[
  {
    "path": ".gitattributes",
    "content": "# Auto detect text files and perform LF normalization\n* text=auto\n\n# Custom for Visual Studio\n*.cs     diff=csharp\n*.sln    merge=union\n*.csproj merge=union\n*.vbproj merge=union\n*.fsproj merge=union\n*.dbproj merge=union\n\n# Standard to msysgit\n*.doc\t diff=astextplain\n*.DOC\t diff=astextplain\n*.docx diff=astextplain\n*.DOCX diff=astextplain\n*.dot  diff=astextplain\n*.DOT  diff=astextplain\n*.pdf  diff=astextplain\n*.PDF\t diff=astextplain\n*.rtf\t diff=astextplain\n*.RTF\t diff=astextplain\n\n**/wwwroot/css/* linguist-vendored\n**/wwwroot/js/* linguist-vendored\n\n**/jquery.js linguist-vendored\n**/bootstrap4.bundle.js linguist-vendore\n**/jquery.min.js linguist-vendoredd\n**/bootstrap4.bundle.min.js linguist-vendored\n**/bootstrap4.css linguist-vendored\n**/bootstrap4.min.css linguist-vendored\n"
  },
  {
    "path": ".github/workflows/cloudscribe-develop.yml",
    "content": "# This workflow will build a .NET project\n# For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-net\n\nname: cloudscribe-simplecontent-develop-nuget-build\n\non:\n  push:\n    branches: [ \"develop\" ]\n  workflow_dispatch:\n#   pull_request:\n#     branches: [ \"develop\" ]\n\njobs:\n  build:\n\n    runs-on: ubuntu-latest\n\n    steps:\n    - uses: actions/checkout@v4\n    - name: Setup .NET\n      uses: actions/setup-dotnet@v4\n      with:\n        dotnet-version: 8.0.x\n    - name: Setup NuGet\n      run: dotnet nuget add source ${{ secrets.NUGET_SOURCE_URL }} -u ${{secrets.NUGET_USERNAME }} -p ${{ secrets.NUGET_PASSWORD }} --store-password-in-clear-text\n    - name: Restore dependencies\n      run: dotnet restore\n    - name: Build\n      run: dotnet build -c Release\n    - name: Create NuGet package\n      run: dotnet pack -c Release\n    - name: Publish NuGet package\n      run: dotnet nuget push **/*.nupkg --source ${{ secrets.NUGET_SOURCE_URL }}\n    - name: Remote Repository Dispatch\n      uses: peter-evans/repository-dispatch@v3\n      with:\n        token: ${{ secrets.GHB_PAT }}\n        repository: GreatHouseBarn/cloudscribe-testing\n        event-type: cs.SimpleContent\n"
  },
  {
    "path": ".github/workflows/cloudscribe-master.yml",
    "content": "# This workflow will build a .NET project\n # For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-net\n \n name: cloudscribe-simplecontent-master-nuget-build\n \n on:\n   push:\n     branches: [ \"master\" ]\n #   pull_request:\n #     branches: [ \"develop\" ]\n \n jobs:\n   build:\n \n     runs-on: ubuntu-latest\n \n     steps:\n     - uses: actions/checkout@v4\n     - name: Setup .NET\n       uses: actions/setup-dotnet@v4\n       with:\n         dotnet-version: 8.0.x\n     - name: Setup NuGet\n       run: dotnet nuget add source ${{ secrets.NUGET_SOURCE_URL }} -u ${{secrets.NUGET_USERNAME }} -p ${{ secrets.NUGET_PASSWORD }} --store-password-in-clear-text\n     - name: Restore dependencies\n       run: dotnet restore\n     - name: Build\n       run: dotnet build -c Release\n   \n"
  },
  {
    "path": ".github/workflows/nuget-push-to-production.yml",
    "content": "name: NuGet Push to Production - ESDM Nexus and nuget.org\n\non:\n  workflow_dispatch:\n\njobs:\n  push-nuget:\n    runs-on: ubuntu-latest\n    steps:  \n      - uses: actions/checkout@v4\n      - name: Setup .NET\n        uses: actions/setup-dotnet@v4\n        with:\n          dotnet-version: 8.0.x\n      - name: Exit if the branch is not master\n        run: |\n          if [[ \"${{ github.ref }}\" != \"refs/heads/master\" ]]; then\n            echo \"Branch is not master, exiting.\"\n            exit 1\n          fi\n      - name: Setup NuGet\n        run: dotnet nuget add source ${{ secrets.NUGET_SOURCE_URL }} -u ${{ secrets.NUGET_USERNAME }} -p ${{ secrets.NUGET_PASSWORD }}  --store-password-in-clear-text --name esdm-nuget-testing\n      - name: Restore dependencies\n        run: dotnet restore\n      - name: Build\n        run: dotnet build -c Release\n      - name: Create NuGet package\n        run: dotnet pack -c Release\n      - name: Auth to other Nexus repo\n        run: dotnet nuget add source ${{ secrets.ESDM_NUGET_HOSTED_URL }} -u ${{ secrets.NUGET_USERNAME }} -p ${{ secrets.NUGET_PASSWORD }}  --store-password-in-clear-text --name esdm-nuget-hosted\n      - name: Find and Push NuGet packages to Nexus\n        run: |\n          PACKAGES=$(find . -name \"*.nupkg\" | grep -E \"cloudscribe|sts\\.\")\n          if [ -z \"$PACKAGES\" ]; then\n            echo \"No matching package found. Exiting.\"\n            exit 1\n          fi\n          echo \"Found packages: $PACKAGES\"\n          for PACKAGE in $PACKAGES; do\n            echo \"Pushing $PACKAGE to Nexus\"\n            dotnet nuget push \"$PACKAGE\" --source esdm-nuget-hosted --skip-duplicate || echo \"WARNING - skipping duplicate package: $PACKAGE\"\n          done\n      - name: Find and Push NuGet packages to nuget.org\n        env:\n          NUGET_ORG_API_KEY: ${{ secrets.NUGET_ORG_API_KEY }}\n        run: |\n          PACKAGES=$(find . -name \"*.nupkg\" | grep -E \"cloudscribe|sts\\.Common\")\n          if [ -z \"$PACKAGES\" ]; then\n            echo \"No matching package found. Exiting.\"\n            exit 1\n          fi\n          echo \"Found packages: $PACKAGES\"\n          for PACKAGE in $PACKAGES; do\n            echo \"Pushing $PACKAGE to nuget.org\"\n            dotnet nuget push \"$PACKAGE\" --api-key \"$NUGET_ORG_API_KEY\" --source \"https://api.nuget.org/v3/index.json\" --skip-duplicate || { echo \"WARNING - failed to upload package: $PACKAGE\"; exit 1; }\n          done\n"
  },
  {
    "path": ".gitignore",
    "content": "## 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.vs/*\n\n# Build results\n[Dd]ebug/\n[Dd]ebugPublic/\n[Rr]elease/\nx64/\nbuild/\nbld/\n[Bb]in/\n[Oo]bj/\n\n_bin*\n*SQLite.Interop.dll\n/nuget/*/lib/net45/*.dll\n/nuget/nupkgs/\n/nuget/*/content/\nnode_modules\nbower_components\nartifacts/*\nproject.lock.json\n\n\n# MSTest test Results\n[Tt]est[Rr]esult*/\n[Bb]uild[Ll]og.*\n\n#NUNIT\n*.VisualState.xml\nTestResult.xml\n\n# Build Results of an ATL Project\n[Dd]ebugPS/\n[Rr]eleasePS/\ndlldata.c\n\n*_i.c\n*_p.c\n*_i.h\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*.tmp_proj\n*.log\n*.vspscc\n*.vssscc\n.builds\n*.pidb\n*.svclog\n*.scc\n\n# Chutzpah Test files\n_Chutzpah*\n\n# Visual C++ cache files\nipch/\n*.aps\n*.ncb\n*.opensdf\n*.sdf\n*.cachefile\n\n# Visual Studio profiler\n*.psess\n*.vsp\n*.vspx\n\n# TFS 2012 Local Workspace\n$tf/\n\n# Guidance Automation Toolkit\n*.gpState\n\n# ReSharper is a .NET coding add-in\n_ReSharper*/\n*.[Rr]e[Ss]harper\n*.DotSettings.user\n\n# JustCode is a .NET coding addin-in\n.JustCode\n\n# TeamCity is a build add-in\n_TeamCity*\n\n# DotCover is a Code Coverage Tool\n*.dotCover\n\n# NCrunch\n*.ncrunch*\n_NCrunch_*\n.*crunch*.local.xml\n\n# MightyMoose\n*.mm.*\nAutoTest.Net/\n\n# Web workbench (sass)\n.sass-cache/\n\n# Installshield output folder\n[Ee]xpress/\n\n# DocProject is a documentation generator add-in\nDocProject/buildhelp/\nDocProject/Help/*.HxT\nDocProject/Help/*.HxC\nDocProject/Help/*.hhc\nDocProject/Help/*.hhk\nDocProject/Help/*.hhp\nDocProject/Help/Html2\nDocProject/Help/html\n\n# Click-Once directory\npublish/\n\n# Publish Web Output\n*.[Pp]ublish.xml\n*.azurePubxml\n\n# NuGet Packages Directory\npackages/\n## TODO: If the tool you use requires repositories.config uncomment the next line\n#!packages/repositories.config\n\n# Enable \"build/\" folder in the NuGet Packages folder since NuGet packages use it for MSBuild targets\n# This line needs to be after the ignore of the build folder (and the packages folder if the line above has been uncommented)\n!packages/build/\n\n# Windows Azure Build Output\ncsx/\n*.build.csdef\n\n# Windows Store app package directory\nAppPackages/\n\n# Others\nsql/\n*.Cache\nClientBin/\n[Ss]tyle[Cc]op.*\n~$*\n*~\n*.dbmdl\n*.dbproj.schemaview\n*.pfx\n*.publishsettings\nnode_modules/\n\n# RIA/Silverlight projects\nGenerated_Code/\n\n# Backup & report files from converting an old project file to a newer\n# Visual Studio version. Backup files are not needed, because we have git ;-)\n_UpgradeReport_Files/\nBackup*/\nUpgradeLog*.XML\nUpgradeLog*.htm\n\n# SQL Server files\n*.mdf\n*.ldf\n\n# Business Intelligence projects\n*.rdl.data\n*.bim.layout\n*.bim_*.settings\n\n# Microsoft Fakes\nFakesAssemblies/\n\nsrc/cloudscribe-core/.vs/config/applicationhost.config\n\n**/wwwroot/lib*\n# src/example.WebApp/wwwroot/js/*\n# src/example.WebApp/wwwroot/css/site.min.css\n\nsrc/example.WebApp/appsettings.local.overrides.json\n\nsrc/example.WebApp/cloudscribe_config/firebirddb/*\nsrc/example.WebApp/cloudscribe_config/sqlitedb/*\n\nsrc/example.WebApp/Themes/joeaudette/**\nsrc/example.WebApp/nodb_storage/**\n\nsrc/example.WebApp/wwwroot/s1/**\nsrc/example.WebApp/wwwroot/s2/**\nsrc/example.WebApp/wwwroot/s3/**\n\n\nsrc/cloudscribe.Core.Repositories.EF/appsettings.local.overrides.json\nsrc/cloudscribe.Logging.EF/appsettings.local.overrides.json\n**/dp_keys/**\nsamples/simpleauthnodb/.vs/**\nsrc/cloudscribe.SimpleContent.Storage.EF/appsettings.local.overrides.json\nsrc/cloudscribe.SimpleContent.Storage.EFCore/appsettings.local.overrides.json\n**/.vs/**\n**/nodb_storage/projects/default/logitem/**\nsrc/cloudscribe.SimpleContent.Storage.EFCore.MSSQL/appsettings.local.overrides.json\nsrc/cloudscribe.SimpleContent.Storage.EFCore.MySQL/appsettings.local.overrides.json\nsrc/cloudscribe.SimpleContent.Storage.EFCore.pgsql/appsettings.local.overrides.json\nsrc/example.WebApp/navigation.f83067b4-919d-4910-acd1-4b3b1c210ecf.xml\n**/appsettings.dev.json\n**/appsettings.Development.json\nsrc/example.WebApp/xnavigation.f83067b4-919d-4910-acd1-4b3b1c210ecf.xml\n# **/sitefiles/s1/wwwroot/**\n**/sitefiles/s2/wwwroot/**\n**/sitefiles/s3/wwwroot/**\nsrc/sourceDev.WebApp/appsettings.Development.json\nsrc/sourceDev.WebApp/nodb_storage/projects/**/userlocation/**\nsrc/sourceDev.WebApp/nodb_storage/projects/**/contenthistory/**\n\nsrc/sourceDev.WebApp/cloudscribe-dev.db\nsrc/sourceDev.WebApp/cloudscribe4-dev.db\n**/wwwroot/dist/**\n**/app-react/**/*.js\n**/app-react/**/*.map\n**/app-react/*.js\n**/app-react/*.map\n\n# Cake\ntools/**\n!tools/packages.config\nsrc/sourceDev.WebApp/sitefiles/s1/wwwroot/media/images/img_3646.jpg\nsrc/sourceDev.WebApp/sitefiles/s1/wwwroot/media/images/img_3646-ws.jpg\nsrc/sourceDev.WebApp/sitefiles/s1/wwwroot/media/testimages/**\nsrc/sourceDev.WebApp/cloudscribe1-dev.db\n\n\nsiteuploadfiles/\n"
  },
  {
    "path": ".travis.yml",
    "content": "language: csharp\nsolution: cloudscribe.SimpleContent.sln\nsudo: false\ndist: xenial\nmono: none\ndotnet: 3.0.100\nenv:\n  global:\n    - DOTNET_SKIP_FIRST_TIME_EXPERIENCE: true\n    - DOTNET_CLI_TELEMETRY_OPTOUT: 1   \nos:\n  - linux\n\nscript:\n  - dotnet restore\n  - dotnet build -c Release\n#  - dotnet test -c Release ./test/cloudscribe.SimpleContent.Web.Tests/cloudscribe.SimpleContent.Web.Tests.csproj\n\n\nbranches:\n  only:\n    - master\n\n\n\n"
  },
  {
    "path": ".vscode/launch.json",
    "content": "{\n    // Use IntelliSense to learn about possible attributes.\n    // Hover to view descriptions of existing attributes.\n    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387\n    \"version\": \"0.2.0\",\n    \"configurations\": [\n        {\n            \"name\": \"web-dev\",\n            \"type\": \"coreclr\",\n            \"request\": \"launch\",\n            \"preLaunchTask\": \"build\",\n            \"program\": \"${workspaceRoot}/src/sourceDev.WebApp/bin/Debug/net6.0/sourceDev.WebApp.dll\",\n            \"args\": [],\n            \"cwd\": \"${workspaceRoot}/src/sourceDev.WebApp\",\n            \"stopAtEntry\": false,\n            \"internalConsoleOptions\": \"openOnSessionStart\",\n            \"launchBrowser\": {\n                \"enabled\": true,\n                \"args\": \"${auto-detect-url}\",\n                \"windows\": {\n                    \"command\": \"cmd.exe\",\n                    \"args\": \"/C start ${auto-detect-url}\"\n                },\n                \"osx\": {\n                    \"command\": \"open\"\n                },\n                \"linux\": {\n                    \"command\": \"xdg-open\"\n                }\n            },\n            \"env\": {\n                \"ASPNETCORE_ENVIRONMENT\": \"Development\",\n                \"ASPNETCORE_URLS\": \"https://localhost:44348\"\n            }\n        },\n\n        {\n            \"name\": \"web-prod\",\n            \"type\": \"coreclr\",\n            \"request\": \"launch\",\n            \"preLaunchTask\": \"build\",\n            \"program\": \"${workspaceRoot}/src/sourceDev.WebApp/bin/Debug/net6.0/sourceDev.WebApp.dll\",\n            \"args\": [],\n            \"cwd\": \"${workspaceRoot}/src/sourceDev.WebApp\",\n            \"stopAtEntry\": false,\n            \"internalConsoleOptions\": \"openOnSessionStart\",\n            \"launchBrowser\": {\n                \"enabled\": true,\n                \"args\": \"${auto-detect-url}\",\n                \"windows\": {\n                    \"command\": \"cmd.exe\",\n                    \"args\": \"/C start ${auto-detect-url}\"\n                },\n                \"osx\": {\n                    \"command\": \"open\"\n                },\n                \"linux\": {\n                    \"command\": \"xdg-open\"\n                }\n            },\n            \"env\": {\n                \"ASPNETCORE_ENVIRONMENT\": \"Production\",\n                \"ASPNETCORE_URLS\": \"https://localhost:44348\"\n            }\n        },\n\n        {\n            \"name\": \".NET Core Attach\",\n            \"type\": \"coreclr\",\n            \"request\": \"attach\",\n            \"processId\": \"${command:pickProcess}\"\n        }\n    ]\n}"
  },
  {
    "path": ".vscode/tasks.json",
    "content": "{\n    // See https://go.microsoft.com/fwlink/?LinkId=733558\n    // for the documentation about the tasks.json format\n    \"version\": \"2.0.0\",\n    \"tasks\": [\n        {\n            \"taskName\": \"build\",\n            \"command\": \"dotnet build\",\n            \"type\": \"shell\",\n            \"group\": \"build\",\n            \"presentation\": {\n                \"reveal\": \"silent\"\n            },\n            \"problemMatcher\": \"$msCompile\"\n        }\n    ]\n}"
  },
  {
    "path": "CONTRIBUTING.md",
    "content": "# Contributing to cloudscribe\n\nThis project is part of the cloudscribe set of projects which are all being managed under the same policies.  \nSee the CONTRIBUTING.md file in the main cloudscribe repository:  \nhttps://github.com/cloudscribe/cloudscribe/blob/master/CONTRIBUTING.md  \n\n"
  },
  {
    "path": "LICENSE",
    "content": "                                 Apache License\n                           Version 2.0, January 2004\n                        http://www.apache.org/licenses/\n\n   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n   1. Definitions.\n\n      \"License\" shall mean the terms and conditions for use, reproduction,\n      and distribution as defined by Sections 1 through 9 of this document.\n\n      \"Licensor\" shall mean the copyright owner or entity authorized by\n      the copyright owner that is granting the License.\n\n      \"Legal Entity\" shall mean the union of the acting entity and all\n      other entities that control, are controlled by, or are under common\n      control with that entity. For the purposes of this definition,\n      \"control\" means (i) the power, direct or indirect, to cause the\n      direction or management of such entity, whether by contract or\n      otherwise, or (ii) ownership of fifty percent (50%) or more of the\n      outstanding shares, or (iii) beneficial ownership of such entity.\n\n      \"You\" (or \"Your\") shall mean an individual or Legal Entity\n      exercising permissions granted by this License.\n\n      \"Source\" form shall mean the preferred form for making modifications,\n      including but not limited to software source code, documentation\n      source, and configuration files.\n\n      \"Object\" form shall mean any form resulting from mechanical\n      transformation or translation of a Source form, including but\n      not limited to compiled object code, generated documentation,\n      and conversions to other media types.\n\n      \"Work\" shall mean the work of authorship, whether in Source or\n      Object form, made available under the License, as indicated by a\n      copyright notice that is included in or attached to the work\n      (an example is provided in the Appendix below).\n\n      \"Derivative Works\" shall mean any work, whether in Source or Object\n      form, that is based on (or derived from) the Work and for which the\n      editorial revisions, annotations, elaborations, or other modifications\n      represent, as a whole, an original work of authorship. For the purposes\n      of this License, Derivative Works shall not include works that remain\n      separable from, or merely link (or bind by name) to the interfaces of,\n      the Work and Derivative Works thereof.\n\n      \"Contribution\" shall mean any work of authorship, including\n      the original version of the Work and any modifications or additions\n      to that Work or Derivative Works thereof, that is intentionally\n      submitted to Licensor for inclusion in the Work by the copyright owner\n      or by an individual or Legal Entity authorized to submit on behalf of\n      the copyright owner. For the purposes of this definition, \"submitted\"\n      means any form of electronic, verbal, or written communication sent\n      to the Licensor or its representatives, including but not limited to\n      communication on electronic mailing lists, source code control systems,\n      and issue tracking systems that are managed by, or on behalf of, the\n      Licensor for the purpose of discussing and improving the Work, but\n      excluding communication that is conspicuously marked or otherwise\n      designated in writing by the copyright owner as \"Not a Contribution.\"\n\n      \"Contributor\" shall mean Licensor and any individual or Legal Entity\n      on behalf of whom a Contribution has been received by Licensor and\n      subsequently incorporated within the Work.\n\n   2. Grant of Copyright License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      copyright license to reproduce, prepare Derivative Works of,\n      publicly display, publicly perform, sublicense, and distribute the\n      Work and such Derivative Works in Source or Object form.\n\n   3. Grant of Patent License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      (except as stated in this section) patent license to make, have made,\n      use, offer to sell, sell, import, and otherwise transfer the Work,\n      where such license applies only to those patent claims licensable\n      by such Contributor that are necessarily infringed by their\n      Contribution(s) alone or by combination of their Contribution(s)\n      with the Work to which such Contribution(s) was submitted. If You\n      institute patent litigation against any entity (including a\n      cross-claim or counterclaim in a lawsuit) alleging that the Work\n      or a Contribution incorporated within the Work constitutes direct\n      or contributory patent infringement, then any patent licenses\n      granted to You under this License for that Work shall terminate\n      as of the date such litigation is filed.\n\n   4. Redistribution. You may reproduce and distribute copies of the\n      Work or Derivative Works thereof in any medium, with or without\n      modifications, and in Source or Object form, provided that You\n      meet the following conditions:\n\n      (a) You must give any other recipients of the Work or\n          Derivative Works a copy of this License; and\n\n      (b) You must cause any modified files to carry prominent notices\n          stating that You changed the files; and\n\n      (c) You must retain, in the Source form of any Derivative Works\n          that You distribute, all copyright, patent, trademark, and\n          attribution notices from the Source form of the Work,\n          excluding those notices that do not pertain to any part of\n          the Derivative Works; and\n\n      (d) If the Work includes a \"NOTICE\" text file as part of its\n          distribution, then any Derivative Works that You distribute must\n          include a readable copy of the attribution notices contained\n          within such NOTICE file, excluding those notices that do not\n          pertain to any part of the Derivative Works, in at least one\n          of the following places: within a NOTICE text file distributed\n          as part of the Derivative Works; within the Source form or\n          documentation, if provided along with the Derivative Works; or,\n          within a display generated by the Derivative Works, if and\n          wherever such third-party notices normally appear. The contents\n          of the NOTICE file are for informational purposes only and\n          do not modify the License. You may add Your own attribution\n          notices within Derivative Works that You distribute, alongside\n          or as an addendum to the NOTICE text from the Work, provided\n          that such additional attribution notices cannot be construed\n          as modifying the License.\n\n      You may add Your own copyright statement to Your modifications and\n      may provide additional or different license terms and conditions\n      for use, reproduction, or distribution of Your modifications, or\n      for any such Derivative Works as a whole, provided Your use,\n      reproduction, and distribution of the Work otherwise complies with\n      the conditions stated in this License.\n\n   5. Submission of Contributions. Unless You explicitly state otherwise,\n      any Contribution intentionally submitted for inclusion in the Work\n      by You to the Licensor shall be under the terms and conditions of\n      this License, without any additional terms or conditions.\n      Notwithstanding the above, nothing herein shall supersede or modify\n      the terms of any separate license agreement you may have executed\n      with Licensor regarding such Contributions.\n\n   6. Trademarks. This License does not grant permission to use the trade\n      names, trademarks, service marks, or product names of the Licensor,\n      except as required for reasonable and customary use in describing the\n      origin of the Work and reproducing the content of the NOTICE file.\n\n   7. Disclaimer of Warranty. Unless required by applicable law or\n      agreed to in writing, Licensor provides the Work (and each\n      Contributor provides its Contributions) on an \"AS IS\" BASIS,\n      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n      implied, including, without limitation, any warranties or conditions\n      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n      PARTICULAR PURPOSE. You are solely responsible for determining the\n      appropriateness of using or redistributing the Work and assume any\n      risks associated with Your exercise of permissions under this License.\n\n   8. Limitation of Liability. In no event and under no legal theory,\n      whether in tort (including negligence), contract, or otherwise,\n      unless required by applicable law (such as deliberate and grossly\n      negligent acts) or agreed to in writing, shall any Contributor be\n      liable to You for damages, including any direct, indirect, special,\n      incidental, or consequential damages of any character arising as a\n      result of this License or out of the use or inability to use the\n      Work (including but not limited to damages for loss of goodwill,\n      work stoppage, computer failure or malfunction, or any and all\n      other commercial damages or losses), even if such Contributor\n      has been advised of the possibility of such damages.\n\n   9. Accepting Warranty or Additional Liability. While redistributing\n      the Work or Derivative Works thereof, You may choose to offer,\n      and charge a fee for, acceptance of support, warranty, indemnity,\n      or other liability obligations and/or rights consistent with this\n      License. However, in accepting such obligations, You may act only\n      on Your own behalf and on Your sole responsibility, not on behalf\n      of any other Contributor, and only if You agree to indemnify,\n      defend, and hold each Contributor harmless for any liability\n      incurred by, or claims asserted against, such Contributor by reason\n      of your accepting any such warranty or additional liability.\n\n   END OF TERMS AND CONDITIONS\n\n   APPENDIX: How to apply the Apache License to your work.\n\n      To apply the Apache License to your work, attach the following\n      boilerplate notice, with the fields enclosed by brackets \"{}\"\n      replaced with your own identifying information. (Don't include\n      the brackets!)  The text should be enclosed in the appropriate\n      comment syntax for the file format. We also recommend that a\n      file or class name and description of purpose be included on the\n      same \"printed page\" as the copyright notice for easier\n      identification within third-party archives.\n\n   Copyright {yyyy} {name of copyright owner}\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n       http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n\n"
  },
  {
    "path": "NuGet.Config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<configuration>\n</configuration>\n"
  },
  {
    "path": "README.md",
    "content": "# cloudscribe SimpleContent\n\nA simple, yet flexible content and blog engine for ASP.NET Core that can work with or without a database. This project has borrowed significantly from [Mads Kristensen's MiniBlog](https://github.com/madskristensen/MiniBlog) both for ideas and code but re-implemented and extended in the newer ASP.NET Core framework. Get the big picture at [cloudscribe.com](https://www.cloudscribe.com/docs/introduction) \n\n[Documentation](https://www.cloudscribe.com/docs/cloudscribe-simplecontent) - in progress so check back often. Also note that cloudscribe SimpleContent is being used to make the documentation on [cloudscribe.com](https://www.cloudscribe.com)\n\nIf you have questions, please visit our community forums https://www.cloudscribe.com/forum \n\n### Build Status\n\n<!--\n| Windows  | Linux |\n| ------------- | ------------- |\n| [![Build status](https://ci.appveyor.com/api/projects/status/d0900wcf3y7l7jup/branch/master?svg=true)](https://ci.appveyor.com/project/joeaudette/cloudscribe-simplecontent/branch/master)  | [![Build Status](https://travis-ci.org/cloudscribe/cloudscribe.SimpleContent.svg?branch=master)](https://travis-ci.org/cloudscribe/cloudscribe.SimpleContent) |\n\n[![Twitter URL](https://img.shields.io/twitter/url/http/shields.io.svg?style=social)](https://twitter.com/cloudscribeweb) [![Twitter Follow](https://img.shields.io/twitter/follow/cloudscribeweb.svg?style=social&label=Follow)](https://twitter.com/cloudscribeweb)\n-->\n\n<!-- Making badges prettier: -->\n[![SimpleContent Build Devel](https://img.shields.io/github/actions/workflow/status/cloudscribe/cloudscribe.SimpleContent/cloudscribe-develop.yml?branch=develop&event=push&style=for-the-badge&label=🚀%20Develop%20Branch)](https://github.com/cloudscribe/cloudscribe.SimpleContent/actions/workflows/cloudscribe-develop.yml)\n\n[![SimpleContent Build Master](https://img.shields.io/github/actions/workflow/status/cloudscribe/cloudscribe.SimpleContent/cloudscribe-master.yml?branch=master&event=push&style=for-the-badge&label=🚀%20Main%20Branch)](https://github.com/cloudscribe/cloudscribe.SimpleContent/actions/workflows/cloudscribe-master.yml)\n## Getting Started\n\nSee the [Introduction](https://www.cloudscribe.com/docs/introduction) to get the big picture and learn how to start new projects using our project template for Visual Studio or the .NET Core CLI\n\n### Current Features\n* Supports markdown and/or html editing, the [documentation on using markdown](https://www.cloudscribe.com/docs/using-markdown)\n* Create and edit pages and blog posts right from the web browser or using [Open Live Writer](https://www.cloudscribe.com/docs/using-open-live-writer)\n* Built in image browser, uploader, cropper, with configurable automatic resizing, and even drag/drop images right into the editor\n* Built in Page Manager - for easy drag/drop arrangement of the page hierarchy\n* For technical articles includes built in syntax highlighter using the [CodeSnippet plugin in CKEditor](https://www.cloudscribe.com/docs/customizing-the-editor)\n* Pages can be protected by roles for private or premium content\n* Schedule posts and pages to be published on a future date\n* Supports blog urls with or without date segments\n* Optional internal comment system for the blog. Built in support for Disqus and not difficult to integrate some other comment system\n* RSS feed built in at /api/rss\n* [Google Site Map](https://www.cloudscribe.com/docs/easy-google-sitemaps) built in at /api/sitemap\n* Responsive [theming support](https://www.cloudscribe.com/docs/themes-and-web-design) based on Bootstrap\n* Uses HTML 5 microdata to add semantic meaning and improve SEO\n* Cross platform, runs on ASP.NET Core which works on Windows, Mac, and Linux\n* Comments support - can easily be replaced by 3rd-party commenting systems such as Disqus\n* No database required - can use [markdown](https://www.cloudscribe.com/docs/using-markdown) or json for pages and can use markdown or xml for blog posts via [NoDb](https://github.com/joeaudette/NoDb). The XML format is the same as MiniBlog and BlogEngine.NET and you should be able to [migrate from other platforms](https://www.cloudscribe.com/docs/migrating-content-from-other-platforms)\n* You can optionally use a database - it currently supports SQLite, MS SQL, PostgresSql, and MySql using Entity Framework Core\n* Can use either [cloudscribe Core](https://www.cloudscribe.com/docs/cloudscribe-core) or [cloudscribe SimpleAuth](https://github.com/joeaudette/cloudscribe.Web.SimpleAuth) for user accounts. (I recommend use cloudscribe Core even for small sites)\n* Can also be [integrated with other authentication systems](https://www.cloudscribe.com/docs/integrating-with-other-authentication-systems)\n* Supports [multiple tenants](https://www.cloudscribe.com/docs/multi-tenant-support) via integration using cloudscribe Core\n* [Supports Localization](https://www.cloudscribe.com/docs/localization)\n\n### Planned Features\n* Support for using MongoDb - hoping for a community member to do that\n* A Utility for importing the NoDb content into Entity Framework Core or MongoDb for easy migration\n\n### Screenshots\n\n![Blog Screen shot](https://github.com/joeaudette/cloudscribe.SimpleContent/raw/master/screenshots/blog-index.png)\n\n![page edit screen shot](https://github.com/joeaudette/cloudscribe.SimpleContent/raw/master/screenshots/page-edit.png)\n\n![file browser Screen shot](https://github.com/joeaudette/cloudscribe.SimpleContent/raw/master/screenshots/file-browser.png)\n\n![file selection Screen shot](https://github.com/joeaudette/cloudscribe.SimpleContent/raw/master/screenshots/image-selection.png)\n\n![image cropper Screen shot](https://github.com/joeaudette/cloudscribe.SimpleContent/raw/master/screenshots/image-cropper.png)\n\n![Blog Screen shot](https://github.com/joeaudette/cloudscribe.SimpleContent/raw/master/screenshots/drag-drop-page-manager.png)\n\n## Start simple with no database and migrate to a database later if you need one\n\nNot all web site projects need a database, there can be many benefits to not using one including performance, scalability, portability, lower cost, and ease of making backup copies of the entire site. It should even be possible to make a site that runs from a thumb drive.\n\nIn fact, for blogs, there has been kind of a trend towards using [Static Site Generators](https://www.staticgen.com/). This project is not a static site generator, but by storing content as json files it can get some of the same benefits and be used in a similar way to using a static site generator. For example you could host a localhost or intranet version of your site for producing and reviewing content, then when ready to publish you could commit the changes to a git repository and then do deployment from git to Azure for example, which would give you a highly scaleable site without the need or cost of a database and with a complete history of changes in git. Personal blogs and sites and small brochure sites are good candidates for not using a database.\n\nSome sites do need a database though and we plan to support using both Entity Framework Core and MongoDb. If you need users to be able to register on your site or if you have more than a few editors, or for larger projects, you will typically want a database.\n\nMy plan is to usually build sites without a database (except for large projects), but implement a migration utility to be able to migrate any site from files to a database later if the needs of the project require it.\n\n"
  },
  {
    "path": "appveyor-cake-backup.yml",
    "content": "image: Visual Studio 2019\nenvironment:\n  nodejs_version: \"13.0.1\"\ninstall:\n  # Get the latest stable version of Node.js or io.js\n  - ps: Install-Product node $env:nodejs_version\n  - ps: $env:BuildNumber= $env:APPVEYOR_BUILD_NUMBER\n  # install modules\n  - npm install\ninit:\n  - git config --global core.autocrlf true\nbuild_script:\n- cmd: PowerShell -Version 2.0 .\\build.ps1\ntest: off\n\n"
  },
  {
    "path": "appveyor.yml",
    "content": "image: Visual Studio 2022\nenvironment:\n  nodejs_version: \"13.0.1\"\n# Install scripts. (runs after repo cloning)\ninstall:\n  # Get the latest stable version of Node.js or io.js\n  - ps: Install-Product node $env:nodejs_version\n  - ps: $env:BuildNumber= $env:APPVEYOR_BUILD_NUMBER\n  # install modules\n  - npm install\ninit:\n  - git config --global core.autocrlf true\nbuild_script:\n  - dotnet restore\n  - dotnet build -c Release\ntest: off\n\n\n  \n"
  },
  {
    "path": "build.cake",
    "content": "#tool nuget:?package=xunit.runner.console&version=2.3.0\n#tool nuget:?package=xunit.runner.visualstudio&version=2.3.0\n\n#load cake/paths.cake\n\nvar target = Argument(\"Target\", \"Default\");\nvar configuration = Argument(\"Configuration\", \"Release\");\n\n\nTask(\"Restore\")\n    .Does(() =>\n{\n    NuGetRestore(Paths.SolutionFile);\n});\n\nTask(\"Build\")\n    .IsDependentOn(\"Restore\")\n    .Does(() =>\n{\n    MSBuild(\n        Paths.SolutionFile,\n        settings => settings.SetConfiguration(configuration)\n                            .WithTarget(\"Build\"));\n});\n\nTask(\"Test\")  \n    .IsDependentOn(\"Build\")\n    .Does(() =>\n    {\n        var projects = GetFiles(\"./test/**/*.csproj\");\n        foreach(var project in projects)\n        {\n            DotNetCoreTool(\n                projectPath: project.FullPath, \n                command: \"xunit\", \n                arguments: $\"-configuration {configuration} -diagnostics -stoponfail\"\n            );\n        }\n    });\n\nTask(\"Default\")\n    .IsDependentOn(\"Build\");\n\nRunTarget(target);\n"
  },
  {
    "path": "build.ps1",
    "content": "##########################################################################\n# This is the Cake bootstrapper script for PowerShell.\n# This file was downloaded from https://github.com/cake-build/resources\n# Feel free to change this file to fit your needs.\n##########################################################################\n\n<#\n\n.SYNOPSIS\nThis is a Powershell script to bootstrap a Cake build.\n\n.DESCRIPTION\nThis Powershell script will download NuGet if missing, restore NuGet tools (including Cake)\nand execute your Cake build script with the parameters you provide.\n\n.PARAMETER Script\nThe build script to execute.\n.PARAMETER Target\nThe build script target to run.\n.PARAMETER Configuration\nThe build configuration to use.\n.PARAMETER Verbosity\nSpecifies the amount of information to be displayed.\n.PARAMETER ShowDescription\nShows description about tasks.\n.PARAMETER DryRun\nPerforms a dry run.\n.PARAMETER Experimental\nUses the nightly builds of the Roslyn script engine.\n.PARAMETER Mono\nUses the Mono Compiler rather than the Roslyn script engine.\n.PARAMETER SkipToolPackageRestore\nSkips restoring of packages.\n.PARAMETER ScriptArgs\nRemaining arguments are added here.\n\n.LINK\nhttps://cakebuild.net\n\n#>\n\n[CmdletBinding()]\nParam(\n    [string]$Script = \"build.cake\",\n    [string]$Target,\n    [string]$Configuration,\n    [ValidateSet(\"Quiet\", \"Minimal\", \"Normal\", \"Verbose\", \"Diagnostic\")]\n    [string]$Verbosity,\n    [switch]$ShowDescription,\n    [Alias(\"WhatIf\", \"Noop\")]\n    [switch]$DryRun,\n    [switch]$Experimental,\n    [switch]$Mono,\n    [switch]$SkipToolPackageRestore,\n    [Parameter(Position=0,Mandatory=$false,ValueFromRemainingArguments=$true)]\n    [string[]]$ScriptArgs\n)\n\n[Reflection.Assembly]::LoadWithPartialName(\"System.Security\") | Out-Null\nfunction MD5HashFile([string] $filePath)\n{\n    if ([string]::IsNullOrEmpty($filePath) -or !(Test-Path $filePath -PathType Leaf))\n    {\n        return $null\n    }\n\n    [System.IO.Stream] $file = $null;\n    [System.Security.Cryptography.MD5] $md5 = $null;\n    try\n    {\n        $md5 = [System.Security.Cryptography.MD5]::Create()\n        $file = [System.IO.File]::OpenRead($filePath)\n        return [System.BitConverter]::ToString($md5.ComputeHash($file))\n    }\n    finally\n    {\n        if ($file -ne $null)\n        {\n            $file.Dispose()\n        }\n    }\n}\n\nfunction GetProxyEnabledWebClient\n{\n    $wc = New-Object System.Net.WebClient\n    $proxy = [System.Net.WebRequest]::GetSystemWebProxy()\n    $proxy.Credentials = [System.Net.CredentialCache]::DefaultCredentials        \n    $wc.Proxy = $proxy\n    return $wc\n}\n\nWrite-Host \"Preparing to run build script...\"\n\nif(!$PSScriptRoot){\n    $PSScriptRoot = Split-Path $MyInvocation.MyCommand.Path -Parent\n}\n\n$TOOLS_DIR = Join-Path $PSScriptRoot \"tools\"\n$ADDINS_DIR = Join-Path $TOOLS_DIR \"Addins\"\n$MODULES_DIR = Join-Path $TOOLS_DIR \"Modules\"\n$NUGET_EXE = Join-Path $TOOLS_DIR \"nuget.exe\"\n$CAKE_EXE = Join-Path $TOOLS_DIR \"Cake/Cake.exe\"\n$NUGET_URL = \"https://dist.nuget.org/win-x86-commandline/latest/nuget.exe\"\n$PACKAGES_CONFIG = Join-Path $TOOLS_DIR \"packages.config\"\n$PACKAGES_CONFIG_MD5 = Join-Path $TOOLS_DIR \"packages.config.md5sum\"\n$ADDINS_PACKAGES_CONFIG = Join-Path $ADDINS_DIR \"packages.config\"\n$MODULES_PACKAGES_CONFIG = Join-Path $MODULES_DIR \"packages.config\"\n\n# Make sure tools folder exists\nif ((Test-Path $PSScriptRoot) -and !(Test-Path $TOOLS_DIR)) {\n    Write-Verbose -Message \"Creating tools directory...\"\n    New-Item -Path $TOOLS_DIR -Type directory | out-null\n}\n\n# Make sure that packages.config exist.\nif (!(Test-Path $PACKAGES_CONFIG)) {\n    Write-Verbose -Message \"Downloading packages.config...\"    \n    try {        \n        $wc = GetProxyEnabledWebClient\n        $wc.DownloadFile(\"https://cakebuild.net/download/bootstrapper/packages\", $PACKAGES_CONFIG) } catch {\n        Throw \"Could not download packages.config.\"\n    }\n}\n\n# Try find NuGet.exe in path if not exists\nif (!(Test-Path $NUGET_EXE)) {\n    Write-Verbose -Message \"Trying to find nuget.exe in PATH...\"\n    $existingPaths = $Env:Path -Split ';' | Where-Object { (![string]::IsNullOrEmpty($_)) -and (Test-Path $_ -PathType Container) }\n    $NUGET_EXE_IN_PATH = Get-ChildItem -Path $existingPaths -Filter \"nuget.exe\" | Select -First 1\n    if ($NUGET_EXE_IN_PATH -ne $null -and (Test-Path $NUGET_EXE_IN_PATH.FullName)) {\n        Write-Verbose -Message \"Found in PATH at $($NUGET_EXE_IN_PATH.FullName).\"\n        $NUGET_EXE = $NUGET_EXE_IN_PATH.FullName\n    }\n}\n\n# Try download NuGet.exe if not exists\nif (!(Test-Path $NUGET_EXE)) {\n    Write-Verbose -Message \"Downloading NuGet.exe...\"\n    try {\n        $wc = GetProxyEnabledWebClient\n        $wc.DownloadFile($NUGET_URL, $NUGET_EXE)\n    } catch {\n        Throw \"Could not download NuGet.exe.\"\n    }\n}\n\n# Save nuget.exe path to environment to be available to child processed\n$ENV:NUGET_EXE = $NUGET_EXE\n\n# Restore tools from NuGet?\nif(-Not $SkipToolPackageRestore.IsPresent) {\n    Push-Location\n    Set-Location $TOOLS_DIR\n\n    # Check for changes in packages.config and remove installed tools if true.\n    [string] $md5Hash = MD5HashFile($PACKAGES_CONFIG)\n    if((!(Test-Path $PACKAGES_CONFIG_MD5)) -Or\n      ($md5Hash -ne (Get-Content $PACKAGES_CONFIG_MD5 ))) {\n        Write-Verbose -Message \"Missing or changed package.config hash...\"\n        Remove-Item * -Recurse -Exclude packages.config,nuget.exe\n    }\n\n    Write-Verbose -Message \"Restoring tools from NuGet...\"\n    $NuGetOutput = Invoke-Expression \"&`\"$NUGET_EXE`\" install -ExcludeVersion -OutputDirectory `\"$TOOLS_DIR`\"\"\n\n    if ($LASTEXITCODE -ne 0) {\n        Throw \"An error occurred while restoring NuGet tools.\"\n    }\n    else\n    {\n        $md5Hash | Out-File $PACKAGES_CONFIG_MD5 -Encoding \"ASCII\"\n    }\n    Write-Verbose -Message ($NuGetOutput | out-string)\n\n    Pop-Location\n}\n\n# Restore addins from NuGet\nif (Test-Path $ADDINS_PACKAGES_CONFIG) {\n    Push-Location\n    Set-Location $ADDINS_DIR\n\n    Write-Verbose -Message \"Restoring addins from NuGet...\"\n    $NuGetOutput = Invoke-Expression \"&`\"$NUGET_EXE`\" install -ExcludeVersion -OutputDirectory `\"$ADDINS_DIR`\"\"\n\n    if ($LASTEXITCODE -ne 0) {\n        Throw \"An error occurred while restoring NuGet addins.\"\n    }\n\n    Write-Verbose -Message ($NuGetOutput | out-string)\n\n    Pop-Location\n}\n\n# Restore modules from NuGet\nif (Test-Path $MODULES_PACKAGES_CONFIG) {\n    Push-Location\n    Set-Location $MODULES_DIR\n\n    Write-Verbose -Message \"Restoring modules from NuGet...\"\n    $NuGetOutput = Invoke-Expression \"&`\"$NUGET_EXE`\" install -ExcludeVersion -OutputDirectory `\"$MODULES_DIR`\"\"\n\n    if ($LASTEXITCODE -ne 0) {\n        Throw \"An error occurred while restoring NuGet modules.\"\n    }\n\n    Write-Verbose -Message ($NuGetOutput | out-string)\n\n    Pop-Location\n}\n\n# Make sure that Cake has been installed.\nif (!(Test-Path $CAKE_EXE)) {\n    Throw \"Could not find Cake.exe at $CAKE_EXE\"\n}\n\n\n\n# Build Cake arguments\n$cakeArguments = @(\"$Script\");\nif ($Target) { $cakeArguments += \"-target=$Target\" }\nif ($Configuration) { $cakeArguments += \"-configuration=$Configuration\" }\nif ($Verbosity) { $cakeArguments += \"-verbosity=$Verbosity\" }\nif ($ShowDescription) { $cakeArguments += \"-showdescription\" }\nif ($DryRun) { $cakeArguments += \"-dryrun\" }\nif ($Experimental) { $cakeArguments += \"-experimental\" }\nif ($Mono) { $cakeArguments += \"-mono\" }\n$cakeArguments += $ScriptArgs\n\n# Start Cake\nWrite-Host \"Running build script...\"\n&$CAKE_EXE $cakeArguments\nexit $LASTEXITCODE\n"
  },
  {
    "path": "build.sh",
    "content": "#!/usr/bin/env bash\n\n##########################################################################\n# This is the Cake bootstrapper script for Linux and OS X.\n# This file was downloaded from https://github.com/cake-build/resources\n# Feel free to change this file to fit your needs.\n##########################################################################\n\n# Define directories.\nSCRIPT_DIR=$( cd \"$( dirname \"${BASH_SOURCE[0]}\" )\" && pwd )\nTOOLS_DIR=$SCRIPT_DIR/tools\nNUGET_EXE=$TOOLS_DIR/nuget.exe\nCAKE_EXE=$TOOLS_DIR/Cake/Cake.exe\nPACKAGES_CONFIG=$TOOLS_DIR/packages.config\nPACKAGES_CONFIG_MD5=$TOOLS_DIR/packages.config.md5sum\n\n# Define md5sum or md5 depending on Linux/OSX\nMD5_EXE=\nif [[ \"$(uname -s)\" == \"Darwin\" ]]; then\n    MD5_EXE=\"md5 -r\"\nelse\n    MD5_EXE=\"md5sum\"\nfi\n\n# Define default arguments.\nSCRIPT=\"build.cake\"\nTARGET=\"Default\"\nCONFIGURATION=\"Release\"\nVERBOSITY=\"verbose\"\nDRYRUN=\nSHOW_VERSION=false\nSCRIPT_ARGUMENTS=()\n\n# Parse arguments.\nfor i in \"$@\"; do\n    case $1 in\n        -s|--script) SCRIPT=\"$2\"; shift ;;\n        -t|--target) TARGET=\"$2\"; shift ;;\n        -c|--configuration) CONFIGURATION=\"$2\"; shift ;;\n        -v|--verbosity) VERBOSITY=\"$2\"; shift ;;\n        -d|--dryrun) DRYRUN=\"-dryrun\" ;;\n        --version) SHOW_VERSION=true ;;\n        --) shift; SCRIPT_ARGUMENTS+=(\"$@\"); break ;;\n        *) SCRIPT_ARGUMENTS+=(\"$1\") ;;\n    esac\n    shift\ndone\n\n# Make sure the tools folder exist.\nif [ ! -d \"$TOOLS_DIR\" ]; then\n  mkdir \"$TOOLS_DIR\"\nfi\n\n# Make sure that packages.config exist.\nif [ ! -f \"$TOOLS_DIR/packages.config\" ]; then\n    echo \"Downloading packages.config...\"\n    curl -Lsfo \"$TOOLS_DIR/packages.config\" https://cakebuild.net/download/bootstrapper/packages\n    if [ $? -ne 0 ]; then\n        echo \"An error occurred while downloading packages.config.\"\n        exit 1\n    fi\nfi\n\n# Download NuGet if it does not exist.\nif [ ! -f \"$NUGET_EXE\" ]; then\n    echo \"Downloading NuGet...\"\n    curl -Lsfo \"$NUGET_EXE\" https://dist.nuget.org/win-x86-commandline/latest/nuget.exe\n    if [ $? -ne 0 ]; then\n        echo \"An error occurred while downloading nuget.exe.\"\n        exit 1\n    fi\nfi\n\n# Restore tools from NuGet.\npushd \"$TOOLS_DIR\" >/dev/null\nif [ ! -f $PACKAGES_CONFIG_MD5 ] || [ \"$( cat $PACKAGES_CONFIG_MD5 | sed 's/\\r$//' )\" != \"$( $MD5_EXE $PACKAGES_CONFIG | awk '{ print $1 }' )\" ]; then\n    find . -type d ! -name . | xargs rm -rf\nfi\n\nmono \"$NUGET_EXE\" install -ExcludeVersion\nif [ $? -ne 0 ]; then\n    echo \"Could not restore NuGet packages.\"\n    exit 1\nfi\n\n$MD5_EXE $PACKAGES_CONFIG | awk '{ print $1 }' >| $PACKAGES_CONFIG_MD5\n\npopd >/dev/null\n\n# Make sure that Cake has been installed.\nif [ ! -f \"$CAKE_EXE\" ]; then\n    echo \"Could not find Cake.exe at '$CAKE_EXE'.\"\n    exit 1\nfi\n\n# Start Cake\nif $SHOW_VERSION; then\n    exec mono \"$CAKE_EXE\" -version\nelse\n    exec mono \"$CAKE_EXE\" $SCRIPT -verbosity=$VERBOSITY -configuration=$CONFIGURATION -target=$TARGET $DRYRUN \"${SCRIPT_ARGUMENTS[@]}\"\nfi\n"
  },
  {
    "path": "cake/paths.cake",
    "content": "public static class Paths\n{\n    public static FilePath SolutionFile => \"cloudscribe.SimpleContent.sln\";\n    \n}\n\npublic static FilePath Combine(DirectoryPath directory, FilePath file)\n{\n    return directory.CombineWithFilePath(file);\n}\n\npublic DirectoryPath VS2017InstallDirectory(ICakeContext context)\n{\n    var programFilesX86 = context.Environment.GetSpecialPath(SpecialPath.ProgramFilesX86);\n    string[] editions  = { \"Enterprise\", \"Professional\", \"Community\" };\n\n    return editions\n        .Select(edition => Directory($\"{programFilesX86}/Microsoft Visual Studio/2017/{edition}\"))\n        .FirstOrDefault(path => context.DirectoryExists(path));\n}\n"
  },
  {
    "path": "cloudscribe.SimpleContent.code-workspace",
    "content": "{\n\t\"folders\": [\n\t\t{\n\t\t\t\"path\": \".\"\n\t\t}\n\t],\n\t\"settings\": {}\n}"
  },
  {
    "path": "cloudscribe.SimpleContent.sln",
    "content": "﻿\nMicrosoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio Version 17\nVisualStudioVersion = 17.12.35527.113\nMinimumVisualStudioVersion = 10.0.40219.1\nProject(\"{2150E333-8FDC-42A3-9474-1A3956D46DE8}\") = \"src\", \"src\", \"{5243DE57-7C89-4208-8876-405E13605D16}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"cloudscribe.SimpleContent.Models\", \"src\\cloudscribe.SimpleContent.Models\\cloudscribe.SimpleContent.Models.csproj\", \"{8D2014C8-8699-45A1-A47D-46B392678722}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"cloudscribe.SimpleContent.Storage.NoDb\", \"src\\cloudscribe.SimpleContent.Storage.NoDb\\cloudscribe.SimpleContent.Storage.NoDb.csproj\", \"{325BCC90-44DF-40B7-ADAC-F2C0FCBE9525}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"cloudscribe.SimpleContent.MetaWeblog\", \"src\\cloudscribe.SimpleContent.MetaWeblog\\cloudscribe.SimpleContent.MetaWeblog.csproj\", \"{80EAB768-C2FC-4D61-A185-5A51314B8505}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"cloudscribe.SimpleContent.Syndication\", \"src\\cloudscribe.SimpleContent.Syndication\\cloudscribe.SimpleContent.Syndication.csproj\", \"{CA2F82DA-6218-4520-AD21-6B7BC27414DD}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"cloudscribe.SimpleContent.Web\", \"src\\cloudscribe.SimpleContent.Web\\cloudscribe.SimpleContent.Web.csproj\", \"{93EB904A-E929-4B6E-B135-8A34DB2E8CD8}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"cloudscribe.Core.SimpleContent\", \"src\\cloudscribe.Core.SimpleContent\\cloudscribe.Core.SimpleContent.csproj\", \"{8027C4ED-4C67-4D8D-BC13-C14EE3C75097}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"cloudscribe.SimpleContent.Storage.EFCore.Common\", \"src\\cloudscribe.SimpleContent.Storage.EFCore.Common\\cloudscribe.SimpleContent.Storage.EFCore.Common.csproj\", \"{AC7D7A37-B684-4F02-A725-1625E96DE2B8}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"cloudscribe.SimpleContent.Storage.EFCore.MSSQL\", \"src\\cloudscribe.SimpleContent.Storage.EFCore.MSSQL\\cloudscribe.SimpleContent.Storage.EFCore.MSSQL.csproj\", \"{B23CA546-4B27-472F-B962-7E2C981CE89C}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"cloudscribe.SimpleContent.Storage.EFCore.MySQL\", \"src\\cloudscribe.SimpleContent.Storage.EFCore.MySQL\\cloudscribe.SimpleContent.Storage.EFCore.MySQL.csproj\", \"{4713D574-918D-4129-A11C-2287AE4B119F}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"cloudscribe.SimpleContent.Storage.EFCore.SQLite\", \"src\\cloudscribe.SimpleContent.Storage.EFCore.SQLite\\cloudscribe.SimpleContent.Storage.EFCore.SQLite.csproj\", \"{CBB0F82E-371E-4F0C-8474-C1B7D30754A9}\"\nEndProject\nProject(\"{2150E333-8FDC-42A3-9474-1A3956D46DE8}\") = \"test\", \"test\", \"{E9B2D007-5701-4DEB-AC64-A435D71AA05F}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"cloudscribe.SimpleContent.Web.Tests\", \"test\\cloudscribe.SimpleContent.Web.Tests\\cloudscribe.SimpleContent.Web.Tests.csproj\", \"{16735222-D50E-4535-A9BD-85EE05AA5308}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"cloudscribe.SimpleContent.Storage.EFCore.PostgreSql\", \"src\\cloudscribe.SimpleContent.Storage.EFCore.PostgreSql\\cloudscribe.SimpleContent.Storage.EFCore.PostgreSql.csproj\", \"{76A12B64-BF45-464F-8B23-1AEBF9427E9B}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"cloudscribe.ContentUtils\", \"src\\cloudscribe.ContentUtils\\cloudscribe.ContentUtils.csproj\", \"{4D932067-B9E4-4130-A23E-B56EEA89E9AC}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"cloudscribe.MetaWeblog\", \"src\\cloudscribe.MetaWeblog\\cloudscribe.MetaWeblog.csproj\", \"{9AA5C22E-496F-4E3B-8497-8B27F80BEF03}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"cloudscribe.MetaWeblog.Tests\", \"test\\cloudscribe.MetaWeblog.Tests\\cloudscribe.MetaWeblog.Tests.csproj\", \"{A375EB69-B5CE-481C-9D98-CC93A33972B8}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"cloudscribe.Core.SimpleContent.CompiledViews.Bootstrap5\", \"src\\cloudscribe.Core.SimpleContent.CompiledViews.Bootstrap5\\cloudscribe.Core.SimpleContent.CompiledViews.Bootstrap5.csproj\", \"{42E7F4FE-8929-4367-9F58-85BE67043D9E}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"cloudscribe.SimpleContent.CompiledViews.Bootstrap5\", \"src\\cloudscribe.SimpleContent.CompiledViews.Bootstrap5\\cloudscribe.SimpleContent.CompiledViews.Bootstrap5.csproj\", \"{9B622839-BC4E-4424-B153-63799EB47600}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"cloudscribe.SimpleContent.ContentTemplates.Bootstrap5\", \"src\\cloudscribe.SimpleContent.ContentTemplates.Bootstrap5\\cloudscribe.SimpleContent.ContentTemplates.Bootstrap5.csproj\", \"{FFE90C6E-D297-4863-B7DA-41F145270ACA}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"sourceDev.WebApp\", \"src\\sourceDev.WebApp\\sourceDev.WebApp.csproj\", \"{F34428AB-AA2E-4FA6-8C9B-23B7C5206EB4}\"\nEndProject\nGlobal\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\n\t\tDebug|Any CPU = Debug|Any CPU\n\t\tRelease|Any CPU = Release|Any CPU\n\tEndGlobalSection\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\n\t\t{8D2014C8-8699-45A1-A47D-46B392678722}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{8D2014C8-8699-45A1-A47D-46B392678722}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{8D2014C8-8699-45A1-A47D-46B392678722}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{8D2014C8-8699-45A1-A47D-46B392678722}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{325BCC90-44DF-40B7-ADAC-F2C0FCBE9525}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{325BCC90-44DF-40B7-ADAC-F2C0FCBE9525}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{325BCC90-44DF-40B7-ADAC-F2C0FCBE9525}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{325BCC90-44DF-40B7-ADAC-F2C0FCBE9525}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{80EAB768-C2FC-4D61-A185-5A51314B8505}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{80EAB768-C2FC-4D61-A185-5A51314B8505}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{80EAB768-C2FC-4D61-A185-5A51314B8505}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{80EAB768-C2FC-4D61-A185-5A51314B8505}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{CA2F82DA-6218-4520-AD21-6B7BC27414DD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{CA2F82DA-6218-4520-AD21-6B7BC27414DD}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{CA2F82DA-6218-4520-AD21-6B7BC27414DD}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{CA2F82DA-6218-4520-AD21-6B7BC27414DD}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{93EB904A-E929-4B6E-B135-8A34DB2E8CD8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{93EB904A-E929-4B6E-B135-8A34DB2E8CD8}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{93EB904A-E929-4B6E-B135-8A34DB2E8CD8}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{93EB904A-E929-4B6E-B135-8A34DB2E8CD8}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{8027C4ED-4C67-4D8D-BC13-C14EE3C75097}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{8027C4ED-4C67-4D8D-BC13-C14EE3C75097}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{8027C4ED-4C67-4D8D-BC13-C14EE3C75097}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{8027C4ED-4C67-4D8D-BC13-C14EE3C75097}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{AC7D7A37-B684-4F02-A725-1625E96DE2B8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{AC7D7A37-B684-4F02-A725-1625E96DE2B8}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{AC7D7A37-B684-4F02-A725-1625E96DE2B8}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{AC7D7A37-B684-4F02-A725-1625E96DE2B8}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{B23CA546-4B27-472F-B962-7E2C981CE89C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{B23CA546-4B27-472F-B962-7E2C981CE89C}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{B23CA546-4B27-472F-B962-7E2C981CE89C}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{B23CA546-4B27-472F-B962-7E2C981CE89C}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{4713D574-918D-4129-A11C-2287AE4B119F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{4713D574-918D-4129-A11C-2287AE4B119F}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{4713D574-918D-4129-A11C-2287AE4B119F}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{4713D574-918D-4129-A11C-2287AE4B119F}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{CBB0F82E-371E-4F0C-8474-C1B7D30754A9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{CBB0F82E-371E-4F0C-8474-C1B7D30754A9}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{CBB0F82E-371E-4F0C-8474-C1B7D30754A9}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{CBB0F82E-371E-4F0C-8474-C1B7D30754A9}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{16735222-D50E-4535-A9BD-85EE05AA5308}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{16735222-D50E-4535-A9BD-85EE05AA5308}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{16735222-D50E-4535-A9BD-85EE05AA5308}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{16735222-D50E-4535-A9BD-85EE05AA5308}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{76A12B64-BF45-464F-8B23-1AEBF9427E9B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{76A12B64-BF45-464F-8B23-1AEBF9427E9B}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{76A12B64-BF45-464F-8B23-1AEBF9427E9B}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{76A12B64-BF45-464F-8B23-1AEBF9427E9B}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{4D932067-B9E4-4130-A23E-B56EEA89E9AC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{4D932067-B9E4-4130-A23E-B56EEA89E9AC}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{4D932067-B9E4-4130-A23E-B56EEA89E9AC}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{4D932067-B9E4-4130-A23E-B56EEA89E9AC}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{9AA5C22E-496F-4E3B-8497-8B27F80BEF03}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{9AA5C22E-496F-4E3B-8497-8B27F80BEF03}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{9AA5C22E-496F-4E3B-8497-8B27F80BEF03}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{9AA5C22E-496F-4E3B-8497-8B27F80BEF03}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{A375EB69-B5CE-481C-9D98-CC93A33972B8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{A375EB69-B5CE-481C-9D98-CC93A33972B8}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{A375EB69-B5CE-481C-9D98-CC93A33972B8}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{A375EB69-B5CE-481C-9D98-CC93A33972B8}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{42E7F4FE-8929-4367-9F58-85BE67043D9E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{42E7F4FE-8929-4367-9F58-85BE67043D9E}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{42E7F4FE-8929-4367-9F58-85BE67043D9E}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{42E7F4FE-8929-4367-9F58-85BE67043D9E}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{9B622839-BC4E-4424-B153-63799EB47600}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{9B622839-BC4E-4424-B153-63799EB47600}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{9B622839-BC4E-4424-B153-63799EB47600}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{9B622839-BC4E-4424-B153-63799EB47600}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{FFE90C6E-D297-4863-B7DA-41F145270ACA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{FFE90C6E-D297-4863-B7DA-41F145270ACA}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{FFE90C6E-D297-4863-B7DA-41F145270ACA}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{FFE90C6E-D297-4863-B7DA-41F145270ACA}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{F34428AB-AA2E-4FA6-8C9B-23B7C5206EB4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{F34428AB-AA2E-4FA6-8C9B-23B7C5206EB4}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{F34428AB-AA2E-4FA6-8C9B-23B7C5206EB4}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{F34428AB-AA2E-4FA6-8C9B-23B7C5206EB4}.Release|Any CPU.Build.0 = Release|Any CPU\n\tEndGlobalSection\n\tGlobalSection(SolutionProperties) = preSolution\n\t\tHideSolutionNode = FALSE\n\tEndGlobalSection\n\tGlobalSection(NestedProjects) = preSolution\n\t\t{8D2014C8-8699-45A1-A47D-46B392678722} = {5243DE57-7C89-4208-8876-405E13605D16}\n\t\t{325BCC90-44DF-40B7-ADAC-F2C0FCBE9525} = {5243DE57-7C89-4208-8876-405E13605D16}\n\t\t{80EAB768-C2FC-4D61-A185-5A51314B8505} = {5243DE57-7C89-4208-8876-405E13605D16}\n\t\t{CA2F82DA-6218-4520-AD21-6B7BC27414DD} = {5243DE57-7C89-4208-8876-405E13605D16}\n\t\t{93EB904A-E929-4B6E-B135-8A34DB2E8CD8} = {5243DE57-7C89-4208-8876-405E13605D16}\n\t\t{8027C4ED-4C67-4D8D-BC13-C14EE3C75097} = {5243DE57-7C89-4208-8876-405E13605D16}\n\t\t{AC7D7A37-B684-4F02-A725-1625E96DE2B8} = {5243DE57-7C89-4208-8876-405E13605D16}\n\t\t{B23CA546-4B27-472F-B962-7E2C981CE89C} = {5243DE57-7C89-4208-8876-405E13605D16}\n\t\t{4713D574-918D-4129-A11C-2287AE4B119F} = {5243DE57-7C89-4208-8876-405E13605D16}\n\t\t{CBB0F82E-371E-4F0C-8474-C1B7D30754A9} = {5243DE57-7C89-4208-8876-405E13605D16}\n\t\t{16735222-D50E-4535-A9BD-85EE05AA5308} = {E9B2D007-5701-4DEB-AC64-A435D71AA05F}\n\t\t{76A12B64-BF45-464F-8B23-1AEBF9427E9B} = {5243DE57-7C89-4208-8876-405E13605D16}\n\t\t{4D932067-B9E4-4130-A23E-B56EEA89E9AC} = {5243DE57-7C89-4208-8876-405E13605D16}\n\t\t{9AA5C22E-496F-4E3B-8497-8B27F80BEF03} = {5243DE57-7C89-4208-8876-405E13605D16}\n\t\t{A375EB69-B5CE-481C-9D98-CC93A33972B8} = {E9B2D007-5701-4DEB-AC64-A435D71AA05F}\n\t\t{42E7F4FE-8929-4367-9F58-85BE67043D9E} = {5243DE57-7C89-4208-8876-405E13605D16}\n\t\t{9B622839-BC4E-4424-B153-63799EB47600} = {5243DE57-7C89-4208-8876-405E13605D16}\n\t\t{FFE90C6E-D297-4863-B7DA-41F145270ACA} = {5243DE57-7C89-4208-8876-405E13605D16}\n\t\t{F34428AB-AA2E-4FA6-8C9B-23B7C5206EB4} = {5243DE57-7C89-4208-8876-405E13605D16}\n\tEndGlobalSection\n\tGlobalSection(ExtensibilityGlobals) = postSolution\n\t\tSolutionGuid = {ADB1ABEA-D5DB-4F22-BEA1-26E93BFF1BDD}\n\tEndGlobalSection\nEndGlobal\n"
  },
  {
    "path": "package.json",
    "content": "{\n  \"name\": \"approot\",\n  \"version\": \"1.0.0\",\n  \"private\": true,\n  \"devDependencies\": {\n    \n  },\n\n  \"scripts\": {\n    \"postinstall\": \"cd src/sourceDev.WebApp && npm install\"\n  }\n  \n}\n"
  },
  {
    "path": "samples/README.md",
    "content": "# cloudscribe SimpleContent Samples \n\nAll of the samples have been moved to https://github.com/joeaudette/cloudscribe.StarterKits\n\n\n## Questions or Feedback?\n\nIf you have questions or feedback or just want to be social, say hello in our gitter chat room. I try to monitor that room on a regular basis while I'm working, but if I'm not around you can leave  message.\n\nIf you find any bugs please post an issue!\n\n[![Join the chat at https://gitter.im/joeaudette/cloudscribe](https://badges.gitter.im/joeaudette/cloudscribe.svg)](https://gitter.im/joeaudette/cloudscribe?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)\n\n"
  },
  {
    "path": "src/cloudscribe.ContentUtils/ExcerptHelper.cs",
    "content": "﻿using cloudscribe.HtmlAgilityPack;\nusing System;\nusing System.Collections.Generic;\nusing System.Globalization;\nusing System.Linq;\n\nnamespace cloudscribe.ContentUtils\n{\n    public class ExcerptHelper\n    {\n        public ExcerptHelper(\n            //ILogger<ExcerptHelper> logger = null\n            )\n        {\n\n        }\n\n        private const int defaultLengthWords = 20;\n        private const int defaultLengthCharacters = 200;\n        private const int defaultLengthAbsolute = 30;\n        private const string terminator = \"\";\n\n        /// <summary>\n        /// this is an expensive method as often many retries ar eneeded to produce a valid html fragment.\n        /// therefore this should not be used for dynamic excerpt generation.\n        /// Excerpt should be generated and saved when content is edited.\n        /// </summary>\n        /// <param name=\"truncationMode\"></param>\n        /// <param name=\"truncationLength\"></param>\n        /// <param name=\"html\"></param>\n        /// <param name=\"languageCode\"></param>\n        /// <returns></returns>\n        public ExcerptResult GenerateExcerpt(\n            ExcerptTruncationMode truncationMode,\n            int truncationLength,\n            string html,\n            //string cacheKey,\n            //string slug,\n            string languageCode //,\n            //bool logWarnings = true\n            )\n        {\n            var result = new ExcerptResult();\n\n            if (string.IsNullOrWhiteSpace(html))\n            {\n                result.HtmlContent = html;\n                result.DidTruncate = false;\n                return result;\n            }\n\n            // Try to get language metadata\n            var cultureInfo = CultureInfo.InvariantCulture;\n            if (!string.IsNullOrEmpty(languageCode))\n            {\n                try\n                {\n                    cultureInfo = new CultureInfo(languageCode);\n                }\n                catch (CultureNotFoundException) { }\n            }\n\n            var contentLength = GetContentLength(html, truncationMode);\n            if (contentLength <= truncationLength)\n            {\n                result.HtmlContent = html;\n                result.DidTruncate = false;\n                return result;\n            }\n\n            //if (_cache != null)\n            //{\n            //    var cachedTeaser = _cache.GetTeaser(cacheKey);\n            //    if (!string.IsNullOrEmpty(cachedTeaser))\n            //    {\n            //        result.Content = cachedTeaser;\n            //        result.DidTruncate = true;\n            //        return result;\n            //    }\n            //}\n\n            var isRightToLeftLanguage = cultureInfo.TextInfo.IsRightToLeft;\n\n            // Get global teaser settings.\n            var truncationLengthToUse = truncationLength <= 0 ? GetDefaultTeaserLength(truncationMode) : truncationLength;\n\n            // Truncate the raw content first. In general, Humanizer is smart enough to ignore tags, especially if using word truncation.\n            var text = TruncatePost(truncationMode, html, truncationLengthToUse, isRightToLeftLanguage);\n            // Don't leave dangling <p> tags.\n            HtmlNode.ElementsFlags[\"p\"] = HtmlElementFlag.Closed;\n\n            //var modeDesc = GetModeDescription(truncationMode);\n\n            //if we get bad output try increasing the allowed length unti it is valid\n            while (!IsValidMarkup(text) && truncationLengthToUse <= contentLength)\n            {\n                truncationLengthToUse += 1;\n                //if (_log != null && logWarnings)\n                //{\n                //    _log.LogWarning($\"teaser truncation for post {slug}, produced invalid html, so trying again and increasing the truncation length to {truncationLengthToUse} {modeDesc}. You should re-publish this post to create a persistent teaser.\");\n                //}\n\n                text = TruncatePost(truncationMode, html, truncationLengthToUse, isRightToLeftLanguage);\n            }\n\n            if (!IsValidMarkup(text))\n            {\n                //if (_log != null)\n                //{\n                //    _log.LogError($\"failed to create valid teaser for post {slug}, so returning full content\");\n                //}\n\n                result.HtmlContent = html;\n                result.DidTruncate = false;\n                return result;\n            }\n\n            //if (_cache != null)\n            //{\n            //    _cache.AddToCache(text, cacheKey);\n            //}\n\n            var doc = new HtmlDocument();\n            doc.LoadHtml(text);\n\n            result.HtmlContent = doc.DocumentNode.InnerHtml;\n            result.DidTruncate = true;\n            return result;\n\n        }\n\n        private bool IsValidMarkup(string html)\n        {\n            var errors = GetMarkupErrors(html);\n            return errors.Count() == 0;\n        }\n\n        private IEnumerable<HtmlParseError> GetMarkupErrors(string html)\n        {\n            var document = new HtmlAgilityPack.HtmlDocument();\n            document.OptionFixNestedTags = true;\n            document.LoadHtml(html);\n\n            return document.ParseErrors;\n        }\n\n        //private string GetModeDescription(ExcerptTruncationMode mode)\n        //{\n        //    switch (mode)\n        //    {\n        //        case ExcerptTruncationMode.Length:\n        //            return \"string length\";\n        //        case ExcerptTruncationMode.Character:\n        //            return \"letters or digits\";\n        //        case ExcerptTruncationMode.Word:\n        //        default:\n        //            return \"words\";\n        //    }\n        //}\n\n        private int GetContentLength(string html, ExcerptTruncationMode mode)\n        {\n            if (string.IsNullOrEmpty(html)) return 0;\n            switch (mode)\n            {\n                case ExcerptTruncationMode.Length:\n                    return html.Length;\n                case ExcerptTruncationMode.Character:\n                    return html.ToCharArray().Count(char.IsLetterOrDigit);\n                case ExcerptTruncationMode.Word:\n                default:\n                    return html.Split((char[])null, StringSplitOptions.RemoveEmptyEntries).Count();\n            }\n        }\n\n        // Internal for unit testing purposes only.\n        private int GetDefaultTeaserLength(ExcerptTruncationMode mode)\n        {\n            switch (mode)\n            {\n                case ExcerptTruncationMode.Length:\n                    return defaultLengthAbsolute;\n                case ExcerptTruncationMode.Character:\n                    return defaultLengthCharacters;\n                case ExcerptTruncationMode.Word:\n                default:\n                    return defaultLengthWords;\n            }\n        }\n\n        // Internal for unit testing purposes only.\n        private string TruncatePost(ExcerptTruncationMode mode, string content, int length, bool isRightToLeftLanguage = false)\n        {\n            var truncateFrom = isRightToLeftLanguage ? TruncateFrom.Left : TruncateFrom.Right;\n            switch (mode)\n            {\n                case ExcerptTruncationMode.Length:\n                    return content.Truncate(length, terminator, Truncator.FixedLength, truncateFrom);\n                case ExcerptTruncationMode.Character:\n                    return content.Truncate(length, terminator, Truncator.FixedNumberOfCharacters, truncateFrom);\n                case ExcerptTruncationMode.Word:\n                default:\n                    return content.Truncate(length, terminator, Truncator.FixedNumberOfWords, truncateFrom);\n            }\n        }\n\n\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.ContentUtils/ExcerptResult.cs",
    "content": "﻿namespace cloudscribe.ContentUtils\n{\n    public class ExcerptResult\n    {\n        public string HtmlContent { get; set; }\n        public bool DidTruncate { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.ContentUtils/MarkdownHelper.cs",
    "content": "﻿using Markdig;\nusing Markdig.Syntax;\nusing Markdig.Syntax.Inlines;\nusing System;\nusing System.Linq;\n\nnamespace cloudscribe.ContentUtils\n{\n    public class MarkdownHelper\n    {\n\n        private MarkdownPipeline _mdPipeline = null;\n\n        public string ConvertMarkdownToHtml(string markdown)\n        {\n            if (_mdPipeline == null)\n            {\n                _mdPipeline = new MarkdownPipelineBuilder().UseAdvancedExtensions().Build();\n            }\n\n            return Markdown.ToHtml(markdown, _mdPipeline);\n        }\n\n        public string ExtractFirstImageUrl(string markdown)\n        {\n            if (_mdPipeline == null)\n            {\n                _mdPipeline = new MarkdownPipelineBuilder().UseAdvancedExtensions().Build();\n            }\n\n            if (!String.IsNullOrWhiteSpace(markdown))\n            {\n                var doc = Markdown.Parse(markdown, _mdPipeline);\n                var img = doc.Descendants<ParagraphBlock>()\n                    .SelectMany(x => x.Inline.Descendants<LinkInline>())\n                    .FirstOrDefault(l => l.IsImage);\n                if (img != null)\n                {\n                    return img.Url;\n                }\n            }\n            return string.Empty;\n        }\n\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.ContentUtils/README.md",
    "content": "# cloudscribe.ContentUtils\n\n[![NuGet](https://img.shields.io/nuget/v/cloudscribe.ContentUtils.svg)](https://www.nuget.org/packages/cloudscribe.ContentUtils)\n[![License: Apache-2.0](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://opensource.org/licenses/Apache-2.0)\n\nUtilities for content management and manipulation in cloudscribe projects.\n\n## Installation\n\n```shell\nInstall-Package cloudscribe.ContentUtils\n```\n\n## Usage\n\nAdd as a dependency to your .NET 8.0 project and use the provided utilities for content handling.\n\n## Contributing\n\nContributions are welcome! Please see the [contributing guidelines](https://github.com/cloudscribe/cloudscribe.SimpleContent/blob/main/CONTRIBUTING.md).\n\n## License\n\nThis project is licensed under the Apache 2.0 License - see the [LICENSE](https://github.com/cloudscribe/cloudscribe.SimpleContent/blob/main/LICENSE) file for details.\n"
  },
  {
    "path": "src/cloudscribe.ContentUtils/SlugHelper.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Globalization;\nusing System.Text;\n\nnamespace cloudscribe.ContentUtils\n{\n    public static class SlugHelper\n    {\n        public static string CreateSlug(string title)\n        {\n            if (string.IsNullOrWhiteSpace(title)) { return title; }\n\n            title = title.ToLowerInvariant().Replace(\"  \", \" \")\n                .Replace(\" \", \"-\")\n                .Replace(\"--\", \"-\")\n                .Replace(\"--\", \"-\")\n                .Replace(\"\\n\", string.Empty)\n                .Replace(\"\\r\", string.Empty)\n                .Replace(\"\\t\", string.Empty)\n                ;\n            title = RemoveDiacritics(title);\n            title = RemoveReservedUrlCharacters(title);\n\n            return title.ToLowerInvariant().Trim();\n        }\n\n        private static string RemoveDiacritics(string text)\n        {\n            if (string.IsNullOrWhiteSpace(text)) { return text; }\n\n            var normalizedString = text.Normalize(NormalizationForm.FormD);\n\n            var stringBuilder = new StringBuilder();\n\n            foreach (var c in normalizedString)\n            {\n                var unicodeCategory = CharUnicodeInfo.GetUnicodeCategory(c);\n                if (unicodeCategory != UnicodeCategory.NonSpacingMark)\n                {\n                    stringBuilder.Append(c);\n                }\n            }\n\n            return stringBuilder.ToString().Normalize(NormalizationForm.FormC);\n\n        }\n\n        private static string RemoveReservedUrlCharacters(string text)\n        {\n            if (string.IsNullOrWhiteSpace(text)) { return text; }\n\n            var reservedCharacters = new List<string>() { \"!\", \"#\", \"$\", \"&\", \"'\", \"(\", \")\", \"*\", \",\", \"/\", \":\", \";\", \"=\", \"?\", \"@\", \"[\", \"]\", \"\\\"\", \"%\", \".\", \"<\", \">\", \"\\\\\", \"^\", \"_\", \"'\", \"{\", \"}\", \"|\", \"~\", \"`\", \"+\" };\n\n            foreach (var chr in reservedCharacters)\n            {\n                text = text.Replace(chr, \"\");\n            }\n\n            return text;\n        }\n\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.ContentUtils/Truncation.cs",
    "content": "﻿using System;\nusing System.Linq;\n\nnamespace cloudscribe.ContentUtils\n{\n    public static class Truncation\n    {\n        /// <summary>\n        /// Truncate the string\n        /// </summary>\n        /// <param name=\"input\">The string to be truncated</param>\n        /// <param name=\"length\">The length to truncate to</param>\n        /// <returns>The truncated string</returns>\n        public static string Truncate(this string input, int length)\n        {\n            return input.Truncate(length, \"…\", Truncator.FixedLength);\n        }\n\n        /// <summary>\n        /// Truncate the string\n        /// </summary>\n        /// <param name=\"input\">The string to be truncated</param>\n        /// <param name=\"length\">The length to truncate to</param>\n        /// <param name=\"truncator\">The truncate to use</param>\n        /// <param name=\"from\">The enum value used to determine from where to truncate the string</param>\n        /// <returns>The truncated string</returns>\n        public static string Truncate(this string input, int length, ITruncator truncator, TruncateFrom from = TruncateFrom.Right)\n        {\n            return input.Truncate(length, \"…\", truncator, from);\n        }\n\n        /// <summary>\n        /// Truncate the string\n        /// </summary>\n        /// <param name=\"input\">The string to be truncated</param>\n        /// <param name=\"length\">The length to truncate to</param>\n        /// <param name=\"truncationString\">The string used to truncate with</param>\n        /// <param name=\"from\">The enum value used to determine from where to truncate the string</param>\n        /// <returns>The truncated string</returns>\n        public static string Truncate(this string input, int length, string truncationString, TruncateFrom from = TruncateFrom.Right)\n        {\n            return input.Truncate(length, truncationString, Truncator.FixedLength, from);\n        }\n\n        /// <summary>\n        /// Truncate the string\n        /// </summary>\n        /// <param name=\"input\">The string to be truncated</param>\n        /// <param name=\"length\">The length to truncate to</param>\n        /// <param name=\"truncationString\">The string used to truncate with</param>\n        /// <param name=\"truncator\">The truncator to use</param>\n        /// <param name=\"from\">The enum value used to determine from where to truncate the string</param>\n        /// <returns>The truncated string</returns>\n        public static string Truncate(this string input, int length, string truncationString, ITruncator truncator, TruncateFrom from = TruncateFrom.Right)\n        {\n            if (truncator == null)\n                throw new ArgumentNullException(nameof(truncator));\n\n            if (input == null)\n                return null;\n\n            return truncator.Truncate(input, length, truncationString, from);\n        }\n    }\n\n    /// <summary>\n    /// Truncation location for humanizer\n    /// </summary>\n    public enum TruncateFrom\n    {\n        /// <summary>\n        /// Truncate letters from the left (start) of the string\n        /// </summary>\n        Left,\n        /// <summary>\n        /// Truncate letters from the right (end) of the string\n        /// </summary>\n        Right\n    }\n\n    public enum ExcerptTruncationMode : byte\n    {\n        /// <summary>\n        /// (Default) Truncate the post based on number of words.\n        /// </summary>\n        Word = 0,\n        /// <summary>\n        /// Truncate the post to a fixed length.\n        /// </summary>\n        Length,\n        /// <summary>\n        /// Truncate the post based on number of characters.\n        /// </summary>\n        Character\n    }\n\n    public interface ITruncator\n    {\n        /// <summary>\n        /// Truncate a string\n        /// </summary>\n        /// <param name=\"value\">The string to truncate</param>\n        /// <param name=\"length\">The length to truncate to</param>\n        /// <param name=\"truncationString\">The string used to truncate with</param>\n        /// <param name=\"truncateFrom\">The enum value used to determine from where to truncate the string</param>\n        /// <returns>The truncated string</returns>\n        string Truncate(string value, int length, string truncationString, TruncateFrom truncateFrom = TruncateFrom.Right);\n    }\n\n    public static class Truncator\n    {\n        /// <summary>\n        /// Fixed length truncator\n        /// </summary>\n        public static ITruncator FixedLength\n        {\n            get\n            {\n                return new FixedLengthTruncator();\n            }\n        }\n\n        /// <summary>\n        /// Fixed number of characters truncator\n        /// </summary>\n        public static ITruncator FixedNumberOfCharacters\n        {\n            get\n            {\n                return new FixedNumberOfCharactersTruncator();\n            }\n        }\n\n        /// <summary>\n        /// Fixed number of words truncator\n        /// </summary>\n        public static ITruncator FixedNumberOfWords\n        {\n            get\n            {\n                return new FixedNumberOfWordsTruncator();\n            }\n        }\n    }\n\n    class FixedLengthTruncator : ITruncator\n    {\n        public string Truncate(string value, int length, string truncationString, TruncateFrom truncateFrom = TruncateFrom.Right)\n        {\n            if (value == null)\n                return null;\n\n            if (value.Length == 0)\n                return value;\n\n            if (truncationString == null || truncationString.Length > length)\n                return truncateFrom == TruncateFrom.Right\n                    ? value.Substring(0, length)\n                    : value.Substring(value.Length - length);\n\n\n            if (truncateFrom == TruncateFrom.Left)\n                return value.Length > length\n                    ? truncationString + value.Substring(value.Length - length + truncationString.Length)\n                    : value;\n\n            return value.Length > length\n                ? value.Substring(0, length - truncationString.Length) + truncationString\n                : value;\n        }\n    }\n\n    class FixedNumberOfCharactersTruncator : ITruncator\n    {\n        public string Truncate(string value, int length, string truncationString, TruncateFrom truncateFrom = TruncateFrom.Right)\n        {\n            if (value == null)\n                return null;\n\n            if (value.Length == 0)\n                return value;\n\n            if (truncationString == null)\n                truncationString = string.Empty;\n\n            if (truncationString.Length > length)\n                return truncateFrom == TruncateFrom.Right ? value.Substring(0, length) : value.Substring(value.Length - length);\n\n            var alphaNumericalCharactersProcessed = 0;\n\n            if (value.ToCharArray().Count(char.IsLetterOrDigit) <= length)\n                return value;\n\n            if (truncateFrom == TruncateFrom.Left)\n            {\n                for (var i = value.Length - 1; i > 0; i--)\n                {\n                    if (char.IsLetterOrDigit(value[i]))\n                        alphaNumericalCharactersProcessed++;\n\n                    if (alphaNumericalCharactersProcessed + truncationString.Length == length)\n                        return truncationString + value.Substring(i);\n                }\n            }\n\n            for (var i = 0; i < value.Length - truncationString.Length; i++)\n            {\n                if (char.IsLetterOrDigit(value[i]))\n                    alphaNumericalCharactersProcessed++;\n\n                if (alphaNumericalCharactersProcessed + truncationString.Length == length)\n                    return value.Substring(0, i + 1) + truncationString;\n            }\n\n            return value;\n        }\n    }\n\n    class FixedNumberOfWordsTruncator : ITruncator\n    {\n        public string Truncate(string value, int length, string truncationString, TruncateFrom truncateFrom = TruncateFrom.Right)\n        {\n            if (value == null)\n                return null;\n\n            if (value.Length == 0)\n                return value;\n\n            var numberOfWords = value.Split((char[])null, StringSplitOptions.RemoveEmptyEntries).Count();\n            if (numberOfWords <= length)\n                return value;\n\n            return truncateFrom == TruncateFrom.Left\n                ? TruncateFromLeft(value, length, truncationString)\n                : TruncateFromRight(value, length, truncationString);\n        }\n\n        private static string TruncateFromRight(string value, int length, string truncationString)\n        {\n            var lastCharactersWasWhiteSpace = true;\n            var numberOfWordsProcessed = 0;\n            for (var i = 0; i < value.Length; i++)\n            {\n                if (char.IsWhiteSpace(value[i]))\n                {\n                    if (!lastCharactersWasWhiteSpace)\n                        numberOfWordsProcessed++;\n\n                    lastCharactersWasWhiteSpace = true;\n\n                    if (numberOfWordsProcessed == length)\n                        return value.Substring(0, i) + truncationString;\n                }\n                else\n                    lastCharactersWasWhiteSpace = false;\n\n            }\n            return value + truncationString;\n        }\n\n        private static string TruncateFromLeft(string value, int length, string truncationString)\n        {\n            var lastCharactersWasWhiteSpace = true;\n            var numberOfWordsProcessed = 0;\n            for (var i = value.Length - 1; i > 0; i--)\n            {\n                if (char.IsWhiteSpace(value[i]))\n                {\n                    if (!lastCharactersWasWhiteSpace)\n                        numberOfWordsProcessed++;\n\n                    lastCharactersWasWhiteSpace = true;\n\n                    if (numberOfWordsProcessed == length)\n                        return truncationString + value.Substring(i + 1).TrimEnd();\n                }\n                else\n                    lastCharactersWasWhiteSpace = false;\n\n            }\n            return truncationString + value;\n        }\n    }\n\n\n}\n"
  },
  {
    "path": "src/cloudscribe.ContentUtils/cloudscribe.ContentUtils.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <Description>Content utilities for html and markdown</Description>\n    <Version>10.1.0</Version>\n    <TargetFramework>net10.0</TargetFramework>\n    <Authors>Joe Audette</Authors>\n    <PackageTags>cloudscribe;blog,content</PackageTags>\n    <PackageIcon>icon.png</PackageIcon>\n    <PackageProjectUrl>https://github.com/cloudscribe/cloudscribe.SimpleContent</PackageProjectUrl>\n    <PackageLicenseExpression>Apache-2.0</PackageLicenseExpression>\n    <RepositoryUrl>https://github.com/cloudscribe/cloudscribe.SimpleContent.git</RepositoryUrl>\n    <RepositoryType>git</RepositoryType>\n    <PackageReadmeFile>README.md</PackageReadmeFile>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <None Include=\"icon.png\" Pack=\"true\" PackagePath=\"\\\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"cloudscribe.HtmlAgilityPack\" Version=\"1.0.1\" />\n    <PackageReference Include=\"Markdig\" Version=\"0.37.0\" />\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"README.md\" Pack=\"true\" PackagePath=\"/\" />\n  </ItemGroup>\n</Project>\n"
  },
  {
    "path": "src/cloudscribe.Core.SimpleContent/AuthorNameResolver.cs",
    "content": "﻿using cloudscribe.Core.Models;\nusing cloudscribe.SimpleContent.Models;\nusing cloudscribe.SimpleContent.Web;\nusing System.Security.Claims;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace cloudscribe.Core.SimpleContent.Integration\n{\n    public class AuthorNameResolver : IAuthorNameResolver\n    {\n        public AuthorNameResolver(IUserContextResolver userContextResolver)\n        {\n            userResolver = userContextResolver;\n        }\n\n        private IUserContextResolver userResolver;\n\n        public async Task<string> GetAuthorName(ClaimsPrincipal user, CancellationToken cancellationToken = default(CancellationToken))\n        {\n            var dbUser = await userResolver.GetCurrentUser(cancellationToken);\n            string result;\n            if(dbUser == null)\n            {\n                result = user.GetUserDisplayName();\n                if (string.IsNullOrEmpty(result))\n                {\n                    result = user.Identity.Name;\n                }\n                return result;\n\n            }\n\n            if(!string.IsNullOrWhiteSpace(dbUser.FirstName))\n            {\n                if(!string.IsNullOrWhiteSpace(dbUser.LastName))\n                {\n                    return dbUser.FirstName + \" \" + dbUser.LastName;\n                }\n            }\n\n            return dbUser.DisplayName;\n            \n        }\n\n\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.Core.SimpleContent/ClaimsPrincipalExtensions.cs",
    "content": "﻿//// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.\n//// Author:\t\t\t\t\tJoe Audette\n//// Created:\t\t\t\t\t2016-02-09\n//// Last Modified:\t\t\t2016-08-12\n//// \n\n//using System;\n//using System.Security.Claims;\n//using Microsoft.AspNetCore.Authorization;\n\n//namespace cloudscribe.Core.SimpleContent.Integration\n//{\n//    public static class ClaimsPrincipalExtensions\n//    {\n\n//        public static string GetEmail(this ClaimsPrincipal principal)\n//        {\n//            if (principal == null)\n//            {\n//                throw new ArgumentNullException(nameof(principal));\n//            }\n//            var claim = principal.FindFirst(\"Email\");\n//            return claim != null ? claim.Value : null;\n//        }\n\n//        public static string GetUserDisplayName(this ClaimsPrincipal principal)\n//        {\n//            if (principal == null)\n//            {\n//                throw new ArgumentNullException(nameof(principal));\n//            }\n//            var claim = principal.FindFirst(\"DisplayName\");\n//            return claim != null ? claim.Value : null;\n//        }\n\n//        public static string GetProjectId(this ClaimsPrincipal principal)\n//        {\n//            if (principal == null)\n//            {\n//                throw new ArgumentNullException(nameof(principal));\n//            }\n//            var claim = principal.FindFirst(\"ContentEditor\");\n//            return claim != null ? claim.Value : null;\n//        }\n\n//        public static bool CanEditProject(this ClaimsPrincipal principal, string projectId)\n//        {\n//            if (principal == null)\n//            {\n//                throw new ArgumentNullException(nameof(principal));\n//            }\n//            var claim = principal.FindFirst(\"ContentEditor\");\n//            if (claim == null) { return false; }\n//            if (claim.Value == projectId) { return true; }\n//            return false;\n//        }\n\n//        public static bool CanEditPages(\n//            this ClaimsPrincipal principal,\n//            string projectId,\n//            IAuthorizationService authorizationService = null\n//            )\n//        {\n//            if (principal == null)\n//            {\n//                throw new ArgumentNullException(nameof(principal));\n//            }\n//            if (principal.CanEditProject(projectId)) return true;\n\n//            var claim = principal.FindFirst(\"PageEditor\");\n//            if (claim == null) { return false; }\n//            if (claim.Value == projectId) { return true; }\n//            return false;\n//        }\n\n//        public static bool CanEditBlog(this ClaimsPrincipal principal, string projectId)\n//        {\n//            if (principal == null)\n//            {\n//                throw new ArgumentNullException(nameof(principal));\n//            }\n//            if (principal.CanEditProject(projectId)) return true;\n\n//            var claim = principal.FindFirst(\"BlogEditor\");\n//            if (claim == null) { return false; }\n//            if (claim.Value == projectId) { return true; }\n//            return false;\n//        }\n\n\n\n//    }\n//}\n"
  },
  {
    "path": "src/cloudscribe.Core.SimpleContent/ContentSettingsUIConfig.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Text;\n\nnamespace cloudscribe.Core.SimpleContent\n{\n    public class ContentSettingsUIConfig\n    {\n        public bool ShowBlogMenuOptions { get; set; } = true;\n        public bool ShowBlogSettings { get; set; } = true;\n        public bool ShowPageSettings { get; set; } = true;\n        public bool ShowDefaultContentType { get; set; } = false;\n\n        public bool ShowCommentSettings { get; set; } = true;\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.Core.SimpleContent/Controllers/ContentCloningController.cs",
    "content": "// Copyright (c) Source Tree Solutions, LLC. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.\n// Author:\t\t\t\t\tJoe Audette\n// Created:\t\t\t\t\t2016-08-07\n// Last Modified:\t\t\t2019-03-04\n//\n\nusing cloudscribe.Core.Models;\nusing cloudscribe.Core.SimpleContent.Integration.ViewModels;\nusing cloudscribe.Core.Web.Components;\nusing cloudscribe.SimpleContent.Models;\nusing cloudscribe.SimpleContent.Web.Services;\nusing cloudscribe.Web.Common.Extensions;\nusing cloudscribe.Web.Navigation;\nusing cloudscribe.Web.Navigation.Caching;\nusing Microsoft.AspNetCore.Authorization;\nusing Microsoft.AspNetCore.Mvc;\nusing Microsoft.Extensions.Configuration;\nusing Microsoft.Extensions.Localization;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace cloudscribe.Core.SimpleContent.Integration.Mvc.Controllers\n{\n\n    public class ContentCloningController : Controller\n    {\n        private readonly IProjectService    _projectService;\n        private readonly SiteManager        _siteManager;\n        private readonly ISiteQueries       _siteQueries;\n        private readonly IProjectCommands   _projectCommands;\n        private readonly IPageQueries       _pageQueries;\n        private readonly IPageCommands      _pageCommands;\n        private readonly IPostQueries       _postQueries;\n        private readonly IPostCommands      _postCommands;\n        private readonly IConfiguration     _configuration;\n        private readonly ITreeCache _treeCache;\n        private readonly IStringLocalizer   sr;\n\n        public ContentCloningController(\n            IProjectService  projectService,\n            SiteManager      siteManager,\n            ISiteQueries     siteQueries,\n            IProjectCommands projectCommands,\n            IPageQueries     pageQueries,\n            IPageCommands    pageCommands,\n            IPostQueries     postQueries,\n            IPostCommands    postCommands,\n            IConfiguration   configuration,\n            ITreeCache       treeCache,\n            IStringLocalizer<cloudscribe.SimpleContent.Web.SimpleContent> localizer\n            )\n        {\n            _projectService  = projectService;\n            _siteManager     = siteManager;\n            _siteQueries     = siteQueries;\n            _projectCommands = projectCommands;\n            _pageQueries     = pageQueries;\n            _pageCommands    = pageCommands;\n            _postQueries     = postQueries;\n            _postCommands    = postCommands;\n            _configuration   = configuration;\n            _treeCache       = treeCache;\n            sr               = localizer;\n        }\n\n        [Authorize(Policy = \"AdminPolicy\")]\n        // GET: /ContentCloning/index[?siteId=]\n        [HttpGet]\n        public async Task<IActionResult> Index(string siteId = null)\n        {\n            ViewData[\"Title\"] = sr[\"Content Cloning\"];\n\n            var model = new ContentCloningViewModel() { SiteId = siteId };\n\n            model = await PopulateAndValidateModel(model); //add the list of sites to the model and do validation\n\n            return View(model);\n        }\n\n        [Authorize(Policy = \"AdminPolicy\")]\n        [HttpPost]\n        public async Task<IActionResult> Index(ContentCloningViewModel model)\n        {\n            ViewData[\"Title\"] = sr[\"Content Cloning\"];\n\n            if (!ModelState.IsValid)\n            {\n                return View(model);\n            }\n\n            model = await PopulateAndValidateModel(model); //add the list of sites to the model and do validation\n\n            if (!model.CloneAllowed)\n            {\n                return View(model);\n            }\n\n            if(string.IsNullOrWhiteSpace(model.Command) || model.Command != \"clone\")\n            {\n                return View(model);\n            }\n\n            // at this point we're ready to clone the ProjectSettings, Pages and Posts\n\n            //Project aka Site Content Settings\n            if(model.CloneContentSettings)\n            {\n                try\n                {\n                    string projectId = await _projectCommands.CloneToNewProject(\n                        model.CloneFromSiteId,\n                        model.CloneToSiteId,\n                        model.CloneToSiteName\n                    );\n                    this.AlertSuccess(sr[\"Content Settings cloning was successful!\"], true);\n                }\n                catch(Exception ex)\n                {\n                    this.AlertDanger(sr[\"Failed to clone the Content Settings!\"], true);\n                    this.AlertDanger(ex.Message, true);\n                    return View(model);\n                }\n            }\n\n            //Clone the Pages. This has to be done in two passes because we need to know the new page ids\n            //in order to properly update the parent child relationships\n            int pageCopyCount = 0;\n            int pageUpdateCount = 0;\n            if(model.ClonePages)\n            {\n                bool copySuccessful = false;\n                try\n                {\n                    List<IPage> pages = await _pageQueries.GetAllPages(model.CloneFromSiteId);\n                    foreach(var page in pages)\n                    {\n                        string pageId = await _pageCommands.CloneToNewProject(\n                            model.CloneFromSiteId,\n                            model.CloneToSiteId,\n                            page.Id\n                        );\n                        if(!string.IsNullOrWhiteSpace(pageId)) pageCopyCount++;\n                    }\n                    copySuccessful = true;\n                }\n                catch (Exception ex)\n                {\n                    this.AlertDanger(string.Format(sr[\"An error occurred while cloning content pages. Only {0}/{1} were copied.\"], pageCopyCount, model.CloneFromPageCount), true);\n                    this.AlertDanger(ex.Message, true);\n                }\n                if(copySuccessful)\n                {\n                    try\n                    {\n                        List<IPage> newPages = await _pageQueries.GetAllPages(model.CloneToSiteId);\n                        List<IPage> oldPages = await _pageQueries.GetAllPages(model.CloneFromSiteId);\n\n                        foreach (var newPage in newPages)\n                        {\n                            if(newPage.ParentId != null && newPage.ParentId != \"0\")\n                            {\n                                // find the old parent of the page that has been copied\n                                var oldParent = oldPages.FirstOrDefault(x => x.Id == newPage.ParentId);\n\n                                if (oldParent != null)\n                                {\n                                    // find the matching new page that will now be the new parent\n                                    var newParent = newPages.FirstOrDefault(x => x.Slug == oldParent.Slug);\n\n                                    if (newParent != null)\n                                    { \n                                        newPage.ParentId   = newParent.Id;\n                                        newPage.ParentSlug = newParent.Slug;\n                                    }\n                                    else  //orphaned page - can't find the old parent's slug among the newly cloned pages\n                                    {\n                                        newPage.ParentId = \"0\";\n                                        newPage.ParentSlug = \"\";\n                                    }\n                                }\n                                else  //orphaned page - can't find the old parent Id of the page that has been copied\n                                {\n                                    newPage.ParentId = \"0\";\n                                    newPage.ParentSlug = \"\";\n                                }\n\n                                await _pageCommands.Update(model.CloneToSiteId, newPage);\n                            }\n\n                            pageUpdateCount++;\n                        }\n                    }\n                    catch (Exception ex)\n                    {\n                        this.AlertDanger(string.Format(sr[\"An error occurred while updating content pages tree. Only {0}/{1} were updated.\"], pageUpdateCount, model.CloneFromPageCount), true);\n                        this.AlertDanger(ex.Message, true);\n                    }\n                }\n\n                if(pageCopyCount == model.CloneFromPageCount && pageUpdateCount == model.CloneFromPageCount)\n                {\n                    this.AlertSuccess(sr[\"Content pages cloning was successful!\"], true);\n                }\n            }\n\n            //Clone the Posts\n            int postCount = 0;\n            if (model.CloneBlogPosts)\n            {\n                try\n                {\n                    List<IPost> posts = await _postQueries.GetPosts(model.CloneFromSiteId, true);\n                    foreach (var post in posts)\n                    {\n                        string postId = await _postCommands.CloneToNewProject(\n                            model.CloneFromSiteId,\n                            model.CloneToSiteId,\n                            post.Id\n                        );\n                        if (!string.IsNullOrWhiteSpace(postId)) postCount++;\n                    }\n                }\n                catch (Exception ex)\n                {\n                    this.AlertDanger(string.Format(sr[\"An error occurred while cloning blog posts. Only {0}/{1} were copied.\"],postCount, model.CloneFromPostCount), true);\n                    this.AlertDanger(ex.Message, true);\n                }\n                if(postCount == model.CloneFromPostCount)\n                {\n                    this.AlertSuccess(sr[\"Blog post cloning was successful!\"], true);\n                }\n            }\n\n            if(model.RewriteContentUrls)\n            {\n                this.AlertInformation(sr[\"Rewriting content urls is not yet implemented.\"], true);\n            }\n\n            await _treeCache.ClearTreeCache();\n\n            return View(model);\n        }\n\n        private async Task<ContentCloningViewModel> PopulateAndValidateModel(ContentCloningViewModel model)\n        {\n\n            bool isServerAdminSite = _siteManager.CurrentSite.IsServerAdminSite;\n            string currentSiteId = _siteManager.CurrentSite.Id.ToString();\n\n            if(isServerAdminSite)\n            {\n                //if we are on a specific site settings page then we can preselect the site to clone to\n                if(!string.IsNullOrWhiteSpace(model.SiteId))\n                {\n                    model.CloneToSiteId = model.SiteId;\n                    model.AllowCloneToSiteSelection = false;\n                }\n            }\n            else\n            {   //can't allow destination site selection if we are not on the server admin site\n                model.SiteId = currentSiteId;\n                model.CloneToSiteId = currentSiteId;\n                model.AllowCloneToSiteSelection = false;\n            }\n\n            bool useFolderNames = _configuration.GetSection(\"MultiTenantOptions\").GetValue<string>(\"Mode\") == \"FolderName\";\n\n            List<ISiteInfo> sites = await _siteQueries.GetList();\n\n            //build the sites list for To and From, excluding any site selected in the other list\n            foreach(var site in sites)\n            {\n                string url = string.Empty;\n                if(useFolderNames) url = \"/\" + site.SiteFolderName;\n                else url = site.PreferredHostName;\n\n                bool addTo = true;\n                bool addFrom = true;\n\n                if(!string.IsNullOrWhiteSpace(model.CloneToSiteId) &&\n                    model.CloneToSiteId == site.Id.ToString())\n                {\n                    addFrom= false;\n                    model.CloneToSiteName = site.SiteName;\n                    model.CloneToPageCount = await _pageQueries.GetCount(model.CloneToSiteId, true);\n                    model.CloneToPostCount = await _postQueries.GetCount(model.CloneToSiteId, null, true);\n                }\n\n                if (!string.IsNullOrWhiteSpace(model.CloneFromSiteId) &&\n                    model.CloneFromSiteId == site.Id.ToString())\n                {\n                    addTo = false;\n                    model.CloneFromSiteName = site.SiteName;\n                    model.CloneFromPageCount = await _pageQueries.GetCount(model.CloneFromSiteId, true);\n                    model.CloneFromPostCount = await _postQueries.GetCount(model.CloneFromSiteId, null, true);\n                }\n\n                if (addTo)\n                {\n                    model.CloneToSites.Add(new ContentCloningViewModel.SiteDetails\n                    {\n                        SiteId = site.Id.ToString(),\n                        SiteIdentifier = site.SiteName + \" (\" + url + \") [ \" + site.Id + \" ]\"\n                    });\n                }\n\n                if(addFrom)\n                {\n                    model.CloneFromSites.Add(new ContentCloningViewModel.SiteDetails\n                    {\n                        SiteId = site.Id.ToString(),\n                        SiteIdentifier = site.SiteName + \" (\" + url + \") [ \" + site.Id + \" ]\"\n                    });\n                }\n            }\n\n            model.CloneAllowed = true;\n\n            if(string.IsNullOrWhiteSpace(model.CloneToSiteId))\n            {\n                model.CloneAllowed = false;\n                this.AlertDanger(sr[\"Please select a destination site!\"], true);\n            }\n            else\n            {\n                if (model.ClonePages && model.CloneToPageCount > 0)\n                {\n                    model.CloneAllowed = false;\n                    if(model.AllowCloneToSiteSelection)\n                    {\n                        this.AlertWarning(\n                            string.Format(sr[\"The destination site you have chosen already contains {0} content pages!\"], model.CloneToPageCount),\n                            true);\n                    }\n                    else\n                    {\n                        this.AlertWarning(\n                            string.Format(sr[\"This site already contains {0} content pages!\"], model.CloneToPageCount),\n                            true);\n                    }\n                }\n\n                if (model.CloneBlogPosts && model.CloneToPostCount > 0)\n                {\n                    model.CloneAllowed = false;\n                    if (model.AllowCloneToSiteSelection)\n                    {\n                        this.AlertWarning(\n                            string.Format(sr[\"The destination site you have chosen already contains {0} blog posts!\"], model.CloneToPostCount),\n                            true);\n                    }\n                    else\n                    {\n                        this.AlertWarning(\n                            string.Format(sr[\"This site already contains {0} blog posts!\"], model.CloneToPostCount),\n                            true);\n                    }\n                }\n            }\n\n            if(model.CloneAllowed)\n            {\n                if(string.IsNullOrWhiteSpace(model.CloneFromSiteId))\n                {\n                    model.CloneAllowed = false;\n                    this.AlertDanger(sr[\"Please select a source site!\"], true);\n                }\n                else\n                {\n                    if (model.CloneFromPageCount == 0 && model.CloneFromPostCount == 0)\n                    {\n                        model.CloneAllowed = false;\n                        this.AlertWarning(\n                            sr[\"The source site you have chosen does not contain any content pages or blog posts!\"],\n                            true);\n                    }\n                    else\n                    {\n                        this.AlertInformation(\n                            string.Format(sr[\"The source site you have chosen contains {0} content pages and {1} blog posts.\"], model.CloneFromPageCount, model.CloneFromPostCount),\n                            true);\n                    }\n                }\n            }\n            else\n            {\n                if(!string.IsNullOrWhiteSpace(model.CloneToSiteId))\n                    this.AlertDanger(sr[\"Content Cloning is not possible for this site.\"], true);\n            }\n\n            return model;\n        }\n    }\n\n}\n"
  },
  {
    "path": "src/cloudscribe.Core.SimpleContent/Controllers/ContentSettingsController.cs",
    "content": "﻿// Copyright (c) Source Tree Solutions, LLC. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.\n// Author:\t\t\t\t\tJoe Audette\n// Created:\t\t\t\t\t2016-08-07\n// Last Modified:\t\t\t2019-03-04\n//\n\nusing cloudscribe.Core.Models;\nusing cloudscribe.Core.SimpleContent.Integration.ViewModels;\nusing cloudscribe.SimpleContent.Models;\nusing cloudscribe.SimpleContent.Web.Services;\nusing cloudscribe.Web.Common.Extensions;\nusing cloudscribe.Web.Navigation;\nusing Microsoft.AspNetCore.Authorization;\nusing Microsoft.AspNetCore.Mvc;\nusing Microsoft.Extensions.Localization;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading.Tasks;\n\nnamespace cloudscribe.Core.SimpleContent.Integration.Mvc.Controllers\n{\n\n    public class ContentSettingsController : Controller\n    {\n        public ContentSettingsController(\n            IProjectService projectService,\n            IAuthorizationService authorizationService,\n            IUserQueries userQueries,\n            ITeaserService teaserService,\n            NavigationTreeBuilderService navigationTreeBuilderService,\n            IStringLocalizer<cloudscribe.SimpleContent.Web.SimpleContent> localizer\n            )\n        {\n            this.projectService = projectService;\n            this.authorizationService = authorizationService;\n            this.userQueries = userQueries;\n            sr = localizer;\n            if(teaserService is TeaserServiceDisabled)\n            {\n                _teasersDisabled = true;\n            }\n            _navigationTreeBuilderService = navigationTreeBuilderService;\n        }\n\n        private IProjectService projectService;\n        private IAuthorizationService authorizationService;\n        private IUserQueries userQueries;\n        private bool _teasersDisabled = false;\n        private IStringLocalizer sr;\n        private readonly NavigationTreeBuilderService _navigationTreeBuilderService;\n\n        [Authorize(Policy = \"AdminPolicy\")]\n        // GET: /ContentSettings\n        [HttpGet]\n        public async Task<IActionResult> Index()\n        {\n            ViewData[\"Title\"] = sr[\"Content Settings\"];\n\n            var projectSettings = await projectService.GetCurrentProjectSettings();\n\n            var model = new ContentSettingsViewModel();\n            model.ChannelCategoriesCsv = projectSettings.ChannelCategoriesCsv;\n            //model.ChannelRating = projectSettings.ChannelRating;\n            //model.ChannelTimeToLive = projectSettings.ChannelTimeToLive;\n            model.CommentNotificationEmail = projectSettings.CommentNotificationEmail;\n            model.DaysToComment = projectSettings.DaysToComment;\n            model.Description = projectSettings.Description;\n            model.IncludePubDateInPostUrls = projectSettings.IncludePubDateInPostUrls;\n            model.LanguageCode = projectSettings.LanguageCode;\n            model.ManagingEditorEmail = projectSettings.ManagingEditorEmail;\n            model.ModerateComments = projectSettings.ModerateComments;\n            model.PostsPerPage = projectSettings.PostsPerPage;\n            model.PubDateFormat = projectSettings.PubDateFormat;\n            //model.RemoteFeedProcessorUseAgentFragment = projectSettings.RemoteFeedProcessorUseAgentFragment;\n            model.RemoteFeedUrl = projectSettings.RemoteFeedUrl;\n            model.ShowTitle = projectSettings.ShowTitle;\n            model.Title = projectSettings.Title; //aka Blog Page Title\n            //model.UseMetaDescriptionInFeed = projectSettings.UseMetaDescriptionInFeed;\n            model.WebmasterEmail = projectSettings.WebmasterEmail;\n            model.Publisher = projectSettings.Publisher;\n            model.PublisherLogoUrl = projectSettings.PublisherLogoUrl;\n            model.PublisherLogoHeight = projectSettings.PublisherLogoHeight;\n            model.PublisherLogoWidth = projectSettings.PublisherLogoWidth;\n            model.PublisherEntityType = projectSettings.PublisherEntityType;\n            model.DisqusShortName = projectSettings.DisqusShortName;\n            model.PostsPerPage = projectSettings.PostsPerPage;\n\n            model.BlogMenuLinksToNewestPost = projectSettings.BlogMenuLinksToNewestPost;\n            model.DefaultPageSlug = projectSettings.DefaultPageSlug;\n            model.ShowRecentPostsOnDefaultPage = projectSettings.ShowRecentPostsOnDefaultPage;\n            model.ShowFeaturedPostsOnDefaultPage = projectSettings.ShowFeaturedPostsOnDefaultPage;\n\n            model.AddBlogToPagesTree = projectSettings.AddBlogToPagesTree;\n            model.BlogPagePosition = projectSettings.BlogPagePosition;\n            model.BlogPageText = projectSettings.BlogPageText;\n            model.BlogPageNavComponentVisibility = projectSettings.BlogPageNavComponentVisibility;\n            model.LocalMediaVirtualPath = projectSettings.LocalMediaVirtualPath;\n            model.CdnUrl = projectSettings.CdnUrl;\n\n            model.FacebookAppId = projectSettings.FacebookAppId;\n            model.SiteName = projectSettings.SiteName;\n            model.TwitterCreator = projectSettings.TwitterCreator;\n            model.TwitterPublisher = projectSettings.TwitterPublisher;\n            model.DefaultContentType = projectSettings.DefaultContentType;\n\n            model.TeasersDisabled = _teasersDisabled;\n            model.TeaserMode = projectSettings.TeaserMode;\n            model.TeaserTruncationMode = projectSettings.TeaserTruncationMode;\n            model.TeaserTruncationLength = projectSettings.TeaserTruncationLength;\n\n            model.DefaultFeedItems = projectSettings.DefaultFeedItems;\n            model.MaxFeedItems = projectSettings.MaxFeedItems;\n            model.AboutContent = projectSettings.AboutContent;\n            model.AboutHeading = projectSettings.AboutHeading;\n            model.ShowAboutBox = projectSettings.ShowAboutBox;\n            model.ShowRelatedPosts = projectSettings.ShowRelatedPosts;\n            model.ShowArchivedPosts = projectSettings.ShowArchivedPosts;\n            model.ShowBlogCategories = projectSettings.ShowBlogCategories;\n\n            model.ShowCreatedBy = projectSettings.ShowCreatedBy;\n            model.ShowCreatedDate = projectSettings.ShowCreatedDate;\n            model.ShowLastModifiedBy = projectSettings.ShowLastModifiedBy;\n            model.ShowLastModifiedDate = projectSettings.ShowLastModifiedDate;\n\n            bool canManageUsers = false;\n            try\n            {\n                var result = await authorizationService.AuthorizeAsync(User, \"UserManagementPolicy\");\n                canManageUsers = result.Succeeded;\n            }\n            catch (InvalidOperationException) { } // thrown if policy doesn't exist\n\n\n            if(canManageUsers)\n            {\n                var projectId = projectSettings.Id;\n                if(projectId.Length > 36)\n                {\n                    projectId = projectId.Substring(0, 36);\n                }\n\n                var editors = new List<ISiteUser>();\n\n                var contentEditors = await userQueries.GetUsersForClaim(\n                    new Guid(projectId),\n                    ProjectConstants.ContentEditorClaimType,\n                    projectSettings.Id\n                    );\n\n                if(contentEditors != null)\n                {\n                    editors.AddRange(contentEditors);\n                }\n\n                var blogEditors = await userQueries.GetUsersForClaim(\n                    new Guid(projectId),\n                    ProjectConstants.BlogEditorClaimType,\n                    projectSettings.Id\n                    );\n\n                if(blogEditors != null)\n                {\n                    editors.AddRange(blogEditors);\n                }\n\n                var pageEditors = await userQueries.GetUsersForClaim(\n                    new Guid(projectId),\n                    ProjectConstants.PageEditorClaimType,\n                    projectSettings.Id\n                    );\n\n\n                if (pageEditors != null)\n                {\n                    editors.AddRange(pageEditors);\n                }\n\n                foreach(var e in editors)\n                {\n                    if(!model.Editors.Any(x => x.Id == e.Id))\n                    {\n                        model.Editors.Add(e);\n                    }\n                }\n\n                //model.Editors.AddRange(editors.Distinct());\n\n\n            }\n\n\n            return View(model);\n        }\n\n        [Authorize(Policy = \"AdminPolicy\")]\n        [HttpPost]\n        public async Task<IActionResult> Index(ContentSettingsViewModel model)\n        {\n            ViewData[\"Title\"] = sr[\"Content Settings\"];\n\n            if (!ModelState.IsValid)\n            {\n                model.TeasersDisabled = _teasersDisabled;\n                return View(model);\n            }\n\n            var projectSettings = await projectService.GetCurrentProjectSettings();\n\n            projectSettings.ChannelCategoriesCsv = model.ChannelCategoriesCsv;\n            //projectSettings.ChannelRating = model.ChannelRating;\n            //projectSettings.ChannelTimeToLive = model.ChannelTimeToLive;\n            projectSettings.CommentNotificationEmail = model.CommentNotificationEmail;\n            projectSettings.DaysToComment = model.DaysToComment;\n            projectSettings.Description = model.Description;\n            projectSettings.IncludePubDateInPostUrls = model.IncludePubDateInPostUrls;\n            projectSettings.LanguageCode = model.LanguageCode;\n            projectSettings.ManagingEditorEmail = model.ManagingEditorEmail;\n            projectSettings.ModerateComments = model.ModerateComments;\n            projectSettings.PostsPerPage = model.PostsPerPage;\n            projectSettings.PubDateFormat = model.PubDateFormat;\n            //projectSettings.RemoteFeedProcessorUseAgentFragment = model.RemoteFeedProcessorUseAgentFragment;\n            projectSettings.RemoteFeedUrl = model.RemoteFeedUrl;\n            projectSettings.ShowTitle = model.ShowTitle;\n            projectSettings.Title = model.Title;\n            //projectSettings.UseMetaDescriptionInFeed = model.UseMetaDescriptionInFeed;\n            projectSettings.WebmasterEmail = model.WebmasterEmail;\n            projectSettings.Publisher = model.Publisher;\n            projectSettings.PublisherLogoUrl = model.PublisherLogoUrl;\n            projectSettings.PublisherLogoWidth = model.PublisherLogoWidth;\n            projectSettings.PublisherLogoHeight = model.PublisherLogoHeight;\n            projectSettings.PublisherEntityType = model.PublisherEntityType;\n            projectSettings.DisqusShortName = model.DisqusShortName;\n            projectSettings.ShowRecentPostsOnDefaultPage = model.ShowRecentPostsOnDefaultPage;\n            projectSettings.ShowFeaturedPostsOnDefaultPage = model.ShowFeaturedPostsOnDefaultPage;\n\n            bool needToClearMenuCache = false;\n\n            if (model.BlogMenuLinksToNewestPost != projectSettings.BlogMenuLinksToNewestPost) needToClearMenuCache = true;\n            if (model.DefaultPageSlug != projectSettings.DefaultPageSlug) needToClearMenuCache = true;\n            if (model.AddBlogToPagesTree != projectSettings.AddBlogToPagesTree) needToClearMenuCache = true;\n            if (model.BlogPagePosition != projectSettings.BlogPagePosition) needToClearMenuCache = true;\n            if (model.BlogPageText != projectSettings.BlogPageText) needToClearMenuCache = true;\n            if (model.BlogPageNavComponentVisibility != projectSettings.BlogPageNavComponentVisibility) needToClearMenuCache = true;\n\n            projectSettings.BlogMenuLinksToNewestPost = model.BlogMenuLinksToNewestPost;\n            projectSettings.DefaultPageSlug = model.DefaultPageSlug;\n            projectSettings.BlogPagePosition = model.BlogPagePosition;\n            projectSettings.AddBlogToPagesTree = model.AddBlogToPagesTree;\n            projectSettings.BlogPageText = model.BlogPageText;\n            projectSettings.BlogPageNavComponentVisibility = model.BlogPageNavComponentVisibility;\n            projectSettings.LocalMediaVirtualPath = model.LocalMediaVirtualPath;\n            projectSettings.CdnUrl = model.CdnUrl;\n\n            projectSettings.FacebookAppId = model.FacebookAppId;\n            projectSettings.SiteName = model.SiteName;\n            projectSettings.TwitterPublisher = model.TwitterPublisher;\n            projectSettings.TwitterCreator = model.TwitterCreator;\n            projectSettings.DefaultContentType = model.DefaultContentType;\n\n            projectSettings.TeaserMode = model.TeaserMode;\n            projectSettings.TeaserTruncationLength = model.TeaserTruncationLength;\n            projectSettings.TeaserTruncationMode = model.TeaserTruncationMode;\n\n            projectSettings.DefaultFeedItems = model.DefaultFeedItems;\n            projectSettings.MaxFeedItems = model.MaxFeedItems;\n            projectSettings.AboutContent = model.AboutContent;\n            projectSettings.AboutHeading = model.AboutHeading;\n            projectSettings.ShowAboutBox = model.ShowAboutBox;\n            projectSettings.ShowRelatedPosts = model.ShowRelatedPosts;\n            projectSettings.ShowArchivedPosts = model.ShowArchivedPosts;\n            projectSettings.ShowBlogCategories = model.ShowBlogCategories;\n\n            projectSettings.ShowCreatedBy = model.ShowCreatedBy;\n            projectSettings.ShowCreatedDate = model.ShowCreatedDate;\n            projectSettings.ShowLastModifiedBy = model.ShowLastModifiedBy;\n            projectSettings.ShowLastModifiedDate = model.ShowLastModifiedDate;\n\n            await projectService.Update(projectSettings);\n            if(needToClearMenuCache)\n            {\n                //projectService.ClearNavigationCache();\n                await _navigationTreeBuilderService.ClearTreeCache();\n\n            }\n\n            this.AlertSuccess(sr[\"Content Settings were successfully updated.\"], true);\n\n            return RedirectToAction(\"Index\");\n\n\n        }\n\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.Core.SimpleContent/Controllers/CultureMetaweblogController.cs",
    "content": "﻿using cloudscribe.MetaWeblog;\nusing cloudscribe.MetaWeblog.Controllers;\nusing cloudscribe.MetaWeblog.Models;\nusing Microsoft.AspNetCore.Hosting;\nusing Microsoft.AspNetCore.Mvc;\nusing Microsoft.Extensions.Logging;\nusing Microsoft.Extensions.Options;\nusing System.Threading.Tasks;\n\nnamespace cloudscribe.Core.SimpleContent.Controllers\n{\n    public class CultureMetaweblogController : MetaWeblogController\n    {\n        public CultureMetaweblogController(\n            IWebHostEnvironment appEnv,\n            IMetaWeblogRequestParser metaWeblogRequestParser,\n            IMetaWeblogRequestProcessor metaWeblogProcessor,\n            IMetaWeblogResultFormatter metaWeblogResultFormatter,\n            IMetaWeblogSecurity metaWeblogSecurity,\n            IMetaWeblogRequestValidator metaWebLogRequestValidator,\n            ILogger<MetaWeblogController> logger,\n            IOptions<ApiOptions> optionsAccessor = null\n            ) : base(appEnv, metaWeblogRequestParser, metaWeblogProcessor, metaWeblogResultFormatter, metaWeblogSecurity, metaWebLogRequestValidator, logger, optionsAccessor)\n        {\n\n        }\n\n        [HttpPost]\n        //[Route(\"{folder:sitefolder}/api/metaweblog\")]\n        public override async Task<IActionResult> Index()\n        {\n            return await base.Index();\n        }\n\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.Core.SimpleContent/Controllers/CultureRssController.cs",
    "content": "﻿using cloudscribe.Syndication.Models.Rss;\nusing cloudscribe.Syndication.Web.Controllers;\nusing Microsoft.AspNetCore.Mvc;\nusing Microsoft.Extensions.Logging;\nusing System.Collections.Generic;\nusing System.Threading.Tasks;\n\nnamespace cloudscribe.Core.SimpleContent.Controllers\n{\n    public class CultureRssController : RssController\n    {\n        public CultureRssController(\n            ILogger<RssController> logger,\n            IEnumerable<IChannelProvider> channelProviders = null,\n            IChannelProviderResolver channelResolver = null,\n            IXmlFormatter xmlFormatter = null\n            ) : base(logger, channelProviders, channelResolver, xmlFormatter)\n        {\n\n        }\n\n        [HttpGet]\n        [ResponseCache(CacheProfileName = \"RssCacheProfile\")]\n        //[Route(\"{folder:sitefolder}/api/rss\")]\n        public override async Task<IActionResult> Index()\n        {\n            return await base.Index();\n        }\n\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.Core.SimpleContent/Controllers/CultureSiteMapController.cs",
    "content": "﻿using cloudscribe.Web.SiteMap;\nusing cloudscribe.Web.SiteMap.Controllers;\nusing Microsoft.AspNetCore.Mvc;\nusing Microsoft.Extensions.Logging;\nusing System.Collections.Generic;\nusing System.Threading.Tasks;\n\nnamespace cloudscribe.Core.SimpleContent.Controllers\n{\n    public class CultureSiteMapController : SiteMapController\n    {\n        public CultureSiteMapController(\n            ILogger<SiteMapController> logger,\n            IEnumerable<ISiteMapNodeService> nodeProviders = null\n            ):base(logger, nodeProviders)\n        {\n\n        }\n\n        [HttpGet]\n        [ResponseCache(CacheProfileName = \"SiteMapCacheProfile\")]\n        public override async Task<IActionResult> Index()\n        {\n            return await base.Index();\n        }\n\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.Core.SimpleContent/Controllers/FolderMetaweblogController.cs",
    "content": "﻿using cloudscribe.MetaWeblog;\nusing cloudscribe.MetaWeblog.Controllers;\nusing cloudscribe.MetaWeblog.Models;\nusing Microsoft.AspNetCore.Hosting;\nusing Microsoft.AspNetCore.Mvc;\nusing Microsoft.Extensions.Logging;\nusing Microsoft.Extensions.Options;\nusing System.Threading.Tasks;\n\nnamespace cloudscribe.Core.SimpleContent.Controllers\n{\n    public class FolderMetaweblogController : MetaWeblogController\n    {\n        public FolderMetaweblogController(\n            IWebHostEnvironment appEnv,\n            IMetaWeblogRequestParser metaWeblogRequestParser,\n            IMetaWeblogRequestProcessor metaWeblogProcessor,\n            IMetaWeblogResultFormatter metaWeblogResultFormatter,\n            IMetaWeblogSecurity metaWeblogSecurity,\n            IMetaWeblogRequestValidator metaWebLogRequestValidator,\n            ILogger<MetaWeblogController> logger,\n            IOptions<ApiOptions> optionsAccessor = null\n            ):base(appEnv, metaWeblogRequestParser, metaWeblogProcessor, metaWeblogResultFormatter, metaWeblogSecurity, metaWebLogRequestValidator, logger, optionsAccessor)\n        {\n\n        }\n\n        [HttpPost]\n        //[Route(\"{folder:sitefolder}/api/metaweblog\")]\n        public override async Task<IActionResult> Index()\n        {\n            return await base.Index();\n        }\n\n\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.Core.SimpleContent/Controllers/FolderRssController.cs",
    "content": "﻿using cloudscribe.Syndication.Models.Rss;\nusing cloudscribe.Syndication.Web.Controllers;\nusing Microsoft.AspNetCore.Mvc;\nusing Microsoft.Extensions.Logging;\nusing System.Collections.Generic;\nusing System.Threading.Tasks;\n\nnamespace cloudscribe.Core.SimpleContent.Controllers\n{\n    public class FolderRssController : RssController\n    {\n        public FolderRssController(\n            ILogger<RssController> logger,\n            IEnumerable<IChannelProvider> channelProviders = null,\n            IChannelProviderResolver channelResolver = null,\n            IXmlFormatter xmlFormatter = null\n            ):base(logger, channelProviders, channelResolver, xmlFormatter)\n        {\n\n        }\n\n        [HttpGet]\n        [ResponseCache(CacheProfileName = \"RssCacheProfile\")]\n        //[Route(\"{folder:sitefolder}/api/rss\")]\n        public override async Task<IActionResult> Index()\n        {\n            return await base.Index();\n        }\n\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.Core.SimpleContent/CoreProjectEmailService.cs",
    "content": "﻿using cloudscribe.Core.Models;\nusing cloudscribe.Core.SimpleContent.ViewModels;\n// Copyright (c) Source Tree Solutions, LLC. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.\n// Author:                  Joe Audette\n// Created:                 2018-03-15\n// Last Modified:           2018-03-15\n// \n\n\nusing cloudscribe.Email;\nusing cloudscribe.SimpleContent.Models;\nusing cloudscribe.Web.Common.Razor;\nusing cloudscribe.Core.Web.Components;\nusing Microsoft.Extensions.Logging;\nusing System;\nusing System.Threading.Tasks;\n\nnamespace cloudscribe.Core.SimpleContent\n{\n    public class CoreProjectEmailService : IProjectEmailService\n    {\n        public CoreProjectEmailService(\n            ViewRenderer viewRenderer,\n            ISiteContextResolver siteResolver,\n            IEmailSenderResolver emailSenderResolver,\n            ILogger<CoreProjectEmailService> logger\n            )\n        {\n            _viewRenderer = viewRenderer;\n            _emailSenderResolver = emailSenderResolver;\n            _siteResolver = siteResolver;\n            _log = logger;\n        }\n\n        private ViewRenderer _viewRenderer;\n        private ISiteContextResolver _siteResolver;\n        private IEmailSenderResolver _emailSenderResolver;\n        private ILogger _log;\n\n        public async Task SendCommentNotificationEmailAsync(\n            IProjectSettings project,\n            IPost post,\n            IComment comment,\n            string postUrl,\n            string approveUrl,\n            string deleteUrl\n            )\n        {\n            var sender = await _emailSenderResolver.GetEmailSender(project.Id);\n            if (sender == null)\n            {\n                var logMessage = $\"failed to send account confirmation email because email settings are not populated for site {project.Title}\";\n                _log.LogError(logMessage);\n                return;\n            }\n\n            if (string.IsNullOrWhiteSpace(project.CommentNotificationEmail))\n            {\n                var logMessage = $\"failed to send comment notification email because CommentNotificationEmail is not populated for project {project.Id}\";\n                _log.LogError(logMessage);\n                return;\n            }\n            \n            var site = await _siteResolver.GetById(new Guid(project.Id));\n\n            var model = new CoreCommentNotificationModel(site, project, post, comment, postUrl);\n            var subject = \"Blog comment: \" + post.Title;\n\n            string plainTextMessage = null;\n            string htmlMessage = null;\n\n            try\n            {\n                try\n                {\n                    htmlMessage\n                        = await _viewRenderer.RenderViewAsString<CoreCommentNotificationModel>(\"CommentNotificationEmail\", model);\n                }\n                catch (Exception ex)\n                {\n                    _log.LogError(\"error generating html email from razor template\", ex);\n                    return;\n                }\n\n                await sender.SendEmailAsync(\n                    project.CommentNotificationEmail, //to\n                    site.DefaultEmailFromAddress, //from\n                    subject,\n                    plainTextMessage,\n                    htmlMessage,\n                    comment.Email, //replyto\n                    configLookupKey: project.Id\n                    ).ConfigureAwait(false);\n            }\n            catch (Exception ex)\n            {\n                _log.LogError($\"error sending comment notification email {ex.Message} : {ex.StackTrace}\");\n            }\n\n        }\n\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.Core.SimpleContent/CustomClaimProvider.cs",
    "content": "﻿\n\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing cloudscribe.Core.Models;\nusing System.Security.Claims;\nusing Microsoft.Extensions.Options;\nusing cloudscribe.Core.Identity;\n\nnamespace cloudscribe.Core.SimpleContent.Integration\n{\n    public class CustomClaimProvider : ICustomClaimProvider\n    {\n        public CustomClaimProvider(\n            IOptions<List<CustomClaimMap>> claimMapsAccessor\n            )\n        {\n            claimMaps = claimMapsAccessor.Value;\n        }\n\n        private List<CustomClaimMap> claimMaps;\n\n        public Task AddClaims(SiteUser user, ClaimsIdentity identity)\n        {\n            foreach(var map in claimMaps)\n            {\n                if(map.UserEmail == user.Email)\n                {\n                    foreach(var c in map.Claims)\n                    {\n                        identity.AddClaim(new Claim(c.ClaimType, c.ClaimValue));\n                    }\n                }\n            }\n            \n            return Task.FromResult(0);\n        }\n\n        \n    }\n\n    public class CustomClaimMap\n    {\n        public string UserEmail { get; set; }\n        \n        public List<CustomClaim> Claims { get; set; }\n    }\n\n    public class CustomClaim\n    {\n        public string ClaimType { get; set; }\n        public string ClaimValue { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.Core.SimpleContent/EventHandlers/HandleRoleDeletred.cs",
    "content": "﻿using cloudscribe.Core.Models;\nusing cloudscribe.Core.Models.EventHandlers;\nusing cloudscribe.SimpleContent.Models;\nusing cloudscribe.Web.Navigation;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\n\nnamespace cloudscribe.Core.SimpleContent.EventHandlers\n{\n    public class HandleRoleDeleted : IHandleRoleDeleted\n    {\n        private readonly IPageService _pageService;\n        private readonly NavigationTreeBuilderService _nav;\n\n        public HandleRoleDeleted(IPageService pageService, \n            NavigationTreeBuilderService nav)\n        {\n            _pageService = pageService;\n            _nav         = nav;\n        }\n\n        async Task IHandleRoleDeleted.Handle(ISiteRole role)\n        {\n            var pages = await _pageService.GetAllPages(role.SiteId.ToString());\n            int pagesUpdated = 0;\n\n            foreach (var page in pages.Where(p => !string.IsNullOrWhiteSpace(p.ViewRoles)))\n            {\n                // assuming no case sensitivity issues here\n                if (page.ViewRoles.Contains(role.RoleName))\n                {\n                    var rolesStrings = page.ViewRoles.Split(',');\n                    var newRolesString = new StringBuilder();\n                    foreach (var roleName in rolesStrings)\n                    {\n                        if (!roleName.Trim().Equals(role.RoleName.Trim()))\n                        { \n                            newRolesString.Append(roleName.Trim());\n                            newRolesString.Append(\",\");\n                        }\n                    }\n\n                    page.ViewRoles = newRolesString.ToString().TrimEnd(',');\n\n                    await _pageService.Update(page);\n                    pagesUpdated++;\n                }\n            }\n\n            if (pagesUpdated > 0)\n                await _nav.GetTree();\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.Core.SimpleContent/EventHandlers/HandleRoleUpdated.cs",
    "content": "﻿using cloudscribe.Core.Models;\nusing cloudscribe.Core.Models.EventHandlers;\nusing cloudscribe.SimpleContent.Models;\nusing cloudscribe.Web.Navigation;\nusing Microsoft.AspNetCore.Http;\nusing Microsoft.Extensions.Logging;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Security.Claims;\nusing System.Text;\nusing System.Threading.Tasks;\n\nnamespace cloudscribe.Core.SimpleContent.EventHandlers\n{\n    public class HandleRoleUpdated : IHandleRoleUpdated\n    {\n        private readonly IPageService                 _pageService;\n        private readonly NavigationTreeBuilderService _nav;\n        private readonly IHttpContextAccessor         _httpContextAccessor;\n        private readonly ILogger<HandleRoleUpdated>   _logger;\n\n        public HandleRoleUpdated(IPageService pageService, \n            NavigationTreeBuilderService nav, \n            IHttpContextAccessor httpContextAccessor,\n            ILogger<HandleRoleUpdated> logger)\n        {\n            _pageService         = pageService;\n            _nav                 = nav;\n            _httpContextAccessor = httpContextAccessor;\n            _logger              = logger;\n        }\n\n\n        async Task IHandleRoleUpdated.Handle(ISiteRole role, string oldRoleName)\n        {\n            var pages = await _pageService.GetAllPages(role.SiteId.ToString());\n            int pagesUpdated = 0;\n\n            foreach (var page in pages.Where(p => !string.IsNullOrWhiteSpace(p.ViewRoles)))\n            {\n                // assuming no case sensitivity issues here\n                if (page.ViewRoles.Contains(oldRoleName))\n                {\n                    var rolesStrings = page.ViewRoles.Split(',');\n                    var newRolesString = new StringBuilder();\n                    foreach (var roleName in rolesStrings)\n                    {\n                        if (roleName.Trim().Equals(oldRoleName.Trim()))\n                            newRolesString.Append(role.RoleName);\n                        else\n                            newRolesString.Append(roleName.Trim());\n\n                        newRolesString.Append(\",\");\n                    }\n\n                    page.ViewRoles = newRolesString.ToString().TrimEnd(',');\n\n                    await _pageService.Update(page);\n                    pagesUpdated++;\n                }\n            }\n\n            ///////////////////////////////////\n            // This is an attempt to fiddle the navigation cache and the\n            // roles of the current user so that they remain in step with one another \n            // after a user renames a role that they themselves are in.\n            // Otherwise pages can mysteriously vanish from the nav when they should not do,\n            // following a role rename - jk\n            if (pagesUpdated > 0)\n            {\n                try\n                {\n                    var user = _httpContextAccessor?.HttpContext?.User;\n\n                    if (user != null && user.Identity != null && user.Identity.IsAuthenticated && user.IsInRole(oldRoleName))\n                    {\n                        var claims = new List<Claim>\n                            {\n                                new Claim(ClaimTypes.Role, role.RoleName)\n                            };\n\n                        var appIdentity = new ClaimsIdentity(claims);\n                        user.AddIdentity(appIdentity);\n                    }\n\n                    await _nav.GetTree();\n                }\n                catch (Exception ex)\n                {\n                    _logger.LogError(ex, \"Error re-setting user claims and cache after role update\");\n                }\n            }\n            ////////////////////////////////////////\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.Core.SimpleContent/MultiTenantBlogRoutes.cs",
    "content": "﻿// Copyright (c) Source Tree Solutions, LLC. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.\n// Author:                  Joe Audette\n// Created:                 2016-08-06\n// Last Modified:           2019-03-04\n\nusing cloudscribe.Core.Models;\nusing cloudscribe.SimpleContent.Models;\nusing cloudscribe.SimpleContent.Web.Services;\nusing Microsoft.Extensions.Options;\n\nnamespace cloudscribe.Core.SimpleContent.Integration\n{\n    public class MultiTenantBlogRoutes : IBlogRoutes\n    {\n        public MultiTenantBlogRoutes(\n            SiteContext currentSite,\n            IOptions<MultiTenantOptions> multiTenantOptionsAccessor,\n             CultureHelper cultureHelper\n            )\n        {\n            _currentSite = currentSite;\n            _multiTenantOptions = multiTenantOptionsAccessor.Value;\n            _cultureHelper = cultureHelper;\n        }\n\n        private readonly SiteContext _currentSite;\n        private readonly MultiTenantOptions _multiTenantOptions;\n        private readonly CultureHelper _cultureHelper;\n\n        public string PostWithDateRouteName\n        {\n            get\n            {\n                if(_multiTenantOptions.Mode == MultiTenantMode.FolderName)\n                {\n                    if(!string.IsNullOrEmpty(_currentSite.SiteFolderName))\n                    {\n                        if (_cultureHelper.UseCultureRoutesAndProjects() && !_cultureHelper.IsDefaultCulture())\n                        {\n                            return ProjectConstants.CultureFolderPostWithDateRouteName;\n                        }\n\n                        return ProjectConstants.FolderPostWithDateRouteName;\n                    }\n                }\n\n                if (_cultureHelper.UseCultureRoutesAndProjects() && !_cultureHelper.IsDefaultCulture())\n                {\n                    return ProjectConstants.CulturePostWithDateRouteName;\n                }\n\n                return ProjectConstants.PostWithDateRouteName;\n            }\n        }\n\n        public string PostWithoutDateRouteName\n        {\n            get\n            {\n                if (_multiTenantOptions.Mode == MultiTenantMode.FolderName)\n                {\n                    if (!string.IsNullOrEmpty(_currentSite.SiteFolderName))\n                    {\n                        if (_cultureHelper.UseCultureRoutesAndProjects() && !_cultureHelper.IsDefaultCulture())\n                        {\n                            return ProjectConstants.CultureFolderPostWithoutDateRouteName;\n                        }\n\n                        return ProjectConstants.FolderPostWithoutDateRouteName;\n                    }\n                }\n\n                if (_cultureHelper.UseCultureRoutesAndProjects() && !_cultureHelper.IsDefaultCulture())\n                {\n                    return ProjectConstants.CulturePostWithoutDateRouteName;\n                }\n\n                return ProjectConstants.PostWithoutDateRouteName;\n            }\n        }\n\n        public string MostRecentPostRouteName\n        {\n            get\n            {\n                if (_multiTenantOptions.Mode == MultiTenantMode.FolderName)\n                {\n                    if (!string.IsNullOrEmpty(_currentSite.SiteFolderName))\n                    {\n                        if (_cultureHelper.UseCultureRoutesAndProjects() && !_cultureHelper.IsDefaultCulture())\n                        {\n                            return ProjectConstants.CultureFolderMostRecentPostRouteName;\n                        }\n\n                        return ProjectConstants.FolderMostRecentPostRouteName;\n                    }\n                }\n\n                if (_cultureHelper.UseCultureRoutesAndProjects() && !_cultureHelper.IsDefaultCulture())\n                {\n                    return ProjectConstants.CultureMostRecentPostRouteName;\n                }\n\n                return ProjectConstants.MostRecentPostRouteName;\n            }\n        }\n\n        public string BlogCategoryRouteName\n        {\n            get\n            {\n                if (_multiTenantOptions.Mode == MultiTenantMode.FolderName)\n                {\n                    if (!string.IsNullOrEmpty(_currentSite.SiteFolderName))\n                    {\n                        if (_cultureHelper.UseCultureRoutesAndProjects() && !_cultureHelper.IsDefaultCulture())\n                        {\n                            return ProjectConstants.CultureFolderBlogCategoryRouteName;\n                        }\n\n                        return ProjectConstants.FolderBlogCategoryRouteName;\n                    }\n                }\n\n                if (_cultureHelper.UseCultureRoutesAndProjects() && !_cultureHelper.IsDefaultCulture())\n                {\n                    return ProjectConstants.CultureBlogCategoryRouteName;\n                }\n\n                return ProjectConstants.BlogCategoryRouteName;\n            }\n        }\n\n        public string BlogArchiveRouteName\n        {\n            get\n            {\n                if (_multiTenantOptions.Mode == MultiTenantMode.FolderName)\n                {\n                    if (!string.IsNullOrEmpty(_currentSite.SiteFolderName))\n                    {\n                        if (_cultureHelper.UseCultureRoutesAndProjects() && !_cultureHelper.IsDefaultCulture())\n                        {\n                            return ProjectConstants.CultureFolderBlogArchiveRouteName;\n                        }\n\n                        return ProjectConstants.FolderBlogArchiveRouteName;\n                    }\n                }\n\n                if (_cultureHelper.UseCultureRoutesAndProjects() && !_cultureHelper.IsDefaultCulture())\n                {\n                    return ProjectConstants.CultureBlogArchiveRouteName;\n                }\n\n                return ProjectConstants.BlogArchiveRouteName;\n            }\n        }\n\n        public string NewPostRouteName\n        {\n            get\n            {\n                if (_multiTenantOptions.Mode == MultiTenantMode.FolderName)\n                {\n                    if (!string.IsNullOrEmpty(_currentSite.SiteFolderName))\n                    {\n                        if (_cultureHelper.UseCultureRoutesAndProjects() && !_cultureHelper.IsDefaultCulture())\n                        {\n                            return ProjectConstants.CultureFolderNewPostRouteName;\n                        }\n\n                        return ProjectConstants.FolderNewPostRouteName;\n                    }\n                }\n\n                if (_cultureHelper.UseCultureRoutesAndProjects() && !_cultureHelper.IsDefaultCulture())\n                {\n                    return ProjectConstants.CultureNewPostRouteName;\n                }\n\n                return ProjectConstants.NewPostRouteName;\n            }\n        }\n\n        public string BlogIndexRouteName\n        {\n            get\n            {\n                if (_multiTenantOptions.Mode == MultiTenantMode.FolderName)\n                {\n                    if (!string.IsNullOrEmpty(_currentSite.SiteFolderName))\n                    {\n                        if (_cultureHelper.UseCultureRoutesAndProjects() && !_cultureHelper.IsDefaultCulture())\n                        {\n                            return ProjectConstants.CultureFolderBlogIndexRouteName;\n                        }\n\n                        return ProjectConstants.FolderBlogIndexRouteName;\n                    }\n                }\n\n                if (_cultureHelper.UseCultureRoutesAndProjects() && !_cultureHelper.IsDefaultCulture())\n                {\n                    return ProjectConstants.CultureBlogIndexRouteName;\n                }\n\n                return ProjectConstants.BlogIndexRouteName;\n            }\n        }\n\n        public string PostEditRouteName\n        {\n            get\n            {\n                if (_multiTenantOptions.Mode == MultiTenantMode.FolderName)\n                {\n                    if (!string.IsNullOrEmpty(_currentSite.SiteFolderName))\n                    {\n                        if (_cultureHelper.UseCultureRoutesAndProjects() && !_cultureHelper.IsDefaultCulture())\n                        {\n                            return ProjectConstants.CultureFolderPostEditRouteName;\n                        }\n\n                        return ProjectConstants.FolderPostEditRouteName;\n                    }\n                }\n\n                if (_cultureHelper.UseCultureRoutesAndProjects() && !_cultureHelper.IsDefaultCulture())\n                {\n                    return ProjectConstants.CulturePostEditRouteName;\n                }\n\n                return ProjectConstants.PostEditRouteName;\n            }\n        }\n\n        public string PostEditWithTemplateRouteName\n        {\n            get\n            {\n                if (_multiTenantOptions.Mode == MultiTenantMode.FolderName)\n                {\n                    if (!string.IsNullOrEmpty(_currentSite.SiteFolderName))\n                    {\n                        if (_cultureHelper.UseCultureRoutesAndProjects() && !_cultureHelper.IsDefaultCulture())\n                        {\n                            return ProjectConstants.CultureFolderPostEditWithTemplateRouteName;\n                        }\n\n                        return ProjectConstants.FolderPostEditWithTemplateRouteName;\n                    }\n                }\n\n                if (_cultureHelper.UseCultureRoutesAndProjects() && !_cultureHelper.IsDefaultCulture())\n                {\n                    return ProjectConstants.CulturePostEditWithTemplateRouteName;\n                }\n\n                return ProjectConstants.PostEditWithTemplateRouteName;\n            }\n        }\n\n        public string PostDeleteRouteName\n        {\n            get\n            {\n                if (_multiTenantOptions.Mode == MultiTenantMode.FolderName)\n                {\n                    if (!string.IsNullOrEmpty(_currentSite.SiteFolderName))\n                    {\n                        if (_cultureHelper.UseCultureRoutesAndProjects() && !_cultureHelper.IsDefaultCulture())\n                        {\n                            return ProjectConstants.CultureFolderPostDeleteRouteName;\n                        }\n\n                        return ProjectConstants.FolderPostDeleteRouteName;\n                    }\n                }\n\n                if (_cultureHelper.UseCultureRoutesAndProjects() && !_cultureHelper.IsDefaultCulture())\n                {\n                    return ProjectConstants.CulturePostDeleteRouteName;\n                }\n\n                return ProjectConstants.PostDeleteRouteName;\n            }\n        }\n\n        public string PostHistoryRouteName\n        {\n            get\n            {\n                if (_multiTenantOptions.Mode == MultiTenantMode.FolderName)\n                {\n                    if (!string.IsNullOrEmpty(_currentSite.SiteFolderName))\n                    {\n                        if (_cultureHelper.UseCultureRoutesAndProjects() && !_cultureHelper.IsDefaultCulture())\n                        {\n                            return ProjectConstants.CultureFolderPostHistoryRouteName;\n                        }\n\n                        return ProjectConstants.FolderPostHistoryRouteName;\n                    }\n                }\n\n                if (_cultureHelper.UseCultureRoutesAndProjects() && !_cultureHelper.IsDefaultCulture())\n                {\n                    return ProjectConstants.CulturePostHistoryRouteName;\n                }\n\n                return ProjectConstants.PostHistoryRouteName;\n            }\n        }\n\n        public string CanEditRouteName\n        {\n            get\n            {\n                if (_multiTenantOptions.Mode == MultiTenantMode.FolderName)\n                {\n                    if (!string.IsNullOrEmpty(_currentSite.SiteFolderName))\n                    {\n                        if (_cultureHelper.UseCultureRoutesAndProjects() && !_cultureHelper.IsDefaultCulture())\n                        {\n                            return ProjectConstants.CultureFolderBlogCanEditRouteName;\n                        }\n\n                        return ProjectConstants.FolderBlogCanEditRouteName;\n                    }\n                }\n\n                if (_cultureHelper.UseCultureRoutesAndProjects() && !_cultureHelper.IsDefaultCulture())\n                {\n                    return ProjectConstants.CultureBlogCanEditRouteName;\n                }\n\n                return ProjectConstants.BlogCanEditRouteName;\n            }\n        }\n\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.Core.SimpleContent/MultiTenantPageRoutes.cs",
    "content": "﻿// Copyright (c) Source Tree Solutions, LLC. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.\n// Author:                  Joe Audette\n// Created:                 2017-01-08\n// Last Modified:           2019-07-03\n\nusing cloudscribe.Core.Models;\nusing cloudscribe.SimpleContent.Models;\nusing cloudscribe.SimpleContent.Web.Services;\nusing Microsoft.Extensions.Options;\n\nnamespace cloudscribe.Core.SimpleContent.Integration\n{\n    public class MultiTenantPageRoutes : IPageRoutes\n    {\n        public MultiTenantPageRoutes(\n            SiteContext currentSite,\n            IOptions<MultiTenantOptions> multiTenantOptionsAccessor,\n            CultureHelper cultureHelper\n            )\n        {\n            _currentSite = currentSite;\n            _multiTenantOptions = multiTenantOptionsAccessor.Value;\n            _cultureHelper = cultureHelper;\n        }\n\n        private SiteContext _currentSite;\n        private MultiTenantOptions _multiTenantOptions;\n        private readonly CultureHelper _cultureHelper;\n\n        public string PageRouteName\n        {\n            get\n            {\n                if (_multiTenantOptions.Mode == MultiTenantMode.FolderName)\n                {\n                    if (!string.IsNullOrEmpty(_currentSite.SiteFolderName))\n                    {\n                        if (_cultureHelper.UseCultureRoutesAndProjects() && !_cultureHelper.IsDefaultCulture())\n                        {\n                            return ProjectConstants.CultureFolderPageIndexRouteName;\n                        }\n\n                        return ProjectConstants.FolderPageIndexRouteName;\n                    }\n                }\n\n                if(_cultureHelper.UseCultureRoutesAndProjects() && !_cultureHelper.IsDefaultCulture())\n                {\n                    return ProjectConstants.CulturePageIndexRouteName;\n                }\n\n                return ProjectConstants.PageIndexRouteName;\n            }\n        }\n\n        public string PageEditRouteName\n        {\n            get\n            {\n                if (_multiTenantOptions.Mode == MultiTenantMode.FolderName)\n                {\n                    if (!string.IsNullOrEmpty(_currentSite.SiteFolderName))\n                    {\n                        if (_cultureHelper.UseCultureRoutesAndProjects() && !_cultureHelper.IsDefaultCulture())\n                        {\n                            return ProjectConstants.CultureFolderPageEditRouteName;\n                        }\n\n                        return ProjectConstants.FolderPageEditRouteName;\n                    }\n                }\n\n                if (_cultureHelper.UseCultureRoutesAndProjects() && !_cultureHelper.IsDefaultCulture())\n                {\n                    return ProjectConstants.CulturePageEditRouteName;\n                }\n\n                return ProjectConstants.PageEditRouteName;\n            }\n        }\n\n        public string PageEditWithTemplateRouteName\n        {\n            get\n            {\n                if (_multiTenantOptions.Mode == MultiTenantMode.FolderName)\n                {\n                    if (!string.IsNullOrEmpty(_currentSite.SiteFolderName))\n                    {\n                        if (_cultureHelper.UseCultureRoutesAndProjects() && !_cultureHelper.IsDefaultCulture())\n                        {\n                            return ProjectConstants.CultureFolderPageEditWithTemplateRouteName;\n                        }\n\n                        return ProjectConstants.FolderPageEditWithTemplateRouteName;\n                    }\n                }\n\n                if (_cultureHelper.UseCultureRoutesAndProjects() && !_cultureHelper.IsDefaultCulture())\n                {\n                    return ProjectConstants.CulturePageEditWithTemplateRouteName;\n                }\n\n                return ProjectConstants.PageEditWithTemplateRouteName;\n            }\n        }\n\n        public string NewPageRouteName\n        {\n            get\n            {\n                if (_multiTenantOptions.Mode == MultiTenantMode.FolderName)\n                {\n                    if (!string.IsNullOrEmpty(_currentSite.SiteFolderName))\n                    {\n                        if (_cultureHelper.UseCultureRoutesAndProjects() && !_cultureHelper.IsDefaultCulture())\n                        {\n                            return ProjectConstants.CultureFolderNewPageRouteName;\n                        }\n\n                        return ProjectConstants.FolderNewPageRouteName;\n                    }\n                }\n\n                if (_cultureHelper.UseCultureRoutesAndProjects() && !_cultureHelper.IsDefaultCulture())\n                {\n                    return ProjectConstants.CultureNewPageRouteName;\n                }\n\n                return ProjectConstants.NewPageRouteName;\n            }\n        }\n\n        public string PageDeleteRouteName\n        {\n            get\n            {\n                if (_multiTenantOptions.Mode == MultiTenantMode.FolderName)\n                {\n                    if (!string.IsNullOrEmpty(_currentSite.SiteFolderName))\n                    {\n                        if (_cultureHelper.UseCultureRoutesAndProjects() && !_cultureHelper.IsDefaultCulture())\n                        {\n                            return ProjectConstants.CultureFolderPageDeleteRouteName;\n                        }\n\n                        return ProjectConstants.FolderPageDeleteRouteName;\n                    }\n                }\n\n                if (_cultureHelper.UseCultureRoutesAndProjects() && !_cultureHelper.IsDefaultCulture())\n                {\n                    return ProjectConstants.CulturePageDeleteRouteName;\n                }\n\n                return ProjectConstants.PageDeleteRouteName;\n            }\n        }\n\n        public string PageDevelopRouteName\n        {\n            get\n            {\n                if (_multiTenantOptions.Mode == MultiTenantMode.FolderName)\n                {\n                    if (!string.IsNullOrEmpty(_currentSite.SiteFolderName))\n                    {\n                        if (_cultureHelper.UseCultureRoutesAndProjects() && !_cultureHelper.IsDefaultCulture())\n                        {\n                            return ProjectConstants.CultureFolderPageDevelopRouteName;\n                        }\n\n                        return ProjectConstants.FolderPageDevelopRouteName;\n                    }\n                }\n\n                if (_cultureHelper.UseCultureRoutesAndProjects() && !_cultureHelper.IsDefaultCulture())\n                {\n                    return ProjectConstants.CulturePageDevelopRouteName;\n                }\n\n                return ProjectConstants.PageDevelopRouteName;\n            }\n        }\n\n        public string PageTreeRouteName\n        {\n            get\n            {\n                if (_multiTenantOptions.Mode == MultiTenantMode.FolderName)\n                {\n                    if (!string.IsNullOrEmpty(_currentSite.SiteFolderName))\n                    {\n                        if (_cultureHelper.UseCultureRoutesAndProjects() && !_cultureHelper.IsDefaultCulture())\n                        {\n                            return ProjectConstants.CultureFolderPageTreeRouteName;\n                        }\n\n                        return ProjectConstants.FolderPageTreeRouteName;\n                    }\n                }\n\n                if (_cultureHelper.UseCultureRoutesAndProjects() && !_cultureHelper.IsDefaultCulture())\n                {\n                    return ProjectConstants.CulturePageTreeRouteName;\n                }\n\n                return ProjectConstants.PageTreeRouteName;\n            }\n        }\n\n        public string PageHistoryRouteName\n        {\n            get\n            {\n                if (_multiTenantOptions.Mode == MultiTenantMode.FolderName)\n                {\n                    if (!string.IsNullOrEmpty(_currentSite.SiteFolderName))\n                    {\n                        if (_cultureHelper.UseCultureRoutesAndProjects() && !_cultureHelper.IsDefaultCulture())\n                        {\n                            return ProjectConstants.CultureFolderPageHistoryRouteName;\n                        }\n\n                        return ProjectConstants.FolderPageHistoryRouteName;\n                    }\n                }\n\n                if (_cultureHelper.UseCultureRoutesAndProjects() && !_cultureHelper.IsDefaultCulture())\n                {\n                    return ProjectConstants.CulturePageHistoryRouteName;\n                }\n\n                return ProjectConstants.PageHistoryRouteName;\n            }\n        }\n\n        public string CanEditRouteName\n        {\n            get\n            {\n                if (_multiTenantOptions.Mode == MultiTenantMode.FolderName)\n                {\n                    if (!string.IsNullOrEmpty(_currentSite.SiteFolderName))\n                    {\n                        if (_cultureHelper.UseCultureRoutesAndProjects() && !_cultureHelper.IsDefaultCulture())\n                        {\n                            return ProjectConstants.CultureFolderPageCanEditRouteName;\n                        }\n\n                        return ProjectConstants.FolderPageCanEditRouteName;\n                    }\n                }\n\n                if (_cultureHelper.UseCultureRoutesAndProjects() && !_cultureHelper.IsDefaultCulture())\n                {\n                    return ProjectConstants.CulturePageCanEditRouteName;\n                }\n\n                return ProjectConstants.PageCanEditRouteName;\n            }\n        }\n\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.Core.SimpleContent/ProjectSecurityResolver.cs",
    "content": "﻿// Copyright (c) Source Tree Solutions, LLC. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.\n// Author:                  Joe Audette\n// Created:                 2016-07-11\n// Last Modified:           2016-08-13\n// \n\nusing cloudscribe.Core.Identity;\nusing cloudscribe.Core.Models;\nusing cloudscribe.SimpleContent.Web;\nusing cloudscribe.SimpleContent.Models;\nusing Microsoft.AspNetCore.Authorization;\nusing System.Threading;\nusing System.Threading.Tasks;\nusing Microsoft.AspNetCore.Identity;\n\nnamespace cloudscribe.Core.SimpleContent.Integration\n{\n    public class ProjectSecurityResolver : IProjectSecurityResolver\n    {\n        public ProjectSecurityResolver(\n            SiteUserManager<SiteUser> userManager,\n            SignInManager<SiteUser> signInManager,\n            IProjectSettingsResolver projectResolver,\n            IAuthorizationService authorizationService\n            )\n        {\n            this.userManager = userManager;\n            this.signInManager = signInManager;\n            this.projectResolver = projectResolver;\n            this.authorizationService = authorizationService;\n        }\n\n        private SiteUserManager<SiteUser> userManager;\n        private SignInManager<SiteUser> signInManager;\n        private IAuthorizationService authorizationService;\n        private IProjectSettingsResolver projectResolver;\n\n        public async Task<ProjectSecurityResult> ValidatePermissions(\n            string projectId,\n            string userName,\n            string providedPassword,\n            CancellationToken cancellationToken)\n        {\n            var displayName = string.Empty;\n            var isAuthenticated = false;\n            var canEditPosts = false;\n            var canEditPages = false;\n            var timeZoneId = userManager.Site.TimeZoneId;\n\n            var authUser = await userManager.FindByNameAsync(userName);\n\n            if (authUser != null)\n            {\n                isAuthenticated = await userManager.CheckPasswordAsync(authUser, providedPassword);\n            }\n\n            if (isAuthenticated)\n            {\n                var claimsPrincipal = await signInManager.CreateUserPrincipalAsync(authUser);\n                if (string.IsNullOrEmpty(projectId))\n                {\n                    projectId = claimsPrincipal.GetProjectId();\n                }\n\n                if (string.IsNullOrEmpty(projectId))\n                {\n                    var project = await projectResolver.GetCurrentProjectSettings(cancellationToken);\n                    if (project != null) projectId = project.Id;\n                }\n                if (!string.IsNullOrEmpty(projectId))\n                {\n                    canEditPosts = await claimsPrincipal.CanEditBlog(projectId, authorizationService);\n                    canEditPages = await claimsPrincipal.CanEditPages(projectId, authorizationService);     \n                }\n\n                //displayName = claimsPrincipal.GetDisplayName();\n                displayName = claimsPrincipal.Identity.Name;\n                if(!string.IsNullOrWhiteSpace(authUser.TimeZoneId))\n                {\n                    timeZoneId = authUser.TimeZoneId;\n                }\n            \n            }\n\n            var blogSecurity = new ProjectSecurityResult(displayName, projectId, isAuthenticated, canEditPosts, canEditPages, timeZoneId);\n\n            return blogSecurity;\n\n        }\n\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.Core.SimpleContent/README.md",
    "content": "# cloudscribe.Core.SimpleContent\n\n[![NuGet](https://img.shields.io/nuget/v/cloudscribe.Core.SimpleContent.svg)](https://www.nuget.org/packages/cloudscribe.Core.SimpleContent)\n[![License: Apache-2.0](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://opensource.org/licenses/Apache-2.0)\n\nCore library for the cloudscribe SimpleContent CMS and blog engine for ASP.NET Core.\n\n## Installation\n\n```shell\nInstall-Package cloudscribe.Core.SimpleContent\n```\n\n## Usage\n\nReference this package to add core content and blog features to your ASP.NET Core application.\n\n## Contributing\n\nContributions are welcome! Please see the [contributing guidelines](https://github.com/cloudscribe/cloudscribe.SimpleContent/blob/main/CONTRIBUTING.md).\n\n## License\n\nLicensed under the Apache 2.0 License. See the [LICENSE](https://github.com/cloudscribe/cloudscribe.SimpleContent/blob/main/LICENSE) file for details.\n"
  },
  {
    "path": "src/cloudscribe.Core.SimpleContent/Resources.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading.Tasks;\n\nnamespace cloudscribe.Core.SimpleContent.Integration\n{\n    /// <summary>\n    /// a class to represent localization resources for controllers and views\n    /// </summary>\n    public class SimpleContentIntegration\n    {\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.Core.SimpleContent/SiteFileSystemMediaProcessor.cs",
    "content": "﻿// Copyright (c) Source Tree Solutions, LLC. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.\n// Author:                  Joe Audette\n// Created:                 2017-05-28\n// Last Modified:           2018-07-09\n// \n\n\nusing cloudscribe.Core.Models;\nusing cloudscribe.FileManager.Web.Models;\nusing cloudscribe.SimpleContent.Models;\nusing cloudscribe.SimpleContent.Services;\nusing Microsoft.AspNetCore.Hosting;\nusing Microsoft.Extensions.Logging;\nusing System.IO;\nusing System.Threading.Tasks;\n\n\nnamespace cloudscribe.Core.SimpleContent.Integration\n{\n    public class SiteFileSystemMediaProcessor : FileSystemMediaProcessor, IMediaProcessor\n    {\n        public SiteFileSystemMediaProcessor(\n            SiteContext currentSite,\n            IMediaPathResolver mediaPathResolver,\n            ILogger<FileSystemMediaProcessor> logger,\n            IWebHostEnvironment env\n            ):base(logger, env)\n        {\n            _currentSite = currentSite;\n            _mediaPathResolver = mediaPathResolver;\n        }\n\n        private readonly SiteContext _currentSite;\n        private IMediaPathResolver _mediaPathResolver;\n        private MediaRootPathInfo rootPath;\n\n        private async Task EnsurePathInfo()\n        {\n            if (rootPath != null) { return; }\n            rootPath = await _mediaPathResolver.Resolve().ConfigureAwait(false);\n            if (rootPath != null) { return; }\n        }\n\n        private async Task EnsureFsPath(string mediaVirtualPath)\n        {\n            await EnsurePathInfo();\n            var fsPath = rootPath.RootFileSystemPath + mediaVirtualPath.Replace('/', Path.DirectorySeparatorChar);\n            if (Directory.Exists(fsPath)) return; //nothing to do\n\n            var segments = mediaVirtualPath.Split('/');\n\n            EnsureFolderPaths(rootPath.RootFileSystemPath, segments);\n\n        }\n\n        public override async Task<string> ResolveMediaUrl(string mediaVirtualPath, string fileName)\n        {\n            var result = await base.ResolveMediaUrl(mediaVirtualPath, fileName);\n            if(!string.IsNullOrWhiteSpace(_currentSite.SiteFolderName))\n            {\n                return  \"/\" + _currentSite.SiteFolderName + result;\n            }\n\n            return result;\n        }\n        \n        public override async Task SaveMedia(string mediaVirtualPath, string fileName, byte[] bytes)\n        {\n            await EnsureFsPath(mediaVirtualPath);\n            var newUrl = mediaVirtualPath + fileName;\n            var fsPath = rootPath.RootFileSystemPath + newUrl.Replace('/', Path.DirectorySeparatorChar);\n\n            File.WriteAllBytes(fsPath, bytes);\n            \n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.Core.SimpleContent/SiteNavigationCacheKeyResolver.cs",
    "content": "﻿using cloudscribe.Core.Models;\nusing cloudscribe.SimpleContent.Web.Services;\nusing cloudscribe.Web.Navigation;\nusing cloudscribe.Web.Navigation.Caching;\nusing System.Threading.Tasks;\n\nnamespace cloudscribe.Core.SimpleContent\n{\n    public class SiteNavigationCacheKeyResolver : ITreeCacheKeyResolver\n    {\n        public SiteNavigationCacheKeyResolver(\n            SiteContext currentSite,\n            CultureHelper cultureHelper\n            )\n        {\n            _currentSite = currentSite;\n            _cultureHelper = cultureHelper;\n        }\n\n        private readonly SiteContext _currentSite;\n        private readonly CultureHelper _cultureHelper;\n\n        public Task<string> GetCacheKey(INavigationTreeBuilder builder)\n        {\n            if(_cultureHelper.UseCultureRoutesAndProjects() && !_cultureHelper.IsDefaultCulture())\n            {\n                return Task.FromResult(builder.Name + _currentSite.Id.ToString() + _cultureHelper.CurrentUICultureName());\n            }\n\n            return Task.FromResult(builder.Name + _currentSite.Id.ToString());\n        }\n\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.Core.SimpleContent/SiteProjectSettingsResolver.cs",
    "content": "﻿// Copyright (c) Source Tree Solutions, LLC. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.\n// Author:                  Joe Audette\n// Created:                 2016-07-11\n// Last Modified:           2019-03-04\n// \n\nusing cloudscribe.Core.Models;\nusing cloudscribe.SimpleContent.Models;\nusing cloudscribe.SimpleContent.Web.Services;\nusing Microsoft.Extensions.Options;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace cloudscribe.Core.SimpleContent.Integration\n{\n    public class SiteProjectSettingsResolver : IProjectSettingsResolver\n    {\n        public SiteProjectSettingsResolver(\n            SiteContext currentSite,\n            IProjectQueries projectQueries,\n            IProjectCommands projectCommands,\n            IOptions<ContentSettingsUIConfig> uiOptionsAccessor,\n            CultureHelper cultureHelper\n            )\n        {\n            _currentSite = currentSite;\n            _projectQueries = projectQueries;\n            _projectCommands = projectCommands;\n            _uiOptions = uiOptionsAccessor.Value;\n            _cultureHelper = cultureHelper;\n        }\n\n        private readonly SiteContext _currentSite;\n        private readonly IProjectQueries _projectQueries;\n        private readonly IProjectCommands _projectCommands;\n        private readonly ContentSettingsUIConfig _uiOptions;\n        private readonly CultureHelper _cultureHelper;\n\n        public async Task<IProjectSettings> GetCurrentProjectSettings(CancellationToken cancellationToken)\n        {\n            IProjectSettings settings;\n            if (_cultureHelper.UseCultureRoutesAndProjects() && !_cultureHelper.IsDefaultCulture())\n            {\n                var settingsKey = _currentSite.Id.ToString() + \"~\" + _cultureHelper.CurrentUICultureName();\n                settings = await _projectQueries.GetProjectSettings(settingsKey, cancellationToken).ConfigureAwait(false);\n\n            }\n            else\n            {\n                settings = await _projectQueries.GetProjectSettings(_currentSite.Id.ToString(), cancellationToken).ConfigureAwait(false);\n            }\n            \n            //ensure existence of settings\n            if(settings == null)\n            {\n                settings = new ProjectSettings();\n                settings.Id = _currentSite.Id.ToString();\n                if(!_uiOptions.ShowBlogMenuOptions)\n                {\n                    settings.AddBlogToPagesTree = false;\n                    settings.BlogMenuLinksToNewestPost = false;\n                }\n\n                if (_cultureHelper.UseCultureRoutesAndProjects() && !_cultureHelper.IsDefaultCulture())\n                {\n                    settings.Id = settings.Id + \"~\" + _cultureHelper.CurrentUICultureName();\n                }\n\n                if (!_uiOptions.ShowBlogMenuOptions) \n                {\n                    // ShowBlogMenuOptions is true only when \"option a\" in the vsix template \n                    // which implies that the default page slug should be forced to 'home'.\n                    // Otherwise...\n                    settings.DefaultPageSlug = \"page1\";\n                }\n\n                await _projectCommands.Create(settings.Id, settings, cancellationToken).ConfigureAwait(false);\n            }\n            \n            if (string.IsNullOrEmpty(settings.RecaptchaPublicKey))\n            {\n                settings.RecaptchaPublicKey = _currentSite.RecaptchaPublicKey;\n                settings.RecaptchaPrivateKey = _currentSite.RecaptchaPrivateKey;\n            }\n\n            if (!_uiOptions.ShowBlogMenuOptions)\n            {\n                settings.AddBlogToPagesTree = false;        \n            }\n\n            \n            settings.TimeZoneId = _currentSite.TimeZoneId;\n\n            \n            \n            return settings;\n        }\n\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.Core.SimpleContent/SiteRoleSelectorProperties.cs",
    "content": "﻿// Copyright (c) Source Tree Solutions, LLC. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.\n// Author:\t\t\t\t\tJoe Audette\n// Created:\t\t\t\t\t2016-08-26\n// Last Modified:\t\t\t2017-06-09\n// \n\n\nusing cloudscribe.Core.Models;\nusing cloudscribe.SimpleContent.Web.TagHelpers;\nusing System.Collections.Generic;\n\nnamespace cloudscribe.Core.SimpleContent.Integration\n{\n    public class SiteRoleSelectorProperties : IRoleSelectorProperties\n    {\n        public SiteRoleSelectorProperties(SiteContext currentSite)\n        {\n            this.currentSite = currentSite;\n            \n            RequiredScriptPaths = new List<string>();\n            RequiredScriptPaths.Add(\"~/cr/js/jquery.unobtrusive-ajax.min.js\");\n            RequiredScriptPaths.Add(\"~/cr/js/cloudscribe-role-selector.min.js\");\n\n        }\n\n        private SiteContext currentSite;\n\n        public string Action\n        {\n            get { return \"Modal\"; }\n        }\n\n        public string Controller\n        {\n            get { return \"RoleAdmin\"; }\n        }\n\n        public Dictionary<string, string> GetAttributes(string csvTargetElementId, string displayTargetId = \"\")\n        {\n            var result = new Dictionary<string, string>();\n            result.Add(\"data-ajax\", \"true\");\n            result.Add(\"data-ajax-begin\", \"roleSelector.prepareModal('\" + csvTargetElementId + \"','\" + displayTargetId + \"')\");\n            result.Add(\"data-ajax-failure\", \"roleSelector.clearModal()\");\n            result.Add(\"data-ajax-method\", \"GET\");\n            result.Add(\"data-ajax-mode\", \"replace\");\n            result.Add(\"data-ajax-success\", \"roleSelector.openModal()\");\n            result.Add(\"data-ajax-update\", \"#roledialog\");\n\n            return result;\n\n        }\n\n        public Dictionary<string, string> GetRouteParams(string projectId)\n        {\n            var result = new Dictionary<string, string>();\n            result.Add(\"siteId\", projectId);\n            return result;\n        }\n\n\n        public List<string> RequiredScriptPaths { get; private set; }\n        \n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.Core.SimpleContent/SiteSimpleContentThemeHelper.cs",
    "content": "﻿using cloudscribe.Core.Models;\nusing cloudscribe.SimpleContent.Web.Design;\nusing Microsoft.Extensions.Options;\n\nnamespace cloudscribe.Core.SimpleContent\n{\n    public class SiteSimpleContentThemeHelper : ISimpleContentThemeHelper\n    {\n        public SiteSimpleContentThemeHelper(\n            SiteContext currentSite,\n            IOptions<SimpleContentThemeConfig> themeConfigAccessor,\n            IOptions<SimpleContentIconConfig> iconConfigOptionsAccessor\n            )\n        {\n            _currentSite = currentSite;\n            _themeConfig = themeConfigAccessor.Value;\n            _iconConfig = iconConfigOptionsAccessor.Value;\n        }\n\n        private SiteContext _currentSite;\n        private SimpleContentThemeConfig _themeConfig;\n        private SimpleContentIconConfig _iconConfig;\n\n        public SimpleContentThemeSettings GetThemeSettings()\n        {\n            SimpleContentThemeSettings result = null;\n            foreach (var ts in _themeConfig.ThemeSettings)\n            {\n                if (ts.ThemeName == _currentSite.Theme)\n                {\n                    result = ts;\n                    break;\n                }\n            }\n\n            if(result == null)\n            {\n                foreach (var ts in _themeConfig.ThemeSettings)\n                {\n                    if (ts.ThemeName == \"default\")\n                    {\n                        result = ts;\n                        break;\n                    }\n                }\n            }\n            \n            if (result == null)\n            {\n                result = new SimpleContentThemeSettings();\n            }\n            result.Icons = _iconConfig.GetIcons(result.IconSetId);\n\n\n            return result;\n        }\n\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.Core.SimpleContent/StartupExtenstions.cs",
    "content": "﻿using cloudscribe.Core.Models.EventHandlers;\nusing cloudscribe.Core.SimpleContent;\nusing cloudscribe.Core.SimpleContent.EventHandlers;\nusing cloudscribe.Core.SimpleContent.Integration;\nusing cloudscribe.SimpleContent.Models;\nusing cloudscribe.SimpleContent.Web.Design;\nusing cloudscribe.SimpleContent.Web.TagHelpers;\nusing cloudscribe.Versioning;\nusing cloudscribe.Web.Navigation.Caching;\nusing Microsoft.AspNetCore.Authorization;\nusing Microsoft.Extensions.Configuration;\nusing Microsoft.Extensions.DependencyInjection.Extensions;\n\n\n\nnamespace Microsoft.Extensions.DependencyInjection\n{\n    public static class StartupExtenstions\n    {\n        public static IServiceCollection AddCloudscribeCoreIntegrationForSimpleContent(\n            this IServiceCollection services,\n            IConfiguration configuration = null\n            )\n        {\n            services.AddScoped<IProjectSettingsResolver, SiteProjectSettingsResolver>();\n            services.AddScoped<IProjectSecurityResolver, ProjectSecurityResolver>();\n            services.TryAddScoped<IMediaProcessor, SiteFileSystemMediaProcessor>();\n            services.AddScoped<IBlogRoutes, MultiTenantBlogRoutes>();\n            services.AddScoped<IPageRoutes, MultiTenantPageRoutes>();\n            services.AddScoped<IRoleSelectorProperties, SiteRoleSelectorProperties>();\n            services.TryAddScoped<IAuthorNameResolver, AuthorNameResolver>();\n            services.TryAddScoped<IProjectEmailService, CoreProjectEmailService>();\n            services.AddScoped<ISimpleContentThemeHelper, SiteSimpleContentThemeHelper>();\n\n            services.AddScoped<ITreeCacheKeyResolver, SiteNavigationCacheKeyResolver>();\n            services.AddScoped<IHandleRoleUpdated, HandleRoleUpdated>();\n            services.AddScoped<IHandleRoleDeleted, HandleRoleDeleted>();\n            services.AddScoped<IVersionProvider, VersionProvider>();\n\n            if (configuration != null)\n            {\n                services.Configure<ContentSettingsUIConfig>(configuration.GetSection(\"ContentSettingsUIConfig\"));\n            }\n            else\n            {\n                services.Configure<ContentSettingsUIConfig>(c =>\n                {\n                    // not doing anything just configuring the default\n                });\n            }\n            \n            return services;\n        }\n\n\n        \n\n        public static AuthorizationOptions AddCloudscribeCoreSimpleContentIntegrationDefaultPolicies(this AuthorizationOptions options)\n        {\n            options.AddPolicy(\"BlogViewPolicy\", policy =>\n                policy.RequireAssertion(context =>\n                {\n                    return true; //allow anonymous\n                })\n                );\n\n            \n\n            options.AddPolicy(\n                    \"BlogEditPolicy\",\n                    authBuilder =>\n                    {\n                        //authBuilder.RequireClaim(\"blogId\");\n                        authBuilder.RequireRole(\"Administrators\", \"Content Administrators\");\n                    }\n                 );\n\n            options.AddPolicy(\n                \"PageEditPolicy\",\n                authBuilder =>\n                {\n                    authBuilder.RequireRole(\"Administrators\", \"Content Administrators\");\n                });\n\n            options.AddPolicy(\n                    \"ViewContentHistoryPolicy\",\n                    authBuilder =>\n                    {\n                        authBuilder.RequireRole(\"Administrators\", \"Content Administrators\");\n                    }\n                 );\n\n            return options;\n        }\n\n\n\n\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.Core.SimpleContent/VersionProvider.cs",
    "content": "﻿using cloudscribe.Core.SimpleContent.Integration;\nusing cloudscribe.Versioning;\nusing cloudscribe.Web.Common;\nusing System;\nusing System.Reflection;\n\nnamespace cloudscribe.Core.SimpleContent\n{\n    public class VersionProvider : IVersionProvider\n    {\n        private Assembly assembly = typeof(AuthorNameResolver).Assembly;\n\n        public string Name\n        {\n            get { return assembly.GetName().Name; }\n\n        }\n\n        public Guid ApplicationId { get { return new Guid(\"f94177b4-919d-4910-acd1-4b3b1c210ecf\"); } }\n\n        public Version CurrentVersion\n        {\n\n            get\n            {\n\n                var version = new Version(2, 0, 0, 0);\n                var versionString = typeof(CloudscribeCommonResources).Assembly.GetCustomAttribute<AssemblyFileVersionAttribute>().Version;\n                if (!string.IsNullOrWhiteSpace(versionString))\n                {\n                    Version.TryParse(versionString, out version);\n                }\n\n                return version;\n            }\n        }\n    }\n}"
  },
  {
    "path": "src/cloudscribe.Core.SimpleContent/ViewModels/ContentCloningViewModel.cs",
    "content": "// Copyright (c) Idox Software Ltd All rights reserved.\n// Licensed under the Apache License, Version 2.0.\n// See License.txt in the project root for license information.\n// Author:\t\t\t\t\tSimon Annetts, Idox Software Ltd\n// Created:\t\t\t\t\t2023-08-17\n// Last Modified:\t\t\t2023-08-17\n//\n\nusing cloudscribe.Core.Models;\nusing cloudscribe.SimpleContent.Models;\nusing System;\nusing System.Collections.Generic;\nusing System.ComponentModel.DataAnnotations;\n\nnamespace cloudscribe.Core.SimpleContent.Integration.ViewModels\n{\n\n    public class ContentCloningViewModel\n    {\n        public ContentCloningViewModel()\n        {\n\n        }\n        //this could be passed in from the Site Settings List page\n        public string SiteId { get; set; } = string.Empty;\n\n        public Boolean CloneContentSettings { get; set; } = true;\n        public Boolean ClonePages { get; set; } = true;\n        public Boolean RewriteContentUrls { get; set; } = false;\n        public Boolean CloneBlogPosts { get; set; } = true;\n\n\n        public string CloneFromSiteId { get; set; } = null;\n        public string CloneFromSiteName { get; set; } = string.Empty;\n        public int CloneFromPageCount { get; set; } = 0;\n        public int CloneFromPostCount { get; set; } = 0;\n\n        public List<SiteDetails> CloneFromSites { get; set; } = new List<SiteDetails>();\n\n        public string CloneToSiteId { get; set; } = null;\n        public string CloneToSiteName { get; set; } = string.Empty;\n        public int CloneToPageCount { get; set; } = 0;\n        public int CloneToPostCount { get; set; } = 0;\n\n        public List<SiteDetails> CloneToSites { get; set; } = new List<SiteDetails>();\n\n        public Boolean AllowCloneToSiteSelection { get; set; } = true;\n\n        public bool CloneAllowed { get; set; } = false;\n\n        public string Command { get; set; } = string.Empty;\n\n        public class SiteDetails\n        {\n            public string SiteId { get; set; }\n            public string SiteIdentifier { get; set; }\n        }\n\n    }\n}"
  },
  {
    "path": "src/cloudscribe.Core.SimpleContent/ViewModels/ContentSettingsViewModel.cs",
    "content": "﻿// Copyright (c) Source Tree Solutions, LLC. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.\n// Author:\t\t\t\t\tJoe Audette\n// Created:\t\t\t\t\t2016-08-05\n// Last Modified:\t\t\t2019-02-10\n// \n\nusing cloudscribe.Core.Models;\nusing cloudscribe.SimpleContent.Models;\nusing System.Collections.Generic;\nusing System.ComponentModel.DataAnnotations;\n\nnamespace cloudscribe.Core.SimpleContent.Integration.ViewModels\n{\n\n    public class ContentSettingsViewModel\n    {\n        public ContentSettingsViewModel()\n        {\n            Editors = new List<ISiteUser>();\n        }\n\n        public List<ISiteUser> Editors { get; set; }\n\n        public string Title { get; set; } = \"Blog\";\n\n        public bool ShowTitle { get; set; } = false;\n        public string Description { get; set; } = string.Empty;\n        //public string CopyrightNotice { get; set; } = string.Empty;\n        //public string Image { get; set; } = string.Empty;\n        public int PostsPerPage { get; set; } = 5;\n\n        public string PubDateFormat { get; set; } = \"MMMM d. yyyy\";\n        public bool IncludePubDateInPostUrls { get; set; } = true;\n        \n        public string LocalMediaVirtualPath { get; set; } = \"/media/images/\";\n        public string CdnUrl { get; set; }\n\n        public int DaysToComment { get; set; } = -1;\n        public bool ModerateComments { get; set; } = true;\n\n        [EmailAddress(ErrorMessage = \"The Notification Email field is not a valid e-mail address.\")]\n        [StringLength(100, ErrorMessage = \"Notification Email has a maximum length of 100 characters\")]\n        public string CommentNotificationEmail { get; set; } = string.Empty;\n        \n        public string DefaultPageSlug { get; set; } = \"home\";\n        public string DefaultContentType { get; set; } = \"html\";\n        public bool ShowRelatedPosts { get; set; } = true;\n        public bool ShowBlogCategories { get; set; } = true;\n        public bool ShowArchivedPosts { get; set; } = true;\n        public bool ShowAboutBox { get; set; } = true;\n        public string AboutHeading { get; set; } = \"About\";\n\n        public string AboutContent { get; set; } \n\n\n\n        // if true automatically add the blog index\n        public bool AddBlogToPagesTree { get; set; } = true;\n        public bool BlogMenuLinksToNewestPost { get; set; } = false;\n        public int BlogPagePosition { get; set; } = 2; // right after home page\n\n        [Required(ErrorMessage =\"Blog Menu Text is required\")]\n        public string BlogPageText { get; set; } = \"Blog\";\n        public string BlogPageNavComponentVisibility { get; set; }\n\n        public int DefaultFeedItems { get; set; } = 20;\n        public int MaxFeedItems { get; set; } = 1000;\n\n        [DataType(DataType.Url)]\n        public string RemoteFeedUrl { get; set; } = string.Empty;\n\n        /// <summary>\n        /// ie Feedburner User Agent fragment \"FeedBurner\"\n        /// </summary>\n        public string RemoteFeedProcessorUseAgentFragment { get; set; } = \"FeedBurner\";\n       // public bool UseMetaDescriptionInFeed { get; set; } = false;\n        public int ChannelTimeToLive { get; set; } = 60;\n        public string LanguageCode { get; set; } = \"en-US\";\n        public string ChannelCategoriesCsv { get; set; } = string.Empty;\n\n        [EmailAddress(ErrorMessage = \"The Notification Email field is not a valid e-mail address.\")]\n        [StringLength(100, ErrorMessage = \"Notification Email has a maximum length of 100 characters\")]\n        public string ManagingEditorEmail { get; set; } = string.Empty;\n        public string ChannelRating { get; set; } = string.Empty;\n\n        [EmailAddress(ErrorMessage = \"The Webmaster Email field is not a valid e-mail address.\")]\n        [StringLength(100, ErrorMessage = \"Webmaster Email has a maximum length of 100 characters\")]\n        public string WebmasterEmail { get; set; } = string.Empty;\n\n        public string Publisher { get; set; } = string.Empty;\n\n        [DataType(DataType.ImageUrl)]\n        public string PublisherLogoUrl { get; set; } = string.Empty;\n\n        public string PublisherLogoWidth { get; set; } = \"500px\";\n        public string PublisherLogoHeight { get; set; } = \"500px\";\n\n        public string PublisherEntityType { get; set; } = \"Organization\";\n\n        public string DisqusShortName { get; set; } = string.Empty;\n        public bool ShowRecentPostsOnDefaultPage { get; set; }\n\n        public bool ShowFeaturedPostsOnDefaultPage { get; set; }\n\n        [StringLength(100, ErrorMessage = \"FacebookAppId has a maximum length of 100 characters\")]\n        public string FacebookAppId { get; set; }\n\n        [StringLength(200, ErrorMessage = \"SiteName has a maximum length of 200 characters\")]\n        public string SiteName { get; set; }\n\n        [StringLength(100, ErrorMessage = \"TwitterPublisher has a maximum length of 100 characters\")]\n        public string TwitterPublisher { get; set; }\n\n        [StringLength(100, ErrorMessage = \"TwitterCreator has a maximum length of 100 characters\")]\n        public string TwitterCreator { get; set; }\n\n        public bool TeasersDisabled { get; set; }\n\n        public TeaserMode TeaserMode { get; set; }\n        public TeaserTruncationMode TeaserTruncationMode { get; set; }\n        public int TeaserTruncationLength { get; set; } = 20;   // Default 20 words.\n        public bool ShowCreatedBy { get; set; } = false;\n        public bool ShowCreatedDate { get; set; } = false;\n        public bool ShowLastModifiedBy { get; set; } = false;\n        public bool ShowLastModifiedDate { get; set; } = false;\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.Core.SimpleContent/ViewModels/CoreCommentNotificationModel.cs",
    "content": "﻿using cloudscribe.Core.Models;\nusing cloudscribe.SimpleContent.Models;\nusing System;\nusing System.Collections.Generic;\nusing System.Text;\n\nnamespace cloudscribe.Core.SimpleContent.ViewModels\n{\n    public class CoreCommentNotificationModel\n    {\n        public CoreCommentNotificationModel(\n            ISiteContext site,\n            IProjectSettings project,\n            IPost post,\n            IComment comment,\n            string postUrl)\n        {\n            Site = site;\n            Project = project;\n            Post = post;\n            Comment = comment;\n            PostUrl = postUrl;\n        }\n\n        public ISiteContext Site { get; private set; }\n        public IProjectSettings Project { get; private set; }\n        public IPost Post { get; private set; }\n        public IComment Comment { get; private set; }\n        public string PostUrl { get; private set; }\n\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.Core.SimpleContent/cloudscribe.Core.SimpleContent.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <Description>integration library for integrating cloudscribe SimpleContent with cloudscribe Core multi-tenant web app foundation</Description>\n    <Version>10.1.0</Version>\n    <TargetFramework>net10.0</TargetFramework>\n    <Authors>Joe Audette</Authors>\n    <PackageTags>cloudscribe;blog</PackageTags>\n    <PackageIcon>icon.png</PackageIcon>\n    <PackageProjectUrl>https://github.com/cloudscribe/cloudscribe.SimpleContent</PackageProjectUrl>\n    <PackageLicenseExpression>Apache-2.0</PackageLicenseExpression>\n    <RepositoryUrl>https://github.com/cloudscribe/cloudscribe.SimpleContent.git</RepositoryUrl>\n    <RepositoryType>git</RepositoryType>\n    <PackageReadmeFile>README.md</PackageReadmeFile>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <None Include=\"icon.png\" Pack=\"true\" PackagePath=\"\\\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <FrameworkReference Include=\"Microsoft.AspNetCore.App\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <ProjectReference Include=\"..\\cloudscribe.MetaWeblog\\cloudscribe.MetaWeblog.csproj\" />\n    <ProjectReference Include=\"..\\cloudscribe.SimpleContent.Models\\cloudscribe.SimpleContent.Models.csproj\" />\n    <ProjectReference Include=\"..\\cloudscribe.SimpleContent.Web\\cloudscribe.SimpleContent.Web.csproj\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"cloudscribe.Core.Models\" Version=\"10.1.0\" />\n    <PackageReference Include=\"cloudscribe.Core.Identity\" Version=\"10.1.0\" />\n    <PackageReference Include=\"cloudscribe.Core.Web\" Version=\"10.1.0\" />\n    <PackageReference Include=\"cloudscribe.Web.Common\" Version=\"10.1.0\" />\n    <PackageReference Include=\"cloudscribe.FileManager.Web\" Version=\"10.1.0\" />\n    <PackageReference Include=\"cloudscribe.Syndication.Web\" Version=\"10.1.0\" />\n\n    <PackageReference Include=\"Microsoft.Extensions.FileProviders.Embedded\" Version=\"10.0.0\" />\n    <PackageReference Include=\"Microsoft.Extensions.Localization\" Version=\"10.0.0\" />\n    <PackageReference Include=\"Microsoft.Extensions.Logging.Abstractions\" Version=\"10.0.0\" />\n    <PackageReference Include=\"Microsoft.Extensions.Options\" Version=\"10.0.0\" />\n    <PackageReference Include=\"Microsoft.Extensions.Options.ConfigurationExtensions\" Version=\"10.0.0\" />\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"README.md\" Pack=\"true\" PackagePath=\"/\" />\n  </ItemGroup>\n</Project>\n"
  },
  {
    "path": "src/cloudscribe.Core.SimpleContent.CompiledViews.Bootstrap5/README.md",
    "content": "# cloudscribe.Core.SimpleContent.CompiledViews.Bootstrap5\n\n[![NuGet](https://img.shields.io/nuget/v/cloudscribe.Core.SimpleContent.CompiledViews.Bootstrap5.svg)](https://www.nuget.org/packages/cloudscribe.Core.SimpleContent.CompiledViews.Bootstrap5)\n[![License: Apache-2.0](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://opensource.org/licenses/Apache-2.0)\n\nPrecompiled Bootstrap 5 views for cloudscribe.Core.SimpleContent.\n\n## Installation\n\n```shell\nInstall-Package cloudscribe.Core.SimpleContent.CompiledViews.Bootstrap5\n```\n\n## Usage\n\nAdd this package to your ASP.NET Core project to use Bootstrap 5 precompiled views with SimpleContent.\n\n## Contributing\n\nContributions are welcome! Please see the [contributing guidelines](https://github.com/cloudscribe/cloudscribe.SimpleContent/blob/main/CONTRIBUTING.md).\n\n## License\n\nLicensed under the Apache 2.0 License. See the [LICENSE](https://github.com/cloudscribe/cloudscribe.SimpleContent/blob/main/LICENSE) file for details.\n"
  },
  {
    "path": "src/cloudscribe.Core.SimpleContent.CompiledViews.Bootstrap5/VersionProvider.cs",
    "content": "﻿using System;\nusing System.Reflection;\nusing cloudscribe.Versioning;\nusing cloudscribe.Web.Common;\n\nnamespace cloudscribe.Core.SimpleContent.CompiledViews.Bootstrap5\n{\n    public class VersionProvider : IVersionProvider\n    {\n        public string Name { get { return \"cloudscribe.Core.SimpleContent.CompiledViews.Bootstrap5\"; } }\n\n        public Guid ApplicationId { get { return new Guid(\"f93067b4-919d-4910-acd1-4b3b1c210ecf\"); } }\n\n        public Version CurrentVersion\n        {\n\n            get\n            {\n\n                var version = new Version(2, 0, 0, 0);\n                var versionString = typeof(CloudscribeCommonResources).Assembly.GetCustomAttribute<AssemblyFileVersionAttribute>().Version;\n                if (!string.IsNullOrWhiteSpace(versionString))\n                {\n                    Version.TryParse(versionString, out version);\n                }\n\n                return version;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.Core.SimpleContent.CompiledViews.Bootstrap5/Views/Blog/BlogMetaPartial.cshtml",
    "content": "﻿@model cloudscribe.SimpleContent.Web.ViewModels.BlogViewModel\n@using cloudscribe.Web.Common.Extensions\n@inject ISiteContextResolver siteResolver\n@{\n    var imageUrl = Model.ExtractFirstImageUrl(Model.CurrentPost, Url);\n    var Tenant = await siteResolver.ResolveSite(Context.Request.Host.Host, Context.Request.Path);\n    var folderSegment = \"\";\n    if(!string.IsNullOrWhiteSpace(Tenant.SiteFolderName))\n    {\n        folderSegment = Tenant.SiteFolderName + \"/\";\n    }\n    var rssUrl = string.Format(\"/{0}api/rss/\", folderSegment);\n    \n\n}\n@if (Model.CurrentPost != null && !string.IsNullOrEmpty(Model.CurrentPost.MetaDescription))\n{\n    <meta name=\"description\" content=\"@Model.CurrentPost.MetaDescription\" />\n    <meta property=\"og:title\" content=\"@Model.CurrentPost.Title\" />\n    <meta property=\"og:type\" content=\"article\" />\n    <meta property=\"og:url\" content=\"@ViewContext.HttpContext.Request.GetCurrentFullUrl()\" />\n    @if (!string.IsNullOrEmpty(imageUrl))\n    {\n        <meta property=\"og:image\" content=\"@imageUrl\" />\n    }\n    <meta property=\"og:description\" content=\"@Model.CurrentPost.MetaDescription\" />\n    @if (!string.IsNullOrWhiteSpace(Model.ProjectSettings.SiteName))\n    {\n        <meta property=\"og:site_name\" content=\"@Model.ProjectSettings.SiteName\" />\n    }\n    @if (!string.IsNullOrWhiteSpace(Model.ProjectSettings.FacebookAppId))\n    {\n        <meta property=\"fb:app_id\" content=\"@Model.ProjectSettings.FacebookAppId\" />\n    }\n\n    <meta name=\"twitter:card\" content=\"summary\">\n    @if (!string.IsNullOrWhiteSpace(Model.ProjectSettings.TwitterPublisher))\n    {\n        <meta name=\"twitter:site\" content=\"@Model.ProjectSettings.TwitterPublisher\" />\n    }\n    <meta name=\"twitter:title\" content=\"@Model.CurrentPost.Title\">\n    <meta name=\"twitter:description\" content=\"@Model.CurrentPost.MetaDescription\">\n    @if (!string.IsNullOrWhiteSpace(Model.ProjectSettings.TwitterCreator))\n    {\n        <meta name=\"twitter:creator\" content=\"@Model.ProjectSettings.TwitterCreator\" />\n    }\n    @if (!string.IsNullOrEmpty(imageUrl))\n    {\n        <meta name=\"twitter:image\" content=\"@imageUrl\" />\n    }\n\n}\n@*\n    TODO: implement this stuff\n    RSD: Discoverability of Blog APIs\n    http://mashupguide.net/1.0/html/ch05s06.xhtml\n    http://en.wikipedia.org/wiki/Really_Simple_Discovery\n    <link type=\"application/rsd+xml\" rel=\"edituri\" title=\"RSD\" href=\"~/views/robots/rsd\" />\n\n    <link type=\"application/atom+xml\" rel=\"alternate\" title=\"@Model.BlogSettings.Title\" href=\"~/feed/atom/\" />\n*@\n<link type=\"application/rss+xml\" rel=\"alternate\" title=\"@Model.ProjectSettings.Title\" href=\"@rssUrl\" />\n<link type=\"application/wlwmanifest+xml\" rel=\"wlwmanifest\" href=\"~/wlwmanifest.xml\" />\n"
  },
  {
    "path": "src/cloudscribe.Core.SimpleContent.CompiledViews.Bootstrap5/Views/ContentCloning/Index.cshtml",
    "content": "@using cloudscribe.Core.SimpleContent.Integration.ViewModels\n@model ContentCloningViewModel\n@inject ICoreThemeHelper themeHelper\n@inject IStringLocalizer<SimpleContent> sr\n@inject IOptions<ContentSettingsUIConfig> uiOptionsAccessor\n@{\n    var uiOptions = uiOptionsAccessor.Value;\n    var themeSettings = themeHelper.GetThemeSettings();\n    if (themeSettings.AdminSideNavExpanded) { ViewData[\"SideNavToggle\"] = \"show\"; }\n    ViewData[\"SideNavVisible\"] = true;\n    var submitDisabled = Model.CloneAllowed? \"\" : \"disabled\";\n}\n<div class=\"row\">\n    <h2>@ViewBag.Title</h2>\n</div>\n\n<form method=\"post\"  role=\"form\" asp-antiforgery=\"true\" data-submit-once=\"true\">\n    @* <div asp-validation-summary=\"All\" class=\"text-danger\"></div> *@\n\n    <input type=\"hidden\" asp-for=\"SiteId\" />\n    <input type=\"hidden\" asp-for=\"AllowCloneToSiteSelection\" />\n\n    @if(Model.AllowCloneToSiteSelection)\n    {\n    <div class=\"row\">\n        <div class=\"mb-3\">\n            <label asp-for=\"CloneToSiteId\" class=\"form-label\">@sr[\"Destination Site\"]</label>\n            <select asp-for=\"CloneToSiteId\"\n                asp-items=\"@(new SelectList(Model.CloneToSites, nameof(ContentCloningViewModel.SiteDetails.SiteId), nameof(ContentCloningViewModel.SiteDetails.SiteIdentifier)))\"\n                class=\"form-select form-select-lg\" data-bs-toggle=\"tooltip\" data-bs-placement=\"top\"\n                title='@sr[\"Choose a site that you wish to clone the content from\"]'\n                onchange=\"this.form.submit();\">\n                <option value=\"\">@sr[\"Please select one\"]</option>\n            </select>\n            <span asp-validation-for=\"CloneToSiteId\" class=\"text-danger\"></span>\n        </div>\n    </div>\n    }\n    else\n    {\n    <div class=\"row\">\n        <div class=\"mb-3\">\n            <input type=\"hidden\" asp-for=\"CloneToSiteId\" />\n            <label for=\"CloneToSiteIdDisplayOnly\" class=\"form-label\">@sr[\"Destination Site\"]</label>\n            <input type=\"text\" id=\"CloneToSiteIdDisplayOnly\" class=\"form-control\" value=\"@Model.CloneToSiteName\" disabled readonly aria-readonly=\"true\">\n        </div>\n    </div>\n    }\n\n    <div class=\"row\">\n        <div class=\"mb-3\">\n            <label asp-for=\"CloneFromSiteId\" class=\"form-label\">@sr[\"Source Site\"]</label>\n            <select asp-for=\"CloneFromSiteId\"\n                asp-items=\"@(new SelectList(Model.CloneFromSites, nameof(ContentCloningViewModel.SiteDetails.SiteId), nameof(ContentCloningViewModel.SiteDetails.SiteIdentifier)))\"\n                class=\"form-select form-select-lg\" data-bs-toggle=\"tooltip\" data-bs-placement=\"top\"\n                title='@sr[\"Choose a site that you wish to clone the content from\"]'\n                onchange=\"this.form.submit();\">\n                <option value=\"\">@sr[\"Please select one\"]</option>\n            </select>\n            <span asp-validation-for=\"CloneFromSiteId\" class=\"text-danger\"></span>\n        </div>\n    </div>\n\n    <div class=\"mb-3\">\n        <div class=\"form-check\" data-bs-toggle=\"tooltip\" data-placement=\"left\" title='@sr[\"If checked will clone all Content Settings\"]'>\n            <input asp-for=\"CloneContentSettings\" class=\"form-check-input\" onchange=\"this.form.submit();\" />\n            <label asp-for=\"CloneContentSettings\" class=\"form-check-label\">@sr[\"Clone Content Settings\"]</label>\n        </div>\n    </div>\n\n    <div class=\"mb-3\">\n        <div class=\"form-check\" data-bs-toggle=\"tooltip\" data-placement=\"left\" title='@sr[\"If checked will clone all content pages\"]'>\n            <input asp-for=\"ClonePages\" class=\"form-check-input\" onchange=\"this.form.submit();\" />\n            <label asp-for=\"ClonePages\" class=\"form-check-label\">@sr[\"Clone Content Pages\"]</label>\n        </div>\n    </div>\n\n    @if (uiOptions.ShowBlogSettings)\n    {\n        <div class=\"mb-3\">\n            <div class=\"form-check\" data-bs-toggle=\"tooltip\" data-placement=\"left\" title='@sr[\"If checked will clone the Blog posts\"]'>\n                <input asp-for=\"CloneBlogPosts\" class=\"form-check-input\" onchange=\"this.form.submit();\" />\n                <label asp-for=\"CloneBlogPosts\" class=\"form-check-label\">@sr[\"Clone Blog Posts\"]</label>\n            </div>\n        </div>\n    }\n\n    @* <div class=\"mb-3\">\n        <div class=\"form-check\" data-bs-toggle=\"tooltip\" data-placement=\"left\" title='@sr[\"If checked will rewrite any URLs that are embedded in the content that still reference the source site\"]'>\n            <input asp-for=\"RewriteContentUrls\" class=\"form-check-input\" onchange=\"this.form.submit();\" />\n            <label asp-for=\"RewriteContentUrls\" class=\"form-check-label\">@sr[\"Rewrite Content Urls\"]</label>\n        </div>\n    </div> *@\n\n    <hr>\n\n    <div class=\"mb-3\">\n        <button id=\"btnSave\" type=\"button\" class=\"btn btn-primary\" @submitDisabled\n            data-disabled-text='@sr[\"Working...\"]' data-enabled-text='@sr[\"Clone\"]'\n            data-bs-toggle=\"modal\" data-bs-target=\"#confirmCloneModal\">@sr[\"Clone\"]\n        </button>\n    </div>\n\n    <div class=\"modal fade\" id=\"confirmCloneModal\" tabindex=\"-1\" role=\"dialog\" aria-labelledby=\"confirmCloneHeading\">\n        <div class=\"modal-dialog modal-lg\" role=\"document\">\n            <div class=\"modal-content\">\n                <div class=\"modal-header\">\n                    <h4 class=\"modal-title\" id=\"confirmCloneHeading\">@sr[\"Confirm Cloning\"]</h4>\n                    <button type=\"button\" data-bs-dismiss=\"modal\" class=\"btn-close\" aria-label='@sr[\"Close\"]'></button>\n                </div>\n                <div class=\"modal-body\">\n                    @sr[\"You are about to clone content between the following two sites:\"]\n                    <br /><br />\n                    <table class=\"table table-bordered\">\n                        <tr><td>@sr[\"Source Site\"]:</td><td><b>@Model.CloneFromSiteName</b></td></tr>\n                        <tr><td>@sr[\"Destination Site\"]:</td><td><b>@Model.CloneToSiteName</b></td></tr>\n                    </table>\n                    <br />\n                    @sr[\"Are you sure you want to do this? This operation can not be undone.\"]\n                </div>\n                <div class=\"modal-footer\">\n                    <button type=\"button\" class=\"btn btn-primary\" data-bs-dismiss=\"modal\">@sr[\"Cancel\"]</button>\n                    <button type=\"submit\" name=\"Command\" value=\"clone\" class=\"btn btn-danger btn-ok\" @submitDisabled\n                        data-disabled-text='@sr[\"Working...\"]' data-enabled-text='@sr[\"Clone\"]'>@sr[\"Clone\"]\n                    </button>\n                </div>\n            </div>\n        </div>\n    </div>\n\n</form>\n\n@section SideNav {\n    <partial name=\"AdminSideNav\" />\n}\n@section Toolbar{\n    <partial name=\"AdminSideNavToggle\" />\n}\n@section Scripts {\n    <partial name=\"AdminSideNavScripts\" />\n    <script src=\"~/cr/js/jquery.validate.min.js\"></script>\n    <script src=\"~/cr/js/jquery.validate.unobtrusive.min.js\"></script>\n    <script src=\"~/cr/js/jquery.validate.hooks.min.js\"></script>\n    <script src=\"~/cr/js/jqueryvaildation.submitonce-unobtrusive.min.js\"></script>\n    <script src=\"~/cr/js/bootstrap-tooltip-toggle.js\"></script>\n}\n"
  },
  {
    "path": "src/cloudscribe.Core.SimpleContent.CompiledViews.Bootstrap5/Views/ContentSettings/CdnUrlPartial.cshtml",
    "content": "﻿@model cloudscribe.Core.SimpleContent.Integration.ViewModels.ContentSettingsViewModel\n@inject IStringLocalizer<SimpleContent> sr\n@* comment this and uncomment the below if you want editable Image Path *@\n<input type=\"hidden\" asp-for=\"@Model.CdnUrl\" />\n@*\n        <div class=\"mb-3\">\n        <label asp-for=\"CdnUrl\" class=\"col-md-2 control-label\">@sr[\"CDN Base Url\"]</label>\n        <div class=\"col-md-10\">\n            <input asp-for=\"CdnUrl\" class=\"form-control\" />\n            <span asp-validation-for=\"CdnUrl\" class=\"text-danger\"></span>\n        </div>\n    </div>\n*@\n \n"
  },
  {
    "path": "src/cloudscribe.Core.SimpleContent.CompiledViews.Bootstrap5/Views/ContentSettings/CommentSystemSettings.cshtml",
    "content": "﻿@model cloudscribe.Core.SimpleContent.Integration.ViewModels.ContentSettingsViewModel\n@inject IStringLocalizer<SimpleContent> sr\n@inject IOptions<ContentSettingsUIConfig> uiOptionsAccessor\n@{\n    var uiOptions = uiOptionsAccessor.Value;\n}\n@if (uiOptions.ShowCommentSettings)\n{\n    @if (!uiOptions.ShowBlogSettings)\n    {\n        <input asp-for=\"ModerateComments\" type=\"hidden\" />\n        <input asp-for=\"DaysToComment\" type=\"hidden\" />\n        <input asp-for=\"CommentNotificationEmail\" type=\"hidden\" />\n    }\n\n    @if (uiOptions.ShowBlogSettings)\n    {\n        <div class=\"mb-3\">\n            <div class=\"form-check\" data-placement=\"left\" data-bs-toggle=\"tooltip\" title='@sr[\"This setting only applies to using the internal comment system, it does not impact Disqus comments.\"]'>\n                <input asp-for=\"ModerateComments\" class=\"form-check-input\" />\n                <label asp-for=\"ModerateComments\" class=\"form-check-label\">@sr[\"Moderate Comments\"]</label>\n            </div>\n        </div>\n        <div class=\"mb-3\">\n            <label asp-for=\"DaysToComment\">@sr[\"Days To Comment\"]</label>\n            <select asp-for=\"DaysToComment\" class=\"form-control\" data-bs-toggle=\"tooltip\" title='@sr[\"This setting only applies to using the internal comment system, it does not impact Disqus comments.\"]'>\n                <option value=\"-1\">@sr[\"No Limit\"]</option>\n                <option value=\"0\">0</option>\n                <option value=\"1\">1</option>\n                <option value=\"7\">7</option>\n                <option value=\"15\">15</option>\n                <option value=\"30\">30</option>\n                <option value=\"45\">45</option>\n                <option value=\"60\">60</option>\n                <option value=\"90\">90</option>\n            </select>\n            <span asp-validation-for=\"DaysToComment\" class=\"text-danger\"></span>\n        </div>\n        <div class=\"mb-3\">\n            <label asp-for=\"CommentNotificationEmail\">@sr[\"Comment Notification Email\"]</label>\n            <input asp-for=\"CommentNotificationEmail\" class=\"form-control\" data-bs-toggle=\"tooltip\" title='@sr[\"This setting only applies to using the internal comment system, it does not impact Disqus comments.\"]' />\n            <span asp-validation-for=\"CommentNotificationEmail\" class=\"text-danger\"></span>\n        </div>\n    }\n    <div class=\"mb-3\">\n        <label asp-for=\"DisqusShortName\">@sr[\"Disqus Short Name\"]</label>\n        <input asp-for=\"DisqusShortName\" class=\"form-control\" data-bs-toggle=\"tooltip\" title='@sr[\"Provide your Disqus site name aka short name to use Disqus instead of the internal comment system. Highly recommended.\"]' />\n        <span asp-validation-for=\"DisqusShortName\" class=\"text-danger\"></span>\n    </div>\n}\nelse\n{\n    <input asp-for=\"ModerateComments\" type=\"hidden\" value=\"false\" />\n    <input asp-for=\"DaysToComment\" type=\"hidden\" value=\"0\" />\n    <input asp-for=\"CommentNotificationEmail\" type=\"hidden\" value=\"\" />\n    <input asp-for=\"DisqusShortName\" type=\"hidden\" value=\"\" />\n}\n"
  },
  {
    "path": "src/cloudscribe.Core.SimpleContent.CompiledViews.Bootstrap5/Views/ContentSettings/Index.cshtml",
    "content": "﻿@model cloudscribe.Core.SimpleContent.Integration.ViewModels.ContentSettingsViewModel\n@inject ICoreThemeHelper themeHelper\n@inject IStringLocalizer<SimpleContent> sr\n@inject IOptions<ContentSettingsUIConfig> uiOptionsAccessor\n@inject ISummernoteOptionsResolver summernoteOptionsResolver\n@inject ICkeditorOptionsResolver editorOptionsResolver\n@{\n    var uiOptions = uiOptionsAccessor.Value;\n    var themeSettings = themeHelper.GetThemeSettings();\n    if (themeSettings.AdminSideNavExpanded) { ViewData[\"SideNavToggle\"] = \"show\"; }\n    ViewData[\"SideNavVisible\"] = true;\n    var summernoteOptions = await summernoteOptionsResolver.GetSummernoteOptions();\n    var ckOptions = await editorOptionsResolver.GetCkeditorOptions();\n    if (string.IsNullOrWhiteSpace(Model.AboutHeading))\n    {\n        Model.AboutHeading = sr[\"About\"];\n    }\n}\n\n<h2>@ViewBag.Title</h2>\n<form method=\"post\" class=\"form-horizontal\" role=\"form\" asp-antiforgery=\"true\" data-submit-once=\"true\">\n    <div asp-validation-summary=\"All\" class=\"text-danger\"></div>\n    @if (uiOptions.ShowBlogSettings)\n    {\n        <div class=\"mb-3\">\n            <label asp-for=\"Title\">@sr[\"Blog Page Title\"]</label>\n            <input asp-for=\"Title\" class=\"form-control\" />\n            <span asp-validation-for=\"Title\" class=\"text-danger\"></span>\n        </div>\n        <div class=\"mb-3\">\n            <label asp-for=\"Description\">@sr[\"Description\"]</label>\n            <input asp-for=\"Description\" class=\"form-control\" data-bs-toggle=\"tooltip\" title='@sr[\"The description also is used as the channel description in the RSS feed.\"]' />\n            <span asp-validation-for=\"Description\" class=\"text-danger\"></span>\n        </div>\n        <div class=\"mb-3\">\n            <div class=\"form-check\" data-bs-toggle=\"tooltip\" data-placement=\"left\" title='@sr[\"If checked will show the blog title and description at the top of the post list.\"]'>\n                <input asp-for=\"ShowTitle\" class=\"form-check-input\" />\n                <label asp-for=\"ShowTitle\" class=\"form-check-label\">@sr[\"Show Blog Title and Description\"]</label>\n            </div>\n        </div>\n        <div class=\"mb-3\">\n            <label asp-for=\"AboutHeading\">@sr[\"About Heading\"]</label>\n            <input asp-for=\"AboutHeading\" class=\"form-control\" data-bs-toggle=\"tooltip\" title='@sr[\"The heading for the about box in the blog side panel.\"]' />\n            <span asp-validation-for=\"AboutHeading\" class=\"text-danger\"></span>\n        </div>\n        <div class=\"mb-3\">\n            <label asp-for=\"AboutContent\">@sr[\"About Content\"]</label>\n            <textarea asp-for=\"AboutContent\" rows=\"5\"\n                data-summernote-unobtrusive=\"\"\n                data-summernote-config-url=\"@summernoteOptions.CustomConfigPath\"\n                data-summernote-toolbar-config-url=\"@summernoteOptions.CustomToolbarConfigPath\"\n                data-summernote-config-language=\"@summernoteOptions.LanguageCode\"\n                data-summernote-config-dropfileuploadurl=\"@summernoteOptions.DropFileUrl\"\n                data-summernote-config-filebrowserurl=\"@summernoteOptions.FileBrowseUrl\"\n                data-summernote-config-imagebrowseurl=\"@summernoteOptions.ImageBrowseUrl\">\n            </textarea>\n        </div>\n        <div class=\"mb-3\">\n            <div class=\"form-check\" data-bs-toggle=\"tooltip\" data-placement=\"left\" title='@sr[\"If checked will show the blog title and description at the top of the post list.\"]'>\n                <input asp-for=\"ShowAboutBox\" class=\"form-check-input\" />\n                <label asp-for=\"ShowAboutBox\" class=\"form-check-label\">@sr[\"Show About box in side bar of the blog.\"]</label>\n            </div>\n        </div>\n        <div class=\"mb-3\">\n            <div class=\"form-check\" data-bs-toggle=\"tooltip\" data-placement=\"left\" title='@sr[\"If checked will show the blog title and description at the top of the post list.\"]'>\n                <input asp-for=\"ShowRelatedPosts\" class=\"form-check-input\" />\n                <label asp-for=\"ShowRelatedPosts\" class=\"form-check-label\">@sr[\"Show related posts in the blog side bar based on categories of the current post.\"]</label>\n            </div>\n        </div>\n        <div class=\"mb-3\">\n            <div class=\"form-check\" data-bs-toggle=\"tooltip\" data-placement=\"left\" title='@sr[\"If checked will show the blog categories in the side bar\"]'>\n                <input asp-for=\"ShowBlogCategories\" class=\"form-check-input\" />\n                <label asp-for=\"ShowBlogCategories\" class=\"form-check-label\">@sr[\"Show the blog categories in the side bar\"]</label>\n            </div>\n        </div>\n        <div class=\"mb-3\">\n            <div class=\"form-check\" data-bs-toggle=\"tooltip\" data-placement=\"left\" title='@sr[\"If checked will show the blog archives in the side bar\"]'>\n                <input asp-for=\"ShowArchivedPosts\" class=\"form-check-input\" />\n                <label asp-for=\"ShowArchivedPosts\" class=\"form-check-label\">@sr[\"Show the blog archives in the side bar\"]</label>\n            </div>\n        </div>\n    }\n    else\n    {\n        <input asp-for=\"Title\" type=\"hidden\" />\n        <input asp-for=\"Description\" type=\"hidden\" />\n        <input asp-for=\"ShowTitle\" type=\"hidden\" />\n        <input asp-for=\"AboutHeading\" type=\"hidden\" />\n        <input asp-for=\"AboutContent\" type=\"hidden\" />\n        <input asp-for=\"ShowAboutBox\" type=\"hidden\" />\n        <input asp-for=\"ShowRelatedPosts\" type=\"hidden\" />\n\n    }\n\n    @if (uiOptions.ShowBlogMenuOptions)\n    {\n        <div class=\"mb-3\">\n            <label asp-for=\"BlogPageText\">@sr[\"Blog Page Menu Text\"]</label>\n            <input asp-for=\"BlogPageText\" class=\"form-control\" />\n            <span asp-validation-for=\"BlogPageText\" class=\"text-danger\"></span>\n        </div>\n        <div class=\"mb-3\">\n            <label asp-for=\"BlogPageNavComponentVisibility\">@sr[\"Blog Page Menu Visibility\"]</label>\n            <input asp-for=\"BlogPageNavComponentVisibility\" class=\"form-control\" data-bs-toggle=\"tooltip\" title='@sr[\"A comma separated list of navigation component filter names used to filter the blog out of the menu. Leave this blank so the blog menu item is not filtered from any of the menu views. There are some standard filter names like topnav and breadcrumbs but it is also possible to use custom names with custom views. As soon as you populate this field it becomes filtered to only show the blog menu item in the included views, whereas blank means unfiltered.\"]' />\n            <span asp-validation-for=\"BlogPageNavComponentVisibility\" class=\"text-danger\"></span>\n        </div>\n\n        <div class=\"mb-3\">\n            <div class=\"form-check\" data-bs-toggle=\"tooltip\" data-placement=\"left\" title='@sr[\"Add the blog as a top level menu item. There are multiple other ways of adding the blog to the menu. You can make a page that links to /blog or it can be done from the navigation.xml file. If you see it in the menu more than once it means you have multiple ways it is configured to be added.\"]'>\n                <input asp-for=\"AddBlogToPagesTree\" class=\"form-check-input\" />\n                <label asp-for=\"AddBlogToPagesTree\" class=\"form-check-label\">@sr[\"Add Blog To Menu\"]</label>\n            </div>\n        </div>\n        <div class=\"mb-3\">\n            <div class=\"form-check\" data-bs-toggle=\"tooltip\" data-placement=\"left\" title='@sr[\"If checked the blog menu item will link to the most recent post instead of the post list.\"]'>\n                <input asp-for=\"BlogMenuLinksToNewestPost\" class=\"form-check-input\" />\n                <label asp-for=\"BlogMenuLinksToNewestPost\" class=\"form-check-label\">@sr[\"Blog Menu Links To Newest Post\"]</label>\n            </div>\n        </div>\n        <div class=\"mb-3\">\n            <label asp-for=\"BlogPagePosition\">@sr[\"Blog Menu Position\"]</label>\n            <input asp-for=\"BlogPagePosition\" class=\"form-control\" data-bs-toggle=\"tooltip\" title='@sr[\"The position of the blog within the top level menu.\"]' />\n            <span asp-validation-for=\"BlogPagePosition\" class=\"text-danger\"></span>\n        </div>\n\n    }\n    else\n    {\n        <input id=\"BlogPageText\" name=\"BlogPageText\" value=\"Blog\" type=\"hidden\" />\n        <input id=\"BlogPageNavComponentVisibility\" name=\"BlogPageNavComponentVisibility\" value=\"\" type=\"hidden\" />\n        <input id=\"AddBlogToPagesTree\" name=\"AddBlogToPagesTree\" value=\"false\" type=\"hidden\" />\n        <input id=\"BlogMenuLinksToNewestPost\" name=\"BlogMenuLinksToNewestPost\" value=\"false\" type=\"hidden\" />\n        <input id=\"BlogPagePosition\" name=\"BlogPagePosition\" value=\"2\" type=\"hidden\" />\n\n    }\n\n    @if (!uiOptions.ShowBlogSettings)\n    {\n        <input asp-for=\"PostsPerPage\" type=\"hidden\" />\n        <input asp-for=\"PubDateFormat\" type=\"hidden\" />\n        <input asp-for=\"IncludePubDateInPostUrls\" type=\"hidden\" />\n\n    }\n\n    @if (uiOptions.ShowBlogSettings)\n    {\n        <div class=\"mb-3\">\n            <label asp-for=\"PostsPerPage\">@sr[\"Posts Per Page\"]</label>\n            <input asp-for=\"PostsPerPage\" class=\"form-control\" data-bs-toggle=\"tooltip\" title='@sr[\"Number of posts to show per page on the post list.\"]' />\n            <span asp-validation-for=\"PostsPerPage\" class=\"text-danger\"></span>\n        </div>\n\n        <div class=\"mb-3\">\n            <label asp-for=\"PubDateFormat\">@sr[\"Date Format\"]</label>\n            <input asp-for=\"PubDateFormat\" class=\"form-control\" />\n            <span asp-validation-for=\"PubDateFormat\" class=\"text-danger\"></span>\n        </div>\n        <div class=\"mb-3\">\n            <div class=\"form-check\">\n                <input asp-for=\"IncludePubDateInPostUrls\" class=\"form-check-input\" />\n                <label asp-for=\"IncludePubDateInPostUrls\" class=\"form-check-label\">@sr[\"Include Date In Post Urls\"]</label>\n            </div>\n        </div>\n\n        @if (Model.TeasersDisabled)\n        {\n            <input name=\"TeaserMode\" value=\"0\" type=\"hidden\" />\n            <input asp-for=\"TeaserTruncationMode\" type=\"hidden\" />\n            <input asp-for=\"TeaserTruncationLength\" type=\"hidden\" />\n\n        }\n        else\n        {\n            <div class=\"mb-3\">\n                <label asp-for=\"TeaserMode\">@sr[\"Teaser Mode\"]</label>\n                <select asp-for=\"TeaserMode\" class=\"form-control\" data-bs-toggle=\"tooltip\" title='@sr[\"If ON, truncated 'teasers' will automatically be generated for blog list views and RSS feed, and a read more link will be shown. You can overide the auto generated teaser per post with a manually created teaser\"]'>\n                    <option value=\"0\">@sr[\"Off\"]</option>\n                    <option value=\"1\">@sr[\"Lists and Feed\"]</option>\n                    <option value=\"2\">@sr[\"Feed Only\"]</option>\n                    <option value=\"3\">@sr[\"List Only\"]</option>\n                </select>\n                <span asp-validation-for=\"TeaserMode\" class=\"text-danger\"></span>\n            </div>\n            <div class=\"mb-3\">\n                <label asp-for=\"TeaserTruncationMode\">@sr[\"Teaser Truncation Mode\"]</label>\n                <select asp-for=\"TeaserTruncationMode\" class=\"form-control\" data-bs-toggle=\"tooltip\" title='@sr[\"Truncate blog posts in lists views and in the feed by character/word/length. Words is recommended.\"]'>\n                    <option value=\"0\">@sr[\"Words\"]</option>\n                    <option value=\"1\">@sr[\"Absolute string lenth including white space\"]</option>\n                    <option value=\"2\">@sr[\"Letters or digits\"]</option>\n                </select>\n                <span asp-validation-for=\"TeaserTruncationMode\" class=\"text-danger\"></span>\n            </div>\n            <div class=\"mb-3\">\n                <label asp-for=\"TeaserTruncationLength\">@sr[\"Teaser Truncation Length\"]</label>\n                <input asp-for=\"TeaserTruncationLength\" class=\"form-control\" data-bs-toggle=\"tooltip\" title='@sr[\"Length (character/word/length) to truncate blog posts for teasers.\"]' />\n                <span asp-validation-for=\"TeaserTruncationLength\" class=\"text-danger\"></span>\n            </div>\n\n        }\n\n\n    }\n\n    <partial name=\"CommentSystemSettings\" model=\"@Model\" />\n\n    @if (uiOptions.ShowDefaultContentType)\n    {\n        <div class=\"mb-3\">\n            <label asp-for=\"DefaultContentType\">@sr[\"Default Content Type\"]</label>\n            <select asp-for=\"DefaultContentType\" class=\"form-control\" data-bs-toggle=\"tooltip\">\n                <option value=\"html\">html</option>\n                <option value=\"markdown\">markdown</option>\n            </select>\n            <span asp-validation-for=\"DefaultContentType\" class=\"text-danger\"></span>\n        </div>\n\n    }\n    else\n    {\n        <input asp-for=\"DefaultContentType\" type=\"hidden\" />\n    }\n    @if (uiOptions.ShowPageSettings)\n    {\n        <div class=\"mb-3\">\n            <label asp-for=\"DefaultPageSlug\">@sr[\"Default Page\"]</label>\n            <input asp-for=\"DefaultPageSlug\" class=\"form-control\" />\n            <span asp-validation-for=\"DefaultPageSlug\" class=\"text-danger\"></span>\n        </div>\n\n    }\n    else\n    {\n        <input asp-for=\"DefaultPageSlug\" type=\"hidden\" />\n\n    }\n    @if (uiOptions.ShowBlogSettings && uiOptions.ShowPageSettings)\n    {\n        <div class=\"mb-3\">\n            <div class=\"form-check\">\n                <input asp-for=\"ShowRecentPostsOnDefaultPage\" class=\"form-check-input\" />\n                <label asp-for=\"ShowRecentPostsOnDefaultPage\" class=\"form-check-label\">@sr[\"Show Recent Posts on Default Page\"]</label>\n            </div>\n        </div>\n        <div class=\"mb-3\">\n            <div class=\"form-check\">\n                <input asp-for=\"ShowFeaturedPostsOnDefaultPage\" class=\"form-check-input\" />\n                <label asp-for=\"ShowFeaturedPostsOnDefaultPage\" class=\"form-check-label\">@sr[\"Show Featured Posts on Default Page\"]</label>\n            </div>\n        </div>\n\n    }\n    else\n    {\n        <input asp-for=\"ShowRecentPostsOnDefaultPage\" type=\"hidden\" />\n        <input asp-for=\"ShowFeaturedPostsOnDefaultPage\" type=\"hidden\" />\n\n    }\n\n    <partial name=\"MediaPathPartial\" model=\"Model\" />\n    <partial name=\"CdnUrlPartial\" model=\"Model\" />\n    <div class=\"mb-3\">\n        <label asp-for=\"Publisher\">@sr[\"Publisher\"]</label>\n        <input asp-for=\"Publisher\" class=\"form-control\" data-bs-toggle=\"tooltip\" title='@sr[\"This is used in meta data, see http://schema.org/publisher.\"]' />\n        <span asp-validation-for=\"Publisher\" class=\"text-danger\"></span>\n    </div>\n    <div class=\"mb-3\">\n        <label asp-for=\"PublisherLogoUrl\">@sr[\"Publisher Logo Url\"]</label>\n        <input asp-for=\"PublisherLogoUrl\" class=\"form-control\" data-bs-toggle=\"tooltip\" title='@sr[\"This is used in meta data, see http://schema.org/logo.\"]' />\n        <span asp-validation-for=\"PublisherLogoUrl\" class=\"text-danger\"></span>\n    </div>\n    <div class=\"mb-3\">\n        <label asp-for=\"PublisherLogoWidth\">@sr[\"Publisher Logo Width\"]</label>\n        <input asp-for=\"PublisherLogoWidth\" class=\"form-control\" />\n        <span asp-validation-for=\"PublisherLogoWidth\" class=\"text-danger\"></span>\n    </div>\n    <div class=\"mb-3\">\n        <label asp-for=\"PublisherLogoHeight\">@sr[\"Publisher Logo Height\"]</label>\n        <input asp-for=\"PublisherLogoHeight\" class=\"form-control\" />\n        <span asp-validation-for=\"PublisherLogoHeight\" class=\"text-danger\"></span>\n    </div>\n    <div class=\"mb-3\">\n        <label asp-for=\"PublisherEntityType\">@sr[\"Publisher Type\"]</label>\n        <select asp-for=\"PublisherEntityType\" class=\"form-control\" data-bs-toggle=\"tooltip\" title='@sr[\"This is used in meta data, see http://schema.org/publisher.\"]'>\n            <option value=\"Organization\">@sr[\"Organization\"]</option>\n            <option value=\"Person\">@sr[\"Person\"]</option>\n        </select>\n        <span asp-validation-for=\"PublisherEntityType\" class=\"text-danger\"></span>\n    </div>\n    <div class=\"mb-3\">\n        <label asp-for=\"FacebookAppId\">@sr[\"Facebook App Id\"]</label>\n        <input asp-for=\"FacebookAppId\" class=\"form-control\" data-bs-toggle=\"tooltip\" />\n        <span asp-validation-for=\"FacebookAppId\" class=\"text-danger\"></span>\n    </div>\n    <div class=\"mb-3\">\n        <label asp-for=\"SiteName\">@sr[\"Site Name\"]</label>\n        <input asp-for=\"SiteName\" class=\"form-control\" data-bs-toggle=\"tooltip\" title='@sr[\"Site Name is used in meta data.\"]' />\n        <span asp-validation-for=\"SiteName\" class=\"text-danger\"></span>\n    </div>\n    <div class=\"mb-3\">\n        <label asp-for=\"TwitterPublisher\">@sr[\"Publisher Twitter Handle\"]</label>\n        <input asp-for=\"TwitterPublisher\" class=\"form-control\" data-bs-toggle=\"tooltip\" title='@sr[\"This is used in meta data.\"]' />\n        <span asp-validation-for=\"TwitterPublisher\" class=\"text-danger\"></span>\n    </div>\n    <div class=\"mb-3\">\n        <label asp-for=\"TwitterCreator\">@sr[\"Creator Twitter Handle\"]</label>\n        <input asp-for=\"TwitterCreator\" class=\"form-control\" data-bs-toggle=\"tooltip\" title='@sr[\"This is used in meta data.\"]' />\n        <span asp-validation-for=\"TwitterCreator\" class=\"text-danger\"></span>\n    </div>\n    <div class=\"mb-3\">\n        <p>@sr[\"Show / hide the following information below the main content of pages (site default).\"]</p>\n    </div>\n    <div class=\"mb-3\">\n        <div class=\"form-check\" data-bs-toggle=\"tooltip\" data-placement=\"left\" title='@sr[\"Show Created By\"]'>\n            <input asp-for=\"ShowCreatedBy\" class=\"form-check-input\" />\n            <label asp-for=\"ShowCreatedBy\" class=\"form-check-label\">@sr[\"Show Created By\"]</label>\n        </div>\n    </div>\n    <div class=\"mb-3\">\n        <div class=\"form-check\" data-bs-toggle=\"tooltip\" data-placement=\"left\" title='@sr[\"Show Created Date\"]'>\n            <input asp-for=\"ShowCreatedDate\" class=\"form-check-input\" />\n            <label asp-for=\"ShowCreatedDate\" class=\"form-check-label\">@sr[\"Show Created Date\"]</label>\n        </div>\n    </div>\n    <div class=\"mb-3\">\n        <div class=\"form-check\" data-bs-toggle=\"tooltip\" data-placement=\"left\" title='@sr[\"Show Last Modified By\"]'>\n            <input asp-for=\"ShowLastModifiedBy\" class=\"form-check-input\" />\n            <label asp-for=\"ShowLastModifiedBy\" class=\"form-check-label\">@sr[\"Show Last Modified By\"]</label>\n        </div>\n    </div>\n    <div class=\"mb-3\">\n        <div class=\"form-check\" data-bs-toggle=\"tooltip\" data-placement=\"left\" title='@sr[\"Show Last Modified Date\"]'>\n            <input asp-for=\"ShowLastModifiedDate\" class=\"form-check-input\" />\n            <label asp-for=\"ShowLastModifiedDate\" class=\"form-check-label\">@sr[\"Show Last Modified Date\"]</label>\n        </div>\n    </div>\n    @if (uiOptions.ShowBlogSettings)\n    {\n        <fieldset>\n            <legend>@sr[\"Feed Settings\"]</legend>\n            <div class=\"mb-3\">\n                <label asp-for=\"RemoteFeedUrl\">@sr[\"Feedburner Url\"]</label>\n                <input asp-for=\"RemoteFeedUrl\" class=\"form-control\" />\n                <span asp-validation-for=\"RemoteFeedUrl\" class=\"text-danger\"></span>\n            </div>\n            <div class=\"mb-3\">\n                <label asp-for=\"LanguageCode\">@sr[\"Language Code\"]</label>\n                <input asp-for=\"LanguageCode\" class=\"form-control\" />\n                <span asp-validation-for=\"LanguageCode\" class=\"text-danger\"></span>\n            </div>\n            <div class=\"mb-3\">\n                <label asp-for=\"ChannelCategoriesCsv\">@sr[\"Comma Separated Channel Categories\"]</label>\n                <input asp-for=\"ChannelCategoriesCsv\" class=\"form-control\" />\n                <span asp-validation-for=\"ChannelCategoriesCsv\" class=\"text-danger\"></span>\n            </div>\n            <div class=\"mb-3\">\n                <label asp-for=\"ManagingEditorEmail\">@sr[\"Managing Editor Email\"]</label>\n                <input asp-for=\"ManagingEditorEmail\" class=\"form-control\" />\n                <span asp-validation-for=\"ManagingEditorEmail\" class=\"text-danger\"></span>\n            </div>\n            <div class=\"mb-3\">\n                <label asp-for=\"WebmasterEmail\">@sr[\"Webmaster Email\"]</label>\n                <input asp-for=\"WebmasterEmail\" class=\"form-control\" />\n                <span asp-validation-for=\"WebmasterEmail\" class=\"text-danger\"></span>\n            </div>\n\n            <div class=\"mb-3\">\n                <label asp-for=\"DefaultFeedItems\">@sr[\"Default Feed Items\"]</label>\n                <input asp-for=\"DefaultFeedItems\" class=\"form-control\" data-bs-toggle=\"tooltip\" title='@sr[\"Number of posts to show in the feed by default.\"]' />\n                <span asp-validation-for=\"DefaultFeedItems\" class=\"text-danger\"></span>\n            </div>\n            <div class=\"mb-3\">\n                <label asp-for=\"MaxFeedItems\">@sr[\"Max Feed Items\"]</label>\n                <input asp-for=\"MaxFeedItems\" class=\"form-control\" data-bs-toggle=\"tooltip\" title='@sr[\"Maximum number of posts to show in the feed. Used to constrain the query string paramter for feed size.\"]' />\n                <span asp-validation-for=\"MaxFeedItems\" class=\"text-danger\"></span>\n            </div>\n\n        </fieldset>\n\n    }\n    else\n    {\n\n        <input asp-for=\"RemoteFeedUrl\" type=\"hidden\" />\n        <input asp-for=\"LanguageCode\" type=\"hidden\" />\n        <input asp-for=\"ChannelCategoriesCsv\" type=\"hidden\" />\n        <input asp-for=\"ManagingEditorEmail\" type=\"hidden\" />\n        <input asp-for=\"WebmasterEmail\" type=\"hidden\" />\n\n    }\n\n    <div class=\"mb-3\">\n        <button id=\"btnSave\" name=\"submit\" type=\"submit\" class=\"btn btn-primary\" data-disabled-text='@sr[\"Working...\"]' data-enabled-text='@sr[\"Save\"]'>@sr[\"Save\"]</button>\n    </div>\n</form>\n@if (Model.Editors.Count > 0)\n{\n\n    <h3>@sr[\"Editors\"]</h3>\n    <ul class=\"list-unstyled\">\n        @foreach (var user in Model.Editors)\n        {\n            <li class=\"mb-2\">\n                @user.DisplayName - @user.Email\n                <a class=\"btn btn-xs btn-primary\" asp-action=\"UserEdit\"\n                   asp-controller=\"UserAdmin\"\n                   asp-route-siteId=\"@user.SiteId\"\n                   asp-route-userId=\"@user.Id\">@sr[\"Manage\"]</a>\n            </li>\n\n        }\n    </ul>\n\n}\n\n@section Styles {\n    <link href=\"/cr/css/summernote-bs5.min.css\" rel=\"stylesheet\">\n}\n@section SideNav {\n    <partial name=\"AdminSideNav\" />\n}\n@section Toolbar{\n    <partial name=\"AdminSideNavToggle\" />\n}\n@section Scripts {\n    <partial name=\"AdminSideNavScripts\" />\n    <script src=\"~/cr/js/jquery.validate.min.js\"></script>\n    <script src=\"~/cr/js/jquery.validate.unobtrusive.min.js\"></script>\n    <script src=\"~/cr/js/jquery.validate.hooks.min.js\"></script>\n    <script src=\"~/cr/js/jqueryvaildation.submitonce-unobtrusive.min.js\"></script>\n    <script src=\"~/cr/js/ckeditor4114/ckeditor.js\"></script>\n    <script src=\"~/cr/js/cloudscribe-ckeditor-unobtrusive.min.js\"></script>\n    <script src=\"~/cr/js/bootstrap-tooltip-toggle.js\"></script>\n    <partial name=\"SummernoteScripts\" />\n}\n"
  },
  {
    "path": "src/cloudscribe.Core.SimpleContent.CompiledViews.Bootstrap5/Views/ContentSettings/MediaPathPartial.cshtml",
    "content": "﻿@model cloudscribe.Core.SimpleContent.Integration.ViewModels.ContentSettingsViewModel\n@inject IStringLocalizer<SimpleContent> sr\n@* comment this and uncomment the below if you want editable Image Path *@\n<input type=\"hidden\" asp-for=\"@Model.LocalMediaVirtualPath\" />\n@*\n        <div class=\"mb-3\">\n        <label asp-for=\"LocalMediaVirtualPath\" class=\"col-md-2 control-label\">@sr[\"Image Path\"]</label>\n        <div class=\"col-md-10\">\n            <input asp-for=\"LocalMediaVirtualPath\" class=\"form-control\" />\n            <span asp-validation-for=\"LocalMediaVirtualPath\" class=\"text-danger\"></span>\n        </div>\n    </div>\n*@\n \n"
  },
  {
    "path": "src/cloudscribe.Core.SimpleContent.CompiledViews.Bootstrap5/Views/Page/Tree.cshtml",
    "content": "﻿@model cloudscribe.SimpleContent.Web.ViewModels.PageTreeViewModel\n@inject IStringLocalizer<SimpleContent> sr\n@inject ICoreThemeHelper coreThemeHelper\n@inject ISimpleContentThemeHelper themeHelper\n@{\n    var themeSettings = themeHelper.GetThemeSettings();\n    var coreThemeSettings = coreThemeHelper.GetThemeSettings();\n    if (coreThemeSettings.AdminSideNavExpanded) { ViewData[\"SideNavToggle\"] = \"show\"; }\n    ViewData[\"SideNavVisible\"] = true;\n}\n@section Styles {\n    <partial name=\"TreeStylePartial\" />\n}\n<partial name=\"TreeMainPartial\" model=\"Model\" />\n@section SideNav {\n    <partial name=\"AdminSideNav\" />\n}\n@section Toolbar{\n    <partial name=\"AdminSideNavToggle\" />\n}\n@section Scripts {\n    <partial name=\"AdminSideNavScripts\" />\n    <partial name=\"TreeScriptsPartial\" />\n}\n"
  },
  {
    "path": "src/cloudscribe.Core.SimpleContent.CompiledViews.Bootstrap5/Views/Shared/CmsSiteLogoPartial.cshtml",
    "content": "﻿@model SiteContext\n@inject IPageRoutes  pageRoutes\n@{\n    var rootUrl = Url.RouteUrl(pageRoutes.PageRouteName, new { siteFolder = Model.SiteFolderName, slug = \"\" });\n}\n<a href=\"@rootUrl\"><img src=\"@Model.LogoUrl\" alt=\"@Model.SiteName\" style=\"height:100px;\" class=\"me-3\" /></a>\n"
  },
  {
    "path": "src/cloudscribe.Core.SimpleContent.CompiledViews.Bootstrap5/Views/Shared/CmsSiteTitlePartial.cshtml",
    "content": "﻿@model SiteContext\n@inject IPageRoutes  pageRoutes\n@{ \n    var rootUrl = Url.RouteUrl(pageRoutes.PageRouteName, new { siteFolder = Model.SiteFolderName, slug = \"\" });\n}\n<a href=\"@rootUrl\" class=\"h2 me-3\" aria-hidden=\"true\">@Model.SiteName </a>\n"
  },
  {
    "path": "src/cloudscribe.Core.SimpleContent.CompiledViews.Bootstrap5/Views/Shared/CommentNotificationEmail.cshtml",
    "content": "﻿@model cloudscribe.Core.SimpleContent.ViewModels.CoreCommentNotificationModel\n\n@{\n    Layout = \"_LayoutEmailNotification\";\n    ViewData[\"Title\"] = \"Post Comment Notification\";\n    ViewData[\"Site\"] = Model.Site;\n}\n<h3  style=\"color:#5F5F5F;line-height:125%;font-family:Helvetica,Arial,sans-serif;font-size:20px;font-weight:normal;margin-top:0;margin-bottom:3px;text-align:left;\">\n   @Model.Comment.Author   on <a href=\"@Model.PostUrl\"> @Model.Post.Title :</a>\n</h3>\n<div style=\"font: 11pt/1.5 calibri, arial;\">\n <br />\n    @Model.Comment.Content  <br /><br />\n\n    <br /><br /><hr />\n    Website:  @Model.Comment.Website <br />\n    E-mail:  @Model.Comment.Email <br />\n    IP-address: @Model.Comment.Ip\n</div>\n"
  },
  {
    "path": "src/cloudscribe.Core.SimpleContent.CompiledViews.Bootstrap5/Views/_ViewImports.cshtml",
    "content": "﻿@using System\n@using System.Collections.Generic\n@using System.Globalization\n@using System.Linq\n@using Microsoft.AspNetCore.Http\n@using Microsoft.AspNetCore.Authentication\n@using Microsoft.AspNetCore.Identity\n@using Microsoft.AspNetCore.Localization\n@using Microsoft.Extensions.Localization\n@using Microsoft.Extensions.Options\n@using cloudscribe.Core.Models\n@using cloudscribe.Core.Identity\n@using cloudscribe.Core.Web\n@using cloudscribe.Core.Web.Components\n@using cloudscribe.Core.Web.Design\n@using cloudscribe.Web.Navigation\n@using cloudscribe.Web.Pagination\n@using cloudscribe.Pagination.Models\n@using cloudscribe.Web.Common\n@using cloudscribe.Web.Common.Components\n@using cloudscribe.Web.Common.Helpers\n@using cloudscribe.Web.Common.Models\n@using cloudscribe.Web.Common.Extensions\n@using cloudscribe.SimpleContent.Models\n@using cloudscribe.Core.SimpleContent\n@using cloudscribe.SimpleContent.Web.TagHelpers\n@using cloudscribe.SimpleContent.Web\n@using cloudscribe.SimpleContent.Web.Design\n@addTagHelper \"*, cloudscribe.SimpleContent.Web\"\n@addTagHelper \"*, Microsoft.AspNetCore.Mvc.TagHelpers\"\n@addTagHelper \"*, cloudscribe.Web.Common\"\n@addTagHelper \"*, cloudscribe.Core.Web\"\n@addTagHelper \"*, cloudscribe.Web.Navigation\"\n@addTagHelper \"*, cloudscribe.Web.Pagination\"\n"
  },
  {
    "path": "src/cloudscribe.Core.SimpleContent.CompiledViews.Bootstrap5/cloudscribe.Core.SimpleContent.CompiledViews.Bootstrap5.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Razor\">\n\n  <PropertyGroup>\n    <Description>Bootstrap 5 pre-compiled views for cloudscribe Core and SimpleContent integration</Description>\n    <Version>10.1.0</Version>\n    <TargetFramework>net10.0</TargetFramework>\n    <Authors>Joe Audette</Authors>\n    <AddRazorSupportForMvc>true</AddRazorSupportForMvc>\n    <PackageTags>cloudscribe;SimpleContent;Bootstrap5</PackageTags>\n    <PackageIcon>icon.png</PackageIcon>\n    <PackageProjectUrl>https://github.com/cloudscribe/cloudscribe.SimpleContent</PackageProjectUrl>\n    <PackageLicenseExpression>Apache-2.0</PackageLicenseExpression>\n    <RepositoryUrl>https://github.com/cloudscribe/cloudscribe.SimpleContent.git</RepositoryUrl>\n    <RepositoryType>git</RepositoryType>\n    <PackageReadmeFile>README.md</PackageReadmeFile>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <None Include=\"icon.png\" Pack=\"true\" PackagePath=\"\\\"/>\n  </ItemGroup>\n\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|AnyCPU'\">\n    <NoWarn>1701;1702;0436</NoWarn>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|AnyCPU'\">\n    <NoWarn>1701;1702;0436</NoWarn>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <FrameworkReference Include=\"Microsoft.AspNetCore.App\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <ProjectReference Include=\"..\\cloudscribe.Core.SimpleContent\\cloudscribe.Core.SimpleContent.csproj\" />\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"README.md\" Pack=\"true\" PackagePath=\"/\" />\n  </ItemGroup>\n</Project>\n"
  },
  {
    "path": "src/cloudscribe.MetaWeblog/Controllers/MetaWeblogController.cs",
    "content": "﻿// Licensed under the Apache License, Version 2.0\n// Author:                  Joe Audette\n// Created:                 2016-02-07\n// Last Modified:           2020-02-26\n// \n\nusing cloudscribe.MetaWeblog.Models;\nusing Microsoft.Extensions.Logging;\nusing Microsoft.Extensions.Options;\nusing System;\nusing System.IO;\nusing System.Threading;\nusing System.Threading.Tasks;\nusing Microsoft.AspNetCore.Mvc;\nusing System.Xml.Linq;\nusing Microsoft.AspNetCore.Hosting;\nusing System.Text;\n\nnamespace cloudscribe.MetaWeblog.Controllers\n{\n    [ApiExplorerSettings(IgnoreApi = true)]\n    public class MetaWeblogController : Controller\n    {\n        public MetaWeblogController(\n            IWebHostEnvironment appEnv,\n            IMetaWeblogRequestParser metaWeblogRequestParser,\n            IMetaWeblogRequestProcessor metaWeblogProcessor,\n            IMetaWeblogResultFormatter metaWeblogResultFormatter,\n            IMetaWeblogSecurity metaWeblogSecurity,\n            IMetaWeblogRequestValidator metaWebLogRequestValidator,\n            ILogger<MetaWeblogController> logger,\n            IOptions<ApiOptions> optionsAccessor = null)\n        {\n            HostingEnvironment = appEnv;\n            RequestParser = metaWeblogRequestParser;\n            RequestProcessor = metaWeblogProcessor;\n            ResultFormatter = metaWeblogResultFormatter;\n            Security = metaWeblogSecurity;\n            RequestValidator = metaWebLogRequestValidator;\n            Log = logger;\n            if(optionsAccessor != null)\n            {\n               ApiOptions = optionsAccessor.Value;\n            }\n            else\n            {\n                ApiOptions = new ApiOptions(); // just use the default options\n            }\n           \n        }\n\n        protected IWebHostEnvironment HostingEnvironment { get; private set; }\n        protected ApiOptions ApiOptions { get; private set; }\n        protected IMetaWeblogSecurity Security { get; private set; }\n        protected IMetaWeblogRequestProcessor RequestProcessor { get; private set; }\n        protected IMetaWeblogRequestParser RequestParser { get; private set; }\n        protected IMetaWeblogResultFormatter ResultFormatter { get; private set; }\n        protected IMetaWeblogRequestValidator RequestValidator { get; private set; }\n        protected ILogger Log { get; private set; }\n\n\n        [HttpPost]\n        [Route(\"api/metaweblog\")]\n        public virtual async Task<IActionResult> Index()\n        {\n            CancellationToken cancellationToken = HttpContext?.RequestAborted ?? CancellationToken.None;\n\n            var dumpFileBasePath = HostingEnvironment.ContentRootPath\n                + ApiOptions.AppRootDumpFolderVPath.Replace('/', Path.DirectorySeparatorChar);\n\n            XDocument postedXml = null;\n            XDocument resultXml;\n            MetaWeblogResult outCome;\n            FaultStruct faultStruct;\n            try\n            {\n                using (HttpContext.Request.Body)\n                    \n                {\n                    string tmp;\n                    using (StreamReader reader = new StreamReader(Request.Body, Encoding.UTF8))\n                    {\n                        tmp = await reader.ReadToEndAsync();\n                    }\n\n                    postedXml = XDocument.Parse(tmp, LoadOptions.None);\n                }\n            }\n            catch(Exception ex)\n            {\n                Log.LogError(ex.Message, ex);\n\n                if (ApiOptions.DumpRequestXmlToDisk)\n                {\n                    var requestFileName = dumpFileBasePath + \"request-with-error\" + Utils.GetDateTimeStringForFileName(true) + \".txt\";\n                    using (StreamWriter s = System.IO.File.CreateText(requestFileName))\n                    {\n                        //postedXml.Save(s, SaveOptions.None);\n                        await HttpContext.Request.Body.CopyToAsync(s.BaseStream);\n                    }\n                }\n\n                outCome = new MetaWeblogResult();\n                faultStruct = new FaultStruct();\n                faultStruct.faultCode = \"802\"; // invalid access\n                faultStruct.faultString = \"invalid access\";\n                outCome.Fault = faultStruct;\n                resultXml = ResultFormatter.Format(outCome);\n                return new XmlResult(resultXml);\n            }\n            \n\n            var metaWeblogRequest = RequestParser.ParseRequest(postedXml);\n\n            if (ApiOptions.DumpRequestXmlToDisk)\n            {\n                var requestFileName = dumpFileBasePath + \"request-\" \n                    + Utils.GetDateTimeStringForFileName(true)  + \"-\"\n                    + metaWeblogRequest.MethodName.Replace(\".\",\"-\")\n                    + \".xml\";\n                using (StreamWriter s = System.IO.File.CreateText(requestFileName))\n                {\n                    postedXml.Save(s, SaveOptions.None);\n                }\n            }\n\n            var permissions = await Security.ValiatePermissions(metaWeblogRequest, cancellationToken);\n\n            if(string.IsNullOrEmpty(metaWeblogRequest.BlogId))\n            {\n                metaWeblogRequest.BlogId = permissions.BlogId;\n            }\n            \n            if((!permissions.CanEditPosts)&&(!permissions.CanEditPages))\n            {\n                outCome = new MetaWeblogResult();\n                resultXml = ResultFormatter.Format(outCome);\n                return new XmlResult(resultXml);\n            }\n\n            var isValid = await RequestValidator.IsValid(metaWeblogRequest, cancellationToken);\n            if (!isValid)\n            {\n                outCome = new MetaWeblogResult();\n                outCome.AddValidatonFault();\n                resultXml = ResultFormatter.Format(outCome);\n                return new XmlResult(resultXml);\n            }\n            \n            outCome = await RequestProcessor.ProcessRequest(\n                metaWeblogRequest, \n                permissions, \n                cancellationToken);\n\n            resultXml = ResultFormatter.Format(outCome);\n\n            if (ApiOptions.DumpResponseXmlToDisk)\n            {\n                var reseponseFileName = dumpFileBasePath + \"response-\" \n                    + Utils.GetDateTimeStringForFileName(true) + \"-\"\n                    + outCome.Method.Replace(\".\", \"-\") \n                    + \".xml\";\n\n                using (StreamWriter s = System.IO.File.CreateText(reseponseFileName))\n                {\n                    resultXml.Save(s, SaveOptions.None);\n                }\n            }\n\n            return new XmlResult(resultXml);\n            \n        }\n\n        \n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.MetaWeblog/IMetaWeblogRequestParser.cs",
    "content": "﻿using System.Xml.Linq;\n\nnamespace cloudscribe.MetaWeblog\n{\n    public interface IMetaWeblogRequestParser\n    {\n        MetaWeblogRequest ParseRequest(XDocument postedDocument);\n    }\n}"
  },
  {
    "path": "src/cloudscribe.MetaWeblog/IMetaWeblogRequestProcessor.cs",
    "content": "﻿\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace cloudscribe.MetaWeblog\n{\n    public interface IMetaWeblogRequestProcessor\n    {\n        Task<MetaWeblogResult> ProcessRequest(\n            MetaWeblogRequest input,\n            MetaWeblogSecurityResult permission,\n            CancellationToken cancellationToken);\n    }\n}"
  },
  {
    "path": "src/cloudscribe.MetaWeblog/IMetaWeblogRequestValidator.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace cloudscribe.MetaWeblog\n{\n    public interface IMetaWeblogRequestValidator\n    {\n        Task<bool> IsValid(MetaWeblogRequest request, CancellationToken cancellationToken);\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.MetaWeblog/IMetaWeblogResultFormatter.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing System.Xml.Linq;\n\nnamespace cloudscribe.MetaWeblog\n{\n    public interface IMetaWeblogResultFormatter\n    {\n        XDocument Format(MetaWeblogResult metaWeblogResult);\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.MetaWeblog/IMetaWeblogSecurity.cs",
    "content": "﻿// Copyright (c) Source Tree Solutions, LLC. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.\n// Author:                  Joe Audette\n// Created:                 2016-02-15\n// Last Modified:           2016-02-15\n// \n\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace cloudscribe.MetaWeblog\n{\n    public interface IMetaWeblogSecurity\n    {\n        Task<MetaWeblogSecurityResult> ValiatePermissions(MetaWeblogRequest request, CancellationToken cancellationToken);\n        \n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.MetaWeblog/IMetaWeblogService.cs",
    "content": "﻿// Copyright (c) Source Tree Solutions, LLC. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.\n// Author:                  Joe Audette\n// Created:                 2016-02-04\n// Last Modified:           2016-03-29\n// \n\nusing cloudscribe.MetaWeblog.Models;\nusing System.Collections.Generic;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace cloudscribe.MetaWeblog\n{\n\n    public interface IMetaWeblogService\n    {\n        #region MetaWeblog API\n\n        //\"metaWeblog.newPost\n        Task<string> NewPost(\n            string blogId,\n            string userName,\n            string password,\n            PostStruct newPost, \n            bool publish,\n            string authorDisplayName\n            );\n        \n        //metaWeblog.editPost\n        Task<bool> EditPost(\n            string blogId,\n            string postId,\n            string userName,\n            string password,\n            PostStruct post, \n            bool publish);\n        \n        //metaWeblog.getPost\n        Task<PostStruct> GetPost(\n            string blogId,\n            string postId,\n            string userName,\n            string password,\n            CancellationToken cancellationToken);\n\n\n        //metaWeblog.getCategories\n        Task<List<CategoryStruct>> GetCategories(\n            string blogId,\n            string userName,\n            string password,\n            CancellationToken cancellationToken);\n        \n\n        //metaWeblog.getRecentPosts\n        Task<List<PostStruct>> GetRecentPosts(\n            string blogId,\n            string userName,\n            string password,\n            int numberOfPosts,\n            CancellationToken cancellationToken);\n        \n        //wp.uploadFile\n        //metaWeblog.newMediaObject\n        Task<MediaInfoStruct> NewMediaObject(\n            string blogId,\n            string userName,\n            string password,\n            MediaObjectStruct mediaObject);\n\n        #endregion\n\n        #region Blogger API\n\n        //blogger.deletePost\n        //bool DeletePost(string username, string password, string postid);\n        // void DeletePost(string userName, string password, int postid);\n        Task<bool> DeletePost(\n            string blogId,\n            string postId,\n            string userName,\n            string password\n            );\n\n        //blogger.getUsersBlogs\n        //metaWeblog.getUsersBlogs\n        //wp.getUsersBlogs\n        //blogger.getUsersBlogs\n        Task<List<BlogInfoStruct>> GetUserBlogs(\n            string key, \n            string userName,\n            string password,\n            CancellationToken cancellationToken);\n\n        #endregion\n\n        // wp.newCategory\n        Task<string> NewCategory(\n            string blogId, \n            string category,\n            string userName,\n            string password\n            );\n\n        //wp.getPages method\n        Task<List<PageStruct>> GetPages(\n            string blogId,\n            string userName,\n            string password,\n            CancellationToken cancellationToken);\n\n        //wp.getPageList method\n        Task<List<PageStruct>> GetPageList(\n            string blogId,\n            string userName,\n            string password,\n            CancellationToken cancellationToken);\n\n        //wp.getPage method\n        Task<PageStruct> GetPage(\n            string blogId, \n            string pageId,\n            string userName,\n            string password,\n            CancellationToken cancellationToken);\n\n        //wp.newPage method\n        Task<string> NewPage(\n            string blogId,\n            string userName,\n            string password,\n            PageStruct newPage, \n            bool publish);\n\n        //wp.editPage\n        Task<bool> EditPage(\n            string blogId, \n            string pageId,\n            string userName,\n            string password,\n            PageStruct page, \n            bool publish);\n\n        //wp.deletePage\n        Task<bool> DeletePage(\n            string blogId, \n            string pageId,\n            string userName,\n            string password\n            );\n    }\n\n    \n}\n"
  },
  {
    "path": "src/cloudscribe.MetaWeblog/MetaWeblogRequest.cs",
    "content": "﻿\n\nusing cloudscribe.MetaWeblog.Models;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading.Tasks;\n\nnamespace cloudscribe.MetaWeblog\n{\n    public class MetaWeblogRequest\n    {\n        public MetaWeblogRequest()\n        {\n\n        }\n\n        /// <summary>\n        ///     Gets AppKey is a key generated by the calling application.  It is sent with blogger API calls.\n        /// </summary>\n        /// <remarks>\n        ///     BlogEngine.NET doesn't require specific AppKeys for API calls.  It is no longer standard practive.\n        /// </remarks>\n        public string AppKey { get; set; }\n\n        /// <summary>\n        ///     Gets ID of the Blog to call the function on.  Since BlogEngine supports only a single blog instance,\n        ///     this incoming parameter is not used.\n        /// </summary>\n        public string BlogId { get; set; }\n\n        /// <summary>\n        ///     Gets MediaObject is a struct sent by the metaWeblog.newMediaObject function.\n        ///     It contains information about the media and the object in a bit array.\n        /// </summary>\n        public MediaObjectStruct MediaObject { get; set; }\n\n        /// <summary>\n        ///     Gets Name of Called Metaweblog Function\n        /// </summary>\n        public string MethodName { get; set; }\n\n        /// <summary>\n        ///     Gets Number of post request by the metaWeblog.getRecentPosts function\n        /// </summary>\n        public int NumberOfPosts { get; set; }\n\n        /// <summary>\n        ///     Gets Metaweblog Page Struct\n        /// </summary>\n        public PageStruct Page { get; set; }\n\n        /// <summary>\n        ///     Gets PageID Guid in string format\n        /// </summary>\n        public string PageId { get; set; }\n\n        /// <summary>\n        ///     Gets Password for user validation\n        /// </summary>\n        public string Password { get; set; }\n\n        /// <summary>\n        ///    Gets Metaweblog Post struct containing information post including title, content, and categories.\n        /// </summary>\n        public PostStruct Post { get; set; }\n\n        /// <summary>\n        ///     Gets The PostID Guid in string format\n        /// </summary>\n        public string PostId { get; set; }\n\n        /// <summary>\n        ///     Gets a value indicating whether or not a post will be marked as published by BlogEngine.\n        /// </summary>\n        public bool Publish { get; set; }\n\n        /// <summary>\n        ///     Gets Login for user validation\n        /// </summary>\n        public string UserName { get; set; }\n\n        /// <summary>\n        ///     Gets Category for wp.newCategory\n        /// </summary>\n        public string Category { get; set; }\n\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.MetaWeblog/MetaWeblogRequestParser.cs",
    "content": "﻿// Copyright (c) Source Tree Solutions, LLC. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.\n// Author:                  Joe Audette\n// Created:                 2016-02-04\n// Last Modified:           2016-02-17\n// \n\nusing cloudscribe.MetaWeblog.Models;\nusing Microsoft.Extensions.Logging;\nusing System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.Globalization;\nusing System.Linq;\nusing System.Xml.Linq;\n\nnamespace cloudscribe.MetaWeblog\n{\n    public class MetaWeblogRequestParser : IMetaWeblogRequestParser\n    {\n        private ILogger log = null;\n        private XDocument postedXml;\n        private List<XElement> inputParams = null;\n\n        public MetaWeblogRequestParser(ILogger logger = null)\n        {\n            log = logger;\n           \n        }\n\n        public MetaWeblogRequest ParseRequest(XDocument postedDocument)\n        {\n            //postedXml = XDocument.Load(context.Request.Body, LoadOptions.None);\n            postedXml = postedDocument;\n\n            MetaWeblogRequest result = new MetaWeblogRequest();\n\n            var methodCallElement = postedXml.Document.Element(\"methodCall\");\n            //if (rootElement == null) throw new HttpException(400, @\"The \"\"methodCall\"\" element is missing from the XML-RPC request body.\");\n            var methodNameElement = methodCallElement.Element(\"methodName\");\n            result.MethodName = methodNameElement.Value;\n            var paramsElement = methodCallElement.Elements(\"params\");\n            inputParams = paramsElement.Descendants(\"param\").ToList<XElement>();\n            //inputParams.\n\n            // Determine what params are what by method name\n            switch (result.MethodName)\n            {\n                case \"system.listMethods\":\n                case \"wpcom.getFeatures\":\n                    //do nothing\n                    break;\n\n                case \"metaWeblog.newPost\":\n                    result.BlogId = inputParams[0].Descendants(\"string\").SingleOrDefault().Value;\n                    result.UserName = inputParams[1].Descendants(\"string\").SingleOrDefault().Value;\n                    result.Password = inputParams[2].Descendants(\"string\").SingleOrDefault().Value;\n                    result.Post = GetPost(inputParams[3]);\n                    if (inputParams.Count > 4)\n                    {\n                        var p = inputParams[4].Descendants(\"boolean\").SingleOrDefault().Value;\n                        result.Publish = p != \"0\" && p != \"false\";\n                    }\n                    else\n                    {\n                        result.Publish = GetIsPublished(inputParams[3]);\n                    }\n\n                    break;\n                case \"metaWeblog.editPost\":\n                    result.PostId = inputParams[0].Value;\n                    result.UserName = inputParams[1].Value;\n                    result.Password = inputParams[2].Value;\n                    result.Post = GetPost(inputParams[3]);\n                    //this.Publish = this.inputParams[4].InnerText != \"0\" && this.inputParams[4].InnerText != \"false\";\n                    if (inputParams.Count > 4)\n                    {\n                        var p = inputParams[4].Descendants(\"boolean\").SingleOrDefault().Value;\n                        result.Publish = p != \"0\" && p != \"false\";\n                    }\n                    else\n                    {\n                        result.Publish = GetIsPublished(inputParams[3]);\n                    }\n\n                    break;\n                case \"metaWeblog.getPost\":\n                    result.PostId = inputParams[0].Value;\n                    result.UserName = inputParams[1].Value;\n                    result.Password = inputParams[2].Value;\n                    break;\n                case \"metaWeblog.newMediaObject\":\n                case \"wp.uploadFile\":\n                    result.BlogId = inputParams[0].Value;\n                    result.UserName = inputParams[1].Value;\n                    result.Password = inputParams[2].Value;\n                    result.MediaObject = GetMediaObject(inputParams[3]);\n                    break;\n                case \"metaWeblog.getCategories\":\n                case \"wp.getCategories\":\n                case \"wp.getAuthors\":\n                case \"wp.getPageList\":\n                case \"wp.getPages\":\n                case \"wp.getTags\":\n                    result.BlogId = inputParams[0].Value;\n                    result.UserName = inputParams[1].Value;\n                    result.Password = inputParams[2].Value;\n                    break;\n                case \"wp.newCategory\":\n                    result.BlogId = inputParams[0].Value;\n                    result.UserName = inputParams[1].Value;\n                    result.Password = inputParams[2].Value;\n                    result.Category = GetCategory(inputParams[3]);\n                    break;\n                case \"metaWeblog.getRecentPosts\":\n                    result.BlogId = inputParams[0].Value;\n                    result.UserName = inputParams[1].Value;\n                    result.Password = inputParams[2].Value;\n                    result.NumberOfPosts = Int32.Parse(inputParams[3].Value, CultureInfo.InvariantCulture);\n                    break;\n                case \"blogger.getUsersBlogs\":\n                case \"metaWeblog.getUsersBlogs\":\n                    result.AppKey = inputParams[0].Value;\n                    result.UserName = inputParams[1].Value;\n                    result.Password = inputParams[2].Value;\n                    break;\n                case \"wp.getUsersBlogs\":\n                    result.UserName = inputParams[0].Value;\n                    result.Password = inputParams[1].Value;\n                    break;\n                case \"blogger.deletePost\":\n                    result.AppKey = inputParams[0].Descendants(\"string\").SingleOrDefault().Value;\n                    result.PostId = inputParams[1].Descendants(\"string\").SingleOrDefault().Value;\n                    result.UserName = inputParams[2].Descendants(\"string\").SingleOrDefault().Value;\n                    result.Password = inputParams[3].Descendants(\"string\").SingleOrDefault().Value;\n                    result.Publish = inputParams[4].Descendants(\"boolean\").SingleOrDefault().Value != \"0\" \n                        && inputParams[4].Descendants(\"boolean\").SingleOrDefault().Value != \"false\";\n\n                    break;\n                case \"blogger.getUserInfo\":\n                    result.AppKey = inputParams[0].Value;\n                    result.UserName = inputParams[1].Value;\n                    result.Password = inputParams[2].Value;\n                    break;\n                case \"wp.newPage\":\n                    result.BlogId = inputParams[0].Value;\n                    result.UserName = inputParams[1].Value;\n                    result.Password = inputParams[2].Value;\n                    result.Page = GetPage(inputParams[3]);\n                    if (inputParams.Count > 4)\n                    {\n                        var p = inputParams[4].Descendants(\"boolean\").SingleOrDefault().Value;\n                        result.Publish = p != \"0\" && p != \"false\";\n                        //result.Publish = inputParams[4].Value != \"0\" && inputParams[4].Value != \"false\";\n                    }\n\n\n                    break;\n                case \"wp.getPage\":\n                    result.BlogId = inputParams[0].Value;\n                    result.PageId = inputParams[1].Value;\n                    result.UserName = inputParams[2].Value;\n                    result.Password = inputParams[3].Value;\n                    break;\n                case \"wp.editPage\":\n                    result.BlogId = inputParams[0].Value;\n                    result.PageId = inputParams[1].Value;\n                    result.UserName = inputParams[2].Value;\n                    result.Password = inputParams[3].Value;\n                    result.Page = GetPage(inputParams[4]);\n                    if (inputParams.Count > 5)\n                    {\n                        var p = inputParams[5].Descendants(\"boolean\").SingleOrDefault().Value;\n                        result.Publish = p != \"0\" && p != \"false\";\n                        \n                    }\n                    else\n                    {\n                        result.Publish = GetPublish(inputParams[4]);\n                    }\n                    //result. = inputParams[5].Value;\n\n                    break;\n                case \"wp.deletePage\":\n                    result.BlogId = inputParams[0].Value;\n                    result.UserName = inputParams[1].Value;\n                    result.Password = inputParams[2].Value;\n                    result.PageId = inputParams[3].Value;\n                    break;\n                default:\n                    throw new MetaWeblogException(\"02\", string.Format(\"Unknown Method. ({0})\", result.MethodName));\n            }\n            \n            return result;\n\n        }\n\n        private static bool GetIsPublished(XElement paramNode)\n        {\n            //XmlNode status = node.SelectSingleNode(\"value/struct/member[name='post_status']\");\n            //var status = node.Descendants(\"member\")\n            //    .First(i => (string)i.Attribute(\"name\") == \"post_status\");\n            var statusMember = paramNode.Descendants(\"member\")\n              .FirstOrDefault(p =>\n                     p.Element(\"name\").Value == \"post_status\"\n                     );\n\n\n            if ((statusMember != null) && ((statusMember.LastNode as XElement).Value == \"publish\")) { return true; }\n\n            return false;\n        }\n\n        private static bool GetPublish(XElement paramNode)\n        {\n\n            //var statusNode = node.SelectSingleNode(\"value/struct/member[name='page_status']\");\n            //var statusNode = node.Descendants(\"member\")\n            //    .First(i => (string)i.Attribute(\"name\") == \"page_status\");\n            var statusMember = paramNode.Descendants(\"member\")\n              .FirstOrDefault(p =>\n                     p.Element(\"name\").Value == \"page_status\"\n                     );\n\n            if (statusMember == null)\n            {\n                throw new MetaWeblogException(\"06\", \"Page Struct Element, page_status, not Sent.\");\n            }\n\n            string result = (statusMember.LastNode as XElement).Value;\n\n            if (result == \"publish\") { return true; }\n\n            if (result == \"true\") { return true; }\n\n            if (result == \"1\") { return true; }\n\n            return false;\n\n        }\n\n        private static string GetCategory(XElement paramNode)\n        {\n            //var categoryNode = node.SelectSingleNode(\"value/struct/member[name='name']\");\n            //var categoryNode = node.Descendants(\"member\")\n            //   .First(i => (string)i.Attribute(\"name\") == \"name\");\n\n            var categoryMember = paramNode.Descendants(\"member\")\n              .FirstOrDefault(p =>\n                     p.Element(\"name\").Value == \"name\"\n                     );\n\n            if (categoryMember == null)\n            {\n                throw new MetaWeblogException(\"06\", \"Category Struct Element, name, not Sent.\");\n            }\n\n            return (categoryMember.LastNode as XElement).Value;\n        }\n\n        /// <summary>\n        /// Creates a Metaweblog Post object from the XML struct\n        /// </summary>\n        /// <param name=\"paramNode\">\n        /// XML contains a Metaweblog Post Struct\n        /// </param>\n        /// <returns>\n        /// Metaweblog Post Struct Obejct\n        /// </returns>\n        private static PostStruct GetPost(XElement paramNode)\n        {\n            var temp = new PostStruct();\n\n            // Require Title and Description\n            //var title = node.SelectSingleNode(\"value/struct/member[name='title']\");\n            \n            var titleMember = paramNode.Descendants(\"member\")\n               .FirstOrDefault(p =>\n                      p.Element(\"name\").Value == \"title\"\n                      );\n\n            if (titleMember == null)\n            {\n                throw new MetaWeblogException(\"05\", \"Page Struct Element, Title, not Sent.\");\n            }\n\n\n\n            //temp.title = title.LastChild.InnerText;\n            temp.title = titleMember.Descendants(\"string\").FirstOrDefault().Value;\n\n            //var description = node.SelectSingleNode(\"value/struct/member[name='description']\");\n           \n            var descriptionMember = paramNode.Descendants(\"member\")\n               .FirstOrDefault(p =>\n                      p.Element(\"name\").Value == \"description\"\n                      );\n\n            if (descriptionMember == null)\n            {\n                throw new MetaWeblogException(\"05\", \"Page Struct Element, Description, not Sent.\");\n            }\n\n            //temp.description = description.LastChild.InnerText;\n            temp.description = descriptionMember.Descendants(\"string\").FirstOrDefault().Value;\n\n            //var link = node.SelectSingleNode(\"value/struct/member[name='link']\");\n            \n            var linkMember = paramNode.Descendants(\"member\")\n               .FirstOrDefault(p =>\n                      p.Element(\"name\").Value == \"link\"\n                      );\n\n            //temp.link = link == null ? string.Empty : link.LastChild.InnerText;\n            temp.link = linkMember == null ? string.Empty : linkMember.Descendants(\"string\").FirstOrDefault().Value;\n\n            //var allowComments = node.SelectSingleNode(\"value/struct/member[name='mt_allow_comments']\");\n            //temp.commentPolicy = allowComments == null ? string.Empty : allowComments.LastChild.InnerText;\n            \n            var allowCommentsMember = paramNode.Descendants(\"member\")\n               .FirstOrDefault(p =>\n                      p.Element(\"name\").Value == \"mt_allow_comments\"\n                      );\n\n            //temp.commentPolicy = allowComments == null ? string.Empty : (allowComments.LastNode as XElement).Value;\n            temp.commentPolicy = allowCommentsMember == null ? string.Empty : (allowCommentsMember.LastNode as XElement).Value;\n\n            //var excerpt = node.SelectSingleNode(\"value/struct/member[name='mt_excerpt']\");\n            //temp.excerpt = excerpt == null ? string.Empty : excerpt.LastChild.InnerText;\n\n           \n            var excerptMember = paramNode.Descendants(\"member\")\n               .FirstOrDefault(p =>\n                      p.Element(\"name\").Value == \"mt_excerpt\"\n                      );\n\n            temp.excerpt = excerptMember == null ? string.Empty : (excerptMember.LastNode as XElement).Value;\n\n            //var slug = node.SelectSingleNode(\"value/struct/member[name='wp_slug']\");\n            //temp.slug = slug == null ? string.Empty : slug.LastChild.InnerText;\n\n            //var slug = paramNode.Descendants(\"member\")\n            //   .First(i => (string)i.Attribute(\"name\") == \"wp_slug\");\n\n            var slugMember = paramNode.Descendants(\"member\")\n               .FirstOrDefault(p =>\n                      p.Element(\"name\").Value == \"wp_slug\"\n                      );\n\n            temp.slug = slugMember == null ? string.Empty : (slugMember.LastNode as XElement).Value;\n\n            //var authorId = node.SelectSingleNode(\"value/struct/member[name='wp_author_id']\");\n            //temp.author = authorId == null ? string.Empty : authorId.LastChild.InnerText;\n            \n            var authorMember = paramNode.Descendants(\"member\")\n               .FirstOrDefault(p =>\n                      p.Element(\"name\").Value == \"wp_author_id\"\n                      );\n\n            temp.author = authorMember == null ? string.Empty : (authorMember.LastNode as XElement).Value;\n\n            var cats = new List<string>();\n            //var categories = node.SelectSingleNode(\"value/struct/member[name='categories']\");\n            \n            var categoriesMember = paramNode.Descendants(\"member\")\n               .FirstOrDefault(p =>\n                      p.Element(\"name\").Value == \"categories\"\n                      );\n\n            if (categoriesMember != null)\n            {\n                var categoryArray = categoriesMember.LastNode as XElement;\n                //var categoryArrayNodes = categoryArray.SelectNodes(\"array/data/value/string\");\n                var categoryArrayNodes = categoryArray.Descendants(\"string\");\n\n                if (categoryArrayNodes != null)\n                {\n                    cats.AddRange(categoryArrayNodes.Cast<XElement>().Select(\n                        catnode => catnode.Value));\n                }\n            }\n\n            temp.categories = cats;\n\n            // postDate has a few different names to worry about\n            //var dateCreated = node.SelectSingleNode(\"value/struct/member[name='dateCreated']\");\n            \n            var dateCreatedMember = paramNode.Descendants(\"member\")\n               .FirstOrDefault(p =>\n                      p.Element(\"name\").Value == \"dateCreated\"\n                      );\n\n            //var pubDate = node.SelectSingleNode(\"value/struct/member[name='pubDate']\");\n            \n            var pubDateMember = paramNode.Descendants(\"member\")\n               .FirstOrDefault(p =>\n                      p.Element(\"name\").Value == \"pubDate\"\n                      );\n\n            if (dateCreatedMember != null)\n            {\n                try\n                {\n                    var tempDate = (dateCreatedMember.LastNode as XElement).Value;\n                    temp.postDate = DateTime.ParseExact(\n                        tempDate,\n                        \"yyyyMMdd'T'HH':'mm':'ss\",\n                        CultureInfo.InvariantCulture,\n                        DateTimeStyles.AssumeUniversal);\n                }\n                catch (Exception ex)\n                {\n                    // Ignore PubDate Error\n                    Debug.WriteLine(ex.Message);\n                }\n            }\n\n            else if (pubDateMember != null)\n            {\n                try\n                {\n                    var tempPubDate = (pubDateMember.LastNode as XElement).Value;\n                    temp.postDate = DateTime.ParseExact(\n                        tempPubDate,\n                        \"yyyyMMdd'T'HH':'mm':'ss\",\n                        CultureInfo.InvariantCulture,\n                        DateTimeStyles.AssumeUniversal);\n                }\n                catch (Exception ex)\n                {\n                    // Ignore PubDate Error\n                    Debug.WriteLine(ex.Message);\n                }\n            }\n\n            // WLW tags implementation using mt_keywords\n            var tags = new List<string>();\n            \n            var keyWordsMember = paramNode.Descendants(\"member\")\n               .FirstOrDefault(p =>\n                      p.Element(\"name\").Value == \"mt_keywords\"\n                      );\n\n            if (keyWordsMember != null)\n            {\n                var tagsList = (keyWordsMember.LastNode as XElement).Value;\n                foreach (var item in\n                    tagsList.Split(',').Where(item => string.IsNullOrEmpty(tags.Find(t => t.Equals(item.Trim(), StringComparison.OrdinalIgnoreCase)))))\n                {\n                    tags.Add(item.Trim());\n                }\n            }\n\n            temp.tags = tags;\n\n            return temp;\n        }\n\n        private PageStruct GetPage(XElement paramNode)\n        {\n            var temp = new PageStruct();\n\n            // Require Title and Description\n            //var title = node.SelectSingleNode(\"value/struct/member[name='title']\");\n            //var title = node.Descendants(\"member\")\n            //    .First(i => (string)i.Attribute(\"name\") == \"title\");\n            var titleMember = paramNode.Descendants(\"member\")\n              .FirstOrDefault(p =>\n                     p.Element(\"name\").Value == \"title\"\n                     );\n\n            if (titleMember == null)\n            {\n                throw new MetaWeblogException(\"06\", \"Page Struct Element, Title, not Sent.\");\n            }\n\n            temp.title = (titleMember.LastNode as XElement).Value;\n\n            //var description = node.SelectSingleNode(\"value/struct/member[name='description']\");\n            //var description = node.Descendants(\"member\")\n            //    .First(i => (string)i.Attribute(\"name\") == \"description\");\n            var descMember = paramNode.Descendants(\"member\")\n              .FirstOrDefault(p =>\n                     p.Element(\"name\").Value == \"description\"\n                     );\n\n            if (descMember == null)\n            {\n                throw new MetaWeblogException(\"06\", \"Page Struct Element, Description, not Sent.\");\n            }\n\n            temp.description = (descMember.LastNode as XElement).Value;\n\n            //var link = node.SelectSingleNode(\"value/struct/member[name='link']\");\n            //if (link != null)\n            //{\n            //    temp.link = node.SelectSingleNode(\"value/struct/member[name='link']\") == null ? null : link.LastChild.InnerText;\n            //}\n\n            //var link = node.Descendants(\"member\")\n            //    .First(i => (string)i.Attribute(\"name\") == \"link\");\n            var linkMember = paramNode.Descendants(\"member\")\n              .FirstOrDefault(p =>\n                     p.Element(\"name\").Value == \"link\"\n                     );\n\n            temp.link = linkMember == null ? string.Empty : (linkMember.LastNode as XElement).Value;\n\n            var slugMember = paramNode.Descendants(\"member\")\n             .FirstOrDefault(p =>\n                    p.Element(\"name\").Value == \"wp_slug\"\n                    );\n\n            temp.slug = slugMember == null ? string.Empty : (slugMember.LastNode as XElement).Value;\n\n            //var dateCreated = node.SelectSingleNode(\"value/struct/member[name='dateCreated']\");\n            //var dateCreated = node.Descendants(\"member\")\n            //   .First(i => (string)i.Attribute(\"name\") == \"dateCreated\");\n            var dateCreatedMember = paramNode.Descendants(\"member\")\n              .FirstOrDefault(p =>\n                     p.Element(\"name\").Value == \"dateCreated\"\n                     );\n\n\n            if (dateCreatedMember != null)\n            {\n                try\n                {\n                    var tempDate = (dateCreatedMember.LastNode as XElement).Value;\n                    temp.pageDate = DateTime.ParseExact(\n                        tempDate,\n                        \"yyyyMMdd'T'HH':'mm':'ss\",\n                        CultureInfo.InvariantCulture,\n                        DateTimeStyles.AssumeUniversal);\n                }\n                catch (Exception ex)\n                {\n                    // Ignore PubDate Error\n                    if (log != null)\n                    {\n                        log.LogError(\"swallowed pub date error\", ex);\n                    }\n                    \n                    \n                }\n            }\n\n            // Keywords\n            //var keywords = node.SelectSingleNode(\"value/struct/member[name='mt_keywords']\");\n            //temp.mt_keywords = keywords == null ? string.Empty : keywords.LastChild.InnerText;\n\n            //var keywords = node.Descendants(\"member\")\n            //    .First(i => (string)i.Attribute(\"name\") == \"mt_keywords\");\n            var keywordsMember = paramNode.Descendants(\"member\")\n              .FirstOrDefault(p =>\n                     p.Element(\"name\").Value == \"mt_keywords\"\n                     );\n\n            temp.mt_keywords = keywordsMember == null ? string.Empty : (keywordsMember.LastNode as XElement).Value;\n\n            //var pageParentId = node.SelectSingleNode(\"value/struct/member[name='wp_page_parent_id']\");\n            //temp.pageParentID = pageParentId == null ? null : pageParentId.LastChild.InnerText;\n\n            //var pageParentId = node.Descendants(\"member\")\n            //    .First(i => (string)i.Attribute(\"name\") == \"wp_page_parent_id\");\n            var parentIdMember = paramNode.Descendants(\"member\")\n              .FirstOrDefault(p =>\n                     p.Element(\"name\").Value == \"wp_page_parent_id\"\n                     );\n\n            temp.pageParentId = parentIdMember == null ? null : (parentIdMember.LastNode as XElement).Value;\n\n            //var pageOrder = node.SelectSingleNode(\"value/struct/member[name='wp_page_order']\");\n            //temp.pageOrder = pageOrder == null ? null : pageOrder.LastChild.InnerText;\n\n            //var pageOrder = node.Descendants(\"member\")\n            //    .First(i => (string)i.Attribute(\"name\") == \"wp_page_order\");\n\n            var pageOrderMember = paramNode.Descendants(\"member\")\n              .FirstOrDefault(p =>\n                     p.Element(\"name\").Value == \"wp_page_order\"\n                     );\n\n            temp.pageOrder = pageOrderMember == null ? null : (pageOrderMember.LastNode as XElement).Value;\n\n            //var allowComments = node.SelectSingleNode(\"value/struct/member[name='mt_allow_comments']\");\n            //temp.commentPolicy = allowComments == null ? string.Empty : allowComments.LastChild.InnerText;\n            //var allowComments = node.Descendants(\"member\")\n            //    .First(i => (string)i.Attribute(\"name\") == \"mt_allow_comments\");\n\n            var allowCommentsMember = paramNode.Descendants(\"member\")\n              .FirstOrDefault(p =>\n                     p.Element(\"name\").Value == \"mt_allow_comments\"\n                     );\n\n            temp.commentPolicy = allowCommentsMember == null ? string.Empty : (allowCommentsMember.LastNode as XElement).Value;\n\n            return temp;\n        }\n\n        private static MediaObjectStruct GetMediaObject(XElement paramNode)\n        {\n            //var name = node.SelectSingleNode(\"value/struct/member[name='name']\");\n            //var type = node.SelectSingleNode(\"value/struct/member[name='type']\");\n            //var bits = node.SelectSingleNode(\"value/struct/member[name='bits']\");\n            \n            var nameMember = paramNode.Descendants(\"member\")\n               .FirstOrDefault(p =>\n                      p.Element(\"name\").Value == \"name\"\n                      );\n            \n            var typeMember = paramNode.Descendants(\"member\")\n               .FirstOrDefault(p =>\n                      p.Element(\"name\").Value == \"type\"\n                      );\n\n            var bitsMember = paramNode.Descendants(\"member\")\n               .FirstOrDefault(p =>\n                      p.Element(\"name\").Value == \"bits\"\n                      );\n\n            var temp = new MediaObjectStruct\n            {\n                name = nameMember == null ? string.Empty : nameMember.Descendants(\"string\").FirstOrDefault().Value,\n                type = typeMember == null ? \"notsent\" : typeMember.Descendants(\"string\").FirstOrDefault().Value,\n                bytes = Convert.FromBase64String(bitsMember == null ? string.Empty : bitsMember.Descendants(\"base64\").FirstOrDefault().Value)\n            };\n\n            return temp;\n        }\n\n\n\n\n        \n\n\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.MetaWeblog/MetaWeblogRequestProcessor.cs",
    "content": "﻿// Copyright (c) Source Tree Solutions, LLC. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.\n// Author:                  Joe Audette\n// Created:                 2016-02-04\n// Last Modified:           2016-08-10\n// \n\nusing cloudscribe.MetaWeblog.Models;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace cloudscribe.MetaWeblog\n{\n    public class MetaWeblogRequestProcessor : IMetaWeblogRequestProcessor\n    {\n        \n        public MetaWeblogRequestProcessor(\n            IMetaWeblogService metaWeblogService)\n        {\n            service = metaWeblogService;\n            \n        }\n\n        private IMetaWeblogService service;\n        \n        public async Task<MetaWeblogResult> ProcessRequest(\n            MetaWeblogRequest input,\n            MetaWeblogSecurityResult permission,\n            CancellationToken cancellationToken)\n        {\n            \n            MetaWeblogResult output = new MetaWeblogResult();\n            output.Method = input.MethodName;\n            \n            switch (input.MethodName)\n            {\n                case \"metaWeblog.newPost\":\n                    if(permission.CanEditPosts)\n                    {\n                        output.PostId = await service.NewPost(\n                        input.BlogId,\n                        input.UserName,\n                        input.Password,\n                        input.Post,\n                        input.Publish,\n                        permission.DisplayName\n                        );\n                    }\n                    else\n                    {\n                        output.AddSecurityFault();\n                    }\n                    \n                    break;\n                case \"metaWeblog.editPost\":\n                    if (permission.CanEditPosts)\n                    {\n                        output.Completed = await service.EditPost(\n                        input.BlogId,\n                        input.PostId,\n                        input.UserName,\n                        input.Password,\n                        input.Post,\n                        input.Publish);\n                    }\n                    else\n                    {\n                        output.AddSecurityFault();\n                    }\n\n\n                    break;\n                case \"metaWeblog.getPost\":\n                    if (permission.CanEditPosts)\n                    {\n                        var postStruct = await service.GetPost(\n                        input.BlogId,\n                        input.PostId,\n                        input.UserName,\n                        input.Password,\n                        cancellationToken\n                        );\n\n                        output.Post = postStruct;\n                        if (string.IsNullOrEmpty(output.Post.postId))\n                        {\n                            output.Fault = new FaultStruct { faultCode = \"404\", faultString = \"post not found\" };\n                        }\n                    }\n                    else\n                    {\n                        output.AddSecurityFault();\n                    }\n\n                    break;\n                case \"metaWeblog.newMediaObject\":\n                case \"wp.uploadFile\":\n                    if (permission.CanEditPosts || permission.CanEditPages)\n                    {\n                        output.MediaInfo = await service.NewMediaObject(\n                        input.BlogId,\n                        input.UserName,\n                        input.Password,\n                        input.MediaObject);\n                    }\n                    else\n                    {\n                        output.AddSecurityFault();\n                    }\n\n                    break;\n                case \"metaWeblog.getCategories\":\n                    if (permission.CanEditPosts || permission.CanEditPages)\n                    {\n                        output.Categories = await service.GetCategories(\n                        input.BlogId,\n                        input.UserName,\n                        input.Password,\n                        cancellationToken);\n                    }\n                    else\n                    {\n                        output.AddSecurityFault();\n                    }\n\n                    break;\n                case \"wp.newCategory\":\n                    if (permission.CanEditPosts || permission.CanEditPages)\n                    {\n                        output.CategoryId = await service.NewCategory(\n                        input.BlogId,\n                        input.Category,\n                        input.UserName,\n                        input.Password\n                        );\n                    }\n                    else\n                    {\n                        output.AddSecurityFault();\n                    }\n\n                    break;\n                case \"metaWeblog.getRecentPosts\":\n                    if (permission.CanEditPosts)\n                    {\n                        var posts = await service.GetRecentPosts(\n                        input.BlogId,\n                        input.UserName,\n                        input.Password,\n                        input.NumberOfPosts,\n                        cancellationToken);\n\n                        output.Posts = posts;\n                    }\n                    else\n                    {\n                        output.AddSecurityFault();\n                    }\n                    break;\n                case \"blogger.getUsersBlogs\":\n                case \"metaWeblog.getUsersBlogs\":\n                case \"wp.getUsersBlogs\":\n                    output.Blogs = await service.GetUserBlogs(\n                        input.AppKey, \n                        input.UserName,\n                        input.Password,\n                        cancellationToken);\n                    break;\n                case \"blogger.deletePost\":\n                    if (permission.CanEditPosts)\n                    {\n                        output.Completed = await service.DeletePost(\n                        input.BlogId,\n                        input.PostId,\n                        input.UserName,\n                        input.Password\n                        );\n                    }\n                    else\n                    {\n                        output.AddSecurityFault();\n                    }\n\n                    break;\n                case \"blogger.getUserInfo\":\n                    // Not implemented.  Not planned.\n                    throw new MetaWeblogException(\"10\", \"The method GetUserInfo is not implemented.\");\n                case \"wp.newPage\":\n                    if (permission.CanEditPages)\n                    {\n                        output.PageId = await service.NewPage(\n                        input.BlogId,\n                        input.UserName,\n                        input.Password,\n                        input.Page,\n                        input.Publish);\n                    }\n                    else\n                    {\n                        output.AddSecurityFault();\n                    }\n\n                    break;\n                case \"wp.getPageList\":\n                    if (permission.CanEditPages)\n                    {\n                        output.Pages = await service.GetPageList(\n                        input.BlogId,\n                        input.UserName,\n                        input.Password,\n                        cancellationToken);\n                    }\n                    else\n                    {\n                        output.AddSecurityFault();\n                    }\n\n                    break;\n                case \"wp.getPages\":\n                    if (permission.CanEditPages)\n                    {\n                        output.Pages = await service.GetPages(\n                        input.BlogId,\n                        input.UserName,\n                        input.Password,\n                        cancellationToken);\n                    }\n                    else\n                    {\n                        output.AddSecurityFault();\n                    }\n\n                    break;\n                case \"wp.getPage\":\n                    if (permission.CanEditPages)\n                    {\n                        output.Page = await service.GetPage(\n                        input.BlogId,\n                        input.PageId,\n                        input.UserName,\n                        input.Password,\n                        cancellationToken);\n                    }\n                    else\n                    {\n                        output.AddSecurityFault();\n                    }\n\n                    break;\n                case \"wp.editPage\":\n                    if (permission.CanEditPages)\n                    {\n                        output.Completed = await service.EditPage(\n                        input.BlogId,\n                        input.PageId,\n                        input.UserName,\n                        input.Password,\n                        input.Page,\n                        input.Publish);\n                    }\n                    else\n                    {\n                        output.AddSecurityFault();\n                    }\n\n                    break;\n                case \"wp.deletePage\":\n                    if (permission.CanEditPages)\n                    {\n                        output.Completed = await service.DeletePage(\n                        input.BlogId,\n                        input.PageId,\n                        input.UserName,\n                        input.Password\n                        );\n                    }\n                    else\n                    {\n                        output.AddSecurityFault();\n                    }\n\n                    break;\n                case \"wp.getAuthors\":\n                    // Not implemented. \n                    throw new MetaWeblogException(\"10\", \"The method getAuthors is not implemented.\");\n                //output.Authors = this.GetAuthors(input.BlogID, input.UserName, input.Password);\n                //break;\n                case \"wp.getTags\":\n                    // Not implemented. \n                    throw new MetaWeblogException(\"10\", \"The method getTags is not implemented.\");\n                    //output.Keywords = this.GetKeywords(input.BlogID, input.UserName, input.Password);\n                    //break;\n            }\n\n\n            return output;\n\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.MetaWeblog/MetaWeblogRequestValidator.cs",
    "content": "﻿// Copyright (c) Source Tree Solutions, LLC. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.\n// Author:                  Joe Audette\n// Created:                 2016-02-06\n// Last Modified:           2016-02-15\n// \n\nusing System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Linq;\nusing System.Threading;\nusing System.Threading.Tasks;\n\n\nnamespace cloudscribe.MetaWeblog\n{\n    public class MetaWeblogRequestValidator : IMetaWeblogRequestValidator\n    {\n        public Task<bool> IsValid(MetaWeblogRequest request, CancellationToken cancellationToken)\n        {\n            if(string.IsNullOrEmpty(request.MethodName)) { return Task.FromResult(false); }\n\n            switch (request.MethodName)\n            {\n                case \"system.listMethods\":\n                    return Task.FromResult(true);\n                    \n                case \"wpcom.getFeatures\":\n                    return Task.FromResult(true);\n                    \n                case \"metaWeblog.newPost\":\n                    if(string.IsNullOrEmpty(request.BlogId)) { return Task.FromResult(false); }\n                    if(string.IsNullOrEmpty(request.Post.title)) { return Task.FromResult(false); }\n\n                    return Task.FromResult(true);\n\n                case \"metaWeblog.getPost\":\n                    //TODO: more checks\n\n                    return Task.FromResult(true);\n         \n                case \"metaWeblog.newMediaObject\":\n                case \"wp.uploadFile\":\n\n                    var requestedFileExtension = Path.GetExtension(request.MediaObject.name);\n                    //TODO: validate extension against white list of allowed extensions\n\n                    return Task.FromResult(true);\n\n                case \"metaWeblog.getCategories\":\n                case \"wp.getCategories\":\n\n\n                    return Task.FromResult(true);\n\n                case \"wp.newCategory\":\n\n\n                    return Task.FromResult(true);\n\n                case \"metaWeblog.getRecentPosts\":\n\n\n                    return Task.FromResult(true);\n\n                case \"blogger.getUsersBlogs\":\n                case \"metaWeblog.getUsersBlogs\":\n\n\n                    return Task.FromResult(true);\n\n                case \"wp.getUsersBlogs\":\n\n\n                    return Task.FromResult(true);\n\n                case \"metaWeblog.editPost\":\n                case \"blogger.deletePost\":\n                case \"wp.editPage\":\n                case \"wp.deletePage\":\n\n\n                    return Task.FromResult(true);\n\n                case \"wp.newPage\":\n\n\n                    return Task.FromResult(true);\n\n                case \"wp.getPage\":\n\n\n                    return Task.FromResult(true);\n\n                case \"wp.getPageList\":\n\n\n                    return Task.FromResult(true);\n\n                case \"wp.getPages\":\n\n\n                    return Task.FromResult(true);\n\n                case \"wp.getAuthors\":\n\n\n                    return Task.FromResult(true);\n\n                case \"wp.getTags\":\n\n\n                    return Task.FromResult(true);\n\n\n\n\n            }\n\n\n            return Task.FromResult(false);\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.MetaWeblog/MetaWeblogResult.cs",
    "content": "﻿\nusing cloudscribe.MetaWeblog.Models;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading.Tasks;\n\nnamespace cloudscribe.MetaWeblog\n{\n    public class MetaWeblogResult\n    {\n        public MetaWeblogResult()\n        {\n            Blogs = new List<BlogInfoStruct>();\n            Categories = new List<CategoryStruct>();\n            Keywords = new List<string>();\n            Posts = new List<PostStruct>();\n            Pages = new List<PageStruct>();\n            Authors = new List<AuthorStruct>();\n\n        }\n\n        public string Method { get; set; }\n\n       \n        public List<AuthorStruct> Authors { get; set; }\n\n        \n        public List<BlogInfoStruct> Blogs { get; set; }\n\n        \n        public List<CategoryStruct> Categories { get; set; }\n\n        /// <summary>\n        ///     Gets or sets a value indicating whether function call was completed and successful.  \n        ///     Used by metaWeblog.editPost and blogger.deletePost.\n        /// </summary>\n        public bool Completed { get; set; }\n\n        /// <summary>\n        ///     Gets or sets Fault Struct. Used by API to return error information\n        /// </summary>\n        public FaultStruct Fault { get; set; }\n\n        /// <summary>\n        ///     Gets or sets List of Tags.  Used by wp.getTags.\n        /// </summary>\n        public List<string> Keywords { get; set; }\n\n        \n        public MediaInfoStruct MediaInfo { get; set; }\n\n        \n        public PageStruct Page { get; set; }\n\n        /// <summary>\n        ///     Gets or sets Id of page that was just added.\n        /// </summary>\n        public string PageId { get; set; }\n\n        /// <summary>\n        ///     Gets or sets List of Page Structs\n        /// </summary>\n        public List<PageStruct> Pages { get; set; }\n\n        /// <summary>\n        ///     Gets or sets Metaweblog Post Struct. Used by metaWeblog.getPost\n        /// </summary>\n        public PostStruct Post { get; set; }\n\n        /// <summary>\n        ///     Gets or sets Id of post that was just added.  Used by metaWeblog.newPost\n        /// </summary>\n        public string PostId { get; set; }\n\n        /// <summary>\n        ///     Gets or sets List of Metaweblog Post Structs.  Used by metaWeblog.getRecentPosts\n        /// </summary>\n        public List<PostStruct> Posts { get; set; }\n\n        /// <summary>\n        ///     Gets or sets Id of Category that was just added.  Used by wp.newCategory\n        /// </summary>\n        public string CategoryId { get; set; }\n\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.MetaWeblog/MetaWeblogResultExtensions.cs",
    "content": "﻿using cloudscribe.MetaWeblog.Models;\n\nnamespace cloudscribe.MetaWeblog\n{\n    public static class MetaWeblogResultExtensions\n    {\n        public static MetaWeblogResult AddSecurityFault(this MetaWeblogResult result)\n        {\n            var faultStruct = new FaultStruct();\n            faultStruct.faultCode = \"11\"; // invalid access\n            faultStruct.faultString = \"Authentication Failed\";\n            result.Fault = faultStruct;\n\n            return result;\n        }\n\n        public static MetaWeblogResult AddValidatonFault(this MetaWeblogResult result)\n        {\n            var faultStruct = new FaultStruct();\n            faultStruct.faultCode = \"802\"; // invalid access\n            faultStruct.faultString = \"invalid request\";\n            result.Fault = faultStruct;\n\n            return result;\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.MetaWeblog/MetaWeblogResultFormatter.cs",
    "content": "﻿// Copyright (c) Source Tree Solutions, LLC. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.\n// Author:                  Joe Audette\n// Created:                 2016-02-04\n// Last Modified:           2016-02-17\n// \n\n\nusing System.Xml.Linq;\n\nnamespace cloudscribe.MetaWeblog\n{\n    public class MetaWeblogResultFormatter : IMetaWeblogResultFormatter\n    {\n        public XDocument Format(MetaWeblogResult metaWeblogResult)\n        {\n            var xml = new XDocument();\n            var methodResponse = new XElement(\"methodResponse\");\n            xml.Add(methodResponse);\n\n            if (!string.IsNullOrEmpty(metaWeblogResult.Fault.faultCode))\n            {\n                BuildFaultResponse(methodResponse, metaWeblogResult);\n                return xml;\n            }\n\n            var methodParams = new XElement(\"params\");\n            methodResponse.Add(methodParams);\n\n            \n\n            switch(metaWeblogResult.Method)\n            {\n                case \"system.listMethods\":\n                    BuildListMethodsResponse(methodParams, metaWeblogResult);\n                    break;\n\n                case \"wpcom.getFeatures\":\n                    BuildWPGetFeaturesResponse(methodParams, metaWeblogResult);\n                    break;\n\n                case \"metaWeblog.newPost\":\n                    BuildNewPostResponse(methodParams, metaWeblogResult);\n                    break;\n\n                case \"metaWeblog.getPost\":\n                    BuildGetPostResponse(methodParams, metaWeblogResult);\n                    break;\n\n                case \"metaWeblog.newMediaObject\":\n                case \"wp.uploadFile\":\n                    BuildMediaInfoResponse(methodParams, metaWeblogResult);\n                    break;\n\n                case \"metaWeblog.getCategories\":\n                case \"wp.getCategories\":\n                    BuildGetCategoriesResponse(methodParams, metaWeblogResult);\n                    break;\n\n                case \"wp.newCategory\":\n                    BuildNewCategoryResponse(methodParams, metaWeblogResult);\n                    break;\n\n                case \"metaWeblog.getRecentPosts\":\n                    BuildRecentPostsResponse(methodParams, metaWeblogResult);\n                    break;\n\n                case \"blogger.getUsersBlogs\":\n                case \"metaWeblog.getUsersBlogs\":\n                    BuildUserBlogsResponse(methodParams, metaWeblogResult);\n                    break;\n\n                case \"wp.getUsersBlogs\":\n                    BuildWPUserBlogsResponse(methodParams, metaWeblogResult);\n                    break;\n\n                case \"metaWeblog.editPost\":\n                case \"blogger.deletePost\":\n                case \"wp.editPage\":\n                case \"wp.deletePage\":\n                    BuildActionResultBoolResponse(methodParams, metaWeblogResult);\n                    break;\n\n                case \"wp.newPage\":\n                    BuildNewPageResponse(methodParams, metaWeblogResult);\n                    break;\n\n                case \"wp.getPage\":\n                    BuildGetPageResponse(methodParams, metaWeblogResult);\n                    break;\n\n                case \"wp.getPageList\":\n                    BuildWPPageListResponse(methodParams, metaWeblogResult);\n                    break;\n\n                case \"wp.getPages\":\n                    BuildWPGetPagesResponse(methodParams, metaWeblogResult);\n                    break;\n\n                case \"wp.getAuthors\":\n                    BuildGetAuthorsResponse(methodParams, metaWeblogResult);\n                    break;\n\n                case \"wp.getTags\":\n                    BuildGetTagsResponse(methodParams, metaWeblogResult);\n                    break;\n\n\n\n            }\n\n            return xml;\n\n        }\n\n        private void BuildGetTagsResponse(XElement methodParams, MetaWeblogResult metaWeblogResult)\n        {\n            var paramElement = new XElement(\"param\");\n            methodParams.Add(paramElement);\n            var valueElement = new XElement(\"value\");\n            var arrayElement = new XElement(\"array\");\n            var dataElement = new XElement(\"data\");\n            paramElement.Add(valueElement);\n            valueElement.Add(arrayElement);\n            arrayElement.Add(dataElement);\n\n            foreach (var keyword in metaWeblogResult.Keywords)\n            {\n                var v = new XElement(\"value\");\n                dataElement.Add(v);\n                var structElement = new XElement(\"struct\");\n                v.Add(structElement);\n\n                var IdElement\n                    = new XElement(\"member\",\n                    new XElement(\"name\", \"name\"),\n                    new XElement(\"value\",\n                    new XElement(\"string\", keyword)\n                    ) // end value\n                    ); // end member\n\n                structElement.Add(IdElement);\n                \n            }\n\n        }\n\n        private void BuildGetAuthorsResponse(XElement methodParams, MetaWeblogResult metaWeblogResult)\n        {\n            var paramElement = new XElement(\"param\");\n            methodParams.Add(paramElement);\n            var valueElement = new XElement(\"value\");\n            var arrayElement = new XElement(\"array\");\n            var dataElement = new XElement(\"data\");\n            paramElement.Add(valueElement);\n            valueElement.Add(arrayElement);\n            arrayElement.Add(dataElement);\n\n            foreach (var author in metaWeblogResult.Authors)\n            {\n                var v = new XElement(\"value\");\n                dataElement.Add(v);\n                var structElement = new XElement(\"struct\");\n                v.Add(structElement);\n\n                var IdElement\n                    = new XElement(\"member\",\n                    new XElement(\"name\", \"user_id\"),\n                    new XElement(\"value\",\n                    new XElement(\"string\", author.user_id)\n                    ) // end value\n                    ); // end member\n\n                structElement.Add(IdElement);\n\n                var lohginElement\n                    = new XElement(\"member\",\n                    new XElement(\"name\", \"user_login\"),\n                    new XElement(\"value\",\n                    new XElement(\"string\", author.user_login)\n                    ) //end value\n                    ); // end member\n\n                structElement.Add(lohginElement);\n\n                var emailElement\n                    = new XElement(\"member\",\n                    new XElement(\"name\", \"user_email\"),\n                    new XElement(\"value\",\n                    new XElement(\"string\", author.user_email)\n                    ) //end value\n                    ); // end member\n\n                structElement.Add(emailElement);\n                \n                var metaElement\n                    = new XElement(\"member\",\n                    new XElement(\"name\", \"meta_value\"),\n                    new XElement(\"value\",\n                    new XElement(\"string\", author.meta_value)\n                    ) //end value\n                    ); // end member\n\n                structElement.Add(metaElement);\n\n\n\n\n            }\n\n        }\n\n        private void BuildWPGetPagesResponse(XElement methodParams, MetaWeblogResult metaWeblogResult)\n        {\n            var paramElement = new XElement(\"param\");\n            methodParams.Add(paramElement);\n            var valueElement = new XElement(\"value\");\n            var arrayElement = new XElement(\"array\");\n            var dataElement = new XElement(\"data\");\n            paramElement.Add(valueElement);\n            valueElement.Add(arrayElement);\n            arrayElement.Add(dataElement);\n\n            foreach (var page in metaWeblogResult.Pages)\n            {\n                var v = new XElement(\"value\");\n                dataElement.Add(v);\n                var structElement = new XElement(\"struct\");\n                v.Add(structElement);\n\n                var blogIdElement\n                    = new XElement(\"member\",\n                    new XElement(\"name\", \"page_id\"),\n                    new XElement(\"value\",\n                    new XElement(\"string\", page.pageId)\n                    ) // end value\n                    ); // end member\n\n                structElement.Add(blogIdElement);\n\n                var pageNameElement\n                    = new XElement(\"member\",\n                    new XElement(\"name\", \"page_title\"),\n                    new XElement(\"value\",\n                    new XElement(\"string\", page.title)\n                    ) //end value\n                    ); // end member\n                \n                structElement.Add(pageNameElement);\n\n                var pageTitleElement\n                    = new XElement(\"member\",\n                    new XElement(\"name\", \"title\"),\n                    new XElement(\"value\",\n                    new XElement(\"string\", page.title)\n                    ) //end value\n                    ); // end member\n\n                structElement.Add(pageTitleElement);\n\n                var descElement\n                    = new XElement(\"member\",\n                    new XElement(\"name\", \"description\"),\n                    new XElement(\"value\",\n                    new XElement(\"string\", page.description)\n                    ) //end value\n                    ); // end member\n\n                structElement.Add(descElement);\n\n                var linkElement\n                    = new XElement(\"member\",\n                    new XElement(\"name\", \"link\"),\n                    new XElement(\"value\",\n                    new XElement(\"string\", page.link)\n                    ) //end value\n                    ); // end member\n\n                structElement.Add(linkElement);\n\n\n                var breaksMember =\n                new XElement(\"member\",\n                new XElement(\"name\", \"mt_convert_breaks\"),\n                new XElement(\"value\",\n                new XElement(\"string\", \"__default__\")\n                ) // end value\n                ); //end member\n\n                structElement.Add(breaksMember);\n\n                if (!string.IsNullOrEmpty(page.pageParentId))\n                {\n                    var ppiMember =\n                    new XElement(\"member\",\n                    new XElement(\"name\", \"wp_page_parent_id\"),\n                    new XElement(\"value\",\n                    new XElement(\"string\", page.pageParentId)\n                    ) // end value\n                    ); //end member\n\n                    structElement.Add(ppiMember);\n                }\n\n                //var parentTitleElement\n                //    = new XElement(\"member\",\n                //    new XElement(\"name\", \"wp_page_parent_title\"),\n                //    new XElement(\"value\",\n                //    new XElement(\"string\", page.parentTitle)\n                //    ) //end value\n                //    ); // end member\n\n                //structElement.Add(parentTitleElement);\n\n\n                if (!string.IsNullOrEmpty(page.pageOrder))\n                {\n                    var commentPolicyMember =\n                    new XElement(\"member\",\n                    new XElement(\"name\", \"wp_page_order\"),\n                    new XElement(\"value\",\n                    new XElement(\"string\", page.pageOrder)\n                    ) // end value\n                    ); //end member\n\n                    structElement.Add(commentPolicyMember);\n                }\n\n                if (!string.IsNullOrEmpty(page.published))\n                {\n                    var publishedMember =\n                    new XElement(\"member\",\n                    new XElement(\"name\", \"page_status\"),\n                    new XElement(\"value\",\n                    new XElement(\"string\", page.published)\n                    ) // end value\n                    ); //end member\n\n                    structElement.Add(publishedMember);\n                }\n\n                if (!string.IsNullOrEmpty(page.commentPolicy))\n                {\n                    var publishedMember =\n                    new XElement(\"member\",\n                    new XElement(\"name\", \"mt_allow_comments\"),\n                    new XElement(\"value\",\n                    new XElement(\"int\", page.commentPolicy)\n                    ) // end value\n                    ); //end member\n\n                    structElement.Add(publishedMember);\n                }\n\n\n\n\n\n\n            }\n\n        }\n\n        private void BuildWPPageListResponse(XElement methodParams, MetaWeblogResult metaWeblogResult)\n        {\n            var paramElement = new XElement(\"param\");\n            methodParams.Add(paramElement);\n            var valueElement = new XElement(\"value\");\n            var arrayElement = new XElement(\"array\");\n            var dataElement = new XElement(\"data\");\n            paramElement.Add(valueElement);\n            valueElement.Add(arrayElement);\n            arrayElement.Add(dataElement);\n\n            foreach (var page in metaWeblogResult.Pages)\n            {\n                var v = new XElement(\"value\");\n                dataElement.Add(v);\n                var structElement = new XElement(\"struct\");\n                v.Add(structElement);\n\n                var blogIdElement\n                    = new XElement(\"member\",\n                    new XElement(\"name\", \"page_id\"),\n                    new XElement(\"value\",\n                    new XElement(\"string\", page.pageId)\n                    ) // end value\n                    ); // end member\n                \n                structElement.Add(blogIdElement);\n\n                var blogNameElement\n                    = new XElement(\"member\",\n                    new XElement(\"name\", \"page_title\"),\n                    new XElement(\"value\",\n                    new XElement(\"string\", page.title)\n                    ) //end value\n                    ); // end member\n\n                structElement.Add(blogNameElement);\n                \n                var parentTitleElement\n                    = new XElement(\"member\",\n                    new XElement(\"name\", \"wp_page_parent_title\"),\n                    new XElement(\"value\",\n                    new XElement(\"string\", page.parentTitle)\n                    ) //end value\n                    ); // end member\n\n                structElement.Add(parentTitleElement);\n\n\n                \n\n            }\n\n        }\n\n        private void BuildGetPageResponse(XElement methodParams, MetaWeblogResult metaWeblogResult)\n        {\n            var paramElement = new XElement(\"param\");\n            methodParams.Add(paramElement);\n            var valueElement = new XElement(\"value\");\n            var structElement = new XElement(\"struct\");\n\n            paramElement.Add(valueElement);\n            valueElement.Add(structElement);\n\n\n            var postIdMember =\n                new XElement(\"member\",\n                new XElement(\"name\", \"page_id\"),\n                new XElement(\"value\",\n                new XElement(\"string\", metaWeblogResult.Page.pageId)\n                ) // end value\n                ); //end member\n\n            structElement.Add(postIdMember);\n\n            var postTitleMember =\n                new XElement(\"member\",\n                new XElement(\"name\", \"title\"),\n                new XElement(\"value\",\n                new XElement(\"string\", metaWeblogResult.Page.title)\n                ) // end value\n                ); //end member\n\n            structElement.Add(postTitleMember);\n\n            var postDescMember =\n                new XElement(\"member\",\n                new XElement(\"name\", \"description\"),\n                new XElement(\"value\",\n                new XElement(\"string\", metaWeblogResult.Page.description)\n                ) // end value\n                ); //end member\n\n            structElement.Add(postDescMember);\n\n            var postLinkMember =\n                new XElement(\"member\",\n                new XElement(\"name\", \"link\"),\n                new XElement(\"value\",\n                new XElement(\"string\", metaWeblogResult.Page.link)\n                ) // end value\n                ); //end member\n\n            structElement.Add(postLinkMember);\n\n            var breaksMember =\n                new XElement(\"member\",\n                new XElement(\"name\", \"mt_convert_breaks\"),\n                new XElement(\"value\",\n                new XElement(\"string\", \"__default__\")\n                ) // end value\n                ); //end member\n\n            structElement.Add(breaksMember);\n\n            if (!string.IsNullOrEmpty(metaWeblogResult.Page.pageParentId))\n            {\n                var slugMember =\n                new XElement(\"member\",\n                new XElement(\"name\", \"wp_page_parent_id\"),\n                new XElement(\"value\",\n                new XElement(\"string\", metaWeblogResult.Page.pageParentId)\n                ) // end value\n                ); //end member\n\n                structElement.Add(slugMember);\n            }\n\n            if (!string.IsNullOrEmpty(metaWeblogResult.Page.parentTitle))\n            {\n                var excerptMember =\n                new XElement(\"member\",\n                new XElement(\"name\", \"wp_page_parent_title\"),\n                new XElement(\"value\",\n                new XElement(\"string\", metaWeblogResult.Page.parentTitle)\n                ) // end value\n                ); //end member\n\n                structElement.Add(excerptMember);\n            }\n\n            if (!string.IsNullOrEmpty(metaWeblogResult.Page.pageOrder))\n            {\n                var commentPolicyMember =\n                new XElement(\"member\",\n                new XElement(\"name\", \"wp_page_order\"),\n                new XElement(\"value\",\n                new XElement(\"string\", metaWeblogResult.Page.pageOrder)\n                ) // end value\n                ); //end member\n\n                structElement.Add(commentPolicyMember);\n            }\n\n            if (!string.IsNullOrEmpty(metaWeblogResult.Page.published))\n            {\n                var publishedMember =\n                new XElement(\"member\",\n                new XElement(\"name\", \"page_status\"),\n                new XElement(\"value\",\n                new XElement(\"string\", metaWeblogResult.Page.published)\n                ) // end value\n                ); //end member\n\n                structElement.Add(publishedMember);\n            }\n\n            if (!string.IsNullOrEmpty(metaWeblogResult.Page.commentPolicy))\n            {\n                var publishedMember =\n                new XElement(\"member\",\n                new XElement(\"name\", \"mt_allow_comments\"),\n                new XElement(\"value\",\n                new XElement(\"int\", metaWeblogResult.Page.commentPolicy)\n                ) // end value\n                ); //end member\n\n                structElement.Add(publishedMember);\n            }\n\n           \n           \n        }\n\n        private void BuildNewPageResponse(XElement methodParams, MetaWeblogResult metaWeblogResult)\n        {\n            var newElement =\n                new XElement(\"param\",\n                new XElement(\"value\",\n                new XElement(\"string\", metaWeblogResult.PageId)\n                )// end value\n                ); // end member\n\n            methodParams.Add(newElement);\n        }\n\n        private void BuildActionResultBoolResponse(XElement methodParams, MetaWeblogResult metaWeblogResult)\n        {\n            var boolElement =\n                new XElement(\"param\",\n                new XElement(\"value\",\n                new XElement(\"boolean\", metaWeblogResult.Completed ? \"1\" : \"0\")\n                )// end value\n                ); // end member\n\n            methodParams.Add(boolElement);\n        }\n\n        private void BuildWPUserBlogsResponse(XElement methodParams, MetaWeblogResult metaWeblogResult)\n        {\n            var paramElement = new XElement(\"param\");\n            var valueElement = new XElement(\"value\");\n            var arrayElement = new XElement(\"array\");\n            var dataElement = new XElement(\"data\");\n            paramElement.Add(valueElement);\n            valueElement.Add(arrayElement);\n            arrayElement.Add(dataElement);\n\n            methodParams.Add(paramElement);\n\n            foreach (var blog in metaWeblogResult.Blogs)\n            {\n                var v = new XElement(\"value\");\n                dataElement.Add(v);\n                var structElement = new XElement(\"struct\");\n                v.Add(structElement);\n\n                var isAdminElement\n                    = new XElement(\"member\",\n                    new XElement(\"name\", \"isAdmin\"),\n                    new XElement(\"value\", \n                    new XElement(\"boolean\",\"1\")\n                    )\n                    );\n\n                structElement.Add(isAdminElement);\n\n                var urlElement\n                    = new XElement(\"member\",\n                    new XElement(\"name\", \"url\"),\n                    new XElement(\"value\",\n                    new XElement(\"string\", blog.url)\n                    ) // end value\n                    ); // end member\n\n                structElement.Add(urlElement);\n\n                var blogIdElement\n                    = new XElement(\"member\",\n                    new XElement(\"name\", \"blogid\"),\n                    new XElement(\"value\",\n                    new XElement(\"string\", blog.blogId)\n                    ) // end value\n                    ); // end member\n\n                structElement.Add(blogIdElement);\n\n                var blogNameElement\n                    = new XElement(\"member\",\n                    new XElement(\"name\", \"blogName\"),\n                    new XElement(\"value\",\n                    new XElement(\"string\", blog.blogName)\n                    ) //end value\n                    ); // end member\n\n                structElement.Add(blogNameElement);\n\n                if(!string.IsNullOrEmpty(blog.xmlrpcUrl))\n                {\n                    var rpcElement\n                    = new XElement(\"member\",\n                    new XElement(\"name\", \"xmlrpc\"),\n                    new XElement(\"value\",\n                    new XElement(\"string\", blog.xmlrpcUrl)\n                    ) //end value\n                    ); // end member\n\n                    structElement.Add(rpcElement);\n                }\n\n            }\n\n        }\n\n        private void BuildUserBlogsResponse(XElement methodParams, MetaWeblogResult metaWeblogResult)\n        {\n            var paramElement = new XElement(\"param\");\n            methodParams.Add(paramElement);\n            var valueElement = new XElement(\"value\");\n            var arrayElement = new XElement(\"array\");\n            var dataElement = new XElement(\"data\");\n            paramElement.Add(valueElement);\n            valueElement.Add(arrayElement);\n            arrayElement.Add(dataElement);\n\n            foreach (var blog in metaWeblogResult.Blogs)\n            {\n                var v = new XElement(\"value\");\n                dataElement.Add(v);\n                var structElement = new XElement(\"struct\");\n                v.Add(structElement);\n\n                var urlElement\n                    = new XElement(\"member\",\n                    new XElement(\"name\", \"url\"),\n                    new XElement(\"value\", blog.url)\n                    );\n\n                structElement.Add(urlElement);\n\n                var blogIdElement\n                    = new XElement(\"member\",\n                    new XElement(\"name\", \"blogid\"),\n                    new XElement(\"value\", blog.blogId)\n                    );\n\n                structElement.Add(blogIdElement);\n\n                var blogNameElement\n                    = new XElement(\"member\",\n                    new XElement(\"name\", \"blogName\"),\n                    new XElement(\"value\", blog.blogName)\n                    );\n\n                structElement.Add(blogNameElement);\n\n            }\n\n        }\n\n        private void BuildRecentPostsResponse(XElement methodParams, MetaWeblogResult metaWeblogResult)\n        {\n            var paramElement = new XElement(\"param\");\n            methodParams.Add(paramElement);\n            var valueElement = new XElement(\"value\");\n            var arrayElement = new XElement(\"array\");\n            var dataElement = new XElement(\"data\");\n            paramElement.Add(valueElement);\n            valueElement.Add(arrayElement);\n            arrayElement.Add(dataElement);\n\n            foreach (var post in metaWeblogResult.Posts)\n            {\n                var vElement = new XElement(\"value\");\n                dataElement.Add(vElement);\n                var structElement = new XElement(\"struct\");\n                vElement.Add(structElement);\n                \n                var memberElement =\n                        new XElement(\"member\",\n                        new XElement(\"name\", \"postid\"),\n                        new XElement(\"value\",\n                        new XElement(\"string\", post.postId)\n                        )// end value\n                        ); // end member\n\n                structElement.Add(memberElement);\n                \n                var dateCreatedElement =\n                        new XElement(\"member\",\n                        new XElement(\"name\", \"dateCreated\"),\n                        new XElement(\"value\",\n                        new XElement(\"string\", Utils.ConvertDatetoISO8601(post.postDate))\n                        )// end value\n                        ); // end member\n\n                structElement.Add(dateCreatedElement);\n\n                var titleElement =\n                        new XElement(\"member\",\n                        new XElement(\"name\", \"title\"),\n                        new XElement(\"value\",\n                        new XElement(\"string\", post.title)\n                        )// end value\n                        ); // end member\n\n                structElement.Add(titleElement);\n\n                var descElement =\n                        new XElement(\"member\",\n                        new XElement(\"name\", \"description\"),\n                        new XElement(\"value\",\n                        new XElement(\"string\", post.description)\n                        )// end value\n                        ); // end member\n\n                structElement.Add(descElement);\n\n                var linkElement =\n                        new XElement(\"member\",\n                        new XElement(\"name\", \"link\"),\n                        new XElement(\"value\",\n                        new XElement(\"string\", post.link)\n                        )// end value\n                        ); // end member\n\n                structElement.Add(linkElement);\n\n                if (!string.IsNullOrEmpty(post.slug))\n                {\n                    var slugElement =\n                        new XElement(\"member\",\n                        new XElement(\"name\", \"wp_slug\"),\n                        new XElement(\"value\",\n                        new XElement(\"string\", post.slug)\n                        )// end value\n                        ); // end member\n\n                    structElement.Add(slugElement);\n                }\n\n                \n                if (!string.IsNullOrEmpty(post.excerpt))\n                {\n                    var excerptElement =\n                        new XElement(\"member\",\n                        new XElement(\"name\", \"mt_excerpt\"),\n                        new XElement(\"value\",\n                        new XElement(\"string\", post.excerpt)\n                        )// end value\n                        ); // end member\n\n                    structElement.Add(excerptElement);\n                }\n\n                if (!string.IsNullOrEmpty(post.commentPolicy))\n                {\n                    var allowCommentsElement =\n                        new XElement(\"member\",\n                        new XElement(\"name\", \"mt_allow_comments\"),\n                        new XElement(\"value\",\n                        new XElement(\"string\", post.commentPolicy)\n                        )// end value\n                        ); // end member\n\n                    structElement.Add(allowCommentsElement);\n                }\n\n                if((post.tags != null) &&(post.tags.Count > 0))\n                {\n                    var tags = new string[post.tags.Count];\n                    for (var i = 0; i < post.tags.Count; i++)\n                    {\n                        tags[i] = post.tags[i];\n                    }\n\n                    var tagList = string.Join(\",\", tags);\n\n                    var tagElement =\n                        new XElement(\"member\",\n                        new XElement(\"name\", \"mt_keywords\"),\n                        new XElement(\"value\",\n                        new XElement(\"string\", tagList)\n                        )// end value\n                        ); // end member\n\n                    structElement.Add(tagElement);\n                }\n\n                var publishElement =\n                        new XElement(\"member\",\n                        new XElement(\"name\", \"publish\"),\n                        new XElement(\"value\",\n                        new XElement(\"boolean\", post.publish ? \"1\" : \"0\")\n                        )// end value\n                        ); // end member\n\n                structElement.Add(publishElement);\n\n                if ((post.categories != null) &&(post.categories.Count > 0))\n                {\n                    var mem = new XElement(\"member\");\n                    var nm = new XElement(\"name\", \"categories\");\n                    var v = new XElement(\"value\");\n                    var ar = new XElement(\"array\");\n                    var data = new XElement(\"data\");\n\n                    structElement.Add(mem);\n                    mem.Add(nm);\n                    mem.Add(v);\n                    v.Add(ar);\n                    ar.Add(data);\n\n                    foreach (var cat in post.categories)\n                    {\n                        var val =\n                            new XElement(\"value\",\n                            new XElement(\"string\", cat)\n                            );\n\n                        data.Add(val);\n\n                    }\n                }\n\n            }\n\n            \n        }\n\n        private void BuildNewCategoryResponse(XElement methodParams, MetaWeblogResult metaWeblogResult)\n        {\n            XElement newElement =\n                new XElement(\"param\",\n                new XElement(\"value\",\n                new XElement(\"string\", metaWeblogResult.CategoryId)\n                )//end value\n                )// end param\n                ;\n\n            methodParams.Add(newElement);\n        }\n\n        private void BuildGetCategoriesResponse(XElement methodParams, MetaWeblogResult metaWeblogResult)\n        {\n            var paramElement = new XElement(\"param\");\n            methodParams.Add(paramElement);\n            var valueElement = new XElement(\"value\");\n            var arrayElement = new XElement(\"array\");\n            var dataElement = new XElement(\"data\");\n            paramElement.Add(valueElement);\n            valueElement.Add(arrayElement);\n            arrayElement.Add(dataElement);\n\n            foreach (var category in metaWeblogResult.Categories)\n            {\n                var vElement = new XElement(\"value\");\n                dataElement.Add(vElement);\n                var structElement = new XElement(\"struct\");\n                vElement.Add(structElement);\n                if(!string.IsNullOrEmpty(category.description))\n                {\n                    var memberElement =\n                        new XElement(\"member\",\n                        new XElement(\"name\", \"description\"),\n                        new XElement(\"value\",\n                        new XElement(\"string\", category.description)\n                        )// end value\n                        ); // end member\n\n                    structElement.Add(memberElement);\n                }\n\n                var catIdElement =\n                        new XElement(\"member\",\n                        new XElement(\"name\", \"categoryId\"),\n                        new XElement(\"value\",\n                        new XElement(\"string\", category.id)\n                        )// end value\n                        ); // end member\n\n                structElement.Add(catIdElement);\n\n                if (!string.IsNullOrEmpty(category.parentId))\n                {\n                    var parentIdElement =\n                        new XElement(\"member\",\n                        new XElement(\"name\", \"parentId\"),\n                        new XElement(\"value\",\n                        new XElement(\"string\", category.parentId)\n                        )// end value\n                        ); // end member\n\n                    structElement.Add(parentIdElement);\n                }\n\n                var catTitleElement =\n                        new XElement(\"member\",\n                        new XElement(\"name\", \"title\"),\n                        new XElement(\"value\",\n                        new XElement(\"string\", category.title)\n                        )// end value\n                        ); // end member\n\n                structElement.Add(catTitleElement);\n\n                var catNameElement =\n                        new XElement(\"member\",\n                        new XElement(\"name\", \"categoryName\"),\n                        new XElement(\"value\",\n                        new XElement(\"string\", category.title)\n                        )// end value\n                        ); // end member\n\n                structElement.Add(catNameElement);\n\n                if (!string.IsNullOrEmpty(category.htmlUrl))\n                {\n                    var htmlUrlElement =\n                        new XElement(\"member\",\n                        new XElement(\"name\", \"htmlUrl\"),\n                        new XElement(\"value\",\n                        new XElement(\"string\", category.htmlUrl)\n                        )// end value\n                        ); // end member\n\n                    structElement.Add(htmlUrlElement);\n                }\n\n                if (!string.IsNullOrEmpty(category.rssUrl))\n                {\n                    var rssUrlElement =\n                        new XElement(\"member\",\n                        new XElement(\"name\", \"rssUrl\"),\n                        new XElement(\"value\",\n                        new XElement(\"string\", category.rssUrl)\n                        )// end value\n                        ); // end member\n\n                    structElement.Add(rssUrlElement);\n                }\n\n            }\n            \n            \n        }\n\n        private void BuildMediaInfoResponse(XElement methodParams, MetaWeblogResult metaWeblogResult)\n        {\n            XElement newElement =\n                new XElement(\"param\",\n                new XElement(\"value\",\n                new XElement(\"struct\",\n\n                new XElement(\"member\",\n                new XElement(\"name\", \"file\"),\n                new XElement(\"value\",\n                new XElement(\"string\", metaWeblogResult.MediaInfo.file)\n                ) // end value\n                ), // end member\n\n                new XElement(\"member\",\n                new XElement(\"name\", \"url\"),\n                new XElement(\"value\",\n                new XElement(\"string\", metaWeblogResult.MediaInfo.url)\n                ) // end value\n                ), // end member\n\n                new XElement(\"member\",\n                new XElement(\"name\", \"type\"),\n                new XElement(\"value\",\n                new XElement(\"string\", metaWeblogResult.MediaInfo.type)\n                ) // end value\n                ) // end member\n\n\n                )//end struct\n                )//end value\n                )// end param\n                ;\n\n            methodParams.Add(newElement);\n        }\n\n        private void BuildGetPostResponse(XElement methodParams, MetaWeblogResult metaWeblogResult)\n        {\n            var paramElement = new XElement(\"param\");\n            methodParams.Add(paramElement);\n            var valueElement = new XElement(\"value\");\n            var structElement = new XElement(\"struct\");\n\n            paramElement.Add(valueElement);\n            valueElement.Add(structElement);\n\n\n            var postIdMember = \n                new XElement(\"member\",\n                new XElement(\"name\", \"postid\"),\n                new XElement(\"value\",\n                new XElement(\"string\", metaWeblogResult.Post.postId)\n                ) // end value\n                ); //end member\n\n            structElement.Add(postIdMember);\n\n            var postTitleMember = \n                new XElement(\"member\",\n                new XElement(\"name\", \"title\"),\n                new XElement(\"value\",\n                new XElement(\"string\", metaWeblogResult.Post.title)\n                ) // end value\n                ); //end member\n\n            structElement.Add(postTitleMember);\n\n            var postDescMember =\n                new XElement(\"member\",\n                new XElement(\"name\", \"description\"),\n                new XElement(\"value\",\n                new XElement(\"string\", metaWeblogResult.Post.description)\n                ) // end value\n                ); //end member\n\n            structElement.Add(postDescMember);\n\n            var postLinkMember = \n                new XElement(\"member\",\n                new XElement(\"name\", \"link\"),\n                new XElement(\"value\",\n                new XElement(\"string\", metaWeblogResult.Post.link)\n                ) // end value\n                ); //end member\n\n            structElement.Add(postLinkMember);\n\n            if(!string.IsNullOrEmpty(metaWeblogResult.Post.slug))\n            {\n                var slugMember =\n                new XElement(\"member\",\n                new XElement(\"name\", \"wp_slug\"),\n                new XElement(\"value\",\n                new XElement(\"string\", metaWeblogResult.Post.slug)\n                ) // end value\n                ); //end member\n\n                structElement.Add(slugMember);\n            }\n\n            if (!string.IsNullOrEmpty(metaWeblogResult.Post.excerpt))\n            {\n                var excerptMember =\n                new XElement(\"member\",\n                new XElement(\"name\", \"mt_excerpt\"),\n                new XElement(\"value\",\n                new XElement(\"string\", metaWeblogResult.Post.excerpt)\n                ) // end value\n                ); //end member\n\n                structElement.Add(excerptMember);\n            }\n\n            if (!string.IsNullOrEmpty(metaWeblogResult.Post.commentPolicy))\n            {\n                var commentPolicyMember =\n                new XElement(\"member\",\n                new XElement(\"name\", \"mt_allow_comments\"),\n                new XElement(\"value\",\n                new XElement(\"int\", metaWeblogResult.Post.commentPolicy)\n                ) // end value\n                ); //end member\n\n                structElement.Add(commentPolicyMember);\n            }\n\n            var dateCreatedMember =\n                new XElement(\"member\",\n                new XElement(\"name\", \"dateCreated\"),\n                new XElement(\"value\",\n                new XElement(\"dateTime.iso8601\", Utils.ConvertDatetoISO8601(metaWeblogResult.Post.postDate))\n                ) // end value\n                ); //end member\n\n            structElement.Add(dateCreatedMember);\n\n            var publishMember =\n                new XElement(\"member\",\n                new XElement(\"name\", \"publish\"),\n                new XElement(\"value\",\n                new XElement(\"boolean\", metaWeblogResult.Post.publish ? \"1\" : \"0\")\n                ) // end value\n                ); //end member\n\n            structElement.Add(publishMember);\n\n            if((metaWeblogResult.Post.tags != null) &&(metaWeblogResult.Post.tags.Count > 0))\n            {\n                var tags = new string[metaWeblogResult.Post.tags.Count];\n                for (var i = 0; i < metaWeblogResult.Post.tags.Count; i++)\n                {\n                    tags[i] = metaWeblogResult.Post.tags[i];\n                }\n\n                var tagList = string.Join(\",\", tags);\n\n                var tagsMember =\n                new XElement(\"member\",\n                new XElement(\"name\", \"mt_keywords\"),\n                new XElement(\"value\",\n                new XElement(\"string\", tagList)\n                ) // end value\n                ); //end member\n\n                structElement.Add(tagsMember);\n\n            }\n\n            if ((metaWeblogResult.Post.categories != null) &&(metaWeblogResult.Post.categories.Count > 0))\n            {\n                var categoriesMember = new XElement(\"member\");\n                structElement.Add(categoriesMember);\n                var catName = new XElement(\"name\", \"categories\");\n                categoriesMember.Add(catName);\n\n                var catValueMember = new XElement(\"value\");\n                categoriesMember.Add(catValueMember);\n\n                var catArrayMember = new XElement(\"array\");\n                catValueMember.Add(catArrayMember);\n\n                var catDataMember = new XElement(\"data\");\n                catArrayMember.Add(catDataMember);\n\n                foreach (var cat in metaWeblogResult.Post.categories)\n                {\n                    var v = new XElement(\"value\",\n                        new XElement(\"string\", cat)\n                        );\n\n                    catDataMember.Add(v);\n                }\n\n            }\n\n            \n            \n\n        }\n\n        \n\n        private void BuildNewPostResponse(XElement methodParams, MetaWeblogResult metaWeblogResult)\n        {\n            XElement newElement =\n                new XElement(\"param\",\n                new XElement(\"value\",\n                new XElement(\"string\", metaWeblogResult.PostId)\n                )//end value\n                )// end param\n                ;\n\n            methodParams.Add(newElement);\n        }\n\n        private void BuildWPGetFeaturesResponse(XElement methodParams, MetaWeblogResult metaWeblogResult)\n        {\n            XElement newElement =\n                new XElement(\"param\",\n                new XElement(\"value\",\n                new XElement(\"array\",\n                new XElement(\"data\",\n\n                new XElement(\"value\",\n                new XElement(\"struct\",\n                new XElement(\"member\",\n                new XElement(\"name\", \"videopress_enabled\"),\n                new XElement(\"value\",\n                new XElement(\"boolean\",\"0\")\n                )// end value\n                )//end member\n                )//end struct\n                )//end value\n\n\n                )// end data\n                )//end array\n                )//end value\n                )// end param\n                ;\n\n            methodParams.Add(newElement);\n        }\n\n        private void BuildListMethodsResponse(XElement methodParams, MetaWeblogResult metaWeblogResult)\n        {\n            XElement newElement = \n                new XElement(\"param\",\n                new XElement(\"value\",\n                new XElement(\"array\",\n                new XElement(\"data\",\n\n                // these are not really all supported but I'm listing them as supported to see which\n                // ones are actually called by blogging clients\n                // like the Wordpress iPad app, BlogPress, and Blogsy\n\n                new XElement(\"value\",\n                new XElement(\"string\", \"system.multicall\")\n                ), //end value\n\n                new XElement(\"value\",\n                new XElement(\"string\", \"system.listMethods\")\n                ) ,//end value\n\n                new XElement(\"value\",\n                new XElement(\"string\", \"system.getCapabilities\")\n                ), //end value\n\n                new XElement(\"value\",\n                new XElement(\"string\", \"pingback.extensions.getPingbacks\")\n                ), //end value\n\n                new XElement(\"value\",\n                new XElement(\"string\", \"pingback.ping\")\n                ), //end value\n\n                new XElement(\"value\",\n                new XElement(\"string\", \"mt.publishPost\")\n                ), //end value\n\n                new XElement(\"value\",\n                new XElement(\"string\", \"mt.getTrackbackPings\")\n                ), //end value\n\n                new XElement(\"value\",\n                new XElement(\"string\", \"mt.supportedTextFilters\")\n                ), //end value\n\n                new XElement(\"value\",\n                new XElement(\"string\", \"mt.supportedMethods\")\n                ), //end value\n\n                new XElement(\"value\",\n                new XElement(\"string\", \"mt.setPostCategories\")\n                ), //end value\n\n                new XElement(\"value\",\n                new XElement(\"string\", \"mt.getPostCategories\")\n                ), //end value\n\n                new XElement(\"value\",\n                new XElement(\"string\", \"mt.getRecentPostTitles\")\n                ), //end value\n\n                new XElement(\"value\",\n                new XElement(\"string\", \"mt.getCategoryList\")\n                ), //end value\n\n                new XElement(\"value\",\n                new XElement(\"string\", \"metaWeblog.getUsersBlogs\")\n                ), //end value\n\n                new XElement(\"value\",\n                new XElement(\"string\", \"metaWeblog.deletePost\")\n                ), //end value\n\n                new XElement(\"value\",\n                new XElement(\"string\", \"metaWeblog.newMediaObject\")\n                ), //end value\n\n                new XElement(\"value\",\n                new XElement(\"string\", \"metaWeblog.setTemplate\")\n                ), //end value\n\n                new XElement(\"value\",\n                new XElement(\"string\", \"metaWeblog.getTemplate\")\n                ), //end value\n\n                new XElement(\"value\",\n                new XElement(\"string\", \"metaWeblog.getCategories\")\n                ), //end value\n\n                new XElement(\"value\",\n                new XElement(\"string\", \"metaWeblog.getRecentPosts\")\n                ), //end value\n\n                new XElement(\"value\",\n                new XElement(\"string\", \"metaWeblog.getPost\")\n                ), //end value\n\n                new XElement(\"value\",\n                new XElement(\"string\", \"metaWeblog.editPost\")\n                ), //end value\n\n                new XElement(\"value\",\n                new XElement(\"string\", \"metaWeblog.newPost\")\n                ), //end value\n\n                new XElement(\"value\",\n                new XElement(\"string\", \"blogger.deletePost\")\n                ), //end value\n\n                new XElement(\"value\",\n                new XElement(\"string\", \"blogger.editPost\")\n                ), //end value\n\n                new XElement(\"value\",\n                new XElement(\"string\", \"blogger.newPost\")\n                ), //end value\n\n                new XElement(\"value\",\n                new XElement(\"string\", \"blogger.setTemplate\")\n                ), //end value\n\n                new XElement(\"value\",\n                new XElement(\"string\", \"blogger.getTemplate\")\n                ), //end value\n\n                new XElement(\"value\",\n                new XElement(\"string\", \"blogger.getRecentPosts\")\n                ), //end value\n\n                new XElement(\"value\",\n                new XElement(\"string\", \"blogger.getPost\")\n                ), //end value\n\n                new XElement(\"value\",\n                new XElement(\"string\", \"blogger.getUserInfo\")\n                ), //end value\n\n                new XElement(\"value\",\n                new XElement(\"string\", \"blogger.getUsersBlogs\")\n                ), //end value\n\n                new XElement(\"value\",\n                new XElement(\"string\", \"wp.newPage\")\n                ), //end value\n\n                new XElement(\"value\",\n                new XElement(\"string\", \"wp.getPageList\")\n                ), //end value\n\n                new XElement(\"value\",\n                new XElement(\"string\", \"wp.getPages\")\n                ), //end value\n\n                new XElement(\"value\",\n                new XElement(\"string\", \"wp.getPage\")\n                ), //end value\n\n                new XElement(\"value\",\n                new XElement(\"string\", \"wp.editPage\")\n                ), //end value\n\n                new XElement(\"value\",\n                new XElement(\"string\", \"wp.deletePage\")\n                ), //end value\n\n                new XElement(\"value\",\n                new XElement(\"string\", \"wp.getUsersBlogs\")\n                ), //end value\n\n                new XElement(\"value\",\n                new XElement(\"string\", \"wp.getCategories\")\n                ), //end value\n\n                new XElement(\"value\",\n                new XElement(\"string\", \"wp.deleteCategory\")\n                ), //end value\n\n                new XElement(\"value\",\n                new XElement(\"string\", \"wp.newCategory\")\n                ), //end value\n\n                new XElement(\"value\",\n                new XElement(\"string\", \"wp.suggestCategories\")\n                ), //end value\n\n                new XElement(\"value\",\n                new XElement(\"string\", \"wp.getTags\")\n                ), //end value\n\n                new XElement(\"value\",\n                new XElement(\"string\", \"wp.uploadFile\")\n                ), //end value\n\n                new XElement(\"value\",\n                new XElement(\"string\", \"wp.getCommentStatusList\")\n                ), //end value\n\n                new XElement(\"value\",\n                new XElement(\"string\", \"wp.newComment\")\n                ), //end value\n\n                new XElement(\"value\",\n                new XElement(\"string\", \"wp.editComment\")\n                ), //end value\n\n                new XElement(\"value\",\n                new XElement(\"string\", \"wp.deleteComment\")\n                ), //end value\n\n                new XElement(\"value\",\n                new XElement(\"string\", \"wp.getComments\")\n                ), //end value\n\n                new XElement(\"value\",\n                new XElement(\"string\", \"wp.getComment\")\n                ), //end value\n\n                new XElement(\"value\",\n                new XElement(\"string\", \"wp.getCommentCount\")\n                ), //end value\n\n                new XElement(\"value\",\n                new XElement(\"string\", \"wp.setOptions\")\n                ), //end value\n\n                new XElement(\"value\",\n                new XElement(\"string\", \"wp.getOptions\")\n                ), //end value\n\n                new XElement(\"value\",\n                new XElement(\"string\", \"wp.getPageTemplates\")\n                ), //end value\n\n                new XElement(\"value\",\n                new XElement(\"string\", \"wp.getPageStatusList\")\n                ), //end value\n\n                new XElement(\"value\",\n                new XElement(\"string\", \"wp.getPostStatusList\")\n                ), //end value\n\n                new XElement(\"value\",\n                new XElement(\"string\", \"wp.getAuthors\")\n                ), //end value\n\n                new XElement(\"value\",\n                new XElement(\"string\", \"wp.getMediaLibrary\")\n                ), //end value\n\n                new XElement(\"value\",\n                new XElement(\"string\", \"wp.getMediaItem\")\n                ) //end value\n\n                )// end data\n                )//end array\n                )//end value\n                )// end param\n\n                ;\n\n            methodParams.Add(newElement);\n        }\n\n        private void BuildFaultResponse(XElement methodResponse, MetaWeblogResult metaWeblogResult)\n        {\n            XElement faultElement = \n                new XElement(\"fault\",\n                new XElement(\"value\",\n                new XElement(\"struct\",\n\n                new XElement(\"member\",\n                new XElement(\"name\",\"faultCode\"),\n                new XElement(\"value\",\n                new XElement(\"int\", metaWeblogResult.Fault.faultCode)\n                )// end value\n                )// end member\n                ,\n                new XElement(\"member\",\n                new XElement(\"name\", \"faultString\"),\n                new XElement(\"value\",\n                new XElement(\"string\", metaWeblogResult.Fault.faultString)\n                )// end value\n                ) //end member\n\n                )//end struct\n                )//end value\n                );\n\n            methodResponse.Add(faultElement);\n\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.MetaWeblog/MetaWeblogSecurityResult.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading.Tasks;\n\nnamespace cloudscribe.MetaWeblog\n{\n    public class MetaWeblogSecurityResult\n    {\n        public MetaWeblogSecurityResult(\n            string displayName,\n            string blogId,\n            bool isAuthenticated, \n            bool canEditPosts,\n            bool canEditPages\n            )\n        {\n            this.displayName = displayName;\n            this.blogId = blogId;\n            this.isAuthenticated = isAuthenticated;\n            this.canEditPosts = canEditPosts;\n            this.canEditPages = canEditPages;\n        }\n\n        private string displayName = string.Empty;\n        private string blogId = string.Empty;\n        private bool isAuthenticated = false;\n        private bool canEditPosts = false;\n        private bool canEditPages = false;\n\n        public string DisplayName\n        {\n            get { return displayName; }\n        }\n\n        public string BlogId\n        {\n            get { return blogId; }\n        }\n\n\n        public bool IsAuthenticated\n        {\n            get { return isAuthenticated; }\n        }\n\n        public bool CanEditPosts\n        {\n            get { return canEditPosts; }\n        }\n\n        public bool CanEditPages\n        {\n            get { return canEditPages; }\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.MetaWeblog/Models/ApiOptions.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading.Tasks;\n\nnamespace cloudscribe.MetaWeblog.Models\n{\n    public class ApiOptions\n    {\n        /// <summary>\n        /// only for debugging purposes would you ever set either of these true\n        /// don't leave it as true\n        /// </summary>\n        public bool DumpRequestXmlToDisk { get; set; } = false;\n        public bool DumpResponseXmlToDisk { get; set; } = false;\n        public string AppRootDumpFolderVPath { get; set; } = \"/cloudscribe_config/data_xml/metaweblogxmldumps/\";\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.MetaWeblog/Models/AuthorStruct.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading.Tasks;\n\nnamespace cloudscribe.MetaWeblog.Models\n{\n    /// <summary>\n    /// wp Author struct\n    /// </summary>\n    public struct AuthorStruct\n    {\n        \n        public string display_name;\n        public string meta_value;\n        public string user_email;\n        public string user_id;\n        public string user_login;\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.MetaWeblog/Models/BlogInfoStruct.cs",
    "content": "﻿\n\nnamespace cloudscribe.MetaWeblog.Models\n{\n    /// <summary>\n    /// MetaWeblog BlogInfo struct\n    ///     returned as an array from getUserBlogs\n    /// </summary>\n    public struct BlogInfoStruct\n    {\n        public string blogId;\n        public string blogName;\n        public string url;\n        public string xmlrpcUrl;\n\n        //had these in mojoportal not sure we will use them\n        public string pageEditRoles;\n        public string moduleEditRoles;\n        public int editUserId;\n        public int pageId;\n\n        \n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.MetaWeblog/Models/CategoryStruct.cs",
    "content": "﻿\n\nnamespace cloudscribe.MetaWeblog.Models\n{\n    /// <summary>\n    /// MetaWeblog Category struct\n    ///     returned as an array from GetCategories\n    /// </summary>\n    public struct CategoryStruct\n    {\n        public string description;\n        public string htmlUrl;\n        public string id;\n        public string parentId;\n        public string rssUrl;\n        public string title;\n\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.MetaWeblog/Models/FaultStruct.cs",
    "content": "﻿\n\nnamespace cloudscribe.MetaWeblog.Models\n{\n    /// <summary>\n    /// MetaWeblog Fault struct\n    ///     returned when error occurs\n    /// </summary>\n    public struct FaultStruct\n    {\n        public string faultCode;\n        public string faultString;\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.MetaWeblog/Models/MediaInfoStruct.cs",
    "content": "﻿\n\nnamespace cloudscribe.MetaWeblog.Models\n{\n    /// <summary>\n    /// MetaWeblog MediaInfo struct\n    ///     returned from NewMediaObject call\n    /// </summary>\n    public struct MediaInfoStruct\n    {\n        /// <summary>\n        ///     Url that points to Saved MediaObejct\n        /// </summary>\n        public string url;\n\n        public string file;\n\n        /// <summary>\n        ///     Type of file\n        /// </summary>\n        public string type;\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.MetaWeblog/Models/MediaObjectStruct.cs",
    "content": "﻿\n\nnamespace cloudscribe.MetaWeblog.Models\n{\n    /// <summary>\n    /// MetaWeblog MediaObject struct\n    ///     passed in the newMediaObject call\n    /// </summary>\n    public struct MediaObjectStruct\n    {\n        /// <summary>\n        ///     Media object bytes\n        /// </summary>\n        public byte[] bytes;\n\n        /// <summary>\n        ///     Name of media object (filename)\n        /// </summary>\n        public string name;\n\n        /// <summary>\n        ///     Type of file\n        /// </summary>\n        public string type;\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.MetaWeblog/Models/MetaWeblogException.cs",
    "content": "﻿using System;\n\nnamespace cloudscribe.MetaWeblog.Models\n{\n    public class MetaWeblogException : Exception\n    {\n        /// <summary>\n        /// Initializes a new instance of the <see cref=\"MetaWeblogException\"/> class. \n        /// Constructor to load properties\n        /// </summary>\n        /// <param name=\"code\">\n        /// Fault code to be returned in Fault Response\n        /// </param>\n        /// <param name=\"message\">\n        /// Message to be returned in Fault Response\n        /// </param>\n        public MetaWeblogException(string code, string message): base(message)\n        {\n            this.Code = code;\n        }\n\n\n        /// <summary>\n        ///     Gets code is actually for Fault Code.  It will be passed back in the \n        ///     response along with the error message.\n        /// </summary>\n        public string Code { get; private set; }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.MetaWeblog/Models/PageStruct.cs",
    "content": "﻿using System;\n\n\nnamespace cloudscribe.MetaWeblog.Models\n{\n    /// <summary>\n    /// wp Page Struct\n    /// </summary> \n    public struct PageStruct\n    {\n        /// <summary>\n        ///     Content of Blog Post\n        /// </summary>\n        public string description;\n\n        /// <summary>\n        ///     Link to Blog Post\n        /// </summary>\n        public string link;\n\n        //wp_slug\n        public string slug;\n\n        /// <summary>\n        ///     Convert Breaks\n        /// </summary>\n        public string mt_convert_breaks;\n\n        /// <summary>\n        ///     Page keywords\n        /// </summary>\n        public string mt_keywords;\n\n        /// <summary>\n        ///     Display date of Blog Post (DateCreated)\n        /// </summary>\n        public DateTime pageDate;\n\n        public DateTime pageUtcDate;\n\n        /// <summary>\n        ///     PostID Guid in string format\n        /// </summary>\n        public string pageId;\n\n        /// <summary>\n        ///     Page Parent ID\n        /// </summary>\n        public string pageParentId;\n\n        public string parentTitle;\n\n        //string page_status\n\n        /// <summary>\n        ///     PageOrder\n        /// </summary>\n        public string pageOrder;\n\n        /// <summary>\n        ///     Title of Blog Post\n        /// </summary>\n        public string title;\n\n        /// <summary>\n        ///     CommentPolicy (Allow/Deny)\n        /// </summary>\n        public string commentPolicy;\n\n\n        public string published; //publish or draft\n\n        //http://codex.wordpress.org/XML-RPC_wp\n        //TODO: implement support for custom fields\n        // ? will live writer round trip these?\n        // we need a place to store the module id of the hmtl item\n        //array custom_fields : struct string id string key string value\n\n        //public string moduleId;\n\n        //public string itemId;\n\n        public string pageEditRoles;\n\n        public string moduleEditRoles;\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.MetaWeblog/Models/PostStruct.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\n\n\nnamespace cloudscribe.MetaWeblog.Models\n{\n    /// <summary>\n    /// MetaWeblog Post struct\n    ///     used in newPost, editPost, getPost, recentPosts\n    ///     not all properties are used everytime.\n    /// </summary>\n    public struct PostStruct\n    {\n        /// <summary>\n        ///     wp_author_id\n        /// </summary>\n        public string author;\n\n        /// <summary>\n        ///     List of Categories assigned for Blog Post\n        /// </summary>\n        public List<string> categories;\n\n        /// <summary>\n        ///     CommentPolicy (Allow/Deny)\n        ///     this would only be used on outgoing structs to indicate to the client\n        ///     whether comments are allowed\n        /// </summary>\n        public string commentPolicy;\n\n        /// <summary>\n        ///     Content of Blog Post\n        /// </summary>\n        public string description;\n\n        /// <summary>\n        ///     Excerpt\n        /// </summary>\n        public string excerpt;\n\n        /// <summary>\n        ///     Link to Blog Post\n        ///     this would only be populated on outgoing structs\n        ///     we pass this to the cient, the client doesn't pass it to us\n        /// </summary>\n        public string link;\n\n        /// <summary>\n        ///     Display date of Blog Post (DateCreated)\n        /// </summary>\n        public DateTime postDate;\n\n        //public DateTime dateCreated;\n\n        /// <summary>\n        ///     PostID Guid in string format\n        /// </summary>\n        public string postId;\n\n        /// <summary>\n        ///     Whether the Post is published or not.\n        /// </summary>\n        public bool publish;\n\n        /// <summary>\n        ///     Slug of post\n        /// </summary>\n        public string slug;\n\n        /// <summary>\n        ///     List of Tags assigned for Blog Post\n        ///     \n        ///     cloudscribe.SimpleContent is not currently supporting tags as a separate concept from categories\n        ///     caregories are essentially similar to tags\n        ///     tags maps to wordpress keywords, I'm guessin that was once upon a time used to populate\n        ///     meta but has been ignored and devalued by search engines for many years so\n        ///     nobody does that anymore afaik\n        /// </summary>\n        public List<string> tags;\n\n        /// <summary>\n        ///     Title of Blog Post\n        /// </summary>\n        public string title;\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.MetaWeblog/Models/UserInfoStruct.cs",
    "content": "﻿\nnamespace cloudscribe.MetaWeblog.Models\n{\n    /// <summary>\n    /// MetaWeblog UserInfo struct\n    /// returned from GetUserInfo call\n    /// </summary>\n    /// <remarks>\n    /// Not used currently, but here for completeness.\n    /// </remarks>\n    public class UserInfoStruct\n    {\n        /// <summary>\n        /// User Name Proper\n        /// </summary>\n        public string nickname;\n\n        /// <summary>\n        /// Login ID\n        /// </summary>\n        public string userID;\n\n        /// <summary>\n        /// Url to User Blog?\n        /// </summary>\n        public string url;\n\n        /// <summary>\n        /// Email address of User\n        /// </summary>\n        public string email;\n\n        /// <summary>\n        /// User LastName\n        /// </summary>\n        public string lastName;\n\n        /// <summary>\n        /// User First Name\n        /// </summary>\n        public string firstName;\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.MetaWeblog/README.md",
    "content": "# cloudscribe.MetaWeblog\n\n[![NuGet](https://img.shields.io/nuget/v/cloudscribe.MetaWeblog.svg)](https://www.nuget.org/packages/cloudscribe.MetaWeblog)\n[![License: Apache-2.0](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://opensource.org/licenses/Apache-2.0)\n\nMetaWeblog API implementation for cloudscribe SimpleContent, enabling integration with blogging clients.\n\n## Installation\n\n```shell\nInstall-Package cloudscribe.MetaWeblog\n```\n\n## Usage\n\nAdd this package to your ASP.NET Core project to enable MetaWeblog API support for SimpleContent.\n\n## Contributing\n\nContributions are welcome! Please see the [contributing guidelines](https://github.com/cloudscribe/cloudscribe.SimpleContent/blob/main/CONTRIBUTING.md).\n\n## License\n\nLicensed under the Apache 2.0 License. See the [LICENSE](https://github.com/cloudscribe/cloudscribe.SimpleContent/blob/main/LICENSE) file for details.\n"
  },
  {
    "path": "src/cloudscribe.MetaWeblog/ServiceCollectionExtensions.cs",
    "content": "﻿using cloudscribe.MetaWeblog;\nusing cloudscribe.MetaWeblog.Models;\nusing Microsoft.Extensions.Configuration;\nusing Microsoft.Extensions.DependencyInjection.Extensions;\n\nnamespace Microsoft.Extensions.DependencyInjection\n{\n    public static class ServiceCollectionExtensions\n    {\n        public static IServiceCollection AddCloudscribeMetaWeblog(\n            this IServiceCollection services,\n            IConfiguration configuration = null\n            )\n        {\n            if (configuration != null)\n            {\n                services.Configure<ApiOptions>(configuration);\n            }\n            else\n            {\n                services.TryAddSingleton<ApiOptions, ApiOptions>();\n            }\n\n            services.TryAddScoped<IMetaWeblogRequestParser, MetaWeblogRequestParser>();\n            services.TryAddScoped<IMetaWeblogRequestProcessor, MetaWeblogRequestProcessor>();\n            services.TryAddScoped<IMetaWeblogResultFormatter, MetaWeblogResultFormatter>();\n            services.TryAddScoped<IMetaWeblogRequestValidator, MetaWeblogRequestValidator>();\n\n            return services;\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.MetaWeblog/Utils.cs",
    "content": "﻿\nusing System;\nusing System.Collections.Generic;\nusing System.Globalization;\nusing System.Linq;\nusing System.Threading.Tasks;\n\nnamespace cloudscribe.MetaWeblog\n{\n    public static class Utils\n    {\n        public static string GetDateTimeStringForFileName()\n        {\n            return GetDateTimeStringForFileName(false);\n        }\n\n        public static string GetDateTimeStringForFileName(bool includeMiliseconds)\n        {\n            DateTime d = DateTime.Now;\n            string dateString = d.Year.ToInvariantString();\n\n            string monthString = d.Month.ToInvariantString();\n            if (monthString.Length == 1)\n            {\n                monthString = \"0\" + monthString;\n            }\n            string dayString = d.Day.ToInvariantString();\n            if (dayString.Length == 1)\n            {\n                dayString = \"0\" + dayString;\n            }\n            string hourString = d.Hour.ToInvariantString();\n            if (hourString.Length == 1)\n            {\n                hourString = \"0\" + hourString;\n            }\n\n            string minuteString = d.Minute.ToInvariantString();\n            if (minuteString.Length == 1)\n            {\n                minuteString = \"0\" + minuteString;\n            }\n\n            string secondString = d.Second.ToInvariantString();\n            if (secondString.Length == 1)\n            {\n                secondString = \"0\" + secondString;\n            }\n\n            dateString\n                = dateString\n                + monthString\n                + dayString\n                + hourString\n                + minuteString + secondString;\n\n            if (includeMiliseconds)\n            {\n                return dateString + d.Millisecond.ToInvariantString();\n            }\n\n            return dateString;\n        }\n\n\n        public static string ToInvariantString(this int i)\n        {\n            return i.ToString(CultureInfo.InvariantCulture);\n\n        }\n\n        public static string ConvertDatetoISO8601(DateTime date)\n        {\n            var temp = string.Format(\n                \"{0}{1}{2}T{3}:{4}:{5}\",\n                date.Year,\n                date.Month.ToString().PadLeft(2, '0'),\n                date.Day.ToString().PadLeft(2, '0'),\n                date.Hour.ToString().PadLeft(2, '0'),\n                date.Minute.ToString().PadLeft(2, '0'),\n                date.Second.ToString().PadLeft(2, '0'));\n            return temp;\n        }\n\n        //iso8601 often come in slightly different flavours rather than the standard \"s\" that string.format supports.\n        //http://stackoverflow.com/a/17752389\n        //static readonly string[] formats = { \n        //    // Basic formats\n        //    \"yyyyMMddTHHmmsszzz\",\n        //    \"yyyyMMddTHHmmsszz\",\n        //    \"yyyyMMddTHHmmssZ\",\n        //    // Extended formats\n        //    \"yyyy-MM-ddTHH:mm:sszzz\",\n        //    \"yyyy-MM-ddTHH:mm:sszz\",\n        //    \"yyyy-MM-ddTHH:mm:ssZ\",\n        //    \"yyyyMMddTHH:mm:ss:zzz\",\n        //    \"yyyyMMddTHH:mm:ss:zz\",\n        //    \"yyyyMMddTHH:mm:ss:Z\",\n        //    \"yyyyMMddTHH:mm:ss\",\n        //    // All of the above with reduced accuracy\n        //    \"yyyyMMddTHHmmzzz\",\n        //    \"yyyyMMddTHHmmzz\",\n        //    \"yyyyMMddTHHmmZ\",\n        //    \"yyyy-MM-ddTHH:mmzzz\",\n        //    \"yyyy-MM-ddTHH:mmzz\",\n        //    \"yyyy-MM-ddTHH:mmZ\",\n        //    // Accuracy reduced to hours\n        //    \"yyyyMMddTHHzzz\",\n        //    \"yyyyMMddTHHzz\",\n        //    \"yyyyMMddTHHZ\",\n        //    \"yyyy-MM-ddTHHzzz\",\n        //    \"yyyy-MM-ddTHHzz\",\n        //    \"yyyy-MM-ddTHHZ\"\n        //};\n\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.MetaWeblog/XmlResult.cs",
    "content": "﻿using Microsoft.AspNetCore.Mvc;\nusing System.IO;\nusing System.Threading;\nusing System.Threading.Tasks;\nusing System.Xml.Linq;\n\n//http://tech-journals.com/jonow/2012/01/25/implementing-xml-rpc-services-with-asp-net-mvc\n//http://www.aaron-powell.com/posts/2010-06-16-aspnet-mvc-xml-action-result.html\n//http://www.aaron-powell.com/posts/2010-06-16-aspnet-mvc-xml-action-result.html\n//https://github.com/myquay/Chq.XmlRpc.Mvc\n\nnamespace cloudscribe.MetaWeblog\n{\n    public class XmlResult : ActionResult\n    {\n        public XDocument Xml { get; private set; }\n        public string ContentType { get; set; }\n        //public Encoding Encoding { get; set; }\n\n        public XmlResult(XDocument xml)\n        {\n            this.Xml = xml;\n            this.ContentType = \"text/xml\";\n        }\n\n       \n\n        public override async Task ExecuteResultAsync(ActionContext context)\n        {\n            context.HttpContext.Response.ContentType = this.ContentType;\n\n            if (Xml != null)\n            {\n                using (var ms = new MemoryStream())\n                {\n                    await Xml.SaveAsync(ms, SaveOptions.DisableFormatting, CancellationToken.None);\n                    var bytes = ms.ToArray();\n                    await context.HttpContext.Response.BodyWriter.WriteAsync(bytes);\n                }\n                    \n            }\n            else\n            {\n                await base.ExecuteResultAsync(context);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.MetaWeblog/cloudscribe.MetaWeblog.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <Description>a re-useable implementation of the metaweblog api for asp.net core</Description>\n    <Version>10.1.0</Version>\n    <TargetFramework>net10.0</TargetFramework>\n    <Authors>Joe Audette</Authors>\n    <PackageTags>cloudscribe;metaweblog;api;asp.net core</PackageTags>\n    <PackageIcon>icon.png</PackageIcon>\n    <PackageProjectUrl>https://github.com/cloudscribe/cloudscribe.MetaWeblog</PackageProjectUrl>\n    <PackageLicenseExpression>Apache-2.0</PackageLicenseExpression>\n    <RepositoryUrl>https://github.com/cloudscribe/cloudscribe.MetaWeblog.git</RepositoryUrl>\n    <RepositoryType>git</RepositoryType>\n\n    <PackageReadmeFile>README.md</PackageReadmeFile>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <None Include=\"icon.png\" Pack=\"true\" PackagePath=\"\\\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <FrameworkReference Include=\"Microsoft.AspNetCore.App\" />\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"README.md\" Pack=\"true\" PackagePath=\"/\" />\n  </ItemGroup>\n</Project>\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.CompiledViews.Bootstrap5/README.md",
    "content": "# cloudscribe.SimpleContent.CompiledViews.Bootstrap5\n\n[![NuGet](https://img.shields.io/nuget/v/cloudscribe.SimpleContent.CompiledViews.Bootstrap5.svg)](https://www.nuget.org/packages/cloudscribe.SimpleContent.CompiledViews.Bootstrap5)\n[![License: Apache-2.0](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://opensource.org/licenses/Apache-2.0)\n\nPrecompiled Bootstrap 5 views for cloudscribe.SimpleContent.\n\n## Installation\n\n```shell\nInstall-Package cloudscribe.SimpleContent.CompiledViews.Bootstrap5\n```\n\n## Usage\n\nAdd this package to your ASP.NET Core project to use Bootstrap 5 precompiled views with SimpleContent.\n\n## Contributing\n\nContributions are welcome! Please see the [contributing guidelines](https://github.com/cloudscribe/cloudscribe.SimpleContent/blob/main/CONTRIBUTING.md).\n\n## License\n\nLicensed under the Apache 2.0 License. See the [LICENSE](https://github.com/cloudscribe/cloudscribe.SimpleContent/blob/main/LICENSE) file for details.\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.CompiledViews.Bootstrap5/VersionProvider.cs",
    "content": "﻿using cloudscribe.Versioning;\nusing cloudscribe.Web.Common;\nusing System;\nusing System.Reflection;\n\nnamespace cloudscribe.SimpleContent.CompiledViews.Bootstrap5\n{\n    public class VersionProvider : IVersionProvider\n    {\n        public string Name { get { return \"cloudscribe.SimpleContent.CompiledViews.Bootstrap5\"; } }\n\n        public Guid ApplicationId { get { return new Guid(\"f94067b4-919d-4910-acd1-4b3b1c210ecf\"); } }\n\n        public Version CurrentVersion\n        {\n\n            get\n            {\n\n                var version = new Version(2, 0, 0, 0);\n                var versionString = typeof(CloudscribeCommonResources).Assembly.GetCustomAttribute<AssemblyFileVersionAttribute>().Version;\n                if (!string.IsNullOrWhiteSpace(versionString))\n                {\n                    Version.TryParse(versionString, out version);\n                }\n\n                return version;\n            }\n        }\n    }\n}"
  },
  {
    "path": "src/cloudscribe.SimpleContent.CompiledViews.Bootstrap5/Views/Blog/AboutPartial.cshtml",
    "content": "﻿@model cloudscribe.SimpleContent.Web.ViewModels.BlogViewModel\n@inject IStringLocalizer<SimpleContent> sr\n@inject IBlogRoutes blogRoutes\n@inject ISimpleContentThemeHelper themeHelper\n@{\n    var themeSettings = themeHelper.GetThemeSettings();\n    var heading = Model.ProjectSettings.AboutHeading;\n    if(string.IsNullOrWhiteSpace(heading))\n    {\n        heading = sr[\"About\"];\n    }\n}\n\n<section class=\"panel panel-default\">\n    <div class=\"panel-heading\">\n        <h2><i class=\"@themeSettings.Icons.About\" aria-hidden=\"true\"></i>&nbsp;@heading</h2>\n    </div>\n    <div class=\"panel-body\">\n        @if (Model.CanEdit && string.IsNullOrWhiteSpace(Model.ProjectSettings.AboutContent))\n        {\n            <p>\n                @sr[\"You can edit this from Administration > Content Settings\"]\n            </p>\n        }\n        @Html.Raw(Model.ProjectSettings.AboutContent)\n    </div>\n</section>\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.CompiledViews.Bootstrap5/Views/Blog/Archive.cshtml",
    "content": "﻿@model cloudscribe.SimpleContent.Web.ViewModels.BlogViewModel\n@inject IUrlHelper myhelper\n@{\n    ViewData[\"AsidePrimaryVisible\"] = Model.ProjectSettings.ShowBlogCategories || Model.ProjectSettings.ShowArchivedPosts || Model.ProjectSettings.ShowRelatedPosts || Model.ProjectSettings.ShowAboutBox ? true : false; ;\n    ViewData[\"AsidePrimaryToggle\"] = \"show\";\n}\n\n@section Meta {\n    <meta name=\"robots\" content=\"noindex\" />\n    <partial name=\"BlogMetaPartial\" model=\"@Model\" />\n}\n@section Styles {\n    <partial name=\"BlogStylePartial\" model=\"@Model\" />\n}\n\n@if (Model.ProjectSettings.ShowTitle)\n{\n    <partial name=\"BlogHeaderPartial\" model=\"@Model.ProjectSettings\" />\n}\n<div itemscope itemtype=\"http://schema.org/Blog\" class=\"blogroot\">\n    <partial name=\"PostListPartial\" model=\"@Model\" />\n</div>\n<nav>\n    <cs-pager cs-paging-info=\"@Model.Paging\"\n              cs-pagenumber-param=\"page\"\n              cs-show-first-last=\"false\"\n              cs-show-numbered=\"false\"\n              cs-use-reverse-increment=\"true\"\n              cs-suppress-empty-nextprev=\"true\"\n              cs-previous-page-text=\"< Older\"\n              cs-next-page-text=\"Newer >\"\n              asp-route=\"@Model.BlogRoutes.BlogArchiveRouteName\"\n              asp-route-year=\"@Model.Year\"\n              asp-route-month=\"@Model.Month.ToString(\"00\")\"\n              asp-route-day=\"@Model.Day.ToString(\"00\")\"\n              cs-pager-ul-class=\"pagination d-flex flex-wrap\"\n              cs-pager-li-current-class=\"page-item active\"\n              cs-pager-li-other-class=\"page-item\"\n              cs-pager-li-non-active-class=\"page-item disabled\"\n              cs-pager-link-current-class=\"page-link\"\n              cs-pager-link-other-class=\"page-link\"></cs-pager>\n</nav>\n\n@if (Model.ProjectSettings.ShowBlogCategories || Model.ProjectSettings.ShowArchivedPosts || Model.ProjectSettings.ShowRelatedPosts || Model.ProjectSettings.ShowAboutBox)\n{\n    @section AsidePrimary {\n       <partial name=\"SideBarPartial\" model=\"@Model\" />\n    }\n}"
  },
  {
    "path": "src/cloudscribe.SimpleContent.CompiledViews.Bootstrap5/Views/Blog/ArchiveListPartial.cshtml",
    "content": "﻿@model Dictionary<string, int>\n@inject IStringLocalizer<SimpleContent> sr\n@inject IBlogRoutes blogRoutes\n@inject ISimpleContentThemeHelper themeHelper\n@{\n    var themeSettings = themeHelper.GetThemeSettings();\n}\n@if (Model.Count() > 0)\n{\n    <nav class=\"panel panel-default\" aria-labelledby=\"hArchives\">\n        <div class=\"panel-heading\">\n            <h2 id=\"hArchives\"><i class=\"@themeSettings.Icons.Archives\" aria-hidden=\"true\"></i>&nbsp;@sr[\"Archives\"]</h2>\n        </div>\n        <div class=\"panel-body\">\n            <ul class=\"list-inline archive-list\">\n                @foreach (var cat in Model)\n                {\n                    <li>\n                        <a asp-route=\"@blogRoutes.BlogArchiveRouteName\"\n                           asp-route-year=\"@cat.Key.Substring(0,4)\"\n                           asp-route-month=\"@cat.Key.Substring(5,2)\">@cat.Key.Replace(\"/\", \"-\") (@cat.Value)</a>\n                    </li>\n                }\n            </ul>\n        </div>\n    </nav>\n}\n\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.CompiledViews.Bootstrap5/Views/Blog/BlogHeaderPartial.cshtml",
    "content": "﻿@model cloudscribe.SimpleContent.Models.ProjectSettings\n\n@{\n    string headerClass = (Model.ShowTitle) ? headerClass = \"\" : \"class=visually-hidden\";\n}\n\n<h1 @headerClass>\n    <a asp-controller=\"Blog\" asp-action=\"Index\" itemprop=\"url\">@Model.Title</a>\n</h1>\n\n@if (Model.ShowTitle)\n{\n        <em>@Model.Description</em>\n}\n\n\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.CompiledViews.Bootstrap5/Views/Blog/BlogMetaPartial.cshtml",
    "content": "﻿@model cloudscribe.SimpleContent.Web.ViewModels.BlogViewModel\n@using cloudscribe.Web.Common.Extensions\n@{\n    var imageUrl = Model.ExtractFirstImageUrl(Model.CurrentPost, Url);\n  \n}\n@if (Model.CurrentPost != null && !string.IsNullOrEmpty(Model.CurrentPost.MetaDescription))\n{\n    <meta name=\"description\" content=\"@Model.CurrentPost.MetaDescription\" />\n    <meta property=\"og:title\" content=\"@Model.CurrentPost.Title\" />\n    <meta property=\"og:type\" content=\"article\" />\n    <meta property=\"og:url\" content=\"@ViewContext.HttpContext.Request.GetCurrentFullUrl()\" />\n@if (!string.IsNullOrEmpty(imageUrl))\n{\n    <meta property=\"og:image\" content=\"@imageUrl\" />\n}\n    <meta property=\"og:description\" content=\"@Model.CurrentPost.MetaDescription\" />\n@if (!string.IsNullOrWhiteSpace(Model.ProjectSettings.SiteName))\n{\n    <meta property=\"og:site_name\" content=\"@Model.ProjectSettings.SiteName\" />\n}\n@if (!string.IsNullOrWhiteSpace(Model.ProjectSettings.FacebookAppId))\n{\n    <meta property=\"fb:app_id\" content=\"@Model.ProjectSettings.FacebookAppId\" />\n}\n\n    <meta name=\"twitter:card\" content=\"summary\">\n@if (!string.IsNullOrWhiteSpace(Model.ProjectSettings.TwitterPublisher))\n{\n    <meta name=\"twitter:site\" content=\"@Model.ProjectSettings.TwitterPublisher\" />\n}\n    <meta name=\"twitter:title\" content=\"@Model.CurrentPost.Title\">\n    <meta name=\"twitter:description\" content=\"@Model.CurrentPost.MetaDescription\">\n@if (!string.IsNullOrWhiteSpace(Model.ProjectSettings.TwitterCreator))\n{\n    <meta name=\"twitter:creator\" content=\"@Model.ProjectSettings.TwitterCreator\" />\n}\n@if (!string.IsNullOrEmpty(imageUrl))\n{\n    <meta name=\"twitter:image\" content=\"@imageUrl\" />\n}\n\n}\n@*\n    TODO: implement this stuff\n    RSD: Discoverability of Blog APIs\n    http://mashupguide.net/1.0/html/ch05s06.xhtml\n    http://en.wikipedia.org/wiki/Really_Simple_Discovery\n    <link type=\"application/rsd+xml\" rel=\"edituri\" title=\"RSD\" href=\"~/views/robots/rsd\" />\n\n    <link type=\"application/atom+xml\" rel=\"alternate\" title=\"@Model.BlogSettings.Title\" href=\"~/feed/atom/\" />\n*@\n<link type=\"application/rss+xml\" rel=\"alternate\" title=\"@Model.ProjectSettings.Title\" href=\"~/api/rss/\" />\n<link type=\"application/wlwmanifest+xml\" rel=\"wlwmanifest\"  href=\"~/wlwmanifest.xml\" />\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.CompiledViews.Bootstrap5/Views/Blog/BlogScriptsPartial.cshtml",
    "content": "﻿@model cloudscribe.SimpleContent.Web.ViewModels.BlogViewModel\n@if (Model.Template != null)\n{\n    <environment names=\"Development\">\n        @foreach (var c in Model.Template.RenderScripts.Where(x => (x.Environment == \"dev\" || x.Environment == \"any\")).OrderBy(x => x.Sort).ThenBy(x => x.Url).ToList())\n        {\n            <script src=\"@Url.Content(c.Url)\" asp-append-version=\"@(c.Url.StartsWith(\"/\"))\"></script>\n        }\n    </environment>\n    <environment names=\"Staging,Production\">\n        @foreach (var c in Model.Template.RenderScripts.Where(x => (x.Environment == \"prod\" || x.Environment == \"any\")).OrderBy(x => x.Sort).ThenBy(x => x.Url).ToList())\n        {\n            <script src=\"@Url.Content(c.Url)\" asp-append-version=\"@(c.Url.StartsWith(\"/\"))\"></script>\n        }\n    </environment>\n}\n<script src=\"~/cr/js/ckeditor4114/plugins/codesnippet/lib/highlight/highlight.pack.js\"></script>\n<script src=\"~/cr/js/syntax-highlight-init.js\"></script>\n\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.CompiledViews.Bootstrap5/Views/Blog/BlogStylePartial.cshtml",
    "content": "﻿@model cloudscribe.SimpleContent.Web.ViewModels.BlogViewModel\n<link rel=\"stylesheet\" href=\"~/csscsr/css/blog-common.min.css\" />\n<link rel=\"stylesheet\" href=\"~/csscsr/css/editing-side-menu.css\" />\n<link href=\"~/cr/js/ckeditor4114/plugins/codesnippet/lib/highlight/styles/default.css\" rel=\"stylesheet\" />\n<partial name=\"CommentStylePartial\" />\n@if (Model.Template != null)\n{\n    <environment names=\"Development\">\n        @foreach (var c in Model.Template.RenderCss.Where(x => (x.Environment == \"dev\" || x.Environment == \"any\")).OrderBy(x => x.Sort).ThenBy(x => x.Url).ToList())\n        {\n            <link rel=\"stylesheet\" href=\"@Url.Content(c.Url)\" asp-append-version=\"@(c.Url.StartsWith(\"/\"))\" />\n        }\n    </environment>\n    <environment names=\"Staging,Production\">\n        @foreach (var c in Model.Template.RenderCss.Where(x => (x.Environment == \"prod\" || x.Environment == \"any\")).OrderBy(x => x.Sort).ThenBy(x => x.Url).ToList())\n        {\n            <link rel=\"stylesheet\" href=\"@Url.Content(c.Url)\" asp-append-version=\"@(c.Url.StartsWith(\"/\"))\" />\n        }\n    </environment>\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.CompiledViews.Bootstrap5/Views/Blog/CategoryListPartial.cshtml",
    "content": "﻿@model Dictionary<string, int>\n@inject IStringLocalizer<SimpleContent> sr\n@inject IBlogRoutes blogRoutes\n@inject ISimpleContentThemeHelper themeHelper\n@{\n    var themeSettings = themeHelper.GetThemeSettings();\n}\n<nav class=\"panel panel-default\" aria-labelledby=\"hCategories\">\n    <div class=\"panel-heading\">\n        <h2 id=\"hCategories\"><i class=\"@themeSettings.Icons.Tags\" aria-hidden=\"true\"></i>&nbsp;@sr[\"Categories\"]</h2>\n    </div>\n    <div class=\"panel-body\">\n        <ul class=\"list-inline category-list\">\n            @foreach (var cat in Model)\n            {\n                <li>\n                    <a asp-route=\"@blogRoutes.BlogCategoryRouteName\"\n                       asp-route-category=\"@cat.Key\">@cat.Key (@cat.Value)</a>\n                </li>\n            }\n        </ul>\n    </div>\n</nav>\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.CompiledViews.Bootstrap5/Views/Blog/CommentLinkDetail.cshtml",
    "content": "﻿@model cloudscribe.SimpleContent.Web.ViewModels.BlogViewModel\n@inject ISimpleContentThemeHelper themeHelper\n@inject IStringLocalizer<SimpleContent> sr\n@{\n    var themeSettings = themeHelper.GetThemeSettings();\n    var commentFrag = GetCommentString(Model, themeSettings);\n    DateTime? pubDate = Model.CurrentPost.PubDate;\n    if (!pubDate.HasValue) { pubDate = DateTime.UtcNow; }\n}\n@functions{\n\n    public string GetCommentString(cloudscribe.SimpleContent.Web.ViewModels.BlogViewModel model, SimpleContentThemeSettings themeSettings)\n    {\n        if (string.IsNullOrEmpty(Model.ProjectSettings.DisqusShortName))\n        {\n            if (model.CurrentPost.ApprovedCommentCount() == 0)\n            {\n                return string.Empty;\n                //return \"<span style='display:none;' data-comment-count data-thread-id=\\\"\" + Model.CurrentPost.Id + \"\\\"><i data-comment-count-icon class='\" + themeSettings.Icons.Comments + \"'></i> \" + \"</span>\";\n            }\n\n            return \"<i class='\" + themeSettings.Icons.Comments + \"'></i> \" + Model.CurrentPost.ApprovedCommentCount() + \" \" + sr[\"Comments\"];\n\n        }\n        return \"<i class='\" + themeSettings.Icons.Comments + \"'></i> \" + \"<span class=\\\"disqus-comment-count\\\" data-disqus-identifier=\\\"\" + Model.CurrentPost.Id + \"\\\"></span>\";\n    }\n\n    public string GetCommentFragment()\n    {\n        if (string.IsNullOrEmpty(Model.ProjectSettings.DisqusShortName))\n        {\n            return \"comments\";\n\n        }\n        return \"disqus_thread\";\n    }\n}\n@if (!string.IsNullOrWhiteSpace(commentFrag))\n{\n    @if (Model.ProjectSettings.IncludePubDateInPostUrls)\n    {\n\n\n        <a asp-route=\"@Model.BlogRoutes.PostWithDateRouteName\"\n           asp-route-year=\"@pubDate.Value.Year\"\n           asp-route-month=\"@pubDate.Value.Month.ToString(\"00\")\"\n           asp-route-day=\"@pubDate.Value.Day.ToString(\"00\")\"\n           asp-route-slug=\"@Model.CurrentPost.Slug\"\n           asp-fragment=\"@GetCommentFragment()\"\n           itemprop=\"url\">@Html.Raw(commentFrag)</a>\n    }\n    else\n    {\n        <a asp-route=\"@Model.BlogRoutes.PostWithoutDateRouteName\" asp-route-slug=\"@Model.CurrentPost.Slug\" asp-fragment=\"@GetCommentFragment()\" itemprop=\"url\"> @Html.Raw(commentFrag))</a>\n    }\n}"
  },
  {
    "path": "src/cloudscribe.SimpleContent.CompiledViews.Bootstrap5/Views/Blog/CommentLinkList.cshtml",
    "content": "﻿@model cloudscribe.SimpleContent.Web.ViewModels.BlogViewModel\n@inject ISimpleContentThemeHelper themeHelper\n@inject IStringLocalizer<SimpleContent> sr\n@{\n    var themeSettings = themeHelper.GetThemeSettings();\n    var commentFrag = GetCommentString(Model, themeSettings, Model.TmpPost);\n    DateTime? pubDate = Model.TmpPost.PubDate;\n    if (!pubDate.HasValue) { pubDate = DateTime.UtcNow; }\n}\n@functions{\n    public string GetCommentString(cloudscribe.SimpleContent.Web.ViewModels.BlogViewModel model, SimpleContentThemeSettings themeSettings, IPost post)\n    {\n        if (string.IsNullOrEmpty(Model.ProjectSettings.DisqusShortName))\n        {\n            if (post.ApprovedCommentCount() == 0)\n            {\n                return string.Empty;\n            }\n            return \"<i class='\" + themeSettings.Icons.Comments + \"'></i> \" + post.ApprovedCommentCount() + \" \" + sr[\"Comments\"];\n\n        }\n        return \"<i class='\" + themeSettings.Icons.Comments + \"'></i> \" + \"<span class=\\\"disqus-comment-count\\\" data-disqus-identifier=\\\"\" + Model.TmpPost.Id + \"\\\"></span>\";\n    }\n\n    public string GetCommentFragment()\n    {\n        if (string.IsNullOrEmpty(Model.ProjectSettings.DisqusShortName))\n        {\n            return \"comments\";\n\n        }\n        return \"disqus_thread\";\n    }\n}\n\n@if (!string.IsNullOrWhiteSpace(commentFrag))\n{\n    @if (Model.ProjectSettings.IncludePubDateInPostUrls)\n    {\n\n        <a asp-route=\"@Model.BlogRoutes.PostWithDateRouteName\"\n           asp-route-year=\"@pubDate.Value.Year\"\n           asp-route-month=\"@pubDate.Value.Month.ToString(\"00\")\"\n           asp-route-day=\"@pubDate.Value.Day.ToString(\"00\")\"\n           asp-route-slug=\"@Model.TmpPost.Slug\"\n           asp-fragment=\"@GetCommentFragment()\"\n           itemprop=\"url\">@Html.Raw(commentFrag)</a>\n    }\n    else\n    {\n        <a asp-route=\"@Model.BlogRoutes.PostWithoutDateRouteName\" asp-route-slug=\"@Model.TmpPost.Slug\" asp-fragment=\"@GetCommentFragment()\" itemprop=\"url\"> @Html.Raw(commentFrag))</a>\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.CompiledViews.Bootstrap5/Views/Blog/CommentWrapperPartial.cshtml",
    "content": "﻿@model cloudscribe.SimpleContent.Web.ViewModels.BlogViewModel\n@inject IStringLocalizer<SimpleContent> sr\n@if ((Model.CurrentPost != null) && (!string.IsNullOrEmpty(Model.CurrentPost.Id)) && (Model.ShowComments))\n{\n    @if ((Model.CommentsAreOpen) || (Model.CanEdit && Model.CurrentPost.CommentCount() > 0) || (Model.CurrentPost.ApprovedCommentCount() > 0))\n    {\n        <section id=\"comments\" aria-label=\"Comments\">\n            <h2>@sr[\"Comments\"]</h2>\n            @foreach (var comment in Model.CurrentPost.Comments)\n            {\n                Model.TmpComment = comment;\n                if (comment.IsApproved || !Model.ProjectSettings.ModerateComments || Model.CanEdit)\n                {\n                    <partial name=\"CommentPartial\" model=\"Model\" />\n                }\n            }\n        </section>\n    }\n    @if (Model.CommentsAreOpen)\n    {\n        <partial name=\"CommentFormPartial\" model=\"Model\" />\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.CompiledViews.Bootstrap5/Views/Blog/DisqusCommentsPartial.cshtml",
    "content": "﻿@model cloudscribe.SimpleContent.Web.ViewModels.BlogViewModel\n@using Microsoft.AspNetCore.Http.Features\n@inject IStringLocalizer<SimpleContent> sr\n@{\n    var consentFeature = Context.Features.Get<ITrackingConsentFeature>();\n    var allowDisqus = consentFeature?.CanTrack ?? true; // disqus has cookies\n\n    var disqusScriptPath = \"//\" + Model.ProjectSettings.DisqusShortName + \".disqus.com/embed.js\";\n}\n@if (allowDisqus && (Model.CurrentPost != null) && (!string.IsNullOrEmpty(Model.CurrentPost.Id)) && (Model.ShowComments))\n{\n    @sr[\"Comments\"]\n    <div id=\"disqus_thread\" data-disqus-config data-disqus-page-url=\"@Context.Request.GetCurrentFullUrl()\" data-disqus-page-id=\"@Model.CurrentPost.Id\" data-disqus-script-url=\"@disqusScriptPath\"></div>\n    <noscript>Please enable JavaScript to view the <a href=\"https://disqus.com/?ref_noscript\">comments powered by Disqus.</a></noscript>\n}\n@if(!allowDisqus)\n{\n    <p class=\"alert alert-info\">@sr[\"If you want to view or submit comments you must accept the cookie consent.\"]</p>\n}\n<script src=\"~/cr/js/unobtrusive-disqus.min.js\"></script>\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.CompiledViews.Bootstrap5/Views/Blog/DraftInfoPartial.cshtml",
    "content": "﻿@model cloudscribe.SimpleContent.Web.ViewModels.BlogViewModel\n@inject IStringLocalizer<SimpleContent> sr\n@inject IBlogRoutes blogRoutes\n@{\n    DateTime? pubDate = Model.CurrentPost.PubDate;\n    if (!pubDate.HasValue) { pubDate = DateTime.UtcNow; }\n}\n@if (Model.ShowingDraft && Model.CanEdit)\n{\n    <div class=\"alert alert-info\" role=\"alert\">\n        @sr[\"You are currently viewing a draft version of this post.\"]\n        @if (Model.CurrentPost.PubDate.HasValue)\n        {\n            <em>\n                @sr[\"Scheduled Publish Date:\"]&nbsp;@Model.FormatDateForEdit(Model.CurrentPost.PubDate.Value)\n            </em>\n        }\n        @if (Model.HasPublishedVersion)\n        {\n            @if (Model.ProjectSettings.IncludePubDateInPostUrls)\n            {\n                <a asp-route=\"@Model.BlogRoutes.PostWithDateRouteName\"\n                   asp-route-year=\"@pubDate.Value.Year\"\n                   asp-route-month=\"@pubDate.Value.Month.ToString(\"00\")\"\n                   asp-route-day=\"@pubDate.Value.Day.ToString(\"00\")\"\n                   asp-route-slug=\"@Model.CurrentPost.Slug\"\n                   itemprop=\"url\">@sr[\"View published version.\"]</a>\n            }\n            else\n            {\n                <a asp-route=\"@Model.BlogRoutes.PostWithoutDateRouteName\" asp-route-slug=\"@Model.CurrentPost.Slug\" itemprop=\"url\">@sr[\"View published version.\"]</a>\n            }\n        }\n    </div>\n}\nelse if (Model.HasDraft && Model.CanEdit)\n{\n    @if (Model.ProjectSettings.IncludePubDateInPostUrls)\n    {\n    <a asp-route=\"@Model.BlogRoutes.PostWithDateRouteName\"\n       asp-route-year=\"@pubDate.Value.Year\"\n       asp-route-month=\"@pubDate.Value.Month.ToString(\"00\")\"\n       asp-route-day=\"@pubDate.Value.Day.ToString(\"00\")\"\n       asp-route-slug=\"@Model.CurrentPost.Slug\"\n       asp-route-showdraft=\"true\"\n       itemprop=\"url\">@sr[\"View current draft.\"]</a>\n    }\n    else\n    {\n        <a asp-route=\"@Model.BlogRoutes.PostWithoutDateRouteName\" asp-route-slug=\"@Model.CurrentPost.Slug\" asp-route-showdraft=\"true\" itemprop=\"url\">@sr[\"View current draft.\"]</a>\n    }\n\n}"
  },
  {
    "path": "src/cloudscribe.SimpleContent.CompiledViews.Bootstrap5/Views/Blog/Edit.cshtml",
    "content": "﻿@model cloudscribe.SimpleContent.Web.ViewModels.PostEditViewModel\n@inject IStringLocalizer<SimpleContent> sr\n@inject IBlogRoutes  blogRoutes\n@{\n    var contentId = Model.Id;\n    if (string.IsNullOrWhiteSpace(contentId)) { contentId = \"draft-post-\" + DateTime.UtcNow.ToString(\"yyyy-MM-dd-hh\"); }\n}\n@section Styles {\n    <partial name=\"EditStylesPartial\" model=\"@Model\" />\n    <link href=\"/cr/css/summernote-bs5.min.css\" rel=\"stylesheet\">\n}\n<h2>@ViewBag.Title</h2>\n@if (!string.IsNullOrEmpty(Model.Id))\n{\n    <a id=\"lnkHistory\" href=\"@Url.RouteUrl(blogRoutes.PostHistoryRouteName, new { slug = Model.Slug })\">@sr[\"Version History\"]</a>\n}\n<partial name=\"EditHistoryInfoPartial\" model=\"@Model\" />\n<form method=\"post\" class=\"form-horizontal\" role=\"form\" asp-antiforgery=\"true\" data-submit-once=\"true\">\n    <input type=\"hidden\" id=\"projectId\" name=\"projectId\" value=\"@Model.ProjectId\" />\n    <input type=\"hidden\" id=\"id\" name=\"id\" value=\"@Model.Id\" />\n    <input type=\"hidden\" asp-for=\"@Model.IsPublished\" />\n    <input type=\"hidden\" asp-for=\"@Model.HistoryId\" />\n    <input type=\"hidden\" asp-for=\"ContentType\" />\n    @Html.ValidationMessage(\"postediterror\", new { @class = \"text-danger\" })\n    <div class=\"mb-3\">\n        <label asp-for=\"Title\">@sr[\"Title\"]</label>\n        <input asp-for=\"Title\" class=\"form-control\" />\n        <span asp-validation-for=\"Title\" class=\"invalid-feedback\"></span>\n    </div>\n    <partial name=\"EditCorrelationKeyPartial\" model=\"@Model\" />\n    <partial name=\"EditSlugPartial\" model=\"@Model\" />\n    <div class=\"mb-3\">\n        <label asp-for=\"MetaDescription\">@sr[\"Meta Description\"]</label>\n        <input asp-for=\"MetaDescription\" class=\"form-control\" data-bs-toggle=\"tooltip\" title='@sr[\"On public pages, meta description is very important to search engines. It should be no longer than 135 – 160 characters long (although Google has recently been testing longer snippets). Any longer and search engines will chop the end off, so make sure any important keywords are nearer the front.\"]' />\n        <span asp-validation-for=\"MetaDescription\" class=\"invalid-feedback\"></span>\n    </div>\n    <div class=\"mb-3\">\n        <label asp-for=\"Content\">@sr[\"Content\"]</label>\n        @if (Model.ContentType == \"markdown\")\n        {\n            <partial name=\"EditContentMarkdownPartial\" model=\"@Model\" />\n        }\n        else\n        {\n            <partial name=\"EditContentHtmlPartial\" model=\"@Model\" />\n        }\n        <span asp-validation-for=\"Content\" class=\"invalid-feedback\"></span>\n    </div>\n    <div class=\"mb-3\">\n        <label asp-for=\"Categories\">@sr[\"Categories\"]</label>\n        <input asp-for=\"Categories\" class=\"form-control\" />\n        <span asp-validation-for=\"Categories\" class=\"invalid-feedback\"></span>\n    </div>\n    <div class=\"mb-3\">\n        <label asp-for=\"Author\">@sr[\"Author\"]</label>\n        <input asp-for=\"Author\" class=\"form-control\" />\n        <span asp-validation-for=\"Author\" class=\"invalid-feedback\"></span>\n    </div>\n    <partial name=\"EditImageUrlPartial\" model=\"@Model\" />\n    <div class=\"mb-3\">\n        <div class=\"form-check\">\n            <input asp-for=\"IsFeatured\" class=\"form-check-input\" />\n            <label asp-for=\"IsFeatured\" class=\"form-check-label\">@sr[\"Is Featured\"]</label>\n        </div>\n    </div>\n    <div class=\"mb-3\">\n        <div class=\"form-check\">\n            <input asp-for=\"ShowComments\" class=\"form-check-input\" />\n            <label asp-for=\"ShowComments\" class=\"form-check-label\">@sr[\"Allow Comments\"]</label>\n        </div>\n    </div>\n\n    @if (Model.TeasersEnabled)\n    {\n        if (Model.ContentType == \"markdown\")\n        {\n            <partial name=\"EditTeaserMarkdownPartial\" model=\"@Model\" />\n        }\n        else\n        {\n            <partial name=\"EditTeaserHtmlPartial\" model=\"@Model\" />\n        }\n    }\n    else\n    {\n        <partial name=\"EditTeaserDisabledPartial\" />\n    }\n\n\n\n    <div class=\"row align-items-left\">\n        <div class=\"mb-3 mt-1 col-3 w-auto\">\n\n            <a class=\"btn btn-secondary\" id=\"lnkCancel\" href=\"@Model.CurrentPostUrl\">@sr[\"Cancel\"]</a>\n\n            @if (Model.IsPublished && Model.HasDraft)\n            {\n                <button type=\"button\" class=\"btn btn-danger\" data-bs-toggle=\"modal\" data-bs-target=\"#confirmDeleteDraft\">\n                    @sr[\"Delete Draft\"]\n                </button>\n            }\n\n            <button id=\"btnSaveDraft\" name=\"SaveMode\" value=\"@SaveMode.SaveDraft\" type=\"submit\" class=\"btn btn-primary\" data-disabled-text='@sr[\"Working...\"]' data-enabled-text='@sr[\"Save Draft\"]'>@sr[\"Save Draft\"]</button>\n            <button id=\"btnSavePublish\" name=\"SaveMode\" type=\"submit\" value=\"@SaveMode.PublishNow\" class=\"btn btn-primary\" data-disabled-text='@sr[\"Working...\"]' data-enabled-text='@sr[\"Publish Now\"]'>@sr[\"Publish Now\"]</button>\n\n        </div>\n\n\n        <div class=\"mb-3 mt-1 col-3 w-auto\">\n\n            <div class=\"row align-items-left gx-1\">\n                <div class=\"col-md-2 w-auto\">\n                    <button id=\"SaveMode\" name=\"SaveMode\" value=\"@SaveMode.PublishLater\" type=\"submit\" class=\"btn btn-primary\" data-disabled-text='@sr[\"Working...\"]' data-enabled-text='@sr[\"Publish at Date/Time:\"]'>@sr[\"Publish at Date/Time:\"]</button>\n                </div>\n                <div class=\"ms-0 col-md-3 w-auto\">\n                    <partial name=\"EditPubDate\" model=\"@Model\" />\n                </div>\n            </div>\n\n        </div>\n\n\n        <div class=\"mb-3 mt-1 col-3 w-auto\">\n            @if (!string.IsNullOrEmpty(Model.Id))\n            {\n                <button type=\"button\" class=\"btn btn-danger\" data-bs-toggle=\"modal\" data-bs-target=\"#confirmDeleteModal\">\n                    @sr[\"Delete\"]\n                </button>\n            }\n\n        </div>\n    </div>\n\n\n\n    <div class=\"modal fade\" id=\"confirmDeleteDraft\" tabindex=\"-1\" role=\"dialog\" aria-labelledby=\"confirmDeleteDraftHeading\" aria-hidden=\"true\">\n        <div class=\"modal-dialog\">\n            <div class=\"modal-content\">\n                <div class=\"modal-header\">\n                    <h4 class=\"modal-title\" id=\"confirmDeleteDraftHeading\">@sr[\"Confirm Delete Draft\"]</h4>\n                    <button type=\"button\" data-bs-dismiss=\"modal\" class=\"btn-close\" aria-label='@sr[\"Close\"]'></button>\n                </div>\n                <div class=\"modal-body\">\n                    @sr[\"Are you sure you want to delete the current draft version of this page?\"]\n                </div>\n                <div class=\"modal-footer\">\n                    <button type=\"button\" class=\"btn btn-primary\" data-bs-dismiss=\"modal\">@sr[\"Cancel\"]</button>\n                    <button id=\"btnDeleteCurrentDraft\" name=\"SaveMode\" value=\"@SaveMode.DeleteCurrentDraft\" type=\"submit\" class=\"btn btn-danger btn-ok\" data-disabled-text='@sr[\"Working...\"]' data-enabled-text='@sr[\"Delete Draft\"]'>@sr[\"Delete Draft\"]</button>\n                </div>\n            </div>\n        </div>\n    </div>\n\n</form>\n<partial name=\"EditDraftPubDatePartial\" model=\"@Model\" />\n@if (!string.IsNullOrEmpty(Model.Id))\n{\n    <form id=\"deleteform\" class=\"form-inline\" asp-route=\"@Model.DeletePostRouteName\">\n        <input asp-for=\"Id\" type=\"hidden\" />\n        <div class=\"modal fade\" id=\"confirmDeleteModal\" tabindex=\"-1\" role=\"dialog\" aria-labelledby=\"confirmDeleteHeading\">\n            <div class=\"modal-dialog modal-sm\" role=\"document\">\n                <div class=\"modal-content\">\n                    <div class=\"modal-header\">\n                        <h4 class=\"modal-title\" id=\"confirmDeleteHeading\">@sr[\"Confirm Delete\"]</h4>\n                        <button type=\"button\" data-bs-dismiss=\"modal\" class=\"btn-close\" aria-label='@sr[\"Close\"]'></button>\n                    </div>\n                    <div class=\"modal-body\">\n                        @string.Format(sr[\"Are you sure you want to delete the post {0}?\"], Model.Title)\n                    </div>\n                    <div class=\"modal-footer\">\n                        <button type=\"button\" class=\"btn btn-primary\" data-bs-dismiss=\"modal\">@sr[\"Cancel\"]</button>\n                        <input type=\"submit\" value='@sr[\"Delete\"]' class=\"btn btn-danger btn-ok\" />\n                    </div>\n                </div>\n            </div>\n        </div>\n\n    </form>\n}\n<div class=\"modal fade\" id=\"dateRequired\" tabindex=\"-1\" role=\"dialog\" aria-labelledby=\"dateRequiredHeading\">\n    <div class=\"modal-dialog modal-sm\" role=\"document\">\n        <div class=\"modal-content\">\n            <div class=\"modal-header\">\n                <h4 class=\"modal-title\" id=\"dateRequiredHeading\">@sr[\"Date Required\"]</h4>\n                <button type=\"button\" data-bs-dismiss=\"modal\" class=\"btn-close\" aria-label='@sr[\"Close\"]'></button>\n            </div>\n            <div class=\"modal-body\">\n                @sr[\"To publish later you must enter a date.\"]\n            </div>\n            <div class=\"modal-footer\">\n                <button type=\"button\" class=\"btn btn-primary\" data-bs-dismiss=\"modal\">@sr[\"Ok\"]</button>\n\n            </div>\n        </div>\n    </div>\n</div>\n@section Scripts {\n    <partial name=\"EditScriptsPartial\" model=\"@Model\" />\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.CompiledViews.Bootstrap5/Views/Blog/EditContentHtmlPartial.cshtml",
    "content": "﻿@model cloudscribe.SimpleContent.Web.ViewModels.PostEditViewModel\n@inject ISummernoteOptionsResolver summernoteOptionsResolver\n@inject ICkeditorOptionsResolver editorOptionsResolver\n@{\n    var summernoteOptions = await summernoteOptionsResolver.GetSummernoteOptions();\n    var ckOptions = await editorOptionsResolver.GetCkeditorOptions();\n}\n<textarea asp-for=\"Content\" rows=\"10\" cols=\"70\" class=\"form-control\"\n    data-summernote-unobtrusive=\"\"\n    data-summernote-config-url=\"@summernoteOptions.CustomConfigPath\"\n    data-summernote-toolbar-config-url=\"@summernoteOptions.CustomToolbarConfigPath\"\n    data-summernote-config-language=\"@summernoteOptions.LanguageCode\"\n    data-summernote-config-dropfileuploadurl=\"@summernoteOptions.DropFileUrl\"\n    data-summernote-config-filebrowserurl=\"@summernoteOptions.FileBrowseUrl\"\n    data-summernote-config-imagebrowseurl=\"@summernoteOptions.ImageBrowseUrl\">\n</textarea>"
  },
  {
    "path": "src/cloudscribe.SimpleContent.CompiledViews.Bootstrap5/Views/Blog/EditContentMarkdownPartial.cshtml",
    "content": "﻿@model cloudscribe.SimpleContent.Web.ViewModels.PostEditViewModel\n@inject ISummernoteOptionsResolver summernoteOptionsResolver\n@inject ICkeditorOptionsResolver editorOptionsResolver\n@inject IStringLocalizer<SimpleContent> sr\n@{\n    var summernoteOptions = await summernoteOptionsResolver.GetSummernoteOptions();\n    var ckOptions = await editorOptionsResolver.GetCkeditorOptions();\n    var contentId = Model.Id;\n    if (string.IsNullOrWhiteSpace(contentId)) { contentId = \"draft-post-\" + DateTime.UtcNow.ToString(\"yyyy-MM-dd-hh\"); }\n}\n<textarea asp-for=\"Content\" rows=\"10\" cols=\"70\" class=\"form-control\"\n    data-summernote-unobtrusive=\"\"\n    data-summernote-config-url=\"@summernoteOptions.CustomConfigPath\"\n    data-summernote-toolbar-config-url=\"@summernoteOptions.CustomToolbarConfigPath\"\n    data-summernote-config-language=\"@summernoteOptions.LanguageCode\"\n    data-summernote-config-dropfileuploadurl=\"@summernoteOptions.DropFileUrl\"\n    data-summernote-config-filebrowserurl=\"@summernoteOptions.FileBrowseUrl\"\n    data-summernote-config-imagebrowseurl=\"@summernoteOptions.ImageBrowseUrl\">\n</textarea>\n<div id=\"fileBrowseDialog\" class=\"modal fade\" tabindex=\"-1\" role=\"dialog\" aria-hidden=\"true\">\n    <div class=\"modal-dialog modal-lg\" style=\"height:99%;width:99%;\">\n        <div class=\"modal-content\">\n            <div class=\"modal-header\">\n                <button type=\"button\" data-bs-dismiss=\"modal\" class=\"btn-close\" aria-label='@sr[\"Close\"]'></button>\n            </div>\n            <iframe id=\"frFileDialog\" frameborder=\"0\" style=\"overflow:hidden;height:100%;width:100%;min-height: 600px;\"></iframe>\n        </div>\n    </div>\n</div>\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.CompiledViews.Bootstrap5/Views/Blog/EditCorrelationKeyPartial.cshtml",
    "content": "﻿@model cloudscribe.SimpleContent.Web.ViewModels.PostEditViewModel\n@inject IStringLocalizer<SimpleContent> sr\n@* comment this and uncomment the below if you want editable correlationkey *@\n<input type=\"hidden\" asp-for=\"@Model.CorrelationKey\" />\n@*\n    <div class=\"mb-3\">\n        <label asp-for=\"CorrelationKey\">@sr[\"Correlation Key\"]</label>\n        <input asp-for=\"CorrelationKey\" class=\"form-control\" />\n        <span asp-validation-for=\"CorrelationKey\" class=\"text-danger\"></span>\n    </div>\n*@ \n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.CompiledViews.Bootstrap5/Views/Blog/EditDraftPubDatePartial.cshtml",
    "content": "﻿@model cloudscribe.SimpleContent.Web.ViewModels.PostEditViewModel\n@inject IStringLocalizer<SimpleContent> sr\n@{ \n    var message = \"\";\n    if(Model.DraftPubDate.HasValue)\n    {\n        var format = sr[\"This content is scheduled to be published {0}. You can still edit and save changes to this draft before it is published by clicking \\\"Save Draft\\\"\"].ToString();\n        message = string.Format(format, Model.DraftPubDate.Value);\n    }\n\n}\n@if (Model.DraftPubDate.HasValue)\n{\n    <p class=\"text-success\"> @message </p>\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.CompiledViews.Bootstrap5/Views/Blog/EditHistoryInfoPartial.cshtml",
    "content": "﻿@model cloudscribe.SimpleContent.Web.ViewModels.PostEditViewModel\n@inject IStringLocalizer<SimpleContent> sr\n@if (Model.HistoryId.HasValue)\n{\n    <div class=\"alert alert-warning\" role=\"alert\">\n        @if (Model.DidReplaceDraft)\n        {\n            @sr[\"A previous version of this post has been restored to the editor, replacing the current draft version. If this is not intended, do not save/publish this version.\"]\n        }\n        @if (Model.DidRestoreDeleted)\n        {\n            @sr[\"You've just restored a previously deleted post to the editor; click save/publish to re-create the post. If this is not intended, do not save/publish this version.\"]\n        }\n        @if (!Model.DidReplaceDraft && !Model.DidRestoreDeleted)\n        {\n            @sr[\"A previous version of this post has been restored to the editor. If this is not intended, do not save/publish this version.\"]\n        }\n    </div>\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.CompiledViews.Bootstrap5/Views/Blog/EditImageUrlPartial.cshtml",
    "content": "﻿@model cloudscribe.SimpleContent.Web.ViewModels.PostEditViewModel\n@inject IStringLocalizer<SimpleContent> sr\n@* comment this and uncomment the below if you want editable image/thumbnail *@\n<input type=\"hidden\" asp-for=\"@Model.ImageUrl\" />\n<input type=\"hidden\" asp-for=\"@Model.ThumbnailUrl\" />\n@*\n    <div class=\"mb-3\">\n        <label asp-for=\"ImageUrl\">@sr[\"Image Url\"]</label>\n        <input asp-for=\"ImageUrl\" class=\"form-control\" />\n        <span asp-validation-for=\"ImageUrl\" class=\"text-danger\"></span>\n    </div>\n     <div class=\"mb-3\">\n        <label asp-for=\"ThumbnailUrl\">@sr[\"Thumbnail Url\"]</label>\n        <input asp-for=\"ThumbnailUrl\" class=\"form-control\" />\n        <span asp-validation-for=\"ThumbnailUrl\" class=\"text-danger\"></span>\n    </div>\n*@ \n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.CompiledViews.Bootstrap5/Views/Blog/EditPubDate.cshtml",
    "content": "﻿@model cloudscribe.SimpleContent.Web.ViewModels.PostEditViewModel\n@inject IStringLocalizer<SimpleContent> sr\n<input asp-for=\"NewPubDate\" type=\"hidden\" />\n<span asp-validation-for=\"NewPubDate\" class=\"invalid-feedback\"></span>\n<input type=\"text\" id=\"PubDateDisplay\" class=\"form-control\"\n       data-bs-datepicker=\"true\"\n       data-bs-datepicker-iso-target-id=\"NewPubDate\"\n       data-bs-datepicker-iso-format=\"YYYY-MM-DDTHH:mm:ss.sss\"\n       value='@Model.NewPubDate?.ToString(\"g\")'\n       data-bs-datepicker-debug=\"false\"\n       data-bs-datepicker-keepOpen=\"false\"\n       data-bs-datepicker-allowInputToggle=\"true\"\n       data-bs-datepicker-locale=\"@CultureInfo.CurrentCulture.Name\" />\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.CompiledViews.Bootstrap5/Views/Blog/EditScriptsPartial.cshtml",
    "content": "﻿@model cloudscribe.SimpleContent.Web.ViewModels.PostEditViewModel\n<script src=\"~/cr/js/jquery.validate.min.js\"></script>\n<script src=\"~/cr/js/jquery.validate.unobtrusive.min.js\"></script>\n<script src=\"~/cr/js/unobtrusive-validation-bs4.min.js\"></script>\n<script src=\"~/cr/js/jquery.validate.hooks.min.js\"></script>\n<script src=\"~/cr/js/jqueryvaildation.submitonce-unobtrusive.min.js\"></script>\n<script src=\"/cr/js/unsaved-changes-prompt.min.js\"></script>\n@if (Model.ContentType == \"markdown\")\n{\n    <script src=\"~/cr/js/simplemde.min.js\"></script>\n    <script src=\"~/cr/js/simplemde-unobtrusive.min.js\"></script>\n}\nelse\n{\n    <script src=\"~/cr/js/ckeditor4114/ckeditor.js\"></script>\n    <script src=\"~/cr/js/cloudscribe-ckeditor-unobtrusive.min.js\"></script>\n}\n<script src=\"~/cr/js/moment-with-locales.min.js\"></script>\n<script src=\"~/cr/js/bootstrap4-datetimepicker.min.js\"></script>\n<script src=\"~/cr/js/cloudscribe-datepicker-bootstrap4-unobtrusive.min.js\"></script>\n<script src=\"/csscsr/js/edit-script.js\"></script>\n<partial name=\"SummernoteScripts\" />\n@*<script>\n    $(function () {\n        $('[data-bs-toggle=\"tooltip\"]').tooltip()\n    });\n    $(document).ready(function () {\n        $('#SaveMode').click(function () {\n            var newDateVal = $('#NewPubDate').val();\n            if (newDateVal.length == 0) {\n                $('#dateRequired').modal('show')\n                $('#SaveMode').html($('#SaveMode').data(\"enabled-text\"));\n                return false;\n            }\n        });\n    });\n</script>*@\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.CompiledViews.Bootstrap5/Views/Blog/EditSlugPartial.cshtml",
    "content": "﻿@model cloudscribe.SimpleContent.Web.ViewModels.PostEditViewModel\n@inject IStringLocalizer<SimpleContent> sr\n@* comment this and uncomment the below if you want editable slug*@\n<input type=\"hidden\" asp-for=\"@Model.Slug\" />\n@*<div class=\"mb-3\">\n        <label asp-for=\"Slug\">@sr[\"Slug\"]</label>\n        <input asp-for=\"Slug\" class=\"form-control\" />\n        <span asp-validation-for=\"Slug\" class=\"text-danger\"></span>\n    </div>\n*@\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.CompiledViews.Bootstrap5/Views/Blog/EditStylesPartial.cshtml",
    "content": "﻿@model cloudscribe.SimpleContent.Web.ViewModels.PostEditViewModel\n<link rel=\"stylesheet\" href=\"~/cr/css/bootstrap4-datetimepicker.min.css\" />\n@if (Model.ContentType == \"markdown\")\n{\n    <link rel=\"stylesheet\" href=\"~/cr/css/simplemde.min.css\" />\n    <style>\n        .editor-toolbar.fullscreen {\n            z-index: 1040;\n        }\n    </style>\n}\n<link href=\"/cr/css/summernote-bs5.min.css\" rel=\"stylesheet\">\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.CompiledViews.Bootstrap5/Views/Blog/EditTeaserDisabledPartial.cshtml",
    "content": "﻿<input type=\"hidden\" name=\"TeaserOverride\" value=\"\" />\n<input type=\"hidden\" name=\"SuppressTeaser\" value=\"false\" />\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.CompiledViews.Bootstrap5/Views/Blog/EditTeaserHtmlPartial.cshtml",
    "content": "﻿@model cloudscribe.SimpleContent.Web.ViewModels.PostEditViewModel\n@inject ISummernoteOptionsResolver summernoteOptionsResolver\n@inject ICkeditorOptionsResolver editorOptionsResolver\n@inject IStringLocalizer<SimpleContent> sr\n@{\n    var summernoteOptions = await summernoteOptionsResolver.GetSummernoteOptions();\n    var ckOptions = await editorOptionsResolver.GetCkeditorOptions();\n}\n<div class=\"mb-3\">\n    <label asp-for=\"TeaserOverride\">@sr[\"Teaser Override\"]</label>\n    <textarea asp-for=\"TeaserOverride\" class=\"form-control\" rows=\"10\" cols=\"70\"\n        data-summernote-unobtrusive=\"\"\n        data-summernote-config-url=\"@summernoteOptions.CustomConfigPath\"\n        data-summernote-toolbar-config-url=\"@summernoteOptions.CustomToolbarConfigPath\"\n        data-summernote-config-language=\"@summernoteOptions.LanguageCode\"\n        data-summernote-config-dropfileuploadurl=\"@summernoteOptions.DropFileUrl\"\n        data-summernote-config-filebrowserurl=\"@summernoteOptions.FileBrowseUrl\"\n        data-summernote-config-imagebrowseurl=\"@summernoteOptions.ImageBrowseUrl\">\n    </textarea>\n</div>\n<div class=\"mb-3\">\n    <div class=\"form-check\" data-bs-toggle=\"tooltip\" data-placement=\"left\" title='@sr[\"If checked, then show entire blog post on index/listing pages regardless of teaser settings.\"]'>\n        <input asp-for=\"SuppressTeaser\" class=\"form-check-input\" />\n        <label asp-for=\"SuppressTeaser\" class=\"form-check-label\">@sr[\"No teaser, use full post\"]</label>\n    </div>\n</div>\n\n\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.CompiledViews.Bootstrap5/Views/Blog/EditTeaserMarkdownPartial.cshtml",
    "content": "﻿@model cloudscribe.SimpleContent.Web.ViewModels.PostEditViewModel\n@inject ISummernoteOptionsResolver summernoteOptionsResolver\n@inject ICkeditorOptionsResolver editorOptionsResolver\n@inject IStringLocalizer<SimpleContent> sr\n@{\n    var summernoteOptions = await summernoteOptionsResolver.GetSummernoteOptions();\n    var ckOptions = await editorOptionsResolver.GetCkeditorOptions();\n    var contentId = Model.Id + \"-teaser\";\n    if (string.IsNullOrWhiteSpace(contentId)) { contentId = \"draft-post-teaser-\" + DateTime.UtcNow.ToString(\"yyyy-MM-dd-hh\"); }\n}\n<div class=\"mb-3\">\n    <label asp-for=\"TeaserOverride\">@sr[\"Teaser Override\"]</label>\n    <textarea asp-for=\"TeaserOverride\" class=\"form-control\" rows=\"7\" cols=\"70\"\n                data-markdown-unobtrusive=\"\"\n                data-markdown-autosave=\"true\"\n                data-markdown-contentid=\"@contentId\"\n                data-markdown-forceSync=\"true\"\n                data-markdown-indentWithTabs=\"true\"\n                data-markdown-spellChecker=\"true\"\n                data-markdown-filemodalid=\"#fileBrowseDialog\"\n                data-markdown-filebrowseurl=\"/filemanager/filedialog\"\n                data-markdown-dropfileuploadurl=\"@summernoteOptions.DropFileUrl\"></textarea>\n</div>\n<div class=\"mb-3\">\n    <div class=\"form-check\" data-bs-toggle=\"tooltip\" data-placement=\"left\" title='@sr[\"If checked, then show entire blog post on index/listing pages regardless of teaser settings.\"]'>\n        <input asp-for=\"SuppressTeaser\" class=\"form-check-input\" />\n        <label asp-for=\"SuppressTeaser\" class=\"form-check-label\">@sr[\"No teaser, use full post\"]</label>\n    </div>\n</div>\n\n\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.CompiledViews.Bootstrap5/Views/Blog/EditWithTemplate.cshtml",
    "content": "﻿@model cloudscribe.SimpleContent.Web.ViewModels.PostEditWithTemplateViewModel\n@inject IStringLocalizer<SimpleContent> sr\n@inject IBlogRoutes  blogRoutes\n@{\n    var contentId = Model.Id;\n    if (string.IsNullOrWhiteSpace(contentId)) { contentId = \"draft-post-\" + DateTime.UtcNow.ToString(\"yyyy-MM-dd-hh\"); }\n    var legend = sr[\"Template Fields\"].ToString();\n    var legendFormat = sr[\"Template Fields - {0}\"].ToString();\n    if (Model.Template != null)\n    {\n        legend = string.Format(legendFormat, Model.Template.Title);\n\n    }\n}\n@section Styles {\n    <partial name=\"EditWithTemplateStylesPartial\" model=\"@Model\" />\n}\n<h2>@ViewBag.Title </h2>\n@if (!string.IsNullOrEmpty(Model.Id))\n{\n    <a id=\"lnkHistory\" href=\"@Url.RouteUrl(blogRoutes.PostHistoryRouteName, new { slug = Model.Slug })\">@sr[\"Version History\"]</a>\n}\n<partial name=\"EditWithTemplateHistoryInfoPartial\" model=\"@Model\" />\n<form method=\"post\" class=\"form-horizontal\" role=\"form\" asp-antiforgery=\"true\" data-submit-once=\"true\">\n    <input type=\"hidden\" id=\"projectId\" name=\"projectId\" value=\"@Model.ProjectId\" />\n    <input type=\"hidden\" id=\"id\" name=\"id\" value=\"@Model.Id\" />\n    <input type=\"hidden\" asp-for=\"@Model.IsPublished\" />\n    <input type=\"hidden\" asp-for=\"@Model.HistoryId\" />\n    <input type=\"hidden\" asp-for=\"ContentType\" />\n    @Html.ValidationMessage(\"postediterror\", new { @class = \"text-danger\" })\n    <div class=\"mb-3\">\n        <label asp-for=\"Title\">@sr[\"Title\"]</label>\n        <input asp-for=\"Title\" class=\"form-control\" />\n        <span asp-validation-for=\"Title\" class=\"invalid-feedback\"></span>\n    </div>\n    <partial name=\"EditWithTemplateCorrelationKeyPartial\" model=\"@Model\" />\n    <partial name=\"EditWithTemplateSlugPartial\" model=\"@Model\" />\n    <div class=\"mb-3\">\n        <label asp-for=\"MetaDescription\">@sr[\"Meta Description\"]</label>\n        <input asp-for=\"MetaDescription\" class=\"form-control\" data-bs-toggle=\"tooltip\" title='@sr[\"On public pages, meta description is very important to search engines. It should be no longer than 135 – 160 characters long (although Google has recently been testing longer snippets). Any longer and search engines will chop the end off, so make sure any important keywords are nearer the front.\"]' />\n        <span asp-validation-for=\"MetaDescription\" class=\"invalid-feedback\"></span>\n    </div>\n    <fieldset class=\"border p-2 mb-2\">\n        <legend class=\"w-auto\">@legend</legend>\n        <partial name=\"@Model.Template.EditView\" model=\"@Model.TemplateModel\" />\n    </fieldset>\n    <div class=\"mb-3\">\n        <label asp-for=\"Categories\">@sr[\"Categories\"]</label>\n        <input asp-for=\"Categories\" class=\"form-control\" />\n        <span asp-validation-for=\"Categories\" class=\"invalid-feedback\"></span>\n    </div>\n    <div class=\"mb-3\">\n        <label asp-for=\"Author\">@sr[\"Author\"]</label>\n        <input asp-for=\"Author\" class=\"form-control\" />\n        <span asp-validation-for=\"Author\" class=\"invalid-feedback\"></span>\n    </div>\n    <partial name=\"EditWithTemplateImageUrlPartial\" model=\"@Model\" />\n    <div class=\"mb-3\">\n        <div class=\"form-check\">\n            <input asp-for=\"IsFeatured\" class=\"form-check-input\" />\n            <label asp-for=\"IsFeatured\" class=\"form-check-label\">@sr[\"Is Featured\"]</label>\n        </div>\n    </div>\n    <div class=\"mb-3\">\n        <div class=\"form-check\">\n            <input asp-for=\"ShowComments\" class=\"form-check-input\" />\n            <label asp-for=\"ShowComments\" class=\"form-check-label\">@sr[\"Allow Comments\"]</label>\n        </div>\n    </div>\n\n    @if (Model.TeasersEnabled)\n    {\n        <partial name=\"EditWithTemplateTeaserHtmlPartial\" model=\"@Model\" />\n    }\n    else\n    {\n        <partial name=\"EditTeaserDisabledPartial\" />\n    }\n\n\n\n    <div class=\"row align-items-left\">\n        <div class=\"mb-3 mt-1 col-3 w-auto\">\n\n            <a class=\"btn btn-secondary\" id=\"lnkCancel\" href=\"@Model.CurrentPostUrl\">@sr[\"Cancel\"]</a>\n\n            @if (Model.IsPublished && Model.HasDraft)\n            {\n                <button type=\"button\" class=\"btn btn-danger\" data-bs-toggle=\"modal\" data-bs-target=\"#confirmDeleteDraft\">\n                    @sr[\"Delete Draft\"]\n                </button>\n            }\n\n            <button id=\"btnSaveDraft\" name=\"SaveMode\" value=\"@SaveMode.SaveDraft\" type=\"submit\" class=\"btn btn-primary\" data-disabled-text='@sr[\"Working...\"]' data-enabled-text='@sr[\"Save Draft\"]'>@sr[\"Save Draft\"]</button>\n            <button id=\"btnSavePublish\" name=\"SaveMode\" type=\"submit\" value=\"@SaveMode.PublishNow\" class=\"btn btn-primary\" data-disabled-text='@sr[\"Working...\"]' data-enabled-text='@sr[\"Publish Now\"]'>@sr[\"Publish Now\"]</button>\n\n        </div>\n\n\n        <div class=\"mb-3 mt-1 col-3 w-auto\">\n\n            <div class=\"row align-items-left gx-1\">\n                <div class=\"col-md-2 w-auto\">\n                    <button id=\"SaveMode\" name=\"SaveMode\" value=\"@SaveMode.PublishLater\" type=\"submit\" class=\"btn btn-primary\" data-disabled-text='@sr[\"Working...\"]' data-enabled-text='@sr[\"Publish at Date/Time:\"]'>@sr[\"Publish at Date/Time:\"]</button>\n                </div>\n                <div class=\"ms-0 col-md-3 w-auto\">\n                    <partial name=\"EditWithTemplatePubDate\" model=\"@Model\" />\n                </div>\n            </div>\n\n        </div>\n\n\n        <div class=\"mb-3 mt-1 col-3 w-auto\">\n            @if (!string.IsNullOrEmpty(Model.Id))\n            {\n                <button type=\"button\" class=\"btn btn-danger\" data-bs-toggle=\"modal\" data-bs-target=\"#confirmDeleteModal\">\n                    @sr[\"Delete\"]\n                </button>\n            }\n\n        </div>\n    </div>\n\n\n\n    <div class=\"modal fade\" id=\"confirmDeleteDraft\" tabindex=\"-1\" role=\"dialog\" aria-labelledby=\"confirmDeleteDraftHeading\" aria-hidden=\"true\">\n        <div class=\"modal-dialog\">\n            <div class=\"modal-content\">\n                <div class=\"modal-header\">\n                    <h4 class=\"modal-title\" id=\"confirmDeleteDraftHeading\">@sr[\"Confirm Delete Draft\"]</h4>\n                    <button type=\"button\" data-bs-dismiss=\"modal\" class=\"btn-close\" aria-label='@sr[\"Close\"]'></button>\n                </div>\n                <div class=\"modal-body\">\n                    @sr[\"Are you sure you want to delete the current draft version of this page?\"]\n                </div>\n                <div class=\"modal-footer\">\n                    <button type=\"button\" class=\"btn btn-primary\" data-bs-dismiss=\"modal\">@sr[\"Cancel\"]</button>\n                    <button id=\"btnDeleteCurrentDraft\" name=\"SaveMode\" value=\"@SaveMode.DeleteCurrentDraft\" type=\"submit\" class=\"btn btn-danger btn-ok\" data-disabled-text='@sr[\"Working...\"]' data-enabled-text='@sr[\"Delete Draft\"]'>@sr[\"Delete Draft\"]</button>\n                </div>\n            </div>\n        </div>\n    </div>\n\n</form>\n<partial name=\"EditWithTemplateDraftPubDatePartial\" model=\"@Model\" />\n@if (!string.IsNullOrEmpty(Model.Id))\n{\n    <form id=\"deleteform\" class=\"form-inline\" asp-route=\"@Model.DeletePostRouteName\">\n        <input asp-for=\"Id\" type=\"hidden\" />\n        <div class=\"modal fade\" id=\"confirmDeleteModal\" tabindex=\"-1\" role=\"dialog\" aria-labelledby=\"confirmDeleteHeading\">\n            <div class=\"modal-dialog modal-sm\" role=\"document\">\n                <div class=\"modal-content\">\n                    <div class=\"modal-header\">\n                        <h4 class=\"modal-title\" id=\"confirmDeleteHeading\">@sr[\"Confirm Delete\"]</h4>\n                        <button type=\"button\" data-bs-dismiss=\"modal\" class=\"btn-close\" aria-label='@sr[\"Close\"]'></button>\n                    </div>\n                    <div class=\"modal-body\">\n                        @string.Format(sr[\"Are you sure you want to delete the post {0}?\"], Model.Title)\n                    </div>\n                    <div class=\"modal-footer\">\n                        <button type=\"button\" class=\"btn btn-primary\" data-bs-dismiss=\"modal\">@sr[\"Cancel\"]</button>\n                        <input type=\"submit\" value='@sr[\"Delete\"]' class=\"btn btn-danger btn-ok\" />\n                    </div>\n                </div>\n            </div>\n        </div>\n\n    </form>\n}\n<div class=\"modal fade\" id=\"dateRequired\" tabindex=\"-1\" role=\"dialog\" aria-labelledby=\"dateRequiredHeading\">\n    <div class=\"modal-dialog modal-sm\" role=\"document\">\n        <div class=\"modal-content\">\n            <div class=\"modal-header\">\n                <h4 class=\"modal-title\" id=\"dateRequiredHeading\">@sr[\"Date Required\"]</h4>\n                <button type=\"button\" data-bs-dismiss=\"modal\" class=\"btn-close\" aria-label='@sr[\"Close\"]'></button>\n            </div>\n            <div class=\"modal-body\">\n                @sr[\"To publish later you must enter a date.\"]\n            </div>\n            <div class=\"modal-footer\">\n                <button type=\"button\" class=\"btn btn-primary\" data-bs-dismiss=\"modal\">@sr[\"Ok\"]</button>\n\n            </div>\n        </div>\n    </div>\n</div>\n@section Scripts {\n    <partial name=\"EditWithTemplateScriptsPartial\" model=\"@Model\" />\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.CompiledViews.Bootstrap5/Views/Blog/EditWithTemplateCorrelationKeyPartial.cshtml",
    "content": "﻿@model cloudscribe.SimpleContent.Web.ViewModels.PostEditWithTemplateViewModel\n@inject IStringLocalizer<SimpleContent> sr\n@* comment this and uncomment the below if you want editable correlationkey *@\n<input type=\"hidden\" asp-for=\"@Model.CorrelationKey\" />\n@*\n    <div class=\"mb-3\">\n        <label asp-for=\"CorrelationKey\">@sr[\"Correlation Key\"]</label>\n        <input asp-for=\"CorrelationKey\" class=\"form-control\" />\n        <span asp-validation-for=\"CorrelationKey\" class=\"text-danger\"></span>\n    </div>\n*@ \n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.CompiledViews.Bootstrap5/Views/Blog/EditWithTemplateDraftPubDatePartial.cshtml",
    "content": "﻿@model cloudscribe.SimpleContent.Web.ViewModels.PostEditWithTemplateViewModel\n@inject IStringLocalizer<SimpleContent> sr\n@{ \n    var message = \"\";\n    if(Model.DraftPubDate.HasValue)\n    {\n        var format = sr[\"This content is scheduled to be published {0}. You can still edit and save changes to this draft before it is published by clicking \\\"Save Draft\\\"\"].ToString();\n        message = string.Format(format, Model.DraftPubDate.Value);\n    }\n\n}\n@if (Model.DraftPubDate.HasValue)\n{\n    <p class=\"text-success\"> @message </p>\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.CompiledViews.Bootstrap5/Views/Blog/EditWithTemplateHistoryInfoPartial.cshtml",
    "content": "﻿@model cloudscribe.SimpleContent.Web.ViewModels.PostEditWithTemplateViewModel\n@inject IStringLocalizer<SimpleContent> sr\n@if (Model.HistoryId.HasValue)\n{\n    <div class=\"alert alert-warning\" role=\"alert\">\n        @if (Model.DidReplaceDraft)\n        {\n            @sr[\"A previous version of this post has been restored to the editor, replacing the current draft version. If this is not intended, do not save/publish this version.\"]\n        }\n        @if (Model.DidRestoreDeleted)\n        {\n            @sr[\"You've just restored a previously deleted post to the editor; click save/publish to re-create the post. If this is not intended, do not save/publish this version.\"]\n        }\n        @if (!Model.DidReplaceDraft && !Model.DidRestoreDeleted)\n        {\n            @sr[\"A previous version of this post has been restored to the editor. If this is not intended, do not save/publish this version.\"]\n        }\n    </div>\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.CompiledViews.Bootstrap5/Views/Blog/EditWithTemplateImageUrlPartial.cshtml",
    "content": "﻿@model cloudscribe.SimpleContent.Web.ViewModels.PostEditWithTemplateViewModel\n@inject IStringLocalizer<SimpleContent> sr\n@* comment this and uncomment the below if you want editable image/thumbnail *@\n<input type=\"hidden\" asp-for=\"@Model.ImageUrl\" />\n<input type=\"hidden\" asp-for=\"@Model.ThumbnailUrl\" />\n@*\n    <div class=\"mb-3\">\n        <label asp-for=\"ImageUrl\">@sr[\"Image Url\"]</label>\n        <input asp-for=\"ImageUrl\" class=\"form-control\" />\n        <span asp-validation-for=\"ImageUrl\" class=\"text-danger\"></span>\n    </div>\n     <div class=\"mb-3\">\n        <label asp-for=\"ThumbnailUrl\">@sr[\"Thumbnail Url\"]</label>\n        <input asp-for=\"ThumbnailUrl\" class=\"form-control\" />\n        <span asp-validation-for=\"ThumbnailUrl\" class=\"text-danger\"></span>\n    </div>\n*@ \n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.CompiledViews.Bootstrap5/Views/Blog/EditWithTemplatePubDate.cshtml",
    "content": "﻿@model cloudscribe.SimpleContent.Web.ViewModels.PostEditWithTemplateViewModel\n@inject IStringLocalizer<SimpleContent> sr\n<input asp-for=\"NewPubDate\" type=\"hidden\" />\n<span asp-validation-for=\"NewPubDate\" class=\"invalid-feedback\"></span>\n<input type=\"text\" id=\"PubDateDisplay\" class=\"form-control\"\n       data-bs-datepicker=\"true\"\n       data-bs-datepicker-iso-target-id=\"NewPubDate\"\n       data-bs-datepicker-iso-format=\"YYYY-MM-DDTHH:mm:ss.sss\"\n       value='@Model.NewPubDate?.ToString(\"g\")'\n       data-bs-datepicker-debug=\"false\"\n       data-bs-datepicker-keepOpen=\"false\"\n       data-bs-datepicker-allowInputToggle=\"true\"\n       data-bs-datepicker-locale=\"@CultureInfo.CurrentCulture.Name\" />\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.CompiledViews.Bootstrap5/Views/Blog/EditWithTemplateScriptsPartial.cshtml",
    "content": "﻿@model cloudscribe.SimpleContent.Web.ViewModels.PostEditWithTemplateViewModel\n<script src=\"~/cr/js/jquery.validate.min.js\"></script>\n<script src=\"~/cr/js/jquery.validate.unobtrusive.min.js\"></script>\n<script src=\"~/cr/js/unobtrusive-validation-bs4.min.js\"></script>\n<script src=\"~/cr/js/jquery.validate.hooks.min.js\"></script>\n<script src=\"~/cr/js/jqueryvaildation.submitonce-unobtrusive.min.js\"></script>\n<script src=\"/cr/js/unsaved-changes-prompt.min.js\"></script>\n<script src=\"~/cr/js/ckeditor4114/ckeditor.js\"></script>\n<script src=\"~/cr/js/cloudscribe-ckeditor-unobtrusive.min.js\"></script>\n<script src=\"~/cr/js/moment-with-locales.min.js\"></script>\n<script src=\"~/cr/js/bootstrap4-datetimepicker.min.js\"></script>\n<script src=\"~/cr/js/cloudscribe-datepicker-bootstrap4-unobtrusive.min.js\"></script>\n<environment names=\"Development\">\n    @foreach (var c in Model.Template.EditScripts.Where(x => (x.Environment == \"dev\" || x.Environment == \"any\")).OrderBy(x => x.Sort).ThenBy(x => x.Url).ToList())\n    {\n        <script src=\"@Url.Content(c.Url)\" asp-append-version=\"@(c.Url.StartsWith(\"/\"))\"></script>\n    }\n</environment>\n<environment names=\"Staging,Production\">\n    @foreach (var c in Model.Template.EditScripts.Where(x => (x.Environment == \"prod\" || x.Environment == \"any\")).OrderBy(x => x.Sort).ThenBy(x => x.Url).ToList())\n    {\n        <script src=\"@Url.Content(c.Url)\" asp-append-version=\"@(c.Url.StartsWith(\"/\"))\"></script>\n    }\n</environment>\n<script src=\"/csscsr/js/edit-script.js\"></script>\n<partial name=\"SummernoteScripts\" />"
  },
  {
    "path": "src/cloudscribe.SimpleContent.CompiledViews.Bootstrap5/Views/Blog/EditWithTemplateSlugPartial.cshtml",
    "content": "﻿@model cloudscribe.SimpleContent.Web.ViewModels.PostEditWithTemplateViewModel\n@inject IStringLocalizer<SimpleContent> sr\n@* comment this and uncomment the below if you want editable slug*@\n<input type=\"hidden\" asp-for=\"@Model.Slug\" />\n@*<div class=\"mb-3\">\n        <label asp-for=\"Slug\">@sr[\"Slug\"]</label>\n        <input asp-for=\"Slug\" class=\"form-control\" />\n        <span asp-validation-for=\"Slug\" class=\"text-danger\"></span>\n    </div>\n*@\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.CompiledViews.Bootstrap5/Views/Blog/EditWithTemplateStylesPartial.cshtml",
    "content": "﻿@model cloudscribe.SimpleContent.Web.ViewModels.PostEditWithTemplateViewModel\n<link rel=\"stylesheet\" href=\"~/cr/css/bootstrap4-datetimepicker.min.css\" />\n<environment names=\"Development\">\n    @foreach (var c in Model.Template.EditCss.Where(x => (x.Environment == \"dev\" || x.Environment == \"any\")).OrderBy(x => x.Sort).ThenBy(x => x.Url).ToList())\n    {\n        <link rel=\"stylesheet\" href=\"@Url.Content(c.Url)\" asp-append-version=\"@(c.Url.StartsWith(\"/\"))\" />\n    }\n</environment>\n<environment names=\"Staging,Production\">\n    @foreach (var c in Model.Template.EditCss.Where(x => (x.Environment == \"prod\" || x.Environment == \"any\")).OrderBy(x => x.Sort).ThenBy(x => x.Url).ToList())\n    {\n        <link rel=\"stylesheet\" href=\"@Url.Content(c.Url)\" asp-append-version=\"@(c.Url.StartsWith(\"/\"))\" />\n    }\n</environment>\n<link href=\"/cr/css/summernote-bs5.min.css\" rel=\"stylesheet\">"
  },
  {
    "path": "src/cloudscribe.SimpleContent.CompiledViews.Bootstrap5/Views/Blog/EditWithTemplateTeaserHtmlPartial.cshtml",
    "content": "﻿@model cloudscribe.SimpleContent.Web.ViewModels.PostEditWithTemplateViewModel\n@inject ISummernoteOptionsResolver summernoteOptionsResolver\n@inject ICkeditorOptionsResolver editorOptionsResolver\n@inject IStringLocalizer<SimpleContent> sr\n@{\n    var summernoteOptions = await summernoteOptionsResolver.GetSummernoteOptions();\n    var ckOptions = await editorOptionsResolver.GetCkeditorOptions();\n}\n<div class=\"mb-3\">\n    <label asp-for=\"TeaserOverride\">@sr[\"Teaser Override\"]</label>\n    <textarea asp-for=\"TeaserOverride\" class=\"form-control\" rows=\"10\" cols=\"70\"\n        data-summernote-unobtrusive=\"\"\n        data-summernote-config-url=\"@summernoteOptions.CustomConfigPath\"\n        data-summernote-toolbar-config-url=\"@summernoteOptions.CustomToolbarConfigPath\"\n        data-summernote-config-language=\"@summernoteOptions.LanguageCode\"\n        data-summernote-config-dropfileuploadurl=\"@summernoteOptions.DropFileUrl\"\n        data-summernote-config-filebrowserurl=\"@summernoteOptions.FileBrowseUrl\"\n        data-summernote-config-imagebrowseurl=\"@summernoteOptions.ImageBrowseUrl\">\n    </textarea>\n</div>\n<div class=\"mb-3\">\n    <div class=\"form-check\" data-bs-toggle=\"tooltip\" data-placement=\"left\" title='@sr[\"If checked, then show entire blog post on index/listing pages regardless of teaser settings.\"]'>\n        <input asp-for=\"SuppressTeaser\" class=\"form-check-input\" />\n        <label asp-for=\"SuppressTeaser\" class=\"form-check-label\">@sr[\"No teaser, use full post\"]</label>\n    </div>\n</div>\n\n\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.CompiledViews.Bootstrap5/Views/Blog/History.cshtml",
    "content": "﻿@model cloudscribe.SimpleContent.Web.ViewModels.ContentHistoryViewModel\n@inject IStringLocalizer<SimpleContent> sr\n@inject IBlogRoutes  blogRoutes\n@{\n    var format = sr[\"{0} - Content Edit History\"].ToString();\n    ViewData[\"Title\"] = string.Format(format, Model.ContentTitle);\n    \n}\n<h1>@ViewData[\"Title\"]</h1>\n<a asp-route=\"@blogRoutes.PostWithoutDateRouteName\" asp-route-slug=\"@Model.ContentSlug\" itemprop=\"url\">@sr[\"View current version\"]</a>\n<partial name=\"HistoryGridPartial\" model=\"@Model\" />\n<cs-pager asp-route=\"@blogRoutes.PostHistoryRouteName\"\n          asp-route-slug=\"@Model.ContentSlug\"\n          asp-route-sortmode=\"@Model.SortMode\"\n          asp-route-pagesize=\"@Model.History.PageSize\"\n          cs-paging-pagesize=\"@Model.History.PageSize\"\n          cs-paging-pagenumber=\"@Model.History.PageNumber\"\n          cs-paging-totalitems=\"@Model.History.TotalItems\"\n          cs-pager-ul-class=\"pagination d-flex flex-wrap\"\n          cs-pager-li-current-class=\"page-item active\"\n          cs-pager-li-other-class=\"page-item\"\n          cs-pager-li-non-active-class=\"page-item disabled\"\n          cs-pager-link-current-class=\"page-link\"\n          cs-pager-link-other-class=\"page-link\"\n          cs-first-page-title='@sr[\"First Page\"]'\n          cs-last-page-title='@sr[\"Last Page\"]'\n          cs-previous-page-title='@sr[\"Previous page\"]'\n          cs-next-page-title='@sr[\"Next page\"]'></cs-pager>\n\n@if (Model.CanEditPosts)\n{\n<form role=\"form\" asp-controller=\"Blog\" asp-action=\"DeleteHistoryOlderThan\">\n\n    <div class=\"row align-items-left mt-1 mb-1 gx-2\">\n        <div class=\"col-2 w-auto align-self-center\">\n            <input type=\"hidden\" name=\"id\" value=\"@Model.ContentId\" />\n            <input type=\"submit\" value='@sr[\"Delete Older Than\"]' class=\"btn btn-sm btn-danger \" />\n\n        </div>\n        <div class=\"col-2 w-auto align-self-center\">\n            <select class=\"form-control ms-1 me-1\" name=\"days\" id=\"days\">\n                <option value=\"-1\">All</option>\n                <option>10</option>\n                <option>20</option>\n                <option>30</option>\n                <option>60</option>\n                <option>90</option>\n                <option>120</option>\n            </select>\n        </div>\n\n        <div class=\"col-3 w-auto align-self-center\">\n            @sr[\"Days\"]\n        </div>\n    </div>\n\n\n\n\n\n</form>\n\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.CompiledViews.Bootstrap5/Views/Blog/HistoryInfoPartial.cshtml",
    "content": "﻿@model cloudscribe.SimpleContent.Web.ViewModels.BlogViewModel\n@inject IStringLocalizer<SimpleContent> sr\n@inject IBlogRoutes blogRoutes\n@if (Model.HistoryId.HasValue && Model.HistoryArchiveDate.HasValue)\n{\n    <div class=\"alert alert-warning\" role=\"alert\">\n        @sr[\"You are currently viewing a previous version of this post that was archived\"]&nbsp;@Model.FormatDateForEdit(Model.HistoryArchiveDate.Value)\n        @if (Model.HasPublishedVersion)\n        {\n            <a class=\"btn btn-primary btn-sm\" href=\"@Url.RouteUrl(blogRoutes.PostWithoutDateRouteName, new { slug = Model.CurrentPost.Slug })\">@sr[\"View published version.\"]</a>\n        }\n        <a class=\"btn btn-primary btn-sm\" href=\"@Url.RouteUrl(blogRoutes.PostEditRouteName, new { slug = Model.CurrentPost.Slug, historyId = Model.HistoryId.Value })\">@sr[\"Restore this version to editor\"]</a>\n        <button type=\"button\" class=\"btn btn-danger btn-sm\" data-bs-toggle=\"modal\" data-bs-target=\"#confirmDeleteHistory\">\n            @sr[\"Delete this version history item\"]\n        </button>\n    </div>\n    <form asp-controller=\"ContentHistory\" asp-action=\"DeleteHistory\">\n        <input type=\"hidden\" name=\"id\" value=\"@Model.HistoryId\" />\n        <div class=\"modal fade\" id=\"confirmDeleteHistory\" tabindex=\"-1\" role=\"dialog\" aria-labelledby=\"confirmDeleteHistoryHeading\">\n            <div class=\"modal-dialog modal-sm\" role=\"document\">\n                <div class=\"modal-content\">\n                    <div class=\"modal-header\">\n                        <h4 class=\"modal-title\" id=\"confirmDeleteHistoryHeading\">@sr[\"Confirm Delete\"]</h4>\n                        <button type=\"button\" data-bs-dismiss=\"modal\" class=\"btn-close\" aria-label='@sr[\"Close\"]'></button>\n                    </div>\n                    <div class=\"modal-body\">\n                        @sr[\"Are you sure you want to permanently delete this version history item?\"]\n                    </div>\n                    <div class=\"modal-footer\">\n                        <button type=\"button\" class=\"btn btn-primary\" data-bs-dismiss=\"modal\">@sr[\"Cancel\"]</button>\n                        <input type=\"submit\" value='@sr[\"Delete\"]' class=\"btn btn-danger btn-ok\" />\n                    </div>\n                </div>\n            </div>\n        </div>\n    </form>\n\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.CompiledViews.Bootstrap5/Views/Blog/Index.cshtml",
    "content": "﻿@model cloudscribe.SimpleContent.Web.ViewModels.BlogViewModel\n@inject IUrlHelper myhelper\n@inject IStringLocalizer<SimpleContent> sr\n@{\n    var disqusCommentCountScriptPath = \"//\" + Model.ProjectSettings.DisqusShortName + \".disqus.com/count.js\";\n    ViewData[\"AsidePrimaryVisible\"] = Model.ProjectSettings.ShowBlogCategories || Model.ProjectSettings.ShowArchivedPosts || Model.ProjectSettings.ShowRelatedPosts || Model.ProjectSettings.ShowAboutBox ? true : false;\n    ViewData[\"AsidePrimaryToggle\"] = \"show\";\n}\n@section Meta {\n    <meta name=\"robots\" content=\"noindex, follow\" />\n    <partial name=\"BlogMetaPartial\" model=\"@Model\" />\n}\n@section Styles {\n    <partial name=\"BlogStylePartial\" model=\"@Model\" />\n    <link rel=\"stylesheet\" href=\"/cr/css/baguetteBox.min.css\" />\n    <link rel=\"stylesheet\" href=\"/csscsr/css/simple-gallery.min.css\" />\n}\n@section Toolbar {\n    <partial name=\"ToolsPartial\" model=\"@Model\" />\n}\n<partial name=\"BlogHeaderPartial\" model=\"@Model.ProjectSettings\" />\n\n<div itemscope itemtype=\"http://schema.org/Blog\" class=\"blogroot\">\n    <partial name=\"PostListPartial\" model=\"@Model\" />\n</div>\n<nav>\n    <cs-pager cs-paging-info=\"@Model.Paging\"\n              cs-pagenumber-param=\"page\"\n              cs-show-first-last=\"false\"\n              cs-show-numbered=\"false\"\n              cs-use-reverse-increment=\"true\"\n              cs-suppress-empty-nextprev=\"true\"\n              cs-previous-page-text='@sr[\"< Older\"]'\n              cs-next-page-text='@sr[\"Newer >\"]'\n              asp-route=\"@Model.ListRouteName\"\n              asp-route-category=\"@Model.CurrentCategory\"\n              cs-pager-ul-class=\"pagination d-flex flex-wrap\"\n              cs-pager-li-current-class=\"page-item active\"\n              cs-pager-li-other-class=\"page-item\"\n              cs-pager-li-non-active-class=\"page-item disabled\"\n              cs-pager-link-current-class=\"page-link\"\n              cs-pager-link-other-class=\"page-link\"></cs-pager>\n</nav>\n\n@if (Model.ProjectSettings.ShowBlogCategories || Model.ProjectSettings.ShowArchivedPosts || Model.ProjectSettings.ShowRelatedPosts || Model.ProjectSettings.ShowAboutBox)\n{\n    @section AsidePrimary {\n        <partial name=\"SideBarPartial\" model=\"@Model\" />\n    }\n}\n\n@section Scripts {\n    @if (!string.IsNullOrEmpty(Model.ProjectSettings.DisqusShortName))\n    {\n        <script id=\"dsq-count-scr\" src=\"@disqusCommentCountScriptPath\" async></script>\n    }\n    <partial name=\"BlogScriptsPartial\" model=\"@Model\" />\n    <script src=\"/cr/js/baguetteBox.min.js\"></script>\n    <script src=\"/csscsr/js/sc-simple-gallery-init.js\"></script>\n    \n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.CompiledViews.Bootstrap5/Views/Blog/NewPost.cshtml",
    "content": "﻿@model cloudscribe.SimpleContent.Web.ViewModels.NewContentViewModel\n@inject IStringLocalizer<SimpleContent> sr\n@inject IBlogRoutes  blogRoutes\n@{\n    ViewData[\"Title\"] = sr[\"Create a New Post\"];\n}\n<h2>@ViewData[\"Title\"]</h2>\n<a class=\"btn btn-primary\" asp-route=\"@blogRoutes.PostEditRouteName\" asp-route-type=\"@Model.ContentType\">@sr[\"New Post with Standard Content Editor\"]</a>\n@if (Model.CountOfTemplates > 0)\n{\n    <h3>@sr[\"Create Post From Template\"]</h3>\n    <partial name=\"NewContentPartial\" model=\"@Model\" />\n}\n@section Scripts {\n    <partial name=\"_UnobtrusiveValidationScriptsPartial\" />\n    <script src=\"~/cr/js/unobtrusive-validation-bs4.min.js\"></script>\n    <script src=\"~/cr/js/jquery.validate.hooks.min.js\"></script>\n    <script src=\"~/cr/js/jqueryvaildation.submitonce-unobtrusive.min.js\"></script>\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.CompiledViews.Bootstrap5/Views/Blog/NextPreviousPartial.cshtml",
    "content": "﻿@model cloudscribe.SimpleContent.Web.ViewModels.BlogViewModel\n@inject IStringLocalizer<SimpleContent> sr\n@inject ISimpleContentThemeHelper themeHelper\n@{\n    var themeSettings = themeHelper.GetThemeSettings();\n}\n@functions{\n    public string GetDivClass()\n    {\n        if ((!string.IsNullOrEmpty(Model.PreviousPostUrl)) && (!string.IsNullOrEmpty(Model.NextPostUrl)))\n        {\n            return \"col-4\";\n        }\n        return \"col\";\n    }\n}\n@if ((!string.IsNullOrEmpty(Model.PreviousPostUrl)) || (!string.IsNullOrEmpty(Model.NextPostUrl)))\n{\n    <div class=\"row justify-content-between\">\n        @if (!string.IsNullOrEmpty(Model.PreviousPostUrl))\n        {\n            <div class=\"@GetDivClass()\"><a class=\"btn btn-link\" title=\"@sr[\"Previous Post\"]\" href=\"@Model.PreviousPostUrl\"><i class=\"@themeSettings.Icons.Previous\"></i></a></div>\n        }\n        @if (!string.IsNullOrEmpty(Model.NextPostUrl))\n        {\n            <div class=\"@GetDivClass()\"><a class=\"btn btn-link float-end\" title=\"@sr[\"Next Post\"]\" href=\"@Model.NextPostUrl\"><i class=\"@themeSettings.Icons.Next\"></i></a></div>\n        }\n    </div>\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.CompiledViews.Bootstrap5/Views/Blog/Post.cshtml",
    "content": "﻿@model cloudscribe.SimpleContent.Web.ViewModels.BlogViewModel\n@{\n    var disqusCommentCountScriptPath = \"//\" + Model.ProjectSettings.DisqusShortName + \".disqus.com/count.js\";\n    ViewData[\"AsidePrimaryVisible\"] = Model.ProjectSettings.ShowBlogCategories || Model.ProjectSettings.ShowArchivedPosts || Model.ProjectSettings.ShowRelatedPosts || Model.ProjectSettings.ShowAboutBox ? true : false; ;\n    ViewData[\"AsidePrimaryToggle\"] = \"show\";\n}\n@section Meta {\n    <partial name=\"BlogMetaPartial\" model=\"@Model\" />\n}\n@section Styles {\n    <partial name=\"BlogStylePartial\" model=\"@Model\" />\n    <partial name=\"CommentStylePartial\" />\n}\n@section Toolbar {\n   \n    <partial name=\"ToolsPartial\" model=\"@Model\" />\n    \n}\n@if (Model.ProjectSettings.ShowTitle)\n{\n    <partial name=\"BlogHeaderPartial\" model=\"@Model.ProjectSettings\" />\n}\n<div itemscope itemtype=\"http://schema.org/Blog\" class=\"blogroot\">\n    <partial name=\"PostDetailPartial\" model=\"@Model\" />\n</div>\n\n@if (Model.ProjectSettings.ShowBlogCategories || Model.ProjectSettings.ShowArchivedPosts || Model.ProjectSettings.ShowRelatedPosts || Model.ProjectSettings.ShowAboutBox)\n{\n    @section AsidePrimary {\n        <partial name=\"SideBarPartial\" model=\"@Model\" />\n    }\n}\n@section Scripts {\n    @if (!string.IsNullOrEmpty(Model.ProjectSettings.DisqusShortName))\n    {\n        <script id=\"dsq-count-scr\" src=\"@disqusCommentCountScriptPath\" async></script>\n    }\n    else if (Model.CommentsAreOpen)\n    {\n        <partial name=\"CommentScriptsPartial\" />\n    }\n    <partial name=\"BlogScriptsPartial\" model=\"@Model\" />\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.CompiledViews.Bootstrap5/Views/Blog/PostContentBodyPartial.cshtml",
    "content": "﻿@model cloudscribe.SimpleContent.Web.ViewModels.BlogViewModel\n@inject IStringLocalizer<SimpleContent> sr\n@inject IContentTemplateService templateService;\n@{\n    string dynamicViewName = null;\n    object templateModel = null;\n    if (Model.CurrentPost != null && !string.IsNullOrWhiteSpace(Model.CurrentPost.TemplateKey))\n    {\n        var template = await templateService.GetTemplate(Model.CurrentPost.BlogId, Model.CurrentPost.TemplateKey);\n        if (template != null && !string.IsNullOrWhiteSpace(template.DynamicRenderPartialView))\n        {\n            templateModel = templateService.DesrializeTemplateModel(Model.CurrentPost, template);\n            dynamicViewName = template.DynamicRenderPartialView;\n        }\n    }\n}\n@if (templateModel != null && !string.IsNullOrWhiteSpace(dynamicViewName))\n{\n    <partial name=\"@dynamicViewName\" model=\"@templateModel\" />\n}\nelse\n{\n    <div itemprop=\"articleBody\">@Html.Raw(Model.FilterHtml(Model.CurrentPost))</div>\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.CompiledViews.Bootstrap5/Views/Blog/PostDetailPartial.cshtml",
    "content": "﻿@using cloudscribe.SimpleContent.Web\n@using cloudscribe.SimpleContent.Models\n@using Microsoft.AspNetCore.Mvc.ViewFeatures\n@model cloudscribe.SimpleContent.Web.ViewModels.BlogViewModel\n@using cloudscribe.SimpleContent.Web.Design\n@using Microsoft.Extensions.Options\n@using Microsoft.Extensions.Localization\n@using System.Globalization\n@inject IStringLocalizer<SimpleContent> sr\n@inject ISimpleContentThemeHelper themeHelper\n@{\n    var themeSettings = themeHelper.GetThemeSettings();\n}\n@functions{\n\n    public string GetPubDateClass()\n    {\n        if (Model.CurrentPost != null && Model.CurrentPost.PubDate > DateTime.UtcNow) return \"lead text-danger\";\n\n        return null;\n    }\n}\n<article class=\"post\" data-id=\"@Model.CurrentPost.Id\"\n         data-approve-comment-url=\"@Url.Action(\"AjaxApproveComment\", \"Blog\")\"\n         data-delete-comment-url=\"@Url.Action(\"AjaxDeleteComment\", \"Blog\")\"\n         itemscope itemtype=\"http://schema.org/BlogPosting\" itemprop=\"blogPost\">\n    <partial name=\"DraftInfoPartial\" model=\"@Model\" />\n    <partial name=\"HistoryInfoPartial\" model=\"@Model\" />\n    <header class=\"jumbotron\">\n        @if (Model.ProjectSettings.ShowTitle)\n        {\n            <h1 itemprop=\"headline name\">@Model.CurrentPost.Title</h1>\n        }\n        else\n        {\n            <h1 itemprop=\"headline name\">@Model.CurrentPost.Title</h1>\n        }\n        <div class=\"bh\">\n            @{\n                DateTime? pubDate = Model.CurrentPost.PubDate;\n                if (!pubDate.HasValue) { pubDate = DateTime.UtcNow; }\n            }\n            <time class=\"@GetPubDateClass()\" datetime='@pubDate.Value.ToString(\"s\")' itemprop=\"datePublished\">@Model.FormatDate(pubDate.Value)</time>\n            @if (Model.ShowComments)\n            {\n                <partial name=\"CommentLinkDetail\" model=\"@Model\" />\n            }\n            @if (Model.CurrentPost.Categories.Count > 0)\n            {\n                <ul class=\"categories\">\n                    <li><i class=\"@themeSettings.Icons.Tags\"></i>&nbsp; @sr[\"Posted in:\"] </li>\n                    @foreach (string cat in Model.CurrentPost.Categories)\n                    {\n                        <li itemprop=\"articleSection\">\n                            <a asp-controller=\"Blog\" asp-action=\"Category\" asp-route-category=\"@cat\">@cat</a>\n                        </li>\n                    }\n                </ul>\n            }\n            </div>\n    </header>\n    <partial name=\"NextPreviousPartial\" model=\"@Model\" />\n    <partial name=\"PostContentBodyPartial\" model=\"@Model\" />\n    @{\n        var imageUrl = Model.ExtractFirstImageUrl(Model.CurrentPost, Url);\n        var imageSize = Model.ExtractFirstImageDimensions(Model.CurrentPost);\n    }\n    @if (!string.IsNullOrEmpty(imageUrl))\n    {\n        <div class=\"collapse\" aria-hidden=\"true\" itemprop=\"image\" itemscope itemtype=\"http://schema.org/ImageObject\">\n            <schema-org-meta itemprop=\"url\" content=\"@imageUrl\"></schema-org-meta>\n            <schema-org-meta itemprop=\"width\" content=\"@imageSize.Width\"></schema-org-meta>\n            <schema-org-meta itemprop=\"height\" content=\"@imageSize.Height\"></schema-org-meta>\n        </div>\n    }\n    @if (!string.IsNullOrEmpty(Model.CurrentPost.Author))\n    {\n        <div class=\"collapse\" aria-hidden=\"true\" itemprop=\"author\" itemscope itemtype=\"http://schema.org/Person\">\n            <schema-org-meta itemprop=\"name\" content=\"@Model.CurrentPost.Author\"></schema-org-meta>\n        </div>\n    }\n    @if (!string.IsNullOrEmpty(Model.ProjectSettings.Publisher))\n    {\n        <div class=\"collapse\" aria-hidden=\"true\" itemprop=\"publisher\" itemscope itemtype=\"http://schema.org/@Model.ProjectSettings.PublisherEntityType\">\n            <schema-org-meta itemprop=\"name\" content=\"@Model.ProjectSettings.Publisher\"></schema-org-meta>\n            <div class=\"collapse\" aria-hidden=\"true\" itemprop=\"logo\" itemscope itemtype=\"http://schema.org/ImageObject\">\n                <schema-org-meta itemprop=\"url\" content=\"@Model.ProjectSettings.PublisherLogoUrl\"></schema-org-meta>\n                <schema-org-meta itemprop=\"width\" content=\"@Model.ProjectSettings.PublisherLogoWidth\"></schema-org-meta>\n                <schema-org-meta itemprop=\"height\" content=\"@Model.ProjectSettings.PublisherLogoHeight\"></schema-org-meta>\n            </div>\n        </div>\n    }\n    @if (Model.CurrentPost.PubDate.HasValue)\n    {\n        <schema-org-meta itemprop=\"dateModified\" content=\"@Model.CurrentPost.PubDate.Value.ToString(\"s\", CultureInfo.InvariantCulture)\"></schema-org-meta>\n    }\n    @if (Model.CurrentPost.IsPublished && !Model.ShowingDraft && !Model.HistoryId.HasValue)\n    {\n        @if (string.IsNullOrEmpty(Model.ProjectSettings.DisqusShortName))\n        {\n            <partial name=\"CommentWrapperPartial\" model=\"@Model\" />\n        }\n        else\n        {\n            <partial name=\"DisqusCommentsPartial\" model=\"@Model\" />\n        }\n    }\n</article>\n@if (Model.CurrentPost != null && Model.CanEdit && !Model.ShowingDeleted && !Model.ShowingDraft && !Model.HistoryId.HasValue && Model.CurrentPost.IsPublished)\n{\n    <form id=\"unpubform\" class=\"form-inline\" asp-controller=\"Blog\" asp-action=\"UnPublish\" method=\"post\">\n        <input name=\"id\" value=\"@Model.CurrentPost.Id\" type=\"hidden\" />\n        <div class=\"modal fade\" id=\"confirmUnpublishModal\" tabindex=\"-1\" role=\"dialog\" aria-labelledby=\"confirmUnpublishHeading\">\n            <div class=\"modal-dialog modal-sm\" role=\"document\">\n                <div class=\"modal-content\">\n                    <div class=\"modal-header\">\n                        <h4 class=\"modal-title\" id=\"confirmUnpublishHeading\">@sr[\"Confirm Unpublish\"]</h4>\n                        <button type=\"button\" data-bs-dismiss=\"modal\" class=\"btn-close\" aria-label='@sr[\"Close\"]'></button>\n                    </div>\n                    <div class=\"modal-body\">\n                        @string.Format(sr[\"Are you sure you want to unpublish the post {0}?\"], Model.CurrentPost.Title)\n                    </div>\n                    <div class=\"modal-footer\">\n                        <button type=\"button\" class=\"btn btn-primary\" data-bs-dismiss=\"modal\">@sr[\"Cancel\"]</button>\n                        <input type=\"submit\" value='@sr[\"Unpublish\"]' class=\"btn btn-danger btn-ok\" />\n                    </div>\n                </div>\n            </div>\n        </div>\n    </form>\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.CompiledViews.Bootstrap5/Views/Blog/PostListPartial.cshtml",
    "content": "﻿@model cloudscribe.SimpleContent.Web.ViewModels.BlogViewModel\n@foreach (var post in Model.Posts)\n{\n    Model.TmpPost = post;\n    <partial name=\"PostPartial\" model=\"@Model\" />\n}"
  },
  {
    "path": "src/cloudscribe.SimpleContent.CompiledViews.Bootstrap5/Views/Blog/PostPartial.cshtml",
    "content": "﻿@model cloudscribe.SimpleContent.Web.ViewModels.BlogViewModel\n@inject IStringLocalizer<SimpleContent> sr\n@inject ISimpleContentThemeHelper themeHelper\n@{\n    var themeSettings = themeHelper.GetThemeSettings();\n}\n@functions {\n\n    public string GetPubDateClass()\n    {\n        if (Model.TmpPost != null && Model.TmpPost.PubDate > DateTime.UtcNow) return \"lead text-danger\";\n\n        return null;\n    }\n\n}\n<article class=\"post\" data-id=\"@Model.TmpPost.Id\" itemscope itemtype=\"http://schema.org/BlogPosting\" itemprop=\"blogPost\">\n    <header>\n\n        @{\n            DateTime? pubDate = Model.TmpPost.PubDate;\n            if (!pubDate.HasValue) { pubDate = DateTime.UtcNow; }\n        }\n              \n        <h2 itemprop=\"headline name\">\n            @if (Model.ProjectSettings.IncludePubDateInPostUrls)\n            {\n                <a asp-route=\"@Model.BlogRoutes.PostWithDateRouteName\"\n                    asp-route-year=\"@pubDate.Value.Year\"\n                    asp-route-month=\"@pubDate.Value.Month.ToString(\"00\")\"\n                    asp-route-day=\"@pubDate.Value.Day.ToString(\"00\")\"\n                    asp-route-slug=\"@Model.TmpPost.Slug\"\n                    itemprop=\"url\">@Model.TmpPost.Title</a>\n            }\n            else\n            {\n                <a asp-route=\"@Model.BlogRoutes.PostWithoutDateRouteName\" asp-route-slug=\"@Model.TmpPost.Slug\" itemprop=\"url\">@Model.TmpPost.Title</a>\n            }\n        </h2>       \n\n        <div class=\"bh\">\n            <time class=\"@GetPubDateClass()\" datetime='@pubDate.Value.ToString(\"s\")' itemprop=\"datePublished\">@Model.FormatDate(pubDate.Value)</time>\n            @if (Model.TmpPost.ShowComments)\n            {\n                <partial name=\"CommentLinkList\" model=\"@Model\" />\n            }\n            @if (Model.TmpPost.Categories.Count > 0)\n            {\n                <ul class=\"categories\">\n                    <li><i class=\"@themeSettings.Icons.Tags\"></i>&nbsp;@sr[\"Posted in:\"] </li>\n                    @foreach (string cat in Model.TmpPost.Categories)\n                    {\n                        <li itemprop=\"articleSection\"><a asp-controller=\"Blog\" asp-action=\"Category\" asp-route-category=\"@cat\">@cat</a></li>\n                    }\n                </ul>\n            }\n        </div>\n    </header>\n    <div itemprop=\"articleBody\">\n        @if (!Model.TmpPost.IsPublished)\n        {\n            <div class=\"alert alert-info\" role=\"alert\">\n                @sr[\"This is an unpublished draft.\"]\n            </div>\n        }\n        else if (Model.CanEdit && Model.TmpPost.HasDraftVersion())\n        {\n            <div class=\"alert alert-info\" role=\"alert\">\n                @sr[\"This is the published version, but this post has an unpublished draft.\"]\n            </div>\n        }\n        @{\n            var result = Model.FilterHtmlForList(Model.TmpPost);\n        }\n        @Html.Raw(result.FilteredContent)\n        @if (!result.IsFullContent)\n        {@if (Model.ProjectSettings.IncludePubDateInPostUrls)\n            {\n                <a asp-route=\"@Model.BlogRoutes.PostWithDateRouteName\"\n           asp-route-year=\"@pubDate.Value.Year\"\n           asp-route-month=\"@pubDate.Value.Month.ToString(\"00\")\"\n           asp-route-day=\"@pubDate.Value.Day.ToString(\"00\")\"\n           asp-route-slug=\"@Model.TmpPost.Slug\"\n                   itemprop=\"url\">@sr[\"[...Read More]\"]</a>\n            }\n            else\n            {\n                <a asp-route=\"@Model.BlogRoutes.PostWithoutDateRouteName\" asp-route-slug=\"@Model.TmpPost.Slug\" itemprop=\"url\">@sr[\"[...Read More]\"]</a>\n            }\n        }\n    </div>\n    @{\n        var imageUrl = Model.ExtractFirstImageUrl(Model.TmpPost, Url);\n        var imageSize = Model.ExtractFirstImageDimensions(Model.TmpPost);\n    }\n    @if (!string.IsNullOrEmpty(imageUrl))\n    {\n        <div class=\"collapse\" aria-hidden=\"true\" itemprop=\"image\" itemscope itemtype=\"http://schema.org/ImageObject\">\n            <schema-org-meta itemprop=\"url\" content=\"@imageUrl\"></schema-org-meta>\n            <schema-org-meta itemprop=\"width\" content=\"@imageSize.Width\"></schema-org-meta>\n            <schema-org-meta itemprop=\"height\" content=\"@imageSize.Height\"></schema-org-meta>\n        </div>\n    }\n    @if (!string.IsNullOrEmpty(Model.TmpPost.Author))\n    {\n        <div class=\"collapse\" aria-hidden=\"true\" itemprop=\"author\" itemscope itemtype=\"http://schema.org/Person\">\n            <schema-org-meta itemprop=\"name\" content=\"@Model.TmpPost.Author\"></schema-org-meta>\n        </div>\n    }\n    @if (!string.IsNullOrEmpty(Model.ProjectSettings.Publisher))\n    {\n        <div class=\"collapse\" aria-hidden=\"true\" itemprop=\"publisher\" itemscope itemtype=\"http://schema.org/@Model.ProjectSettings.PublisherEntityType\">\n            <schema-org-meta itemprop=\"name\" content=\"@Model.ProjectSettings.Publisher\"></schema-org-meta>\n            <div class=\"collapse\" aria-hidden=\"true\" itemprop=\"logo\" itemscope itemtype=\"http://schema.org/ImageObject\">\n                <schema-org-meta itemprop=\"url\" content=\"@Model.ProjectSettings.PublisherLogoUrl\"></schema-org-meta>\n                <schema-org-meta itemprop=\"width\" content=\"@Model.ProjectSettings.PublisherLogoWidth\"></schema-org-meta>\n                <schema-org-meta itemprop=\"height\" content=\"@Model.ProjectSettings.PublisherLogoHeight\"></schema-org-meta>\n            </div>\n        </div>\n    }\n    @if (Model.TmpPost.PubDate.HasValue)\n    {\n        <schema-org-meta itemprop=\"dateModified\" content=\"@Model.TmpPost.PubDate.Value.ToString(\"s\", CultureInfo.InvariantCulture)\"></schema-org-meta>\n    }\n</article>\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.CompiledViews.Bootstrap5/Views/Blog/RelatedPostsPartial.cshtml",
    "content": "﻿@model cloudscribe.SimpleContent.Web.ViewModels.BlogViewModel\n@{\n}\n@if (Model.CurrentPost != null && Model.CurrentPost.Categories.Count > 0)\n{\n    @await Component.InvokeAsync(\"RelatedPosts\", new { currentPostId = Model.CurrentPost.Id, viewName = \"RelatedPosts\", numberToShow = 5 })\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.CompiledViews.Bootstrap5/Views/Blog/SideBarPartial.cshtml",
    "content": "﻿@model cloudscribe.SimpleContent.Web.ViewModels.BlogViewModel\n@if (Model.ProjectSettings.ShowAboutBox)\n{\n    <partial name=\"AboutPartial\" model=\"Model\" />\n}\n@if (Model.ProjectSettings.ShowBlogCategories)\n{\n    <partial name=\"CategoryListPartial\" model=\"@Model.Categories\" />\n}\n@if (Model.ProjectSettings.ShowArchivedPosts)\n{\n    <partial name=\"ArchiveListPartial\" model=\"@Model.Archives\n    \" />\n}\n@if (Model.ProjectSettings.ShowRelatedPosts)\n{\n    <partial name=\"RelatedPostsPartial\" model=\"@Model\" />\n}\n\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.CompiledViews.Bootstrap5/Views/Blog/ToolsPartial.cshtml",
    "content": "﻿@model cloudscribe.SimpleContent.Web.ViewModels.BlogViewModel\n@inject ISimpleContentThemeHelper themeHelper\n@inject IStringLocalizer<SimpleContent> sr\n@inject IOptions<BlogEditOptions> editOptionsAccessor\n@{\n    var themeSettings = themeHelper.GetThemeSettings();\n    var editOptions = editOptionsAccessor.Value;\n}\n@if (Model.CanEdit)\n{\n    <div class=\"btn-group btn-group-small-admin btn-group-vertical end-0 me-3 fixed-top\">\n        <a id=\"newPostLink\" href=\"@Model.NewItemPath\" title=\"@sr[\"New Post\"]\" class=\"btn btn-sm content-new btn-outline-primary btn-light\">\n            <span class=\"@themeSettings.Icons.NewItem\" aria-hidden=\"true\"></span>\n        </a>\n        @if (Model.CurrentPost != null)\n        {\n            <a id=\"editPostLink\" href=\"@Model.EditPath\" title=\"@sr[\"Edit\"]\" class=\"btn btn-sm content-edit btn-outline-primary btn-light\">\n                <span class=\"@themeSettings.Icons.Edit\" aria-hidden=\"true\"></span>\n            </a>\n        }\n        @if (!editOptions.HideUnpublishButton && Model.CurrentPost != null && Model.CanEdit && !Model.ShowingDeleted && !Model.ShowingDraft && !Model.HistoryId.HasValue && Model.CurrentPost.IsPublished)\n        {\n            <a id=\"unpublishPostLink\" title=\"@sr[\"Unpublish\"]\" class=\"btn btn-sm content-unpublish btn-outline-primary btn-light\" data-bs-toggle=\"modal\" data-bs-target=\"#confirmUnpublishModal\">\n                <span class=\"@themeSettings.Icons.Unpublish\" aria-hidden=\"true\"></span>\n            </a>\n        }\n    </div>\n}\n\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.CompiledViews.Bootstrap5/Views/ContentHistory/Index.cshtml",
    "content": "﻿@model cloudscribe.SimpleContent.Web.ViewModels.ContentHistoryViewModel\n@inject IStringLocalizer<SimpleContent> sr\n@{\n    ViewData[\"Title\"] = sr[\"Content Edit History\"];\n}\n<h1>@ViewData[\"Title\"]</h1>\n<partial name=\"HistoryGridPartial\" model=\"Model\" />\n<cs-pager asp-action=\"Index\"\n          asp-controller=\"ContentHistory\"\n          asp-route-contentsource=\"@Model.ContentSource\"\n          asp-route-editor=\"@Model.Editor\"\n          asp-route-sortmode=\"@Model.SortMode\"\n          asp-route-pagesize=\"@Model.History.PageSize\"\n          cs-paging-pagesize=\"@Model.History.PageSize\"\n          cs-paging-pagenumber=\"@Model.History.PageNumber\"\n          cs-paging-totalitems=\"@Model.History.TotalItems\"\n          cs-pager-ul-class=\"pagination d-flex flex-wrap\"\n          cs-pager-li-current-class=\"page-item active\"\n          cs-pager-li-other-class=\"page-item\"\n          cs-pager-li-non-active-class=\"page-item disabled\"\n          cs-pager-link-current-class=\"page-link\"\n          cs-pager-link-other-class=\"page-link\"\n          cs-first-page-title='@sr[\"First Page\"]'\n          cs-last-page-title='@sr[\"Last Page\"]'\n          cs-previous-page-title='@sr[\"Previous page\"]'\n          cs-next-page-title='@sr[\"Next page\"]'></cs-pager>\n@if (Model.CanEditPages && Model.CanEditPosts)\n{\n\n    <form role=\"form\" class=\"form-inline\" asp-controller=\"ContentHistory\" asp-action=\"DeleteOlderThan\">\n        <input type=\"submit\" value='@sr[\"Delete Older Than\"]' class=\"btn btn-sm btn-danger \" />\n        <select class=\"form-control ms-1 me-1\" name=\"days\" id=\"days\">\n            <option>10</option>\n            <option>20</option>\n            <option>30</option>\n            <option>60</option>\n            <option>90</option>\n            <option>120</option>\n        </select>\n        @sr[\"Days\"]\n    </form>\n}"
  },
  {
    "path": "src/cloudscribe.SimpleContent.CompiledViews.Bootstrap5/Views/Page/AddCssPartial.cshtml",
    "content": "﻿@model cloudscribe.SimpleContent.Web.ViewModels.AddPageResourceViewModel\n@inject IPageRoutes pageRoutes\n@inject IStringLocalizer<SimpleContent> sr\n<form asp-controller=\"Page\" asp-action=\"AddResource\" class=\"form-inline\" role=\"form\">\n    <input type=\"hidden\" name=\"Type\" value=\"css\" />\n    <input type=\"hidden\" asp-for=\"Slug\" />\n        <div class=\"mb-3\">\n            <label asp-for=\"Environment\">@sr[\"Environment\"]</label>\n            <select asp-for=\"Environment\" name=\"Environment\" class=\"form-control ms-1 me-1\">\n                <option value=\"any\">@sr[\"Any\"]</option>\n                <option value=\"dev\">@sr[\"Development\"]</option>\n                <option value=\"prod\">@sr[\"Production\"]</option>\n            </select> \n        </div>\n        <div class=\"mb-3\">\n            <label asp-for=\"Sort\">@sr[\"Sort\"]</label>\n            <input asp-for=\"Sort\" name=\"Sort\" class=\"form-control ms-1 me-1\" style=\"max-width:50px;\" />\n            <span asp-validation-for=\"Sort\" class=\"text-danger\"></span>\n        </div>\n        <div class=\"mb-3\">\n            <label asp-for=\"Url\">@sr[\"Url\"]</label>\n            <input asp-for=\"Url\" name=\"Url\" class=\"form-control ms-1 me-1\" style=\"min-width:350px;\" />\n            <span asp-validation-for=\"Url\" class=\"text-danger\"></span>\n        </div>\n        <button type=\"submit\" class=\"btn btn-primary ms-1\">@sr[\"Add CSS Url\"]</button>\n</form>"
  },
  {
    "path": "src/cloudscribe.SimpleContent.CompiledViews.Bootstrap5/Views/Page/AddJsPartial.cshtml",
    "content": "﻿@model cloudscribe.SimpleContent.Web.ViewModels.AddPageResourceViewModel\n@inject IPageRoutes pageRoutes\n@inject IStringLocalizer<SimpleContent> sr\n<form asp-controller=\"Page\" asp-action=\"AddResource\" class=\"form-inline\" role=\"form\">\n    <input type=\"hidden\" name=\"Type\" value=\"js\" />\n    <input type=\"hidden\" asp-for=\"Slug\" />\n        <div class=\"mb-3\">\n            <label asp-for=\"Environment\">@sr[\"Environment\"]</label>\n                <select asp-for=\"Environment\" name=\"Environment\" class=\"form-control ms-1 me-1\">\n                    <option value=\"any\">@sr[\"Any\"]</option>\n                    <option value=\"dev\">@sr[\"Development\"]</option>\n                    <option value=\"prod\">@sr[\"Production\"]</option>\n                </select>\n        </div>\n        <div class=\"mb-3\">\n            <label asp-for=\"Sort\">@sr[\"Sort\"]</label>\n            <input asp-for=\"Sort\" name=\"Sort\" class=\"form-control ms-1 me-1\" style=\"max-width:50px;\" />\n            <span asp-validation-for=\"Sort\" class=\"text-danger\"></span>\n        </div>\n        <div class=\"mb-3\">\n            <label asp-for=\"Url\">@sr[\"Url\"]</label>\n            <input asp-for=\"Url\" name=\"Url\" class=\"form-control ms-1 me-1\" style=\"min-width:350px;\" />\n            <span asp-validation-for=\"Url\" class=\"text-danger\"></span>\n        </div>\n        <button type=\"submit\" class=\"btn btn-primary\">@sr[\"Add JavaScript Url\"]</button>  \n</form>\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.CompiledViews.Bootstrap5/Views/Page/ChildMenu.cshtml",
    "content": "﻿@model cloudscribe.SimpleContent.Web.ViewModels.PageViewModel\n@inject IRoleSelectorProperties roleSelector\n@section Meta {\n    <meta name=\"robots\" content=\"noindex, follow\" />\n}\n@section Styles {\n    <partial name=\"StylePartial\" model=\"Model\" />\n}\n@section Toolbar {\n   \n    <partial name=\"ToolsPartial\" model=\"Model\" />\n    \n}\n@if (Model.CurrentPage.ShowHeading)\n{\n    <h1>@ViewData[\"Title\"]</h1>\n}\n@await Component.InvokeAsync(\"Navigation\", new { viewName = \"ChildTree\", filterName = NamedNavigationFilters.ChildTree, startingNodeKey = \"\" })\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.CompiledViews.Bootstrap5/Views/Page/CommentWrapperPartial.cshtml",
    "content": "﻿@model cloudscribe.SimpleContent.Web.ViewModels.PageViewModel\n@if ((Model.CurrentPage.ShowComments) && (!string.IsNullOrEmpty(Model.ProjectSettings.DisqusShortName)) && !Model.ShowingDraft && !Model.HistoryId.HasValue)\n{\n    <partial name=\"DisqusCommentsPartial\" model=\"@Model\" />\n}"
  },
  {
    "path": "src/cloudscribe.SimpleContent.CompiledViews.Bootstrap5/Views/Page/Development.cshtml",
    "content": "﻿@model cloudscribe.SimpleContent.Web.ViewModels.PageDevelopmentViewModel\n@inject IPageRoutes pageRoutes\n@inject IStringLocalizer<SimpleContent> sr\n<div class=\"d-flex justify-content-between align-items-center mb-3\">\n    <h1>@ViewBag.Title</h1>\n    <a href=\"@Url.RouteUrl(pageRoutes.PageEditRouteName, new { slug=Model.Slug })\" class=\"btn btn-secondary\">@sr[\"Return to Page Editing\"]</a>\n</div>\n<div class=\"alert alert-warning col-md-10 col-lg-8 py-2\">\n    @sr[\"With great power comes great responsibility. This page is intended for use by developers, for adding javscript and css into the page. Use this page only if you understand what you are doing.\"]\n</div>\n\n<h2>@sr[\"Raw JavaScript\"]</h2>\n<div class=\"mb-4\">\n    <form asp-controller=\"Page\" asp-action=\"AddScriptResource\" role=\"form\">\n        <div class=\"mb-3\">\n            <label asp-for=\"Script\" class=\"form-label\">@sr[\"Enter your JavaScript below. Do not include <script> tags.\"]</label>\n            <p>\n                @sr[\"Scripts are automatically validated for security - only safe DOM manipulation and event handling are permitted.\"] <br />\n            </p>\n            <input type=\"hidden\" asp-for=\"Slug\" />\n            <textarea asp-for=\"Script\" class=\"form-control\" rows=\"8\" data-bs-toggle=\"tooltip\"\n                      title='@sr[\"Enter custom Javascript to run on your page. Do not include <script> tags.\"]'></textarea>\n            <span asp-validation-for=\"Script\" class=\"invalid-feedback\"></span>\n        </div>\n        <button type=\"submit\" class=\"btn btn-primary\">@sr[\"Save JavaScript\"]</button>\n    </form>\n</div>\n\n<h2>@sr[\"JavaScript URLs\"]</h2>\n<div class=\"mb-4\">\n    <table class=\"table table-striped table-hover\">\n        <tr>\n            <th>@sr[\"Environment\"]</th>\n            <th>@sr[\"Sort\"]</th>\n            <th>@sr[\"Script\"]</th>\n            <th></th>\n        </tr>\n        @foreach (var item in Model.Js)\n        {\n            <tr>\n                <td>@item.Environment</td>\n                <td>@item.Sort</td>\n                <td>@item.Url</td>\n                <td>\n                    <form asp-controller=\"Page\" asp-action=\"RemoveResource\">\n                        <input type=\"hidden\" asp-for=\"Slug\" />\n                        <input type=\"hidden\" name=\"id\" value=\"@item.Id\" />\n                        <button type=\"submit\" class=\"btn btn-sm btn-warning\">@sr[\"Delete\"]</button>\n                    </form>\n                </td>\n            </tr>\n        }\n        <tr>\n            <td colspan=\"4\">\n                <partial name=\"AddJsPartial\" model=\"@Model.AddResourceViewModel\" />\n            </td>\n        </tr>\n    </table>\n</div>\n\n<h2>@sr[\"CSS URLs\"]</h2>\n<div class=\"mb-4\">\n    <table class=\"table table-striped table-hover\">\n        <tr>\n            <th>@sr[\"Environment\"]</th>\n            <th>@sr[\"Sort\"]</th>\n            <th>@sr[\"CSS\"]</th>\n            <th></th>\n        </tr>\n        @foreach (var item in Model.Css)\n        {\n            <tr>\n                <td>@item.Environment</td>\n                <td>@item.Sort</td>\n                <td>@item.Url</td>\n                <td>\n                    <form asp-controller=\"Page\" asp-action=\"RemoveResource\">\n                        <input type=\"hidden\" asp-for=\"Slug\" />\n                        <input type=\"hidden\" name=\"id\" value=\"@item.Id\" />\n                        <button type=\"submit\" class=\"btn btn-sm btn-warning\">@sr[\"Delete\"]</button>\n                    </form>\n                </td>\n            </tr>\n        }\n        <tr>\n            <td colspan=\"4\">\n                <partial name=\"AddCssPartial\" model=\"@Model.AddResourceViewModel\" />\n            </td>\n        </tr>\n    </table>\n</div>\n\n@section Scripts {\n    <script src=\"~/cr/js/jquery.validate.min.js\"></script>\n    <script src=\"~/cr/js/jquery.validate.unobtrusive.min.js\"></script>\n}"
  },
  {
    "path": "src/cloudscribe.SimpleContent.CompiledViews.Bootstrap5/Views/Page/DisqusCommentsPartial.cshtml",
    "content": "﻿@model cloudscribe.SimpleContent.Web.ViewModels.PageViewModel\n@using Microsoft.AspNetCore.Http.Features\n@inject IStringLocalizer<SimpleContent> sr\n@{\n    var consentFeature = Context.Features.Get<ITrackingConsentFeature>();\n    var allowDisqus = consentFeature?.CanTrack ?? true; // disqus has cookies\n    var disqusScriptPath = \"//\" + Model.ProjectSettings.DisqusShortName + \".disqus.com/embed.js\";\n}\n@if (allowDisqus && (Model.CurrentPage != null) && (!string.IsNullOrEmpty(Model.CurrentPage.Id)))\n{\n    @sr[\"Comments\"]\n    <div id=\"disqus_thread\" data-disqus-config data-disqus-page-url=\"@Context.Request.GetCurrentFullUrl()\" data-disqus-page-id=\"@Model.CurrentPage.Id\" data-disqus-script-url=\"@disqusScriptPath\"></div>\n    <noscript>Please enable JavaScript to view the <a href=\"https://disqus.com/?ref_noscript\">comments powered by Disqus.</a></noscript>\n}\n@if (!allowDisqus)\n{\n    <p class=\"alert alert-info\">@sr[\"If you want to view or submit comments you must accept the cookie consent.\"]</p>\n}\n<script src=\"~/cr/js/unobtrusive-disqus.min.js\"></script>"
  },
  {
    "path": "src/cloudscribe.SimpleContent.CompiledViews.Bootstrap5/Views/Page/DraftInfoPartial.cshtml",
    "content": "﻿@model cloudscribe.SimpleContent.Web.ViewModels.PageViewModel\n@inject IStringLocalizer<SimpleContent> sr\n@inject IPageRoutes pageRoutes\n@{ \n    var slug = Model.CurrentPage.Slug;\n    if(slug == Model.ProjectSettings.DefaultPageSlug) { slug = \"\"; }\n}\n@if (Model.ShowingDraft && Model.CanEdit)\n{\n    <div class=\"alert alert-info\" role=\"alert\">\n        @sr[\"You are currently viewing a draft version of this page.\"]\n        @if (Model.CurrentPage.PubDate.HasValue)\n        {\n            <em>\n                @sr[\"Scheduled Publish Date:\"]&nbsp;@Model.FormatDateForEdit(Model.CurrentPage.PubDate.Value)\n            </em>\n        }\n        @if (Model.HasPublishedVersion)\n        {\n            <a href=\"@Url.RouteUrl(pageRoutes.PageRouteName, new { slug = slug })\">@sr[\"View published version.\"]</a>\n        }\n    </div>\n}\nelse if (Model.HasDraft && Model.CanEdit)\n{\n    <a href=\"@Url.RouteUrl(pageRoutes.PageRouteName, new { slug = Model.CurrentPage.Slug, showDraft = true })\">@sr[\"View current draft.\"]</a>\n\n}"
  },
  {
    "path": "src/cloudscribe.SimpleContent.CompiledViews.Bootstrap5/Views/Page/Edit.cshtml",
    "content": "﻿@model cloudscribe.SimpleContent.Web.ViewModels.PageEditViewModel\n@inject IPageRoutes pageRoutes\n@inject IRoleSelectorProperties roleSelector\n@inject IStringLocalizer<SimpleContent> sr\n@inject IOptions<PageEditOptions> pageEditOptionsAccessor\n@{\n    var editOptions = pageEditOptionsAccessor.Value;\n    var showDev = editOptions.AlwaysShowDeveloperLink ? true : User.IsInRole(editOptions.DeveloperAllowedRole);\n    if (string.IsNullOrEmpty(Model.Id)) { showDev = false; }\n    var cancelSlug = Model.Slug;\n    if (Model.Slug == Model.ProjectDefaultSlug || Model.DidRestoreDeleted) { cancelSlug = string.Empty; }\n\n}\n@section Styles {\n    <partial name=\"EditStylesPartial\" model=\"@Model\" />\n    <link href=\"/cr/css/summernote-bs5.min.css\" rel=\"stylesheet\">\n}\n<h2>\n    @ViewBag.Title \n</h2>\n@if (!string.IsNullOrEmpty(Model.Id))\n{\n    <a id=\"lnkHistory\" href=\"@Url.RouteUrl(pageRoutes.PageHistoryRouteName, new { slug = Model.Slug })\">@sr[\"Version History\"]</a>\n}\n<partial name=\"EditHistoryInfoPartial\" model=\"@Model\" />\n<form method=\"post\" class=\"form-horizontal\" role=\"form\" asp-route=\"@pageRoutes.PageEditRouteName\" asp-antiforgery=\"true\" data-submit-once=\"true\">\n    <input type=\"hidden\" id=\"projectId\" name=\"projectId\" value=\"@Model.ProjectId\" />\n    <input type=\"hidden\" id=\"id\" name=\"id\" value=\"@Model.Id\" />\n    <input type=\"hidden\" asp-for=\"@Model.IsPublished\" />\n    <input type=\"hidden\" asp-for=\"ContentType\" />\n    @Html.ValidationMessage(\"pageediterror\", new { @class = \"text-danger\" })\n    <ul class=\"nav nav-tabs\" role=\"tablist\">\n        <li id=\"tab1\" class=\"nav-item\">\n            <a class=\"nav-link active\" href=\"#tabContent\" data-bs-toggle=\"tab\">@sr[\"Content\"]</a>\n        </li>\n        <li id=\"tab2\" class=\"nav-item\">\n            <a class=\"nav-link\" href=\"#tabSettings\" data-bs-toggle=\"tab\">@sr[\"Settings\"]</a>\n        </li>\n    </ul>\n    <div class=\"tab-content\">\n        <div class=\"tab-pane active\" id=\"tabContent\" role=\"tabpanel\" aria-labelledby=\"tab1\">\n            <div class=\"mb-3 mt-2\">\n                <label asp-for=\"Title\">@sr[\"Page Heading\"]</label>\n                <input asp-for=\"Title\" class=\"form-control\" data-bs-toggle=\"tooltip\" title='@sr[\"This is the heading and title of the page. For new pages the url slug will be generated based on the title.\"]' />\n                <span asp-validation-for=\"Title\" class=\"invalid-feedback\"></span>\n            </div>\n            <partial name=\"EditCorrelationKeyPartial\" model=\"@Model\" />\n            <div class=\"mb-3\">\n                <label asp-for=\"MetaDescription\">@sr[\"Meta Description\"]</label>\n                <input asp-for=\"MetaDescription\" class=\"form-control\" data-bs-toggle=\"tooltip\" title='@sr[\"On public pages, meta description is very important to search engines. It should be no longer than 135 – 160 characters long (although Google has recently been testing longer snippets). Any longer and search engines will chop the end off, so make sure any important keywords are nearer the front.\"]' />\n                <span asp-validation-for=\"MetaDescription\" class=\"invalid-feedback\"></span>\n            </div>\n            <partial name=\"EditorPartial\" model=\"@Model\" />\n            <div class=\"mb-3\">\n                <label asp-for=\"Author\">@sr[\"Author\"]</label>\n                <input asp-for=\"Author\" class=\"form-control\" />\n                <span asp-validation-for=\"Author\" class=\"invalid-feedback\"></span>\n            </div>\n        </div>\n        <div class=\"tab-pane\" id=\"tabSettings\" role=\"tabpanel\" aria-labelledby=\"tab2\">\n            <div class=\"mb-3 mt-2\">\n                <label asp-for=\"Slug\">@sr[\"Slug\"]</label>\n                <input asp-for=\"Slug\" class=\"form-control\" data-bs-toggle=\"tooltip\" title='@sr[\"The slug is the url segment that will be used to link to this page. It is recommended to leave the slug blank when creating new pages, the slug will be generated based on the Page Heading. Slugs should be lower case and any characters that are not allowed in urls will be automatically removed.\"]' />\n                <span asp-validation-for=\"Slug\" class=\"invalid-feedback\"></span>\n            </div>\n            <div class=\"mb-3\">\n                <label asp-for=\"ParentSlug\">@sr[\"Parent Slug\"]</label>\n                <input asp-for=\"ParentSlug\" class=\"form-control\" data-bs-toggle=\"tooltip\" title='@sr[\"A page becomes a child page of another page if you enter the slug of the other page as the parent slug. The menu hierarchy is determined by the parent child relationship between pages. If you enter an invalid parent slug it will be ignored but will not cause any error. You can also manage the hierarchy from the Page Manager.\"]' />\n                <span asp-validation-for=\"ParentSlug\" class=\"invalid-feedback\"></span>\n            </div>\n            <div class=\"mb-3\">\n                <label asp-for=\"ExternalUrl\">@sr[\"Override Url\"]</label>\n                <input asp-for=\"ExternalUrl\" class=\"form-control\" data-bs-toggle=\"tooltip\" title='@sr[\"If you populate this field with an url then the page is used only as a means to add the url as a menu item. The page content in that case is not used or visible to users. You can use a relative url or a fully qualified url so it can link to external sites. Use this with caution and note that once populated the only way to edit the page is from the link in Page Manager.\"]' />\n                <span asp-validation-for=\"ExternalUrl\" class=\"invalid-feedback\"></span>\n            </div>\n            <div class=\"mb-3\">\n                <div class=\"form-check\" data-bs-toggle=\"tooltip\" data-placement=\"left\" title='@sr[\"On most pages you will prbably want the page heading to show, but maybe not on the home page. If unchecked then the page heading will not be shown.\"]'>\n                    <input asp-for=\"ShowHeading\" class=\"form-check-input\" />\n                    <label asp-for=\"ShowHeading\" class=\"form-check-label\">@sr[\"Show Heading\"]</label>\n                </div>\n            </div>\n            <div class=\"mb-3\">\n                <div class=\"form-check\" data-bs-toggle=\"tooltip\" data-placement=\"left\" title='@sr[\"If the page is a parent of other pages, you check this box to make it show a menu of links to the child pages.\"]'>\n                    <input asp-for=\"ShowMenu\" class=\"form-check-input\" />\n                    <label asp-for=\"ShowMenu\" class=\"form-check-label\">@sr[\"Show Child Menu\"]</label>\n                </div>\n            </div>\n            @if (editOptions.ShowDisableEditorOption)\n            {\n                <div class=\"mb-3\">\n                    <div class=\"form-check\" data-bs-toggle=\"tooltip\" data-placement=\"left\" title='@sr[\"If you don't want to use the HTML WYSIWYG editor check this box. This would be useful if you are embedding javascript and application style markup.\"]'>\n                        <input asp-for=\"DisableEditor\" class=\"form-check-input\" />\n                        <label asp-for=\"DisableEditor\" class=\"form-check-label\">@sr[\"Disable HTML Editor\"]</label>\n                    </div>\n                </div>\n\n            }\n            else\n            {\n                <input type=\"hidden\" id=\"DisableEditor\" name=\"DisableEditor\" value=\"false\" />\n            }\n            <div class=\"mb-3\">\n                <div class=\"form-check\" data-bs-toggle=\"tooltip\" data-placement=\"left\" title='@sr[\"Check this box if the current page is only meant as a parent container for other pages and has no content of it's own.\"]'>\n                    <input asp-for=\"MenuOnly\" class=\"form-check-input\" />\n                    <label asp-for=\"MenuOnly\" class=\"form-check-label\">@sr[\"No Content Only Show Child Menu\"]</label>\n                </div>\n            </div>\n            <partial name=\"EditorialShowHidePartial\" model=\"@Model\" />\n            <partial name=\"EditCommentsEnabledPartial\" model=\"Model\" />\n            <div class=\"mb-3\">\n                <label asp-for=\"PageOrder\">@sr[\"Page Order\"]</label>\n                <input asp-for=\"PageOrder\" class=\"form-control\" data-bs-toggle=\"tooltip\" title='@sr[\"This is the sort order of this page within it's subtree of the menu. You can also move pages around easily from Page Manager, which will update the page order.\"]' />\n                <span asp-validation-for=\"PageOrder\" class=\"invalid-feedback\"></span>\n            </div>\n            <div class=\"mb-3\">\n                <label asp-for=\"MenuFilters\">@sr[\"Menu Filters\"]</label>\n                <input asp-for=\"MenuFilters\" class=\"form-control\" data-bs-toggle=\"tooltip\" title='@sr[\"Leave blank to include this page in all menu views. A comma separated list of menu filter names can be used to filter the page out of the various menu views. For example enter breadcrumbs to leave a page out of other views but keep it in breadcrumbs. Standard menu filter names include: topnav,breadcrumbs,childtree. If you want to exclude a page from all menus, just use a non existent view name like 'none'.\"]' />\n                <span asp-validation-for=\"MenuFilters\" class=\"invalid-feedback\"></span>\n            </div>\n            <div class=\"mb-3\">\n                <label asp-for=\"ViewRoles\">@sr[\"View Roles\"]</label>\n                <input asp-for=\"ViewRoles\" class=\"form-control\" style=\"width:80%;display:inline-block;\" data-bs-toggle=\"tooltip\" title='@sr[\"Leave View Roles blank for public pages. You can put comma separated role names here to make a page visible only to users who are role members.\"]' />\n                <a class=\"btn btn-primary\"\n                   csc-role-selector=\"@roleSelector\"\n                   csc-projectId=\"@Model.ProjectId\"\n                   csc-target-id=\"ViewRoles\" style=\"margin-bottom:0.25rem;\">@sr[\"Select Roles\"]</a>\n                <span asp-validation-for=\"ViewRoles\" class=\"invalid-feedback\"></span>\n            </div>\n        </div>\n    </div>\n\n\n    <div class=\"row align-items-left\">\n        <div class=\"mb-3 mt-1 col-3 w-auto\">\n\n            <a class=\"btn btn-secondary\" id=\"lnkCancel\" href=\"@Url.RouteUrl(pageRoutes.PageRouteName, new { slug = cancelSlug })\">@sr[\"Cancel\"]</a>\n\n            @if (Model.IsPublished && Model.HasDraft)\n            {\n                <button type=\"button\" class=\"btn btn-danger\" data-bs-toggle=\"modal\" data-bs-target=\"#confirmDeleteDraft\">\n                    @sr[\"Delete Draft\"]\n                </button>\n            }\n\n            <button id=\"btnSaveDraft\" name=\"SaveMode\" value=\"@SaveMode.SaveDraft\" type=\"submit\" class=\"btn btn-primary\" data-disabled-text='@sr[\"Working...\"]' data-enabled-text='@sr[\"Save Draft\"]'>@sr[\"Save Draft\"]</button>\n\n            <button id=\"btnSavePublish\" name=\"SaveMode\" type=\"submit\" value=\"@SaveMode.PublishNow\" class=\"btn btn-primary\" data-disabled-text='@sr[\"Working...\"]' data-enabled-text='@sr[\"Publish Now\"]'>@sr[\"Publish Now\"]</button>\n\n        </div>\n\n\n        <div class=\"mb-3 mt-1 col-3 w-auto\">\n\n            <div class=\"row align-items-left gx-1\">\n                <div class=\"col-md-2 w-auto\">\n                    <button id=\"SaveMode\" name=\"SaveMode\" value=\"@SaveMode.PublishLater\" type=\"submit\" class=\"btn btn-primary\" data-disabled-text='@sr[\"Working...\"]' data-enabled-text='@sr[\"Publish at Date/Time:\"]'>@sr[\"Publish at Date/Time:\"]</button>\n                </div>\n                <div class=\"ms-0 col-md-3 w-auto\">\n                    <partial name=\"EditPubDate\" model=\"@Model\" />\n                </div>\n            </div>\n\n        </div>\n\n\n        <div class=\"mb-3 mt-1 col-3 w-auto\">\n\n            @if (!string.IsNullOrEmpty(Model.Id))\n            {\n                <button type=\"button\" class=\"btn btn-danger\" data-bs-toggle=\"modal\" data-bs-target=\"#confirmDeleteModal\">\n                    @sr[\"Delete\"]\n                </button>\n            }\n            @if (showDev)\n            {\n                <a class=\"btn btn-primary\" asp-route=\"@pageRoutes.PageDevelopRouteName\" asp-route-slug=\"@Model.Slug\" data-unsaved-warning=\"@sr[\"You have unsaved changes in the editor. Are you sure you want to navigate to Developer Tools? Your changes will be lost.\"]\">@sr[\"Developer Tools\"]</a>\n            }\n\n        </div>\n    </div>\n\n\n    <div class=\"modal fade\" id=\"confirmDeleteDraft\" tabindex=\"-1\" role=\"dialog\" aria-labelledby=\"confirmDeleteDraftHeading\" aria-hidden=\"true\">\n        <div class=\"modal-dialog\">\n            <div class=\"modal-content\">\n                <div class=\"modal-header\">\n                    <h4 class=\"modal-title\" id=\"confirmDeleteDraftHeading\">@sr[\"Confirm Delete Draft\"]</h4>\n                    <button type=\"button\" data-bs-dismiss=\"modal\" class=\"btn-close\" aria-label='@sr[\"Close\"]'></button>\n                </div>\n                <div class=\"modal-body\">\n                    @sr[\"Are you sure you want to delete the current draft version of this page?\"]\n                </div>\n                <div class=\"modal-footer\">\n                    <button type=\"button\" class=\"btn btn-primary\" data-bs-dismiss=\"modal\">@sr[\"Cancel\"]</button>\n                    <button id=\"btnDeleteCurrentDraft\" name=\"SaveMode\" value=\"@SaveMode.DeleteCurrentDraft\" type=\"submit\" class=\"btn btn-danger btn-ok\" data-disabled-text='@sr[\"Working...\"]' data-enabled-text='@sr[\"Delete Draft\"]'>@sr[\"Delete Draft\"]</button>\n                </div>\n            </div>\n        </div>\n    </div>\n\n</form>\n<partial name=\"EditDraftPubDatePartial\" model=\"@Model\" />\n@if (!string.IsNullOrEmpty(Model.Id))\n{\n    <form id=\"deleteform\" class=\"form-inline\" asp-controller=\"Page\" asp-action=\"Delete\" method=\"post\">\n        <input asp-for=\"Id\" type=\"hidden\" />\n        <div class=\"modal fade\" id=\"confirmDeleteModal\" tabindex=\"-1\" role=\"dialog\" aria-labelledby=\"confirmDeleteHeading\">\n            <div class=\"modal-dialog modal-sm\" role=\"document\">\n                <div class=\"modal-content\">\n                    <div class=\"modal-header\">\n                        <h4 class=\"modal-title\" id=\"confirmDeleteHeading\">@sr[\"Confirm Delete\"]</h4>\n                        <button type=\"button\" data-bs-dismiss=\"modal\" class=\"btn-close\" aria-label='@sr[\"Close\"]'></button>\n                    </div>\n                    <div class=\"modal-body\">\n                        @string.Format(sr[\"Are you sure you want to delete the page {0}?\"], Model.Title)\n                    </div>\n                    <div class=\"modal-footer\">\n                        <button type=\"button\" class=\"btn btn-primary\" data-bs-dismiss=\"modal\">@sr[\"Cancel\"]</button>\n                        <input type=\"submit\" value='@sr[\"Delete\"]' class=\"btn btn-danger btn-ok\" />\n                    </div>\n                </div>\n            </div>\n        </div>\n    </form>\n}\n<div class=\"modal fade\" id=\"dateRequired\" tabindex=\"-1\" role=\"dialog\" aria-labelledby=\"dateRequiredHeading\">\n    <div class=\"modal-dialog modal-sm\" role=\"document\">\n        <div class=\"modal-content\">\n            <div class=\"modal-header\">\n                <h4 class=\"modal-title\" id=\"dateRequiredHeading\">@sr[\"Date Required\"]</h4>\n                <button type=\"button\" data-bs-dismiss=\"modal\" class=\"btn-close\" aria-label='@sr[\"Close\"]'></button>\n            </div>\n            <div class=\"modal-body\">\n                @sr[\"To publish later you must enter a date.\"]\n            </div>\n            <div class=\"modal-footer\">\n                <button type=\"button\" class=\"btn btn-primary\" data-bs-dismiss=\"modal\">@sr[\"Ok\"]</button>\n\n            </div>\n        </div>\n    </div>\n</div>\n\n@section Scripts {\n    <partial name=\"EditScriptsPartial\" model=\"@Model\" />\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.CompiledViews.Bootstrap5/Views/Page/EditCommentsEnabledPartial.cshtml",
    "content": "﻿@model cloudscribe.SimpleContent.Web.ViewModels.PageEditViewModel\n@inject IStringLocalizer<SimpleContent> sr\n@if (string.IsNullOrEmpty(Model.DisqusShortname))\n{\n    <input asp-for=\"ShowComments\" type=\"hidden\" />\n}\nelse\n{\n    <div class=\"mb-3\">\n        <div class=\"form-check\">\n            <input asp-for=\"ShowComments\" class=\"form-check-input\" />\n            <label asp-for=\"ShowComments\" class=\"form-check-label\">@sr[\"Enable Comments\"]</label>\n        </div>\n    </div>\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.CompiledViews.Bootstrap5/Views/Page/EditCorrelationKeyPartial.cshtml",
    "content": "﻿@model cloudscribe.SimpleContent.Web.ViewModels.PageEditViewModel\n@inject IStringLocalizer<SimpleContent> sr\n@* comment this and uncomment the below if you want editable correlationkey *@\n<input type=\"hidden\" asp-for=\"@Model.CorrelationKey\" />  \n@*\n    <div class=\"mb-3\">\n        <label asp-for=\"CorrelationKey\">@sr[\"Correlation Key\"]</label>\n        <input asp-for=\"CorrelationKey\" class=\"form-control\" />\n        <span asp-validation-for=\"CorrelationKey\" class=\"text-danger\"></span>\n    </div>\n*@ \n            "
  },
  {
    "path": "src/cloudscribe.SimpleContent.CompiledViews.Bootstrap5/Views/Page/EditDraftPubDatePartial.cshtml",
    "content": "﻿@model cloudscribe.SimpleContent.Web.ViewModels.PageEditViewModel\n@inject IStringLocalizer<SimpleContent> sr\n@{ \n    var message = \"\";\n    if(Model.DraftPubDate.HasValue)\n    {\n        var format = sr[\"This content is scheduled to be published {0}. You can still edit and save changes to this draft before it is published by clicking \\\"Save Draft\\\"\"].ToString();\n        message = string.Format(format, Model.DraftPubDate.Value);\n    }\n\n}\n@if (Model.DraftPubDate.HasValue)\n{\n    <p class=\"text-success\"> @message </p>\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.CompiledViews.Bootstrap5/Views/Page/EditHistoryInfoPartial.cshtml",
    "content": "﻿@model cloudscribe.SimpleContent.Web.ViewModels.PageEditViewModel\n@inject IStringLocalizer<SimpleContent> sr\n@if (Model.HistoryId.HasValue)\n{\n    <div class=\"alert alert-warning\" role=\"alert\">\n        @if (Model.DidReplaceDraft)\n        {\n            @sr[\"A previous version of this post has been restored to the editor, replacing the current draft version. If this is not intended, do not save/publish this version.\"]\n        }\n        @if (Model.DidRestoreDeleted)\n        {\n            @sr[\"You've just restored a previously deleted post to the editor; click save/publish to re-create the post. If this is not intended, do not save/publish this version.\"]\n        }\n        @if (!Model.DidReplaceDraft && !Model.DidRestoreDeleted)\n        {\n            @sr[\"A previous version of this post has been restored to the editor. If this is not intended, do not save/publish this version.\"]\n        }\n    </div>\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.CompiledViews.Bootstrap5/Views/Page/EditPubDate.cshtml",
    "content": "﻿@model cloudscribe.SimpleContent.Web.ViewModels.PageEditViewModel\n@inject IStringLocalizer<SimpleContent> sr\n<input asp-for=\"NewPubDate\" type=\"hidden\" />\n<span asp-validation-for=\"NewPubDate\" class=\"text-danger\"></span>\n<input type=\"text\" id=\"PubDateDisplay\" class=\"form-control\"\n       data-bs-datepicker=\"true\"\n       data-bs-datepicker-iso-target-id=\"NewPubDate\"\n       data-bs-datepicker-iso-format=\"YYYY-MM-DDTHH:mm:ss.sss\"\n       value='@Model.NewPubDate?.ToString(\"g\")'\n       data-bs-datepicker-debug=\"false\"\n       data-bs-datepicker-keepOpen=\"false\"\n       data-bs-datepicker-allowInputToggle=\"true\"\n       data-bs-datepicker-locale=\"@CultureInfo.CurrentCulture.Name\" />\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.CompiledViews.Bootstrap5/Views/Page/EditScriptsPartial.cshtml",
    "content": "﻿@model cloudscribe.SimpleContent.Web.ViewModels.PageEditViewModel\n@inject IRoleSelectorProperties roleSelector\n<script src=\"~/cr/js/moment-with-locales.min.js\"></script>\n<script src=\"~/cr/js/bootstrap4-datetimepicker.min.js\"></script>\n<script src=\"~/cr/js/cloudscribe-datepicker-bootstrap4-unobtrusive.min.js\"></script>\n<script src=\"~/cr/js/jquery.validate.min.js\"></script>\n<script src=\"~/cr/js/jquery.validate.unobtrusive.min.js\"></script>\n<script src=\"~/cr/js/unobtrusive-validation-bs4.min.js\"></script>\n<script src=\"~/cr/js/jquery.validate.hooks.min.js\"></script>\n<script src=\"~/cr/js/jqueryvaildation.submitonce-unobtrusive.min.js\"></script>\n<script src=\"/cr/js/unsaved-changes-prompt.min.js\"></script>\n@if (Model.ContentType == \"markdown\")\n{\n    <script src=\"~/cr/js/simplemde.min.js\"></script>\n    <script src=\"~/cr/js/simplemde-unobtrusive.min.js\"></script>\n}\nelse\n{\n    <script src=\"~/cr/js/ckeditor4114/ckeditor.js\"></script>\n    <script src=\"~/cr/js/cloudscribe-ckeditor-unobtrusive.min.js\"></script>\n}\n@if (roleSelector.RequiredScriptPaths != null)\n{\n    foreach (var s in roleSelector.RequiredScriptPaths)\n    {\n        <script src=\"@Url.Content(s)\"></script>\n    }\n}\n<script src=\"/csscsr/js/edit-script.js\"></script>\n<script src=\"/csscsr/js/unsaved-changes-warning.js\"></script>\n<partial name=\"SummernoteScripts\" />"
  },
  {
    "path": "src/cloudscribe.SimpleContent.CompiledViews.Bootstrap5/Views/Page/EditStylesPartial.cshtml",
    "content": "﻿@model cloudscribe.SimpleContent.Web.ViewModels.PageEditViewModel\n<link rel=\"stylesheet\" href=\"~/cr/css/bootstrap4-datetimepicker.min.css\" />\n<link href=\"/cr/css/summernote-bs5.min.css\" rel=\"stylesheet\">\n@if (Model.ContentType == \"markdown\")\n{\n    <link rel=\"stylesheet\" href=\"~/cr/css/simplemde.min.css\" />\n    <style>\n        .editor-toolbar.fullscreen {\n            z-index: 1040;\n        }\n    </style>\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.CompiledViews.Bootstrap5/Views/Page/EditWithTemplate.cshtml",
    "content": "﻿@model cloudscribe.SimpleContent.Web.ViewModels.PageEditWithTemplateViewModel\n@inject IPageRoutes pageRoutes\n@inject IRoleSelectorProperties roleSelector\n@inject IStringLocalizer<SimpleContent> sr\n@inject IOptions<PageEditOptions> pageEditOptionsAccessor\n@{\n    var editOptions = pageEditOptionsAccessor.Value;\n    var showDev = editOptions.AlwaysShowDeveloperLink ? true : User.IsInRole(editOptions.DeveloperAllowedRole);\n    if (string.IsNullOrEmpty(Model.Id)) { showDev = false; }\n    var legend = sr[\"Template Fields\"].ToString();\n    var legendFormat = sr[\"Template Fields - {0}\"].ToString();\n    if (Model.Template != null)\n    {\n        legend = string.Format(legendFormat, Model.Template.Title);\n\n    }\n    var cancelSlug = Model.Slug;\n    if (Model.Slug == Model.ProjectDefaultSlug || Model.DidRestoreDeleted) { cancelSlug = string.Empty; }\n\n}\n@section Styles {\n    <partial name=\"EditWithTemplateStylesPartial\" model=\"@Model\" />\n}\n<h2>\n    @ViewBag.Title \n</h2>\n@if (!string.IsNullOrEmpty(Model.Id))\n{\n    <a id=\"lnkHistory\" href=\"@Url.RouteUrl(pageRoutes.PageHistoryRouteName, new { slug = Model.Slug })\">@sr[\"Version History\"]</a>\n}\n<partial name=\"EditWithTemplateHistoryInfoPartial\" model=\"@Model\" />\n<form method=\"post\" class=\"form-horizontal\" role=\"form\" asp-route=\"@pageRoutes.PageEditWithTemplateRouteName\" asp-antiforgery=\"true\" data-submit-once=\"true\">\n    <input type=\"hidden\" id=\"id\" name=\"id\" value=\"@Model.Id\" />\n    <input type=\"hidden\" asp-for=\"@Model.IsPublished\" />\n    <input type=\"hidden\" asp-for=\"@Model.HistoryId\" />\n    @Html.ValidationMessage(\"pageediterror\", new { @class = \"text-danger\" })\n    <ul class=\"nav nav-tabs\" role=\"tablist\">\n        <li id=\"tab1\" class=\"nav-item\">\n            <a class=\"nav-link active\" href=\"#tabContent\" data-bs-toggle=\"tab\">@sr[\"Content\"]</a>\n        </li>\n        <li id=\"tab2\" class=\"nav-item\">\n            <a class=\"nav-link\" href=\"#tabSettings\" data-bs-toggle=\"tab\">@sr[\"Settings\"]</a>\n        </li>\n    </ul>\n    <div class=\"tab-content\">\n        <div class=\"tab-pane active\" id=\"tabContent\" role=\"tabpanel\" aria-labelledby=\"tab1\">\n            <div class=\"mb-3 mt-2\">\n                <label asp-for=\"Title\">@sr[\"Page Heading\"]</label>\n                <input asp-for=\"Title\" class=\"form-control\" data-bs-toggle=\"tooltip\" title='@sr[\"This is the heading and title of the page. For new pages the url slug will be generated based on the title.\"]' />\n                <span asp-validation-for=\"Title\" class=\"invalid-feedback\"></span>\n            </div>\n            <partial name=\"EditWithTemplateCorrelationKeyPartial\" model=\"@Model\" />\n            <div class=\"mb-3\">\n                <label asp-for=\"MetaDescription\">@sr[\"Meta Description\"]</label>\n                <input asp-for=\"MetaDescription\" class=\"form-control\" data-bs-toggle=\"tooltip\" title='@sr[\"On public pages, meta description is very important to search engines. It should be no longer than 135 – 160 characters long (although Google has recently been testing longer snippets). Any longer and search engines will chop the end off, so make sure any important keywords are nearer the front.\"]' />\n                <span asp-validation-for=\"MetaDescription\" class=\"invalid-feedback\"></span>\n            </div>\n            <div class=\"mb-3\">\n                <label asp-for=\"Author\">@sr[\"Author\"]</label>\n                <input asp-for=\"Author\" class=\"form-control\" />\n                <span asp-validation-for=\"Author\" class=\"invalid-feedback\"></span>\n            </div>\n            <fieldset class=\"border p-2 mb-2\">\n                <legend class=\"w-auto\">@legend</legend>\n                <partial name=\"@Model.Template.EditView\" model=\"@Model.TemplateModel\" />\n            </fieldset>\n        </div>\n        <div class=\"tab-pane\" id=\"tabSettings\" role=\"tabpanel\" aria-labelledby=\"tab2\">\n            <div class=\"mb-3 mt-2\">\n                <label asp-for=\"Slug\">@sr[\"Slug\"]</label>\n                <input asp-for=\"Slug\" class=\"form-control\" data-bs-toggle=\"tooltip\" title='@sr[\"The slug is the url segment that will be used to link to this page. It is recommended to leave the slug blank when creating new pages, the slug will be generated based on the Page Heading. Slugs should be lower case and any characters that are not allowed in urls will be automatically removed.\"]' />\n                <span asp-validation-for=\"Slug\" class=\"invalid-feedback\"></span>\n            </div>\n            <div class=\"mb-3\">\n                <label asp-for=\"ParentSlug\">@sr[\"Parent Slug\"]</label>\n                <input asp-for=\"ParentSlug\" class=\"form-control\" data-bs-toggle=\"tooltip\" title='@sr[\"A page becomes a child page of another page if you enter the slug of the other page as the parent slug. The menu hierarchy is determined by the parent child relationship between pages. If you enter an invalid parent slug it will be ignored but will not cause any error. You can also manage the hierarchy from the Page Manager.\"]' />\n                <span asp-validation-for=\"ParentSlug\" class=\"invalid-feedback\"></span>\n            </div>\n\n            <div class=\"mb-3\">\n                <div class=\"form-check\" data-bs-toggle=\"tooltip\" data-placement=\"left\" title='@sr[\"On most pages you will prbably want the page heading to show, but maybe not on the home page. If unchecked then the page heading will not be shown.\"]'>\n                    <input asp-for=\"ShowHeading\" class=\"form-check-input\" />\n                    <label asp-for=\"ShowHeading\" class=\"form-check-label\">@sr[\"Show Heading\"]</label>\n                </div>\n            </div>\n            <div class=\"mb-3\">\n                <div class=\"form-check\" data-bs-toggle=\"tooltip\" data-placement=\"left\" title='@sr[\"If the page is a parent of other pages, you check this box to make it show a menu of links to the child pages.\"]'>\n                    <input asp-for=\"ShowMenu\" class=\"form-check-input\" />\n                    <label asp-for=\"ShowMenu\" class=\"form-check-label\">@sr[\"Show Child Menu\"]</label>\n                </div>\n            </div>\n\n            <partial name=\"EditorialShowHidePartialTemplates\" model=\"@Model\" />\n            <partial name=\"EditWithTemplateCommentsEnabledPartial\" model=\"Model\" />\n            <div class=\"mb-3\">\n                <label asp-for=\"PageOrder\">@sr[\"Page Order\"]</label>\n                <input asp-for=\"PageOrder\" class=\"form-control\" data-bs-toggle=\"tooltip\" title='@sr[\"This is the sort order of this page within it's subtree of the menu. You can also move pages around easily from Page Manager, which will update the page order.\"]' />\n                <span asp-validation-for=\"PageOrder\" class=\"invalid-feedback\"></span>\n            </div>\n            <div class=\"mb-3\">\n                <label asp-for=\"MenuFilters\">@sr[\"Menu Filters\"]</label>\n                <input asp-for=\"MenuFilters\" class=\"form-control\" data-bs-toggle=\"tooltip\" title='@sr[\"Leave blank to include this page in all menu views. A comma separated list of menu filter names can be used to filter the page out of the various menu views. For example enter breadcrumbs to leave a page out of other views but keep it in breadcrumbs. Standard menu filter names include: topnav,breadcrumbs,childtree. If you want to exclude a page from all menus, just use a non existent view name like 'none'\"]' />\n                <span asp-validation-for=\"MenuFilters\" class=\"invalid-feedback\"></span>\n            </div>\n            <div class=\"mb-3\">\n                <label asp-for=\"ViewRoles\">@sr[\"View Roles\"]</label>\n                <input asp-for=\"ViewRoles\" class=\"form-control\" style=\"width:80%;display:inline-block;\" data-bs-toggle=\"tooltip\" title='@sr[\"Leave View Roles blank for public pages. You can put comma separated role names here to make a page visible only to users who are role members.\"]' />\n                <a class=\"btn btn-primary\"\n                   csc-role-selector=\"@roleSelector\"\n                   csc-projectId=\"@Model.ProjectId\"\n                   csc-target-id=\"ViewRoles\" style=\"margin-bottom:0.25rem;\">@sr[\"Select Roles\"]</a>\n                <span asp-validation-for=\"ViewRoles\" class=\"invalid-feedback\"></span>\n            </div>\n        </div>\n    </div>\n\n    \n    <div class=\"row align-items-left\">\n        <div class=\"mb-3 mt-1 col-3 w-auto\">\n\n            <a class=\"btn btn-secondary\" id=\"lnkCancel\" href=\"@Url.RouteUrl(pageRoutes.PageRouteName, new { slug = cancelSlug })\">@sr[\"Cancel\"]</a>\n            @if (Model.IsPublished && Model.HasDraft)\n            {\n                <button type=\"button\" class=\"btn btn-danger\" data-bs-toggle=\"modal\" data-bs-target=\"#confirmDeleteDraft\">\n                    @sr[\"Delete Draft\"]\n                </button>\n            }\n\n            <button id=\"btnSaveDraft\" name=\"SaveMode\" value=\"@SaveMode.SaveDraft\" type=\"submit\" class=\"btn btn-primary\" data-disabled-text='@sr[\"Working...\"]' data-enabled-text='@sr[\"Save Draft\"]'>@sr[\"Save Draft\"]</button>\n            <button id=\"btnSavePublish\" name=\"SaveMode\" type=\"submit\" value=\"@SaveMode.PublishNow\" class=\"btn btn-primary\" data-disabled-text='@sr[\"Working...\"]' data-enabled-text='@sr[\"Publish Now\"]'>@sr[\"Publish Now\"]</button>\n\n        </div>\n\n\n        <div class=\"mb-3 mt-1 col-3 w-auto\">\n\n            <div class=\"row align-items-left gx-1\">\n                <div class=\"col-md-2 w-auto\">\n                    <button id=\"SaveMode\" name=\"SaveMode\" value=\"@SaveMode.PublishLater\" type=\"submit\" class=\"btn btn-primary\" data-disabled-text='@sr[\"Working...\"]' data-enabled-text='@sr[\"Publish at Date/Time:\"]'>@sr[\"Publish at Date/Time:\"]</button>\n                </div>\n                <div class=\"ms-0 col-md-3 w-auto\">\n                    <partial name=\"EditWithTemplatePubDate\" model=\"@Model\" />\n                </div>\n            </div>\n\n        </div>\n\n\n        <div class=\"mb-3 mt-1 col-3 w-auto\">\n\n            @if (!string.IsNullOrEmpty(Model.Id))\n            {\n                <button type=\"button\" class=\"btn btn-danger\" data-bs-toggle=\"modal\" data-bs-target=\"#confirmDeleteModal\">\n                    @sr[\"Delete\"]\n                </button>\n            }\n            @if (showDev)\n            {\n                <a class=\"btn btn-primary\" asp-route=\"@pageRoutes.PageDevelopRouteName\" asp-route-slug=\"@Model.Slug\" data-unsaved-warning=\"@sr[\"You have unsaved changes in the editor. Are you sure you want to navigate to Developer Tools? Your changes will be lost.\"]\">@sr[\"Developer Tools\"]</a>\n            }\n\n        </div>\n    </div>\n\n\n\n    <div class=\"modal fade\" id=\"confirmDeleteDraft\" tabindex=\"-1\" role=\"dialog\" aria-labelledby=\"confirmDeleteDraftHeading\" aria-hidden=\"true\">\n        <div class=\"modal-dialog\">\n            <div class=\"modal-content\">\n                <div class=\"modal-header\">\n                    <h4 class=\"modal-title\" id=\"confirmDeleteDraftHeading\">@sr[\"Confirm Delete Draft\"]</h4>\n                    <button type=\"button\" data-bs-dismiss=\"modal\" class=\"btn-close\" aria-label='@sr[\"Close\"]'></button>\n                </div>\n                <div class=\"modal-body\">\n                    @sr[\"Are you sure you want to delete the current draft version of this page?\"]\n                </div>\n                <div class=\"modal-footer\">\n                    <button type=\"button\" class=\"btn btn-primary\" data-bs-dismiss=\"modal\">@sr[\"Cancel\"]</button>\n                    <button id=\"btnDeleteCurrentDraft\" name=\"SaveMode\" value=\"@SaveMode.DeleteCurrentDraft\" type=\"submit\" class=\"btn btn-danger btn-ok\" data-disabled-text='@sr[\"Working...\"]' data-enabled-text='@sr[\"Delete Draft\"]'>@sr[\"Delete Draft\"]</button>\n                </div>\n            </div>\n        </div>\n    </div>\n\n</form>\n<partial name=\"EditWithTemplateDraftPubDatePartial\" model=\"@Model\" />\n@if (!string.IsNullOrEmpty(Model.Id))\n{\n    <form id=\"deleteform\" class=\"form-inline\" asp-controller=\"Page\" asp-action=\"Delete\" method=\"post\">\n        <input asp-for=\"Id\" type=\"hidden\" />\n        <div class=\"modal fade\" id=\"confirmDeleteModal\" tabindex=\"-1\" role=\"dialog\" aria-labelledby=\"confirmDeleteHeading\">\n            <div class=\"modal-dialog modal-sm\" role=\"document\">\n                <div class=\"modal-content\">\n                    <div class=\"modal-header\">\n                        <h4 class=\"modal-title\" id=\"confirmDeleteHeading\">@sr[\"Confirm Delete\"]</h4>\n                        <button type=\"button\" data-bs-dismiss=\"modal\" class=\"btn-close\" aria-label='@sr[\"Close\"]'></button>\n                    </div>\n                    <div class=\"modal-body\">\n                        @string.Format(sr[\"Are you sure you want to delete the page {0}?\"], Model.Title)\n                    </div>\n                    <div class=\"modal-footer\">\n                        <button type=\"button\" class=\"btn btn-primary\" data-bs-dismiss=\"modal\">@sr[\"Cancel\"]</button>\n                        <input type=\"submit\" value='@sr[\"Delete\"]' class=\"btn btn-danger btn-ok\" />\n                    </div>\n                </div>\n            </div>\n        </div>\n    </form>\n}\n\n<div class=\"modal fade\" id=\"dateRequired\" tabindex=\"-1\" role=\"dialog\" aria-labelledby=\"dateRequiredHeading\">\n    <div class=\"modal-dialog modal-sm\" role=\"document\">\n        <div class=\"modal-content\">\n            <div class=\"modal-header\">\n                <h4 class=\"modal-title\" id=\"dateRequiredHeading\">@sr[\"Date Required\"]</h4>\n                <button type=\"button\" data-bs-dismiss=\"modal\" class=\"btn-close\" aria-label='@sr[\"Close\"]'></button>\n            </div>\n            <div class=\"modal-body\">\n                @sr[\"To publish later you must enter a date.\"]\n            </div>\n            <div class=\"modal-footer\">\n                <button type=\"button\" class=\"btn btn-primary\" data-bs-dismiss=\"modal\">@sr[\"Ok\"]</button>\n\n            </div>\n        </div>\n    </div>\n</div>\n\n@section Scripts {\n    <partial name=\"EditWithTemplateScriptsPartial\" model=\"@Model\" />\n}\n\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.CompiledViews.Bootstrap5/Views/Page/EditWithTemplateCommentsEnabledPartial.cshtml",
    "content": "﻿@model cloudscribe.SimpleContent.Web.ViewModels.PageEditWithTemplateViewModel\n@inject IStringLocalizer<SimpleContent> sr\n@if (string.IsNullOrEmpty(Model.DisqusShortname))\n{\n    <input asp-for=\"ShowComments\" type=\"hidden\" />\n}\nelse\n{\n    <div class=\"mb-3\">\n        <div class=\"form-check\">\n            <input asp-for=\"ShowComments\" class=\"form-check-input\" />\n            <label asp-for=\"ShowComments\" class=\"form-check-label\">@sr[\"Enable Comments\"]</label>\n        </div>\n    </div>\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.CompiledViews.Bootstrap5/Views/Page/EditWithTemplateCorrelationKeyPartial.cshtml",
    "content": "﻿@model cloudscribe.SimpleContent.Web.ViewModels.PageEditWithTemplateViewModel\n@inject IStringLocalizer<SimpleContent> sr\n@* comment this and uncomment the below if you want editable correlationkey *@\n<input type=\"hidden\" asp-for=\"@Model.CorrelationKey\" />  \n@*\n    <div class=\"mb-3\">\n        <label asp-for=\"CorrelationKey\">@sr[\"Correlation Key\"]</label>\n        <input asp-for=\"CorrelationKey\" class=\"form-control\" />\n        <span asp-validation-for=\"CorrelationKey\" class=\"text-danger\"></span>\n    </div>\n*@ \n            "
  },
  {
    "path": "src/cloudscribe.SimpleContent.CompiledViews.Bootstrap5/Views/Page/EditWithTemplateDraftPubDatePartial.cshtml",
    "content": "﻿@model cloudscribe.SimpleContent.Web.ViewModels.PageEditWithTemplateViewModel\n@inject IStringLocalizer<SimpleContent> sr\n@{ \n    var message = \"\";\n    if(Model.DraftPubDate.HasValue)\n    {\n        var format = sr[\"This content is scheduled to be published {0}. You can still edit and save changes to this draft before it is published by clicking \\\"Save Darft\\\"\"].ToString();\n        message = string.Format(format, Model.DraftPubDate.Value);\n    }\n\n}\n@if (Model.DraftPubDate.HasValue)\n{\n    <p class=\"text-success\"> @message </p>\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.CompiledViews.Bootstrap5/Views/Page/EditWithTemplateHistoryInfoPartial.cshtml",
    "content": "﻿@model cloudscribe.SimpleContent.Web.ViewModels.PageEditWithTemplateViewModel\n@inject IStringLocalizer<SimpleContent> sr\n@if (Model.HistoryId.HasValue)\n{\n    <div class=\"alert alert-warning\" role=\"alert\">\n        @if (Model.DidReplaceDraft)\n        {\n            @sr[\"A previous version of this post has been restored to the editor, replacing the current draft version. If this is not intended, do not save/publish this version.\"]\n        }\n        @if (Model.DidRestoreDeleted)\n        {\n            @sr[\"You've just restored a previously deleted post to the editor; click save/publish to re-create the post. If this is not intended, do not save/publish this version.\"]\n        }\n        @if (!Model.DidReplaceDraft && !Model.DidRestoreDeleted)\n        {\n            @sr[\"A previous version of this post has been restored to the editor. If this is not intended, do not save/publish this version.\"]\n        }\n    </div>\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.CompiledViews.Bootstrap5/Views/Page/EditWithTemplatePubDate.cshtml",
    "content": "﻿@model cloudscribe.SimpleContent.Web.ViewModels.PageEditWithTemplateViewModel\n@inject IStringLocalizer<SimpleContent> sr\n<input asp-for=\"NewPubDate\" type=\"hidden\" />\n<span asp-validation-for=\"NewPubDate\" class=\"text-danger\"></span>\n<input type=\"text\" id=\"PubDateDisplay\" class=\"form-control\"\n        data-bs-datepicker=\"true\"\n        data-bs-datepicker-iso-target-id=\"NewPubDate\"\n        data-bs-datepicker-iso-format=\"YYYY-MM-DDTHH:mm:ss.sss\"\n        value='@Model.NewPubDate?.ToString(\"g\")'\n        data-bs-datepicker-debug=\"false\"\n        data-bs-datepicker-keepOpen=\"false\"\n        data-bs-datepicker-allowInputToggle=\"true\"\n        data-bs-datepicker-locale=\"@CultureInfo.CurrentCulture.Name\" />\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.CompiledViews.Bootstrap5/Views/Page/EditWithTemplateScriptsPartial.cshtml",
    "content": "﻿@model cloudscribe.SimpleContent.Web.ViewModels.PageEditWithTemplateViewModel\n@inject IRoleSelectorProperties roleSelector\n<script src=\"~/cr/js/moment-with-locales.min.js\"></script>\n<script src=\"~/cr/js/bootstrap4-datetimepicker.min.js\"></script>\n<script src=\"~/cr/js/cloudscribe-datepicker-bootstrap4-unobtrusive.min.js\"></script>\n<script src=\"~/cr/js/jquery.validate.min.js\"></script>\n<script src=\"~/cr/js/jquery.validate.unobtrusive.min.js\"></script>\n<script src=\"~/cr/js/unobtrusive-validation-bs4.min.js\"></script>\n<script src=\"/cr/js/jquery.validate.hooks.min.js\"></script>\n<script src=\"/cr/js/jqueryvaildation.submitonce-unobtrusive.min.js\"></script>\n<script src=\"/cr/js/unsaved-changes-prompt.min.js\"></script>\n<script src=\"~/cr/js/ckeditor4114/ckeditor.js\"></script>\n<script src=\"~/cr/js/cloudscribe-ckeditor-unobtrusive.min.js\"></script>\n<environment names=\"Development\">\n    @foreach (var c in Model.Template.EditScripts.Where(x => (x.Environment == \"dev\" || x.Environment == \"any\")).OrderBy(x => x.Sort).ThenBy(x => x.Url).ToList())\n    {\n    <script src=\"@Url.Content(c.Url)\" asp-append-version=\"@(c.Url.StartsWith(\"/\"))\"></script>\n    }\n</environment>\n<environment names=\"Staging,Production\">\n    @foreach (var c in Model.Template.EditScripts.Where(x => (x.Environment == \"prod\" || x.Environment == \"any\")).OrderBy(x => x.Sort).ThenBy(x => x.Url).ToList())\n    {\n    <script src=\"@Url.Content(c.Url)\" asp-append-version=\"@(c.Url.StartsWith(\"/\"))\"></script>\n    }\n</environment>\n\n@if (roleSelector.RequiredScriptPaths != null)\n{\n    foreach (var s in roleSelector.RequiredScriptPaths)\n    {\n<script src=\"@Url.Content(s)\"></script>\n    }\n}\n<script src=\"~/cr/js/bootstrap-tooltip-toggle.js\"></script>\n<script src=\"/csscsr/js/edit-script.js\"></script>\n<script src=\"/csscsr/js/unsaved-changes-warning.js\"></script>\n<partial name=\"SummernoteScripts\" />"
  },
  {
    "path": "src/cloudscribe.SimpleContent.CompiledViews.Bootstrap5/Views/Page/EditWithTemplateStylesPartial.cshtml",
    "content": "﻿@model cloudscribe.SimpleContent.Web.ViewModels.PageEditWithTemplateViewModel\n<link rel=\"stylesheet\" href=\"~/cr/css/bootstrap4-datetimepicker.min.css\" />\n<environment names=\"Development\">\n    @foreach (var c in Model.Template.EditCss.Where(x => (x.Environment == \"dev\" || x.Environment == \"any\")).OrderBy(x => x.Sort).ThenBy(x => x.Url).ToList())\n    {\n        <link rel=\"stylesheet\" href=\"@Url.Content(c.Url)\" asp-append-version=\"@(c.Url.StartsWith(\"/\"))\" />\n    }\n</environment>\n<environment names=\"Staging,Production\">\n    @foreach (var c in Model.Template.EditCss.Where(x => (x.Environment == \"prod\" || x.Environment == \"any\")).OrderBy(x => x.Sort).ThenBy(x => x.Url).ToList())\n    {\n        <link rel=\"stylesheet\" href=\"@Url.Content(c.Url)\" asp-append-version=\"@(c.Url.StartsWith(\"/\"))\" />\n    }\n</environment>\n<link href=\"/cr/css/summernote-bs5.min.css\" rel=\"stylesheet\">"
  },
  {
    "path": "src/cloudscribe.SimpleContent.CompiledViews.Bootstrap5/Views/Page/EditorPartial.cshtml",
    "content": "﻿@model cloudscribe.SimpleContent.Web.ViewModels.PageEditViewModel\n@inject IStringLocalizer<SimpleContent> sr\n@inject ISummernoteOptionsResolver summernoteOptionsResolver\n@inject ICkeditorOptionsResolver editorOptionsResolver\n@{ \n    var summernoteOptions = await summernoteOptionsResolver.GetSummernoteOptions();\n    var ckOptions = await editorOptionsResolver.GetCkeditorOptions();\n    var contentId = Model.Id;\n    if (string.IsNullOrWhiteSpace(contentId)) { contentId = \"draft-page-\" + DateTime.UtcNow.ToString(\"yyyy-MM-dd-hh\"); }\n}  \n<div class=\"mb-3\">\n\t<label asp-for=\"Content\">@sr[\"Content\"]</label>\n    @if (Model.DisableEditor)\n    {\n        <textarea asp-for=\"Content\" class=\"form-control\" rows=\"10\" cols=\"70\"></textarea>\n    }\n    else\n    {\n        if (Model.ContentType == \"markdown\")\n        {\n            <textarea asp-for=\"Content\" class=\"form-control\" rows=\"10\" cols=\"70\"\n                      data-markdown-unobtrusive=\"\"\n                      data-markdown-autosave=\"true\"\n                      data-markdown-contentid=\"@contentId\"\n                      data-markdown-forceSync=\"true\"\n                      data-markdown-indentWithTabs=\"true\"\n                      data-markdown-spellChecker=\"true\"\n                      data-markdown-filemodalid=\"#fileBrowseDialog\"\n                      data-markdown-filebrowseurl=\"@summernoteOptions.ImageBrowseUrl\"\n                      data-markdown-dropfileuploadurl=\"@summernoteOptions.DropFileUrl\"></textarea>\n                    <div id=\"fileBrowseDialog\" class=\"modal fade\" tabindex=\"-1\" role=\"dialog\" aria-hidden=\"true\">\n                        <div class=\"modal-dialog modal-lg\" style=\"height:99%;width:99%;\">\n                            <div class=\"modal-content\">\n                                <div class=\"modal-header\">\n                                    <button type=\"button\" data-bs-dismiss=\"modal\" class=\"btn-close\" aria-label='@sr[\"Close\"]'></button>\n                                </div>\n                                <iframe id=\"frFileDialog\" frameborder=\"0\" style=\"overflow:hidden;height:100%;width:100%;min-height: 600px;\"></iframe>\n                            </div>\n                        </div>\n                    </div>\n\n        }\n        else\n        {\n            <textarea asp-for=\"Content\" rows=\"5\" class=\"form-control\"\n                data-summernote-unobtrusive=\"\"\n                data-summernote-config-url=\"@summernoteOptions.CustomConfigPath\"\n                data-summernote-toolbar-config-url=\"@summernoteOptions.CustomToolbarConfigPath\"\n                data-summernote-config-language=\"@summernoteOptions.LanguageCode\"\n                data-summernote-config-dropfileuploadurl=\"@summernoteOptions.DropFileUrl\"\n                data-summernote-config-filebrowserurl=\"@summernoteOptions.FileBrowseUrl\"\n                data-summernote-config-imagebrowseurl=\"@summernoteOptions.ImageBrowseUrl\">\n            </textarea>\n        }\n\n    }\n    <span asp-validation-for=\"Content\" class=\"text-danger\"></span>\n</div>\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.CompiledViews.Bootstrap5/Views/Page/EditorialDetailsPartial.cshtml",
    "content": "﻿@model cloudscribe.SimpleContent.Web.ViewModels.PageViewModel\n@inject IStringLocalizer<SimpleContent> sr\n@inject ISimpleContentThemeHelper themeHelper\n\n<div class=\"my-2\">\n    @if (Model.ShowCreatedDate.HasValue && Model.ShowCreatedDate != false && Model.ShowCreatedBy.HasValue && Model.ShowCreatedBy != false && Model.CurrentPage.CreatedByUser != null)\n    {\n        <small>@sr[\"Created\"]: @Model.CurrentPage.CreatedUtc.ToString(\"dd/MM/yyyy\") By: @Model.CurrentPage.CreatedByUser</small>\n    }\n    else if (Model.ShowCreatedDate.HasValue && Model.ShowCreatedDate != false)\n    {\n        <small>@sr[\"Created\"]: @Model.CurrentPage.CreatedUtc.ToString(\"dd/MM/yyyy\")</small>\n    }\n    else if (Model.ShowCreatedBy.HasValue && Model.ShowCreatedBy != false && Model.CurrentPage.CreatedByUser != null)\n    {\n        <small>@sr[\"Created By\"]: @Model.CurrentPage.CreatedByUser</small>\n    }\n\n    @if ((Model.ShowCreatedDate.HasValue && Model.ShowCreatedDate != false || Model.ShowCreatedBy.HasValue && Model.ShowCreatedBy != false) && (Model.ShowLastModifiedDate.HasValue && Model.ShowLastModifiedDate != false || Model.ShowLastModifiedBy.HasValue && Model.ShowLastModifiedBy != false))\n    {\n        @Html.Raw(\"&nbsp;|&nbsp;\");\n    }\n\n    @if (Model.ShowLastModifiedDate.HasValue && Model.ShowLastModifiedDate != false && Model.ShowLastModifiedBy.HasValue && Model.ShowLastModifiedBy != false && Model.CurrentPage.LastModifiedByUser != null)\n    {\n        <small>@sr[\"Last Updated\"]: @Model.CurrentPage.LastModified.ToString(\"dd/MM/yyyy\") By: @Model.CurrentPage.LastModifiedByUser</small>\n    }\n    else if (Model.ShowLastModifiedDate.HasValue && Model.ShowLastModifiedDate != false)\n    {\n        <small>@sr[\"Updated\"]: @Model.CurrentPage.LastModified.ToString(\"dd/MM/yyyy\")</small>\n    }\n    else if (Model.ShowLastModifiedBy.HasValue && Model.ShowLastModifiedBy != false && Model.CurrentPage.LastModifiedByUser != null)\n    {\n        <small>@sr[\"Updated By\"]: @Model.CurrentPage.LastModifiedByUser</small>\n    }\n</div>"
  },
  {
    "path": "src/cloudscribe.SimpleContent.CompiledViews.Bootstrap5/Views/Page/EditorialShowHidePartial.cshtml",
    "content": "﻿@model cloudscribe.SimpleContent.Web.ViewModels.PageEditViewModel\n@inject IStringLocalizer<SimpleContent> sr\n\n<div class=\"mb-3\">\n    <p>@sr[\"Show / hide the following information below the main content of the page.\"]</p>\n</div>\n<div class=\"mb-3\">\n    <div class=\"row\">\n        <div class=\"col col-lg-2\">&nbsp;</div>\n        <div class=\"col col-lg-1 text-center\">\n            @sr[\"Use Site Default\"]\n        </div>\n        <div class=\"col col-lg-1 text-center\">\n            @sr[\"Show on this Page\"]\n        </div>\n        <div class=\"col col-lg-1 text-center\">\n            @sr[\"Hide on this Page\"]\n        </div>\n    </div>\n    <div class=\"row\" data-bs-toggle=\"tooltip\" data-placement=\"left\" title='@sr[\"Show Created By\"]'>\n        <div class=\"col col-lg-2\">\n            <label asp-for=\"ShowCreatedBy\" class=\"form-check-label\">\n                @sr[\"Show Created By\"]\n            </label>\n        </div>\n        <div class=\"col col-lg-1 text-center\">\n            <input id=\"ShowCreatedBy\" name=\"ShowCreatedBy\" type=\"radio\" value=\"\" @(Model.ShowCreatedBy.HasValue || Model.ShowCreatedBy != null ? \"\" : \"checked\")>\n        </div>\n        <div class=\"col col-lg-1 text-center\">\n            <input asp-for=\"ShowCreatedBy\" type=\"radio\" value=\"true\">\n        </div>\n        <div class=\"col col-lg-1 text-center\">\n            <input asp-for=\"ShowCreatedBy\" type=\"radio\" value=\"false\">\n        </div>\n    </div>\n    <div class=\"row\" data-bs-toggle=\"tooltip\" data-placement=\"left\" title='@sr[\"Show Created Date\"]'>\n        <div class=\"col col-lg-2\">\n            <label asp-for=\"ShowCreatedDate\" class=\"form-check-label\">\n                @sr[\"Show Created Date\"]\n            </label>\n        </div>\n        <div class=\"col col-lg-1 text-center\">\n            <input id=\"ShowCreatedDate\" name=\"ShowCreatedDate\" type=\"radio\" value=\"\" @(Model.ShowCreatedDate.HasValue || Model.ShowCreatedDate != null ? \"\" : \"checked\")>\n        </div>\n        <div class=\"col col-lg-1 text-center\">\n            <input asp-for=\"ShowCreatedDate\" type=\"radio\" value=\"true\">\n        </div>\n        <div class=\"col col-lg-1 text-center\">\n            <input asp-for=\"ShowCreatedDate\" type=\"radio\" value=\"false\">\n        </div>\n    </div>\n    <div class=\"row\" data-bs-toggle=\"tooltip\" data-placement=\"left\" title='@sr[\"Show Last Modified By\"]'>\n        <div class=\"col col-lg-2\">\n            <label asp-for=\"ShowLastModifiedBy\" class=\"form-check-label\">\n                @sr[\"Show Last Modified By\"]\n            </label>\n        </div>\n        <div class=\"col col-lg-1 text-center\">\n            <input id=\"ShowLastModifiedBy\" name=\"ShowLastModifiedBy\" type=\"radio\" value=\"\" @(Model.ShowLastModifiedBy.HasValue || Model.ShowLastModifiedBy != null ? \"\" : \"checked\")>\n        </div>\n        <div class=\"col col-lg-1 text-center\">\n            <input asp-for=\"ShowLastModifiedBy\" type=\"radio\" value=\"true\">\n        </div>\n        <div class=\"col col-lg-1 text-center\">\n            <input asp-for=\"ShowLastModifiedBy\" type=\"radio\" value=\"false\">\n        </div>\n    </div>\n    <div class=\"row\" data-bs-toggle=\"tooltip\" data-placement=\"left\" title='@sr[\"Show Last Modified Date\"]'>\n        <div class=\"col col-lg-2\">\n            <label asp-for=\"ShowLastModifiedDate\" class=\"form-check-label\">\n                @sr[\"Show Last Modified Date\"]\n            </label>\n        </div>\n        <div class=\"col col-lg-1 text-center\">\n            <input id=\"ShowLastModifiedDate\" name=\"ShowLastModifiedDate\" type=\"radio\" value=\"\" @(Model.ShowLastModifiedDate.HasValue || Model.ShowLastModifiedDate != null ? \"\" : \"checked\")>\n        </div>\n        <div class=\"col col-lg-1 text-center\">\n            <input asp-for=\"ShowLastModifiedDate\" type=\"radio\" value=\"true\">\n        </div>\n        <div class=\"col col-lg-1 text-center\">\n            <input asp-for=\"ShowLastModifiedDate\" type=\"radio\" value=\"false\">\n        </div>\n    </div>\n</div>"
  },
  {
    "path": "src/cloudscribe.SimpleContent.CompiledViews.Bootstrap5/Views/Page/EditorialShowHidePartialTemplates.cshtml",
    "content": "﻿@model cloudscribe.SimpleContent.Web.ViewModels.PageEditWithTemplateViewModel\n@inject IStringLocalizer<SimpleContent> sr\n\n<div class=\"mb-3\">\n    <p>@sr[\"Show / hide the following information below the main content of the page.\"]</p>\n</div>\n<div class=\"mb-3\">\n    <div class=\"row\">\n        <div class=\"col col-lg-2\">&nbsp;</div>\n        <div class=\"col col-lg-1 text-center\">\n            @sr[\"Use Site Default\"]\n        </div>\n        <div class=\"col col-lg-1 text-center\">\n            @sr[\"Show on this Page\"]\n        </div>\n        <div class=\"col col-lg-1 text-center\">\n            @sr[\"Hide on this Page\"]\n        </div>\n    </div>\n    <div class=\"row\" data-bs-toggle=\"tooltip\" data-placement=\"left\" title='@sr[\"Show Created By\"]'>\n        <div class=\"col col-lg-2\">\n            <label asp-for=\"ShowCreatedBy\" class=\"form-check-label\">\n                @sr[\"Show Created By\"]\n            </label>\n        </div>\n        <div class=\"col col-lg-1 text-center\">\n            <input id=\"ShowCreatedBy\" name=\"ShowCreatedBy\" type=\"radio\" value=\"\" @(Model.ShowCreatedBy.HasValue || Model.ShowCreatedBy != null ? \"\" : \"checked\")>\n        </div>\n        <div class=\"col col-lg-1 text-center\">\n            <input asp-for=\"ShowCreatedBy\" type=\"radio\" value=\"true\">\n        </div>\n        <div class=\"col col-lg-1 text-center\">\n            <input asp-for=\"ShowCreatedBy\" type=\"radio\" value=\"false\">\n        </div>\n    </div>\n    <div class=\"row\" data-bs-toggle=\"tooltip\" data-placement=\"left\" title='@sr[\"Show Created Date\"]'>\n        <div class=\"col col-lg-2\">\n            <label asp-for=\"ShowCreatedDate\" class=\"form-check-label\">\n                @sr[\"Show Created Date\"]\n            </label>\n        </div>\n        <div class=\"col col-lg-1 text-center\">\n            <input id=\"ShowCreatedDate\" name=\"ShowCreatedDate\" type=\"radio\" value=\"\" @(Model.ShowCreatedDate.HasValue || Model.ShowCreatedDate != null ? \"\" : \"checked\")>\n        </div>\n        <div class=\"col col-lg-1 text-center\">\n            <input asp-for=\"ShowCreatedDate\" type=\"radio\" value=\"true\">\n        </div>\n        <div class=\"col col-lg-1 text-center\">\n            <input asp-for=\"ShowCreatedDate\" type=\"radio\" value=\"false\">\n        </div>\n    </div>\n    <div class=\"row\" data-bs-toggle=\"tooltip\" data-placement=\"left\" title='@sr[\"Show Last Modified By\"]'>\n        <div class=\"col col-lg-2\">\n            <label asp-for=\"ShowLastModifiedBy\" class=\"form-check-label\">\n                @sr[\"Show Last Modified By\"]\n            </label>\n        </div>\n        <div class=\"col col-lg-1 text-center\">\n            <input id=\"ShowLastModifiedBy\" name=\"ShowLastModifiedBy\" type=\"radio\" value=\"\" @(Model.ShowLastModifiedBy.HasValue || Model.ShowLastModifiedBy != null ? \"\" : \"checked\")>\n        </div>\n        <div class=\"col col-lg-1 text-center\">\n            <input asp-for=\"ShowLastModifiedBy\" type=\"radio\" value=\"true\">\n        </div>\n        <div class=\"col col-lg-1 text-center\">\n            <input asp-for=\"ShowLastModifiedBy\" type=\"radio\" value=\"false\">\n        </div>\n    </div>\n    <div class=\"row\" data-bs-toggle=\"tooltip\" data-placement=\"left\" title='@sr[\"Show Last Modified Date\"]'>\n        <div class=\"col col-lg-2\">\n            <label asp-for=\"ShowLastModifiedDate\" class=\"form-check-label\">\n                @sr[\"Show Last Modified Date\"]\n            </label>\n        </div>\n        <div class=\"col col-lg-1 text-center\">\n            <input id=\"ShowLastModifiedDate\" name=\"ShowLastModifiedDate\" type=\"radio\" value=\"\" @(Model.ShowLastModifiedDate.HasValue || Model.ShowLastModifiedDate != null ? \"\" : \"checked\")>\n        </div>\n        <div class=\"col col-lg-1 text-center\">\n            <input asp-for=\"ShowLastModifiedDate\" type=\"radio\" value=\"true\">\n        </div>\n        <div class=\"col col-lg-1 text-center\">\n            <input asp-for=\"ShowLastModifiedDate\" type=\"radio\" value=\"false\">\n        </div>\n    </div>\n</div>"
  },
  {
    "path": "src/cloudscribe.SimpleContent.CompiledViews.Bootstrap5/Views/Page/FeaturedPostsPartial.cshtml",
    "content": "﻿@model cloudscribe.SimpleContent.Web.ViewModels.PageViewModel\n@inject ISimpleContentThemeHelper themeHelper\n@{\n    var themeSettings = themeHelper.GetThemeSettings();\n}\n@if (Model.ProjectSettings.ShowFeaturedPostsOnDefaultPage && Model.CurrentPage != null && Model.CurrentPage.Slug == Model.ProjectSettings.DefaultPageSlug)\n{\n    @await Component.InvokeAsync(\"FeaturedPosts\", new { viewName = \"FeaturedPosts\", numberToShow = themeSettings.NumberOfFeaturedPostsToShow })\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.CompiledViews.Bootstrap5/Views/Page/History.cshtml",
    "content": "﻿@model cloudscribe.SimpleContent.Web.ViewModels.ContentHistoryViewModel\n@inject IStringLocalizer<SimpleContent> sr\n@inject IPageRoutes  pageRoutes\n@{\n    var format = sr[\"{0} - Content Edit History\"].ToString();\n    ViewData[\"Title\"] = string.Format(format, Model.ContentTitle);\n}\n<h1>@ViewData[\"Title\"]</h1>\n<a asp-route=\"@pageRoutes.PageRouteName\" asp-route-slug=\"@Model.ContentSlug\" itemprop=\"url\">@sr[\"View current version\"]</a>\n<partial name=\"HistoryGridPartial\" model=\"@Model\" />\n<cs-pager asp-route=\"@pageRoutes.PageHistoryRouteName\"\n          asp-route-slug=\"@Model.ContentSlug\"\n          asp-route-pagesize=\"@Model.History.PageSize\"\n          cs-paging-pagesize=\"@Model.History.PageSize\"\n          cs-paging-pagenumber=\"@Model.History.PageNumber\"\n          cs-paging-totalitems=\"@Model.History.TotalItems\"\n          cs-pager-ul-class=\"pagination d-flex flex-wrap\"\n          cs-pager-li-current-class=\"page-item active\"\n          cs-pager-li-other-class=\"page-item\"\n          cs-pager-li-non-active-class=\"page-item disabled\"\n          cs-pager-link-current-class=\"page-link\"\n          cs-pager-link-other-class=\"page-link\"\n          cs-first-page-title='@sr[\"First Page\"]'\n          cs-last-page-title='@sr[\"Last Page\"]'\n          cs-previous-page-title='@sr[\"Previous page\"]'\n          cs-next-page-title='@sr[\"Next page\"]'></cs-pager>\n@if (Model.CanEditPages)\n{\n<form role=\"form\" asp-controller=\"Page\" asp-action=\"DeleteHistoryOlderThan\">\n    <div class=\"row align-items-left mt-1 mb-1 gx-2\">\n        <div class=\"col-2 w-auto align-self-center\">\n            <input type=\"hidden\" name=\"id\" value=\"@Model.ContentId\" />\n            <input type=\"submit\" value='@sr[\"Delete Older Than\"]' class=\"btn btn-sm btn-danger \" />\n\n        </div>\n        <div class=\"col-2 w-auto align-self-center\">\n            <select class=\"form-control ms-1 me-1\" name=\"days\" id=\"days\">\n                <option value=\"-1\">All</option>\n                <option>10</option>\n                <option>20</option>\n                <option>30</option>\n                <option>60</option>\n                <option>90</option>\n                <option>120</option>\n            </select>\n        </div>\n\n        <div class=\"col-3 w-auto align-self-center\">\n            @sr[\"Days\"]\n        </div>\n    </div>\n</form>\n\n}"
  },
  {
    "path": "src/cloudscribe.SimpleContent.CompiledViews.Bootstrap5/Views/Page/HistoryInfoPartial.cshtml",
    "content": "﻿@model cloudscribe.SimpleContent.Web.ViewModels.PageViewModel\n@inject IStringLocalizer<SimpleContent> sr\n@inject IPageRoutes pageRoutes\n@if (Model.HistoryId.HasValue && Model.HistoryArchiveDate.HasValue)\n{\n    <div class=\"alert alert-warning\" role=\"alert\">\n        @sr[\"You are currently viewing a previous version of this page that was archived\"]&nbsp;@Model.FormatDateForEdit(Model.HistoryArchiveDate.Value)\n        @if (Model.HasPublishedVersion)\n        {\n            <a class=\"btn btn-primary btn-sm\" href=\"@Url.RouteUrl(pageRoutes.PageRouteName, new { slug = Model.CurrentPage.Slug })\">@sr[\"View published version.\"]</a>\n        }\n        <a class=\"btn btn-primary btn-sm\" href=\"@Url.RouteUrl(pageRoutes.PageEditRouteName, new { slug = Model.CurrentPage.Slug, historyId = Model.HistoryId.Value })\">@sr[\"Restore this version to editor\"]</a>\n\n        <button type=\"button\" class=\"btn btn-danger btn-sm\" data-bs-toggle=\"modal\" data-bs-target=\"#confirmDeleteHistory\">\n            @sr[\"Delete this version history item\"]\n        </button>\n    </div>\n    <form asp-controller=\"ContentHistory\" asp-action=\"DeleteHistory\">\n        <input type=\"hidden\" name=\"id\" value=\"@Model.HistoryId\" />\n        <div class=\"modal fade\" id=\"confirmDeleteHistory\" tabindex=\"-1\" role=\"dialog\" aria-labelledby=\"confirmDeleteHistoryHeading\">\n            <div class=\"modal-dialog modal-sm\" role=\"document\">\n                <div class=\"modal-content\">\n                    <div class=\"modal-header\">\n                        <h4 class=\"modal-title\" id=\"confirmDeleteHistoryHeading\">@sr[\"Confirm Delete\"]</h4>\n                        <button type=\"button\" data-bs-dismiss=\"modal\" class=\"btn-close\" aria-label='@sr[\"Close\"]'></button>\n                    </div>\n                    <div class=\"modal-body\">\n                        @sr[\"Are you sure you want to permanently delete this version history item?\"]\n                    </div>\n                    <div class=\"modal-footer\">\n                        <button type=\"button\" class=\"btn btn-primary\" data-bs-dismiss=\"modal\">@sr[\"Cancel\"]</button>\n                        <input type=\"submit\" value='@sr[\"Delete\"]' class=\"btn btn-danger btn-ok\" />\n                    </div>\n                </div>\n            </div>\n        </div>\n    </form>\n\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.CompiledViews.Bootstrap5/Views/Page/Index.cshtml",
    "content": "﻿@model cloudscribe.SimpleContent.Web.ViewModels.PageViewModel\n\n@section Meta {\n    <partial name=\"MetaPartial\" model=\"@Model\" />\n}\n@section Styles {\n    <partial name=\"StylePartial\" model=\"@Model\" />\n    @if (Model.CurrentPage != null)\n    {\n        <environment names=\"Development\">\n            @foreach (var c in Model.CurrentPage.Resources.Where(x => x.Type == \"css\" && (x.Environment == \"dev\" || x.Environment == \"any\")).OrderBy(x => x.Sort).ThenBy(x => x.Url).ToList())\n            {\n                <link rel=\"stylesheet\" href=\"@Url.Content(c.Url)\" asp-append-version=\"@(c.Url.StartsWith(\"/\"))\" />\n            }\n        </environment>\n        <environment names=\"Staging,Production\">\n            @foreach (var c in Model.CurrentPage.Resources.Where(x => x.Type == \"css\" && (x.Environment == \"prod\" || x.Environment == \"any\")).OrderBy(x => x.Sort).ThenBy(x => x.Url).ToList())\n            {\n                <link rel=\"stylesheet\" href=\"@Url.Content(c.Url)\" asp-append-version=\"@(c.Url.StartsWith(\"/\"))\" />\n            }\n        </environment>\n    }\n    @if (Model.Template != null)\n    {\n        <environment names=\"Development\">\n            @foreach (var c in Model.Template.RenderCss.Where(x => (x.Environment == \"dev\" || x.Environment == \"any\")).OrderBy(x => x.Sort).ThenBy(x => x.Url).ToList())\n            {\n                <link rel=\"stylesheet\" href=\"@Url.Content(c.Url)\" asp-append-version=\"@(c.Url.StartsWith(\"/\"))\" />\n            }\n        </environment>\n        <environment names=\"Staging,Production\">\n            @foreach (var c in Model.Template.RenderCss.Where(x => (x.Environment == \"prod\" || x.Environment == \"any\")).OrderBy(x => x.Sort).ThenBy(x => x.Url).ToList())\n            {\n                <link rel=\"stylesheet\" href=\"@Url.Content(c.Url)\" asp-append-version=\"@(c.Url.StartsWith(\"/\"))\" />\n            }\n        </environment>\n    }\n}\n@section Toolbar {\n    <partial name=\"ToolsPartial\" model=\"@Model\" />\n}\n<partial name=\"PageDetailPartial\" model=\"@Model\" />\n<partial name=\"RecentPostsPartial\" model=\"@Model\" />\n<partial name=\"FeaturedPostsPartial\" model=\"@Model\" />\n@section Scripts {\n    @if (Model.CurrentPage != null)\n    {\n        <environment names=\"Development\">\n            @foreach (var c in Model.CurrentPage.Resources.Where(x => x.Type == \"js\" && (x.Environment == \"dev\" || x.Environment == \"any\")).OrderBy(x => x.Sort).ThenBy(x => x.Url).ToList())\n            {\n                <script src=\"@Url.Content(c.Url)\" asp-append-version=\"@(c.Url.StartsWith(\"/\"))\"></script>\n            }\n        </environment>\n        <environment names=\"Staging,Production\">\n            @foreach (var c in Model.CurrentPage.Resources.Where(x => x.Type == \"js\" && (x.Environment == \"prod\" || x.Environment == \"any\")).OrderBy(x => x.Sort).ThenBy(x => x.Url).ToList())\n            {\n                <script src=\"@Url.Content(c.Url)\" asp-append-version=\"@(c.Url.StartsWith(\"/\"))\"></script>\n            }\n        </environment>\n        \n        @* User custom inline script - render after all external JS resources *@\n        @if (Model.CurrentPage?.Script != null && !string.IsNullOrWhiteSpace(Model.CurrentPage.Script))\n        {\n            <script src=\"@Url.Action(\"InlineScript\", \"Page\", new { pageId = Model.CurrentPage.Id, v = Model.CurrentPage.LastModified.Ticks })\"></script>\n        }\n    }\n    <partial name=\"PageScriptsPartial\" model=\"@Model\" />\n\n    @if (Model.Template != null)\n    {\n        <environment names=\"Development\">\n            @foreach (var c in Model.Template.RenderScripts.Where(x => (x.Environment == \"dev\" || x.Environment == \"any\")).OrderBy(x => x.Sort).ThenBy(x => x.Url).ToList())\n            {\n                <script src=\"@Url.Content(c.Url)\" asp-append-version=\"@(c.Url.StartsWith(\"/\"))\"></script>\n            }\n        </environment>\n        <environment names=\"Staging,Production\">\n            @foreach (var c in Model.Template.RenderScripts.Where(x => (x.Environment == \"prod\" || x.Environment == \"any\")).OrderBy(x => x.Sort).ThenBy(x => x.Url).ToList())\n            {\n                <script src=\"@Url.Content(c.Url)\" asp-append-version=\"@(c.Url.StartsWith(\"/\"))\"></script>\n            }\n        </environment>\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.CompiledViews.Bootstrap5/Views/Page/IndexMenu.cshtml",
    "content": "﻿@model cloudscribe.SimpleContent.Web.ViewModels.PageViewModel\n@section Meta {\n    <meta name=\"robots\" content=\"noindex, follow\" />\n}\n@section Styles {\n    <partial name=\"StylePartial\" model=\"@Model\" />\n}\n@section Toolbar {\n   \n    <partial name=\"ToolsPartial\" model=\"@Model\" />\n    \n}\n@await Component.InvokeAsync(\"Navigation\", new { viewName = \"ChildTree\", filterName = NamedNavigationFilters.ChildTree, startingNodeKey = \"RootNode\" })\n\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.CompiledViews.Bootstrap5/Views/Page/MetaPartial.cshtml",
    "content": "﻿@model cloudscribe.SimpleContent.Web.ViewModels.PageViewModel\n@{\n    var imageUrl = Model.ExtractFirstImageUrl(Model.CurrentPage, Url);\n    \n}\n\n@if (Model.CurrentPage != null && !string.IsNullOrEmpty(Model.CurrentPage.MetaDescription))\n{\n    <meta name=\"description\" content=\"@Model.CurrentPage.MetaDescription\" />\n    <meta property=\"og:title\" content=\"@Model.CurrentPage.Title\" />\n    <meta property=\"og:type\" content=\"article\" />\n    <meta property=\"og:url\" content=\"@ViewContext.HttpContext.Request.GetCurrentFullUrl()\" />\n@if (!string.IsNullOrEmpty(imageUrl))\n{\n    <meta property=\"og:image\" content=\"@imageUrl\" />\n}\n    <meta property=\"og:description\" content=\"@Model.CurrentPage.MetaDescription\" />\n@if (!string.IsNullOrWhiteSpace(Model.ProjectSettings.SiteName))\n{\n    <meta property=\"og:site_name\" content=\"@Model.ProjectSettings.SiteName\" />\n}\n@if (!string.IsNullOrWhiteSpace(Model.ProjectSettings.FacebookAppId))\n{\n    <meta property=\"fb:app_id\" content=\"@Model.ProjectSettings.FacebookAppId\" />\n}\n\n    <meta name=\"twitter:card\" content=\"summary\">\n@if (!string.IsNullOrWhiteSpace(Model.ProjectSettings.TwitterPublisher))\n{\n    <meta name=\"twitter:site\" content=\"@Model.ProjectSettings.TwitterPublisher\" />\n}\n    <meta name=\"twitter:title\" content=\"@Model.CurrentPage.Title\">\n    <meta name=\"twitter:description\" content=\"@Model.CurrentPage.MetaDescription\">\n@if (!string.IsNullOrWhiteSpace(Model.ProjectSettings.TwitterCreator))\n{\n    <meta name=\"twitter:creator\" content=\"@Model.ProjectSettings.TwitterCreator\" />\n}\n@if (!string.IsNullOrEmpty(imageUrl))\n{\n    <meta name=\"twitter:image\" content=\"@imageUrl\" />\n}\n\n}\n@*\n    TODO: implement this stuff\n    <link type=\"application/rsd+xml\" rel=\"edituri\" title=\"RSD\" href=\"~/views/robots/rsd\" />\n    <link type=\"application/rss+xml\" rel=\"alternate\" title=\"@Model.BlogSettings.Title\" href=\"~/feed/rss/\" />\n    <link type=\"application/atom+xml\" rel=\"alternate\" title=\"@Model.BlogSettings.Title\" href=\"~/feed/atom/\" />\n*@\n<link type=\"application/wlwmanifest+xml\" rel=\"wlwmanifest\"  href=\"~/wlwmanifest.xml\" />\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.CompiledViews.Bootstrap5/Views/Page/NewPage.cshtml",
    "content": "﻿@model cloudscribe.SimpleContent.Web.ViewModels.NewContentViewModel\n@inject IStringLocalizer<SimpleContent> sr\n@inject IPageRoutes  pageRoutes\n@{\n    ViewData[\"Title\"] = sr[\"Create a New Page\"];\n}\n<h2>@ViewData[\"Title\"]</h2>\n<a class=\"btn btn-primary\" asp-route=\"@pageRoutes.PageEditRouteName\" asp-route-parentslug=\"@Model.ParentSlug\">@sr[\"New Page with Standard Content Editor\"]</a>\n@if (Model.CountOfTemplates > 0)\n{\n    <h3>@sr[\"Create Page From Template\"]</h3>\n    <partial name=\"NewContentPartial\" model=\"Model\" />\n}\n@section Scripts {\n    <script src=\"~/cr/js/jquery.validate.min.js\"></script>\n    <script src=\"~/cr/js/jquery.validate.unobtrusive.min.js\"></script>\n    <script src=\"~/cr/js/unobtrusive-validation-bs4.min.js\"></script>\n    <script src=\"~/cr/js/jquery.validate.hooks.min.js\"></script>\n    <script src=\"~/cr/js/jqueryvaildation.submitonce-unobtrusive.min.js\"></script>\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.CompiledViews.Bootstrap5/Views/Page/NoPages.cshtml",
    "content": "﻿@model int\n@inject IStringLocalizer<SimpleContent> sr\n@inject ISimpleContentThemeHelper themeHelper\n@{\n    var themeSettings = themeHelper.GetThemeSettings();\n}\n@{\n    ViewData[\"Title\"] = sr[\"No Pages Found\"];\n    ViewData[\"Description\"] = sr[\"No pages have been created yet, if this is your site, please login to create your first page\"];\n}\n<div class=\"jumbotron text-center\">\n    <header>\n        <h1><span aria-hidden=\"true\" class=\"@themeSettings.Icons.PageNotFound\"></span> @ViewData[\"Title\"]</h1>\n    </header>\n    <p>@ViewData[\"Description\"]</p>\n    <a class=\"btn btn-primary btn-lg\" href=\"@Url.Content(\"~/\")\"><span aria-hidden=\"true\" class=\"@themeSettings.Icons.Home\"></span> @sr[\"Site Home\"]</a>\n</div>\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.CompiledViews.Bootstrap5/Views/Page/NotFound.cshtml",
    "content": "﻿@model int\n@inject ISimpleContentThemeHelper themeHelper\n@inject IStringLocalizer<SimpleContent> sr\n@{\n    var themeSettings = themeHelper.GetThemeSettings();\n}\n\n@{\n    switch (Model)\n    {\n        case 400:\n            ViewData[\"Icon\"] = themeSettings.Icons.BadRequest;\n            ViewData[\"Title\"] = sr[\"Bad Request\"];\n            ViewData[\"Description\"] = sr[\"Your browser sent a request that this server could not understand.\"];\n            break;\n        case 401:\n            ViewData[\"Icon\"] = themeSettings.Icons.UnAuthorized;\n            ViewData[\"Title\"] = sr[\"Unauthorized\"];\n            ViewData[\"Description\"] = sr[\"Sorry, but the page requires authentication.\"];\n            break;\n        case 403:\n            ViewData[\"Icon\"] = themeSettings.Icons.Forbidden;\n            ViewData[\"Title\"] = sr[\"Forbidden\"];\n            ViewData[\"Description\"] = sr[\"Sorry, but you don't have permission to access this page.\"];\n            break;\n        case 404:\n            ViewData[\"Icon\"] = themeSettings.Icons.PageNotFound;\n            ViewData[\"Title\"] = sr[\"Page Not Found\"];\n            ViewData[\"Description\"] = sr[\"Sorry, but the page you were looking for can't be found.\"];\n            break;\n        case 500:\n        default:\n            ViewData[\"Icon\"] = themeSettings.Icons.Error;\n            ViewData[\"Title\"] = sr[\"Unexpected Error\"];\n            ViewData[\"Description\"] = sr[\"Well, this is embarrassing. An error occurred while processing your request. Rest assured, this problem has been logged and hamsters have been released to fix the problem.\"];\n            break;\n    }\n}\n<div class=\"jumbotron text-center\">\n    <header>\n        <h1><span aria-hidden=\"true\" class=\"@ViewData[\"Icon\"]\"></span> @ViewData[\"Title\"]</h1>\n    </header>\n    <p>@ViewData[\"Description\"]</p>\n    <a class=\"btn btn-primary btn-lg\" href=\"@Url.Content(\"~/\")\"><span aria-hidden=\"true\" class=\"@themeSettings.Icons.Home\"></span> @sr[\"Site Home\"]</a>\n</div>\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.CompiledViews.Bootstrap5/Views/Page/PageBottomPartial.cshtml",
    "content": "﻿@model cloudscribe.SimpleContent.Web.ViewModels.PageViewModel\n\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.CompiledViews.Bootstrap5/Views/Page/PageContentBodyPartial.cshtml",
    "content": "﻿@model cloudscribe.SimpleContent.Web.ViewModels.PageViewModel\n@inject IStringLocalizer<SimpleContent> sr\n@inject IContentTemplateService templateService\n@inject IHttpContextAccessor HttpContextAccessor\n@{\n    var showDraft = Context.Request.Query.ContainsKey(\"showDraft\") \n        && Context.Request.Query[\"showDraft\"][0].ToString().ToLower().Equals(\"true\");\n\n    var usingHistory = Context.Request.Query.ContainsKey(\"historyId\");\n\n\n    string dynamicViewName = null;\n    object templateModel = null;\n    if (Model.CurrentPage != null && !string.IsNullOrWhiteSpace(Model.CurrentPage.TemplateKey) && !usingHistory)\n    {\n        var template = await templateService.GetTemplate(Model.CurrentPage.ProjectId, Model.CurrentPage.TemplateKey);\n        if (template != null && !string.IsNullOrWhiteSpace(template.DynamicRenderPartialView))\n        {\n            templateModel = templateService.DesrializeTemplateModel(Model.CurrentPage, template, showDraft);\n            dynamicViewName = template.DynamicRenderPartialView;\n        }\n    }\n}\n\n@if (!usingHistory && templateModel != null && !string.IsNullOrWhiteSpace(dynamicViewName))\n{\n    <partial name=\"@dynamicViewName\" model=\"@templateModel\" />\n}\nelse\n{\n    // old school content field more suitable when showing history\n    <div itemprop=\"articleBody\">@Html.Raw(Model.FilterHtml(Model.CurrentPage))</div>\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.CompiledViews.Bootstrap5/Views/Page/PageDetailPartial.cshtml",
    "content": "﻿@model cloudscribe.SimpleContent.Web.ViewModels.PageViewModel\n@inject IStringLocalizer<SimpleContent> sr\n@inject ISimpleContentThemeHelper themeHelper\n@{\n    var themeSettings = themeHelper.GetThemeSettings();\n}\n@functions{\n\n    public string GetFooterClass()\n    {\n\n        return \"bh\";\n    }\n    public string GetEditTitle()\n    {\n        if (Model.CurrentPage != null) return Model.CurrentPage.Title;\n        return \"\";\n    }\n\n}\n<article class=\"page\" data-id=\"@Model.CurrentPage.Id\"\n         data-approve-comment-url=\"@Url.Action(\"AjaxApproveComment\", \"Page\")\"\n         data-delete-comment-url=\"@Url.Action(\"AjaxDeleteComment\", \"Page\")\"\n         itemscope itemtype=\"http://schema.org/Article\">\n    <partial name=\"DraftInfoPartial\" model=\"@Model\" />\n    <partial name=\"HistoryInfoPartial\" model=\"@Model\" />\n    @if (Model.CurrentPage.ShowHeading)\n    {\n        <header class=\"\">\n            <h1 id=\"article-title\" itemprop=\"headline name\">@Model.CurrentPage.Title</h1>\n            <partial name=\"PageTopPartial\" model=\"@Model\" />\n        </header>\n    }\n    <partial name=\"PageContentBodyPartial\" model=\"@Model\" />\n    <partial name=\"PageBottomPartial\" model=\"@Model\" />\n    \n    @if (!Model.CurrentPage.ShowHeading)\n    {\n        <schema-org-meta itemprop=\"headline\" content=\"@Model.CurrentPage.Title\"></schema-org-meta>\n    }\n    @{\n        var imageUrl = Model.ExtractFirstImageUrl(Model.CurrentPage, Url);\n        var imageSize = Model.ExtractFirstImageDimensions(Model.CurrentPage);\n    }\n    @if (!string.IsNullOrEmpty(imageUrl))\n    {\n        <div class=\"collapse\" aria-hidden=\"true\" itemprop=\"image\" itemscope itemtype=\"http://schema.org/ImageObject\">\n            <schema-org-meta itemprop=\"url\" content=\"@imageUrl\"></schema-org-meta>\n            <schema-org-meta itemprop=\"width\" content=\"@imageSize.Width\"></schema-org-meta>\n            <schema-org-meta itemprop=\"height\" content=\"@imageSize.Height\"></schema-org-meta>\n        </div>\n    }\n    @if (!string.IsNullOrEmpty(Model.CurrentPage.Author))\n    {\n        <div class=\"collapse\" aria-hidden=\"true\" itemprop=\"author\" itemscope itemtype=\"http://schema.org/Person\">\n            <schema-org-meta itemprop=\"name\" content=\"@Model.CurrentPage.Author\"></schema-org-meta>\n        </div>\n    }\n    @if (!string.IsNullOrEmpty(Model.ProjectSettings.Publisher))\n    {\n        <div class=\"collapse\" aria-hidden=\"true\" itemprop=\"publisher\" itemscope itemtype=\"http://schema.org/@Model.ProjectSettings.PublisherEntityType\">\n            <schema-org-meta itemprop=\"name\" content=\"@Model.ProjectSettings.Publisher\"></schema-org-meta>\n            <div class=\"collapse\" aria-hidden=\"true\" itemprop=\"logo\" itemscope itemtype=\"http://schema.org/ImageObject\">\n                <schema-org-meta itemprop=\"url\" content=\"@Model.ProjectSettings.PublisherLogoUrl\"></schema-org-meta>\n                <schema-org-meta itemprop=\"width\" content=\"@Model.ProjectSettings.PublisherLogoWidth\"></schema-org-meta>\n                <schema-org-meta itemprop=\"height\" content=\"@Model.ProjectSettings.PublisherLogoHeight\"></schema-org-meta>\n            </div>\n        </div>\n    }\n    @if (Model.CurrentPage.PubDate.HasValue)\n    {\n        <schema-org-meta itemprop=\"datePublished\" content=\"@Model.CurrentPage.PubDate.Value.ToString(\"s\", CultureInfo.InvariantCulture)\"></schema-org-meta>\n        <schema-org-meta itemprop=\"dateModified\" content=\"@Model.CurrentPage.LastModified.ToString(\"s\", CultureInfo.InvariantCulture)\"></schema-org-meta>\n    }\n    @if (Model.CurrentPage != null && Model.CurrentPage.ShowMenu)\n    {\n        @await Component.InvokeAsync(\"Navigation\", new { viewName = \"ChildTree\", filterName = NamedNavigationFilters.ChildTree, startingNodeKey = \"\" })\n    }\n   <partial name=\"CommentWrapperPartial\" model=\"@Model\" />\n   <partial name=\"EditorialDetailsPartial\" model=\"@Model\" />\n</article>\n@if (Model.CurrentPage != null && Model.CanEdit && !Model.ShowingDeleted && !Model.ShowingDraft && !Model.HistoryId.HasValue && Model.CurrentPage.IsPublished)\n{\n    <form id=\"unpubform\" class=\"form-inline\" asp-controller=\"Page\" asp-action=\"UnPublish\" method=\"post\">\n        <input name=\"id\" value=\"@Model.CurrentPage.Id\" type=\"hidden\" />\n        <div class=\"modal fade\" id=\"confirmUnpublishModal\" tabindex=\"-1\" role=\"dialog\" aria-labelledby=\"confirmUnpublishHeading\">\n            <div class=\"modal-dialog modal-sm\" role=\"document\">\n                <div class=\"modal-content\">\n                    <div class=\"modal-header\">\n                        <h4 class=\"modal-title\" id=\"confirmUnpublishHeading\">@sr[\"Confirm Unpublish\"]</h4>\n                        <button type=\"button\" data-bs-dismiss=\"modal\" class=\"btn-close\" aria-label='@sr[\"Close\"]'></button>\n                    </div>\n                    <div class=\"modal-body\">\n                        @string.Format(sr[\"Are you sure you want to unpublish the page {0}?\"], Model.CurrentPage.Title)\n                    </div>\n                    <div class=\"modal-footer\">\n                        <button type=\"button\" class=\"btn btn-primary\" data-bs-dismiss=\"modal\">@sr[\"Cancel\"]</button>\n                        <input type=\"submit\" value='@sr[\"Unpublish\"]' class=\"btn btn-danger btn-ok\" />\n                    </div>\n                </div>\n            </div>\n        </div>\n    </form>\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.CompiledViews.Bootstrap5/Views/Page/PageScriptsPartial.cshtml",
    "content": "﻿@model cloudscribe.SimpleContent.Web.ViewModels.PageViewModel\n<script src=\"~/cr/js/ckeditor4114/plugins/codesnippet/lib/highlight/highlight.pack.js\"></script>\n<script src=\"~/cr/js/syntax-highlight-init.js\"></script>"
  },
  {
    "path": "src/cloudscribe.SimpleContent.CompiledViews.Bootstrap5/Views/Page/PageTopPartial.cshtml",
    "content": "﻿@model cloudscribe.SimpleContent.Web.ViewModels.PageViewModel\n\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.CompiledViews.Bootstrap5/Views/Page/RecentPostsPartial.cshtml",
    "content": "﻿@model cloudscribe.SimpleContent.Web.ViewModels.PageViewModel\n@inject ISimpleContentThemeHelper themeHelper\n@{\n    var themeSettings = themeHelper.GetThemeSettings();\n}\n@if (Model.ProjectSettings.ShowRecentPostsOnDefaultPage && Model.CurrentPage != null && Model.CurrentPage.Slug == Model.ProjectSettings.DefaultPageSlug)\n{\n    @await Component.InvokeAsync(\"RecentPosts\", new { viewName = \"RecentPosts\", numberToShow = themeSettings.NumberOfRecentPostsToShow })\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.CompiledViews.Bootstrap5/Views/Page/SiteMapIndex.cshtml",
    "content": "﻿@inject IStringLocalizer<SimpleContent> sr\n@{\n    ViewData[\"Title\"] = sr[\"Site Map\"];\n}\n<h1>@sr[\"Site Map\"]</h1>\n@await Component.InvokeAsync(\"Navigation\", new { viewName = \"SiteMap\", filterName = \"sitemap\", startingNodeKey = \"RootNode\" })\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.CompiledViews.Bootstrap5/Views/Page/StylePartial.cshtml",
    "content": "﻿@model cloudscribe.SimpleContent.Web.ViewModels.PageViewModel\n<link href=\"~/cr/js/ckeditor4114/plugins/codesnippet/lib/highlight/styles/default.css\" rel=\"stylesheet\" />\n<link rel=\"stylesheet\" href=\"~/csscsr/css/editing-side-menu.css\" />\n<partial name=\"CommentStylePartial\" />\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.CompiledViews.Bootstrap5/Views/Page/ToolsPartial.cshtml",
    "content": "﻿@model cloudscribe.SimpleContent.Web.ViewModels.PageViewModel\n@inject IStringLocalizer<SimpleContent> sr\n@inject ISimpleContentThemeHelper themeHelper\n@inject IOptions<PageEditOptions> editOptionsAccessor\n@{\n    var themeSettings = themeHelper.GetThemeSettings();\n    var editOptions = editOptionsAccessor.Value;\n}\n\n@if (Model.CanEdit)\n{\n    <div class=\"btn-group btn-group-small-admin btn-group-vertical end-0 me-3 fixed-top\">\n        <a id=\"pageManagerLink\" href=\"@Model.PageTreePath\" title=\"@sr[\"Manage Page Hierarchy\"]\" class=\"btn btn-sm content-tree btn-outline-primary btn-light\">\n            <span class=\"@themeSettings.Icons.PageTree\" aria-hidden=\"true\"></span>\n        </a>\n        <a id=\"newPageLink\" href=\"@Model.NewItemPath\" title=\"@sr[\"New Page\"]\" class=\"btn btn-sm content-new btn-outline-primary btn-light\">\n            <span class=\"@themeSettings.Icons.NewItem\" aria-hidden=\"true\"></span>\n        </a>\n        @if (Model.CurrentPage != null && !string.IsNullOrWhiteSpace(Model.CurrentPage.Id))\n        {\n            <a id=\"editPageLink\" href=\"@Model.EditPath\" title=\"@sr[\"Edit\"]\" class=\"btn btn-sm content-edit btn-outline-primary btn-light\">\n                <span class=\"@themeSettings.Icons.Edit\" aria-hidden=\"true\"></span>\n            </a>\n        }\n        @if (!editOptions.HideUnpublishButton && Model.CurrentPage != null && Model.CanEdit && !Model.ShowingDeleted && !Model.ShowingDraft && !Model.HistoryId.HasValue && Model.CurrentPage.IsPublished)\n        {\n            <a id=\"unpublishPageLink\" title=\"@sr[\"Unpublish\"]\" class=\"btn btn-sm content-unpublish btn-outline-primary btn-light\" data-bs-toggle=\"modal\" data-bs-target=\"#confirmUnpublishModal\">\n                <span class=\"@themeSettings.Icons.Unpublish\" aria-hidden=\"true\"></span>\n            </a>\n        }\n    </div>\n}"
  },
  {
    "path": "src/cloudscribe.SimpleContent.CompiledViews.Bootstrap5/Views/Page/Tree.cshtml",
    "content": "﻿@model cloudscribe.SimpleContent.Web.ViewModels.PageTreeViewModel\n@inject IStringLocalizer<SimpleContent> sr\n@inject ISimpleContentThemeHelper themeHelper\n@{\n    var themeSettings = themeHelper.GetThemeSettings();\n}\n@section Styles {\n    <partial name=\"TreeStylePartial\" />\n}\n<partial name=\"TreeMainPartial\" model=\"Model\" />\n@section Scripts {\n    <partial name=\"TreeScriptsPartial\" />\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.CompiledViews.Bootstrap5/Views/Page/TreeMainPartial.cshtml",
    "content": "﻿@model cloudscribe.SimpleContent.Web.ViewModels.PageTreeViewModel\n@inject IStringLocalizer<SimpleContent> sr\n@inject ISimpleContentThemeHelper themeHelper\n@{\n    var themeSettings = themeHelper.GetThemeSettings();\n}\n<header class=\"\">\n    <h1 id=\"article-title\" itemprop=\"headline name\">\n        @ViewData[\"Title\"]\n    </h1>\n</header>\n<p>@sr[\"You can drag and drop page nodes in the treeview below to move them around in the site hierarchy or to change their sort position. Click on a page to show a menu of commands related to that page. Note that changes will not be reflected in the main menu until you refresh the page.\"]</p>\n<a href=\"@Model.NewPageUrl\" class=\"btn btn-primary pagecommand\"><span class=\"@themeSettings.Icons.NewItem\" aria-hidden=\"true\"></span> @sr[\"New Root Level Page\"]</a>\n<div id=\"tree1\" class=\"treecontainer\"></div>\n<div id=\"cmdBar\" class=\"panel panel-default commandPanel\" style=\"display:none;\">\n    <div id=\"cmdHeading\" class=\"btn btn-primary btn-block\">Panel heading</div>\n    <ul id=\"ulCommands\" class=\"pagecommands\">\n        <li id=\"liEdit\" class=\"editcontent\">\n            <a id=\"lnkEdit\" class=\"btn btn-primary pagecommand\" href=\"#\"><span class=\"@themeSettings.Icons.Edit\" aria-hidden=\"true\"></span> @sr[\"Edit Page\"] (<small class=\"pubstatus\" id=\"spnPubStatus\"></small>)</a>\n        </li>\n        <li id=\"liView\" class=\"viewpage\">\n            <a id=\"lnkView\" class=\"btn btn-primary pagecommand\" href=\"#\"><span class=\"@themeSettings.Icons.View\" aria-hidden=\"true\"></span> @sr[\"View\"]</a>\n        </li>\n        <li id=\"liSort\" class=\"sortpages\">\n            <a id=\"lnkSort\" class=\"btn btn-primary pagecommand\" href=\"#\"><span class=\"@themeSettings.Icons.SortAlpha\" aria-hidden=\"true\"></span> @sr[\"Sort Child Pages Alpha\"]</a>\n        </li>\n        <li id=\"liNewChild\" class=\"newchild\">\n            <a id=\"lnkNewChild\" class=\"btn btn-primary pagecommand\" href=\"#\"><span class=\"@themeSettings.Icons.NewItem\" aria-hidden=\"true\"></span> @sr[\"New Child Page\"]</a>\n        </li>\n        <li id=\"liDelete\" class=\"deletepage\">\n            <a id=\"lnkDeletePage\" class=\"btn btn-primary pagecommand\" href=\"#\"><span class=\"@themeSettings.Icons.Delete\" aria-hidden=\"true\"></span>  @sr[\"Delete\"]</a>\n        </li>\n    </ul>\n</div>\n<input id=\"hdnSelPage\" type=\"hidden\" value=\"-1\" />\n<div id=\"mdlConfirm\" class=\"modal fade\" tabindex=\"-1\" role=\"dialog\" aria-labelledby=\"confirmHeading\">\n    <div class=\"modal-dialog modal-sm\" role=\"document\">\n        <div class=\"modal-content\">\n            <div class=\"modal-header\">\n                <h4 class=\"modal-title\" id=\"confirmHeading\">@sr[\"Confirm\"]</h4>\n                <button type=\"button\" data-bs-dismiss=\"modal\" class=\"btn-close\" aria-label='@sr[\"Close\"]'></button>\n            </div>\n            <div id=\"confirmModalBody\" class=\"modal-body\">\n\n            </div>\n            <div class=\"modal-footer\">\n                <button type=\"button\" class=\"btn btn-primary\" data-bs-dismiss=\"modal\">@sr[\"Cancel\"]</button>\n                <button id=\"btnConfirm\" type=\"button\" class=\"btn btn-success btn-ok\">@sr[\"Confirm\"]</button>\n            </div>\n        </div>\n    </div>\n</div>\n<div id=\"mdlDelete\" class=\"modal fade\" tabindex=\"-1\" role=\"dialog\" aria-labelledby=\"confirmDeleteHeading\">\n    <div class=\"modal-dialog modal-sm\" role=\"document\">\n        <div class=\"modal-content\">\n            <div class=\"modal-header\">\n                <h4 class=\"modal-title\" id=\"confirmDeleteHeading\">@sr[\"Confirm Delete\"]</h4>\n                <button type=\"button\" data-bs-dismiss=\"modal\" class=\"btn-close\" aria-label='@sr[\"Close\"]'></button>\n            </div>\n            <div id=\"confirmDeleteModalBody\" class=\"modal-body\">\n\n            </div>\n            <div class=\"modal-footer\">\n                <button type=\"button\" class=\"btn btn-primary\" data-bs-dismiss=\"modal\">@sr[\"Cancel\"]</button>\n                <button id=\"btnConfirmDelete\" type=\"button\" class=\"btn btn-danger btn-ok\">@sr[\"Delete\"]</button>\n            </div>\n        </div>\n    </div>\n</div>\n@* This form is just to get an antiforgery token on the page that is used from js when making posts to server*@\n<form asp-controller=\"Page\" asp-action=\"Move\"></form>\n<span id=\"config\"\n      data-service-url=\"@Model.TreeServiceUrl\"\n      data-sort-url=\"@Model.SortUrl\"\n      data-move-url=\"@Model.MoveUrl\"\n      data-edit-url=\"@Model.EditUrl\"\n      data-new-page-url=\"@Model.NewPageUrl\"\n      data-delete-url=\"@Model.DeleteUrl\"\n      data-sort-children-alpha-prompt-format='@sr[\"Are you sure you want to sort the child pages of {0} alphabetically?\"]'\n      data-move-prompt-format='@sr[\"Are you sure you want to move the page {0} {1} {2}?\"]'\n      data-delete-prompt-format='@sr[\"Are you sure you want to delete the page {0}?\"]'\n      data-delete-with-children-prompt-format='@sr[\"The page {0} has child pages, if you delete it, all of the child pages will become root level pages. You should delete child pages before deleting the parent page. Are you sure you want to delete {1}?\"]'></span>\n\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.CompiledViews.Bootstrap5/Views/Page/TreeScriptsPartial.cshtml",
    "content": "﻿<script src=\"~/cr/js/tree.jquery.min.js\"></script>\n<script src=\"~/cr/js/tether.min.js\"></script>\n<script src=\"~/csscsr/js/pagetree.min.js\"></script>\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.CompiledViews.Bootstrap5/Views/Page/TreeStylePartial.cshtml",
    "content": "﻿<environment names=\"Development\">\n    <link rel=\"stylesheet\" href=\"~/cr/css/jqtree.css\" asp-append-version=\"true\" />\n</environment>\n<environment names=\"Staging,Production\">\n    <link rel=\"stylesheet\" href=\"~/cr/css/jqtree.min.css\" asp-append-version=\"true\" />\n</environment>"
  },
  {
    "path": "src/cloudscribe.SimpleContent.CompiledViews.Bootstrap5/Views/Shared/AdSpacePartial.cshtml",
    "content": "﻿\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.CompiledViews.Bootstrap5/Views/Shared/CommentEmail.cshtml",
    "content": "﻿@model cloudscribe.SimpleContent.Models.CommentNotificationModel\n\n@{\n    Layout = \"_LayoutEmailCommentNotification\";\n    ViewData[\"Title\"] = \"Post Comment Notification\";\n}\n<h3  style=\"color:#5F5F5F;line-height:125%;font-family:Helvetica,Arial,sans-serif;font-size:20px;font-weight:normal;margin-top:0;margin-bottom:3px;text-align:left;\">\n   @Model.Comment.Author   on <a href=\"@Model.PostUrl\"> @Model.Post.Title :</a>\n</h3>\n<div style=\"font: 11pt/1.5 calibri, arial;\">\n <br />\n    @Model.Comment.Content  <br /><br />\n\n    <br /><br /><hr />\n    Website:  @Model.Comment.Website <br />\n    E-mail:  @Model.Comment.Email <br />\n    IP-address: @Model.Comment.Ip\n</div>\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.CompiledViews.Bootstrap5/Views/Shared/CommentFormPartial.cshtml",
    "content": "﻿@model cloudscribe.SimpleContent.Web.ViewModels.BlogViewModel\n@using cloudscribe.SimpleContent.Models\n@using cloudscribe.SimpleContent.Web\n@inject IStringLocalizer<SimpleContent> sr\n\n@{\n    var path = Url.Action(\"AjaxPostComment\", \"Blog\");\n    var isAuthenticated = Context.User.Identity.IsAuthenticated;\n    var showRecaptcha = (!string.IsNullOrWhiteSpace(Model.ProjectSettings.RecaptchaPublicKey)) && !isAuthenticated;\n}\n<form id=\"commentform\" asp-antiforgery=\"true\" class=\"form-horizontal\" data-blog-path=\"@path\">\n    <fieldset>\n        <legend>@sr[\"Post comment\"]</legend>\n\n        <div class=\"mb-3 row\">\n            <label for=\"commentname\" class=\"control-label col-sm-2\">@sr[\"Name\"]</label>\n            <div class=\"col-sm-7\">\n                <input id=\"commentname\" class=\"form-control\" type=\"text\" placeholder=\"Name\" required />\n            </div>\n        </div>\n        <div class=\"mb-3 row\">\n            <label for=\"commentemail\" class=\"control-label col-sm-2\">@sr[\"Email\"]</label>\n            <div class=\"col-sm-7\">\n                <input id=\"commentemail\" class=\"form-control\" type=\"email\" placeholder=\"Email\" required />\n            </div>\n        </div>\n        <div class=\"mb-3 row\">\n            <label for=\"commenturl\" class=\"control-label col-sm-2\">@sr[\"Website\"]</label>\n            <div class=\"col-sm-7\">\n                <input id=\"commenturl\" class=\"form-control\" type=\"url\" placeholder=\"Website URL\" />\n            </div>\n        </div>\n        <div class=\"mb-3 row\">\n            <label for=\"commentcontent\" class=\"control-label col-sm-2\">@sr[\"Comment (no HTML allowed)\"]</label>\n            <div class=\"col-sm-10\">\n                <textarea id=\"commentcontent\" class=\"form-control\" rows=\"4\" placeholder=\"Comment\" required></textarea>\n            </div>\n        </div>\n        @if (showRecaptcha)\n        {\n            <div class=\"mb-3\">\n                <div class=\"col-md-offset-2 col-md-10\">\n                    <div class=\"g-recaptcha\" data-sitekey=\"@Model.ProjectSettings.RecaptchaPublicKey\"></div>\n                    @Html.ValidationMessage(\"recaptchaerror\", new { @class = \"text-danger\" })\n                </div>\n            </div>\n\n        }\n        <div class=\"mb-3 row\">\n            <div class=\"col-sm-offset-2 col-sm-10\">\n                <input name=\"postId2\" type=\"hidden\" value=\"@Model.CurrentPost.Id\" />\n                <button class=\"btn btn-primary\">@sr[\"Post comment\"]</button>\n                <span id=\"status\" class=\"alert\" role=\"status\" aria-live=\"polite\"></span>\n            </div>\n        </div>\n    </fieldset>\n</form>\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.CompiledViews.Bootstrap5/Views/Shared/CommentPartial.cshtml",
    "content": "﻿@using cloudscribe.SimpleContent.Models\n@using cloudscribe.SimpleContent.Web\n@addTagHelper \"*, cloudscribe.Web.Common\"\n@model cloudscribe.SimpleContent.Web.ViewModels.BlogViewModel\n@inject IStringLocalizer<SimpleContent> sr\n\n<article data-id=\"@Model.TmpComment.Id\" itemscope itemtype=\"http://schema.org/UserComments\" itemprop=\"comment\" class=\"@(Model.TmpComment.IsAdmin ? \"self\" : null)\">\n    <img gravatar-email=\"@Model.TmpComment.Email\" gravatar-size=\"50\" alt=\"Comment by @Model.TmpComment.Author\" />\n    <div class=\"comment-item\">\n        <h3><time datetime='@Model.TmpComment.PubDate.ToString(\"s\")' itemprop=\"commentTime\">@Model.FormatCommentDate(Model.TmpComment.PubDate)</time></h3>\n        <p itemprop=\"commentText\">@Html.Raw(Model.FilterComment(Model.TmpComment))</p>\n        @if (string.IsNullOrEmpty(Model.TmpComment.Website))\n        {\n        <strong itemprop=\"creator\">@Model.TmpComment.Author</strong>\n        }\n        else\n        {\n        <strong itemprop=\"creator\"><a href=\"@Model.TmpComment.Website\" itemprop=\"url\" rel=\"nofollow\">@Model.TmpComment.Author</a></strong>\n        }\n        @if (Model.CanEdit)\n        {\n            <button class=\"deletecomment btn btn-link\">@sr[\"Delete\"]</button>\n            @if (Model.ProjectSettings.ModerateComments && !Model.TmpComment.IsApproved)\n            {\n                <button class=\"approvecomment btn btn-link\">Approve</button>\n            }\n        }\n    </div>\n    @if (Model.ProjectSettings.ModerateComments && !Model.TmpComment.IsApproved && !Model.CanEdit)\n    {\n        <div itemprop=\"approvalWarning\">@sr[\"! The comment will not be visible until a moderator approves it !\"]</div>\n    } \n</article>\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.CompiledViews.Bootstrap5/Views/Shared/CommentScriptsPartial.cshtml",
    "content": "﻿<environment names=\"Development\">\n    <script src=\"~/csscsr/js/blog-comments.js\" asp-append-version=\"true\"></script>\n</environment>\n<environment names=\"Staging,Production\">\n    <script src=\"~/csscsr/js/blog-comments.min.js\" async defer></script>\n</environment>\n@if (!User.Identity.IsAuthenticated)\n{\n    <script src='https://www.google.com/recaptcha/api.js'></script>\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.CompiledViews.Bootstrap5/Views/Shared/CommentStylePartial.cshtml",
    "content": "﻿@*\n    override this to add a different comment system\n*@\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.CompiledViews.Bootstrap5/Views/Shared/Components/FeaturedPosts/FeaturedPosts.cshtml",
    "content": "﻿@model cloudscribe.SimpleContent.Web.ViewModels.RecentPostsViewModel\n@inject cloudscribe.SimpleContent.Models.IBlogRoutes blogRoutes\n@using cloudscribe.SimpleContent.Web\n@using cloudscribe.SimpleContent.Models\n@using Microsoft.Extensions.Localization\n@inject IStringLocalizer<SimpleContent> sr\n@{\n    var defaultImageUrl = \"\"; //you can specify a default image\n}\n@functions{\n\n    public string GetUrl(IPost post)\n    {\n        if (Model.ProjectSettings.IncludePubDateInPostUrls)\n        {\n            return Url.RouteUrl(blogRoutes.PostWithDateRouteName, new { year = post.PubDate.Value.Year, month = post.PubDate.Value.Month.ToString(\"00\"), day = post.PubDate.Value.Day.ToString(\"00\"), slug = post.Slug });\n\n        }\n\n        return Url.RouteUrl(blogRoutes.PostWithoutDateRouteName, new { slug = post.Slug });\n\n    }\n\n}\n@if (Model.Posts.Count > 0)\n{\n    <nav aria-labelledby=\"hFeaturedPosts\">\n        <h3 id=\"hFeaturedPosts\" class=\"featured-posts\">@sr[\"Featured Posts\"]</h3>\n        @foreach (var post in Model.Posts)\n        {\n            if (!post.PubDate.HasValue) { continue; }\n            var imgUrl = Model.ExtractFirstImageUrl(post, Url, defaultImageUrl);\n            <div class=\"d-flex border p-3\">\n                @if (!string.IsNullOrWhiteSpace(imgUrl))\n                {\n                    <a class=\"pull-left\" href=\"@GetUrl(post)\"><img class=\"flex-shrink-0 me-3\" src=\"@imgUrl\" width=\"100\" alt=\"@post.Title\"></a>\n                }\n                <div class=\"ps-1\">\n                    <h4>\n                        <a href=\"@GetUrl(post)\">@post.Title</a>\n                    </h4>\n                    <small>@Model.FormatDate(post.PubDate.Value)</small>\n                </div>\n            </div>\n        }\n    </nav>  \n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.CompiledViews.Bootstrap5/Views/Shared/Components/RecentPosts/RecentPosts.cshtml",
    "content": "﻿@model cloudscribe.SimpleContent.Web.ViewModels.RecentPostsViewModel\n@inject cloudscribe.SimpleContent.Models.IBlogRoutes blogRoutes\n@using cloudscribe.SimpleContent.Web\n@using cloudscribe.SimpleContent.Models\n@using Microsoft.Extensions.Localization\n@inject IStringLocalizer<SimpleContent> sr\n@{\n    var defaultImageUrl = \"\"; //you can specify a default image\n}\n@functions{\n\n    public string GetUrl(IPost post)\n    {\n        if (Model.ProjectSettings.IncludePubDateInPostUrls)\n        {\n            return Url.RouteUrl(blogRoutes.PostWithDateRouteName, new { year = post.PubDate.Value.Year, month = post.PubDate.Value.Month.ToString(\"00\"), day = post.PubDate.Value.Day.ToString(\"00\"), slug = post.Slug });\n\n        }\n\n        return Url.RouteUrl(blogRoutes.PostWithoutDateRouteName, new { slug = post.Slug });\n\n    }\n\n}\n@if (Model.Posts.Count > 0)\n{\n    <nav aria-labelledby=\"hRecentPosts\">\n        <h3 id=\"hRecentPosts\" class=\"recent-posts\">@sr[\"Recent Posts\"]</h3>\n        @foreach (var post in Model.Posts)\n        {\n            if (!post.PubDate.HasValue) { continue; }\n            var imgUrl = Model.ExtractFirstImageUrl(post, Url, defaultImageUrl);\n            <div class=\"d-flex border p-3\">\n                @if (!string.IsNullOrWhiteSpace(imgUrl))\n                {\n                    <a class=\"pull-left\" href=\"@GetUrl(post)\"><img class=\"flex-shrink-0 me-3\" src=\"@imgUrl\" width=\"100\" alt=\"@post.Title\"></a>\n                }\n                <div class=\"ps-1\">\n                    <h4>\n                        <a href=\"@GetUrl(post)\">@post.Title</a>\n                    </h4>\n                    <small>@Model.FormatDate(post.PubDate.Value)</small>\n                </div>\n            </div>\n        }\n    </nav>\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.CompiledViews.Bootstrap5/Views/Shared/Components/RelatedPosts/RelatedPosts.cshtml",
    "content": "﻿@model cloudscribe.SimpleContent.Web.ViewModels.RecentPostsViewModel\n@inject cloudscribe.SimpleContent.Models.IBlogRoutes blogRoutes\n@using cloudscribe.SimpleContent.Web\n@using cloudscribe.SimpleContent.Models\n@using Microsoft.Extensions.Localization\n@inject IStringLocalizer<SimpleContent> sr\n@inject ISimpleContentThemeHelper themeHelper\n@{\n    var defaultImageUrl = \"\"; //you can specify a default image\n    var themeSettings = themeHelper.GetThemeSettings();\n}\n@functions{\n\n    public string GetUrl(IPost post)\n    {\n        if (Model.ProjectSettings.IncludePubDateInPostUrls)\n        {\n            return Url.RouteUrl(blogRoutes.PostWithDateRouteName, new { year = post.PubDate.Value.Year, month = post.PubDate.Value.Month.ToString(\"00\"), day = post.PubDate.Value.Day.ToString(\"00\"), slug = post.Slug });\n\n        }\n\n        return Url.RouteUrl(blogRoutes.PostWithoutDateRouteName, new { slug = post.Slug });\n\n    }\n\n}\n@if (Model.Posts.Count > 0)\n{\n    <nav aria-labelledby=\"hRelatedPosts\">\n        <h3 id=\"hRelatedPosts\" class=\"featured-posts\"><i class=\"@themeSettings.Icons.RelatedPosts\" aria-hidden=\"true\"></i>&nbsp;@sr[\"Related Posts\"]</h3>\n        @foreach (var post in Model.Posts)\n        {\n            if (!post.PubDate.HasValue) { continue; }\n            var imgUrl = Model.ExtractFirstImageUrl(post, Url, defaultImageUrl);\n            <div class=\"d-flex border p-3\">\n                @if (!string.IsNullOrWhiteSpace(imgUrl))\n                {\n                    <a class=\"pull-left\" href=\"@GetUrl(post)\"><img class=\"flex-shrink-0 me-3\" src=\"@imgUrl\" width=\"100\" alt=\"@post.Title\"></a>\n                }\n                <div class=\"ps-1\">\n                    <h4>\n                        <a href=\"@GetUrl(post)\">@post.Title</a>\n                    </h4>\n                    <small>@Model.FormatDate(post.PubDate.Value)</small>\n                </div>\n            </div>\n        }\n    </nav>\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.CompiledViews.Bootstrap5/Views/Shared/HistoryGridPartial.cshtml",
    "content": "﻿@model cloudscribe.SimpleContent.Web.ViewModels.ContentHistoryViewModel\n@inject IStringLocalizer<SimpleContent> sr\n@inject IBlogRoutes  blogRoutes\n@inject IPageRoutes pageRoutes\n@inject cloudscribe.DateTimeUtils.ITimeZoneHelper tzHelper\n@inject cloudscribe.DateTimeUtils.ITimeZoneIdResolver tzResolver\n@{ \n    var timeZoneId = await tzResolver.GetUserTimeZoneId();\n}\n@functions{\n    public string GetPreviewUrl(ContentHistory history)\n    {\n        switch (history.ContentSource)\n        {\n            case ContentSource.Blog:\n                return Url.RouteUrl(blogRoutes.PostWithoutDateRouteName, new { slug = history.Slug, historyId = history.Id });\n\n            case ContentSource.Page:\n            default:\n                return Url.RouteUrl(pageRoutes.PageRouteName, new { slug = history.Slug, historyId = history.Id });\n        }\n\n\n    }\n    public string GetRestoreUrl(ContentHistory history)\n    {\n        switch (history.ContentSource)\n        {\n            case ContentSource.Blog:\n                return Url.RouteUrl(blogRoutes.PostEditRouteName, new { slug = history.Slug, historyId = history.Id });\n\n            case ContentSource.Page:\n            default:\n                return Url.RouteUrl(pageRoutes.PageEditRouteName, new { slug = history.Slug, historyId = history.Id });\n        }\n\n\n    }\n}\n<table class=\"table table-striped table-hover\">\n    <thead>\n        <tr>\n            <th></th>\n            <th>\n                @sr[\"Archived Date\"]\n            </th>\n            <th>\n                @sr[\"Published Date\"]\n            </th>\n            <th>\n                @sr[\"Archived By\"]\n            </th>\n            <th>\n                @sr[\"Source\"]\n            </th>\n            <th>\n                @sr[\"Title\"]\n            </th>\n            <th>\n                @sr[\"Is Draft\"]\n            </th>\n            <th>\n                @sr[\"Was Deleted\"]\n            </th>\n            <th>\n                @sr[\"Created By\"]\n            </th>\n            <th>\n                @sr[\"Last Modified By\"]\n            </th>\n        </tr>\n    </thead>\n    <tbody>\n        @foreach (var item in Model.History.Data)\n        {\n        <tr>\n            <td>\n                @if (Model.CanEditPages && item.ContentSource == ContentSource.Page || Model.CanEditPosts && item.ContentSource == ContentSource.Blog)\n                {\n                    <a class=\"btn btn-primary btn-sm\" href=\"@GetPreviewUrl(item)\" title=\"@sr[\"view this version\"]\">@sr[\"View\"]</a>\n                    <button type=\"button\" class=\"btn btn-danger btn-sm\" data-bs-toggle=\"modal\" data-bs-target=\"@(\"#confirmDeleteModal\" + item.Id)\">\n                        @sr[\"Delete\"]\n                    </button>\n                    <form asp-controller=\"ContentHistory\" asp-action=\"DeleteHistory\">\n                        <input type=\"hidden\" name=\"id\" value=\"@item.Id\" />\n                        <input type=\"hidden\" name=\"returnUrl\" value=\"@Context.Request.Path\" />\n                        <div class=\"modal fade\" id=\"@(\"confirmDeleteModal\" + item.Id)\" tabindex=\"-1\" role=\"dialog\" aria-labelledby=\"@(\"confirmDeleteHeading\" + item.Id)\">\n                            <div class=\"modal-dialog modal-sm\" role=\"document\">\n                                <div class=\"modal-content\">\n                                    <div class=\"modal-header\">\n                                        <h4 class=\"modal-title\" id=\"@(\"confirmDeleteHeading\" + item.Id)\">@sr[\"Confirm Delete\"]</h4>\n                                        <button type=\"button\" data-bs-dismiss=\"modal\" class=\"btn-close\" aria-label='@sr[\"Close\"]'></button>\n                                    </div>\n                                    <div class=\"modal-body\">\n                                        @sr[\"Are you sure you want to delete this history item?\"]\n                                    </div>\n                                    <div class=\"modal-footer\">\n                                        <button type=\"button\" class=\"btn btn-primary\" data-bs-dismiss=\"modal\">@sr[\"Cancel\"]</button>\n                                        <input type=\"submit\" value='@sr[\"Delete\"]' class=\"btn btn-danger btn-ok\" />\n                                    </div>\n                                </div>\n                            </div>\n                        </div>\n                    </form>\n\n                }\n            </td>\n            <td>\n                @tzHelper.ConvertToLocalTime(item.ArchivedUtc, timeZoneId).ToString()\n            </td>\n            <td>\n                @if (item.PubDate.HasValue)\n                {\n                    @tzHelper.ConvertToLocalTime(item.PubDate.Value, timeZoneId).ToString()\n                }\n            </td>\n            <td>\n                @item.ArchivedBy\n            </td>\n            <td>\n                @item.ContentSource\n            </td>\n            <td>\n                @item.Title\n            </td>\n            <td>\n                @item.IsDraftHx\n            </td>\n            <td>\n                @item.WasDeleted\n            </td>\n            <td>\n                @item.CreatedByUser\n            </td>\n            <td>\n                @item.LastModifiedByUser\n            </td>\n        </tr>\n\n        }\n    </tbody>\n\n</table>\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.CompiledViews.Bootstrap5/Views/Shared/NewContentPartial.cshtml",
    "content": "﻿@model cloudscribe.SimpleContent.Web.ViewModels.NewContentViewModel\n@inject IStringLocalizer<SimpleContent> sr\n@if (Model.CountOfTemplates > Model.PageSize)\n{\n    <form class=\"form-inline mb-3\" asp-route=\"@Model.SearchRouteName\" method=\"get\" data-submit-once=\"true\" asp-antiforgery=\"false\">\n        <input type=\"hidden\" asp-for=\"@Model.ParentSlug\" />\n        <input name=\"query\" value=\"@Model.Query\" class=\"form-control me-1 mb-1\" placeholder=\"@sr[\"Search Term\"]\" />\n        <button id=\"btnSave\" type=\"submit\" class=\"btn btn-primary me-1 mb-1\" data-disabled-text='@sr[\"Working...\"]' data-enabled-text='@sr[\"Search Templates\"]'>@sr[\"Search Templates\"]</button>\n        <a asp-route=\"@Model.SearchRouteName\" asp-route-parentslug=\"@Model.ParentSlug\">@sr[\"Clear/Reset Search\"]</a>\n    </form>\n}\n\n<form asp-action=\"@Model.PostActionName\" data-submit-once=\"true\">\n    <input type=\"hidden\" asp-for=\"@Model.ParentSlug\" />\n    <input type=\"hidden\" asp-for=\"@Model.PageOrder\" />\n    <div class=\"row mt-2 mb-3\">\n        <div class=\"col-md-12\">\n            <label asp-for=\"Title\" class=\"me-1\">@sr[\"Title\"]</label>\n            <input asp-for=\"Title\" class=\"form-control mb-1\" data-bs-toggle=\"tooltip\" />\n            <span asp-validation-for=\"Title\" class=\"invalid-feedback\"></span>\n            <button id=\"btnSave\" name=\"submit\" type=\"submit\" class=\"btn btn-primary ms-1\" data-disabled-text='@sr[\"Working...\"]' data-enabled-text='@sr[\"Create From Template\"]'>@sr[\"Create From Template\"]</button>\n        </div>\n    </div>\n    @foreach (var template in Model.Templates.Data)\n    {\n    <div class=\"form-check\">\n        <input class=\"form-check-input\" type=\"radio\" asp-for=\"SelectedTemplate\" value=\"@template.Key\" id=\"@(template.Key)\" />\n        <span asp-validation-for=\"SelectedTemplate\" class=\"invalid-feedback\"></span>\n        <label class=\"form-check-label\" for=\"@(template.Key)\">\n            @template.Title\n        </label>\n        <p>@template.Description</p>\n    </div>\n    }\n    \n\n</form>\n<div class=\"mt-2\">\n    <cs-pager asp-route=\"@Model.SearchRouteName\"\n              asp-route-query=\"@Model.Query\"\n              asp-route-pagesize=\"@Model.Templates.PageSize\"\n              cs-paging-pagesize=\"@Model.Templates.PageSize\"\n              cs-paging-pagenumber=\"@Model.Templates.PageNumber\"\n              cs-paging-totalitems=\"@Model.Templates.TotalItems\"\n              cs-pager-ul-class=\"pagination d-flex flex-wrap\"\n              cs-pager-li-current-class=\"page-item active\"\n              cs-pager-li-other-class=\"page-item\"\n              cs-pager-li-non-active-class=\"page-item disabled\"\n              cs-pager-link-current-class=\"page-link\"\n              cs-pager-link-other-class=\"page-link\"\n              cs-first-page-title='@sr[\"First Page\"]'\n              cs-last-page-title='@sr[\"Last Page\"]'\n              cs-previous-page-title='@sr[\"Previous page\"]'\n              cs-next-page-title='@sr[\"Next page\"]'></cs-pager>\n</div>\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.CompiledViews.Bootstrap5/Views/Shared/_LayoutEmailCommentNotification.cshtml",
    "content": "﻿@*\n    <!--\n    ==================== Respmail ====================\n    Respmail is a response HTML email designed to work\n    on all major devices and responsive for smartphones\n    that support media queries.\n    ** NOTE **\n    This template comes with a lot of standard features\n    that has been thoroughly tested on major platforms\n    and devices, it is extremely flexible to use and\n    can be easily customized by removing any row that\n    you do not need.\n    it is gauranteed to work 95% without any major flaws,\n    any changes or adjustments should thoroughly be\n    tested and reviewed to match with the general\n    structure.\n    ** Profile **\n    Licensed under MIT (https://github.com/charlesmudy/responsive-html-email-template/blob/master/LICENSE)\n    Designed by Shina Charles Memud\n    Respmail v1.2 (http://charlesmudy.com/respmail/)\n    ** Quick modification **\n    We are using width of 500 for the whole content,\n    you can change it any size you want (e.g. 600).\n    The fastest and safest way is to use find & replace\n    Sizes: [\n            wrapper   : '500',\n            columns   : '210',\n            x-columns : [\n                            left : '90',\n                            right: '350'\n                    ]\n            }\n        -->\n*@\n<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n    <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge,chrome=1\">\n    <meta name=\"format-detection\" content=\"telephone=no\" /> <!-- disable auto telephone linking in iOS -->\n    <title>Respmail is a response HTML email designed to work on all major email platforms and smartphones</title>\n    <style type=\"text/css\">\n\t\t\t\n\t\t\thtml { background-color:#E1E1E1; margin:0; padding:0; }\n\t\t\tbody, #bodyTable, #bodyCell, #bodyCell{height:100% !important; margin:0; padding:0; width:100% !important;font-family:Helvetica, Arial, \"Lucida Grande\", sans-serif;}\n\t\t\ttable{border-collapse:collapse;}\n\t\t\ttable[id=bodyTable] {width:100%!important;margin:auto;max-width:500px!important;color:#7A7A7A;font-weight:normal;}\n\t\t\timg, a img{border:0; outline:none; text-decoration:none;height:auto; line-height:100%;}\n\t\t\ta {text-decoration:none !important;border-bottom: 1px solid;}\n\t\t\th1, h2, h3, h4, h5, h6{color:#5F5F5F; font-weight:normal; font-family:Helvetica; font-size:20px; line-height:125%; text-align:Left; letter-spacing:normal;margin-top:0;margin-right:0;margin-bottom:10px;margin-left:0;padding-top:0;padding-bottom:0;padding-left:0;padding-right:0;}\n\t\t\t@* CLIENT-SPECIFIC STYLES *@\n\t\t\t.ReadMsgBody{width:100%;} .ExternalClass{width:100%;} /* Force Hotmail/Outlook.com to display emails at full width. */\n\t\t\t.ExternalClass, .ExternalClass p, .ExternalClass span, .ExternalClass font, .ExternalClass td, .ExternalClass div{line-height:100%;} /* Force Hotmail/Outlook.com to display line heights normally. */\n\t\t\ttable, td{mso-table-lspace:0pt; mso-table-rspace:0pt;} /* Remove spacing between tables in Outlook 2007 and up. */\n\t\t\t#outlook a{padding:0;} /* Force Outlook 2007 and up to provide a \"view in browser\" message. */\n\t\t\timg{-ms-interpolation-mode: bicubic;display:block;outline:none; text-decoration:none;} /* Force IE to smoothly render resized images. */\n\t\t\tbody, table, td, p, a, li, blockquote{-ms-text-size-adjust:100%; -webkit-text-size-adjust:100%; font-weight:normal!important;} /* Prevent Windows- and Webkit-based mobile platforms from changing declared text sizes. */\n\t\t\t.ExternalClass td[class=\"ecxflexibleContainerBox\"] h3 {padding-top: 10px !important;} /* Force hotmail to push 2-grid sub headers down */\n\t\t\t\n\t\t\th1{display:block;font-size:26px;font-style:normal;font-weight:normal;line-height:100%;}\n\t\t\th2{display:block;font-size:20px;font-style:normal;font-weight:normal;line-height:120%;}\n\t\t\th3{display:block;font-size:17px;font-style:normal;font-weight:normal;line-height:110%;}\n\t\t\th4{display:block;font-size:18px;font-style:italic;font-weight:normal;line-height:100%;}\n\t\t\t.flexibleImage{height:auto;}\n\t\t\t.linkRemoveBorder{border-bottom:0 !important;}\n\t\t\ttable[class=flexibleContainerCellDivider] {padding-bottom:0 !important;padding-top:0 !important;}\n\t\t\tbody, #bodyTable{background-color:#E1E1E1;}\n\t\t\t#emailHeader{background-color:#E1E1E1;}\n\t\t\t#emailBody{background-color:#FFFFFF;}\n\t\t\t#emailFooter{background-color:#E1E1E1;}\n\t\t\t.nestedContainer{background-color:#F8F8F8; border:1px solid #CCCCCC;}\n\t\t\t.emailButton{background-color:#205478; border-collapse:separate;}\n\t\t\t.buttonContent{color:#FFFFFF; font-family:Helvetica; font-size:18px; font-weight:bold; line-height:100%; padding:15px; text-align:center;}\n\t\t\t.buttonContent a{color:#FFFFFF; display:block; text-decoration:none!important; border:0!important;}\n\t\t\t.emailCalendar{background-color:#FFFFFF; border:1px solid #CCCCCC;}\n\t\t\t.emailCalendarMonth{background-color:#205478; color:#FFFFFF; font-family:Helvetica, Arial, sans-serif; font-size:16px; font-weight:bold; padding-top:10px; padding-bottom:10px; text-align:center;}\n\t\t\t.emailCalendarDay{color:#205478; font-family:Helvetica, Arial, sans-serif; font-size:60px; font-weight:bold; line-height:100%; padding-top:20px; padding-bottom:20px; text-align:center;}\n\t\t\t.imageContentText {margin-top: 10px;line-height:0;}\n\t\t\t.imageContentText a {line-height:0;}\n\t\t\t#invisibleIntroduction {display:none !important;} /* Removing the introduction text from the view */\n\t\t\t@*FRAMEWORK HACKS & OVERRIDES *@\n\t\t\tspan[class=ios-color-hack] a {color:#275100!important;text-decoration:none!important;} /* Remove all link colors in IOS (below are duplicates based on the color preference) */\n\t\t\tspan[class=ios-color-hack2] a {color:#205478!important;text-decoration:none!important;}\n\t\t\tspan[class=ios-color-hack3] a {color:#8B8B8B!important;text-decoration:none!important;}\n\t\t\t@* A nice and clean way to target phone numbers you want clickable and avoid a mobile phone from linking other numbers that look like, but are not phone numbers.  Use these two blocks of code to \"unstyle\" any numbers that may be linked.  The second block gives you a class to apply with a span tag to the numbers you would like linked and styled.\n\t\t\tInspired by Campaign Monitor's article on using phone numbers in email: http://www.campaignmonitor.com/blog/post/3571/using-phone-numbers-in-html-email/.\n\t\t\t*@\n\t\t\t.a[href^=\"tel\"], a[href^=\"sms\"] {text-decoration:none!important;color:#606060!important;pointer-events:none!important;cursor:default!important;}\n\t\t\t.mobile_link a[href^=\"tel\"], .mobile_link a[href^=\"sms\"] {text-decoration:none!important;color:#606060!important;pointer-events:auto!important;cursor:default!important;}\n\t\t\t@* MOBILE STYLES *@\n\t\t\t@@media only screen and (max-width: 480px){\n\t\t\t\t@*////// CLIENT-SPECIFIC STYLES //////*@\n\t\t\t\tbody{width:100% !important; min-width:100% !important;} /* Force iOS Mail to render the email at full width. */\n\t\t\t\t@* FRAMEWORK STYLES *@\n\t\t\t\t@*\n\t\t\t\tCSS selectors are written in attribute\n\t\t\t\tselector format to prevent Yahoo Mail\n\t\t\t\tfrom rendering media query styles on\n\t\t\t\tdesktop.\n\t\t\t\t*@\n\t\t\t\t@*td[class=\"textContent\"], td[class=\"flexibleContainerCell\"] { width: 100%; padding-left: 10px !important; padding-right: 10px !important; }*@\n\t\t\t\ttable[id=\"emailHeader\"],\n\t\t\t\ttable[id=\"emailBody\"],\n\t\t\t\ttable[id=\"emailFooter\"],\n\t\t\t\ttable[class=\"flexibleContainer\"],\n\t\t\t\ttd[class=\"flexibleContainerCell\"] {width:100% !important;}\n\t\t\t\ttd[class=\"flexibleContainerBox\"], td[class=\"flexibleContainerBox\"] table {display: block;width: 100%;text-align: left;}\n\t\t\t\t@*\n\t\t\t\tThe following style rule makes any\n\t\t\t\timage classed with 'flexibleImage'\n\t\t\t\tfluid when the query activates.\n\t\t\t\tMake sure you add an inline max-width\n\t\t\t\tto those images to prevent them\n\t\t\t\tfrom blowing out.\n\t\t\t\t*@\n\t\t\t\ttd[class=\"imageContent\"] img {height:auto !important; width:100% !important; max-width:100% !important; }\n\t\t\t\timg[class=\"flexibleImage\"]{height:auto !important; width:100% !important;max-width:100% !important;}\n\t\t\t\timg[class=\"flexibleImageSmall\"]{height:auto !important; width:auto !important;}\n\t\t\t\t@*\n\t\t\t\tCreate top space for every second element in a block\n\t\t\t\t*@\n\t\t\t\ttable[class=\"flexibleContainerBoxNext\"]{padding-top: 10px !important;}\n\t\t\t\t@*\n\t\t\t\tMake buttons in the email span the\n\t\t\t\tfull width of their container, allowing\n\t\t\t\tfor left- or right-handed ease of use.\n\t\t\t\t*@\n\t\t\t\ttable[class=\"emailButton\"]{width:100% !important;}\n\t\t\t\ttd[class=\"buttonContent\"]{padding:0 !important;}\n\t\t\t\ttd[class=\"buttonContent\"] a{padding:15px !important;}\n\t\t\t}\n\t\t\t@*  CONDITIONS FOR ANDROID DEVICES ONLY\n\t\t\t   http://developer.android.com/guide/webapps/targeting.html\n\t\t\t   http://pugetworks.com/2011/04/css-media-queries-for-targeting-different-mobile-devices/ ;\n\t\t\t===================================================== *@\n\n\t\t\t@@media only screen and (-webkit-device-pixel-ratio:.75){\n\t\t\t\t@* Put CSS for low density (ldpi) Android layouts in here *@\n\t\t\t}\n\t\t\t@@media only screen and (-webkit-device-pixel-ratio:1){\n\t\t\t\t@* Put CSS for medium density (mdpi) Android layouts in here *@\n\t\t\t}\n\t\t\t@@media only screen and (-webkit-device-pixel-ratio:1.5){\n\t\t\t\t@* Put CSS for high density (hdpi) Android layouts in here *@\n\t\t\t}\n\t\t\t@* end Android targeting *@\n\t\t\t@* CONDITIONS FOR IOS DEVICES ONLY\n\t\t\t=====================================================*@\n\t\t\t@@media only screen and (min-device-width : 320px) and (max-device-width:568px) {\n\t\t\t}\n\t\t\t@* end IOS targeting *@\n    </style>\n    @*\n    <!--\n        Outlook Conditional CSS\n        These two style blocks target Outlook 2007 & 2010 specifically, forcing\n        columns into a single vertical stack as on mobile clients. This is\n        primarily done to avoid the 'page break bug' and is optional.\n        More information here:\n        http://templates.mailchimp.com/development/css/outlook-conditional-css\n    -->\n    *@\n    <!--[if mso 12]>\n        <style type=\"text/css\">\n            .flexibleContainer{display:block !important; width:100% !important;}\n        </style>\n    <![endif]-->\n    <!--[if mso 14]>\n        <style type=\"text/css\">\n            .flexibleContainer{display:block !important; width:100% !important;}\n        </style>\n    <![endif]-->\n</head>\n<body bgcolor=\"#E1E1E1\" leftmargin=\"0\" marginwidth=\"0\" topmargin=\"0\" marginheight=\"0\" offset=\"0\">\n    @*\n    <!-- CENTER THE EMAIL // -->\n    <!--\n    1.  The center tag should normally put all the\n        content in the middle of the email page.\n        I added \"table-layout: fixed;\" style to force\n        yahoomail which by default put the content left.\n    2.  For hotmail and yahoomail, the contents of\n        the email starts from this center, so we try to\n        apply necessary styling e.g. background-color.\n    -->\n    *@\n    <center style=\"background-color:#E1E1E1;\">\n        <table border=\"0\" cellpadding=\"0\" cellspacing=\"0\" height=\"100%\" width=\"100%\" id=\"bodyTable\" style=\"table-layout: fixed;max-width:100% !important;width: 100% !important;min-width: 100% !important;\">\n            <tr>\n                <td align=\"center\" valign=\"top\" id=\"bodyCell\">\n\n                    <!-- EMAIL BODY // -->\n                    <!--\n                        The table \"emailBody\" is the email's container.\n                        Its width can be set to 100% for a color band\n                        that spans the width of the page.\n                    -->\n                    <table bgcolor=\"#FFFFFF\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" width=\"500\" id=\"emailBody\">\n\n                        <!-- MODULE ROW // -->\n                        <!--\n                            To move or duplicate any of the design patterns\n                            in this email, simply move or copy the entire\n                            MODULE ROW section for each content block.\n                        -->\n                        <tr>\n                            <td align=\"center\" valign=\"top\">\n                                <!-- CENTERING TABLE // -->\n                                <!--\n                                    The centering table keeps the content\n                                    tables centered in the emailBody table,\n                                    in case its width is set to 100%.\n                                -->\n                                <table border=\"0\" cellpadding=\"0\" cellspacing=\"0\" width=\"100%\" style=\"color:#FFFFFF;\" bgcolor=\"#3498db\">\n                                    <tr>\n                                        <td align=\"center\" valign=\"top\">\n                                            <!-- FLEXIBLE CONTAINER // -->\n                                            <!--\n                                                The flexible container has a set width\n                                                that gets overridden by the media query.\n                                                Most content tables within can then be\n                                                given 100% widths.\n                                            -->\n                                            <table border=\"0\" cellpadding=\"0\" cellspacing=\"0\" width=\"500\" class=\"flexibleContainer\">\n                                                <tr>\n                                                    <td align=\"center\" valign=\"top\" width=\"500\" class=\"flexibleContainerCell\">\n\n                                                        <!-- CONTENT TABLE // -->\n                                                        <!--\n                                                        The content table is the first element\n                                                            that's entirely separate from the structural\n                                                            framework of the email.\n                                                        -->\n                                                        <table border=\"0\" cellpadding=\"30\" cellspacing=\"0\" width=\"100%\">\n                                                            <tr>\n                                                                <td align=\"center\" valign=\"top\" class=\"textContent\">\n                                                                    <h1 style=\"color:#FFFFFF;line-height:100%;font-family:Helvetica,Arial,sans-serif;font-size:35px;font-weight:normal;margin-bottom:5px;text-align:center;\">\n                                                                        @ViewData[\"Title\"]\n                                                                    </h1>\n                                                                    \n                                                                    <div style=\"text-align:center;font-family:Helvetica,Arial,sans-serif;font-size:15px;margin-bottom:0;color:#FFFFFF;line-height:135%;\">\n\n                                                                    </div>\n                                                                </td>\n                                                            </tr>\n                                                        </table>\n                                                        <!-- // CONTENT TABLE -->\n\n                                                    </td>\n                                                </tr>\n                                            </table>\n                                            <!-- // FLEXIBLE CONTAINER -->\n                                        </td>\n                                    </tr>\n                                </table>\n                                <!-- // CENTERING TABLE -->\n                            </td>\n                        </tr>\n\n                        <!-- MODULE ROW // -->\n                        <tr>\n                            <td align=\"center\" valign=\"top\">\n                                <!-- CENTERING TABLE // -->\n                                <table border=\"0\" cellpadding=\"0\" cellspacing=\"0\" width=\"100%\" bgcolor=\"#F8F8F8\">\n                                    <tr>\n                                        <td align=\"center\" valign=\"top\">\n                                            <!-- FLEXIBLE CONTAINER // -->\n                                            <table border=\"0\" cellpadding=\"0\" cellspacing=\"0\" width=\"500\" class=\"flexibleContainer\">\n                                                <tr>\n                                                    <td align=\"center\" valign=\"top\" width=\"500\" class=\"flexibleContainerCell\">\n                                                        <table border=\"0\" cellpadding=\"30\" cellspacing=\"0\" width=\"100%\">\n                                                            <tr>\n                                                                <td align=\"center\" valign=\"top\">\n\n                                                                    <!-- CONTENT TABLE // -->\n                                                                    <table border=\"0\" cellpadding=\"0\" cellspacing=\"0\" width=\"100%\">\n                                                                        <tr>\n                                                                            <td valign=\"top\" class=\"textContent\">\n                                                                                <!--\n                                                                The \"mc:edit\" is a feature for MailChimp which allows\n                                                                you to edit certain row. It makes it easy for you to quickly edit row sections.\n                                                                http://kb.mailchimp.com/templates/code/create-editable-content-areas-with-mailchimps-template-language\n                                                            -->\n                                                                                \n                                                                                <div mc:edit=\"body\" style=\"text-align:left;font-family:Helvetica,Arial,sans-serif;font-size:15px;margin-bottom:0;color:#5F5F5F;line-height:135%;\">\n                                                                                    @RenderBody()\n\n                                                                                </div>\n                                                                            </td>\n                                                                        </tr>\n                                                                    </table>\n                                                                    <!-- // CONTENT TABLE -->\n\n                                                                </td>\n                                                            </tr>\n                                                        </table>\n                                                    </td>\n                                                </tr>\n                                            </table>\n                                            <!-- // FLEXIBLE CONTAINER -->\n                                        </td>\n                                    </tr>\n                                </table>\n                                <!-- // CENTERING TABLE -->\n                            </td>\n                        </tr>\n                        <!-- // MODULE ROW -->\n                        \n                       \n                    </table>\n                    <!-- // END -->\n                    <!-- EMAIL FOOTER // -->\n                    <!--\n                        The table \"emailBody\" is the email's container.\n                        Its width can be set to 100% for a color band\n                        that spans the width of the page.\n                    -->\n                    <table bgcolor=\"#E1E1E1\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" width=\"500\" id=\"emailFooter\">\n\n                        <!-- FOOTER ROW // -->\n                        <!--\n                            To move or duplicate any of the design patterns\n                            in this email, simply move or copy the entire\n                            MODULE ROW section for each content block.\n                        -->\n                        <tr>\n                            <td align=\"center\" valign=\"top\">\n                                <!-- CENTERING TABLE // -->\n                                <table border=\"0\" cellpadding=\"0\" cellspacing=\"0\" width=\"100%\">\n                                    <tr>\n                                        <td align=\"center\" valign=\"top\">\n                                            <!-- FLEXIBLE CONTAINER // -->\n                                            <table border=\"0\" cellpadding=\"0\" cellspacing=\"0\" width=\"500\" class=\"flexibleContainer\">\n                                                <tr>\n                                                    <td align=\"center\" valign=\"top\" width=\"500\" class=\"flexibleContainerCell\">\n                                                        <table border=\"0\" cellpadding=\"30\" cellspacing=\"0\" width=\"100%\">\n                                                            <tr>\n                                                                <td valign=\"top\" bgcolor=\"#E1E1E1\">\n\n                                                                    <div style=\"font-family:Helvetica,Arial,sans-serif;font-size:13px;color:#828282;text-align:center;line-height:120%;\">\n                                                                        <div>Copyright &copy; @DateTime.Now.Year -  All&nbsp;rights&nbsp;reserved.</div>\n                                                                        \n                                                                    </div>\n\n                                                                </td>\n                                                            </tr>\n                                                        </table>\n                                                    </td>\n                                                </tr>\n                                            </table>\n                                            <!-- // FLEXIBLE CONTAINER -->\n                                        </td>\n                                    </tr>\n                                </table>\n                                <!-- // CENTERING TABLE -->\n                            </td>\n                        </tr>\n\n                    </table>\n                    <!-- // END -->\n\n                </td>\n            </tr>\n        </table>\n    </center>\n</body>\n</html>\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.CompiledViews.Bootstrap5/Views/Shared/_LayoutEmpty.cshtml",
    "content": "﻿@RenderBody()\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.CompiledViews.Bootstrap5/Views/_ViewImports.cshtml",
    "content": "﻿@using System\n@using System.Collections.Generic\n@using System.Globalization\n@using System.Linq\n@using Microsoft.AspNetCore.Http\n@using Microsoft.AspNetCore.Authentication\n@using Microsoft.AspNetCore.Localization\n@using Microsoft.Extensions.Localization\n@using Microsoft.Extensions.Options\n@using cloudscribe.Web.Navigation\n@using cloudscribe.Web.Pagination\n@using cloudscribe.Pagination.Models\n@using cloudscribe.Web.Common\n@using cloudscribe.Web.Common.Components\n@using cloudscribe.Web.Common.Helpers\n@using cloudscribe.Web.Common.Models\n@using cloudscribe.Web.Common.Extensions\n@using cloudscribe.SimpleContent.Models\n@using cloudscribe.SimpleContent.Models.Versioning\n@using cloudscribe.SimpleContent.Web.TagHelpers\n@using cloudscribe.SimpleContent.Web\n@using cloudscribe.SimpleContent.Web.Design\n@addTagHelper \"*, cloudscribe.SimpleContent.Web\"\n@addTagHelper \"*, Microsoft.AspNetCore.Mvc.TagHelpers\"\n@addTagHelper \"*, cloudscribe.Web.Common\"\n@addTagHelper \"*, cloudscribe.Web.Navigation\"\n@addTagHelper \"*, cloudscribe.Web.Pagination\"\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.CompiledViews.Bootstrap5/cloudscribe.SimpleContent.CompiledViews.Bootstrap5.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Razor\">\n\n  <PropertyGroup>\n    <Description>Bootstrap 5 pre-compiled views for cloudscribe.SimpleContent.Web</Description>\n    <Version>10.1.0</Version>\n    <TargetFramework>net10.0</TargetFramework>\n    <Authors>Joe Audette</Authors>\n    <AddRazorSupportForMvc>true</AddRazorSupportForMvc>\n    <PackageTags>cloudscribe;SimpleContent;Bootstrap5</PackageTags>\n    <PackageIcon>icon.png</PackageIcon>\n    <PackageProjectUrl>https://github.com/cloudscribe/cloudscribe.SimpleContent</PackageProjectUrl>\n    <PackageLicenseExpression>Apache-2.0</PackageLicenseExpression>\n    <RepositoryUrl>https://github.com/cloudscribe/cloudscribe.SimpleContent.git</RepositoryUrl>\n    <RepositoryType>git</RepositoryType>\n    <PackageReadmeFile>README.md</PackageReadmeFile>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <None Include=\"icon.png\" Pack=\"true\" PackagePath=\"\\\" />\n  </ItemGroup>\n\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|AnyCPU'\">\n    <NoWarn>1701;1702;0436</NoWarn>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|AnyCPU'\">\n    <NoWarn>1701;1702;0436</NoWarn>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <FrameworkReference Include=\"Microsoft.AspNetCore.App\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <ProjectReference Include=\"..\\cloudscribe.SimpleContent.Web\\cloudscribe.SimpleContent.Web.csproj\" />\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"README.md\" Pack=\"true\" PackagePath=\"/\" />\n  </ItemGroup>\n</Project>\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.ContentTemplates.Bootstrap5/Configuration/Columns/ColumnTemplateOptions.cs",
    "content": "﻿namespace cloudscribe.SimpleContent.ContentTemplates.Configuration\n{\n    public class ColumnTemplateOptions\n    {\n        /// <summary>\n        /// must be a folder starting with /media\n        /// </summary>\n        public string NewImagePath { get; set; } = \"/media/images\";\n\n        /// <summary>\n        /// thumbnails are not needed for the gallery and just use extra disk space.\n        /// The gallery uses the same images for both thumbnail and full view\n        /// </summary>\n        public bool CreateThumbnails { get; set; } = false;\n\n        /// <summary>\n        /// the default value 1500 is recommended, even if the image is rendered smaller this ensures it looks good on retina displays\n        /// The resisizing still makes the image file sizes significantly smaller.\n        /// </summary>\n        public int ResizeMaxWidth { get; set; } = 1500;\n\n        /// <summary>\n        /// the default value 1500 is recommended, even if the image is rendered smaller this ensures it looks good on retina displays\n        /// The resisizing still makes the image file sizes significantly smaller.\n        /// </summary>\n        public int ResizeMaxHeight { get; set; } = 1500;\n\n        /// <summary>\n        /// original size images from modern cameras are quite large and not useful on the web so this defaults to false\n        /// </summary>\n        public bool KeepOriginalSizeImages { get; set; } = false;\n\n        /// <summary>\n        /// ability to browse files on the server is still subject to permissions of the user and file browse policy\n        /// this just controls visibility of the button for browsing the server\n        /// </summary>\n        public bool EnableBrowseServer { get; set; } = true;\n\n        /// <summary>\n        /// allow the user to crop newly dropped/uploaded images\n        /// </summary>\n        public bool EnableCropping { get; set; } = true;\n\n        /// <summary>\n        /// in pixels\n        /// </summary>\n        public int CropAreaWidth { get; set; } = 690;\n\n        /// <summary>\n        /// in pixels\n        /// </summary>\n        public int CropAreaHeight { get; set; } = 517;\n\n        /// <summary>\n        /// the image shown before user uploads or selects a file from the server\n        /// </summary>\n        public string PlaceholderImageUrl { get; set; } = \"/cr/images/690x517-placeholder.png\";\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.ContentTemplates.Bootstrap5/Configuration/Columns/ConfigColumnTemplateOptionsProvider.cs",
    "content": "﻿using Microsoft.Extensions.Options;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace cloudscribe.SimpleContent.ContentTemplates.Configuration\n{\n    public class ConfigColumnTemplateOptionsProvider : IColumnTemplateOptionsProvider\n    {\n        public ConfigColumnTemplateOptionsProvider(\n            IOptions<ColumnTemplateOptions> optionsAccessor\n            )\n        {\n            _options = optionsAccessor.Value;\n        }\n\n        private ColumnTemplateOptions _options;\n\n        public Task<ColumnTemplateOptions> ResolveColumnTemplateOptions(\n            string hostName,\n            string path,\n            CancellationToken cancellationToken = default(CancellationToken)\n            )\n        {\n            return Task.FromResult(_options);\n        }\n\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.ContentTemplates.Bootstrap5/Configuration/Columns/IColumnTemplateOptionsProvider.cs",
    "content": "﻿using System.Threading;\nusing System.Threading.Tasks;\n\nnamespace cloudscribe.SimpleContent.ContentTemplates.Configuration\n{\n    public interface IColumnTemplateOptionsProvider\n    {\n        Task<ColumnTemplateOptions> ResolveColumnTemplateOptions(\n            string hostName,\n            string path,\n            CancellationToken cancellationToken = default(CancellationToken)\n            );\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.ContentTemplates.Bootstrap5/Configuration/Gallery/ConfigGalleryOptionsProvider.cs",
    "content": "﻿using Microsoft.Extensions.Options;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace cloudscribe.SimpleContent.ContentTemplates.Configuration\n{\n    public class ConfigGalleryOptionsProvider : IGalleryOptionsProvider\n    {\n        public ConfigGalleryOptionsProvider(\n            IOptions<GalleryOptions> optionsAccessor\n            )\n        {\n            _options = optionsAccessor.Value;\n        }\n\n        private GalleryOptions _options;\n\n        public Task<GalleryOptions> ResolveGalleryOptions(\n            string hostName,\n            string path,\n            CancellationToken cancellationToken = default(CancellationToken)\n            )\n        {\n            return Task.FromResult(_options);\n        }\n\n\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.ContentTemplates.Bootstrap5/Configuration/Gallery/GalleryOptions.cs",
    "content": "﻿namespace cloudscribe.SimpleContent.ContentTemplates.Configuration\n{\n    public class GalleryOptions\n    {\n        /// <summary>\n        /// must be a folder starting with /media\n        /// </summary>\n        public string NewImagePath { get; set; } = \"/media/gallery\";\n\n        /// <summary>\n        /// thumbnails are not needed for the gallery and just use extra disk space.\n        /// The gallery uses the same images for both thumbnail and full view\n        /// </summary>\n        public bool CreateThumbnails { get; set; } = false;\n\n        /// <summary>\n        /// the default value 1500 is recommended, even if the image is rendered smaller this ensures it looks good on retina displays\n        /// The resisizing still makes the image file sizes significantly smaller.\n        /// </summary>\n        public int ResizeMaxWidth { get; set; } = 1500;\n\n        /// <summary>\n        /// the default value 1500 is recommended, even if the image is rendered smaller this ensures it looks good on retina displays\n        /// The resisizing still makes the image file sizes significantly smaller.\n        /// </summary>\n        public int ResizeMaxHeight { get; set; } = 1500;\n\n        /// <summary>\n        /// original size images from modern cameras are quite large and not useful on the web so this defaults to false\n        /// </summary>\n        public bool KeepOriginalSizeImages { get; set; } = false;\n\n        /// <summary>\n        /// ability to browse files on the server is still subject to permissions of the user and file browse policy\n        /// this just controls visibility of the button for browsing the server\n        /// </summary>\n        public bool EnableBrowseServer { get; set; } = true;\n\n        /// <summary>\n        /// allow the user to crop newly dropped/uploaded images\n        /// </summary>\n        public bool EnableCropping { get; set; } = true;\n\n        /// <summary>\n        /// in pixels\n        /// </summary>\n        public int CropAreaWidth { get; set; } = 690;\n\n        /// <summary>\n        /// in pixels\n        /// </summary>\n        public int CropAreaHeight { get; set; } = 517;\n\n        /// <summary>\n        /// the image shown before user uploads or selects a file from the server\n        /// </summary>\n        public string PlaceholderImageUrl { get; set; } = \"/cr/images/690x517-placeholder.png\";\n\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.ContentTemplates.Bootstrap5/Configuration/Gallery/IGalleryOptionsProvider.cs",
    "content": "﻿using System.Threading;\nusing System.Threading.Tasks;\n\nnamespace cloudscribe.SimpleContent.ContentTemplates.Configuration\n{\n    public interface IGalleryOptionsProvider\n    {\n        Task<GalleryOptions> ResolveGalleryOptions(\n            string hostName,\n            string path,\n            CancellationToken cancellationToken = default(CancellationToken)\n            );\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.ContentTemplates.Bootstrap5/Configuration/Image/ConfigImageWithContentOptionsProvider.cs",
    "content": "﻿using Microsoft.Extensions.Options;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace cloudscribe.SimpleContent.ContentTemplates.Configuration\n{\n    public class ConfigImageWithContentOptionsProvider : IImageWithContentOptionsProvider\n    {\n        public ConfigImageWithContentOptionsProvider(\n            IOptions<ImageWithContentOptions> optionsAccessor\n            )\n        {\n            _options = optionsAccessor.Value;\n        }\n\n        private ImageWithContentOptions _options;\n\n        public Task<ImageWithContentOptions> ResolveImageWithContentOptions(\n            string hostName,\n            string path,\n            CancellationToken cancellationToken = default(CancellationToken)\n            )\n        {\n            return Task.FromResult(_options);\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.ContentTemplates.Bootstrap5/Configuration/Image/IImageWithContentOptionsProvider.cs",
    "content": "﻿using System.Threading;\nusing System.Threading.Tasks;\n\nnamespace cloudscribe.SimpleContent.ContentTemplates.Configuration\n{\n    public interface IImageWithContentOptionsProvider\n    {\n        Task<ImageWithContentOptions> ResolveImageWithContentOptions(\n            string hostName,\n            string path,\n            CancellationToken cancellationToken = default(CancellationToken)\n            );\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.ContentTemplates.Bootstrap5/Configuration/Image/ImageWithContentOptions.cs",
    "content": "﻿namespace cloudscribe.SimpleContent.ContentTemplates.Configuration\n{\n    public class ImageWithContentOptions\n    {\n        /// <summary>\n        /// must be a folder starting with /media\n        /// </summary>\n        public string NewImagePath { get; set; } = \"/media/images\";\n\n        /// <summary>\n        /// thumbnails are not needed for the gallery and just use extra disk space.\n        /// The gallery uses the same images for both thumbnail and full view\n        /// </summary>\n        public bool CreateThumbnails { get; set; } = false;\n\n        /// <summary>\n        /// the default value 1500 is recommended, even if the image is rendered smaller this ensures it looks good on retina displays\n        /// The resisizing still makes the image file sizes significantly smaller.\n        /// </summary>\n        public int ResizeMaxWidth { get; set; } = 1500;\n\n        /// <summary>\n        /// the default value 1500 is recommended, even if the image is rendered smaller this ensures it looks good on retina displays\n        /// The resisizing still makes the image file sizes significantly smaller.\n        /// </summary>\n        public int ResizeMaxHeight { get; set; } = 1500;\n\n        /// <summary>\n        /// original size images from modern cameras are quite large and not useful on the web so this defaults to false\n        /// </summary>\n        public bool KeepOriginalSizeImages { get; set; } = false;\n\n        /// <summary>\n        /// ability to browse files on the server is still subject to permissions of the user and file browse policy\n        /// this just controls visibility of the button for browsing the server\n        /// </summary>\n        public bool EnableBrowseServer { get; set; } = true;\n\n        /// <summary>\n        /// allow the user to crop newly dropped/uploaded images\n        /// </summary>\n        public bool EnableCropping { get; set; } = true;\n\n        /// <summary>\n        /// in pixels\n        /// </summary>\n        public int CropAreaWidth { get; set; } = 690;\n\n        /// <summary>\n        /// in pixels\n        /// </summary>\n        public int CropAreaHeight { get; set; } = 517;\n\n        /// <summary>\n        /// the image shown before user uploads or selects a file from the server\n        /// </summary>\n        public string PlaceholderImageUrl { get; set; } = \"/cr/images/690x517-placeholder.png\";\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.ContentTemplates.Bootstrap5/Configuration/LinkList/ConfigLinkListOptionsProvider.cs",
    "content": "﻿using Microsoft.Extensions.Options;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace cloudscribe.SimpleContent.ContentTemplates.Configuration\n{\n    public class ConfigLinkListOptionsProvider : ILinkListOptionsProvider\n    {\n        public ConfigLinkListOptionsProvider(\n            IOptions<LinkListOptions> optionsAccessor\n            )\n        {\n            _options = optionsAccessor.Value;\n        }\n\n        private LinkListOptions _options;\n\n        public Task<LinkListOptions> ResolveLinkListOptions(\n            string hostName,\n            string path,\n            CancellationToken cancellationToken = default(CancellationToken)\n            )\n        {\n            return Task.FromResult(_options);\n        }\n\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.ContentTemplates.Bootstrap5/Configuration/LinkList/ILinkListOptionsProvider.cs",
    "content": "﻿using System.Threading;\nusing System.Threading.Tasks;\n\nnamespace cloudscribe.SimpleContent.ContentTemplates.Configuration\n{\n    public interface ILinkListOptionsProvider\n    {\n        Task<LinkListOptions> ResolveLinkListOptions(\n            string hostName,\n            string path,\n            CancellationToken cancellationToken = default(CancellationToken)\n            );\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.ContentTemplates.Bootstrap5/Configuration/LinkList/LinkListOptions.cs",
    "content": "﻿namespace cloudscribe.SimpleContent.ContentTemplates.Configuration\n{\n    public class LinkListOptions\n    {\n        /// <summary>\n        /// must be a folder starting with /media\n        /// </summary>\n        public string NewImagePath { get; set; } = \"/media/linklists\";\n\n        /// <summary>\n        /// thumbnails are not needed for the gallery and just use extra disk space.\n        /// The gallery uses the same images for both thumbnail and full view\n        /// </summary>\n        public bool CreateThumbnails { get; set; } = false;\n\n        /// <summary>\n        /// the default value 1500 is recommended, even if the image is rendered smaller this ensures it looks good on retina displays\n        /// The resisizing still makes the image file sizes significantly smaller.\n        /// </summary>\n        public int ResizeMaxWidth { get; set; } = 500;\n\n        /// <summary>\n        /// the default value 1500 is recommended, even if the image is rendered smaller this ensures it looks good on retina displays\n        /// The resisizing still makes the image file sizes significantly smaller.\n        /// </summary>\n        public int ResizeMaxHeight { get; set; } = 500;\n\n        /// <summary>\n        /// the max height in pixels to render link images\n        /// </summary>\n        public int ImageRenderMaxHeight { get; set; } = 150;\n\n        /// <summary>\n        /// original size images from modern cameras are quite large and not useful on the web so this defaults to false\n        /// </summary>\n        public bool KeepOriginalSizeImages { get; set; } = false;\n\n        /// <summary>\n        /// ability to browse files on the server is still subject to permissions of the user and file browse policy\n        /// this just controls visibility of the button for browsing the server\n        /// </summary>\n        public bool EnableBrowseServer { get; set; } = true;\n\n        /// <summary>\n        /// allow the user to crop newly dropped/uploaded images\n        /// </summary>\n        public bool EnableCropping { get; set; } = true;\n\n        /// <summary>\n        /// in pixels\n        /// </summary>\n        public int CropAreaWidth { get; set; } = 350;\n\n        /// <summary>\n        /// in pixels\n        /// </summary>\n        public int CropAreaHeight { get; set; } = 250;\n\n        /// <summary>\n        /// the image shown before user uploads or selects a file from the server\n        /// </summary>\n        public string PlaceholderImageUrl { get; set; } = \"/cr/images/350x250-placeholder.png\";\n\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.ContentTemplates.Bootstrap5/ContentTemplateResources.cs",
    "content": "﻿namespace cloudscribe.SimpleContent.ContentTemplates\n{\n    /// <summary>\n    /// just a class to hang IStringLocalizer on\n    /// </summary>\n    public class ContentTemplateResources\n    {\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.ContentTemplates.Bootstrap5/Controllers/SctrController.cs",
    "content": "﻿// Copyright (c) Source Tree Solutions, LLC. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.\n// Author:                  Joe Audette\n// Created:                 2018-07-16\n// Last Modified:           2018-07-16\n// \n\nusing cloudscribe.Web.Common.Helpers;\nusing Microsoft.AspNetCore.Authorization;\nusing Microsoft.AspNetCore.Http;\nusing Microsoft.AspNetCore.Mvc;\nusing Microsoft.Extensions.Logging;\nusing System.IO;\nusing System.Reflection;\n\nnamespace cloudscribe.SimpleContent.ContentTemplates.Bootstrap5.Controllers\n{\n    /// <summary>\n    /// SimpleContentTemplateResourcesController - sctr\n    /// </summary>\n    [ApiExplorerSettings(IgnoreApi = true)]\n    public class SctrController : Controller\n    {\n        public SctrController(\n            IResourceHelper resourceHelper,\n            ILogger<SctrController> logger\n            )\n        {\n            ResourceHelper = resourceHelper;\n            Log = logger;\n        }\n\n        protected IResourceHelper ResourceHelper { get; private set; }\n        protected ILogger Log { get; private set; }\n\n        protected virtual IActionResult GetResult(string resourceName, string contentType)\n        {\n            var assembly = typeof(SctrController).GetTypeInfo().Assembly;\n            resourceName = ResourceHelper.ResolveResourceIdentifier(resourceName);\n            var resourceStream = assembly.GetManifestResourceStream(resourceName);\n            if (resourceStream == null)\n            {\n                Log.LogError(\"resource not found for \" + resourceName);\n                return NotFound();\n            }\n\n            Log.LogDebug(\"resource found for \" + resourceName);\n\n            var status = ETagGenerator.AddEtagForStream(HttpContext, resourceStream);\n            if (status != null) { return status; } //304\n\n            return new FileStreamResult(resourceStream, contentType);\n        }\n\n        // /sctr/js/\n        [HttpGet]\n        [Route(\"sctr/js/{slug}\")]\n        [AllowAnonymous]\n        public virtual IActionResult Js()\n        {\n            var baseSegment = \"cloudscribe.SimpleContent.ContentTemplates.Bootstrap5.js.\";\n\n            var requestPath = HttpContext.Request.Path.Value;\n            Log.LogDebug(requestPath + \" requested\");\n\n            if (requestPath.Length < \"/sctr/js/\".Length) return NotFound();\n\n            var seg = requestPath.Substring(\"/sctr/js/\".Length);\n            var ext = Path.GetExtension(requestPath);\n            var mimeType = ResourceHelper.GetMimeType(ext);\n\n            return GetResult(baseSegment + seg, mimeType);\n        }\n\n        // /sctr/css/\n        [HttpGet]\n        [Route(\"sctr/css/{slug}\")]\n        [AllowAnonymous]\n        public virtual IActionResult Css()\n        {\n            var baseSegment = \"cloudscribe.SimpleContent.ContentTemplates.Bootstrap5.css.\";\n\n            var requestPath = HttpContext.Request.Path.Value;\n            Log.LogDebug(requestPath + \" requested\");\n\n            if (requestPath.Length < \"/sctr/css/\".Length) return NotFound();\n\n            var seg = requestPath.Substring(\"/sctr/css/\".Length);\n            var ext = Path.GetExtension(requestPath);\n            var mimeType = ResourceHelper.GetMimeType(ext);\n\n            return GetResult(\n                baseSegment + seg,\n                mimeType);\n        }\n\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.ContentTemplates.Bootstrap5/README.md",
    "content": "# cloudscribe.SimpleContent.ContentTemplates.Bootstrap5\n\n[![NuGet](https://img.shields.io/nuget/v/cloudscribe.SimpleContent.ContentTemplates.Bootstrap5.svg)](https://www.nuget.org/packages/cloudscribe.SimpleContent.ContentTemplates.Bootstrap5)\n[![License: Apache-2.0](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://opensource.org/licenses/Apache-2.0)\n\nBootstrap 5 content templates for cloudscribe.SimpleContent.\n\n## Installation\n\n```shell\nInstall-Package cloudscribe.SimpleContent.ContentTemplates.Bootstrap5\n```\n\n## Usage\n\nAdd this package to your ASP.NET Core project to use Bootstrap 5 content templates with SimpleContent.\n\n## Contributing\n\nContributions are welcome! Please see the [contributing guidelines](https://github.com/cloudscribe/cloudscribe.SimpleContent/blob/main/CONTRIBUTING.md).\n\n## License\n\nLicensed under the Apache 2.0 License. See the [LICENSE](https://github.com/cloudscribe/cloudscribe.SimpleContent/blob/main/LICENSE) file for details.\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.ContentTemplates.Bootstrap5/Services/ContentTemplateProvider.cs",
    "content": "﻿// Copyright (c) Source Tree Solutions, LLC. All rights reserved.\n// Author:                  Joe Audette\n// Created:                 2018-07-10\n// Last Modified:           2018-07-24\n// \n\nusing cloudscribe.SimpleContent.Models;\nusing Microsoft.Extensions.Localization;\nusing System.Collections.Generic;\nusing System.Threading.Tasks;\n\nnamespace cloudscribe.SimpleContent.ContentTemplates.Services\n{\n    public class ContentTemplateProvider : IContentTemplateProvider\n    {\n        public ContentTemplateProvider(\n            IStringLocalizer<ContentTemplateResources> stringLocalizer\n            )\n        {\n            _sr = stringLocalizer;\n        }\n\n        private List<ContentTemplate> _list = null;\n        private IStringLocalizer _sr;\n\n\n\n        private void BuildList()\n        {\n            if(_list != null) { return; }\n\n            _list = new List<ContentTemplate>();\n            _list.Add(BuildSectionsWithImages());\n            _list.Add(BuildTwoSectionsWithImages());\n            _list.Add(BuildImageWithContent());\n            _list.Add(BuildGalleryWithContent());\n            _list.Add(BuildListOfLinks());\n            _list.Add(BuildEverythingTemplate());\n            _list.Add(BuildBingLocationMap());\n            _list.Add(BuildUnauthenticatedContent());\n        }\n\n        public Task<List<ContentTemplate>> GetAllTemplates()\n        {\n            if(_list == null)\n            {\n                BuildList();\n            }\n\n            return Task.FromResult(_list);\n        }\n\n        \n\n\n        private ContentTemplate BuildGalleryWithContent()\n        {\n            var template = new ContentTemplate()\n            {\n                Key = \"sct-GalleryWithContent\",\n                Title = _sr[\"Simple image gallery with optional content above and below\"],\n                Description = _sr[\"The gallery has six layouts to choose from: cards, compact, grid, carousel full width, carousel left with wrapped content, and carousel right with wrapped content.\"],\n                EditView = \"ContentTemplates/GalleryWithContentEdit\",\n                RenderView = \"ContentTemplates/GalleryWithContentRender\",\n                ScreenshotUrl = \"\",\n                ProjectId = \"*\",\n                AvailableForFeature = \"*\",\n                Enabled = true,\n                ModelType = \"cloudscribe.SimpleContent.ContentTemplates.ViewModels.SimpleGalleryViewModel, cloudscribe.SimpleContent.ContentTemplates.Bootstrap5\",\n                FormParserName = \"DefaultModelFormParser\",\n                SerializerName = \"Json\",\n                ValidatorName = \"DefaultTemplateModelValidator\",\n                GroupSort1= \"555555\",\n                GroupSort2= \"555100\",\n\n                EditCss = new List<CssFile>()\n                {\n                    new CssFile\n                    {\n                        Url = \"/cr/css/dropzone.min.css\",\n                        Environment = \"any\",\n                        Sort = 1\n                    },\n                    new CssFile\n                    {\n                        Url = \"/cr/css/croppie.min.css\",\n                        Environment = \"any\",\n                        Sort = 2\n                    },\n                    new CssFile\n                    {\n                        Url = \"/cr/css/croppie-cloudscribe.css\",\n                        Environment = \"any\",\n                        Sort = 3\n                    }\n                },\n                EditScripts = new List<ScriptFile>()\n                {\n                    new ScriptFile()\n                    {\n                        Url = \"/cr/js/dropzone.min.js\",\n                        Environment = \"any\",\n                        Sort = 1\n                    },\n                    new ScriptFile()\n                    {\n                        Url = \"/cr/js/croppie.min.js\",\n                        Environment = \"any\",\n                        Sort = 2\n                    },\n                    new ScriptFile()\n                    {\n                        Url = \"/filemanager/js/cloudscribe-unobtrusive-file-drop.min.js\",\n                        //Url = \"/js/cloudscribe-unobtrusive-file-drop.js\",\n                        Environment = \"any\",\n                        Sort = 3\n                    },\n                    new ScriptFile()\n                    {\n                        Url = \"/cr/js/knockout-3.4.2.js\",\n                        Environment = \"any\",\n                        Sort = 4\n                    },\n                    new ScriptFile()\n                    {\n                        Url = \"/sctr/js/cst-basic-list.min.js\",\n                       // Url = \"/js/cst-basic-list.js\",\n                        Environment = \"any\",\n                        Sort = 5\n                    }\n                },\n                \n                RenderCss = new List<CssFile>()\n                {\n                    new CssFile\n                    {\n                        Url = \"/cr/css/baguetteBox.min.css\",\n                        Environment = \"any\",\n                        Sort = 3\n                    },\n                    new CssFile\n                    {\n                        Url = \"/sctr/css/simple-gallery.min.css\",\n                        Environment = \"any\",\n                        Sort = 4\n                    }\n                },\n                RenderScripts = new List<ScriptFile>()\n                {\n                    new ScriptFile()\n                    {\n                        Url = \"/cr/js/baguetteBox.min.js\",\n                        Environment = \"any\",\n                        Sort = 2\n                    },\n                    new ScriptFile()\n                    {\n                        Url = \"/sctr/js/simple-gallery.js\",\n                        Environment = \"any\",\n                        Sort = 3\n                    }\n                }\n                \n            };\n\n            return template;\n\n        }\n\n        private ContentTemplate BuildSectionsWithImages()\n        {\n            var template = new ContentTemplate()\n            {\n                Key = \"sct-ColumnsWithImages\",\n                Title = _sr[\"One to four sections with an optional image per section\"],\n                Description = _sr[\"There are two layouts to choose from, responsive columns with images on top, or images floated to alternate sides per section to wrap content around the images.\"],\n                EditView = \"ContentTemplates/SectionsWithImageEdit\",\n                RenderView = \"ContentTemplates/SectionsWithImageRender\",\n                ModelType = \"cloudscribe.SimpleContent.ContentTemplates.ViewModels.SectionsWithImageViewModel, cloudscribe.SimpleContent.ContentTemplates.Bootstrap5\",\n                ScreenshotUrl = \"\",\n                ProjectId = \"*\",\n                AvailableForFeature = \"*\",\n                Enabled = true,\n                FormParserName = \"DefaultModelFormParser\",\n                SerializerName = \"Json\",\n                ValidatorName = \"DefaultTemplateModelValidator\",\n                GroupSort1 = \"555555\",\n                GroupSort2 = \"555200\",\n\n                EditCss = new List<CssFile>()\n                {\n                    new CssFile\n                    {\n                        Url = \"/cr/css/dropzone.min.css\",\n                        Environment = \"any\",\n                        Sort = 1\n                    },\n                    new CssFile\n                    {\n                        Url = \"/cr/css/croppie.min.css\",\n                        Environment = \"any\",\n                        Sort = 2\n                    },\n                    new CssFile\n                    {\n                        Url = \"/cr/css/croppie-cloudscribe.css\",\n                        Environment = \"any\",\n                        Sort = 3\n                    }\n                },\n                EditScripts = new List<ScriptFile>()\n                {\n                    new ScriptFile()\n                    {\n                        Url = \"/cr/js/dropzone.min.js\",\n                        Environment = \"any\",\n                        Sort = 1\n                    },\n                    new ScriptFile()\n                    {\n                        Url = \"/cr/js/croppie.min.js\",\n                        Environment = \"any\",\n                        Sort = 2\n                    },\n                    new ScriptFile()\n                    {\n                        Url = \"/filemanager/js/cloudscribe-unobtrusive-file-drop.min.js\",\n                       // Url = \"/js/cloudscribe-unobtrusive-file-drop.js\",\n                        Environment = \"any\",\n                        Sort = 3\n                    }\n                    //,\n                    //new ScriptFile()\n                    //{\n                    //    Url = \"/cr/js/unsaved-changes-prompt.min.js\",\n                    //    Environment = \"any\",\n                    //    Sort = 4\n                    //}\n\n                },\n\n                RenderCss = new List<CssFile>()\n                {\n                    new CssFile\n                    {\n                        Url = \"/sctr/css/simple-image.min.css\",\n                        Environment = \"any\",\n                        Sort = 2\n                    }\n                },\n                RenderScripts = new List<ScriptFile>()\n                {\n\n                }\n\n            };\n\n            return template;\n\n        }\n\n        private ContentTemplate BuildTwoSectionsWithImages()\n        {\n            var template = new ContentTemplate()\n            {\n                Key = \"sct-TwoColumnsWithImages\",\n                Title = _sr[\"Two column layout with an optional image per column\"],\n                Description = _sr[\"There are two layouts to choose from, one with left column wider and one with right column wider.\"],\n                EditView = \"ContentTemplates/TwoSectionsWithImageEdit\",\n                RenderView = \"ContentTemplates/TwoSectionsWithImageRender\",\n                ModelType = \"cloudscribe.SimpleContent.ContentTemplates.ViewModels.SectionsWithImageViewModel, cloudscribe.SimpleContent.ContentTemplates.Bootstrap5\",\n                ScreenshotUrl = \"\",\n                ProjectId = \"*\",\n                AvailableForFeature = \"*\",\n                Enabled = true,\n                FormParserName = \"DefaultModelFormParser\",\n                SerializerName = \"Json\",\n                ValidatorName = \"DefaultTemplateModelValidator\",\n                GroupSort1 = \"555555\",\n                GroupSort2 = \"555300\",\n\n                EditCss = new List<CssFile>()\n                {\n                    new CssFile\n                    {\n                        Url = \"/cr/css/dropzone.min.css\",\n                        Environment = \"any\",\n                        Sort = 1\n                    },\n                    new CssFile\n                    {\n                        Url = \"/cr/css/croppie.min.css\",\n                        Environment = \"any\",\n                        Sort = 2\n                    },\n                    new CssFile\n                    {\n                        Url = \"/cr/css/croppie-cloudscribe.css\",\n                        Environment = \"any\",\n                        Sort = 3\n                    }\n                },\n                EditScripts = new List<ScriptFile>()\n                {\n                    new ScriptFile()\n                    {\n                        Url = \"/cr/js/dropzone.min.js\",\n                        Environment = \"any\",\n                        Sort = 1\n                    },\n                    new ScriptFile()\n                    {\n                        Url = \"/cr/js/croppie.min.js\",\n                        Environment = \"any\",\n                        Sort = 2\n                    },\n                    new ScriptFile()\n                    {\n                        Url = \"/filemanager/js/cloudscribe-unobtrusive-file-drop.min.js\",\n                        Environment = \"any\",\n                        Sort = 3\n                    }\n                    //,\n                    //new ScriptFile()\n                    //{\n                    //    Url = \"/cr/js/unsaved-changes-prompt.min.js\",\n                    //    Environment = \"any\",\n                    //    Sort = 4\n                    //}\n\n                },\n\n                RenderCss = new List<CssFile>()\n                {\n                    new CssFile\n                    {\n                        Url = \"/sctr/css/simple-image.min.css\",\n                        Environment = \"any\",\n                        Sort = 2\n                    }\n                },\n                RenderScripts = new List<ScriptFile>()\n                {\n\n                }\n\n            };\n\n            return template;\n\n        }\n\n        private ContentTemplate BuildImageWithContent()\n        {\n            var template = new ContentTemplate()\n            {\n                Key = \"sct-ImageWithContent\",\n                Title = _sr[\"Image with content\"],\n                Description = _sr[\"A simple image floated left or right so that content wraps around it, or not floated for a responsive image with content below.\"],\n                EditView = \"ContentTemplates/ImageWithContentEdit\",\n                RenderView = \"ContentTemplates/ImageWithContentRender\",\n                ModelType = \"cloudscribe.SimpleContent.ContentTemplates.ViewModels.ImageWithContentViewModel, cloudscribe.SimpleContent.ContentTemplates.Bootstrap5\",\n                ScreenshotUrl = \"\",\n                ProjectId = \"*\",\n                AvailableForFeature = \"*\",\n                Enabled = true,\n                FormParserName = \"DefaultModelFormParser\",\n                SerializerName = \"Json\",\n                ValidatorName = \"DefaultTemplateModelValidator\",\n                GroupSort1 = \"555555\",\n                GroupSort2 = \"555400\",\n\n                EditCss = new List<CssFile>()\n                {\n                    new CssFile\n                    {\n                        Url = \"/cr/css/dropzone.min.css\",\n                        Environment = \"any\",\n                        Sort = 1\n                    },\n                    new CssFile\n                    {\n                        Url = \"/cr/css/croppie.min.css\",\n                        Environment = \"any\",\n                        Sort = 2\n                    },\n                    new CssFile\n                    {\n                        Url = \"/cr/css/croppie-cloudscribe.css\",\n                        Environment = \"any\",\n                        Sort = 3\n                    }\n                },\n                EditScripts = new List<ScriptFile>()\n                {\n                    new ScriptFile()\n                    {\n                        Url = \"/cr/js/dropzone.min.js\",\n                        Environment = \"any\",\n                        Sort = 1\n                    },\n                    new ScriptFile()\n                    {\n                        Url = \"/cr/js/croppie.min.js\",\n                        Environment = \"any\",\n                        Sort = 2\n                    },\n                    new ScriptFile()\n                    {\n                        Url = \"/filemanager/js/cloudscribe-unobtrusive-file-drop.min.js\",\n                        Environment = \"any\",\n                        Sort = 3\n                    }\n                },\n\n                RenderCss = new List<CssFile>()\n                {\n                    new CssFile\n                    {\n                        Url = \"/sctr/css/simple-image.min.css\",\n                        Environment = \"any\",\n                        Sort = 2\n                    }\n                },\n                RenderScripts = new List<ScriptFile>()\n                {\n\n                }\n\n            };\n\n            return template;\n\n        }\n\n        private ContentTemplate BuildListOfLinks()\n        {\n            var template = new ContentTemplate()\n            {\n                Key = \"sct-ListOfLinks\",\n                Title = _sr[\"A list of links with optional thumbnail per link and content above and below.\"],\n                Description = _sr[\"This is a simple non-paginated list, suitable for modestly sized lists that can fit on a single page.\"],\n                EditView = \"ContentTemplates/ListOfLinksEdit\",\n                RenderView = \"ContentTemplates/ListOfLinksRender\",\n                //DynamicRenderPartialView = \"LinksRenderPartial\",\n                ScreenshotUrl = \"\",\n                ProjectId = \"*\",\n                AvailableForFeature = \"*\",\n                Enabled = true,\n                ModelType = \"cloudscribe.SimpleContent.ContentTemplates.ViewModels.ListWithContentModel, cloudscribe.SimpleContent.ContentTemplates.Bootstrap5\",\n                FormParserName = \"DefaultModelFormParser\",\n                SerializerName = \"Json\",\n                ValidatorName = \"DefaultTemplateModelValidator\",\n                GroupSort1 = \"555555\",\n                GroupSort2 = \"555500\",\n\n                EditCss = new List<CssFile>()\n                {\n                    new CssFile\n                    {\n                        Url = \"/cr/css/dropzone.min.css\",\n                        Environment = \"any\",\n                        Sort = 1\n                    },\n                    new CssFile\n                    {\n                        Url = \"/cr/css/croppie.min.css\",\n                        Environment = \"any\",\n                        Sort = 2\n                    },\n                    new CssFile\n                    {\n                        Url = \"/cr/css/croppie-cloudscribe.css\",\n                        Environment = \"any\",\n                        Sort = 3\n                    }\n                },\n                EditScripts = new List<ScriptFile>()\n                {\n                    new ScriptFile()\n                    {\n                        Url = \"/cr/js/dropzone.min.js\",\n                        Environment = \"any\",\n                        Sort = 1\n                    },\n                    new ScriptFile()\n                    {\n                        Url = \"/cr/js/croppie.min.js\",\n                        Environment = \"any\",\n                        Sort = 2\n                    },\n                    new ScriptFile()\n                    {\n                        Url = \"/filemanager/js/cloudscribe-unobtrusive-file-drop.min.js\",\n                        Environment = \"any\",\n                        Sort = 3\n                    },\n                    new ScriptFile()\n                    {\n                        Url = \"/cr/js/knockout-3.4.2.js\",\n                        Environment = \"any\",\n                        Sort = 4\n                    },\n                    new ScriptFile()\n                    {\n                        Url = \"/sctr/js/cst-link-list.min.js\",\n                        Environment = \"any\",\n                        Sort = 5\n                    }\n                    //new ScriptFile()\n                    //{\n                    //    Url = \"/js/cst-link-list.js\",\n                    //    Environment = \"any\",\n                    //    Sort = 5\n                    //}\n                },\n                \n                RenderCss = new List<CssFile>()\n                {\n\n                },\n                RenderScripts = new List<ScriptFile>()\n                {\n\n                }\n                \n            };\n\n            return template;\n\n        }\n\n   \n\n        private ContentTemplate BuildEverythingTemplate()\n        {\n            var template = new ContentTemplate()\n            {\n                Key = \"sct-EverythingTemplate\",\n                Title = _sr[\"Flexible complex page template\"],\n                Description = _sr[\"1 to 4 optional top sections, an optional image gallery in the middle and 1 - 4 optional bottom sections\"],\n                EditView = \"ContentTemplates/EverythingEdit\",\n                RenderView = \"ContentTemplates/EverythingRender\",\n\n                ScreenshotUrl = \"\",\n                ProjectId = \"*\",\n                AvailableForFeature = \"*\",\n                Enabled = true,\n                ModelType = \"cloudscribe.SimpleContent.ContentTemplates.ViewModels.EverythingModel, cloudscribe.SimpleContent.ContentTemplates.Bootstrap5\",\n                FormParserName = \"DefaultModelFormParser\",\n                SerializerName = \"Json\",\n                ValidatorName = \"DefaultTemplateModelValidator\",\n                GroupSort1 = \"555555\",\n                GroupSort2 = \"555600\",\n\n                EditCss = new List<CssFile>()\n                {\n                    new CssFile\n                    {\n                        Url = \"/cr/css/dropzone.min.css\",\n                        Environment = \"any\",\n                        Sort = 1\n                    },\n                    new CssFile\n                    {\n                        Url = \"/cr/css/croppie.min.css\",\n                        Environment = \"any\",\n                        Sort = 2\n                    },\n                    new CssFile\n                    {\n                        Url = \"/cr/css/croppie-cloudscribe.css\",\n                        Environment = \"any\",\n                        Sort = 3\n                    }\n                },\n                EditScripts = new List<ScriptFile>()\n                {\n                    new ScriptFile()\n                    {\n                        Url = \"/cr/js/dropzone.min.js\",\n                        Environment = \"any\",\n                        Sort = 1\n                    },\n                    new ScriptFile()\n                    {\n                        Url = \"/cr/js/croppie.min.js\",\n                        Environment = \"any\",\n                        Sort = 2\n                    },\n                    new ScriptFile()\n                    {\n                        Url = \"/filemanager/js/cloudscribe-unobtrusive-file-drop.min.js\",\n                        //Url = \"/js/cloudscribe-unobtrusive-file-drop.js\",\n                        Environment = \"any\",\n                        Sort = 3\n                    },\n                    new ScriptFile()\n                    {\n                        Url = \"/cr/js/knockout-3.4.2.js\",\n                        Environment = \"any\",\n                        Sort = 4\n                    },\n                    new ScriptFile()\n                    {\n                        Url = \"/sctr/js/cst-basic-list.min.js\",\n                         //Url = \"/js/cst-basic-list.js\",\n                        Environment = \"any\",\n                        Sort = 5\n                    }\n                },\n\n                RenderCss = new List<CssFile>()\n                {\n                    new CssFile\n                    {\n                        Url = \"/cr/css/baguetteBox.min.css\",\n                        Environment = \"any\",\n                        Sort = 3\n                    },\n                    new CssFile\n                    {\n                        Url = \"/sctr/css/simple-gallery.min.css\",\n                        Environment = \"any\",\n                        Sort = 4\n                    },\n                    new CssFile\n                    {\n                        Url = \"/sctr/css/simple-image.min.css\",\n                        Environment = \"any\",\n                        Sort = 5\n                    }\n                },\n                RenderScripts = new List<ScriptFile>()\n                {\n                    new ScriptFile()\n                    {\n                        Url = \"/cr/js/baguetteBox.min.js\",\n                        Environment = \"any\",\n                        Sort = 2\n                    },\n                    new ScriptFile()\n                    {\n                        Url = \"/sctr/js/simple-gallery.js\",\n                        Environment = \"any\",\n                        Sort = 3\n                    }\n                }\n\n            };\n\n            return template;\n\n        }\n\n\n        private ContentTemplate BuildUnauthenticatedContent()\n        {\n            var template = new ContentTemplate()\n            {\n                Key = \"sct-RoleBasedContent\",\n                Title = _sr[\"Role based content\"],\n                Description = _sr[\"Render different content depending on whether the user is authenticated, unauthenticated, or in a particular role\"],\n                EditView = \"ContentTemplates/RoleBasedContentEdit\",\n                RenderView = \"ContentTemplates/RoleBasedContentRender\",\n                DynamicRenderPartialView = \"RoleBasedContentRenderPartial\",\n                ScreenshotUrl = \"\",\n                ProjectId = \"*\",\n                AvailableForFeature = \"*\",\n                Enabled = true,\n                ModelType = \"cloudscribe.SimpleContent.ContentTemplates.ViewModels.RoleBasedContentViewModel, cloudscribe.SimpleContent.ContentTemplates.Bootstrap5\",\n                FormParserName = \"DefaultModelFormParser\",\n                SerializerName = \"Json\",\n                ValidatorName = \"DefaultTemplateModelValidator\",\n                GroupSort1 = \"555555\",\n                GroupSort2 = \"555650\",\n\n                EditCss = new List<CssFile>()\n                {\n                },\n                EditScripts = new List<ScriptFile>()\n                {\n                },\n\n                RenderCss = new List<CssFile>()\n                {\n                },\n                RenderScripts = new List<ScriptFile>()\n                {\n                }\n\n            };\n            return template;\n        }\n\n\n        private ContentTemplate BuildBingLocationMap()\n        {\n            var template = new ContentTemplate()\n            {\n                Key = \"sct-bing-location-map\",\n                Title = _sr[\"Bing address location map with content above and below\"],\n                Description = _sr[\"The map will be centered on the address you provide and users can get directions to the location. Optional content can be provided above and below the map. Requires a Bing Maps API key.\"],\n                EditView = \"ContentTemplates/BingMapEdit\",\n                RenderView = \"ContentTemplates/BingMapRender\",\n                ModelType = \"cloudscribe.SimpleContent.ContentTemplates.ViewModels.BingMapViewModel, cloudscribe.SimpleContent.ContentTemplates.Bootstrap5\",\n                ScreenshotUrl = \"\",\n                ProjectId = \"*\",\n                AvailableForFeature = \"Page\",\n                Enabled = true,\n                FormParserName = \"DefaultModelFormParser\",\n                SerializerName = \"Json\",\n                ValidatorName = \"DefaultTemplateModelValidator\",\n                GroupSort1 = \"555555\",\n                GroupSort2 = \"555700\",\n\n                EditCss = new List<CssFile>()\n                {\n                    \n                },\n                EditScripts = new List<ScriptFile>()\n                {\n                    \n                },\n\n                RenderCss = new List<CssFile>()\n                {\n\n                },\n                RenderScripts = new List<ScriptFile>()\n                {\n                    new ScriptFile()\n                    {\n                        Url = \"/cr/js/cloudscribe-unobtrusive-bing-location-map.min.js\",\n                        Environment = \"any\",\n                        Sort = 1\n                    }\n                }\n\n            };\n\n            return template;\n\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.ContentTemplates.Bootstrap5/StartupExtensions.cs",
    "content": "﻿using cloudscribe.SimpleContent.ContentTemplates.Bootstrap5;\nusing cloudscribe.SimpleContent.ContentTemplates.Configuration;\nusing cloudscribe.SimpleContent.ContentTemplates.Services;\nusing cloudscribe.SimpleContent.Models;\nusing cloudscribe.Versioning;\nusing Microsoft.Extensions.Configuration;\nusing Microsoft.Extensions.DependencyInjection.Extensions;\n\nnamespace Microsoft.Extensions.DependencyInjection\n{\n    public static class StartupExtensions\n    {\n        public static IServiceCollection AddContentTemplatesForSimpleContent(\n           this IServiceCollection services,\n           IConfiguration configuration\n           )\n        {\n            services.AddSingleton<IContentTemplateProvider, ContentTemplateProvider>();\n\n            services.Configure<GalleryOptions>(configuration.GetSection(\"ContentTemplateSettings:GalleryOptions\"));\n            services.TryAddScoped<IGalleryOptionsProvider, ConfigGalleryOptionsProvider>();\n\n            services.Configure<LinkListOptions>(configuration.GetSection(\"ContentTemplateSettings:LinkListOptions\"));\n            services.TryAddScoped<ILinkListOptionsProvider, ConfigLinkListOptionsProvider>();\n\n            services.Configure<ColumnTemplateOptions>(configuration.GetSection(\"ContentTemplateSettings:ColumnTemplateOptions\"));\n            services.TryAddScoped<IColumnTemplateOptionsProvider, ConfigColumnTemplateOptionsProvider>();\n\n            services.Configure<ImageWithContentOptions>(configuration.GetSection(\"ContentTemplateSettings:ImageWithContentOptions\"));\n            services.TryAddScoped<IImageWithContentOptionsProvider, ConfigImageWithContentOptionsProvider>();\n            services.AddScoped<IVersionProvider, VersionProvider>();\n\n\n\n            return services;\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.ContentTemplates.Bootstrap5/VersionProvider.cs",
    "content": "﻿using cloudscribe.Versioning;\nusing cloudscribe.Web.Common;\nusing System;\nusing System.Reflection;\n\nnamespace cloudscribe.SimpleContent.ContentTemplates.Bootstrap5\n{\n    public class VersionProvider : IVersionProvider\n    {\n        private Assembly assembly = typeof(ContentTemplateResources).Assembly;\n\n        public string Name\n        {\n            get { return assembly.GetName().Name; }\n\n        }\n\n        public Guid ApplicationId { get { return new Guid(\"f94167b4-919d-4910-acd1-4b3b1c210ecf\"); } }\n\n        public Version CurrentVersion\n        {\n\n            get\n            {\n\n                var version = new Version(2, 0, 0, 0);\n                var versionString = typeof(CloudscribeCommonResources).Assembly.GetCustomAttribute<AssemblyFileVersionAttribute>().Version;\n                if (!string.IsNullOrWhiteSpace(versionString))\n                {\n                    Version.TryParse(versionString, out version);\n                }\n\n                return version;\n            }\n        }\n    }\n}"
  },
  {
    "path": "src/cloudscribe.SimpleContent.ContentTemplates.Bootstrap5/ViewModels/BingMapViewModel.cs",
    "content": "﻿using System.ComponentModel.DataAnnotations;\n\nnamespace cloudscribe.SimpleContent.ContentTemplates.ViewModels\n{\n    public class BingMapViewModel\n    {\n        [Required(ErrorMessage = \"You must provide a Bing Map API key\")]\n        public string ApiKey { get; set; }\n\n        [Required(ErrorMessage = \"You must provide a location name\")]\n        public string LocationName { get; set; }\n\n        [Required(ErrorMessage = \"You must provide a location address\")]\n        public string LocationAddress { get; set; }\n\n        public string ContentAbove { get; set; }\n        public string ContentBelow { get; set; }\n\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.ContentTemplates.Bootstrap5/ViewModels/EverythingModel.cs",
    "content": "﻿using cloudscribe.SimpleContent.ContentTemplates.ViewModels;\nusing System.Collections.Generic;\nusing System.ComponentModel.DataAnnotations;\n\nnamespace cloudscribe.SimpleContent.ContentTemplates.ViewModels\n{\n    public class EverythingModel\n    {\n        public EverythingModel()\n        {\n            Items = new List<ListItemModel>();\n        }\n\n        public List<ListItemModel> Items { get; set; }\n\n        public string TopSectionsLayout { get; set; } = \"EverythingTopColumnsPartial\";\n        public string BottomSectionsLayout { get; set; } = \"EverythingBottomColumnsPartial\";\n\n        public string GalleryLayout { get; set; } = \"EverythingCardsPartial\";\n\n        [Required(ErrorMessage = \"Carousel Interval is required.\")]\n        public int CarouselIntervalInMilliseconds { get; set; } = 5000;\n\n        //top sections\n\n        public string SectionOneHeading { get; set; }\n        public string SectionOneContent { get; set; }\n        public string SectionOneResizedUrl { get; set; }\n        public string SectionOneFullSizeUrl { get; set; }\n        public string SectionOneAltText { get; set; }\n\n\n        public string SectionTwoHeading { get; set; }\n        public string SectionTwoContent { get; set; }\n        public string SectionTwoResizedUrl { get; set; }\n        public string SectionTwoFullSizeUrl { get; set; }\n        public string SectionTwoAltText { get; set; }\n\n        public string SectionThreeHeading { get; set; }\n        public string SectionThreeContent { get; set; }\n        public string SectionThreeResizedUrl { get; set; }\n        public string SectionThreeFullSizeUrl { get; set; }\n        public string SectionThreeAltText { get; set; }\n\n        public string SectionFourHeading { get; set; }\n        public string SectionFourContent { get; set; }\n        public string SectionFourResizedUrl { get; set; }\n        public string SectionFourFullSizeUrl { get; set; }\n        public string SectionFourAltText { get; set; }\n\n        //bottom sections\n\n        public string SectionFiveHeading { get; set; }\n        public string SectionFiveContent { get; set; }\n        public string SectionFiveResizedUrl { get; set; }\n        public string SectionFiveFullSizeUrl { get; set; }\n        public string SectionFiveAltText { get; set; }\n\n\n        public string SectionSixHeading { get; set; }\n        public string SectionSixContent { get; set; }\n        public string SectionSixResizedUrl { get; set; }\n        public string SectionSixFullSizeUrl { get; set; }\n        public string SectionSixAltText { get; set; }\n\n        public string SectionSevenHeading { get; set; }\n        public string SectionSevenContent { get; set; }\n        public string SectionSevenResizedUrl { get; set; }\n        public string SectionSevenFullSizeUrl { get; set; }\n        public string SectionSevenAltText { get; set; }\n\n        public string SectionEightHeading { get; set; }\n        public string SectionEightContent { get; set; }\n        public string SectionEightResizedUrl { get; set; }\n        public string SectionEightFullSizeUrl { get; set; }\n        public string SectionEightAltText { get; set; }\n\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.ContentTemplates.Bootstrap5/ViewModels/ImageWithContentViewModel.cs",
    "content": "﻿namespace cloudscribe.SimpleContent.ContentTemplates.ViewModels\n{\n    public class ImageWithContentViewModel\n    {\n        public string Content { get; set; }\n        public string ResizedUrl { get; set; }\n        public string FullSizeUrl { get; set; }\n        public string AltText { get; set; }\n        public string Layout { get; set; } = \"ImageOnLeft\"; // or ImageOnRight\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.ContentTemplates.Bootstrap5/ViewModels/ListWithContentModel.cs",
    "content": "﻿using System.Collections.Generic;\n\nnamespace cloudscribe.SimpleContent.ContentTemplates.ViewModels\n{\n    public class ListWithContentModel\n    {\n        public ListWithContentModel()\n        {\n            Items = new List<ListItemModel>();\n        }\n\n        public string ContentAbove { get; set; }\n        public string ContentBelow { get; set; }\n\n        public List<ListItemModel> Items { get; set; }\n    }\n\n    public class ListItemModel\n    {\n        public string FullSizeUrl { get; set; }\n        public string ResizedUrl { get; set; }\n        public string ThumbnailUrl { get; set; }\n        public string LinkUrl { get; set; }\n\n        public string Title { get; set; }\n        public string Description { get; set; }\n        public string AltText { get; set; } \n\n        public int Sort { get; set; } = 3;\n\n        public bool OpensInNewWindow { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.ContentTemplates.Bootstrap5/ViewModels/RoleBasedContentViewModel.cs",
    "content": "﻿namespace cloudscribe.SimpleContent.ContentTemplates.ViewModels\n{\n    public class RoleBasedContentViewModel\n    {\n        public string AuthenticatedContent { get; set; }\n        public string UnauthenticatedContent { get; set; }\n        public string RoleBasedContent { get; set; }\n        public string Roles { get; set; }\n        public bool RoleContentReplacesAuthenticatedContent { get; set; } = false;\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.ContentTemplates.Bootstrap5/ViewModels/SectionsWithImageViewModel.cs",
    "content": "﻿namespace cloudscribe.SimpleContent.ContentTemplates.ViewModels\n{\n    public class SectionsWithImageViewModel\n    {\n        public string Layout { get; set; } = \"SectionsWithImageRenderColumnsPartial\";\n\n        public string SectionOneHeading { get; set; }\n        public string SectionOneContent { get; set; }\n        public string SectionOneResizedUrl { get; set; }\n        public string SectionOneFullSizeUrl { get; set; }\n        public string SectionOneAltText { get; set; }\n\n\n        public string SectionTwoHeading { get; set; }\n        public string SectionTwoContent { get; set; }\n        public string SectionTwoResizedUrl { get; set; }\n        public string SectionTwoFullSizeUrl { get; set; }\n        public string SectionTwoAltText { get; set; }\n\n        public string SectionThreeHeading { get; set; }\n        public string SectionThreeContent { get; set; }\n        public string SectionThreeResizedUrl { get; set; }\n        public string SectionThreeFullSizeUrl { get; set; }\n        public string SectionThreeAltText { get; set; }\n\n        public string SectionFourHeading { get; set; }\n        public string SectionFourContent { get; set; }\n        public string SectionFourResizedUrl { get; set; }\n        public string SectionFourFullSizeUrl { get; set; }\n        public string SectionFourAltText { get; set; }\n\n\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.ContentTemplates.Bootstrap5/ViewModels/SimpleGalleryViewModel.cs",
    "content": "﻿using System.ComponentModel.DataAnnotations;\n\nnamespace cloudscribe.SimpleContent.ContentTemplates.ViewModels\n{\n    public class SimpleGalleryViewModel : ListWithContentModel\n    {\n        public string Layout { get; set; } = \"GalleryWithContentRenderCardsPartial\";\n\n        [Required(ErrorMessage = \"Carousel Interval is required.\")]\n        public int CarouselIntervalInMilliseconds { get; set; } = 5000;\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.ContentTemplates.Bootstrap5/Views/Shared/ContentTemplates/BingMapEdit.cshtml",
    "content": "﻿@model cloudscribe.SimpleContent.ContentTemplates.ViewModels.BingMapViewModel\n@using cloudscribe.SimpleContent.ContentTemplates\n@inject IStringLocalizer<ContentTemplateResources> sr\n@inject ISummernoteOptionsResolver summernoteOptionsResolver\n@inject ICkeditorOptionsResolver editorOptionsResolver\n@{\n    var summernoteOptions = await summernoteOptionsResolver.GetSummernoteOptions();\n    var ckOptions = await editorOptionsResolver.GetCkeditorOptions();\n}\n\n\n<ul class=\"nav nav-tabs\" role=\"tablist\">\n    <li id=\"cedit-tab1\" class=\"nav-item\">\n        <a class=\"nav-link active\" href=\"#tabMain\" data-bs-toggle=\"tab\">@sr[\"Map\"]</a>\n    </li>\n    <li id=\"cedit-tab2\" class=\"nav-item\">\n        <a class=\"nav-link\" href=\"#tabTopContent\" data-bs-toggle=\"tab\">@sr[\"Top Content\"]</a>\n    </li>\n    <li id=\"cedit-tab3\" class=\"nav-item\">\n        <a class=\"nav-link\" href=\"#tabBottomContent\" data-bs-toggle=\"tab\">@sr[\"Bottom Content\"]</a>\n    </li>\n</ul>\n<div class=\"tab-content\">\n    <div class=\"tab-pane pt-2 active\" id=\"tabMain\" role=\"tabpanel\" aria-labelledby=\"cedit-tab1\">\n\n        <div class=\"mb-3\">\n            <label asp-for=\"LocationName\" class=\"control-label\">@sr[\"Location Name\"]</label>\n            <input asp-for=\"LocationName\" class=\"form-control\" />\n            <span asp-validation-for=\"LocationName\" class=\"invalid-feedback\"></span>\n        </div>\n        <div class=\"mb-3\">\n            <label asp-for=\"LocationAddress\" class=\"control-label\">@sr[\"Location Address\"]</label>\n            <input asp-for=\"LocationAddress\" class=\"form-control\" />\n            <span asp-validation-for=\"LocationAddress\" class=\"invalid-feedback\"></span>\n        </div>\n        <div class=\"mb-3\">\n            <label asp-for=\"ApiKey\" class=\"control-label\">@sr[\"Bing Map Api Key\"]</label>\n            <input asp-for=\"ApiKey\" class=\"form-control\" />\n            <span asp-validation-for=\"ApiKey\" class=\"invalid-feedback\"></span>\n            <p><a href=\"https://www.microsoft.com/en-us/maps/create-a-bing-maps-key\" target=\"_blank\">@sr[\"Get a Bing Map API Key\"]</a></p>\n        </div>\n\n\n    </div>\n    <div class=\"tab-pane pt-2\" id=\"tabTopContent\" role=\"tabpanel\" aria-labelledby=\"cedit-tab2\">\n        <textarea asp-for=\"ContentAbove\" rows=\"5\" class=\"form-control\"\n            data-summernote-unobtrusive=\"\"\n            data-summernote-config-url=\"@summernoteOptions.CustomConfigPath\"\n            data-summernote-toolbar-config-url=\"@summernoteOptions.CustomToolbarConfigPath\"\n            data-summernote-config-language=\"@summernoteOptions.LanguageCode\"\n            data-summernote-config-dropfileuploadurl=\"@summernoteOptions.DropFileUrl\"\n            data-summernote-config-filebrowserurl=\"@summernoteOptions.FileBrowseUrl\"\n            data-summernote-config-imagebrowseurl=\"@summernoteOptions.ImageBrowseUrl\">\n        </textarea>\n    </div>\n    <div class=\"tab-pane pt-2\" id=\"tabBottomContent\" role=\"tabpanel\" aria-labelledby=\"cedit-tab3\">\n        <textarea asp-for=\"ContentBelow\" rows=\"5\" class=\"form-control\"\n            data-summernote-unobtrusive=\"\"\n            data-summernote-config-url=\"@summernoteOptions.CustomConfigPath\"\n            data-summernote-toolbar-config-url=\"@summernoteOptions.CustomToolbarConfigPath\"\n            data-summernote-config-language=\"@summernoteOptions.LanguageCode\"\n            data-summernote-config-dropfileuploadurl=\"@summernoteOptions.DropFileUrl\"\n            data-summernote-config-filebrowserurl=\"@summernoteOptions.FileBrowseUrl\"\n            data-summernote-config-imagebrowseurl=\"@summernoteOptions.ImageBrowseUrl\">\n        </textarea>\n    </div>\n</div>\n<div id=\"fileBrowseDialog\" class=\"modal fade\" tabindex=\"-1\" role=\"dialog\">\n    <div class=\"modal-dialog modal-lg\" style=\"height:99%;min-width:99%!important;\">\n        <div class=\"modal-content\">\n            <div class=\"modal-header\">\n                <button type=\"button\" data-bs-dismiss=\"modal\" class=\"btn-close\" aria-label=\"Close\"></button>\n            </div>\n            <iframe id=\"frFileDialog\" frameborder=\"0\" style=\"overflow:hidden;height:100%;width:100%;min-height: 650px;\"></iframe>\n        </div>\n    </div>\n</div>\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.ContentTemplates.Bootstrap5/Views/Shared/ContentTemplates/BingMapRender.cshtml",
    "content": "﻿@model cloudscribe.SimpleContent.ContentTemplates.ViewModels.BingMapViewModel\n@using cloudscribe.SimpleContent.ContentTemplates\n@inject IStringLocalizer<ContentTemplateResources> sr\n@{\n    Layout = \"_LayoutEmpty\";\n}\n<div class=\"content-top\">\n    @Html.Raw(Model.ContentAbove)\n</div>\n@if (!string.IsNullOrWhiteSpace(Model.ApiKey))\n{\n    <div id=\"bingMap1\" class='bingMap' style=\"width: 100%;height: 400px;\"\n            data-bing-map=\"\"\n            data-location-title=\"@Model.LocationName\"\n            data-address=\"@Model.LocationAddress\"\n            data-directions-element-id=\"bingMap1Directions\"\n            data-itinerary-element-id=\"bingMap1Itinerary\"\n            data-from-address-element-id=\"bingMap1FromAddress\"\n            data-get-directions-button-id=\"bingMap1GetDirectionsButton\"></div>\n        \n    <div id=\"bingMap1Directions\" class=\"map-directions mt-2 mb-2\">\n        <div class=\"mb-3\">\n            <input id=\"bingMap1FromAddress\" type=\"text\" class=\"form-control\" placeholder=\"From Address\" />\n        </div>\n        <button id=\"bingMap1GetDirectionsButton\" type=\"button\" class=\"btn btn-primary\">@sr[\"Get Directions\"]</button>\n        <a href=\"javascript:window.location.reload(true)\">@sr[\"Clear\"]</a>\n    </div>\n    <div id='bingMap1Itinerary'></div>  \n}\n<div class=\"content-bottom\">\n    @Html.Raw(Model.ContentBelow)\n</div>\n@if (!string.IsNullOrWhiteSpace(Model.ApiKey))\n{\n    <script type='text/javascript' src='https://www.bing.com/api/maps/mapcontrol?callback=loadMapScenario&key=@Model.ApiKey' async defer></script>\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.ContentTemplates.Bootstrap5/Views/Shared/ContentTemplates/EverythingEdit.cshtml",
    "content": "﻿@model cloudscribe.SimpleContent.ContentTemplates.ViewModels.EverythingModel\n@using cloudscribe.SimpleContent.ContentTemplates\n@using cloudscribe.SimpleContent.ContentTemplates.Configuration\n@using Microsoft.AspNetCore.Antiforgery\n@using Newtonsoft.Json;\n@using System.Net\n@inject IStringLocalizer<ContentTemplateResources> sr\n@inject IAntiforgery antiforgery\n@inject ISummernoteOptionsResolver summernoteOptionsResolver\n@inject ICkeditorOptionsResolver editorOptionsResolver\n@inject IColumnTemplateOptionsProvider optionsProvider\n@inject IGalleryOptionsProvider galleryOptionsProvider\n@{\n    var tokens = antiforgery.GetAndStoreTokens(Context);\n    var summernoteOptions = await summernoteOptionsResolver.GetSummernoteOptions();\n    var ckOptions = await editorOptionsResolver.GetCkeditorOptions();\n    var options = await optionsProvider.ResolveColumnTemplateOptions(Context.Request.Host.Host, Context.Request.Path);\n    var sorted = Model.Items.OrderBy(x => x.Sort).ToList();\n    int i = 1;\n    foreach (var item in sorted)\n    {\n        item.Sort = i;\n        i += 2;\n    }\n    var itemsJson = WebUtility.UrlEncode(JsonConvert.SerializeObject(sorted, Formatting.None, new JsonSerializerSettings { DefaultValueHandling = DefaultValueHandling.Include, }));\n    var galleryOptions = await galleryOptionsProvider.ResolveGalleryOptions(Context.Request.Host.Host, Context.Request.Path);\n\n}\n@functions{\n    public string GetImageUrl(string imageUrl)\n    {\n        if (!string.IsNullOrWhiteSpace(imageUrl)) { return imageUrl; }\n        return \"/cr/images/690x517-placeholder.png\";\n    }\n}\n<p>@sr[\"Sections with no content body will not be shown even if they have images.\"]</p>\n<partial name=\"EverythingTopSectionsLayoutSelector\" model=\"Model\" />\n<partial name=\"EverythingBottomSectionsLayoutSelector\" model=\"Model\" />\n<ul class=\"nav nav-tabs\" id=\"myTab\" role=\"tablist\">\n    <li class=\"nav-item\">\n        <a id=\"cedit-tab1\" class=\"nav-link active\" href=\"#tabCol1\" data-bs-toggle=\"tab\" role=\"tab\" aria-controls=\"tabCol1\" aria-selected=\"true\">@sr[\"Section 1\"]</a>\n    </li>\n    <li class=\"nav-item\">\n        <a id=\"cedit-tab2\" class=\"nav-link\" href=\"#tabCol2\" data-bs-toggle=\"tab\" role=\"tab\" aria-controls=\"tabCol2\" aria-selected=\"false\">@sr[\"Section 2\"]</a>\n    </li>\n    <li class=\"nav-item\">\n        <a id=\"cedit-tab3\" class=\"nav-link\" href=\"#tabCol3\" data-bs-toggle=\"tab\" role=\"tab\" aria-controls=\"tabCol3\" aria-selected=\"false\">@sr[\"Section 3\"]</a>\n    </li>\n    <li class=\"nav-item\">\n        <a id=\"cedit-tab4\" class=\"nav-link\" href=\"#tabCol4\" data-bs-toggle=\"tab\" role=\"tab\" aria-controls=\"tabCol4\" aria-selected=\"false\">@sr[\"Section 4\"]</a>\n    </li>\n\n    <li class=\"nav-item\">\n        <a id=\"cedit-tabgal\" class=\"nav-link\" href=\"#tabGallery\" data-bs-toggle=\"tab\" role=\"tab\" aria-controls=\"tabGallery\" aria-selected=\"true\">@sr[\"Gallery\"]</a>\n    </li>\n\n    <li class=\"nav-item\">\n        <a id=\"cedit-tab5\" class=\"nav-link\" href=\"#tabCol5\" data-bs-toggle=\"tab\" role=\"tab\" aria-controls=\"tabCol5\" aria-selected=\"true\">@sr[\"Section 5\"]</a>\n    </li>\n    <li class=\"nav-item\">\n        <a id=\"cedit-tab6\" class=\"nav-link\" href=\"#tabCol6\" data-bs-toggle=\"tab\" role=\"tab\" aria-controls=\"tabCol6\" aria-selected=\"false\">@sr[\"Section 6\"]</a>\n    </li>\n    <li class=\"nav-item\">\n        <a id=\"cedit-tab7\" class=\"nav-link\" href=\"#tabCol7\" data-bs-toggle=\"tab\" role=\"tab\" aria-controls=\"tabCol7\" aria-selected=\"false\">@sr[\"Section 7\"]</a>\n    </li>\n    <li class=\"nav-item\">\n        <a id=\"cedit-tab8\" class=\"nav-link\" href=\"#tabCol8\" data-bs-toggle=\"tab\" role=\"tab\" aria-controls=\"tabCol8\" aria-selected=\"false\">@sr[\"Section 8\"]</a>\n    </li>\n\n</ul>\n<div id=\"myTabContent\" class=\"tab-content\">\n\n    <div class=\"tab-pane active\" id=\"tabCol1\" role=\"tabpanel\" aria-labelledby=\"cedit-tab1\">\n        <div class=\"d-flex align-items-stretch\">\n            <div class=\"cs-crop-container\">\n                <img id=\"dz1Image\" style=\"max-width:690px;\" src=\"@GetImageUrl(Model.SectionOneResizedUrl)\" />\n            </div>\n            <div class=\"d-flex flex-column\">\n                <div id=\"dz1\" class=\"cloudscribe-dropzone-standalone\" style=\"cursor:pointer;\"\n                     data-dropzone=\"\"\n                     data-upload-url=\"@Url.Action(\"DropFile\", \"FileManager\")\"\n                     data-anti-forgery-token=\"@tokens.RequestToken\"\n                     data-file-browse-url=\"@summernoteOptions.ImageBrowseUrl\"\n                     data-file-crop-url=\"@summernoteOptions.CropFileUrl\"\n                     data-target-path=\"@options.NewImagePath\"\n                     data-create-thumb=\"@options.CreateThumbnails.ToString().ToLower()\"\n                     data-resize-image=\"true\"\n                     data-keep-original=\"@options.KeepOriginalSizeImages.ToString().ToLower()\"\n                     data-enable-browse-server=\"@options.EnableBrowseServer.ToString().ToLower()\"\n                     data-enable-crop=\"@options.EnableCropping.ToString().ToLower()\"\n                     data-accepted-files=\"image/*\"\n                     data-target-fullsize-input-id=\"SectionOneFullSizeUrl\"\n                     data-target-resized-input-id=\"SectionOneResizedUrl\"\n                     data-target-thumb-input-id=\"\"\n                     data-target-fullsize-image-id=\"dz1Image\"\n                     data-target-resized-image-id=\"\"\n                     data-target-thumb-image-id=\"\"\n                     data-fullsize-placeholder-image=\"@options.PlaceholderImageUrl\"\n                     data-resized-placeholder-image=\"\"\n                     data-thumb-placeholder-image=\"\"\n                     data-resize-width=\"@options.ResizeMaxWidth\"\n                     data-resize-height=\"@options.ResizeMaxHeight\"\n                     data-crop-area-width=\"@options.CropAreaWidth\"\n                     data-crop-area-height=\"@options.CropAreaHeight\">\n                    @sr[\"Drop file here or click to browse device for file.\"]\n                </div>\n                <div class=\"ps-1 pt-1\">\n                    <div class=\"d-flex flex-column\">\n                        <button id=\"dz1-browse-server\" type=\"button\" class=\"mb-1 btn btn-primary collapse\">@sr[\"Browse Server\"] <i class=\"fas fa-search\" aria-hidden=\"true\"></i></button>\n                        <button id=\"dz1-save-crop\" type=\"button\" class=\"mb-1 btn btn-primary collapse\">@sr[\"Save Crop\"] <i class=\"far fa-save\" aria-hidden=\"true\"></i></button>\n                    </div>\n                </div>\n            </div>\n        </div>\n        <input asp-for=\"SectionOneFullSizeUrl\" type=\"hidden\" />\n        <input asp-for=\"SectionOneResizedUrl\" type=\"hidden\" />\n        <div class=\"mb-3\">\n            <label asp-for=\"SectionOneAltText\">@sr[\"Image Description\"]</label>\n            <input asp-for=\"SectionOneAltText\" class=\"form-control\" />\n        </div>\n        <div class=\"mb-3\">\n            <label asp-for=\"SectionOneHeading\">@sr[\"Section Heading - optional\"]</label>\n            <input asp-for=\"SectionOneHeading\" class=\"form-control\" />\n        </div>\n        <label asp-for=\"SectionOneContent\">@sr[\"Section 1 Content\"]</label>\n        <textarea asp-for=\"SectionOneContent\" rows=\"5\" class=\"form-control\"\n            data-summernote-unobtrusive=\"\"\n            data-summernote-config-url=\"@summernoteOptions.CustomConfigPath\"\n            data-summernote-toolbar-config-url=\"@summernoteOptions.CustomToolbarConfigPath\"\n            data-summernote-config-language=\"@summernoteOptions.LanguageCode\"\n            data-summernote-config-dropfileuploadurl=\"@summernoteOptions.DropFileUrl\"\n            data-summernote-config-filebrowserurl=\"@summernoteOptions.FileBrowseUrl\"\n            data-summernote-config-imagebrowseurl=\"@summernoteOptions.ImageBrowseUrl\">\n        </textarea>\n    </div>\n\n    <div class=\"tab-pane\" id=\"tabCol2\" role=\"tabpanel\" aria-labelledby=\"cedit-tab2\">\n        <div class=\"d-flex align-items-stretch\">\n            <div class=\"cs-crop-container\">\n                <img id=\"dz2Image\" style=\"max-width:690px;\" src=\"@GetImageUrl(Model.SectionTwoResizedUrl)\" />\n            </div>\n            <div class=\"d-flex flex-column\">\n                <div id=\"dz2\" class=\"cloudscribe-dropzone-standalone\" style=\"cursor:pointer;\"\n                     data-dropzone=\"\"\n                     data-upload-url=\"@Url.Action(\"DropFile\", \"FileManager\")\"\n                     data-anti-forgery-token=\"@tokens.RequestToken\"\n                     data-file-browse-url=\"@summernoteOptions.ImageBrowseUrl\"\n                     data-file-crop-url=\"@summernoteOptions.CropFileUrl\"\n                     data-target-path=\"@options.NewImagePath\"\n                     data-create-thumb=\"@options.CreateThumbnails.ToString().ToLower()\"\n                     data-resize-image=\"true\"\n                     data-keep-original=\"@options.KeepOriginalSizeImages.ToString().ToLower()\"\n                     data-enable-browse-server=\"@options.EnableBrowseServer.ToString().ToLower()\"\n                     data-enable-crop=\"@options.EnableCropping.ToString().ToLower()\"\n                     data-accepted-files=\"image/*\"\n                     data-target-fullsize-input-id=\"SectionTwoFullSizeUrl\"\n                     data-target-resized-input-id=\"SectionTwoResizedUrl\"\n                     data-target-thumb-input-id=\"\"\n                     data-target-fullsize-image-id=\"dz2Image\"\n                     data-target-resized-image-id=\"\"\n                     data-target-thumb-image-id=\"\"\n                     data-fullsize-placeholder-image=\"@options.PlaceholderImageUrl\"\n                     data-resized-placeholder-image=\"\"\n                     data-thumb-placeholder-image=\"\"\n                     data-resize-width=\"@options.ResizeMaxWidth\"\n                     data-resize-height=\"@options.ResizeMaxHeight\"\n                     data-crop-area-width=\"@options.CropAreaWidth\"\n                     data-crop-area-height=\"@options.CropAreaHeight\">\n                    @sr[\"Drop file here or click to browse device for file.\"]\n                </div>\n                <div class=\"ps-1 pt-1\">\n                    <div class=\"d-flex flex-column\">\n                        <button id=\"dz2-browse-server\" type=\"button\" class=\"mb-1 btn btn-primary collapse\">@sr[\"Browse Server\"] <i class=\"fas fa-search\" aria-hidden=\"true\"></i></button>\n                        <button id=\"dz2-save-crop\" type=\"button\" class=\"mb-1 btn btn-primary collapse\">@sr[\"Save Crop\"] <i class=\"far fa-save\" aria-hidden=\"true\"></i></button>\n                    </div>\n                </div>\n            </div>\n        </div>\n        <input asp-for=\"SectionTwoFullSizeUrl\" type=\"hidden\" />\n        <input asp-for=\"SectionTwoResizedUrl\" type=\"hidden\" />\n        <div class=\"mb-3\">\n            <label asp-for=\"SectionTwoAltText\">@sr[\"Image Description\"]</label>\n            <input asp-for=\"SectionTwoAltText\" class=\"form-control\" />\n        </div>\n        <div class=\"mb-3\">\n            <label asp-for=\"SectionTwoHeading\">@sr[\"Section Heading - optional\"]</label>\n            <input asp-for=\"SectionTwoHeading\" class=\"form-control\" />\n        </div>\n        <label asp-for=\"SectionTwoContent\">@sr[\"Section 2 Content\"]</label>\n        <textarea asp-for=\"SectionTwoContent\" rows=\"5\" class=\"form-control\"\n            data-summernote-unobtrusive=\"\"\n            data-summernote-config-url=\"@summernoteOptions.CustomConfigPath\"\n            data-summernote-toolbar-config-url=\"@summernoteOptions.CustomToolbarConfigPath\"\n            data-summernote-config-language=\"@summernoteOptions.LanguageCode\"\n            data-summernote-config-dropfileuploadurl=\"@summernoteOptions.DropFileUrl\"\n            data-summernote-config-filebrowserurl=\"@summernoteOptions.FileBrowseUrl\"\n            data-summernote-config-imagebrowseurl=\"@summernoteOptions.ImageBrowseUrl\">\n        </textarea>\n    </div>\n\n    <div class=\"tab-pane\" id=\"tabCol3\" role=\"tabpanel\" aria-labelledby=\"cedit-tab3\">\n\n        <div class=\"d-flex align-items-stretch\">\n            <div class=\"cs-crop-container\">\n                <img id=\"dz3Image\" style=\"max-width:690px;\" src=\"@GetImageUrl(Model.SectionThreeResizedUrl)\" />\n            </div>\n            <div class=\"d-flex flex-column\">\n                <div id=\"dz3\" class=\"cloudscribe-dropzone-standalone\" style=\"cursor:pointer;\"\n                     data-dropzone=\"\"\n                     data-upload-url=\"@Url.Action(\"DropFile\", \"FileManager\")\"\n                     data-anti-forgery-token=\"@tokens.RequestToken\"\n                     data-file-browse-url=\"@summernoteOptions.ImageBrowseUrl\"\n                     data-file-crop-url=\"@summernoteOptions.CropFileUrl\"\n                     data-target-path=\"@options.NewImagePath\"\n                     data-create-thumb=\"@options.CreateThumbnails.ToString().ToLower()\"\n                     data-resize-image=\"true\"\n                     data-keep-original=\"@options.KeepOriginalSizeImages.ToString().ToLower()\"\n                     data-enable-browse-server=\"@options.EnableBrowseServer.ToString().ToLower()\"\n                     data-enable-crop=\"@options.EnableCropping.ToString().ToLower()\"\n                     data-accepted-files=\"image/*\"\n                     data-target-fullsize-input-id=\"SectionThreeFullSizeUrl\"\n                     data-target-resized-input-id=\"SectionThreeResizedUrl\"\n                     data-target-thumb-input-id=\"\"\n                     data-target-fullsize-image-id=\"dz3Image\"\n                     data-target-resized-image-id=\"\"\n                     data-target-thumb-image-id=\"\"\n                     data-fullsize-placeholder-image=\"@options.PlaceholderImageUrl\"\n                     data-resized-placeholder-image=\"\"\n                     data-thumb-placeholder-image=\"\"\n                     data-resize-width=\"@options.ResizeMaxWidth\"\n                     data-resize-height=\"@options.ResizeMaxHeight\"\n                     data-crop-area-width=\"@options.CropAreaWidth\"\n                     data-crop-area-height=\"@options.CropAreaHeight\">\n                    @sr[\"Drop file here or click to browse device for file.\"]\n                </div>\n                <div class=\"ps-1 pt-1\">\n                    <div class=\"d-flex flex-column\">\n                        <button id=\"dz3-browse-server\" type=\"button\" class=\"mb-1 btn btn-primary collapse\">@sr[\"Browse Server\"] <i class=\"fas fa-search\" aria-hidden=\"true\"></i></button>\n                        <button id=\"dz3-save-crop\" type=\"button\" class=\"mb-1 btn btn-primary collapse\">@sr[\"Save Crop\"] <i class=\"far fa-save\" aria-hidden=\"true\"></i></button>\n                    </div>\n                </div>\n            </div>\n        </div>\n        <input asp-for=\"SectionThreeFullSizeUrl\" type=\"hidden\" />\n        <input asp-for=\"SectionThreeResizedUrl\" type=\"hidden\" />\n        <div class=\"mb-3\">\n            <label asp-for=\"SectionThreeAltText\">@sr[\"Image Description\"]</label>\n            <input asp-for=\"SectionThreeAltText\" class=\"form-control\" />\n        </div>\n        <div class=\"mb-3\">\n            <label asp-for=\"SectionThreeHeading\">@sr[\"Section Heading - optional\"]</label>\n            <input asp-for=\"SectionThreeHeading\" class=\"form-control\" />\n        </div>\n        <label asp-for=\"SectionThreeContent\">@sr[\"Section 3 Content\"]</label>\n        <textarea asp-for=\"SectionThreeContent\" rows=\"5\" class=\"form-control\"\n            data-summernote-unobtrusive=\"\"\n            data-summernote-config-url=\"@summernoteOptions.CustomConfigPath\"\n            data-summernote-toolbar-config-url=\"@summernoteOptions.CustomToolbarConfigPath\"\n            data-summernote-config-language=\"@summernoteOptions.LanguageCode\"\n            data-summernote-config-dropfileuploadurl=\"@summernoteOptions.DropFileUrl\"\n            data-summernote-config-filebrowserurl=\"@summernoteOptions.FileBrowseUrl\"\n            data-summernote-config-imagebrowseurl=\"@summernoteOptions.ImageBrowseUrl\">\n        </textarea>\n    </div>\n\n    <div class=\"tab-pane\" id=\"tabCol4\" role=\"tabpanel\" aria-labelledby=\"cedit-tab4\">\n\n        <div class=\"d-flex align-items-stretch\">\n            <div class=\"cs-crop-container\">\n                <img id=\"dz4Image\" style=\"max-width:690px;\" src=\"@GetImageUrl(Model.SectionFourResizedUrl)\" />\n            </div>\n            <div class=\"d-flex flex-column\">\n                <div id=\"dz4\" class=\"cloudscribe-dropzone-standalone\" style=\"cursor:pointer;\"\n                     data-dropzone=\"\"\n                     data-upload-url=\"@Url.Action(\"DropFile\", \"FileManager\")\"\n                     data-anti-forgery-token=\"@tokens.RequestToken\"\n                     data-file-browse-url=\"@summernoteOptions.ImageBrowseUrl\"\n                     data-file-crop-url=\"@summernoteOptions.CropFileUrl\"\n                     data-target-path=\"@options.NewImagePath\"\n                     data-create-thumb=\"@options.CreateThumbnails.ToString().ToLower()\"\n                     data-resize-image=\"true\"\n                     data-keep-original=\"@options.KeepOriginalSizeImages.ToString().ToLower()\"\n                     data-enable-browse-server=\"@options.EnableBrowseServer.ToString().ToLower()\"\n                     data-enable-crop=\"@options.EnableCropping.ToString().ToLower()\"\n                     data-accepted-files=\"image/*\"\n                     data-target-fullsize-input-id=\"SectionFourFullSizeUrl\"\n                     data-target-resized-input-id=\"SectionFourResizedUrl\"\n                     data-target-thumb-input-id=\"\"\n                     data-target-fullsize-image-id=\"dz4Image\"\n                     data-target-resized-image-id=\"\"\n                     data-target-thumb-image-id=\"\"\n                     data-fullsize-placeholder-image=\"@options.PlaceholderImageUrl\"\n                     data-resized-placeholder-image=\"\"\n                     data-thumb-placeholder-image=\"\"\n                     data-resize-width=\"@options.ResizeMaxWidth\"\n                     data-resize-height=\"@options.ResizeMaxHeight\"\n                     data-crop-area-width=\"@options.CropAreaWidth\"\n                     data-crop-area-height=\"@options.CropAreaHeight\">\n                    @sr[\"Drop file here or click to browse device for file.\"]\n                </div>\n                <div class=\"ps-1 pt-1\">\n                    <div class=\"d-flex flex-column\">\n                        <button id=\"dz4-browse-server\" type=\"button\" class=\"mb-1 btn btn-primary collapse\">@sr[\"Browse Server\"] <i class=\"fas fa-search\" aria-hidden=\"true\"></i></button>\n                        <button id=\"dz4-save-crop\" type=\"button\" class=\"mb-1 btn btn-primary collapse\">@sr[\"Save Crop\"] <i class=\"far fa-save\" aria-hidden=\"true\"></i></button>\n                    </div>\n                </div>\n            </div>\n        </div>\n        <input asp-for=\"SectionFourFullSizeUrl\" type=\"hidden\" />\n        <input asp-for=\"SectionFourResizedUrl\" type=\"hidden\" />\n        <div class=\"mb-3\">\n            <label asp-for=\"SectionFourAltText\">@sr[\"Image Description\"]</label>\n            <input asp-for=\"SectionFourAltText\" class=\"form-control\" />\n        </div>\n        <div class=\"mb-3\">\n            <label asp-for=\"SectionFourHeading\">@sr[\"Section Heading - optional\"]</label>\n            <input asp-for=\"SectionFourHeading\" class=\"form-control\" />\n        </div>\n        <label asp-for=\"SectionFourContent\">@sr[\"Section 4 Content\"]</label>\n        <textarea asp-for=\"SectionFourContent\" rows=\"5\" class=\"form-control\"\n            data-summernote-unobtrusive=\"\"\n            data-summernote-config-url=\"@summernoteOptions.CustomConfigPath\"\n            data-summernote-toolbar-config-url=\"@summernoteOptions.CustomToolbarConfigPath\"\n            data-summernote-config-language=\"@summernoteOptions.LanguageCode\"\n            data-summernote-config-dropfileuploadurl=\"@summernoteOptions.DropFileUrl\"\n            data-summernote-config-filebrowserurl=\"@summernoteOptions.FileBrowseUrl\"\n            data-summernote-config-imagebrowseurl=\"@summernoteOptions.ImageBrowseUrl\">\n        </textarea>\n    </div>\n\n    <div class=\"tab-pane pt-2\" id=\"tabGallery\" role=\"tabpanel\" aria-labelledby=\"cedit-tabgal\">\n        <input id=\"ItemsConfig\" type=\"hidden\" value=\"@itemsJson\" />\n        <input id=\"ItemsJson\" type=\"hidden\" name=\"ItemsJson\" data-bind=\"value: currentListState()\" />\n        <partial name=\"EverythingGalleryLayoutSelector\" model=\"Model\" />\n        <div class=\"mb-3\">\n            <label asp-for=\"CarouselIntervalInMilliseconds\">@sr[\"Carousel slide interval in milliseconds\"]</label>\n            <input asp-for=\"CarouselIntervalInMilliseconds\" class=\"form-control\" />\n            <span asp-validation-for=\"CarouselIntervalInMilliseconds\" class=\"text-danger\"></span>\n        </div>\n        <fieldset class=\"border p-2 mb-2\">\n            <legend class=\"w-auto\">@sr[\"Current Images\"]</legend>\n            <div data-bind=\"visible: Items().length === 0\">\n                @sr[\"No images have been added yet, drop or browse images below to add your first image, then click the button to add it to the gallery.\"]\n            </div>\n            <div id=\"itemsEditList\" style=\"max-width:775px\" data-bind=\"foreach: Items\">\n                <div class=\"row\">\n                    <div class=\"col-3\">\n                        <img style=\"max-width:200px;max-height:150px;\" data-bind=\"attr: { src: ResizedUrl }, visible: ThumbnailUrl !== undefined\" />\n                    </div>\n                    <div class=\"col-8\">\n                        <input class=\"form-control\" title=\"@sr[\"Title\"]\" data-bind=\"value: Title\" placeholder=\"@sr[\"Title\"]\" />\n                        <textarea class=\"form-control\" style=\"height:110px;\" title=\"@sr[\"Description\"]\" placeholder=\"@sr[\"Description\"]\" data-bind=\"value: Description\"></textarea>\n                    </div>\n                    <div class=\"col-1\">\n                        <a href=\"#\" data-bind=\"click: $root.removeItem\" title=\"@sr[\"Delete\"]\"><i class=\"fa fa-trash-o far fa-trash-alt fa-2x\"></i></a> <br /><br />\n                        <a href=\"#\" data-bind=\"click: decrementSort, visible: Sort() > 0\" title=\"@sr[\"Move Up\"]\"><i class=\"fas fa-sort-up fa-2x\"></i></a>\n                        <a href=\"#\" data-bind=\"click: incrementSort\" title=\"@sr[\"Move Down\"]\"><i class=\"fas fa-sort-down fa-2x\"></i></a>\n                    </div>\n                </div>\n            </div>\n        </fieldset>\n        <fieldset class=\"border p-2 mb-2\">\n            <legend class=\"w-auto\">@sr[\"Add New Image\"]</legend>\n            <div class=\"d-flex align-items-stretch\">\n                <div class=\"cs-crop-container\">\n                    <img id=\"dzGalImage\" style=\"max-width:690px;\" src=\"@options.PlaceholderImageUrl\" />\n                </div>\n                <div class=\"d-flex flex-column\">\n                    <div id=\"dzGal\" class=\"cloudscribe-dropzone-standalone\" style=\"cursor:pointer;\"\n                         data-dropzone=\"\"\n                         data-upload-url=\"@Url.Action(\"DropFile\", \"FileManager\")\"\n                         data-anti-forgery-token=\"@tokens.RequestToken\"\n                         data-file-browse-url=\"@summernoteOptions.ImageBrowseUrl\"\n                         data-file-crop-url=\"@summernoteOptions.CropFileUrl\"\n                         data-target-path=\"@galleryOptions.NewImagePath\"\n                         data-create-thumb=\"@galleryOptions.CreateThumbnails.ToString().ToLower()\"\n                         data-resize-image=\"true\"\n                         data-keep-original=\"@galleryOptions.KeepOriginalSizeImages.ToString().ToLower()\"\n                         data-enable-browse-server=\"@galleryOptions.EnableBrowseServer.ToString().ToLower()\"\n                         data-enable-crop=\"@galleryOptions.EnableCropping.ToString().ToLower()\"\n                         data-accepted-files=\"image/*\"\n                         data-target-fullsize-input-id=\"galImgUrlFull\"\n                         data-target-resized-input-id=\"galImgUrlResized\"\n                         data-target-thumb-input-id=\"galImgUrlThumb\"\n                         data-target-fullsize-image-id=\"dzGalImage\"\n                         data-target-resized-image-id=\"\"\n                         data-target-thumb-image-id=\"\"\n                         data-fullsize-placeholder-image=\"@galleryOptions.PlaceholderImageUrl\"\n                         data-resized-placeholder-image=\"\"\n                         data-thumb-placeholder-image=\"\"\n                         data-resize-width=\"@galleryOptions.ResizeMaxWidth\"\n                         data-resize-height=\"@galleryOptions.ResizeMaxHeight\"\n                         data-crop-area-width=\"@options.CropAreaWidth\"\n                         data-crop-area-height=\"@galleryOptions.CropAreaHeight\">\n                        @sr[\"Drop file here or click to browse device for file.\"]\n                    </div>\n                    <div class=\"ps-1 pt-1\">\n                        <div class=\"d-flex flex-column\">\n                            <button id=\"dzGal-browse-server\" type=\"button\" class=\"mb-1 btn btn-primary collapse\">@sr[\"Browse Server\"] <i class=\"fas fa-search\" aria-hidden=\"true\"></i></button>\n                            <button id=\"dzGal-save-crop\" type=\"button\" class=\"mb-1 btn btn-primary collapse\">@sr[\"Save Crop\"] <i class=\"far fa-save\" aria-hidden=\"true\"></i></button>\n                            <button data-bind=\"click: addNewItem, visible: newItemResizedUrl() !== null\" type=\"button\" class=\"mb-1 btn btn-primary\">@sr[\"Add To Gallery\"] <i class=\"fas fa-plus\" aria-hidden=\"true\"></i></button>\n                        </div>\n                    </div>\n                </div>\n            </div>\n            <input id=\"galImgUrlFull\" type=\"hidden\" />\n            <input id=\"galImgUrlResized\" type=\"hidden\" />\n            <input id=\"galImgUrlThumb\" type=\"hidden\" />\n        </fieldset>\n    </div>\n\n    <div class=\"tab-pane\" id=\"tabCol5\" role=\"tabpanel\" aria-labelledby=\"cedit-tab5\">\n        <div class=\"d-flex align-items-stretch\">\n            <div class=\"cs-crop-container\">\n                <img id=\"dz5Image\" style=\"max-width:690px;\" src=\"@GetImageUrl(Model.SectionFiveResizedUrl)\" />\n            </div>\n            <div class=\"d-flex flex-column\">\n                <div id=\"dz5\" class=\"cloudscribe-dropzone-standalone\" style=\"cursor:pointer;\"\n                     data-dropzone=\"\"\n                     data-upload-url=\"@Url.Action(\"DropFile\", \"FileManager\")\"\n                     data-anti-forgery-token=\"@tokens.RequestToken\"\n                     data-file-browse-url=\"@summernoteOptions.ImageBrowseUrl\"\n                     data-file-crop-url=\"@summernoteOptions.CropFileUrl\"\n                     data-target-path=\"@options.NewImagePath\"\n                     data-create-thumb=\"@options.CreateThumbnails.ToString().ToLower()\"\n                     data-resize-image=\"true\"\n                     data-keep-original=\"@options.KeepOriginalSizeImages.ToString().ToLower()\"\n                     data-enable-browse-server=\"@options.EnableBrowseServer.ToString().ToLower()\"\n                     data-enable-crop=\"@options.EnableCropping.ToString().ToLower()\"\n                     data-accepted-files=\"image/*\"\n                     data-target-fullsize-input-id=\"SectionFiveFullSizeUrl\"\n                     data-target-resized-input-id=\"SectionFiveResizedUrl\"\n                     data-target-thumb-input-id=\"\"\n                     data-target-fullsize-image-id=\"dz5Image\"\n                     data-target-resized-image-id=\"\"\n                     data-target-thumb-image-id=\"\"\n                     data-fullsize-placeholder-image=\"@options.PlaceholderImageUrl\"\n                     data-resized-placeholder-image=\"\"\n                     data-thumb-placeholder-image=\"\"\n                     data-resize-width=\"@options.ResizeMaxWidth\"\n                     data-resize-height=\"@options.ResizeMaxHeight\"\n                     data-crop-area-width=\"@options.CropAreaWidth\"\n                     data-crop-area-height=\"@options.CropAreaHeight\">\n                    @sr[\"Drop file here or click to browse device for file.\"]\n                </div>\n                <div class=\"ps-1 pt-1\">\n                    <div class=\"d-flex flex-column\">\n                        <button id=\"dz5-browse-server\" type=\"button\" class=\"mb-1 btn btn-primary collapse\">@sr[\"Browse Server\"] <i class=\"fas fa-search\" aria-hidden=\"true\"></i></button>\n                        <button id=\"dz5-save-crop\" type=\"button\" class=\"mb-1 btn btn-primary collapse\">@sr[\"Save Crop\"] <i class=\"far fa-save\" aria-hidden=\"true\"></i></button>\n                    </div>\n                </div>\n            </div>\n        </div>\n        <input asp-for=\"SectionFiveFullSizeUrl\" type=\"hidden\" />\n        <input asp-for=\"SectionFiveResizedUrl\" type=\"hidden\" />\n        <div class=\"mb-3\">\n            <label asp-for=\"SectionFiveAltText\">@sr[\"Image Description\"]</label>\n            <input asp-for=\"SectionFiveAltText\" class=\"form-control\" />\n        </div>\n        <div class=\"mb-3\">\n            <label asp-for=\"SectionFiveHeading\">@sr[\"Section Heading - optional\"]</label>\n            <input asp-for=\"SectionFiveHeading\" class=\"form-control\" />\n        </div>\n        <label asp-for=\"SectionFiveContent\">@sr[\"Section 5 Content\"]</label>\n        <textarea asp-for=\"SectionFiveContent\" rows=\"5\" class=\"form-control\"\n            data-summernote-unobtrusive=\"\"\n            data-summernote-config-url=\"@summernoteOptions.CustomConfigPath\"\n            data-summernote-toolbar-config-url=\"@summernoteOptions.CustomToolbarConfigPath\"\n            data-summernote-config-language=\"@summernoteOptions.LanguageCode\"\n            data-summernote-config-dropfileuploadurl=\"@summernoteOptions.DropFileUrl\"\n            data-summernote-config-filebrowserurl=\"@summernoteOptions.FileBrowseUrl\"\n            data-summernote-config-imagebrowseurl=\"@summernoteOptions.ImageBrowseUrl\">\n        </textarea>\n    </div>\n\n    <div class=\"tab-pane\" id=\"tabCol6\" role=\"tabpanel\" aria-labelledby=\"cedit-tab6\">\n        <div class=\"d-flex align-items-stretch\">\n            <div class=\"cs-crop-container\">\n                <img id=\"dz6Image\" style=\"max-width:690px;\" src=\"@GetImageUrl(Model.SectionSixResizedUrl)\" />\n            </div>\n            <div class=\"d-flex flex-column\">\n                <div id=\"dz6\" class=\"cloudscribe-dropzone-standalone\" style=\"cursor:pointer;\"\n                     data-dropzone=\"\"\n                     data-upload-url=\"@Url.Action(\"DropFile\", \"FileManager\")\"\n                     data-anti-forgery-token=\"@tokens.RequestToken\"\n                     data-file-browse-url=\"@summernoteOptions.ImageBrowseUrl\"\n                     data-file-crop-url=\"@summernoteOptions.CropFileUrl\"\n                     data-target-path=\"@options.NewImagePath\"\n                     data-create-thumb=\"@options.CreateThumbnails.ToString().ToLower()\"\n                     data-resize-image=\"true\"\n                     data-keep-original=\"@options.KeepOriginalSizeImages.ToString().ToLower()\"\n                     data-enable-browse-server=\"@options.EnableBrowseServer.ToString().ToLower()\"\n                     data-enable-crop=\"@options.EnableCropping.ToString().ToLower()\"\n                     data-accepted-files=\"image/*\"\n                     data-target-fullsize-input-id=\"SectionSixFullSizeUrl\"\n                     data-target-resized-input-id=\"SectionSixResizedUrl\"\n                     data-target-thumb-input-id=\"\"\n                     data-target-fullsize-image-id=\"dz6Image\"\n                     data-target-resized-image-id=\"\"\n                     data-target-thumb-image-id=\"\"\n                     data-fullsize-placeholder-image=\"@options.PlaceholderImageUrl\"\n                     data-resized-placeholder-image=\"\"\n                     data-thumb-placeholder-image=\"\"\n                     data-resize-width=\"@options.ResizeMaxWidth\"\n                     data-resize-height=\"@options.ResizeMaxHeight\"\n                     data-crop-area-width=\"@options.CropAreaWidth\"\n                     data-crop-area-height=\"@options.CropAreaHeight\">\n                    @sr[\"Drop file here or click to browse device for file.\"]\n                </div>\n                <div class=\"ps-1 pt-1\">\n                    <div class=\"d-flex flex-column\">\n                        <button id=\"dz6-browse-server\" type=\"button\" class=\"mb-1 btn btn-primary collapse\">@sr[\"Browse Server\"] <i class=\"fas fa-search\" aria-hidden=\"true\"></i></button>\n                        <button id=\"dz6-save-crop\" type=\"button\" class=\"mb-1 btn btn-primary collapse\">@sr[\"Save Crop\"] <i class=\"far fa-save\" aria-hidden=\"true\"></i></button>\n                    </div>\n                </div>\n            </div>\n        </div>\n        <input asp-for=\"SectionSixFullSizeUrl\" type=\"hidden\" />\n        <input asp-for=\"SectionSixResizedUrl\" type=\"hidden\" />\n        <div class=\"mb-3\">\n            <label asp-for=\"SectionSixAltText\">@sr[\"Image Description\"]</label>\n            <input asp-for=\"SectionSixAltText\" class=\"form-control\" />\n        </div>\n        <div class=\"mb-3\">\n            <label asp-for=\"SectionSixHeading\">@sr[\"Section Heading - optional\"]</label>\n            <input asp-for=\"SectionSixHeading\" class=\"form-control\" />\n        </div>\n        <label asp-for=\"SectionSixContent\">@sr[\"Section 6 Content\"]</label>\n        <textarea asp-for=\"SectionSixContent\" rows=\"5\" class=\"form-control\"\n            data-summernote-unobtrusive=\"\"\n            data-summernote-config-url=\"@summernoteOptions.CustomConfigPath\"\n            data-summernote-toolbar-config-url=\"@summernoteOptions.CustomToolbarConfigPath\"\n            data-summernote-config-language=\"@summernoteOptions.LanguageCode\"\n            data-summernote-config-dropfileuploadurl=\"@summernoteOptions.DropFileUrl\"\n            data-summernote-config-filebrowserurl=\"@summernoteOptions.FileBrowseUrl\"\n            data-summernote-config-imagebrowseurl=\"@summernoteOptions.ImageBrowseUrl\">\n        </textarea>\n    </div>\n\n    <div class=\"tab-pane\" id=\"tabCol7\" role=\"tabpanel\" aria-labelledby=\"cedit-tab7\">\n\n        <div class=\"d-flex align-items-stretch\">\n            <div class=\"cs-crop-container\">\n                <img id=\"dz7Image\" style=\"max-width:690px;\" src=\"@GetImageUrl(Model.SectionSevenResizedUrl)\" />\n            </div>\n            <div class=\"d-flex flex-column\">\n                <div id=\"dz7\" class=\"cloudscribe-dropzone-standalone\" style=\"cursor:pointer;\"\n                     data-dropzone=\"\"\n                     data-upload-url=\"@Url.Action(\"DropFile\", \"FileManager\")\"\n                     data-anti-forgery-token=\"@tokens.RequestToken\"\n                     data-file-browse-url=\"@summernoteOptions.ImageBrowseUrl\"\n                     data-file-crop-url=\"@summernoteOptions.CropFileUrl\"\n                     data-target-path=\"@options.NewImagePath\"\n                     data-create-thumb=\"@options.CreateThumbnails.ToString().ToLower()\"\n                     data-resize-image=\"true\"\n                     data-keep-original=\"@options.KeepOriginalSizeImages.ToString().ToLower()\"\n                     data-enable-browse-server=\"@options.EnableBrowseServer.ToString().ToLower()\"\n                     data-enable-crop=\"@options.EnableCropping.ToString().ToLower()\"\n                     data-accepted-files=\"image/*\"\n                     data-target-fullsize-input-id=\"SectionSevenFullSizeUrl\"\n                     data-target-resized-input-id=\"SectionSevenResizedUrl\"\n                     data-target-thumb-input-id=\"\"\n                     data-target-fullsize-image-id=\"dz7Image\"\n                     data-target-resized-image-id=\"\"\n                     data-target-thumb-image-id=\"\"\n                     data-fullsize-placeholder-image=\"@options.PlaceholderImageUrl\"\n                     data-resized-placeholder-image=\"\"\n                     data-thumb-placeholder-image=\"\"\n                     data-resize-width=\"@options.ResizeMaxWidth\"\n                     data-resize-height=\"@options.ResizeMaxHeight\"\n                     data-crop-area-width=\"@options.CropAreaWidth\"\n                     data-crop-area-height=\"@options.CropAreaHeight\">\n                    @sr[\"Drop file here or click to browse device for file.\"]\n                </div>\n                <div class=\"ps-1 pt-1\">\n                    <div class=\"d-flex flex-column\">\n                        <button id=\"dz7-browse-server\" type=\"button\" class=\"mb-1 btn btn-primary collapse\">@sr[\"Browse Server\"] <i class=\"fas fa-search\" aria-hidden=\"true\"></i></button>\n                        <button id=\"dz7-save-crop\" type=\"button\" class=\"mb-1 btn btn-primary collapse\">@sr[\"Save Crop\"] <i class=\"far fa-save\" aria-hidden=\"true\"></i></button>\n                    </div>\n                </div>\n            </div>\n        </div>\n        <input asp-for=\"SectionSevenFullSizeUrl\" type=\"hidden\" />\n        <input asp-for=\"SectionSevenResizedUrl\" type=\"hidden\" />\n        <div class=\"mb-3\">\n            <label asp-for=\"SectionSevenAltText\">@sr[\"Image Description\"]</label>\n            <input asp-for=\"SectionSevenAltText\" class=\"form-control\" />\n        </div>\n        <div class=\"mb-3\">\n            <label asp-for=\"SectionSevenHeading\">@sr[\"Section Heading - optional\"]</label>\n            <input asp-for=\"SectionSevenHeading\" class=\"form-control\" />\n        </div>\n        <label asp-for=\"SectionSevenContent\">@sr[\"Section 7 Content\"]</label>\n        <textarea asp-for=\"SectionSevenContent\" rows=\"5\" class=\"form-control\"\n            data-summernote-unobtrusive=\"\"\n            data-summernote-config-url=\"@summernoteOptions.CustomConfigPath\"\n            data-summernote-toolbar-config-url=\"@summernoteOptions.CustomToolbarConfigPath\"\n            data-summernote-config-language=\"@summernoteOptions.LanguageCode\"\n            data-summernote-config-dropfileuploadurl=\"@summernoteOptions.DropFileUrl\"\n            data-summernote-config-filebrowserurl=\"@summernoteOptions.FileBrowseUrl\"\n            data-summernote-config-imagebrowseurl=\"@summernoteOptions.ImageBrowseUrl\">\n        </textarea>\n    </div>\n\n    <div class=\"tab-pane\" id=\"tabCol8\" role=\"tabpanel\" aria-labelledby=\"cedit-tab8\">\n\n        <div class=\"d-flex align-items-stretch\">\n            <div class=\"cs-crop-container\">\n                <img id=\"dz8Image\" style=\"max-width:690px;\" src=\"@GetImageUrl(Model.SectionEightResizedUrl)\" />\n            </div>\n            <div class=\"d-flex flex-column\">\n                <div id=\"dz8\" class=\"cloudscribe-dropzone-standalone\" style=\"cursor:pointer;\"\n                     data-dropzone=\"\"\n                     data-upload-url=\"@Url.Action(\"DropFile\", \"FileManager\")\"\n                     data-anti-forgery-token=\"@tokens.RequestToken\"\n                     data-file-browse-url=\"@summernoteOptions.ImageBrowseUrl\"\n                     data-file-crop-url=\"@summernoteOptions.CropFileUrl\"\n                     data-target-path=\"@options.NewImagePath\"\n                     data-create-thumb=\"@options.CreateThumbnails.ToString().ToLower()\"\n                     data-resize-image=\"true\"\n                     data-keep-original=\"@options.KeepOriginalSizeImages.ToString().ToLower()\"\n                     data-enable-browse-server=\"@options.EnableBrowseServer.ToString().ToLower()\"\n                     data-enable-crop=\"@options.EnableCropping.ToString().ToLower()\"\n                     data-accepted-files=\"image/*\"\n                     data-target-fullsize-input-id=\"SectionEightFullSizeUrl\"\n                     data-target-resized-input-id=\"SectionEightResizedUrl\"\n                     data-target-thumb-input-id=\"\"\n                     data-target-fullsize-image-id=\"dz8Image\"\n                     data-target-resized-image-id=\"\"\n                     data-target-thumb-image-id=\"\"\n                     data-fullsize-placeholder-image=\"@options.PlaceholderImageUrl\"\n                     data-resized-placeholder-image=\"\"\n                     data-thumb-placeholder-image=\"\"\n                     data-resize-width=\"@options.ResizeMaxWidth\"\n                     data-resize-height=\"@options.ResizeMaxHeight\"\n                     data-crop-area-width=\"@options.CropAreaWidth\"\n                     data-crop-area-height=\"@options.CropAreaHeight\">\n                    @sr[\"Drop file here or click to browse device for file.\"]\n                </div>\n                <div class=\"ps-1 pt-1\">\n                    <div class=\"d-flex flex-column\">\n                        <button id=\"dz8-browse-server\" type=\"button\" class=\"mb-1 btn btn-primary collapse\">@sr[\"Browse Server\"] <i class=\"fas fa-search\" aria-hidden=\"true\"></i></button>\n                        <button id=\"dz8-save-crop\" type=\"button\" class=\"mb-1 btn btn-primary collapse\">@sr[\"Save Crop\"] <i class=\"far fa-save\" aria-hidden=\"true\"></i></button>\n                    </div>\n                </div>\n            </div>\n        </div>\n        <input asp-for=\"SectionEightFullSizeUrl\" type=\"hidden\" />\n        <input asp-for=\"SectionEightResizedUrl\" type=\"hidden\" />\n        <div class=\"mb-3\">\n            <label asp-for=\"SectionEightAltText\">@sr[\"Image Description\"]</label>\n            <input asp-for=\"SectionEightAltText\" class=\"form-control\" />\n        </div>\n        <div class=\"mb-3\">\n            <label asp-for=\"SectionEightHeading\">@sr[\"Section Heading - optional\"]</label>\n            <input asp-for=\"SectionEightHeading\" class=\"form-control\" />\n        </div>\n        <label asp-for=\"SectionEightContent\">@sr[\"Section 8 Content\"]</label>\n        <textarea asp-for=\"SectionEightContent\" rows=\"5\" class=\"form-control\"\n            data-summernote-unobtrusive=\"\"\n            data-summernote-config-url=\"@summernoteOptions.CustomConfigPath\"\n            data-summernote-toolbar-config-url=\"@summernoteOptions.CustomToolbarConfigPath\"\n            data-summernote-config-language=\"@summernoteOptions.LanguageCode\"\n            data-summernote-config-dropfileuploadurl=\"@summernoteOptions.DropFileUrl\"\n            data-summernote-config-filebrowserurl=\"@summernoteOptions.FileBrowseUrl\"\n            data-summernote-config-imagebrowseurl=\"@summernoteOptions.ImageBrowseUrl\">\n        </textarea>\n    </div>\n\n\n\n</div>\n\n<div id=\"fileBrowseDialog\" class=\"modal fade\" tabindex=\"-1\" role=\"dialog\">\n    <div class=\"modal-dialog modal-lg\" style=\"height:99%;min-width:99%!important;\">\n        <div class=\"modal-content\">\n            <div class=\"modal-header\">\n                <button type=\"button\" data-bs-dismiss=\"modal\" class=\"btn-close\" aria-label=\"Close\"></button>\n            </div>\n            <iframe id=\"frFileDialog\" frameborder=\"0\" style=\"overflow:hidden;height:100%;width:100%;min-height: 650px;\"></iframe>\n        </div>\n    </div>\n</div>\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.ContentTemplates.Bootstrap5/Views/Shared/ContentTemplates/EverythingRender.cshtml",
    "content": "﻿@model cloudscribe.SimpleContent.ContentTemplates.ViewModels.EverythingModel\n@using cloudscribe.SimpleContent.ContentTemplates\n@inject IStringLocalizer<ContentTemplateResources> sr\n@{\n    Layout = \"_LayoutEmpty\";\n}\n<partial name=\"EverythingRenderPartial\" model=\"Model\" />\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.ContentTemplates.Bootstrap5/Views/Shared/ContentTemplates/GalleryWithContentEdit.cshtml",
    "content": "﻿@model cloudscribe.SimpleContent.ContentTemplates.ViewModels.SimpleGalleryViewModel\n@using cloudscribe.SimpleContent.ContentTemplates\n@using cloudscribe.SimpleContent.ContentTemplates.Configuration\n@using Microsoft.AspNetCore.Antiforgery\n@using Newtonsoft.Json;\n@using System.Net\n@inject IStringLocalizer<ContentTemplateResources> sr\n@inject IAntiforgery antiforgery\n@inject ISummernoteOptionsResolver summernoteOptionsResolver\n@inject ICkeditorOptionsResolver editorOptionsResolver\n@inject IGalleryOptionsProvider galleryOptionsProvider\n@{\n\n    var tokens = antiforgery.GetAndStoreTokens(Context);\n    var summernoteOptions = await summernoteOptionsResolver.GetSummernoteOptions();\n    var ckOptions = await editorOptionsResolver.GetCkeditorOptions();\n    var sorted = Model.Items.OrderBy(x => x.Sort).ToList();\n    int i = 1;\n    foreach (var item in sorted)\n    {\n        item.Sort = i;\n        i += 2;\n    }\n    var itemsJson = WebUtility.UrlEncode(JsonConvert.SerializeObject(sorted, Formatting.None, new JsonSerializerSettings { DefaultValueHandling = DefaultValueHandling.Include, }));\n    var options = await galleryOptionsProvider.ResolveGalleryOptions(Context.Request.Host.Host, Context.Request.Path);\n}\n\n<ul class=\"nav nav-tabs\" role=\"tablist\">\n    <li class=\"nav-item\">\n        <a id=\"cedit-tab1\" class=\"nav-link active\" href=\"#tabMain\" data-bs-toggle=\"tab\" role=\"tab\" aria-controls=\"tabMain\" aria-selected=\"true\">@sr[\"Gallery\"]</a>\n    </li>\n    <li class=\"nav-item\">\n        <a id=\"cedit-tab2\" class=\"nav-link\" href=\"#tabTopContent\" data-bs-toggle=\"tab\" role=\"tab\" aria-controls=\"tabTopContent\" aria-selected=\"false\">@sr[\"Top Content\"]</a>\n    </li>\n    <li class=\"nav-item\">\n        <a id=\"cedit-tab3\" class=\"nav-link\" href=\"#tabBottomContent\" data-bs-toggle=\"tab\" role=\"tab\" aria-controls=\"tabBottomContent\" aria-selected=\"false\">@sr[\"Bottom Content\"]</a>\n    </li>\n</ul>\n<div class=\"tab-content\">\n    <div class=\"tab-pane pt-2 active\" id=\"tabMain\" role=\"tabpanel\" aria-labelledby=\"cedit-tab1\">\n        <input id=\"ItemsConfig\" type=\"hidden\" value=\"@itemsJson\" />\n        <input id=\"ItemsJson\" type=\"hidden\" name=\"ItemsJson\" data-bind=\"value: currentListState()\" />\n        <partial name=\"GalleryWithContentEditLayoutSelector\" model=\"Model\" />\n        <div class=\"mb-3\">\n            <label asp-for=\"CarouselIntervalInMilliseconds\">@sr[\"Carousel slide interval in milliseconds\"]</label>\n            <input asp-for=\"CarouselIntervalInMilliseconds\" class=\"form-control\" />\n            <span asp-validation-for=\"CarouselIntervalInMilliseconds\" class=\"text-danger\"></span>\n        </div>\n        <fieldset class=\"border p-2 mb-2\">\n            <legend class=\"w-auto\">@sr[\"Current Images\"]</legend>\n            <div data-bind=\"visible: Items().length === 0\">\n                @sr[\"No images have been added yet, drop or browse images below to add your first image, then click the button to add it to the gallery.\"]\n            </div>\n            <div id=\"itemsEditList\" style=\"max-width:775px\" data-bind=\"foreach: Items\">\n                <div class=\"row\">\n                    <div class=\"col-3\">\n                        <img style=\"max-width:200px;max-height:150px;\" data-bind=\"attr: { src: ResizedUrl }, visible: ThumbnailUrl !== undefined\" />\n                    </div>\n                    <div class=\"col-8\">\n                        <input class=\"form-control\" title=\"@sr[\"Title\"]\" data-bind=\"value: Title\" placeholder=\"@sr[\"Title\"]\" />\n                        <textarea class=\"form-control\" style=\"height:110px;\" title=\"@sr[\"Description\"]\" placeholder=\"@sr[\"Description\"]\" data-bind=\"value: Description\"></textarea>\n                        <input class=\"form-control\" title=\"@sr[\"AltText\"]\" data-bind=\"value: AltText\" placeholder=\"@sr[\"AltText\"]\" />\n                        <input class=\"form-control\" title=\"@sr[\"LinkUrl\"]\" data-bind=\"value: LinkUrl\" placeholder=\"@sr[\"LinkUrl\"]\" />\n                        <hr />\n                    </div>\n                    <div class=\"col-1\">\n                        <a href=\"#\" data-bind=\"click: $root.removeItem\" title=\"@sr[\"Delete\"]\"><i class=\"fa fa-trash-o far fa-trash-alt fa-2x\"></i></a> <br /><br />\n                        <a href=\"#\" data-bind=\"click: decrementSort, visible: Sort() > 0\" title=\"@sr[\"Move Up\"]\"><i class=\"fas fa-sort-up fa-2x\"></i></a>\n                        <a href=\"#\" data-bind=\"click: incrementSort\" title=\"@sr[\"Move Down\"]\"><i class=\"fas fa-sort-down fa-2x\"></i></a>\n                    </div>\n                </div>\n            </div>\n        </fieldset>\n        <fieldset class=\"border p-2 mb-2\">\n            <legend class=\"w-auto\">@sr[\"Add New Image\"]</legend>\n            <div class=\"d-flex align-items-stretch\">\n                <div class=\"cs-crop-container\">\n                    <img id=\"dz1Image\" style=\"max-width:690px;\" src=\"@options.PlaceholderImageUrl\" />\n                </div>\n                <div class=\"d-flex flex-column\">\n                    <div id=\"dz1\" class=\"cloudscribe-dropzone-standalone\" style=\"cursor:pointer;\"\n                         data-dropzone=\"\"\n                         data-upload-url=\"@Url.Action(\"DropFile\", \"FileManager\")\"\n                         data-anti-forgery-token=\"@tokens.RequestToken\"\n                         data-file-browse-url=\"@summernoteOptions.ImageBrowseUrl\"\n                         data-file-crop-url=\"@summernoteOptions.CropFileUrl\"\n                         data-target-path=\"@options.NewImagePath\"\n                         data-create-thumb=\"@options.CreateThumbnails.ToString().ToLower()\"\n                         data-resize-image=\"true\"\n                         data-keep-original=\"@options.KeepOriginalSizeImages.ToString().ToLower()\"\n                         data-enable-browse-server=\"@options.EnableBrowseServer.ToString().ToLower()\"\n                         data-enable-crop=\"@options.EnableCropping.ToString().ToLower()\"\n                         data-accepted-files=\"image/*\"\n                         data-target-fullsize-input-id=\"imgUrlFull\"\n                         data-target-resized-input-id=\"\"\n                         data-target-thumb-input-id=\"\"\n                         data-target-fullsize-image-id=\"dz1Image\"\n                         data-target-resized-image-id=\"\"\n                         data-target-thumb-image-id=\"\"\n                         data-fullsize-placeholder-image=\"@options.PlaceholderImageUrl\"\n                         data-resized-placeholder-image=\"\"\n                         data-thumb-placeholder-image=\"\"\n                         data-resize-width=\"@options.ResizeMaxWidth\"\n                         data-resize-height=\"@options.ResizeMaxHeight\"\n                         data-crop-area-width=\"@options.CropAreaWidth\"\n                         data-crop-area-height=\"@options.CropAreaHeight\">\n                        @sr[\"Drop file here or click to browse device for file.\"]\n                    </div>\n                    <div class=\"ps-1 pt-1\">\n                        <div class=\"d-flex flex-column\">\n                            <button id=\"dz1-browse-server\" type=\"button\" class=\"mb-1 btn btn-primary collapse\">@sr[\"Browse Server\"] <i class=\"fas fa-search\" aria-hidden=\"true\"></i></button>\n                            <button id=\"dz1-save-crop\" type=\"button\" class=\"mb-1 btn btn-primary collapse\">@sr[\"Save Crop\"] <i class=\"far fa-save\" aria-hidden=\"true\"></i></button>\n                            <button data-bind=\"click: addNewItem, visible: newItemResizedUrl() !== null\" type=\"button\" class=\"mb-1 btn btn-primary\">@sr[\"Add To Gallery\"] <i class=\"fas fa-plus\" aria-hidden=\"true\"></i></button>\n                        </div>\n                    </div>\n                </div>\n            </div>\n            <input id=\"imgUrlFull\" type=\"hidden\" />\n            <input id=\"imgUrlResized\" type=\"hidden\" />\n            <input id=\"imgUrlThumb\" type=\"hidden\" />\n        </fieldset>\n    </div>\n    <div class=\"tab-pane pt-2\" id=\"tabTopContent\" role=\"tabpanel\" aria-labelledby=\"cedit-tab2\">\n        <textarea asp-for=\"ContentAbove\" rows=\"5\" class=\"form-control\"\n            data-summernote-unobtrusive=\"\"\n            data-summernote-config-url=\"@summernoteOptions.CustomConfigPath\"\n            data-summernote-toolbar-config-url=\"@summernoteOptions.CustomToolbarConfigPath\"\n            data-summernote-config-language=\"@summernoteOptions.LanguageCode\"\n            data-summernote-config-dropfileuploadurl=\"@summernoteOptions.DropFileUrl\"\n            data-summernote-config-filebrowserurl=\"@summernoteOptions.FileBrowseUrl\"\n            data-summernote-config-imagebrowseurl=\"@summernoteOptions.ImageBrowseUrl\">\n        </textarea>\n    </div>\n    <div class=\"tab-pane pt-2\" id=\"tabBottomContent\" role=\"tabpanel\" aria-labelledby=\"cedit-tab3\">\n        <textarea asp-for=\"ContentBelow\" rows=\"5\" class=\"form-control\"\n            data-summernote-unobtrusive=\"\"\n            data-summernote-config-url=\"@summernoteOptions.CustomConfigPath\"\n            data-summernote-toolbar-config-url=\"@summernoteOptions.CustomToolbarConfigPath\"\n            data-summernote-config-language=\"@summernoteOptions.LanguageCode\"\n            data-summernote-config-dropfileuploadurl=\"@summernoteOptions.DropFileUrl\"\n            data-summernote-config-filebrowserurl=\"@summernoteOptions.FileBrowseUrl\"\n            data-summernote-config-imagebrowseurl=\"@summernoteOptions.ImageBrowseUrl\">\n        </textarea>\n    </div>\n</div>\n<div id=\"fileBrowseDialog\" class=\"modal fade\" tabindex=\"-1\" role=\"dialog\">\n    <div class=\"modal-dialog modal-lg\" style=\"height:99%;min-width:99%!important;\">\n        <div class=\"modal-content\">\n            <div class=\"modal-header\">\n                <button type=\"button\" data-bs-dismiss=\"modal\" class=\"btn-close\" aria-label=\"Close\"></button>\n            </div>\n            <iframe id=\"frFileDialog\" frameborder=\"0\" style=\"overflow:hidden;height:100%;width:100%;min-height: 650px;\"></iframe>\n        </div>\n    </div>\n</div>\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.ContentTemplates.Bootstrap5/Views/Shared/ContentTemplates/GalleryWithContentRender.cshtml",
    "content": "﻿@model cloudscribe.SimpleContent.ContentTemplates.ViewModels.SimpleGalleryViewModel\n@using cloudscribe.SimpleContent.ContentTemplates\n@inject IStringLocalizer<ContentTemplateResources> sr\n@{\n    Layout = \"_LayoutEmpty\";\n    Model.Items = Model.Items.OrderBy(x => x.Sort).ToList();\n}\n<partial name=\"@Model.Layout\" model=\"Model\" />\n\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.ContentTemplates.Bootstrap5/Views/Shared/ContentTemplates/ImageWithContentEdit.cshtml",
    "content": "﻿@model cloudscribe.SimpleContent.ContentTemplates.ViewModels.ImageWithContentViewModel\n@using cloudscribe.SimpleContent.ContentTemplates\n@using cloudscribe.SimpleContent.ContentTemplates.Configuration\n@using Microsoft.AspNetCore.Antiforgery\n@using Newtonsoft.Json;\n@using System.Net\n@inject IStringLocalizer<ContentTemplateResources> sr\n@inject IAntiforgery antiforgery\n@inject ISummernoteOptionsResolver summernoteOptionsResolver\n@inject ICkeditorOptionsResolver editorOptionsResolver\n@inject IImageWithContentOptionsProvider optionsProvider\n@{\n\n    var tokens = antiforgery.GetAndStoreTokens(Context);\n    var summernoteOptions = await summernoteOptionsResolver.GetSummernoteOptions();\n    var ckOptions = await editorOptionsResolver.GetCkeditorOptions();\n    var options = await optionsProvider.ResolveImageWithContentOptions(Context.Request.Host.Host, Context.Request.Path);\n\n}\n@functions{\n    public string GetImageUrl(string imageUrl)\n    {\n        if (!string.IsNullOrWhiteSpace(imageUrl)) { return imageUrl; }\n        return \"/cr/images/690x517-placeholder.png\";\n    }\n}\n<div class=\"d-flex align-items-stretch\">\n    <div class=\"cs-crop-container\">\n        <img id=\"dz1Image\" style=\"max-width:690px;\" src=\"@GetImageUrl(Model.ResizedUrl)\" />\n    </div>\n    <div class=\"d-flex flex-column\">\n        <div id=\"dz1\" class=\"cloudscribe-dropzone-standalone\" style=\"cursor:pointer;\"\n             data-dropzone=\"\"\n             data-upload-url=\"@Url.Action(\"DropFile\", \"FileManager\")\"\n             data-anti-forgery-token=\"@tokens.RequestToken\"\n             data-file-browse-url=\"@summernoteOptions.ImageBrowseUrl\"\n             data-file-crop-url=\"@summernoteOptions.CropFileUrl\"\n             data-target-path=\"@options.NewImagePath\"\n             data-create-thumb=\"@options.CreateThumbnails.ToString().ToLower()\"\n             data-resize-image=\"true\"\n             data-keep-original=\"@options.KeepOriginalSizeImages.ToString().ToLower()\"\n             data-enable-browse-server=\"@options.EnableBrowseServer.ToString().ToLower()\"\n             data-enable-crop=\"@options.EnableCropping.ToString().ToLower()\"\n             data-accepted-files=\"image/*\"\n             data-target-fullsize-input-id=\"FullSizeUrl\"\n             data-target-resized-input-id=\"ResizedUrl\"\n             data-target-thumb-input-id=\"\"\n             data-target-fullsize-image-id=\"dz1Image\"\n             data-target-resized-image-id=\"\"\n             data-target-thumb-image-id=\"\"\n             data-fullsize-placeholder-image=\"@options.PlaceholderImageUrl\"\n             data-resized-placeholder-image=\"\"\n             data-thumb-placeholder-image=\"\"\n             data-resize-width=\"@options.ResizeMaxWidth\"\n             data-resize-height=\"@options.ResizeMaxHeight\"\n             data-crop-area-width=\"@options.CropAreaWidth\"\n             data-crop-area-height=\"@options.CropAreaHeight\"\n             >\n            @sr[\"Drop file here or click to browse device for file.\"]\n        </div>\n        <div class=\"ps-1 pt-1\">\n            <div class=\"d-flex flex-column\">\n                <button id=\"dz1-browse-server\" type=\"button\" class=\"mb-1 btn btn-primary collapse\">@sr[\"Browse Server\"] <i class=\"fas fa-search\" aria-hidden=\"true\"></i></button>\n                <button id=\"dz1-save-crop\" type=\"button\" class=\"mb-1 btn btn-primary collapse\">@sr[\"Save Crop\"] <i class=\"far fa-save\" aria-hidden=\"true\"></i></button>\n            </div>\n        </div>\n    </div>\n</div>\n<input asp-for=\"FullSizeUrl\" type=\"hidden\" />\n<input asp-for=\"ResizedUrl\" type=\"hidden\" />\n<div class=\"mb-3\">\n    <label asp-for=\"AltText\">@sr[\"Image Description\"]</label>\n    <input asp-for=\"AltText\" class=\"form-control\" />\n</div>\n<div class=\"mb-3 row\">\n    <label asp-for=\"Layout\" class=\"control-label col-md-1 ps-5\">@sr[\"Layout\"]</label>\n    <div class=\"col-md-11\">\n        <select asp-for=\"Layout\" class=\"form-control\">\n            <option value=\"ImageOnLeft\">@sr[\"Image floated left\"]</option>\n            <option value=\"ImageOnRight\">@sr[\"Image floated right\"]</option>\n            <option value=\"ImageNotFloated\">@sr[\"Image not floated\"]</option>\n        </select>\n    </div>\n</div>\n<label asp-for=\"Content\">@sr[\"Content\"]</label>\n<textarea asp-for=\"Content\" rows=\"5\" class=\"form-control\"\n    data-summernote-unobtrusive=\"\"\n    data-summernote-config-url=\"@summernoteOptions.CustomConfigPath\"\n    data-summernote-toolbar-config-url=\"@summernoteOptions.CustomToolbarConfigPath\"\n    data-summernote-config-language=\"@summernoteOptions.LanguageCode\"\n    data-summernote-config-dropfileuploadurl=\"@summernoteOptions.DropFileUrl\"\n    data-summernote-config-filebrowserurl=\"@summernoteOptions.FileBrowseUrl\"\n    data-summernote-config-imagebrowseurl=\"@summernoteOptions.ImageBrowseUrl\">\n</textarea>\n\n<div id=\"fileBrowseDialog\" class=\"modal fade\" tabindex=\"-1\" role=\"dialog\">\n    <div class=\"modal-dialog modal-lg\" style=\"height:99%;min-width:99%!important;\">\n        <div class=\"modal-content\">\n            <div class=\"modal-header\">\n                <button type=\"button\" data-bs-dismiss=\"modal\" class=\"btn-close\" aria-label=\"Close\"></button>\n            </div>\n            <iframe id=\"frFileDialog\" frameborder=\"0\" style=\"overflow:hidden;height:100%;width:100%;min-height: 650px;\"></iframe>\n        </div>\n    </div>\n</div>"
  },
  {
    "path": "src/cloudscribe.SimpleContent.ContentTemplates.Bootstrap5/Views/Shared/ContentTemplates/ImageWithContentRender.cshtml",
    "content": "﻿@model cloudscribe.SimpleContent.ContentTemplates.ViewModels.ImageWithContentViewModel\n@{\n    Layout = \"_LayoutEmpty\";\n}\n@if (!string.IsNullOrWhiteSpace(Model.ResizedUrl))\n{\n    if (Model.Layout == \"ImageOnLeft\")\n    {\n        <div class=\"float-md-start simple-side-image me-md-2\">\n            <img class=\"img-fluid\" src=\"@Model.ResizedUrl\" alt=\"@Model.AltText\" />\n        </div>\n\n    }\n    if (Model.Layout == \"ImageOnRight\")\n    {\n        <div class=\"float-md-end simple-side-image ms-md-2\">\n            <img class=\"img-fluid\" src=\"@Model.ResizedUrl\" alt=\"@Model.AltText\" />\n        </div>\n\n    }\n    if (Model.Layout == \"ImageNotFloated\")\n    {\n        <div class=\"w-100\">\n            <img class=\"img-fluid\" src=\"@Model.ResizedUrl\" alt=\"@Model.AltText\" />\n        </div>\n\n    }\n\n}\n@Html.Raw(Model.Content)\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.ContentTemplates.Bootstrap5/Views/Shared/ContentTemplates/ListOfLinksEdit.cshtml",
    "content": "﻿@model cloudscribe.SimpleContent.ContentTemplates.ViewModels.ListWithContentModel\n@using cloudscribe.SimpleContent.ContentTemplates\n@using cloudscribe.SimpleContent.ContentTemplates.Configuration\n@using Microsoft.AspNetCore.Antiforgery\n@using Newtonsoft.Json;\n@using System.Net\n@inject IStringLocalizer<ContentTemplateResources> sr\n@inject IAntiforgery antiforgery\n@inject ISummernoteOptionsResolver summernoteOptionsResolver\n@inject ICkeditorOptionsResolver editorOptionsResolver\n@inject ILinkListOptionsProvider optionsProvider\n@{\n\n    var tokens = antiforgery.GetAndStoreTokens(Context);\n    var summernoteOptions = await summernoteOptionsResolver.GetSummernoteOptions();\n    var ckOptions = await editorOptionsResolver.GetCkeditorOptions();\n    var sorted = Model.Items.OrderBy(x => x.Sort).ToList();\n    int i = 1;\n    foreach (var item in sorted)\n    {\n        item.Sort = i;\n        i += 2;\n    }\n    var itemsJson = WebUtility.UrlEncode(JsonConvert.SerializeObject(sorted, Formatting.None, new JsonSerializerSettings { DefaultValueHandling = DefaultValueHandling.Include, }));\n    var options = await optionsProvider.ResolveLinkListOptions(Context.Request.Host.Host, Context.Request.Path);\n}\n\n<ul class=\"nav nav-tabs\" role=\"tablist\">\n    <li class=\"nav-item\">\n        <a id=\"cedit-tab1\" class=\"nav-link active\" href=\"#tabMain\" data-bs-toggle=\"tab\" role=\"tab\" aria-controls=\"tabMain\" aria-selected=\"true\">@sr[\"Links\"]</a>\n    </li>\n    <li class=\"nav-item\">\n        <a id=\"cedit-tab2\" class=\"nav-link\" href=\"#tabTopContent\" data-bs-toggle=\"tab\" role=\"tab\" aria-controls=\"tabTopContent\" aria-selected=\"false\">@sr[\"Top Content\"]</a>\n    </li>\n    <li class=\"nav-item\">\n        <a id=\"cedit-tab3\" class=\"nav-link\" href=\"#tabBottomContent\" data-bs-toggle=\"tab\" role=\"tab\" aria-controls=\"tabBottomContent\" aria-selected=\"false\">@sr[\"Bottom Content\"]</a>\n    </li>\n</ul>\n<div class=\"tab-content\">\n    <div class=\"tab-pane pt-2 active\" id=\"tabMain\" role=\"tabpanel\" aria-labelledby=\"cedit-tab1\">\n        <input id=\"ItemsConfig\" type=\"hidden\" value=\"@itemsJson\" />\n        <input id=\"ItemsJson\" type=\"hidden\" name=\"ItemsJson\" data-bind=\"value: currentListState()\" />\n        <fieldset class=\"border p-2 mb-2\">\n            <legend class=\"w-auto\">@sr[\"Current Links\"]</legend>\n            <div data-bind=\"visible: Items().length === 0\">\n                @sr[\"No links have been added yet, use the form below to add links.\"]\n            </div>\n            <div id=\"itemsEditList\" style=\"max-width:775px\" data-bind=\"foreach: Items\">\n                <div class=\"row\">\n                    <div class=\"col-3\" data-bind=\"attr: { visible: ResizedUrl !== undefined }\">\n                        <img style=\"max-width:200px;max-height:150px;\" data-bind=\"attr: { src: ResizedUrl }\" />\n                    </div>\n                    <div class=\"col-8\">\n                        <input class=\"form-control\" title=\"@sr[\"Title\"]\" data-bind=\"value: Title\" placeholder=\"@sr[\"Title\"]\" />\n                        <span class=\"text-danger\" data-bind='visible: Title.hasError, text: Title.validationMessage'> </span>\n                        <input class=\"form-control\" title=\"@sr[\"Link Url\"]\" data-bind=\"value: LinkUrl\" placeholder=\"@sr[\"Link Url\"]\" />\n                        <span class=\"invalid-feedback\" data-bind='visible: LinkUrl.hasError, text: LinkUrl.validationMessage'> </span>\n                        <textarea class=\"form-control\" title=\"@sr[\"Description\"]\" placeholder=\"@sr[\"Description\"]\" data-bind=\"value: Description\"></textarea>\n                        <input class=\"form-control\" title=\"@sr[\"Thumbnail AltText\"]\" placeholder=\"@sr[\"Thumbnail AltText\"]\" data-bind=\"value: AltText\" />\n                        <div class=\"mb-3 form-check\">\n                            <input data-bind=\"checked: OpensInNewWindow, attr:{ id: 'chkNewWindow' + $index() }\" type=\"checkbox\" class=\"form-check-input\">\n                            <label data-bind=\"attr:{ 'for': 'chkNewWindow' + $index() }\" class=\"form-check-label\">@sr[\"Opens in new window\"]</label>\n                        </div>\n                    </div>\n                    <div class=\"col-1\">\n                        <a href=\"#\" data-bind=\"click: $root.removeItem\" title=\"@sr[\"Delete\"]\"><i class=\"fa fa-trash-o far fa-trash-alt fa-2x\"></i></a> <br /><br />\n                        <a href=\"#\" data-bind=\"click: decrementSort, visible: Sort() > 0\" title=\"@sr[\"Move Up\"]\"><i class=\"fas fa-sort-up fa-2x\"></i></a>\n                        <a href=\"#\" data-bind=\"click: incrementSort\" title=\"@sr[\"Move Down\"]\"><i class=\"fas fa-sort-down fa-2x\"></i></a>\n                    </div>\n                </div>\n            </div>\n        </fieldset>\n        <fieldset class=\"border p-2 mb-2\">\n            <legend class=\"w-auto\">@sr[\"Add a New Link\"]</legend>\n\n            <div class=\"mb-3\">\n                <label for=\"NewTitle\">@sr[\"Link Title - required\"]</label>\n                <input id=\"NewTitle\" class=\"form-control\" data-bind=\"value: newItemTitle\" />\n                <span class=\"invalid-feedback\" data-bind='visible: newItemTitle.hasError, text: newItemTitle.validationMessage'> </span>\n            </div>\n            <div class=\"mb-3\">\n                <label for=\"NewUrl\">@sr[\"Link Url - required\"]</label>\n                <input id=\"NewUrl\" class=\"form-control\" data-bind=\"value: newItemLinkUrl\" />\n                <span class=\"invalid-feedback\" data-bind='visible: newItemLinkUrl.hasError, text: newItemLinkUrl.validationMessage'> </span>\n            </div>\n            <div class=\"mb-3\">\n                <label for=\"NewDescription\">@sr[\"Link Description - optional\"]</label>\n                <textarea id=\"NewDescription\" class=\"form-control\" data-bind=\"value: newItemDescription\"></textarea>\n            </div>\n            <div class=\"mb-3 form-check\">\n                <input data-bind=\"checked: newItemOpensInNewWindow\" id=\"chkNewWindow\" type=\"checkbox\" class=\"form-check-input\">\n                <label for=\"chkNewWindow\" class=\"form-check-label\">@sr[\"Opens in new window\"]</label>\n            </div>\n            <label>@sr[\"Link Thumbnail - optional\"]</label>\n\n            <div class=\"d-flex align-items-stretch mb-2\">\n                <div class=\"cs-crop-container\">\n                    <img id=\"dz1Image\" style=\"max-width:350px;\" src=\"/cr/images/350x250-placeholder.png\" />\n                </div>\n                <div class=\"d-flex flex-column\">\n                    <div id=\"dz1\" class=\"cloudscribe-dropzone-standalone\" style=\"cursor:pointer;\"\n                         data-dropzone=\"\"\n                         data-upload-url=\"@Url.Action(\"DropFile\", \"FileManager\")\"\n                         data-anti-forgery-token=\"@tokens.RequestToken\"\n                         data-file-browse-url=\"@summernoteOptions.ImageBrowseUrl\"\n                         data-file-crop-url=\"@summernoteOptions.CropFileUrl\"\n                         data-target-path=\"@options.NewImagePath\"\n                         data-create-thumb=\"@options.CreateThumbnails.ToString().ToLower()\"\n                         data-resize-image=\"true\"\n                         data-keep-original=\"@options.KeepOriginalSizeImages.ToString().ToLower()\"\n                         data-enable-browse-server=\"@options.EnableBrowseServer.ToString().ToLower()\"\n                         data-enable-crop=\"@options.EnableCropping\"\n                         data-accepted-files=\"image/*\"\n                         data-target-fullsize-input-id=\"imgUrlFull\"\n                         data-target-resized-input-id=\"\"\n                         data-target-thumb-input-id=\"\"\n                         data-target-fullsize-image-id=\"dz1Image\"\n                         data-target-resized-image-id=\"\"\n                         data-target-thumb-image-id=\"\"\n                         data-fullsize-placeholder-image=\"@options.PlaceholderImageUrl\"\n                         data-resized-placeholder-image=\"\"\n                         data-thumb-placeholder-image=\"\"\n                         data-resize-width=\"@options.ResizeMaxWidth\"\n                         data-resize-height=\"@options.ResizeMaxHeight\"\n                         data-crop-area-width=\"@options.CropAreaWidth\"\n                         data-crop-area-height=\"@options.CropAreaHeight\">\n                        @sr[\"Drop file here or click to browse device for file.\"]\n                    </div>\n                    <div class=\"ps-1 pt-1\">\n                        <div class=\"d-flex flex-column\">\n                            <button id=\"dz1-browse-server\" type=\"button\" class=\"mb-1 btn btn-primary collapse\">@sr[\"Browse Server\"] <i class=\"fas fa-search\" aria-hidden=\"true\"></i></button>\n                            <button id=\"dz1-save-crop\" type=\"button\" class=\"mb-1 btn btn-primary collapse\">@sr[\"Save Crop\"] <i class=\"far fa-save\" aria-hidden=\"true\"></i></button>\n\n                        </div>\n                    </div>\n                </div>\n            </div>\n            <input id=\"imgUrlFull\" type=\"hidden\" />\n            <input id=\"imgUrlResized\" type=\"hidden\" />\n            \n            <div class=\"mb-3\">\n                <label for=\"newAltText\">@sr[\"Thumbnail AltText - optional\"]</label>\n                <input id=\"newAltText\" class=\"form-control\" data-bind=\"value: newItemAltText\" />\n            </div>\n            \n            <button data-bind=\"click: addNewItem, enable: isValidNewItemLink()\" type=\"button\" class=\"mb-1 btn btn-primary\">@sr[\"Add Link\"] <i class=\"fas fa-plus\" aria-hidden=\"true\"></i></button>\n            <span class=\"text-danger\" data-bind=\"css: { collapse: isValidNewItemLink() } \">@sr[\"A link must have a title and a valid url.\"]</span>\n        </fieldset>\n        \n    </div>\n    <div class=\"tab-pane pt-2\" id=\"tabTopContent\" role=\"tabpanel\" aria-labelledby=\"cedit-tab2\">\n        <textarea asp-for=\"ContentAbove\" rows=\"5\" class=\"form-control\"\n            data-summernote-unobtrusive=\"\"\n            data-summernote-config-url=\"@summernoteOptions.CustomConfigPath\"\n            data-summernote-toolbar-config-url=\"@summernoteOptions.CustomToolbarConfigPath\"\n            data-summernote-config-language=\"@summernoteOptions.LanguageCode\"\n            data-summernote-config-dropfileuploadurl=\"@summernoteOptions.DropFileUrl\"\n            data-summernote-config-filebrowserurl=\"@summernoteOptions.FileBrowseUrl\"\n            data-summernote-config-imagebrowseurl=\"@summernoteOptions.ImageBrowseUrl\">\n        </textarea>\n    </div>\n    <div class=\"tab-pane pt-2\" id=\"tabBottomContent\" role=\"tabpanel\" aria-labelledby=\"cedit-tab3\">\n        <textarea asp-for=\"ContentBelow\" rows=\"5\" class=\"form-control\"\n            data-summernote-unobtrusive=\"\"\n            data-summernote-config-url=\"@summernoteOptions.CustomConfigPath\"\n            data-summernote-toolbar-config-url=\"@summernoteOptions.CustomToolbarConfigPath\"\n            data-summernote-config-language=\"@summernoteOptions.LanguageCode\"\n            data-summernote-config-dropfileuploadurl=\"@summernoteOptions.DropFileUrl\"\n            data-summernote-config-filebrowserurl=\"@summernoteOptions.FileBrowseUrl\"\n            data-summernote-config-imagebrowseurl=\"@summernoteOptions.ImageBrowseUrl\">\n        </textarea>\n    </div>\n</div>\n<div id=\"fileBrowseDialog\" class=\"modal fade\" tabindex=\"-1\" role=\"dialog\">\n    <div class=\"modal-dialog modal-lg\" style=\"height:99%;min-width:99%!important;\">\n        <div class=\"modal-content\">\n            <div class=\"modal-header\">\n                <button type=\"button\" data-bs-dismiss=\"modal\" class=\"btn-close\" aria-label=\"Close\"></button>\n            </div>\n            <iframe id=\"frFileDialog\" frameborder=\"0\" style=\"overflow:hidden;height:100%;width:100%;min-height: 650px;\"></iframe>\n        </div>\n    </div>\n</div>\n\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.ContentTemplates.Bootstrap5/Views/Shared/ContentTemplates/ListOfLinksRender.cshtml",
    "content": "﻿@model cloudscribe.SimpleContent.ContentTemplates.ViewModels.ListWithContentModel\n@using cloudscribe.SimpleContent.ContentTemplates\n@using cloudscribe.SimpleContent.ContentTemplates.Configuration\n@using cloudscribe.SimpleContent.ContentTemplates.ViewModels\n@inject IStringLocalizer<ContentTemplateResources> sr\n@inject ILinkListOptionsProvider optionsProvider\n@{\n    Layout = \"_LayoutEmpty\";\n}\n<partial name=\"LinksRenderPartial\" model=\"@Model\" />\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.ContentTemplates.Bootstrap5/Views/Shared/ContentTemplates/RoleBasedContentEdit.cshtml",
    "content": "﻿@model cloudscribe.SimpleContent.ContentTemplates.ViewModels.RoleBasedContentViewModel\n\n@using cloudscribe.SimpleContent.ContentTemplates\n@using cloudscribe.SimpleContent.ContentTemplates.Configuration\n@using Microsoft.AspNetCore.Antiforgery\n@using Newtonsoft.Json;\n@using System.Net\n@inject IAntiforgery antiforgery\n@inject ISummernoteOptionsResolver summernoteOptionsResolver\n@inject ICkeditorOptionsResolver editorOptionsResolver\n@inject IStringLocalizer<ContentTemplateResources> sr\n@{\n    var tokens = antiforgery.GetAndStoreTokens(Context);\n    var summernoteOptions = await summernoteOptionsResolver.GetSummernoteOptions();\n    var ckOptions = await editorOptionsResolver.GetCkeditorOptions();\n}\n@functions{\n\n}\n\n<div>\n\n    <label asp-for=\"UnauthenticatedContent\">@sr[\"Content for unauthenticated users\"]</label>\n    <textarea asp-for=\"UnauthenticatedContent\" rows=\"5\" class=\"form-control\"\n        data-summernote-unobtrusive=\"\"\n        data-summernote-config-url=\"@summernoteOptions.CustomConfigPath\"\n        data-summernote-toolbar-config-url=\"@summernoteOptions.CustomToolbarConfigPath\"\n        data-summernote-config-language=\"@summernoteOptions.LanguageCode\"\n        data-summernote-config-dropfileuploadurl=\"@summernoteOptions.DropFileUrl\"\n        data-summernote-config-filebrowserurl=\"@summernoteOptions.FileBrowseUrl\"\n        data-summernote-config-imagebrowseurl=\"@summernoteOptions.ImageBrowseUrl\">\n    </textarea>\n\n\n    <hr />\n\n\n  \n    <div class=\"mb-4\">\n    <label asp-for=\"AuthenticatedContent\">@sr[\"Content for authenticated users\"]</label>\n    <textarea asp-for=\"AuthenticatedContent\" rows=\"5\" class=\"form-control\"\n        data-summernote-unobtrusive=\"\"\n        data-summernote-config-url=\"@summernoteOptions.CustomConfigPath\"\n        data-summernote-toolbar-config-url=\"@summernoteOptions.CustomToolbarConfigPath\"\n        data-summernote-config-language=\"@summernoteOptions.LanguageCode\"\n        data-summernote-config-dropfileuploadurl=\"@summernoteOptions.DropFileUrl\"\n        data-summernote-config-filebrowserurl=\"@summernoteOptions.FileBrowseUrl\"\n        data-summernote-config-imagebrowseurl=\"@summernoteOptions.ImageBrowseUrl\">\n    </textarea>\n</div>\n\n    <hr />\n\n\n\n\n<div class=\"mb-3\">\n    <label asp-for=\"RoleBasedContent\">@sr[\"Role specific content\"]</label>\n    <textarea asp-for=\"RoleBasedContent\" rows=\"5\" class=\"form-control\"\n        data-summernote-unobtrusive=\"\"\n        data-summernote-config-url=\"@summernoteOptions.CustomConfigPath\"\n        data-summernote-toolbar-config-url=\"@summernoteOptions.CustomToolbarConfigPath\"\n        data-summernote-config-language=\"@summernoteOptions.LanguageCode\"\n        data-summernote-config-dropfileuploadurl=\"@summernoteOptions.DropFileUrl\"\n        data-summernote-config-filebrowserurl=\"@summernoteOptions.FileBrowseUrl\"\n        data-summernote-config-imagebrowseurl=\"@summernoteOptions.ImageBrowseUrl\">\n    </textarea>\n</div>\n\n\n\n\n    <label asp-for=\"Roles\">@sr[\"Roles (comma separated list)\"]</label>\n    <input type=\"text\" class=\"form-control\" asp-for=\"Roles\" />\n\n    <div class=\"mt-4 mb-4\">\n        <div class=\"checkbox\" data-placement=\"left\">\n            <label>\n                <input asp-for=\"RoleContentReplacesAuthenticatedContent\" /> @sr[\"Replace authenticated content?\"]\n            </label>\n            <p>@sr[\"Role based content will be displayed beneath the authenticated content, if the user is in one of the specified roles.\"]\n                <br />\n             @sr[\"Select the checkbox if you want to replace the authenticated content fully.\"]</p>\n\n        </div>\n    </div>\n\n</div>\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.ContentTemplates.Bootstrap5/Views/Shared/ContentTemplates/RoleBasedContentRender.cshtml",
    "content": "﻿@model cloudscribe.SimpleContent.ContentTemplates.ViewModels.RoleBasedContentViewModel\n\n@using cloudscribe.SimpleContent.ContentTemplates\n@using cloudscribe.SimpleContent.ContentTemplates.Configuration\n@using Microsoft.AspNetCore.Antiforgery\n@using Newtonsoft.Json;\n@using System.Net\n@inject IAntiforgery antiforgery\n\n@{\n    Layout = \"_LayoutEmpty\";\n}\n\n@functions{\n\n}\n\n<partial name=\"RoleBasedContentRenderPartial\" model=\"Model\" />\n\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.ContentTemplates.Bootstrap5/Views/Shared/ContentTemplates/SectionsWithImageEdit.cshtml",
    "content": "﻿@model cloudscribe.SimpleContent.ContentTemplates.ViewModels.SectionsWithImageViewModel\n@using cloudscribe.SimpleContent.ContentTemplates\n@using cloudscribe.SimpleContent.ContentTemplates.Configuration\n@using Microsoft.AspNetCore.Antiforgery\n@inject IStringLocalizer<ContentTemplateResources> sr\n@inject IAntiforgery antiforgery\n@inject ISummernoteOptionsResolver summernoteOptionsResolver\n@inject ICkeditorOptionsResolver editorOptionsResolver\n@inject IColumnTemplateOptionsProvider optionsProvider\n@{\n\n    var tokens = antiforgery.GetAndStoreTokens(Context);\n    var summernoteOptions = await summernoteOptionsResolver.GetSummernoteOptions();\n    var ckOptions = await editorOptionsResolver.GetCkeditorOptions();\n    var options = await optionsProvider.ResolveColumnTemplateOptions(Context.Request.Host.Host, Context.Request.Path);\n}\n@functions{\n    public string GetImageUrl(string imageUrl)\n    {\n        if (!string.IsNullOrWhiteSpace(imageUrl)) { return imageUrl; }\n        return \"/cr/images/690x517-placeholder.png\";\n    }\n}\n<p>@sr[\"Sections with no content body will not be shown even if they have images.\"]</p>\n<partial name=\"SectionsWithImageEditLayoutSelector\" model=\"Model\" />\n<ul class=\"nav nav-tabs\" id=\"myTab\" role=\"tablist\">\n    <li class=\"nav-item\">\n        <a id=\"cedit-tab1\" class=\"nav-link active\" href=\"#tabCol1\" data-bs-toggle=\"tab\" role=\"tab\" aria-controls=\"tabCol1\" aria-selected=\"true\">@sr[\"Section 1\"]</a>\n    </li>\n    <li class=\"nav-item\">\n        <a id=\"cedit-tab2\" class=\"nav-link\" href=\"#tabCol2\" data-bs-toggle=\"tab\" role=\"tab\" aria-controls=\"tabCol2\" aria-selected=\"false\">@sr[\"Section 2\"]</a>\n    </li>\n    <li class=\"nav-item\">\n        <a id=\"cedit-tab3\" class=\"nav-link\" href=\"#tabCol3\" data-bs-toggle=\"tab\" role=\"tab\" aria-controls=\"tabCol3\" aria-selected=\"false\">@sr[\"Section 3\"]</a>\n    </li>\n    <li class=\"nav-item\">\n        <a id=\"cedit-tab4\" class=\"nav-link\" href=\"#tabCol4\" data-bs-toggle=\"tab\" role=\"tab\" aria-controls=\"tabCol4\" aria-selected=\"false\">@sr[\"Section 4\"]</a>\n    </li>\n</ul>\n<div id=\"myTabContent\" class=\"tab-content\">\n    <div class=\"tab-pane active\" id=\"tabCol1\" role=\"tabpanel\" aria-labelledby=\"cedit-tab1\">\n        <div class=\"d-flex align-items-stretch\">\n            <div class=\"cs-crop-container\">\n                <img id=\"dz1Image\" style=\"max-width:690px;\" src=\"@GetImageUrl(Model.SectionOneResizedUrl)\" />\n            </div>\n            <div class=\"d-flex flex-column\">\n                <div id=\"dz1\" class=\"cloudscribe-dropzone-standalone\" style=\"cursor:pointer;\"\n                     data-dropzone=\"\"\n                     data-upload-url=\"@Url.Action(\"DropFile\", \"FileManager\")\"\n                     data-anti-forgery-token=\"@tokens.RequestToken\"\n                     data-file-browse-url=\"@summernoteOptions.ImageBrowseUrl\"\n                     data-file-crop-url=\"@summernoteOptions.CropFileUrl\"\n                     data-target-path=\"@options.NewImagePath\"\n                     data-create-thumb=\"@options.CreateThumbnails.ToString().ToLower()\"\n                     data-resize-image=\"true\"\n                     data-keep-original=\"@options.KeepOriginalSizeImages.ToString().ToLower()\"\n                     data-enable-browse-server=\"@options.EnableBrowseServer.ToString().ToLower()\"\n                     data-enable-crop=\"@options.EnableCropping.ToString().ToLower()\"\n                     data-accepted-files=\"image/*\"\n                     data-target-fullsize-input-id=\"SectionOneFullSizeUrl\"\n                     data-target-resized-input-id=\"SectionOneResizedUrl\"\n                     data-target-thumb-input-id=\"\"\n                     data-target-fullsize-image-id=\"dz1Image\"\n                     data-target-resized-image-id=\"\"\n                     data-target-thumb-image-id=\"\"\n                     data-fullsize-placeholder-image=\"@options.PlaceholderImageUrl\"\n                     data-resized-placeholder-image=\"\"\n                     data-thumb-placeholder-image=\"\"\n                     data-resize-width=\"@options.ResizeMaxWidth\"\n                     data-resize-height=\"@options.ResizeMaxHeight\"\n                     data-crop-area-width=\"@options.CropAreaWidth\"\n                     data-crop-area-height=\"@options.CropAreaHeight\">\n                    @sr[\"Drop file here or click to browse device for file.\"]\n                </div>\n                <div class=\"ps-1 pt-1\">\n                    <div class=\"d-flex flex-column\">\n                        <button id=\"dz1-browse-server\" type=\"button\" class=\"mb-1 btn btn-primary collapse\">@sr[\"Browse Server\"] <i class=\"fas fa-search\" aria-hidden=\"true\"></i></button>\n                        <button id=\"dz1-save-crop\" type=\"button\" class=\"mb-1 btn btn-primary collapse\">@sr[\"Save Crop\"] <i class=\"far fa-save\" aria-hidden=\"true\"></i></button>\n                    </div>\n                </div>\n            </div>\n        </div>\n        <input asp-for=\"SectionOneFullSizeUrl\" type=\"hidden\" />\n        <input asp-for=\"SectionOneResizedUrl\" type=\"hidden\" />\n        <div class=\"mb-3\">\n            <label asp-for=\"SectionOneAltText\">@sr[\"Image Description\"]</label>\n            <input asp-for=\"SectionOneAltText\" class=\"form-control\" />\n        </div>\n        <div class=\"mb-3\">\n            <label asp-for=\"SectionOneHeading\">@sr[\"Section Heading - optional\"]</label>\n            <input asp-for=\"SectionOneHeading\" class=\"form-control\" />\n        </div>\n        <label asp-for=\"SectionOneContent\">@sr[\"Section 1 Content\"]</label>\n        <textarea asp-for=\"SectionOneContent\" rows=\"5\" class=\"form-control\"\n            data-summernote-unobtrusive=\"\"\n            data-summernote-config-url=\"@summernoteOptions.CustomConfigPath\"\n            data-summernote-toolbar-config-url=\"@summernoteOptions.CustomToolbarConfigPath\"\n            data-summernote-config-language=\"@summernoteOptions.LanguageCode\"\n            data-summernote-config-dropfileuploadurl=\"@summernoteOptions.DropFileUrl\"\n            data-summernote-config-filebrowserurl=\"@summernoteOptions.FileBrowseUrl\"\n            data-summernote-config-imagebrowseurl=\"@summernoteOptions.ImageBrowseUrl\">\n        </textarea>\n    </div>\n    <div class=\"tab-pane\" id=\"tabCol2\" role=\"tabpanel\" aria-labelledby=\"cedit-tab2\">\n        <div class=\"d-flex align-items-stretch\">\n            <div class=\"cs-crop-container\">\n                <img id=\"dz2Image\" style=\"max-width:690px;\" src=\"@GetImageUrl(Model.SectionTwoResizedUrl)\" />\n            </div>\n            <div class=\"d-flex flex-column\">\n                <div id=\"dz2\" class=\"cloudscribe-dropzone-standalone\" style=\"cursor:pointer;\"\n                     data-dropzone=\"\"\n                     data-upload-url=\"@Url.Action(\"DropFile\", \"FileManager\")\"\n                     data-anti-forgery-token=\"@tokens.RequestToken\"\n                     data-file-browse-url=\"@summernoteOptions.ImageBrowseUrl\"\n                     data-file-crop-url=\"@summernoteOptions.CropFileUrl\"\n                     data-target-path=\"@options.NewImagePath\"\n                     data-create-thumb=\"@options.CreateThumbnails.ToString().ToLower()\"\n                     data-resize-image=\"true\"\n                     data-keep-original=\"@options.KeepOriginalSizeImages.ToString().ToLower()\"\n                     data-enable-browse-server=\"@options.EnableBrowseServer.ToString().ToLower()\"\n                     data-enable-crop=\"@options.EnableCropping.ToString().ToLower()\"\n                     data-accepted-files=\"image/*\"\n                     data-target-fullsize-input-id=\"SectionTwoFullSizeUrl\"\n                     data-target-resized-input-id=\"SectionTwoResizedUrl\"\n                     data-target-thumb-input-id=\"\"\n                     data-target-fullsize-image-id=\"dz2Image\"\n                     data-target-resized-image-id=\"\"\n                     data-target-thumb-image-id=\"\"\n                     data-fullsize-placeholder-image=\"@options.PlaceholderImageUrl\"\n                     data-resized-placeholder-image=\"\"\n                     data-thumb-placeholder-image=\"\"\n                     data-resize-width=\"@options.ResizeMaxWidth\"\n                     data-resize-height=\"@options.ResizeMaxHeight\"\n                     data-crop-area-width=\"@options.CropAreaWidth\"\n                     data-crop-area-height=\"@options.CropAreaHeight\">\n                    @sr[\"Drop file here or click to browse device for file.\"]\n                </div>\n                <div class=\"ps-1 pt-1\">\n                    <div class=\"d-flex flex-column\">\n                        <button id=\"dz2-browse-server\" type=\"button\" class=\"mb-1 btn btn-primary collapse\">@sr[\"Browse Server\"] <i class=\"fas fa-search\" aria-hidden=\"true\"></i></button>\n                        <button id=\"dz2-save-crop\" type=\"button\" class=\"mb-1 btn btn-primary collapse\">@sr[\"Save Crop\"] <i class=\"far fa-save\" aria-hidden=\"true\"></i></button>\n                    </div>\n                </div>\n            </div>\n        </div>\n        <input asp-for=\"SectionTwoFullSizeUrl\" type=\"hidden\" />\n        <input asp-for=\"SectionTwoResizedUrl\" type=\"hidden\" />\n        <div class=\"mb-3\">\n            <label asp-for=\"SectionTwoAltText\">@sr[\"Image Description\"]</label>\n            <input asp-for=\"SectionTwoAltText\" class=\"form-control\" />\n        </div>\n        <div class=\"mb-3\">\n            <label asp-for=\"SectionTwoHeading\">@sr[\"Section Heading - optional\"]</label>\n            <input asp-for=\"SectionTwoHeading\" class=\"form-control\" />\n        </div>\n        <label asp-for=\"SectionTwoContent\">@sr[\"Section 2 Content\"]</label>\n        <textarea asp-for=\"SectionTwoContent\" rows=\"5\" class=\"form-control\"\n            data-summernote-unobtrusive=\"\"\n            data-summernote-config-url=\"@summernoteOptions.CustomConfigPath\"\n            data-summernote-toolbar-config-url=\"@summernoteOptions.CustomToolbarConfigPath\"\n            data-summernote-config-language=\"@summernoteOptions.LanguageCode\"\n            data-summernote-config-dropfileuploadurl=\"@summernoteOptions.DropFileUrl\"\n            data-summernote-config-filebrowserurl=\"@summernoteOptions.FileBrowseUrl\"\n            data-summernote-config-imagebrowseurl=\"@summernoteOptions.ImageBrowseUrl\">\n        </textarea>\n    </div>\n    <div class=\"tab-pane\" id=\"tabCol3\" role=\"tabpanel\" aria-labelledby=\"cedit-tab3\">\n\n        <div class=\"d-flex align-items-stretch\">\n            <div class=\"cs-crop-container\">\n                <img id=\"dz3Image\" style=\"max-width:690px;\" src=\"@GetImageUrl(Model.SectionThreeResizedUrl)\" />\n            </div>\n            <div class=\"d-flex flex-column\">\n                <div id=\"dz3\" class=\"cloudscribe-dropzone-standalone\" style=\"cursor:pointer;\"\n                     data-dropzone=\"\"\n                     data-upload-url=\"@Url.Action(\"DropFile\", \"FileManager\")\"\n                     data-anti-forgery-token=\"@tokens.RequestToken\"\n                     data-file-browse-url=\"@summernoteOptions.ImageBrowseUrl\"\n                     data-file-crop-url=\"@summernoteOptions.CropFileUrl\"\n                     data-target-path=\"@options.NewImagePath\"\n                     data-create-thumb=\"@options.CreateThumbnails.ToString().ToLower()\"\n                     data-resize-image=\"true\"\n                     data-keep-original=\"@options.KeepOriginalSizeImages.ToString().ToLower()\"\n                     data-enable-browse-server=\"@options.EnableBrowseServer.ToString().ToLower()\"\n                     data-enable-crop=\"@options.EnableCropping.ToString().ToLower()\"\n                     data-accepted-files=\"image/*\"\n                     data-target-fullsize-input-id=\"SectionThreeFullSizeUrl\"\n                     data-target-resized-input-id=\"SectionThreeResizedUrl\"\n                     data-target-thumb-input-id=\"\"\n                     data-target-fullsize-image-id=\"dz3Image\"\n                     data-target-resized-image-id=\"\"\n                     data-target-thumb-image-id=\"\"\n                     data-fullsize-placeholder-image=\"@options.PlaceholderImageUrl\"\n                     data-resized-placeholder-image=\"\"\n                     data-thumb-placeholder-image=\"\"\n                     data-resize-width=\"@options.ResizeMaxWidth\"\n                     data-resize-height=\"@options.ResizeMaxHeight\"\n                     data-crop-area-width=\"@options.CropAreaWidth\"\n                     data-crop-area-height=\"@options.CropAreaHeight\">\n                    @sr[\"Drop file here or click to browse device for file.\"]\n                </div>\n                <div class=\"ps-1 pt-1\">\n                    <div class=\"d-flex flex-column\">\n                        <button id=\"dz3-browse-server\" type=\"button\" class=\"mb-1 btn btn-primary collapse\">@sr[\"Browse Server\"] <i class=\"fas fa-search\" aria-hidden=\"true\"></i></button>\n                        <button id=\"dz3-save-crop\" type=\"button\" class=\"mb-1 btn btn-primary collapse\">@sr[\"Save Crop\"] <i class=\"far fa-save\" aria-hidden=\"true\"></i></button>\n                    </div>\n                </div>\n            </div>\n        </div>\n        <input asp-for=\"SectionThreeFullSizeUrl\" type=\"hidden\" />\n        <input asp-for=\"SectionThreeResizedUrl\" type=\"hidden\" />\n        <div class=\"mb-3\">\n            <label asp-for=\"SectionThreeAltText\">@sr[\"Image Description\"]</label>\n            <input asp-for=\"SectionThreeAltText\" class=\"form-control\" />\n        </div>\n        <div class=\"mb-3\">\n            <label asp-for=\"SectionThreeHeading\">@sr[\"Section Heading - optional\"]</label>\n            <input asp-for=\"SectionThreeHeading\" class=\"form-control\" />\n        </div>\n        <label asp-for=\"SectionThreeContent\">@sr[\"Section 3 Content\"]</label>\n        <textarea asp-for=\"SectionThreeContent\" rows=\"5\" class=\"form-control\"\n            data-summernote-unobtrusive=\"\"\n            data-summernote-config-url=\"@summernoteOptions.CustomConfigPath\"\n            data-summernote-toolbar-config-url=\"@summernoteOptions.CustomToolbarConfigPath\"\n            data-summernote-config-language=\"@summernoteOptions.LanguageCode\"\n            data-summernote-config-dropfileuploadurl=\"@summernoteOptions.DropFileUrl\"\n            data-summernote-config-filebrowserurl=\"@summernoteOptions.FileBrowseUrl\"\n            data-summernote-config-imagebrowseurl=\"@summernoteOptions.ImageBrowseUrl\">\n        </textarea>\n    </div>\n    <div class=\"tab-pane\" id=\"tabCol4\" role=\"tabpanel\" aria-labelledby=\"cedit-tab4\">\n\n        <div class=\"d-flex align-items-stretch\">\n            <div class=\"cs-crop-container\">\n                <img id=\"dz4Image\" style=\"max-width:690px;\" src=\"@GetImageUrl(Model.SectionFourResizedUrl)\" />\n            </div>\n            <div class=\"d-flex flex-column\">\n                <div id=\"dz4\" class=\"cloudscribe-dropzone-standalone\" style=\"cursor:pointer;\"\n                     data-dropzone=\"\"\n                     data-upload-url=\"@Url.Action(\"DropFile\", \"FileManager\")\"\n                     data-anti-forgery-token=\"@tokens.RequestToken\"\n                     data-file-browse-url=\"@summernoteOptions.ImageBrowseUrl\"\n                     data-file-crop-url=\"@summernoteOptions.CropFileUrl\"\n                     data-target-path=\"@options.NewImagePath\"\n                     data-create-thumb=\"@options.CreateThumbnails.ToString().ToLower()\"\n                     data-resize-image=\"true\"\n                     data-keep-original=\"@options.KeepOriginalSizeImages.ToString().ToLower()\"\n                     data-enable-browse-server=\"@options.EnableBrowseServer.ToString().ToLower()\"\n                     data-enable-crop=\"@options.EnableCropping.ToString().ToLower()\"\n                     data-accepted-files=\"image/*\"\n                     data-target-fullsize-input-id=\"SectionFourFullSizeUrl\"\n                     data-target-resized-input-id=\"SectionFourResizedUrl\"\n                     data-target-thumb-input-id=\"\"\n                     data-target-fullsize-image-id=\"dz4Image\"\n                     data-target-resized-image-id=\"\"\n                     data-target-thumb-image-id=\"\"\n                     data-fullsize-placeholder-image=\"@options.PlaceholderImageUrl\"\n                     data-resized-placeholder-image=\"\"\n                     data-thumb-placeholder-image=\"\"\n                     data-resize-width=\"@options.ResizeMaxWidth\"\n                     data-resize-height=\"@options.ResizeMaxHeight\"\n                     data-crop-area-width=\"@options.CropAreaWidth\"\n                     data-crop-area-height=\"@options.CropAreaHeight\">\n                    @sr[\"Drop file here or click to browse device for file.\"]\n                </div>\n                <div class=\"ps-1 pt-1\">\n                    <div class=\"d-flex flex-column\">\n                        <button id=\"dz4-browse-server\" type=\"button\" class=\"mb-1 btn btn-primary collapse\">@sr[\"Browse Server\"] <i class=\"fas fa-search\" aria-hidden=\"true\"></i></button>\n                        <button id=\"dz4-save-crop\" type=\"button\" class=\"mb-1 btn btn-primary collapse\">@sr[\"Save Crop\"] <i class=\"far fa-save\" aria-hidden=\"true\"></i></button>\n                    </div>\n                </div>\n            </div>\n        </div>\n        <input asp-for=\"SectionFourFullSizeUrl\" type=\"hidden\" />\n        <input asp-for=\"SectionFourResizedUrl\" type=\"hidden\" />\n        <div class=\"mb-3\">\n            <label asp-for=\"SectionFourAltText\">@sr[\"Image Description\"]</label>\n            <input asp-for=\"SectionFourAltText\" class=\"form-control\" />\n        </div>\n        <div class=\"mb-3\">\n            <label asp-for=\"SectionFourHeading\">@sr[\"Section Heading - optional\"]</label>\n            <input asp-for=\"SectionFourHeading\" class=\"form-control\" />\n        </div>\n        <label asp-for=\"SectionFourContent\">@sr[\"Section 4 Content\"]</label>\n        <textarea asp-for=\"SectionFourContent\" rows=\"5\" class=\"form-control\"\n            data-summernote-unobtrusive=\"\"\n            data-summernote-config-url=\"@summernoteOptions.CustomConfigPath\"\n            data-summernote-toolbar-config-url=\"@summernoteOptions.CustomToolbarConfigPath\"\n            data-summernote-config-language=\"@summernoteOptions.LanguageCode\"\n            data-summernote-config-dropfileuploadurl=\"@summernoteOptions.DropFileUrl\"\n            data-summernote-config-filebrowserurl=\"@summernoteOptions.FileBrowseUrl\"\n            data-summernote-config-imagebrowseurl=\"@summernoteOptions.ImageBrowseUrl\">\n        </textarea>\n    </div>\n</div>\n\n<div id=\"fileBrowseDialog\" class=\"modal fade\" tabindex=\"-1\" role=\"dialog\">\n    <div class=\"modal-dialog modal-lg\" style=\"height:99%;min-width:99%!important;\">\n        <div class=\"modal-content\">\n            <div class=\"modal-header\">\n                <button type=\"button\" data-bs-dismiss=\"modal\" class=\"btn-close\" aria-label=\"Close\"></button>\n            </div>\n            <iframe id=\"frFileDialog\" frameborder=\"0\" style=\"overflow:hidden;height:100%;width:100%;min-height: 650px;\"></iframe>\n        </div>\n    </div>\n</div>"
  },
  {
    "path": "src/cloudscribe.SimpleContent.ContentTemplates.Bootstrap5/Views/Shared/ContentTemplates/SectionsWithImageRender.cshtml",
    "content": "﻿@model cloudscribe.SimpleContent.ContentTemplates.ViewModels.SectionsWithImageViewModel\n@{\n    Layout = \"_LayoutEmpty\";\n}\n<partial name=\"@Model.Layout\" model=\"Model\" />\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.ContentTemplates.Bootstrap5/Views/Shared/ContentTemplates/TwoSectionsWithImageEdit.cshtml",
    "content": "﻿@model cloudscribe.SimpleContent.ContentTemplates.ViewModels.SectionsWithImageViewModel\n@using cloudscribe.SimpleContent.ContentTemplates\n@using cloudscribe.SimpleContent.ContentTemplates.Configuration\n@using Microsoft.AspNetCore.Antiforgery\n@inject IStringLocalizer<ContentTemplateResources> sr\n@inject IAntiforgery antiforgery\n@inject ISummernoteOptionsResolver summernoteOptionsResolver\n@inject ICkeditorOptionsResolver editorOptionsResolver\n@inject IColumnTemplateOptionsProvider optionsProvider\n@{\n\n    var tokens = antiforgery.GetAndStoreTokens(Context);\n    var summernoteOptions = await summernoteOptionsResolver.GetSummernoteOptions();\n    var ckOptions = await editorOptionsResolver.GetCkeditorOptions();\n    var options = await optionsProvider.ResolveColumnTemplateOptions(Context.Request.Host.Host, Context.Request.Path);\n}\n@functions{\n    public string GetImageUrl(string imageUrl)\n    {\n        if (!string.IsNullOrWhiteSpace(imageUrl)) { return imageUrl; }\n        return \"/cr/images/690x517-placeholder.png\";\n    }\n}\n<p>@sr[\"Sections with no content body will not be shown even if they have images.\"]</p>\n<partial name=\"TwoSectionsWithImageEditLayoutSelector\" model=\"Model\" />\n<ul class=\"nav nav-tabs\" id=\"myTab\" role=\"tablist\">\n    <li class=\"nav-item\">\n        <a id=\"cedit-tab1\" class=\"nav-link active\" href=\"#tabCol1\" data-bs-toggle=\"tab\" role=\"tab\" aria-controls=\"tabCol1\" aria-selected=\"true\">@sr[\"Section 1\"]</a>\n    </li>\n    <li class=\"nav-item\">\n        <a id=\"cedit-tab2\" class=\"nav-link\" href=\"#tabCol2\" data-bs-toggle=\"tab\" role=\"tab\" aria-controls=\"tabCol2\" aria-selected=\"false\">@sr[\"Section 2\"]</a>\n    </li>\n</ul>\n<div id=\"myTabContent\" class=\"tab-content\">\n    <div class=\"tab-pane active\" id=\"tabCol1\" role=\"tabpanel\" aria-labelledby=\"cedit-tab1\">\n        <div class=\"d-flex align-items-stretch\">\n            <div class=\"cs-crop-container\">\n                <img id=\"dz1Image\" style=\"max-width:690px;\" src=\"@GetImageUrl(Model.SectionOneResizedUrl)\" />\n            </div>\n            <div class=\"d-flex flex-column\">\n                <div id=\"dz1\" class=\"cloudscribe-dropzone-standalone\" style=\"cursor:pointer;\"\n                     data-dropzone=\"\"\n                     data-upload-url=\"@Url.Action(\"DropFile\", \"FileManager\")\"\n                     data-anti-forgery-token=\"@tokens.RequestToken\"\n                     data-file-browse-url=\"@summernoteOptions.ImageBrowseUrl\"\n                     data-file-crop-url=\"@summernoteOptions.CropFileUrl\"\n                     data-target-path=\"@options.NewImagePath\"\n                     data-create-thumb=\"@options.CreateThumbnails.ToString().ToLower()\"\n                     data-resize-image=\"true\"\n                     data-keep-original=\"@options.KeepOriginalSizeImages.ToString().ToLower()\"\n                     data-enable-browse-server=\"@options.EnableBrowseServer.ToString().ToLower()\"\n                     data-enable-crop=\"@options.EnableCropping.ToString().ToLower()\"\n                     data-accepted-files=\"image/*\"\n                     data-target-fullsize-input-id=\"SectionOneFullSizeUrl\"\n                     data-target-resized-input-id=\"SectionOneResizedUrl\"\n                     data-target-thumb-input-id=\"\"\n                     data-target-fullsize-image-id=\"dz1Image\"\n                     data-target-resized-image-id=\"\"\n                     data-target-thumb-image-id=\"\"\n                     data-fullsize-placeholder-image=\"@options.PlaceholderImageUrl\"\n                     data-resized-placeholder-image=\"\"\n                     data-thumb-placeholder-image=\"\"\n                     data-resize-width=\"@options.ResizeMaxWidth\"\n                     data-resize-height=\"@options.ResizeMaxHeight\"\n                     data-crop-area-width=\"@options.CropAreaWidth\"\n                     data-crop-area-height=\"@options.CropAreaHeight\">\n                    @sr[\"Drop file here or click to browse device for file.\"]\n                </div>\n                <div class=\"ps-1 pt-1\">\n                    <div class=\"d-flex flex-column\">\n                        <button id=\"dz1-browse-server\" type=\"button\" class=\"mb-1 btn btn-primary collapse\">@sr[\"Browse Server\"] <i class=\"fas fa-search\" aria-hidden=\"true\"></i></button>\n                        <button id=\"dz1-save-crop\" type=\"button\" class=\"mb-1 btn btn-primary collapse\">@sr[\"Save Crop\"] <i class=\"far fa-save\" aria-hidden=\"true\"></i></button>\n                    </div>\n                </div>\n            </div>\n        </div>\n        <input asp-for=\"SectionOneFullSizeUrl\" type=\"hidden\" />\n        <input asp-for=\"SectionOneResizedUrl\" type=\"hidden\" />\n        <div class=\"mb-3\">\n            <label asp-for=\"SectionOneAltText\">@sr[\"Image Description\"]</label>\n            <input asp-for=\"SectionOneAltText\" class=\"form-control\" />\n        </div>\n        <div class=\"mb-3\">\n            <label asp-for=\"SectionOneHeading\">@sr[\"Section Heading - optional\"]</label>\n            <input asp-for=\"SectionOneHeading\" class=\"form-control\" />\n        </div>\n        <label asp-for=\"SectionOneContent\">@sr[\"Section 1 Content\"]</label>\n        <textarea asp-for=\"SectionOneContent\" rows=\"5\" class=\"form-control\"\n            data-summernote-unobtrusive=\"\"\n            data-summernote-config-url=\"@summernoteOptions.CustomConfigPath\"\n            data-summernote-toolbar-config-url=\"@summernoteOptions.CustomToolbarConfigPath\"\n            data-summernote-config-language=\"@summernoteOptions.LanguageCode\"\n            data-summernote-config-dropfileuploadurl=\"@summernoteOptions.DropFileUrl\"\n            data-summernote-config-filebrowserurl=\"@summernoteOptions.FileBrowseUrl\"\n            data-summernote-config-imagebrowseurl=\"@summernoteOptions.ImageBrowseUrl\">\n        </textarea>\n    </div>\n    <div class=\"tab-pane\" id=\"tabCol2\" role=\"tabpanel\" aria-labelledby=\"cedit-tab2\">\n        <div class=\"d-flex align-items-stretch\">\n            <div class=\"cs-crop-container\">\n                <img id=\"dz2Image\" style=\"max-width:690px;\" src=\"@GetImageUrl(Model.SectionTwoResizedUrl)\" />\n            </div>\n            <div class=\"d-flex flex-column\">\n                <div id=\"dz2\" class=\"cloudscribe-dropzone-standalone\" style=\"cursor:pointer;\"\n                     data-dropzone=\"\"\n                     data-upload-url=\"@Url.Action(\"DropFile\", \"FileManager\")\"\n                     data-anti-forgery-token=\"@tokens.RequestToken\"\n                     data-file-browse-url=\"@summernoteOptions.ImageBrowseUrl\"\n                     data-file-crop-url=\"@summernoteOptions.CropFileUrl\"\n                     data-target-path=\"@options.NewImagePath\"\n                     data-create-thumb=\"@options.CreateThumbnails.ToString().ToLower()\"\n                     data-resize-image=\"true\"\n                     data-keep-original=\"@options.KeepOriginalSizeImages.ToString().ToLower()\"\n                     data-enable-browse-server=\"@options.EnableBrowseServer.ToString().ToLower()\"\n                     data-enable-crop=\"@options.EnableCropping.ToString().ToLower()\"\n                     data-accepted-files=\"image/*\"\n                     data-target-fullsize-input-id=\"SectionTwoFullSizeUrl\"\n                     data-target-resized-input-id=\"SectionTwoResizedUrl\"\n                     data-target-thumb-input-id=\"\"\n                     data-target-fullsize-image-id=\"dz2Image\"\n                     data-target-resized-image-id=\"\"\n                     data-target-thumb-image-id=\"\"\n                     data-fullsize-placeholder-image=\"@options.PlaceholderImageUrl\"\n                     data-resized-placeholder-image=\"\"\n                     data-thumb-placeholder-image=\"\"\n                     data-resize-width=\"@options.ResizeMaxWidth\"\n                     data-resize-height=\"@options.ResizeMaxHeight\"\n                     data-crop-area-width=\"@options.CropAreaWidth\"\n                     data-crop-area-height=\"@options.CropAreaHeight\">\n                    @sr[\"Drop file here or click to browse device for file.\"]\n                </div>\n                <div class=\"ps-1 pt-1\">\n                    <div class=\"d-flex flex-column\">\n                        <button id=\"dz2-browse-server\" type=\"button\" class=\"mb-1 btn btn-primary collapse\">@sr[\"Browse Server\"] <i class=\"fas fa-search\" aria-hidden=\"true\"></i></button>\n                        <button id=\"dz2-save-crop\" type=\"button\" class=\"mb-1 btn btn-primary collapse\">@sr[\"Save Crop\"] <i class=\"far fa-save\" aria-hidden=\"true\"></i></button>\n                    </div>\n                </div>\n            </div>\n        </div>\n        <input asp-for=\"SectionTwoFullSizeUrl\" type=\"hidden\" />\n        <input asp-for=\"SectionTwoResizedUrl\" type=\"hidden\" />\n        <div class=\"mb-3\">\n            <label asp-for=\"SectionTwoAltText\">@sr[\"Image Description\"]</label>\n            <input asp-for=\"SectionTwoAltText\" class=\"form-control\" />\n        </div>\n        <div class=\"mb-3\">\n            <label asp-for=\"SectionTwoHeading\">@sr[\"Section Heading - optional\"]</label>\n            <input asp-for=\"SectionTwoHeading\" class=\"form-control\" />\n        </div>\n        <label asp-for=\"SectionTwoContent\">@sr[\"Section 2 Content\"]</label>\n        <textarea asp-for=\"SectionTwoContent\" rows=\"5\" class=\"form-control\"\n            data-summernote-unobtrusive=\"\"\n            data-summernote-config-url=\"@summernoteOptions.CustomConfigPath\"\n            data-summernote-toolbar-config-url=\"@summernoteOptions.CustomToolbarConfigPath\"\n            data-summernote-config-language=\"@summernoteOptions.LanguageCode\"\n            data-summernote-config-dropfileuploadurl=\"@summernoteOptions.DropFileUrl\"\n            data-summernote-config-filebrowserurl=\"@summernoteOptions.FileBrowseUrl\"\n            data-summernote-config-imagebrowseurl=\"@summernoteOptions.ImageBrowseUrl\">\n        </textarea>\n    </div>\n\n</div>\n\n<div id=\"fileBrowseDialog\" class=\"modal fade\" tabindex=\"-1\" role=\"dialog\">\n    <div class=\"modal-dialog modal-lg\" style=\"height:99%;min-width:99%!important;\">\n        <div class=\"modal-content\">\n            <div class=\"modal-header\">\n                <button type=\"button\" data-bs-dismiss=\"modal\" class=\"btn-close\" aria-label=\"Close\"></button>\n            </div>\n            <iframe id=\"frFileDialog\" frameborder=\"0\" style=\"overflow:hidden;height:100%;width:100%;min-height: 650px;\"></iframe>\n        </div>\n    </div>\n</div>"
  },
  {
    "path": "src/cloudscribe.SimpleContent.ContentTemplates.Bootstrap5/Views/Shared/ContentTemplates/TwoSectionsWithImageRender.cshtml",
    "content": "﻿@model cloudscribe.SimpleContent.ContentTemplates.ViewModels.SectionsWithImageViewModel\n@{\n    Layout = \"_LayoutEmpty\";\n}\n<partial name=\"@Model.Layout\" model=\"Model\" />\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.ContentTemplates.Bootstrap5/Views/Shared/EverythingBottomColumnsPartial.cshtml",
    "content": "﻿@model cloudscribe.SimpleContent.ContentTemplates.ViewModels.EverythingModel\n@{\n    var columnCount = 0;\n    if (!string.IsNullOrWhiteSpace(Model.SectionFiveContent)) { columnCount += 1; }\n    if (!string.IsNullOrWhiteSpace(Model.SectionSixContent)) { columnCount += 1; }\n    if (!string.IsNullOrWhiteSpace(Model.SectionSevenContent)) { columnCount += 1; }\n    if (!string.IsNullOrWhiteSpace(Model.SectionEightContent)) { columnCount += 1; }\n\n}\n@functions{\n    public string GetCssClass(int columnCount)\n    {\n        switch (columnCount)\n        {\n            case 4:\n                return \"col-12 col-md-6 col-lg-3\";\n            case 3:\n                return \"col-12 col-md-6 col-lg-4\";\n            case 2:\n                return \"col-12 col-md-6 col-lg-6\";\n\n            case 1:\n            default:\n                return \"col\";\n\n        }\n    }\n}\n<div class=\"row\">\n    @if (!string.IsNullOrWhiteSpace(Model.SectionFiveContent))\n    {\n        <div class=\"@GetCssClass(columnCount)\">\n            @if (!string.IsNullOrWhiteSpace(Model.SectionFiveResizedUrl))\n            {\n                <img src=\"@Model.SectionFiveResizedUrl\" class=\"img-fluid mb-1\" alt=\"@Model.SectionFiveAltText\" />\n            }\n            @if (!string.IsNullOrWhiteSpace(Model.SectionFiveHeading))\n            {\n                <h3>@Model.SectionFiveHeading</h3>\n            }\n            @Html.Raw(Model.SectionFiveContent)\n        </div>\n    }\n    @if (!string.IsNullOrWhiteSpace(Model.SectionSixContent))\n    {\n        <div class=\"@GetCssClass(columnCount)\">\n            @if (!string.IsNullOrWhiteSpace(Model.SectionSixResizedUrl))\n            {\n                <img src=\"@Model.SectionSixResizedUrl\" class=\"img-fluid mb-1\" alt=\"@Model.SectionSixAltText\" />\n            }\n            @if (!string.IsNullOrWhiteSpace(Model.SectionSixHeading))\n            {\n                <h3>@Model.SectionSixHeading</h3>\n            }\n            @Html.Raw(Model.SectionSixContent)\n        </div>\n    }\n    @if (!string.IsNullOrWhiteSpace(Model.SectionSevenContent))\n    {\n        <div class=\"@GetCssClass(columnCount)\">\n            @if (!string.IsNullOrWhiteSpace(Model.SectionSevenResizedUrl))\n            {\n                <img src=\"@Model.SectionSevenResizedUrl\" class=\"img-fluid mb-1\" alt=\"@Model.SectionSevenAltText\" />\n            }\n            @if (!string.IsNullOrWhiteSpace(Model.SectionSevenHeading))\n            {\n                <h3>@Model.SectionSevenHeading</h3>\n            }\n            @Html.Raw(Model.SectionSevenContent)\n        </div>\n    }\n    @if (!string.IsNullOrWhiteSpace(Model.SectionEightContent))\n    {\n        <div class=\"@GetCssClass(columnCount)\">\n            @if (!string.IsNullOrWhiteSpace(Model.SectionEightResizedUrl))\n            {\n                <img src=\"@Model.SectionEightResizedUrl\" class=\"img-fluid mb-1\" alt=\"@Model.SectionEightAltText\" />\n            }\n            @if (!string.IsNullOrWhiteSpace(Model.SectionEightHeading))\n            {\n                <h3>@Model.SectionEightHeading</h3>\n            }\n            @Html.Raw(Model.SectionEightContent)\n        </div>\n    }\n</div>\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.ContentTemplates.Bootstrap5/Views/Shared/EverythingBottomFloatedImagesPartial.cshtml",
    "content": "﻿@model cloudscribe.SimpleContent.ContentTemplates.ViewModels.EverythingModel\n@if (!string.IsNullOrWhiteSpace(Model.SectionOneContent))\n{\n<div class=\"clearfix\">\n    @if (!string.IsNullOrWhiteSpace(Model.SectionFiveHeading))\n    {\n        <h3>@Model.SectionFiveHeading</h3>\n    }\n    @if (!string.IsNullOrWhiteSpace(Model.SectionFiveResizedUrl))\n    {\n        <div class=\"float-md-end simple-side-image ms-md-2\">\n            <img class=\"img-fluid\" src=\"@Model.SectionFiveResizedUrl\" alt=\"@Model.SectionFiveAltText\" />\n        </div>\n    }\n    @Html.Raw(Model.SectionFiveContent)\n</div>\n    await Html.RenderPartialAsync(\"AdSpacePartial\");\n}\n@if (!string.IsNullOrWhiteSpace(Model.SectionSixContent))\n{\n<div class=\"clearfix\">\n    @if (!string.IsNullOrWhiteSpace(Model.SectionSixHeading))\n    {\n        <h3>@Model.SectionSixHeading</h3>\n    }\n    @if (!string.IsNullOrWhiteSpace(Model.SectionSixResizedUrl))\n    {\n        <div class=\"float-md-start simple-side-image me-md-2\">\n            <img class=\"img-fluid\" src=\"@Model.SectionSixResizedUrl\" alt=\"@Model.SectionSixAltText\" />\n        </div>\n    }\n    @Html.Raw(Model.SectionSixContent)\n</div>\n    await Html.RenderPartialAsync(\"AdSpacePartial\");\n}\n@if (!string.IsNullOrWhiteSpace(Model.SectionSevenContent))\n{\n<div class=\"clearfix\">\n    @if (!string.IsNullOrWhiteSpace(Model.SectionSevenHeading))\n    {\n        <h3>@Model.SectionSevenHeading</h3>\n    }\n    @if (!string.IsNullOrWhiteSpace(@Model.SectionSevenResizedUrl))\n    {\n        <div class=\"float-md-end simple-side-image ms-md-2\">\n            <img class=\"img-fluid\" src=\"@Model.SectionSevenResizedUrl\" alt=\"@Model.SectionSevenAltText\" />\n        </div>\n    }\n    @Html.Raw(Model.SectionSevenContent)\n</div>\n    await Html.RenderPartialAsync(\"AdSpacePartial\");\n}\n@if (!string.IsNullOrWhiteSpace(Model.SectionEightContent))\n{\n<div class=\"clearfix\">\n    @if (!string.IsNullOrWhiteSpace(Model.SectionEightHeading))\n    {\n        <h3>@Model.SectionEightHeading</h3>\n    }\n    @if (!string.IsNullOrWhiteSpace(Model.SectionEightResizedUrl))\n    {\n        <div class=\"float-md-start simple-side-image me-md-2\">\n            <img class=\"img-fluid\" src=\"@Model.SectionEightResizedUrl\" alt=\"@Model.SectionEightAltText\" />\n        </div>\n    }\n    @Html.Raw(Model.SectionEightContent)\n</div>\n    await Html.RenderPartialAsync(\"AdSpacePartial\");\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.ContentTemplates.Bootstrap5/Views/Shared/EverythingBottomSectionsLayoutSelector.cshtml",
    "content": "﻿@model cloudscribe.SimpleContent.ContentTemplates.ViewModels.EverythingModel\n@using cloudscribe.SimpleContent.ContentTemplates\n@inject IStringLocalizer<ContentTemplateResources> sr\n<div class=\"mb-3 row\">\n    <label asp-for=\"BottomSectionsLayout\" class=\"control-label col-md-1 ps-5\">@sr[\"Layout Sections 5 - 8\"]</label>\n    <div class=\"col-md-11\">\n        <select asp-for=\"BottomSectionsLayout\" class=\"form-control\">\n            <option value=\"EverythingBottomColumnsPartial\">@sr[\"Responsive equal width columns\"]</option>\n            <option value=\"EverythingBottomFloatedImagesPartial\">@sr[\"Sections with floated images alternating sides\"]</option>\n        </select>\n    </div>\n</div>\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.ContentTemplates.Bootstrap5/Views/Shared/EverythingCardsPartial.cshtml",
    "content": "﻿@model cloudscribe.SimpleContent.ContentTemplates.ViewModels.EverythingModel\n@using cloudscribe.SimpleContent.ContentTemplates\n@inject IStringLocalizer<ContentTemplateResources> sr\n<div class=\"row gallery-block cards-gallery simple-gallery\">\n    @for (int i = 0; i < Model.Items.Count; i++)\n    {\n        <div class=\"col-md-6 col-lg-4  gallery-item\">\n            <div class=\"card border-0 transform-on-hover\">\n                <a class=\"lightbox\" href=\"@Model.Items[i].ResizedUrl\">\n                    <img src=\"@Model.Items[i].ResizedUrl\" alt=\"@Model.Items[i].Description\" class=\"card-img-top\">\n                </a>\n                <div class=\"card-body\">\n                    @if (!string.IsNullOrWhiteSpace(@Model.Items[i].Title))\n                    {\n                        <h6>@Model.Items[i].Title</h6>\n                    }\n                    <p class=\"text-muted card-text\">@Model.Items[i].Description</p>\n                </div>\n            </div>\n        </div>\n    }\n</div>\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.ContentTemplates.Bootstrap5/Views/Shared/EverythingCarouselFullPartial.cshtml",
    "content": "﻿@model cloudscribe.SimpleContent.ContentTemplates.ViewModels.EverythingModel\n@using cloudscribe.SimpleContent.ContentTemplates\n@inject IStringLocalizer<ContentTemplateResources> sr\n@functions{\n    public string GetItemClass(int index)\n    {\n        if (index == 0) { return \"carousel-item active\"; }\n        return \"carousel-item\";\n    }\n}\n<div id=\"carouselRender\" class=\"carousel slide simple-gallery\" data-bs-ride=\"carousel\" data-bs-interval=\"@Model.CarouselIntervalInMilliseconds\" data-bs-pause=\"hover\">\n    <div class=\"carousel-inner\">\n        @for (int i = 0; i < Model.Items.Count; i++)\n        {\n            <div class=\"@GetItemClass(i)\">\n                <img class=\"d-block w-100\" src=\"@Model.Items[i].ResizedUrl\" alt=\"@Model.Items[i].Description\" />\n                <div class=\"carousel-caption d-none d-md-block\">\n                    <h5>@Model.Items[i].Title</h5>\n                </div>\n            </div>\n        }\n    </div>\n    <a class=\"carousel-control-prev\" href=\"#carouselRender\" role=\"button\" data-bs-slide=\"prev\">\n        <span class=\"carousel-control-prev-icon\" aria-hidden=\"true\"></span>\n        <span class=\"visually-hidden\">@sr[\"Previous\"]</span>\n    </a>\n    <a class=\"carousel-control-next\" href=\"#carouselRender\" role=\"button\" data-bs-slide=\"next\">\n        <span class=\"carousel-control-next-icon\" aria-hidden=\"true\"></span>\n        <span class=\"visually-hidden\">@sr[\"Next\"]</span>\n    </a>\n</div>\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.ContentTemplates.Bootstrap5/Views/Shared/EverythingCarouselLeftPartial.cshtml",
    "content": "﻿@model cloudscribe.SimpleContent.ContentTemplates.ViewModels.EverythingModel\n@using cloudscribe.SimpleContent.ContentTemplates\n@inject IStringLocalizer<ContentTemplateResources> sr\n@functions{\n    public string GetItemClass(int index)\n    {\n        if (index == 0) { return \"carousel-item active\"; }\n        return \"carousel-item\";\n    }\n}\n<div class=\"w-100 clearfix mb-2\">\n    <div id=\"carouselRender\" class=\"carousel slide simple-gallery float-md-start me-2 simple-gallery-side-carousel\" data-bs-ride=\"carousel\" data-bs-interval=\"@Model.CarouselIntervalInMilliseconds\" data-bs-pause=\"hover\">\n        <div class=\"carousel-inner\">\n            @for (int i = 0; i < Model.Items.Count; i++)\n            {\n                <div class=\"@GetItemClass(i)\">\n                    <img class=\"d-block w-100\" src=\"@Model.Items[i].ResizedUrl\" alt=\"@Model.Items[i].Description\" />\n                    <div class=\"carousel-caption d-none d-md-block\">\n                        <h5>@Model.Items[i].Title</h5>\n                    </div>\n                </div>\n            }\n        </div>\n        <a class=\"carousel-control-prev\" href=\"#carouselRender\" role=\"button\" data-bs-slide=\"prev\">\n            <span class=\"carousel-control-prev-icon\" aria-hidden=\"true\"></span>\n            <span class=\"visually-hidden\">@sr[\"Previous\"]</span>\n        </a>\n        <a class=\"carousel-control-next\" href=\"#carouselRender\" role=\"button\" data-bs-slide=\"next\">\n            <span class=\"carousel-control-next-icon\" aria-hidden=\"true\"></span>\n            <span class=\"visually-hidden\">@sr[\"Next\"]</span>\n        </a>\n    </div>\n\n</div>\n\n\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.ContentTemplates.Bootstrap5/Views/Shared/EverythingCarouselRightPartial.cshtml",
    "content": "﻿@model cloudscribe.SimpleContent.ContentTemplates.ViewModels.EverythingModel\n@using cloudscribe.SimpleContent.ContentTemplates\n@inject IStringLocalizer<ContentTemplateResources> sr\n@functions{\n    public string GetItemClass(int index)\n    {\n        if (index == 0) { return \"carousel-item active\"; }\n        return \"carousel-item\";\n    }\n}\n<div class=\"w-100 clearfix mb-2\">\n    <div id=\"carouselRender\" class=\"carousel slide simple-gallery float-md-end ms-2 simple-gallery-side-carousel\" data-bs-ride=\"carousel\" data-bs-interval=\"@Model.CarouselIntervalInMilliseconds\" data-bs-pause=\"hover\">\n        <div class=\"carousel-inner\">\n            @for (int i = 0; i < Model.Items.Count; i++)\n            {\n                <div class=\"@GetItemClass(i)\">\n                    <img class=\"d-block w-100\" src=\"@Model.Items[i].ResizedUrl\" alt=\"@Model.Items[i].Description\" />\n                    <div class=\"carousel-caption d-none d-md-block\">\n                        <h5>@Model.Items[i].Title</h5>\n                    </div>\n                </div>\n            }\n        </div>\n        <a class=\"carousel-control-prev\" href=\"#carouselRender\" role=\"button\" data-bs-slide=\"prev\">\n            <span class=\"carousel-control-prev-icon\" aria-hidden=\"true\"></span>\n            <span class=\"visually-hidden\">@sr[\"Previous\"]</span>\n        </a>\n        <a class=\"carousel-control-next\" href=\"#carouselRender\" role=\"button\" data-bs-slide=\"next\">\n            <span class=\"carousel-control-next-icon\" aria-hidden=\"true\"></span>\n            <span class=\"visually-hidden\">@sr[\"Next\"]</span>\n        </a>\n    </div>\n</div>\n\n\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.ContentTemplates.Bootstrap5/Views/Shared/EverythingCompactPartial.cshtml",
    "content": "﻿@model cloudscribe.SimpleContent.ContentTemplates.ViewModels.EverythingModel\n@using cloudscribe.SimpleContent.ContentTemplates\n@inject IStringLocalizer<ContentTemplateResources> sr\n<div class=\"row no-gutters gallery-block compact-gallery simple-gallery\">\n    @for (int i = 0; i < Model.Items.Count; i++)\n    {\n        <div class=\"col-md-6 col-lg-4 item zoom-on-hover\">\n            <a class=\"lightbox\" href=\"@Model.Items[i].ResizedUrl\">\n                <img class=\"img-fluid image\" src=\"@Model.Items[i].ResizedUrl\">\n                <span class=\"description\">\n                    <span class=\"description-heading\">@Model.Items[i].Title</span>\n                    <span class=\"description-body\">@Model.Items[i].Description</span>\n                </span>\n            </a>\n        </div>\n    }\n</div>\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.ContentTemplates.Bootstrap5/Views/Shared/EverythingGalleryLayoutSelector.cshtml",
    "content": "﻿@model cloudscribe.SimpleContent.ContentTemplates.ViewModels.EverythingModel\n@using cloudscribe.SimpleContent.ContentTemplates\n@inject IStringLocalizer<ContentTemplateResources> sr\n<div class=\"mb-3 row\">\n    <label asp-for=\"GalleryLayout\" class=\"control-label col-md-1 ps-5\">@sr[\"Layout\"]</label>\n    <div class=\"col-md-11\">\n        <select asp-for=\"GalleryLayout\" class=\"form-control\">\n            <option value=\"EverythingCardsPartial\">@sr[\"Cards\"]</option>\n            <option value=\"EverythingCompactPartial\">@sr[\"Compact\"]</option>\n            <option value=\"EverythingGridPartial\">@sr[\"Grid\"]</option>\n            <option value=\"EverythingCarouselFullPartial\">@sr[\"Carousel - Full Width\"]</option>\n            <option value=\"EverythingCarouselLeftPartial\">@sr[\"Carousel on Left With Wrapped Top Content\"]</option>\n            <option value=\"EverythingCarouselRightPartial\">@sr[\"Carousel on Right With Wrapped Top Content\"]</option>\n        </select>\n    </div>\n</div>\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.ContentTemplates.Bootstrap5/Views/Shared/EverythingGridPartial.cshtml",
    "content": "﻿@model cloudscribe.SimpleContent.ContentTemplates.ViewModels.EverythingModel\n@using cloudscribe.SimpleContent.ContentTemplates\n@inject IStringLocalizer<ContentTemplateResources> sr\n<div class=\"row gallery-block grid-gallery simple-gallery\">\n    @for (int i = 0; i < Model.Items.Count; i++)\n    {\n        <div class=\"col-md-6 col-lg-4 item\">\n            <a class=\"lightbox\" href=\"@Model.Items[i].ResizedUrl\">\n                <img class=\"img-fluid image scale-on-hover\" src=\"@Model.Items[i].ResizedUrl\" title=\"@Model.Items[i].Title\" alt=\"@Model.Items[i].Description\">\n            </a>\n        </div>\n    }\n</div>\n\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.ContentTemplates.Bootstrap5/Views/Shared/EverythingRenderPartial.cshtml",
    "content": "﻿@model cloudscribe.SimpleContent.ContentTemplates.ViewModels.EverythingModel\n@using cloudscribe.SimpleContent.ContentTemplates\n@inject IStringLocalizer<ContentTemplateResources> sr\n<partial name=\"@Model.TopSectionsLayout\" model=\"Model\" />\n@if (Model.Items.Count > 0)\n{\n    <div class=\"w-100\">\n        <partial name=\"@Model.GalleryLayout\" model=\"Model\" />\n    </div>\n}\n    <partial name=\"@Model.BottomSectionsLayout\" model=\"Model\" />"
  },
  {
    "path": "src/cloudscribe.SimpleContent.ContentTemplates.Bootstrap5/Views/Shared/EverythingTopColumnsPartial.cshtml",
    "content": "﻿@model cloudscribe.SimpleContent.ContentTemplates.ViewModels.EverythingModel\n@{\n    var columnCount = 0;\n    if (!string.IsNullOrWhiteSpace(Model.SectionOneContent)) { columnCount += 1; }\n    if (!string.IsNullOrWhiteSpace(Model.SectionTwoContent)) { columnCount += 1; }\n    if (!string.IsNullOrWhiteSpace(Model.SectionThreeContent)) { columnCount += 1; }\n    if (!string.IsNullOrWhiteSpace(Model.SectionFourContent)) { columnCount += 1; }\n\n}\n@functions{\n    public string GetCssClass(int columnCount)\n    {\n        switch (columnCount)\n        {\n            case 4:\n                return \"col-12 col-md-6 col-lg-3\";\n            case 3:\n                return \"col-12 col-md-6 col-lg-4\";\n            case 2:\n                return \"col-12 col-md-6 col-lg-6\";\n\n            case 1:\n            default:\n                return \"col\";\n\n        }\n    }\n}\n<div class=\"row\">\n    @if (!string.IsNullOrWhiteSpace(Model.SectionOneContent))\n    {\n        <div class=\"@GetCssClass(columnCount)\">\n            @if (!string.IsNullOrWhiteSpace(Model.SectionOneResizedUrl))\n            {\n                <img src=\"@Model.SectionOneResizedUrl\" class=\"img-fluid mb-1\" alt=\"@Model.SectionOneAltText\" />\n            }\n            @if (!string.IsNullOrWhiteSpace(Model.SectionOneHeading))\n            {\n                <h3>@Model.SectionOneHeading</h3>\n            }\n            @Html.Raw(Model.SectionOneContent)\n        </div>\n    }\n    @if (!string.IsNullOrWhiteSpace(Model.SectionTwoContent))\n    {\n        <div class=\"@GetCssClass(columnCount)\">\n            @if (!string.IsNullOrWhiteSpace(Model.SectionTwoResizedUrl))\n            {\n                <img src=\"@Model.SectionTwoResizedUrl\" class=\"img-fluid mb-1\" alt=\"@Model.SectionTwoAltText\" />\n            }\n            @if (!string.IsNullOrWhiteSpace(Model.SectionTwoHeading))\n            {\n                <h3>@Model.SectionTwoHeading</h3>\n            }\n            @Html.Raw(Model.SectionTwoContent)\n        </div>\n    }\n    @if (!string.IsNullOrWhiteSpace(Model.SectionThreeContent))\n    {\n        <div class=\"@GetCssClass(columnCount)\">\n            @if (!string.IsNullOrWhiteSpace(Model.SectionThreeResizedUrl))\n            {\n                <img src=\"@Model.SectionThreeResizedUrl\" class=\"img-fluid mb-1\" alt=\"@Model.SectionThreeAltText\" />\n            }\n            @if (!string.IsNullOrWhiteSpace(Model.SectionThreeHeading))\n            {\n                <h3>@Model.SectionThreeHeading</h3>\n            }\n            @Html.Raw(Model.SectionThreeContent)\n        </div>\n    }\n    @if (!string.IsNullOrWhiteSpace(Model.SectionFourContent))\n    {\n        <div class=\"@GetCssClass(columnCount)\">\n            @if (!string.IsNullOrWhiteSpace(Model.SectionFourResizedUrl))\n            {\n                <img src=\"@Model.SectionFourResizedUrl\" class=\"img-fluid mb-1\" alt=\"@Model.SectionFourAltText\" />\n            }\n            @if (!string.IsNullOrWhiteSpace(Model.SectionFourHeading))\n            {\n                <h3>@Model.SectionFourHeading</h3>\n            }\n            @Html.Raw(Model.SectionFourContent)\n        </div>\n    }\n</div>\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.ContentTemplates.Bootstrap5/Views/Shared/EverythingTopFloatedImagesPartial.cshtml",
    "content": "﻿@model cloudscribe.SimpleContent.ContentTemplates.ViewModels.EverythingModel\n@if (!string.IsNullOrWhiteSpace(Model.SectionOneContent))\n{\n    <div class=\"clearfix\">\n        @if (!string.IsNullOrWhiteSpace(Model.SectionOneHeading))\n        {\n            <h3>@Model.SectionOneHeading</h3>\n        }\n        @if (!string.IsNullOrWhiteSpace(Model.SectionOneResizedUrl))\n        {\n            <div class=\"float-md-end simple-side-image ms-md-2\">\n                <img class=\"img-fluid\" src=\"@Model.SectionOneResizedUrl\" alt=\"@Model.SectionOneAltText\" />\n            </div>\n        }\n        @Html.Raw(Model.SectionOneContent)\n    </div>\n    await Html.RenderPartialAsync(\"AdSpacePartial\");\n}\n@if (!string.IsNullOrWhiteSpace(Model.SectionTwoContent))\n{\n    <div class=\"clearfix\">\n        @if (!string.IsNullOrWhiteSpace(Model.SectionTwoHeading))\n        {\n            <h3>@Model.SectionTwoHeading</h3>\n        }\n        @if (!string.IsNullOrWhiteSpace(@Model.SectionTwoResizedUrl))\n        {\n            <div class=\"float-md-start simple-side-image me-md-2\">\n                <img class=\"img-fluid\" src=\"@Model.SectionTwoResizedUrl\" alt=\"@Model.SectionTwoAltText\" />\n            </div>\n        }\n        @Html.Raw(Model.SectionTwoContent)\n    </div>\n    await Html.RenderPartialAsync(\"AdSpacePartial\");\n}\n@if (!string.IsNullOrWhiteSpace(Model.SectionThreeContent))\n{\n    <div class=\"clearfix\">\n        @if (!string.IsNullOrWhiteSpace(Model.SectionThreeHeading))\n        {\n            <h3>@Model.SectionThreeHeading</h3>\n        }\n        @if (!string.IsNullOrWhiteSpace(Model.SectionThreeResizedUrl))\n        {\n            <div class=\"float-md-end simple-side-image ms-md-2\">\n                <img class=\"img-fluid\" src=\"@Model.SectionThreeResizedUrl\" alt=\"@Model.SectionThreeAltText\" />\n            </div>\n        }\n        @Html.Raw(Model.SectionThreeContent)\n    </div>\n    await Html.RenderPartialAsync(\"AdSpacePartial\");\n}\n@if (!string.IsNullOrWhiteSpace(Model.SectionFourContent))\n{\n    <div class=\"clearfix\">\n        @if (!string.IsNullOrWhiteSpace(Model.SectionFourHeading))\n        {\n            <h3>@Model.SectionFourHeading</h3>\n        }\n        @if (!string.IsNullOrWhiteSpace(Model.SectionFourResizedUrl))\n        {\n            <div class=\"float-md-start simple-side-image me-md-2\">\n                <img class=\"img-fluid\" src=\"@Model.SectionFourResizedUrl\" alt=\"@Model.SectionFourAltText\" />\n            </div>\n        }\n        @Html.Raw(Model.SectionFourContent)\n    </div>\n    await Html.RenderPartialAsync(\"AdSpacePartial\");\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.ContentTemplates.Bootstrap5/Views/Shared/EverythingTopSectionsLayoutSelector.cshtml",
    "content": "﻿@model cloudscribe.SimpleContent.ContentTemplates.ViewModels.EverythingModel\n@using cloudscribe.SimpleContent.ContentTemplates\n@inject IStringLocalizer<ContentTemplateResources> sr\n<div class=\"mb-3 row\">\n    <label asp-for=\"TopSectionsLayout\" class=\"control-label col-md-1 ps-5\">@sr[\"Layout Sections 1 - 4\"]</label>\n    <div class=\"col-md-11\">\n        <select asp-for=\"TopSectionsLayout\" class=\"form-control\">\n            <option value=\"EverythingTopColumnsPartial\">@sr[\"Responsive equal width columns\"]</option>\n            <option value=\"EverythingTopFloatedImagesPartial\">@sr[\"Sections with floated images alternating sides\"]</option>\n        </select>\n    </div>\n</div>\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.ContentTemplates.Bootstrap5/Views/Shared/GalleryWithContentEditLayoutSelector.cshtml",
    "content": "﻿@model cloudscribe.SimpleContent.ContentTemplates.ViewModels.SimpleGalleryViewModel\n@using cloudscribe.SimpleContent.ContentTemplates\n@inject IStringLocalizer<ContentTemplateResources> sr\n<div class=\"mb-3 row\">\n    <label asp-for=\"Layout\" class=\"control-label col-md-1 ps-5\">@sr[\"Layout\"]</label>\n    <div class=\"col-md-11\">\n        <select asp-for=\"Layout\" class=\"form-control\">\n            <option value=\"GalleryWithContentRenderCardsPartial\">@sr[\"Cards\"]</option>\n            <option value=\"GalleryWithContentRenderCompactPartial\">@sr[\"Compact\"]</option>\n            <option value=\"GalleryWithContentRenderGridPartial\">@sr[\"Grid\"]</option>\n            <option value=\"GalleryWithContentRenderCarouselFullPartial\">@sr[\"Carousel - Full Width\"]</option>\n            <option value=\"GalleryWithContentRenderCarouselLeftPartial\">@sr[\"Carousel on Left With Wrapped Top Content\"]</option>\n            <option value=\"GalleryWithContentRenderCarouselRightPartial\">@sr[\"Carousel on Right With Wrapped Top Content\"]</option>\n        </select>\n    </div>\n</div>"
  },
  {
    "path": "src/cloudscribe.SimpleContent.ContentTemplates.Bootstrap5/Views/Shared/GalleryWithContentRenderCardsPartial.cshtml",
    "content": "﻿@model cloudscribe.SimpleContent.ContentTemplates.ViewModels.SimpleGalleryViewModel\n@using cloudscribe.SimpleContent.ContentTemplates\n@inject IStringLocalizer<ContentTemplateResources> sr\n<div class=\"content-top\">\n    @Html.Raw(Model.ContentAbove)\n</div>\n<div class=\"row gallery-block cards-gallery simple-gallery\">\n    @for (int i = 0; i < Model.Items.Count; i++)\n    {\n        <div class=\"col-md-6 col-lg-4 gallery-item\">\n            <div class=\"card border-0 transform-on-hover\">\n                <a class=\"lightbox\" href=\"@Model.Items[i].ResizedUrl\">\n                    <img src=\"@Model.Items[i].ResizedUrl\" alt=\"@Model.Items[i].AltText\" class=\"card-img-top\">\n                </a>\n                <div class=\"card-body\">\n                    @if (!string.IsNullOrWhiteSpace(@Model.Items[i].Title))\n                    {\n                        if (!string.IsNullOrWhiteSpace(@Model.Items[i].LinkUrl))\n                        {\n                            <a href=\"@Model.Items[i].LinkUrl.Trim()\"><h6>@Model.Items[i].Title</h6></a>\n                        }\n                        else\n                        {\n                            <h6>@Model.Items[i].Title</h6>\n                        }\n                    }\n                    <p class=\"text-muted card-text\">@Model.Items[i].Description</p>\n                </div>\n            </div>\n        </div>\n    }\n</div>\n<div class=\"content-bottom\">\n    @Html.Raw(Model.ContentBelow)\n</div>\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.ContentTemplates.Bootstrap5/Views/Shared/GalleryWithContentRenderCarouselFullPartial.cshtml",
    "content": "﻿@model cloudscribe.SimpleContent.ContentTemplates.ViewModels.SimpleGalleryViewModel\n@using cloudscribe.SimpleContent.ContentTemplates\n@inject IStringLocalizer<ContentTemplateResources> sr\n@functions \n{\n    public string GetItemClass(int index)\n    {\n        if (index == 0) { return \"carousel-item active\"; }\n        return \"carousel-item\";\n    }\n}\n<div class=\"content-top\">\n    @Html.Raw(Model.ContentAbove)\n</div>\n<div id=\"carouselRender\" class=\"carousel slide simple-gallery\" data-bs-ride=\"carousel\" data-bs-interval=\"@Model.CarouselIntervalInMilliseconds\" data-bs-pause=\"hover\">\n    <div class=\"carousel-inner\">\n        @for (int i = 0; i < Model.Items.Count; i++)\n        {\n        <div class=\"@GetItemClass(i)\">\n\n            <img class=\"d-block w-100\" src=\"@Model.Items[i].ResizedUrl\" alt=\"@Model.Items[i].AltText\" />\n\n            <div class=\"carousel-caption d-none d-md-block\">\n                @if (!string.IsNullOrWhiteSpace(@Model.Items[i].LinkUrl))\n                {\n                    <a href=\"@Model.Items[i].LinkUrl.Trim()\"><h5>@Model.Items[i].Title</h5></a>\n                }\n                else\n                {\n                    <h5>@Model.Items[i].Title</h5>\n                }\n\n                <p>@Model.Items[i].Description</p>\n            </div>\n        </div>\n        }\n    </div>\n    <a class=\"carousel-control-prev\" href=\"#carouselRender\" role=\"button\" data-bs-slide=\"prev\">\n        <span class=\"carousel-control-prev-icon\" aria-hidden=\"true\"></span>\n        <span class=\"visually-hidden\">@sr[\"Previous\"]</span>\n    </a>\n    <a class=\"carousel-control-next\" href=\"#carouselRender\" role=\"button\" data-bs-slide=\"next\">\n        <span class=\"carousel-control-next-icon\" aria-hidden=\"true\"></span>\n        <span class=\"visually-hidden\">@sr[\"Next\"]</span>\n    </a>\n</div>\n<div class=\"content-bottom\">\n    @Html.Raw(Model.ContentBelow)\n</div>\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.ContentTemplates.Bootstrap5/Views/Shared/GalleryWithContentRenderCarouselLeftPartial.cshtml",
    "content": "﻿@model cloudscribe.SimpleContent.ContentTemplates.ViewModels.SimpleGalleryViewModel\n@using cloudscribe.SimpleContent.ContentTemplates\n@inject IStringLocalizer<ContentTemplateResources> sr\n@functions{\n    public string GetItemClass(int index)\n    {\n        if (index == 0) { return \"carousel-item active\"; }\n        return \"carousel-item\";\n    }\n}\n<div id=\"carouselRender\" class=\"carousel slide simple-gallery float-md-start me-2 simple-gallery-side-carousel\" data-bs-ride=\"carousel\" data-bs-interval=\"@Model.CarouselIntervalInMilliseconds\" data-bs-pause=\"hover\">\n    <div class=\"carousel-inner\">\n        @for (int i = 0; i < Model.Items.Count; i++)\n        {\n            <div class=\"@GetItemClass(i)\">\n\n                <img class=\"d-block w-100\" src=\"@Model.Items[i].ResizedUrl\" alt=\"@Model.Items[i].AltText\" />\n\n                <div class=\"carousel-caption d-none d-md-block\">\n                    @if (!string.IsNullOrWhiteSpace(@Model.Items[i].LinkUrl))\n                    {\n                        <a href=\"@Model.Items[i].LinkUrl.Trim()\"><h5>@Model.Items[i].Title</h5></a>\n                    }\n                    else\n                    {\n                        <h5>@Model.Items[i].Title</h5>\n                    }\n                    <p>@Model.Items[i].Description</p>\n                </div>\n            </div>\n        }\n    </div>\n    <a class=\"carousel-control-prev\" href=\"#carouselRender\" role=\"button\" data-bs-slide=\"prev\">\n        <span class=\"carousel-control-prev-icon\" aria-hidden=\"true\"></span>\n        <span class=\"visually-hidden\">@sr[\"Previous\"]</span>\n    </a>\n    <a class=\"carousel-control-next\" href=\"#carouselRender\" role=\"button\" data-bs-slide=\"next\">\n        <span class=\"carousel-control-next-icon\" aria-hidden=\"true\"></span>\n        <span class=\"visually-hidden\">@sr[\"Next\"]</span>\n    </a>\n</div>\n@Html.Raw(Model.ContentAbove)\n<div class=\"content-bottom\">\n    @Html.Raw(Model.ContentBelow)\n</div>\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.ContentTemplates.Bootstrap5/Views/Shared/GalleryWithContentRenderCarouselRightPartial.cshtml",
    "content": "﻿@model cloudscribe.SimpleContent.ContentTemplates.ViewModels.SimpleGalleryViewModel\n@using cloudscribe.SimpleContent.ContentTemplates\n@inject IStringLocalizer<ContentTemplateResources> sr\n@functions{\n    public string GetItemClass(int index)\n    {\n        if (index == 0) { return \"carousel-item active\"; }\n        return \"carousel-item\";\n    }\n}\n<div id=\"carouselRender\" class=\"carousel slide simple-gallery float-md-end ms-2 simple-gallery-side-carousel\" data-bs-ride=\"carousel\" data-bs-interval=\"@Model.CarouselIntervalInMilliseconds\" data-bs-pause=\"hover\">\n    <div class=\"carousel-inner\">\n        @for (int i = 0; i < Model.Items.Count; i++)\n        {\n            <div class=\"@GetItemClass(i)\">\n                <img class=\"d-block w-100\" src=\"@Model.Items[i].ResizedUrl\" alt=\"@Model.Items[i].AltText\" />\n                <div class=\"carousel-caption d-none d-md-block\">\n                    @if (!string.IsNullOrWhiteSpace(@Model.Items[i].LinkUrl))\n                    {\n                        <a href=\"@Model.Items[i].LinkUrl.Trim()\"><h5>@Model.Items[i].Title</h5></a>\n                    }\n                    else\n                    {\n                        <h5>@Model.Items[i].Title</h5>\n                    }\n                    <p>@Model.Items[i].Description</p>\n                </div>\n            </div>\n        }\n    </div>\n    <a class=\"carousel-control-prev\" href=\"#carouselRender\" role=\"button\" data-bs-slide=\"prev\">\n        <span class=\"carousel-control-prev-icon\" aria-hidden=\"true\"></span>\n        <span class=\"visually-hidden\">@sr[\"Previous\"]</span>\n    </a>\n    <a class=\"carousel-control-next\" href=\"#carouselRender\" role=\"button\" data-bs-slide=\"next\">\n        <span class=\"carousel-control-next-icon\" aria-hidden=\"true\"></span>\n        <span class=\"visually-hidden\">@sr[\"Next\"]</span>\n    </a>\n</div>\n@Html.Raw(Model.ContentAbove)\n<div class=\"content-bottom\">\n    @Html.Raw(Model.ContentBelow)\n</div>\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.ContentTemplates.Bootstrap5/Views/Shared/GalleryWithContentRenderCompactPartial.cshtml",
    "content": "﻿@model cloudscribe.SimpleContent.ContentTemplates.ViewModels.SimpleGalleryViewModel\n@using cloudscribe.SimpleContent.ContentTemplates\n@inject IStringLocalizer<ContentTemplateResources> sr\n<div class=\"content-top\">\n    @Html.Raw(Model.ContentAbove)\n</div>\n<div class=\"row no-gutters gallery-block compact-gallery simple-gallery\">\n    @for (int i = 0; i < Model.Items.Count; i++)\n    {\n    <div class=\"col-md-6 col-lg-4 item zoom-on-hover\">\n        <a class=\"lightbox\" href=\"@Model.Items[i].ResizedUrl\">\n            <img class=\"img-fluid image\" src=\"@Model.Items[i].ResizedUrl\">\n\n        </a>\n        <span class=\"description\">\n            @if (!string.IsNullOrWhiteSpace(@Model.Items[i].LinkUrl))\n            {\n                <a href=\"@Model.Items[i].LinkUrl.Trim()\"><span class=\"description-heading\">@Model.Items[i].Title</span></a>\n            }\n            else\n            {\n                <span class=\"description-heading\">@Model.Items[i].Title</span>\n            }\n            \n            <span class=\"description-body\">@Model.Items[i].Description</span>\n        </span>\n    </div>\n    }\n</div>\n<div class=\"content-bottom\">\n    @Html.Raw(Model.ContentBelow)\n</div>\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.ContentTemplates.Bootstrap5/Views/Shared/GalleryWithContentRenderGridPartial.cshtml",
    "content": "﻿@model cloudscribe.SimpleContent.ContentTemplates.ViewModels.SimpleGalleryViewModel\n@using cloudscribe.SimpleContent.ContentTemplates\n@inject IStringLocalizer<ContentTemplateResources> sr\n<div class=\"content-top\">\n    @Html.Raw(Model.ContentAbove)\n</div>\n<div class=\"row gallery-block grid-gallery simple-gallery\">\n    @for (int i = 0; i < Model.Items.Count; i++)\n    {\n    <div class=\"col-md-6 col-lg-4 item\">\n        <a class=\"lightbox\" href=\"@Model.Items[i].ResizedUrl\">\n            <img class=\"img-fluid image scale-on-hover\" src=\"@Model.Items[i].ResizedUrl\" title=\"@Model.Items[i].Title\" alt=\"@Model.Items[i].Description\">\n        </a>\n        <div class=\"d-none d-md-block\">\n            @if (!string.IsNullOrWhiteSpace(@Model.Items[i].LinkUrl))\n            {\n                <a href=\"@Model.Items[i].LinkUrl.Trim()\"><h5>@Model.Items[i].Title</h5></a>\n            }\n            else\n            {\n                <h5>@Model.Items[i].Title</h5>\n            }\n            <p>@Model.Items[i].Description</p>\n        </div>\n    </div>\n    }\n</div>\n<div class=\"content-bottom\">\n    @Html.Raw(Model.ContentBelow)\n</div>\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.ContentTemplates.Bootstrap5/Views/Shared/LinksRenderPartial.cshtml",
    "content": "﻿@model cloudscribe.SimpleContent.ContentTemplates.ViewModels.ListWithContentModel\n@using cloudscribe.SimpleContent.ContentTemplates\n@using cloudscribe.SimpleContent.ContentTemplates.Configuration\n@using cloudscribe.SimpleContent.ContentTemplates.ViewModels\n@inject IStringLocalizer<ContentTemplateResources> sr\n@inject ILinkListOptionsProvider optionsProvider\n@inject IOptions<IconCssClasses> iconClassesAccessor\n\n@{\n    var icons = iconClassesAccessor.Value;\n    var sorted = Model.Items.OrderBy(x => x.Sort).ToList();\n    var options = await optionsProvider.ResolveLinkListOptions(Context.Request.Host.Host, Context.Request.Path);\n    var imageStyle = \"height:\" + options.ImageRenderMaxHeight.ToString() + \"px;\";\n}\n@functions {\n    public string GetTarget(ListItemModel item)\n    {\n        if (item.OpensInNewWindow) { return \"_blank\"; }\n        return null;\n    }\n}\n<div class=\"content-top\">\n    @Html.Raw(Model.ContentAbove)\n</div>\n<ul class=\"list-group\">\n    @for (int i = 0; i < Model.Items.Count; i++)\n    {\n    <li class=\"list-group-item d-flex justify-content-between align-items-start flex-column\">\n        <div>\n            <h4 class=\"d-flex align-items-start\"><a href=\"@sorted[i].LinkUrl\" target=\"@GetTarget(sorted[i])\">@sorted[i].Title</a> \n                @if (GetTarget(sorted[i]) == \"_blank\")\n                {\n                    <span class=\"@icons.OpenInNewWindow ms-2 fs-6\" aria-hidden=\"true\"></span>\n                }\n            </h4>\n        </div>\n        <div class=\"d-flex me-auto\">\n            @if (!string.IsNullOrWhiteSpace(sorted[i].ResizedUrl))\n            {\n                <a target=\"@GetTarget(sorted[i])\" href=\"@sorted[i].LinkUrl\">\n                    <img class=\"flex-start me-2\" src=\"@sorted[i].ResizedUrl\" style=\"@imageStyle\" alt=\"@sorted[i].AltText\" />\n                </a>\n            }\n            <p class=\"list-group-item-description\">@sorted[i].Description</p>\n        </div>\n    </li>\n    }\n</ul>\n<div class=\"mt-3 content-bottom\">\n    @Html.Raw(Model.ContentBelow)\n</div>"
  },
  {
    "path": "src/cloudscribe.SimpleContent.ContentTemplates.Bootstrap5/Views/Shared/RoleBasedContentRenderPartial.cshtml",
    "content": "﻿@model cloudscribe.SimpleContent.ContentTemplates.ViewModels.RoleBasedContentViewModel\n\n@using System.Security.Claims\n@using cloudscribe.SimpleContent.ContentTemplates\n@using cloudscribe.SimpleContent.ContentTemplates.Configuration\n@using Microsoft.AspNetCore.Antiforgery\n@using Newtonsoft.Json;\n@using System.Net\n@inject IAntiforgery antiforgery\n\n@{\n    var isAuthenticated = User.Identity.IsAuthenticated;\n    var meetsRoles = false;\n\n    if(!string.IsNullOrWhiteSpace(Model.Roles))\n    {\n        var roles = Model.Roles.Split(\",\").Select(r => r.Trim()).ToList();\n        meetsRoles = CaseInsensitiveRoleMatch(User, roles);\n    }\n}\n\n@functions{\n\n    private bool CaseInsensitiveRoleMatch(ClaimsPrincipal user, List<string> roles)\n    {\n        var lowerCaseRoles = roles.Select(r => r.ToLower()).ToList();\n\n        foreach (var claim in Context.User.Claims.Where(c => c.Type.Equals(ClaimTypes.Role) || c.Type.ToLower() == \"role\"))\n        {\n            if (lowerCaseRoles.Contains(claim.Value.ToLower()))\n                return true;\n        }\n        return false;\n    }\n}\n\n\n@if (meetsRoles)\n{\n    if (!Model.RoleContentReplacesAuthenticatedContent && isAuthenticated)\n    {\n        <div class=\"mt-3 auth-content\">\n            @Html.Raw(Model.AuthenticatedContent)\n        </div>\n    }\n    <div class=\"mt-3 auth-content\">\n        @Html.Raw(Model.RoleBasedContent)\n    </div>\n}\nelse if (isAuthenticated)\n{\n    <div class=\"mt-3 auth-content\">\n        @Html.Raw(Model.AuthenticatedContent)\n    </div>\n}\nelse\n{\n    <div class=\"mt-3 unauth-content\">\n        @Html.Raw(Model.UnauthenticatedContent)\n    </div>\n}\n\n\n\n\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.ContentTemplates.Bootstrap5/Views/Shared/SectionsWithImageEditLayoutSelector.cshtml",
    "content": "﻿@model cloudscribe.SimpleContent.ContentTemplates.ViewModels.SectionsWithImageViewModel\n@using cloudscribe.SimpleContent.ContentTemplates\n@inject IStringLocalizer<ContentTemplateResources> sr\n<div class=\"mb-3 row\">\n    <label asp-for=\"Layout\" class=\"control-label col-md-1 ps-5\">@sr[\"Layout\"]</label>\n    <div class=\"col-md-11\">\n        <select asp-for=\"Layout\" class=\"form-control\">\n            <option value=\"SectionsWithImageRenderColumnsPartial\">@sr[\"Responsive equal width columns\"]</option>\n            <option value=\"SectionsWithImageRenderFloatedImagesPartial\">@sr[\"Sections with floated images alternating sides\"]</option>\n        </select>\n    </div>\n</div>"
  },
  {
    "path": "src/cloudscribe.SimpleContent.ContentTemplates.Bootstrap5/Views/Shared/SectionsWithImageRenderColumnsPartial.cshtml",
    "content": "﻿@model cloudscribe.SimpleContent.ContentTemplates.ViewModels.SectionsWithImageViewModel\n@{\n    var columnCount = 0;\n    if (!string.IsNullOrWhiteSpace(Model.SectionOneContent)) { columnCount += 1; }\n    if (!string.IsNullOrWhiteSpace(Model.SectionTwoContent)) { columnCount += 1; }\n    if (!string.IsNullOrWhiteSpace(Model.SectionThreeContent)) { columnCount += 1; }\n    if (!string.IsNullOrWhiteSpace(Model.SectionFourContent)) { columnCount += 1; }\n\n}\n@functions{\n    public string GetCssClass(int columnCount)\n    {\n        switch (columnCount)\n        {\n            case 4:\n                return \"col-12 col-md-6 col-lg-3\";\n            case 3:\n                return \"col-12 col-md-6 col-lg-4\";\n            case 2:\n                return \"col-12 col-md-6 col-lg-6\";\n\n            case 1:\n            default:\n                return \"col\";\n\n        }\n    }\n}\n<div class=\"row\">\n    @if (!string.IsNullOrWhiteSpace(Model.SectionOneContent))\n    {\n        <div class=\"@GetCssClass(columnCount)\">\n            @if (!string.IsNullOrWhiteSpace(Model.SectionOneResizedUrl))\n            {\n                <img src=\"@Model.SectionOneResizedUrl\" class=\"img-fluid mb-1\" alt=\"@Model.SectionOneAltText\" />\n            }\n            @if (!string.IsNullOrWhiteSpace(Model.SectionOneHeading))\n            {\n                <h3>@Model.SectionOneHeading</h3>\n            }\n            @Html.Raw(Model.SectionOneContent)\n        </div>\n    }\n    @if (!string.IsNullOrWhiteSpace(Model.SectionTwoContent))\n    {\n        <div class=\"@GetCssClass(columnCount)\">\n            @if (!string.IsNullOrWhiteSpace(Model.SectionTwoResizedUrl))\n            {\n                <img src=\"@Model.SectionTwoResizedUrl\" class=\"img-fluid mb-1\" alt=\"@Model.SectionTwoAltText\" />\n            }\n            @if (!string.IsNullOrWhiteSpace(Model.SectionTwoHeading))\n            {\n                <h3>@Model.SectionTwoHeading</h3>\n            }\n            @Html.Raw(Model.SectionTwoContent)\n        </div>\n    }\n    @if (!string.IsNullOrWhiteSpace(Model.SectionThreeContent))\n    {\n        <div class=\"@GetCssClass(columnCount)\">\n            @if (!string.IsNullOrWhiteSpace(Model.SectionThreeResizedUrl))\n            {\n                <img src=\"@Model.SectionThreeResizedUrl\" class=\"img-fluid mb-1\" alt=\"@Model.SectionThreeAltText\" />\n            }\n            @if (!string.IsNullOrWhiteSpace(Model.SectionThreeHeading))\n            {\n                <h3>@Model.SectionThreeHeading</h3>\n            }\n            @Html.Raw(Model.SectionThreeContent)\n        </div>\n    }\n    @if (!string.IsNullOrWhiteSpace(Model.SectionFourContent))\n    {\n        <div class=\"@GetCssClass(columnCount)\">\n            @if (!string.IsNullOrWhiteSpace(Model.SectionFourResizedUrl))\n            {\n                <img src=\"@Model.SectionFourResizedUrl\" class=\"img-fluid mb-1\" alt=\"@Model.SectionFourAltText\" />\n            }\n            @if (!string.IsNullOrWhiteSpace(Model.SectionFourHeading))\n            {\n                <h3>@Model.SectionFourHeading</h3>\n            }\n            @Html.Raw(Model.SectionFourContent)\n        </div>\n    }\n</div>\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.ContentTemplates.Bootstrap5/Views/Shared/SectionsWithImageRenderFloatedImagesPartial.cshtml",
    "content": "﻿@model cloudscribe.SimpleContent.ContentTemplates.ViewModels.SectionsWithImageViewModel\n@if (!string.IsNullOrWhiteSpace(Model.SectionOneContent))\n{\n<div class=\"clearfix\">\n    @if (!string.IsNullOrWhiteSpace(Model.SectionOneHeading))\n    {\n        <h3>@Model.SectionOneHeading</h3>\n    }\n    @if (!string.IsNullOrWhiteSpace(Model.SectionOneResizedUrl))\n    {\n        <div class=\"float-md-end simple-side-image ms-md-2\">\n            <img class=\"img-fluid\" src=\"@Model.SectionOneResizedUrl\" alt=\"@Model.SectionOneAltText\" />\n        </div>\n    }\n    @Html.Raw(Model.SectionOneContent)\n</div>\n    await Html.RenderPartialAsync(\"AdSpacePartial\");\n}\n@if (!string.IsNullOrWhiteSpace(Model.SectionTwoContent))\n{\n<div class=\"clearfix\">\n    @if (!string.IsNullOrWhiteSpace(Model.SectionTwoHeading))\n    {\n        <h3>@Model.SectionTwoHeading</h3>\n    }\n    @if (!string.IsNullOrWhiteSpace(@Model.SectionTwoResizedUrl))\n    {\n        <div class=\"float-md-start simple-side-image me-md-2\">\n            <img class=\"img-fluid\" src=\"@Model.SectionTwoResizedUrl\" alt=\"@Model.SectionTwoAltText\" />\n        </div>\n    }\n    @Html.Raw(Model.SectionTwoContent)\n</div>\n    await Html.RenderPartialAsync(\"AdSpacePartial\");\n}\n@if (!string.IsNullOrWhiteSpace(Model.SectionThreeContent))\n{\n<div class=\"clearfix\">\n    @if (!string.IsNullOrWhiteSpace(Model.SectionThreeHeading))\n    {\n        <h3>@Model.SectionThreeHeading</h3>\n    }\n    @if (!string.IsNullOrWhiteSpace(Model.SectionThreeResizedUrl))\n    {\n        <div class=\"float-md-end simple-side-image ms-md-2\">\n            <img class=\"img-fluid\" src=\"@Model.SectionThreeResizedUrl\" alt=\"@Model.SectionThreeAltText\" />\n        </div>\n    }\n    @Html.Raw(Model.SectionThreeContent)\n</div>\n    await Html.RenderPartialAsync(\"AdSpacePartial\");\n}\n@if (!string.IsNullOrWhiteSpace(Model.SectionFourContent))\n{\n<div class=\"clearfix\">\n    @if (!string.IsNullOrWhiteSpace(Model.SectionFourHeading))\n    {\n        <h3>@Model.SectionFourHeading</h3>\n    }\n    @if (!string.IsNullOrWhiteSpace(Model.SectionFourResizedUrl))\n    {\n        <div class=\"float-md-start simple-side-image me-md-2\">\n            <img class=\"img-fluid\" src=\"@Model.SectionFourResizedUrl\" alt=\"@Model.SectionFourAltText\" />\n        </div>\n    }\n    @Html.Raw(Model.SectionFourContent)\n</div>\n    await Html.RenderPartialAsync(\"AdSpacePartial\");\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.ContentTemplates.Bootstrap5/Views/Shared/TwoSectionsWithImageEditLayoutSelector.cshtml",
    "content": "﻿@model cloudscribe.SimpleContent.ContentTemplates.ViewModels.SectionsWithImageViewModel\n@using cloudscribe.SimpleContent.ContentTemplates\n@inject IStringLocalizer<ContentTemplateResources> sr\n<div class=\"mb-3 row\">\n    <label asp-for=\"Layout\" class=\"control-label col-md-1 ps-5\">@sr[\"Layout\"]</label>\n    <div class=\"col-md-11\">\n        <select asp-for=\"Layout\" class=\"form-control\">\n            <option value=\"TwoSectionsWithImageRenderColumnsLeftPartial\">@sr[\"Wider left column\"]</option>\n            <option value=\"TwoSectionsWithImageRenderColumnsRightPartial\">@sr[\"Wider right column\"]</option>\n        </select>\n    </div>\n</div>"
  },
  {
    "path": "src/cloudscribe.SimpleContent.ContentTemplates.Bootstrap5/Views/Shared/TwoSectionsWithImageRenderColumnsLeftPartial.cshtml",
    "content": "﻿@model cloudscribe.SimpleContent.ContentTemplates.ViewModels.SectionsWithImageViewModel\n@{\n    var columnCount = 0;\n    if (!string.IsNullOrWhiteSpace(Model.SectionOneContent)) { columnCount += 1; }\n    if (!string.IsNullOrWhiteSpace(Model.SectionTwoContent)) { columnCount += 1; }\n    //if (!string.IsNullOrWhiteSpace(Model.SectionThreeContent)) { columnCount += 1; }\n    //if (!string.IsNullOrWhiteSpace(Model.SectionFourContent)) { columnCount += 1; }\n\n}\n@functions{\n    public string GetLeftCssClass(int columnCount)\n    {\n        switch (columnCount)\n        {\n            case 2:\n                return \"col-12 col-md-8 col-lg-8\";\n\n            case 1:\n            default:\n                return \"col\";\n\n        }\n    }\n    public string GetRightCssClass(int columnCount)\n    {\n        switch (columnCount)\n        { \n            case 2:\n                return \"col-12 col-md-4 col-lg-4\";\n\n            case 1:\n            default:\n                return \"col\";\n\n        }\n    }\n}\n<div class=\"row\">\n    @if (!string.IsNullOrWhiteSpace(Model.SectionOneContent))\n    {\n        <div class=\"@GetLeftCssClass(columnCount)\">\n            @if (!string.IsNullOrWhiteSpace(Model.SectionOneResizedUrl))\n            {\n                <img src=\"@Model.SectionOneResizedUrl\" class=\"img-fluid mb-1\" alt=\"@Model.SectionOneAltText\" />\n            }\n            @if (!string.IsNullOrWhiteSpace(Model.SectionOneHeading))\n            {\n                <h3>@Model.SectionOneHeading</h3>\n            }\n            @Html.Raw(Model.SectionOneContent)\n        </div>\n    }\n    @if (!string.IsNullOrWhiteSpace(Model.SectionTwoContent))\n    {\n        <div class=\"@GetRightCssClass(columnCount)\">\n            @if (!string.IsNullOrWhiteSpace(Model.SectionTwoResizedUrl))\n            {\n                <img src=\"@Model.SectionTwoResizedUrl\" class=\"img-fluid mb-1\" alt=\"@Model.SectionTwoAltText\" />\n            }\n            @if (!string.IsNullOrWhiteSpace(Model.SectionTwoHeading))\n            {\n                <h3>@Model.SectionTwoHeading</h3>\n            }\n            @Html.Raw(Model.SectionTwoContent)\n        </div>\n    }\n    \n</div>\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.ContentTemplates.Bootstrap5/Views/Shared/TwoSectionsWithImageRenderColumnsRightPartial.cshtml",
    "content": "﻿@model cloudscribe.SimpleContent.ContentTemplates.ViewModels.SectionsWithImageViewModel\n@{\n    var columnCount = 0;\n    if (!string.IsNullOrWhiteSpace(Model.SectionOneContent)) { columnCount += 1; }\n    if (!string.IsNullOrWhiteSpace(Model.SectionTwoContent)) { columnCount += 1; }\n    //if (!string.IsNullOrWhiteSpace(Model.SectionThreeContent)) { columnCount += 1; }\n    //if (!string.IsNullOrWhiteSpace(Model.SectionFourContent)) { columnCount += 1; }\n\n}\n@functions{\n    public string GetLeftCssClass(int columnCount)\n    {\n        switch (columnCount)\n        {\n            case 2:\n                return \"col-12 col-md-4 col-lg-4\";\n\n            case 1:\n            default:\n                return \"col\";\n\n        }\n    }\n    public string GetRightCssClass(int columnCount)\n    {\n        switch (columnCount)\n        { \n            case 2:\n                return \"col-12 col-md-8 col-lg-8\";\n\n            case 1:\n            default:\n                return \"col\";\n\n        }\n    }\n}\n<div class=\"row\">\n    @if (!string.IsNullOrWhiteSpace(Model.SectionOneContent))\n    {\n        <div class=\"@GetLeftCssClass(columnCount)\">\n            @if (!string.IsNullOrWhiteSpace(Model.SectionOneResizedUrl))\n            {\n                <img src=\"@Model.SectionOneResizedUrl\" class=\"img-fluid mb-1\" alt=\"@Model.SectionOneAltText\" />\n            }\n            @if (!string.IsNullOrWhiteSpace(Model.SectionOneHeading))\n            {\n                <h3>@Model.SectionOneHeading</h3>\n            }\n            @Html.Raw(Model.SectionOneContent)\n        </div>\n    }\n    @if (!string.IsNullOrWhiteSpace(Model.SectionTwoContent))\n    {\n        <div class=\"@GetRightCssClass(columnCount)\">\n            @if (!string.IsNullOrWhiteSpace(Model.SectionTwoResizedUrl))\n            {\n                <img src=\"@Model.SectionTwoResizedUrl\" class=\"img-fluid mb-1\" alt=\"@Model.SectionTwoAltText\" />\n            }\n            @if (!string.IsNullOrWhiteSpace(Model.SectionTwoHeading))\n            {\n                <h3>@Model.SectionTwoHeading</h3>\n            }\n            @Html.Raw(Model.SectionTwoContent)\n        </div>\n    }\n    \n</div>\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.ContentTemplates.Bootstrap5/Views/_ViewImports.cshtml",
    "content": "﻿@using System\n@using System.Collections.Generic\n@using System.Globalization\n@using System.Linq\n@using Microsoft.AspNetCore.Http\n@using Microsoft.AspNetCore.Authentication\n@using Microsoft.AspNetCore.Localization\n@using Microsoft.Extensions.Localization\n@using Microsoft.Extensions.Options\n@using cloudscribe.Web.Common\n@using cloudscribe.Web.Common.Components\n@using cloudscribe.Web.Common.Helpers\n@using cloudscribe.Web.Common.Models\n@using cloudscribe.Web.Common.Extensions\n@using cloudscribe.SimpleContent.Models\n@using cloudscribe.SimpleContent.Models.Versioning\n@using cloudscribe.SimpleContent.Web.TagHelpers\n@using cloudscribe.SimpleContent.Web\n@using cloudscribe.SimpleContent.Web.Design\n@addTagHelper \"*, cloudscribe.SimpleContent.Web\"\n@addTagHelper \"*, Microsoft.AspNetCore.Mvc.TagHelpers\"\n@addTagHelper \"*, cloudscribe.Web.Common\"\n\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.ContentTemplates.Bootstrap5/cloudscribe.SimpleContent.ContentTemplates.Bootstrap5.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Razor\">\n\n  <PropertyGroup>\n    <Description>A set of Content Templates for cloudscribe.SimpleContent using Bootstrap 5</Description>\n    <Version>10.1.0</Version>\n    <TargetFramework>net10.0</TargetFramework>\n    <Authors>Joe Audette</Authors>\n    <AddRazorSupportForMvc>true</AddRazorSupportForMvc>\n    <PackageTags>cloudscribe;SimpleContent;Bootstrap5</PackageTags>\n    <PackageIcon>icon.png</PackageIcon>\n    <PackageProjectUrl>https://github.com/cloudscribe/cloudscribe.SimpleContent</PackageProjectUrl>\n    <PackageLicenseExpression>Apache-2.0</PackageLicenseExpression>\n    <RepositoryUrl>https://github.com/cloudscribe/cloudscribe.SimpleContent.git</RepositoryUrl>\n    <RepositoryType>git</RepositoryType>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <None Include=\"icon.png\" Pack=\"true\" PackagePath=\"\\\" />\n  </ItemGroup>\n\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|AnyCPU'\">\n    <NoWarn>1701;1702;0436</NoWarn>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|AnyCPU'\">\n    <NoWarn>1701;1702;0436</NoWarn>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <EmbeddedResource Include=\"js\\**;css\\**\" Exclude=\"bin\\**;obj\\**;**\\*.xproj;packages\\**;@(EmbeddedResource)\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <None Remove=\"css\\simple-gallery.css\" />\n    <None Remove=\"css\\simple-gallery.min.css\" />\n    <None Remove=\"css\\simple-image.css\" />\n    <None Remove=\"css\\simple-image.min.css\" />\n    <None Remove=\"js\\cst-basic-list.js\" />\n    <None Remove=\"js\\cst-basic-list.min.js\" />\n    <None Remove=\"js\\cst-link-list.js\" />\n    <None Remove=\"js\\cst-link-list.min.js\" />\n    <None Remove=\"js\\simple-gallery.js\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <FrameworkReference Include=\"Microsoft.AspNetCore.App\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <ProjectReference Include=\"..\\cloudscribe.SimpleContent.Web\\cloudscribe.SimpleContent.Web.csproj\" />\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"README.md\" Pack=\"true\" PackagePath=\"/\" />\n  </ItemGroup>\n</Project>\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.ContentTemplates.Bootstrap5/css/simple-gallery.css",
    "content": "﻿/*.gallery-block {\n    padding-bottom: 60px;\n    padding-top: 60px;\n}\n\n    .gallery-block .heading {\n        margin-bottom: 50px;\n        text-align: center;\n    }\n\n        .gallery-block .heading h2 {\n            font-weight: bold;\n            font-size: 1.4rem;\n            text-transform: uppercase;\n        }*/\n\n.gallery-block.cards-gallery h6 {\n    font-size: 17px;\n    font-weight: bold;\n}\n\n.gallery-block.cards-gallery .card {\n    transition: 0.4s ease;\n}\n\n.gallery-block.cards-gallery .card img {\n    box-shadow: 0px 2px 10px rgba(0, 0, 0, 0.15);\n}\n\n.gallery-block.cards-gallery .card-body {\ntext-align: center;\n}\n\n.gallery-block.cards-gallery .card-body p {\n    font-size: 15px;\n}\n\n.gallery-block.cards-gallery a {\ncolor: #212529;\n}\n\n.gallery-block.cards-gallery a:hover {\n    text-decoration: none;\n}\n\n.gallery-block.cards-gallery .card {\nmargin-bottom: 30px;\nbox-shadow: 0px 2px 10px rgba(0, 0, 0, 0.15);\n}\n\n/* compact */\n.gallery-block.compact-gallery .item {\noverflow: hidden;\nmargin-bottom: 0;\nbackground: black;\nopacity: 1;\n}\n\n.gallery-block.compact-gallery .item .image {\n    transition: 0.8s ease;\n}\n\n.gallery-block.compact-gallery .item .info {\n    position: relative;\n    display: inline-block;\n}\n\n.gallery-block.compact-gallery .item .description {\n    display: grid;\n    position: absolute;\n    bottom: 0;\n    left: 0;\n    color: #fff;\n    padding: 10px;\n    font-size: 17px;\n    line-height: 18px;\n    width: 100%;\n    padding-top: 15px;\n    padding-bottom: 15px;\n    opacity: 1;\n    color: #fff;\n    transition: 0.8s ease;\n    text-align: center;\n    text-shadow: 1px 1px 1px rgba(0, 0, 0, 0.2);\n    background: linear-gradient(to bottom, transparent, rgba(0, 0, 0, 0.39));\n}\n\n    .gallery-block.compact-gallery .item .description .description-heading {\n        font-size: 1em;\n        font-weight: bold;\n    }\n\n    .gallery-block.compact-gallery .item .description .description-body {\n        font-size: 0.8em;\n        margin-top: 10px;\n        font-weight: 300;\n    }\n\n/* grid */\n.gallery-block.grid-gallery .heading {\n    margin-bottom: 50px;\n    text-align: center;\n}\n\n    .gallery-block.grid-gallery .heading h2 {\n        font-weight: bold;\n        font-size: 1.4rem;\n        text-transform: uppercase;\n    }\n\n.gallery-block.grid-gallery a:hover {\n    opacity: 0.8;\n}\n\n.gallery-block.grid-gallery .item img {\n    box-shadow: 0px 2px 10px rgba(0, 0, 0, 0.15);\n    transition: 0.4s;\n}\n\n.gallery-block.grid-gallery .item {\n    margin-bottom: 20px;\n}\n\n@media (min-width: 576px) {\n\n    .gallery-block .transform-on-hover:hover {\n        transform: translateY(-10px) scale(1.02);\n        box-shadow: 0px 10px 10px rgba(0, 0, 0, 0.15) !important;\n    }\n\n    .gallery-block.compact-gallery .item .description {\n        opacity: 1;\n    }\n\n    .gallery-block.compact-gallery .item .description a {\n        color: #fff;\n    }\n\n    .gallery-block.compact-gallery .item a:hover .description {\n        opacity: 1;\n    }\n\n    .gallery-block.compact-gallery .zoom-on-hover:hover .image {\n        transform: scale(1.3);\n        opacity: 0.7;\n    }\n    .gallery-block.grid-gallery .scale-on-hover:hover {\n        transform: scale(1.05);\n        box-shadow: 0px 10px 10px rgba(0, 0, 0, 0.15) !important;\n    }\n}\n\n.carousel-caption a {\n    color: #fff;\n}\n\n\n@media (min-width: 690px) {\n    .simple-gallery-side-carousel {\n        width: 690px;\n    }\n}\n/* IE 11 fixes */\nbody.IE .cards-gallery .lightbox {\n    flex: 0 0 auto;\n}\n\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.ContentTemplates.Bootstrap5/css/simple-image.css",
    "content": "﻿@media (min-width: 690px) {\n    .simple-side-image {\n        max-width: 690px;\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.ContentTemplates.Bootstrap5/js/cst-basic-list.js",
    "content": "﻿\nko.observable.fn.silentUpdate = function (value) {\n    this.notifySubscribers = function () { };\n    this(value);\n    this.notifySubscribers = function () {\n        ko.subscribable.fn.notifySubscribers.apply(this, arguments);\n    };\n};\n//class to represent a list item\nfunction ListItem(title, description, fullSizeUrl, resizedUrl, thumbnailUrl, linkUrl, sort, altText) {\n    var self = this;\n\n    self.Title = ko.observable(decodeEncodedJson(title));\n    self.Description = ko.observable(decodeEncodedJson(description));\n    self.FullSizeUrl = ko.observable(fullSizeUrl);\n    self.ResizedUrl = ko.observable(resizedUrl);\n    self.ThumbnailUrl = ko.observable(thumbnailUrl);\n    self.LinkUrl = ko.observable(linkUrl);\n    self.Sort = ko.observable(sort);\n    self.AltText = ko.observable(altText);\n\n    self.incrementSort = function () {\n        self.Sort(self.Sort() + 3);\n    };\n\n    self.decrementSort = function () {\n        var newSort = self.Sort() - 3;\n        if (newSort < 0) { newSort = 0; }\n        self.Sort(newSort);\n    };\n}\n\nfunction ItemListViewModel(initialData) {\n    var self = this;\n    self.hiddenField = document.getElementById(\"ItemsJson\");\n\n    self.handleSortItemChanged = function (sortVal) {\n        self.sortItems();\n        var sort = 1;\n        for (i = 0; i < self.Items().length; i++) {\n            var item = self.Items()[i];\n            item.Sort.silentUpdate(sort); //avoid infinite loop of subscription by silent update\n            sort += 2;\n        }\n        self.sortItems();\n    };\n\n    self.Items = ko.observableArray(ko.utils.arrayMap(initialData, function (item) {\n        var thisItem = new ListItem(item.Title, item.Description, item.FullSizeUrl, item.ResizedUrl, item.ThumbnailUrl, item.LinkUrl, item.Sort, item.AltText);\n        thisItem.Sort.subscribe(self.handleSortItemChanged);\n        return thisItem;\n    }));\n\n    self.addItem = function (title, description, fullSizeUrl, resizedUrl, thumbnailUrl, linkUrl, sort, altText) {\n        var item = new ListItem(title, description, fullSizeUrl, resizedUrl, thumbnailUrl, linkUrl, sort, altText);\n        item.Sort.subscribe(self.handleSortItemChanged);\n        self.Items.push(item);\n        window.thisPage = window.thisPage || {};\n        window.thisPage.hasUnsavedChanges = true;\n    };\n\n    self.newItemTitle = ko.observable(null);\n    self.newItemDescription = ko.observable(null);\n    self.newItemFullSizeUrl = ko.observable(null);\n    self.newItemResizedUrl = ko.observable(null);\n    self.newItemThumbnailUrl = ko.observable(null);\n    self.newItemLinkUrl = ko.observable(null);\n    self.newItemAltText = ko.observable(null);\n\n\n    self.newItemSort = function () {\n        if (self.Items().length === 0) { return 1; }\n        var result = Math.max.apply(Math, self.Items().map(function (o) { return o.Sort(); }));\n        return result + 2;\n    };\n\n    self.addNewItem = function () {\n        //console.log(self.newItemSort());\n        self.addItem(self.newItemTitle(), self.newItemDescription(), self.newItemFullSizeUrl(), self.newItemResizedUrl(), self.newItemThumbnailUrl(), self.newItemLinkUrl(), self.newItemSort(), self.newItemAltText());\n        self.newItemTitle(null);\n        self.newItemDescription(null);\n        self.newItemFullSizeUrl(null);\n        self.newItemResizedUrl(null);\n        self.newItemThumbnailUrl(null);\n        self.newItemLinkUrl(null);\n        self.newItemAltText(null);\n        if (self.imageEditor) {\n            window.cloudscribeDropAndCrop.clearOneZoneItems(self.imageEditor.dropZoneDiv.id);\n        }\n\n        //window.cloudscribeDropAndCrop.clearAllItems();\n    };\n\n    self.removeItem = function (item) {\n        self.Items.remove(item);\n        window.thisPage = window.thisPage || {};\n        window.thisPage.hasUnsavedChanges = true;\n    };\n\n    self.getCssClass = function (index) {\n        if (index === 0) { return \"carousel-item active\"; }\n        return \"carousel-item\";\n    };\n\n    self.dropZoneSuccess = function (file, serverResponse, imageEditor) {\n        //console.log('dropzone success');\n        //console.log(serverResponse);\n        self.imageEditor = imageEditor;\n        self.newItemFullSizeUrl(serverResponse[0].originalUrl);\n        if (serverResponse[0].resizedUrl) {\n            self.newItemResizedUrl(serverResponse[0].resizedUrl);\n        } else {\n            self.newItemResizedUrl(serverResponse[0].originalUrl);\n        }\n\n        self.newItemThumbnailUrl(serverResponse[0].thumbUrl);\n    };\n\n    window.DropZoneSuccessHandler = self.dropZoneSuccess;\n\n    self.handleCropSave = function (resizedUrl) {\n        self.newItemResizedUrl(resizedUrl);\n    };\n    window.HandleCropResult = self.handleCropSave;\n\n    self.serverFileSelected = function (url) {\n        //console.log('server file selected ' + url);\n        self.newItemResizedUrl(url);\n    };\n    window.ServerFileSelected = self.serverFileSelected;\n\n    self.currentListState = ko.computed(function () {\n        return encodeURIComponent(ko.toJSON(self.Items));\n    });\n    self.sortItems = function () {\n        self.Items.sort(function (a, b) {\n            if (a.Sort() < b.Sort()) { return -1; }\n            if (a.Sort() > b.Sort()) { return 1; }\n            return 0;\n        });\n    };\n}\n\nfunction decodeEncodedJson(encodedJson) {\n    if (encodedJson === null) { return encodedJson; }\n    if (encodedJson === undefined) { return encodedJson; }\n    var x = encodedJson.replace(/\\+/g, \" \");\n    return decodeURIComponent(x);\n}\n\ndocument.addEventListener(\"DOMContentLoaded\", function () {\n    var configElement = document.getElementById(\"ItemsConfig\");\n    var initialData = JSON.parse(decodeEncodedJson(configElement.value));\n    //console.log(initialData);\n\n    ko.applyBindings(new ItemListViewModel(initialData));\n});\n\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.ContentTemplates.Bootstrap5/js/cst-link-list.js",
    "content": "﻿\nko.observable.fn.silentUpdate = function (value) {\n    this.notifySubscribers = function () { };\n    this(value);\n    this.notifySubscribers = function () {\n        ko.subscribable.fn.notifySubscribers.apply(this, arguments);\n    };\n};\n\n// http://knockoutjs.com/documentation/extenders.html\nko.extenders.required = function (target, overrideMessage) {\n    target.hasError = ko.observable();\n    target.validationMessage = ko.observable();\n    function validate(newValue) {\n        target.hasError(newValue ? false : true);\n        target.validationMessage(newValue ? \"\" : overrideMessage || \"This field is required\");\n    }\n    validate(target());\n    target.subscribe(validate);\n    return target;\n};\n\nko.extenders.isValidUrl = function(target, overrideMessage) {\n    target.hasError = ko.observable();\n    target.validationMessage = ko.observable();\n    var _testEle = null;\n    function validate(newValue) {\n        if (newValue) {\n            if (newValue.startsWith(\"/\")) {\n                target.hasError(false);\n                target.validationMessage(\"\");\n                return;\n            }\n            if (!self._testEle) {\n                _testEle = document.createElement('input');\n                _testEle.setAttribute('type', 'url');\n            }\n            _testEle.value = newValue;\n            var isValid = _testEle.validity.valid;\n            if (isValid) {\n                target.hasError(false);\n                target.validationMessage(\"\");\n            }\n            else {\n                target.hasError(true);\n                target.validationMessage(\"Must be a valid url\");\n            }\n        }\n        else {\n            target.hasError(newValue ? false : true);\n            target.validationMessage(newValue ? \"\" : \"Url is required\");\n        }  \n    }\n    validate(target());\n    target.subscribe(validate);\n    return target;\n};\n\n\n//class to represent a list item\nfunction ListItem(title, description, fullSizeUrl, resizedUrl, thumbnailUrl, linkUrl, sort, opensInNewWindow, altText) {\n    var self = this;\n\n    self.Title = ko.observable(decodeEncodedJson(title)).extend({ required: \"Title is required\" });\n    self.Description = ko.observable(decodeEncodedJson(description));\n    self.FullSizeUrl = ko.observable(fullSizeUrl);\n    self.ResizedUrl = ko.observable(resizedUrl);\n    self.ThumbnailUrl = ko.observable(thumbnailUrl);\n    self.LinkUrl = ko.observable(linkUrl).extend({ required: \"Link Url is required\", isValidUrl: \"Must be a valid url\" });\n    self.Sort = ko.observable(sort);\n    self.OpensInNewWindow = ko.observable(opensInNewWindow);\n    self.AltText = ko.observable(altText);\n\n    self.incrementSort = function () {\n        self.Sort(self.Sort() + 3);\n    };\n    self.decrementSort = function () {\n        var newSort = self.Sort() - 3;\n        if (newSort < 0) { newSort = 0; }\n        self.Sort(newSort);\n    };\n    self._testEle = null;\n\n    self.isValidUrl = function (url) {\n        if (url.startsWith(\"/\")) { return true; }\n        if (!self._testEle) {\n            self._testEle = document.createElement('input');\n            self._testEle.setAttribute('type', 'url');\n        }\n        self._testEle.value = url;\n        var result = self._testEle.validity.valid;\n        return result;\n    };\n}\n\nfunction ItemListViewModel(initialData) {\n    var self = this;\n    self.hiddenField = document.getElementById(\"ItemsJson\");\n\n    self.handleSortItemChanged = function (sortVal) {\n        self.sortItems();\n        var sort = 1;\n        for (i = 0; i < self.Items().length; i++) {\n            var item = self.Items()[i];\n            item.Sort.silentUpdate(sort); //avoid infinite loop of event by silent update\n            sort += 2;\n\n        }\n        self.sortItems();\n    };\n    \n    self.Items = ko.observableArray(ko.utils.arrayMap(initialData, function (item) {\n        var newItem = new ListItem(\n            item.Title,\n            item.Description,\n            item.FullSizeUrl,\n            item.ResizedUrl,\n            item.ThumbnailUrl,\n            item.LinkUrl,\n            item.Sort,\n            item.OpensInNewWindow,\n            item.AltText\n        );\n\n        newItem.Sort.subscribe(self.handleSortItemChanged);\n        return newItem;\n    }));\n    \n    self.addItem = function (title, description, fullSizeUrl, resizedUrl, thumbnailUrl, linkUrl, sort, opensInNewWindow, altText) {\n        var item = new ListItem(title, description, fullSizeUrl, resizedUrl, thumbnailUrl, linkUrl, sort, opensInNewWindow, altText);\n        item.Sort.subscribe(self.handleSortItemChanged);\n        self.Items.push(item);\n        window.thisPage = window.thisPage || {};\n        window.thisPage.hasUnsavedChanges = true;\n\n    };\n\n    self.newItemTitle = ko.observable(null).extend({ required: \"Title is required\" });\n    self.newItemDescription = ko.observable(null);\n    self.newItemFullSizeUrl = ko.observable(null);\n    self.newItemResizedUrl = ko.observable(null);\n    self.newItemThumbnailUrl = ko.observable(null);\n    self.newItemLinkUrl = ko.observable(null).extend({ isValidUrl: null });\n    self.newItemOpensInNewWindow = ko.observable(false);\n    self.newItemAltText = ko.observable(null);\n\n    self.newItemSort = function () {\n        if (self.Items().length === 0) { return 1; }\n        var result = Math.max.apply(Math, self.Items().map(function (o) { return o.Sort(); }));\n        return result + 2;\n    };\n   \n    self.addNewItem = function () {\n        self.addItem(self.newItemTitle(),\n            self.newItemDescription(),\n            self.newItemFullSizeUrl(),\n            self.newItemResizedUrl(),\n            self.newItemThumbnailUrl(),\n            self.newItemLinkUrl(),\n            self.newItemSort(),\n            self.newItemOpensInNewWindow(),\n            self.newItemAltText()\n        );\n        self.newItemTitle(null);\n        self.newItemDescription(null);\n        self.newItemFullSizeUrl(null);\n        self.newItemResizedUrl(null);\n        self.newItemThumbnailUrl(null);\n        self.newItemLinkUrl(null);\n        self.newItemOpensInNewWindow(false);\n        self.newItemAltText(null);\n        window.cloudscribeDropAndCrop.clearAllItems();\n    };\n\n    self.removeItem = function (item) {\n        self.Items.remove(item);\n        window.thisPage = window.thisPage || {};\n        window.thisPage.hasUnsavedChanges = true;\n    };\n\n    self.getCssClass = function (index) {\n        if (index === 0) { return \"carousel-item active\"; }\n        return \"carousel-item\";\n    };\n    \n    self.dropZoneSuccess = function (file, serverResponse) {\n        //console.log(serverResponse);\n        self.newItemFullSizeUrl(serverResponse[0].originalUrl);\n        self.newItemResizedUrl(serverResponse[0].resizedUrl);\n        self.newItemThumbnailUrl(serverResponse[0].thumbUrl);\n    };\n\n    window.DropZoneSuccessHandler = self.dropZoneSuccess;\n\n    self.handleCropSave = function (resizedUrl) {\n        self.newItemResizedUrl(resizedUrl);\n    };\n    window.HandleCropResult = self.handleCropSave;\n\n    self.serverFileSelected = function (url) {\n        self.newItemResizedUrl(url);\n    };\n    window.ServerFileSelected = self.serverFileSelected;\n\n    self.filteredItems = ko.computed(function () {\n        return ko.utils.arrayFilter(self.Items(), function (item) {\n            return item.LinkUrl.hasError() === false && item.Title.hasError() === false;\n        });\n    });\n    \n    self.currentListState = ko.computed(function () {\n        return encodeURIComponent(ko.toJSON(self.filteredItems()));\n    });\n    self.sortItems = function () {\n        self.Items.sort(function (a, b) {\n            if (a.Sort() < b.Sort()) { return -1; }\n            if (a.Sort() > b.Sort()) { return 1; }\n            return 0;\n        });\n    };\n\n    self._testEle = null;\n\n    self.isValidNewItemLink = ko.computed(function() {\n        if (self.newItemTitle.hasError()) { return false; }\n        if (self.newItemLinkUrl.hasError()) { return false; }\n        return true;\n    });\n}\n\nfunction decodeEncodedJson(encodedJson) {\n    if (encodedJson === null) { return encodedJson; }\n    if (encodedJson === undefined) { return encodedJson; }\n    var x = encodedJson.replace(/\\+/g, \" \");\n    return decodeURIComponent(x);\n}\n\ndocument.addEventListener(\"DOMContentLoaded\", function () {\n    var configElement = document.getElementById(\"ItemsConfig\");\n    var initialData = JSON.parse(decodeEncodedJson(configElement.value));\n    //console.log(initialData);\n\n    ko.applyBindings(new ItemListViewModel(initialData));\n});\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.ContentTemplates.Bootstrap5/js/simple-gallery.js",
    "content": "﻿baguetteBox.run('.simple-gallery', { animation: 'slideIn' });"
  },
  {
    "path": "src/cloudscribe.SimpleContent.MetaWeblog/MetaWeblogModelMapper.cs",
    "content": "﻿// Copyright (c) Source Tree Solutions, LLC. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.\n// Author:                  Joe Audette\n// Created:                 2016-02-08\n// Last Modified:           2018-07-09\n// \n\nusing cloudscribe.SimpleContent.Models;\nusing cloudscribe.MetaWeblog.Models;\nusing System;\nusing System.Globalization;\n\nnamespace cloudscribe.SimpleContent.MetaWeblog\n{\n    public class MetaWeblogModelMapper\n    {\n        public MetaWeblogModelMapper()\n        {\n           \n        }\n        \n        public Post GetPostFromStruct(PostStruct postStruct)\n        {\n            Post p = new Post();\n            p.Author = postStruct.author;\n            p.Categories = postStruct.categories;\n            p.Content = postStruct.description;\n            p.MetaDescription = postStruct.excerpt;\n            p.Id = postStruct.postId;\n            p.IsPublished = postStruct.publish;\n            if(postStruct.postDate != null)\n            {\n                p.PubDate = postStruct.postDate;\n            }\n            \n            p.Slug = postStruct.slug;\n            p.Title = postStruct.title;\n          \n            return p;\n        }\n\n        public PostStruct GetStructFromPost(\n            IPost post, \n            string postUrl,\n            bool commentsOpen\n            )\n        {\n            PostStruct p = new PostStruct();\n\n\n\n            p.author = post.Author;\n            p.categories = post.Categories;\n            p.commentPolicy = commentsOpen ? \"1\" : \"0\";\n            if(!string.IsNullOrWhiteSpace(post.DraftContent))\n            {\n                p.description = post.DraftContent;\n            }\n            else\n            {\n                p.description = post.Content;\n            }\n            \n            p.excerpt = post.MetaDescription;\n            p.link = postUrl;\n            if(post.PubDate.HasValue)\n            {\n                p.postDate = post.PubDate.Value;\n            }\n            \n            p.postId = post.Id;\n            p.publish = post.IsPublished;\n            p.slug = post.Slug;\n            p.title = post.Title;\n           \n            \n            return p;\n        }\n\n        public BlogInfoStruct GetStructFromBlog(IProjectSettings blog, string blogUrl)\n        {\n            BlogInfoStruct b = new BlogInfoStruct\n            {\n                blogId = blog.Id,\n                blogName = blog.Title,\n                url = blogUrl\n            };\n\n            return b;\n\n        }\n\n        public Page GetPageFromStruct(PageStruct pageStruct)\n        {\n            var p = new Page();\n            p.Content = pageStruct.description;\n            p.Title = pageStruct.title;\n            p.Id = pageStruct.pageId;\n            p.ParentId = pageStruct.pageParentId;\n           // p.IsPublished = pageStruct.published;\n            if (pageStruct.pageUtcDate != null)\n            {\n                p.PubDate = pageStruct.pageUtcDate;\n            }\n\n            p.Slug = pageStruct.link;\n            if(!string.IsNullOrEmpty(pageStruct.pageOrder))\n            {\n                p.PageOrder = Convert.ToInt32(pageStruct.pageOrder);\n            }\n\n            return p;\n\n        }\n\n        public PageStruct GetStructFromPage(\n            IPage page,\n            string postUrl,\n            bool commentsOpen\n            )\n        {\n            var p = new PageStruct();\n\n            p.commentPolicy = commentsOpen ? \"1\" : \"0\";\n\n            if(!string.IsNullOrWhiteSpace(page.DraftContent))\n            {\n                p.description = page.DraftContent;\n            }\n            else\n            {\n                p.description = page.Content;\n            }\n            \n            p.link = postUrl;\n            \n            if(page.PubDate.HasValue)\n            {\n                p.pageUtcDate = page.PubDate.Value;\n                p.pageDate = page.PubDate.Value;\n            }\n            \n            p.pageId = page.Id;\n            p.pageOrder = page.PageOrder.ToString(CultureInfo.InvariantCulture);\n            p.pageParentId = page.ParentId;\n            p.title = page.Title;\n            p.parentTitle = page.ParentSlug;\n            \n            return p;\n        }\n\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.MetaWeblog/MetaWeblogSecurity.cs",
    "content": "﻿// Copyright (c) Source Tree Solutions, LLC. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.\n// Author:                  Joe Audette\n// Created:                 2016-02-15\n// Last Modified:           2016-08-11\n// \n\nusing cloudscribe.SimpleContent.Models;\nusing cloudscribe.MetaWeblog;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace cloudscribe.SimpleContent.MetaWeblog\n{\n    public class MetaWeblogSecurity : IMetaWeblogSecurity\n    {\n        public MetaWeblogSecurity(IProjectSecurityResolver blogSecurity)\n        {\n            this.blogSecurity = blogSecurity;\n        }\n\n        private IProjectSecurityResolver blogSecurity;\n\n\n        public async Task<MetaWeblogSecurityResult> ValiatePermissions(MetaWeblogRequest request, CancellationToken cancellationToken)\n        {\n            var blogResult = await blogSecurity.ValidatePermissions(\n                request.BlogId,\n                request.UserName,\n                request.Password,\n                cancellationToken\n                ).ConfigureAwait(false);\n\n            return new MetaWeblogSecurityResult(\n                blogResult.DisplayName,\n                blogResult.ProjectId,\n                blogResult.IsAuthenticated, \n                blogResult.CanEditPosts,\n                blogResult.CanEditPages\n                );\n            \n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.MetaWeblog/MetaWeblogService.cs",
    "content": "﻿// Copyright (c) Source Tree Solutions, LLC. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.\n// Author:                  Joe Audette\n// Created:                 2016-02-08\n// Last Modified:           2018-11-13\n// \n\nusing cloudscribe.SimpleContent.Models;\nusing cloudscribe.MetaWeblog;\nusing cloudscribe.MetaWeblog.Models;\nusing System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Threading;\nusing System.Threading.Tasks;\nusing Microsoft.Extensions.Logging;\nusing cloudscribe.DateTimeUtils;\nusing cloudscribe.Web.Navigation.Caching;\n\nnamespace cloudscribe.SimpleContent.MetaWeblog\n{\n    public class MetaWeblogService : IMetaWeblogService\n    {\n\n        public MetaWeblogService(\n            IProjectService projectService,\n            IProjectSecurityResolver security,\n            IContentHistoryCommands contentHistoryCommands,\n            IPageUrlResolver pageUrlResolver,\n            IBlogUrlResolver blogUrlResolver,\n            IMediaProcessor mediaProcessor,\n            ITimeZoneHelper timeZoneHelper,\n            ITreeCache treeCache,\n            ILogger<MetaWeblogService> logger,\n            IBlogService blogService = null,\n            IPageService pageService = null\n            )\n        {\n            _projectService = projectService;\n            _security = security;\n            _contentHistoryCommands = contentHistoryCommands;\n            _pageUrlResolver = pageUrlResolver;\n            _blogUrlResolver = blogUrlResolver;\n            _timeZoneHelper = timeZoneHelper;\n            _blogService = blogService ?? new NotImplementedBlogService();\n            _pageService = pageService ?? new NotImplementedPageService();\n            _mediaProcessor = mediaProcessor;\n            _mapper = new MetaWeblogModelMapper();\n            _navigationCache = treeCache;\n            _log = logger;\n            \n        }\n\n        private readonly IProjectService _projectService;\n        private readonly IProjectSecurityResolver _security;\n        private readonly IPageUrlResolver _pageUrlResolver;\n        private readonly IBlogUrlResolver _blogUrlResolver;\n        private readonly IMediaProcessor _mediaProcessor;\n        private readonly IContentHistoryCommands _contentHistoryCommands;\n        private readonly IBlogService _blogService;\n        private readonly IPageService _pageService;\n        private readonly MetaWeblogModelMapper _mapper;\n        private readonly ITimeZoneHelper _timeZoneHelper;\n        private readonly ITreeCache _navigationCache;\n        private readonly ILogger _log;\n\n        public async Task<string> NewPost(\n            string blogId,\n            string userName,\n            string password,\n            PostStruct newPost,\n            bool publish,\n            string authorDisplayName\n            )\n        {\n            var permission = await _security.ValidatePermissions(\n                blogId,\n                userName,\n                password,\n                CancellationToken.None\n                ).ConfigureAwait(false);\n\n            if (!permission.CanEditPosts)\n            {\n                _log.LogWarning($\"rejecting new post because user {userName} cannot edit posts\");\n                return null;\n            }\n\n            var post = _mapper.GetPostFromStruct(newPost);\n            post.BlogId = blogId;\n            post.Id = Guid.NewGuid().ToString();\n            post.Author = authorDisplayName;\n            post.CreatedByUser = permission.DisplayName;\n            var utcPubDate = _timeZoneHelper.ConvertToUtc(newPost.postDate, permission.TimeZoneId);\n            \n            if (publish)\n            {\n                if(utcPubDate.Year == 1)\n                {\n                    //invalid because not supplied\n                    utcPubDate = DateTime.UtcNow;\n                }\n\n                if(utcPubDate <= DateTime.UtcNow)\n                {\n                    post.IsPublished = true;\n                    post.PubDate = utcPubDate;\n                }\n                else\n                {\n                    //future date needs to be draft, it will auto publish after pub date\n                    post.DraftAuthor = post.Author;\n                    post.DraftContent = post.Content;\n                    post.DraftPubDate = utcPubDate;\n                    post.IsPublished = false;\n                    post.PubDate = null;\n                    post.Content = null;\n                }\n                \n                \n            }\n            else\n            {\n                post.DraftAuthor = post.Author;\n                post.DraftContent = post.Content;\n                if(utcPubDate > DateTime.UtcNow)\n                {\n                    post.DraftPubDate = utcPubDate;\n                }\n                \n                post.Content = null;\n                post.PubDate = null;\n            }\n            \n            await _blogUrlResolver.ConvertMediaToRelativeUrls(post).ConfigureAwait(false);\n\n            await _blogService.Create(post).ConfigureAwait(false);\n            if (publish)\n            {\n                await _blogService.FirePublishEvent(post).ConfigureAwait(false);\n            }\n\n            return post.Id; \n        }\n\n        public async Task<bool> EditPost(\n            string blogId,\n            string postId,\n            string userName,\n            string password,\n            PostStruct post,\n            bool publish)\n        {\n            var permission = await _security.ValidatePermissions(\n                blogId,\n                userName,\n                password,\n                CancellationToken.None\n                ).ConfigureAwait(false);\n\n            if (!permission.CanEditPosts)\n            {\n                _log.LogWarning($\"rejecting new post because user {userName} cannot edit posts\");\n                return false;\n            }\n\n            var existing = await _blogService.GetPost(postId).ConfigureAwait(false);\n            \n            if (existing == null)\n            {\n                _log.LogError($\"post not found for id {postId}\");\n                return false;\n            }\n            \n            if(!string.IsNullOrWhiteSpace(existing.TemplateKey))\n            {\n                //_log.LogError($\"post {postId} uses a content template and cannot be edited via metaweblog api\");\n                throw new InvalidOperationException(\"templated posts cannot be edited via metaweblog api\");\n            }\n            if (existing.ContentType != ProjectConstants.HtmlContentType)\n            {\n                //_log.LogError($\"post {postId} uses a content type {existing.ContentType} and cannot be edited via metaweblog api\");\n                throw new InvalidOperationException(\"posts that have content type other than html cannot be edited via metaweblog api\");\n            }\n\n            var history = existing.CreateHistory(userName);\n\n            var update = _mapper.GetPostFromStruct(post);\n\n            existing.Title = update.Title;\n            existing.MetaDescription = update.MetaDescription;\n            existing.LastModified = DateTime.UtcNow;\n            existing.LastModifiedByUser = permission.DisplayName;\n           \n            if (!string.Equals(existing.Slug, update.Slug, StringComparison.OrdinalIgnoreCase))\n            {\n                // slug changed make sure the new slug is available\n                var requestedSlug = ContentUtils.CreateSlug(update.Slug);\n                var available = await _blogService.SlugIsAvailable(blogId, requestedSlug).ConfigureAwait(false);\n\n                if (available)\n                {\n                    existing.Slug = requestedSlug;\n                }\n            }\n               \n            existing.Categories = update.Categories;\n            var utcPubDate = _timeZoneHelper.ConvertToUtc(post.postDate, permission.TimeZoneId);\n\n            if (publish)\n            {\n                if (utcPubDate <= DateTime.UtcNow)\n                {\n                    existing.Content = update.Content;\n                    existing.IsPublished = true;\n                    if (utcPubDate.Year != 1) // no date specified\n                    {\n                        existing.PubDate = utcPubDate;\n                    }\n                    if(!existing.PubDate.HasValue)\n                    {\n                        existing.PubDate = DateTime.UtcNow;\n                    }\n                        \n                    existing.DraftAuthor = null;\n                    existing.DraftContent = null;\n                    existing.DraftPubDate = null;\n                }\n                else\n                {\n                    existing.DraftContent = update.Content;\n                    existing.DraftPubDate = utcPubDate;\n                    existing.DraftAuthor = update.Author;\n                }       \n            }\n            else\n            {\n                existing.DraftContent = update.Content;\n                existing.DraftAuthor = update.Author;\n                if(utcPubDate > DateTime.UtcNow)\n                {\n                    existing.DraftPubDate = utcPubDate;\n                }\n                \n            }\n\n            await _blogUrlResolver.ConvertMediaToRelativeUrls(existing).ConfigureAwait(false);\n            await _blogService.Update(existing).ConfigureAwait(false);\n            await _contentHistoryCommands.Create(blogId, history).ConfigureAwait(false);\n\n            if(publish)\n            {\n                await _blogService.FirePublishEvent(existing).ConfigureAwait(false);\n                await _contentHistoryCommands.DeleteDraftHistory(blogId, history.ContentId).ConfigureAwait(false);\n            }\n\n            return true;\n        }\n\n        public async Task<PostStruct> GetPost(\n            string blogId,\n            string postId,\n            string userName,\n            string password,\n            CancellationToken cancellationToken)\n        {\n            var permission = await _security.ValidatePermissions(\n                blogId,\n                userName,\n                password,\n                CancellationToken.None\n                ).ConfigureAwait(false);\n\n            if (!permission.CanEditPosts)\n            {\n                _log.LogWarning($\"user {userName} cannot edit posts\");\n                return new PostStruct(); \n            }\n\n            var existing = await _blogService.GetPost(postId, cancellationToken).ConfigureAwait(false);\n            \n            if (existing == null) { return new PostStruct(); }\n\n            \n\n            var commentsOpen = await _blogService.CommentsAreOpen(existing, false).ConfigureAwait(false);\n            var project = await _projectService.GetCurrentProjectSettings().ConfigureAwait(false);\n            if(project == null)\n            {\n                _log.LogError($\"could not resolve project settings\");\n                return new PostStruct();\n            }\n            await _blogUrlResolver.ConvertMediaToAbsoluteUrls(existing, project).ConfigureAwait(false);\n\n            var postUrl = await _blogUrlResolver.ResolvePostUrl(existing, project).ConfigureAwait(false);\n            var postStruct = _mapper.GetStructFromPost(existing,postUrl, commentsOpen);\n            return postStruct;\n        }\n\n        public async Task<List<CategoryStruct>> GetCategories(\n            string blogId,\n            string userName,\n            string password,\n            CancellationToken cancellationToken)\n        {\n            var permission = await _security.ValidatePermissions(\n                blogId,\n                userName,\n                password,\n                CancellationToken.None\n                ).ConfigureAwait(false);\n\n            List<CategoryStruct> output = new List<CategoryStruct>();\n\n            if(permission.CanEditPosts)\n            {\n                var cats = await _blogService.GetCategories(permission.CanEditPosts, cancellationToken).ConfigureAwait(false);\n                foreach (var c in cats)\n                {\n                    CategoryStruct s = new CategoryStruct { title = c.Key };\n                    output.Add(s);\n                }\n            }\n            else\n            {\n                _log.LogWarning($\"user {userName} cannot edit posts\");\n            }\n            \n            return output;\n        }\n\n        public async Task<List<PostStruct>> GetRecentPosts(\n            string blogId,\n            string userName,\n            string password,\n            int numberOfPosts,\n            CancellationToken cancellationToken)\n        {\n            var permission = await _security.ValidatePermissions(\n                blogId,\n                userName,\n                password,\n                CancellationToken.None\n                ).ConfigureAwait(false);\n\n            var structs = new List<PostStruct>();\n\n            if(permission.CanEditPosts)\n            {\n                var blogPosts = await _blogService.GetRecentPosts(numberOfPosts, cancellationToken).ConfigureAwait(false);\n                var project = await _projectService.GetCurrentProjectSettings().ConfigureAwait(false);\n                if(project == null)\n                {\n                    _log.LogError($\"could not resolve project settings\");\n                    return structs;\n                }\n                \n                foreach (var p in blogPosts)\n                {\n                    var commentsOpen = await _blogService.CommentsAreOpen(p, false).ConfigureAwait(false);\n                    var postUrl = await _blogUrlResolver.ResolvePostUrl(p, project).ConfigureAwait(false);\n                    var s = _mapper.GetStructFromPost(p, postUrl, commentsOpen);\n                    structs.Add(s);\n                }\n            }\n            else\n            {\n                _log.LogWarning($\"user {userName} cannot edit posts\");\n            }\n            \n            return structs;\n        }\n\n        public async Task<MediaInfoStruct> NewMediaObject(\n            string blogId,\n            string userName,\n            string password,\n            MediaObjectStruct mediaObject)\n        {\n            var permission = await _security.ValidatePermissions(\n                blogId,\n                userName,\n                password,\n                CancellationToken.None\n                ).ConfigureAwait(false);\n\n            if(!permission.CanEditPosts)\n            {\n                _log.LogWarning($\"user {userName} cannot edit posts\");\n                return new MediaInfoStruct();\n            }\n\n            string extension = Path.GetExtension(mediaObject.name);\n            string fileName = Path.GetFileName(mediaObject.name).ToLowerInvariant().Replace(\"_thumb\", \"-wlw\");\n            var project = await _projectService.GetCurrentProjectSettings().ConfigureAwait(false);\n            if(project == null)\n            {\n                _log.LogError(\"failed to resolve proejct settings\");\n                return new MediaInfoStruct();\n            }\n\n            //https://github.com/cloudscribe/cloudscribe.SimpleContent/issues/345\n            var currentTime = DateTime.UtcNow;\n            var storageVirtualPath = \"/media/images/\" + currentTime.Year.ToInvariantString()\n                + \"/\" + currentTime.Month.ToString(\"00\")\n                + \"/\" + currentTime.Day.ToString(\"00\")\n                + \"/\"\n                ;\n            \n            await _mediaProcessor.SaveMedia(storageVirtualPath, fileName, mediaObject.bytes).ConfigureAwait(false);\n\n            var mediaUrl = await _mediaProcessor.ResolveMediaUrl(storageVirtualPath, fileName).ConfigureAwait(false);\n            var result = new MediaInfoStruct() { url = mediaUrl };\n\n            return result;\n        }\n\n        public async Task<bool> DeletePost(\n            string blogId, \n            string postId,\n            string userName,\n            string password\n            )\n        {\n            var permission = await _security.ValidatePermissions(\n                blogId,\n                userName,\n                password,\n                CancellationToken.None\n                ).ConfigureAwait(false);\n\n            if(!permission.CanEditPosts)\n            {\n                _log.LogWarning($\"user {userName} cannot edit posts\");\n                return false;\n            }\n\n            var post = await _blogService.GetPost(postId).ConfigureAwait(false);\n            if(post == null)\n            {\n                _log.LogError($\"post was null for id {postId}\");\n\n                return false;\n            }\n\n            var history = post.CreateHistory(userName);\n            await _contentHistoryCommands.Create(blogId, history).ConfigureAwait(false);\n\n            await _blogService.Delete(postId).ConfigureAwait(false);\n\n            return true;\n        }\n        \n        public async Task<List<BlogInfoStruct>> GetUserBlogs(\n            string key, \n            string userName,\n            string password,\n            CancellationToken cancellationToken)\n        {\n            var result = new List<BlogInfoStruct>();\n\n            var permission = await _security.ValidatePermissions(\n                string.Empty,\n                userName,\n                password,\n                CancellationToken.None\n                ).ConfigureAwait(false);\n            \n            if (!permission.CanEditPosts)\n            {\n                _log.LogWarning($\"user {userName} cannot edit posts\");\n                return result; //empty\n            }\n\n            var project = await _projectService.GetCurrentProjectSettings().ConfigureAwait(false);\n            if(project == null)\n            {\n                _log.LogError($\"could not resolve project settings\");\n                return result; //empty\n            }\n\n            var url = await _blogUrlResolver.ResolveBlogUrl(project).ConfigureAwait(false);\n            var b = _mapper.GetStructFromBlog(project, url);\n            result.Add(b);\n            \n            return result;\n        }\n\n        public Task<string> NewCategory(\n            string blogId, \n            string category,\n            string userName,\n            string password\n            )\n        {\n            //TODO: implement\n\n            throw new NotImplementedException();\n        }\n\n        public async Task<List<PageStruct>> GetPages(\n            string blogId,\n            string userName,\n            string password,\n            CancellationToken cancellationToken)\n        {\n            var list = new List<PageStruct>();\n\n            var permission = await _security.ValidatePermissions(\n                blogId,\n                userName,\n                password,\n                CancellationToken.None\n                ).ConfigureAwait(false);\n\n            if(!permission.CanEditPages)\n            {\n                _log.LogWarning($\"user {userName} cannot edit pages\");\n                return list;\n            }\n\n            var pages = await _pageService.GetAllPages(blogId, cancellationToken).ConfigureAwait(false);\n\n            foreach (var p in pages)\n            {\n                if (!string.IsNullOrWhiteSpace(p.ViewRoles)) { continue; }\n\n                var pageUrl = await _pageUrlResolver.ResolvePageUrl(p).ConfigureAwait(false);\n                var s = _mapper.GetStructFromPage(p, pageUrl, false);\n                list.Add(s);\n            }\n            \n            return list;\n        }\n\n        public async Task<List<PageStruct>> GetPageList(\n            string blogId,\n            string userName,\n            string password,\n            CancellationToken cancellationToken)\n        {\n            var list = new List<PageStruct>();\n\n            var permission = await _security.ValidatePermissions(\n                blogId,\n                userName,\n                password,\n                CancellationToken.None\n                ).ConfigureAwait(false);\n\n            if (!permission.CanEditPages)\n            {\n                _log.LogWarning($\"user {userName} cannot edit pages\");\n                return list;\n            }\n\n            var pages = await _pageService.GetAllPages(blogId, cancellationToken).ConfigureAwait(false);\n            \n            foreach (var p in pages)\n            {\n\n                if(!string.IsNullOrWhiteSpace(p.ViewRoles)) { continue; }\n\n                var pageUrl = await _pageUrlResolver.ResolvePageUrl(p).ConfigureAwait(false);\n                var s = _mapper.GetStructFromPage(p, pageUrl, false);\n                list.Add(s);\n            }\n            \n            return list;\n        }\n\n        public async Task<PageStruct> GetPage(\n            string blogId, \n            string pageId,\n            string userName,\n            string password,\n            CancellationToken cancellationToken)\n        {\n            var permission = await _security.ValidatePermissions(\n                blogId,\n                userName,\n                password,\n                CancellationToken.None\n                ).ConfigureAwait(false);\n\n            if(!permission.CanEditPages)\n            {\n                _log.LogWarning($\"user {userName} cannot edit pages\");\n                return new PageStruct();\n            }\n\n            var existing = await _pageService.GetPage(pageId, cancellationToken).ConfigureAwait(false);\n\n            if (existing == null) { return new PageStruct(); }\n\n            var commentsOpen = false;\n            var pageUrl = await _pageUrlResolver.ResolvePageUrl(existing).ConfigureAwait(false);\n            var project = await _projectService.GetCurrentProjectSettings().ConfigureAwait(false);\n            await _pageUrlResolver.ConvertMediaToAbsoluteUrls(existing, project).ConfigureAwait(false);\n\n            var pageStruct = _mapper.GetStructFromPage(existing, pageUrl, commentsOpen);\n            return pageStruct;\n        }\n\n        public async Task<string> NewPage(\n            string blogId,\n            string userName,\n            string password,\n            PageStruct newPage, \n            bool publish)\n        {\n            var permission = await _security.ValidatePermissions(\n                blogId,\n                userName,\n                password,\n                CancellationToken.None\n                ).ConfigureAwait(false);\n\n            if (!permission.CanEditPages)\n            {\n                _log.LogWarning($\"user {userName} cannot edit pages\");\n                return null;\n            }\n\n            var page = _mapper.GetPageFromStruct(newPage);\n\n            page.ProjectId = blogId;\n            page.Id = Guid.NewGuid().ToString();\n            page.CreatedByUser = permission.DisplayName;\n            page.LastModifiedByUser = permission.DisplayName;\n            if(!string.IsNullOrWhiteSpace(page.ParentId))\n            {\n                var parent = await _pageService.GetPage(page.ParentId).ConfigureAwait(false);\n                if(parent != null)\n                {\n                    page.ParentSlug = parent.Slug;\n                } \n            }\n            else\n            {\n                page.ParentSlug = null;\n            }\n            if (string.IsNullOrWhiteSpace(newPage.pageOrder))\n            {\n                page.PageOrder = await _pageService.GetNextChildPageOrder(page.ParentSlug).ConfigureAwait(false);\n            }\n\n            var utcPubDate = _timeZoneHelper.ConvertToUtc(newPage.pageDate, permission.TimeZoneId);\n\n            if (publish)\n            {\n                if (utcPubDate.Year == 1)\n                {\n                    //invalid because not supplied\n                    utcPubDate = DateTime.UtcNow;\n                }\n\n                if (utcPubDate < DateTime.UtcNow)\n                {\n                    page.IsPublished = true;\n                    page.PubDate = utcPubDate;\n                }\n                else\n                {\n                    //future date needs to be draft, it will auto publish after pub date\n                    page.DraftAuthor = page.Author;\n                    page.DraftContent = page.Content;\n                    page.DraftPubDate = utcPubDate;\n                    page.IsPublished = false;\n                    page.PubDate = null;\n                    page.Content = null;\n                }\n                \n            }\n            else\n            {\n                page.DraftAuthor = page.Author;\n                page.DraftContent = page.Content;\n                if (utcPubDate > DateTime.UtcNow)\n                {\n                    page.DraftPubDate = utcPubDate;\n                }\n                page.Content = null;\n                page.IsPublished = false;\n                page.PubDate = null;\n\n            }\n\n            await _pageUrlResolver.ConvertMediaToRelativeUrls(page).ConfigureAwait(false);\n            \n            await _pageService.Create(page).ConfigureAwait(false);\n            await _navigationCache.ClearTreeCache();\n            if (publish)\n            {\n                await _pageService.FirePublishEvent(page).ConfigureAwait(false);\n            }\n\n            return page.Id;\n            \n        }\n\n        public async Task<bool> EditPage(\n            string blogId, \n            string pageId,\n            string userName,\n            string password,\n            PageStruct pageStruct, \n            bool publish)\n        {\n            var permission = await _security.ValidatePermissions(\n                blogId,\n                userName,\n                password,\n                CancellationToken.None\n                ).ConfigureAwait(false);\n\n            if (!permission.CanEditPages)\n            {\n                _log.LogWarning($\"user {userName} cannot edit pages\");\n                return false;\n            }\n\n            var page = await _pageService.GetPage(pageId).ConfigureAwait(false);\n            if (page == null)\n            {\n                _log.LogError($\"page not found for id {pageId}\");\n                return false;\n            }\n\n            if (!string.IsNullOrWhiteSpace(page.TemplateKey))\n            {\n                throw new InvalidOperationException(\"templated pages cannot be edited via metaweblog api\");  \n            }\n            if (page.ContentType != ProjectConstants.HtmlContentType)\n            {\n                throw new InvalidOperationException(\"non html content cannot be edited via metaweblog api\");\n            }\n\n            var history = page.CreateHistory(permission.DisplayName);\n            var update = _mapper.GetPageFromStruct(pageStruct);\n            var utcPubDate = _timeZoneHelper.ConvertToUtc(pageStruct.pageDate, permission.TimeZoneId);\n\n            if (publish)\n            {\n                if (utcPubDate < DateTime.UtcNow)\n                {\n                    page.IsPublished = true;\n                    if (utcPubDate.Year != 1) // no date specified\n                    {\n                        page.PubDate = utcPubDate;\n                    }\n                    if(!page.PubDate.HasValue)\n                    {\n                        page.PubDate = DateTime.UtcNow;\n                    }\n                    page.Content = update.Content;\n                    page.DraftAuthor = null;\n                    page.DraftContent = null;\n                    page.DraftPubDate = null;\n                }\n                else\n                {\n                    //future date needs to be draft, it will auto publish after pub date\n                    page.DraftAuthor = update.Author;\n                    page.DraftContent = update.Content;\n                    page.DraftPubDate = utcPubDate;\n                   \n                }\n                \n            }\n            else\n            {\n                page.DraftAuthor = update.Author;\n                page.DraftContent = update.Content;\n                if (utcPubDate > DateTime.UtcNow)\n                {\n                    page.DraftPubDate = utcPubDate;\n                }\n            }\n            \n            page.PageOrder = update.PageOrder;\n            page.ParentId = update.ParentId;\n            if (!string.IsNullOrWhiteSpace(page.ParentId))\n            {\n                var parent = await _pageService.GetPage(page.ParentId);\n                if (parent != null)\n                {\n                    page.ParentSlug = parent.Slug;\n                }\n            }\n            else\n            {\n                page.ParentSlug = null;\n            }\n            page.Title = update.Title;\n            page.LastModifiedByUser = permission.DisplayName;\n\n            await _contentHistoryCommands.Create(blogId, history).ConfigureAwait(false);\n\n            await _pageUrlResolver.ConvertMediaToRelativeUrls(page).ConfigureAwait(false);\n\n            await _pageService.Update(page).ConfigureAwait(false);\n\n            await _navigationCache.ClearTreeCache();\n\n            if (publish)\n            {\n                await _pageService.FirePublishEvent(page).ConfigureAwait(false);\n                await _contentHistoryCommands.DeleteDraftHistory(blogId, history.ContentId).ConfigureAwait(false);\n            }\n\n            return true;\n        }\n\n        public Task<bool> DeletePage(\n            string blogId, \n            string pageId,\n            string userName,\n            string password\n            )\n        {\n            //var permission = await _security.ValidatePermissions(\n            //    blogId,\n            //    userName,\n            //    password,\n            //    CancellationToken.None\n            //    ).ConfigureAwait(false);\n\n            //if (!permission.CanEditPages)\n            //{\n            //    _log.LogWarning($\"user {userName} cannot edit pages\");\n            //    return false;\n            //}\n\n            //TODO: implement\n            //return await blogService.Delete(blogId, postId);\n            throw new NotImplementedException();\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.MetaWeblog/README.md",
    "content": "# cloudscribe.SimpleContent.MetaWeblog\n\n[![NuGet](https://img.shields.io/nuget/v/cloudscribe.SimpleContent.MetaWeblog.svg)](https://www.nuget.org/packages/cloudscribe.SimpleContent.MetaWeblog)\n[![License: Apache-2.0](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://opensource.org/licenses/Apache-2.0)\n\nMetaWeblog API support for cloudscribe.SimpleContent.\n\n## Installation\n\n```shell\nInstall-Package cloudscribe.SimpleContent.MetaWeblog\n```\n\n## Usage\n\nAdd this package to enable MetaWeblog API integration in your SimpleContent-based ASP.NET Core project.\n\n## Contributing\n\nContributions are welcome! Please see the [contributing guidelines](https://github.com/cloudscribe/cloudscribe.SimpleContent/blob/main/CONTRIBUTING.md).\n\n## License\n\nLicensed under the Apache 2.0 License. See the [LICENSE](https://github.com/cloudscribe/cloudscribe.SimpleContent/blob/main/LICENSE) file for details.\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.MetaWeblog/ServiceCollectionExtensions.cs",
    "content": "﻿using cloudscribe.MetaWeblog;\nusing cloudscribe.SimpleContent.MetaWeblog;\nusing cloudscribe.Versioning;\nusing Microsoft.Extensions.Configuration;\nusing Microsoft.Extensions.DependencyInjection.Extensions;\n\nnamespace Microsoft.Extensions.DependencyInjection\n{\n    public static class ServiceCollectionExtensions\n    {\n        public static IServiceCollection AddMetaWeblogForSimpleContent(\n            this IServiceCollection services,\n            IConfiguration configuration = null\n            )\n        {\n            services.TryAddScoped<IMetaWeblogSecurity, MetaWeblogSecurity>();\n            services.TryAddScoped<IMetaWeblogService, MetaWeblogService>();\n            services.TryAddScoped<MetaWeblogModelMapper, MetaWeblogModelMapper>();\n            services.AddScoped<IVersionProvider, VersionProvider>();\n\n            services.AddCloudscribeMetaWeblog(configuration);\n            \n            return services;\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.MetaWeblog/VersionProvider.cs",
    "content": "﻿using cloudscribe.Versioning;\nusing System;\nusing System.Reflection;\n\nnamespace cloudscribe.SimpleContent.MetaWeblog\n{\n    public class VersionProvider : IVersionProvider\n    {\n        private Assembly assembly = typeof(MetaWeblogService).Assembly;\n\n        public string Name\n        {\n            get { return assembly.GetName().Name; }\n\n        }\n\n        public Guid ApplicationId { get { return new Guid(\"a4eb54de-39e9-4af6-ab55-1077db6f2ce3\"); } }\n\n        public Version CurrentVersion\n        {\n\n            get\n            {\n\n                var version = new Version(2, 0, 0, 0);\n                var versionString = assembly.GetCustomAttribute<AssemblyFileVersionAttribute>().Version;\n                if (!string.IsNullOrWhiteSpace(versionString))\n                {\n                    Version.TryParse(versionString, out version);\n                }\n\n                return version;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.MetaWeblog/cloudscribe.SimpleContent.MetaWeblog.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <Description>cloudscribe.SimpleContent.MetaWeblog Class Library</Description>\n    <Version>10.1.0</Version>\n    <TargetFramework>net10.0</TargetFramework>\n    <Authors>Joe Audette</Authors>\n    <PackageTags>cloudscribe;metaweblog;blog;cms</PackageTags>\n    <PackageIcon>icon.png</PackageIcon>\n    <PackageProjectUrl>https://github.com/cloudscribe/cloudscribe.SimpleContent</PackageProjectUrl>\n    <PackageLicenseExpression>Apache-2.0</PackageLicenseExpression>\n    <RepositoryUrl>https://github.com/cloudscribe/cloudscribe.SimpleContent.git</RepositoryUrl>\n    <RepositoryType>git</RepositoryType>\n\n    <PackageReadmeFile>README.md</PackageReadmeFile>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <None Include=\"icon.png\" Pack=\"true\" PackagePath=\"\\\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <ProjectReference Include=\"..\\cloudscribe.MetaWeblog\\cloudscribe.MetaWeblog.csproj\" />\n    <ProjectReference Include=\"..\\cloudscribe.SimpleContent.Models\\cloudscribe.SimpleContent.Models.csproj\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"Microsoft.Extensions.Options.ConfigurationExtensions\" Version=\"10.0.0\" />\n    <PackageReference Include=\"cloudscribe.DateTimeUtils\" Version=\"10.1.0\" />\n    <PackageReference Include=\"cloudscribe.Web.Navigation\" Version=\"10.1.0\" />\n    <PackageReference Include=\"cloudscribe.Versioning\" Version=\"10.1.0\" />\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"README.md\" Pack=\"true\" PackagePath=\"/\" />\n  </ItemGroup>\n</Project>\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Models/Blog/BlogEditOptions.cs",
    "content": "﻿namespace cloudscribe.SimpleContent.Models\n{\n    public class BlogEditOptions\n    {\n        public bool ForceLowerCaseCategories { get; set; } = false;\n        public bool AllowMarkdown { get; set; } = true;\n        public bool HideUnpublishButton { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Models/Blog/DefaultBlogRoutes.cs",
    "content": "﻿\n\nnamespace cloudscribe.SimpleContent.Models\n{\n    public class DefaultBlogRoutes : IBlogRoutes\n    {\n        public string PostWithDateRouteName { get; } = ProjectConstants.PostWithDateRouteName;\n\n        public string PostWithoutDateRouteName { get; } = ProjectConstants.PostWithoutDateRouteName;\n\n        public string MostRecentPostRouteName { get; } = ProjectConstants.MostRecentPostRouteName;\n\n        public string BlogCategoryRouteName\n        {\n            get { return ProjectConstants.BlogCategoryRouteName; }\n        }\n\n        public string BlogArchiveRouteName\n        {\n            get { return ProjectConstants.BlogArchiveRouteName; }\n        }\n\n        public string NewPostRouteName\n        {\n            get { return ProjectConstants.NewPostRouteName; }\n        }\n\n        public string BlogIndexRouteName\n        {\n            get { return ProjectConstants.BlogIndexRouteName; }\n        }\n\n        public string PostEditRouteName\n        {\n            get { return ProjectConstants.PostEditRouteName; }\n        }\n\n        public string PostEditWithTemplateRouteName\n        {\n            get { return ProjectConstants.PostEditWithTemplateRouteName; }\n        }\n\n        public string PostDeleteRouteName\n        {\n            get { return ProjectConstants.PostDeleteRouteName; }\n        }\n\n        public string PostHistoryRouteName { get; } = ProjectConstants.PostHistoryRouteName;\n\n        public string CanEditRouteName { get; } = ProjectConstants.BlogCanEditRouteName;\n\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Models/Blog/IBlogRoutes.cs",
    "content": "﻿\nnamespace cloudscribe.SimpleContent.Models\n{\n    public interface IBlogRoutes\n    {\n        string PostWithDateRouteName { get; }\n\n        string PostWithoutDateRouteName { get; }\n\n        string MostRecentPostRouteName { get; }\n\n        string BlogCategoryRouteName { get; }\n\n        string BlogArchiveRouteName { get; }\n\n        string NewPostRouteName { get; }\n        \n        string BlogIndexRouteName { get; }\n\n        string PostEditRouteName { get; }\n\n        string PostEditWithTemplateRouteName { get; }\n\n        string PostDeleteRouteName { get; }\n\n        string PostHistoryRouteName { get; }\n\n        string CanEditRouteName { get; }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Models/Blog/IBlogService.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace cloudscribe.SimpleContent.Models\n{\n    public interface IBlogService\n    {\n        \n        Task<bool> CommentsAreOpen(IPost post, bool userIsOwner);\n        string CreateSlug(string title);\n        Task<bool> SlugIsAvailable(string slug);\n        \n        \n        Task<int> GetCount(string category, bool includeUnpublished, CancellationToken cancellationToken = default(CancellationToken));\n        Task<int> GetCount(\n            string projectId,\n            int year,\n            int month = 0,\n            int day = 0,\n            bool includeUnpublished = false,\n            CancellationToken cancellationToken = default(CancellationToken)\n            );\n        Task<IPost> GetPost(string postId, CancellationToken cancellationToken = default(CancellationToken));\n        \n        Task<PostResult> GetPostBySlug(string slug, CancellationToken cancellationToken = default(CancellationToken));\n        Task<List<IPost>> GetRecentPosts(int numberToGet, CancellationToken cancellationToken = default(CancellationToken));\n        Task<List<IPost>> GetFeaturedPosts(int numberToGet, CancellationToken cancellationToken = default(CancellationToken));\n\n        Task<List<IPost>> GetPosts(bool includeUnpublished, CancellationToken cancellationToken = default(CancellationToken));\n        Task<PagedPostResult> GetPosts(string category, int pageNumber, bool includeUnpublished, CancellationToken cancellationToken = default(CancellationToken));\n\n        //Task<string> ResolveMediaUrl(string fileName);\n        \n        Task<PagedPostResult> GetPosts(\n            string projectId,\n            int year,\n            int month = 0,\n            int day = 0,\n            int pageNumber = 1,\n            int pageSize = 10,\n            bool includeUnpublished = false,\n            CancellationToken cancellationToken = default(CancellationToken)\n            );\n\n        Task<Dictionary<string, int>> GetCategories(bool includeUnpublished, CancellationToken cancellationToken = default(CancellationToken));\n        \n        Task<Dictionary<string, int>> GetArchives(bool includeUnpublished, CancellationToken cancellationToken = default(CancellationToken));\n\n        Task<bool> SlugIsAvailable(string projectId, string slug);\n\n        Task Delete(string postId);\n        \n        Task Create(IPost post);\n\n        Task Update(IPost post);\n        \n        //Task SaveMedia(\n        //    string projectId,\n        //    byte[] bytes, \n        //    string fileName);\n        \n        Task FirePublishEvent(IPost post);\n        Task FireUnPublishEvent(IPost post);\n\n        Task PublishReadyDrafts(CancellationToken cancellationToken = default(CancellationToken));\n\n    }\n}"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Models/Blog/IBlogUrlResolver.cs",
    "content": "﻿using System.Threading.Tasks;\n\nnamespace cloudscribe.SimpleContent.Models\n{\n    public interface IBlogUrlResolver\n    {\n        Task<string> ResolveBlogUrl(IProjectSettings project);\n        Task<string> ResolvePostUrl(IPost post, IProjectSettings projectSettings);\n        Task ConvertMediaToRelativeUrls(IPost post);\n        Task ConvertMediaToAbsoluteUrls(IPost post, IProjectSettings projectSettings);\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Models/Blog/IPost.cs",
    "content": "﻿// Copyright (c) Source Tree Solutions, LLC. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.\n// Author:\t\t\t\t\tJoe Audette\n// Created:\t\t\t\t\t\n// Last Modified:\t\t\t2018-08-20\n// \nusing System;\nusing System.Collections.Generic;\n\nnamespace cloudscribe.SimpleContent.Models\n{\n    public interface IPost : IContentItem\n    {\n        string Author { get; set; }\n        string BlogId { get; set; }\n        List<string> Categories { get; set; }\n        List<IComment> Comments { get; set; }\n        \n        bool IsPublished { get; set; }\n        DateTime LastModified { get; set; }\n        \n        /// <summary>\n        /// the idea is to serialize an object with list of metadata and meta links\n        /// whenever this model is modified it is reserialized here then\n        /// we can generate the output html and store it on MetaHtml\n        /// </summary>\n        string MetaJson { get; set; }\n        /// <summary>\n        /// an automatically generated html meta data\n        /// to be generated from the model seriaized in MetaJson\n        /// </summary>\n        string MetaHtml { get; set; }\n        \n        \n        string CorrelationKey { get; set; }\n        bool IsFeatured { get; set; }\n        string ImageUrl { get; set; }\n        string ThumbnailUrl { get; set; }\n        bool ShowComments { get; set; }\n\n        /// <summary>\n        /// If not null or whitespace, displays this teaser on blog index/listing views regardless of <see cref=\"TeaserMode\"/> settings.\n        /// </summary>\n        string TeaserOverride { get; set; }\n\n        /// <summary>\n        /// a place to store the generated teaser so it doens'yt have to be generated on every request\n        /// </summary>\n        string AutoTeaser { get; set; }\n\n        /// <summary>\n        /// If true, will display an entire blog post on index/listing views regardless of <see cref=\"TeaserMode\"/> settings.\n        /// </summary>\n        bool SuppressTeaser { get; set; }\n\n        // new fields 2018-06-20\n        DateTime CreatedUtc { get; set; }\n        string CreatedByUser { get; set; }\n        string LastModifiedByUser { get; set; }\n        string DraftContent { get; set; }\n        string DraftAuthor { get; set; }\n        DateTime? DraftPubDate { get; set; }\n\n        string TemplateKey { get; set; }\n        string SerializedModel { get; set; }\n        string DraftSerializedModel { get; set; }\n\n        string Serializer { get; set; }\n    }\n}"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Models/Blog/IPostCommands.cs",
    "content": "﻿using System;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace cloudscribe.SimpleContent.Models\n{\n    public interface IPostCommandsSingleton : IPostCommands\n    {\n\n    }\n\n    public interface IPostCommands\n    {\n        Task Delete(\n            string projectId,\n            string postId,\n            CancellationToken cancellationToken = default(CancellationToken));\n\n        Task Create(\n            string projectId,\n            IPost post,\n            CancellationToken cancellationToken = default(CancellationToken));\n\n        Task Update(\n            string projectId,\n            IPost post,\n            CancellationToken cancellationToken = default(CancellationToken));\n\n        //Task HandlePubDateAboutToChange(\n        //    string projectId,\n        //    IPost post,\n        //    DateTime newPubDate,\n        //    CancellationToken cancellationToken = default(CancellationToken));\n\n        Task<string> CloneToNewProject(\n            string sourceProjectId,\n            string targetProjectId,\n            string postId,\n            bool includeComments = false,\n            CancellationToken cancellationToken = default(CancellationToken));\n\n    }\n\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Models/Blog/IPostQueries.cs",
    "content": "﻿// Copyright (c) Source Tree Solutions, LLC. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.\n// Author:                  Joe Audette\n// Created:                 2016-02-07\n// Last Modified:           2019-02-11\n// \n\nusing System;\nusing System.Collections.Generic;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace cloudscribe.SimpleContent.Models\n{\n    public interface IPostQueriesSingleton : IPostQueries\n    {\n\n    }\n\n\n    public interface IPostQueries\n    {\n        Task<Dictionary<string, int>> GetCategories(\n            string blogId,\n            bool includeUnpublished,\n            CancellationToken cancellationToken = default(CancellationToken)\n            );\n\n        Task<Dictionary<string, int>> GetArchives(\n            string blogId,\n            bool includeUnpublished,\n            CancellationToken cancellationToken = default(CancellationToken)\n            );\n\n        Task<IPost> GetPost(\n            string blogId,\n            string postId,\n            CancellationToken cancellationToken = default(CancellationToken)\n            );\n\n        Task<PostResult> GetPostBySlug(\n            string blogId,\n            string slug,\n            CancellationToken cancellationToken = default(CancellationToken)\n            );\n\n        Task<IPost> GetPostByCorrelationKey(\n            string blogId,\n            string correlationKey,\n            CancellationToken cancellationToken = default(CancellationToken)\n            );\n\n        Task<bool> SlugIsAvailable(\n            string blogId,\n            string slug,\n            CancellationToken cancellationToken = default(CancellationToken)\n            );\n\n        Task<List<IPost>> GetRecentPosts(\n            string blogId,\n            int numberToGet,\n            CancellationToken cancellationToken = default(CancellationToken)\n            );\n\n        Task<List<IPost>> GetFeaturedPosts(\n            string blogId,\n            int numberToGet,\n            CancellationToken cancellationToken = default(CancellationToken)\n            );\n\n        Task<List<IPost>> GetPosts(\n            string blogId,\n            bool includeUnpublished,\n            CancellationToken cancellationToken = default(CancellationToken)\n            );\n\n        Task<PagedPostResult> GetPosts(\n            string blogId,\n            string category,\n            bool includeUnpublished,\n            int pageNumber,\n            int pageSize,\n            CancellationToken cancellationToken = default(CancellationToken)\n            );\n\n        Task<PagedPostResult> GetPosts(\n            string blogId,\n            int year,\n            int month = 0,\n            int day = 0,\n            int pageNumber = 1,\n            int pageSize = 10,\n            bool includeUnpublished = false,\n            CancellationToken cancellationToken = default(CancellationToken)\n            );\n\n        Task<int> GetCount(\n            string blogId,\n            string category,\n            bool includeUnpublished,\n            CancellationToken cancellationToken = default(CancellationToken)\n            );\n\n        Task<int> GetCount(\n            string blogId,\n            int year,\n            int month = 0,\n            int day = 0,\n            bool includeUnpublished = false,\n            CancellationToken cancellationToken = default(CancellationToken)\n            );\n\n        Task<List<IPost>> GetPostsReadyForPublish(\n            string blogId,\n            CancellationToken cancellationToken = default(CancellationToken)\n            );\n\n        Task<List<IPost>> GetRelatedPosts(\n            string blogId,\n            string currentPostId,\n            int numberToGet,\n            CancellationToken cancellationToken = default(CancellationToken)\n            );\n\n\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Models/Blog/ITeaserService.cs",
    "content": "﻿namespace cloudscribe.SimpleContent.Models\n{\n    /// <summary>\n    /// Service which extracts abbreviated \"teaser\" text from html content for display on index/listing views.\n    /// </summary>\n    public interface ITeaserService\n    {\n        /// <summary>\n        /// Generates a teaser based on the provided parameters.\n        /// </summary>\n        /// <param name=\"truncationMode\"></param>\n        /// <param name=\"truncationLength\"></param>\n        /// <param name=\"html\"></param>\n        /// <param name=\"cacheKey\">typically should use the post id</param>\n        /// <param name=\"slug\">used only for logging warnings</param>\n        /// <param name=\"languageCode\">used to determine of right to left processing should be used</param>\n        /// <returns></returns>\n        TeaserResult GenerateTeaser(\n            TeaserTruncationMode truncationMode,\n            int truncationLength,\n            string html,\n            string cacheKey,\n            string slug,\n            string languageCode,\n            bool logWarnings = true);\n\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Models/Blog/NotImplementedBlogService.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace cloudscribe.SimpleContent.Models\n{\n    public class NotImplementedBlogService : IBlogService\n    {\n        public Task<bool> CommentsAreOpen(IPost post, bool userIsOwner)\n        {\n            throw new NotImplementedException();\n        }\n\n        public string CreateSlug(string title)\n        {\n            throw new NotImplementedException();\n        }\n\n        public Task Delete(string postId)\n        {\n            throw new NotImplementedException();\n        }\n        \n        public Task<Dictionary<string, int>> GetArchives(bool includeUnpublished, CancellationToken cancellationToken = default(CancellationToken))\n        {\n            throw new NotImplementedException();\n        }\n\n        public Task<Dictionary<string, int>> GetCategories(bool includeUnpublished, CancellationToken cancellationToken = default(CancellationToken))\n        {\n            throw new NotImplementedException();\n        }\n\n        public Task<int> GetCount(string category, bool includeUnpublished, CancellationToken cancellationToken = default(CancellationToken))\n        {\n            throw new NotImplementedException();\n        }\n\n        public Task<int> GetCount(string projectId, int year, int month = 0, int day = 0, bool includeUnpublished = false, CancellationToken cancellationToken = default(CancellationToken))\n        {\n            throw new NotImplementedException();\n        }\n\n        public Task<IPost> GetPost(string postId, CancellationToken cancellationToken = default(CancellationToken))\n        {\n            throw new NotImplementedException();\n        }\n\n        public Task<PostResult> GetPostBySlug(string slug, CancellationToken cancellationToken = default(CancellationToken))\n        {\n            throw new NotImplementedException();\n        }\n\n        public Task<List<IPost>> GetPosts(string blogId, int numberToGet, int year, int month = 0, int day = 0, CancellationToken cancellationToken = default(CancellationToken))\n        {\n            throw new NotImplementedException();\n        }\n\n        public Task<PagedPostResult> GetPosts(\n            string blogId, \n            int year, \n            int month = 0, \n            int day = 0, \n            int pageNumber = 1, \n            int pageSize = 10, \n            bool includeUnpublished = false,\n            CancellationToken cancellationToken = default(CancellationToken)\n            )\n        {\n            throw new NotImplementedException();\n        }\n\n        public Task<List<IPost>> GetRecentPosts(int numberToGet, CancellationToken cancellationToken = default(CancellationToken))\n        {\n            throw new NotImplementedException();\n        }\n\n        public Task<List<IPost>> GetFeaturedPosts(int numberToGet, CancellationToken cancellationToken = default(CancellationToken))\n        {\n            throw new NotImplementedException();\n        }\n        \n        public Task<List<IPost>> GetPosts(bool includeUnpublished, CancellationToken cancellationToken = default(CancellationToken))\n        {\n            throw new NotImplementedException();\n        }\n\n        public Task<PagedPostResult> GetPosts(string category, int pageNumber, bool includeUnpublished, CancellationToken cancellationToken = default(CancellationToken))\n        {\n            throw new NotImplementedException();\n        }\n        \n       \n        public Task Create(IPost post)\n        {\n            throw new NotImplementedException();\n        }\n\n        public Task Update(IPost post)\n        {\n            throw new NotImplementedException();\n        }\n        \n        //public Task SaveMedia(string blogId, byte[] bytes, string fileName)\n        //{\n        //    throw new NotImplementedException();\n        //}\n        \n        public Task<bool> SlugIsAvailable(string slug)\n        {\n            throw new NotImplementedException();\n        }\n\n        public Task<bool> SlugIsAvailable(string blogId, string slug)\n        {\n            throw new NotImplementedException();\n        }\n\n        public Task FirePublishEvent(IPost post)\n        {\n            throw new NotImplementedException();\n        }\n\n        public Task FireUnPublishEvent(IPost post)\n        {\n            throw new NotImplementedException();\n        }\n\n        public Task PublishReadyDrafts(CancellationToken cancellationToken = default(CancellationToken))\n        {\n            throw new NotImplementedException();\n        }\n\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Models/Blog/PagedPostResult.cs",
    "content": "﻿using System.Collections.Generic;\n\nnamespace cloudscribe.SimpleContent.Models\n{\n    public class PagedPostResult\n    {\n        public PagedPostResult()\n        {\n            Data = new List<IPost>();\n        }\n        public List<IPost> Data { get; set; }\n        public int TotalItems { get; set; } = 0;\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Models/Blog/Post.cs",
    "content": "﻿// Copyright (c) Source Tree Solutions, LLC. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.\n// Author:\t\t\t\t\tJoe Audette\n// Created:\t\t\t\t\t\n// Last Modified:\t\t\t2018-08-20\n// \nusing System;\nusing System.Collections.Generic;\n\nnamespace cloudscribe.SimpleContent.Models\n{\n    public class Post : IPost\n    {\n        public Post()\n        {\n            Categories = new List<string>();\n            Comments = new List<IComment>();\n        }\n\n        public string Id { get; set; } \n\n        public string BlogId { get; set; } \n\n        public string Title { get; set; }\n\n        /// <summary>\n        /// This field is a place to store a surrogate key if needed.\n        /// For example in a multi-tenant multi-lanaguage setup, it could be used\n        /// to correlate posts between the different language sites\n        /// to implement a language switcher. ie the corresponding post in the other\n        /// site could be found by looking it up by the correlationkey\n        /// </summary>\n        public string CorrelationKey { get; set; } = string.Empty;\n\n        public string Author { get; set; }\n        \n        public string Slug { get; set; }\n        \n        public string MetaDescription { get; set; }\n        public string MetaJson { get; set; }\n        public string MetaHtml { get; set; }\n\n        public string Content { get; set; }\n\n        public DateTime? PubDate { get; set; }\n\n        public DateTime LastModified { get; set; } = DateTime.UtcNow;\n\n        public bool IsPublished { get; set; }\n        \n        public List<string> Categories { get; set; }\n        public List<IComment> Comments { get; set; }\n        public bool IsFeatured { get; set; }\n\n        // not currently used but could be later\n        public string ImageUrl { get; set; }\n        public string ThumbnailUrl { get; set; }\n\n        public string ContentType { get; set; } = \"html\";\n        public bool ShowComments { get; set; } = true;\n\n        /// <summary>\n        /// If not null or whitespace, displays this teaser on blog index/listing views regardless of <see cref=\"TeaserMode\"/> settings.\n        /// </summary>\n        public string TeaserOverride { get; set; }\n\n        /// <summary>\n        /// a place to store the generated teaser so it doens'yt have to be generated on every request\n        /// </summary>\n        public string AutoTeaser { get; set; }\n\n        /// <summary>\n        /// If true, will display an entire blog post on index/listing views regardless of <see cref=\"TeaserMode\"/> settings.\n        /// </summary>\n        public bool SuppressTeaser { get; set; }\n\n\n        // new fields 2018-06-20\n        public DateTime CreatedUtc { get; set; } = DateTime.UtcNow;\n\n        public string CreatedByUser { get; set; }\n        public string LastModifiedByUser { get; set; }\n\n        public string DraftContent { get; set; }\n        public string DraftAuthor { get; set; }\n        public DateTime? DraftPubDate { get; set; }\n\n        public string TemplateKey { get; set; }\n        public string SerializedModel { get; set; }\n        public string DraftSerializedModel { get; set; }\n        public string Serializer { get; set; }\n\n        public static Post FromIPost(IPost post)\n        {\n            var p = new Post();\n            post.CopyTo(p);\n            return p;\n        }\n        public string Script { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Models/Blog/PostResult.cs",
    "content": "﻿namespace cloudscribe.SimpleContent.Models\n{\n    public class PostResult\n    {\n        public IPost Post { get; set; } = null;\n\n        public IPost PreviousPost { get; set; } = null;\n\n        public IPost NextPost { get; set; } = null;\n\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Models/Blog/TeaserCacheOptions.cs",
    "content": "﻿namespace cloudscribe.SimpleContent.Models\n{\n    public class TeaserCacheOptions\n    {\n        public int CacheDurationInSeconds { get; set; } = 1200; //default 20 minutes\n\n        public long Size { get; set; } = 1;\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Models/Blog/TeaserMode.cs",
    "content": "﻿// Copyright (c) Source Tree Solutions, LLC. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.\n// Authors:\t\t\t\t\tJohn Jacobs/Joe Audette\n// Created:\t\t\t\t\t2017-12-22\n// Last Modified:\t\t\t2018-02-06\n// \n\n\nnamespace cloudscribe.SimpleContent.Models\n{\n    /// <summary>\n    /// Specifies whether SimpleContent should show teasers for blog posts on index/listing views.\n    /// The default is OFF (show entire post).\n    /// </summary>\n    public enum TeaserMode : byte\n    {\n        /// <summary>\n        /// (Default) No teaser - show entire post.\n        /// </summary>\n        Off = 0,\n        /// <summary>\n        /// Use teasers for post lists and feed.\n        /// </summary>\n        ListsAndFeed,\n        /// <summary>\n        /// Use teasers only for the blog feed\n        /// </summary>\n        FeedOnly,\n        /// <summary>\n        /// Use teasers only for the post lists\n        /// </summary>\n        ListOnly\n    }\n}"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Models/Blog/TeaserResult.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Text;\n\nnamespace cloudscribe.SimpleContent.Models\n{\n    public class TeaserResult\n    {\n        public string Content { get; set; }\n        public bool DidTruncate { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Models/Blog/TeaserTruncationMode.cs",
    "content": "﻿// Copyright (c) Source Tree Solutions, LLC. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.\n// Author:\t\t\t\t\tJohn Jacobs\n// Created:\t\t\t\t\t2017-12-22\n// Last Modified:\t\t\t2017-12-22\n// \n\nnamespace cloudscribe.SimpleContent.Models\n{\n    /// <summary>\n    /// Specifies how SimpleContent will truncate blog posts to create teasers for index/listing views.\n    /// </summary>\n    public enum TeaserTruncationMode : byte\n    {\n        /// <summary>\n        /// (Default) Truncate the post based on number of words.\n        /// </summary>\n        Word = 0,\n        /// <summary>\n        /// Truncate the post to a fixed length.\n        /// </summary>\n        Length,\n        /// <summary>\n        /// Truncate the post based on number of characters.\n        /// </summary>\n        Character\n    }\n}"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Models/CommandResult.cs",
    "content": "﻿using System.Collections.Generic;\n\nnamespace cloudscribe.SimpleContent.Models\n{\n    public class CommandResult<T> where T : class\n    {\n        public CommandResult(T resultType, bool succeeded, List<string> errors)\n        {\n            Value = resultType;\n            Succeeded = succeeded;\n            ErrorMessages = errors;\n\n        }\n\n        public T Value { get; private set; }\n        public bool Succeeded { get; private set; }\n        public List<string> ErrorMessages { get; private set; }\n\n\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Models/Comment/Comment.cs",
    "content": "﻿using System;\n\nnamespace cloudscribe.SimpleContent.Models\n{\n    public class Comment : IComment\n    {\n\n        public string Id { get; set; }\n        public string ContentId { get; set; }\n\n        public string ProjectId { get; set; }\n        public string Author { get; set; }\n        public string Email { get; set; }\n        public string Website { get; set; }\n        public string Content { get; set; }\n        public DateTime PubDate { get; set; }\n        public string Ip { get; set; }\n        public string UserAgent { get; set; }\n        public bool IsAdmin { get; set; }\n        public bool IsApproved { get; set; }\n\n        //public string GravatarUrl { get; set; }\n\n        public static Comment FromIComment(IComment comment)\n        {\n            var c = new Comment();\n            c.Author = comment.Author;\n            c.Content = comment.Content;\n            c.ContentId = comment.ContentId;\n            c.Email = comment.Email;\n            c.Id = comment.Id;\n            c.Ip = comment.Ip;\n            c.IsAdmin = comment.IsAdmin;\n            c.IsApproved = comment.IsApproved;\n            c.ProjectId = comment.ProjectId;\n            c.PubDate = comment.PubDate;\n            c.UserAgent = comment.UserAgent;\n            c.Website = comment.Website;\n\n            return c;\n        }\n\n    }\n\n    \n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Models/Comment/CommentNotificationModel.cs",
    "content": "﻿namespace cloudscribe.SimpleContent.Models\n{\n    public class CommentNotificationModel\n    {\n        public CommentNotificationModel(\n            IProjectSettings project,\n            IPost post,\n            IComment comment,\n            string postUrl)\n        {\n            Project = project;\n            Post = post;\n            Comment = comment;\n            PostUrl = postUrl;\n        }\n\n        public IProjectSettings Project { get; private set; }\n        public IPost Post { get; private set; }\n        public IComment Comment { get; private set; }\n        public string PostUrl { get; private set; }\n\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Models/Comment/IComment.cs",
    "content": "﻿using System;\n\nnamespace cloudscribe.SimpleContent.Models\n{\n    public interface IComment\n    {\n        string Author { get; set; }\n        string Content { get; set; }\n        string ContentId { get; set; }\n        string Email { get; set; }\n        string Id { get; set; }\n        string Ip { get; set; }\n        bool IsAdmin { get; set; }\n        bool IsApproved { get; set; }\n        string ProjectId { get; set; }\n        DateTime PubDate { get; set; }\n        string UserAgent { get; set; }\n        string Website { get; set; }\n    }\n}"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Models/ContentFilterResult.cs",
    "content": "﻿namespace cloudscribe.SimpleContent.Models\n{\n    public class ContentFilterResult\n    {\n        public string FilteredContent { get; set; }\n        public bool IsFullContent { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Models/ContentLocalizationOptions.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Text;\n\nnamespace cloudscribe.SimpleContent.Models\n{\n    public class ContentLocalizationOptions\n    {\n        \n        public bool UseCultureRoutesAndProjects { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Models/ContentUtils.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Globalization;\nusing System.Text;\n\nnamespace cloudscribe.SimpleContent.Models\n{\n    public static class ContentUtils\n    {\n        public static string CreateSlug(string title)\n        {\n            if (string.IsNullOrWhiteSpace(title)) { return title; }\n\n            title = title.ToLowerInvariant().Replace(\"  \", \" \")\n                .Replace(\" \", \"-\")\n                .Replace(\"--\",\"-\")\n                .Replace(\"--\", \"-\")\n                .Replace(\"\\n\", string.Empty)\n                .Replace(\"\\r\", string.Empty)\n                .Replace(\"\\t\", string.Empty)\n                ;\n            title = RemoveDiacritics(title);\n            title = RemoveReservedUrlCharacters(title);\n\n            return title.ToLowerInvariant().Trim();\n        }\n\n        public static string RemoveDiacritics(string text)\n        {\n            if (string.IsNullOrWhiteSpace(text)) { return text; }\n\n            var normalizedString = text.Normalize(NormalizationForm.FormD);\n\n            var stringBuilder = new StringBuilder();\n\n            foreach (var c in normalizedString)\n            {\n                var unicodeCategory = CharUnicodeInfo.GetUnicodeCategory(c);\n                if (unicodeCategory != UnicodeCategory.NonSpacingMark)\n                {\n                    stringBuilder.Append(c);\n                }\n            }\n\n            return stringBuilder.ToString().Normalize(NormalizationForm.FormC);\n\n        }\n\n        public static string RemoveReservedUrlCharacters(string text)\n        {\n            if (string.IsNullOrWhiteSpace(text)) { return text; }\n\n            var reservedCharacters = new List<string>() { \"!\", \"#\", \"$\", \"&\", \"'\", \"(\", \")\", \"*\", \",\", \"/\", \":\", \";\", \"=\", \"?\", \"@\", \"[\", \"]\", \"\\\"\", \"%\", \".\", \"<\", \">\", \"\\\\\", \"^\", \"_\", \"'\", \"{\", \"}\", \"|\", \"~\", \"`\", \"+\" };\n\n            foreach (var chr in reservedCharacters)\n            {\n                text = text.Replace(chr, \"\");\n            }\n\n            return text;\n        }\n\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Models/EventHandlers/IHandlePageCreated.cs",
    "content": "﻿using System.Threading;\nusing System.Threading.Tasks;\n\nnamespace cloudscribe.SimpleContent.Models.EventHandlers\n{\n    public interface IHandlePageCreated\n    {\n        Task Handle(\n            string projectId,\n            IPage page,\n            CancellationToken cancellationToken = default(CancellationToken)\n            );\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Models/EventHandlers/IHandlePageMoved.cs",
    "content": "﻿using System.Threading;\nusing System.Threading.Tasks;\n\nnamespace cloudscribe.SimpleContent.Models.EventHandlers\n{\n    public interface IHandlePageMoved\n    {\n        Task Handle(\n            string projectId,\n            IPage movedPage,\n            IPage targetPage,\n            string position,\n            CancellationToken cancellationToken = default(CancellationToken)\n            );\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Models/EventHandlers/IHandlePagePreDelete.cs",
    "content": "﻿using System.Threading;\nusing System.Threading.Tasks;\n\nnamespace cloudscribe.SimpleContent.Models.EventHandlers\n{\n    public interface IHandlePagePreDelete\n    {\n        Task Handle(\n            string projectId,\n            string pageId,\n            CancellationToken cancellationToken = default(CancellationToken)\n            );\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Models/EventHandlers/IHandlePagePreUpdate.cs",
    "content": "﻿using System.Threading;\nusing System.Threading.Tasks;\n\nnamespace cloudscribe.SimpleContent.Models.EventHandlers\n{\n    public interface IHandlePagePreUpdate\n    {\n        Task Handle(\n            string projectId,\n            string pageId,\n            CancellationToken cancellationToken = default(CancellationToken)\n            );\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Models/EventHandlers/IHandlePagePublished.cs",
    "content": "﻿using System.Threading;\nusing System.Threading.Tasks;\n\nnamespace cloudscribe.SimpleContent.Models.EventHandlers\n{\n    public interface IHandlePagePublished\n    {\n        Task Handle(\n            string projectId,\n            IPage page,\n            CancellationToken cancellationToken = default(CancellationToken)\n            );\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Models/EventHandlers/IHandlePageUnPublished.cs",
    "content": "﻿using System.Threading;\nusing System.Threading.Tasks;\n\nnamespace cloudscribe.SimpleContent.Models.EventHandlers\n{\n    public interface IHandlePageUnPublished\n    {\n        Task Handle(\n            string projectId,\n            IPage page,\n            CancellationToken cancellationToken = default(CancellationToken)\n            );\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Models/EventHandlers/IHandlePageUpdated.cs",
    "content": "﻿using System.Threading;\nusing System.Threading.Tasks;\n\nnamespace cloudscribe.SimpleContent.Models.EventHandlers\n{\n    public interface IHandlePageUpdated\n    {\n        Task Handle(\n            string projectId,\n            IPage page,\n            CancellationToken cancellationToken = default(CancellationToken)\n            );\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Models/EventHandlers/IHandlePostCreated.cs",
    "content": "﻿using System.Threading;\nusing System.Threading.Tasks;\n\nnamespace cloudscribe.SimpleContent.Models.EventHandlers\n{\n    public interface IHandlePostCreated\n    {\n        Task Handle(\n            string projectId,\n            IPost post,\n            CancellationToken cancellationToken = default(CancellationToken)\n            );\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Models/EventHandlers/IHandlePostPreDelete.cs",
    "content": "﻿using System.Threading;\nusing System.Threading.Tasks;\n\nnamespace cloudscribe.SimpleContent.Models.EventHandlers\n{\n    public interface IHandlePostPreDelete\n    {\n        Task Handle(\n            string projectId,\n            string postId,\n            CancellationToken cancellationToken = default(CancellationToken)\n            );\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Models/EventHandlers/IHandlePostPreUpdate.cs",
    "content": "﻿using System.Threading;\nusing System.Threading.Tasks;\n\nnamespace cloudscribe.SimpleContent.Models.EventHandlers\n{\n    public interface IHandlePostPreUpdate\n    {\n        Task Handle(\n            string projectId,\n            string postId,\n            CancellationToken cancellationToken = default(CancellationToken)\n            );\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Models/EventHandlers/IHandlePostPublished.cs",
    "content": "﻿using System.Threading;\nusing System.Threading.Tasks;\n\nnamespace cloudscribe.SimpleContent.Models.EventHandlers\n{\n    public interface IHandlePostPublished\n    {\n        Task Handle(\n            string projectId,\n            IPost post,\n            CancellationToken cancellationToken = default(CancellationToken)\n            );\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Models/EventHandlers/IHandlePostUnPublished.cs",
    "content": "﻿using System.Threading;\nusing System.Threading.Tasks;\n\nnamespace cloudscribe.SimpleContent.Models.EventHandlers\n{\n    public interface IHandlePostUnPublished\n    {\n        Task Handle(\n            string projectId,\n            IPost post,\n            CancellationToken cancellationToken = default(CancellationToken)\n            );\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Models/EventHandlers/IHandlePostUpdated.cs",
    "content": "﻿using System.Threading;\nusing System.Threading.Tasks;\n\nnamespace cloudscribe.SimpleContent.Models.EventHandlers\n{\n    public interface IHandlePostUpdated\n    {\n        Task Handle(\n            string projectId,\n            IPost post,\n            CancellationToken cancellationToken = default(CancellationToken)\n            );\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Models/IAuthorNameResolver.cs",
    "content": "﻿using System.Security.Claims;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace cloudscribe.SimpleContent.Models\n{\n    public interface IAuthorNameResolver\n    {\n        Task<string> GetAuthorName(ClaimsPrincipal user, CancellationToken cancellationToken = default(CancellationToken));\n    }\n\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Models/IContentItem.cs",
    "content": "﻿using System;\n\nnamespace cloudscribe.SimpleContent.Models\n{\n    public interface IContentItem\n    {\n        string Id { get; set; }\n        string ContentType { get; set; }\n        string Slug { get; set; }\n        string Title { get; set; }\n        string Content { get; set; }\n        DateTime? PubDate { get; set; }\n        string MetaDescription { get; set; }\n        string Script { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Models/IMarkdownProcessor.cs",
    "content": "﻿namespace cloudscribe.SimpleContent.Models\n{\n    public interface IMarkdownProcessor\n    {\n        string ExtractFirstImageUrl(string markdown);\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Models/IMediaProcessor.cs",
    "content": "﻿// Copyright (c) Source Tree Solutions, LLC. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.\n// Author:                  Joe Audette\n// Created:                 2016-02-12\n// Last Modified:           2017-05-28\n// \n\nusing System.Threading.Tasks;\n\nnamespace cloudscribe.SimpleContent.Models\n{\n    // this is only uised in MetaweblogService\n    public interface IMediaProcessor\n    {\n        Task<string> ResolveMediaUrl(string mediaVirtualPath, string fileName);\n\n        //Task<string> ConvertBase64EmbeddedImagesToFilesWithUrls(string mediaVirtualPath, string content);\n        \n        Task SaveMedia(string mediaVirtualPath, string fileName, byte[] bytes);\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Models/IStorageInfo.cs",
    "content": "﻿namespace cloudscribe.SimpleContent.Models\n{\n    public interface IStorageInfo\n    {\n        string StoragePlatform { get; }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Models/ImageSizeResult.cs",
    "content": "﻿namespace cloudscribe.SimpleContent.Models\n{\n    public class ImageSizeResult\n    {\n        public string Width { get; set; } = \"0px\";\n        public string Height { get; set; } = \"0px\";\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Models/ModelExtensions.cs",
    "content": "﻿// Copyright (c) Source Tree Solutions, LLC. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.\n// Author:\t\t\t\t\tJoe Audette\n// Created:\t\t\t\t\t\n// Last Modified:\t\t\t2018-06-30\n// \nusing System;\nusing System.Linq;\n\nnamespace cloudscribe.SimpleContent.Models\n{\n    public static class ModelExtensions\n    {\n        public static int ApprovedCommentCount(this IPost post)\n        {\n            if(post.Comments == null) { return 0; }\n            return post.Comments.Where(c => c.IsApproved == true).Count();\n        }\n\n        public static int CommentCount(this IPost post)\n        {\n            if (post.Comments == null) { return 0; }\n            return post.Comments.Count();\n        }\n\n        public static string CoalesceContentToDraftContent(this IPost post)\n        {\n            if (string.IsNullOrWhiteSpace(post.Content))\n            {\n                return post.DraftContent;\n            }\n\n            return post.Content;\n        }\n\n        public static bool HasPublishedVersion(this IPost post)\n        {\n            if (post.IsPublished && post.PubDate.HasValue && post.PubDate.Value < DateTime.UtcNow)\n            {\n                return true;\n            }\n\n            return false;\n        }\n\n        public static bool HasDraftVersion(this IPost post)\n        {\n            return !string.IsNullOrWhiteSpace(post.DraftContent);\n        }\n\n        public static void PromoteDraftTemporarilyForRender(this IPost post)\n        {\n            post.Content = post.DraftContent;\n            post.Author = post.DraftAuthor;\n            post.PubDate = post.DraftPubDate;\n\n        }\n\n        public static ContentHistory CreateHistory(this IPost post, string currentUser, bool forDelete = false)\n        {\n            var hx = new ContentHistory()\n            {\n                ArchivedBy = currentUser,\n                Author = post.Author,\n                ArchivedUtc = DateTime.UtcNow,\n                CategoriesCsv = string.Join(\",\", post.Categories.Distinct(StringComparer.OrdinalIgnoreCase)),\n                Content = post.Content,\n                ContentSource = ContentSource.Blog,\n                ContentId = post.Id,\n                ContentType = post.ContentType,\n                CorrelationKey = post.CorrelationKey,\n                CreatedByUser = post.CreatedByUser,\n                CreatedUtc = post.CreatedUtc,\n                DraftAuthor = post.DraftAuthor,\n                DraftContent = post.DraftContent,\n                DraftPubDate = post.DraftPubDate,\n                DraftSerializedModel = post.DraftSerializedModel,\n                IsDraftHx = post.HasDraftVersion(),\n                IsPublished = post.IsPublished,\n                LastModified = post.LastModified,\n                LastModifiedByUser = post.LastModifiedByUser,\n                MetaDescription = post.MetaDescription,\n                MetaHtml = post.MetaHtml,\n                MetaJson = post.MetaJson,\n                ProjectId = post.BlogId,\n                PubDate = post.PubDate,\n                SerializedModel = post.SerializedModel,\n                Serializer = post.Serializer,\n                Slug = post.Slug,\n                TeaserOverride = post.TeaserOverride,\n                TemplateKey = post.TemplateKey,\n                Title = post.Title,\n                WasDeleted = forDelete\n                \n            };\n\n            return hx;\n        }\n\n        public static ContentHistory CreateHistory(this IPage page, string currentUser, bool forDelete = false)\n        {\n            var hx = new ContentHistory()\n            {\n                ArchivedBy = currentUser,\n                Author = page.Author,\n                ArchivedUtc = DateTime.UtcNow,\n                Content = page.Content,\n                ContentSource = ContentSource.Page,\n                ContentId = page.Id,\n                ContentType = page.ContentType,\n                CorrelationKey = page.CorrelationKey,\n                CreatedByUser = page.CreatedByUser,\n                CreatedUtc = page.CreatedUtc,\n                DraftAuthor = page.DraftAuthor,\n                DraftContent = page.DraftContent,\n                DraftPubDate = page.DraftPubDate,\n                DraftSerializedModel = page.DraftSerializedModel,\n                IsDraftHx = page.HasDraftVersion(),\n                IsPublished = page.IsPublished,\n                LastModified = page.LastModified,\n                LastModifiedByUser = page.LastModifiedByUser,\n                MetaDescription = page.MetaDescription,\n                MetaHtml = page.MetaHtml,\n                MetaJson = page.MetaJson,\n                PageOrder = page.PageOrder,\n                ParentId = page.ParentId,\n                ParentSlug = page.ParentSlug,\n                ProjectId = page.ProjectId,\n                PubDate = page.PubDate,\n                SerializedModel = page.SerializedModel,\n                Serializer = page.Serializer,\n                Slug = page.Slug,\n                TemplateKey = page.TemplateKey,\n                Title = page.Title,\n                ViewRoles = page.ViewRoles,\n                WasDeleted = forDelete\n\n            };\n\n            return hx;\n        }\n\n\n        public static int ApprovedCommentCount(this IPage page)\n        {\n            if (page.Comments == null) { return 0; }\n            return page.Comments.Where(c => c.IsApproved == true).Count();\n        }\n\n        public static bool HasPublishedVersion(this IPage page)\n        {\n            if(page.IsPublished && page.PubDate.HasValue && page.PubDate.Value < DateTime.UtcNow)\n            {\n                return true;\n            }\n\n            return false;\n        }\n\n        \n\n        public static bool HasDraftVersion(this IPage page)\n        {\n            return !string.IsNullOrWhiteSpace(page.DraftContent);\n        }\n\n        public static void PromoteDraftTemporarilyForRender(this IPage page)\n        {\n            page.Content = page.DraftContent;\n            page.Author = page.DraftAuthor;\n            page.PubDate = page.DraftPubDate;\n            \n        }\n\n        public static void CopyTo(this IPost input, IPost target)\n        {\n            target.Author = input.Author;\n            target.AutoTeaser = input.AutoTeaser;\n            target.BlogId = input.BlogId;\n            target.Categories = input.Categories;\n            target.Comments = input.Comments;\n            target.Content = input.Content;\n            target.ContentType = input.ContentType;\n            target.Id = input.Id;\n            target.IsPublished = input.IsPublished;\n            target.LastModified = input.LastModified;\n            target.MetaDescription = input.MetaDescription;\n            target.MetaHtml = input.MetaHtml;\n            target.MetaJson = input.MetaJson;\n            target.PubDate = input.PubDate;\n            target.Slug = input.Slug;\n            target.Title = input.Title;\n            target.CorrelationKey = input.CorrelationKey;\n            target.ImageUrl = input.ImageUrl;\n            target.ThumbnailUrl = input.ThumbnailUrl;\n            target.ShowComments = input.ShowComments;\n            target.IsFeatured = input.IsFeatured;\n            target.TeaserOverride = input.TeaserOverride;\n            target.SuppressTeaser = input.SuppressTeaser;\n\n            target.CreatedByUser = input.CreatedByUser;\n            target.CreatedUtc = input.CreatedUtc;\n            target.LastModifiedByUser = input.LastModifiedByUser;\n            target.DraftAuthor = input.DraftAuthor;\n            target.DraftContent = input.DraftContent;\n            target.DraftPubDate = input.DraftPubDate;\n            target.DraftSerializedModel = input.DraftSerializedModel;\n            target.TemplateKey = input.TemplateKey;\n            target.SerializedModel = input.SerializedModel;\n            target.Serializer = input.Serializer;\n        }\n\n        /// <summary>\n        /// this would only be used to restore a deleted post,\n        /// categories and comments would be lost as they are not kept in content history\n        /// </summary>\n        /// <param name=\"input\"></param>\n        /// <param name=\"target\"></param>\n        public static void CopyTo(this ContentHistory input, IPost target)\n        {\n            target.Author = input.Author;\n            target.BlogId = input.ProjectId;\n\n            var catList = input.CategoriesCsv.Split(new char[] { ',' },\n                        StringSplitOptions.RemoveEmptyEntries).Select(c => c.Trim())\n                        .Distinct(StringComparer.OrdinalIgnoreCase)\n                        .ToList();\n            target.Categories.AddRange(catList.Where(p2 =>\n                  target.Categories.All(p1 => p1 != p2)));\n            \n            //target.Comments = input.Comments;\n            target.Content = input.Content;\n            target.ContentType = input.ContentType;\n            target.Id = input.ContentId;\n            target.IsPublished = input.IsPublished;\n            target.LastModified = input.LastModified;\n            target.MetaDescription = input.MetaDescription;\n            target.MetaHtml = input.MetaHtml;\n            target.MetaJson = input.MetaJson;\n            target.PubDate = input.PubDate;\n            target.Slug = input.Slug;\n            target.Title = input.Title;\n            target.CorrelationKey = input.CorrelationKey;\n            //target.ImageUrl = input.ImageUrl;\n            //target.ThumbnailUrl = input.ThumbnailUrl;\n            //target.IsFeatured = input.IsFeatured;\n            //target.TeaserOverride = input.TeaserOverride;\n            //target.SuppressTeaser = input.SuppressTeaser;\n\n            target.CreatedByUser = input.CreatedByUser;\n            target.CreatedUtc = input.CreatedUtc;\n            target.LastModifiedByUser = input.LastModifiedByUser;\n            target.DraftAuthor = input.DraftAuthor;\n            target.DraftContent = input.DraftContent;\n            target.DraftPubDate = input.DraftPubDate;\n            target.DraftSerializedModel = input.DraftSerializedModel;\n            target.TemplateKey = input.TemplateKey;\n            target.SerializedModel = input.SerializedModel;\n            target.Serializer = input.Serializer;\n        }\n\n        public static void CopyTo(this IPage input, IPage target)\n        {\n \n            target.Author = input.Author;\n            target.Categories = input.Categories;\n            target.Comments = input.Comments;\n            target.CorrelationKey = input.CorrelationKey;\n            target.Content = input.Content;\n            target.ContentType = input.ContentType;\n            target.DisableEditor = input.DisableEditor;\n            target.ExternalUrl = input.ExternalUrl;\n            target.Id = input.Id;\n            target.IsPublished = input.IsPublished;\n            target.LastModified = input.LastModified;\n            target.MenuFilters = input.MenuFilters;\n            target.MenuOnly = input.MenuOnly;\n            target.MetaDescription = input.MetaDescription;\n            target.MetaHtml = input.MetaHtml;\n            target.MetaJson = input.MetaJson;\n            target.PageOrder = input.PageOrder;\n            target.ParentId = input.ParentId;\n            target.ParentSlug = input.ParentSlug;\n            target.ProjectId = input.ProjectId;\n            target.PubDate = input.PubDate;\n            //target.Resources = input.Resources;\n            target.ShowCategories = input.ShowCategories;\n            target.ShowComments = input.ShowComments;\n            target.ShowHeading = input.ShowHeading;\n            target.ShowMenu = input.ShowMenu;\n            target.ShowLastModified = input.ShowLastModified;\n            target.ShowPubDate = input.ShowPubDate;\n            target.Slug = input.Slug;\n            target.Title = input.Title;\n            target.ViewRoles = input.ViewRoles;\n\n            //added 2018-06-20\n            target.CreatedUtc = input.CreatedUtc;\n            target.CreatedByUser = input.CreatedByUser;\n            target.LastModifiedByUser = input.LastModifiedByUser;\n            target.DraftAuthor = input.DraftAuthor;\n            target.DraftContent = input.DraftContent;\n            target.DraftPubDate = input.DraftPubDate;\n            target.DraftSerializedModel = input.DraftSerializedModel;\n            target.TemplateKey = input.TemplateKey;\n            target.SerializedModel = input.SerializedModel;\n            target.Serializer = input.Serializer;\n\n            target.ShowCreatedBy = input.ShowCreatedBy;\n            target.ShowCreatedDate = input.ShowCreatedDate;\n            target.ShowLastModifiedBy = input.ShowLastModifiedBy;\n            target.ShowLastModifiedDate = input.ShowLastModifiedDate;\n            target.Script = input.Script;\n        }\n\n        /// <summary>\n        /// this would only be used to restore a deleted page\n        /// not all page properties would be restored but main content would\n        /// </summary>\n        /// <param name=\"input\"></param>\n        /// <param name=\"target\"></param>\n        public static void CopyTo(this ContentHistory input, IPage target)\n        {\n\n            target.Author = input.Author;\n            //target.Categories = input.Categories;\n            //target.Comments = input.Comments;\n            target.CorrelationKey = input.CorrelationKey;\n            target.Content = input.Content;\n            target.ContentType = input.ContentType;\n            //target.DisableEditor = input.DisableEditor;\n            //target.ExternalUrl = input.ExternalUrl;\n            target.Id = input.ContentId;\n            target.IsPublished = input.IsPublished;\n            target.LastModified = input.LastModified;\n            //target.MenuFilters = input.MenuFilters;\n            //target.MenuOnly = input.MenuOnly;\n            target.MetaDescription = input.MetaDescription;\n            target.MetaHtml = input.MetaHtml;\n            target.MetaJson = input.MetaJson;\n            target.PageOrder = input.PageOrder;\n            target.ParentId = input.ParentId;\n            target.ParentSlug = input.ParentSlug;\n            target.ProjectId = input.ProjectId;\n            target.PubDate = input.PubDate;\n            //target.Resources = input.Resources;\n            //target.ShowCategories = input.ShowCategories;\n            //target.ShowComments = input.ShowComments;\n            //target.ShowHeading = input.ShowHeading;\n            //target.ShowMenu = input.ShowMenu;\n            //target.ShowLastModified = input.ShowLastModified;\n            //target.ShowPubDate = input.ShowPubDate;\n            target.Slug = input.Slug;\n            target.Title = input.Title;\n            target.ViewRoles = input.ViewRoles;\n\n            target.CreatedUtc = input.CreatedUtc;\n            target.CreatedByUser = input.CreatedByUser;\n            target.LastModifiedByUser = input.LastModifiedByUser;\n            target.DraftAuthor = input.DraftAuthor;\n            target.DraftContent = input.DraftContent;\n            target.DraftPubDate = input.DraftPubDate;\n            target.DraftSerializedModel = input.DraftSerializedModel;\n            target.TemplateKey = input.TemplateKey;\n            target.SerializedModel = input.SerializedModel;\n            target.Serializer = input.Serializer;\n\n            target.ShowCreatedBy = input.ShowCreatedBy;\n            target.ShowCreatedDate = input.ShowCreatedDate;\n            target.ShowLastModifiedBy = input.ShowLastModifiedBy;\n            target.ShowLastModifiedDate = input.ShowLastModifiedDate;\n        }\n\n        public static void CopyTo(this IProjectSettings input, IProjectSettings target)\n        {\n\n            target.AddBlogToPagesTree = input.AddBlogToPagesTree;\n            target.BlogMenuLinksToNewestPost = input.BlogMenuLinksToNewestPost;\n            target.BlogPageNavComponentVisibility = input.BlogPageNavComponentVisibility;\n            target.BlogPagePosition = input.BlogPagePosition;\n            target.BlogPageText = input.BlogPageText;\n            target.CdnUrl = input.CdnUrl;\n            target.ChannelCategoriesCsv = input.ChannelCategoriesCsv;\n            target.ChannelRating = input.ChannelRating;\n            target.ChannelTimeToLive = input.ChannelTimeToLive;\n            target.CommentNotificationEmail = input.CommentNotificationEmail;\n            target.CopyrightNotice = input.CopyrightNotice;\n            target.DaysToComment = input.DaysToComment;\n            target.DefaultPageSlug = input.DefaultPageSlug;\n            target.DefaultContentType = input.DefaultContentType;\n            target.Description = input.Description;\n            //target.EmailFromAddress = input.EmailFromAddress;\n            target.FacebookAppId = input.FacebookAppId;\n            target.Id = input.Id;\n            target.Image = input.Image;\n            target.IncludePubDateInPostUrls = input.IncludePubDateInPostUrls;\n            target.LanguageCode = input.LanguageCode;\n            target.LocalMediaVirtualPath = input.LocalMediaVirtualPath;\n            target.ManagingEditorEmail = input.ManagingEditorEmail;\n            target.ModerateComments = input.ModerateComments;\n            target.PostsPerPage = input.PostsPerPage;\n            target.PubDateFormat = input.PubDateFormat;\n            target.RecaptchaPrivateKey = input.RecaptchaPrivateKey;\n            target.RecaptchaPublicKey = input.RecaptchaPublicKey;\n            target.RemoteFeedProcessorUseAgentFragment = input.RemoteFeedProcessorUseAgentFragment;\n            target.RemoteFeedUrl = input.RemoteFeedUrl;\n            target.ShowTitle = input.ShowTitle;\n            target.SiteName = input.SiteName;\n            //target.SmtpPassword = input.SmtpPassword;\n            //target.SmtpPort = input.SmtpPort;\n            //target.SmtpPreferredEncoding = input.SmtpPreferredEncoding;\n            //target.SmtpRequiresAuth = input.SmtpRequiresAuth;\n            //target.SmtpServer = input.SmtpServer;\n            //target.SmtpUser = input.SmtpUser;\n            //target.SmtpUseSsl = input.SmtpUseSsl;\n            target.TimeZoneId = input.TimeZoneId;\n            target.Title = input.Title;\n            target.TwitterCreator = input.TwitterCreator;\n            target.TwitterPublisher = input.TwitterPublisher;\n            target.UseDefaultPageAsRootNode = input.UseDefaultPageAsRootNode;\n            //target.UseMetaDescriptionInFeed = input.UseMetaDescriptionInFeed;\n            target.WebmasterEmail = input.WebmasterEmail;\n            target.Publisher = input.Publisher;\n            target.PublisherLogoUrl = input.PublisherLogoUrl;\n            target.PublisherLogoWidth = input.PublisherLogoWidth;\n            target.PublisherLogoHeight = input.PublisherLogoHeight;\n            target.PublisherEntityType = input.PublisherEntityType;\n            target.DisqusShortName = input.DisqusShortName;\n            target.ShowRecentPostsOnDefaultPage = input.ShowRecentPostsOnDefaultPage;\n            target.ShowFeaturedPostsOnDefaultPage = input.ShowFeaturedPostsOnDefaultPage;\n            target.TeaserMode = input.TeaserMode;\n            target.TeaserTruncationMode = input.TeaserTruncationMode;\n            target.TeaserTruncationLength = input.TeaserTruncationLength;\n\n            target.DefaultFeedItems = input.DefaultFeedItems;\n            target.MaxFeedItems = input.MaxFeedItems;\n            target.AboutContent = input.AboutContent;\n            target.AboutHeading = input.AboutHeading;\n            target.ShowAboutBox = input.ShowAboutBox;\n            target.ShowRelatedPosts = input.ShowRelatedPosts;\n            target.ShowBlogCategories = input.ShowBlogCategories;\n            target.ShowArchivedPosts = input.ShowArchivedPosts;\n\n            target.ShowCreatedBy = input.ShowCreatedBy;\n            target.ShowCreatedDate = input.ShowCreatedDate;\n            target.ShowLastModifiedBy = input.ShowLastModifiedBy;\n            target.ShowLastModifiedDate = input.ShowLastModifiedDate;\n        }\n    }\n}"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Models/Page/DefaultPageRoutes.cs",
    "content": "﻿namespace cloudscribe.SimpleContent.Models\n{\n    public class DefaultPageRoutes : IPageRoutes\n    {\n        public string PageRouteName { get; } = ProjectConstants.PageIndexRouteName;\n        public string PageEditRouteName { get; } = ProjectConstants.PageEditRouteName;\n        public string PageEditWithTemplateRouteName { get; } = ProjectConstants.PageEditWithTemplateRouteName;\n        public string PageDeleteRouteName { get; } = ProjectConstants.PageDeleteRouteName;\n\n        public string PageDevelopRouteName { get; } = ProjectConstants.PageDevelopRouteName;\n\n        public string PageTreeRouteName { get; } = ProjectConstants.PageTreeRouteName;\n        public string NewPageRouteName { get; } = ProjectConstants.NewPageRouteName;\n        public string PageHistoryRouteName { get; } = ProjectConstants.PageHistoryRouteName;\n\n        public string CanEditRouteName { get; } = ProjectConstants.PageCanEditRouteName;\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Models/Page/IPage.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\n\nnamespace cloudscribe.SimpleContent.Models\n{\n    public interface IPage : IContentItem\n    {\n        string Author { get; set; }\n        List<string> Categories { get; set; }\n        List<IComment> Comments { get; set; }\n        \n        bool IsPublished { get; set; }\n        DateTime LastModified { get; set; }\n       \n        /// <summary>\n        /// the idea is to serialize an object with list of metadata and meta links\n        /// whenever this model is modified it is reserialized here then\n        /// we can generate the output html and store it on MetaHtml\n        /// </summary>\n        string MetaJson { get; set; }\n        /// <summary>\n        /// an automatically generated html meta data\n        /// to be generated from the model seriaized in MetaJson\n        /// </summary>\n        string MetaHtml { get; set; }\n        int PageOrder { get; set; }\n        string ParentId { get; set; }\n        string ParentSlug { get; set; }\n        string ProjectId { get; set; }\n\n        bool ShowCategories { get; set; }\n        bool ShowComments { get; set; }\n        bool ShowHeading { get; set; }\n        bool ShowLastModified { get; set; }\n        bool ShowPubDate { get; set; }\n        \n        string ExternalUrl { get; set; }\n        string CorrelationKey { get; set; } \n        \n        string ViewRoles { get; set; }\n        string MenuFilters { get; set; }\n        /// <summary>\n        /// If true then the page is just a parent for other pages in the menu\n        /// the content will not be rendered, only a child page menu will be shown\n        /// </summary>\n        bool MenuOnly { get; set; }\n\n        bool ShowMenu { get; set; }\n        bool DisableEditor { get; set; }\n\n        List<PageResource> Resources { get; set; }\n\n        // new fields 2018-06-20\n        DateTime CreatedUtc { get; set; }\n        string CreatedByUser { get; set; }\n        string LastModifiedByUser { get; set; }\n        string DraftContent { get; set; }\n        string DraftAuthor { get; set; }\n        DateTime? DraftPubDate { get; set; }\n\n        string TemplateKey { get; set; }\n        string SerializedModel { get; set; }\n        string DraftSerializedModel { get; set; }\n        \n        string Serializer { get; set; }\n\n        public bool? ShowCreatedBy { get; set; }\n        public bool? ShowCreatedDate { get; set; }\n        public bool? ShowLastModifiedBy { get; set; }\n        public bool? ShowLastModifiedDate { get; set; }\n        public string? Script { get; set; }\n    }\n}"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Models/Page/IPageCommands.cs",
    "content": "﻿// Copyright (c) Source Tree Solutions, LLC. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.\n// Author:                  Joe Audette\n// Created:                 2016-04-24\n// Last Modified:           2018-10-09\n//\n\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace cloudscribe.SimpleContent.Models\n{\n    public interface IPageCommandsSingleton : IPageCommands\n    {\n\n    }\n\n    public interface IPageCommands\n    {\n        Task Create(\n            string projectId,\n            IPage page,\n            CancellationToken cancellationToken = default(CancellationToken)\n            );\n\n        Task Update(\n            string projectId,\n            IPage page,\n            CancellationToken cancellationToken = default(CancellationToken)\n            );\n\n        Task Delete(\n            string projectId,\n            string pageId,\n            CancellationToken cancellationToken = default(CancellationToken)\n            );\n\n        /// <summary>\n        /// Clone a page from one project (tenant) to another\n        /// </summary>\n        /// <param name=\"sourceProjectId\"></param>\n        /// <param name=\"targetProjectId\"></param>\n        /// <param name=\"pageId\"></param>\n        /// <param name=\"cancellationToken\"></param>\n        /// <returns>The Id of the new page</returns>\n\n        Task<string> CloneToNewProject(\n            string sourceProjectId,\n            string targetProjectId,\n            string pageId,\n            CancellationToken cancellationToken = default(CancellationToken)\n            );\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Models/Page/IPageQueries.cs",
    "content": "﻿// Copyright (c) Source Tree Solutions, LLC. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.\n// Author:                  Joe Audette\n// Created:                 2016-04-24\n// Last Modified:           2018-10-09\n//\n\nusing System.Collections.Generic;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace cloudscribe.SimpleContent.Models\n{\n    public interface IPageQueriesSingleton : IPageQueries\n    {\n\n    }\n\n    public interface IPageQueries\n    {\n        Task<bool> SlugIsAvailable(\n            string projectId,\n            string slug,\n            CancellationToken cancellationToken = default(CancellationToken)\n            );\n\n        Task<IPage> GetPage(\n            string projectId,\n            string pageId,\n            CancellationToken cancellationToken = default(CancellationToken)\n            );\n\n        Task<IPage> GetPageBySlug(\n            string projectId,\n            string slug,\n            CancellationToken cancellationToken = default(CancellationToken)\n            );\n\n        Task<IPage> GetPageByCorrelationKey(\n            string projectId,\n            string correlationKey,\n            CancellationToken cancellationToken = default(CancellationToken)\n            );\n\n        Task<List<IPage>> GetAllPages(\n            string projectId,\n            CancellationToken cancellationToken = default(CancellationToken)\n            );\n\n        Task<List<IPage>> GetPagesReadyForPublish(\n            string projectId,\n            CancellationToken cancellationToken = default(CancellationToken)\n            );\n\n        Task<List<IPage>> GetRootPages(\n            string projectId,\n            CancellationToken cancellationToken = default(CancellationToken)\n            );\n\n        Task<List<IPage>> GetChildPages(\n            string projectId,\n            string pageId,\n            CancellationToken cancellationToken = default(CancellationToken)\n            );\n\n        Task<int> GetChildPageCount(\n            string projectId,\n            string pageId,\n            bool includeUnpublished,\n            CancellationToken cancellationToken = default(CancellationToken)\n            );\n\n        Task<int> GetCount(\n           string projectId,\n           bool includeUnpublished,\n           CancellationToken cancellationToken = default(CancellationToken)\n           );\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Models/Page/IPageRoutes.cs",
    "content": "﻿namespace cloudscribe.SimpleContent.Models\n{\n    public interface IPageRoutes\n    {\n        string PageRouteName { get; }\n        string PageEditRouteName { get; }\n        string PageEditWithTemplateRouteName { get; }\n        string PageDeleteRouteName { get; }\n\n        string PageDevelopRouteName { get; }\n        string PageTreeRouteName { get; }\n        string NewPageRouteName { get; }\n\n        string PageHistoryRouteName { get; }\n\n        string CanEditRouteName { get; }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Models/Page/IPageService.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Security.Claims;\nusing System.Threading;\nusing System.Threading.Tasks;\n\n\nnamespace cloudscribe.SimpleContent.Models\n{\n    public interface IPageService\n    {\n        Task DeletePage(string pageId);\n        Task<List<IPage>> GetAllPages(string projectId, CancellationToken cancellationToken = default(CancellationToken));\n        Task<List<IPage>> GetRootPages(CancellationToken cancellationToken = default(CancellationToken));\n        Task<List<IPage>> GetChildPages(string pageId, CancellationToken cancellationToken = default(CancellationToken));\n        Task<IPage> GetPage(string pageId, CancellationToken cancellationToken = default(CancellationToken));\n        Task<IPage> GetPageBySlug(string slug, CancellationToken cancellationToken = default(CancellationToken));\n        Task<bool> SlugIsAvailable(string slug);\n        \n        Task Create(IPage page);\n\n        Task Update(IPage page);\n        \n        Task<string> GetPageTreeJson(ClaimsPrincipal user, Func<IPage, string> urlResolver, string node = \"root\", CancellationToken cancellationToken = default(CancellationToken));\n\n        Task<PageActionResult> Move(PageMoveModel model);\n\n        Task<PageActionResult> SortChildPagesAlpha(string pageId);\n\n        Task<int> GetNextChildPageOrder(string pageSlug, CancellationToken cancellationToken = default(CancellationToken));\n\n        Task FirePublishEvent(IPage page);\n        Task FireUnPublishEvent(IPage page);\n\n        \n    }\n}"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Models/Page/IPageUrlResolver.cs",
    "content": "﻿using System.Threading.Tasks;\n\nnamespace cloudscribe.SimpleContent.Models\n{\n    public interface IPageUrlResolver\n    {\n        Task<string> ResolvePageUrl(IPage page);\n        Task ConvertMediaToRelativeUrls(IPage page);\n        Task ConvertMediaToAbsoluteUrls(IPage page, IProjectSettings projectSettings);\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Models/Page/NotImplementedPageService.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Security.Claims;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace cloudscribe.SimpleContent.Models\n{\n    public class NotImplementedPageService : IPageService\n    {\n        public Task DeletePage(string pageId)\n        {\n            throw new NotImplementedException();\n        }\n        \n        public Task<List<IPage>> GetAllPages(string projectId, CancellationToken cancellationToken = default(CancellationToken))\n        {\n            throw new NotImplementedException();\n        }\n\n        public Task<List<IPage>> GetChildPages(string pageId, CancellationToken cancellationToken = default(CancellationToken))\n        {\n            throw new NotImplementedException();\n        }\n\n        public Task<IPage> GetPage(string pageId, CancellationToken cancellationToken = default(CancellationToken))\n        {\n            throw new NotImplementedException();\n        }\n        \n        public Task<IPage> GetPageBySlug(string slug, CancellationToken cancellationToken = default(CancellationToken))\n        {\n            throw new NotImplementedException();\n        }\n\n        public Task<List<IPage>> GetRootPages(CancellationToken cancellationToken = default(CancellationToken))\n        {\n            throw new NotImplementedException();\n        }\n\n        \n        public Task Create(IPage page)\n        {\n            throw new NotImplementedException();\n        }\n\n        public Task Update(IPage page)\n        {\n            throw new NotImplementedException();\n        }\n\n        public Task<bool> SlugIsAvailable(string slug)\n        {\n            throw new NotImplementedException();\n        }\n\n        public Task<string> GetPageTreeJson(ClaimsPrincipal user, Func<IPage, string> urlResolver, string node = \"root\", CancellationToken cancellationToken = default(CancellationToken))\n        {\n            throw new NotImplementedException();\n        }\n\n        public Task<PageActionResult> Move(PageMoveModel model)\n        {\n            throw new NotImplementedException();\n        }\n\n        public Task<PageActionResult> SortChildPagesAlpha(string pageId)\n        {\n            throw new NotImplementedException();\n        }\n\n        public Task<int> GetNextChildPageOrder(string pageId, CancellationToken cancellationToken = default(CancellationToken))\n        {\n            throw new NotImplementedException();\n        }\n\n        public Task FirePublishEvent(IPage page)\n        {\n            throw new NotImplementedException();\n        }\n\n        public Task FireUnPublishEvent(IPage page)\n        {\n            throw new NotImplementedException();\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Models/Page/Page.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\n\nnamespace cloudscribe.SimpleContent.Models\n{\n    public class Page : IPage\n    {\n        public Page()\n        {\n            Categories = new List<string>();\n            Comments = new List<IComment>();\n            Resources = new List<PageResource>();\n        }\n\n        public string Id { get; set; } = string.Empty;\n\n        public string ProjectId { get; set; } = string.Empty;\n\n        public string ParentId { get; set; } = string.Empty;\n\n        public string ParentSlug { get; set; } = string.Empty;\n\n        public int PageOrder { get; set; } = 3;\n\n        public string Title { get; set; } = string.Empty;\n\n        public string Author { get; set; } = string.Empty;\n\n        public string Slug { get; set; } = string.Empty;\n\n        /// <summary>\n        /// this is to facilitate adding menu items that link to external sites or urls\n        /// </summary>\n        public string ExternalUrl { get; set; } = string.Empty;\n\n        /// <summary>\n        /// This field is a place to store a surrogate key if needed.\n        /// For example in a multi-tenant multi-lanaguage setup, it could be used\n        /// to correlate pages between the different language sites\n        /// to implement a language switcher. ie the corresponding page in the other\n        /// site could be found by looking it up by the correlationkey\n        /// </summary>\n        public string CorrelationKey { get; set; } = string.Empty;\n\n        public string MetaDescription { get; set; } = string.Empty;\n        public string MetaJson { get; set; }\n        public string MetaHtml { get; set; }\n\n        public string Content { get; set; } = string.Empty;\n\n        public DateTime? PubDate { get; set; } \n\n        public DateTime LastModified { get; set; } = DateTime.UtcNow;\n\n        public bool IsPublished { get; set; } \n\n        public bool MenuOnly { get; set; } = false;\n\n        public bool ShowMenu { get; set; } = false;\n\n        public string ViewRoles { get; set; } = string.Empty;\n\n        public List<string> Categories { get; set; }\n        public List<IComment> Comments { get; set; }\n\n        public bool ShowHeading { get; set; } = true;\n        public bool ShowPubDate { get; set; } = false;\n        public bool ShowLastModified { get; set; } = false;\n        public bool ShowCategories { get; set; } = false;\n        public bool ShowComments { get; set; } = false;\n\n        public string MenuFilters { get; set; }\n\n        public bool DisableEditor { get; set; } = false;\n\n        public List<PageResource> Resources { get; set; }\n\n        public string ContentType { get; set; } = \"html\";\n\n        // new fields 2018-06-20\n        public DateTime CreatedUtc { get; set; } = DateTime.UtcNow;\n        public string CreatedByUser { get; set; }\n        public string LastModifiedByUser { get; set; }\n        public string DraftContent { get; set; }\n        public string DraftAuthor { get; set; }\n        public DateTime? DraftPubDate { get; set; }\n\n        public string TemplateKey { get; set; }\n        public string SerializedModel { get; set; }\n        public string DraftSerializedModel { get; set; }\n        public string Serializer { get; set; }\n\n        public static Page FromIPage(IPage page)\n        {\n            var p = new Page();\n            page.CopyTo(p);\n            return p;\n        }\n\n        public bool? ShowCreatedBy { get; set; }\n        public bool? ShowCreatedDate { get; set; }\n        public bool? ShowLastModifiedBy { get; set; }\n        public bool? ShowLastModifiedDate { get; set; }\n        public string? Script { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Models/Page/PageActionResult.cs",
    "content": "﻿namespace cloudscribe.SimpleContent.Models\n{\n    public class PageActionResult\n    {\n        public PageActionResult(bool success, string message)\n        {\n            Success = success;\n            Message = message;\n        }\n        public bool Success { get; private set; }\n        public string Message { get; private set; }\n\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Models/Page/PageEditOptions.cs",
    "content": "﻿namespace cloudscribe.SimpleContent.Models\n{\n    public class PageEditOptions\n    {\n        public bool AlwaysShowDeveloperLink { get; set; } = false;\n        public string DeveloperAllowedRole { get; set; } = string.Empty;\n\n        public bool ShowDisableEditorOption { get; set; }\n        public bool AllowMarkdown { get; set; } = true;\n        public bool AllowDeleteDefaultPage { get; set; } = true;\n\n        public bool HideUnpublishButton { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Models/Page/PageMoveModel.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\n\nnamespace cloudscribe.SimpleContent.Models\n{\n    public class PageMoveModel\n    {\n        public string MovedNode { get; set; }\n        public string TargetNode { get; set; }\n        public string PreviousParent { get; set; }\n        public string Position { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Models/Page/PageResource.cs",
    "content": "﻿using System;\n\nnamespace cloudscribe.SimpleContent.Models\n{\n    public interface IPageResource\n    {\n        string Id { get; set; }\n        /// <summary>\n        /// the page id\n        /// </summary>\n        string ContentId { get; set; } \n        int Sort { get; set; }\n        /// <summary>\n        /// css or js\n        /// </summary>\n        string Type { get; set; }\n        /// <summary>\n        /// any, dev, or prod\n        /// </summary>\n        string Environment { get; set; }\n        string Url { get; set; }\n    }\n\n    public class PageResource : IPageResource\n    {\n        public PageResource()\n        {\n            Id = Guid.NewGuid().ToString();\n        }\n\n        public string Id { get; set; }\n        public string ContentId { get; set; }\n        public int Sort { get; set; } = 1;\n        public string Type { get; set; }\n        public string Environment { get; set; }\n        public string Url { get; set; }\n\n        public static PageResource FromIPageResource(IPageResource r)\n        {\n            var resource = new PageResource();\n            resource.ContentId = r.ContentId;\n            resource.Environment = r.Environment;\n            resource.Id = r.Id;\n            resource.Sort = r.Sort;\n            resource.Type = r.Type;\n            resource.Url = r.Url;\n\n            return resource;\n\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Models/Project/IProjectCommands.cs",
    "content": "﻿// Copyright (c) Source Tree Solutions, LLC. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.\n// Author:                  Joe Audette\n// Created:                 2016-08-04\n// Last Modified:           2018-10-09\n//\n\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace cloudscribe.SimpleContent.Models\n{\n    public interface IProjectCommandsSingleton : IProjectCommands\n    {\n\n    }\n\n    public interface IProjectCommands\n    {\n        Task Create(\n            string projectId,\n            IProjectSettings project,\n            CancellationToken cancellationToken = default(CancellationToken)\n            );\n\n        Task Update(\n            string projectId,\n            IProjectSettings project,\n            CancellationToken cancellationToken = default(CancellationToken)\n            );\n\n        Task Delete(\n            string projectId,\n            string projectKey,\n            CancellationToken cancellationToken = default(CancellationToken)\n            );\n\n        Task<string> CloneToNewProject(\n            string sourceProjectId,\n            string targetProjectId,\n            string newSiteName = null,\n            CancellationToken cancellationToken = default(CancellationToken)\n            );\n\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Models/Project/IProjectEmailService.cs",
    "content": "﻿using System.Threading.Tasks;\nusing cloudscribe.SimpleContent.Models;\n\nnamespace cloudscribe.SimpleContent.Models\n{\n    public interface IProjectEmailService\n    {\n        Task SendCommentNotificationEmailAsync(\n            IProjectSettings project, \n            IPost post, \n            IComment comment, \n            string postUrl, \n            string approveUrl, \n            string deleteUrl);\n    }\n}"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Models/Project/IProjectQueries.cs",
    "content": "﻿// Copyright (c) Source Tree Solutions, LLC. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.\n// Author:                  Joe Audette\n// Created:                 2016-02-07\n// Last Modified:           2018-10-09\n// \n\n\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace cloudscribe.SimpleContent.Models\n{\n    public interface IProjectQueriesSingleton : IProjectQueries\n    {\n\n    }\n\n    /// <summary>\n    /// there are 2 \"project\" concepts that are kind of overlayed on top of each other\n    /// there is the \"Content Project\" with settings encapsulated in ProjectSettings class\n    /// this class is for querying those.\n    /// there is also the concept in NoDb of a projectid which corresponds to the folder where obejcts are stored on disk\n    /// in some cases the same projectid may be used for both NoDb and ProjectSettings.ProjectId\n    /// \n    /// in SimpleContent the ProjectSettings.ProjectId always corresponds to the NoDb projectid aka folder where\n    /// posts and pages will be stored\n    /// </summary>\n    public interface IProjectQueries\n    {\n        Task<IProjectSettings> GetProjectSettings(\n            string projectId,\n            CancellationToken cancellationToken = default(CancellationToken)\n            );\n\n        //Task<List<IProjectSettings>> GetProjectSettingsByUser(\n        //    string userName,\n        //    CancellationToken cancellationToken = default(CancellationToken)\n        //    );\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Models/Project/IProjectSecurityResolver.cs",
    "content": "﻿// Copyright (c) Source Tree Solutions, LLC. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.\n// Author:                  Joe Audette\n// Created:                 2016-02-15\n// Last Modified:           2016-02-16\n// \n\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace cloudscribe.SimpleContent.Models\n{\n    public interface IProjectSecurityResolver\n    {\n        Task<ProjectSecurityResult> ValidatePermissions(\n            string blogId, \n            string userName,\n            string providedPassword,\n            CancellationToken cancellationToken);\n    }\n\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Models/Project/IProjectService.cs",
    "content": "﻿using System.Threading.Tasks;\n\nnamespace cloudscribe.SimpleContent.Models\n{\n    public interface IProjectService\n    {\n        Task Create(IProjectSettings project);\n        Task Update(IProjectSettings project);\n        Task<IProjectSettings> GetCurrentProjectSettings();\n        Task<IProjectSettings> GetProjectSettings(string projectId);\n        \n\n        //void ClearNavigationCache();\n    }\n}"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Models/Project/IProjectSettings.cs",
    "content": "﻿// Copyright (c) Source Tree Solutions, LLC. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.\n// Author:\t\t\t\t\tJoe Audette\n// Created:\t\t\t\t\t\n// Last Modified:\t\t\t2019-02-10\n// \nnamespace cloudscribe.SimpleContent.Models\n{\n    public interface IProjectSettings\n    {\n        bool AddBlogToPagesTree { get; set; }\n        bool BlogMenuLinksToNewestPost { get; set; }\n        string BlogPageNavComponentVisibility { get; set; }\n        int BlogPagePosition { get; set; }\n        string BlogPageText { get; set; }\n        string CdnUrl { get; set; }\n        string ChannelCategoriesCsv { get; set; }\n        string ChannelRating { get; set; }\n        int ChannelTimeToLive { get; set; }\n        string CommentNotificationEmail { get; set; }\n        string CopyrightNotice { get; set; }\n        int DaysToComment { get; set; }\n        string DefaultPageSlug { get; set; }\n        string Description { get; set; }\n        //string EmailFromAddress { get; set; }\n        string Id { get; set; }\n        string Image { get; set; }\n        bool IncludePubDateInPostUrls { get; set; }\n        string LanguageCode { get; set; }\n        string LocalMediaVirtualPath { get; set; }\n        string ManagingEditorEmail { get; set; }\n\n        int DefaultFeedItems { get; set; }\n        int MaxFeedItems { get; set; }\n        bool ModerateComments { get; set; }\n        int PostsPerPage { get; set; }\n        string Publisher { get; set; }\n        string PublisherLogoUrl { get; set; }\n        string PubDateFormat { get; set; }\n        string RecaptchaPrivateKey { get; set; }\n        string RecaptchaPublicKey { get; set; }\n        string RemoteFeedProcessorUseAgentFragment { get; set; }\n        string RemoteFeedUrl { get; set; }\n        bool ShowTitle { get; set; }\n        //string SmtpPassword { get; set; }\n        //int SmtpPort { get; set; }\n        //string SmtpPreferredEncoding { get; set; }\n        //bool SmtpRequiresAuth { get; set; }\n        //string SmtpServer { get; set; }\n        //string SmtpUser { get; set; }\n        //bool SmtpUseSsl { get; set; }\n        string TimeZoneId { get; set; }\n        string Title { get; set; }\n        bool UseDefaultPageAsRootNode { get; set; }\n        //bool UseMetaDescriptionInFeed { get; set; }\n        string WebmasterEmail { get; set; }\n        string PublisherLogoWidth { get; set; } \n        string PublisherLogoHeight { get; set; }\n        string PublisherEntityType { get; set; }\n        string DisqusShortName { get; set; }\n        bool ShowRecentPostsOnDefaultPage { get; set; }\n        bool ShowFeaturedPostsOnDefaultPage { get; set; }\n\n        string FacebookAppId { get; set; }\n        string SiteName { get; set; }\n        string TwitterPublisher { get; set; }\n        string TwitterCreator { get; set; }\n        string DefaultContentType { get; set; }\n        bool ShowRelatedPosts { get; set; }\n        public bool ShowBlogCategories { get; set; }\n        public bool ShowArchivedPosts { get; set; }\n        bool ShowAboutBox { get; set; } \n        string AboutHeading { get; set; }\n        string AboutContent { get; set; }\n\n        // Teaser properties.\n        /// <summary>\n        /// Specifies whether SimpleContent should show teasers for blog posts on index/listing views.\n        /// The default is OFF (show entire post).\n        /// </summary>\n        TeaserMode TeaserMode { get; set; }\n        /// <summary>\n        /// Specifies how SimpleContent will truncate blog posts to create teasers for index/listing views.\n        /// </summary>\n        TeaserTruncationMode TeaserTruncationMode { get; set; }\n        /// <summary>\n        /// Specifies the length in characters/words/paragraphs that a post will be truncated to create a teaser for index/listing views.\n        /// </summary>\n        int TeaserTruncationLength { get; set; }\n        bool ShowCreatedBy { get; set; }\n        bool ShowCreatedDate { get; set; }\n        bool ShowLastModifiedBy { get; set; }\n        bool ShowLastModifiedDate { get; set; }\n    }\n}"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Models/Project/IProjectSettingsResolver.cs",
    "content": "﻿\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace cloudscribe.SimpleContent.Models\n{\n    public interface IProjectSettingsResolver\n    {\n\n        Task<IProjectSettings> GetCurrentProjectSettings(CancellationToken cancellationToken);\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Models/Project/ProjectSecurityResult.cs",
    "content": "﻿// Copyright (c) Source Tree Solutions, LLC. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.\n// Author:                  Joe Audette\n// Created:                 2016-02-15\n// Last Modified:           2018-10-23\n// \n\n\nnamespace cloudscribe.SimpleContent.Models\n{\n    public class ProjectSecurityResult\n    {\n        public ProjectSecurityResult(\n            string displayName,\n            string projectId,\n            bool isAuthenticated, \n            bool canEditPosts,\n            bool canEditPages,\n            string timeZoneId = \"GMT\"\n            )\n        {\n            this.displayName = displayName;\n            this.projectId = projectId;\n            this.isAuthenticated = isAuthenticated;\n            this.canEditPosts = canEditPosts;\n            this.canEditPages = canEditPages;\n            this.timeZoneId = timeZoneId;\n        }\n\n        private string displayName = string.Empty;\n        private string projectId = string.Empty;\n        private bool isAuthenticated = false;\n        private bool canEditPosts = false;\n        private bool canEditPages = false;\n        private string timeZoneId = \"GMT\";\n\n        public string DisplayName\n        {\n            get { return displayName; }\n        }\n\n        public string ProjectId\n        {\n            get { return projectId; }\n        }\n\n        public bool IsAuthenticated\n        {\n            get { return isAuthenticated; }\n        }\n\n        public bool CanEditPosts\n        {\n            get { return canEditPosts; }\n        }\n\n        public bool CanEditPages\n        {\n            get { return canEditPages; }\n        }\n\n        public string TimeZoneId\n        {\n            get { return timeZoneId; }\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Models/Project/ProjectSettings.cs",
    "content": "﻿// Copyright (c) Source Tree Solutions, LLC. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.\n// Author:                  Joe Audette\n// Created:                 2016-02-09\n// Last Modified:           2018-03-15\n// \nnamespace cloudscribe.SimpleContent.Models\n{\n\n    public class ProjectSettings : IProjectSettings\n    {\n        public ProjectSettings()\n        {\n        }\n\n        public string Id { get; set; }\n        public string Title { get; set; } = \"Blog\";\n        public string Description { get; set; } = string.Empty;\n        public string CopyrightNotice { get; set; } = string.Empty;\n\n        public string Publisher { get; set; } = string.Empty;\n\n        public string PublisherLogoUrl { get; set; } = string.Empty;\n\n        public string PublisherLogoWidth { get; set; } = \"500px\";\n        public string PublisherLogoHeight { get; set; } = \"500px\";\n\n        public string PublisherEntityType { get; set; } = \"Organization\";\n\n        public string DisqusShortName { get; set; } = string.Empty;\n\n        public int PostsPerPage { get; set; } = 5;\n        public int DaysToComment { get; set; } = -1;\n        public bool ModerateComments { get; set; } = true;\n        public string CommentNotificationEmail { get; set; }\n\n        /// <summary>\n        /// by default the blog menu item links to the post list\n        /// if this is set to true, it should link/redirect to the newest post instead\n        /// </summary>\n        public bool BlogMenuLinksToNewestPost { get; set; } = false;\n        public string LocalMediaVirtualPath { get; set; } = \"/media/images/\";\n        //public string LocalMediaAbsoluteBaseUrl { get; set; } = string.Empty;\n        public string CdnUrl { get; set; } = string.Empty;\n        \n        public string PubDateFormat { get; set; } = \"MMMM d. yyyy\";\n        public bool IncludePubDateInPostUrls { get; set; } = true;\n\n        private string timeZoneId = \"America/New_York\";\n        public string TimeZoneId\n        {\n            get { return timeZoneId ?? \"America/New_York\"; }\n            set { timeZoneId = value; }\n        }\n        public string RecaptchaPublicKey { get; set; }\n        public string RecaptchaPrivateKey { get; set; }\n        public string DefaultPageSlug { get; set; } = \"home\";\n        public bool UseDefaultPageAsRootNode { get; set; } = true;\n        \n        public bool ShowTitle { get; set; } = false;\n\n        // if true automatically add the blog index\n        public bool AddBlogToPagesTree { get; set; } = true;\n        public int BlogPagePosition { get; set; } = 2; // right after home page\n        public string BlogPageText { get; set; } = \"Blog\";\n\n        //public string HomePageText { get; set; } = \"Home\";\n        public string BlogPageNavComponentVisibility { get; set; }\n\n        // feed settings\n\n        public string Image { get; set; } = string.Empty;\n\n        /// <summary>\n        /// default is false, set to true if you want to use the metadescription instead of the full \n        /// post content in the feed.\n        /// </summary>\n        //public bool UseMetaDescriptionInFeed { get; set; } = false;\n        public int ChannelTimeToLive { get; set; } = 60;\n        public string LanguageCode { get; set; } = \"en-US\";\n        public string ChannelCategoriesCsv { get; set; } = string.Empty;\n        public string ManagingEditorEmail { get; set; } = string.Empty;\n        public string ChannelRating { get; set; } = string.Empty;\n        public string WebmasterEmail { get; set; } = string.Empty;\n\n        /// <summary>\n        /// ie feedburner url\n        /// </summary>\n        public string RemoteFeedUrl { get; set; } = string.Empty;\n\n        /// <summary>\n        /// ie Feedburner User Agent fragment \"FeedBurner\"\n        /// </summary>\n        public string RemoteFeedProcessorUseAgentFragment { get; set; } = string.Empty;\n\n        //smtp settings\n        //public string EmailFromAddress { get; set; }\n        //public string SmtpServer { get; set; }\n        //public string SmtpUser { get; set; }\n        //public string SmtpPassword { get; set; }\n        //public int SmtpPort { get; set; } = 25;\n        //public string SmtpPreferredEncoding { get; set; }\n        //public bool SmtpRequiresAuth { get; set; } = false;\n        //public bool SmtpUseSsl { get; set; } = false;\n\n        public bool ShowRecentPostsOnDefaultPage { get; set; }\n        public bool ShowFeaturedPostsOnDefaultPage { get; set; }\n\n        public string FacebookAppId { get; set; }\n        public string SiteName { get; set; }\n        public string TwitterPublisher { get; set; }\n        public string TwitterCreator { get; set; }\n\n        public string DefaultContentType { get; set; } = \"html\";\n\n        public TeaserMode TeaserMode { get; set; }\n        public TeaserTruncationMode TeaserTruncationMode { get; set; }\n        public int TeaserTruncationLength { get; set; } = 20;   // Default 20 words.\n\n        public int DefaultFeedItems { get; set; } = 20;\n        public int MaxFeedItems { get; set; } = 1000;\n        public bool ShowRelatedPosts { get; set; } = true;\n        public bool ShowBlogCategories { get; set; } = true;\n        public bool ShowArchivedPosts { get; set; } = true;\n        public bool ShowAboutBox { get; set; } = true;\n        public string AboutHeading { get; set; } = \"About\";\n        public string AboutContent { get; set; }\n\n        public static ProjectSettings FromIProjectSettings(IProjectSettings project)\n        {\n            var p = new ProjectSettings();\n            project.CopyTo(p);\n            return p;\n        }\n        public bool ShowCreatedBy { get; set; } = false;\n        public bool ShowCreatedDate { get; set; } = false;\n        public bool ShowLastModifiedBy { get; set; } = false;\n        public bool ShowLastModifiedDate { get; set; } = false;\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Models/ProjectConstants.cs",
    "content": "﻿namespace cloudscribe.SimpleContent.Models\n{\n    public sealed class ContentSource\n    {\n        public const string Blog = \"Blog\";\n        public const string Page = \"Page\";\n    }\n\n    public sealed class EnvironmentTarget\n    {\n        public const string Any = \"any\";\n        public const string Development = \"dev\";\n        public const string Production = \"prod\";\n    }\n\n\n    public static class ProjectConstants\n    {\n        public const string PostWithDateRouteName = \"postwithdate\";\n        public const string PostWithoutDateRouteName = \"postwithoutdate\";\n        public const string BlogCategoryRouteName = \"blogcategory\";\n        public const string BlogArchiveRouteName = \"blogarchive\";\n        public const string BlogIndexRouteName = \"blogindex\";\n        public const string NewPostRouteName = \"newpost\";\n        public const string MostRecentPostRouteName = \"mostrecentpost\";\n        public const string PostEditRouteName = \"postedit\";\n        public const string PostEditWithTemplateRouteName = \"posteditwithtemplate\";\n        public const string PostDeleteRouteName = \"postdelete\";\n        public const string PostHistoryRouteName = \"posthistory\";\n        public const string BlogCanEditRouteName = \"blogcanedit\";\n\n        public const string FolderPostWithDateRouteName = \"folderpostwithdate\";\n        public const string FolderPostWithoutDateRouteName = \"folderpostwithoutdate\";\n        public const string FolderBlogCategoryRouteName = \"folderblogcategory\";\n        public const string FolderBlogArchiveRouteName = \"folderblogarchive\";\n        public const string FolderBlogIndexRouteName = \"folderblogindex\";\n        public const string FolderNewPostRouteName = \"foldernewpost\";\n        public const string FolderMostRecentPostRouteName = \"foldermostrecentpost\";\n        public const string FolderPostEditRouteName = \"folderpostedit\";\n        public const string FolderPostEditWithTemplateRouteName = \"folderposteditwithtemplate\";\n        public const string FolderPostDeleteRouteName = \"folderpostdelete\";\n        public const string FolderPostHistoryRouteName = \"folderposthistory\";\n        public const string FolderBlogCanEditRouteName = \"folderblogcanedit\";\n\n        public const string PageIndexRouteName = \"pageindex\";\n        public const string PageEditRouteName = \"pageedit\";\n        public const string PageEditWithTemplateRouteName = \"pageeditwithtemplate\";\n        public const string PageDeleteRouteName = \"pagedelete\";\n        public const string PageDevelopRouteName = \"pagedevelop\";\n        public const string PageTreeRouteName = \"pagetree\";\n        public const string NewPageRouteName = \"newpage\";\n        public const string PageHistoryRouteName = \"pagehistory\";\n        public const string PageCanEditRouteName = \"pagecanedit\";\n\n        public const string FolderPageIndexRouteName = \"folderpageindex\";\n        public const string FolderPageEditRouteName = \"folderpageedit\";\n        public const string FolderPageEditWithTemplateRouteName = \"folderpageeditwithtemplate\";\n        public const string FolderPageDeleteRouteName = \"folderpagedelete\";\n        public const string FolderPageDevelopRouteName = \"folderpagedevelop\";\n        public const string FolderPageTreeRouteName = \"folderpagetree\";\n        public const string FolderNewPageRouteName = \"foldernewpage\";\n        public const string FolderPageHistoryRouteName = \"folderpagehistory\";\n        public const string FolderPageCanEditRouteName = \"folderpagecanedit\";\n\n\n\n        /******************************************************************************************/\n\n        public const string CulturePostWithDateRouteName = \"postwithdate-culture\";\n        public const string CulturePostWithoutDateRouteName = \"postwithoutdate-culture\";\n        public const string CultureBlogCategoryRouteName = \"blogcategory-culture\";\n        public const string CultureBlogArchiveRouteName = \"blogarchive-culture\";\n        public const string CultureBlogIndexRouteName = \"blogindex-culture\";\n        public const string CultureNewPostRouteName = \"newpost-culture\";\n        public const string CultureMostRecentPostRouteName = \"mostrecentpost-culture\";\n        public const string CulturePostEditRouteName = \"postedit-culture\";\n        public const string CulturePostEditWithTemplateRouteName = \"posteditwithtemplate-culture\";\n        public const string CulturePostDeleteRouteName = \"postdelete-culture\";\n        public const string CulturePostHistoryRouteName = \"posthistory-culture\";\n        public const string CultureBlogCanEditRouteName = \"blogcanedit-culture\";\n\n        public const string CultureFolderPostWithDateRouteName = \"folderpostwithdate-culture\";\n        public const string CultureFolderPostWithoutDateRouteName = \"folderpostwithoutdate-culture\";\n        public const string CultureFolderBlogCategoryRouteName = \"folderblogcategory-culture\";\n        public const string CultureFolderBlogArchiveRouteName = \"folderblogarchive-culture\";\n        public const string CultureFolderBlogIndexRouteName = \"folderblogindex-culture\";\n        public const string CultureFolderNewPostRouteName = \"foldernewpost-culture\";\n        public const string CultureFolderMostRecentPostRouteName = \"foldermostrecentpost-culture\";\n        public const string CultureFolderPostEditRouteName = \"folderpostedit-culture\";\n        public const string CultureFolderPostEditWithTemplateRouteName = \"folderposteditwithtemplate-culture\";\n        public const string CultureFolderPostDeleteRouteName = \"folderpostdelete-culture\";\n        public const string CultureFolderPostHistoryRouteName = \"folderposthistory-culture\";\n        public const string CultureFolderBlogCanEditRouteName = \"folderblogcanedit-culture\";\n\n        public const string CulturePageIndexRouteName = \"pageindex-culture\";\n        public const string CulturePageEditRouteName = \"pageedit-culture\";\n        public const string CulturePageEditWithTemplateRouteName = \"pageeditwithtemplate-culture\";\n        public const string CulturePageDeleteRouteName = \"pagedelete-culture\";\n        public const string CulturePageDevelopRouteName = \"pagedevelop-culture\";\n        public const string CulturePageTreeRouteName = \"pagetree-culture\";\n        public const string CultureNewPageRouteName = \"newpage-culture\";\n        public const string CulturePageHistoryRouteName = \"pagehistory-culture\";\n        public const string CulturePageCanEditRouteName = \"pagecanedit-culture\";\n\n        public const string CultureFolderPageIndexRouteName = \"folderpageindex-culture\";\n        public const string CultureFolderPageEditRouteName = \"folderpageedit-culture\";\n        public const string CultureFolderPageEditWithTemplateRouteName = \"folderpageeditwithtemplate-culture\";\n        public const string CultureFolderPageDeleteRouteName = \"folderpagedelete-culture\";\n        public const string CultureFolderPageDevelopRouteName = \"folderpagedevelop-culture\";\n        public const string CultureFolderPageTreeRouteName = \"folderpagetree-culture\";\n        public const string CultureFolderNewPageRouteName = \"foldernewpage-culture\";\n        public const string CultureFolderPageHistoryRouteName = \"folderpagehistory-culture\";\n        public const string CultureFolderPageCanEditRouteName = \"folderpagecanedit-culture\";\n\n\n        /*******************************************************************************************/\n\n\n\n\n\n\n\n\n\n\n\n        public const string ContentEditorClaimType = \"ContentEditor\";\n        public const string PageEditorClaimType = \"PageEditor\";\n        public const string BlogEditorClaimType = \"BlogEditor\";\n\n        public const string PageEditPolicy = \"PageEditPolicy\";\n        public const string BlogEditPolicy = \"BlogEditPolicy\";\n\n        public const string BlogFeatureName = \"Blog\";\n        public const string PageFeatureName = \"Page\";\n\n        public const string HtmlContentType = \"html\";\n        public const string MarkdownContentType = \"markdown\";\n\n\n    }\n\n    \n\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Models/README.md",
    "content": "# cloudscribe.SimpleContent.Models\n\n[![NuGet](https://img.shields.io/nuget/v/cloudscribe.SimpleContent.Models.svg)](https://www.nuget.org/packages/cloudscribe.SimpleContent.Models)\n[![License: Apache-2.0](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://opensource.org/licenses/Apache-2.0)\n\nShared models for cloudscribe.SimpleContent CMS and blog engine.\n\n## Installation\n\n```shell\nInstall-Package cloudscribe.SimpleContent.Models\n```\n\n## Usage\n\nReference this package to use shared models for SimpleContent features in your ASP.NET Core project.\n\n## Contributing\n\nContributions are welcome! Please see the [contributing guidelines](https://github.com/cloudscribe/cloudscribe.SimpleContent/blob/main/CONTRIBUTING.md).\n\n## License\n\nLicensed under the Apache 2.0 License. See the [LICENSE](https://github.com/cloudscribe/cloudscribe.SimpleContent/blob/main/LICENSE) file for details.\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Models/Templating/ContentTemplate.cs",
    "content": "﻿// Copyright (c) Source Tree Solutions, LLC. All rights reserved.\n// Author:                  Joe Audette\n// Created:                 2018-06-20\n// Last Modified:           2018-06-27\n// \n\nusing System.Collections.Generic;\n\nnamespace cloudscribe.SimpleContent.Models\n{\n    public class ContentTemplate\n    {\n        public ContentTemplate()\n        {\n            EditScripts = new List<ScriptFile>();\n            EditCss = new List<CssFile>();\n            RenderScripts = new List<ScriptFile>();\n            RenderCss = new List<CssFile>();\n\n        }\n\n        public string ProjectId { get; set; } = \"*\";\n        public string AvailableForFeature { get; set; } = \"*\"; // * = any, Blog or Page\n        public string Key { get; set; }\n        public bool Enabled { get; set; }\n        public string Title { get; set; }\n\n        public string GroupSort1 { get; set; } = \"777777\";\n        public string GroupSort2 { get; set; } = \"777777\";\n\n        public string Description { get; set; }\n        public string ModelType { get; set; }\n        public string EditView { get; set; }\n        public string RenderView { get; set; }\n        public string DynamicRenderPartialView { get; set; }\n        public string ScreenshotUrl { get; set; }\n\n        public List<ScriptFile> EditScripts { get; set; }\n        public List<CssFile> EditCss { get; set; }\n\n        public List<ScriptFile> RenderScripts { get; set; }\n        public List<CssFile> RenderCss { get; set; }\n\n        public string SerializerName { get; set; } = \"Json\";\n\n        public string FormParserName { get; set; } = \"DefaultModelFormParser\";\n        public string ValidatorName { get; set; } = \"DefaultTemplateModelValidator\";\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Models/Templating/ContentTemplateConfig.cs",
    "content": "﻿using System.Collections.Generic;\n\nnamespace cloudscribe.SimpleContent.Models\n{\n    public class ContentTemplateConfig\n    {\n        public ContentTemplateConfig()\n        {\n            Templates = new List<ContentTemplate>();\n        }\n\n        public List<ContentTemplate> Templates { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Models/Templating/CssFile.cs",
    "content": "﻿namespace cloudscribe.SimpleContent.Models\n{\n    public class CssFile\n    {\n        public string Url { get; set; }\n        public string Environment { get; set; }\n        public int Sort { get; set; } = 1;\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Models/Templating/IContentTemplateProvider.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Threading.Tasks;\n\nnamespace cloudscribe.SimpleContent.Models\n{\n    public interface IContentTemplateProvider\n    {\n        Task<List<ContentTemplate>> GetAllTemplates();\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Models/Templating/IContentTemplateService.cs",
    "content": "﻿using System.Threading;\nusing System.Threading.Tasks;\nusing cloudscribe.Pagination.Models;\n\nnamespace cloudscribe.SimpleContent.Models\n{\n    public interface IContentTemplateService\n    {\n        object DesrializeTemplateModel(IPage page, ContentTemplate template, bool allowDraft = true);\n        object DesrializeTemplateModel(IPost post, ContentTemplate template);\n        Task<int> GetCountOfTemplates(string projectId, string forFeature);\n        Task<ContentTemplate> GetTemplate(string projectId, string key, CancellationToken cancellationToken = default(CancellationToken));\n        Task<PagedResult<ContentTemplate>> GetTemplates(string projectId, string forFeature, string query, int pageNumber, int pageSize, CancellationToken cancellationToken = default(CancellationToken));\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Models/Templating/IModelSerializer.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Text;\n\nnamespace cloudscribe.SimpleContent.Models\n{\n    public interface IModelSerializer\n    {\n        string Serialize(string typeName, object obj);\n        object Deserialize(string typeName, string serializedObject);\n        string Name { get; }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Models/Templating/ScriptFile.cs",
    "content": "﻿namespace cloudscribe.SimpleContent.Models\n{\n    public class ScriptFile\n    {\n        public string Url { get; set; }\n        public string Environment { get; set; }\n        public int Sort { get; set; } = 1;\n\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Models/Versioning/ContentHistory.cs",
    "content": "﻿// Copyright (c) Source Tree Solutions, LLC. All rights reserved.\n// Created:\t\t\t\t\t2018-06-20\n// Last Modified:\t\t\t2018-07-03\n// \n\nusing System;\n\nnamespace cloudscribe.SimpleContent.Models\n{\n    public class ContentHistory\n    {\n        public ContentHistory()\n        {\n            Id = Guid.NewGuid();\n        }\n\n        public Guid Id { get; set; } \n\n        public string ContentId { get; set; } \n\n        public string ProjectId { get; set; }\n\n        public string ContentSource { get; set; } = \"Page\";\n        public string ContentType { get; set; } = \"html\";\n\n        public string Slug { get; set; }\n\n        public bool IsDraftHx { get; set; }\n        public bool WasDeleted { get; set; }\n        public DateTime ArchivedUtc { get; set; } = DateTime.UtcNow;\n        public string ArchivedBy { get; set; }\n\n        public string Title { get; set; } = string.Empty;\n\n        public string Author { get; set; }\n        public string CorrelationKey { get; set; }\n\n        public string Content { get; set; }\n        public string CategoriesCsv { get; set; }\n\n        public DateTime? PubDate { get; set; }\n\n        public DateTime LastModified { get; set; } = DateTime.UtcNow;\n\n        public bool IsPublished { get; set; }\n\n        public DateTime CreatedUtc { get; set; } = DateTime.UtcNow;\n        public string CreatedByUser { get; set; }\n        public string LastModifiedByUser { get; set; }\n        public string DraftContent { get; set; }\n        public string DraftAuthor { get; set; }\n        public DateTime? DraftPubDate { get; set; }\n\n        public string SerializedModel { get; set; }\n        public string DraftSerializedModel { get; set; }\n\n        public string MetaDescription { get; set; }\n\n        public string MetaJson { get; set; }\n        public string MetaHtml { get; set; }\n\n        public string TemplateKey { get; set; }\n        public string Serializer { get; set; }\n\n        //page only\n\n        public string ParentId { get; set; } = string.Empty;\n\n        public string ParentSlug { get; set; } = string.Empty;\n\n        public int PageOrder { get; set; } = 3;\n        public string ViewRoles { get; set; }\n\n        //blog only\n\n        public string TeaserOverride { get; set; }\n\n        public bool? ShowCreatedBy { get; set; }\n        public bool? ShowCreatedDate { get; set; }\n        public bool? ShowLastModifiedBy { get; set; }\n        public bool? ShowLastModifiedDate { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Models/Versioning/IContentHistoryCommands.cs",
    "content": "﻿using System;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace cloudscribe.SimpleContent.Models\n{\n    public interface IContentHistoryCommandsSingleton : IContentHistoryCommands\n    {\n\n    }\n\n    public interface IContentHistoryCommands\n    {\n        Task Create(\n            string projectId,\n            ContentHistory contentHistory,\n            CancellationToken cancellationToken = default(CancellationToken)\n            );\n\n        Task Delete(\n            string projectId,\n            Guid id,\n            CancellationToken cancellationToken = default(CancellationToken)\n            );\n\n        Task DeleteByContent(\n            string projectId,\n            string contentId,\n            CancellationToken cancellationToken = default(CancellationToken)\n            );\n\n        Task DeleteByContent(\n            string projectId,\n            string contentId,\n            DateTime cutoffDate,\n            CancellationToken cancellationToken = default(CancellationToken)\n            );\n\n        Task DeleteByProject(\n            string projectId,\n            CancellationToken cancellationToken = default(CancellationToken)\n            );\n\n        Task DeleteOlderThan(\n            string projectId,\n            DateTime cutoffDate,\n            CancellationToken cancellationToken = default(CancellationToken)\n            );\n\n\n        /// <summary>\n        /// we keep draft history of pages until published\n        /// </summary>\n        /// <param name=\"projectId\"></param>\n        /// <param name=\"contentId\"></param>\n        /// <param name=\"cancellationToken\"></param>\n        /// <returns></returns>\n        Task DeleteDraftHistory(\n            string projectId,\n            string contentId,\n            CancellationToken cancellationToken = default(CancellationToken)\n            );\n\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Models/Versioning/IContentHistoryQueries.cs",
    "content": "﻿\nusing cloudscribe.Pagination.Models;\nusing System;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace cloudscribe.SimpleContent.Models\n{\n    public interface IContentHistoryQueriesSingleton : IContentHistoryQueries\n    {\n\n    }\n\n    public interface IContentHistoryQueries\n    {\n        Task<ContentHistory> Fetch(\n            string projectId,\n            Guid id,\n            CancellationToken cancellationToken = default(CancellationToken)\n            );\n\n        Task<PagedResult<ContentHistory>> GetByContent(\n            string projectId,\n            string contentId,\n            int pageNumber = 1,\n            int pageSize = 20,\n            CancellationToken cancellationToken = default(CancellationToken)\n            );\n\n        /// <summary>\n        ///  sortMode 0 = Archive Date desc, contentSource, title\n        /// </summary>\n        /// <param name=\"projectId\"></param>\n        /// <param name=\"contentSource\"></param>\n        /// <param name=\"editorQuery\"></param>\n        /// <param name=\"pageNumber\"></param>\n        /// <param name=\"pageSize\"></param>\n        /// <param name=\"sortMode\"></param>\n        /// <param name=\"cancellationToken\"></param>\n        /// <returns></returns>\n        Task<PagedResult<ContentHistory>> GetList(\n            string projectId,\n            string contentSource = null,\n            string editorQuery = null,\n            int pageNumber = 1,\n            int pageSize = 20,\n            int sortMode = 0, //TBD\n            CancellationToken cancellationToken = default(CancellationToken)\n            );\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Models/Versioning/SaveMode.cs",
    "content": "﻿namespace cloudscribe.SimpleContent.Models.Versioning\n{\n    public static class SaveMode\n    {\n        public const string SaveDraft          = \"SaveDraft\";\n        public const string PublishLater       = \"PublishLater\";\n        public const string PublishNow         = \"PublishNow\";\n        public const string UnPublish          = \"UnPublish\";\n        public const string DeleteCurrentDraft = \"DeleteCurrentDraft\";\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Models/cloudscribe.SimpleContent.Models.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <Description>cloudscribe.SimpleContent.Models Class Library</Description>\n    <Version>10.1.0</Version>\n    <TargetFramework>net10.0</TargetFramework>\n    <Authors>Joe Audette</Authors>\n    <PackageTags>cloudscribe;blog;cms</PackageTags>\n    <PackageIcon>icon.png</PackageIcon>\n    <PackageProjectUrl>https://github.com/cloudscribe/cloudscribe.SimpleContent</PackageProjectUrl>\n    <RepositoryUrl>https://github.com/cloudscribe/cloudscribe.SimpleContent.git</RepositoryUrl>\n    <RepositoryType>git</RepositoryType>\n    <PackageLicenseExpression>Apache-2.0</PackageLicenseExpression>\n    <PackageReadmeFile>README.md</PackageReadmeFile>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <None Include=\"icon.png\" Pack=\"true\" PackagePath=\"\\\" />\n  </ItemGroup>\n\n  <ItemGroup>\n\n    <PackageReference Include=\"Microsoft.EntityFrameworkCore.Tools\" Version=\"10.0.0\">\n      <PrivateAssets>all</PrivateAssets>\n      <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>\n    </PackageReference>\n\n    <PackageReference Include=\"cloudscribe.Pagination.Models\" Version=\"10.1.0\" />\n\n    <PackageReference Include=\"System.Security.Claims\" Version=\"4.3.0\" />\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"README.md\" Pack=\"true\" PackagePath=\"/\" />\n  </ItemGroup>\n</Project>\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Security.SimpleAuth/ProjectSecurityResolver.cs",
    "content": "﻿// Copyright (c) Source Tree Solutions, LLC. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.\n// Author:                  Joe Audette\n// Created:                 2016-02-15\n// Last Modified:           2016-08-13\n// \n\nusing cloudscribe.SimpleContent.Web;\nusing cloudscribe.SimpleContent.Models;\nusing cloudscribe.Web.SimpleAuth.Services;\nusing System.Threading;\nusing System.Threading.Tasks;\nusing Microsoft.AspNetCore.Authorization;\n\nnamespace cloudscribe.SimpleContent.Security.SimpleAuth\n{\n    public class ProjectSecurityResolver : IProjectSecurityResolver\n    {\n        public ProjectSecurityResolver(\n            SignInManager signInManager,\n            IAuthorizationService authorizationService\n            )\n        {\n            this.signInManager = signInManager;\n            this.authorizationService = authorizationService;\n        }\n\n        private SignInManager signInManager;\n        private IAuthorizationService authorizationService;\n\n        public async Task<ProjectSecurityResult> ValidatePermissions(\n            string projectId,\n            string userName,\n            string providedPassword,\n            CancellationToken cancellationToken)\n        {\n            var displayName = string.Empty;\n            var isAuthenticated = false;\n            var canEditPosts = false;\n            var canEditPages = false;\n\n            var authUser = signInManager.GetUser(userName);\n\n            if (authUser != null)\n            {\n                isAuthenticated = signInManager.ValidatePassword(authUser, providedPassword);\n            }\n            \n            if (isAuthenticated)\n            {\n                var claimsPrincipal = signInManager.GetClaimsPrincipal(authUser);\n                if(string.IsNullOrEmpty(projectId))\n                {\n                    projectId = claimsPrincipal.GetProjectId();\n                }\n                if (!string.IsNullOrEmpty(projectId))\n                {\n                    canEditPosts = await claimsPrincipal.CanEditBlog(projectId, authorizationService); \n                    canEditPages = await claimsPrincipal.CanEditPages(projectId, authorizationService);                 \n                }\n                \n                displayName = claimsPrincipal.GetUserDisplayName();\n            }\n            \n            var blogSecurity = new ProjectSecurityResult(displayName, projectId, isAuthenticated, canEditPosts, canEditPages);\n\n            return blogSecurity;\n\n        }\n\n        \n\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Security.SimpleAuth/README.md",
    "content": "# cloudscribe.SimpleContent.Security.SimpleAuth\n\n[![NuGet](https://img.shields.io/nuget/v/cloudscribe.SimpleContent.Security.SimpleAuth.svg)](https://www.nuget.org/packages/cloudscribe.SimpleContent.Security.SimpleAuth)\n[![License: Apache-2.0](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://opensource.org/licenses/Apache-2.0)\n\nSimple authentication and security integration for cloudscribe.SimpleContent.\n\n## Installation\n\n```shell\nInstall-Package cloudscribe.SimpleContent.Security.SimpleAuth\n```\n\n## Usage\n\nAdd this package to your ASP.NET Core project to enable simple authentication features in SimpleContent.\n\n## Contributing\n\nContributions are welcome! Please see the [contributing guidelines](https://github.com/cloudscribe/cloudscribe.SimpleContent/blob/main/CONTRIBUTING.md).\n\n## License\n\nLicensed under the Apache 2.0 License. See the [LICENSE](https://github.com/cloudscribe/cloudscribe.SimpleContent/blob/main/LICENSE) file for details.\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Security.SimpleAuth/cloudscribe.SimpleContent.Security.SimpleAuth.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <Description>cloudscribe.SimpleContent.Security.SimpleAuth Class Library</Description>\n    <VersionPrefix>3.0.4</VersionPrefix>\n    <AssemblyVersion>3.0.4</AssemblyVersion>\n    <Authors>Joe Audette</Authors>\n    <TargetFrameworks>netstandard2.0</TargetFrameworks>\n    <PackageTags>cloudscribe;security;blog;cms</PackageTags>\n    <PackageIconUrl>https://raw.githubusercontent.com/joeaudette/cloudscribe/master/cloudscribe-icon-32.png</PackageIconUrl>\n    <PackageProjectUrl>https://github.com/joeaudette/cloudscribe.SimpleContent</PackageProjectUrl>\n    <PackageLicenseExpression>Apache-2.0</PackageLicenseExpression>\n    <RepositoryUrl>https://github.com/cloudscribe/cloudscribe.SimpleContent.git</RepositoryUrl>\n    <RepositoryType>git</RepositoryType>\n    \n    <PackageReadmeFile>README.md</PackageReadmeFile>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <ProjectReference Include=\"..\\cloudscribe.SimpleContent.Models\\cloudscribe.SimpleContent.Models.csproj\" />\n    <ProjectReference Include=\"..\\cloudscribe.SimpleContent.Web\\cloudscribe.SimpleContent.Web.csproj\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"cloudscribe.Web.SimpleAuth\" Version=\"2.0.*\" />\n    <PackageReference Include=\"Microsoft.AspNetCore.Authorization\" Version=\"2.1.2\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <None Include=\"README.md\" Pack=\"true\" PackagePath=\"/\" />\n  </ItemGroup>\n\n</Project>\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.Common/ContentHistoryCommands.cs",
    "content": "﻿// Copyright (c) Source Tree Solutions, LLC. All rights reserved.\n// Author:                  Joe Audette\n// Created:\t\t\t\t\t2018-07-04\n// Last Modified:\t\t\t2018-07-06\n// \n\nusing cloudscribe.SimpleContent.Models;\nusing Microsoft.EntityFrameworkCore;\nusing System;\nusing System.Linq;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.Common\n{\n    public class ContentHistoryCommands : IContentHistoryCommands, IContentHistoryCommandsSingleton\n    {\n        public ContentHistoryCommands(ISimpleContentDbContextFactory contextFactory)\n        {\n            _contextFactory = contextFactory;\n        }\n\n        private readonly ISimpleContentDbContextFactory _contextFactory;\n\n        public async Task Create(\n            string projectId,\n            ContentHistory contentHistory,\n            CancellationToken cancellationToken = default(CancellationToken)\n            )\n        {\n            using (var _db = _contextFactory.CreateContext())\n            {\n                _db.ContentHistory.Add(contentHistory);\n                int rowsAffected = await _db.SaveChangesAsync().ConfigureAwait(false);\n            }\n        }\n\n        public async Task Delete(\n            string projectId,\n            Guid id,\n            CancellationToken cancellationToken = default(CancellationToken)\n            )\n        {\n            using (var _db = _contextFactory.CreateContext())\n            {\n                var itemToRemove = await _db.ContentHistory.SingleOrDefaultAsync(x => x.Id == id && x.ProjectId == projectId).ConfigureAwait(false);\n                if (itemToRemove == null) throw new InvalidOperationException(\"item to delete not found\");\n                _db.ContentHistory.Remove(itemToRemove);\n                int rowsAffected = await _db.SaveChangesAsync().ConfigureAwait(false);\n            }\n        }\n\n        public async Task DeleteByContent(\n            string projectId,\n            string contentId,\n            CancellationToken cancellationToken = default(CancellationToken)\n            )\n        {\n            using(var _db = _contextFactory.CreateContext())\n            {\n                var itemsToRemove = _db.ContentHistory.Where(x => x.ProjectId == projectId && x.ContentId == contentId);\n                _db.ContentHistory.RemoveRange(itemsToRemove);\n                int rowsAffected = await _db.SaveChangesAsync().ConfigureAwait(false);\n            }\n        }\n\n        public async Task DeleteByContent(\n            string projectId,\n            string contentId,\n            DateTime cutoffDate,\n            CancellationToken cancellationToken = default(CancellationToken)\n            )\n        {\n            using (var _db = _contextFactory.CreateContext())\n            {\n                var itemsToRemove = _db.ContentHistory.Where(x => x.ProjectId == projectId && x.ContentId == contentId && x.ArchivedUtc < cutoffDate);\n                _db.ContentHistory.RemoveRange(itemsToRemove);\n                int rowsAffected = await _db.SaveChangesAsync().ConfigureAwait(false);\n            }\n        }\n\n        public async Task DeleteByProject(\n            string projectId,\n            CancellationToken cancellationToken = default(CancellationToken)\n            )\n        {\n            using (var _db = _contextFactory.CreateContext())\n            {\n                var itemsToRemove = _db.ContentHistory.Where(x => x.ProjectId == projectId);\n                _db.ContentHistory.RemoveRange(itemsToRemove);\n                int rowsAffected = await _db.SaveChangesAsync().ConfigureAwait(false);\n            }\n        }\n\n        public async Task DeleteOlderThan(\n            string projectId,\n            DateTime cutoffDate,\n            CancellationToken cancellationToken = default(CancellationToken)\n            )\n        {\n            using (var _db = _contextFactory.CreateContext())\n            {\n                var itemsToRemove = _db.ContentHistory.Where(x => x.ProjectId == projectId && x.ArchivedUtc < cutoffDate);\n                _db.ContentHistory.RemoveRange(itemsToRemove);\n                int rowsAffected = await _db.SaveChangesAsync().ConfigureAwait(false);\n            }\n        }\n\n        public async Task DeleteDraftHistory(\n            string projectId,\n            string contentId,\n            CancellationToken cancellationToken = default(CancellationToken)\n            )\n        {\n            using (var _db = _contextFactory.CreateContext())\n            {\n                var itemsToRemove = _db.ContentHistory.Where(x => x.ProjectId == projectId && x.ContentId == contentId && x.IsDraftHx);\n                _db.ContentHistory.RemoveRange(itemsToRemove);\n                int rowsAffected = await _db.SaveChangesAsync().ConfigureAwait(false);\n            }\n        }\n\n\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.Common/ContentHistoryQueries.cs",
    "content": "﻿using cloudscribe.Pagination.Models;\nusing cloudscribe.SimpleContent.Models;\nusing Microsoft.EntityFrameworkCore;\nusing System;\nusing System.Linq;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.Common\n{\n    public class ContentHistoryQueries : IContentHistoryQueries, IContentHistoryQueriesSingleton\n    {\n        public ContentHistoryQueries(ISimpleContentDbContextFactory contextFactory)\n        {\n            _contextFactory = contextFactory;\n        }\n\n        private readonly ISimpleContentDbContextFactory _contextFactory;\n\n        public async Task<ContentHistory> Fetch(\n            string projectId,\n            Guid id,\n            CancellationToken cancellationToken = default(CancellationToken)\n            )\n        {\n            cancellationToken.ThrowIfCancellationRequested();\n\n            using (var _db = _contextFactory.CreateContext())\n            {\n                return await _db.ContentHistory.AsNoTracking().SingleOrDefaultAsync(p => p.Id == id && p.ProjectId == projectId).ConfigureAwait(false);\n            }\n        }\n\n        public async Task<PagedResult<ContentHistory>> GetByContent(\n            string projectId,\n            string contentId,\n            int pageNumber = 1,\n            int pageSize = 10,\n            CancellationToken cancellationToken = default(CancellationToken)\n            )\n        {\n            cancellationToken.ThrowIfCancellationRequested();\n\n            int offset = (pageSize * pageNumber) - pageSize;\n\n            var result = new PagedResult<ContentHistory>\n            {\n                PageNumber = pageNumber,\n                PageSize = pageSize\n            };\n\n            using (var _db = _contextFactory.CreateContext())\n            {\n                var query = _db.ContentHistory.Where(x => \n                    x.ProjectId == projectId\n                    && x.ContentId == contentId\n                    )\n                    .OrderByDescending(x => x.ArchivedUtc)\n                    .Select(x => x)\n                    .Skip(offset)\n                    .Take(pageSize)\n                    ;\n\n                result.Data = await query.AsNoTracking().AsSingleQuery().ToListAsync<ContentHistory>(cancellationToken).ConfigureAwait(false);\n                result.TotalItems = await _db.ContentHistory\n                    .Where(x =>\n                        x.ProjectId == projectId\n                        && x.ContentId == contentId\n                    )\n                    .CountAsync<ContentHistory>(cancellationToken).ConfigureAwait(false);\n            }\n\n            return result;\n        }\n\n        public async Task<PagedResult<ContentHistory>> GetList(\n            string projectId,\n            string contentSource = null,\n            string editorQuery = null,\n            int pageNumber = 1,\n            int pageSize = 10,\n            int sortMode = 0, //TBD\n            CancellationToken cancellationToken = default(CancellationToken)\n            )\n        {\n            cancellationToken.ThrowIfCancellationRequested();\n\n            int offset = (pageSize * pageNumber) - pageSize;\n\n            var result = new PagedResult<ContentHistory>\n            {\n                PageNumber = pageNumber,\n                PageSize = pageSize\n            };\n\n            using (var _db = _contextFactory.CreateContext())\n            {\n                var query = _db.ContentHistory.Where(x =>\n                    x.ProjectId == projectId\n                    && (contentSource == null || x.ContentSource == contentSource)\n                     && (editorQuery == null || x.CreatedByUser == editorQuery || x.LastModifiedByUser == editorQuery)\n                    )\n                    .OrderByDescending(x => x.ArchivedUtc)\n                    .ThenBy(x => x.ContentSource)\n                    .ThenBy(x => x.Title)\n                    .Select(x => x)\n                    .Skip(offset)\n                    .Take(pageSize)\n                    ;\n\n                result.Data = await query.AsNoTracking().AsSingleQuery().ToListAsync<ContentHistory>(cancellationToken).ConfigureAwait(false);\n                result.TotalItems = await _db.ContentHistory\n                    .Where(x =>\n                        x.ProjectId == projectId\n                        && (contentSource == null || x.ContentSource == contentSource)\n                        && (editorQuery == null || x.CreatedByUser == editorQuery || x.LastModifiedByUser == editorQuery)\n                    )\n                    .CountAsync<ContentHistory>(cancellationToken).ConfigureAwait(false);\n            }\n\n            return result;\n        }\n\n    }\n\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.Common/ISimpleContentDbContext.cs",
    "content": "﻿using cloudscribe.SimpleContent.Models;\nusing cloudscribe.SimpleContent.Storage.EFCore.Models;\nusing Microsoft.EntityFrameworkCore;\nusing Microsoft.EntityFrameworkCore.ChangeTracking;\nusing Microsoft.EntityFrameworkCore.Infrastructure;\nusing System;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.Common\n{\n    public interface ISimpleContentDbContext : IDisposable\n    {\n        DbSet<ProjectSettings> Projects { get; set; }\n\n        DbSet<PostEntity> Posts { get; set; }\n\n        DbSet<PostComment> Comments { get; set; }\n\n        DbSet<PostCategory> PostCategories { get; set; }\n\n        DbSet<PageEntity> Pages { get; set; }\n\n        DbSet<PageComment> PageComments { get; set; }\n\n        DbSet<PageCategory> PageCategories { get; set; }\n\n        DbSet<PageResourceEntity> PageResources { get; set; }\n\n        DbSet<ContentHistory> ContentHistory { get; set; }\n\n        ChangeTracker ChangeTracker { get; }\n\n        DatabaseFacade Database { get; }\n\n        Task<int> SaveChangesAsync(CancellationToken cancellationToken = default(CancellationToken));\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.Common/ISimpleContentDbContextFactory.cs",
    "content": "﻿namespace cloudscribe.SimpleContent.Storage.EFCore.Common\n{\n    public interface ISimpleContentDbContextFactory\n    {\n        ISimpleContentDbContext CreateContext();\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.Common/Models/PageCategory.cs",
    "content": "﻿namespace cloudscribe.SimpleContent.Storage.EFCore.Models\n{\n    public class PageCategory\n    {\n        public string Value { get; set; }\n\n        public string PageEntityId { get; set; }\n\n        public string ProjectId { get; set; } // so we can retrieve by project and delete if the project is deleted\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.Common/Models/PageComment.cs",
    "content": "﻿// Copyright (c) Source Tree Solutions, LLC. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.\n// Author:\t\t\t\t\tJoe Audette\n// Created:\t\t\t\t\t2016-09-08\n// Last Modified:\t\t\t2016-09-09\n// \n\nusing cloudscribe.SimpleContent.Models;\nusing System;\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.Models\n{\n    public class PageComment : IComment\n    {\n        public PageComment()\n        {\n\n        }\n\n        public string Id { get; set; }\n        public string ContentId\n        {\n            get { return pageEntityId; }\n            set { pageEntityId = value; }\n        }\n\n        // not part of IComment\n        private string pageEntityId;\n        public string PageEntityId\n        {\n            get { return pageEntityId; }\n            set { pageEntityId = value; }\n        }\n\n        public string ProjectId { get; set; }\n        public string Author { get; set; }\n        public string Email { get; set; }\n        public string Website { get; set; }\n        public string Content { get; set; }\n        public DateTime PubDate { get; set; }\n        public string Ip { get; set; }\n        public string UserAgent { get; set; }\n        public bool IsAdmin { get; set; }\n        public bool IsApproved { get; set; }\n\n        public static PageComment FromIComment(IComment comment)\n        {\n            var c = new PageComment();\n            c.Author = comment.Author;\n            c.Content = comment.Content;\n            c.ContentId = comment.ContentId;\n            c.Email = comment.Email;\n            c.Id = comment.Id;\n            c.Ip = comment.Ip;\n            c.IsAdmin = comment.IsAdmin;\n            c.IsApproved = comment.IsApproved;\n            c.ProjectId = comment.ProjectId;\n            c.PubDate = comment.PubDate;\n            c.UserAgent = comment.UserAgent;\n            c.Website = comment.Website;\n\n            return c;\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.Common/Models/PageEntity.cs",
    "content": "﻿// Copyright (c) Source Tree Solutions, LLC. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.\n// Author:\t\t\t\t\tJoe Audette\n// Created:\t\t\t\t\t2016-09-08\n// Last Modified:\t\t\t2018-06-28\n// \n\nusing cloudscribe.SimpleContent.Models;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.Models\n{\n    public class PageEntity : IPage\n    {\n        public PageEntity()\n        {\n            categories = new List<string>();\n            comments = new List<IComment>();\n            pageComments = new List<PageComment>();\n            resources = new List<PageResource>();\n            pageResources = new List<PageResourceEntity>();\n        }\n\n        public string Id { get; set; } = string.Empty;\n\n        public string ProjectId { get; set; } = string.Empty;\n\n        public string ParentId { get; set; } = string.Empty;\n\n        public string ParentSlug { get; set; } = string.Empty;\n\n        public int PageOrder { get; set; } = 3;\n\n        public string Title { get; set; } = string.Empty;\n\n        public string Author { get; set; } = string.Empty;\n\n        public string Slug { get; set; } = string.Empty;\n\n        public string ExternalUrl { get; set; } = string.Empty;\n\n        public string CorrelationKey { get; set; } = string.Empty;\n\n        public string MetaDescription { get; set; } = string.Empty;\n        public string MetaJson { get; set; }\n        public string MetaHtml { get; set; }\n\n        public string Content { get; set; } = string.Empty;\n\n        public DateTime? PubDate { get; set; } \n\n        public DateTime LastModified { get; set; } = DateTime.UtcNow;\n\n        public bool IsPublished { get; set; }\n\n        public bool MenuOnly { get; set; } = false;\n\n        public bool ShowMenu { get; set; } = false;\n\n        public string ViewRoles { get; set; } = string.Empty;\n        \n        public bool ShowHeading { get; set; } = true;\n        public bool ShowPubDate { get; set; } = false;\n        public bool ShowLastModified { get; set; } = false;\n        public bool ShowCategories { get; set; } = false;\n        public bool ShowComments { get; set; } = false;\n\n        public string MenuFilters { get; set; }\n\n\n        private List<string> categories;\n        public List<string> Categories\n        {\n            get\n            {\n                if(string.IsNullOrWhiteSpace(CategoriesCsv)) \n                {\n                    categories = new List<string>();\n                }\n                else \n                {\n                    var list = CategoriesCsv.Split(new char[] { ',' },\n                            StringSplitOptions.RemoveEmptyEntries).Select(c => c.Trim().ToLower()).ToList();\n\n                    categories.AddRange(list.Where(p2 => categories.All(p1 => p1 != p2)));\n                }\n                return categories;\n            }\n            set\n            {\n                if(value != null) \n                {\n                    categories = value;\n                    CategoriesCsv = string.Join(\",\", categories);\n                }\n                else \n                {\n                    categories = new List<string>();\n                    CategoriesCsv = string.Empty;\n                }\n            }\n        }\n\n        public string CategoriesCsv { get; set; } = string.Empty;\n        \n        private List<IComment> comments;\n        public List<IComment> Comments\n        {\n            get\n            {\n                if (comments.Count == 0)\n                {\n                    comments.AddRange(PageComments);\n                }\n                return comments;\n            }\n            set\n            {\n                comments = value;\n                pageComments.Clear();\n                if (comments.Count > 0)\n                {\n                    foreach (var c in comments)\n                    {\n                        pageComments.Add(PageComment.FromIComment(c));\n                    }\n                }\n            }\n        }\n\n        private List<PageComment> pageComments;\n        public List<PageComment> PageComments\n        {\n            get { return pageComments; }\n            set { pageComments = value; }\n        }\n\n\n        private List<PageResource> resources;\n        public List<PageResource> Resources\n        {\n            get\n            {\n                if (resources.Count == 0)\n                {\n                    //resources.AddRange(PageResources);\n                    foreach(var r in pageResources)\n                    {\n                        resources.Add(PageResource.FromIPageResource(r));\n                    }\n                }\n                return resources;\n            }\n            set\n            {\n                resources = value;\n                pageResources.Clear();\n                if (resources.Count > 0)\n                {  \n                    foreach (var c in resources)\n                    {\n                        pageResources.Add(PageResourceEntity.FromIPageResource(c));\n                    }\n                }\n            }\n        }\n\n        private List<PageResourceEntity> pageResources;\n        public List<PageResourceEntity> PageResources\n        {\n            get { return pageResources; }\n            set { pageResources = value; }\n        }\n\n        public bool DisableEditor { get; set; } = false;\n\n        public string ContentType { get; set; } = \"html\";\n\n        // new fields 2018-06-20\n        public DateTime CreatedUtc { get; set; } = DateTime.UtcNow;\n        public string CreatedByUser { get; set; }\n        public string LastModifiedByUser { get; set; }\n        public string DraftContent { get; set; }\n        public string DraftAuthor { get; set; }\n        public DateTime? DraftPubDate { get; set; }\n\n        public string TemplateKey { get; set; }\n        public string SerializedModel { get; set; }\n        public string DraftSerializedModel { get; set; }\n        //public string ModelType { get; set; }\n        public string Serializer { get; set; }\n\n        public static PageEntity FromIPage(IPage page)\n        {\n            var p = new PageEntity();\n            page.CopyTo(p);\n\n            //p.Author = page.Author;\n            //p.Categories = page.Categories;\n            //p.Comments = page.Comments;\n            //p.Content = page.Content;\n            //p.ContentType = page.ContentType;\n            //p.CorrelationKey = page.CorrelationKey;\n            //p.DisableEditor = page.DisableEditor;\n            //p.ExternalUrl = page.ExternalUrl;\n            //p.Id = page.Id;\n            //p.IsPublished = page.IsPublished;\n            //p.LastModified = page.LastModified;\n            //p.MetaDescription = page.MetaDescription;\n            //p.PageOrder = page.PageOrder;\n            //p.ParentId = page.ParentId;\n            //p.ParentSlug = page.ParentSlug;\n            //p.ProjectId = page.ProjectId;\n            //p.PubDate = page.PubDate;\n            //p.ShowCategories = page.ShowCategories;\n            //p.ShowComments = page.ShowComments;\n            //p.ShowHeading = page.ShowHeading;\n            //p.ShowLastModified = page.ShowLastModified;\n            //p.ShowPubDate = page.ShowPubDate;\n            //p.Slug = page.Slug;\n            //p.Title = page.Title;\n            //p.ViewRoles = page.ViewRoles;\n            //p.MenuOnly = page.MenuOnly;\n            //p.ShowMenu = page.ShowMenu;\n            //p.MenuFilters = page.MenuFilters;\n            //p.Resources = page.Resources;\n\n            return p;\n        }\n        public bool? ShowCreatedBy { get; set; }\n        public bool? ShowCreatedDate { get; set; }\n        public bool? ShowLastModifiedBy { get; set; }\n        public bool? ShowLastModifiedDate { get; set; }\n        public string Script { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.Common/Models/PageResourceEntity.cs",
    "content": "﻿using cloudscribe.SimpleContent.Models;\nusing System;\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.Models\n{\n    public class PageResourceEntity : IPageResource\n    {\n        public PageResourceEntity()\n        {\n            Id = Guid.NewGuid().ToString();\n        }\n\n        public string Id { get; set; }\n        public string ContentId\n        {\n            get { return pageEntityId; }\n            set { pageEntityId = value; }\n        }\n\n        // not part of IPageResource\n        private string pageEntityId;\n        public string PageEntityId\n        {\n            get { return pageEntityId; }\n            set { pageEntityId = value; }\n        }\n        public int Sort { get; set; } = 1;\n        public string Type { get; set; }\n        public string Environment { get; set; }\n        public string Url { get; set; }\n\n        public static PageResourceEntity FromIPageResource(IPageResource r)\n        {\n            var resource = new PageResourceEntity();\n            resource.ContentId = r.ContentId;\n            resource.Environment = r.Environment;\n            resource.Id = r.Id;\n            resource.Sort = r.Sort;\n            resource.Type = r.Type;\n            resource.Url = r.Url;\n\n            return resource;\n\n        }\n\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.Common/Models/PostCategory.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading.Tasks;\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.Models\n{\n    public class PostCategory\n    {\n        //public string Id { get; set; }\n        public string Value { get; set; }\n\n        public string PostEntityId { get; set; }\n\n        public string ProjectId { get; set; } // so we can retrieve by project and delete if the project is deleted\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.Common/Models/PostComment.cs",
    "content": "﻿// Copyright (c) Source Tree Solutions, LLC. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.\n// Author:\t\t\t\t\tJoe Audette\n// Created:\t\t\t\t\t2016-09-08\n// Last Modified:\t\t\t2016-09-09\n// \n\nusing cloudscribe.SimpleContent.Models;\nusing System;\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.Models\n{\n    public class PostComment : IComment\n    {\n        public PostComment()\n        {\n            Id = Guid.NewGuid().ToString();\n        }\n\n        public string Id { get; set; }\n        public string ContentId\n        {\n            get { return postEntityId; }\n            set { postEntityId = value; }\n        }\n\n        // not part of IComment\n        private string postEntityId;\n        public string PostEntityId\n        {\n            get { return postEntityId; }\n            set { postEntityId = value; }\n        }\n\n        public string ProjectId { get; set; }\n        public string Author { get; set; }\n        public string Email { get; set; }\n        public string Website { get; set; }\n        public string Content { get; set; }\n        public DateTime PubDate { get; set; }\n        public string Ip { get; set; }\n        public string UserAgent { get; set; }\n        public bool IsAdmin { get; set; }\n        public bool IsApproved { get; set; }\n\n        public static PostComment FromIComment(IComment comment)\n        {\n            var c = new PostComment();\n            c.Author = comment.Author;\n            c.Content = comment.Content;\n            c.ContentId = comment.ContentId;\n            c.Email = comment.Email;\n            c.Id = comment.Id;\n            c.Ip = comment.Ip;\n            c.IsAdmin = comment.IsAdmin;\n            c.IsApproved = comment.IsApproved;\n            c.ProjectId = comment.ProjectId;\n            c.PubDate = comment.PubDate;\n            c.UserAgent = comment.UserAgent;\n            c.Website = comment.Website;\n\n            return c;\n        }\n\n\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.Common/Models/PostEntity.cs",
    "content": "﻿// Copyright (c) Source Tree Solutions, LLC. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.\n// Author:\t\t\t\t\tJoe Audette\n// Created:\t\t\t\t\t2016-09-08\n// Last Modified:\t\t\t2018-08-20\n// \n\n\nusing cloudscribe.SimpleContent.Models;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.Models\n{\n    public class PostEntity : IPost\n    {\n        public PostEntity()\n        {\n            categories = new List<string>();\n            postComments = new List<PostComment>();\n\n            comments = new List<IComment>();\n        }\n\n        public string Id { get; set; }\n\n        public string BlogId { get; set; }\n\n        public string Title { get; set; }\n\n        public string CorrelationKey { get; set; } = string.Empty;\n\n        public string Author { get; set; }\n\n        public string Slug { get; set; }\n\n        public string MetaDescription { get; set; }\n        public string MetaJson { get; set; }\n        public string MetaHtml { get; set; }\n\n        public string Content { get; set; }\n\n        public DateTime? PubDate { get; set; } \n\n        public DateTime LastModified { get; set; } = DateTime.UtcNow;\n\n        public bool IsPublished { get; set; }\n\n        public bool IsFeatured { get; set; }\n\n        public string ImageUrl { get; set; }\n        public string ThumbnailUrl { get; set; }\n\n        //added to support TalkAbout Comments switch\n        public bool ShowComments { get; set; } = false;\n\n        private List<string> categories;\n        public List<string> Categories\n        {\n            get {\n                //if(categories.Count == 0)\n                var list = CategoriesCsv.Split(new char[] { ',' },\n                        StringSplitOptions.RemoveEmptyEntries).Select(c => c.Trim())\n                        .Distinct(StringComparer.OrdinalIgnoreCase)\n                        .ToList();\n\n                categories.AddRange(list.Where(p2 =>\n                  categories.All(p1 => p1 != p2)));\n\n                return categories;\n            }\n            set {\n                categories = value;\n                CategoriesCsv = string.Join(\",\", categories.Distinct(StringComparer.OrdinalIgnoreCase));\n            }\n        }\n\n        public string CategoriesCsv { get; set; } = string.Empty;\n\n        //public List<PostCategory> Cats { get; set; }\n\n        private List<IComment> comments;\n        public List<IComment> Comments\n        {\n            get {\n                if(comments.Count == 0)\n                {\n                    comments.AddRange(PostComments);\n                }\n                return comments;\n            }\n            set {\n                comments = value;\n                postComments.Clear();\n                if (comments.Count > 0)\n                {       \n                    foreach(var c in comments)\n                    {\n                        postComments.Add(PostComment.FromIComment(c));\n                    }\n                }\n            }\n        }\n\n        private List<PostComment> postComments;\n        public List<PostComment> PostComments\n        {\n            get { return postComments; }\n            set { postComments = value; }\n        }\n\n        public string ContentType { get; set; } = \"html\";\n\n        // Teaser.\n        public string AutoTeaser { get; set; }\n        public string TeaserOverride { get; set; }\n        public bool SuppressTeaser { get; set; }\n\n        // new fields 2018-06-20\n        public DateTime CreatedUtc { get; set; } = DateTime.UtcNow;\n        public string CreatedByUser { get; set; }\n        public string LastModifiedByUser { get; set; }\n        public string DraftContent { get; set; }\n        public string DraftAuthor { get; set; }\n        public DateTime? DraftPubDate { get; set; }\n\n        public string TemplateKey { get; set; }\n        public string SerializedModel { get; set; }\n        public string DraftSerializedModel { get; set; }\n        public string Serializer { get; set; }\n\n        public static PostEntity FromIPost(IPost post)\n        {\n            var p = new PostEntity();\n            post.CopyTo(p);\n            return p;\n        }\n        public string Script { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.Common/PageCommands.cs",
    "content": "﻿// Copyright (c) Source Tree Solutions, LLC. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.\n// Author:\t\t\t\t\tJoe Audette\n// Created:\t\t\t\t\t2016-08-31\n// Last Modified:\t\t\t2018-10-09\n//\n\nusing cloudscribe.SimpleContent.Models;\nusing cloudscribe.SimpleContent.Storage.EFCore.Common;\nusing cloudscribe.SimpleContent.Storage.EFCore.Models;\nusing Microsoft.EntityFrameworkCore;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore\n{\n    public class PageCommands : IPageCommands, IPageCommandsSingleton\n    {\n        public PageCommands(ISimpleContentDbContextFactory contextFactory)\n        {\n            _contextFactory = contextFactory;\n        }\n\n        private readonly ISimpleContentDbContextFactory _contextFactory;\n\n        public async Task Create(\n            string projectId,\n            IPage page,\n            CancellationToken cancellationToken = default(CancellationToken)\n            )\n        {\n            if (page == null) throw new ArgumentException(\"page must not be null\");\n\n            var p = PageEntity.FromIPage(page);\n\n            if (string.IsNullOrEmpty(p.Id)) { p.Id = Guid.NewGuid().ToString(); }\n\n            if (string.IsNullOrEmpty(p.ProjectId)) p.ProjectId = projectId;\n            p.LastModified = DateTime.UtcNow;\n\n            using (var dbContext = _contextFactory.CreateContext())\n            {\n                dbContext.Pages.Add(p);\n\n                int rowsAffected = await dbContext.SaveChangesAsync(cancellationToken)\n                    .ConfigureAwait(false);\n            }\n\n        }\n\n        public async Task Update(\n            string projectId,\n            IPage page,\n            CancellationToken cancellationToken = default(CancellationToken)\n            )\n        {\n            if (page == null) throw new ArgumentException(\"page must not be null\");\n            if (string.IsNullOrEmpty(page.Id)) throw new ArgumentException(\"can only update an existing page with a populated Id\");\n            var p = PageEntity.FromIPage(page);\n\n            p.LastModified = DateTime.UtcNow;\n\n            using (var dbContext = _contextFactory.CreateContext())\n            {\n                bool tracking = dbContext.ChangeTracker.Entries<PageEntity>().Any(x => x.Entity.Id == p.Id);\n                if (!tracking)\n                {\n                    dbContext.PageResources.RemoveRange(dbContext.PageResources.Where(x => x.PageEntityId == p.Id));\n                    dbContext.Pages.Update(p);\n\n                }\n\n                int rowsAffected = await dbContext.SaveChangesAsync(cancellationToken).ConfigureAwait(false);\n\n                if (page.Resources.Count > 0)\n                {\n                    p.Resources = page.Resources;\n                    foreach (var r in p.PageResources)\n                    {\n                        r.PageEntityId = p.Id;\n\n                    }\n\n                    rowsAffected = await dbContext.SaveChangesAsync(cancellationToken).ConfigureAwait(false);\n                }\n            }\n\n        }\n\n        public async Task Delete(\n            string projectId,\n            string pageId,\n            CancellationToken cancellationToken = default(CancellationToken)\n            )\n        {\n\n            using (var dbContext = _contextFactory.CreateContext())\n            {\n                var itemToRemove = await dbContext.Pages.SingleOrDefaultAsync(\n                x => x.Id == pageId && x.ProjectId == projectId\n                , cancellationToken)\n                .ConfigureAwait(false);\n\n                if (itemToRemove == null) throw new InvalidOperationException(\"Page not found\");\n\n\n                dbContext.Pages.Remove(itemToRemove);\n\n\n                int rowsAffected = await dbContext.SaveChangesAsync(cancellationToken)\n                    .ConfigureAwait(false);\n            }\n\n        }\n\n        public async Task<string> CloneToNewProject(\n            string sourceProjectId,\n            string targetProjectId,\n            string pageId,\n            CancellationToken cancellationToken = default(CancellationToken)\n            )\n        {\n            using(var dbContext = _contextFactory.CreateContext())\n            {\n                var page = await dbContext.Pages\n                    .Include(p => p.PageResources)\n                    .FirstOrDefaultAsync(p => p.Id == pageId, cancellationToken)\n                    .ConfigureAwait(false);\n\n                if (page == null) throw new InvalidOperationException(\"page not found\");\n\n                var p          = PageEntity.FromIPage(page);\n                p.Id           = Guid.NewGuid().ToString();\n                p.LastModified = DateTime.UtcNow;\n                p.ProjectId    = targetProjectId;\n                dbContext.Pages.Add(p);\n\n                int rowsAffected = await dbContext.SaveChangesAsync(cancellationToken).ConfigureAwait(false);\n\n                if (page.PageResources.Count > 0)\n                {\n                    p.PageResources = new List<PageResourceEntity>();\n\n                    // why did Joe need both page.Resources and page.PageResources? - jk\n                    foreach (var r in page.PageResources)\n                    {\n                        var newRes = new PageResourceEntity\n                        {\n                            PageEntityId = p.Id,\n                            ContentId    = p.Id,\n                            Environment  = r.Environment,\n                            Sort         = r.Sort,\n                            Type         = r.Type,\n                            Url          = r.Url\n                        };\n                        p.PageResources.Add(newRes);\n                    }\n\n                    rowsAffected = await dbContext.SaveChangesAsync(cancellationToken).ConfigureAwait(false);\n                }\n\n                return p.Id; //return Id of the new page\n            }\n        }\n\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.Common/PageQueries.cs",
    "content": "﻿// Copyright (c) Source Tree Solutions, LLC. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.\n// Author:\t\t\t\t\tJoe Audette\n// Created:\t\t\t\t\t2016-08-31\n// Last Modified:\t\t\t2018-10-09\n//\n\nusing cloudscribe.SimpleContent.Models;\nusing cloudscribe.SimpleContent.Storage.EFCore.Common;\nusing Microsoft.EntityFrameworkCore;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore\n{\n    public class PageQueries : IPageQueries, IPageQueriesSingleton\n    {\n        public PageQueries(ISimpleContentDbContextFactory contextFactory)\n        {\n            _contextFactory = contextFactory;\n        }\n\n        private readonly ISimpleContentDbContextFactory _contextFactory;\n\n        public async Task<List<IPage>> GetAllPages(\n            string projectId,\n            CancellationToken cancellationToken = default(CancellationToken)\n            )\n        {\n            cancellationToken.ThrowIfCancellationRequested();\n\n            using (var dbContext = _contextFactory.CreateContext())\n            {\n                var query = from x in dbContext.Pages\n                            where x.ProjectId == projectId\n                            select x;\n\n                var items = await query\n                    .AsNoTracking()\n                    .ToListAsync<IPage>(cancellationToken)\n                    .ConfigureAwait(false);\n\n                return items;\n            }\n\n        }\n\n        public async Task<List<IPage>> GetPagesReadyForPublish(\n            string projectId,\n            CancellationToken cancellationToken = default(CancellationToken)\n            )\n        {\n            cancellationToken.ThrowIfCancellationRequested();\n            var currentTime = DateTime.UtcNow;\n\n            using (var dbContext = _contextFactory.CreateContext())\n            {\n                var query = from x in dbContext.Pages\n                            where x.ProjectId == projectId\n                            && x.DraftPubDate != null\n                            && x.DraftPubDate < currentTime\n                            select x;\n\n                var items = await query\n                    .AsNoTracking()\n                    .ToListAsync<IPage>(cancellationToken)\n                    .ConfigureAwait(false);\n\n                return items;\n            }\n\n        }\n\n        public async Task<IPage> GetPage(\n            string projectId,\n            string pageId,\n            CancellationToken cancellationToken = default(CancellationToken)\n            )\n        {\n            cancellationToken.ThrowIfCancellationRequested();\n\n            using (var dbContext = _contextFactory.CreateContext())\n            {\n                return await dbContext.Pages\n                .Include(p => p.PageResources)\n                .AsNoTracking()\n                .FirstOrDefaultAsync(p => p.Id == pageId, cancellationToken)\n                .ConfigureAwait(false)\n                ;\n            }\n\n        }\n\n        public async Task<List<IPage>> GetRootPages(\n            string projectId,\n            CancellationToken cancellationToken = default(CancellationToken)\n            )\n        {\n            cancellationToken.ThrowIfCancellationRequested();\n\n            using (var dbContext = _contextFactory.CreateContext())\n            {\n                return await dbContext.Pages\n                .Include(p => p.PageResources)\n                .AsNoTracking()\n                .Where(p =>\n                p.ProjectId == projectId\n                && (p.ParentId == \"0\" || p.ParentId == null || p.ParentId == \"\")\n                )\n                .OrderBy(p => p.PageOrder)\n                .ToListAsync<IPage>(cancellationToken)\n\n                .ConfigureAwait(false)\n                ;\n            }\n\n        }\n\n        public async Task<List<IPage>> GetChildPages(\n            string projectId,\n            string pageId,\n            CancellationToken cancellationToken = default(CancellationToken)\n            )\n        {\n            cancellationToken.ThrowIfCancellationRequested();\n\n            using (var dbContext = _contextFactory.CreateContext())\n            {\n                return await dbContext.Pages\n                .Include(p => p.PageResources)\n                .AsNoTracking()\n                .Where(p =>\n                p.ParentId == pageId && p.ProjectId == projectId\n                )\n                .OrderBy(p => p.PageOrder)\n                .ToListAsync<IPage>(cancellationToken)\n                .ConfigureAwait(false)\n                ;\n            }\n\n        }\n\n        public async Task<IPage> GetPageBySlug(\n            string projectId,\n            string slug,\n            CancellationToken cancellationToken = default(CancellationToken)\n            )\n        {\n            cancellationToken.ThrowIfCancellationRequested();\n\n            using (var dbContext = _contextFactory.CreateContext())\n            {\n                return await dbContext.Pages\n                .Include(p => p.PageResources)\n                .AsNoTracking()\n                .Where(p =>\n                p.Slug == slug && p.ProjectId == projectId)\n                .FirstOrDefaultAsync(cancellationToken)\n                .ConfigureAwait(false)\n                ;\n            }\n        }\n\n        public async Task<IPage> GetPageByCorrelationKey(\n            string projectId,\n            string correlationKey,\n            CancellationToken cancellationToken = default(CancellationToken)\n            )\n        {\n            cancellationToken.ThrowIfCancellationRequested();\n\n            using (var dbContext = _contextFactory.CreateContext())\n            {\n                return await dbContext.Pages\n               .Include(p => p.PageResources)\n               .AsNoTracking()\n               .Where(p =>\n               p.CorrelationKey == correlationKey && p.ProjectId == projectId)\n               .FirstOrDefaultAsync(cancellationToken)\n               .ConfigureAwait(false)\n               ;\n            }\n        }\n\n        public async Task<bool> SlugIsAvailable(\n            string projectId,\n            string slug,\n            CancellationToken cancellationToken = default(CancellationToken)\n            )\n        {\n            cancellationToken.ThrowIfCancellationRequested();\n\n            using (var dbContext = _contextFactory.CreateContext())\n            {\n                var isInUse = await dbContext.Pages.AnyAsync(\n                p => p.Slug == slug && p.ProjectId == projectId,\n                cancellationToken\n                ).ConfigureAwait(false);\n\n                return !isInUse;\n            }\n\n        }\n\n        public async Task<int> GetChildPageCount(\n            string projectId,\n            string pageId,\n            bool includeUnpublished,\n            CancellationToken cancellationToken = default(CancellationToken)\n            )\n        {\n            cancellationToken.ThrowIfCancellationRequested();\n\n            var currentTime = DateTime.UtcNow;\n\n            using (var dbContext = _contextFactory.CreateContext())\n            {\n                var count = await dbContext.Pages\n                .CountAsync(x =>\n                x.ProjectId == projectId\n                && x.ParentId == pageId\n                && (includeUnpublished || (x.IsPublished && x.PubDate <= currentTime))\n\n                );\n\n                return count;\n            }\n        }\n\n        public async Task<int> GetCount(\n           string projectId,\n           bool includeUnpublished,\n           CancellationToken cancellationToken = default(CancellationToken)\n           )\n        {\n            cancellationToken.ThrowIfCancellationRequested();\n\n            using (var dbContext = _contextFactory.CreateContext())\n            {\n                var currentTime = DateTime.UtcNow;\n                return await dbContext.Pages.CountAsync<IPage>(x =>\n                    x.ProjectId == projectId\n                    && (includeUnpublished || (x.IsPublished == true && x.PubDate <= currentTime))\n                );\n            }\n        }\n\n        //public Task<Dictionary<string, int>> GetCategories(\n        //    string projectId,\n        //    bool userIsBlogOwner,\n        //    CancellationToken cancellationToken\n        //    )\n        //{\n        //    var result = new Dictionary<string, int>();\n\n\n        //    return Task.FromResult(result);\n        //}\n\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.Common/PostCommands.cs",
    "content": "﻿// Copyright (c) Source Tree Solutions, LLC. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.\n// Author:\t\t\t\t\tJoe Audette\n// Created:\t\t\t\t\t2016-08-31\n// Last Modified:\t\t\t2021-01-05 jk\n//\n\nusing cloudscribe.SimpleContent.Models;\nusing cloudscribe.SimpleContent.Storage.EFCore.Common;\nusing cloudscribe.SimpleContent.Storage.EFCore.Models;\nusing Microsoft.EntityFrameworkCore;\nusing System;\nusing System.Linq;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore\n{\n    public class PostCommands : IPostCommands, IPostCommandsSingleton\n    {\n        public PostCommands(ISimpleContentDbContextFactory contextFactory)\n        {\n            _contextFactory = contextFactory;\n        }\n\n        private readonly ISimpleContentDbContextFactory _contextFactory;\n\n        public async Task Create(\n            string projectId,\n            IPost post,\n            CancellationToken cancellationToken = default(CancellationToken)\n           )\n        {\n            if (post == null) throw new ArgumentException(\"post must not be null\");\n            //if (string.IsNullOrEmpty(projectId)) throw new ArgumentException(\"projectId must be provided\");\n\n            var p = PostEntity.FromIPost(post);\n\n            if (string.IsNullOrEmpty(p.Id)) { p.Id = Guid.NewGuid().ToString(); }\n\n            if (string.IsNullOrEmpty(p.BlogId)) p.BlogId = projectId;\n            post.LastModified = DateTime.UtcNow;\n\n            using (var db = _contextFactory.CreateContext())\n            {\n                db.Posts.Add(p);\n\n                //need to add PostCategorys\n                foreach (var c in p.Categories)\n                {\n                    if (string.IsNullOrEmpty(c)) continue;\n                    var t = c.Trim();\n                    if (string.IsNullOrEmpty(t)) continue;\n\n                    db.PostCategories.Add(new PostCategory\n                    {\n                        ProjectId = projectId,\n                        PostEntityId = p.Id,\n                        Value = t\n                    });\n                }\n\n                int rowsAffected = await db.SaveChangesAsync(cancellationToken)\n                    .ConfigureAwait(false);\n            }\n\n        }\n\n        public async Task Update(\n            string projectId,\n            IPost post,\n            CancellationToken cancellationToken = default(CancellationToken)\n           )\n        {\n            if (post == null) throw new ArgumentException(\"post must not be null\");\n            if (string.IsNullOrEmpty(post.Id)) throw new ArgumentException(\"can only update an existing post with a populated Id\");\n\n            //if (string.IsNullOrEmpty(projectId)) throw new ArgumentException(\"projectId must be provided\");\n            var p = PostEntity.FromIPost(post);\n\n            p.LastModified = DateTime.UtcNow;\n\n            var cats = p.CategoriesCsv.Split(new char[] { ',' },\n                        StringSplitOptions.RemoveEmptyEntries).Select(c => c.Trim())\n                        .Distinct(StringComparer.OrdinalIgnoreCase)\n                        .ToList();\n\n            //need to delete and re add PostCategories\n            await DeleteCategoriesByPost(projectId, post.Id, true, cancellationToken).ConfigureAwait(false);\n\n            using (var db = _contextFactory.CreateContext())\n            {\n                foreach (var c in cats)\n                {\n                    if (string.IsNullOrEmpty(c)) continue;\n                    var t = c.Trim();\n                    if (string.IsNullOrEmpty(t)) continue;\n\n                    var cat = new PostCategory\n                    {\n                        ProjectId = projectId,\n                        PostEntityId = p.Id,\n                        Value = t\n                    };\n\n                    db.PostCategories.Add(cat);\n\n                }\n\n\n                bool tracking = db.ChangeTracker.Entries<PostEntity>().Any(x => x.Entity.Id == p.Id);\n                if (!tracking)\n                {\n                    db.Comments.RemoveRange(db.Comments.Where(x => x.PostEntityId == p.Id));\n                    p.PostComments.Clear();\n                    db.Posts.Update(p);\n                }\n\n                int rowsAffected = await db.SaveChangesAsync(cancellationToken)\n                    .ConfigureAwait(false);\n\n                if (post.Comments.Count > 0)\n                {\n                    //p.Comments = post.Comments;\n                    foreach (var r in post.Comments)\n                    {\n                        var pc = new PostComment();\n                        if (!string.IsNullOrEmpty(r.Id))\n                        {\n                            pc.Id = r.Id;\n                        }\n                        pc.Author = r.Author;\n                        pc.Content = r.Content;\n                        pc.Email = r.Email;\n                        pc.Ip = r.Ip;\n                        pc.IsAdmin = r.IsAdmin;\n                        pc.IsApproved = r.IsApproved;\n                        pc.ProjectId = projectId;\n                        pc.PubDate = r.PubDate;\n                        pc.UserAgent = r.UserAgent;\n                        pc.Website = r.Website;\n                        pc.PostEntityId = p.Id;\n\n                        //dbContext.Comments.Add(pc);\n                        p.PostComments.Add(pc);\n                    }\n\n                    rowsAffected = await db.SaveChangesAsync(cancellationToken).ConfigureAwait(false);\n                }\n            }\n\n        }\n\n        private async Task DeleteCategoriesByPost(\n            string projectId,\n            string postId,\n            bool saveChanges,\n            CancellationToken cancellationToken = default(CancellationToken))\n        {\n\n            using (var db = _contextFactory.CreateContext())\n            {\n                var query = from l in db.PostCategories\n                            where (\n                            l.ProjectId == projectId\n                            && l.PostEntityId == postId\n                            )\n                            select l;\n\n                db.PostCategories.RemoveRange(query);\n                if (saveChanges)\n                {\n                    int rowsAffected = await db.SaveChangesAsync(cancellationToken)\n                        .ConfigureAwait(false);\n                }\n            }\n\n        }\n\n        private async Task DeleteCommentsByPost(\n            string projectId,\n            string postId,\n            bool saveChanges,\n            CancellationToken cancellationToken = default(CancellationToken))\n        {\n            using (var db = _contextFactory.CreateContext())\n            {\n                var query = from l in db.Comments\n                            where (\n                            l.ProjectId == projectId\n                            && l.PostEntityId == postId\n                            )\n                            select l;\n\n                db.Comments.RemoveRange(query);\n                if (saveChanges)\n                {\n                    int rowsAffected = await db.SaveChangesAsync(cancellationToken)\n                        .ConfigureAwait(false);\n                }\n            }\n        }\n\n        public async Task Delete(\n            string projectId,\n            string postId,\n            CancellationToken cancellationToken = default(CancellationToken)\n            )\n        {\n            using (var db = _contextFactory.CreateContext())\n            {\n                var itemToRemove = await db.Posts.SingleOrDefaultAsync(\n                x => x.Id == postId && x.BlogId == projectId\n                , cancellationToken)\n                .ConfigureAwait(false);\n\n                if (itemToRemove == null) throw new InvalidOperationException(\"Post not found\");\n\n                await DeleteCommentsByPost  (projectId, postId, true);\n                await DeleteCategoriesByPost(projectId, postId, true);\n\n                db.Posts.Remove(itemToRemove);\n                int rowsAffected = await db.SaveChangesAsync(cancellationToken)\n                    .ConfigureAwait(false);\n            }\n        }\n\n        public async Task<string> CloneToNewProject(\n            string sourceProjectId,\n            string targetProjectId,\n            string postId,\n            bool includeComments = false,\n            CancellationToken cancellationToken = default(CancellationToken)\n            )\n        {\n            using (var db = _contextFactory.CreateContext())\n            {\n                var post = await db.Posts\n                    .Include(p => p.PostComments)\n                    .SingleOrDefaultAsync(x =>\n                        x.Id == postId && x.BlogId == sourceProjectId,\n                        cancellationToken)\n                    .ConfigureAwait(false);\n\n                if (post == null) throw new InvalidOperationException(\"post not found\");\n\n                var p = PostEntity.FromIPost(post);\n                p.Id = Guid.NewGuid().ToString();\n                p.BlogId = targetProjectId;\n                p.LastModified = DateTime.UtcNow;\n\n                db.Posts.Add(p);\n\n                var cats = p.CategoriesCsv.Split(new char[] { ',' },\n                            StringSplitOptions.RemoveEmptyEntries).Select(c => c.Trim())\n                            .Distinct(StringComparer.OrdinalIgnoreCase)\n                            .ToList();\n\n                //need to add PostCategories\n                foreach (var c in cats)\n                {\n                    if (string.IsNullOrEmpty(c)) continue;\n                    var t = c.Trim();\n                    if (string.IsNullOrEmpty(t)) continue;\n\n                    db.PostCategories.Add(new PostCategory\n                    {\n                        ProjectId = targetProjectId,\n                        PostEntityId = p.Id,\n                        Value = t\n                    });\n                }\n\n                int rowsAffected = await db.SaveChangesAsync(cancellationToken)\n                    .ConfigureAwait(false);\n\n                if(!includeComments) { return p.Id; }\n\n                //need to add PostComments\n                if (post.Comments.Count > 0)\n                {\n                    foreach (var r in post.Comments)\n                    {\n                        var pc = new PostComment();\n                        if (!string.IsNullOrEmpty(r.Id))\n                        {\n                            pc.Id = r.Id;\n                        }\n                        pc.Author = r.Author;\n                        pc.Content = r.Content;\n                        pc.Email = r.Email;\n                        pc.Ip = r.Ip;\n                        pc.IsAdmin = r.IsAdmin;\n                        pc.IsApproved = r.IsApproved;\n                        pc.ProjectId = targetProjectId;\n                        pc.PubDate = r.PubDate;\n                        pc.UserAgent = r.UserAgent;\n                        pc.Website = r.Website;\n                        pc.PostEntityId = p.Id;\n\n                        //dbContext.Comments.Add(pc);\n                        p.PostComments.Add(pc);\n                    }\n\n                    rowsAffected = await db.SaveChangesAsync(cancellationToken).ConfigureAwait(false);\n                }\n\n                return p.Id;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.Common/PostQueries.cs",
    "content": "﻿// Copyright (c) Source Tree Solutions, LLC. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.\n// Author:\t\t\t\t\tJoe Audette\n// Created:\t\t\t\t\t2016-08-31\n// Last Modified:\t\t\t2019-02-11\n//\n\nusing cloudscribe.SimpleContent.Models;\nusing cloudscribe.SimpleContent.Storage.EFCore.Common;\nusing cloudscribe.SimpleContent.Storage.EFCore.Models;\nusing Microsoft.EntityFrameworkCore;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Linq.Expressions;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore\n{\n    public class PostQueries : IPostQueries, IPostQueriesSingleton\n    {\n        public PostQueries(ISimpleContentDbContextFactory contextFactory)\n        {\n            _contextFactory = contextFactory;\n        }\n\n        private readonly ISimpleContentDbContextFactory _contextFactory;\n\n        private const string PostContentType = \"Post\";\n\n\n        public async Task<List<IPost>> GetPostsReadyForPublish(\n            string blogId,\n            CancellationToken cancellationToken = default(CancellationToken)\n            )\n        {\n            cancellationToken.ThrowIfCancellationRequested();\n            var currentTime = DateTime.UtcNow;\n\n            using (var db = _contextFactory.CreateContext())\n            {\n                var query = from x in db.Posts\n                            where x.BlogId == blogId\n                            && x.DraftPubDate != null\n                            && x.DraftPubDate < currentTime\n                            select x;\n\n                var items = await query\n                    .AsNoTracking()\n                    .ToListAsync<IPost>(cancellationToken)\n                    .ConfigureAwait(false);\n\n                return items;\n            }\n\n        }\n\n        /// <summary>\n        /// this query is only used for the google site map so we don't need to get comments\n        /// </summary>\n        /// <param name=\"blogId\"></param>\n        /// <param name=\"includeUnpublished\"></param>\n        /// <param name=\"cancellationToken\"></param>\n        /// <returns></returns>\n        public async Task<List<IPost>> GetPosts(\n            string blogId,\n            bool includeUnpublished,\n            CancellationToken cancellationToken = default(CancellationToken)\n            )\n        {\n            cancellationToken.ThrowIfCancellationRequested();\n\n            var currentTime = DateTime.UtcNow;\n\n            using (var db = _contextFactory.CreateContext())\n            {\n                var query = db.Posts\n                .Where(p =>\n                    p.BlogId == blogId\n                    && (includeUnpublished || (p.IsPublished == true && p.PubDate <= currentTime))\n                      )\n                      .OrderByDescending(p => p.PubDate ?? p.LastModified);\n\n                var list = await query\n                    .AsNoTracking()\n                    .ToListAsync<IPost>();\n\n                return list;\n            }\n\n        }\n\n        public async Task<List<IPost>> GetRelatedPosts(\n            string blogId,\n            string currentPostId,\n            int numberToGet,\n            CancellationToken cancellationToken = default(CancellationToken)\n            )\n        {\n            cancellationToken.ThrowIfCancellationRequested();\n            var currentTime = DateTime.UtcNow;\n            var currentPost = await GetPost(blogId, currentPostId, cancellationToken);\n            if (currentPost != null && currentPost.Categories.Count > 0)\n            {\n                var cats = currentPost.Categories.ToArray();\n\n                using (var db = _contextFactory.CreateContext())\n                {\n                    var query = from pc in db.PostCategories\n                                join p in db.Posts\n                                on pc.PostEntityId equals p.Id\n                                where pc.ProjectId == blogId\n                                && p.Id != currentPostId\n                                && p.IsPublished == true && p.PubDate <= currentTime\n                                && cats.Contains(pc.Value)\n                                select p;\n\n                    var posts = await query\n                        .AsNoTracking()\n                        .OrderByDescending(x => x.PubDate)\n                        .Distinct()\n                        .Take(numberToGet)\n                        .ToListAsync<IPost>(cancellationToken)\n                        .ConfigureAwait(false);\n\n                    return posts;\n                }\n\n            }\n            else\n            {\n                return new List<IPost>();\n            }\n        }\n\n\n        public async Task<PagedPostResult> GetPosts(\n            string blogId,\n            string category,\n            bool includeUnpublished,\n            int pageNumber,\n            int pageSize,\n            CancellationToken cancellationToken = default(CancellationToken)\n            )\n        {\n            cancellationToken.ThrowIfCancellationRequested();\n\n            int offset = (pageSize * pageNumber) - pageSize;\n            var currentTime = DateTime.UtcNow;\n\n            var result = new PagedPostResult();\n\n            using (var db = _contextFactory.CreateContext())\n            {\n                var query = db.Posts\n                .Include(p => p.PostComments)\n                .Where(x =>\n                x.BlogId == blogId\n                && (includeUnpublished || (x.IsPublished == true && x.PubDate <= currentTime))\n                && (string.IsNullOrEmpty(category) || x.CategoriesCsv.Contains(category))\n                )\n                .OrderByDescending(x => x.PubDate ?? x.LastModified)\n                ;\n\n                var posts = await query\n                    .AsNoTracking()\n                    .AsSingleQuery()\n                    .Skip(offset)\n                    .Take(pageSize)\n                    .ToListAsync<IPost>(cancellationToken)\n                    .ConfigureAwait(false);\n\n                int totalPosts = await GetCount(blogId, category, includeUnpublished, cancellationToken).ConfigureAwait(false);\n\n                result.Data = posts;\n                result.TotalItems = totalPosts;\n\n                return result;\n            }\n\n        }\n\n        public async Task<int> GetCount(\n            string blogId,\n            string category,\n            bool includeUnpublished,\n            CancellationToken cancellationToken = default(CancellationToken)\n            )\n        {\n            cancellationToken.ThrowIfCancellationRequested();\n\n            var currentTime = DateTime.UtcNow;\n\n            using (var db = _contextFactory.CreateContext())\n            {\n                if (includeUnpublished)\n                {\n                    return await db.Posts\n                    .CountAsync<PostEntity>(x =>\n                    x.BlogId == blogId\n                    && (string.IsNullOrEmpty(category) || x.CategoriesCsv.Contains(category))\n                    );\n                }\n                else\n                {\n                    return await db.Posts\n                    .CountAsync<PostEntity>(x =>\n                    x.BlogId == blogId\n                    && (x.IsPublished == true && x.PubDate <= currentTime)\n                    && (string.IsNullOrEmpty(category) || x.CategoriesCsv.Contains(category))\n                    );\n                }\n            }\n\n        }\n\n        public async Task<List<IPost>> GetRecentPosts(\n            string blogId,\n            int numberToGet,\n            CancellationToken cancellationToken = default(CancellationToken)\n            )\n        {\n            cancellationToken.ThrowIfCancellationRequested();\n            var currentTime = DateTime.UtcNow;\n\n            using (var db = _contextFactory.CreateContext())\n            {\n                var query = db.Posts\n               // .Include(p => p.Comments) //think this is only used to populate a list in OLW so don't need the comments\n               .Where(p =>\n               p.BlogId == blogId\n               && p.IsPublished == true\n               && p.PubDate <= currentTime)\n               .OrderByDescending(p => p.PubDate)\n               ;\n\n                return await query\n                    .AsNoTracking()\n                    .Take(numberToGet)\n                    .ToListAsync<IPost>()\n                    .ConfigureAwait(false);\n            }\n\n        }\n\n        public async Task<List<IPost>> GetFeaturedPosts(\n            string blogId,\n            int numberToGet,\n            CancellationToken cancellationToken = default(CancellationToken)\n            )\n        {\n            cancellationToken.ThrowIfCancellationRequested();\n\n            var currentTime = DateTime.UtcNow;\n\n            using (var db = _contextFactory.CreateContext())\n            {\n                var query = db.Posts\n                .Where(p =>\n                p.BlogId == blogId\n                && p.IsPublished\n                && p.IsFeatured\n                && p.PubDate <= currentTime)\n                .OrderByDescending(p => p.PubDate)\n                ;\n\n                return await query\n                    .AsNoTracking()\n                    .Take(numberToGet)\n                    .ToListAsync<IPost>()\n                    .ConfigureAwait(false);\n            }\n\n        }\n\n        public async Task<PagedPostResult> GetPosts(\n            string blogId,\n            int year,\n            int month = 0,\n            int day = 0,\n            int pageNumber = 1,\n            int pageSize = 10,\n            bool includeUnpublished = false,\n            CancellationToken cancellationToken = default(CancellationToken)\n            )\n        {\n            cancellationToken.ThrowIfCancellationRequested();\n\n            IQueryable<PostEntity> query;\n            var currentTime = DateTime.UtcNow;\n\n            using (var db = _contextFactory.CreateContext())\n            {\n                if (day > 0 && month > 0)\n                {\n                    query = db.Posts\n                         .Include(p => p.PostComments)\n                        .Where(x =>\n                         x.BlogId == blogId\n                         && x.PubDate.HasValue\n                         && x.PubDate.Value.Year == year\n                         && x.PubDate.Value.Month == month\n                         && x.PubDate.Value.Day == day\n                         && (includeUnpublished || (x.IsPublished == true && x.PubDate <= currentTime))\n                    )\n                    .OrderByDescending(p => p.PubDate ?? p.LastModified)\n                    ;\n                }\n                else if (month > 0)\n                {\n                    query = db.Posts\n                         .Include(p => p.PostComments)\n                         .Where(x =>\n                            x.BlogId == blogId\n                            && x.PubDate.HasValue\n                            && x.PubDate.Value.Year == year\n                            && x.PubDate.Value.Month == month\n                            && (includeUnpublished || (x.IsPublished == true && x.PubDate <= currentTime))\n                           )\n                          .OrderByDescending(p => p.PubDate ?? p.LastModified)\n                          ;\n\n                }\n                else\n                {\n                    query = db.Posts\n                         .Include(p => p.PostComments)\n                         .Where(x =>\n                             x.BlogId == blogId\n                             && x.PubDate.HasValue\n                             && x.PubDate.Value.Year == year\n                           ).OrderByDescending(p => p.PubDate ?? p.LastModified)\n                           ;\n                }\n\n                int offset = (pageSize * pageNumber) - pageSize;\n                var posts = await query\n                    .AsNoTracking()\n                    .AsSingleQuery()\n                    .Skip(offset)\n                    .Take(pageSize)\n                    .ToListAsync<IPost>();\n\n                var result = new PagedPostResult();\n                result.Data = posts;\n                result.TotalItems = await GetCount(blogId, year, month, day, includeUnpublished, cancellationToken).ConfigureAwait(false);\n\n                return result;\n            }\n\n        }\n\n        public async Task<int> GetCount(\n            string blogId,\n            int year,\n            int month = 0,\n            int day = 0,\n            bool includeUnpublished = false,\n            CancellationToken cancellationToken = default(CancellationToken)\n            )\n        {\n            cancellationToken.ThrowIfCancellationRequested();\n\n            IQueryable<PostEntity> query;\n            var currentTime = DateTime.UtcNow;\n\n            using (var db = _contextFactory.CreateContext())\n            {\n                if (day > 0 && month > 0)\n                {\n                    query = db.Posts.Where(x =>\n                       x.BlogId == blogId\n                       && x.PubDate.HasValue\n                       && x.PubDate.Value.Year == year\n                       && x.PubDate.Value.Month == month\n                       && x.PubDate.Value.Day == day\n                       && (includeUnpublished || (x.IsPublished == true && x.PubDate <= currentTime))\n                        )\n                        ;\n                }\n                else if (month > 0)\n                {\n                    query = db.Posts.Where(x =>\n                        x.BlogId == blogId\n                        && x.PubDate.HasValue\n                        && x.PubDate.Value.Year == year\n                        && x.PubDate.Value.Month == month\n                        && (includeUnpublished || (x.IsPublished == true && x.PubDate <= currentTime))\n                        )\n                        ;\n\n                }\n                else\n                {\n                    query = db.Posts.Where(x =>\n                        x.BlogId == blogId\n                        && x.PubDate.HasValue\n                        && x.PubDate.Value.Year == year\n                        )\n                        ;\n                }\n\n                return await query.CountAsync<PostEntity>().ConfigureAwait(false);\n            }\n\n        }\n\n\n        public async Task<IPost> GetPost(\n            string blogId,\n            string postId,\n            CancellationToken cancellationToken = default(CancellationToken)\n            )\n        {\n            cancellationToken.ThrowIfCancellationRequested();\n\n            using (var db = _contextFactory.CreateContext())\n            {\n                var query = db.Posts\n                     .Include(p => p.PostComments)\n                     .Where(p => p.Id == postId && p.BlogId == blogId)\n                     ;\n\n                var post = await query.AsNoTracking().SingleOrDefaultAsync<PostEntity>().ConfigureAwait(false);\n\n                return post;\n            }\n        }\n\n        public async Task<PostResult> GetPostBySlug(\n            string blogId,\n            string slug,\n            CancellationToken cancellationToken = default(CancellationToken)\n            )\n        {\n            cancellationToken.ThrowIfCancellationRequested();\n\n            var result = new PostResult();\n\n            using (var db = _contextFactory.CreateContext())\n            {\n                var query = db.Posts\n                     .Include(p => p.PostComments)\n                     .Where(p => p.Slug == slug && p.BlogId == blogId)\n                     ;\n\n                var post = await query.AsNoTracking().SingleOrDefaultAsync<PostEntity>().ConfigureAwait(false);\n\n                result.Post = await query.AsNoTracking().SingleOrDefaultAsync<PostEntity>().ConfigureAwait(false);\n\n                if (result.Post != null)\n                {\n                    var cutoff = result.Post.PubDate;\n\n                    result.PreviousPost = await db.Posts\n                        .AsNoTracking()\n                        .AsSingleQuery()\n                        .Where(p =>\n                        p.BlogId == blogId\n                        && p.PubDate < cutoff\n                        && p.IsPublished == true\n                        )\n                        .OrderByDescending(p => p.PubDate ?? p.LastModified)\n                        .Take(1)\n                        .FirstOrDefaultAsync(cancellationToken).ConfigureAwait(false);\n\n                    result.NextPost = await db.Posts\n                        .AsNoTracking()\n                        .AsSingleQuery()\n                        .Where(p =>\n                        p.BlogId == blogId\n                        && p.PubDate > cutoff\n                        && p.IsPublished == true\n                        )\n                        .OrderBy(p => p.PubDate ?? p.LastModified)\n                        .Take(1)\n                        .FirstOrDefaultAsync(cancellationToken).ConfigureAwait(false);\n\n                }\n\n                return result;\n            }\n\n        }\n\n        public async Task<IPost> GetPostByCorrelationKey(\n            string blogId,\n            string correlationKey,\n            CancellationToken cancellationToken = default(CancellationToken)\n            )\n        {\n            cancellationToken.ThrowIfCancellationRequested();\n\n            using (var db = _contextFactory.CreateContext())\n            {\n                var query = db.Posts\n                     .Include(p => p.PostComments)\n                     .Where(p => p.CorrelationKey == correlationKey && p.BlogId == blogId)\n                     ;\n\n                var post = await query.AsNoTracking().FirstOrDefaultAsync<PostEntity>().ConfigureAwait(false);\n\n                return post;\n            }\n\n        }\n\n        public async Task<bool> SlugIsAvailable(\n            string blogId,\n            string slug,\n            CancellationToken cancellationToken = default(CancellationToken)\n            )\n        {\n            cancellationToken.ThrowIfCancellationRequested();\n\n            using (var db = _contextFactory.CreateContext())\n            {\n                var isInUse = await db.Posts.AnyAsync(\n                p => p.Slug == slug && p.BlogId == blogId,\n                cancellationToken\n                ).ConfigureAwait(false);\n\n                return !isInUse;\n            }\n\n        }\n\n\n        public async Task<Dictionary<string, int>> GetCategories(\n            string blogId,\n            bool includeUnpublished,\n            CancellationToken cancellationToken = default(CancellationToken)\n            )\n        {\n            cancellationToken.ThrowIfCancellationRequested();\n\n            var result = new Dictionary<string, int>();\n\n            var currentTime = DateTime.UtcNow;\n\n            using (var db = _contextFactory.CreateContext())\n            {\n                var posts = await db.Posts\n                .AsNoTracking()\n                .Where(x =>\n                    (x.BlogId.Equals(blogId))\n                    //&& (includeUnpublished || (x.IsPublished == true && x.PubDate <= DateTime.UtcNow))\n                    )\n\n                    .ToListAsync(cancellationToken);\n\n                var categories = await db.PostCategories\n                    .AsNoTracking()\n                    .Where(x =>\n                        (x.ProjectId.Equals(blogId))\n\n                        )\n\n                        .ToListAsync(cancellationToken);\n\n                var list = from y in posts\n                           join x in categories\n                           on y.Id equals x.PostEntityId\n                           where (\n                                (x.ProjectId.Equals(blogId))\n                                && (includeUnpublished || (y.IsPublished && y.PubDate <= currentTime))\n                                )\n                           select x\n                            ;\n\n\n                var grouped = from x in list\n                              group x by x.Value\n                            into grp\n                              select\n                                new { cat = grp.Key, count = grp.Count() }\n                            ;\n\n                foreach (var category in grouped)\n                {\n                    if (!result.ContainsKey(category.cat))\n                    {\n                        result.Add(category.cat, category.count);\n                    }\n                }\n\n                var sorted = new SortedDictionary<string, int>(result);\n\n                return sorted.OrderBy(x => x.Key).ToDictionary(kvp => kvp.Key, kvp => kvp.Value) as Dictionary<string, int>;\n            }\n\n        }\n\n\n        public async Task<Dictionary<string, int>> GetArchives(\n            string blogId,\n            bool includeUnpublished,\n            CancellationToken cancellationToken = default(CancellationToken)\n            )\n        {\n            cancellationToken.ThrowIfCancellationRequested();\n\n            var currentTime = DateTime.UtcNow;\n\n            var result = new Dictionary<string, int>();\n\n            using (var db = _contextFactory.CreateContext())\n            {\n                var query = db.Posts\n                        .Where(x =>\n                            (x.BlogId.Equals(blogId))\n                            && (includeUnpublished || (x.IsPublished == true && x.PubDate <= currentTime))\n                            )\n                        ;\n\n                var list = await query\n                    .AsNoTracking()\n                   .ToListAsync(cancellationToken)\n                   .ConfigureAwait(false);\n\n\n\n                var grouped = from p in list\n                              group p by new { month = p.PubDate?.Month ?? p.LastModified.Month, year = p.PubDate?.Year ?? p.LastModified.Year } into d\n                              select new\n                              {\n                                  key = d.Key.year.ToString() + \"/\" + d.Key.month.ToString(\"00\")\n                                  ,\n                                  count = d.Count()\n                              };\n\n\n                foreach (var item in grouped)\n                {\n                    result.Add(item.key, item.count);\n                }\n\n                var sorted = new SortedDictionary<string, int>(result);\n\n                return sorted.OrderByDescending(x => x.Key).ToDictionary(kvp => kvp.Key, kvp => kvp.Value) as Dictionary<string, int>;\n            }\n\n        }\n\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.Common/ProjectCommands.cs",
    "content": "﻿// Copyright (c) Source Tree Solutions, LLC. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.\n// Author:\t\t\t\t\tJoe Audette\n// Created:\t\t\t\t\t2016-08-31\n// Last Modified:\t\t\t2018-10-09\n//\n\nusing cloudscribe.SimpleContent.Models;\nusing cloudscribe.SimpleContent.Storage.EFCore.Common;\nusing Microsoft.EntityFrameworkCore;\nusing System;\nusing System.Linq;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore\n{\n    public class ProjectCommands : IProjectCommands, IProjectCommandsSingleton\n    {\n        public ProjectCommands(ISimpleContentDbContextFactory contextFactory)\n        {\n            _contextFactory = contextFactory;\n        }\n\n        private readonly ISimpleContentDbContextFactory _contextFactory;\n\n        public async Task Create(\n            string projectId,\n            IProjectSettings project,\n            CancellationToken cancellationToken = default(CancellationToken)\n            )\n        {\n            if (project == null) throw new ArgumentException(\"project must not be null\");\n            if (string.IsNullOrEmpty(projectId)) throw new ArgumentException(\"projectId must be provided\");\n\n            var p = ProjectSettings.FromIProjectSettings(project);\n\n            if (string.IsNullOrEmpty(p.Id)) { p.Id = projectId; }\n\n            using (var db = _contextFactory.CreateContext())\n            {\n                db.Projects.Add(p);\n\n                int rowsAffected = await db.SaveChangesAsync(cancellationToken)\n                    .ConfigureAwait(false);\n            }\n\n        }\n\n        public async Task Update(\n            string projectId,\n            IProjectSettings project,\n            CancellationToken cancellationToken = default(CancellationToken)\n            )\n        {\n            if (project == null) throw new ArgumentException(\"project must not be null\");\n            if (string.IsNullOrEmpty(project.Id)) throw new ArgumentException(\"can only update an existing project with a populated Id\");\n\n            //if (string.IsNullOrEmpty(projectId)) throw new ArgumentException(\"projectId must be provided\");\n            var p = ProjectSettings.FromIProjectSettings(project);\n\n            using (var db = _contextFactory.CreateContext())\n            {\n                bool tracking = db.ChangeTracker.Entries<ProjectSettings>().Any(x => x.Entity.Id == p.Id);\n                if (!tracking)\n                {\n                    db.Projects.Update(p);\n                }\n\n                int rowsAffected = await db.SaveChangesAsync(cancellationToken)\n                    .ConfigureAwait(false);\n            }\n\n        }\n\n        public async Task Delete(\n            string projectId,\n            string projectKey,\n            CancellationToken cancellationToken = default(CancellationToken)\n            )\n        {\n            using (var db = _contextFactory.CreateContext())\n            {\n                var itemToRemove = await db.Projects.SingleOrDefaultAsync(\n               x => x.Id == projectKey\n               , cancellationToken)\n               .ConfigureAwait(false);\n\n                if (itemToRemove == null) throw new InvalidOperationException(\"Post not found\");\n\n                db.Projects.Remove(itemToRemove);\n                int rowsAffected = await db.SaveChangesAsync(cancellationToken)\n                    .ConfigureAwait(false);\n            }\n\n        }\n\n        public async Task<string> CloneToNewProject(\n            string sourceProjectId,\n            string targetProjectId,\n            string newSiteName = null,\n            CancellationToken cancellationToken = default(CancellationToken)\n            )\n        {\n            using (var db = _contextFactory.CreateContext())\n            {\n\n                var destinationProject = await db.Projects.SingleOrDefaultAsync(x =>\n                    x.Id == targetProjectId,\n                    cancellationToken).ConfigureAwait(false);\n\n                var sourceProject = await db.Projects.SingleOrDefaultAsync(x =>\n                    x.Id == sourceProjectId,\n                    cancellationToken ).ConfigureAwait(false);\n\n                if (sourceProject == null) throw new InvalidOperationException(\"Project not found\");\n\n                var p = ProjectSettings.FromIProjectSettings(sourceProject);\n                p.Id = targetProjectId;\n\n                if(destinationProject == null)\n                {\n                    db.Projects.Add(p);\n                }\n                else\n                {\n                    bool tracking = db.ChangeTracker.Entries<ProjectSettings>().Any(x => x.Entity.Id == p.Id);\n                    if (!tracking)\n                    {\n                        db.Projects.Update(p);\n                    };\n                }\n                int rowsAffected = await db.SaveChangesAsync(cancellationToken).ConfigureAwait(false);\n\n                return p.Id;\n            }\n        }\n\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.Common/ProjectQueries.cs",
    "content": "﻿// Copyright (c) Source Tree Solutions, LLC. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.\n// Author:\t\t\t\t\tJoe Audette\n// Created:\t\t\t\t\t2016-08-31\n// Last Modified:\t\t\t2018-10-09\n// \n\nusing cloudscribe.SimpleContent.Models;\nusing cloudscribe.SimpleContent.Storage.EFCore.Common;\nusing Microsoft.EntityFrameworkCore;\nusing System.Linq;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore\n{\n    public class ProjectQueries : IProjectQueries, IProjectQueriesSingleton\n    {\n        public ProjectQueries(ISimpleContentDbContextFactory contextFactory)\n        {\n            _contextFactory = contextFactory;\n        }\n\n        private readonly ISimpleContentDbContextFactory _contextFactory;\n\n        public async Task<IProjectSettings> GetProjectSettings(\n            string projectId,\n            CancellationToken cancellationToken\n            )\n        {\n            cancellationToken.ThrowIfCancellationRequested();\n\n            using (var db = _contextFactory.CreateContext())\n            {\n                return await db.Projects\n                    .Where(p => p.Id == projectId)\n                    .FirstOrDefaultAsync(cancellationToken)\n                    .ConfigureAwait(false);\n            }\n   \n        }\n        \n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.Common/README.md",
    "content": "# cloudscribe.SimpleContent.Storage.EFCore.Common\n\nThis package provides the base Entity Framework Core implementation for cloudscribe SimpleContent commands and queries. It is intended to be used as a foundational library for database-specific EFCore storage providers within the cloudscribe.SimpleContent ecosystem.\n\n## Features\n- Common command and query logic for EFCore-based storage\n- Designed for extension by MSSQL, MySQL, PostgreSQL, SQLite providers\n- Used internally by other cloudscribe.SimpleContent.Storage.EFCore.* projects\n\n## Usage\nReference this package from your database-specific provider or application project. Typically, you will not use this package directly, but through one of the database provider packages (e.g., MSSQL, MySQL, PostgreSQL, SQLite).\n\n```\n// Example usage (in your DbContext registration)\nservices.AddSimpleContentEFCoreStorage();\n```\n\n## License\nThis project is licensed under the Apache-2.0 License. See the LICENSE file for details.\n\n## Repository\n[cloudscribe.SimpleContent on GitHub](https://github.com/cloudscribe/cloudscribe.SimpleContent)\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.Common/ServiceCollectionExtensions.cs",
    "content": "﻿// Copyright (c) Source Tree Solutions, LLC. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.\n// Author:\t\t\t\t\tJoe Audette\n// Created:\t\t\t\t\t2016-09-02\n// Last Modified:\t\t\t2018-10-09\n// \n\nusing cloudscribe.SimpleContent.Models;\nusing Microsoft.Extensions.DependencyInjection;\nusing Microsoft.Extensions.DependencyInjection.Extensions;\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.Common\n{\n    public static class ServiceCollectionExtensions\n    {\n        public static IServiceCollection AddCloudscribeSimpleContentEFStorageCommon(this IServiceCollection services)\n        {\n            \n            services.TryAddScoped<IPageQueries, PageQueries>();\n            services.TryAddScoped<IPageCommands, PageCommands>();\n\n            services.TryAddScoped<IPostQueries, PostQueries>();\n            services.TryAddScoped<IPostCommands, PostCommands>();\n\n            services.TryAddScoped<IProjectQueries, ProjectQueries>();\n            services.TryAddScoped<IProjectCommands, ProjectCommands>();\n\n            services.TryAddScoped<IContentHistoryCommands, ContentHistoryCommands>();\n            services.TryAddScoped<IContentHistoryQueries, ContentHistoryQueries>();\n\n            // singleton versions for graphql\n            services.TryAddSingleton<IPageQueriesSingleton, PageQueries>();\n            services.TryAddSingleton<IPageCommandsSingleton, PageCommands>();\n\n            services.TryAddSingleton<IPostQueriesSingleton, PostQueries>();\n            services.TryAddSingleton<IPostCommandsSingleton, PostCommands>();\n\n            services.TryAddSingleton<IProjectQueriesSingleton, ProjectQueries>();\n            services.TryAddSingleton<IProjectCommandsSingleton, ProjectCommands>();\n\n            services.TryAddSingleton<IContentHistoryCommandsSingleton, ContentHistoryCommands>();\n            services.TryAddSingleton<IContentHistoryQueriesSingleton, ContentHistoryQueries>();\n\n\n            return services;\n        }\n\n        \n\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.Common/SimpleContentDbContextBase.cs",
    "content": "﻿// Copyright (c) Source Tree Solutions, LLC. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.\n// Author:\t\t\t\t\tJoe Audette\n// Created:\t\t\t\t\t2016-08-31\n// Last Modified:\t\t\t2018-06-27\n// \n\nusing cloudscribe.SimpleContent.Models;\nusing cloudscribe.SimpleContent.Storage.EFCore.Models;\nusing Microsoft.EntityFrameworkCore;\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore\n{\n    public class SimpleContentDbContextBase : DbContext\n    {\n        public SimpleContentDbContextBase(DbContextOptions options):base(options)\n        {\n\n        }\n\n        protected SimpleContentDbContextBase() { }\n\n        public DbSet<ProjectSettings> Projects { get; set; }\n\n        public DbSet<PostEntity> Posts { get; set; }\n\n        public DbSet<PostComment> Comments { get; set; }\n\n        public DbSet<PostCategory> PostCategories { get; set; }\n\n        public DbSet<PageEntity> Pages { get; set; }\n\n        public DbSet<PageComment> PageComments { get; set; }\n\n        public DbSet<PageResourceEntity> PageResources { get; set; }\n\n        public DbSet<PageCategory> PageCategories { get; set; }\n\n        public DbSet<ContentHistory> ContentHistory { get; set; }\n\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.Common/SimpleContentEFStartup.cs",
    "content": "﻿using cloudscribe.SimpleContent.Storage.EFCore.Common;\nusing Microsoft.EntityFrameworkCore;\nusing System;\nusing System.Threading.Tasks;\n\nnamespace Microsoft.Extensions.DependencyInjection\n{\n    public static class SimpleContentEFStartup\n    {\n        public static async Task InitializeDatabaseAsync(IServiceProvider serviceProvider)\n        {\n            var db = serviceProvider.GetService<ISimpleContentDbContext>();\n            await db.Database.MigrateAsync();\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.Common/cloudscribe.SimpleContent.Storage.EFCore.Common.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <Description>base package - Entity Framework Core implementation of cloudscribe SimpleContent commands and queries</Description>\n    <Version>10.1.0</Version>\n    <TargetFramework>net10.0</TargetFramework>\n    <Authors>Joe Audette</Authors>\n    <PackageTags>cloudscribe;commands;queries;ef</PackageTags>\n    <PackageIcon>icon.png</PackageIcon>\n    <PackageProjectUrl>https://github.com/cloudscribe/cloudscribe.SimpleContent</PackageProjectUrl>\n    <PackageLicenseExpression>Apache-2.0</PackageLicenseExpression>\n    <RepositoryUrl>https://github.com/cloudscribe/cloudscribe.SimpleContent.git</RepositoryUrl>\n    <RepositoryType>git</RepositoryType>\n    <PackageReadmeFile>README.md</PackageReadmeFile>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <None Include=\"icon.png\" Pack=\"true\" PackagePath=\"\\\" />\n    <None Include=\"README.md\" Pack=\"true\" PackagePath=\"/\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <ProjectReference Include=\"..\\cloudscribe.SimpleContent.Models\\cloudscribe.SimpleContent.Models.csproj\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"Microsoft.EntityFrameworkCore\" Version=\"10.0.0\" />\n    <PackageReference Include=\"Microsoft.EntityFrameworkCore.Relational\" Version=\"10.0.0\" />\n  </ItemGroup>\n\n</Project>\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.MSSQL/BlankTriggerAddingConvention.cs",
    "content": "﻿using Microsoft.EntityFrameworkCore;\nusing Microsoft.EntityFrameworkCore.Metadata;\nusing Microsoft.EntityFrameworkCore.Metadata.Builders;\nusing Microsoft.EntityFrameworkCore.Metadata.Conventions;\nusing System.Linq;\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.MSSQL\n{\n    internal class BlankTriggerAddingConvention : IModelFinalizingConvention\n    {\n        public virtual void ProcessModelFinalizing(\n            IConventionModelBuilder modelBuilder,\n            IConventionContext<IConventionModelBuilder> context)\n        {\n            foreach (var entityType in modelBuilder.Metadata.GetEntityTypes())\n            {\n                var table = StoreObjectIdentifier.Create(entityType, StoreObjectType.Table);\n                if (table != null\n                    && entityType.GetDeclaredTriggers().All(t => t.GetDatabaseName(table.Value) == null)\n                    && (entityType.BaseType == null\n                        || entityType.GetMappingStrategy() != RelationalAnnotationNames.TphMappingStrategy))\n                {\n                    entityType.Builder.HasTrigger(table.Value.Name + \"_Trigger\");\n                }\n\n                foreach (var fragment in entityType.GetMappingFragments(StoreObjectType.Table))\n                {\n                    if (entityType.GetDeclaredTriggers().All(t => t.GetDatabaseName(fragment.StoreObject) == null))\n                    {\n                        entityType.Builder.HasTrigger(fragment.StoreObject.Name + \"_Trigger\");\n                    }\n                }\n            }\n        }\n    }\n}\n\n\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.MSSQL/Migrations/20161118134254_Initial.Designer.cs",
    "content": "﻿using System;\nusing Microsoft.EntityFrameworkCore;\nusing Microsoft.EntityFrameworkCore.Infrastructure;\nusing Microsoft.EntityFrameworkCore.Metadata;\nusing Microsoft.EntityFrameworkCore.Migrations;\nusing cloudscribe.SimpleContent.Storage.EFCore.MSSQL;\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.MSSQL.Migrations\n{\n    [DbContext(typeof(SimpleContentDbContext))]\n    [Migration(\"20161118134254_Initial\")]\n    partial class Initial\n    {\n        protected override void BuildTargetModel(ModelBuilder modelBuilder)\n        {\n            modelBuilder\n                .HasAnnotation(\"ProductVersion\", \"1.0.1\")\n                .HasAnnotation(\"SqlServer:ValueGenerationStrategy\", SqlServerValueGenerationStrategy.IdentityColumn);\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Models.ProjectSettings\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .HasMaxLength(36);\n\n                    b.Property<bool>(\"AddBlogToPagesTree\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"bit\")\n                        .HasDefaultValue(true);\n\n                    b.Property<bool>(\"BlogMenuLinksToNewestPost\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"bit\")\n                        .HasDefaultValue(false);\n\n                    b.Property<string>(\"BlogPageNavComponentVisibility\")\n                        .HasMaxLength(255);\n\n                    b.Property<int>(\"BlogPagePosition\");\n\n                    b.Property<string>(\"BlogPageText\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CdnUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ChannelCategoriesCsv\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ChannelRating\")\n                        .HasMaxLength(100);\n\n                    b.Property<int>(\"ChannelTimeToLive\");\n\n                    b.Property<string>(\"CommentNotificationEmail\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"CopyrightNotice\")\n                        .HasMaxLength(255);\n\n                    b.Property<int>(\"DaysToComment\");\n\n                    b.Property<string>(\"DefaultPageSlug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Description\");\n\n                    b.Property<string>(\"EmailFromAddress\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Image\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"IncludePubDateInPostUrls\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"bit\")\n                        .HasDefaultValue(true);\n\n                    b.Property<string>(\"LanguageCode\")\n                        .HasMaxLength(10);\n\n                    b.Property<string>(\"LocalMediaVirtualPath\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ManagingEditorEmail\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"ModerateComments\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"bit\")\n                        .HasDefaultValue(true);\n\n                    b.Property<int>(\"PostsPerPage\");\n\n                    b.Property<string>(\"PubDateFormat\")\n                        .HasMaxLength(75);\n\n                    b.Property<string>(\"RecaptchaPrivateKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RecaptchaPublicKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RemoteFeedProcessorUseAgentFragment\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RemoteFeedUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"ShowTitle\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"bit\")\n                        .HasDefaultValue(false);\n\n                    b.Property<string>(\"SmtpPassword\");\n\n                    b.Property<int>(\"SmtpPort\");\n\n                    b.Property<string>(\"SmtpPreferredEncoding\")\n                        .HasMaxLength(20);\n\n                    b.Property<bool>(\"SmtpRequiresAuth\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"bit\")\n                        .HasDefaultValue(false);\n\n                    b.Property<string>(\"SmtpServer\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"SmtpUseSsl\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"bit\")\n                        .HasDefaultValue(false);\n\n                    b.Property<string>(\"SmtpUser\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"TimeZoneId\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Title\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"UseDefaultPageAsRootNode\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"bit\")\n                        .HasDefaultValue(true);\n\n                    b.Property<bool>(\"UseMetaDescriptionInFeed\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"bit\")\n                        .HasDefaultValue(false);\n\n                    b.Property<string>(\"WebmasterEmail\")\n                        .HasMaxLength(100);\n\n                    b.HasKey(\"Id\");\n\n                    b.ToTable(\"cs_ContentProject\");\n\n\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageCategory\", b =>\n                {\n                    b.Property<string>(\"Value\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.HasKey(\"Value\", \"PageEntityId\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.HasIndex(\"Value\");\n\n                    b.ToTable(\"cs_PageCategory\");\n\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"Email\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Ip\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"IsAdmin\");\n\n                    b.Property<bool>(\"IsApproved\");\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<DateTime>(\"PubDate\");\n\n                    b.Property<string>(\"UserAgent\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Website\")\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_PageComment\");\n\n             \n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CategoriesCsv\")\n                       .HasMaxLength(500);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<bool>(\"IsPublished\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"bit\")\n                        .HasDefaultValue(true);\n\n                    b.Property<DateTime>(\"LastModified\");\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasMaxLength(500);\n\n                    b.Property<int>(\"PageOrder\");\n\n                    b.Property<string>(\"ParentId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ParentSlug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<DateTime>(\"PubDate\");\n\n                    b.Property<bool>(\"ShowCategories\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"bit\")\n                        .HasDefaultValue(false);\n\n                    b.Property<bool>(\"ShowComments\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"bit\")\n                        .HasDefaultValue(false);\n\n                    b.Property<bool>(\"ShowHeading\")\n                        .ValueGeneratedOnAdd()\n                       .HasColumnType(\"bit\")\n                        .HasDefaultValue(true);\n\n                    b.Property<bool>(\"ShowLastModified\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"bit\")\n                        .HasDefaultValue(false);\n\n                    b.Property<bool>(\"ShowPubDate\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"bit\")\n                        .HasDefaultValue(false);\n\n                    b.Property<string>(\"Slug\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ViewRoles\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"ParentId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_Page\");\n\n\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostCategory\", b =>\n                {\n                    b.Property<string>(\"Value\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PostEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.HasKey(\"Value\", \"PostEntityId\");\n\n                    b.HasIndex(\"PostEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.HasIndex(\"Value\");\n\n                    b.ToTable(\"cs_PostCategory\");\n\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"Email\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Ip\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"IsAdmin\");\n\n                    b.Property<bool>(\"IsApproved\");\n\n                    b.Property<string>(\"PostEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<DateTime>(\"PubDate\");\n\n                    b.Property<string>(\"UserAgent\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Website\")\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PostEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_PostComment\");\n\n                  \n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"BlogId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<bool>(\"IsPublished\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"bit\")\n                        .HasDefaultValue(true);\n\n                    b.Property<DateTime>(\"LastModified\");\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasMaxLength(500);\n\n                    b.Property<DateTime>(\"PubDate\");\n\n                    b.Property<string>(\"Slug\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"BlogId\");\n\n                    b.HasIndex(\"Slug\");\n\n                    b.ToTable(\"cs_Post\");\n\n             \n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\")\n                        .WithMany(\"PageComments\")\n                        .HasForeignKey(\"PageEntityId\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\")\n                        .WithMany(\"PostComments\")\n                        .HasForeignKey(\"PostEntityId\");\n                });\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.MSSQL/Migrations/20161118134254_Initial.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing Microsoft.EntityFrameworkCore.Migrations;\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.MSSQL.Migrations\n{\n    public partial class Initial : Migration\n    {\n        protected override void Up(MigrationBuilder migrationBuilder)\n        {\n            migrationBuilder.CreateTable(\n                name: \"cs_ContentProject\",\n                columns: table => new\n                {\n                    Id = table.Column<string>(maxLength: 36, nullable: false),\n                    AddBlogToPagesTree = table.Column<bool>(type: \"bit\", nullable: false, defaultValue: true),\n                    BlogMenuLinksToNewestPost = table.Column<bool>(type: \"bit\", nullable: false, defaultValue: false),\n                    BlogPageNavComponentVisibility = table.Column<string>(maxLength: 255, nullable: true),\n                    BlogPagePosition = table.Column<int>(nullable: false),\n                    BlogPageText = table.Column<string>(maxLength: 255, nullable: true),\n                    CdnUrl = table.Column<string>(maxLength: 255, nullable: true),\n                    ChannelCategoriesCsv = table.Column<string>(maxLength: 255, nullable: true),\n                    ChannelRating = table.Column<string>(maxLength: 100, nullable: true),\n                    ChannelTimeToLive = table.Column<int>(nullable: false),\n                    CommentNotificationEmail = table.Column<string>(maxLength: 100, nullable: true),\n                    CopyrightNotice = table.Column<string>(maxLength: 255, nullable: true),\n                    DaysToComment = table.Column<int>(nullable: false),\n                    DefaultPageSlug = table.Column<string>(maxLength: 255, nullable: true),\n                    Description = table.Column<string>(nullable: true),\n                    EmailFromAddress = table.Column<string>(maxLength: 100, nullable: true),\n                    Image = table.Column<string>(maxLength: 255, nullable: true),\n                    IncludePubDateInPostUrls = table.Column<bool>(type: \"bit\", nullable: false, defaultValue: true),\n                    LanguageCode = table.Column<string>(maxLength: 10, nullable: true),\n                    LocalMediaVirtualPath = table.Column<string>(maxLength: 255, nullable: true),\n                    ManagingEditorEmail = table.Column<string>(maxLength: 100, nullable: true),\n                    ModerateComments = table.Column<bool>(type: \"bit\", nullable: false, defaultValue: true),\n                    PostsPerPage = table.Column<int>(nullable: false),\n                    PubDateFormat = table.Column<string>(maxLength: 75, nullable: true),\n                    RecaptchaPrivateKey = table.Column<string>(maxLength: 255, nullable: true),\n                    RecaptchaPublicKey = table.Column<string>(maxLength: 255, nullable: true),\n                    RemoteFeedProcessorUseAgentFragment = table.Column<string>(maxLength: 255, nullable: true),\n                    RemoteFeedUrl = table.Column<string>(maxLength: 255, nullable: true),\n                    ShowTitle = table.Column<bool>(type: \"bit\", nullable: false, defaultValue: false),\n                    SmtpPassword = table.Column<string>(nullable: true),\n                    SmtpPort = table.Column<int>(nullable: false),\n                    SmtpPreferredEncoding = table.Column<string>(maxLength: 20, nullable: true),\n                    SmtpRequiresAuth = table.Column<bool>(type: \"bit\", nullable: false, defaultValue: false),\n                    SmtpServer = table.Column<string>(maxLength: 100, nullable: true),\n                    SmtpUseSsl = table.Column<bool>(type: \"bit\", nullable: false, defaultValue: false),\n                    SmtpUser = table.Column<string>(maxLength: 500, nullable: true),\n                    TimeZoneId = table.Column<string>(maxLength: 100, nullable: true),\n                    Title = table.Column<string>(maxLength: 255, nullable: true),\n                    UseDefaultPageAsRootNode = table.Column<bool>(type: \"bit\", nullable: false, defaultValue: true),\n                    UseMetaDescriptionInFeed = table.Column<bool>(type: \"bit\", nullable: false, defaultValue: false),\n                    WebmasterEmail = table.Column<string>(maxLength: 100, nullable: true)\n                },\n                constraints: table =>\n                {\n                    table.PrimaryKey(\"PK_cs_ContentProject\", x => x.Id);\n                });\n\n            migrationBuilder.CreateTable(\n                name: \"cs_PageCategory\",\n                columns: table => new\n                {\n                    Value = table.Column<string>(maxLength: 50, nullable: false),\n                    PageEntityId = table.Column<string>(maxLength: 36, nullable: false),\n                    ProjectId = table.Column<string>(maxLength: 36, nullable: false)\n                },\n                constraints: table =>\n                {\n                    table.PrimaryKey(\"PK_cs_PageCategory\", x => new { x.Value, x.PageEntityId });\n                });\n\n            migrationBuilder.CreateTable(\n                name: \"cs_Page\",\n                columns: table => new\n                {\n                    Id = table.Column<string>(maxLength: 36, nullable: false),\n                    Author = table.Column<string>(maxLength: 255, nullable: true),\n                    CategoriesCsv = table.Column<string>(maxLength: 500, nullable: true),\n                    Content = table.Column<string>(nullable: true),\n                    IsPublished = table.Column<bool>(type: \"bit\", nullable: false, defaultValue: true),\n                    LastModified = table.Column<DateTime>(nullable: false),\n                    MetaDescription = table.Column<string>(maxLength: 500, nullable: true),\n                    PageOrder = table.Column<int>(nullable: false),\n                    ParentId = table.Column<string>(maxLength: 36, nullable: true),\n                    ParentSlug = table.Column<string>(maxLength: 255, nullable: true),\n                    ProjectId = table.Column<string>(maxLength: 36, nullable: false),\n                    PubDate = table.Column<DateTime>(nullable: false),\n                    ShowCategories = table.Column<bool>(type: \"bit\", nullable: false, defaultValue: false),\n                    ShowComments = table.Column<bool>(type: \"bit\", nullable: false, defaultValue: false),\n                    ShowHeading = table.Column<bool>(type: \"bit\", nullable: false, defaultValue: true),\n                    ShowLastModified = table.Column<bool>(type: \"bit\", nullable: false, defaultValue: false),\n                    ShowPubDate = table.Column<bool>(type: \"bit\", nullable: false, defaultValue: false),\n                    Slug = table.Column<string>(maxLength: 255, nullable: false),\n                    Title = table.Column<string>(maxLength: 255, nullable: false),\n                    ViewRoles = table.Column<string>(nullable: true)\n                },\n                constraints: table =>\n                {\n                    table.PrimaryKey(\"PK_cs_Page\", x => x.Id);\n                });\n\n            migrationBuilder.CreateTable(\n                name: \"cs_PostCategory\",\n                columns: table => new\n                {\n                    Value = table.Column<string>(maxLength: 50, nullable: false),\n                    PostEntityId = table.Column<string>(maxLength: 36, nullable: false),\n                    ProjectId = table.Column<string>(maxLength: 36, nullable: false)\n                },\n                constraints: table =>\n                {\n                    table.PrimaryKey(\"PK_cs_PostCategory\", x => new { x.Value, x.PostEntityId });\n                });\n\n            migrationBuilder.CreateTable(\n                name: \"cs_Post\",\n                columns: table => new\n                {\n                    Id = table.Column<string>(maxLength: 36, nullable: false),\n                    Author = table.Column<string>(maxLength: 255, nullable: true),\n                    BlogId = table.Column<string>(maxLength: 36, nullable: false),\n                    CategoriesCsv = table.Column<string>(maxLength: 500, nullable: true),\n                    Content = table.Column<string>(nullable: true),\n                    IsPublished = table.Column<bool>(type: \"bit\", nullable: false, defaultValue: true),\n                    LastModified = table.Column<DateTime>(nullable: false),\n                    MetaDescription = table.Column<string>(maxLength: 500, nullable: true),\n                    PubDate = table.Column<DateTime>(nullable: false),\n                    Slug = table.Column<string>(maxLength: 255, nullable: false),\n                    Title = table.Column<string>(maxLength: 255, nullable: false)\n                },\n                constraints: table =>\n                {\n                    table.PrimaryKey(\"PK_cs_Post\", x => x.Id);\n                });\n\n            migrationBuilder.CreateTable(\n                name: \"cs_PageComment\",\n                columns: table => new\n                {\n                    Id = table.Column<string>(maxLength: 36, nullable: false),\n                    Author = table.Column<string>(maxLength: 255, nullable: true),\n                    Content = table.Column<string>(nullable: true),\n                    Email = table.Column<string>(maxLength: 100, nullable: true),\n                    Ip = table.Column<string>(maxLength: 100, nullable: true),\n                    IsAdmin = table.Column<bool>(nullable: false),\n                    IsApproved = table.Column<bool>(nullable: false),\n                    PageEntityId = table.Column<string>(maxLength: 36, nullable: true),\n                    ProjectId = table.Column<string>(maxLength: 36, nullable: false),\n                    PubDate = table.Column<DateTime>(nullable: false),\n                    UserAgent = table.Column<string>(maxLength: 255, nullable: true),\n                    Website = table.Column<string>(maxLength: 255, nullable: true)\n                },\n                constraints: table =>\n                {\n                    table.PrimaryKey(\"PK_cs_PageComment\", x => x.Id);\n                    table.ForeignKey(\n                        name: \"FK_cs_PageComment_cs_Page_PageEntityId\",\n                        column: x => x.PageEntityId,\n                        principalTable: \"cs_Page\",\n                        principalColumn: \"Id\",\n                        onDelete: ReferentialAction.Restrict);\n                });\n\n            migrationBuilder.CreateTable(\n                name: \"cs_PostComment\",\n                columns: table => new\n                {\n                    Id = table.Column<string>(maxLength: 36, nullable: false),\n                    Author = table.Column<string>(maxLength: 255, nullable: true),\n                    Content = table.Column<string>(nullable: true),\n                    Email = table.Column<string>(maxLength: 100, nullable: true),\n                    Ip = table.Column<string>(maxLength: 100, nullable: true),\n                    IsAdmin = table.Column<bool>(nullable: false),\n                    IsApproved = table.Column<bool>(nullable: false),\n                    PostEntityId = table.Column<string>(maxLength: 36, nullable: true),\n                    ProjectId = table.Column<string>(maxLength: 36, nullable: false),\n                    PubDate = table.Column<DateTime>(nullable: false),\n                    UserAgent = table.Column<string>(maxLength: 255, nullable: true),\n                    Website = table.Column<string>(maxLength: 255, nullable: true)\n                },\n                constraints: table =>\n                {\n                    table.PrimaryKey(\"PK_cs_PostComment\", x => x.Id);\n                    table.ForeignKey(\n                        name: \"FK_cs_PostComment_cs_Post_PostEntityId\",\n                        column: x => x.PostEntityId,\n                        principalTable: \"cs_Post\",\n                        principalColumn: \"Id\",\n                        onDelete: ReferentialAction.Restrict);\n                });\n\n            migrationBuilder.CreateIndex(\n                name: \"IX_cs_PageCategory_PageEntityId\",\n                table: \"cs_PageCategory\",\n                column: \"PageEntityId\");\n\n            migrationBuilder.CreateIndex(\n                name: \"IX_cs_PageCategory_ProjectId\",\n                table: \"cs_PageCategory\",\n                column: \"ProjectId\");\n\n            migrationBuilder.CreateIndex(\n                name: \"IX_cs_PageCategory_Value\",\n                table: \"cs_PageCategory\",\n                column: \"Value\");\n\n            migrationBuilder.CreateIndex(\n                name: \"IX_cs_PageComment_PageEntityId\",\n                table: \"cs_PageComment\",\n                column: \"PageEntityId\");\n\n            migrationBuilder.CreateIndex(\n                name: \"IX_cs_PageComment_ProjectId\",\n                table: \"cs_PageComment\",\n                column: \"ProjectId\");\n\n            migrationBuilder.CreateIndex(\n                name: \"IX_cs_Page_ParentId\",\n                table: \"cs_Page\",\n                column: \"ParentId\");\n\n            migrationBuilder.CreateIndex(\n                name: \"IX_cs_Page_ProjectId\",\n                table: \"cs_Page\",\n                column: \"ProjectId\");\n\n            migrationBuilder.CreateIndex(\n                name: \"IX_cs_PostCategory_PostEntityId\",\n                table: \"cs_PostCategory\",\n                column: \"PostEntityId\");\n\n            migrationBuilder.CreateIndex(\n                name: \"IX_cs_PostCategory_ProjectId\",\n                table: \"cs_PostCategory\",\n                column: \"ProjectId\");\n\n            migrationBuilder.CreateIndex(\n                name: \"IX_cs_PostCategory_Value\",\n                table: \"cs_PostCategory\",\n                column: \"Value\");\n\n            migrationBuilder.CreateIndex(\n                name: \"IX_cs_PostComment_PostEntityId\",\n                table: \"cs_PostComment\",\n                column: \"PostEntityId\");\n\n            migrationBuilder.CreateIndex(\n                name: \"IX_cs_PostComment_ProjectId\",\n                table: \"cs_PostComment\",\n                column: \"ProjectId\");\n\n            migrationBuilder.CreateIndex(\n                name: \"IX_cs_Post_BlogId\",\n                table: \"cs_Post\",\n                column: \"BlogId\");\n\n            migrationBuilder.CreateIndex(\n                name: \"IX_cs_Post_Slug\",\n                table: \"cs_Post\",\n                column: \"Slug\");\n        }\n\n        protected override void Down(MigrationBuilder migrationBuilder)\n        {\n            migrationBuilder.DropTable(\n                name: \"cs_ContentProject\");\n\n            migrationBuilder.DropTable(\n                name: \"cs_PageCategory\");\n\n            migrationBuilder.DropTable(\n                name: \"cs_PageComment\");\n\n            migrationBuilder.DropTable(\n                name: \"cs_PostCategory\");\n\n            migrationBuilder.DropTable(\n                name: \"cs_PostComment\");\n\n            migrationBuilder.DropTable(\n                name: \"cs_Page\");\n\n            migrationBuilder.DropTable(\n                name: \"cs_Post\");\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.MSSQL/Migrations/20170108141354_AddMenuOnlyProp.Designer.cs",
    "content": "﻿using System;\nusing Microsoft.EntityFrameworkCore;\nusing Microsoft.EntityFrameworkCore.Infrastructure;\nusing Microsoft.EntityFrameworkCore.Metadata;\nusing Microsoft.EntityFrameworkCore.Migrations;\nusing cloudscribe.SimpleContent.Storage.EFCore.MSSQL;\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.MSSQL.Migrations\n{\n    [DbContext(typeof(SimpleContentDbContext))]\n    [Migration(\"20170108141354_AddMenuOnlyProp\")]\n    partial class AddMenuOnlyProp\n    {\n        protected override void BuildTargetModel(ModelBuilder modelBuilder)\n        {\n            modelBuilder\n                .HasAnnotation(\"ProductVersion\", \"1.1.0-rtm-22752\")\n                .HasAnnotation(\"SqlServer:ValueGenerationStrategy\", SqlServerValueGenerationStrategy.IdentityColumn);\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Models.ProjectSettings\", b =>\n            {\n                b.Property<string>(\"Id\")\n                    .HasMaxLength(36);\n\n                b.Property<bool>(\"AddBlogToPagesTree\")\n                    .ValueGeneratedOnAdd()\n                    .HasColumnType(\"bit\")\n                    .HasDefaultValue(true);\n\n                b.Property<bool>(\"BlogMenuLinksToNewestPost\")\n                    .ValueGeneratedOnAdd()\n                    .HasColumnType(\"bit\")\n                    .HasDefaultValue(false);\n\n                b.Property<string>(\"BlogPageNavComponentVisibility\")\n                    .HasMaxLength(255);\n\n                b.Property<int>(\"BlogPagePosition\");\n\n                b.Property<string>(\"BlogPageText\")\n                    .HasMaxLength(255);\n\n                b.Property<string>(\"CdnUrl\")\n                    .HasMaxLength(255);\n\n                b.Property<string>(\"ChannelCategoriesCsv\")\n                    .HasMaxLength(255);\n\n                b.Property<string>(\"ChannelRating\")\n                    .HasMaxLength(100);\n\n                b.Property<int>(\"ChannelTimeToLive\");\n\n                b.Property<string>(\"CommentNotificationEmail\")\n                    .HasMaxLength(100);\n\n                b.Property<string>(\"CopyrightNotice\")\n                    .HasMaxLength(255);\n\n                b.Property<int>(\"DaysToComment\");\n\n                b.Property<string>(\"DefaultPageSlug\")\n                    .HasMaxLength(255);\n\n                b.Property<string>(\"Description\");\n\n                b.Property<string>(\"EmailFromAddress\")\n                    .HasMaxLength(100);\n\n                b.Property<string>(\"Image\")\n                    .HasMaxLength(255);\n\n                b.Property<bool>(\"IncludePubDateInPostUrls\")\n                    .ValueGeneratedOnAdd()\n                    .HasColumnType(\"bit\")\n                    .HasDefaultValue(true);\n\n                b.Property<string>(\"LanguageCode\")\n                    .HasMaxLength(10);\n\n                b.Property<string>(\"LocalMediaVirtualPath\")\n                    .HasMaxLength(255);\n\n                b.Property<string>(\"ManagingEditorEmail\")\n                    .HasMaxLength(100);\n\n                b.Property<bool>(\"ModerateComments\")\n                    .ValueGeneratedOnAdd()\n                    .HasColumnType(\"bit\")\n                    .HasDefaultValue(true);\n\n                b.Property<int>(\"PostsPerPage\");\n\n                b.Property<string>(\"PubDateFormat\")\n                    .HasMaxLength(75);\n\n                b.Property<string>(\"RecaptchaPrivateKey\")\n                    .HasMaxLength(255);\n\n                b.Property<string>(\"RecaptchaPublicKey\")\n                    .HasMaxLength(255);\n\n                b.Property<string>(\"RemoteFeedProcessorUseAgentFragment\")\n                    .HasMaxLength(255);\n\n                b.Property<string>(\"RemoteFeedUrl\")\n                    .HasMaxLength(255);\n\n                b.Property<bool>(\"ShowTitle\")\n                    .ValueGeneratedOnAdd()\n                    .HasColumnType(\"bit\")\n                    .HasDefaultValue(false);\n\n                b.Property<string>(\"SmtpPassword\");\n\n                b.Property<int>(\"SmtpPort\");\n\n                b.Property<string>(\"SmtpPreferredEncoding\")\n                    .HasMaxLength(20);\n\n                b.Property<bool>(\"SmtpRequiresAuth\")\n                    .ValueGeneratedOnAdd()\n                    .HasColumnType(\"bit\")\n                    .HasDefaultValue(false);\n\n                b.Property<string>(\"SmtpServer\")\n                    .HasMaxLength(100);\n\n                b.Property<bool>(\"SmtpUseSsl\")\n                    .ValueGeneratedOnAdd()\n                    .HasColumnType(\"bit\")\n                    .HasDefaultValue(false);\n\n                b.Property<string>(\"SmtpUser\")\n                    .HasMaxLength(500);\n\n                b.Property<string>(\"TimeZoneId\")\n                    .HasMaxLength(100);\n\n                b.Property<string>(\"Title\")\n                    .HasMaxLength(255);\n\n                b.Property<bool>(\"UseDefaultPageAsRootNode\")\n                    .ValueGeneratedOnAdd()\n                    .HasColumnType(\"bit\")\n                    .HasDefaultValue(true);\n\n                b.Property<bool>(\"UseMetaDescriptionInFeed\")\n                    .ValueGeneratedOnAdd()\n                    .HasColumnType(\"bit\")\n                    .HasDefaultValue(false);\n\n                b.Property<string>(\"WebmasterEmail\")\n                    .HasMaxLength(100);\n\n                b.HasKey(\"Id\");\n\n                b.ToTable(\"cs_ContentProject\");\n\n\n            });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageCategory\", b =>\n            {\n                b.Property<string>(\"Value\")\n                    .HasMaxLength(50);\n\n                b.Property<string>(\"PageEntityId\")\n                    .HasMaxLength(36);\n\n                b.Property<string>(\"ProjectId\")\n                    .IsRequired()\n                    .HasMaxLength(36);\n\n                b.HasKey(\"Value\", \"PageEntityId\");\n\n                b.HasIndex(\"PageEntityId\");\n\n                b.HasIndex(\"ProjectId\");\n\n                b.HasIndex(\"Value\");\n\n                b.ToTable(\"cs_PageCategory\");\n\n            });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n            {\n                b.Property<string>(\"Id\")\n                    .HasMaxLength(36);\n\n                b.Property<string>(\"Author\")\n                    .HasMaxLength(255);\n\n                b.Property<string>(\"Content\");\n\n                b.Property<string>(\"Email\")\n                    .HasMaxLength(100);\n\n                b.Property<string>(\"Ip\")\n                    .HasMaxLength(100);\n\n                b.Property<bool>(\"IsAdmin\");\n\n                b.Property<bool>(\"IsApproved\");\n\n                b.Property<string>(\"PageEntityId\")\n                    .HasMaxLength(36);\n\n                b.Property<string>(\"ProjectId\")\n                    .IsRequired()\n                    .HasMaxLength(36);\n\n                b.Property<DateTime>(\"PubDate\");\n\n                b.Property<string>(\"UserAgent\")\n                    .HasMaxLength(255);\n\n                b.Property<string>(\"Website\")\n                    .HasMaxLength(255);\n\n                b.HasKey(\"Id\");\n\n                b.HasIndex(\"PageEntityId\");\n\n                b.HasIndex(\"ProjectId\");\n\n                b.ToTable(\"cs_PageComment\");\n\n\n            });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\", b =>\n            {\n                b.Property<string>(\"Id\")\n                    .HasMaxLength(36);\n\n                b.Property<string>(\"Author\")\n                    .HasMaxLength(255);\n\n                b.Property<string>(\"CategoriesCsv\")\n                   .HasMaxLength(500);\n\n                b.Property<string>(\"Content\");\n\n                b.Property<bool>(\"IsPublished\")\n                    .ValueGeneratedOnAdd()\n                    .HasColumnType(\"bit\")\n                    .HasDefaultValue(true);\n\n                b.Property<DateTime>(\"LastModified\");\n\n                b.Property<bool>(\"MenuOnly\")\n                    .ValueGeneratedOnAdd()\n                    .HasColumnType(\"bit\")\n                    .HasDefaultValue(false);\n\n                b.Property<string>(\"MetaDescription\")\n                    .HasMaxLength(500);\n\n                b.Property<int>(\"PageOrder\");\n\n                b.Property<string>(\"ParentId\")\n                    .HasMaxLength(36);\n\n                b.Property<string>(\"ParentSlug\")\n                    .HasMaxLength(255);\n\n                b.Property<string>(\"ProjectId\")\n                    .IsRequired()\n                    .HasMaxLength(36);\n\n                b.Property<DateTime>(\"PubDate\");\n\n                b.Property<bool>(\"ShowCategories\")\n                    .ValueGeneratedOnAdd()\n                    .HasColumnType(\"bit\")\n                    .HasDefaultValue(false);\n\n                b.Property<bool>(\"ShowComments\")\n                    .ValueGeneratedOnAdd()\n                    .HasColumnType(\"bit\")\n                    .HasDefaultValue(false);\n\n                b.Property<bool>(\"ShowHeading\")\n                    .ValueGeneratedOnAdd()\n                   .HasColumnType(\"bit\")\n                    .HasDefaultValue(true);\n\n                b.Property<bool>(\"ShowLastModified\")\n                    .ValueGeneratedOnAdd()\n                    .HasColumnType(\"bit\")\n                    .HasDefaultValue(false);\n\n                b.Property<bool>(\"ShowPubDate\")\n                    .ValueGeneratedOnAdd()\n                    .HasColumnType(\"bit\")\n                    .HasDefaultValue(false);\n\n                b.Property<string>(\"Slug\")\n                    .IsRequired()\n                    .HasMaxLength(255);\n\n                b.Property<string>(\"Title\")\n                    .IsRequired()\n                    .HasMaxLength(255);\n\n                b.Property<string>(\"ViewRoles\");\n\n                b.HasKey(\"Id\");\n\n                b.HasIndex(\"ParentId\");\n\n                b.HasIndex(\"ProjectId\");\n\n                b.ToTable(\"cs_Page\");\n\n\n            });\n\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostCategory\", b =>\n            {\n                b.Property<string>(\"Value\")\n                    .HasMaxLength(50);\n\n                b.Property<string>(\"PostEntityId\")\n                    .HasMaxLength(36);\n\n                b.Property<string>(\"ProjectId\")\n                    .IsRequired()\n                    .HasMaxLength(36);\n\n                b.HasKey(\"Value\", \"PostEntityId\");\n\n                b.HasIndex(\"PostEntityId\");\n\n                b.HasIndex(\"ProjectId\");\n\n                b.HasIndex(\"Value\");\n\n                b.ToTable(\"cs_PostCategory\");\n\n            });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n            {\n                b.Property<string>(\"Id\")\n                    .HasMaxLength(36);\n\n                b.Property<string>(\"Author\")\n                    .HasMaxLength(255);\n\n                b.Property<string>(\"Content\");\n\n                b.Property<string>(\"Email\")\n                    .HasMaxLength(100);\n\n                b.Property<string>(\"Ip\")\n                    .HasMaxLength(100);\n\n                b.Property<bool>(\"IsAdmin\");\n\n                b.Property<bool>(\"IsApproved\");\n\n                b.Property<string>(\"PostEntityId\")\n                    .HasMaxLength(36);\n\n                b.Property<string>(\"ProjectId\")\n                    .IsRequired()\n                    .HasMaxLength(36);\n\n                b.Property<DateTime>(\"PubDate\");\n\n                b.Property<string>(\"UserAgent\")\n                    .HasMaxLength(255);\n\n                b.Property<string>(\"Website\")\n                    .HasMaxLength(255);\n\n                b.HasKey(\"Id\");\n\n                b.HasIndex(\"PostEntityId\");\n\n                b.HasIndex(\"ProjectId\");\n\n                b.ToTable(\"cs_PostComment\");\n\n\n            });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\", b =>\n            {\n                b.Property<string>(\"Id\")\n                    .HasMaxLength(36);\n\n                b.Property<string>(\"Author\")\n                    .HasMaxLength(255);\n\n                b.Property<string>(\"BlogId\")\n                    .IsRequired()\n                    .HasMaxLength(36);\n\n                b.Property<string>(\"CategoriesCsv\")\n                    .HasMaxLength(500);\n\n                b.Property<string>(\"Content\");\n\n                b.Property<bool>(\"IsPublished\")\n                    .ValueGeneratedOnAdd()\n                    .HasColumnType(\"bit\")\n                    .HasDefaultValue(true);\n\n                b.Property<DateTime>(\"LastModified\");\n\n                b.Property<string>(\"MetaDescription\")\n                    .HasMaxLength(500);\n\n                b.Property<DateTime>(\"PubDate\");\n\n                b.Property<string>(\"Slug\")\n                    .IsRequired()\n                    .HasMaxLength(255);\n\n                b.Property<string>(\"Title\")\n                    .IsRequired()\n                    .HasMaxLength(255);\n\n                b.HasKey(\"Id\");\n\n                b.HasIndex(\"BlogId\");\n\n                b.HasIndex(\"Slug\");\n\n                b.ToTable(\"cs_Post\");\n\n\n            });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n            {\n                b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\")\n                    .WithMany(\"PageComments\")\n                    .HasForeignKey(\"PageEntityId\");\n            });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n            {\n                b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\")\n                    .WithMany(\"PostComments\")\n                    .HasForeignKey(\"PostEntityId\");\n            });\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.MSSQL/Migrations/20170108141354_AddMenuOnlyProp.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing Microsoft.EntityFrameworkCore.Migrations;\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.MSSQL.Migrations\n{\n    public partial class AddMenuOnlyProp : Migration\n    {\n        protected override void Up(MigrationBuilder migrationBuilder)\n        {\n            migrationBuilder.AddColumn<bool>(\n                name: \"MenuOnly\",\n                table: \"cs_Page\",\n                type: \"bit\",\n                nullable: false,\n                defaultValue: false);\n        }\n\n        protected override void Down(MigrationBuilder migrationBuilder)\n        {\n            migrationBuilder.DropColumn(\n                name: \"MenuOnly\",\n                table: \"cs_Page\");\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.MSSQL/Migrations/20170301144919_changes20170301.Designer.cs",
    "content": "﻿using System;\nusing Microsoft.EntityFrameworkCore;\nusing Microsoft.EntityFrameworkCore.Infrastructure;\nusing Microsoft.EntityFrameworkCore.Metadata;\nusing Microsoft.EntityFrameworkCore.Migrations;\nusing cloudscribe.SimpleContent.Storage.EFCore.MSSQL;\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.MSSQL.Migrations\n{\n    [DbContext(typeof(SimpleContentDbContext))]\n    [Migration(\"20170301144919_changes20170301\")]\n    partial class changes20170301\n    {\n        protected override void BuildTargetModel(ModelBuilder modelBuilder)\n        {\n            modelBuilder\n                .HasAnnotation(\"ProductVersion\", \"1.1.0-rtm-22752\")\n                .HasAnnotation(\"SqlServer:ValueGenerationStrategy\", SqlServerValueGenerationStrategy.IdentityColumn);\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Models.ProjectSettings\", b =>\n            {\n                b.Property<string>(\"Id\")\n                    .HasMaxLength(36);\n\n                b.Property<bool>(\"AddBlogToPagesTree\")\n                    .ValueGeneratedOnAdd()\n                    .HasColumnType(\"bit\")\n                    .HasDefaultValue(true);\n\n                b.Property<bool>(\"BlogMenuLinksToNewestPost\")\n                    .ValueGeneratedOnAdd()\n                    .HasColumnType(\"bit\")\n                    .HasDefaultValue(false);\n\n                b.Property<string>(\"BlogPageNavComponentVisibility\")\n                    .HasMaxLength(255);\n\n                b.Property<int>(\"BlogPagePosition\");\n\n                b.Property<string>(\"BlogPageText\")\n                    .HasMaxLength(255);\n\n                b.Property<string>(\"CdnUrl\")\n                    .HasMaxLength(255);\n\n                b.Property<string>(\"ChannelCategoriesCsv\")\n                    .HasMaxLength(255);\n\n                b.Property<string>(\"ChannelRating\")\n                    .HasMaxLength(100);\n\n                b.Property<int>(\"ChannelTimeToLive\");\n\n                b.Property<string>(\"CommentNotificationEmail\")\n                    .HasMaxLength(100);\n\n                b.Property<string>(\"CopyrightNotice\")\n                    .HasMaxLength(255);\n\n                b.Property<int>(\"DaysToComment\");\n\n                b.Property<string>(\"DefaultPageSlug\")\n                    .HasMaxLength(255);\n\n                b.Property<string>(\"Description\");\n\n                b.Property<string>(\"EmailFromAddress\")\n                    .HasMaxLength(100);\n\n                b.Property<string>(\"Image\")\n                    .HasMaxLength(255);\n\n                b.Property<bool>(\"IncludePubDateInPostUrls\")\n                    .ValueGeneratedOnAdd()\n                    .HasColumnType(\"bit\")\n                    .HasDefaultValue(true);\n\n                b.Property<string>(\"LanguageCode\")\n                    .HasMaxLength(10);\n\n                b.Property<string>(\"LocalMediaVirtualPath\")\n                    .HasMaxLength(255);\n\n                b.Property<string>(\"ManagingEditorEmail\")\n                    .HasMaxLength(100);\n\n                b.Property<bool>(\"ModerateComments\")\n                    .ValueGeneratedOnAdd()\n                    .HasColumnType(\"bit\")\n                    .HasDefaultValue(true);\n\n                b.Property<int>(\"PostsPerPage\");\n\n                b.Property<string>(\"PubDateFormat\")\n                    .HasMaxLength(75);\n\n                b.Property<string>(\"Publisher\")\n                       .HasMaxLength(255);\n\n                b.Property<string>(\"PublisherLogoUrl\")\n                    .HasMaxLength(255);\n\n                b.Property<string>(\"RecaptchaPrivateKey\")\n                    .HasMaxLength(255);\n\n                b.Property<string>(\"RecaptchaPublicKey\")\n                    .HasMaxLength(255);\n\n                b.Property<string>(\"RemoteFeedProcessorUseAgentFragment\")\n                    .HasMaxLength(255);\n\n                b.Property<string>(\"RemoteFeedUrl\")\n                    .HasMaxLength(255);\n\n                b.Property<bool>(\"ShowTitle\")\n                    .ValueGeneratedOnAdd()\n                    .HasColumnType(\"bit\")\n                    .HasDefaultValue(false);\n\n                b.Property<string>(\"SmtpPassword\");\n\n                b.Property<int>(\"SmtpPort\");\n\n                b.Property<string>(\"SmtpPreferredEncoding\")\n                    .HasMaxLength(20);\n\n                b.Property<bool>(\"SmtpRequiresAuth\")\n                    .ValueGeneratedOnAdd()\n                    .HasColumnType(\"bit\")\n                    .HasDefaultValue(false);\n\n                b.Property<string>(\"SmtpServer\")\n                    .HasMaxLength(100);\n\n                b.Property<bool>(\"SmtpUseSsl\")\n                    .ValueGeneratedOnAdd()\n                    .HasColumnType(\"bit\")\n                    .HasDefaultValue(false);\n\n                b.Property<string>(\"SmtpUser\")\n                    .HasMaxLength(500);\n\n                b.Property<string>(\"TimeZoneId\")\n                    .HasMaxLength(100);\n\n                b.Property<string>(\"Title\")\n                    .HasMaxLength(255);\n\n                b.Property<bool>(\"UseDefaultPageAsRootNode\")\n                    .ValueGeneratedOnAdd()\n                    .HasColumnType(\"bit\")\n                    .HasDefaultValue(true);\n\n                b.Property<bool>(\"UseMetaDescriptionInFeed\")\n                    .ValueGeneratedOnAdd()\n                    .HasColumnType(\"bit\")\n                    .HasDefaultValue(false);\n\n                b.Property<string>(\"WebmasterEmail\")\n                    .HasMaxLength(100);\n\n                b.HasKey(\"Id\");\n\n                b.ToTable(\"cs_ContentProject\");\n\n\n            });\n\n\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageCategory\", b =>\n            {\n                b.Property<string>(\"Value\")\n                    .HasMaxLength(50);\n\n                b.Property<string>(\"PageEntityId\")\n                    .HasMaxLength(36);\n\n                b.Property<string>(\"ProjectId\")\n                    .IsRequired()\n                    .HasMaxLength(36);\n\n                b.HasKey(\"Value\", \"PageEntityId\");\n\n                b.HasIndex(\"PageEntityId\");\n\n                b.HasIndex(\"ProjectId\");\n\n                b.HasIndex(\"Value\");\n\n                b.ToTable(\"cs_PageCategory\");\n\n            });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n            {\n                b.Property<string>(\"Id\")\n                    .HasMaxLength(36);\n\n                b.Property<string>(\"Author\")\n                    .HasMaxLength(255);\n\n                b.Property<string>(\"Content\");\n\n                b.Property<string>(\"Email\")\n                    .HasMaxLength(100);\n\n                b.Property<string>(\"Ip\")\n                    .HasMaxLength(100);\n\n                b.Property<bool>(\"IsAdmin\");\n\n                b.Property<bool>(\"IsApproved\");\n\n                b.Property<string>(\"PageEntityId\")\n                    .HasMaxLength(36);\n\n                b.Property<string>(\"ProjectId\")\n                    .IsRequired()\n                    .HasMaxLength(36);\n\n                b.Property<DateTime>(\"PubDate\");\n\n                b.Property<string>(\"UserAgent\")\n                    .HasMaxLength(255);\n\n                b.Property<string>(\"Website\")\n                    .HasMaxLength(255);\n\n                b.HasKey(\"Id\");\n\n                b.HasIndex(\"PageEntityId\");\n\n                b.HasIndex(\"ProjectId\");\n\n                b.ToTable(\"cs_PageComment\");\n\n\n            });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\", b =>\n            {\n                b.Property<string>(\"Id\")\n                    .HasMaxLength(36);\n\n                b.Property<string>(\"Author\")\n                    .HasMaxLength(255);\n\n                b.Property<string>(\"CategoriesCsv\")\n                   .HasMaxLength(500);\n\n                b.Property<string>(\"Content\");\n\n                b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255);\n\n                b.Property<string>(\"ExternalUrl\")\n                    .HasMaxLength(255);\n\n                b.Property<bool>(\"IsPublished\")\n                    .ValueGeneratedOnAdd()\n                    .HasColumnType(\"bit\")\n                    .HasDefaultValue(true);\n\n                b.Property<DateTime>(\"LastModified\");\n\n                b.Property<bool>(\"MenuOnly\")\n                    .ValueGeneratedOnAdd()\n                    .HasColumnType(\"bit\")\n                    .HasDefaultValue(false);\n\n                b.Property<string>(\"MetaDescription\")\n                    .HasMaxLength(500);\n\n                b.Property<int>(\"PageOrder\");\n\n                b.Property<string>(\"ParentId\")\n                    .HasMaxLength(36);\n\n                b.Property<string>(\"ParentSlug\")\n                    .HasMaxLength(255);\n\n                b.Property<string>(\"ProjectId\")\n                    .IsRequired()\n                    .HasMaxLength(36);\n\n                b.Property<DateTime>(\"PubDate\");\n\n                b.Property<bool>(\"ShowCategories\")\n                    .ValueGeneratedOnAdd()\n                    .HasColumnType(\"bit\")\n                    .HasDefaultValue(false);\n\n                b.Property<bool>(\"ShowComments\")\n                    .ValueGeneratedOnAdd()\n                    .HasColumnType(\"bit\")\n                    .HasDefaultValue(false);\n\n                b.Property<bool>(\"ShowHeading\")\n                    .ValueGeneratedOnAdd()\n                   .HasColumnType(\"bit\")\n                    .HasDefaultValue(true);\n\n                b.Property<bool>(\"ShowLastModified\")\n                    .ValueGeneratedOnAdd()\n                    .HasColumnType(\"bit\")\n                    .HasDefaultValue(false);\n\n                b.Property<bool>(\"ShowMenu\")\n                    .ValueGeneratedOnAdd()\n                    .HasColumnType(\"bit\")\n                    .HasDefaultValue(false);\n\n                b.Property<bool>(\"ShowPubDate\")\n                    .ValueGeneratedOnAdd()\n                    .HasColumnType(\"bit\")\n                    .HasDefaultValue(false);\n\n                b.Property<string>(\"Slug\")\n                    .IsRequired()\n                    .HasMaxLength(255);\n\n                b.Property<string>(\"Title\")\n                    .IsRequired()\n                    .HasMaxLength(255);\n\n                b.Property<string>(\"ViewRoles\");\n\n                b.HasKey(\"Id\");\n\n                b.HasIndex(\"ParentId\");\n\n                b.HasIndex(\"ProjectId\");\n\n                b.ToTable(\"cs_Page\");\n\n\n            });\n\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostCategory\", b =>\n            {\n                b.Property<string>(\"Value\")\n                    .HasMaxLength(50);\n\n                b.Property<string>(\"PostEntityId\")\n                    .HasMaxLength(36);\n\n                b.Property<string>(\"ProjectId\")\n                    .IsRequired()\n                    .HasMaxLength(36);\n\n                b.HasKey(\"Value\", \"PostEntityId\");\n\n                b.HasIndex(\"PostEntityId\");\n\n                b.HasIndex(\"ProjectId\");\n\n                b.HasIndex(\"Value\");\n\n                b.ToTable(\"cs_PostCategory\");\n\n            });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n            {\n                b.Property<string>(\"Id\")\n                    .HasMaxLength(36);\n\n                b.Property<string>(\"Author\")\n                    .HasMaxLength(255);\n\n                b.Property<string>(\"Content\");\n\n                b.Property<string>(\"Email\")\n                    .HasMaxLength(100);\n\n                b.Property<string>(\"Ip\")\n                    .HasMaxLength(100);\n\n                b.Property<bool>(\"IsAdmin\");\n\n                b.Property<bool>(\"IsApproved\");\n\n                b.Property<string>(\"PostEntityId\")\n                    .HasMaxLength(36);\n\n                b.Property<string>(\"ProjectId\")\n                    .IsRequired()\n                    .HasMaxLength(36);\n\n                b.Property<DateTime>(\"PubDate\");\n\n                b.Property<string>(\"UserAgent\")\n                    .HasMaxLength(255);\n\n                b.Property<string>(\"Website\")\n                    .HasMaxLength(255);\n\n                b.HasKey(\"Id\");\n\n                b.HasIndex(\"PostEntityId\");\n\n                b.HasIndex(\"ProjectId\");\n\n                b.ToTable(\"cs_PostComment\");\n\n\n            });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\", b =>\n            {\n                b.Property<string>(\"Id\")\n                    .HasMaxLength(36);\n\n                b.Property<string>(\"Author\")\n                    .HasMaxLength(255);\n\n                b.Property<string>(\"BlogId\")\n                    .IsRequired()\n                    .HasMaxLength(36);\n\n                b.Property<string>(\"CategoriesCsv\")\n                    .HasMaxLength(500);\n\n                b.Property<string>(\"Content\");\n\n                b.Property<bool>(\"IsPublished\")\n                    .ValueGeneratedOnAdd()\n                    .HasColumnType(\"bit\")\n                    .HasDefaultValue(true);\n\n                b.Property<DateTime>(\"LastModified\");\n\n                b.Property<string>(\"MetaDescription\")\n                    .HasMaxLength(500);\n\n                b.Property<DateTime>(\"PubDate\");\n\n                b.Property<string>(\"Slug\")\n                    .IsRequired()\n                    .HasMaxLength(255);\n\n                b.Property<string>(\"Title\")\n                    .IsRequired()\n                    .HasMaxLength(255);\n\n                b.HasKey(\"Id\");\n\n                b.HasIndex(\"BlogId\");\n\n                b.HasIndex(\"Slug\");\n\n                b.ToTable(\"cs_Post\");\n\n\n            });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n            {\n                b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\")\n                    .WithMany(\"PageComments\")\n                    .HasForeignKey(\"PageEntityId\");\n            });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n            {\n                b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\")\n                    .WithMany(\"PostComments\")\n                    .HasForeignKey(\"PostEntityId\");\n            });\n\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.MSSQL/Migrations/20170301144919_changes20170301.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing Microsoft.EntityFrameworkCore.Migrations;\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.MSSQL.Migrations\n{\n    public partial class changes20170301 : Migration\n    {\n        protected override void Up(MigrationBuilder migrationBuilder)\n        {\n            migrationBuilder.AddColumn<string>(\n                name: \"CorrelationKey\",\n                table: \"cs_Page\",\n                maxLength: 255,\n                nullable: true);\n\n            migrationBuilder.AddColumn<string>(\n                name: \"ExternalUrl\",\n                table: \"cs_Page\",\n                maxLength: 255,\n                nullable: true);\n\n            migrationBuilder.AddColumn<bool>(\n                name: \"ShowMenu\",\n                table: \"cs_Page\",\n                type: \"bit\",\n                nullable: false,\n                defaultValue: false);\n\n            migrationBuilder.AddColumn<string>(\n                name: \"Publisher\",\n                table: \"cs_ContentProject\",\n                maxLength: 255,\n                nullable: true);\n\n            migrationBuilder.AddColumn<string>(\n                name: \"PublisherLogoUrl\",\n                table: \"cs_ContentProject\",\n                maxLength: 255,\n                nullable: true);\n\n            migrationBuilder.CreateIndex(\n                name: \"IX_cs_Page_CorrelationKey\",\n                table: \"cs_Page\",\n                column: \"CorrelationKey\");\n        }\n\n        protected override void Down(MigrationBuilder migrationBuilder)\n        {\n            migrationBuilder.DropIndex(\n                name: \"IX_cs_Page_CorrelationKey\",\n                table: \"cs_Page\");\n\n            migrationBuilder.DropColumn(\n                name: \"CorrelationKey\",\n                table: \"cs_Page\");\n\n            migrationBuilder.DropColumn(\n                name: \"ExternalUrl\",\n                table: \"cs_Page\");\n\n            migrationBuilder.DropColumn(\n                name: \"ShowMenu\",\n                table: \"cs_Page\");\n\n            migrationBuilder.DropColumn(\n                name: \"Publisher\",\n                table: \"cs_ContentProject\");\n\n            migrationBuilder.DropColumn(\n                name: \"PublisherLogoUrl\",\n                table: \"cs_ContentProject\");\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.MSSQL/Migrations/20170308205858_changes20170308.Designer.cs",
    "content": "﻿using System;\nusing Microsoft.EntityFrameworkCore;\nusing Microsoft.EntityFrameworkCore.Infrastructure;\nusing Microsoft.EntityFrameworkCore.Metadata;\nusing Microsoft.EntityFrameworkCore.Migrations;\nusing cloudscribe.SimpleContent.Storage.EFCore.MSSQL;\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.MSSQL.Migrations\n{\n    [DbContext(typeof(SimpleContentDbContext))]\n    [Migration(\"20170308205858_changes20170308\")]\n    partial class changes20170308\n    {\n        protected override void BuildTargetModel(ModelBuilder modelBuilder)\n        {\n            modelBuilder\n                .HasAnnotation(\"ProductVersion\", \"1.1.1\")\n                .HasAnnotation(\"SqlServer:ValueGenerationStrategy\", SqlServerValueGenerationStrategy.IdentityColumn);\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Models.ProjectSettings\", b =>\n            {\n                b.Property<string>(\"Id\")\n                    .HasMaxLength(36);\n\n                b.Property<bool>(\"AddBlogToPagesTree\")\n                    .ValueGeneratedOnAdd()\n                    .HasColumnType(\"bit\")\n                    .HasDefaultValue(true);\n\n                b.Property<bool>(\"BlogMenuLinksToNewestPost\")\n                    .ValueGeneratedOnAdd()\n                    .HasColumnType(\"bit\")\n                    .HasDefaultValue(false);\n\n                b.Property<string>(\"BlogPageNavComponentVisibility\")\n                    .HasMaxLength(255);\n\n                b.Property<int>(\"BlogPagePosition\");\n\n                b.Property<string>(\"BlogPageText\")\n                    .HasMaxLength(255);\n\n                b.Property<string>(\"CdnUrl\")\n                    .HasMaxLength(255);\n\n                b.Property<string>(\"ChannelCategoriesCsv\")\n                    .HasMaxLength(255);\n\n                b.Property<string>(\"ChannelRating\")\n                    .HasMaxLength(100);\n\n                b.Property<int>(\"ChannelTimeToLive\");\n\n                b.Property<string>(\"CommentNotificationEmail\")\n                    .HasMaxLength(100);\n\n                b.Property<string>(\"CopyrightNotice\")\n                    .HasMaxLength(255);\n\n                b.Property<int>(\"DaysToComment\");\n\n                b.Property<string>(\"DefaultPageSlug\")\n                    .HasMaxLength(255);\n\n                b.Property<string>(\"Description\");\n\n                b.Property<string>(\"DisqusShortName\")\n                        .HasMaxLength(100);\n\n                b.Property<string>(\"EmailFromAddress\")\n                    .HasMaxLength(100);\n\n                b.Property<string>(\"Image\")\n                    .HasMaxLength(255);\n\n                b.Property<bool>(\"IncludePubDateInPostUrls\")\n                    .ValueGeneratedOnAdd()\n                    .HasColumnType(\"bit\")\n                    .HasDefaultValue(true);\n\n                b.Property<string>(\"LanguageCode\")\n                    .HasMaxLength(10);\n\n                b.Property<string>(\"LocalMediaVirtualPath\")\n                    .HasMaxLength(255);\n\n                b.Property<string>(\"ManagingEditorEmail\")\n                    .HasMaxLength(100);\n\n                b.Property<bool>(\"ModerateComments\")\n                    .ValueGeneratedOnAdd()\n                    .HasColumnType(\"bit\")\n                    .HasDefaultValue(true);\n\n                b.Property<int>(\"PostsPerPage\");\n\n                b.Property<string>(\"PubDateFormat\")\n                    .HasMaxLength(75);\n\n                b.Property<string>(\"Publisher\")\n                       .HasMaxLength(255);\n\n                b.Property<string>(\"PublisherLogoHeight\")\n                         .HasMaxLength(20);\n\n                b.Property<string>(\"PublisherLogoUrl\")\n                    .HasMaxLength(255);\n\n                b.Property<string>(\"PublisherLogoWidth\")\n                    .HasMaxLength(20);\n\n                b.Property<string>(\"RecaptchaPrivateKey\")\n                    .HasMaxLength(255);\n\n                b.Property<string>(\"RecaptchaPublicKey\")\n                    .HasMaxLength(255);\n\n                b.Property<string>(\"RemoteFeedProcessorUseAgentFragment\")\n                    .HasMaxLength(255);\n\n                b.Property<string>(\"RemoteFeedUrl\")\n                    .HasMaxLength(255);\n\n                b.Property<bool>(\"ShowTitle\")\n                    .ValueGeneratedOnAdd()\n                    .HasColumnType(\"bit\")\n                    .HasDefaultValue(false);\n\n                b.Property<string>(\"SmtpPassword\");\n\n                b.Property<int>(\"SmtpPort\");\n\n                b.Property<string>(\"SmtpPreferredEncoding\")\n                    .HasMaxLength(20);\n\n                b.Property<bool>(\"SmtpRequiresAuth\")\n                    .ValueGeneratedOnAdd()\n                    .HasColumnType(\"bit\")\n                    .HasDefaultValue(false);\n\n                b.Property<string>(\"SmtpServer\")\n                    .HasMaxLength(100);\n\n                b.Property<bool>(\"SmtpUseSsl\")\n                    .ValueGeneratedOnAdd()\n                    .HasColumnType(\"bit\")\n                    .HasDefaultValue(false);\n\n                b.Property<string>(\"SmtpUser\")\n                    .HasMaxLength(500);\n\n                b.Property<string>(\"TimeZoneId\")\n                    .HasMaxLength(100);\n\n                b.Property<string>(\"Title\")\n                    .HasMaxLength(255);\n\n                b.Property<bool>(\"UseDefaultPageAsRootNode\")\n                    .ValueGeneratedOnAdd()\n                    .HasColumnType(\"bit\")\n                    .HasDefaultValue(true);\n\n                b.Property<bool>(\"UseMetaDescriptionInFeed\")\n                    .ValueGeneratedOnAdd()\n                    .HasColumnType(\"bit\")\n                    .HasDefaultValue(false);\n\n                b.Property<string>(\"WebmasterEmail\")\n                    .HasMaxLength(100);\n\n                b.HasKey(\"Id\");\n\n                b.ToTable(\"cs_ContentProject\");\n\n\n            });\n\n\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageCategory\", b =>\n            {\n                b.Property<string>(\"Value\")\n                    .HasMaxLength(50);\n\n                b.Property<string>(\"PageEntityId\")\n                    .HasMaxLength(36);\n\n                b.Property<string>(\"ProjectId\")\n                    .IsRequired()\n                    .HasMaxLength(36);\n\n                b.HasKey(\"Value\", \"PageEntityId\");\n\n                b.HasIndex(\"PageEntityId\");\n\n                b.HasIndex(\"ProjectId\");\n\n                b.HasIndex(\"Value\");\n\n                b.ToTable(\"cs_PageCategory\");\n\n            });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n            {\n                b.Property<string>(\"Id\")\n                    .HasMaxLength(36);\n\n                b.Property<string>(\"Author\")\n                    .HasMaxLength(255);\n\n                b.Property<string>(\"Content\");\n\n                b.Property<string>(\"Email\")\n                    .HasMaxLength(100);\n\n                b.Property<string>(\"Ip\")\n                    .HasMaxLength(100);\n\n                b.Property<bool>(\"IsAdmin\");\n\n                b.Property<bool>(\"IsApproved\");\n\n                b.Property<string>(\"PageEntityId\")\n                    .HasMaxLength(36);\n\n                b.Property<string>(\"ProjectId\")\n                    .IsRequired()\n                    .HasMaxLength(36);\n\n                b.Property<DateTime>(\"PubDate\");\n\n                b.Property<string>(\"UserAgent\")\n                    .HasMaxLength(255);\n\n                b.Property<string>(\"Website\")\n                    .HasMaxLength(255);\n\n                b.HasKey(\"Id\");\n\n                b.HasIndex(\"PageEntityId\");\n\n                b.HasIndex(\"ProjectId\");\n\n                b.ToTable(\"cs_PageComment\");\n\n\n            });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\", b =>\n            {\n                b.Property<string>(\"Id\")\n                    .HasMaxLength(36);\n\n                b.Property<string>(\"Author\")\n                    .HasMaxLength(255);\n\n                b.Property<string>(\"CategoriesCsv\")\n                   .HasMaxLength(500);\n\n                b.Property<string>(\"Content\");\n\n                b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255);\n\n                b.Property<string>(\"ExternalUrl\")\n                    .HasMaxLength(255);\n\n                b.Property<bool>(\"IsPublished\")\n                    .ValueGeneratedOnAdd()\n                    .HasColumnType(\"bit\")\n                    .HasDefaultValue(true);\n\n                b.Property<DateTime>(\"LastModified\");\n\n                b.Property<bool>(\"MenuOnly\")\n                    .ValueGeneratedOnAdd()\n                    .HasColumnType(\"bit\")\n                    .HasDefaultValue(false);\n\n                b.Property<string>(\"MetaDescription\")\n                    .HasMaxLength(500);\n\n                b.Property<int>(\"PageOrder\");\n\n                b.Property<string>(\"ParentId\")\n                    .HasMaxLength(36);\n\n                b.Property<string>(\"ParentSlug\")\n                    .HasMaxLength(255);\n\n                b.Property<string>(\"ProjectId\")\n                    .IsRequired()\n                    .HasMaxLength(36);\n\n                b.Property<DateTime>(\"PubDate\");\n\n                b.Property<bool>(\"ShowCategories\")\n                    .ValueGeneratedOnAdd()\n                    .HasColumnType(\"bit\")\n                    .HasDefaultValue(false);\n\n                b.Property<bool>(\"ShowComments\")\n                    .ValueGeneratedOnAdd()\n                    .HasColumnType(\"bit\")\n                    .HasDefaultValue(false);\n\n                b.Property<bool>(\"ShowHeading\")\n                    .ValueGeneratedOnAdd()\n                   .HasColumnType(\"bit\")\n                    .HasDefaultValue(true);\n\n                b.Property<bool>(\"ShowLastModified\")\n                    .ValueGeneratedOnAdd()\n                    .HasColumnType(\"bit\")\n                    .HasDefaultValue(false);\n\n                b.Property<bool>(\"ShowMenu\")\n                    .ValueGeneratedOnAdd()\n                    .HasColumnType(\"bit\")\n                    .HasDefaultValue(false);\n\n                b.Property<bool>(\"ShowPubDate\")\n                    .ValueGeneratedOnAdd()\n                    .HasColumnType(\"bit\")\n                    .HasDefaultValue(false);\n\n                b.Property<string>(\"Slug\")\n                    .IsRequired()\n                    .HasMaxLength(255);\n\n                b.Property<string>(\"Title\")\n                    .IsRequired()\n                    .HasMaxLength(255);\n\n                b.Property<string>(\"ViewRoles\");\n\n                b.HasKey(\"Id\");\n\n                b.HasIndex(\"ParentId\");\n\n                b.HasIndex(\"ProjectId\");\n\n                b.ToTable(\"cs_Page\");\n\n\n            });\n\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostCategory\", b =>\n            {\n                b.Property<string>(\"Value\")\n                    .HasMaxLength(50);\n\n                b.Property<string>(\"PostEntityId\")\n                    .HasMaxLength(36);\n\n                b.Property<string>(\"ProjectId\")\n                    .IsRequired()\n                    .HasMaxLength(36);\n\n                b.HasKey(\"Value\", \"PostEntityId\");\n\n                b.HasIndex(\"PostEntityId\");\n\n                b.HasIndex(\"ProjectId\");\n\n                b.HasIndex(\"Value\");\n\n                b.ToTable(\"cs_PostCategory\");\n\n            });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n            {\n                b.Property<string>(\"Id\")\n                    .HasMaxLength(36);\n\n                b.Property<string>(\"Author\")\n                    .HasMaxLength(255);\n\n                b.Property<string>(\"Content\");\n\n                b.Property<string>(\"Email\")\n                    .HasMaxLength(100);\n\n                b.Property<string>(\"Ip\")\n                    .HasMaxLength(100);\n\n                b.Property<bool>(\"IsAdmin\");\n\n                b.Property<bool>(\"IsApproved\");\n\n                b.Property<string>(\"PostEntityId\")\n                    .HasMaxLength(36);\n\n                b.Property<string>(\"ProjectId\")\n                    .IsRequired()\n                    .HasMaxLength(36);\n\n                b.Property<DateTime>(\"PubDate\");\n\n                b.Property<string>(\"UserAgent\")\n                    .HasMaxLength(255);\n\n                b.Property<string>(\"Website\")\n                    .HasMaxLength(255);\n\n                b.HasKey(\"Id\");\n\n                b.HasIndex(\"PostEntityId\");\n\n                b.HasIndex(\"ProjectId\");\n\n                b.ToTable(\"cs_PostComment\");\n\n\n            });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\", b =>\n            {\n                b.Property<string>(\"Id\")\n                    .HasMaxLength(36);\n\n                b.Property<string>(\"Author\")\n                    .HasMaxLength(255);\n\n                b.Property<string>(\"BlogId\")\n                    .IsRequired()\n                    .HasMaxLength(36);\n\n                b.Property<string>(\"CategoriesCsv\")\n                    .HasMaxLength(500);\n\n                b.Property<string>(\"Content\");\n\n                b.Property<bool>(\"IsPublished\")\n                    .ValueGeneratedOnAdd()\n                    .HasColumnType(\"bit\")\n                    .HasDefaultValue(true);\n\n                b.Property<DateTime>(\"LastModified\");\n\n                b.Property<string>(\"MetaDescription\")\n                    .HasMaxLength(500);\n\n                b.Property<DateTime>(\"PubDate\");\n\n                b.Property<string>(\"Slug\")\n                    .IsRequired()\n                    .HasMaxLength(255);\n\n                b.Property<string>(\"Title\")\n                    .IsRequired()\n                    .HasMaxLength(255);\n\n                b.HasKey(\"Id\");\n\n                b.HasIndex(\"BlogId\");\n\n                b.HasIndex(\"Slug\");\n\n                b.ToTable(\"cs_Post\");\n\n\n            });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n            {\n                b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\")\n                    .WithMany(\"PageComments\")\n                    .HasForeignKey(\"PageEntityId\");\n            });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n            {\n                b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\")\n                    .WithMany(\"PostComments\")\n                    .HasForeignKey(\"PostEntityId\");\n            });\n\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.MSSQL/Migrations/20170308205858_changes20170308.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing Microsoft.EntityFrameworkCore.Migrations;\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.MSSQL.Migrations\n{\n    public partial class changes20170308 : Migration\n    {\n        protected override void Up(MigrationBuilder migrationBuilder)\n        {\n            migrationBuilder.AddColumn<string>(\n                name: \"DisqusShortName\",\n                table: \"cs_ContentProject\",\n                maxLength: 100,\n                nullable: true);\n\n            migrationBuilder.AddColumn<string>(\n                name: \"PublisherLogoHeight\",\n                table: \"cs_ContentProject\",\n                maxLength: 20,\n                nullable: true);\n\n            migrationBuilder.AddColumn<string>(\n                name: \"PublisherLogoWidth\",\n                table: \"cs_ContentProject\",\n                maxLength: 20,\n                nullable: true);\n        }\n\n        protected override void Down(MigrationBuilder migrationBuilder)\n        {\n            migrationBuilder.DropColumn(\n                name: \"DisqusShortName\",\n                table: \"cs_ContentProject\");\n\n            migrationBuilder.DropColumn(\n                name: \"PublisherLogoHeight\",\n                table: \"cs_ContentProject\");\n\n            migrationBuilder.DropColumn(\n                name: \"PublisherLogoWidth\",\n                table: \"cs_ContentProject\");\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.MSSQL/Migrations/20170309130025_changes20170309.Designer.cs",
    "content": "﻿using System;\nusing Microsoft.EntityFrameworkCore;\nusing Microsoft.EntityFrameworkCore.Infrastructure;\nusing Microsoft.EntityFrameworkCore.Metadata;\nusing Microsoft.EntityFrameworkCore.Migrations;\nusing cloudscribe.SimpleContent.Storage.EFCore.MSSQL;\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.MSSQL.Migrations\n{\n    [DbContext(typeof(SimpleContentDbContext))]\n    [Migration(\"20170309130025_changes20170309\")]\n    partial class changes20170309\n    {\n        protected override void BuildTargetModel(ModelBuilder modelBuilder)\n        {\n            modelBuilder\n                .HasAnnotation(\"ProductVersion\", \"1.1.1\")\n                .HasAnnotation(\"SqlServer:ValueGenerationStrategy\", SqlServerValueGenerationStrategy.IdentityColumn);\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Models.ProjectSettings\", b =>\n            {\n                b.Property<string>(\"Id\")\n                    .HasMaxLength(36);\n\n                b.Property<bool>(\"AddBlogToPagesTree\")\n                    .ValueGeneratedOnAdd()\n                    .HasColumnType(\"bit\")\n                    .HasDefaultValue(true);\n\n                b.Property<bool>(\"BlogMenuLinksToNewestPost\")\n                    .ValueGeneratedOnAdd()\n                    .HasColumnType(\"bit\")\n                    .HasDefaultValue(false);\n\n                b.Property<string>(\"BlogPageNavComponentVisibility\")\n                    .HasMaxLength(255);\n\n                b.Property<int>(\"BlogPagePosition\");\n\n                b.Property<string>(\"BlogPageText\")\n                    .HasMaxLength(255);\n\n                b.Property<string>(\"CdnUrl\")\n                    .HasMaxLength(255);\n\n                b.Property<string>(\"ChannelCategoriesCsv\")\n                    .HasMaxLength(255);\n\n                b.Property<string>(\"ChannelRating\")\n                    .HasMaxLength(100);\n\n                b.Property<int>(\"ChannelTimeToLive\");\n\n                b.Property<string>(\"CommentNotificationEmail\")\n                    .HasMaxLength(100);\n\n                b.Property<string>(\"CopyrightNotice\")\n                    .HasMaxLength(255);\n\n                b.Property<int>(\"DaysToComment\");\n\n                b.Property<string>(\"DefaultPageSlug\")\n                    .HasMaxLength(255);\n\n                b.Property<string>(\"Description\");\n\n                b.Property<string>(\"DisqusShortName\")\n                        .HasMaxLength(100);\n\n                b.Property<string>(\"EmailFromAddress\")\n                    .HasMaxLength(100);\n\n                b.Property<string>(\"Image\")\n                    .HasMaxLength(255);\n\n                b.Property<bool>(\"IncludePubDateInPostUrls\")\n                    .ValueGeneratedOnAdd()\n                    .HasColumnType(\"bit\")\n                    .HasDefaultValue(true);\n\n                b.Property<string>(\"LanguageCode\")\n                    .HasMaxLength(10);\n\n                b.Property<string>(\"LocalMediaVirtualPath\")\n                    .HasMaxLength(255);\n\n                b.Property<string>(\"ManagingEditorEmail\")\n                    .HasMaxLength(100);\n\n                b.Property<bool>(\"ModerateComments\")\n                    .ValueGeneratedOnAdd()\n                    .HasColumnType(\"bit\")\n                    .HasDefaultValue(true);\n\n                b.Property<int>(\"PostsPerPage\");\n\n                b.Property<string>(\"PubDateFormat\")\n                    .HasMaxLength(75);\n\n                b.Property<string>(\"Publisher\")\n                       .HasMaxLength(255);\n\n                b.Property<string>(\"PublisherEntityType\")\n                        .HasMaxLength(50);\n\n                b.Property<string>(\"PublisherLogoHeight\")\n                         .HasMaxLength(20);\n\n                b.Property<string>(\"PublisherLogoUrl\")\n                    .HasMaxLength(255);\n\n                b.Property<string>(\"PublisherLogoWidth\")\n                    .HasMaxLength(20);\n\n                b.Property<string>(\"RecaptchaPrivateKey\")\n                    .HasMaxLength(255);\n\n                b.Property<string>(\"RecaptchaPublicKey\")\n                    .HasMaxLength(255);\n\n                b.Property<string>(\"RemoteFeedProcessorUseAgentFragment\")\n                    .HasMaxLength(255);\n\n                b.Property<string>(\"RemoteFeedUrl\")\n                    .HasMaxLength(255);\n\n                b.Property<bool>(\"ShowTitle\")\n                    .ValueGeneratedOnAdd()\n                    .HasColumnType(\"bit\")\n                    .HasDefaultValue(false);\n\n                b.Property<string>(\"SmtpPassword\");\n\n                b.Property<int>(\"SmtpPort\");\n\n                b.Property<string>(\"SmtpPreferredEncoding\")\n                    .HasMaxLength(20);\n\n                b.Property<bool>(\"SmtpRequiresAuth\")\n                    .ValueGeneratedOnAdd()\n                    .HasColumnType(\"bit\")\n                    .HasDefaultValue(false);\n\n                b.Property<string>(\"SmtpServer\")\n                    .HasMaxLength(100);\n\n                b.Property<bool>(\"SmtpUseSsl\")\n                    .ValueGeneratedOnAdd()\n                    .HasColumnType(\"bit\")\n                    .HasDefaultValue(false);\n\n                b.Property<string>(\"SmtpUser\")\n                    .HasMaxLength(500);\n\n                b.Property<string>(\"TimeZoneId\")\n                    .HasMaxLength(100);\n\n                b.Property<string>(\"Title\")\n                    .HasMaxLength(255);\n\n                b.Property<bool>(\"UseDefaultPageAsRootNode\")\n                    .ValueGeneratedOnAdd()\n                    .HasColumnType(\"bit\")\n                    .HasDefaultValue(true);\n\n                b.Property<bool>(\"UseMetaDescriptionInFeed\")\n                    .ValueGeneratedOnAdd()\n                    .HasColumnType(\"bit\")\n                    .HasDefaultValue(false);\n\n                b.Property<string>(\"WebmasterEmail\")\n                    .HasMaxLength(100);\n\n                b.HasKey(\"Id\");\n\n                b.ToTable(\"cs_ContentProject\");\n\n\n            });\n\n\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageCategory\", b =>\n            {\n                b.Property<string>(\"Value\")\n                    .HasMaxLength(50);\n\n                b.Property<string>(\"PageEntityId\")\n                    .HasMaxLength(36);\n\n                b.Property<string>(\"ProjectId\")\n                    .IsRequired()\n                    .HasMaxLength(36);\n\n                b.HasKey(\"Value\", \"PageEntityId\");\n\n                b.HasIndex(\"PageEntityId\");\n\n                b.HasIndex(\"ProjectId\");\n\n                b.HasIndex(\"Value\");\n\n                b.ToTable(\"cs_PageCategory\");\n\n            });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n            {\n                b.Property<string>(\"Id\")\n                    .HasMaxLength(36);\n\n                b.Property<string>(\"Author\")\n                    .HasMaxLength(255);\n\n                b.Property<string>(\"Content\");\n\n                b.Property<string>(\"Email\")\n                    .HasMaxLength(100);\n\n                b.Property<string>(\"Ip\")\n                    .HasMaxLength(100);\n\n                b.Property<bool>(\"IsAdmin\");\n\n                b.Property<bool>(\"IsApproved\");\n\n                b.Property<string>(\"PageEntityId\")\n                    .HasMaxLength(36);\n\n                b.Property<string>(\"ProjectId\")\n                    .IsRequired()\n                    .HasMaxLength(36);\n\n                b.Property<DateTime>(\"PubDate\");\n\n                b.Property<string>(\"UserAgent\")\n                    .HasMaxLength(255);\n\n                b.Property<string>(\"Website\")\n                    .HasMaxLength(255);\n\n                b.HasKey(\"Id\");\n\n                b.HasIndex(\"PageEntityId\");\n\n                b.HasIndex(\"ProjectId\");\n\n                b.ToTable(\"cs_PageComment\");\n\n\n            });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\", b =>\n            {\n                b.Property<string>(\"Id\")\n                    .HasMaxLength(36);\n\n                b.Property<string>(\"Author\")\n                    .HasMaxLength(255);\n\n                b.Property<string>(\"CategoriesCsv\")\n                   .HasMaxLength(500);\n\n                b.Property<string>(\"Content\");\n\n                b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255);\n\n                b.Property<string>(\"ExternalUrl\")\n                    .HasMaxLength(255);\n\n                b.Property<bool>(\"IsPublished\")\n                    .ValueGeneratedOnAdd()\n                    .HasColumnType(\"bit\")\n                    .HasDefaultValue(true);\n\n                b.Property<DateTime>(\"LastModified\");\n\n                b.Property<bool>(\"MenuOnly\")\n                    .ValueGeneratedOnAdd()\n                    .HasColumnType(\"bit\")\n                    .HasDefaultValue(false);\n\n                b.Property<string>(\"MetaDescription\")\n                    .HasMaxLength(500);\n\n                b.Property<int>(\"PageOrder\");\n\n                b.Property<string>(\"ParentId\")\n                    .HasMaxLength(36);\n\n                b.Property<string>(\"ParentSlug\")\n                    .HasMaxLength(255);\n\n                b.Property<string>(\"ProjectId\")\n                    .IsRequired()\n                    .HasMaxLength(36);\n\n                b.Property<DateTime>(\"PubDate\");\n\n                b.Property<bool>(\"ShowCategories\")\n                    .ValueGeneratedOnAdd()\n                    .HasColumnType(\"bit\")\n                    .HasDefaultValue(false);\n\n                b.Property<bool>(\"ShowComments\")\n                    .ValueGeneratedOnAdd()\n                    .HasColumnType(\"bit\")\n                    .HasDefaultValue(false);\n\n                b.Property<bool>(\"ShowHeading\")\n                    .ValueGeneratedOnAdd()\n                   .HasColumnType(\"bit\")\n                    .HasDefaultValue(true);\n\n                b.Property<bool>(\"ShowLastModified\")\n                    .ValueGeneratedOnAdd()\n                    .HasColumnType(\"bit\")\n                    .HasDefaultValue(false);\n\n                b.Property<bool>(\"ShowMenu\")\n                    .ValueGeneratedOnAdd()\n                    .HasColumnType(\"bit\")\n                    .HasDefaultValue(false);\n\n                b.Property<bool>(\"ShowPubDate\")\n                    .ValueGeneratedOnAdd()\n                    .HasColumnType(\"bit\")\n                    .HasDefaultValue(false);\n\n                b.Property<string>(\"Slug\")\n                    .IsRequired()\n                    .HasMaxLength(255);\n\n                b.Property<string>(\"Title\")\n                    .IsRequired()\n                    .HasMaxLength(255);\n\n                b.Property<string>(\"ViewRoles\");\n\n                b.HasKey(\"Id\");\n\n                b.HasIndex(\"ParentId\");\n\n                b.HasIndex(\"ProjectId\");\n\n                b.ToTable(\"cs_Page\");\n\n\n            });\n\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostCategory\", b =>\n            {\n                b.Property<string>(\"Value\")\n                    .HasMaxLength(50);\n\n                b.Property<string>(\"PostEntityId\")\n                    .HasMaxLength(36);\n\n                b.Property<string>(\"ProjectId\")\n                    .IsRequired()\n                    .HasMaxLength(36);\n\n                b.HasKey(\"Value\", \"PostEntityId\");\n\n                b.HasIndex(\"PostEntityId\");\n\n                b.HasIndex(\"ProjectId\");\n\n                b.HasIndex(\"Value\");\n\n                b.ToTable(\"cs_PostCategory\");\n\n            });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n            {\n                b.Property<string>(\"Id\")\n                    .HasMaxLength(36);\n\n                b.Property<string>(\"Author\")\n                    .HasMaxLength(255);\n\n                b.Property<string>(\"Content\");\n\n                b.Property<string>(\"Email\")\n                    .HasMaxLength(100);\n\n                b.Property<string>(\"Ip\")\n                    .HasMaxLength(100);\n\n                b.Property<bool>(\"IsAdmin\");\n\n                b.Property<bool>(\"IsApproved\");\n\n                b.Property<string>(\"PostEntityId\")\n                    .HasMaxLength(36);\n\n                b.Property<string>(\"ProjectId\")\n                    .IsRequired()\n                    .HasMaxLength(36);\n\n                b.Property<DateTime>(\"PubDate\");\n\n                b.Property<string>(\"UserAgent\")\n                    .HasMaxLength(255);\n\n                b.Property<string>(\"Website\")\n                    .HasMaxLength(255);\n\n                b.HasKey(\"Id\");\n\n                b.HasIndex(\"PostEntityId\");\n\n                b.HasIndex(\"ProjectId\");\n\n                b.ToTable(\"cs_PostComment\");\n\n\n            });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\", b =>\n            {\n                b.Property<string>(\"Id\")\n                    .HasMaxLength(36);\n\n                b.Property<string>(\"Author\")\n                    .HasMaxLength(255);\n\n                b.Property<string>(\"BlogId\")\n                    .IsRequired()\n                    .HasMaxLength(36);\n\n                b.Property<string>(\"CategoriesCsv\")\n                    .HasMaxLength(500);\n\n                b.Property<string>(\"Content\");\n\n                b.Property<bool>(\"IsPublished\")\n                    .ValueGeneratedOnAdd()\n                    .HasColumnType(\"bit\")\n                    .HasDefaultValue(true);\n\n                b.Property<DateTime>(\"LastModified\");\n\n                b.Property<string>(\"MetaDescription\")\n                    .HasMaxLength(500);\n\n                b.Property<DateTime>(\"PubDate\");\n\n                b.Property<string>(\"Slug\")\n                    .IsRequired()\n                    .HasMaxLength(255);\n\n                b.Property<string>(\"Title\")\n                    .IsRequired()\n                    .HasMaxLength(255);\n\n                b.HasKey(\"Id\");\n\n                b.HasIndex(\"BlogId\");\n\n                b.HasIndex(\"Slug\");\n\n                b.ToTable(\"cs_Post\");\n\n\n            });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n            {\n                b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\")\n                    .WithMany(\"PageComments\")\n                    .HasForeignKey(\"PageEntityId\");\n            });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n            {\n                b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\")\n                    .WithMany(\"PostComments\")\n                    .HasForeignKey(\"PostEntityId\");\n            });\n\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.MSSQL/Migrations/20170309130025_changes20170309.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing Microsoft.EntityFrameworkCore.Migrations;\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.MSSQL.Migrations\n{\n    public partial class changes20170309 : Migration\n    {\n        protected override void Up(MigrationBuilder migrationBuilder)\n        {\n            migrationBuilder.AddColumn<string>(\n                name: \"PublisherEntityType\",\n                table: \"cs_ContentProject\",\n                maxLength: 50,\n                nullable: true);\n        }\n\n        protected override void Down(MigrationBuilder migrationBuilder)\n        {\n            migrationBuilder.DropColumn(\n                name: \"PublisherEntityType\",\n                table: \"cs_ContentProject\");\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.MSSQL/Migrations/20170310190036_changes20170310.Designer.cs",
    "content": "﻿using System;\nusing Microsoft.EntityFrameworkCore;\nusing Microsoft.EntityFrameworkCore.Infrastructure;\nusing Microsoft.EntityFrameworkCore.Metadata;\nusing Microsoft.EntityFrameworkCore.Migrations;\nusing cloudscribe.SimpleContent.Storage.EFCore.MSSQL;\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.MSSQL.Migrations\n{\n    [DbContext(typeof(SimpleContentDbContext))]\n    [Migration(\"20170310190036_changes20170310\")]\n    partial class changes20170310\n    {\n        protected override void BuildTargetModel(ModelBuilder modelBuilder)\n        {\n            modelBuilder\n                .HasAnnotation(\"ProductVersion\", \"1.1.1\")\n                .HasAnnotation(\"SqlServer:ValueGenerationStrategy\", SqlServerValueGenerationStrategy.IdentityColumn);\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Models.ProjectSettings\", b =>\n            {\n                b.Property<string>(\"Id\")\n                    .HasMaxLength(36);\n\n                b.Property<bool>(\"AddBlogToPagesTree\")\n                    .ValueGeneratedOnAdd()\n                    .HasColumnType(\"bit\")\n                    .HasDefaultValue(true);\n\n                b.Property<bool>(\"BlogMenuLinksToNewestPost\")\n                    .ValueGeneratedOnAdd()\n                    .HasColumnType(\"bit\")\n                    .HasDefaultValue(false);\n\n                b.Property<string>(\"BlogPageNavComponentVisibility\")\n                    .HasMaxLength(255);\n\n                b.Property<int>(\"BlogPagePosition\");\n\n                b.Property<string>(\"BlogPageText\")\n                    .HasMaxLength(255);\n\n                b.Property<string>(\"CdnUrl\")\n                    .HasMaxLength(255);\n\n                b.Property<string>(\"ChannelCategoriesCsv\")\n                    .HasMaxLength(255);\n\n                b.Property<string>(\"ChannelRating\")\n                    .HasMaxLength(100);\n\n                b.Property<int>(\"ChannelTimeToLive\");\n\n                b.Property<string>(\"CommentNotificationEmail\")\n                    .HasMaxLength(100);\n\n                b.Property<string>(\"CopyrightNotice\")\n                    .HasMaxLength(255);\n\n                b.Property<int>(\"DaysToComment\");\n\n                b.Property<string>(\"DefaultPageSlug\")\n                    .HasMaxLength(255);\n\n                b.Property<string>(\"Description\");\n\n                b.Property<string>(\"DisqusShortName\")\n                        .HasMaxLength(100);\n\n                b.Property<string>(\"EmailFromAddress\")\n                    .HasMaxLength(100);\n\n                b.Property<string>(\"Image\")\n                    .HasMaxLength(255);\n\n                b.Property<bool>(\"IncludePubDateInPostUrls\")\n                    .ValueGeneratedOnAdd()\n                    .HasColumnType(\"bit\")\n                    .HasDefaultValue(true);\n\n                b.Property<string>(\"LanguageCode\")\n                    .HasMaxLength(10);\n\n                b.Property<string>(\"LocalMediaVirtualPath\")\n                    .HasMaxLength(255);\n\n                b.Property<string>(\"ManagingEditorEmail\")\n                    .HasMaxLength(100);\n\n                b.Property<bool>(\"ModerateComments\")\n                    .ValueGeneratedOnAdd()\n                    .HasColumnType(\"bit\")\n                    .HasDefaultValue(true);\n\n                b.Property<int>(\"PostsPerPage\");\n\n                b.Property<string>(\"PubDateFormat\")\n                    .HasMaxLength(75);\n\n                b.Property<string>(\"Publisher\")\n                       .HasMaxLength(255);\n\n                b.Property<string>(\"PublisherEntityType\")\n                        .HasMaxLength(50);\n\n                b.Property<string>(\"PublisherLogoHeight\")\n                         .HasMaxLength(20);\n\n                b.Property<string>(\"PublisherLogoUrl\")\n                    .HasMaxLength(255);\n\n                b.Property<string>(\"PublisherLogoWidth\")\n                    .HasMaxLength(20);\n\n                b.Property<string>(\"RecaptchaPrivateKey\")\n                    .HasMaxLength(255);\n\n                b.Property<string>(\"RecaptchaPublicKey\")\n                    .HasMaxLength(255);\n\n                b.Property<string>(\"RemoteFeedProcessorUseAgentFragment\")\n                    .HasMaxLength(255);\n\n                b.Property<string>(\"RemoteFeedUrl\")\n                    .HasMaxLength(255);\n\n                b.Property<bool>(\"ShowRecentPostsOnDefaultPage\")\n                    .ValueGeneratedOnAdd()\n                    .HasColumnType(\"bit\")\n                    .HasDefaultValue(false);\n\n                b.Property<bool>(\"ShowTitle\")\n                    .ValueGeneratedOnAdd()\n                    .HasColumnType(\"bit\")\n                    .HasDefaultValue(false);\n\n                b.Property<string>(\"SmtpPassword\");\n\n                b.Property<int>(\"SmtpPort\");\n\n                b.Property<string>(\"SmtpPreferredEncoding\")\n                    .HasMaxLength(20);\n\n                b.Property<bool>(\"SmtpRequiresAuth\")\n                    .ValueGeneratedOnAdd()\n                    .HasColumnType(\"bit\")\n                    .HasDefaultValue(false);\n\n                b.Property<string>(\"SmtpServer\")\n                    .HasMaxLength(100);\n\n                b.Property<bool>(\"SmtpUseSsl\")\n                    .ValueGeneratedOnAdd()\n                    .HasColumnType(\"bit\")\n                    .HasDefaultValue(false);\n\n                b.Property<string>(\"SmtpUser\")\n                    .HasMaxLength(500);\n\n                b.Property<string>(\"TimeZoneId\")\n                    .HasMaxLength(100);\n\n                b.Property<string>(\"Title\")\n                    .HasMaxLength(255);\n\n                b.Property<bool>(\"UseDefaultPageAsRootNode\")\n                    .ValueGeneratedOnAdd()\n                    .HasColumnType(\"bit\")\n                    .HasDefaultValue(true);\n\n                b.Property<bool>(\"UseMetaDescriptionInFeed\")\n                    .ValueGeneratedOnAdd()\n                    .HasColumnType(\"bit\")\n                    .HasDefaultValue(false);\n\n                b.Property<string>(\"WebmasterEmail\")\n                    .HasMaxLength(100);\n\n                b.HasKey(\"Id\");\n\n                b.ToTable(\"cs_ContentProject\");\n\n\n            });\n\n\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageCategory\", b =>\n            {\n                b.Property<string>(\"Value\")\n                    .HasMaxLength(50);\n\n                b.Property<string>(\"PageEntityId\")\n                    .HasMaxLength(36);\n\n                b.Property<string>(\"ProjectId\")\n                    .IsRequired()\n                    .HasMaxLength(36);\n\n                b.HasKey(\"Value\", \"PageEntityId\");\n\n                b.HasIndex(\"PageEntityId\");\n\n                b.HasIndex(\"ProjectId\");\n\n                b.HasIndex(\"Value\");\n\n                b.ToTable(\"cs_PageCategory\");\n\n            });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n            {\n                b.Property<string>(\"Id\")\n                    .HasMaxLength(36);\n\n                b.Property<string>(\"Author\")\n                    .HasMaxLength(255);\n\n                b.Property<string>(\"Content\");\n\n                b.Property<string>(\"Email\")\n                    .HasMaxLength(100);\n\n                b.Property<string>(\"Ip\")\n                    .HasMaxLength(100);\n\n                b.Property<bool>(\"IsAdmin\");\n\n                b.Property<bool>(\"IsApproved\");\n\n                b.Property<string>(\"PageEntityId\")\n                    .HasMaxLength(36);\n\n                b.Property<string>(\"ProjectId\")\n                    .IsRequired()\n                    .HasMaxLength(36);\n\n                b.Property<DateTime>(\"PubDate\");\n\n                b.Property<string>(\"UserAgent\")\n                    .HasMaxLength(255);\n\n                b.Property<string>(\"Website\")\n                    .HasMaxLength(255);\n\n                b.HasKey(\"Id\");\n\n                b.HasIndex(\"PageEntityId\");\n\n                b.HasIndex(\"ProjectId\");\n\n                b.ToTable(\"cs_PageComment\");\n\n\n            });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\", b =>\n            {\n                b.Property<string>(\"Id\")\n                    .HasMaxLength(36);\n\n                b.Property<string>(\"Author\")\n                    .HasMaxLength(255);\n\n                b.Property<string>(\"CategoriesCsv\")\n                   .HasMaxLength(500);\n\n                b.Property<string>(\"Content\");\n\n                b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255);\n\n                b.Property<string>(\"ExternalUrl\")\n                    .HasMaxLength(255);\n\n                b.Property<bool>(\"IsPublished\")\n                    .ValueGeneratedOnAdd()\n                    .HasColumnType(\"bit\")\n                    .HasDefaultValue(true);\n\n                b.Property<DateTime>(\"LastModified\");\n\n                b.Property<bool>(\"MenuOnly\")\n                    .ValueGeneratedOnAdd()\n                    .HasColumnType(\"bit\")\n                    .HasDefaultValue(false);\n\n                b.Property<string>(\"MetaDescription\")\n                    .HasMaxLength(500);\n\n                b.Property<int>(\"PageOrder\");\n\n                b.Property<string>(\"ParentId\")\n                    .HasMaxLength(36);\n\n                b.Property<string>(\"ParentSlug\")\n                    .HasMaxLength(255);\n\n                b.Property<string>(\"ProjectId\")\n                    .IsRequired()\n                    .HasMaxLength(36);\n\n                b.Property<DateTime>(\"PubDate\");\n\n                b.Property<bool>(\"ShowCategories\")\n                    .ValueGeneratedOnAdd()\n                    .HasColumnType(\"bit\")\n                    .HasDefaultValue(false);\n\n                b.Property<bool>(\"ShowComments\")\n                    .ValueGeneratedOnAdd()\n                    .HasColumnType(\"bit\")\n                    .HasDefaultValue(false);\n\n                b.Property<bool>(\"ShowHeading\")\n                    .ValueGeneratedOnAdd()\n                   .HasColumnType(\"bit\")\n                    .HasDefaultValue(true);\n\n                b.Property<bool>(\"ShowLastModified\")\n                    .ValueGeneratedOnAdd()\n                    .HasColumnType(\"bit\")\n                    .HasDefaultValue(false);\n\n                b.Property<bool>(\"ShowMenu\")\n                    .ValueGeneratedOnAdd()\n                    .HasColumnType(\"bit\")\n                    .HasDefaultValue(false);\n\n                b.Property<bool>(\"ShowPubDate\")\n                    .ValueGeneratedOnAdd()\n                    .HasColumnType(\"bit\")\n                    .HasDefaultValue(false);\n\n                b.Property<string>(\"Slug\")\n                    .IsRequired()\n                    .HasMaxLength(255);\n\n                b.Property<string>(\"Title\")\n                    .IsRequired()\n                    .HasMaxLength(255);\n\n                b.Property<string>(\"ViewRoles\");\n\n                b.HasKey(\"Id\");\n\n                b.HasIndex(\"ParentId\");\n\n                b.HasIndex(\"ProjectId\");\n\n                b.ToTable(\"cs_Page\");\n\n\n            });\n\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostCategory\", b =>\n            {\n                b.Property<string>(\"Value\")\n                    .HasMaxLength(50);\n\n                b.Property<string>(\"PostEntityId\")\n                    .HasMaxLength(36);\n\n                b.Property<string>(\"ProjectId\")\n                    .IsRequired()\n                    .HasMaxLength(36);\n\n                b.HasKey(\"Value\", \"PostEntityId\");\n\n                b.HasIndex(\"PostEntityId\");\n\n                b.HasIndex(\"ProjectId\");\n\n                b.HasIndex(\"Value\");\n\n                b.ToTable(\"cs_PostCategory\");\n\n            });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n            {\n                b.Property<string>(\"Id\")\n                    .HasMaxLength(36);\n\n                b.Property<string>(\"Author\")\n                    .HasMaxLength(255);\n\n                b.Property<string>(\"Content\");\n\n                b.Property<string>(\"Email\")\n                    .HasMaxLength(100);\n\n                b.Property<string>(\"Ip\")\n                    .HasMaxLength(100);\n\n                b.Property<bool>(\"IsAdmin\");\n\n                b.Property<bool>(\"IsApproved\");\n\n                b.Property<string>(\"PostEntityId\")\n                    .HasMaxLength(36);\n\n                b.Property<string>(\"ProjectId\")\n                    .IsRequired()\n                    .HasMaxLength(36);\n\n                b.Property<DateTime>(\"PubDate\");\n\n                b.Property<string>(\"UserAgent\")\n                    .HasMaxLength(255);\n\n                b.Property<string>(\"Website\")\n                    .HasMaxLength(255);\n\n                b.HasKey(\"Id\");\n\n                b.HasIndex(\"PostEntityId\");\n\n                b.HasIndex(\"ProjectId\");\n\n                b.ToTable(\"cs_PostComment\");\n\n\n            });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\", b =>\n            {\n                b.Property<string>(\"Id\")\n                    .HasMaxLength(36);\n\n                b.Property<string>(\"Author\")\n                    .HasMaxLength(255);\n\n                b.Property<string>(\"BlogId\")\n                    .IsRequired()\n                    .HasMaxLength(36);\n\n                b.Property<string>(\"CategoriesCsv\")\n                    .HasMaxLength(500);\n\n                b.Property<string>(\"Content\");\n\n                b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255);\n\n                b.Property<bool>(\"IsPublished\")\n                    .ValueGeneratedOnAdd()\n                    .HasColumnType(\"bit\")\n                    .HasDefaultValue(true);\n\n                b.Property<DateTime>(\"LastModified\");\n\n                b.Property<string>(\"MetaDescription\")\n                    .HasMaxLength(500);\n\n                b.Property<DateTime>(\"PubDate\");\n\n                b.Property<string>(\"Slug\")\n                    .IsRequired()\n                    .HasMaxLength(255);\n\n                b.Property<string>(\"Title\")\n                    .IsRequired()\n                    .HasMaxLength(255);\n\n                b.HasKey(\"Id\");\n\n                b.HasIndex(\"BlogId\");\n\n                b.HasIndex(\"Slug\");\n\n                b.ToTable(\"cs_Post\");\n\n\n            });\n\n\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n            {\n                b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\")\n                    .WithMany(\"PageComments\")\n                    .HasForeignKey(\"PageEntityId\");\n            });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n            {\n                b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\")\n                    .WithMany(\"PostComments\")\n                    .HasForeignKey(\"PostEntityId\");\n            });\n\n\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.MSSQL/Migrations/20170310190036_changes20170310.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing Microsoft.EntityFrameworkCore.Migrations;\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.MSSQL.Migrations\n{\n    public partial class changes20170310 : Migration\n    {\n        protected override void Up(MigrationBuilder migrationBuilder)\n        {\n            migrationBuilder.AddColumn<string>(\n                name: \"CorrelationKey\",\n                table: \"cs_Post\",\n                maxLength: 255,\n                nullable: true);\n\n            migrationBuilder.AddColumn<bool>(\n                name: \"ShowRecentPostsOnDefaultPage\",\n                table: \"cs_ContentProject\",\n                type: \"bit\",\n                nullable: false,\n                defaultValue: false);\n\n            migrationBuilder.CreateIndex(\n                name: \"IX_cs_Post_CorrelationKey\",\n                table: \"cs_Post\",\n                column: \"CorrelationKey\");\n        }\n\n        protected override void Down(MigrationBuilder migrationBuilder)\n        {\n            migrationBuilder.DropIndex(\n                name: \"IX_cs_Post_CorrelationKey\",\n                table: \"cs_Post\");\n\n            migrationBuilder.DropColumn(\n                name: \"CorrelationKey\",\n                table: \"cs_Post\");\n\n            migrationBuilder.DropColumn(\n                name: \"ShowRecentPostsOnDefaultPage\",\n                table: \"cs_ContentProject\");\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.MSSQL/Migrations/20170418142644_changes20170417.Designer.cs",
    "content": "﻿using System;\nusing Microsoft.EntityFrameworkCore;\nusing Microsoft.EntityFrameworkCore.Infrastructure;\nusing Microsoft.EntityFrameworkCore.Metadata;\nusing Microsoft.EntityFrameworkCore.Migrations;\nusing cloudscribe.SimpleContent.Storage.EFCore.MSSQL;\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.MSSQL.Migrations\n{\n    [DbContext(typeof(SimpleContentDbContext))]\n    [Migration(\"20170418142644_changes20170417\")]\n    partial class changes20170417\n    {\n        protected override void BuildTargetModel(ModelBuilder modelBuilder)\n        {\n            modelBuilder\n                .HasAnnotation(\"ProductVersion\", \"1.1.1\")\n                .HasAnnotation(\"SqlServer:ValueGenerationStrategy\", SqlServerValueGenerationStrategy.IdentityColumn);\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Models.ProjectSettings\", b =>\n            {\n                b.Property<string>(\"Id\")\n                    .HasMaxLength(36);\n\n                b.Property<bool>(\"AddBlogToPagesTree\")\n                    .ValueGeneratedOnAdd()\n                    .HasColumnType(\"bit\")\n                    .HasDefaultValue(true);\n\n                b.Property<bool>(\"BlogMenuLinksToNewestPost\")\n                    .ValueGeneratedOnAdd()\n                    .HasColumnType(\"bit\")\n                    .HasDefaultValue(false);\n\n                b.Property<string>(\"BlogPageNavComponentVisibility\")\n                    .HasMaxLength(255);\n\n                b.Property<int>(\"BlogPagePosition\");\n\n                b.Property<string>(\"BlogPageText\")\n                    .HasMaxLength(255);\n\n                b.Property<string>(\"CdnUrl\")\n                    .HasMaxLength(255);\n\n                b.Property<string>(\"ChannelCategoriesCsv\")\n                    .HasMaxLength(255);\n\n                b.Property<string>(\"ChannelRating\")\n                    .HasMaxLength(100);\n\n                b.Property<int>(\"ChannelTimeToLive\");\n\n                b.Property<string>(\"CommentNotificationEmail\")\n                    .HasMaxLength(100);\n\n                b.Property<string>(\"CopyrightNotice\")\n                    .HasMaxLength(255);\n\n                b.Property<int>(\"DaysToComment\");\n\n                b.Property<string>(\"DefaultPageSlug\")\n                    .HasMaxLength(255);\n\n                b.Property<string>(\"Description\");\n\n                b.Property<string>(\"DisqusShortName\")\n                        .HasMaxLength(100);\n\n                b.Property<string>(\"EmailFromAddress\")\n                    .HasMaxLength(100);\n\n                b.Property<string>(\"Image\")\n                    .HasMaxLength(255);\n\n                b.Property<bool>(\"IncludePubDateInPostUrls\")\n                    .ValueGeneratedOnAdd()\n                    .HasColumnType(\"bit\")\n                    .HasDefaultValue(true);\n\n                b.Property<string>(\"LanguageCode\")\n                    .HasMaxLength(10);\n\n                b.Property<string>(\"LocalMediaVirtualPath\")\n                    .HasMaxLength(255);\n\n                b.Property<string>(\"ManagingEditorEmail\")\n                    .HasMaxLength(100);\n\n                b.Property<bool>(\"ModerateComments\")\n                    .ValueGeneratedOnAdd()\n                    .HasColumnType(\"bit\")\n                    .HasDefaultValue(true);\n\n                b.Property<int>(\"PostsPerPage\");\n\n                b.Property<string>(\"PubDateFormat\")\n                    .HasMaxLength(75);\n\n                b.Property<string>(\"Publisher\")\n                       .HasMaxLength(255);\n\n                b.Property<string>(\"PublisherEntityType\")\n                        .HasMaxLength(50);\n\n                b.Property<string>(\"PublisherLogoHeight\")\n                         .HasMaxLength(20);\n\n                b.Property<string>(\"PublisherLogoUrl\")\n                    .HasMaxLength(255);\n\n                b.Property<string>(\"PublisherLogoWidth\")\n                    .HasMaxLength(20);\n\n                b.Property<string>(\"RecaptchaPrivateKey\")\n                    .HasMaxLength(255);\n\n                b.Property<string>(\"RecaptchaPublicKey\")\n                    .HasMaxLength(255);\n\n                b.Property<string>(\"RemoteFeedProcessorUseAgentFragment\")\n                    .HasMaxLength(255);\n\n                b.Property<string>(\"RemoteFeedUrl\")\n                    .HasMaxLength(255);\n\n                b.Property<bool>(\"ShowRecentPostsOnDefaultPage\")\n                    .ValueGeneratedOnAdd()\n                    .HasColumnType(\"bit\")\n                    .HasDefaultValue(false);\n\n                b.Property<bool>(\"ShowTitle\")\n                    .ValueGeneratedOnAdd()\n                    .HasColumnType(\"bit\")\n                    .HasDefaultValue(false);\n\n                b.Property<string>(\"SmtpPassword\");\n\n                b.Property<int>(\"SmtpPort\");\n\n                b.Property<string>(\"SmtpPreferredEncoding\")\n                    .HasMaxLength(20);\n\n                b.Property<bool>(\"SmtpRequiresAuth\")\n                    .ValueGeneratedOnAdd()\n                    .HasColumnType(\"bit\")\n                    .HasDefaultValue(false);\n\n                b.Property<string>(\"SmtpServer\")\n                    .HasMaxLength(100);\n\n                b.Property<bool>(\"SmtpUseSsl\")\n                    .ValueGeneratedOnAdd()\n                    .HasColumnType(\"bit\")\n                    .HasDefaultValue(false);\n\n                b.Property<string>(\"SmtpUser\")\n                    .HasMaxLength(500);\n\n                b.Property<string>(\"TimeZoneId\")\n                    .HasMaxLength(100);\n\n                b.Property<string>(\"Title\")\n                    .HasMaxLength(255);\n\n                b.Property<bool>(\"UseDefaultPageAsRootNode\")\n                    .ValueGeneratedOnAdd()\n                    .HasColumnType(\"bit\")\n                    .HasDefaultValue(true);\n\n                b.Property<bool>(\"UseMetaDescriptionInFeed\")\n                    .ValueGeneratedOnAdd()\n                    .HasColumnType(\"bit\")\n                    .HasDefaultValue(false);\n\n                b.Property<string>(\"WebmasterEmail\")\n                    .HasMaxLength(100);\n\n                b.HasKey(\"Id\");\n\n                b.ToTable(\"cs_ContentProject\");\n\n\n            });\n\n\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageCategory\", b =>\n            {\n                b.Property<string>(\"Value\")\n                    .HasMaxLength(50);\n\n                b.Property<string>(\"PageEntityId\")\n                    .HasMaxLength(36);\n\n                b.Property<string>(\"ProjectId\")\n                    .IsRequired()\n                    .HasMaxLength(36);\n\n                b.HasKey(\"Value\", \"PageEntityId\");\n\n                b.HasIndex(\"PageEntityId\");\n\n                b.HasIndex(\"ProjectId\");\n\n                b.HasIndex(\"Value\");\n\n                b.ToTable(\"cs_PageCategory\");\n\n            });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n            {\n                b.Property<string>(\"Id\")\n                    .HasMaxLength(36);\n\n                b.Property<string>(\"Author\")\n                    .HasMaxLength(255);\n\n                b.Property<string>(\"Content\");\n\n                b.Property<string>(\"Email\")\n                    .HasMaxLength(100);\n\n                b.Property<string>(\"Ip\")\n                    .HasMaxLength(100);\n\n                b.Property<bool>(\"IsAdmin\");\n\n                b.Property<bool>(\"IsApproved\");\n\n                b.Property<string>(\"PageEntityId\")\n                    .HasMaxLength(36);\n\n                b.Property<string>(\"ProjectId\")\n                    .IsRequired()\n                    .HasMaxLength(36);\n\n                b.Property<DateTime>(\"PubDate\");\n\n                b.Property<string>(\"UserAgent\")\n                    .HasMaxLength(255);\n\n                b.Property<string>(\"Website\")\n                    .HasMaxLength(255);\n\n                b.HasKey(\"Id\");\n\n                b.HasIndex(\"PageEntityId\");\n\n                b.HasIndex(\"ProjectId\");\n\n                b.ToTable(\"cs_PageComment\");\n\n\n            });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\", b =>\n            {\n                b.Property<string>(\"Id\")\n                    .HasMaxLength(36);\n\n                b.Property<string>(\"Author\")\n                    .HasMaxLength(255);\n\n                b.Property<string>(\"CategoriesCsv\")\n                   .HasMaxLength(500);\n\n                b.Property<string>(\"Content\");\n\n                b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255);\n\n                b.Property<string>(\"ExternalUrl\")\n                    .HasMaxLength(255);\n\n                b.Property<bool>(\"IsPublished\")\n                    .ValueGeneratedOnAdd()\n                    .HasColumnType(\"bit\")\n                    .HasDefaultValue(true);\n\n                b.Property<DateTime>(\"LastModified\");\n\n                b.Property<bool>(\"MenuOnly\")\n                    .ValueGeneratedOnAdd()\n                    .HasColumnType(\"bit\")\n                    .HasDefaultValue(false);\n\n                b.Property<string>(\"MetaDescription\")\n                    .HasMaxLength(500);\n\n                b.Property<int>(\"PageOrder\");\n\n                b.Property<string>(\"ParentId\")\n                    .HasMaxLength(36);\n\n                b.Property<string>(\"ParentSlug\")\n                    .HasMaxLength(255);\n\n                b.Property<string>(\"ProjectId\")\n                    .IsRequired()\n                    .HasMaxLength(36);\n\n                b.Property<DateTime>(\"PubDate\");\n\n                b.Property<bool>(\"ShowCategories\")\n                    .ValueGeneratedOnAdd()\n                    .HasColumnType(\"bit\")\n                    .HasDefaultValue(false);\n\n                b.Property<bool>(\"ShowComments\")\n                    .ValueGeneratedOnAdd()\n                    .HasColumnType(\"bit\")\n                    .HasDefaultValue(false);\n\n                b.Property<bool>(\"ShowHeading\")\n                    .ValueGeneratedOnAdd()\n                   .HasColumnType(\"bit\")\n                    .HasDefaultValue(true);\n\n                b.Property<bool>(\"ShowLastModified\")\n                    .ValueGeneratedOnAdd()\n                    .HasColumnType(\"bit\")\n                    .HasDefaultValue(false);\n\n                b.Property<bool>(\"ShowMenu\")\n                    .ValueGeneratedOnAdd()\n                    .HasColumnType(\"bit\")\n                    .HasDefaultValue(false);\n\n                b.Property<bool>(\"ShowPubDate\")\n                    .ValueGeneratedOnAdd()\n                    .HasColumnType(\"bit\")\n                    .HasDefaultValue(false);\n\n                b.Property<string>(\"Slug\")\n                    .IsRequired()\n                    .HasMaxLength(255);\n\n                b.Property<string>(\"Title\")\n                    .IsRequired()\n                    .HasMaxLength(255);\n\n                b.Property<string>(\"ViewRoles\");\n\n                b.HasKey(\"Id\");\n\n                b.HasIndex(\"ParentId\");\n\n                b.HasIndex(\"ProjectId\");\n\n                b.ToTable(\"cs_Page\");\n\n\n            });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageResourceEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Environment\")\n                        .IsRequired()\n                        .HasMaxLength(15);\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<int>(\"Sort\");\n\n                    b.Property<string>(\"Type\")\n                        .IsRequired()\n                        .HasMaxLength(10);\n\n                    b.Property<string>(\"Url\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.ToTable(\"cs_PageResource\");\n\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostCategory\", b =>\n            {\n                b.Property<string>(\"Value\")\n                    .HasMaxLength(50);\n\n                b.Property<string>(\"PostEntityId\")\n                    .HasMaxLength(36);\n\n                b.Property<string>(\"ProjectId\")\n                    .IsRequired()\n                    .HasMaxLength(36);\n\n                b.HasKey(\"Value\", \"PostEntityId\");\n\n                b.HasIndex(\"PostEntityId\");\n\n                b.HasIndex(\"ProjectId\");\n\n                b.HasIndex(\"Value\");\n\n                b.ToTable(\"cs_PostCategory\");\n\n            });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n            {\n                b.Property<string>(\"Id\")\n                    .HasMaxLength(36);\n\n                b.Property<string>(\"Author\")\n                    .HasMaxLength(255);\n\n                b.Property<string>(\"Content\");\n\n                b.Property<string>(\"Email\")\n                    .HasMaxLength(100);\n\n                b.Property<string>(\"Ip\")\n                    .HasMaxLength(100);\n\n                b.Property<bool>(\"IsAdmin\");\n\n                b.Property<bool>(\"IsApproved\");\n\n                b.Property<string>(\"PostEntityId\")\n                    .HasMaxLength(36);\n\n                b.Property<string>(\"ProjectId\")\n                    .IsRequired()\n                    .HasMaxLength(36);\n\n                b.Property<DateTime>(\"PubDate\");\n\n                b.Property<string>(\"UserAgent\")\n                    .HasMaxLength(255);\n\n                b.Property<string>(\"Website\")\n                    .HasMaxLength(255);\n\n                b.HasKey(\"Id\");\n\n                b.HasIndex(\"PostEntityId\");\n\n                b.HasIndex(\"ProjectId\");\n\n                b.ToTable(\"cs_PostComment\");\n\n\n            });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\", b =>\n            {\n                b.Property<string>(\"Id\")\n                    .HasMaxLength(36);\n\n                b.Property<string>(\"Author\")\n                    .HasMaxLength(255);\n\n                b.Property<string>(\"BlogId\")\n                    .IsRequired()\n                    .HasMaxLength(36);\n\n                b.Property<string>(\"CategoriesCsv\")\n                    .HasMaxLength(500);\n\n                b.Property<string>(\"Content\");\n\n                b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255);\n\n                b.Property<bool>(\"IsPublished\")\n                    .ValueGeneratedOnAdd()\n                    .HasColumnType(\"bit\")\n                    .HasDefaultValue(true);\n\n                b.Property<DateTime>(\"LastModified\");\n\n                b.Property<string>(\"MetaDescription\")\n                    .HasMaxLength(500);\n\n                b.Property<DateTime>(\"PubDate\");\n\n                b.Property<string>(\"Slug\")\n                    .IsRequired()\n                    .HasMaxLength(255);\n\n                b.Property<string>(\"Title\")\n                    .IsRequired()\n                    .HasMaxLength(255);\n\n                b.HasKey(\"Id\");\n\n                b.HasIndex(\"BlogId\");\n\n                b.HasIndex(\"Slug\");\n\n                b.ToTable(\"cs_Post\");\n\n\n            });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n            {\n                b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\")\n                    .WithMany(\"PageComments\")\n                    .HasForeignKey(\"PageEntityId\");\n            });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageResourceEntity\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\")\n                        .WithMany(\"PageResources\")\n                        .HasForeignKey(\"PageEntityId\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n            {\n                b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\")\n                    .WithMany(\"PostComments\")\n                    .HasForeignKey(\"PostEntityId\");\n            });\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.MSSQL/Migrations/20170418142644_changes20170417.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing Microsoft.EntityFrameworkCore.Migrations;\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.MSSQL.Migrations\n{\n    public partial class changes20170417 : Migration\n    {\n        protected override void Up(MigrationBuilder migrationBuilder)\n        {\n            migrationBuilder.CreateTable(\n                name: \"cs_PageResource\",\n                columns: table => new\n                {\n                    Id = table.Column<string>(maxLength: 36, nullable: false),\n                    Environment = table.Column<string>(maxLength: 15, nullable: false),\n                    PageEntityId = table.Column<string>(maxLength: 36, nullable: true),\n                    Sort = table.Column<int>(nullable: false),\n                    Type = table.Column<string>(maxLength: 10, nullable: false),\n                    Url = table.Column<string>(maxLength: 255, nullable: false)\n                },\n                constraints: table =>\n                {\n                    table.PrimaryKey(\"PK_cs_PageResource\", x => x.Id);\n                    table.ForeignKey(\n                        name: \"FK_cs_PageResource_cs_Page_PageEntityId\",\n                        column: x => x.PageEntityId,\n                        principalTable: \"cs_Page\",\n                        principalColumn: \"Id\",\n                        onDelete: ReferentialAction.Restrict);\n                });\n\n            migrationBuilder.CreateIndex(\n                name: \"IX_cs_PageResource_PageEntityId\",\n                table: \"cs_PageResource\",\n                column: \"PageEntityId\");\n        }\n\n        protected override void Down(MigrationBuilder migrationBuilder)\n        {\n            migrationBuilder.DropTable(\n                name: \"cs_PageResource\");\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.MSSQL/Migrations/20170514122601_changes20170514.Designer.cs",
    "content": "﻿using System;\nusing Microsoft.EntityFrameworkCore;\nusing Microsoft.EntityFrameworkCore.Infrastructure;\nusing Microsoft.EntityFrameworkCore.Metadata;\nusing Microsoft.EntityFrameworkCore.Migrations;\nusing cloudscribe.SimpleContent.Storage.EFCore.MSSQL;\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.MSSQL.Migrations\n{\n    [DbContext(typeof(SimpleContentDbContext))]\n    [Migration(\"20170514122601_changes20170514\")]\n    partial class changes20170514\n    {\n        protected override void BuildTargetModel(ModelBuilder modelBuilder)\n        {\n            modelBuilder\n                .HasAnnotation(\"ProductVersion\", \"1.1.2\")\n                .HasAnnotation(\"SqlServer:ValueGenerationStrategy\", SqlServerValueGenerationStrategy.IdentityColumn);\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Models.ProjectSettings\", b =>\n            {\n                b.Property<string>(\"Id\")\n                    .HasMaxLength(36);\n\n                b.Property<bool>(\"AddBlogToPagesTree\")\n                    .ValueGeneratedOnAdd()\n                    .HasColumnType(\"bit\")\n                    .HasDefaultValue(true);\n\n                b.Property<bool>(\"BlogMenuLinksToNewestPost\")\n                    .ValueGeneratedOnAdd()\n                    .HasColumnType(\"bit\")\n                    .HasDefaultValue(false);\n\n                b.Property<string>(\"BlogPageNavComponentVisibility\")\n                    .HasMaxLength(255);\n\n                b.Property<int>(\"BlogPagePosition\");\n\n                b.Property<string>(\"BlogPageText\")\n                    .HasMaxLength(255);\n\n                b.Property<string>(\"CdnUrl\")\n                    .HasMaxLength(255);\n\n                b.Property<string>(\"ChannelCategoriesCsv\")\n                    .HasMaxLength(255);\n\n                b.Property<string>(\"ChannelRating\")\n                    .HasMaxLength(100);\n\n                b.Property<int>(\"ChannelTimeToLive\");\n\n                b.Property<string>(\"CommentNotificationEmail\")\n                    .HasMaxLength(100);\n\n                b.Property<string>(\"CopyrightNotice\")\n                    .HasMaxLength(255);\n\n                b.Property<int>(\"DaysToComment\");\n\n                b.Property<string>(\"DefaultPageSlug\")\n                    .HasMaxLength(255);\n\n                b.Property<string>(\"Description\");\n\n                b.Property<string>(\"DisqusShortName\")\n                        .HasMaxLength(100);\n\n                b.Property<string>(\"EmailFromAddress\")\n                    .HasMaxLength(100);\n\n                b.Property<string>(\"Image\")\n                    .HasMaxLength(255);\n\n                b.Property<bool>(\"IncludePubDateInPostUrls\")\n                    .ValueGeneratedOnAdd()\n                    .HasColumnType(\"bit\")\n                    .HasDefaultValue(true);\n\n                b.Property<string>(\"LanguageCode\")\n                    .HasMaxLength(10);\n\n                b.Property<string>(\"LocalMediaVirtualPath\")\n                    .HasMaxLength(255);\n\n                b.Property<string>(\"ManagingEditorEmail\")\n                    .HasMaxLength(100);\n\n                b.Property<bool>(\"ModerateComments\")\n                    .ValueGeneratedOnAdd()\n                    .HasColumnType(\"bit\")\n                    .HasDefaultValue(true);\n\n                b.Property<int>(\"PostsPerPage\");\n\n                b.Property<string>(\"PubDateFormat\")\n                    .HasMaxLength(75);\n\n                b.Property<string>(\"Publisher\")\n                       .HasMaxLength(255);\n\n                b.Property<string>(\"PublisherEntityType\")\n                        .HasMaxLength(50);\n\n                b.Property<string>(\"PublisherLogoHeight\")\n                         .HasMaxLength(20);\n\n                b.Property<string>(\"PublisherLogoUrl\")\n                    .HasMaxLength(255);\n\n                b.Property<string>(\"PublisherLogoWidth\")\n                    .HasMaxLength(20);\n\n                b.Property<string>(\"RecaptchaPrivateKey\")\n                    .HasMaxLength(255);\n\n                b.Property<string>(\"RecaptchaPublicKey\")\n                    .HasMaxLength(255);\n\n                b.Property<string>(\"RemoteFeedProcessorUseAgentFragment\")\n                    .HasMaxLength(255);\n\n                b.Property<string>(\"RemoteFeedUrl\")\n                    .HasMaxLength(255);\n\n                b.Property<bool>(\"ShowRecentPostsOnDefaultPage\")\n                    .ValueGeneratedOnAdd()\n                    .HasColumnType(\"bit\")\n                    .HasDefaultValue(false);\n\n                b.Property<bool>(\"ShowTitle\")\n                    .ValueGeneratedOnAdd()\n                    .HasColumnType(\"bit\")\n                    .HasDefaultValue(false);\n\n                b.Property<string>(\"SmtpPassword\");\n\n                b.Property<int>(\"SmtpPort\");\n\n                b.Property<string>(\"SmtpPreferredEncoding\")\n                    .HasMaxLength(20);\n\n                b.Property<bool>(\"SmtpRequiresAuth\")\n                    .ValueGeneratedOnAdd()\n                    .HasColumnType(\"bit\")\n                    .HasDefaultValue(false);\n\n                b.Property<string>(\"SmtpServer\")\n                    .HasMaxLength(100);\n\n                b.Property<bool>(\"SmtpUseSsl\")\n                    .ValueGeneratedOnAdd()\n                    .HasColumnType(\"bit\")\n                    .HasDefaultValue(false);\n\n                b.Property<string>(\"SmtpUser\")\n                    .HasMaxLength(500);\n\n                b.Property<string>(\"TimeZoneId\")\n                    .HasMaxLength(100);\n\n                b.Property<string>(\"Title\")\n                    .HasMaxLength(255);\n\n                b.Property<bool>(\"UseDefaultPageAsRootNode\")\n                    .ValueGeneratedOnAdd()\n                    .HasColumnType(\"bit\")\n                    .HasDefaultValue(true);\n\n                b.Property<bool>(\"UseMetaDescriptionInFeed\")\n                    .ValueGeneratedOnAdd()\n                    .HasColumnType(\"bit\")\n                    .HasDefaultValue(false);\n\n                b.Property<string>(\"WebmasterEmail\")\n                    .HasMaxLength(100);\n\n                b.HasKey(\"Id\");\n\n                b.ToTable(\"cs_ContentProject\");\n\n\n            });\n\n\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageCategory\", b =>\n            {\n                b.Property<string>(\"Value\")\n                    .HasMaxLength(50);\n\n                b.Property<string>(\"PageEntityId\")\n                    .HasMaxLength(36);\n\n                b.Property<string>(\"ProjectId\")\n                    .IsRequired()\n                    .HasMaxLength(36);\n\n                b.HasKey(\"Value\", \"PageEntityId\");\n\n                b.HasIndex(\"PageEntityId\");\n\n                b.HasIndex(\"ProjectId\");\n\n                b.HasIndex(\"Value\");\n\n                b.ToTable(\"cs_PageCategory\");\n\n            });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n            {\n                b.Property<string>(\"Id\")\n                    .HasMaxLength(36);\n\n                b.Property<string>(\"Author\")\n                    .HasMaxLength(255);\n\n                b.Property<string>(\"Content\");\n\n                b.Property<string>(\"Email\")\n                    .HasMaxLength(100);\n\n                b.Property<string>(\"Ip\")\n                    .HasMaxLength(100);\n\n                b.Property<bool>(\"IsAdmin\");\n\n                b.Property<bool>(\"IsApproved\");\n\n                b.Property<string>(\"PageEntityId\")\n                    .HasMaxLength(36);\n\n                b.Property<string>(\"ProjectId\")\n                    .IsRequired()\n                    .HasMaxLength(36);\n\n                b.Property<DateTime>(\"PubDate\");\n\n                b.Property<string>(\"UserAgent\")\n                    .HasMaxLength(255);\n\n                b.Property<string>(\"Website\")\n                    .HasMaxLength(255);\n\n                b.HasKey(\"Id\");\n\n                b.HasIndex(\"PageEntityId\");\n\n                b.HasIndex(\"ProjectId\");\n\n                b.ToTable(\"cs_PageComment\");\n\n\n            });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\", b =>\n            {\n                b.Property<string>(\"Id\")\n                    .HasMaxLength(36);\n\n                b.Property<string>(\"Author\")\n                    .HasMaxLength(255);\n\n                b.Property<string>(\"CategoriesCsv\")\n                   .HasMaxLength(500);\n\n                b.Property<string>(\"Content\");\n\n                b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255);\n\n                b.Property<string>(\"ExternalUrl\")\n                    .HasMaxLength(255);\n\n                b.Property<bool>(\"IsPublished\")\n                    .ValueGeneratedOnAdd()\n                    .HasColumnType(\"bit\")\n                    .HasDefaultValue(true);\n\n                b.Property<DateTime>(\"LastModified\");\n\n                b.Property<string>(\"MenuFilters\")\n                        .HasMaxLength(500);\n\n                b.Property<bool>(\"MenuOnly\")\n                    .ValueGeneratedOnAdd()\n                    .HasColumnType(\"bit\")\n                    .HasDefaultValue(false);\n\n                b.Property<string>(\"MetaDescription\")\n                    .HasMaxLength(500);\n\n                b.Property<int>(\"PageOrder\");\n\n                b.Property<string>(\"ParentId\")\n                    .HasMaxLength(36);\n\n                b.Property<string>(\"ParentSlug\")\n                    .HasMaxLength(255);\n\n                b.Property<string>(\"ProjectId\")\n                    .IsRequired()\n                    .HasMaxLength(36);\n\n                b.Property<DateTime>(\"PubDate\");\n\n                b.Property<bool>(\"ShowCategories\")\n                    .ValueGeneratedOnAdd()\n                    .HasColumnType(\"bit\")\n                    .HasDefaultValue(false);\n\n                b.Property<bool>(\"ShowComments\")\n                    .ValueGeneratedOnAdd()\n                    .HasColumnType(\"bit\")\n                    .HasDefaultValue(false);\n\n                b.Property<bool>(\"ShowHeading\")\n                    .ValueGeneratedOnAdd()\n                   .HasColumnType(\"bit\")\n                    .HasDefaultValue(true);\n\n                b.Property<bool>(\"ShowLastModified\")\n                    .ValueGeneratedOnAdd()\n                    .HasColumnType(\"bit\")\n                    .HasDefaultValue(false);\n\n                b.Property<bool>(\"ShowMenu\")\n                    .ValueGeneratedOnAdd()\n                    .HasColumnType(\"bit\")\n                    .HasDefaultValue(false);\n\n                b.Property<bool>(\"ShowPubDate\")\n                    .ValueGeneratedOnAdd()\n                    .HasColumnType(\"bit\")\n                    .HasDefaultValue(false);\n\n                b.Property<string>(\"Slug\")\n                    .IsRequired()\n                    .HasMaxLength(255);\n\n                b.Property<string>(\"Title\")\n                    .IsRequired()\n                    .HasMaxLength(255);\n\n                b.Property<string>(\"ViewRoles\");\n\n                b.HasKey(\"Id\");\n\n                b.HasIndex(\"ParentId\");\n\n                b.HasIndex(\"ProjectId\");\n\n                b.ToTable(\"cs_Page\");\n\n\n            });\n\n\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageResourceEntity\", b =>\n            {\n                b.Property<string>(\"Id\")\n                    .ValueGeneratedOnAdd()\n                    .HasMaxLength(36);\n\n                b.Property<string>(\"Environment\")\n                    .IsRequired()\n                    .HasMaxLength(15);\n\n                b.Property<string>(\"PageEntityId\")\n                    .HasMaxLength(36);\n\n                b.Property<int>(\"Sort\");\n\n                b.Property<string>(\"Type\")\n                    .IsRequired()\n                    .HasMaxLength(10);\n\n                b.Property<string>(\"Url\")\n                    .IsRequired()\n                    .HasMaxLength(255);\n\n                b.HasKey(\"Id\");\n\n                b.HasIndex(\"PageEntityId\");\n\n                b.ToTable(\"cs_PageResource\");\n\n            });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostCategory\", b =>\n            {\n                b.Property<string>(\"Value\")\n                    .HasMaxLength(50);\n\n                b.Property<string>(\"PostEntityId\")\n                    .HasMaxLength(36);\n\n                b.Property<string>(\"ProjectId\")\n                    .IsRequired()\n                    .HasMaxLength(36);\n\n                b.HasKey(\"Value\", \"PostEntityId\");\n\n                b.HasIndex(\"PostEntityId\");\n\n                b.HasIndex(\"ProjectId\");\n\n                b.HasIndex(\"Value\");\n\n                b.ToTable(\"cs_PostCategory\");\n\n            });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n            {\n                b.Property<string>(\"Id\")\n                    .HasMaxLength(36);\n\n                b.Property<string>(\"Author\")\n                    .HasMaxLength(255);\n\n                b.Property<string>(\"Content\");\n\n                b.Property<string>(\"Email\")\n                    .HasMaxLength(100);\n\n                b.Property<string>(\"Ip\")\n                    .HasMaxLength(100);\n\n                b.Property<bool>(\"IsAdmin\");\n\n                b.Property<bool>(\"IsApproved\");\n\n                b.Property<string>(\"PostEntityId\")\n                    .HasMaxLength(36);\n\n                b.Property<string>(\"ProjectId\")\n                    .IsRequired()\n                    .HasMaxLength(36);\n\n                b.Property<DateTime>(\"PubDate\");\n\n                b.Property<string>(\"UserAgent\")\n                    .HasMaxLength(255);\n\n                b.Property<string>(\"Website\")\n                    .HasMaxLength(255);\n\n                b.HasKey(\"Id\");\n\n                b.HasIndex(\"PostEntityId\");\n\n                b.HasIndex(\"ProjectId\");\n\n                b.ToTable(\"cs_PostComment\");\n\n\n            });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\", b =>\n            {\n                b.Property<string>(\"Id\")\n                    .HasMaxLength(36);\n\n                b.Property<string>(\"Author\")\n                    .HasMaxLength(255);\n\n                b.Property<string>(\"BlogId\")\n                    .IsRequired()\n                    .HasMaxLength(36);\n\n                b.Property<string>(\"CategoriesCsv\")\n                    .HasMaxLength(500);\n\n                b.Property<string>(\"Content\");\n\n                b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255);\n\n                b.Property<bool>(\"IsPublished\")\n                    .ValueGeneratedOnAdd()\n                    .HasColumnType(\"bit\")\n                    .HasDefaultValue(true);\n\n                b.Property<DateTime>(\"LastModified\");\n\n                b.Property<string>(\"MetaDescription\")\n                    .HasMaxLength(500);\n\n                b.Property<DateTime>(\"PubDate\");\n\n                b.Property<string>(\"Slug\")\n                    .IsRequired()\n                    .HasMaxLength(255);\n\n                b.Property<string>(\"Title\")\n                    .IsRequired()\n                    .HasMaxLength(255);\n\n                b.HasKey(\"Id\");\n\n                b.HasIndex(\"BlogId\");\n\n                b.HasIndex(\"Slug\");\n\n                b.ToTable(\"cs_Post\");\n\n\n            });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n            {\n                b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\")\n                    .WithMany(\"PageComments\")\n                    .HasForeignKey(\"PageEntityId\");\n            });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageResourceEntity\", b =>\n            {\n                b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\")\n                    .WithMany(\"PageResources\")\n                    .HasForeignKey(\"PageEntityId\");\n            });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n            {\n                b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\")\n                    .WithMany(\"PostComments\")\n                    .HasForeignKey(\"PostEntityId\");\n            });\n\n\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.MSSQL/Migrations/20170514122601_changes20170514.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing Microsoft.EntityFrameworkCore.Migrations;\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.MSSQL.Migrations\n{\n    public partial class changes20170514 : Migration\n    {\n        protected override void Up(MigrationBuilder migrationBuilder)\n        {\n            migrationBuilder.AddColumn<string>(\n                name: \"MenuFilters\",\n                table: \"cs_Page\",\n                maxLength: 500,\n                nullable: true);\n        }\n\n        protected override void Down(MigrationBuilder migrationBuilder)\n        {\n            migrationBuilder.DropColumn(\n                name: \"MenuFilters\",\n                table: \"cs_Page\");\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.MSSQL/Migrations/20170724195300_changes20170724.Designer.cs",
    "content": "﻿using System;\nusing Microsoft.EntityFrameworkCore;\nusing Microsoft.EntityFrameworkCore.Infrastructure;\nusing Microsoft.EntityFrameworkCore.Metadata;\nusing Microsoft.EntityFrameworkCore.Migrations;\nusing cloudscribe.SimpleContent.Storage.EFCore.MSSQL;\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.MSSQL.Migrations\n{\n    [DbContext(typeof(SimpleContentDbContext))]\n    [Migration(\"20170724195300_changes20170724\")]\n    partial class changes20170724\n    {\n        protected override void BuildTargetModel(ModelBuilder modelBuilder)\n        {\n            modelBuilder\n                .HasAnnotation(\"ProductVersion\", \"1.1.2\")\n                .HasAnnotation(\"SqlServer:ValueGenerationStrategy\", SqlServerValueGenerationStrategy.IdentityColumn);\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Models.ProjectSettings\", b =>\n            {\n                b.Property<string>(\"Id\")\n                    .HasMaxLength(36);\n\n                b.Property<bool>(\"AddBlogToPagesTree\")\n                    .ValueGeneratedOnAdd()\n                    .HasColumnType(\"bit\")\n                    .HasDefaultValue(true);\n\n                b.Property<bool>(\"BlogMenuLinksToNewestPost\")\n                    .ValueGeneratedOnAdd()\n                    .HasColumnType(\"bit\")\n                    .HasDefaultValue(false);\n\n                b.Property<string>(\"BlogPageNavComponentVisibility\")\n                    .HasMaxLength(255);\n\n                b.Property<int>(\"BlogPagePosition\");\n\n                b.Property<string>(\"BlogPageText\")\n                    .HasMaxLength(255);\n\n                b.Property<string>(\"CdnUrl\")\n                    .HasMaxLength(255);\n\n                b.Property<string>(\"ChannelCategoriesCsv\")\n                    .HasMaxLength(255);\n\n                b.Property<string>(\"ChannelRating\")\n                    .HasMaxLength(100);\n\n                b.Property<int>(\"ChannelTimeToLive\");\n\n                b.Property<string>(\"CommentNotificationEmail\")\n                    .HasMaxLength(100);\n\n                b.Property<string>(\"CopyrightNotice\")\n                    .HasMaxLength(255);\n\n                b.Property<int>(\"DaysToComment\");\n\n                b.Property<string>(\"DefaultPageSlug\")\n                    .HasMaxLength(255);\n\n                b.Property<string>(\"Description\");\n\n                b.Property<string>(\"DisqusShortName\")\n                        .HasMaxLength(100);\n\n                b.Property<string>(\"EmailFromAddress\")\n                    .HasMaxLength(100);\n\n                b.Property<string>(\"Image\")\n                    .HasMaxLength(255);\n\n                b.Property<bool>(\"IncludePubDateInPostUrls\")\n                    .ValueGeneratedOnAdd()\n                    .HasColumnType(\"bit\")\n                    .HasDefaultValue(true);\n\n                b.Property<string>(\"LanguageCode\")\n                    .HasMaxLength(10);\n\n                b.Property<string>(\"LocalMediaVirtualPath\")\n                    .HasMaxLength(255);\n\n                b.Property<string>(\"ManagingEditorEmail\")\n                    .HasMaxLength(100);\n\n                b.Property<bool>(\"ModerateComments\")\n                    .ValueGeneratedOnAdd()\n                    .HasColumnType(\"bit\")\n                    .HasDefaultValue(true);\n\n                b.Property<int>(\"PostsPerPage\");\n\n                b.Property<string>(\"PubDateFormat\")\n                    .HasMaxLength(75);\n\n                b.Property<string>(\"Publisher\")\n                       .HasMaxLength(255);\n\n                b.Property<string>(\"PublisherEntityType\")\n                        .HasMaxLength(50);\n\n                b.Property<string>(\"PublisherLogoHeight\")\n                         .HasMaxLength(20);\n\n                b.Property<string>(\"PublisherLogoUrl\")\n                    .HasMaxLength(255);\n\n                b.Property<string>(\"PublisherLogoWidth\")\n                    .HasMaxLength(20);\n\n                b.Property<string>(\"RecaptchaPrivateKey\")\n                    .HasMaxLength(255);\n\n                b.Property<string>(\"RecaptchaPublicKey\")\n                    .HasMaxLength(255);\n\n                b.Property<string>(\"RemoteFeedProcessorUseAgentFragment\")\n                    .HasMaxLength(255);\n\n                b.Property<string>(\"RemoteFeedUrl\")\n                    .HasMaxLength(255);\n\n                b.Property<bool>(\"ShowRecentPostsOnDefaultPage\")\n                    .ValueGeneratedOnAdd()\n                    .HasColumnType(\"bit\")\n                    .HasDefaultValue(false);\n\n                b.Property<bool>(\"ShowTitle\")\n                    .ValueGeneratedOnAdd()\n                    .HasColumnType(\"bit\")\n                    .HasDefaultValue(false);\n\n                b.Property<string>(\"SmtpPassword\");\n\n                b.Property<int>(\"SmtpPort\");\n\n                b.Property<string>(\"SmtpPreferredEncoding\")\n                    .HasMaxLength(20);\n\n                b.Property<bool>(\"SmtpRequiresAuth\")\n                    .ValueGeneratedOnAdd()\n                    .HasColumnType(\"bit\")\n                    .HasDefaultValue(false);\n\n                b.Property<string>(\"SmtpServer\")\n                    .HasMaxLength(100);\n\n                b.Property<bool>(\"SmtpUseSsl\")\n                    .ValueGeneratedOnAdd()\n                    .HasColumnType(\"bit\")\n                    .HasDefaultValue(false);\n\n                b.Property<string>(\"SmtpUser\")\n                    .HasMaxLength(500);\n\n                b.Property<string>(\"TimeZoneId\")\n                    .HasMaxLength(100);\n\n                b.Property<string>(\"Title\")\n                    .HasMaxLength(255);\n\n                b.Property<bool>(\"UseDefaultPageAsRootNode\")\n                    .ValueGeneratedOnAdd()\n                    .HasColumnType(\"bit\")\n                    .HasDefaultValue(true);\n\n                b.Property<bool>(\"UseMetaDescriptionInFeed\")\n                    .ValueGeneratedOnAdd()\n                    .HasColumnType(\"bit\")\n                    .HasDefaultValue(false);\n\n                b.Property<string>(\"WebmasterEmail\")\n                    .HasMaxLength(100);\n\n                b.HasKey(\"Id\");\n\n                b.ToTable(\"cs_ContentProject\");\n\n\n            });\n\n\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageCategory\", b =>\n            {\n                b.Property<string>(\"Value\")\n                    .HasMaxLength(50);\n\n                b.Property<string>(\"PageEntityId\")\n                    .HasMaxLength(36);\n\n                b.Property<string>(\"ProjectId\")\n                    .IsRequired()\n                    .HasMaxLength(36);\n\n                b.HasKey(\"Value\", \"PageEntityId\");\n\n                b.HasIndex(\"PageEntityId\");\n\n                b.HasIndex(\"ProjectId\");\n\n                b.HasIndex(\"Value\");\n\n                b.ToTable(\"cs_PageCategory\");\n\n            });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n            {\n                b.Property<string>(\"Id\")\n                    .HasMaxLength(36);\n\n                b.Property<string>(\"Author\")\n                    .HasMaxLength(255);\n\n                b.Property<string>(\"Content\");\n\n                b.Property<string>(\"Email\")\n                    .HasMaxLength(100);\n\n                b.Property<string>(\"Ip\")\n                    .HasMaxLength(100);\n\n                b.Property<bool>(\"IsAdmin\");\n\n                b.Property<bool>(\"IsApproved\");\n\n                b.Property<string>(\"PageEntityId\")\n                    .HasMaxLength(36);\n\n                b.Property<string>(\"ProjectId\")\n                    .IsRequired()\n                    .HasMaxLength(36);\n\n                b.Property<DateTime>(\"PubDate\");\n\n                b.Property<string>(\"UserAgent\")\n                    .HasMaxLength(255);\n\n                b.Property<string>(\"Website\")\n                    .HasMaxLength(255);\n\n                b.HasKey(\"Id\");\n\n                b.HasIndex(\"PageEntityId\");\n\n                b.HasIndex(\"ProjectId\");\n\n                b.ToTable(\"cs_PageComment\");\n\n\n            });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\", b =>\n            {\n                b.Property<string>(\"Id\")\n                    .HasMaxLength(36);\n\n                b.Property<string>(\"Author\")\n                    .HasMaxLength(255);\n\n                b.Property<string>(\"CategoriesCsv\")\n                   .HasMaxLength(500);\n\n                b.Property<string>(\"Content\");\n\n                b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255);\n\n                b.Property<string>(\"ExternalUrl\")\n                    .HasMaxLength(255);\n\n                b.Property<bool>(\"IsPublished\")\n                    .ValueGeneratedOnAdd()\n                    .HasColumnType(\"bit\")\n                    .HasDefaultValue(true);\n\n                b.Property<DateTime>(\"LastModified\");\n\n                b.Property<string>(\"MenuFilters\")\n                        .HasMaxLength(500);\n\n                b.Property<bool>(\"MenuOnly\")\n                    .ValueGeneratedOnAdd()\n                    .HasColumnType(\"bit\")\n                    .HasDefaultValue(false);\n\n                b.Property<string>(\"MetaDescription\")\n                    .HasMaxLength(500);\n\n                b.Property<string>(\"MetaHtml\");\n\n                b.Property<string>(\"MetaJson\");\n\n                b.Property<int>(\"PageOrder\");\n\n                b.Property<string>(\"ParentId\")\n                    .HasMaxLength(36);\n\n                b.Property<string>(\"ParentSlug\")\n                    .HasMaxLength(255);\n\n                b.Property<string>(\"ProjectId\")\n                    .IsRequired()\n                    .HasMaxLength(36);\n\n                b.Property<DateTime>(\"PubDate\");\n\n                b.Property<bool>(\"ShowCategories\")\n                    .ValueGeneratedOnAdd()\n                    .HasColumnType(\"bit\")\n                    .HasDefaultValue(false);\n\n                b.Property<bool>(\"ShowComments\")\n                    .ValueGeneratedOnAdd()\n                    .HasColumnType(\"bit\")\n                    .HasDefaultValue(false);\n\n                b.Property<bool>(\"ShowHeading\")\n                    .ValueGeneratedOnAdd()\n                   .HasColumnType(\"bit\")\n                    .HasDefaultValue(true);\n\n                b.Property<bool>(\"ShowLastModified\")\n                    .ValueGeneratedOnAdd()\n                    .HasColumnType(\"bit\")\n                    .HasDefaultValue(false);\n\n                b.Property<bool>(\"ShowMenu\")\n                    .ValueGeneratedOnAdd()\n                    .HasColumnType(\"bit\")\n                    .HasDefaultValue(false);\n\n                b.Property<bool>(\"ShowPubDate\")\n                    .ValueGeneratedOnAdd()\n                    .HasColumnType(\"bit\")\n                    .HasDefaultValue(false);\n\n                b.Property<string>(\"Slug\")\n                    .IsRequired()\n                    .HasMaxLength(255);\n\n                b.Property<string>(\"Title\")\n                    .IsRequired()\n                    .HasMaxLength(255);\n\n                b.Property<string>(\"ViewRoles\");\n\n                b.HasKey(\"Id\");\n\n                b.HasIndex(\"ParentId\");\n\n                b.HasIndex(\"ProjectId\");\n\n                b.ToTable(\"cs_Page\");\n\n\n            });\n\n\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageResourceEntity\", b =>\n            {\n                b.Property<string>(\"Id\")\n                    .ValueGeneratedOnAdd()\n                    .HasMaxLength(36);\n\n                b.Property<string>(\"Environment\")\n                    .IsRequired()\n                    .HasMaxLength(15);\n\n                b.Property<string>(\"PageEntityId\")\n                    .HasMaxLength(36);\n\n                b.Property<int>(\"Sort\");\n\n                b.Property<string>(\"Type\")\n                    .IsRequired()\n                    .HasMaxLength(10);\n\n                b.Property<string>(\"Url\")\n                    .IsRequired()\n                    .HasMaxLength(255);\n\n                b.HasKey(\"Id\");\n\n                b.HasIndex(\"PageEntityId\");\n\n                b.ToTable(\"cs_PageResource\");\n\n            });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostCategory\", b =>\n            {\n                b.Property<string>(\"Value\")\n                    .HasMaxLength(50);\n\n                b.Property<string>(\"PostEntityId\")\n                    .HasMaxLength(36);\n\n                b.Property<string>(\"ProjectId\")\n                    .IsRequired()\n                    .HasMaxLength(36);\n\n                b.HasKey(\"Value\", \"PostEntityId\");\n\n                b.HasIndex(\"PostEntityId\");\n\n                b.HasIndex(\"ProjectId\");\n\n                b.HasIndex(\"Value\");\n\n                b.ToTable(\"cs_PostCategory\");\n\n            });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n            {\n                b.Property<string>(\"Id\")\n                    .HasMaxLength(36);\n\n                b.Property<string>(\"Author\")\n                    .HasMaxLength(255);\n\n                b.Property<string>(\"Content\");\n\n                b.Property<string>(\"Email\")\n                    .HasMaxLength(100);\n\n                b.Property<string>(\"Ip\")\n                    .HasMaxLength(100);\n\n                b.Property<bool>(\"IsAdmin\");\n\n                b.Property<bool>(\"IsApproved\");\n\n                b.Property<string>(\"PostEntityId\")\n                    .HasMaxLength(36);\n\n                b.Property<string>(\"ProjectId\")\n                    .IsRequired()\n                    .HasMaxLength(36);\n\n                b.Property<DateTime>(\"PubDate\");\n\n                b.Property<string>(\"UserAgent\")\n                    .HasMaxLength(255);\n\n                b.Property<string>(\"Website\")\n                    .HasMaxLength(255);\n\n                b.HasKey(\"Id\");\n\n                b.HasIndex(\"PostEntityId\");\n\n                b.HasIndex(\"ProjectId\");\n\n                b.ToTable(\"cs_PostComment\");\n\n\n            });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\", b =>\n            {\n                b.Property<string>(\"Id\")\n                    .HasMaxLength(36);\n\n                b.Property<string>(\"Author\")\n                    .HasMaxLength(255);\n\n                b.Property<string>(\"BlogId\")\n                    .IsRequired()\n                    .HasMaxLength(36);\n\n                b.Property<string>(\"CategoriesCsv\")\n                    .HasMaxLength(500);\n\n                b.Property<string>(\"Content\");\n\n                b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255);\n\n                b.Property<bool>(\"IsPublished\")\n                    .ValueGeneratedOnAdd()\n                    .HasColumnType(\"bit\")\n                    .HasDefaultValue(true);\n\n                b.Property<DateTime>(\"LastModified\");\n\n                b.Property<string>(\"MetaDescription\")\n                    .HasMaxLength(500);\n\n                b.Property<string>(\"MetaHtml\");\n\n                b.Property<string>(\"MetaJson\");\n\n                b.Property<DateTime>(\"PubDate\");\n\n                b.Property<string>(\"Slug\")\n                    .IsRequired()\n                    .HasMaxLength(255);\n\n                b.Property<string>(\"Title\")\n                    .IsRequired()\n                    .HasMaxLength(255);\n\n                b.HasKey(\"Id\");\n\n                b.HasIndex(\"BlogId\");\n\n                b.HasIndex(\"Slug\");\n\n                b.ToTable(\"cs_Post\");\n\n\n            });\n\n\n\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n            {\n                b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\")\n                    .WithMany(\"PageComments\")\n                    .HasForeignKey(\"PageEntityId\");\n            });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageResourceEntity\", b =>\n            {\n                b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\")\n                    .WithMany(\"PageResources\")\n                    .HasForeignKey(\"PageEntityId\");\n            });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n            {\n                b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\")\n                    .WithMany(\"PostComments\")\n                    .HasForeignKey(\"PostEntityId\");\n            });\n\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.MSSQL/Migrations/20170724195300_changes20170724.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing Microsoft.EntityFrameworkCore.Migrations;\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.MSSQL.Migrations\n{\n    public partial class changes20170724 : Migration\n    {\n        protected override void Up(MigrationBuilder migrationBuilder)\n        {\n            migrationBuilder.AddColumn<string>(\n                name: \"MetaHtml\",\n                table: \"cs_Post\",\n                nullable: true);\n\n            migrationBuilder.AddColumn<string>(\n                name: \"MetaJson\",\n                table: \"cs_Post\",\n                nullable: true);\n\n            migrationBuilder.AddColumn<string>(\n                name: \"MetaHtml\",\n                table: \"cs_Page\",\n                nullable: true);\n\n            migrationBuilder.AddColumn<string>(\n                name: \"MetaJson\",\n                table: \"cs_Page\",\n                nullable: true);\n        }\n\n        protected override void Down(MigrationBuilder migrationBuilder)\n        {\n            migrationBuilder.DropColumn(\n                name: \"MetaHtml\",\n                table: \"cs_Post\");\n\n            migrationBuilder.DropColumn(\n                name: \"MetaJson\",\n                table: \"cs_Post\");\n\n            migrationBuilder.DropColumn(\n                name: \"MetaHtml\",\n                table: \"cs_Page\");\n\n            migrationBuilder.DropColumn(\n                name: \"MetaJson\",\n                table: \"cs_Page\");\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.MSSQL/Migrations/20170801140952_changes20170731.Designer.cs",
    "content": "﻿// <auto-generated />\nusing cloudscribe.SimpleContent.Storage.EFCore.MSSQL;\nusing Microsoft.EntityFrameworkCore;\nusing Microsoft.EntityFrameworkCore.Infrastructure;\nusing Microsoft.EntityFrameworkCore.Metadata;\nusing Microsoft.EntityFrameworkCore.Migrations;\nusing Microsoft.EntityFrameworkCore.Storage;\nusing Microsoft.EntityFrameworkCore.Storage.Internal;\nusing System;\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.MSSQL.Migrations\n{\n    [DbContext(typeof(SimpleContentDbContext))]\n    [Migration(\"20170801140952_changes20170731\")]\n    partial class changes20170731\n    {\n        protected override void BuildTargetModel(ModelBuilder modelBuilder)\n        {\n#pragma warning disable 612, 618\n            modelBuilder\n                .HasAnnotation(\"ProductVersion\", \"2.0.0-preview2-25794\")\n                .HasAnnotation(\"SqlServer:ValueGenerationStrategy\", SqlServerValueGenerationStrategy.IdentityColumn);\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Models.ProjectSettings\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<bool>(\"AddBlogToPagesTree\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"bit\")\n                        .HasDefaultValue(true);\n\n                    b.Property<bool>(\"BlogMenuLinksToNewestPost\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"bit\")\n                        .HasDefaultValue(false);\n\n                    b.Property<string>(\"BlogPageNavComponentVisibility\")\n                        .HasMaxLength(255);\n\n                    b.Property<int>(\"BlogPagePosition\");\n\n                    b.Property<string>(\"BlogPageText\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CdnUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ChannelCategoriesCsv\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ChannelRating\")\n                        .HasMaxLength(100);\n\n                    b.Property<int>(\"ChannelTimeToLive\");\n\n                    b.Property<string>(\"CommentNotificationEmail\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"CopyrightNotice\")\n                        .HasMaxLength(255);\n\n                    b.Property<int>(\"DaysToComment\");\n\n                    b.Property<string>(\"DefaultPageSlug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Description\");\n\n                    b.Property<string>(\"DisqusShortName\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"EmailFromAddress\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Image\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"IncludePubDateInPostUrls\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"bit\")\n                        .HasDefaultValue(true);\n\n                    b.Property<string>(\"LanguageCode\")\n                        .HasMaxLength(10);\n\n                    b.Property<string>(\"LocalMediaVirtualPath\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ManagingEditorEmail\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"ModerateComments\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"bit\")\n                        .HasDefaultValue(true);\n\n                    b.Property<int>(\"PostsPerPage\");\n\n                    b.Property<string>(\"PubDateFormat\")\n                        .HasMaxLength(75);\n\n                    b.Property<string>(\"Publisher\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"PublisherEntityType\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PublisherLogoHeight\")\n                        .HasMaxLength(20);\n\n                    b.Property<string>(\"PublisherLogoUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"PublisherLogoWidth\")\n                        .HasMaxLength(20);\n\n                    b.Property<string>(\"RecaptchaPrivateKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RecaptchaPublicKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RemoteFeedProcessorUseAgentFragment\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RemoteFeedUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"ShowRecentPostsOnDefaultPage\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"bit\")\n                        .HasDefaultValue(false);\n\n                    b.Property<bool>(\"ShowTitle\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"bit\")\n                        .HasDefaultValue(false);\n\n                    b.Property<string>(\"SmtpPassword\");\n\n                    b.Property<int>(\"SmtpPort\");\n\n                    b.Property<string>(\"SmtpPreferredEncoding\")\n                        .HasMaxLength(20);\n\n                    b.Property<bool>(\"SmtpRequiresAuth\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"bit\")\n                        .HasDefaultValue(false);\n\n                    b.Property<string>(\"SmtpServer\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"SmtpUseSsl\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"bit\")\n                        .HasDefaultValue(false);\n\n                    b.Property<string>(\"SmtpUser\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"TimeZoneId\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Title\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"UseDefaultPageAsRootNode\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"bit\")\n                        .HasDefaultValue(true);\n\n                    b.Property<bool>(\"UseMetaDescriptionInFeed\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"bit\")\n                        .HasDefaultValue(false);\n\n                    b.Property<string>(\"WebmasterEmail\")\n                        .HasMaxLength(100);\n\n                    b.HasKey(\"Id\");\n\n                    b.ToTable(\"cs_ContentProject\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageCategory\", b =>\n                {\n                    b.Property<string>(\"Value\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.HasKey(\"Value\", \"PageEntityId\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.HasIndex(\"Value\");\n\n                    b.ToTable(\"cs_PageCategory\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"Email\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Ip\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"IsAdmin\");\n\n                    b.Property<bool>(\"IsApproved\");\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<DateTime>(\"PubDate\");\n\n                    b.Property<string>(\"UserAgent\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Website\")\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_PageComment\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"DisableEditor\");\n\n                    b.Property<string>(\"ExternalUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"IsPublished\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"bit\")\n                        .HasDefaultValue(true);\n\n                    b.Property<DateTime>(\"LastModified\");\n\n                    b.Property<string>(\"MenuFilters\")\n                        .HasMaxLength(500);\n\n                    b.Property<bool>(\"MenuOnly\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"bit\")\n                        .HasDefaultValue(false);\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"MetaHtml\");\n\n                    b.Property<string>(\"MetaJson\");\n\n                    b.Property<int>(\"PageOrder\");\n\n                    b.Property<string>(\"ParentId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ParentSlug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<DateTime>(\"PubDate\");\n\n                    b.Property<bool>(\"ShowCategories\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"bit\")\n                        .HasDefaultValue(false);\n\n                    b.Property<bool>(\"ShowComments\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"bit\")\n                        .HasDefaultValue(false);\n\n                    b.Property<bool>(\"ShowHeading\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"bit\")\n                        .HasDefaultValue(true);\n\n                    b.Property<bool>(\"ShowLastModified\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"bit\")\n                        .HasDefaultValue(false);\n\n                    b.Property<bool>(\"ShowMenu\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"bit\")\n                        .HasDefaultValue(false);\n\n                    b.Property<bool>(\"ShowPubDate\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"bit\")\n                        .HasDefaultValue(false);\n\n                    b.Property<string>(\"Slug\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ViewRoles\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"ParentId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_Page\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageResourceEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Environment\")\n                        .IsRequired()\n                        .HasMaxLength(15);\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<int>(\"Sort\");\n\n                    b.Property<string>(\"Type\")\n                        .IsRequired()\n                        .HasMaxLength(10);\n\n                    b.Property<string>(\"Url\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.ToTable(\"cs_PageResource\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostCategory\", b =>\n                {\n                    b.Property<string>(\"Value\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PostEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.HasKey(\"Value\", \"PostEntityId\");\n\n                    b.HasIndex(\"PostEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.HasIndex(\"Value\");\n\n                    b.ToTable(\"cs_PostCategory\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"Email\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Ip\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"IsAdmin\");\n\n                    b.Property<bool>(\"IsApproved\");\n\n                    b.Property<string>(\"PostEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<DateTime>(\"PubDate\");\n\n                    b.Property<string>(\"UserAgent\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Website\")\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PostEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_PostComment\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"BlogId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"IsPublished\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"bit\")\n                        .HasDefaultValue(true);\n\n                    b.Property<DateTime>(\"LastModified\");\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"MetaHtml\");\n\n                    b.Property<string>(\"MetaJson\");\n\n                    b.Property<DateTime>(\"PubDate\");\n\n                    b.Property<string>(\"Slug\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"BlogId\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"Slug\");\n\n                    b.ToTable(\"cs_Post\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\")\n                        .WithMany(\"PageComments\")\n                        .HasForeignKey(\"PageEntityId\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageResourceEntity\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\")\n                        .WithMany(\"PageResources\")\n                        .HasForeignKey(\"PageEntityId\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\")\n                        .WithMany(\"PostComments\")\n                        .HasForeignKey(\"PostEntityId\");\n                });\n#pragma warning restore 612, 618\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.MSSQL/Migrations/20170801140952_changes20170731.cs",
    "content": "﻿using Microsoft.EntityFrameworkCore.Migrations;\nusing System;\nusing System.Collections.Generic;\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.MSSQL.Migrations\n{\n    public partial class changes20170731 : Migration\n    {\n        protected override void Up(MigrationBuilder migrationBuilder)\n        {\n            migrationBuilder.AlterColumn<bool>(\n                name: \"ShowHeading\",\n                table: \"cs_Page\",\n                type: \"bit\",\n                nullable: false,\n                defaultValue: true,\n                oldClrType: typeof(bool),\n                oldType: \"bit\",\n                oldDefaultValue: false);\n\n            migrationBuilder.AddColumn<bool>(\n                name: \"DisableEditor\",\n                table: \"cs_Page\",\n                type: \"bit\",\n                nullable: false,\n                defaultValue: false);\n        }\n\n        protected override void Down(MigrationBuilder migrationBuilder)\n        {\n            migrationBuilder.DropColumn(\n                name: \"DisableEditor\",\n                table: \"cs_Page\");\n\n            migrationBuilder.AlterColumn<bool>(\n                name: \"ShowHeading\",\n                table: \"cs_Page\",\n                type: \"bit\",\n                nullable: false,\n                defaultValue: false,\n                oldClrType: typeof(bool),\n                oldType: \"bit\",\n                oldDefaultValue: true);\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.MSSQL/Migrations/20170801141349_changes20170801.Designer.cs",
    "content": "﻿// <auto-generated />\nusing cloudscribe.SimpleContent.Storage.EFCore.MSSQL;\nusing Microsoft.EntityFrameworkCore;\nusing Microsoft.EntityFrameworkCore.Infrastructure;\nusing Microsoft.EntityFrameworkCore.Metadata;\nusing Microsoft.EntityFrameworkCore.Migrations;\nusing Microsoft.EntityFrameworkCore.Storage;\nusing Microsoft.EntityFrameworkCore.Storage.Internal;\nusing System;\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.MSSQL.Migrations\n{\n    [DbContext(typeof(SimpleContentDbContext))]\n    [Migration(\"20170801141349_changes20170801\")]\n    partial class changes20170801\n    {\n        protected override void BuildTargetModel(ModelBuilder modelBuilder)\n        {\n#pragma warning disable 612, 618\n            modelBuilder\n                .HasAnnotation(\"ProductVersion\", \"2.0.0-preview2-25794\")\n                .HasAnnotation(\"SqlServer:ValueGenerationStrategy\", SqlServerValueGenerationStrategy.IdentityColumn);\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Models.ProjectSettings\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<bool>(\"AddBlogToPagesTree\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"BlogMenuLinksToNewestPost\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"BlogPageNavComponentVisibility\")\n                        .HasMaxLength(255);\n\n                    b.Property<int>(\"BlogPagePosition\");\n\n                    b.Property<string>(\"BlogPageText\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CdnUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ChannelCategoriesCsv\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ChannelRating\")\n                        .HasMaxLength(100);\n\n                    b.Property<int>(\"ChannelTimeToLive\");\n\n                    b.Property<string>(\"CommentNotificationEmail\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"CopyrightNotice\")\n                        .HasMaxLength(255);\n\n                    b.Property<int>(\"DaysToComment\");\n\n                    b.Property<string>(\"DefaultPageSlug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Description\");\n\n                    b.Property<string>(\"DisqusShortName\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"EmailFromAddress\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Image\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"IncludePubDateInPostUrls\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"LanguageCode\")\n                        .HasMaxLength(10);\n\n                    b.Property<string>(\"LocalMediaVirtualPath\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ManagingEditorEmail\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"ModerateComments\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<int>(\"PostsPerPage\");\n\n                    b.Property<string>(\"PubDateFormat\")\n                        .HasMaxLength(75);\n\n                    b.Property<string>(\"Publisher\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"PublisherEntityType\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PublisherLogoHeight\")\n                        .HasMaxLength(20);\n\n                    b.Property<string>(\"PublisherLogoUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"PublisherLogoWidth\")\n                        .HasMaxLength(20);\n\n                    b.Property<string>(\"RecaptchaPrivateKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RecaptchaPublicKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RemoteFeedProcessorUseAgentFragment\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RemoteFeedUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"ShowRecentPostsOnDefaultPage\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"ShowTitle\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"SmtpPassword\");\n\n                    b.Property<int>(\"SmtpPort\");\n\n                    b.Property<string>(\"SmtpPreferredEncoding\")\n                        .HasMaxLength(20);\n\n                    b.Property<bool>(\"SmtpRequiresAuth\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"SmtpServer\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"SmtpUseSsl\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"SmtpUser\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"TimeZoneId\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Title\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"UseDefaultPageAsRootNode\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"UseMetaDescriptionInFeed\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"WebmasterEmail\")\n                        .HasMaxLength(100);\n\n                    b.HasKey(\"Id\");\n\n                    b.ToTable(\"cs_ContentProject\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageCategory\", b =>\n                {\n                    b.Property<string>(\"Value\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.HasKey(\"Value\", \"PageEntityId\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.HasIndex(\"Value\");\n\n                    b.ToTable(\"cs_PageCategory\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"Email\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Ip\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"IsAdmin\");\n\n                    b.Property<bool>(\"IsApproved\");\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<DateTime>(\"PubDate\");\n\n                    b.Property<string>(\"UserAgent\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Website\")\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_PageComment\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"DisableEditor\");\n\n                    b.Property<string>(\"ExternalUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"IsPublished\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<DateTime>(\"LastModified\");\n\n                    b.Property<string>(\"MenuFilters\")\n                        .HasMaxLength(500);\n\n                    b.Property<bool>(\"MenuOnly\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"MetaHtml\");\n\n                    b.Property<string>(\"MetaJson\");\n\n                    b.Property<int>(\"PageOrder\");\n\n                    b.Property<string>(\"ParentId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ParentSlug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<DateTime>(\"PubDate\");\n\n                    b.Property<bool>(\"ShowCategories\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"ShowComments\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"ShowHeading\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"ShowLastModified\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"ShowMenu\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"ShowPubDate\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"Slug\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ViewRoles\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"ParentId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_Page\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageResourceEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Environment\")\n                        .IsRequired()\n                        .HasMaxLength(15);\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<int>(\"Sort\");\n\n                    b.Property<string>(\"Type\")\n                        .IsRequired()\n                        .HasMaxLength(10);\n\n                    b.Property<string>(\"Url\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.ToTable(\"cs_PageResource\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostCategory\", b =>\n                {\n                    b.Property<string>(\"Value\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PostEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.HasKey(\"Value\", \"PostEntityId\");\n\n                    b.HasIndex(\"PostEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.HasIndex(\"Value\");\n\n                    b.ToTable(\"cs_PostCategory\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"Email\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Ip\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"IsAdmin\");\n\n                    b.Property<bool>(\"IsApproved\");\n\n                    b.Property<string>(\"PostEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<DateTime>(\"PubDate\");\n\n                    b.Property<string>(\"UserAgent\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Website\")\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PostEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_PostComment\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"BlogId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"IsPublished\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<DateTime>(\"LastModified\");\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"MetaHtml\");\n\n                    b.Property<string>(\"MetaJson\");\n\n                    b.Property<DateTime>(\"PubDate\");\n\n                    b.Property<string>(\"Slug\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"BlogId\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"Slug\");\n\n                    b.ToTable(\"cs_Post\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\")\n                        .WithMany(\"PageComments\")\n                        .HasForeignKey(\"PageEntityId\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageResourceEntity\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\")\n                        .WithMany(\"PageResources\")\n                        .HasForeignKey(\"PageEntityId\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\")\n                        .WithMany(\"PostComments\")\n                        .HasForeignKey(\"PostEntityId\");\n                });\n#pragma warning restore 612, 618\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.MSSQL/Migrations/20170801141349_changes20170801.cs",
    "content": "﻿using Microsoft.EntityFrameworkCore.Migrations;\nusing System;\nusing System.Collections.Generic;\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.MSSQL.Migrations\n{\n    public partial class changes20170801 : Migration\n    {\n        protected override void Up(MigrationBuilder migrationBuilder)\n        {\n            migrationBuilder.AlterColumn<bool>(\n                name: \"IsPublished\",\n                table: \"cs_Post\",\n                type: \"bit\",\n                nullable: false,\n                oldClrType: typeof(bool),\n                oldType: \"bit\",\n                oldDefaultValue: true);\n\n            migrationBuilder.AlterColumn<bool>(\n                name: \"ShowPubDate\",\n                table: \"cs_Page\",\n                type: \"bit\",\n                nullable: false,\n                oldClrType: typeof(bool),\n                oldType: \"bit\",\n                oldDefaultValue: false);\n\n            migrationBuilder.AlterColumn<bool>(\n                name: \"ShowMenu\",\n                table: \"cs_Page\",\n                type: \"bit\",\n                nullable: false,\n                oldClrType: typeof(bool),\n                oldType: \"bit\",\n                oldDefaultValue: false);\n\n            migrationBuilder.AlterColumn<bool>(\n                name: \"ShowLastModified\",\n                table: \"cs_Page\",\n                type: \"bit\",\n                nullable: false,\n                oldClrType: typeof(bool),\n                oldType: \"bit\",\n                oldDefaultValue: false);\n\n            migrationBuilder.AlterColumn<bool>(\n                name: \"ShowHeading\",\n                table: \"cs_Page\",\n                type: \"bit\",\n                nullable: false,\n                oldClrType: typeof(bool),\n                oldType: \"bit\",\n                oldDefaultValue: true);\n\n            migrationBuilder.AlterColumn<bool>(\n                name: \"ShowComments\",\n                table: \"cs_Page\",\n                type: \"bit\",\n                nullable: false,\n                oldClrType: typeof(bool),\n                oldType: \"bit\",\n                oldDefaultValue: false);\n\n            migrationBuilder.AlterColumn<bool>(\n                name: \"ShowCategories\",\n                table: \"cs_Page\",\n                type: \"bit\",\n                nullable: false,\n                oldClrType: typeof(bool),\n                oldType: \"bit\",\n                oldDefaultValue: false);\n\n            migrationBuilder.AlterColumn<bool>(\n                name: \"MenuOnly\",\n                table: \"cs_Page\",\n                type: \"bit\",\n                nullable: false,\n                oldClrType: typeof(bool),\n                oldType: \"bit\",\n                oldDefaultValue: false);\n\n            migrationBuilder.AlterColumn<bool>(\n                name: \"IsPublished\",\n                table: \"cs_Page\",\n                type: \"bit\",\n                nullable: false,\n                oldClrType: typeof(bool),\n                oldType: \"bit\",\n                oldDefaultValue: true);\n\n            migrationBuilder.AlterColumn<bool>(\n                name: \"UseMetaDescriptionInFeed\",\n                table: \"cs_ContentProject\",\n                type: \"bit\",\n                nullable: false,\n                oldClrType: typeof(bool),\n                oldType: \"bit\",\n                oldDefaultValue: false);\n\n            migrationBuilder.AlterColumn<bool>(\n                name: \"UseDefaultPageAsRootNode\",\n                table: \"cs_ContentProject\",\n                type: \"bit\",\n                nullable: false,\n                oldClrType: typeof(bool),\n                oldType: \"bit\",\n                oldDefaultValue: true);\n\n            migrationBuilder.AlterColumn<bool>(\n                name: \"SmtpUseSsl\",\n                table: \"cs_ContentProject\",\n                type: \"bit\",\n                nullable: false,\n                oldClrType: typeof(bool),\n                oldType: \"bit\",\n                oldDefaultValue: false);\n\n            migrationBuilder.AlterColumn<bool>(\n                name: \"SmtpRequiresAuth\",\n                table: \"cs_ContentProject\",\n                type: \"bit\",\n                nullable: false,\n                oldClrType: typeof(bool),\n                oldType: \"bit\",\n                oldDefaultValue: false);\n\n            migrationBuilder.AlterColumn<bool>(\n                name: \"ShowTitle\",\n                table: \"cs_ContentProject\",\n                type: \"bit\",\n                nullable: false,\n                oldClrType: typeof(bool),\n                oldType: \"bit\",\n                oldDefaultValue: false);\n\n            migrationBuilder.AlterColumn<bool>(\n                name: \"ShowRecentPostsOnDefaultPage\",\n                table: \"cs_ContentProject\",\n                type: \"bit\",\n                nullable: false,\n                oldClrType: typeof(bool),\n                oldType: \"bit\",\n                oldDefaultValue: false);\n\n            migrationBuilder.AlterColumn<bool>(\n                name: \"ModerateComments\",\n                table: \"cs_ContentProject\",\n                type: \"bit\",\n                nullable: false,\n                oldClrType: typeof(bool),\n                oldType: \"bit\",\n                oldDefaultValue: true);\n\n            migrationBuilder.AlterColumn<bool>(\n                name: \"IncludePubDateInPostUrls\",\n                table: \"cs_ContentProject\",\n                type: \"bit\",\n                nullable: false,\n                oldClrType: typeof(bool),\n                oldType: \"bit\",\n                oldDefaultValue: true);\n\n            migrationBuilder.AlterColumn<bool>(\n                name: \"BlogMenuLinksToNewestPost\",\n                table: \"cs_ContentProject\",\n                type: \"bit\",\n                nullable: false,\n                oldClrType: typeof(bool),\n                oldType: \"bit\",\n                oldDefaultValue: false);\n\n            migrationBuilder.AlterColumn<bool>(\n                name: \"AddBlogToPagesTree\",\n                table: \"cs_ContentProject\",\n                type: \"bit\",\n                nullable: false,\n                oldClrType: typeof(bool),\n                oldType: \"bit\",\n                oldDefaultValue: true);\n        }\n\n        protected override void Down(MigrationBuilder migrationBuilder)\n        {\n            migrationBuilder.AlterColumn<bool>(\n                name: \"IsPublished\",\n                table: \"cs_Post\",\n                type: \"bit\",\n                nullable: false,\n                defaultValue: true,\n                oldClrType: typeof(bool),\n                oldType: \"bit\");\n\n            migrationBuilder.AlterColumn<bool>(\n                name: \"ShowPubDate\",\n                table: \"cs_Page\",\n                type: \"bit\",\n                nullable: false,\n                defaultValue: false,\n                oldClrType: typeof(bool),\n                oldType: \"bit\");\n\n            migrationBuilder.AlterColumn<bool>(\n                name: \"ShowMenu\",\n                table: \"cs_Page\",\n                type: \"bit\",\n                nullable: false,\n                defaultValue: false,\n                oldClrType: typeof(bool),\n                oldType: \"bit\");\n\n            migrationBuilder.AlterColumn<bool>(\n                name: \"ShowLastModified\",\n                table: \"cs_Page\",\n                type: \"bit\",\n                nullable: false,\n                defaultValue: false,\n                oldClrType: typeof(bool),\n                oldType: \"bit\");\n\n            migrationBuilder.AlterColumn<bool>(\n                name: \"ShowHeading\",\n                table: \"cs_Page\",\n                type: \"bit\",\n                nullable: false,\n                defaultValue: true,\n                oldClrType: typeof(bool),\n                oldType: \"bit\");\n\n            migrationBuilder.AlterColumn<bool>(\n                name: \"ShowComments\",\n                table: \"cs_Page\",\n                type: \"bit\",\n                nullable: false,\n                defaultValue: false,\n                oldClrType: typeof(bool),\n                oldType: \"bit\");\n\n            migrationBuilder.AlterColumn<bool>(\n                name: \"ShowCategories\",\n                table: \"cs_Page\",\n                type: \"bit\",\n                nullable: false,\n                defaultValue: false,\n                oldClrType: typeof(bool),\n                oldType: \"bit\");\n\n            migrationBuilder.AlterColumn<bool>(\n                name: \"MenuOnly\",\n                table: \"cs_Page\",\n                type: \"bit\",\n                nullable: false,\n                defaultValue: false,\n                oldClrType: typeof(bool),\n                oldType: \"bit\");\n\n            migrationBuilder.AlterColumn<bool>(\n                name: \"IsPublished\",\n                table: \"cs_Page\",\n                type: \"bit\",\n                nullable: false,\n                defaultValue: true,\n                oldClrType: typeof(bool),\n                oldType: \"bit\");\n\n            migrationBuilder.AlterColumn<bool>(\n                name: \"UseMetaDescriptionInFeed\",\n                table: \"cs_ContentProject\",\n                type: \"bit\",\n                nullable: false,\n                defaultValue: false,\n                oldClrType: typeof(bool),\n                oldType: \"bit\");\n\n            migrationBuilder.AlterColumn<bool>(\n                name: \"UseDefaultPageAsRootNode\",\n                table: \"cs_ContentProject\",\n                type: \"bit\",\n                nullable: false,\n                defaultValue: true,\n                oldClrType: typeof(bool),\n                oldType: \"bit\");\n\n            migrationBuilder.AlterColumn<bool>(\n                name: \"SmtpUseSsl\",\n                table: \"cs_ContentProject\",\n                type: \"bit\",\n                nullable: false,\n                defaultValue: false,\n                oldClrType: typeof(bool),\n                oldType: \"bit\");\n\n            migrationBuilder.AlterColumn<bool>(\n                name: \"SmtpRequiresAuth\",\n                table: \"cs_ContentProject\",\n                type: \"bit\",\n                nullable: false,\n                defaultValue: false,\n                oldClrType: typeof(bool),\n                oldType: \"bit\");\n\n            migrationBuilder.AlterColumn<bool>(\n                name: \"ShowTitle\",\n                table: \"cs_ContentProject\",\n                type: \"bit\",\n                nullable: false,\n                defaultValue: false,\n                oldClrType: typeof(bool),\n                oldType: \"bit\");\n\n            migrationBuilder.AlterColumn<bool>(\n                name: \"ShowRecentPostsOnDefaultPage\",\n                table: \"cs_ContentProject\",\n                type: \"bit\",\n                nullable: false,\n                defaultValue: false,\n                oldClrType: typeof(bool),\n                oldType: \"bit\");\n\n            migrationBuilder.AlterColumn<bool>(\n                name: \"ModerateComments\",\n                table: \"cs_ContentProject\",\n                type: \"bit\",\n                nullable: false,\n                defaultValue: true,\n                oldClrType: typeof(bool),\n                oldType: \"bit\");\n\n            migrationBuilder.AlterColumn<bool>(\n                name: \"IncludePubDateInPostUrls\",\n                table: \"cs_ContentProject\",\n                type: \"bit\",\n                nullable: false,\n                defaultValue: true,\n                oldClrType: typeof(bool),\n                oldType: \"bit\");\n\n            migrationBuilder.AlterColumn<bool>(\n                name: \"BlogMenuLinksToNewestPost\",\n                table: \"cs_ContentProject\",\n                type: \"bit\",\n                nullable: false,\n                defaultValue: false,\n                oldClrType: typeof(bool),\n                oldType: \"bit\");\n\n            migrationBuilder.AlterColumn<bool>(\n                name: \"AddBlogToPagesTree\",\n                table: \"cs_ContentProject\",\n                type: \"bit\",\n                nullable: false,\n                defaultValue: true,\n                oldClrType: typeof(bool),\n                oldType: \"bit\");\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.MSSQL/Migrations/20171005175655_changes20171005.Designer.cs",
    "content": "﻿// <auto-generated />\nusing cloudscribe.SimpleContent.Storage.EFCore.MSSQL;\nusing Microsoft.EntityFrameworkCore;\nusing Microsoft.EntityFrameworkCore.Infrastructure;\nusing Microsoft.EntityFrameworkCore.Metadata;\nusing Microsoft.EntityFrameworkCore.Migrations;\nusing Microsoft.EntityFrameworkCore.Storage;\nusing Microsoft.EntityFrameworkCore.Storage.Internal;\nusing System;\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.MSSQL.Migrations\n{\n    [DbContext(typeof(SimpleContentDbContext))]\n    [Migration(\"20171005175655_changes20171005\")]\n    partial class changes20171005\n    {\n        protected override void BuildTargetModel(ModelBuilder modelBuilder)\n        {\n#pragma warning disable 612, 618\n            modelBuilder\n                .HasAnnotation(\"ProductVersion\", \"2.0.0-rtm-26452\")\n                .HasAnnotation(\"SqlServer:ValueGenerationStrategy\", SqlServerValueGenerationStrategy.IdentityColumn);\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Models.ProjectSettings\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<bool>(\"AddBlogToPagesTree\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"BlogMenuLinksToNewestPost\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"BlogPageNavComponentVisibility\")\n                        .HasMaxLength(255);\n\n                    b.Property<int>(\"BlogPagePosition\");\n\n                    b.Property<string>(\"BlogPageText\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CdnUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ChannelCategoriesCsv\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ChannelRating\")\n                        .HasMaxLength(100);\n\n                    b.Property<int>(\"ChannelTimeToLive\");\n\n                    b.Property<string>(\"CommentNotificationEmail\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"CopyrightNotice\")\n                        .HasMaxLength(255);\n\n                    b.Property<int>(\"DaysToComment\");\n\n                    b.Property<string>(\"DefaultPageSlug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Description\");\n\n                    b.Property<string>(\"DisqusShortName\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"EmailFromAddress\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Image\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"IncludePubDateInPostUrls\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"LanguageCode\")\n                        .HasMaxLength(10);\n\n                    b.Property<string>(\"LocalMediaVirtualPath\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ManagingEditorEmail\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"ModerateComments\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<int>(\"PostsPerPage\");\n\n                    b.Property<string>(\"PubDateFormat\")\n                        .HasMaxLength(75);\n\n                    b.Property<string>(\"Publisher\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"PublisherEntityType\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PublisherLogoHeight\")\n                        .HasMaxLength(20);\n\n                    b.Property<string>(\"PublisherLogoUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"PublisherLogoWidth\")\n                        .HasMaxLength(20);\n\n                    b.Property<string>(\"RecaptchaPrivateKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RecaptchaPublicKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RemoteFeedProcessorUseAgentFragment\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RemoteFeedUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"ShowFeaturedPostsOnDefaultPage\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"ShowRecentPostsOnDefaultPage\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"ShowTitle\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"SmtpPassword\");\n\n                    b.Property<int>(\"SmtpPort\");\n\n                    b.Property<string>(\"SmtpPreferredEncoding\")\n                        .HasMaxLength(20);\n\n                    b.Property<bool>(\"SmtpRequiresAuth\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"SmtpServer\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"SmtpUseSsl\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"SmtpUser\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"TimeZoneId\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Title\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"UseDefaultPageAsRootNode\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"UseMetaDescriptionInFeed\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"WebmasterEmail\")\n                        .HasMaxLength(100);\n\n                    b.HasKey(\"Id\");\n\n                    b.ToTable(\"cs_ContentProject\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageCategory\", b =>\n                {\n                    b.Property<string>(\"Value\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.HasKey(\"Value\", \"PageEntityId\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.HasIndex(\"Value\");\n\n                    b.ToTable(\"cs_PageCategory\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"Email\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Ip\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"IsAdmin\");\n\n                    b.Property<bool>(\"IsApproved\");\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<DateTime>(\"PubDate\");\n\n                    b.Property<string>(\"UserAgent\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Website\")\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_PageComment\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"DisableEditor\");\n\n                    b.Property<string>(\"ExternalUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"IsPublished\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<DateTime>(\"LastModified\");\n\n                    b.Property<string>(\"MenuFilters\")\n                        .HasMaxLength(500);\n\n                    b.Property<bool>(\"MenuOnly\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"MetaHtml\");\n\n                    b.Property<string>(\"MetaJson\");\n\n                    b.Property<int>(\"PageOrder\");\n\n                    b.Property<string>(\"ParentId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ParentSlug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<DateTime>(\"PubDate\");\n\n                    b.Property<bool>(\"ShowCategories\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"ShowComments\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"ShowHeading\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"ShowLastModified\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"ShowMenu\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"ShowPubDate\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"Slug\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ViewRoles\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"ParentId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_Page\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageResourceEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Environment\")\n                        .IsRequired()\n                        .HasMaxLength(15);\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<int>(\"Sort\");\n\n                    b.Property<string>(\"Type\")\n                        .IsRequired()\n                        .HasMaxLength(10);\n\n                    b.Property<string>(\"Url\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.ToTable(\"cs_PageResource\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostCategory\", b =>\n                {\n                    b.Property<string>(\"Value\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PostEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.HasKey(\"Value\", \"PostEntityId\");\n\n                    b.HasIndex(\"PostEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.HasIndex(\"Value\");\n\n                    b.ToTable(\"cs_PostCategory\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"Email\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Ip\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"IsAdmin\");\n\n                    b.Property<bool>(\"IsApproved\");\n\n                    b.Property<string>(\"PostEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<DateTime>(\"PubDate\");\n\n                    b.Property<string>(\"UserAgent\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Website\")\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PostEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_PostComment\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"BlogId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ImageUrl\")\n                        .HasMaxLength(250);\n\n                    b.Property<bool>(\"IsFeatured\");\n\n                    b.Property<bool>(\"IsPublished\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<DateTime>(\"LastModified\");\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"MetaHtml\");\n\n                    b.Property<string>(\"MetaJson\");\n\n                    b.Property<DateTime>(\"PubDate\");\n\n                    b.Property<string>(\"Slug\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ThumbnailUrl\")\n                        .HasMaxLength(250);\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"BlogId\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"Slug\");\n\n                    b.ToTable(\"cs_Post\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\")\n                        .WithMany(\"PageComments\")\n                        .HasForeignKey(\"PageEntityId\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageResourceEntity\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\")\n                        .WithMany(\"PageResources\")\n                        .HasForeignKey(\"PageEntityId\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\")\n                        .WithMany(\"PostComments\")\n                        .HasForeignKey(\"PostEntityId\");\n                });\n#pragma warning restore 612, 618\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.MSSQL/Migrations/20171005175655_changes20171005.cs",
    "content": "﻿using Microsoft.EntityFrameworkCore.Migrations;\nusing System;\nusing System.Collections.Generic;\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.MSSQL.Migrations\n{\n    public partial class changes20171005 : Migration\n    {\n        protected override void Up(MigrationBuilder migrationBuilder)\n        {\n            migrationBuilder.AddColumn<string>(\n                name: \"ImageUrl\",\n                table: \"cs_Post\",\n                type: \"nvarchar(250)\",\n                maxLength: 250,\n                nullable: true);\n\n            migrationBuilder.AddColumn<bool>(\n                name: \"IsFeatured\",\n                table: \"cs_Post\",\n                type: \"bit\",\n                nullable: false,\n                defaultValue: false);\n\n            migrationBuilder.AddColumn<string>(\n                name: \"ThumbnailUrl\",\n                table: \"cs_Post\",\n                type: \"nvarchar(250)\",\n                maxLength: 250,\n                nullable: true);\n\n            migrationBuilder.AddColumn<bool>(\n                name: \"ShowFeaturedPostsOnDefaultPage\",\n                table: \"cs_ContentProject\",\n                type: \"bit\",\n                nullable: false,\n                defaultValue: false);\n        }\n\n        protected override void Down(MigrationBuilder migrationBuilder)\n        {\n            migrationBuilder.DropColumn(\n                name: \"ImageUrl\",\n                table: \"cs_Post\");\n\n            migrationBuilder.DropColumn(\n                name: \"IsFeatured\",\n                table: \"cs_Post\");\n\n            migrationBuilder.DropColumn(\n                name: \"ThumbnailUrl\",\n                table: \"cs_Post\");\n\n            migrationBuilder.DropColumn(\n                name: \"ShowFeaturedPostsOnDefaultPage\",\n                table: \"cs_ContentProject\");\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.MSSQL/Migrations/20171016103054_changes20171016.Designer.cs",
    "content": "﻿// <auto-generated />\nusing cloudscribe.SimpleContent.Storage.EFCore.MSSQL;\nusing Microsoft.EntityFrameworkCore;\nusing Microsoft.EntityFrameworkCore.Infrastructure;\nusing Microsoft.EntityFrameworkCore.Metadata;\nusing Microsoft.EntityFrameworkCore.Migrations;\nusing Microsoft.EntityFrameworkCore.Storage;\nusing Microsoft.EntityFrameworkCore.Storage.Internal;\nusing System;\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.MSSQL.Migrations\n{\n    [DbContext(typeof(SimpleContentDbContext))]\n    [Migration(\"20171016103054_changes20171016\")]\n    partial class changes20171016\n    {\n        protected override void BuildTargetModel(ModelBuilder modelBuilder)\n        {\n#pragma warning disable 612, 618\n            modelBuilder\n                .HasAnnotation(\"ProductVersion\", \"2.0.0-rtm-26452\")\n                .HasAnnotation(\"SqlServer:ValueGenerationStrategy\", SqlServerValueGenerationStrategy.IdentityColumn);\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Models.ProjectSettings\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<bool>(\"AddBlogToPagesTree\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"BlogMenuLinksToNewestPost\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"BlogPageNavComponentVisibility\")\n                        .HasMaxLength(255);\n\n                    b.Property<int>(\"BlogPagePosition\");\n\n                    b.Property<string>(\"BlogPageText\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CdnUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ChannelCategoriesCsv\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ChannelRating\")\n                        .HasMaxLength(100);\n\n                    b.Property<int>(\"ChannelTimeToLive\");\n\n                    b.Property<string>(\"CommentNotificationEmail\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"CopyrightNotice\")\n                        .HasMaxLength(255);\n\n                    b.Property<int>(\"DaysToComment\");\n\n                    b.Property<string>(\"DefaultPageSlug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Description\");\n\n                    b.Property<string>(\"DisqusShortName\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"EmailFromAddress\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"FacebookAppId\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Image\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"IncludePubDateInPostUrls\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"LanguageCode\")\n                        .HasMaxLength(10);\n\n                    b.Property<string>(\"LocalMediaVirtualPath\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ManagingEditorEmail\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"ModerateComments\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<int>(\"PostsPerPage\");\n\n                    b.Property<string>(\"PubDateFormat\")\n                        .HasMaxLength(75);\n\n                    b.Property<string>(\"Publisher\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"PublisherEntityType\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PublisherLogoHeight\")\n                        .HasMaxLength(20);\n\n                    b.Property<string>(\"PublisherLogoUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"PublisherLogoWidth\")\n                        .HasMaxLength(20);\n\n                    b.Property<string>(\"RecaptchaPrivateKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RecaptchaPublicKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RemoteFeedProcessorUseAgentFragment\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RemoteFeedUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"ShowFeaturedPostsOnDefaultPage\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"ShowRecentPostsOnDefaultPage\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"ShowTitle\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"SiteName\")\n                        .HasMaxLength(200);\n\n                    b.Property<string>(\"SmtpPassword\");\n\n                    b.Property<int>(\"SmtpPort\");\n\n                    b.Property<string>(\"SmtpPreferredEncoding\")\n                        .HasMaxLength(20);\n\n                    b.Property<bool>(\"SmtpRequiresAuth\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"SmtpServer\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"SmtpUseSsl\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"SmtpUser\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"TimeZoneId\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Title\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"TwitterCreator\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"TwitterPublisher\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"UseDefaultPageAsRootNode\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"UseMetaDescriptionInFeed\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"WebmasterEmail\")\n                        .HasMaxLength(100);\n\n                    b.HasKey(\"Id\");\n\n                    b.ToTable(\"cs_ContentProject\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageCategory\", b =>\n                {\n                    b.Property<string>(\"Value\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.HasKey(\"Value\", \"PageEntityId\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.HasIndex(\"Value\");\n\n                    b.ToTable(\"cs_PageCategory\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"Email\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Ip\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"IsAdmin\");\n\n                    b.Property<bool>(\"IsApproved\");\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<DateTime>(\"PubDate\");\n\n                    b.Property<string>(\"UserAgent\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Website\")\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_PageComment\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"DisableEditor\");\n\n                    b.Property<string>(\"ExternalUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"IsPublished\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<DateTime>(\"LastModified\");\n\n                    b.Property<string>(\"MenuFilters\")\n                        .HasMaxLength(500);\n\n                    b.Property<bool>(\"MenuOnly\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"MetaHtml\");\n\n                    b.Property<string>(\"MetaJson\");\n\n                    b.Property<int>(\"PageOrder\");\n\n                    b.Property<string>(\"ParentId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ParentSlug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<DateTime>(\"PubDate\");\n\n                    b.Property<bool>(\"ShowCategories\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"ShowComments\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"ShowHeading\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"ShowLastModified\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"ShowMenu\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"ShowPubDate\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"Slug\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ViewRoles\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"ParentId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_Page\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageResourceEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Environment\")\n                        .IsRequired()\n                        .HasMaxLength(15);\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<int>(\"Sort\");\n\n                    b.Property<string>(\"Type\")\n                        .IsRequired()\n                        .HasMaxLength(10);\n\n                    b.Property<string>(\"Url\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.ToTable(\"cs_PageResource\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostCategory\", b =>\n                {\n                    b.Property<string>(\"Value\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PostEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.HasKey(\"Value\", \"PostEntityId\");\n\n                    b.HasIndex(\"PostEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.HasIndex(\"Value\");\n\n                    b.ToTable(\"cs_PostCategory\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"Email\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Ip\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"IsAdmin\");\n\n                    b.Property<bool>(\"IsApproved\");\n\n                    b.Property<string>(\"PostEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<DateTime>(\"PubDate\");\n\n                    b.Property<string>(\"UserAgent\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Website\")\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PostEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_PostComment\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"BlogId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ImageUrl\")\n                        .HasMaxLength(250);\n\n                    b.Property<bool>(\"IsFeatured\");\n\n                    b.Property<bool>(\"IsPublished\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<DateTime>(\"LastModified\");\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"MetaHtml\");\n\n                    b.Property<string>(\"MetaJson\");\n\n                    b.Property<DateTime>(\"PubDate\");\n\n                    b.Property<string>(\"Slug\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ThumbnailUrl\")\n                        .HasMaxLength(250);\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"BlogId\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"Slug\");\n\n                    b.ToTable(\"cs_Post\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\")\n                        .WithMany(\"PageComments\")\n                        .HasForeignKey(\"PageEntityId\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageResourceEntity\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\")\n                        .WithMany(\"PageResources\")\n                        .HasForeignKey(\"PageEntityId\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\")\n                        .WithMany(\"PostComments\")\n                        .HasForeignKey(\"PostEntityId\");\n                });\n#pragma warning restore 612, 618\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.MSSQL/Migrations/20171016103054_changes20171016.cs",
    "content": "﻿using Microsoft.EntityFrameworkCore.Migrations;\nusing System;\nusing System.Collections.Generic;\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.MSSQL.Migrations\n{\n    public partial class changes20171016 : Migration\n    {\n        protected override void Up(MigrationBuilder migrationBuilder)\n        {\n            migrationBuilder.AddColumn<string>(\n                name: \"FacebookAppId\",\n                table: \"cs_ContentProject\",\n                type: \"nvarchar(100)\",\n                maxLength: 100,\n                nullable: true);\n\n            migrationBuilder.AddColumn<string>(\n                name: \"SiteName\",\n                table: \"cs_ContentProject\",\n                type: \"nvarchar(200)\",\n                maxLength: 200,\n                nullable: true);\n\n            migrationBuilder.AddColumn<string>(\n                name: \"TwitterCreator\",\n                table: \"cs_ContentProject\",\n                type: \"nvarchar(100)\",\n                maxLength: 100,\n                nullable: true);\n\n            migrationBuilder.AddColumn<string>(\n                name: \"TwitterPublisher\",\n                table: \"cs_ContentProject\",\n                type: \"nvarchar(100)\",\n                maxLength: 100,\n                nullable: true);\n        }\n\n        protected override void Down(MigrationBuilder migrationBuilder)\n        {\n            migrationBuilder.DropColumn(\n                name: \"FacebookAppId\",\n                table: \"cs_ContentProject\");\n\n            migrationBuilder.DropColumn(\n                name: \"SiteName\",\n                table: \"cs_ContentProject\");\n\n            migrationBuilder.DropColumn(\n                name: \"TwitterCreator\",\n                table: \"cs_ContentProject\");\n\n            migrationBuilder.DropColumn(\n                name: \"TwitterPublisher\",\n                table: \"cs_ContentProject\");\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.MSSQL/Migrations/20171118193027_changes20171118.Designer.cs",
    "content": "﻿// <auto-generated />\nusing cloudscribe.SimpleContent.Storage.EFCore.MSSQL;\nusing Microsoft.EntityFrameworkCore;\nusing Microsoft.EntityFrameworkCore.Infrastructure;\nusing Microsoft.EntityFrameworkCore.Metadata;\nusing Microsoft.EntityFrameworkCore.Migrations;\nusing Microsoft.EntityFrameworkCore.Storage;\nusing Microsoft.EntityFrameworkCore.Storage.Internal;\nusing System;\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.MSSQL.Migrations\n{\n    [DbContext(typeof(SimpleContentDbContext))]\n    [Migration(\"20171118193027_changes20171118\")]\n    partial class changes20171118\n    {\n        protected override void BuildTargetModel(ModelBuilder modelBuilder)\n        {\n#pragma warning disable 612, 618\n            modelBuilder\n                .HasAnnotation(\"ProductVersion\", \"2.0.1-rtm-125\")\n                .HasAnnotation(\"SqlServer:ValueGenerationStrategy\", SqlServerValueGenerationStrategy.IdentityColumn);\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Models.ProjectSettings\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<bool>(\"AddBlogToPagesTree\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"BlogMenuLinksToNewestPost\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"BlogPageNavComponentVisibility\")\n                        .HasMaxLength(255);\n\n                    b.Property<int>(\"BlogPagePosition\");\n\n                    b.Property<string>(\"BlogPageText\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CdnUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ChannelCategoriesCsv\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ChannelRating\")\n                        .HasMaxLength(100);\n\n                    b.Property<int>(\"ChannelTimeToLive\");\n\n                    b.Property<string>(\"CommentNotificationEmail\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"CopyrightNotice\")\n                        .HasMaxLength(255);\n\n                    b.Property<int>(\"DaysToComment\");\n\n                    b.Property<string>(\"DefaultContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue(\"html\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"DefaultPageSlug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Description\");\n\n                    b.Property<string>(\"DisqusShortName\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"EmailFromAddress\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"FacebookAppId\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Image\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"IncludePubDateInPostUrls\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"LanguageCode\")\n                        .HasMaxLength(10);\n\n                    b.Property<string>(\"LocalMediaVirtualPath\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ManagingEditorEmail\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"ModerateComments\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<int>(\"PostsPerPage\");\n\n                    b.Property<string>(\"PubDateFormat\")\n                        .HasMaxLength(75);\n\n                    b.Property<string>(\"Publisher\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"PublisherEntityType\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PublisherLogoHeight\")\n                        .HasMaxLength(20);\n\n                    b.Property<string>(\"PublisherLogoUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"PublisherLogoWidth\")\n                        .HasMaxLength(20);\n\n                    b.Property<string>(\"RecaptchaPrivateKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RecaptchaPublicKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RemoteFeedProcessorUseAgentFragment\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RemoteFeedUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"ShowFeaturedPostsOnDefaultPage\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"ShowRecentPostsOnDefaultPage\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"ShowTitle\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"SiteName\")\n                        .HasMaxLength(200);\n\n                    b.Property<string>(\"SmtpPassword\");\n\n                    b.Property<int>(\"SmtpPort\");\n\n                    b.Property<string>(\"SmtpPreferredEncoding\")\n                        .HasMaxLength(20);\n\n                    b.Property<bool>(\"SmtpRequiresAuth\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"SmtpServer\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"SmtpUseSsl\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"SmtpUser\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"TimeZoneId\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Title\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"TwitterCreator\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"TwitterPublisher\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"UseDefaultPageAsRootNode\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"UseMetaDescriptionInFeed\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"WebmasterEmail\")\n                        .HasMaxLength(100);\n\n                    b.HasKey(\"Id\");\n\n                    b.ToTable(\"cs_ContentProject\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageCategory\", b =>\n                {\n                    b.Property<string>(\"Value\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.HasKey(\"Value\", \"PageEntityId\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.HasIndex(\"Value\");\n\n                    b.ToTable(\"cs_PageCategory\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"Email\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Ip\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"IsAdmin\");\n\n                    b.Property<bool>(\"IsApproved\");\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<DateTime>(\"PubDate\");\n\n                    b.Property<string>(\"UserAgent\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Website\")\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_PageComment\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue(\"html\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"DisableEditor\");\n\n                    b.Property<string>(\"ExternalUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"IsPublished\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<DateTime>(\"LastModified\");\n\n                    b.Property<string>(\"MenuFilters\")\n                        .HasMaxLength(500);\n\n                    b.Property<bool>(\"MenuOnly\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"MetaHtml\");\n\n                    b.Property<string>(\"MetaJson\");\n\n                    b.Property<int>(\"PageOrder\");\n\n                    b.Property<string>(\"ParentId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ParentSlug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<DateTime>(\"PubDate\");\n\n                    b.Property<bool>(\"ShowCategories\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"ShowComments\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"ShowHeading\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"ShowLastModified\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"ShowMenu\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"ShowPubDate\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"Slug\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ViewRoles\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"ParentId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_Page\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageResourceEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Environment\")\n                        .IsRequired()\n                        .HasMaxLength(15);\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<int>(\"Sort\");\n\n                    b.Property<string>(\"Type\")\n                        .IsRequired()\n                        .HasMaxLength(10);\n\n                    b.Property<string>(\"Url\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.ToTable(\"cs_PageResource\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostCategory\", b =>\n                {\n                    b.Property<string>(\"Value\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PostEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.HasKey(\"Value\", \"PostEntityId\");\n\n                    b.HasIndex(\"PostEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.HasIndex(\"Value\");\n\n                    b.ToTable(\"cs_PostCategory\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"Email\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Ip\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"IsAdmin\");\n\n                    b.Property<bool>(\"IsApproved\");\n\n                    b.Property<string>(\"PostEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<DateTime>(\"PubDate\");\n\n                    b.Property<string>(\"UserAgent\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Website\")\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PostEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_PostComment\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"BlogId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue(\"html\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ImageUrl\")\n                        .HasMaxLength(250);\n\n                    b.Property<bool>(\"IsFeatured\");\n\n                    b.Property<bool>(\"IsPublished\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<DateTime>(\"LastModified\");\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"MetaHtml\");\n\n                    b.Property<string>(\"MetaJson\");\n\n                    b.Property<DateTime>(\"PubDate\");\n\n                    b.Property<string>(\"Slug\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ThumbnailUrl\")\n                        .HasMaxLength(250);\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"BlogId\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"Slug\");\n\n                    b.ToTable(\"cs_Post\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\")\n                        .WithMany(\"PageComments\")\n                        .HasForeignKey(\"PageEntityId\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageResourceEntity\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\")\n                        .WithMany(\"PageResources\")\n                        .HasForeignKey(\"PageEntityId\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\")\n                        .WithMany(\"PostComments\")\n                        .HasForeignKey(\"PostEntityId\");\n                });\n#pragma warning restore 612, 618\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.MSSQL/Migrations/20171118193027_changes20171118.cs",
    "content": "﻿using Microsoft.EntityFrameworkCore.Migrations;\nusing System;\nusing System.Collections.Generic;\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.MSSQL.Migrations\n{\n    public partial class changes20171118 : Migration\n    {\n        protected override void Up(MigrationBuilder migrationBuilder)\n        {\n            migrationBuilder.AddColumn<string>(\n                name: \"ContentType\",\n                table: \"cs_Post\",\n                maxLength: 50,\n                nullable: true,\n                defaultValue: \"html\");\n\n            migrationBuilder.AddColumn<string>(\n                name: \"ContentType\",\n                table: \"cs_Page\",\n                maxLength: 50,\n                nullable: true,\n                defaultValue: \"html\");\n\n            migrationBuilder.AddColumn<string>(\n                name: \"DefaultContentType\",\n                table: \"cs_ContentProject\",\n                maxLength: 50,\n                nullable: true,\n                defaultValue: \"html\");\n        }\n\n        protected override void Down(MigrationBuilder migrationBuilder)\n        {\n            migrationBuilder.DropColumn(\n                name: \"ContentType\",\n                table: \"cs_Post\");\n\n            migrationBuilder.DropColumn(\n                name: \"ContentType\",\n                table: \"cs_Page\");\n\n            migrationBuilder.DropColumn(\n                name: \"DefaultContentType\",\n                table: \"cs_ContentProject\");\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.MSSQL/Migrations/20180103204131_changes20180103.Designer.cs",
    "content": "﻿// <auto-generated />\nusing cloudscribe.SimpleContent.Models;\nusing cloudscribe.SimpleContent.Storage.EFCore.MSSQL;\nusing Microsoft.EntityFrameworkCore;\nusing Microsoft.EntityFrameworkCore.Infrastructure;\nusing Microsoft.EntityFrameworkCore.Metadata;\nusing Microsoft.EntityFrameworkCore.Migrations;\nusing Microsoft.EntityFrameworkCore.Storage;\nusing Microsoft.EntityFrameworkCore.Storage.Internal;\nusing System;\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.MSSQL.Migrations\n{\n    [DbContext(typeof(SimpleContentDbContext))]\n    [Migration(\"20180103204131_changes20180103\")]\n    partial class changes20180103\n    {\n        protected override void BuildTargetModel(ModelBuilder modelBuilder)\n        {\n#pragma warning disable 612, 618\n            modelBuilder\n                .HasAnnotation(\"ProductVersion\", \"2.0.1-rtm-125\")\n                .HasAnnotation(\"SqlServer:ValueGenerationStrategy\", SqlServerValueGenerationStrategy.IdentityColumn);\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Models.ProjectSettings\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<bool>(\"AddBlogToPagesTree\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<byte>(\"AutoTeaserMode\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue((byte)0);\n\n                    b.Property<bool>(\"BlogMenuLinksToNewestPost\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"BlogPageNavComponentVisibility\")\n                        .HasMaxLength(255);\n\n                    b.Property<int>(\"BlogPagePosition\");\n\n                    b.Property<string>(\"BlogPageText\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CdnUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ChannelCategoriesCsv\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ChannelRating\")\n                        .HasMaxLength(100);\n\n                    b.Property<int>(\"ChannelTimeToLive\");\n\n                    b.Property<string>(\"CommentNotificationEmail\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"CopyrightNotice\")\n                        .HasMaxLength(255);\n\n                    b.Property<int>(\"DaysToComment\");\n\n                    b.Property<string>(\"DefaultContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue(\"html\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"DefaultPageSlug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Description\");\n\n                    b.Property<string>(\"DisqusShortName\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"EmailFromAddress\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"FacebookAppId\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Image\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"IncludePubDateInPostUrls\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"LanguageCode\")\n                        .HasMaxLength(10);\n\n                    b.Property<string>(\"LocalMediaVirtualPath\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ManagingEditorEmail\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"ModerateComments\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<int>(\"PostsPerPage\");\n\n                    b.Property<string>(\"PubDateFormat\")\n                        .HasMaxLength(75);\n\n                    b.Property<string>(\"Publisher\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"PublisherEntityType\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PublisherLogoHeight\")\n                        .HasMaxLength(20);\n\n                    b.Property<string>(\"PublisherLogoUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"PublisherLogoWidth\")\n                        .HasMaxLength(20);\n\n                    b.Property<string>(\"RecaptchaPrivateKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RecaptchaPublicKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RemoteFeedProcessorUseAgentFragment\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RemoteFeedUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"ShowFeaturedPostsOnDefaultPage\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"ShowRecentPostsOnDefaultPage\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"ShowTitle\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"SiteName\")\n                        .HasMaxLength(200);\n\n                    b.Property<string>(\"SmtpPassword\");\n\n                    b.Property<int>(\"SmtpPort\");\n\n                    b.Property<string>(\"SmtpPreferredEncoding\")\n                        .HasMaxLength(20);\n\n                    b.Property<bool>(\"SmtpRequiresAuth\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"SmtpServer\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"SmtpUseSsl\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"SmtpUser\")\n                        .HasMaxLength(500);\n\n                    b.Property<int>(\"TeaserTruncationLength\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue(20);\n\n                    b.Property<byte>(\"TeaserTruncationMode\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue((byte)0);\n\n                    b.Property<string>(\"TimeZoneId\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Title\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"TwitterCreator\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"TwitterPublisher\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"UseDefaultPageAsRootNode\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"UseMetaDescriptionInFeed\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"WebmasterEmail\")\n                        .HasMaxLength(100);\n\n                    b.HasKey(\"Id\");\n\n                    b.ToTable(\"cs_ContentProject\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageCategory\", b =>\n                {\n                    b.Property<string>(\"Value\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.HasKey(\"Value\", \"PageEntityId\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.HasIndex(\"Value\");\n\n                    b.ToTable(\"cs_PageCategory\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"Email\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Ip\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"IsAdmin\");\n\n                    b.Property<bool>(\"IsApproved\");\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<DateTime>(\"PubDate\");\n\n                    b.Property<string>(\"UserAgent\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Website\")\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_PageComment\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue(\"html\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"DisableEditor\");\n\n                    b.Property<string>(\"ExternalUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"IsPublished\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<DateTime>(\"LastModified\");\n\n                    b.Property<string>(\"MenuFilters\")\n                        .HasMaxLength(500);\n\n                    b.Property<bool>(\"MenuOnly\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"MetaHtml\");\n\n                    b.Property<string>(\"MetaJson\");\n\n                    b.Property<int>(\"PageOrder\");\n\n                    b.Property<string>(\"ParentId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ParentSlug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<DateTime>(\"PubDate\");\n\n                    b.Property<bool>(\"ShowCategories\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"ShowComments\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"ShowHeading\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"ShowLastModified\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"ShowMenu\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"ShowPubDate\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"Slug\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ViewRoles\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"ParentId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_Page\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageResourceEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Environment\")\n                        .IsRequired()\n                        .HasMaxLength(15);\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<int>(\"Sort\");\n\n                    b.Property<string>(\"Type\")\n                        .IsRequired()\n                        .HasMaxLength(10);\n\n                    b.Property<string>(\"Url\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.ToTable(\"cs_PageResource\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostCategory\", b =>\n                {\n                    b.Property<string>(\"Value\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PostEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.HasKey(\"Value\", \"PostEntityId\");\n\n                    b.HasIndex(\"PostEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.HasIndex(\"Value\");\n\n                    b.ToTable(\"cs_PostCategory\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"Email\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Ip\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"IsAdmin\");\n\n                    b.Property<bool>(\"IsApproved\");\n\n                    b.Property<string>(\"PostEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<DateTime>(\"PubDate\");\n\n                    b.Property<string>(\"UserAgent\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Website\")\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PostEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_PostComment\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"BlogId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue(\"html\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ImageUrl\")\n                        .HasMaxLength(250);\n\n                    b.Property<bool>(\"IsFeatured\");\n\n                    b.Property<bool>(\"IsPublished\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<DateTime>(\"LastModified\");\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"MetaHtml\");\n\n                    b.Property<string>(\"MetaJson\");\n\n                    b.Property<DateTime>(\"PubDate\");\n\n                    b.Property<string>(\"Slug\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"SuppressAutoTeaser\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue(false);\n\n                    b.Property<string>(\"TeaserOverride\");\n\n                    b.Property<string>(\"ThumbnailUrl\")\n                        .HasMaxLength(250);\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"BlogId\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"Slug\");\n\n                    b.ToTable(\"cs_Post\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\")\n                        .WithMany(\"PageComments\")\n                        .HasForeignKey(\"PageEntityId\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageResourceEntity\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\")\n                        .WithMany(\"PageResources\")\n                        .HasForeignKey(\"PageEntityId\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\")\n                        .WithMany(\"PostComments\")\n                        .HasForeignKey(\"PostEntityId\");\n                });\n#pragma warning restore 612, 618\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.MSSQL/Migrations/20180103204131_changes20180103.cs",
    "content": "﻿using Microsoft.EntityFrameworkCore.Migrations;\nusing System;\nusing System.Collections.Generic;\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.MSSQL.Migrations\n{\n    public partial class changes20180103 : Migration\n    {\n        protected override void Up(MigrationBuilder migrationBuilder)\n        {\n            migrationBuilder.AddColumn<bool>(\n                name: \"SuppressAutoTeaser\",\n                table: \"cs_Post\",\n                nullable: false,\n                defaultValue: false);\n\n            migrationBuilder.AddColumn<string>(\n                name: \"TeaserOverride\",\n                table: \"cs_Post\",\n                nullable: true);\n\n            migrationBuilder.AddColumn<byte>(\n                name: \"AutoTeaserMode\",\n                table: \"cs_ContentProject\",\n                nullable: false,\n                defaultValue: (byte)0);\n\n            migrationBuilder.AddColumn<int>(\n                name: \"TeaserTruncationLength\",\n                table: \"cs_ContentProject\",\n                nullable: false,\n                defaultValue: 20);\n\n            migrationBuilder.AddColumn<byte>(\n                name: \"TeaserTruncationMode\",\n                table: \"cs_ContentProject\",\n                nullable: false,\n                defaultValue: (byte)0);\n        }\n\n        protected override void Down(MigrationBuilder migrationBuilder)\n        {\n            migrationBuilder.DropColumn(\n                name: \"SuppressAutoTeaser\",\n                table: \"cs_Post\");\n\n            migrationBuilder.DropColumn(\n                name: \"TeaserOverride\",\n                table: \"cs_Post\");\n\n            migrationBuilder.DropColumn(\n                name: \"AutoTeaserMode\",\n                table: \"cs_ContentProject\");\n\n            migrationBuilder.DropColumn(\n                name: \"TeaserTruncationLength\",\n                table: \"cs_ContentProject\");\n\n            migrationBuilder.DropColumn(\n                name: \"TeaserTruncationMode\",\n                table: \"cs_ContentProject\");\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.MSSQL/Migrations/20180206125759_simplecontentchanges20180206.Designer.cs",
    "content": "﻿// <auto-generated />\nusing cloudscribe.SimpleContent.Models;\nusing cloudscribe.SimpleContent.Storage.EFCore.MSSQL;\nusing Microsoft.EntityFrameworkCore;\nusing Microsoft.EntityFrameworkCore.Infrastructure;\nusing Microsoft.EntityFrameworkCore.Metadata;\nusing Microsoft.EntityFrameworkCore.Migrations;\nusing Microsoft.EntityFrameworkCore.Storage;\nusing Microsoft.EntityFrameworkCore.Storage.Internal;\nusing System;\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.MSSQL.Migrations\n{\n    [DbContext(typeof(SimpleContentDbContext))]\n    [Migration(\"20180206125759_simplecontentchanges20180206\")]\n    partial class simplecontentchanges20180206\n    {\n        protected override void BuildTargetModel(ModelBuilder modelBuilder)\n        {\n#pragma warning disable 612, 618\n            modelBuilder\n                .HasAnnotation(\"ProductVersion\", \"2.0.1-rtm-125\")\n                .HasAnnotation(\"SqlServer:ValueGenerationStrategy\", SqlServerValueGenerationStrategy.IdentityColumn);\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Models.ProjectSettings\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<bool>(\"AddBlogToPagesTree\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"BlogMenuLinksToNewestPost\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"BlogPageNavComponentVisibility\")\n                        .HasMaxLength(255);\n\n                    b.Property<int>(\"BlogPagePosition\");\n\n                    b.Property<string>(\"BlogPageText\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CdnUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ChannelCategoriesCsv\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ChannelRating\")\n                        .HasMaxLength(100);\n\n                    b.Property<int>(\"ChannelTimeToLive\");\n\n                    b.Property<string>(\"CommentNotificationEmail\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"CopyrightNotice\")\n                        .HasMaxLength(255);\n\n                    b.Property<int>(\"DaysToComment\");\n\n                    b.Property<string>(\"DefaultContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue(\"html\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"DefaultPageSlug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Description\");\n\n                    b.Property<string>(\"DisqusShortName\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"EmailFromAddress\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"FacebookAppId\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Image\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"IncludePubDateInPostUrls\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"LanguageCode\")\n                        .HasMaxLength(10);\n\n                    b.Property<string>(\"LocalMediaVirtualPath\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ManagingEditorEmail\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"ModerateComments\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<int>(\"PostsPerPage\");\n\n                    b.Property<string>(\"PubDateFormat\")\n                        .HasMaxLength(75);\n\n                    b.Property<string>(\"Publisher\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"PublisherEntityType\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PublisherLogoHeight\")\n                        .HasMaxLength(20);\n\n                    b.Property<string>(\"PublisherLogoUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"PublisherLogoWidth\")\n                        .HasMaxLength(20);\n\n                    b.Property<string>(\"RecaptchaPrivateKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RecaptchaPublicKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RemoteFeedProcessorUseAgentFragment\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RemoteFeedUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"ShowFeaturedPostsOnDefaultPage\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"ShowRecentPostsOnDefaultPage\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"ShowTitle\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"SiteName\")\n                        .HasMaxLength(200);\n\n                    b.Property<string>(\"SmtpPassword\");\n\n                    b.Property<int>(\"SmtpPort\");\n\n                    b.Property<string>(\"SmtpPreferredEncoding\")\n                        .HasMaxLength(20);\n\n                    b.Property<bool>(\"SmtpRequiresAuth\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"SmtpServer\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"SmtpUseSsl\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"SmtpUser\")\n                        .HasMaxLength(500);\n\n                    b.Property<byte>(\"TeaserMode\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue((byte)0);\n\n                    b.Property<int>(\"TeaserTruncationLength\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue(20);\n\n                    b.Property<byte>(\"TeaserTruncationMode\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue((byte)0);\n\n                    b.Property<string>(\"TimeZoneId\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Title\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"TwitterCreator\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"TwitterPublisher\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"UseDefaultPageAsRootNode\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"WebmasterEmail\")\n                        .HasMaxLength(100);\n\n                    b.HasKey(\"Id\");\n\n                    b.ToTable(\"cs_ContentProject\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageCategory\", b =>\n                {\n                    b.Property<string>(\"Value\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.HasKey(\"Value\", \"PageEntityId\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.HasIndex(\"Value\");\n\n                    b.ToTable(\"cs_PageCategory\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"Email\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Ip\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"IsAdmin\");\n\n                    b.Property<bool>(\"IsApproved\");\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<DateTime>(\"PubDate\");\n\n                    b.Property<string>(\"UserAgent\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Website\")\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_PageComment\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue(\"html\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"DisableEditor\");\n\n                    b.Property<string>(\"ExternalUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"IsPublished\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<DateTime>(\"LastModified\");\n\n                    b.Property<string>(\"MenuFilters\")\n                        .HasMaxLength(500);\n\n                    b.Property<bool>(\"MenuOnly\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"MetaHtml\");\n\n                    b.Property<string>(\"MetaJson\");\n\n                    b.Property<int>(\"PageOrder\");\n\n                    b.Property<string>(\"ParentId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ParentSlug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<DateTime>(\"PubDate\");\n\n                    b.Property<bool>(\"ShowCategories\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"ShowComments\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"ShowHeading\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"ShowLastModified\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"ShowMenu\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"ShowPubDate\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"Slug\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ViewRoles\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"ParentId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_Page\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageResourceEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Environment\")\n                        .IsRequired()\n                        .HasMaxLength(15);\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<int>(\"Sort\");\n\n                    b.Property<string>(\"Type\")\n                        .IsRequired()\n                        .HasMaxLength(10);\n\n                    b.Property<string>(\"Url\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.ToTable(\"cs_PageResource\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostCategory\", b =>\n                {\n                    b.Property<string>(\"Value\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PostEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.HasKey(\"Value\", \"PostEntityId\");\n\n                    b.HasIndex(\"PostEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.HasIndex(\"Value\");\n\n                    b.ToTable(\"cs_PostCategory\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"Email\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Ip\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"IsAdmin\");\n\n                    b.Property<bool>(\"IsApproved\");\n\n                    b.Property<string>(\"PostEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<DateTime>(\"PubDate\");\n\n                    b.Property<string>(\"UserAgent\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Website\")\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PostEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_PostComment\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"BlogId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue(\"html\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ImageUrl\")\n                        .HasMaxLength(250);\n\n                    b.Property<bool>(\"IsFeatured\");\n\n                    b.Property<bool>(\"IsPublished\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<DateTime>(\"LastModified\");\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"MetaHtml\");\n\n                    b.Property<string>(\"MetaJson\");\n\n                    b.Property<DateTime>(\"PubDate\");\n\n                    b.Property<string>(\"Slug\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"SuppressTeaser\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue(false);\n\n                    b.Property<string>(\"TeaserOverride\");\n\n                    b.Property<string>(\"ThumbnailUrl\")\n                        .HasMaxLength(250);\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"BlogId\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"Slug\");\n\n                    b.ToTable(\"cs_Post\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\")\n                        .WithMany(\"PageComments\")\n                        .HasForeignKey(\"PageEntityId\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageResourceEntity\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\")\n                        .WithMany(\"PageResources\")\n                        .HasForeignKey(\"PageEntityId\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\")\n                        .WithMany(\"PostComments\")\n                        .HasForeignKey(\"PostEntityId\");\n                });\n#pragma warning restore 612, 618\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.MSSQL/Migrations/20180206125759_simplecontentchanges20180206.cs",
    "content": "﻿using Microsoft.EntityFrameworkCore.Migrations;\nusing System;\nusing System.Collections.Generic;\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.MSSQL.Migrations\n{\n    public partial class simplecontentchanges20180206 : Migration\n    {\n        protected override void Up(MigrationBuilder migrationBuilder)\n        {\n            migrationBuilder.DropColumn(\n               name: \"AutoTeaserMode\",\n               table: \"cs_ContentProject\");\n\n            migrationBuilder.DropColumn(\n                name: \"UseMetaDescriptionInFeed\",\n                table: \"cs_ContentProject\");\n\n            migrationBuilder.DropColumn(\n                name: \"SuppressAutoTeaser\",\n                table: \"cs_Post\");\n\n            migrationBuilder.AddColumn<bool>(\n                name: \"SuppressTeaser\",\n                table: \"cs_Post\",\n                nullable: false,\n                defaultValue: false);\n            \n            migrationBuilder.AddColumn<byte>(\n                name: \"TeaserMode\",\n                table: \"cs_ContentProject\",\n                nullable: false,\n                defaultValue: (byte)0);\n\n           \n        }\n\n        protected override void Down(MigrationBuilder migrationBuilder)\n        {\n            migrationBuilder.DropColumn(\n                name: \"SuppressTeaser\",\n                table: \"cs_Post\");\n\n            migrationBuilder.AddColumn<bool>(\n                name: \"SuppressAutoTeaser\",\n                table: \"cs_Post\",\n                nullable: false,\n                defaultValue: false);\n\n          \n\n            migrationBuilder.DropColumn(\n                name: \"TeaserMode\",\n                table: \"cs_ContentProject\");\n\n            \n\n            migrationBuilder.AddColumn<byte>(\n                name: \"AutoTeaserMode\",\n                table: \"cs_ContentProject\",\n                nullable: false,\n                defaultValue: (byte)0);\n\n            migrationBuilder.AddColumn<bool>(\n                name: \"UseMetaDescriptionInFeed\",\n                table: \"cs_ContentProject\",\n                type: \"bit\",\n                nullable: false,\n                defaultValue: false);\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.MSSQL/Migrations/20180223151637_simplecontent_changes20180223.Designer.cs",
    "content": "﻿// <auto-generated />\nusing cloudscribe.SimpleContent.Models;\nusing cloudscribe.SimpleContent.Storage.EFCore.MSSQL;\nusing Microsoft.EntityFrameworkCore;\nusing Microsoft.EntityFrameworkCore.Infrastructure;\nusing Microsoft.EntityFrameworkCore.Metadata;\nusing Microsoft.EntityFrameworkCore.Migrations;\nusing Microsoft.EntityFrameworkCore.Storage;\nusing Microsoft.EntityFrameworkCore.Storage.Internal;\nusing System;\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.MSSQL.Migrations\n{\n    [DbContext(typeof(SimpleContentDbContext))]\n    [Migration(\"20180223151637_simplecontent_changes20180223\")]\n    partial class simplecontent_changes20180223\n    {\n        protected override void BuildTargetModel(ModelBuilder modelBuilder)\n        {\n#pragma warning disable 612, 618\n            modelBuilder\n                .HasAnnotation(\"ProductVersion\", \"2.0.1-rtm-125\")\n                .HasAnnotation(\"SqlServer:ValueGenerationStrategy\", SqlServerValueGenerationStrategy.IdentityColumn);\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Models.ProjectSettings\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<bool>(\"AddBlogToPagesTree\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"BlogMenuLinksToNewestPost\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"BlogPageNavComponentVisibility\")\n                        .HasMaxLength(255);\n\n                    b.Property<int>(\"BlogPagePosition\");\n\n                    b.Property<string>(\"BlogPageText\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CdnUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ChannelCategoriesCsv\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ChannelRating\")\n                        .HasMaxLength(100);\n\n                    b.Property<int>(\"ChannelTimeToLive\");\n\n                    b.Property<string>(\"CommentNotificationEmail\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"CopyrightNotice\")\n                        .HasMaxLength(255);\n\n                    b.Property<int>(\"DaysToComment\");\n\n                    b.Property<string>(\"DefaultContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue(\"html\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"DefaultPageSlug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Description\");\n\n                    b.Property<string>(\"DisqusShortName\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"EmailFromAddress\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"FacebookAppId\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Image\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"IncludePubDateInPostUrls\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"LanguageCode\")\n                        .HasMaxLength(10);\n\n                    b.Property<string>(\"LocalMediaVirtualPath\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ManagingEditorEmail\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"ModerateComments\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<int>(\"PostsPerPage\");\n\n                    b.Property<string>(\"PubDateFormat\")\n                        .HasMaxLength(75);\n\n                    b.Property<string>(\"Publisher\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"PublisherEntityType\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PublisherLogoHeight\")\n                        .HasMaxLength(20);\n\n                    b.Property<string>(\"PublisherLogoUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"PublisherLogoWidth\")\n                        .HasMaxLength(20);\n\n                    b.Property<string>(\"RecaptchaPrivateKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RecaptchaPublicKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RemoteFeedProcessorUseAgentFragment\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RemoteFeedUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"ShowFeaturedPostsOnDefaultPage\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"ShowRecentPostsOnDefaultPage\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"ShowTitle\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"SiteName\")\n                        .HasMaxLength(200);\n\n                    b.Property<string>(\"SmtpPassword\");\n\n                    b.Property<int>(\"SmtpPort\");\n\n                    b.Property<string>(\"SmtpPreferredEncoding\")\n                        .HasMaxLength(20);\n\n                    b.Property<bool>(\"SmtpRequiresAuth\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"SmtpServer\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"SmtpUseSsl\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"SmtpUser\")\n                        .HasMaxLength(500);\n\n                    b.Property<byte>(\"TeaserMode\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue((byte)0);\n\n                    b.Property<int>(\"TeaserTruncationLength\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue(20);\n\n                    b.Property<byte>(\"TeaserTruncationMode\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue((byte)0);\n\n                    b.Property<string>(\"TimeZoneId\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Title\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"TwitterCreator\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"TwitterPublisher\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"UseDefaultPageAsRootNode\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"WebmasterEmail\")\n                        .HasMaxLength(100);\n\n                    b.HasKey(\"Id\");\n\n                    b.ToTable(\"cs_ContentProject\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageCategory\", b =>\n                {\n                    b.Property<string>(\"Value\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.HasKey(\"Value\", \"PageEntityId\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.HasIndex(\"Value\");\n\n                    b.ToTable(\"cs_PageCategory\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"Email\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Ip\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"IsAdmin\");\n\n                    b.Property<bool>(\"IsApproved\");\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<DateTime>(\"PubDate\");\n\n                    b.Property<string>(\"UserAgent\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Website\")\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_PageComment\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue(\"html\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"DisableEditor\");\n\n                    b.Property<string>(\"ExternalUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"IsPublished\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<DateTime>(\"LastModified\");\n\n                    b.Property<string>(\"MenuFilters\")\n                        .HasMaxLength(500);\n\n                    b.Property<bool>(\"MenuOnly\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"MetaHtml\");\n\n                    b.Property<string>(\"MetaJson\");\n\n                    b.Property<int>(\"PageOrder\");\n\n                    b.Property<string>(\"ParentId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ParentSlug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<DateTime>(\"PubDate\");\n\n                    b.Property<bool>(\"ShowCategories\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"ShowComments\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"ShowHeading\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"ShowLastModified\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"ShowMenu\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"ShowPubDate\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"Slug\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ViewRoles\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"ParentId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_Page\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageResourceEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Environment\")\n                        .IsRequired()\n                        .HasMaxLength(15);\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<int>(\"Sort\");\n\n                    b.Property<string>(\"Type\")\n                        .IsRequired()\n                        .HasMaxLength(10);\n\n                    b.Property<string>(\"Url\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.ToTable(\"cs_PageResource\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostCategory\", b =>\n                {\n                    b.Property<string>(\"Value\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PostEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.HasKey(\"Value\", \"PostEntityId\");\n\n                    b.HasIndex(\"PostEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.HasIndex(\"Value\");\n\n                    b.ToTable(\"cs_PostCategory\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"Email\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Ip\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"IsAdmin\");\n\n                    b.Property<bool>(\"IsApproved\");\n\n                    b.Property<string>(\"PostEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<DateTime>(\"PubDate\");\n\n                    b.Property<string>(\"UserAgent\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Website\")\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PostEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_PostComment\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"BlogId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue(\"html\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ImageUrl\")\n                        .HasMaxLength(250);\n\n                    b.Property<bool>(\"IsFeatured\");\n\n                    b.Property<bool>(\"IsPublished\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<DateTime>(\"LastModified\");\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"MetaHtml\");\n\n                    b.Property<string>(\"MetaJson\");\n\n                    b.Property<DateTime>(\"PubDate\");\n\n                    b.Property<string>(\"Slug\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"SuppressTeaser\");\n\n                    b.Property<string>(\"TeaserOverride\");\n\n                    b.Property<string>(\"ThumbnailUrl\")\n                        .HasMaxLength(250);\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"BlogId\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"Slug\");\n\n                    b.ToTable(\"cs_Post\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\")\n                        .WithMany(\"PageComments\")\n                        .HasForeignKey(\"PageEntityId\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageResourceEntity\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\")\n                        .WithMany(\"PageResources\")\n                        .HasForeignKey(\"PageEntityId\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\")\n                        .WithMany(\"PostComments\")\n                        .HasForeignKey(\"PostEntityId\");\n                });\n#pragma warning restore 612, 618\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.MSSQL/Migrations/20180223151637_simplecontent_changes20180223.cs",
    "content": "﻿using Microsoft.EntityFrameworkCore.Migrations;\nusing System;\nusing System.Collections.Generic;\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.MSSQL.Migrations\n{\n    public partial class simplecontent_changes20180223 : Migration\n    {\n        protected override void Up(MigrationBuilder migrationBuilder)\n        {\n            migrationBuilder.AlterColumn<bool>(\n                name: \"SuppressTeaser\",\n                table: \"cs_Post\",\n                nullable: false,\n                oldClrType: typeof(bool),\n                oldDefaultValue: false);\n        }\n\n        protected override void Down(MigrationBuilder migrationBuilder)\n        {\n            migrationBuilder.AlterColumn<bool>(\n                name: \"SuppressTeaser\",\n                table: \"cs_Post\",\n                nullable: false,\n                defaultValue: false,\n                oldClrType: typeof(bool));\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.MSSQL/Migrations/20180315174300_simplecontent_changes20180315.Designer.cs",
    "content": "﻿// <auto-generated />\nusing cloudscribe.SimpleContent.Models;\nusing cloudscribe.SimpleContent.Storage.EFCore.MSSQL;\nusing Microsoft.EntityFrameworkCore;\nusing Microsoft.EntityFrameworkCore.Infrastructure;\nusing Microsoft.EntityFrameworkCore.Metadata;\nusing Microsoft.EntityFrameworkCore.Migrations;\nusing Microsoft.EntityFrameworkCore.Storage;\nusing Microsoft.EntityFrameworkCore.Storage.Internal;\nusing System;\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.MSSQL.Migrations\n{\n    [DbContext(typeof(SimpleContentDbContext))]\n    [Migration(\"20180315174300_simplecontent_changes20180315\")]\n    partial class simplecontent_changes20180315\n    {\n        protected override void BuildTargetModel(ModelBuilder modelBuilder)\n        {\n#pragma warning disable 612, 618\n            modelBuilder\n                .HasAnnotation(\"ProductVersion\", \"2.0.2-rtm-10011\")\n                .HasAnnotation(\"SqlServer:ValueGenerationStrategy\", SqlServerValueGenerationStrategy.IdentityColumn);\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Models.ProjectSettings\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<bool>(\"AddBlogToPagesTree\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"BlogMenuLinksToNewestPost\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"BlogPageNavComponentVisibility\")\n                        .HasMaxLength(255);\n\n                    b.Property<int>(\"BlogPagePosition\");\n\n                    b.Property<string>(\"BlogPageText\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CdnUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ChannelCategoriesCsv\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ChannelRating\")\n                        .HasMaxLength(100);\n\n                    b.Property<int>(\"ChannelTimeToLive\");\n\n                    b.Property<string>(\"CommentNotificationEmail\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"CopyrightNotice\")\n                        .HasMaxLength(255);\n\n                    b.Property<int>(\"DaysToComment\");\n\n                    b.Property<string>(\"DefaultContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue(\"html\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"DefaultPageSlug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Description\");\n\n                    b.Property<string>(\"DisqusShortName\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"FacebookAppId\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Image\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"IncludePubDateInPostUrls\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"LanguageCode\")\n                        .HasMaxLength(10);\n\n                    b.Property<string>(\"LocalMediaVirtualPath\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ManagingEditorEmail\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"ModerateComments\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<int>(\"PostsPerPage\");\n\n                    b.Property<string>(\"PubDateFormat\")\n                        .HasMaxLength(75);\n\n                    b.Property<string>(\"Publisher\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"PublisherEntityType\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PublisherLogoHeight\")\n                        .HasMaxLength(20);\n\n                    b.Property<string>(\"PublisherLogoUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"PublisherLogoWidth\")\n                        .HasMaxLength(20);\n\n                    b.Property<string>(\"RecaptchaPrivateKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RecaptchaPublicKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RemoteFeedProcessorUseAgentFragment\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RemoteFeedUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"ShowFeaturedPostsOnDefaultPage\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"ShowRecentPostsOnDefaultPage\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"ShowTitle\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"SiteName\")\n                        .HasMaxLength(200);\n\n                    b.Property<byte>(\"TeaserMode\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue((byte)0);\n\n                    b.Property<int>(\"TeaserTruncationLength\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue(20);\n\n                    b.Property<byte>(\"TeaserTruncationMode\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue((byte)0);\n\n                    b.Property<string>(\"TimeZoneId\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Title\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"TwitterCreator\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"TwitterPublisher\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"UseDefaultPageAsRootNode\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"WebmasterEmail\")\n                        .HasMaxLength(100);\n\n                    b.HasKey(\"Id\");\n\n                    b.ToTable(\"cs_ContentProject\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageCategory\", b =>\n                {\n                    b.Property<string>(\"Value\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.HasKey(\"Value\", \"PageEntityId\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.HasIndex(\"Value\");\n\n                    b.ToTable(\"cs_PageCategory\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"Email\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Ip\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"IsAdmin\");\n\n                    b.Property<bool>(\"IsApproved\");\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<DateTime>(\"PubDate\");\n\n                    b.Property<string>(\"UserAgent\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Website\")\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_PageComment\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue(\"html\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"DisableEditor\");\n\n                    b.Property<string>(\"ExternalUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"IsPublished\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<DateTime>(\"LastModified\");\n\n                    b.Property<string>(\"MenuFilters\")\n                        .HasMaxLength(500);\n\n                    b.Property<bool>(\"MenuOnly\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"MetaHtml\");\n\n                    b.Property<string>(\"MetaJson\");\n\n                    b.Property<int>(\"PageOrder\");\n\n                    b.Property<string>(\"ParentId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ParentSlug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<DateTime>(\"PubDate\");\n\n                    b.Property<bool>(\"ShowCategories\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"ShowComments\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"ShowHeading\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"ShowLastModified\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"ShowMenu\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"ShowPubDate\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"Slug\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ViewRoles\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"ParentId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_Page\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageResourceEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Environment\")\n                        .IsRequired()\n                        .HasMaxLength(15);\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<int>(\"Sort\");\n\n                    b.Property<string>(\"Type\")\n                        .IsRequired()\n                        .HasMaxLength(10);\n\n                    b.Property<string>(\"Url\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.ToTable(\"cs_PageResource\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostCategory\", b =>\n                {\n                    b.Property<string>(\"Value\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PostEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.HasKey(\"Value\", \"PostEntityId\");\n\n                    b.HasIndex(\"PostEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.HasIndex(\"Value\");\n\n                    b.ToTable(\"cs_PostCategory\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"Email\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Ip\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"IsAdmin\");\n\n                    b.Property<bool>(\"IsApproved\");\n\n                    b.Property<string>(\"PostEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<DateTime>(\"PubDate\");\n\n                    b.Property<string>(\"UserAgent\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Website\")\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PostEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_PostComment\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"BlogId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue(\"html\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ImageUrl\")\n                        .HasMaxLength(250);\n\n                    b.Property<bool>(\"IsFeatured\");\n\n                    b.Property<bool>(\"IsPublished\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<DateTime>(\"LastModified\");\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"MetaHtml\");\n\n                    b.Property<string>(\"MetaJson\");\n\n                    b.Property<DateTime>(\"PubDate\");\n\n                    b.Property<string>(\"Slug\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"SuppressTeaser\");\n\n                    b.Property<string>(\"TeaserOverride\");\n\n                    b.Property<string>(\"ThumbnailUrl\")\n                        .HasMaxLength(250);\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"BlogId\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"Slug\");\n\n                    b.ToTable(\"cs_Post\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\")\n                        .WithMany(\"PageComments\")\n                        .HasForeignKey(\"PageEntityId\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageResourceEntity\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\")\n                        .WithMany(\"PageResources\")\n                        .HasForeignKey(\"PageEntityId\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\")\n                        .WithMany(\"PostComments\")\n                        .HasForeignKey(\"PostEntityId\");\n                });\n#pragma warning restore 612, 618\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.MSSQL/Migrations/20180315174300_simplecontent_changes20180315.cs",
    "content": "﻿using Microsoft.EntityFrameworkCore.Migrations;\nusing System;\nusing System.Collections.Generic;\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.MSSQL.Migrations\n{\n    public partial class simplecontent_changes20180315 : Migration\n    {\n        protected override void Up(MigrationBuilder migrationBuilder)\n        {\n            migrationBuilder.DropColumn(\n                name: \"EmailFromAddress\",\n                table: \"cs_ContentProject\");\n\n            migrationBuilder.DropColumn(\n                name: \"SmtpPassword\",\n                table: \"cs_ContentProject\");\n\n            migrationBuilder.DropColumn(\n                name: \"SmtpPort\",\n                table: \"cs_ContentProject\");\n\n            migrationBuilder.DropColumn(\n                name: \"SmtpPreferredEncoding\",\n                table: \"cs_ContentProject\");\n\n            migrationBuilder.DropColumn(\n                name: \"SmtpRequiresAuth\",\n                table: \"cs_ContentProject\");\n\n            migrationBuilder.DropColumn(\n                name: \"SmtpServer\",\n                table: \"cs_ContentProject\");\n\n            migrationBuilder.DropColumn(\n                name: \"SmtpUseSsl\",\n                table: \"cs_ContentProject\");\n\n            migrationBuilder.DropColumn(\n                name: \"SmtpUser\",\n                table: \"cs_ContentProject\");\n        }\n\n        protected override void Down(MigrationBuilder migrationBuilder)\n        {\n            migrationBuilder.AddColumn<string>(\n                name: \"EmailFromAddress\",\n                table: \"cs_ContentProject\",\n                maxLength: 100,\n                nullable: true);\n\n            migrationBuilder.AddColumn<string>(\n                name: \"SmtpPassword\",\n                table: \"cs_ContentProject\",\n                nullable: true);\n\n            migrationBuilder.AddColumn<int>(\n                name: \"SmtpPort\",\n                table: \"cs_ContentProject\",\n                nullable: false,\n                defaultValue: 0);\n\n            migrationBuilder.AddColumn<string>(\n                name: \"SmtpPreferredEncoding\",\n                table: \"cs_ContentProject\",\n                maxLength: 20,\n                nullable: true);\n\n            migrationBuilder.AddColumn<bool>(\n                name: \"SmtpRequiresAuth\",\n                table: \"cs_ContentProject\",\n                type: \"bit\",\n                nullable: false,\n                defaultValue: false);\n\n            migrationBuilder.AddColumn<string>(\n                name: \"SmtpServer\",\n                table: \"cs_ContentProject\",\n                maxLength: 100,\n                nullable: true);\n\n            migrationBuilder.AddColumn<bool>(\n                name: \"SmtpUseSsl\",\n                table: \"cs_ContentProject\",\n                type: \"bit\",\n                nullable: false,\n                defaultValue: false);\n\n            migrationBuilder.AddColumn<string>(\n                name: \"SmtpUser\",\n                table: \"cs_ContentProject\",\n                maxLength: 500,\n                nullable: true);\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.MSSQL/Migrations/20180704183112_simplecontent-20180704.Designer.cs",
    "content": "﻿// <auto-generated />\nusing System;\nusing Microsoft.EntityFrameworkCore;\nusing Microsoft.EntityFrameworkCore.Infrastructure;\nusing Microsoft.EntityFrameworkCore.Metadata;\nusing Microsoft.EntityFrameworkCore.Migrations;\nusing Microsoft.EntityFrameworkCore.Storage.ValueConversion;\nusing cloudscribe.SimpleContent.Models;\nusing cloudscribe.SimpleContent.Storage.EFCore.MSSQL;\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.MSSQL.Migrations\n{\n    [DbContext(typeof(SimpleContentDbContext))]\n    [Migration(\"20180704183112_simplecontent-20180704\")]\n    partial class simplecontent20180704\n    {\n        protected override void BuildTargetModel(ModelBuilder modelBuilder)\n        {\n#pragma warning disable 612, 618\n            modelBuilder\n                .HasAnnotation(\"ProductVersion\", \"2.1.0-rtm-30799\")\n                .HasAnnotation(\"Relational:MaxIdentifierLength\", 128)\n                .HasAnnotation(\"SqlServer:ValueGenerationStrategy\", SqlServerValueGenerationStrategy.IdentityColumn);\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Models.ContentHistory\", b =>\n                {\n                    b.Property<Guid>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ArchivedBy\")\n                        .HasMaxLength(255);\n\n                    b.Property<DateTime>(\"ArchivedUtc\");\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"ContentId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ContentSource\")\n                        .IsRequired()\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CreatedByUser\")\n                        .HasMaxLength(100);\n\n                    b.Property<DateTime>(\"CreatedUtc\");\n\n                    b.Property<string>(\"DraftAuthor\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"DraftContent\");\n\n                    b.Property<DateTime?>(\"DraftPubDate\");\n\n                    b.Property<string>(\"DraftSerializedModel\");\n\n                    b.Property<bool>(\"IsDraftHx\");\n\n                    b.Property<bool>(\"IsPublished\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<DateTime>(\"LastModified\");\n\n                    b.Property<string>(\"LastModifiedByUser\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"ProjectId\");\n\n                    b.Property<DateTime?>(\"PubDate\");\n\n                    b.Property<string>(\"SerializedModel\");\n\n                    b.Property<string>(\"Slug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"TeaserOverride\");\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"WasDeleted\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"ContentId\");\n\n                    b.HasIndex(\"ContentSource\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"CreatedByUser\");\n\n                    b.HasIndex(\"LastModifiedByUser\");\n\n                    b.HasIndex(\"Title\");\n\n                    b.ToTable(\"cs_ContentHistory\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Models.ProjectSettings\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<bool>(\"AddBlogToPagesTree\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"BlogMenuLinksToNewestPost\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"BlogPageNavComponentVisibility\")\n                        .HasMaxLength(255);\n\n                    b.Property<int>(\"BlogPagePosition\");\n\n                    b.Property<string>(\"BlogPageText\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CdnUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ChannelCategoriesCsv\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ChannelRating\")\n                        .HasMaxLength(100);\n\n                    b.Property<int>(\"ChannelTimeToLive\");\n\n                    b.Property<string>(\"CommentNotificationEmail\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"CopyrightNotice\")\n                        .HasMaxLength(255);\n\n                    b.Property<int>(\"DaysToComment\");\n\n                    b.Property<string>(\"DefaultContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<int>(\"DefaultFeedItems\");\n\n                    b.Property<string>(\"DefaultPageSlug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Description\");\n\n                    b.Property<string>(\"DisqusShortName\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"FacebookAppId\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Image\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"IncludePubDateInPostUrls\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"LanguageCode\")\n                        .HasMaxLength(10);\n\n                    b.Property<string>(\"LocalMediaVirtualPath\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ManagingEditorEmail\")\n                        .HasMaxLength(100);\n\n                    b.Property<int>(\"MaxFeedItems\");\n\n                    b.Property<bool>(\"ModerateComments\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<int>(\"PostsPerPage\");\n\n                    b.Property<string>(\"PubDateFormat\")\n                        .HasMaxLength(75);\n\n                    b.Property<string>(\"Publisher\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"PublisherEntityType\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PublisherLogoHeight\")\n                        .HasMaxLength(20);\n\n                    b.Property<string>(\"PublisherLogoUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"PublisherLogoWidth\")\n                        .HasMaxLength(20);\n\n                    b.Property<string>(\"RecaptchaPrivateKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RecaptchaPublicKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RemoteFeedProcessorUseAgentFragment\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RemoteFeedUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"ShowFeaturedPostsOnDefaultPage\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"ShowRecentPostsOnDefaultPage\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"ShowTitle\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"SiteName\")\n                        .HasMaxLength(200);\n\n                    b.Property<byte>(\"TeaserMode\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue((byte)0);\n\n                    b.Property<int>(\"TeaserTruncationLength\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue(20);\n\n                    b.Property<byte>(\"TeaserTruncationMode\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue((byte)0);\n\n                    b.Property<string>(\"TimeZoneId\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Title\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"TwitterCreator\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"TwitterPublisher\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"UseDefaultPageAsRootNode\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"WebmasterEmail\")\n                        .HasMaxLength(100);\n\n                    b.HasKey(\"Id\");\n\n                    b.ToTable(\"cs_ContentProject\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageCategory\", b =>\n                {\n                    b.Property<string>(\"Value\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.HasKey(\"Value\", \"PageEntityId\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.HasIndex(\"Value\");\n\n                    b.ToTable(\"cs_PageCategory\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"Email\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Ip\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"IsAdmin\");\n\n                    b.Property<bool>(\"IsApproved\");\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<DateTime>(\"PubDate\");\n\n                    b.Property<string>(\"UserAgent\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Website\")\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_PageComment\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CreatedByUser\")\n                        .HasMaxLength(100);\n\n                    b.Property<DateTime>(\"CreatedUtc\");\n\n                    b.Property<bool>(\"DisableEditor\");\n\n                    b.Property<string>(\"DraftAuthor\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"DraftContent\");\n\n                    b.Property<DateTime?>(\"DraftPubDate\");\n\n                    b.Property<string>(\"DraftSerializedModel\");\n\n                    b.Property<string>(\"ExternalUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"IsPublished\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<DateTime>(\"LastModified\");\n\n                    b.Property<string>(\"LastModifiedByUser\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"MenuFilters\")\n                        .HasMaxLength(500);\n\n                    b.Property<bool>(\"MenuOnly\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"MetaHtml\");\n\n                    b.Property<string>(\"MetaJson\");\n\n                    b.Property<int>(\"PageOrder\");\n\n                    b.Property<string>(\"ParentId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ParentSlug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<DateTime?>(\"PubDate\");\n\n                    b.Property<string>(\"SerializedModel\");\n\n                    b.Property<string>(\"Serializer\")\n                        .HasMaxLength(50);\n\n                    b.Property<bool>(\"ShowCategories\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"ShowComments\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"ShowHeading\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"ShowLastModified\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"ShowMenu\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"ShowPubDate\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"Slug\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"TemplateKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ViewRoles\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"ParentId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_Page\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageResourceEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Environment\")\n                        .IsRequired()\n                        .HasMaxLength(15);\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<int>(\"Sort\");\n\n                    b.Property<string>(\"Type\")\n                        .IsRequired()\n                        .HasMaxLength(10);\n\n                    b.Property<string>(\"Url\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.ToTable(\"cs_PageResource\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostCategory\", b =>\n                {\n                    b.Property<string>(\"Value\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PostEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.HasKey(\"Value\", \"PostEntityId\");\n\n                    b.HasIndex(\"PostEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.HasIndex(\"Value\");\n\n                    b.ToTable(\"cs_PostCategory\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"Email\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Ip\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"IsAdmin\");\n\n                    b.Property<bool>(\"IsApproved\");\n\n                    b.Property<string>(\"PostEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<DateTime>(\"PubDate\");\n\n                    b.Property<string>(\"UserAgent\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Website\")\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PostEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_PostComment\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"BlogId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CreatedByUser\")\n                        .HasMaxLength(100);\n\n                    b.Property<DateTime>(\"CreatedUtc\");\n\n                    b.Property<string>(\"DraftAuthor\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"DraftContent\");\n\n                    b.Property<DateTime?>(\"DraftPubDate\");\n\n                    b.Property<string>(\"DraftSerializedModel\");\n\n                    b.Property<string>(\"ImageUrl\")\n                        .HasMaxLength(250);\n\n                    b.Property<bool>(\"IsFeatured\");\n\n                    b.Property<bool>(\"IsPublished\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<DateTime>(\"LastModified\");\n\n                    b.Property<string>(\"LastModifiedByUser\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"MetaHtml\");\n\n                    b.Property<string>(\"MetaJson\");\n\n                    b.Property<DateTime?>(\"PubDate\");\n\n                    b.Property<string>(\"SerializedModel\");\n\n                    b.Property<string>(\"Serializer\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"Slug\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"SuppressTeaser\");\n\n                    b.Property<string>(\"TeaserOverride\");\n\n                    b.Property<string>(\"TemplateKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ThumbnailUrl\")\n                        .HasMaxLength(250);\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"BlogId\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"Slug\");\n\n                    b.ToTable(\"cs_Post\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\")\n                        .WithMany(\"PageComments\")\n                        .HasForeignKey(\"PageEntityId\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageResourceEntity\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\")\n                        .WithMany(\"PageResources\")\n                        .HasForeignKey(\"PageEntityId\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\")\n                        .WithMany(\"PostComments\")\n                        .HasForeignKey(\"PostEntityId\");\n                });\n#pragma warning restore 612, 618\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.MSSQL/Migrations/20180704183112_simplecontent-20180704.cs",
    "content": "﻿using System;\nusing Microsoft.EntityFrameworkCore.Migrations;\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.MSSQL.Migrations\n{\n    public partial class simplecontent20180704 : Migration\n    {\n        protected override void Up(MigrationBuilder migrationBuilder)\n        {\n            migrationBuilder.AlterColumn<DateTime>(\n                name: \"PubDate\",\n                table: \"cs_Post\",\n                nullable: true,\n                oldClrType: typeof(DateTime));\n\n            migrationBuilder.AddColumn<string>(\n                name: \"CreatedByUser\",\n                table: \"cs_Post\",\n                maxLength: 100,\n                nullable: true);\n\n            migrationBuilder.AddColumn<DateTime>(\n                name: \"CreatedUtc\",\n                table: \"cs_Post\",\n                nullable: false,\n                defaultValue: new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified));\n\n            migrationBuilder.AddColumn<string>(\n                name: \"DraftAuthor\",\n                table: \"cs_Post\",\n                maxLength: 255,\n                nullable: true);\n\n            migrationBuilder.AddColumn<string>(\n                name: \"DraftContent\",\n                table: \"cs_Post\",\n                nullable: true);\n\n            migrationBuilder.AddColumn<DateTime>(\n                name: \"DraftPubDate\",\n                table: \"cs_Post\",\n                nullable: true);\n\n            migrationBuilder.AddColumn<string>(\n                name: \"DraftSerializedModel\",\n                table: \"cs_Post\",\n                nullable: true);\n\n            migrationBuilder.AddColumn<string>(\n                name: \"LastModifiedByUser\",\n                table: \"cs_Post\",\n                maxLength: 100,\n                nullable: true);\n\n            migrationBuilder.AddColumn<string>(\n                name: \"SerializedModel\",\n                table: \"cs_Post\",\n                nullable: true);\n\n            migrationBuilder.AddColumn<string>(\n                name: \"Serializer\",\n                table: \"cs_Post\",\n                maxLength: 50,\n                nullable: true);\n\n            migrationBuilder.AddColumn<string>(\n                name: \"TemplateKey\",\n                table: \"cs_Post\",\n                maxLength: 255,\n                nullable: true);\n\n            migrationBuilder.AlterColumn<DateTime>(\n                name: \"PubDate\",\n                table: \"cs_Page\",\n                nullable: true,\n                oldClrType: typeof(DateTime));\n\n            migrationBuilder.AddColumn<string>(\n                name: \"CreatedByUser\",\n                table: \"cs_Page\",\n                maxLength: 100,\n                nullable: true);\n\n            migrationBuilder.AddColumn<DateTime>(\n                name: \"CreatedUtc\",\n                table: \"cs_Page\",\n                nullable: false,\n                defaultValue: new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified));\n\n            migrationBuilder.AddColumn<string>(\n                name: \"DraftAuthor\",\n                table: \"cs_Page\",\n                maxLength: 255,\n                nullable: true);\n\n            migrationBuilder.AddColumn<string>(\n                name: \"DraftContent\",\n                table: \"cs_Page\",\n                nullable: true);\n\n            migrationBuilder.AddColumn<DateTime>(\n                name: \"DraftPubDate\",\n                table: \"cs_Page\",\n                nullable: true);\n\n            migrationBuilder.AddColumn<string>(\n                name: \"DraftSerializedModel\",\n                table: \"cs_Page\",\n                nullable: true);\n\n            migrationBuilder.AddColumn<string>(\n                name: \"LastModifiedByUser\",\n                table: \"cs_Page\",\n                maxLength: 100,\n                nullable: true);\n\n            migrationBuilder.AddColumn<string>(\n                name: \"SerializedModel\",\n                table: \"cs_Page\",\n                nullable: true);\n\n            migrationBuilder.AddColumn<string>(\n                name: \"Serializer\",\n                table: \"cs_Page\",\n                maxLength: 50,\n                nullable: true);\n\n            migrationBuilder.AddColumn<string>(\n                name: \"TemplateKey\",\n                table: \"cs_Page\",\n                maxLength: 255,\n                nullable: true);\n\n            migrationBuilder.AddColumn<int>(\n                name: \"DefaultFeedItems\",\n                table: \"cs_ContentProject\",\n                nullable: false,\n                defaultValue: 0);\n\n            migrationBuilder.AddColumn<int>(\n                name: \"MaxFeedItems\",\n                table: \"cs_ContentProject\",\n                nullable: false,\n                defaultValue: 0);\n\n            migrationBuilder.CreateTable(\n                name: \"cs_ContentHistory\",\n                columns: table => new\n                {\n                    Id = table.Column<Guid>(maxLength: 36, nullable: false),\n                    ContentId = table.Column<string>(maxLength: 36, nullable: false),\n                    ProjectId = table.Column<string>(nullable: true),\n                    ContentSource = table.Column<string>(maxLength: 50, nullable: false),\n                    ContentType = table.Column<string>(maxLength: 50, nullable: true, defaultValue: \"html\"),\n                    Slug = table.Column<string>(maxLength: 255, nullable: true),\n                    IsDraftHx = table.Column<bool>(nullable: false),\n                    WasDeleted = table.Column<bool>(nullable: false),\n                    ArchivedUtc = table.Column<DateTime>(nullable: false),\n                    ArchivedBy = table.Column<string>(maxLength: 255, nullable: true),\n                    Title = table.Column<string>(maxLength: 255, nullable: false),\n                    Author = table.Column<string>(maxLength: 255, nullable: true),\n                    CorrelationKey = table.Column<string>(maxLength: 255, nullable: true),\n                    Content = table.Column<string>(nullable: true),\n                    PubDate = table.Column<DateTime>(nullable: true),\n                    LastModified = table.Column<DateTime>(nullable: false),\n                    IsPublished = table.Column<bool>(type: \"bit\", nullable: false),\n                    CreatedUtc = table.Column<DateTime>(nullable: false),\n                    CreatedByUser = table.Column<string>(maxLength: 100, nullable: true),\n                    LastModifiedByUser = table.Column<string>(maxLength: 100, nullable: true),\n                    DraftContent = table.Column<string>(nullable: true),\n                    DraftAuthor = table.Column<string>(maxLength: 255, nullable: true),\n                    DraftPubDate = table.Column<DateTime>(nullable: true),\n                    SerializedModel = table.Column<string>(nullable: true),\n                    DraftSerializedModel = table.Column<string>(nullable: true),\n                    TeaserOverride = table.Column<string>(nullable: true)\n                },\n                constraints: table =>\n                {\n                    table.PrimaryKey(\"PK_cs_ContentHistory\", x => x.Id);\n                });\n\n            migrationBuilder.CreateIndex(\n                name: \"IX_cs_ContentHistory_ContentId\",\n                table: \"cs_ContentHistory\",\n                column: \"ContentId\");\n\n            migrationBuilder.CreateIndex(\n                name: \"IX_cs_ContentHistory_ContentSource\",\n                table: \"cs_ContentHistory\",\n                column: \"ContentSource\");\n\n            migrationBuilder.CreateIndex(\n                name: \"IX_cs_ContentHistory_CorrelationKey\",\n                table: \"cs_ContentHistory\",\n                column: \"CorrelationKey\");\n\n            migrationBuilder.CreateIndex(\n                name: \"IX_cs_ContentHistory_CreatedByUser\",\n                table: \"cs_ContentHistory\",\n                column: \"CreatedByUser\");\n\n            migrationBuilder.CreateIndex(\n                name: \"IX_cs_ContentHistory_LastModifiedByUser\",\n                table: \"cs_ContentHistory\",\n                column: \"LastModifiedByUser\");\n\n            migrationBuilder.CreateIndex(\n                name: \"IX_cs_ContentHistory_Title\",\n                table: \"cs_ContentHistory\",\n                column: \"Title\");\n        }\n\n        protected override void Down(MigrationBuilder migrationBuilder)\n        {\n            migrationBuilder.DropTable(\n                name: \"cs_ContentHistory\");\n\n            migrationBuilder.DropColumn(\n                name: \"CreatedByUser\",\n                table: \"cs_Post\");\n\n            migrationBuilder.DropColumn(\n                name: \"CreatedUtc\",\n                table: \"cs_Post\");\n\n            migrationBuilder.DropColumn(\n                name: \"DraftAuthor\",\n                table: \"cs_Post\");\n\n            migrationBuilder.DropColumn(\n                name: \"DraftContent\",\n                table: \"cs_Post\");\n\n            migrationBuilder.DropColumn(\n                name: \"DraftPubDate\",\n                table: \"cs_Post\");\n\n            migrationBuilder.DropColumn(\n                name: \"DraftSerializedModel\",\n                table: \"cs_Post\");\n\n            migrationBuilder.DropColumn(\n                name: \"LastModifiedByUser\",\n                table: \"cs_Post\");\n\n            migrationBuilder.DropColumn(\n                name: \"SerializedModel\",\n                table: \"cs_Post\");\n\n            migrationBuilder.DropColumn(\n                name: \"Serializer\",\n                table: \"cs_Post\");\n\n            migrationBuilder.DropColumn(\n                name: \"TemplateKey\",\n                table: \"cs_Post\");\n\n            migrationBuilder.DropColumn(\n                name: \"CreatedByUser\",\n                table: \"cs_Page\");\n\n            migrationBuilder.DropColumn(\n                name: \"CreatedUtc\",\n                table: \"cs_Page\");\n\n            migrationBuilder.DropColumn(\n                name: \"DraftAuthor\",\n                table: \"cs_Page\");\n\n            migrationBuilder.DropColumn(\n                name: \"DraftContent\",\n                table: \"cs_Page\");\n\n            migrationBuilder.DropColumn(\n                name: \"DraftPubDate\",\n                table: \"cs_Page\");\n\n            migrationBuilder.DropColumn(\n                name: \"DraftSerializedModel\",\n                table: \"cs_Page\");\n\n            migrationBuilder.DropColumn(\n                name: \"LastModifiedByUser\",\n                table: \"cs_Page\");\n\n            migrationBuilder.DropColumn(\n                name: \"SerializedModel\",\n                table: \"cs_Page\");\n\n            migrationBuilder.DropColumn(\n                name: \"Serializer\",\n                table: \"cs_Page\");\n\n            migrationBuilder.DropColumn(\n                name: \"TemplateKey\",\n                table: \"cs_Page\");\n\n            migrationBuilder.DropColumn(\n                name: \"DefaultFeedItems\",\n                table: \"cs_ContentProject\");\n\n            migrationBuilder.DropColumn(\n                name: \"MaxFeedItems\",\n                table: \"cs_ContentProject\");\n\n            migrationBuilder.AlterColumn<DateTime>(\n                name: \"PubDate\",\n                table: \"cs_Post\",\n                nullable: false,\n                oldClrType: typeof(DateTime),\n                oldNullable: true);\n\n            migrationBuilder.AlterColumn<DateTime>(\n                name: \"PubDate\",\n                table: \"cs_Page\",\n                nullable: false,\n                oldClrType: typeof(DateTime),\n                oldNullable: true);\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.MSSQL/Migrations/20180705124637_simplecontent-20180705.Designer.cs",
    "content": "﻿// <auto-generated />\nusing System;\nusing Microsoft.EntityFrameworkCore;\nusing Microsoft.EntityFrameworkCore.Infrastructure;\nusing Microsoft.EntityFrameworkCore.Metadata;\nusing Microsoft.EntityFrameworkCore.Migrations;\nusing Microsoft.EntityFrameworkCore.Storage.ValueConversion;\nusing cloudscribe.SimpleContent.Models;\nusing cloudscribe.SimpleContent.Storage.EFCore.MSSQL;\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.MSSQL.Migrations\n{\n    [DbContext(typeof(SimpleContentDbContext))]\n    [Migration(\"20180705124637_simplecontent-20180705\")]\n    partial class simplecontent20180705\n    {\n        protected override void BuildTargetModel(ModelBuilder modelBuilder)\n        {\n#pragma warning disable 612, 618\n            modelBuilder\n                .HasAnnotation(\"ProductVersion\", \"2.1.0-rtm-30799\")\n                .HasAnnotation(\"Relational:MaxIdentifierLength\", 128)\n                .HasAnnotation(\"SqlServer:ValueGenerationStrategy\", SqlServerValueGenerationStrategy.IdentityColumn);\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Models.ContentHistory\", b =>\n                {\n                    b.Property<Guid>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ArchivedBy\")\n                        .HasMaxLength(255);\n\n                    b.Property<DateTime>(\"ArchivedUtc\");\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"ContentId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ContentSource\")\n                        .IsRequired()\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CreatedByUser\")\n                        .HasMaxLength(100);\n\n                    b.Property<DateTime>(\"CreatedUtc\");\n\n                    b.Property<string>(\"DraftAuthor\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"DraftContent\");\n\n                    b.Property<DateTime?>(\"DraftPubDate\");\n\n                    b.Property<string>(\"DraftSerializedModel\");\n\n                    b.Property<bool>(\"IsDraftHx\");\n\n                    b.Property<bool>(\"IsPublished\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<DateTime>(\"LastModified\");\n\n                    b.Property<string>(\"LastModifiedByUser\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"MetaDescription\");\n\n                    b.Property<string>(\"MetaHtml\");\n\n                    b.Property<string>(\"MetaJson\");\n\n                    b.Property<int>(\"PageOrder\");\n\n                    b.Property<string>(\"ParentId\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ParentSlug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ProjectId\");\n\n                    b.Property<DateTime?>(\"PubDate\");\n\n                    b.Property<string>(\"SerializedModel\");\n\n                    b.Property<string>(\"Serializer\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"Slug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"TeaserOverride\");\n\n                    b.Property<string>(\"TemplateKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ViewRoles\");\n\n                    b.Property<bool>(\"WasDeleted\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"ContentId\");\n\n                    b.HasIndex(\"ContentSource\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"CreatedByUser\");\n\n                    b.HasIndex(\"LastModifiedByUser\");\n\n                    b.HasIndex(\"Title\");\n\n                    b.ToTable(\"cs_ContentHistory\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Models.ProjectSettings\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<bool>(\"AddBlogToPagesTree\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"BlogMenuLinksToNewestPost\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"BlogPageNavComponentVisibility\")\n                        .HasMaxLength(255);\n\n                    b.Property<int>(\"BlogPagePosition\");\n\n                    b.Property<string>(\"BlogPageText\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CdnUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ChannelCategoriesCsv\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ChannelRating\")\n                        .HasMaxLength(100);\n\n                    b.Property<int>(\"ChannelTimeToLive\");\n\n                    b.Property<string>(\"CommentNotificationEmail\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"CopyrightNotice\")\n                        .HasMaxLength(255);\n\n                    b.Property<int>(\"DaysToComment\");\n\n                    b.Property<string>(\"DefaultContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<int>(\"DefaultFeedItems\");\n\n                    b.Property<string>(\"DefaultPageSlug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Description\");\n\n                    b.Property<string>(\"DisqusShortName\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"FacebookAppId\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Image\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"IncludePubDateInPostUrls\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"LanguageCode\")\n                        .HasMaxLength(10);\n\n                    b.Property<string>(\"LocalMediaVirtualPath\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ManagingEditorEmail\")\n                        .HasMaxLength(100);\n\n                    b.Property<int>(\"MaxFeedItems\");\n\n                    b.Property<bool>(\"ModerateComments\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<int>(\"PostsPerPage\");\n\n                    b.Property<string>(\"PubDateFormat\")\n                        .HasMaxLength(75);\n\n                    b.Property<string>(\"Publisher\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"PublisherEntityType\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PublisherLogoHeight\")\n                        .HasMaxLength(20);\n\n                    b.Property<string>(\"PublisherLogoUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"PublisherLogoWidth\")\n                        .HasMaxLength(20);\n\n                    b.Property<string>(\"RecaptchaPrivateKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RecaptchaPublicKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RemoteFeedProcessorUseAgentFragment\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RemoteFeedUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"ShowFeaturedPostsOnDefaultPage\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"ShowRecentPostsOnDefaultPage\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"ShowTitle\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"SiteName\")\n                        .HasMaxLength(200);\n\n                    b.Property<byte>(\"TeaserMode\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue((byte)0);\n\n                    b.Property<int>(\"TeaserTruncationLength\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue(20);\n\n                    b.Property<byte>(\"TeaserTruncationMode\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue((byte)0);\n\n                    b.Property<string>(\"TimeZoneId\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Title\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"TwitterCreator\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"TwitterPublisher\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"UseDefaultPageAsRootNode\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"WebmasterEmail\")\n                        .HasMaxLength(100);\n\n                    b.HasKey(\"Id\");\n\n                    b.ToTable(\"cs_ContentProject\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageCategory\", b =>\n                {\n                    b.Property<string>(\"Value\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.HasKey(\"Value\", \"PageEntityId\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.HasIndex(\"Value\");\n\n                    b.ToTable(\"cs_PageCategory\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"Email\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Ip\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"IsAdmin\");\n\n                    b.Property<bool>(\"IsApproved\");\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<DateTime>(\"PubDate\");\n\n                    b.Property<string>(\"UserAgent\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Website\")\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_PageComment\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CreatedByUser\")\n                        .HasMaxLength(100);\n\n                    b.Property<DateTime>(\"CreatedUtc\");\n\n                    b.Property<bool>(\"DisableEditor\");\n\n                    b.Property<string>(\"DraftAuthor\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"DraftContent\");\n\n                    b.Property<DateTime?>(\"DraftPubDate\");\n\n                    b.Property<string>(\"DraftSerializedModel\");\n\n                    b.Property<string>(\"ExternalUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"IsPublished\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<DateTime>(\"LastModified\");\n\n                    b.Property<string>(\"LastModifiedByUser\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"MenuFilters\")\n                        .HasMaxLength(500);\n\n                    b.Property<bool>(\"MenuOnly\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"MetaHtml\");\n\n                    b.Property<string>(\"MetaJson\");\n\n                    b.Property<int>(\"PageOrder\");\n\n                    b.Property<string>(\"ParentId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ParentSlug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<DateTime?>(\"PubDate\");\n\n                    b.Property<string>(\"SerializedModel\");\n\n                    b.Property<string>(\"Serializer\")\n                        .HasMaxLength(50);\n\n                    b.Property<bool>(\"ShowCategories\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"ShowComments\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"ShowHeading\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"ShowLastModified\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"ShowMenu\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"ShowPubDate\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"Slug\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"TemplateKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ViewRoles\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"ParentId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_Page\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageResourceEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Environment\")\n                        .IsRequired()\n                        .HasMaxLength(15);\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<int>(\"Sort\");\n\n                    b.Property<string>(\"Type\")\n                        .IsRequired()\n                        .HasMaxLength(10);\n\n                    b.Property<string>(\"Url\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.ToTable(\"cs_PageResource\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostCategory\", b =>\n                {\n                    b.Property<string>(\"Value\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PostEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.HasKey(\"Value\", \"PostEntityId\");\n\n                    b.HasIndex(\"PostEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.HasIndex(\"Value\");\n\n                    b.ToTable(\"cs_PostCategory\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"Email\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Ip\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"IsAdmin\");\n\n                    b.Property<bool>(\"IsApproved\");\n\n                    b.Property<string>(\"PostEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<DateTime>(\"PubDate\");\n\n                    b.Property<string>(\"UserAgent\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Website\")\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PostEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_PostComment\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"BlogId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CreatedByUser\")\n                        .HasMaxLength(100);\n\n                    b.Property<DateTime>(\"CreatedUtc\");\n\n                    b.Property<string>(\"DraftAuthor\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"DraftContent\");\n\n                    b.Property<DateTime?>(\"DraftPubDate\");\n\n                    b.Property<string>(\"DraftSerializedModel\");\n\n                    b.Property<string>(\"ImageUrl\")\n                        .HasMaxLength(250);\n\n                    b.Property<bool>(\"IsFeatured\");\n\n                    b.Property<bool>(\"IsPublished\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<DateTime>(\"LastModified\");\n\n                    b.Property<string>(\"LastModifiedByUser\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"MetaHtml\");\n\n                    b.Property<string>(\"MetaJson\");\n\n                    b.Property<DateTime?>(\"PubDate\");\n\n                    b.Property<string>(\"SerializedModel\");\n\n                    b.Property<string>(\"Serializer\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"Slug\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"SuppressTeaser\");\n\n                    b.Property<string>(\"TeaserOverride\");\n\n                    b.Property<string>(\"TemplateKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ThumbnailUrl\")\n                        .HasMaxLength(250);\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"BlogId\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"Slug\");\n\n                    b.ToTable(\"cs_Post\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\")\n                        .WithMany(\"PageComments\")\n                        .HasForeignKey(\"PageEntityId\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageResourceEntity\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\")\n                        .WithMany(\"PageResources\")\n                        .HasForeignKey(\"PageEntityId\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\")\n                        .WithMany(\"PostComments\")\n                        .HasForeignKey(\"PostEntityId\");\n                });\n#pragma warning restore 612, 618\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.MSSQL/Migrations/20180705124637_simplecontent-20180705.cs",
    "content": "﻿using Microsoft.EntityFrameworkCore.Migrations;\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.MSSQL.Migrations\n{\n    public partial class simplecontent20180705 : Migration\n    {\n        protected override void Up(MigrationBuilder migrationBuilder)\n        {\n            migrationBuilder.AddColumn<string>(\n                name: \"MetaDescription\",\n                table: \"cs_ContentHistory\",\n                nullable: true);\n\n            migrationBuilder.AddColumn<string>(\n                name: \"MetaHtml\",\n                table: \"cs_ContentHistory\",\n                nullable: true);\n\n            migrationBuilder.AddColumn<string>(\n                name: \"MetaJson\",\n                table: \"cs_ContentHistory\",\n                nullable: true);\n\n            migrationBuilder.AddColumn<int>(\n                name: \"PageOrder\",\n                table: \"cs_ContentHistory\",\n                nullable: false,\n                defaultValue: 0);\n\n            migrationBuilder.AddColumn<string>(\n                name: \"ParentId\",\n                table: \"cs_ContentHistory\",\n                maxLength: 255,\n                nullable: true);\n\n            migrationBuilder.AddColumn<string>(\n                name: \"ParentSlug\",\n                table: \"cs_ContentHistory\",\n                maxLength: 255,\n                nullable: true);\n\n            migrationBuilder.AddColumn<string>(\n                name: \"Serializer\",\n                table: \"cs_ContentHistory\",\n                maxLength: 50,\n                nullable: true);\n\n            migrationBuilder.AddColumn<string>(\n                name: \"TemplateKey\",\n                table: \"cs_ContentHistory\",\n                maxLength: 255,\n                nullable: true);\n\n            migrationBuilder.AddColumn<string>(\n                name: \"ViewRoles\",\n                table: \"cs_ContentHistory\",\n                nullable: true);\n        }\n\n        protected override void Down(MigrationBuilder migrationBuilder)\n        {\n            migrationBuilder.DropColumn(\n                name: \"MetaDescription\",\n                table: \"cs_ContentHistory\");\n\n            migrationBuilder.DropColumn(\n                name: \"MetaHtml\",\n                table: \"cs_ContentHistory\");\n\n            migrationBuilder.DropColumn(\n                name: \"MetaJson\",\n                table: \"cs_ContentHistory\");\n\n            migrationBuilder.DropColumn(\n                name: \"PageOrder\",\n                table: \"cs_ContentHistory\");\n\n            migrationBuilder.DropColumn(\n                name: \"ParentId\",\n                table: \"cs_ContentHistory\");\n\n            migrationBuilder.DropColumn(\n                name: \"ParentSlug\",\n                table: \"cs_ContentHistory\");\n\n            migrationBuilder.DropColumn(\n                name: \"Serializer\",\n                table: \"cs_ContentHistory\");\n\n            migrationBuilder.DropColumn(\n                name: \"TemplateKey\",\n                table: \"cs_ContentHistory\");\n\n            migrationBuilder.DropColumn(\n                name: \"ViewRoles\",\n                table: \"cs_ContentHistory\");\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.MSSQL/Migrations/20180710113039_simplecontent-20180710.Designer.cs",
    "content": "﻿// <auto-generated />\nusing System;\nusing Microsoft.EntityFrameworkCore;\nusing Microsoft.EntityFrameworkCore.Infrastructure;\nusing Microsoft.EntityFrameworkCore.Metadata;\nusing Microsoft.EntityFrameworkCore.Migrations;\nusing Microsoft.EntityFrameworkCore.Storage.ValueConversion;\nusing cloudscribe.SimpleContent.Models;\nusing cloudscribe.SimpleContent.Storage.EFCore.MSSQL;\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.MSSQL.Migrations\n{\n    [DbContext(typeof(SimpleContentDbContext))]\n    [Migration(\"20180710113039_simplecontent-20180710\")]\n    partial class simplecontent20180710\n    {\n        protected override void BuildTargetModel(ModelBuilder modelBuilder)\n        {\n#pragma warning disable 612, 618\n            modelBuilder\n                .HasAnnotation(\"ProductVersion\", \"2.1.0-rtm-30799\")\n                .HasAnnotation(\"Relational:MaxIdentifierLength\", 128)\n                .HasAnnotation(\"SqlServer:ValueGenerationStrategy\", SqlServerValueGenerationStrategy.IdentityColumn);\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Models.ContentHistory\", b =>\n                {\n                    b.Property<Guid>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ArchivedBy\")\n                        .HasMaxLength(255);\n\n                    b.Property<DateTime>(\"ArchivedUtc\");\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CategoriesCsv\");\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"ContentId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ContentSource\")\n                        .IsRequired()\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CreatedByUser\")\n                        .HasMaxLength(100);\n\n                    b.Property<DateTime>(\"CreatedUtc\");\n\n                    b.Property<string>(\"DraftAuthor\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"DraftContent\");\n\n                    b.Property<DateTime?>(\"DraftPubDate\");\n\n                    b.Property<string>(\"DraftSerializedModel\");\n\n                    b.Property<bool>(\"IsDraftHx\");\n\n                    b.Property<bool>(\"IsPublished\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<DateTime>(\"LastModified\");\n\n                    b.Property<string>(\"LastModifiedByUser\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"MetaDescription\");\n\n                    b.Property<string>(\"MetaHtml\");\n\n                    b.Property<string>(\"MetaJson\");\n\n                    b.Property<int>(\"PageOrder\");\n\n                    b.Property<string>(\"ParentId\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ParentSlug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ProjectId\");\n\n                    b.Property<DateTime?>(\"PubDate\");\n\n                    b.Property<string>(\"SerializedModel\");\n\n                    b.Property<string>(\"Serializer\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"Slug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"TeaserOverride\");\n\n                    b.Property<string>(\"TemplateKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ViewRoles\");\n\n                    b.Property<bool>(\"WasDeleted\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"ContentId\");\n\n                    b.HasIndex(\"ContentSource\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"CreatedByUser\");\n\n                    b.HasIndex(\"LastModifiedByUser\");\n\n                    b.HasIndex(\"Title\");\n\n                    b.ToTable(\"cs_ContentHistory\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Models.ProjectSettings\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<bool>(\"AddBlogToPagesTree\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"BlogMenuLinksToNewestPost\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"BlogPageNavComponentVisibility\")\n                        .HasMaxLength(255);\n\n                    b.Property<int>(\"BlogPagePosition\");\n\n                    b.Property<string>(\"BlogPageText\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CdnUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ChannelCategoriesCsv\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ChannelRating\")\n                        .HasMaxLength(100);\n\n                    b.Property<int>(\"ChannelTimeToLive\");\n\n                    b.Property<string>(\"CommentNotificationEmail\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"CopyrightNotice\")\n                        .HasMaxLength(255);\n\n                    b.Property<int>(\"DaysToComment\");\n\n                    b.Property<string>(\"DefaultContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<int>(\"DefaultFeedItems\");\n\n                    b.Property<string>(\"DefaultPageSlug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Description\");\n\n                    b.Property<string>(\"DisqusShortName\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"FacebookAppId\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Image\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"IncludePubDateInPostUrls\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"LanguageCode\")\n                        .HasMaxLength(10);\n\n                    b.Property<string>(\"LocalMediaVirtualPath\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ManagingEditorEmail\")\n                        .HasMaxLength(100);\n\n                    b.Property<int>(\"MaxFeedItems\");\n\n                    b.Property<bool>(\"ModerateComments\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<int>(\"PostsPerPage\");\n\n                    b.Property<string>(\"PubDateFormat\")\n                        .HasMaxLength(75);\n\n                    b.Property<string>(\"Publisher\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"PublisherEntityType\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PublisherLogoHeight\")\n                        .HasMaxLength(20);\n\n                    b.Property<string>(\"PublisherLogoUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"PublisherLogoWidth\")\n                        .HasMaxLength(20);\n\n                    b.Property<string>(\"RecaptchaPrivateKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RecaptchaPublicKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RemoteFeedProcessorUseAgentFragment\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RemoteFeedUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"ShowFeaturedPostsOnDefaultPage\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"ShowRecentPostsOnDefaultPage\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"ShowTitle\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"SiteName\")\n                        .HasMaxLength(200);\n\n                    b.Property<byte>(\"TeaserMode\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue((byte)0);\n\n                    b.Property<int>(\"TeaserTruncationLength\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue(20);\n\n                    b.Property<byte>(\"TeaserTruncationMode\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue((byte)0);\n\n                    b.Property<string>(\"TimeZoneId\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Title\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"TwitterCreator\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"TwitterPublisher\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"UseDefaultPageAsRootNode\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"WebmasterEmail\")\n                        .HasMaxLength(100);\n\n                    b.HasKey(\"Id\");\n\n                    b.ToTable(\"cs_ContentProject\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageCategory\", b =>\n                {\n                    b.Property<string>(\"Value\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.HasKey(\"Value\", \"PageEntityId\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.HasIndex(\"Value\");\n\n                    b.ToTable(\"cs_PageCategory\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"Email\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Ip\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"IsAdmin\");\n\n                    b.Property<bool>(\"IsApproved\");\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<DateTime>(\"PubDate\");\n\n                    b.Property<string>(\"UserAgent\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Website\")\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_PageComment\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CreatedByUser\")\n                        .HasMaxLength(100);\n\n                    b.Property<DateTime>(\"CreatedUtc\");\n\n                    b.Property<bool>(\"DisableEditor\");\n\n                    b.Property<string>(\"DraftAuthor\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"DraftContent\");\n\n                    b.Property<DateTime?>(\"DraftPubDate\");\n\n                    b.Property<string>(\"DraftSerializedModel\");\n\n                    b.Property<string>(\"ExternalUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"IsPublished\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<DateTime>(\"LastModified\");\n\n                    b.Property<string>(\"LastModifiedByUser\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"MenuFilters\")\n                        .HasMaxLength(500);\n\n                    b.Property<bool>(\"MenuOnly\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"MetaHtml\");\n\n                    b.Property<string>(\"MetaJson\");\n\n                    b.Property<int>(\"PageOrder\");\n\n                    b.Property<string>(\"ParentId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ParentSlug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<DateTime?>(\"PubDate\");\n\n                    b.Property<string>(\"SerializedModel\");\n\n                    b.Property<string>(\"Serializer\")\n                        .HasMaxLength(50);\n\n                    b.Property<bool>(\"ShowCategories\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"ShowComments\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"ShowHeading\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"ShowLastModified\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"ShowMenu\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"ShowPubDate\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"Slug\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"TemplateKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ViewRoles\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"ParentId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_Page\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageResourceEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Environment\")\n                        .IsRequired()\n                        .HasMaxLength(15);\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<int>(\"Sort\");\n\n                    b.Property<string>(\"Type\")\n                        .IsRequired()\n                        .HasMaxLength(10);\n\n                    b.Property<string>(\"Url\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.ToTable(\"cs_PageResource\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostCategory\", b =>\n                {\n                    b.Property<string>(\"Value\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PostEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.HasKey(\"Value\", \"PostEntityId\");\n\n                    b.HasIndex(\"PostEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.HasIndex(\"Value\");\n\n                    b.ToTable(\"cs_PostCategory\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"Email\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Ip\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"IsAdmin\");\n\n                    b.Property<bool>(\"IsApproved\");\n\n                    b.Property<string>(\"PostEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<DateTime>(\"PubDate\");\n\n                    b.Property<string>(\"UserAgent\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Website\")\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PostEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_PostComment\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"BlogId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CreatedByUser\")\n                        .HasMaxLength(100);\n\n                    b.Property<DateTime>(\"CreatedUtc\");\n\n                    b.Property<string>(\"DraftAuthor\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"DraftContent\");\n\n                    b.Property<DateTime?>(\"DraftPubDate\");\n\n                    b.Property<string>(\"DraftSerializedModel\");\n\n                    b.Property<string>(\"ImageUrl\")\n                        .HasMaxLength(250);\n\n                    b.Property<bool>(\"IsFeatured\");\n\n                    b.Property<bool>(\"IsPublished\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<DateTime>(\"LastModified\");\n\n                    b.Property<string>(\"LastModifiedByUser\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"MetaHtml\");\n\n                    b.Property<string>(\"MetaJson\");\n\n                    b.Property<DateTime?>(\"PubDate\");\n\n                    b.Property<string>(\"SerializedModel\");\n\n                    b.Property<string>(\"Serializer\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"Slug\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"SuppressTeaser\");\n\n                    b.Property<string>(\"TeaserOverride\");\n\n                    b.Property<string>(\"TemplateKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ThumbnailUrl\")\n                        .HasMaxLength(250);\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"BlogId\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"Slug\");\n\n                    b.ToTable(\"cs_Post\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\")\n                        .WithMany(\"PageComments\")\n                        .HasForeignKey(\"PageEntityId\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageResourceEntity\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\")\n                        .WithMany(\"PageResources\")\n                        .HasForeignKey(\"PageEntityId\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\")\n                        .WithMany(\"PostComments\")\n                        .HasForeignKey(\"PostEntityId\");\n                });\n#pragma warning restore 612, 618\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.MSSQL/Migrations/20180710113039_simplecontent-20180710.cs",
    "content": "﻿using Microsoft.EntityFrameworkCore.Migrations;\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.MSSQL.Migrations\n{\n    public partial class simplecontent20180710 : Migration\n    {\n        protected override void Up(MigrationBuilder migrationBuilder)\n        {\n            migrationBuilder.AddColumn<string>(\n                name: \"CategoriesCsv\",\n                table: \"cs_ContentHistory\",\n                nullable: true);\n        }\n\n        protected override void Down(MigrationBuilder migrationBuilder)\n        {\n            migrationBuilder.DropColumn(\n                name: \"CategoriesCsv\",\n                table: \"cs_ContentHistory\");\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.MSSQL/Migrations/20180820133027_simplecontent-20180819.Designer.cs",
    "content": "﻿// <auto-generated />\nusing System;\nusing Microsoft.EntityFrameworkCore;\nusing Microsoft.EntityFrameworkCore.Infrastructure;\nusing Microsoft.EntityFrameworkCore.Metadata;\nusing Microsoft.EntityFrameworkCore.Migrations;\nusing Microsoft.EntityFrameworkCore.Storage.ValueConversion;\nusing cloudscribe.SimpleContent.Models;\nusing cloudscribe.SimpleContent.Storage.EFCore.MSSQL;\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.MSSQL.Migrations\n{\n    [DbContext(typeof(SimpleContentDbContext))]\n    [Migration(\"20180820133027_simplecontent-20180819\")]\n    partial class simplecontent20180819\n    {\n        protected override void BuildTargetModel(ModelBuilder modelBuilder)\n        {\n#pragma warning disable 612, 618\n            modelBuilder\n                .HasAnnotation(\"ProductVersion\", \"2.1.1-rtm-30846\")\n                .HasAnnotation(\"Relational:MaxIdentifierLength\", 128)\n                .HasAnnotation(\"SqlServer:ValueGenerationStrategy\", SqlServerValueGenerationStrategy.IdentityColumn);\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Models.ContentHistory\", b =>\n                {\n                    b.Property<Guid>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ArchivedBy\")\n                        .HasMaxLength(255);\n\n                    b.Property<DateTime>(\"ArchivedUtc\");\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CategoriesCsv\");\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"ContentId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ContentSource\")\n                        .IsRequired()\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CreatedByUser\")\n                        .HasMaxLength(100);\n\n                    b.Property<DateTime>(\"CreatedUtc\");\n\n                    b.Property<string>(\"DraftAuthor\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"DraftContent\");\n\n                    b.Property<DateTime?>(\"DraftPubDate\");\n\n                    b.Property<string>(\"DraftSerializedModel\");\n\n                    b.Property<bool>(\"IsDraftHx\");\n\n                    b.Property<bool>(\"IsPublished\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<DateTime>(\"LastModified\");\n\n                    b.Property<string>(\"LastModifiedByUser\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"MetaDescription\");\n\n                    b.Property<string>(\"MetaHtml\");\n\n                    b.Property<string>(\"MetaJson\");\n\n                    b.Property<int>(\"PageOrder\");\n\n                    b.Property<string>(\"ParentId\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ParentSlug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ProjectId\");\n\n                    b.Property<DateTime?>(\"PubDate\");\n\n                    b.Property<string>(\"SerializedModel\");\n\n                    b.Property<string>(\"Serializer\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"Slug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"TeaserOverride\");\n\n                    b.Property<string>(\"TemplateKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ViewRoles\");\n\n                    b.Property<bool>(\"WasDeleted\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"ContentId\");\n\n                    b.HasIndex(\"ContentSource\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"CreatedByUser\");\n\n                    b.HasIndex(\"LastModifiedByUser\");\n\n                    b.HasIndex(\"Title\");\n\n                    b.ToTable(\"cs_ContentHistory\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Models.ProjectSettings\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<bool>(\"AddBlogToPagesTree\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"BlogMenuLinksToNewestPost\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"BlogPageNavComponentVisibility\")\n                        .HasMaxLength(255);\n\n                    b.Property<int>(\"BlogPagePosition\");\n\n                    b.Property<string>(\"BlogPageText\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CdnUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ChannelCategoriesCsv\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ChannelRating\")\n                        .HasMaxLength(100);\n\n                    b.Property<int>(\"ChannelTimeToLive\");\n\n                    b.Property<string>(\"CommentNotificationEmail\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"CopyrightNotice\")\n                        .HasMaxLength(255);\n\n                    b.Property<int>(\"DaysToComment\");\n\n                    b.Property<string>(\"DefaultContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<int>(\"DefaultFeedItems\");\n\n                    b.Property<string>(\"DefaultPageSlug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Description\");\n\n                    b.Property<string>(\"DisqusShortName\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"FacebookAppId\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Image\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"IncludePubDateInPostUrls\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"LanguageCode\")\n                        .HasMaxLength(10);\n\n                    b.Property<string>(\"LocalMediaVirtualPath\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ManagingEditorEmail\")\n                        .HasMaxLength(100);\n\n                    b.Property<int>(\"MaxFeedItems\");\n\n                    b.Property<bool>(\"ModerateComments\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<int>(\"PostsPerPage\");\n\n                    b.Property<string>(\"PubDateFormat\")\n                        .HasMaxLength(75);\n\n                    b.Property<string>(\"Publisher\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"PublisherEntityType\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PublisherLogoHeight\")\n                        .HasMaxLength(20);\n\n                    b.Property<string>(\"PublisherLogoUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"PublisherLogoWidth\")\n                        .HasMaxLength(20);\n\n                    b.Property<string>(\"RecaptchaPrivateKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RecaptchaPublicKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RemoteFeedProcessorUseAgentFragment\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RemoteFeedUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"ShowFeaturedPostsOnDefaultPage\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"ShowRecentPostsOnDefaultPage\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"ShowTitle\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"SiteName\")\n                        .HasMaxLength(200);\n\n                    b.Property<byte>(\"TeaserMode\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue((byte)0);\n\n                    b.Property<int>(\"TeaserTruncationLength\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue(20);\n\n                    b.Property<byte>(\"TeaserTruncationMode\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue((byte)0);\n\n                    b.Property<string>(\"TimeZoneId\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Title\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"TwitterCreator\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"TwitterPublisher\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"UseDefaultPageAsRootNode\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"WebmasterEmail\")\n                        .HasMaxLength(100);\n\n                    b.HasKey(\"Id\");\n\n                    b.ToTable(\"cs_ContentProject\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageCategory\", b =>\n                {\n                    b.Property<string>(\"Value\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.HasKey(\"Value\", \"PageEntityId\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.HasIndex(\"Value\");\n\n                    b.ToTable(\"cs_PageCategory\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"Email\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Ip\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"IsAdmin\");\n\n                    b.Property<bool>(\"IsApproved\");\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<DateTime>(\"PubDate\");\n\n                    b.Property<string>(\"UserAgent\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Website\")\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_PageComment\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CreatedByUser\")\n                        .HasMaxLength(100);\n\n                    b.Property<DateTime>(\"CreatedUtc\");\n\n                    b.Property<bool>(\"DisableEditor\");\n\n                    b.Property<string>(\"DraftAuthor\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"DraftContent\");\n\n                    b.Property<DateTime?>(\"DraftPubDate\");\n\n                    b.Property<string>(\"DraftSerializedModel\");\n\n                    b.Property<string>(\"ExternalUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"IsPublished\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<DateTime>(\"LastModified\");\n\n                    b.Property<string>(\"LastModifiedByUser\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"MenuFilters\")\n                        .HasMaxLength(500);\n\n                    b.Property<bool>(\"MenuOnly\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"MetaHtml\");\n\n                    b.Property<string>(\"MetaJson\");\n\n                    b.Property<int>(\"PageOrder\");\n\n                    b.Property<string>(\"ParentId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ParentSlug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<DateTime?>(\"PubDate\");\n\n                    b.Property<string>(\"SerializedModel\");\n\n                    b.Property<string>(\"Serializer\")\n                        .HasMaxLength(50);\n\n                    b.Property<bool>(\"ShowCategories\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"ShowComments\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"ShowHeading\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"ShowLastModified\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"ShowMenu\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"ShowPubDate\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"Slug\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"TemplateKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ViewRoles\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"ParentId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_Page\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageResourceEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Environment\")\n                        .IsRequired()\n                        .HasMaxLength(15);\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<int>(\"Sort\");\n\n                    b.Property<string>(\"Type\")\n                        .IsRequired()\n                        .HasMaxLength(10);\n\n                    b.Property<string>(\"Url\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.ToTable(\"cs_PageResource\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostCategory\", b =>\n                {\n                    b.Property<string>(\"Value\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PostEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.HasKey(\"Value\", \"PostEntityId\");\n\n                    b.HasIndex(\"PostEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.HasIndex(\"Value\");\n\n                    b.ToTable(\"cs_PostCategory\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"Email\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Ip\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"IsAdmin\");\n\n                    b.Property<bool>(\"IsApproved\");\n\n                    b.Property<string>(\"PostEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<DateTime>(\"PubDate\");\n\n                    b.Property<string>(\"UserAgent\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Website\")\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PostEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_PostComment\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"AutoTeaser\");\n\n                    b.Property<string>(\"BlogId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CreatedByUser\")\n                        .HasMaxLength(100);\n\n                    b.Property<DateTime>(\"CreatedUtc\");\n\n                    b.Property<string>(\"DraftAuthor\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"DraftContent\");\n\n                    b.Property<DateTime?>(\"DraftPubDate\");\n\n                    b.Property<string>(\"DraftSerializedModel\");\n\n                    b.Property<string>(\"ImageUrl\")\n                        .HasMaxLength(250);\n\n                    b.Property<bool>(\"IsFeatured\");\n\n                    b.Property<bool>(\"IsPublished\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<DateTime>(\"LastModified\");\n\n                    b.Property<string>(\"LastModifiedByUser\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"MetaHtml\");\n\n                    b.Property<string>(\"MetaJson\");\n\n                    b.Property<DateTime?>(\"PubDate\");\n\n                    b.Property<string>(\"SerializedModel\");\n\n                    b.Property<string>(\"Serializer\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"Slug\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"SuppressTeaser\");\n\n                    b.Property<string>(\"TeaserOverride\");\n\n                    b.Property<string>(\"TemplateKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ThumbnailUrl\")\n                        .HasMaxLength(250);\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"BlogId\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"Slug\");\n\n                    b.ToTable(\"cs_Post\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\")\n                        .WithMany(\"PageComments\")\n                        .HasForeignKey(\"PageEntityId\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageResourceEntity\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\")\n                        .WithMany(\"PageResources\")\n                        .HasForeignKey(\"PageEntityId\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\")\n                        .WithMany(\"PostComments\")\n                        .HasForeignKey(\"PostEntityId\");\n                });\n#pragma warning restore 612, 618\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.MSSQL/Migrations/20180820133027_simplecontent-20180819.cs",
    "content": "﻿using Microsoft.EntityFrameworkCore.Migrations;\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.MSSQL.Migrations\n{\n    public partial class simplecontent20180819 : Migration\n    {\n        protected override void Up(MigrationBuilder migrationBuilder)\n        {\n            migrationBuilder.AddColumn<string>(\n                name: \"AutoTeaser\",\n                table: \"cs_Post\",\n                nullable: true);\n        }\n\n        protected override void Down(MigrationBuilder migrationBuilder)\n        {\n            migrationBuilder.DropColumn(\n                name: \"AutoTeaser\",\n                table: \"cs_Post\");\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.MSSQL/Migrations/20180908121615_simplecontent-20180908.Designer.cs",
    "content": "﻿// <auto-generated />\nusing System;\nusing Microsoft.EntityFrameworkCore;\nusing Microsoft.EntityFrameworkCore.Infrastructure;\nusing Microsoft.EntityFrameworkCore.Metadata;\nusing Microsoft.EntityFrameworkCore.Migrations;\nusing Microsoft.EntityFrameworkCore.Storage.ValueConversion;\nusing cloudscribe.SimpleContent.Models;\nusing cloudscribe.SimpleContent.Storage.EFCore.MSSQL;\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.MSSQL.Migrations\n{\n    [DbContext(typeof(SimpleContentDbContext))]\n    [Migration(\"20180908121615_simplecontent-20180908\")]\n    partial class simplecontent20180908\n    {\n        protected override void BuildTargetModel(ModelBuilder modelBuilder)\n        {\n#pragma warning disable 612, 618\n            modelBuilder\n                .HasAnnotation(\"ProductVersion\", \"2.1.1-rtm-30846\")\n                .HasAnnotation(\"Relational:MaxIdentifierLength\", 128)\n                .HasAnnotation(\"SqlServer:ValueGenerationStrategy\", SqlServerValueGenerationStrategy.IdentityColumn);\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Models.ContentHistory\", b =>\n                {\n                    b.Property<Guid>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ArchivedBy\")\n                        .HasMaxLength(255);\n\n                    b.Property<DateTime>(\"ArchivedUtc\");\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CategoriesCsv\");\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"ContentId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ContentSource\")\n                        .IsRequired()\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CreatedByUser\")\n                        .HasMaxLength(100);\n\n                    b.Property<DateTime>(\"CreatedUtc\");\n\n                    b.Property<string>(\"DraftAuthor\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"DraftContent\");\n\n                    b.Property<DateTime?>(\"DraftPubDate\");\n\n                    b.Property<string>(\"DraftSerializedModel\");\n\n                    b.Property<bool>(\"IsDraftHx\");\n\n                    b.Property<bool>(\"IsPublished\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<DateTime>(\"LastModified\");\n\n                    b.Property<string>(\"LastModifiedByUser\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"MetaDescription\");\n\n                    b.Property<string>(\"MetaHtml\");\n\n                    b.Property<string>(\"MetaJson\");\n\n                    b.Property<int>(\"PageOrder\");\n\n                    b.Property<string>(\"ParentId\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ParentSlug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ProjectId\");\n\n                    b.Property<DateTime?>(\"PubDate\");\n\n                    b.Property<string>(\"SerializedModel\");\n\n                    b.Property<string>(\"Serializer\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"Slug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"TeaserOverride\");\n\n                    b.Property<string>(\"TemplateKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ViewRoles\");\n\n                    b.Property<bool>(\"WasDeleted\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"ContentId\");\n\n                    b.HasIndex(\"ContentSource\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"CreatedByUser\");\n\n                    b.HasIndex(\"LastModifiedByUser\");\n\n                    b.HasIndex(\"Title\");\n\n                    b.ToTable(\"cs_ContentHistory\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Models.ProjectSettings\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<bool>(\"AddBlogToPagesTree\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"BlogMenuLinksToNewestPost\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"BlogPageNavComponentVisibility\")\n                        .HasMaxLength(255);\n\n                    b.Property<int>(\"BlogPagePosition\");\n\n                    b.Property<string>(\"BlogPageText\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CdnUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ChannelCategoriesCsv\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ChannelRating\")\n                        .HasMaxLength(100);\n\n                    b.Property<int>(\"ChannelTimeToLive\");\n\n                    b.Property<string>(\"CommentNotificationEmail\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"CopyrightNotice\")\n                        .HasMaxLength(255);\n\n                    b.Property<int>(\"DaysToComment\");\n\n                    b.Property<string>(\"DefaultContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<int>(\"DefaultFeedItems\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue(20);\n\n                    b.Property<string>(\"DefaultPageSlug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Description\");\n\n                    b.Property<string>(\"DisqusShortName\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"FacebookAppId\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Image\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"IncludePubDateInPostUrls\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"LanguageCode\")\n                        .HasMaxLength(10);\n\n                    b.Property<string>(\"LocalMediaVirtualPath\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ManagingEditorEmail\")\n                        .HasMaxLength(100);\n\n                    b.Property<int>(\"MaxFeedItems\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue(1000);\n\n                    b.Property<bool>(\"ModerateComments\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<int>(\"PostsPerPage\");\n\n                    b.Property<string>(\"PubDateFormat\")\n                        .HasMaxLength(75);\n\n                    b.Property<string>(\"Publisher\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"PublisherEntityType\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PublisherLogoHeight\")\n                        .HasMaxLength(20);\n\n                    b.Property<string>(\"PublisherLogoUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"PublisherLogoWidth\")\n                        .HasMaxLength(20);\n\n                    b.Property<string>(\"RecaptchaPrivateKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RecaptchaPublicKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RemoteFeedProcessorUseAgentFragment\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RemoteFeedUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"ShowFeaturedPostsOnDefaultPage\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"ShowRecentPostsOnDefaultPage\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"ShowTitle\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"SiteName\")\n                        .HasMaxLength(200);\n\n                    b.Property<byte>(\"TeaserMode\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue((byte)0);\n\n                    b.Property<int>(\"TeaserTruncationLength\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue(20);\n\n                    b.Property<byte>(\"TeaserTruncationMode\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue((byte)0);\n\n                    b.Property<string>(\"TimeZoneId\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Title\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"TwitterCreator\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"TwitterPublisher\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"UseDefaultPageAsRootNode\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"WebmasterEmail\")\n                        .HasMaxLength(100);\n\n                    b.HasKey(\"Id\");\n\n                    b.ToTable(\"cs_ContentProject\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageCategory\", b =>\n                {\n                    b.Property<string>(\"Value\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.HasKey(\"Value\", \"PageEntityId\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.HasIndex(\"Value\");\n\n                    b.ToTable(\"cs_PageCategory\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"Email\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Ip\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"IsAdmin\");\n\n                    b.Property<bool>(\"IsApproved\");\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<DateTime>(\"PubDate\");\n\n                    b.Property<string>(\"UserAgent\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Website\")\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_PageComment\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CreatedByUser\")\n                        .HasMaxLength(100);\n\n                    b.Property<DateTime>(\"CreatedUtc\");\n\n                    b.Property<bool>(\"DisableEditor\");\n\n                    b.Property<string>(\"DraftAuthor\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"DraftContent\");\n\n                    b.Property<DateTime?>(\"DraftPubDate\");\n\n                    b.Property<string>(\"DraftSerializedModel\");\n\n                    b.Property<string>(\"ExternalUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"IsPublished\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<DateTime>(\"LastModified\");\n\n                    b.Property<string>(\"LastModifiedByUser\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"MenuFilters\")\n                        .HasMaxLength(500);\n\n                    b.Property<bool>(\"MenuOnly\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"MetaHtml\");\n\n                    b.Property<string>(\"MetaJson\");\n\n                    b.Property<int>(\"PageOrder\");\n\n                    b.Property<string>(\"ParentId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ParentSlug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<DateTime?>(\"PubDate\");\n\n                    b.Property<string>(\"SerializedModel\");\n\n                    b.Property<string>(\"Serializer\")\n                        .HasMaxLength(50);\n\n                    b.Property<bool>(\"ShowCategories\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"ShowComments\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"ShowHeading\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"ShowLastModified\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"ShowMenu\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"ShowPubDate\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"Slug\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"TemplateKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ViewRoles\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"ParentId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_Page\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageResourceEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Environment\")\n                        .IsRequired()\n                        .HasMaxLength(15);\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<int>(\"Sort\");\n\n                    b.Property<string>(\"Type\")\n                        .IsRequired()\n                        .HasMaxLength(10);\n\n                    b.Property<string>(\"Url\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.ToTable(\"cs_PageResource\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostCategory\", b =>\n                {\n                    b.Property<string>(\"Value\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PostEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.HasKey(\"Value\", \"PostEntityId\");\n\n                    b.HasIndex(\"PostEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.HasIndex(\"Value\");\n\n                    b.ToTable(\"cs_PostCategory\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"Email\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Ip\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"IsAdmin\");\n\n                    b.Property<bool>(\"IsApproved\");\n\n                    b.Property<string>(\"PostEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<DateTime>(\"PubDate\");\n\n                    b.Property<string>(\"UserAgent\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Website\")\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PostEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_PostComment\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"AutoTeaser\");\n\n                    b.Property<string>(\"BlogId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CreatedByUser\")\n                        .HasMaxLength(100);\n\n                    b.Property<DateTime>(\"CreatedUtc\");\n\n                    b.Property<string>(\"DraftAuthor\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"DraftContent\");\n\n                    b.Property<DateTime?>(\"DraftPubDate\");\n\n                    b.Property<string>(\"DraftSerializedModel\");\n\n                    b.Property<string>(\"ImageUrl\")\n                        .HasMaxLength(250);\n\n                    b.Property<bool>(\"IsFeatured\");\n\n                    b.Property<bool>(\"IsPublished\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<DateTime>(\"LastModified\");\n\n                    b.Property<string>(\"LastModifiedByUser\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"MetaHtml\");\n\n                    b.Property<string>(\"MetaJson\");\n\n                    b.Property<DateTime?>(\"PubDate\");\n\n                    b.Property<string>(\"SerializedModel\");\n\n                    b.Property<string>(\"Serializer\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"Slug\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"SuppressTeaser\");\n\n                    b.Property<string>(\"TeaserOverride\");\n\n                    b.Property<string>(\"TemplateKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ThumbnailUrl\")\n                        .HasMaxLength(250);\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"BlogId\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"Slug\");\n\n                    b.ToTable(\"cs_Post\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\")\n                        .WithMany(\"PageComments\")\n                        .HasForeignKey(\"PageEntityId\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageResourceEntity\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\")\n                        .WithMany(\"PageResources\")\n                        .HasForeignKey(\"PageEntityId\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\")\n                        .WithMany(\"PostComments\")\n                        .HasForeignKey(\"PostEntityId\");\n                });\n#pragma warning restore 612, 618\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.MSSQL/Migrations/20180908121615_simplecontent-20180908.cs",
    "content": "﻿using Microsoft.EntityFrameworkCore.Migrations;\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.MSSQL.Migrations\n{\n    public partial class simplecontent20180908 : Migration\n    {\n        protected override void Up(MigrationBuilder migrationBuilder)\n        {\n            migrationBuilder.AlterColumn<int>(\n                name: \"MaxFeedItems\",\n                table: \"cs_ContentProject\",\n                nullable: false,\n                defaultValue: 1000,\n                oldClrType: typeof(int));\n\n            migrationBuilder.AlterColumn<int>(\n                name: \"DefaultFeedItems\",\n                table: \"cs_ContentProject\",\n                nullable: false,\n                defaultValue: 20,\n                oldClrType: typeof(int));\n        }\n\n        protected override void Down(MigrationBuilder migrationBuilder)\n        {\n            migrationBuilder.AlterColumn<int>(\n                name: \"MaxFeedItems\",\n                table: \"cs_ContentProject\",\n                nullable: false,\n                oldClrType: typeof(int),\n                oldDefaultValue: 1000);\n\n            migrationBuilder.AlterColumn<int>(\n                name: \"DefaultFeedItems\",\n                table: \"cs_ContentProject\",\n                nullable: false,\n                oldClrType: typeof(int),\n                oldDefaultValue: 20);\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.MSSQL/Migrations/20190210160956_simplecontent-20190210.Designer.cs",
    "content": "﻿// <auto-generated />\nusing System;\nusing Microsoft.EntityFrameworkCore;\nusing Microsoft.EntityFrameworkCore.Infrastructure;\nusing Microsoft.EntityFrameworkCore.Metadata;\nusing Microsoft.EntityFrameworkCore.Migrations;\nusing Microsoft.EntityFrameworkCore.Storage.ValueConversion;\nusing cloudscribe.SimpleContent.Models;\nusing cloudscribe.SimpleContent.Storage.EFCore.MSSQL;\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.MSSQL.Migrations\n{\n    [DbContext(typeof(SimpleContentDbContext))]\n    [Migration(\"20190210160956_simplecontent-20190210\")]\n    partial class simplecontent20190210\n    {\n        protected override void BuildTargetModel(ModelBuilder modelBuilder)\n        {\n#pragma warning disable 612, 618\n            modelBuilder\n                .HasAnnotation(\"ProductVersion\", \"2.1.4-rtm-31024\")\n                .HasAnnotation(\"Relational:MaxIdentifierLength\", 128)\n                .HasAnnotation(\"SqlServer:ValueGenerationStrategy\", SqlServerValueGenerationStrategy.IdentityColumn);\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Models.ContentHistory\", b =>\n                {\n                    b.Property<Guid>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ArchivedBy\")\n                        .HasMaxLength(255);\n\n                    b.Property<DateTime>(\"ArchivedUtc\");\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CategoriesCsv\");\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"ContentId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ContentSource\")\n                        .IsRequired()\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CreatedByUser\")\n                        .HasMaxLength(100);\n\n                    b.Property<DateTime>(\"CreatedUtc\");\n\n                    b.Property<string>(\"DraftAuthor\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"DraftContent\");\n\n                    b.Property<DateTime?>(\"DraftPubDate\");\n\n                    b.Property<string>(\"DraftSerializedModel\");\n\n                    b.Property<bool>(\"IsDraftHx\");\n\n                    b.Property<bool>(\"IsPublished\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<DateTime>(\"LastModified\");\n\n                    b.Property<string>(\"LastModifiedByUser\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"MetaDescription\");\n\n                    b.Property<string>(\"MetaHtml\");\n\n                    b.Property<string>(\"MetaJson\");\n\n                    b.Property<int>(\"PageOrder\");\n\n                    b.Property<string>(\"ParentId\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ParentSlug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ProjectId\");\n\n                    b.Property<DateTime?>(\"PubDate\");\n\n                    b.Property<string>(\"SerializedModel\");\n\n                    b.Property<string>(\"Serializer\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"Slug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"TeaserOverride\");\n\n                    b.Property<string>(\"TemplateKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ViewRoles\");\n\n                    b.Property<bool>(\"WasDeleted\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"ContentId\");\n\n                    b.HasIndex(\"ContentSource\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"CreatedByUser\");\n\n                    b.HasIndex(\"LastModifiedByUser\");\n\n                    b.HasIndex(\"Title\");\n\n                    b.ToTable(\"cs_ContentHistory\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Models.ProjectSettings\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"AboutContent\");\n\n                    b.Property<bool>(\"AddBlogToPagesTree\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"BlogMenuLinksToNewestPost\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"BlogPageNavComponentVisibility\")\n                        .HasMaxLength(255);\n\n                    b.Property<int>(\"BlogPagePosition\");\n\n                    b.Property<string>(\"BlogPageText\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CdnUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ChannelCategoriesCsv\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ChannelRating\")\n                        .HasMaxLength(100);\n\n                    b.Property<int>(\"ChannelTimeToLive\");\n\n                    b.Property<string>(\"CommentNotificationEmail\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"CopyrightNotice\")\n                        .HasMaxLength(255);\n\n                    b.Property<int>(\"DaysToComment\");\n\n                    b.Property<string>(\"DefaultContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<int>(\"DefaultFeedItems\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue(20);\n\n                    b.Property<string>(\"DefaultPageSlug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Description\");\n\n                    b.Property<string>(\"DisqusShortName\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"FacebookAppId\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Image\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"IncludePubDateInPostUrls\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"LanguageCode\")\n                        .HasMaxLength(10);\n\n                    b.Property<string>(\"LocalMediaVirtualPath\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ManagingEditorEmail\")\n                        .HasMaxLength(100);\n\n                    b.Property<int>(\"MaxFeedItems\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue(1000);\n\n                    b.Property<bool>(\"ModerateComments\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<int>(\"PostsPerPage\");\n\n                    b.Property<string>(\"PubDateFormat\")\n                        .HasMaxLength(75);\n\n                    b.Property<string>(\"Publisher\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"PublisherEntityType\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PublisherLogoHeight\")\n                        .HasMaxLength(20);\n\n                    b.Property<string>(\"PublisherLogoUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"PublisherLogoWidth\")\n                        .HasMaxLength(20);\n\n                    b.Property<string>(\"RecaptchaPrivateKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RecaptchaPublicKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RemoteFeedProcessorUseAgentFragment\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RemoteFeedUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"ShowFeaturedPostsOnDefaultPage\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"ShowRecentPostsOnDefaultPage\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"ShowTitle\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"SiteName\")\n                        .HasMaxLength(200);\n\n                    b.Property<byte>(\"TeaserMode\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue((byte)0);\n\n                    b.Property<int>(\"TeaserTruncationLength\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue(20);\n\n                    b.Property<byte>(\"TeaserTruncationMode\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue((byte)0);\n\n                    b.Property<string>(\"TimeZoneId\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Title\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"TwitterCreator\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"TwitterPublisher\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"UseDefaultPageAsRootNode\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"WebmasterEmail\")\n                        .HasMaxLength(100);\n\n                    b.HasKey(\"Id\");\n\n                    b.ToTable(\"cs_ContentProject\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageCategory\", b =>\n                {\n                    b.Property<string>(\"Value\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.HasKey(\"Value\", \"PageEntityId\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.HasIndex(\"Value\");\n\n                    b.ToTable(\"cs_PageCategory\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"Email\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Ip\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"IsAdmin\");\n\n                    b.Property<bool>(\"IsApproved\");\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<DateTime>(\"PubDate\");\n\n                    b.Property<string>(\"UserAgent\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Website\")\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_PageComment\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CreatedByUser\")\n                        .HasMaxLength(100);\n\n                    b.Property<DateTime>(\"CreatedUtc\");\n\n                    b.Property<bool>(\"DisableEditor\");\n\n                    b.Property<string>(\"DraftAuthor\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"DraftContent\");\n\n                    b.Property<DateTime?>(\"DraftPubDate\");\n\n                    b.Property<string>(\"DraftSerializedModel\");\n\n                    b.Property<string>(\"ExternalUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"IsPublished\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<DateTime>(\"LastModified\");\n\n                    b.Property<string>(\"LastModifiedByUser\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"MenuFilters\")\n                        .HasMaxLength(500);\n\n                    b.Property<bool>(\"MenuOnly\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"MetaHtml\");\n\n                    b.Property<string>(\"MetaJson\");\n\n                    b.Property<int>(\"PageOrder\");\n\n                    b.Property<string>(\"ParentId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ParentSlug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<DateTime?>(\"PubDate\");\n\n                    b.Property<string>(\"SerializedModel\");\n\n                    b.Property<string>(\"Serializer\")\n                        .HasMaxLength(50);\n\n                    b.Property<bool>(\"ShowCategories\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"ShowComments\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"ShowHeading\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"ShowLastModified\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"ShowMenu\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"ShowPubDate\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"Slug\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"TemplateKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ViewRoles\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"ParentId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_Page\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageResourceEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Environment\")\n                        .IsRequired()\n                        .HasMaxLength(15);\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<int>(\"Sort\");\n\n                    b.Property<string>(\"Type\")\n                        .IsRequired()\n                        .HasMaxLength(10);\n\n                    b.Property<string>(\"Url\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.ToTable(\"cs_PageResource\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostCategory\", b =>\n                {\n                    b.Property<string>(\"Value\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PostEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.HasKey(\"Value\", \"PostEntityId\");\n\n                    b.HasIndex(\"PostEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.HasIndex(\"Value\");\n\n                    b.ToTable(\"cs_PostCategory\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"Email\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Ip\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"IsAdmin\");\n\n                    b.Property<bool>(\"IsApproved\");\n\n                    b.Property<string>(\"PostEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<DateTime>(\"PubDate\");\n\n                    b.Property<string>(\"UserAgent\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Website\")\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PostEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_PostComment\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"AutoTeaser\");\n\n                    b.Property<string>(\"BlogId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CreatedByUser\")\n                        .HasMaxLength(100);\n\n                    b.Property<DateTime>(\"CreatedUtc\");\n\n                    b.Property<string>(\"DraftAuthor\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"DraftContent\");\n\n                    b.Property<DateTime?>(\"DraftPubDate\");\n\n                    b.Property<string>(\"DraftSerializedModel\");\n\n                    b.Property<string>(\"ImageUrl\")\n                        .HasMaxLength(250);\n\n                    b.Property<bool>(\"IsFeatured\");\n\n                    b.Property<bool>(\"IsPublished\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<DateTime>(\"LastModified\");\n\n                    b.Property<string>(\"LastModifiedByUser\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"MetaHtml\");\n\n                    b.Property<string>(\"MetaJson\");\n\n                    b.Property<DateTime?>(\"PubDate\");\n\n                    b.Property<string>(\"SerializedModel\");\n\n                    b.Property<string>(\"Serializer\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"Slug\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"SuppressTeaser\");\n\n                    b.Property<string>(\"TeaserOverride\");\n\n                    b.Property<string>(\"TemplateKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ThumbnailUrl\")\n                        .HasMaxLength(250);\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"BlogId\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"Slug\");\n\n                    b.ToTable(\"cs_Post\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\")\n                        .WithMany(\"PageComments\")\n                        .HasForeignKey(\"PageEntityId\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageResourceEntity\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\")\n                        .WithMany(\"PageResources\")\n                        .HasForeignKey(\"PageEntityId\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\")\n                        .WithMany(\"PostComments\")\n                        .HasForeignKey(\"PostEntityId\");\n                });\n#pragma warning restore 612, 618\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.MSSQL/Migrations/20190210160956_simplecontent-20190210.cs",
    "content": "﻿using Microsoft.EntityFrameworkCore.Migrations;\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.MSSQL.Migrations\n{\n    public partial class simplecontent20190210 : Migration\n    {\n        protected override void Up(MigrationBuilder migrationBuilder)\n        {\n            migrationBuilder.AddColumn<string>(\n                name: \"AboutContent\",\n                table: \"cs_ContentProject\",\n                nullable: true);\n        }\n\n        protected override void Down(MigrationBuilder migrationBuilder)\n        {\n            migrationBuilder.DropColumn(\n                name: \"AboutContent\",\n                table: \"cs_ContentProject\");\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.MSSQL/Migrations/20190213120620_simplecontent-20190212.Designer.cs",
    "content": "﻿// <auto-generated />\nusing System;\nusing Microsoft.EntityFrameworkCore;\nusing Microsoft.EntityFrameworkCore.Infrastructure;\nusing Microsoft.EntityFrameworkCore.Metadata;\nusing Microsoft.EntityFrameworkCore.Migrations;\nusing Microsoft.EntityFrameworkCore.Storage.ValueConversion;\nusing cloudscribe.SimpleContent.Models;\nusing cloudscribe.SimpleContent.Storage.EFCore.MSSQL;\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.MSSQL.Migrations\n{\n    [DbContext(typeof(SimpleContentDbContext))]\n    [Migration(\"20190213120620_simplecontent-20190212\")]\n    partial class simplecontent20190212\n    {\n        protected override void BuildTargetModel(ModelBuilder modelBuilder)\n        {\n#pragma warning disable 612, 618\n            modelBuilder\n                .HasAnnotation(\"ProductVersion\", \"2.1.8-servicing-32085\")\n                .HasAnnotation(\"Relational:MaxIdentifierLength\", 128)\n                .HasAnnotation(\"SqlServer:ValueGenerationStrategy\", SqlServerValueGenerationStrategy.IdentityColumn);\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Models.ContentHistory\", b =>\n                {\n                    b.Property<Guid>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ArchivedBy\")\n                        .HasMaxLength(255);\n\n                    b.Property<DateTime>(\"ArchivedUtc\");\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CategoriesCsv\");\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"ContentId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ContentSource\")\n                        .IsRequired()\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CreatedByUser\")\n                        .HasMaxLength(100);\n\n                    b.Property<DateTime>(\"CreatedUtc\");\n\n                    b.Property<string>(\"DraftAuthor\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"DraftContent\");\n\n                    b.Property<DateTime?>(\"DraftPubDate\");\n\n                    b.Property<string>(\"DraftSerializedModel\");\n\n                    b.Property<bool>(\"IsDraftHx\");\n\n                    b.Property<bool>(\"IsPublished\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<DateTime>(\"LastModified\");\n\n                    b.Property<string>(\"LastModifiedByUser\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"MetaDescription\");\n\n                    b.Property<string>(\"MetaHtml\");\n\n                    b.Property<string>(\"MetaJson\");\n\n                    b.Property<int>(\"PageOrder\");\n\n                    b.Property<string>(\"ParentId\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ParentSlug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ProjectId\");\n\n                    b.Property<DateTime?>(\"PubDate\");\n\n                    b.Property<string>(\"SerializedModel\");\n\n                    b.Property<string>(\"Serializer\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"Slug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"TeaserOverride\");\n\n                    b.Property<string>(\"TemplateKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ViewRoles\");\n\n                    b.Property<bool>(\"WasDeleted\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"ContentId\");\n\n                    b.HasIndex(\"ContentSource\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"CreatedByUser\");\n\n                    b.HasIndex(\"LastModifiedByUser\");\n\n                    b.HasIndex(\"Title\");\n\n                    b.ToTable(\"cs_ContentHistory\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Models.ProjectSettings\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"AboutContent\");\n\n                    b.Property<string>(\"AboutHeading\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"AddBlogToPagesTree\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"BlogMenuLinksToNewestPost\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"BlogPageNavComponentVisibility\")\n                        .HasMaxLength(255);\n\n                    b.Property<int>(\"BlogPagePosition\");\n\n                    b.Property<string>(\"BlogPageText\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CdnUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ChannelCategoriesCsv\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ChannelRating\")\n                        .HasMaxLength(100);\n\n                    b.Property<int>(\"ChannelTimeToLive\");\n\n                    b.Property<string>(\"CommentNotificationEmail\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"CopyrightNotice\")\n                        .HasMaxLength(255);\n\n                    b.Property<int>(\"DaysToComment\");\n\n                    b.Property<string>(\"DefaultContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<int>(\"DefaultFeedItems\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue(20);\n\n                    b.Property<string>(\"DefaultPageSlug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Description\");\n\n                    b.Property<string>(\"DisqusShortName\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"FacebookAppId\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Image\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"IncludePubDateInPostUrls\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"LanguageCode\")\n                        .HasMaxLength(10);\n\n                    b.Property<string>(\"LocalMediaVirtualPath\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ManagingEditorEmail\")\n                        .HasMaxLength(100);\n\n                    b.Property<int>(\"MaxFeedItems\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue(1000);\n\n                    b.Property<bool>(\"ModerateComments\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<int>(\"PostsPerPage\");\n\n                    b.Property<string>(\"PubDateFormat\")\n                        .HasMaxLength(75);\n\n                    b.Property<string>(\"Publisher\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"PublisherEntityType\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PublisherLogoHeight\")\n                        .HasMaxLength(20);\n\n                    b.Property<string>(\"PublisherLogoUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"PublisherLogoWidth\")\n                        .HasMaxLength(20);\n\n                    b.Property<string>(\"RecaptchaPrivateKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RecaptchaPublicKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RemoteFeedProcessorUseAgentFragment\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RemoteFeedUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"ShowAboutBox\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue(true);\n\n                    b.Property<bool>(\"ShowFeaturedPostsOnDefaultPage\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"ShowRecentPostsOnDefaultPage\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"ShowRelatedPosts\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue(true);\n\n                    b.Property<bool>(\"ShowTitle\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"SiteName\")\n                        .HasMaxLength(200);\n\n                    b.Property<byte>(\"TeaserMode\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue((byte)0);\n\n                    b.Property<int>(\"TeaserTruncationLength\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue(20);\n\n                    b.Property<byte>(\"TeaserTruncationMode\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue((byte)0);\n\n                    b.Property<string>(\"TimeZoneId\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Title\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"TwitterCreator\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"TwitterPublisher\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"UseDefaultPageAsRootNode\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"WebmasterEmail\")\n                        .HasMaxLength(100);\n\n                    b.HasKey(\"Id\");\n\n                    b.ToTable(\"cs_ContentProject\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageCategory\", b =>\n                {\n                    b.Property<string>(\"Value\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.HasKey(\"Value\", \"PageEntityId\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.HasIndex(\"Value\");\n\n                    b.ToTable(\"cs_PageCategory\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"Email\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Ip\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"IsAdmin\");\n\n                    b.Property<bool>(\"IsApproved\");\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<DateTime>(\"PubDate\");\n\n                    b.Property<string>(\"UserAgent\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Website\")\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_PageComment\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CreatedByUser\")\n                        .HasMaxLength(100);\n\n                    b.Property<DateTime>(\"CreatedUtc\");\n\n                    b.Property<bool>(\"DisableEditor\");\n\n                    b.Property<string>(\"DraftAuthor\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"DraftContent\");\n\n                    b.Property<DateTime?>(\"DraftPubDate\");\n\n                    b.Property<string>(\"DraftSerializedModel\");\n\n                    b.Property<string>(\"ExternalUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"IsPublished\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<DateTime>(\"LastModified\");\n\n                    b.Property<string>(\"LastModifiedByUser\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"MenuFilters\")\n                        .HasMaxLength(500);\n\n                    b.Property<bool>(\"MenuOnly\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"MetaHtml\");\n\n                    b.Property<string>(\"MetaJson\");\n\n                    b.Property<int>(\"PageOrder\");\n\n                    b.Property<string>(\"ParentId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ParentSlug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<DateTime?>(\"PubDate\");\n\n                    b.Property<string>(\"SerializedModel\");\n\n                    b.Property<string>(\"Serializer\")\n                        .HasMaxLength(50);\n\n                    b.Property<bool>(\"ShowCategories\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"ShowComments\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"ShowHeading\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"ShowLastModified\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"ShowMenu\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"ShowPubDate\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"Slug\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"TemplateKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ViewRoles\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"ParentId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_Page\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageResourceEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Environment\")\n                        .IsRequired()\n                        .HasMaxLength(15);\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<int>(\"Sort\");\n\n                    b.Property<string>(\"Type\")\n                        .IsRequired()\n                        .HasMaxLength(10);\n\n                    b.Property<string>(\"Url\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.ToTable(\"cs_PageResource\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostCategory\", b =>\n                {\n                    b.Property<string>(\"Value\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PostEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.HasKey(\"Value\", \"PostEntityId\");\n\n                    b.HasIndex(\"PostEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.HasIndex(\"Value\");\n\n                    b.ToTable(\"cs_PostCategory\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"Email\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Ip\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"IsAdmin\");\n\n                    b.Property<bool>(\"IsApproved\");\n\n                    b.Property<string>(\"PostEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<DateTime>(\"PubDate\");\n\n                    b.Property<string>(\"UserAgent\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Website\")\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PostEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_PostComment\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"AutoTeaser\");\n\n                    b.Property<string>(\"BlogId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CreatedByUser\")\n                        .HasMaxLength(100);\n\n                    b.Property<DateTime>(\"CreatedUtc\");\n\n                    b.Property<string>(\"DraftAuthor\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"DraftContent\");\n\n                    b.Property<DateTime?>(\"DraftPubDate\");\n\n                    b.Property<string>(\"DraftSerializedModel\");\n\n                    b.Property<string>(\"ImageUrl\")\n                        .HasMaxLength(250);\n\n                    b.Property<bool>(\"IsFeatured\");\n\n                    b.Property<bool>(\"IsPublished\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<DateTime>(\"LastModified\");\n\n                    b.Property<string>(\"LastModifiedByUser\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"MetaHtml\");\n\n                    b.Property<string>(\"MetaJson\");\n\n                    b.Property<DateTime?>(\"PubDate\");\n\n                    b.Property<string>(\"SerializedModel\");\n\n                    b.Property<string>(\"Serializer\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"Slug\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"SuppressTeaser\");\n\n                    b.Property<string>(\"TeaserOverride\");\n\n                    b.Property<string>(\"TemplateKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ThumbnailUrl\")\n                        .HasMaxLength(250);\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"BlogId\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"Slug\");\n\n                    b.ToTable(\"cs_Post\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\")\n                        .WithMany(\"PageComments\")\n                        .HasForeignKey(\"PageEntityId\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageResourceEntity\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\")\n                        .WithMany(\"PageResources\")\n                        .HasForeignKey(\"PageEntityId\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\")\n                        .WithMany(\"PostComments\")\n                        .HasForeignKey(\"PostEntityId\");\n                });\n#pragma warning restore 612, 618\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.MSSQL/Migrations/20190213120620_simplecontent-20190212.cs",
    "content": "﻿using Microsoft.EntityFrameworkCore.Migrations;\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.MSSQL.Migrations\n{\n    public partial class simplecontent20190212 : Migration\n    {\n        protected override void Up(MigrationBuilder migrationBuilder)\n        {\n            migrationBuilder.AddColumn<string>(\n                name: \"AboutHeading\",\n                table: \"cs_ContentProject\",\n                maxLength: 255,\n                nullable: true);\n\n            migrationBuilder.AddColumn<bool>(\n                name: \"ShowAboutBox\",\n                table: \"cs_ContentProject\",\n                nullable: false,\n                defaultValue: true);\n\n            migrationBuilder.AddColumn<bool>(\n                name: \"ShowRelatedPosts\",\n                table: \"cs_ContentProject\",\n                nullable: false,\n                defaultValue: true);\n        }\n\n        protected override void Down(MigrationBuilder migrationBuilder)\n        {\n            migrationBuilder.DropColumn(\n                name: \"AboutHeading\",\n                table: \"cs_ContentProject\");\n\n            migrationBuilder.DropColumn(\n                name: \"ShowAboutBox\",\n                table: \"cs_ContentProject\");\n\n            migrationBuilder.DropColumn(\n                name: \"ShowRelatedPosts\",\n                table: \"cs_ContentProject\");\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.MSSQL/Migrations/20190213120720_simplecontent-20190213.Designer.cs",
    "content": "﻿// <auto-generated />\nusing System;\nusing Microsoft.EntityFrameworkCore;\nusing Microsoft.EntityFrameworkCore.Infrastructure;\nusing Microsoft.EntityFrameworkCore.Metadata;\nusing Microsoft.EntityFrameworkCore.Migrations;\nusing Microsoft.EntityFrameworkCore.Storage.ValueConversion;\nusing cloudscribe.SimpleContent.Models;\nusing cloudscribe.SimpleContent.Storage.EFCore.MSSQL;\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.MSSQL.Migrations\n{\n    [DbContext(typeof(SimpleContentDbContext))]\n    [Migration(\"20190213120720_simplecontent-20190213\")]\n    partial class simplecontent20190213\n    {\n        protected override void BuildTargetModel(ModelBuilder modelBuilder)\n        {\n#pragma warning disable 612, 618\n            modelBuilder\n                .HasAnnotation(\"ProductVersion\", \"2.1.8-servicing-32085\")\n                .HasAnnotation(\"Relational:MaxIdentifierLength\", 128)\n                .HasAnnotation(\"SqlServer:ValueGenerationStrategy\", SqlServerValueGenerationStrategy.IdentityColumn);\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Models.ContentHistory\", b =>\n                {\n                    b.Property<Guid>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ArchivedBy\")\n                        .HasMaxLength(255);\n\n                    b.Property<DateTime>(\"ArchivedUtc\");\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CategoriesCsv\");\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"ContentId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ContentSource\")\n                        .IsRequired()\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CreatedByUser\")\n                        .HasMaxLength(100);\n\n                    b.Property<DateTime>(\"CreatedUtc\");\n\n                    b.Property<string>(\"DraftAuthor\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"DraftContent\");\n\n                    b.Property<DateTime?>(\"DraftPubDate\");\n\n                    b.Property<string>(\"DraftSerializedModel\");\n\n                    b.Property<bool>(\"IsDraftHx\");\n\n                    b.Property<bool>(\"IsPublished\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<DateTime>(\"LastModified\");\n\n                    b.Property<string>(\"LastModifiedByUser\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"MetaDescription\");\n\n                    b.Property<string>(\"MetaHtml\");\n\n                    b.Property<string>(\"MetaJson\");\n\n                    b.Property<int>(\"PageOrder\");\n\n                    b.Property<string>(\"ParentId\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ParentSlug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ProjectId\");\n\n                    b.Property<DateTime?>(\"PubDate\");\n\n                    b.Property<string>(\"SerializedModel\");\n\n                    b.Property<string>(\"Serializer\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"Slug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"TeaserOverride\");\n\n                    b.Property<string>(\"TemplateKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ViewRoles\");\n\n                    b.Property<bool>(\"WasDeleted\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"ContentId\");\n\n                    b.HasIndex(\"ContentSource\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"CreatedByUser\");\n\n                    b.HasIndex(\"LastModifiedByUser\");\n\n                    b.HasIndex(\"Title\");\n\n                    b.ToTable(\"cs_ContentHistory\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Models.ProjectSettings\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"AboutContent\");\n\n                    b.Property<string>(\"AboutHeading\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"AddBlogToPagesTree\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"BlogMenuLinksToNewestPost\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"BlogPageNavComponentVisibility\")\n                        .HasMaxLength(255);\n\n                    b.Property<int>(\"BlogPagePosition\");\n\n                    b.Property<string>(\"BlogPageText\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CdnUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ChannelCategoriesCsv\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ChannelRating\")\n                        .HasMaxLength(100);\n\n                    b.Property<int>(\"ChannelTimeToLive\");\n\n                    b.Property<string>(\"CommentNotificationEmail\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"CopyrightNotice\")\n                        .HasMaxLength(255);\n\n                    b.Property<int>(\"DaysToComment\");\n\n                    b.Property<string>(\"DefaultContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<int>(\"DefaultFeedItems\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue(20);\n\n                    b.Property<string>(\"DefaultPageSlug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Description\");\n\n                    b.Property<string>(\"DisqusShortName\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"FacebookAppId\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Image\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"IncludePubDateInPostUrls\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"LanguageCode\")\n                        .HasMaxLength(10);\n\n                    b.Property<string>(\"LocalMediaVirtualPath\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ManagingEditorEmail\")\n                        .HasMaxLength(100);\n\n                    b.Property<int>(\"MaxFeedItems\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue(1000);\n\n                    b.Property<bool>(\"ModerateComments\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<int>(\"PostsPerPage\");\n\n                    b.Property<string>(\"PubDateFormat\")\n                        .HasMaxLength(75);\n\n                    b.Property<string>(\"Publisher\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"PublisherEntityType\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PublisherLogoHeight\")\n                        .HasMaxLength(20);\n\n                    b.Property<string>(\"PublisherLogoUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"PublisherLogoWidth\")\n                        .HasMaxLength(20);\n\n                    b.Property<string>(\"RecaptchaPrivateKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RecaptchaPublicKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RemoteFeedProcessorUseAgentFragment\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RemoteFeedUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"ShowAboutBox\");\n\n                    b.Property<bool>(\"ShowFeaturedPostsOnDefaultPage\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"ShowRecentPostsOnDefaultPage\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"ShowRelatedPosts\");\n\n                    b.Property<bool>(\"ShowTitle\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"SiteName\")\n                        .HasMaxLength(200);\n\n                    b.Property<byte>(\"TeaserMode\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue((byte)0);\n\n                    b.Property<int>(\"TeaserTruncationLength\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue(20);\n\n                    b.Property<byte>(\"TeaserTruncationMode\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue((byte)0);\n\n                    b.Property<string>(\"TimeZoneId\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Title\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"TwitterCreator\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"TwitterPublisher\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"UseDefaultPageAsRootNode\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"WebmasterEmail\")\n                        .HasMaxLength(100);\n\n                    b.HasKey(\"Id\");\n\n                    b.ToTable(\"cs_ContentProject\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageCategory\", b =>\n                {\n                    b.Property<string>(\"Value\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.HasKey(\"Value\", \"PageEntityId\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.HasIndex(\"Value\");\n\n                    b.ToTable(\"cs_PageCategory\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"Email\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Ip\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"IsAdmin\");\n\n                    b.Property<bool>(\"IsApproved\");\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<DateTime>(\"PubDate\");\n\n                    b.Property<string>(\"UserAgent\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Website\")\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_PageComment\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CreatedByUser\")\n                        .HasMaxLength(100);\n\n                    b.Property<DateTime>(\"CreatedUtc\");\n\n                    b.Property<bool>(\"DisableEditor\");\n\n                    b.Property<string>(\"DraftAuthor\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"DraftContent\");\n\n                    b.Property<DateTime?>(\"DraftPubDate\");\n\n                    b.Property<string>(\"DraftSerializedModel\");\n\n                    b.Property<string>(\"ExternalUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"IsPublished\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<DateTime>(\"LastModified\");\n\n                    b.Property<string>(\"LastModifiedByUser\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"MenuFilters\")\n                        .HasMaxLength(500);\n\n                    b.Property<bool>(\"MenuOnly\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"MetaHtml\");\n\n                    b.Property<string>(\"MetaJson\");\n\n                    b.Property<int>(\"PageOrder\");\n\n                    b.Property<string>(\"ParentId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ParentSlug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<DateTime?>(\"PubDate\");\n\n                    b.Property<string>(\"SerializedModel\");\n\n                    b.Property<string>(\"Serializer\")\n                        .HasMaxLength(50);\n\n                    b.Property<bool>(\"ShowCategories\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"ShowComments\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"ShowHeading\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"ShowLastModified\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"ShowMenu\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"ShowPubDate\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"Slug\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"TemplateKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ViewRoles\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"ParentId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_Page\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageResourceEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Environment\")\n                        .IsRequired()\n                        .HasMaxLength(15);\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<int>(\"Sort\");\n\n                    b.Property<string>(\"Type\")\n                        .IsRequired()\n                        .HasMaxLength(10);\n\n                    b.Property<string>(\"Url\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.ToTable(\"cs_PageResource\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostCategory\", b =>\n                {\n                    b.Property<string>(\"Value\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PostEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.HasKey(\"Value\", \"PostEntityId\");\n\n                    b.HasIndex(\"PostEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.HasIndex(\"Value\");\n\n                    b.ToTable(\"cs_PostCategory\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"Email\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Ip\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"IsAdmin\");\n\n                    b.Property<bool>(\"IsApproved\");\n\n                    b.Property<string>(\"PostEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<DateTime>(\"PubDate\");\n\n                    b.Property<string>(\"UserAgent\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Website\")\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PostEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_PostComment\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"AutoTeaser\");\n\n                    b.Property<string>(\"BlogId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CreatedByUser\")\n                        .HasMaxLength(100);\n\n                    b.Property<DateTime>(\"CreatedUtc\");\n\n                    b.Property<string>(\"DraftAuthor\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"DraftContent\");\n\n                    b.Property<DateTime?>(\"DraftPubDate\");\n\n                    b.Property<string>(\"DraftSerializedModel\");\n\n                    b.Property<string>(\"ImageUrl\")\n                        .HasMaxLength(250);\n\n                    b.Property<bool>(\"IsFeatured\");\n\n                    b.Property<bool>(\"IsPublished\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<DateTime>(\"LastModified\");\n\n                    b.Property<string>(\"LastModifiedByUser\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"MetaHtml\");\n\n                    b.Property<string>(\"MetaJson\");\n\n                    b.Property<DateTime?>(\"PubDate\");\n\n                    b.Property<string>(\"SerializedModel\");\n\n                    b.Property<string>(\"Serializer\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"Slug\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"SuppressTeaser\");\n\n                    b.Property<string>(\"TeaserOverride\");\n\n                    b.Property<string>(\"TemplateKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ThumbnailUrl\")\n                        .HasMaxLength(250);\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"BlogId\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"Slug\");\n\n                    b.ToTable(\"cs_Post\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\")\n                        .WithMany(\"PageComments\")\n                        .HasForeignKey(\"PageEntityId\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageResourceEntity\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\")\n                        .WithMany(\"PageResources\")\n                        .HasForeignKey(\"PageEntityId\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\")\n                        .WithMany(\"PostComments\")\n                        .HasForeignKey(\"PostEntityId\");\n                });\n#pragma warning restore 612, 618\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.MSSQL/Migrations/20190213120720_simplecontent-20190213.cs",
    "content": "﻿using Microsoft.EntityFrameworkCore.Migrations;\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.MSSQL.Migrations\n{\n    public partial class simplecontent20190213 : Migration\n    {\n        protected override void Up(MigrationBuilder migrationBuilder)\n        {\n            migrationBuilder.AlterColumn<bool>(\n                name: \"ShowRelatedPosts\",\n                table: \"cs_ContentProject\",\n                nullable: false,\n                oldClrType: typeof(bool),\n                oldDefaultValue: true);\n\n            migrationBuilder.AlterColumn<bool>(\n                name: \"ShowAboutBox\",\n                table: \"cs_ContentProject\",\n                nullable: false,\n                oldClrType: typeof(bool),\n                oldDefaultValue: true);\n        }\n\n        protected override void Down(MigrationBuilder migrationBuilder)\n        {\n            migrationBuilder.AlterColumn<bool>(\n                name: \"ShowRelatedPosts\",\n                table: \"cs_ContentProject\",\n                nullable: false,\n                defaultValue: true,\n                oldClrType: typeof(bool));\n\n            migrationBuilder.AlterColumn<bool>(\n                name: \"ShowAboutBox\",\n                table: \"cs_ContentProject\",\n                nullable: false,\n                defaultValue: true,\n                oldClrType: typeof(bool));\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.MSSQL/Migrations/20190304161740_simplecontent-20190304.Designer.cs",
    "content": "﻿// <auto-generated />\nusing System;\nusing Microsoft.EntityFrameworkCore;\nusing Microsoft.EntityFrameworkCore.Infrastructure;\nusing Microsoft.EntityFrameworkCore.Metadata;\nusing Microsoft.EntityFrameworkCore.Migrations;\nusing Microsoft.EntityFrameworkCore.Storage.ValueConversion;\nusing cloudscribe.SimpleContent.Models;\nusing cloudscribe.SimpleContent.Storage.EFCore.MSSQL;\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.MSSQL.Migrations\n{\n    [DbContext(typeof(SimpleContentDbContext))]\n    [Migration(\"20190304161740_simplecontent-20190304\")]\n    partial class simplecontent20190304\n    {\n        protected override void BuildTargetModel(ModelBuilder modelBuilder)\n        {\n#pragma warning disable 612, 618\n            modelBuilder\n                .HasAnnotation(\"ProductVersion\", \"2.1.8-servicing-32085\")\n                .HasAnnotation(\"Relational:MaxIdentifierLength\", 128)\n                .HasAnnotation(\"SqlServer:ValueGenerationStrategy\", SqlServerValueGenerationStrategy.IdentityColumn);\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Models.ContentHistory\", b =>\n                {\n                    b.Property<Guid>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ArchivedBy\")\n                        .HasMaxLength(255);\n\n                    b.Property<DateTime>(\"ArchivedUtc\");\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CategoriesCsv\");\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"ContentId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ContentSource\")\n                        .IsRequired()\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CreatedByUser\")\n                        .HasMaxLength(100);\n\n                    b.Property<DateTime>(\"CreatedUtc\");\n\n                    b.Property<string>(\"DraftAuthor\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"DraftContent\");\n\n                    b.Property<DateTime?>(\"DraftPubDate\");\n\n                    b.Property<string>(\"DraftSerializedModel\");\n\n                    b.Property<bool>(\"IsDraftHx\");\n\n                    b.Property<bool>(\"IsPublished\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<DateTime>(\"LastModified\");\n\n                    b.Property<string>(\"LastModifiedByUser\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"MetaDescription\");\n\n                    b.Property<string>(\"MetaHtml\");\n\n                    b.Property<string>(\"MetaJson\");\n\n                    b.Property<int>(\"PageOrder\");\n\n                    b.Property<string>(\"ParentId\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ParentSlug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ProjectId\")\n                        .HasMaxLength(50);\n\n                    b.Property<DateTime?>(\"PubDate\");\n\n                    b.Property<string>(\"SerializedModel\");\n\n                    b.Property<string>(\"Serializer\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"Slug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"TeaserOverride\");\n\n                    b.Property<string>(\"TemplateKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ViewRoles\");\n\n                    b.Property<bool>(\"WasDeleted\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"ContentId\");\n\n                    b.HasIndex(\"ContentSource\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"CreatedByUser\");\n\n                    b.HasIndex(\"LastModifiedByUser\");\n\n                    b.HasIndex(\"Title\");\n\n                    b.ToTable(\"cs_ContentHistory\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Models.ProjectSettings\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"AboutContent\");\n\n                    b.Property<string>(\"AboutHeading\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"AddBlogToPagesTree\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"BlogMenuLinksToNewestPost\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"BlogPageNavComponentVisibility\")\n                        .HasMaxLength(255);\n\n                    b.Property<int>(\"BlogPagePosition\");\n\n                    b.Property<string>(\"BlogPageText\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CdnUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ChannelCategoriesCsv\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ChannelRating\")\n                        .HasMaxLength(100);\n\n                    b.Property<int>(\"ChannelTimeToLive\");\n\n                    b.Property<string>(\"CommentNotificationEmail\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"CopyrightNotice\")\n                        .HasMaxLength(255);\n\n                    b.Property<int>(\"DaysToComment\");\n\n                    b.Property<string>(\"DefaultContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<int>(\"DefaultFeedItems\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue(20);\n\n                    b.Property<string>(\"DefaultPageSlug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Description\");\n\n                    b.Property<string>(\"DisqusShortName\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"FacebookAppId\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Image\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"IncludePubDateInPostUrls\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"LanguageCode\")\n                        .HasMaxLength(10);\n\n                    b.Property<string>(\"LocalMediaVirtualPath\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ManagingEditorEmail\")\n                        .HasMaxLength(100);\n\n                    b.Property<int>(\"MaxFeedItems\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue(1000);\n\n                    b.Property<bool>(\"ModerateComments\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<int>(\"PostsPerPage\");\n\n                    b.Property<string>(\"PubDateFormat\")\n                        .HasMaxLength(75);\n\n                    b.Property<string>(\"Publisher\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"PublisherEntityType\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PublisherLogoHeight\")\n                        .HasMaxLength(20);\n\n                    b.Property<string>(\"PublisherLogoUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"PublisherLogoWidth\")\n                        .HasMaxLength(20);\n\n                    b.Property<string>(\"RecaptchaPrivateKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RecaptchaPublicKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RemoteFeedProcessorUseAgentFragment\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RemoteFeedUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"ShowAboutBox\");\n\n                    b.Property<bool>(\"ShowFeaturedPostsOnDefaultPage\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"ShowRecentPostsOnDefaultPage\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"ShowRelatedPosts\");\n\n                    b.Property<bool>(\"ShowTitle\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"SiteName\")\n                        .HasMaxLength(200);\n\n                    b.Property<byte>(\"TeaserMode\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue((byte)0);\n\n                    b.Property<int>(\"TeaserTruncationLength\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue(20);\n\n                    b.Property<byte>(\"TeaserTruncationMode\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue((byte)0);\n\n                    b.Property<string>(\"TimeZoneId\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Title\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"TwitterCreator\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"TwitterPublisher\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"UseDefaultPageAsRootNode\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"WebmasterEmail\")\n                        .HasMaxLength(100);\n\n                    b.HasKey(\"Id\");\n\n                    b.ToTable(\"cs_ContentProject\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageCategory\", b =>\n                {\n                    b.Property<string>(\"Value\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(50);\n\n                    b.HasKey(\"Value\", \"PageEntityId\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.HasIndex(\"Value\");\n\n                    b.ToTable(\"cs_PageCategory\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"Email\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Ip\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"IsAdmin\");\n\n                    b.Property<bool>(\"IsApproved\");\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(50);\n\n                    b.Property<DateTime>(\"PubDate\");\n\n                    b.Property<string>(\"UserAgent\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Website\")\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_PageComment\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CreatedByUser\")\n                        .HasMaxLength(100);\n\n                    b.Property<DateTime>(\"CreatedUtc\");\n\n                    b.Property<bool>(\"DisableEditor\");\n\n                    b.Property<string>(\"DraftAuthor\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"DraftContent\");\n\n                    b.Property<DateTime?>(\"DraftPubDate\");\n\n                    b.Property<string>(\"DraftSerializedModel\");\n\n                    b.Property<string>(\"ExternalUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"IsPublished\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<DateTime>(\"LastModified\");\n\n                    b.Property<string>(\"LastModifiedByUser\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"MenuFilters\")\n                        .HasMaxLength(500);\n\n                    b.Property<bool>(\"MenuOnly\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"MetaHtml\");\n\n                    b.Property<string>(\"MetaJson\");\n\n                    b.Property<int>(\"PageOrder\");\n\n                    b.Property<string>(\"ParentId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ParentSlug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(50);\n\n                    b.Property<DateTime?>(\"PubDate\");\n\n                    b.Property<string>(\"SerializedModel\");\n\n                    b.Property<string>(\"Serializer\")\n                        .HasMaxLength(50);\n\n                    b.Property<bool>(\"ShowCategories\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"ShowComments\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"ShowHeading\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"ShowLastModified\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"ShowMenu\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"ShowPubDate\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"Slug\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"TemplateKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ViewRoles\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"ParentId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_Page\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageResourceEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Environment\")\n                        .IsRequired()\n                        .HasMaxLength(15);\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<int>(\"Sort\");\n\n                    b.Property<string>(\"Type\")\n                        .IsRequired()\n                        .HasMaxLength(10);\n\n                    b.Property<string>(\"Url\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.ToTable(\"cs_PageResource\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostCategory\", b =>\n                {\n                    b.Property<string>(\"Value\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PostEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(50);\n\n                    b.HasKey(\"Value\", \"PostEntityId\");\n\n                    b.HasIndex(\"PostEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.HasIndex(\"Value\");\n\n                    b.ToTable(\"cs_PostCategory\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"Email\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Ip\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"IsAdmin\");\n\n                    b.Property<bool>(\"IsApproved\");\n\n                    b.Property<string>(\"PostEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(50);\n\n                    b.Property<DateTime>(\"PubDate\");\n\n                    b.Property<string>(\"UserAgent\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Website\")\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PostEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_PostComment\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"AutoTeaser\");\n\n                    b.Property<string>(\"BlogId\")\n                        .IsRequired()\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CreatedByUser\")\n                        .HasMaxLength(100);\n\n                    b.Property<DateTime>(\"CreatedUtc\");\n\n                    b.Property<string>(\"DraftAuthor\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"DraftContent\");\n\n                    b.Property<DateTime?>(\"DraftPubDate\");\n\n                    b.Property<string>(\"DraftSerializedModel\");\n\n                    b.Property<string>(\"ImageUrl\")\n                        .HasMaxLength(250);\n\n                    b.Property<bool>(\"IsFeatured\");\n\n                    b.Property<bool>(\"IsPublished\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<DateTime>(\"LastModified\");\n\n                    b.Property<string>(\"LastModifiedByUser\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"MetaHtml\");\n\n                    b.Property<string>(\"MetaJson\");\n\n                    b.Property<DateTime?>(\"PubDate\");\n\n                    b.Property<string>(\"SerializedModel\");\n\n                    b.Property<string>(\"Serializer\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"Slug\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"SuppressTeaser\");\n\n                    b.Property<string>(\"TeaserOverride\");\n\n                    b.Property<string>(\"TemplateKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ThumbnailUrl\")\n                        .HasMaxLength(250);\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"BlogId\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"Slug\");\n\n                    b.ToTable(\"cs_Post\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\")\n                        .WithMany(\"PageComments\")\n                        .HasForeignKey(\"PageEntityId\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageResourceEntity\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\")\n                        .WithMany(\"PageResources\")\n                        .HasForeignKey(\"PageEntityId\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\")\n                        .WithMany(\"PostComments\")\n                        .HasForeignKey(\"PostEntityId\");\n                });\n#pragma warning restore 612, 618\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.MSSQL/Migrations/20190304161740_simplecontent-20190304.cs",
    "content": "﻿using Microsoft.EntityFrameworkCore.Migrations;\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.MSSQL.Migrations\n{\n    public partial class simplecontent20190304 : Migration\n    {\n        protected override void Up(MigrationBuilder migrationBuilder)\n        {\n            migrationBuilder.AlterColumn<string>(\n                name: \"ProjectId\",\n                table: \"cs_PostComment\",\n                maxLength: 50,\n                nullable: false,\n                oldClrType: typeof(string),\n                oldMaxLength: 36);\n\n            migrationBuilder.AlterColumn<string>(\n                name: \"ProjectId\",\n                table: \"cs_PostCategory\",\n                maxLength: 50,\n                nullable: false,\n                oldClrType: typeof(string),\n                oldMaxLength: 36);\n\n            migrationBuilder.AlterColumn<string>(\n                name: \"BlogId\",\n                table: \"cs_Post\",\n                maxLength: 50,\n                nullable: false,\n                oldClrType: typeof(string),\n                oldMaxLength: 36);\n\n            migrationBuilder.AlterColumn<string>(\n                name: \"ProjectId\",\n                table: \"cs_PageComment\",\n                maxLength: 50,\n                nullable: false,\n                oldClrType: typeof(string),\n                oldMaxLength: 36);\n\n            migrationBuilder.AlterColumn<string>(\n                name: \"ProjectId\",\n                table: \"cs_PageCategory\",\n                maxLength: 50,\n                nullable: false,\n                oldClrType: typeof(string),\n                oldMaxLength: 36);\n\n            migrationBuilder.AlterColumn<string>(\n                name: \"ProjectId\",\n                table: \"cs_Page\",\n                maxLength: 50,\n                nullable: false,\n                oldClrType: typeof(string),\n                oldMaxLength: 36);\n\n            migrationBuilder.AlterColumn<string>(\n                name: \"Id\",\n                table: \"cs_ContentProject\",\n                maxLength: 50,\n                nullable: false,\n                oldClrType: typeof(string),\n                oldMaxLength: 36);\n\n            migrationBuilder.AlterColumn<string>(\n                name: \"ProjectId\",\n                table: \"cs_ContentHistory\",\n                maxLength: 50,\n                nullable: true,\n                oldClrType: typeof(string),\n                oldNullable: true);\n        }\n\n        protected override void Down(MigrationBuilder migrationBuilder)\n        {\n            migrationBuilder.AlterColumn<string>(\n                name: \"ProjectId\",\n                table: \"cs_PostComment\",\n                maxLength: 36,\n                nullable: false,\n                oldClrType: typeof(string),\n                oldMaxLength: 50);\n\n            migrationBuilder.AlterColumn<string>(\n                name: \"ProjectId\",\n                table: \"cs_PostCategory\",\n                maxLength: 36,\n                nullable: false,\n                oldClrType: typeof(string),\n                oldMaxLength: 50);\n\n            migrationBuilder.AlterColumn<string>(\n                name: \"BlogId\",\n                table: \"cs_Post\",\n                maxLength: 36,\n                nullable: false,\n                oldClrType: typeof(string),\n                oldMaxLength: 50);\n\n            migrationBuilder.AlterColumn<string>(\n                name: \"ProjectId\",\n                table: \"cs_PageComment\",\n                maxLength: 36,\n                nullable: false,\n                oldClrType: typeof(string),\n                oldMaxLength: 50);\n\n            migrationBuilder.AlterColumn<string>(\n                name: \"ProjectId\",\n                table: \"cs_PageCategory\",\n                maxLength: 36,\n                nullable: false,\n                oldClrType: typeof(string),\n                oldMaxLength: 50);\n\n            migrationBuilder.AlterColumn<string>(\n                name: \"ProjectId\",\n                table: \"cs_Page\",\n                maxLength: 36,\n                nullable: false,\n                oldClrType: typeof(string),\n                oldMaxLength: 50);\n\n            migrationBuilder.AlterColumn<string>(\n                name: \"Id\",\n                table: \"cs_ContentProject\",\n                maxLength: 36,\n                nullable: false,\n                oldClrType: typeof(string),\n                oldMaxLength: 50);\n\n            migrationBuilder.AlterColumn<string>(\n                name: \"ProjectId\",\n                table: \"cs_ContentHistory\",\n                nullable: true,\n                oldClrType: typeof(string),\n                oldMaxLength: 50,\n                oldNullable: true);\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.MSSQL/Migrations/20190312154938_simplecontent-20190312.Designer.cs",
    "content": "﻿// <auto-generated />\nusing System;\nusing Microsoft.EntityFrameworkCore;\nusing Microsoft.EntityFrameworkCore.Infrastructure;\nusing Microsoft.EntityFrameworkCore.Metadata;\nusing Microsoft.EntityFrameworkCore.Migrations;\nusing Microsoft.EntityFrameworkCore.Storage.ValueConversion;\nusing cloudscribe.SimpleContent.Models;\nusing cloudscribe.SimpleContent.Storage.EFCore.MSSQL;\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.MSSQL.Migrations\n{\n    [DbContext(typeof(SimpleContentDbContext))]\n    [Migration(\"20190312154938_simplecontent-20190312\")]\n    partial class simplecontent20190312\n    {\n        protected override void BuildTargetModel(ModelBuilder modelBuilder)\n        {\n#pragma warning disable 612, 618\n            modelBuilder\n                .HasAnnotation(\"ProductVersion\", \"2.1.8-servicing-32085\")\n                .HasAnnotation(\"Relational:MaxIdentifierLength\", 128)\n                .HasAnnotation(\"SqlServer:ValueGenerationStrategy\", SqlServerValueGenerationStrategy.IdentityColumn);\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Models.ContentHistory\", b =>\n                {\n                    b.Property<Guid>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ArchivedBy\")\n                        .HasMaxLength(255);\n\n                    b.Property<DateTime>(\"ArchivedUtc\");\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CategoriesCsv\");\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"ContentId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ContentSource\")\n                        .IsRequired()\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CreatedByUser\")\n                        .HasMaxLength(100);\n\n                    b.Property<DateTime>(\"CreatedUtc\");\n\n                    b.Property<string>(\"DraftAuthor\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"DraftContent\");\n\n                    b.Property<DateTime?>(\"DraftPubDate\");\n\n                    b.Property<string>(\"DraftSerializedModel\");\n\n                    b.Property<bool>(\"IsDraftHx\");\n\n                    b.Property<bool>(\"IsPublished\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<DateTime>(\"LastModified\");\n\n                    b.Property<string>(\"LastModifiedByUser\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"MetaDescription\");\n\n                    b.Property<string>(\"MetaHtml\");\n\n                    b.Property<string>(\"MetaJson\");\n\n                    b.Property<int>(\"PageOrder\");\n\n                    b.Property<string>(\"ParentId\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ParentSlug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ProjectId\")\n                        .HasMaxLength(50);\n\n                    b.Property<DateTime?>(\"PubDate\");\n\n                    b.Property<string>(\"SerializedModel\");\n\n                    b.Property<string>(\"Serializer\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"Slug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"TeaserOverride\");\n\n                    b.Property<string>(\"TemplateKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ViewRoles\");\n\n                    b.Property<bool>(\"WasDeleted\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"ContentId\");\n\n                    b.HasIndex(\"ContentSource\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"CreatedByUser\");\n\n                    b.HasIndex(\"LastModifiedByUser\");\n\n                    b.HasIndex(\"Title\");\n\n                    b.ToTable(\"cs_ContentHistory\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Models.ProjectSettings\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"AboutContent\");\n\n                    b.Property<string>(\"AboutHeading\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"AddBlogToPagesTree\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"BlogMenuLinksToNewestPost\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"BlogPageNavComponentVisibility\")\n                        .HasMaxLength(255);\n\n                    b.Property<int>(\"BlogPagePosition\");\n\n                    b.Property<string>(\"BlogPageText\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CdnUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ChannelCategoriesCsv\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ChannelRating\")\n                        .HasMaxLength(100);\n\n                    b.Property<int>(\"ChannelTimeToLive\");\n\n                    b.Property<string>(\"CommentNotificationEmail\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"CopyrightNotice\")\n                        .HasMaxLength(255);\n\n                    b.Property<int>(\"DaysToComment\");\n\n                    b.Property<string>(\"DefaultContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<int>(\"DefaultFeedItems\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue(20);\n\n                    b.Property<string>(\"DefaultPageSlug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Description\");\n\n                    b.Property<string>(\"DisqusShortName\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"FacebookAppId\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Image\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"IncludePubDateInPostUrls\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"LanguageCode\")\n                        .HasMaxLength(10);\n\n                    b.Property<string>(\"LocalMediaVirtualPath\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ManagingEditorEmail\")\n                        .HasMaxLength(100);\n\n                    b.Property<int>(\"MaxFeedItems\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue(1000);\n\n                    b.Property<bool>(\"ModerateComments\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<int>(\"PostsPerPage\");\n\n                    b.Property<string>(\"PubDateFormat\")\n                        .HasMaxLength(75);\n\n                    b.Property<string>(\"Publisher\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"PublisherEntityType\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PublisherLogoHeight\")\n                        .HasMaxLength(20);\n\n                    b.Property<string>(\"PublisherLogoUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"PublisherLogoWidth\")\n                        .HasMaxLength(20);\n\n                    b.Property<string>(\"RecaptchaPrivateKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RecaptchaPublicKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RemoteFeedProcessorUseAgentFragment\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RemoteFeedUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"ShowAboutBox\");\n\n                    b.Property<bool>(\"ShowFeaturedPostsOnDefaultPage\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"ShowRecentPostsOnDefaultPage\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"ShowRelatedPosts\");\n\n                    b.Property<bool>(\"ShowTitle\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"SiteName\")\n                        .HasMaxLength(200);\n\n                    b.Property<byte>(\"TeaserMode\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue((byte)0);\n\n                    b.Property<int>(\"TeaserTruncationLength\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue(20);\n\n                    b.Property<byte>(\"TeaserTruncationMode\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue((byte)0);\n\n                    b.Property<string>(\"TimeZoneId\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Title\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"TwitterCreator\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"TwitterPublisher\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"UseDefaultPageAsRootNode\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"WebmasterEmail\")\n                        .HasMaxLength(100);\n\n                    b.HasKey(\"Id\");\n\n                    b.ToTable(\"cs_ContentProject\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageCategory\", b =>\n                {\n                    b.Property<string>(\"Value\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(50);\n\n                    b.HasKey(\"Value\", \"PageEntityId\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.HasIndex(\"Value\");\n\n                    b.ToTable(\"cs_PageCategory\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"Email\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Ip\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"IsAdmin\");\n\n                    b.Property<bool>(\"IsApproved\");\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(50);\n\n                    b.Property<DateTime>(\"PubDate\");\n\n                    b.Property<string>(\"UserAgent\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Website\")\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_PageComment\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CreatedByUser\")\n                        .HasMaxLength(100);\n\n                    b.Property<DateTime>(\"CreatedUtc\");\n\n                    b.Property<bool>(\"DisableEditor\");\n\n                    b.Property<string>(\"DraftAuthor\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"DraftContent\");\n\n                    b.Property<DateTime?>(\"DraftPubDate\");\n\n                    b.Property<string>(\"DraftSerializedModel\");\n\n                    b.Property<string>(\"ExternalUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"IsPublished\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<DateTime>(\"LastModified\");\n\n                    b.Property<string>(\"LastModifiedByUser\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"MenuFilters\")\n                        .HasMaxLength(500);\n\n                    b.Property<bool>(\"MenuOnly\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"MetaHtml\");\n\n                    b.Property<string>(\"MetaJson\");\n\n                    b.Property<int>(\"PageOrder\");\n\n                    b.Property<string>(\"ParentId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ParentSlug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(50);\n\n                    b.Property<DateTime?>(\"PubDate\");\n\n                    b.Property<string>(\"SerializedModel\");\n\n                    b.Property<string>(\"Serializer\")\n                        .HasMaxLength(50);\n\n                    b.Property<bool>(\"ShowCategories\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"ShowComments\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"ShowHeading\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"ShowLastModified\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"ShowMenu\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"ShowPubDate\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"Slug\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"TemplateKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ViewRoles\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"ParentId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_Page\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageResourceEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Environment\")\n                        .IsRequired()\n                        .HasMaxLength(15);\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<int>(\"Sort\");\n\n                    b.Property<string>(\"Type\")\n                        .IsRequired()\n                        .HasMaxLength(10);\n\n                    b.Property<string>(\"Url\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.ToTable(\"cs_PageResource\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostCategory\", b =>\n                {\n                    b.Property<string>(\"Value\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PostEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(50);\n\n                    b.HasKey(\"Value\", \"PostEntityId\");\n\n                    b.HasIndex(\"PostEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.HasIndex(\"Value\");\n\n                    b.ToTable(\"cs_PostCategory\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"Email\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Ip\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"IsAdmin\");\n\n                    b.Property<bool>(\"IsApproved\");\n\n                    b.Property<string>(\"PostEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(50);\n\n                    b.Property<DateTime>(\"PubDate\");\n\n                    b.Property<string>(\"UserAgent\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Website\")\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PostEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_PostComment\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"AutoTeaser\");\n\n                    b.Property<string>(\"BlogId\")\n                        .IsRequired()\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CreatedByUser\")\n                        .HasMaxLength(100);\n\n                    b.Property<DateTime>(\"CreatedUtc\");\n\n                    b.Property<string>(\"DraftAuthor\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"DraftContent\");\n\n                    b.Property<DateTime?>(\"DraftPubDate\");\n\n                    b.Property<string>(\"DraftSerializedModel\");\n\n                    b.Property<string>(\"ImageUrl\")\n                        .HasMaxLength(250);\n\n                    b.Property<bool>(\"IsFeatured\");\n\n                    b.Property<bool>(\"IsPublished\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<DateTime>(\"LastModified\");\n\n                    b.Property<string>(\"LastModifiedByUser\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"MetaHtml\");\n\n                    b.Property<string>(\"MetaJson\");\n\n                    b.Property<DateTime?>(\"PubDate\");\n\n                    b.Property<string>(\"SerializedModel\");\n\n                    b.Property<string>(\"Serializer\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"Slug\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"SuppressTeaser\");\n\n                    b.Property<string>(\"TeaserOverride\");\n\n                    b.Property<string>(\"TemplateKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ThumbnailUrl\")\n                        .HasMaxLength(250);\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"BlogId\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"Slug\");\n\n                    b.ToTable(\"cs_Post\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\")\n                        .WithMany(\"PageComments\")\n                        .HasForeignKey(\"PageEntityId\")\n                        .OnDelete(DeleteBehavior.Cascade);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageResourceEntity\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\")\n                        .WithMany(\"PageResources\")\n                        .HasForeignKey(\"PageEntityId\")\n                        .OnDelete(DeleteBehavior.Cascade);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\")\n                        .WithMany(\"PostComments\")\n                        .HasForeignKey(\"PostEntityId\");\n                });\n#pragma warning restore 612, 618\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.MSSQL/Migrations/20190312154938_simplecontent-20190312.cs",
    "content": "﻿using Microsoft.EntityFrameworkCore.Migrations;\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.MSSQL.Migrations\n{\n    public partial class simplecontent20190312 : Migration\n    {\n        protected override void Up(MigrationBuilder migrationBuilder)\n        {\n            migrationBuilder.DropForeignKey(\n                name: \"FK_cs_PageComment_cs_Page_PageEntityId\",\n                table: \"cs_PageComment\");\n\n            migrationBuilder.DropForeignKey(\n                name: \"FK_cs_PageResource_cs_Page_PageEntityId\",\n                table: \"cs_PageResource\");\n\n            migrationBuilder.AddForeignKey(\n                name: \"FK_cs_PageComment_cs_Page_PageEntityId\",\n                table: \"cs_PageComment\",\n                column: \"PageEntityId\",\n                principalTable: \"cs_Page\",\n                principalColumn: \"Id\",\n                onDelete: ReferentialAction.Cascade);\n\n            migrationBuilder.AddForeignKey(\n                name: \"FK_cs_PageResource_cs_Page_PageEntityId\",\n                table: \"cs_PageResource\",\n                column: \"PageEntityId\",\n                principalTable: \"cs_Page\",\n                principalColumn: \"Id\",\n                onDelete: ReferentialAction.Cascade);\n        }\n\n        protected override void Down(MigrationBuilder migrationBuilder)\n        {\n            migrationBuilder.DropForeignKey(\n                name: \"FK_cs_PageComment_cs_Page_PageEntityId\",\n                table: \"cs_PageComment\");\n\n            migrationBuilder.DropForeignKey(\n                name: \"FK_cs_PageResource_cs_Page_PageEntityId\",\n                table: \"cs_PageResource\");\n\n            migrationBuilder.AddForeignKey(\n                name: \"FK_cs_PageComment_cs_Page_PageEntityId\",\n                table: \"cs_PageComment\",\n                column: \"PageEntityId\",\n                principalTable: \"cs_Page\",\n                principalColumn: \"Id\",\n                onDelete: ReferentialAction.Restrict);\n\n            migrationBuilder.AddForeignKey(\n                name: \"FK_cs_PageResource_cs_Page_PageEntityId\",\n                table: \"cs_PageResource\",\n                column: \"PageEntityId\",\n                principalTable: \"cs_Page\",\n                principalColumn: \"Id\",\n                onDelete: ReferentialAction.Restrict);\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.MSSQL/Migrations/20200723185114_AddPostShowCommentsSwitch.Designer.cs",
    "content": "﻿// <auto-generated />\nusing System;\nusing Microsoft.EntityFrameworkCore;\nusing Microsoft.EntityFrameworkCore.Infrastructure;\nusing Microsoft.EntityFrameworkCore.Metadata;\nusing Microsoft.EntityFrameworkCore.Migrations;\nusing Microsoft.EntityFrameworkCore.Storage.ValueConversion;\nusing cloudscribe.SimpleContent.Storage.EFCore.MSSQL;\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.MSSQL.Migrations\n{\n    [DbContext(typeof(SimpleContentDbContext))]\n    [Migration(\"20200723185114_AddPostShowCommentsSwitch\")]\n    partial class AddPostShowCommentsSwitch\n    {\n        protected override void BuildTargetModel(ModelBuilder modelBuilder)\n        {\n#pragma warning disable 612, 618\n            modelBuilder\n                .HasAnnotation(\"ProductVersion\", \"3.0.0\")\n                .HasAnnotation(\"Relational:MaxIdentifierLength\", 128)\n                .HasAnnotation(\"SqlServer:ValueGenerationStrategy\", SqlServerValueGenerationStrategy.IdentityColumn);\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Models.ContentHistory\", b =>\n                {\n                    b.Property<Guid>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"uniqueidentifier\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ArchivedBy\")\n                        .HasColumnType(\"nvarchar(255)\")\n                        .HasMaxLength(255);\n\n                    b.Property<DateTime>(\"ArchivedUtc\")\n                        .HasColumnType(\"datetime2\");\n\n                    b.Property<string>(\"Author\")\n                        .HasColumnType(\"nvarchar(255)\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<string>(\"Content\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<string>(\"ContentId\")\n                        .IsRequired()\n                        .HasColumnType(\"nvarchar(36)\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ContentSource\")\n                        .IsRequired()\n                        .HasColumnType(\"nvarchar(50)\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"nvarchar(50)\")\n                        .HasMaxLength(50)\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasColumnType(\"nvarchar(255)\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CreatedByUser\")\n                        .HasColumnType(\"nvarchar(100)\")\n                        .HasMaxLength(100);\n\n                    b.Property<DateTime>(\"CreatedUtc\")\n                        .HasColumnType(\"datetime2\");\n\n                    b.Property<string>(\"DraftAuthor\")\n                        .HasColumnType(\"nvarchar(255)\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"DraftContent\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<DateTime?>(\"DraftPubDate\")\n                        .HasColumnType(\"datetime2\");\n\n                    b.Property<string>(\"DraftSerializedModel\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<bool>(\"IsDraftHx\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"IsPublished\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<DateTime>(\"LastModified\")\n                        .HasColumnType(\"datetime2\");\n\n                    b.Property<string>(\"LastModifiedByUser\")\n                        .HasColumnType(\"nvarchar(100)\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<string>(\"MetaHtml\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<string>(\"MetaJson\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<int>(\"PageOrder\")\n                        .HasColumnType(\"int\");\n\n                    b.Property<string>(\"ParentId\")\n                        .HasColumnType(\"nvarchar(255)\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ParentSlug\")\n                        .HasColumnType(\"nvarchar(255)\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ProjectId\")\n                        .HasColumnType(\"nvarchar(50)\")\n                        .HasMaxLength(50);\n\n                    b.Property<DateTime?>(\"PubDate\")\n                        .HasColumnType(\"datetime2\");\n\n                    b.Property<string>(\"SerializedModel\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<string>(\"Serializer\")\n                        .HasColumnType(\"nvarchar(50)\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"Slug\")\n                        .HasColumnType(\"nvarchar(255)\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"TeaserOverride\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<string>(\"TemplateKey\")\n                        .HasColumnType(\"nvarchar(255)\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasColumnType(\"nvarchar(255)\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ViewRoles\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<bool>(\"WasDeleted\")\n                        .HasColumnType(\"bit\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"ContentId\");\n\n                    b.HasIndex(\"ContentSource\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"CreatedByUser\");\n\n                    b.HasIndex(\"LastModifiedByUser\");\n\n                    b.HasIndex(\"Title\");\n\n                    b.ToTable(\"cs_ContentHistory\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Models.ProjectSettings\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .HasColumnType(\"nvarchar(50)\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"AboutContent\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<string>(\"AboutHeading\")\n                        .HasColumnType(\"nvarchar(255)\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"AddBlogToPagesTree\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"BlogMenuLinksToNewestPost\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"BlogPageNavComponentVisibility\")\n                        .HasColumnType(\"nvarchar(255)\")\n                        .HasMaxLength(255);\n\n                    b.Property<int>(\"BlogPagePosition\")\n                        .HasColumnType(\"int\");\n\n                    b.Property<string>(\"BlogPageText\")\n                        .HasColumnType(\"nvarchar(255)\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CdnUrl\")\n                        .HasColumnType(\"nvarchar(255)\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ChannelCategoriesCsv\")\n                        .HasColumnType(\"nvarchar(255)\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ChannelRating\")\n                        .HasColumnType(\"nvarchar(100)\")\n                        .HasMaxLength(100);\n\n                    b.Property<int>(\"ChannelTimeToLive\")\n                        .HasColumnType(\"int\");\n\n                    b.Property<string>(\"CommentNotificationEmail\")\n                        .HasColumnType(\"nvarchar(100)\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"CopyrightNotice\")\n                        .HasColumnType(\"nvarchar(255)\")\n                        .HasMaxLength(255);\n\n                    b.Property<int>(\"DaysToComment\")\n                        .HasColumnType(\"int\");\n\n                    b.Property<string>(\"DefaultContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"nvarchar(50)\")\n                        .HasMaxLength(50)\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<int>(\"DefaultFeedItems\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"int\")\n                        .HasDefaultValue(20);\n\n                    b.Property<string>(\"DefaultPageSlug\")\n                        .HasColumnType(\"nvarchar(255)\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Description\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<string>(\"DisqusShortName\")\n                        .HasColumnType(\"nvarchar(100)\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"FacebookAppId\")\n                        .HasColumnType(\"nvarchar(100)\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Image\")\n                        .HasColumnType(\"nvarchar(255)\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"IncludePubDateInPostUrls\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"LanguageCode\")\n                        .HasColumnType(\"nvarchar(10)\")\n                        .HasMaxLength(10);\n\n                    b.Property<string>(\"LocalMediaVirtualPath\")\n                        .HasColumnType(\"nvarchar(255)\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ManagingEditorEmail\")\n                        .HasColumnType(\"nvarchar(100)\")\n                        .HasMaxLength(100);\n\n                    b.Property<int>(\"MaxFeedItems\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"int\")\n                        .HasDefaultValue(1000);\n\n                    b.Property<bool>(\"ModerateComments\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<int>(\"PostsPerPage\")\n                        .HasColumnType(\"int\");\n\n                    b.Property<string>(\"PubDateFormat\")\n                        .HasColumnType(\"nvarchar(75)\")\n                        .HasMaxLength(75);\n\n                    b.Property<string>(\"Publisher\")\n                        .HasColumnType(\"nvarchar(255)\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"PublisherEntityType\")\n                        .HasColumnType(\"nvarchar(50)\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PublisherLogoHeight\")\n                        .HasColumnType(\"nvarchar(20)\")\n                        .HasMaxLength(20);\n\n                    b.Property<string>(\"PublisherLogoUrl\")\n                        .HasColumnType(\"nvarchar(255)\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"PublisherLogoWidth\")\n                        .HasColumnType(\"nvarchar(20)\")\n                        .HasMaxLength(20);\n\n                    b.Property<string>(\"RecaptchaPrivateKey\")\n                        .HasColumnType(\"nvarchar(255)\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RecaptchaPublicKey\")\n                        .HasColumnType(\"nvarchar(255)\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RemoteFeedProcessorUseAgentFragment\")\n                        .HasColumnType(\"nvarchar(255)\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RemoteFeedUrl\")\n                        .HasColumnType(\"nvarchar(255)\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"ShowAboutBox\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"ShowFeaturedPostsOnDefaultPage\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"ShowRecentPostsOnDefaultPage\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"ShowRelatedPosts\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"ShowTitle\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"SiteName\")\n                        .HasColumnType(\"nvarchar(200)\")\n                        .HasMaxLength(200);\n\n                    b.Property<byte>(\"TeaserMode\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"tinyint\")\n                        .HasDefaultValue((byte)0);\n\n                    b.Property<int>(\"TeaserTruncationLength\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"int\")\n                        .HasDefaultValue(20);\n\n                    b.Property<byte>(\"TeaserTruncationMode\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"tinyint\")\n                        .HasDefaultValue((byte)0);\n\n                    b.Property<string>(\"TimeZoneId\")\n                        .HasColumnType(\"nvarchar(100)\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Title\")\n                        .HasColumnType(\"nvarchar(255)\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"TwitterCreator\")\n                        .HasColumnType(\"nvarchar(100)\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"TwitterPublisher\")\n                        .HasColumnType(\"nvarchar(100)\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"UseDefaultPageAsRootNode\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"WebmasterEmail\")\n                        .HasColumnType(\"nvarchar(100)\")\n                        .HasMaxLength(100);\n\n                    b.HasKey(\"Id\");\n\n                    b.ToTable(\"cs_ContentProject\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageCategory\", b =>\n                {\n                    b.Property<string>(\"Value\")\n                        .HasColumnType(\"nvarchar(50)\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasColumnType(\"nvarchar(36)\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasColumnType(\"nvarchar(50)\")\n                        .HasMaxLength(50);\n\n                    b.HasKey(\"Value\", \"PageEntityId\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.HasIndex(\"Value\");\n\n                    b.ToTable(\"cs_PageCategory\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .HasColumnType(\"nvarchar(36)\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasColumnType(\"nvarchar(255)\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Content\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<string>(\"Email\")\n                        .HasColumnType(\"nvarchar(100)\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Ip\")\n                        .HasColumnType(\"nvarchar(100)\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"IsAdmin\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"IsApproved\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasColumnType(\"nvarchar(36)\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasColumnType(\"nvarchar(50)\")\n                        .HasMaxLength(50);\n\n                    b.Property<DateTime>(\"PubDate\")\n                        .HasColumnType(\"datetime2\");\n\n                    b.Property<string>(\"UserAgent\")\n                        .HasColumnType(\"nvarchar(255)\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Website\")\n                        .HasColumnType(\"nvarchar(255)\")\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_PageComment\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .HasColumnType(\"nvarchar(36)\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasColumnType(\"nvarchar(255)\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasColumnType(\"nvarchar(500)\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"Content\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"nvarchar(50)\")\n                        .HasMaxLength(50)\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasColumnType(\"nvarchar(255)\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CreatedByUser\")\n                        .HasColumnType(\"nvarchar(100)\")\n                        .HasMaxLength(100);\n\n                    b.Property<DateTime>(\"CreatedUtc\")\n                        .HasColumnType(\"datetime2\");\n\n                    b.Property<bool>(\"DisableEditor\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"DraftAuthor\")\n                        .HasColumnType(\"nvarchar(255)\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"DraftContent\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<DateTime?>(\"DraftPubDate\")\n                        .HasColumnType(\"datetime2\");\n\n                    b.Property<string>(\"DraftSerializedModel\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<string>(\"ExternalUrl\")\n                        .HasColumnType(\"nvarchar(255)\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"IsPublished\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<DateTime>(\"LastModified\")\n                        .HasColumnType(\"datetime2\");\n\n                    b.Property<string>(\"LastModifiedByUser\")\n                        .HasColumnType(\"nvarchar(100)\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"MenuFilters\")\n                        .HasColumnType(\"nvarchar(500)\")\n                        .HasMaxLength(500);\n\n                    b.Property<bool>(\"MenuOnly\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasColumnType(\"nvarchar(500)\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"MetaHtml\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<string>(\"MetaJson\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<int>(\"PageOrder\")\n                        .HasColumnType(\"int\");\n\n                    b.Property<string>(\"ParentId\")\n                        .HasColumnType(\"nvarchar(36)\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ParentSlug\")\n                        .HasColumnType(\"nvarchar(255)\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasColumnType(\"nvarchar(50)\")\n                        .HasMaxLength(50);\n\n                    b.Property<DateTime?>(\"PubDate\")\n                        .HasColumnType(\"datetime2\");\n\n                    b.Property<string>(\"SerializedModel\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<string>(\"Serializer\")\n                        .HasColumnType(\"nvarchar(50)\")\n                        .HasMaxLength(50);\n\n                    b.Property<bool>(\"ShowCategories\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"ShowComments\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"ShowHeading\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"ShowLastModified\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"ShowMenu\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"ShowPubDate\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"Slug\")\n                        .IsRequired()\n                        .HasColumnType(\"nvarchar(255)\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"TemplateKey\")\n                        .HasColumnType(\"nvarchar(255)\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasColumnType(\"nvarchar(255)\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ViewRoles\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"ParentId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_Page\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageResourceEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .HasColumnType(\"nvarchar(36)\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Environment\")\n                        .IsRequired()\n                        .HasColumnType(\"nvarchar(15)\")\n                        .HasMaxLength(15);\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasColumnType(\"nvarchar(36)\")\n                        .HasMaxLength(36);\n\n                    b.Property<int>(\"Sort\")\n                        .HasColumnType(\"int\");\n\n                    b.Property<string>(\"Type\")\n                        .IsRequired()\n                        .HasColumnType(\"nvarchar(10)\")\n                        .HasMaxLength(10);\n\n                    b.Property<string>(\"Url\")\n                        .IsRequired()\n                        .HasColumnType(\"nvarchar(255)\")\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.ToTable(\"cs_PageResource\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostCategory\", b =>\n                {\n                    b.Property<string>(\"Value\")\n                        .HasColumnType(\"nvarchar(50)\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PostEntityId\")\n                        .HasColumnType(\"nvarchar(36)\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasColumnType(\"nvarchar(50)\")\n                        .HasMaxLength(50);\n\n                    b.HasKey(\"Value\", \"PostEntityId\");\n\n                    b.HasIndex(\"PostEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.HasIndex(\"Value\");\n\n                    b.ToTable(\"cs_PostCategory\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .HasColumnType(\"nvarchar(36)\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasColumnType(\"nvarchar(255)\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Content\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<string>(\"Email\")\n                        .HasColumnType(\"nvarchar(100)\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Ip\")\n                        .HasColumnType(\"nvarchar(100)\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"IsAdmin\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"IsApproved\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"PostEntityId\")\n                        .HasColumnType(\"nvarchar(36)\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasColumnType(\"nvarchar(50)\")\n                        .HasMaxLength(50);\n\n                    b.Property<DateTime>(\"PubDate\")\n                        .HasColumnType(\"datetime2\");\n\n                    b.Property<string>(\"UserAgent\")\n                        .HasColumnType(\"nvarchar(255)\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Website\")\n                        .HasColumnType(\"nvarchar(255)\")\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PostEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_PostComment\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .HasColumnType(\"nvarchar(36)\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasColumnType(\"nvarchar(255)\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"AutoTeaser\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<string>(\"BlogId\")\n                        .IsRequired()\n                        .HasColumnType(\"nvarchar(50)\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasColumnType(\"nvarchar(500)\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"Content\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"nvarchar(50)\")\n                        .HasMaxLength(50)\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasColumnType(\"nvarchar(255)\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CreatedByUser\")\n                        .HasColumnType(\"nvarchar(100)\")\n                        .HasMaxLength(100);\n\n                    b.Property<DateTime>(\"CreatedUtc\")\n                        .HasColumnType(\"datetime2\");\n\n                    b.Property<string>(\"DraftAuthor\")\n                        .HasColumnType(\"nvarchar(255)\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"DraftContent\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<DateTime?>(\"DraftPubDate\")\n                        .HasColumnType(\"datetime2\");\n\n                    b.Property<string>(\"DraftSerializedModel\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<string>(\"ImageUrl\")\n                        .HasColumnType(\"nvarchar(250)\")\n                        .HasMaxLength(250);\n\n                    b.Property<bool>(\"IsFeatured\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"IsPublished\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<DateTime>(\"LastModified\")\n                        .HasColumnType(\"datetime2\");\n\n                    b.Property<string>(\"LastModifiedByUser\")\n                        .HasColumnType(\"nvarchar(100)\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasColumnType(\"nvarchar(500)\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"MetaHtml\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<string>(\"MetaJson\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<DateTime?>(\"PubDate\")\n                        .HasColumnType(\"datetime2\");\n\n                    b.Property<string>(\"SerializedModel\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<string>(\"Serializer\")\n                        .HasColumnType(\"nvarchar(50)\")\n                        .HasMaxLength(50);\n\n                    b.Property<bool>(\"ShowComments\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"Slug\")\n                        .IsRequired()\n                        .HasColumnType(\"nvarchar(255)\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"SuppressTeaser\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"TeaserOverride\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<string>(\"TemplateKey\")\n                        .HasColumnType(\"nvarchar(255)\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ThumbnailUrl\")\n                        .HasColumnType(\"nvarchar(250)\")\n                        .HasMaxLength(250);\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasColumnType(\"nvarchar(255)\")\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"BlogId\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"Slug\");\n\n                    b.ToTable(\"cs_Post\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\", null)\n                        .WithMany(\"PageComments\")\n                        .HasForeignKey(\"PageEntityId\")\n                        .OnDelete(DeleteBehavior.Cascade);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageResourceEntity\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\", null)\n                        .WithMany(\"PageResources\")\n                        .HasForeignKey(\"PageEntityId\")\n                        .OnDelete(DeleteBehavior.Cascade);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\", null)\n                        .WithMany(\"PostComments\")\n                        .HasForeignKey(\"PostEntityId\");\n                });\n#pragma warning restore 612, 618\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.MSSQL/Migrations/20200723185114_AddPostShowCommentsSwitch.cs",
    "content": "﻿using Microsoft.EntityFrameworkCore.Migrations;\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.MSSQL.Migrations\n{\n    public partial class AddPostShowCommentsSwitch : Migration\n    {\n        protected override void Up(MigrationBuilder migrationBuilder)\n        {\n            migrationBuilder.AddColumn<bool>(\n                name: \"ShowComments\",\n                table: \"cs_Post\",\n                nullable: false,\n                defaultValue: false);\n        }\n\n        protected override void Down(MigrationBuilder migrationBuilder)\n        {\n            migrationBuilder.DropColumn(\n                name: \"ShowComments\",\n                table: \"cs_Post\");\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.MSSQL/Migrations/20240918131738_ShowArchivedAndBlogCategories-20240918.Designer.cs",
    "content": "﻿// <auto-generated />\nusing System;\nusing Microsoft.EntityFrameworkCore;\nusing Microsoft.EntityFrameworkCore.Infrastructure;\nusing Microsoft.EntityFrameworkCore.Metadata;\nusing Microsoft.EntityFrameworkCore.Migrations;\nusing Microsoft.EntityFrameworkCore.Storage.ValueConversion;\nusing cloudscribe.SimpleContent.Storage.EFCore.MSSQL;\n\n#nullable disable\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.MSSQL.Migrations\n{\n    [DbContext(typeof(SimpleContentDbContext))]\n    [Migration(\"20240918131738_ShowArchivedAndBlogCategories-20240918\")]\n    partial class ShowArchivedAndBlogCategories20240918\n    {\n        /// <inheritdoc />\n        protected override void BuildTargetModel(ModelBuilder modelBuilder)\n        {\n#pragma warning disable 612, 618\n            modelBuilder\n                .HasAnnotation(\"ProductVersion\", \"8.0.0\")\n                .HasAnnotation(\"Relational:MaxIdentifierLength\", 128);\n\n            SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder);\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Models.ContentHistory\", b =>\n                {\n                    b.Property<Guid>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36)\n                        .HasColumnType(\"uniqueidentifier\");\n\n                    b.Property<string>(\"ArchivedBy\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<DateTime>(\"ArchivedUtc\")\n                        .HasColumnType(\"datetime2\");\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<string>(\"Content\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<string>(\"ContentId\")\n                        .IsRequired()\n                        .HasMaxLength(36)\n                        .HasColumnType(\"nvarchar(36)\");\n\n                    b.Property<string>(\"ContentSource\")\n                        .IsRequired()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"nvarchar(50)\");\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"nvarchar(50)\")\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"CreatedByUser\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"nvarchar(100)\");\n\n                    b.Property<DateTime>(\"CreatedUtc\")\n                        .HasColumnType(\"datetime2\");\n\n                    b.Property<string>(\"DraftAuthor\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"DraftContent\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<DateTime?>(\"DraftPubDate\")\n                        .HasColumnType(\"datetime2\");\n\n                    b.Property<string>(\"DraftSerializedModel\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<bool>(\"IsDraftHx\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"IsPublished\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<DateTime>(\"LastModified\")\n                        .HasColumnType(\"datetime2\");\n\n                    b.Property<string>(\"LastModifiedByUser\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"nvarchar(100)\");\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<string>(\"MetaHtml\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<string>(\"MetaJson\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<int>(\"PageOrder\")\n                        .HasColumnType(\"int\");\n\n                    b.Property<string>(\"ParentId\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"ParentSlug\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"ProjectId\")\n                        .HasMaxLength(50)\n                        .HasColumnType(\"nvarchar(50)\");\n\n                    b.Property<DateTime?>(\"PubDate\")\n                        .HasColumnType(\"datetime2\");\n\n                    b.Property<string>(\"SerializedModel\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<string>(\"Serializer\")\n                        .HasMaxLength(50)\n                        .HasColumnType(\"nvarchar(50)\");\n\n                    b.Property<string>(\"Slug\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"TeaserOverride\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<string>(\"TemplateKey\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"ViewRoles\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<bool>(\"WasDeleted\")\n                        .HasColumnType(\"bit\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"ContentId\");\n\n                    b.HasIndex(\"ContentSource\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"CreatedByUser\");\n\n                    b.HasIndex(\"LastModifiedByUser\");\n\n                    b.HasIndex(\"Title\");\n\n                    b.ToTable(\"cs_ContentHistory\", null, t =>\n                        {\n                            t.HasTrigger(\"cs_ContentHistory_Trigger\");\n                        });\n\n                    b.HasAnnotation(\"SqlServer:UseSqlOutputClause\", false);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Models.ProjectSettings\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .HasMaxLength(50)\n                        .HasColumnType(\"nvarchar(50)\");\n\n                    b.Property<string>(\"AboutContent\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<string>(\"AboutHeading\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<bool>(\"AddBlogToPagesTree\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"BlogMenuLinksToNewestPost\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"BlogPageNavComponentVisibility\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<int>(\"BlogPagePosition\")\n                        .HasColumnType(\"int\");\n\n                    b.Property<string>(\"BlogPageText\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"CdnUrl\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"ChannelCategoriesCsv\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"ChannelRating\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"nvarchar(100)\");\n\n                    b.Property<int>(\"ChannelTimeToLive\")\n                        .HasColumnType(\"int\");\n\n                    b.Property<string>(\"CommentNotificationEmail\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"nvarchar(100)\");\n\n                    b.Property<string>(\"CopyrightNotice\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<int>(\"DaysToComment\")\n                        .HasColumnType(\"int\");\n\n                    b.Property<string>(\"DefaultContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"nvarchar(50)\")\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<int>(\"DefaultFeedItems\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"int\")\n                        .HasDefaultValue(20);\n\n                    b.Property<string>(\"DefaultPageSlug\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"Description\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<string>(\"DisqusShortName\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"nvarchar(100)\");\n\n                    b.Property<string>(\"FacebookAppId\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"nvarchar(100)\");\n\n                    b.Property<string>(\"Image\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<bool>(\"IncludePubDateInPostUrls\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"LanguageCode\")\n                        .HasMaxLength(10)\n                        .HasColumnType(\"nvarchar(10)\");\n\n                    b.Property<string>(\"LocalMediaVirtualPath\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"ManagingEditorEmail\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"nvarchar(100)\");\n\n                    b.Property<int>(\"MaxFeedItems\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"int\")\n                        .HasDefaultValue(1000);\n\n                    b.Property<bool>(\"ModerateComments\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<int>(\"PostsPerPage\")\n                        .HasColumnType(\"int\");\n\n                    b.Property<string>(\"PubDateFormat\")\n                        .HasMaxLength(75)\n                        .HasColumnType(\"nvarchar(75)\");\n\n                    b.Property<string>(\"Publisher\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"PublisherEntityType\")\n                        .HasMaxLength(50)\n                        .HasColumnType(\"nvarchar(50)\");\n\n                    b.Property<string>(\"PublisherLogoHeight\")\n                        .HasMaxLength(20)\n                        .HasColumnType(\"nvarchar(20)\");\n\n                    b.Property<string>(\"PublisherLogoUrl\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"PublisherLogoWidth\")\n                        .HasMaxLength(20)\n                        .HasColumnType(\"nvarchar(20)\");\n\n                    b.Property<string>(\"RecaptchaPrivateKey\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"RecaptchaPublicKey\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"RemoteFeedProcessorUseAgentFragment\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"RemoteFeedUrl\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<bool>(\"ShowAboutBox\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"ShowArchivedPosts\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"ShowBlogCategories\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"ShowFeaturedPostsOnDefaultPage\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"ShowRecentPostsOnDefaultPage\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"ShowRelatedPosts\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"ShowTitle\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"SiteName\")\n                        .HasMaxLength(200)\n                        .HasColumnType(\"nvarchar(200)\");\n\n                    b.Property<byte>(\"TeaserMode\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"tinyint\")\n                        .HasDefaultValue((byte)0);\n\n                    b.Property<int>(\"TeaserTruncationLength\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"int\")\n                        .HasDefaultValue(20);\n\n                    b.Property<byte>(\"TeaserTruncationMode\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"tinyint\")\n                        .HasDefaultValue((byte)0);\n\n                    b.Property<string>(\"TimeZoneId\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"nvarchar(100)\");\n\n                    b.Property<string>(\"Title\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"TwitterCreator\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"nvarchar(100)\");\n\n                    b.Property<string>(\"TwitterPublisher\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"nvarchar(100)\");\n\n                    b.Property<bool>(\"UseDefaultPageAsRootNode\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"WebmasterEmail\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"nvarchar(100)\");\n\n                    b.HasKey(\"Id\");\n\n                    b.ToTable(\"cs_ContentProject\", null, t =>\n                        {\n                            t.HasTrigger(\"cs_ContentProject_Trigger\");\n                        });\n\n                    b.HasAnnotation(\"SqlServer:UseSqlOutputClause\", false);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageCategory\", b =>\n                {\n                    b.Property<string>(\"Value\")\n                        .HasMaxLength(50)\n                        .HasColumnType(\"nvarchar(50)\");\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"nvarchar(36)\");\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"nvarchar(50)\");\n\n                    b.HasKey(\"Value\", \"PageEntityId\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.HasIndex(\"Value\");\n\n                    b.ToTable(\"cs_PageCategory\", null, t =>\n                        {\n                            t.HasTrigger(\"cs_PageCategory_Trigger\");\n                        });\n\n                    b.HasAnnotation(\"SqlServer:UseSqlOutputClause\", false);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"nvarchar(36)\");\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"Content\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<string>(\"Email\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"nvarchar(100)\");\n\n                    b.Property<string>(\"Ip\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"nvarchar(100)\");\n\n                    b.Property<bool>(\"IsAdmin\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"IsApproved\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"nvarchar(36)\");\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"nvarchar(50)\");\n\n                    b.Property<DateTime>(\"PubDate\")\n                        .HasColumnType(\"datetime2\");\n\n                    b.Property<string>(\"UserAgent\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"Website\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_PageComment\", null, t =>\n                        {\n                            t.HasTrigger(\"cs_PageComment_Trigger\");\n                        });\n\n                    b.HasAnnotation(\"SqlServer:UseSqlOutputClause\", false);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"nvarchar(36)\");\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasMaxLength(500)\n                        .HasColumnType(\"nvarchar(500)\");\n\n                    b.Property<string>(\"Content\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"nvarchar(50)\")\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"CreatedByUser\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"nvarchar(100)\");\n\n                    b.Property<DateTime>(\"CreatedUtc\")\n                        .HasColumnType(\"datetime2\");\n\n                    b.Property<bool>(\"DisableEditor\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"DraftAuthor\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"DraftContent\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<DateTime?>(\"DraftPubDate\")\n                        .HasColumnType(\"datetime2\");\n\n                    b.Property<string>(\"DraftSerializedModel\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<string>(\"ExternalUrl\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<bool>(\"IsPublished\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<DateTime>(\"LastModified\")\n                        .HasColumnType(\"datetime2\");\n\n                    b.Property<string>(\"LastModifiedByUser\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"nvarchar(100)\");\n\n                    b.Property<string>(\"MenuFilters\")\n                        .HasMaxLength(500)\n                        .HasColumnType(\"nvarchar(500)\");\n\n                    b.Property<bool>(\"MenuOnly\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasMaxLength(500)\n                        .HasColumnType(\"nvarchar(500)\");\n\n                    b.Property<string>(\"MetaHtml\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<string>(\"MetaJson\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<int>(\"PageOrder\")\n                        .HasColumnType(\"int\");\n\n                    b.Property<string>(\"ParentId\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"nvarchar(36)\");\n\n                    b.Property<string>(\"ParentSlug\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"nvarchar(50)\");\n\n                    b.Property<DateTime?>(\"PubDate\")\n                        .HasColumnType(\"datetime2\");\n\n                    b.Property<string>(\"SerializedModel\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<string>(\"Serializer\")\n                        .HasMaxLength(50)\n                        .HasColumnType(\"nvarchar(50)\");\n\n                    b.Property<bool>(\"ShowCategories\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"ShowComments\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"ShowHeading\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"ShowLastModified\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"ShowMenu\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"ShowPubDate\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"Slug\")\n                        .IsRequired()\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"TemplateKey\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"ViewRoles\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"ParentId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_Page\", null, t =>\n                        {\n                            t.HasTrigger(\"cs_Page_Trigger\");\n                        });\n\n                    b.HasAnnotation(\"SqlServer:UseSqlOutputClause\", false);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageResourceEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"nvarchar(36)\");\n\n                    b.Property<string>(\"Environment\")\n                        .IsRequired()\n                        .HasMaxLength(15)\n                        .HasColumnType(\"nvarchar(15)\");\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"nvarchar(36)\");\n\n                    b.Property<int>(\"Sort\")\n                        .HasColumnType(\"int\");\n\n                    b.Property<string>(\"Type\")\n                        .IsRequired()\n                        .HasMaxLength(10)\n                        .HasColumnType(\"nvarchar(10)\");\n\n                    b.Property<string>(\"Url\")\n                        .IsRequired()\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.ToTable(\"cs_PageResource\", null, t =>\n                        {\n                            t.HasTrigger(\"cs_PageResource_Trigger\");\n                        });\n\n                    b.HasAnnotation(\"SqlServer:UseSqlOutputClause\", false);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostCategory\", b =>\n                {\n                    b.Property<string>(\"Value\")\n                        .HasMaxLength(50)\n                        .HasColumnType(\"nvarchar(50)\");\n\n                    b.Property<string>(\"PostEntityId\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"nvarchar(36)\");\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"nvarchar(50)\");\n\n                    b.HasKey(\"Value\", \"PostEntityId\");\n\n                    b.HasIndex(\"PostEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.HasIndex(\"Value\");\n\n                    b.ToTable(\"cs_PostCategory\", null, t =>\n                        {\n                            t.HasTrigger(\"cs_PostCategory_Trigger\");\n                        });\n\n                    b.HasAnnotation(\"SqlServer:UseSqlOutputClause\", false);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"nvarchar(36)\");\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"Content\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<string>(\"Email\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"nvarchar(100)\");\n\n                    b.Property<string>(\"Ip\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"nvarchar(100)\");\n\n                    b.Property<bool>(\"IsAdmin\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"IsApproved\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"PostEntityId\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"nvarchar(36)\");\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"nvarchar(50)\");\n\n                    b.Property<DateTime>(\"PubDate\")\n                        .HasColumnType(\"datetime2\");\n\n                    b.Property<string>(\"UserAgent\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"Website\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PostEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_PostComment\", null, t =>\n                        {\n                            t.HasTrigger(\"cs_PostComment_Trigger\");\n                        });\n\n                    b.HasAnnotation(\"SqlServer:UseSqlOutputClause\", false);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"nvarchar(36)\");\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"AutoTeaser\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<string>(\"BlogId\")\n                        .IsRequired()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"nvarchar(50)\");\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasMaxLength(500)\n                        .HasColumnType(\"nvarchar(500)\");\n\n                    b.Property<string>(\"Content\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"nvarchar(50)\")\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"CreatedByUser\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"nvarchar(100)\");\n\n                    b.Property<DateTime>(\"CreatedUtc\")\n                        .HasColumnType(\"datetime2\");\n\n                    b.Property<string>(\"DraftAuthor\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"DraftContent\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<DateTime?>(\"DraftPubDate\")\n                        .HasColumnType(\"datetime2\");\n\n                    b.Property<string>(\"DraftSerializedModel\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<string>(\"ImageUrl\")\n                        .HasMaxLength(250)\n                        .HasColumnType(\"nvarchar(250)\");\n\n                    b.Property<bool>(\"IsFeatured\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"IsPublished\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<DateTime>(\"LastModified\")\n                        .HasColumnType(\"datetime2\");\n\n                    b.Property<string>(\"LastModifiedByUser\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"nvarchar(100)\");\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasMaxLength(500)\n                        .HasColumnType(\"nvarchar(500)\");\n\n                    b.Property<string>(\"MetaHtml\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<string>(\"MetaJson\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<DateTime?>(\"PubDate\")\n                        .HasColumnType(\"datetime2\");\n\n                    b.Property<string>(\"SerializedModel\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<string>(\"Serializer\")\n                        .HasMaxLength(50)\n                        .HasColumnType(\"nvarchar(50)\");\n\n                    b.Property<bool>(\"ShowComments\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"Slug\")\n                        .IsRequired()\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<bool>(\"SuppressTeaser\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"TeaserOverride\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<string>(\"TemplateKey\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"ThumbnailUrl\")\n                        .HasMaxLength(250)\n                        .HasColumnType(\"nvarchar(250)\");\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"BlogId\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"Slug\");\n\n                    b.ToTable(\"cs_Post\", null, t =>\n                        {\n                            t.HasTrigger(\"cs_Post_Trigger\");\n                        });\n\n                    b.HasAnnotation(\"SqlServer:UseSqlOutputClause\", false);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\", null)\n                        .WithMany(\"PageComments\")\n                        .HasForeignKey(\"PageEntityId\")\n                        .OnDelete(DeleteBehavior.Cascade);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageResourceEntity\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\", null)\n                        .WithMany(\"PageResources\")\n                        .HasForeignKey(\"PageEntityId\")\n                        .OnDelete(DeleteBehavior.Cascade);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\", null)\n                        .WithMany(\"PostComments\")\n                        .HasForeignKey(\"PostEntityId\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\", b =>\n                {\n                    b.Navigation(\"PageComments\");\n\n                    b.Navigation(\"PageResources\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\", b =>\n                {\n                    b.Navigation(\"PostComments\");\n                });\n#pragma warning restore 612, 618\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.MSSQL/Migrations/20240918131738_ShowArchivedAndBlogCategories-20240918.cs",
    "content": "﻿using Microsoft.EntityFrameworkCore.Migrations;\n\n#nullable disable\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.MSSQL.Migrations\n{\n    /// <inheritdoc />\n    public partial class ShowArchivedAndBlogCategories20240918 : Migration\n    {\n        /// <inheritdoc />\n        protected override void Up(MigrationBuilder migrationBuilder)\n        {\n            migrationBuilder.AddColumn<bool>(\n                name: \"ShowArchivedPosts\",\n                table: \"cs_ContentProject\",\n                type: \"bit\",\n                nullable: false,\n                defaultValue: false);\n\n            migrationBuilder.AddColumn<bool>(\n                name: \"ShowBlogCategories\",\n                table: \"cs_ContentProject\",\n                type: \"bit\",\n                nullable: false,\n                defaultValue: false);\n        }\n\n        /// <inheritdoc />\n        protected override void Down(MigrationBuilder migrationBuilder)\n        {\n            migrationBuilder.DropColumn(\n                name: \"ShowArchivedPosts\",\n                table: \"cs_ContentProject\");\n\n            migrationBuilder.DropColumn(\n                name: \"ShowBlogCategories\",\n                table: \"cs_ContentProject\");\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.MSSQL/Migrations/20241001103518_SetShowArchiveAboutRelatedBlogToTrue020241001.Designer.cs",
    "content": "﻿// <auto-generated />\nusing System;\nusing Microsoft.EntityFrameworkCore;\nusing Microsoft.EntityFrameworkCore.Infrastructure;\nusing Microsoft.EntityFrameworkCore.Metadata;\nusing Microsoft.EntityFrameworkCore.Migrations;\nusing Microsoft.EntityFrameworkCore.Storage.ValueConversion;\nusing cloudscribe.SimpleContent.Storage.EFCore.MSSQL;\n\n#nullable disable\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.MSSQL.Migrations\n{\n    [DbContext(typeof(SimpleContentDbContext))]\n    [Migration(\"20241001103518_SetShowArchiveAboutRelatedBlogToTrue020241001\")]\n    partial class SetShowArchiveAboutRelatedBlogToTrue020241001\n    {\n        /// <inheritdoc />\n        protected override void BuildTargetModel(ModelBuilder modelBuilder)\n        {\n#pragma warning disable 612, 618\n            modelBuilder\n                .HasAnnotation(\"ProductVersion\", \"8.0.0\")\n                .HasAnnotation(\"Relational:MaxIdentifierLength\", 128);\n\n            SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder);\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Models.ContentHistory\", b =>\n                {\n                    b.Property<Guid>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36)\n                        .HasColumnType(\"uniqueidentifier\");\n\n                    b.Property<string>(\"ArchivedBy\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<DateTime>(\"ArchivedUtc\")\n                        .HasColumnType(\"datetime2\");\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<string>(\"Content\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<string>(\"ContentId\")\n                        .IsRequired()\n                        .HasMaxLength(36)\n                        .HasColumnType(\"nvarchar(36)\");\n\n                    b.Property<string>(\"ContentSource\")\n                        .IsRequired()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"nvarchar(50)\");\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"nvarchar(50)\")\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"CreatedByUser\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"nvarchar(100)\");\n\n                    b.Property<DateTime>(\"CreatedUtc\")\n                        .HasColumnType(\"datetime2\");\n\n                    b.Property<string>(\"DraftAuthor\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"DraftContent\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<DateTime?>(\"DraftPubDate\")\n                        .HasColumnType(\"datetime2\");\n\n                    b.Property<string>(\"DraftSerializedModel\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<bool>(\"IsDraftHx\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"IsPublished\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<DateTime>(\"LastModified\")\n                        .HasColumnType(\"datetime2\");\n\n                    b.Property<string>(\"LastModifiedByUser\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"nvarchar(100)\");\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<string>(\"MetaHtml\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<string>(\"MetaJson\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<int>(\"PageOrder\")\n                        .HasColumnType(\"int\");\n\n                    b.Property<string>(\"ParentId\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"ParentSlug\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"ProjectId\")\n                        .HasMaxLength(50)\n                        .HasColumnType(\"nvarchar(50)\");\n\n                    b.Property<DateTime?>(\"PubDate\")\n                        .HasColumnType(\"datetime2\");\n\n                    b.Property<string>(\"SerializedModel\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<string>(\"Serializer\")\n                        .HasMaxLength(50)\n                        .HasColumnType(\"nvarchar(50)\");\n\n                    b.Property<string>(\"Slug\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"TeaserOverride\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<string>(\"TemplateKey\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"ViewRoles\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<bool>(\"WasDeleted\")\n                        .HasColumnType(\"bit\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"ContentId\");\n\n                    b.HasIndex(\"ContentSource\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"CreatedByUser\");\n\n                    b.HasIndex(\"LastModifiedByUser\");\n\n                    b.HasIndex(\"Title\");\n\n                    b.ToTable(\"cs_ContentHistory\", null, t =>\n                        {\n                            t.HasTrigger(\"cs_ContentHistory_Trigger\");\n                        });\n\n                    b.HasAnnotation(\"SqlServer:UseSqlOutputClause\", false);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Models.ProjectSettings\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .HasMaxLength(50)\n                        .HasColumnType(\"nvarchar(50)\");\n\n                    b.Property<string>(\"AboutContent\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<string>(\"AboutHeading\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<bool>(\"AddBlogToPagesTree\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"BlogMenuLinksToNewestPost\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"BlogPageNavComponentVisibility\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<int>(\"BlogPagePosition\")\n                        .HasColumnType(\"int\");\n\n                    b.Property<string>(\"BlogPageText\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"CdnUrl\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"ChannelCategoriesCsv\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"ChannelRating\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"nvarchar(100)\");\n\n                    b.Property<int>(\"ChannelTimeToLive\")\n                        .HasColumnType(\"int\");\n\n                    b.Property<string>(\"CommentNotificationEmail\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"nvarchar(100)\");\n\n                    b.Property<string>(\"CopyrightNotice\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<int>(\"DaysToComment\")\n                        .HasColumnType(\"int\");\n\n                    b.Property<string>(\"DefaultContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"nvarchar(50)\")\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<int>(\"DefaultFeedItems\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"int\")\n                        .HasDefaultValue(20);\n\n                    b.Property<string>(\"DefaultPageSlug\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"Description\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<string>(\"DisqusShortName\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"nvarchar(100)\");\n\n                    b.Property<string>(\"FacebookAppId\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"nvarchar(100)\");\n\n                    b.Property<string>(\"Image\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<bool>(\"IncludePubDateInPostUrls\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"LanguageCode\")\n                        .HasMaxLength(10)\n                        .HasColumnType(\"nvarchar(10)\");\n\n                    b.Property<string>(\"LocalMediaVirtualPath\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"ManagingEditorEmail\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"nvarchar(100)\");\n\n                    b.Property<int>(\"MaxFeedItems\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"int\")\n                        .HasDefaultValue(1000);\n\n                    b.Property<bool>(\"ModerateComments\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<int>(\"PostsPerPage\")\n                        .HasColumnType(\"int\");\n\n                    b.Property<string>(\"PubDateFormat\")\n                        .HasMaxLength(75)\n                        .HasColumnType(\"nvarchar(75)\");\n\n                    b.Property<string>(\"Publisher\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"PublisherEntityType\")\n                        .HasMaxLength(50)\n                        .HasColumnType(\"nvarchar(50)\");\n\n                    b.Property<string>(\"PublisherLogoHeight\")\n                        .HasMaxLength(20)\n                        .HasColumnType(\"nvarchar(20)\");\n\n                    b.Property<string>(\"PublisherLogoUrl\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"PublisherLogoWidth\")\n                        .HasMaxLength(20)\n                        .HasColumnType(\"nvarchar(20)\");\n\n                    b.Property<string>(\"RecaptchaPrivateKey\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"RecaptchaPublicKey\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"RemoteFeedProcessorUseAgentFragment\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"RemoteFeedUrl\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<bool>(\"ShowAboutBox\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"bit\")\n                        .HasDefaultValue(true);\n\n                    b.Property<bool>(\"ShowArchivedPosts\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"bit\")\n                        .HasDefaultValue(true);\n\n                    b.Property<bool>(\"ShowBlogCategories\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"bit\")\n                        .HasDefaultValue(true);\n\n                    b.Property<bool>(\"ShowFeaturedPostsOnDefaultPage\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"ShowRecentPostsOnDefaultPage\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"ShowRelatedPosts\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"bit\")\n                        .HasDefaultValue(true);\n\n                    b.Property<bool>(\"ShowTitle\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"SiteName\")\n                        .HasMaxLength(200)\n                        .HasColumnType(\"nvarchar(200)\");\n\n                    b.Property<byte>(\"TeaserMode\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"tinyint\")\n                        .HasDefaultValue((byte)0);\n\n                    b.Property<int>(\"TeaserTruncationLength\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"int\")\n                        .HasDefaultValue(20);\n\n                    b.Property<byte>(\"TeaserTruncationMode\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"tinyint\")\n                        .HasDefaultValue((byte)0);\n\n                    b.Property<string>(\"TimeZoneId\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"nvarchar(100)\");\n\n                    b.Property<string>(\"Title\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"TwitterCreator\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"nvarchar(100)\");\n\n                    b.Property<string>(\"TwitterPublisher\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"nvarchar(100)\");\n\n                    b.Property<bool>(\"UseDefaultPageAsRootNode\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"WebmasterEmail\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"nvarchar(100)\");\n\n                    b.HasKey(\"Id\");\n\n                    b.ToTable(\"cs_ContentProject\", null, t =>\n                        {\n                            t.HasTrigger(\"cs_ContentProject_Trigger\");\n                        });\n\n                    b.HasAnnotation(\"SqlServer:UseSqlOutputClause\", false);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageCategory\", b =>\n                {\n                    b.Property<string>(\"Value\")\n                        .HasMaxLength(50)\n                        .HasColumnType(\"nvarchar(50)\");\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"nvarchar(36)\");\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"nvarchar(50)\");\n\n                    b.HasKey(\"Value\", \"PageEntityId\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.HasIndex(\"Value\");\n\n                    b.ToTable(\"cs_PageCategory\", null, t =>\n                        {\n                            t.HasTrigger(\"cs_PageCategory_Trigger\");\n                        });\n\n                    b.HasAnnotation(\"SqlServer:UseSqlOutputClause\", false);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"nvarchar(36)\");\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"Content\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<string>(\"Email\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"nvarchar(100)\");\n\n                    b.Property<string>(\"Ip\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"nvarchar(100)\");\n\n                    b.Property<bool>(\"IsAdmin\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"IsApproved\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"nvarchar(36)\");\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"nvarchar(50)\");\n\n                    b.Property<DateTime>(\"PubDate\")\n                        .HasColumnType(\"datetime2\");\n\n                    b.Property<string>(\"UserAgent\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"Website\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_PageComment\", null, t =>\n                        {\n                            t.HasTrigger(\"cs_PageComment_Trigger\");\n                        });\n\n                    b.HasAnnotation(\"SqlServer:UseSqlOutputClause\", false);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"nvarchar(36)\");\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasMaxLength(500)\n                        .HasColumnType(\"nvarchar(500)\");\n\n                    b.Property<string>(\"Content\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"nvarchar(50)\")\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"CreatedByUser\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"nvarchar(100)\");\n\n                    b.Property<DateTime>(\"CreatedUtc\")\n                        .HasColumnType(\"datetime2\");\n\n                    b.Property<bool>(\"DisableEditor\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"DraftAuthor\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"DraftContent\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<DateTime?>(\"DraftPubDate\")\n                        .HasColumnType(\"datetime2\");\n\n                    b.Property<string>(\"DraftSerializedModel\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<string>(\"ExternalUrl\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<bool>(\"IsPublished\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<DateTime>(\"LastModified\")\n                        .HasColumnType(\"datetime2\");\n\n                    b.Property<string>(\"LastModifiedByUser\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"nvarchar(100)\");\n\n                    b.Property<string>(\"MenuFilters\")\n                        .HasMaxLength(500)\n                        .HasColumnType(\"nvarchar(500)\");\n\n                    b.Property<bool>(\"MenuOnly\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasMaxLength(500)\n                        .HasColumnType(\"nvarchar(500)\");\n\n                    b.Property<string>(\"MetaHtml\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<string>(\"MetaJson\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<int>(\"PageOrder\")\n                        .HasColumnType(\"int\");\n\n                    b.Property<string>(\"ParentId\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"nvarchar(36)\");\n\n                    b.Property<string>(\"ParentSlug\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"nvarchar(50)\");\n\n                    b.Property<DateTime?>(\"PubDate\")\n                        .HasColumnType(\"datetime2\");\n\n                    b.Property<string>(\"SerializedModel\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<string>(\"Serializer\")\n                        .HasMaxLength(50)\n                        .HasColumnType(\"nvarchar(50)\");\n\n                    b.Property<bool>(\"ShowCategories\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"ShowComments\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"ShowHeading\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"ShowLastModified\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"ShowMenu\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"ShowPubDate\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"Slug\")\n                        .IsRequired()\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"TemplateKey\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"ViewRoles\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"ParentId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_Page\", null, t =>\n                        {\n                            t.HasTrigger(\"cs_Page_Trigger\");\n                        });\n\n                    b.HasAnnotation(\"SqlServer:UseSqlOutputClause\", false);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageResourceEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"nvarchar(36)\");\n\n                    b.Property<string>(\"Environment\")\n                        .IsRequired()\n                        .HasMaxLength(15)\n                        .HasColumnType(\"nvarchar(15)\");\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"nvarchar(36)\");\n\n                    b.Property<int>(\"Sort\")\n                        .HasColumnType(\"int\");\n\n                    b.Property<string>(\"Type\")\n                        .IsRequired()\n                        .HasMaxLength(10)\n                        .HasColumnType(\"nvarchar(10)\");\n\n                    b.Property<string>(\"Url\")\n                        .IsRequired()\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.ToTable(\"cs_PageResource\", null, t =>\n                        {\n                            t.HasTrigger(\"cs_PageResource_Trigger\");\n                        });\n\n                    b.HasAnnotation(\"SqlServer:UseSqlOutputClause\", false);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostCategory\", b =>\n                {\n                    b.Property<string>(\"Value\")\n                        .HasMaxLength(50)\n                        .HasColumnType(\"nvarchar(50)\");\n\n                    b.Property<string>(\"PostEntityId\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"nvarchar(36)\");\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"nvarchar(50)\");\n\n                    b.HasKey(\"Value\", \"PostEntityId\");\n\n                    b.HasIndex(\"PostEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.HasIndex(\"Value\");\n\n                    b.ToTable(\"cs_PostCategory\", null, t =>\n                        {\n                            t.HasTrigger(\"cs_PostCategory_Trigger\");\n                        });\n\n                    b.HasAnnotation(\"SqlServer:UseSqlOutputClause\", false);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"nvarchar(36)\");\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"Content\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<string>(\"Email\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"nvarchar(100)\");\n\n                    b.Property<string>(\"Ip\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"nvarchar(100)\");\n\n                    b.Property<bool>(\"IsAdmin\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"IsApproved\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"PostEntityId\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"nvarchar(36)\");\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"nvarchar(50)\");\n\n                    b.Property<DateTime>(\"PubDate\")\n                        .HasColumnType(\"datetime2\");\n\n                    b.Property<string>(\"UserAgent\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"Website\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PostEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_PostComment\", null, t =>\n                        {\n                            t.HasTrigger(\"cs_PostComment_Trigger\");\n                        });\n\n                    b.HasAnnotation(\"SqlServer:UseSqlOutputClause\", false);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"nvarchar(36)\");\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"AutoTeaser\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<string>(\"BlogId\")\n                        .IsRequired()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"nvarchar(50)\");\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasMaxLength(500)\n                        .HasColumnType(\"nvarchar(500)\");\n\n                    b.Property<string>(\"Content\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"nvarchar(50)\")\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"CreatedByUser\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"nvarchar(100)\");\n\n                    b.Property<DateTime>(\"CreatedUtc\")\n                        .HasColumnType(\"datetime2\");\n\n                    b.Property<string>(\"DraftAuthor\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"DraftContent\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<DateTime?>(\"DraftPubDate\")\n                        .HasColumnType(\"datetime2\");\n\n                    b.Property<string>(\"DraftSerializedModel\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<string>(\"ImageUrl\")\n                        .HasMaxLength(250)\n                        .HasColumnType(\"nvarchar(250)\");\n\n                    b.Property<bool>(\"IsFeatured\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"IsPublished\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<DateTime>(\"LastModified\")\n                        .HasColumnType(\"datetime2\");\n\n                    b.Property<string>(\"LastModifiedByUser\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"nvarchar(100)\");\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasMaxLength(500)\n                        .HasColumnType(\"nvarchar(500)\");\n\n                    b.Property<string>(\"MetaHtml\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<string>(\"MetaJson\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<DateTime?>(\"PubDate\")\n                        .HasColumnType(\"datetime2\");\n\n                    b.Property<string>(\"SerializedModel\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<string>(\"Serializer\")\n                        .HasMaxLength(50)\n                        .HasColumnType(\"nvarchar(50)\");\n\n                    b.Property<bool>(\"ShowComments\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"Slug\")\n                        .IsRequired()\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<bool>(\"SuppressTeaser\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"TeaserOverride\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<string>(\"TemplateKey\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"ThumbnailUrl\")\n                        .HasMaxLength(250)\n                        .HasColumnType(\"nvarchar(250)\");\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"BlogId\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"Slug\");\n\n                    b.ToTable(\"cs_Post\", null, t =>\n                        {\n                            t.HasTrigger(\"cs_Post_Trigger\");\n                        });\n\n                    b.HasAnnotation(\"SqlServer:UseSqlOutputClause\", false);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\", null)\n                        .WithMany(\"PageComments\")\n                        .HasForeignKey(\"PageEntityId\")\n                        .OnDelete(DeleteBehavior.Cascade);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageResourceEntity\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\", null)\n                        .WithMany(\"PageResources\")\n                        .HasForeignKey(\"PageEntityId\")\n                        .OnDelete(DeleteBehavior.Cascade);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\", null)\n                        .WithMany(\"PostComments\")\n                        .HasForeignKey(\"PostEntityId\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\", b =>\n                {\n                    b.Navigation(\"PageComments\");\n\n                    b.Navigation(\"PageResources\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\", b =>\n                {\n                    b.Navigation(\"PostComments\");\n                });\n#pragma warning restore 612, 618\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.MSSQL/Migrations/20241001103518_SetShowArchiveAboutRelatedBlogToTrue020241001.cs",
    "content": "﻿using Microsoft.EntityFrameworkCore.Migrations;\n\n#nullable disable\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.MSSQL.Migrations\n{\n    /// <inheritdoc />\n    public partial class SetShowArchiveAboutRelatedBlogToTrue020241001 : Migration\n    {\n        /// <inheritdoc />\n        protected override void Up(MigrationBuilder migrationBuilder)\n        {\n            migrationBuilder.AlterColumn<bool>(\n                name: \"ShowRelatedPosts\",\n                table: \"cs_ContentProject\",\n                type: \"bit\",\n                nullable: false,\n                defaultValue: true,\n                oldClrType: typeof(bool),\n                oldType: \"bit\");\n\n            migrationBuilder.AlterColumn<bool>(\n                name: \"ShowBlogCategories\",\n                table: \"cs_ContentProject\",\n                type: \"bit\",\n                nullable: false,\n                defaultValue: true,\n                oldClrType: typeof(bool),\n                oldType: \"bit\");\n\n            migrationBuilder.AlterColumn<bool>(\n                name: \"ShowArchivedPosts\",\n                table: \"cs_ContentProject\",\n                type: \"bit\",\n                nullable: false,\n                defaultValue: true,\n                oldClrType: typeof(bool),\n                oldType: \"bit\");\n\n            migrationBuilder.AlterColumn<bool>(\n                name: \"ShowAboutBox\",\n                table: \"cs_ContentProject\",\n                type: \"bit\",\n                nullable: false,\n                defaultValue: true,\n                oldClrType: typeof(bool),\n                oldType: \"bit\");\n        }\n\n        /// <inheritdoc />\n        protected override void Down(MigrationBuilder migrationBuilder)\n        {\n            migrationBuilder.AlterColumn<bool>(\n                name: \"ShowRelatedPosts\",\n                table: \"cs_ContentProject\",\n                type: \"bit\",\n                nullable: false,\n                oldClrType: typeof(bool),\n                oldType: \"bit\",\n                oldDefaultValue: true);\n\n            migrationBuilder.AlterColumn<bool>(\n                name: \"ShowBlogCategories\",\n                table: \"cs_ContentProject\",\n                type: \"bit\",\n                nullable: false,\n                oldClrType: typeof(bool),\n                oldType: \"bit\",\n                oldDefaultValue: true);\n\n            migrationBuilder.AlterColumn<bool>(\n                name: \"ShowArchivedPosts\",\n                table: \"cs_ContentProject\",\n                type: \"bit\",\n                nullable: false,\n                oldClrType: typeof(bool),\n                oldType: \"bit\",\n                oldDefaultValue: true);\n\n            migrationBuilder.AlterColumn<bool>(\n                name: \"ShowAboutBox\",\n                table: \"cs_ContentProject\",\n                type: \"bit\",\n                nullable: false,\n                oldClrType: typeof(bool),\n                oldType: \"bit\",\n                oldDefaultValue: true);\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.MSSQL/Migrations/20241108094100_simplecontent-20241108.Designer.cs",
    "content": "﻿// <auto-generated />\nusing System;\nusing Microsoft.EntityFrameworkCore;\nusing Microsoft.EntityFrameworkCore.Infrastructure;\nusing Microsoft.EntityFrameworkCore.Metadata;\nusing Microsoft.EntityFrameworkCore.Migrations;\nusing Microsoft.EntityFrameworkCore.Storage.ValueConversion;\nusing cloudscribe.SimpleContent.Storage.EFCore.MSSQL;\n\n#nullable disable\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.MSSQL.Migrations\n{\n    [DbContext(typeof(SimpleContentDbContext))]\n    [Migration(\"20241108094100_simplecontent-20241108\")]\n    partial class simplecontent20241108\n    {\n        /// <inheritdoc />\n        protected override void BuildTargetModel(ModelBuilder modelBuilder)\n        {\n#pragma warning disable 612, 618\n            modelBuilder\n                .HasAnnotation(\"ProductVersion\", \"8.0.0\")\n                .HasAnnotation(\"Relational:MaxIdentifierLength\", 128);\n\n            SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder);\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Models.ContentHistory\", b =>\n                {\n                    b.Property<Guid>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36)\n                        .HasColumnType(\"uniqueidentifier\");\n\n                    b.Property<string>(\"ArchivedBy\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<DateTime>(\"ArchivedUtc\")\n                        .HasColumnType(\"datetime2\");\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<string>(\"Content\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<string>(\"ContentId\")\n                        .IsRequired()\n                        .HasMaxLength(36)\n                        .HasColumnType(\"nvarchar(36)\");\n\n                    b.Property<string>(\"ContentSource\")\n                        .IsRequired()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"nvarchar(50)\");\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"nvarchar(50)\")\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"CreatedByUser\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"nvarchar(100)\");\n\n                    b.Property<DateTime>(\"CreatedUtc\")\n                        .HasColumnType(\"datetime2\");\n\n                    b.Property<string>(\"DraftAuthor\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"DraftContent\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<DateTime?>(\"DraftPubDate\")\n                        .HasColumnType(\"datetime2\");\n\n                    b.Property<string>(\"DraftSerializedModel\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<bool>(\"IsDraftHx\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"IsPublished\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<DateTime>(\"LastModified\")\n                        .HasColumnType(\"datetime2\");\n\n                    b.Property<string>(\"LastModifiedByUser\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"nvarchar(100)\");\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<string>(\"MetaHtml\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<string>(\"MetaJson\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<int>(\"PageOrder\")\n                        .HasColumnType(\"int\");\n\n                    b.Property<string>(\"ParentId\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"ParentSlug\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"ProjectId\")\n                        .HasMaxLength(50)\n                        .HasColumnType(\"nvarchar(50)\");\n\n                    b.Property<DateTime?>(\"PubDate\")\n                        .HasColumnType(\"datetime2\");\n\n                    b.Property<string>(\"SerializedModel\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<string>(\"Serializer\")\n                        .HasMaxLength(50)\n                        .HasColumnType(\"nvarchar(50)\");\n\n                    b.Property<bool?>(\"ShowCreatedBy\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool?>(\"ShowCreatedDate\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool?>(\"ShowLastModifiedBy\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool?>(\"ShowLastModifiedDate\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"Slug\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"TeaserOverride\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<string>(\"TemplateKey\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"ViewRoles\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<bool>(\"WasDeleted\")\n                        .HasColumnType(\"bit\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"ContentId\");\n\n                    b.HasIndex(\"ContentSource\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"CreatedByUser\");\n\n                    b.HasIndex(\"LastModifiedByUser\");\n\n                    b.HasIndex(\"Title\");\n\n                    b.ToTable(\"cs_ContentHistory\", null, t =>\n                        {\n                            t.HasTrigger(\"cs_ContentHistory_Trigger\");\n                        });\n\n                    b.HasAnnotation(\"SqlServer:UseSqlOutputClause\", false);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Models.ProjectSettings\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .HasMaxLength(50)\n                        .HasColumnType(\"nvarchar(50)\");\n\n                    b.Property<string>(\"AboutContent\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<string>(\"AboutHeading\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<bool>(\"AddBlogToPagesTree\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"BlogMenuLinksToNewestPost\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"BlogPageNavComponentVisibility\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<int>(\"BlogPagePosition\")\n                        .HasColumnType(\"int\");\n\n                    b.Property<string>(\"BlogPageText\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"CdnUrl\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"ChannelCategoriesCsv\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"ChannelRating\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"nvarchar(100)\");\n\n                    b.Property<int>(\"ChannelTimeToLive\")\n                        .HasColumnType(\"int\");\n\n                    b.Property<string>(\"CommentNotificationEmail\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"nvarchar(100)\");\n\n                    b.Property<string>(\"CopyrightNotice\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<int>(\"DaysToComment\")\n                        .HasColumnType(\"int\");\n\n                    b.Property<string>(\"DefaultContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"nvarchar(50)\")\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<int>(\"DefaultFeedItems\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"int\")\n                        .HasDefaultValue(20);\n\n                    b.Property<string>(\"DefaultPageSlug\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"Description\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<string>(\"DisqusShortName\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"nvarchar(100)\");\n\n                    b.Property<string>(\"FacebookAppId\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"nvarchar(100)\");\n\n                    b.Property<string>(\"Image\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<bool>(\"IncludePubDateInPostUrls\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"LanguageCode\")\n                        .HasMaxLength(10)\n                        .HasColumnType(\"nvarchar(10)\");\n\n                    b.Property<string>(\"LocalMediaVirtualPath\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"ManagingEditorEmail\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"nvarchar(100)\");\n\n                    b.Property<int>(\"MaxFeedItems\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"int\")\n                        .HasDefaultValue(1000);\n\n                    b.Property<bool>(\"ModerateComments\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<int>(\"PostsPerPage\")\n                        .HasColumnType(\"int\");\n\n                    b.Property<string>(\"PubDateFormat\")\n                        .HasMaxLength(75)\n                        .HasColumnType(\"nvarchar(75)\");\n\n                    b.Property<string>(\"Publisher\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"PublisherEntityType\")\n                        .HasMaxLength(50)\n                        .HasColumnType(\"nvarchar(50)\");\n\n                    b.Property<string>(\"PublisherLogoHeight\")\n                        .HasMaxLength(20)\n                        .HasColumnType(\"nvarchar(20)\");\n\n                    b.Property<string>(\"PublisherLogoUrl\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"PublisherLogoWidth\")\n                        .HasMaxLength(20)\n                        .HasColumnType(\"nvarchar(20)\");\n\n                    b.Property<string>(\"RecaptchaPrivateKey\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"RecaptchaPublicKey\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"RemoteFeedProcessorUseAgentFragment\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"RemoteFeedUrl\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<bool>(\"ShowAboutBox\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"bit\")\n                        .HasDefaultValue(true);\n\n                    b.Property<bool>(\"ShowArchivedPosts\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"bit\")\n                        .HasDefaultValue(true);\n\n                    b.Property<bool>(\"ShowBlogCategories\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"bit\")\n                        .HasDefaultValue(true);\n\n                    b.Property<bool>(\"ShowCreatedBy\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"ShowCreatedDate\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"ShowFeaturedPostsOnDefaultPage\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"ShowLastModifiedBy\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"ShowLastModifiedDate\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"ShowRecentPostsOnDefaultPage\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"ShowRelatedPosts\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"bit\")\n                        .HasDefaultValue(true);\n\n                    b.Property<bool>(\"ShowTitle\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"SiteName\")\n                        .HasMaxLength(200)\n                        .HasColumnType(\"nvarchar(200)\");\n\n                    b.Property<byte>(\"TeaserMode\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"tinyint\")\n                        .HasDefaultValue((byte)0);\n\n                    b.Property<int>(\"TeaserTruncationLength\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"int\")\n                        .HasDefaultValue(20);\n\n                    b.Property<byte>(\"TeaserTruncationMode\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"tinyint\")\n                        .HasDefaultValue((byte)0);\n\n                    b.Property<string>(\"TimeZoneId\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"nvarchar(100)\");\n\n                    b.Property<string>(\"Title\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"TwitterCreator\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"nvarchar(100)\");\n\n                    b.Property<string>(\"TwitterPublisher\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"nvarchar(100)\");\n\n                    b.Property<bool>(\"UseDefaultPageAsRootNode\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"WebmasterEmail\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"nvarchar(100)\");\n\n                    b.HasKey(\"Id\");\n\n                    b.ToTable(\"cs_ContentProject\", null, t =>\n                        {\n                            t.HasTrigger(\"cs_ContentProject_Trigger\");\n                        });\n\n                    b.HasAnnotation(\"SqlServer:UseSqlOutputClause\", false);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageCategory\", b =>\n                {\n                    b.Property<string>(\"Value\")\n                        .HasMaxLength(50)\n                        .HasColumnType(\"nvarchar(50)\");\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"nvarchar(36)\");\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"nvarchar(50)\");\n\n                    b.HasKey(\"Value\", \"PageEntityId\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.HasIndex(\"Value\");\n\n                    b.ToTable(\"cs_PageCategory\", null, t =>\n                        {\n                            t.HasTrigger(\"cs_PageCategory_Trigger\");\n                        });\n\n                    b.HasAnnotation(\"SqlServer:UseSqlOutputClause\", false);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"nvarchar(36)\");\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"Content\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<string>(\"Email\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"nvarchar(100)\");\n\n                    b.Property<string>(\"Ip\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"nvarchar(100)\");\n\n                    b.Property<bool>(\"IsAdmin\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"IsApproved\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"nvarchar(36)\");\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"nvarchar(50)\");\n\n                    b.Property<DateTime>(\"PubDate\")\n                        .HasColumnType(\"datetime2\");\n\n                    b.Property<string>(\"UserAgent\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"Website\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_PageComment\", null, t =>\n                        {\n                            t.HasTrigger(\"cs_PageComment_Trigger\");\n                        });\n\n                    b.HasAnnotation(\"SqlServer:UseSqlOutputClause\", false);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"nvarchar(36)\");\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasMaxLength(500)\n                        .HasColumnType(\"nvarchar(500)\");\n\n                    b.Property<string>(\"Content\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"nvarchar(50)\")\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"CreatedByUser\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"nvarchar(100)\");\n\n                    b.Property<DateTime>(\"CreatedUtc\")\n                        .HasColumnType(\"datetime2\");\n\n                    b.Property<bool>(\"DisableEditor\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"DraftAuthor\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"DraftContent\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<DateTime?>(\"DraftPubDate\")\n                        .HasColumnType(\"datetime2\");\n\n                    b.Property<string>(\"DraftSerializedModel\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<string>(\"ExternalUrl\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<bool>(\"IsPublished\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<DateTime>(\"LastModified\")\n                        .HasColumnType(\"datetime2\");\n\n                    b.Property<string>(\"LastModifiedByUser\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"nvarchar(100)\");\n\n                    b.Property<string>(\"MenuFilters\")\n                        .HasMaxLength(500)\n                        .HasColumnType(\"nvarchar(500)\");\n\n                    b.Property<bool>(\"MenuOnly\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasMaxLength(500)\n                        .HasColumnType(\"nvarchar(500)\");\n\n                    b.Property<string>(\"MetaHtml\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<string>(\"MetaJson\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<int>(\"PageOrder\")\n                        .HasColumnType(\"int\");\n\n                    b.Property<string>(\"ParentId\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"nvarchar(36)\");\n\n                    b.Property<string>(\"ParentSlug\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"nvarchar(50)\");\n\n                    b.Property<DateTime?>(\"PubDate\")\n                        .HasColumnType(\"datetime2\");\n\n                    b.Property<string>(\"SerializedModel\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<string>(\"Serializer\")\n                        .HasMaxLength(50)\n                        .HasColumnType(\"nvarchar(50)\");\n\n                    b.Property<bool>(\"ShowCategories\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"ShowComments\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool?>(\"ShowCreatedBy\")\n                        .HasColumnType(\"boolean\");\n\n                    b.Property<bool?>(\"ShowCreatedDate\")\n                        .HasColumnType(\"boolean\");\n\n                    b.Property<bool>(\"ShowHeading\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"ShowLastModified\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool?>(\"ShowLastModifiedBy\")\n                        .HasColumnType(\"boolean\");\n\n                    b.Property<bool?>(\"ShowLastModifiedDate\")\n                        .HasColumnType(\"boolean\");\n\n                    b.Property<bool>(\"ShowMenu\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"ShowPubDate\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"Slug\")\n                        .IsRequired()\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"TemplateKey\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"ViewRoles\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"ParentId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_Page\", null, t =>\n                        {\n                            t.HasTrigger(\"cs_Page_Trigger\");\n                        });\n\n                    b.HasAnnotation(\"SqlServer:UseSqlOutputClause\", false);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageResourceEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"nvarchar(36)\");\n\n                    b.Property<string>(\"Environment\")\n                        .IsRequired()\n                        .HasMaxLength(15)\n                        .HasColumnType(\"nvarchar(15)\");\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"nvarchar(36)\");\n\n                    b.Property<int>(\"Sort\")\n                        .HasColumnType(\"int\");\n\n                    b.Property<string>(\"Type\")\n                        .IsRequired()\n                        .HasMaxLength(10)\n                        .HasColumnType(\"nvarchar(10)\");\n\n                    b.Property<string>(\"Url\")\n                        .IsRequired()\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.ToTable(\"cs_PageResource\", null, t =>\n                        {\n                            t.HasTrigger(\"cs_PageResource_Trigger\");\n                        });\n\n                    b.HasAnnotation(\"SqlServer:UseSqlOutputClause\", false);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostCategory\", b =>\n                {\n                    b.Property<string>(\"Value\")\n                        .HasMaxLength(50)\n                        .HasColumnType(\"nvarchar(50)\");\n\n                    b.Property<string>(\"PostEntityId\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"nvarchar(36)\");\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"nvarchar(50)\");\n\n                    b.HasKey(\"Value\", \"PostEntityId\");\n\n                    b.HasIndex(\"PostEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.HasIndex(\"Value\");\n\n                    b.ToTable(\"cs_PostCategory\", null, t =>\n                        {\n                            t.HasTrigger(\"cs_PostCategory_Trigger\");\n                        });\n\n                    b.HasAnnotation(\"SqlServer:UseSqlOutputClause\", false);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"nvarchar(36)\");\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"Content\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<string>(\"Email\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"nvarchar(100)\");\n\n                    b.Property<string>(\"Ip\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"nvarchar(100)\");\n\n                    b.Property<bool>(\"IsAdmin\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"IsApproved\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"PostEntityId\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"nvarchar(36)\");\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"nvarchar(50)\");\n\n                    b.Property<DateTime>(\"PubDate\")\n                        .HasColumnType(\"datetime2\");\n\n                    b.Property<string>(\"UserAgent\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"Website\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PostEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_PostComment\", null, t =>\n                        {\n                            t.HasTrigger(\"cs_PostComment_Trigger\");\n                        });\n\n                    b.HasAnnotation(\"SqlServer:UseSqlOutputClause\", false);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"nvarchar(36)\");\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"AutoTeaser\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<string>(\"BlogId\")\n                        .IsRequired()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"nvarchar(50)\");\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasMaxLength(500)\n                        .HasColumnType(\"nvarchar(500)\");\n\n                    b.Property<string>(\"Content\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"nvarchar(50)\")\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"CreatedByUser\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"nvarchar(100)\");\n\n                    b.Property<DateTime>(\"CreatedUtc\")\n                        .HasColumnType(\"datetime2\");\n\n                    b.Property<string>(\"DraftAuthor\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"DraftContent\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<DateTime?>(\"DraftPubDate\")\n                        .HasColumnType(\"datetime2\");\n\n                    b.Property<string>(\"DraftSerializedModel\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<string>(\"ImageUrl\")\n                        .HasMaxLength(250)\n                        .HasColumnType(\"nvarchar(250)\");\n\n                    b.Property<bool>(\"IsFeatured\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"IsPublished\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<DateTime>(\"LastModified\")\n                        .HasColumnType(\"datetime2\");\n\n                    b.Property<string>(\"LastModifiedByUser\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"nvarchar(100)\");\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasMaxLength(500)\n                        .HasColumnType(\"nvarchar(500)\");\n\n                    b.Property<string>(\"MetaHtml\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<string>(\"MetaJson\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<DateTime?>(\"PubDate\")\n                        .HasColumnType(\"datetime2\");\n\n                    b.Property<string>(\"SerializedModel\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<string>(\"Serializer\")\n                        .HasMaxLength(50)\n                        .HasColumnType(\"nvarchar(50)\");\n\n                    b.Property<bool>(\"ShowComments\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"Slug\")\n                        .IsRequired()\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<bool>(\"SuppressTeaser\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"TeaserOverride\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<string>(\"TemplateKey\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"ThumbnailUrl\")\n                        .HasMaxLength(250)\n                        .HasColumnType(\"nvarchar(250)\");\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"BlogId\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"Slug\");\n\n                    b.ToTable(\"cs_Post\", null, t =>\n                        {\n                            t.HasTrigger(\"cs_Post_Trigger\");\n                        });\n\n                    b.HasAnnotation(\"SqlServer:UseSqlOutputClause\", false);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\", null)\n                        .WithMany(\"PageComments\")\n                        .HasForeignKey(\"PageEntityId\")\n                        .OnDelete(DeleteBehavior.Cascade);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageResourceEntity\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\", null)\n                        .WithMany(\"PageResources\")\n                        .HasForeignKey(\"PageEntityId\")\n                        .OnDelete(DeleteBehavior.Cascade);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\", null)\n                        .WithMany(\"PostComments\")\n                        .HasForeignKey(\"PostEntityId\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\", b =>\n                {\n                    b.Navigation(\"PageComments\");\n\n                    b.Navigation(\"PageResources\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\", b =>\n                {\n                    b.Navigation(\"PostComments\");\n                });\n#pragma warning restore 612, 618\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.MSSQL/Migrations/20241108094100_simplecontent-20241108.cs",
    "content": "﻿using Microsoft.EntityFrameworkCore.Migrations;\n\n#nullable disable\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.MSSQL.Migrations\n{\n    /// <inheritdoc />\n    public partial class simplecontent20241108 : Migration\n    {\n        /// <inheritdoc />\n        protected override void Up(MigrationBuilder migrationBuilder)\n        {\n            migrationBuilder.AddColumn<bool>(\n                name: \"ShowCreatedBy\",\n                table: \"cs_Page\",\n                type: \"bit\",\n                nullable: true);\n\n            migrationBuilder.AddColumn<bool>(\n                name: \"ShowCreatedDate\",\n                table: \"cs_Page\",\n                type: \"bit\",\n                nullable: true);\n\n            migrationBuilder.AddColumn<bool>(\n                name: \"ShowLastModifiedBy\",\n                table: \"cs_Page\",\n                type: \"bit\",\n                nullable: true);\n\n            migrationBuilder.AddColumn<bool>(\n                name: \"ShowLastModifiedDate\",\n                table: \"cs_Page\",\n                type: \"bit\",\n                nullable: true);\n\n            migrationBuilder.AddColumn<bool>(\n                name: \"ShowCreatedBy\",\n                table: \"cs_ContentProject\",\n                type: \"bit\",\n                nullable: false,\n                defaultValue: false);\n\n            migrationBuilder.AddColumn<bool>(\n                name: \"ShowCreatedDate\",\n                table: \"cs_ContentProject\",\n                type: \"bit\",\n                nullable: false,\n                defaultValue: false);\n\n            migrationBuilder.AddColumn<bool>(\n                name: \"ShowLastModifiedBy\",\n                table: \"cs_ContentProject\",\n                type: \"bit\",\n                nullable: false,\n                defaultValue: false);\n\n            migrationBuilder.AddColumn<bool>(\n                name: \"ShowLastModifiedDate\",\n                table: \"cs_ContentProject\",\n                type: \"bit\",\n                nullable: false,\n                defaultValue: false);\n\n            migrationBuilder.AddColumn<bool>(\n                name: \"ShowCreatedBy\",\n                table: \"cs_ContentHistory\",\n                type: \"bit\",\n                nullable: true);\n\n            migrationBuilder.AddColumn<bool>(\n                name: \"ShowCreatedDate\",\n                table: \"cs_ContentHistory\",\n                type: \"bit\",\n                nullable: true);\n\n            migrationBuilder.AddColumn<bool>(\n                name: \"ShowLastModifiedBy\",\n                table: \"cs_ContentHistory\",\n                type: \"bit\",\n                nullable: true);\n\n            migrationBuilder.AddColumn<bool>(\n                name: \"ShowLastModifiedDate\",\n                table: \"cs_ContentHistory\",\n                type: \"bit\",\n                nullable: true);\n        }\n\n        /// <inheritdoc />\n        protected override void Down(MigrationBuilder migrationBuilder)\n        {\n            migrationBuilder.DropColumn(\n                name: \"ShowCreatedBy\",\n                table: \"cs_Page\");\n\n            migrationBuilder.DropColumn(\n                name: \"ShowCreatedDate\",\n                table: \"cs_Page\");\n\n            migrationBuilder.DropColumn(\n                name: \"ShowLastModifiedBy\",\n                table: \"cs_Page\");\n\n            migrationBuilder.DropColumn(\n                name: \"ShowLastModifiedDate\",\n                table: \"cs_Page\");\n\n            migrationBuilder.DropColumn(\n                name: \"ShowCreatedBy\",\n                table: \"cs_ContentProject\");\n\n            migrationBuilder.DropColumn(\n                name: \"ShowCreatedDate\",\n                table: \"cs_ContentProject\");\n\n            migrationBuilder.DropColumn(\n                name: \"ShowLastModifiedBy\",\n                table: \"cs_ContentProject\");\n\n            migrationBuilder.DropColumn(\n                name: \"ShowLastModifiedDate\",\n                table: \"cs_ContentProject\");\n\n            migrationBuilder.DropColumn(\n                name: \"ShowCreatedBy\",\n                table: \"cs_ContentHistory\");\n\n            migrationBuilder.DropColumn(\n                name: \"ShowCreatedDate\",\n                table: \"cs_ContentHistory\");\n\n            migrationBuilder.DropColumn(\n                name: \"ShowLastModifiedBy\",\n                table: \"cs_ContentHistory\");\n\n            migrationBuilder.DropColumn(\n                name: \"ShowLastModifiedDate\",\n                table: \"cs_ContentHistory\");\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.MSSQL/Migrations/20250423093650_user-script-20250423.Designer.cs",
    "content": "﻿// <auto-generated />\nusing System;\nusing Microsoft.EntityFrameworkCore;\nusing Microsoft.EntityFrameworkCore.Infrastructure;\nusing Microsoft.EntityFrameworkCore.Metadata;\nusing Microsoft.EntityFrameworkCore.Migrations;\nusing Microsoft.EntityFrameworkCore.Storage.ValueConversion;\nusing cloudscribe.SimpleContent.Storage.EFCore.MSSQL;\n\n#nullable disable\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.MSSQL.Migrations\n{\n    [DbContext(typeof(SimpleContentDbContext))]\n    [Migration(\"20250423093650_user-script-20250423\")]\n    partial class userscript20250423\n    {\n        /// <inheritdoc />\n        protected override void BuildTargetModel(ModelBuilder modelBuilder)\n        {\n#pragma warning disable 612, 618\n            modelBuilder\n                .HasAnnotation(\"ProductVersion\", \"8.0.0\")\n                .HasAnnotation(\"Relational:MaxIdentifierLength\", 128);\n\n            SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder);\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Models.ContentHistory\", b =>\n                {\n                    b.Property<Guid>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36)\n                        .HasColumnType(\"uniqueidentifier\");\n\n                    b.Property<string>(\"ArchivedBy\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<DateTime>(\"ArchivedUtc\")\n                        .HasColumnType(\"datetime2\");\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<string>(\"Content\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<string>(\"ContentId\")\n                        .IsRequired()\n                        .HasMaxLength(36)\n                        .HasColumnType(\"nvarchar(36)\");\n\n                    b.Property<string>(\"ContentSource\")\n                        .IsRequired()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"nvarchar(50)\");\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"nvarchar(50)\")\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"CreatedByUser\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"nvarchar(100)\");\n\n                    b.Property<DateTime>(\"CreatedUtc\")\n                        .HasColumnType(\"datetime2\");\n\n                    b.Property<string>(\"DraftAuthor\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"DraftContent\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<DateTime?>(\"DraftPubDate\")\n                        .HasColumnType(\"datetime2\");\n\n                    b.Property<string>(\"DraftSerializedModel\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<bool>(\"IsDraftHx\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"IsPublished\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<DateTime>(\"LastModified\")\n                        .HasColumnType(\"datetime2\");\n\n                    b.Property<string>(\"LastModifiedByUser\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"nvarchar(100)\");\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<string>(\"MetaHtml\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<string>(\"MetaJson\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<int>(\"PageOrder\")\n                        .HasColumnType(\"int\");\n\n                    b.Property<string>(\"ParentId\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"ParentSlug\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"ProjectId\")\n                        .HasMaxLength(50)\n                        .HasColumnType(\"nvarchar(50)\");\n\n                    b.Property<DateTime?>(\"PubDate\")\n                        .HasColumnType(\"datetime2\");\n\n                    b.Property<string>(\"SerializedModel\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<string>(\"Serializer\")\n                        .HasMaxLength(50)\n                        .HasColumnType(\"nvarchar(50)\");\n\n                    b.Property<bool?>(\"ShowCreatedBy\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool?>(\"ShowCreatedDate\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool?>(\"ShowLastModifiedBy\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool?>(\"ShowLastModifiedDate\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"Slug\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"TeaserOverride\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<string>(\"TemplateKey\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"ViewRoles\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<bool>(\"WasDeleted\")\n                        .HasColumnType(\"bit\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"ContentId\");\n\n                    b.HasIndex(\"ContentSource\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"CreatedByUser\");\n\n                    b.HasIndex(\"LastModifiedByUser\");\n\n                    b.HasIndex(\"Title\");\n\n                    b.ToTable(\"cs_ContentHistory\", null, t =>\n                        {\n                            t.HasTrigger(\"cs_ContentHistory_Trigger\");\n                        });\n\n                    b.HasAnnotation(\"SqlServer:UseSqlOutputClause\", false);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Models.ProjectSettings\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .HasMaxLength(50)\n                        .HasColumnType(\"nvarchar(50)\");\n\n                    b.Property<string>(\"AboutContent\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<string>(\"AboutHeading\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<bool>(\"AddBlogToPagesTree\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"BlogMenuLinksToNewestPost\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"BlogPageNavComponentVisibility\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<int>(\"BlogPagePosition\")\n                        .HasColumnType(\"int\");\n\n                    b.Property<string>(\"BlogPageText\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"CdnUrl\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"ChannelCategoriesCsv\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"ChannelRating\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"nvarchar(100)\");\n\n                    b.Property<int>(\"ChannelTimeToLive\")\n                        .HasColumnType(\"int\");\n\n                    b.Property<string>(\"CommentNotificationEmail\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"nvarchar(100)\");\n\n                    b.Property<string>(\"CopyrightNotice\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<int>(\"DaysToComment\")\n                        .HasColumnType(\"int\");\n\n                    b.Property<string>(\"DefaultContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"nvarchar(50)\")\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<int>(\"DefaultFeedItems\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"int\")\n                        .HasDefaultValue(20);\n\n                    b.Property<string>(\"DefaultPageSlug\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"Description\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<string>(\"DisqusShortName\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"nvarchar(100)\");\n\n                    b.Property<string>(\"FacebookAppId\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"nvarchar(100)\");\n\n                    b.Property<string>(\"Image\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<bool>(\"IncludePubDateInPostUrls\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"LanguageCode\")\n                        .HasMaxLength(10)\n                        .HasColumnType(\"nvarchar(10)\");\n\n                    b.Property<string>(\"LocalMediaVirtualPath\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"ManagingEditorEmail\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"nvarchar(100)\");\n\n                    b.Property<int>(\"MaxFeedItems\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"int\")\n                        .HasDefaultValue(1000);\n\n                    b.Property<bool>(\"ModerateComments\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<int>(\"PostsPerPage\")\n                        .HasColumnType(\"int\");\n\n                    b.Property<string>(\"PubDateFormat\")\n                        .HasMaxLength(75)\n                        .HasColumnType(\"nvarchar(75)\");\n\n                    b.Property<string>(\"Publisher\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"PublisherEntityType\")\n                        .HasMaxLength(50)\n                        .HasColumnType(\"nvarchar(50)\");\n\n                    b.Property<string>(\"PublisherLogoHeight\")\n                        .HasMaxLength(20)\n                        .HasColumnType(\"nvarchar(20)\");\n\n                    b.Property<string>(\"PublisherLogoUrl\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"PublisherLogoWidth\")\n                        .HasMaxLength(20)\n                        .HasColumnType(\"nvarchar(20)\");\n\n                    b.Property<string>(\"RecaptchaPrivateKey\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"RecaptchaPublicKey\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"RemoteFeedProcessorUseAgentFragment\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"RemoteFeedUrl\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<bool>(\"ShowAboutBox\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"bit\")\n                        .HasDefaultValue(true);\n\n                    b.Property<bool>(\"ShowArchivedPosts\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"bit\")\n                        .HasDefaultValue(true);\n\n                    b.Property<bool>(\"ShowBlogCategories\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"bit\")\n                        .HasDefaultValue(true);\n\n                    b.Property<bool>(\"ShowCreatedBy\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"ShowCreatedDate\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"ShowFeaturedPostsOnDefaultPage\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"ShowLastModifiedBy\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"ShowLastModifiedDate\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"ShowRecentPostsOnDefaultPage\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"ShowRelatedPosts\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"bit\")\n                        .HasDefaultValue(true);\n\n                    b.Property<bool>(\"ShowTitle\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"SiteName\")\n                        .HasMaxLength(200)\n                        .HasColumnType(\"nvarchar(200)\");\n\n                    b.Property<byte>(\"TeaserMode\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"tinyint\")\n                        .HasDefaultValue((byte)0);\n\n                    b.Property<int>(\"TeaserTruncationLength\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"int\")\n                        .HasDefaultValue(20);\n\n                    b.Property<byte>(\"TeaserTruncationMode\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"tinyint\")\n                        .HasDefaultValue((byte)0);\n\n                    b.Property<string>(\"TimeZoneId\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"nvarchar(100)\");\n\n                    b.Property<string>(\"Title\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"TwitterCreator\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"nvarchar(100)\");\n\n                    b.Property<string>(\"TwitterPublisher\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"nvarchar(100)\");\n\n                    b.Property<bool>(\"UseDefaultPageAsRootNode\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"WebmasterEmail\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"nvarchar(100)\");\n\n                    b.HasKey(\"Id\");\n\n                    b.ToTable(\"cs_ContentProject\", null, t =>\n                        {\n                            t.HasTrigger(\"cs_ContentProject_Trigger\");\n                        });\n\n                    b.HasAnnotation(\"SqlServer:UseSqlOutputClause\", false);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageCategory\", b =>\n                {\n                    b.Property<string>(\"Value\")\n                        .HasMaxLength(50)\n                        .HasColumnType(\"nvarchar(50)\");\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"nvarchar(36)\");\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"nvarchar(50)\");\n\n                    b.HasKey(\"Value\", \"PageEntityId\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.HasIndex(\"Value\");\n\n                    b.ToTable(\"cs_PageCategory\", null, t =>\n                        {\n                            t.HasTrigger(\"cs_PageCategory_Trigger\");\n                        });\n\n                    b.HasAnnotation(\"SqlServer:UseSqlOutputClause\", false);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"nvarchar(36)\");\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"Content\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<string>(\"Email\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"nvarchar(100)\");\n\n                    b.Property<string>(\"Ip\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"nvarchar(100)\");\n\n                    b.Property<bool>(\"IsAdmin\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"IsApproved\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"nvarchar(36)\");\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"nvarchar(50)\");\n\n                    b.Property<DateTime>(\"PubDate\")\n                        .HasColumnType(\"datetime2\");\n\n                    b.Property<string>(\"UserAgent\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"Website\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_PageComment\", null, t =>\n                        {\n                            t.HasTrigger(\"cs_PageComment_Trigger\");\n                        });\n\n                    b.HasAnnotation(\"SqlServer:UseSqlOutputClause\", false);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"nvarchar(36)\");\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasMaxLength(500)\n                        .HasColumnType(\"nvarchar(500)\");\n\n                    b.Property<string>(\"Content\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"nvarchar(50)\")\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"CreatedByUser\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"nvarchar(100)\");\n\n                    b.Property<DateTime>(\"CreatedUtc\")\n                        .HasColumnType(\"datetime2\");\n\n                    b.Property<bool>(\"DisableEditor\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"DraftAuthor\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"DraftContent\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<DateTime?>(\"DraftPubDate\")\n                        .HasColumnType(\"datetime2\");\n\n                    b.Property<string>(\"DraftSerializedModel\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<string>(\"ExternalUrl\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<bool>(\"IsPublished\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<DateTime>(\"LastModified\")\n                        .HasColumnType(\"datetime2\");\n\n                    b.Property<string>(\"LastModifiedByUser\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"nvarchar(100)\");\n\n                    b.Property<string>(\"MenuFilters\")\n                        .HasMaxLength(500)\n                        .HasColumnType(\"nvarchar(500)\");\n\n                    b.Property<bool>(\"MenuOnly\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasMaxLength(500)\n                        .HasColumnType(\"nvarchar(500)\");\n\n                    b.Property<string>(\"MetaHtml\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<string>(\"MetaJson\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<int>(\"PageOrder\")\n                        .HasColumnType(\"int\");\n\n                    b.Property<string>(\"ParentId\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"nvarchar(36)\");\n\n                    b.Property<string>(\"ParentSlug\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"nvarchar(50)\");\n\n                    b.Property<DateTime?>(\"PubDate\")\n                        .HasColumnType(\"datetime2\");\n\n                    b.Property<string>(\"Script\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<string>(\"SerializedModel\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<string>(\"Serializer\")\n                        .HasMaxLength(50)\n                        .HasColumnType(\"nvarchar(50)\");\n\n                    b.Property<bool>(\"ShowCategories\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"ShowComments\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool?>(\"ShowCreatedBy\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool?>(\"ShowCreatedDate\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"ShowHeading\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"ShowLastModified\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool?>(\"ShowLastModifiedBy\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool?>(\"ShowLastModifiedDate\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"ShowMenu\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"ShowPubDate\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"Slug\")\n                        .IsRequired()\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"TemplateKey\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"ViewRoles\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"ParentId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_Page\", null, t =>\n                        {\n                            t.HasTrigger(\"cs_Page_Trigger\");\n                        });\n\n                    b.HasAnnotation(\"SqlServer:UseSqlOutputClause\", false);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageResourceEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"nvarchar(36)\");\n\n                    b.Property<string>(\"Environment\")\n                        .IsRequired()\n                        .HasMaxLength(15)\n                        .HasColumnType(\"nvarchar(15)\");\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"nvarchar(36)\");\n\n                    b.Property<string>(\"Script\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<int>(\"Sort\")\n                        .HasColumnType(\"int\");\n\n                    b.Property<string>(\"Type\")\n                        .IsRequired()\n                        .HasMaxLength(10)\n                        .HasColumnType(\"nvarchar(10)\");\n\n                    b.Property<string>(\"Url\")\n                        .IsRequired()\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.ToTable(\"cs_PageResource\", null, t =>\n                        {\n                            t.HasTrigger(\"cs_PageResource_Trigger\");\n                        });\n\n                    b.HasAnnotation(\"SqlServer:UseSqlOutputClause\", false);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostCategory\", b =>\n                {\n                    b.Property<string>(\"Value\")\n                        .HasMaxLength(50)\n                        .HasColumnType(\"nvarchar(50)\");\n\n                    b.Property<string>(\"PostEntityId\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"nvarchar(36)\");\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"nvarchar(50)\");\n\n                    b.HasKey(\"Value\", \"PostEntityId\");\n\n                    b.HasIndex(\"PostEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.HasIndex(\"Value\");\n\n                    b.ToTable(\"cs_PostCategory\", null, t =>\n                        {\n                            t.HasTrigger(\"cs_PostCategory_Trigger\");\n                        });\n\n                    b.HasAnnotation(\"SqlServer:UseSqlOutputClause\", false);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"nvarchar(36)\");\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"Content\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<string>(\"Email\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"nvarchar(100)\");\n\n                    b.Property<string>(\"Ip\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"nvarchar(100)\");\n\n                    b.Property<bool>(\"IsAdmin\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"IsApproved\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"PostEntityId\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"nvarchar(36)\");\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"nvarchar(50)\");\n\n                    b.Property<DateTime>(\"PubDate\")\n                        .HasColumnType(\"datetime2\");\n\n                    b.Property<string>(\"UserAgent\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"Website\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PostEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_PostComment\", null, t =>\n                        {\n                            t.HasTrigger(\"cs_PostComment_Trigger\");\n                        });\n\n                    b.HasAnnotation(\"SqlServer:UseSqlOutputClause\", false);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"nvarchar(36)\");\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"AutoTeaser\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<string>(\"BlogId\")\n                        .IsRequired()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"nvarchar(50)\");\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasMaxLength(500)\n                        .HasColumnType(\"nvarchar(500)\");\n\n                    b.Property<string>(\"Content\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"nvarchar(50)\")\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"CreatedByUser\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"nvarchar(100)\");\n\n                    b.Property<DateTime>(\"CreatedUtc\")\n                        .HasColumnType(\"datetime2\");\n\n                    b.Property<string>(\"DraftAuthor\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"DraftContent\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<DateTime?>(\"DraftPubDate\")\n                        .HasColumnType(\"datetime2\");\n\n                    b.Property<string>(\"DraftSerializedModel\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<string>(\"ImageUrl\")\n                        .HasMaxLength(250)\n                        .HasColumnType(\"nvarchar(250)\");\n\n                    b.Property<bool>(\"IsFeatured\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"IsPublished\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<DateTime>(\"LastModified\")\n                        .HasColumnType(\"datetime2\");\n\n                    b.Property<string>(\"LastModifiedByUser\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"nvarchar(100)\");\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasMaxLength(500)\n                        .HasColumnType(\"nvarchar(500)\");\n\n                    b.Property<string>(\"MetaHtml\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<string>(\"MetaJson\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<DateTime?>(\"PubDate\")\n                        .HasColumnType(\"datetime2\");\n\n                    b.Property<string>(\"Script\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<string>(\"SerializedModel\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<string>(\"Serializer\")\n                        .HasMaxLength(50)\n                        .HasColumnType(\"nvarchar(50)\");\n\n                    b.Property<bool>(\"ShowComments\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"Slug\")\n                        .IsRequired()\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<bool>(\"SuppressTeaser\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"TeaserOverride\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<string>(\"TemplateKey\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"ThumbnailUrl\")\n                        .HasMaxLength(250)\n                        .HasColumnType(\"nvarchar(250)\");\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"BlogId\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"Slug\");\n\n                    b.ToTable(\"cs_Post\", null, t =>\n                        {\n                            t.HasTrigger(\"cs_Post_Trigger\");\n                        });\n\n                    b.HasAnnotation(\"SqlServer:UseSqlOutputClause\", false);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\", null)\n                        .WithMany(\"PageComments\")\n                        .HasForeignKey(\"PageEntityId\")\n                        .OnDelete(DeleteBehavior.Cascade);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageResourceEntity\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\", null)\n                        .WithMany(\"PageResources\")\n                        .HasForeignKey(\"PageEntityId\")\n                        .OnDelete(DeleteBehavior.Cascade);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\", null)\n                        .WithMany(\"PostComments\")\n                        .HasForeignKey(\"PostEntityId\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\", b =>\n                {\n                    b.Navigation(\"PageComments\");\n\n                    b.Navigation(\"PageResources\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\", b =>\n                {\n                    b.Navigation(\"PostComments\");\n                });\n#pragma warning restore 612, 618\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.MSSQL/Migrations/20250423093650_user-script-20250423.cs",
    "content": "﻿using Microsoft.EntityFrameworkCore.Migrations;\n\n#nullable disable\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.MSSQL.Migrations\n{\n    /// <inheritdoc />\n    public partial class userscript20250423 : Migration\n    {\n        /// <inheritdoc />\n        protected override void Up(MigrationBuilder migrationBuilder)\n        {\n            migrationBuilder.AddColumn<string>(\n                name: \"Script\",\n                table: \"cs_Post\",\n                type: \"nvarchar(max)\",\n                nullable: true);\n\n            migrationBuilder.AddColumn<string>(\n                name: \"Script\",\n                table: \"cs_PageResource\",\n                type: \"nvarchar(max)\",\n                nullable: true);\n\n            migrationBuilder.AddColumn<string>(\n                name: \"Script\",\n                table: \"cs_Page\",\n                type: \"nvarchar(max)\",\n                nullable: true);\n        }\n\n        /// <inheritdoc />\n        protected override void Down(MigrationBuilder migrationBuilder)\n        {\n            migrationBuilder.DropColumn(\n                name: \"Script\",\n                table: \"cs_Post\");\n\n            migrationBuilder.DropColumn(\n                name: \"Script\",\n                table: \"cs_PageResource\");\n\n            migrationBuilder.DropColumn(\n                name: \"Script\",\n                table: \"cs_Page\");\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.MSSQL/Migrations/20250818152838_remove-pageresource-script.Designer.cs",
    "content": "﻿// <auto-generated />\nusing System;\nusing Microsoft.EntityFrameworkCore;\nusing Microsoft.EntityFrameworkCore.Infrastructure;\nusing Microsoft.EntityFrameworkCore.Metadata;\nusing Microsoft.EntityFrameworkCore.Migrations;\nusing Microsoft.EntityFrameworkCore.Storage.ValueConversion;\nusing cloudscribe.SimpleContent.Storage.EFCore.MSSQL;\n\n#nullable disable\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.MSSQL.Migrations\n{\n    [DbContext(typeof(SimpleContentDbContext))]\n    [Migration(\"20250818152838_remove-pageresource-script\")]\n    partial class removepageresourcescript\n    {\n        /// <inheritdoc />\n        protected override void BuildTargetModel(ModelBuilder modelBuilder)\n        {\n#pragma warning disable 612, 618\n            modelBuilder\n                .HasAnnotation(\"ProductVersion\", \"8.0.0\")\n                .HasAnnotation(\"Relational:MaxIdentifierLength\", 128);\n\n            SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder);\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Models.ContentHistory\", b =>\n                {\n                    b.Property<Guid>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36)\n                        .HasColumnType(\"uniqueidentifier\");\n\n                    b.Property<string>(\"ArchivedBy\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<DateTime>(\"ArchivedUtc\")\n                        .HasColumnType(\"datetime2\");\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<string>(\"Content\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<string>(\"ContentId\")\n                        .IsRequired()\n                        .HasMaxLength(36)\n                        .HasColumnType(\"nvarchar(36)\");\n\n                    b.Property<string>(\"ContentSource\")\n                        .IsRequired()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"nvarchar(50)\");\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"nvarchar(50)\")\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"CreatedByUser\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"nvarchar(100)\");\n\n                    b.Property<DateTime>(\"CreatedUtc\")\n                        .HasColumnType(\"datetime2\");\n\n                    b.Property<string>(\"DraftAuthor\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"DraftContent\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<DateTime?>(\"DraftPubDate\")\n                        .HasColumnType(\"datetime2\");\n\n                    b.Property<string>(\"DraftSerializedModel\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<bool>(\"IsDraftHx\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"IsPublished\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<DateTime>(\"LastModified\")\n                        .HasColumnType(\"datetime2\");\n\n                    b.Property<string>(\"LastModifiedByUser\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"nvarchar(100)\");\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<string>(\"MetaHtml\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<string>(\"MetaJson\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<int>(\"PageOrder\")\n                        .HasColumnType(\"int\");\n\n                    b.Property<string>(\"ParentId\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"ParentSlug\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"ProjectId\")\n                        .HasMaxLength(50)\n                        .HasColumnType(\"nvarchar(50)\");\n\n                    b.Property<DateTime?>(\"PubDate\")\n                        .HasColumnType(\"datetime2\");\n\n                    b.Property<string>(\"SerializedModel\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<string>(\"Serializer\")\n                        .HasMaxLength(50)\n                        .HasColumnType(\"nvarchar(50)\");\n\n                    b.Property<bool?>(\"ShowCreatedBy\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool?>(\"ShowCreatedDate\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool?>(\"ShowLastModifiedBy\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool?>(\"ShowLastModifiedDate\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"Slug\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"TeaserOverride\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<string>(\"TemplateKey\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"ViewRoles\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<bool>(\"WasDeleted\")\n                        .HasColumnType(\"bit\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"ContentId\");\n\n                    b.HasIndex(\"ContentSource\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"CreatedByUser\");\n\n                    b.HasIndex(\"LastModifiedByUser\");\n\n                    b.HasIndex(\"Title\");\n\n                    b.ToTable(\"cs_ContentHistory\", null, t =>\n                        {\n                            t.HasTrigger(\"cs_ContentHistory_Trigger\");\n                        });\n\n                    b.HasAnnotation(\"SqlServer:UseSqlOutputClause\", false);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Models.ProjectSettings\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .HasMaxLength(50)\n                        .HasColumnType(\"nvarchar(50)\");\n\n                    b.Property<string>(\"AboutContent\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<string>(\"AboutHeading\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<bool>(\"AddBlogToPagesTree\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"BlogMenuLinksToNewestPost\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"BlogPageNavComponentVisibility\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<int>(\"BlogPagePosition\")\n                        .HasColumnType(\"int\");\n\n                    b.Property<string>(\"BlogPageText\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"CdnUrl\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"ChannelCategoriesCsv\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"ChannelRating\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"nvarchar(100)\");\n\n                    b.Property<int>(\"ChannelTimeToLive\")\n                        .HasColumnType(\"int\");\n\n                    b.Property<string>(\"CommentNotificationEmail\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"nvarchar(100)\");\n\n                    b.Property<string>(\"CopyrightNotice\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<int>(\"DaysToComment\")\n                        .HasColumnType(\"int\");\n\n                    b.Property<string>(\"DefaultContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"nvarchar(50)\")\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<int>(\"DefaultFeedItems\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"int\")\n                        .HasDefaultValue(20);\n\n                    b.Property<string>(\"DefaultPageSlug\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"Description\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<string>(\"DisqusShortName\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"nvarchar(100)\");\n\n                    b.Property<string>(\"FacebookAppId\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"nvarchar(100)\");\n\n                    b.Property<string>(\"Image\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<bool>(\"IncludePubDateInPostUrls\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"LanguageCode\")\n                        .HasMaxLength(10)\n                        .HasColumnType(\"nvarchar(10)\");\n\n                    b.Property<string>(\"LocalMediaVirtualPath\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"ManagingEditorEmail\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"nvarchar(100)\");\n\n                    b.Property<int>(\"MaxFeedItems\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"int\")\n                        .HasDefaultValue(1000);\n\n                    b.Property<bool>(\"ModerateComments\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<int>(\"PostsPerPage\")\n                        .HasColumnType(\"int\");\n\n                    b.Property<string>(\"PubDateFormat\")\n                        .HasMaxLength(75)\n                        .HasColumnType(\"nvarchar(75)\");\n\n                    b.Property<string>(\"Publisher\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"PublisherEntityType\")\n                        .HasMaxLength(50)\n                        .HasColumnType(\"nvarchar(50)\");\n\n                    b.Property<string>(\"PublisherLogoHeight\")\n                        .HasMaxLength(20)\n                        .HasColumnType(\"nvarchar(20)\");\n\n                    b.Property<string>(\"PublisherLogoUrl\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"PublisherLogoWidth\")\n                        .HasMaxLength(20)\n                        .HasColumnType(\"nvarchar(20)\");\n\n                    b.Property<string>(\"RecaptchaPrivateKey\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"RecaptchaPublicKey\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"RemoteFeedProcessorUseAgentFragment\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"RemoteFeedUrl\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<bool>(\"ShowAboutBox\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"bit\")\n                        .HasDefaultValue(true);\n\n                    b.Property<bool>(\"ShowArchivedPosts\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"bit\")\n                        .HasDefaultValue(true);\n\n                    b.Property<bool>(\"ShowBlogCategories\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"bit\")\n                        .HasDefaultValue(true);\n\n                    b.Property<bool>(\"ShowCreatedBy\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"ShowCreatedDate\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"ShowFeaturedPostsOnDefaultPage\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"ShowLastModifiedBy\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"ShowLastModifiedDate\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"ShowRecentPostsOnDefaultPage\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"ShowRelatedPosts\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"bit\")\n                        .HasDefaultValue(true);\n\n                    b.Property<bool>(\"ShowTitle\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"SiteName\")\n                        .HasMaxLength(200)\n                        .HasColumnType(\"nvarchar(200)\");\n\n                    b.Property<byte>(\"TeaserMode\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"tinyint\")\n                        .HasDefaultValue((byte)0);\n\n                    b.Property<int>(\"TeaserTruncationLength\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"int\")\n                        .HasDefaultValue(20);\n\n                    b.Property<byte>(\"TeaserTruncationMode\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"tinyint\")\n                        .HasDefaultValue((byte)0);\n\n                    b.Property<string>(\"TimeZoneId\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"nvarchar(100)\");\n\n                    b.Property<string>(\"Title\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"TwitterCreator\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"nvarchar(100)\");\n\n                    b.Property<string>(\"TwitterPublisher\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"nvarchar(100)\");\n\n                    b.Property<bool>(\"UseDefaultPageAsRootNode\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"WebmasterEmail\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"nvarchar(100)\");\n\n                    b.HasKey(\"Id\");\n\n                    b.ToTable(\"cs_ContentProject\", null, t =>\n                        {\n                            t.HasTrigger(\"cs_ContentProject_Trigger\");\n                        });\n\n                    b.HasAnnotation(\"SqlServer:UseSqlOutputClause\", false);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageCategory\", b =>\n                {\n                    b.Property<string>(\"Value\")\n                        .HasMaxLength(50)\n                        .HasColumnType(\"nvarchar(50)\");\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"nvarchar(36)\");\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"nvarchar(50)\");\n\n                    b.HasKey(\"Value\", \"PageEntityId\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.HasIndex(\"Value\");\n\n                    b.ToTable(\"cs_PageCategory\", null, t =>\n                        {\n                            t.HasTrigger(\"cs_PageCategory_Trigger\");\n                        });\n\n                    b.HasAnnotation(\"SqlServer:UseSqlOutputClause\", false);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"nvarchar(36)\");\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"Content\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<string>(\"Email\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"nvarchar(100)\");\n\n                    b.Property<string>(\"Ip\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"nvarchar(100)\");\n\n                    b.Property<bool>(\"IsAdmin\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"IsApproved\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"nvarchar(36)\");\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"nvarchar(50)\");\n\n                    b.Property<DateTime>(\"PubDate\")\n                        .HasColumnType(\"datetime2\");\n\n                    b.Property<string>(\"UserAgent\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"Website\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_PageComment\", null, t =>\n                        {\n                            t.HasTrigger(\"cs_PageComment_Trigger\");\n                        });\n\n                    b.HasAnnotation(\"SqlServer:UseSqlOutputClause\", false);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"nvarchar(36)\");\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasMaxLength(500)\n                        .HasColumnType(\"nvarchar(500)\");\n\n                    b.Property<string>(\"Content\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"nvarchar(50)\")\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"CreatedByUser\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"nvarchar(100)\");\n\n                    b.Property<DateTime>(\"CreatedUtc\")\n                        .HasColumnType(\"datetime2\");\n\n                    b.Property<bool>(\"DisableEditor\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"DraftAuthor\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"DraftContent\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<DateTime?>(\"DraftPubDate\")\n                        .HasColumnType(\"datetime2\");\n\n                    b.Property<string>(\"DraftSerializedModel\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<string>(\"ExternalUrl\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<bool>(\"IsPublished\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<DateTime>(\"LastModified\")\n                        .HasColumnType(\"datetime2\");\n\n                    b.Property<string>(\"LastModifiedByUser\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"nvarchar(100)\");\n\n                    b.Property<string>(\"MenuFilters\")\n                        .HasMaxLength(500)\n                        .HasColumnType(\"nvarchar(500)\");\n\n                    b.Property<bool>(\"MenuOnly\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasMaxLength(500)\n                        .HasColumnType(\"nvarchar(500)\");\n\n                    b.Property<string>(\"MetaHtml\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<string>(\"MetaJson\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<int>(\"PageOrder\")\n                        .HasColumnType(\"int\");\n\n                    b.Property<string>(\"ParentId\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"nvarchar(36)\");\n\n                    b.Property<string>(\"ParentSlug\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"nvarchar(50)\");\n\n                    b.Property<DateTime?>(\"PubDate\")\n                        .HasColumnType(\"datetime2\");\n\n                    b.Property<string>(\"Script\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<string>(\"SerializedModel\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<string>(\"Serializer\")\n                        .HasMaxLength(50)\n                        .HasColumnType(\"nvarchar(50)\");\n\n                    b.Property<bool>(\"ShowCategories\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"ShowComments\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool?>(\"ShowCreatedBy\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool?>(\"ShowCreatedDate\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"ShowHeading\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"ShowLastModified\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool?>(\"ShowLastModifiedBy\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool?>(\"ShowLastModifiedDate\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"ShowMenu\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"ShowPubDate\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"Slug\")\n                        .IsRequired()\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"TemplateKey\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"ViewRoles\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"ParentId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_Page\", null, t =>\n                        {\n                            t.HasTrigger(\"cs_Page_Trigger\");\n                        });\n\n                    b.HasAnnotation(\"SqlServer:UseSqlOutputClause\", false);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageResourceEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"nvarchar(36)\");\n\n                    b.Property<string>(\"Environment\")\n                        .IsRequired()\n                        .HasMaxLength(15)\n                        .HasColumnType(\"nvarchar(15)\");\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"nvarchar(36)\");\n\n                    b.Property<int>(\"Sort\")\n                        .HasColumnType(\"int\");\n\n                    b.Property<string>(\"Type\")\n                        .IsRequired()\n                        .HasMaxLength(10)\n                        .HasColumnType(\"nvarchar(10)\");\n\n                    b.Property<string>(\"Url\")\n                        .IsRequired()\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.ToTable(\"cs_PageResource\", null, t =>\n                        {\n                            t.HasTrigger(\"cs_PageResource_Trigger\");\n                        });\n\n                    b.HasAnnotation(\"SqlServer:UseSqlOutputClause\", false);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostCategory\", b =>\n                {\n                    b.Property<string>(\"Value\")\n                        .HasMaxLength(50)\n                        .HasColumnType(\"nvarchar(50)\");\n\n                    b.Property<string>(\"PostEntityId\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"nvarchar(36)\");\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"nvarchar(50)\");\n\n                    b.HasKey(\"Value\", \"PostEntityId\");\n\n                    b.HasIndex(\"PostEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.HasIndex(\"Value\");\n\n                    b.ToTable(\"cs_PostCategory\", null, t =>\n                        {\n                            t.HasTrigger(\"cs_PostCategory_Trigger\");\n                        });\n\n                    b.HasAnnotation(\"SqlServer:UseSqlOutputClause\", false);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"nvarchar(36)\");\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"Content\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<string>(\"Email\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"nvarchar(100)\");\n\n                    b.Property<string>(\"Ip\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"nvarchar(100)\");\n\n                    b.Property<bool>(\"IsAdmin\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"IsApproved\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"PostEntityId\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"nvarchar(36)\");\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"nvarchar(50)\");\n\n                    b.Property<DateTime>(\"PubDate\")\n                        .HasColumnType(\"datetime2\");\n\n                    b.Property<string>(\"UserAgent\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"Website\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PostEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_PostComment\", null, t =>\n                        {\n                            t.HasTrigger(\"cs_PostComment_Trigger\");\n                        });\n\n                    b.HasAnnotation(\"SqlServer:UseSqlOutputClause\", false);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"nvarchar(36)\");\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"AutoTeaser\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<string>(\"BlogId\")\n                        .IsRequired()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"nvarchar(50)\");\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasMaxLength(500)\n                        .HasColumnType(\"nvarchar(500)\");\n\n                    b.Property<string>(\"Content\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"nvarchar(50)\")\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"CreatedByUser\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"nvarchar(100)\");\n\n                    b.Property<DateTime>(\"CreatedUtc\")\n                        .HasColumnType(\"datetime2\");\n\n                    b.Property<string>(\"DraftAuthor\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"DraftContent\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<DateTime?>(\"DraftPubDate\")\n                        .HasColumnType(\"datetime2\");\n\n                    b.Property<string>(\"DraftSerializedModel\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<string>(\"ImageUrl\")\n                        .HasMaxLength(250)\n                        .HasColumnType(\"nvarchar(250)\");\n\n                    b.Property<bool>(\"IsFeatured\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"IsPublished\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<DateTime>(\"LastModified\")\n                        .HasColumnType(\"datetime2\");\n\n                    b.Property<string>(\"LastModifiedByUser\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"nvarchar(100)\");\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasMaxLength(500)\n                        .HasColumnType(\"nvarchar(500)\");\n\n                    b.Property<string>(\"MetaHtml\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<string>(\"MetaJson\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<DateTime?>(\"PubDate\")\n                        .HasColumnType(\"datetime2\");\n\n                    b.Property<string>(\"Script\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<string>(\"SerializedModel\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<string>(\"Serializer\")\n                        .HasMaxLength(50)\n                        .HasColumnType(\"nvarchar(50)\");\n\n                    b.Property<bool>(\"ShowComments\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"Slug\")\n                        .IsRequired()\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<bool>(\"SuppressTeaser\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"TeaserOverride\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<string>(\"TemplateKey\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"ThumbnailUrl\")\n                        .HasMaxLength(250)\n                        .HasColumnType(\"nvarchar(250)\");\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"BlogId\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"Slug\");\n\n                    b.ToTable(\"cs_Post\", null, t =>\n                        {\n                            t.HasTrigger(\"cs_Post_Trigger\");\n                        });\n\n                    b.HasAnnotation(\"SqlServer:UseSqlOutputClause\", false);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\", null)\n                        .WithMany(\"PageComments\")\n                        .HasForeignKey(\"PageEntityId\")\n                        .OnDelete(DeleteBehavior.Cascade);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageResourceEntity\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\", null)\n                        .WithMany(\"PageResources\")\n                        .HasForeignKey(\"PageEntityId\")\n                        .OnDelete(DeleteBehavior.Cascade);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\", null)\n                        .WithMany(\"PostComments\")\n                        .HasForeignKey(\"PostEntityId\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\", b =>\n                {\n                    b.Navigation(\"PageComments\");\n\n                    b.Navigation(\"PageResources\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\", b =>\n                {\n                    b.Navigation(\"PostComments\");\n                });\n#pragma warning restore 612, 618\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.MSSQL/Migrations/20250818152838_remove-pageresource-script.cs",
    "content": "﻿using Microsoft.EntityFrameworkCore.Migrations;\n\n#nullable disable\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.MSSQL.Migrations\n{\n    /// <inheritdoc />\n    public partial class removepageresourcescript : Migration\n    {\n        /// <inheritdoc />\n        protected override void Up(MigrationBuilder migrationBuilder)\n        {\n            migrationBuilder.DropColumn(\n                name: \"Script\",\n                table: \"cs_PageResource\");\n        }\n\n        /// <inheritdoc />\n        protected override void Down(MigrationBuilder migrationBuilder)\n        {\n            migrationBuilder.AddColumn<string>(\n                name: \"Script\",\n                table: \"cs_PageResource\",\n                type: \"nvarchar(max)\",\n                nullable: true);\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.MSSQL/Migrations/SimpleContentDbContextModelSnapshot.cs",
    "content": "﻿// <auto-generated />\nusing System;\nusing Microsoft.EntityFrameworkCore;\nusing Microsoft.EntityFrameworkCore.Infrastructure;\nusing Microsoft.EntityFrameworkCore.Metadata;\nusing Microsoft.EntityFrameworkCore.Storage.ValueConversion;\nusing cloudscribe.SimpleContent.Storage.EFCore.MSSQL;\n\n#nullable disable\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.MSSQL.Migrations\n{\n    [DbContext(typeof(SimpleContentDbContext))]\n    partial class SimpleContentDbContextModelSnapshot : ModelSnapshot\n    {\n        protected override void BuildModel(ModelBuilder modelBuilder)\n        {\n#pragma warning disable 612, 618\n            modelBuilder\n                .HasAnnotation(\"ProductVersion\", \"8.0.0\")\n                .HasAnnotation(\"Relational:MaxIdentifierLength\", 128);\n\n            SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder);\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Models.ContentHistory\", b =>\n                {\n                    b.Property<Guid>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36)\n                        .HasColumnType(\"uniqueidentifier\");\n\n                    b.Property<string>(\"ArchivedBy\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<DateTime>(\"ArchivedUtc\")\n                        .HasColumnType(\"datetime2\");\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<string>(\"Content\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<string>(\"ContentId\")\n                        .IsRequired()\n                        .HasMaxLength(36)\n                        .HasColumnType(\"nvarchar(36)\");\n\n                    b.Property<string>(\"ContentSource\")\n                        .IsRequired()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"nvarchar(50)\");\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"nvarchar(50)\")\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"CreatedByUser\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"nvarchar(100)\");\n\n                    b.Property<DateTime>(\"CreatedUtc\")\n                        .HasColumnType(\"datetime2\");\n\n                    b.Property<string>(\"DraftAuthor\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"DraftContent\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<DateTime?>(\"DraftPubDate\")\n                        .HasColumnType(\"datetime2\");\n\n                    b.Property<string>(\"DraftSerializedModel\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<bool>(\"IsDraftHx\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"IsPublished\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<DateTime>(\"LastModified\")\n                        .HasColumnType(\"datetime2\");\n\n                    b.Property<string>(\"LastModifiedByUser\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"nvarchar(100)\");\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<string>(\"MetaHtml\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<string>(\"MetaJson\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<int>(\"PageOrder\")\n                        .HasColumnType(\"int\");\n\n                    b.Property<string>(\"ParentId\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"ParentSlug\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"ProjectId\")\n                        .HasMaxLength(50)\n                        .HasColumnType(\"nvarchar(50)\");\n\n                    b.Property<DateTime?>(\"PubDate\")\n                        .HasColumnType(\"datetime2\");\n\n                    b.Property<string>(\"SerializedModel\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<string>(\"Serializer\")\n                        .HasMaxLength(50)\n                        .HasColumnType(\"nvarchar(50)\");\n\n                    b.Property<bool?>(\"ShowCreatedBy\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool?>(\"ShowCreatedDate\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool?>(\"ShowLastModifiedBy\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool?>(\"ShowLastModifiedDate\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"Slug\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"TeaserOverride\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<string>(\"TemplateKey\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"ViewRoles\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<bool>(\"WasDeleted\")\n                        .HasColumnType(\"bit\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"ContentId\");\n\n                    b.HasIndex(\"ContentSource\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"CreatedByUser\");\n\n                    b.HasIndex(\"LastModifiedByUser\");\n\n                    b.HasIndex(\"Title\");\n\n                    b.ToTable(\"cs_ContentHistory\", null, t =>\n                        {\n                            t.HasTrigger(\"cs_ContentHistory_Trigger\");\n                        });\n\n                    b.HasAnnotation(\"SqlServer:UseSqlOutputClause\", false);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Models.ProjectSettings\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .HasMaxLength(50)\n                        .HasColumnType(\"nvarchar(50)\");\n\n                    b.Property<string>(\"AboutContent\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<string>(\"AboutHeading\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<bool>(\"AddBlogToPagesTree\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"BlogMenuLinksToNewestPost\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"BlogPageNavComponentVisibility\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<int>(\"BlogPagePosition\")\n                        .HasColumnType(\"int\");\n\n                    b.Property<string>(\"BlogPageText\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"CdnUrl\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"ChannelCategoriesCsv\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"ChannelRating\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"nvarchar(100)\");\n\n                    b.Property<int>(\"ChannelTimeToLive\")\n                        .HasColumnType(\"int\");\n\n                    b.Property<string>(\"CommentNotificationEmail\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"nvarchar(100)\");\n\n                    b.Property<string>(\"CopyrightNotice\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<int>(\"DaysToComment\")\n                        .HasColumnType(\"int\");\n\n                    b.Property<string>(\"DefaultContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"nvarchar(50)\")\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<int>(\"DefaultFeedItems\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"int\")\n                        .HasDefaultValue(20);\n\n                    b.Property<string>(\"DefaultPageSlug\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"Description\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<string>(\"DisqusShortName\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"nvarchar(100)\");\n\n                    b.Property<string>(\"FacebookAppId\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"nvarchar(100)\");\n\n                    b.Property<string>(\"Image\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<bool>(\"IncludePubDateInPostUrls\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"LanguageCode\")\n                        .HasMaxLength(10)\n                        .HasColumnType(\"nvarchar(10)\");\n\n                    b.Property<string>(\"LocalMediaVirtualPath\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"ManagingEditorEmail\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"nvarchar(100)\");\n\n                    b.Property<int>(\"MaxFeedItems\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"int\")\n                        .HasDefaultValue(1000);\n\n                    b.Property<bool>(\"ModerateComments\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<int>(\"PostsPerPage\")\n                        .HasColumnType(\"int\");\n\n                    b.Property<string>(\"PubDateFormat\")\n                        .HasMaxLength(75)\n                        .HasColumnType(\"nvarchar(75)\");\n\n                    b.Property<string>(\"Publisher\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"PublisherEntityType\")\n                        .HasMaxLength(50)\n                        .HasColumnType(\"nvarchar(50)\");\n\n                    b.Property<string>(\"PublisherLogoHeight\")\n                        .HasMaxLength(20)\n                        .HasColumnType(\"nvarchar(20)\");\n\n                    b.Property<string>(\"PublisherLogoUrl\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"PublisherLogoWidth\")\n                        .HasMaxLength(20)\n                        .HasColumnType(\"nvarchar(20)\");\n\n                    b.Property<string>(\"RecaptchaPrivateKey\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"RecaptchaPublicKey\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"RemoteFeedProcessorUseAgentFragment\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"RemoteFeedUrl\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<bool>(\"ShowAboutBox\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"bit\")\n                        .HasDefaultValue(true);\n\n                    b.Property<bool>(\"ShowArchivedPosts\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"bit\")\n                        .HasDefaultValue(true);\n\n                    b.Property<bool>(\"ShowBlogCategories\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"bit\")\n                        .HasDefaultValue(true);\n\n                    b.Property<bool>(\"ShowCreatedBy\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"ShowCreatedDate\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"ShowFeaturedPostsOnDefaultPage\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"ShowLastModifiedBy\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"ShowLastModifiedDate\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"ShowRecentPostsOnDefaultPage\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"ShowRelatedPosts\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"bit\")\n                        .HasDefaultValue(true);\n\n                    b.Property<bool>(\"ShowTitle\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"SiteName\")\n                        .HasMaxLength(200)\n                        .HasColumnType(\"nvarchar(200)\");\n\n                    b.Property<byte>(\"TeaserMode\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"tinyint\")\n                        .HasDefaultValue((byte)0);\n\n                    b.Property<int>(\"TeaserTruncationLength\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"int\")\n                        .HasDefaultValue(20);\n\n                    b.Property<byte>(\"TeaserTruncationMode\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"tinyint\")\n                        .HasDefaultValue((byte)0);\n\n                    b.Property<string>(\"TimeZoneId\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"nvarchar(100)\");\n\n                    b.Property<string>(\"Title\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"TwitterCreator\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"nvarchar(100)\");\n\n                    b.Property<string>(\"TwitterPublisher\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"nvarchar(100)\");\n\n                    b.Property<bool>(\"UseDefaultPageAsRootNode\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"WebmasterEmail\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"nvarchar(100)\");\n\n                    b.HasKey(\"Id\");\n\n                    b.ToTable(\"cs_ContentProject\", null, t =>\n                        {\n                            t.HasTrigger(\"cs_ContentProject_Trigger\");\n                        });\n\n                    b.HasAnnotation(\"SqlServer:UseSqlOutputClause\", false);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageCategory\", b =>\n                {\n                    b.Property<string>(\"Value\")\n                        .HasMaxLength(50)\n                        .HasColumnType(\"nvarchar(50)\");\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"nvarchar(36)\");\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"nvarchar(50)\");\n\n                    b.HasKey(\"Value\", \"PageEntityId\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.HasIndex(\"Value\");\n\n                    b.ToTable(\"cs_PageCategory\", null, t =>\n                        {\n                            t.HasTrigger(\"cs_PageCategory_Trigger\");\n                        });\n\n                    b.HasAnnotation(\"SqlServer:UseSqlOutputClause\", false);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"nvarchar(36)\");\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"Content\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<string>(\"Email\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"nvarchar(100)\");\n\n                    b.Property<string>(\"Ip\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"nvarchar(100)\");\n\n                    b.Property<bool>(\"IsAdmin\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"IsApproved\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"nvarchar(36)\");\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"nvarchar(50)\");\n\n                    b.Property<DateTime>(\"PubDate\")\n                        .HasColumnType(\"datetime2\");\n\n                    b.Property<string>(\"UserAgent\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"Website\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_PageComment\", null, t =>\n                        {\n                            t.HasTrigger(\"cs_PageComment_Trigger\");\n                        });\n\n                    b.HasAnnotation(\"SqlServer:UseSqlOutputClause\", false);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"nvarchar(36)\");\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasMaxLength(500)\n                        .HasColumnType(\"nvarchar(500)\");\n\n                    b.Property<string>(\"Content\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"nvarchar(50)\")\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"CreatedByUser\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"nvarchar(100)\");\n\n                    b.Property<DateTime>(\"CreatedUtc\")\n                        .HasColumnType(\"datetime2\");\n\n                    b.Property<bool>(\"DisableEditor\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"DraftAuthor\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"DraftContent\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<DateTime?>(\"DraftPubDate\")\n                        .HasColumnType(\"datetime2\");\n\n                    b.Property<string>(\"DraftSerializedModel\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<string>(\"ExternalUrl\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<bool>(\"IsPublished\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<DateTime>(\"LastModified\")\n                        .HasColumnType(\"datetime2\");\n\n                    b.Property<string>(\"LastModifiedByUser\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"nvarchar(100)\");\n\n                    b.Property<string>(\"MenuFilters\")\n                        .HasMaxLength(500)\n                        .HasColumnType(\"nvarchar(500)\");\n\n                    b.Property<bool>(\"MenuOnly\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasMaxLength(500)\n                        .HasColumnType(\"nvarchar(500)\");\n\n                    b.Property<string>(\"MetaHtml\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<string>(\"MetaJson\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<int>(\"PageOrder\")\n                        .HasColumnType(\"int\");\n\n                    b.Property<string>(\"ParentId\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"nvarchar(36)\");\n\n                    b.Property<string>(\"ParentSlug\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"nvarchar(50)\");\n\n                    b.Property<DateTime?>(\"PubDate\")\n                        .HasColumnType(\"datetime2\");\n\n                    b.Property<string>(\"Script\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<string>(\"SerializedModel\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<string>(\"Serializer\")\n                        .HasMaxLength(50)\n                        .HasColumnType(\"nvarchar(50)\");\n\n                    b.Property<bool>(\"ShowCategories\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"ShowComments\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool?>(\"ShowCreatedBy\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool?>(\"ShowCreatedDate\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"ShowHeading\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"ShowLastModified\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool?>(\"ShowLastModifiedBy\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool?>(\"ShowLastModifiedDate\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"ShowMenu\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"ShowPubDate\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"Slug\")\n                        .IsRequired()\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"TemplateKey\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"ViewRoles\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"ParentId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_Page\", null, t =>\n                        {\n                            t.HasTrigger(\"cs_Page_Trigger\");\n                        });\n\n                    b.HasAnnotation(\"SqlServer:UseSqlOutputClause\", false);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageResourceEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"nvarchar(36)\");\n\n                    b.Property<string>(\"Environment\")\n                        .IsRequired()\n                        .HasMaxLength(15)\n                        .HasColumnType(\"nvarchar(15)\");\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"nvarchar(36)\");\n\n                    b.Property<int>(\"Sort\")\n                        .HasColumnType(\"int\");\n\n                    b.Property<string>(\"Type\")\n                        .IsRequired()\n                        .HasMaxLength(10)\n                        .HasColumnType(\"nvarchar(10)\");\n\n                    b.Property<string>(\"Url\")\n                        .IsRequired()\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.ToTable(\"cs_PageResource\", null, t =>\n                        {\n                            t.HasTrigger(\"cs_PageResource_Trigger\");\n                        });\n\n                    b.HasAnnotation(\"SqlServer:UseSqlOutputClause\", false);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostCategory\", b =>\n                {\n                    b.Property<string>(\"Value\")\n                        .HasMaxLength(50)\n                        .HasColumnType(\"nvarchar(50)\");\n\n                    b.Property<string>(\"PostEntityId\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"nvarchar(36)\");\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"nvarchar(50)\");\n\n                    b.HasKey(\"Value\", \"PostEntityId\");\n\n                    b.HasIndex(\"PostEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.HasIndex(\"Value\");\n\n                    b.ToTable(\"cs_PostCategory\", null, t =>\n                        {\n                            t.HasTrigger(\"cs_PostCategory_Trigger\");\n                        });\n\n                    b.HasAnnotation(\"SqlServer:UseSqlOutputClause\", false);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"nvarchar(36)\");\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"Content\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<string>(\"Email\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"nvarchar(100)\");\n\n                    b.Property<string>(\"Ip\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"nvarchar(100)\");\n\n                    b.Property<bool>(\"IsAdmin\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"IsApproved\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"PostEntityId\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"nvarchar(36)\");\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"nvarchar(50)\");\n\n                    b.Property<DateTime>(\"PubDate\")\n                        .HasColumnType(\"datetime2\");\n\n                    b.Property<string>(\"UserAgent\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"Website\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PostEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_PostComment\", null, t =>\n                        {\n                            t.HasTrigger(\"cs_PostComment_Trigger\");\n                        });\n\n                    b.HasAnnotation(\"SqlServer:UseSqlOutputClause\", false);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"nvarchar(36)\");\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"AutoTeaser\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<string>(\"BlogId\")\n                        .IsRequired()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"nvarchar(50)\");\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasMaxLength(500)\n                        .HasColumnType(\"nvarchar(500)\");\n\n                    b.Property<string>(\"Content\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"nvarchar(50)\")\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"CreatedByUser\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"nvarchar(100)\");\n\n                    b.Property<DateTime>(\"CreatedUtc\")\n                        .HasColumnType(\"datetime2\");\n\n                    b.Property<string>(\"DraftAuthor\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"DraftContent\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<DateTime?>(\"DraftPubDate\")\n                        .HasColumnType(\"datetime2\");\n\n                    b.Property<string>(\"DraftSerializedModel\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<string>(\"ImageUrl\")\n                        .HasMaxLength(250)\n                        .HasColumnType(\"nvarchar(250)\");\n\n                    b.Property<bool>(\"IsFeatured\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<bool>(\"IsPublished\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<DateTime>(\"LastModified\")\n                        .HasColumnType(\"datetime2\");\n\n                    b.Property<string>(\"LastModifiedByUser\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"nvarchar(100)\");\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasMaxLength(500)\n                        .HasColumnType(\"nvarchar(500)\");\n\n                    b.Property<string>(\"MetaHtml\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<string>(\"MetaJson\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<DateTime?>(\"PubDate\")\n                        .HasColumnType(\"datetime2\");\n\n                    b.Property<string>(\"Script\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<string>(\"SerializedModel\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<string>(\"Serializer\")\n                        .HasMaxLength(50)\n                        .HasColumnType(\"nvarchar(50)\");\n\n                    b.Property<bool>(\"ShowComments\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"Slug\")\n                        .IsRequired()\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<bool>(\"SuppressTeaser\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"TeaserOverride\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<string>(\"TemplateKey\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.Property<string>(\"ThumbnailUrl\")\n                        .HasMaxLength(250)\n                        .HasColumnType(\"nvarchar(250)\");\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255)\n                        .HasColumnType(\"nvarchar(255)\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"BlogId\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"Slug\");\n\n                    b.ToTable(\"cs_Post\", null, t =>\n                        {\n                            t.HasTrigger(\"cs_Post_Trigger\");\n                        });\n\n                    b.HasAnnotation(\"SqlServer:UseSqlOutputClause\", false);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\", null)\n                        .WithMany(\"PageComments\")\n                        .HasForeignKey(\"PageEntityId\")\n                        .OnDelete(DeleteBehavior.Cascade);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageResourceEntity\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\", null)\n                        .WithMany(\"PageResources\")\n                        .HasForeignKey(\"PageEntityId\")\n                        .OnDelete(DeleteBehavior.Cascade);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\", null)\n                        .WithMany(\"PostComments\")\n                        .HasForeignKey(\"PostEntityId\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\", b =>\n                {\n                    b.Navigation(\"PageComments\");\n\n                    b.Navigation(\"PageResources\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\", b =>\n                {\n                    b.Navigation(\"PostComments\");\n                });\n#pragma warning restore 612, 618\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.MSSQL/README.md",
    "content": "﻿# cloudscribe.SimpleContent.Storage.EFCore.MSSQL\n\n## Dev Notes\n\n### How to generate migrations\n\nopen a command/powershell window on the project folder\n\nSince this project is a netstandard20 class library it is not executable, therefore you have to pass in the --startup-project that is executable\n\ndotnet ef --startup-project ../sourceDev.WebApp migrations add  --context cloudscribe.SimpleContent.Storage.EFCore.MSSQL.SimpleContentDbContext simplecontent-yyyymmdd\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.MSSQL/ServiceCollectionExtensions.cs",
    "content": "﻿// Copyright (c) Source Tree Solutions, LLC. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.\n// Author:\t\t\t\t\tJoe Audette\n// Created:\t\t\t\t\t2016-09-02\n// Last Modified:\t\t\t2018-10-09\n// \n\nusing cloudscribe.SimpleContent.Models;\nusing cloudscribe.SimpleContent.Storage.EFCore.Common;\nusing cloudscribe.SimpleContent.Storage.EFCore.MSSQL;\nusing Microsoft.EntityFrameworkCore;\nusing System;\nusing System.Collections.Generic;\n\nnamespace Microsoft.Extensions.DependencyInjection\n{\n    public static class SimpleContentEFMSSQLServiceCollectionExtensions\n    {\n\n        public static IServiceCollection AddCloudscribeSimpleContentEFStorageMSSQL(\n            this IServiceCollection services,\n            string connectionString,\n            int maxConnectionRetryCount = 0,\n            int maxConnectionRetryDelaySeconds = 30,\n            ICollection<int> transientSqlErrorNumbersToAdd = null,\n            bool useSql2008Compatibility = false\n            )\n        {\n            //   deprecated call in EF Core3:  .AddEntityFrameworkSqlServer()\n            //   https://github.com/aspnet/EntityFrameworkCore/issues/12905\n\n            services // .AddEntityFrameworkSqlServer()\n                .AddDbContext<SimpleContentDbContext>(optionsBuilder =>\n                    optionsBuilder.UseSqlServer(connectionString,\n                   sqlServerOptionsAction: sqlOptions =>\n                   {\n                       sqlOptions.UseQuerySplittingBehavior(QuerySplittingBehavior.SplitQuery);\n\n                       if (maxConnectionRetryCount > 0)\n                       {\n                           //Configuring Connection Resiliency: https://docs.microsoft.com/en-us/ef/core/miscellaneous/connection-resiliency \n                           sqlOptions.EnableRetryOnFailure(\n                               maxRetryCount: maxConnectionRetryCount,\n                               maxRetryDelay: TimeSpan.FromSeconds(maxConnectionRetryDelaySeconds),\n                               errorNumbersToAdd: transientSqlErrorNumbersToAdd);\n                       }\n                       //if (useSql2008Compatibility)\n                       //{\n                       //    sqlOptions.UseRowNumberForPaging();\n                       //}\n\n\n                   }),\n                   optionsLifetime: ServiceLifetime.Singleton\n                   );\n\n            services.AddSingleton<ISimpleContentDbContextFactory, SimpleContentDbContextFactory>();\n\n            services.AddScoped<ISimpleContentDbContext, SimpleContentDbContext>();\n\n            services.AddCloudscribeSimpleContentEFStorageCommon();\n            services.AddScoped<IStorageInfo, StorageInfo>();\n\n            return services;\n        }\n\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.MSSQL/SimpleContentDbContext.cs",
    "content": "﻿// Copyright (c) Source Tree Solutions, LLC. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.\n// Author:\t\t\t\t\tJoe Audette\n// Created:\t\t\t\t\t2016-08-31\n// Last Modified:\t\t\t2019-03-12\n// \n\nusing cloudscribe.SimpleContent.Models;\nusing cloudscribe.SimpleContent.Storage.EFCore.Common;\nusing cloudscribe.SimpleContent.Storage.EFCore.Models;\nusing Microsoft.EntityFrameworkCore;\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.MSSQL\n{\n    public class SimpleContentDbContext : SimpleContentDbContextBase, ISimpleContentDbContext\n    {\n        public SimpleContentDbContext(DbContextOptions<SimpleContentDbContext> options):base(options)\n        {\n\n        }\n\n        protected SimpleContentDbContext() { }\n\n        protected override void ConfigureConventions(ModelConfigurationBuilder configurationBuilder)\n        {\n            configurationBuilder.Conventions.Add(_ => new BlankTriggerAddingConvention());\n        }\n\n        protected override void OnModelCreating(ModelBuilder modelBuilder)\n        {\n            base.OnModelCreating(modelBuilder);\n            \n            modelBuilder.Entity<ProjectSettings>(entity =>\n            {\n                entity.ToTable(\"cs_ContentProject\");\n\n                entity.HasKey(p => p.Id);\n\n                entity.Property(p => p.Id).HasMaxLength(50);\n\n                entity.Property(p => p.Title).HasMaxLength(255);\n\n                entity.Property(p => p.Publisher).HasMaxLength(255);\n\n                entity.Property(p => p.PublisherLogoUrl).HasMaxLength(255);\n\n                entity.Property(p => p.CopyrightNotice).HasMaxLength(255);\n\n                entity.Property(p => p.ModerateComments)\n                .IsRequired()\n                .HasColumnType(\"bit\");\n\n                entity.Property(p => p.CommentNotificationEmail).HasMaxLength(100);\n\n                entity.Property(p => p.BlogMenuLinksToNewestPost)\n                .IsRequired()\n                .HasColumnType(\"bit\");\n\n                entity.Property(p => p.LocalMediaVirtualPath).HasMaxLength(255);\n\n                entity.Property(p => p.CdnUrl).HasMaxLength(255);\n\n                entity.Property(p => p.PubDateFormat).HasMaxLength(75);\n\n                entity.Property(p => p.IncludePubDateInPostUrls)\n                .IsRequired()\n                .HasColumnType(\"bit\");\n\n                entity.Property(p => p.TimeZoneId).HasMaxLength(100);\n\n                entity.Property(p => p.RecaptchaPrivateKey).HasMaxLength(255);\n\n                entity.Property(p => p.RecaptchaPublicKey).HasMaxLength(255);\n\n                entity.Property(p => p.DefaultPageSlug).HasMaxLength(255);\n\n                entity.Property(p => p.UseDefaultPageAsRootNode)\n                .IsRequired()\n                .HasColumnType(\"bit\");\n\n                entity.Property(p => p.ShowTitle)\n                .IsRequired()\n                .HasColumnType(\"bit\");\n\n                entity.Property(p => p.AddBlogToPagesTree)\n                .IsRequired()\n                .HasColumnType(\"bit\");\n\n                entity.Property(p => p.BlogPageText)\n                .HasMaxLength(255);\n\n                entity.Property(p => p.BlogPageNavComponentVisibility).HasMaxLength(255);\n\n                entity.Property(p => p.Image).HasMaxLength(255);\n\n                //entity.Property(p => p.UseMetaDescriptionInFeed)\n                //.IsRequired()\n                //.HasColumnType(\"bit\");\n\n                entity.Property(p => p.LanguageCode).HasMaxLength(10);\n\n                entity.Property(p => p.ChannelCategoriesCsv).HasMaxLength(255);\n\n                entity.Property(p => p.ManagingEditorEmail).HasMaxLength(100);\n\n                entity.Property(p => p.ChannelRating).HasMaxLength(100);\n\n                entity.Property(p => p.WebmasterEmail).HasMaxLength(100);\n\n                entity.Property(p => p.RemoteFeedUrl).HasMaxLength(255);\n\n                entity.Property(p => p.RemoteFeedProcessorUseAgentFragment).HasMaxLength(255);\n\n                //entity.Property(p => p.EmailFromAddress).HasMaxLength(100);\n\n                //entity.Property(p => p.SmtpServer).HasMaxLength(100);\n\n                //entity.Property(p => p.SmtpPort);\n\n                //entity.Property(p => p.SmtpUser).HasMaxLength(500);\n\n                //entity.Property(p => p.SmtpPassword);\n\n                //entity.Property(p => p.SmtpPreferredEncoding).HasMaxLength(20);\n\n                //entity.Property(p => p.SmtpRequiresAuth)\n                //.IsRequired()\n                //.HasColumnType(\"bit\");\n\n                //entity.Property(p => p.SmtpUseSsl)\n                //.IsRequired()\n                //.HasColumnType(\"bit\");\n\n                entity.Property(p => p.PublisherLogoWidth).HasMaxLength(20);\n\n                entity.Property(p => p.PublisherLogoHeight).HasMaxLength(20);\n\n                entity.Property(p => p.DisqusShortName).HasMaxLength(100);\n\n                entity.Property(p => p.PublisherEntityType).HasMaxLength(50);\n\n                entity.Property(p => p.ShowRecentPostsOnDefaultPage)\n                .IsRequired()\n                .HasColumnType(\"bit\");\n\n                entity.Property(p => p.ShowFeaturedPostsOnDefaultPage)\n               .IsRequired()\n               .HasColumnType(\"bit\");\n\n                entity.Property(p => p.FacebookAppId).HasMaxLength(100);\n                entity.Property(p => p.SiteName).HasMaxLength(200);\n                entity.Property(p => p.TwitterCreator).HasMaxLength(100);\n                entity.Property(p => p.TwitterPublisher).HasMaxLength(100);\n\n                entity.Property(p => p.DefaultContentType)\n                .HasMaxLength(50)\n                .HasDefaultValue(\"html\")\n                ;\n\n                entity.Property(p => p.TeaserMode)\n                .HasDefaultValue(TeaserMode.Off);\n\n                entity.Property(p => p.TeaserTruncationMode)\n                .HasDefaultValue(TeaserTruncationMode.Word);\n\n                entity.Property(p => p.TeaserTruncationLength)\n                .HasDefaultValue(20);\n\n                entity.Property(p => p.DefaultFeedItems)\n                .HasDefaultValue(20);\n\n                entity.Property(p => p.MaxFeedItems)\n                .HasDefaultValue(1000);\n\n                entity.Property(p => p.AboutHeading).HasMaxLength(255);\n                entity.Property(p => p.ShowAboutBox).HasDefaultValue(true);\n                entity.Property(p => p.ShowRelatedPosts).HasDefaultValue(true);\n                entity.Property(p => p.ShowArchivedPosts).HasDefaultValue(true);\n                entity.Property(p => p.ShowBlogCategories).HasDefaultValue(true);\n            });\n\n            modelBuilder.Entity<PostEntity>(entity =>\n            {\n                entity.ToTable(\"cs_Post\");\n\n                entity.HasKey(p => p.Id);\n\n                entity.Property(p => p.Id).HasMaxLength(36);\n\n                entity.Property(p => p.CorrelationKey).HasMaxLength(255);\n\n                entity.HasIndex(p => p.CorrelationKey);\n\n                entity.Property(p => p.BlogId)\n                .HasMaxLength(50)\n                .IsRequired();\n\n                entity.HasIndex(p => p.BlogId);\n\n                entity.Property(p => p.Title)\n                .HasMaxLength(255)\n                .IsRequired();\n\n                entity.Property(p => p.Author)\n                .HasMaxLength(255);\n\n                entity.Property(p => p.Slug)\n                .HasMaxLength(255)\n                .IsRequired();\n\n                entity.HasIndex(p => p.Slug);\n\n                entity.Property(p => p.MetaDescription)\n                .HasMaxLength(500);\n\n                entity.Property(p => p.IsPublished)\n                .IsRequired()\n                .HasColumnType(\"bit\");\n\n                entity.Ignore(p => p.Categories);\n\n                entity.Property(p => p.CategoriesCsv)\n                .HasMaxLength(500);\n\n                entity.Ignore(p => p.Comments);\n\n                entity.HasMany(p => p.PostComments)\n                    .WithOne();\n\n                entity.Property(p => p.ImageUrl)\n                .HasMaxLength(250);\n\n                entity.Property(p => p.ThumbnailUrl)\n                .HasMaxLength(250);\n\n                entity.Property(p => p.ShowComments)\n                    .IsRequired()\n                    .HasColumnType(\"bit\");\n\n                entity.Property(p => p.IsFeatured)\n                .IsRequired();\n\n                entity.Property(p => p.ContentType)\n                   .HasMaxLength(50)\n                   .HasDefaultValue(\"html\");\n\n                entity.Property(p => p.TemplateKey)\n                  .HasMaxLength(255);\n\n                entity.Property(p => p.Serializer)\n                  .HasMaxLength(50);\n\n                entity.Property(p => p.CreatedByUser)\n                  .HasMaxLength(100);\n\n                entity.Property(p => p.LastModifiedByUser)\n                  .HasMaxLength(100);\n\n                entity.Property(p => p.DraftAuthor)\n                .HasMaxLength(255);\n\n                //entity.Property(p => p.SuppressTeaser)\n                //    .HasDefaultValue(false);\n            });\n\n            modelBuilder.Entity<PostComment>(entity =>\n            {\n                entity.ToTable(\"cs_PostComment\");\n\n                //entity.HasDiscriminator<string>(\"comment_type\")\n                //    .HasValue<Comment>(\"comment_base\")\n                //    .HasValue<PageComment>(\"comment_page\");\n\n                entity.HasKey(p => p.Id);\n                entity.Property(p => p.Id)\n                .HasMaxLength(36)\n                ;\n\n                entity.Ignore(p => p.ContentId); //mapped from postid\n\n                entity.Property(p => p.PostEntityId)\n                    .HasMaxLength(36);\n\n                entity.HasIndex(p => p.PostEntityId);\n\n                entity.Property(p => p.ProjectId)\n                    .HasMaxLength(50)\n                    .IsRequired();\n\n                entity.HasIndex(p => p.ProjectId);\n\n                entity.Property(p => p.Author).HasMaxLength(255);\n\n                entity.Property(p => p.Email).HasMaxLength(100);\n\n                entity.Property(p => p.Website).HasMaxLength(255);\n\n                entity.Property(p => p.Ip).HasMaxLength(100);\n\n                entity.Property(p => p.UserAgent).HasMaxLength(255);\n\n            });\n\n            modelBuilder.Entity<PostCategory>(entity =>\n            {\n                entity.ToTable(\"cs_PostCategory\");\n\n                entity.HasKey(p => new { p.Value, p.PostEntityId });\n\n                entity.Property(p => p.Value)\n                    .HasMaxLength(50)\n                    .IsRequired();\n\n                entity.HasIndex(p => p.Value);\n\n                entity.Property(p => p.PostEntityId)\n                    .HasMaxLength(36)\n                    .IsRequired();\n\n                entity.HasIndex(p => p.PostEntityId);\n\n                entity.Property(p => p.ProjectId)\n                    .HasMaxLength(50)\n                    .IsRequired();\n\n                entity.HasIndex(p => p.ProjectId);\n            });\n\n            modelBuilder.Entity<PageEntity>(entity =>\n            {\n                entity.ToTable(\"cs_Page\");\n\n                entity.HasKey(p => p.Id);\n\n                entity.Property(p => p.Id).HasMaxLength(36);\n\n                entity.Property(p => p.CorrelationKey).HasMaxLength(255);\n\n                entity.HasIndex(p => p.CorrelationKey);\n\n                entity.Property(p => p.ProjectId)\n                .HasMaxLength(50)\n                .IsRequired();\n\n                entity.HasIndex(p => p.ProjectId);\n\n                entity.Property(p => p.Title)\n                .HasMaxLength(255)\n                .IsRequired();\n\n                entity.Property(p => p.ParentId).HasMaxLength(36);\n\n                entity.HasIndex(p => p.ParentId);\n\n                entity.Property(p => p.ParentSlug).HasMaxLength(255);\n\n                entity.Property(p => p.Author).HasMaxLength(255);\n\n                entity.Property(p => p.Slug)\n                    .HasMaxLength(255)\n                    .IsRequired();\n\n                entity.Property(p => p.ExternalUrl).HasMaxLength(255);\n\n                entity.Property(p => p.MetaDescription).HasMaxLength(500);\n\n                entity.Property(p => p.IsPublished)\n                    .IsRequired()\n                    .HasColumnType(\"bit\");\n\n                entity.Property(p => p.MenuOnly)\n                    .IsRequired()\n                    .HasColumnType(\"bit\");\n\n                entity.Property(p => p.ShowMenu)\n                    .IsRequired()\n                    .HasColumnType(\"bit\");\n                \n                entity.Property(p => p.ShowHeading)\n                    .IsRequired()\n                    .HasColumnType(\"bit\");\n\n                entity.Property(p => p.ShowPubDate)\n                    .IsRequired()\n                    .HasColumnType(\"bit\");\n\n                entity.Property(p => p.ShowLastModified)\n                    .IsRequired()\n                    .HasColumnType(\"bit\");\n\n                entity.Property(p => p.ShowCategories)\n                    .IsRequired()\n                    .HasColumnType(\"bit\");\n\n                entity.Property(p => p.ShowComments)\n                    .IsRequired()\n                    .HasColumnType(\"bit\");\n\n                entity.Property(p => p.MenuFilters)\n                   .HasMaxLength(500);\n\n                entity.Ignore(p => p.Categories);\n\n                entity.Property(p => p.CategoriesCsv)\n                    .HasMaxLength(500);\n\n                entity.Ignore(p => p.Comments);\n\n                entity.HasMany(p => p.PageComments)\n                    .WithOne()\n                    .OnDelete(DeleteBehavior.Cascade); \n\n                // a shadow property to persist the categories/tags as a csv\n                //entity.Property<string>(\"CategoryCsv\");\n\n                entity.Ignore(p => p.Resources);\n                \n                entity.HasMany(p => p.PageResources)\n                    .WithOne().OnDelete(DeleteBehavior.Cascade);\n\n                entity.Property(p => p.DisableEditor)\n                   .IsRequired();\n\n                entity.Property(p => p.ContentType)\n                   .HasMaxLength(50)\n                   .HasDefaultValue(\"html\");\n\n                entity.Property(p => p.TemplateKey)\n                  .HasMaxLength(255);\n\n                entity.Property(p => p.Serializer)\n                  .HasMaxLength(50);\n\n                entity.Property(p => p.CreatedByUser)\n                  .HasMaxLength(100);\n\n                entity.Property(p => p.LastModifiedByUser)\n                  .HasMaxLength(100);\n\n                entity.Property(p => p.DraftAuthor)\n                .HasMaxLength(255);\n\n                entity.Property(p => p.ShowCreatedBy).HasColumnType(\"bit\");\n                entity.Property(p => p.ShowCreatedDate).HasColumnType(\"bit\");\n                entity.Property(p => p.ShowLastModifiedBy).HasColumnType(\"bit\");\n                entity.Property(p => p.ShowLastModifiedDate).HasColumnType(\"bit\");\n            });\n\n            modelBuilder.Entity<PageComment>(entity =>\n            {\n                entity.ToTable(\"cs_PageComment\");\n\n                //entity.HasDiscriminator<string>(\"comment_type\")\n                //    .HasValue<Comment>(\"comment_base\")\n                //    .HasValue<PageComment>(\"comment_page\");\n\n                entity.HasKey(p => p.Id);\n                entity.Property(p => p.Id)\n                .HasMaxLength(36)\n                ;\n\n                entity.Ignore(p => p.ContentId); //mapped from postid\n\n                entity.Property(p => p.PageEntityId)\n                .HasMaxLength(36)\n                //.IsRequired()\n                ;\n                entity.HasIndex(p => p.PageEntityId);\n\n                entity.Property(p => p.ProjectId)\n                .HasMaxLength(50)\n                .IsRequired()\n                ;\n                entity.HasIndex(p => p.ProjectId);\n\n                entity.Property(p => p.Author)\n               .HasMaxLength(255)\n               ;\n\n                entity.Property(p => p.Email)\n               .HasMaxLength(100)\n               ;\n\n                entity.Property(p => p.Website)\n               .HasMaxLength(255)\n               ;\n\n                entity.Property(p => p.Ip)\n               .HasMaxLength(100)\n               ;\n\n                entity.Property(p => p.UserAgent)\n               .HasMaxLength(255)\n               ;\n            });\n\n            modelBuilder.Entity<PageCategory>(entity =>\n            {\n                entity.ToTable(\"cs_PageCategory\");\n\n                entity.HasKey(p => new { p.Value, p.PageEntityId });\n\n                entity.Property(p => p.Value)\n                .HasMaxLength(50)\n                .IsRequired()\n                ;\n\n                entity.HasIndex(p => p.Value);\n\n                entity.Property(p => p.PageEntityId)\n                .HasMaxLength(36)\n                .IsRequired()\n                ;\n                entity.HasIndex(p => p.PageEntityId);\n\n                entity.Property(p => p.ProjectId)\n                .HasMaxLength(50)\n                .IsRequired()\n                ;\n                entity.HasIndex(p => p.ProjectId);\n            });\n\n            modelBuilder.Entity<PageResourceEntity>(entity =>\n            {\n                entity.ToTable(\"cs_PageResource\");\n\n                entity.HasKey(p => p.Id);\n                entity.Property(p => p.Id)\n                .HasMaxLength(36)\n                ;\n\n                entity.Ignore(p => p.ContentId); //mapped from pageEntityid\n\n                entity.Property(p => p.PageEntityId)\n                .HasMaxLength(36)\n                //.IsRequired()\n                ;\n                entity.HasIndex(p => p.PageEntityId);\n\n                entity.Property(p => p.Environment)\n                .HasMaxLength(15)\n                .IsRequired()\n                ;\n                \n\n                entity.Property(p => p.Sort)\n               .IsRequired()\n               ;\n\n                entity.Property(p => p.Type)\n               .HasMaxLength(10)\n               .IsRequired()\n               ;\n\n                entity.Property(p => p.Url)\n               .HasMaxLength(255)\n               .IsRequired()\n               ;\n\n                \n            });\n\n            modelBuilder.Entity<ContentHistory>(entity =>\n            {\n                entity.ToTable(\"cs_ContentHistory\");\n\n                entity.HasKey(p => p.Id);\n\n                entity.Property(p => p.Id).HasMaxLength(36);\n\n                entity.Property(p => p.ProjectId).HasMaxLength(50);\n\n                entity.Property(p => p.CorrelationKey).HasMaxLength(255);\n\n                entity.HasIndex(p => p.CorrelationKey);\n\n                entity.Property(p => p.ContentId)\n                .HasMaxLength(36)\n                .IsRequired();\n\n                entity.HasIndex(p => p.ContentId);\n\n                entity.Property(p => p.Title)\n                .HasMaxLength(255)\n                .IsRequired();\n\n                entity.HasIndex(p => p.Title);\n\n                entity.Property(p => p.Author)\n                .HasMaxLength(255);\n\n                entity.Property(p => p.Slug)\n                .HasMaxLength(255);\n\n                entity.Property(p => p.ParentSlug).HasMaxLength(255);\n                entity.Property(p => p.ParentId).HasMaxLength(255);\n                entity.Property(p => p.TemplateKey).HasMaxLength(255);\n                entity.Property(p => p.Serializer).HasMaxLength(50);\n\n                entity.Property(p => p.IsPublished)\n                .IsRequired()\n                .HasColumnType(\"bit\");\n                \n                entity.Property(p => p.ContentType)\n                   .HasMaxLength(50)\n                   .HasDefaultValue(\"html\");\n                \n                entity.Property(p => p.CreatedByUser)\n                  .HasMaxLength(100);\n\n                entity.HasIndex(p => p.CreatedByUser);\n\n                entity.Property(p => p.LastModifiedByUser)\n                  .HasMaxLength(100);\n\n                entity.HasIndex(p => p.LastModifiedByUser);\n\n                entity.Property(p => p.DraftAuthor)\n                .HasMaxLength(255);\n\n                entity.Property(p => p.ContentSource)\n                .HasMaxLength(50)\n                .IsRequired();\n\n                entity.HasIndex(p => p.ContentSource);\n\n                entity.Property(p => p.DraftAuthor)\n                .HasMaxLength(255);\n\n                entity.Property(p => p.ArchivedBy)\n                .HasMaxLength(255);\n\n\n            });\n\n\n\n        }\n\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.MSSQL/SimpleContentDbContextDesignTimeFactory.cs",
    "content": "﻿using Microsoft.EntityFrameworkCore;\nusing Microsoft.EntityFrameworkCore.Design;\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.MSSQL\n{\n    public class SimpleContentDbContextDesignTimeFactory : IDesignTimeDbContextFactory<SimpleContentDbContext>\n    {\n        public SimpleContentDbContext CreateDbContext(string[] args)\n        {\n            var builder = new DbContextOptionsBuilder<SimpleContentDbContext>();\n            builder.UseSqlServer(\"Server=(local);Database=DATABASENAME;Trusted_Connection=True;MultipleActiveResultSets=true\");\n\n            return new SimpleContentDbContext(builder.Options);\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.MSSQL/SimpleContentDbContextFactory.cs",
    "content": "﻿using cloudscribe.SimpleContent.Storage.EFCore.Common;\nusing Microsoft.EntityFrameworkCore;\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.MSSQL\n{\n    public class SimpleContentDbContextFactory : ISimpleContentDbContextFactory\n    {\n        public SimpleContentDbContextFactory(DbContextOptions<SimpleContentDbContext> options)\n        {\n            _options = options;\n        }\n\n        private readonly DbContextOptions<SimpleContentDbContext> _options;\n\n        public ISimpleContentDbContext CreateContext()\n        {\n            return new SimpleContentDbContext(_options);\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.MSSQL/StorageInfo.cs",
    "content": "﻿using cloudscribe.SimpleContent.Models;\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.MSSQL\n{\n    public class StorageInfo : IStorageInfo\n    {\n        public string StoragePlatform { get { return \"Entity Framework with Microsoft SqlServer\"; } }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.MSSQL/cloudscribe.SimpleContent.Storage.EFCore.MSSQL.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <Description>MSSQL Entity Framework Core implementation of cloudscribe SimpleContent commands and queries</Description>\n    <Version>10.1.0</Version>\n    <TargetFramework>net10.0</TargetFramework>\n    <Authors>Joe Audette</Authors>\n    <PackageTags>cloudscribe;commands;queries;ef</PackageTags>\n    <PackageIcon>icon.png</PackageIcon>\n    <PackageProjectUrl>https://github.com/cloudscribe/cloudscribe.SimpleContent</PackageProjectUrl>\n    <PackageLicenseExpression>Apache-2.0</PackageLicenseExpression>\n    <RepositoryUrl>https://github.com/cloudscribe/cloudscribe.SimpleContent.git</RepositoryUrl>\n    <RepositoryType>git</RepositoryType>\n\n    <PackageReadmeFile>README.md</PackageReadmeFile>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <None Include=\"icon.png\" Pack=\"true\" PackagePath=\"\\\"/>\n  </ItemGroup>\n\n  <ItemGroup>\n    <ProjectReference Include=\"..\\cloudscribe.SimpleContent.Models\\cloudscribe.SimpleContent.Models.csproj\" />\n    <ProjectReference Include=\"..\\cloudscribe.SimpleContent.Storage.EFCore.Common\\cloudscribe.SimpleContent.Storage.EFCore.Common.csproj\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"Microsoft.EntityFrameworkCore.SqlServer\" Version=\"10.0.0\" />\n    <PackageReference Include=\"Microsoft.EntityFrameworkCore.Design\" Version=\"10.0.0\" />\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"README.md\" Pack=\"true\" PackagePath=\"/\" />\n  </ItemGroup>\n</Project>\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.MySQL/Migrations/20161111152256_Initial.Designer.cs",
    "content": "﻿using System;\nusing Microsoft.EntityFrameworkCore;\nusing Microsoft.EntityFrameworkCore.Infrastructure;\nusing Microsoft.EntityFrameworkCore.Metadata;\nusing Microsoft.EntityFrameworkCore.Migrations;\nusing cloudscribe.SimpleContent.Storage.EFCore.MySQL;\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.MySQL.Migrations\n{\n    [DbContext(typeof(SimpleContentDbContext))]\n    [Migration(\"20161111152256_Initial\")]\n    partial class Initial\n    {\n        protected override void BuildTargetModel(ModelBuilder modelBuilder)\n        {\n            modelBuilder\n                .HasAnnotation(\"ProductVersion\", \"1.0.1\");\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Models.ProjectSettings\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .HasAnnotation(\"MaxLength\", 36);\n\n                    b.Property<bool>(\"AddBlogToPagesTree\");\n\n                    b.Property<bool>(\"BlogMenuLinksToNewestPost\");\n\n                    b.Property<string>(\"BlogPageNavComponentVisibility\")\n                        .HasAnnotation(\"MaxLength\", 255);\n\n                    b.Property<int>(\"BlogPagePosition\");\n\n                    b.Property<string>(\"BlogPageText\")\n                        .HasAnnotation(\"MaxLength\", 255);\n\n                    b.Property<string>(\"CdnUrl\")\n                        .HasAnnotation(\"MaxLength\", 255);\n\n                    b.Property<string>(\"ChannelCategoriesCsv\")\n                        .HasAnnotation(\"MaxLength\", 255);\n\n                    b.Property<string>(\"ChannelRating\")\n                        .HasAnnotation(\"MaxLength\", 100);\n\n                    b.Property<int>(\"ChannelTimeToLive\");\n\n                    b.Property<string>(\"CommentNotificationEmail\")\n                        .HasAnnotation(\"MaxLength\", 100);\n\n                    b.Property<string>(\"CopyrightNotice\")\n                        .HasAnnotation(\"MaxLength\", 255);\n\n                    b.Property<int>(\"DaysToComment\");\n\n                    b.Property<string>(\"DefaultPageSlug\")\n                        .HasAnnotation(\"MaxLength\", 255);\n\n                    b.Property<string>(\"Description\");\n\n                    b.Property<string>(\"EmailFromAddress\")\n                        .HasAnnotation(\"MaxLength\", 100);\n\n                    b.Property<string>(\"Image\")\n                        .HasAnnotation(\"MaxLength\", 255);\n\n                    b.Property<bool>(\"IncludePubDateInPostUrls\");\n\n                    b.Property<string>(\"LanguageCode\")\n                        .HasAnnotation(\"MaxLength\", 10);\n\n                    b.Property<string>(\"LocalMediaVirtualPath\")\n                        .HasAnnotation(\"MaxLength\", 255);\n\n                    b.Property<string>(\"ManagingEditorEmail\")\n                        .HasAnnotation(\"MaxLength\", 100);\n\n                    b.Property<bool>(\"ModerateComments\");\n\n                    b.Property<int>(\"PostsPerPage\");\n\n                    b.Property<string>(\"PubDateFormat\")\n                        .HasAnnotation(\"MaxLength\", 75);\n\n                    b.Property<string>(\"RecaptchaPrivateKey\")\n                        .HasAnnotation(\"MaxLength\", 255);\n\n                    b.Property<string>(\"RecaptchaPublicKey\")\n                        .HasAnnotation(\"MaxLength\", 255);\n\n                    b.Property<string>(\"RemoteFeedProcessorUseAgentFragment\")\n                        .HasAnnotation(\"MaxLength\", 255);\n\n                    b.Property<string>(\"RemoteFeedUrl\")\n                        .HasAnnotation(\"MaxLength\", 255);\n\n                    b.Property<bool>(\"ShowTitle\");\n\n                    b.Property<string>(\"SmtpPassword\");\n\n                    b.Property<int>(\"SmtpPort\");\n\n                    b.Property<string>(\"SmtpPreferredEncoding\")\n                        .HasAnnotation(\"MaxLength\", 20);\n\n                    b.Property<bool>(\"SmtpRequiresAuth\");\n\n                    b.Property<string>(\"SmtpServer\")\n                        .HasAnnotation(\"MaxLength\", 100);\n\n                    b.Property<bool>(\"SmtpUseSsl\");\n\n                    b.Property<string>(\"SmtpUser\")\n                        .HasAnnotation(\"MaxLength\", 500);\n\n                    b.Property<string>(\"TimeZoneId\")\n                        .HasAnnotation(\"MaxLength\", 100);\n\n                    b.Property<string>(\"Title\")\n                        .HasAnnotation(\"MaxLength\", 255);\n\n                    b.Property<bool>(\"UseDefaultPageAsRootNode\");\n\n                    b.Property<bool>(\"UseMetaDescriptionInFeed\");\n\n                    b.Property<string>(\"WebmasterEmail\")\n                        .HasAnnotation(\"MaxLength\", 100);\n\n                    b.HasKey(\"Id\");\n\n                    b.ToTable(\"cs_ContentProject\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageCategory\", b =>\n                {\n                    b.Property<string>(\"Value\")\n                        .HasAnnotation(\"MaxLength\", 50);\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasAnnotation(\"MaxLength\", 36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasAnnotation(\"MaxLength\", 36);\n\n                    b.HasKey(\"Value\", \"PageEntityId\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.HasIndex(\"Value\");\n\n                    b.ToTable(\"cs_PageCategory\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .HasAnnotation(\"MaxLength\", 36);\n\n                    b.Property<string>(\"Author\")\n                        .HasAnnotation(\"MaxLength\", 255);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"Email\")\n                        .HasAnnotation(\"MaxLength\", 100);\n\n                    b.Property<string>(\"Ip\")\n                        .HasAnnotation(\"MaxLength\", 100);\n\n                    b.Property<bool>(\"IsAdmin\");\n\n                    b.Property<bool>(\"IsApproved\");\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasAnnotation(\"MaxLength\", 36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasAnnotation(\"MaxLength\", 36);\n\n                    b.Property<DateTime>(\"PubDate\");\n\n                    b.Property<string>(\"UserAgent\")\n                        .HasAnnotation(\"MaxLength\", 255);\n\n                    b.Property<string>(\"Website\")\n                        .HasAnnotation(\"MaxLength\", 255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_PageComment\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .HasAnnotation(\"MaxLength\", 36);\n\n                    b.Property<string>(\"Author\")\n                        .HasAnnotation(\"MaxLength\", 255);\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasAnnotation(\"MaxLength\", 500);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<bool>(\"IsPublished\");\n\n                    b.Property<DateTime>(\"LastModified\");\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasAnnotation(\"MaxLength\", 500);\n\n                    b.Property<int>(\"PageOrder\");\n\n                    b.Property<string>(\"ParentId\")\n                        .HasAnnotation(\"MaxLength\", 36);\n\n                    b.Property<string>(\"ParentSlug\")\n                        .HasAnnotation(\"MaxLength\", 255);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasAnnotation(\"MaxLength\", 36);\n\n                    b.Property<DateTime>(\"PubDate\");\n\n                    b.Property<bool>(\"ShowCategories\");\n\n                    b.Property<bool>(\"ShowComments\");\n\n                    b.Property<bool>(\"ShowHeading\");\n\n                    b.Property<bool>(\"ShowLastModified\");\n\n                    b.Property<bool>(\"ShowPubDate\");\n\n                    b.Property<string>(\"Slug\")\n                        .IsRequired()\n                        .HasAnnotation(\"MaxLength\", 255);\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasAnnotation(\"MaxLength\", 255);\n\n                    b.Property<string>(\"ViewRoles\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"ParentId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_Page\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostCategory\", b =>\n                {\n                    b.Property<string>(\"Value\")\n                        .HasAnnotation(\"MaxLength\", 50);\n\n                    b.Property<string>(\"PostEntityId\")\n                        .HasAnnotation(\"MaxLength\", 36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasAnnotation(\"MaxLength\", 36);\n\n                    b.HasKey(\"Value\", \"PostEntityId\");\n\n                    b.HasIndex(\"PostEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.HasIndex(\"Value\");\n\n                    b.ToTable(\"cs_PostCategory\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .HasAnnotation(\"MaxLength\", 36);\n\n                    b.Property<string>(\"Author\")\n                        .HasAnnotation(\"MaxLength\", 255);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"Email\")\n                        .HasAnnotation(\"MaxLength\", 100);\n\n                    b.Property<string>(\"Ip\")\n                        .HasAnnotation(\"MaxLength\", 100);\n\n                    b.Property<bool>(\"IsAdmin\");\n\n                    b.Property<bool>(\"IsApproved\");\n\n                    b.Property<string>(\"PostEntityId\")\n                        .HasAnnotation(\"MaxLength\", 36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasAnnotation(\"MaxLength\", 36);\n\n                    b.Property<DateTime>(\"PubDate\");\n\n                    b.Property<string>(\"UserAgent\")\n                        .HasAnnotation(\"MaxLength\", 255);\n\n                    b.Property<string>(\"Website\")\n                        .HasAnnotation(\"MaxLength\", 255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PostEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_PostComment\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .HasAnnotation(\"MaxLength\", 36);\n\n                    b.Property<string>(\"Author\")\n                        .HasAnnotation(\"MaxLength\", 255);\n\n                    b.Property<string>(\"BlogId\")\n                        .IsRequired()\n                        .HasAnnotation(\"MaxLength\", 36);\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasAnnotation(\"MaxLength\", 500);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<bool>(\"IsPublished\");\n\n                    b.Property<DateTime>(\"LastModified\");\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasAnnotation(\"MaxLength\", 500);\n\n                    b.Property<DateTime>(\"PubDate\");\n\n                    b.Property<string>(\"Slug\")\n                        .IsRequired()\n                        .HasAnnotation(\"MaxLength\", 255);\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasAnnotation(\"MaxLength\", 255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"BlogId\");\n\n                    b.HasIndex(\"Slug\");\n\n                    b.ToTable(\"cs_Post\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\")\n                        .WithMany(\"PageComments\")\n                        .HasForeignKey(\"PageEntityId\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\")\n                        .WithMany(\"PostComments\")\n                        .HasForeignKey(\"PostEntityId\");\n                });\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.MySQL/Migrations/20161111152256_Initial.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing Microsoft.EntityFrameworkCore.Migrations;\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.MySQL.Migrations\n{\n    public partial class Initial : Migration\n    {\n        protected override void Up(MigrationBuilder migrationBuilder)\n        {\n            migrationBuilder.CreateTable(\n                name: \"cs_ContentProject\",\n                columns: table => new\n                {\n                    Id = table.Column<string>(maxLength: 36, nullable: false),\n                    AddBlogToPagesTree = table.Column<bool>(nullable: false),\n                    BlogMenuLinksToNewestPost = table.Column<bool>(nullable: false),\n                    BlogPageNavComponentVisibility = table.Column<string>(maxLength: 255, nullable: true),\n                    BlogPagePosition = table.Column<int>(nullable: false),\n                    BlogPageText = table.Column<string>(maxLength: 255, nullable: true),\n                    CdnUrl = table.Column<string>(maxLength: 255, nullable: true),\n                    ChannelCategoriesCsv = table.Column<string>(maxLength: 255, nullable: true),\n                    ChannelRating = table.Column<string>(maxLength: 100, nullable: true),\n                    ChannelTimeToLive = table.Column<int>(nullable: false),\n                    CommentNotificationEmail = table.Column<string>(maxLength: 100, nullable: true),\n                    CopyrightNotice = table.Column<string>(maxLength: 255, nullable: true),\n                    DaysToComment = table.Column<int>(nullable: false),\n                    DefaultPageSlug = table.Column<string>(maxLength: 255, nullable: true),\n                    Description = table.Column<string>(nullable: true),\n                    EmailFromAddress = table.Column<string>(maxLength: 100, nullable: true),\n                    Image = table.Column<string>(maxLength: 255, nullable: true),\n                    IncludePubDateInPostUrls = table.Column<bool>(nullable: false),\n                    LanguageCode = table.Column<string>(maxLength: 10, nullable: true),\n                    LocalMediaVirtualPath = table.Column<string>(maxLength: 255, nullable: true),\n                    ManagingEditorEmail = table.Column<string>(maxLength: 100, nullable: true),\n                    ModerateComments = table.Column<bool>(nullable: false),\n                    PostsPerPage = table.Column<int>(nullable: false),\n                    PubDateFormat = table.Column<string>(maxLength: 75, nullable: true),\n                    RecaptchaPrivateKey = table.Column<string>(maxLength: 255, nullable: true),\n                    RecaptchaPublicKey = table.Column<string>(maxLength: 255, nullable: true),\n                    RemoteFeedProcessorUseAgentFragment = table.Column<string>(maxLength: 255, nullable: true),\n                    RemoteFeedUrl = table.Column<string>(maxLength: 255, nullable: true),\n                    ShowTitle = table.Column<bool>(nullable: false),\n                    SmtpPassword = table.Column<string>(nullable: true),\n                    SmtpPort = table.Column<int>(nullable: false),\n                    SmtpPreferredEncoding = table.Column<string>(maxLength: 20, nullable: true),\n                    SmtpRequiresAuth = table.Column<bool>(nullable: false),\n                    SmtpServer = table.Column<string>(maxLength: 100, nullable: true),\n                    SmtpUseSsl = table.Column<bool>(nullable: false),\n                    SmtpUser = table.Column<string>(maxLength: 500, nullable: true),\n                    TimeZoneId = table.Column<string>(maxLength: 100, nullable: true),\n                    Title = table.Column<string>(maxLength: 255, nullable: true),\n                    UseDefaultPageAsRootNode = table.Column<bool>(nullable: false),\n                    UseMetaDescriptionInFeed = table.Column<bool>(nullable: false),\n                    WebmasterEmail = table.Column<string>(maxLength: 100, nullable: true)\n                },\n                constraints: table =>\n                {\n                    table.PrimaryKey(\"PK_cs_ContentProject\", x => x.Id);\n                });\n\n            migrationBuilder.CreateTable(\n                name: \"cs_PageCategory\",\n                columns: table => new\n                {\n                    Value = table.Column<string>(maxLength: 50, nullable: false),\n                    PageEntityId = table.Column<string>(maxLength: 36, nullable: false),\n                    ProjectId = table.Column<string>(maxLength: 36, nullable: false)\n                },\n                constraints: table =>\n                {\n                    table.PrimaryKey(\"PK_cs_PageCategory\", x => new { x.Value, x.PageEntityId });\n                });\n\n            migrationBuilder.CreateTable(\n                name: \"cs_Page\",\n                columns: table => new\n                {\n                    Id = table.Column<string>(maxLength: 36, nullable: false),\n                    Author = table.Column<string>(maxLength: 255, nullable: true),\n                    CategoriesCsv = table.Column<string>(maxLength: 500, nullable: true),\n                    Content = table.Column<string>(nullable: true),\n                    IsPublished = table.Column<bool>(nullable: false),\n                    LastModified = table.Column<DateTime>(nullable: false),\n                    MetaDescription = table.Column<string>(maxLength: 500, nullable: true),\n                    PageOrder = table.Column<int>(nullable: false),\n                    ParentId = table.Column<string>(maxLength: 36, nullable: true),\n                    ParentSlug = table.Column<string>(maxLength: 255, nullable: true),\n                    ProjectId = table.Column<string>(maxLength: 36, nullable: false),\n                    PubDate = table.Column<DateTime>(nullable: false),\n                    ShowCategories = table.Column<bool>(nullable: false),\n                    ShowComments = table.Column<bool>(nullable: false),\n                    ShowHeading = table.Column<bool>(nullable: false),\n                    ShowLastModified = table.Column<bool>(nullable: false),\n                    ShowPubDate = table.Column<bool>(nullable: false),\n                    Slug = table.Column<string>(maxLength: 255, nullable: false),\n                    Title = table.Column<string>(maxLength: 255, nullable: false),\n                    ViewRoles = table.Column<string>(nullable: true)\n                },\n                constraints: table =>\n                {\n                    table.PrimaryKey(\"PK_cs_Page\", x => x.Id);\n                });\n\n            migrationBuilder.CreateTable(\n                name: \"cs_PostCategory\",\n                columns: table => new\n                {\n                    Value = table.Column<string>(maxLength: 50, nullable: false),\n                    PostEntityId = table.Column<string>(maxLength: 36, nullable: false),\n                    ProjectId = table.Column<string>(maxLength: 36, nullable: false)\n                },\n                constraints: table =>\n                {\n                    table.PrimaryKey(\"PK_cs_PostCategory\", x => new { x.Value, x.PostEntityId });\n                });\n\n            migrationBuilder.CreateTable(\n                name: \"cs_Post\",\n                columns: table => new\n                {\n                    Id = table.Column<string>(maxLength: 36, nullable: false),\n                    Author = table.Column<string>(maxLength: 255, nullable: true),\n                    BlogId = table.Column<string>(maxLength: 36, nullable: false),\n                    CategoriesCsv = table.Column<string>(maxLength: 500, nullable: true),\n                    Content = table.Column<string>(nullable: true),\n                    IsPublished = table.Column<bool>(nullable: false),\n                    LastModified = table.Column<DateTime>(nullable: false),\n                    MetaDescription = table.Column<string>(maxLength: 500, nullable: true),\n                    PubDate = table.Column<DateTime>(nullable: false),\n                    Slug = table.Column<string>(maxLength: 255, nullable: false),\n                    Title = table.Column<string>(maxLength: 255, nullable: false)\n                },\n                constraints: table =>\n                {\n                    table.PrimaryKey(\"PK_cs_Post\", x => x.Id);\n                });\n\n            migrationBuilder.CreateTable(\n                name: \"cs_PageComment\",\n                columns: table => new\n                {\n                    Id = table.Column<string>(maxLength: 36, nullable: false),\n                    Author = table.Column<string>(maxLength: 255, nullable: true),\n                    Content = table.Column<string>(nullable: true),\n                    Email = table.Column<string>(maxLength: 100, nullable: true),\n                    Ip = table.Column<string>(maxLength: 100, nullable: true),\n                    IsAdmin = table.Column<bool>(nullable: false),\n                    IsApproved = table.Column<bool>(nullable: false),\n                    PageEntityId = table.Column<string>(maxLength: 36, nullable: true),\n                    ProjectId = table.Column<string>(maxLength: 36, nullable: false),\n                    PubDate = table.Column<DateTime>(nullable: false),\n                    UserAgent = table.Column<string>(maxLength: 255, nullable: true),\n                    Website = table.Column<string>(maxLength: 255, nullable: true)\n                },\n                constraints: table =>\n                {\n                    table.PrimaryKey(\"PK_cs_PageComment\", x => x.Id);\n                    table.ForeignKey(\n                        name: \"FK_cs_PageComment_cs_Page_PageEntityId\",\n                        column: x => x.PageEntityId,\n                        principalTable: \"cs_Page\",\n                        principalColumn: \"Id\",\n                        onDelete: ReferentialAction.Restrict);\n                });\n\n            migrationBuilder.CreateTable(\n                name: \"cs_PostComment\",\n                columns: table => new\n                {\n                    Id = table.Column<string>(maxLength: 36, nullable: false),\n                    Author = table.Column<string>(maxLength: 255, nullable: true),\n                    Content = table.Column<string>(nullable: true),\n                    Email = table.Column<string>(maxLength: 100, nullable: true),\n                    Ip = table.Column<string>(maxLength: 100, nullable: true),\n                    IsAdmin = table.Column<bool>(nullable: false),\n                    IsApproved = table.Column<bool>(nullable: false),\n                    PostEntityId = table.Column<string>(maxLength: 36, nullable: true),\n                    ProjectId = table.Column<string>(maxLength: 36, nullable: false),\n                    PubDate = table.Column<DateTime>(nullable: false),\n                    UserAgent = table.Column<string>(maxLength: 255, nullable: true),\n                    Website = table.Column<string>(maxLength: 255, nullable: true)\n                },\n                constraints: table =>\n                {\n                    table.PrimaryKey(\"PK_cs_PostComment\", x => x.Id);\n                    table.ForeignKey(\n                        name: \"FK_cs_PostComment_cs_Post_PostEntityId\",\n                        column: x => x.PostEntityId,\n                        principalTable: \"cs_Post\",\n                        principalColumn: \"Id\",\n                        onDelete: ReferentialAction.Restrict);\n                });\n\n            migrationBuilder.CreateIndex(\n                name: \"IX_cs_PageCategory_PageEntityId\",\n                table: \"cs_PageCategory\",\n                column: \"PageEntityId\");\n\n            migrationBuilder.CreateIndex(\n                name: \"IX_cs_PageCategory_ProjectId\",\n                table: \"cs_PageCategory\",\n                column: \"ProjectId\");\n\n            migrationBuilder.CreateIndex(\n                name: \"IX_cs_PageCategory_Value\",\n                table: \"cs_PageCategory\",\n                column: \"Value\");\n\n            migrationBuilder.CreateIndex(\n                name: \"IX_cs_PageComment_PageEntityId\",\n                table: \"cs_PageComment\",\n                column: \"PageEntityId\");\n\n            migrationBuilder.CreateIndex(\n                name: \"IX_cs_PageComment_ProjectId\",\n                table: \"cs_PageComment\",\n                column: \"ProjectId\");\n\n            migrationBuilder.CreateIndex(\n                name: \"IX_cs_Page_ParentId\",\n                table: \"cs_Page\",\n                column: \"ParentId\");\n\n            migrationBuilder.CreateIndex(\n                name: \"IX_cs_Page_ProjectId\",\n                table: \"cs_Page\",\n                column: \"ProjectId\");\n\n            migrationBuilder.CreateIndex(\n                name: \"IX_cs_PostCategory_PostEntityId\",\n                table: \"cs_PostCategory\",\n                column: \"PostEntityId\");\n\n            migrationBuilder.CreateIndex(\n                name: \"IX_cs_PostCategory_ProjectId\",\n                table: \"cs_PostCategory\",\n                column: \"ProjectId\");\n\n            migrationBuilder.CreateIndex(\n                name: \"IX_cs_PostCategory_Value\",\n                table: \"cs_PostCategory\",\n                column: \"Value\");\n\n            migrationBuilder.CreateIndex(\n                name: \"IX_cs_PostComment_PostEntityId\",\n                table: \"cs_PostComment\",\n                column: \"PostEntityId\");\n\n            migrationBuilder.CreateIndex(\n                name: \"IX_cs_PostComment_ProjectId\",\n                table: \"cs_PostComment\",\n                column: \"ProjectId\");\n\n            migrationBuilder.CreateIndex(\n                name: \"IX_cs_Post_BlogId\",\n                table: \"cs_Post\",\n                column: \"BlogId\");\n\n            migrationBuilder.CreateIndex(\n                name: \"IX_cs_Post_Slug\",\n                table: \"cs_Post\",\n                column: \"Slug\");\n        }\n\n        protected override void Down(MigrationBuilder migrationBuilder)\n        {\n            migrationBuilder.DropTable(\n                name: \"cs_ContentProject\");\n\n            migrationBuilder.DropTable(\n                name: \"cs_PageCategory\");\n\n            migrationBuilder.DropTable(\n                name: \"cs_PageComment\");\n\n            migrationBuilder.DropTable(\n                name: \"cs_PostCategory\");\n\n            migrationBuilder.DropTable(\n                name: \"cs_PostComment\");\n\n            migrationBuilder.DropTable(\n                name: \"cs_Page\");\n\n            migrationBuilder.DropTable(\n                name: \"cs_Post\");\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.MySQL/Migrations/20170108141502_AddMenuOnlyProp.Designer.cs",
    "content": "﻿using System;\nusing Microsoft.EntityFrameworkCore;\nusing Microsoft.EntityFrameworkCore.Infrastructure;\nusing Microsoft.EntityFrameworkCore.Metadata;\nusing Microsoft.EntityFrameworkCore.Migrations;\nusing cloudscribe.SimpleContent.Storage.EFCore.MySQL;\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.MySQL.Migrations\n{\n    [DbContext(typeof(SimpleContentDbContext))]\n    [Migration(\"20170108141502_AddMenuOnlyProp\")]\n    partial class AddMenuOnlyProp\n    {\n        protected override void BuildTargetModel(ModelBuilder modelBuilder)\n        {\n            modelBuilder\n                .HasAnnotation(\"ProductVersion\", \"1.1.0-rtm-22752\");\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Models.ProjectSettings\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<bool>(\"AddBlogToPagesTree\");\n\n                    b.Property<bool>(\"BlogMenuLinksToNewestPost\");\n\n                    b.Property<string>(\"BlogPageNavComponentVisibility\")\n                        .HasMaxLength(255);\n\n                    b.Property<int>(\"BlogPagePosition\");\n\n                    b.Property<string>(\"BlogPageText\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CdnUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ChannelCategoriesCsv\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ChannelRating\")\n                        .HasMaxLength(100);\n\n                    b.Property<int>(\"ChannelTimeToLive\");\n\n                    b.Property<string>(\"CommentNotificationEmail\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"CopyrightNotice\")\n                        .HasMaxLength(255);\n\n                    b.Property<int>(\"DaysToComment\");\n\n                    b.Property<string>(\"DefaultPageSlug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Description\");\n\n                    b.Property<string>(\"EmailFromAddress\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Image\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"IncludePubDateInPostUrls\");\n\n                    b.Property<string>(\"LanguageCode\")\n                        .HasMaxLength(10);\n\n                    b.Property<string>(\"LocalMediaVirtualPath\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ManagingEditorEmail\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"ModerateComments\");\n\n                    b.Property<int>(\"PostsPerPage\");\n\n                    b.Property<string>(\"PubDateFormat\")\n                        .HasMaxLength(75);\n\n                    b.Property<string>(\"RecaptchaPrivateKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RecaptchaPublicKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RemoteFeedProcessorUseAgentFragment\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RemoteFeedUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"ShowTitle\");\n\n                    b.Property<string>(\"SmtpPassword\");\n\n                    b.Property<int>(\"SmtpPort\");\n\n                    b.Property<string>(\"SmtpPreferredEncoding\")\n                        .HasMaxLength(20);\n\n                    b.Property<bool>(\"SmtpRequiresAuth\");\n\n                    b.Property<string>(\"SmtpServer\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"SmtpUseSsl\");\n\n                    b.Property<string>(\"SmtpUser\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"TimeZoneId\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Title\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"UseDefaultPageAsRootNode\");\n\n                    b.Property<bool>(\"UseMetaDescriptionInFeed\");\n\n                    b.Property<string>(\"WebmasterEmail\")\n                        .HasMaxLength(100);\n\n                    b.HasKey(\"Id\");\n\n                    b.ToTable(\"cs_ContentProject\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageCategory\", b =>\n                {\n                    b.Property<string>(\"Value\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.HasKey(\"Value\", \"PageEntityId\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.HasIndex(\"Value\");\n\n                    b.ToTable(\"cs_PageCategory\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"Email\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Ip\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"IsAdmin\");\n\n                    b.Property<bool>(\"IsApproved\");\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<DateTime>(\"PubDate\");\n\n                    b.Property<string>(\"UserAgent\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Website\")\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_PageComment\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<bool>(\"IsPublished\");\n\n                    b.Property<DateTime>(\"LastModified\");\n\n                    b.Property<bool>(\"MenuOnly\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue(false);\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasMaxLength(500);\n\n                    b.Property<int>(\"PageOrder\");\n\n                    b.Property<string>(\"ParentId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ParentSlug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<DateTime>(\"PubDate\");\n\n                    b.Property<bool>(\"ShowCategories\");\n\n                    b.Property<bool>(\"ShowComments\");\n\n                    b.Property<bool>(\"ShowHeading\");\n\n                    b.Property<bool>(\"ShowLastModified\");\n\n                    b.Property<bool>(\"ShowPubDate\");\n\n                    b.Property<string>(\"Slug\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ViewRoles\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"ParentId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_Page\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostCategory\", b =>\n                {\n                    b.Property<string>(\"Value\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PostEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.HasKey(\"Value\", \"PostEntityId\");\n\n                    b.HasIndex(\"PostEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.HasIndex(\"Value\");\n\n                    b.ToTable(\"cs_PostCategory\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"Email\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Ip\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"IsAdmin\");\n\n                    b.Property<bool>(\"IsApproved\");\n\n                    b.Property<string>(\"PostEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<DateTime>(\"PubDate\");\n\n                    b.Property<string>(\"UserAgent\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Website\")\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PostEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_PostComment\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"BlogId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<bool>(\"IsPublished\");\n\n                    b.Property<DateTime>(\"LastModified\");\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasMaxLength(500);\n\n                    b.Property<DateTime>(\"PubDate\");\n\n                    b.Property<string>(\"Slug\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"BlogId\");\n\n                    b.HasIndex(\"Slug\");\n\n                    b.ToTable(\"cs_Post\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\")\n                        .WithMany(\"PageComments\")\n                        .HasForeignKey(\"PageEntityId\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\")\n                        .WithMany(\"PostComments\")\n                        .HasForeignKey(\"PostEntityId\");\n                });\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.MySQL/Migrations/20170108141502_AddMenuOnlyProp.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing Microsoft.EntityFrameworkCore.Migrations;\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.MySQL.Migrations\n{\n    public partial class AddMenuOnlyProp : Migration\n    {\n        protected override void Up(MigrationBuilder migrationBuilder)\n        {\n            migrationBuilder.AlterColumn<string>(\n                name: \"Id\",\n                table: \"cs_Post\",\n                maxLength: 36,\n                nullable: false,\n                oldClrType: typeof(string),\n                oldMaxLength: 36)\n                .Annotation(\"MySql:ValueGeneratedOnAdd\", true);\n\n            migrationBuilder.AlterColumn<string>(\n                name: \"Id\",\n                table: \"cs_PostComment\",\n                maxLength: 36,\n                nullable: false,\n                oldClrType: typeof(string),\n                oldMaxLength: 36)\n                .Annotation(\"MySql:ValueGeneratedOnAdd\", true);\n\n            migrationBuilder.AlterColumn<string>(\n                name: \"Id\",\n                table: \"cs_Page\",\n                maxLength: 36,\n                nullable: false,\n                oldClrType: typeof(string),\n                oldMaxLength: 36)\n                .Annotation(\"MySql:ValueGeneratedOnAdd\", true);\n\n            migrationBuilder.AddColumn<bool>(\n                name: \"MenuOnly\",\n                table: \"cs_Page\",\n                nullable: false,\n                defaultValue: false)\n                .Annotation(\"MySql:ValueGeneratedOnAdd\", true);\n\n            migrationBuilder.AlterColumn<string>(\n                name: \"Id\",\n                table: \"cs_PageComment\",\n                maxLength: 36,\n                nullable: false,\n                oldClrType: typeof(string),\n                oldMaxLength: 36)\n                .Annotation(\"MySql:ValueGeneratedOnAdd\", true);\n\n            migrationBuilder.AlterColumn<string>(\n                name: \"Id\",\n                table: \"cs_ContentProject\",\n                maxLength: 36,\n                nullable: false,\n                oldClrType: typeof(string),\n                oldMaxLength: 36)\n                .Annotation(\"MySql:ValueGeneratedOnAdd\", true);\n        }\n\n        protected override void Down(MigrationBuilder migrationBuilder)\n        {\n            migrationBuilder.DropColumn(\n                name: \"MenuOnly\",\n                table: \"cs_Page\");\n\n            migrationBuilder.AlterColumn<string>(\n                name: \"Id\",\n                table: \"cs_Post\",\n                maxLength: 36,\n                nullable: false,\n                oldClrType: typeof(string),\n                oldMaxLength: 36)\n                .OldAnnotation(\"MySql:ValueGeneratedOnAdd\", true);\n\n            migrationBuilder.AlterColumn<string>(\n                name: \"Id\",\n                table: \"cs_PostComment\",\n                maxLength: 36,\n                nullable: false,\n                oldClrType: typeof(string),\n                oldMaxLength: 36)\n                .OldAnnotation(\"MySql:ValueGeneratedOnAdd\", true);\n\n            migrationBuilder.AlterColumn<string>(\n                name: \"Id\",\n                table: \"cs_Page\",\n                maxLength: 36,\n                nullable: false,\n                oldClrType: typeof(string),\n                oldMaxLength: 36)\n                .OldAnnotation(\"MySql:ValueGeneratedOnAdd\", true);\n\n            migrationBuilder.AlterColumn<string>(\n                name: \"Id\",\n                table: \"cs_PageComment\",\n                maxLength: 36,\n                nullable: false,\n                oldClrType: typeof(string),\n                oldMaxLength: 36)\n                .OldAnnotation(\"MySql:ValueGeneratedOnAdd\", true);\n\n            migrationBuilder.AlterColumn<string>(\n                name: \"Id\",\n                table: \"cs_ContentProject\",\n                maxLength: 36,\n                nullable: false,\n                oldClrType: typeof(string),\n                oldMaxLength: 36)\n                .OldAnnotation(\"MySql:ValueGeneratedOnAdd\", true);\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.MySQL/Migrations/20170301145042_changes20170301.Designer.cs",
    "content": "﻿using System;\nusing Microsoft.EntityFrameworkCore;\nusing Microsoft.EntityFrameworkCore.Infrastructure;\nusing Microsoft.EntityFrameworkCore.Metadata;\nusing Microsoft.EntityFrameworkCore.Migrations;\nusing cloudscribe.SimpleContent.Storage.EFCore.MySQL;\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.MySQL.Migrations\n{\n    [DbContext(typeof(SimpleContentDbContext))]\n    [Migration(\"20170301145042_changes20170301\")]\n    partial class changes20170301\n    {\n        protected override void BuildTargetModel(ModelBuilder modelBuilder)\n        {\n            modelBuilder\n                .HasAnnotation(\"ProductVersion\", \"1.1.0-rtm-22752\");\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Models.ProjectSettings\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<bool>(\"AddBlogToPagesTree\");\n\n                    b.Property<bool>(\"BlogMenuLinksToNewestPost\");\n\n                    b.Property<string>(\"BlogPageNavComponentVisibility\")\n                        .HasMaxLength(255);\n\n                    b.Property<int>(\"BlogPagePosition\");\n\n                    b.Property<string>(\"BlogPageText\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CdnUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ChannelCategoriesCsv\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ChannelRating\")\n                        .HasMaxLength(100);\n\n                    b.Property<int>(\"ChannelTimeToLive\");\n\n                    b.Property<string>(\"CommentNotificationEmail\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"CopyrightNotice\")\n                        .HasMaxLength(255);\n\n                    b.Property<int>(\"DaysToComment\");\n\n                    b.Property<string>(\"DefaultPageSlug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Description\");\n\n                    b.Property<string>(\"EmailFromAddress\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Image\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"IncludePubDateInPostUrls\");\n\n                    b.Property<string>(\"LanguageCode\")\n                        .HasMaxLength(10);\n\n                    b.Property<string>(\"LocalMediaVirtualPath\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ManagingEditorEmail\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"ModerateComments\");\n\n                    b.Property<int>(\"PostsPerPage\");\n\n                    b.Property<string>(\"PubDateFormat\")\n                        .HasMaxLength(75);\n\n                    b.Property<string>(\"Publisher\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"PublisherLogoUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RecaptchaPrivateKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RecaptchaPublicKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RemoteFeedProcessorUseAgentFragment\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RemoteFeedUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"ShowTitle\");\n\n                    b.Property<string>(\"SmtpPassword\");\n\n                    b.Property<int>(\"SmtpPort\");\n\n                    b.Property<string>(\"SmtpPreferredEncoding\")\n                        .HasMaxLength(20);\n\n                    b.Property<bool>(\"SmtpRequiresAuth\");\n\n                    b.Property<string>(\"SmtpServer\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"SmtpUseSsl\");\n\n                    b.Property<string>(\"SmtpUser\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"TimeZoneId\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Title\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"UseDefaultPageAsRootNode\");\n\n                    b.Property<bool>(\"UseMetaDescriptionInFeed\");\n\n                    b.Property<string>(\"WebmasterEmail\")\n                        .HasMaxLength(100);\n\n                    b.HasKey(\"Id\");\n\n                    b.ToTable(\"cs_ContentProject\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageCategory\", b =>\n                {\n                    b.Property<string>(\"Value\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.HasKey(\"Value\", \"PageEntityId\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.HasIndex(\"Value\");\n\n                    b.ToTable(\"cs_PageCategory\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"Email\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Ip\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"IsAdmin\");\n\n                    b.Property<bool>(\"IsApproved\");\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<DateTime>(\"PubDate\");\n\n                    b.Property<string>(\"UserAgent\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Website\")\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_PageComment\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ExternalUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"IsPublished\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue(true);\n\n                    b.Property<DateTime>(\"LastModified\");\n\n                    b.Property<bool>(\"MenuOnly\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue(false);\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasMaxLength(500);\n\n                    b.Property<int>(\"PageOrder\");\n\n                    b.Property<string>(\"ParentId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ParentSlug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<DateTime>(\"PubDate\");\n\n                    b.Property<bool>(\"ShowCategories\");\n                    //.ValueGeneratedOnAdd()\n                    //.HasDefaultValue(false);\n\n                    b.Property<bool>(\"ShowComments\");\n                    //.ValueGeneratedOnAdd()\n                    //.HasDefaultValue(false);\n\n                    b.Property<bool>(\"ShowHeading\");\n                    //.ValueGeneratedOnAdd()\n                    //.HasDefaultValue(true);\n\n                    b.Property<bool>(\"ShowLastModified\");\n                    //.ValueGeneratedOnAdd()\n                    //.HasDefaultValue(false);\n\n                    b.Property<bool>(\"ShowMenu\");\n                    //.ValueGeneratedOnAdd()\n                    //.HasDefaultValue(false);\n\n                    b.Property<bool>(\"ShowPubDate\");\n                        //.ValueGeneratedOnAdd()\n                        //.HasDefaultValue(false);\n\n                    b.Property<string>(\"Slug\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ViewRoles\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"ParentId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_Page\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostCategory\", b =>\n                {\n                    b.Property<string>(\"Value\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PostEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.HasKey(\"Value\", \"PostEntityId\");\n\n                    b.HasIndex(\"PostEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.HasIndex(\"Value\");\n\n                    b.ToTable(\"cs_PostCategory\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"Email\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Ip\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"IsAdmin\");\n\n                    b.Property<bool>(\"IsApproved\");\n\n                    b.Property<string>(\"PostEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<DateTime>(\"PubDate\");\n\n                    b.Property<string>(\"UserAgent\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Website\")\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PostEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_PostComment\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"BlogId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<bool>(\"IsPublished\");\n\n                    b.Property<DateTime>(\"LastModified\");\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasMaxLength(500);\n\n                    b.Property<DateTime>(\"PubDate\");\n\n                    b.Property<string>(\"Slug\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"BlogId\");\n\n                    b.HasIndex(\"Slug\");\n\n                    b.ToTable(\"cs_Post\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\")\n                        .WithMany(\"PageComments\")\n                        .HasForeignKey(\"PageEntityId\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\")\n                        .WithMany(\"PostComments\")\n                        .HasForeignKey(\"PostEntityId\");\n                });\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.MySQL/Migrations/20170301145042_changes20170301.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing Microsoft.EntityFrameworkCore.Migrations;\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.MySQL.Migrations\n{\n    public partial class changes20170301 : Migration\n    {\n        protected override void Up(MigrationBuilder migrationBuilder)\n        {\n            migrationBuilder.AddColumn<string>(\n                name: \"CorrelationKey\",\n                table: \"cs_Page\",\n                maxLength: 255,\n                nullable: true);\n\n            migrationBuilder.AddColumn<string>(\n                name: \"ExternalUrl\",\n                table: \"cs_Page\",\n                maxLength: 255,\n                nullable: true);\n\n            migrationBuilder.AddColumn<bool>(\n                name: \"ShowMenu\",\n                table: \"cs_Page\",\n                nullable: false,\n                defaultValue: false)\n                .Annotation(\"MySql:ValueGeneratedOnAdd\", true);\n\n            migrationBuilder.AddColumn<string>(\n                name: \"Publisher\",\n                table: \"cs_ContentProject\",\n                maxLength: 255,\n                nullable: true);\n\n            migrationBuilder.AddColumn<string>(\n                name: \"PublisherLogoUrl\",\n                table: \"cs_ContentProject\",\n                maxLength: 255,\n                nullable: true);\n\n            //migrationBuilder.AlterColumn<bool>(\n            //    name: \"ShowPubDate\",\n            //    table: \"cs_Page\",\n            //    nullable: false,\n            //    defaultValue: false,\n            //    oldClrType: typeof(bool))\n            //    .Annotation(\"MySql:ValueGeneratedOnAdd\", true);\n\n            //migrationBuilder.AlterColumn<bool>(\n            //    name: \"ShowLastModified\",\n            //    table: \"cs_Page\",\n            //    nullable: false,\n            //    defaultValue: false,\n            //    oldClrType: typeof(bool))\n            //    .Annotation(\"MySql:ValueGeneratedOnAdd\", true);\n\n            //migrationBuilder.AlterColumn<bool>(\n            //    name: \"ShowHeading\",\n            //    table: \"cs_Page\",\n            //    nullable: false,\n            //    defaultValue: true,\n            //    oldClrType: typeof(bool))\n            //    .Annotation(\"MySql:ValueGeneratedOnAdd\", true);\n\n            //migrationBuilder.AlterColumn<bool>(\n            //    name: \"ShowComments\",\n            //    table: \"cs_Page\",\n            //    nullable: false,\n            //    defaultValue: false,\n            //    oldClrType: typeof(bool))\n            //    .Annotation(\"MySql:ValueGeneratedOnAdd\", true);\n\n            //migrationBuilder.AlterColumn<bool>(\n            //    name: \"ShowCategories\",\n            //    table: \"cs_Page\",\n            //    nullable: false,\n            //    defaultValue: false,\n            //    oldClrType: typeof(bool))\n            //    .Annotation(\"MySql:ValueGeneratedOnAdd\", true);\n\n            //migrationBuilder.AlterColumn<bool>(\n            //    name: \"IsPublished\",\n            //    table: \"cs_Page\",\n            //    nullable: false,\n            //    defaultValue: true,\n            //    oldClrType: typeof(bool))\n            //    .Annotation(\"MySql:ValueGeneratedOnAdd\", true);\n\n            migrationBuilder.CreateIndex(\n                name: \"IX_cs_Page_CorrelationKey\",\n                table: \"cs_Page\",\n                column: \"CorrelationKey\");\n        }\n\n        protected override void Down(MigrationBuilder migrationBuilder)\n        {\n            migrationBuilder.DropIndex(\n                name: \"IX_cs_Page_CorrelationKey\",\n                table: \"cs_Page\");\n\n            migrationBuilder.DropColumn(\n                name: \"CorrelationKey\",\n                table: \"cs_Page\");\n\n            migrationBuilder.DropColumn(\n                name: \"ExternalUrl\",\n                table: \"cs_Page\");\n\n            migrationBuilder.DropColumn(\n                name: \"ShowMenu\",\n                table: \"cs_Page\");\n\n            migrationBuilder.DropColumn(\n                name: \"Publisher\",\n                table: \"cs_ContentProject\");\n\n            migrationBuilder.DropColumn(\n                name: \"PublisherLogoUrl\",\n                table: \"cs_ContentProject\");\n\n            //migrationBuilder.AlterColumn<bool>(\n            //    name: \"ShowPubDate\",\n            //    table: \"cs_Page\",\n            //    nullable: false,\n            //    oldClrType: typeof(bool),\n            //    oldDefaultValue: false)\n            //    .OldAnnotation(\"MySql:ValueGeneratedOnAdd\", true);\n\n            //migrationBuilder.AlterColumn<bool>(\n            //    name: \"ShowLastModified\",\n            //    table: \"cs_Page\",\n            //    nullable: false,\n            //    oldClrType: typeof(bool),\n            //    oldDefaultValue: false)\n            //    .OldAnnotation(\"MySql:ValueGeneratedOnAdd\", true);\n\n            //migrationBuilder.AlterColumn<bool>(\n            //    name: \"ShowHeading\",\n            //    table: \"cs_Page\",\n            //    nullable: false,\n            //    oldClrType: typeof(bool),\n            //    oldDefaultValue: true)\n            //    .OldAnnotation(\"MySql:ValueGeneratedOnAdd\", true);\n\n            //migrationBuilder.AlterColumn<bool>(\n            //    name: \"ShowComments\",\n            //    table: \"cs_Page\",\n            //    nullable: false,\n            //    oldClrType: typeof(bool),\n            //    oldDefaultValue: false)\n            //    .OldAnnotation(\"MySql:ValueGeneratedOnAdd\", true);\n\n            //migrationBuilder.AlterColumn<bool>(\n            //    name: \"ShowCategories\",\n            //    table: \"cs_Page\",\n            //    nullable: false,\n            //    oldClrType: typeof(bool),\n            //    oldDefaultValue: false)\n            //    .OldAnnotation(\"MySql:ValueGeneratedOnAdd\", true);\n\n            //migrationBuilder.AlterColumn<bool>(\n            //    name: \"IsPublished\",\n            //    table: \"cs_Page\",\n            //    nullable: false,\n            //    oldClrType: typeof(bool),\n            //    oldDefaultValue: true)\n            //    .OldAnnotation(\"MySql:ValueGeneratedOnAdd\", true);\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.MySQL/Migrations/20170308205943_changes20170308.Designer.cs",
    "content": "﻿using System;\nusing Microsoft.EntityFrameworkCore;\nusing Microsoft.EntityFrameworkCore.Infrastructure;\nusing Microsoft.EntityFrameworkCore.Metadata;\nusing Microsoft.EntityFrameworkCore.Migrations;\nusing cloudscribe.SimpleContent.Storage.EFCore.MySQL;\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.MySQL.Migrations\n{\n    [DbContext(typeof(SimpleContentDbContext))]\n    [Migration(\"20170308205943_changes20170308\")]\n    partial class changes20170308\n    {\n        protected override void BuildTargetModel(ModelBuilder modelBuilder)\n        {\n            modelBuilder\n                .HasAnnotation(\"ProductVersion\", \"1.1.1\");\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Models.ProjectSettings\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<bool>(\"AddBlogToPagesTree\");\n\n                    b.Property<bool>(\"BlogMenuLinksToNewestPost\");\n\n                    b.Property<string>(\"BlogPageNavComponentVisibility\")\n                        .HasMaxLength(255);\n\n                    b.Property<int>(\"BlogPagePosition\");\n\n                    b.Property<string>(\"BlogPageText\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CdnUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ChannelCategoriesCsv\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ChannelRating\")\n                        .HasMaxLength(100);\n\n                    b.Property<int>(\"ChannelTimeToLive\");\n\n                    b.Property<string>(\"CommentNotificationEmail\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"CopyrightNotice\")\n                        .HasMaxLength(255);\n\n                    b.Property<int>(\"DaysToComment\");\n\n                    b.Property<string>(\"DefaultPageSlug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Description\");\n\n                    b.Property<string>(\"DisqusShortName\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"EmailFromAddress\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Image\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"IncludePubDateInPostUrls\");\n\n                    b.Property<string>(\"LanguageCode\")\n                        .HasMaxLength(10);\n\n                    b.Property<string>(\"LocalMediaVirtualPath\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ManagingEditorEmail\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"ModerateComments\");\n\n                    b.Property<int>(\"PostsPerPage\");\n\n                    b.Property<string>(\"PubDateFormat\")\n                        .HasMaxLength(75);\n\n                    b.Property<string>(\"Publisher\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"PublisherLogoHeight\")\n                        .HasMaxLength(20);\n\n                    b.Property<string>(\"PublisherLogoUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"PublisherLogoWidth\")\n                        .HasMaxLength(20);\n\n                    b.Property<string>(\"RecaptchaPrivateKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RecaptchaPublicKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RemoteFeedProcessorUseAgentFragment\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RemoteFeedUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"ShowTitle\");\n\n                    b.Property<string>(\"SmtpPassword\");\n\n                    b.Property<int>(\"SmtpPort\");\n\n                    b.Property<string>(\"SmtpPreferredEncoding\")\n                        .HasMaxLength(20);\n\n                    b.Property<bool>(\"SmtpRequiresAuth\");\n\n                    b.Property<string>(\"SmtpServer\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"SmtpUseSsl\");\n\n                    b.Property<string>(\"SmtpUser\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"TimeZoneId\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Title\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"UseDefaultPageAsRootNode\");\n\n                    b.Property<bool>(\"UseMetaDescriptionInFeed\");\n\n                    b.Property<string>(\"WebmasterEmail\")\n                        .HasMaxLength(100);\n\n                    b.HasKey(\"Id\");\n\n                    b.ToTable(\"cs_ContentProject\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageCategory\", b =>\n                {\n                    b.Property<string>(\"Value\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.HasKey(\"Value\", \"PageEntityId\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.HasIndex(\"Value\");\n\n                    b.ToTable(\"cs_PageCategory\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"Email\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Ip\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"IsAdmin\");\n\n                    b.Property<bool>(\"IsApproved\");\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<DateTime>(\"PubDate\");\n\n                    b.Property<string>(\"UserAgent\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Website\")\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_PageComment\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ExternalUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"IsPublished\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue(true);\n\n                    b.Property<DateTime>(\"LastModified\");\n\n                    b.Property<bool>(\"MenuOnly\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue(false);\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasMaxLength(500);\n\n                    b.Property<int>(\"PageOrder\");\n\n                    b.Property<string>(\"ParentId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ParentSlug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<DateTime>(\"PubDate\");\n\n                    b.Property<bool>(\"ShowCategories\");\n                    //.ValueGeneratedOnAdd()\n                    //.HasDefaultValue(false);\n\n                    b.Property<bool>(\"ShowComments\");\n                    //.ValueGeneratedOnAdd()\n                    //.HasDefaultValue(false);\n\n                    b.Property<bool>(\"ShowHeading\");\n                    //.ValueGeneratedOnAdd()\n                    //.HasDefaultValue(true);\n\n                    b.Property<bool>(\"ShowLastModified\");\n                    //.ValueGeneratedOnAdd()\n                    //.HasDefaultValue(false);\n\n                    b.Property<bool>(\"ShowMenu\");\n                    //.ValueGeneratedOnAdd()\n                    //.HasDefaultValue(false);\n\n                    b.Property<bool>(\"ShowPubDate\");\n                        //.ValueGeneratedOnAdd()\n                        //.HasDefaultValue(false);\n\n                    b.Property<string>(\"Slug\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ViewRoles\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"ParentId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_Page\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostCategory\", b =>\n                {\n                    b.Property<string>(\"Value\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PostEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.HasKey(\"Value\", \"PostEntityId\");\n\n                    b.HasIndex(\"PostEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.HasIndex(\"Value\");\n\n                    b.ToTable(\"cs_PostCategory\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"Email\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Ip\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"IsAdmin\");\n\n                    b.Property<bool>(\"IsApproved\");\n\n                    b.Property<string>(\"PostEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<DateTime>(\"PubDate\");\n\n                    b.Property<string>(\"UserAgent\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Website\")\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PostEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_PostComment\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"BlogId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<bool>(\"IsPublished\");\n\n                    b.Property<DateTime>(\"LastModified\");\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasMaxLength(500);\n\n                    b.Property<DateTime>(\"PubDate\");\n\n                    b.Property<string>(\"Slug\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"BlogId\");\n\n                    b.HasIndex(\"Slug\");\n\n                    b.ToTable(\"cs_Post\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\")\n                        .WithMany(\"PageComments\")\n                        .HasForeignKey(\"PageEntityId\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\")\n                        .WithMany(\"PostComments\")\n                        .HasForeignKey(\"PostEntityId\");\n                });\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.MySQL/Migrations/20170308205943_changes20170308.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing Microsoft.EntityFrameworkCore.Migrations;\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.MySQL.Migrations\n{\n    public partial class changes20170308 : Migration\n    {\n        protected override void Up(MigrationBuilder migrationBuilder)\n        {\n            migrationBuilder.AddColumn<string>(\n                name: \"DisqusShortName\",\n                table: \"cs_ContentProject\",\n                maxLength: 100,\n                nullable: true);\n\n            migrationBuilder.AddColumn<string>(\n                name: \"PublisherLogoHeight\",\n                table: \"cs_ContentProject\",\n                maxLength: 20,\n                nullable: true);\n\n            migrationBuilder.AddColumn<string>(\n                name: \"PublisherLogoWidth\",\n                table: \"cs_ContentProject\",\n                maxLength: 20,\n                nullable: true);\n        }\n\n        protected override void Down(MigrationBuilder migrationBuilder)\n        {\n            migrationBuilder.DropColumn(\n                name: \"DisqusShortName\",\n                table: \"cs_ContentProject\");\n\n            migrationBuilder.DropColumn(\n                name: \"PublisherLogoHeight\",\n                table: \"cs_ContentProject\");\n\n            migrationBuilder.DropColumn(\n                name: \"PublisherLogoWidth\",\n                table: \"cs_ContentProject\");\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.MySQL/Migrations/20170309130101_changes20170309.Designer.cs",
    "content": "﻿using System;\nusing Microsoft.EntityFrameworkCore;\nusing Microsoft.EntityFrameworkCore.Infrastructure;\nusing Microsoft.EntityFrameworkCore.Metadata;\nusing Microsoft.EntityFrameworkCore.Migrations;\nusing cloudscribe.SimpleContent.Storage.EFCore.MySQL;\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.MySQL.Migrations\n{\n    [DbContext(typeof(SimpleContentDbContext))]\n    [Migration(\"20170309130101_changes20170309\")]\n    partial class changes20170309\n    {\n        protected override void BuildTargetModel(ModelBuilder modelBuilder)\n        {\n            modelBuilder\n                .HasAnnotation(\"ProductVersion\", \"1.1.1\");\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Models.ProjectSettings\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<bool>(\"AddBlogToPagesTree\");\n\n                    b.Property<bool>(\"BlogMenuLinksToNewestPost\");\n\n                    b.Property<string>(\"BlogPageNavComponentVisibility\")\n                        .HasMaxLength(255);\n\n                    b.Property<int>(\"BlogPagePosition\");\n\n                    b.Property<string>(\"BlogPageText\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CdnUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ChannelCategoriesCsv\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ChannelRating\")\n                        .HasMaxLength(100);\n\n                    b.Property<int>(\"ChannelTimeToLive\");\n\n                    b.Property<string>(\"CommentNotificationEmail\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"CopyrightNotice\")\n                        .HasMaxLength(255);\n\n                    b.Property<int>(\"DaysToComment\");\n\n                    b.Property<string>(\"DefaultPageSlug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Description\");\n\n                    b.Property<string>(\"DisqusShortName\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"EmailFromAddress\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Image\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"IncludePubDateInPostUrls\");\n\n                    b.Property<string>(\"LanguageCode\")\n                        .HasMaxLength(10);\n\n                    b.Property<string>(\"LocalMediaVirtualPath\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ManagingEditorEmail\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"ModerateComments\");\n\n                    b.Property<int>(\"PostsPerPage\");\n\n                    b.Property<string>(\"PubDateFormat\")\n                        .HasMaxLength(75);\n\n                    b.Property<string>(\"Publisher\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"PublisherEntityType\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PublisherLogoHeight\")\n                        .HasMaxLength(20);\n\n                    b.Property<string>(\"PublisherLogoUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"PublisherLogoWidth\")\n                        .HasMaxLength(20);\n\n                    b.Property<string>(\"RecaptchaPrivateKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RecaptchaPublicKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RemoteFeedProcessorUseAgentFragment\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RemoteFeedUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"ShowTitle\");\n\n                    b.Property<string>(\"SmtpPassword\");\n\n                    b.Property<int>(\"SmtpPort\");\n\n                    b.Property<string>(\"SmtpPreferredEncoding\")\n                        .HasMaxLength(20);\n\n                    b.Property<bool>(\"SmtpRequiresAuth\");\n\n                    b.Property<string>(\"SmtpServer\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"SmtpUseSsl\");\n\n                    b.Property<string>(\"SmtpUser\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"TimeZoneId\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Title\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"UseDefaultPageAsRootNode\");\n\n                    b.Property<bool>(\"UseMetaDescriptionInFeed\");\n\n                    b.Property<string>(\"WebmasterEmail\")\n                        .HasMaxLength(100);\n\n                    b.HasKey(\"Id\");\n\n                    b.ToTable(\"cs_ContentProject\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageCategory\", b =>\n                {\n                    b.Property<string>(\"Value\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.HasKey(\"Value\", \"PageEntityId\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.HasIndex(\"Value\");\n\n                    b.ToTable(\"cs_PageCategory\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"Email\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Ip\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"IsAdmin\");\n\n                    b.Property<bool>(\"IsApproved\");\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<DateTime>(\"PubDate\");\n\n                    b.Property<string>(\"UserAgent\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Website\")\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_PageComment\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ExternalUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"IsPublished\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue(true);\n\n                    b.Property<DateTime>(\"LastModified\");\n\n                    b.Property<bool>(\"MenuOnly\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue(false);\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasMaxLength(500);\n\n                    b.Property<int>(\"PageOrder\");\n\n                    b.Property<string>(\"ParentId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ParentSlug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<DateTime>(\"PubDate\");\n\n                    b.Property<bool>(\"ShowCategories\");\n                    //.ValueGeneratedOnAdd()\n                    //.HasDefaultValue(false);\n\n                    b.Property<bool>(\"ShowComments\");\n                    //.ValueGeneratedOnAdd()\n                    //.HasDefaultValue(false);\n\n                    b.Property<bool>(\"ShowHeading\");\n                    //.ValueGeneratedOnAdd()\n                    //.HasDefaultValue(true);\n\n                    b.Property<bool>(\"ShowLastModified\");\n                    //.ValueGeneratedOnAdd()\n                    //.HasDefaultValue(false);\n\n                    b.Property<bool>(\"ShowMenu\");\n                    //.ValueGeneratedOnAdd()\n                    //.HasDefaultValue(false);\n\n                    b.Property<bool>(\"ShowPubDate\");\n                        //.ValueGeneratedOnAdd()\n                        //.HasDefaultValue(false);\n\n                    b.Property<string>(\"Slug\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ViewRoles\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"ParentId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_Page\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostCategory\", b =>\n                {\n                    b.Property<string>(\"Value\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PostEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.HasKey(\"Value\", \"PostEntityId\");\n\n                    b.HasIndex(\"PostEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.HasIndex(\"Value\");\n\n                    b.ToTable(\"cs_PostCategory\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"Email\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Ip\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"IsAdmin\");\n\n                    b.Property<bool>(\"IsApproved\");\n\n                    b.Property<string>(\"PostEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<DateTime>(\"PubDate\");\n\n                    b.Property<string>(\"UserAgent\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Website\")\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PostEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_PostComment\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"BlogId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<bool>(\"IsPublished\");\n\n                    b.Property<DateTime>(\"LastModified\");\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasMaxLength(500);\n\n                    b.Property<DateTime>(\"PubDate\");\n\n                    b.Property<string>(\"Slug\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"BlogId\");\n\n                    b.HasIndex(\"Slug\");\n\n                    b.ToTable(\"cs_Post\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\")\n                        .WithMany(\"PageComments\")\n                        .HasForeignKey(\"PageEntityId\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\")\n                        .WithMany(\"PostComments\")\n                        .HasForeignKey(\"PostEntityId\");\n                });\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.MySQL/Migrations/20170309130101_changes20170309.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing Microsoft.EntityFrameworkCore.Migrations;\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.MySQL.Migrations\n{\n    public partial class changes20170309 : Migration\n    {\n        protected override void Up(MigrationBuilder migrationBuilder)\n        {\n            migrationBuilder.AddColumn<string>(\n                name: \"PublisherEntityType\",\n                table: \"cs_ContentProject\",\n                maxLength: 50,\n                nullable: true);\n        }\n\n        protected override void Down(MigrationBuilder migrationBuilder)\n        {\n            migrationBuilder.DropColumn(\n                name: \"PublisherEntityType\",\n                table: \"cs_ContentProject\");\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.MySQL/Migrations/20170310190111_changes20170310.Designer.cs",
    "content": "﻿using System;\nusing Microsoft.EntityFrameworkCore;\nusing Microsoft.EntityFrameworkCore.Infrastructure;\nusing Microsoft.EntityFrameworkCore.Metadata;\nusing Microsoft.EntityFrameworkCore.Migrations;\nusing cloudscribe.SimpleContent.Storage.EFCore.MySQL;\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.MySQL.Migrations\n{\n    [DbContext(typeof(SimpleContentDbContext))]\n    [Migration(\"20170310190111_changes20170310\")]\n    partial class changes20170310\n    {\n        protected override void BuildTargetModel(ModelBuilder modelBuilder)\n        {\n            modelBuilder\n                .HasAnnotation(\"ProductVersion\", \"1.1.1\");\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Models.ProjectSettings\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<bool>(\"AddBlogToPagesTree\");\n\n                    b.Property<bool>(\"BlogMenuLinksToNewestPost\");\n\n                    b.Property<string>(\"BlogPageNavComponentVisibility\")\n                        .HasMaxLength(255);\n\n                    b.Property<int>(\"BlogPagePosition\");\n\n                    b.Property<string>(\"BlogPageText\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CdnUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ChannelCategoriesCsv\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ChannelRating\")\n                        .HasMaxLength(100);\n\n                    b.Property<int>(\"ChannelTimeToLive\");\n\n                    b.Property<string>(\"CommentNotificationEmail\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"CopyrightNotice\")\n                        .HasMaxLength(255);\n\n                    b.Property<int>(\"DaysToComment\");\n\n                    b.Property<string>(\"DefaultPageSlug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Description\");\n\n                    b.Property<string>(\"DisqusShortName\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"EmailFromAddress\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Image\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"IncludePubDateInPostUrls\");\n\n                    b.Property<string>(\"LanguageCode\")\n                        .HasMaxLength(10);\n\n                    b.Property<string>(\"LocalMediaVirtualPath\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ManagingEditorEmail\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"ModerateComments\");\n\n                    b.Property<int>(\"PostsPerPage\");\n\n                    b.Property<string>(\"PubDateFormat\")\n                        .HasMaxLength(75);\n\n                    b.Property<string>(\"Publisher\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"PublisherEntityType\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PublisherLogoHeight\")\n                        .HasMaxLength(20);\n\n                    b.Property<string>(\"PublisherLogoUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"PublisherLogoWidth\")\n                        .HasMaxLength(20);\n\n                    b.Property<string>(\"RecaptchaPrivateKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RecaptchaPublicKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RemoteFeedProcessorUseAgentFragment\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RemoteFeedUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"ShowRecentPostsOnDefaultPage\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue(false);\n\n                    b.Property<bool>(\"ShowTitle\");\n\n                    b.Property<string>(\"SmtpPassword\");\n\n                    b.Property<int>(\"SmtpPort\");\n\n                    b.Property<string>(\"SmtpPreferredEncoding\")\n                        .HasMaxLength(20);\n\n                    b.Property<bool>(\"SmtpRequiresAuth\");\n\n                    b.Property<string>(\"SmtpServer\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"SmtpUseSsl\");\n\n                    b.Property<string>(\"SmtpUser\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"TimeZoneId\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Title\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"UseDefaultPageAsRootNode\");\n\n                    b.Property<bool>(\"UseMetaDescriptionInFeed\");\n\n                    b.Property<string>(\"WebmasterEmail\")\n                        .HasMaxLength(100);\n\n                    b.HasKey(\"Id\");\n\n                    b.ToTable(\"cs_ContentProject\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageCategory\", b =>\n                {\n                    b.Property<string>(\"Value\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.HasKey(\"Value\", \"PageEntityId\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.HasIndex(\"Value\");\n\n                    b.ToTable(\"cs_PageCategory\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"Email\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Ip\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"IsAdmin\");\n\n                    b.Property<bool>(\"IsApproved\");\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<DateTime>(\"PubDate\");\n\n                    b.Property<string>(\"UserAgent\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Website\")\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_PageComment\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ExternalUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"IsPublished\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue(true);\n\n                    b.Property<DateTime>(\"LastModified\");\n\n                    b.Property<bool>(\"MenuOnly\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue(false);\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasMaxLength(500);\n\n                    b.Property<int>(\"PageOrder\");\n\n                    b.Property<string>(\"ParentId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ParentSlug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<DateTime>(\"PubDate\");\n\n                    b.Property<bool>(\"ShowCategories\");\n                    //.ValueGeneratedOnAdd()\n                    //.HasDefaultValue(false);\n\n                    b.Property<bool>(\"ShowComments\");\n                    //.ValueGeneratedOnAdd()\n                    //.HasDefaultValue(false);\n\n                    b.Property<bool>(\"ShowHeading\");\n                    //.ValueGeneratedOnAdd()\n                    //.HasDefaultValue(true);\n\n                    b.Property<bool>(\"ShowLastModified\");\n                    //.ValueGeneratedOnAdd()\n                    //.HasDefaultValue(false);\n\n                    b.Property<bool>(\"ShowMenu\");\n                    //.ValueGeneratedOnAdd()\n                    //.HasDefaultValue(false);\n\n                    b.Property<bool>(\"ShowPubDate\");\n                        //.ValueGeneratedOnAdd()\n                        //.HasDefaultValue(false);\n\n                    b.Property<string>(\"Slug\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ViewRoles\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"ParentId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_Page\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostCategory\", b =>\n                {\n                    b.Property<string>(\"Value\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PostEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.HasKey(\"Value\", \"PostEntityId\");\n\n                    b.HasIndex(\"PostEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.HasIndex(\"Value\");\n\n                    b.ToTable(\"cs_PostCategory\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"Email\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Ip\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"IsAdmin\");\n\n                    b.Property<bool>(\"IsApproved\");\n\n                    b.Property<string>(\"PostEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<DateTime>(\"PubDate\");\n\n                    b.Property<string>(\"UserAgent\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Website\")\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PostEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_PostComment\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"BlogId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"IsPublished\");\n\n                    b.Property<DateTime>(\"LastModified\");\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasMaxLength(500);\n\n                    b.Property<DateTime>(\"PubDate\");\n\n                    b.Property<string>(\"Slug\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"BlogId\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"Slug\");\n\n                    b.ToTable(\"cs_Post\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\")\n                        .WithMany(\"PageComments\")\n                        .HasForeignKey(\"PageEntityId\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\")\n                        .WithMany(\"PostComments\")\n                        .HasForeignKey(\"PostEntityId\");\n                });\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.MySQL/Migrations/20170310190111_changes20170310.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing Microsoft.EntityFrameworkCore.Migrations;\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.MySQL.Migrations\n{\n    public partial class changes20170310 : Migration\n    {\n        protected override void Up(MigrationBuilder migrationBuilder)\n        {\n            migrationBuilder.AddColumn<string>(\n                name: \"CorrelationKey\",\n                table: \"cs_Post\",\n                maxLength: 255,\n                nullable: true);\n\n            migrationBuilder.AddColumn<bool>(\n                name: \"ShowRecentPostsOnDefaultPage\",\n                table: \"cs_ContentProject\",\n                nullable: false,\n                defaultValue: false)\n                .Annotation(\"MySql:ValueGeneratedOnAdd\", true);\n\n            migrationBuilder.CreateIndex(\n                name: \"IX_cs_Post_CorrelationKey\",\n                table: \"cs_Post\",\n                column: \"CorrelationKey\");\n        }\n\n        protected override void Down(MigrationBuilder migrationBuilder)\n        {\n            migrationBuilder.DropIndex(\n                name: \"IX_cs_Post_CorrelationKey\",\n                table: \"cs_Post\");\n\n            migrationBuilder.DropColumn(\n                name: \"CorrelationKey\",\n                table: \"cs_Post\");\n\n            migrationBuilder.DropColumn(\n                name: \"ShowRecentPostsOnDefaultPage\",\n                table: \"cs_ContentProject\");\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.MySQL/Migrations/20170418142722_changes20170417.Designer.cs",
    "content": "﻿using System;\nusing Microsoft.EntityFrameworkCore;\nusing Microsoft.EntityFrameworkCore.Infrastructure;\nusing Microsoft.EntityFrameworkCore.Metadata;\nusing Microsoft.EntityFrameworkCore.Migrations;\nusing cloudscribe.SimpleContent.Storage.EFCore.MySQL;\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.MySQL.Migrations\n{\n    [DbContext(typeof(SimpleContentDbContext))]\n    [Migration(\"20170418142722_changes20170417\")]\n    partial class changes20170417\n    {\n        protected override void BuildTargetModel(ModelBuilder modelBuilder)\n        {\n            modelBuilder\n                .HasAnnotation(\"ProductVersion\", \"1.1.1\");\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Models.ProjectSettings\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<bool>(\"AddBlogToPagesTree\");\n\n                    b.Property<bool>(\"BlogMenuLinksToNewestPost\");\n\n                    b.Property<string>(\"BlogPageNavComponentVisibility\")\n                        .HasMaxLength(255);\n\n                    b.Property<int>(\"BlogPagePosition\");\n\n                    b.Property<string>(\"BlogPageText\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CdnUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ChannelCategoriesCsv\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ChannelRating\")\n                        .HasMaxLength(100);\n\n                    b.Property<int>(\"ChannelTimeToLive\");\n\n                    b.Property<string>(\"CommentNotificationEmail\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"CopyrightNotice\")\n                        .HasMaxLength(255);\n\n                    b.Property<int>(\"DaysToComment\");\n\n                    b.Property<string>(\"DefaultPageSlug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Description\");\n\n                    b.Property<string>(\"DisqusShortName\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"EmailFromAddress\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Image\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"IncludePubDateInPostUrls\");\n\n                    b.Property<string>(\"LanguageCode\")\n                        .HasMaxLength(10);\n\n                    b.Property<string>(\"LocalMediaVirtualPath\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ManagingEditorEmail\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"ModerateComments\");\n\n                    b.Property<int>(\"PostsPerPage\");\n\n                    b.Property<string>(\"PubDateFormat\")\n                        .HasMaxLength(75);\n\n                    b.Property<string>(\"Publisher\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"PublisherEntityType\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PublisherLogoHeight\")\n                        .HasMaxLength(20);\n\n                    b.Property<string>(\"PublisherLogoUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"PublisherLogoWidth\")\n                        .HasMaxLength(20);\n\n                    b.Property<string>(\"RecaptchaPrivateKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RecaptchaPublicKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RemoteFeedProcessorUseAgentFragment\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RemoteFeedUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"ShowRecentPostsOnDefaultPage\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue(false);\n\n                    b.Property<bool>(\"ShowTitle\");\n\n                    b.Property<string>(\"SmtpPassword\");\n\n                    b.Property<int>(\"SmtpPort\");\n\n                    b.Property<string>(\"SmtpPreferredEncoding\")\n                        .HasMaxLength(20);\n\n                    b.Property<bool>(\"SmtpRequiresAuth\");\n\n                    b.Property<string>(\"SmtpServer\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"SmtpUseSsl\");\n\n                    b.Property<string>(\"SmtpUser\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"TimeZoneId\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Title\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"UseDefaultPageAsRootNode\");\n\n                    b.Property<bool>(\"UseMetaDescriptionInFeed\");\n\n                    b.Property<string>(\"WebmasterEmail\")\n                        .HasMaxLength(100);\n\n                    b.HasKey(\"Id\");\n\n                    b.ToTable(\"cs_ContentProject\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageCategory\", b =>\n                {\n                    b.Property<string>(\"Value\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.HasKey(\"Value\", \"PageEntityId\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.HasIndex(\"Value\");\n\n                    b.ToTable(\"cs_PageCategory\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"Email\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Ip\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"IsAdmin\");\n\n                    b.Property<bool>(\"IsApproved\");\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<DateTime>(\"PubDate\");\n\n                    b.Property<string>(\"UserAgent\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Website\")\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_PageComment\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ExternalUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"IsPublished\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue(true);\n\n                    b.Property<DateTime>(\"LastModified\");\n\n                    b.Property<bool>(\"MenuOnly\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue(false);\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasMaxLength(500);\n\n                    b.Property<int>(\"PageOrder\");\n\n                    b.Property<string>(\"ParentId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ParentSlug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<DateTime>(\"PubDate\");\n\n                    b.Property<bool>(\"ShowCategories\");\n                    //.ValueGeneratedOnAdd()\n                    //.HasDefaultValue(false);\n\n                    b.Property<bool>(\"ShowComments\");\n                    //.ValueGeneratedOnAdd()\n                    //.HasDefaultValue(false);\n\n                    b.Property<bool>(\"ShowHeading\");\n                    //.ValueGeneratedOnAdd()\n                    //.HasDefaultValue(true);\n\n                    b.Property<bool>(\"ShowLastModified\");\n                    //.ValueGeneratedOnAdd()\n                    //.HasDefaultValue(false);\n\n                    b.Property<bool>(\"ShowMenu\");\n                    //.ValueGeneratedOnAdd()\n                    //.HasDefaultValue(false);\n\n                    b.Property<bool>(\"ShowPubDate\");\n                        //.ValueGeneratedOnAdd()\n                        //.HasDefaultValue(false);\n\n                    b.Property<string>(\"Slug\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ViewRoles\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"ParentId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_Page\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageResourceEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Environment\")\n                        .IsRequired()\n                        .HasMaxLength(15);\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<int>(\"Sort\");\n\n                    b.Property<string>(\"Type\")\n                        .IsRequired()\n                        .HasMaxLength(10);\n\n                    b.Property<string>(\"Url\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.ToTable(\"cs_PageResource\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostCategory\", b =>\n                {\n                    b.Property<string>(\"Value\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PostEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.HasKey(\"Value\", \"PostEntityId\");\n\n                    b.HasIndex(\"PostEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.HasIndex(\"Value\");\n\n                    b.ToTable(\"cs_PostCategory\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"Email\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Ip\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"IsAdmin\");\n\n                    b.Property<bool>(\"IsApproved\");\n\n                    b.Property<string>(\"PostEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<DateTime>(\"PubDate\");\n\n                    b.Property<string>(\"UserAgent\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Website\")\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PostEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_PostComment\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"BlogId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"IsPublished\");\n\n                    b.Property<DateTime>(\"LastModified\");\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasMaxLength(500);\n\n                    b.Property<DateTime>(\"PubDate\");\n\n                    b.Property<string>(\"Slug\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"BlogId\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"Slug\");\n\n                    b.ToTable(\"cs_Post\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\")\n                        .WithMany(\"PageComments\")\n                        .HasForeignKey(\"PageEntityId\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageResourceEntity\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\")\n                        .WithMany(\"PageResources\")\n                        .HasForeignKey(\"PageEntityId\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\")\n                        .WithMany(\"PostComments\")\n                        .HasForeignKey(\"PostEntityId\");\n                });\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.MySQL/Migrations/20170418142722_changes20170417.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing Microsoft.EntityFrameworkCore.Migrations;\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.MySQL.Migrations\n{\n    public partial class changes20170417 : Migration\n    {\n        protected override void Up(MigrationBuilder migrationBuilder)\n        {\n            migrationBuilder.CreateTable(\n                name: \"cs_PageResource\",\n                columns: table => new\n                {\n                    Id = table.Column<string>(maxLength: 36, nullable: false)\n                        .Annotation(\"MySql:ValueGeneratedOnAdd\", true),\n                    Environment = table.Column<string>(maxLength: 15, nullable: false),\n                    PageEntityId = table.Column<string>(maxLength: 36, nullable: true),\n                    Sort = table.Column<int>(nullable: false),\n                    Type = table.Column<string>(maxLength: 10, nullable: false),\n                    Url = table.Column<string>(maxLength: 255, nullable: false)\n                },\n                constraints: table =>\n                {\n                    table.PrimaryKey(\"PK_cs_PageResource\", x => x.Id);\n                    table.ForeignKey(\n                        name: \"FK_cs_PageResource_cs_Page_PageEntityId\",\n                        column: x => x.PageEntityId,\n                        principalTable: \"cs_Page\",\n                        principalColumn: \"Id\",\n                        onDelete: ReferentialAction.Restrict);\n                });\n\n            migrationBuilder.CreateIndex(\n                name: \"IX_cs_PageResource_PageEntityId\",\n                table: \"cs_PageResource\",\n                column: \"PageEntityId\");\n        }\n\n        protected override void Down(MigrationBuilder migrationBuilder)\n        {\n            migrationBuilder.DropTable(\n                name: \"cs_PageResource\");\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.MySQL/Migrations/20170514135058_changes20170514.Designer.cs",
    "content": "﻿using System;\nusing Microsoft.EntityFrameworkCore;\nusing Microsoft.EntityFrameworkCore.Infrastructure;\nusing Microsoft.EntityFrameworkCore.Metadata;\nusing Microsoft.EntityFrameworkCore.Migrations;\nusing cloudscribe.SimpleContent.Storage.EFCore.MySQL;\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.MySQL.Migrations\n{\n    [DbContext(typeof(SimpleContentDbContext))]\n    [Migration(\"20170514135058_changes20170514\")]\n    partial class changes20170514\n    {\n        protected override void BuildTargetModel(ModelBuilder modelBuilder)\n        {\n            modelBuilder\n                .HasAnnotation(\"ProductVersion\", \"1.1.2\");\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Models.ProjectSettings\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<bool>(\"AddBlogToPagesTree\");\n\n                    b.Property<bool>(\"BlogMenuLinksToNewestPost\");\n\n                    b.Property<string>(\"BlogPageNavComponentVisibility\")\n                        .HasMaxLength(255);\n\n                    b.Property<int>(\"BlogPagePosition\");\n\n                    b.Property<string>(\"BlogPageText\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CdnUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ChannelCategoriesCsv\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ChannelRating\")\n                        .HasMaxLength(100);\n\n                    b.Property<int>(\"ChannelTimeToLive\");\n\n                    b.Property<string>(\"CommentNotificationEmail\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"CopyrightNotice\")\n                        .HasMaxLength(255);\n\n                    b.Property<int>(\"DaysToComment\");\n\n                    b.Property<string>(\"DefaultPageSlug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Description\");\n\n                    b.Property<string>(\"DisqusShortName\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"EmailFromAddress\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Image\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"IncludePubDateInPostUrls\");\n\n                    b.Property<string>(\"LanguageCode\")\n                        .HasMaxLength(10);\n\n                    b.Property<string>(\"LocalMediaVirtualPath\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ManagingEditorEmail\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"ModerateComments\");\n\n                    b.Property<int>(\"PostsPerPage\");\n\n                    b.Property<string>(\"PubDateFormat\")\n                        .HasMaxLength(75);\n\n                    b.Property<string>(\"Publisher\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"PublisherEntityType\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PublisherLogoHeight\")\n                        .HasMaxLength(20);\n\n                    b.Property<string>(\"PublisherLogoUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"PublisherLogoWidth\")\n                        .HasMaxLength(20);\n\n                    b.Property<string>(\"RecaptchaPrivateKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RecaptchaPublicKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RemoteFeedProcessorUseAgentFragment\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RemoteFeedUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"ShowRecentPostsOnDefaultPage\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue(false);\n\n                    b.Property<bool>(\"ShowTitle\");\n\n                    b.Property<string>(\"SmtpPassword\");\n\n                    b.Property<int>(\"SmtpPort\");\n\n                    b.Property<string>(\"SmtpPreferredEncoding\")\n                        .HasMaxLength(20);\n\n                    b.Property<bool>(\"SmtpRequiresAuth\");\n\n                    b.Property<string>(\"SmtpServer\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"SmtpUseSsl\");\n\n                    b.Property<string>(\"SmtpUser\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"TimeZoneId\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Title\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"UseDefaultPageAsRootNode\");\n\n                    b.Property<bool>(\"UseMetaDescriptionInFeed\");\n\n                    b.Property<string>(\"WebmasterEmail\")\n                        .HasMaxLength(100);\n\n                    b.HasKey(\"Id\");\n\n                    b.ToTable(\"cs_ContentProject\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageCategory\", b =>\n                {\n                    b.Property<string>(\"Value\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.HasKey(\"Value\", \"PageEntityId\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.HasIndex(\"Value\");\n\n                    b.ToTable(\"cs_PageCategory\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"Email\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Ip\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"IsAdmin\");\n\n                    b.Property<bool>(\"IsApproved\");\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<DateTime>(\"PubDate\");\n\n                    b.Property<string>(\"UserAgent\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Website\")\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_PageComment\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ExternalUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"IsPublished\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue(true);\n\n                    b.Property<DateTime>(\"LastModified\");\n\n                    b.Property<string>(\"MenuFilters\")\n                        .HasMaxLength(500);\n\n                    b.Property<bool>(\"MenuOnly\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue(false);\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasMaxLength(500);\n\n                    b.Property<int>(\"PageOrder\");\n\n                    b.Property<string>(\"ParentId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ParentSlug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<DateTime>(\"PubDate\");\n\n                    b.Property<bool>(\"ShowCategories\");\n                    //.ValueGeneratedOnAdd()\n                    //.HasDefaultValue(false);\n\n                    b.Property<bool>(\"ShowComments\");\n                    //.ValueGeneratedOnAdd()\n                    //.HasDefaultValue(false);\n\n                    b.Property<bool>(\"ShowHeading\");\n                    //.ValueGeneratedOnAdd()\n                    //.HasDefaultValue(true);\n\n                    b.Property<bool>(\"ShowLastModified\");\n                    //.ValueGeneratedOnAdd()\n                    //.HasDefaultValue(false);\n\n                    b.Property<bool>(\"ShowMenu\");\n                    //.ValueGeneratedOnAdd()\n                    //.HasDefaultValue(false);\n\n                    b.Property<bool>(\"ShowPubDate\");\n                        //.ValueGeneratedOnAdd()\n                        //.HasDefaultValue(false);\n\n                    b.Property<string>(\"Slug\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ViewRoles\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"ParentId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_Page\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageResourceEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Environment\")\n                        .IsRequired()\n                        .HasMaxLength(15);\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<int>(\"Sort\");\n\n                    b.Property<string>(\"Type\")\n                        .IsRequired()\n                        .HasMaxLength(10);\n\n                    b.Property<string>(\"Url\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.ToTable(\"cs_PageResource\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostCategory\", b =>\n                {\n                    b.Property<string>(\"Value\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PostEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.HasKey(\"Value\", \"PostEntityId\");\n\n                    b.HasIndex(\"PostEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.HasIndex(\"Value\");\n\n                    b.ToTable(\"cs_PostCategory\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"Email\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Ip\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"IsAdmin\");\n\n                    b.Property<bool>(\"IsApproved\");\n\n                    b.Property<string>(\"PostEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<DateTime>(\"PubDate\");\n\n                    b.Property<string>(\"UserAgent\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Website\")\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PostEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_PostComment\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"BlogId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"IsPublished\");\n\n                    b.Property<DateTime>(\"LastModified\");\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasMaxLength(500);\n\n                    b.Property<DateTime>(\"PubDate\");\n\n                    b.Property<string>(\"Slug\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"BlogId\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"Slug\");\n\n                    b.ToTable(\"cs_Post\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\")\n                        .WithMany(\"PageComments\")\n                        .HasForeignKey(\"PageEntityId\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageResourceEntity\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\")\n                        .WithMany(\"PageResources\")\n                        .HasForeignKey(\"PageEntityId\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\")\n                        .WithMany(\"PostComments\")\n                        .HasForeignKey(\"PostEntityId\");\n                });\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.MySQL/Migrations/20170514135058_changes20170514.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing Microsoft.EntityFrameworkCore.Migrations;\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.MySQL.Migrations\n{\n    public partial class changes20170514 : Migration\n    {\n        protected override void Up(MigrationBuilder migrationBuilder)\n        {\n            migrationBuilder.AddColumn<string>(\n                name: \"MenuFilters\",\n                table: \"cs_Page\",\n                maxLength: 500,\n                nullable: true);\n        }\n\n        protected override void Down(MigrationBuilder migrationBuilder)\n        {\n            migrationBuilder.DropColumn(\n                name: \"MenuFilters\",\n                table: \"cs_Page\");\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.MySQL/Migrations/20170724195817_changes20170724.Designer.cs",
    "content": "﻿using System;\nusing Microsoft.EntityFrameworkCore;\nusing Microsoft.EntityFrameworkCore.Infrastructure;\nusing Microsoft.EntityFrameworkCore.Metadata;\nusing Microsoft.EntityFrameworkCore.Migrations;\nusing cloudscribe.SimpleContent.Storage.EFCore.MySQL;\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.MySQL.Migrations\n{\n    [DbContext(typeof(SimpleContentDbContext))]\n    [Migration(\"20170724195817_changes20170724\")]\n    partial class changes20170724\n    {\n        protected override void BuildTargetModel(ModelBuilder modelBuilder)\n        {\n            modelBuilder\n                .HasAnnotation(\"ProductVersion\", \"1.1.2\");\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Models.ProjectSettings\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<bool>(\"AddBlogToPagesTree\");\n\n                    b.Property<bool>(\"BlogMenuLinksToNewestPost\");\n\n                    b.Property<string>(\"BlogPageNavComponentVisibility\")\n                        .HasMaxLength(255);\n\n                    b.Property<int>(\"BlogPagePosition\");\n\n                    b.Property<string>(\"BlogPageText\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CdnUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ChannelCategoriesCsv\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ChannelRating\")\n                        .HasMaxLength(100);\n\n                    b.Property<int>(\"ChannelTimeToLive\");\n\n                    b.Property<string>(\"CommentNotificationEmail\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"CopyrightNotice\")\n                        .HasMaxLength(255);\n\n                    b.Property<int>(\"DaysToComment\");\n\n                    b.Property<string>(\"DefaultPageSlug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Description\");\n\n                    b.Property<string>(\"DisqusShortName\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"EmailFromAddress\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Image\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"IncludePubDateInPostUrls\");\n\n                    b.Property<string>(\"LanguageCode\")\n                        .HasMaxLength(10);\n\n                    b.Property<string>(\"LocalMediaVirtualPath\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ManagingEditorEmail\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"ModerateComments\");\n\n                    b.Property<int>(\"PostsPerPage\");\n\n                    b.Property<string>(\"PubDateFormat\")\n                        .HasMaxLength(75);\n\n                    b.Property<string>(\"Publisher\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"PublisherEntityType\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PublisherLogoHeight\")\n                        .HasMaxLength(20);\n\n                    b.Property<string>(\"PublisherLogoUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"PublisherLogoWidth\")\n                        .HasMaxLength(20);\n\n                    b.Property<string>(\"RecaptchaPrivateKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RecaptchaPublicKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RemoteFeedProcessorUseAgentFragment\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RemoteFeedUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"ShowRecentPostsOnDefaultPage\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue(false);\n\n                    b.Property<bool>(\"ShowTitle\");\n\n                    b.Property<string>(\"SmtpPassword\");\n\n                    b.Property<int>(\"SmtpPort\");\n\n                    b.Property<string>(\"SmtpPreferredEncoding\")\n                        .HasMaxLength(20);\n\n                    b.Property<bool>(\"SmtpRequiresAuth\");\n\n                    b.Property<string>(\"SmtpServer\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"SmtpUseSsl\");\n\n                    b.Property<string>(\"SmtpUser\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"TimeZoneId\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Title\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"UseDefaultPageAsRootNode\");\n\n                    b.Property<bool>(\"UseMetaDescriptionInFeed\");\n\n                    b.Property<string>(\"WebmasterEmail\")\n                        .HasMaxLength(100);\n\n                    b.HasKey(\"Id\");\n\n                    b.ToTable(\"cs_ContentProject\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageCategory\", b =>\n                {\n                    b.Property<string>(\"Value\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.HasKey(\"Value\", \"PageEntityId\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.HasIndex(\"Value\");\n\n                    b.ToTable(\"cs_PageCategory\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"Email\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Ip\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"IsAdmin\");\n\n                    b.Property<bool>(\"IsApproved\");\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<DateTime>(\"PubDate\");\n\n                    b.Property<string>(\"UserAgent\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Website\")\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_PageComment\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ExternalUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"IsPublished\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue(true);\n\n                    b.Property<DateTime>(\"LastModified\");\n\n                    b.Property<string>(\"MenuFilters\")\n                        .HasMaxLength(500);\n\n                    b.Property<bool>(\"MenuOnly\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue(false);\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"MetaHtml\");\n\n                    b.Property<string>(\"MetaJson\");\n\n                    b.Property<int>(\"PageOrder\");\n\n                    b.Property<string>(\"ParentId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ParentSlug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<DateTime>(\"PubDate\");\n\n                    b.Property<bool>(\"ShowCategories\");\n                    //.ValueGeneratedOnAdd()\n                    //.HasDefaultValue(false);\n\n                    b.Property<bool>(\"ShowComments\");\n                    //.ValueGeneratedOnAdd()\n                    //.HasDefaultValue(false);\n\n                    b.Property<bool>(\"ShowHeading\");\n                    //.ValueGeneratedOnAdd()\n                    //.HasDefaultValue(true);\n\n                    b.Property<bool>(\"ShowLastModified\");\n                    //.ValueGeneratedOnAdd()\n                    //.HasDefaultValue(false);\n\n                    b.Property<bool>(\"ShowMenu\");\n                    //.ValueGeneratedOnAdd()\n                    //.HasDefaultValue(false);\n\n                    b.Property<bool>(\"ShowPubDate\");\n                        //.ValueGeneratedOnAdd()\n                        //.HasDefaultValue(false);\n\n                    b.Property<string>(\"Slug\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ViewRoles\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"ParentId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_Page\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageResourceEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Environment\")\n                        .IsRequired()\n                        .HasMaxLength(15);\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<int>(\"Sort\");\n\n                    b.Property<string>(\"Type\")\n                        .IsRequired()\n                        .HasMaxLength(10);\n\n                    b.Property<string>(\"Url\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.ToTable(\"cs_PageResource\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostCategory\", b =>\n                {\n                    b.Property<string>(\"Value\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PostEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.HasKey(\"Value\", \"PostEntityId\");\n\n                    b.HasIndex(\"PostEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.HasIndex(\"Value\");\n\n                    b.ToTable(\"cs_PostCategory\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"Email\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Ip\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"IsAdmin\");\n\n                    b.Property<bool>(\"IsApproved\");\n\n                    b.Property<string>(\"PostEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<DateTime>(\"PubDate\");\n\n                    b.Property<string>(\"UserAgent\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Website\")\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PostEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_PostComment\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"BlogId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"IsPublished\");\n\n                    b.Property<DateTime>(\"LastModified\");\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"MetaHtml\");\n\n                    b.Property<string>(\"MetaJson\");\n\n                    b.Property<DateTime>(\"PubDate\");\n\n                    b.Property<string>(\"Slug\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"BlogId\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"Slug\");\n\n                    b.ToTable(\"cs_Post\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\")\n                        .WithMany(\"PageComments\")\n                        .HasForeignKey(\"PageEntityId\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageResourceEntity\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\")\n                        .WithMany(\"PageResources\")\n                        .HasForeignKey(\"PageEntityId\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\")\n                        .WithMany(\"PostComments\")\n                        .HasForeignKey(\"PostEntityId\");\n                });\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.MySQL/Migrations/20170724195817_changes20170724.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing Microsoft.EntityFrameworkCore.Migrations;\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.MySQL.Migrations\n{\n    public partial class changes20170724 : Migration\n    {\n        protected override void Up(MigrationBuilder migrationBuilder)\n        {\n            migrationBuilder.AddColumn<string>(\n                name: \"MetaHtml\",\n                table: \"cs_Post\",\n                nullable: true);\n\n            migrationBuilder.AddColumn<string>(\n                name: \"MetaJson\",\n                table: \"cs_Post\",\n                nullable: true);\n\n            migrationBuilder.AddColumn<string>(\n                name: \"MetaHtml\",\n                table: \"cs_Page\",\n                nullable: true);\n\n            migrationBuilder.AddColumn<string>(\n                name: \"MetaJson\",\n                table: \"cs_Page\",\n                nullable: true);\n        }\n\n        protected override void Down(MigrationBuilder migrationBuilder)\n        {\n            migrationBuilder.DropColumn(\n                name: \"MetaHtml\",\n                table: \"cs_Post\");\n\n            migrationBuilder.DropColumn(\n                name: \"MetaJson\",\n                table: \"cs_Post\");\n\n            migrationBuilder.DropColumn(\n                name: \"MetaHtml\",\n                table: \"cs_Page\");\n\n            migrationBuilder.DropColumn(\n                name: \"MetaJson\",\n                table: \"cs_Page\");\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.MySQL/Migrations/20170801190433_changes20170731.Designer.cs",
    "content": "﻿// <auto-generated />\nusing cloudscribe.SimpleContent.Storage.EFCore.MySQL;\nusing Microsoft.EntityFrameworkCore;\nusing Microsoft.EntityFrameworkCore.Infrastructure;\nusing Microsoft.EntityFrameworkCore.Metadata;\nusing Microsoft.EntityFrameworkCore.Migrations;\nusing Microsoft.EntityFrameworkCore.Storage;\nusing Microsoft.EntityFrameworkCore.Storage.Internal;\nusing System;\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.MySQL.Migrations\n{\n    [DbContext(typeof(SimpleContentDbContext))]\n    [Migration(\"20170801190433_changes20170731\")]\n    partial class changes20170731\n    {\n        protected override void BuildTargetModel(ModelBuilder modelBuilder)\n        {\n#pragma warning disable 612, 618\n            modelBuilder\n                .HasAnnotation(\"MySql:ValueGenerationStrategy\", MySqlValueGenerationStrategy.IdentityColumn)\n                .HasAnnotation(\"ProductVersion\", \"2.0.0-preview2-25794\");\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Models.ProjectSettings\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<bool>(\"AddBlogToPagesTree\");\n\n                    b.Property<bool>(\"BlogMenuLinksToNewestPost\");\n\n                    b.Property<string>(\"BlogPageNavComponentVisibility\")\n                        .HasMaxLength(255);\n\n                    b.Property<int>(\"BlogPagePosition\");\n\n                    b.Property<string>(\"BlogPageText\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CdnUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ChannelCategoriesCsv\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ChannelRating\")\n                        .HasMaxLength(100);\n\n                    b.Property<int>(\"ChannelTimeToLive\");\n\n                    b.Property<string>(\"CommentNotificationEmail\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"CopyrightNotice\")\n                        .HasMaxLength(255);\n\n                    b.Property<int>(\"DaysToComment\");\n\n                    b.Property<string>(\"DefaultPageSlug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Description\");\n\n                    b.Property<string>(\"DisqusShortName\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"EmailFromAddress\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Image\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"IncludePubDateInPostUrls\");\n\n                    b.Property<string>(\"LanguageCode\")\n                        .HasMaxLength(10);\n\n                    b.Property<string>(\"LocalMediaVirtualPath\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ManagingEditorEmail\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"ModerateComments\");\n\n                    b.Property<int>(\"PostsPerPage\");\n\n                    b.Property<string>(\"PubDateFormat\")\n                        .HasMaxLength(75);\n\n                    b.Property<string>(\"Publisher\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"PublisherEntityType\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PublisherLogoHeight\")\n                        .HasMaxLength(20);\n\n                    b.Property<string>(\"PublisherLogoUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"PublisherLogoWidth\")\n                        .HasMaxLength(20);\n\n                    b.Property<string>(\"RecaptchaPrivateKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RecaptchaPublicKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RemoteFeedProcessorUseAgentFragment\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RemoteFeedUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"ShowRecentPostsOnDefaultPage\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue(false);\n\n                    b.Property<bool>(\"ShowTitle\");\n\n                    b.Property<string>(\"SmtpPassword\");\n\n                    b.Property<int>(\"SmtpPort\");\n\n                    b.Property<string>(\"SmtpPreferredEncoding\")\n                        .HasMaxLength(20);\n\n                    b.Property<bool>(\"SmtpRequiresAuth\");\n\n                    b.Property<string>(\"SmtpServer\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"SmtpUseSsl\");\n\n                    b.Property<string>(\"SmtpUser\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"TimeZoneId\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Title\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"UseDefaultPageAsRootNode\");\n\n                    b.Property<bool>(\"UseMetaDescriptionInFeed\");\n\n                    b.Property<string>(\"WebmasterEmail\")\n                        .HasMaxLength(100);\n\n                    b.HasKey(\"Id\");\n\n                    b.ToTable(\"cs_ContentProject\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageCategory\", b =>\n                {\n                    b.Property<string>(\"Value\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.HasKey(\"Value\", \"PageEntityId\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.HasIndex(\"Value\");\n\n                    b.ToTable(\"cs_PageCategory\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"Email\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Ip\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"IsAdmin\");\n\n                    b.Property<bool>(\"IsApproved\");\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<DateTime>(\"PubDate\");\n\n                    b.Property<string>(\"UserAgent\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Website\")\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_PageComment\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"DisableEditor\");\n\n                    b.Property<string>(\"ExternalUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"IsPublished\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue(true);\n\n                    b.Property<DateTime>(\"LastModified\");\n\n                    b.Property<string>(\"MenuFilters\")\n                        .HasMaxLength(500);\n\n                    b.Property<bool>(\"MenuOnly\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue(false);\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"MetaHtml\");\n\n                    b.Property<string>(\"MetaJson\");\n\n                    b.Property<int>(\"PageOrder\");\n\n                    b.Property<string>(\"ParentId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ParentSlug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<DateTime>(\"PubDate\");\n\n                    b.Property<bool>(\"ShowCategories\");\n                    //.ValueGeneratedOnAdd()\n                    //.HasDefaultValue(false);\n\n                    b.Property<bool>(\"ShowComments\");\n                    //.ValueGeneratedOnAdd()\n                    //.HasDefaultValue(false);\n\n                    b.Property<bool>(\"ShowHeading\");\n                    //.ValueGeneratedOnAdd()\n                    //.HasDefaultValue(true);\n\n                    b.Property<bool>(\"ShowLastModified\");\n                    //.ValueGeneratedOnAdd()\n                    //.HasDefaultValue(false);\n\n                    b.Property<bool>(\"ShowMenu\");\n                    //.ValueGeneratedOnAdd()\n                    //.HasDefaultValue(false);\n\n                    b.Property<bool>(\"ShowPubDate\");\n                        //.ValueGeneratedOnAdd()\n                        //.HasDefaultValue(false);\n\n                    b.Property<string>(\"Slug\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ViewRoles\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"ParentId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_Page\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageResourceEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Environment\")\n                        .IsRequired()\n                        .HasMaxLength(15);\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<int>(\"Sort\");\n\n                    b.Property<string>(\"Type\")\n                        .IsRequired()\n                        .HasMaxLength(10);\n\n                    b.Property<string>(\"Url\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.ToTable(\"cs_PageResource\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostCategory\", b =>\n                {\n                    b.Property<string>(\"Value\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PostEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.HasKey(\"Value\", \"PostEntityId\");\n\n                    b.HasIndex(\"PostEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.HasIndex(\"Value\");\n\n                    b.ToTable(\"cs_PostCategory\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"Email\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Ip\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"IsAdmin\");\n\n                    b.Property<bool>(\"IsApproved\");\n\n                    b.Property<string>(\"PostEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<DateTime>(\"PubDate\");\n\n                    b.Property<string>(\"UserAgent\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Website\")\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PostEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_PostComment\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"BlogId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"IsPublished\");\n\n                    b.Property<DateTime>(\"LastModified\");\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"MetaHtml\");\n\n                    b.Property<string>(\"MetaJson\");\n\n                    b.Property<DateTime>(\"PubDate\");\n\n                    b.Property<string>(\"Slug\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"BlogId\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"Slug\");\n\n                    b.ToTable(\"cs_Post\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\")\n                        .WithMany(\"PageComments\")\n                        .HasForeignKey(\"PageEntityId\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageResourceEntity\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\")\n                        .WithMany(\"PageResources\")\n                        .HasForeignKey(\"PageEntityId\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\")\n                        .WithMany(\"PostComments\")\n                        .HasForeignKey(\"PostEntityId\");\n                });\n#pragma warning restore 612, 618\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.MySQL/Migrations/20170801190433_changes20170731.cs",
    "content": "﻿using Microsoft.EntityFrameworkCore.Migrations;\nusing System;\nusing System.Collections.Generic;\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.MySQL.Migrations\n{\n    public partial class changes20170731 : Migration\n    {\n        protected override void Up(MigrationBuilder migrationBuilder)\n        {\n            migrationBuilder.AddColumn<bool>(\n                name: \"DisableEditor\",\n                table: \"cs_Page\",\n                type: \"bit\",\n                nullable: false,\n                defaultValue: false);\n        }\n\n        protected override void Down(MigrationBuilder migrationBuilder)\n        {\n            migrationBuilder.DropColumn(\n                name: \"DisableEditor\",\n                table: \"cs_Page\");\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.MySQL/Migrations/20170801190833_changes20170801.Designer.cs",
    "content": "﻿// <auto-generated />\nusing cloudscribe.SimpleContent.Storage.EFCore.MySQL;\nusing Microsoft.EntityFrameworkCore;\nusing Microsoft.EntityFrameworkCore.Infrastructure;\nusing Microsoft.EntityFrameworkCore.Metadata;\nusing Microsoft.EntityFrameworkCore.Migrations;\nusing Microsoft.EntityFrameworkCore.Storage;\nusing Microsoft.EntityFrameworkCore.Storage.Internal;\nusing System;\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.MySQL.Migrations\n{\n    [DbContext(typeof(SimpleContentDbContext))]\n    [Migration(\"20170801190833_changes20170801\")]\n    partial class changes20170801\n    {\n        protected override void BuildTargetModel(ModelBuilder modelBuilder)\n        {\n#pragma warning disable 612, 618\n            modelBuilder\n                .HasAnnotation(\"MySql:ValueGenerationStrategy\", MySqlValueGenerationStrategy.IdentityColumn)\n                .HasAnnotation(\"ProductVersion\", \"2.0.0-preview2-25794\");\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Models.ProjectSettings\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<bool>(\"AddBlogToPagesTree\");\n\n                    b.Property<bool>(\"BlogMenuLinksToNewestPost\");\n\n                    b.Property<string>(\"BlogPageNavComponentVisibility\")\n                        .HasMaxLength(255);\n\n                    b.Property<int>(\"BlogPagePosition\");\n\n                    b.Property<string>(\"BlogPageText\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CdnUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ChannelCategoriesCsv\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ChannelRating\")\n                        .HasMaxLength(100);\n\n                    b.Property<int>(\"ChannelTimeToLive\");\n\n                    b.Property<string>(\"CommentNotificationEmail\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"CopyrightNotice\")\n                        .HasMaxLength(255);\n\n                    b.Property<int>(\"DaysToComment\");\n\n                    b.Property<string>(\"DefaultPageSlug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Description\");\n\n                    b.Property<string>(\"DisqusShortName\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"EmailFromAddress\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Image\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"IncludePubDateInPostUrls\");\n\n                    b.Property<string>(\"LanguageCode\")\n                        .HasMaxLength(10);\n\n                    b.Property<string>(\"LocalMediaVirtualPath\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ManagingEditorEmail\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"ModerateComments\");\n\n                    b.Property<int>(\"PostsPerPage\");\n\n                    b.Property<string>(\"PubDateFormat\")\n                        .HasMaxLength(75);\n\n                    b.Property<string>(\"Publisher\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"PublisherEntityType\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PublisherLogoHeight\")\n                        .HasMaxLength(20);\n\n                    b.Property<string>(\"PublisherLogoUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"PublisherLogoWidth\")\n                        .HasMaxLength(20);\n\n                    b.Property<string>(\"RecaptchaPrivateKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RecaptchaPublicKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RemoteFeedProcessorUseAgentFragment\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RemoteFeedUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"ShowRecentPostsOnDefaultPage\");\n\n                    b.Property<bool>(\"ShowTitle\");\n\n                    b.Property<string>(\"SmtpPassword\");\n\n                    b.Property<int>(\"SmtpPort\");\n\n                    b.Property<string>(\"SmtpPreferredEncoding\")\n                        .HasMaxLength(20);\n\n                    b.Property<bool>(\"SmtpRequiresAuth\");\n\n                    b.Property<string>(\"SmtpServer\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"SmtpUseSsl\");\n\n                    b.Property<string>(\"SmtpUser\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"TimeZoneId\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Title\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"UseDefaultPageAsRootNode\");\n\n                    b.Property<bool>(\"UseMetaDescriptionInFeed\");\n\n                    b.Property<string>(\"WebmasterEmail\")\n                        .HasMaxLength(100);\n\n                    b.HasKey(\"Id\");\n\n                    b.ToTable(\"cs_ContentProject\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageCategory\", b =>\n                {\n                    b.Property<string>(\"Value\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.HasKey(\"Value\", \"PageEntityId\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.HasIndex(\"Value\");\n\n                    b.ToTable(\"cs_PageCategory\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"Email\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Ip\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"IsAdmin\");\n\n                    b.Property<bool>(\"IsApproved\");\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<DateTime>(\"PubDate\");\n\n                    b.Property<string>(\"UserAgent\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Website\")\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_PageComment\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"DisableEditor\");\n\n                    b.Property<string>(\"ExternalUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"IsPublished\");\n\n                    b.Property<DateTime>(\"LastModified\");\n\n                    b.Property<string>(\"MenuFilters\")\n                        .HasMaxLength(500);\n\n                    b.Property<bool>(\"MenuOnly\");\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"MetaHtml\");\n\n                    b.Property<string>(\"MetaJson\");\n\n                    b.Property<int>(\"PageOrder\");\n\n                    b.Property<string>(\"ParentId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ParentSlug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<DateTime>(\"PubDate\");\n\n                    b.Property<bool>(\"ShowCategories\");\n\n                    b.Property<bool>(\"ShowComments\");\n\n                    b.Property<bool>(\"ShowHeading\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue(true);\n\n                    b.Property<bool>(\"ShowLastModified\");\n\n                    b.Property<bool>(\"ShowMenu\");\n\n                    b.Property<bool>(\"ShowPubDate\");\n\n                    b.Property<string>(\"Slug\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ViewRoles\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"ParentId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_Page\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageResourceEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Environment\")\n                        .IsRequired()\n                        .HasMaxLength(15);\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<int>(\"Sort\");\n\n                    b.Property<string>(\"Type\")\n                        .IsRequired()\n                        .HasMaxLength(10);\n\n                    b.Property<string>(\"Url\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.ToTable(\"cs_PageResource\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostCategory\", b =>\n                {\n                    b.Property<string>(\"Value\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PostEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.HasKey(\"Value\", \"PostEntityId\");\n\n                    b.HasIndex(\"PostEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.HasIndex(\"Value\");\n\n                    b.ToTable(\"cs_PostCategory\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"Email\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Ip\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"IsAdmin\");\n\n                    b.Property<bool>(\"IsApproved\");\n\n                    b.Property<string>(\"PostEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<DateTime>(\"PubDate\");\n\n                    b.Property<string>(\"UserAgent\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Website\")\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PostEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_PostComment\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"BlogId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"IsPublished\");\n\n                    b.Property<DateTime>(\"LastModified\");\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"MetaHtml\");\n\n                    b.Property<string>(\"MetaJson\");\n\n                    b.Property<DateTime>(\"PubDate\");\n\n                    b.Property<string>(\"Slug\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"BlogId\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"Slug\");\n\n                    b.ToTable(\"cs_Post\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\")\n                        .WithMany(\"PageComments\")\n                        .HasForeignKey(\"PageEntityId\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageResourceEntity\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\")\n                        .WithMany(\"PageResources\")\n                        .HasForeignKey(\"PageEntityId\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\")\n                        .WithMany(\"PostComments\")\n                        .HasForeignKey(\"PostEntityId\");\n                });\n#pragma warning restore 612, 618\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.MySQL/Migrations/20170801190833_changes20170801.cs",
    "content": "﻿using Microsoft.EntityFrameworkCore.Migrations;\nusing System;\nusing System.Collections.Generic;\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.MySQL.Migrations\n{\n    public partial class changes20170801 : Migration\n    {\n        protected override void Up(MigrationBuilder migrationBuilder)\n        {\n            //migrationBuilder.AlterColumn<bool>(\n            //    name: \"ShowPubDate\",\n            //    table: \"cs_Page\",\n            //    type: \"bit\",\n            //    nullable: false,\n            //    oldClrType: typeof(bool),\n            //    oldDefaultValue: false);\n\n            //migrationBuilder.AlterColumn<bool>(\n            //    name: \"ShowMenu\",\n            //    table: \"cs_Page\",\n            //    type: \"bit\",\n            //    nullable: false,\n            //    oldClrType: typeof(bool),\n            //    oldDefaultValue: false);\n\n            //migrationBuilder.AlterColumn<bool>(\n            //    name: \"ShowLastModified\",\n            //    table: \"cs_Page\",\n            //    type: \"bit\",\n            //    nullable: false,\n            //    oldClrType: typeof(bool),\n            //    oldDefaultValue: false);\n\n            //migrationBuilder.AlterColumn<bool>(\n            //    name: \"ShowComments\",\n            //    table: \"cs_Page\",\n            //    type: \"bit\",\n            //    nullable: false,\n            //    oldClrType: typeof(bool),\n            //    oldDefaultValue: false);\n\n            //migrationBuilder.AlterColumn<bool>(\n            //    name: \"ShowCategories\",\n            //    table: \"cs_Page\",\n            //    type: \"bit\",\n            //    nullable: false,\n            //    oldClrType: typeof(bool),\n            //    oldDefaultValue: false);\n\n            //migrationBuilder.AlterColumn<bool>(\n            //    name: \"MenuOnly\",\n            //    table: \"cs_Page\",\n            //    type: \"bit\",\n            //    nullable: false,\n            //    oldClrType: typeof(bool),\n            //    oldDefaultValue: false);\n\n            //migrationBuilder.AlterColumn<bool>(\n            //    name: \"IsPublished\",\n            //    table: \"cs_Page\",\n            //    type: \"bit\",\n            //    nullable: false,\n            //    oldClrType: typeof(bool),\n            //    oldDefaultValue: true);\n\n            //migrationBuilder.AlterColumn<bool>(\n            //    name: \"ShowRecentPostsOnDefaultPage\",\n            //    table: \"cs_ContentProject\",\n            //    type: \"bit\",\n            //    nullable: false,\n            //    oldClrType: typeof(bool),\n            //    oldDefaultValue: false);\n        }\n\n        protected override void Down(MigrationBuilder migrationBuilder)\n        {\n            //migrationBuilder.AlterColumn<bool>(\n            //    name: \"ShowPubDate\",\n            //    table: \"cs_Page\",\n            //    nullable: false,\n            //    defaultValue: false,\n            //    oldClrType: typeof(bool),\n            //    oldType: \"bit\");\n\n            //migrationBuilder.AlterColumn<bool>(\n            //    name: \"ShowMenu\",\n            //    table: \"cs_Page\",\n            //    nullable: false,\n            //    defaultValue: false,\n            //    oldClrType: typeof(bool),\n            //    oldType: \"bit\");\n\n            //migrationBuilder.AlterColumn<bool>(\n            //    name: \"ShowLastModified\",\n            //    table: \"cs_Page\",\n            //    nullable: false,\n            //    defaultValue: false,\n            //    oldClrType: typeof(bool),\n            //    oldType: \"bit\");\n\n            //migrationBuilder.AlterColumn<bool>(\n            //    name: \"ShowComments\",\n            //    table: \"cs_Page\",\n            //    nullable: false,\n            //    defaultValue: false,\n            //    oldClrType: typeof(bool),\n            //    oldType: \"bit\");\n\n            //migrationBuilder.AlterColumn<bool>(\n            //    name: \"ShowCategories\",\n            //    table: \"cs_Page\",\n            //    nullable: false,\n            //    defaultValue: false,\n            //    oldClrType: typeof(bool),\n            //    oldType: \"bit\");\n\n            //migrationBuilder.AlterColumn<bool>(\n            //    name: \"MenuOnly\",\n            //    table: \"cs_Page\",\n            //    nullable: false,\n            //    defaultValue: false,\n            //    oldClrType: typeof(bool),\n            //    oldType: \"bit\");\n\n            //migrationBuilder.AlterColumn<bool>(\n            //    name: \"IsPublished\",\n            //    table: \"cs_Page\",\n            //    nullable: false,\n            //    defaultValue: true,\n            //    oldClrType: typeof(bool),\n            //    oldType: \"bit\");\n\n            //migrationBuilder.AlterColumn<bool>(\n            //    name: \"ShowRecentPostsOnDefaultPage\",\n            //    table: \"cs_ContentProject\",\n            //    nullable: false,\n            //    defaultValue: false,\n            //    oldClrType: typeof(bool),\n            //    oldType: \"bit\");\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.MySQL/Migrations/20170801191031_changes20170801b.Designer.cs",
    "content": "﻿// <auto-generated />\nusing cloudscribe.SimpleContent.Storage.EFCore.MySQL;\nusing Microsoft.EntityFrameworkCore;\nusing Microsoft.EntityFrameworkCore.Infrastructure;\nusing Microsoft.EntityFrameworkCore.Metadata;\nusing Microsoft.EntityFrameworkCore.Migrations;\nusing Microsoft.EntityFrameworkCore.Storage;\nusing Microsoft.EntityFrameworkCore.Storage.Internal;\nusing System;\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.MySQL.Migrations\n{\n    [DbContext(typeof(SimpleContentDbContext))]\n    [Migration(\"20170801191031_changes20170801b\")]\n    partial class changes20170801b\n    {\n        protected override void BuildTargetModel(ModelBuilder modelBuilder)\n        {\n#pragma warning disable 612, 618\n            modelBuilder\n                .HasAnnotation(\"MySql:ValueGenerationStrategy\", MySqlValueGenerationStrategy.IdentityColumn)\n                .HasAnnotation(\"ProductVersion\", \"2.0.0-preview2-25794\");\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Models.ProjectSettings\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<bool>(\"AddBlogToPagesTree\");\n\n                    b.Property<bool>(\"BlogMenuLinksToNewestPost\");\n\n                    b.Property<string>(\"BlogPageNavComponentVisibility\")\n                        .HasMaxLength(255);\n\n                    b.Property<int>(\"BlogPagePosition\");\n\n                    b.Property<string>(\"BlogPageText\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CdnUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ChannelCategoriesCsv\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ChannelRating\")\n                        .HasMaxLength(100);\n\n                    b.Property<int>(\"ChannelTimeToLive\");\n\n                    b.Property<string>(\"CommentNotificationEmail\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"CopyrightNotice\")\n                        .HasMaxLength(255);\n\n                    b.Property<int>(\"DaysToComment\");\n\n                    b.Property<string>(\"DefaultPageSlug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Description\");\n\n                    b.Property<string>(\"DisqusShortName\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"EmailFromAddress\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Image\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"IncludePubDateInPostUrls\");\n\n                    b.Property<string>(\"LanguageCode\")\n                        .HasMaxLength(10);\n\n                    b.Property<string>(\"LocalMediaVirtualPath\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ManagingEditorEmail\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"ModerateComments\");\n\n                    b.Property<int>(\"PostsPerPage\");\n\n                    b.Property<string>(\"PubDateFormat\")\n                        .HasMaxLength(75);\n\n                    b.Property<string>(\"Publisher\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"PublisherEntityType\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PublisherLogoHeight\")\n                        .HasMaxLength(20);\n\n                    b.Property<string>(\"PublisherLogoUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"PublisherLogoWidth\")\n                        .HasMaxLength(20);\n\n                    b.Property<string>(\"RecaptchaPrivateKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RecaptchaPublicKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RemoteFeedProcessorUseAgentFragment\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RemoteFeedUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"ShowRecentPostsOnDefaultPage\");\n\n                    b.Property<bool>(\"ShowTitle\");\n\n                    b.Property<string>(\"SmtpPassword\");\n\n                    b.Property<int>(\"SmtpPort\");\n\n                    b.Property<string>(\"SmtpPreferredEncoding\")\n                        .HasMaxLength(20);\n\n                    b.Property<bool>(\"SmtpRequiresAuth\");\n\n                    b.Property<string>(\"SmtpServer\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"SmtpUseSsl\");\n\n                    b.Property<string>(\"SmtpUser\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"TimeZoneId\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Title\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"UseDefaultPageAsRootNode\");\n\n                    b.Property<bool>(\"UseMetaDescriptionInFeed\");\n\n                    b.Property<string>(\"WebmasterEmail\")\n                        .HasMaxLength(100);\n\n                    b.HasKey(\"Id\");\n\n                    b.ToTable(\"cs_ContentProject\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageCategory\", b =>\n                {\n                    b.Property<string>(\"Value\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.HasKey(\"Value\", \"PageEntityId\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.HasIndex(\"Value\");\n\n                    b.ToTable(\"cs_PageCategory\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"Email\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Ip\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"IsAdmin\");\n\n                    b.Property<bool>(\"IsApproved\");\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<DateTime>(\"PubDate\");\n\n                    b.Property<string>(\"UserAgent\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Website\")\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_PageComment\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"DisableEditor\");\n\n                    b.Property<string>(\"ExternalUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"IsPublished\");\n\n                    b.Property<DateTime>(\"LastModified\");\n\n                    b.Property<string>(\"MenuFilters\")\n                        .HasMaxLength(500);\n\n                    b.Property<bool>(\"MenuOnly\");\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"MetaHtml\");\n\n                    b.Property<string>(\"MetaJson\");\n\n                    b.Property<int>(\"PageOrder\");\n\n                    b.Property<string>(\"ParentId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ParentSlug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<DateTime>(\"PubDate\");\n\n                    b.Property<bool>(\"ShowCategories\");\n\n                    b.Property<bool>(\"ShowComments\");\n\n                    b.Property<bool>(\"ShowHeading\");\n\n                    b.Property<bool>(\"ShowLastModified\");\n\n                    b.Property<bool>(\"ShowMenu\");\n\n                    b.Property<bool>(\"ShowPubDate\");\n\n                    b.Property<string>(\"Slug\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ViewRoles\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"ParentId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_Page\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageResourceEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Environment\")\n                        .IsRequired()\n                        .HasMaxLength(15);\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<int>(\"Sort\");\n\n                    b.Property<string>(\"Type\")\n                        .IsRequired()\n                        .HasMaxLength(10);\n\n                    b.Property<string>(\"Url\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.ToTable(\"cs_PageResource\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostCategory\", b =>\n                {\n                    b.Property<string>(\"Value\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PostEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.HasKey(\"Value\", \"PostEntityId\");\n\n                    b.HasIndex(\"PostEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.HasIndex(\"Value\");\n\n                    b.ToTable(\"cs_PostCategory\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"Email\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Ip\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"IsAdmin\");\n\n                    b.Property<bool>(\"IsApproved\");\n\n                    b.Property<string>(\"PostEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<DateTime>(\"PubDate\");\n\n                    b.Property<string>(\"UserAgent\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Website\")\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PostEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_PostComment\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"BlogId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"IsPublished\");\n\n                    b.Property<DateTime>(\"LastModified\");\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"MetaHtml\");\n\n                    b.Property<string>(\"MetaJson\");\n\n                    b.Property<DateTime>(\"PubDate\");\n\n                    b.Property<string>(\"Slug\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"BlogId\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"Slug\");\n\n                    b.ToTable(\"cs_Post\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\")\n                        .WithMany(\"PageComments\")\n                        .HasForeignKey(\"PageEntityId\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageResourceEntity\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\")\n                        .WithMany(\"PageResources\")\n                        .HasForeignKey(\"PageEntityId\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\")\n                        .WithMany(\"PostComments\")\n                        .HasForeignKey(\"PostEntityId\");\n                });\n#pragma warning restore 612, 618\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.MySQL/Migrations/20170801191031_changes20170801b.cs",
    "content": "﻿using Microsoft.EntityFrameworkCore.Migrations;\nusing System;\nusing System.Collections.Generic;\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.MySQL.Migrations\n{\n    public partial class changes20170801b : Migration\n    {\n        protected override void Up(MigrationBuilder migrationBuilder)\n        {\n            migrationBuilder.AlterColumn<bool>(\n                name: \"ShowHeading\",\n                table: \"cs_Page\",\n                type: \"bit\",\n                nullable: false,\n                oldClrType: typeof(bool),\n                oldDefaultValue: true);\n        }\n\n        protected override void Down(MigrationBuilder migrationBuilder)\n        {\n            migrationBuilder.AlterColumn<bool>(\n                name: \"ShowHeading\",\n                table: \"cs_Page\",\n                nullable: false,\n                defaultValue: true,\n                oldClrType: typeof(bool),\n                oldType: \"bit\");\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.MySQL/Migrations/20171005175519_changes20171005.Designer.cs",
    "content": "﻿// <auto-generated />\nusing cloudscribe.SimpleContent.Storage.EFCore.MySQL;\nusing Microsoft.EntityFrameworkCore;\nusing Microsoft.EntityFrameworkCore.Infrastructure;\nusing Microsoft.EntityFrameworkCore.Metadata;\nusing Microsoft.EntityFrameworkCore.Migrations;\nusing Microsoft.EntityFrameworkCore.Storage;\nusing Microsoft.EntityFrameworkCore.Storage.Internal;\nusing System;\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.MySQL.Migrations\n{\n    [DbContext(typeof(SimpleContentDbContext))]\n    [Migration(\"20171005175519_changes20171005\")]\n    partial class changes20171005\n    {\n        protected override void BuildTargetModel(ModelBuilder modelBuilder)\n        {\n#pragma warning disable 612, 618\n            modelBuilder\n                .HasAnnotation(\"MySql:ValueGenerationStrategy\", MySqlValueGenerationStrategy.IdentityColumn)\n                .HasAnnotation(\"ProductVersion\", \"2.0.0-rtm-26452\");\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Models.ProjectSettings\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<bool>(\"AddBlogToPagesTree\");\n\n                    b.Property<bool>(\"BlogMenuLinksToNewestPost\");\n\n                    b.Property<string>(\"BlogPageNavComponentVisibility\")\n                        .HasMaxLength(255);\n\n                    b.Property<int>(\"BlogPagePosition\");\n\n                    b.Property<string>(\"BlogPageText\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CdnUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ChannelCategoriesCsv\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ChannelRating\")\n                        .HasMaxLength(100);\n\n                    b.Property<int>(\"ChannelTimeToLive\");\n\n                    b.Property<string>(\"CommentNotificationEmail\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"CopyrightNotice\")\n                        .HasMaxLength(255);\n\n                    b.Property<int>(\"DaysToComment\");\n\n                    b.Property<string>(\"DefaultPageSlug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Description\");\n\n                    b.Property<string>(\"DisqusShortName\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"EmailFromAddress\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Image\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"IncludePubDateInPostUrls\");\n\n                    b.Property<string>(\"LanguageCode\")\n                        .HasMaxLength(10);\n\n                    b.Property<string>(\"LocalMediaVirtualPath\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ManagingEditorEmail\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"ModerateComments\");\n\n                    b.Property<int>(\"PostsPerPage\");\n\n                    b.Property<string>(\"PubDateFormat\")\n                        .HasMaxLength(75);\n\n                    b.Property<string>(\"Publisher\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"PublisherEntityType\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PublisherLogoHeight\")\n                        .HasMaxLength(20);\n\n                    b.Property<string>(\"PublisherLogoUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"PublisherLogoWidth\")\n                        .HasMaxLength(20);\n\n                    b.Property<string>(\"RecaptchaPrivateKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RecaptchaPublicKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RemoteFeedProcessorUseAgentFragment\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RemoteFeedUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"ShowFeaturedPostsOnDefaultPage\");\n\n                    b.Property<bool>(\"ShowRecentPostsOnDefaultPage\");\n\n                    b.Property<bool>(\"ShowTitle\");\n\n                    b.Property<string>(\"SmtpPassword\");\n\n                    b.Property<int>(\"SmtpPort\");\n\n                    b.Property<string>(\"SmtpPreferredEncoding\")\n                        .HasMaxLength(20);\n\n                    b.Property<bool>(\"SmtpRequiresAuth\");\n\n                    b.Property<string>(\"SmtpServer\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"SmtpUseSsl\");\n\n                    b.Property<string>(\"SmtpUser\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"TimeZoneId\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Title\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"UseDefaultPageAsRootNode\");\n\n                    b.Property<bool>(\"UseMetaDescriptionInFeed\");\n\n                    b.Property<string>(\"WebmasterEmail\")\n                        .HasMaxLength(100);\n\n                    b.HasKey(\"Id\");\n\n                    b.ToTable(\"cs_ContentProject\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageCategory\", b =>\n                {\n                    b.Property<string>(\"Value\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.HasKey(\"Value\", \"PageEntityId\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.HasIndex(\"Value\");\n\n                    b.ToTable(\"cs_PageCategory\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"Email\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Ip\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"IsAdmin\");\n\n                    b.Property<bool>(\"IsApproved\");\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<DateTime>(\"PubDate\");\n\n                    b.Property<string>(\"UserAgent\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Website\")\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_PageComment\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"DisableEditor\");\n\n                    b.Property<string>(\"ExternalUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"IsPublished\");\n\n                    b.Property<DateTime>(\"LastModified\");\n\n                    b.Property<string>(\"MenuFilters\")\n                        .HasMaxLength(500);\n\n                    b.Property<bool>(\"MenuOnly\");\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"MetaHtml\");\n\n                    b.Property<string>(\"MetaJson\");\n\n                    b.Property<int>(\"PageOrder\");\n\n                    b.Property<string>(\"ParentId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ParentSlug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<DateTime>(\"PubDate\");\n\n                    b.Property<bool>(\"ShowCategories\");\n\n                    b.Property<bool>(\"ShowComments\");\n\n                    b.Property<bool>(\"ShowHeading\");\n\n                    b.Property<bool>(\"ShowLastModified\");\n\n                    b.Property<bool>(\"ShowMenu\");\n\n                    b.Property<bool>(\"ShowPubDate\");\n\n                    b.Property<string>(\"Slug\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ViewRoles\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"ParentId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_Page\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageResourceEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Environment\")\n                        .IsRequired()\n                        .HasMaxLength(15);\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<int>(\"Sort\");\n\n                    b.Property<string>(\"Type\")\n                        .IsRequired()\n                        .HasMaxLength(10);\n\n                    b.Property<string>(\"Url\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.ToTable(\"cs_PageResource\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostCategory\", b =>\n                {\n                    b.Property<string>(\"Value\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PostEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.HasKey(\"Value\", \"PostEntityId\");\n\n                    b.HasIndex(\"PostEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.HasIndex(\"Value\");\n\n                    b.ToTable(\"cs_PostCategory\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"Email\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Ip\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"IsAdmin\");\n\n                    b.Property<bool>(\"IsApproved\");\n\n                    b.Property<string>(\"PostEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<DateTime>(\"PubDate\");\n\n                    b.Property<string>(\"UserAgent\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Website\")\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PostEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_PostComment\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"BlogId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ImageUrl\")\n                        .HasMaxLength(250);\n\n                    b.Property<bool>(\"IsFeatured\");\n\n                    b.Property<bool>(\"IsPublished\");\n\n                    b.Property<DateTime>(\"LastModified\");\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"MetaHtml\");\n\n                    b.Property<string>(\"MetaJson\");\n\n                    b.Property<DateTime>(\"PubDate\");\n\n                    b.Property<string>(\"Slug\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ThumbnailUrl\")\n                        .HasMaxLength(250);\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"BlogId\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"Slug\");\n\n                    b.ToTable(\"cs_Post\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\")\n                        .WithMany(\"PageComments\")\n                        .HasForeignKey(\"PageEntityId\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageResourceEntity\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\")\n                        .WithMany(\"PageResources\")\n                        .HasForeignKey(\"PageEntityId\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\")\n                        .WithMany(\"PostComments\")\n                        .HasForeignKey(\"PostEntityId\");\n                });\n#pragma warning restore 612, 618\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.MySQL/Migrations/20171005175519_changes20171005.cs",
    "content": "﻿using Microsoft.EntityFrameworkCore.Migrations;\nusing System;\nusing System.Collections.Generic;\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.MySQL.Migrations\n{\n    public partial class changes20171005 : Migration\n    {\n        protected override void Up(MigrationBuilder migrationBuilder)\n        {\n            migrationBuilder.AddColumn<string>(\n                name: \"ImageUrl\",\n                table: \"cs_Post\",\n                type: \"varchar(250)\",\n                maxLength: 250,\n                nullable: true);\n\n            migrationBuilder.AddColumn<bool>(\n                name: \"IsFeatured\",\n                table: \"cs_Post\",\n                type: \"bit\",\n                nullable: false,\n                defaultValue: false);\n\n            migrationBuilder.AddColumn<string>(\n                name: \"ThumbnailUrl\",\n                table: \"cs_Post\",\n                type: \"varchar(250)\",\n                maxLength: 250,\n                nullable: true);\n\n            migrationBuilder.AddColumn<bool>(\n                name: \"ShowFeaturedPostsOnDefaultPage\",\n                table: \"cs_ContentProject\",\n                type: \"bit\",\n                nullable: false,\n                defaultValue: false);\n        }\n\n        protected override void Down(MigrationBuilder migrationBuilder)\n        {\n            migrationBuilder.DropColumn(\n                name: \"ImageUrl\",\n                table: \"cs_Post\");\n\n            migrationBuilder.DropColumn(\n                name: \"IsFeatured\",\n                table: \"cs_Post\");\n\n            migrationBuilder.DropColumn(\n                name: \"ThumbnailUrl\",\n                table: \"cs_Post\");\n\n            migrationBuilder.DropColumn(\n                name: \"ShowFeaturedPostsOnDefaultPage\",\n                table: \"cs_ContentProject\");\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.MySQL/Migrations/20171016103020_changes20171016.Designer.cs",
    "content": "﻿// <auto-generated />\nusing cloudscribe.SimpleContent.Storage.EFCore.MySQL;\nusing Microsoft.EntityFrameworkCore;\nusing Microsoft.EntityFrameworkCore.Infrastructure;\nusing Microsoft.EntityFrameworkCore.Metadata;\nusing Microsoft.EntityFrameworkCore.Migrations;\nusing Microsoft.EntityFrameworkCore.Storage;\nusing Microsoft.EntityFrameworkCore.Storage.Internal;\nusing System;\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.MySQL.Migrations\n{\n    [DbContext(typeof(SimpleContentDbContext))]\n    [Migration(\"20171016103020_changes20171016\")]\n    partial class changes20171016\n    {\n        protected override void BuildTargetModel(ModelBuilder modelBuilder)\n        {\n#pragma warning disable 612, 618\n            modelBuilder\n                .HasAnnotation(\"MySql:ValueGenerationStrategy\", MySqlValueGenerationStrategy.IdentityColumn)\n                .HasAnnotation(\"ProductVersion\", \"2.0.0-rtm-26452\");\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Models.ProjectSettings\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<bool>(\"AddBlogToPagesTree\");\n\n                    b.Property<bool>(\"BlogMenuLinksToNewestPost\");\n\n                    b.Property<string>(\"BlogPageNavComponentVisibility\")\n                        .HasMaxLength(255);\n\n                    b.Property<int>(\"BlogPagePosition\");\n\n                    b.Property<string>(\"BlogPageText\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CdnUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ChannelCategoriesCsv\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ChannelRating\")\n                        .HasMaxLength(100);\n\n                    b.Property<int>(\"ChannelTimeToLive\");\n\n                    b.Property<string>(\"CommentNotificationEmail\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"CopyrightNotice\")\n                        .HasMaxLength(255);\n\n                    b.Property<int>(\"DaysToComment\");\n\n                    b.Property<string>(\"DefaultPageSlug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Description\");\n\n                    b.Property<string>(\"DisqusShortName\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"EmailFromAddress\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"FacebookAppId\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Image\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"IncludePubDateInPostUrls\");\n\n                    b.Property<string>(\"LanguageCode\")\n                        .HasMaxLength(10);\n\n                    b.Property<string>(\"LocalMediaVirtualPath\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ManagingEditorEmail\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"ModerateComments\");\n\n                    b.Property<int>(\"PostsPerPage\");\n\n                    b.Property<string>(\"PubDateFormat\")\n                        .HasMaxLength(75);\n\n                    b.Property<string>(\"Publisher\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"PublisherEntityType\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PublisherLogoHeight\")\n                        .HasMaxLength(20);\n\n                    b.Property<string>(\"PublisherLogoUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"PublisherLogoWidth\")\n                        .HasMaxLength(20);\n\n                    b.Property<string>(\"RecaptchaPrivateKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RecaptchaPublicKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RemoteFeedProcessorUseAgentFragment\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RemoteFeedUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"ShowFeaturedPostsOnDefaultPage\");\n\n                    b.Property<bool>(\"ShowRecentPostsOnDefaultPage\");\n\n                    b.Property<bool>(\"ShowTitle\");\n\n                    b.Property<string>(\"SiteName\")\n                        .HasMaxLength(200);\n\n                    b.Property<string>(\"SmtpPassword\");\n\n                    b.Property<int>(\"SmtpPort\");\n\n                    b.Property<string>(\"SmtpPreferredEncoding\")\n                        .HasMaxLength(20);\n\n                    b.Property<bool>(\"SmtpRequiresAuth\");\n\n                    b.Property<string>(\"SmtpServer\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"SmtpUseSsl\");\n\n                    b.Property<string>(\"SmtpUser\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"TimeZoneId\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Title\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"TwitterCreator\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"TwitterPublisher\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"UseDefaultPageAsRootNode\");\n\n                    b.Property<bool>(\"UseMetaDescriptionInFeed\");\n\n                    b.Property<string>(\"WebmasterEmail\")\n                        .HasMaxLength(100);\n\n                    b.HasKey(\"Id\");\n\n                    b.ToTable(\"cs_ContentProject\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageCategory\", b =>\n                {\n                    b.Property<string>(\"Value\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.HasKey(\"Value\", \"PageEntityId\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.HasIndex(\"Value\");\n\n                    b.ToTable(\"cs_PageCategory\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"Email\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Ip\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"IsAdmin\");\n\n                    b.Property<bool>(\"IsApproved\");\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<DateTime>(\"PubDate\");\n\n                    b.Property<string>(\"UserAgent\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Website\")\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_PageComment\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"DisableEditor\");\n\n                    b.Property<string>(\"ExternalUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"IsPublished\");\n\n                    b.Property<DateTime>(\"LastModified\");\n\n                    b.Property<string>(\"MenuFilters\")\n                        .HasMaxLength(500);\n\n                    b.Property<bool>(\"MenuOnly\");\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"MetaHtml\");\n\n                    b.Property<string>(\"MetaJson\");\n\n                    b.Property<int>(\"PageOrder\");\n\n                    b.Property<string>(\"ParentId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ParentSlug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<DateTime>(\"PubDate\");\n\n                    b.Property<bool>(\"ShowCategories\");\n\n                    b.Property<bool>(\"ShowComments\");\n\n                    b.Property<bool>(\"ShowHeading\");\n\n                    b.Property<bool>(\"ShowLastModified\");\n\n                    b.Property<bool>(\"ShowMenu\");\n\n                    b.Property<bool>(\"ShowPubDate\");\n\n                    b.Property<string>(\"Slug\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ViewRoles\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"ParentId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_Page\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageResourceEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Environment\")\n                        .IsRequired()\n                        .HasMaxLength(15);\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<int>(\"Sort\");\n\n                    b.Property<string>(\"Type\")\n                        .IsRequired()\n                        .HasMaxLength(10);\n\n                    b.Property<string>(\"Url\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.ToTable(\"cs_PageResource\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostCategory\", b =>\n                {\n                    b.Property<string>(\"Value\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PostEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.HasKey(\"Value\", \"PostEntityId\");\n\n                    b.HasIndex(\"PostEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.HasIndex(\"Value\");\n\n                    b.ToTable(\"cs_PostCategory\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"Email\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Ip\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"IsAdmin\");\n\n                    b.Property<bool>(\"IsApproved\");\n\n                    b.Property<string>(\"PostEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<DateTime>(\"PubDate\");\n\n                    b.Property<string>(\"UserAgent\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Website\")\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PostEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_PostComment\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"BlogId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ImageUrl\")\n                        .HasMaxLength(250);\n\n                    b.Property<bool>(\"IsFeatured\");\n\n                    b.Property<bool>(\"IsPublished\");\n\n                    b.Property<DateTime>(\"LastModified\");\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"MetaHtml\");\n\n                    b.Property<string>(\"MetaJson\");\n\n                    b.Property<DateTime>(\"PubDate\");\n\n                    b.Property<string>(\"Slug\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ThumbnailUrl\")\n                        .HasMaxLength(250);\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"BlogId\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"Slug\");\n\n                    b.ToTable(\"cs_Post\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\")\n                        .WithMany(\"PageComments\")\n                        .HasForeignKey(\"PageEntityId\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageResourceEntity\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\")\n                        .WithMany(\"PageResources\")\n                        .HasForeignKey(\"PageEntityId\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\")\n                        .WithMany(\"PostComments\")\n                        .HasForeignKey(\"PostEntityId\");\n                });\n#pragma warning restore 612, 618\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.MySQL/Migrations/20171016103020_changes20171016.cs",
    "content": "﻿using Microsoft.EntityFrameworkCore.Migrations;\nusing System;\nusing System.Collections.Generic;\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.MySQL.Migrations\n{\n    public partial class changes20171016 : Migration\n    {\n        protected override void Up(MigrationBuilder migrationBuilder)\n        {\n            migrationBuilder.AddColumn<string>(\n                name: \"FacebookAppId\",\n                table: \"cs_ContentProject\",\n                type: \"varchar(100)\",\n                maxLength: 100,\n                nullable: true);\n\n            migrationBuilder.AddColumn<string>(\n                name: \"SiteName\",\n                table: \"cs_ContentProject\",\n                type: \"varchar(200)\",\n                maxLength: 200,\n                nullable: true);\n\n            migrationBuilder.AddColumn<string>(\n                name: \"TwitterCreator\",\n                table: \"cs_ContentProject\",\n                type: \"varchar(100)\",\n                maxLength: 100,\n                nullable: true);\n\n            migrationBuilder.AddColumn<string>(\n                name: \"TwitterPublisher\",\n                table: \"cs_ContentProject\",\n                type: \"varchar(100)\",\n                maxLength: 100,\n                nullable: true);\n        }\n\n        protected override void Down(MigrationBuilder migrationBuilder)\n        {\n            migrationBuilder.DropColumn(\n                name: \"FacebookAppId\",\n                table: \"cs_ContentProject\");\n\n            migrationBuilder.DropColumn(\n                name: \"SiteName\",\n                table: \"cs_ContentProject\");\n\n            migrationBuilder.DropColumn(\n                name: \"TwitterCreator\",\n                table: \"cs_ContentProject\");\n\n            migrationBuilder.DropColumn(\n                name: \"TwitterPublisher\",\n                table: \"cs_ContentProject\");\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.MySQL/Migrations/20171118201035_changes20171118.Designer.cs",
    "content": "﻿// <auto-generated />\nusing cloudscribe.SimpleContent.Storage.EFCore.MySQL;\nusing Microsoft.EntityFrameworkCore;\nusing Microsoft.EntityFrameworkCore.Infrastructure;\nusing Microsoft.EntityFrameworkCore.Metadata;\nusing Microsoft.EntityFrameworkCore.Migrations;\nusing Microsoft.EntityFrameworkCore.Storage;\nusing Microsoft.EntityFrameworkCore.Storage.Internal;\nusing System;\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.MySQL.Migrations\n{\n    [DbContext(typeof(SimpleContentDbContext))]\n    [Migration(\"20171118201035_changes20171118\")]\n    partial class changes20171118\n    {\n        protected override void BuildTargetModel(ModelBuilder modelBuilder)\n        {\n#pragma warning disable 612, 618\n            modelBuilder\n                .HasAnnotation(\"MySql:ValueGenerationStrategy\", MySqlValueGenerationStrategy.IdentityColumn)\n                .HasAnnotation(\"ProductVersion\", \"2.0.1-rtm-125\");\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Models.ProjectSettings\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<bool>(\"AddBlogToPagesTree\");\n\n                    b.Property<bool>(\"BlogMenuLinksToNewestPost\");\n\n                    b.Property<string>(\"BlogPageNavComponentVisibility\")\n                        .HasMaxLength(255);\n\n                    b.Property<int>(\"BlogPagePosition\");\n\n                    b.Property<string>(\"BlogPageText\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CdnUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ChannelCategoriesCsv\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ChannelRating\")\n                        .HasMaxLength(100);\n\n                    b.Property<int>(\"ChannelTimeToLive\");\n\n                    b.Property<string>(\"CommentNotificationEmail\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"CopyrightNotice\")\n                        .HasMaxLength(255);\n\n                    b.Property<int>(\"DaysToComment\");\n\n                    b.Property<string>(\"DefaultContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue(\"html\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"DefaultPageSlug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Description\");\n\n                    b.Property<string>(\"DisqusShortName\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"EmailFromAddress\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"FacebookAppId\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Image\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"IncludePubDateInPostUrls\");\n\n                    b.Property<string>(\"LanguageCode\")\n                        .HasMaxLength(10);\n\n                    b.Property<string>(\"LocalMediaVirtualPath\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ManagingEditorEmail\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"ModerateComments\");\n\n                    b.Property<int>(\"PostsPerPage\");\n\n                    b.Property<string>(\"PubDateFormat\")\n                        .HasMaxLength(75);\n\n                    b.Property<string>(\"Publisher\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"PublisherEntityType\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PublisherLogoHeight\")\n                        .HasMaxLength(20);\n\n                    b.Property<string>(\"PublisherLogoUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"PublisherLogoWidth\")\n                        .HasMaxLength(20);\n\n                    b.Property<string>(\"RecaptchaPrivateKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RecaptchaPublicKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RemoteFeedProcessorUseAgentFragment\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RemoteFeedUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"ShowFeaturedPostsOnDefaultPage\");\n\n                    b.Property<bool>(\"ShowRecentPostsOnDefaultPage\");\n\n                    b.Property<bool>(\"ShowTitle\");\n\n                    b.Property<string>(\"SiteName\")\n                        .HasMaxLength(200);\n\n                    b.Property<string>(\"SmtpPassword\");\n\n                    b.Property<int>(\"SmtpPort\");\n\n                    b.Property<string>(\"SmtpPreferredEncoding\")\n                        .HasMaxLength(20);\n\n                    b.Property<bool>(\"SmtpRequiresAuth\");\n\n                    b.Property<string>(\"SmtpServer\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"SmtpUseSsl\");\n\n                    b.Property<string>(\"SmtpUser\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"TimeZoneId\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Title\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"TwitterCreator\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"TwitterPublisher\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"UseDefaultPageAsRootNode\");\n\n                    b.Property<bool>(\"UseMetaDescriptionInFeed\");\n\n                    b.Property<string>(\"WebmasterEmail\")\n                        .HasMaxLength(100);\n\n                    b.HasKey(\"Id\");\n\n                    b.ToTable(\"cs_ContentProject\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageCategory\", b =>\n                {\n                    b.Property<string>(\"Value\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.HasKey(\"Value\", \"PageEntityId\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.HasIndex(\"Value\");\n\n                    b.ToTable(\"cs_PageCategory\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"Email\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Ip\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"IsAdmin\");\n\n                    b.Property<bool>(\"IsApproved\");\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<DateTime>(\"PubDate\");\n\n                    b.Property<string>(\"UserAgent\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Website\")\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_PageComment\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue(\"html\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"DisableEditor\");\n\n                    b.Property<string>(\"ExternalUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"IsPublished\");\n\n                    b.Property<DateTime>(\"LastModified\");\n\n                    b.Property<string>(\"MenuFilters\")\n                        .HasMaxLength(500);\n\n                    b.Property<bool>(\"MenuOnly\");\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"MetaHtml\");\n\n                    b.Property<string>(\"MetaJson\");\n\n                    b.Property<int>(\"PageOrder\");\n\n                    b.Property<string>(\"ParentId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ParentSlug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<DateTime>(\"PubDate\");\n\n                    b.Property<bool>(\"ShowCategories\");\n\n                    b.Property<bool>(\"ShowComments\");\n\n                    b.Property<bool>(\"ShowHeading\");\n\n                    b.Property<bool>(\"ShowLastModified\");\n\n                    b.Property<bool>(\"ShowMenu\");\n\n                    b.Property<bool>(\"ShowPubDate\");\n\n                    b.Property<string>(\"Slug\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ViewRoles\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"ParentId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_Page\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageResourceEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Environment\")\n                        .IsRequired()\n                        .HasMaxLength(15);\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<int>(\"Sort\");\n\n                    b.Property<string>(\"Type\")\n                        .IsRequired()\n                        .HasMaxLength(10);\n\n                    b.Property<string>(\"Url\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.ToTable(\"cs_PageResource\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostCategory\", b =>\n                {\n                    b.Property<string>(\"Value\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PostEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.HasKey(\"Value\", \"PostEntityId\");\n\n                    b.HasIndex(\"PostEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.HasIndex(\"Value\");\n\n                    b.ToTable(\"cs_PostCategory\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"Email\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Ip\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"IsAdmin\");\n\n                    b.Property<bool>(\"IsApproved\");\n\n                    b.Property<string>(\"PostEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<DateTime>(\"PubDate\");\n\n                    b.Property<string>(\"UserAgent\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Website\")\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PostEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_PostComment\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"BlogId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue(\"html\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ImageUrl\")\n                        .HasMaxLength(250);\n\n                    b.Property<bool>(\"IsFeatured\");\n\n                    b.Property<bool>(\"IsPublished\");\n\n                    b.Property<DateTime>(\"LastModified\");\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"MetaHtml\");\n\n                    b.Property<string>(\"MetaJson\");\n\n                    b.Property<DateTime>(\"PubDate\");\n\n                    b.Property<string>(\"Slug\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ThumbnailUrl\")\n                        .HasMaxLength(250);\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"BlogId\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"Slug\");\n\n                    b.ToTable(\"cs_Post\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\")\n                        .WithMany(\"PageComments\")\n                        .HasForeignKey(\"PageEntityId\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageResourceEntity\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\")\n                        .WithMany(\"PageResources\")\n                        .HasForeignKey(\"PageEntityId\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\")\n                        .WithMany(\"PostComments\")\n                        .HasForeignKey(\"PostEntityId\");\n                });\n#pragma warning restore 612, 618\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.MySQL/Migrations/20171118201035_changes20171118.cs",
    "content": "﻿using Microsoft.EntityFrameworkCore.Migrations;\nusing System;\nusing System.Collections.Generic;\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.MySQL.Migrations\n{\n    public partial class changes20171118 : Migration\n    {\n        protected override void Up(MigrationBuilder migrationBuilder)\n        {\n            migrationBuilder.AddColumn<string>(\n                name: \"ContentType\",\n                table: \"cs_Post\",\n                maxLength: 50,\n                nullable: true,\n                defaultValue: \"html\");\n\n            migrationBuilder.AddColumn<string>(\n                name: \"ContentType\",\n                table: \"cs_Page\",\n                maxLength: 50,\n                nullable: true,\n                defaultValue: \"html\");\n\n            migrationBuilder.AddColumn<string>(\n                name: \"DefaultContentType\",\n                table: \"cs_ContentProject\",\n                maxLength: 50,\n                nullable: true,\n                defaultValue: \"html\");\n        }\n\n        protected override void Down(MigrationBuilder migrationBuilder)\n        {\n            migrationBuilder.DropColumn(\n                name: \"ContentType\",\n                table: \"cs_Post\");\n\n            migrationBuilder.DropColumn(\n                name: \"ContentType\",\n                table: \"cs_Page\");\n\n            migrationBuilder.DropColumn(\n                name: \"DefaultContentType\",\n                table: \"cs_ContentProject\");\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.MySQL/Migrations/20180122125337_changes20180122.Designer.cs",
    "content": "﻿// <auto-generated />\nusing cloudscribe.SimpleContent.Models;\nusing cloudscribe.SimpleContent.Storage.EFCore.MySQL;\nusing Microsoft.EntityFrameworkCore;\nusing Microsoft.EntityFrameworkCore.Infrastructure;\nusing Microsoft.EntityFrameworkCore.Metadata;\nusing Microsoft.EntityFrameworkCore.Migrations;\nusing Microsoft.EntityFrameworkCore.Storage;\nusing Microsoft.EntityFrameworkCore.Storage.Internal;\nusing System;\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.MySQL.Migrations\n{\n    [DbContext(typeof(SimpleContentDbContext))]\n    [Migration(\"20180122125337_changes20180122\")]\n    partial class changes20180122\n    {\n        protected override void BuildTargetModel(ModelBuilder modelBuilder)\n        {\n#pragma warning disable 612, 618\n            modelBuilder\n                .HasAnnotation(\"MySql:ValueGenerationStrategy\", MySqlValueGenerationStrategy.IdentityColumn)\n                .HasAnnotation(\"ProductVersion\", \"2.0.1-rtm-125\");\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Models.ProjectSettings\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<bool>(\"AddBlogToPagesTree\");\n\n                    b.Property<byte>(\"AutoTeaserMode\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue((byte)0);\n\n                    b.Property<bool>(\"BlogMenuLinksToNewestPost\");\n\n                    b.Property<string>(\"BlogPageNavComponentVisibility\")\n                        .HasMaxLength(255);\n\n                    b.Property<int>(\"BlogPagePosition\");\n\n                    b.Property<string>(\"BlogPageText\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CdnUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ChannelCategoriesCsv\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ChannelRating\")\n                        .HasMaxLength(100);\n\n                    b.Property<int>(\"ChannelTimeToLive\");\n\n                    b.Property<string>(\"CommentNotificationEmail\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"CopyrightNotice\")\n                        .HasMaxLength(255);\n\n                    b.Property<int>(\"DaysToComment\");\n\n                    b.Property<string>(\"DefaultContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue(\"html\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"DefaultPageSlug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Description\");\n\n                    b.Property<string>(\"DisqusShortName\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"EmailFromAddress\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"FacebookAppId\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Image\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"IncludePubDateInPostUrls\");\n\n                    b.Property<string>(\"LanguageCode\")\n                        .HasMaxLength(10);\n\n                    b.Property<string>(\"LocalMediaVirtualPath\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ManagingEditorEmail\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"ModerateComments\");\n\n                    b.Property<int>(\"PostsPerPage\");\n\n                    b.Property<string>(\"PubDateFormat\")\n                        .HasMaxLength(75);\n\n                    b.Property<string>(\"Publisher\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"PublisherEntityType\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PublisherLogoHeight\")\n                        .HasMaxLength(20);\n\n                    b.Property<string>(\"PublisherLogoUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"PublisherLogoWidth\")\n                        .HasMaxLength(20);\n\n                    b.Property<string>(\"RecaptchaPrivateKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RecaptchaPublicKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RemoteFeedProcessorUseAgentFragment\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RemoteFeedUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"ShowFeaturedPostsOnDefaultPage\");\n\n                    b.Property<bool>(\"ShowRecentPostsOnDefaultPage\");\n\n                    b.Property<bool>(\"ShowTitle\");\n\n                    b.Property<string>(\"SiteName\")\n                        .HasMaxLength(200);\n\n                    b.Property<string>(\"SmtpPassword\");\n\n                    b.Property<int>(\"SmtpPort\");\n\n                    b.Property<string>(\"SmtpPreferredEncoding\")\n                        .HasMaxLength(20);\n\n                    b.Property<bool>(\"SmtpRequiresAuth\");\n\n                    b.Property<string>(\"SmtpServer\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"SmtpUseSsl\");\n\n                    b.Property<string>(\"SmtpUser\")\n                        .HasMaxLength(500);\n\n                    b.Property<int>(\"TeaserTruncationLength\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue(20);\n\n                    b.Property<byte>(\"TeaserTruncationMode\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue((byte)0);\n\n                    b.Property<string>(\"TimeZoneId\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Title\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"TwitterCreator\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"TwitterPublisher\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"UseDefaultPageAsRootNode\");\n\n                    b.Property<bool>(\"UseMetaDescriptionInFeed\");\n\n                    b.Property<string>(\"WebmasterEmail\")\n                        .HasMaxLength(100);\n\n                    b.HasKey(\"Id\");\n\n                    b.ToTable(\"cs_ContentProject\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageCategory\", b =>\n                {\n                    b.Property<string>(\"Value\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.HasKey(\"Value\", \"PageEntityId\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.HasIndex(\"Value\");\n\n                    b.ToTable(\"cs_PageCategory\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"Email\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Ip\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"IsAdmin\");\n\n                    b.Property<bool>(\"IsApproved\");\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<DateTime>(\"PubDate\");\n\n                    b.Property<string>(\"UserAgent\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Website\")\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_PageComment\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue(\"html\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"DisableEditor\");\n\n                    b.Property<string>(\"ExternalUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"IsPublished\");\n\n                    b.Property<DateTime>(\"LastModified\");\n\n                    b.Property<string>(\"MenuFilters\")\n                        .HasMaxLength(500);\n\n                    b.Property<bool>(\"MenuOnly\");\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"MetaHtml\");\n\n                    b.Property<string>(\"MetaJson\");\n\n                    b.Property<int>(\"PageOrder\");\n\n                    b.Property<string>(\"ParentId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ParentSlug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<DateTime>(\"PubDate\");\n\n                    b.Property<bool>(\"ShowCategories\");\n\n                    b.Property<bool>(\"ShowComments\");\n\n                    b.Property<bool>(\"ShowHeading\");\n\n                    b.Property<bool>(\"ShowLastModified\");\n\n                    b.Property<bool>(\"ShowMenu\");\n\n                    b.Property<bool>(\"ShowPubDate\");\n\n                    b.Property<string>(\"Slug\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ViewRoles\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"ParentId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_Page\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageResourceEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Environment\")\n                        .IsRequired()\n                        .HasMaxLength(15);\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<int>(\"Sort\");\n\n                    b.Property<string>(\"Type\")\n                        .IsRequired()\n                        .HasMaxLength(10);\n\n                    b.Property<string>(\"Url\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.ToTable(\"cs_PageResource\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostCategory\", b =>\n                {\n                    b.Property<string>(\"Value\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PostEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.HasKey(\"Value\", \"PostEntityId\");\n\n                    b.HasIndex(\"PostEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.HasIndex(\"Value\");\n\n                    b.ToTable(\"cs_PostCategory\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"Email\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Ip\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"IsAdmin\");\n\n                    b.Property<bool>(\"IsApproved\");\n\n                    b.Property<string>(\"PostEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<DateTime>(\"PubDate\");\n\n                    b.Property<string>(\"UserAgent\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Website\")\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PostEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_PostComment\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"BlogId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue(\"html\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ImageUrl\")\n                        .HasMaxLength(250);\n\n                    b.Property<bool>(\"IsFeatured\");\n\n                    b.Property<bool>(\"IsPublished\");\n\n                    b.Property<DateTime>(\"LastModified\");\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"MetaHtml\");\n\n                    b.Property<string>(\"MetaJson\");\n\n                    b.Property<DateTime>(\"PubDate\");\n\n                    b.Property<string>(\"Slug\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"SuppressAutoTeaser\");\n\n                    b.Property<string>(\"TeaserOverride\");\n\n                    b.Property<string>(\"ThumbnailUrl\")\n                        .HasMaxLength(250);\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"BlogId\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"Slug\");\n\n                    b.ToTable(\"cs_Post\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\")\n                        .WithMany(\"PageComments\")\n                        .HasForeignKey(\"PageEntityId\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageResourceEntity\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\")\n                        .WithMany(\"PageResources\")\n                        .HasForeignKey(\"PageEntityId\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\")\n                        .WithMany(\"PostComments\")\n                        .HasForeignKey(\"PostEntityId\");\n                });\n#pragma warning restore 612, 618\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.MySQL/Migrations/20180122125337_changes20180122.cs",
    "content": "﻿using Microsoft.EntityFrameworkCore.Migrations;\nusing System;\nusing System.Collections.Generic;\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.MySQL.Migrations\n{\n    public partial class changes20180122 : Migration\n    {\n        protected override void Up(MigrationBuilder migrationBuilder)\n        {\n            migrationBuilder.AddColumn<bool>(\n                name: \"SuppressAutoTeaser\",\n                table: \"cs_Post\",\n                nullable: false,\n                defaultValue: false);\n\n            migrationBuilder.AddColumn<string>(\n                name: \"TeaserOverride\",\n                table: \"cs_Post\",\n                nullable: true);\n\n            migrationBuilder.AddColumn<byte>(\n                name: \"AutoTeaserMode\",\n                table: \"cs_ContentProject\",\n                nullable: false,\n                defaultValue: (byte)0);\n\n            migrationBuilder.AddColumn<int>(\n                name: \"TeaserTruncationLength\",\n                table: \"cs_ContentProject\",\n                nullable: false,\n                defaultValue: 20);\n\n            migrationBuilder.AddColumn<byte>(\n                name: \"TeaserTruncationMode\",\n                table: \"cs_ContentProject\",\n                nullable: false,\n                defaultValue: (byte)0);\n        }\n\n        protected override void Down(MigrationBuilder migrationBuilder)\n        {\n            migrationBuilder.DropColumn(\n                name: \"SuppressAutoTeaser\",\n                table: \"cs_Post\");\n\n            migrationBuilder.DropColumn(\n                name: \"TeaserOverride\",\n                table: \"cs_Post\");\n\n            migrationBuilder.DropColumn(\n                name: \"AutoTeaserMode\",\n                table: \"cs_ContentProject\");\n\n            migrationBuilder.DropColumn(\n                name: \"TeaserTruncationLength\",\n                table: \"cs_ContentProject\");\n\n            migrationBuilder.DropColumn(\n                name: \"TeaserTruncationMode\",\n                table: \"cs_ContentProject\");\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.MySQL/Migrations/20180206125859_simplecontentchanges20180206.Designer.cs",
    "content": "﻿// <auto-generated />\nusing cloudscribe.SimpleContent.Models;\nusing cloudscribe.SimpleContent.Storage.EFCore.MySQL;\nusing Microsoft.EntityFrameworkCore;\nusing Microsoft.EntityFrameworkCore.Infrastructure;\nusing Microsoft.EntityFrameworkCore.Metadata;\nusing Microsoft.EntityFrameworkCore.Migrations;\nusing Microsoft.EntityFrameworkCore.Storage;\nusing Microsoft.EntityFrameworkCore.Storage.Internal;\nusing System;\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.MySQL.Migrations\n{\n    [DbContext(typeof(SimpleContentDbContext))]\n    [Migration(\"20180206125859_simplecontentchanges20180206\")]\n    partial class simplecontentchanges20180206\n    {\n        protected override void BuildTargetModel(ModelBuilder modelBuilder)\n        {\n#pragma warning disable 612, 618\n            modelBuilder\n                .HasAnnotation(\"MySql:ValueGenerationStrategy\", MySqlValueGenerationStrategy.IdentityColumn)\n                .HasAnnotation(\"ProductVersion\", \"2.0.1-rtm-125\");\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Models.ProjectSettings\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<bool>(\"AddBlogToPagesTree\");\n\n                    b.Property<bool>(\"BlogMenuLinksToNewestPost\");\n\n                    b.Property<string>(\"BlogPageNavComponentVisibility\")\n                        .HasMaxLength(255);\n\n                    b.Property<int>(\"BlogPagePosition\");\n\n                    b.Property<string>(\"BlogPageText\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CdnUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ChannelCategoriesCsv\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ChannelRating\")\n                        .HasMaxLength(100);\n\n                    b.Property<int>(\"ChannelTimeToLive\");\n\n                    b.Property<string>(\"CommentNotificationEmail\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"CopyrightNotice\")\n                        .HasMaxLength(255);\n\n                    b.Property<int>(\"DaysToComment\");\n\n                    b.Property<string>(\"DefaultContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue(\"html\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"DefaultPageSlug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Description\");\n\n                    b.Property<string>(\"DisqusShortName\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"EmailFromAddress\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"FacebookAppId\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Image\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"IncludePubDateInPostUrls\");\n\n                    b.Property<string>(\"LanguageCode\")\n                        .HasMaxLength(10);\n\n                    b.Property<string>(\"LocalMediaVirtualPath\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ManagingEditorEmail\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"ModerateComments\");\n\n                    b.Property<int>(\"PostsPerPage\");\n\n                    b.Property<string>(\"PubDateFormat\")\n                        .HasMaxLength(75);\n\n                    b.Property<string>(\"Publisher\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"PublisherEntityType\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PublisherLogoHeight\")\n                        .HasMaxLength(20);\n\n                    b.Property<string>(\"PublisherLogoUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"PublisherLogoWidth\")\n                        .HasMaxLength(20);\n\n                    b.Property<string>(\"RecaptchaPrivateKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RecaptchaPublicKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RemoteFeedProcessorUseAgentFragment\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RemoteFeedUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"ShowFeaturedPostsOnDefaultPage\");\n\n                    b.Property<bool>(\"ShowRecentPostsOnDefaultPage\");\n\n                    b.Property<bool>(\"ShowTitle\");\n\n                    b.Property<string>(\"SiteName\")\n                        .HasMaxLength(200);\n\n                    b.Property<string>(\"SmtpPassword\");\n\n                    b.Property<int>(\"SmtpPort\");\n\n                    b.Property<string>(\"SmtpPreferredEncoding\")\n                        .HasMaxLength(20);\n\n                    b.Property<bool>(\"SmtpRequiresAuth\");\n\n                    b.Property<string>(\"SmtpServer\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"SmtpUseSsl\");\n\n                    b.Property<string>(\"SmtpUser\")\n                        .HasMaxLength(500);\n\n                    b.Property<byte>(\"TeaserMode\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue((byte)0);\n\n                    b.Property<int>(\"TeaserTruncationLength\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue(20);\n\n                    b.Property<byte>(\"TeaserTruncationMode\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue((byte)0);\n\n                    b.Property<string>(\"TimeZoneId\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Title\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"TwitterCreator\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"TwitterPublisher\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"UseDefaultPageAsRootNode\");\n\n                    b.Property<string>(\"WebmasterEmail\")\n                        .HasMaxLength(100);\n\n                    b.HasKey(\"Id\");\n\n                    b.ToTable(\"cs_ContentProject\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageCategory\", b =>\n                {\n                    b.Property<string>(\"Value\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.HasKey(\"Value\", \"PageEntityId\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.HasIndex(\"Value\");\n\n                    b.ToTable(\"cs_PageCategory\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"Email\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Ip\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"IsAdmin\");\n\n                    b.Property<bool>(\"IsApproved\");\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<DateTime>(\"PubDate\");\n\n                    b.Property<string>(\"UserAgent\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Website\")\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_PageComment\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue(\"html\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"DisableEditor\");\n\n                    b.Property<string>(\"ExternalUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"IsPublished\");\n\n                    b.Property<DateTime>(\"LastModified\");\n\n                    b.Property<string>(\"MenuFilters\")\n                        .HasMaxLength(500);\n\n                    b.Property<bool>(\"MenuOnly\");\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"MetaHtml\");\n\n                    b.Property<string>(\"MetaJson\");\n\n                    b.Property<int>(\"PageOrder\");\n\n                    b.Property<string>(\"ParentId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ParentSlug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<DateTime>(\"PubDate\");\n\n                    b.Property<bool>(\"ShowCategories\");\n\n                    b.Property<bool>(\"ShowComments\");\n\n                    b.Property<bool>(\"ShowHeading\");\n\n                    b.Property<bool>(\"ShowLastModified\");\n\n                    b.Property<bool>(\"ShowMenu\");\n\n                    b.Property<bool>(\"ShowPubDate\");\n\n                    b.Property<string>(\"Slug\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ViewRoles\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"ParentId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_Page\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageResourceEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Environment\")\n                        .IsRequired()\n                        .HasMaxLength(15);\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<int>(\"Sort\");\n\n                    b.Property<string>(\"Type\")\n                        .IsRequired()\n                        .HasMaxLength(10);\n\n                    b.Property<string>(\"Url\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.ToTable(\"cs_PageResource\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostCategory\", b =>\n                {\n                    b.Property<string>(\"Value\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PostEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.HasKey(\"Value\", \"PostEntityId\");\n\n                    b.HasIndex(\"PostEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.HasIndex(\"Value\");\n\n                    b.ToTable(\"cs_PostCategory\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"Email\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Ip\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"IsAdmin\");\n\n                    b.Property<bool>(\"IsApproved\");\n\n                    b.Property<string>(\"PostEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<DateTime>(\"PubDate\");\n\n                    b.Property<string>(\"UserAgent\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Website\")\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PostEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_PostComment\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"BlogId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue(\"html\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ImageUrl\")\n                        .HasMaxLength(250);\n\n                    b.Property<bool>(\"IsFeatured\");\n\n                    b.Property<bool>(\"IsPublished\");\n\n                    b.Property<DateTime>(\"LastModified\");\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"MetaHtml\");\n\n                    b.Property<string>(\"MetaJson\");\n\n                    b.Property<DateTime>(\"PubDate\");\n\n                    b.Property<string>(\"Slug\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"SuppressTeaser\");\n\n                    b.Property<string>(\"TeaserOverride\");\n\n                    b.Property<string>(\"ThumbnailUrl\")\n                        .HasMaxLength(250);\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"BlogId\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"Slug\");\n\n                    b.ToTable(\"cs_Post\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\")\n                        .WithMany(\"PageComments\")\n                        .HasForeignKey(\"PageEntityId\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageResourceEntity\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\")\n                        .WithMany(\"PageResources\")\n                        .HasForeignKey(\"PageEntityId\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\")\n                        .WithMany(\"PostComments\")\n                        .HasForeignKey(\"PostEntityId\");\n                });\n#pragma warning restore 612, 618\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.MySQL/Migrations/20180206125859_simplecontentchanges20180206.cs",
    "content": "﻿using Microsoft.EntityFrameworkCore.Migrations;\nusing System;\nusing System.Collections.Generic;\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.MySQL.Migrations\n{\n    public partial class simplecontentchanges20180206 : Migration\n    {\n        protected override void Up(MigrationBuilder migrationBuilder)\n        {\n            migrationBuilder.DropColumn(\n                name: \"AutoTeaserMode\",\n                table: \"cs_ContentProject\");\n\n            migrationBuilder.DropColumn(\n                name: \"UseMetaDescriptionInFeed\",\n                table: \"cs_ContentProject\");\n\n            migrationBuilder.DropColumn(\n                name: \"SuppressAutoTeaser\",\n                table: \"cs_Post\");\n\n            //migrationBuilder.RenameColumn(\n            //    name: \"SuppressAutoTeaser\",\n            //    table: \"cs_Post\",\n            //    newName: \"SuppressTeaser\");\n\n            migrationBuilder.AddColumn<bool>(\n                name: \"SuppressTeaser\",\n                table: \"cs_Post\",\n                nullable: false,\n                defaultValue: false);\n\n            migrationBuilder.AddColumn<byte>(\n                name: \"TeaserMode\",\n                table: \"cs_ContentProject\",\n                nullable: false,\n                defaultValue: (byte)0);\n        }\n\n        protected override void Down(MigrationBuilder migrationBuilder)\n        {\n            migrationBuilder.DropColumn(\n                name: \"TeaserMode\",\n                table: \"cs_ContentProject\");\n\n            migrationBuilder.RenameColumn(\n                name: \"SuppressTeaser\",\n                table: \"cs_Post\",\n                newName: \"SuppressAutoTeaser\");\n\n            migrationBuilder.AddColumn<byte>(\n                name: \"AutoTeaserMode\",\n                table: \"cs_ContentProject\",\n                nullable: false,\n                defaultValue: (byte)0);\n\n            migrationBuilder.AddColumn<bool>(\n                name: \"UseMetaDescriptionInFeed\",\n                table: \"cs_ContentProject\",\n                nullable: false,\n                defaultValue: false);\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.MySQL/Migrations/20180315174230_simplecontent_changes20180315.Designer.cs",
    "content": "﻿// <auto-generated />\nusing cloudscribe.SimpleContent.Models;\nusing cloudscribe.SimpleContent.Storage.EFCore.MySQL;\nusing Microsoft.EntityFrameworkCore;\nusing Microsoft.EntityFrameworkCore.Infrastructure;\nusing Microsoft.EntityFrameworkCore.Metadata;\nusing Microsoft.EntityFrameworkCore.Migrations;\nusing Microsoft.EntityFrameworkCore.Storage;\nusing Microsoft.EntityFrameworkCore.Storage.Internal;\nusing System;\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.MySQL.Migrations\n{\n    [DbContext(typeof(SimpleContentDbContext))]\n    [Migration(\"20180315174230_simplecontent_changes20180315\")]\n    partial class simplecontent_changes20180315\n    {\n        protected override void BuildTargetModel(ModelBuilder modelBuilder)\n        {\n#pragma warning disable 612, 618\n            modelBuilder\n                .HasAnnotation(\"MySql:ValueGenerationStrategy\", MySqlValueGenerationStrategy.IdentityColumn)\n                .HasAnnotation(\"ProductVersion\", \"2.0.2-rtm-10011\");\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Models.ProjectSettings\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<bool>(\"AddBlogToPagesTree\");\n\n                    b.Property<bool>(\"BlogMenuLinksToNewestPost\");\n\n                    b.Property<string>(\"BlogPageNavComponentVisibility\")\n                        .HasMaxLength(255);\n\n                    b.Property<int>(\"BlogPagePosition\");\n\n                    b.Property<string>(\"BlogPageText\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CdnUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ChannelCategoriesCsv\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ChannelRating\")\n                        .HasMaxLength(100);\n\n                    b.Property<int>(\"ChannelTimeToLive\");\n\n                    b.Property<string>(\"CommentNotificationEmail\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"CopyrightNotice\")\n                        .HasMaxLength(255);\n\n                    b.Property<int>(\"DaysToComment\");\n\n                    b.Property<string>(\"DefaultContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue(\"html\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"DefaultPageSlug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Description\");\n\n                    b.Property<string>(\"DisqusShortName\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"FacebookAppId\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Image\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"IncludePubDateInPostUrls\");\n\n                    b.Property<string>(\"LanguageCode\")\n                        .HasMaxLength(10);\n\n                    b.Property<string>(\"LocalMediaVirtualPath\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ManagingEditorEmail\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"ModerateComments\");\n\n                    b.Property<int>(\"PostsPerPage\");\n\n                    b.Property<string>(\"PubDateFormat\")\n                        .HasMaxLength(75);\n\n                    b.Property<string>(\"Publisher\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"PublisherEntityType\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PublisherLogoHeight\")\n                        .HasMaxLength(20);\n\n                    b.Property<string>(\"PublisherLogoUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"PublisherLogoWidth\")\n                        .HasMaxLength(20);\n\n                    b.Property<string>(\"RecaptchaPrivateKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RecaptchaPublicKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RemoteFeedProcessorUseAgentFragment\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RemoteFeedUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"ShowFeaturedPostsOnDefaultPage\");\n\n                    b.Property<bool>(\"ShowRecentPostsOnDefaultPage\");\n\n                    b.Property<bool>(\"ShowTitle\");\n\n                    b.Property<string>(\"SiteName\")\n                        .HasMaxLength(200);\n\n                    b.Property<byte>(\"TeaserMode\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue((byte)0);\n\n                    b.Property<int>(\"TeaserTruncationLength\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue(20);\n\n                    b.Property<byte>(\"TeaserTruncationMode\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue((byte)0);\n\n                    b.Property<string>(\"TimeZoneId\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Title\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"TwitterCreator\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"TwitterPublisher\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"UseDefaultPageAsRootNode\");\n\n                    b.Property<string>(\"WebmasterEmail\")\n                        .HasMaxLength(100);\n\n                    b.HasKey(\"Id\");\n\n                    b.ToTable(\"cs_ContentProject\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageCategory\", b =>\n                {\n                    b.Property<string>(\"Value\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.HasKey(\"Value\", \"PageEntityId\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.HasIndex(\"Value\");\n\n                    b.ToTable(\"cs_PageCategory\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"Email\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Ip\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"IsAdmin\");\n\n                    b.Property<bool>(\"IsApproved\");\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<DateTime>(\"PubDate\");\n\n                    b.Property<string>(\"UserAgent\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Website\")\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_PageComment\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue(\"html\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"DisableEditor\");\n\n                    b.Property<string>(\"ExternalUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"IsPublished\");\n\n                    b.Property<DateTime>(\"LastModified\");\n\n                    b.Property<string>(\"MenuFilters\")\n                        .HasMaxLength(500);\n\n                    b.Property<bool>(\"MenuOnly\");\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"MetaHtml\");\n\n                    b.Property<string>(\"MetaJson\");\n\n                    b.Property<int>(\"PageOrder\");\n\n                    b.Property<string>(\"ParentId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ParentSlug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<DateTime>(\"PubDate\");\n\n                    b.Property<bool>(\"ShowCategories\");\n\n                    b.Property<bool>(\"ShowComments\");\n\n                    b.Property<bool>(\"ShowHeading\");\n\n                    b.Property<bool>(\"ShowLastModified\");\n\n                    b.Property<bool>(\"ShowMenu\");\n\n                    b.Property<bool>(\"ShowPubDate\");\n\n                    b.Property<string>(\"Slug\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ViewRoles\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"ParentId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_Page\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageResourceEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Environment\")\n                        .IsRequired()\n                        .HasMaxLength(15);\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<int>(\"Sort\");\n\n                    b.Property<string>(\"Type\")\n                        .IsRequired()\n                        .HasMaxLength(10);\n\n                    b.Property<string>(\"Url\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.ToTable(\"cs_PageResource\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostCategory\", b =>\n                {\n                    b.Property<string>(\"Value\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PostEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.HasKey(\"Value\", \"PostEntityId\");\n\n                    b.HasIndex(\"PostEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.HasIndex(\"Value\");\n\n                    b.ToTable(\"cs_PostCategory\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"Email\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Ip\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"IsAdmin\");\n\n                    b.Property<bool>(\"IsApproved\");\n\n                    b.Property<string>(\"PostEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<DateTime>(\"PubDate\");\n\n                    b.Property<string>(\"UserAgent\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Website\")\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PostEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_PostComment\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"BlogId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue(\"html\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ImageUrl\")\n                        .HasMaxLength(250);\n\n                    b.Property<bool>(\"IsFeatured\");\n\n                    b.Property<bool>(\"IsPublished\");\n\n                    b.Property<DateTime>(\"LastModified\");\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"MetaHtml\");\n\n                    b.Property<string>(\"MetaJson\");\n\n                    b.Property<DateTime>(\"PubDate\");\n\n                    b.Property<string>(\"Slug\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"SuppressTeaser\");\n\n                    b.Property<string>(\"TeaserOverride\");\n\n                    b.Property<string>(\"ThumbnailUrl\")\n                        .HasMaxLength(250);\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"BlogId\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"Slug\");\n\n                    b.ToTable(\"cs_Post\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\")\n                        .WithMany(\"PageComments\")\n                        .HasForeignKey(\"PageEntityId\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageResourceEntity\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\")\n                        .WithMany(\"PageResources\")\n                        .HasForeignKey(\"PageEntityId\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\")\n                        .WithMany(\"PostComments\")\n                        .HasForeignKey(\"PostEntityId\");\n                });\n#pragma warning restore 612, 618\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.MySQL/Migrations/20180315174230_simplecontent_changes20180315.cs",
    "content": "﻿using Microsoft.EntityFrameworkCore.Migrations;\nusing System;\nusing System.Collections.Generic;\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.MySQL.Migrations\n{\n    public partial class simplecontent_changes20180315 : Migration\n    {\n        protected override void Up(MigrationBuilder migrationBuilder)\n        {\n            migrationBuilder.DropColumn(\n                name: \"EmailFromAddress\",\n                table: \"cs_ContentProject\");\n\n            migrationBuilder.DropColumn(\n                name: \"SmtpPassword\",\n                table: \"cs_ContentProject\");\n\n            migrationBuilder.DropColumn(\n                name: \"SmtpPort\",\n                table: \"cs_ContentProject\");\n\n            migrationBuilder.DropColumn(\n                name: \"SmtpPreferredEncoding\",\n                table: \"cs_ContentProject\");\n\n            migrationBuilder.DropColumn(\n                name: \"SmtpRequiresAuth\",\n                table: \"cs_ContentProject\");\n\n            migrationBuilder.DropColumn(\n                name: \"SmtpServer\",\n                table: \"cs_ContentProject\");\n\n            migrationBuilder.DropColumn(\n                name: \"SmtpUseSsl\",\n                table: \"cs_ContentProject\");\n\n            migrationBuilder.DropColumn(\n                name: \"SmtpUser\",\n                table: \"cs_ContentProject\");\n        }\n\n        protected override void Down(MigrationBuilder migrationBuilder)\n        {\n            migrationBuilder.AddColumn<string>(\n                name: \"EmailFromAddress\",\n                table: \"cs_ContentProject\",\n                maxLength: 100,\n                nullable: true);\n\n            migrationBuilder.AddColumn<string>(\n                name: \"SmtpPassword\",\n                table: \"cs_ContentProject\",\n                nullable: true);\n\n            migrationBuilder.AddColumn<int>(\n                name: \"SmtpPort\",\n                table: \"cs_ContentProject\",\n                nullable: false,\n                defaultValue: 0);\n\n            migrationBuilder.AddColumn<string>(\n                name: \"SmtpPreferredEncoding\",\n                table: \"cs_ContentProject\",\n                maxLength: 20,\n                nullable: true);\n\n            migrationBuilder.AddColumn<bool>(\n                name: \"SmtpRequiresAuth\",\n                table: \"cs_ContentProject\",\n                nullable: false,\n                defaultValue: false);\n\n            migrationBuilder.AddColumn<string>(\n                name: \"SmtpServer\",\n                table: \"cs_ContentProject\",\n                maxLength: 100,\n                nullable: true);\n\n            migrationBuilder.AddColumn<bool>(\n                name: \"SmtpUseSsl\",\n                table: \"cs_ContentProject\",\n                nullable: false,\n                defaultValue: false);\n\n            migrationBuilder.AddColumn<string>(\n                name: \"SmtpUser\",\n                table: \"cs_ContentProject\",\n                maxLength: 500,\n                nullable: true);\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.MySQL/Migrations/20180704183709_simplecontent-20180704.Designer.cs",
    "content": "﻿// <auto-generated />\nusing System;\nusing Microsoft.EntityFrameworkCore;\nusing Microsoft.EntityFrameworkCore.Infrastructure;\nusing Microsoft.EntityFrameworkCore.Migrations;\nusing Microsoft.EntityFrameworkCore.Storage.ValueConversion;\nusing cloudscribe.SimpleContent.Models;\nusing cloudscribe.SimpleContent.Storage.EFCore.MySQL;\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.MySQL.Migrations\n{\n    [DbContext(typeof(SimpleContentDbContext))]\n    [Migration(\"20180704183709_simplecontent-20180704\")]\n    partial class simplecontent20180704\n    {\n        protected override void BuildTargetModel(ModelBuilder modelBuilder)\n        {\n#pragma warning disable 612, 618\n            modelBuilder\n                .HasAnnotation(\"ProductVersion\", \"2.1.0-rtm-30799\")\n                .HasAnnotation(\"Relational:MaxIdentifierLength\", 64);\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Models.ContentHistory\", b =>\n                {\n                    b.Property<Guid>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ArchivedBy\")\n                        .HasMaxLength(255);\n\n                    b.Property<DateTime>(\"ArchivedUtc\");\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"ContentId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ContentSource\")\n                        .IsRequired()\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CreatedByUser\")\n                        .HasMaxLength(100);\n\n                    b.Property<DateTime>(\"CreatedUtc\");\n\n                    b.Property<string>(\"DraftAuthor\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"DraftContent\");\n\n                    b.Property<DateTime?>(\"DraftPubDate\");\n\n                    b.Property<string>(\"DraftSerializedModel\");\n\n                    b.Property<bool>(\"IsDraftHx\");\n\n                    b.Property<bool>(\"IsPublished\");\n\n                    b.Property<DateTime>(\"LastModified\");\n\n                    b.Property<string>(\"LastModifiedByUser\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"ProjectId\");\n\n                    b.Property<DateTime?>(\"PubDate\");\n\n                    b.Property<string>(\"SerializedModel\");\n\n                    b.Property<string>(\"Slug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"TeaserOverride\");\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"WasDeleted\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"ContentId\");\n\n                    b.HasIndex(\"ContentSource\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"CreatedByUser\");\n\n                    b.HasIndex(\"LastModifiedByUser\");\n\n                    b.HasIndex(\"Title\");\n\n                    b.ToTable(\"cs_ContentHistory\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Models.ProjectSettings\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<bool>(\"AddBlogToPagesTree\");\n\n                    b.Property<bool>(\"BlogMenuLinksToNewestPost\");\n\n                    b.Property<string>(\"BlogPageNavComponentVisibility\")\n                        .HasMaxLength(255);\n\n                    b.Property<int>(\"BlogPagePosition\");\n\n                    b.Property<string>(\"BlogPageText\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CdnUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ChannelCategoriesCsv\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ChannelRating\")\n                        .HasMaxLength(100);\n\n                    b.Property<int>(\"ChannelTimeToLive\");\n\n                    b.Property<string>(\"CommentNotificationEmail\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"CopyrightNotice\")\n                        .HasMaxLength(255);\n\n                    b.Property<int>(\"DaysToComment\");\n\n                    b.Property<string>(\"DefaultContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<int>(\"DefaultFeedItems\");\n\n                    b.Property<string>(\"DefaultPageSlug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Description\");\n\n                    b.Property<string>(\"DisqusShortName\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"FacebookAppId\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Image\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"IncludePubDateInPostUrls\");\n\n                    b.Property<string>(\"LanguageCode\")\n                        .HasMaxLength(10);\n\n                    b.Property<string>(\"LocalMediaVirtualPath\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ManagingEditorEmail\")\n                        .HasMaxLength(100);\n\n                    b.Property<int>(\"MaxFeedItems\");\n\n                    b.Property<bool>(\"ModerateComments\");\n\n                    b.Property<int>(\"PostsPerPage\");\n\n                    b.Property<string>(\"PubDateFormat\")\n                        .HasMaxLength(75);\n\n                    b.Property<string>(\"Publisher\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"PublisherEntityType\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PublisherLogoHeight\")\n                        .HasMaxLength(20);\n\n                    b.Property<string>(\"PublisherLogoUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"PublisherLogoWidth\")\n                        .HasMaxLength(20);\n\n                    b.Property<string>(\"RecaptchaPrivateKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RecaptchaPublicKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RemoteFeedProcessorUseAgentFragment\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RemoteFeedUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"ShowFeaturedPostsOnDefaultPage\");\n\n                    b.Property<bool>(\"ShowRecentPostsOnDefaultPage\");\n\n                    b.Property<bool>(\"ShowTitle\");\n\n                    b.Property<string>(\"SiteName\")\n                        .HasMaxLength(200);\n\n                    b.Property<byte>(\"TeaserMode\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue((byte)0);\n\n                    b.Property<int>(\"TeaserTruncationLength\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue(20);\n\n                    b.Property<byte>(\"TeaserTruncationMode\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue((byte)0);\n\n                    b.Property<string>(\"TimeZoneId\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Title\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"TwitterCreator\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"TwitterPublisher\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"UseDefaultPageAsRootNode\");\n\n                    b.Property<string>(\"WebmasterEmail\")\n                        .HasMaxLength(100);\n\n                    b.HasKey(\"Id\");\n\n                    b.ToTable(\"cs_ContentProject\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageCategory\", b =>\n                {\n                    b.Property<string>(\"Value\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.HasKey(\"Value\", \"PageEntityId\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.HasIndex(\"Value\");\n\n                    b.ToTable(\"cs_PageCategory\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"Email\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Ip\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"IsAdmin\");\n\n                    b.Property<bool>(\"IsApproved\");\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<DateTime>(\"PubDate\");\n\n                    b.Property<string>(\"UserAgent\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Website\")\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_PageComment\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CreatedByUser\")\n                        .HasMaxLength(100);\n\n                    b.Property<DateTime>(\"CreatedUtc\");\n\n                    b.Property<bool>(\"DisableEditor\");\n\n                    b.Property<string>(\"DraftAuthor\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"DraftContent\");\n\n                    b.Property<DateTime?>(\"DraftPubDate\");\n\n                    b.Property<string>(\"DraftSerializedModel\");\n\n                    b.Property<string>(\"ExternalUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"IsPublished\");\n\n                    b.Property<DateTime>(\"LastModified\");\n\n                    b.Property<string>(\"LastModifiedByUser\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"MenuFilters\")\n                        .HasMaxLength(500);\n\n                    b.Property<bool>(\"MenuOnly\");\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"MetaHtml\");\n\n                    b.Property<string>(\"MetaJson\");\n\n                    b.Property<int>(\"PageOrder\");\n\n                    b.Property<string>(\"ParentId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ParentSlug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<DateTime?>(\"PubDate\");\n\n                    b.Property<string>(\"SerializedModel\");\n\n                    b.Property<string>(\"Serializer\")\n                        .HasMaxLength(50);\n\n                    b.Property<bool>(\"ShowCategories\");\n\n                    b.Property<bool>(\"ShowComments\");\n\n                    b.Property<bool>(\"ShowHeading\");\n\n                    b.Property<bool>(\"ShowLastModified\");\n\n                    b.Property<bool>(\"ShowMenu\");\n\n                    b.Property<bool>(\"ShowPubDate\");\n\n                    b.Property<string>(\"Slug\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"TemplateKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ViewRoles\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"ParentId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_Page\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageResourceEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Environment\")\n                        .IsRequired()\n                        .HasMaxLength(15);\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<int>(\"Sort\");\n\n                    b.Property<string>(\"Type\")\n                        .IsRequired()\n                        .HasMaxLength(10);\n\n                    b.Property<string>(\"Url\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.ToTable(\"cs_PageResource\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostCategory\", b =>\n                {\n                    b.Property<string>(\"Value\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PostEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.HasKey(\"Value\", \"PostEntityId\");\n\n                    b.HasIndex(\"PostEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.HasIndex(\"Value\");\n\n                    b.ToTable(\"cs_PostCategory\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"Email\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Ip\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"IsAdmin\");\n\n                    b.Property<bool>(\"IsApproved\");\n\n                    b.Property<string>(\"PostEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<DateTime>(\"PubDate\");\n\n                    b.Property<string>(\"UserAgent\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Website\")\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PostEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_PostComment\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"BlogId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CreatedByUser\")\n                        .HasMaxLength(100);\n\n                    b.Property<DateTime>(\"CreatedUtc\");\n\n                    b.Property<string>(\"DraftAuthor\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"DraftContent\");\n\n                    b.Property<DateTime?>(\"DraftPubDate\");\n\n                    b.Property<string>(\"DraftSerializedModel\");\n\n                    b.Property<string>(\"ImageUrl\")\n                        .HasMaxLength(250);\n\n                    b.Property<bool>(\"IsFeatured\");\n\n                    b.Property<bool>(\"IsPublished\");\n\n                    b.Property<DateTime>(\"LastModified\");\n\n                    b.Property<string>(\"LastModifiedByUser\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"MetaHtml\");\n\n                    b.Property<string>(\"MetaJson\");\n\n                    b.Property<DateTime?>(\"PubDate\");\n\n                    b.Property<string>(\"SerializedModel\");\n\n                    b.Property<string>(\"Serializer\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"Slug\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"SuppressTeaser\");\n\n                    b.Property<string>(\"TeaserOverride\");\n\n                    b.Property<string>(\"TemplateKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ThumbnailUrl\")\n                        .HasMaxLength(250);\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"BlogId\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"Slug\");\n\n                    b.ToTable(\"cs_Post\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\")\n                        .WithMany(\"PageComments\")\n                        .HasForeignKey(\"PageEntityId\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageResourceEntity\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\")\n                        .WithMany(\"PageResources\")\n                        .HasForeignKey(\"PageEntityId\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\")\n                        .WithMany(\"PostComments\")\n                        .HasForeignKey(\"PostEntityId\");\n                });\n#pragma warning restore 612, 618\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.MySQL/Migrations/20180704183709_simplecontent-20180704.cs",
    "content": "﻿using System;\nusing Microsoft.EntityFrameworkCore.Migrations;\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.MySQL.Migrations\n{\n    public partial class simplecontent20180704 : Migration\n    {\n        protected override void Up(MigrationBuilder migrationBuilder)\n        {\n            migrationBuilder.AlterColumn<DateTime>(\n                name: \"PubDate\",\n                table: \"cs_Post\",\n                nullable: true,\n                oldClrType: typeof(DateTime));\n\n            migrationBuilder.AddColumn<string>(\n                name: \"CreatedByUser\",\n                table: \"cs_Post\",\n                maxLength: 100,\n                nullable: true);\n\n            migrationBuilder.AddColumn<DateTime>(\n                name: \"CreatedUtc\",\n                table: \"cs_Post\",\n                nullable: false,\n                defaultValue: new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified));\n\n            migrationBuilder.AddColumn<string>(\n                name: \"DraftAuthor\",\n                table: \"cs_Post\",\n                maxLength: 255,\n                nullable: true);\n\n            migrationBuilder.AddColumn<string>(\n                name: \"DraftContent\",\n                table: \"cs_Post\",\n                nullable: true);\n\n            migrationBuilder.AddColumn<DateTime>(\n                name: \"DraftPubDate\",\n                table: \"cs_Post\",\n                nullable: true);\n\n            migrationBuilder.AddColumn<string>(\n                name: \"DraftSerializedModel\",\n                table: \"cs_Post\",\n                nullable: true);\n\n            migrationBuilder.AddColumn<string>(\n                name: \"LastModifiedByUser\",\n                table: \"cs_Post\",\n                maxLength: 100,\n                nullable: true);\n\n            migrationBuilder.AddColumn<string>(\n                name: \"SerializedModel\",\n                table: \"cs_Post\",\n                nullable: true);\n\n            migrationBuilder.AddColumn<string>(\n                name: \"Serializer\",\n                table: \"cs_Post\",\n                maxLength: 50,\n                nullable: true);\n\n            migrationBuilder.AddColumn<string>(\n                name: \"TemplateKey\",\n                table: \"cs_Post\",\n                maxLength: 255,\n                nullable: true);\n\n            migrationBuilder.AlterColumn<DateTime>(\n                name: \"PubDate\",\n                table: \"cs_Page\",\n                nullable: true,\n                oldClrType: typeof(DateTime));\n\n            migrationBuilder.AddColumn<string>(\n                name: \"CreatedByUser\",\n                table: \"cs_Page\",\n                maxLength: 100,\n                nullable: true);\n\n            migrationBuilder.AddColumn<DateTime>(\n                name: \"CreatedUtc\",\n                table: \"cs_Page\",\n                nullable: false,\n                defaultValue: new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified));\n\n            migrationBuilder.AddColumn<string>(\n                name: \"DraftAuthor\",\n                table: \"cs_Page\",\n                maxLength: 255,\n                nullable: true);\n\n            migrationBuilder.AddColumn<string>(\n                name: \"DraftContent\",\n                table: \"cs_Page\",\n                nullable: true);\n\n            migrationBuilder.AddColumn<DateTime>(\n                name: \"DraftPubDate\",\n                table: \"cs_Page\",\n                nullable: true);\n\n            migrationBuilder.AddColumn<string>(\n                name: \"DraftSerializedModel\",\n                table: \"cs_Page\",\n                nullable: true);\n\n            migrationBuilder.AddColumn<string>(\n                name: \"LastModifiedByUser\",\n                table: \"cs_Page\",\n                maxLength: 100,\n                nullable: true);\n\n            migrationBuilder.AddColumn<string>(\n                name: \"SerializedModel\",\n                table: \"cs_Page\",\n                nullable: true);\n\n            migrationBuilder.AddColumn<string>(\n                name: \"Serializer\",\n                table: \"cs_Page\",\n                maxLength: 50,\n                nullable: true);\n\n            migrationBuilder.AddColumn<string>(\n                name: \"TemplateKey\",\n                table: \"cs_Page\",\n                maxLength: 255,\n                nullable: true);\n\n            migrationBuilder.AddColumn<int>(\n                name: \"DefaultFeedItems\",\n                table: \"cs_ContentProject\",\n                nullable: false,\n                defaultValue: 0);\n\n            migrationBuilder.AddColumn<int>(\n                name: \"MaxFeedItems\",\n                table: \"cs_ContentProject\",\n                nullable: false,\n                defaultValue: 0);\n\n            migrationBuilder.CreateTable(\n                name: \"cs_ContentHistory\",\n                columns: table => new\n                {\n                    Id = table.Column<Guid>(maxLength: 36, nullable: false),\n                    ContentId = table.Column<string>(maxLength: 36, nullable: false),\n                    ProjectId = table.Column<string>(nullable: true),\n                    ContentSource = table.Column<string>(maxLength: 50, nullable: false),\n                    ContentType = table.Column<string>(maxLength: 50, nullable: true, defaultValue: \"html\"),\n                    Slug = table.Column<string>(maxLength: 255, nullable: true),\n                    IsDraftHx = table.Column<bool>(nullable: false),\n                    WasDeleted = table.Column<bool>(nullable: false),\n                    ArchivedUtc = table.Column<DateTime>(nullable: false),\n                    ArchivedBy = table.Column<string>(maxLength: 255, nullable: true),\n                    Title = table.Column<string>(maxLength: 255, nullable: false),\n                    Author = table.Column<string>(maxLength: 255, nullable: true),\n                    CorrelationKey = table.Column<string>(maxLength: 255, nullable: true),\n                    Content = table.Column<string>(nullable: true),\n                    PubDate = table.Column<DateTime>(nullable: true),\n                    LastModified = table.Column<DateTime>(nullable: false),\n                    IsPublished = table.Column<bool>(nullable: false),\n                    CreatedUtc = table.Column<DateTime>(nullable: false),\n                    CreatedByUser = table.Column<string>(maxLength: 100, nullable: true),\n                    LastModifiedByUser = table.Column<string>(maxLength: 100, nullable: true),\n                    DraftContent = table.Column<string>(nullable: true),\n                    DraftAuthor = table.Column<string>(maxLength: 255, nullable: true),\n                    DraftPubDate = table.Column<DateTime>(nullable: true),\n                    SerializedModel = table.Column<string>(nullable: true),\n                    DraftSerializedModel = table.Column<string>(nullable: true),\n                    TeaserOverride = table.Column<string>(nullable: true)\n                },\n                constraints: table =>\n                {\n                    table.PrimaryKey(\"PK_cs_ContentHistory\", x => x.Id);\n                });\n\n            migrationBuilder.CreateIndex(\n                name: \"IX_cs_ContentHistory_ContentId\",\n                table: \"cs_ContentHistory\",\n                column: \"ContentId\");\n\n            migrationBuilder.CreateIndex(\n                name: \"IX_cs_ContentHistory_ContentSource\",\n                table: \"cs_ContentHistory\",\n                column: \"ContentSource\");\n\n            migrationBuilder.CreateIndex(\n                name: \"IX_cs_ContentHistory_CorrelationKey\",\n                table: \"cs_ContentHistory\",\n                column: \"CorrelationKey\");\n\n            migrationBuilder.CreateIndex(\n                name: \"IX_cs_ContentHistory_CreatedByUser\",\n                table: \"cs_ContentHistory\",\n                column: \"CreatedByUser\");\n\n            migrationBuilder.CreateIndex(\n                name: \"IX_cs_ContentHistory_LastModifiedByUser\",\n                table: \"cs_ContentHistory\",\n                column: \"LastModifiedByUser\");\n\n            migrationBuilder.CreateIndex(\n                name: \"IX_cs_ContentHistory_Title\",\n                table: \"cs_ContentHistory\",\n                column: \"Title\");\n        }\n\n        protected override void Down(MigrationBuilder migrationBuilder)\n        {\n            migrationBuilder.DropTable(\n                name: \"cs_ContentHistory\");\n\n            migrationBuilder.DropColumn(\n                name: \"CreatedByUser\",\n                table: \"cs_Post\");\n\n            migrationBuilder.DropColumn(\n                name: \"CreatedUtc\",\n                table: \"cs_Post\");\n\n            migrationBuilder.DropColumn(\n                name: \"DraftAuthor\",\n                table: \"cs_Post\");\n\n            migrationBuilder.DropColumn(\n                name: \"DraftContent\",\n                table: \"cs_Post\");\n\n            migrationBuilder.DropColumn(\n                name: \"DraftPubDate\",\n                table: \"cs_Post\");\n\n            migrationBuilder.DropColumn(\n                name: \"DraftSerializedModel\",\n                table: \"cs_Post\");\n\n            migrationBuilder.DropColumn(\n                name: \"LastModifiedByUser\",\n                table: \"cs_Post\");\n\n            migrationBuilder.DropColumn(\n                name: \"SerializedModel\",\n                table: \"cs_Post\");\n\n            migrationBuilder.DropColumn(\n                name: \"Serializer\",\n                table: \"cs_Post\");\n\n            migrationBuilder.DropColumn(\n                name: \"TemplateKey\",\n                table: \"cs_Post\");\n\n            migrationBuilder.DropColumn(\n                name: \"CreatedByUser\",\n                table: \"cs_Page\");\n\n            migrationBuilder.DropColumn(\n                name: \"CreatedUtc\",\n                table: \"cs_Page\");\n\n            migrationBuilder.DropColumn(\n                name: \"DraftAuthor\",\n                table: \"cs_Page\");\n\n            migrationBuilder.DropColumn(\n                name: \"DraftContent\",\n                table: \"cs_Page\");\n\n            migrationBuilder.DropColumn(\n                name: \"DraftPubDate\",\n                table: \"cs_Page\");\n\n            migrationBuilder.DropColumn(\n                name: \"DraftSerializedModel\",\n                table: \"cs_Page\");\n\n            migrationBuilder.DropColumn(\n                name: \"LastModifiedByUser\",\n                table: \"cs_Page\");\n\n            migrationBuilder.DropColumn(\n                name: \"SerializedModel\",\n                table: \"cs_Page\");\n\n            migrationBuilder.DropColumn(\n                name: \"Serializer\",\n                table: \"cs_Page\");\n\n            migrationBuilder.DropColumn(\n                name: \"TemplateKey\",\n                table: \"cs_Page\");\n\n            migrationBuilder.DropColumn(\n                name: \"DefaultFeedItems\",\n                table: \"cs_ContentProject\");\n\n            migrationBuilder.DropColumn(\n                name: \"MaxFeedItems\",\n                table: \"cs_ContentProject\");\n\n            migrationBuilder.AlterColumn<DateTime>(\n                name: \"PubDate\",\n                table: \"cs_Post\",\n                nullable: false,\n                oldClrType: typeof(DateTime),\n                oldNullable: true);\n\n            migrationBuilder.AlterColumn<DateTime>(\n                name: \"PubDate\",\n                table: \"cs_Page\",\n                nullable: false,\n                oldClrType: typeof(DateTime),\n                oldNullable: true);\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.MySQL/Migrations/20180705124549_simplecontent-20180705.Designer.cs",
    "content": "﻿// <auto-generated />\nusing System;\nusing Microsoft.EntityFrameworkCore;\nusing Microsoft.EntityFrameworkCore.Infrastructure;\nusing Microsoft.EntityFrameworkCore.Migrations;\nusing Microsoft.EntityFrameworkCore.Storage.ValueConversion;\nusing cloudscribe.SimpleContent.Models;\nusing cloudscribe.SimpleContent.Storage.EFCore.MySQL;\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.MySQL.Migrations\n{\n    [DbContext(typeof(SimpleContentDbContext))]\n    [Migration(\"20180705124549_simplecontent-20180705\")]\n    partial class simplecontent20180705\n    {\n        protected override void BuildTargetModel(ModelBuilder modelBuilder)\n        {\n#pragma warning disable 612, 618\n            modelBuilder\n                .HasAnnotation(\"ProductVersion\", \"2.1.0-rtm-30799\")\n                .HasAnnotation(\"Relational:MaxIdentifierLength\", 64);\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Models.ContentHistory\", b =>\n                {\n                    b.Property<Guid>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ArchivedBy\")\n                        .HasMaxLength(255);\n\n                    b.Property<DateTime>(\"ArchivedUtc\");\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"ContentId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ContentSource\")\n                        .IsRequired()\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CreatedByUser\")\n                        .HasMaxLength(100);\n\n                    b.Property<DateTime>(\"CreatedUtc\");\n\n                    b.Property<string>(\"DraftAuthor\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"DraftContent\");\n\n                    b.Property<DateTime?>(\"DraftPubDate\");\n\n                    b.Property<string>(\"DraftSerializedModel\");\n\n                    b.Property<bool>(\"IsDraftHx\");\n\n                    b.Property<bool>(\"IsPublished\");\n\n                    b.Property<DateTime>(\"LastModified\");\n\n                    b.Property<string>(\"LastModifiedByUser\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"MetaDescription\");\n\n                    b.Property<string>(\"MetaHtml\");\n\n                    b.Property<string>(\"MetaJson\");\n\n                    b.Property<int>(\"PageOrder\");\n\n                    b.Property<string>(\"ParentId\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ParentSlug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ProjectId\");\n\n                    b.Property<DateTime?>(\"PubDate\");\n\n                    b.Property<string>(\"SerializedModel\");\n\n                    b.Property<string>(\"Serializer\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"Slug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"TeaserOverride\");\n\n                    b.Property<string>(\"TemplateKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ViewRoles\");\n\n                    b.Property<bool>(\"WasDeleted\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"ContentId\");\n\n                    b.HasIndex(\"ContentSource\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"CreatedByUser\");\n\n                    b.HasIndex(\"LastModifiedByUser\");\n\n                    b.HasIndex(\"Title\");\n\n                    b.ToTable(\"cs_ContentHistory\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Models.ProjectSettings\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<bool>(\"AddBlogToPagesTree\");\n\n                    b.Property<bool>(\"BlogMenuLinksToNewestPost\");\n\n                    b.Property<string>(\"BlogPageNavComponentVisibility\")\n                        .HasMaxLength(255);\n\n                    b.Property<int>(\"BlogPagePosition\");\n\n                    b.Property<string>(\"BlogPageText\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CdnUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ChannelCategoriesCsv\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ChannelRating\")\n                        .HasMaxLength(100);\n\n                    b.Property<int>(\"ChannelTimeToLive\");\n\n                    b.Property<string>(\"CommentNotificationEmail\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"CopyrightNotice\")\n                        .HasMaxLength(255);\n\n                    b.Property<int>(\"DaysToComment\");\n\n                    b.Property<string>(\"DefaultContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<int>(\"DefaultFeedItems\");\n\n                    b.Property<string>(\"DefaultPageSlug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Description\");\n\n                    b.Property<string>(\"DisqusShortName\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"FacebookAppId\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Image\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"IncludePubDateInPostUrls\");\n\n                    b.Property<string>(\"LanguageCode\")\n                        .HasMaxLength(10);\n\n                    b.Property<string>(\"LocalMediaVirtualPath\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ManagingEditorEmail\")\n                        .HasMaxLength(100);\n\n                    b.Property<int>(\"MaxFeedItems\");\n\n                    b.Property<bool>(\"ModerateComments\");\n\n                    b.Property<int>(\"PostsPerPage\");\n\n                    b.Property<string>(\"PubDateFormat\")\n                        .HasMaxLength(75);\n\n                    b.Property<string>(\"Publisher\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"PublisherEntityType\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PublisherLogoHeight\")\n                        .HasMaxLength(20);\n\n                    b.Property<string>(\"PublisherLogoUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"PublisherLogoWidth\")\n                        .HasMaxLength(20);\n\n                    b.Property<string>(\"RecaptchaPrivateKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RecaptchaPublicKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RemoteFeedProcessorUseAgentFragment\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RemoteFeedUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"ShowFeaturedPostsOnDefaultPage\");\n\n                    b.Property<bool>(\"ShowRecentPostsOnDefaultPage\");\n\n                    b.Property<bool>(\"ShowTitle\");\n\n                    b.Property<string>(\"SiteName\")\n                        .HasMaxLength(200);\n\n                    b.Property<byte>(\"TeaserMode\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue((byte)0);\n\n                    b.Property<int>(\"TeaserTruncationLength\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue(20);\n\n                    b.Property<byte>(\"TeaserTruncationMode\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue((byte)0);\n\n                    b.Property<string>(\"TimeZoneId\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Title\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"TwitterCreator\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"TwitterPublisher\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"UseDefaultPageAsRootNode\");\n\n                    b.Property<string>(\"WebmasterEmail\")\n                        .HasMaxLength(100);\n\n                    b.HasKey(\"Id\");\n\n                    b.ToTable(\"cs_ContentProject\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageCategory\", b =>\n                {\n                    b.Property<string>(\"Value\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.HasKey(\"Value\", \"PageEntityId\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.HasIndex(\"Value\");\n\n                    b.ToTable(\"cs_PageCategory\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"Email\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Ip\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"IsAdmin\");\n\n                    b.Property<bool>(\"IsApproved\");\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<DateTime>(\"PubDate\");\n\n                    b.Property<string>(\"UserAgent\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Website\")\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_PageComment\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CreatedByUser\")\n                        .HasMaxLength(100);\n\n                    b.Property<DateTime>(\"CreatedUtc\");\n\n                    b.Property<bool>(\"DisableEditor\");\n\n                    b.Property<string>(\"DraftAuthor\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"DraftContent\");\n\n                    b.Property<DateTime?>(\"DraftPubDate\");\n\n                    b.Property<string>(\"DraftSerializedModel\");\n\n                    b.Property<string>(\"ExternalUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"IsPublished\");\n\n                    b.Property<DateTime>(\"LastModified\");\n\n                    b.Property<string>(\"LastModifiedByUser\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"MenuFilters\")\n                        .HasMaxLength(500);\n\n                    b.Property<bool>(\"MenuOnly\");\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"MetaHtml\");\n\n                    b.Property<string>(\"MetaJson\");\n\n                    b.Property<int>(\"PageOrder\");\n\n                    b.Property<string>(\"ParentId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ParentSlug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<DateTime?>(\"PubDate\");\n\n                    b.Property<string>(\"SerializedModel\");\n\n                    b.Property<string>(\"Serializer\")\n                        .HasMaxLength(50);\n\n                    b.Property<bool>(\"ShowCategories\");\n\n                    b.Property<bool>(\"ShowComments\");\n\n                    b.Property<bool>(\"ShowHeading\");\n\n                    b.Property<bool>(\"ShowLastModified\");\n\n                    b.Property<bool>(\"ShowMenu\");\n\n                    b.Property<bool>(\"ShowPubDate\");\n\n                    b.Property<string>(\"Slug\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"TemplateKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ViewRoles\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"ParentId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_Page\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageResourceEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Environment\")\n                        .IsRequired()\n                        .HasMaxLength(15);\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<int>(\"Sort\");\n\n                    b.Property<string>(\"Type\")\n                        .IsRequired()\n                        .HasMaxLength(10);\n\n                    b.Property<string>(\"Url\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.ToTable(\"cs_PageResource\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostCategory\", b =>\n                {\n                    b.Property<string>(\"Value\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PostEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.HasKey(\"Value\", \"PostEntityId\");\n\n                    b.HasIndex(\"PostEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.HasIndex(\"Value\");\n\n                    b.ToTable(\"cs_PostCategory\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"Email\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Ip\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"IsAdmin\");\n\n                    b.Property<bool>(\"IsApproved\");\n\n                    b.Property<string>(\"PostEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<DateTime>(\"PubDate\");\n\n                    b.Property<string>(\"UserAgent\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Website\")\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PostEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_PostComment\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"BlogId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CreatedByUser\")\n                        .HasMaxLength(100);\n\n                    b.Property<DateTime>(\"CreatedUtc\");\n\n                    b.Property<string>(\"DraftAuthor\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"DraftContent\");\n\n                    b.Property<DateTime?>(\"DraftPubDate\");\n\n                    b.Property<string>(\"DraftSerializedModel\");\n\n                    b.Property<string>(\"ImageUrl\")\n                        .HasMaxLength(250);\n\n                    b.Property<bool>(\"IsFeatured\");\n\n                    b.Property<bool>(\"IsPublished\");\n\n                    b.Property<DateTime>(\"LastModified\");\n\n                    b.Property<string>(\"LastModifiedByUser\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"MetaHtml\");\n\n                    b.Property<string>(\"MetaJson\");\n\n                    b.Property<DateTime?>(\"PubDate\");\n\n                    b.Property<string>(\"SerializedModel\");\n\n                    b.Property<string>(\"Serializer\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"Slug\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"SuppressTeaser\");\n\n                    b.Property<string>(\"TeaserOverride\");\n\n                    b.Property<string>(\"TemplateKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ThumbnailUrl\")\n                        .HasMaxLength(250);\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"BlogId\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"Slug\");\n\n                    b.ToTable(\"cs_Post\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\")\n                        .WithMany(\"PageComments\")\n                        .HasForeignKey(\"PageEntityId\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageResourceEntity\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\")\n                        .WithMany(\"PageResources\")\n                        .HasForeignKey(\"PageEntityId\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\")\n                        .WithMany(\"PostComments\")\n                        .HasForeignKey(\"PostEntityId\");\n                });\n#pragma warning restore 612, 618\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.MySQL/Migrations/20180705124549_simplecontent-20180705.cs",
    "content": "﻿using Microsoft.EntityFrameworkCore.Migrations;\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.MySQL.Migrations\n{\n    public partial class simplecontent20180705 : Migration\n    {\n        protected override void Up(MigrationBuilder migrationBuilder)\n        {\n            migrationBuilder.AddColumn<string>(\n                name: \"MetaDescription\",\n                table: \"cs_ContentHistory\",\n                nullable: true);\n\n            migrationBuilder.AddColumn<string>(\n                name: \"MetaHtml\",\n                table: \"cs_ContentHistory\",\n                nullable: true);\n\n            migrationBuilder.AddColumn<string>(\n                name: \"MetaJson\",\n                table: \"cs_ContentHistory\",\n                nullable: true);\n\n            migrationBuilder.AddColumn<int>(\n                name: \"PageOrder\",\n                table: \"cs_ContentHistory\",\n                nullable: false,\n                defaultValue: 0);\n\n            migrationBuilder.AddColumn<string>(\n                name: \"ParentId\",\n                table: \"cs_ContentHistory\",\n                maxLength: 255,\n                nullable: true);\n\n            migrationBuilder.AddColumn<string>(\n                name: \"ParentSlug\",\n                table: \"cs_ContentHistory\",\n                maxLength: 255,\n                nullable: true);\n\n            migrationBuilder.AddColumn<string>(\n                name: \"Serializer\",\n                table: \"cs_ContentHistory\",\n                maxLength: 50,\n                nullable: true);\n\n            migrationBuilder.AddColumn<string>(\n                name: \"TemplateKey\",\n                table: \"cs_ContentHistory\",\n                maxLength: 255,\n                nullable: true);\n\n            migrationBuilder.AddColumn<string>(\n                name: \"ViewRoles\",\n                table: \"cs_ContentHistory\",\n                nullable: true);\n        }\n\n        protected override void Down(MigrationBuilder migrationBuilder)\n        {\n            migrationBuilder.DropColumn(\n                name: \"MetaDescription\",\n                table: \"cs_ContentHistory\");\n\n            migrationBuilder.DropColumn(\n                name: \"MetaHtml\",\n                table: \"cs_ContentHistory\");\n\n            migrationBuilder.DropColumn(\n                name: \"MetaJson\",\n                table: \"cs_ContentHistory\");\n\n            migrationBuilder.DropColumn(\n                name: \"PageOrder\",\n                table: \"cs_ContentHistory\");\n\n            migrationBuilder.DropColumn(\n                name: \"ParentId\",\n                table: \"cs_ContentHistory\");\n\n            migrationBuilder.DropColumn(\n                name: \"ParentSlug\",\n                table: \"cs_ContentHistory\");\n\n            migrationBuilder.DropColumn(\n                name: \"Serializer\",\n                table: \"cs_ContentHistory\");\n\n            migrationBuilder.DropColumn(\n                name: \"TemplateKey\",\n                table: \"cs_ContentHistory\");\n\n            migrationBuilder.DropColumn(\n                name: \"ViewRoles\",\n                table: \"cs_ContentHistory\");\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.MySQL/Migrations/20180710112927_simplecontent-20180710.Designer.cs",
    "content": "﻿// <auto-generated />\nusing System;\nusing Microsoft.EntityFrameworkCore;\nusing Microsoft.EntityFrameworkCore.Infrastructure;\nusing Microsoft.EntityFrameworkCore.Migrations;\nusing Microsoft.EntityFrameworkCore.Storage.ValueConversion;\nusing cloudscribe.SimpleContent.Models;\nusing cloudscribe.SimpleContent.Storage.EFCore.MySQL;\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.MySQL.Migrations\n{\n    [DbContext(typeof(SimpleContentDbContext))]\n    [Migration(\"20180710112927_simplecontent-20180710\")]\n    partial class simplecontent20180710\n    {\n        protected override void BuildTargetModel(ModelBuilder modelBuilder)\n        {\n#pragma warning disable 612, 618\n            modelBuilder\n                .HasAnnotation(\"ProductVersion\", \"2.1.0-rtm-30799\")\n                .HasAnnotation(\"Relational:MaxIdentifierLength\", 64);\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Models.ContentHistory\", b =>\n                {\n                    b.Property<Guid>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ArchivedBy\")\n                        .HasMaxLength(255);\n\n                    b.Property<DateTime>(\"ArchivedUtc\");\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CategoriesCsv\");\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"ContentId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ContentSource\")\n                        .IsRequired()\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CreatedByUser\")\n                        .HasMaxLength(100);\n\n                    b.Property<DateTime>(\"CreatedUtc\");\n\n                    b.Property<string>(\"DraftAuthor\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"DraftContent\");\n\n                    b.Property<DateTime?>(\"DraftPubDate\");\n\n                    b.Property<string>(\"DraftSerializedModel\");\n\n                    b.Property<bool>(\"IsDraftHx\");\n\n                    b.Property<bool>(\"IsPublished\");\n\n                    b.Property<DateTime>(\"LastModified\");\n\n                    b.Property<string>(\"LastModifiedByUser\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"MetaDescription\");\n\n                    b.Property<string>(\"MetaHtml\");\n\n                    b.Property<string>(\"MetaJson\");\n\n                    b.Property<int>(\"PageOrder\");\n\n                    b.Property<string>(\"ParentId\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ParentSlug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ProjectId\");\n\n                    b.Property<DateTime?>(\"PubDate\");\n\n                    b.Property<string>(\"SerializedModel\");\n\n                    b.Property<string>(\"Serializer\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"Slug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"TeaserOverride\");\n\n                    b.Property<string>(\"TemplateKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ViewRoles\");\n\n                    b.Property<bool>(\"WasDeleted\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"ContentId\");\n\n                    b.HasIndex(\"ContentSource\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"CreatedByUser\");\n\n                    b.HasIndex(\"LastModifiedByUser\");\n\n                    b.HasIndex(\"Title\");\n\n                    b.ToTable(\"cs_ContentHistory\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Models.ProjectSettings\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<bool>(\"AddBlogToPagesTree\");\n\n                    b.Property<bool>(\"BlogMenuLinksToNewestPost\");\n\n                    b.Property<string>(\"BlogPageNavComponentVisibility\")\n                        .HasMaxLength(255);\n\n                    b.Property<int>(\"BlogPagePosition\");\n\n                    b.Property<string>(\"BlogPageText\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CdnUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ChannelCategoriesCsv\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ChannelRating\")\n                        .HasMaxLength(100);\n\n                    b.Property<int>(\"ChannelTimeToLive\");\n\n                    b.Property<string>(\"CommentNotificationEmail\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"CopyrightNotice\")\n                        .HasMaxLength(255);\n\n                    b.Property<int>(\"DaysToComment\");\n\n                    b.Property<string>(\"DefaultContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<int>(\"DefaultFeedItems\");\n\n                    b.Property<string>(\"DefaultPageSlug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Description\");\n\n                    b.Property<string>(\"DisqusShortName\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"FacebookAppId\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Image\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"IncludePubDateInPostUrls\");\n\n                    b.Property<string>(\"LanguageCode\")\n                        .HasMaxLength(10);\n\n                    b.Property<string>(\"LocalMediaVirtualPath\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ManagingEditorEmail\")\n                        .HasMaxLength(100);\n\n                    b.Property<int>(\"MaxFeedItems\");\n\n                    b.Property<bool>(\"ModerateComments\");\n\n                    b.Property<int>(\"PostsPerPage\");\n\n                    b.Property<string>(\"PubDateFormat\")\n                        .HasMaxLength(75);\n\n                    b.Property<string>(\"Publisher\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"PublisherEntityType\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PublisherLogoHeight\")\n                        .HasMaxLength(20);\n\n                    b.Property<string>(\"PublisherLogoUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"PublisherLogoWidth\")\n                        .HasMaxLength(20);\n\n                    b.Property<string>(\"RecaptchaPrivateKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RecaptchaPublicKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RemoteFeedProcessorUseAgentFragment\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RemoteFeedUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"ShowFeaturedPostsOnDefaultPage\");\n\n                    b.Property<bool>(\"ShowRecentPostsOnDefaultPage\");\n\n                    b.Property<bool>(\"ShowTitle\");\n\n                    b.Property<string>(\"SiteName\")\n                        .HasMaxLength(200);\n\n                    b.Property<byte>(\"TeaserMode\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue((byte)0);\n\n                    b.Property<int>(\"TeaserTruncationLength\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue(20);\n\n                    b.Property<byte>(\"TeaserTruncationMode\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue((byte)0);\n\n                    b.Property<string>(\"TimeZoneId\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Title\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"TwitterCreator\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"TwitterPublisher\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"UseDefaultPageAsRootNode\");\n\n                    b.Property<string>(\"WebmasterEmail\")\n                        .HasMaxLength(100);\n\n                    b.HasKey(\"Id\");\n\n                    b.ToTable(\"cs_ContentProject\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageCategory\", b =>\n                {\n                    b.Property<string>(\"Value\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.HasKey(\"Value\", \"PageEntityId\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.HasIndex(\"Value\");\n\n                    b.ToTable(\"cs_PageCategory\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"Email\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Ip\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"IsAdmin\");\n\n                    b.Property<bool>(\"IsApproved\");\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<DateTime>(\"PubDate\");\n\n                    b.Property<string>(\"UserAgent\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Website\")\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_PageComment\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CreatedByUser\")\n                        .HasMaxLength(100);\n\n                    b.Property<DateTime>(\"CreatedUtc\");\n\n                    b.Property<bool>(\"DisableEditor\");\n\n                    b.Property<string>(\"DraftAuthor\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"DraftContent\");\n\n                    b.Property<DateTime?>(\"DraftPubDate\");\n\n                    b.Property<string>(\"DraftSerializedModel\");\n\n                    b.Property<string>(\"ExternalUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"IsPublished\");\n\n                    b.Property<DateTime>(\"LastModified\");\n\n                    b.Property<string>(\"LastModifiedByUser\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"MenuFilters\")\n                        .HasMaxLength(500);\n\n                    b.Property<bool>(\"MenuOnly\");\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"MetaHtml\");\n\n                    b.Property<string>(\"MetaJson\");\n\n                    b.Property<int>(\"PageOrder\");\n\n                    b.Property<string>(\"ParentId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ParentSlug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<DateTime?>(\"PubDate\");\n\n                    b.Property<string>(\"SerializedModel\");\n\n                    b.Property<string>(\"Serializer\")\n                        .HasMaxLength(50);\n\n                    b.Property<bool>(\"ShowCategories\");\n\n                    b.Property<bool>(\"ShowComments\");\n\n                    b.Property<bool>(\"ShowHeading\");\n\n                    b.Property<bool>(\"ShowLastModified\");\n\n                    b.Property<bool>(\"ShowMenu\");\n\n                    b.Property<bool>(\"ShowPubDate\");\n\n                    b.Property<string>(\"Slug\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"TemplateKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ViewRoles\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"ParentId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_Page\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageResourceEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Environment\")\n                        .IsRequired()\n                        .HasMaxLength(15);\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<int>(\"Sort\");\n\n                    b.Property<string>(\"Type\")\n                        .IsRequired()\n                        .HasMaxLength(10);\n\n                    b.Property<string>(\"Url\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.ToTable(\"cs_PageResource\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostCategory\", b =>\n                {\n                    b.Property<string>(\"Value\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PostEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.HasKey(\"Value\", \"PostEntityId\");\n\n                    b.HasIndex(\"PostEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.HasIndex(\"Value\");\n\n                    b.ToTable(\"cs_PostCategory\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"Email\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Ip\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"IsAdmin\");\n\n                    b.Property<bool>(\"IsApproved\");\n\n                    b.Property<string>(\"PostEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<DateTime>(\"PubDate\");\n\n                    b.Property<string>(\"UserAgent\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Website\")\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PostEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_PostComment\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"BlogId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CreatedByUser\")\n                        .HasMaxLength(100);\n\n                    b.Property<DateTime>(\"CreatedUtc\");\n\n                    b.Property<string>(\"DraftAuthor\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"DraftContent\");\n\n                    b.Property<DateTime?>(\"DraftPubDate\");\n\n                    b.Property<string>(\"DraftSerializedModel\");\n\n                    b.Property<string>(\"ImageUrl\")\n                        .HasMaxLength(250);\n\n                    b.Property<bool>(\"IsFeatured\");\n\n                    b.Property<bool>(\"IsPublished\");\n\n                    b.Property<DateTime>(\"LastModified\");\n\n                    b.Property<string>(\"LastModifiedByUser\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"MetaHtml\");\n\n                    b.Property<string>(\"MetaJson\");\n\n                    b.Property<DateTime?>(\"PubDate\");\n\n                    b.Property<string>(\"SerializedModel\");\n\n                    b.Property<string>(\"Serializer\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"Slug\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"SuppressTeaser\");\n\n                    b.Property<string>(\"TeaserOverride\");\n\n                    b.Property<string>(\"TemplateKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ThumbnailUrl\")\n                        .HasMaxLength(250);\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"BlogId\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"Slug\");\n\n                    b.ToTable(\"cs_Post\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\")\n                        .WithMany(\"PageComments\")\n                        .HasForeignKey(\"PageEntityId\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageResourceEntity\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\")\n                        .WithMany(\"PageResources\")\n                        .HasForeignKey(\"PageEntityId\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\")\n                        .WithMany(\"PostComments\")\n                        .HasForeignKey(\"PostEntityId\");\n                });\n#pragma warning restore 612, 618\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.MySQL/Migrations/20180710112927_simplecontent-20180710.cs",
    "content": "﻿using Microsoft.EntityFrameworkCore.Migrations;\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.MySQL.Migrations\n{\n    public partial class simplecontent20180710 : Migration\n    {\n        protected override void Up(MigrationBuilder migrationBuilder)\n        {\n            migrationBuilder.AddColumn<string>(\n                name: \"CategoriesCsv\",\n                table: \"cs_ContentHistory\",\n                nullable: true);\n        }\n\n        protected override void Down(MigrationBuilder migrationBuilder)\n        {\n            migrationBuilder.DropColumn(\n                name: \"CategoriesCsv\",\n                table: \"cs_ContentHistory\");\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.MySQL/Migrations/20180820133148_simplecontent-20180819.Designer.cs",
    "content": "﻿// <auto-generated />\nusing System;\nusing Microsoft.EntityFrameworkCore;\nusing Microsoft.EntityFrameworkCore.Infrastructure;\nusing Microsoft.EntityFrameworkCore.Migrations;\nusing Microsoft.EntityFrameworkCore.Storage.ValueConversion;\nusing cloudscribe.SimpleContent.Models;\nusing cloudscribe.SimpleContent.Storage.EFCore.MySQL;\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.MySQL.Migrations\n{\n    [DbContext(typeof(SimpleContentDbContext))]\n    [Migration(\"20180820133148_simplecontent-20180819\")]\n    partial class simplecontent20180819\n    {\n        protected override void BuildTargetModel(ModelBuilder modelBuilder)\n        {\n#pragma warning disable 612, 618\n            modelBuilder\n                .HasAnnotation(\"ProductVersion\", \"2.1.1-rtm-30846\")\n                .HasAnnotation(\"Relational:MaxIdentifierLength\", 64);\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Models.ContentHistory\", b =>\n                {\n                    b.Property<Guid>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ArchivedBy\")\n                        .HasMaxLength(255);\n\n                    b.Property<DateTime>(\"ArchivedUtc\");\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CategoriesCsv\");\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"ContentId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ContentSource\")\n                        .IsRequired()\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CreatedByUser\")\n                        .HasMaxLength(100);\n\n                    b.Property<DateTime>(\"CreatedUtc\");\n\n                    b.Property<string>(\"DraftAuthor\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"DraftContent\");\n\n                    b.Property<DateTime?>(\"DraftPubDate\");\n\n                    b.Property<string>(\"DraftSerializedModel\");\n\n                    b.Property<bool>(\"IsDraftHx\");\n\n                    b.Property<bool>(\"IsPublished\");\n\n                    b.Property<DateTime>(\"LastModified\");\n\n                    b.Property<string>(\"LastModifiedByUser\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"MetaDescription\");\n\n                    b.Property<string>(\"MetaHtml\");\n\n                    b.Property<string>(\"MetaJson\");\n\n                    b.Property<int>(\"PageOrder\");\n\n                    b.Property<string>(\"ParentId\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ParentSlug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ProjectId\");\n\n                    b.Property<DateTime?>(\"PubDate\");\n\n                    b.Property<string>(\"SerializedModel\");\n\n                    b.Property<string>(\"Serializer\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"Slug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"TeaserOverride\");\n\n                    b.Property<string>(\"TemplateKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ViewRoles\");\n\n                    b.Property<bool>(\"WasDeleted\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"ContentId\");\n\n                    b.HasIndex(\"ContentSource\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"CreatedByUser\");\n\n                    b.HasIndex(\"LastModifiedByUser\");\n\n                    b.HasIndex(\"Title\");\n\n                    b.ToTable(\"cs_ContentHistory\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Models.ProjectSettings\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<bool>(\"AddBlogToPagesTree\");\n\n                    b.Property<bool>(\"BlogMenuLinksToNewestPost\");\n\n                    b.Property<string>(\"BlogPageNavComponentVisibility\")\n                        .HasMaxLength(255);\n\n                    b.Property<int>(\"BlogPagePosition\");\n\n                    b.Property<string>(\"BlogPageText\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CdnUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ChannelCategoriesCsv\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ChannelRating\")\n                        .HasMaxLength(100);\n\n                    b.Property<int>(\"ChannelTimeToLive\");\n\n                    b.Property<string>(\"CommentNotificationEmail\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"CopyrightNotice\")\n                        .HasMaxLength(255);\n\n                    b.Property<int>(\"DaysToComment\");\n\n                    b.Property<string>(\"DefaultContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<int>(\"DefaultFeedItems\");\n\n                    b.Property<string>(\"DefaultPageSlug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Description\");\n\n                    b.Property<string>(\"DisqusShortName\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"FacebookAppId\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Image\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"IncludePubDateInPostUrls\");\n\n                    b.Property<string>(\"LanguageCode\")\n                        .HasMaxLength(10);\n\n                    b.Property<string>(\"LocalMediaVirtualPath\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ManagingEditorEmail\")\n                        .HasMaxLength(100);\n\n                    b.Property<int>(\"MaxFeedItems\");\n\n                    b.Property<bool>(\"ModerateComments\");\n\n                    b.Property<int>(\"PostsPerPage\");\n\n                    b.Property<string>(\"PubDateFormat\")\n                        .HasMaxLength(75);\n\n                    b.Property<string>(\"Publisher\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"PublisherEntityType\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PublisherLogoHeight\")\n                        .HasMaxLength(20);\n\n                    b.Property<string>(\"PublisherLogoUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"PublisherLogoWidth\")\n                        .HasMaxLength(20);\n\n                    b.Property<string>(\"RecaptchaPrivateKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RecaptchaPublicKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RemoteFeedProcessorUseAgentFragment\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RemoteFeedUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"ShowFeaturedPostsOnDefaultPage\");\n\n                    b.Property<bool>(\"ShowRecentPostsOnDefaultPage\");\n\n                    b.Property<bool>(\"ShowTitle\");\n\n                    b.Property<string>(\"SiteName\")\n                        .HasMaxLength(200);\n\n                    b.Property<byte>(\"TeaserMode\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue((byte)0);\n\n                    b.Property<int>(\"TeaserTruncationLength\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue(20);\n\n                    b.Property<byte>(\"TeaserTruncationMode\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue((byte)0);\n\n                    b.Property<string>(\"TimeZoneId\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Title\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"TwitterCreator\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"TwitterPublisher\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"UseDefaultPageAsRootNode\");\n\n                    b.Property<string>(\"WebmasterEmail\")\n                        .HasMaxLength(100);\n\n                    b.HasKey(\"Id\");\n\n                    b.ToTable(\"cs_ContentProject\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageCategory\", b =>\n                {\n                    b.Property<string>(\"Value\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.HasKey(\"Value\", \"PageEntityId\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.HasIndex(\"Value\");\n\n                    b.ToTable(\"cs_PageCategory\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"Email\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Ip\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"IsAdmin\");\n\n                    b.Property<bool>(\"IsApproved\");\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<DateTime>(\"PubDate\");\n\n                    b.Property<string>(\"UserAgent\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Website\")\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_PageComment\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CreatedByUser\")\n                        .HasMaxLength(100);\n\n                    b.Property<DateTime>(\"CreatedUtc\");\n\n                    b.Property<bool>(\"DisableEditor\");\n\n                    b.Property<string>(\"DraftAuthor\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"DraftContent\");\n\n                    b.Property<DateTime?>(\"DraftPubDate\");\n\n                    b.Property<string>(\"DraftSerializedModel\");\n\n                    b.Property<string>(\"ExternalUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"IsPublished\");\n\n                    b.Property<DateTime>(\"LastModified\");\n\n                    b.Property<string>(\"LastModifiedByUser\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"MenuFilters\")\n                        .HasMaxLength(500);\n\n                    b.Property<bool>(\"MenuOnly\");\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"MetaHtml\");\n\n                    b.Property<string>(\"MetaJson\");\n\n                    b.Property<int>(\"PageOrder\");\n\n                    b.Property<string>(\"ParentId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ParentSlug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<DateTime?>(\"PubDate\");\n\n                    b.Property<string>(\"SerializedModel\");\n\n                    b.Property<string>(\"Serializer\")\n                        .HasMaxLength(50);\n\n                    b.Property<bool>(\"ShowCategories\");\n\n                    b.Property<bool>(\"ShowComments\");\n\n                    b.Property<bool>(\"ShowHeading\");\n\n                    b.Property<bool>(\"ShowLastModified\");\n\n                    b.Property<bool>(\"ShowMenu\");\n\n                    b.Property<bool>(\"ShowPubDate\");\n\n                    b.Property<string>(\"Slug\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"TemplateKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ViewRoles\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"ParentId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_Page\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageResourceEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Environment\")\n                        .IsRequired()\n                        .HasMaxLength(15);\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<int>(\"Sort\");\n\n                    b.Property<string>(\"Type\")\n                        .IsRequired()\n                        .HasMaxLength(10);\n\n                    b.Property<string>(\"Url\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.ToTable(\"cs_PageResource\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostCategory\", b =>\n                {\n                    b.Property<string>(\"Value\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PostEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.HasKey(\"Value\", \"PostEntityId\");\n\n                    b.HasIndex(\"PostEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.HasIndex(\"Value\");\n\n                    b.ToTable(\"cs_PostCategory\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"Email\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Ip\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"IsAdmin\");\n\n                    b.Property<bool>(\"IsApproved\");\n\n                    b.Property<string>(\"PostEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<DateTime>(\"PubDate\");\n\n                    b.Property<string>(\"UserAgent\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Website\")\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PostEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_PostComment\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"AutoTeaser\");\n\n                    b.Property<string>(\"BlogId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CreatedByUser\")\n                        .HasMaxLength(100);\n\n                    b.Property<DateTime>(\"CreatedUtc\");\n\n                    b.Property<string>(\"DraftAuthor\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"DraftContent\");\n\n                    b.Property<DateTime?>(\"DraftPubDate\");\n\n                    b.Property<string>(\"DraftSerializedModel\");\n\n                    b.Property<string>(\"ImageUrl\")\n                        .HasMaxLength(250);\n\n                    b.Property<bool>(\"IsFeatured\");\n\n                    b.Property<bool>(\"IsPublished\");\n\n                    b.Property<DateTime>(\"LastModified\");\n\n                    b.Property<string>(\"LastModifiedByUser\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"MetaHtml\");\n\n                    b.Property<string>(\"MetaJson\");\n\n                    b.Property<DateTime?>(\"PubDate\");\n\n                    b.Property<string>(\"SerializedModel\");\n\n                    b.Property<string>(\"Serializer\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"Slug\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"SuppressTeaser\");\n\n                    b.Property<string>(\"TeaserOverride\");\n\n                    b.Property<string>(\"TemplateKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ThumbnailUrl\")\n                        .HasMaxLength(250);\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"BlogId\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"Slug\");\n\n                    b.ToTable(\"cs_Post\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\")\n                        .WithMany(\"PageComments\")\n                        .HasForeignKey(\"PageEntityId\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageResourceEntity\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\")\n                        .WithMany(\"PageResources\")\n                        .HasForeignKey(\"PageEntityId\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\")\n                        .WithMany(\"PostComments\")\n                        .HasForeignKey(\"PostEntityId\");\n                });\n#pragma warning restore 612, 618\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.MySQL/Migrations/20180820133148_simplecontent-20180819.cs",
    "content": "﻿using Microsoft.EntityFrameworkCore.Migrations;\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.MySQL.Migrations\n{\n    public partial class simplecontent20180819 : Migration\n    {\n        protected override void Up(MigrationBuilder migrationBuilder)\n        {\n            migrationBuilder.AddColumn<string>(\n                name: \"AutoTeaser\",\n                table: \"cs_Post\",\n                nullable: true);\n        }\n\n        protected override void Down(MigrationBuilder migrationBuilder)\n        {\n            migrationBuilder.DropColumn(\n                name: \"AutoTeaser\",\n                table: \"cs_Post\");\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.MySQL/Migrations/20180908121712_simplecontent-20180908.Designer.cs",
    "content": "﻿// <auto-generated />\nusing System;\nusing Microsoft.EntityFrameworkCore;\nusing Microsoft.EntityFrameworkCore.Infrastructure;\nusing Microsoft.EntityFrameworkCore.Migrations;\nusing Microsoft.EntityFrameworkCore.Storage.ValueConversion;\nusing cloudscribe.SimpleContent.Models;\nusing cloudscribe.SimpleContent.Storage.EFCore.MySQL;\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.MySQL.Migrations\n{\n    [DbContext(typeof(SimpleContentDbContext))]\n    [Migration(\"20180908121712_simplecontent-20180908\")]\n    partial class simplecontent20180908\n    {\n        protected override void BuildTargetModel(ModelBuilder modelBuilder)\n        {\n#pragma warning disable 612, 618\n            modelBuilder\n                .HasAnnotation(\"ProductVersion\", \"2.1.1-rtm-30846\")\n                .HasAnnotation(\"Relational:MaxIdentifierLength\", 64);\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Models.ContentHistory\", b =>\n                {\n                    b.Property<Guid>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ArchivedBy\")\n                        .HasMaxLength(255);\n\n                    b.Property<DateTime>(\"ArchivedUtc\");\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CategoriesCsv\");\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"ContentId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ContentSource\")\n                        .IsRequired()\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CreatedByUser\")\n                        .HasMaxLength(100);\n\n                    b.Property<DateTime>(\"CreatedUtc\");\n\n                    b.Property<string>(\"DraftAuthor\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"DraftContent\");\n\n                    b.Property<DateTime?>(\"DraftPubDate\");\n\n                    b.Property<string>(\"DraftSerializedModel\");\n\n                    b.Property<bool>(\"IsDraftHx\");\n\n                    b.Property<bool>(\"IsPublished\");\n\n                    b.Property<DateTime>(\"LastModified\");\n\n                    b.Property<string>(\"LastModifiedByUser\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"MetaDescription\");\n\n                    b.Property<string>(\"MetaHtml\");\n\n                    b.Property<string>(\"MetaJson\");\n\n                    b.Property<int>(\"PageOrder\");\n\n                    b.Property<string>(\"ParentId\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ParentSlug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ProjectId\");\n\n                    b.Property<DateTime?>(\"PubDate\");\n\n                    b.Property<string>(\"SerializedModel\");\n\n                    b.Property<string>(\"Serializer\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"Slug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"TeaserOverride\");\n\n                    b.Property<string>(\"TemplateKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ViewRoles\");\n\n                    b.Property<bool>(\"WasDeleted\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"ContentId\");\n\n                    b.HasIndex(\"ContentSource\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"CreatedByUser\");\n\n                    b.HasIndex(\"LastModifiedByUser\");\n\n                    b.HasIndex(\"Title\");\n\n                    b.ToTable(\"cs_ContentHistory\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Models.ProjectSettings\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<bool>(\"AddBlogToPagesTree\");\n\n                    b.Property<bool>(\"BlogMenuLinksToNewestPost\");\n\n                    b.Property<string>(\"BlogPageNavComponentVisibility\")\n                        .HasMaxLength(255);\n\n                    b.Property<int>(\"BlogPagePosition\");\n\n                    b.Property<string>(\"BlogPageText\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CdnUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ChannelCategoriesCsv\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ChannelRating\")\n                        .HasMaxLength(100);\n\n                    b.Property<int>(\"ChannelTimeToLive\");\n\n                    b.Property<string>(\"CommentNotificationEmail\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"CopyrightNotice\")\n                        .HasMaxLength(255);\n\n                    b.Property<int>(\"DaysToComment\");\n\n                    b.Property<string>(\"DefaultContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<int>(\"DefaultFeedItems\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue(20);\n\n                    b.Property<string>(\"DefaultPageSlug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Description\");\n\n                    b.Property<string>(\"DisqusShortName\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"FacebookAppId\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Image\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"IncludePubDateInPostUrls\");\n\n                    b.Property<string>(\"LanguageCode\")\n                        .HasMaxLength(10);\n\n                    b.Property<string>(\"LocalMediaVirtualPath\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ManagingEditorEmail\")\n                        .HasMaxLength(100);\n\n                    b.Property<int>(\"MaxFeedItems\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue(1000);\n\n                    b.Property<bool>(\"ModerateComments\");\n\n                    b.Property<int>(\"PostsPerPage\");\n\n                    b.Property<string>(\"PubDateFormat\")\n                        .HasMaxLength(75);\n\n                    b.Property<string>(\"Publisher\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"PublisherEntityType\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PublisherLogoHeight\")\n                        .HasMaxLength(20);\n\n                    b.Property<string>(\"PublisherLogoUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"PublisherLogoWidth\")\n                        .HasMaxLength(20);\n\n                    b.Property<string>(\"RecaptchaPrivateKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RecaptchaPublicKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RemoteFeedProcessorUseAgentFragment\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RemoteFeedUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"ShowFeaturedPostsOnDefaultPage\");\n\n                    b.Property<bool>(\"ShowRecentPostsOnDefaultPage\");\n\n                    b.Property<bool>(\"ShowTitle\");\n\n                    b.Property<string>(\"SiteName\")\n                        .HasMaxLength(200);\n\n                    b.Property<byte>(\"TeaserMode\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue((byte)0);\n\n                    b.Property<int>(\"TeaserTruncationLength\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue(20);\n\n                    b.Property<byte>(\"TeaserTruncationMode\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue((byte)0);\n\n                    b.Property<string>(\"TimeZoneId\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Title\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"TwitterCreator\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"TwitterPublisher\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"UseDefaultPageAsRootNode\");\n\n                    b.Property<string>(\"WebmasterEmail\")\n                        .HasMaxLength(100);\n\n                    b.HasKey(\"Id\");\n\n                    b.ToTable(\"cs_ContentProject\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageCategory\", b =>\n                {\n                    b.Property<string>(\"Value\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.HasKey(\"Value\", \"PageEntityId\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.HasIndex(\"Value\");\n\n                    b.ToTable(\"cs_PageCategory\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"Email\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Ip\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"IsAdmin\");\n\n                    b.Property<bool>(\"IsApproved\");\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<DateTime>(\"PubDate\");\n\n                    b.Property<string>(\"UserAgent\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Website\")\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_PageComment\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CreatedByUser\")\n                        .HasMaxLength(100);\n\n                    b.Property<DateTime>(\"CreatedUtc\");\n\n                    b.Property<bool>(\"DisableEditor\");\n\n                    b.Property<string>(\"DraftAuthor\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"DraftContent\");\n\n                    b.Property<DateTime?>(\"DraftPubDate\");\n\n                    b.Property<string>(\"DraftSerializedModel\");\n\n                    b.Property<string>(\"ExternalUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"IsPublished\");\n\n                    b.Property<DateTime>(\"LastModified\");\n\n                    b.Property<string>(\"LastModifiedByUser\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"MenuFilters\")\n                        .HasMaxLength(500);\n\n                    b.Property<bool>(\"MenuOnly\");\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"MetaHtml\");\n\n                    b.Property<string>(\"MetaJson\");\n\n                    b.Property<int>(\"PageOrder\");\n\n                    b.Property<string>(\"ParentId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ParentSlug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<DateTime?>(\"PubDate\");\n\n                    b.Property<string>(\"SerializedModel\");\n\n                    b.Property<string>(\"Serializer\")\n                        .HasMaxLength(50);\n\n                    b.Property<bool>(\"ShowCategories\");\n\n                    b.Property<bool>(\"ShowComments\");\n\n                    b.Property<bool>(\"ShowHeading\");\n\n                    b.Property<bool>(\"ShowLastModified\");\n\n                    b.Property<bool>(\"ShowMenu\");\n\n                    b.Property<bool>(\"ShowPubDate\");\n\n                    b.Property<string>(\"Slug\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"TemplateKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ViewRoles\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"ParentId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_Page\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageResourceEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Environment\")\n                        .IsRequired()\n                        .HasMaxLength(15);\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<int>(\"Sort\");\n\n                    b.Property<string>(\"Type\")\n                        .IsRequired()\n                        .HasMaxLength(10);\n\n                    b.Property<string>(\"Url\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.ToTable(\"cs_PageResource\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostCategory\", b =>\n                {\n                    b.Property<string>(\"Value\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PostEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.HasKey(\"Value\", \"PostEntityId\");\n\n                    b.HasIndex(\"PostEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.HasIndex(\"Value\");\n\n                    b.ToTable(\"cs_PostCategory\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"Email\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Ip\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"IsAdmin\");\n\n                    b.Property<bool>(\"IsApproved\");\n\n                    b.Property<string>(\"PostEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<DateTime>(\"PubDate\");\n\n                    b.Property<string>(\"UserAgent\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Website\")\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PostEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_PostComment\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"AutoTeaser\");\n\n                    b.Property<string>(\"BlogId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CreatedByUser\")\n                        .HasMaxLength(100);\n\n                    b.Property<DateTime>(\"CreatedUtc\");\n\n                    b.Property<string>(\"DraftAuthor\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"DraftContent\");\n\n                    b.Property<DateTime?>(\"DraftPubDate\");\n\n                    b.Property<string>(\"DraftSerializedModel\");\n\n                    b.Property<string>(\"ImageUrl\")\n                        .HasMaxLength(250);\n\n                    b.Property<bool>(\"IsFeatured\");\n\n                    b.Property<bool>(\"IsPublished\");\n\n                    b.Property<DateTime>(\"LastModified\");\n\n                    b.Property<string>(\"LastModifiedByUser\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"MetaHtml\");\n\n                    b.Property<string>(\"MetaJson\");\n\n                    b.Property<DateTime?>(\"PubDate\");\n\n                    b.Property<string>(\"SerializedModel\");\n\n                    b.Property<string>(\"Serializer\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"Slug\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"SuppressTeaser\");\n\n                    b.Property<string>(\"TeaserOverride\");\n\n                    b.Property<string>(\"TemplateKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ThumbnailUrl\")\n                        .HasMaxLength(250);\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"BlogId\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"Slug\");\n\n                    b.ToTable(\"cs_Post\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\")\n                        .WithMany(\"PageComments\")\n                        .HasForeignKey(\"PageEntityId\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageResourceEntity\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\")\n                        .WithMany(\"PageResources\")\n                        .HasForeignKey(\"PageEntityId\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\")\n                        .WithMany(\"PostComments\")\n                        .HasForeignKey(\"PostEntityId\");\n                });\n#pragma warning restore 612, 618\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.MySQL/Migrations/20180908121712_simplecontent-20180908.cs",
    "content": "﻿using Microsoft.EntityFrameworkCore.Migrations;\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.MySQL.Migrations\n{\n    public partial class simplecontent20180908 : Migration\n    {\n        protected override void Up(MigrationBuilder migrationBuilder)\n        {\n            migrationBuilder.AlterColumn<int>(\n                name: \"MaxFeedItems\",\n                table: \"cs_ContentProject\",\n                nullable: false,\n                defaultValue: 1000,\n                oldClrType: typeof(int));\n\n            migrationBuilder.AlterColumn<int>(\n                name: \"DefaultFeedItems\",\n                table: \"cs_ContentProject\",\n                nullable: false,\n                defaultValue: 20,\n                oldClrType: typeof(int));\n        }\n\n        protected override void Down(MigrationBuilder migrationBuilder)\n        {\n            migrationBuilder.AlterColumn<int>(\n                name: \"MaxFeedItems\",\n                table: \"cs_ContentProject\",\n                nullable: false,\n                oldClrType: typeof(int),\n                oldDefaultValue: 1000);\n\n            migrationBuilder.AlterColumn<int>(\n                name: \"DefaultFeedItems\",\n                table: \"cs_ContentProject\",\n                nullable: false,\n                oldClrType: typeof(int),\n                oldDefaultValue: 20);\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.MySQL/Migrations/20190210161111_simplecontent-20190210.Designer.cs",
    "content": "﻿// <auto-generated />\nusing System;\nusing Microsoft.EntityFrameworkCore;\nusing Microsoft.EntityFrameworkCore.Infrastructure;\nusing Microsoft.EntityFrameworkCore.Migrations;\nusing Microsoft.EntityFrameworkCore.Storage.ValueConversion;\nusing cloudscribe.SimpleContent.Models;\nusing cloudscribe.SimpleContent.Storage.EFCore.MySQL;\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.MySQL.Migrations\n{\n    [DbContext(typeof(SimpleContentDbContext))]\n    [Migration(\"20190210161111_simplecontent-20190210\")]\n    partial class simplecontent20190210\n    {\n        protected override void BuildTargetModel(ModelBuilder modelBuilder)\n        {\n#pragma warning disable 612, 618\n            modelBuilder\n                .HasAnnotation(\"ProductVersion\", \"2.1.4-rtm-31024\")\n                .HasAnnotation(\"Relational:MaxIdentifierLength\", 64);\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Models.ContentHistory\", b =>\n                {\n                    b.Property<Guid>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ArchivedBy\")\n                        .HasMaxLength(255);\n\n                    b.Property<DateTime>(\"ArchivedUtc\");\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CategoriesCsv\");\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"ContentId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ContentSource\")\n                        .IsRequired()\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CreatedByUser\")\n                        .HasMaxLength(100);\n\n                    b.Property<DateTime>(\"CreatedUtc\");\n\n                    b.Property<string>(\"DraftAuthor\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"DraftContent\");\n\n                    b.Property<DateTime?>(\"DraftPubDate\");\n\n                    b.Property<string>(\"DraftSerializedModel\");\n\n                    b.Property<bool>(\"IsDraftHx\");\n\n                    b.Property<bool>(\"IsPublished\");\n\n                    b.Property<DateTime>(\"LastModified\");\n\n                    b.Property<string>(\"LastModifiedByUser\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"MetaDescription\");\n\n                    b.Property<string>(\"MetaHtml\");\n\n                    b.Property<string>(\"MetaJson\");\n\n                    b.Property<int>(\"PageOrder\");\n\n                    b.Property<string>(\"ParentId\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ParentSlug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ProjectId\");\n\n                    b.Property<DateTime?>(\"PubDate\");\n\n                    b.Property<string>(\"SerializedModel\");\n\n                    b.Property<string>(\"Serializer\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"Slug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"TeaserOverride\");\n\n                    b.Property<string>(\"TemplateKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ViewRoles\");\n\n                    b.Property<bool>(\"WasDeleted\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"ContentId\");\n\n                    b.HasIndex(\"ContentSource\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"CreatedByUser\");\n\n                    b.HasIndex(\"LastModifiedByUser\");\n\n                    b.HasIndex(\"Title\");\n\n                    b.ToTable(\"cs_ContentHistory\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Models.ProjectSettings\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"AboutContent\");\n\n                    b.Property<bool>(\"AddBlogToPagesTree\");\n\n                    b.Property<bool>(\"BlogMenuLinksToNewestPost\");\n\n                    b.Property<string>(\"BlogPageNavComponentVisibility\")\n                        .HasMaxLength(255);\n\n                    b.Property<int>(\"BlogPagePosition\");\n\n                    b.Property<string>(\"BlogPageText\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CdnUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ChannelCategoriesCsv\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ChannelRating\")\n                        .HasMaxLength(100);\n\n                    b.Property<int>(\"ChannelTimeToLive\");\n\n                    b.Property<string>(\"CommentNotificationEmail\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"CopyrightNotice\")\n                        .HasMaxLength(255);\n\n                    b.Property<int>(\"DaysToComment\");\n\n                    b.Property<string>(\"DefaultContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<int>(\"DefaultFeedItems\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue(20);\n\n                    b.Property<string>(\"DefaultPageSlug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Description\");\n\n                    b.Property<string>(\"DisqusShortName\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"FacebookAppId\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Image\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"IncludePubDateInPostUrls\");\n\n                    b.Property<string>(\"LanguageCode\")\n                        .HasMaxLength(10);\n\n                    b.Property<string>(\"LocalMediaVirtualPath\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ManagingEditorEmail\")\n                        .HasMaxLength(100);\n\n                    b.Property<int>(\"MaxFeedItems\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue(1000);\n\n                    b.Property<bool>(\"ModerateComments\");\n\n                    b.Property<int>(\"PostsPerPage\");\n\n                    b.Property<string>(\"PubDateFormat\")\n                        .HasMaxLength(75);\n\n                    b.Property<string>(\"Publisher\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"PublisherEntityType\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PublisherLogoHeight\")\n                        .HasMaxLength(20);\n\n                    b.Property<string>(\"PublisherLogoUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"PublisherLogoWidth\")\n                        .HasMaxLength(20);\n\n                    b.Property<string>(\"RecaptchaPrivateKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RecaptchaPublicKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RemoteFeedProcessorUseAgentFragment\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RemoteFeedUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"ShowFeaturedPostsOnDefaultPage\");\n\n                    b.Property<bool>(\"ShowRecentPostsOnDefaultPage\");\n\n                    b.Property<bool>(\"ShowTitle\");\n\n                    b.Property<string>(\"SiteName\")\n                        .HasMaxLength(200);\n\n                    b.Property<byte>(\"TeaserMode\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue((byte)0);\n\n                    b.Property<int>(\"TeaserTruncationLength\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue(20);\n\n                    b.Property<byte>(\"TeaserTruncationMode\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue((byte)0);\n\n                    b.Property<string>(\"TimeZoneId\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Title\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"TwitterCreator\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"TwitterPublisher\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"UseDefaultPageAsRootNode\");\n\n                    b.Property<string>(\"WebmasterEmail\")\n                        .HasMaxLength(100);\n\n                    b.HasKey(\"Id\");\n\n                    b.ToTable(\"cs_ContentProject\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageCategory\", b =>\n                {\n                    b.Property<string>(\"Value\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.HasKey(\"Value\", \"PageEntityId\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.HasIndex(\"Value\");\n\n                    b.ToTable(\"cs_PageCategory\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"Email\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Ip\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"IsAdmin\");\n\n                    b.Property<bool>(\"IsApproved\");\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<DateTime>(\"PubDate\");\n\n                    b.Property<string>(\"UserAgent\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Website\")\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_PageComment\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CreatedByUser\")\n                        .HasMaxLength(100);\n\n                    b.Property<DateTime>(\"CreatedUtc\");\n\n                    b.Property<bool>(\"DisableEditor\");\n\n                    b.Property<string>(\"DraftAuthor\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"DraftContent\");\n\n                    b.Property<DateTime?>(\"DraftPubDate\");\n\n                    b.Property<string>(\"DraftSerializedModel\");\n\n                    b.Property<string>(\"ExternalUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"IsPublished\");\n\n                    b.Property<DateTime>(\"LastModified\");\n\n                    b.Property<string>(\"LastModifiedByUser\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"MenuFilters\")\n                        .HasMaxLength(500);\n\n                    b.Property<bool>(\"MenuOnly\");\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"MetaHtml\");\n\n                    b.Property<string>(\"MetaJson\");\n\n                    b.Property<int>(\"PageOrder\");\n\n                    b.Property<string>(\"ParentId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ParentSlug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<DateTime?>(\"PubDate\");\n\n                    b.Property<string>(\"SerializedModel\");\n\n                    b.Property<string>(\"Serializer\")\n                        .HasMaxLength(50);\n\n                    b.Property<bool>(\"ShowCategories\");\n\n                    b.Property<bool>(\"ShowComments\");\n\n                    b.Property<bool>(\"ShowHeading\");\n\n                    b.Property<bool>(\"ShowLastModified\");\n\n                    b.Property<bool>(\"ShowMenu\");\n\n                    b.Property<bool>(\"ShowPubDate\");\n\n                    b.Property<string>(\"Slug\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"TemplateKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ViewRoles\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"ParentId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_Page\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageResourceEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Environment\")\n                        .IsRequired()\n                        .HasMaxLength(15);\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<int>(\"Sort\");\n\n                    b.Property<string>(\"Type\")\n                        .IsRequired()\n                        .HasMaxLength(10);\n\n                    b.Property<string>(\"Url\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.ToTable(\"cs_PageResource\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostCategory\", b =>\n                {\n                    b.Property<string>(\"Value\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PostEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.HasKey(\"Value\", \"PostEntityId\");\n\n                    b.HasIndex(\"PostEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.HasIndex(\"Value\");\n\n                    b.ToTable(\"cs_PostCategory\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"Email\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Ip\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"IsAdmin\");\n\n                    b.Property<bool>(\"IsApproved\");\n\n                    b.Property<string>(\"PostEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<DateTime>(\"PubDate\");\n\n                    b.Property<string>(\"UserAgent\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Website\")\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PostEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_PostComment\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"AutoTeaser\");\n\n                    b.Property<string>(\"BlogId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CreatedByUser\")\n                        .HasMaxLength(100);\n\n                    b.Property<DateTime>(\"CreatedUtc\");\n\n                    b.Property<string>(\"DraftAuthor\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"DraftContent\");\n\n                    b.Property<DateTime?>(\"DraftPubDate\");\n\n                    b.Property<string>(\"DraftSerializedModel\");\n\n                    b.Property<string>(\"ImageUrl\")\n                        .HasMaxLength(250);\n\n                    b.Property<bool>(\"IsFeatured\");\n\n                    b.Property<bool>(\"IsPublished\");\n\n                    b.Property<DateTime>(\"LastModified\");\n\n                    b.Property<string>(\"LastModifiedByUser\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"MetaHtml\");\n\n                    b.Property<string>(\"MetaJson\");\n\n                    b.Property<DateTime?>(\"PubDate\");\n\n                    b.Property<string>(\"SerializedModel\");\n\n                    b.Property<string>(\"Serializer\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"Slug\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"SuppressTeaser\");\n\n                    b.Property<string>(\"TeaserOverride\");\n\n                    b.Property<string>(\"TemplateKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ThumbnailUrl\")\n                        .HasMaxLength(250);\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"BlogId\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"Slug\");\n\n                    b.ToTable(\"cs_Post\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\")\n                        .WithMany(\"PageComments\")\n                        .HasForeignKey(\"PageEntityId\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageResourceEntity\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\")\n                        .WithMany(\"PageResources\")\n                        .HasForeignKey(\"PageEntityId\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\")\n                        .WithMany(\"PostComments\")\n                        .HasForeignKey(\"PostEntityId\");\n                });\n#pragma warning restore 612, 618\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.MySQL/Migrations/20190210161111_simplecontent-20190210.cs",
    "content": "﻿using Microsoft.EntityFrameworkCore.Migrations;\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.MySQL.Migrations\n{\n    public partial class simplecontent20190210 : Migration\n    {\n        protected override void Up(MigrationBuilder migrationBuilder)\n        {\n            migrationBuilder.AddColumn<string>(\n                name: \"AboutContent\",\n                table: \"cs_ContentProject\",\n                nullable: true);\n        }\n\n        protected override void Down(MigrationBuilder migrationBuilder)\n        {\n            migrationBuilder.DropColumn(\n                name: \"AboutContent\",\n                table: \"cs_ContentProject\");\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.MySQL/Migrations/20190213120841_simplecontent-20190212.Designer.cs",
    "content": "﻿// <auto-generated />\nusing System;\nusing Microsoft.EntityFrameworkCore;\nusing Microsoft.EntityFrameworkCore.Infrastructure;\nusing Microsoft.EntityFrameworkCore.Migrations;\nusing Microsoft.EntityFrameworkCore.Storage.ValueConversion;\nusing cloudscribe.SimpleContent.Models;\nusing cloudscribe.SimpleContent.Storage.EFCore.MySQL;\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.MySQL.Migrations\n{\n    [DbContext(typeof(SimpleContentDbContext))]\n    [Migration(\"20190213120841_simplecontent-20190212\")]\n    partial class simplecontent20190212\n    {\n        protected override void BuildTargetModel(ModelBuilder modelBuilder)\n        {\n#pragma warning disable 612, 618\n            modelBuilder\n                .HasAnnotation(\"ProductVersion\", \"2.1.8-servicing-32085\")\n                .HasAnnotation(\"Relational:MaxIdentifierLength\", 64);\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Models.ContentHistory\", b =>\n                {\n                    b.Property<Guid>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ArchivedBy\")\n                        .HasMaxLength(255);\n\n                    b.Property<DateTime>(\"ArchivedUtc\");\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CategoriesCsv\");\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"ContentId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ContentSource\")\n                        .IsRequired()\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CreatedByUser\")\n                        .HasMaxLength(100);\n\n                    b.Property<DateTime>(\"CreatedUtc\");\n\n                    b.Property<string>(\"DraftAuthor\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"DraftContent\");\n\n                    b.Property<DateTime?>(\"DraftPubDate\");\n\n                    b.Property<string>(\"DraftSerializedModel\");\n\n                    b.Property<bool>(\"IsDraftHx\");\n\n                    b.Property<bool>(\"IsPublished\");\n\n                    b.Property<DateTime>(\"LastModified\");\n\n                    b.Property<string>(\"LastModifiedByUser\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"MetaDescription\");\n\n                    b.Property<string>(\"MetaHtml\");\n\n                    b.Property<string>(\"MetaJson\");\n\n                    b.Property<int>(\"PageOrder\");\n\n                    b.Property<string>(\"ParentId\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ParentSlug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ProjectId\");\n\n                    b.Property<DateTime?>(\"PubDate\");\n\n                    b.Property<string>(\"SerializedModel\");\n\n                    b.Property<string>(\"Serializer\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"Slug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"TeaserOverride\");\n\n                    b.Property<string>(\"TemplateKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ViewRoles\");\n\n                    b.Property<bool>(\"WasDeleted\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"ContentId\");\n\n                    b.HasIndex(\"ContentSource\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"CreatedByUser\");\n\n                    b.HasIndex(\"LastModifiedByUser\");\n\n                    b.HasIndex(\"Title\");\n\n                    b.ToTable(\"cs_ContentHistory\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Models.ProjectSettings\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"AboutContent\");\n\n                    b.Property<string>(\"AboutHeading\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"AddBlogToPagesTree\");\n\n                    b.Property<bool>(\"BlogMenuLinksToNewestPost\");\n\n                    b.Property<string>(\"BlogPageNavComponentVisibility\")\n                        .HasMaxLength(255);\n\n                    b.Property<int>(\"BlogPagePosition\");\n\n                    b.Property<string>(\"BlogPageText\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CdnUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ChannelCategoriesCsv\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ChannelRating\")\n                        .HasMaxLength(100);\n\n                    b.Property<int>(\"ChannelTimeToLive\");\n\n                    b.Property<string>(\"CommentNotificationEmail\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"CopyrightNotice\")\n                        .HasMaxLength(255);\n\n                    b.Property<int>(\"DaysToComment\");\n\n                    b.Property<string>(\"DefaultContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<int>(\"DefaultFeedItems\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue(20);\n\n                    b.Property<string>(\"DefaultPageSlug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Description\");\n\n                    b.Property<string>(\"DisqusShortName\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"FacebookAppId\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Image\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"IncludePubDateInPostUrls\");\n\n                    b.Property<string>(\"LanguageCode\")\n                        .HasMaxLength(10);\n\n                    b.Property<string>(\"LocalMediaVirtualPath\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ManagingEditorEmail\")\n                        .HasMaxLength(100);\n\n                    b.Property<int>(\"MaxFeedItems\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue(1000);\n\n                    b.Property<bool>(\"ModerateComments\");\n\n                    b.Property<int>(\"PostsPerPage\");\n\n                    b.Property<string>(\"PubDateFormat\")\n                        .HasMaxLength(75);\n\n                    b.Property<string>(\"Publisher\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"PublisherEntityType\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PublisherLogoHeight\")\n                        .HasMaxLength(20);\n\n                    b.Property<string>(\"PublisherLogoUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"PublisherLogoWidth\")\n                        .HasMaxLength(20);\n\n                    b.Property<string>(\"RecaptchaPrivateKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RecaptchaPublicKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RemoteFeedProcessorUseAgentFragment\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RemoteFeedUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"ShowAboutBox\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue(true);\n\n                    b.Property<bool>(\"ShowFeaturedPostsOnDefaultPage\");\n\n                    b.Property<bool>(\"ShowRecentPostsOnDefaultPage\");\n\n                    b.Property<bool>(\"ShowRelatedPosts\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue(true);\n\n                    b.Property<bool>(\"ShowTitle\");\n\n                    b.Property<string>(\"SiteName\")\n                        .HasMaxLength(200);\n\n                    b.Property<byte>(\"TeaserMode\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue((byte)0);\n\n                    b.Property<int>(\"TeaserTruncationLength\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue(20);\n\n                    b.Property<byte>(\"TeaserTruncationMode\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue((byte)0);\n\n                    b.Property<string>(\"TimeZoneId\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Title\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"TwitterCreator\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"TwitterPublisher\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"UseDefaultPageAsRootNode\");\n\n                    b.Property<string>(\"WebmasterEmail\")\n                        .HasMaxLength(100);\n\n                    b.HasKey(\"Id\");\n\n                    b.ToTable(\"cs_ContentProject\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageCategory\", b =>\n                {\n                    b.Property<string>(\"Value\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.HasKey(\"Value\", \"PageEntityId\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.HasIndex(\"Value\");\n\n                    b.ToTable(\"cs_PageCategory\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"Email\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Ip\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"IsAdmin\");\n\n                    b.Property<bool>(\"IsApproved\");\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<DateTime>(\"PubDate\");\n\n                    b.Property<string>(\"UserAgent\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Website\")\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_PageComment\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CreatedByUser\")\n                        .HasMaxLength(100);\n\n                    b.Property<DateTime>(\"CreatedUtc\");\n\n                    b.Property<bool>(\"DisableEditor\");\n\n                    b.Property<string>(\"DraftAuthor\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"DraftContent\");\n\n                    b.Property<DateTime?>(\"DraftPubDate\");\n\n                    b.Property<string>(\"DraftSerializedModel\");\n\n                    b.Property<string>(\"ExternalUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"IsPublished\");\n\n                    b.Property<DateTime>(\"LastModified\");\n\n                    b.Property<string>(\"LastModifiedByUser\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"MenuFilters\")\n                        .HasMaxLength(500);\n\n                    b.Property<bool>(\"MenuOnly\");\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"MetaHtml\");\n\n                    b.Property<string>(\"MetaJson\");\n\n                    b.Property<int>(\"PageOrder\");\n\n                    b.Property<string>(\"ParentId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ParentSlug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<DateTime?>(\"PubDate\");\n\n                    b.Property<string>(\"SerializedModel\");\n\n                    b.Property<string>(\"Serializer\")\n                        .HasMaxLength(50);\n\n                    b.Property<bool>(\"ShowCategories\");\n\n                    b.Property<bool>(\"ShowComments\");\n\n                    b.Property<bool>(\"ShowHeading\");\n\n                    b.Property<bool>(\"ShowLastModified\");\n\n                    b.Property<bool>(\"ShowMenu\");\n\n                    b.Property<bool>(\"ShowPubDate\");\n\n                    b.Property<string>(\"Slug\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"TemplateKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ViewRoles\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"ParentId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_Page\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageResourceEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Environment\")\n                        .IsRequired()\n                        .HasMaxLength(15);\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<int>(\"Sort\");\n\n                    b.Property<string>(\"Type\")\n                        .IsRequired()\n                        .HasMaxLength(10);\n\n                    b.Property<string>(\"Url\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.ToTable(\"cs_PageResource\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostCategory\", b =>\n                {\n                    b.Property<string>(\"Value\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PostEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.HasKey(\"Value\", \"PostEntityId\");\n\n                    b.HasIndex(\"PostEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.HasIndex(\"Value\");\n\n                    b.ToTable(\"cs_PostCategory\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"Email\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Ip\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"IsAdmin\");\n\n                    b.Property<bool>(\"IsApproved\");\n\n                    b.Property<string>(\"PostEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<DateTime>(\"PubDate\");\n\n                    b.Property<string>(\"UserAgent\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Website\")\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PostEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_PostComment\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"AutoTeaser\");\n\n                    b.Property<string>(\"BlogId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CreatedByUser\")\n                        .HasMaxLength(100);\n\n                    b.Property<DateTime>(\"CreatedUtc\");\n\n                    b.Property<string>(\"DraftAuthor\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"DraftContent\");\n\n                    b.Property<DateTime?>(\"DraftPubDate\");\n\n                    b.Property<string>(\"DraftSerializedModel\");\n\n                    b.Property<string>(\"ImageUrl\")\n                        .HasMaxLength(250);\n\n                    b.Property<bool>(\"IsFeatured\");\n\n                    b.Property<bool>(\"IsPublished\");\n\n                    b.Property<DateTime>(\"LastModified\");\n\n                    b.Property<string>(\"LastModifiedByUser\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"MetaHtml\");\n\n                    b.Property<string>(\"MetaJson\");\n\n                    b.Property<DateTime?>(\"PubDate\");\n\n                    b.Property<string>(\"SerializedModel\");\n\n                    b.Property<string>(\"Serializer\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"Slug\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"SuppressTeaser\");\n\n                    b.Property<string>(\"TeaserOverride\");\n\n                    b.Property<string>(\"TemplateKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ThumbnailUrl\")\n                        .HasMaxLength(250);\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"BlogId\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"Slug\");\n\n                    b.ToTable(\"cs_Post\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\")\n                        .WithMany(\"PageComments\")\n                        .HasForeignKey(\"PageEntityId\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageResourceEntity\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\")\n                        .WithMany(\"PageResources\")\n                        .HasForeignKey(\"PageEntityId\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\")\n                        .WithMany(\"PostComments\")\n                        .HasForeignKey(\"PostEntityId\");\n                });\n#pragma warning restore 612, 618\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.MySQL/Migrations/20190213120841_simplecontent-20190212.cs",
    "content": "﻿using Microsoft.EntityFrameworkCore.Migrations;\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.MySQL.Migrations\n{\n    public partial class simplecontent20190212 : Migration\n    {\n        protected override void Up(MigrationBuilder migrationBuilder)\n        {\n            migrationBuilder.AddColumn<string>(\n                name: \"AboutHeading\",\n                table: \"cs_ContentProject\",\n                maxLength: 255,\n                nullable: true);\n\n            migrationBuilder.AddColumn<bool>(\n                name: \"ShowAboutBox\",\n                table: \"cs_ContentProject\",\n                nullable: false,\n                defaultValue: true);\n\n            migrationBuilder.AddColumn<bool>(\n                name: \"ShowRelatedPosts\",\n                table: \"cs_ContentProject\",\n                nullable: false,\n                defaultValue: true);\n        }\n\n        protected override void Down(MigrationBuilder migrationBuilder)\n        {\n            migrationBuilder.DropColumn(\n                name: \"AboutHeading\",\n                table: \"cs_ContentProject\");\n\n            migrationBuilder.DropColumn(\n                name: \"ShowAboutBox\",\n                table: \"cs_ContentProject\");\n\n            migrationBuilder.DropColumn(\n                name: \"ShowRelatedPosts\",\n                table: \"cs_ContentProject\");\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.MySQL/Migrations/20190213120911_simplecontent-20190213.Designer.cs",
    "content": "﻿// <auto-generated />\nusing System;\nusing Microsoft.EntityFrameworkCore;\nusing Microsoft.EntityFrameworkCore.Infrastructure;\nusing Microsoft.EntityFrameworkCore.Migrations;\nusing Microsoft.EntityFrameworkCore.Storage.ValueConversion;\nusing cloudscribe.SimpleContent.Models;\nusing cloudscribe.SimpleContent.Storage.EFCore.MySQL;\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.MySQL.Migrations\n{\n    [DbContext(typeof(SimpleContentDbContext))]\n    [Migration(\"20190213120911_simplecontent-20190213\")]\n    partial class simplecontent20190213\n    {\n        protected override void BuildTargetModel(ModelBuilder modelBuilder)\n        {\n#pragma warning disable 612, 618\n            modelBuilder\n                .HasAnnotation(\"ProductVersion\", \"2.1.8-servicing-32085\")\n                .HasAnnotation(\"Relational:MaxIdentifierLength\", 64);\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Models.ContentHistory\", b =>\n                {\n                    b.Property<Guid>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ArchivedBy\")\n                        .HasMaxLength(255);\n\n                    b.Property<DateTime>(\"ArchivedUtc\");\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CategoriesCsv\");\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"ContentId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ContentSource\")\n                        .IsRequired()\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CreatedByUser\")\n                        .HasMaxLength(100);\n\n                    b.Property<DateTime>(\"CreatedUtc\");\n\n                    b.Property<string>(\"DraftAuthor\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"DraftContent\");\n\n                    b.Property<DateTime?>(\"DraftPubDate\");\n\n                    b.Property<string>(\"DraftSerializedModel\");\n\n                    b.Property<bool>(\"IsDraftHx\");\n\n                    b.Property<bool>(\"IsPublished\");\n\n                    b.Property<DateTime>(\"LastModified\");\n\n                    b.Property<string>(\"LastModifiedByUser\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"MetaDescription\");\n\n                    b.Property<string>(\"MetaHtml\");\n\n                    b.Property<string>(\"MetaJson\");\n\n                    b.Property<int>(\"PageOrder\");\n\n                    b.Property<string>(\"ParentId\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ParentSlug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ProjectId\");\n\n                    b.Property<DateTime?>(\"PubDate\");\n\n                    b.Property<string>(\"SerializedModel\");\n\n                    b.Property<string>(\"Serializer\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"Slug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"TeaserOverride\");\n\n                    b.Property<string>(\"TemplateKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ViewRoles\");\n\n                    b.Property<bool>(\"WasDeleted\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"ContentId\");\n\n                    b.HasIndex(\"ContentSource\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"CreatedByUser\");\n\n                    b.HasIndex(\"LastModifiedByUser\");\n\n                    b.HasIndex(\"Title\");\n\n                    b.ToTable(\"cs_ContentHistory\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Models.ProjectSettings\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"AboutContent\");\n\n                    b.Property<string>(\"AboutHeading\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"AddBlogToPagesTree\");\n\n                    b.Property<bool>(\"BlogMenuLinksToNewestPost\");\n\n                    b.Property<string>(\"BlogPageNavComponentVisibility\")\n                        .HasMaxLength(255);\n\n                    b.Property<int>(\"BlogPagePosition\");\n\n                    b.Property<string>(\"BlogPageText\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CdnUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ChannelCategoriesCsv\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ChannelRating\")\n                        .HasMaxLength(100);\n\n                    b.Property<int>(\"ChannelTimeToLive\");\n\n                    b.Property<string>(\"CommentNotificationEmail\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"CopyrightNotice\")\n                        .HasMaxLength(255);\n\n                    b.Property<int>(\"DaysToComment\");\n\n                    b.Property<string>(\"DefaultContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<int>(\"DefaultFeedItems\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue(20);\n\n                    b.Property<string>(\"DefaultPageSlug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Description\");\n\n                    b.Property<string>(\"DisqusShortName\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"FacebookAppId\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Image\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"IncludePubDateInPostUrls\");\n\n                    b.Property<string>(\"LanguageCode\")\n                        .HasMaxLength(10);\n\n                    b.Property<string>(\"LocalMediaVirtualPath\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ManagingEditorEmail\")\n                        .HasMaxLength(100);\n\n                    b.Property<int>(\"MaxFeedItems\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue(1000);\n\n                    b.Property<bool>(\"ModerateComments\");\n\n                    b.Property<int>(\"PostsPerPage\");\n\n                    b.Property<string>(\"PubDateFormat\")\n                        .HasMaxLength(75);\n\n                    b.Property<string>(\"Publisher\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"PublisherEntityType\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PublisherLogoHeight\")\n                        .HasMaxLength(20);\n\n                    b.Property<string>(\"PublisherLogoUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"PublisherLogoWidth\")\n                        .HasMaxLength(20);\n\n                    b.Property<string>(\"RecaptchaPrivateKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RecaptchaPublicKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RemoteFeedProcessorUseAgentFragment\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RemoteFeedUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"ShowAboutBox\");\n\n                    b.Property<bool>(\"ShowFeaturedPostsOnDefaultPage\");\n\n                    b.Property<bool>(\"ShowRecentPostsOnDefaultPage\");\n\n                    b.Property<bool>(\"ShowRelatedPosts\");\n\n                    b.Property<bool>(\"ShowTitle\");\n\n                    b.Property<string>(\"SiteName\")\n                        .HasMaxLength(200);\n\n                    b.Property<byte>(\"TeaserMode\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue((byte)0);\n\n                    b.Property<int>(\"TeaserTruncationLength\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue(20);\n\n                    b.Property<byte>(\"TeaserTruncationMode\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue((byte)0);\n\n                    b.Property<string>(\"TimeZoneId\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Title\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"TwitterCreator\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"TwitterPublisher\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"UseDefaultPageAsRootNode\");\n\n                    b.Property<string>(\"WebmasterEmail\")\n                        .HasMaxLength(100);\n\n                    b.HasKey(\"Id\");\n\n                    b.ToTable(\"cs_ContentProject\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageCategory\", b =>\n                {\n                    b.Property<string>(\"Value\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.HasKey(\"Value\", \"PageEntityId\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.HasIndex(\"Value\");\n\n                    b.ToTable(\"cs_PageCategory\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"Email\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Ip\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"IsAdmin\");\n\n                    b.Property<bool>(\"IsApproved\");\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<DateTime>(\"PubDate\");\n\n                    b.Property<string>(\"UserAgent\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Website\")\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_PageComment\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CreatedByUser\")\n                        .HasMaxLength(100);\n\n                    b.Property<DateTime>(\"CreatedUtc\");\n\n                    b.Property<bool>(\"DisableEditor\");\n\n                    b.Property<string>(\"DraftAuthor\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"DraftContent\");\n\n                    b.Property<DateTime?>(\"DraftPubDate\");\n\n                    b.Property<string>(\"DraftSerializedModel\");\n\n                    b.Property<string>(\"ExternalUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"IsPublished\");\n\n                    b.Property<DateTime>(\"LastModified\");\n\n                    b.Property<string>(\"LastModifiedByUser\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"MenuFilters\")\n                        .HasMaxLength(500);\n\n                    b.Property<bool>(\"MenuOnly\");\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"MetaHtml\");\n\n                    b.Property<string>(\"MetaJson\");\n\n                    b.Property<int>(\"PageOrder\");\n\n                    b.Property<string>(\"ParentId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ParentSlug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<DateTime?>(\"PubDate\");\n\n                    b.Property<string>(\"SerializedModel\");\n\n                    b.Property<string>(\"Serializer\")\n                        .HasMaxLength(50);\n\n                    b.Property<bool>(\"ShowCategories\");\n\n                    b.Property<bool>(\"ShowComments\");\n\n                    b.Property<bool>(\"ShowHeading\");\n\n                    b.Property<bool>(\"ShowLastModified\");\n\n                    b.Property<bool>(\"ShowMenu\");\n\n                    b.Property<bool>(\"ShowPubDate\");\n\n                    b.Property<string>(\"Slug\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"TemplateKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ViewRoles\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"ParentId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_Page\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageResourceEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Environment\")\n                        .IsRequired()\n                        .HasMaxLength(15);\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<int>(\"Sort\");\n\n                    b.Property<string>(\"Type\")\n                        .IsRequired()\n                        .HasMaxLength(10);\n\n                    b.Property<string>(\"Url\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.ToTable(\"cs_PageResource\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostCategory\", b =>\n                {\n                    b.Property<string>(\"Value\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PostEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.HasKey(\"Value\", \"PostEntityId\");\n\n                    b.HasIndex(\"PostEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.HasIndex(\"Value\");\n\n                    b.ToTable(\"cs_PostCategory\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"Email\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Ip\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"IsAdmin\");\n\n                    b.Property<bool>(\"IsApproved\");\n\n                    b.Property<string>(\"PostEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<DateTime>(\"PubDate\");\n\n                    b.Property<string>(\"UserAgent\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Website\")\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PostEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_PostComment\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"AutoTeaser\");\n\n                    b.Property<string>(\"BlogId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CreatedByUser\")\n                        .HasMaxLength(100);\n\n                    b.Property<DateTime>(\"CreatedUtc\");\n\n                    b.Property<string>(\"DraftAuthor\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"DraftContent\");\n\n                    b.Property<DateTime?>(\"DraftPubDate\");\n\n                    b.Property<string>(\"DraftSerializedModel\");\n\n                    b.Property<string>(\"ImageUrl\")\n                        .HasMaxLength(250);\n\n                    b.Property<bool>(\"IsFeatured\");\n\n                    b.Property<bool>(\"IsPublished\");\n\n                    b.Property<DateTime>(\"LastModified\");\n\n                    b.Property<string>(\"LastModifiedByUser\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"MetaHtml\");\n\n                    b.Property<string>(\"MetaJson\");\n\n                    b.Property<DateTime?>(\"PubDate\");\n\n                    b.Property<string>(\"SerializedModel\");\n\n                    b.Property<string>(\"Serializer\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"Slug\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"SuppressTeaser\");\n\n                    b.Property<string>(\"TeaserOverride\");\n\n                    b.Property<string>(\"TemplateKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ThumbnailUrl\")\n                        .HasMaxLength(250);\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"BlogId\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"Slug\");\n\n                    b.ToTable(\"cs_Post\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\")\n                        .WithMany(\"PageComments\")\n                        .HasForeignKey(\"PageEntityId\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageResourceEntity\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\")\n                        .WithMany(\"PageResources\")\n                        .HasForeignKey(\"PageEntityId\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\")\n                        .WithMany(\"PostComments\")\n                        .HasForeignKey(\"PostEntityId\");\n                });\n#pragma warning restore 612, 618\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.MySQL/Migrations/20190213120911_simplecontent-20190213.cs",
    "content": "﻿using Microsoft.EntityFrameworkCore.Migrations;\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.MySQL.Migrations\n{\n    public partial class simplecontent20190213 : Migration\n    {\n        protected override void Up(MigrationBuilder migrationBuilder)\n        {\n            migrationBuilder.AlterColumn<bool>(\n                name: \"ShowRelatedPosts\",\n                table: \"cs_ContentProject\",\n                nullable: false,\n                oldClrType: typeof(bool),\n                oldDefaultValue: true);\n\n            migrationBuilder.AlterColumn<bool>(\n                name: \"ShowAboutBox\",\n                table: \"cs_ContentProject\",\n                nullable: false,\n                oldClrType: typeof(bool),\n                oldDefaultValue: true);\n        }\n\n        protected override void Down(MigrationBuilder migrationBuilder)\n        {\n            migrationBuilder.AlterColumn<bool>(\n                name: \"ShowRelatedPosts\",\n                table: \"cs_ContentProject\",\n                nullable: false,\n                defaultValue: true,\n                oldClrType: typeof(bool));\n\n            migrationBuilder.AlterColumn<bool>(\n                name: \"ShowAboutBox\",\n                table: \"cs_ContentProject\",\n                nullable: false,\n                defaultValue: true,\n                oldClrType: typeof(bool));\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.MySQL/Migrations/20190304161922_simplecontent-20190304.Designer.cs",
    "content": "﻿// <auto-generated />\nusing System;\nusing Microsoft.EntityFrameworkCore;\nusing Microsoft.EntityFrameworkCore.Infrastructure;\nusing Microsoft.EntityFrameworkCore.Migrations;\nusing Microsoft.EntityFrameworkCore.Storage.ValueConversion;\nusing cloudscribe.SimpleContent.Models;\nusing cloudscribe.SimpleContent.Storage.EFCore.MySQL;\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.MySQL.Migrations\n{\n    [DbContext(typeof(SimpleContentDbContext))]\n    [Migration(\"20190304161922_simplecontent-20190304\")]\n    partial class simplecontent20190304\n    {\n        protected override void BuildTargetModel(ModelBuilder modelBuilder)\n        {\n#pragma warning disable 612, 618\n            modelBuilder\n                .HasAnnotation(\"ProductVersion\", \"2.1.8-servicing-32085\")\n                .HasAnnotation(\"Relational:MaxIdentifierLength\", 64);\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Models.ContentHistory\", b =>\n                {\n                    b.Property<Guid>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ArchivedBy\")\n                        .HasMaxLength(255);\n\n                    b.Property<DateTime>(\"ArchivedUtc\");\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CategoriesCsv\");\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"ContentId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ContentSource\")\n                        .IsRequired()\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CreatedByUser\")\n                        .HasMaxLength(100);\n\n                    b.Property<DateTime>(\"CreatedUtc\");\n\n                    b.Property<string>(\"DraftAuthor\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"DraftContent\");\n\n                    b.Property<DateTime?>(\"DraftPubDate\");\n\n                    b.Property<string>(\"DraftSerializedModel\");\n\n                    b.Property<bool>(\"IsDraftHx\");\n\n                    b.Property<bool>(\"IsPublished\");\n\n                    b.Property<DateTime>(\"LastModified\");\n\n                    b.Property<string>(\"LastModifiedByUser\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"MetaDescription\");\n\n                    b.Property<string>(\"MetaHtml\");\n\n                    b.Property<string>(\"MetaJson\");\n\n                    b.Property<int>(\"PageOrder\");\n\n                    b.Property<string>(\"ParentId\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ParentSlug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ProjectId\")\n                        .HasMaxLength(50);\n\n                    b.Property<DateTime?>(\"PubDate\");\n\n                    b.Property<string>(\"SerializedModel\");\n\n                    b.Property<string>(\"Serializer\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"Slug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"TeaserOverride\");\n\n                    b.Property<string>(\"TemplateKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ViewRoles\");\n\n                    b.Property<bool>(\"WasDeleted\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"ContentId\");\n\n                    b.HasIndex(\"ContentSource\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"CreatedByUser\");\n\n                    b.HasIndex(\"LastModifiedByUser\");\n\n                    b.HasIndex(\"Title\");\n\n                    b.ToTable(\"cs_ContentHistory\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Models.ProjectSettings\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"AboutContent\");\n\n                    b.Property<string>(\"AboutHeading\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"AddBlogToPagesTree\");\n\n                    b.Property<bool>(\"BlogMenuLinksToNewestPost\");\n\n                    b.Property<string>(\"BlogPageNavComponentVisibility\")\n                        .HasMaxLength(255);\n\n                    b.Property<int>(\"BlogPagePosition\");\n\n                    b.Property<string>(\"BlogPageText\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CdnUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ChannelCategoriesCsv\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ChannelRating\")\n                        .HasMaxLength(100);\n\n                    b.Property<int>(\"ChannelTimeToLive\");\n\n                    b.Property<string>(\"CommentNotificationEmail\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"CopyrightNotice\")\n                        .HasMaxLength(255);\n\n                    b.Property<int>(\"DaysToComment\");\n\n                    b.Property<string>(\"DefaultContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<int>(\"DefaultFeedItems\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue(20);\n\n                    b.Property<string>(\"DefaultPageSlug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Description\");\n\n                    b.Property<string>(\"DisqusShortName\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"FacebookAppId\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Image\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"IncludePubDateInPostUrls\");\n\n                    b.Property<string>(\"LanguageCode\")\n                        .HasMaxLength(10);\n\n                    b.Property<string>(\"LocalMediaVirtualPath\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ManagingEditorEmail\")\n                        .HasMaxLength(100);\n\n                    b.Property<int>(\"MaxFeedItems\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue(1000);\n\n                    b.Property<bool>(\"ModerateComments\");\n\n                    b.Property<int>(\"PostsPerPage\");\n\n                    b.Property<string>(\"PubDateFormat\")\n                        .HasMaxLength(75);\n\n                    b.Property<string>(\"Publisher\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"PublisherEntityType\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PublisherLogoHeight\")\n                        .HasMaxLength(20);\n\n                    b.Property<string>(\"PublisherLogoUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"PublisherLogoWidth\")\n                        .HasMaxLength(20);\n\n                    b.Property<string>(\"RecaptchaPrivateKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RecaptchaPublicKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RemoteFeedProcessorUseAgentFragment\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RemoteFeedUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"ShowAboutBox\");\n\n                    b.Property<bool>(\"ShowFeaturedPostsOnDefaultPage\");\n\n                    b.Property<bool>(\"ShowRecentPostsOnDefaultPage\");\n\n                    b.Property<bool>(\"ShowRelatedPosts\");\n\n                    b.Property<bool>(\"ShowTitle\");\n\n                    b.Property<string>(\"SiteName\")\n                        .HasMaxLength(200);\n\n                    b.Property<byte>(\"TeaserMode\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue((byte)0);\n\n                    b.Property<int>(\"TeaserTruncationLength\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue(20);\n\n                    b.Property<byte>(\"TeaserTruncationMode\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue((byte)0);\n\n                    b.Property<string>(\"TimeZoneId\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Title\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"TwitterCreator\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"TwitterPublisher\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"UseDefaultPageAsRootNode\");\n\n                    b.Property<string>(\"WebmasterEmail\")\n                        .HasMaxLength(100);\n\n                    b.HasKey(\"Id\");\n\n                    b.ToTable(\"cs_ContentProject\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageCategory\", b =>\n                {\n                    b.Property<string>(\"Value\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(50);\n\n                    b.HasKey(\"Value\", \"PageEntityId\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.HasIndex(\"Value\");\n\n                    b.ToTable(\"cs_PageCategory\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"Email\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Ip\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"IsAdmin\");\n\n                    b.Property<bool>(\"IsApproved\");\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(50);\n\n                    b.Property<DateTime>(\"PubDate\");\n\n                    b.Property<string>(\"UserAgent\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Website\")\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_PageComment\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CreatedByUser\")\n                        .HasMaxLength(100);\n\n                    b.Property<DateTime>(\"CreatedUtc\");\n\n                    b.Property<bool>(\"DisableEditor\");\n\n                    b.Property<string>(\"DraftAuthor\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"DraftContent\");\n\n                    b.Property<DateTime?>(\"DraftPubDate\");\n\n                    b.Property<string>(\"DraftSerializedModel\");\n\n                    b.Property<string>(\"ExternalUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"IsPublished\");\n\n                    b.Property<DateTime>(\"LastModified\");\n\n                    b.Property<string>(\"LastModifiedByUser\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"MenuFilters\")\n                        .HasMaxLength(500);\n\n                    b.Property<bool>(\"MenuOnly\");\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"MetaHtml\");\n\n                    b.Property<string>(\"MetaJson\");\n\n                    b.Property<int>(\"PageOrder\");\n\n                    b.Property<string>(\"ParentId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ParentSlug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(50);\n\n                    b.Property<DateTime?>(\"PubDate\");\n\n                    b.Property<string>(\"SerializedModel\");\n\n                    b.Property<string>(\"Serializer\")\n                        .HasMaxLength(50);\n\n                    b.Property<bool>(\"ShowCategories\");\n\n                    b.Property<bool>(\"ShowComments\");\n\n                    b.Property<bool>(\"ShowHeading\");\n\n                    b.Property<bool>(\"ShowLastModified\");\n\n                    b.Property<bool>(\"ShowMenu\");\n\n                    b.Property<bool>(\"ShowPubDate\");\n\n                    b.Property<string>(\"Slug\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"TemplateKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ViewRoles\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"ParentId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_Page\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageResourceEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Environment\")\n                        .IsRequired()\n                        .HasMaxLength(15);\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<int>(\"Sort\");\n\n                    b.Property<string>(\"Type\")\n                        .IsRequired()\n                        .HasMaxLength(10);\n\n                    b.Property<string>(\"Url\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.ToTable(\"cs_PageResource\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostCategory\", b =>\n                {\n                    b.Property<string>(\"Value\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PostEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(50);\n\n                    b.HasKey(\"Value\", \"PostEntityId\");\n\n                    b.HasIndex(\"PostEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.HasIndex(\"Value\");\n\n                    b.ToTable(\"cs_PostCategory\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"Email\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Ip\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"IsAdmin\");\n\n                    b.Property<bool>(\"IsApproved\");\n\n                    b.Property<string>(\"PostEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(50);\n\n                    b.Property<DateTime>(\"PubDate\");\n\n                    b.Property<string>(\"UserAgent\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Website\")\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PostEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_PostComment\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"AutoTeaser\");\n\n                    b.Property<string>(\"BlogId\")\n                        .IsRequired()\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CreatedByUser\")\n                        .HasMaxLength(100);\n\n                    b.Property<DateTime>(\"CreatedUtc\");\n\n                    b.Property<string>(\"DraftAuthor\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"DraftContent\");\n\n                    b.Property<DateTime?>(\"DraftPubDate\");\n\n                    b.Property<string>(\"DraftSerializedModel\");\n\n                    b.Property<string>(\"ImageUrl\")\n                        .HasMaxLength(250);\n\n                    b.Property<bool>(\"IsFeatured\");\n\n                    b.Property<bool>(\"IsPublished\");\n\n                    b.Property<DateTime>(\"LastModified\");\n\n                    b.Property<string>(\"LastModifiedByUser\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"MetaHtml\");\n\n                    b.Property<string>(\"MetaJson\");\n\n                    b.Property<DateTime?>(\"PubDate\");\n\n                    b.Property<string>(\"SerializedModel\");\n\n                    b.Property<string>(\"Serializer\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"Slug\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"SuppressTeaser\");\n\n                    b.Property<string>(\"TeaserOverride\");\n\n                    b.Property<string>(\"TemplateKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ThumbnailUrl\")\n                        .HasMaxLength(250);\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"BlogId\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"Slug\");\n\n                    b.ToTable(\"cs_Post\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\")\n                        .WithMany(\"PageComments\")\n                        .HasForeignKey(\"PageEntityId\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageResourceEntity\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\")\n                        .WithMany(\"PageResources\")\n                        .HasForeignKey(\"PageEntityId\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\")\n                        .WithMany(\"PostComments\")\n                        .HasForeignKey(\"PostEntityId\");\n                });\n#pragma warning restore 612, 618\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.MySQL/Migrations/20190304161922_simplecontent-20190304.cs",
    "content": "﻿using Microsoft.EntityFrameworkCore.Migrations;\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.MySQL.Migrations\n{\n    public partial class simplecontent20190304 : Migration\n    {\n        protected override void Up(MigrationBuilder migrationBuilder)\n        {\n            migrationBuilder.AlterColumn<string>(\n                name: \"ProjectId\",\n                table: \"cs_PostComment\",\n                maxLength: 50,\n                nullable: false,\n                oldClrType: typeof(string),\n                oldMaxLength: 36);\n\n            migrationBuilder.AlterColumn<string>(\n                name: \"ProjectId\",\n                table: \"cs_PostCategory\",\n                maxLength: 50,\n                nullable: false,\n                oldClrType: typeof(string),\n                oldMaxLength: 36);\n\n            migrationBuilder.AlterColumn<string>(\n                name: \"BlogId\",\n                table: \"cs_Post\",\n                maxLength: 50,\n                nullable: false,\n                oldClrType: typeof(string),\n                oldMaxLength: 36);\n\n            migrationBuilder.AlterColumn<string>(\n                name: \"ProjectId\",\n                table: \"cs_PageComment\",\n                maxLength: 50,\n                nullable: false,\n                oldClrType: typeof(string),\n                oldMaxLength: 36);\n\n            migrationBuilder.AlterColumn<string>(\n                name: \"ProjectId\",\n                table: \"cs_PageCategory\",\n                maxLength: 50,\n                nullable: false,\n                oldClrType: typeof(string),\n                oldMaxLength: 36);\n\n            migrationBuilder.AlterColumn<string>(\n                name: \"ProjectId\",\n                table: \"cs_Page\",\n                maxLength: 50,\n                nullable: false,\n                oldClrType: typeof(string),\n                oldMaxLength: 36);\n\n            migrationBuilder.AlterColumn<string>(\n                name: \"Id\",\n                table: \"cs_ContentProject\",\n                maxLength: 50,\n                nullable: false,\n                oldClrType: typeof(string),\n                oldMaxLength: 36);\n\n            migrationBuilder.AlterColumn<string>(\n                name: \"ProjectId\",\n                table: \"cs_ContentHistory\",\n                maxLength: 50,\n                nullable: true,\n                oldClrType: typeof(string),\n                oldNullable: true);\n        }\n\n        protected override void Down(MigrationBuilder migrationBuilder)\n        {\n            migrationBuilder.AlterColumn<string>(\n                name: \"ProjectId\",\n                table: \"cs_PostComment\",\n                maxLength: 36,\n                nullable: false,\n                oldClrType: typeof(string),\n                oldMaxLength: 50);\n\n            migrationBuilder.AlterColumn<string>(\n                name: \"ProjectId\",\n                table: \"cs_PostCategory\",\n                maxLength: 36,\n                nullable: false,\n                oldClrType: typeof(string),\n                oldMaxLength: 50);\n\n            migrationBuilder.AlterColumn<string>(\n                name: \"BlogId\",\n                table: \"cs_Post\",\n                maxLength: 36,\n                nullable: false,\n                oldClrType: typeof(string),\n                oldMaxLength: 50);\n\n            migrationBuilder.AlterColumn<string>(\n                name: \"ProjectId\",\n                table: \"cs_PageComment\",\n                maxLength: 36,\n                nullable: false,\n                oldClrType: typeof(string),\n                oldMaxLength: 50);\n\n            migrationBuilder.AlterColumn<string>(\n                name: \"ProjectId\",\n                table: \"cs_PageCategory\",\n                maxLength: 36,\n                nullable: false,\n                oldClrType: typeof(string),\n                oldMaxLength: 50);\n\n            migrationBuilder.AlterColumn<string>(\n                name: \"ProjectId\",\n                table: \"cs_Page\",\n                maxLength: 36,\n                nullable: false,\n                oldClrType: typeof(string),\n                oldMaxLength: 50);\n\n            migrationBuilder.AlterColumn<string>(\n                name: \"Id\",\n                table: \"cs_ContentProject\",\n                maxLength: 36,\n                nullable: false,\n                oldClrType: typeof(string),\n                oldMaxLength: 50);\n\n            migrationBuilder.AlterColumn<string>(\n                name: \"ProjectId\",\n                table: \"cs_ContentHistory\",\n                nullable: true,\n                oldClrType: typeof(string),\n                oldMaxLength: 50,\n                oldNullable: true);\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.MySQL/Migrations/20190312155536_simplecontent-20190312.Designer.cs",
    "content": "﻿// <auto-generated />\nusing System;\nusing Microsoft.EntityFrameworkCore;\nusing Microsoft.EntityFrameworkCore.Infrastructure;\nusing Microsoft.EntityFrameworkCore.Migrations;\nusing Microsoft.EntityFrameworkCore.Storage.ValueConversion;\nusing cloudscribe.SimpleContent.Models;\nusing cloudscribe.SimpleContent.Storage.EFCore.MySQL;\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.MySQL.Migrations\n{\n    [DbContext(typeof(SimpleContentDbContext))]\n    [Migration(\"20190312155536_simplecontent-20190312\")]\n    partial class simplecontent20190312\n    {\n        protected override void BuildTargetModel(ModelBuilder modelBuilder)\n        {\n#pragma warning disable 612, 618\n            modelBuilder\n                .HasAnnotation(\"ProductVersion\", \"2.1.8-servicing-32085\")\n                .HasAnnotation(\"Relational:MaxIdentifierLength\", 64);\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Models.ContentHistory\", b =>\n                {\n                    b.Property<Guid>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ArchivedBy\")\n                        .HasMaxLength(255);\n\n                    b.Property<DateTime>(\"ArchivedUtc\");\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CategoriesCsv\");\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"ContentId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ContentSource\")\n                        .IsRequired()\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CreatedByUser\")\n                        .HasMaxLength(100);\n\n                    b.Property<DateTime>(\"CreatedUtc\");\n\n                    b.Property<string>(\"DraftAuthor\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"DraftContent\");\n\n                    b.Property<DateTime?>(\"DraftPubDate\");\n\n                    b.Property<string>(\"DraftSerializedModel\");\n\n                    b.Property<bool>(\"IsDraftHx\");\n\n                    b.Property<bool>(\"IsPublished\");\n\n                    b.Property<DateTime>(\"LastModified\");\n\n                    b.Property<string>(\"LastModifiedByUser\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"MetaDescription\");\n\n                    b.Property<string>(\"MetaHtml\");\n\n                    b.Property<string>(\"MetaJson\");\n\n                    b.Property<int>(\"PageOrder\");\n\n                    b.Property<string>(\"ParentId\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ParentSlug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ProjectId\")\n                        .HasMaxLength(50);\n\n                    b.Property<DateTime?>(\"PubDate\");\n\n                    b.Property<string>(\"SerializedModel\");\n\n                    b.Property<string>(\"Serializer\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"Slug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"TeaserOverride\");\n\n                    b.Property<string>(\"TemplateKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ViewRoles\");\n\n                    b.Property<bool>(\"WasDeleted\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"ContentId\");\n\n                    b.HasIndex(\"ContentSource\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"CreatedByUser\");\n\n                    b.HasIndex(\"LastModifiedByUser\");\n\n                    b.HasIndex(\"Title\");\n\n                    b.ToTable(\"cs_ContentHistory\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Models.ProjectSettings\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"AboutContent\");\n\n                    b.Property<string>(\"AboutHeading\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"AddBlogToPagesTree\");\n\n                    b.Property<bool>(\"BlogMenuLinksToNewestPost\");\n\n                    b.Property<string>(\"BlogPageNavComponentVisibility\")\n                        .HasMaxLength(255);\n\n                    b.Property<int>(\"BlogPagePosition\");\n\n                    b.Property<string>(\"BlogPageText\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CdnUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ChannelCategoriesCsv\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ChannelRating\")\n                        .HasMaxLength(100);\n\n                    b.Property<int>(\"ChannelTimeToLive\");\n\n                    b.Property<string>(\"CommentNotificationEmail\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"CopyrightNotice\")\n                        .HasMaxLength(255);\n\n                    b.Property<int>(\"DaysToComment\");\n\n                    b.Property<string>(\"DefaultContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<int>(\"DefaultFeedItems\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue(20);\n\n                    b.Property<string>(\"DefaultPageSlug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Description\");\n\n                    b.Property<string>(\"DisqusShortName\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"FacebookAppId\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Image\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"IncludePubDateInPostUrls\");\n\n                    b.Property<string>(\"LanguageCode\")\n                        .HasMaxLength(10);\n\n                    b.Property<string>(\"LocalMediaVirtualPath\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ManagingEditorEmail\")\n                        .HasMaxLength(100);\n\n                    b.Property<int>(\"MaxFeedItems\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue(1000);\n\n                    b.Property<bool>(\"ModerateComments\");\n\n                    b.Property<int>(\"PostsPerPage\");\n\n                    b.Property<string>(\"PubDateFormat\")\n                        .HasMaxLength(75);\n\n                    b.Property<string>(\"Publisher\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"PublisherEntityType\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PublisherLogoHeight\")\n                        .HasMaxLength(20);\n\n                    b.Property<string>(\"PublisherLogoUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"PublisherLogoWidth\")\n                        .HasMaxLength(20);\n\n                    b.Property<string>(\"RecaptchaPrivateKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RecaptchaPublicKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RemoteFeedProcessorUseAgentFragment\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RemoteFeedUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"ShowAboutBox\");\n\n                    b.Property<bool>(\"ShowFeaturedPostsOnDefaultPage\");\n\n                    b.Property<bool>(\"ShowRecentPostsOnDefaultPage\");\n\n                    b.Property<bool>(\"ShowRelatedPosts\");\n\n                    b.Property<bool>(\"ShowTitle\");\n\n                    b.Property<string>(\"SiteName\")\n                        .HasMaxLength(200);\n\n                    b.Property<byte>(\"TeaserMode\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue((byte)0);\n\n                    b.Property<int>(\"TeaserTruncationLength\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue(20);\n\n                    b.Property<byte>(\"TeaserTruncationMode\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue((byte)0);\n\n                    b.Property<string>(\"TimeZoneId\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Title\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"TwitterCreator\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"TwitterPublisher\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"UseDefaultPageAsRootNode\");\n\n                    b.Property<string>(\"WebmasterEmail\")\n                        .HasMaxLength(100);\n\n                    b.HasKey(\"Id\");\n\n                    b.ToTable(\"cs_ContentProject\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageCategory\", b =>\n                {\n                    b.Property<string>(\"Value\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(50);\n\n                    b.HasKey(\"Value\", \"PageEntityId\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.HasIndex(\"Value\");\n\n                    b.ToTable(\"cs_PageCategory\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"Email\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Ip\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"IsAdmin\");\n\n                    b.Property<bool>(\"IsApproved\");\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(50);\n\n                    b.Property<DateTime>(\"PubDate\");\n\n                    b.Property<string>(\"UserAgent\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Website\")\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_PageComment\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CreatedByUser\")\n                        .HasMaxLength(100);\n\n                    b.Property<DateTime>(\"CreatedUtc\");\n\n                    b.Property<bool>(\"DisableEditor\");\n\n                    b.Property<string>(\"DraftAuthor\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"DraftContent\");\n\n                    b.Property<DateTime?>(\"DraftPubDate\");\n\n                    b.Property<string>(\"DraftSerializedModel\");\n\n                    b.Property<string>(\"ExternalUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"IsPublished\");\n\n                    b.Property<DateTime>(\"LastModified\");\n\n                    b.Property<string>(\"LastModifiedByUser\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"MenuFilters\")\n                        .HasMaxLength(500);\n\n                    b.Property<bool>(\"MenuOnly\");\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"MetaHtml\");\n\n                    b.Property<string>(\"MetaJson\");\n\n                    b.Property<int>(\"PageOrder\");\n\n                    b.Property<string>(\"ParentId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ParentSlug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(50);\n\n                    b.Property<DateTime?>(\"PubDate\");\n\n                    b.Property<string>(\"SerializedModel\");\n\n                    b.Property<string>(\"Serializer\")\n                        .HasMaxLength(50);\n\n                    b.Property<bool>(\"ShowCategories\");\n\n                    b.Property<bool>(\"ShowComments\");\n\n                    b.Property<bool>(\"ShowHeading\");\n\n                    b.Property<bool>(\"ShowLastModified\");\n\n                    b.Property<bool>(\"ShowMenu\");\n\n                    b.Property<bool>(\"ShowPubDate\");\n\n                    b.Property<string>(\"Slug\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"TemplateKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ViewRoles\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"ParentId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_Page\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageResourceEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Environment\")\n                        .IsRequired()\n                        .HasMaxLength(15);\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<int>(\"Sort\");\n\n                    b.Property<string>(\"Type\")\n                        .IsRequired()\n                        .HasMaxLength(10);\n\n                    b.Property<string>(\"Url\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.ToTable(\"cs_PageResource\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostCategory\", b =>\n                {\n                    b.Property<string>(\"Value\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PostEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(50);\n\n                    b.HasKey(\"Value\", \"PostEntityId\");\n\n                    b.HasIndex(\"PostEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.HasIndex(\"Value\");\n\n                    b.ToTable(\"cs_PostCategory\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"Email\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Ip\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"IsAdmin\");\n\n                    b.Property<bool>(\"IsApproved\");\n\n                    b.Property<string>(\"PostEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(50);\n\n                    b.Property<DateTime>(\"PubDate\");\n\n                    b.Property<string>(\"UserAgent\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Website\")\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PostEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_PostComment\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"AutoTeaser\");\n\n                    b.Property<string>(\"BlogId\")\n                        .IsRequired()\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CreatedByUser\")\n                        .HasMaxLength(100);\n\n                    b.Property<DateTime>(\"CreatedUtc\");\n\n                    b.Property<string>(\"DraftAuthor\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"DraftContent\");\n\n                    b.Property<DateTime?>(\"DraftPubDate\");\n\n                    b.Property<string>(\"DraftSerializedModel\");\n\n                    b.Property<string>(\"ImageUrl\")\n                        .HasMaxLength(250);\n\n                    b.Property<bool>(\"IsFeatured\");\n\n                    b.Property<bool>(\"IsPublished\");\n\n                    b.Property<DateTime>(\"LastModified\");\n\n                    b.Property<string>(\"LastModifiedByUser\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"MetaHtml\");\n\n                    b.Property<string>(\"MetaJson\");\n\n                    b.Property<DateTime?>(\"PubDate\");\n\n                    b.Property<string>(\"SerializedModel\");\n\n                    b.Property<string>(\"Serializer\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"Slug\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"SuppressTeaser\");\n\n                    b.Property<string>(\"TeaserOverride\");\n\n                    b.Property<string>(\"TemplateKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ThumbnailUrl\")\n                        .HasMaxLength(250);\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"BlogId\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"Slug\");\n\n                    b.ToTable(\"cs_Post\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\")\n                        .WithMany(\"PageComments\")\n                        .HasForeignKey(\"PageEntityId\")\n                        .OnDelete(DeleteBehavior.Cascade);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageResourceEntity\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\")\n                        .WithMany(\"PageResources\")\n                        .HasForeignKey(\"PageEntityId\")\n                        .OnDelete(DeleteBehavior.Cascade);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\")\n                        .WithMany(\"PostComments\")\n                        .HasForeignKey(\"PostEntityId\");\n                });\n#pragma warning restore 612, 618\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.MySQL/Migrations/20190312155536_simplecontent-20190312.cs",
    "content": "﻿using Microsoft.EntityFrameworkCore.Migrations;\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.MySQL.Migrations\n{\n    public partial class simplecontent20190312 : Migration\n    {\n        protected override void Up(MigrationBuilder migrationBuilder)\n        {\n            migrationBuilder.DropForeignKey(\n                name: \"FK_cs_PageComment_cs_Page_PageEntityId\",\n                table: \"cs_PageComment\");\n\n            migrationBuilder.DropForeignKey(\n                name: \"FK_cs_PageResource_cs_Page_PageEntityId\",\n                table: \"cs_PageResource\");\n\n            migrationBuilder.AddForeignKey(\n                name: \"FK_cs_PageComment_cs_Page_PageEntityId\",\n                table: \"cs_PageComment\",\n                column: \"PageEntityId\",\n                principalTable: \"cs_Page\",\n                principalColumn: \"Id\",\n                onDelete: ReferentialAction.Cascade);\n\n            migrationBuilder.AddForeignKey(\n                name: \"FK_cs_PageResource_cs_Page_PageEntityId\",\n                table: \"cs_PageResource\",\n                column: \"PageEntityId\",\n                principalTable: \"cs_Page\",\n                principalColumn: \"Id\",\n                onDelete: ReferentialAction.Cascade);\n        }\n\n        protected override void Down(MigrationBuilder migrationBuilder)\n        {\n            migrationBuilder.DropForeignKey(\n                name: \"FK_cs_PageComment_cs_Page_PageEntityId\",\n                table: \"cs_PageComment\");\n\n            migrationBuilder.DropForeignKey(\n                name: \"FK_cs_PageResource_cs_Page_PageEntityId\",\n                table: \"cs_PageResource\");\n\n            migrationBuilder.AddForeignKey(\n                name: \"FK_cs_PageComment_cs_Page_PageEntityId\",\n                table: \"cs_PageComment\",\n                column: \"PageEntityId\",\n                principalTable: \"cs_Page\",\n                principalColumn: \"Id\",\n                onDelete: ReferentialAction.Restrict);\n\n            migrationBuilder.AddForeignKey(\n                name: \"FK_cs_PageResource_cs_Page_PageEntityId\",\n                table: \"cs_PageResource\",\n                column: \"PageEntityId\",\n                principalTable: \"cs_Page\",\n                principalColumn: \"Id\",\n                onDelete: ReferentialAction.Restrict);\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.MySQL/Migrations/20200723185158_AddPostShowCommentsSwitch.Designer.cs",
    "content": "﻿// <auto-generated />\nusing System;\nusing Microsoft.EntityFrameworkCore;\nusing Microsoft.EntityFrameworkCore.Infrastructure;\nusing Microsoft.EntityFrameworkCore.Migrations;\nusing Microsoft.EntityFrameworkCore.Storage.ValueConversion;\nusing cloudscribe.SimpleContent.Storage.EFCore.MySQL;\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.MySQL.Migrations\n{\n    [DbContext(typeof(SimpleContentDbContext))]\n    [Migration(\"20200723185158_AddPostShowCommentsSwitch\")]\n    partial class AddPostShowCommentsSwitch\n    {\n        protected override void BuildTargetModel(ModelBuilder modelBuilder)\n        {\n#pragma warning disable 612, 618\n            modelBuilder\n                .HasAnnotation(\"ProductVersion\", \"3.0.0\")\n                .HasAnnotation(\"Relational:MaxIdentifierLength\", 64);\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Models.ContentHistory\", b =>\n                {\n                    b.Property<Guid>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"char(36)\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ArchivedBy\")\n                        .HasColumnType(\"varchar(255) CHARACTER SET utf8mb4\")\n                        .HasMaxLength(255);\n\n                    b.Property<DateTime>(\"ArchivedUtc\")\n                        .HasColumnType(\"datetime(6)\");\n\n                    b.Property<string>(\"Author\")\n                        .HasColumnType(\"varchar(255) CHARACTER SET utf8mb4\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasColumnType(\"longtext CHARACTER SET utf8mb4\");\n\n                    b.Property<string>(\"Content\")\n                        .HasColumnType(\"longtext CHARACTER SET utf8mb4\");\n\n                    b.Property<string>(\"ContentId\")\n                        .IsRequired()\n                        .HasColumnType(\"varchar(36) CHARACTER SET utf8mb4\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ContentSource\")\n                        .IsRequired()\n                        .HasColumnType(\"varchar(50) CHARACTER SET utf8mb4\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"varchar(50) CHARACTER SET utf8mb4\")\n                        .HasMaxLength(50)\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasColumnType(\"varchar(255) CHARACTER SET utf8mb4\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CreatedByUser\")\n                        .HasColumnType(\"varchar(100) CHARACTER SET utf8mb4\")\n                        .HasMaxLength(100);\n\n                    b.Property<DateTime>(\"CreatedUtc\")\n                        .HasColumnType(\"datetime(6)\");\n\n                    b.Property<string>(\"DraftAuthor\")\n                        .HasColumnType(\"varchar(255) CHARACTER SET utf8mb4\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"DraftContent\")\n                        .HasColumnType(\"longtext CHARACTER SET utf8mb4\");\n\n                    b.Property<DateTime?>(\"DraftPubDate\")\n                        .HasColumnType(\"datetime(6)\");\n\n                    b.Property<string>(\"DraftSerializedModel\")\n                        .HasColumnType(\"longtext CHARACTER SET utf8mb4\");\n\n                    b.Property<bool>(\"IsDraftHx\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<bool>(\"IsPublished\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<DateTime>(\"LastModified\")\n                        .HasColumnType(\"datetime(6)\");\n\n                    b.Property<string>(\"LastModifiedByUser\")\n                        .HasColumnType(\"varchar(100) CHARACTER SET utf8mb4\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasColumnType(\"longtext CHARACTER SET utf8mb4\");\n\n                    b.Property<string>(\"MetaHtml\")\n                        .HasColumnType(\"longtext CHARACTER SET utf8mb4\");\n\n                    b.Property<string>(\"MetaJson\")\n                        .HasColumnType(\"longtext CHARACTER SET utf8mb4\");\n\n                    b.Property<int>(\"PageOrder\")\n                        .HasColumnType(\"int\");\n\n                    b.Property<string>(\"ParentId\")\n                        .HasColumnType(\"varchar(255) CHARACTER SET utf8mb4\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ParentSlug\")\n                        .HasColumnType(\"varchar(255) CHARACTER SET utf8mb4\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ProjectId\")\n                        .HasColumnType(\"varchar(50) CHARACTER SET utf8mb4\")\n                        .HasMaxLength(50);\n\n                    b.Property<DateTime?>(\"PubDate\")\n                        .HasColumnType(\"datetime(6)\");\n\n                    b.Property<string>(\"SerializedModel\")\n                        .HasColumnType(\"longtext CHARACTER SET utf8mb4\");\n\n                    b.Property<string>(\"Serializer\")\n                        .HasColumnType(\"varchar(50) CHARACTER SET utf8mb4\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"Slug\")\n                        .HasColumnType(\"varchar(255) CHARACTER SET utf8mb4\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"TeaserOverride\")\n                        .HasColumnType(\"longtext CHARACTER SET utf8mb4\");\n\n                    b.Property<string>(\"TemplateKey\")\n                        .HasColumnType(\"varchar(255) CHARACTER SET utf8mb4\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasColumnType(\"varchar(255) CHARACTER SET utf8mb4\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ViewRoles\")\n                        .HasColumnType(\"longtext CHARACTER SET utf8mb4\");\n\n                    b.Property<bool>(\"WasDeleted\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"ContentId\");\n\n                    b.HasIndex(\"ContentSource\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"CreatedByUser\");\n\n                    b.HasIndex(\"LastModifiedByUser\");\n\n                    b.HasIndex(\"Title\");\n\n                    b.ToTable(\"cs_ContentHistory\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Models.ProjectSettings\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .HasColumnType(\"varchar(50) CHARACTER SET utf8mb4\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"AboutContent\")\n                        .HasColumnType(\"longtext CHARACTER SET utf8mb4\");\n\n                    b.Property<string>(\"AboutHeading\")\n                        .HasColumnType(\"varchar(255) CHARACTER SET utf8mb4\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"AddBlogToPagesTree\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<bool>(\"BlogMenuLinksToNewestPost\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<string>(\"BlogPageNavComponentVisibility\")\n                        .HasColumnType(\"varchar(255) CHARACTER SET utf8mb4\")\n                        .HasMaxLength(255);\n\n                    b.Property<int>(\"BlogPagePosition\")\n                        .HasColumnType(\"int\");\n\n                    b.Property<string>(\"BlogPageText\")\n                        .HasColumnType(\"varchar(255) CHARACTER SET utf8mb4\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CdnUrl\")\n                        .HasColumnType(\"varchar(255) CHARACTER SET utf8mb4\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ChannelCategoriesCsv\")\n                        .HasColumnType(\"varchar(255) CHARACTER SET utf8mb4\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ChannelRating\")\n                        .HasColumnType(\"varchar(100) CHARACTER SET utf8mb4\")\n                        .HasMaxLength(100);\n\n                    b.Property<int>(\"ChannelTimeToLive\")\n                        .HasColumnType(\"int\");\n\n                    b.Property<string>(\"CommentNotificationEmail\")\n                        .HasColumnType(\"varchar(100) CHARACTER SET utf8mb4\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"CopyrightNotice\")\n                        .HasColumnType(\"varchar(255) CHARACTER SET utf8mb4\")\n                        .HasMaxLength(255);\n\n                    b.Property<int>(\"DaysToComment\")\n                        .HasColumnType(\"int\");\n\n                    b.Property<string>(\"DefaultContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"varchar(50) CHARACTER SET utf8mb4\")\n                        .HasMaxLength(50)\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<int>(\"DefaultFeedItems\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"int\")\n                        .HasDefaultValue(20);\n\n                    b.Property<string>(\"DefaultPageSlug\")\n                        .HasColumnType(\"varchar(255) CHARACTER SET utf8mb4\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Description\")\n                        .HasColumnType(\"longtext CHARACTER SET utf8mb4\");\n\n                    b.Property<string>(\"DisqusShortName\")\n                        .HasColumnType(\"varchar(100) CHARACTER SET utf8mb4\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"FacebookAppId\")\n                        .HasColumnType(\"varchar(100) CHARACTER SET utf8mb4\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Image\")\n                        .HasColumnType(\"varchar(255) CHARACTER SET utf8mb4\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"IncludePubDateInPostUrls\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<string>(\"LanguageCode\")\n                        .HasColumnType(\"varchar(10) CHARACTER SET utf8mb4\")\n                        .HasMaxLength(10);\n\n                    b.Property<string>(\"LocalMediaVirtualPath\")\n                        .HasColumnType(\"varchar(255) CHARACTER SET utf8mb4\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ManagingEditorEmail\")\n                        .HasColumnType(\"varchar(100) CHARACTER SET utf8mb4\")\n                        .HasMaxLength(100);\n\n                    b.Property<int>(\"MaxFeedItems\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"int\")\n                        .HasDefaultValue(1000);\n\n                    b.Property<bool>(\"ModerateComments\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<int>(\"PostsPerPage\")\n                        .HasColumnType(\"int\");\n\n                    b.Property<string>(\"PubDateFormat\")\n                        .HasColumnType(\"varchar(75) CHARACTER SET utf8mb4\")\n                        .HasMaxLength(75);\n\n                    b.Property<string>(\"Publisher\")\n                        .HasColumnType(\"varchar(255) CHARACTER SET utf8mb4\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"PublisherEntityType\")\n                        .HasColumnType(\"varchar(50) CHARACTER SET utf8mb4\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PublisherLogoHeight\")\n                        .HasColumnType(\"varchar(20) CHARACTER SET utf8mb4\")\n                        .HasMaxLength(20);\n\n                    b.Property<string>(\"PublisherLogoUrl\")\n                        .HasColumnType(\"varchar(255) CHARACTER SET utf8mb4\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"PublisherLogoWidth\")\n                        .HasColumnType(\"varchar(20) CHARACTER SET utf8mb4\")\n                        .HasMaxLength(20);\n\n                    b.Property<string>(\"RecaptchaPrivateKey\")\n                        .HasColumnType(\"varchar(255) CHARACTER SET utf8mb4\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RecaptchaPublicKey\")\n                        .HasColumnType(\"varchar(255) CHARACTER SET utf8mb4\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RemoteFeedProcessorUseAgentFragment\")\n                        .HasColumnType(\"varchar(255) CHARACTER SET utf8mb4\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RemoteFeedUrl\")\n                        .HasColumnType(\"varchar(255) CHARACTER SET utf8mb4\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"ShowAboutBox\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<bool>(\"ShowFeaturedPostsOnDefaultPage\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<bool>(\"ShowRecentPostsOnDefaultPage\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<bool>(\"ShowRelatedPosts\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<bool>(\"ShowTitle\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<string>(\"SiteName\")\n                        .HasColumnType(\"varchar(200) CHARACTER SET utf8mb4\")\n                        .HasMaxLength(200);\n\n                    b.Property<byte>(\"TeaserMode\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"tinyint unsigned\")\n                        .HasDefaultValue((byte)0);\n\n                    b.Property<int>(\"TeaserTruncationLength\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"int\")\n                        .HasDefaultValue(20);\n\n                    b.Property<byte>(\"TeaserTruncationMode\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"tinyint unsigned\")\n                        .HasDefaultValue((byte)0);\n\n                    b.Property<string>(\"TimeZoneId\")\n                        .HasColumnType(\"varchar(100) CHARACTER SET utf8mb4\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Title\")\n                        .HasColumnType(\"varchar(255) CHARACTER SET utf8mb4\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"TwitterCreator\")\n                        .HasColumnType(\"varchar(100) CHARACTER SET utf8mb4\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"TwitterPublisher\")\n                        .HasColumnType(\"varchar(100) CHARACTER SET utf8mb4\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"UseDefaultPageAsRootNode\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<string>(\"WebmasterEmail\")\n                        .HasColumnType(\"varchar(100) CHARACTER SET utf8mb4\")\n                        .HasMaxLength(100);\n\n                    b.HasKey(\"Id\");\n\n                    b.ToTable(\"cs_ContentProject\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageCategory\", b =>\n                {\n                    b.Property<string>(\"Value\")\n                        .HasColumnType(\"varchar(50) CHARACTER SET utf8mb4\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasColumnType(\"varchar(36) CHARACTER SET utf8mb4\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasColumnType(\"varchar(50) CHARACTER SET utf8mb4\")\n                        .HasMaxLength(50);\n\n                    b.HasKey(\"Value\", \"PageEntityId\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.HasIndex(\"Value\");\n\n                    b.ToTable(\"cs_PageCategory\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .HasColumnType(\"varchar(36) CHARACTER SET utf8mb4\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasColumnType(\"varchar(255) CHARACTER SET utf8mb4\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Content\")\n                        .HasColumnType(\"longtext CHARACTER SET utf8mb4\");\n\n                    b.Property<string>(\"Email\")\n                        .HasColumnType(\"varchar(100) CHARACTER SET utf8mb4\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Ip\")\n                        .HasColumnType(\"varchar(100) CHARACTER SET utf8mb4\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"IsAdmin\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<bool>(\"IsApproved\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasColumnType(\"varchar(36) CHARACTER SET utf8mb4\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasColumnType(\"varchar(50) CHARACTER SET utf8mb4\")\n                        .HasMaxLength(50);\n\n                    b.Property<DateTime>(\"PubDate\")\n                        .HasColumnType(\"datetime(6)\");\n\n                    b.Property<string>(\"UserAgent\")\n                        .HasColumnType(\"varchar(255) CHARACTER SET utf8mb4\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Website\")\n                        .HasColumnType(\"varchar(255) CHARACTER SET utf8mb4\")\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_PageComment\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .HasColumnType(\"varchar(36) CHARACTER SET utf8mb4\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasColumnType(\"varchar(255) CHARACTER SET utf8mb4\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasColumnType(\"varchar(500) CHARACTER SET utf8mb4\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"Content\")\n                        .HasColumnType(\"longtext CHARACTER SET utf8mb4\");\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"varchar(50) CHARACTER SET utf8mb4\")\n                        .HasMaxLength(50)\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasColumnType(\"varchar(255) CHARACTER SET utf8mb4\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CreatedByUser\")\n                        .HasColumnType(\"varchar(100) CHARACTER SET utf8mb4\")\n                        .HasMaxLength(100);\n\n                    b.Property<DateTime>(\"CreatedUtc\")\n                        .HasColumnType(\"datetime(6)\");\n\n                    b.Property<bool>(\"DisableEditor\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<string>(\"DraftAuthor\")\n                        .HasColumnType(\"varchar(255) CHARACTER SET utf8mb4\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"DraftContent\")\n                        .HasColumnType(\"longtext CHARACTER SET utf8mb4\");\n\n                    b.Property<DateTime?>(\"DraftPubDate\")\n                        .HasColumnType(\"datetime(6)\");\n\n                    b.Property<string>(\"DraftSerializedModel\")\n                        .HasColumnType(\"longtext CHARACTER SET utf8mb4\");\n\n                    b.Property<string>(\"ExternalUrl\")\n                        .HasColumnType(\"varchar(255) CHARACTER SET utf8mb4\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"IsPublished\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<DateTime>(\"LastModified\")\n                        .HasColumnType(\"datetime(6)\");\n\n                    b.Property<string>(\"LastModifiedByUser\")\n                        .HasColumnType(\"varchar(100) CHARACTER SET utf8mb4\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"MenuFilters\")\n                        .HasColumnType(\"varchar(500) CHARACTER SET utf8mb4\")\n                        .HasMaxLength(500);\n\n                    b.Property<bool>(\"MenuOnly\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasColumnType(\"varchar(500) CHARACTER SET utf8mb4\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"MetaHtml\")\n                        .HasColumnType(\"longtext CHARACTER SET utf8mb4\");\n\n                    b.Property<string>(\"MetaJson\")\n                        .HasColumnType(\"longtext CHARACTER SET utf8mb4\");\n\n                    b.Property<int>(\"PageOrder\")\n                        .HasColumnType(\"int\");\n\n                    b.Property<string>(\"ParentId\")\n                        .HasColumnType(\"varchar(36) CHARACTER SET utf8mb4\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ParentSlug\")\n                        .HasColumnType(\"varchar(255) CHARACTER SET utf8mb4\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasColumnType(\"varchar(50) CHARACTER SET utf8mb4\")\n                        .HasMaxLength(50);\n\n                    b.Property<DateTime?>(\"PubDate\")\n                        .HasColumnType(\"datetime(6)\");\n\n                    b.Property<string>(\"SerializedModel\")\n                        .HasColumnType(\"longtext CHARACTER SET utf8mb4\");\n\n                    b.Property<string>(\"Serializer\")\n                        .HasColumnType(\"varchar(50) CHARACTER SET utf8mb4\")\n                        .HasMaxLength(50);\n\n                    b.Property<bool>(\"ShowCategories\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<bool>(\"ShowComments\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<bool>(\"ShowHeading\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<bool>(\"ShowLastModified\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<bool>(\"ShowMenu\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<bool>(\"ShowPubDate\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<string>(\"Slug\")\n                        .IsRequired()\n                        .HasColumnType(\"varchar(255) CHARACTER SET utf8mb4\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"TemplateKey\")\n                        .HasColumnType(\"varchar(255) CHARACTER SET utf8mb4\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasColumnType(\"varchar(255) CHARACTER SET utf8mb4\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ViewRoles\")\n                        .HasColumnType(\"longtext CHARACTER SET utf8mb4\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"ParentId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_Page\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageResourceEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .HasColumnType(\"varchar(36) CHARACTER SET utf8mb4\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Environment\")\n                        .IsRequired()\n                        .HasColumnType(\"varchar(15) CHARACTER SET utf8mb4\")\n                        .HasMaxLength(15);\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasColumnType(\"varchar(36) CHARACTER SET utf8mb4\")\n                        .HasMaxLength(36);\n\n                    b.Property<int>(\"Sort\")\n                        .HasColumnType(\"int\");\n\n                    b.Property<string>(\"Type\")\n                        .IsRequired()\n                        .HasColumnType(\"varchar(10) CHARACTER SET utf8mb4\")\n                        .HasMaxLength(10);\n\n                    b.Property<string>(\"Url\")\n                        .IsRequired()\n                        .HasColumnType(\"varchar(255) CHARACTER SET utf8mb4\")\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.ToTable(\"cs_PageResource\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostCategory\", b =>\n                {\n                    b.Property<string>(\"Value\")\n                        .HasColumnType(\"varchar(50) CHARACTER SET utf8mb4\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PostEntityId\")\n                        .HasColumnType(\"varchar(36) CHARACTER SET utf8mb4\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasColumnType(\"varchar(50) CHARACTER SET utf8mb4\")\n                        .HasMaxLength(50);\n\n                    b.HasKey(\"Value\", \"PostEntityId\");\n\n                    b.HasIndex(\"PostEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.HasIndex(\"Value\");\n\n                    b.ToTable(\"cs_PostCategory\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .HasColumnType(\"varchar(36) CHARACTER SET utf8mb4\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasColumnType(\"varchar(255) CHARACTER SET utf8mb4\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Content\")\n                        .HasColumnType(\"longtext CHARACTER SET utf8mb4\");\n\n                    b.Property<string>(\"Email\")\n                        .HasColumnType(\"varchar(100) CHARACTER SET utf8mb4\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Ip\")\n                        .HasColumnType(\"varchar(100) CHARACTER SET utf8mb4\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"IsAdmin\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<bool>(\"IsApproved\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<string>(\"PostEntityId\")\n                        .HasColumnType(\"varchar(36) CHARACTER SET utf8mb4\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasColumnType(\"varchar(50) CHARACTER SET utf8mb4\")\n                        .HasMaxLength(50);\n\n                    b.Property<DateTime>(\"PubDate\")\n                        .HasColumnType(\"datetime(6)\");\n\n                    b.Property<string>(\"UserAgent\")\n                        .HasColumnType(\"varchar(255) CHARACTER SET utf8mb4\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Website\")\n                        .HasColumnType(\"varchar(255) CHARACTER SET utf8mb4\")\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PostEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_PostComment\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .HasColumnType(\"varchar(36) CHARACTER SET utf8mb4\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasColumnType(\"varchar(255) CHARACTER SET utf8mb4\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"AutoTeaser\")\n                        .HasColumnType(\"longtext CHARACTER SET utf8mb4\");\n\n                    b.Property<string>(\"BlogId\")\n                        .IsRequired()\n                        .HasColumnType(\"varchar(50) CHARACTER SET utf8mb4\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasColumnType(\"varchar(500) CHARACTER SET utf8mb4\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"Content\")\n                        .HasColumnType(\"longtext CHARACTER SET utf8mb4\");\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"varchar(50) CHARACTER SET utf8mb4\")\n                        .HasMaxLength(50)\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasColumnType(\"varchar(255) CHARACTER SET utf8mb4\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CreatedByUser\")\n                        .HasColumnType(\"varchar(100) CHARACTER SET utf8mb4\")\n                        .HasMaxLength(100);\n\n                    b.Property<DateTime>(\"CreatedUtc\")\n                        .HasColumnType(\"datetime(6)\");\n\n                    b.Property<string>(\"DraftAuthor\")\n                        .HasColumnType(\"varchar(255) CHARACTER SET utf8mb4\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"DraftContent\")\n                        .HasColumnType(\"longtext CHARACTER SET utf8mb4\");\n\n                    b.Property<DateTime?>(\"DraftPubDate\")\n                        .HasColumnType(\"datetime(6)\");\n\n                    b.Property<string>(\"DraftSerializedModel\")\n                        .HasColumnType(\"longtext CHARACTER SET utf8mb4\");\n\n                    b.Property<string>(\"ImageUrl\")\n                        .HasColumnType(\"varchar(250) CHARACTER SET utf8mb4\")\n                        .HasMaxLength(250);\n\n                    b.Property<bool>(\"IsFeatured\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<bool>(\"IsPublished\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<DateTime>(\"LastModified\")\n                        .HasColumnType(\"datetime(6)\");\n\n                    b.Property<string>(\"LastModifiedByUser\")\n                        .HasColumnType(\"varchar(100) CHARACTER SET utf8mb4\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasColumnType(\"varchar(500) CHARACTER SET utf8mb4\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"MetaHtml\")\n                        .HasColumnType(\"longtext CHARACTER SET utf8mb4\");\n\n                    b.Property<string>(\"MetaJson\")\n                        .HasColumnType(\"longtext CHARACTER SET utf8mb4\");\n\n                    b.Property<DateTime?>(\"PubDate\")\n                        .HasColumnType(\"datetime(6)\");\n\n                    b.Property<string>(\"SerializedModel\")\n                        .HasColumnType(\"longtext CHARACTER SET utf8mb4\");\n\n                    b.Property<string>(\"Serializer\")\n                        .HasColumnType(\"varchar(50) CHARACTER SET utf8mb4\")\n                        .HasMaxLength(50);\n\n                    b.Property<bool>(\"ShowComments\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<string>(\"Slug\")\n                        .IsRequired()\n                        .HasColumnType(\"varchar(255) CHARACTER SET utf8mb4\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"SuppressTeaser\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<string>(\"TeaserOverride\")\n                        .HasColumnType(\"longtext CHARACTER SET utf8mb4\");\n\n                    b.Property<string>(\"TemplateKey\")\n                        .HasColumnType(\"varchar(255) CHARACTER SET utf8mb4\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ThumbnailUrl\")\n                        .HasColumnType(\"varchar(250) CHARACTER SET utf8mb4\")\n                        .HasMaxLength(250);\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasColumnType(\"varchar(255) CHARACTER SET utf8mb4\")\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"BlogId\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"Slug\");\n\n                    b.ToTable(\"cs_Post\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\", null)\n                        .WithMany(\"PageComments\")\n                        .HasForeignKey(\"PageEntityId\")\n                        .OnDelete(DeleteBehavior.Cascade);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageResourceEntity\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\", null)\n                        .WithMany(\"PageResources\")\n                        .HasForeignKey(\"PageEntityId\")\n                        .OnDelete(DeleteBehavior.Cascade);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\", null)\n                        .WithMany(\"PostComments\")\n                        .HasForeignKey(\"PostEntityId\");\n                });\n#pragma warning restore 612, 618\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.MySQL/Migrations/20200723185158_AddPostShowCommentsSwitch.cs",
    "content": "﻿using Microsoft.EntityFrameworkCore.Migrations;\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.MySQL.Migrations\n{\n    public partial class AddPostShowCommentsSwitch : Migration\n    {\n        protected override void Up(MigrationBuilder migrationBuilder)\n        {\n            migrationBuilder.AddColumn<bool>(\n                name: \"ShowComments\",\n                table: \"cs_Post\",\n                nullable: false,\n                defaultValue: false);\n        }\n\n        protected override void Down(MigrationBuilder migrationBuilder)\n        {\n            migrationBuilder.DropColumn(\n                name: \"ShowComments\",\n                table: \"cs_Post\");\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.MySQL/Migrations/20240918132058_ShowArchivedAndBlogCategories-20240918.Designer.cs",
    "content": "﻿// <auto-generated />\nusing System;\nusing Microsoft.EntityFrameworkCore;\nusing Microsoft.EntityFrameworkCore.Infrastructure;\nusing Microsoft.EntityFrameworkCore.Migrations;\nusing Microsoft.EntityFrameworkCore.Storage.ValueConversion;\nusing cloudscribe.SimpleContent.Storage.EFCore.MySQL;\n\n#nullable disable\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.MySQL.Migrations\n{\n    [DbContext(typeof(SimpleContentDbContext))]\n    [Migration(\"20240918132058_ShowArchivedAndBlogCategories-20240918\")]\n    partial class ShowArchivedAndBlogCategories20240918\n    {\n        /// <inheritdoc />\n        protected override void BuildTargetModel(ModelBuilder modelBuilder)\n        {\n#pragma warning disable 612, 618\n            modelBuilder\n                .HasAnnotation(\"ProductVersion\", \"8.0.0\")\n                .HasAnnotation(\"Relational:MaxIdentifierLength\", 64);\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Models.ContentHistory\", b =>\n                {\n                    b.Property<Guid>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36)\n                        .HasColumnType(\"char(36)\");\n\n                    b.Property<string>(\"ArchivedBy\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<DateTime>(\"ArchivedUtc\")\n                        .HasColumnType(\"datetime(6)\");\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasColumnType(\"longtext\");\n\n                    b.Property<string>(\"Content\")\n                        .HasColumnType(\"longtext\");\n\n                    b.Property<string>(\"ContentId\")\n                        .IsRequired()\n                        .HasMaxLength(36)\n                        .HasColumnType(\"varchar(36)\");\n\n                    b.Property<string>(\"ContentSource\")\n                        .IsRequired()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"varchar(50)\");\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"varchar(50)\")\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"CreatedByUser\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"varchar(100)\");\n\n                    b.Property<DateTime>(\"CreatedUtc\")\n                        .HasColumnType(\"datetime(6)\");\n\n                    b.Property<string>(\"DraftAuthor\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"DraftContent\")\n                        .HasColumnType(\"longtext\");\n\n                    b.Property<DateTime?>(\"DraftPubDate\")\n                        .HasColumnType(\"datetime(6)\");\n\n                    b.Property<string>(\"DraftSerializedModel\")\n                        .HasColumnType(\"longtext\");\n\n                    b.Property<bool>(\"IsDraftHx\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<bool>(\"IsPublished\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<DateTime>(\"LastModified\")\n                        .HasColumnType(\"datetime(6)\");\n\n                    b.Property<string>(\"LastModifiedByUser\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"varchar(100)\");\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasColumnType(\"longtext\");\n\n                    b.Property<string>(\"MetaHtml\")\n                        .HasColumnType(\"longtext\");\n\n                    b.Property<string>(\"MetaJson\")\n                        .HasColumnType(\"longtext\");\n\n                    b.Property<int>(\"PageOrder\")\n                        .HasColumnType(\"int\");\n\n                    b.Property<string>(\"ParentId\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"ParentSlug\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"ProjectId\")\n                        .HasMaxLength(50)\n                        .HasColumnType(\"varchar(50)\");\n\n                    b.Property<DateTime?>(\"PubDate\")\n                        .HasColumnType(\"datetime(6)\");\n\n                    b.Property<string>(\"SerializedModel\")\n                        .HasColumnType(\"longtext\");\n\n                    b.Property<string>(\"Serializer\")\n                        .HasMaxLength(50)\n                        .HasColumnType(\"varchar(50)\");\n\n                    b.Property<string>(\"Slug\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"TeaserOverride\")\n                        .HasColumnType(\"longtext\");\n\n                    b.Property<string>(\"TemplateKey\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"ViewRoles\")\n                        .HasColumnType(\"longtext\");\n\n                    b.Property<bool>(\"WasDeleted\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"ContentId\");\n\n                    b.HasIndex(\"ContentSource\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"CreatedByUser\");\n\n                    b.HasIndex(\"LastModifiedByUser\");\n\n                    b.HasIndex(\"Title\");\n\n                    b.ToTable(\"cs_ContentHistory\", (string)null);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Models.ProjectSettings\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .HasMaxLength(50)\n                        .HasColumnType(\"varchar(50)\");\n\n                    b.Property<string>(\"AboutContent\")\n                        .HasColumnType(\"longtext\");\n\n                    b.Property<string>(\"AboutHeading\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<bool>(\"AddBlogToPagesTree\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<bool>(\"BlogMenuLinksToNewestPost\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<string>(\"BlogPageNavComponentVisibility\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<int>(\"BlogPagePosition\")\n                        .HasColumnType(\"int\");\n\n                    b.Property<string>(\"BlogPageText\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"CdnUrl\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"ChannelCategoriesCsv\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"ChannelRating\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"varchar(100)\");\n\n                    b.Property<int>(\"ChannelTimeToLive\")\n                        .HasColumnType(\"int\");\n\n                    b.Property<string>(\"CommentNotificationEmail\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"varchar(100)\");\n\n                    b.Property<string>(\"CopyrightNotice\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<int>(\"DaysToComment\")\n                        .HasColumnType(\"int\");\n\n                    b.Property<string>(\"DefaultContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"varchar(50)\")\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<int>(\"DefaultFeedItems\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"int\")\n                        .HasDefaultValue(20);\n\n                    b.Property<string>(\"DefaultPageSlug\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"Description\")\n                        .HasColumnType(\"longtext\");\n\n                    b.Property<string>(\"DisqusShortName\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"varchar(100)\");\n\n                    b.Property<string>(\"FacebookAppId\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"varchar(100)\");\n\n                    b.Property<string>(\"Image\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<bool>(\"IncludePubDateInPostUrls\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<string>(\"LanguageCode\")\n                        .HasMaxLength(10)\n                        .HasColumnType(\"varchar(10)\");\n\n                    b.Property<string>(\"LocalMediaVirtualPath\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"ManagingEditorEmail\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"varchar(100)\");\n\n                    b.Property<int>(\"MaxFeedItems\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"int\")\n                        .HasDefaultValue(1000);\n\n                    b.Property<bool>(\"ModerateComments\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<int>(\"PostsPerPage\")\n                        .HasColumnType(\"int\");\n\n                    b.Property<string>(\"PubDateFormat\")\n                        .HasMaxLength(75)\n                        .HasColumnType(\"varchar(75)\");\n\n                    b.Property<string>(\"Publisher\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"PublisherEntityType\")\n                        .HasMaxLength(50)\n                        .HasColumnType(\"varchar(50)\");\n\n                    b.Property<string>(\"PublisherLogoHeight\")\n                        .HasMaxLength(20)\n                        .HasColumnType(\"varchar(20)\");\n\n                    b.Property<string>(\"PublisherLogoUrl\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"PublisherLogoWidth\")\n                        .HasMaxLength(20)\n                        .HasColumnType(\"varchar(20)\");\n\n                    b.Property<string>(\"RecaptchaPrivateKey\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"RecaptchaPublicKey\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"RemoteFeedProcessorUseAgentFragment\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"RemoteFeedUrl\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<bool>(\"ShowAboutBox\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<bool>(\"ShowArchivedPosts\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<bool>(\"ShowBlogCategories\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<bool>(\"ShowFeaturedPostsOnDefaultPage\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<bool>(\"ShowRecentPostsOnDefaultPage\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<bool>(\"ShowRelatedPosts\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<bool>(\"ShowTitle\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<string>(\"SiteName\")\n                        .HasMaxLength(200)\n                        .HasColumnType(\"varchar(200)\");\n\n                    b.Property<byte>(\"TeaserMode\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"tinyint unsigned\")\n                        .HasDefaultValue((byte)0);\n\n                    b.Property<int>(\"TeaserTruncationLength\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"int\")\n                        .HasDefaultValue(20);\n\n                    b.Property<byte>(\"TeaserTruncationMode\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"tinyint unsigned\")\n                        .HasDefaultValue((byte)0);\n\n                    b.Property<string>(\"TimeZoneId\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"varchar(100)\");\n\n                    b.Property<string>(\"Title\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"TwitterCreator\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"varchar(100)\");\n\n                    b.Property<string>(\"TwitterPublisher\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"varchar(100)\");\n\n                    b.Property<bool>(\"UseDefaultPageAsRootNode\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<string>(\"WebmasterEmail\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"varchar(100)\");\n\n                    b.HasKey(\"Id\");\n\n                    b.ToTable(\"cs_ContentProject\", (string)null);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageCategory\", b =>\n                {\n                    b.Property<string>(\"Value\")\n                        .HasMaxLength(50)\n                        .HasColumnType(\"varchar(50)\");\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"varchar(36)\");\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"varchar(50)\");\n\n                    b.HasKey(\"Value\", \"PageEntityId\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.HasIndex(\"Value\");\n\n                    b.ToTable(\"cs_PageCategory\", (string)null);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"varchar(36)\");\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"Content\")\n                        .HasColumnType(\"longtext\");\n\n                    b.Property<string>(\"Email\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"varchar(100)\");\n\n                    b.Property<string>(\"Ip\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"varchar(100)\");\n\n                    b.Property<bool>(\"IsAdmin\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<bool>(\"IsApproved\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"varchar(36)\");\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"varchar(50)\");\n\n                    b.Property<DateTime>(\"PubDate\")\n                        .HasColumnType(\"datetime(6)\");\n\n                    b.Property<string>(\"UserAgent\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"Website\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_PageComment\", (string)null);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"varchar(36)\");\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasMaxLength(500)\n                        .HasColumnType(\"varchar(500)\");\n\n                    b.Property<string>(\"Content\")\n                        .HasColumnType(\"longtext\");\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"varchar(50)\")\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"CreatedByUser\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"varchar(100)\");\n\n                    b.Property<DateTime>(\"CreatedUtc\")\n                        .HasColumnType(\"datetime(6)\");\n\n                    b.Property<bool>(\"DisableEditor\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<string>(\"DraftAuthor\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"DraftContent\")\n                        .HasColumnType(\"longtext\");\n\n                    b.Property<DateTime?>(\"DraftPubDate\")\n                        .HasColumnType(\"datetime(6)\");\n\n                    b.Property<string>(\"DraftSerializedModel\")\n                        .HasColumnType(\"longtext\");\n\n                    b.Property<string>(\"ExternalUrl\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<bool>(\"IsPublished\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<DateTime>(\"LastModified\")\n                        .HasColumnType(\"datetime(6)\");\n\n                    b.Property<string>(\"LastModifiedByUser\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"varchar(100)\");\n\n                    b.Property<string>(\"MenuFilters\")\n                        .HasMaxLength(500)\n                        .HasColumnType(\"varchar(500)\");\n\n                    b.Property<bool>(\"MenuOnly\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasMaxLength(500)\n                        .HasColumnType(\"varchar(500)\");\n\n                    b.Property<string>(\"MetaHtml\")\n                        .HasColumnType(\"longtext\");\n\n                    b.Property<string>(\"MetaJson\")\n                        .HasColumnType(\"longtext\");\n\n                    b.Property<int>(\"PageOrder\")\n                        .HasColumnType(\"int\");\n\n                    b.Property<string>(\"ParentId\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"varchar(36)\");\n\n                    b.Property<string>(\"ParentSlug\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"varchar(50)\");\n\n                    b.Property<DateTime?>(\"PubDate\")\n                        .HasColumnType(\"datetime(6)\");\n\n                    b.Property<string>(\"SerializedModel\")\n                        .HasColumnType(\"longtext\");\n\n                    b.Property<string>(\"Serializer\")\n                        .HasMaxLength(50)\n                        .HasColumnType(\"varchar(50)\");\n\n                    b.Property<bool>(\"ShowCategories\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<bool>(\"ShowComments\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<bool>(\"ShowHeading\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<bool>(\"ShowLastModified\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<bool>(\"ShowMenu\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<bool>(\"ShowPubDate\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<string>(\"Slug\")\n                        .IsRequired()\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"TemplateKey\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"ViewRoles\")\n                        .HasColumnType(\"longtext\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"ParentId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_Page\", (string)null);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageResourceEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"varchar(36)\");\n\n                    b.Property<string>(\"Environment\")\n                        .IsRequired()\n                        .HasMaxLength(15)\n                        .HasColumnType(\"varchar(15)\");\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"varchar(36)\");\n\n                    b.Property<int>(\"Sort\")\n                        .HasColumnType(\"int\");\n\n                    b.Property<string>(\"Type\")\n                        .IsRequired()\n                        .HasMaxLength(10)\n                        .HasColumnType(\"varchar(10)\");\n\n                    b.Property<string>(\"Url\")\n                        .IsRequired()\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.ToTable(\"cs_PageResource\", (string)null);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostCategory\", b =>\n                {\n                    b.Property<string>(\"Value\")\n                        .HasMaxLength(50)\n                        .HasColumnType(\"varchar(50)\");\n\n                    b.Property<string>(\"PostEntityId\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"varchar(36)\");\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"varchar(50)\");\n\n                    b.HasKey(\"Value\", \"PostEntityId\");\n\n                    b.HasIndex(\"PostEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.HasIndex(\"Value\");\n\n                    b.ToTable(\"cs_PostCategory\", (string)null);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"varchar(36)\");\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"Content\")\n                        .HasColumnType(\"longtext\");\n\n                    b.Property<string>(\"Email\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"varchar(100)\");\n\n                    b.Property<string>(\"Ip\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"varchar(100)\");\n\n                    b.Property<bool>(\"IsAdmin\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<bool>(\"IsApproved\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<string>(\"PostEntityId\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"varchar(36)\");\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"varchar(50)\");\n\n                    b.Property<DateTime>(\"PubDate\")\n                        .HasColumnType(\"datetime(6)\");\n\n                    b.Property<string>(\"UserAgent\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"Website\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PostEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_PostComment\", (string)null);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"varchar(36)\");\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"AutoTeaser\")\n                        .HasColumnType(\"longtext\");\n\n                    b.Property<string>(\"BlogId\")\n                        .IsRequired()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"varchar(50)\");\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasMaxLength(500)\n                        .HasColumnType(\"varchar(500)\");\n\n                    b.Property<string>(\"Content\")\n                        .HasColumnType(\"longtext\");\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"varchar(50)\")\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"CreatedByUser\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"varchar(100)\");\n\n                    b.Property<DateTime>(\"CreatedUtc\")\n                        .HasColumnType(\"datetime(6)\");\n\n                    b.Property<string>(\"DraftAuthor\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"DraftContent\")\n                        .HasColumnType(\"longtext\");\n\n                    b.Property<DateTime?>(\"DraftPubDate\")\n                        .HasColumnType(\"datetime(6)\");\n\n                    b.Property<string>(\"DraftSerializedModel\")\n                        .HasColumnType(\"longtext\");\n\n                    b.Property<string>(\"ImageUrl\")\n                        .HasMaxLength(250)\n                        .HasColumnType(\"varchar(250)\");\n\n                    b.Property<bool>(\"IsFeatured\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<bool>(\"IsPublished\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<DateTime>(\"LastModified\")\n                        .HasColumnType(\"datetime(6)\");\n\n                    b.Property<string>(\"LastModifiedByUser\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"varchar(100)\");\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasMaxLength(500)\n                        .HasColumnType(\"varchar(500)\");\n\n                    b.Property<string>(\"MetaHtml\")\n                        .HasColumnType(\"longtext\");\n\n                    b.Property<string>(\"MetaJson\")\n                        .HasColumnType(\"longtext\");\n\n                    b.Property<DateTime?>(\"PubDate\")\n                        .HasColumnType(\"datetime(6)\");\n\n                    b.Property<string>(\"SerializedModel\")\n                        .HasColumnType(\"longtext\");\n\n                    b.Property<string>(\"Serializer\")\n                        .HasMaxLength(50)\n                        .HasColumnType(\"varchar(50)\");\n\n                    b.Property<ulong>(\"ShowComments\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"Slug\")\n                        .IsRequired()\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<bool>(\"SuppressTeaser\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<string>(\"TeaserOverride\")\n                        .HasColumnType(\"longtext\");\n\n                    b.Property<string>(\"TemplateKey\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"ThumbnailUrl\")\n                        .HasMaxLength(250)\n                        .HasColumnType(\"varchar(250)\");\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"BlogId\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"Slug\");\n\n                    b.ToTable(\"cs_Post\", (string)null);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\", null)\n                        .WithMany(\"PageComments\")\n                        .HasForeignKey(\"PageEntityId\")\n                        .OnDelete(DeleteBehavior.Cascade);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageResourceEntity\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\", null)\n                        .WithMany(\"PageResources\")\n                        .HasForeignKey(\"PageEntityId\")\n                        .OnDelete(DeleteBehavior.Cascade);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\", null)\n                        .WithMany(\"PostComments\")\n                        .HasForeignKey(\"PostEntityId\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\", b =>\n                {\n                    b.Navigation(\"PageComments\");\n\n                    b.Navigation(\"PageResources\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\", b =>\n                {\n                    b.Navigation(\"PostComments\");\n                });\n#pragma warning restore 612, 618\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.MySQL/Migrations/20240918132058_ShowArchivedAndBlogCategories-20240918.cs",
    "content": "﻿using Microsoft.EntityFrameworkCore.Migrations;\n\n#nullable disable\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.MySQL.Migrations\n{\n    /// <inheritdoc />\n    public partial class ShowArchivedAndBlogCategories20240918 : Migration\n    {\n        /// <inheritdoc />\n        protected override void Up(MigrationBuilder migrationBuilder)\n        {\n            migrationBuilder.AddColumn<bool>(\n                name: \"ShowArchivedPosts\",\n                table: \"cs_ContentProject\",\n                type: \"tinyint(1)\",\n                nullable: false,\n                defaultValue: false);\n\n            migrationBuilder.AddColumn<bool>(\n                name: \"ShowBlogCategories\",\n                table: \"cs_ContentProject\",\n                type: \"tinyint(1)\",\n                nullable: false,\n                defaultValue: false);\n        }\n\n        /// <inheritdoc />\n        protected override void Down(MigrationBuilder migrationBuilder)\n        {\n            migrationBuilder.DropColumn(\n                name: \"ShowArchivedPosts\",\n                table: \"cs_ContentProject\");\n\n            migrationBuilder.DropColumn(\n                name: \"ShowBlogCategories\",\n                table: \"cs_ContentProject\");\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.MySQL/Migrations/20241001104452_SetShowArchiveAboutRelatedBlogToTrue-20241001.Designer.cs",
    "content": "﻿// <auto-generated />\nusing System;\nusing Microsoft.EntityFrameworkCore;\nusing Microsoft.EntityFrameworkCore.Infrastructure;\nusing Microsoft.EntityFrameworkCore.Migrations;\nusing Microsoft.EntityFrameworkCore.Storage.ValueConversion;\nusing cloudscribe.SimpleContent.Storage.EFCore.MySQL;\n\n#nullable disable\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.MySQL.Migrations\n{\n    [DbContext(typeof(SimpleContentDbContext))]\n    [Migration(\"20241001104452_SetShowArchiveAboutRelatedBlogToTrue-20241001\")]\n    partial class SetShowArchiveAboutRelatedBlogToTrue20241001\n    {\n        /// <inheritdoc />\n        protected override void BuildTargetModel(ModelBuilder modelBuilder)\n        {\n#pragma warning disable 612, 618\n            modelBuilder\n                .HasAnnotation(\"ProductVersion\", \"8.0.0\")\n                .HasAnnotation(\"Relational:MaxIdentifierLength\", 64);\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Models.ContentHistory\", b =>\n                {\n                    b.Property<Guid>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36)\n                        .HasColumnType(\"char(36)\");\n\n                    b.Property<string>(\"ArchivedBy\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<DateTime>(\"ArchivedUtc\")\n                        .HasColumnType(\"datetime(6)\");\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasColumnType(\"longtext\");\n\n                    b.Property<string>(\"Content\")\n                        .HasColumnType(\"longtext\");\n\n                    b.Property<string>(\"ContentId\")\n                        .IsRequired()\n                        .HasMaxLength(36)\n                        .HasColumnType(\"varchar(36)\");\n\n                    b.Property<string>(\"ContentSource\")\n                        .IsRequired()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"varchar(50)\");\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"varchar(50)\")\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"CreatedByUser\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"varchar(100)\");\n\n                    b.Property<DateTime>(\"CreatedUtc\")\n                        .HasColumnType(\"datetime(6)\");\n\n                    b.Property<string>(\"DraftAuthor\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"DraftContent\")\n                        .HasColumnType(\"longtext\");\n\n                    b.Property<DateTime?>(\"DraftPubDate\")\n                        .HasColumnType(\"datetime(6)\");\n\n                    b.Property<string>(\"DraftSerializedModel\")\n                        .HasColumnType(\"longtext\");\n\n                    b.Property<bool>(\"IsDraftHx\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<bool>(\"IsPublished\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<DateTime>(\"LastModified\")\n                        .HasColumnType(\"datetime(6)\");\n\n                    b.Property<string>(\"LastModifiedByUser\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"varchar(100)\");\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasColumnType(\"longtext\");\n\n                    b.Property<string>(\"MetaHtml\")\n                        .HasColumnType(\"longtext\");\n\n                    b.Property<string>(\"MetaJson\")\n                        .HasColumnType(\"longtext\");\n\n                    b.Property<int>(\"PageOrder\")\n                        .HasColumnType(\"int\");\n\n                    b.Property<string>(\"ParentId\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"ParentSlug\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"ProjectId\")\n                        .HasMaxLength(50)\n                        .HasColumnType(\"varchar(50)\");\n\n                    b.Property<DateTime?>(\"PubDate\")\n                        .HasColumnType(\"datetime(6)\");\n\n                    b.Property<string>(\"SerializedModel\")\n                        .HasColumnType(\"longtext\");\n\n                    b.Property<string>(\"Serializer\")\n                        .HasMaxLength(50)\n                        .HasColumnType(\"varchar(50)\");\n\n                    b.Property<string>(\"Slug\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"TeaserOverride\")\n                        .HasColumnType(\"longtext\");\n\n                    b.Property<string>(\"TemplateKey\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"ViewRoles\")\n                        .HasColumnType(\"longtext\");\n\n                    b.Property<bool>(\"WasDeleted\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"ContentId\");\n\n                    b.HasIndex(\"ContentSource\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"CreatedByUser\");\n\n                    b.HasIndex(\"LastModifiedByUser\");\n\n                    b.HasIndex(\"Title\");\n\n                    b.ToTable(\"cs_ContentHistory\", (string)null);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Models.ProjectSettings\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .HasMaxLength(50)\n                        .HasColumnType(\"varchar(50)\");\n\n                    b.Property<string>(\"AboutContent\")\n                        .HasColumnType(\"longtext\");\n\n                    b.Property<string>(\"AboutHeading\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<bool>(\"AddBlogToPagesTree\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<bool>(\"BlogMenuLinksToNewestPost\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<string>(\"BlogPageNavComponentVisibility\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<int>(\"BlogPagePosition\")\n                        .HasColumnType(\"int\");\n\n                    b.Property<string>(\"BlogPageText\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"CdnUrl\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"ChannelCategoriesCsv\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"ChannelRating\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"varchar(100)\");\n\n                    b.Property<int>(\"ChannelTimeToLive\")\n                        .HasColumnType(\"int\");\n\n                    b.Property<string>(\"CommentNotificationEmail\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"varchar(100)\");\n\n                    b.Property<string>(\"CopyrightNotice\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<int>(\"DaysToComment\")\n                        .HasColumnType(\"int\");\n\n                    b.Property<string>(\"DefaultContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"varchar(50)\")\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<int>(\"DefaultFeedItems\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"int\")\n                        .HasDefaultValue(20);\n\n                    b.Property<string>(\"DefaultPageSlug\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"Description\")\n                        .HasColumnType(\"longtext\");\n\n                    b.Property<string>(\"DisqusShortName\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"varchar(100)\");\n\n                    b.Property<string>(\"FacebookAppId\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"varchar(100)\");\n\n                    b.Property<string>(\"Image\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<bool>(\"IncludePubDateInPostUrls\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<string>(\"LanguageCode\")\n                        .HasMaxLength(10)\n                        .HasColumnType(\"varchar(10)\");\n\n                    b.Property<string>(\"LocalMediaVirtualPath\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"ManagingEditorEmail\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"varchar(100)\");\n\n                    b.Property<int>(\"MaxFeedItems\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"int\")\n                        .HasDefaultValue(1000);\n\n                    b.Property<bool>(\"ModerateComments\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<int>(\"PostsPerPage\")\n                        .HasColumnType(\"int\");\n\n                    b.Property<string>(\"PubDateFormat\")\n                        .HasMaxLength(75)\n                        .HasColumnType(\"varchar(75)\");\n\n                    b.Property<string>(\"Publisher\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"PublisherEntityType\")\n                        .HasMaxLength(50)\n                        .HasColumnType(\"varchar(50)\");\n\n                    b.Property<string>(\"PublisherLogoHeight\")\n                        .HasMaxLength(20)\n                        .HasColumnType(\"varchar(20)\");\n\n                    b.Property<string>(\"PublisherLogoUrl\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"PublisherLogoWidth\")\n                        .HasMaxLength(20)\n                        .HasColumnType(\"varchar(20)\");\n\n                    b.Property<string>(\"RecaptchaPrivateKey\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"RecaptchaPublicKey\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"RemoteFeedProcessorUseAgentFragment\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"RemoteFeedUrl\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<bool>(\"ShowAboutBox\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"tinyint(1)\")\n                        .HasDefaultValue(true);\n\n                    b.Property<bool>(\"ShowArchivedPosts\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"tinyint(1)\")\n                        .HasDefaultValue(true);\n\n                    b.Property<bool>(\"ShowBlogCategories\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"tinyint(1)\")\n                        .HasDefaultValue(true);\n\n                    b.Property<bool>(\"ShowFeaturedPostsOnDefaultPage\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<bool>(\"ShowRecentPostsOnDefaultPage\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<bool>(\"ShowRelatedPosts\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"tinyint(1)\")\n                        .HasDefaultValue(true);\n\n                    b.Property<bool>(\"ShowTitle\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<string>(\"SiteName\")\n                        .HasMaxLength(200)\n                        .HasColumnType(\"varchar(200)\");\n\n                    b.Property<byte>(\"TeaserMode\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"tinyint unsigned\")\n                        .HasDefaultValue((byte)0);\n\n                    b.Property<int>(\"TeaserTruncationLength\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"int\")\n                        .HasDefaultValue(20);\n\n                    b.Property<byte>(\"TeaserTruncationMode\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"tinyint unsigned\")\n                        .HasDefaultValue((byte)0);\n\n                    b.Property<string>(\"TimeZoneId\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"varchar(100)\");\n\n                    b.Property<string>(\"Title\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"TwitterCreator\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"varchar(100)\");\n\n                    b.Property<string>(\"TwitterPublisher\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"varchar(100)\");\n\n                    b.Property<bool>(\"UseDefaultPageAsRootNode\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<string>(\"WebmasterEmail\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"varchar(100)\");\n\n                    b.HasKey(\"Id\");\n\n                    b.ToTable(\"cs_ContentProject\", (string)null);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageCategory\", b =>\n                {\n                    b.Property<string>(\"Value\")\n                        .HasMaxLength(50)\n                        .HasColumnType(\"varchar(50)\");\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"varchar(36)\");\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"varchar(50)\");\n\n                    b.HasKey(\"Value\", \"PageEntityId\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.HasIndex(\"Value\");\n\n                    b.ToTable(\"cs_PageCategory\", (string)null);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"varchar(36)\");\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"Content\")\n                        .HasColumnType(\"longtext\");\n\n                    b.Property<string>(\"Email\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"varchar(100)\");\n\n                    b.Property<string>(\"Ip\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"varchar(100)\");\n\n                    b.Property<bool>(\"IsAdmin\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<bool>(\"IsApproved\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"varchar(36)\");\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"varchar(50)\");\n\n                    b.Property<DateTime>(\"PubDate\")\n                        .HasColumnType(\"datetime(6)\");\n\n                    b.Property<string>(\"UserAgent\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"Website\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_PageComment\", (string)null);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"varchar(36)\");\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasMaxLength(500)\n                        .HasColumnType(\"varchar(500)\");\n\n                    b.Property<string>(\"Content\")\n                        .HasColumnType(\"longtext\");\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"varchar(50)\")\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"CreatedByUser\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"varchar(100)\");\n\n                    b.Property<DateTime>(\"CreatedUtc\")\n                        .HasColumnType(\"datetime(6)\");\n\n                    b.Property<bool>(\"DisableEditor\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<string>(\"DraftAuthor\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"DraftContent\")\n                        .HasColumnType(\"longtext\");\n\n                    b.Property<DateTime?>(\"DraftPubDate\")\n                        .HasColumnType(\"datetime(6)\");\n\n                    b.Property<string>(\"DraftSerializedModel\")\n                        .HasColumnType(\"longtext\");\n\n                    b.Property<string>(\"ExternalUrl\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<bool>(\"IsPublished\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<DateTime>(\"LastModified\")\n                        .HasColumnType(\"datetime(6)\");\n\n                    b.Property<string>(\"LastModifiedByUser\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"varchar(100)\");\n\n                    b.Property<string>(\"MenuFilters\")\n                        .HasMaxLength(500)\n                        .HasColumnType(\"varchar(500)\");\n\n                    b.Property<bool>(\"MenuOnly\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasMaxLength(500)\n                        .HasColumnType(\"varchar(500)\");\n\n                    b.Property<string>(\"MetaHtml\")\n                        .HasColumnType(\"longtext\");\n\n                    b.Property<string>(\"MetaJson\")\n                        .HasColumnType(\"longtext\");\n\n                    b.Property<int>(\"PageOrder\")\n                        .HasColumnType(\"int\");\n\n                    b.Property<string>(\"ParentId\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"varchar(36)\");\n\n                    b.Property<string>(\"ParentSlug\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"varchar(50)\");\n\n                    b.Property<DateTime?>(\"PubDate\")\n                        .HasColumnType(\"datetime(6)\");\n\n                    b.Property<string>(\"SerializedModel\")\n                        .HasColumnType(\"longtext\");\n\n                    b.Property<string>(\"Serializer\")\n                        .HasMaxLength(50)\n                        .HasColumnType(\"varchar(50)\");\n\n                    b.Property<bool>(\"ShowCategories\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<bool>(\"ShowComments\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<bool>(\"ShowHeading\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<bool>(\"ShowLastModified\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<bool>(\"ShowMenu\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<bool>(\"ShowPubDate\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<string>(\"Slug\")\n                        .IsRequired()\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"TemplateKey\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"ViewRoles\")\n                        .HasColumnType(\"longtext\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"ParentId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_Page\", (string)null);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageResourceEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"varchar(36)\");\n\n                    b.Property<string>(\"Environment\")\n                        .IsRequired()\n                        .HasMaxLength(15)\n                        .HasColumnType(\"varchar(15)\");\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"varchar(36)\");\n\n                    b.Property<int>(\"Sort\")\n                        .HasColumnType(\"int\");\n\n                    b.Property<string>(\"Type\")\n                        .IsRequired()\n                        .HasMaxLength(10)\n                        .HasColumnType(\"varchar(10)\");\n\n                    b.Property<string>(\"Url\")\n                        .IsRequired()\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.ToTable(\"cs_PageResource\", (string)null);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostCategory\", b =>\n                {\n                    b.Property<string>(\"Value\")\n                        .HasMaxLength(50)\n                        .HasColumnType(\"varchar(50)\");\n\n                    b.Property<string>(\"PostEntityId\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"varchar(36)\");\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"varchar(50)\");\n\n                    b.HasKey(\"Value\", \"PostEntityId\");\n\n                    b.HasIndex(\"PostEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.HasIndex(\"Value\");\n\n                    b.ToTable(\"cs_PostCategory\", (string)null);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"varchar(36)\");\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"Content\")\n                        .HasColumnType(\"longtext\");\n\n                    b.Property<string>(\"Email\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"varchar(100)\");\n\n                    b.Property<string>(\"Ip\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"varchar(100)\");\n\n                    b.Property<bool>(\"IsAdmin\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<bool>(\"IsApproved\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<string>(\"PostEntityId\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"varchar(36)\");\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"varchar(50)\");\n\n                    b.Property<DateTime>(\"PubDate\")\n                        .HasColumnType(\"datetime(6)\");\n\n                    b.Property<string>(\"UserAgent\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"Website\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PostEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_PostComment\", (string)null);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"varchar(36)\");\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"AutoTeaser\")\n                        .HasColumnType(\"longtext\");\n\n                    b.Property<string>(\"BlogId\")\n                        .IsRequired()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"varchar(50)\");\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasMaxLength(500)\n                        .HasColumnType(\"varchar(500)\");\n\n                    b.Property<string>(\"Content\")\n                        .HasColumnType(\"longtext\");\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"varchar(50)\")\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"CreatedByUser\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"varchar(100)\");\n\n                    b.Property<DateTime>(\"CreatedUtc\")\n                        .HasColumnType(\"datetime(6)\");\n\n                    b.Property<string>(\"DraftAuthor\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"DraftContent\")\n                        .HasColumnType(\"longtext\");\n\n                    b.Property<DateTime?>(\"DraftPubDate\")\n                        .HasColumnType(\"datetime(6)\");\n\n                    b.Property<string>(\"DraftSerializedModel\")\n                        .HasColumnType(\"longtext\");\n\n                    b.Property<string>(\"ImageUrl\")\n                        .HasMaxLength(250)\n                        .HasColumnType(\"varchar(250)\");\n\n                    b.Property<bool>(\"IsFeatured\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<bool>(\"IsPublished\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<DateTime>(\"LastModified\")\n                        .HasColumnType(\"datetime(6)\");\n\n                    b.Property<string>(\"LastModifiedByUser\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"varchar(100)\");\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasMaxLength(500)\n                        .HasColumnType(\"varchar(500)\");\n\n                    b.Property<string>(\"MetaHtml\")\n                        .HasColumnType(\"longtext\");\n\n                    b.Property<string>(\"MetaJson\")\n                        .HasColumnType(\"longtext\");\n\n                    b.Property<DateTime?>(\"PubDate\")\n                        .HasColumnType(\"datetime(6)\");\n\n                    b.Property<string>(\"SerializedModel\")\n                        .HasColumnType(\"longtext\");\n\n                    b.Property<string>(\"Serializer\")\n                        .HasMaxLength(50)\n                        .HasColumnType(\"varchar(50)\");\n\n                    b.Property<ulong>(\"ShowComments\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"Slug\")\n                        .IsRequired()\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<bool>(\"SuppressTeaser\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<string>(\"TeaserOverride\")\n                        .HasColumnType(\"longtext\");\n\n                    b.Property<string>(\"TemplateKey\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"ThumbnailUrl\")\n                        .HasMaxLength(250)\n                        .HasColumnType(\"varchar(250)\");\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"BlogId\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"Slug\");\n\n                    b.ToTable(\"cs_Post\", (string)null);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\", null)\n                        .WithMany(\"PageComments\")\n                        .HasForeignKey(\"PageEntityId\")\n                        .OnDelete(DeleteBehavior.Cascade);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageResourceEntity\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\", null)\n                        .WithMany(\"PageResources\")\n                        .HasForeignKey(\"PageEntityId\")\n                        .OnDelete(DeleteBehavior.Cascade);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\", null)\n                        .WithMany(\"PostComments\")\n                        .HasForeignKey(\"PostEntityId\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\", b =>\n                {\n                    b.Navigation(\"PageComments\");\n\n                    b.Navigation(\"PageResources\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\", b =>\n                {\n                    b.Navigation(\"PostComments\");\n                });\n#pragma warning restore 612, 618\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.MySQL/Migrations/20241001104452_SetShowArchiveAboutRelatedBlogToTrue-20241001.cs",
    "content": "﻿using Microsoft.EntityFrameworkCore.Migrations;\n\n#nullable disable\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.MySQL.Migrations\n{\n    /// <inheritdoc />\n    public partial class SetShowArchiveAboutRelatedBlogToTrue20241001 : Migration\n    {\n        /// <inheritdoc />\n        protected override void Up(MigrationBuilder migrationBuilder)\n        {\n            migrationBuilder.AlterColumn<bool>(\n                name: \"ShowRelatedPosts\",\n                table: \"cs_ContentProject\",\n                type: \"tinyint(1)\",\n                nullable: false,\n                defaultValue: true,\n                oldClrType: typeof(bool),\n                oldType: \"tinyint(1)\");\n\n            migrationBuilder.AlterColumn<bool>(\n                name: \"ShowBlogCategories\",\n                table: \"cs_ContentProject\",\n                type: \"tinyint(1)\",\n                nullable: false,\n                defaultValue: true,\n                oldClrType: typeof(bool),\n                oldType: \"tinyint(1)\");\n\n            migrationBuilder.AlterColumn<bool>(\n                name: \"ShowArchivedPosts\",\n                table: \"cs_ContentProject\",\n                type: \"tinyint(1)\",\n                nullable: false,\n                defaultValue: true,\n                oldClrType: typeof(bool),\n                oldType: \"tinyint(1)\");\n\n            migrationBuilder.AlterColumn<bool>(\n                name: \"ShowAboutBox\",\n                table: \"cs_ContentProject\",\n                type: \"tinyint(1)\",\n                nullable: false,\n                defaultValue: true,\n                oldClrType: typeof(bool),\n                oldType: \"tinyint(1)\");\n        }\n\n        /// <inheritdoc />\n        protected override void Down(MigrationBuilder migrationBuilder)\n        {\n            migrationBuilder.AlterColumn<bool>(\n                name: \"ShowRelatedPosts\",\n                table: \"cs_ContentProject\",\n                type: \"tinyint(1)\",\n                nullable: false,\n                oldClrType: typeof(bool),\n                oldType: \"tinyint(1)\",\n                oldDefaultValue: true);\n\n            migrationBuilder.AlterColumn<bool>(\n                name: \"ShowBlogCategories\",\n                table: \"cs_ContentProject\",\n                type: \"tinyint(1)\",\n                nullable: false,\n                oldClrType: typeof(bool),\n                oldType: \"tinyint(1)\",\n                oldDefaultValue: true);\n\n            migrationBuilder.AlterColumn<bool>(\n                name: \"ShowArchivedPosts\",\n                table: \"cs_ContentProject\",\n                type: \"tinyint(1)\",\n                nullable: false,\n                oldClrType: typeof(bool),\n                oldType: \"tinyint(1)\",\n                oldDefaultValue: true);\n\n            migrationBuilder.AlterColumn<bool>(\n                name: \"ShowAboutBox\",\n                table: \"cs_ContentProject\",\n                type: \"tinyint(1)\",\n                nullable: false,\n                oldClrType: typeof(bool),\n                oldType: \"tinyint(1)\",\n                oldDefaultValue: true);\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.MySQL/Migrations/20241108094512_simplecontent-20241108.Designer.cs",
    "content": "﻿// <auto-generated />\nusing System;\nusing Microsoft.EntityFrameworkCore;\nusing Microsoft.EntityFrameworkCore.Infrastructure;\nusing Microsoft.EntityFrameworkCore.Migrations;\nusing Microsoft.EntityFrameworkCore.Storage.ValueConversion;\nusing cloudscribe.SimpleContent.Storage.EFCore.MySQL;\n\n#nullable disable\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.MySQL.Migrations\n{\n    [DbContext(typeof(SimpleContentDbContext))]\n    [Migration(\"20241108094512_simplecontent-20241108\")]\n    partial class simplecontent20241108\n    {\n        /// <inheritdoc />\n        protected override void BuildTargetModel(ModelBuilder modelBuilder)\n        {\n#pragma warning disable 612, 618\n            modelBuilder\n                .HasAnnotation(\"ProductVersion\", \"8.0.0\")\n                .HasAnnotation(\"Relational:MaxIdentifierLength\", 64);\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Models.ContentHistory\", b =>\n                {\n                    b.Property<Guid>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36)\n                        .HasColumnType(\"char(36)\");\n\n                    b.Property<string>(\"ArchivedBy\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<DateTime>(\"ArchivedUtc\")\n                        .HasColumnType(\"datetime(6)\");\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasColumnType(\"longtext\");\n\n                    b.Property<string>(\"Content\")\n                        .HasColumnType(\"longtext\");\n\n                    b.Property<string>(\"ContentId\")\n                        .IsRequired()\n                        .HasMaxLength(36)\n                        .HasColumnType(\"varchar(36)\");\n\n                    b.Property<string>(\"ContentSource\")\n                        .IsRequired()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"varchar(50)\");\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"varchar(50)\")\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"CreatedByUser\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"varchar(100)\");\n\n                    b.Property<DateTime>(\"CreatedUtc\")\n                        .HasColumnType(\"datetime(6)\");\n\n                    b.Property<string>(\"DraftAuthor\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"DraftContent\")\n                        .HasColumnType(\"longtext\");\n\n                    b.Property<DateTime?>(\"DraftPubDate\")\n                        .HasColumnType(\"datetime(6)\");\n\n                    b.Property<string>(\"DraftSerializedModel\")\n                        .HasColumnType(\"longtext\");\n\n                    b.Property<bool>(\"IsDraftHx\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<bool>(\"IsPublished\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<DateTime>(\"LastModified\")\n                        .HasColumnType(\"datetime(6)\");\n\n                    b.Property<string>(\"LastModifiedByUser\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"varchar(100)\");\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasColumnType(\"longtext\");\n\n                    b.Property<string>(\"MetaHtml\")\n                        .HasColumnType(\"longtext\");\n\n                    b.Property<string>(\"MetaJson\")\n                        .HasColumnType(\"longtext\");\n\n                    b.Property<int>(\"PageOrder\")\n                        .HasColumnType(\"int\");\n\n                    b.Property<string>(\"ParentId\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"ParentSlug\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"ProjectId\")\n                        .HasMaxLength(50)\n                        .HasColumnType(\"varchar(50)\");\n\n                    b.Property<DateTime?>(\"PubDate\")\n                        .HasColumnType(\"datetime(6)\");\n\n                    b.Property<string>(\"SerializedModel\")\n                        .HasColumnType(\"longtext\");\n\n                    b.Property<string>(\"Serializer\")\n                        .HasMaxLength(50)\n                        .HasColumnType(\"varchar(50)\");\n\n                    b.Property<bool?>(\"ShowCreatedBy\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<bool?>(\"ShowCreatedDate\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<bool?>(\"ShowLastModifiedBy\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<bool?>(\"ShowLastModifiedDate\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<string>(\"Slug\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"TeaserOverride\")\n                        .HasColumnType(\"longtext\");\n\n                    b.Property<string>(\"TemplateKey\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"ViewRoles\")\n                        .HasColumnType(\"longtext\");\n\n                    b.Property<bool>(\"WasDeleted\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"ContentId\");\n\n                    b.HasIndex(\"ContentSource\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"CreatedByUser\");\n\n                    b.HasIndex(\"LastModifiedByUser\");\n\n                    b.HasIndex(\"Title\");\n\n                    b.ToTable(\"cs_ContentHistory\", (string)null);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Models.ProjectSettings\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .HasMaxLength(50)\n                        .HasColumnType(\"varchar(50)\");\n\n                    b.Property<string>(\"AboutContent\")\n                        .HasColumnType(\"longtext\");\n\n                    b.Property<string>(\"AboutHeading\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<bool>(\"AddBlogToPagesTree\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<bool>(\"BlogMenuLinksToNewestPost\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<string>(\"BlogPageNavComponentVisibility\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<int>(\"BlogPagePosition\")\n                        .HasColumnType(\"int\");\n\n                    b.Property<string>(\"BlogPageText\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"CdnUrl\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"ChannelCategoriesCsv\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"ChannelRating\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"varchar(100)\");\n\n                    b.Property<int>(\"ChannelTimeToLive\")\n                        .HasColumnType(\"int\");\n\n                    b.Property<string>(\"CommentNotificationEmail\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"varchar(100)\");\n\n                    b.Property<string>(\"CopyrightNotice\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<int>(\"DaysToComment\")\n                        .HasColumnType(\"int\");\n\n                    b.Property<string>(\"DefaultContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"varchar(50)\")\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<int>(\"DefaultFeedItems\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"int\")\n                        .HasDefaultValue(20);\n\n                    b.Property<string>(\"DefaultPageSlug\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"Description\")\n                        .HasColumnType(\"longtext\");\n\n                    b.Property<string>(\"DisqusShortName\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"varchar(100)\");\n\n                    b.Property<string>(\"FacebookAppId\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"varchar(100)\");\n\n                    b.Property<string>(\"Image\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<bool>(\"IncludePubDateInPostUrls\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<string>(\"LanguageCode\")\n                        .HasMaxLength(10)\n                        .HasColumnType(\"varchar(10)\");\n\n                    b.Property<string>(\"LocalMediaVirtualPath\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"ManagingEditorEmail\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"varchar(100)\");\n\n                    b.Property<int>(\"MaxFeedItems\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"int\")\n                        .HasDefaultValue(1000);\n\n                    b.Property<bool>(\"ModerateComments\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<int>(\"PostsPerPage\")\n                        .HasColumnType(\"int\");\n\n                    b.Property<string>(\"PubDateFormat\")\n                        .HasMaxLength(75)\n                        .HasColumnType(\"varchar(75)\");\n\n                    b.Property<string>(\"Publisher\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"PublisherEntityType\")\n                        .HasMaxLength(50)\n                        .HasColumnType(\"varchar(50)\");\n\n                    b.Property<string>(\"PublisherLogoHeight\")\n                        .HasMaxLength(20)\n                        .HasColumnType(\"varchar(20)\");\n\n                    b.Property<string>(\"PublisherLogoUrl\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"PublisherLogoWidth\")\n                        .HasMaxLength(20)\n                        .HasColumnType(\"varchar(20)\");\n\n                    b.Property<string>(\"RecaptchaPrivateKey\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"RecaptchaPublicKey\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"RemoteFeedProcessorUseAgentFragment\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"RemoteFeedUrl\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<bool>(\"ShowAboutBox\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"tinyint(1)\")\n                        .HasDefaultValue(true);\n\n                    b.Property<bool>(\"ShowArchivedPosts\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"tinyint(1)\")\n                        .HasDefaultValue(true);\n\n                    b.Property<bool>(\"ShowBlogCategories\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"tinyint(1)\")\n                        .HasDefaultValue(true);\n\n                    b.Property<bool>(\"ShowCreatedBy\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<bool>(\"ShowCreatedDate\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<bool>(\"ShowFeaturedPostsOnDefaultPage\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<bool>(\"ShowLastModifiedBy\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<bool>(\"ShowLastModifiedDate\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<bool>(\"ShowRecentPostsOnDefaultPage\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<bool>(\"ShowRelatedPosts\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"tinyint(1)\")\n                        .HasDefaultValue(true);\n\n                    b.Property<bool>(\"ShowTitle\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<string>(\"SiteName\")\n                        .HasMaxLength(200)\n                        .HasColumnType(\"varchar(200)\");\n\n                    b.Property<byte>(\"TeaserMode\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"tinyint unsigned\")\n                        .HasDefaultValue((byte)0);\n\n                    b.Property<int>(\"TeaserTruncationLength\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"int\")\n                        .HasDefaultValue(20);\n\n                    b.Property<byte>(\"TeaserTruncationMode\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"tinyint unsigned\")\n                        .HasDefaultValue((byte)0);\n\n                    b.Property<string>(\"TimeZoneId\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"varchar(100)\");\n\n                    b.Property<string>(\"Title\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"TwitterCreator\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"varchar(100)\");\n\n                    b.Property<string>(\"TwitterPublisher\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"varchar(100)\");\n\n                    b.Property<bool>(\"UseDefaultPageAsRootNode\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<string>(\"WebmasterEmail\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"varchar(100)\");\n\n                    b.HasKey(\"Id\");\n\n                    b.ToTable(\"cs_ContentProject\", (string)null);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageCategory\", b =>\n                {\n                    b.Property<string>(\"Value\")\n                        .HasMaxLength(50)\n                        .HasColumnType(\"varchar(50)\");\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"varchar(36)\");\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"varchar(50)\");\n\n                    b.HasKey(\"Value\", \"PageEntityId\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.HasIndex(\"Value\");\n\n                    b.ToTable(\"cs_PageCategory\", (string)null);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"varchar(36)\");\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"Content\")\n                        .HasColumnType(\"longtext\");\n\n                    b.Property<string>(\"Email\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"varchar(100)\");\n\n                    b.Property<string>(\"Ip\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"varchar(100)\");\n\n                    b.Property<bool>(\"IsAdmin\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<bool>(\"IsApproved\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"varchar(36)\");\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"varchar(50)\");\n\n                    b.Property<DateTime>(\"PubDate\")\n                        .HasColumnType(\"datetime(6)\");\n\n                    b.Property<string>(\"UserAgent\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"Website\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_PageComment\", (string)null);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"varchar(36)\");\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasMaxLength(500)\n                        .HasColumnType(\"varchar(500)\");\n\n                    b.Property<string>(\"Content\")\n                        .HasColumnType(\"longtext\");\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"varchar(50)\")\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"CreatedByUser\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"varchar(100)\");\n\n                    b.Property<DateTime>(\"CreatedUtc\")\n                        .HasColumnType(\"datetime(6)\");\n\n                    b.Property<bool>(\"DisableEditor\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<string>(\"DraftAuthor\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"DraftContent\")\n                        .HasColumnType(\"longtext\");\n\n                    b.Property<DateTime?>(\"DraftPubDate\")\n                        .HasColumnType(\"datetime(6)\");\n\n                    b.Property<string>(\"DraftSerializedModel\")\n                        .HasColumnType(\"longtext\");\n\n                    b.Property<string>(\"ExternalUrl\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<bool>(\"IsPublished\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<DateTime>(\"LastModified\")\n                        .HasColumnType(\"datetime(6)\");\n\n                    b.Property<string>(\"LastModifiedByUser\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"varchar(100)\");\n\n                    b.Property<string>(\"MenuFilters\")\n                        .HasMaxLength(500)\n                        .HasColumnType(\"varchar(500)\");\n\n                    b.Property<bool>(\"MenuOnly\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasMaxLength(500)\n                        .HasColumnType(\"varchar(500)\");\n\n                    b.Property<string>(\"MetaHtml\")\n                        .HasColumnType(\"longtext\");\n\n                    b.Property<string>(\"MetaJson\")\n                        .HasColumnType(\"longtext\");\n\n                    b.Property<int>(\"PageOrder\")\n                        .HasColumnType(\"int\");\n\n                    b.Property<string>(\"ParentId\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"varchar(36)\");\n\n                    b.Property<string>(\"ParentSlug\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"varchar(50)\");\n\n                    b.Property<DateTime?>(\"PubDate\")\n                        .HasColumnType(\"datetime(6)\");\n\n                    b.Property<string>(\"SerializedModel\")\n                        .HasColumnType(\"longtext\");\n\n                    b.Property<string>(\"Serializer\")\n                        .HasMaxLength(50)\n                        .HasColumnType(\"varchar(50)\");\n\n                    b.Property<bool>(\"ShowCategories\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<bool>(\"ShowComments\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<bool?>(\"ShowCreatedBy\")\n                        .HasColumnType(\"boolean\");\n\n                    b.Property<bool?>(\"ShowCreatedDate\")\n                        .HasColumnType(\"boolean\");\n\n                    b.Property<bool>(\"ShowHeading\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<bool>(\"ShowLastModified\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<bool?>(\"ShowLastModifiedBy\")\n                        .HasColumnType(\"boolean\");\n\n                    b.Property<bool?>(\"ShowLastModifiedDate\")\n                        .HasColumnType(\"boolean\");\n\n                    b.Property<bool>(\"ShowMenu\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<bool>(\"ShowPubDate\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<string>(\"Slug\")\n                        .IsRequired()\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"TemplateKey\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"ViewRoles\")\n                        .HasColumnType(\"longtext\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"ParentId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_Page\", (string)null);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageResourceEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"varchar(36)\");\n\n                    b.Property<string>(\"Environment\")\n                        .IsRequired()\n                        .HasMaxLength(15)\n                        .HasColumnType(\"varchar(15)\");\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"varchar(36)\");\n\n                    b.Property<int>(\"Sort\")\n                        .HasColumnType(\"int\");\n\n                    b.Property<string>(\"Type\")\n                        .IsRequired()\n                        .HasMaxLength(10)\n                        .HasColumnType(\"varchar(10)\");\n\n                    b.Property<string>(\"Url\")\n                        .IsRequired()\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.ToTable(\"cs_PageResource\", (string)null);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostCategory\", b =>\n                {\n                    b.Property<string>(\"Value\")\n                        .HasMaxLength(50)\n                        .HasColumnType(\"varchar(50)\");\n\n                    b.Property<string>(\"PostEntityId\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"varchar(36)\");\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"varchar(50)\");\n\n                    b.HasKey(\"Value\", \"PostEntityId\");\n\n                    b.HasIndex(\"PostEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.HasIndex(\"Value\");\n\n                    b.ToTable(\"cs_PostCategory\", (string)null);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"varchar(36)\");\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"Content\")\n                        .HasColumnType(\"longtext\");\n\n                    b.Property<string>(\"Email\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"varchar(100)\");\n\n                    b.Property<string>(\"Ip\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"varchar(100)\");\n\n                    b.Property<bool>(\"IsAdmin\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<bool>(\"IsApproved\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<string>(\"PostEntityId\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"varchar(36)\");\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"varchar(50)\");\n\n                    b.Property<DateTime>(\"PubDate\")\n                        .HasColumnType(\"datetime(6)\");\n\n                    b.Property<string>(\"UserAgent\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"Website\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PostEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_PostComment\", (string)null);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"varchar(36)\");\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"AutoTeaser\")\n                        .HasColumnType(\"longtext\");\n\n                    b.Property<string>(\"BlogId\")\n                        .IsRequired()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"varchar(50)\");\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasMaxLength(500)\n                        .HasColumnType(\"varchar(500)\");\n\n                    b.Property<string>(\"Content\")\n                        .HasColumnType(\"longtext\");\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"varchar(50)\")\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"CreatedByUser\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"varchar(100)\");\n\n                    b.Property<DateTime>(\"CreatedUtc\")\n                        .HasColumnType(\"datetime(6)\");\n\n                    b.Property<string>(\"DraftAuthor\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"DraftContent\")\n                        .HasColumnType(\"longtext\");\n\n                    b.Property<DateTime?>(\"DraftPubDate\")\n                        .HasColumnType(\"datetime(6)\");\n\n                    b.Property<string>(\"DraftSerializedModel\")\n                        .HasColumnType(\"longtext\");\n\n                    b.Property<string>(\"ImageUrl\")\n                        .HasMaxLength(250)\n                        .HasColumnType(\"varchar(250)\");\n\n                    b.Property<bool>(\"IsFeatured\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<bool>(\"IsPublished\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<DateTime>(\"LastModified\")\n                        .HasColumnType(\"datetime(6)\");\n\n                    b.Property<string>(\"LastModifiedByUser\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"varchar(100)\");\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasMaxLength(500)\n                        .HasColumnType(\"varchar(500)\");\n\n                    b.Property<string>(\"MetaHtml\")\n                        .HasColumnType(\"longtext\");\n\n                    b.Property<string>(\"MetaJson\")\n                        .HasColumnType(\"longtext\");\n\n                    b.Property<DateTime?>(\"PubDate\")\n                        .HasColumnType(\"datetime(6)\");\n\n                    b.Property<string>(\"SerializedModel\")\n                        .HasColumnType(\"longtext\");\n\n                    b.Property<string>(\"Serializer\")\n                        .HasMaxLength(50)\n                        .HasColumnType(\"varchar(50)\");\n\n                    b.Property<ulong>(\"ShowComments\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"Slug\")\n                        .IsRequired()\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<bool>(\"SuppressTeaser\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<string>(\"TeaserOverride\")\n                        .HasColumnType(\"longtext\");\n\n                    b.Property<string>(\"TemplateKey\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"ThumbnailUrl\")\n                        .HasMaxLength(250)\n                        .HasColumnType(\"varchar(250)\");\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"BlogId\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"Slug\");\n\n                    b.ToTable(\"cs_Post\", (string)null);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\", null)\n                        .WithMany(\"PageComments\")\n                        .HasForeignKey(\"PageEntityId\")\n                        .OnDelete(DeleteBehavior.Cascade);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageResourceEntity\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\", null)\n                        .WithMany(\"PageResources\")\n                        .HasForeignKey(\"PageEntityId\")\n                        .OnDelete(DeleteBehavior.Cascade);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\", null)\n                        .WithMany(\"PostComments\")\n                        .HasForeignKey(\"PostEntityId\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\", b =>\n                {\n                    b.Navigation(\"PageComments\");\n\n                    b.Navigation(\"PageResources\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\", b =>\n                {\n                    b.Navigation(\"PostComments\");\n                });\n#pragma warning restore 612, 618\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.MySQL/Migrations/20241108094512_simplecontent-20241108.cs",
    "content": "using Microsoft.EntityFrameworkCore.Migrations;\n\n#nullable disable\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.MySQL.Migrations\n{\n    /// <inheritdoc />\n    public partial class simplecontent20241108 : Migration\n    {\n        /// <inheritdoc />\n        protected override void Up(MigrationBuilder migrationBuilder)\n        {\n            migrationBuilder.AddColumn<bool>(\n                name: \"ShowCreatedBy\",\n                table: \"cs_Page\",\n                type: \"tinyint(1)\",\n                nullable: true);\n\n            migrationBuilder.AddColumn<bool>(\n                name: \"ShowCreatedDate\",\n                table: \"cs_Page\",\n                type: \"tinyint(1)\",\n                nullable: true);\n\n            migrationBuilder.AddColumn<bool>(\n                name: \"ShowLastModifiedBy\",\n                table: \"cs_Page\",\n                type: \"tinyint(1)\",\n                nullable: true);\n\n            migrationBuilder.AddColumn<bool>(\n                name: \"ShowLastModifiedDate\",\n                table: \"cs_Page\",\n                type: \"tinyint(1)\",\n                nullable: true);\n\n            migrationBuilder.AddColumn<bool>(\n                name: \"ShowCreatedBy\",\n                table: \"cs_ContentProject\",\n                type: \"tinyint(1)\",\n                nullable: false,\n                defaultValue: false);\n\n            migrationBuilder.AddColumn<bool>(\n                name: \"ShowCreatedDate\",\n                table: \"cs_ContentProject\",\n                type: \"tinyint(1)\",\n                nullable: false,\n                defaultValue: false);\n\n            migrationBuilder.AddColumn<bool>(\n                name: \"ShowLastModifiedBy\",\n                table: \"cs_ContentProject\",\n                type: \"tinyint(1)\",\n                nullable: false,\n                defaultValue: false);\n\n            migrationBuilder.AddColumn<bool>(\n                name: \"ShowLastModifiedDate\",\n                table: \"cs_ContentProject\",\n                type: \"tinyint(1)\",\n                nullable: false,\n                defaultValue: false);\n\n            migrationBuilder.AddColumn<bool>(\n                name: \"ShowCreatedBy\",\n                table: \"cs_ContentHistory\",\n                type: \"tinyint(1)\",\n                nullable: true);\n\n            migrationBuilder.AddColumn<bool>(\n                name: \"ShowCreatedDate\",\n                table: \"cs_ContentHistory\",\n                type: \"tinyint(1)\",\n                nullable: true);\n\n            migrationBuilder.AddColumn<bool>(\n                name: \"ShowLastModifiedBy\",\n                table: \"cs_ContentHistory\",\n                type: \"tinyint(1)\",\n                nullable: true);\n\n            migrationBuilder.AddColumn<bool>(\n                name: \"ShowLastModifiedDate\",\n                table: \"cs_ContentHistory\",\n                type: \"tinyint(1)\",\n                nullable: true);\n        }\n\n        /// <inheritdoc />\n        protected override void Down(MigrationBuilder migrationBuilder)\n        {\n            migrationBuilder.DropColumn(\n                name: \"ShowCreatedBy\",\n                table: \"cs_Page\");\n\n            migrationBuilder.DropColumn(\n                name: \"ShowCreatedDate\",\n                table: \"cs_Page\");\n\n            migrationBuilder.DropColumn(\n                name: \"ShowLastModifiedBy\",\n                table: \"cs_Page\");\n\n            migrationBuilder.DropColumn(\n                name: \"ShowLastModifiedDate\",\n                table: \"cs_Page\");\n\n            migrationBuilder.DropColumn(\n                name: \"ShowCreatedBy\",\n                table: \"cs_ContentProject\");\n\n            migrationBuilder.DropColumn(\n                name: \"ShowCreatedDate\",\n                table: \"cs_ContentProject\");\n\n            migrationBuilder.DropColumn(\n                name: \"ShowLastModifiedBy\",\n                table: \"cs_ContentProject\");\n\n            migrationBuilder.DropColumn(\n                name: \"ShowLastModifiedDate\",\n                table: \"cs_ContentProject\");\n\n            migrationBuilder.DropColumn(\n                name: \"ShowCreatedBy\",\n                table: \"cs_ContentHistory\");\n\n            migrationBuilder.DropColumn(\n                name: \"ShowCreatedDate\",\n                table: \"cs_ContentHistory\");\n\n            migrationBuilder.DropColumn(\n                name: \"ShowLastModifiedBy\",\n                table: \"cs_ContentHistory\");\n\n            migrationBuilder.DropColumn(\n                name: \"ShowLastModifiedDate\",\n                table: \"cs_ContentHistory\");\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.MySQL/Migrations/20250423093954_user-script-20250423.Designer.cs",
    "content": "﻿// <auto-generated />\nusing System;\nusing Microsoft.EntityFrameworkCore;\nusing Microsoft.EntityFrameworkCore.Infrastructure;\nusing Microsoft.EntityFrameworkCore.Migrations;\nusing Microsoft.EntityFrameworkCore.Storage.ValueConversion;\nusing cloudscribe.SimpleContent.Storage.EFCore.MySQL;\n\n#nullable disable\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.MySQL.Migrations\n{\n    [DbContext(typeof(SimpleContentDbContext))]\n    [Migration(\"20250423093954_user-script-20250423\")]\n    partial class userscript20250423\n    {\n        /// <inheritdoc />\n        protected override void BuildTargetModel(ModelBuilder modelBuilder)\n        {\n#pragma warning disable 612, 618\n            modelBuilder\n                .HasAnnotation(\"ProductVersion\", \"8.0.0\")\n                .HasAnnotation(\"Relational:MaxIdentifierLength\", 64);\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Models.ContentHistory\", b =>\n                {\n                    b.Property<Guid>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36)\n                        .HasColumnType(\"char(36)\");\n\n                    b.Property<string>(\"ArchivedBy\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<DateTime>(\"ArchivedUtc\")\n                        .HasColumnType(\"datetime(6)\");\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasColumnType(\"longtext\");\n\n                    b.Property<string>(\"Content\")\n                        .HasColumnType(\"longtext\");\n\n                    b.Property<string>(\"ContentId\")\n                        .IsRequired()\n                        .HasMaxLength(36)\n                        .HasColumnType(\"varchar(36)\");\n\n                    b.Property<string>(\"ContentSource\")\n                        .IsRequired()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"varchar(50)\");\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"varchar(50)\")\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"CreatedByUser\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"varchar(100)\");\n\n                    b.Property<DateTime>(\"CreatedUtc\")\n                        .HasColumnType(\"datetime(6)\");\n\n                    b.Property<string>(\"DraftAuthor\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"DraftContent\")\n                        .HasColumnType(\"longtext\");\n\n                    b.Property<DateTime?>(\"DraftPubDate\")\n                        .HasColumnType(\"datetime(6)\");\n\n                    b.Property<string>(\"DraftSerializedModel\")\n                        .HasColumnType(\"longtext\");\n\n                    b.Property<bool>(\"IsDraftHx\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<bool>(\"IsPublished\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<DateTime>(\"LastModified\")\n                        .HasColumnType(\"datetime(6)\");\n\n                    b.Property<string>(\"LastModifiedByUser\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"varchar(100)\");\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasColumnType(\"longtext\");\n\n                    b.Property<string>(\"MetaHtml\")\n                        .HasColumnType(\"longtext\");\n\n                    b.Property<string>(\"MetaJson\")\n                        .HasColumnType(\"longtext\");\n\n                    b.Property<int>(\"PageOrder\")\n                        .HasColumnType(\"int\");\n\n                    b.Property<string>(\"ParentId\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"ParentSlug\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"ProjectId\")\n                        .HasMaxLength(50)\n                        .HasColumnType(\"varchar(50)\");\n\n                    b.Property<DateTime?>(\"PubDate\")\n                        .HasColumnType(\"datetime(6)\");\n\n                    b.Property<string>(\"SerializedModel\")\n                        .HasColumnType(\"longtext\");\n\n                    b.Property<string>(\"Serializer\")\n                        .HasMaxLength(50)\n                        .HasColumnType(\"varchar(50)\");\n\n                    b.Property<bool?>(\"ShowCreatedBy\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<bool?>(\"ShowCreatedDate\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<bool?>(\"ShowLastModifiedBy\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<bool?>(\"ShowLastModifiedDate\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<string>(\"Slug\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"TeaserOverride\")\n                        .HasColumnType(\"longtext\");\n\n                    b.Property<string>(\"TemplateKey\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"ViewRoles\")\n                        .HasColumnType(\"longtext\");\n\n                    b.Property<bool>(\"WasDeleted\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"ContentId\");\n\n                    b.HasIndex(\"ContentSource\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"CreatedByUser\");\n\n                    b.HasIndex(\"LastModifiedByUser\");\n\n                    b.HasIndex(\"Title\");\n\n                    b.ToTable(\"cs_ContentHistory\", (string)null);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Models.ProjectSettings\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .HasMaxLength(50)\n                        .HasColumnType(\"varchar(50)\");\n\n                    b.Property<string>(\"AboutContent\")\n                        .HasColumnType(\"longtext\");\n\n                    b.Property<string>(\"AboutHeading\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<bool>(\"AddBlogToPagesTree\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<bool>(\"BlogMenuLinksToNewestPost\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<string>(\"BlogPageNavComponentVisibility\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<int>(\"BlogPagePosition\")\n                        .HasColumnType(\"int\");\n\n                    b.Property<string>(\"BlogPageText\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"CdnUrl\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"ChannelCategoriesCsv\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"ChannelRating\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"varchar(100)\");\n\n                    b.Property<int>(\"ChannelTimeToLive\")\n                        .HasColumnType(\"int\");\n\n                    b.Property<string>(\"CommentNotificationEmail\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"varchar(100)\");\n\n                    b.Property<string>(\"CopyrightNotice\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<int>(\"DaysToComment\")\n                        .HasColumnType(\"int\");\n\n                    b.Property<string>(\"DefaultContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"varchar(50)\")\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<int>(\"DefaultFeedItems\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"int\")\n                        .HasDefaultValue(20);\n\n                    b.Property<string>(\"DefaultPageSlug\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"Description\")\n                        .HasColumnType(\"longtext\");\n\n                    b.Property<string>(\"DisqusShortName\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"varchar(100)\");\n\n                    b.Property<string>(\"FacebookAppId\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"varchar(100)\");\n\n                    b.Property<string>(\"Image\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<bool>(\"IncludePubDateInPostUrls\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<string>(\"LanguageCode\")\n                        .HasMaxLength(10)\n                        .HasColumnType(\"varchar(10)\");\n\n                    b.Property<string>(\"LocalMediaVirtualPath\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"ManagingEditorEmail\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"varchar(100)\");\n\n                    b.Property<int>(\"MaxFeedItems\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"int\")\n                        .HasDefaultValue(1000);\n\n                    b.Property<bool>(\"ModerateComments\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<int>(\"PostsPerPage\")\n                        .HasColumnType(\"int\");\n\n                    b.Property<string>(\"PubDateFormat\")\n                        .HasMaxLength(75)\n                        .HasColumnType(\"varchar(75)\");\n\n                    b.Property<string>(\"Publisher\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"PublisherEntityType\")\n                        .HasMaxLength(50)\n                        .HasColumnType(\"varchar(50)\");\n\n                    b.Property<string>(\"PublisherLogoHeight\")\n                        .HasMaxLength(20)\n                        .HasColumnType(\"varchar(20)\");\n\n                    b.Property<string>(\"PublisherLogoUrl\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"PublisherLogoWidth\")\n                        .HasMaxLength(20)\n                        .HasColumnType(\"varchar(20)\");\n\n                    b.Property<string>(\"RecaptchaPrivateKey\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"RecaptchaPublicKey\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"RemoteFeedProcessorUseAgentFragment\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"RemoteFeedUrl\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<bool>(\"ShowAboutBox\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"tinyint(1)\")\n                        .HasDefaultValue(true);\n\n                    b.Property<bool>(\"ShowArchivedPosts\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"tinyint(1)\")\n                        .HasDefaultValue(true);\n\n                    b.Property<bool>(\"ShowBlogCategories\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"tinyint(1)\")\n                        .HasDefaultValue(true);\n\n                    b.Property<bool>(\"ShowCreatedBy\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<bool>(\"ShowCreatedDate\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<bool>(\"ShowFeaturedPostsOnDefaultPage\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<bool>(\"ShowLastModifiedBy\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<bool>(\"ShowLastModifiedDate\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<bool>(\"ShowRecentPostsOnDefaultPage\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<bool>(\"ShowRelatedPosts\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"tinyint(1)\")\n                        .HasDefaultValue(true);\n\n                    b.Property<bool>(\"ShowTitle\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<string>(\"SiteName\")\n                        .HasMaxLength(200)\n                        .HasColumnType(\"varchar(200)\");\n\n                    b.Property<byte>(\"TeaserMode\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"tinyint unsigned\")\n                        .HasDefaultValue((byte)0);\n\n                    b.Property<int>(\"TeaserTruncationLength\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"int\")\n                        .HasDefaultValue(20);\n\n                    b.Property<byte>(\"TeaserTruncationMode\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"tinyint unsigned\")\n                        .HasDefaultValue((byte)0);\n\n                    b.Property<string>(\"TimeZoneId\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"varchar(100)\");\n\n                    b.Property<string>(\"Title\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"TwitterCreator\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"varchar(100)\");\n\n                    b.Property<string>(\"TwitterPublisher\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"varchar(100)\");\n\n                    b.Property<bool>(\"UseDefaultPageAsRootNode\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<string>(\"WebmasterEmail\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"varchar(100)\");\n\n                    b.HasKey(\"Id\");\n\n                    b.ToTable(\"cs_ContentProject\", (string)null);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageCategory\", b =>\n                {\n                    b.Property<string>(\"Value\")\n                        .HasMaxLength(50)\n                        .HasColumnType(\"varchar(50)\");\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"varchar(36)\");\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"varchar(50)\");\n\n                    b.HasKey(\"Value\", \"PageEntityId\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.HasIndex(\"Value\");\n\n                    b.ToTable(\"cs_PageCategory\", (string)null);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"varchar(36)\");\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"Content\")\n                        .HasColumnType(\"longtext\");\n\n                    b.Property<string>(\"Email\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"varchar(100)\");\n\n                    b.Property<string>(\"Ip\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"varchar(100)\");\n\n                    b.Property<bool>(\"IsAdmin\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<bool>(\"IsApproved\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"varchar(36)\");\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"varchar(50)\");\n\n                    b.Property<DateTime>(\"PubDate\")\n                        .HasColumnType(\"datetime(6)\");\n\n                    b.Property<string>(\"UserAgent\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"Website\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_PageComment\", (string)null);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"varchar(36)\");\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasMaxLength(500)\n                        .HasColumnType(\"varchar(500)\");\n\n                    b.Property<string>(\"Content\")\n                        .HasColumnType(\"longtext\");\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"varchar(50)\")\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"CreatedByUser\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"varchar(100)\");\n\n                    b.Property<DateTime>(\"CreatedUtc\")\n                        .HasColumnType(\"datetime(6)\");\n\n                    b.Property<bool>(\"DisableEditor\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<string>(\"DraftAuthor\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"DraftContent\")\n                        .HasColumnType(\"longtext\");\n\n                    b.Property<DateTime?>(\"DraftPubDate\")\n                        .HasColumnType(\"datetime(6)\");\n\n                    b.Property<string>(\"DraftSerializedModel\")\n                        .HasColumnType(\"longtext\");\n\n                    b.Property<string>(\"ExternalUrl\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<bool>(\"IsPublished\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<DateTime>(\"LastModified\")\n                        .HasColumnType(\"datetime(6)\");\n\n                    b.Property<string>(\"LastModifiedByUser\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"varchar(100)\");\n\n                    b.Property<string>(\"MenuFilters\")\n                        .HasMaxLength(500)\n                        .HasColumnType(\"varchar(500)\");\n\n                    b.Property<bool>(\"MenuOnly\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasMaxLength(500)\n                        .HasColumnType(\"varchar(500)\");\n\n                    b.Property<string>(\"MetaHtml\")\n                        .HasColumnType(\"longtext\");\n\n                    b.Property<string>(\"MetaJson\")\n                        .HasColumnType(\"longtext\");\n\n                    b.Property<int>(\"PageOrder\")\n                        .HasColumnType(\"int\");\n\n                    b.Property<string>(\"ParentId\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"varchar(36)\");\n\n                    b.Property<string>(\"ParentSlug\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"varchar(50)\");\n\n                    b.Property<DateTime?>(\"PubDate\")\n                        .HasColumnType(\"datetime(6)\");\n\n                    b.Property<string>(\"Script\")\n                        .HasColumnType(\"longtext\");\n\n                    b.Property<string>(\"SerializedModel\")\n                        .HasColumnType(\"longtext\");\n\n                    b.Property<string>(\"Serializer\")\n                        .HasMaxLength(50)\n                        .HasColumnType(\"varchar(50)\");\n\n                    b.Property<bool>(\"ShowCategories\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<bool>(\"ShowComments\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<bool?>(\"ShowCreatedBy\")\n                        .HasColumnType(\"boolean\");\n\n                    b.Property<bool?>(\"ShowCreatedDate\")\n                        .HasColumnType(\"boolean\");\n\n                    b.Property<bool>(\"ShowHeading\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<bool>(\"ShowLastModified\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<bool?>(\"ShowLastModifiedBy\")\n                        .HasColumnType(\"boolean\");\n\n                    b.Property<bool?>(\"ShowLastModifiedDate\")\n                        .HasColumnType(\"boolean\");\n\n                    b.Property<bool>(\"ShowMenu\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<bool>(\"ShowPubDate\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<string>(\"Slug\")\n                        .IsRequired()\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"TemplateKey\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"ViewRoles\")\n                        .HasColumnType(\"longtext\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"ParentId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_Page\", (string)null);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageResourceEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"varchar(36)\");\n\n                    b.Property<string>(\"Environment\")\n                        .IsRequired()\n                        .HasMaxLength(15)\n                        .HasColumnType(\"varchar(15)\");\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"varchar(36)\");\n\n                    b.Property<string>(\"Script\")\n                        .HasColumnType(\"longtext\");\n\n                    b.Property<int>(\"Sort\")\n                        .HasColumnType(\"int\");\n\n                    b.Property<string>(\"Type\")\n                        .IsRequired()\n                        .HasMaxLength(10)\n                        .HasColumnType(\"varchar(10)\");\n\n                    b.Property<string>(\"Url\")\n                        .IsRequired()\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.ToTable(\"cs_PageResource\", (string)null);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostCategory\", b =>\n                {\n                    b.Property<string>(\"Value\")\n                        .HasMaxLength(50)\n                        .HasColumnType(\"varchar(50)\");\n\n                    b.Property<string>(\"PostEntityId\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"varchar(36)\");\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"varchar(50)\");\n\n                    b.HasKey(\"Value\", \"PostEntityId\");\n\n                    b.HasIndex(\"PostEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.HasIndex(\"Value\");\n\n                    b.ToTable(\"cs_PostCategory\", (string)null);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"varchar(36)\");\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"Content\")\n                        .HasColumnType(\"longtext\");\n\n                    b.Property<string>(\"Email\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"varchar(100)\");\n\n                    b.Property<string>(\"Ip\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"varchar(100)\");\n\n                    b.Property<bool>(\"IsAdmin\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<bool>(\"IsApproved\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<string>(\"PostEntityId\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"varchar(36)\");\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"varchar(50)\");\n\n                    b.Property<DateTime>(\"PubDate\")\n                        .HasColumnType(\"datetime(6)\");\n\n                    b.Property<string>(\"UserAgent\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"Website\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PostEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_PostComment\", (string)null);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"varchar(36)\");\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"AutoTeaser\")\n                        .HasColumnType(\"longtext\");\n\n                    b.Property<string>(\"BlogId\")\n                        .IsRequired()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"varchar(50)\");\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasMaxLength(500)\n                        .HasColumnType(\"varchar(500)\");\n\n                    b.Property<string>(\"Content\")\n                        .HasColumnType(\"longtext\");\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"varchar(50)\")\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"CreatedByUser\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"varchar(100)\");\n\n                    b.Property<DateTime>(\"CreatedUtc\")\n                        .HasColumnType(\"datetime(6)\");\n\n                    b.Property<string>(\"DraftAuthor\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"DraftContent\")\n                        .HasColumnType(\"longtext\");\n\n                    b.Property<DateTime?>(\"DraftPubDate\")\n                        .HasColumnType(\"datetime(6)\");\n\n                    b.Property<string>(\"DraftSerializedModel\")\n                        .HasColumnType(\"longtext\");\n\n                    b.Property<string>(\"ImageUrl\")\n                        .HasMaxLength(250)\n                        .HasColumnType(\"varchar(250)\");\n\n                    b.Property<bool>(\"IsFeatured\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<bool>(\"IsPublished\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<DateTime>(\"LastModified\")\n                        .HasColumnType(\"datetime(6)\");\n\n                    b.Property<string>(\"LastModifiedByUser\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"varchar(100)\");\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasMaxLength(500)\n                        .HasColumnType(\"varchar(500)\");\n\n                    b.Property<string>(\"MetaHtml\")\n                        .HasColumnType(\"longtext\");\n\n                    b.Property<string>(\"MetaJson\")\n                        .HasColumnType(\"longtext\");\n\n                    b.Property<DateTime?>(\"PubDate\")\n                        .HasColumnType(\"datetime(6)\");\n\n                    b.Property<string>(\"Script\")\n                        .HasColumnType(\"longtext\");\n\n                    b.Property<string>(\"SerializedModel\")\n                        .HasColumnType(\"longtext\");\n\n                    b.Property<string>(\"Serializer\")\n                        .HasMaxLength(50)\n                        .HasColumnType(\"varchar(50)\");\n\n                    b.Property<ulong>(\"ShowComments\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"Slug\")\n                        .IsRequired()\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<bool>(\"SuppressTeaser\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<string>(\"TeaserOverride\")\n                        .HasColumnType(\"longtext\");\n\n                    b.Property<string>(\"TemplateKey\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"ThumbnailUrl\")\n                        .HasMaxLength(250)\n                        .HasColumnType(\"varchar(250)\");\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"BlogId\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"Slug\");\n\n                    b.ToTable(\"cs_Post\", (string)null);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\", null)\n                        .WithMany(\"PageComments\")\n                        .HasForeignKey(\"PageEntityId\")\n                        .OnDelete(DeleteBehavior.Cascade);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageResourceEntity\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\", null)\n                        .WithMany(\"PageResources\")\n                        .HasForeignKey(\"PageEntityId\")\n                        .OnDelete(DeleteBehavior.Cascade);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\", null)\n                        .WithMany(\"PostComments\")\n                        .HasForeignKey(\"PostEntityId\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\", b =>\n                {\n                    b.Navigation(\"PageComments\");\n\n                    b.Navigation(\"PageResources\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\", b =>\n                {\n                    b.Navigation(\"PostComments\");\n                });\n#pragma warning restore 612, 618\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.MySQL/Migrations/20250423093954_user-script-20250423.cs",
    "content": "﻿using Microsoft.EntityFrameworkCore.Migrations;\n\n#nullable disable\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.MySQL.Migrations\n{\n    /// <inheritdoc />\n    public partial class userscript20250423 : Migration\n    {\n        /// <inheritdoc />\n        protected override void Up(MigrationBuilder migrationBuilder)\n        {\n            migrationBuilder.AddColumn<string>(\n                name: \"Script\",\n                table: \"cs_Post\",\n                type: \"longtext\",\n                nullable: true)\n                .Annotation(\"MySql:CharSet\", \"utf8mb4\");\n\n            migrationBuilder.AddColumn<string>(\n                name: \"Script\",\n                table: \"cs_PageResource\",\n                type: \"longtext\",\n                nullable: true)\n                .Annotation(\"MySql:CharSet\", \"utf8mb4\");\n\n            migrationBuilder.AddColumn<string>(\n                name: \"Script\",\n                table: \"cs_Page\",\n                type: \"longtext\",\n                nullable: true)\n                .Annotation(\"MySql:CharSet\", \"utf8mb4\");\n        }\n\n        /// <inheritdoc />\n        protected override void Down(MigrationBuilder migrationBuilder)\n        {\n            migrationBuilder.DropColumn(\n                name: \"Script\",\n                table: \"cs_Post\");\n\n            migrationBuilder.DropColumn(\n                name: \"Script\",\n                table: \"cs_PageResource\");\n\n            migrationBuilder.DropColumn(\n                name: \"Script\",\n                table: \"cs_Page\");\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.MySQL/Migrations/20250818153349_remove-pageresource-script.Designer.cs",
    "content": "﻿// <auto-generated />\nusing System;\nusing Microsoft.EntityFrameworkCore;\nusing Microsoft.EntityFrameworkCore.Infrastructure;\nusing Microsoft.EntityFrameworkCore.Migrations;\nusing Microsoft.EntityFrameworkCore.Storage.ValueConversion;\nusing cloudscribe.SimpleContent.Storage.EFCore.MySQL;\n\n#nullable disable\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.MySQL.Migrations\n{\n    [DbContext(typeof(SimpleContentDbContext))]\n    [Migration(\"20250818153349_remove-pageresource-script\")]\n    partial class removepageresourcescript\n    {\n        /// <inheritdoc />\n        protected override void BuildTargetModel(ModelBuilder modelBuilder)\n        {\n#pragma warning disable 612, 618\n            modelBuilder\n                .HasAnnotation(\"ProductVersion\", \"8.0.0\")\n                .HasAnnotation(\"Relational:MaxIdentifierLength\", 64);\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Models.ContentHistory\", b =>\n                {\n                    b.Property<Guid>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36)\n                        .HasColumnType(\"char(36)\");\n\n                    b.Property<string>(\"ArchivedBy\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<DateTime>(\"ArchivedUtc\")\n                        .HasColumnType(\"datetime(6)\");\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasColumnType(\"longtext\");\n\n                    b.Property<string>(\"Content\")\n                        .HasColumnType(\"longtext\");\n\n                    b.Property<string>(\"ContentId\")\n                        .IsRequired()\n                        .HasMaxLength(36)\n                        .HasColumnType(\"varchar(36)\");\n\n                    b.Property<string>(\"ContentSource\")\n                        .IsRequired()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"varchar(50)\");\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"varchar(50)\")\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"CreatedByUser\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"varchar(100)\");\n\n                    b.Property<DateTime>(\"CreatedUtc\")\n                        .HasColumnType(\"datetime(6)\");\n\n                    b.Property<string>(\"DraftAuthor\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"DraftContent\")\n                        .HasColumnType(\"longtext\");\n\n                    b.Property<DateTime?>(\"DraftPubDate\")\n                        .HasColumnType(\"datetime(6)\");\n\n                    b.Property<string>(\"DraftSerializedModel\")\n                        .HasColumnType(\"longtext\");\n\n                    b.Property<bool>(\"IsDraftHx\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<bool>(\"IsPublished\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<DateTime>(\"LastModified\")\n                        .HasColumnType(\"datetime(6)\");\n\n                    b.Property<string>(\"LastModifiedByUser\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"varchar(100)\");\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasColumnType(\"longtext\");\n\n                    b.Property<string>(\"MetaHtml\")\n                        .HasColumnType(\"longtext\");\n\n                    b.Property<string>(\"MetaJson\")\n                        .HasColumnType(\"longtext\");\n\n                    b.Property<int>(\"PageOrder\")\n                        .HasColumnType(\"int\");\n\n                    b.Property<string>(\"ParentId\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"ParentSlug\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"ProjectId\")\n                        .HasMaxLength(50)\n                        .HasColumnType(\"varchar(50)\");\n\n                    b.Property<DateTime?>(\"PubDate\")\n                        .HasColumnType(\"datetime(6)\");\n\n                    b.Property<string>(\"SerializedModel\")\n                        .HasColumnType(\"longtext\");\n\n                    b.Property<string>(\"Serializer\")\n                        .HasMaxLength(50)\n                        .HasColumnType(\"varchar(50)\");\n\n                    b.Property<bool?>(\"ShowCreatedBy\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<bool?>(\"ShowCreatedDate\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<bool?>(\"ShowLastModifiedBy\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<bool?>(\"ShowLastModifiedDate\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<string>(\"Slug\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"TeaserOverride\")\n                        .HasColumnType(\"longtext\");\n\n                    b.Property<string>(\"TemplateKey\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"ViewRoles\")\n                        .HasColumnType(\"longtext\");\n\n                    b.Property<bool>(\"WasDeleted\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"ContentId\");\n\n                    b.HasIndex(\"ContentSource\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"CreatedByUser\");\n\n                    b.HasIndex(\"LastModifiedByUser\");\n\n                    b.HasIndex(\"Title\");\n\n                    b.ToTable(\"cs_ContentHistory\", (string)null);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Models.ProjectSettings\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .HasMaxLength(50)\n                        .HasColumnType(\"varchar(50)\");\n\n                    b.Property<string>(\"AboutContent\")\n                        .HasColumnType(\"longtext\");\n\n                    b.Property<string>(\"AboutHeading\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<bool>(\"AddBlogToPagesTree\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<bool>(\"BlogMenuLinksToNewestPost\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<string>(\"BlogPageNavComponentVisibility\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<int>(\"BlogPagePosition\")\n                        .HasColumnType(\"int\");\n\n                    b.Property<string>(\"BlogPageText\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"CdnUrl\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"ChannelCategoriesCsv\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"ChannelRating\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"varchar(100)\");\n\n                    b.Property<int>(\"ChannelTimeToLive\")\n                        .HasColumnType(\"int\");\n\n                    b.Property<string>(\"CommentNotificationEmail\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"varchar(100)\");\n\n                    b.Property<string>(\"CopyrightNotice\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<int>(\"DaysToComment\")\n                        .HasColumnType(\"int\");\n\n                    b.Property<string>(\"DefaultContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"varchar(50)\")\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<int>(\"DefaultFeedItems\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"int\")\n                        .HasDefaultValue(20);\n\n                    b.Property<string>(\"DefaultPageSlug\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"Description\")\n                        .HasColumnType(\"longtext\");\n\n                    b.Property<string>(\"DisqusShortName\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"varchar(100)\");\n\n                    b.Property<string>(\"FacebookAppId\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"varchar(100)\");\n\n                    b.Property<string>(\"Image\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<bool>(\"IncludePubDateInPostUrls\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<string>(\"LanguageCode\")\n                        .HasMaxLength(10)\n                        .HasColumnType(\"varchar(10)\");\n\n                    b.Property<string>(\"LocalMediaVirtualPath\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"ManagingEditorEmail\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"varchar(100)\");\n\n                    b.Property<int>(\"MaxFeedItems\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"int\")\n                        .HasDefaultValue(1000);\n\n                    b.Property<bool>(\"ModerateComments\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<int>(\"PostsPerPage\")\n                        .HasColumnType(\"int\");\n\n                    b.Property<string>(\"PubDateFormat\")\n                        .HasMaxLength(75)\n                        .HasColumnType(\"varchar(75)\");\n\n                    b.Property<string>(\"Publisher\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"PublisherEntityType\")\n                        .HasMaxLength(50)\n                        .HasColumnType(\"varchar(50)\");\n\n                    b.Property<string>(\"PublisherLogoHeight\")\n                        .HasMaxLength(20)\n                        .HasColumnType(\"varchar(20)\");\n\n                    b.Property<string>(\"PublisherLogoUrl\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"PublisherLogoWidth\")\n                        .HasMaxLength(20)\n                        .HasColumnType(\"varchar(20)\");\n\n                    b.Property<string>(\"RecaptchaPrivateKey\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"RecaptchaPublicKey\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"RemoteFeedProcessorUseAgentFragment\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"RemoteFeedUrl\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<bool>(\"ShowAboutBox\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"tinyint(1)\")\n                        .HasDefaultValue(true);\n\n                    b.Property<bool>(\"ShowArchivedPosts\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"tinyint(1)\")\n                        .HasDefaultValue(true);\n\n                    b.Property<bool>(\"ShowBlogCategories\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"tinyint(1)\")\n                        .HasDefaultValue(true);\n\n                    b.Property<bool>(\"ShowCreatedBy\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<bool>(\"ShowCreatedDate\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<bool>(\"ShowFeaturedPostsOnDefaultPage\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<bool>(\"ShowLastModifiedBy\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<bool>(\"ShowLastModifiedDate\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<bool>(\"ShowRecentPostsOnDefaultPage\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<bool>(\"ShowRelatedPosts\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"tinyint(1)\")\n                        .HasDefaultValue(true);\n\n                    b.Property<bool>(\"ShowTitle\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<string>(\"SiteName\")\n                        .HasMaxLength(200)\n                        .HasColumnType(\"varchar(200)\");\n\n                    b.Property<byte>(\"TeaserMode\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"tinyint unsigned\")\n                        .HasDefaultValue((byte)0);\n\n                    b.Property<int>(\"TeaserTruncationLength\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"int\")\n                        .HasDefaultValue(20);\n\n                    b.Property<byte>(\"TeaserTruncationMode\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"tinyint unsigned\")\n                        .HasDefaultValue((byte)0);\n\n                    b.Property<string>(\"TimeZoneId\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"varchar(100)\");\n\n                    b.Property<string>(\"Title\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"TwitterCreator\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"varchar(100)\");\n\n                    b.Property<string>(\"TwitterPublisher\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"varchar(100)\");\n\n                    b.Property<bool>(\"UseDefaultPageAsRootNode\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<string>(\"WebmasterEmail\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"varchar(100)\");\n\n                    b.HasKey(\"Id\");\n\n                    b.ToTable(\"cs_ContentProject\", (string)null);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageCategory\", b =>\n                {\n                    b.Property<string>(\"Value\")\n                        .HasMaxLength(50)\n                        .HasColumnType(\"varchar(50)\");\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"varchar(36)\");\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"varchar(50)\");\n\n                    b.HasKey(\"Value\", \"PageEntityId\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.HasIndex(\"Value\");\n\n                    b.ToTable(\"cs_PageCategory\", (string)null);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"varchar(36)\");\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"Content\")\n                        .HasColumnType(\"longtext\");\n\n                    b.Property<string>(\"Email\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"varchar(100)\");\n\n                    b.Property<string>(\"Ip\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"varchar(100)\");\n\n                    b.Property<bool>(\"IsAdmin\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<bool>(\"IsApproved\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"varchar(36)\");\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"varchar(50)\");\n\n                    b.Property<DateTime>(\"PubDate\")\n                        .HasColumnType(\"datetime(6)\");\n\n                    b.Property<string>(\"UserAgent\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"Website\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_PageComment\", (string)null);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"varchar(36)\");\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasMaxLength(500)\n                        .HasColumnType(\"varchar(500)\");\n\n                    b.Property<string>(\"Content\")\n                        .HasColumnType(\"longtext\");\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"varchar(50)\")\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"CreatedByUser\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"varchar(100)\");\n\n                    b.Property<DateTime>(\"CreatedUtc\")\n                        .HasColumnType(\"datetime(6)\");\n\n                    b.Property<bool>(\"DisableEditor\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<string>(\"DraftAuthor\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"DraftContent\")\n                        .HasColumnType(\"longtext\");\n\n                    b.Property<DateTime?>(\"DraftPubDate\")\n                        .HasColumnType(\"datetime(6)\");\n\n                    b.Property<string>(\"DraftSerializedModel\")\n                        .HasColumnType(\"longtext\");\n\n                    b.Property<string>(\"ExternalUrl\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<bool>(\"IsPublished\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<DateTime>(\"LastModified\")\n                        .HasColumnType(\"datetime(6)\");\n\n                    b.Property<string>(\"LastModifiedByUser\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"varchar(100)\");\n\n                    b.Property<string>(\"MenuFilters\")\n                        .HasMaxLength(500)\n                        .HasColumnType(\"varchar(500)\");\n\n                    b.Property<bool>(\"MenuOnly\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasMaxLength(500)\n                        .HasColumnType(\"varchar(500)\");\n\n                    b.Property<string>(\"MetaHtml\")\n                        .HasColumnType(\"longtext\");\n\n                    b.Property<string>(\"MetaJson\")\n                        .HasColumnType(\"longtext\");\n\n                    b.Property<int>(\"PageOrder\")\n                        .HasColumnType(\"int\");\n\n                    b.Property<string>(\"ParentId\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"varchar(36)\");\n\n                    b.Property<string>(\"ParentSlug\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"varchar(50)\");\n\n                    b.Property<DateTime?>(\"PubDate\")\n                        .HasColumnType(\"datetime(6)\");\n\n                    b.Property<string>(\"Script\")\n                        .HasColumnType(\"longtext\");\n\n                    b.Property<string>(\"SerializedModel\")\n                        .HasColumnType(\"longtext\");\n\n                    b.Property<string>(\"Serializer\")\n                        .HasMaxLength(50)\n                        .HasColumnType(\"varchar(50)\");\n\n                    b.Property<bool>(\"ShowCategories\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<bool>(\"ShowComments\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<bool?>(\"ShowCreatedBy\")\n                        .HasColumnType(\"boolean\");\n\n                    b.Property<bool?>(\"ShowCreatedDate\")\n                        .HasColumnType(\"boolean\");\n\n                    b.Property<bool>(\"ShowHeading\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<bool>(\"ShowLastModified\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<bool?>(\"ShowLastModifiedBy\")\n                        .HasColumnType(\"boolean\");\n\n                    b.Property<bool?>(\"ShowLastModifiedDate\")\n                        .HasColumnType(\"boolean\");\n\n                    b.Property<bool>(\"ShowMenu\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<bool>(\"ShowPubDate\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<string>(\"Slug\")\n                        .IsRequired()\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"TemplateKey\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"ViewRoles\")\n                        .HasColumnType(\"longtext\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"ParentId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_Page\", (string)null);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageResourceEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"varchar(36)\");\n\n                    b.Property<string>(\"Environment\")\n                        .IsRequired()\n                        .HasMaxLength(15)\n                        .HasColumnType(\"varchar(15)\");\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"varchar(36)\");\n\n                    b.Property<int>(\"Sort\")\n                        .HasColumnType(\"int\");\n\n                    b.Property<string>(\"Type\")\n                        .IsRequired()\n                        .HasMaxLength(10)\n                        .HasColumnType(\"varchar(10)\");\n\n                    b.Property<string>(\"Url\")\n                        .IsRequired()\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.ToTable(\"cs_PageResource\", (string)null);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostCategory\", b =>\n                {\n                    b.Property<string>(\"Value\")\n                        .HasMaxLength(50)\n                        .HasColumnType(\"varchar(50)\");\n\n                    b.Property<string>(\"PostEntityId\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"varchar(36)\");\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"varchar(50)\");\n\n                    b.HasKey(\"Value\", \"PostEntityId\");\n\n                    b.HasIndex(\"PostEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.HasIndex(\"Value\");\n\n                    b.ToTable(\"cs_PostCategory\", (string)null);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"varchar(36)\");\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"Content\")\n                        .HasColumnType(\"longtext\");\n\n                    b.Property<string>(\"Email\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"varchar(100)\");\n\n                    b.Property<string>(\"Ip\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"varchar(100)\");\n\n                    b.Property<bool>(\"IsAdmin\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<bool>(\"IsApproved\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<string>(\"PostEntityId\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"varchar(36)\");\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"varchar(50)\");\n\n                    b.Property<DateTime>(\"PubDate\")\n                        .HasColumnType(\"datetime(6)\");\n\n                    b.Property<string>(\"UserAgent\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"Website\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PostEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_PostComment\", (string)null);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"varchar(36)\");\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"AutoTeaser\")\n                        .HasColumnType(\"longtext\");\n\n                    b.Property<string>(\"BlogId\")\n                        .IsRequired()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"varchar(50)\");\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasMaxLength(500)\n                        .HasColumnType(\"varchar(500)\");\n\n                    b.Property<string>(\"Content\")\n                        .HasColumnType(\"longtext\");\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"varchar(50)\")\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"CreatedByUser\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"varchar(100)\");\n\n                    b.Property<DateTime>(\"CreatedUtc\")\n                        .HasColumnType(\"datetime(6)\");\n\n                    b.Property<string>(\"DraftAuthor\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"DraftContent\")\n                        .HasColumnType(\"longtext\");\n\n                    b.Property<DateTime?>(\"DraftPubDate\")\n                        .HasColumnType(\"datetime(6)\");\n\n                    b.Property<string>(\"DraftSerializedModel\")\n                        .HasColumnType(\"longtext\");\n\n                    b.Property<string>(\"ImageUrl\")\n                        .HasMaxLength(250)\n                        .HasColumnType(\"varchar(250)\");\n\n                    b.Property<bool>(\"IsFeatured\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<bool>(\"IsPublished\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<DateTime>(\"LastModified\")\n                        .HasColumnType(\"datetime(6)\");\n\n                    b.Property<string>(\"LastModifiedByUser\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"varchar(100)\");\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasMaxLength(500)\n                        .HasColumnType(\"varchar(500)\");\n\n                    b.Property<string>(\"MetaHtml\")\n                        .HasColumnType(\"longtext\");\n\n                    b.Property<string>(\"MetaJson\")\n                        .HasColumnType(\"longtext\");\n\n                    b.Property<DateTime?>(\"PubDate\")\n                        .HasColumnType(\"datetime(6)\");\n\n                    b.Property<string>(\"Script\")\n                        .HasColumnType(\"longtext\");\n\n                    b.Property<string>(\"SerializedModel\")\n                        .HasColumnType(\"longtext\");\n\n                    b.Property<string>(\"Serializer\")\n                        .HasMaxLength(50)\n                        .HasColumnType(\"varchar(50)\");\n\n                    b.Property<ulong>(\"ShowComments\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"Slug\")\n                        .IsRequired()\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<bool>(\"SuppressTeaser\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<string>(\"TeaserOverride\")\n                        .HasColumnType(\"longtext\");\n\n                    b.Property<string>(\"TemplateKey\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"ThumbnailUrl\")\n                        .HasMaxLength(250)\n                        .HasColumnType(\"varchar(250)\");\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"BlogId\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"Slug\");\n\n                    b.ToTable(\"cs_Post\", (string)null);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\", null)\n                        .WithMany(\"PageComments\")\n                        .HasForeignKey(\"PageEntityId\")\n                        .OnDelete(DeleteBehavior.Cascade);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageResourceEntity\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\", null)\n                        .WithMany(\"PageResources\")\n                        .HasForeignKey(\"PageEntityId\")\n                        .OnDelete(DeleteBehavior.Cascade);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\", null)\n                        .WithMany(\"PostComments\")\n                        .HasForeignKey(\"PostEntityId\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\", b =>\n                {\n                    b.Navigation(\"PageComments\");\n\n                    b.Navigation(\"PageResources\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\", b =>\n                {\n                    b.Navigation(\"PostComments\");\n                });\n#pragma warning restore 612, 618\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.MySQL/Migrations/20250818153349_remove-pageresource-script.cs",
    "content": "﻿using Microsoft.EntityFrameworkCore.Migrations;\n\n#nullable disable\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.MySQL.Migrations\n{\n    /// <inheritdoc />\n    public partial class removepageresourcescript : Migration\n    {\n        /// <inheritdoc />\n        protected override void Up(MigrationBuilder migrationBuilder)\n        {\n            migrationBuilder.DropColumn(\n                name: \"Script\",\n                table: \"cs_PageResource\");\n        }\n\n        /// <inheritdoc />\n        protected override void Down(MigrationBuilder migrationBuilder)\n        {\n            migrationBuilder.AddColumn<string>(\n                name: \"Script\",\n                table: \"cs_PageResource\",\n                type: \"longtext\",\n                nullable: true)\n                .Annotation(\"MySql:CharSet\", \"utf8mb4\");\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.MySQL/Migrations/SimpleContentDbContextModelSnapshot.cs",
    "content": "﻿// <auto-generated />\nusing System;\nusing Microsoft.EntityFrameworkCore;\nusing Microsoft.EntityFrameworkCore.Infrastructure;\nusing Microsoft.EntityFrameworkCore.Storage.ValueConversion;\nusing cloudscribe.SimpleContent.Storage.EFCore.MySQL;\n\n#nullable disable\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.MySQL.Migrations\n{\n    [DbContext(typeof(SimpleContentDbContext))]\n    partial class SimpleContentDbContextModelSnapshot : ModelSnapshot\n    {\n        protected override void BuildModel(ModelBuilder modelBuilder)\n        {\n#pragma warning disable 612, 618\n            modelBuilder\n                .HasAnnotation(\"ProductVersion\", \"8.0.0\")\n                .HasAnnotation(\"Relational:MaxIdentifierLength\", 64);\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Models.ContentHistory\", b =>\n                {\n                    b.Property<Guid>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36)\n                        .HasColumnType(\"char(36)\");\n\n                    b.Property<string>(\"ArchivedBy\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<DateTime>(\"ArchivedUtc\")\n                        .HasColumnType(\"datetime(6)\");\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasColumnType(\"longtext\");\n\n                    b.Property<string>(\"Content\")\n                        .HasColumnType(\"longtext\");\n\n                    b.Property<string>(\"ContentId\")\n                        .IsRequired()\n                        .HasMaxLength(36)\n                        .HasColumnType(\"varchar(36)\");\n\n                    b.Property<string>(\"ContentSource\")\n                        .IsRequired()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"varchar(50)\");\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"varchar(50)\")\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"CreatedByUser\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"varchar(100)\");\n\n                    b.Property<DateTime>(\"CreatedUtc\")\n                        .HasColumnType(\"datetime(6)\");\n\n                    b.Property<string>(\"DraftAuthor\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"DraftContent\")\n                        .HasColumnType(\"longtext\");\n\n                    b.Property<DateTime?>(\"DraftPubDate\")\n                        .HasColumnType(\"datetime(6)\");\n\n                    b.Property<string>(\"DraftSerializedModel\")\n                        .HasColumnType(\"longtext\");\n\n                    b.Property<bool>(\"IsDraftHx\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<bool>(\"IsPublished\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<DateTime>(\"LastModified\")\n                        .HasColumnType(\"datetime(6)\");\n\n                    b.Property<string>(\"LastModifiedByUser\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"varchar(100)\");\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasColumnType(\"longtext\");\n\n                    b.Property<string>(\"MetaHtml\")\n                        .HasColumnType(\"longtext\");\n\n                    b.Property<string>(\"MetaJson\")\n                        .HasColumnType(\"longtext\");\n\n                    b.Property<int>(\"PageOrder\")\n                        .HasColumnType(\"int\");\n\n                    b.Property<string>(\"ParentId\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"ParentSlug\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"ProjectId\")\n                        .HasMaxLength(50)\n                        .HasColumnType(\"varchar(50)\");\n\n                    b.Property<DateTime?>(\"PubDate\")\n                        .HasColumnType(\"datetime(6)\");\n\n                    b.Property<string>(\"SerializedModel\")\n                        .HasColumnType(\"longtext\");\n\n                    b.Property<string>(\"Serializer\")\n                        .HasMaxLength(50)\n                        .HasColumnType(\"varchar(50)\");\n\n                    b.Property<bool?>(\"ShowCreatedBy\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<bool?>(\"ShowCreatedDate\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<bool?>(\"ShowLastModifiedBy\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<bool?>(\"ShowLastModifiedDate\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<string>(\"Slug\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"TeaserOverride\")\n                        .HasColumnType(\"longtext\");\n\n                    b.Property<string>(\"TemplateKey\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"ViewRoles\")\n                        .HasColumnType(\"longtext\");\n\n                    b.Property<bool>(\"WasDeleted\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"ContentId\");\n\n                    b.HasIndex(\"ContentSource\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"CreatedByUser\");\n\n                    b.HasIndex(\"LastModifiedByUser\");\n\n                    b.HasIndex(\"Title\");\n\n                    b.ToTable(\"cs_ContentHistory\", (string)null);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Models.ProjectSettings\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .HasMaxLength(50)\n                        .HasColumnType(\"varchar(50)\");\n\n                    b.Property<string>(\"AboutContent\")\n                        .HasColumnType(\"longtext\");\n\n                    b.Property<string>(\"AboutHeading\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<bool>(\"AddBlogToPagesTree\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<bool>(\"BlogMenuLinksToNewestPost\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<string>(\"BlogPageNavComponentVisibility\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<int>(\"BlogPagePosition\")\n                        .HasColumnType(\"int\");\n\n                    b.Property<string>(\"BlogPageText\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"CdnUrl\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"ChannelCategoriesCsv\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"ChannelRating\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"varchar(100)\");\n\n                    b.Property<int>(\"ChannelTimeToLive\")\n                        .HasColumnType(\"int\");\n\n                    b.Property<string>(\"CommentNotificationEmail\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"varchar(100)\");\n\n                    b.Property<string>(\"CopyrightNotice\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<int>(\"DaysToComment\")\n                        .HasColumnType(\"int\");\n\n                    b.Property<string>(\"DefaultContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"varchar(50)\")\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<int>(\"DefaultFeedItems\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"int\")\n                        .HasDefaultValue(20);\n\n                    b.Property<string>(\"DefaultPageSlug\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"Description\")\n                        .HasColumnType(\"longtext\");\n\n                    b.Property<string>(\"DisqusShortName\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"varchar(100)\");\n\n                    b.Property<string>(\"FacebookAppId\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"varchar(100)\");\n\n                    b.Property<string>(\"Image\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<bool>(\"IncludePubDateInPostUrls\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<string>(\"LanguageCode\")\n                        .HasMaxLength(10)\n                        .HasColumnType(\"varchar(10)\");\n\n                    b.Property<string>(\"LocalMediaVirtualPath\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"ManagingEditorEmail\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"varchar(100)\");\n\n                    b.Property<int>(\"MaxFeedItems\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"int\")\n                        .HasDefaultValue(1000);\n\n                    b.Property<bool>(\"ModerateComments\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<int>(\"PostsPerPage\")\n                        .HasColumnType(\"int\");\n\n                    b.Property<string>(\"PubDateFormat\")\n                        .HasMaxLength(75)\n                        .HasColumnType(\"varchar(75)\");\n\n                    b.Property<string>(\"Publisher\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"PublisherEntityType\")\n                        .HasMaxLength(50)\n                        .HasColumnType(\"varchar(50)\");\n\n                    b.Property<string>(\"PublisherLogoHeight\")\n                        .HasMaxLength(20)\n                        .HasColumnType(\"varchar(20)\");\n\n                    b.Property<string>(\"PublisherLogoUrl\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"PublisherLogoWidth\")\n                        .HasMaxLength(20)\n                        .HasColumnType(\"varchar(20)\");\n\n                    b.Property<string>(\"RecaptchaPrivateKey\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"RecaptchaPublicKey\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"RemoteFeedProcessorUseAgentFragment\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"RemoteFeedUrl\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<bool>(\"ShowAboutBox\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"tinyint(1)\")\n                        .HasDefaultValue(true);\n\n                    b.Property<bool>(\"ShowArchivedPosts\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"tinyint(1)\")\n                        .HasDefaultValue(true);\n\n                    b.Property<bool>(\"ShowBlogCategories\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"tinyint(1)\")\n                        .HasDefaultValue(true);\n\n                    b.Property<bool>(\"ShowCreatedBy\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<bool>(\"ShowCreatedDate\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<bool>(\"ShowFeaturedPostsOnDefaultPage\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<bool>(\"ShowLastModifiedBy\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<bool>(\"ShowLastModifiedDate\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<bool>(\"ShowRecentPostsOnDefaultPage\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<bool>(\"ShowRelatedPosts\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"tinyint(1)\")\n                        .HasDefaultValue(true);\n\n                    b.Property<bool>(\"ShowTitle\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<string>(\"SiteName\")\n                        .HasMaxLength(200)\n                        .HasColumnType(\"varchar(200)\");\n\n                    b.Property<byte>(\"TeaserMode\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"tinyint unsigned\")\n                        .HasDefaultValue((byte)0);\n\n                    b.Property<int>(\"TeaserTruncationLength\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"int\")\n                        .HasDefaultValue(20);\n\n                    b.Property<byte>(\"TeaserTruncationMode\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"tinyint unsigned\")\n                        .HasDefaultValue((byte)0);\n\n                    b.Property<string>(\"TimeZoneId\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"varchar(100)\");\n\n                    b.Property<string>(\"Title\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"TwitterCreator\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"varchar(100)\");\n\n                    b.Property<string>(\"TwitterPublisher\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"varchar(100)\");\n\n                    b.Property<bool>(\"UseDefaultPageAsRootNode\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<string>(\"WebmasterEmail\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"varchar(100)\");\n\n                    b.HasKey(\"Id\");\n\n                    b.ToTable(\"cs_ContentProject\", (string)null);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageCategory\", b =>\n                {\n                    b.Property<string>(\"Value\")\n                        .HasMaxLength(50)\n                        .HasColumnType(\"varchar(50)\");\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"varchar(36)\");\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"varchar(50)\");\n\n                    b.HasKey(\"Value\", \"PageEntityId\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.HasIndex(\"Value\");\n\n                    b.ToTable(\"cs_PageCategory\", (string)null);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"varchar(36)\");\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"Content\")\n                        .HasColumnType(\"longtext\");\n\n                    b.Property<string>(\"Email\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"varchar(100)\");\n\n                    b.Property<string>(\"Ip\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"varchar(100)\");\n\n                    b.Property<bool>(\"IsAdmin\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<bool>(\"IsApproved\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"varchar(36)\");\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"varchar(50)\");\n\n                    b.Property<DateTime>(\"PubDate\")\n                        .HasColumnType(\"datetime(6)\");\n\n                    b.Property<string>(\"UserAgent\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"Website\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_PageComment\", (string)null);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"varchar(36)\");\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasMaxLength(500)\n                        .HasColumnType(\"varchar(500)\");\n\n                    b.Property<string>(\"Content\")\n                        .HasColumnType(\"longtext\");\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"varchar(50)\")\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"CreatedByUser\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"varchar(100)\");\n\n                    b.Property<DateTime>(\"CreatedUtc\")\n                        .HasColumnType(\"datetime(6)\");\n\n                    b.Property<bool>(\"DisableEditor\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<string>(\"DraftAuthor\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"DraftContent\")\n                        .HasColumnType(\"longtext\");\n\n                    b.Property<DateTime?>(\"DraftPubDate\")\n                        .HasColumnType(\"datetime(6)\");\n\n                    b.Property<string>(\"DraftSerializedModel\")\n                        .HasColumnType(\"longtext\");\n\n                    b.Property<string>(\"ExternalUrl\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<bool>(\"IsPublished\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<DateTime>(\"LastModified\")\n                        .HasColumnType(\"datetime(6)\");\n\n                    b.Property<string>(\"LastModifiedByUser\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"varchar(100)\");\n\n                    b.Property<string>(\"MenuFilters\")\n                        .HasMaxLength(500)\n                        .HasColumnType(\"varchar(500)\");\n\n                    b.Property<bool>(\"MenuOnly\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasMaxLength(500)\n                        .HasColumnType(\"varchar(500)\");\n\n                    b.Property<string>(\"MetaHtml\")\n                        .HasColumnType(\"longtext\");\n\n                    b.Property<string>(\"MetaJson\")\n                        .HasColumnType(\"longtext\");\n\n                    b.Property<int>(\"PageOrder\")\n                        .HasColumnType(\"int\");\n\n                    b.Property<string>(\"ParentId\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"varchar(36)\");\n\n                    b.Property<string>(\"ParentSlug\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"varchar(50)\");\n\n                    b.Property<DateTime?>(\"PubDate\")\n                        .HasColumnType(\"datetime(6)\");\n\n                    b.Property<string>(\"Script\")\n                        .HasColumnType(\"longtext\");\n\n                    b.Property<string>(\"SerializedModel\")\n                        .HasColumnType(\"longtext\");\n\n                    b.Property<string>(\"Serializer\")\n                        .HasMaxLength(50)\n                        .HasColumnType(\"varchar(50)\");\n\n                    b.Property<bool>(\"ShowCategories\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<bool>(\"ShowComments\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<bool?>(\"ShowCreatedBy\")\n                        .HasColumnType(\"boolean\");\n\n                    b.Property<bool?>(\"ShowCreatedDate\")\n                        .HasColumnType(\"boolean\");\n\n                    b.Property<bool>(\"ShowHeading\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<bool>(\"ShowLastModified\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<bool?>(\"ShowLastModifiedBy\")\n                        .HasColumnType(\"boolean\");\n\n                    b.Property<bool?>(\"ShowLastModifiedDate\")\n                        .HasColumnType(\"boolean\");\n\n                    b.Property<bool>(\"ShowMenu\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<bool>(\"ShowPubDate\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<string>(\"Slug\")\n                        .IsRequired()\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"TemplateKey\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"ViewRoles\")\n                        .HasColumnType(\"longtext\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"ParentId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_Page\", (string)null);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageResourceEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"varchar(36)\");\n\n                    b.Property<string>(\"Environment\")\n                        .IsRequired()\n                        .HasMaxLength(15)\n                        .HasColumnType(\"varchar(15)\");\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"varchar(36)\");\n\n                    b.Property<int>(\"Sort\")\n                        .HasColumnType(\"int\");\n\n                    b.Property<string>(\"Type\")\n                        .IsRequired()\n                        .HasMaxLength(10)\n                        .HasColumnType(\"varchar(10)\");\n\n                    b.Property<string>(\"Url\")\n                        .IsRequired()\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.ToTable(\"cs_PageResource\", (string)null);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostCategory\", b =>\n                {\n                    b.Property<string>(\"Value\")\n                        .HasMaxLength(50)\n                        .HasColumnType(\"varchar(50)\");\n\n                    b.Property<string>(\"PostEntityId\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"varchar(36)\");\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"varchar(50)\");\n\n                    b.HasKey(\"Value\", \"PostEntityId\");\n\n                    b.HasIndex(\"PostEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.HasIndex(\"Value\");\n\n                    b.ToTable(\"cs_PostCategory\", (string)null);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"varchar(36)\");\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"Content\")\n                        .HasColumnType(\"longtext\");\n\n                    b.Property<string>(\"Email\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"varchar(100)\");\n\n                    b.Property<string>(\"Ip\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"varchar(100)\");\n\n                    b.Property<bool>(\"IsAdmin\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<bool>(\"IsApproved\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<string>(\"PostEntityId\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"varchar(36)\");\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"varchar(50)\");\n\n                    b.Property<DateTime>(\"PubDate\")\n                        .HasColumnType(\"datetime(6)\");\n\n                    b.Property<string>(\"UserAgent\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"Website\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PostEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_PostComment\", (string)null);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"varchar(36)\");\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"AutoTeaser\")\n                        .HasColumnType(\"longtext\");\n\n                    b.Property<string>(\"BlogId\")\n                        .IsRequired()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"varchar(50)\");\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasMaxLength(500)\n                        .HasColumnType(\"varchar(500)\");\n\n                    b.Property<string>(\"Content\")\n                        .HasColumnType(\"longtext\");\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"varchar(50)\")\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"CreatedByUser\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"varchar(100)\");\n\n                    b.Property<DateTime>(\"CreatedUtc\")\n                        .HasColumnType(\"datetime(6)\");\n\n                    b.Property<string>(\"DraftAuthor\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"DraftContent\")\n                        .HasColumnType(\"longtext\");\n\n                    b.Property<DateTime?>(\"DraftPubDate\")\n                        .HasColumnType(\"datetime(6)\");\n\n                    b.Property<string>(\"DraftSerializedModel\")\n                        .HasColumnType(\"longtext\");\n\n                    b.Property<string>(\"ImageUrl\")\n                        .HasMaxLength(250)\n                        .HasColumnType(\"varchar(250)\");\n\n                    b.Property<bool>(\"IsFeatured\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<bool>(\"IsPublished\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<DateTime>(\"LastModified\")\n                        .HasColumnType(\"datetime(6)\");\n\n                    b.Property<string>(\"LastModifiedByUser\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"varchar(100)\");\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasMaxLength(500)\n                        .HasColumnType(\"varchar(500)\");\n\n                    b.Property<string>(\"MetaHtml\")\n                        .HasColumnType(\"longtext\");\n\n                    b.Property<string>(\"MetaJson\")\n                        .HasColumnType(\"longtext\");\n\n                    b.Property<DateTime?>(\"PubDate\")\n                        .HasColumnType(\"datetime(6)\");\n\n                    b.Property<string>(\"Script\")\n                        .HasColumnType(\"longtext\");\n\n                    b.Property<string>(\"SerializedModel\")\n                        .HasColumnType(\"longtext\");\n\n                    b.Property<string>(\"Serializer\")\n                        .HasMaxLength(50)\n                        .HasColumnType(\"varchar(50)\");\n\n                    b.Property<ulong>(\"ShowComments\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"Slug\")\n                        .IsRequired()\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<bool>(\"SuppressTeaser\")\n                        .HasColumnType(\"tinyint(1)\");\n\n                    b.Property<string>(\"TeaserOverride\")\n                        .HasColumnType(\"longtext\");\n\n                    b.Property<string>(\"TemplateKey\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.Property<string>(\"ThumbnailUrl\")\n                        .HasMaxLength(250)\n                        .HasColumnType(\"varchar(250)\");\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255)\n                        .HasColumnType(\"varchar(255)\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"BlogId\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"Slug\");\n\n                    b.ToTable(\"cs_Post\", (string)null);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\", null)\n                        .WithMany(\"PageComments\")\n                        .HasForeignKey(\"PageEntityId\")\n                        .OnDelete(DeleteBehavior.Cascade);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageResourceEntity\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\", null)\n                        .WithMany(\"PageResources\")\n                        .HasForeignKey(\"PageEntityId\")\n                        .OnDelete(DeleteBehavior.Cascade);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\", null)\n                        .WithMany(\"PostComments\")\n                        .HasForeignKey(\"PostEntityId\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\", b =>\n                {\n                    b.Navigation(\"PageComments\");\n\n                    b.Navigation(\"PageResources\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\", b =>\n                {\n                    b.Navigation(\"PostComments\");\n                });\n#pragma warning restore 612, 618\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.MySQL/README.md",
    "content": "﻿# cloudscribe.SimpleContent.Storage.EFCore.MySql\n\n## Dev Notes\n\n### How to generate migrations\n\nopen a command/powershell window on the project folder\n\nSince this project is a netstandard20 class library it is not executable, therefore you have to pass in the --startup-project that is executable\n\ndotnet ef --startup-project ../sourceDev.WebApp migrations add  --context cloudscribe.SimpleContent.Storage.EFCore.MySql.SimpleContentDbContext simplecontent-yyyymmdd\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.MySQL/ServiceCollectionExtensions.cs",
    "content": "﻿// Copyright (c) Source Tree Solutions, LLC. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.\n// Author:\t\t\t\t\tJoe Audette\n// Created:\t\t\t\t\t2016-09-02\n// Last Modified:\t\t\t2018-10-09\n// \n\nusing cloudscribe.SimpleContent.Models;\nusing cloudscribe.SimpleContent.Storage.EFCore.Common;\nusing cloudscribe.SimpleContent.Storage.EFCore.MySQL;\nusing Microsoft.EntityFrameworkCore;\nusing System;\nusing System.Collections.Generic;\n\nnamespace Microsoft.Extensions.DependencyInjection\n{\n    public static class SimpleContentEFMSSQLServiceCollectionExtensions\n    {\n\n        public static IServiceCollection AddCloudscribeSimpleContentEFStorageMySQL(\n            this IServiceCollection services,\n            string connectionString,\n            int maxConnectionRetryCount = 0,\n            int maxConnectionRetryDelaySeconds = 30,\n            ICollection<int> transientSqlErrorNumbersToAdd = null\n            )\n        {\n           \n            services.AddEntityFrameworkMySql()\n                .AddDbContext<SimpleContentDbContext>(optionsBuilder =>\n                    optionsBuilder.UseMySql(connectionString, ServerVersion.AutoDetect(connectionString), // breaking change in Net5.0\n                    mySqlOptionsAction: sqlOptions =>\n                    {\n                        if (maxConnectionRetryCount > 0)\n                        {\n                            //Configuring Connection Resiliency: https://docs.microsoft.com/en-us/ef/core/miscellaneous/connection-resiliency \n                            sqlOptions.EnableRetryOnFailure(\n                                maxRetryCount: maxConnectionRetryCount,\n                                maxRetryDelay: TimeSpan.FromSeconds(maxConnectionRetryDelaySeconds),\n                                errorNumbersToAdd: transientSqlErrorNumbersToAdd);\n                        }\n\n\n                    }),\n                     optionsLifetime: ServiceLifetime.Singleton\n                    );\n\n\n            services.AddSingleton<ISimpleContentDbContextFactory, SimpleContentDbContextFactory>();\n\n            services.AddScoped<ISimpleContentDbContext, SimpleContentDbContext>();\n\n            services.AddCloudscribeSimpleContentEFStorageCommon();\n            services.AddScoped<IStorageInfo, StorageInfo>();\n\n            return services;\n        }\n\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.MySQL/SimpleContentDbContext.cs",
    "content": "﻿// Copyright (c) Source Tree Solutions, LLC. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.\n// Author:\t\t\t\t\tJoe Audette\n// Created:\t\t\t\t\t2016-11-10\n// Last Modified:\t\t\t2019-03-12\n// \n\nusing cloudscribe.SimpleContent.Models;\nusing cloudscribe.SimpleContent.Storage.EFCore.Common;\nusing cloudscribe.SimpleContent.Storage.EFCore.Models;\nusing Microsoft.EntityFrameworkCore;\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.MySQL\n{\n    public class SimpleContentDbContext : SimpleContentDbContextBase, ISimpleContentDbContext\n    {\n        public SimpleContentDbContext(DbContextOptions<SimpleContentDbContext> options):base(options)\n        {\n\n        }\n\n        protected SimpleContentDbContext() { }\n\n        protected override void OnModelCreating(ModelBuilder modelBuilder)\n        {\n            base.OnModelCreating(modelBuilder);\n\n           \n            modelBuilder.Entity<ProjectSettings>(entity =>\n            {\n                entity.ToTable(\"cs_ContentProject\");\n\n                entity.HasKey(p => p.Id);\n\n                entity.Property(p => p.Id)\n                .HasMaxLength(50)\n                ;\n\n                entity.Property(p => p.Title)\n                .HasMaxLength(255)\n                ;\n\n                entity.Property(p => p.Publisher)\n                .HasMaxLength(255)\n                ;\n\n                entity.Property(p => p.PublisherLogoUrl)\n                .HasMaxLength(255)\n                ;\n\n                entity.Property(p => p.CopyrightNotice)\n                .HasMaxLength(255)\n                ;\n\n                entity.Property(p => p.ModerateComments)\n                .IsRequired()\n                ;\n\n                entity.Property(p => p.CommentNotificationEmail)\n                .HasMaxLength(100)\n                ;\n\n                entity.Property(p => p.BlogMenuLinksToNewestPost)\n                .IsRequired()\n                ;\n\n                entity.Property(p => p.LocalMediaVirtualPath)\n                .HasMaxLength(255)\n                ;\n\n                entity.Property(p => p.CdnUrl)\n                .HasMaxLength(255)\n                ;\n\n                entity.Property(p => p.PubDateFormat)\n                .HasMaxLength(75)\n                ;\n\n                entity.Property(p => p.IncludePubDateInPostUrls)\n                .IsRequired()\n                ;\n\n                entity.Property(p => p.TimeZoneId)\n                .HasMaxLength(100)\n                ;\n\n                entity.Property(p => p.RecaptchaPrivateKey)\n                .HasMaxLength(255)\n                ;\n\n                entity.Property(p => p.RecaptchaPublicKey)\n                .HasMaxLength(255)\n                ;\n\n                entity.Property(p => p.DefaultPageSlug)\n                .HasMaxLength(255)\n                ;\n\n                entity.Property(p => p.UseDefaultPageAsRootNode)\n                .IsRequired()\n                ;\n\n                entity.Property(p => p.ShowTitle)\n                .IsRequired()\n                ;\n\n                entity.Property(p => p.AddBlogToPagesTree)\n                .IsRequired()\n                ;\n\n                entity.Property(p => p.BlogPageText)\n                .HasMaxLength(255)\n                ;\n\n                entity.Property(p => p.BlogPageNavComponentVisibility)\n                .HasMaxLength(255)\n                ;\n\n                entity.Property(p => p.Image)\n                .HasMaxLength(255)\n                ;\n\n                //entity.Property(p => p.UseMetaDescriptionInFeed)\n                //.IsRequired()\n                //;\n\n                entity.Property(p => p.LanguageCode)\n               .HasMaxLength(10)\n               ;\n\n                entity.Property(p => p.ChannelCategoriesCsv)\n                .HasMaxLength(255)\n                ;\n\n                entity.Property(p => p.ManagingEditorEmail)\n                .HasMaxLength(100)\n                ;\n\n                entity.Property(p => p.ChannelRating)\n                .HasMaxLength(100)\n                ;\n\n                entity.Property(p => p.WebmasterEmail)\n                .HasMaxLength(100)\n                ;\n\n                entity.Property(p => p.RemoteFeedUrl)\n                .HasMaxLength(255)\n                ;\n\n                entity.Property(p => p.RemoteFeedProcessorUseAgentFragment)\n                .HasMaxLength(255)\n                ;\n\n                //entity.Property(p => p.EmailFromAddress)\n                //.HasMaxLength(100)\n                //;\n\n                //entity.Property(p => p.SmtpServer)\n                //.HasMaxLength(100)\n                //;\n\n                //entity.Property(p => p.SmtpPort)\n                //;\n\n                //entity.Property(p => p.SmtpUser)\n                //.HasMaxLength(500)\n                //;\n\n                //entity.Property(p => p.SmtpPassword)\n                //;\n\n                //entity.Property(p => p.SmtpPreferredEncoding)\n                //.HasMaxLength(20);\n                //;\n\n                //entity.Property(p => p.SmtpRequiresAuth)\n                //.IsRequired()\n                //;\n\n                //entity.Property(p => p.SmtpUseSsl)\n                //.IsRequired()\n                //;\n\n                entity.Property(p => p.PublisherLogoWidth)\n                .HasMaxLength(20)\n                ;\n\n                entity.Property(p => p.PublisherLogoHeight)\n                .HasMaxLength(20)\n                ;\n\n                entity.Property(p => p.PublisherEntityType)\n                .HasMaxLength(50)\n                ;\n\n                entity.Property(p => p.DisqusShortName)\n                .HasMaxLength(100)\n                ;\n\n                entity.Property(p => p.ShowRecentPostsOnDefaultPage)\n                .IsRequired();\n\n                entity.Property(p => p.ShowFeaturedPostsOnDefaultPage)\n                .IsRequired();\n\n                entity.Property(p => p.FacebookAppId).HasMaxLength(100);\n                entity.Property(p => p.SiteName).HasMaxLength(200);\n                entity.Property(p => p.TwitterCreator).HasMaxLength(100);\n                entity.Property(p => p.TwitterPublisher).HasMaxLength(100);\n\n                entity.Property(p => p.DefaultContentType)\n                .HasMaxLength(50)\n                .HasDefaultValue(\"html\")\n                ;\n\n                entity.Property(p => p.TeaserMode)\n                .HasDefaultValue(TeaserMode.Off);\n\n                entity.Property(p => p.TeaserTruncationMode)\n                .HasDefaultValue(TeaserTruncationMode.Word);\n\n                entity.Property(p => p.TeaserTruncationLength)\n                .HasDefaultValue(20);\n\n                entity.Property(p => p.DefaultFeedItems)\n                .HasDefaultValue(20);\n\n                entity.Property(p => p.MaxFeedItems)\n                .HasDefaultValue(1000);\n\n                entity.Property(p => p.AboutHeading).HasMaxLength(255);\n                entity.Property(p => p.ShowAboutBox).HasDefaultValue(true);\n                entity.Property(p => p.ShowRelatedPosts).HasDefaultValue(true);\n                entity.Property(p => p.ShowArchivedPosts).HasDefaultValue(true);\n                entity.Property(p => p.ShowBlogCategories).HasDefaultValue(true);\n            });\n\n            modelBuilder.Entity<PostEntity>(entity =>\n            {\n                entity.ToTable(\"cs_Post\");\n\n                entity.HasKey(p => p.Id);\n\n                entity.Property(p => p.Id)\n                .HasMaxLength(36)\n                ;\n\n                entity.Property(p => p.CorrelationKey)\n                .HasMaxLength(255)\n                ;\n\n                entity.HasIndex(p => p.CorrelationKey);\n\n                entity.Property(p => p.BlogId)\n                .HasMaxLength(50)\n                .IsRequired()\n                ;\n                entity.HasIndex(p => p.BlogId);\n\n                entity.Property(p => p.Title)\n                .HasMaxLength(255)\n                .IsRequired()\n                ;\n\n                entity.Property(p => p.Author)\n                .HasMaxLength(255)\n                ;\n\n                entity.Property(p => p.Slug)\n                .HasMaxLength(255)\n                .IsRequired()\n                ;\n                entity.HasIndex(p => p.Slug);\n\n                entity.Property(p => p.MetaDescription)\n                .HasMaxLength(500)\n                ;\n\n                entity.Property(p => p.IsPublished)\n                .IsRequired()\n                ;\n\n                entity.Ignore(p => p.Categories);\n\n                entity.Property(p => p.CategoriesCsv)\n                .HasMaxLength(500)\n                ;\n\n                entity.Ignore(p => p.Comments);\n\n                entity.HasMany(p => p.PostComments)\n                    .WithOne();\n\n                entity.Property(p => p.ImageUrl)\n                .HasMaxLength(250);\n\n                entity.Property(p => p.ThumbnailUrl)\n                .HasMaxLength(250);\n\n                entity.Property(p => p.ShowComments)\n                    .IsRequired()\n                    .HasColumnType(\"bit\");\n\n                entity.Property(p => p.IsFeatured)\n                .IsRequired();\n\n                entity.Property(p => p.ContentType)\n               .HasMaxLength(50)\n               .HasDefaultValue(\"html\")\n               ;\n\n                entity.Property(p => p.TemplateKey)\n                  .HasMaxLength(255);\n\n                entity.Property(p => p.Serializer)\n                  .HasMaxLength(50);\n\n                entity.Property(p => p.CreatedByUser)\n                  .HasMaxLength(100);\n\n                entity.Property(p => p.LastModifiedByUser)\n                  .HasMaxLength(100);\n\n                entity.Property(p => p.DraftAuthor)\n                .HasMaxLength(255);\n\n\n            });\n\n            modelBuilder.Entity<PostComment>(entity =>\n            {\n                entity.ToTable(\"cs_PostComment\");\n\n                entity.HasKey(p => p.Id);\n                entity.Property(p => p.Id)\n                .HasMaxLength(36)\n                ;\n\n                entity.Ignore(p => p.ContentId); //mapped from postid\n\n                entity.Property(p => p.PostEntityId)\n                .HasMaxLength(36)\n                //.IsRequired()\n                ;\n                entity.HasIndex(p => p.PostEntityId);\n\n                entity.Property(p => p.ProjectId)\n                .HasMaxLength(50)\n                .IsRequired()\n                ;\n                entity.HasIndex(p => p.ProjectId);\n\n                entity.Property(p => p.Author)\n               .HasMaxLength(255)\n               ;\n\n                entity.Property(p => p.Email)\n               .HasMaxLength(100)\n               ;\n\n                entity.Property(p => p.Website)\n               .HasMaxLength(255)\n               ;\n\n                entity.Property(p => p.Ip)\n               .HasMaxLength(100)\n               ;\n\n                entity.Property(p => p.UserAgent)\n               .HasMaxLength(255)\n               ;\n            });\n\n            modelBuilder.Entity<PostCategory>(entity =>\n            {\n                entity.ToTable(\"cs_PostCategory\");\n\n                entity.HasKey(p => new { p.Value, p.PostEntityId });\n\n                entity.Property(p => p.Value)\n                .HasMaxLength(50)\n                .IsRequired()\n                ;\n\n                entity.HasIndex(p => p.Value);\n\n                entity.Property(p => p.PostEntityId)\n                .HasMaxLength(36)\n                .IsRequired()\n                ;\n                entity.HasIndex(p => p.PostEntityId);\n\n                entity.Property(p => p.ProjectId)\n                .HasMaxLength(50)\n                .IsRequired()\n                ;\n                entity.HasIndex(p => p.ProjectId);\n            });\n\n            modelBuilder.Entity<PageEntity>(entity =>\n            {\n                entity.ToTable(\"cs_Page\");\n\n                entity.HasKey(p => p.Id);\n                entity.Property(p => p.Id)\n                .HasMaxLength(36)\n                ;\n\n                entity.Property(p => p.ProjectId)\n                .HasMaxLength(50)\n                .IsRequired()\n                ;\n                entity.HasIndex(p => p.ProjectId);\n\n                entity.Property(p => p.CorrelationKey)\n                .HasMaxLength(255)\n                ;\n\n                entity.HasIndex(p => p.CorrelationKey);\n\n                entity.Property(p => p.Title)\n                .HasMaxLength(255)\n                .IsRequired()\n                ;\n\n                entity.Property(p => p.ParentId)\n                .HasMaxLength(36)\n                ;\n                entity.HasIndex(p => p.ParentId);\n\n                entity.Property(p => p.ParentSlug)\n                .HasMaxLength(255)\n                ;\n\n                entity.Property(p => p.Author)\n               .HasMaxLength(255)\n               ;\n\n                entity.Property(p => p.Slug)\n                .HasMaxLength(255)\n                .IsRequired()\n                ;\n\n                entity.Property(p => p.ExternalUrl)\n                .HasMaxLength(255)\n                ;\n\n                entity.Property(p => p.MetaDescription)\n                .HasMaxLength(500)\n                ;\n\n                entity.Property(p => p.IsPublished)\n                .IsRequired()\n                //.HasDefaultValue(true)\n                ;\n\n                entity.Property(p => p.MenuOnly)\n                .IsRequired()\n                //.HasDefaultValue(false)\n                ;\n\n                entity.Property(p => p.ShowMenu)\n                .IsRequired()\n                //.HasDefaultValue(false)\n                ;\n\n                entity.Property(p => p.ShowHeading)\n                .IsRequired()\n                //.HasDefaultValue(true)\n                ;\n\n                entity.Property(p => p.ShowPubDate)\n                .IsRequired()\n                //.HasDefaultValue(false)\n                ;\n\n                entity.Property(p => p.ShowLastModified)\n                .IsRequired()\n                //.HasDefaultValue(false)\n                ;\n\n                entity.Property(p => p.ShowCategories)\n                .IsRequired()\n                //.HasDefaultValue(false)\n                ;\n\n                entity.Property(p => p.ShowComments)\n                .IsRequired()\n                //.HasDefaultValue(false)\n                ;\n\n                entity.Property(p => p.MenuFilters)\n               .HasMaxLength(500)\n               ;\n\n                entity.Ignore(p => p.Categories);\n\n                entity.Property(p => p.CategoriesCsv)\n                .HasMaxLength(500)\n                ;\n\n                entity.Ignore(p => p.Comments);\n\n                entity.HasMany(p => p.PageComments)\n                    .WithOne().OnDelete(DeleteBehavior.Cascade);\n\n                // a shadow property to persist the categories/tags as a csv\n                //entity.Property<string>(\"CategoryCsv\");\n\n                entity.Ignore(p => p.Resources);\n\n                entity.HasMany(p => p.PageResources)\n                    .WithOne().OnDelete(DeleteBehavior.Cascade);\n\n                entity.Property(p => p.DisableEditor)\n                  .IsRequired();\n\n                entity.Property(p => p.ContentType)\n               .HasMaxLength(50)\n               .HasDefaultValue(\"html\")\n               ;\n\n                entity.Property(p => p.TemplateKey)\n                  .HasMaxLength(255);\n\n                entity.Property(p => p.Serializer)\n                  .HasMaxLength(50);\n\n                entity.Property(p => p.CreatedByUser)\n                  .HasMaxLength(100);\n\n                entity.Property(p => p.LastModifiedByUser)\n                  .HasMaxLength(100);\n\n                entity.Property(p => p.DraftAuthor)\n                .HasMaxLength(255);\n\n                entity.Property(p => p.ShowCreatedBy).HasColumnType(\"boolean\");\n                entity.Property(p => p.ShowCreatedDate).HasColumnType(\"boolean\");\n                entity.Property(p => p.ShowLastModifiedBy).HasColumnType(\"boolean\");\n                entity.Property(p => p.ShowLastModifiedDate).HasColumnType(\"boolean\");\n            });\n\n            modelBuilder.Entity<PageComment>(entity =>\n            {\n                entity.ToTable(\"cs_PageComment\");\n\n                entity.HasKey(p => p.Id);\n                entity.Property(p => p.Id)\n                .HasMaxLength(36)\n                ;\n\n                entity.Ignore(p => p.ContentId); //mapped from postid\n\n                entity.Property(p => p.PageEntityId)\n                .HasMaxLength(36)\n                //.IsRequired()\n                ;\n                entity.HasIndex(p => p.PageEntityId);\n\n                entity.Property(p => p.ProjectId)\n                .HasMaxLength(50)\n                .IsRequired()\n                ;\n                entity.HasIndex(p => p.ProjectId);\n\n                entity.Property(p => p.Author)\n               .HasMaxLength(255)\n               ;\n\n                entity.Property(p => p.Email)\n               .HasMaxLength(100)\n               ;\n\n                entity.Property(p => p.Website)\n               .HasMaxLength(255)\n               ;\n\n                entity.Property(p => p.Ip)\n               .HasMaxLength(100)\n               ;\n\n                entity.Property(p => p.UserAgent)\n               .HasMaxLength(255)\n               ;\n            });\n\n            modelBuilder.Entity<PageCategory>(entity =>\n            {\n                entity.ToTable(\"cs_PageCategory\");\n\n                entity.HasKey(p => new { p.Value, p.PageEntityId });\n\n                entity.Property(p => p.Value)\n                .HasMaxLength(50)\n                .IsRequired()\n                ;\n\n                entity.HasIndex(p => p.Value);\n\n                entity.Property(p => p.PageEntityId)\n                .HasMaxLength(36)\n                .IsRequired()\n                ;\n                entity.HasIndex(p => p.PageEntityId);\n\n                entity.Property(p => p.ProjectId)\n                .HasMaxLength(50)\n                .IsRequired()\n                ;\n                entity.HasIndex(p => p.ProjectId);\n            });\n\n            modelBuilder.Entity<PageResourceEntity>(entity =>\n            {\n                entity.ToTable(\"cs_PageResource\");\n\n                entity.HasKey(p => p.Id);\n                entity.Property(p => p.Id)\n                .HasMaxLength(36)\n                ;\n\n                entity.Ignore(p => p.ContentId); //mapped from pageEntityid\n\n                entity.Property(p => p.PageEntityId)\n                .HasMaxLength(36)\n                //.IsRequired()\n                ;\n                entity.HasIndex(p => p.PageEntityId);\n\n                entity.Property(p => p.Environment)\n                .HasMaxLength(15)\n                .IsRequired()\n                ;\n\n\n                entity.Property(p => p.Sort)\n               .IsRequired()\n               ;\n\n                entity.Property(p => p.Type)\n               .HasMaxLength(10)\n               .IsRequired()\n               ;\n\n                entity.Property(p => p.Url)\n               .HasMaxLength(255)\n               .IsRequired()\n               ;\n\n\n            });\n\n            modelBuilder.Entity<ContentHistory>(entity =>\n            {\n                entity.ToTable(\"cs_ContentHistory\");\n\n                entity.HasKey(p => p.Id);\n\n                entity.Property(p => p.Id).HasMaxLength(36);\n\n                entity.Property(p => p.ProjectId).HasMaxLength(50);\n\n                entity.Property(p => p.CorrelationKey).HasMaxLength(255);\n\n                entity.HasIndex(p => p.CorrelationKey);\n\n                entity.Property(p => p.ContentId)\n                .HasMaxLength(36)\n                .IsRequired();\n\n                entity.HasIndex(p => p.ContentId);\n\n                entity.Property(p => p.Title)\n                .HasMaxLength(255)\n                .IsRequired();\n\n                entity.HasIndex(p => p.Title);\n\n                entity.Property(p => p.Slug)\n                .HasMaxLength(255);\n\n                entity.Property(p => p.Author)\n                .HasMaxLength(255);\n\n                entity.Property(p => p.IsPublished)\n                .IsRequired();\n\n                entity.Property(p => p.ContentType)\n                   .HasMaxLength(50)\n                   .HasDefaultValue(\"html\");\n\n                entity.Property(p => p.CreatedByUser)\n                  .HasMaxLength(100);\n\n                entity.HasIndex(p => p.CreatedByUser);\n\n                entity.Property(p => p.LastModifiedByUser)\n                  .HasMaxLength(100);\n\n                entity.HasIndex(p => p.LastModifiedByUser);\n\n                entity.Property(p => p.DraftAuthor)\n                .HasMaxLength(255);\n\n                entity.Property(p => p.ContentSource)\n                .HasMaxLength(50)\n                .IsRequired();\n\n                entity.HasIndex(p => p.ContentSource);\n\n                entity.Property(p => p.DraftAuthor)\n                .HasMaxLength(255);\n\n                entity.Property(p => p.ArchivedBy)\n                .HasMaxLength(255);\n\n                entity.Property(p => p.ParentSlug).HasMaxLength(255);\n                entity.Property(p => p.ParentId).HasMaxLength(255);\n                entity.Property(p => p.TemplateKey).HasMaxLength(255);\n                entity.Property(p => p.Serializer).HasMaxLength(50);\n\n\n            });\n\n\n        }\n\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.MySQL/SimpleContentDbContextDesignTimeFactory.cs",
    "content": "﻿using Microsoft.EntityFrameworkCore;\nusing Microsoft.EntityFrameworkCore.Design;\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.MySQL\n{\n    public class SimpleContentDbContextDesignTimeFactory : IDesignTimeDbContextFactory<SimpleContentDbContext>\n    {\n        public SimpleContentDbContext CreateDbContext(string[] args)\n        {\n            var builder = new DbContextOptionsBuilder<SimpleContentDbContext>();\n            var conn = \"Server=yourserver;Database=yourdb;Uid=youruser;Pwd=yourpassword;Charset=utf8;\";\n            builder.UseMySql(conn, ServerVersion.AutoDetect(conn)); // breaking change in Net5.0\n\n            return new SimpleContentDbContext(builder.Options);\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.MySQL/SimpleContentDbContextFactory.cs",
    "content": "﻿using cloudscribe.SimpleContent.Storage.EFCore.Common;\nusing Microsoft.EntityFrameworkCore;\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.MySQL\n{\n    public class SimpleContentDbContextFactory : ISimpleContentDbContextFactory\n    {\n        public SimpleContentDbContextFactory(DbContextOptions<SimpleContentDbContext> options)\n        {\n            _options = options;\n        }\n\n        private readonly DbContextOptions<SimpleContentDbContext> _options;\n\n        public ISimpleContentDbContext CreateContext()\n        {\n            return new SimpleContentDbContext(_options);\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.MySQL/StorageInfo.cs",
    "content": "﻿using cloudscribe.SimpleContent.Models;\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.MySQL\n{\n    public class StorageInfo : IStorageInfo\n    {\n        public string StoragePlatform { get { return \"Entity Framework with MySql\"; } }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.MySQL/cloudscribe.SimpleContent.Storage.EFCore.MySQL.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <Description>MySQL Entity Framework Core implementation of cloudscribe SimpleContent commands and queries</Description>\n    <Version>10.1.0</Version>\n    <TargetFramework>net10.0</TargetFramework>\n    <!-- Suppress intentional package downgrade warnings for MySQL compatibility -->\n    <NoWarn>$(NoWarn);NU1605;NU1701</NoWarn>\n    <Authors>Joe Audette</Authors>\n    <PackageTags>cloudscribe;commands;queries;ef</PackageTags>\n    <PackageIcon>icon.png</PackageIcon>\n    <PackageProjectUrl>https://github.com/cloudscribe/cloudscribe.SimpleContent</PackageProjectUrl>\n    <PackageLicenseExpression>Apache-2.0</PackageLicenseExpression>\n    <RepositoryUrl>https://github.com/cloudscribe/cloudscribe.SimpleContent.git</RepositoryUrl>\n    <RepositoryType>git</RepositoryType>\n\n    <PackageReadmeFile>README.md</PackageReadmeFile>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <None Include=\"icon.png\" Pack=\"true\" PackagePath=\"\\\"/>\n  </ItemGroup>\n\n  <ItemGroup>\n    <ProjectReference Include=\"..\\cloudscribe.SimpleContent.Models\\cloudscribe.SimpleContent.Models.csproj\" />\n    <ProjectReference Include=\"..\\cloudscribe.SimpleContent.Storage.EFCore.Common\\cloudscribe.SimpleContent.Storage.EFCore.Common.csproj\" />\n\n  </ItemGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"Microsoft.EntityFrameworkCore.Design\" Version=\"10.0.0\" />\n    <PackageReference Include=\"Pomelo.EntityFrameworkCore.MySql\" Version=\"9.0.0\" />\n    <!-- Explicit EF Core 10.x references to override Pomelo 9.x constraints -->\n    <PackageReference Include=\"Microsoft.EntityFrameworkCore\" Version=\"10.0.0\" />\n    <PackageReference Include=\"Microsoft.EntityFrameworkCore.Relational\" Version=\"10.0.0\" />\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"README.md\" Pack=\"true\" PackagePath=\"/\" />\n  </ItemGroup>\n</Project>\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.PostgreSql/DesignTimeFactory.cs",
    "content": "﻿using Microsoft.EntityFrameworkCore;\nusing Microsoft.EntityFrameworkCore.Design;\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.PostgreSql\n{\n    public class DesignTimeFactory : IDesignTimeDbContextFactory<SimpleContentDbContext>\n    {\n        public SimpleContentDbContext CreateDbContext(string[] args)\n        {\n            var builder = new DbContextOptionsBuilder<SimpleContentDbContext>();\n            builder.UseNpgsql(\"server=yourservername;UID=yourdatabaseusername;PWD=yourdatabaseuserpassword;database=yourdatabasename\");\n\n            return new SimpleContentDbContext(builder.Options);\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.PostgreSql/Migrations/20181009120713_simplecontent-initial.Designer.cs",
    "content": "﻿// <auto-generated />\nusing System;\nusing Microsoft.EntityFrameworkCore;\nusing Microsoft.EntityFrameworkCore.Infrastructure;\nusing Microsoft.EntityFrameworkCore.Migrations;\nusing Microsoft.EntityFrameworkCore.Storage.ValueConversion;\nusing Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;\nusing cloudscribe.SimpleContent.Models;\nusing cloudscribe.SimpleContent.Storage.EFCore.PostgreSql;\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.PostgreSql.Migrations\n{\n    [DbContext(typeof(SimpleContentDbContext))]\n    [Migration(\"20181009120713_simplecontent-initial\")]\n    partial class simplecontentinitial\n    {\n        protected override void BuildTargetModel(ModelBuilder modelBuilder)\n        {\n#pragma warning disable 612, 618\n            modelBuilder\n                .HasAnnotation(\"Npgsql:ValueGenerationStrategy\", NpgsqlValueGenerationStrategy.SerialColumn)\n                .HasAnnotation(\"ProductVersion\", \"2.1.3-rtm-32065\")\n                .HasAnnotation(\"Relational:MaxIdentifierLength\", 63);\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Models.ContentHistory\", b =>\n                {\n                    b.Property<Guid>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnName(\"id\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ArchivedBy\")\n                        .HasColumnName(\"archived_by\")\n                        .HasMaxLength(255);\n\n                    b.Property<DateTime>(\"ArchivedUtc\")\n                        .HasColumnName(\"archived_utc\");\n\n                    b.Property<string>(\"Author\")\n                        .HasColumnName(\"author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasColumnName(\"categories_csv\");\n\n                    b.Property<string>(\"Content\")\n                        .HasColumnName(\"content\");\n\n                    b.Property<string>(\"ContentId\")\n                        .IsRequired()\n                        .HasColumnName(\"content_id\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ContentSource\")\n                        .IsRequired()\n                        .HasColumnName(\"content_source\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnName(\"content_type\")\n                        .HasMaxLength(50)\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasColumnName(\"correlation_key\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CreatedByUser\")\n                        .HasColumnName(\"created_by_user\")\n                        .HasMaxLength(100);\n\n                    b.Property<DateTime>(\"CreatedUtc\")\n                        .HasColumnName(\"created_utc\");\n\n                    b.Property<string>(\"DraftAuthor\")\n                        .HasColumnName(\"draft_author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"DraftContent\")\n                        .HasColumnName(\"draft_content\");\n\n                    b.Property<DateTime?>(\"DraftPubDate\")\n                        .HasColumnName(\"draft_pub_date\");\n\n                    b.Property<string>(\"DraftSerializedModel\")\n                        .HasColumnName(\"draft_serialized_model\");\n\n                    b.Property<bool>(\"IsDraftHx\")\n                        .HasColumnName(\"is_draft_hx\");\n\n                    b.Property<bool>(\"IsPublished\")\n                        .HasColumnName(\"is_published\");\n\n                    b.Property<DateTime>(\"LastModified\")\n                        .HasColumnName(\"last_modified\");\n\n                    b.Property<string>(\"LastModifiedByUser\")\n                        .HasColumnName(\"last_modified_by_user\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasColumnName(\"meta_description\");\n\n                    b.Property<string>(\"MetaHtml\")\n                        .HasColumnName(\"meta_html\");\n\n                    b.Property<string>(\"MetaJson\")\n                        .HasColumnName(\"meta_json\");\n\n                    b.Property<int>(\"PageOrder\")\n                        .HasColumnName(\"page_order\");\n\n                    b.Property<string>(\"ParentId\")\n                        .HasColumnName(\"parent_id\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ParentSlug\")\n                        .HasColumnName(\"parent_slug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ProjectId\")\n                        .HasColumnName(\"project_id\");\n\n                    b.Property<DateTime?>(\"PubDate\")\n                        .HasColumnName(\"pub_date\");\n\n                    b.Property<string>(\"SerializedModel\")\n                        .HasColumnName(\"serialized_model\");\n\n                    b.Property<string>(\"Serializer\")\n                        .HasColumnName(\"serializer\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"Slug\")\n                        .HasColumnName(\"slug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"TeaserOverride\")\n                        .HasColumnName(\"teaser_override\");\n\n                    b.Property<string>(\"TemplateKey\")\n                        .HasColumnName(\"template_key\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasColumnName(\"title\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ViewRoles\")\n                        .HasColumnName(\"view_roles\");\n\n                    b.Property<bool>(\"WasDeleted\")\n                        .HasColumnName(\"was_deleted\");\n\n                    b.HasKey(\"Id\")\n                        .HasName(\"pk_cs_content_history\");\n\n                    b.HasIndex(\"ContentId\")\n                        .HasName(\"ix_cs_content_history_content_id\");\n\n                    b.HasIndex(\"ContentSource\")\n                        .HasName(\"ix_cs_content_history_content_source\");\n\n                    b.HasIndex(\"CorrelationKey\")\n                        .HasName(\"ix_cs_content_history_correlation_key\");\n\n                    b.HasIndex(\"CreatedByUser\")\n                        .HasName(\"ix_cs_content_history_created_by_user\");\n\n                    b.HasIndex(\"LastModifiedByUser\")\n                        .HasName(\"ix_cs_content_history_last_modified_by_user\");\n\n                    b.HasIndex(\"Title\")\n                        .HasName(\"ix_cs_content_history_title\");\n\n                    b.ToTable(\"cs_content_history\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Models.ProjectSettings\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnName(\"id\")\n                        .HasMaxLength(36);\n\n                    b.Property<bool>(\"AddBlogToPagesTree\")\n                        .HasColumnName(\"add_blog_to_pages_tree\");\n\n                    b.Property<bool>(\"BlogMenuLinksToNewestPost\")\n                        .HasColumnName(\"blog_menu_links_to_newest_post\");\n\n                    b.Property<string>(\"BlogPageNavComponentVisibility\")\n                        .HasColumnName(\"blog_page_nav_component_visibility\")\n                        .HasMaxLength(255);\n\n                    b.Property<int>(\"BlogPagePosition\")\n                        .HasColumnName(\"blog_page_position\");\n\n                    b.Property<string>(\"BlogPageText\")\n                        .HasColumnName(\"blog_page_text\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CdnUrl\")\n                        .HasColumnName(\"cdn_url\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ChannelCategoriesCsv\")\n                        .HasColumnName(\"channel_categories_csv\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ChannelRating\")\n                        .HasColumnName(\"channel_rating\")\n                        .HasMaxLength(100);\n\n                    b.Property<int>(\"ChannelTimeToLive\")\n                        .HasColumnName(\"channel_time_to_live\");\n\n                    b.Property<string>(\"CommentNotificationEmail\")\n                        .HasColumnName(\"comment_notification_email\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"CopyrightNotice\")\n                        .HasColumnName(\"copyright_notice\")\n                        .HasMaxLength(255);\n\n                    b.Property<int>(\"DaysToComment\")\n                        .HasColumnName(\"days_to_comment\");\n\n                    b.Property<string>(\"DefaultContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnName(\"default_content_type\")\n                        .HasMaxLength(50)\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<int>(\"DefaultFeedItems\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnName(\"default_feed_items\")\n                        .HasDefaultValue(20);\n\n                    b.Property<string>(\"DefaultPageSlug\")\n                        .HasColumnName(\"default_page_slug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Description\")\n                        .HasColumnName(\"description\");\n\n                    b.Property<string>(\"DisqusShortName\")\n                        .HasColumnName(\"disqus_short_name\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"FacebookAppId\")\n                        .HasColumnName(\"facebook_app_id\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Image\")\n                        .HasColumnName(\"image\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"IncludePubDateInPostUrls\")\n                        .HasColumnName(\"include_pub_date_in_post_urls\");\n\n                    b.Property<string>(\"LanguageCode\")\n                        .HasColumnName(\"language_code\")\n                        .HasMaxLength(10);\n\n                    b.Property<string>(\"LocalMediaVirtualPath\")\n                        .HasColumnName(\"local_media_virtual_path\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ManagingEditorEmail\")\n                        .HasColumnName(\"managing_editor_email\")\n                        .HasMaxLength(100);\n\n                    b.Property<int>(\"MaxFeedItems\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnName(\"max_feed_items\")\n                        .HasDefaultValue(1000);\n\n                    b.Property<bool>(\"ModerateComments\")\n                        .HasColumnName(\"moderate_comments\");\n\n                    b.Property<int>(\"PostsPerPage\")\n                        .HasColumnName(\"posts_per_page\");\n\n                    b.Property<string>(\"PubDateFormat\")\n                        .HasColumnName(\"pub_date_format\")\n                        .HasMaxLength(75);\n\n                    b.Property<string>(\"Publisher\")\n                        .HasColumnName(\"publisher\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"PublisherEntityType\")\n                        .HasColumnName(\"publisher_entity_type\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PublisherLogoHeight\")\n                        .HasColumnName(\"publisher_logo_height\")\n                        .HasMaxLength(20);\n\n                    b.Property<string>(\"PublisherLogoUrl\")\n                        .HasColumnName(\"publisher_logo_url\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"PublisherLogoWidth\")\n                        .HasColumnName(\"publisher_logo_width\")\n                        .HasMaxLength(20);\n\n                    b.Property<string>(\"RecaptchaPrivateKey\")\n                        .HasColumnName(\"recaptcha_private_key\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RecaptchaPublicKey\")\n                        .HasColumnName(\"recaptcha_public_key\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RemoteFeedProcessorUseAgentFragment\")\n                        .HasColumnName(\"remote_feed_processor_use_agent_fragment\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RemoteFeedUrl\")\n                        .HasColumnName(\"remote_feed_url\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"ShowFeaturedPostsOnDefaultPage\")\n                        .HasColumnName(\"show_featured_posts_on_default_page\");\n\n                    b.Property<bool>(\"ShowRecentPostsOnDefaultPage\")\n                        .HasColumnName(\"show_recent_posts_on_default_page\");\n\n                    b.Property<bool>(\"ShowTitle\")\n                        .HasColumnName(\"show_title\");\n\n                    b.Property<string>(\"SiteName\")\n                        .HasColumnName(\"site_name\")\n                        .HasMaxLength(200);\n\n                    b.Property<byte>(\"TeaserMode\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnName(\"teaser_mode\")\n                        .HasDefaultValue((byte)0);\n\n                    b.Property<int>(\"TeaserTruncationLength\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnName(\"teaser_truncation_length\")\n                        .HasDefaultValue(20);\n\n                    b.Property<byte>(\"TeaserTruncationMode\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnName(\"teaser_truncation_mode\")\n                        .HasDefaultValue((byte)0);\n\n                    b.Property<string>(\"TimeZoneId\")\n                        .HasColumnName(\"time_zone_id\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Title\")\n                        .HasColumnName(\"title\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"TwitterCreator\")\n                        .HasColumnName(\"twitter_creator\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"TwitterPublisher\")\n                        .HasColumnName(\"twitter_publisher\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"UseDefaultPageAsRootNode\")\n                        .HasColumnName(\"use_default_page_as_root_node\");\n\n                    b.Property<string>(\"WebmasterEmail\")\n                        .HasColumnName(\"webmaster_email\")\n                        .HasMaxLength(100);\n\n                    b.HasKey(\"Id\")\n                        .HasName(\"pk_cs_content_project\");\n\n                    b.ToTable(\"cs_content_project\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageCategory\", b =>\n                {\n                    b.Property<string>(\"Value\")\n                        .HasColumnName(\"value\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasColumnName(\"page_entity_id\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasColumnName(\"project_id\")\n                        .HasMaxLength(36);\n\n                    b.HasKey(\"Value\", \"PageEntityId\")\n                        .HasName(\"pk_cs_page_category\");\n\n                    b.HasIndex(\"PageEntityId\")\n                        .HasName(\"ix_cs_page_category_page_entity_id\");\n\n                    b.HasIndex(\"ProjectId\")\n                        .HasName(\"ix_cs_page_category_project_id\");\n\n                    b.HasIndex(\"Value\")\n                        .HasName(\"ix_cs_page_category_value\");\n\n                    b.ToTable(\"cs_page_category\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnName(\"id\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasColumnName(\"author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Content\")\n                        .HasColumnName(\"content\");\n\n                    b.Property<string>(\"Email\")\n                        .HasColumnName(\"email\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Ip\")\n                        .HasColumnName(\"ip\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"IsAdmin\")\n                        .HasColumnName(\"is_admin\");\n\n                    b.Property<bool>(\"IsApproved\")\n                        .HasColumnName(\"is_approved\");\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasColumnName(\"page_entity_id\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasColumnName(\"project_id\")\n                        .HasMaxLength(36);\n\n                    b.Property<DateTime>(\"PubDate\")\n                        .HasColumnName(\"pub_date\");\n\n                    b.Property<string>(\"UserAgent\")\n                        .HasColumnName(\"user_agent\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Website\")\n                        .HasColumnName(\"website\")\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\")\n                        .HasName(\"pk_cs_page_comment\");\n\n                    b.HasIndex(\"PageEntityId\")\n                        .HasName(\"ix_cs_page_comment_page_entity_id\");\n\n                    b.HasIndex(\"ProjectId\")\n                        .HasName(\"ix_cs_page_comment_project_id\");\n\n                    b.ToTable(\"cs_page_comment\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnName(\"id\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasColumnName(\"author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasColumnName(\"categories_csv\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"Content\")\n                        .HasColumnName(\"content\");\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnName(\"content_type\")\n                        .HasMaxLength(50)\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasColumnName(\"correlation_key\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CreatedByUser\")\n                        .HasColumnName(\"created_by_user\")\n                        .HasMaxLength(100);\n\n                    b.Property<DateTime>(\"CreatedUtc\")\n                        .HasColumnName(\"created_utc\");\n\n                    b.Property<bool>(\"DisableEditor\")\n                        .HasColumnName(\"disable_editor\");\n\n                    b.Property<string>(\"DraftAuthor\")\n                        .HasColumnName(\"draft_author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"DraftContent\")\n                        .HasColumnName(\"draft_content\");\n\n                    b.Property<DateTime?>(\"DraftPubDate\")\n                        .HasColumnName(\"draft_pub_date\");\n\n                    b.Property<string>(\"DraftSerializedModel\")\n                        .HasColumnName(\"draft_serialized_model\");\n\n                    b.Property<string>(\"ExternalUrl\")\n                        .HasColumnName(\"external_url\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"IsPublished\")\n                        .HasColumnName(\"is_published\");\n\n                    b.Property<DateTime>(\"LastModified\")\n                        .HasColumnName(\"last_modified\");\n\n                    b.Property<string>(\"LastModifiedByUser\")\n                        .HasColumnName(\"last_modified_by_user\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"MenuFilters\")\n                        .HasColumnName(\"menu_filters\")\n                        .HasMaxLength(500);\n\n                    b.Property<bool>(\"MenuOnly\")\n                        .HasColumnName(\"menu_only\");\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasColumnName(\"meta_description\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"MetaHtml\")\n                        .HasColumnName(\"meta_html\");\n\n                    b.Property<string>(\"MetaJson\")\n                        .HasColumnName(\"meta_json\");\n\n                    b.Property<int>(\"PageOrder\")\n                        .HasColumnName(\"page_order\");\n\n                    b.Property<string>(\"ParentId\")\n                        .HasColumnName(\"parent_id\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ParentSlug\")\n                        .HasColumnName(\"parent_slug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasColumnName(\"project_id\")\n                        .HasMaxLength(36);\n\n                    b.Property<DateTime?>(\"PubDate\")\n                        .HasColumnName(\"pub_date\");\n\n                    b.Property<string>(\"SerializedModel\")\n                        .HasColumnName(\"serialized_model\");\n\n                    b.Property<string>(\"Serializer\")\n                        .HasColumnName(\"serializer\")\n                        .HasMaxLength(50);\n\n                    b.Property<bool>(\"ShowCategories\")\n                        .HasColumnName(\"show_categories\");\n\n                    b.Property<bool>(\"ShowComments\")\n                        .HasColumnName(\"show_comments\");\n\n                    b.Property<bool>(\"ShowHeading\")\n                        .HasColumnName(\"show_heading\");\n\n                    b.Property<bool>(\"ShowLastModified\")\n                        .HasColumnName(\"show_last_modified\");\n\n                    b.Property<bool>(\"ShowMenu\")\n                        .HasColumnName(\"show_menu\");\n\n                    b.Property<bool>(\"ShowPubDate\")\n                        .HasColumnName(\"show_pub_date\");\n\n                    b.Property<string>(\"Slug\")\n                        .IsRequired()\n                        .HasColumnName(\"slug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"TemplateKey\")\n                        .HasColumnName(\"template_key\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasColumnName(\"title\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ViewRoles\")\n                        .HasColumnName(\"view_roles\");\n\n                    b.HasKey(\"Id\")\n                        .HasName(\"pk_cs_page\");\n\n                    b.HasIndex(\"CorrelationKey\")\n                        .HasName(\"ix_cs_page_correlation_key\");\n\n                    b.HasIndex(\"ParentId\")\n                        .HasName(\"ix_cs_page_parent_id\");\n\n                    b.HasIndex(\"ProjectId\")\n                        .HasName(\"ix_cs_page_project_id\");\n\n                    b.ToTable(\"cs_page\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageResourceEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnName(\"id\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Environment\")\n                        .IsRequired()\n                        .HasColumnName(\"environment\")\n                        .HasMaxLength(15);\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasColumnName(\"page_entity_id\")\n                        .HasMaxLength(36);\n\n                    b.Property<int>(\"Sort\")\n                        .HasColumnName(\"sort\");\n\n                    b.Property<string>(\"Type\")\n                        .IsRequired()\n                        .HasColumnName(\"type\")\n                        .HasMaxLength(10);\n\n                    b.Property<string>(\"Url\")\n                        .IsRequired()\n                        .HasColumnName(\"url\")\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\")\n                        .HasName(\"pk_cs_page_resource\");\n\n                    b.HasIndex(\"PageEntityId\")\n                        .HasName(\"ix_cs_page_resource_page_entity_id\");\n\n                    b.ToTable(\"cs_page_resource\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostCategory\", b =>\n                {\n                    b.Property<string>(\"Value\")\n                        .HasColumnName(\"value\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PostEntityId\")\n                        .HasColumnName(\"post_entity_id\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasColumnName(\"project_id\")\n                        .HasMaxLength(36);\n\n                    b.HasKey(\"Value\", \"PostEntityId\")\n                        .HasName(\"pk_cs_post_category\");\n\n                    b.HasIndex(\"PostEntityId\")\n                        .HasName(\"ix_cs_post_category_post_entity_id\");\n\n                    b.HasIndex(\"ProjectId\")\n                        .HasName(\"ix_cs_post_category_project_id\");\n\n                    b.HasIndex(\"Value\")\n                        .HasName(\"ix_cs_post_category_value\");\n\n                    b.ToTable(\"cs_post_category\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnName(\"id\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasColumnName(\"author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Content\")\n                        .HasColumnName(\"content\");\n\n                    b.Property<string>(\"Email\")\n                        .HasColumnName(\"email\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Ip\")\n                        .HasColumnName(\"ip\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"IsAdmin\")\n                        .HasColumnName(\"is_admin\");\n\n                    b.Property<bool>(\"IsApproved\")\n                        .HasColumnName(\"is_approved\");\n\n                    b.Property<string>(\"PostEntityId\")\n                        .HasColumnName(\"post_entity_id\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasColumnName(\"project_id\")\n                        .HasMaxLength(36);\n\n                    b.Property<DateTime>(\"PubDate\")\n                        .HasColumnName(\"pub_date\");\n\n                    b.Property<string>(\"UserAgent\")\n                        .HasColumnName(\"user_agent\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Website\")\n                        .HasColumnName(\"website\")\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\")\n                        .HasName(\"pk_cs_post_comment\");\n\n                    b.HasIndex(\"PostEntityId\")\n                        .HasName(\"ix_cs_post_comment_post_entity_id\");\n\n                    b.HasIndex(\"ProjectId\")\n                        .HasName(\"ix_cs_post_comment_project_id\");\n\n                    b.ToTable(\"cs_post_comment\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnName(\"id\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasColumnName(\"author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"AutoTeaser\")\n                        .HasColumnName(\"auto_teaser\");\n\n                    b.Property<string>(\"BlogId\")\n                        .IsRequired()\n                        .HasColumnName(\"blog_id\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasColumnName(\"categories_csv\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"Content\")\n                        .HasColumnName(\"content\");\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnName(\"content_type\")\n                        .HasMaxLength(50)\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasColumnName(\"correlation_key\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CreatedByUser\")\n                        .HasColumnName(\"created_by_user\")\n                        .HasMaxLength(100);\n\n                    b.Property<DateTime>(\"CreatedUtc\")\n                        .HasColumnName(\"created_utc\");\n\n                    b.Property<string>(\"DraftAuthor\")\n                        .HasColumnName(\"draft_author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"DraftContent\")\n                        .HasColumnName(\"draft_content\");\n\n                    b.Property<DateTime?>(\"DraftPubDate\")\n                        .HasColumnName(\"draft_pub_date\");\n\n                    b.Property<string>(\"DraftSerializedModel\")\n                        .HasColumnName(\"draft_serialized_model\");\n\n                    b.Property<string>(\"ImageUrl\")\n                        .HasColumnName(\"image_url\")\n                        .HasMaxLength(250);\n\n                    b.Property<bool>(\"IsFeatured\")\n                        .HasColumnName(\"is_featured\");\n\n                    b.Property<bool>(\"IsPublished\")\n                        .HasColumnName(\"is_published\");\n\n                    b.Property<DateTime>(\"LastModified\")\n                        .HasColumnName(\"last_modified\");\n\n                    b.Property<string>(\"LastModifiedByUser\")\n                        .HasColumnName(\"last_modified_by_user\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasColumnName(\"meta_description\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"MetaHtml\")\n                        .HasColumnName(\"meta_html\");\n\n                    b.Property<string>(\"MetaJson\")\n                        .HasColumnName(\"meta_json\");\n\n                    b.Property<DateTime?>(\"PubDate\")\n                        .HasColumnName(\"pub_date\");\n\n                    b.Property<string>(\"SerializedModel\")\n                        .HasColumnName(\"serialized_model\");\n\n                    b.Property<string>(\"Serializer\")\n                        .HasColumnName(\"serializer\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"Slug\")\n                        .IsRequired()\n                        .HasColumnName(\"slug\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"SuppressTeaser\")\n                        .HasColumnName(\"suppress_teaser\");\n\n                    b.Property<string>(\"TeaserOverride\")\n                        .HasColumnName(\"teaser_override\");\n\n                    b.Property<string>(\"TemplateKey\")\n                        .HasColumnName(\"template_key\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ThumbnailUrl\")\n                        .HasColumnName(\"thumbnail_url\")\n                        .HasMaxLength(250);\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasColumnName(\"title\")\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\")\n                        .HasName(\"pk_cs_post\");\n\n                    b.HasIndex(\"BlogId\")\n                        .HasName(\"ix_cs_post_blog_id\");\n\n                    b.HasIndex(\"CorrelationKey\")\n                        .HasName(\"ix_cs_post_correlation_key\");\n\n                    b.HasIndex(\"Slug\")\n                        .HasName(\"ix_cs_post_slug\");\n\n                    b.ToTable(\"cs_post\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\")\n                        .WithMany(\"PageComments\")\n                        .HasForeignKey(\"PageEntityId\")\n                        .HasConstraintName(\"fk_cs_page_comment_cs_page_page_entity_id\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageResourceEntity\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\")\n                        .WithMany(\"PageResources\")\n                        .HasForeignKey(\"PageEntityId\")\n                        .HasConstraintName(\"fk_cs_page_resource_cs_page_page_entity_id\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\")\n                        .WithMany(\"PostComments\")\n                        .HasForeignKey(\"PostEntityId\")\n                        .HasConstraintName(\"fk_cs_post_comment_cs_post_post_entity_id\");\n                });\n#pragma warning restore 612, 618\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.PostgreSql/Migrations/20181009120713_simplecontent-initial.cs",
    "content": "﻿using System;\nusing Microsoft.EntityFrameworkCore.Migrations;\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.PostgreSql.Migrations\n{\n    public partial class simplecontentinitial : Migration\n    {\n        protected override void Up(MigrationBuilder migrationBuilder)\n        {\n            migrationBuilder.CreateTable(\n                name: \"cs_content_history\",\n                columns: table => new\n                {\n                    id = table.Column<Guid>(maxLength: 36, nullable: false),\n                    content_id = table.Column<string>(maxLength: 36, nullable: false),\n                    project_id = table.Column<string>(nullable: true),\n                    content_source = table.Column<string>(maxLength: 50, nullable: false),\n                    content_type = table.Column<string>(maxLength: 50, nullable: true, defaultValue: \"html\"),\n                    slug = table.Column<string>(maxLength: 255, nullable: true),\n                    is_draft_hx = table.Column<bool>(nullable: false),\n                    was_deleted = table.Column<bool>(nullable: false),\n                    archived_utc = table.Column<DateTime>(nullable: false),\n                    archived_by = table.Column<string>(maxLength: 255, nullable: true),\n                    title = table.Column<string>(maxLength: 255, nullable: false),\n                    author = table.Column<string>(maxLength: 255, nullable: true),\n                    correlation_key = table.Column<string>(maxLength: 255, nullable: true),\n                    content = table.Column<string>(nullable: true),\n                    categories_csv = table.Column<string>(nullable: true),\n                    pub_date = table.Column<DateTime>(nullable: true),\n                    last_modified = table.Column<DateTime>(nullable: false),\n                    is_published = table.Column<bool>(nullable: false),\n                    created_utc = table.Column<DateTime>(nullable: false),\n                    created_by_user = table.Column<string>(maxLength: 100, nullable: true),\n                    last_modified_by_user = table.Column<string>(maxLength: 100, nullable: true),\n                    draft_content = table.Column<string>(nullable: true),\n                    draft_author = table.Column<string>(maxLength: 255, nullable: true),\n                    draft_pub_date = table.Column<DateTime>(nullable: true),\n                    serialized_model = table.Column<string>(nullable: true),\n                    draft_serialized_model = table.Column<string>(nullable: true),\n                    meta_description = table.Column<string>(nullable: true),\n                    meta_json = table.Column<string>(nullable: true),\n                    meta_html = table.Column<string>(nullable: true),\n                    template_key = table.Column<string>(maxLength: 255, nullable: true),\n                    serializer = table.Column<string>(maxLength: 50, nullable: true),\n                    parent_id = table.Column<string>(maxLength: 255, nullable: true),\n                    parent_slug = table.Column<string>(maxLength: 255, nullable: true),\n                    page_order = table.Column<int>(nullable: false),\n                    view_roles = table.Column<string>(nullable: true),\n                    teaser_override = table.Column<string>(nullable: true)\n                },\n                constraints: table =>\n                {\n                    table.PrimaryKey(\"pk_cs_content_history\", x => x.id);\n                });\n\n            migrationBuilder.CreateTable(\n                name: \"cs_content_project\",\n                columns: table => new\n                {\n                    id = table.Column<string>(maxLength: 36, nullable: false),\n                    title = table.Column<string>(maxLength: 255, nullable: true),\n                    description = table.Column<string>(nullable: true),\n                    copyright_notice = table.Column<string>(maxLength: 255, nullable: true),\n                    publisher = table.Column<string>(maxLength: 255, nullable: true),\n                    publisher_logo_url = table.Column<string>(maxLength: 255, nullable: true),\n                    publisher_logo_width = table.Column<string>(maxLength: 20, nullable: true),\n                    publisher_logo_height = table.Column<string>(maxLength: 20, nullable: true),\n                    publisher_entity_type = table.Column<string>(maxLength: 50, nullable: true),\n                    disqus_short_name = table.Column<string>(maxLength: 100, nullable: true),\n                    posts_per_page = table.Column<int>(nullable: false),\n                    days_to_comment = table.Column<int>(nullable: false),\n                    moderate_comments = table.Column<bool>(nullable: false),\n                    comment_notification_email = table.Column<string>(maxLength: 100, nullable: true),\n                    blog_menu_links_to_newest_post = table.Column<bool>(nullable: false),\n                    local_media_virtual_path = table.Column<string>(maxLength: 255, nullable: true),\n                    cdn_url = table.Column<string>(maxLength: 255, nullable: true),\n                    pub_date_format = table.Column<string>(maxLength: 75, nullable: true),\n                    include_pub_date_in_post_urls = table.Column<bool>(nullable: false),\n                    time_zone_id = table.Column<string>(maxLength: 100, nullable: true),\n                    recaptcha_public_key = table.Column<string>(maxLength: 255, nullable: true),\n                    recaptcha_private_key = table.Column<string>(maxLength: 255, nullable: true),\n                    default_page_slug = table.Column<string>(maxLength: 255, nullable: true),\n                    use_default_page_as_root_node = table.Column<bool>(nullable: false),\n                    show_title = table.Column<bool>(nullable: false),\n                    add_blog_to_pages_tree = table.Column<bool>(nullable: false),\n                    blog_page_position = table.Column<int>(nullable: false),\n                    blog_page_text = table.Column<string>(maxLength: 255, nullable: true),\n                    blog_page_nav_component_visibility = table.Column<string>(maxLength: 255, nullable: true),\n                    image = table.Column<string>(maxLength: 255, nullable: true),\n                    channel_time_to_live = table.Column<int>(nullable: false),\n                    language_code = table.Column<string>(maxLength: 10, nullable: true),\n                    channel_categories_csv = table.Column<string>(maxLength: 255, nullable: true),\n                    managing_editor_email = table.Column<string>(maxLength: 100, nullable: true),\n                    channel_rating = table.Column<string>(maxLength: 100, nullable: true),\n                    webmaster_email = table.Column<string>(maxLength: 100, nullable: true),\n                    remote_feed_url = table.Column<string>(maxLength: 255, nullable: true),\n                    remote_feed_processor_use_agent_fragment = table.Column<string>(maxLength: 255, nullable: true),\n                    show_recent_posts_on_default_page = table.Column<bool>(nullable: false),\n                    show_featured_posts_on_default_page = table.Column<bool>(nullable: false),\n                    facebook_app_id = table.Column<string>(maxLength: 100, nullable: true),\n                    site_name = table.Column<string>(maxLength: 200, nullable: true),\n                    twitter_publisher = table.Column<string>(maxLength: 100, nullable: true),\n                    twitter_creator = table.Column<string>(maxLength: 100, nullable: true),\n                    default_content_type = table.Column<string>(maxLength: 50, nullable: true, defaultValue: \"html\"),\n                    teaser_mode = table.Column<byte>(nullable: false, defaultValue: (byte)0),\n                    teaser_truncation_mode = table.Column<byte>(nullable: false, defaultValue: (byte)0),\n                    teaser_truncation_length = table.Column<int>(nullable: false, defaultValue: 20),\n                    default_feed_items = table.Column<int>(nullable: false, defaultValue: 20),\n                    max_feed_items = table.Column<int>(nullable: false, defaultValue: 1000)\n                },\n                constraints: table =>\n                {\n                    table.PrimaryKey(\"pk_cs_content_project\", x => x.id);\n                });\n\n            migrationBuilder.CreateTable(\n                name: \"cs_page\",\n                columns: table => new\n                {\n                    id = table.Column<string>(maxLength: 36, nullable: false),\n                    project_id = table.Column<string>(maxLength: 36, nullable: false),\n                    parent_id = table.Column<string>(maxLength: 36, nullable: true),\n                    parent_slug = table.Column<string>(maxLength: 255, nullable: true),\n                    page_order = table.Column<int>(nullable: false),\n                    title = table.Column<string>(maxLength: 255, nullable: false),\n                    author = table.Column<string>(maxLength: 255, nullable: true),\n                    slug = table.Column<string>(maxLength: 255, nullable: false),\n                    external_url = table.Column<string>(maxLength: 255, nullable: true),\n                    correlation_key = table.Column<string>(maxLength: 255, nullable: true),\n                    meta_description = table.Column<string>(maxLength: 500, nullable: true),\n                    meta_json = table.Column<string>(nullable: true),\n                    meta_html = table.Column<string>(nullable: true),\n                    content = table.Column<string>(nullable: true),\n                    pub_date = table.Column<DateTime>(nullable: true),\n                    last_modified = table.Column<DateTime>(nullable: false),\n                    is_published = table.Column<bool>(nullable: false),\n                    menu_only = table.Column<bool>(nullable: false),\n                    show_menu = table.Column<bool>(nullable: false),\n                    view_roles = table.Column<string>(nullable: true),\n                    show_heading = table.Column<bool>(nullable: false),\n                    show_pub_date = table.Column<bool>(nullable: false),\n                    show_last_modified = table.Column<bool>(nullable: false),\n                    show_categories = table.Column<bool>(nullable: false),\n                    show_comments = table.Column<bool>(nullable: false),\n                    menu_filters = table.Column<string>(maxLength: 500, nullable: true),\n                    categories_csv = table.Column<string>(maxLength: 500, nullable: true),\n                    disable_editor = table.Column<bool>(nullable: false),\n                    content_type = table.Column<string>(maxLength: 50, nullable: true, defaultValue: \"html\"),\n                    created_utc = table.Column<DateTime>(nullable: false),\n                    created_by_user = table.Column<string>(maxLength: 100, nullable: true),\n                    last_modified_by_user = table.Column<string>(maxLength: 100, nullable: true),\n                    draft_content = table.Column<string>(nullable: true),\n                    draft_author = table.Column<string>(maxLength: 255, nullable: true),\n                    draft_pub_date = table.Column<DateTime>(nullable: true),\n                    template_key = table.Column<string>(maxLength: 255, nullable: true),\n                    serialized_model = table.Column<string>(nullable: true),\n                    draft_serialized_model = table.Column<string>(nullable: true),\n                    serializer = table.Column<string>(maxLength: 50, nullable: true)\n                },\n                constraints: table =>\n                {\n                    table.PrimaryKey(\"pk_cs_page\", x => x.id);\n                });\n\n            migrationBuilder.CreateTable(\n                name: \"cs_page_category\",\n                columns: table => new\n                {\n                    value = table.Column<string>(maxLength: 50, nullable: false),\n                    page_entity_id = table.Column<string>(maxLength: 36, nullable: false),\n                    project_id = table.Column<string>(maxLength: 36, nullable: false)\n                },\n                constraints: table =>\n                {\n                    table.PrimaryKey(\"pk_cs_page_category\", x => new { x.value, x.page_entity_id });\n                });\n\n            migrationBuilder.CreateTable(\n                name: \"cs_post\",\n                columns: table => new\n                {\n                    id = table.Column<string>(maxLength: 36, nullable: false),\n                    blog_id = table.Column<string>(maxLength: 36, nullable: false),\n                    title = table.Column<string>(maxLength: 255, nullable: false),\n                    correlation_key = table.Column<string>(maxLength: 255, nullable: true),\n                    author = table.Column<string>(maxLength: 255, nullable: true),\n                    slug = table.Column<string>(maxLength: 255, nullable: false),\n                    meta_description = table.Column<string>(maxLength: 500, nullable: true),\n                    meta_json = table.Column<string>(nullable: true),\n                    meta_html = table.Column<string>(nullable: true),\n                    content = table.Column<string>(nullable: true),\n                    pub_date = table.Column<DateTime>(nullable: true),\n                    last_modified = table.Column<DateTime>(nullable: false),\n                    is_published = table.Column<bool>(nullable: false),\n                    is_featured = table.Column<bool>(nullable: false),\n                    image_url = table.Column<string>(maxLength: 250, nullable: true),\n                    thumbnail_url = table.Column<string>(maxLength: 250, nullable: true),\n                    categories_csv = table.Column<string>(maxLength: 500, nullable: true),\n                    content_type = table.Column<string>(maxLength: 50, nullable: true, defaultValue: \"html\"),\n                    auto_teaser = table.Column<string>(nullable: true),\n                    teaser_override = table.Column<string>(nullable: true),\n                    suppress_teaser = table.Column<bool>(nullable: false),\n                    created_utc = table.Column<DateTime>(nullable: false),\n                    created_by_user = table.Column<string>(maxLength: 100, nullable: true),\n                    last_modified_by_user = table.Column<string>(maxLength: 100, nullable: true),\n                    draft_content = table.Column<string>(nullable: true),\n                    draft_author = table.Column<string>(maxLength: 255, nullable: true),\n                    draft_pub_date = table.Column<DateTime>(nullable: true),\n                    template_key = table.Column<string>(maxLength: 255, nullable: true),\n                    serialized_model = table.Column<string>(nullable: true),\n                    draft_serialized_model = table.Column<string>(nullable: true),\n                    serializer = table.Column<string>(maxLength: 50, nullable: true)\n                },\n                constraints: table =>\n                {\n                    table.PrimaryKey(\"pk_cs_post\", x => x.id);\n                });\n\n            migrationBuilder.CreateTable(\n                name: \"cs_post_category\",\n                columns: table => new\n                {\n                    value = table.Column<string>(maxLength: 50, nullable: false),\n                    post_entity_id = table.Column<string>(maxLength: 36, nullable: false),\n                    project_id = table.Column<string>(maxLength: 36, nullable: false)\n                },\n                constraints: table =>\n                {\n                    table.PrimaryKey(\"pk_cs_post_category\", x => new { x.value, x.post_entity_id });\n                });\n\n            migrationBuilder.CreateTable(\n                name: \"cs_page_comment\",\n                columns: table => new\n                {\n                    id = table.Column<string>(maxLength: 36, nullable: false),\n                    page_entity_id = table.Column<string>(maxLength: 36, nullable: true),\n                    project_id = table.Column<string>(maxLength: 36, nullable: false),\n                    author = table.Column<string>(maxLength: 255, nullable: true),\n                    email = table.Column<string>(maxLength: 100, nullable: true),\n                    website = table.Column<string>(maxLength: 255, nullable: true),\n                    content = table.Column<string>(nullable: true),\n                    pub_date = table.Column<DateTime>(nullable: false),\n                    ip = table.Column<string>(maxLength: 100, nullable: true),\n                    user_agent = table.Column<string>(maxLength: 255, nullable: true),\n                    is_admin = table.Column<bool>(nullable: false),\n                    is_approved = table.Column<bool>(nullable: false)\n                },\n                constraints: table =>\n                {\n                    table.PrimaryKey(\"pk_cs_page_comment\", x => x.id);\n                    table.ForeignKey(\n                        name: \"fk_cs_page_comment_cs_page_page_entity_id\",\n                        column: x => x.page_entity_id,\n                        principalTable: \"cs_page\",\n                        principalColumn: \"id\",\n                        onDelete: ReferentialAction.Restrict);\n                });\n\n            migrationBuilder.CreateTable(\n                name: \"cs_page_resource\",\n                columns: table => new\n                {\n                    id = table.Column<string>(maxLength: 36, nullable: false),\n                    page_entity_id = table.Column<string>(maxLength: 36, nullable: true),\n                    sort = table.Column<int>(nullable: false),\n                    type = table.Column<string>(maxLength: 10, nullable: false),\n                    environment = table.Column<string>(maxLength: 15, nullable: false),\n                    url = table.Column<string>(maxLength: 255, nullable: false)\n                },\n                constraints: table =>\n                {\n                    table.PrimaryKey(\"pk_cs_page_resource\", x => x.id);\n                    table.ForeignKey(\n                        name: \"fk_cs_page_resource_cs_page_page_entity_id\",\n                        column: x => x.page_entity_id,\n                        principalTable: \"cs_page\",\n                        principalColumn: \"id\",\n                        onDelete: ReferentialAction.Restrict);\n                });\n\n            migrationBuilder.CreateTable(\n                name: \"cs_post_comment\",\n                columns: table => new\n                {\n                    id = table.Column<string>(maxLength: 36, nullable: false),\n                    post_entity_id = table.Column<string>(maxLength: 36, nullable: true),\n                    project_id = table.Column<string>(maxLength: 36, nullable: false),\n                    author = table.Column<string>(maxLength: 255, nullable: true),\n                    email = table.Column<string>(maxLength: 100, nullable: true),\n                    website = table.Column<string>(maxLength: 255, nullable: true),\n                    content = table.Column<string>(nullable: true),\n                    pub_date = table.Column<DateTime>(nullable: false),\n                    ip = table.Column<string>(maxLength: 100, nullable: true),\n                    user_agent = table.Column<string>(maxLength: 255, nullable: true),\n                    is_admin = table.Column<bool>(nullable: false),\n                    is_approved = table.Column<bool>(nullable: false)\n                },\n                constraints: table =>\n                {\n                    table.PrimaryKey(\"pk_cs_post_comment\", x => x.id);\n                    table.ForeignKey(\n                        name: \"fk_cs_post_comment_cs_post_post_entity_id\",\n                        column: x => x.post_entity_id,\n                        principalTable: \"cs_post\",\n                        principalColumn: \"id\",\n                        onDelete: ReferentialAction.Restrict);\n                });\n\n            migrationBuilder.CreateIndex(\n                name: \"ix_cs_content_history_content_id\",\n                table: \"cs_content_history\",\n                column: \"content_id\");\n\n            migrationBuilder.CreateIndex(\n                name: \"ix_cs_content_history_content_source\",\n                table: \"cs_content_history\",\n                column: \"content_source\");\n\n            migrationBuilder.CreateIndex(\n                name: \"ix_cs_content_history_correlation_key\",\n                table: \"cs_content_history\",\n                column: \"correlation_key\");\n\n            migrationBuilder.CreateIndex(\n                name: \"ix_cs_content_history_created_by_user\",\n                table: \"cs_content_history\",\n                column: \"created_by_user\");\n\n            migrationBuilder.CreateIndex(\n                name: \"ix_cs_content_history_last_modified_by_user\",\n                table: \"cs_content_history\",\n                column: \"last_modified_by_user\");\n\n            migrationBuilder.CreateIndex(\n                name: \"ix_cs_content_history_title\",\n                table: \"cs_content_history\",\n                column: \"title\");\n\n            migrationBuilder.CreateIndex(\n                name: \"ix_cs_page_correlation_key\",\n                table: \"cs_page\",\n                column: \"correlation_key\");\n\n            migrationBuilder.CreateIndex(\n                name: \"ix_cs_page_parent_id\",\n                table: \"cs_page\",\n                column: \"parent_id\");\n\n            migrationBuilder.CreateIndex(\n                name: \"ix_cs_page_project_id\",\n                table: \"cs_page\",\n                column: \"project_id\");\n\n            migrationBuilder.CreateIndex(\n                name: \"ix_cs_page_category_page_entity_id\",\n                table: \"cs_page_category\",\n                column: \"page_entity_id\");\n\n            migrationBuilder.CreateIndex(\n                name: \"ix_cs_page_category_project_id\",\n                table: \"cs_page_category\",\n                column: \"project_id\");\n\n            migrationBuilder.CreateIndex(\n                name: \"ix_cs_page_category_value\",\n                table: \"cs_page_category\",\n                column: \"value\");\n\n            migrationBuilder.CreateIndex(\n                name: \"ix_cs_page_comment_page_entity_id\",\n                table: \"cs_page_comment\",\n                column: \"page_entity_id\");\n\n            migrationBuilder.CreateIndex(\n                name: \"ix_cs_page_comment_project_id\",\n                table: \"cs_page_comment\",\n                column: \"project_id\");\n\n            migrationBuilder.CreateIndex(\n                name: \"ix_cs_page_resource_page_entity_id\",\n                table: \"cs_page_resource\",\n                column: \"page_entity_id\");\n\n            migrationBuilder.CreateIndex(\n                name: \"ix_cs_post_blog_id\",\n                table: \"cs_post\",\n                column: \"blog_id\");\n\n            migrationBuilder.CreateIndex(\n                name: \"ix_cs_post_correlation_key\",\n                table: \"cs_post\",\n                column: \"correlation_key\");\n\n            migrationBuilder.CreateIndex(\n                name: \"ix_cs_post_slug\",\n                table: \"cs_post\",\n                column: \"slug\");\n\n            migrationBuilder.CreateIndex(\n                name: \"ix_cs_post_category_post_entity_id\",\n                table: \"cs_post_category\",\n                column: \"post_entity_id\");\n\n            migrationBuilder.CreateIndex(\n                name: \"ix_cs_post_category_project_id\",\n                table: \"cs_post_category\",\n                column: \"project_id\");\n\n            migrationBuilder.CreateIndex(\n                name: \"ix_cs_post_category_value\",\n                table: \"cs_post_category\",\n                column: \"value\");\n\n            migrationBuilder.CreateIndex(\n                name: \"ix_cs_post_comment_post_entity_id\",\n                table: \"cs_post_comment\",\n                column: \"post_entity_id\");\n\n            migrationBuilder.CreateIndex(\n                name: \"ix_cs_post_comment_project_id\",\n                table: \"cs_post_comment\",\n                column: \"project_id\");\n        }\n\n        protected override void Down(MigrationBuilder migrationBuilder)\n        {\n            migrationBuilder.DropTable(\n                name: \"cs_content_history\");\n\n            migrationBuilder.DropTable(\n                name: \"cs_content_project\");\n\n            migrationBuilder.DropTable(\n                name: \"cs_page_category\");\n\n            migrationBuilder.DropTable(\n                name: \"cs_page_comment\");\n\n            migrationBuilder.DropTable(\n                name: \"cs_page_resource\");\n\n            migrationBuilder.DropTable(\n                name: \"cs_post_category\");\n\n            migrationBuilder.DropTable(\n                name: \"cs_post_comment\");\n\n            migrationBuilder.DropTable(\n                name: \"cs_page\");\n\n            migrationBuilder.DropTable(\n                name: \"cs_post\");\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.PostgreSql/Migrations/20190210161250_simplecontent-20190210.Designer.cs",
    "content": "﻿// <auto-generated />\nusing System;\nusing Microsoft.EntityFrameworkCore;\nusing Microsoft.EntityFrameworkCore.Infrastructure;\nusing Microsoft.EntityFrameworkCore.Migrations;\nusing Microsoft.EntityFrameworkCore.Storage.ValueConversion;\nusing Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;\nusing cloudscribe.SimpleContent.Models;\nusing cloudscribe.SimpleContent.Storage.EFCore.PostgreSql;\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.PostgreSql.Migrations\n{\n    [DbContext(typeof(SimpleContentDbContext))]\n    [Migration(\"20190210161250_simplecontent-20190210\")]\n    partial class simplecontent20190210\n    {\n        protected override void BuildTargetModel(ModelBuilder modelBuilder)\n        {\n#pragma warning disable 612, 618\n            modelBuilder\n                .HasAnnotation(\"Npgsql:ValueGenerationStrategy\", NpgsqlValueGenerationStrategy.SerialColumn)\n                .HasAnnotation(\"ProductVersion\", \"2.1.4-rtm-31024\")\n                .HasAnnotation(\"Relational:MaxIdentifierLength\", 63);\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Models.ContentHistory\", b =>\n                {\n                    b.Property<Guid>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnName(\"id\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ArchivedBy\")\n                        .HasColumnName(\"archived_by\")\n                        .HasMaxLength(255);\n\n                    b.Property<DateTime>(\"ArchivedUtc\")\n                        .HasColumnName(\"archived_utc\");\n\n                    b.Property<string>(\"Author\")\n                        .HasColumnName(\"author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasColumnName(\"categories_csv\");\n\n                    b.Property<string>(\"Content\")\n                        .HasColumnName(\"content\");\n\n                    b.Property<string>(\"ContentId\")\n                        .IsRequired()\n                        .HasColumnName(\"content_id\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ContentSource\")\n                        .IsRequired()\n                        .HasColumnName(\"content_source\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnName(\"content_type\")\n                        .HasMaxLength(50)\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasColumnName(\"correlation_key\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CreatedByUser\")\n                        .HasColumnName(\"created_by_user\")\n                        .HasMaxLength(100);\n\n                    b.Property<DateTime>(\"CreatedUtc\")\n                        .HasColumnName(\"created_utc\");\n\n                    b.Property<string>(\"DraftAuthor\")\n                        .HasColumnName(\"draft_author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"DraftContent\")\n                        .HasColumnName(\"draft_content\");\n\n                    b.Property<DateTime?>(\"DraftPubDate\")\n                        .HasColumnName(\"draft_pub_date\");\n\n                    b.Property<string>(\"DraftSerializedModel\")\n                        .HasColumnName(\"draft_serialized_model\");\n\n                    b.Property<bool>(\"IsDraftHx\")\n                        .HasColumnName(\"is_draft_hx\");\n\n                    b.Property<bool>(\"IsPublished\")\n                        .HasColumnName(\"is_published\");\n\n                    b.Property<DateTime>(\"LastModified\")\n                        .HasColumnName(\"last_modified\");\n\n                    b.Property<string>(\"LastModifiedByUser\")\n                        .HasColumnName(\"last_modified_by_user\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasColumnName(\"meta_description\");\n\n                    b.Property<string>(\"MetaHtml\")\n                        .HasColumnName(\"meta_html\");\n\n                    b.Property<string>(\"MetaJson\")\n                        .HasColumnName(\"meta_json\");\n\n                    b.Property<int>(\"PageOrder\")\n                        .HasColumnName(\"page_order\");\n\n                    b.Property<string>(\"ParentId\")\n                        .HasColumnName(\"parent_id\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ParentSlug\")\n                        .HasColumnName(\"parent_slug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ProjectId\")\n                        .HasColumnName(\"project_id\");\n\n                    b.Property<DateTime?>(\"PubDate\")\n                        .HasColumnName(\"pub_date\");\n\n                    b.Property<string>(\"SerializedModel\")\n                        .HasColumnName(\"serialized_model\");\n\n                    b.Property<string>(\"Serializer\")\n                        .HasColumnName(\"serializer\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"Slug\")\n                        .HasColumnName(\"slug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"TeaserOverride\")\n                        .HasColumnName(\"teaser_override\");\n\n                    b.Property<string>(\"TemplateKey\")\n                        .HasColumnName(\"template_key\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasColumnName(\"title\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ViewRoles\")\n                        .HasColumnName(\"view_roles\");\n\n                    b.Property<bool>(\"WasDeleted\")\n                        .HasColumnName(\"was_deleted\");\n\n                    b.HasKey(\"Id\")\n                        .HasName(\"pk_cs_content_history\");\n\n                    b.HasIndex(\"ContentId\")\n                        .HasName(\"ix_cs_content_history_content_id\");\n\n                    b.HasIndex(\"ContentSource\")\n                        .HasName(\"ix_cs_content_history_content_source\");\n\n                    b.HasIndex(\"CorrelationKey\")\n                        .HasName(\"ix_cs_content_history_correlation_key\");\n\n                    b.HasIndex(\"CreatedByUser\")\n                        .HasName(\"ix_cs_content_history_created_by_user\");\n\n                    b.HasIndex(\"LastModifiedByUser\")\n                        .HasName(\"ix_cs_content_history_last_modified_by_user\");\n\n                    b.HasIndex(\"Title\")\n                        .HasName(\"ix_cs_content_history_title\");\n\n                    b.ToTable(\"cs_content_history\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Models.ProjectSettings\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnName(\"id\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"AboutContent\")\n                        .HasColumnName(\"about_content\");\n\n                    b.Property<bool>(\"AddBlogToPagesTree\")\n                        .HasColumnName(\"add_blog_to_pages_tree\");\n\n                    b.Property<bool>(\"BlogMenuLinksToNewestPost\")\n                        .HasColumnName(\"blog_menu_links_to_newest_post\");\n\n                    b.Property<string>(\"BlogPageNavComponentVisibility\")\n                        .HasColumnName(\"blog_page_nav_component_visibility\")\n                        .HasMaxLength(255);\n\n                    b.Property<int>(\"BlogPagePosition\")\n                        .HasColumnName(\"blog_page_position\");\n\n                    b.Property<string>(\"BlogPageText\")\n                        .HasColumnName(\"blog_page_text\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CdnUrl\")\n                        .HasColumnName(\"cdn_url\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ChannelCategoriesCsv\")\n                        .HasColumnName(\"channel_categories_csv\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ChannelRating\")\n                        .HasColumnName(\"channel_rating\")\n                        .HasMaxLength(100);\n\n                    b.Property<int>(\"ChannelTimeToLive\")\n                        .HasColumnName(\"channel_time_to_live\");\n\n                    b.Property<string>(\"CommentNotificationEmail\")\n                        .HasColumnName(\"comment_notification_email\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"CopyrightNotice\")\n                        .HasColumnName(\"copyright_notice\")\n                        .HasMaxLength(255);\n\n                    b.Property<int>(\"DaysToComment\")\n                        .HasColumnName(\"days_to_comment\");\n\n                    b.Property<string>(\"DefaultContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnName(\"default_content_type\")\n                        .HasMaxLength(50)\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<int>(\"DefaultFeedItems\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnName(\"default_feed_items\")\n                        .HasDefaultValue(20);\n\n                    b.Property<string>(\"DefaultPageSlug\")\n                        .HasColumnName(\"default_page_slug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Description\")\n                        .HasColumnName(\"description\");\n\n                    b.Property<string>(\"DisqusShortName\")\n                        .HasColumnName(\"disqus_short_name\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"FacebookAppId\")\n                        .HasColumnName(\"facebook_app_id\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Image\")\n                        .HasColumnName(\"image\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"IncludePubDateInPostUrls\")\n                        .HasColumnName(\"include_pub_date_in_post_urls\");\n\n                    b.Property<string>(\"LanguageCode\")\n                        .HasColumnName(\"language_code\")\n                        .HasMaxLength(10);\n\n                    b.Property<string>(\"LocalMediaVirtualPath\")\n                        .HasColumnName(\"local_media_virtual_path\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ManagingEditorEmail\")\n                        .HasColumnName(\"managing_editor_email\")\n                        .HasMaxLength(100);\n\n                    b.Property<int>(\"MaxFeedItems\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnName(\"max_feed_items\")\n                        .HasDefaultValue(1000);\n\n                    b.Property<bool>(\"ModerateComments\")\n                        .HasColumnName(\"moderate_comments\");\n\n                    b.Property<int>(\"PostsPerPage\")\n                        .HasColumnName(\"posts_per_page\");\n\n                    b.Property<string>(\"PubDateFormat\")\n                        .HasColumnName(\"pub_date_format\")\n                        .HasMaxLength(75);\n\n                    b.Property<string>(\"Publisher\")\n                        .HasColumnName(\"publisher\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"PublisherEntityType\")\n                        .HasColumnName(\"publisher_entity_type\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PublisherLogoHeight\")\n                        .HasColumnName(\"publisher_logo_height\")\n                        .HasMaxLength(20);\n\n                    b.Property<string>(\"PublisherLogoUrl\")\n                        .HasColumnName(\"publisher_logo_url\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"PublisherLogoWidth\")\n                        .HasColumnName(\"publisher_logo_width\")\n                        .HasMaxLength(20);\n\n                    b.Property<string>(\"RecaptchaPrivateKey\")\n                        .HasColumnName(\"recaptcha_private_key\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RecaptchaPublicKey\")\n                        .HasColumnName(\"recaptcha_public_key\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RemoteFeedProcessorUseAgentFragment\")\n                        .HasColumnName(\"remote_feed_processor_use_agent_fragment\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RemoteFeedUrl\")\n                        .HasColumnName(\"remote_feed_url\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"ShowFeaturedPostsOnDefaultPage\")\n                        .HasColumnName(\"show_featured_posts_on_default_page\");\n\n                    b.Property<bool>(\"ShowRecentPostsOnDefaultPage\")\n                        .HasColumnName(\"show_recent_posts_on_default_page\");\n\n                    b.Property<bool>(\"ShowTitle\")\n                        .HasColumnName(\"show_title\");\n\n                    b.Property<string>(\"SiteName\")\n                        .HasColumnName(\"site_name\")\n                        .HasMaxLength(200);\n\n                    b.Property<byte>(\"TeaserMode\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnName(\"teaser_mode\")\n                        .HasDefaultValue((byte)0);\n\n                    b.Property<int>(\"TeaserTruncationLength\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnName(\"teaser_truncation_length\")\n                        .HasDefaultValue(20);\n\n                    b.Property<byte>(\"TeaserTruncationMode\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnName(\"teaser_truncation_mode\")\n                        .HasDefaultValue((byte)0);\n\n                    b.Property<string>(\"TimeZoneId\")\n                        .HasColumnName(\"time_zone_id\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Title\")\n                        .HasColumnName(\"title\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"TwitterCreator\")\n                        .HasColumnName(\"twitter_creator\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"TwitterPublisher\")\n                        .HasColumnName(\"twitter_publisher\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"UseDefaultPageAsRootNode\")\n                        .HasColumnName(\"use_default_page_as_root_node\");\n\n                    b.Property<string>(\"WebmasterEmail\")\n                        .HasColumnName(\"webmaster_email\")\n                        .HasMaxLength(100);\n\n                    b.HasKey(\"Id\")\n                        .HasName(\"pk_cs_content_project\");\n\n                    b.ToTable(\"cs_content_project\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageCategory\", b =>\n                {\n                    b.Property<string>(\"Value\")\n                        .HasColumnName(\"value\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasColumnName(\"page_entity_id\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasColumnName(\"project_id\")\n                        .HasMaxLength(36);\n\n                    b.HasKey(\"Value\", \"PageEntityId\")\n                        .HasName(\"pk_cs_page_category\");\n\n                    b.HasIndex(\"PageEntityId\")\n                        .HasName(\"ix_cs_page_category_page_entity_id\");\n\n                    b.HasIndex(\"ProjectId\")\n                        .HasName(\"ix_cs_page_category_project_id\");\n\n                    b.HasIndex(\"Value\")\n                        .HasName(\"ix_cs_page_category_value\");\n\n                    b.ToTable(\"cs_page_category\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnName(\"id\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasColumnName(\"author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Content\")\n                        .HasColumnName(\"content\");\n\n                    b.Property<string>(\"Email\")\n                        .HasColumnName(\"email\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Ip\")\n                        .HasColumnName(\"ip\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"IsAdmin\")\n                        .HasColumnName(\"is_admin\");\n\n                    b.Property<bool>(\"IsApproved\")\n                        .HasColumnName(\"is_approved\");\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasColumnName(\"page_entity_id\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasColumnName(\"project_id\")\n                        .HasMaxLength(36);\n\n                    b.Property<DateTime>(\"PubDate\")\n                        .HasColumnName(\"pub_date\");\n\n                    b.Property<string>(\"UserAgent\")\n                        .HasColumnName(\"user_agent\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Website\")\n                        .HasColumnName(\"website\")\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\")\n                        .HasName(\"pk_cs_page_comment\");\n\n                    b.HasIndex(\"PageEntityId\")\n                        .HasName(\"ix_cs_page_comment_page_entity_id\");\n\n                    b.HasIndex(\"ProjectId\")\n                        .HasName(\"ix_cs_page_comment_project_id\");\n\n                    b.ToTable(\"cs_page_comment\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnName(\"id\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasColumnName(\"author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasColumnName(\"categories_csv\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"Content\")\n                        .HasColumnName(\"content\");\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnName(\"content_type\")\n                        .HasMaxLength(50)\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasColumnName(\"correlation_key\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CreatedByUser\")\n                        .HasColumnName(\"created_by_user\")\n                        .HasMaxLength(100);\n\n                    b.Property<DateTime>(\"CreatedUtc\")\n                        .HasColumnName(\"created_utc\");\n\n                    b.Property<bool>(\"DisableEditor\")\n                        .HasColumnName(\"disable_editor\");\n\n                    b.Property<string>(\"DraftAuthor\")\n                        .HasColumnName(\"draft_author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"DraftContent\")\n                        .HasColumnName(\"draft_content\");\n\n                    b.Property<DateTime?>(\"DraftPubDate\")\n                        .HasColumnName(\"draft_pub_date\");\n\n                    b.Property<string>(\"DraftSerializedModel\")\n                        .HasColumnName(\"draft_serialized_model\");\n\n                    b.Property<string>(\"ExternalUrl\")\n                        .HasColumnName(\"external_url\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"IsPublished\")\n                        .HasColumnName(\"is_published\");\n\n                    b.Property<DateTime>(\"LastModified\")\n                        .HasColumnName(\"last_modified\");\n\n                    b.Property<string>(\"LastModifiedByUser\")\n                        .HasColumnName(\"last_modified_by_user\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"MenuFilters\")\n                        .HasColumnName(\"menu_filters\")\n                        .HasMaxLength(500);\n\n                    b.Property<bool>(\"MenuOnly\")\n                        .HasColumnName(\"menu_only\");\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasColumnName(\"meta_description\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"MetaHtml\")\n                        .HasColumnName(\"meta_html\");\n\n                    b.Property<string>(\"MetaJson\")\n                        .HasColumnName(\"meta_json\");\n\n                    b.Property<int>(\"PageOrder\")\n                        .HasColumnName(\"page_order\");\n\n                    b.Property<string>(\"ParentId\")\n                        .HasColumnName(\"parent_id\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ParentSlug\")\n                        .HasColumnName(\"parent_slug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasColumnName(\"project_id\")\n                        .HasMaxLength(36);\n\n                    b.Property<DateTime?>(\"PubDate\")\n                        .HasColumnName(\"pub_date\");\n\n                    b.Property<string>(\"SerializedModel\")\n                        .HasColumnName(\"serialized_model\");\n\n                    b.Property<string>(\"Serializer\")\n                        .HasColumnName(\"serializer\")\n                        .HasMaxLength(50);\n\n                    b.Property<bool>(\"ShowCategories\")\n                        .HasColumnName(\"show_categories\");\n\n                    b.Property<bool>(\"ShowComments\")\n                        .HasColumnName(\"show_comments\");\n\n                    b.Property<bool>(\"ShowHeading\")\n                        .HasColumnName(\"show_heading\");\n\n                    b.Property<bool>(\"ShowLastModified\")\n                        .HasColumnName(\"show_last_modified\");\n\n                    b.Property<bool>(\"ShowMenu\")\n                        .HasColumnName(\"show_menu\");\n\n                    b.Property<bool>(\"ShowPubDate\")\n                        .HasColumnName(\"show_pub_date\");\n\n                    b.Property<string>(\"Slug\")\n                        .IsRequired()\n                        .HasColumnName(\"slug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"TemplateKey\")\n                        .HasColumnName(\"template_key\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasColumnName(\"title\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ViewRoles\")\n                        .HasColumnName(\"view_roles\");\n\n                    b.HasKey(\"Id\")\n                        .HasName(\"pk_cs_page\");\n\n                    b.HasIndex(\"CorrelationKey\")\n                        .HasName(\"ix_cs_page_correlation_key\");\n\n                    b.HasIndex(\"ParentId\")\n                        .HasName(\"ix_cs_page_parent_id\");\n\n                    b.HasIndex(\"ProjectId\")\n                        .HasName(\"ix_cs_page_project_id\");\n\n                    b.ToTable(\"cs_page\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageResourceEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnName(\"id\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Environment\")\n                        .IsRequired()\n                        .HasColumnName(\"environment\")\n                        .HasMaxLength(15);\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasColumnName(\"page_entity_id\")\n                        .HasMaxLength(36);\n\n                    b.Property<int>(\"Sort\")\n                        .HasColumnName(\"sort\");\n\n                    b.Property<string>(\"Type\")\n                        .IsRequired()\n                        .HasColumnName(\"type\")\n                        .HasMaxLength(10);\n\n                    b.Property<string>(\"Url\")\n                        .IsRequired()\n                        .HasColumnName(\"url\")\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\")\n                        .HasName(\"pk_cs_page_resource\");\n\n                    b.HasIndex(\"PageEntityId\")\n                        .HasName(\"ix_cs_page_resource_page_entity_id\");\n\n                    b.ToTable(\"cs_page_resource\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostCategory\", b =>\n                {\n                    b.Property<string>(\"Value\")\n                        .HasColumnName(\"value\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PostEntityId\")\n                        .HasColumnName(\"post_entity_id\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasColumnName(\"project_id\")\n                        .HasMaxLength(36);\n\n                    b.HasKey(\"Value\", \"PostEntityId\")\n                        .HasName(\"pk_cs_post_category\");\n\n                    b.HasIndex(\"PostEntityId\")\n                        .HasName(\"ix_cs_post_category_post_entity_id\");\n\n                    b.HasIndex(\"ProjectId\")\n                        .HasName(\"ix_cs_post_category_project_id\");\n\n                    b.HasIndex(\"Value\")\n                        .HasName(\"ix_cs_post_category_value\");\n\n                    b.ToTable(\"cs_post_category\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnName(\"id\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasColumnName(\"author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Content\")\n                        .HasColumnName(\"content\");\n\n                    b.Property<string>(\"Email\")\n                        .HasColumnName(\"email\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Ip\")\n                        .HasColumnName(\"ip\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"IsAdmin\")\n                        .HasColumnName(\"is_admin\");\n\n                    b.Property<bool>(\"IsApproved\")\n                        .HasColumnName(\"is_approved\");\n\n                    b.Property<string>(\"PostEntityId\")\n                        .HasColumnName(\"post_entity_id\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasColumnName(\"project_id\")\n                        .HasMaxLength(36);\n\n                    b.Property<DateTime>(\"PubDate\")\n                        .HasColumnName(\"pub_date\");\n\n                    b.Property<string>(\"UserAgent\")\n                        .HasColumnName(\"user_agent\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Website\")\n                        .HasColumnName(\"website\")\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\")\n                        .HasName(\"pk_cs_post_comment\");\n\n                    b.HasIndex(\"PostEntityId\")\n                        .HasName(\"ix_cs_post_comment_post_entity_id\");\n\n                    b.HasIndex(\"ProjectId\")\n                        .HasName(\"ix_cs_post_comment_project_id\");\n\n                    b.ToTable(\"cs_post_comment\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnName(\"id\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasColumnName(\"author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"AutoTeaser\")\n                        .HasColumnName(\"auto_teaser\");\n\n                    b.Property<string>(\"BlogId\")\n                        .IsRequired()\n                        .HasColumnName(\"blog_id\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasColumnName(\"categories_csv\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"Content\")\n                        .HasColumnName(\"content\");\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnName(\"content_type\")\n                        .HasMaxLength(50)\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasColumnName(\"correlation_key\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CreatedByUser\")\n                        .HasColumnName(\"created_by_user\")\n                        .HasMaxLength(100);\n\n                    b.Property<DateTime>(\"CreatedUtc\")\n                        .HasColumnName(\"created_utc\");\n\n                    b.Property<string>(\"DraftAuthor\")\n                        .HasColumnName(\"draft_author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"DraftContent\")\n                        .HasColumnName(\"draft_content\");\n\n                    b.Property<DateTime?>(\"DraftPubDate\")\n                        .HasColumnName(\"draft_pub_date\");\n\n                    b.Property<string>(\"DraftSerializedModel\")\n                        .HasColumnName(\"draft_serialized_model\");\n\n                    b.Property<string>(\"ImageUrl\")\n                        .HasColumnName(\"image_url\")\n                        .HasMaxLength(250);\n\n                    b.Property<bool>(\"IsFeatured\")\n                        .HasColumnName(\"is_featured\");\n\n                    b.Property<bool>(\"IsPublished\")\n                        .HasColumnName(\"is_published\");\n\n                    b.Property<DateTime>(\"LastModified\")\n                        .HasColumnName(\"last_modified\");\n\n                    b.Property<string>(\"LastModifiedByUser\")\n                        .HasColumnName(\"last_modified_by_user\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasColumnName(\"meta_description\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"MetaHtml\")\n                        .HasColumnName(\"meta_html\");\n\n                    b.Property<string>(\"MetaJson\")\n                        .HasColumnName(\"meta_json\");\n\n                    b.Property<DateTime?>(\"PubDate\")\n                        .HasColumnName(\"pub_date\");\n\n                    b.Property<string>(\"SerializedModel\")\n                        .HasColumnName(\"serialized_model\");\n\n                    b.Property<string>(\"Serializer\")\n                        .HasColumnName(\"serializer\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"Slug\")\n                        .IsRequired()\n                        .HasColumnName(\"slug\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"SuppressTeaser\")\n                        .HasColumnName(\"suppress_teaser\");\n\n                    b.Property<string>(\"TeaserOverride\")\n                        .HasColumnName(\"teaser_override\");\n\n                    b.Property<string>(\"TemplateKey\")\n                        .HasColumnName(\"template_key\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ThumbnailUrl\")\n                        .HasColumnName(\"thumbnail_url\")\n                        .HasMaxLength(250);\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasColumnName(\"title\")\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\")\n                        .HasName(\"pk_cs_post\");\n\n                    b.HasIndex(\"BlogId\")\n                        .HasName(\"ix_cs_post_blog_id\");\n\n                    b.HasIndex(\"CorrelationKey\")\n                        .HasName(\"ix_cs_post_correlation_key\");\n\n                    b.HasIndex(\"Slug\")\n                        .HasName(\"ix_cs_post_slug\");\n\n                    b.ToTable(\"cs_post\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\")\n                        .WithMany(\"PageComments\")\n                        .HasForeignKey(\"PageEntityId\")\n                        .HasConstraintName(\"fk_cs_page_comment_cs_page_page_entity_id\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageResourceEntity\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\")\n                        .WithMany(\"PageResources\")\n                        .HasForeignKey(\"PageEntityId\")\n                        .HasConstraintName(\"fk_cs_page_resource_cs_page_page_entity_id\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\")\n                        .WithMany(\"PostComments\")\n                        .HasForeignKey(\"PostEntityId\")\n                        .HasConstraintName(\"fk_cs_post_comment_cs_post_post_entity_id\");\n                });\n#pragma warning restore 612, 618\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.PostgreSql/Migrations/20190210161250_simplecontent-20190210.cs",
    "content": "﻿using Microsoft.EntityFrameworkCore.Migrations;\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.PostgreSql.Migrations\n{\n    public partial class simplecontent20190210 : Migration\n    {\n        protected override void Up(MigrationBuilder migrationBuilder)\n        {\n            migrationBuilder.AddColumn<string>(\n                name: \"about_content\",\n                table: \"cs_content_project\",\n                nullable: true);\n        }\n\n        protected override void Down(MigrationBuilder migrationBuilder)\n        {\n            migrationBuilder.DropColumn(\n                name: \"about_content\",\n                table: \"cs_content_project\");\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.PostgreSql/Migrations/20190213121205_simplecontent-20190212.Designer.cs",
    "content": "﻿// <auto-generated />\nusing System;\nusing Microsoft.EntityFrameworkCore;\nusing Microsoft.EntityFrameworkCore.Infrastructure;\nusing Microsoft.EntityFrameworkCore.Migrations;\nusing Microsoft.EntityFrameworkCore.Storage.ValueConversion;\nusing Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;\nusing cloudscribe.SimpleContent.Models;\nusing cloudscribe.SimpleContent.Storage.EFCore.PostgreSql;\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.PostgreSql.Migrations\n{\n    [DbContext(typeof(SimpleContentDbContext))]\n    [Migration(\"20190213121205_simplecontent-20190212\")]\n    partial class simplecontent20190212\n    {\n        protected override void BuildTargetModel(ModelBuilder modelBuilder)\n        {\n#pragma warning disable 612, 618\n            modelBuilder\n                .HasAnnotation(\"Npgsql:ValueGenerationStrategy\", NpgsqlValueGenerationStrategy.SerialColumn)\n                .HasAnnotation(\"ProductVersion\", \"2.1.8-servicing-32085\")\n                .HasAnnotation(\"Relational:MaxIdentifierLength\", 63);\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Models.ContentHistory\", b =>\n                {\n                    b.Property<Guid>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnName(\"id\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ArchivedBy\")\n                        .HasColumnName(\"archived_by\")\n                        .HasMaxLength(255);\n\n                    b.Property<DateTime>(\"ArchivedUtc\")\n                        .HasColumnName(\"archived_utc\");\n\n                    b.Property<string>(\"Author\")\n                        .HasColumnName(\"author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasColumnName(\"categories_csv\");\n\n                    b.Property<string>(\"Content\")\n                        .HasColumnName(\"content\");\n\n                    b.Property<string>(\"ContentId\")\n                        .IsRequired()\n                        .HasColumnName(\"content_id\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ContentSource\")\n                        .IsRequired()\n                        .HasColumnName(\"content_source\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnName(\"content_type\")\n                        .HasMaxLength(50)\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasColumnName(\"correlation_key\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CreatedByUser\")\n                        .HasColumnName(\"created_by_user\")\n                        .HasMaxLength(100);\n\n                    b.Property<DateTime>(\"CreatedUtc\")\n                        .HasColumnName(\"created_utc\");\n\n                    b.Property<string>(\"DraftAuthor\")\n                        .HasColumnName(\"draft_author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"DraftContent\")\n                        .HasColumnName(\"draft_content\");\n\n                    b.Property<DateTime?>(\"DraftPubDate\")\n                        .HasColumnName(\"draft_pub_date\");\n\n                    b.Property<string>(\"DraftSerializedModel\")\n                        .HasColumnName(\"draft_serialized_model\");\n\n                    b.Property<bool>(\"IsDraftHx\")\n                        .HasColumnName(\"is_draft_hx\");\n\n                    b.Property<bool>(\"IsPublished\")\n                        .HasColumnName(\"is_published\");\n\n                    b.Property<DateTime>(\"LastModified\")\n                        .HasColumnName(\"last_modified\");\n\n                    b.Property<string>(\"LastModifiedByUser\")\n                        .HasColumnName(\"last_modified_by_user\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasColumnName(\"meta_description\");\n\n                    b.Property<string>(\"MetaHtml\")\n                        .HasColumnName(\"meta_html\");\n\n                    b.Property<string>(\"MetaJson\")\n                        .HasColumnName(\"meta_json\");\n\n                    b.Property<int>(\"PageOrder\")\n                        .HasColumnName(\"page_order\");\n\n                    b.Property<string>(\"ParentId\")\n                        .HasColumnName(\"parent_id\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ParentSlug\")\n                        .HasColumnName(\"parent_slug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ProjectId\")\n                        .HasColumnName(\"project_id\");\n\n                    b.Property<DateTime?>(\"PubDate\")\n                        .HasColumnName(\"pub_date\");\n\n                    b.Property<string>(\"SerializedModel\")\n                        .HasColumnName(\"serialized_model\");\n\n                    b.Property<string>(\"Serializer\")\n                        .HasColumnName(\"serializer\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"Slug\")\n                        .HasColumnName(\"slug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"TeaserOverride\")\n                        .HasColumnName(\"teaser_override\");\n\n                    b.Property<string>(\"TemplateKey\")\n                        .HasColumnName(\"template_key\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasColumnName(\"title\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ViewRoles\")\n                        .HasColumnName(\"view_roles\");\n\n                    b.Property<bool>(\"WasDeleted\")\n                        .HasColumnName(\"was_deleted\");\n\n                    b.HasKey(\"Id\")\n                        .HasName(\"pk_cs_content_history\");\n\n                    b.HasIndex(\"ContentId\")\n                        .HasName(\"ix_cs_content_history_content_id\");\n\n                    b.HasIndex(\"ContentSource\")\n                        .HasName(\"ix_cs_content_history_content_source\");\n\n                    b.HasIndex(\"CorrelationKey\")\n                        .HasName(\"ix_cs_content_history_correlation_key\");\n\n                    b.HasIndex(\"CreatedByUser\")\n                        .HasName(\"ix_cs_content_history_created_by_user\");\n\n                    b.HasIndex(\"LastModifiedByUser\")\n                        .HasName(\"ix_cs_content_history_last_modified_by_user\");\n\n                    b.HasIndex(\"Title\")\n                        .HasName(\"ix_cs_content_history_title\");\n\n                    b.ToTable(\"cs_content_history\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Models.ProjectSettings\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnName(\"id\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"AboutContent\")\n                        .HasColumnName(\"about_content\");\n\n                    b.Property<string>(\"AboutHeading\")\n                        .HasColumnName(\"about_heading\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"AddBlogToPagesTree\")\n                        .HasColumnName(\"add_blog_to_pages_tree\");\n\n                    b.Property<bool>(\"BlogMenuLinksToNewestPost\")\n                        .HasColumnName(\"blog_menu_links_to_newest_post\");\n\n                    b.Property<string>(\"BlogPageNavComponentVisibility\")\n                        .HasColumnName(\"blog_page_nav_component_visibility\")\n                        .HasMaxLength(255);\n\n                    b.Property<int>(\"BlogPagePosition\")\n                        .HasColumnName(\"blog_page_position\");\n\n                    b.Property<string>(\"BlogPageText\")\n                        .HasColumnName(\"blog_page_text\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CdnUrl\")\n                        .HasColumnName(\"cdn_url\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ChannelCategoriesCsv\")\n                        .HasColumnName(\"channel_categories_csv\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ChannelRating\")\n                        .HasColumnName(\"channel_rating\")\n                        .HasMaxLength(100);\n\n                    b.Property<int>(\"ChannelTimeToLive\")\n                        .HasColumnName(\"channel_time_to_live\");\n\n                    b.Property<string>(\"CommentNotificationEmail\")\n                        .HasColumnName(\"comment_notification_email\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"CopyrightNotice\")\n                        .HasColumnName(\"copyright_notice\")\n                        .HasMaxLength(255);\n\n                    b.Property<int>(\"DaysToComment\")\n                        .HasColumnName(\"days_to_comment\");\n\n                    b.Property<string>(\"DefaultContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnName(\"default_content_type\")\n                        .HasMaxLength(50)\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<int>(\"DefaultFeedItems\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnName(\"default_feed_items\")\n                        .HasDefaultValue(20);\n\n                    b.Property<string>(\"DefaultPageSlug\")\n                        .HasColumnName(\"default_page_slug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Description\")\n                        .HasColumnName(\"description\");\n\n                    b.Property<string>(\"DisqusShortName\")\n                        .HasColumnName(\"disqus_short_name\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"FacebookAppId\")\n                        .HasColumnName(\"facebook_app_id\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Image\")\n                        .HasColumnName(\"image\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"IncludePubDateInPostUrls\")\n                        .HasColumnName(\"include_pub_date_in_post_urls\");\n\n                    b.Property<string>(\"LanguageCode\")\n                        .HasColumnName(\"language_code\")\n                        .HasMaxLength(10);\n\n                    b.Property<string>(\"LocalMediaVirtualPath\")\n                        .HasColumnName(\"local_media_virtual_path\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ManagingEditorEmail\")\n                        .HasColumnName(\"managing_editor_email\")\n                        .HasMaxLength(100);\n\n                    b.Property<int>(\"MaxFeedItems\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnName(\"max_feed_items\")\n                        .HasDefaultValue(1000);\n\n                    b.Property<bool>(\"ModerateComments\")\n                        .HasColumnName(\"moderate_comments\");\n\n                    b.Property<int>(\"PostsPerPage\")\n                        .HasColumnName(\"posts_per_page\");\n\n                    b.Property<string>(\"PubDateFormat\")\n                        .HasColumnName(\"pub_date_format\")\n                        .HasMaxLength(75);\n\n                    b.Property<string>(\"Publisher\")\n                        .HasColumnName(\"publisher\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"PublisherEntityType\")\n                        .HasColumnName(\"publisher_entity_type\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PublisherLogoHeight\")\n                        .HasColumnName(\"publisher_logo_height\")\n                        .HasMaxLength(20);\n\n                    b.Property<string>(\"PublisherLogoUrl\")\n                        .HasColumnName(\"publisher_logo_url\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"PublisherLogoWidth\")\n                        .HasColumnName(\"publisher_logo_width\")\n                        .HasMaxLength(20);\n\n                    b.Property<string>(\"RecaptchaPrivateKey\")\n                        .HasColumnName(\"recaptcha_private_key\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RecaptchaPublicKey\")\n                        .HasColumnName(\"recaptcha_public_key\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RemoteFeedProcessorUseAgentFragment\")\n                        .HasColumnName(\"remote_feed_processor_use_agent_fragment\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RemoteFeedUrl\")\n                        .HasColumnName(\"remote_feed_url\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"ShowAboutBox\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnName(\"show_about_box\")\n                        .HasDefaultValue(true);\n\n                    b.Property<bool>(\"ShowFeaturedPostsOnDefaultPage\")\n                        .HasColumnName(\"show_featured_posts_on_default_page\");\n\n                    b.Property<bool>(\"ShowRecentPostsOnDefaultPage\")\n                        .HasColumnName(\"show_recent_posts_on_default_page\");\n\n                    b.Property<bool>(\"ShowRelatedPosts\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnName(\"show_related_posts\")\n                        .HasDefaultValue(true);\n\n                    b.Property<bool>(\"ShowTitle\")\n                        .HasColumnName(\"show_title\");\n\n                    b.Property<string>(\"SiteName\")\n                        .HasColumnName(\"site_name\")\n                        .HasMaxLength(200);\n\n                    b.Property<byte>(\"TeaserMode\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnName(\"teaser_mode\")\n                        .HasDefaultValue((byte)0);\n\n                    b.Property<int>(\"TeaserTruncationLength\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnName(\"teaser_truncation_length\")\n                        .HasDefaultValue(20);\n\n                    b.Property<byte>(\"TeaserTruncationMode\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnName(\"teaser_truncation_mode\")\n                        .HasDefaultValue((byte)0);\n\n                    b.Property<string>(\"TimeZoneId\")\n                        .HasColumnName(\"time_zone_id\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Title\")\n                        .HasColumnName(\"title\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"TwitterCreator\")\n                        .HasColumnName(\"twitter_creator\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"TwitterPublisher\")\n                        .HasColumnName(\"twitter_publisher\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"UseDefaultPageAsRootNode\")\n                        .HasColumnName(\"use_default_page_as_root_node\");\n\n                    b.Property<string>(\"WebmasterEmail\")\n                        .HasColumnName(\"webmaster_email\")\n                        .HasMaxLength(100);\n\n                    b.HasKey(\"Id\")\n                        .HasName(\"pk_cs_content_project\");\n\n                    b.ToTable(\"cs_content_project\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageCategory\", b =>\n                {\n                    b.Property<string>(\"Value\")\n                        .HasColumnName(\"value\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasColumnName(\"page_entity_id\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasColumnName(\"project_id\")\n                        .HasMaxLength(36);\n\n                    b.HasKey(\"Value\", \"PageEntityId\")\n                        .HasName(\"pk_cs_page_category\");\n\n                    b.HasIndex(\"PageEntityId\")\n                        .HasName(\"ix_cs_page_category_page_entity_id\");\n\n                    b.HasIndex(\"ProjectId\")\n                        .HasName(\"ix_cs_page_category_project_id\");\n\n                    b.HasIndex(\"Value\")\n                        .HasName(\"ix_cs_page_category_value\");\n\n                    b.ToTable(\"cs_page_category\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnName(\"id\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasColumnName(\"author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Content\")\n                        .HasColumnName(\"content\");\n\n                    b.Property<string>(\"Email\")\n                        .HasColumnName(\"email\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Ip\")\n                        .HasColumnName(\"ip\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"IsAdmin\")\n                        .HasColumnName(\"is_admin\");\n\n                    b.Property<bool>(\"IsApproved\")\n                        .HasColumnName(\"is_approved\");\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasColumnName(\"page_entity_id\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasColumnName(\"project_id\")\n                        .HasMaxLength(36);\n\n                    b.Property<DateTime>(\"PubDate\")\n                        .HasColumnName(\"pub_date\");\n\n                    b.Property<string>(\"UserAgent\")\n                        .HasColumnName(\"user_agent\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Website\")\n                        .HasColumnName(\"website\")\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\")\n                        .HasName(\"pk_cs_page_comment\");\n\n                    b.HasIndex(\"PageEntityId\")\n                        .HasName(\"ix_cs_page_comment_page_entity_id\");\n\n                    b.HasIndex(\"ProjectId\")\n                        .HasName(\"ix_cs_page_comment_project_id\");\n\n                    b.ToTable(\"cs_page_comment\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnName(\"id\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasColumnName(\"author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasColumnName(\"categories_csv\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"Content\")\n                        .HasColumnName(\"content\");\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnName(\"content_type\")\n                        .HasMaxLength(50)\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasColumnName(\"correlation_key\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CreatedByUser\")\n                        .HasColumnName(\"created_by_user\")\n                        .HasMaxLength(100);\n\n                    b.Property<DateTime>(\"CreatedUtc\")\n                        .HasColumnName(\"created_utc\");\n\n                    b.Property<bool>(\"DisableEditor\")\n                        .HasColumnName(\"disable_editor\");\n\n                    b.Property<string>(\"DraftAuthor\")\n                        .HasColumnName(\"draft_author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"DraftContent\")\n                        .HasColumnName(\"draft_content\");\n\n                    b.Property<DateTime?>(\"DraftPubDate\")\n                        .HasColumnName(\"draft_pub_date\");\n\n                    b.Property<string>(\"DraftSerializedModel\")\n                        .HasColumnName(\"draft_serialized_model\");\n\n                    b.Property<string>(\"ExternalUrl\")\n                        .HasColumnName(\"external_url\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"IsPublished\")\n                        .HasColumnName(\"is_published\");\n\n                    b.Property<DateTime>(\"LastModified\")\n                        .HasColumnName(\"last_modified\");\n\n                    b.Property<string>(\"LastModifiedByUser\")\n                        .HasColumnName(\"last_modified_by_user\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"MenuFilters\")\n                        .HasColumnName(\"menu_filters\")\n                        .HasMaxLength(500);\n\n                    b.Property<bool>(\"MenuOnly\")\n                        .HasColumnName(\"menu_only\");\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasColumnName(\"meta_description\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"MetaHtml\")\n                        .HasColumnName(\"meta_html\");\n\n                    b.Property<string>(\"MetaJson\")\n                        .HasColumnName(\"meta_json\");\n\n                    b.Property<int>(\"PageOrder\")\n                        .HasColumnName(\"page_order\");\n\n                    b.Property<string>(\"ParentId\")\n                        .HasColumnName(\"parent_id\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ParentSlug\")\n                        .HasColumnName(\"parent_slug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasColumnName(\"project_id\")\n                        .HasMaxLength(36);\n\n                    b.Property<DateTime?>(\"PubDate\")\n                        .HasColumnName(\"pub_date\");\n\n                    b.Property<string>(\"SerializedModel\")\n                        .HasColumnName(\"serialized_model\");\n\n                    b.Property<string>(\"Serializer\")\n                        .HasColumnName(\"serializer\")\n                        .HasMaxLength(50);\n\n                    b.Property<bool>(\"ShowCategories\")\n                        .HasColumnName(\"show_categories\");\n\n                    b.Property<bool>(\"ShowComments\")\n                        .HasColumnName(\"show_comments\");\n\n                    b.Property<bool>(\"ShowHeading\")\n                        .HasColumnName(\"show_heading\");\n\n                    b.Property<bool>(\"ShowLastModified\")\n                        .HasColumnName(\"show_last_modified\");\n\n                    b.Property<bool>(\"ShowMenu\")\n                        .HasColumnName(\"show_menu\");\n\n                    b.Property<bool>(\"ShowPubDate\")\n                        .HasColumnName(\"show_pub_date\");\n\n                    b.Property<string>(\"Slug\")\n                        .IsRequired()\n                        .HasColumnName(\"slug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"TemplateKey\")\n                        .HasColumnName(\"template_key\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasColumnName(\"title\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ViewRoles\")\n                        .HasColumnName(\"view_roles\");\n\n                    b.HasKey(\"Id\")\n                        .HasName(\"pk_cs_page\");\n\n                    b.HasIndex(\"CorrelationKey\")\n                        .HasName(\"ix_cs_page_correlation_key\");\n\n                    b.HasIndex(\"ParentId\")\n                        .HasName(\"ix_cs_page_parent_id\");\n\n                    b.HasIndex(\"ProjectId\")\n                        .HasName(\"ix_cs_page_project_id\");\n\n                    b.ToTable(\"cs_page\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageResourceEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnName(\"id\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Environment\")\n                        .IsRequired()\n                        .HasColumnName(\"environment\")\n                        .HasMaxLength(15);\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasColumnName(\"page_entity_id\")\n                        .HasMaxLength(36);\n\n                    b.Property<int>(\"Sort\")\n                        .HasColumnName(\"sort\");\n\n                    b.Property<string>(\"Type\")\n                        .IsRequired()\n                        .HasColumnName(\"type\")\n                        .HasMaxLength(10);\n\n                    b.Property<string>(\"Url\")\n                        .IsRequired()\n                        .HasColumnName(\"url\")\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\")\n                        .HasName(\"pk_cs_page_resource\");\n\n                    b.HasIndex(\"PageEntityId\")\n                        .HasName(\"ix_cs_page_resource_page_entity_id\");\n\n                    b.ToTable(\"cs_page_resource\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostCategory\", b =>\n                {\n                    b.Property<string>(\"Value\")\n                        .HasColumnName(\"value\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PostEntityId\")\n                        .HasColumnName(\"post_entity_id\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasColumnName(\"project_id\")\n                        .HasMaxLength(36);\n\n                    b.HasKey(\"Value\", \"PostEntityId\")\n                        .HasName(\"pk_cs_post_category\");\n\n                    b.HasIndex(\"PostEntityId\")\n                        .HasName(\"ix_cs_post_category_post_entity_id\");\n\n                    b.HasIndex(\"ProjectId\")\n                        .HasName(\"ix_cs_post_category_project_id\");\n\n                    b.HasIndex(\"Value\")\n                        .HasName(\"ix_cs_post_category_value\");\n\n                    b.ToTable(\"cs_post_category\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnName(\"id\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasColumnName(\"author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Content\")\n                        .HasColumnName(\"content\");\n\n                    b.Property<string>(\"Email\")\n                        .HasColumnName(\"email\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Ip\")\n                        .HasColumnName(\"ip\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"IsAdmin\")\n                        .HasColumnName(\"is_admin\");\n\n                    b.Property<bool>(\"IsApproved\")\n                        .HasColumnName(\"is_approved\");\n\n                    b.Property<string>(\"PostEntityId\")\n                        .HasColumnName(\"post_entity_id\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasColumnName(\"project_id\")\n                        .HasMaxLength(36);\n\n                    b.Property<DateTime>(\"PubDate\")\n                        .HasColumnName(\"pub_date\");\n\n                    b.Property<string>(\"UserAgent\")\n                        .HasColumnName(\"user_agent\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Website\")\n                        .HasColumnName(\"website\")\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\")\n                        .HasName(\"pk_cs_post_comment\");\n\n                    b.HasIndex(\"PostEntityId\")\n                        .HasName(\"ix_cs_post_comment_post_entity_id\");\n\n                    b.HasIndex(\"ProjectId\")\n                        .HasName(\"ix_cs_post_comment_project_id\");\n\n                    b.ToTable(\"cs_post_comment\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnName(\"id\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasColumnName(\"author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"AutoTeaser\")\n                        .HasColumnName(\"auto_teaser\");\n\n                    b.Property<string>(\"BlogId\")\n                        .IsRequired()\n                        .HasColumnName(\"blog_id\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasColumnName(\"categories_csv\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"Content\")\n                        .HasColumnName(\"content\");\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnName(\"content_type\")\n                        .HasMaxLength(50)\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasColumnName(\"correlation_key\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CreatedByUser\")\n                        .HasColumnName(\"created_by_user\")\n                        .HasMaxLength(100);\n\n                    b.Property<DateTime>(\"CreatedUtc\")\n                        .HasColumnName(\"created_utc\");\n\n                    b.Property<string>(\"DraftAuthor\")\n                        .HasColumnName(\"draft_author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"DraftContent\")\n                        .HasColumnName(\"draft_content\");\n\n                    b.Property<DateTime?>(\"DraftPubDate\")\n                        .HasColumnName(\"draft_pub_date\");\n\n                    b.Property<string>(\"DraftSerializedModel\")\n                        .HasColumnName(\"draft_serialized_model\");\n\n                    b.Property<string>(\"ImageUrl\")\n                        .HasColumnName(\"image_url\")\n                        .HasMaxLength(250);\n\n                    b.Property<bool>(\"IsFeatured\")\n                        .HasColumnName(\"is_featured\");\n\n                    b.Property<bool>(\"IsPublished\")\n                        .HasColumnName(\"is_published\");\n\n                    b.Property<DateTime>(\"LastModified\")\n                        .HasColumnName(\"last_modified\");\n\n                    b.Property<string>(\"LastModifiedByUser\")\n                        .HasColumnName(\"last_modified_by_user\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasColumnName(\"meta_description\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"MetaHtml\")\n                        .HasColumnName(\"meta_html\");\n\n                    b.Property<string>(\"MetaJson\")\n                        .HasColumnName(\"meta_json\");\n\n                    b.Property<DateTime?>(\"PubDate\")\n                        .HasColumnName(\"pub_date\");\n\n                    b.Property<string>(\"SerializedModel\")\n                        .HasColumnName(\"serialized_model\");\n\n                    b.Property<string>(\"Serializer\")\n                        .HasColumnName(\"serializer\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"Slug\")\n                        .IsRequired()\n                        .HasColumnName(\"slug\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"SuppressTeaser\")\n                        .HasColumnName(\"suppress_teaser\");\n\n                    b.Property<string>(\"TeaserOverride\")\n                        .HasColumnName(\"teaser_override\");\n\n                    b.Property<string>(\"TemplateKey\")\n                        .HasColumnName(\"template_key\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ThumbnailUrl\")\n                        .HasColumnName(\"thumbnail_url\")\n                        .HasMaxLength(250);\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasColumnName(\"title\")\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\")\n                        .HasName(\"pk_cs_post\");\n\n                    b.HasIndex(\"BlogId\")\n                        .HasName(\"ix_cs_post_blog_id\");\n\n                    b.HasIndex(\"CorrelationKey\")\n                        .HasName(\"ix_cs_post_correlation_key\");\n\n                    b.HasIndex(\"Slug\")\n                        .HasName(\"ix_cs_post_slug\");\n\n                    b.ToTable(\"cs_post\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\")\n                        .WithMany(\"PageComments\")\n                        .HasForeignKey(\"PageEntityId\")\n                        .HasConstraintName(\"fk_cs_page_comment_cs_page_page_entity_id\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageResourceEntity\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\")\n                        .WithMany(\"PageResources\")\n                        .HasForeignKey(\"PageEntityId\")\n                        .HasConstraintName(\"fk_cs_page_resource_cs_page_page_entity_id\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\")\n                        .WithMany(\"PostComments\")\n                        .HasForeignKey(\"PostEntityId\")\n                        .HasConstraintName(\"fk_cs_post_comment_cs_post_post_entity_id\");\n                });\n#pragma warning restore 612, 618\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.PostgreSql/Migrations/20190213121205_simplecontent-20190212.cs",
    "content": "﻿using Microsoft.EntityFrameworkCore.Migrations;\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.PostgreSql.Migrations\n{\n    public partial class simplecontent20190212 : Migration\n    {\n        protected override void Up(MigrationBuilder migrationBuilder)\n        {\n            migrationBuilder.AddColumn<string>(\n                name: \"about_heading\",\n                table: \"cs_content_project\",\n                maxLength: 255,\n                nullable: true);\n\n            migrationBuilder.AddColumn<bool>(\n                name: \"show_about_box\",\n                table: \"cs_content_project\",\n                nullable: false,\n                defaultValue: true);\n\n            migrationBuilder.AddColumn<bool>(\n                name: \"show_related_posts\",\n                table: \"cs_content_project\",\n                nullable: false,\n                defaultValue: true);\n        }\n\n        protected override void Down(MigrationBuilder migrationBuilder)\n        {\n            migrationBuilder.DropColumn(\n                name: \"about_heading\",\n                table: \"cs_content_project\");\n\n            migrationBuilder.DropColumn(\n                name: \"show_about_box\",\n                table: \"cs_content_project\");\n\n            migrationBuilder.DropColumn(\n                name: \"show_related_posts\",\n                table: \"cs_content_project\");\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.PostgreSql/Migrations/20190213121232_simplecontent-20190213.Designer.cs",
    "content": "﻿// <auto-generated />\nusing System;\nusing Microsoft.EntityFrameworkCore;\nusing Microsoft.EntityFrameworkCore.Infrastructure;\nusing Microsoft.EntityFrameworkCore.Migrations;\nusing Microsoft.EntityFrameworkCore.Storage.ValueConversion;\nusing Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;\nusing cloudscribe.SimpleContent.Models;\nusing cloudscribe.SimpleContent.Storage.EFCore.PostgreSql;\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.PostgreSql.Migrations\n{\n    [DbContext(typeof(SimpleContentDbContext))]\n    [Migration(\"20190213121232_simplecontent-20190213\")]\n    partial class simplecontent20190213\n    {\n        protected override void BuildTargetModel(ModelBuilder modelBuilder)\n        {\n#pragma warning disable 612, 618\n            modelBuilder\n                .HasAnnotation(\"Npgsql:ValueGenerationStrategy\", NpgsqlValueGenerationStrategy.SerialColumn)\n                .HasAnnotation(\"ProductVersion\", \"2.1.8-servicing-32085\")\n                .HasAnnotation(\"Relational:MaxIdentifierLength\", 63);\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Models.ContentHistory\", b =>\n                {\n                    b.Property<Guid>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnName(\"id\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ArchivedBy\")\n                        .HasColumnName(\"archived_by\")\n                        .HasMaxLength(255);\n\n                    b.Property<DateTime>(\"ArchivedUtc\")\n                        .HasColumnName(\"archived_utc\");\n\n                    b.Property<string>(\"Author\")\n                        .HasColumnName(\"author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasColumnName(\"categories_csv\");\n\n                    b.Property<string>(\"Content\")\n                        .HasColumnName(\"content\");\n\n                    b.Property<string>(\"ContentId\")\n                        .IsRequired()\n                        .HasColumnName(\"content_id\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ContentSource\")\n                        .IsRequired()\n                        .HasColumnName(\"content_source\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnName(\"content_type\")\n                        .HasMaxLength(50)\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasColumnName(\"correlation_key\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CreatedByUser\")\n                        .HasColumnName(\"created_by_user\")\n                        .HasMaxLength(100);\n\n                    b.Property<DateTime>(\"CreatedUtc\")\n                        .HasColumnName(\"created_utc\");\n\n                    b.Property<string>(\"DraftAuthor\")\n                        .HasColumnName(\"draft_author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"DraftContent\")\n                        .HasColumnName(\"draft_content\");\n\n                    b.Property<DateTime?>(\"DraftPubDate\")\n                        .HasColumnName(\"draft_pub_date\");\n\n                    b.Property<string>(\"DraftSerializedModel\")\n                        .HasColumnName(\"draft_serialized_model\");\n\n                    b.Property<bool>(\"IsDraftHx\")\n                        .HasColumnName(\"is_draft_hx\");\n\n                    b.Property<bool>(\"IsPublished\")\n                        .HasColumnName(\"is_published\");\n\n                    b.Property<DateTime>(\"LastModified\")\n                        .HasColumnName(\"last_modified\");\n\n                    b.Property<string>(\"LastModifiedByUser\")\n                        .HasColumnName(\"last_modified_by_user\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasColumnName(\"meta_description\");\n\n                    b.Property<string>(\"MetaHtml\")\n                        .HasColumnName(\"meta_html\");\n\n                    b.Property<string>(\"MetaJson\")\n                        .HasColumnName(\"meta_json\");\n\n                    b.Property<int>(\"PageOrder\")\n                        .HasColumnName(\"page_order\");\n\n                    b.Property<string>(\"ParentId\")\n                        .HasColumnName(\"parent_id\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ParentSlug\")\n                        .HasColumnName(\"parent_slug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ProjectId\")\n                        .HasColumnName(\"project_id\");\n\n                    b.Property<DateTime?>(\"PubDate\")\n                        .HasColumnName(\"pub_date\");\n\n                    b.Property<string>(\"SerializedModel\")\n                        .HasColumnName(\"serialized_model\");\n\n                    b.Property<string>(\"Serializer\")\n                        .HasColumnName(\"serializer\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"Slug\")\n                        .HasColumnName(\"slug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"TeaserOverride\")\n                        .HasColumnName(\"teaser_override\");\n\n                    b.Property<string>(\"TemplateKey\")\n                        .HasColumnName(\"template_key\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasColumnName(\"title\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ViewRoles\")\n                        .HasColumnName(\"view_roles\");\n\n                    b.Property<bool>(\"WasDeleted\")\n                        .HasColumnName(\"was_deleted\");\n\n                    b.HasKey(\"Id\")\n                        .HasName(\"pk_cs_content_history\");\n\n                    b.HasIndex(\"ContentId\")\n                        .HasName(\"ix_cs_content_history_content_id\");\n\n                    b.HasIndex(\"ContentSource\")\n                        .HasName(\"ix_cs_content_history_content_source\");\n\n                    b.HasIndex(\"CorrelationKey\")\n                        .HasName(\"ix_cs_content_history_correlation_key\");\n\n                    b.HasIndex(\"CreatedByUser\")\n                        .HasName(\"ix_cs_content_history_created_by_user\");\n\n                    b.HasIndex(\"LastModifiedByUser\")\n                        .HasName(\"ix_cs_content_history_last_modified_by_user\");\n\n                    b.HasIndex(\"Title\")\n                        .HasName(\"ix_cs_content_history_title\");\n\n                    b.ToTable(\"cs_content_history\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Models.ProjectSettings\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnName(\"id\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"AboutContent\")\n                        .HasColumnName(\"about_content\");\n\n                    b.Property<string>(\"AboutHeading\")\n                        .HasColumnName(\"about_heading\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"AddBlogToPagesTree\")\n                        .HasColumnName(\"add_blog_to_pages_tree\");\n\n                    b.Property<bool>(\"BlogMenuLinksToNewestPost\")\n                        .HasColumnName(\"blog_menu_links_to_newest_post\");\n\n                    b.Property<string>(\"BlogPageNavComponentVisibility\")\n                        .HasColumnName(\"blog_page_nav_component_visibility\")\n                        .HasMaxLength(255);\n\n                    b.Property<int>(\"BlogPagePosition\")\n                        .HasColumnName(\"blog_page_position\");\n\n                    b.Property<string>(\"BlogPageText\")\n                        .HasColumnName(\"blog_page_text\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CdnUrl\")\n                        .HasColumnName(\"cdn_url\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ChannelCategoriesCsv\")\n                        .HasColumnName(\"channel_categories_csv\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ChannelRating\")\n                        .HasColumnName(\"channel_rating\")\n                        .HasMaxLength(100);\n\n                    b.Property<int>(\"ChannelTimeToLive\")\n                        .HasColumnName(\"channel_time_to_live\");\n\n                    b.Property<string>(\"CommentNotificationEmail\")\n                        .HasColumnName(\"comment_notification_email\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"CopyrightNotice\")\n                        .HasColumnName(\"copyright_notice\")\n                        .HasMaxLength(255);\n\n                    b.Property<int>(\"DaysToComment\")\n                        .HasColumnName(\"days_to_comment\");\n\n                    b.Property<string>(\"DefaultContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnName(\"default_content_type\")\n                        .HasMaxLength(50)\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<int>(\"DefaultFeedItems\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnName(\"default_feed_items\")\n                        .HasDefaultValue(20);\n\n                    b.Property<string>(\"DefaultPageSlug\")\n                        .HasColumnName(\"default_page_slug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Description\")\n                        .HasColumnName(\"description\");\n\n                    b.Property<string>(\"DisqusShortName\")\n                        .HasColumnName(\"disqus_short_name\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"FacebookAppId\")\n                        .HasColumnName(\"facebook_app_id\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Image\")\n                        .HasColumnName(\"image\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"IncludePubDateInPostUrls\")\n                        .HasColumnName(\"include_pub_date_in_post_urls\");\n\n                    b.Property<string>(\"LanguageCode\")\n                        .HasColumnName(\"language_code\")\n                        .HasMaxLength(10);\n\n                    b.Property<string>(\"LocalMediaVirtualPath\")\n                        .HasColumnName(\"local_media_virtual_path\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ManagingEditorEmail\")\n                        .HasColumnName(\"managing_editor_email\")\n                        .HasMaxLength(100);\n\n                    b.Property<int>(\"MaxFeedItems\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnName(\"max_feed_items\")\n                        .HasDefaultValue(1000);\n\n                    b.Property<bool>(\"ModerateComments\")\n                        .HasColumnName(\"moderate_comments\");\n\n                    b.Property<int>(\"PostsPerPage\")\n                        .HasColumnName(\"posts_per_page\");\n\n                    b.Property<string>(\"PubDateFormat\")\n                        .HasColumnName(\"pub_date_format\")\n                        .HasMaxLength(75);\n\n                    b.Property<string>(\"Publisher\")\n                        .HasColumnName(\"publisher\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"PublisherEntityType\")\n                        .HasColumnName(\"publisher_entity_type\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PublisherLogoHeight\")\n                        .HasColumnName(\"publisher_logo_height\")\n                        .HasMaxLength(20);\n\n                    b.Property<string>(\"PublisherLogoUrl\")\n                        .HasColumnName(\"publisher_logo_url\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"PublisherLogoWidth\")\n                        .HasColumnName(\"publisher_logo_width\")\n                        .HasMaxLength(20);\n\n                    b.Property<string>(\"RecaptchaPrivateKey\")\n                        .HasColumnName(\"recaptcha_private_key\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RecaptchaPublicKey\")\n                        .HasColumnName(\"recaptcha_public_key\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RemoteFeedProcessorUseAgentFragment\")\n                        .HasColumnName(\"remote_feed_processor_use_agent_fragment\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RemoteFeedUrl\")\n                        .HasColumnName(\"remote_feed_url\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"ShowAboutBox\")\n                        .HasColumnName(\"show_about_box\");\n\n                    b.Property<bool>(\"ShowFeaturedPostsOnDefaultPage\")\n                        .HasColumnName(\"show_featured_posts_on_default_page\");\n\n                    b.Property<bool>(\"ShowRecentPostsOnDefaultPage\")\n                        .HasColumnName(\"show_recent_posts_on_default_page\");\n\n                    b.Property<bool>(\"ShowRelatedPosts\")\n                        .HasColumnName(\"show_related_posts\");\n\n                    b.Property<bool>(\"ShowTitle\")\n                        .HasColumnName(\"show_title\");\n\n                    b.Property<string>(\"SiteName\")\n                        .HasColumnName(\"site_name\")\n                        .HasMaxLength(200);\n\n                    b.Property<byte>(\"TeaserMode\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnName(\"teaser_mode\")\n                        .HasDefaultValue((byte)0);\n\n                    b.Property<int>(\"TeaserTruncationLength\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnName(\"teaser_truncation_length\")\n                        .HasDefaultValue(20);\n\n                    b.Property<byte>(\"TeaserTruncationMode\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnName(\"teaser_truncation_mode\")\n                        .HasDefaultValue((byte)0);\n\n                    b.Property<string>(\"TimeZoneId\")\n                        .HasColumnName(\"time_zone_id\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Title\")\n                        .HasColumnName(\"title\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"TwitterCreator\")\n                        .HasColumnName(\"twitter_creator\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"TwitterPublisher\")\n                        .HasColumnName(\"twitter_publisher\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"UseDefaultPageAsRootNode\")\n                        .HasColumnName(\"use_default_page_as_root_node\");\n\n                    b.Property<string>(\"WebmasterEmail\")\n                        .HasColumnName(\"webmaster_email\")\n                        .HasMaxLength(100);\n\n                    b.HasKey(\"Id\")\n                        .HasName(\"pk_cs_content_project\");\n\n                    b.ToTable(\"cs_content_project\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageCategory\", b =>\n                {\n                    b.Property<string>(\"Value\")\n                        .HasColumnName(\"value\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasColumnName(\"page_entity_id\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasColumnName(\"project_id\")\n                        .HasMaxLength(36);\n\n                    b.HasKey(\"Value\", \"PageEntityId\")\n                        .HasName(\"pk_cs_page_category\");\n\n                    b.HasIndex(\"PageEntityId\")\n                        .HasName(\"ix_cs_page_category_page_entity_id\");\n\n                    b.HasIndex(\"ProjectId\")\n                        .HasName(\"ix_cs_page_category_project_id\");\n\n                    b.HasIndex(\"Value\")\n                        .HasName(\"ix_cs_page_category_value\");\n\n                    b.ToTable(\"cs_page_category\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnName(\"id\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasColumnName(\"author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Content\")\n                        .HasColumnName(\"content\");\n\n                    b.Property<string>(\"Email\")\n                        .HasColumnName(\"email\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Ip\")\n                        .HasColumnName(\"ip\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"IsAdmin\")\n                        .HasColumnName(\"is_admin\");\n\n                    b.Property<bool>(\"IsApproved\")\n                        .HasColumnName(\"is_approved\");\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasColumnName(\"page_entity_id\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasColumnName(\"project_id\")\n                        .HasMaxLength(36);\n\n                    b.Property<DateTime>(\"PubDate\")\n                        .HasColumnName(\"pub_date\");\n\n                    b.Property<string>(\"UserAgent\")\n                        .HasColumnName(\"user_agent\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Website\")\n                        .HasColumnName(\"website\")\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\")\n                        .HasName(\"pk_cs_page_comment\");\n\n                    b.HasIndex(\"PageEntityId\")\n                        .HasName(\"ix_cs_page_comment_page_entity_id\");\n\n                    b.HasIndex(\"ProjectId\")\n                        .HasName(\"ix_cs_page_comment_project_id\");\n\n                    b.ToTable(\"cs_page_comment\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnName(\"id\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasColumnName(\"author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasColumnName(\"categories_csv\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"Content\")\n                        .HasColumnName(\"content\");\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnName(\"content_type\")\n                        .HasMaxLength(50)\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasColumnName(\"correlation_key\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CreatedByUser\")\n                        .HasColumnName(\"created_by_user\")\n                        .HasMaxLength(100);\n\n                    b.Property<DateTime>(\"CreatedUtc\")\n                        .HasColumnName(\"created_utc\");\n\n                    b.Property<bool>(\"DisableEditor\")\n                        .HasColumnName(\"disable_editor\");\n\n                    b.Property<string>(\"DraftAuthor\")\n                        .HasColumnName(\"draft_author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"DraftContent\")\n                        .HasColumnName(\"draft_content\");\n\n                    b.Property<DateTime?>(\"DraftPubDate\")\n                        .HasColumnName(\"draft_pub_date\");\n\n                    b.Property<string>(\"DraftSerializedModel\")\n                        .HasColumnName(\"draft_serialized_model\");\n\n                    b.Property<string>(\"ExternalUrl\")\n                        .HasColumnName(\"external_url\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"IsPublished\")\n                        .HasColumnName(\"is_published\");\n\n                    b.Property<DateTime>(\"LastModified\")\n                        .HasColumnName(\"last_modified\");\n\n                    b.Property<string>(\"LastModifiedByUser\")\n                        .HasColumnName(\"last_modified_by_user\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"MenuFilters\")\n                        .HasColumnName(\"menu_filters\")\n                        .HasMaxLength(500);\n\n                    b.Property<bool>(\"MenuOnly\")\n                        .HasColumnName(\"menu_only\");\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasColumnName(\"meta_description\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"MetaHtml\")\n                        .HasColumnName(\"meta_html\");\n\n                    b.Property<string>(\"MetaJson\")\n                        .HasColumnName(\"meta_json\");\n\n                    b.Property<int>(\"PageOrder\")\n                        .HasColumnName(\"page_order\");\n\n                    b.Property<string>(\"ParentId\")\n                        .HasColumnName(\"parent_id\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ParentSlug\")\n                        .HasColumnName(\"parent_slug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasColumnName(\"project_id\")\n                        .HasMaxLength(36);\n\n                    b.Property<DateTime?>(\"PubDate\")\n                        .HasColumnName(\"pub_date\");\n\n                    b.Property<string>(\"SerializedModel\")\n                        .HasColumnName(\"serialized_model\");\n\n                    b.Property<string>(\"Serializer\")\n                        .HasColumnName(\"serializer\")\n                        .HasMaxLength(50);\n\n                    b.Property<bool>(\"ShowCategories\")\n                        .HasColumnName(\"show_categories\");\n\n                    b.Property<bool>(\"ShowComments\")\n                        .HasColumnName(\"show_comments\");\n\n                    b.Property<bool>(\"ShowHeading\")\n                        .HasColumnName(\"show_heading\");\n\n                    b.Property<bool>(\"ShowLastModified\")\n                        .HasColumnName(\"show_last_modified\");\n\n                    b.Property<bool>(\"ShowMenu\")\n                        .HasColumnName(\"show_menu\");\n\n                    b.Property<bool>(\"ShowPubDate\")\n                        .HasColumnName(\"show_pub_date\");\n\n                    b.Property<string>(\"Slug\")\n                        .IsRequired()\n                        .HasColumnName(\"slug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"TemplateKey\")\n                        .HasColumnName(\"template_key\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasColumnName(\"title\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ViewRoles\")\n                        .HasColumnName(\"view_roles\");\n\n                    b.HasKey(\"Id\")\n                        .HasName(\"pk_cs_page\");\n\n                    b.HasIndex(\"CorrelationKey\")\n                        .HasName(\"ix_cs_page_correlation_key\");\n\n                    b.HasIndex(\"ParentId\")\n                        .HasName(\"ix_cs_page_parent_id\");\n\n                    b.HasIndex(\"ProjectId\")\n                        .HasName(\"ix_cs_page_project_id\");\n\n                    b.ToTable(\"cs_page\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageResourceEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnName(\"id\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Environment\")\n                        .IsRequired()\n                        .HasColumnName(\"environment\")\n                        .HasMaxLength(15);\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasColumnName(\"page_entity_id\")\n                        .HasMaxLength(36);\n\n                    b.Property<int>(\"Sort\")\n                        .HasColumnName(\"sort\");\n\n                    b.Property<string>(\"Type\")\n                        .IsRequired()\n                        .HasColumnName(\"type\")\n                        .HasMaxLength(10);\n\n                    b.Property<string>(\"Url\")\n                        .IsRequired()\n                        .HasColumnName(\"url\")\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\")\n                        .HasName(\"pk_cs_page_resource\");\n\n                    b.HasIndex(\"PageEntityId\")\n                        .HasName(\"ix_cs_page_resource_page_entity_id\");\n\n                    b.ToTable(\"cs_page_resource\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostCategory\", b =>\n                {\n                    b.Property<string>(\"Value\")\n                        .HasColumnName(\"value\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PostEntityId\")\n                        .HasColumnName(\"post_entity_id\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasColumnName(\"project_id\")\n                        .HasMaxLength(36);\n\n                    b.HasKey(\"Value\", \"PostEntityId\")\n                        .HasName(\"pk_cs_post_category\");\n\n                    b.HasIndex(\"PostEntityId\")\n                        .HasName(\"ix_cs_post_category_post_entity_id\");\n\n                    b.HasIndex(\"ProjectId\")\n                        .HasName(\"ix_cs_post_category_project_id\");\n\n                    b.HasIndex(\"Value\")\n                        .HasName(\"ix_cs_post_category_value\");\n\n                    b.ToTable(\"cs_post_category\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnName(\"id\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasColumnName(\"author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Content\")\n                        .HasColumnName(\"content\");\n\n                    b.Property<string>(\"Email\")\n                        .HasColumnName(\"email\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Ip\")\n                        .HasColumnName(\"ip\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"IsAdmin\")\n                        .HasColumnName(\"is_admin\");\n\n                    b.Property<bool>(\"IsApproved\")\n                        .HasColumnName(\"is_approved\");\n\n                    b.Property<string>(\"PostEntityId\")\n                        .HasColumnName(\"post_entity_id\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasColumnName(\"project_id\")\n                        .HasMaxLength(36);\n\n                    b.Property<DateTime>(\"PubDate\")\n                        .HasColumnName(\"pub_date\");\n\n                    b.Property<string>(\"UserAgent\")\n                        .HasColumnName(\"user_agent\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Website\")\n                        .HasColumnName(\"website\")\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\")\n                        .HasName(\"pk_cs_post_comment\");\n\n                    b.HasIndex(\"PostEntityId\")\n                        .HasName(\"ix_cs_post_comment_post_entity_id\");\n\n                    b.HasIndex(\"ProjectId\")\n                        .HasName(\"ix_cs_post_comment_project_id\");\n\n                    b.ToTable(\"cs_post_comment\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnName(\"id\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasColumnName(\"author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"AutoTeaser\")\n                        .HasColumnName(\"auto_teaser\");\n\n                    b.Property<string>(\"BlogId\")\n                        .IsRequired()\n                        .HasColumnName(\"blog_id\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasColumnName(\"categories_csv\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"Content\")\n                        .HasColumnName(\"content\");\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnName(\"content_type\")\n                        .HasMaxLength(50)\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasColumnName(\"correlation_key\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CreatedByUser\")\n                        .HasColumnName(\"created_by_user\")\n                        .HasMaxLength(100);\n\n                    b.Property<DateTime>(\"CreatedUtc\")\n                        .HasColumnName(\"created_utc\");\n\n                    b.Property<string>(\"DraftAuthor\")\n                        .HasColumnName(\"draft_author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"DraftContent\")\n                        .HasColumnName(\"draft_content\");\n\n                    b.Property<DateTime?>(\"DraftPubDate\")\n                        .HasColumnName(\"draft_pub_date\");\n\n                    b.Property<string>(\"DraftSerializedModel\")\n                        .HasColumnName(\"draft_serialized_model\");\n\n                    b.Property<string>(\"ImageUrl\")\n                        .HasColumnName(\"image_url\")\n                        .HasMaxLength(250);\n\n                    b.Property<bool>(\"IsFeatured\")\n                        .HasColumnName(\"is_featured\");\n\n                    b.Property<bool>(\"IsPublished\")\n                        .HasColumnName(\"is_published\");\n\n                    b.Property<DateTime>(\"LastModified\")\n                        .HasColumnName(\"last_modified\");\n\n                    b.Property<string>(\"LastModifiedByUser\")\n                        .HasColumnName(\"last_modified_by_user\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasColumnName(\"meta_description\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"MetaHtml\")\n                        .HasColumnName(\"meta_html\");\n\n                    b.Property<string>(\"MetaJson\")\n                        .HasColumnName(\"meta_json\");\n\n                    b.Property<DateTime?>(\"PubDate\")\n                        .HasColumnName(\"pub_date\");\n\n                    b.Property<string>(\"SerializedModel\")\n                        .HasColumnName(\"serialized_model\");\n\n                    b.Property<string>(\"Serializer\")\n                        .HasColumnName(\"serializer\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"Slug\")\n                        .IsRequired()\n                        .HasColumnName(\"slug\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"SuppressTeaser\")\n                        .HasColumnName(\"suppress_teaser\");\n\n                    b.Property<string>(\"TeaserOverride\")\n                        .HasColumnName(\"teaser_override\");\n\n                    b.Property<string>(\"TemplateKey\")\n                        .HasColumnName(\"template_key\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ThumbnailUrl\")\n                        .HasColumnName(\"thumbnail_url\")\n                        .HasMaxLength(250);\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasColumnName(\"title\")\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\")\n                        .HasName(\"pk_cs_post\");\n\n                    b.HasIndex(\"BlogId\")\n                        .HasName(\"ix_cs_post_blog_id\");\n\n                    b.HasIndex(\"CorrelationKey\")\n                        .HasName(\"ix_cs_post_correlation_key\");\n\n                    b.HasIndex(\"Slug\")\n                        .HasName(\"ix_cs_post_slug\");\n\n                    b.ToTable(\"cs_post\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\")\n                        .WithMany(\"PageComments\")\n                        .HasForeignKey(\"PageEntityId\")\n                        .HasConstraintName(\"fk_cs_page_comment_cs_page_page_entity_id\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageResourceEntity\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\")\n                        .WithMany(\"PageResources\")\n                        .HasForeignKey(\"PageEntityId\")\n                        .HasConstraintName(\"fk_cs_page_resource_cs_page_page_entity_id\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\")\n                        .WithMany(\"PostComments\")\n                        .HasForeignKey(\"PostEntityId\")\n                        .HasConstraintName(\"fk_cs_post_comment_cs_post_post_entity_id\");\n                });\n#pragma warning restore 612, 618\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.PostgreSql/Migrations/20190213121232_simplecontent-20190213.cs",
    "content": "﻿using Microsoft.EntityFrameworkCore.Migrations;\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.PostgreSql.Migrations\n{\n    public partial class simplecontent20190213 : Migration\n    {\n        protected override void Up(MigrationBuilder migrationBuilder)\n        {\n            migrationBuilder.AlterColumn<bool>(\n                name: \"show_related_posts\",\n                table: \"cs_content_project\",\n                nullable: false,\n                oldClrType: typeof(bool),\n                oldDefaultValue: true);\n\n            migrationBuilder.AlterColumn<bool>(\n                name: \"show_about_box\",\n                table: \"cs_content_project\",\n                nullable: false,\n                oldClrType: typeof(bool),\n                oldDefaultValue: true);\n        }\n\n        protected override void Down(MigrationBuilder migrationBuilder)\n        {\n            migrationBuilder.AlterColumn<bool>(\n                name: \"show_related_posts\",\n                table: \"cs_content_project\",\n                nullable: false,\n                defaultValue: true,\n                oldClrType: typeof(bool));\n\n            migrationBuilder.AlterColumn<bool>(\n                name: \"show_about_box\",\n                table: \"cs_content_project\",\n                nullable: false,\n                defaultValue: true,\n                oldClrType: typeof(bool));\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.PostgreSql/Migrations/20190304162045_simplecontent-20190304.Designer.cs",
    "content": "﻿// <auto-generated />\nusing System;\nusing Microsoft.EntityFrameworkCore;\nusing Microsoft.EntityFrameworkCore.Infrastructure;\nusing Microsoft.EntityFrameworkCore.Migrations;\nusing Microsoft.EntityFrameworkCore.Storage.ValueConversion;\nusing Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;\nusing cloudscribe.SimpleContent.Models;\nusing cloudscribe.SimpleContent.Storage.EFCore.PostgreSql;\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.PostgreSql.Migrations\n{\n    [DbContext(typeof(SimpleContentDbContext))]\n    [Migration(\"20190304162045_simplecontent-20190304\")]\n    partial class simplecontent20190304\n    {\n        protected override void BuildTargetModel(ModelBuilder modelBuilder)\n        {\n#pragma warning disable 612, 618\n            modelBuilder\n                .HasAnnotation(\"Npgsql:ValueGenerationStrategy\", NpgsqlValueGenerationStrategy.SerialColumn)\n                .HasAnnotation(\"ProductVersion\", \"2.1.8-servicing-32085\")\n                .HasAnnotation(\"Relational:MaxIdentifierLength\", 63);\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Models.ContentHistory\", b =>\n                {\n                    b.Property<Guid>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnName(\"id\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ArchivedBy\")\n                        .HasColumnName(\"archived_by\")\n                        .HasMaxLength(255);\n\n                    b.Property<DateTime>(\"ArchivedUtc\")\n                        .HasColumnName(\"archived_utc\");\n\n                    b.Property<string>(\"Author\")\n                        .HasColumnName(\"author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasColumnName(\"categories_csv\");\n\n                    b.Property<string>(\"Content\")\n                        .HasColumnName(\"content\");\n\n                    b.Property<string>(\"ContentId\")\n                        .IsRequired()\n                        .HasColumnName(\"content_id\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ContentSource\")\n                        .IsRequired()\n                        .HasColumnName(\"content_source\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnName(\"content_type\")\n                        .HasMaxLength(50)\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasColumnName(\"correlation_key\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CreatedByUser\")\n                        .HasColumnName(\"created_by_user\")\n                        .HasMaxLength(100);\n\n                    b.Property<DateTime>(\"CreatedUtc\")\n                        .HasColumnName(\"created_utc\");\n\n                    b.Property<string>(\"DraftAuthor\")\n                        .HasColumnName(\"draft_author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"DraftContent\")\n                        .HasColumnName(\"draft_content\");\n\n                    b.Property<DateTime?>(\"DraftPubDate\")\n                        .HasColumnName(\"draft_pub_date\");\n\n                    b.Property<string>(\"DraftSerializedModel\")\n                        .HasColumnName(\"draft_serialized_model\");\n\n                    b.Property<bool>(\"IsDraftHx\")\n                        .HasColumnName(\"is_draft_hx\");\n\n                    b.Property<bool>(\"IsPublished\")\n                        .HasColumnName(\"is_published\");\n\n                    b.Property<DateTime>(\"LastModified\")\n                        .HasColumnName(\"last_modified\");\n\n                    b.Property<string>(\"LastModifiedByUser\")\n                        .HasColumnName(\"last_modified_by_user\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasColumnName(\"meta_description\");\n\n                    b.Property<string>(\"MetaHtml\")\n                        .HasColumnName(\"meta_html\");\n\n                    b.Property<string>(\"MetaJson\")\n                        .HasColumnName(\"meta_json\");\n\n                    b.Property<int>(\"PageOrder\")\n                        .HasColumnName(\"page_order\");\n\n                    b.Property<string>(\"ParentId\")\n                        .HasColumnName(\"parent_id\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ParentSlug\")\n                        .HasColumnName(\"parent_slug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ProjectId\")\n                        .HasColumnName(\"project_id\")\n                        .HasMaxLength(50);\n\n                    b.Property<DateTime?>(\"PubDate\")\n                        .HasColumnName(\"pub_date\");\n\n                    b.Property<string>(\"SerializedModel\")\n                        .HasColumnName(\"serialized_model\");\n\n                    b.Property<string>(\"Serializer\")\n                        .HasColumnName(\"serializer\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"Slug\")\n                        .HasColumnName(\"slug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"TeaserOverride\")\n                        .HasColumnName(\"teaser_override\");\n\n                    b.Property<string>(\"TemplateKey\")\n                        .HasColumnName(\"template_key\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasColumnName(\"title\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ViewRoles\")\n                        .HasColumnName(\"view_roles\");\n\n                    b.Property<bool>(\"WasDeleted\")\n                        .HasColumnName(\"was_deleted\");\n\n                    b.HasKey(\"Id\")\n                        .HasName(\"pk_cs_content_history\");\n\n                    b.HasIndex(\"ContentId\")\n                        .HasName(\"ix_cs_content_history_content_id\");\n\n                    b.HasIndex(\"ContentSource\")\n                        .HasName(\"ix_cs_content_history_content_source\");\n\n                    b.HasIndex(\"CorrelationKey\")\n                        .HasName(\"ix_cs_content_history_correlation_key\");\n\n                    b.HasIndex(\"CreatedByUser\")\n                        .HasName(\"ix_cs_content_history_created_by_user\");\n\n                    b.HasIndex(\"LastModifiedByUser\")\n                        .HasName(\"ix_cs_content_history_last_modified_by_user\");\n\n                    b.HasIndex(\"Title\")\n                        .HasName(\"ix_cs_content_history_title\");\n\n                    b.ToTable(\"cs_content_history\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Models.ProjectSettings\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnName(\"id\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"AboutContent\")\n                        .HasColumnName(\"about_content\");\n\n                    b.Property<string>(\"AboutHeading\")\n                        .HasColumnName(\"about_heading\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"AddBlogToPagesTree\")\n                        .HasColumnName(\"add_blog_to_pages_tree\");\n\n                    b.Property<bool>(\"BlogMenuLinksToNewestPost\")\n                        .HasColumnName(\"blog_menu_links_to_newest_post\");\n\n                    b.Property<string>(\"BlogPageNavComponentVisibility\")\n                        .HasColumnName(\"blog_page_nav_component_visibility\")\n                        .HasMaxLength(255);\n\n                    b.Property<int>(\"BlogPagePosition\")\n                        .HasColumnName(\"blog_page_position\");\n\n                    b.Property<string>(\"BlogPageText\")\n                        .HasColumnName(\"blog_page_text\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CdnUrl\")\n                        .HasColumnName(\"cdn_url\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ChannelCategoriesCsv\")\n                        .HasColumnName(\"channel_categories_csv\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ChannelRating\")\n                        .HasColumnName(\"channel_rating\")\n                        .HasMaxLength(100);\n\n                    b.Property<int>(\"ChannelTimeToLive\")\n                        .HasColumnName(\"channel_time_to_live\");\n\n                    b.Property<string>(\"CommentNotificationEmail\")\n                        .HasColumnName(\"comment_notification_email\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"CopyrightNotice\")\n                        .HasColumnName(\"copyright_notice\")\n                        .HasMaxLength(255);\n\n                    b.Property<int>(\"DaysToComment\")\n                        .HasColumnName(\"days_to_comment\");\n\n                    b.Property<string>(\"DefaultContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnName(\"default_content_type\")\n                        .HasMaxLength(50)\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<int>(\"DefaultFeedItems\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnName(\"default_feed_items\")\n                        .HasDefaultValue(20);\n\n                    b.Property<string>(\"DefaultPageSlug\")\n                        .HasColumnName(\"default_page_slug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Description\")\n                        .HasColumnName(\"description\");\n\n                    b.Property<string>(\"DisqusShortName\")\n                        .HasColumnName(\"disqus_short_name\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"FacebookAppId\")\n                        .HasColumnName(\"facebook_app_id\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Image\")\n                        .HasColumnName(\"image\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"IncludePubDateInPostUrls\")\n                        .HasColumnName(\"include_pub_date_in_post_urls\");\n\n                    b.Property<string>(\"LanguageCode\")\n                        .HasColumnName(\"language_code\")\n                        .HasMaxLength(10);\n\n                    b.Property<string>(\"LocalMediaVirtualPath\")\n                        .HasColumnName(\"local_media_virtual_path\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ManagingEditorEmail\")\n                        .HasColumnName(\"managing_editor_email\")\n                        .HasMaxLength(100);\n\n                    b.Property<int>(\"MaxFeedItems\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnName(\"max_feed_items\")\n                        .HasDefaultValue(1000);\n\n                    b.Property<bool>(\"ModerateComments\")\n                        .HasColumnName(\"moderate_comments\");\n\n                    b.Property<int>(\"PostsPerPage\")\n                        .HasColumnName(\"posts_per_page\");\n\n                    b.Property<string>(\"PubDateFormat\")\n                        .HasColumnName(\"pub_date_format\")\n                        .HasMaxLength(75);\n\n                    b.Property<string>(\"Publisher\")\n                        .HasColumnName(\"publisher\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"PublisherEntityType\")\n                        .HasColumnName(\"publisher_entity_type\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PublisherLogoHeight\")\n                        .HasColumnName(\"publisher_logo_height\")\n                        .HasMaxLength(20);\n\n                    b.Property<string>(\"PublisherLogoUrl\")\n                        .HasColumnName(\"publisher_logo_url\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"PublisherLogoWidth\")\n                        .HasColumnName(\"publisher_logo_width\")\n                        .HasMaxLength(20);\n\n                    b.Property<string>(\"RecaptchaPrivateKey\")\n                        .HasColumnName(\"recaptcha_private_key\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RecaptchaPublicKey\")\n                        .HasColumnName(\"recaptcha_public_key\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RemoteFeedProcessorUseAgentFragment\")\n                        .HasColumnName(\"remote_feed_processor_use_agent_fragment\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RemoteFeedUrl\")\n                        .HasColumnName(\"remote_feed_url\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"ShowAboutBox\")\n                        .HasColumnName(\"show_about_box\");\n\n                    b.Property<bool>(\"ShowFeaturedPostsOnDefaultPage\")\n                        .HasColumnName(\"show_featured_posts_on_default_page\");\n\n                    b.Property<bool>(\"ShowRecentPostsOnDefaultPage\")\n                        .HasColumnName(\"show_recent_posts_on_default_page\");\n\n                    b.Property<bool>(\"ShowRelatedPosts\")\n                        .HasColumnName(\"show_related_posts\");\n\n                    b.Property<bool>(\"ShowTitle\")\n                        .HasColumnName(\"show_title\");\n\n                    b.Property<string>(\"SiteName\")\n                        .HasColumnName(\"site_name\")\n                        .HasMaxLength(200);\n\n                    b.Property<byte>(\"TeaserMode\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnName(\"teaser_mode\")\n                        .HasDefaultValue((byte)0);\n\n                    b.Property<int>(\"TeaserTruncationLength\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnName(\"teaser_truncation_length\")\n                        .HasDefaultValue(20);\n\n                    b.Property<byte>(\"TeaserTruncationMode\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnName(\"teaser_truncation_mode\")\n                        .HasDefaultValue((byte)0);\n\n                    b.Property<string>(\"TimeZoneId\")\n                        .HasColumnName(\"time_zone_id\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Title\")\n                        .HasColumnName(\"title\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"TwitterCreator\")\n                        .HasColumnName(\"twitter_creator\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"TwitterPublisher\")\n                        .HasColumnName(\"twitter_publisher\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"UseDefaultPageAsRootNode\")\n                        .HasColumnName(\"use_default_page_as_root_node\");\n\n                    b.Property<string>(\"WebmasterEmail\")\n                        .HasColumnName(\"webmaster_email\")\n                        .HasMaxLength(100);\n\n                    b.HasKey(\"Id\")\n                        .HasName(\"pk_cs_content_project\");\n\n                    b.ToTable(\"cs_content_project\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageCategory\", b =>\n                {\n                    b.Property<string>(\"Value\")\n                        .HasColumnName(\"value\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasColumnName(\"page_entity_id\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasColumnName(\"project_id\")\n                        .HasMaxLength(50);\n\n                    b.HasKey(\"Value\", \"PageEntityId\")\n                        .HasName(\"pk_cs_page_category\");\n\n                    b.HasIndex(\"PageEntityId\")\n                        .HasName(\"ix_cs_page_category_page_entity_id\");\n\n                    b.HasIndex(\"ProjectId\")\n                        .HasName(\"ix_cs_page_category_project_id\");\n\n                    b.HasIndex(\"Value\")\n                        .HasName(\"ix_cs_page_category_value\");\n\n                    b.ToTable(\"cs_page_category\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnName(\"id\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasColumnName(\"author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Content\")\n                        .HasColumnName(\"content\");\n\n                    b.Property<string>(\"Email\")\n                        .HasColumnName(\"email\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Ip\")\n                        .HasColumnName(\"ip\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"IsAdmin\")\n                        .HasColumnName(\"is_admin\");\n\n                    b.Property<bool>(\"IsApproved\")\n                        .HasColumnName(\"is_approved\");\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasColumnName(\"page_entity_id\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasColumnName(\"project_id\")\n                        .HasMaxLength(50);\n\n                    b.Property<DateTime>(\"PubDate\")\n                        .HasColumnName(\"pub_date\");\n\n                    b.Property<string>(\"UserAgent\")\n                        .HasColumnName(\"user_agent\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Website\")\n                        .HasColumnName(\"website\")\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\")\n                        .HasName(\"pk_cs_page_comment\");\n\n                    b.HasIndex(\"PageEntityId\")\n                        .HasName(\"ix_cs_page_comment_page_entity_id\");\n\n                    b.HasIndex(\"ProjectId\")\n                        .HasName(\"ix_cs_page_comment_project_id\");\n\n                    b.ToTable(\"cs_page_comment\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnName(\"id\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasColumnName(\"author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasColumnName(\"categories_csv\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"Content\")\n                        .HasColumnName(\"content\");\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnName(\"content_type\")\n                        .HasMaxLength(50)\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasColumnName(\"correlation_key\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CreatedByUser\")\n                        .HasColumnName(\"created_by_user\")\n                        .HasMaxLength(100);\n\n                    b.Property<DateTime>(\"CreatedUtc\")\n                        .HasColumnName(\"created_utc\");\n\n                    b.Property<bool>(\"DisableEditor\")\n                        .HasColumnName(\"disable_editor\");\n\n                    b.Property<string>(\"DraftAuthor\")\n                        .HasColumnName(\"draft_author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"DraftContent\")\n                        .HasColumnName(\"draft_content\");\n\n                    b.Property<DateTime?>(\"DraftPubDate\")\n                        .HasColumnName(\"draft_pub_date\");\n\n                    b.Property<string>(\"DraftSerializedModel\")\n                        .HasColumnName(\"draft_serialized_model\");\n\n                    b.Property<string>(\"ExternalUrl\")\n                        .HasColumnName(\"external_url\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"IsPublished\")\n                        .HasColumnName(\"is_published\");\n\n                    b.Property<DateTime>(\"LastModified\")\n                        .HasColumnName(\"last_modified\");\n\n                    b.Property<string>(\"LastModifiedByUser\")\n                        .HasColumnName(\"last_modified_by_user\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"MenuFilters\")\n                        .HasColumnName(\"menu_filters\")\n                        .HasMaxLength(500);\n\n                    b.Property<bool>(\"MenuOnly\")\n                        .HasColumnName(\"menu_only\");\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasColumnName(\"meta_description\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"MetaHtml\")\n                        .HasColumnName(\"meta_html\");\n\n                    b.Property<string>(\"MetaJson\")\n                        .HasColumnName(\"meta_json\");\n\n                    b.Property<int>(\"PageOrder\")\n                        .HasColumnName(\"page_order\");\n\n                    b.Property<string>(\"ParentId\")\n                        .HasColumnName(\"parent_id\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ParentSlug\")\n                        .HasColumnName(\"parent_slug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasColumnName(\"project_id\")\n                        .HasMaxLength(50);\n\n                    b.Property<DateTime?>(\"PubDate\")\n                        .HasColumnName(\"pub_date\");\n\n                    b.Property<string>(\"SerializedModel\")\n                        .HasColumnName(\"serialized_model\");\n\n                    b.Property<string>(\"Serializer\")\n                        .HasColumnName(\"serializer\")\n                        .HasMaxLength(50);\n\n                    b.Property<bool>(\"ShowCategories\")\n                        .HasColumnName(\"show_categories\");\n\n                    b.Property<bool>(\"ShowComments\")\n                        .HasColumnName(\"show_comments\");\n\n                    b.Property<bool>(\"ShowHeading\")\n                        .HasColumnName(\"show_heading\");\n\n                    b.Property<bool>(\"ShowLastModified\")\n                        .HasColumnName(\"show_last_modified\");\n\n                    b.Property<bool>(\"ShowMenu\")\n                        .HasColumnName(\"show_menu\");\n\n                    b.Property<bool>(\"ShowPubDate\")\n                        .HasColumnName(\"show_pub_date\");\n\n                    b.Property<string>(\"Slug\")\n                        .IsRequired()\n                        .HasColumnName(\"slug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"TemplateKey\")\n                        .HasColumnName(\"template_key\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasColumnName(\"title\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ViewRoles\")\n                        .HasColumnName(\"view_roles\");\n\n                    b.HasKey(\"Id\")\n                        .HasName(\"pk_cs_page\");\n\n                    b.HasIndex(\"CorrelationKey\")\n                        .HasName(\"ix_cs_page_correlation_key\");\n\n                    b.HasIndex(\"ParentId\")\n                        .HasName(\"ix_cs_page_parent_id\");\n\n                    b.HasIndex(\"ProjectId\")\n                        .HasName(\"ix_cs_page_project_id\");\n\n                    b.ToTable(\"cs_page\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageResourceEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnName(\"id\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Environment\")\n                        .IsRequired()\n                        .HasColumnName(\"environment\")\n                        .HasMaxLength(15);\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasColumnName(\"page_entity_id\")\n                        .HasMaxLength(36);\n\n                    b.Property<int>(\"Sort\")\n                        .HasColumnName(\"sort\");\n\n                    b.Property<string>(\"Type\")\n                        .IsRequired()\n                        .HasColumnName(\"type\")\n                        .HasMaxLength(10);\n\n                    b.Property<string>(\"Url\")\n                        .IsRequired()\n                        .HasColumnName(\"url\")\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\")\n                        .HasName(\"pk_cs_page_resource\");\n\n                    b.HasIndex(\"PageEntityId\")\n                        .HasName(\"ix_cs_page_resource_page_entity_id\");\n\n                    b.ToTable(\"cs_page_resource\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostCategory\", b =>\n                {\n                    b.Property<string>(\"Value\")\n                        .HasColumnName(\"value\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PostEntityId\")\n                        .HasColumnName(\"post_entity_id\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasColumnName(\"project_id\")\n                        .HasMaxLength(50);\n\n                    b.HasKey(\"Value\", \"PostEntityId\")\n                        .HasName(\"pk_cs_post_category\");\n\n                    b.HasIndex(\"PostEntityId\")\n                        .HasName(\"ix_cs_post_category_post_entity_id\");\n\n                    b.HasIndex(\"ProjectId\")\n                        .HasName(\"ix_cs_post_category_project_id\");\n\n                    b.HasIndex(\"Value\")\n                        .HasName(\"ix_cs_post_category_value\");\n\n                    b.ToTable(\"cs_post_category\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnName(\"id\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasColumnName(\"author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Content\")\n                        .HasColumnName(\"content\");\n\n                    b.Property<string>(\"Email\")\n                        .HasColumnName(\"email\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Ip\")\n                        .HasColumnName(\"ip\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"IsAdmin\")\n                        .HasColumnName(\"is_admin\");\n\n                    b.Property<bool>(\"IsApproved\")\n                        .HasColumnName(\"is_approved\");\n\n                    b.Property<string>(\"PostEntityId\")\n                        .HasColumnName(\"post_entity_id\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasColumnName(\"project_id\")\n                        .HasMaxLength(50);\n\n                    b.Property<DateTime>(\"PubDate\")\n                        .HasColumnName(\"pub_date\");\n\n                    b.Property<string>(\"UserAgent\")\n                        .HasColumnName(\"user_agent\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Website\")\n                        .HasColumnName(\"website\")\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\")\n                        .HasName(\"pk_cs_post_comment\");\n\n                    b.HasIndex(\"PostEntityId\")\n                        .HasName(\"ix_cs_post_comment_post_entity_id\");\n\n                    b.HasIndex(\"ProjectId\")\n                        .HasName(\"ix_cs_post_comment_project_id\");\n\n                    b.ToTable(\"cs_post_comment\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnName(\"id\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasColumnName(\"author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"AutoTeaser\")\n                        .HasColumnName(\"auto_teaser\");\n\n                    b.Property<string>(\"BlogId\")\n                        .IsRequired()\n                        .HasColumnName(\"blog_id\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasColumnName(\"categories_csv\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"Content\")\n                        .HasColumnName(\"content\");\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnName(\"content_type\")\n                        .HasMaxLength(50)\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasColumnName(\"correlation_key\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CreatedByUser\")\n                        .HasColumnName(\"created_by_user\")\n                        .HasMaxLength(100);\n\n                    b.Property<DateTime>(\"CreatedUtc\")\n                        .HasColumnName(\"created_utc\");\n\n                    b.Property<string>(\"DraftAuthor\")\n                        .HasColumnName(\"draft_author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"DraftContent\")\n                        .HasColumnName(\"draft_content\");\n\n                    b.Property<DateTime?>(\"DraftPubDate\")\n                        .HasColumnName(\"draft_pub_date\");\n\n                    b.Property<string>(\"DraftSerializedModel\")\n                        .HasColumnName(\"draft_serialized_model\");\n\n                    b.Property<string>(\"ImageUrl\")\n                        .HasColumnName(\"image_url\")\n                        .HasMaxLength(250);\n\n                    b.Property<bool>(\"IsFeatured\")\n                        .HasColumnName(\"is_featured\");\n\n                    b.Property<bool>(\"IsPublished\")\n                        .HasColumnName(\"is_published\");\n\n                    b.Property<DateTime>(\"LastModified\")\n                        .HasColumnName(\"last_modified\");\n\n                    b.Property<string>(\"LastModifiedByUser\")\n                        .HasColumnName(\"last_modified_by_user\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasColumnName(\"meta_description\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"MetaHtml\")\n                        .HasColumnName(\"meta_html\");\n\n                    b.Property<string>(\"MetaJson\")\n                        .HasColumnName(\"meta_json\");\n\n                    b.Property<DateTime?>(\"PubDate\")\n                        .HasColumnName(\"pub_date\");\n\n                    b.Property<string>(\"SerializedModel\")\n                        .HasColumnName(\"serialized_model\");\n\n                    b.Property<string>(\"Serializer\")\n                        .HasColumnName(\"serializer\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"Slug\")\n                        .IsRequired()\n                        .HasColumnName(\"slug\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"SuppressTeaser\")\n                        .HasColumnName(\"suppress_teaser\");\n\n                    b.Property<string>(\"TeaserOverride\")\n                        .HasColumnName(\"teaser_override\");\n\n                    b.Property<string>(\"TemplateKey\")\n                        .HasColumnName(\"template_key\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ThumbnailUrl\")\n                        .HasColumnName(\"thumbnail_url\")\n                        .HasMaxLength(250);\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasColumnName(\"title\")\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\")\n                        .HasName(\"pk_cs_post\");\n\n                    b.HasIndex(\"BlogId\")\n                        .HasName(\"ix_cs_post_blog_id\");\n\n                    b.HasIndex(\"CorrelationKey\")\n                        .HasName(\"ix_cs_post_correlation_key\");\n\n                    b.HasIndex(\"Slug\")\n                        .HasName(\"ix_cs_post_slug\");\n\n                    b.ToTable(\"cs_post\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\")\n                        .WithMany(\"PageComments\")\n                        .HasForeignKey(\"PageEntityId\")\n                        .HasConstraintName(\"fk_cs_page_comment_cs_page_page_entity_id\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageResourceEntity\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\")\n                        .WithMany(\"PageResources\")\n                        .HasForeignKey(\"PageEntityId\")\n                        .HasConstraintName(\"fk_cs_page_resource_cs_page_page_entity_id\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\")\n                        .WithMany(\"PostComments\")\n                        .HasForeignKey(\"PostEntityId\")\n                        .HasConstraintName(\"fk_cs_post_comment_cs_post_post_entity_id\");\n                });\n#pragma warning restore 612, 618\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.PostgreSql/Migrations/20190304162045_simplecontent-20190304.cs",
    "content": "﻿using Microsoft.EntityFrameworkCore.Migrations;\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.PostgreSql.Migrations\n{\n    public partial class simplecontent20190304 : Migration\n    {\n        protected override void Up(MigrationBuilder migrationBuilder)\n        {\n            migrationBuilder.AlterColumn<string>(\n                name: \"project_id\",\n                table: \"cs_post_comment\",\n                maxLength: 50,\n                nullable: false,\n                oldClrType: typeof(string),\n                oldMaxLength: 36);\n\n            migrationBuilder.AlterColumn<string>(\n                name: \"project_id\",\n                table: \"cs_post_category\",\n                maxLength: 50,\n                nullable: false,\n                oldClrType: typeof(string),\n                oldMaxLength: 36);\n\n            migrationBuilder.AlterColumn<string>(\n                name: \"blog_id\",\n                table: \"cs_post\",\n                maxLength: 50,\n                nullable: false,\n                oldClrType: typeof(string),\n                oldMaxLength: 36);\n\n            migrationBuilder.AlterColumn<string>(\n                name: \"project_id\",\n                table: \"cs_page_comment\",\n                maxLength: 50,\n                nullable: false,\n                oldClrType: typeof(string),\n                oldMaxLength: 36);\n\n            migrationBuilder.AlterColumn<string>(\n                name: \"project_id\",\n                table: \"cs_page_category\",\n                maxLength: 50,\n                nullable: false,\n                oldClrType: typeof(string),\n                oldMaxLength: 36);\n\n            migrationBuilder.AlterColumn<string>(\n                name: \"project_id\",\n                table: \"cs_page\",\n                maxLength: 50,\n                nullable: false,\n                oldClrType: typeof(string),\n                oldMaxLength: 36);\n\n            migrationBuilder.AlterColumn<string>(\n                name: \"id\",\n                table: \"cs_content_project\",\n                maxLength: 50,\n                nullable: false,\n                oldClrType: typeof(string),\n                oldMaxLength: 36);\n\n            migrationBuilder.AlterColumn<string>(\n                name: \"project_id\",\n                table: \"cs_content_history\",\n                maxLength: 50,\n                nullable: true,\n                oldClrType: typeof(string),\n                oldNullable: true);\n        }\n\n        protected override void Down(MigrationBuilder migrationBuilder)\n        {\n            migrationBuilder.AlterColumn<string>(\n                name: \"project_id\",\n                table: \"cs_post_comment\",\n                maxLength: 36,\n                nullable: false,\n                oldClrType: typeof(string),\n                oldMaxLength: 50);\n\n            migrationBuilder.AlterColumn<string>(\n                name: \"project_id\",\n                table: \"cs_post_category\",\n                maxLength: 36,\n                nullable: false,\n                oldClrType: typeof(string),\n                oldMaxLength: 50);\n\n            migrationBuilder.AlterColumn<string>(\n                name: \"blog_id\",\n                table: \"cs_post\",\n                maxLength: 36,\n                nullable: false,\n                oldClrType: typeof(string),\n                oldMaxLength: 50);\n\n            migrationBuilder.AlterColumn<string>(\n                name: \"project_id\",\n                table: \"cs_page_comment\",\n                maxLength: 36,\n                nullable: false,\n                oldClrType: typeof(string),\n                oldMaxLength: 50);\n\n            migrationBuilder.AlterColumn<string>(\n                name: \"project_id\",\n                table: \"cs_page_category\",\n                maxLength: 36,\n                nullable: false,\n                oldClrType: typeof(string),\n                oldMaxLength: 50);\n\n            migrationBuilder.AlterColumn<string>(\n                name: \"project_id\",\n                table: \"cs_page\",\n                maxLength: 36,\n                nullable: false,\n                oldClrType: typeof(string),\n                oldMaxLength: 50);\n\n            migrationBuilder.AlterColumn<string>(\n                name: \"id\",\n                table: \"cs_content_project\",\n                maxLength: 36,\n                nullable: false,\n                oldClrType: typeof(string),\n                oldMaxLength: 50);\n\n            migrationBuilder.AlterColumn<string>(\n                name: \"project_id\",\n                table: \"cs_content_history\",\n                nullable: true,\n                oldClrType: typeof(string),\n                oldMaxLength: 50,\n                oldNullable: true);\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.PostgreSql/Migrations/20190312155722_simplecontent-20190312.Designer.cs",
    "content": "﻿// <auto-generated />\nusing System;\nusing Microsoft.EntityFrameworkCore;\nusing Microsoft.EntityFrameworkCore.Infrastructure;\nusing Microsoft.EntityFrameworkCore.Migrations;\nusing Microsoft.EntityFrameworkCore.Storage.ValueConversion;\nusing Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;\nusing cloudscribe.SimpleContent.Models;\nusing cloudscribe.SimpleContent.Storage.EFCore.PostgreSql;\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.PostgreSql.Migrations\n{\n    [DbContext(typeof(SimpleContentDbContext))]\n    [Migration(\"20190312155722_simplecontent-20190312\")]\n    partial class simplecontent20190312\n    {\n        protected override void BuildTargetModel(ModelBuilder modelBuilder)\n        {\n#pragma warning disable 612, 618\n            modelBuilder\n                .HasAnnotation(\"Npgsql:ValueGenerationStrategy\", NpgsqlValueGenerationStrategy.SerialColumn)\n                .HasAnnotation(\"ProductVersion\", \"2.1.8-servicing-32085\")\n                .HasAnnotation(\"Relational:MaxIdentifierLength\", 63);\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Models.ContentHistory\", b =>\n                {\n                    b.Property<Guid>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnName(\"id\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ArchivedBy\")\n                        .HasColumnName(\"archived_by\")\n                        .HasMaxLength(255);\n\n                    b.Property<DateTime>(\"ArchivedUtc\")\n                        .HasColumnName(\"archived_utc\");\n\n                    b.Property<string>(\"Author\")\n                        .HasColumnName(\"author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasColumnName(\"categories_csv\");\n\n                    b.Property<string>(\"Content\")\n                        .HasColumnName(\"content\");\n\n                    b.Property<string>(\"ContentId\")\n                        .IsRequired()\n                        .HasColumnName(\"content_id\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ContentSource\")\n                        .IsRequired()\n                        .HasColumnName(\"content_source\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnName(\"content_type\")\n                        .HasMaxLength(50)\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasColumnName(\"correlation_key\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CreatedByUser\")\n                        .HasColumnName(\"created_by_user\")\n                        .HasMaxLength(100);\n\n                    b.Property<DateTime>(\"CreatedUtc\")\n                        .HasColumnName(\"created_utc\");\n\n                    b.Property<string>(\"DraftAuthor\")\n                        .HasColumnName(\"draft_author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"DraftContent\")\n                        .HasColumnName(\"draft_content\");\n\n                    b.Property<DateTime?>(\"DraftPubDate\")\n                        .HasColumnName(\"draft_pub_date\");\n\n                    b.Property<string>(\"DraftSerializedModel\")\n                        .HasColumnName(\"draft_serialized_model\");\n\n                    b.Property<bool>(\"IsDraftHx\")\n                        .HasColumnName(\"is_draft_hx\");\n\n                    b.Property<bool>(\"IsPublished\")\n                        .HasColumnName(\"is_published\");\n\n                    b.Property<DateTime>(\"LastModified\")\n                        .HasColumnName(\"last_modified\");\n\n                    b.Property<string>(\"LastModifiedByUser\")\n                        .HasColumnName(\"last_modified_by_user\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasColumnName(\"meta_description\");\n\n                    b.Property<string>(\"MetaHtml\")\n                        .HasColumnName(\"meta_html\");\n\n                    b.Property<string>(\"MetaJson\")\n                        .HasColumnName(\"meta_json\");\n\n                    b.Property<int>(\"PageOrder\")\n                        .HasColumnName(\"page_order\");\n\n                    b.Property<string>(\"ParentId\")\n                        .HasColumnName(\"parent_id\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ParentSlug\")\n                        .HasColumnName(\"parent_slug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ProjectId\")\n                        .HasColumnName(\"project_id\")\n                        .HasMaxLength(50);\n\n                    b.Property<DateTime?>(\"PubDate\")\n                        .HasColumnName(\"pub_date\");\n\n                    b.Property<string>(\"SerializedModel\")\n                        .HasColumnName(\"serialized_model\");\n\n                    b.Property<string>(\"Serializer\")\n                        .HasColumnName(\"serializer\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"Slug\")\n                        .HasColumnName(\"slug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"TeaserOverride\")\n                        .HasColumnName(\"teaser_override\");\n\n                    b.Property<string>(\"TemplateKey\")\n                        .HasColumnName(\"template_key\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasColumnName(\"title\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ViewRoles\")\n                        .HasColumnName(\"view_roles\");\n\n                    b.Property<bool>(\"WasDeleted\")\n                        .HasColumnName(\"was_deleted\");\n\n                    b.HasKey(\"Id\")\n                        .HasName(\"pk_cs_content_history\");\n\n                    b.HasIndex(\"ContentId\")\n                        .HasName(\"ix_cs_content_history_content_id\");\n\n                    b.HasIndex(\"ContentSource\")\n                        .HasName(\"ix_cs_content_history_content_source\");\n\n                    b.HasIndex(\"CorrelationKey\")\n                        .HasName(\"ix_cs_content_history_correlation_key\");\n\n                    b.HasIndex(\"CreatedByUser\")\n                        .HasName(\"ix_cs_content_history_created_by_user\");\n\n                    b.HasIndex(\"LastModifiedByUser\")\n                        .HasName(\"ix_cs_content_history_last_modified_by_user\");\n\n                    b.HasIndex(\"Title\")\n                        .HasName(\"ix_cs_content_history_title\");\n\n                    b.ToTable(\"cs_content_history\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Models.ProjectSettings\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnName(\"id\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"AboutContent\")\n                        .HasColumnName(\"about_content\");\n\n                    b.Property<string>(\"AboutHeading\")\n                        .HasColumnName(\"about_heading\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"AddBlogToPagesTree\")\n                        .HasColumnName(\"add_blog_to_pages_tree\");\n\n                    b.Property<bool>(\"BlogMenuLinksToNewestPost\")\n                        .HasColumnName(\"blog_menu_links_to_newest_post\");\n\n                    b.Property<string>(\"BlogPageNavComponentVisibility\")\n                        .HasColumnName(\"blog_page_nav_component_visibility\")\n                        .HasMaxLength(255);\n\n                    b.Property<int>(\"BlogPagePosition\")\n                        .HasColumnName(\"blog_page_position\");\n\n                    b.Property<string>(\"BlogPageText\")\n                        .HasColumnName(\"blog_page_text\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CdnUrl\")\n                        .HasColumnName(\"cdn_url\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ChannelCategoriesCsv\")\n                        .HasColumnName(\"channel_categories_csv\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ChannelRating\")\n                        .HasColumnName(\"channel_rating\")\n                        .HasMaxLength(100);\n\n                    b.Property<int>(\"ChannelTimeToLive\")\n                        .HasColumnName(\"channel_time_to_live\");\n\n                    b.Property<string>(\"CommentNotificationEmail\")\n                        .HasColumnName(\"comment_notification_email\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"CopyrightNotice\")\n                        .HasColumnName(\"copyright_notice\")\n                        .HasMaxLength(255);\n\n                    b.Property<int>(\"DaysToComment\")\n                        .HasColumnName(\"days_to_comment\");\n\n                    b.Property<string>(\"DefaultContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnName(\"default_content_type\")\n                        .HasMaxLength(50)\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<int>(\"DefaultFeedItems\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnName(\"default_feed_items\")\n                        .HasDefaultValue(20);\n\n                    b.Property<string>(\"DefaultPageSlug\")\n                        .HasColumnName(\"default_page_slug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Description\")\n                        .HasColumnName(\"description\");\n\n                    b.Property<string>(\"DisqusShortName\")\n                        .HasColumnName(\"disqus_short_name\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"FacebookAppId\")\n                        .HasColumnName(\"facebook_app_id\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Image\")\n                        .HasColumnName(\"image\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"IncludePubDateInPostUrls\")\n                        .HasColumnName(\"include_pub_date_in_post_urls\");\n\n                    b.Property<string>(\"LanguageCode\")\n                        .HasColumnName(\"language_code\")\n                        .HasMaxLength(10);\n\n                    b.Property<string>(\"LocalMediaVirtualPath\")\n                        .HasColumnName(\"local_media_virtual_path\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ManagingEditorEmail\")\n                        .HasColumnName(\"managing_editor_email\")\n                        .HasMaxLength(100);\n\n                    b.Property<int>(\"MaxFeedItems\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnName(\"max_feed_items\")\n                        .HasDefaultValue(1000);\n\n                    b.Property<bool>(\"ModerateComments\")\n                        .HasColumnName(\"moderate_comments\");\n\n                    b.Property<int>(\"PostsPerPage\")\n                        .HasColumnName(\"posts_per_page\");\n\n                    b.Property<string>(\"PubDateFormat\")\n                        .HasColumnName(\"pub_date_format\")\n                        .HasMaxLength(75);\n\n                    b.Property<string>(\"Publisher\")\n                        .HasColumnName(\"publisher\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"PublisherEntityType\")\n                        .HasColumnName(\"publisher_entity_type\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PublisherLogoHeight\")\n                        .HasColumnName(\"publisher_logo_height\")\n                        .HasMaxLength(20);\n\n                    b.Property<string>(\"PublisherLogoUrl\")\n                        .HasColumnName(\"publisher_logo_url\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"PublisherLogoWidth\")\n                        .HasColumnName(\"publisher_logo_width\")\n                        .HasMaxLength(20);\n\n                    b.Property<string>(\"RecaptchaPrivateKey\")\n                        .HasColumnName(\"recaptcha_private_key\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RecaptchaPublicKey\")\n                        .HasColumnName(\"recaptcha_public_key\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RemoteFeedProcessorUseAgentFragment\")\n                        .HasColumnName(\"remote_feed_processor_use_agent_fragment\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RemoteFeedUrl\")\n                        .HasColumnName(\"remote_feed_url\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"ShowAboutBox\")\n                        .HasColumnName(\"show_about_box\");\n\n                    b.Property<bool>(\"ShowFeaturedPostsOnDefaultPage\")\n                        .HasColumnName(\"show_featured_posts_on_default_page\");\n\n                    b.Property<bool>(\"ShowRecentPostsOnDefaultPage\")\n                        .HasColumnName(\"show_recent_posts_on_default_page\");\n\n                    b.Property<bool>(\"ShowRelatedPosts\")\n                        .HasColumnName(\"show_related_posts\");\n\n                    b.Property<bool>(\"ShowTitle\")\n                        .HasColumnName(\"show_title\");\n\n                    b.Property<string>(\"SiteName\")\n                        .HasColumnName(\"site_name\")\n                        .HasMaxLength(200);\n\n                    b.Property<byte>(\"TeaserMode\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnName(\"teaser_mode\")\n                        .HasDefaultValue((byte)0);\n\n                    b.Property<int>(\"TeaserTruncationLength\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnName(\"teaser_truncation_length\")\n                        .HasDefaultValue(20);\n\n                    b.Property<byte>(\"TeaserTruncationMode\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnName(\"teaser_truncation_mode\")\n                        .HasDefaultValue((byte)0);\n\n                    b.Property<string>(\"TimeZoneId\")\n                        .HasColumnName(\"time_zone_id\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Title\")\n                        .HasColumnName(\"title\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"TwitterCreator\")\n                        .HasColumnName(\"twitter_creator\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"TwitterPublisher\")\n                        .HasColumnName(\"twitter_publisher\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"UseDefaultPageAsRootNode\")\n                        .HasColumnName(\"use_default_page_as_root_node\");\n\n                    b.Property<string>(\"WebmasterEmail\")\n                        .HasColumnName(\"webmaster_email\")\n                        .HasMaxLength(100);\n\n                    b.HasKey(\"Id\")\n                        .HasName(\"pk_cs_content_project\");\n\n                    b.ToTable(\"cs_content_project\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageCategory\", b =>\n                {\n                    b.Property<string>(\"Value\")\n                        .HasColumnName(\"value\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasColumnName(\"page_entity_id\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasColumnName(\"project_id\")\n                        .HasMaxLength(50);\n\n                    b.HasKey(\"Value\", \"PageEntityId\")\n                        .HasName(\"pk_cs_page_category\");\n\n                    b.HasIndex(\"PageEntityId\")\n                        .HasName(\"ix_cs_page_category_page_entity_id\");\n\n                    b.HasIndex(\"ProjectId\")\n                        .HasName(\"ix_cs_page_category_project_id\");\n\n                    b.HasIndex(\"Value\")\n                        .HasName(\"ix_cs_page_category_value\");\n\n                    b.ToTable(\"cs_page_category\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnName(\"id\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasColumnName(\"author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Content\")\n                        .HasColumnName(\"content\");\n\n                    b.Property<string>(\"Email\")\n                        .HasColumnName(\"email\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Ip\")\n                        .HasColumnName(\"ip\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"IsAdmin\")\n                        .HasColumnName(\"is_admin\");\n\n                    b.Property<bool>(\"IsApproved\")\n                        .HasColumnName(\"is_approved\");\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasColumnName(\"page_entity_id\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasColumnName(\"project_id\")\n                        .HasMaxLength(50);\n\n                    b.Property<DateTime>(\"PubDate\")\n                        .HasColumnName(\"pub_date\");\n\n                    b.Property<string>(\"UserAgent\")\n                        .HasColumnName(\"user_agent\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Website\")\n                        .HasColumnName(\"website\")\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\")\n                        .HasName(\"pk_cs_page_comment\");\n\n                    b.HasIndex(\"PageEntityId\")\n                        .HasName(\"ix_cs_page_comment_page_entity_id\");\n\n                    b.HasIndex(\"ProjectId\")\n                        .HasName(\"ix_cs_page_comment_project_id\");\n\n                    b.ToTable(\"cs_page_comment\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnName(\"id\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasColumnName(\"author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasColumnName(\"categories_csv\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"Content\")\n                        .HasColumnName(\"content\");\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnName(\"content_type\")\n                        .HasMaxLength(50)\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasColumnName(\"correlation_key\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CreatedByUser\")\n                        .HasColumnName(\"created_by_user\")\n                        .HasMaxLength(100);\n\n                    b.Property<DateTime>(\"CreatedUtc\")\n                        .HasColumnName(\"created_utc\");\n\n                    b.Property<bool>(\"DisableEditor\")\n                        .HasColumnName(\"disable_editor\");\n\n                    b.Property<string>(\"DraftAuthor\")\n                        .HasColumnName(\"draft_author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"DraftContent\")\n                        .HasColumnName(\"draft_content\");\n\n                    b.Property<DateTime?>(\"DraftPubDate\")\n                        .HasColumnName(\"draft_pub_date\");\n\n                    b.Property<string>(\"DraftSerializedModel\")\n                        .HasColumnName(\"draft_serialized_model\");\n\n                    b.Property<string>(\"ExternalUrl\")\n                        .HasColumnName(\"external_url\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"IsPublished\")\n                        .HasColumnName(\"is_published\");\n\n                    b.Property<DateTime>(\"LastModified\")\n                        .HasColumnName(\"last_modified\");\n\n                    b.Property<string>(\"LastModifiedByUser\")\n                        .HasColumnName(\"last_modified_by_user\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"MenuFilters\")\n                        .HasColumnName(\"menu_filters\")\n                        .HasMaxLength(500);\n\n                    b.Property<bool>(\"MenuOnly\")\n                        .HasColumnName(\"menu_only\");\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasColumnName(\"meta_description\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"MetaHtml\")\n                        .HasColumnName(\"meta_html\");\n\n                    b.Property<string>(\"MetaJson\")\n                        .HasColumnName(\"meta_json\");\n\n                    b.Property<int>(\"PageOrder\")\n                        .HasColumnName(\"page_order\");\n\n                    b.Property<string>(\"ParentId\")\n                        .HasColumnName(\"parent_id\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ParentSlug\")\n                        .HasColumnName(\"parent_slug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasColumnName(\"project_id\")\n                        .HasMaxLength(50);\n\n                    b.Property<DateTime?>(\"PubDate\")\n                        .HasColumnName(\"pub_date\");\n\n                    b.Property<string>(\"SerializedModel\")\n                        .HasColumnName(\"serialized_model\");\n\n                    b.Property<string>(\"Serializer\")\n                        .HasColumnName(\"serializer\")\n                        .HasMaxLength(50);\n\n                    b.Property<bool>(\"ShowCategories\")\n                        .HasColumnName(\"show_categories\");\n\n                    b.Property<bool>(\"ShowComments\")\n                        .HasColumnName(\"show_comments\");\n\n                    b.Property<bool>(\"ShowHeading\")\n                        .HasColumnName(\"show_heading\");\n\n                    b.Property<bool>(\"ShowLastModified\")\n                        .HasColumnName(\"show_last_modified\");\n\n                    b.Property<bool>(\"ShowMenu\")\n                        .HasColumnName(\"show_menu\");\n\n                    b.Property<bool>(\"ShowPubDate\")\n                        .HasColumnName(\"show_pub_date\");\n\n                    b.Property<string>(\"Slug\")\n                        .IsRequired()\n                        .HasColumnName(\"slug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"TemplateKey\")\n                        .HasColumnName(\"template_key\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasColumnName(\"title\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ViewRoles\")\n                        .HasColumnName(\"view_roles\");\n\n                    b.HasKey(\"Id\")\n                        .HasName(\"pk_cs_page\");\n\n                    b.HasIndex(\"CorrelationKey\")\n                        .HasName(\"ix_cs_page_correlation_key\");\n\n                    b.HasIndex(\"ParentId\")\n                        .HasName(\"ix_cs_page_parent_id\");\n\n                    b.HasIndex(\"ProjectId\")\n                        .HasName(\"ix_cs_page_project_id\");\n\n                    b.ToTable(\"cs_page\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageResourceEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnName(\"id\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Environment\")\n                        .IsRequired()\n                        .HasColumnName(\"environment\")\n                        .HasMaxLength(15);\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasColumnName(\"page_entity_id\")\n                        .HasMaxLength(36);\n\n                    b.Property<int>(\"Sort\")\n                        .HasColumnName(\"sort\");\n\n                    b.Property<string>(\"Type\")\n                        .IsRequired()\n                        .HasColumnName(\"type\")\n                        .HasMaxLength(10);\n\n                    b.Property<string>(\"Url\")\n                        .IsRequired()\n                        .HasColumnName(\"url\")\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\")\n                        .HasName(\"pk_cs_page_resource\");\n\n                    b.HasIndex(\"PageEntityId\")\n                        .HasName(\"ix_cs_page_resource_page_entity_id\");\n\n                    b.ToTable(\"cs_page_resource\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostCategory\", b =>\n                {\n                    b.Property<string>(\"Value\")\n                        .HasColumnName(\"value\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PostEntityId\")\n                        .HasColumnName(\"post_entity_id\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasColumnName(\"project_id\")\n                        .HasMaxLength(50);\n\n                    b.HasKey(\"Value\", \"PostEntityId\")\n                        .HasName(\"pk_cs_post_category\");\n\n                    b.HasIndex(\"PostEntityId\")\n                        .HasName(\"ix_cs_post_category_post_entity_id\");\n\n                    b.HasIndex(\"ProjectId\")\n                        .HasName(\"ix_cs_post_category_project_id\");\n\n                    b.HasIndex(\"Value\")\n                        .HasName(\"ix_cs_post_category_value\");\n\n                    b.ToTable(\"cs_post_category\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnName(\"id\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasColumnName(\"author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Content\")\n                        .HasColumnName(\"content\");\n\n                    b.Property<string>(\"Email\")\n                        .HasColumnName(\"email\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Ip\")\n                        .HasColumnName(\"ip\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"IsAdmin\")\n                        .HasColumnName(\"is_admin\");\n\n                    b.Property<bool>(\"IsApproved\")\n                        .HasColumnName(\"is_approved\");\n\n                    b.Property<string>(\"PostEntityId\")\n                        .HasColumnName(\"post_entity_id\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasColumnName(\"project_id\")\n                        .HasMaxLength(50);\n\n                    b.Property<DateTime>(\"PubDate\")\n                        .HasColumnName(\"pub_date\");\n\n                    b.Property<string>(\"UserAgent\")\n                        .HasColumnName(\"user_agent\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Website\")\n                        .HasColumnName(\"website\")\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\")\n                        .HasName(\"pk_cs_post_comment\");\n\n                    b.HasIndex(\"PostEntityId\")\n                        .HasName(\"ix_cs_post_comment_post_entity_id\");\n\n                    b.HasIndex(\"ProjectId\")\n                        .HasName(\"ix_cs_post_comment_project_id\");\n\n                    b.ToTable(\"cs_post_comment\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnName(\"id\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasColumnName(\"author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"AutoTeaser\")\n                        .HasColumnName(\"auto_teaser\");\n\n                    b.Property<string>(\"BlogId\")\n                        .IsRequired()\n                        .HasColumnName(\"blog_id\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasColumnName(\"categories_csv\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"Content\")\n                        .HasColumnName(\"content\");\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnName(\"content_type\")\n                        .HasMaxLength(50)\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasColumnName(\"correlation_key\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CreatedByUser\")\n                        .HasColumnName(\"created_by_user\")\n                        .HasMaxLength(100);\n\n                    b.Property<DateTime>(\"CreatedUtc\")\n                        .HasColumnName(\"created_utc\");\n\n                    b.Property<string>(\"DraftAuthor\")\n                        .HasColumnName(\"draft_author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"DraftContent\")\n                        .HasColumnName(\"draft_content\");\n\n                    b.Property<DateTime?>(\"DraftPubDate\")\n                        .HasColumnName(\"draft_pub_date\");\n\n                    b.Property<string>(\"DraftSerializedModel\")\n                        .HasColumnName(\"draft_serialized_model\");\n\n                    b.Property<string>(\"ImageUrl\")\n                        .HasColumnName(\"image_url\")\n                        .HasMaxLength(250);\n\n                    b.Property<bool>(\"IsFeatured\")\n                        .HasColumnName(\"is_featured\");\n\n                    b.Property<bool>(\"IsPublished\")\n                        .HasColumnName(\"is_published\");\n\n                    b.Property<DateTime>(\"LastModified\")\n                        .HasColumnName(\"last_modified\");\n\n                    b.Property<string>(\"LastModifiedByUser\")\n                        .HasColumnName(\"last_modified_by_user\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasColumnName(\"meta_description\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"MetaHtml\")\n                        .HasColumnName(\"meta_html\");\n\n                    b.Property<string>(\"MetaJson\")\n                        .HasColumnName(\"meta_json\");\n\n                    b.Property<DateTime?>(\"PubDate\")\n                        .HasColumnName(\"pub_date\");\n\n                    b.Property<string>(\"SerializedModel\")\n                        .HasColumnName(\"serialized_model\");\n\n                    b.Property<string>(\"Serializer\")\n                        .HasColumnName(\"serializer\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"Slug\")\n                        .IsRequired()\n                        .HasColumnName(\"slug\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"SuppressTeaser\")\n                        .HasColumnName(\"suppress_teaser\");\n\n                    b.Property<string>(\"TeaserOverride\")\n                        .HasColumnName(\"teaser_override\");\n\n                    b.Property<string>(\"TemplateKey\")\n                        .HasColumnName(\"template_key\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ThumbnailUrl\")\n                        .HasColumnName(\"thumbnail_url\")\n                        .HasMaxLength(250);\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasColumnName(\"title\")\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\")\n                        .HasName(\"pk_cs_post\");\n\n                    b.HasIndex(\"BlogId\")\n                        .HasName(\"ix_cs_post_blog_id\");\n\n                    b.HasIndex(\"CorrelationKey\")\n                        .HasName(\"ix_cs_post_correlation_key\");\n\n                    b.HasIndex(\"Slug\")\n                        .HasName(\"ix_cs_post_slug\");\n\n                    b.ToTable(\"cs_post\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\")\n                        .WithMany(\"PageComments\")\n                        .HasForeignKey(\"PageEntityId\")\n                        .HasConstraintName(\"fk_cs_page_comment_cs_page_page_entity_id\")\n                        .OnDelete(DeleteBehavior.Cascade);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageResourceEntity\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\")\n                        .WithMany(\"PageResources\")\n                        .HasForeignKey(\"PageEntityId\")\n                        .HasConstraintName(\"fk_cs_page_resource_cs_page_page_entity_id\")\n                        .OnDelete(DeleteBehavior.Cascade);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\")\n                        .WithMany(\"PostComments\")\n                        .HasForeignKey(\"PostEntityId\")\n                        .HasConstraintName(\"fk_cs_post_comment_cs_post_post_entity_id\");\n                });\n#pragma warning restore 612, 618\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.PostgreSql/Migrations/20190312155722_simplecontent-20190312.cs",
    "content": "﻿using Microsoft.EntityFrameworkCore.Migrations;\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.PostgreSql.Migrations\n{\n    public partial class simplecontent20190312 : Migration\n    {\n        protected override void Up(MigrationBuilder migrationBuilder)\n        {\n            migrationBuilder.DropForeignKey(\n                name: \"fk_cs_page_comment_cs_page_page_entity_id\",\n                table: \"cs_page_comment\");\n\n            migrationBuilder.DropForeignKey(\n                name: \"fk_cs_page_resource_cs_page_page_entity_id\",\n                table: \"cs_page_resource\");\n\n            migrationBuilder.AddForeignKey(\n                name: \"fk_cs_page_comment_cs_page_page_entity_id\",\n                table: \"cs_page_comment\",\n                column: \"page_entity_id\",\n                principalTable: \"cs_page\",\n                principalColumn: \"id\",\n                onDelete: ReferentialAction.Cascade);\n\n            migrationBuilder.AddForeignKey(\n                name: \"fk_cs_page_resource_cs_page_page_entity_id\",\n                table: \"cs_page_resource\",\n                column: \"page_entity_id\",\n                principalTable: \"cs_page\",\n                principalColumn: \"id\",\n                onDelete: ReferentialAction.Cascade);\n        }\n\n        protected override void Down(MigrationBuilder migrationBuilder)\n        {\n            migrationBuilder.DropForeignKey(\n                name: \"fk_cs_page_comment_cs_page_page_entity_id\",\n                table: \"cs_page_comment\");\n\n            migrationBuilder.DropForeignKey(\n                name: \"fk_cs_page_resource_cs_page_page_entity_id\",\n                table: \"cs_page_resource\");\n\n            migrationBuilder.AddForeignKey(\n                name: \"fk_cs_page_comment_cs_page_page_entity_id\",\n                table: \"cs_page_comment\",\n                column: \"page_entity_id\",\n                principalTable: \"cs_page\",\n                principalColumn: \"id\",\n                onDelete: ReferentialAction.Restrict);\n\n            migrationBuilder.AddForeignKey(\n                name: \"fk_cs_page_resource_cs_page_page_entity_id\",\n                table: \"cs_page_resource\",\n                column: \"page_entity_id\",\n                principalTable: \"cs_page\",\n                principalColumn: \"id\",\n                onDelete: ReferentialAction.Restrict);\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.PostgreSql/Migrations/20200723185336_AddPostShowCommentsSwitch.Designer.cs",
    "content": "﻿// <auto-generated />\nusing System;\nusing Microsoft.EntityFrameworkCore;\nusing Microsoft.EntityFrameworkCore.Infrastructure;\nusing Microsoft.EntityFrameworkCore.Migrations;\nusing Microsoft.EntityFrameworkCore.Storage.ValueConversion;\nusing Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;\nusing cloudscribe.SimpleContent.Storage.EFCore.PostgreSql;\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.PostgreSql.Migrations\n{\n    [DbContext(typeof(SimpleContentDbContext))]\n    [Migration(\"20200723185336_AddPostShowCommentsSwitch\")]\n    partial class AddPostShowCommentsSwitch\n    {\n        protected override void BuildTargetModel(ModelBuilder modelBuilder)\n        {\n#pragma warning disable 612, 618\n            modelBuilder\n                .HasAnnotation(\"Npgsql:ValueGenerationStrategy\", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn)\n                .HasAnnotation(\"ProductVersion\", \"3.0.0\")\n                .HasAnnotation(\"Relational:MaxIdentifierLength\", 63);\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Models.ContentHistory\", b =>\n                {\n                    b.Property<Guid>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnName(\"id\")\n                        .HasColumnType(\"uuid\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ArchivedBy\")\n                        .HasColumnName(\"archived_by\")\n                        .HasColumnType(\"character varying(255)\")\n                        .HasMaxLength(255);\n\n                    b.Property<DateTime>(\"ArchivedUtc\")\n                        .HasColumnName(\"archived_utc\")\n                        .HasColumnType(\"timestamp without time zone\");\n\n                    b.Property<string>(\"Author\")\n                        .HasColumnName(\"author\")\n                        .HasColumnType(\"character varying(255)\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasColumnName(\"categories_csv\")\n                        .HasColumnType(\"text\");\n\n                    b.Property<string>(\"Content\")\n                        .HasColumnName(\"content\")\n                        .HasColumnType(\"text\");\n\n                    b.Property<string>(\"ContentId\")\n                        .IsRequired()\n                        .HasColumnName(\"content_id\")\n                        .HasColumnType(\"character varying(36)\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ContentSource\")\n                        .IsRequired()\n                        .HasColumnName(\"content_source\")\n                        .HasColumnType(\"character varying(50)\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnName(\"content_type\")\n                        .HasColumnType(\"character varying(50)\")\n                        .HasMaxLength(50)\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasColumnName(\"correlation_key\")\n                        .HasColumnType(\"character varying(255)\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CreatedByUser\")\n                        .HasColumnName(\"created_by_user\")\n                        .HasColumnType(\"character varying(100)\")\n                        .HasMaxLength(100);\n\n                    b.Property<DateTime>(\"CreatedUtc\")\n                        .HasColumnName(\"created_utc\")\n                        .HasColumnType(\"timestamp without time zone\");\n\n                    b.Property<string>(\"DraftAuthor\")\n                        .HasColumnName(\"draft_author\")\n                        .HasColumnType(\"character varying(255)\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"DraftContent\")\n                        .HasColumnName(\"draft_content\")\n                        .HasColumnType(\"text\");\n\n                    b.Property<DateTime?>(\"DraftPubDate\")\n                        .HasColumnName(\"draft_pub_date\")\n                        .HasColumnType(\"timestamp without time zone\");\n\n                    b.Property<string>(\"DraftSerializedModel\")\n                        .HasColumnName(\"draft_serialized_model\")\n                        .HasColumnType(\"text\");\n\n                    b.Property<bool>(\"IsDraftHx\")\n                        .HasColumnName(\"is_draft_hx\")\n                        .HasColumnType(\"boolean\");\n\n                    b.Property<bool>(\"IsPublished\")\n                        .HasColumnName(\"is_published\")\n                        .HasColumnType(\"boolean\");\n\n                    b.Property<DateTime>(\"LastModified\")\n                        .HasColumnName(\"last_modified\")\n                        .HasColumnType(\"timestamp without time zone\");\n\n                    b.Property<string>(\"LastModifiedByUser\")\n                        .HasColumnName(\"last_modified_by_user\")\n                        .HasColumnType(\"character varying(100)\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasColumnName(\"meta_description\")\n                        .HasColumnType(\"text\");\n\n                    b.Property<string>(\"MetaHtml\")\n                        .HasColumnName(\"meta_html\")\n                        .HasColumnType(\"text\");\n\n                    b.Property<string>(\"MetaJson\")\n                        .HasColumnName(\"meta_json\")\n                        .HasColumnType(\"text\");\n\n                    b.Property<int>(\"PageOrder\")\n                        .HasColumnName(\"page_order\")\n                        .HasColumnType(\"integer\");\n\n                    b.Property<string>(\"ParentId\")\n                        .HasColumnName(\"parent_id\")\n                        .HasColumnType(\"character varying(255)\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ParentSlug\")\n                        .HasColumnName(\"parent_slug\")\n                        .HasColumnType(\"character varying(255)\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ProjectId\")\n                        .HasColumnName(\"project_id\")\n                        .HasColumnType(\"character varying(50)\")\n                        .HasMaxLength(50);\n\n                    b.Property<DateTime?>(\"PubDate\")\n                        .HasColumnName(\"pub_date\")\n                        .HasColumnType(\"timestamp without time zone\");\n\n                    b.Property<string>(\"SerializedModel\")\n                        .HasColumnName(\"serialized_model\")\n                        .HasColumnType(\"text\");\n\n                    b.Property<string>(\"Serializer\")\n                        .HasColumnName(\"serializer\")\n                        .HasColumnType(\"character varying(50)\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"Slug\")\n                        .HasColumnName(\"slug\")\n                        .HasColumnType(\"character varying(255)\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"TeaserOverride\")\n                        .HasColumnName(\"teaser_override\")\n                        .HasColumnType(\"text\");\n\n                    b.Property<string>(\"TemplateKey\")\n                        .HasColumnName(\"template_key\")\n                        .HasColumnType(\"character varying(255)\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasColumnName(\"title\")\n                        .HasColumnType(\"character varying(255)\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ViewRoles\")\n                        .HasColumnName(\"view_roles\")\n                        .HasColumnType(\"text\");\n\n                    b.Property<bool>(\"WasDeleted\")\n                        .HasColumnName(\"was_deleted\")\n                        .HasColumnType(\"boolean\");\n\n                    b.HasKey(\"Id\")\n                        .HasName(\"pk_cs_content_history\");\n\n                    b.HasIndex(\"ContentId\")\n                        .HasName(\"ix_cs_content_history_content_id\");\n\n                    b.HasIndex(\"ContentSource\")\n                        .HasName(\"ix_cs_content_history_content_source\");\n\n                    b.HasIndex(\"CorrelationKey\")\n                        .HasName(\"ix_cs_content_history_correlation_key\");\n\n                    b.HasIndex(\"CreatedByUser\")\n                        .HasName(\"ix_cs_content_history_created_by_user\");\n\n                    b.HasIndex(\"LastModifiedByUser\")\n                        .HasName(\"ix_cs_content_history_last_modified_by_user\");\n\n                    b.HasIndex(\"Title\")\n                        .HasName(\"ix_cs_content_history_title\");\n\n                    b.ToTable(\"cs_content_history\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Models.ProjectSettings\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .HasColumnName(\"id\")\n                        .HasColumnType(\"character varying(50)\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"AboutContent\")\n                        .HasColumnName(\"about_content\")\n                        .HasColumnType(\"text\");\n\n                    b.Property<string>(\"AboutHeading\")\n                        .HasColumnName(\"about_heading\")\n                        .HasColumnType(\"character varying(255)\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"AddBlogToPagesTree\")\n                        .HasColumnName(\"add_blog_to_pages_tree\")\n                        .HasColumnType(\"boolean\");\n\n                    b.Property<bool>(\"BlogMenuLinksToNewestPost\")\n                        .HasColumnName(\"blog_menu_links_to_newest_post\")\n                        .HasColumnType(\"boolean\");\n\n                    b.Property<string>(\"BlogPageNavComponentVisibility\")\n                        .HasColumnName(\"blog_page_nav_component_visibility\")\n                        .HasColumnType(\"character varying(255)\")\n                        .HasMaxLength(255);\n\n                    b.Property<int>(\"BlogPagePosition\")\n                        .HasColumnName(\"blog_page_position\")\n                        .HasColumnType(\"integer\");\n\n                    b.Property<string>(\"BlogPageText\")\n                        .HasColumnName(\"blog_page_text\")\n                        .HasColumnType(\"character varying(255)\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CdnUrl\")\n                        .HasColumnName(\"cdn_url\")\n                        .HasColumnType(\"character varying(255)\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ChannelCategoriesCsv\")\n                        .HasColumnName(\"channel_categories_csv\")\n                        .HasColumnType(\"character varying(255)\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ChannelRating\")\n                        .HasColumnName(\"channel_rating\")\n                        .HasColumnType(\"character varying(100)\")\n                        .HasMaxLength(100);\n\n                    b.Property<int>(\"ChannelTimeToLive\")\n                        .HasColumnName(\"channel_time_to_live\")\n                        .HasColumnType(\"integer\");\n\n                    b.Property<string>(\"CommentNotificationEmail\")\n                        .HasColumnName(\"comment_notification_email\")\n                        .HasColumnType(\"character varying(100)\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"CopyrightNotice\")\n                        .HasColumnName(\"copyright_notice\")\n                        .HasColumnType(\"character varying(255)\")\n                        .HasMaxLength(255);\n\n                    b.Property<int>(\"DaysToComment\")\n                        .HasColumnName(\"days_to_comment\")\n                        .HasColumnType(\"integer\");\n\n                    b.Property<string>(\"DefaultContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnName(\"default_content_type\")\n                        .HasColumnType(\"character varying(50)\")\n                        .HasMaxLength(50)\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<int>(\"DefaultFeedItems\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnName(\"default_feed_items\")\n                        .HasColumnType(\"integer\")\n                        .HasDefaultValue(20);\n\n                    b.Property<string>(\"DefaultPageSlug\")\n                        .HasColumnName(\"default_page_slug\")\n                        .HasColumnType(\"character varying(255)\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Description\")\n                        .HasColumnName(\"description\")\n                        .HasColumnType(\"text\");\n\n                    b.Property<string>(\"DisqusShortName\")\n                        .HasColumnName(\"disqus_short_name\")\n                        .HasColumnType(\"character varying(100)\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"FacebookAppId\")\n                        .HasColumnName(\"facebook_app_id\")\n                        .HasColumnType(\"character varying(100)\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Image\")\n                        .HasColumnName(\"image\")\n                        .HasColumnType(\"character varying(255)\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"IncludePubDateInPostUrls\")\n                        .HasColumnName(\"include_pub_date_in_post_urls\")\n                        .HasColumnType(\"boolean\");\n\n                    b.Property<string>(\"LanguageCode\")\n                        .HasColumnName(\"language_code\")\n                        .HasColumnType(\"character varying(10)\")\n                        .HasMaxLength(10);\n\n                    b.Property<string>(\"LocalMediaVirtualPath\")\n                        .HasColumnName(\"local_media_virtual_path\")\n                        .HasColumnType(\"character varying(255)\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ManagingEditorEmail\")\n                        .HasColumnName(\"managing_editor_email\")\n                        .HasColumnType(\"character varying(100)\")\n                        .HasMaxLength(100);\n\n                    b.Property<int>(\"MaxFeedItems\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnName(\"max_feed_items\")\n                        .HasColumnType(\"integer\")\n                        .HasDefaultValue(1000);\n\n                    b.Property<bool>(\"ModerateComments\")\n                        .HasColumnName(\"moderate_comments\")\n                        .HasColumnType(\"boolean\");\n\n                    b.Property<int>(\"PostsPerPage\")\n                        .HasColumnName(\"posts_per_page\")\n                        .HasColumnType(\"integer\");\n\n                    b.Property<string>(\"PubDateFormat\")\n                        .HasColumnName(\"pub_date_format\")\n                        .HasColumnType(\"character varying(75)\")\n                        .HasMaxLength(75);\n\n                    b.Property<string>(\"Publisher\")\n                        .HasColumnName(\"publisher\")\n                        .HasColumnType(\"character varying(255)\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"PublisherEntityType\")\n                        .HasColumnName(\"publisher_entity_type\")\n                        .HasColumnType(\"character varying(50)\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PublisherLogoHeight\")\n                        .HasColumnName(\"publisher_logo_height\")\n                        .HasColumnType(\"character varying(20)\")\n                        .HasMaxLength(20);\n\n                    b.Property<string>(\"PublisherLogoUrl\")\n                        .HasColumnName(\"publisher_logo_url\")\n                        .HasColumnType(\"character varying(255)\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"PublisherLogoWidth\")\n                        .HasColumnName(\"publisher_logo_width\")\n                        .HasColumnType(\"character varying(20)\")\n                        .HasMaxLength(20);\n\n                    b.Property<string>(\"RecaptchaPrivateKey\")\n                        .HasColumnName(\"recaptcha_private_key\")\n                        .HasColumnType(\"character varying(255)\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RecaptchaPublicKey\")\n                        .HasColumnName(\"recaptcha_public_key\")\n                        .HasColumnType(\"character varying(255)\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RemoteFeedProcessorUseAgentFragment\")\n                        .HasColumnName(\"remote_feed_processor_use_agent_fragment\")\n                        .HasColumnType(\"character varying(255)\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RemoteFeedUrl\")\n                        .HasColumnName(\"remote_feed_url\")\n                        .HasColumnType(\"character varying(255)\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"ShowAboutBox\")\n                        .HasColumnName(\"show_about_box\")\n                        .HasColumnType(\"boolean\");\n\n                    b.Property<bool>(\"ShowFeaturedPostsOnDefaultPage\")\n                        .HasColumnName(\"show_featured_posts_on_default_page\")\n                        .HasColumnType(\"boolean\");\n\n                    b.Property<bool>(\"ShowRecentPostsOnDefaultPage\")\n                        .HasColumnName(\"show_recent_posts_on_default_page\")\n                        .HasColumnType(\"boolean\");\n\n                    b.Property<bool>(\"ShowRelatedPosts\")\n                        .HasColumnName(\"show_related_posts\")\n                        .HasColumnType(\"boolean\");\n\n                    b.Property<bool>(\"ShowTitle\")\n                        .HasColumnName(\"show_title\")\n                        .HasColumnType(\"boolean\");\n\n                    b.Property<string>(\"SiteName\")\n                        .HasColumnName(\"site_name\")\n                        .HasColumnType(\"character varying(200)\")\n                        .HasMaxLength(200);\n\n                    b.Property<byte>(\"TeaserMode\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnName(\"teaser_mode\")\n                        .HasColumnType(\"smallint\")\n                        .HasDefaultValue((byte)0);\n\n                    b.Property<int>(\"TeaserTruncationLength\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnName(\"teaser_truncation_length\")\n                        .HasColumnType(\"integer\")\n                        .HasDefaultValue(20);\n\n                    b.Property<byte>(\"TeaserTruncationMode\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnName(\"teaser_truncation_mode\")\n                        .HasColumnType(\"smallint\")\n                        .HasDefaultValue((byte)0);\n\n                    b.Property<string>(\"TimeZoneId\")\n                        .HasColumnName(\"time_zone_id\")\n                        .HasColumnType(\"character varying(100)\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Title\")\n                        .HasColumnName(\"title\")\n                        .HasColumnType(\"character varying(255)\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"TwitterCreator\")\n                        .HasColumnName(\"twitter_creator\")\n                        .HasColumnType(\"character varying(100)\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"TwitterPublisher\")\n                        .HasColumnName(\"twitter_publisher\")\n                        .HasColumnType(\"character varying(100)\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"UseDefaultPageAsRootNode\")\n                        .HasColumnName(\"use_default_page_as_root_node\")\n                        .HasColumnType(\"boolean\");\n\n                    b.Property<string>(\"WebmasterEmail\")\n                        .HasColumnName(\"webmaster_email\")\n                        .HasColumnType(\"character varying(100)\")\n                        .HasMaxLength(100);\n\n                    b.HasKey(\"Id\")\n                        .HasName(\"pk_cs_content_project\");\n\n                    b.ToTable(\"cs_content_project\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageCategory\", b =>\n                {\n                    b.Property<string>(\"Value\")\n                        .HasColumnName(\"value\")\n                        .HasColumnType(\"character varying(50)\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasColumnName(\"page_entity_id\")\n                        .HasColumnType(\"character varying(36)\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasColumnName(\"project_id\")\n                        .HasColumnType(\"character varying(50)\")\n                        .HasMaxLength(50);\n\n                    b.HasKey(\"Value\", \"PageEntityId\")\n                        .HasName(\"pk_cs_page_category\");\n\n                    b.HasIndex(\"PageEntityId\")\n                        .HasName(\"ix_cs_page_category_page_entity_id\");\n\n                    b.HasIndex(\"ProjectId\")\n                        .HasName(\"ix_cs_page_category_project_id\");\n\n                    b.HasIndex(\"Value\")\n                        .HasName(\"ix_cs_page_category_value\");\n\n                    b.ToTable(\"cs_page_category\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .HasColumnName(\"id\")\n                        .HasColumnType(\"character varying(36)\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasColumnName(\"author\")\n                        .HasColumnType(\"character varying(255)\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Content\")\n                        .HasColumnName(\"content\")\n                        .HasColumnType(\"text\");\n\n                    b.Property<string>(\"Email\")\n                        .HasColumnName(\"email\")\n                        .HasColumnType(\"character varying(100)\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Ip\")\n                        .HasColumnName(\"ip\")\n                        .HasColumnType(\"character varying(100)\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"IsAdmin\")\n                        .HasColumnName(\"is_admin\")\n                        .HasColumnType(\"boolean\");\n\n                    b.Property<bool>(\"IsApproved\")\n                        .HasColumnName(\"is_approved\")\n                        .HasColumnType(\"boolean\");\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasColumnName(\"page_entity_id\")\n                        .HasColumnType(\"character varying(36)\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasColumnName(\"project_id\")\n                        .HasColumnType(\"character varying(50)\")\n                        .HasMaxLength(50);\n\n                    b.Property<DateTime>(\"PubDate\")\n                        .HasColumnName(\"pub_date\")\n                        .HasColumnType(\"timestamp without time zone\");\n\n                    b.Property<string>(\"UserAgent\")\n                        .HasColumnName(\"user_agent\")\n                        .HasColumnType(\"character varying(255)\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Website\")\n                        .HasColumnName(\"website\")\n                        .HasColumnType(\"character varying(255)\")\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\")\n                        .HasName(\"pk_cs_page_comment\");\n\n                    b.HasIndex(\"PageEntityId\")\n                        .HasName(\"ix_cs_page_comment_page_entity_id\");\n\n                    b.HasIndex(\"ProjectId\")\n                        .HasName(\"ix_cs_page_comment_project_id\");\n\n                    b.ToTable(\"cs_page_comment\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .HasColumnName(\"id\")\n                        .HasColumnType(\"character varying(36)\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasColumnName(\"author\")\n                        .HasColumnType(\"character varying(255)\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasColumnName(\"categories_csv\")\n                        .HasColumnType(\"character varying(500)\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"Content\")\n                        .HasColumnName(\"content\")\n                        .HasColumnType(\"text\");\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnName(\"content_type\")\n                        .HasColumnType(\"character varying(50)\")\n                        .HasMaxLength(50)\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasColumnName(\"correlation_key\")\n                        .HasColumnType(\"character varying(255)\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CreatedByUser\")\n                        .HasColumnName(\"created_by_user\")\n                        .HasColumnType(\"character varying(100)\")\n                        .HasMaxLength(100);\n\n                    b.Property<DateTime>(\"CreatedUtc\")\n                        .HasColumnName(\"created_utc\")\n                        .HasColumnType(\"timestamp without time zone\");\n\n                    b.Property<bool>(\"DisableEditor\")\n                        .HasColumnName(\"disable_editor\")\n                        .HasColumnType(\"boolean\");\n\n                    b.Property<string>(\"DraftAuthor\")\n                        .HasColumnName(\"draft_author\")\n                        .HasColumnType(\"character varying(255)\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"DraftContent\")\n                        .HasColumnName(\"draft_content\")\n                        .HasColumnType(\"text\");\n\n                    b.Property<DateTime?>(\"DraftPubDate\")\n                        .HasColumnName(\"draft_pub_date\")\n                        .HasColumnType(\"timestamp without time zone\");\n\n                    b.Property<string>(\"DraftSerializedModel\")\n                        .HasColumnName(\"draft_serialized_model\")\n                        .HasColumnType(\"text\");\n\n                    b.Property<string>(\"ExternalUrl\")\n                        .HasColumnName(\"external_url\")\n                        .HasColumnType(\"character varying(255)\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"IsPublished\")\n                        .HasColumnName(\"is_published\")\n                        .HasColumnType(\"boolean\");\n\n                    b.Property<DateTime>(\"LastModified\")\n                        .HasColumnName(\"last_modified\")\n                        .HasColumnType(\"timestamp without time zone\");\n\n                    b.Property<string>(\"LastModifiedByUser\")\n                        .HasColumnName(\"last_modified_by_user\")\n                        .HasColumnType(\"character varying(100)\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"MenuFilters\")\n                        .HasColumnName(\"menu_filters\")\n                        .HasColumnType(\"character varying(500)\")\n                        .HasMaxLength(500);\n\n                    b.Property<bool>(\"MenuOnly\")\n                        .HasColumnName(\"menu_only\")\n                        .HasColumnType(\"boolean\");\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasColumnName(\"meta_description\")\n                        .HasColumnType(\"character varying(500)\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"MetaHtml\")\n                        .HasColumnName(\"meta_html\")\n                        .HasColumnType(\"text\");\n\n                    b.Property<string>(\"MetaJson\")\n                        .HasColumnName(\"meta_json\")\n                        .HasColumnType(\"text\");\n\n                    b.Property<int>(\"PageOrder\")\n                        .HasColumnName(\"page_order\")\n                        .HasColumnType(\"integer\");\n\n                    b.Property<string>(\"ParentId\")\n                        .HasColumnName(\"parent_id\")\n                        .HasColumnType(\"character varying(36)\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ParentSlug\")\n                        .HasColumnName(\"parent_slug\")\n                        .HasColumnType(\"character varying(255)\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasColumnName(\"project_id\")\n                        .HasColumnType(\"character varying(50)\")\n                        .HasMaxLength(50);\n\n                    b.Property<DateTime?>(\"PubDate\")\n                        .HasColumnName(\"pub_date\")\n                        .HasColumnType(\"timestamp without time zone\");\n\n                    b.Property<string>(\"SerializedModel\")\n                        .HasColumnName(\"serialized_model\")\n                        .HasColumnType(\"text\");\n\n                    b.Property<string>(\"Serializer\")\n                        .HasColumnName(\"serializer\")\n                        .HasColumnType(\"character varying(50)\")\n                        .HasMaxLength(50);\n\n                    b.Property<bool>(\"ShowCategories\")\n                        .HasColumnName(\"show_categories\")\n                        .HasColumnType(\"boolean\");\n\n                    b.Property<bool>(\"ShowComments\")\n                        .HasColumnName(\"show_comments\")\n                        .HasColumnType(\"boolean\");\n\n                    b.Property<bool>(\"ShowHeading\")\n                        .HasColumnName(\"show_heading\")\n                        .HasColumnType(\"boolean\");\n\n                    b.Property<bool>(\"ShowLastModified\")\n                        .HasColumnName(\"show_last_modified\")\n                        .HasColumnType(\"boolean\");\n\n                    b.Property<bool>(\"ShowMenu\")\n                        .HasColumnName(\"show_menu\")\n                        .HasColumnType(\"boolean\");\n\n                    b.Property<bool>(\"ShowPubDate\")\n                        .HasColumnName(\"show_pub_date\")\n                        .HasColumnType(\"boolean\");\n\n                    b.Property<string>(\"Slug\")\n                        .IsRequired()\n                        .HasColumnName(\"slug\")\n                        .HasColumnType(\"character varying(255)\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"TemplateKey\")\n                        .HasColumnName(\"template_key\")\n                        .HasColumnType(\"character varying(255)\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasColumnName(\"title\")\n                        .HasColumnType(\"character varying(255)\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ViewRoles\")\n                        .HasColumnName(\"view_roles\")\n                        .HasColumnType(\"text\");\n\n                    b.HasKey(\"Id\")\n                        .HasName(\"pk_cs_page\");\n\n                    b.HasIndex(\"CorrelationKey\")\n                        .HasName(\"ix_cs_page_correlation_key\");\n\n                    b.HasIndex(\"ParentId\")\n                        .HasName(\"ix_cs_page_parent_id\");\n\n                    b.HasIndex(\"ProjectId\")\n                        .HasName(\"ix_cs_page_project_id\");\n\n                    b.ToTable(\"cs_page\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageResourceEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .HasColumnName(\"id\")\n                        .HasColumnType(\"character varying(36)\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Environment\")\n                        .IsRequired()\n                        .HasColumnName(\"environment\")\n                        .HasColumnType(\"character varying(15)\")\n                        .HasMaxLength(15);\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasColumnName(\"page_entity_id\")\n                        .HasColumnType(\"character varying(36)\")\n                        .HasMaxLength(36);\n\n                    b.Property<int>(\"Sort\")\n                        .HasColumnName(\"sort\")\n                        .HasColumnType(\"integer\");\n\n                    b.Property<string>(\"Type\")\n                        .IsRequired()\n                        .HasColumnName(\"type\")\n                        .HasColumnType(\"character varying(10)\")\n                        .HasMaxLength(10);\n\n                    b.Property<string>(\"Url\")\n                        .IsRequired()\n                        .HasColumnName(\"url\")\n                        .HasColumnType(\"character varying(255)\")\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\")\n                        .HasName(\"pk_cs_page_resource\");\n\n                    b.HasIndex(\"PageEntityId\")\n                        .HasName(\"ix_cs_page_resource_page_entity_id\");\n\n                    b.ToTable(\"cs_page_resource\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostCategory\", b =>\n                {\n                    b.Property<string>(\"Value\")\n                        .HasColumnName(\"value\")\n                        .HasColumnType(\"character varying(50)\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PostEntityId\")\n                        .HasColumnName(\"post_entity_id\")\n                        .HasColumnType(\"character varying(36)\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasColumnName(\"project_id\")\n                        .HasColumnType(\"character varying(50)\")\n                        .HasMaxLength(50);\n\n                    b.HasKey(\"Value\", \"PostEntityId\")\n                        .HasName(\"pk_cs_post_category\");\n\n                    b.HasIndex(\"PostEntityId\")\n                        .HasName(\"ix_cs_post_category_post_entity_id\");\n\n                    b.HasIndex(\"ProjectId\")\n                        .HasName(\"ix_cs_post_category_project_id\");\n\n                    b.HasIndex(\"Value\")\n                        .HasName(\"ix_cs_post_category_value\");\n\n                    b.ToTable(\"cs_post_category\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .HasColumnName(\"id\")\n                        .HasColumnType(\"character varying(36)\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasColumnName(\"author\")\n                        .HasColumnType(\"character varying(255)\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Content\")\n                        .HasColumnName(\"content\")\n                        .HasColumnType(\"text\");\n\n                    b.Property<string>(\"Email\")\n                        .HasColumnName(\"email\")\n                        .HasColumnType(\"character varying(100)\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Ip\")\n                        .HasColumnName(\"ip\")\n                        .HasColumnType(\"character varying(100)\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"IsAdmin\")\n                        .HasColumnName(\"is_admin\")\n                        .HasColumnType(\"boolean\");\n\n                    b.Property<bool>(\"IsApproved\")\n                        .HasColumnName(\"is_approved\")\n                        .HasColumnType(\"boolean\");\n\n                    b.Property<string>(\"PostEntityId\")\n                        .HasColumnName(\"post_entity_id\")\n                        .HasColumnType(\"character varying(36)\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasColumnName(\"project_id\")\n                        .HasColumnType(\"character varying(50)\")\n                        .HasMaxLength(50);\n\n                    b.Property<DateTime>(\"PubDate\")\n                        .HasColumnName(\"pub_date\")\n                        .HasColumnType(\"timestamp without time zone\");\n\n                    b.Property<string>(\"UserAgent\")\n                        .HasColumnName(\"user_agent\")\n                        .HasColumnType(\"character varying(255)\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Website\")\n                        .HasColumnName(\"website\")\n                        .HasColumnType(\"character varying(255)\")\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\")\n                        .HasName(\"pk_cs_post_comment\");\n\n                    b.HasIndex(\"PostEntityId\")\n                        .HasName(\"ix_cs_post_comment_post_entity_id\");\n\n                    b.HasIndex(\"ProjectId\")\n                        .HasName(\"ix_cs_post_comment_project_id\");\n\n                    b.ToTable(\"cs_post_comment\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .HasColumnName(\"id\")\n                        .HasColumnType(\"character varying(36)\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasColumnName(\"author\")\n                        .HasColumnType(\"character varying(255)\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"AutoTeaser\")\n                        .HasColumnName(\"auto_teaser\")\n                        .HasColumnType(\"text\");\n\n                    b.Property<string>(\"BlogId\")\n                        .IsRequired()\n                        .HasColumnName(\"blog_id\")\n                        .HasColumnType(\"character varying(50)\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasColumnName(\"categories_csv\")\n                        .HasColumnType(\"character varying(500)\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"Content\")\n                        .HasColumnName(\"content\")\n                        .HasColumnType(\"text\");\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnName(\"content_type\")\n                        .HasColumnType(\"character varying(50)\")\n                        .HasMaxLength(50)\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasColumnName(\"correlation_key\")\n                        .HasColumnType(\"character varying(255)\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CreatedByUser\")\n                        .HasColumnName(\"created_by_user\")\n                        .HasColumnType(\"character varying(100)\")\n                        .HasMaxLength(100);\n\n                    b.Property<DateTime>(\"CreatedUtc\")\n                        .HasColumnName(\"created_utc\")\n                        .HasColumnType(\"timestamp without time zone\");\n\n                    b.Property<string>(\"DraftAuthor\")\n                        .HasColumnName(\"draft_author\")\n                        .HasColumnType(\"character varying(255)\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"DraftContent\")\n                        .HasColumnName(\"draft_content\")\n                        .HasColumnType(\"text\");\n\n                    b.Property<DateTime?>(\"DraftPubDate\")\n                        .HasColumnName(\"draft_pub_date\")\n                        .HasColumnType(\"timestamp without time zone\");\n\n                    b.Property<string>(\"DraftSerializedModel\")\n                        .HasColumnName(\"draft_serialized_model\")\n                        .HasColumnType(\"text\");\n\n                    b.Property<string>(\"ImageUrl\")\n                        .HasColumnName(\"image_url\")\n                        .HasColumnType(\"character varying(250)\")\n                        .HasMaxLength(250);\n\n                    b.Property<bool>(\"IsFeatured\")\n                        .HasColumnName(\"is_featured\")\n                        .HasColumnType(\"boolean\");\n\n                    b.Property<bool>(\"IsPublished\")\n                        .HasColumnName(\"is_published\")\n                        .HasColumnType(\"boolean\");\n\n                    b.Property<DateTime>(\"LastModified\")\n                        .HasColumnName(\"last_modified\")\n                        .HasColumnType(\"timestamp without time zone\");\n\n                    b.Property<string>(\"LastModifiedByUser\")\n                        .HasColumnName(\"last_modified_by_user\")\n                        .HasColumnType(\"character varying(100)\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasColumnName(\"meta_description\")\n                        .HasColumnType(\"character varying(500)\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"MetaHtml\")\n                        .HasColumnName(\"meta_html\")\n                        .HasColumnType(\"text\");\n\n                    b.Property<string>(\"MetaJson\")\n                        .HasColumnName(\"meta_json\")\n                        .HasColumnType(\"text\");\n\n                    b.Property<DateTime?>(\"PubDate\")\n                        .HasColumnName(\"pub_date\")\n                        .HasColumnType(\"timestamp without time zone\");\n\n                    b.Property<string>(\"SerializedModel\")\n                        .HasColumnName(\"serialized_model\")\n                        .HasColumnType(\"text\");\n\n                    b.Property<string>(\"Serializer\")\n                        .HasColumnName(\"serializer\")\n                        .HasColumnType(\"character varying(50)\")\n                        .HasMaxLength(50);\n\n                    b.Property<bool>(\"ShowComments\")\n                        .HasColumnName(\"show_comments\")\n                        .HasColumnType(\"boolean\");\n\n                    b.Property<string>(\"Slug\")\n                        .IsRequired()\n                        .HasColumnName(\"slug\")\n                        .HasColumnType(\"character varying(255)\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"SuppressTeaser\")\n                        .HasColumnName(\"suppress_teaser\")\n                        .HasColumnType(\"boolean\");\n\n                    b.Property<string>(\"TeaserOverride\")\n                        .HasColumnName(\"teaser_override\")\n                        .HasColumnType(\"text\");\n\n                    b.Property<string>(\"TemplateKey\")\n                        .HasColumnName(\"template_key\")\n                        .HasColumnType(\"character varying(255)\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ThumbnailUrl\")\n                        .HasColumnName(\"thumbnail_url\")\n                        .HasColumnType(\"character varying(250)\")\n                        .HasMaxLength(250);\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasColumnName(\"title\")\n                        .HasColumnType(\"character varying(255)\")\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\")\n                        .HasName(\"pk_cs_post\");\n\n                    b.HasIndex(\"BlogId\")\n                        .HasName(\"ix_cs_post_blog_id\");\n\n                    b.HasIndex(\"CorrelationKey\")\n                        .HasName(\"ix_cs_post_correlation_key\");\n\n                    b.HasIndex(\"Slug\")\n                        .HasName(\"ix_cs_post_slug\");\n\n                    b.ToTable(\"cs_post\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\", null)\n                        .WithMany(\"PageComments\")\n                        .HasForeignKey(\"PageEntityId\")\n                        .HasConstraintName(\"fk_cs_page_comment_cs__page_page_entity_id\")\n                        .OnDelete(DeleteBehavior.Cascade);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageResourceEntity\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\", null)\n                        .WithMany(\"PageResources\")\n                        .HasForeignKey(\"PageEntityId\")\n                        .HasConstraintName(\"fk_cs_page_resource_cs_page_page_entity_id\")\n                        .OnDelete(DeleteBehavior.Cascade);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\", null)\n                        .WithMany(\"PostComments\")\n                        .HasForeignKey(\"PostEntityId\")\n                        .HasConstraintName(\"fk_cs_post_comment_cs__post_post_entity_id\");\n                });\n#pragma warning restore 612, 618\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.PostgreSql/Migrations/20200723185336_AddPostShowCommentsSwitch.cs",
    "content": "﻿using Microsoft.EntityFrameworkCore.Migrations;\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.PostgreSql.Migrations\n{\n    public partial class AddPostShowCommentsSwitch : Migration\n    {\n        protected override void Up(MigrationBuilder migrationBuilder)\n        {\n            migrationBuilder.DropForeignKey(\n                name: \"fk_cs_page_comment_cs_page_page_entity_id\",\n                table: \"cs_page_comment\");\n\n            migrationBuilder.DropForeignKey(\n                name: \"fk_cs_post_comment_cs_post_post_entity_id\",\n                table: \"cs_post_comment\");\n\n            migrationBuilder.AddColumn<bool>(\n                name: \"show_comments\",\n                table: \"cs_post\",\n                nullable: false,\n                defaultValue: false);\n\n            migrationBuilder.AddForeignKey(\n                name: \"fk_cs_page_comment_cs__page_page_entity_id\",\n                table: \"cs_page_comment\",\n                column: \"page_entity_id\",\n                principalTable: \"cs_page\",\n                principalColumn: \"id\",\n                onDelete: ReferentialAction.Cascade);\n\n            migrationBuilder.AddForeignKey(\n                name: \"fk_cs_post_comment_cs__post_post_entity_id\",\n                table: \"cs_post_comment\",\n                column: \"post_entity_id\",\n                principalTable: \"cs_post\",\n                principalColumn: \"id\",\n                onDelete: ReferentialAction.Restrict);\n        }\n\n        protected override void Down(MigrationBuilder migrationBuilder)\n        {\n            migrationBuilder.DropForeignKey(\n                name: \"fk_cs_page_comment_cs__page_page_entity_id\",\n                table: \"cs_page_comment\");\n\n            migrationBuilder.DropForeignKey(\n                name: \"fk_cs_post_comment_cs__post_post_entity_id\",\n                table: \"cs_post_comment\");\n\n            migrationBuilder.DropColumn(\n                name: \"show_comments\",\n                table: \"cs_post\");\n\n            migrationBuilder.AddForeignKey(\n                name: \"fk_cs_page_comment_cs_page_page_entity_id\",\n                table: \"cs_page_comment\",\n                column: \"page_entity_id\",\n                principalTable: \"cs_page\",\n                principalColumn: \"id\",\n                onDelete: ReferentialAction.Cascade);\n\n            migrationBuilder.AddForeignKey(\n                name: \"fk_cs_post_comment_cs_post_post_entity_id\",\n                table: \"cs_post_comment\",\n                column: \"post_entity_id\",\n                principalTable: \"cs_post\",\n                principalColumn: \"id\",\n                onDelete: ReferentialAction.Restrict);\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.PostgreSql/Migrations/20220420182545_simplecontent-20220420.Designer.cs",
    "content": "﻿// <auto-generated />\nusing System;\nusing Microsoft.EntityFrameworkCore;\nusing Microsoft.EntityFrameworkCore.Infrastructure;\nusing Microsoft.EntityFrameworkCore.Migrations;\nusing Microsoft.EntityFrameworkCore.Storage.ValueConversion;\nusing Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;\nusing cloudscribe.SimpleContent.Storage.EFCore.PostgreSql;\n\n#nullable disable\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.PostgreSql.Migrations\n{\n    [DbContext(typeof(SimpleContentDbContext))]\n    [Migration(\"20220420182545_simplecontent-20220420\")]\n    partial class simplecontent20220420\n    {\n        protected override void BuildTargetModel(ModelBuilder modelBuilder)\n        {\n#pragma warning disable 612, 618\n            modelBuilder\n                .HasAnnotation(\"ProductVersion\", \"6.0.0\")\n                .HasAnnotation(\"Relational:MaxIdentifierLength\", 63);\n\n            NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder);\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Models.ContentHistory\", b =>\n                {\n                    b.Property<Guid>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36)\n                        .HasColumnType(\"uuid\")\n                        .HasColumnName(\"id\");\n\n                    b.Property<string>(\"ArchivedBy\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"archived_by\");\n\n                    b.Property<DateTime>(\"ArchivedUtc\")\n                        .HasColumnType(\"timestamp with time zone\")\n                        .HasColumnName(\"archived_utc\");\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"author\");\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"categories_csv\");\n\n                    b.Property<string>(\"Content\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"content\");\n\n                    b.Property<string>(\"ContentId\")\n                        .IsRequired()\n                        .HasMaxLength(36)\n                        .HasColumnType(\"character varying(36)\")\n                        .HasColumnName(\"content_id\");\n\n                    b.Property<string>(\"ContentSource\")\n                        .IsRequired()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"character varying(50)\")\n                        .HasColumnName(\"content_source\");\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"character varying(50)\")\n                        .HasDefaultValue(\"html\")\n                        .HasColumnName(\"content_type\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"correlation_key\");\n\n                    b.Property<string>(\"CreatedByUser\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"character varying(100)\")\n                        .HasColumnName(\"created_by_user\");\n\n                    b.Property<DateTime>(\"CreatedUtc\")\n                        .HasColumnType(\"timestamp with time zone\")\n                        .HasColumnName(\"created_utc\");\n\n                    b.Property<string>(\"DraftAuthor\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"draft_author\");\n\n                    b.Property<string>(\"DraftContent\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"draft_content\");\n\n                    b.Property<DateTime?>(\"DraftPubDate\")\n                        .HasColumnType(\"timestamp with time zone\")\n                        .HasColumnName(\"draft_pub_date\");\n\n                    b.Property<string>(\"DraftSerializedModel\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"draft_serialized_model\");\n\n                    b.Property<bool>(\"IsDraftHx\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"is_draft_hx\");\n\n                    b.Property<bool>(\"IsPublished\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"is_published\");\n\n                    b.Property<DateTime>(\"LastModified\")\n                        .HasColumnType(\"timestamp with time zone\")\n                        .HasColumnName(\"last_modified\");\n\n                    b.Property<string>(\"LastModifiedByUser\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"character varying(100)\")\n                        .HasColumnName(\"last_modified_by_user\");\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"meta_description\");\n\n                    b.Property<string>(\"MetaHtml\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"meta_html\");\n\n                    b.Property<string>(\"MetaJson\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"meta_json\");\n\n                    b.Property<int>(\"PageOrder\")\n                        .HasColumnType(\"integer\")\n                        .HasColumnName(\"page_order\");\n\n                    b.Property<string>(\"ParentId\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"parent_id\");\n\n                    b.Property<string>(\"ParentSlug\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"parent_slug\");\n\n                    b.Property<string>(\"ProjectId\")\n                        .HasMaxLength(50)\n                        .HasColumnType(\"character varying(50)\")\n                        .HasColumnName(\"project_id\");\n\n                    b.Property<DateTime?>(\"PubDate\")\n                        .HasColumnType(\"timestamp with time zone\")\n                        .HasColumnName(\"pub_date\");\n\n                    b.Property<string>(\"SerializedModel\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"serialized_model\");\n\n                    b.Property<string>(\"Serializer\")\n                        .HasMaxLength(50)\n                        .HasColumnType(\"character varying(50)\")\n                        .HasColumnName(\"serializer\");\n\n                    b.Property<string>(\"Slug\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"slug\");\n\n                    b.Property<string>(\"TeaserOverride\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"teaser_override\");\n\n                    b.Property<string>(\"TemplateKey\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"template_key\");\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"title\");\n\n                    b.Property<string>(\"ViewRoles\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"view_roles\");\n\n                    b.Property<bool>(\"WasDeleted\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"was_deleted\");\n\n                    b.HasKey(\"Id\")\n                        .HasName(\"pk_cs_content_history\");\n\n                    b.HasIndex(\"ContentId\")\n                        .HasDatabaseName(\"ix_cs_content_history_content_id\");\n\n                    b.HasIndex(\"ContentSource\")\n                        .HasDatabaseName(\"ix_cs_content_history_content_source\");\n\n                    b.HasIndex(\"CorrelationKey\")\n                        .HasDatabaseName(\"ix_cs_content_history_correlation_key\");\n\n                    b.HasIndex(\"CreatedByUser\")\n                        .HasDatabaseName(\"ix_cs_content_history_created_by_user\");\n\n                    b.HasIndex(\"LastModifiedByUser\")\n                        .HasDatabaseName(\"ix_cs_content_history_last_modified_by_user\");\n\n                    b.HasIndex(\"Title\")\n                        .HasDatabaseName(\"ix_cs_content_history_title\");\n\n                    b.ToTable(\"cs_content_history\", (string)null);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Models.ProjectSettings\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .HasMaxLength(50)\n                        .HasColumnType(\"character varying(50)\")\n                        .HasColumnName(\"id\");\n\n                    b.Property<string>(\"AboutContent\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"about_content\");\n\n                    b.Property<string>(\"AboutHeading\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"about_heading\");\n\n                    b.Property<bool>(\"AddBlogToPagesTree\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"add_blog_to_pages_tree\");\n\n                    b.Property<bool>(\"BlogMenuLinksToNewestPost\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"blog_menu_links_to_newest_post\");\n\n                    b.Property<string>(\"BlogPageNavComponentVisibility\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"blog_page_nav_component_visibility\");\n\n                    b.Property<int>(\"BlogPagePosition\")\n                        .HasColumnType(\"integer\")\n                        .HasColumnName(\"blog_page_position\");\n\n                    b.Property<string>(\"BlogPageText\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"blog_page_text\");\n\n                    b.Property<string>(\"CdnUrl\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"cdn_url\");\n\n                    b.Property<string>(\"ChannelCategoriesCsv\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"channel_categories_csv\");\n\n                    b.Property<string>(\"ChannelRating\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"character varying(100)\")\n                        .HasColumnName(\"channel_rating\");\n\n                    b.Property<int>(\"ChannelTimeToLive\")\n                        .HasColumnType(\"integer\")\n                        .HasColumnName(\"channel_time_to_live\");\n\n                    b.Property<string>(\"CommentNotificationEmail\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"character varying(100)\")\n                        .HasColumnName(\"comment_notification_email\");\n\n                    b.Property<string>(\"CopyrightNotice\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"copyright_notice\");\n\n                    b.Property<int>(\"DaysToComment\")\n                        .HasColumnType(\"integer\")\n                        .HasColumnName(\"days_to_comment\");\n\n                    b.Property<string>(\"DefaultContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"character varying(50)\")\n                        .HasDefaultValue(\"html\")\n                        .HasColumnName(\"default_content_type\");\n\n                    b.Property<int>(\"DefaultFeedItems\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"integer\")\n                        .HasDefaultValue(20)\n                        .HasColumnName(\"default_feed_items\");\n\n                    b.Property<string>(\"DefaultPageSlug\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"default_page_slug\");\n\n                    b.Property<string>(\"Description\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"description\");\n\n                    b.Property<string>(\"DisqusShortName\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"character varying(100)\")\n                        .HasColumnName(\"disqus_short_name\");\n\n                    b.Property<string>(\"FacebookAppId\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"character varying(100)\")\n                        .HasColumnName(\"facebook_app_id\");\n\n                    b.Property<string>(\"Image\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"image\");\n\n                    b.Property<bool>(\"IncludePubDateInPostUrls\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"include_pub_date_in_post_urls\");\n\n                    b.Property<string>(\"LanguageCode\")\n                        .HasMaxLength(10)\n                        .HasColumnType(\"character varying(10)\")\n                        .HasColumnName(\"language_code\");\n\n                    b.Property<string>(\"LocalMediaVirtualPath\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"local_media_virtual_path\");\n\n                    b.Property<string>(\"ManagingEditorEmail\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"character varying(100)\")\n                        .HasColumnName(\"managing_editor_email\");\n\n                    b.Property<int>(\"MaxFeedItems\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"integer\")\n                        .HasDefaultValue(1000)\n                        .HasColumnName(\"max_feed_items\");\n\n                    b.Property<bool>(\"ModerateComments\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"moderate_comments\");\n\n                    b.Property<int>(\"PostsPerPage\")\n                        .HasColumnType(\"integer\")\n                        .HasColumnName(\"posts_per_page\");\n\n                    b.Property<string>(\"PubDateFormat\")\n                        .HasMaxLength(75)\n                        .HasColumnType(\"character varying(75)\")\n                        .HasColumnName(\"pub_date_format\");\n\n                    b.Property<string>(\"Publisher\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"publisher\");\n\n                    b.Property<string>(\"PublisherEntityType\")\n                        .HasMaxLength(50)\n                        .HasColumnType(\"character varying(50)\")\n                        .HasColumnName(\"publisher_entity_type\");\n\n                    b.Property<string>(\"PublisherLogoHeight\")\n                        .HasMaxLength(20)\n                        .HasColumnType(\"character varying(20)\")\n                        .HasColumnName(\"publisher_logo_height\");\n\n                    b.Property<string>(\"PublisherLogoUrl\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"publisher_logo_url\");\n\n                    b.Property<string>(\"PublisherLogoWidth\")\n                        .HasMaxLength(20)\n                        .HasColumnType(\"character varying(20)\")\n                        .HasColumnName(\"publisher_logo_width\");\n\n                    b.Property<string>(\"RecaptchaPrivateKey\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"recaptcha_private_key\");\n\n                    b.Property<string>(\"RecaptchaPublicKey\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"recaptcha_public_key\");\n\n                    b.Property<string>(\"RemoteFeedProcessorUseAgentFragment\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"remote_feed_processor_use_agent_fragment\");\n\n                    b.Property<string>(\"RemoteFeedUrl\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"remote_feed_url\");\n\n                    b.Property<bool>(\"ShowAboutBox\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"show_about_box\");\n\n                    b.Property<bool>(\"ShowFeaturedPostsOnDefaultPage\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"show_featured_posts_on_default_page\");\n\n                    b.Property<bool>(\"ShowRecentPostsOnDefaultPage\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"show_recent_posts_on_default_page\");\n\n                    b.Property<bool>(\"ShowRelatedPosts\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"show_related_posts\");\n\n                    b.Property<bool>(\"ShowTitle\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"show_title\");\n\n                    b.Property<string>(\"SiteName\")\n                        .HasMaxLength(200)\n                        .HasColumnType(\"character varying(200)\")\n                        .HasColumnName(\"site_name\");\n\n                    b.Property<byte>(\"TeaserMode\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"smallint\")\n                        .HasDefaultValue((byte)0)\n                        .HasColumnName(\"teaser_mode\");\n\n                    b.Property<int>(\"TeaserTruncationLength\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"integer\")\n                        .HasDefaultValue(20)\n                        .HasColumnName(\"teaser_truncation_length\");\n\n                    b.Property<byte>(\"TeaserTruncationMode\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"smallint\")\n                        .HasDefaultValue((byte)0)\n                        .HasColumnName(\"teaser_truncation_mode\");\n\n                    b.Property<string>(\"TimeZoneId\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"character varying(100)\")\n                        .HasColumnName(\"time_zone_id\");\n\n                    b.Property<string>(\"Title\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"title\");\n\n                    b.Property<string>(\"TwitterCreator\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"character varying(100)\")\n                        .HasColumnName(\"twitter_creator\");\n\n                    b.Property<string>(\"TwitterPublisher\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"character varying(100)\")\n                        .HasColumnName(\"twitter_publisher\");\n\n                    b.Property<bool>(\"UseDefaultPageAsRootNode\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"use_default_page_as_root_node\");\n\n                    b.Property<string>(\"WebmasterEmail\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"character varying(100)\")\n                        .HasColumnName(\"webmaster_email\");\n\n                    b.HasKey(\"Id\")\n                        .HasName(\"pk_cs_content_project\");\n\n                    b.ToTable(\"cs_content_project\", (string)null);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageCategory\", b =>\n                {\n                    b.Property<string>(\"Value\")\n                        .HasMaxLength(50)\n                        .HasColumnType(\"character varying(50)\")\n                        .HasColumnName(\"value\");\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"character varying(36)\")\n                        .HasColumnName(\"page_entity_id\");\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"character varying(50)\")\n                        .HasColumnName(\"project_id\");\n\n                    b.HasKey(\"Value\", \"PageEntityId\")\n                        .HasName(\"pk_cs_page_category\");\n\n                    b.HasIndex(\"PageEntityId\")\n                        .HasDatabaseName(\"ix_cs_page_category_page_entity_id\");\n\n                    b.HasIndex(\"ProjectId\")\n                        .HasDatabaseName(\"ix_cs_page_category_project_id\");\n\n                    b.HasIndex(\"Value\")\n                        .HasDatabaseName(\"ix_cs_page_category_value\");\n\n                    b.ToTable(\"cs_page_category\", (string)null);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"character varying(36)\")\n                        .HasColumnName(\"id\");\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"author\");\n\n                    b.Property<string>(\"Content\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"content\");\n\n                    b.Property<string>(\"Email\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"character varying(100)\")\n                        .HasColumnName(\"email\");\n\n                    b.Property<string>(\"Ip\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"character varying(100)\")\n                        .HasColumnName(\"ip\");\n\n                    b.Property<bool>(\"IsAdmin\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"is_admin\");\n\n                    b.Property<bool>(\"IsApproved\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"is_approved\");\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"character varying(36)\")\n                        .HasColumnName(\"page_entity_id\");\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"character varying(50)\")\n                        .HasColumnName(\"project_id\");\n\n                    b.Property<DateTime>(\"PubDate\")\n                        .HasColumnType(\"timestamp with time zone\")\n                        .HasColumnName(\"pub_date\");\n\n                    b.Property<string>(\"UserAgent\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"user_agent\");\n\n                    b.Property<string>(\"Website\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"website\");\n\n                    b.HasKey(\"Id\")\n                        .HasName(\"pk_cs_page_comment\");\n\n                    b.HasIndex(\"PageEntityId\")\n                        .HasDatabaseName(\"ix_cs_page_comment_page_entity_id\");\n\n                    b.HasIndex(\"ProjectId\")\n                        .HasDatabaseName(\"ix_cs_page_comment_project_id\");\n\n                    b.ToTable(\"cs_page_comment\", (string)null);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"character varying(36)\")\n                        .HasColumnName(\"id\");\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"author\");\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasMaxLength(500)\n                        .HasColumnType(\"character varying(500)\")\n                        .HasColumnName(\"categories_csv\");\n\n                    b.Property<string>(\"Content\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"content\");\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"character varying(50)\")\n                        .HasDefaultValue(\"html\")\n                        .HasColumnName(\"content_type\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"correlation_key\");\n\n                    b.Property<string>(\"CreatedByUser\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"character varying(100)\")\n                        .HasColumnName(\"created_by_user\");\n\n                    b.Property<DateTime>(\"CreatedUtc\")\n                        .HasColumnType(\"timestamp with time zone\")\n                        .HasColumnName(\"created_utc\");\n\n                    b.Property<bool>(\"DisableEditor\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"disable_editor\");\n\n                    b.Property<string>(\"DraftAuthor\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"draft_author\");\n\n                    b.Property<string>(\"DraftContent\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"draft_content\");\n\n                    b.Property<DateTime?>(\"DraftPubDate\")\n                        .HasColumnType(\"timestamp with time zone\")\n                        .HasColumnName(\"draft_pub_date\");\n\n                    b.Property<string>(\"DraftSerializedModel\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"draft_serialized_model\");\n\n                    b.Property<string>(\"ExternalUrl\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"external_url\");\n\n                    b.Property<bool>(\"IsPublished\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"is_published\");\n\n                    b.Property<DateTime>(\"LastModified\")\n                        .HasColumnType(\"timestamp with time zone\")\n                        .HasColumnName(\"last_modified\");\n\n                    b.Property<string>(\"LastModifiedByUser\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"character varying(100)\")\n                        .HasColumnName(\"last_modified_by_user\");\n\n                    b.Property<string>(\"MenuFilters\")\n                        .HasMaxLength(500)\n                        .HasColumnType(\"character varying(500)\")\n                        .HasColumnName(\"menu_filters\");\n\n                    b.Property<bool>(\"MenuOnly\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"menu_only\");\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasMaxLength(500)\n                        .HasColumnType(\"character varying(500)\")\n                        .HasColumnName(\"meta_description\");\n\n                    b.Property<string>(\"MetaHtml\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"meta_html\");\n\n                    b.Property<string>(\"MetaJson\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"meta_json\");\n\n                    b.Property<int>(\"PageOrder\")\n                        .HasColumnType(\"integer\")\n                        .HasColumnName(\"page_order\");\n\n                    b.Property<string>(\"ParentId\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"character varying(36)\")\n                        .HasColumnName(\"parent_id\");\n\n                    b.Property<string>(\"ParentSlug\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"parent_slug\");\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"character varying(50)\")\n                        .HasColumnName(\"project_id\");\n\n                    b.Property<DateTime?>(\"PubDate\")\n                        .HasColumnType(\"timestamp with time zone\")\n                        .HasColumnName(\"pub_date\");\n\n                    b.Property<string>(\"SerializedModel\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"serialized_model\");\n\n                    b.Property<string>(\"Serializer\")\n                        .HasMaxLength(50)\n                        .HasColumnType(\"character varying(50)\")\n                        .HasColumnName(\"serializer\");\n\n                    b.Property<bool>(\"ShowCategories\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"show_categories\");\n\n                    b.Property<bool>(\"ShowComments\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"show_comments\");\n\n                    b.Property<bool>(\"ShowHeading\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"show_heading\");\n\n                    b.Property<bool>(\"ShowLastModified\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"show_last_modified\");\n\n                    b.Property<bool>(\"ShowMenu\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"show_menu\");\n\n                    b.Property<bool>(\"ShowPubDate\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"show_pub_date\");\n\n                    b.Property<string>(\"Slug\")\n                        .IsRequired()\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"slug\");\n\n                    b.Property<string>(\"TemplateKey\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"template_key\");\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"title\");\n\n                    b.Property<string>(\"ViewRoles\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"view_roles\");\n\n                    b.HasKey(\"Id\")\n                        .HasName(\"pk_cs_page\");\n\n                    b.HasIndex(\"CorrelationKey\")\n                        .HasDatabaseName(\"ix_cs_page_correlation_key\");\n\n                    b.HasIndex(\"ParentId\")\n                        .HasDatabaseName(\"ix_cs_page_parent_id\");\n\n                    b.HasIndex(\"ProjectId\")\n                        .HasDatabaseName(\"ix_cs_page_project_id\");\n\n                    b.ToTable(\"cs_page\", (string)null);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageResourceEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"character varying(36)\")\n                        .HasColumnName(\"id\");\n\n                    b.Property<string>(\"Environment\")\n                        .IsRequired()\n                        .HasMaxLength(15)\n                        .HasColumnType(\"character varying(15)\")\n                        .HasColumnName(\"environment\");\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"character varying(36)\")\n                        .HasColumnName(\"page_entity_id\");\n\n                    b.Property<int>(\"Sort\")\n                        .HasColumnType(\"integer\")\n                        .HasColumnName(\"sort\");\n\n                    b.Property<string>(\"Type\")\n                        .IsRequired()\n                        .HasMaxLength(10)\n                        .HasColumnType(\"character varying(10)\")\n                        .HasColumnName(\"type\");\n\n                    b.Property<string>(\"Url\")\n                        .IsRequired()\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"url\");\n\n                    b.HasKey(\"Id\")\n                        .HasName(\"pk_cs_page_resource\");\n\n                    b.HasIndex(\"PageEntityId\")\n                        .HasDatabaseName(\"ix_cs_page_resource_page_entity_id\");\n\n                    b.ToTable(\"cs_page_resource\", (string)null);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostCategory\", b =>\n                {\n                    b.Property<string>(\"Value\")\n                        .HasMaxLength(50)\n                        .HasColumnType(\"character varying(50)\")\n                        .HasColumnName(\"value\");\n\n                    b.Property<string>(\"PostEntityId\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"character varying(36)\")\n                        .HasColumnName(\"post_entity_id\");\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"character varying(50)\")\n                        .HasColumnName(\"project_id\");\n\n                    b.HasKey(\"Value\", \"PostEntityId\")\n                        .HasName(\"pk_cs_post_category\");\n\n                    b.HasIndex(\"PostEntityId\")\n                        .HasDatabaseName(\"ix_cs_post_category_post_entity_id\");\n\n                    b.HasIndex(\"ProjectId\")\n                        .HasDatabaseName(\"ix_cs_post_category_project_id\");\n\n                    b.HasIndex(\"Value\")\n                        .HasDatabaseName(\"ix_cs_post_category_value\");\n\n                    b.ToTable(\"cs_post_category\", (string)null);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"character varying(36)\")\n                        .HasColumnName(\"id\");\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"author\");\n\n                    b.Property<string>(\"Content\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"content\");\n\n                    b.Property<string>(\"Email\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"character varying(100)\")\n                        .HasColumnName(\"email\");\n\n                    b.Property<string>(\"Ip\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"character varying(100)\")\n                        .HasColumnName(\"ip\");\n\n                    b.Property<bool>(\"IsAdmin\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"is_admin\");\n\n                    b.Property<bool>(\"IsApproved\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"is_approved\");\n\n                    b.Property<string>(\"PostEntityId\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"character varying(36)\")\n                        .HasColumnName(\"post_entity_id\");\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"character varying(50)\")\n                        .HasColumnName(\"project_id\");\n\n                    b.Property<DateTime>(\"PubDate\")\n                        .HasColumnType(\"timestamp with time zone\")\n                        .HasColumnName(\"pub_date\");\n\n                    b.Property<string>(\"UserAgent\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"user_agent\");\n\n                    b.Property<string>(\"Website\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"website\");\n\n                    b.HasKey(\"Id\")\n                        .HasName(\"pk_cs_post_comment\");\n\n                    b.HasIndex(\"PostEntityId\")\n                        .HasDatabaseName(\"ix_cs_post_comment_post_entity_id\");\n\n                    b.HasIndex(\"ProjectId\")\n                        .HasDatabaseName(\"ix_cs_post_comment_project_id\");\n\n                    b.ToTable(\"cs_post_comment\", (string)null);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"character varying(36)\")\n                        .HasColumnName(\"id\");\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"author\");\n\n                    b.Property<string>(\"AutoTeaser\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"auto_teaser\");\n\n                    b.Property<string>(\"BlogId\")\n                        .IsRequired()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"character varying(50)\")\n                        .HasColumnName(\"blog_id\");\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasMaxLength(500)\n                        .HasColumnType(\"character varying(500)\")\n                        .HasColumnName(\"categories_csv\");\n\n                    b.Property<string>(\"Content\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"content\");\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"character varying(50)\")\n                        .HasDefaultValue(\"html\")\n                        .HasColumnName(\"content_type\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"correlation_key\");\n\n                    b.Property<string>(\"CreatedByUser\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"character varying(100)\")\n                        .HasColumnName(\"created_by_user\");\n\n                    b.Property<DateTime>(\"CreatedUtc\")\n                        .HasColumnType(\"timestamp with time zone\")\n                        .HasColumnName(\"created_utc\");\n\n                    b.Property<string>(\"DraftAuthor\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"draft_author\");\n\n                    b.Property<string>(\"DraftContent\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"draft_content\");\n\n                    b.Property<DateTime?>(\"DraftPubDate\")\n                        .HasColumnType(\"timestamp with time zone\")\n                        .HasColumnName(\"draft_pub_date\");\n\n                    b.Property<string>(\"DraftSerializedModel\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"draft_serialized_model\");\n\n                    b.Property<string>(\"ImageUrl\")\n                        .HasMaxLength(250)\n                        .HasColumnType(\"character varying(250)\")\n                        .HasColumnName(\"image_url\");\n\n                    b.Property<bool>(\"IsFeatured\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"is_featured\");\n\n                    b.Property<bool>(\"IsPublished\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"is_published\");\n\n                    b.Property<DateTime>(\"LastModified\")\n                        .HasColumnType(\"timestamp with time zone\")\n                        .HasColumnName(\"last_modified\");\n\n                    b.Property<string>(\"LastModifiedByUser\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"character varying(100)\")\n                        .HasColumnName(\"last_modified_by_user\");\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasMaxLength(500)\n                        .HasColumnType(\"character varying(500)\")\n                        .HasColumnName(\"meta_description\");\n\n                    b.Property<string>(\"MetaHtml\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"meta_html\");\n\n                    b.Property<string>(\"MetaJson\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"meta_json\");\n\n                    b.Property<DateTime?>(\"PubDate\")\n                        .HasColumnType(\"timestamp with time zone\")\n                        .HasColumnName(\"pub_date\");\n\n                    b.Property<string>(\"SerializedModel\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"serialized_model\");\n\n                    b.Property<string>(\"Serializer\")\n                        .HasMaxLength(50)\n                        .HasColumnType(\"character varying(50)\")\n                        .HasColumnName(\"serializer\");\n\n                    b.Property<bool>(\"ShowComments\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"show_comments\");\n\n                    b.Property<string>(\"Slug\")\n                        .IsRequired()\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"slug\");\n\n                    b.Property<bool>(\"SuppressTeaser\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"suppress_teaser\");\n\n                    b.Property<string>(\"TeaserOverride\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"teaser_override\");\n\n                    b.Property<string>(\"TemplateKey\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"template_key\");\n\n                    b.Property<string>(\"ThumbnailUrl\")\n                        .HasMaxLength(250)\n                        .HasColumnType(\"character varying(250)\")\n                        .HasColumnName(\"thumbnail_url\");\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"title\");\n\n                    b.HasKey(\"Id\")\n                        .HasName(\"pk_cs_post\");\n\n                    b.HasIndex(\"BlogId\")\n                        .HasDatabaseName(\"ix_cs_post_blog_id\");\n\n                    b.HasIndex(\"CorrelationKey\")\n                        .HasDatabaseName(\"ix_cs_post_correlation_key\");\n\n                    b.HasIndex(\"Slug\")\n                        .HasDatabaseName(\"ix_cs_post_slug\");\n\n                    b.ToTable(\"cs_post\", (string)null);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\", null)\n                        .WithMany(\"PageComments\")\n                        .HasForeignKey(\"PageEntityId\")\n                        .OnDelete(DeleteBehavior.Cascade)\n                        .HasConstraintName(\"fk_cs_page_comment_cs_page_page_entity_id\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageResourceEntity\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\", null)\n                        .WithMany(\"PageResources\")\n                        .HasForeignKey(\"PageEntityId\")\n                        .OnDelete(DeleteBehavior.Cascade)\n                        .HasConstraintName(\"fk_cs_page_resource_cs_page_page_entity_id\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\", null)\n                        .WithMany(\"PostComments\")\n                        .HasForeignKey(\"PostEntityId\")\n                        .HasConstraintName(\"fk_cs_post_comment_cs_post_post_entity_id\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\", b =>\n                {\n                    b.Navigation(\"PageComments\");\n\n                    b.Navigation(\"PageResources\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\", b =>\n                {\n                    b.Navigation(\"PostComments\");\n                });\n#pragma warning restore 612, 618\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.PostgreSql/Migrations/20220420182545_simplecontent-20220420.cs",
    "content": "﻿using System;\nusing Microsoft.EntityFrameworkCore.Migrations;\n\n#nullable disable\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.PostgreSql.Migrations\n{\n    public partial class simplecontent20220420 : Migration\n    {\n        protected override void Up(MigrationBuilder migrationBuilder)\n        {\n            migrationBuilder.DropForeignKey(\n                name: \"fk_cs_page_comment_cs__page_page_entity_id\",\n                table: \"cs_page_comment\");\n\n            migrationBuilder.DropForeignKey(\n                name: \"fk_cs_post_comment_cs__post_post_entity_id\",\n                table: \"cs_post_comment\");\n\n            migrationBuilder.AlterColumn<DateTime>(\n                name: \"pub_date\",\n                table: \"cs_post_comment\",\n                type: \"timestamp with time zone\",\n                nullable: false,\n                oldClrType: typeof(DateTime),\n                oldType: \"timestamp without time zone\");\n\n            migrationBuilder.AlterColumn<DateTime>(\n                name: \"pub_date\",\n                table: \"cs_post\",\n                type: \"timestamp with time zone\",\n                nullable: true,\n                oldClrType: typeof(DateTime),\n                oldType: \"timestamp without time zone\",\n                oldNullable: true);\n\n            migrationBuilder.AlterColumn<DateTime>(\n                name: \"last_modified\",\n                table: \"cs_post\",\n                type: \"timestamp with time zone\",\n                nullable: false,\n                oldClrType: typeof(DateTime),\n                oldType: \"timestamp without time zone\");\n\n            migrationBuilder.AlterColumn<DateTime>(\n                name: \"draft_pub_date\",\n                table: \"cs_post\",\n                type: \"timestamp with time zone\",\n                nullable: true,\n                oldClrType: typeof(DateTime),\n                oldType: \"timestamp without time zone\",\n                oldNullable: true);\n\n            migrationBuilder.AlterColumn<DateTime>(\n                name: \"created_utc\",\n                table: \"cs_post\",\n                type: \"timestamp with time zone\",\n                nullable: false,\n                oldClrType: typeof(DateTime),\n                oldType: \"timestamp without time zone\");\n\n            migrationBuilder.AlterColumn<DateTime>(\n                name: \"pub_date\",\n                table: \"cs_page_comment\",\n                type: \"timestamp with time zone\",\n                nullable: false,\n                oldClrType: typeof(DateTime),\n                oldType: \"timestamp without time zone\");\n\n            migrationBuilder.AlterColumn<DateTime>(\n                name: \"pub_date\",\n                table: \"cs_page\",\n                type: \"timestamp with time zone\",\n                nullable: true,\n                oldClrType: typeof(DateTime),\n                oldType: \"timestamp without time zone\",\n                oldNullable: true);\n\n            migrationBuilder.AlterColumn<DateTime>(\n                name: \"last_modified\",\n                table: \"cs_page\",\n                type: \"timestamp with time zone\",\n                nullable: false,\n                oldClrType: typeof(DateTime),\n                oldType: \"timestamp without time zone\");\n\n            migrationBuilder.AlterColumn<DateTime>(\n                name: \"draft_pub_date\",\n                table: \"cs_page\",\n                type: \"timestamp with time zone\",\n                nullable: true,\n                oldClrType: typeof(DateTime),\n                oldType: \"timestamp without time zone\",\n                oldNullable: true);\n\n            migrationBuilder.AlterColumn<DateTime>(\n                name: \"created_utc\",\n                table: \"cs_page\",\n                type: \"timestamp with time zone\",\n                nullable: false,\n                oldClrType: typeof(DateTime),\n                oldType: \"timestamp without time zone\");\n\n            migrationBuilder.AlterColumn<DateTime>(\n                name: \"pub_date\",\n                table: \"cs_content_history\",\n                type: \"timestamp with time zone\",\n                nullable: true,\n                oldClrType: typeof(DateTime),\n                oldType: \"timestamp without time zone\",\n                oldNullable: true);\n\n            migrationBuilder.AlterColumn<DateTime>(\n                name: \"last_modified\",\n                table: \"cs_content_history\",\n                type: \"timestamp with time zone\",\n                nullable: false,\n                oldClrType: typeof(DateTime),\n                oldType: \"timestamp without time zone\");\n\n            migrationBuilder.AlterColumn<DateTime>(\n                name: \"draft_pub_date\",\n                table: \"cs_content_history\",\n                type: \"timestamp with time zone\",\n                nullable: true,\n                oldClrType: typeof(DateTime),\n                oldType: \"timestamp without time zone\",\n                oldNullable: true);\n\n            migrationBuilder.AlterColumn<DateTime>(\n                name: \"created_utc\",\n                table: \"cs_content_history\",\n                type: \"timestamp with time zone\",\n                nullable: false,\n                oldClrType: typeof(DateTime),\n                oldType: \"timestamp without time zone\");\n\n            migrationBuilder.AlterColumn<DateTime>(\n                name: \"archived_utc\",\n                table: \"cs_content_history\",\n                type: \"timestamp with time zone\",\n                nullable: false,\n                oldClrType: typeof(DateTime),\n                oldType: \"timestamp without time zone\");\n\n            migrationBuilder.AddForeignKey(\n                name: \"fk_cs_page_comment_cs_page_page_entity_id\",\n                table: \"cs_page_comment\",\n                column: \"page_entity_id\",\n                principalTable: \"cs_page\",\n                principalColumn: \"id\",\n                onDelete: ReferentialAction.Cascade);\n\n            migrationBuilder.AddForeignKey(\n                name: \"fk_cs_post_comment_cs_post_post_entity_id\",\n                table: \"cs_post_comment\",\n                column: \"post_entity_id\",\n                principalTable: \"cs_post\",\n                principalColumn: \"id\");\n        }\n\n        protected override void Down(MigrationBuilder migrationBuilder)\n        {\n            migrationBuilder.DropForeignKey(\n                name: \"fk_cs_page_comment_cs_page_page_entity_id\",\n                table: \"cs_page_comment\");\n\n            migrationBuilder.DropForeignKey(\n                name: \"fk_cs_post_comment_cs_post_post_entity_id\",\n                table: \"cs_post_comment\");\n\n            migrationBuilder.AlterColumn<DateTime>(\n                name: \"pub_date\",\n                table: \"cs_post_comment\",\n                type: \"timestamp without time zone\",\n                nullable: false,\n                oldClrType: typeof(DateTime),\n                oldType: \"timestamp with time zone\");\n\n            migrationBuilder.AlterColumn<DateTime>(\n                name: \"pub_date\",\n                table: \"cs_post\",\n                type: \"timestamp without time zone\",\n                nullable: true,\n                oldClrType: typeof(DateTime),\n                oldType: \"timestamp with time zone\",\n                oldNullable: true);\n\n            migrationBuilder.AlterColumn<DateTime>(\n                name: \"last_modified\",\n                table: \"cs_post\",\n                type: \"timestamp without time zone\",\n                nullable: false,\n                oldClrType: typeof(DateTime),\n                oldType: \"timestamp with time zone\");\n\n            migrationBuilder.AlterColumn<DateTime>(\n                name: \"draft_pub_date\",\n                table: \"cs_post\",\n                type: \"timestamp without time zone\",\n                nullable: true,\n                oldClrType: typeof(DateTime),\n                oldType: \"timestamp with time zone\",\n                oldNullable: true);\n\n            migrationBuilder.AlterColumn<DateTime>(\n                name: \"created_utc\",\n                table: \"cs_post\",\n                type: \"timestamp without time zone\",\n                nullable: false,\n                oldClrType: typeof(DateTime),\n                oldType: \"timestamp with time zone\");\n\n            migrationBuilder.AlterColumn<DateTime>(\n                name: \"pub_date\",\n                table: \"cs_page_comment\",\n                type: \"timestamp without time zone\",\n                nullable: false,\n                oldClrType: typeof(DateTime),\n                oldType: \"timestamp with time zone\");\n\n            migrationBuilder.AlterColumn<DateTime>(\n                name: \"pub_date\",\n                table: \"cs_page\",\n                type: \"timestamp without time zone\",\n                nullable: true,\n                oldClrType: typeof(DateTime),\n                oldType: \"timestamp with time zone\",\n                oldNullable: true);\n\n            migrationBuilder.AlterColumn<DateTime>(\n                name: \"last_modified\",\n                table: \"cs_page\",\n                type: \"timestamp without time zone\",\n                nullable: false,\n                oldClrType: typeof(DateTime),\n                oldType: \"timestamp with time zone\");\n\n            migrationBuilder.AlterColumn<DateTime>(\n                name: \"draft_pub_date\",\n                table: \"cs_page\",\n                type: \"timestamp without time zone\",\n                nullable: true,\n                oldClrType: typeof(DateTime),\n                oldType: \"timestamp with time zone\",\n                oldNullable: true);\n\n            migrationBuilder.AlterColumn<DateTime>(\n                name: \"created_utc\",\n                table: \"cs_page\",\n                type: \"timestamp without time zone\",\n                nullable: false,\n                oldClrType: typeof(DateTime),\n                oldType: \"timestamp with time zone\");\n\n            migrationBuilder.AlterColumn<DateTime>(\n                name: \"pub_date\",\n                table: \"cs_content_history\",\n                type: \"timestamp without time zone\",\n                nullable: true,\n                oldClrType: typeof(DateTime),\n                oldType: \"timestamp with time zone\",\n                oldNullable: true);\n\n            migrationBuilder.AlterColumn<DateTime>(\n                name: \"last_modified\",\n                table: \"cs_content_history\",\n                type: \"timestamp without time zone\",\n                nullable: false,\n                oldClrType: typeof(DateTime),\n                oldType: \"timestamp with time zone\");\n\n            migrationBuilder.AlterColumn<DateTime>(\n                name: \"draft_pub_date\",\n                table: \"cs_content_history\",\n                type: \"timestamp without time zone\",\n                nullable: true,\n                oldClrType: typeof(DateTime),\n                oldType: \"timestamp with time zone\",\n                oldNullable: true);\n\n            migrationBuilder.AlterColumn<DateTime>(\n                name: \"created_utc\",\n                table: \"cs_content_history\",\n                type: \"timestamp without time zone\",\n                nullable: false,\n                oldClrType: typeof(DateTime),\n                oldType: \"timestamp with time zone\");\n\n            migrationBuilder.AlterColumn<DateTime>(\n                name: \"archived_utc\",\n                table: \"cs_content_history\",\n                type: \"timestamp without time zone\",\n                nullable: false,\n                oldClrType: typeof(DateTime),\n                oldType: \"timestamp with time zone\");\n\n            migrationBuilder.AddForeignKey(\n                name: \"fk_cs_page_comment_cs__page_page_entity_id\",\n                table: \"cs_page_comment\",\n                column: \"page_entity_id\",\n                principalTable: \"cs_page\",\n                principalColumn: \"id\",\n                onDelete: ReferentialAction.Cascade);\n\n            migrationBuilder.AddForeignKey(\n                name: \"fk_cs_post_comment_cs__post_post_entity_id\",\n                table: \"cs_post_comment\",\n                column: \"post_entity_id\",\n                principalTable: \"cs_post\",\n                principalColumn: \"id\");\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.PostgreSql/Migrations/20240918132310_ShowArchiveAndBlogCategories-20240918.Designer.cs",
    "content": "﻿// <auto-generated />\nusing System;\nusing Microsoft.EntityFrameworkCore;\nusing Microsoft.EntityFrameworkCore.Infrastructure;\nusing Microsoft.EntityFrameworkCore.Migrations;\nusing Microsoft.EntityFrameworkCore.Storage.ValueConversion;\nusing Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;\nusing cloudscribe.SimpleContent.Storage.EFCore.PostgreSql;\n\n#nullable disable\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.PostgreSql.Migrations\n{\n    [DbContext(typeof(SimpleContentDbContext))]\n    [Migration(\"20240918132310_ShowArchiveAndBlogCategories-20240918\")]\n    partial class ShowArchiveAndBlogCategories20240918\n    {\n        /// <inheritdoc />\n        protected override void BuildTargetModel(ModelBuilder modelBuilder)\n        {\n#pragma warning disable 612, 618\n            modelBuilder\n                .HasAnnotation(\"ProductVersion\", \"8.0.0\")\n                .HasAnnotation(\"Relational:MaxIdentifierLength\", 63);\n\n            NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder);\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Models.ContentHistory\", b =>\n                {\n                    b.Property<Guid>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36)\n                        .HasColumnType(\"uuid\")\n                        .HasColumnName(\"id\");\n\n                    b.Property<string>(\"ArchivedBy\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"archived_by\");\n\n                    b.Property<DateTime>(\"ArchivedUtc\")\n                        .HasColumnType(\"timestamp with time zone\")\n                        .HasColumnName(\"archived_utc\");\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"author\");\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"categories_csv\");\n\n                    b.Property<string>(\"Content\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"content\");\n\n                    b.Property<string>(\"ContentId\")\n                        .IsRequired()\n                        .HasMaxLength(36)\n                        .HasColumnType(\"character varying(36)\")\n                        .HasColumnName(\"content_id\");\n\n                    b.Property<string>(\"ContentSource\")\n                        .IsRequired()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"character varying(50)\")\n                        .HasColumnName(\"content_source\");\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"character varying(50)\")\n                        .HasDefaultValue(\"html\")\n                        .HasColumnName(\"content_type\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"correlation_key\");\n\n                    b.Property<string>(\"CreatedByUser\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"character varying(100)\")\n                        .HasColumnName(\"created_by_user\");\n\n                    b.Property<DateTime>(\"CreatedUtc\")\n                        .HasColumnType(\"timestamp with time zone\")\n                        .HasColumnName(\"created_utc\");\n\n                    b.Property<string>(\"DraftAuthor\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"draft_author\");\n\n                    b.Property<string>(\"DraftContent\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"draft_content\");\n\n                    b.Property<DateTime?>(\"DraftPubDate\")\n                        .HasColumnType(\"timestamp with time zone\")\n                        .HasColumnName(\"draft_pub_date\");\n\n                    b.Property<string>(\"DraftSerializedModel\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"draft_serialized_model\");\n\n                    b.Property<bool>(\"IsDraftHx\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"is_draft_hx\");\n\n                    b.Property<bool>(\"IsPublished\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"is_published\");\n\n                    b.Property<DateTime>(\"LastModified\")\n                        .HasColumnType(\"timestamp with time zone\")\n                        .HasColumnName(\"last_modified\");\n\n                    b.Property<string>(\"LastModifiedByUser\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"character varying(100)\")\n                        .HasColumnName(\"last_modified_by_user\");\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"meta_description\");\n\n                    b.Property<string>(\"MetaHtml\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"meta_html\");\n\n                    b.Property<string>(\"MetaJson\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"meta_json\");\n\n                    b.Property<int>(\"PageOrder\")\n                        .HasColumnType(\"integer\")\n                        .HasColumnName(\"page_order\");\n\n                    b.Property<string>(\"ParentId\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"parent_id\");\n\n                    b.Property<string>(\"ParentSlug\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"parent_slug\");\n\n                    b.Property<string>(\"ProjectId\")\n                        .HasMaxLength(50)\n                        .HasColumnType(\"character varying(50)\")\n                        .HasColumnName(\"project_id\");\n\n                    b.Property<DateTime?>(\"PubDate\")\n                        .HasColumnType(\"timestamp with time zone\")\n                        .HasColumnName(\"pub_date\");\n\n                    b.Property<string>(\"SerializedModel\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"serialized_model\");\n\n                    b.Property<string>(\"Serializer\")\n                        .HasMaxLength(50)\n                        .HasColumnType(\"character varying(50)\")\n                        .HasColumnName(\"serializer\");\n\n                    b.Property<string>(\"Slug\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"slug\");\n\n                    b.Property<string>(\"TeaserOverride\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"teaser_override\");\n\n                    b.Property<string>(\"TemplateKey\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"template_key\");\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"title\");\n\n                    b.Property<string>(\"ViewRoles\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"view_roles\");\n\n                    b.Property<bool>(\"WasDeleted\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"was_deleted\");\n\n                    b.HasKey(\"Id\")\n                        .HasName(\"pk_cs_content_history\");\n\n                    b.HasIndex(\"ContentId\")\n                        .HasDatabaseName(\"ix_cs_content_history_content_id\");\n\n                    b.HasIndex(\"ContentSource\")\n                        .HasDatabaseName(\"ix_cs_content_history_content_source\");\n\n                    b.HasIndex(\"CorrelationKey\")\n                        .HasDatabaseName(\"ix_cs_content_history_correlation_key\");\n\n                    b.HasIndex(\"CreatedByUser\")\n                        .HasDatabaseName(\"ix_cs_content_history_created_by_user\");\n\n                    b.HasIndex(\"LastModifiedByUser\")\n                        .HasDatabaseName(\"ix_cs_content_history_last_modified_by_user\");\n\n                    b.HasIndex(\"Title\")\n                        .HasDatabaseName(\"ix_cs_content_history_title\");\n\n                    b.ToTable(\"cs_content_history\", (string)null);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Models.ProjectSettings\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .HasMaxLength(50)\n                        .HasColumnType(\"character varying(50)\")\n                        .HasColumnName(\"id\");\n\n                    b.Property<string>(\"AboutContent\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"about_content\");\n\n                    b.Property<string>(\"AboutHeading\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"about_heading\");\n\n                    b.Property<bool>(\"AddBlogToPagesTree\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"add_blog_to_pages_tree\");\n\n                    b.Property<bool>(\"BlogMenuLinksToNewestPost\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"blog_menu_links_to_newest_post\");\n\n                    b.Property<string>(\"BlogPageNavComponentVisibility\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"blog_page_nav_component_visibility\");\n\n                    b.Property<int>(\"BlogPagePosition\")\n                        .HasColumnType(\"integer\")\n                        .HasColumnName(\"blog_page_position\");\n\n                    b.Property<string>(\"BlogPageText\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"blog_page_text\");\n\n                    b.Property<string>(\"CdnUrl\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"cdn_url\");\n\n                    b.Property<string>(\"ChannelCategoriesCsv\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"channel_categories_csv\");\n\n                    b.Property<string>(\"ChannelRating\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"character varying(100)\")\n                        .HasColumnName(\"channel_rating\");\n\n                    b.Property<int>(\"ChannelTimeToLive\")\n                        .HasColumnType(\"integer\")\n                        .HasColumnName(\"channel_time_to_live\");\n\n                    b.Property<string>(\"CommentNotificationEmail\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"character varying(100)\")\n                        .HasColumnName(\"comment_notification_email\");\n\n                    b.Property<string>(\"CopyrightNotice\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"copyright_notice\");\n\n                    b.Property<int>(\"DaysToComment\")\n                        .HasColumnType(\"integer\")\n                        .HasColumnName(\"days_to_comment\");\n\n                    b.Property<string>(\"DefaultContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"character varying(50)\")\n                        .HasDefaultValue(\"html\")\n                        .HasColumnName(\"default_content_type\");\n\n                    b.Property<int>(\"DefaultFeedItems\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"integer\")\n                        .HasDefaultValue(20)\n                        .HasColumnName(\"default_feed_items\");\n\n                    b.Property<string>(\"DefaultPageSlug\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"default_page_slug\");\n\n                    b.Property<string>(\"Description\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"description\");\n\n                    b.Property<string>(\"DisqusShortName\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"character varying(100)\")\n                        .HasColumnName(\"disqus_short_name\");\n\n                    b.Property<string>(\"FacebookAppId\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"character varying(100)\")\n                        .HasColumnName(\"facebook_app_id\");\n\n                    b.Property<string>(\"Image\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"image\");\n\n                    b.Property<bool>(\"IncludePubDateInPostUrls\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"include_pub_date_in_post_urls\");\n\n                    b.Property<string>(\"LanguageCode\")\n                        .HasMaxLength(10)\n                        .HasColumnType(\"character varying(10)\")\n                        .HasColumnName(\"language_code\");\n\n                    b.Property<string>(\"LocalMediaVirtualPath\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"local_media_virtual_path\");\n\n                    b.Property<string>(\"ManagingEditorEmail\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"character varying(100)\")\n                        .HasColumnName(\"managing_editor_email\");\n\n                    b.Property<int>(\"MaxFeedItems\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"integer\")\n                        .HasDefaultValue(1000)\n                        .HasColumnName(\"max_feed_items\");\n\n                    b.Property<bool>(\"ModerateComments\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"moderate_comments\");\n\n                    b.Property<int>(\"PostsPerPage\")\n                        .HasColumnType(\"integer\")\n                        .HasColumnName(\"posts_per_page\");\n\n                    b.Property<string>(\"PubDateFormat\")\n                        .HasMaxLength(75)\n                        .HasColumnType(\"character varying(75)\")\n                        .HasColumnName(\"pub_date_format\");\n\n                    b.Property<string>(\"Publisher\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"publisher\");\n\n                    b.Property<string>(\"PublisherEntityType\")\n                        .HasMaxLength(50)\n                        .HasColumnType(\"character varying(50)\")\n                        .HasColumnName(\"publisher_entity_type\");\n\n                    b.Property<string>(\"PublisherLogoHeight\")\n                        .HasMaxLength(20)\n                        .HasColumnType(\"character varying(20)\")\n                        .HasColumnName(\"publisher_logo_height\");\n\n                    b.Property<string>(\"PublisherLogoUrl\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"publisher_logo_url\");\n\n                    b.Property<string>(\"PublisherLogoWidth\")\n                        .HasMaxLength(20)\n                        .HasColumnType(\"character varying(20)\")\n                        .HasColumnName(\"publisher_logo_width\");\n\n                    b.Property<string>(\"RecaptchaPrivateKey\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"recaptcha_private_key\");\n\n                    b.Property<string>(\"RecaptchaPublicKey\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"recaptcha_public_key\");\n\n                    b.Property<string>(\"RemoteFeedProcessorUseAgentFragment\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"remote_feed_processor_use_agent_fragment\");\n\n                    b.Property<string>(\"RemoteFeedUrl\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"remote_feed_url\");\n\n                    b.Property<bool>(\"ShowAboutBox\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"show_about_box\");\n\n                    b.Property<bool>(\"ShowArchivedPosts\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"show_archived_posts\");\n\n                    b.Property<bool>(\"ShowBlogCategories\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"show_blog_categories\");\n\n                    b.Property<bool>(\"ShowFeaturedPostsOnDefaultPage\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"show_featured_posts_on_default_page\");\n\n                    b.Property<bool>(\"ShowRecentPostsOnDefaultPage\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"show_recent_posts_on_default_page\");\n\n                    b.Property<bool>(\"ShowRelatedPosts\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"show_related_posts\");\n\n                    b.Property<bool>(\"ShowTitle\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"show_title\");\n\n                    b.Property<string>(\"SiteName\")\n                        .HasMaxLength(200)\n                        .HasColumnType(\"character varying(200)\")\n                        .HasColumnName(\"site_name\");\n\n                    b.Property<byte>(\"TeaserMode\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"smallint\")\n                        .HasDefaultValue((byte)0)\n                        .HasColumnName(\"teaser_mode\");\n\n                    b.Property<int>(\"TeaserTruncationLength\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"integer\")\n                        .HasDefaultValue(20)\n                        .HasColumnName(\"teaser_truncation_length\");\n\n                    b.Property<byte>(\"TeaserTruncationMode\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"smallint\")\n                        .HasDefaultValue((byte)0)\n                        .HasColumnName(\"teaser_truncation_mode\");\n\n                    b.Property<string>(\"TimeZoneId\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"character varying(100)\")\n                        .HasColumnName(\"time_zone_id\");\n\n                    b.Property<string>(\"Title\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"title\");\n\n                    b.Property<string>(\"TwitterCreator\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"character varying(100)\")\n                        .HasColumnName(\"twitter_creator\");\n\n                    b.Property<string>(\"TwitterPublisher\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"character varying(100)\")\n                        .HasColumnName(\"twitter_publisher\");\n\n                    b.Property<bool>(\"UseDefaultPageAsRootNode\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"use_default_page_as_root_node\");\n\n                    b.Property<string>(\"WebmasterEmail\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"character varying(100)\")\n                        .HasColumnName(\"webmaster_email\");\n\n                    b.HasKey(\"Id\")\n                        .HasName(\"pk_cs_content_project\");\n\n                    b.ToTable(\"cs_content_project\", (string)null);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageCategory\", b =>\n                {\n                    b.Property<string>(\"Value\")\n                        .HasMaxLength(50)\n                        .HasColumnType(\"character varying(50)\")\n                        .HasColumnName(\"value\");\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"character varying(36)\")\n                        .HasColumnName(\"page_entity_id\");\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"character varying(50)\")\n                        .HasColumnName(\"project_id\");\n\n                    b.HasKey(\"Value\", \"PageEntityId\")\n                        .HasName(\"pk_cs_page_category\");\n\n                    b.HasIndex(\"PageEntityId\")\n                        .HasDatabaseName(\"ix_cs_page_category_page_entity_id\");\n\n                    b.HasIndex(\"ProjectId\")\n                        .HasDatabaseName(\"ix_cs_page_category_project_id\");\n\n                    b.HasIndex(\"Value\")\n                        .HasDatabaseName(\"ix_cs_page_category_value\");\n\n                    b.ToTable(\"cs_page_category\", (string)null);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"character varying(36)\")\n                        .HasColumnName(\"id\");\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"author\");\n\n                    b.Property<string>(\"Content\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"content\");\n\n                    b.Property<string>(\"Email\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"character varying(100)\")\n                        .HasColumnName(\"email\");\n\n                    b.Property<string>(\"Ip\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"character varying(100)\")\n                        .HasColumnName(\"ip\");\n\n                    b.Property<bool>(\"IsAdmin\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"is_admin\");\n\n                    b.Property<bool>(\"IsApproved\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"is_approved\");\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"character varying(36)\")\n                        .HasColumnName(\"page_entity_id\");\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"character varying(50)\")\n                        .HasColumnName(\"project_id\");\n\n                    b.Property<DateTime>(\"PubDate\")\n                        .HasColumnType(\"timestamp with time zone\")\n                        .HasColumnName(\"pub_date\");\n\n                    b.Property<string>(\"UserAgent\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"user_agent\");\n\n                    b.Property<string>(\"Website\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"website\");\n\n                    b.HasKey(\"Id\")\n                        .HasName(\"pk_cs_page_comment\");\n\n                    b.HasIndex(\"PageEntityId\")\n                        .HasDatabaseName(\"ix_cs_page_comment_page_entity_id\");\n\n                    b.HasIndex(\"ProjectId\")\n                        .HasDatabaseName(\"ix_cs_page_comment_project_id\");\n\n                    b.ToTable(\"cs_page_comment\", (string)null);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"character varying(36)\")\n                        .HasColumnName(\"id\");\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"author\");\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasMaxLength(500)\n                        .HasColumnType(\"character varying(500)\")\n                        .HasColumnName(\"categories_csv\");\n\n                    b.Property<string>(\"Content\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"content\");\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"character varying(50)\")\n                        .HasDefaultValue(\"html\")\n                        .HasColumnName(\"content_type\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"correlation_key\");\n\n                    b.Property<string>(\"CreatedByUser\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"character varying(100)\")\n                        .HasColumnName(\"created_by_user\");\n\n                    b.Property<DateTime>(\"CreatedUtc\")\n                        .HasColumnType(\"timestamp with time zone\")\n                        .HasColumnName(\"created_utc\");\n\n                    b.Property<bool>(\"DisableEditor\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"disable_editor\");\n\n                    b.Property<string>(\"DraftAuthor\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"draft_author\");\n\n                    b.Property<string>(\"DraftContent\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"draft_content\");\n\n                    b.Property<DateTime?>(\"DraftPubDate\")\n                        .HasColumnType(\"timestamp with time zone\")\n                        .HasColumnName(\"draft_pub_date\");\n\n                    b.Property<string>(\"DraftSerializedModel\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"draft_serialized_model\");\n\n                    b.Property<string>(\"ExternalUrl\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"external_url\");\n\n                    b.Property<bool>(\"IsPublished\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"is_published\");\n\n                    b.Property<DateTime>(\"LastModified\")\n                        .HasColumnType(\"timestamp with time zone\")\n                        .HasColumnName(\"last_modified\");\n\n                    b.Property<string>(\"LastModifiedByUser\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"character varying(100)\")\n                        .HasColumnName(\"last_modified_by_user\");\n\n                    b.Property<string>(\"MenuFilters\")\n                        .HasMaxLength(500)\n                        .HasColumnType(\"character varying(500)\")\n                        .HasColumnName(\"menu_filters\");\n\n                    b.Property<bool>(\"MenuOnly\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"menu_only\");\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasMaxLength(500)\n                        .HasColumnType(\"character varying(500)\")\n                        .HasColumnName(\"meta_description\");\n\n                    b.Property<string>(\"MetaHtml\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"meta_html\");\n\n                    b.Property<string>(\"MetaJson\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"meta_json\");\n\n                    b.Property<int>(\"PageOrder\")\n                        .HasColumnType(\"integer\")\n                        .HasColumnName(\"page_order\");\n\n                    b.Property<string>(\"ParentId\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"character varying(36)\")\n                        .HasColumnName(\"parent_id\");\n\n                    b.Property<string>(\"ParentSlug\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"parent_slug\");\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"character varying(50)\")\n                        .HasColumnName(\"project_id\");\n\n                    b.Property<DateTime?>(\"PubDate\")\n                        .HasColumnType(\"timestamp with time zone\")\n                        .HasColumnName(\"pub_date\");\n\n                    b.Property<string>(\"SerializedModel\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"serialized_model\");\n\n                    b.Property<string>(\"Serializer\")\n                        .HasMaxLength(50)\n                        .HasColumnType(\"character varying(50)\")\n                        .HasColumnName(\"serializer\");\n\n                    b.Property<bool>(\"ShowCategories\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"show_categories\");\n\n                    b.Property<bool>(\"ShowComments\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"show_comments\");\n\n                    b.Property<bool>(\"ShowHeading\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"show_heading\");\n\n                    b.Property<bool>(\"ShowLastModified\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"show_last_modified\");\n\n                    b.Property<bool>(\"ShowMenu\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"show_menu\");\n\n                    b.Property<bool>(\"ShowPubDate\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"show_pub_date\");\n\n                    b.Property<string>(\"Slug\")\n                        .IsRequired()\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"slug\");\n\n                    b.Property<string>(\"TemplateKey\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"template_key\");\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"title\");\n\n                    b.Property<string>(\"ViewRoles\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"view_roles\");\n\n                    b.HasKey(\"Id\")\n                        .HasName(\"pk_cs_page\");\n\n                    b.HasIndex(\"CorrelationKey\")\n                        .HasDatabaseName(\"ix_cs_page_correlation_key\");\n\n                    b.HasIndex(\"ParentId\")\n                        .HasDatabaseName(\"ix_cs_page_parent_id\");\n\n                    b.HasIndex(\"ProjectId\")\n                        .HasDatabaseName(\"ix_cs_page_project_id\");\n\n                    b.ToTable(\"cs_page\", (string)null);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageResourceEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"character varying(36)\")\n                        .HasColumnName(\"id\");\n\n                    b.Property<string>(\"Environment\")\n                        .IsRequired()\n                        .HasMaxLength(15)\n                        .HasColumnType(\"character varying(15)\")\n                        .HasColumnName(\"environment\");\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"character varying(36)\")\n                        .HasColumnName(\"page_entity_id\");\n\n                    b.Property<int>(\"Sort\")\n                        .HasColumnType(\"integer\")\n                        .HasColumnName(\"sort\");\n\n                    b.Property<string>(\"Type\")\n                        .IsRequired()\n                        .HasMaxLength(10)\n                        .HasColumnType(\"character varying(10)\")\n                        .HasColumnName(\"type\");\n\n                    b.Property<string>(\"Url\")\n                        .IsRequired()\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"url\");\n\n                    b.HasKey(\"Id\")\n                        .HasName(\"pk_cs_page_resource\");\n\n                    b.HasIndex(\"PageEntityId\")\n                        .HasDatabaseName(\"ix_cs_page_resource_page_entity_id\");\n\n                    b.ToTable(\"cs_page_resource\", (string)null);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostCategory\", b =>\n                {\n                    b.Property<string>(\"Value\")\n                        .HasMaxLength(50)\n                        .HasColumnType(\"character varying(50)\")\n                        .HasColumnName(\"value\");\n\n                    b.Property<string>(\"PostEntityId\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"character varying(36)\")\n                        .HasColumnName(\"post_entity_id\");\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"character varying(50)\")\n                        .HasColumnName(\"project_id\");\n\n                    b.HasKey(\"Value\", \"PostEntityId\")\n                        .HasName(\"pk_cs_post_category\");\n\n                    b.HasIndex(\"PostEntityId\")\n                        .HasDatabaseName(\"ix_cs_post_category_post_entity_id\");\n\n                    b.HasIndex(\"ProjectId\")\n                        .HasDatabaseName(\"ix_cs_post_category_project_id\");\n\n                    b.HasIndex(\"Value\")\n                        .HasDatabaseName(\"ix_cs_post_category_value\");\n\n                    b.ToTable(\"cs_post_category\", (string)null);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"character varying(36)\")\n                        .HasColumnName(\"id\");\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"author\");\n\n                    b.Property<string>(\"Content\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"content\");\n\n                    b.Property<string>(\"Email\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"character varying(100)\")\n                        .HasColumnName(\"email\");\n\n                    b.Property<string>(\"Ip\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"character varying(100)\")\n                        .HasColumnName(\"ip\");\n\n                    b.Property<bool>(\"IsAdmin\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"is_admin\");\n\n                    b.Property<bool>(\"IsApproved\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"is_approved\");\n\n                    b.Property<string>(\"PostEntityId\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"character varying(36)\")\n                        .HasColumnName(\"post_entity_id\");\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"character varying(50)\")\n                        .HasColumnName(\"project_id\");\n\n                    b.Property<DateTime>(\"PubDate\")\n                        .HasColumnType(\"timestamp with time zone\")\n                        .HasColumnName(\"pub_date\");\n\n                    b.Property<string>(\"UserAgent\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"user_agent\");\n\n                    b.Property<string>(\"Website\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"website\");\n\n                    b.HasKey(\"Id\")\n                        .HasName(\"pk_cs_post_comment\");\n\n                    b.HasIndex(\"PostEntityId\")\n                        .HasDatabaseName(\"ix_cs_post_comment_post_entity_id\");\n\n                    b.HasIndex(\"ProjectId\")\n                        .HasDatabaseName(\"ix_cs_post_comment_project_id\");\n\n                    b.ToTable(\"cs_post_comment\", (string)null);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"character varying(36)\")\n                        .HasColumnName(\"id\");\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"author\");\n\n                    b.Property<string>(\"AutoTeaser\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"auto_teaser\");\n\n                    b.Property<string>(\"BlogId\")\n                        .IsRequired()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"character varying(50)\")\n                        .HasColumnName(\"blog_id\");\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasMaxLength(500)\n                        .HasColumnType(\"character varying(500)\")\n                        .HasColumnName(\"categories_csv\");\n\n                    b.Property<string>(\"Content\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"content\");\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"character varying(50)\")\n                        .HasDefaultValue(\"html\")\n                        .HasColumnName(\"content_type\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"correlation_key\");\n\n                    b.Property<string>(\"CreatedByUser\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"character varying(100)\")\n                        .HasColumnName(\"created_by_user\");\n\n                    b.Property<DateTime>(\"CreatedUtc\")\n                        .HasColumnType(\"timestamp with time zone\")\n                        .HasColumnName(\"created_utc\");\n\n                    b.Property<string>(\"DraftAuthor\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"draft_author\");\n\n                    b.Property<string>(\"DraftContent\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"draft_content\");\n\n                    b.Property<DateTime?>(\"DraftPubDate\")\n                        .HasColumnType(\"timestamp with time zone\")\n                        .HasColumnName(\"draft_pub_date\");\n\n                    b.Property<string>(\"DraftSerializedModel\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"draft_serialized_model\");\n\n                    b.Property<string>(\"ImageUrl\")\n                        .HasMaxLength(250)\n                        .HasColumnType(\"character varying(250)\")\n                        .HasColumnName(\"image_url\");\n\n                    b.Property<bool>(\"IsFeatured\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"is_featured\");\n\n                    b.Property<bool>(\"IsPublished\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"is_published\");\n\n                    b.Property<DateTime>(\"LastModified\")\n                        .HasColumnType(\"timestamp with time zone\")\n                        .HasColumnName(\"last_modified\");\n\n                    b.Property<string>(\"LastModifiedByUser\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"character varying(100)\")\n                        .HasColumnName(\"last_modified_by_user\");\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasMaxLength(500)\n                        .HasColumnType(\"character varying(500)\")\n                        .HasColumnName(\"meta_description\");\n\n                    b.Property<string>(\"MetaHtml\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"meta_html\");\n\n                    b.Property<string>(\"MetaJson\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"meta_json\");\n\n                    b.Property<DateTime?>(\"PubDate\")\n                        .HasColumnType(\"timestamp with time zone\")\n                        .HasColumnName(\"pub_date\");\n\n                    b.Property<string>(\"SerializedModel\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"serialized_model\");\n\n                    b.Property<string>(\"Serializer\")\n                        .HasMaxLength(50)\n                        .HasColumnType(\"character varying(50)\")\n                        .HasColumnName(\"serializer\");\n\n                    b.Property<bool>(\"ShowComments\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"show_comments\");\n\n                    b.Property<string>(\"Slug\")\n                        .IsRequired()\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"slug\");\n\n                    b.Property<bool>(\"SuppressTeaser\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"suppress_teaser\");\n\n                    b.Property<string>(\"TeaserOverride\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"teaser_override\");\n\n                    b.Property<string>(\"TemplateKey\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"template_key\");\n\n                    b.Property<string>(\"ThumbnailUrl\")\n                        .HasMaxLength(250)\n                        .HasColumnType(\"character varying(250)\")\n                        .HasColumnName(\"thumbnail_url\");\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"title\");\n\n                    b.HasKey(\"Id\")\n                        .HasName(\"pk_cs_post\");\n\n                    b.HasIndex(\"BlogId\")\n                        .HasDatabaseName(\"ix_cs_post_blog_id\");\n\n                    b.HasIndex(\"CorrelationKey\")\n                        .HasDatabaseName(\"ix_cs_post_correlation_key\");\n\n                    b.HasIndex(\"Slug\")\n                        .HasDatabaseName(\"ix_cs_post_slug\");\n\n                    b.ToTable(\"cs_post\", (string)null);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\", null)\n                        .WithMany(\"PageComments\")\n                        .HasForeignKey(\"PageEntityId\")\n                        .OnDelete(DeleteBehavior.Cascade)\n                        .HasConstraintName(\"fk_cs_page_comment_cs_page_page_entity_id\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageResourceEntity\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\", null)\n                        .WithMany(\"PageResources\")\n                        .HasForeignKey(\"PageEntityId\")\n                        .OnDelete(DeleteBehavior.Cascade)\n                        .HasConstraintName(\"fk_cs_page_resource_cs_page_page_entity_id\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\", null)\n                        .WithMany(\"PostComments\")\n                        .HasForeignKey(\"PostEntityId\")\n                        .HasConstraintName(\"fk_cs_post_comment_cs_post_post_entity_id\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\", b =>\n                {\n                    b.Navigation(\"PageComments\");\n\n                    b.Navigation(\"PageResources\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\", b =>\n                {\n                    b.Navigation(\"PostComments\");\n                });\n#pragma warning restore 612, 618\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.PostgreSql/Migrations/20240918132310_ShowArchiveAndBlogCategories-20240918.cs",
    "content": "﻿using Microsoft.EntityFrameworkCore.Migrations;\n\n#nullable disable\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.PostgreSql.Migrations\n{\n    /// <inheritdoc />\n    public partial class ShowArchiveAndBlogCategories20240918 : Migration\n    {\n        /// <inheritdoc />\n        protected override void Up(MigrationBuilder migrationBuilder)\n        {\n            migrationBuilder.AddColumn<bool>(\n                name: \"show_archived_posts\",\n                table: \"cs_content_project\",\n                type: \"boolean\",\n                nullable: false,\n                defaultValue: false);\n\n            migrationBuilder.AddColumn<bool>(\n                name: \"show_blog_categories\",\n                table: \"cs_content_project\",\n                type: \"boolean\",\n                nullable: false,\n                defaultValue: false);\n        }\n\n        /// <inheritdoc />\n        protected override void Down(MigrationBuilder migrationBuilder)\n        {\n            migrationBuilder.DropColumn(\n                name: \"show_archived_posts\",\n                table: \"cs_content_project\");\n\n            migrationBuilder.DropColumn(\n                name: \"show_blog_categories\",\n                table: \"cs_content_project\");\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.PostgreSql/Migrations/20241001104647_SetShowArchiveAboutRelatedBlogToTrue-20241001.Designer.cs",
    "content": "﻿// <auto-generated />\nusing System;\nusing Microsoft.EntityFrameworkCore;\nusing Microsoft.EntityFrameworkCore.Infrastructure;\nusing Microsoft.EntityFrameworkCore.Migrations;\nusing Microsoft.EntityFrameworkCore.Storage.ValueConversion;\nusing Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;\nusing cloudscribe.SimpleContent.Storage.EFCore.PostgreSql;\n\n#nullable disable\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.PostgreSql.Migrations\n{\n    [DbContext(typeof(SimpleContentDbContext))]\n    [Migration(\"20241001104647_SetShowArchiveAboutRelatedBlogToTrue-20241001\")]\n    partial class SetShowArchiveAboutRelatedBlogToTrue20241001\n    {\n        /// <inheritdoc />\n        protected override void BuildTargetModel(ModelBuilder modelBuilder)\n        {\n#pragma warning disable 612, 618\n            modelBuilder\n                .HasAnnotation(\"ProductVersion\", \"8.0.0\")\n                .HasAnnotation(\"Relational:MaxIdentifierLength\", 63);\n\n            NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder);\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Models.ContentHistory\", b =>\n                {\n                    b.Property<Guid>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36)\n                        .HasColumnType(\"uuid\")\n                        .HasColumnName(\"id\");\n\n                    b.Property<string>(\"ArchivedBy\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"archived_by\");\n\n                    b.Property<DateTime>(\"ArchivedUtc\")\n                        .HasColumnType(\"timestamp with time zone\")\n                        .HasColumnName(\"archived_utc\");\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"author\");\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"categories_csv\");\n\n                    b.Property<string>(\"Content\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"content\");\n\n                    b.Property<string>(\"ContentId\")\n                        .IsRequired()\n                        .HasMaxLength(36)\n                        .HasColumnType(\"character varying(36)\")\n                        .HasColumnName(\"content_id\");\n\n                    b.Property<string>(\"ContentSource\")\n                        .IsRequired()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"character varying(50)\")\n                        .HasColumnName(\"content_source\");\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"character varying(50)\")\n                        .HasDefaultValue(\"html\")\n                        .HasColumnName(\"content_type\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"correlation_key\");\n\n                    b.Property<string>(\"CreatedByUser\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"character varying(100)\")\n                        .HasColumnName(\"created_by_user\");\n\n                    b.Property<DateTime>(\"CreatedUtc\")\n                        .HasColumnType(\"timestamp with time zone\")\n                        .HasColumnName(\"created_utc\");\n\n                    b.Property<string>(\"DraftAuthor\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"draft_author\");\n\n                    b.Property<string>(\"DraftContent\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"draft_content\");\n\n                    b.Property<DateTime?>(\"DraftPubDate\")\n                        .HasColumnType(\"timestamp with time zone\")\n                        .HasColumnName(\"draft_pub_date\");\n\n                    b.Property<string>(\"DraftSerializedModel\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"draft_serialized_model\");\n\n                    b.Property<bool>(\"IsDraftHx\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"is_draft_hx\");\n\n                    b.Property<bool>(\"IsPublished\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"is_published\");\n\n                    b.Property<DateTime>(\"LastModified\")\n                        .HasColumnType(\"timestamp with time zone\")\n                        .HasColumnName(\"last_modified\");\n\n                    b.Property<string>(\"LastModifiedByUser\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"character varying(100)\")\n                        .HasColumnName(\"last_modified_by_user\");\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"meta_description\");\n\n                    b.Property<string>(\"MetaHtml\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"meta_html\");\n\n                    b.Property<string>(\"MetaJson\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"meta_json\");\n\n                    b.Property<int>(\"PageOrder\")\n                        .HasColumnType(\"integer\")\n                        .HasColumnName(\"page_order\");\n\n                    b.Property<string>(\"ParentId\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"parent_id\");\n\n                    b.Property<string>(\"ParentSlug\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"parent_slug\");\n\n                    b.Property<string>(\"ProjectId\")\n                        .HasMaxLength(50)\n                        .HasColumnType(\"character varying(50)\")\n                        .HasColumnName(\"project_id\");\n\n                    b.Property<DateTime?>(\"PubDate\")\n                        .HasColumnType(\"timestamp with time zone\")\n                        .HasColumnName(\"pub_date\");\n\n                    b.Property<string>(\"SerializedModel\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"serialized_model\");\n\n                    b.Property<string>(\"Serializer\")\n                        .HasMaxLength(50)\n                        .HasColumnType(\"character varying(50)\")\n                        .HasColumnName(\"serializer\");\n\n                    b.Property<string>(\"Slug\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"slug\");\n\n                    b.Property<string>(\"TeaserOverride\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"teaser_override\");\n\n                    b.Property<string>(\"TemplateKey\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"template_key\");\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"title\");\n\n                    b.Property<string>(\"ViewRoles\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"view_roles\");\n\n                    b.Property<bool>(\"WasDeleted\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"was_deleted\");\n\n                    b.HasKey(\"Id\")\n                        .HasName(\"pk_cs_content_history\");\n\n                    b.HasIndex(\"ContentId\")\n                        .HasDatabaseName(\"ix_cs_content_history_content_id\");\n\n                    b.HasIndex(\"ContentSource\")\n                        .HasDatabaseName(\"ix_cs_content_history_content_source\");\n\n                    b.HasIndex(\"CorrelationKey\")\n                        .HasDatabaseName(\"ix_cs_content_history_correlation_key\");\n\n                    b.HasIndex(\"CreatedByUser\")\n                        .HasDatabaseName(\"ix_cs_content_history_created_by_user\");\n\n                    b.HasIndex(\"LastModifiedByUser\")\n                        .HasDatabaseName(\"ix_cs_content_history_last_modified_by_user\");\n\n                    b.HasIndex(\"Title\")\n                        .HasDatabaseName(\"ix_cs_content_history_title\");\n\n                    b.ToTable(\"cs_content_history\", (string)null);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Models.ProjectSettings\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .HasMaxLength(50)\n                        .HasColumnType(\"character varying(50)\")\n                        .HasColumnName(\"id\");\n\n                    b.Property<string>(\"AboutContent\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"about_content\");\n\n                    b.Property<string>(\"AboutHeading\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"about_heading\");\n\n                    b.Property<bool>(\"AddBlogToPagesTree\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"add_blog_to_pages_tree\");\n\n                    b.Property<bool>(\"BlogMenuLinksToNewestPost\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"blog_menu_links_to_newest_post\");\n\n                    b.Property<string>(\"BlogPageNavComponentVisibility\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"blog_page_nav_component_visibility\");\n\n                    b.Property<int>(\"BlogPagePosition\")\n                        .HasColumnType(\"integer\")\n                        .HasColumnName(\"blog_page_position\");\n\n                    b.Property<string>(\"BlogPageText\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"blog_page_text\");\n\n                    b.Property<string>(\"CdnUrl\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"cdn_url\");\n\n                    b.Property<string>(\"ChannelCategoriesCsv\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"channel_categories_csv\");\n\n                    b.Property<string>(\"ChannelRating\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"character varying(100)\")\n                        .HasColumnName(\"channel_rating\");\n\n                    b.Property<int>(\"ChannelTimeToLive\")\n                        .HasColumnType(\"integer\")\n                        .HasColumnName(\"channel_time_to_live\");\n\n                    b.Property<string>(\"CommentNotificationEmail\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"character varying(100)\")\n                        .HasColumnName(\"comment_notification_email\");\n\n                    b.Property<string>(\"CopyrightNotice\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"copyright_notice\");\n\n                    b.Property<int>(\"DaysToComment\")\n                        .HasColumnType(\"integer\")\n                        .HasColumnName(\"days_to_comment\");\n\n                    b.Property<string>(\"DefaultContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"character varying(50)\")\n                        .HasDefaultValue(\"html\")\n                        .HasColumnName(\"default_content_type\");\n\n                    b.Property<int>(\"DefaultFeedItems\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"integer\")\n                        .HasDefaultValue(20)\n                        .HasColumnName(\"default_feed_items\");\n\n                    b.Property<string>(\"DefaultPageSlug\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"default_page_slug\");\n\n                    b.Property<string>(\"Description\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"description\");\n\n                    b.Property<string>(\"DisqusShortName\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"character varying(100)\")\n                        .HasColumnName(\"disqus_short_name\");\n\n                    b.Property<string>(\"FacebookAppId\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"character varying(100)\")\n                        .HasColumnName(\"facebook_app_id\");\n\n                    b.Property<string>(\"Image\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"image\");\n\n                    b.Property<bool>(\"IncludePubDateInPostUrls\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"include_pub_date_in_post_urls\");\n\n                    b.Property<string>(\"LanguageCode\")\n                        .HasMaxLength(10)\n                        .HasColumnType(\"character varying(10)\")\n                        .HasColumnName(\"language_code\");\n\n                    b.Property<string>(\"LocalMediaVirtualPath\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"local_media_virtual_path\");\n\n                    b.Property<string>(\"ManagingEditorEmail\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"character varying(100)\")\n                        .HasColumnName(\"managing_editor_email\");\n\n                    b.Property<int>(\"MaxFeedItems\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"integer\")\n                        .HasDefaultValue(1000)\n                        .HasColumnName(\"max_feed_items\");\n\n                    b.Property<bool>(\"ModerateComments\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"moderate_comments\");\n\n                    b.Property<int>(\"PostsPerPage\")\n                        .HasColumnType(\"integer\")\n                        .HasColumnName(\"posts_per_page\");\n\n                    b.Property<string>(\"PubDateFormat\")\n                        .HasMaxLength(75)\n                        .HasColumnType(\"character varying(75)\")\n                        .HasColumnName(\"pub_date_format\");\n\n                    b.Property<string>(\"Publisher\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"publisher\");\n\n                    b.Property<string>(\"PublisherEntityType\")\n                        .HasMaxLength(50)\n                        .HasColumnType(\"character varying(50)\")\n                        .HasColumnName(\"publisher_entity_type\");\n\n                    b.Property<string>(\"PublisherLogoHeight\")\n                        .HasMaxLength(20)\n                        .HasColumnType(\"character varying(20)\")\n                        .HasColumnName(\"publisher_logo_height\");\n\n                    b.Property<string>(\"PublisherLogoUrl\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"publisher_logo_url\");\n\n                    b.Property<string>(\"PublisherLogoWidth\")\n                        .HasMaxLength(20)\n                        .HasColumnType(\"character varying(20)\")\n                        .HasColumnName(\"publisher_logo_width\");\n\n                    b.Property<string>(\"RecaptchaPrivateKey\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"recaptcha_private_key\");\n\n                    b.Property<string>(\"RecaptchaPublicKey\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"recaptcha_public_key\");\n\n                    b.Property<string>(\"RemoteFeedProcessorUseAgentFragment\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"remote_feed_processor_use_agent_fragment\");\n\n                    b.Property<string>(\"RemoteFeedUrl\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"remote_feed_url\");\n\n                    b.Property<bool>(\"ShowAboutBox\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"boolean\")\n                        .HasDefaultValue(true)\n                        .HasColumnName(\"show_about_box\");\n\n                    b.Property<bool>(\"ShowArchivedPosts\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"boolean\")\n                        .HasDefaultValue(true)\n                        .HasColumnName(\"show_archived_posts\");\n\n                    b.Property<bool>(\"ShowBlogCategories\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"boolean\")\n                        .HasDefaultValue(true)\n                        .HasColumnName(\"show_blog_categories\");\n\n                    b.Property<bool>(\"ShowFeaturedPostsOnDefaultPage\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"show_featured_posts_on_default_page\");\n\n                    b.Property<bool>(\"ShowRecentPostsOnDefaultPage\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"show_recent_posts_on_default_page\");\n\n                    b.Property<bool>(\"ShowRelatedPosts\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"boolean\")\n                        .HasDefaultValue(true)\n                        .HasColumnName(\"show_related_posts\");\n\n                    b.Property<bool>(\"ShowTitle\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"show_title\");\n\n                    b.Property<string>(\"SiteName\")\n                        .HasMaxLength(200)\n                        .HasColumnType(\"character varying(200)\")\n                        .HasColumnName(\"site_name\");\n\n                    b.Property<byte>(\"TeaserMode\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"smallint\")\n                        .HasDefaultValue((byte)0)\n                        .HasColumnName(\"teaser_mode\");\n\n                    b.Property<int>(\"TeaserTruncationLength\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"integer\")\n                        .HasDefaultValue(20)\n                        .HasColumnName(\"teaser_truncation_length\");\n\n                    b.Property<byte>(\"TeaserTruncationMode\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"smallint\")\n                        .HasDefaultValue((byte)0)\n                        .HasColumnName(\"teaser_truncation_mode\");\n\n                    b.Property<string>(\"TimeZoneId\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"character varying(100)\")\n                        .HasColumnName(\"time_zone_id\");\n\n                    b.Property<string>(\"Title\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"title\");\n\n                    b.Property<string>(\"TwitterCreator\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"character varying(100)\")\n                        .HasColumnName(\"twitter_creator\");\n\n                    b.Property<string>(\"TwitterPublisher\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"character varying(100)\")\n                        .HasColumnName(\"twitter_publisher\");\n\n                    b.Property<bool>(\"UseDefaultPageAsRootNode\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"use_default_page_as_root_node\");\n\n                    b.Property<string>(\"WebmasterEmail\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"character varying(100)\")\n                        .HasColumnName(\"webmaster_email\");\n\n                    b.HasKey(\"Id\")\n                        .HasName(\"pk_cs_content_project\");\n\n                    b.ToTable(\"cs_content_project\", (string)null);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageCategory\", b =>\n                {\n                    b.Property<string>(\"Value\")\n                        .HasMaxLength(50)\n                        .HasColumnType(\"character varying(50)\")\n                        .HasColumnName(\"value\");\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"character varying(36)\")\n                        .HasColumnName(\"page_entity_id\");\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"character varying(50)\")\n                        .HasColumnName(\"project_id\");\n\n                    b.HasKey(\"Value\", \"PageEntityId\")\n                        .HasName(\"pk_cs_page_category\");\n\n                    b.HasIndex(\"PageEntityId\")\n                        .HasDatabaseName(\"ix_cs_page_category_page_entity_id\");\n\n                    b.HasIndex(\"ProjectId\")\n                        .HasDatabaseName(\"ix_cs_page_category_project_id\");\n\n                    b.HasIndex(\"Value\")\n                        .HasDatabaseName(\"ix_cs_page_category_value\");\n\n                    b.ToTable(\"cs_page_category\", (string)null);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"character varying(36)\")\n                        .HasColumnName(\"id\");\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"author\");\n\n                    b.Property<string>(\"Content\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"content\");\n\n                    b.Property<string>(\"Email\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"character varying(100)\")\n                        .HasColumnName(\"email\");\n\n                    b.Property<string>(\"Ip\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"character varying(100)\")\n                        .HasColumnName(\"ip\");\n\n                    b.Property<bool>(\"IsAdmin\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"is_admin\");\n\n                    b.Property<bool>(\"IsApproved\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"is_approved\");\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"character varying(36)\")\n                        .HasColumnName(\"page_entity_id\");\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"character varying(50)\")\n                        .HasColumnName(\"project_id\");\n\n                    b.Property<DateTime>(\"PubDate\")\n                        .HasColumnType(\"timestamp with time zone\")\n                        .HasColumnName(\"pub_date\");\n\n                    b.Property<string>(\"UserAgent\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"user_agent\");\n\n                    b.Property<string>(\"Website\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"website\");\n\n                    b.HasKey(\"Id\")\n                        .HasName(\"pk_cs_page_comment\");\n\n                    b.HasIndex(\"PageEntityId\")\n                        .HasDatabaseName(\"ix_cs_page_comment_page_entity_id\");\n\n                    b.HasIndex(\"ProjectId\")\n                        .HasDatabaseName(\"ix_cs_page_comment_project_id\");\n\n                    b.ToTable(\"cs_page_comment\", (string)null);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"character varying(36)\")\n                        .HasColumnName(\"id\");\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"author\");\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasMaxLength(500)\n                        .HasColumnType(\"character varying(500)\")\n                        .HasColumnName(\"categories_csv\");\n\n                    b.Property<string>(\"Content\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"content\");\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"character varying(50)\")\n                        .HasDefaultValue(\"html\")\n                        .HasColumnName(\"content_type\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"correlation_key\");\n\n                    b.Property<string>(\"CreatedByUser\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"character varying(100)\")\n                        .HasColumnName(\"created_by_user\");\n\n                    b.Property<DateTime>(\"CreatedUtc\")\n                        .HasColumnType(\"timestamp with time zone\")\n                        .HasColumnName(\"created_utc\");\n\n                    b.Property<bool>(\"DisableEditor\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"disable_editor\");\n\n                    b.Property<string>(\"DraftAuthor\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"draft_author\");\n\n                    b.Property<string>(\"DraftContent\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"draft_content\");\n\n                    b.Property<DateTime?>(\"DraftPubDate\")\n                        .HasColumnType(\"timestamp with time zone\")\n                        .HasColumnName(\"draft_pub_date\");\n\n                    b.Property<string>(\"DraftSerializedModel\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"draft_serialized_model\");\n\n                    b.Property<string>(\"ExternalUrl\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"external_url\");\n\n                    b.Property<bool>(\"IsPublished\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"is_published\");\n\n                    b.Property<DateTime>(\"LastModified\")\n                        .HasColumnType(\"timestamp with time zone\")\n                        .HasColumnName(\"last_modified\");\n\n                    b.Property<string>(\"LastModifiedByUser\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"character varying(100)\")\n                        .HasColumnName(\"last_modified_by_user\");\n\n                    b.Property<string>(\"MenuFilters\")\n                        .HasMaxLength(500)\n                        .HasColumnType(\"character varying(500)\")\n                        .HasColumnName(\"menu_filters\");\n\n                    b.Property<bool>(\"MenuOnly\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"menu_only\");\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasMaxLength(500)\n                        .HasColumnType(\"character varying(500)\")\n                        .HasColumnName(\"meta_description\");\n\n                    b.Property<string>(\"MetaHtml\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"meta_html\");\n\n                    b.Property<string>(\"MetaJson\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"meta_json\");\n\n                    b.Property<int>(\"PageOrder\")\n                        .HasColumnType(\"integer\")\n                        .HasColumnName(\"page_order\");\n\n                    b.Property<string>(\"ParentId\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"character varying(36)\")\n                        .HasColumnName(\"parent_id\");\n\n                    b.Property<string>(\"ParentSlug\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"parent_slug\");\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"character varying(50)\")\n                        .HasColumnName(\"project_id\");\n\n                    b.Property<DateTime?>(\"PubDate\")\n                        .HasColumnType(\"timestamp with time zone\")\n                        .HasColumnName(\"pub_date\");\n\n                    b.Property<string>(\"SerializedModel\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"serialized_model\");\n\n                    b.Property<string>(\"Serializer\")\n                        .HasMaxLength(50)\n                        .HasColumnType(\"character varying(50)\")\n                        .HasColumnName(\"serializer\");\n\n                    b.Property<bool>(\"ShowCategories\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"show_categories\");\n\n                    b.Property<bool>(\"ShowComments\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"show_comments\");\n\n                    b.Property<bool>(\"ShowHeading\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"show_heading\");\n\n                    b.Property<bool>(\"ShowLastModified\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"show_last_modified\");\n\n                    b.Property<bool>(\"ShowMenu\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"show_menu\");\n\n                    b.Property<bool>(\"ShowPubDate\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"show_pub_date\");\n\n                    b.Property<string>(\"Slug\")\n                        .IsRequired()\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"slug\");\n\n                    b.Property<string>(\"TemplateKey\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"template_key\");\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"title\");\n\n                    b.Property<string>(\"ViewRoles\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"view_roles\");\n\n                    b.HasKey(\"Id\")\n                        .HasName(\"pk_cs_page\");\n\n                    b.HasIndex(\"CorrelationKey\")\n                        .HasDatabaseName(\"ix_cs_page_correlation_key\");\n\n                    b.HasIndex(\"ParentId\")\n                        .HasDatabaseName(\"ix_cs_page_parent_id\");\n\n                    b.HasIndex(\"ProjectId\")\n                        .HasDatabaseName(\"ix_cs_page_project_id\");\n\n                    b.ToTable(\"cs_page\", (string)null);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageResourceEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"character varying(36)\")\n                        .HasColumnName(\"id\");\n\n                    b.Property<string>(\"Environment\")\n                        .IsRequired()\n                        .HasMaxLength(15)\n                        .HasColumnType(\"character varying(15)\")\n                        .HasColumnName(\"environment\");\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"character varying(36)\")\n                        .HasColumnName(\"page_entity_id\");\n\n                    b.Property<int>(\"Sort\")\n                        .HasColumnType(\"integer\")\n                        .HasColumnName(\"sort\");\n\n                    b.Property<string>(\"Type\")\n                        .IsRequired()\n                        .HasMaxLength(10)\n                        .HasColumnType(\"character varying(10)\")\n                        .HasColumnName(\"type\");\n\n                    b.Property<string>(\"Url\")\n                        .IsRequired()\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"url\");\n\n                    b.HasKey(\"Id\")\n                        .HasName(\"pk_cs_page_resource\");\n\n                    b.HasIndex(\"PageEntityId\")\n                        .HasDatabaseName(\"ix_cs_page_resource_page_entity_id\");\n\n                    b.ToTable(\"cs_page_resource\", (string)null);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostCategory\", b =>\n                {\n                    b.Property<string>(\"Value\")\n                        .HasMaxLength(50)\n                        .HasColumnType(\"character varying(50)\")\n                        .HasColumnName(\"value\");\n\n                    b.Property<string>(\"PostEntityId\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"character varying(36)\")\n                        .HasColumnName(\"post_entity_id\");\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"character varying(50)\")\n                        .HasColumnName(\"project_id\");\n\n                    b.HasKey(\"Value\", \"PostEntityId\")\n                        .HasName(\"pk_cs_post_category\");\n\n                    b.HasIndex(\"PostEntityId\")\n                        .HasDatabaseName(\"ix_cs_post_category_post_entity_id\");\n\n                    b.HasIndex(\"ProjectId\")\n                        .HasDatabaseName(\"ix_cs_post_category_project_id\");\n\n                    b.HasIndex(\"Value\")\n                        .HasDatabaseName(\"ix_cs_post_category_value\");\n\n                    b.ToTable(\"cs_post_category\", (string)null);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"character varying(36)\")\n                        .HasColumnName(\"id\");\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"author\");\n\n                    b.Property<string>(\"Content\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"content\");\n\n                    b.Property<string>(\"Email\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"character varying(100)\")\n                        .HasColumnName(\"email\");\n\n                    b.Property<string>(\"Ip\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"character varying(100)\")\n                        .HasColumnName(\"ip\");\n\n                    b.Property<bool>(\"IsAdmin\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"is_admin\");\n\n                    b.Property<bool>(\"IsApproved\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"is_approved\");\n\n                    b.Property<string>(\"PostEntityId\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"character varying(36)\")\n                        .HasColumnName(\"post_entity_id\");\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"character varying(50)\")\n                        .HasColumnName(\"project_id\");\n\n                    b.Property<DateTime>(\"PubDate\")\n                        .HasColumnType(\"timestamp with time zone\")\n                        .HasColumnName(\"pub_date\");\n\n                    b.Property<string>(\"UserAgent\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"user_agent\");\n\n                    b.Property<string>(\"Website\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"website\");\n\n                    b.HasKey(\"Id\")\n                        .HasName(\"pk_cs_post_comment\");\n\n                    b.HasIndex(\"PostEntityId\")\n                        .HasDatabaseName(\"ix_cs_post_comment_post_entity_id\");\n\n                    b.HasIndex(\"ProjectId\")\n                        .HasDatabaseName(\"ix_cs_post_comment_project_id\");\n\n                    b.ToTable(\"cs_post_comment\", (string)null);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"character varying(36)\")\n                        .HasColumnName(\"id\");\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"author\");\n\n                    b.Property<string>(\"AutoTeaser\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"auto_teaser\");\n\n                    b.Property<string>(\"BlogId\")\n                        .IsRequired()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"character varying(50)\")\n                        .HasColumnName(\"blog_id\");\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasMaxLength(500)\n                        .HasColumnType(\"character varying(500)\")\n                        .HasColumnName(\"categories_csv\");\n\n                    b.Property<string>(\"Content\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"content\");\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"character varying(50)\")\n                        .HasDefaultValue(\"html\")\n                        .HasColumnName(\"content_type\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"correlation_key\");\n\n                    b.Property<string>(\"CreatedByUser\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"character varying(100)\")\n                        .HasColumnName(\"created_by_user\");\n\n                    b.Property<DateTime>(\"CreatedUtc\")\n                        .HasColumnType(\"timestamp with time zone\")\n                        .HasColumnName(\"created_utc\");\n\n                    b.Property<string>(\"DraftAuthor\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"draft_author\");\n\n                    b.Property<string>(\"DraftContent\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"draft_content\");\n\n                    b.Property<DateTime?>(\"DraftPubDate\")\n                        .HasColumnType(\"timestamp with time zone\")\n                        .HasColumnName(\"draft_pub_date\");\n\n                    b.Property<string>(\"DraftSerializedModel\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"draft_serialized_model\");\n\n                    b.Property<string>(\"ImageUrl\")\n                        .HasMaxLength(250)\n                        .HasColumnType(\"character varying(250)\")\n                        .HasColumnName(\"image_url\");\n\n                    b.Property<bool>(\"IsFeatured\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"is_featured\");\n\n                    b.Property<bool>(\"IsPublished\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"is_published\");\n\n                    b.Property<DateTime>(\"LastModified\")\n                        .HasColumnType(\"timestamp with time zone\")\n                        .HasColumnName(\"last_modified\");\n\n                    b.Property<string>(\"LastModifiedByUser\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"character varying(100)\")\n                        .HasColumnName(\"last_modified_by_user\");\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasMaxLength(500)\n                        .HasColumnType(\"character varying(500)\")\n                        .HasColumnName(\"meta_description\");\n\n                    b.Property<string>(\"MetaHtml\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"meta_html\");\n\n                    b.Property<string>(\"MetaJson\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"meta_json\");\n\n                    b.Property<DateTime?>(\"PubDate\")\n                        .HasColumnType(\"timestamp with time zone\")\n                        .HasColumnName(\"pub_date\");\n\n                    b.Property<string>(\"SerializedModel\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"serialized_model\");\n\n                    b.Property<string>(\"Serializer\")\n                        .HasMaxLength(50)\n                        .HasColumnType(\"character varying(50)\")\n                        .HasColumnName(\"serializer\");\n\n                    b.Property<bool>(\"ShowComments\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"show_comments\");\n\n                    b.Property<string>(\"Slug\")\n                        .IsRequired()\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"slug\");\n\n                    b.Property<bool>(\"SuppressTeaser\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"suppress_teaser\");\n\n                    b.Property<string>(\"TeaserOverride\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"teaser_override\");\n\n                    b.Property<string>(\"TemplateKey\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"template_key\");\n\n                    b.Property<string>(\"ThumbnailUrl\")\n                        .HasMaxLength(250)\n                        .HasColumnType(\"character varying(250)\")\n                        .HasColumnName(\"thumbnail_url\");\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"title\");\n\n                    b.HasKey(\"Id\")\n                        .HasName(\"pk_cs_post\");\n\n                    b.HasIndex(\"BlogId\")\n                        .HasDatabaseName(\"ix_cs_post_blog_id\");\n\n                    b.HasIndex(\"CorrelationKey\")\n                        .HasDatabaseName(\"ix_cs_post_correlation_key\");\n\n                    b.HasIndex(\"Slug\")\n                        .HasDatabaseName(\"ix_cs_post_slug\");\n\n                    b.ToTable(\"cs_post\", (string)null);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\", null)\n                        .WithMany(\"PageComments\")\n                        .HasForeignKey(\"PageEntityId\")\n                        .OnDelete(DeleteBehavior.Cascade)\n                        .HasConstraintName(\"fk_cs_page_comment_cs_page_page_entity_id\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageResourceEntity\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\", null)\n                        .WithMany(\"PageResources\")\n                        .HasForeignKey(\"PageEntityId\")\n                        .OnDelete(DeleteBehavior.Cascade)\n                        .HasConstraintName(\"fk_cs_page_resource_cs_page_page_entity_id\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\", null)\n                        .WithMany(\"PostComments\")\n                        .HasForeignKey(\"PostEntityId\")\n                        .HasConstraintName(\"fk_cs_post_comment_cs_post_post_entity_id\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\", b =>\n                {\n                    b.Navigation(\"PageComments\");\n\n                    b.Navigation(\"PageResources\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\", b =>\n                {\n                    b.Navigation(\"PostComments\");\n                });\n#pragma warning restore 612, 618\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.PostgreSql/Migrations/20241001104647_SetShowArchiveAboutRelatedBlogToTrue-20241001.cs",
    "content": "﻿using Microsoft.EntityFrameworkCore.Migrations;\n\n#nullable disable\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.PostgreSql.Migrations\n{\n    /// <inheritdoc />\n    public partial class SetShowArchiveAboutRelatedBlogToTrue20241001 : Migration\n    {\n        /// <inheritdoc />\n        protected override void Up(MigrationBuilder migrationBuilder)\n        {\n            migrationBuilder.AlterColumn<bool>(\n                name: \"show_related_posts\",\n                table: \"cs_content_project\",\n                type: \"boolean\",\n                nullable: false,\n                defaultValue: true,\n                oldClrType: typeof(bool),\n                oldType: \"boolean\");\n\n            migrationBuilder.AlterColumn<bool>(\n                name: \"show_blog_categories\",\n                table: \"cs_content_project\",\n                type: \"boolean\",\n                nullable: false,\n                defaultValue: true,\n                oldClrType: typeof(bool),\n                oldType: \"boolean\");\n\n            migrationBuilder.AlterColumn<bool>(\n                name: \"show_archived_posts\",\n                table: \"cs_content_project\",\n                type: \"boolean\",\n                nullable: false,\n                defaultValue: true,\n                oldClrType: typeof(bool),\n                oldType: \"boolean\");\n\n            migrationBuilder.AlterColumn<bool>(\n                name: \"show_about_box\",\n                table: \"cs_content_project\",\n                type: \"boolean\",\n                nullable: false,\n                defaultValue: true,\n                oldClrType: typeof(bool),\n                oldType: \"boolean\");\n        }\n\n        /// <inheritdoc />\n        protected override void Down(MigrationBuilder migrationBuilder)\n        {\n            migrationBuilder.AlterColumn<bool>(\n                name: \"show_related_posts\",\n                table: \"cs_content_project\",\n                type: \"boolean\",\n                nullable: false,\n                oldClrType: typeof(bool),\n                oldType: \"boolean\",\n                oldDefaultValue: true);\n\n            migrationBuilder.AlterColumn<bool>(\n                name: \"show_blog_categories\",\n                table: \"cs_content_project\",\n                type: \"boolean\",\n                nullable: false,\n                oldClrType: typeof(bool),\n                oldType: \"boolean\",\n                oldDefaultValue: true);\n\n            migrationBuilder.AlterColumn<bool>(\n                name: \"show_archived_posts\",\n                table: \"cs_content_project\",\n                type: \"boolean\",\n                nullable: false,\n                oldClrType: typeof(bool),\n                oldType: \"boolean\",\n                oldDefaultValue: true);\n\n            migrationBuilder.AlterColumn<bool>(\n                name: \"show_about_box\",\n                table: \"cs_content_project\",\n                type: \"boolean\",\n                nullable: false,\n                oldClrType: typeof(bool),\n                oldType: \"boolean\",\n                oldDefaultValue: true);\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.PostgreSql/Migrations/20241108094644_simplecontent-20241108.Designer.cs",
    "content": "﻿// <auto-generated />\nusing System;\nusing Microsoft.EntityFrameworkCore;\nusing Microsoft.EntityFrameworkCore.Infrastructure;\nusing Microsoft.EntityFrameworkCore.Migrations;\nusing Microsoft.EntityFrameworkCore.Storage.ValueConversion;\nusing Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;\nusing cloudscribe.SimpleContent.Storage.EFCore.PostgreSql;\n\n#nullable disable\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.PostgreSql.Migrations\n{\n    [DbContext(typeof(SimpleContentDbContext))]\n    [Migration(\"20241108094644_simplecontent-20241108\")]\n    partial class simplecontent20241108\n    {\n        /// <inheritdoc />\n        protected override void BuildTargetModel(ModelBuilder modelBuilder)\n        {\n#pragma warning disable 612, 618\n            modelBuilder\n                .HasAnnotation(\"ProductVersion\", \"8.0.0\")\n                .HasAnnotation(\"Relational:MaxIdentifierLength\", 63);\n\n            NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder);\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Models.ContentHistory\", b =>\n                {\n                    b.Property<Guid>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36)\n                        .HasColumnType(\"uuid\")\n                        .HasColumnName(\"id\");\n\n                    b.Property<string>(\"ArchivedBy\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"archived_by\");\n\n                    b.Property<DateTime>(\"ArchivedUtc\")\n                        .HasColumnType(\"timestamp with time zone\")\n                        .HasColumnName(\"archived_utc\");\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"author\");\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"categories_csv\");\n\n                    b.Property<string>(\"Content\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"content\");\n\n                    b.Property<string>(\"ContentId\")\n                        .IsRequired()\n                        .HasMaxLength(36)\n                        .HasColumnType(\"character varying(36)\")\n                        .HasColumnName(\"content_id\");\n\n                    b.Property<string>(\"ContentSource\")\n                        .IsRequired()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"character varying(50)\")\n                        .HasColumnName(\"content_source\");\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"character varying(50)\")\n                        .HasDefaultValue(\"html\")\n                        .HasColumnName(\"content_type\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"correlation_key\");\n\n                    b.Property<string>(\"CreatedByUser\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"character varying(100)\")\n                        .HasColumnName(\"created_by_user\");\n\n                    b.Property<DateTime>(\"CreatedUtc\")\n                        .HasColumnType(\"timestamp with time zone\")\n                        .HasColumnName(\"created_utc\");\n\n                    b.Property<string>(\"DraftAuthor\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"draft_author\");\n\n                    b.Property<string>(\"DraftContent\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"draft_content\");\n\n                    b.Property<DateTime?>(\"DraftPubDate\")\n                        .HasColumnType(\"timestamp with time zone\")\n                        .HasColumnName(\"draft_pub_date\");\n\n                    b.Property<string>(\"DraftSerializedModel\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"draft_serialized_model\");\n\n                    b.Property<bool>(\"IsDraftHx\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"is_draft_hx\");\n\n                    b.Property<bool>(\"IsPublished\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"is_published\");\n\n                    b.Property<DateTime>(\"LastModified\")\n                        .HasColumnType(\"timestamp with time zone\")\n                        .HasColumnName(\"last_modified\");\n\n                    b.Property<string>(\"LastModifiedByUser\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"character varying(100)\")\n                        .HasColumnName(\"last_modified_by_user\");\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"meta_description\");\n\n                    b.Property<string>(\"MetaHtml\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"meta_html\");\n\n                    b.Property<string>(\"MetaJson\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"meta_json\");\n\n                    b.Property<int>(\"PageOrder\")\n                        .HasColumnType(\"integer\")\n                        .HasColumnName(\"page_order\");\n\n                    b.Property<string>(\"ParentId\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"parent_id\");\n\n                    b.Property<string>(\"ParentSlug\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"parent_slug\");\n\n                    b.Property<string>(\"ProjectId\")\n                        .HasMaxLength(50)\n                        .HasColumnType(\"character varying(50)\")\n                        .HasColumnName(\"project_id\");\n\n                    b.Property<DateTime?>(\"PubDate\")\n                        .HasColumnType(\"timestamp with time zone\")\n                        .HasColumnName(\"pub_date\");\n\n                    b.Property<string>(\"SerializedModel\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"serialized_model\");\n\n                    b.Property<string>(\"Serializer\")\n                        .HasMaxLength(50)\n                        .HasColumnType(\"character varying(50)\")\n                        .HasColumnName(\"serializer\");\n\n                    b.Property<bool?>(\"ShowCreatedBy\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"show_created_by\");\n\n                    b.Property<bool?>(\"ShowCreatedDate\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"show_created_date\");\n\n                    b.Property<bool?>(\"ShowLastModifiedBy\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"show_last_modified_by\");\n\n                    b.Property<bool?>(\"ShowLastModifiedDate\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"show_last_modified_date\");\n\n                    b.Property<string>(\"Slug\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"slug\");\n\n                    b.Property<string>(\"TeaserOverride\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"teaser_override\");\n\n                    b.Property<string>(\"TemplateKey\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"template_key\");\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"title\");\n\n                    b.Property<string>(\"ViewRoles\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"view_roles\");\n\n                    b.Property<bool>(\"WasDeleted\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"was_deleted\");\n\n                    b.HasKey(\"Id\")\n                        .HasName(\"pk_cs_content_history\");\n\n                    b.HasIndex(\"ContentId\")\n                        .HasDatabaseName(\"ix_cs_content_history_content_id\");\n\n                    b.HasIndex(\"ContentSource\")\n                        .HasDatabaseName(\"ix_cs_content_history_content_source\");\n\n                    b.HasIndex(\"CorrelationKey\")\n                        .HasDatabaseName(\"ix_cs_content_history_correlation_key\");\n\n                    b.HasIndex(\"CreatedByUser\")\n                        .HasDatabaseName(\"ix_cs_content_history_created_by_user\");\n\n                    b.HasIndex(\"LastModifiedByUser\")\n                        .HasDatabaseName(\"ix_cs_content_history_last_modified_by_user\");\n\n                    b.HasIndex(\"Title\")\n                        .HasDatabaseName(\"ix_cs_content_history_title\");\n\n                    b.ToTable(\"cs_content_history\", (string)null);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Models.ProjectSettings\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .HasMaxLength(50)\n                        .HasColumnType(\"character varying(50)\")\n                        .HasColumnName(\"id\");\n\n                    b.Property<string>(\"AboutContent\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"about_content\");\n\n                    b.Property<string>(\"AboutHeading\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"about_heading\");\n\n                    b.Property<bool>(\"AddBlogToPagesTree\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"add_blog_to_pages_tree\");\n\n                    b.Property<bool>(\"BlogMenuLinksToNewestPost\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"blog_menu_links_to_newest_post\");\n\n                    b.Property<string>(\"BlogPageNavComponentVisibility\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"blog_page_nav_component_visibility\");\n\n                    b.Property<int>(\"BlogPagePosition\")\n                        .HasColumnType(\"integer\")\n                        .HasColumnName(\"blog_page_position\");\n\n                    b.Property<string>(\"BlogPageText\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"blog_page_text\");\n\n                    b.Property<string>(\"CdnUrl\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"cdn_url\");\n\n                    b.Property<string>(\"ChannelCategoriesCsv\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"channel_categories_csv\");\n\n                    b.Property<string>(\"ChannelRating\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"character varying(100)\")\n                        .HasColumnName(\"channel_rating\");\n\n                    b.Property<int>(\"ChannelTimeToLive\")\n                        .HasColumnType(\"integer\")\n                        .HasColumnName(\"channel_time_to_live\");\n\n                    b.Property<string>(\"CommentNotificationEmail\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"character varying(100)\")\n                        .HasColumnName(\"comment_notification_email\");\n\n                    b.Property<string>(\"CopyrightNotice\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"copyright_notice\");\n\n                    b.Property<int>(\"DaysToComment\")\n                        .HasColumnType(\"integer\")\n                        .HasColumnName(\"days_to_comment\");\n\n                    b.Property<string>(\"DefaultContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"character varying(50)\")\n                        .HasDefaultValue(\"html\")\n                        .HasColumnName(\"default_content_type\");\n\n                    b.Property<int>(\"DefaultFeedItems\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"integer\")\n                        .HasDefaultValue(20)\n                        .HasColumnName(\"default_feed_items\");\n\n                    b.Property<string>(\"DefaultPageSlug\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"default_page_slug\");\n\n                    b.Property<string>(\"Description\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"description\");\n\n                    b.Property<string>(\"DisqusShortName\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"character varying(100)\")\n                        .HasColumnName(\"disqus_short_name\");\n\n                    b.Property<string>(\"FacebookAppId\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"character varying(100)\")\n                        .HasColumnName(\"facebook_app_id\");\n\n                    b.Property<string>(\"Image\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"image\");\n\n                    b.Property<bool>(\"IncludePubDateInPostUrls\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"include_pub_date_in_post_urls\");\n\n                    b.Property<string>(\"LanguageCode\")\n                        .HasMaxLength(10)\n                        .HasColumnType(\"character varying(10)\")\n                        .HasColumnName(\"language_code\");\n\n                    b.Property<string>(\"LocalMediaVirtualPath\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"local_media_virtual_path\");\n\n                    b.Property<string>(\"ManagingEditorEmail\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"character varying(100)\")\n                        .HasColumnName(\"managing_editor_email\");\n\n                    b.Property<int>(\"MaxFeedItems\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"integer\")\n                        .HasDefaultValue(1000)\n                        .HasColumnName(\"max_feed_items\");\n\n                    b.Property<bool>(\"ModerateComments\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"moderate_comments\");\n\n                    b.Property<int>(\"PostsPerPage\")\n                        .HasColumnType(\"integer\")\n                        .HasColumnName(\"posts_per_page\");\n\n                    b.Property<string>(\"PubDateFormat\")\n                        .HasMaxLength(75)\n                        .HasColumnType(\"character varying(75)\")\n                        .HasColumnName(\"pub_date_format\");\n\n                    b.Property<string>(\"Publisher\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"publisher\");\n\n                    b.Property<string>(\"PublisherEntityType\")\n                        .HasMaxLength(50)\n                        .HasColumnType(\"character varying(50)\")\n                        .HasColumnName(\"publisher_entity_type\");\n\n                    b.Property<string>(\"PublisherLogoHeight\")\n                        .HasMaxLength(20)\n                        .HasColumnType(\"character varying(20)\")\n                        .HasColumnName(\"publisher_logo_height\");\n\n                    b.Property<string>(\"PublisherLogoUrl\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"publisher_logo_url\");\n\n                    b.Property<string>(\"PublisherLogoWidth\")\n                        .HasMaxLength(20)\n                        .HasColumnType(\"character varying(20)\")\n                        .HasColumnName(\"publisher_logo_width\");\n\n                    b.Property<string>(\"RecaptchaPrivateKey\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"recaptcha_private_key\");\n\n                    b.Property<string>(\"RecaptchaPublicKey\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"recaptcha_public_key\");\n\n                    b.Property<string>(\"RemoteFeedProcessorUseAgentFragment\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"remote_feed_processor_use_agent_fragment\");\n\n                    b.Property<string>(\"RemoteFeedUrl\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"remote_feed_url\");\n\n                    b.Property<bool>(\"ShowAboutBox\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"boolean\")\n                        .HasDefaultValue(true)\n                        .HasColumnName(\"show_about_box\");\n\n                    b.Property<bool>(\"ShowArchivedPosts\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"boolean\")\n                        .HasDefaultValue(true)\n                        .HasColumnName(\"show_archived_posts\");\n\n                    b.Property<bool>(\"ShowBlogCategories\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"boolean\")\n                        .HasDefaultValue(true)\n                        .HasColumnName(\"show_blog_categories\");\n\n                    b.Property<bool>(\"ShowCreatedBy\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"show_created_by\");\n\n                    b.Property<bool>(\"ShowCreatedDate\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"show_created_date\");\n\n                    b.Property<bool>(\"ShowFeaturedPostsOnDefaultPage\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"show_featured_posts_on_default_page\");\n\n                    b.Property<bool>(\"ShowLastModifiedBy\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"show_last_modified_by\");\n\n                    b.Property<bool>(\"ShowLastModifiedDate\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"show_last_modified_date\");\n\n                    b.Property<bool>(\"ShowRecentPostsOnDefaultPage\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"show_recent_posts_on_default_page\");\n\n                    b.Property<bool>(\"ShowRelatedPosts\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"boolean\")\n                        .HasDefaultValue(true)\n                        .HasColumnName(\"show_related_posts\");\n\n                    b.Property<bool>(\"ShowTitle\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"show_title\");\n\n                    b.Property<string>(\"SiteName\")\n                        .HasMaxLength(200)\n                        .HasColumnType(\"character varying(200)\")\n                        .HasColumnName(\"site_name\");\n\n                    b.Property<byte>(\"TeaserMode\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"smallint\")\n                        .HasDefaultValue((byte)0)\n                        .HasColumnName(\"teaser_mode\");\n\n                    b.Property<int>(\"TeaserTruncationLength\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"integer\")\n                        .HasDefaultValue(20)\n                        .HasColumnName(\"teaser_truncation_length\");\n\n                    b.Property<byte>(\"TeaserTruncationMode\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"smallint\")\n                        .HasDefaultValue((byte)0)\n                        .HasColumnName(\"teaser_truncation_mode\");\n\n                    b.Property<string>(\"TimeZoneId\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"character varying(100)\")\n                        .HasColumnName(\"time_zone_id\");\n\n                    b.Property<string>(\"Title\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"title\");\n\n                    b.Property<string>(\"TwitterCreator\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"character varying(100)\")\n                        .HasColumnName(\"twitter_creator\");\n\n                    b.Property<string>(\"TwitterPublisher\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"character varying(100)\")\n                        .HasColumnName(\"twitter_publisher\");\n\n                    b.Property<bool>(\"UseDefaultPageAsRootNode\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"use_default_page_as_root_node\");\n\n                    b.Property<string>(\"WebmasterEmail\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"character varying(100)\")\n                        .HasColumnName(\"webmaster_email\");\n\n                    b.HasKey(\"Id\")\n                        .HasName(\"pk_cs_content_project\");\n\n                    b.ToTable(\"cs_content_project\", (string)null);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageCategory\", b =>\n                {\n                    b.Property<string>(\"Value\")\n                        .HasMaxLength(50)\n                        .HasColumnType(\"character varying(50)\")\n                        .HasColumnName(\"value\");\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"character varying(36)\")\n                        .HasColumnName(\"page_entity_id\");\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"character varying(50)\")\n                        .HasColumnName(\"project_id\");\n\n                    b.HasKey(\"Value\", \"PageEntityId\")\n                        .HasName(\"pk_cs_page_category\");\n\n                    b.HasIndex(\"PageEntityId\")\n                        .HasDatabaseName(\"ix_cs_page_category_page_entity_id\");\n\n                    b.HasIndex(\"ProjectId\")\n                        .HasDatabaseName(\"ix_cs_page_category_project_id\");\n\n                    b.HasIndex(\"Value\")\n                        .HasDatabaseName(\"ix_cs_page_category_value\");\n\n                    b.ToTable(\"cs_page_category\", (string)null);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"character varying(36)\")\n                        .HasColumnName(\"id\");\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"author\");\n\n                    b.Property<string>(\"Content\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"content\");\n\n                    b.Property<string>(\"Email\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"character varying(100)\")\n                        .HasColumnName(\"email\");\n\n                    b.Property<string>(\"Ip\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"character varying(100)\")\n                        .HasColumnName(\"ip\");\n\n                    b.Property<bool>(\"IsAdmin\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"is_admin\");\n\n                    b.Property<bool>(\"IsApproved\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"is_approved\");\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"character varying(36)\")\n                        .HasColumnName(\"page_entity_id\");\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"character varying(50)\")\n                        .HasColumnName(\"project_id\");\n\n                    b.Property<DateTime>(\"PubDate\")\n                        .HasColumnType(\"timestamp with time zone\")\n                        .HasColumnName(\"pub_date\");\n\n                    b.Property<string>(\"UserAgent\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"user_agent\");\n\n                    b.Property<string>(\"Website\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"website\");\n\n                    b.HasKey(\"Id\")\n                        .HasName(\"pk_cs_page_comment\");\n\n                    b.HasIndex(\"PageEntityId\")\n                        .HasDatabaseName(\"ix_cs_page_comment_page_entity_id\");\n\n                    b.HasIndex(\"ProjectId\")\n                        .HasDatabaseName(\"ix_cs_page_comment_project_id\");\n\n                    b.ToTable(\"cs_page_comment\", (string)null);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"character varying(36)\")\n                        .HasColumnName(\"id\");\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"author\");\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasMaxLength(500)\n                        .HasColumnType(\"character varying(500)\")\n                        .HasColumnName(\"categories_csv\");\n\n                    b.Property<string>(\"Content\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"content\");\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"character varying(50)\")\n                        .HasDefaultValue(\"html\")\n                        .HasColumnName(\"content_type\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"correlation_key\");\n\n                    b.Property<string>(\"CreatedByUser\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"character varying(100)\")\n                        .HasColumnName(\"created_by_user\");\n\n                    b.Property<DateTime>(\"CreatedUtc\")\n                        .HasColumnType(\"timestamp with time zone\")\n                        .HasColumnName(\"created_utc\");\n\n                    b.Property<bool>(\"DisableEditor\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"disable_editor\");\n\n                    b.Property<string>(\"DraftAuthor\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"draft_author\");\n\n                    b.Property<string>(\"DraftContent\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"draft_content\");\n\n                    b.Property<DateTime?>(\"DraftPubDate\")\n                        .HasColumnType(\"timestamp with time zone\")\n                        .HasColumnName(\"draft_pub_date\");\n\n                    b.Property<string>(\"DraftSerializedModel\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"draft_serialized_model\");\n\n                    b.Property<string>(\"ExternalUrl\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"external_url\");\n\n                    b.Property<bool>(\"IsPublished\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"is_published\");\n\n                    b.Property<DateTime>(\"LastModified\")\n                        .HasColumnType(\"timestamp with time zone\")\n                        .HasColumnName(\"last_modified\");\n\n                    b.Property<string>(\"LastModifiedByUser\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"character varying(100)\")\n                        .HasColumnName(\"last_modified_by_user\");\n\n                    b.Property<string>(\"MenuFilters\")\n                        .HasMaxLength(500)\n                        .HasColumnType(\"character varying(500)\")\n                        .HasColumnName(\"menu_filters\");\n\n                    b.Property<bool>(\"MenuOnly\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"menu_only\");\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasMaxLength(500)\n                        .HasColumnType(\"character varying(500)\")\n                        .HasColumnName(\"meta_description\");\n\n                    b.Property<string>(\"MetaHtml\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"meta_html\");\n\n                    b.Property<string>(\"MetaJson\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"meta_json\");\n\n                    b.Property<int>(\"PageOrder\")\n                        .HasColumnType(\"integer\")\n                        .HasColumnName(\"page_order\");\n\n                    b.Property<string>(\"ParentId\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"character varying(36)\")\n                        .HasColumnName(\"parent_id\");\n\n                    b.Property<string>(\"ParentSlug\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"parent_slug\");\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"character varying(50)\")\n                        .HasColumnName(\"project_id\");\n\n                    b.Property<DateTime?>(\"PubDate\")\n                        .HasColumnType(\"timestamp with time zone\")\n                        .HasColumnName(\"pub_date\");\n\n                    b.Property<string>(\"SerializedModel\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"serialized_model\");\n\n                    b.Property<string>(\"Serializer\")\n                        .HasMaxLength(50)\n                        .HasColumnType(\"character varying(50)\")\n                        .HasColumnName(\"serializer\");\n\n                    b.Property<bool>(\"ShowCategories\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"show_categories\");\n\n                    b.Property<bool>(\"ShowComments\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"show_comments\");\n\n                    b.Property<bool?>(\"ShowCreatedBy\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"show_created_by\");\n\n                    b.Property<bool?>(\"ShowCreatedDate\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"show_created_date\");\n\n                    b.Property<bool>(\"ShowHeading\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"show_heading\");\n\n                    b.Property<bool>(\"ShowLastModified\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"show_last_modified\");\n\n                    b.Property<bool?>(\"ShowLastModifiedBy\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"show_last_modified_by\");\n\n                    b.Property<bool?>(\"ShowLastModifiedDate\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"show_last_modified_date\");\n\n                    b.Property<bool>(\"ShowMenu\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"show_menu\");\n\n                    b.Property<bool>(\"ShowPubDate\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"show_pub_date\");\n\n                    b.Property<string>(\"Slug\")\n                        .IsRequired()\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"slug\");\n\n                    b.Property<string>(\"TemplateKey\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"template_key\");\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"title\");\n\n                    b.Property<string>(\"ViewRoles\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"view_roles\");\n\n                    b.HasKey(\"Id\")\n                        .HasName(\"pk_cs_page\");\n\n                    b.HasIndex(\"CorrelationKey\")\n                        .HasDatabaseName(\"ix_cs_page_correlation_key\");\n\n                    b.HasIndex(\"ParentId\")\n                        .HasDatabaseName(\"ix_cs_page_parent_id\");\n\n                    b.HasIndex(\"ProjectId\")\n                        .HasDatabaseName(\"ix_cs_page_project_id\");\n\n                    b.ToTable(\"cs_page\", (string)null);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageResourceEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"character varying(36)\")\n                        .HasColumnName(\"id\");\n\n                    b.Property<string>(\"Environment\")\n                        .IsRequired()\n                        .HasMaxLength(15)\n                        .HasColumnType(\"character varying(15)\")\n                        .HasColumnName(\"environment\");\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"character varying(36)\")\n                        .HasColumnName(\"page_entity_id\");\n\n                    b.Property<int>(\"Sort\")\n                        .HasColumnType(\"integer\")\n                        .HasColumnName(\"sort\");\n\n                    b.Property<string>(\"Type\")\n                        .IsRequired()\n                        .HasMaxLength(10)\n                        .HasColumnType(\"character varying(10)\")\n                        .HasColumnName(\"type\");\n\n                    b.Property<string>(\"Url\")\n                        .IsRequired()\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"url\");\n\n                    b.HasKey(\"Id\")\n                        .HasName(\"pk_cs_page_resource\");\n\n                    b.HasIndex(\"PageEntityId\")\n                        .HasDatabaseName(\"ix_cs_page_resource_page_entity_id\");\n\n                    b.ToTable(\"cs_page_resource\", (string)null);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostCategory\", b =>\n                {\n                    b.Property<string>(\"Value\")\n                        .HasMaxLength(50)\n                        .HasColumnType(\"character varying(50)\")\n                        .HasColumnName(\"value\");\n\n                    b.Property<string>(\"PostEntityId\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"character varying(36)\")\n                        .HasColumnName(\"post_entity_id\");\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"character varying(50)\")\n                        .HasColumnName(\"project_id\");\n\n                    b.HasKey(\"Value\", \"PostEntityId\")\n                        .HasName(\"pk_cs_post_category\");\n\n                    b.HasIndex(\"PostEntityId\")\n                        .HasDatabaseName(\"ix_cs_post_category_post_entity_id\");\n\n                    b.HasIndex(\"ProjectId\")\n                        .HasDatabaseName(\"ix_cs_post_category_project_id\");\n\n                    b.HasIndex(\"Value\")\n                        .HasDatabaseName(\"ix_cs_post_category_value\");\n\n                    b.ToTable(\"cs_post_category\", (string)null);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"character varying(36)\")\n                        .HasColumnName(\"id\");\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"author\");\n\n                    b.Property<string>(\"Content\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"content\");\n\n                    b.Property<string>(\"Email\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"character varying(100)\")\n                        .HasColumnName(\"email\");\n\n                    b.Property<string>(\"Ip\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"character varying(100)\")\n                        .HasColumnName(\"ip\");\n\n                    b.Property<bool>(\"IsAdmin\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"is_admin\");\n\n                    b.Property<bool>(\"IsApproved\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"is_approved\");\n\n                    b.Property<string>(\"PostEntityId\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"character varying(36)\")\n                        .HasColumnName(\"post_entity_id\");\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"character varying(50)\")\n                        .HasColumnName(\"project_id\");\n\n                    b.Property<DateTime>(\"PubDate\")\n                        .HasColumnType(\"timestamp with time zone\")\n                        .HasColumnName(\"pub_date\");\n\n                    b.Property<string>(\"UserAgent\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"user_agent\");\n\n                    b.Property<string>(\"Website\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"website\");\n\n                    b.HasKey(\"Id\")\n                        .HasName(\"pk_cs_post_comment\");\n\n                    b.HasIndex(\"PostEntityId\")\n                        .HasDatabaseName(\"ix_cs_post_comment_post_entity_id\");\n\n                    b.HasIndex(\"ProjectId\")\n                        .HasDatabaseName(\"ix_cs_post_comment_project_id\");\n\n                    b.ToTable(\"cs_post_comment\", (string)null);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"character varying(36)\")\n                        .HasColumnName(\"id\");\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"author\");\n\n                    b.Property<string>(\"AutoTeaser\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"auto_teaser\");\n\n                    b.Property<string>(\"BlogId\")\n                        .IsRequired()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"character varying(50)\")\n                        .HasColumnName(\"blog_id\");\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasMaxLength(500)\n                        .HasColumnType(\"character varying(500)\")\n                        .HasColumnName(\"categories_csv\");\n\n                    b.Property<string>(\"Content\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"content\");\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"character varying(50)\")\n                        .HasDefaultValue(\"html\")\n                        .HasColumnName(\"content_type\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"correlation_key\");\n\n                    b.Property<string>(\"CreatedByUser\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"character varying(100)\")\n                        .HasColumnName(\"created_by_user\");\n\n                    b.Property<DateTime>(\"CreatedUtc\")\n                        .HasColumnType(\"timestamp with time zone\")\n                        .HasColumnName(\"created_utc\");\n\n                    b.Property<string>(\"DraftAuthor\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"draft_author\");\n\n                    b.Property<string>(\"DraftContent\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"draft_content\");\n\n                    b.Property<DateTime?>(\"DraftPubDate\")\n                        .HasColumnType(\"timestamp with time zone\")\n                        .HasColumnName(\"draft_pub_date\");\n\n                    b.Property<string>(\"DraftSerializedModel\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"draft_serialized_model\");\n\n                    b.Property<string>(\"ImageUrl\")\n                        .HasMaxLength(250)\n                        .HasColumnType(\"character varying(250)\")\n                        .HasColumnName(\"image_url\");\n\n                    b.Property<bool>(\"IsFeatured\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"is_featured\");\n\n                    b.Property<bool>(\"IsPublished\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"is_published\");\n\n                    b.Property<DateTime>(\"LastModified\")\n                        .HasColumnType(\"timestamp with time zone\")\n                        .HasColumnName(\"last_modified\");\n\n                    b.Property<string>(\"LastModifiedByUser\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"character varying(100)\")\n                        .HasColumnName(\"last_modified_by_user\");\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasMaxLength(500)\n                        .HasColumnType(\"character varying(500)\")\n                        .HasColumnName(\"meta_description\");\n\n                    b.Property<string>(\"MetaHtml\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"meta_html\");\n\n                    b.Property<string>(\"MetaJson\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"meta_json\");\n\n                    b.Property<DateTime?>(\"PubDate\")\n                        .HasColumnType(\"timestamp with time zone\")\n                        .HasColumnName(\"pub_date\");\n\n                    b.Property<string>(\"SerializedModel\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"serialized_model\");\n\n                    b.Property<string>(\"Serializer\")\n                        .HasMaxLength(50)\n                        .HasColumnType(\"character varying(50)\")\n                        .HasColumnName(\"serializer\");\n\n                    b.Property<bool>(\"ShowComments\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"show_comments\");\n\n                    b.Property<string>(\"Slug\")\n                        .IsRequired()\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"slug\");\n\n                    b.Property<bool>(\"SuppressTeaser\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"suppress_teaser\");\n\n                    b.Property<string>(\"TeaserOverride\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"teaser_override\");\n\n                    b.Property<string>(\"TemplateKey\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"template_key\");\n\n                    b.Property<string>(\"ThumbnailUrl\")\n                        .HasMaxLength(250)\n                        .HasColumnType(\"character varying(250)\")\n                        .HasColumnName(\"thumbnail_url\");\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"title\");\n\n                    b.HasKey(\"Id\")\n                        .HasName(\"pk_cs_post\");\n\n                    b.HasIndex(\"BlogId\")\n                        .HasDatabaseName(\"ix_cs_post_blog_id\");\n\n                    b.HasIndex(\"CorrelationKey\")\n                        .HasDatabaseName(\"ix_cs_post_correlation_key\");\n\n                    b.HasIndex(\"Slug\")\n                        .HasDatabaseName(\"ix_cs_post_slug\");\n\n                    b.ToTable(\"cs_post\", (string)null);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\", null)\n                        .WithMany(\"PageComments\")\n                        .HasForeignKey(\"PageEntityId\")\n                        .OnDelete(DeleteBehavior.Cascade)\n                        .HasConstraintName(\"fk_cs_page_comment_cs_page_page_entity_id\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageResourceEntity\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\", null)\n                        .WithMany(\"PageResources\")\n                        .HasForeignKey(\"PageEntityId\")\n                        .OnDelete(DeleteBehavior.Cascade)\n                        .HasConstraintName(\"fk_cs_page_resource_cs_page_page_entity_id\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\", null)\n                        .WithMany(\"PostComments\")\n                        .HasForeignKey(\"PostEntityId\")\n                        .HasConstraintName(\"fk_cs_post_comment_cs_post_post_entity_id\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\", b =>\n                {\n                    b.Navigation(\"PageComments\");\n\n                    b.Navigation(\"PageResources\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\", b =>\n                {\n                    b.Navigation(\"PostComments\");\n                });\n#pragma warning restore 612, 618\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.PostgreSql/Migrations/20241108094644_simplecontent-20241108.cs",
    "content": "﻿using Microsoft.EntityFrameworkCore.Migrations;\n\n#nullable disable\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.PostgreSql.Migrations\n{\n    /// <inheritdoc />\n    public partial class simplecontent20241108 : Migration\n    {\n        /// <inheritdoc />\n        protected override void Up(MigrationBuilder migrationBuilder)\n        {\n            migrationBuilder.AddColumn<bool>(\n                name: \"show_created_by\",\n                table: \"cs_page\",\n                type: \"boolean\",\n                nullable: true);\n\n            migrationBuilder.AddColumn<bool>(\n                name: \"show_created_date\",\n                table: \"cs_page\",\n                type: \"boolean\",\n                nullable: true);\n\n            migrationBuilder.AddColumn<bool>(\n                name: \"show_last_modified_by\",\n                table: \"cs_page\",\n                type: \"boolean\",\n                nullable: true);\n\n            migrationBuilder.AddColumn<bool>(\n                name: \"show_last_modified_date\",\n                table: \"cs_page\",\n                type: \"boolean\",\n                nullable: true);\n\n            migrationBuilder.AddColumn<bool>(\n                name: \"show_created_by\",\n                table: \"cs_content_project\",\n                type: \"boolean\",\n                nullable: false,\n                defaultValue: false);\n\n            migrationBuilder.AddColumn<bool>(\n                name: \"show_created_date\",\n                table: \"cs_content_project\",\n                type: \"boolean\",\n                nullable: false,\n                defaultValue: false);\n\n            migrationBuilder.AddColumn<bool>(\n                name: \"show_last_modified_by\",\n                table: \"cs_content_project\",\n                type: \"boolean\",\n                nullable: false,\n                defaultValue: false);\n\n            migrationBuilder.AddColumn<bool>(\n                name: \"show_last_modified_date\",\n                table: \"cs_content_project\",\n                type: \"boolean\",\n                nullable: false,\n                defaultValue: false);\n\n            migrationBuilder.AddColumn<bool>(\n                name: \"show_created_by\",\n                table: \"cs_content_history\",\n                type: \"boolean\",\n                nullable: true);\n\n            migrationBuilder.AddColumn<bool>(\n                name: \"show_created_date\",\n                table: \"cs_content_history\",\n                type: \"boolean\",\n                nullable: true);\n\n            migrationBuilder.AddColumn<bool>(\n                name: \"show_last_modified_by\",\n                table: \"cs_content_history\",\n                type: \"boolean\",\n                nullable: true);\n\n            migrationBuilder.AddColumn<bool>(\n                name: \"show_last_modified_date\",\n                table: \"cs_content_history\",\n                type: \"boolean\",\n                nullable: true);\n        }\n\n        /// <inheritdoc />\n        protected override void Down(MigrationBuilder migrationBuilder)\n        {\n            migrationBuilder.DropColumn(\n                name: \"show_created_by\",\n                table: \"cs_page\");\n\n            migrationBuilder.DropColumn(\n                name: \"show_created_date\",\n                table: \"cs_page\");\n\n            migrationBuilder.DropColumn(\n                name: \"show_last_modified_by\",\n                table: \"cs_page\");\n\n            migrationBuilder.DropColumn(\n                name: \"show_last_modified_date\",\n                table: \"cs_page\");\n\n            migrationBuilder.DropColumn(\n                name: \"show_created_by\",\n                table: \"cs_content_project\");\n\n            migrationBuilder.DropColumn(\n                name: \"show_created_date\",\n                table: \"cs_content_project\");\n\n            migrationBuilder.DropColumn(\n                name: \"show_last_modified_by\",\n                table: \"cs_content_project\");\n\n            migrationBuilder.DropColumn(\n                name: \"show_last_modified_date\",\n                table: \"cs_content_project\");\n\n            migrationBuilder.DropColumn(\n                name: \"show_created_by\",\n                table: \"cs_content_history\");\n\n            migrationBuilder.DropColumn(\n                name: \"show_created_date\",\n                table: \"cs_content_history\");\n\n            migrationBuilder.DropColumn(\n                name: \"show_last_modified_by\",\n                table: \"cs_content_history\");\n\n            migrationBuilder.DropColumn(\n                name: \"show_last_modified_date\",\n                table: \"cs_content_history\");\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.PostgreSql/Migrations/20250423094338_user-script-20250423.Designer.cs",
    "content": "﻿// <auto-generated />\nusing System;\nusing Microsoft.EntityFrameworkCore;\nusing Microsoft.EntityFrameworkCore.Infrastructure;\nusing Microsoft.EntityFrameworkCore.Migrations;\nusing Microsoft.EntityFrameworkCore.Storage.ValueConversion;\nusing Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;\nusing cloudscribe.SimpleContent.Storage.EFCore.PostgreSql;\n\n#nullable disable\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.PostgreSql.Migrations\n{\n    [DbContext(typeof(SimpleContentDbContext))]\n    [Migration(\"20250423094338_user-script-20250423\")]\n    partial class userscript20250423\n    {\n        /// <inheritdoc />\n        protected override void BuildTargetModel(ModelBuilder modelBuilder)\n        {\n#pragma warning disable 612, 618\n            modelBuilder\n                .HasAnnotation(\"ProductVersion\", \"8.0.0\")\n                .HasAnnotation(\"Relational:MaxIdentifierLength\", 63);\n\n            NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder);\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Models.ContentHistory\", b =>\n                {\n                    b.Property<Guid>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36)\n                        .HasColumnType(\"uuid\")\n                        .HasColumnName(\"id\");\n\n                    b.Property<string>(\"ArchivedBy\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"archived_by\");\n\n                    b.Property<DateTime>(\"ArchivedUtc\")\n                        .HasColumnType(\"timestamp with time zone\")\n                        .HasColumnName(\"archived_utc\");\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"author\");\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"categories_csv\");\n\n                    b.Property<string>(\"Content\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"content\");\n\n                    b.Property<string>(\"ContentId\")\n                        .IsRequired()\n                        .HasMaxLength(36)\n                        .HasColumnType(\"character varying(36)\")\n                        .HasColumnName(\"content_id\");\n\n                    b.Property<string>(\"ContentSource\")\n                        .IsRequired()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"character varying(50)\")\n                        .HasColumnName(\"content_source\");\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"character varying(50)\")\n                        .HasDefaultValue(\"html\")\n                        .HasColumnName(\"content_type\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"correlation_key\");\n\n                    b.Property<string>(\"CreatedByUser\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"character varying(100)\")\n                        .HasColumnName(\"created_by_user\");\n\n                    b.Property<DateTime>(\"CreatedUtc\")\n                        .HasColumnType(\"timestamp with time zone\")\n                        .HasColumnName(\"created_utc\");\n\n                    b.Property<string>(\"DraftAuthor\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"draft_author\");\n\n                    b.Property<string>(\"DraftContent\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"draft_content\");\n\n                    b.Property<DateTime?>(\"DraftPubDate\")\n                        .HasColumnType(\"timestamp with time zone\")\n                        .HasColumnName(\"draft_pub_date\");\n\n                    b.Property<string>(\"DraftSerializedModel\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"draft_serialized_model\");\n\n                    b.Property<bool>(\"IsDraftHx\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"is_draft_hx\");\n\n                    b.Property<bool>(\"IsPublished\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"is_published\");\n\n                    b.Property<DateTime>(\"LastModified\")\n                        .HasColumnType(\"timestamp with time zone\")\n                        .HasColumnName(\"last_modified\");\n\n                    b.Property<string>(\"LastModifiedByUser\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"character varying(100)\")\n                        .HasColumnName(\"last_modified_by_user\");\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"meta_description\");\n\n                    b.Property<string>(\"MetaHtml\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"meta_html\");\n\n                    b.Property<string>(\"MetaJson\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"meta_json\");\n\n                    b.Property<int>(\"PageOrder\")\n                        .HasColumnType(\"integer\")\n                        .HasColumnName(\"page_order\");\n\n                    b.Property<string>(\"ParentId\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"parent_id\");\n\n                    b.Property<string>(\"ParentSlug\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"parent_slug\");\n\n                    b.Property<string>(\"ProjectId\")\n                        .HasMaxLength(50)\n                        .HasColumnType(\"character varying(50)\")\n                        .HasColumnName(\"project_id\");\n\n                    b.Property<DateTime?>(\"PubDate\")\n                        .HasColumnType(\"timestamp with time zone\")\n                        .HasColumnName(\"pub_date\");\n\n                    b.Property<string>(\"SerializedModel\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"serialized_model\");\n\n                    b.Property<string>(\"Serializer\")\n                        .HasMaxLength(50)\n                        .HasColumnType(\"character varying(50)\")\n                        .HasColumnName(\"serializer\");\n\n                    b.Property<bool?>(\"ShowCreatedBy\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"show_created_by\");\n\n                    b.Property<bool?>(\"ShowCreatedDate\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"show_created_date\");\n\n                    b.Property<bool?>(\"ShowLastModifiedBy\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"show_last_modified_by\");\n\n                    b.Property<bool?>(\"ShowLastModifiedDate\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"show_last_modified_date\");\n\n                    b.Property<string>(\"Slug\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"slug\");\n\n                    b.Property<string>(\"TeaserOverride\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"teaser_override\");\n\n                    b.Property<string>(\"TemplateKey\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"template_key\");\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"title\");\n\n                    b.Property<string>(\"ViewRoles\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"view_roles\");\n\n                    b.Property<bool>(\"WasDeleted\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"was_deleted\");\n\n                    b.HasKey(\"Id\")\n                        .HasName(\"pk_cs_content_history\");\n\n                    b.HasIndex(\"ContentId\")\n                        .HasDatabaseName(\"ix_cs_content_history_content_id\");\n\n                    b.HasIndex(\"ContentSource\")\n                        .HasDatabaseName(\"ix_cs_content_history_content_source\");\n\n                    b.HasIndex(\"CorrelationKey\")\n                        .HasDatabaseName(\"ix_cs_content_history_correlation_key\");\n\n                    b.HasIndex(\"CreatedByUser\")\n                        .HasDatabaseName(\"ix_cs_content_history_created_by_user\");\n\n                    b.HasIndex(\"LastModifiedByUser\")\n                        .HasDatabaseName(\"ix_cs_content_history_last_modified_by_user\");\n\n                    b.HasIndex(\"Title\")\n                        .HasDatabaseName(\"ix_cs_content_history_title\");\n\n                    b.ToTable(\"cs_content_history\", (string)null);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Models.ProjectSettings\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .HasMaxLength(50)\n                        .HasColumnType(\"character varying(50)\")\n                        .HasColumnName(\"id\");\n\n                    b.Property<string>(\"AboutContent\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"about_content\");\n\n                    b.Property<string>(\"AboutHeading\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"about_heading\");\n\n                    b.Property<bool>(\"AddBlogToPagesTree\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"add_blog_to_pages_tree\");\n\n                    b.Property<bool>(\"BlogMenuLinksToNewestPost\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"blog_menu_links_to_newest_post\");\n\n                    b.Property<string>(\"BlogPageNavComponentVisibility\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"blog_page_nav_component_visibility\");\n\n                    b.Property<int>(\"BlogPagePosition\")\n                        .HasColumnType(\"integer\")\n                        .HasColumnName(\"blog_page_position\");\n\n                    b.Property<string>(\"BlogPageText\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"blog_page_text\");\n\n                    b.Property<string>(\"CdnUrl\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"cdn_url\");\n\n                    b.Property<string>(\"ChannelCategoriesCsv\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"channel_categories_csv\");\n\n                    b.Property<string>(\"ChannelRating\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"character varying(100)\")\n                        .HasColumnName(\"channel_rating\");\n\n                    b.Property<int>(\"ChannelTimeToLive\")\n                        .HasColumnType(\"integer\")\n                        .HasColumnName(\"channel_time_to_live\");\n\n                    b.Property<string>(\"CommentNotificationEmail\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"character varying(100)\")\n                        .HasColumnName(\"comment_notification_email\");\n\n                    b.Property<string>(\"CopyrightNotice\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"copyright_notice\");\n\n                    b.Property<int>(\"DaysToComment\")\n                        .HasColumnType(\"integer\")\n                        .HasColumnName(\"days_to_comment\");\n\n                    b.Property<string>(\"DefaultContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"character varying(50)\")\n                        .HasDefaultValue(\"html\")\n                        .HasColumnName(\"default_content_type\");\n\n                    b.Property<int>(\"DefaultFeedItems\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"integer\")\n                        .HasDefaultValue(20)\n                        .HasColumnName(\"default_feed_items\");\n\n                    b.Property<string>(\"DefaultPageSlug\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"default_page_slug\");\n\n                    b.Property<string>(\"Description\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"description\");\n\n                    b.Property<string>(\"DisqusShortName\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"character varying(100)\")\n                        .HasColumnName(\"disqus_short_name\");\n\n                    b.Property<string>(\"FacebookAppId\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"character varying(100)\")\n                        .HasColumnName(\"facebook_app_id\");\n\n                    b.Property<string>(\"Image\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"image\");\n\n                    b.Property<bool>(\"IncludePubDateInPostUrls\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"include_pub_date_in_post_urls\");\n\n                    b.Property<string>(\"LanguageCode\")\n                        .HasMaxLength(10)\n                        .HasColumnType(\"character varying(10)\")\n                        .HasColumnName(\"language_code\");\n\n                    b.Property<string>(\"LocalMediaVirtualPath\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"local_media_virtual_path\");\n\n                    b.Property<string>(\"ManagingEditorEmail\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"character varying(100)\")\n                        .HasColumnName(\"managing_editor_email\");\n\n                    b.Property<int>(\"MaxFeedItems\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"integer\")\n                        .HasDefaultValue(1000)\n                        .HasColumnName(\"max_feed_items\");\n\n                    b.Property<bool>(\"ModerateComments\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"moderate_comments\");\n\n                    b.Property<int>(\"PostsPerPage\")\n                        .HasColumnType(\"integer\")\n                        .HasColumnName(\"posts_per_page\");\n\n                    b.Property<string>(\"PubDateFormat\")\n                        .HasMaxLength(75)\n                        .HasColumnType(\"character varying(75)\")\n                        .HasColumnName(\"pub_date_format\");\n\n                    b.Property<string>(\"Publisher\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"publisher\");\n\n                    b.Property<string>(\"PublisherEntityType\")\n                        .HasMaxLength(50)\n                        .HasColumnType(\"character varying(50)\")\n                        .HasColumnName(\"publisher_entity_type\");\n\n                    b.Property<string>(\"PublisherLogoHeight\")\n                        .HasMaxLength(20)\n                        .HasColumnType(\"character varying(20)\")\n                        .HasColumnName(\"publisher_logo_height\");\n\n                    b.Property<string>(\"PublisherLogoUrl\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"publisher_logo_url\");\n\n                    b.Property<string>(\"PublisherLogoWidth\")\n                        .HasMaxLength(20)\n                        .HasColumnType(\"character varying(20)\")\n                        .HasColumnName(\"publisher_logo_width\");\n\n                    b.Property<string>(\"RecaptchaPrivateKey\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"recaptcha_private_key\");\n\n                    b.Property<string>(\"RecaptchaPublicKey\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"recaptcha_public_key\");\n\n                    b.Property<string>(\"RemoteFeedProcessorUseAgentFragment\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"remote_feed_processor_use_agent_fragment\");\n\n                    b.Property<string>(\"RemoteFeedUrl\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"remote_feed_url\");\n\n                    b.Property<bool>(\"ShowAboutBox\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"boolean\")\n                        .HasDefaultValue(true)\n                        .HasColumnName(\"show_about_box\");\n\n                    b.Property<bool>(\"ShowArchivedPosts\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"boolean\")\n                        .HasDefaultValue(true)\n                        .HasColumnName(\"show_archived_posts\");\n\n                    b.Property<bool>(\"ShowBlogCategories\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"boolean\")\n                        .HasDefaultValue(true)\n                        .HasColumnName(\"show_blog_categories\");\n\n                    b.Property<bool>(\"ShowCreatedBy\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"show_created_by\");\n\n                    b.Property<bool>(\"ShowCreatedDate\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"show_created_date\");\n\n                    b.Property<bool>(\"ShowFeaturedPostsOnDefaultPage\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"show_featured_posts_on_default_page\");\n\n                    b.Property<bool>(\"ShowLastModifiedBy\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"show_last_modified_by\");\n\n                    b.Property<bool>(\"ShowLastModifiedDate\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"show_last_modified_date\");\n\n                    b.Property<bool>(\"ShowRecentPostsOnDefaultPage\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"show_recent_posts_on_default_page\");\n\n                    b.Property<bool>(\"ShowRelatedPosts\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"boolean\")\n                        .HasDefaultValue(true)\n                        .HasColumnName(\"show_related_posts\");\n\n                    b.Property<bool>(\"ShowTitle\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"show_title\");\n\n                    b.Property<string>(\"SiteName\")\n                        .HasMaxLength(200)\n                        .HasColumnType(\"character varying(200)\")\n                        .HasColumnName(\"site_name\");\n\n                    b.Property<byte>(\"TeaserMode\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"smallint\")\n                        .HasDefaultValue((byte)0)\n                        .HasColumnName(\"teaser_mode\");\n\n                    b.Property<int>(\"TeaserTruncationLength\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"integer\")\n                        .HasDefaultValue(20)\n                        .HasColumnName(\"teaser_truncation_length\");\n\n                    b.Property<byte>(\"TeaserTruncationMode\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"smallint\")\n                        .HasDefaultValue((byte)0)\n                        .HasColumnName(\"teaser_truncation_mode\");\n\n                    b.Property<string>(\"TimeZoneId\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"character varying(100)\")\n                        .HasColumnName(\"time_zone_id\");\n\n                    b.Property<string>(\"Title\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"title\");\n\n                    b.Property<string>(\"TwitterCreator\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"character varying(100)\")\n                        .HasColumnName(\"twitter_creator\");\n\n                    b.Property<string>(\"TwitterPublisher\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"character varying(100)\")\n                        .HasColumnName(\"twitter_publisher\");\n\n                    b.Property<bool>(\"UseDefaultPageAsRootNode\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"use_default_page_as_root_node\");\n\n                    b.Property<string>(\"WebmasterEmail\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"character varying(100)\")\n                        .HasColumnName(\"webmaster_email\");\n\n                    b.HasKey(\"Id\")\n                        .HasName(\"pk_cs_content_project\");\n\n                    b.ToTable(\"cs_content_project\", (string)null);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageCategory\", b =>\n                {\n                    b.Property<string>(\"Value\")\n                        .HasMaxLength(50)\n                        .HasColumnType(\"character varying(50)\")\n                        .HasColumnName(\"value\");\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"character varying(36)\")\n                        .HasColumnName(\"page_entity_id\");\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"character varying(50)\")\n                        .HasColumnName(\"project_id\");\n\n                    b.HasKey(\"Value\", \"PageEntityId\")\n                        .HasName(\"pk_cs_page_category\");\n\n                    b.HasIndex(\"PageEntityId\")\n                        .HasDatabaseName(\"ix_cs_page_category_page_entity_id\");\n\n                    b.HasIndex(\"ProjectId\")\n                        .HasDatabaseName(\"ix_cs_page_category_project_id\");\n\n                    b.HasIndex(\"Value\")\n                        .HasDatabaseName(\"ix_cs_page_category_value\");\n\n                    b.ToTable(\"cs_page_category\", (string)null);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"character varying(36)\")\n                        .HasColumnName(\"id\");\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"author\");\n\n                    b.Property<string>(\"Content\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"content\");\n\n                    b.Property<string>(\"Email\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"character varying(100)\")\n                        .HasColumnName(\"email\");\n\n                    b.Property<string>(\"Ip\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"character varying(100)\")\n                        .HasColumnName(\"ip\");\n\n                    b.Property<bool>(\"IsAdmin\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"is_admin\");\n\n                    b.Property<bool>(\"IsApproved\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"is_approved\");\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"character varying(36)\")\n                        .HasColumnName(\"page_entity_id\");\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"character varying(50)\")\n                        .HasColumnName(\"project_id\");\n\n                    b.Property<DateTime>(\"PubDate\")\n                        .HasColumnType(\"timestamp with time zone\")\n                        .HasColumnName(\"pub_date\");\n\n                    b.Property<string>(\"UserAgent\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"user_agent\");\n\n                    b.Property<string>(\"Website\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"website\");\n\n                    b.HasKey(\"Id\")\n                        .HasName(\"pk_cs_page_comment\");\n\n                    b.HasIndex(\"PageEntityId\")\n                        .HasDatabaseName(\"ix_cs_page_comment_page_entity_id\");\n\n                    b.HasIndex(\"ProjectId\")\n                        .HasDatabaseName(\"ix_cs_page_comment_project_id\");\n\n                    b.ToTable(\"cs_page_comment\", (string)null);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"character varying(36)\")\n                        .HasColumnName(\"id\");\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"author\");\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasMaxLength(500)\n                        .HasColumnType(\"character varying(500)\")\n                        .HasColumnName(\"categories_csv\");\n\n                    b.Property<string>(\"Content\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"content\");\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"character varying(50)\")\n                        .HasDefaultValue(\"html\")\n                        .HasColumnName(\"content_type\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"correlation_key\");\n\n                    b.Property<string>(\"CreatedByUser\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"character varying(100)\")\n                        .HasColumnName(\"created_by_user\");\n\n                    b.Property<DateTime>(\"CreatedUtc\")\n                        .HasColumnType(\"timestamp with time zone\")\n                        .HasColumnName(\"created_utc\");\n\n                    b.Property<bool>(\"DisableEditor\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"disable_editor\");\n\n                    b.Property<string>(\"DraftAuthor\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"draft_author\");\n\n                    b.Property<string>(\"DraftContent\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"draft_content\");\n\n                    b.Property<DateTime?>(\"DraftPubDate\")\n                        .HasColumnType(\"timestamp with time zone\")\n                        .HasColumnName(\"draft_pub_date\");\n\n                    b.Property<string>(\"DraftSerializedModel\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"draft_serialized_model\");\n\n                    b.Property<string>(\"ExternalUrl\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"external_url\");\n\n                    b.Property<bool>(\"IsPublished\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"is_published\");\n\n                    b.Property<DateTime>(\"LastModified\")\n                        .HasColumnType(\"timestamp with time zone\")\n                        .HasColumnName(\"last_modified\");\n\n                    b.Property<string>(\"LastModifiedByUser\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"character varying(100)\")\n                        .HasColumnName(\"last_modified_by_user\");\n\n                    b.Property<string>(\"MenuFilters\")\n                        .HasMaxLength(500)\n                        .HasColumnType(\"character varying(500)\")\n                        .HasColumnName(\"menu_filters\");\n\n                    b.Property<bool>(\"MenuOnly\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"menu_only\");\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasMaxLength(500)\n                        .HasColumnType(\"character varying(500)\")\n                        .HasColumnName(\"meta_description\");\n\n                    b.Property<string>(\"MetaHtml\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"meta_html\");\n\n                    b.Property<string>(\"MetaJson\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"meta_json\");\n\n                    b.Property<int>(\"PageOrder\")\n                        .HasColumnType(\"integer\")\n                        .HasColumnName(\"page_order\");\n\n                    b.Property<string>(\"ParentId\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"character varying(36)\")\n                        .HasColumnName(\"parent_id\");\n\n                    b.Property<string>(\"ParentSlug\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"parent_slug\");\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"character varying(50)\")\n                        .HasColumnName(\"project_id\");\n\n                    b.Property<DateTime?>(\"PubDate\")\n                        .HasColumnType(\"timestamp with time zone\")\n                        .HasColumnName(\"pub_date\");\n\n                    b.Property<string>(\"Script\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"script\");\n\n                    b.Property<string>(\"SerializedModel\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"serialized_model\");\n\n                    b.Property<string>(\"Serializer\")\n                        .HasMaxLength(50)\n                        .HasColumnType(\"character varying(50)\")\n                        .HasColumnName(\"serializer\");\n\n                    b.Property<bool>(\"ShowCategories\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"show_categories\");\n\n                    b.Property<bool>(\"ShowComments\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"show_comments\");\n\n                    b.Property<bool?>(\"ShowCreatedBy\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"show_created_by\");\n\n                    b.Property<bool?>(\"ShowCreatedDate\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"show_created_date\");\n\n                    b.Property<bool>(\"ShowHeading\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"show_heading\");\n\n                    b.Property<bool>(\"ShowLastModified\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"show_last_modified\");\n\n                    b.Property<bool?>(\"ShowLastModifiedBy\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"show_last_modified_by\");\n\n                    b.Property<bool?>(\"ShowLastModifiedDate\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"show_last_modified_date\");\n\n                    b.Property<bool>(\"ShowMenu\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"show_menu\");\n\n                    b.Property<bool>(\"ShowPubDate\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"show_pub_date\");\n\n                    b.Property<string>(\"Slug\")\n                        .IsRequired()\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"slug\");\n\n                    b.Property<string>(\"TemplateKey\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"template_key\");\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"title\");\n\n                    b.Property<string>(\"ViewRoles\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"view_roles\");\n\n                    b.HasKey(\"Id\")\n                        .HasName(\"pk_cs_page\");\n\n                    b.HasIndex(\"CorrelationKey\")\n                        .HasDatabaseName(\"ix_cs_page_correlation_key\");\n\n                    b.HasIndex(\"ParentId\")\n                        .HasDatabaseName(\"ix_cs_page_parent_id\");\n\n                    b.HasIndex(\"ProjectId\")\n                        .HasDatabaseName(\"ix_cs_page_project_id\");\n\n                    b.ToTable(\"cs_page\", (string)null);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageResourceEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"character varying(36)\")\n                        .HasColumnName(\"id\");\n\n                    b.Property<string>(\"Environment\")\n                        .IsRequired()\n                        .HasMaxLength(15)\n                        .HasColumnType(\"character varying(15)\")\n                        .HasColumnName(\"environment\");\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"character varying(36)\")\n                        .HasColumnName(\"page_entity_id\");\n\n                    b.Property<string>(\"Script\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"script\");\n\n                    b.Property<int>(\"Sort\")\n                        .HasColumnType(\"integer\")\n                        .HasColumnName(\"sort\");\n\n                    b.Property<string>(\"Type\")\n                        .IsRequired()\n                        .HasMaxLength(10)\n                        .HasColumnType(\"character varying(10)\")\n                        .HasColumnName(\"type\");\n\n                    b.Property<string>(\"Url\")\n                        .IsRequired()\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"url\");\n\n                    b.HasKey(\"Id\")\n                        .HasName(\"pk_cs_page_resource\");\n\n                    b.HasIndex(\"PageEntityId\")\n                        .HasDatabaseName(\"ix_cs_page_resource_page_entity_id\");\n\n                    b.ToTable(\"cs_page_resource\", (string)null);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostCategory\", b =>\n                {\n                    b.Property<string>(\"Value\")\n                        .HasMaxLength(50)\n                        .HasColumnType(\"character varying(50)\")\n                        .HasColumnName(\"value\");\n\n                    b.Property<string>(\"PostEntityId\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"character varying(36)\")\n                        .HasColumnName(\"post_entity_id\");\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"character varying(50)\")\n                        .HasColumnName(\"project_id\");\n\n                    b.HasKey(\"Value\", \"PostEntityId\")\n                        .HasName(\"pk_cs_post_category\");\n\n                    b.HasIndex(\"PostEntityId\")\n                        .HasDatabaseName(\"ix_cs_post_category_post_entity_id\");\n\n                    b.HasIndex(\"ProjectId\")\n                        .HasDatabaseName(\"ix_cs_post_category_project_id\");\n\n                    b.HasIndex(\"Value\")\n                        .HasDatabaseName(\"ix_cs_post_category_value\");\n\n                    b.ToTable(\"cs_post_category\", (string)null);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"character varying(36)\")\n                        .HasColumnName(\"id\");\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"author\");\n\n                    b.Property<string>(\"Content\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"content\");\n\n                    b.Property<string>(\"Email\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"character varying(100)\")\n                        .HasColumnName(\"email\");\n\n                    b.Property<string>(\"Ip\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"character varying(100)\")\n                        .HasColumnName(\"ip\");\n\n                    b.Property<bool>(\"IsAdmin\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"is_admin\");\n\n                    b.Property<bool>(\"IsApproved\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"is_approved\");\n\n                    b.Property<string>(\"PostEntityId\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"character varying(36)\")\n                        .HasColumnName(\"post_entity_id\");\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"character varying(50)\")\n                        .HasColumnName(\"project_id\");\n\n                    b.Property<DateTime>(\"PubDate\")\n                        .HasColumnType(\"timestamp with time zone\")\n                        .HasColumnName(\"pub_date\");\n\n                    b.Property<string>(\"UserAgent\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"user_agent\");\n\n                    b.Property<string>(\"Website\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"website\");\n\n                    b.HasKey(\"Id\")\n                        .HasName(\"pk_cs_post_comment\");\n\n                    b.HasIndex(\"PostEntityId\")\n                        .HasDatabaseName(\"ix_cs_post_comment_post_entity_id\");\n\n                    b.HasIndex(\"ProjectId\")\n                        .HasDatabaseName(\"ix_cs_post_comment_project_id\");\n\n                    b.ToTable(\"cs_post_comment\", (string)null);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"character varying(36)\")\n                        .HasColumnName(\"id\");\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"author\");\n\n                    b.Property<string>(\"AutoTeaser\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"auto_teaser\");\n\n                    b.Property<string>(\"BlogId\")\n                        .IsRequired()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"character varying(50)\")\n                        .HasColumnName(\"blog_id\");\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasMaxLength(500)\n                        .HasColumnType(\"character varying(500)\")\n                        .HasColumnName(\"categories_csv\");\n\n                    b.Property<string>(\"Content\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"content\");\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"character varying(50)\")\n                        .HasDefaultValue(\"html\")\n                        .HasColumnName(\"content_type\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"correlation_key\");\n\n                    b.Property<string>(\"CreatedByUser\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"character varying(100)\")\n                        .HasColumnName(\"created_by_user\");\n\n                    b.Property<DateTime>(\"CreatedUtc\")\n                        .HasColumnType(\"timestamp with time zone\")\n                        .HasColumnName(\"created_utc\");\n\n                    b.Property<string>(\"DraftAuthor\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"draft_author\");\n\n                    b.Property<string>(\"DraftContent\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"draft_content\");\n\n                    b.Property<DateTime?>(\"DraftPubDate\")\n                        .HasColumnType(\"timestamp with time zone\")\n                        .HasColumnName(\"draft_pub_date\");\n\n                    b.Property<string>(\"DraftSerializedModel\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"draft_serialized_model\");\n\n                    b.Property<string>(\"ImageUrl\")\n                        .HasMaxLength(250)\n                        .HasColumnType(\"character varying(250)\")\n                        .HasColumnName(\"image_url\");\n\n                    b.Property<bool>(\"IsFeatured\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"is_featured\");\n\n                    b.Property<bool>(\"IsPublished\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"is_published\");\n\n                    b.Property<DateTime>(\"LastModified\")\n                        .HasColumnType(\"timestamp with time zone\")\n                        .HasColumnName(\"last_modified\");\n\n                    b.Property<string>(\"LastModifiedByUser\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"character varying(100)\")\n                        .HasColumnName(\"last_modified_by_user\");\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasMaxLength(500)\n                        .HasColumnType(\"character varying(500)\")\n                        .HasColumnName(\"meta_description\");\n\n                    b.Property<string>(\"MetaHtml\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"meta_html\");\n\n                    b.Property<string>(\"MetaJson\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"meta_json\");\n\n                    b.Property<DateTime?>(\"PubDate\")\n                        .HasColumnType(\"timestamp with time zone\")\n                        .HasColumnName(\"pub_date\");\n\n                    b.Property<string>(\"Script\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"script\");\n\n                    b.Property<string>(\"SerializedModel\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"serialized_model\");\n\n                    b.Property<string>(\"Serializer\")\n                        .HasMaxLength(50)\n                        .HasColumnType(\"character varying(50)\")\n                        .HasColumnName(\"serializer\");\n\n                    b.Property<bool>(\"ShowComments\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"show_comments\");\n\n                    b.Property<string>(\"Slug\")\n                        .IsRequired()\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"slug\");\n\n                    b.Property<bool>(\"SuppressTeaser\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"suppress_teaser\");\n\n                    b.Property<string>(\"TeaserOverride\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"teaser_override\");\n\n                    b.Property<string>(\"TemplateKey\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"template_key\");\n\n                    b.Property<string>(\"ThumbnailUrl\")\n                        .HasMaxLength(250)\n                        .HasColumnType(\"character varying(250)\")\n                        .HasColumnName(\"thumbnail_url\");\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"title\");\n\n                    b.HasKey(\"Id\")\n                        .HasName(\"pk_cs_post\");\n\n                    b.HasIndex(\"BlogId\")\n                        .HasDatabaseName(\"ix_cs_post_blog_id\");\n\n                    b.HasIndex(\"CorrelationKey\")\n                        .HasDatabaseName(\"ix_cs_post_correlation_key\");\n\n                    b.HasIndex(\"Slug\")\n                        .HasDatabaseName(\"ix_cs_post_slug\");\n\n                    b.ToTable(\"cs_post\", (string)null);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\", null)\n                        .WithMany(\"PageComments\")\n                        .HasForeignKey(\"PageEntityId\")\n                        .OnDelete(DeleteBehavior.Cascade)\n                        .HasConstraintName(\"fk_cs_page_comment_cs_page_page_entity_id\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageResourceEntity\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\", null)\n                        .WithMany(\"PageResources\")\n                        .HasForeignKey(\"PageEntityId\")\n                        .OnDelete(DeleteBehavior.Cascade)\n                        .HasConstraintName(\"fk_cs_page_resource_cs_page_page_entity_id\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\", null)\n                        .WithMany(\"PostComments\")\n                        .HasForeignKey(\"PostEntityId\")\n                        .HasConstraintName(\"fk_cs_post_comment_cs_post_post_entity_id\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\", b =>\n                {\n                    b.Navigation(\"PageComments\");\n\n                    b.Navigation(\"PageResources\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\", b =>\n                {\n                    b.Navigation(\"PostComments\");\n                });\n#pragma warning restore 612, 618\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.PostgreSql/Migrations/20250423094338_user-script-20250423.cs",
    "content": "﻿using Microsoft.EntityFrameworkCore.Migrations;\n\n#nullable disable\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.PostgreSql.Migrations\n{\n    /// <inheritdoc />\n    public partial class userscript20250423 : Migration\n    {\n        /// <inheritdoc />\n        protected override void Up(MigrationBuilder migrationBuilder)\n        {\n            migrationBuilder.AddColumn<string>(\n                name: \"script\",\n                table: \"cs_post\",\n                type: \"text\",\n                nullable: true);\n\n            migrationBuilder.AddColumn<string>(\n                name: \"script\",\n                table: \"cs_page_resource\",\n                type: \"text\",\n                nullable: true);\n\n            migrationBuilder.AddColumn<string>(\n                name: \"script\",\n                table: \"cs_page\",\n                type: \"text\",\n                nullable: true);\n        }\n\n        /// <inheritdoc />\n        protected override void Down(MigrationBuilder migrationBuilder)\n        {\n            migrationBuilder.DropColumn(\n                name: \"script\",\n                table: \"cs_post\");\n\n            migrationBuilder.DropColumn(\n                name: \"script\",\n                table: \"cs_page_resource\");\n\n            migrationBuilder.DropColumn(\n                name: \"script\",\n                table: \"cs_page\");\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.PostgreSql/Migrations/20250818153117_remove-pageresource-script.Designer.cs",
    "content": "﻿// <auto-generated />\nusing System;\nusing Microsoft.EntityFrameworkCore;\nusing Microsoft.EntityFrameworkCore.Infrastructure;\nusing Microsoft.EntityFrameworkCore.Migrations;\nusing Microsoft.EntityFrameworkCore.Storage.ValueConversion;\nusing Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;\nusing cloudscribe.SimpleContent.Storage.EFCore.PostgreSql;\n\n#nullable disable\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.PostgreSql.Migrations\n{\n    [DbContext(typeof(SimpleContentDbContext))]\n    [Migration(\"20250818153117_remove-pageresource-script\")]\n    partial class removepageresourcescript\n    {\n        /// <inheritdoc />\n        protected override void BuildTargetModel(ModelBuilder modelBuilder)\n        {\n#pragma warning disable 612, 618\n            modelBuilder\n                .HasAnnotation(\"ProductVersion\", \"8.0.0\")\n                .HasAnnotation(\"Relational:MaxIdentifierLength\", 63);\n\n            NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder);\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Models.ContentHistory\", b =>\n                {\n                    b.Property<Guid>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36)\n                        .HasColumnType(\"uuid\")\n                        .HasColumnName(\"id\");\n\n                    b.Property<string>(\"ArchivedBy\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"archived_by\");\n\n                    b.Property<DateTime>(\"ArchivedUtc\")\n                        .HasColumnType(\"timestamp with time zone\")\n                        .HasColumnName(\"archived_utc\");\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"author\");\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"categories_csv\");\n\n                    b.Property<string>(\"Content\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"content\");\n\n                    b.Property<string>(\"ContentId\")\n                        .IsRequired()\n                        .HasMaxLength(36)\n                        .HasColumnType(\"character varying(36)\")\n                        .HasColumnName(\"content_id\");\n\n                    b.Property<string>(\"ContentSource\")\n                        .IsRequired()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"character varying(50)\")\n                        .HasColumnName(\"content_source\");\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"character varying(50)\")\n                        .HasDefaultValue(\"html\")\n                        .HasColumnName(\"content_type\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"correlation_key\");\n\n                    b.Property<string>(\"CreatedByUser\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"character varying(100)\")\n                        .HasColumnName(\"created_by_user\");\n\n                    b.Property<DateTime>(\"CreatedUtc\")\n                        .HasColumnType(\"timestamp with time zone\")\n                        .HasColumnName(\"created_utc\");\n\n                    b.Property<string>(\"DraftAuthor\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"draft_author\");\n\n                    b.Property<string>(\"DraftContent\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"draft_content\");\n\n                    b.Property<DateTime?>(\"DraftPubDate\")\n                        .HasColumnType(\"timestamp with time zone\")\n                        .HasColumnName(\"draft_pub_date\");\n\n                    b.Property<string>(\"DraftSerializedModel\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"draft_serialized_model\");\n\n                    b.Property<bool>(\"IsDraftHx\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"is_draft_hx\");\n\n                    b.Property<bool>(\"IsPublished\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"is_published\");\n\n                    b.Property<DateTime>(\"LastModified\")\n                        .HasColumnType(\"timestamp with time zone\")\n                        .HasColumnName(\"last_modified\");\n\n                    b.Property<string>(\"LastModifiedByUser\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"character varying(100)\")\n                        .HasColumnName(\"last_modified_by_user\");\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"meta_description\");\n\n                    b.Property<string>(\"MetaHtml\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"meta_html\");\n\n                    b.Property<string>(\"MetaJson\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"meta_json\");\n\n                    b.Property<int>(\"PageOrder\")\n                        .HasColumnType(\"integer\")\n                        .HasColumnName(\"page_order\");\n\n                    b.Property<string>(\"ParentId\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"parent_id\");\n\n                    b.Property<string>(\"ParentSlug\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"parent_slug\");\n\n                    b.Property<string>(\"ProjectId\")\n                        .HasMaxLength(50)\n                        .HasColumnType(\"character varying(50)\")\n                        .HasColumnName(\"project_id\");\n\n                    b.Property<DateTime?>(\"PubDate\")\n                        .HasColumnType(\"timestamp with time zone\")\n                        .HasColumnName(\"pub_date\");\n\n                    b.Property<string>(\"SerializedModel\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"serialized_model\");\n\n                    b.Property<string>(\"Serializer\")\n                        .HasMaxLength(50)\n                        .HasColumnType(\"character varying(50)\")\n                        .HasColumnName(\"serializer\");\n\n                    b.Property<bool?>(\"ShowCreatedBy\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"show_created_by\");\n\n                    b.Property<bool?>(\"ShowCreatedDate\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"show_created_date\");\n\n                    b.Property<bool?>(\"ShowLastModifiedBy\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"show_last_modified_by\");\n\n                    b.Property<bool?>(\"ShowLastModifiedDate\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"show_last_modified_date\");\n\n                    b.Property<string>(\"Slug\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"slug\");\n\n                    b.Property<string>(\"TeaserOverride\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"teaser_override\");\n\n                    b.Property<string>(\"TemplateKey\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"template_key\");\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"title\");\n\n                    b.Property<string>(\"ViewRoles\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"view_roles\");\n\n                    b.Property<bool>(\"WasDeleted\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"was_deleted\");\n\n                    b.HasKey(\"Id\")\n                        .HasName(\"pk_cs_content_history\");\n\n                    b.HasIndex(\"ContentId\")\n                        .HasDatabaseName(\"ix_cs_content_history_content_id\");\n\n                    b.HasIndex(\"ContentSource\")\n                        .HasDatabaseName(\"ix_cs_content_history_content_source\");\n\n                    b.HasIndex(\"CorrelationKey\")\n                        .HasDatabaseName(\"ix_cs_content_history_correlation_key\");\n\n                    b.HasIndex(\"CreatedByUser\")\n                        .HasDatabaseName(\"ix_cs_content_history_created_by_user\");\n\n                    b.HasIndex(\"LastModifiedByUser\")\n                        .HasDatabaseName(\"ix_cs_content_history_last_modified_by_user\");\n\n                    b.HasIndex(\"Title\")\n                        .HasDatabaseName(\"ix_cs_content_history_title\");\n\n                    b.ToTable(\"cs_content_history\", (string)null);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Models.ProjectSettings\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .HasMaxLength(50)\n                        .HasColumnType(\"character varying(50)\")\n                        .HasColumnName(\"id\");\n\n                    b.Property<string>(\"AboutContent\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"about_content\");\n\n                    b.Property<string>(\"AboutHeading\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"about_heading\");\n\n                    b.Property<bool>(\"AddBlogToPagesTree\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"add_blog_to_pages_tree\");\n\n                    b.Property<bool>(\"BlogMenuLinksToNewestPost\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"blog_menu_links_to_newest_post\");\n\n                    b.Property<string>(\"BlogPageNavComponentVisibility\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"blog_page_nav_component_visibility\");\n\n                    b.Property<int>(\"BlogPagePosition\")\n                        .HasColumnType(\"integer\")\n                        .HasColumnName(\"blog_page_position\");\n\n                    b.Property<string>(\"BlogPageText\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"blog_page_text\");\n\n                    b.Property<string>(\"CdnUrl\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"cdn_url\");\n\n                    b.Property<string>(\"ChannelCategoriesCsv\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"channel_categories_csv\");\n\n                    b.Property<string>(\"ChannelRating\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"character varying(100)\")\n                        .HasColumnName(\"channel_rating\");\n\n                    b.Property<int>(\"ChannelTimeToLive\")\n                        .HasColumnType(\"integer\")\n                        .HasColumnName(\"channel_time_to_live\");\n\n                    b.Property<string>(\"CommentNotificationEmail\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"character varying(100)\")\n                        .HasColumnName(\"comment_notification_email\");\n\n                    b.Property<string>(\"CopyrightNotice\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"copyright_notice\");\n\n                    b.Property<int>(\"DaysToComment\")\n                        .HasColumnType(\"integer\")\n                        .HasColumnName(\"days_to_comment\");\n\n                    b.Property<string>(\"DefaultContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"character varying(50)\")\n                        .HasDefaultValue(\"html\")\n                        .HasColumnName(\"default_content_type\");\n\n                    b.Property<int>(\"DefaultFeedItems\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"integer\")\n                        .HasDefaultValue(20)\n                        .HasColumnName(\"default_feed_items\");\n\n                    b.Property<string>(\"DefaultPageSlug\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"default_page_slug\");\n\n                    b.Property<string>(\"Description\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"description\");\n\n                    b.Property<string>(\"DisqusShortName\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"character varying(100)\")\n                        .HasColumnName(\"disqus_short_name\");\n\n                    b.Property<string>(\"FacebookAppId\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"character varying(100)\")\n                        .HasColumnName(\"facebook_app_id\");\n\n                    b.Property<string>(\"Image\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"image\");\n\n                    b.Property<bool>(\"IncludePubDateInPostUrls\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"include_pub_date_in_post_urls\");\n\n                    b.Property<string>(\"LanguageCode\")\n                        .HasMaxLength(10)\n                        .HasColumnType(\"character varying(10)\")\n                        .HasColumnName(\"language_code\");\n\n                    b.Property<string>(\"LocalMediaVirtualPath\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"local_media_virtual_path\");\n\n                    b.Property<string>(\"ManagingEditorEmail\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"character varying(100)\")\n                        .HasColumnName(\"managing_editor_email\");\n\n                    b.Property<int>(\"MaxFeedItems\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"integer\")\n                        .HasDefaultValue(1000)\n                        .HasColumnName(\"max_feed_items\");\n\n                    b.Property<bool>(\"ModerateComments\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"moderate_comments\");\n\n                    b.Property<int>(\"PostsPerPage\")\n                        .HasColumnType(\"integer\")\n                        .HasColumnName(\"posts_per_page\");\n\n                    b.Property<string>(\"PubDateFormat\")\n                        .HasMaxLength(75)\n                        .HasColumnType(\"character varying(75)\")\n                        .HasColumnName(\"pub_date_format\");\n\n                    b.Property<string>(\"Publisher\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"publisher\");\n\n                    b.Property<string>(\"PublisherEntityType\")\n                        .HasMaxLength(50)\n                        .HasColumnType(\"character varying(50)\")\n                        .HasColumnName(\"publisher_entity_type\");\n\n                    b.Property<string>(\"PublisherLogoHeight\")\n                        .HasMaxLength(20)\n                        .HasColumnType(\"character varying(20)\")\n                        .HasColumnName(\"publisher_logo_height\");\n\n                    b.Property<string>(\"PublisherLogoUrl\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"publisher_logo_url\");\n\n                    b.Property<string>(\"PublisherLogoWidth\")\n                        .HasMaxLength(20)\n                        .HasColumnType(\"character varying(20)\")\n                        .HasColumnName(\"publisher_logo_width\");\n\n                    b.Property<string>(\"RecaptchaPrivateKey\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"recaptcha_private_key\");\n\n                    b.Property<string>(\"RecaptchaPublicKey\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"recaptcha_public_key\");\n\n                    b.Property<string>(\"RemoteFeedProcessorUseAgentFragment\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"remote_feed_processor_use_agent_fragment\");\n\n                    b.Property<string>(\"RemoteFeedUrl\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"remote_feed_url\");\n\n                    b.Property<bool>(\"ShowAboutBox\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"boolean\")\n                        .HasDefaultValue(true)\n                        .HasColumnName(\"show_about_box\");\n\n                    b.Property<bool>(\"ShowArchivedPosts\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"boolean\")\n                        .HasDefaultValue(true)\n                        .HasColumnName(\"show_archived_posts\");\n\n                    b.Property<bool>(\"ShowBlogCategories\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"boolean\")\n                        .HasDefaultValue(true)\n                        .HasColumnName(\"show_blog_categories\");\n\n                    b.Property<bool>(\"ShowCreatedBy\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"show_created_by\");\n\n                    b.Property<bool>(\"ShowCreatedDate\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"show_created_date\");\n\n                    b.Property<bool>(\"ShowFeaturedPostsOnDefaultPage\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"show_featured_posts_on_default_page\");\n\n                    b.Property<bool>(\"ShowLastModifiedBy\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"show_last_modified_by\");\n\n                    b.Property<bool>(\"ShowLastModifiedDate\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"show_last_modified_date\");\n\n                    b.Property<bool>(\"ShowRecentPostsOnDefaultPage\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"show_recent_posts_on_default_page\");\n\n                    b.Property<bool>(\"ShowRelatedPosts\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"boolean\")\n                        .HasDefaultValue(true)\n                        .HasColumnName(\"show_related_posts\");\n\n                    b.Property<bool>(\"ShowTitle\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"show_title\");\n\n                    b.Property<string>(\"SiteName\")\n                        .HasMaxLength(200)\n                        .HasColumnType(\"character varying(200)\")\n                        .HasColumnName(\"site_name\");\n\n                    b.Property<byte>(\"TeaserMode\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"smallint\")\n                        .HasDefaultValue((byte)0)\n                        .HasColumnName(\"teaser_mode\");\n\n                    b.Property<int>(\"TeaserTruncationLength\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"integer\")\n                        .HasDefaultValue(20)\n                        .HasColumnName(\"teaser_truncation_length\");\n\n                    b.Property<byte>(\"TeaserTruncationMode\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"smallint\")\n                        .HasDefaultValue((byte)0)\n                        .HasColumnName(\"teaser_truncation_mode\");\n\n                    b.Property<string>(\"TimeZoneId\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"character varying(100)\")\n                        .HasColumnName(\"time_zone_id\");\n\n                    b.Property<string>(\"Title\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"title\");\n\n                    b.Property<string>(\"TwitterCreator\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"character varying(100)\")\n                        .HasColumnName(\"twitter_creator\");\n\n                    b.Property<string>(\"TwitterPublisher\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"character varying(100)\")\n                        .HasColumnName(\"twitter_publisher\");\n\n                    b.Property<bool>(\"UseDefaultPageAsRootNode\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"use_default_page_as_root_node\");\n\n                    b.Property<string>(\"WebmasterEmail\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"character varying(100)\")\n                        .HasColumnName(\"webmaster_email\");\n\n                    b.HasKey(\"Id\")\n                        .HasName(\"pk_cs_content_project\");\n\n                    b.ToTable(\"cs_content_project\", (string)null);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageCategory\", b =>\n                {\n                    b.Property<string>(\"Value\")\n                        .HasMaxLength(50)\n                        .HasColumnType(\"character varying(50)\")\n                        .HasColumnName(\"value\");\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"character varying(36)\")\n                        .HasColumnName(\"page_entity_id\");\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"character varying(50)\")\n                        .HasColumnName(\"project_id\");\n\n                    b.HasKey(\"Value\", \"PageEntityId\")\n                        .HasName(\"pk_cs_page_category\");\n\n                    b.HasIndex(\"PageEntityId\")\n                        .HasDatabaseName(\"ix_cs_page_category_page_entity_id\");\n\n                    b.HasIndex(\"ProjectId\")\n                        .HasDatabaseName(\"ix_cs_page_category_project_id\");\n\n                    b.HasIndex(\"Value\")\n                        .HasDatabaseName(\"ix_cs_page_category_value\");\n\n                    b.ToTable(\"cs_page_category\", (string)null);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"character varying(36)\")\n                        .HasColumnName(\"id\");\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"author\");\n\n                    b.Property<string>(\"Content\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"content\");\n\n                    b.Property<string>(\"Email\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"character varying(100)\")\n                        .HasColumnName(\"email\");\n\n                    b.Property<string>(\"Ip\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"character varying(100)\")\n                        .HasColumnName(\"ip\");\n\n                    b.Property<bool>(\"IsAdmin\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"is_admin\");\n\n                    b.Property<bool>(\"IsApproved\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"is_approved\");\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"character varying(36)\")\n                        .HasColumnName(\"page_entity_id\");\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"character varying(50)\")\n                        .HasColumnName(\"project_id\");\n\n                    b.Property<DateTime>(\"PubDate\")\n                        .HasColumnType(\"timestamp with time zone\")\n                        .HasColumnName(\"pub_date\");\n\n                    b.Property<string>(\"UserAgent\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"user_agent\");\n\n                    b.Property<string>(\"Website\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"website\");\n\n                    b.HasKey(\"Id\")\n                        .HasName(\"pk_cs_page_comment\");\n\n                    b.HasIndex(\"PageEntityId\")\n                        .HasDatabaseName(\"ix_cs_page_comment_page_entity_id\");\n\n                    b.HasIndex(\"ProjectId\")\n                        .HasDatabaseName(\"ix_cs_page_comment_project_id\");\n\n                    b.ToTable(\"cs_page_comment\", (string)null);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"character varying(36)\")\n                        .HasColumnName(\"id\");\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"author\");\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasMaxLength(500)\n                        .HasColumnType(\"character varying(500)\")\n                        .HasColumnName(\"categories_csv\");\n\n                    b.Property<string>(\"Content\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"content\");\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"character varying(50)\")\n                        .HasDefaultValue(\"html\")\n                        .HasColumnName(\"content_type\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"correlation_key\");\n\n                    b.Property<string>(\"CreatedByUser\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"character varying(100)\")\n                        .HasColumnName(\"created_by_user\");\n\n                    b.Property<DateTime>(\"CreatedUtc\")\n                        .HasColumnType(\"timestamp with time zone\")\n                        .HasColumnName(\"created_utc\");\n\n                    b.Property<bool>(\"DisableEditor\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"disable_editor\");\n\n                    b.Property<string>(\"DraftAuthor\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"draft_author\");\n\n                    b.Property<string>(\"DraftContent\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"draft_content\");\n\n                    b.Property<DateTime?>(\"DraftPubDate\")\n                        .HasColumnType(\"timestamp with time zone\")\n                        .HasColumnName(\"draft_pub_date\");\n\n                    b.Property<string>(\"DraftSerializedModel\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"draft_serialized_model\");\n\n                    b.Property<string>(\"ExternalUrl\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"external_url\");\n\n                    b.Property<bool>(\"IsPublished\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"is_published\");\n\n                    b.Property<DateTime>(\"LastModified\")\n                        .HasColumnType(\"timestamp with time zone\")\n                        .HasColumnName(\"last_modified\");\n\n                    b.Property<string>(\"LastModifiedByUser\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"character varying(100)\")\n                        .HasColumnName(\"last_modified_by_user\");\n\n                    b.Property<string>(\"MenuFilters\")\n                        .HasMaxLength(500)\n                        .HasColumnType(\"character varying(500)\")\n                        .HasColumnName(\"menu_filters\");\n\n                    b.Property<bool>(\"MenuOnly\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"menu_only\");\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasMaxLength(500)\n                        .HasColumnType(\"character varying(500)\")\n                        .HasColumnName(\"meta_description\");\n\n                    b.Property<string>(\"MetaHtml\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"meta_html\");\n\n                    b.Property<string>(\"MetaJson\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"meta_json\");\n\n                    b.Property<int>(\"PageOrder\")\n                        .HasColumnType(\"integer\")\n                        .HasColumnName(\"page_order\");\n\n                    b.Property<string>(\"ParentId\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"character varying(36)\")\n                        .HasColumnName(\"parent_id\");\n\n                    b.Property<string>(\"ParentSlug\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"parent_slug\");\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"character varying(50)\")\n                        .HasColumnName(\"project_id\");\n\n                    b.Property<DateTime?>(\"PubDate\")\n                        .HasColumnType(\"timestamp with time zone\")\n                        .HasColumnName(\"pub_date\");\n\n                    b.Property<string>(\"Script\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"script\");\n\n                    b.Property<string>(\"SerializedModel\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"serialized_model\");\n\n                    b.Property<string>(\"Serializer\")\n                        .HasMaxLength(50)\n                        .HasColumnType(\"character varying(50)\")\n                        .HasColumnName(\"serializer\");\n\n                    b.Property<bool>(\"ShowCategories\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"show_categories\");\n\n                    b.Property<bool>(\"ShowComments\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"show_comments\");\n\n                    b.Property<bool?>(\"ShowCreatedBy\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"show_created_by\");\n\n                    b.Property<bool?>(\"ShowCreatedDate\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"show_created_date\");\n\n                    b.Property<bool>(\"ShowHeading\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"show_heading\");\n\n                    b.Property<bool>(\"ShowLastModified\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"show_last_modified\");\n\n                    b.Property<bool?>(\"ShowLastModifiedBy\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"show_last_modified_by\");\n\n                    b.Property<bool?>(\"ShowLastModifiedDate\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"show_last_modified_date\");\n\n                    b.Property<bool>(\"ShowMenu\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"show_menu\");\n\n                    b.Property<bool>(\"ShowPubDate\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"show_pub_date\");\n\n                    b.Property<string>(\"Slug\")\n                        .IsRequired()\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"slug\");\n\n                    b.Property<string>(\"TemplateKey\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"template_key\");\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"title\");\n\n                    b.Property<string>(\"ViewRoles\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"view_roles\");\n\n                    b.HasKey(\"Id\")\n                        .HasName(\"pk_cs_page\");\n\n                    b.HasIndex(\"CorrelationKey\")\n                        .HasDatabaseName(\"ix_cs_page_correlation_key\");\n\n                    b.HasIndex(\"ParentId\")\n                        .HasDatabaseName(\"ix_cs_page_parent_id\");\n\n                    b.HasIndex(\"ProjectId\")\n                        .HasDatabaseName(\"ix_cs_page_project_id\");\n\n                    b.ToTable(\"cs_page\", (string)null);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageResourceEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"character varying(36)\")\n                        .HasColumnName(\"id\");\n\n                    b.Property<string>(\"Environment\")\n                        .IsRequired()\n                        .HasMaxLength(15)\n                        .HasColumnType(\"character varying(15)\")\n                        .HasColumnName(\"environment\");\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"character varying(36)\")\n                        .HasColumnName(\"page_entity_id\");\n\n                    b.Property<int>(\"Sort\")\n                        .HasColumnType(\"integer\")\n                        .HasColumnName(\"sort\");\n\n                    b.Property<string>(\"Type\")\n                        .IsRequired()\n                        .HasMaxLength(10)\n                        .HasColumnType(\"character varying(10)\")\n                        .HasColumnName(\"type\");\n\n                    b.Property<string>(\"Url\")\n                        .IsRequired()\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"url\");\n\n                    b.HasKey(\"Id\")\n                        .HasName(\"pk_cs_page_resource\");\n\n                    b.HasIndex(\"PageEntityId\")\n                        .HasDatabaseName(\"ix_cs_page_resource_page_entity_id\");\n\n                    b.ToTable(\"cs_page_resource\", (string)null);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostCategory\", b =>\n                {\n                    b.Property<string>(\"Value\")\n                        .HasMaxLength(50)\n                        .HasColumnType(\"character varying(50)\")\n                        .HasColumnName(\"value\");\n\n                    b.Property<string>(\"PostEntityId\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"character varying(36)\")\n                        .HasColumnName(\"post_entity_id\");\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"character varying(50)\")\n                        .HasColumnName(\"project_id\");\n\n                    b.HasKey(\"Value\", \"PostEntityId\")\n                        .HasName(\"pk_cs_post_category\");\n\n                    b.HasIndex(\"PostEntityId\")\n                        .HasDatabaseName(\"ix_cs_post_category_post_entity_id\");\n\n                    b.HasIndex(\"ProjectId\")\n                        .HasDatabaseName(\"ix_cs_post_category_project_id\");\n\n                    b.HasIndex(\"Value\")\n                        .HasDatabaseName(\"ix_cs_post_category_value\");\n\n                    b.ToTable(\"cs_post_category\", (string)null);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"character varying(36)\")\n                        .HasColumnName(\"id\");\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"author\");\n\n                    b.Property<string>(\"Content\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"content\");\n\n                    b.Property<string>(\"Email\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"character varying(100)\")\n                        .HasColumnName(\"email\");\n\n                    b.Property<string>(\"Ip\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"character varying(100)\")\n                        .HasColumnName(\"ip\");\n\n                    b.Property<bool>(\"IsAdmin\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"is_admin\");\n\n                    b.Property<bool>(\"IsApproved\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"is_approved\");\n\n                    b.Property<string>(\"PostEntityId\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"character varying(36)\")\n                        .HasColumnName(\"post_entity_id\");\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"character varying(50)\")\n                        .HasColumnName(\"project_id\");\n\n                    b.Property<DateTime>(\"PubDate\")\n                        .HasColumnType(\"timestamp with time zone\")\n                        .HasColumnName(\"pub_date\");\n\n                    b.Property<string>(\"UserAgent\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"user_agent\");\n\n                    b.Property<string>(\"Website\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"website\");\n\n                    b.HasKey(\"Id\")\n                        .HasName(\"pk_cs_post_comment\");\n\n                    b.HasIndex(\"PostEntityId\")\n                        .HasDatabaseName(\"ix_cs_post_comment_post_entity_id\");\n\n                    b.HasIndex(\"ProjectId\")\n                        .HasDatabaseName(\"ix_cs_post_comment_project_id\");\n\n                    b.ToTable(\"cs_post_comment\", (string)null);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"character varying(36)\")\n                        .HasColumnName(\"id\");\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"author\");\n\n                    b.Property<string>(\"AutoTeaser\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"auto_teaser\");\n\n                    b.Property<string>(\"BlogId\")\n                        .IsRequired()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"character varying(50)\")\n                        .HasColumnName(\"blog_id\");\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasMaxLength(500)\n                        .HasColumnType(\"character varying(500)\")\n                        .HasColumnName(\"categories_csv\");\n\n                    b.Property<string>(\"Content\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"content\");\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"character varying(50)\")\n                        .HasDefaultValue(\"html\")\n                        .HasColumnName(\"content_type\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"correlation_key\");\n\n                    b.Property<string>(\"CreatedByUser\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"character varying(100)\")\n                        .HasColumnName(\"created_by_user\");\n\n                    b.Property<DateTime>(\"CreatedUtc\")\n                        .HasColumnType(\"timestamp with time zone\")\n                        .HasColumnName(\"created_utc\");\n\n                    b.Property<string>(\"DraftAuthor\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"draft_author\");\n\n                    b.Property<string>(\"DraftContent\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"draft_content\");\n\n                    b.Property<DateTime?>(\"DraftPubDate\")\n                        .HasColumnType(\"timestamp with time zone\")\n                        .HasColumnName(\"draft_pub_date\");\n\n                    b.Property<string>(\"DraftSerializedModel\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"draft_serialized_model\");\n\n                    b.Property<string>(\"ImageUrl\")\n                        .HasMaxLength(250)\n                        .HasColumnType(\"character varying(250)\")\n                        .HasColumnName(\"image_url\");\n\n                    b.Property<bool>(\"IsFeatured\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"is_featured\");\n\n                    b.Property<bool>(\"IsPublished\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"is_published\");\n\n                    b.Property<DateTime>(\"LastModified\")\n                        .HasColumnType(\"timestamp with time zone\")\n                        .HasColumnName(\"last_modified\");\n\n                    b.Property<string>(\"LastModifiedByUser\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"character varying(100)\")\n                        .HasColumnName(\"last_modified_by_user\");\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasMaxLength(500)\n                        .HasColumnType(\"character varying(500)\")\n                        .HasColumnName(\"meta_description\");\n\n                    b.Property<string>(\"MetaHtml\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"meta_html\");\n\n                    b.Property<string>(\"MetaJson\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"meta_json\");\n\n                    b.Property<DateTime?>(\"PubDate\")\n                        .HasColumnType(\"timestamp with time zone\")\n                        .HasColumnName(\"pub_date\");\n\n                    b.Property<string>(\"Script\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"script\");\n\n                    b.Property<string>(\"SerializedModel\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"serialized_model\");\n\n                    b.Property<string>(\"Serializer\")\n                        .HasMaxLength(50)\n                        .HasColumnType(\"character varying(50)\")\n                        .HasColumnName(\"serializer\");\n\n                    b.Property<bool>(\"ShowComments\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"show_comments\");\n\n                    b.Property<string>(\"Slug\")\n                        .IsRequired()\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"slug\");\n\n                    b.Property<bool>(\"SuppressTeaser\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"suppress_teaser\");\n\n                    b.Property<string>(\"TeaserOverride\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"teaser_override\");\n\n                    b.Property<string>(\"TemplateKey\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"template_key\");\n\n                    b.Property<string>(\"ThumbnailUrl\")\n                        .HasMaxLength(250)\n                        .HasColumnType(\"character varying(250)\")\n                        .HasColumnName(\"thumbnail_url\");\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"title\");\n\n                    b.HasKey(\"Id\")\n                        .HasName(\"pk_cs_post\");\n\n                    b.HasIndex(\"BlogId\")\n                        .HasDatabaseName(\"ix_cs_post_blog_id\");\n\n                    b.HasIndex(\"CorrelationKey\")\n                        .HasDatabaseName(\"ix_cs_post_correlation_key\");\n\n                    b.HasIndex(\"Slug\")\n                        .HasDatabaseName(\"ix_cs_post_slug\");\n\n                    b.ToTable(\"cs_post\", (string)null);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\", null)\n                        .WithMany(\"PageComments\")\n                        .HasForeignKey(\"PageEntityId\")\n                        .OnDelete(DeleteBehavior.Cascade)\n                        .HasConstraintName(\"fk_cs_page_comment_cs_page_page_entity_id\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageResourceEntity\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\", null)\n                        .WithMany(\"PageResources\")\n                        .HasForeignKey(\"PageEntityId\")\n                        .OnDelete(DeleteBehavior.Cascade)\n                        .HasConstraintName(\"fk_cs_page_resource_cs_page_page_entity_id\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\", null)\n                        .WithMany(\"PostComments\")\n                        .HasForeignKey(\"PostEntityId\")\n                        .HasConstraintName(\"fk_cs_post_comment_cs_post_post_entity_id\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\", b =>\n                {\n                    b.Navigation(\"PageComments\");\n\n                    b.Navigation(\"PageResources\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\", b =>\n                {\n                    b.Navigation(\"PostComments\");\n                });\n#pragma warning restore 612, 618\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.PostgreSql/Migrations/20250818153117_remove-pageresource-script.cs",
    "content": "﻿using Microsoft.EntityFrameworkCore.Migrations;\n\n#nullable disable\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.PostgreSql.Migrations\n{\n    /// <inheritdoc />\n    public partial class removepageresourcescript : Migration\n    {\n        /// <inheritdoc />\n        protected override void Up(MigrationBuilder migrationBuilder)\n        {\n            migrationBuilder.DropColumn(\n                name: \"script\",\n                table: \"cs_page_resource\");\n        }\n\n        /// <inheritdoc />\n        protected override void Down(MigrationBuilder migrationBuilder)\n        {\n            migrationBuilder.AddColumn<string>(\n                name: \"script\",\n                table: \"cs_page_resource\",\n                type: \"text\",\n                nullable: true);\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.PostgreSql/Migrations/SimpleContentDbContextModelSnapshot.cs",
    "content": "﻿// <auto-generated />\nusing System;\nusing Microsoft.EntityFrameworkCore;\nusing Microsoft.EntityFrameworkCore.Infrastructure;\nusing Microsoft.EntityFrameworkCore.Storage.ValueConversion;\nusing Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;\nusing cloudscribe.SimpleContent.Storage.EFCore.PostgreSql;\n\n#nullable disable\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.PostgreSql.Migrations\n{\n    [DbContext(typeof(SimpleContentDbContext))]\n    partial class SimpleContentDbContextModelSnapshot : ModelSnapshot\n    {\n        protected override void BuildModel(ModelBuilder modelBuilder)\n        {\n#pragma warning disable 612, 618\n            modelBuilder\n                .HasAnnotation(\"ProductVersion\", \"8.0.0\")\n                .HasAnnotation(\"Relational:MaxIdentifierLength\", 63);\n\n            NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder);\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Models.ContentHistory\", b =>\n                {\n                    b.Property<Guid>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36)\n                        .HasColumnType(\"uuid\")\n                        .HasColumnName(\"id\");\n\n                    b.Property<string>(\"ArchivedBy\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"archived_by\");\n\n                    b.Property<DateTime>(\"ArchivedUtc\")\n                        .HasColumnType(\"timestamp with time zone\")\n                        .HasColumnName(\"archived_utc\");\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"author\");\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"categories_csv\");\n\n                    b.Property<string>(\"Content\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"content\");\n\n                    b.Property<string>(\"ContentId\")\n                        .IsRequired()\n                        .HasMaxLength(36)\n                        .HasColumnType(\"character varying(36)\")\n                        .HasColumnName(\"content_id\");\n\n                    b.Property<string>(\"ContentSource\")\n                        .IsRequired()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"character varying(50)\")\n                        .HasColumnName(\"content_source\");\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"character varying(50)\")\n                        .HasDefaultValue(\"html\")\n                        .HasColumnName(\"content_type\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"correlation_key\");\n\n                    b.Property<string>(\"CreatedByUser\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"character varying(100)\")\n                        .HasColumnName(\"created_by_user\");\n\n                    b.Property<DateTime>(\"CreatedUtc\")\n                        .HasColumnType(\"timestamp with time zone\")\n                        .HasColumnName(\"created_utc\");\n\n                    b.Property<string>(\"DraftAuthor\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"draft_author\");\n\n                    b.Property<string>(\"DraftContent\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"draft_content\");\n\n                    b.Property<DateTime?>(\"DraftPubDate\")\n                        .HasColumnType(\"timestamp with time zone\")\n                        .HasColumnName(\"draft_pub_date\");\n\n                    b.Property<string>(\"DraftSerializedModel\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"draft_serialized_model\");\n\n                    b.Property<bool>(\"IsDraftHx\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"is_draft_hx\");\n\n                    b.Property<bool>(\"IsPublished\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"is_published\");\n\n                    b.Property<DateTime>(\"LastModified\")\n                        .HasColumnType(\"timestamp with time zone\")\n                        .HasColumnName(\"last_modified\");\n\n                    b.Property<string>(\"LastModifiedByUser\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"character varying(100)\")\n                        .HasColumnName(\"last_modified_by_user\");\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"meta_description\");\n\n                    b.Property<string>(\"MetaHtml\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"meta_html\");\n\n                    b.Property<string>(\"MetaJson\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"meta_json\");\n\n                    b.Property<int>(\"PageOrder\")\n                        .HasColumnType(\"integer\")\n                        .HasColumnName(\"page_order\");\n\n                    b.Property<string>(\"ParentId\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"parent_id\");\n\n                    b.Property<string>(\"ParentSlug\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"parent_slug\");\n\n                    b.Property<string>(\"ProjectId\")\n                        .HasMaxLength(50)\n                        .HasColumnType(\"character varying(50)\")\n                        .HasColumnName(\"project_id\");\n\n                    b.Property<DateTime?>(\"PubDate\")\n                        .HasColumnType(\"timestamp with time zone\")\n                        .HasColumnName(\"pub_date\");\n\n                    b.Property<string>(\"SerializedModel\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"serialized_model\");\n\n                    b.Property<string>(\"Serializer\")\n                        .HasMaxLength(50)\n                        .HasColumnType(\"character varying(50)\")\n                        .HasColumnName(\"serializer\");\n\n                    b.Property<bool?>(\"ShowCreatedBy\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"show_created_by\");\n\n                    b.Property<bool?>(\"ShowCreatedDate\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"show_created_date\");\n\n                    b.Property<bool?>(\"ShowLastModifiedBy\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"show_last_modified_by\");\n\n                    b.Property<bool?>(\"ShowLastModifiedDate\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"show_last_modified_date\");\n\n                    b.Property<string>(\"Slug\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"slug\");\n\n                    b.Property<string>(\"TeaserOverride\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"teaser_override\");\n\n                    b.Property<string>(\"TemplateKey\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"template_key\");\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"title\");\n\n                    b.Property<string>(\"ViewRoles\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"view_roles\");\n\n                    b.Property<bool>(\"WasDeleted\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"was_deleted\");\n\n                    b.HasKey(\"Id\")\n                        .HasName(\"pk_cs_content_history\");\n\n                    b.HasIndex(\"ContentId\")\n                        .HasDatabaseName(\"ix_cs_content_history_content_id\");\n\n                    b.HasIndex(\"ContentSource\")\n                        .HasDatabaseName(\"ix_cs_content_history_content_source\");\n\n                    b.HasIndex(\"CorrelationKey\")\n                        .HasDatabaseName(\"ix_cs_content_history_correlation_key\");\n\n                    b.HasIndex(\"CreatedByUser\")\n                        .HasDatabaseName(\"ix_cs_content_history_created_by_user\");\n\n                    b.HasIndex(\"LastModifiedByUser\")\n                        .HasDatabaseName(\"ix_cs_content_history_last_modified_by_user\");\n\n                    b.HasIndex(\"Title\")\n                        .HasDatabaseName(\"ix_cs_content_history_title\");\n\n                    b.ToTable(\"cs_content_history\", (string)null);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Models.ProjectSettings\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .HasMaxLength(50)\n                        .HasColumnType(\"character varying(50)\")\n                        .HasColumnName(\"id\");\n\n                    b.Property<string>(\"AboutContent\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"about_content\");\n\n                    b.Property<string>(\"AboutHeading\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"about_heading\");\n\n                    b.Property<bool>(\"AddBlogToPagesTree\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"add_blog_to_pages_tree\");\n\n                    b.Property<bool>(\"BlogMenuLinksToNewestPost\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"blog_menu_links_to_newest_post\");\n\n                    b.Property<string>(\"BlogPageNavComponentVisibility\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"blog_page_nav_component_visibility\");\n\n                    b.Property<int>(\"BlogPagePosition\")\n                        .HasColumnType(\"integer\")\n                        .HasColumnName(\"blog_page_position\");\n\n                    b.Property<string>(\"BlogPageText\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"blog_page_text\");\n\n                    b.Property<string>(\"CdnUrl\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"cdn_url\");\n\n                    b.Property<string>(\"ChannelCategoriesCsv\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"channel_categories_csv\");\n\n                    b.Property<string>(\"ChannelRating\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"character varying(100)\")\n                        .HasColumnName(\"channel_rating\");\n\n                    b.Property<int>(\"ChannelTimeToLive\")\n                        .HasColumnType(\"integer\")\n                        .HasColumnName(\"channel_time_to_live\");\n\n                    b.Property<string>(\"CommentNotificationEmail\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"character varying(100)\")\n                        .HasColumnName(\"comment_notification_email\");\n\n                    b.Property<string>(\"CopyrightNotice\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"copyright_notice\");\n\n                    b.Property<int>(\"DaysToComment\")\n                        .HasColumnType(\"integer\")\n                        .HasColumnName(\"days_to_comment\");\n\n                    b.Property<string>(\"DefaultContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"character varying(50)\")\n                        .HasDefaultValue(\"html\")\n                        .HasColumnName(\"default_content_type\");\n\n                    b.Property<int>(\"DefaultFeedItems\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"integer\")\n                        .HasDefaultValue(20)\n                        .HasColumnName(\"default_feed_items\");\n\n                    b.Property<string>(\"DefaultPageSlug\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"default_page_slug\");\n\n                    b.Property<string>(\"Description\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"description\");\n\n                    b.Property<string>(\"DisqusShortName\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"character varying(100)\")\n                        .HasColumnName(\"disqus_short_name\");\n\n                    b.Property<string>(\"FacebookAppId\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"character varying(100)\")\n                        .HasColumnName(\"facebook_app_id\");\n\n                    b.Property<string>(\"Image\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"image\");\n\n                    b.Property<bool>(\"IncludePubDateInPostUrls\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"include_pub_date_in_post_urls\");\n\n                    b.Property<string>(\"LanguageCode\")\n                        .HasMaxLength(10)\n                        .HasColumnType(\"character varying(10)\")\n                        .HasColumnName(\"language_code\");\n\n                    b.Property<string>(\"LocalMediaVirtualPath\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"local_media_virtual_path\");\n\n                    b.Property<string>(\"ManagingEditorEmail\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"character varying(100)\")\n                        .HasColumnName(\"managing_editor_email\");\n\n                    b.Property<int>(\"MaxFeedItems\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"integer\")\n                        .HasDefaultValue(1000)\n                        .HasColumnName(\"max_feed_items\");\n\n                    b.Property<bool>(\"ModerateComments\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"moderate_comments\");\n\n                    b.Property<int>(\"PostsPerPage\")\n                        .HasColumnType(\"integer\")\n                        .HasColumnName(\"posts_per_page\");\n\n                    b.Property<string>(\"PubDateFormat\")\n                        .HasMaxLength(75)\n                        .HasColumnType(\"character varying(75)\")\n                        .HasColumnName(\"pub_date_format\");\n\n                    b.Property<string>(\"Publisher\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"publisher\");\n\n                    b.Property<string>(\"PublisherEntityType\")\n                        .HasMaxLength(50)\n                        .HasColumnType(\"character varying(50)\")\n                        .HasColumnName(\"publisher_entity_type\");\n\n                    b.Property<string>(\"PublisherLogoHeight\")\n                        .HasMaxLength(20)\n                        .HasColumnType(\"character varying(20)\")\n                        .HasColumnName(\"publisher_logo_height\");\n\n                    b.Property<string>(\"PublisherLogoUrl\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"publisher_logo_url\");\n\n                    b.Property<string>(\"PublisherLogoWidth\")\n                        .HasMaxLength(20)\n                        .HasColumnType(\"character varying(20)\")\n                        .HasColumnName(\"publisher_logo_width\");\n\n                    b.Property<string>(\"RecaptchaPrivateKey\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"recaptcha_private_key\");\n\n                    b.Property<string>(\"RecaptchaPublicKey\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"recaptcha_public_key\");\n\n                    b.Property<string>(\"RemoteFeedProcessorUseAgentFragment\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"remote_feed_processor_use_agent_fragment\");\n\n                    b.Property<string>(\"RemoteFeedUrl\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"remote_feed_url\");\n\n                    b.Property<bool>(\"ShowAboutBox\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"boolean\")\n                        .HasDefaultValue(true)\n                        .HasColumnName(\"show_about_box\");\n\n                    b.Property<bool>(\"ShowArchivedPosts\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"boolean\")\n                        .HasDefaultValue(true)\n                        .HasColumnName(\"show_archived_posts\");\n\n                    b.Property<bool>(\"ShowBlogCategories\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"boolean\")\n                        .HasDefaultValue(true)\n                        .HasColumnName(\"show_blog_categories\");\n\n                    b.Property<bool>(\"ShowCreatedBy\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"show_created_by\");\n\n                    b.Property<bool>(\"ShowCreatedDate\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"show_created_date\");\n\n                    b.Property<bool>(\"ShowFeaturedPostsOnDefaultPage\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"show_featured_posts_on_default_page\");\n\n                    b.Property<bool>(\"ShowLastModifiedBy\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"show_last_modified_by\");\n\n                    b.Property<bool>(\"ShowLastModifiedDate\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"show_last_modified_date\");\n\n                    b.Property<bool>(\"ShowRecentPostsOnDefaultPage\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"show_recent_posts_on_default_page\");\n\n                    b.Property<bool>(\"ShowRelatedPosts\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"boolean\")\n                        .HasDefaultValue(true)\n                        .HasColumnName(\"show_related_posts\");\n\n                    b.Property<bool>(\"ShowTitle\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"show_title\");\n\n                    b.Property<string>(\"SiteName\")\n                        .HasMaxLength(200)\n                        .HasColumnType(\"character varying(200)\")\n                        .HasColumnName(\"site_name\");\n\n                    b.Property<byte>(\"TeaserMode\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"smallint\")\n                        .HasDefaultValue((byte)0)\n                        .HasColumnName(\"teaser_mode\");\n\n                    b.Property<int>(\"TeaserTruncationLength\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"integer\")\n                        .HasDefaultValue(20)\n                        .HasColumnName(\"teaser_truncation_length\");\n\n                    b.Property<byte>(\"TeaserTruncationMode\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"smallint\")\n                        .HasDefaultValue((byte)0)\n                        .HasColumnName(\"teaser_truncation_mode\");\n\n                    b.Property<string>(\"TimeZoneId\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"character varying(100)\")\n                        .HasColumnName(\"time_zone_id\");\n\n                    b.Property<string>(\"Title\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"title\");\n\n                    b.Property<string>(\"TwitterCreator\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"character varying(100)\")\n                        .HasColumnName(\"twitter_creator\");\n\n                    b.Property<string>(\"TwitterPublisher\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"character varying(100)\")\n                        .HasColumnName(\"twitter_publisher\");\n\n                    b.Property<bool>(\"UseDefaultPageAsRootNode\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"use_default_page_as_root_node\");\n\n                    b.Property<string>(\"WebmasterEmail\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"character varying(100)\")\n                        .HasColumnName(\"webmaster_email\");\n\n                    b.HasKey(\"Id\")\n                        .HasName(\"pk_cs_content_project\");\n\n                    b.ToTable(\"cs_content_project\", (string)null);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageCategory\", b =>\n                {\n                    b.Property<string>(\"Value\")\n                        .HasMaxLength(50)\n                        .HasColumnType(\"character varying(50)\")\n                        .HasColumnName(\"value\");\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"character varying(36)\")\n                        .HasColumnName(\"page_entity_id\");\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"character varying(50)\")\n                        .HasColumnName(\"project_id\");\n\n                    b.HasKey(\"Value\", \"PageEntityId\")\n                        .HasName(\"pk_cs_page_category\");\n\n                    b.HasIndex(\"PageEntityId\")\n                        .HasDatabaseName(\"ix_cs_page_category_page_entity_id\");\n\n                    b.HasIndex(\"ProjectId\")\n                        .HasDatabaseName(\"ix_cs_page_category_project_id\");\n\n                    b.HasIndex(\"Value\")\n                        .HasDatabaseName(\"ix_cs_page_category_value\");\n\n                    b.ToTable(\"cs_page_category\", (string)null);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"character varying(36)\")\n                        .HasColumnName(\"id\");\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"author\");\n\n                    b.Property<string>(\"Content\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"content\");\n\n                    b.Property<string>(\"Email\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"character varying(100)\")\n                        .HasColumnName(\"email\");\n\n                    b.Property<string>(\"Ip\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"character varying(100)\")\n                        .HasColumnName(\"ip\");\n\n                    b.Property<bool>(\"IsAdmin\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"is_admin\");\n\n                    b.Property<bool>(\"IsApproved\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"is_approved\");\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"character varying(36)\")\n                        .HasColumnName(\"page_entity_id\");\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"character varying(50)\")\n                        .HasColumnName(\"project_id\");\n\n                    b.Property<DateTime>(\"PubDate\")\n                        .HasColumnType(\"timestamp with time zone\")\n                        .HasColumnName(\"pub_date\");\n\n                    b.Property<string>(\"UserAgent\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"user_agent\");\n\n                    b.Property<string>(\"Website\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"website\");\n\n                    b.HasKey(\"Id\")\n                        .HasName(\"pk_cs_page_comment\");\n\n                    b.HasIndex(\"PageEntityId\")\n                        .HasDatabaseName(\"ix_cs_page_comment_page_entity_id\");\n\n                    b.HasIndex(\"ProjectId\")\n                        .HasDatabaseName(\"ix_cs_page_comment_project_id\");\n\n                    b.ToTable(\"cs_page_comment\", (string)null);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"character varying(36)\")\n                        .HasColumnName(\"id\");\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"author\");\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasMaxLength(500)\n                        .HasColumnType(\"character varying(500)\")\n                        .HasColumnName(\"categories_csv\");\n\n                    b.Property<string>(\"Content\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"content\");\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"character varying(50)\")\n                        .HasDefaultValue(\"html\")\n                        .HasColumnName(\"content_type\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"correlation_key\");\n\n                    b.Property<string>(\"CreatedByUser\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"character varying(100)\")\n                        .HasColumnName(\"created_by_user\");\n\n                    b.Property<DateTime>(\"CreatedUtc\")\n                        .HasColumnType(\"timestamp with time zone\")\n                        .HasColumnName(\"created_utc\");\n\n                    b.Property<bool>(\"DisableEditor\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"disable_editor\");\n\n                    b.Property<string>(\"DraftAuthor\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"draft_author\");\n\n                    b.Property<string>(\"DraftContent\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"draft_content\");\n\n                    b.Property<DateTime?>(\"DraftPubDate\")\n                        .HasColumnType(\"timestamp with time zone\")\n                        .HasColumnName(\"draft_pub_date\");\n\n                    b.Property<string>(\"DraftSerializedModel\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"draft_serialized_model\");\n\n                    b.Property<string>(\"ExternalUrl\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"external_url\");\n\n                    b.Property<bool>(\"IsPublished\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"is_published\");\n\n                    b.Property<DateTime>(\"LastModified\")\n                        .HasColumnType(\"timestamp with time zone\")\n                        .HasColumnName(\"last_modified\");\n\n                    b.Property<string>(\"LastModifiedByUser\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"character varying(100)\")\n                        .HasColumnName(\"last_modified_by_user\");\n\n                    b.Property<string>(\"MenuFilters\")\n                        .HasMaxLength(500)\n                        .HasColumnType(\"character varying(500)\")\n                        .HasColumnName(\"menu_filters\");\n\n                    b.Property<bool>(\"MenuOnly\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"menu_only\");\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasMaxLength(500)\n                        .HasColumnType(\"character varying(500)\")\n                        .HasColumnName(\"meta_description\");\n\n                    b.Property<string>(\"MetaHtml\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"meta_html\");\n\n                    b.Property<string>(\"MetaJson\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"meta_json\");\n\n                    b.Property<int>(\"PageOrder\")\n                        .HasColumnType(\"integer\")\n                        .HasColumnName(\"page_order\");\n\n                    b.Property<string>(\"ParentId\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"character varying(36)\")\n                        .HasColumnName(\"parent_id\");\n\n                    b.Property<string>(\"ParentSlug\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"parent_slug\");\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"character varying(50)\")\n                        .HasColumnName(\"project_id\");\n\n                    b.Property<DateTime?>(\"PubDate\")\n                        .HasColumnType(\"timestamp with time zone\")\n                        .HasColumnName(\"pub_date\");\n\n                    b.Property<string>(\"Script\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"script\");\n\n                    b.Property<string>(\"SerializedModel\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"serialized_model\");\n\n                    b.Property<string>(\"Serializer\")\n                        .HasMaxLength(50)\n                        .HasColumnType(\"character varying(50)\")\n                        .HasColumnName(\"serializer\");\n\n                    b.Property<bool>(\"ShowCategories\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"show_categories\");\n\n                    b.Property<bool>(\"ShowComments\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"show_comments\");\n\n                    b.Property<bool?>(\"ShowCreatedBy\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"show_created_by\");\n\n                    b.Property<bool?>(\"ShowCreatedDate\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"show_created_date\");\n\n                    b.Property<bool>(\"ShowHeading\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"show_heading\");\n\n                    b.Property<bool>(\"ShowLastModified\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"show_last_modified\");\n\n                    b.Property<bool?>(\"ShowLastModifiedBy\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"show_last_modified_by\");\n\n                    b.Property<bool?>(\"ShowLastModifiedDate\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"show_last_modified_date\");\n\n                    b.Property<bool>(\"ShowMenu\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"show_menu\");\n\n                    b.Property<bool>(\"ShowPubDate\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"show_pub_date\");\n\n                    b.Property<string>(\"Slug\")\n                        .IsRequired()\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"slug\");\n\n                    b.Property<string>(\"TemplateKey\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"template_key\");\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"title\");\n\n                    b.Property<string>(\"ViewRoles\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"view_roles\");\n\n                    b.HasKey(\"Id\")\n                        .HasName(\"pk_cs_page\");\n\n                    b.HasIndex(\"CorrelationKey\")\n                        .HasDatabaseName(\"ix_cs_page_correlation_key\");\n\n                    b.HasIndex(\"ParentId\")\n                        .HasDatabaseName(\"ix_cs_page_parent_id\");\n\n                    b.HasIndex(\"ProjectId\")\n                        .HasDatabaseName(\"ix_cs_page_project_id\");\n\n                    b.ToTable(\"cs_page\", (string)null);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageResourceEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"character varying(36)\")\n                        .HasColumnName(\"id\");\n\n                    b.Property<string>(\"Environment\")\n                        .IsRequired()\n                        .HasMaxLength(15)\n                        .HasColumnType(\"character varying(15)\")\n                        .HasColumnName(\"environment\");\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"character varying(36)\")\n                        .HasColumnName(\"page_entity_id\");\n\n                    b.Property<int>(\"Sort\")\n                        .HasColumnType(\"integer\")\n                        .HasColumnName(\"sort\");\n\n                    b.Property<string>(\"Type\")\n                        .IsRequired()\n                        .HasMaxLength(10)\n                        .HasColumnType(\"character varying(10)\")\n                        .HasColumnName(\"type\");\n\n                    b.Property<string>(\"Url\")\n                        .IsRequired()\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"url\");\n\n                    b.HasKey(\"Id\")\n                        .HasName(\"pk_cs_page_resource\");\n\n                    b.HasIndex(\"PageEntityId\")\n                        .HasDatabaseName(\"ix_cs_page_resource_page_entity_id\");\n\n                    b.ToTable(\"cs_page_resource\", (string)null);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostCategory\", b =>\n                {\n                    b.Property<string>(\"Value\")\n                        .HasMaxLength(50)\n                        .HasColumnType(\"character varying(50)\")\n                        .HasColumnName(\"value\");\n\n                    b.Property<string>(\"PostEntityId\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"character varying(36)\")\n                        .HasColumnName(\"post_entity_id\");\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"character varying(50)\")\n                        .HasColumnName(\"project_id\");\n\n                    b.HasKey(\"Value\", \"PostEntityId\")\n                        .HasName(\"pk_cs_post_category\");\n\n                    b.HasIndex(\"PostEntityId\")\n                        .HasDatabaseName(\"ix_cs_post_category_post_entity_id\");\n\n                    b.HasIndex(\"ProjectId\")\n                        .HasDatabaseName(\"ix_cs_post_category_project_id\");\n\n                    b.HasIndex(\"Value\")\n                        .HasDatabaseName(\"ix_cs_post_category_value\");\n\n                    b.ToTable(\"cs_post_category\", (string)null);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"character varying(36)\")\n                        .HasColumnName(\"id\");\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"author\");\n\n                    b.Property<string>(\"Content\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"content\");\n\n                    b.Property<string>(\"Email\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"character varying(100)\")\n                        .HasColumnName(\"email\");\n\n                    b.Property<string>(\"Ip\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"character varying(100)\")\n                        .HasColumnName(\"ip\");\n\n                    b.Property<bool>(\"IsAdmin\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"is_admin\");\n\n                    b.Property<bool>(\"IsApproved\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"is_approved\");\n\n                    b.Property<string>(\"PostEntityId\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"character varying(36)\")\n                        .HasColumnName(\"post_entity_id\");\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"character varying(50)\")\n                        .HasColumnName(\"project_id\");\n\n                    b.Property<DateTime>(\"PubDate\")\n                        .HasColumnType(\"timestamp with time zone\")\n                        .HasColumnName(\"pub_date\");\n\n                    b.Property<string>(\"UserAgent\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"user_agent\");\n\n                    b.Property<string>(\"Website\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"website\");\n\n                    b.HasKey(\"Id\")\n                        .HasName(\"pk_cs_post_comment\");\n\n                    b.HasIndex(\"PostEntityId\")\n                        .HasDatabaseName(\"ix_cs_post_comment_post_entity_id\");\n\n                    b.HasIndex(\"ProjectId\")\n                        .HasDatabaseName(\"ix_cs_post_comment_project_id\");\n\n                    b.ToTable(\"cs_post_comment\", (string)null);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"character varying(36)\")\n                        .HasColumnName(\"id\");\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"author\");\n\n                    b.Property<string>(\"AutoTeaser\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"auto_teaser\");\n\n                    b.Property<string>(\"BlogId\")\n                        .IsRequired()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"character varying(50)\")\n                        .HasColumnName(\"blog_id\");\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasMaxLength(500)\n                        .HasColumnType(\"character varying(500)\")\n                        .HasColumnName(\"categories_csv\");\n\n                    b.Property<string>(\"Content\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"content\");\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"character varying(50)\")\n                        .HasDefaultValue(\"html\")\n                        .HasColumnName(\"content_type\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"correlation_key\");\n\n                    b.Property<string>(\"CreatedByUser\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"character varying(100)\")\n                        .HasColumnName(\"created_by_user\");\n\n                    b.Property<DateTime>(\"CreatedUtc\")\n                        .HasColumnType(\"timestamp with time zone\")\n                        .HasColumnName(\"created_utc\");\n\n                    b.Property<string>(\"DraftAuthor\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"draft_author\");\n\n                    b.Property<string>(\"DraftContent\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"draft_content\");\n\n                    b.Property<DateTime?>(\"DraftPubDate\")\n                        .HasColumnType(\"timestamp with time zone\")\n                        .HasColumnName(\"draft_pub_date\");\n\n                    b.Property<string>(\"DraftSerializedModel\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"draft_serialized_model\");\n\n                    b.Property<string>(\"ImageUrl\")\n                        .HasMaxLength(250)\n                        .HasColumnType(\"character varying(250)\")\n                        .HasColumnName(\"image_url\");\n\n                    b.Property<bool>(\"IsFeatured\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"is_featured\");\n\n                    b.Property<bool>(\"IsPublished\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"is_published\");\n\n                    b.Property<DateTime>(\"LastModified\")\n                        .HasColumnType(\"timestamp with time zone\")\n                        .HasColumnName(\"last_modified\");\n\n                    b.Property<string>(\"LastModifiedByUser\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"character varying(100)\")\n                        .HasColumnName(\"last_modified_by_user\");\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasMaxLength(500)\n                        .HasColumnType(\"character varying(500)\")\n                        .HasColumnName(\"meta_description\");\n\n                    b.Property<string>(\"MetaHtml\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"meta_html\");\n\n                    b.Property<string>(\"MetaJson\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"meta_json\");\n\n                    b.Property<DateTime?>(\"PubDate\")\n                        .HasColumnType(\"timestamp with time zone\")\n                        .HasColumnName(\"pub_date\");\n\n                    b.Property<string>(\"Script\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"script\");\n\n                    b.Property<string>(\"SerializedModel\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"serialized_model\");\n\n                    b.Property<string>(\"Serializer\")\n                        .HasMaxLength(50)\n                        .HasColumnType(\"character varying(50)\")\n                        .HasColumnName(\"serializer\");\n\n                    b.Property<bool>(\"ShowComments\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"show_comments\");\n\n                    b.Property<string>(\"Slug\")\n                        .IsRequired()\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"slug\");\n\n                    b.Property<bool>(\"SuppressTeaser\")\n                        .HasColumnType(\"boolean\")\n                        .HasColumnName(\"suppress_teaser\");\n\n                    b.Property<string>(\"TeaserOverride\")\n                        .HasColumnType(\"text\")\n                        .HasColumnName(\"teaser_override\");\n\n                    b.Property<string>(\"TemplateKey\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"template_key\");\n\n                    b.Property<string>(\"ThumbnailUrl\")\n                        .HasMaxLength(250)\n                        .HasColumnType(\"character varying(250)\")\n                        .HasColumnName(\"thumbnail_url\");\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255)\n                        .HasColumnType(\"character varying(255)\")\n                        .HasColumnName(\"title\");\n\n                    b.HasKey(\"Id\")\n                        .HasName(\"pk_cs_post\");\n\n                    b.HasIndex(\"BlogId\")\n                        .HasDatabaseName(\"ix_cs_post_blog_id\");\n\n                    b.HasIndex(\"CorrelationKey\")\n                        .HasDatabaseName(\"ix_cs_post_correlation_key\");\n\n                    b.HasIndex(\"Slug\")\n                        .HasDatabaseName(\"ix_cs_post_slug\");\n\n                    b.ToTable(\"cs_post\", (string)null);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\", null)\n                        .WithMany(\"PageComments\")\n                        .HasForeignKey(\"PageEntityId\")\n                        .OnDelete(DeleteBehavior.Cascade)\n                        .HasConstraintName(\"fk_cs_page_comment_cs_page_page_entity_id\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageResourceEntity\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\", null)\n                        .WithMany(\"PageResources\")\n                        .HasForeignKey(\"PageEntityId\")\n                        .OnDelete(DeleteBehavior.Cascade)\n                        .HasConstraintName(\"fk_cs_page_resource_cs_page_page_entity_id\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\", null)\n                        .WithMany(\"PostComments\")\n                        .HasForeignKey(\"PostEntityId\")\n                        .HasConstraintName(\"fk_cs_post_comment_cs_post_post_entity_id\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\", b =>\n                {\n                    b.Navigation(\"PageComments\");\n\n                    b.Navigation(\"PageResources\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\", b =>\n                {\n                    b.Navigation(\"PostComments\");\n                });\n#pragma warning restore 612, 618\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.PostgreSql/README.md",
    "content": "﻿# cloudscribe.SimpleContent.Storage.EFCore.pgsql\n\n## Dev Notes\n\n### How to generate migrations\n\nopen a command/powershell window on the project folder\n\nSince this project is a netstandard20 class library it is not executable, therefore you have to pass in the --startup-project that is executable\n\ndotnet ef --startup-project ../sourceDev.WebApp migrations add  --context cloudscribe.SimpleContent.Storage.EFCore.PostgreSql.SimpleContentDbContext simplecontent-yyyymmdd\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.PostgreSql/ServiceCollectionExtensions.cs",
    "content": "﻿// Copyright (c) Source Tree Solutions, LLC. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.\n// Author:\t\t\t\t\tJoe Audette\n// Created:\t\t\t\t\t2016-09-02\n// Last Modified:\t\t\t2018-10-09\n// \n\nusing cloudscribe.SimpleContent.Models;\nusing cloudscribe.SimpleContent.Storage.EFCore.Common;\nusing cloudscribe.SimpleContent.Storage.EFCore.PostgreSql;\nusing Microsoft.EntityFrameworkCore;\nusing System;\nusing System.Collections.Generic;\n\nnamespace Microsoft.Extensions.DependencyInjection\n{\n    public static class SimpleContentEFMSSQLServiceCollectionExtensions\n    {\n\n        public static IServiceCollection AddCloudscribeSimpleContentPostgreSqlStorage(\n            this IServiceCollection services,\n            string connectionString,\n            int maxConnectionRetryCount = 0,\n            int maxConnectionRetryDelaySeconds = 30,\n            ICollection<string> transientErrorCodesToAdd = null\n            )\n        {\n            // AddEntityFrameworkNpgsql call should be deprecated:\n            // https://www.npgsql.org/efcore/api/Microsoft.Extensions.DependencyInjection.NpgsqlServiceCollectionExtensions.html\n\n            services // .AddEntityFrameworkNpgsql()\n                .AddDbContext<SimpleContentDbContext>(options =>\n                    options.UseNpgsql(connectionString,\n                    npgsqlOptionsAction: sqlOptions =>\n                    {\n                        sqlOptions.UseQuerySplittingBehavior(QuerySplittingBehavior.SplitQuery);\n\n                        if (maxConnectionRetryCount > 0)\n                        {\n                            //Configuring Connection Resiliency: https://docs.microsoft.com/en-us/ef/core/miscellaneous/connection-resiliency \n                            sqlOptions.EnableRetryOnFailure(\n                                maxRetryCount: maxConnectionRetryCount,\n                                maxRetryDelay: TimeSpan.FromSeconds(maxConnectionRetryDelaySeconds),\n                                errorCodesToAdd: transientErrorCodesToAdd);\n                        }\n\n\n                    }),\n                    optionsLifetime: ServiceLifetime.Singleton\n                    );\n\n            services.AddSingleton<ISimpleContentDbContextFactory, SimpleContentDbContextFactory>();\n\n            services.AddScoped<ISimpleContentDbContext, SimpleContentDbContext>();\n\n            services.AddCloudscribeSimpleContentEFStorageCommon();\n            services.AddScoped<IStorageInfo, StorageInfo>();\n\n            return services;\n        }\n\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.PostgreSql/SimpleContentDbContext.cs",
    "content": "﻿// Copyright (c) Source Tree Solutions, LLC. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.\n// Author:\t\t\t\t\tJoe Audette\n// Created:\t\t\t\t\t2016-11-10\n// Last Modified:\t\t\t2019-03-12\n// \n\nusing cloudscribe.EFCore.PostgreSql.Conventions;\nusing cloudscribe.SimpleContent.Models;\nusing cloudscribe.SimpleContent.Storage.EFCore.Common;\nusing cloudscribe.SimpleContent.Storage.EFCore.Models;\nusing Microsoft.EntityFrameworkCore;\nusing System;\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.PostgreSql\n{\n    public class SimpleContentDbContext : SimpleContentDbContextBase, ISimpleContentDbContext\n    {\n        public SimpleContentDbContext(DbContextOptions<SimpleContentDbContext> options) : base(options)\n        {\n            // AppContext.SetSwitch(\"Npgsql.EnableLegacyTimestampBehavior\", true);\n        }\n\n        protected SimpleContentDbContext() { }   // AppContext.SetSwitch(\"Npgsql.EnableLegacyTimestampBehavior\", true);  }\n\n        protected override void OnModelCreating(ModelBuilder modelBuilder)\n        {\n            base.OnModelCreating(modelBuilder);\n\n            modelBuilder.Entity<ProjectSettings>(entity =>\n            {\n                entity.ToTable(\"cs_ContentProject\");\n\n                entity.HasKey(p => p.Id);\n\n                entity.Property(p => p.Id).HasMaxLength(50);\n\n                entity.Property(p => p.Title).HasMaxLength(255);\n\n                entity.Property(p => p.Publisher).HasMaxLength(255);\n\n                entity.Property(p => p.PublisherLogoUrl).HasMaxLength(255);\n\n                entity.Property(p => p.CopyrightNotice).HasMaxLength(255);\n\n                entity.Property(p => p.ModerateComments).IsRequired();\n\n                entity.Property(p => p.CommentNotificationEmail).HasMaxLength(100);\n\n                entity.Property(p => p.BlogMenuLinksToNewestPost).IsRequired();\n\n                entity.Property(p => p.LocalMediaVirtualPath).HasMaxLength(255);\n\n                entity.Property(p => p.CdnUrl).HasMaxLength(255);\n\n                entity.Property(p => p.PubDateFormat).HasMaxLength(75);\n\n                entity.Property(p => p.IncludePubDateInPostUrls).IsRequired();\n\n                entity.Property(p => p.TimeZoneId).HasMaxLength(100);\n\n                entity.Property(p => p.RecaptchaPrivateKey).HasMaxLength(255);\n\n                entity.Property(p => p.RecaptchaPublicKey).HasMaxLength(255);\n\n                entity.Property(p => p.DefaultPageSlug).HasMaxLength(255);\n\n                entity.Property(p => p.UseDefaultPageAsRootNode).IsRequired();\n\n                entity.Property(p => p.ShowTitle).IsRequired();\n\n                entity.Property(p => p.AddBlogToPagesTree).IsRequired();\n\n                entity.Property(p => p.BlogPageText).HasMaxLength(255);\n\n                entity.Property(p => p.BlogPageNavComponentVisibility).HasMaxLength(255);\n\n                entity.Property(p => p.Image).HasMaxLength(255);\n\n                //entity.Property(p => p.UseMetaDescriptionInFeed).IsRequired();\n\n                entity.Property(p => p.LanguageCode).HasMaxLength(10);\n\n                entity.Property(p => p.ChannelCategoriesCsv).HasMaxLength(255);\n\n                entity.Property(p => p.ManagingEditorEmail).HasMaxLength(100);\n\n                entity.Property(p => p.ChannelRating).HasMaxLength(100);\n\n                entity.Property(p => p.WebmasterEmail).HasMaxLength(100);\n\n                entity.Property(p => p.RemoteFeedUrl).HasMaxLength(255);\n\n                entity.Property(p => p.RemoteFeedProcessorUseAgentFragment).HasMaxLength(255);\n\n                //entity.Property(p => p.EmailFromAddress).HasMaxLength(100);\n\n                //entity.Property(p => p.SmtpServer).HasMaxLength(100);\n\n                //entity.Property(p => p.SmtpPort);\n\n                //entity.Property(p => p.SmtpUser).HasMaxLength(500);\n\n                //entity.Property(p => p.SmtpPassword);\n\n                //entity.Property(p => p.SmtpPreferredEncoding).HasMaxLength(20);\n\n                //entity.Property(p => p.SmtpRequiresAuth).IsRequired();\n\n                //entity.Property(p => p.SmtpUseSsl).IsRequired();\n\n                entity.Property(p => p.PublisherLogoWidth).HasMaxLength(20);\n\n                entity.Property(p => p.PublisherLogoHeight).HasMaxLength(20);\n\n                entity.Property(p => p.PublisherEntityType).HasMaxLength(50);\n\n                entity.Property(p => p.DisqusShortName).HasMaxLength(100);\n\n                entity.Property(p => p.ShowRecentPostsOnDefaultPage).IsRequired();\n\n                entity.Property(p => p.ShowFeaturedPostsOnDefaultPage).IsRequired();\n\n                entity.Property(p => p.FacebookAppId).HasMaxLength(100);\n                entity.Property(p => p.SiteName).HasMaxLength(200);\n                entity.Property(p => p.TwitterCreator).HasMaxLength(100);\n                entity.Property(p => p.TwitterPublisher).HasMaxLength(100);\n\n                entity.Property(p => p.DefaultContentType)\n                .HasMaxLength(50)\n                .HasDefaultValue(\"html\")\n                ;\n\n                entity.Property(p => p.TeaserMode)\n                .HasDefaultValue(TeaserMode.Off);\n\n                entity.Property(p => p.TeaserTruncationMode)\n                .HasDefaultValue(TeaserTruncationMode.Word);\n\n                entity.Property(p => p.TeaserTruncationLength)\n                .HasDefaultValue(20);\n\n                entity.Property(p => p.DefaultFeedItems)\n                .HasDefaultValue(20);\n\n                entity.Property(p => p.MaxFeedItems)\n                .HasDefaultValue(1000);\n\n                entity.Property(p => p.AboutHeading).HasMaxLength(255);\n                entity.Property(p => p.ShowAboutBox).HasDefaultValue(true);\n                entity.Property(p => p.ShowRelatedPosts).HasDefaultValue(true);\n                entity.Property(p => p.ShowArchivedPosts).HasDefaultValue(true);\n                entity.Property(p => p.ShowBlogCategories).HasDefaultValue(true);\n            });\n\n            modelBuilder.Entity<PostEntity>(entity =>\n            {\n                entity.ToTable(\"cs_Post\");\n\n                entity.HasKey(p => p.Id);\n\n                entity.Property(p => p.Id).HasMaxLength(36);\n\n                entity.Property(p => p.CorrelationKey).HasMaxLength(255);\n\n                entity.HasIndex(p => p.CorrelationKey);\n\n                entity.Property(p => p.BlogId).HasMaxLength(50).IsRequired();\n\n                entity.HasIndex(p => p.BlogId);\n\n                entity.Property(p => p.Title).HasMaxLength(255).IsRequired();\n\n                entity.Property(p => p.Author).HasMaxLength(255);\n\n                entity.Property(p => p.Slug).HasMaxLength(255).IsRequired();\n\n                entity.HasIndex(p => p.Slug);\n\n                entity.Property(p => p.MetaDescription).HasMaxLength(500);\n\n                entity.Property(p => p.IsPublished).IsRequired();\n\n                entity.Ignore(p => p.Categories);\n\n                entity.Property(p => p.CategoriesCsv).HasMaxLength(500);\n\n                entity.Ignore(p => p.Comments);\n\n                entity.HasMany(p => p.PostComments)\n                    .WithOne();\n\n                entity.Property(p => p.ShowComments).IsRequired();\n\n                entity.Property(p => p.ImageUrl).HasMaxLength(250);\n\n                entity.Property(p => p.ThumbnailUrl).HasMaxLength(250);\n\n                entity.Property(p => p.IsFeatured).IsRequired();\n\n                entity.Property(p => p.ContentType)\n                .HasMaxLength(50)\n                .HasDefaultValue(\"html\")\n                ;\n\n                entity.Property(p => p.TemplateKey)\n                  .HasMaxLength(255);\n\n                entity.Property(p => p.Serializer)\n                  .HasMaxLength(50);\n\n                entity.Property(p => p.CreatedByUser)\n                  .HasMaxLength(100);\n\n                entity.Property(p => p.LastModifiedByUser)\n                  .HasMaxLength(100);\n\n                entity.Property(p => p.DraftAuthor)\n                .HasMaxLength(255);\n\n\n            });\n\n            modelBuilder.Entity<PostComment>(entity =>\n            {\n                entity.ToTable(\"cs_PostComment\");\n\n                entity.HasKey(p => p.Id);\n                entity.Property(p => p.Id).HasMaxLength(36);\n\n                entity.Ignore(p => p.ContentId); //mapped from postid\n\n                entity.Property(p => p.PostEntityId).HasMaxLength(36);\n                entity.HasIndex(p => p.PostEntityId);\n\n                entity.Property(p => p.ProjectId).HasMaxLength(50).IsRequired();\n\n                entity.HasIndex(p => p.ProjectId);\n\n                entity.Property(p => p.Author).HasMaxLength(255);\n\n                entity.Property(p => p.Email).HasMaxLength(100);\n\n                entity.Property(p => p.Website).HasMaxLength(255);\n\n                entity.Property(p => p.Ip).HasMaxLength(100);\n\n                entity.Property(p => p.UserAgent).HasMaxLength(255);\n\n            });\n\n            modelBuilder.Entity<PostCategory>(entity =>\n            {\n                entity.ToTable(\"cs_PostCategory\");\n\n                entity.HasKey(p => new { p.Value, p.PostEntityId });\n\n                entity.Property(p => p.Value).HasMaxLength(50).IsRequired();\n\n                entity.HasIndex(p => p.Value);\n\n                entity.Property(p => p.PostEntityId).HasMaxLength(36).IsRequired();\n\n                entity.HasIndex(p => p.PostEntityId);\n\n                entity.Property(p => p.ProjectId).HasMaxLength(50).IsRequired();\n\n                entity.HasIndex(p => p.ProjectId);\n            });\n\n            modelBuilder.Entity<PageEntity>(entity =>\n            {\n                entity.ToTable(\"cs_Page\");\n\n                entity.HasKey(p => p.Id);\n                entity.Property(p => p.Id).HasMaxLength(36);\n\n                entity.Property(p => p.ProjectId).HasMaxLength(50).IsRequired();\n\n                entity.HasIndex(p => p.ProjectId);\n\n                entity.Property(p => p.Title).HasMaxLength(255).IsRequired();\n\n                entity.Property(p => p.CorrelationKey).HasMaxLength(255);\n\n                entity.HasIndex(p => p.CorrelationKey);\n\n                entity.Property(p => p.ParentId).HasMaxLength(36);\n\n                entity.HasIndex(p => p.ParentId);\n\n                entity.Property(p => p.ParentSlug).HasMaxLength(255);\n\n                entity.Property(p => p.Author).HasMaxLength(255);\n\n                entity.Property(p => p.Slug).HasMaxLength(255).IsRequired();\n\n                entity.Property(p => p.ExternalUrl).HasMaxLength(255);\n\n                entity.Property(p => p.MetaDescription).HasMaxLength(500);\n\n                entity.Property(p => p.IsPublished).IsRequired();\n\n                entity.Property(p => p.MenuOnly).IsRequired();\n\n                entity.Property(p => p.ShowMenu).IsRequired();\n\n\n                entity.Property(p => p.ShowHeading).IsRequired();\n\n                entity.Property(p => p.ShowPubDate).IsRequired();\n\n                entity.Property(p => p.ShowLastModified).IsRequired();\n\n                entity.Property(p => p.ShowCategories).IsRequired();\n\n                entity.Property(p => p.ShowComments).IsRequired();\n\n                entity.Ignore(p => p.Categories);\n\n                entity.Property(p => p.CategoriesCsv).HasMaxLength(500);\n\n                entity.Property(p => p.MenuFilters).HasMaxLength(500);\n\n                entity.Ignore(p => p.Comments);\n\n                entity.HasMany(p => p.PageComments)\n                    .WithOne().OnDelete(DeleteBehavior.Cascade);\n\n                // a shadow property to persist the categories/tags as a csv\n                //entity.Property<string>(\"CategoryCsv\");\n                entity.Ignore(p => p.Resources);\n\n                entity.HasMany(p => p.PageResources)\n                    .WithOne().OnDelete(DeleteBehavior.Cascade);\n\n                entity.Property(p => p.DisableEditor)\n                  .IsRequired();\n\n                entity.Property(p => p.ContentType)\n               .HasMaxLength(50)\n               .HasDefaultValue(\"html\");\n\n                entity.Property(p => p.TemplateKey)\n                  .HasMaxLength(255);\n\n                entity.Property(p => p.Serializer)\n                  .HasMaxLength(50);\n\n                entity.Property(p => p.CreatedByUser)\n                  .HasMaxLength(100);\n\n                entity.Property(p => p.LastModifiedByUser)\n                  .HasMaxLength(100);\n\n                entity.Property(p => p.DraftAuthor)\n                .HasMaxLength(255);\n\n                entity.Property(p => p.ShowCreatedBy).HasColumnType(\"boolean\");\n                entity.Property(p => p.ShowCreatedDate).HasColumnType(\"boolean\");\n                entity.Property(p => p.ShowLastModifiedBy).HasColumnType(\"boolean\");\n                entity.Property(p => p.ShowLastModifiedDate).HasColumnType(\"boolean\");\n            });\n\n            modelBuilder.Entity<PageComment>(entity =>\n            {\n                entity.ToTable(\"cs_PageComment\");\n\n                entity.HasKey(p => p.Id);\n                entity.Property(p => p.Id).HasMaxLength(36);\n\n                entity.Ignore(p => p.ContentId); //mapped from postid\n\n                entity.Property(p => p.PageEntityId).HasMaxLength(36);\n\n                entity.HasIndex(p => p.PageEntityId);\n\n                entity.Property(p => p.ProjectId).HasMaxLength(50).IsRequired();\n\n                entity.HasIndex(p => p.ProjectId);\n\n                entity.Property(p => p.Author).HasMaxLength(255);\n\n                entity.Property(p => p.Email).HasMaxLength(100);\n\n                entity.Property(p => p.Website).HasMaxLength(255);\n\n                entity.Property(p => p.Ip).HasMaxLength(100);\n\n                entity.Property(p => p.UserAgent).HasMaxLength(255);\n\n            });\n\n            modelBuilder.Entity<PageCategory>(entity =>\n            {\n                entity.ToTable(\"cs_PageCategory\");\n\n                entity.HasKey(p => new { p.Value, p.PageEntityId });\n\n                entity.Property(p => p.Value).HasMaxLength(50).IsRequired();\n\n                entity.HasIndex(p => p.Value);\n\n                entity.Property(p => p.PageEntityId).HasMaxLength(36).IsRequired();\n\n                entity.HasIndex(p => p.PageEntityId);\n\n                entity.Property(p => p.ProjectId).HasMaxLength(50).IsRequired();\n\n                entity.HasIndex(p => p.ProjectId);\n            });\n\n            modelBuilder.Entity<PageResourceEntity>(entity =>\n            {\n                entity.ToTable(\"cs_PageResource\");\n\n                entity.HasKey(p => p.Id);\n                entity.Property(p => p.Id).HasMaxLength(36);\n\n                entity.Ignore(p => p.ContentId); //mapped from pageEntityid\n\n                entity.Property(p => p.PageEntityId).HasMaxLength(36);\n\n                entity.HasIndex(p => p.PageEntityId);\n\n                entity.Property(p => p.Environment).HasMaxLength(15).IsRequired();\n\n\n                entity.Property(p => p.Sort).IsRequired();\n\n                entity.Property(p => p.Type).HasMaxLength(10).IsRequired();\n\n                entity.Property(p => p.Url).HasMaxLength(255).IsRequired();\n\n\n            });\n\n            modelBuilder.Entity<ContentHistory>(entity =>\n            {\n                entity.ToTable(\"cs_ContentHistory\");\n\n                entity.HasKey(p => p.Id);\n\n                entity.Property(p => p.Id).HasMaxLength(36);\n\n                entity.Property(p => p.ProjectId).HasMaxLength(50);\n\n                entity.Property(p => p.CorrelationKey).HasMaxLength(255);\n\n                entity.HasIndex(p => p.CorrelationKey);\n\n                entity.Property(p => p.ContentId)\n                .HasMaxLength(36)\n                .IsRequired();\n\n                entity.HasIndex(p => p.ContentId);\n\n                entity.Property(p => p.Title)\n                .HasMaxLength(255)\n                .IsRequired();\n\n                entity.HasIndex(p => p.Title);\n\n                entity.Property(p => p.Slug)\n                .HasMaxLength(255);\n\n                entity.Property(p => p.Author)\n                .HasMaxLength(255);\n\n                entity.Property(p => p.IsPublished)\n                .IsRequired();\n\n                entity.Property(p => p.ContentType)\n                   .HasMaxLength(50)\n                   .HasDefaultValue(\"html\");\n\n                entity.Property(p => p.CreatedByUser)\n                  .HasMaxLength(100);\n\n                entity.HasIndex(p => p.CreatedByUser);\n\n                entity.Property(p => p.LastModifiedByUser)\n                  .HasMaxLength(100);\n\n                entity.HasIndex(p => p.LastModifiedByUser);\n\n                entity.Property(p => p.DraftAuthor)\n                .HasMaxLength(255);\n\n                entity.Property(p => p.ContentSource)\n                .HasMaxLength(50)\n                .IsRequired();\n\n                entity.HasIndex(p => p.ContentSource);\n\n                entity.Property(p => p.DraftAuthor)\n                .HasMaxLength(255);\n\n                entity.Property(p => p.ArchivedBy)\n                .HasMaxLength(255);\n\n                entity.Property(p => p.ParentSlug).HasMaxLength(255);\n                entity.Property(p => p.ParentId).HasMaxLength(255);\n                entity.Property(p => p.TemplateKey).HasMaxLength(255);\n                entity.Property(p => p.Serializer).HasMaxLength(50);\n\n\n            });\n\n            modelBuilder.ApplySnakeCaseConventions();\n        }\n\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.PostgreSql/SimpleContentDbContextFactory.cs",
    "content": "﻿using cloudscribe.SimpleContent.Storage.EFCore.Common;\nusing Microsoft.EntityFrameworkCore;\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.PostgreSql\n{\n    public class SimpleContentDbContextFactory : ISimpleContentDbContextFactory\n    {\n        public SimpleContentDbContextFactory(DbContextOptions<SimpleContentDbContext> options)\n        {\n            _options = options;\n        }\n\n        private readonly DbContextOptions<SimpleContentDbContext> _options;\n\n        public ISimpleContentDbContext CreateContext()\n        {\n            return new SimpleContentDbContext(_options);\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.PostgreSql/StorageInfo.cs",
    "content": "﻿using cloudscribe.SimpleContent.Models;\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.PostgreSql\n{\n    public class StorageInfo : IStorageInfo\n    {\n        public string StoragePlatform { get { return \"Entity Framework with PostgreSql\"; } }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.PostgreSql/cloudscribe.SimpleContent.Storage.EFCore.PostgreSql.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <Description>PostgreSql Entity Framework Core implementation of cloudscribe SimpleContent commands and queries</Description>\n    <Version>10.1.0</Version>\n    <TargetFramework>net10.0</TargetFramework>\n    <Authors>Joe Audette</Authors>\n    <PackageTags>cloudscribe;commands;queries;ef</PackageTags>\n    <PackageIcon>icon.png</PackageIcon>\n    <PackageProjectUrl>https://github.com/cloudscribe/cloudscribe.SimpleContent</PackageProjectUrl>\n    <PackageLicenseExpression>Apache-2.0</PackageLicenseExpression>\n    <RepositoryUrl>https://github.com/cloudscribe/cloudscribe.SimpleContent.git</RepositoryUrl>\n    <RepositoryType>git</RepositoryType>\n\n    <PackageReadmeFile>README.md</PackageReadmeFile>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <None Include=\"icon.png\" Pack=\"true\" PackagePath=\"\\\"/>\n  </ItemGroup>\n\n  <ItemGroup>\n    <ProjectReference Include=\"..\\cloudscribe.SimpleContent.Models\\cloudscribe.SimpleContent.Models.csproj\" />\n    <ProjectReference Include=\"..\\cloudscribe.SimpleContent.Storage.EFCore.Common\\cloudscribe.SimpleContent.Storage.EFCore.Common.csproj\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"Microsoft.EntityFrameworkCore\" Version=\"10.0.0\" />\n    <PackageReference Include=\"Microsoft.EntityFrameworkCore.Design\" Version=\"10.0.0\" />\n    <PackageReference Include=\"Npgsql.EntityFrameworkCore.PostgreSQL\" Version=\"10.0.0\" />\n    <PackageReference Include=\"cloudscribe.EFCore.PostgreSql.Conventions\" Version=\"10.1.0\" />\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"README.md\" Pack=\"true\" PackagePath=\"/\" />\n  </ItemGroup>\n</Project>\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.SQLite/DesignTimeFactory.cs",
    "content": "﻿using Microsoft.EntityFrameworkCore;\nusing Microsoft.EntityFrameworkCore.Design;\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.SQLite\n{\n    public class DesignTimeFactory : IDesignTimeDbContextFactory<SimpleContentDbContext>\n    {\n        public SimpleContentDbContext CreateDbContext(string[] args)\n        {\n            var builder = new DbContextOptionsBuilder<SimpleContentDbContext>();\n            builder.UseSqlite(\"Data Source=cloudscribe.db\");\n            return new SimpleContentDbContext(builder.Options);\n        }\n\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.SQLite/Migrations/20171222135806_Initial.Designer.cs",
    "content": "﻿// <auto-generated />\nusing cloudscribe.SimpleContent.Storage.EFCore.SQLite;\nusing Microsoft.EntityFrameworkCore;\nusing Microsoft.EntityFrameworkCore.Infrastructure;\nusing Microsoft.EntityFrameworkCore.Metadata;\nusing Microsoft.EntityFrameworkCore.Migrations;\nusing Microsoft.EntityFrameworkCore.Storage;\nusing Microsoft.EntityFrameworkCore.Storage.Internal;\nusing System;\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.SQLite.Migrations\n{\n    [DbContext(typeof(SimpleContentDbContext))]\n    [Migration(\"20171222135806_Initial\")]\n    partial class Initial\n    {\n        protected override void BuildTargetModel(ModelBuilder modelBuilder)\n        {\n#pragma warning disable 612, 618\n            modelBuilder\n                .HasAnnotation(\"ProductVersion\", \"2.0.1-rtm-125\");\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Models.ProjectSettings\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<bool>(\"AddBlogToPagesTree\");\n\n                    b.Property<bool>(\"BlogMenuLinksToNewestPost\");\n\n                    b.Property<string>(\"BlogPageNavComponentVisibility\")\n                        .HasMaxLength(255);\n\n                    b.Property<int>(\"BlogPagePosition\");\n\n                    b.Property<string>(\"BlogPageText\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CdnUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ChannelCategoriesCsv\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ChannelRating\")\n                        .HasMaxLength(100);\n\n                    b.Property<int>(\"ChannelTimeToLive\");\n\n                    b.Property<string>(\"CommentNotificationEmail\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"CopyrightNotice\")\n                        .HasMaxLength(255);\n\n                    b.Property<int>(\"DaysToComment\");\n\n                    b.Property<string>(\"DefaultContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue(\"html\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"DefaultPageSlug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Description\");\n\n                    b.Property<string>(\"DisqusShortName\")\n                        .HasMaxLength(100);\n\n                    //b.Property<string>(\"EmailFromAddress\")\n                    //    .HasMaxLength(100);\n\n                    b.Property<string>(\"FacebookAppId\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Image\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"IncludePubDateInPostUrls\");\n\n                    b.Property<string>(\"LanguageCode\")\n                        .HasMaxLength(10);\n\n                    b.Property<string>(\"LocalMediaVirtualPath\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ManagingEditorEmail\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"ModerateComments\");\n\n                    b.Property<int>(\"PostsPerPage\");\n\n                    b.Property<string>(\"PubDateFormat\")\n                        .HasMaxLength(75);\n\n                    b.Property<string>(\"Publisher\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"PublisherEntityType\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PublisherLogoHeight\")\n                        .HasMaxLength(20);\n\n                    b.Property<string>(\"PublisherLogoUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"PublisherLogoWidth\")\n                        .HasMaxLength(20);\n\n                    b.Property<string>(\"RecaptchaPrivateKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RecaptchaPublicKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RemoteFeedProcessorUseAgentFragment\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RemoteFeedUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"ShowFeaturedPostsOnDefaultPage\");\n\n                    b.Property<bool>(\"ShowRecentPostsOnDefaultPage\");\n\n                    b.Property<bool>(\"ShowTitle\");\n\n                    b.Property<string>(\"SiteName\")\n                        .HasMaxLength(200);\n\n                    //b.Property<string>(\"SmtpPassword\");\n\n                    //b.Property<int>(\"SmtpPort\");\n\n                    //b.Property<string>(\"SmtpPreferredEncoding\")\n                    //    .HasMaxLength(20);\n\n                    //b.Property<bool>(\"SmtpRequiresAuth\");\n\n                    //b.Property<string>(\"SmtpServer\")\n                    //    .HasMaxLength(100);\n\n                    //b.Property<bool>(\"SmtpUseSsl\");\n\n                    //b.Property<string>(\"SmtpUser\")\n                    //    .HasMaxLength(500);\n\n                    b.Property<string>(\"TimeZoneId\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Title\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"TwitterCreator\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"TwitterPublisher\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"UseDefaultPageAsRootNode\");\n\n                   // b.Property<bool>(\"UseMetaDescriptionInFeed\");\n\n                    b.Property<string>(\"WebmasterEmail\")\n                        .HasMaxLength(100);\n\n                    b.HasKey(\"Id\");\n\n                    b.ToTable(\"cs_ContentProject\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageCategory\", b =>\n                {\n                    b.Property<string>(\"Value\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.HasKey(\"Value\", \"PageEntityId\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.HasIndex(\"Value\");\n\n                    b.ToTable(\"cs_PageCategory\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"Email\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Ip\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"IsAdmin\");\n\n                    b.Property<bool>(\"IsApproved\");\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<DateTime>(\"PubDate\");\n\n                    b.Property<string>(\"UserAgent\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Website\")\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_PageComment\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue(\"html\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"DisableEditor\");\n\n                    b.Property<string>(\"ExternalUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"IsPublished\");\n\n                    b.Property<DateTime>(\"LastModified\");\n\n                    b.Property<string>(\"MenuFilters\")\n                        .HasMaxLength(500);\n\n                    b.Property<bool>(\"MenuOnly\");\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"MetaHtml\");\n\n                    b.Property<string>(\"MetaJson\");\n\n                    b.Property<int>(\"PageOrder\");\n\n                    b.Property<string>(\"ParentId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ParentSlug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<DateTime?>(\"PubDate\");\n\n                    b.Property<bool>(\"ShowCategories\");\n\n                    b.Property<bool>(\"ShowComments\");\n\n                    b.Property<bool>(\"ShowHeading\");\n\n                    b.Property<bool>(\"ShowLastModified\");\n\n                    b.Property<bool>(\"ShowMenu\");\n\n                    b.Property<bool>(\"ShowPubDate\");\n\n                    b.Property<string>(\"Slug\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ViewRoles\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"ParentId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_Page\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageResourceEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Environment\")\n                        .IsRequired()\n                        .HasMaxLength(15);\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<int>(\"Sort\");\n\n                    b.Property<string>(\"Type\")\n                        .IsRequired()\n                        .HasMaxLength(10);\n\n                    b.Property<string>(\"Url\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.ToTable(\"cs_PageResource\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostCategory\", b =>\n                {\n                    b.Property<string>(\"Value\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PostEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.HasKey(\"Value\", \"PostEntityId\");\n\n                    b.HasIndex(\"PostEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.HasIndex(\"Value\");\n\n                    b.ToTable(\"cs_PostCategory\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"Email\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Ip\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"IsAdmin\");\n\n                    b.Property<bool>(\"IsApproved\");\n\n                    b.Property<string>(\"PostEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<DateTime>(\"PubDate\");\n\n                    b.Property<string>(\"UserAgent\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Website\")\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PostEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_PostComment\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"BlogId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue(\"html\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ImageUrl\")\n                        .HasMaxLength(250);\n\n                    b.Property<bool>(\"IsFeatured\");\n\n                    b.Property<bool>(\"IsPublished\");\n\n                    b.Property<DateTime>(\"LastModified\");\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"MetaHtml\");\n\n                    b.Property<string>(\"MetaJson\");\n\n                    b.Property<DateTime?>(\"PubDate\");\n\n                    b.Property<string>(\"Slug\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ThumbnailUrl\")\n                        .HasMaxLength(250);\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"BlogId\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"Slug\");\n\n                    b.ToTable(\"cs_Post\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\")\n                        .WithMany(\"PageComments\")\n                        .HasForeignKey(\"PageEntityId\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageResourceEntity\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\")\n                        .WithMany(\"PageResources\")\n                        .HasForeignKey(\"PageEntityId\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\")\n                        .WithMany(\"PostComments\")\n                        .HasForeignKey(\"PostEntityId\");\n                });\n#pragma warning restore 612, 618\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.SQLite/Migrations/20171222135806_Initial.cs",
    "content": "﻿using Microsoft.EntityFrameworkCore.Migrations;\nusing System;\nusing System.Collections.Generic;\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.SQLite.Migrations\n{\n    public partial class Initial : Migration\n    {\n        protected override void Up(MigrationBuilder migrationBuilder)\n        {\n            migrationBuilder.CreateTable(\n                name: \"cs_ContentProject\",\n                columns: table => new\n                {\n                    Id = table.Column<string>(maxLength: 36, nullable: false),\n                    AddBlogToPagesTree = table.Column<bool>(nullable: false),\n                    BlogMenuLinksToNewestPost = table.Column<bool>(nullable: false),\n                    BlogPageNavComponentVisibility = table.Column<string>(maxLength: 255, nullable: true),\n                    BlogPagePosition = table.Column<int>(nullable: false),\n                    BlogPageText = table.Column<string>(maxLength: 255, nullable: true),\n                    CdnUrl = table.Column<string>(maxLength: 255, nullable: true),\n                    ChannelCategoriesCsv = table.Column<string>(maxLength: 255, nullable: true),\n                    ChannelRating = table.Column<string>(maxLength: 100, nullable: true),\n                    ChannelTimeToLive = table.Column<int>(nullable: false),\n                    CommentNotificationEmail = table.Column<string>(maxLength: 100, nullable: true),\n                    CopyrightNotice = table.Column<string>(maxLength: 255, nullable: true),\n                    DaysToComment = table.Column<int>(nullable: false),\n                    DefaultContentType = table.Column<string>(maxLength: 50, nullable: true, defaultValue: \"html\"),\n                    DefaultPageSlug = table.Column<string>(maxLength: 255, nullable: true),\n                    Description = table.Column<string>(nullable: true),\n                    DisqusShortName = table.Column<string>(maxLength: 100, nullable: true),\n                    //EmailFromAddress = table.Column<string>(maxLength: 100, nullable: true),\n                    FacebookAppId = table.Column<string>(maxLength: 100, nullable: true),\n                    Image = table.Column<string>(maxLength: 255, nullable: true),\n                    IncludePubDateInPostUrls = table.Column<bool>(nullable: false),\n                    LanguageCode = table.Column<string>(maxLength: 10, nullable: true),\n                    LocalMediaVirtualPath = table.Column<string>(maxLength: 255, nullable: true),\n                    ManagingEditorEmail = table.Column<string>(maxLength: 100, nullable: true),\n                    ModerateComments = table.Column<bool>(nullable: false),\n                    PostsPerPage = table.Column<int>(nullable: false),\n                    PubDateFormat = table.Column<string>(maxLength: 75, nullable: true),\n                    Publisher = table.Column<string>(maxLength: 255, nullable: true),\n                    PublisherEntityType = table.Column<string>(maxLength: 50, nullable: true),\n                    PublisherLogoHeight = table.Column<string>(maxLength: 20, nullable: true),\n                    PublisherLogoUrl = table.Column<string>(maxLength: 255, nullable: true),\n                    PublisherLogoWidth = table.Column<string>(maxLength: 20, nullable: true),\n                    RecaptchaPrivateKey = table.Column<string>(maxLength: 255, nullable: true),\n                    RecaptchaPublicKey = table.Column<string>(maxLength: 255, nullable: true),\n                    RemoteFeedProcessorUseAgentFragment = table.Column<string>(maxLength: 255, nullable: true),\n                    RemoteFeedUrl = table.Column<string>(maxLength: 255, nullable: true),\n                    ShowFeaturedPostsOnDefaultPage = table.Column<bool>(nullable: false),\n                    ShowRecentPostsOnDefaultPage = table.Column<bool>(nullable: false),\n                    ShowTitle = table.Column<bool>(nullable: false),\n                    SiteName = table.Column<string>(maxLength: 200, nullable: true),\n                    //SmtpPassword = table.Column<string>(nullable: true),\n                   // SmtpPort = table.Column<int>(nullable: false),\n                    //SmtpPreferredEncoding = table.Column<string>(maxLength: 20, nullable: true),\n                    //SmtpRequiresAuth = table.Column<bool>(nullable: false),\n                    //SmtpServer = table.Column<string>(maxLength: 100, nullable: true),\n                    //SmtpUseSsl = table.Column<bool>(nullable: false),\n                   // SmtpUser = table.Column<string>(maxLength: 500, nullable: true),\n                    TimeZoneId = table.Column<string>(maxLength: 100, nullable: true),\n                    Title = table.Column<string>(maxLength: 255, nullable: true),\n                    TwitterCreator = table.Column<string>(maxLength: 100, nullable: true),\n                    TwitterPublisher = table.Column<string>(maxLength: 100, nullable: true),\n                    UseDefaultPageAsRootNode = table.Column<bool>(nullable: false),\n                    //UseMetaDescriptionInFeed = table.Column<bool>(nullable: false),\n                    WebmasterEmail = table.Column<string>(maxLength: 100, nullable: true)\n                },\n                constraints: table =>\n                {\n                    table.PrimaryKey(\"PK_cs_ContentProject\", x => x.Id);\n                });\n\n            migrationBuilder.CreateTable(\n                name: \"cs_Page\",\n                columns: table => new\n                {\n                    Id = table.Column<string>(maxLength: 36, nullable: false),\n                    Author = table.Column<string>(maxLength: 255, nullable: true),\n                    CategoriesCsv = table.Column<string>(maxLength: 500, nullable: true),\n                    Content = table.Column<string>(nullable: true),\n                    ContentType = table.Column<string>(maxLength: 50, nullable: true, defaultValue: \"html\"),\n                    CorrelationKey = table.Column<string>(maxLength: 255, nullable: true),\n                    DisableEditor = table.Column<bool>(nullable: false),\n                    ExternalUrl = table.Column<string>(maxLength: 255, nullable: true),\n                    IsPublished = table.Column<bool>(nullable: false),\n                    LastModified = table.Column<DateTime>(nullable: false),\n                    MenuFilters = table.Column<string>(maxLength: 500, nullable: true),\n                    MenuOnly = table.Column<bool>(nullable: false),\n                    MetaDescription = table.Column<string>(maxLength: 500, nullable: true),\n                    MetaHtml = table.Column<string>(nullable: true),\n                    MetaJson = table.Column<string>(nullable: true),\n                    PageOrder = table.Column<int>(nullable: false),\n                    ParentId = table.Column<string>(maxLength: 36, nullable: true),\n                    ParentSlug = table.Column<string>(maxLength: 255, nullable: true),\n                    ProjectId = table.Column<string>(maxLength: 36, nullable: false),\n                    PubDate = table.Column<DateTime>(nullable: true),\n                    ShowCategories = table.Column<bool>(nullable: false),\n                    ShowComments = table.Column<bool>(nullable: false),\n                    ShowHeading = table.Column<bool>(nullable: false),\n                    ShowLastModified = table.Column<bool>(nullable: false),\n                    ShowMenu = table.Column<bool>(nullable: false),\n                    ShowPubDate = table.Column<bool>(nullable: false),\n                    Slug = table.Column<string>(maxLength: 255, nullable: false),\n                    Title = table.Column<string>(maxLength: 255, nullable: false),\n                    ViewRoles = table.Column<string>(nullable: true)\n                },\n                constraints: table =>\n                {\n                    table.PrimaryKey(\"PK_cs_Page\", x => x.Id);\n                });\n\n            migrationBuilder.CreateTable(\n                name: \"cs_PageCategory\",\n                columns: table => new\n                {\n                    Value = table.Column<string>(maxLength: 50, nullable: false),\n                    PageEntityId = table.Column<string>(maxLength: 36, nullable: false),\n                    ProjectId = table.Column<string>(maxLength: 36, nullable: false)\n                },\n                constraints: table =>\n                {\n                    table.PrimaryKey(\"PK_cs_PageCategory\", x => new { x.Value, x.PageEntityId });\n                });\n\n            migrationBuilder.CreateTable(\n                name: \"cs_Post\",\n                columns: table => new\n                {\n                    Id = table.Column<string>(maxLength: 36, nullable: false),\n                    Author = table.Column<string>(maxLength: 255, nullable: true),\n                    BlogId = table.Column<string>(maxLength: 36, nullable: false),\n                    CategoriesCsv = table.Column<string>(maxLength: 500, nullable: true),\n                    Content = table.Column<string>(nullable: true),\n                    ContentType = table.Column<string>(maxLength: 50, nullable: true, defaultValue: \"html\"),\n                    CorrelationKey = table.Column<string>(maxLength: 255, nullable: true),\n                    ImageUrl = table.Column<string>(maxLength: 250, nullable: true),\n                    IsFeatured = table.Column<bool>(nullable: false),\n                    IsPublished = table.Column<bool>(nullable: false),\n                    LastModified = table.Column<DateTime>(nullable: false),\n                    MetaDescription = table.Column<string>(maxLength: 500, nullable: true),\n                    MetaHtml = table.Column<string>(nullable: true),\n                    MetaJson = table.Column<string>(nullable: true),\n                    PubDate = table.Column<DateTime>(nullable: true),\n                    Slug = table.Column<string>(maxLength: 255, nullable: false),\n                    ThumbnailUrl = table.Column<string>(maxLength: 250, nullable: true),\n                    Title = table.Column<string>(maxLength: 255, nullable: false)\n                },\n                constraints: table =>\n                {\n                    table.PrimaryKey(\"PK_cs_Post\", x => x.Id);\n                });\n\n            migrationBuilder.CreateTable(\n                name: \"cs_PostCategory\",\n                columns: table => new\n                {\n                    Value = table.Column<string>(maxLength: 50, nullable: false),\n                    PostEntityId = table.Column<string>(maxLength: 36, nullable: false),\n                    ProjectId = table.Column<string>(maxLength: 36, nullable: false)\n                },\n                constraints: table =>\n                {\n                    table.PrimaryKey(\"PK_cs_PostCategory\", x => new { x.Value, x.PostEntityId });\n                });\n\n            migrationBuilder.CreateTable(\n                name: \"cs_PageComment\",\n                columns: table => new\n                {\n                    Id = table.Column<string>(maxLength: 36, nullable: false),\n                    Author = table.Column<string>(maxLength: 255, nullable: true),\n                    Content = table.Column<string>(nullable: true),\n                    Email = table.Column<string>(maxLength: 100, nullable: true),\n                    Ip = table.Column<string>(maxLength: 100, nullable: true),\n                    IsAdmin = table.Column<bool>(nullable: false),\n                    IsApproved = table.Column<bool>(nullable: false),\n                    PageEntityId = table.Column<string>(maxLength: 36, nullable: true),\n                    ProjectId = table.Column<string>(maxLength: 36, nullable: false),\n                    PubDate = table.Column<DateTime>(nullable: false),\n                    UserAgent = table.Column<string>(maxLength: 255, nullable: true),\n                    Website = table.Column<string>(maxLength: 255, nullable: true)\n                },\n                constraints: table =>\n                {\n                    table.PrimaryKey(\"PK_cs_PageComment\", x => x.Id);\n                    table.ForeignKey(\n                        name: \"FK_cs_PageComment_cs_Page_PageEntityId\",\n                        column: x => x.PageEntityId,\n                        principalTable: \"cs_Page\",\n                        principalColumn: \"Id\",\n                        onDelete: ReferentialAction.Cascade);\n                });\n\n            migrationBuilder.CreateTable(\n                name: \"cs_PageResource\",\n                columns: table => new\n                {\n                    Id = table.Column<string>(maxLength: 36, nullable: false),\n                    Environment = table.Column<string>(maxLength: 15, nullable: false),\n                    PageEntityId = table.Column<string>(maxLength: 36, nullable: true),\n                    Sort = table.Column<int>(nullable: false),\n                    Type = table.Column<string>(maxLength: 10, nullable: false),\n                    Url = table.Column<string>(maxLength: 255, nullable: false)\n                },\n                constraints: table =>\n                {\n                    table.PrimaryKey(\"PK_cs_PageResource\", x => x.Id);\n                    table.ForeignKey(\n                        name: \"FK_cs_PageResource_cs_Page_PageEntityId\",\n                        column: x => x.PageEntityId,\n                        principalTable: \"cs_Page\",\n                        principalColumn: \"Id\",\n                        onDelete: ReferentialAction.Cascade);\n                });\n\n            migrationBuilder.CreateTable(\n                name: \"cs_PostComment\",\n                columns: table => new\n                {\n                    Id = table.Column<string>(maxLength: 36, nullable: false),\n                    Author = table.Column<string>(maxLength: 255, nullable: true),\n                    Content = table.Column<string>(nullable: true),\n                    Email = table.Column<string>(maxLength: 100, nullable: true),\n                    Ip = table.Column<string>(maxLength: 100, nullable: true),\n                    IsAdmin = table.Column<bool>(nullable: false),\n                    IsApproved = table.Column<bool>(nullable: false),\n                    PostEntityId = table.Column<string>(maxLength: 36, nullable: true),\n                    ProjectId = table.Column<string>(maxLength: 36, nullable: false),\n                    PubDate = table.Column<DateTime>(nullable: false),\n                    UserAgent = table.Column<string>(maxLength: 255, nullable: true),\n                    Website = table.Column<string>(maxLength: 255, nullable: true)\n                },\n                constraints: table =>\n                {\n                    table.PrimaryKey(\"PK_cs_PostComment\", x => x.Id);\n                    table.ForeignKey(\n                        name: \"FK_cs_PostComment_cs_Post_PostEntityId\",\n                        column: x => x.PostEntityId,\n                        principalTable: \"cs_Post\",\n                        principalColumn: \"Id\",\n                        onDelete: ReferentialAction.Cascade);\n                });\n\n            migrationBuilder.CreateIndex(\n                name: \"IX_cs_Page_CorrelationKey\",\n                table: \"cs_Page\",\n                column: \"CorrelationKey\");\n\n            migrationBuilder.CreateIndex(\n                name: \"IX_cs_Page_ParentId\",\n                table: \"cs_Page\",\n                column: \"ParentId\");\n\n            migrationBuilder.CreateIndex(\n                name: \"IX_cs_Page_ProjectId\",\n                table: \"cs_Page\",\n                column: \"ProjectId\");\n\n            migrationBuilder.CreateIndex(\n                name: \"IX_cs_PageCategory_PageEntityId\",\n                table: \"cs_PageCategory\",\n                column: \"PageEntityId\");\n\n            migrationBuilder.CreateIndex(\n                name: \"IX_cs_PageCategory_ProjectId\",\n                table: \"cs_PageCategory\",\n                column: \"ProjectId\");\n\n            migrationBuilder.CreateIndex(\n                name: \"IX_cs_PageCategory_Value\",\n                table: \"cs_PageCategory\",\n                column: \"Value\");\n\n            migrationBuilder.CreateIndex(\n                name: \"IX_cs_PageComment_PageEntityId\",\n                table: \"cs_PageComment\",\n                column: \"PageEntityId\");\n\n            migrationBuilder.CreateIndex(\n                name: \"IX_cs_PageComment_ProjectId\",\n                table: \"cs_PageComment\",\n                column: \"ProjectId\");\n\n            migrationBuilder.CreateIndex(\n                name: \"IX_cs_PageResource_PageEntityId\",\n                table: \"cs_PageResource\",\n                column: \"PageEntityId\");\n\n            migrationBuilder.CreateIndex(\n                name: \"IX_cs_Post_BlogId\",\n                table: \"cs_Post\",\n                column: \"BlogId\");\n\n            migrationBuilder.CreateIndex(\n                name: \"IX_cs_Post_CorrelationKey\",\n                table: \"cs_Post\",\n                column: \"CorrelationKey\");\n\n            migrationBuilder.CreateIndex(\n                name: \"IX_cs_Post_Slug\",\n                table: \"cs_Post\",\n                column: \"Slug\");\n\n            migrationBuilder.CreateIndex(\n                name: \"IX_cs_PostCategory_PostEntityId\",\n                table: \"cs_PostCategory\",\n                column: \"PostEntityId\");\n\n            migrationBuilder.CreateIndex(\n                name: \"IX_cs_PostCategory_ProjectId\",\n                table: \"cs_PostCategory\",\n                column: \"ProjectId\");\n\n            migrationBuilder.CreateIndex(\n                name: \"IX_cs_PostCategory_Value\",\n                table: \"cs_PostCategory\",\n                column: \"Value\");\n\n            migrationBuilder.CreateIndex(\n                name: \"IX_cs_PostComment_PostEntityId\",\n                table: \"cs_PostComment\",\n                column: \"PostEntityId\");\n\n            migrationBuilder.CreateIndex(\n                name: \"IX_cs_PostComment_ProjectId\",\n                table: \"cs_PostComment\",\n                column: \"ProjectId\");\n        }\n\n        protected override void Down(MigrationBuilder migrationBuilder)\n        {\n            migrationBuilder.DropTable(\n                name: \"cs_ContentProject\");\n\n            migrationBuilder.DropTable(\n                name: \"cs_PageCategory\");\n\n            migrationBuilder.DropTable(\n                name: \"cs_PageComment\");\n\n            migrationBuilder.DropTable(\n                name: \"cs_PageResource\");\n\n            migrationBuilder.DropTable(\n                name: \"cs_PostCategory\");\n\n            migrationBuilder.DropTable(\n                name: \"cs_PostComment\");\n\n            migrationBuilder.DropTable(\n                name: \"cs_Page\");\n\n            migrationBuilder.DropTable(\n                name: \"cs_Post\");\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.SQLite/Migrations/20180122125428_changes20180122.Designer.cs",
    "content": "﻿// <auto-generated />\nusing cloudscribe.SimpleContent.Models;\nusing cloudscribe.SimpleContent.Storage.EFCore.SQLite;\nusing Microsoft.EntityFrameworkCore;\nusing Microsoft.EntityFrameworkCore.Infrastructure;\nusing Microsoft.EntityFrameworkCore.Metadata;\nusing Microsoft.EntityFrameworkCore.Migrations;\nusing Microsoft.EntityFrameworkCore.Storage;\nusing Microsoft.EntityFrameworkCore.Storage.Internal;\nusing System;\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.SQLite.Migrations\n{\n    [DbContext(typeof(SimpleContentDbContext))]\n    [Migration(\"20180122125428_changes20180122\")]\n    partial class changes20180122\n    {\n        protected override void BuildTargetModel(ModelBuilder modelBuilder)\n        {\n#pragma warning disable 612, 618\n            modelBuilder\n                .HasAnnotation(\"ProductVersion\", \"2.0.1-rtm-125\");\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Models.ProjectSettings\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<bool>(\"AddBlogToPagesTree\");\n\n                    b.Property<byte>(\"TeaserMode\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue((byte)0);\n\n                    b.Property<bool>(\"BlogMenuLinksToNewestPost\");\n\n                    b.Property<string>(\"BlogPageNavComponentVisibility\")\n                        .HasMaxLength(255);\n\n                    b.Property<int>(\"BlogPagePosition\");\n\n                    b.Property<string>(\"BlogPageText\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CdnUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ChannelCategoriesCsv\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ChannelRating\")\n                        .HasMaxLength(100);\n\n                    b.Property<int>(\"ChannelTimeToLive\");\n\n                    b.Property<string>(\"CommentNotificationEmail\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"CopyrightNotice\")\n                        .HasMaxLength(255);\n\n                    b.Property<int>(\"DaysToComment\");\n\n                    b.Property<string>(\"DefaultContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue(\"html\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"DefaultPageSlug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Description\");\n\n                    b.Property<string>(\"DisqusShortName\")\n                        .HasMaxLength(100);\n\n                    //b.Property<string>(\"EmailFromAddress\")\n                    //    .HasMaxLength(100);\n\n                    b.Property<string>(\"FacebookAppId\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Image\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"IncludePubDateInPostUrls\");\n\n                    b.Property<string>(\"LanguageCode\")\n                        .HasMaxLength(10);\n\n                    b.Property<string>(\"LocalMediaVirtualPath\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ManagingEditorEmail\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"ModerateComments\");\n\n                    b.Property<int>(\"PostsPerPage\");\n\n                    b.Property<string>(\"PubDateFormat\")\n                        .HasMaxLength(75);\n\n                    b.Property<string>(\"Publisher\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"PublisherEntityType\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PublisherLogoHeight\")\n                        .HasMaxLength(20);\n\n                    b.Property<string>(\"PublisherLogoUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"PublisherLogoWidth\")\n                        .HasMaxLength(20);\n\n                    b.Property<string>(\"RecaptchaPrivateKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RecaptchaPublicKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RemoteFeedProcessorUseAgentFragment\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RemoteFeedUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"ShowFeaturedPostsOnDefaultPage\");\n\n                    b.Property<bool>(\"ShowRecentPostsOnDefaultPage\");\n\n                    b.Property<bool>(\"ShowTitle\");\n\n                    b.Property<string>(\"SiteName\")\n                        .HasMaxLength(200);\n\n                    //b.Property<string>(\"SmtpPassword\");\n\n                    //b.Property<int>(\"SmtpPort\");\n\n                    //b.Property<string>(\"SmtpPreferredEncoding\")\n                    //    .HasMaxLength(20);\n\n                    //b.Property<bool>(\"SmtpRequiresAuth\");\n\n                    //b.Property<string>(\"SmtpServer\")\n                    //    .HasMaxLength(100);\n\n                    //b.Property<bool>(\"SmtpUseSsl\");\n\n                    //b.Property<string>(\"SmtpUser\")\n                    //    .HasMaxLength(500);\n\n                    b.Property<int>(\"TeaserTruncationLength\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue(20);\n\n                    b.Property<byte>(\"TeaserTruncationMode\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue((byte)0);\n\n                    b.Property<string>(\"TimeZoneId\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Title\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"TwitterCreator\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"TwitterPublisher\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"UseDefaultPageAsRootNode\");\n\n                   // b.Property<bool>(\"UseMetaDescriptionInFeed\");\n\n                    b.Property<string>(\"WebmasterEmail\")\n                        .HasMaxLength(100);\n\n                    b.HasKey(\"Id\");\n\n                    b.ToTable(\"cs_ContentProject\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageCategory\", b =>\n                {\n                    b.Property<string>(\"Value\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.HasKey(\"Value\", \"PageEntityId\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.HasIndex(\"Value\");\n\n                    b.ToTable(\"cs_PageCategory\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"Email\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Ip\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"IsAdmin\");\n\n                    b.Property<bool>(\"IsApproved\");\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<DateTime>(\"PubDate\");\n\n                    b.Property<string>(\"UserAgent\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Website\")\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_PageComment\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue(\"html\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"DisableEditor\");\n\n                    b.Property<string>(\"ExternalUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"IsPublished\");\n\n                    b.Property<DateTime>(\"LastModified\");\n\n                    b.Property<string>(\"MenuFilters\")\n                        .HasMaxLength(500);\n\n                    b.Property<bool>(\"MenuOnly\");\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"MetaHtml\");\n\n                    b.Property<string>(\"MetaJson\");\n\n                    b.Property<int>(\"PageOrder\");\n\n                    b.Property<string>(\"ParentId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ParentSlug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<DateTime?>(\"PubDate\");\n\n                    b.Property<bool>(\"ShowCategories\");\n\n                    b.Property<bool>(\"ShowComments\");\n\n                    b.Property<bool>(\"ShowHeading\");\n\n                    b.Property<bool>(\"ShowLastModified\");\n\n                    b.Property<bool>(\"ShowMenu\");\n\n                    b.Property<bool>(\"ShowPubDate\");\n\n                    b.Property<string>(\"Slug\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ViewRoles\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"ParentId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_Page\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageResourceEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Environment\")\n                        .IsRequired()\n                        .HasMaxLength(15);\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<int>(\"Sort\");\n\n                    b.Property<string>(\"Type\")\n                        .IsRequired()\n                        .HasMaxLength(10);\n\n                    b.Property<string>(\"Url\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.ToTable(\"cs_PageResource\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostCategory\", b =>\n                {\n                    b.Property<string>(\"Value\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PostEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.HasKey(\"Value\", \"PostEntityId\");\n\n                    b.HasIndex(\"PostEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.HasIndex(\"Value\");\n\n                    b.ToTable(\"cs_PostCategory\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"Email\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Ip\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"IsAdmin\");\n\n                    b.Property<bool>(\"IsApproved\");\n\n                    b.Property<string>(\"PostEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<DateTime>(\"PubDate\");\n\n                    b.Property<string>(\"UserAgent\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Website\")\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PostEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_PostComment\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"BlogId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue(\"html\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ImageUrl\")\n                        .HasMaxLength(250);\n\n                    b.Property<bool>(\"IsFeatured\");\n\n                    b.Property<bool>(\"IsPublished\");\n\n                    b.Property<DateTime>(\"LastModified\");\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"MetaHtml\");\n\n                    b.Property<string>(\"MetaJson\");\n\n                    b.Property<DateTime?>(\"PubDate\");\n\n                    b.Property<string>(\"Slug\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"SuppressTeaser\");\n\n                    b.Property<string>(\"TeaserOverride\");\n\n                    b.Property<string>(\"ThumbnailUrl\")\n                        .HasMaxLength(250);\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"BlogId\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"Slug\");\n\n                    b.ToTable(\"cs_Post\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\")\n                        .WithMany(\"PageComments\")\n                        .HasForeignKey(\"PageEntityId\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageResourceEntity\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\")\n                        .WithMany(\"PageResources\")\n                        .HasForeignKey(\"PageEntityId\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\")\n                        .WithMany(\"PostComments\")\n                        .HasForeignKey(\"PostEntityId\");\n                });\n#pragma warning restore 612, 618\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.SQLite/Migrations/20180122125428_changes20180122.cs",
    "content": "﻿using Microsoft.EntityFrameworkCore.Migrations;\nusing System;\nusing System.Collections.Generic;\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.SQLite.Migrations\n{\n    public partial class changes20180122 : Migration\n    {\n        protected override void Up(MigrationBuilder migrationBuilder)\n        {\n            migrationBuilder.AddColumn<bool>(\n                name: \"SuppressTeaser\",\n                table: \"cs_Post\",\n                nullable: false,\n                defaultValue: false);\n\n            migrationBuilder.AddColumn<string>(\n                name: \"TeaserOverride\",\n                table: \"cs_Post\",\n                nullable: true);\n\n            migrationBuilder.AddColumn<byte>(\n                name: \"TeaserMode\",\n                table: \"cs_ContentProject\",\n                nullable: false,\n                defaultValue: (byte)0);\n\n            migrationBuilder.AddColumn<int>(\n                name: \"TeaserTruncationLength\",\n                table: \"cs_ContentProject\",\n                nullable: false,\n                defaultValue: 20)\n                ;\n\n            migrationBuilder.AddColumn<byte>(\n                name: \"TeaserTruncationMode\",\n                table: \"cs_ContentProject\",\n                nullable: false,\n                defaultValue: (byte)0);\n        }\n\n        protected override void Down(MigrationBuilder migrationBuilder)\n        {\n            //https://docs.microsoft.com/en-us/ef/core/providers/sqlite/limitations\n\n            //migrationBuilder.DropColumn(\n            //    name: \"SuppressTeaser\",\n            //    table: \"cs_Post\");\n\n            //migrationBuilder.DropColumn(\n            //    name: \"TeaserOverride\",\n            //    table: \"cs_Post\");\n\n            //migrationBuilder.DropColumn(\n            //    name: \"TeaserMode\",\n            //    table: \"cs_ContentProject\");\n\n            //migrationBuilder.DropColumn(\n            //    name: \"TeaserTruncationLength\",\n            //    table: \"cs_ContentProject\");\n\n            //migrationBuilder.DropColumn(\n            //    name: \"TeaserTruncationMode\",\n            //    table: \"cs_ContentProject\");\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.SQLite/Migrations/20180206125939_simplecontentchanges20180206.Designer.cs",
    "content": "﻿// <auto-generated />\nusing cloudscribe.SimpleContent.Models;\nusing cloudscribe.SimpleContent.Storage.EFCore.SQLite;\nusing Microsoft.EntityFrameworkCore;\nusing Microsoft.EntityFrameworkCore.Infrastructure;\nusing Microsoft.EntityFrameworkCore.Metadata;\nusing Microsoft.EntityFrameworkCore.Migrations;\nusing Microsoft.EntityFrameworkCore.Storage;\nusing Microsoft.EntityFrameworkCore.Storage.Internal;\nusing System;\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.SQLite.Migrations\n{\n    [DbContext(typeof(SimpleContentDbContext))]\n    [Migration(\"20180206125939_simplecontentchanges20180206\")]\n    partial class simplecontentchanges20180206\n    {\n        protected override void BuildTargetModel(ModelBuilder modelBuilder)\n        {\n#pragma warning disable 612, 618\n            modelBuilder\n                .HasAnnotation(\"ProductVersion\", \"2.0.1-rtm-125\");\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Models.ProjectSettings\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<bool>(\"AddBlogToPagesTree\");\n\n                    b.Property<bool>(\"BlogMenuLinksToNewestPost\");\n\n                    b.Property<string>(\"BlogPageNavComponentVisibility\")\n                        .HasMaxLength(255);\n\n                    b.Property<int>(\"BlogPagePosition\");\n\n                    b.Property<string>(\"BlogPageText\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CdnUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ChannelCategoriesCsv\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ChannelRating\")\n                        .HasMaxLength(100);\n\n                    b.Property<int>(\"ChannelTimeToLive\");\n\n                    b.Property<string>(\"CommentNotificationEmail\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"CopyrightNotice\")\n                        .HasMaxLength(255);\n\n                    b.Property<int>(\"DaysToComment\");\n\n                    b.Property<string>(\"DefaultContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue(\"html\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"DefaultPageSlug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Description\");\n\n                    b.Property<string>(\"DisqusShortName\")\n                        .HasMaxLength(100);\n\n                    //b.Property<string>(\"EmailFromAddress\")\n                    //    .HasMaxLength(100);\n\n                    b.Property<string>(\"FacebookAppId\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Image\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"IncludePubDateInPostUrls\");\n\n                    b.Property<string>(\"LanguageCode\")\n                        .HasMaxLength(10);\n\n                    b.Property<string>(\"LocalMediaVirtualPath\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ManagingEditorEmail\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"ModerateComments\");\n\n                    b.Property<int>(\"PostsPerPage\");\n\n                    b.Property<string>(\"PubDateFormat\")\n                        .HasMaxLength(75);\n\n                    b.Property<string>(\"Publisher\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"PublisherEntityType\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PublisherLogoHeight\")\n                        .HasMaxLength(20);\n\n                    b.Property<string>(\"PublisherLogoUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"PublisherLogoWidth\")\n                        .HasMaxLength(20);\n\n                    b.Property<string>(\"RecaptchaPrivateKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RecaptchaPublicKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RemoteFeedProcessorUseAgentFragment\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RemoteFeedUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"ShowFeaturedPostsOnDefaultPage\");\n\n                    b.Property<bool>(\"ShowRecentPostsOnDefaultPage\");\n\n                    b.Property<bool>(\"ShowTitle\");\n\n                    b.Property<string>(\"SiteName\")\n                        .HasMaxLength(200);\n\n                    //b.Property<string>(\"SmtpPassword\");\n\n                    //b.Property<int>(\"SmtpPort\");\n\n                    //b.Property<string>(\"SmtpPreferredEncoding\")\n                    //    .HasMaxLength(20);\n\n                    //b.Property<bool>(\"SmtpRequiresAuth\");\n\n                    //b.Property<string>(\"SmtpServer\")\n                    //    .HasMaxLength(100);\n\n                    //b.Property<bool>(\"SmtpUseSsl\");\n\n                    //b.Property<string>(\"SmtpUser\")\n                    //    .HasMaxLength(500);\n\n                    b.Property<byte>(\"TeaserMode\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue((byte)0);\n\n                    b.Property<int>(\"TeaserTruncationLength\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue(20);\n\n                    b.Property<byte>(\"TeaserTruncationMode\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue((byte)0);\n\n                    b.Property<string>(\"TimeZoneId\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Title\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"TwitterCreator\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"TwitterPublisher\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"UseDefaultPageAsRootNode\");\n\n                    b.Property<string>(\"WebmasterEmail\")\n                        .HasMaxLength(100);\n\n                    b.HasKey(\"Id\");\n\n                    b.ToTable(\"cs_ContentProject\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageCategory\", b =>\n                {\n                    b.Property<string>(\"Value\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.HasKey(\"Value\", \"PageEntityId\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.HasIndex(\"Value\");\n\n                    b.ToTable(\"cs_PageCategory\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"Email\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Ip\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"IsAdmin\");\n\n                    b.Property<bool>(\"IsApproved\");\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<DateTime>(\"PubDate\");\n\n                    b.Property<string>(\"UserAgent\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Website\")\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_PageComment\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue(\"html\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"DisableEditor\");\n\n                    b.Property<string>(\"ExternalUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"IsPublished\");\n\n                    b.Property<DateTime>(\"LastModified\");\n\n                    b.Property<string>(\"MenuFilters\")\n                        .HasMaxLength(500);\n\n                    b.Property<bool>(\"MenuOnly\");\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"MetaHtml\");\n\n                    b.Property<string>(\"MetaJson\");\n\n                    b.Property<int>(\"PageOrder\");\n\n                    b.Property<string>(\"ParentId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ParentSlug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<DateTime?>(\"PubDate\");\n\n                    b.Property<bool>(\"ShowCategories\");\n\n                    b.Property<bool>(\"ShowComments\");\n\n                    b.Property<bool>(\"ShowHeading\");\n\n                    b.Property<bool>(\"ShowLastModified\");\n\n                    b.Property<bool>(\"ShowMenu\");\n\n                    b.Property<bool>(\"ShowPubDate\");\n\n                    b.Property<string>(\"Slug\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ViewRoles\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"ParentId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_Page\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageResourceEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Environment\")\n                        .IsRequired()\n                        .HasMaxLength(15);\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<int>(\"Sort\");\n\n                    b.Property<string>(\"Type\")\n                        .IsRequired()\n                        .HasMaxLength(10);\n\n                    b.Property<string>(\"Url\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.ToTable(\"cs_PageResource\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostCategory\", b =>\n                {\n                    b.Property<string>(\"Value\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PostEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.HasKey(\"Value\", \"PostEntityId\");\n\n                    b.HasIndex(\"PostEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.HasIndex(\"Value\");\n\n                    b.ToTable(\"cs_PostCategory\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"Email\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Ip\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"IsAdmin\");\n\n                    b.Property<bool>(\"IsApproved\");\n\n                    b.Property<string>(\"PostEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<DateTime>(\"PubDate\");\n\n                    b.Property<string>(\"UserAgent\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Website\")\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PostEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_PostComment\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"BlogId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue(\"html\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ImageUrl\")\n                        .HasMaxLength(250);\n\n                    b.Property<bool>(\"IsFeatured\");\n\n                    b.Property<bool>(\"IsPublished\");\n\n                    b.Property<DateTime>(\"LastModified\");\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"MetaHtml\");\n\n                    b.Property<string>(\"MetaJson\");\n\n                    b.Property<DateTime?>(\"PubDate\");\n\n                    b.Property<string>(\"Slug\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"SuppressTeaser\");\n\n                    b.Property<string>(\"TeaserOverride\");\n\n                    b.Property<string>(\"ThumbnailUrl\")\n                        .HasMaxLength(250);\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"BlogId\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"Slug\");\n\n                    b.ToTable(\"cs_Post\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\")\n                        .WithMany(\"PageComments\")\n                        .HasForeignKey(\"PageEntityId\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageResourceEntity\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\")\n                        .WithMany(\"PageResources\")\n                        .HasForeignKey(\"PageEntityId\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\")\n                        .WithMany(\"PostComments\")\n                        .HasForeignKey(\"PostEntityId\");\n                });\n#pragma warning restore 612, 618\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.SQLite/Migrations/20180206125939_simplecontentchanges20180206.cs",
    "content": "﻿using Microsoft.EntityFrameworkCore.Migrations;\nusing System;\nusing System.Collections.Generic;\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.SQLite.Migrations\n{\n    public partial class simplecontentchanges20180206 : Migration\n    {\n        protected override void Up(MigrationBuilder migrationBuilder)\n        {\n            //migrationBuilder.DropColumn(\n            //    name: \"AutoTeaserMode\",\n            //    table: \"cs_ContentProject\");\n\n            // https://docs.microsoft.com/en-us/ef/core/providers/sqlite/limitations\n\n            //migrationBuilder.DropColumn(\n            //    name: \"UseMetaDescriptionInFeed\",\n            //    table: \"cs_ContentProject\");\n\n            //migrationBuilder.RenameColumn(\n            //    name: \"SuppressAutoTeaser\",\n            //    table: \"cs_Post\",\n            //    newName: \"SuppressTeaser\");\n\n            //migrationBuilder.DropColumn(\n            //    name: \"SuppressAutoTeaser\",\n            //    table: \"cs_Post\");\n\n            //migrationBuilder.AddColumn<bool>(\n            //    name: \"SuppressTeaser\",\n            //    table: \"cs_Post\",\n            //    nullable: false,\n            //    defaultValue: false);\n\n            //migrationBuilder.AlterColumn<byte>(\n            //    name: \"TeaserTruncationMode\",\n            //    table: \"cs_ContentProject\",\n            //    nullable: false,\n            //    defaultValue: (byte)0,\n            //    oldClrType: typeof(byte),\n            //    oldDefaultValue: (byte)0)\n            //    .OldAnnotation(\"Sqlite:Autoincrement\", true);\n\n            //migrationBuilder.AddColumn<byte>(\n            //    name: \"TeaserMode\",\n            //    table: \"cs_ContentProject\",\n            //    nullable: false,\n            //    defaultValue: (byte)0);\n        }\n\n        protected override void Down(MigrationBuilder migrationBuilder)\n        {\n            //migrationBuilder.DropColumn(\n            //    name: \"TeaserMode\",\n            //    table: \"cs_ContentProject\");\n\n            //migrationBuilder.DropColumn(\n            //    name: \"SuppressTeaser\",\n            //    table: \"cs_Post\");\n\n            //migrationBuilder.AddColumn<bool>(\n            //    name: \"SuppressAutoTeaser\",\n            //    table: \"cs_Post\",\n            //    nullable: false,\n            //    defaultValue: false);\n\n            ////migrationBuilder.RenameColumn(\n            ////    name: \"SuppressTeaser\",\n            ////    table: \"cs_Post\",\n            ////    newName: \"SuppressAutoTeaser\");\n\n            ////migrationBuilder.AlterColumn<byte>(\n            ////    name: \"TeaserTruncationMode\",\n            ////    table: \"cs_ContentProject\",\n            ////    nullable: false,\n            ////    defaultValue: (byte)0,\n            ////    oldClrType: typeof(byte),\n            ////    oldDefaultValue: (byte)0)\n            ////    .Annotation(\"Sqlite:Autoincrement\", true);\n\n            //migrationBuilder.AddColumn<byte>(\n            //    name: \"AutoTeaserMode\",\n            //    table: \"cs_ContentProject\",\n            //    nullable: false,\n            //    defaultValue: (byte)0)\n            //    ;\n\n            //migrationBuilder.AddColumn<bool>(\n            //    name: \"UseMetaDescriptionInFeed\",\n            //    table: \"cs_ContentProject\",\n            //    nullable: false,\n            //    defaultValue: false);\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.SQLite/Migrations/20180315174340_simplecontent_changes20180315.Designer.cs",
    "content": "﻿// <auto-generated />\nusing cloudscribe.SimpleContent.Models;\nusing cloudscribe.SimpleContent.Storage.EFCore.SQLite;\nusing Microsoft.EntityFrameworkCore;\nusing Microsoft.EntityFrameworkCore.Infrastructure;\nusing Microsoft.EntityFrameworkCore.Metadata;\nusing Microsoft.EntityFrameworkCore.Migrations;\nusing Microsoft.EntityFrameworkCore.Storage;\nusing Microsoft.EntityFrameworkCore.Storage.Internal;\nusing System;\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.SQLite.Migrations\n{\n    [DbContext(typeof(SimpleContentDbContext))]\n    [Migration(\"20180315174340_simplecontent_changes20180315\")]\n    partial class simplecontent_changes20180315\n    {\n        protected override void BuildTargetModel(ModelBuilder modelBuilder)\n        {\n#pragma warning disable 612, 618\n            modelBuilder\n                .HasAnnotation(\"ProductVersion\", \"2.0.2-rtm-10011\");\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Models.ProjectSettings\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<bool>(\"AddBlogToPagesTree\");\n\n                    b.Property<bool>(\"BlogMenuLinksToNewestPost\");\n\n                    b.Property<string>(\"BlogPageNavComponentVisibility\")\n                        .HasMaxLength(255);\n\n                    b.Property<int>(\"BlogPagePosition\");\n\n                    b.Property<string>(\"BlogPageText\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CdnUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ChannelCategoriesCsv\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ChannelRating\")\n                        .HasMaxLength(100);\n\n                    b.Property<int>(\"ChannelTimeToLive\");\n\n                    b.Property<string>(\"CommentNotificationEmail\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"CopyrightNotice\")\n                        .HasMaxLength(255);\n\n                    b.Property<int>(\"DaysToComment\");\n\n                    b.Property<string>(\"DefaultContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue(\"html\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"DefaultPageSlug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Description\");\n\n                    b.Property<string>(\"DisqusShortName\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"FacebookAppId\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Image\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"IncludePubDateInPostUrls\");\n\n                    b.Property<string>(\"LanguageCode\")\n                        .HasMaxLength(10);\n\n                    b.Property<string>(\"LocalMediaVirtualPath\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ManagingEditorEmail\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"ModerateComments\");\n\n                    b.Property<int>(\"PostsPerPage\");\n\n                    b.Property<string>(\"PubDateFormat\")\n                        .HasMaxLength(75);\n\n                    b.Property<string>(\"Publisher\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"PublisherEntityType\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PublisherLogoHeight\")\n                        .HasMaxLength(20);\n\n                    b.Property<string>(\"PublisherLogoUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"PublisherLogoWidth\")\n                        .HasMaxLength(20);\n\n                    b.Property<string>(\"RecaptchaPrivateKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RecaptchaPublicKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RemoteFeedProcessorUseAgentFragment\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RemoteFeedUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"ShowFeaturedPostsOnDefaultPage\");\n\n                    b.Property<bool>(\"ShowRecentPostsOnDefaultPage\");\n\n                    b.Property<bool>(\"ShowTitle\");\n\n                    b.Property<string>(\"SiteName\")\n                        .HasMaxLength(200);\n\n                    b.Property<byte>(\"TeaserMode\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue((byte)0);\n\n                    b.Property<int>(\"TeaserTruncationLength\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue(20);\n\n                    b.Property<byte>(\"TeaserTruncationMode\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue((byte)0);\n\n                    b.Property<string>(\"TimeZoneId\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Title\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"TwitterCreator\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"TwitterPublisher\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"UseDefaultPageAsRootNode\");\n\n                    b.Property<string>(\"WebmasterEmail\")\n                        .HasMaxLength(100);\n\n                    b.HasKey(\"Id\");\n\n                    b.ToTable(\"cs_ContentProject\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageCategory\", b =>\n                {\n                    b.Property<string>(\"Value\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.HasKey(\"Value\", \"PageEntityId\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.HasIndex(\"Value\");\n\n                    b.ToTable(\"cs_PageCategory\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"Email\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Ip\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"IsAdmin\");\n\n                    b.Property<bool>(\"IsApproved\");\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<DateTime>(\"PubDate\");\n\n                    b.Property<string>(\"UserAgent\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Website\")\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_PageComment\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue(\"html\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"DisableEditor\");\n\n                    b.Property<string>(\"ExternalUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"IsPublished\");\n\n                    b.Property<DateTime>(\"LastModified\");\n\n                    b.Property<string>(\"MenuFilters\")\n                        .HasMaxLength(500);\n\n                    b.Property<bool>(\"MenuOnly\");\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"MetaHtml\");\n\n                    b.Property<string>(\"MetaJson\");\n\n                    b.Property<int>(\"PageOrder\");\n\n                    b.Property<string>(\"ParentId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ParentSlug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<DateTime?>(\"PubDate\");\n\n                    b.Property<bool>(\"ShowCategories\");\n\n                    b.Property<bool>(\"ShowComments\");\n\n                    b.Property<bool>(\"ShowHeading\");\n\n                    b.Property<bool>(\"ShowLastModified\");\n\n                    b.Property<bool>(\"ShowMenu\");\n\n                    b.Property<bool>(\"ShowPubDate\");\n\n                    b.Property<string>(\"Slug\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ViewRoles\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"ParentId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_Page\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageResourceEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Environment\")\n                        .IsRequired()\n                        .HasMaxLength(15);\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<int>(\"Sort\");\n\n                    b.Property<string>(\"Type\")\n                        .IsRequired()\n                        .HasMaxLength(10);\n\n                    b.Property<string>(\"Url\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.ToTable(\"cs_PageResource\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostCategory\", b =>\n                {\n                    b.Property<string>(\"Value\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PostEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.HasKey(\"Value\", \"PostEntityId\");\n\n                    b.HasIndex(\"PostEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.HasIndex(\"Value\");\n\n                    b.ToTable(\"cs_PostCategory\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"Email\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Ip\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"IsAdmin\");\n\n                    b.Property<bool>(\"IsApproved\");\n\n                    b.Property<string>(\"PostEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<DateTime>(\"PubDate\");\n\n                    b.Property<string>(\"UserAgent\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Website\")\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PostEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_PostComment\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"BlogId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue(\"html\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ImageUrl\")\n                        .HasMaxLength(250);\n\n                    b.Property<bool>(\"IsFeatured\");\n\n                    b.Property<bool>(\"IsPublished\");\n\n                    b.Property<DateTime>(\"LastModified\");\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"MetaHtml\");\n\n                    b.Property<string>(\"MetaJson\");\n\n                    b.Property<DateTime?>(\"PubDate\");\n\n                    b.Property<string>(\"Slug\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"SuppressTeaser\");\n\n                    b.Property<string>(\"TeaserOverride\");\n\n                    b.Property<string>(\"ThumbnailUrl\")\n                        .HasMaxLength(250);\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"BlogId\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"Slug\");\n\n                    b.ToTable(\"cs_Post\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\")\n                        .WithMany(\"PageComments\")\n                        .HasForeignKey(\"PageEntityId\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageResourceEntity\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\")\n                        .WithMany(\"PageResources\")\n                        .HasForeignKey(\"PageEntityId\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\")\n                        .WithMany(\"PostComments\")\n                        .HasForeignKey(\"PostEntityId\");\n                });\n#pragma warning restore 612, 618\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.SQLite/Migrations/20180315174340_simplecontent_changes20180315.cs",
    "content": "﻿using Microsoft.EntityFrameworkCore.Migrations;\nusing System;\nusing System.Collections.Generic;\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.SQLite.Migrations\n{\n    public partial class simplecontent_changes20180315 : Migration\n    {\n        protected override void Up(MigrationBuilder migrationBuilder)\n        {\n            //migrationBuilder.DropColumn(\n            //    name: \"EmailFromAddress\",\n            //    table: \"cs_ContentProject\");\n\n            //migrationBuilder.DropColumn(\n            //    name: \"SmtpPassword\",\n            //    table: \"cs_ContentProject\");\n\n            //migrationBuilder.DropColumn(\n            //    name: \"SmtpPort\",\n            //    table: \"cs_ContentProject\");\n\n            //migrationBuilder.DropColumn(\n            //    name: \"SmtpPreferredEncoding\",\n            //    table: \"cs_ContentProject\");\n\n            //migrationBuilder.DropColumn(\n            //    name: \"SmtpRequiresAuth\",\n            //    table: \"cs_ContentProject\");\n\n            //migrationBuilder.DropColumn(\n            //    name: \"SmtpServer\",\n            //    table: \"cs_ContentProject\");\n\n            //migrationBuilder.DropColumn(\n            //    name: \"SmtpUseSsl\",\n            //    table: \"cs_ContentProject\");\n\n            //migrationBuilder.DropColumn(\n            //    name: \"SmtpUser\",\n            //    table: \"cs_ContentProject\");\n\n            //migrationBuilder.AlterColumn<byte>(\n            //    name: \"TeaserTruncationMode\",\n            //    table: \"cs_ContentProject\",\n            //    nullable: false,\n            //    defaultValue: (byte)0,\n            //    oldClrType: typeof(byte),\n            //    oldDefaultValue: (byte)0)\n            //    .OldAnnotation(\"Sqlite:Autoincrement\", true);\n\n            //migrationBuilder.AlterColumn<byte>(\n            //    name: \"TeaserMode\",\n            //    table: \"cs_ContentProject\",\n            //    nullable: false,\n            //    defaultValue: (byte)0,\n            //    oldClrType: typeof(byte),\n            //    oldDefaultValue: (byte)0)\n            //    .OldAnnotation(\"Sqlite:Autoincrement\", true);\n        }\n\n        protected override void Down(MigrationBuilder migrationBuilder)\n        {\n            //migrationBuilder.AlterColumn<byte>(\n            //    name: \"TeaserTruncationMode\",\n            //    table: \"cs_ContentProject\",\n            //    nullable: false,\n            //    defaultValue: (byte)0,\n            //    oldClrType: typeof(byte),\n            //    oldDefaultValue: (byte)0)\n            //    .Annotation(\"Sqlite:Autoincrement\", true);\n\n            //migrationBuilder.AlterColumn<byte>(\n            //    name: \"TeaserMode\",\n            //    table: \"cs_ContentProject\",\n            //    nullable: false,\n            //    defaultValue: (byte)0,\n            //    oldClrType: typeof(byte),\n            //    oldDefaultValue: (byte)0)\n            //    .Annotation(\"Sqlite:Autoincrement\", true);\n\n            //migrationBuilder.AddColumn<string>(\n            //    name: \"EmailFromAddress\",\n            //    table: \"cs_ContentProject\",\n            //    maxLength: 100,\n            //    nullable: true);\n\n            //migrationBuilder.AddColumn<string>(\n            //    name: \"SmtpPassword\",\n            //    table: \"cs_ContentProject\",\n            //    nullable: true);\n\n            //migrationBuilder.AddColumn<int>(\n            //    name: \"SmtpPort\",\n            //    table: \"cs_ContentProject\",\n            //    nullable: false,\n            //    defaultValue: 0);\n\n            //migrationBuilder.AddColumn<string>(\n            //    name: \"SmtpPreferredEncoding\",\n            //    table: \"cs_ContentProject\",\n            //    maxLength: 20,\n            //    nullable: true);\n\n            //migrationBuilder.AddColumn<bool>(\n            //    name: \"SmtpRequiresAuth\",\n            //    table: \"cs_ContentProject\",\n            //    nullable: false,\n            //    defaultValue: false);\n\n            //migrationBuilder.AddColumn<string>(\n            //    name: \"SmtpServer\",\n            //    table: \"cs_ContentProject\",\n            //    maxLength: 100,\n            //    nullable: true);\n\n            //migrationBuilder.AddColumn<bool>(\n            //    name: \"SmtpUseSsl\",\n            //    table: \"cs_ContentProject\",\n            //    nullable: false,\n            //    defaultValue: false);\n\n            //migrationBuilder.AddColumn<string>(\n            //    name: \"SmtpUser\",\n            //    table: \"cs_ContentProject\",\n            //    maxLength: 500,\n            //    nullable: true);\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.SQLite/Migrations/20180704183840_simplecontent-20180704.Designer.cs",
    "content": "﻿// <auto-generated />\nusing System;\nusing Microsoft.EntityFrameworkCore;\nusing Microsoft.EntityFrameworkCore.Infrastructure;\nusing Microsoft.EntityFrameworkCore.Migrations;\nusing Microsoft.EntityFrameworkCore.Storage.ValueConversion;\nusing cloudscribe.SimpleContent.Models;\nusing cloudscribe.SimpleContent.Storage.EFCore.SQLite;\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.SQLite.Migrations\n{\n    [DbContext(typeof(SimpleContentDbContext))]\n    [Migration(\"20180704183840_simplecontent-20180704\")]\n    partial class simplecontent20180704\n    {\n        protected override void BuildTargetModel(ModelBuilder modelBuilder)\n        {\n#pragma warning disable 612, 618\n            modelBuilder\n                .HasAnnotation(\"ProductVersion\", \"2.1.0-rtm-30799\");\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Models.ContentHistory\", b =>\n                {\n                    b.Property<Guid>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ArchivedBy\")\n                        .HasMaxLength(255);\n\n                    b.Property<DateTime>(\"ArchivedUtc\");\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"ContentId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ContentSource\")\n                        .IsRequired()\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CreatedByUser\")\n                        .HasMaxLength(100);\n\n                    b.Property<DateTime>(\"CreatedUtc\");\n\n                    b.Property<string>(\"DraftAuthor\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"DraftContent\");\n\n                    b.Property<DateTime?>(\"DraftPubDate\");\n\n                    b.Property<string>(\"DraftSerializedModel\");\n\n                    b.Property<bool>(\"IsDraftHx\");\n\n                    b.Property<bool>(\"IsPublished\");\n\n                    b.Property<DateTime>(\"LastModified\");\n\n                    b.Property<string>(\"LastModifiedByUser\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"ProjectId\");\n\n                    b.Property<DateTime?>(\"PubDate\");\n\n                    b.Property<string>(\"SerializedModel\");\n\n                    b.Property<string>(\"Slug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"TeaserOverride\");\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"WasDeleted\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"ContentId\");\n\n                    b.HasIndex(\"ContentSource\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"CreatedByUser\");\n\n                    b.HasIndex(\"LastModifiedByUser\");\n\n                    b.HasIndex(\"Title\");\n\n                    b.ToTable(\"cs_ContentHistory\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Models.ProjectSettings\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<bool>(\"AddBlogToPagesTree\");\n\n                    b.Property<bool>(\"BlogMenuLinksToNewestPost\");\n\n                    b.Property<string>(\"BlogPageNavComponentVisibility\")\n                        .HasMaxLength(255);\n\n                    b.Property<int>(\"BlogPagePosition\");\n\n                    b.Property<string>(\"BlogPageText\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CdnUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ChannelCategoriesCsv\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ChannelRating\")\n                        .HasMaxLength(100);\n\n                    b.Property<int>(\"ChannelTimeToLive\");\n\n                    b.Property<string>(\"CommentNotificationEmail\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"CopyrightNotice\")\n                        .HasMaxLength(255);\n\n                    b.Property<int>(\"DaysToComment\");\n\n                    b.Property<string>(\"DefaultContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<int>(\"DefaultFeedItems\");\n\n                    b.Property<string>(\"DefaultPageSlug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Description\");\n\n                    b.Property<string>(\"DisqusShortName\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"FacebookAppId\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Image\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"IncludePubDateInPostUrls\");\n\n                    b.Property<string>(\"LanguageCode\")\n                        .HasMaxLength(10);\n\n                    b.Property<string>(\"LocalMediaVirtualPath\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ManagingEditorEmail\")\n                        .HasMaxLength(100);\n\n                    b.Property<int>(\"MaxFeedItems\");\n\n                    b.Property<bool>(\"ModerateComments\");\n\n                    b.Property<int>(\"PostsPerPage\");\n\n                    b.Property<string>(\"PubDateFormat\")\n                        .HasMaxLength(75);\n\n                    b.Property<string>(\"Publisher\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"PublisherEntityType\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PublisherLogoHeight\")\n                        .HasMaxLength(20);\n\n                    b.Property<string>(\"PublisherLogoUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"PublisherLogoWidth\")\n                        .HasMaxLength(20);\n\n                    b.Property<string>(\"RecaptchaPrivateKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RecaptchaPublicKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RemoteFeedProcessorUseAgentFragment\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RemoteFeedUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"ShowFeaturedPostsOnDefaultPage\");\n\n                    b.Property<bool>(\"ShowRecentPostsOnDefaultPage\");\n\n                    b.Property<bool>(\"ShowTitle\");\n\n                    b.Property<string>(\"SiteName\")\n                        .HasMaxLength(200);\n\n                    b.Property<byte>(\"TeaserMode\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue((byte)0);\n\n                    b.Property<int>(\"TeaserTruncationLength\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue(20);\n\n                    b.Property<byte>(\"TeaserTruncationMode\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue((byte)0);\n\n                    b.Property<string>(\"TimeZoneId\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Title\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"TwitterCreator\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"TwitterPublisher\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"UseDefaultPageAsRootNode\");\n\n                    b.Property<string>(\"WebmasterEmail\")\n                        .HasMaxLength(100);\n\n                    b.HasKey(\"Id\");\n\n                    b.ToTable(\"cs_ContentProject\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageCategory\", b =>\n                {\n                    b.Property<string>(\"Value\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.HasKey(\"Value\", \"PageEntityId\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.HasIndex(\"Value\");\n\n                    b.ToTable(\"cs_PageCategory\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"Email\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Ip\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"IsAdmin\");\n\n                    b.Property<bool>(\"IsApproved\");\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<DateTime>(\"PubDate\");\n\n                    b.Property<string>(\"UserAgent\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Website\")\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_PageComment\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CreatedByUser\")\n                        .HasMaxLength(100);\n\n                    b.Property<DateTime>(\"CreatedUtc\");\n\n                    b.Property<bool>(\"DisableEditor\");\n\n                    b.Property<string>(\"DraftAuthor\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"DraftContent\");\n\n                    b.Property<DateTime?>(\"DraftPubDate\");\n\n                    b.Property<string>(\"DraftSerializedModel\");\n\n                    b.Property<string>(\"ExternalUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"IsPublished\");\n\n                    b.Property<DateTime>(\"LastModified\");\n\n                    b.Property<string>(\"LastModifiedByUser\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"MenuFilters\")\n                        .HasMaxLength(500);\n\n                    b.Property<bool>(\"MenuOnly\");\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"MetaHtml\");\n\n                    b.Property<string>(\"MetaJson\");\n\n                    b.Property<int>(\"PageOrder\");\n\n                    b.Property<string>(\"ParentId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ParentSlug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<DateTime?>(\"PubDate\");\n\n                    b.Property<string>(\"SerializedModel\");\n\n                    b.Property<string>(\"Serializer\")\n                        .HasMaxLength(50);\n\n                    b.Property<bool>(\"ShowCategories\");\n\n                    b.Property<bool>(\"ShowComments\");\n\n                    b.Property<bool>(\"ShowHeading\");\n\n                    b.Property<bool>(\"ShowLastModified\");\n\n                    b.Property<bool>(\"ShowMenu\");\n\n                    b.Property<bool>(\"ShowPubDate\");\n\n                    b.Property<string>(\"Slug\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"TemplateKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ViewRoles\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"ParentId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_Page\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageResourceEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Environment\")\n                        .IsRequired()\n                        .HasMaxLength(15);\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<int>(\"Sort\");\n\n                    b.Property<string>(\"Type\")\n                        .IsRequired()\n                        .HasMaxLength(10);\n\n                    b.Property<string>(\"Url\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.ToTable(\"cs_PageResource\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostCategory\", b =>\n                {\n                    b.Property<string>(\"Value\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PostEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.HasKey(\"Value\", \"PostEntityId\");\n\n                    b.HasIndex(\"PostEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.HasIndex(\"Value\");\n\n                    b.ToTable(\"cs_PostCategory\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"Email\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Ip\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"IsAdmin\");\n\n                    b.Property<bool>(\"IsApproved\");\n\n                    b.Property<string>(\"PostEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<DateTime>(\"PubDate\");\n\n                    b.Property<string>(\"UserAgent\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Website\")\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PostEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_PostComment\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"BlogId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CreatedByUser\")\n                        .HasMaxLength(100);\n\n                    b.Property<DateTime>(\"CreatedUtc\");\n\n                    b.Property<string>(\"DraftAuthor\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"DraftContent\");\n\n                    b.Property<DateTime?>(\"DraftPubDate\");\n\n                    b.Property<string>(\"DraftSerializedModel\");\n\n                    b.Property<string>(\"ImageUrl\")\n                        .HasMaxLength(250);\n\n                    b.Property<bool>(\"IsFeatured\");\n\n                    b.Property<bool>(\"IsPublished\");\n\n                    b.Property<DateTime>(\"LastModified\");\n\n                    b.Property<string>(\"LastModifiedByUser\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"MetaHtml\");\n\n                    b.Property<string>(\"MetaJson\");\n\n                    b.Property<DateTime?>(\"PubDate\");\n\n                    b.Property<string>(\"SerializedModel\");\n\n                    b.Property<string>(\"Serializer\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"Slug\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"SuppressTeaser\");\n\n                    b.Property<string>(\"TeaserOverride\");\n\n                    b.Property<string>(\"TemplateKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ThumbnailUrl\")\n                        .HasMaxLength(250);\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"BlogId\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"Slug\");\n\n                    b.ToTable(\"cs_Post\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\")\n                        .WithMany(\"PageComments\")\n                        .HasForeignKey(\"PageEntityId\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageResourceEntity\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\")\n                        .WithMany(\"PageResources\")\n                        .HasForeignKey(\"PageEntityId\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\")\n                        .WithMany(\"PostComments\")\n                        .HasForeignKey(\"PostEntityId\");\n                });\n#pragma warning restore 612, 618\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.SQLite/Migrations/20180704183840_simplecontent-20180704.cs",
    "content": "﻿using System;\nusing Microsoft.EntityFrameworkCore.Migrations;\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.SQLite.Migrations\n{\n    public partial class simplecontent20180704 : Migration\n    {\n        protected override void Up(MigrationBuilder migrationBuilder)\n        {\n            //migrationBuilder.AlterColumn<DateTime>(\n            //    name: \"PubDate\",\n            //    table: \"cs_Post\",\n            //    nullable: true,\n            //    oldClrType: typeof(DateTime));\n\n            migrationBuilder.AddColumn<string>(\n                name: \"CreatedByUser\",\n                table: \"cs_Post\",\n                maxLength: 100,\n                nullable: true);\n\n            migrationBuilder.AddColumn<DateTime>(\n                name: \"CreatedUtc\",\n                table: \"cs_Post\",\n                nullable: false,\n                defaultValue: new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified));\n\n            migrationBuilder.AddColumn<string>(\n                name: \"DraftAuthor\",\n                table: \"cs_Post\",\n                maxLength: 255,\n                nullable: true);\n\n            migrationBuilder.AddColumn<string>(\n                name: \"DraftContent\",\n                table: \"cs_Post\",\n                nullable: true);\n\n            migrationBuilder.AddColumn<DateTime>(\n                name: \"DraftPubDate\",\n                table: \"cs_Post\",\n                nullable: true);\n\n            migrationBuilder.AddColumn<string>(\n                name: \"DraftSerializedModel\",\n                table: \"cs_Post\",\n                nullable: true);\n\n            migrationBuilder.AddColumn<string>(\n                name: \"LastModifiedByUser\",\n                table: \"cs_Post\",\n                maxLength: 100,\n                nullable: true);\n\n            migrationBuilder.AddColumn<string>(\n                name: \"SerializedModel\",\n                table: \"cs_Post\",\n                nullable: true);\n\n            migrationBuilder.AddColumn<string>(\n                name: \"Serializer\",\n                table: \"cs_Post\",\n                maxLength: 50,\n                nullable: true);\n\n            migrationBuilder.AddColumn<string>(\n                name: \"TemplateKey\",\n                table: \"cs_Post\",\n                maxLength: 255,\n                nullable: true);\n\n            //migrationBuilder.AlterColumn<DateTime>(\n            //    name: \"PubDate\",\n            //    table: \"cs_Page\",\n            //    nullable: true,\n            //    oldClrType: typeof(DateTime));\n\n            migrationBuilder.AddColumn<string>(\n                name: \"CreatedByUser\",\n                table: \"cs_Page\",\n                maxLength: 100,\n                nullable: true);\n\n            migrationBuilder.AddColumn<DateTime>(\n                name: \"CreatedUtc\",\n                table: \"cs_Page\",\n                nullable: false,\n                defaultValue: new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified));\n\n            migrationBuilder.AddColumn<string>(\n                name: \"DraftAuthor\",\n                table: \"cs_Page\",\n                maxLength: 255,\n                nullable: true);\n\n            migrationBuilder.AddColumn<string>(\n                name: \"DraftContent\",\n                table: \"cs_Page\",\n                nullable: true);\n\n            migrationBuilder.AddColumn<DateTime>(\n                name: \"DraftPubDate\",\n                table: \"cs_Page\",\n                nullable: true);\n\n            migrationBuilder.AddColumn<string>(\n                name: \"DraftSerializedModel\",\n                table: \"cs_Page\",\n                nullable: true);\n\n            migrationBuilder.AddColumn<string>(\n                name: \"LastModifiedByUser\",\n                table: \"cs_Page\",\n                maxLength: 100,\n                nullable: true);\n\n            migrationBuilder.AddColumn<string>(\n                name: \"SerializedModel\",\n                table: \"cs_Page\",\n                nullable: true);\n\n            migrationBuilder.AddColumn<string>(\n                name: \"Serializer\",\n                table: \"cs_Page\",\n                maxLength: 50,\n                nullable: true);\n\n            migrationBuilder.AddColumn<string>(\n                name: \"TemplateKey\",\n                table: \"cs_Page\",\n                maxLength: 255,\n                nullable: true);\n\n            //migrationBuilder.AlterColumn<byte>(\n            //    name: \"TeaserTruncationMode\",\n            //    table: \"cs_ContentProject\",\n            //    nullable: false,\n            //    defaultValue: (byte)0,\n            //    oldClrType: typeof(byte),\n            //    oldDefaultValue: (byte)0)\n            //    .OldAnnotation(\"Sqlite:Autoincrement\", true);\n\n            //migrationBuilder.AlterColumn<byte>(\n            //    name: \"TeaserMode\",\n            //    table: \"cs_ContentProject\",\n            //    nullable: false,\n            //    defaultValue: (byte)0,\n            //    oldClrType: typeof(byte),\n            //    oldDefaultValue: (byte)0)\n            //    .OldAnnotation(\"Sqlite:Autoincrement\", true);\n\n            migrationBuilder.AddColumn<int>(\n                name: \"DefaultFeedItems\",\n                table: \"cs_ContentProject\",\n                nullable: false,\n                defaultValue: 0);\n\n            migrationBuilder.AddColumn<int>(\n                name: \"MaxFeedItems\",\n                table: \"cs_ContentProject\",\n                nullable: false,\n                defaultValue: 0);\n\n            migrationBuilder.CreateTable(\n                name: \"cs_ContentHistory\",\n                columns: table => new\n                {\n                    Id = table.Column<Guid>(maxLength: 36, nullable: false),\n                    ContentId = table.Column<string>(maxLength: 36, nullable: false),\n                    ProjectId = table.Column<string>(nullable: true),\n                    ContentSource = table.Column<string>(maxLength: 50, nullable: false),\n                    ContentType = table.Column<string>(maxLength: 50, nullable: true, defaultValue: \"html\"),\n                    Slug = table.Column<string>(maxLength: 255, nullable: true),\n                    IsDraftHx = table.Column<bool>(nullable: false),\n                    WasDeleted = table.Column<bool>(nullable: false),\n                    ArchivedUtc = table.Column<DateTime>(nullable: false),\n                    ArchivedBy = table.Column<string>(maxLength: 255, nullable: true),\n                    Title = table.Column<string>(maxLength: 255, nullable: false),\n                    Author = table.Column<string>(maxLength: 255, nullable: true),\n                    CorrelationKey = table.Column<string>(maxLength: 255, nullable: true),\n                    Content = table.Column<string>(nullable: true),\n                    PubDate = table.Column<DateTime>(nullable: true),\n                    LastModified = table.Column<DateTime>(nullable: false),\n                    IsPublished = table.Column<bool>(nullable: false),\n                    CreatedUtc = table.Column<DateTime>(nullable: false),\n                    CreatedByUser = table.Column<string>(maxLength: 100, nullable: true),\n                    LastModifiedByUser = table.Column<string>(maxLength: 100, nullable: true),\n                    DraftContent = table.Column<string>(nullable: true),\n                    DraftAuthor = table.Column<string>(maxLength: 255, nullable: true),\n                    DraftPubDate = table.Column<DateTime>(nullable: true),\n                    SerializedModel = table.Column<string>(nullable: true),\n                    DraftSerializedModel = table.Column<string>(nullable: true),\n                    TeaserOverride = table.Column<string>(nullable: true)\n                },\n                constraints: table =>\n                {\n                    table.PrimaryKey(\"PK_cs_ContentHistory\", x => x.Id);\n                });\n\n            migrationBuilder.CreateIndex(\n                name: \"IX_cs_ContentHistory_ContentId\",\n                table: \"cs_ContentHistory\",\n                column: \"ContentId\");\n\n            migrationBuilder.CreateIndex(\n                name: \"IX_cs_ContentHistory_ContentSource\",\n                table: \"cs_ContentHistory\",\n                column: \"ContentSource\");\n\n            migrationBuilder.CreateIndex(\n                name: \"IX_cs_ContentHistory_CorrelationKey\",\n                table: \"cs_ContentHistory\",\n                column: \"CorrelationKey\");\n\n            migrationBuilder.CreateIndex(\n                name: \"IX_cs_ContentHistory_CreatedByUser\",\n                table: \"cs_ContentHistory\",\n                column: \"CreatedByUser\");\n\n            migrationBuilder.CreateIndex(\n                name: \"IX_cs_ContentHistory_LastModifiedByUser\",\n                table: \"cs_ContentHistory\",\n                column: \"LastModifiedByUser\");\n\n            migrationBuilder.CreateIndex(\n                name: \"IX_cs_ContentHistory_Title\",\n                table: \"cs_ContentHistory\",\n                column: \"Title\");\n        }\n\n        protected override void Down(MigrationBuilder migrationBuilder)\n        {\n            //migrationBuilder.DropTable(\n            //    name: \"cs_ContentHistory\");\n\n            //migrationBuilder.DropColumn(\n            //    name: \"CreatedByUser\",\n            //    table: \"cs_Post\");\n\n            //migrationBuilder.DropColumn(\n            //    name: \"CreatedUtc\",\n            //    table: \"cs_Post\");\n\n            //migrationBuilder.DropColumn(\n            //    name: \"DraftAuthor\",\n            //    table: \"cs_Post\");\n\n            //migrationBuilder.DropColumn(\n            //    name: \"DraftContent\",\n            //    table: \"cs_Post\");\n\n            //migrationBuilder.DropColumn(\n            //    name: \"DraftPubDate\",\n            //    table: \"cs_Post\");\n\n            //migrationBuilder.DropColumn(\n            //    name: \"DraftSerializedModel\",\n            //    table: \"cs_Post\");\n\n            //migrationBuilder.DropColumn(\n            //    name: \"LastModifiedByUser\",\n            //    table: \"cs_Post\");\n\n            //migrationBuilder.DropColumn(\n            //    name: \"SerializedModel\",\n            //    table: \"cs_Post\");\n\n            //migrationBuilder.DropColumn(\n            //    name: \"Serializer\",\n            //    table: \"cs_Post\");\n\n            //migrationBuilder.DropColumn(\n            //    name: \"TemplateKey\",\n            //    table: \"cs_Post\");\n\n            //migrationBuilder.DropColumn(\n            //    name: \"CreatedByUser\",\n            //    table: \"cs_Page\");\n\n            //migrationBuilder.DropColumn(\n            //    name: \"CreatedUtc\",\n            //    table: \"cs_Page\");\n\n            //migrationBuilder.DropColumn(\n            //    name: \"DraftAuthor\",\n            //    table: \"cs_Page\");\n\n            //migrationBuilder.DropColumn(\n            //    name: \"DraftContent\",\n            //    table: \"cs_Page\");\n\n            //migrationBuilder.DropColumn(\n            //    name: \"DraftPubDate\",\n            //    table: \"cs_Page\");\n\n            //migrationBuilder.DropColumn(\n            //    name: \"DraftSerializedModel\",\n            //    table: \"cs_Page\");\n\n            //migrationBuilder.DropColumn(\n            //    name: \"LastModifiedByUser\",\n            //    table: \"cs_Page\");\n\n            //migrationBuilder.DropColumn(\n            //    name: \"SerializedModel\",\n            //    table: \"cs_Page\");\n\n            //migrationBuilder.DropColumn(\n            //    name: \"Serializer\",\n            //    table: \"cs_Page\");\n\n            //migrationBuilder.DropColumn(\n            //    name: \"TemplateKey\",\n            //    table: \"cs_Page\");\n\n            //migrationBuilder.DropColumn(\n            //    name: \"DefaultFeedItems\",\n            //    table: \"cs_ContentProject\");\n\n            //migrationBuilder.DropColumn(\n            //    name: \"MaxFeedItems\",\n            //    table: \"cs_ContentProject\");\n\n            //migrationBuilder.AlterColumn<DateTime>(\n            //    name: \"PubDate\",\n            //    table: \"cs_Post\",\n            //    nullable: false,\n            //    oldClrType: typeof(DateTime),\n            //    oldNullable: true);\n\n            //migrationBuilder.AlterColumn<DateTime>(\n            //    name: \"PubDate\",\n            //    table: \"cs_Page\",\n            //    nullable: false,\n            //    oldClrType: typeof(DateTime),\n            //    oldNullable: true);\n\n            //migrationBuilder.AlterColumn<byte>(\n            //    name: \"TeaserTruncationMode\",\n            //    table: \"cs_ContentProject\",\n            //    nullable: false,\n            //    defaultValue: (byte)0,\n            //    oldClrType: typeof(byte),\n            //    oldDefaultValue: (byte)0)\n            //    .Annotation(\"Sqlite:Autoincrement\", true);\n\n            //migrationBuilder.AlterColumn<byte>(\n            //    name: \"TeaserMode\",\n            //    table: \"cs_ContentProject\",\n            //    nullable: false,\n            //    defaultValue: (byte)0,\n            //    oldClrType: typeof(byte),\n            //    oldDefaultValue: (byte)0)\n            //    .Annotation(\"Sqlite:Autoincrement\", true);\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.SQLite/Migrations/20180705124759_simplecontent-20180705.Designer.cs",
    "content": "﻿// <auto-generated />\nusing System;\nusing Microsoft.EntityFrameworkCore;\nusing Microsoft.EntityFrameworkCore.Infrastructure;\nusing Microsoft.EntityFrameworkCore.Migrations;\nusing Microsoft.EntityFrameworkCore.Storage.ValueConversion;\nusing cloudscribe.SimpleContent.Models;\nusing cloudscribe.SimpleContent.Storage.EFCore.SQLite;\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.SQLite.Migrations\n{\n    [DbContext(typeof(SimpleContentDbContext))]\n    [Migration(\"20180705124759_simplecontent-20180705\")]\n    partial class simplecontent20180705\n    {\n        protected override void BuildTargetModel(ModelBuilder modelBuilder)\n        {\n#pragma warning disable 612, 618\n            modelBuilder\n                .HasAnnotation(\"ProductVersion\", \"2.1.0-rtm-30799\");\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Models.ContentHistory\", b =>\n                {\n                    b.Property<Guid>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ArchivedBy\")\n                        .HasMaxLength(255);\n\n                    b.Property<DateTime>(\"ArchivedUtc\");\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"ContentId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ContentSource\")\n                        .IsRequired()\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CreatedByUser\")\n                        .HasMaxLength(100);\n\n                    b.Property<DateTime>(\"CreatedUtc\");\n\n                    b.Property<string>(\"DraftAuthor\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"DraftContent\");\n\n                    b.Property<DateTime?>(\"DraftPubDate\");\n\n                    b.Property<string>(\"DraftSerializedModel\");\n\n                    b.Property<bool>(\"IsDraftHx\");\n\n                    b.Property<bool>(\"IsPublished\");\n\n                    b.Property<DateTime>(\"LastModified\");\n\n                    b.Property<string>(\"LastModifiedByUser\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"MetaDescription\");\n\n                    b.Property<string>(\"MetaHtml\");\n\n                    b.Property<string>(\"MetaJson\");\n\n                    b.Property<int>(\"PageOrder\");\n\n                    b.Property<string>(\"ParentId\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ParentSlug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ProjectId\");\n\n                    b.Property<DateTime?>(\"PubDate\");\n\n                    b.Property<string>(\"SerializedModel\");\n\n                    b.Property<string>(\"Serializer\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"Slug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"TeaserOverride\");\n\n                    b.Property<string>(\"TemplateKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ViewRoles\");\n\n                    b.Property<bool>(\"WasDeleted\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"ContentId\");\n\n                    b.HasIndex(\"ContentSource\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"CreatedByUser\");\n\n                    b.HasIndex(\"LastModifiedByUser\");\n\n                    b.HasIndex(\"Title\");\n\n                    b.ToTable(\"cs_ContentHistory\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Models.ProjectSettings\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<bool>(\"AddBlogToPagesTree\");\n\n                    b.Property<bool>(\"BlogMenuLinksToNewestPost\");\n\n                    b.Property<string>(\"BlogPageNavComponentVisibility\")\n                        .HasMaxLength(255);\n\n                    b.Property<int>(\"BlogPagePosition\");\n\n                    b.Property<string>(\"BlogPageText\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CdnUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ChannelCategoriesCsv\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ChannelRating\")\n                        .HasMaxLength(100);\n\n                    b.Property<int>(\"ChannelTimeToLive\");\n\n                    b.Property<string>(\"CommentNotificationEmail\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"CopyrightNotice\")\n                        .HasMaxLength(255);\n\n                    b.Property<int>(\"DaysToComment\");\n\n                    b.Property<string>(\"DefaultContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<int>(\"DefaultFeedItems\");\n\n                    b.Property<string>(\"DefaultPageSlug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Description\");\n\n                    b.Property<string>(\"DisqusShortName\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"FacebookAppId\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Image\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"IncludePubDateInPostUrls\");\n\n                    b.Property<string>(\"LanguageCode\")\n                        .HasMaxLength(10);\n\n                    b.Property<string>(\"LocalMediaVirtualPath\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ManagingEditorEmail\")\n                        .HasMaxLength(100);\n\n                    b.Property<int>(\"MaxFeedItems\");\n\n                    b.Property<bool>(\"ModerateComments\");\n\n                    b.Property<int>(\"PostsPerPage\");\n\n                    b.Property<string>(\"PubDateFormat\")\n                        .HasMaxLength(75);\n\n                    b.Property<string>(\"Publisher\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"PublisherEntityType\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PublisherLogoHeight\")\n                        .HasMaxLength(20);\n\n                    b.Property<string>(\"PublisherLogoUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"PublisherLogoWidth\")\n                        .HasMaxLength(20);\n\n                    b.Property<string>(\"RecaptchaPrivateKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RecaptchaPublicKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RemoteFeedProcessorUseAgentFragment\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RemoteFeedUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"ShowFeaturedPostsOnDefaultPage\");\n\n                    b.Property<bool>(\"ShowRecentPostsOnDefaultPage\");\n\n                    b.Property<bool>(\"ShowTitle\");\n\n                    b.Property<string>(\"SiteName\")\n                        .HasMaxLength(200);\n\n                    b.Property<byte>(\"TeaserMode\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue((byte)0);\n\n                    b.Property<int>(\"TeaserTruncationLength\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue(20);\n\n                    b.Property<byte>(\"TeaserTruncationMode\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue((byte)0);\n\n                    b.Property<string>(\"TimeZoneId\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Title\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"TwitterCreator\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"TwitterPublisher\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"UseDefaultPageAsRootNode\");\n\n                    b.Property<string>(\"WebmasterEmail\")\n                        .HasMaxLength(100);\n\n                    b.HasKey(\"Id\");\n\n                    b.ToTable(\"cs_ContentProject\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageCategory\", b =>\n                {\n                    b.Property<string>(\"Value\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.HasKey(\"Value\", \"PageEntityId\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.HasIndex(\"Value\");\n\n                    b.ToTable(\"cs_PageCategory\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"Email\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Ip\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"IsAdmin\");\n\n                    b.Property<bool>(\"IsApproved\");\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<DateTime>(\"PubDate\");\n\n                    b.Property<string>(\"UserAgent\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Website\")\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_PageComment\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CreatedByUser\")\n                        .HasMaxLength(100);\n\n                    b.Property<DateTime>(\"CreatedUtc\");\n\n                    b.Property<bool>(\"DisableEditor\");\n\n                    b.Property<string>(\"DraftAuthor\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"DraftContent\");\n\n                    b.Property<DateTime?>(\"DraftPubDate\");\n\n                    b.Property<string>(\"DraftSerializedModel\");\n\n                    b.Property<string>(\"ExternalUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"IsPublished\");\n\n                    b.Property<DateTime>(\"LastModified\");\n\n                    b.Property<string>(\"LastModifiedByUser\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"MenuFilters\")\n                        .HasMaxLength(500);\n\n                    b.Property<bool>(\"MenuOnly\");\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"MetaHtml\");\n\n                    b.Property<string>(\"MetaJson\");\n\n                    b.Property<int>(\"PageOrder\");\n\n                    b.Property<string>(\"ParentId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ParentSlug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<DateTime?>(\"PubDate\");\n\n                    b.Property<string>(\"SerializedModel\");\n\n                    b.Property<string>(\"Serializer\")\n                        .HasMaxLength(50);\n\n                    b.Property<bool>(\"ShowCategories\");\n\n                    b.Property<bool>(\"ShowComments\");\n\n                    b.Property<bool>(\"ShowHeading\");\n\n                    b.Property<bool>(\"ShowLastModified\");\n\n                    b.Property<bool>(\"ShowMenu\");\n\n                    b.Property<bool>(\"ShowPubDate\");\n\n                    b.Property<string>(\"Slug\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"TemplateKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ViewRoles\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"ParentId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_Page\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageResourceEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Environment\")\n                        .IsRequired()\n                        .HasMaxLength(15);\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<int>(\"Sort\");\n\n                    b.Property<string>(\"Type\")\n                        .IsRequired()\n                        .HasMaxLength(10);\n\n                    b.Property<string>(\"Url\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.ToTable(\"cs_PageResource\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostCategory\", b =>\n                {\n                    b.Property<string>(\"Value\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PostEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.HasKey(\"Value\", \"PostEntityId\");\n\n                    b.HasIndex(\"PostEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.HasIndex(\"Value\");\n\n                    b.ToTable(\"cs_PostCategory\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"Email\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Ip\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"IsAdmin\");\n\n                    b.Property<bool>(\"IsApproved\");\n\n                    b.Property<string>(\"PostEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<DateTime>(\"PubDate\");\n\n                    b.Property<string>(\"UserAgent\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Website\")\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PostEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_PostComment\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"BlogId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CreatedByUser\")\n                        .HasMaxLength(100);\n\n                    b.Property<DateTime>(\"CreatedUtc\");\n\n                    b.Property<string>(\"DraftAuthor\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"DraftContent\");\n\n                    b.Property<DateTime?>(\"DraftPubDate\");\n\n                    b.Property<string>(\"DraftSerializedModel\");\n\n                    b.Property<string>(\"ImageUrl\")\n                        .HasMaxLength(250);\n\n                    b.Property<bool>(\"IsFeatured\");\n\n                    b.Property<bool>(\"IsPublished\");\n\n                    b.Property<DateTime>(\"LastModified\");\n\n                    b.Property<string>(\"LastModifiedByUser\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"MetaHtml\");\n\n                    b.Property<string>(\"MetaJson\");\n\n                    b.Property<DateTime?>(\"PubDate\");\n\n                    b.Property<string>(\"SerializedModel\");\n\n                    b.Property<string>(\"Serializer\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"Slug\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"SuppressTeaser\");\n\n                    b.Property<string>(\"TeaserOverride\");\n\n                    b.Property<string>(\"TemplateKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ThumbnailUrl\")\n                        .HasMaxLength(250);\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"BlogId\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"Slug\");\n\n                    b.ToTable(\"cs_Post\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\")\n                        .WithMany(\"PageComments\")\n                        .HasForeignKey(\"PageEntityId\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageResourceEntity\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\")\n                        .WithMany(\"PageResources\")\n                        .HasForeignKey(\"PageEntityId\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\")\n                        .WithMany(\"PostComments\")\n                        .HasForeignKey(\"PostEntityId\");\n                });\n#pragma warning restore 612, 618\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.SQLite/Migrations/20180705124759_simplecontent-20180705.cs",
    "content": "﻿using Microsoft.EntityFrameworkCore.Migrations;\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.SQLite.Migrations\n{\n    public partial class simplecontent20180705 : Migration\n    {\n        protected override void Up(MigrationBuilder migrationBuilder)\n        {\n            //migrationBuilder.AlterColumn<byte>(\n            //    name: \"TeaserTruncationMode\",\n            //    table: \"cs_ContentProject\",\n            //    nullable: false,\n            //    defaultValue: (byte)0,\n            //    oldClrType: typeof(byte),\n            //    oldDefaultValue: (byte)0)\n            //    .OldAnnotation(\"Sqlite:Autoincrement\", true);\n\n            //migrationBuilder.AlterColumn<byte>(\n            //    name: \"TeaserMode\",\n            //    table: \"cs_ContentProject\",\n            //    nullable: false,\n            //    defaultValue: (byte)0,\n            //    oldClrType: typeof(byte),\n            //    oldDefaultValue: (byte)0)\n            //    .OldAnnotation(\"Sqlite:Autoincrement\", true);\n\n            migrationBuilder.AddColumn<string>(\n                name: \"MetaDescription\",\n                table: \"cs_ContentHistory\",\n                nullable: true);\n\n            migrationBuilder.AddColumn<string>(\n                name: \"MetaHtml\",\n                table: \"cs_ContentHistory\",\n                nullable: true);\n\n            migrationBuilder.AddColumn<string>(\n                name: \"MetaJson\",\n                table: \"cs_ContentHistory\",\n                nullable: true);\n\n            migrationBuilder.AddColumn<int>(\n                name: \"PageOrder\",\n                table: \"cs_ContentHistory\",\n                nullable: false,\n                defaultValue: 0);\n\n            migrationBuilder.AddColumn<string>(\n                name: \"ParentId\",\n                table: \"cs_ContentHistory\",\n                maxLength: 255,\n                nullable: true);\n\n            migrationBuilder.AddColumn<string>(\n                name: \"ParentSlug\",\n                table: \"cs_ContentHistory\",\n                maxLength: 255,\n                nullable: true);\n\n            migrationBuilder.AddColumn<string>(\n                name: \"Serializer\",\n                table: \"cs_ContentHistory\",\n                maxLength: 50,\n                nullable: true);\n\n            migrationBuilder.AddColumn<string>(\n                name: \"TemplateKey\",\n                table: \"cs_ContentHistory\",\n                maxLength: 255,\n                nullable: true);\n\n            migrationBuilder.AddColumn<string>(\n                name: \"ViewRoles\",\n                table: \"cs_ContentHistory\",\n                nullable: true);\n        }\n\n        protected override void Down(MigrationBuilder migrationBuilder)\n        {\n            //migrationBuilder.DropColumn(\n            //    name: \"MetaDescription\",\n            //    table: \"cs_ContentHistory\");\n\n            //migrationBuilder.DropColumn(\n            //    name: \"MetaHtml\",\n            //    table: \"cs_ContentHistory\");\n\n            //migrationBuilder.DropColumn(\n            //    name: \"MetaJson\",\n            //    table: \"cs_ContentHistory\");\n\n            //migrationBuilder.DropColumn(\n            //    name: \"PageOrder\",\n            //    table: \"cs_ContentHistory\");\n\n            //migrationBuilder.DropColumn(\n            //    name: \"ParentId\",\n            //    table: \"cs_ContentHistory\");\n\n            //migrationBuilder.DropColumn(\n            //    name: \"ParentSlug\",\n            //    table: \"cs_ContentHistory\");\n\n            //migrationBuilder.DropColumn(\n            //    name: \"Serializer\",\n            //    table: \"cs_ContentHistory\");\n\n            //migrationBuilder.DropColumn(\n            //    name: \"TemplateKey\",\n            //    table: \"cs_ContentHistory\");\n\n            //migrationBuilder.DropColumn(\n            //    name: \"ViewRoles\",\n            //    table: \"cs_ContentHistory\");\n\n            //migrationBuilder.AlterColumn<byte>(\n            //    name: \"TeaserTruncationMode\",\n            //    table: \"cs_ContentProject\",\n            //    nullable: false,\n            //    defaultValue: (byte)0,\n            //    oldClrType: typeof(byte),\n            //    oldDefaultValue: (byte)0)\n            //    .Annotation(\"Sqlite:Autoincrement\", true);\n\n            //migrationBuilder.AlterColumn<byte>(\n            //    name: \"TeaserMode\",\n            //    table: \"cs_ContentProject\",\n            //    nullable: false,\n            //    defaultValue: (byte)0,\n            //    oldClrType: typeof(byte),\n            //    oldDefaultValue: (byte)0)\n            //    .Annotation(\"Sqlite:Autoincrement\", true);\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.SQLite/Migrations/20180710113211_simplecontent-20180710.Designer.cs",
    "content": "﻿// <auto-generated />\nusing System;\nusing Microsoft.EntityFrameworkCore;\nusing Microsoft.EntityFrameworkCore.Infrastructure;\nusing Microsoft.EntityFrameworkCore.Migrations;\nusing Microsoft.EntityFrameworkCore.Storage.ValueConversion;\nusing cloudscribe.SimpleContent.Models;\nusing cloudscribe.SimpleContent.Storage.EFCore.SQLite;\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.SQLite.Migrations\n{\n    [DbContext(typeof(SimpleContentDbContext))]\n    [Migration(\"20180710113211_simplecontent-20180710\")]\n    partial class simplecontent20180710\n    {\n        protected override void BuildTargetModel(ModelBuilder modelBuilder)\n        {\n#pragma warning disable 612, 618\n            modelBuilder\n                .HasAnnotation(\"ProductVersion\", \"2.1.0-rtm-30799\");\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Models.ContentHistory\", b =>\n                {\n                    b.Property<Guid>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ArchivedBy\")\n                        .HasMaxLength(255);\n\n                    b.Property<DateTime>(\"ArchivedUtc\");\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CategoriesCsv\");\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"ContentId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ContentSource\")\n                        .IsRequired()\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CreatedByUser\")\n                        .HasMaxLength(100);\n\n                    b.Property<DateTime>(\"CreatedUtc\");\n\n                    b.Property<string>(\"DraftAuthor\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"DraftContent\");\n\n                    b.Property<DateTime?>(\"DraftPubDate\");\n\n                    b.Property<string>(\"DraftSerializedModel\");\n\n                    b.Property<bool>(\"IsDraftHx\");\n\n                    b.Property<bool>(\"IsPublished\");\n\n                    b.Property<DateTime>(\"LastModified\");\n\n                    b.Property<string>(\"LastModifiedByUser\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"MetaDescription\");\n\n                    b.Property<string>(\"MetaHtml\");\n\n                    b.Property<string>(\"MetaJson\");\n\n                    b.Property<int>(\"PageOrder\");\n\n                    b.Property<string>(\"ParentId\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ParentSlug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ProjectId\");\n\n                    b.Property<DateTime?>(\"PubDate\");\n\n                    b.Property<string>(\"SerializedModel\");\n\n                    b.Property<string>(\"Serializer\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"Slug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"TeaserOverride\");\n\n                    b.Property<string>(\"TemplateKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ViewRoles\");\n\n                    b.Property<bool>(\"WasDeleted\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"ContentId\");\n\n                    b.HasIndex(\"ContentSource\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"CreatedByUser\");\n\n                    b.HasIndex(\"LastModifiedByUser\");\n\n                    b.HasIndex(\"Title\");\n\n                    b.ToTable(\"cs_ContentHistory\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Models.ProjectSettings\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<bool>(\"AddBlogToPagesTree\");\n\n                    b.Property<bool>(\"BlogMenuLinksToNewestPost\");\n\n                    b.Property<string>(\"BlogPageNavComponentVisibility\")\n                        .HasMaxLength(255);\n\n                    b.Property<int>(\"BlogPagePosition\");\n\n                    b.Property<string>(\"BlogPageText\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CdnUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ChannelCategoriesCsv\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ChannelRating\")\n                        .HasMaxLength(100);\n\n                    b.Property<int>(\"ChannelTimeToLive\");\n\n                    b.Property<string>(\"CommentNotificationEmail\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"CopyrightNotice\")\n                        .HasMaxLength(255);\n\n                    b.Property<int>(\"DaysToComment\");\n\n                    b.Property<string>(\"DefaultContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<int>(\"DefaultFeedItems\");\n\n                    b.Property<string>(\"DefaultPageSlug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Description\");\n\n                    b.Property<string>(\"DisqusShortName\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"FacebookAppId\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Image\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"IncludePubDateInPostUrls\");\n\n                    b.Property<string>(\"LanguageCode\")\n                        .HasMaxLength(10);\n\n                    b.Property<string>(\"LocalMediaVirtualPath\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ManagingEditorEmail\")\n                        .HasMaxLength(100);\n\n                    b.Property<int>(\"MaxFeedItems\");\n\n                    b.Property<bool>(\"ModerateComments\");\n\n                    b.Property<int>(\"PostsPerPage\");\n\n                    b.Property<string>(\"PubDateFormat\")\n                        .HasMaxLength(75);\n\n                    b.Property<string>(\"Publisher\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"PublisherEntityType\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PublisherLogoHeight\")\n                        .HasMaxLength(20);\n\n                    b.Property<string>(\"PublisherLogoUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"PublisherLogoWidth\")\n                        .HasMaxLength(20);\n\n                    b.Property<string>(\"RecaptchaPrivateKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RecaptchaPublicKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RemoteFeedProcessorUseAgentFragment\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RemoteFeedUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"ShowFeaturedPostsOnDefaultPage\");\n\n                    b.Property<bool>(\"ShowRecentPostsOnDefaultPage\");\n\n                    b.Property<bool>(\"ShowTitle\");\n\n                    b.Property<string>(\"SiteName\")\n                        .HasMaxLength(200);\n\n                    b.Property<byte>(\"TeaserMode\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue((byte)0);\n\n                    b.Property<int>(\"TeaserTruncationLength\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue(20);\n\n                    b.Property<byte>(\"TeaserTruncationMode\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue((byte)0);\n\n                    b.Property<string>(\"TimeZoneId\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Title\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"TwitterCreator\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"TwitterPublisher\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"UseDefaultPageAsRootNode\");\n\n                    b.Property<string>(\"WebmasterEmail\")\n                        .HasMaxLength(100);\n\n                    b.HasKey(\"Id\");\n\n                    b.ToTable(\"cs_ContentProject\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageCategory\", b =>\n                {\n                    b.Property<string>(\"Value\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.HasKey(\"Value\", \"PageEntityId\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.HasIndex(\"Value\");\n\n                    b.ToTable(\"cs_PageCategory\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"Email\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Ip\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"IsAdmin\");\n\n                    b.Property<bool>(\"IsApproved\");\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<DateTime>(\"PubDate\");\n\n                    b.Property<string>(\"UserAgent\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Website\")\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_PageComment\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CreatedByUser\")\n                        .HasMaxLength(100);\n\n                    b.Property<DateTime>(\"CreatedUtc\");\n\n                    b.Property<bool>(\"DisableEditor\");\n\n                    b.Property<string>(\"DraftAuthor\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"DraftContent\");\n\n                    b.Property<DateTime?>(\"DraftPubDate\");\n\n                    b.Property<string>(\"DraftSerializedModel\");\n\n                    b.Property<string>(\"ExternalUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"IsPublished\");\n\n                    b.Property<DateTime>(\"LastModified\");\n\n                    b.Property<string>(\"LastModifiedByUser\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"MenuFilters\")\n                        .HasMaxLength(500);\n\n                    b.Property<bool>(\"MenuOnly\");\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"MetaHtml\");\n\n                    b.Property<string>(\"MetaJson\");\n\n                    b.Property<int>(\"PageOrder\");\n\n                    b.Property<string>(\"ParentId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ParentSlug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<DateTime?>(\"PubDate\");\n\n                    b.Property<string>(\"SerializedModel\");\n\n                    b.Property<string>(\"Serializer\")\n                        .HasMaxLength(50);\n\n                    b.Property<bool>(\"ShowCategories\");\n\n                    b.Property<bool>(\"ShowComments\");\n\n                    b.Property<bool>(\"ShowHeading\");\n\n                    b.Property<bool>(\"ShowLastModified\");\n\n                    b.Property<bool>(\"ShowMenu\");\n\n                    b.Property<bool>(\"ShowPubDate\");\n\n                    b.Property<string>(\"Slug\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"TemplateKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ViewRoles\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"ParentId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_Page\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageResourceEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Environment\")\n                        .IsRequired()\n                        .HasMaxLength(15);\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<int>(\"Sort\");\n\n                    b.Property<string>(\"Type\")\n                        .IsRequired()\n                        .HasMaxLength(10);\n\n                    b.Property<string>(\"Url\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.ToTable(\"cs_PageResource\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostCategory\", b =>\n                {\n                    b.Property<string>(\"Value\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PostEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.HasKey(\"Value\", \"PostEntityId\");\n\n                    b.HasIndex(\"PostEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.HasIndex(\"Value\");\n\n                    b.ToTable(\"cs_PostCategory\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"Email\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Ip\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"IsAdmin\");\n\n                    b.Property<bool>(\"IsApproved\");\n\n                    b.Property<string>(\"PostEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<DateTime>(\"PubDate\");\n\n                    b.Property<string>(\"UserAgent\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Website\")\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PostEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_PostComment\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"BlogId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CreatedByUser\")\n                        .HasMaxLength(100);\n\n                    b.Property<DateTime>(\"CreatedUtc\");\n\n                    b.Property<string>(\"DraftAuthor\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"DraftContent\");\n\n                    b.Property<DateTime?>(\"DraftPubDate\");\n\n                    b.Property<string>(\"DraftSerializedModel\");\n\n                    b.Property<string>(\"ImageUrl\")\n                        .HasMaxLength(250);\n\n                    b.Property<bool>(\"IsFeatured\");\n\n                    b.Property<bool>(\"IsPublished\");\n\n                    b.Property<DateTime>(\"LastModified\");\n\n                    b.Property<string>(\"LastModifiedByUser\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"MetaHtml\");\n\n                    b.Property<string>(\"MetaJson\");\n\n                    b.Property<DateTime?>(\"PubDate\");\n\n                    b.Property<string>(\"SerializedModel\");\n\n                    b.Property<string>(\"Serializer\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"Slug\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"SuppressTeaser\");\n\n                    b.Property<string>(\"TeaserOverride\");\n\n                    b.Property<string>(\"TemplateKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ThumbnailUrl\")\n                        .HasMaxLength(250);\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"BlogId\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"Slug\");\n\n                    b.ToTable(\"cs_Post\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\")\n                        .WithMany(\"PageComments\")\n                        .HasForeignKey(\"PageEntityId\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageResourceEntity\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\")\n                        .WithMany(\"PageResources\")\n                        .HasForeignKey(\"PageEntityId\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\")\n                        .WithMany(\"PostComments\")\n                        .HasForeignKey(\"PostEntityId\");\n                });\n#pragma warning restore 612, 618\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.SQLite/Migrations/20180710113211_simplecontent-20180710.cs",
    "content": "﻿using Microsoft.EntityFrameworkCore.Migrations;\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.SQLite.Migrations\n{\n    public partial class simplecontent20180710 : Migration\n    {\n        protected override void Up(MigrationBuilder migrationBuilder)\n        {\n            //migrationBuilder.AlterColumn<byte>(\n            //    name: \"TeaserTruncationMode\",\n            //    table: \"cs_ContentProject\",\n            //    nullable: false,\n            //    defaultValue: (byte)0,\n            //    oldClrType: typeof(byte),\n            //    oldDefaultValue: (byte)0)\n            //    .OldAnnotation(\"Sqlite:Autoincrement\", true);\n\n            //migrationBuilder.AlterColumn<byte>(\n            //    name: \"TeaserMode\",\n            //    table: \"cs_ContentProject\",\n            //    nullable: false,\n            //    defaultValue: (byte)0,\n            //    oldClrType: typeof(byte),\n            //    oldDefaultValue: (byte)0)\n            //    .OldAnnotation(\"Sqlite:Autoincrement\", true);\n\n            migrationBuilder.AddColumn<string>(\n                name: \"CategoriesCsv\",\n                table: \"cs_ContentHistory\",\n                nullable: true);\n        }\n\n        protected override void Down(MigrationBuilder migrationBuilder)\n        {\n            //migrationBuilder.DropColumn(\n            //    name: \"CategoriesCsv\",\n            //    table: \"cs_ContentHistory\");\n\n            //migrationBuilder.AlterColumn<byte>(\n            //    name: \"TeaserTruncationMode\",\n            //    table: \"cs_ContentProject\",\n            //    nullable: false,\n            //    defaultValue: (byte)0,\n            //    oldClrType: typeof(byte),\n            //    oldDefaultValue: (byte)0)\n            //    .Annotation(\"Sqlite:Autoincrement\", true);\n\n            //migrationBuilder.AlterColumn<byte>(\n            //    name: \"TeaserMode\",\n            //    table: \"cs_ContentProject\",\n            //    nullable: false,\n            //    defaultValue: (byte)0,\n            //    oldClrType: typeof(byte),\n            //    oldDefaultValue: (byte)0)\n            //    .Annotation(\"Sqlite:Autoincrement\", true);\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.SQLite/Migrations/20180820133304_simplecontent-20180819.Designer.cs",
    "content": "﻿// <auto-generated />\nusing System;\nusing Microsoft.EntityFrameworkCore;\nusing Microsoft.EntityFrameworkCore.Infrastructure;\nusing Microsoft.EntityFrameworkCore.Migrations;\nusing Microsoft.EntityFrameworkCore.Storage.ValueConversion;\nusing cloudscribe.SimpleContent.Models;\nusing cloudscribe.SimpleContent.Storage.EFCore.SQLite;\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.SQLite.Migrations\n{\n    [DbContext(typeof(SimpleContentDbContext))]\n    [Migration(\"20180820133304_simplecontent-20180819\")]\n    partial class simplecontent20180819\n    {\n        protected override void BuildTargetModel(ModelBuilder modelBuilder)\n        {\n#pragma warning disable 612, 618\n            modelBuilder\n                .HasAnnotation(\"ProductVersion\", \"2.1.1-rtm-30846\");\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Models.ContentHistory\", b =>\n                {\n                    b.Property<Guid>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ArchivedBy\")\n                        .HasMaxLength(255);\n\n                    b.Property<DateTime>(\"ArchivedUtc\");\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CategoriesCsv\");\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"ContentId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ContentSource\")\n                        .IsRequired()\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CreatedByUser\")\n                        .HasMaxLength(100);\n\n                    b.Property<DateTime>(\"CreatedUtc\");\n\n                    b.Property<string>(\"DraftAuthor\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"DraftContent\");\n\n                    b.Property<DateTime?>(\"DraftPubDate\");\n\n                    b.Property<string>(\"DraftSerializedModel\");\n\n                    b.Property<bool>(\"IsDraftHx\");\n\n                    b.Property<bool>(\"IsPublished\");\n\n                    b.Property<DateTime>(\"LastModified\");\n\n                    b.Property<string>(\"LastModifiedByUser\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"MetaDescription\");\n\n                    b.Property<string>(\"MetaHtml\");\n\n                    b.Property<string>(\"MetaJson\");\n\n                    b.Property<int>(\"PageOrder\");\n\n                    b.Property<string>(\"ParentId\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ParentSlug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ProjectId\");\n\n                    b.Property<DateTime?>(\"PubDate\");\n\n                    b.Property<string>(\"SerializedModel\");\n\n                    b.Property<string>(\"Serializer\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"Slug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"TeaserOverride\");\n\n                    b.Property<string>(\"TemplateKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ViewRoles\");\n\n                    b.Property<bool>(\"WasDeleted\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"ContentId\");\n\n                    b.HasIndex(\"ContentSource\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"CreatedByUser\");\n\n                    b.HasIndex(\"LastModifiedByUser\");\n\n                    b.HasIndex(\"Title\");\n\n                    b.ToTable(\"cs_ContentHistory\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Models.ProjectSettings\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<bool>(\"AddBlogToPagesTree\");\n\n                    b.Property<bool>(\"BlogMenuLinksToNewestPost\");\n\n                    b.Property<string>(\"BlogPageNavComponentVisibility\")\n                        .HasMaxLength(255);\n\n                    b.Property<int>(\"BlogPagePosition\");\n\n                    b.Property<string>(\"BlogPageText\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CdnUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ChannelCategoriesCsv\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ChannelRating\")\n                        .HasMaxLength(100);\n\n                    b.Property<int>(\"ChannelTimeToLive\");\n\n                    b.Property<string>(\"CommentNotificationEmail\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"CopyrightNotice\")\n                        .HasMaxLength(255);\n\n                    b.Property<int>(\"DaysToComment\");\n\n                    b.Property<string>(\"DefaultContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<int>(\"DefaultFeedItems\");\n\n                    b.Property<string>(\"DefaultPageSlug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Description\");\n\n                    b.Property<string>(\"DisqusShortName\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"FacebookAppId\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Image\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"IncludePubDateInPostUrls\");\n\n                    b.Property<string>(\"LanguageCode\")\n                        .HasMaxLength(10);\n\n                    b.Property<string>(\"LocalMediaVirtualPath\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ManagingEditorEmail\")\n                        .HasMaxLength(100);\n\n                    b.Property<int>(\"MaxFeedItems\");\n\n                    b.Property<bool>(\"ModerateComments\");\n\n                    b.Property<int>(\"PostsPerPage\");\n\n                    b.Property<string>(\"PubDateFormat\")\n                        .HasMaxLength(75);\n\n                    b.Property<string>(\"Publisher\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"PublisherEntityType\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PublisherLogoHeight\")\n                        .HasMaxLength(20);\n\n                    b.Property<string>(\"PublisherLogoUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"PublisherLogoWidth\")\n                        .HasMaxLength(20);\n\n                    b.Property<string>(\"RecaptchaPrivateKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RecaptchaPublicKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RemoteFeedProcessorUseAgentFragment\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RemoteFeedUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"ShowFeaturedPostsOnDefaultPage\");\n\n                    b.Property<bool>(\"ShowRecentPostsOnDefaultPage\");\n\n                    b.Property<bool>(\"ShowTitle\");\n\n                    b.Property<string>(\"SiteName\")\n                        .HasMaxLength(200);\n\n                    b.Property<byte>(\"TeaserMode\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue((byte)0);\n\n                    b.Property<int>(\"TeaserTruncationLength\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue(20);\n\n                    b.Property<byte>(\"TeaserTruncationMode\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue((byte)0);\n\n                    b.Property<string>(\"TimeZoneId\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Title\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"TwitterCreator\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"TwitterPublisher\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"UseDefaultPageAsRootNode\");\n\n                    b.Property<string>(\"WebmasterEmail\")\n                        .HasMaxLength(100);\n\n                    b.HasKey(\"Id\");\n\n                    b.ToTable(\"cs_ContentProject\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageCategory\", b =>\n                {\n                    b.Property<string>(\"Value\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.HasKey(\"Value\", \"PageEntityId\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.HasIndex(\"Value\");\n\n                    b.ToTable(\"cs_PageCategory\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"Email\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Ip\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"IsAdmin\");\n\n                    b.Property<bool>(\"IsApproved\");\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<DateTime>(\"PubDate\");\n\n                    b.Property<string>(\"UserAgent\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Website\")\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_PageComment\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CreatedByUser\")\n                        .HasMaxLength(100);\n\n                    b.Property<DateTime>(\"CreatedUtc\");\n\n                    b.Property<bool>(\"DisableEditor\");\n\n                    b.Property<string>(\"DraftAuthor\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"DraftContent\");\n\n                    b.Property<DateTime?>(\"DraftPubDate\");\n\n                    b.Property<string>(\"DraftSerializedModel\");\n\n                    b.Property<string>(\"ExternalUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"IsPublished\");\n\n                    b.Property<DateTime>(\"LastModified\");\n\n                    b.Property<string>(\"LastModifiedByUser\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"MenuFilters\")\n                        .HasMaxLength(500);\n\n                    b.Property<bool>(\"MenuOnly\");\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"MetaHtml\");\n\n                    b.Property<string>(\"MetaJson\");\n\n                    b.Property<int>(\"PageOrder\");\n\n                    b.Property<string>(\"ParentId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ParentSlug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<DateTime?>(\"PubDate\");\n\n                    b.Property<string>(\"SerializedModel\");\n\n                    b.Property<string>(\"Serializer\")\n                        .HasMaxLength(50);\n\n                    b.Property<bool>(\"ShowCategories\");\n\n                    b.Property<bool>(\"ShowComments\");\n\n                    b.Property<bool>(\"ShowHeading\");\n\n                    b.Property<bool>(\"ShowLastModified\");\n\n                    b.Property<bool>(\"ShowMenu\");\n\n                    b.Property<bool>(\"ShowPubDate\");\n\n                    b.Property<string>(\"Slug\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"TemplateKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ViewRoles\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"ParentId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_Page\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageResourceEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Environment\")\n                        .IsRequired()\n                        .HasMaxLength(15);\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<int>(\"Sort\");\n\n                    b.Property<string>(\"Type\")\n                        .IsRequired()\n                        .HasMaxLength(10);\n\n                    b.Property<string>(\"Url\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.ToTable(\"cs_PageResource\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostCategory\", b =>\n                {\n                    b.Property<string>(\"Value\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PostEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.HasKey(\"Value\", \"PostEntityId\");\n\n                    b.HasIndex(\"PostEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.HasIndex(\"Value\");\n\n                    b.ToTable(\"cs_PostCategory\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"Email\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Ip\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"IsAdmin\");\n\n                    b.Property<bool>(\"IsApproved\");\n\n                    b.Property<string>(\"PostEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<DateTime>(\"PubDate\");\n\n                    b.Property<string>(\"UserAgent\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Website\")\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PostEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_PostComment\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"AutoTeaser\");\n\n                    b.Property<string>(\"BlogId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CreatedByUser\")\n                        .HasMaxLength(100);\n\n                    b.Property<DateTime>(\"CreatedUtc\");\n\n                    b.Property<string>(\"DraftAuthor\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"DraftContent\");\n\n                    b.Property<DateTime?>(\"DraftPubDate\");\n\n                    b.Property<string>(\"DraftSerializedModel\");\n\n                    b.Property<string>(\"ImageUrl\")\n                        .HasMaxLength(250);\n\n                    b.Property<bool>(\"IsFeatured\");\n\n                    b.Property<bool>(\"IsPublished\");\n\n                    b.Property<DateTime>(\"LastModified\");\n\n                    b.Property<string>(\"LastModifiedByUser\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"MetaHtml\");\n\n                    b.Property<string>(\"MetaJson\");\n\n                    b.Property<DateTime?>(\"PubDate\");\n\n                    b.Property<string>(\"SerializedModel\");\n\n                    b.Property<string>(\"Serializer\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"Slug\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"SuppressTeaser\");\n\n                    b.Property<string>(\"TeaserOverride\");\n\n                    b.Property<string>(\"TemplateKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ThumbnailUrl\")\n                        .HasMaxLength(250);\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"BlogId\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"Slug\");\n\n                    b.ToTable(\"cs_Post\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\")\n                        .WithMany(\"PageComments\")\n                        .HasForeignKey(\"PageEntityId\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageResourceEntity\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\")\n                        .WithMany(\"PageResources\")\n                        .HasForeignKey(\"PageEntityId\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\")\n                        .WithMany(\"PostComments\")\n                        .HasForeignKey(\"PostEntityId\");\n                });\n#pragma warning restore 612, 618\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.SQLite/Migrations/20180820133304_simplecontent-20180819.cs",
    "content": "﻿using Microsoft.EntityFrameworkCore.Migrations;\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.SQLite.Migrations\n{\n    public partial class simplecontent20180819 : Migration\n    {\n        protected override void Up(MigrationBuilder migrationBuilder)\n        {\n            migrationBuilder.AddColumn<string>(\n                name: \"AutoTeaser\",\n                table: \"cs_Post\",\n                nullable: true);\n\n            //migrationBuilder.AlterColumn<byte>(\n            //    name: \"TeaserTruncationMode\",\n            //    table: \"cs_ContentProject\",\n            //    nullable: false,\n            //    defaultValue: (byte)0,\n            //    oldClrType: typeof(byte),\n            //    oldDefaultValue: (byte)0)\n            //    .OldAnnotation(\"Sqlite:Autoincrement\", true);\n\n            //migrationBuilder.AlterColumn<byte>(\n            //    name: \"TeaserMode\",\n            //    table: \"cs_ContentProject\",\n            //    nullable: false,\n            //    defaultValue: (byte)0,\n            //    oldClrType: typeof(byte),\n            //    oldDefaultValue: (byte)0)\n            //    .OldAnnotation(\"Sqlite:Autoincrement\", true);\n        }\n\n        protected override void Down(MigrationBuilder migrationBuilder)\n        {\n            migrationBuilder.DropColumn(\n                name: \"AutoTeaser\",\n                table: \"cs_Post\");\n\n            //migrationBuilder.AlterColumn<byte>(\n            //    name: \"TeaserTruncationMode\",\n            //    table: \"cs_ContentProject\",\n            //    nullable: false,\n            //    defaultValue: (byte)0,\n            //    oldClrType: typeof(byte),\n            //    oldDefaultValue: (byte)0)\n            //    .Annotation(\"Sqlite:Autoincrement\", true);\n\n            //migrationBuilder.AlterColumn<byte>(\n            //    name: \"TeaserMode\",\n            //    table: \"cs_ContentProject\",\n            //    nullable: false,\n            //    defaultValue: (byte)0,\n            //    oldClrType: typeof(byte),\n            //    oldDefaultValue: (byte)0)\n            //    .Annotation(\"Sqlite:Autoincrement\", true);\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.SQLite/Migrations/20180908121905_simplecontent-20180908.Designer.cs",
    "content": "﻿// <auto-generated />\nusing System;\nusing Microsoft.EntityFrameworkCore;\nusing Microsoft.EntityFrameworkCore.Infrastructure;\nusing Microsoft.EntityFrameworkCore.Migrations;\nusing Microsoft.EntityFrameworkCore.Storage.ValueConversion;\nusing cloudscribe.SimpleContent.Models;\nusing cloudscribe.SimpleContent.Storage.EFCore.SQLite;\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.SQLite.Migrations\n{\n    [DbContext(typeof(SimpleContentDbContext))]\n    [Migration(\"20180908121905_simplecontent-20180908\")]\n    partial class simplecontent20180908\n    {\n        protected override void BuildTargetModel(ModelBuilder modelBuilder)\n        {\n#pragma warning disable 612, 618\n            modelBuilder\n                .HasAnnotation(\"ProductVersion\", \"2.1.1-rtm-30846\");\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Models.ContentHistory\", b =>\n                {\n                    b.Property<Guid>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ArchivedBy\")\n                        .HasMaxLength(255);\n\n                    b.Property<DateTime>(\"ArchivedUtc\");\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CategoriesCsv\");\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"ContentId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ContentSource\")\n                        .IsRequired()\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CreatedByUser\")\n                        .HasMaxLength(100);\n\n                    b.Property<DateTime>(\"CreatedUtc\");\n\n                    b.Property<string>(\"DraftAuthor\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"DraftContent\");\n\n                    b.Property<DateTime?>(\"DraftPubDate\");\n\n                    b.Property<string>(\"DraftSerializedModel\");\n\n                    b.Property<bool>(\"IsDraftHx\");\n\n                    b.Property<bool>(\"IsPublished\");\n\n                    b.Property<DateTime>(\"LastModified\");\n\n                    b.Property<string>(\"LastModifiedByUser\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"MetaDescription\");\n\n                    b.Property<string>(\"MetaHtml\");\n\n                    b.Property<string>(\"MetaJson\");\n\n                    b.Property<int>(\"PageOrder\");\n\n                    b.Property<string>(\"ParentId\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ParentSlug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ProjectId\");\n\n                    b.Property<DateTime?>(\"PubDate\");\n\n                    b.Property<string>(\"SerializedModel\");\n\n                    b.Property<string>(\"Serializer\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"Slug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"TeaserOverride\");\n\n                    b.Property<string>(\"TemplateKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ViewRoles\");\n\n                    b.Property<bool>(\"WasDeleted\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"ContentId\");\n\n                    b.HasIndex(\"ContentSource\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"CreatedByUser\");\n\n                    b.HasIndex(\"LastModifiedByUser\");\n\n                    b.HasIndex(\"Title\");\n\n                    b.ToTable(\"cs_ContentHistory\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Models.ProjectSettings\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<bool>(\"AddBlogToPagesTree\");\n\n                    b.Property<bool>(\"BlogMenuLinksToNewestPost\");\n\n                    b.Property<string>(\"BlogPageNavComponentVisibility\")\n                        .HasMaxLength(255);\n\n                    b.Property<int>(\"BlogPagePosition\");\n\n                    b.Property<string>(\"BlogPageText\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CdnUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ChannelCategoriesCsv\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ChannelRating\")\n                        .HasMaxLength(100);\n\n                    b.Property<int>(\"ChannelTimeToLive\");\n\n                    b.Property<string>(\"CommentNotificationEmail\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"CopyrightNotice\")\n                        .HasMaxLength(255);\n\n                    b.Property<int>(\"DaysToComment\");\n\n                    b.Property<string>(\"DefaultContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<int>(\"DefaultFeedItems\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue(20);\n\n                    b.Property<string>(\"DefaultPageSlug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Description\");\n\n                    b.Property<string>(\"DisqusShortName\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"FacebookAppId\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Image\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"IncludePubDateInPostUrls\");\n\n                    b.Property<string>(\"LanguageCode\")\n                        .HasMaxLength(10);\n\n                    b.Property<string>(\"LocalMediaVirtualPath\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ManagingEditorEmail\")\n                        .HasMaxLength(100);\n\n                    b.Property<int>(\"MaxFeedItems\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue(1000);\n\n                    b.Property<bool>(\"ModerateComments\");\n\n                    b.Property<int>(\"PostsPerPage\");\n\n                    b.Property<string>(\"PubDateFormat\")\n                        .HasMaxLength(75);\n\n                    b.Property<string>(\"Publisher\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"PublisherEntityType\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PublisherLogoHeight\")\n                        .HasMaxLength(20);\n\n                    b.Property<string>(\"PublisherLogoUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"PublisherLogoWidth\")\n                        .HasMaxLength(20);\n\n                    b.Property<string>(\"RecaptchaPrivateKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RecaptchaPublicKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RemoteFeedProcessorUseAgentFragment\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RemoteFeedUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"ShowFeaturedPostsOnDefaultPage\");\n\n                    b.Property<bool>(\"ShowRecentPostsOnDefaultPage\");\n\n                    b.Property<bool>(\"ShowTitle\");\n\n                    b.Property<string>(\"SiteName\")\n                        .HasMaxLength(200);\n\n                    b.Property<byte>(\"TeaserMode\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue((byte)0);\n\n                    b.Property<int>(\"TeaserTruncationLength\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue(20);\n\n                    b.Property<byte>(\"TeaserTruncationMode\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue((byte)0);\n\n                    b.Property<string>(\"TimeZoneId\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Title\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"TwitterCreator\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"TwitterPublisher\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"UseDefaultPageAsRootNode\");\n\n                    b.Property<string>(\"WebmasterEmail\")\n                        .HasMaxLength(100);\n\n                    b.HasKey(\"Id\");\n\n                    b.ToTable(\"cs_ContentProject\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageCategory\", b =>\n                {\n                    b.Property<string>(\"Value\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.HasKey(\"Value\", \"PageEntityId\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.HasIndex(\"Value\");\n\n                    b.ToTable(\"cs_PageCategory\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"Email\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Ip\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"IsAdmin\");\n\n                    b.Property<bool>(\"IsApproved\");\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<DateTime>(\"PubDate\");\n\n                    b.Property<string>(\"UserAgent\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Website\")\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_PageComment\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CreatedByUser\")\n                        .HasMaxLength(100);\n\n                    b.Property<DateTime>(\"CreatedUtc\");\n\n                    b.Property<bool>(\"DisableEditor\");\n\n                    b.Property<string>(\"DraftAuthor\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"DraftContent\");\n\n                    b.Property<DateTime?>(\"DraftPubDate\");\n\n                    b.Property<string>(\"DraftSerializedModel\");\n\n                    b.Property<string>(\"ExternalUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"IsPublished\");\n\n                    b.Property<DateTime>(\"LastModified\");\n\n                    b.Property<string>(\"LastModifiedByUser\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"MenuFilters\")\n                        .HasMaxLength(500);\n\n                    b.Property<bool>(\"MenuOnly\");\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"MetaHtml\");\n\n                    b.Property<string>(\"MetaJson\");\n\n                    b.Property<int>(\"PageOrder\");\n\n                    b.Property<string>(\"ParentId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ParentSlug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<DateTime?>(\"PubDate\");\n\n                    b.Property<string>(\"SerializedModel\");\n\n                    b.Property<string>(\"Serializer\")\n                        .HasMaxLength(50);\n\n                    b.Property<bool>(\"ShowCategories\");\n\n                    b.Property<bool>(\"ShowComments\");\n\n                    b.Property<bool>(\"ShowHeading\");\n\n                    b.Property<bool>(\"ShowLastModified\");\n\n                    b.Property<bool>(\"ShowMenu\");\n\n                    b.Property<bool>(\"ShowPubDate\");\n\n                    b.Property<string>(\"Slug\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"TemplateKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ViewRoles\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"ParentId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_Page\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageResourceEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Environment\")\n                        .IsRequired()\n                        .HasMaxLength(15);\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<int>(\"Sort\");\n\n                    b.Property<string>(\"Type\")\n                        .IsRequired()\n                        .HasMaxLength(10);\n\n                    b.Property<string>(\"Url\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.ToTable(\"cs_PageResource\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostCategory\", b =>\n                {\n                    b.Property<string>(\"Value\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PostEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.HasKey(\"Value\", \"PostEntityId\");\n\n                    b.HasIndex(\"PostEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.HasIndex(\"Value\");\n\n                    b.ToTable(\"cs_PostCategory\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"Email\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Ip\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"IsAdmin\");\n\n                    b.Property<bool>(\"IsApproved\");\n\n                    b.Property<string>(\"PostEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<DateTime>(\"PubDate\");\n\n                    b.Property<string>(\"UserAgent\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Website\")\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PostEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_PostComment\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"AutoTeaser\");\n\n                    b.Property<string>(\"BlogId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CreatedByUser\")\n                        .HasMaxLength(100);\n\n                    b.Property<DateTime>(\"CreatedUtc\");\n\n                    b.Property<string>(\"DraftAuthor\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"DraftContent\");\n\n                    b.Property<DateTime?>(\"DraftPubDate\");\n\n                    b.Property<string>(\"DraftSerializedModel\");\n\n                    b.Property<string>(\"ImageUrl\")\n                        .HasMaxLength(250);\n\n                    b.Property<bool>(\"IsFeatured\");\n\n                    b.Property<bool>(\"IsPublished\");\n\n                    b.Property<DateTime>(\"LastModified\");\n\n                    b.Property<string>(\"LastModifiedByUser\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"MetaHtml\");\n\n                    b.Property<string>(\"MetaJson\");\n\n                    b.Property<DateTime?>(\"PubDate\");\n\n                    b.Property<string>(\"SerializedModel\");\n\n                    b.Property<string>(\"Serializer\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"Slug\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"SuppressTeaser\");\n\n                    b.Property<string>(\"TeaserOverride\");\n\n                    b.Property<string>(\"TemplateKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ThumbnailUrl\")\n                        .HasMaxLength(250);\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"BlogId\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"Slug\");\n\n                    b.ToTable(\"cs_Post\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\")\n                        .WithMany(\"PageComments\")\n                        .HasForeignKey(\"PageEntityId\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageResourceEntity\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\")\n                        .WithMany(\"PageResources\")\n                        .HasForeignKey(\"PageEntityId\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\")\n                        .WithMany(\"PostComments\")\n                        .HasForeignKey(\"PostEntityId\");\n                });\n#pragma warning restore 612, 618\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.SQLite/Migrations/20180908121905_simplecontent-20180908.cs",
    "content": "﻿using Microsoft.EntityFrameworkCore.Migrations;\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.SQLite.Migrations\n{\n    public partial class simplecontent20180908 : Migration\n    {\n        protected override void Up(MigrationBuilder migrationBuilder)\n        {\n            //migrationBuilder.AlterColumn<byte>(\n            //    name: \"TeaserTruncationMode\",\n            //    table: \"cs_ContentProject\",\n            //    nullable: false,\n            //    defaultValue: (byte)0,\n            //    oldClrType: typeof(byte),\n            //    oldDefaultValue: (byte)0)\n            //    .OldAnnotation(\"Sqlite:Autoincrement\", true);\n\n            //migrationBuilder.AlterColumn<byte>(\n            //    name: \"TeaserMode\",\n            //    table: \"cs_ContentProject\",\n            //    nullable: false,\n            //    defaultValue: (byte)0,\n            //    oldClrType: typeof(byte),\n            //    oldDefaultValue: (byte)0)\n            //    .OldAnnotation(\"Sqlite:Autoincrement\", true);\n\n            //migrationBuilder.AlterColumn<int>(\n            //    name: \"MaxFeedItems\",\n            //    table: \"cs_ContentProject\",\n            //    nullable: false,\n            //    defaultValue: 1000,\n            //    oldClrType: typeof(int))\n            //    .Annotation(\"Sqlite:Autoincrement\", true);\n\n            //migrationBuilder.AlterColumn<int>(\n            //    name: \"DefaultFeedItems\",\n            //    table: \"cs_ContentProject\",\n            //    nullable: false,\n            //    defaultValue: 20,\n            //    oldClrType: typeof(int))\n            //    .Annotation(\"Sqlite:Autoincrement\", true);\n        }\n\n        protected override void Down(MigrationBuilder migrationBuilder)\n        {\n            //migrationBuilder.AlterColumn<byte>(\n            //    name: \"TeaserTruncationMode\",\n            //    table: \"cs_ContentProject\",\n            //    nullable: false,\n            //    defaultValue: (byte)0,\n            //    oldClrType: typeof(byte),\n            //    oldDefaultValue: (byte)0)\n            //    .Annotation(\"Sqlite:Autoincrement\", true);\n\n            //migrationBuilder.AlterColumn<byte>(\n            //    name: \"TeaserMode\",\n            //    table: \"cs_ContentProject\",\n            //    nullable: false,\n            //    defaultValue: (byte)0,\n            //    oldClrType: typeof(byte),\n            //    oldDefaultValue: (byte)0)\n            //    .Annotation(\"Sqlite:Autoincrement\", true);\n\n            //migrationBuilder.AlterColumn<int>(\n            //    name: \"MaxFeedItems\",\n            //    table: \"cs_ContentProject\",\n            //    nullable: false,\n            //    oldClrType: typeof(int),\n            //    oldDefaultValue: 1000)\n            //    .OldAnnotation(\"Sqlite:Autoincrement\", true);\n\n            //migrationBuilder.AlterColumn<int>(\n            //    name: \"DefaultFeedItems\",\n            //    table: \"cs_ContentProject\",\n            //    nullable: false,\n            //    oldClrType: typeof(int),\n            //    oldDefaultValue: 20)\n            //    .OldAnnotation(\"Sqlite:Autoincrement\", true);\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.SQLite/Migrations/20190210161404_simplecontent-20190210.Designer.cs",
    "content": "﻿// <auto-generated />\nusing System;\nusing Microsoft.EntityFrameworkCore;\nusing Microsoft.EntityFrameworkCore.Infrastructure;\nusing Microsoft.EntityFrameworkCore.Migrations;\nusing Microsoft.EntityFrameworkCore.Storage.ValueConversion;\nusing cloudscribe.SimpleContent.Models;\nusing cloudscribe.SimpleContent.Storage.EFCore.SQLite;\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.SQLite.Migrations\n{\n    [DbContext(typeof(SimpleContentDbContext))]\n    [Migration(\"20190210161404_simplecontent-20190210\")]\n    partial class simplecontent20190210\n    {\n        protected override void BuildTargetModel(ModelBuilder modelBuilder)\n        {\n#pragma warning disable 612, 618\n            modelBuilder\n                .HasAnnotation(\"ProductVersion\", \"2.1.4-rtm-31024\");\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Models.ContentHistory\", b =>\n                {\n                    b.Property<Guid>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ArchivedBy\")\n                        .HasMaxLength(255);\n\n                    b.Property<DateTime>(\"ArchivedUtc\");\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CategoriesCsv\");\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"ContentId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ContentSource\")\n                        .IsRequired()\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CreatedByUser\")\n                        .HasMaxLength(100);\n\n                    b.Property<DateTime>(\"CreatedUtc\");\n\n                    b.Property<string>(\"DraftAuthor\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"DraftContent\");\n\n                    b.Property<DateTime?>(\"DraftPubDate\");\n\n                    b.Property<string>(\"DraftSerializedModel\");\n\n                    b.Property<bool>(\"IsDraftHx\");\n\n                    b.Property<bool>(\"IsPublished\");\n\n                    b.Property<DateTime>(\"LastModified\");\n\n                    b.Property<string>(\"LastModifiedByUser\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"MetaDescription\");\n\n                    b.Property<string>(\"MetaHtml\");\n\n                    b.Property<string>(\"MetaJson\");\n\n                    b.Property<int>(\"PageOrder\");\n\n                    b.Property<string>(\"ParentId\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ParentSlug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ProjectId\");\n\n                    b.Property<DateTime?>(\"PubDate\");\n\n                    b.Property<string>(\"SerializedModel\");\n\n                    b.Property<string>(\"Serializer\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"Slug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"TeaserOverride\");\n\n                    b.Property<string>(\"TemplateKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ViewRoles\");\n\n                    b.Property<bool>(\"WasDeleted\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"ContentId\");\n\n                    b.HasIndex(\"ContentSource\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"CreatedByUser\");\n\n                    b.HasIndex(\"LastModifiedByUser\");\n\n                    b.HasIndex(\"Title\");\n\n                    b.ToTable(\"cs_ContentHistory\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Models.ProjectSettings\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"AboutContent\");\n\n                    b.Property<bool>(\"AddBlogToPagesTree\");\n\n                    b.Property<bool>(\"BlogMenuLinksToNewestPost\");\n\n                    b.Property<string>(\"BlogPageNavComponentVisibility\")\n                        .HasMaxLength(255);\n\n                    b.Property<int>(\"BlogPagePosition\");\n\n                    b.Property<string>(\"BlogPageText\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CdnUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ChannelCategoriesCsv\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ChannelRating\")\n                        .HasMaxLength(100);\n\n                    b.Property<int>(\"ChannelTimeToLive\");\n\n                    b.Property<string>(\"CommentNotificationEmail\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"CopyrightNotice\")\n                        .HasMaxLength(255);\n\n                    b.Property<int>(\"DaysToComment\");\n\n                    b.Property<string>(\"DefaultContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<int>(\"DefaultFeedItems\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue(20);\n\n                    b.Property<string>(\"DefaultPageSlug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Description\");\n\n                    b.Property<string>(\"DisqusShortName\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"FacebookAppId\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Image\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"IncludePubDateInPostUrls\");\n\n                    b.Property<string>(\"LanguageCode\")\n                        .HasMaxLength(10);\n\n                    b.Property<string>(\"LocalMediaVirtualPath\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ManagingEditorEmail\")\n                        .HasMaxLength(100);\n\n                    b.Property<int>(\"MaxFeedItems\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue(1000);\n\n                    b.Property<bool>(\"ModerateComments\");\n\n                    b.Property<int>(\"PostsPerPage\");\n\n                    b.Property<string>(\"PubDateFormat\")\n                        .HasMaxLength(75);\n\n                    b.Property<string>(\"Publisher\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"PublisherEntityType\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PublisherLogoHeight\")\n                        .HasMaxLength(20);\n\n                    b.Property<string>(\"PublisherLogoUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"PublisherLogoWidth\")\n                        .HasMaxLength(20);\n\n                    b.Property<string>(\"RecaptchaPrivateKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RecaptchaPublicKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RemoteFeedProcessorUseAgentFragment\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RemoteFeedUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"ShowFeaturedPostsOnDefaultPage\");\n\n                    b.Property<bool>(\"ShowRecentPostsOnDefaultPage\");\n\n                    b.Property<bool>(\"ShowTitle\");\n\n                    b.Property<string>(\"SiteName\")\n                        .HasMaxLength(200);\n\n                    b.Property<byte>(\"TeaserMode\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue((byte)0);\n\n                    b.Property<int>(\"TeaserTruncationLength\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue(20);\n\n                    b.Property<byte>(\"TeaserTruncationMode\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue((byte)0);\n\n                    b.Property<string>(\"TimeZoneId\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Title\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"TwitterCreator\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"TwitterPublisher\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"UseDefaultPageAsRootNode\");\n\n                    b.Property<string>(\"WebmasterEmail\")\n                        .HasMaxLength(100);\n\n                    b.HasKey(\"Id\");\n\n                    b.ToTable(\"cs_ContentProject\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageCategory\", b =>\n                {\n                    b.Property<string>(\"Value\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.HasKey(\"Value\", \"PageEntityId\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.HasIndex(\"Value\");\n\n                    b.ToTable(\"cs_PageCategory\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"Email\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Ip\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"IsAdmin\");\n\n                    b.Property<bool>(\"IsApproved\");\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<DateTime>(\"PubDate\");\n\n                    b.Property<string>(\"UserAgent\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Website\")\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_PageComment\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CreatedByUser\")\n                        .HasMaxLength(100);\n\n                    b.Property<DateTime>(\"CreatedUtc\");\n\n                    b.Property<bool>(\"DisableEditor\");\n\n                    b.Property<string>(\"DraftAuthor\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"DraftContent\");\n\n                    b.Property<DateTime?>(\"DraftPubDate\");\n\n                    b.Property<string>(\"DraftSerializedModel\");\n\n                    b.Property<string>(\"ExternalUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"IsPublished\");\n\n                    b.Property<DateTime>(\"LastModified\");\n\n                    b.Property<string>(\"LastModifiedByUser\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"MenuFilters\")\n                        .HasMaxLength(500);\n\n                    b.Property<bool>(\"MenuOnly\");\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"MetaHtml\");\n\n                    b.Property<string>(\"MetaJson\");\n\n                    b.Property<int>(\"PageOrder\");\n\n                    b.Property<string>(\"ParentId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ParentSlug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<DateTime?>(\"PubDate\");\n\n                    b.Property<string>(\"SerializedModel\");\n\n                    b.Property<string>(\"Serializer\")\n                        .HasMaxLength(50);\n\n                    b.Property<bool>(\"ShowCategories\");\n\n                    b.Property<bool>(\"ShowComments\");\n\n                    b.Property<bool>(\"ShowHeading\");\n\n                    b.Property<bool>(\"ShowLastModified\");\n\n                    b.Property<bool>(\"ShowMenu\");\n\n                    b.Property<bool>(\"ShowPubDate\");\n\n                    b.Property<string>(\"Slug\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"TemplateKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ViewRoles\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"ParentId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_Page\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageResourceEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Environment\")\n                        .IsRequired()\n                        .HasMaxLength(15);\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<int>(\"Sort\");\n\n                    b.Property<string>(\"Type\")\n                        .IsRequired()\n                        .HasMaxLength(10);\n\n                    b.Property<string>(\"Url\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.ToTable(\"cs_PageResource\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostCategory\", b =>\n                {\n                    b.Property<string>(\"Value\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PostEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.HasKey(\"Value\", \"PostEntityId\");\n\n                    b.HasIndex(\"PostEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.HasIndex(\"Value\");\n\n                    b.ToTable(\"cs_PostCategory\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"Email\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Ip\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"IsAdmin\");\n\n                    b.Property<bool>(\"IsApproved\");\n\n                    b.Property<string>(\"PostEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<DateTime>(\"PubDate\");\n\n                    b.Property<string>(\"UserAgent\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Website\")\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PostEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_PostComment\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"AutoTeaser\");\n\n                    b.Property<string>(\"BlogId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CreatedByUser\")\n                        .HasMaxLength(100);\n\n                    b.Property<DateTime>(\"CreatedUtc\");\n\n                    b.Property<string>(\"DraftAuthor\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"DraftContent\");\n\n                    b.Property<DateTime?>(\"DraftPubDate\");\n\n                    b.Property<string>(\"DraftSerializedModel\");\n\n                    b.Property<string>(\"ImageUrl\")\n                        .HasMaxLength(250);\n\n                    b.Property<bool>(\"IsFeatured\");\n\n                    b.Property<bool>(\"IsPublished\");\n\n                    b.Property<DateTime>(\"LastModified\");\n\n                    b.Property<string>(\"LastModifiedByUser\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"MetaHtml\");\n\n                    b.Property<string>(\"MetaJson\");\n\n                    b.Property<DateTime?>(\"PubDate\");\n\n                    b.Property<string>(\"SerializedModel\");\n\n                    b.Property<string>(\"Serializer\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"Slug\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"SuppressTeaser\");\n\n                    b.Property<string>(\"TeaserOverride\");\n\n                    b.Property<string>(\"TemplateKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ThumbnailUrl\")\n                        .HasMaxLength(250);\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"BlogId\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"Slug\");\n\n                    b.ToTable(\"cs_Post\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\")\n                        .WithMany(\"PageComments\")\n                        .HasForeignKey(\"PageEntityId\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageResourceEntity\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\")\n                        .WithMany(\"PageResources\")\n                        .HasForeignKey(\"PageEntityId\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\")\n                        .WithMany(\"PostComments\")\n                        .HasForeignKey(\"PostEntityId\");\n                });\n#pragma warning restore 612, 618\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.SQLite/Migrations/20190210161404_simplecontent-20190210.cs",
    "content": "﻿using Microsoft.EntityFrameworkCore.Migrations;\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.SQLite.Migrations\n{\n    public partial class simplecontent20190210 : Migration\n    {\n        protected override void Up(MigrationBuilder migrationBuilder)\n        {\n            \n\n            migrationBuilder.AddColumn<string>(\n                name: \"AboutContent\",\n                table: \"cs_ContentProject\",\n                nullable: true);\n        }\n\n        protected override void Down(MigrationBuilder migrationBuilder)\n        {\n            //migrationBuilder.DropColumn(\n            //    name: \"AboutContent\",\n            //    table: \"cs_ContentProject\");\n\n           \n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.SQLite/Migrations/20190213121319_simplecontent-20190212.Designer.cs",
    "content": "﻿// <auto-generated />\nusing System;\nusing Microsoft.EntityFrameworkCore;\nusing Microsoft.EntityFrameworkCore.Infrastructure;\nusing Microsoft.EntityFrameworkCore.Migrations;\nusing Microsoft.EntityFrameworkCore.Storage.ValueConversion;\nusing cloudscribe.SimpleContent.Models;\nusing cloudscribe.SimpleContent.Storage.EFCore.SQLite;\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.SQLite.Migrations\n{\n    [DbContext(typeof(SimpleContentDbContext))]\n    [Migration(\"20190213121319_simplecontent-20190212\")]\n    partial class simplecontent20190212\n    {\n        protected override void BuildTargetModel(ModelBuilder modelBuilder)\n        {\n#pragma warning disable 612, 618\n            modelBuilder\n                .HasAnnotation(\"ProductVersion\", \"2.1.8-servicing-32085\");\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Models.ContentHistory\", b =>\n                {\n                    b.Property<Guid>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ArchivedBy\")\n                        .HasMaxLength(255);\n\n                    b.Property<DateTime>(\"ArchivedUtc\");\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CategoriesCsv\");\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"ContentId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ContentSource\")\n                        .IsRequired()\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CreatedByUser\")\n                        .HasMaxLength(100);\n\n                    b.Property<DateTime>(\"CreatedUtc\");\n\n                    b.Property<string>(\"DraftAuthor\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"DraftContent\");\n\n                    b.Property<DateTime?>(\"DraftPubDate\");\n\n                    b.Property<string>(\"DraftSerializedModel\");\n\n                    b.Property<bool>(\"IsDraftHx\");\n\n                    b.Property<bool>(\"IsPublished\");\n\n                    b.Property<DateTime>(\"LastModified\");\n\n                    b.Property<string>(\"LastModifiedByUser\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"MetaDescription\");\n\n                    b.Property<string>(\"MetaHtml\");\n\n                    b.Property<string>(\"MetaJson\");\n\n                    b.Property<int>(\"PageOrder\");\n\n                    b.Property<string>(\"ParentId\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ParentSlug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ProjectId\");\n\n                    b.Property<DateTime?>(\"PubDate\");\n\n                    b.Property<string>(\"SerializedModel\");\n\n                    b.Property<string>(\"Serializer\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"Slug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"TeaserOverride\");\n\n                    b.Property<string>(\"TemplateKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ViewRoles\");\n\n                    b.Property<bool>(\"WasDeleted\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"ContentId\");\n\n                    b.HasIndex(\"ContentSource\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"CreatedByUser\");\n\n                    b.HasIndex(\"LastModifiedByUser\");\n\n                    b.HasIndex(\"Title\");\n\n                    b.ToTable(\"cs_ContentHistory\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Models.ProjectSettings\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"AboutContent\");\n\n                    b.Property<string>(\"AboutHeading\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"AddBlogToPagesTree\");\n\n                    b.Property<bool>(\"BlogMenuLinksToNewestPost\");\n\n                    b.Property<string>(\"BlogPageNavComponentVisibility\")\n                        .HasMaxLength(255);\n\n                    b.Property<int>(\"BlogPagePosition\");\n\n                    b.Property<string>(\"BlogPageText\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CdnUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ChannelCategoriesCsv\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ChannelRating\")\n                        .HasMaxLength(100);\n\n                    b.Property<int>(\"ChannelTimeToLive\");\n\n                    b.Property<string>(\"CommentNotificationEmail\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"CopyrightNotice\")\n                        .HasMaxLength(255);\n\n                    b.Property<int>(\"DaysToComment\");\n\n                    b.Property<string>(\"DefaultContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<int>(\"DefaultFeedItems\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue(20);\n\n                    b.Property<string>(\"DefaultPageSlug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Description\");\n\n                    b.Property<string>(\"DisqusShortName\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"FacebookAppId\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Image\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"IncludePubDateInPostUrls\");\n\n                    b.Property<string>(\"LanguageCode\")\n                        .HasMaxLength(10);\n\n                    b.Property<string>(\"LocalMediaVirtualPath\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ManagingEditorEmail\")\n                        .HasMaxLength(100);\n\n                    b.Property<int>(\"MaxFeedItems\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue(1000);\n\n                    b.Property<bool>(\"ModerateComments\");\n\n                    b.Property<int>(\"PostsPerPage\");\n\n                    b.Property<string>(\"PubDateFormat\")\n                        .HasMaxLength(75);\n\n                    b.Property<string>(\"Publisher\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"PublisherEntityType\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PublisherLogoHeight\")\n                        .HasMaxLength(20);\n\n                    b.Property<string>(\"PublisherLogoUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"PublisherLogoWidth\")\n                        .HasMaxLength(20);\n\n                    b.Property<string>(\"RecaptchaPrivateKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RecaptchaPublicKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RemoteFeedProcessorUseAgentFragment\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RemoteFeedUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"ShowAboutBox\");\n\n                    b.Property<bool>(\"ShowFeaturedPostsOnDefaultPage\");\n\n                    b.Property<bool>(\"ShowRecentPostsOnDefaultPage\");\n\n                    b.Property<bool>(\"ShowRelatedPosts\");\n\n                    b.Property<bool>(\"ShowTitle\");\n\n                    b.Property<string>(\"SiteName\")\n                        .HasMaxLength(200);\n\n                    b.Property<byte>(\"TeaserMode\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue((byte)0);\n\n                    b.Property<int>(\"TeaserTruncationLength\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue(20);\n\n                    b.Property<byte>(\"TeaserTruncationMode\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue((byte)0);\n\n                    b.Property<string>(\"TimeZoneId\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Title\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"TwitterCreator\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"TwitterPublisher\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"UseDefaultPageAsRootNode\");\n\n                    b.Property<string>(\"WebmasterEmail\")\n                        .HasMaxLength(100);\n\n                    b.HasKey(\"Id\");\n\n                    b.ToTable(\"cs_ContentProject\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageCategory\", b =>\n                {\n                    b.Property<string>(\"Value\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.HasKey(\"Value\", \"PageEntityId\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.HasIndex(\"Value\");\n\n                    b.ToTable(\"cs_PageCategory\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"Email\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Ip\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"IsAdmin\");\n\n                    b.Property<bool>(\"IsApproved\");\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<DateTime>(\"PubDate\");\n\n                    b.Property<string>(\"UserAgent\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Website\")\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_PageComment\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CreatedByUser\")\n                        .HasMaxLength(100);\n\n                    b.Property<DateTime>(\"CreatedUtc\");\n\n                    b.Property<bool>(\"DisableEditor\");\n\n                    b.Property<string>(\"DraftAuthor\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"DraftContent\");\n\n                    b.Property<DateTime?>(\"DraftPubDate\");\n\n                    b.Property<string>(\"DraftSerializedModel\");\n\n                    b.Property<string>(\"ExternalUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"IsPublished\");\n\n                    b.Property<DateTime>(\"LastModified\");\n\n                    b.Property<string>(\"LastModifiedByUser\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"MenuFilters\")\n                        .HasMaxLength(500);\n\n                    b.Property<bool>(\"MenuOnly\");\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"MetaHtml\");\n\n                    b.Property<string>(\"MetaJson\");\n\n                    b.Property<int>(\"PageOrder\");\n\n                    b.Property<string>(\"ParentId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ParentSlug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<DateTime?>(\"PubDate\");\n\n                    b.Property<string>(\"SerializedModel\");\n\n                    b.Property<string>(\"Serializer\")\n                        .HasMaxLength(50);\n\n                    b.Property<bool>(\"ShowCategories\");\n\n                    b.Property<bool>(\"ShowComments\");\n\n                    b.Property<bool>(\"ShowHeading\");\n\n                    b.Property<bool>(\"ShowLastModified\");\n\n                    b.Property<bool>(\"ShowMenu\");\n\n                    b.Property<bool>(\"ShowPubDate\");\n\n                    b.Property<string>(\"Slug\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"TemplateKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ViewRoles\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"ParentId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_Page\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageResourceEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Environment\")\n                        .IsRequired()\n                        .HasMaxLength(15);\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<int>(\"Sort\");\n\n                    b.Property<string>(\"Type\")\n                        .IsRequired()\n                        .HasMaxLength(10);\n\n                    b.Property<string>(\"Url\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.ToTable(\"cs_PageResource\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostCategory\", b =>\n                {\n                    b.Property<string>(\"Value\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PostEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.HasKey(\"Value\", \"PostEntityId\");\n\n                    b.HasIndex(\"PostEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.HasIndex(\"Value\");\n\n                    b.ToTable(\"cs_PostCategory\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"Email\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Ip\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"IsAdmin\");\n\n                    b.Property<bool>(\"IsApproved\");\n\n                    b.Property<string>(\"PostEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<DateTime>(\"PubDate\");\n\n                    b.Property<string>(\"UserAgent\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Website\")\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PostEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_PostComment\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"AutoTeaser\");\n\n                    b.Property<string>(\"BlogId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CreatedByUser\")\n                        .HasMaxLength(100);\n\n                    b.Property<DateTime>(\"CreatedUtc\");\n\n                    b.Property<string>(\"DraftAuthor\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"DraftContent\");\n\n                    b.Property<DateTime?>(\"DraftPubDate\");\n\n                    b.Property<string>(\"DraftSerializedModel\");\n\n                    b.Property<string>(\"ImageUrl\")\n                        .HasMaxLength(250);\n\n                    b.Property<bool>(\"IsFeatured\");\n\n                    b.Property<bool>(\"IsPublished\");\n\n                    b.Property<DateTime>(\"LastModified\");\n\n                    b.Property<string>(\"LastModifiedByUser\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"MetaHtml\");\n\n                    b.Property<string>(\"MetaJson\");\n\n                    b.Property<DateTime?>(\"PubDate\");\n\n                    b.Property<string>(\"SerializedModel\");\n\n                    b.Property<string>(\"Serializer\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"Slug\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"SuppressTeaser\");\n\n                    b.Property<string>(\"TeaserOverride\");\n\n                    b.Property<string>(\"TemplateKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ThumbnailUrl\")\n                        .HasMaxLength(250);\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"BlogId\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"Slug\");\n\n                    b.ToTable(\"cs_Post\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\")\n                        .WithMany(\"PageComments\")\n                        .HasForeignKey(\"PageEntityId\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageResourceEntity\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\")\n                        .WithMany(\"PageResources\")\n                        .HasForeignKey(\"PageEntityId\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\")\n                        .WithMany(\"PostComments\")\n                        .HasForeignKey(\"PostEntityId\");\n                });\n#pragma warning restore 612, 618\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.SQLite/Migrations/20190213121319_simplecontent-20190212.cs",
    "content": "﻿using Microsoft.EntityFrameworkCore.Migrations;\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.SQLite.Migrations\n{\n    public partial class simplecontent20190212 : Migration\n    {\n        protected override void Up(MigrationBuilder migrationBuilder)\n        {\n            //migrationBuilder.AlterColumn<byte>(\n            //    name: \"TeaserTruncationMode\",\n            //    table: \"cs_ContentProject\",\n            //    nullable: false,\n            //    defaultValue: (byte)0,\n            //    oldClrType: typeof(byte),\n            //    oldDefaultValue: (byte)0)\n            //    .OldAnnotation(\"Sqlite:Autoincrement\", true);\n\n            //migrationBuilder.AlterColumn<byte>(\n            //    name: \"TeaserMode\",\n            //    table: \"cs_ContentProject\",\n            //    nullable: false,\n            //    defaultValue: (byte)0,\n            //    oldClrType: typeof(byte),\n            //    oldDefaultValue: (byte)0)\n            //    .OldAnnotation(\"Sqlite:Autoincrement\", true);\n\n            migrationBuilder.AddColumn<string>(\n                name: \"AboutHeading\",\n                table: \"cs_ContentProject\",\n                maxLength: 255,\n                nullable: true);\n\n            migrationBuilder.AddColumn<bool>(\n                name: \"ShowAboutBox\",\n                table: \"cs_ContentProject\",\n                nullable: false,\n                defaultValue: false);\n\n            migrationBuilder.AddColumn<bool>(\n                name: \"ShowRelatedPosts\",\n                table: \"cs_ContentProject\",\n                nullable: false,\n                defaultValue: false);\n        }\n\n        protected override void Down(MigrationBuilder migrationBuilder)\n        {\n            migrationBuilder.DropColumn(\n                name: \"AboutHeading\",\n                table: \"cs_ContentProject\");\n\n            migrationBuilder.DropColumn(\n                name: \"ShowAboutBox\",\n                table: \"cs_ContentProject\");\n\n            migrationBuilder.DropColumn(\n                name: \"ShowRelatedPosts\",\n                table: \"cs_ContentProject\");\n\n            //migrationBuilder.AlterColumn<byte>(\n            //    name: \"TeaserTruncationMode\",\n            //    table: \"cs_ContentProject\",\n            //    nullable: false,\n            //    defaultValue: (byte)0,\n            //    oldClrType: typeof(byte),\n            //    oldDefaultValue: (byte)0)\n            //    .Annotation(\"Sqlite:Autoincrement\", true);\n\n            //migrationBuilder.AlterColumn<byte>(\n            //    name: \"TeaserMode\",\n            //    table: \"cs_ContentProject\",\n            //    nullable: false,\n            //    defaultValue: (byte)0,\n            //    oldClrType: typeof(byte),\n            //    oldDefaultValue: (byte)0)\n            //    .Annotation(\"Sqlite:Autoincrement\", true);\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.SQLite/Migrations/20190304162117_simplecontent-20190304.Designer.cs",
    "content": "﻿// <auto-generated />\nusing System;\nusing Microsoft.EntityFrameworkCore;\nusing Microsoft.EntityFrameworkCore.Infrastructure;\nusing Microsoft.EntityFrameworkCore.Migrations;\nusing Microsoft.EntityFrameworkCore.Storage.ValueConversion;\nusing cloudscribe.SimpleContent.Models;\nusing cloudscribe.SimpleContent.Storage.EFCore.SQLite;\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.SQLite.Migrations\n{\n    [DbContext(typeof(SimpleContentDbContext))]\n    [Migration(\"20190304162117_simplecontent-20190304\")]\n    partial class simplecontent20190304\n    {\n        protected override void BuildTargetModel(ModelBuilder modelBuilder)\n        {\n#pragma warning disable 612, 618\n            modelBuilder\n                .HasAnnotation(\"ProductVersion\", \"2.1.8-servicing-32085\");\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Models.ContentHistory\", b =>\n                {\n                    b.Property<Guid>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ArchivedBy\")\n                        .HasMaxLength(255);\n\n                    b.Property<DateTime>(\"ArchivedUtc\");\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CategoriesCsv\");\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"ContentId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ContentSource\")\n                        .IsRequired()\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CreatedByUser\")\n                        .HasMaxLength(100);\n\n                    b.Property<DateTime>(\"CreatedUtc\");\n\n                    b.Property<string>(\"DraftAuthor\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"DraftContent\");\n\n                    b.Property<DateTime?>(\"DraftPubDate\");\n\n                    b.Property<string>(\"DraftSerializedModel\");\n\n                    b.Property<bool>(\"IsDraftHx\");\n\n                    b.Property<bool>(\"IsPublished\");\n\n                    b.Property<DateTime>(\"LastModified\");\n\n                    b.Property<string>(\"LastModifiedByUser\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"MetaDescription\");\n\n                    b.Property<string>(\"MetaHtml\");\n\n                    b.Property<string>(\"MetaJson\");\n\n                    b.Property<int>(\"PageOrder\");\n\n                    b.Property<string>(\"ParentId\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ParentSlug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ProjectId\")\n                        .HasMaxLength(50);\n\n                    b.Property<DateTime?>(\"PubDate\");\n\n                    b.Property<string>(\"SerializedModel\");\n\n                    b.Property<string>(\"Serializer\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"Slug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"TeaserOverride\");\n\n                    b.Property<string>(\"TemplateKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ViewRoles\");\n\n                    b.Property<bool>(\"WasDeleted\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"ContentId\");\n\n                    b.HasIndex(\"ContentSource\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"CreatedByUser\");\n\n                    b.HasIndex(\"LastModifiedByUser\");\n\n                    b.HasIndex(\"Title\");\n\n                    b.ToTable(\"cs_ContentHistory\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Models.ProjectSettings\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"AboutContent\");\n\n                    b.Property<string>(\"AboutHeading\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"AddBlogToPagesTree\");\n\n                    b.Property<bool>(\"BlogMenuLinksToNewestPost\");\n\n                    b.Property<string>(\"BlogPageNavComponentVisibility\")\n                        .HasMaxLength(255);\n\n                    b.Property<int>(\"BlogPagePosition\");\n\n                    b.Property<string>(\"BlogPageText\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CdnUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ChannelCategoriesCsv\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ChannelRating\")\n                        .HasMaxLength(100);\n\n                    b.Property<int>(\"ChannelTimeToLive\");\n\n                    b.Property<string>(\"CommentNotificationEmail\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"CopyrightNotice\")\n                        .HasMaxLength(255);\n\n                    b.Property<int>(\"DaysToComment\");\n\n                    b.Property<string>(\"DefaultContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<int>(\"DefaultFeedItems\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue(20);\n\n                    b.Property<string>(\"DefaultPageSlug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Description\");\n\n                    b.Property<string>(\"DisqusShortName\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"FacebookAppId\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Image\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"IncludePubDateInPostUrls\");\n\n                    b.Property<string>(\"LanguageCode\")\n                        .HasMaxLength(10);\n\n                    b.Property<string>(\"LocalMediaVirtualPath\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ManagingEditorEmail\")\n                        .HasMaxLength(100);\n\n                    b.Property<int>(\"MaxFeedItems\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue(1000);\n\n                    b.Property<bool>(\"ModerateComments\");\n\n                    b.Property<int>(\"PostsPerPage\");\n\n                    b.Property<string>(\"PubDateFormat\")\n                        .HasMaxLength(75);\n\n                    b.Property<string>(\"Publisher\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"PublisherEntityType\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PublisherLogoHeight\")\n                        .HasMaxLength(20);\n\n                    b.Property<string>(\"PublisherLogoUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"PublisherLogoWidth\")\n                        .HasMaxLength(20);\n\n                    b.Property<string>(\"RecaptchaPrivateKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RecaptchaPublicKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RemoteFeedProcessorUseAgentFragment\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RemoteFeedUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"ShowAboutBox\");\n\n                    b.Property<bool>(\"ShowFeaturedPostsOnDefaultPage\");\n\n                    b.Property<bool>(\"ShowRecentPostsOnDefaultPage\");\n\n                    b.Property<bool>(\"ShowRelatedPosts\");\n\n                    b.Property<bool>(\"ShowTitle\");\n\n                    b.Property<string>(\"SiteName\")\n                        .HasMaxLength(200);\n\n                    b.Property<byte>(\"TeaserMode\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue((byte)0);\n\n                    b.Property<int>(\"TeaserTruncationLength\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue(20);\n\n                    b.Property<byte>(\"TeaserTruncationMode\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue((byte)0);\n\n                    b.Property<string>(\"TimeZoneId\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Title\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"TwitterCreator\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"TwitterPublisher\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"UseDefaultPageAsRootNode\");\n\n                    b.Property<string>(\"WebmasterEmail\")\n                        .HasMaxLength(100);\n\n                    b.HasKey(\"Id\");\n\n                    b.ToTable(\"cs_ContentProject\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageCategory\", b =>\n                {\n                    b.Property<string>(\"Value\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(50);\n\n                    b.HasKey(\"Value\", \"PageEntityId\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.HasIndex(\"Value\");\n\n                    b.ToTable(\"cs_PageCategory\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"Email\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Ip\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"IsAdmin\");\n\n                    b.Property<bool>(\"IsApproved\");\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(50);\n\n                    b.Property<DateTime>(\"PubDate\");\n\n                    b.Property<string>(\"UserAgent\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Website\")\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_PageComment\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CreatedByUser\")\n                        .HasMaxLength(100);\n\n                    b.Property<DateTime>(\"CreatedUtc\");\n\n                    b.Property<bool>(\"DisableEditor\");\n\n                    b.Property<string>(\"DraftAuthor\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"DraftContent\");\n\n                    b.Property<DateTime?>(\"DraftPubDate\");\n\n                    b.Property<string>(\"DraftSerializedModel\");\n\n                    b.Property<string>(\"ExternalUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"IsPublished\");\n\n                    b.Property<DateTime>(\"LastModified\");\n\n                    b.Property<string>(\"LastModifiedByUser\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"MenuFilters\")\n                        .HasMaxLength(500);\n\n                    b.Property<bool>(\"MenuOnly\");\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"MetaHtml\");\n\n                    b.Property<string>(\"MetaJson\");\n\n                    b.Property<int>(\"PageOrder\");\n\n                    b.Property<string>(\"ParentId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ParentSlug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(50);\n\n                    b.Property<DateTime?>(\"PubDate\");\n\n                    b.Property<string>(\"SerializedModel\");\n\n                    b.Property<string>(\"Serializer\")\n                        .HasMaxLength(50);\n\n                    b.Property<bool>(\"ShowCategories\");\n\n                    b.Property<bool>(\"ShowComments\");\n\n                    b.Property<bool>(\"ShowHeading\");\n\n                    b.Property<bool>(\"ShowLastModified\");\n\n                    b.Property<bool>(\"ShowMenu\");\n\n                    b.Property<bool>(\"ShowPubDate\");\n\n                    b.Property<string>(\"Slug\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"TemplateKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ViewRoles\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"ParentId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_Page\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageResourceEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Environment\")\n                        .IsRequired()\n                        .HasMaxLength(15);\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<int>(\"Sort\");\n\n                    b.Property<string>(\"Type\")\n                        .IsRequired()\n                        .HasMaxLength(10);\n\n                    b.Property<string>(\"Url\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.ToTable(\"cs_PageResource\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostCategory\", b =>\n                {\n                    b.Property<string>(\"Value\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PostEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(50);\n\n                    b.HasKey(\"Value\", \"PostEntityId\");\n\n                    b.HasIndex(\"PostEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.HasIndex(\"Value\");\n\n                    b.ToTable(\"cs_PostCategory\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"Email\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Ip\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"IsAdmin\");\n\n                    b.Property<bool>(\"IsApproved\");\n\n                    b.Property<string>(\"PostEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(50);\n\n                    b.Property<DateTime>(\"PubDate\");\n\n                    b.Property<string>(\"UserAgent\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Website\")\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PostEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_PostComment\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"AutoTeaser\");\n\n                    b.Property<string>(\"BlogId\")\n                        .IsRequired()\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CreatedByUser\")\n                        .HasMaxLength(100);\n\n                    b.Property<DateTime>(\"CreatedUtc\");\n\n                    b.Property<string>(\"DraftAuthor\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"DraftContent\");\n\n                    b.Property<DateTime?>(\"DraftPubDate\");\n\n                    b.Property<string>(\"DraftSerializedModel\");\n\n                    b.Property<string>(\"ImageUrl\")\n                        .HasMaxLength(250);\n\n                    b.Property<bool>(\"IsFeatured\");\n\n                    b.Property<bool>(\"IsPublished\");\n\n                    b.Property<DateTime>(\"LastModified\");\n\n                    b.Property<string>(\"LastModifiedByUser\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"MetaHtml\");\n\n                    b.Property<string>(\"MetaJson\");\n\n                    b.Property<DateTime?>(\"PubDate\");\n\n                    b.Property<string>(\"SerializedModel\");\n\n                    b.Property<string>(\"Serializer\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"Slug\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"SuppressTeaser\");\n\n                    b.Property<string>(\"TeaserOverride\");\n\n                    b.Property<string>(\"TemplateKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ThumbnailUrl\")\n                        .HasMaxLength(250);\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"BlogId\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"Slug\");\n\n                    b.ToTable(\"cs_Post\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\")\n                        .WithMany(\"PageComments\")\n                        .HasForeignKey(\"PageEntityId\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageResourceEntity\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\")\n                        .WithMany(\"PageResources\")\n                        .HasForeignKey(\"PageEntityId\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\")\n                        .WithMany(\"PostComments\")\n                        .HasForeignKey(\"PostEntityId\");\n                });\n#pragma warning restore 612, 618\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.SQLite/Migrations/20190304162117_simplecontent-20190304.cs",
    "content": "﻿using Microsoft.EntityFrameworkCore.Migrations;\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.SQLite.Migrations\n{\n    public partial class simplecontent20190304 : Migration\n    {\n        protected override void Up(MigrationBuilder migrationBuilder)\n        {\n            //migrationBuilder.AlterColumn<byte>(\n            //    name: \"TeaserTruncationMode\",\n            //    table: \"cs_ContentProject\",\n            //    nullable: false,\n            //    defaultValue: (byte)0,\n            //    oldClrType: typeof(byte),\n            //    oldDefaultValue: (byte)0)\n            //    .OldAnnotation(\"Sqlite:Autoincrement\", true);\n\n            //migrationBuilder.AlterColumn<byte>(\n            //    name: \"TeaserMode\",\n            //    table: \"cs_ContentProject\",\n            //    nullable: false,\n            //    defaultValue: (byte)0,\n            //    oldClrType: typeof(byte),\n            //    oldDefaultValue: (byte)0)\n            //    .OldAnnotation(\"Sqlite:Autoincrement\", true);\n        }\n\n        protected override void Down(MigrationBuilder migrationBuilder)\n        {\n            //migrationBuilder.AlterColumn<byte>(\n            //    name: \"TeaserTruncationMode\",\n            //    table: \"cs_ContentProject\",\n            //    nullable: false,\n            //    defaultValue: (byte)0,\n            //    oldClrType: typeof(byte),\n            //    oldDefaultValue: (byte)0)\n            //    .Annotation(\"Sqlite:Autoincrement\", true);\n\n            //migrationBuilder.AlterColumn<byte>(\n            //    name: \"TeaserMode\",\n            //    table: \"cs_ContentProject\",\n            //    nullable: false,\n            //    defaultValue: (byte)0,\n            //    oldClrType: typeof(byte),\n            //    oldDefaultValue: (byte)0)\n            //    .Annotation(\"Sqlite:Autoincrement\", true);\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.SQLite/Migrations/20190312155759_simplecontent-20190312.Designer.cs",
    "content": "﻿// <auto-generated />\nusing System;\nusing Microsoft.EntityFrameworkCore;\nusing Microsoft.EntityFrameworkCore.Infrastructure;\nusing Microsoft.EntityFrameworkCore.Migrations;\nusing Microsoft.EntityFrameworkCore.Storage.ValueConversion;\nusing cloudscribe.SimpleContent.Models;\nusing cloudscribe.SimpleContent.Storage.EFCore.SQLite;\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.SQLite.Migrations\n{\n    [DbContext(typeof(SimpleContentDbContext))]\n    [Migration(\"20190312155759_simplecontent-20190312\")]\n    partial class simplecontent20190312\n    {\n        protected override void BuildTargetModel(ModelBuilder modelBuilder)\n        {\n#pragma warning disable 612, 618\n            modelBuilder\n                .HasAnnotation(\"ProductVersion\", \"2.1.8-servicing-32085\");\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Models.ContentHistory\", b =>\n                {\n                    b.Property<Guid>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ArchivedBy\")\n                        .HasMaxLength(255);\n\n                    b.Property<DateTime>(\"ArchivedUtc\");\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CategoriesCsv\");\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"ContentId\")\n                        .IsRequired()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ContentSource\")\n                        .IsRequired()\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CreatedByUser\")\n                        .HasMaxLength(100);\n\n                    b.Property<DateTime>(\"CreatedUtc\");\n\n                    b.Property<string>(\"DraftAuthor\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"DraftContent\");\n\n                    b.Property<DateTime?>(\"DraftPubDate\");\n\n                    b.Property<string>(\"DraftSerializedModel\");\n\n                    b.Property<bool>(\"IsDraftHx\");\n\n                    b.Property<bool>(\"IsPublished\");\n\n                    b.Property<DateTime>(\"LastModified\");\n\n                    b.Property<string>(\"LastModifiedByUser\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"MetaDescription\");\n\n                    b.Property<string>(\"MetaHtml\");\n\n                    b.Property<string>(\"MetaJson\");\n\n                    b.Property<int>(\"PageOrder\");\n\n                    b.Property<string>(\"ParentId\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ParentSlug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ProjectId\")\n                        .HasMaxLength(50);\n\n                    b.Property<DateTime?>(\"PubDate\");\n\n                    b.Property<string>(\"SerializedModel\");\n\n                    b.Property<string>(\"Serializer\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"Slug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"TeaserOverride\");\n\n                    b.Property<string>(\"TemplateKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ViewRoles\");\n\n                    b.Property<bool>(\"WasDeleted\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"ContentId\");\n\n                    b.HasIndex(\"ContentSource\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"CreatedByUser\");\n\n                    b.HasIndex(\"LastModifiedByUser\");\n\n                    b.HasIndex(\"Title\");\n\n                    b.ToTable(\"cs_ContentHistory\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Models.ProjectSettings\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"AboutContent\");\n\n                    b.Property<string>(\"AboutHeading\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"AddBlogToPagesTree\");\n\n                    b.Property<bool>(\"BlogMenuLinksToNewestPost\");\n\n                    b.Property<string>(\"BlogPageNavComponentVisibility\")\n                        .HasMaxLength(255);\n\n                    b.Property<int>(\"BlogPagePosition\");\n\n                    b.Property<string>(\"BlogPageText\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CdnUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ChannelCategoriesCsv\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ChannelRating\")\n                        .HasMaxLength(100);\n\n                    b.Property<int>(\"ChannelTimeToLive\");\n\n                    b.Property<string>(\"CommentNotificationEmail\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"CopyrightNotice\")\n                        .HasMaxLength(255);\n\n                    b.Property<int>(\"DaysToComment\");\n\n                    b.Property<string>(\"DefaultContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<int>(\"DefaultFeedItems\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue(20);\n\n                    b.Property<string>(\"DefaultPageSlug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Description\");\n\n                    b.Property<string>(\"DisqusShortName\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"FacebookAppId\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Image\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"IncludePubDateInPostUrls\");\n\n                    b.Property<string>(\"LanguageCode\")\n                        .HasMaxLength(10);\n\n                    b.Property<string>(\"LocalMediaVirtualPath\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ManagingEditorEmail\")\n                        .HasMaxLength(100);\n\n                    b.Property<int>(\"MaxFeedItems\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue(1000);\n\n                    b.Property<bool>(\"ModerateComments\");\n\n                    b.Property<int>(\"PostsPerPage\");\n\n                    b.Property<string>(\"PubDateFormat\")\n                        .HasMaxLength(75);\n\n                    b.Property<string>(\"Publisher\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"PublisherEntityType\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PublisherLogoHeight\")\n                        .HasMaxLength(20);\n\n                    b.Property<string>(\"PublisherLogoUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"PublisherLogoWidth\")\n                        .HasMaxLength(20);\n\n                    b.Property<string>(\"RecaptchaPrivateKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RecaptchaPublicKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RemoteFeedProcessorUseAgentFragment\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RemoteFeedUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"ShowAboutBox\");\n\n                    b.Property<bool>(\"ShowFeaturedPostsOnDefaultPage\");\n\n                    b.Property<bool>(\"ShowRecentPostsOnDefaultPage\");\n\n                    b.Property<bool>(\"ShowRelatedPosts\");\n\n                    b.Property<bool>(\"ShowTitle\");\n\n                    b.Property<string>(\"SiteName\")\n                        .HasMaxLength(200);\n\n                    b.Property<byte>(\"TeaserMode\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue((byte)0);\n\n                    b.Property<int>(\"TeaserTruncationLength\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue(20);\n\n                    b.Property<byte>(\"TeaserTruncationMode\")\n                        .ValueGeneratedOnAdd()\n                        .HasDefaultValue((byte)0);\n\n                    b.Property<string>(\"TimeZoneId\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Title\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"TwitterCreator\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"TwitterPublisher\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"UseDefaultPageAsRootNode\");\n\n                    b.Property<string>(\"WebmasterEmail\")\n                        .HasMaxLength(100);\n\n                    b.HasKey(\"Id\");\n\n                    b.ToTable(\"cs_ContentProject\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageCategory\", b =>\n                {\n                    b.Property<string>(\"Value\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(50);\n\n                    b.HasKey(\"Value\", \"PageEntityId\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.HasIndex(\"Value\");\n\n                    b.ToTable(\"cs_PageCategory\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"Email\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Ip\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"IsAdmin\");\n\n                    b.Property<bool>(\"IsApproved\");\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(50);\n\n                    b.Property<DateTime>(\"PubDate\");\n\n                    b.Property<string>(\"UserAgent\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Website\")\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_PageComment\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CreatedByUser\")\n                        .HasMaxLength(100);\n\n                    b.Property<DateTime>(\"CreatedUtc\");\n\n                    b.Property<bool>(\"DisableEditor\");\n\n                    b.Property<string>(\"DraftAuthor\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"DraftContent\");\n\n                    b.Property<DateTime?>(\"DraftPubDate\");\n\n                    b.Property<string>(\"DraftSerializedModel\");\n\n                    b.Property<string>(\"ExternalUrl\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"IsPublished\");\n\n                    b.Property<DateTime>(\"LastModified\");\n\n                    b.Property<string>(\"LastModifiedByUser\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"MenuFilters\")\n                        .HasMaxLength(500);\n\n                    b.Property<bool>(\"MenuOnly\");\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"MetaHtml\");\n\n                    b.Property<string>(\"MetaJson\");\n\n                    b.Property<int>(\"PageOrder\");\n\n                    b.Property<string>(\"ParentId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ParentSlug\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(50);\n\n                    b.Property<DateTime?>(\"PubDate\");\n\n                    b.Property<string>(\"SerializedModel\");\n\n                    b.Property<string>(\"Serializer\")\n                        .HasMaxLength(50);\n\n                    b.Property<bool>(\"ShowCategories\");\n\n                    b.Property<bool>(\"ShowComments\");\n\n                    b.Property<bool>(\"ShowHeading\");\n\n                    b.Property<bool>(\"ShowLastModified\");\n\n                    b.Property<bool>(\"ShowMenu\");\n\n                    b.Property<bool>(\"ShowPubDate\");\n\n                    b.Property<string>(\"Slug\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"TemplateKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ViewRoles\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"ParentId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_Page\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageResourceEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Environment\")\n                        .IsRequired()\n                        .HasMaxLength(15);\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<int>(\"Sort\");\n\n                    b.Property<string>(\"Type\")\n                        .IsRequired()\n                        .HasMaxLength(10);\n\n                    b.Property<string>(\"Url\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.ToTable(\"cs_PageResource\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostCategory\", b =>\n                {\n                    b.Property<string>(\"Value\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PostEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(50);\n\n                    b.HasKey(\"Value\", \"PostEntityId\");\n\n                    b.HasIndex(\"PostEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.HasIndex(\"Value\");\n\n                    b.ToTable(\"cs_PostCategory\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"Email\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Ip\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"IsAdmin\");\n\n                    b.Property<bool>(\"IsApproved\");\n\n                    b.Property<string>(\"PostEntityId\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(50);\n\n                    b.Property<DateTime>(\"PubDate\");\n\n                    b.Property<string>(\"UserAgent\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Website\")\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PostEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_PostComment\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"AutoTeaser\");\n\n                    b.Property<string>(\"BlogId\")\n                        .IsRequired()\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"Content\");\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CreatedByUser\")\n                        .HasMaxLength(100);\n\n                    b.Property<DateTime>(\"CreatedUtc\");\n\n                    b.Property<string>(\"DraftAuthor\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"DraftContent\");\n\n                    b.Property<DateTime?>(\"DraftPubDate\");\n\n                    b.Property<string>(\"DraftSerializedModel\");\n\n                    b.Property<string>(\"ImageUrl\")\n                        .HasMaxLength(250);\n\n                    b.Property<bool>(\"IsFeatured\");\n\n                    b.Property<bool>(\"IsPublished\");\n\n                    b.Property<DateTime>(\"LastModified\");\n\n                    b.Property<string>(\"LastModifiedByUser\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"MetaHtml\");\n\n                    b.Property<string>(\"MetaJson\");\n\n                    b.Property<DateTime?>(\"PubDate\");\n\n                    b.Property<string>(\"SerializedModel\");\n\n                    b.Property<string>(\"Serializer\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"Slug\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"SuppressTeaser\");\n\n                    b.Property<string>(\"TeaserOverride\");\n\n                    b.Property<string>(\"TemplateKey\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ThumbnailUrl\")\n                        .HasMaxLength(250);\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"BlogId\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"Slug\");\n\n                    b.ToTable(\"cs_Post\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\")\n                        .WithMany(\"PageComments\")\n                        .HasForeignKey(\"PageEntityId\")\n                        .OnDelete(DeleteBehavior.Cascade);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageResourceEntity\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\")\n                        .WithMany(\"PageResources\")\n                        .HasForeignKey(\"PageEntityId\")\n                        .OnDelete(DeleteBehavior.Cascade);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\")\n                        .WithMany(\"PostComments\")\n                        .HasForeignKey(\"PostEntityId\");\n                });\n#pragma warning restore 612, 618\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.SQLite/Migrations/20190312155759_simplecontent-20190312.cs",
    "content": "﻿using Microsoft.EntityFrameworkCore.Migrations;\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.SQLite.Migrations\n{\n    public partial class simplecontent20190312 : Migration\n    {\n        protected override void Up(MigrationBuilder migrationBuilder)\n        {\n            //migrationBuilder.DropForeignKey(\n            //    name: \"FK_cs_PageComment_cs_Page_PageEntityId\",\n            //    table: \"cs_PageComment\");\n\n            //migrationBuilder.DropForeignKey(\n            //    name: \"FK_cs_PageResource_cs_Page_PageEntityId\",\n            //    table: \"cs_PageResource\");\n\n            //migrationBuilder.AlterColumn<byte>(\n            //    name: \"TeaserTruncationMode\",\n            //    table: \"cs_ContentProject\",\n            //    nullable: false,\n            //    defaultValue: (byte)0,\n            //    oldClrType: typeof(byte),\n            //    oldDefaultValue: (byte)0)\n            //    .OldAnnotation(\"Sqlite:Autoincrement\", true);\n\n            //migrationBuilder.AlterColumn<byte>(\n            //    name: \"TeaserMode\",\n            //    table: \"cs_ContentProject\",\n            //    nullable: false,\n            //    defaultValue: (byte)0,\n            //    oldClrType: typeof(byte),\n            //    oldDefaultValue: (byte)0)\n            //    .OldAnnotation(\"Sqlite:Autoincrement\", true);\n\n            //migrationBuilder.AddForeignKey(\n            //    name: \"FK_cs_PageComment_cs_Page_PageEntityId\",\n            //    table: \"cs_PageComment\",\n            //    column: \"PageEntityId\",\n            //    principalTable: \"cs_Page\",\n            //    principalColumn: \"Id\",\n            //    onDelete: ReferentialAction.Cascade);\n\n            //migrationBuilder.AddForeignKey(\n            //    name: \"FK_cs_PageResource_cs_Page_PageEntityId\",\n            //    table: \"cs_PageResource\",\n            //    column: \"PageEntityId\",\n            //    principalTable: \"cs_Page\",\n            //    principalColumn: \"Id\",\n            //    onDelete: ReferentialAction.Cascade);\n        }\n\n        protected override void Down(MigrationBuilder migrationBuilder)\n        {\n            //migrationBuilder.DropForeignKey(\n            //    name: \"FK_cs_PageComment_cs_Page_PageEntityId\",\n            //    table: \"cs_PageComment\");\n\n            //migrationBuilder.DropForeignKey(\n            //    name: \"FK_cs_PageResource_cs_Page_PageEntityId\",\n            //    table: \"cs_PageResource\");\n\n            //migrationBuilder.AlterColumn<byte>(\n            //    name: \"TeaserTruncationMode\",\n            //    table: \"cs_ContentProject\",\n            //    nullable: false,\n            //    defaultValue: (byte)0,\n            //    oldClrType: typeof(byte),\n            //    oldDefaultValue: (byte)0)\n            //    .Annotation(\"Sqlite:Autoincrement\", true);\n\n            //migrationBuilder.AlterColumn<byte>(\n            //    name: \"TeaserMode\",\n            //    table: \"cs_ContentProject\",\n            //    nullable: false,\n            //    defaultValue: (byte)0,\n            //    oldClrType: typeof(byte),\n            //    oldDefaultValue: (byte)0)\n            //    .Annotation(\"Sqlite:Autoincrement\", true);\n\n            //migrationBuilder.AddForeignKey(\n            //    name: \"FK_cs_PageComment_cs_Page_PageEntityId\",\n            //    table: \"cs_PageComment\",\n            //    column: \"PageEntityId\",\n            //    principalTable: \"cs_Page\",\n            //    principalColumn: \"Id\",\n            //    onDelete: ReferentialAction.Restrict);\n\n            //migrationBuilder.AddForeignKey(\n            //    name: \"FK_cs_PageResource_cs_Page_PageEntityId\",\n            //    table: \"cs_PageResource\",\n            //    column: \"PageEntityId\",\n            //    principalTable: \"cs_Page\",\n            //    principalColumn: \"Id\",\n            //    onDelete: ReferentialAction.Restrict);\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.SQLite/Migrations/20200723185404_AddPostShowCommentsSwitch.Designer.cs",
    "content": "﻿// <auto-generated />\nusing System;\nusing Microsoft.EntityFrameworkCore;\nusing Microsoft.EntityFrameworkCore.Infrastructure;\nusing Microsoft.EntityFrameworkCore.Migrations;\nusing Microsoft.EntityFrameworkCore.Storage.ValueConversion;\nusing cloudscribe.SimpleContent.Storage.EFCore.SQLite;\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.SQLite.Migrations\n{\n    [DbContext(typeof(SimpleContentDbContext))]\n    [Migration(\"20200723185404_AddPostShowCommentsSwitch\")]\n    partial class AddPostShowCommentsSwitch\n    {\n        protected override void BuildTargetModel(ModelBuilder modelBuilder)\n        {\n#pragma warning disable 612, 618\n            modelBuilder\n                .HasAnnotation(\"ProductVersion\", \"3.0.0\");\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Models.ContentHistory\", b =>\n                {\n                    b.Property<Guid>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"TEXT\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ArchivedBy\")\n                        .HasColumnType(\"TEXT\")\n                        .HasMaxLength(255);\n\n                    b.Property<DateTime>(\"ArchivedUtc\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"Author\")\n                        .HasColumnType(\"TEXT\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"Content\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"ContentId\")\n                        .IsRequired()\n                        .HasColumnType(\"TEXT\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ContentSource\")\n                        .IsRequired()\n                        .HasColumnType(\"TEXT\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"TEXT\")\n                        .HasMaxLength(50)\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasColumnType(\"TEXT\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CreatedByUser\")\n                        .HasColumnType(\"TEXT\")\n                        .HasMaxLength(100);\n\n                    b.Property<DateTime>(\"CreatedUtc\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"DraftAuthor\")\n                        .HasColumnType(\"TEXT\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"DraftContent\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<DateTime?>(\"DraftPubDate\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"DraftSerializedModel\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<bool>(\"IsDraftHx\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<bool>(\"IsPublished\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<DateTime>(\"LastModified\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"LastModifiedByUser\")\n                        .HasColumnType(\"TEXT\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"MetaHtml\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"MetaJson\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<int>(\"PageOrder\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<string>(\"ParentId\")\n                        .HasColumnType(\"TEXT\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ParentSlug\")\n                        .HasColumnType(\"TEXT\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ProjectId\")\n                        .HasColumnType(\"TEXT\")\n                        .HasMaxLength(50);\n\n                    b.Property<DateTime?>(\"PubDate\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"SerializedModel\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"Serializer\")\n                        .HasColumnType(\"TEXT\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"Slug\")\n                        .HasColumnType(\"TEXT\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"TeaserOverride\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"TemplateKey\")\n                        .HasColumnType(\"TEXT\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasColumnType(\"TEXT\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ViewRoles\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<bool>(\"WasDeleted\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"ContentId\");\n\n                    b.HasIndex(\"ContentSource\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"CreatedByUser\");\n\n                    b.HasIndex(\"LastModifiedByUser\");\n\n                    b.HasIndex(\"Title\");\n\n                    b.ToTable(\"cs_ContentHistory\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Models.ProjectSettings\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .HasColumnType(\"TEXT\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"AboutContent\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"AboutHeading\")\n                        .HasColumnType(\"TEXT\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"AddBlogToPagesTree\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<bool>(\"BlogMenuLinksToNewestPost\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<string>(\"BlogPageNavComponentVisibility\")\n                        .HasColumnType(\"TEXT\")\n                        .HasMaxLength(255);\n\n                    b.Property<int>(\"BlogPagePosition\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<string>(\"BlogPageText\")\n                        .HasColumnType(\"TEXT\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CdnUrl\")\n                        .HasColumnType(\"TEXT\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ChannelCategoriesCsv\")\n                        .HasColumnType(\"TEXT\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ChannelRating\")\n                        .HasColumnType(\"TEXT\")\n                        .HasMaxLength(100);\n\n                    b.Property<int>(\"ChannelTimeToLive\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<string>(\"CommentNotificationEmail\")\n                        .HasColumnType(\"TEXT\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"CopyrightNotice\")\n                        .HasColumnType(\"TEXT\")\n                        .HasMaxLength(255);\n\n                    b.Property<int>(\"DaysToComment\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<string>(\"DefaultContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"TEXT\")\n                        .HasMaxLength(50)\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<int>(\"DefaultFeedItems\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"INTEGER\")\n                        .HasDefaultValue(20);\n\n                    b.Property<string>(\"DefaultPageSlug\")\n                        .HasColumnType(\"TEXT\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Description\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"DisqusShortName\")\n                        .HasColumnType(\"TEXT\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"FacebookAppId\")\n                        .HasColumnType(\"TEXT\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Image\")\n                        .HasColumnType(\"TEXT\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"IncludePubDateInPostUrls\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<string>(\"LanguageCode\")\n                        .HasColumnType(\"TEXT\")\n                        .HasMaxLength(10);\n\n                    b.Property<string>(\"LocalMediaVirtualPath\")\n                        .HasColumnType(\"TEXT\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ManagingEditorEmail\")\n                        .HasColumnType(\"TEXT\")\n                        .HasMaxLength(100);\n\n                    b.Property<int>(\"MaxFeedItems\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"INTEGER\")\n                        .HasDefaultValue(1000);\n\n                    b.Property<bool>(\"ModerateComments\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<int>(\"PostsPerPage\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<string>(\"PubDateFormat\")\n                        .HasColumnType(\"TEXT\")\n                        .HasMaxLength(75);\n\n                    b.Property<string>(\"Publisher\")\n                        .HasColumnType(\"TEXT\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"PublisherEntityType\")\n                        .HasColumnType(\"TEXT\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PublisherLogoHeight\")\n                        .HasColumnType(\"TEXT\")\n                        .HasMaxLength(20);\n\n                    b.Property<string>(\"PublisherLogoUrl\")\n                        .HasColumnType(\"TEXT\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"PublisherLogoWidth\")\n                        .HasColumnType(\"TEXT\")\n                        .HasMaxLength(20);\n\n                    b.Property<string>(\"RecaptchaPrivateKey\")\n                        .HasColumnType(\"TEXT\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RecaptchaPublicKey\")\n                        .HasColumnType(\"TEXT\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RemoteFeedProcessorUseAgentFragment\")\n                        .HasColumnType(\"TEXT\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"RemoteFeedUrl\")\n                        .HasColumnType(\"TEXT\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"ShowAboutBox\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<bool>(\"ShowFeaturedPostsOnDefaultPage\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<bool>(\"ShowRecentPostsOnDefaultPage\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<bool>(\"ShowRelatedPosts\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<bool>(\"ShowTitle\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<string>(\"SiteName\")\n                        .HasColumnType(\"TEXT\")\n                        .HasMaxLength(200);\n\n                    b.Property<byte>(\"TeaserMode\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"INTEGER\")\n                        .HasDefaultValue((byte)0);\n\n                    b.Property<int>(\"TeaserTruncationLength\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"INTEGER\")\n                        .HasDefaultValue(20);\n\n                    b.Property<byte>(\"TeaserTruncationMode\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"INTEGER\")\n                        .HasDefaultValue((byte)0);\n\n                    b.Property<string>(\"TimeZoneId\")\n                        .HasColumnType(\"TEXT\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Title\")\n                        .HasColumnType(\"TEXT\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"TwitterCreator\")\n                        .HasColumnType(\"TEXT\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"TwitterPublisher\")\n                        .HasColumnType(\"TEXT\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"UseDefaultPageAsRootNode\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<string>(\"WebmasterEmail\")\n                        .HasColumnType(\"TEXT\")\n                        .HasMaxLength(100);\n\n                    b.HasKey(\"Id\");\n\n                    b.ToTable(\"cs_ContentProject\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageCategory\", b =>\n                {\n                    b.Property<string>(\"Value\")\n                        .HasColumnType(\"TEXT\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasColumnType(\"TEXT\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasColumnType(\"TEXT\")\n                        .HasMaxLength(50);\n\n                    b.HasKey(\"Value\", \"PageEntityId\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.HasIndex(\"Value\");\n\n                    b.ToTable(\"cs_PageCategory\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .HasColumnType(\"TEXT\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasColumnType(\"TEXT\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Content\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"Email\")\n                        .HasColumnType(\"TEXT\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Ip\")\n                        .HasColumnType(\"TEXT\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"IsAdmin\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<bool>(\"IsApproved\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasColumnType(\"TEXT\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasColumnType(\"TEXT\")\n                        .HasMaxLength(50);\n\n                    b.Property<DateTime>(\"PubDate\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"UserAgent\")\n                        .HasColumnType(\"TEXT\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Website\")\n                        .HasColumnType(\"TEXT\")\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_PageComment\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .HasColumnType(\"TEXT\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasColumnType(\"TEXT\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasColumnType(\"TEXT\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"Content\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"TEXT\")\n                        .HasMaxLength(50)\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasColumnType(\"TEXT\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CreatedByUser\")\n                        .HasColumnType(\"TEXT\")\n                        .HasMaxLength(100);\n\n                    b.Property<DateTime>(\"CreatedUtc\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<bool>(\"DisableEditor\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<string>(\"DraftAuthor\")\n                        .HasColumnType(\"TEXT\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"DraftContent\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<DateTime?>(\"DraftPubDate\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"DraftSerializedModel\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"ExternalUrl\")\n                        .HasColumnType(\"TEXT\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"IsPublished\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<DateTime>(\"LastModified\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"LastModifiedByUser\")\n                        .HasColumnType(\"TEXT\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"MenuFilters\")\n                        .HasColumnType(\"TEXT\")\n                        .HasMaxLength(500);\n\n                    b.Property<bool>(\"MenuOnly\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasColumnType(\"TEXT\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"MetaHtml\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"MetaJson\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<int>(\"PageOrder\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<string>(\"ParentId\")\n                        .HasColumnType(\"TEXT\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ParentSlug\")\n                        .HasColumnType(\"TEXT\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasColumnType(\"TEXT\")\n                        .HasMaxLength(50);\n\n                    b.Property<DateTime?>(\"PubDate\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"SerializedModel\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"Serializer\")\n                        .HasColumnType(\"TEXT\")\n                        .HasMaxLength(50);\n\n                    b.Property<bool>(\"ShowCategories\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<bool>(\"ShowComments\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<bool>(\"ShowHeading\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<bool>(\"ShowLastModified\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<bool>(\"ShowMenu\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<bool>(\"ShowPubDate\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<string>(\"Slug\")\n                        .IsRequired()\n                        .HasColumnType(\"TEXT\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"TemplateKey\")\n                        .HasColumnType(\"TEXT\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasColumnType(\"TEXT\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ViewRoles\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"ParentId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_Page\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageResourceEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .HasColumnType(\"TEXT\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Environment\")\n                        .IsRequired()\n                        .HasColumnType(\"TEXT\")\n                        .HasMaxLength(15);\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasColumnType(\"TEXT\")\n                        .HasMaxLength(36);\n\n                    b.Property<int>(\"Sort\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<string>(\"Type\")\n                        .IsRequired()\n                        .HasColumnType(\"TEXT\")\n                        .HasMaxLength(10);\n\n                    b.Property<string>(\"Url\")\n                        .IsRequired()\n                        .HasColumnType(\"TEXT\")\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.ToTable(\"cs_PageResource\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostCategory\", b =>\n                {\n                    b.Property<string>(\"Value\")\n                        .HasColumnType(\"TEXT\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"PostEntityId\")\n                        .HasColumnType(\"TEXT\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasColumnType(\"TEXT\")\n                        .HasMaxLength(50);\n\n                    b.HasKey(\"Value\", \"PostEntityId\");\n\n                    b.HasIndex(\"PostEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.HasIndex(\"Value\");\n\n                    b.ToTable(\"cs_PostCategory\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .HasColumnType(\"TEXT\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasColumnType(\"TEXT\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Content\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"Email\")\n                        .HasColumnType(\"TEXT\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"Ip\")\n                        .HasColumnType(\"TEXT\")\n                        .HasMaxLength(100);\n\n                    b.Property<bool>(\"IsAdmin\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<bool>(\"IsApproved\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<string>(\"PostEntityId\")\n                        .HasColumnType(\"TEXT\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasColumnType(\"TEXT\")\n                        .HasMaxLength(50);\n\n                    b.Property<DateTime>(\"PubDate\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"UserAgent\")\n                        .HasColumnType(\"TEXT\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"Website\")\n                        .HasColumnType(\"TEXT\")\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PostEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_PostComment\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .HasColumnType(\"TEXT\")\n                        .HasMaxLength(36);\n\n                    b.Property<string>(\"Author\")\n                        .HasColumnType(\"TEXT\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"AutoTeaser\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"BlogId\")\n                        .IsRequired()\n                        .HasColumnType(\"TEXT\")\n                        .HasMaxLength(50);\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasColumnType(\"TEXT\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"Content\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"TEXT\")\n                        .HasMaxLength(50)\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasColumnType(\"TEXT\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"CreatedByUser\")\n                        .HasColumnType(\"TEXT\")\n                        .HasMaxLength(100);\n\n                    b.Property<DateTime>(\"CreatedUtc\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"DraftAuthor\")\n                        .HasColumnType(\"TEXT\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"DraftContent\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<DateTime?>(\"DraftPubDate\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"DraftSerializedModel\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"ImageUrl\")\n                        .HasColumnType(\"TEXT\")\n                        .HasMaxLength(250);\n\n                    b.Property<bool>(\"IsFeatured\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<bool>(\"IsPublished\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<DateTime>(\"LastModified\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"LastModifiedByUser\")\n                        .HasColumnType(\"TEXT\")\n                        .HasMaxLength(100);\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasColumnType(\"TEXT\")\n                        .HasMaxLength(500);\n\n                    b.Property<string>(\"MetaHtml\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"MetaJson\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<DateTime?>(\"PubDate\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"SerializedModel\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"Serializer\")\n                        .HasColumnType(\"TEXT\")\n                        .HasMaxLength(50);\n\n                    b.Property<bool>(\"ShowComments\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<string>(\"Slug\")\n                        .IsRequired()\n                        .HasColumnType(\"TEXT\")\n                        .HasMaxLength(255);\n\n                    b.Property<bool>(\"SuppressTeaser\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<string>(\"TeaserOverride\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"TemplateKey\")\n                        .HasColumnType(\"TEXT\")\n                        .HasMaxLength(255);\n\n                    b.Property<string>(\"ThumbnailUrl\")\n                        .HasColumnType(\"TEXT\")\n                        .HasMaxLength(250);\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasColumnType(\"TEXT\")\n                        .HasMaxLength(255);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"BlogId\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"Slug\");\n\n                    b.ToTable(\"cs_Post\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\", null)\n                        .WithMany(\"PageComments\")\n                        .HasForeignKey(\"PageEntityId\")\n                        .OnDelete(DeleteBehavior.Cascade);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageResourceEntity\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\", null)\n                        .WithMany(\"PageResources\")\n                        .HasForeignKey(\"PageEntityId\")\n                        .OnDelete(DeleteBehavior.Cascade);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\", null)\n                        .WithMany(\"PostComments\")\n                        .HasForeignKey(\"PostEntityId\");\n                });\n#pragma warning restore 612, 618\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.SQLite/Migrations/20200723185404_AddPostShowCommentsSwitch.cs",
    "content": "﻿using Microsoft.EntityFrameworkCore.Migrations;\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.SQLite.Migrations\n{\n    public partial class AddPostShowCommentsSwitch : Migration\n    {\n        protected override void Up(MigrationBuilder migrationBuilder)\n        {\n            migrationBuilder.AddColumn<bool>(\n                name: \"ShowComments\",\n                table: \"cs_Post\",\n                nullable: false,\n                defaultValue: false);\n\n            migrationBuilder.AlterColumn<byte>(\n                name: \"TeaserTruncationMode\",\n                table: \"cs_ContentProject\",\n                nullable: false,\n                defaultValue: (byte)0,\n                oldClrType: typeof(byte),\n                oldDefaultValue: (byte)0)\n                .OldAnnotation(\"Sqlite:Autoincrement\", true);\n\n            migrationBuilder.AlterColumn<byte>(\n                name: \"TeaserMode\",\n                table: \"cs_ContentProject\",\n                nullable: false,\n                defaultValue: (byte)0,\n                oldClrType: typeof(byte),\n                oldDefaultValue: (byte)0)\n                .OldAnnotation(\"Sqlite:Autoincrement\", true);\n        }\n\n        protected override void Down(MigrationBuilder migrationBuilder)\n        {\n            migrationBuilder.DropColumn(\n                name: \"ShowComments\",\n                table: \"cs_Post\");\n\n            migrationBuilder.AlterColumn<byte>(\n                name: \"TeaserTruncationMode\",\n                table: \"cs_ContentProject\",\n                nullable: false,\n                defaultValue: (byte)0,\n                oldClrType: typeof(byte),\n                oldDefaultValue: (byte)0)\n                .Annotation(\"Sqlite:Autoincrement\", true);\n\n            migrationBuilder.AlterColumn<byte>(\n                name: \"TeaserMode\",\n                table: \"cs_ContentProject\",\n                nullable: false,\n                defaultValue: (byte)0,\n                oldClrType: typeof(byte),\n                oldDefaultValue: (byte)0)\n                .Annotation(\"Sqlite:Autoincrement\", true);\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.SQLite/Migrations/20240920125304_ShowArchiveAndBlogCategories-20240920.Designer.cs",
    "content": "﻿// <auto-generated />\nusing System;\nusing Microsoft.EntityFrameworkCore;\nusing Microsoft.EntityFrameworkCore.Infrastructure;\nusing Microsoft.EntityFrameworkCore.Migrations;\nusing Microsoft.EntityFrameworkCore.Storage.ValueConversion;\nusing cloudscribe.SimpleContent.Storage.EFCore.SQLite;\n\n#nullable disable\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.SQLite.Migrations\n{\n    [DbContext(typeof(SimpleContentDbContext))]\n    [Migration(\"20240920125304_ShowArchiveAndBlogCategories-20240920\")]\n    partial class ShowArchiveAndBlogCategories20240920\n    {\n        /// <inheritdoc />\n        protected override void BuildTargetModel(ModelBuilder modelBuilder)\n        {\n#pragma warning disable 612, 618\n            modelBuilder.HasAnnotation(\"ProductVersion\", \"8.0.0\");\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Models.ContentHistory\", b =>\n                {\n                    b.Property<Guid>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"ArchivedBy\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<DateTime>(\"ArchivedUtc\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"Content\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"ContentId\")\n                        .IsRequired()\n                        .HasMaxLength(36)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"ContentSource\")\n                        .IsRequired()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"TEXT\")\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"CreatedByUser\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<DateTime>(\"CreatedUtc\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"DraftAuthor\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"DraftContent\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<DateTime?>(\"DraftPubDate\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"DraftSerializedModel\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<bool>(\"IsDraftHx\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<bool>(\"IsPublished\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<DateTime>(\"LastModified\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"LastModifiedByUser\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"MetaHtml\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"MetaJson\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<int>(\"PageOrder\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<string>(\"ParentId\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"ParentSlug\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"ProjectId\")\n                        .HasMaxLength(50)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<DateTime?>(\"PubDate\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"SerializedModel\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"Serializer\")\n                        .HasMaxLength(50)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"Slug\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"TeaserOverride\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"TemplateKey\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"ViewRoles\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<bool>(\"WasDeleted\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"ContentId\");\n\n                    b.HasIndex(\"ContentSource\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"CreatedByUser\");\n\n                    b.HasIndex(\"LastModifiedByUser\");\n\n                    b.HasIndex(\"Title\");\n\n                    b.ToTable(\"cs_ContentHistory\", (string)null);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Models.ProjectSettings\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .HasMaxLength(50)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"AboutContent\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"AboutHeading\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<bool>(\"AddBlogToPagesTree\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<bool>(\"BlogMenuLinksToNewestPost\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<string>(\"BlogPageNavComponentVisibility\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<int>(\"BlogPagePosition\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<string>(\"BlogPageText\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"CdnUrl\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"ChannelCategoriesCsv\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"ChannelRating\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<int>(\"ChannelTimeToLive\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<string>(\"CommentNotificationEmail\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"CopyrightNotice\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<int>(\"DaysToComment\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<string>(\"DefaultContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"TEXT\")\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<int>(\"DefaultFeedItems\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"INTEGER\")\n                        .HasDefaultValue(20);\n\n                    b.Property<string>(\"DefaultPageSlug\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"Description\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"DisqusShortName\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"FacebookAppId\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"Image\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<bool>(\"IncludePubDateInPostUrls\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<string>(\"LanguageCode\")\n                        .HasMaxLength(10)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"LocalMediaVirtualPath\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"ManagingEditorEmail\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<int>(\"MaxFeedItems\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"INTEGER\")\n                        .HasDefaultValue(1000);\n\n                    b.Property<bool>(\"ModerateComments\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<int>(\"PostsPerPage\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<string>(\"PubDateFormat\")\n                        .HasMaxLength(75)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"Publisher\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"PublisherEntityType\")\n                        .HasMaxLength(50)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"PublisherLogoHeight\")\n                        .HasMaxLength(20)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"PublisherLogoUrl\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"PublisherLogoWidth\")\n                        .HasMaxLength(20)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"RecaptchaPrivateKey\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"RecaptchaPublicKey\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"RemoteFeedProcessorUseAgentFragment\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"RemoteFeedUrl\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<bool>(\"ShowAboutBox\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<bool>(\"ShowArchivedPosts\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<bool>(\"ShowBlogCategories\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<bool>(\"ShowFeaturedPostsOnDefaultPage\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<bool>(\"ShowRecentPostsOnDefaultPage\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<bool>(\"ShowRelatedPosts\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<bool>(\"ShowTitle\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<string>(\"SiteName\")\n                        .HasMaxLength(200)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<byte>(\"TeaserMode\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"INTEGER\")\n                        .HasDefaultValue((byte)0);\n\n                    b.Property<int>(\"TeaserTruncationLength\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"INTEGER\")\n                        .HasDefaultValue(20);\n\n                    b.Property<byte>(\"TeaserTruncationMode\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"INTEGER\")\n                        .HasDefaultValue((byte)0);\n\n                    b.Property<string>(\"TimeZoneId\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"Title\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"TwitterCreator\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"TwitterPublisher\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<bool>(\"UseDefaultPageAsRootNode\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<string>(\"WebmasterEmail\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"TEXT\");\n\n                    b.HasKey(\"Id\");\n\n                    b.ToTable(\"cs_ContentProject\", (string)null);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageCategory\", b =>\n                {\n                    b.Property<string>(\"Value\")\n                        .HasMaxLength(50)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"TEXT\");\n\n                    b.HasKey(\"Value\", \"PageEntityId\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.HasIndex(\"Value\");\n\n                    b.ToTable(\"cs_PageCategory\", (string)null);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"Content\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"Email\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"Ip\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<bool>(\"IsAdmin\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<bool>(\"IsApproved\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<DateTime>(\"PubDate\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"UserAgent\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"Website\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_PageComment\", (string)null);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasMaxLength(500)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"Content\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"TEXT\")\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"CreatedByUser\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<DateTime>(\"CreatedUtc\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<bool>(\"DisableEditor\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<string>(\"DraftAuthor\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"DraftContent\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<DateTime?>(\"DraftPubDate\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"DraftSerializedModel\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"ExternalUrl\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<bool>(\"IsPublished\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<DateTime>(\"LastModified\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"LastModifiedByUser\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"MenuFilters\")\n                        .HasMaxLength(500)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<bool>(\"MenuOnly\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasMaxLength(500)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"MetaHtml\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"MetaJson\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<int>(\"PageOrder\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<string>(\"ParentId\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"ParentSlug\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<DateTime?>(\"PubDate\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"SerializedModel\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"Serializer\")\n                        .HasMaxLength(50)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<bool>(\"ShowCategories\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<bool>(\"ShowComments\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<bool>(\"ShowHeading\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<bool>(\"ShowLastModified\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<bool>(\"ShowMenu\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<bool>(\"ShowPubDate\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<string>(\"Slug\")\n                        .IsRequired()\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"TemplateKey\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"ViewRoles\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"ParentId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_Page\", (string)null);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageResourceEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"Environment\")\n                        .IsRequired()\n                        .HasMaxLength(15)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<int>(\"Sort\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<string>(\"Type\")\n                        .IsRequired()\n                        .HasMaxLength(10)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"Url\")\n                        .IsRequired()\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.ToTable(\"cs_PageResource\", (string)null);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostCategory\", b =>\n                {\n                    b.Property<string>(\"Value\")\n                        .HasMaxLength(50)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"PostEntityId\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"TEXT\");\n\n                    b.HasKey(\"Value\", \"PostEntityId\");\n\n                    b.HasIndex(\"PostEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.HasIndex(\"Value\");\n\n                    b.ToTable(\"cs_PostCategory\", (string)null);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"Content\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"Email\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"Ip\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<bool>(\"IsAdmin\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<bool>(\"IsApproved\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<string>(\"PostEntityId\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<DateTime>(\"PubDate\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"UserAgent\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"Website\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PostEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_PostComment\", (string)null);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"AutoTeaser\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"BlogId\")\n                        .IsRequired()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasMaxLength(500)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"Content\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"TEXT\")\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"CreatedByUser\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<DateTime>(\"CreatedUtc\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"DraftAuthor\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"DraftContent\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<DateTime?>(\"DraftPubDate\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"DraftSerializedModel\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"ImageUrl\")\n                        .HasMaxLength(250)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<bool>(\"IsFeatured\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<bool>(\"IsPublished\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<DateTime>(\"LastModified\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"LastModifiedByUser\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasMaxLength(500)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"MetaHtml\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"MetaJson\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<DateTime?>(\"PubDate\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"SerializedModel\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"Serializer\")\n                        .HasMaxLength(50)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<bool>(\"ShowComments\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<string>(\"Slug\")\n                        .IsRequired()\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<bool>(\"SuppressTeaser\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<string>(\"TeaserOverride\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"TemplateKey\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"ThumbnailUrl\")\n                        .HasMaxLength(250)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"BlogId\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"Slug\");\n\n                    b.ToTable(\"cs_Post\", (string)null);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\", null)\n                        .WithMany(\"PageComments\")\n                        .HasForeignKey(\"PageEntityId\")\n                        .OnDelete(DeleteBehavior.Cascade);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageResourceEntity\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\", null)\n                        .WithMany(\"PageResources\")\n                        .HasForeignKey(\"PageEntityId\")\n                        .OnDelete(DeleteBehavior.Cascade);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\", null)\n                        .WithMany(\"PostComments\")\n                        .HasForeignKey(\"PostEntityId\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\", b =>\n                {\n                    b.Navigation(\"PageComments\");\n\n                    b.Navigation(\"PageResources\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\", b =>\n                {\n                    b.Navigation(\"PostComments\");\n                });\n#pragma warning restore 612, 618\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.SQLite/Migrations/20240920125304_ShowArchiveAndBlogCategories-20240920.cs",
    "content": "﻿using Microsoft.EntityFrameworkCore.Migrations;\n\n#nullable disable\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.SQLite.Migrations\n{\n    /// <inheritdoc />\n    public partial class ShowArchiveAndBlogCategories20240920 : Migration\n    {\n        /// <inheritdoc />\n        protected override void Up(MigrationBuilder migrationBuilder)\n        {\n            migrationBuilder.AddColumn<bool>(\n                name: \"ShowArchivedPosts\",\n                table: \"cs_ContentProject\",\n                type: \"INTEGER\",\n                nullable: false,\n                defaultValue: false);\n\n            migrationBuilder.AddColumn<bool>(\n                name: \"ShowBlogCategories\",\n                table: \"cs_ContentProject\",\n                type: \"INTEGER\",\n                nullable: false,\n                defaultValue: false);\n        }\n\n        /// <inheritdoc />\n        protected override void Down(MigrationBuilder migrationBuilder)\n        {\n            migrationBuilder.DropColumn(\n                name: \"ShowArchivedPosts\",\n                table: \"cs_ContentProject\");\n\n            migrationBuilder.DropColumn(\n                name: \"ShowBlogCategories\",\n                table: \"cs_ContentProject\");\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.SQLite/Migrations/20241001104814_SetShowArchiveAboutRelatedBlogToTrue-20241001.Designer.cs",
    "content": "﻿// <auto-generated />\nusing System;\nusing Microsoft.EntityFrameworkCore;\nusing Microsoft.EntityFrameworkCore.Infrastructure;\nusing Microsoft.EntityFrameworkCore.Migrations;\nusing Microsoft.EntityFrameworkCore.Storage.ValueConversion;\nusing cloudscribe.SimpleContent.Storage.EFCore.SQLite;\n\n#nullable disable\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.SQLite.Migrations\n{\n    [DbContext(typeof(SimpleContentDbContext))]\n    [Migration(\"20241001104814_SetShowArchiveAboutRelatedBlogToTrue-20241001\")]\n    partial class SetShowArchiveAboutRelatedBlogToTrue20241001\n    {\n        /// <inheritdoc />\n        protected override void BuildTargetModel(ModelBuilder modelBuilder)\n        {\n#pragma warning disable 612, 618\n            modelBuilder.HasAnnotation(\"ProductVersion\", \"8.0.0\");\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Models.ContentHistory\", b =>\n                {\n                    b.Property<Guid>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"ArchivedBy\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<DateTime>(\"ArchivedUtc\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"Content\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"ContentId\")\n                        .IsRequired()\n                        .HasMaxLength(36)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"ContentSource\")\n                        .IsRequired()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"TEXT\")\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"CreatedByUser\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<DateTime>(\"CreatedUtc\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"DraftAuthor\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"DraftContent\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<DateTime?>(\"DraftPubDate\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"DraftSerializedModel\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<bool>(\"IsDraftHx\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<bool>(\"IsPublished\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<DateTime>(\"LastModified\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"LastModifiedByUser\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"MetaHtml\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"MetaJson\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<int>(\"PageOrder\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<string>(\"ParentId\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"ParentSlug\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"ProjectId\")\n                        .HasMaxLength(50)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<DateTime?>(\"PubDate\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"SerializedModel\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"Serializer\")\n                        .HasMaxLength(50)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"Slug\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"TeaserOverride\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"TemplateKey\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"ViewRoles\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<bool>(\"WasDeleted\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"ContentId\");\n\n                    b.HasIndex(\"ContentSource\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"CreatedByUser\");\n\n                    b.HasIndex(\"LastModifiedByUser\");\n\n                    b.HasIndex(\"Title\");\n\n                    b.ToTable(\"cs_ContentHistory\", (string)null);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Models.ProjectSettings\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .HasMaxLength(50)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"AboutContent\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"AboutHeading\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<bool>(\"AddBlogToPagesTree\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<bool>(\"BlogMenuLinksToNewestPost\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<string>(\"BlogPageNavComponentVisibility\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<int>(\"BlogPagePosition\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<string>(\"BlogPageText\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"CdnUrl\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"ChannelCategoriesCsv\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"ChannelRating\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<int>(\"ChannelTimeToLive\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<string>(\"CommentNotificationEmail\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"CopyrightNotice\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<int>(\"DaysToComment\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<string>(\"DefaultContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"TEXT\")\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<int>(\"DefaultFeedItems\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"INTEGER\")\n                        .HasDefaultValue(20);\n\n                    b.Property<string>(\"DefaultPageSlug\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"Description\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"DisqusShortName\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"FacebookAppId\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"Image\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<bool>(\"IncludePubDateInPostUrls\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<string>(\"LanguageCode\")\n                        .HasMaxLength(10)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"LocalMediaVirtualPath\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"ManagingEditorEmail\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<int>(\"MaxFeedItems\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"INTEGER\")\n                        .HasDefaultValue(1000);\n\n                    b.Property<bool>(\"ModerateComments\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<int>(\"PostsPerPage\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<string>(\"PubDateFormat\")\n                        .HasMaxLength(75)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"Publisher\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"PublisherEntityType\")\n                        .HasMaxLength(50)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"PublisherLogoHeight\")\n                        .HasMaxLength(20)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"PublisherLogoUrl\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"PublisherLogoWidth\")\n                        .HasMaxLength(20)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"RecaptchaPrivateKey\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"RecaptchaPublicKey\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"RemoteFeedProcessorUseAgentFragment\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"RemoteFeedUrl\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<bool>(\"ShowAboutBox\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"INTEGER\")\n                        .HasDefaultValue(true);\n\n                    b.Property<bool>(\"ShowArchivedPosts\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"INTEGER\")\n                        .HasDefaultValue(true);\n\n                    b.Property<bool>(\"ShowBlogCategories\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"INTEGER\")\n                        .HasDefaultValue(true);\n\n                    b.Property<bool>(\"ShowFeaturedPostsOnDefaultPage\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<bool>(\"ShowRecentPostsOnDefaultPage\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<bool>(\"ShowRelatedPosts\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"INTEGER\")\n                        .HasDefaultValue(true);\n\n                    b.Property<bool>(\"ShowTitle\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<string>(\"SiteName\")\n                        .HasMaxLength(200)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<byte>(\"TeaserMode\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"INTEGER\")\n                        .HasDefaultValue((byte)0);\n\n                    b.Property<int>(\"TeaserTruncationLength\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"INTEGER\")\n                        .HasDefaultValue(20);\n\n                    b.Property<byte>(\"TeaserTruncationMode\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"INTEGER\")\n                        .HasDefaultValue((byte)0);\n\n                    b.Property<string>(\"TimeZoneId\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"Title\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"TwitterCreator\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"TwitterPublisher\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<bool>(\"UseDefaultPageAsRootNode\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<string>(\"WebmasterEmail\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"TEXT\");\n\n                    b.HasKey(\"Id\");\n\n                    b.ToTable(\"cs_ContentProject\", (string)null);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageCategory\", b =>\n                {\n                    b.Property<string>(\"Value\")\n                        .HasMaxLength(50)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"TEXT\");\n\n                    b.HasKey(\"Value\", \"PageEntityId\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.HasIndex(\"Value\");\n\n                    b.ToTable(\"cs_PageCategory\", (string)null);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"Content\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"Email\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"Ip\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<bool>(\"IsAdmin\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<bool>(\"IsApproved\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<DateTime>(\"PubDate\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"UserAgent\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"Website\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_PageComment\", (string)null);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasMaxLength(500)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"Content\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"TEXT\")\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"CreatedByUser\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<DateTime>(\"CreatedUtc\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<bool>(\"DisableEditor\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<string>(\"DraftAuthor\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"DraftContent\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<DateTime?>(\"DraftPubDate\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"DraftSerializedModel\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"ExternalUrl\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<bool>(\"IsPublished\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<DateTime>(\"LastModified\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"LastModifiedByUser\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"MenuFilters\")\n                        .HasMaxLength(500)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<bool>(\"MenuOnly\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasMaxLength(500)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"MetaHtml\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"MetaJson\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<int>(\"PageOrder\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<string>(\"ParentId\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"ParentSlug\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<DateTime?>(\"PubDate\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"SerializedModel\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"Serializer\")\n                        .HasMaxLength(50)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<bool>(\"ShowCategories\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<bool>(\"ShowComments\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<bool>(\"ShowHeading\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<bool>(\"ShowLastModified\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<bool>(\"ShowMenu\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<bool>(\"ShowPubDate\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<string>(\"Slug\")\n                        .IsRequired()\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"TemplateKey\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"ViewRoles\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"ParentId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_Page\", (string)null);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageResourceEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"Environment\")\n                        .IsRequired()\n                        .HasMaxLength(15)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<int>(\"Sort\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<string>(\"Type\")\n                        .IsRequired()\n                        .HasMaxLength(10)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"Url\")\n                        .IsRequired()\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.ToTable(\"cs_PageResource\", (string)null);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostCategory\", b =>\n                {\n                    b.Property<string>(\"Value\")\n                        .HasMaxLength(50)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"PostEntityId\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"TEXT\");\n\n                    b.HasKey(\"Value\", \"PostEntityId\");\n\n                    b.HasIndex(\"PostEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.HasIndex(\"Value\");\n\n                    b.ToTable(\"cs_PostCategory\", (string)null);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"Content\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"Email\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"Ip\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<bool>(\"IsAdmin\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<bool>(\"IsApproved\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<string>(\"PostEntityId\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<DateTime>(\"PubDate\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"UserAgent\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"Website\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PostEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_PostComment\", (string)null);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"AutoTeaser\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"BlogId\")\n                        .IsRequired()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasMaxLength(500)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"Content\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"TEXT\")\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"CreatedByUser\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<DateTime>(\"CreatedUtc\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"DraftAuthor\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"DraftContent\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<DateTime?>(\"DraftPubDate\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"DraftSerializedModel\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"ImageUrl\")\n                        .HasMaxLength(250)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<bool>(\"IsFeatured\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<bool>(\"IsPublished\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<DateTime>(\"LastModified\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"LastModifiedByUser\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasMaxLength(500)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"MetaHtml\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"MetaJson\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<DateTime?>(\"PubDate\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"SerializedModel\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"Serializer\")\n                        .HasMaxLength(50)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<bool>(\"ShowComments\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<string>(\"Slug\")\n                        .IsRequired()\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<bool>(\"SuppressTeaser\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<string>(\"TeaserOverride\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"TemplateKey\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"ThumbnailUrl\")\n                        .HasMaxLength(250)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"BlogId\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"Slug\");\n\n                    b.ToTable(\"cs_Post\", (string)null);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\", null)\n                        .WithMany(\"PageComments\")\n                        .HasForeignKey(\"PageEntityId\")\n                        .OnDelete(DeleteBehavior.Cascade);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageResourceEntity\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\", null)\n                        .WithMany(\"PageResources\")\n                        .HasForeignKey(\"PageEntityId\")\n                        .OnDelete(DeleteBehavior.Cascade);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\", null)\n                        .WithMany(\"PostComments\")\n                        .HasForeignKey(\"PostEntityId\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\", b =>\n                {\n                    b.Navigation(\"PageComments\");\n\n                    b.Navigation(\"PageResources\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\", b =>\n                {\n                    b.Navigation(\"PostComments\");\n                });\n#pragma warning restore 612, 618\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.SQLite/Migrations/20241001104814_SetShowArchiveAboutRelatedBlogToTrue-20241001.cs",
    "content": "﻿using Microsoft.EntityFrameworkCore.Migrations;\n\n#nullable disable\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.SQLite.Migrations\n{\n    /// <inheritdoc />\n    public partial class SetShowArchiveAboutRelatedBlogToTrue20241001 : Migration\n    {\n        /// <inheritdoc />\n        protected override void Up(MigrationBuilder migrationBuilder)\n        {\n            migrationBuilder.AlterColumn<bool>(\n                name: \"ShowRelatedPosts\",\n                table: \"cs_ContentProject\",\n                type: \"INTEGER\",\n                nullable: false,\n                defaultValue: true,\n                oldClrType: typeof(bool),\n                oldType: \"INTEGER\");\n\n            migrationBuilder.AlterColumn<bool>(\n                name: \"ShowBlogCategories\",\n                table: \"cs_ContentProject\",\n                type: \"INTEGER\",\n                nullable: false,\n                defaultValue: true,\n                oldClrType: typeof(bool),\n                oldType: \"INTEGER\");\n\n            migrationBuilder.AlterColumn<bool>(\n                name: \"ShowArchivedPosts\",\n                table: \"cs_ContentProject\",\n                type: \"INTEGER\",\n                nullable: false,\n                defaultValue: true,\n                oldClrType: typeof(bool),\n                oldType: \"INTEGER\");\n\n            migrationBuilder.AlterColumn<bool>(\n                name: \"ShowAboutBox\",\n                table: \"cs_ContentProject\",\n                type: \"INTEGER\",\n                nullable: false,\n                defaultValue: true,\n                oldClrType: typeof(bool),\n                oldType: \"INTEGER\");\n        }\n\n        /// <inheritdoc />\n        protected override void Down(MigrationBuilder migrationBuilder)\n        {\n            migrationBuilder.AlterColumn<bool>(\n                name: \"ShowRelatedPosts\",\n                table: \"cs_ContentProject\",\n                type: \"INTEGER\",\n                nullable: false,\n                oldClrType: typeof(bool),\n                oldType: \"INTEGER\",\n                oldDefaultValue: true);\n\n            migrationBuilder.AlterColumn<bool>(\n                name: \"ShowBlogCategories\",\n                table: \"cs_ContentProject\",\n                type: \"INTEGER\",\n                nullable: false,\n                oldClrType: typeof(bool),\n                oldType: \"INTEGER\",\n                oldDefaultValue: true);\n\n            migrationBuilder.AlterColumn<bool>(\n                name: \"ShowArchivedPosts\",\n                table: \"cs_ContentProject\",\n                type: \"INTEGER\",\n                nullable: false,\n                oldClrType: typeof(bool),\n                oldType: \"INTEGER\",\n                oldDefaultValue: true);\n\n            migrationBuilder.AlterColumn<bool>(\n                name: \"ShowAboutBox\",\n                table: \"cs_ContentProject\",\n                type: \"INTEGER\",\n                nullable: false,\n                oldClrType: typeof(bool),\n                oldType: \"INTEGER\",\n                oldDefaultValue: true);\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.SQLite/Migrations/20241108094744_simplecontent-20241108.Designer.cs",
    "content": "﻿// <auto-generated />\nusing System;\nusing Microsoft.EntityFrameworkCore;\nusing Microsoft.EntityFrameworkCore.Infrastructure;\nusing Microsoft.EntityFrameworkCore.Migrations;\nusing Microsoft.EntityFrameworkCore.Storage.ValueConversion;\nusing cloudscribe.SimpleContent.Storage.EFCore.SQLite;\n\n#nullable disable\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.SQLite.Migrations\n{\n    [DbContext(typeof(SimpleContentDbContext))]\n    [Migration(\"20241108094744_simplecontent-20241108\")]\n    partial class simplecontent20241108\n    {\n        /// <inheritdoc />\n        protected override void BuildTargetModel(ModelBuilder modelBuilder)\n        {\n#pragma warning disable 612, 618\n            modelBuilder.HasAnnotation(\"ProductVersion\", \"8.0.0\");\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Models.ContentHistory\", b =>\n                {\n                    b.Property<Guid>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"ArchivedBy\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<DateTime>(\"ArchivedUtc\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"Content\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"ContentId\")\n                        .IsRequired()\n                        .HasMaxLength(36)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"ContentSource\")\n                        .IsRequired()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"TEXT\")\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"CreatedByUser\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<DateTime>(\"CreatedUtc\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"DraftAuthor\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"DraftContent\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<DateTime?>(\"DraftPubDate\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"DraftSerializedModel\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<bool>(\"IsDraftHx\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<bool>(\"IsPublished\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<DateTime>(\"LastModified\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"LastModifiedByUser\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"MetaHtml\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"MetaJson\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<int>(\"PageOrder\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<string>(\"ParentId\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"ParentSlug\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"ProjectId\")\n                        .HasMaxLength(50)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<DateTime?>(\"PubDate\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"SerializedModel\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"Serializer\")\n                        .HasMaxLength(50)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<bool?>(\"ShowCreatedBy\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<bool?>(\"ShowCreatedDate\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<bool?>(\"ShowLastModifiedBy\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<bool?>(\"ShowLastModifiedDate\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<string>(\"Slug\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"TeaserOverride\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"TemplateKey\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"ViewRoles\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<bool>(\"WasDeleted\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"ContentId\");\n\n                    b.HasIndex(\"ContentSource\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"CreatedByUser\");\n\n                    b.HasIndex(\"LastModifiedByUser\");\n\n                    b.HasIndex(\"Title\");\n\n                    b.ToTable(\"cs_ContentHistory\", (string)null);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Models.ProjectSettings\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .HasMaxLength(50)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"AboutContent\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"AboutHeading\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<bool>(\"AddBlogToPagesTree\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<bool>(\"BlogMenuLinksToNewestPost\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<string>(\"BlogPageNavComponentVisibility\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<int>(\"BlogPagePosition\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<string>(\"BlogPageText\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"CdnUrl\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"ChannelCategoriesCsv\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"ChannelRating\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<int>(\"ChannelTimeToLive\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<string>(\"CommentNotificationEmail\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"CopyrightNotice\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<int>(\"DaysToComment\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<string>(\"DefaultContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"TEXT\")\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<int>(\"DefaultFeedItems\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"INTEGER\")\n                        .HasDefaultValue(20);\n\n                    b.Property<string>(\"DefaultPageSlug\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"Description\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"DisqusShortName\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"FacebookAppId\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"Image\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<bool>(\"IncludePubDateInPostUrls\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<string>(\"LanguageCode\")\n                        .HasMaxLength(10)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"LocalMediaVirtualPath\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"ManagingEditorEmail\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<int>(\"MaxFeedItems\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"INTEGER\")\n                        .HasDefaultValue(1000);\n\n                    b.Property<bool>(\"ModerateComments\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<int>(\"PostsPerPage\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<string>(\"PubDateFormat\")\n                        .HasMaxLength(75)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"Publisher\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"PublisherEntityType\")\n                        .HasMaxLength(50)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"PublisherLogoHeight\")\n                        .HasMaxLength(20)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"PublisherLogoUrl\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"PublisherLogoWidth\")\n                        .HasMaxLength(20)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"RecaptchaPrivateKey\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"RecaptchaPublicKey\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"RemoteFeedProcessorUseAgentFragment\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"RemoteFeedUrl\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<bool>(\"ShowAboutBox\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"INTEGER\")\n                        .HasDefaultValue(true);\n\n                    b.Property<bool>(\"ShowArchivedPosts\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"INTEGER\")\n                        .HasDefaultValue(true);\n\n                    b.Property<bool>(\"ShowBlogCategories\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"INTEGER\")\n                        .HasDefaultValue(true);\n\n                    b.Property<bool>(\"ShowCreatedBy\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<bool>(\"ShowCreatedDate\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<bool>(\"ShowFeaturedPostsOnDefaultPage\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<bool>(\"ShowLastModifiedBy\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<bool>(\"ShowLastModifiedDate\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<bool>(\"ShowRecentPostsOnDefaultPage\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<bool>(\"ShowRelatedPosts\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"INTEGER\")\n                        .HasDefaultValue(true);\n\n                    b.Property<bool>(\"ShowTitle\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<string>(\"SiteName\")\n                        .HasMaxLength(200)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<byte>(\"TeaserMode\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"INTEGER\")\n                        .HasDefaultValue((byte)0);\n\n                    b.Property<int>(\"TeaserTruncationLength\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"INTEGER\")\n                        .HasDefaultValue(20);\n\n                    b.Property<byte>(\"TeaserTruncationMode\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"INTEGER\")\n                        .HasDefaultValue((byte)0);\n\n                    b.Property<string>(\"TimeZoneId\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"Title\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"TwitterCreator\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"TwitterPublisher\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<bool>(\"UseDefaultPageAsRootNode\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<string>(\"WebmasterEmail\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"TEXT\");\n\n                    b.HasKey(\"Id\");\n\n                    b.ToTable(\"cs_ContentProject\", (string)null);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageCategory\", b =>\n                {\n                    b.Property<string>(\"Value\")\n                        .HasMaxLength(50)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"TEXT\");\n\n                    b.HasKey(\"Value\", \"PageEntityId\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.HasIndex(\"Value\");\n\n                    b.ToTable(\"cs_PageCategory\", (string)null);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"Content\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"Email\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"Ip\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<bool>(\"IsAdmin\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<bool>(\"IsApproved\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<DateTime>(\"PubDate\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"UserAgent\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"Website\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_PageComment\", (string)null);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasMaxLength(500)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"Content\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"TEXT\")\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"CreatedByUser\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<DateTime>(\"CreatedUtc\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<bool>(\"DisableEditor\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<string>(\"DraftAuthor\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"DraftContent\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<DateTime?>(\"DraftPubDate\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"DraftSerializedModel\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"ExternalUrl\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<bool>(\"IsPublished\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<DateTime>(\"LastModified\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"LastModifiedByUser\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"MenuFilters\")\n                        .HasMaxLength(500)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<bool>(\"MenuOnly\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasMaxLength(500)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"MetaHtml\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"MetaJson\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<int>(\"PageOrder\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<string>(\"ParentId\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"ParentSlug\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<DateTime?>(\"PubDate\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"SerializedModel\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"Serializer\")\n                        .HasMaxLength(50)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<bool>(\"ShowCategories\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<bool>(\"ShowComments\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<bool?>(\"ShowCreatedBy\")\n                        .HasColumnType(\"boolean\");\n\n                    b.Property<bool?>(\"ShowCreatedDate\")\n                        .HasColumnType(\"boolean\");\n\n                    b.Property<bool>(\"ShowHeading\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<bool>(\"ShowLastModified\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<bool?>(\"ShowLastModifiedBy\")\n                        .HasColumnType(\"boolean\");\n\n                    b.Property<bool?>(\"ShowLastModifiedDate\")\n                        .HasColumnType(\"boolean\");\n\n                    b.Property<bool>(\"ShowMenu\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<bool>(\"ShowPubDate\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<string>(\"Slug\")\n                        .IsRequired()\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"TemplateKey\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"ViewRoles\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"ParentId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_Page\", (string)null);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageResourceEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"Environment\")\n                        .IsRequired()\n                        .HasMaxLength(15)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<int>(\"Sort\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<string>(\"Type\")\n                        .IsRequired()\n                        .HasMaxLength(10)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"Url\")\n                        .IsRequired()\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.ToTable(\"cs_PageResource\", (string)null);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostCategory\", b =>\n                {\n                    b.Property<string>(\"Value\")\n                        .HasMaxLength(50)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"PostEntityId\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"TEXT\");\n\n                    b.HasKey(\"Value\", \"PostEntityId\");\n\n                    b.HasIndex(\"PostEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.HasIndex(\"Value\");\n\n                    b.ToTable(\"cs_PostCategory\", (string)null);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"Content\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"Email\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"Ip\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<bool>(\"IsAdmin\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<bool>(\"IsApproved\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<string>(\"PostEntityId\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<DateTime>(\"PubDate\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"UserAgent\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"Website\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PostEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_PostComment\", (string)null);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"AutoTeaser\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"BlogId\")\n                        .IsRequired()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasMaxLength(500)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"Content\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"TEXT\")\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"CreatedByUser\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<DateTime>(\"CreatedUtc\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"DraftAuthor\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"DraftContent\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<DateTime?>(\"DraftPubDate\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"DraftSerializedModel\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"ImageUrl\")\n                        .HasMaxLength(250)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<bool>(\"IsFeatured\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<bool>(\"IsPublished\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<DateTime>(\"LastModified\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"LastModifiedByUser\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasMaxLength(500)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"MetaHtml\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"MetaJson\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<DateTime?>(\"PubDate\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"SerializedModel\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"Serializer\")\n                        .HasMaxLength(50)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<bool>(\"ShowComments\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<string>(\"Slug\")\n                        .IsRequired()\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<bool>(\"SuppressTeaser\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<string>(\"TeaserOverride\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"TemplateKey\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"ThumbnailUrl\")\n                        .HasMaxLength(250)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"BlogId\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"Slug\");\n\n                    b.ToTable(\"cs_Post\", (string)null);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\", null)\n                        .WithMany(\"PageComments\")\n                        .HasForeignKey(\"PageEntityId\")\n                        .OnDelete(DeleteBehavior.Cascade);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageResourceEntity\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\", null)\n                        .WithMany(\"PageResources\")\n                        .HasForeignKey(\"PageEntityId\")\n                        .OnDelete(DeleteBehavior.Cascade);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\", null)\n                        .WithMany(\"PostComments\")\n                        .HasForeignKey(\"PostEntityId\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\", b =>\n                {\n                    b.Navigation(\"PageComments\");\n\n                    b.Navigation(\"PageResources\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\", b =>\n                {\n                    b.Navigation(\"PostComments\");\n                });\n#pragma warning restore 612, 618\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.SQLite/Migrations/20241108094744_simplecontent-20241108.cs",
    "content": "﻿using Microsoft.EntityFrameworkCore.Migrations;\n\n#nullable disable\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.SQLite.Migrations\n{\n    /// <inheritdoc />\n    public partial class simplecontent20241108 : Migration\n    {\n        /// <inheritdoc />\n        protected override void Up(MigrationBuilder migrationBuilder)\n        {\n            migrationBuilder.AddColumn<bool>(\n                name: \"ShowCreatedBy\",\n                table: \"cs_Page\",\n                type: \"boolean\",\n                nullable: true);\n\n            migrationBuilder.AddColumn<bool>(\n                name: \"ShowCreatedDate\",\n                table: \"cs_Page\",\n                type: \"boolean\",\n                nullable: true);\n\n            migrationBuilder.AddColumn<bool>(\n                name: \"ShowLastModifiedBy\",\n                table: \"cs_Page\",\n                type: \"boolean\",\n                nullable: true);\n\n            migrationBuilder.AddColumn<bool>(\n                name: \"ShowLastModifiedDate\",\n                table: \"cs_Page\",\n                type: \"boolean\",\n                nullable: true);\n\n            migrationBuilder.AddColumn<bool>(\n                name: \"ShowCreatedBy\",\n                table: \"cs_ContentProject\",\n                type: \"INTEGER\",\n                nullable: false,\n                defaultValue: false);\n\n            migrationBuilder.AddColumn<bool>(\n                name: \"ShowCreatedDate\",\n                table: \"cs_ContentProject\",\n                type: \"INTEGER\",\n                nullable: false,\n                defaultValue: false);\n\n            migrationBuilder.AddColumn<bool>(\n                name: \"ShowLastModifiedBy\",\n                table: \"cs_ContentProject\",\n                type: \"INTEGER\",\n                nullable: false,\n                defaultValue: false);\n\n            migrationBuilder.AddColumn<bool>(\n                name: \"ShowLastModifiedDate\",\n                table: \"cs_ContentProject\",\n                type: \"INTEGER\",\n                nullable: false,\n                defaultValue: false);\n\n            migrationBuilder.AddColumn<bool>(\n                name: \"ShowCreatedBy\",\n                table: \"cs_ContentHistory\",\n                type: \"INTEGER\",\n                nullable: true);\n\n            migrationBuilder.AddColumn<bool>(\n                name: \"ShowCreatedDate\",\n                table: \"cs_ContentHistory\",\n                type: \"INTEGER\",\n                nullable: true);\n\n            migrationBuilder.AddColumn<bool>(\n                name: \"ShowLastModifiedBy\",\n                table: \"cs_ContentHistory\",\n                type: \"INTEGER\",\n                nullable: true);\n\n            migrationBuilder.AddColumn<bool>(\n                name: \"ShowLastModifiedDate\",\n                table: \"cs_ContentHistory\",\n                type: \"INTEGER\",\n                nullable: true);\n        }\n\n        /// <inheritdoc />\n        protected override void Down(MigrationBuilder migrationBuilder)\n        {\n            migrationBuilder.DropColumn(\n                name: \"ShowCreatedBy\",\n                table: \"cs_Page\");\n\n            migrationBuilder.DropColumn(\n                name: \"ShowCreatedDate\",\n                table: \"cs_Page\");\n\n            migrationBuilder.DropColumn(\n                name: \"ShowLastModifiedBy\",\n                table: \"cs_Page\");\n\n            migrationBuilder.DropColumn(\n                name: \"ShowLastModifiedDate\",\n                table: \"cs_Page\");\n\n            migrationBuilder.DropColumn(\n                name: \"ShowCreatedBy\",\n                table: \"cs_ContentProject\");\n\n            migrationBuilder.DropColumn(\n                name: \"ShowCreatedDate\",\n                table: \"cs_ContentProject\");\n\n            migrationBuilder.DropColumn(\n                name: \"ShowLastModifiedBy\",\n                table: \"cs_ContentProject\");\n\n            migrationBuilder.DropColumn(\n                name: \"ShowLastModifiedDate\",\n                table: \"cs_ContentProject\");\n\n            migrationBuilder.DropColumn(\n                name: \"ShowCreatedBy\",\n                table: \"cs_ContentHistory\");\n\n            migrationBuilder.DropColumn(\n                name: \"ShowCreatedDate\",\n                table: \"cs_ContentHistory\");\n\n            migrationBuilder.DropColumn(\n                name: \"ShowLastModifiedBy\",\n                table: \"cs_ContentHistory\");\n\n            migrationBuilder.DropColumn(\n                name: \"ShowLastModifiedDate\",\n                table: \"cs_ContentHistory\");\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.SQLite/Migrations/20250815092116_simplecontent-userscript.Designer.cs",
    "content": "﻿// <auto-generated />\nusing System;\nusing Microsoft.EntityFrameworkCore;\nusing Microsoft.EntityFrameworkCore.Infrastructure;\nusing Microsoft.EntityFrameworkCore.Migrations;\nusing Microsoft.EntityFrameworkCore.Storage.ValueConversion;\nusing cloudscribe.SimpleContent.Storage.EFCore.SQLite;\n\n#nullable disable\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.SQLite.Migrations\n{\n    [DbContext(typeof(SimpleContentDbContext))]\n    [Migration(\"20250815092116_simplecontent-userscript\")]\n    partial class simplecontentuserscript\n    {\n        /// <inheritdoc />\n        protected override void BuildTargetModel(ModelBuilder modelBuilder)\n        {\n#pragma warning disable 612, 618\n            modelBuilder.HasAnnotation(\"ProductVersion\", \"8.0.0\");\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Models.ContentHistory\", b =>\n                {\n                    b.Property<Guid>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"ArchivedBy\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<DateTime>(\"ArchivedUtc\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"Content\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"ContentId\")\n                        .IsRequired()\n                        .HasMaxLength(36)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"ContentSource\")\n                        .IsRequired()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"TEXT\")\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"CreatedByUser\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<DateTime>(\"CreatedUtc\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"DraftAuthor\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"DraftContent\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<DateTime?>(\"DraftPubDate\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"DraftSerializedModel\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<bool>(\"IsDraftHx\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<bool>(\"IsPublished\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<DateTime>(\"LastModified\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"LastModifiedByUser\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"MetaHtml\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"MetaJson\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<int>(\"PageOrder\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<string>(\"ParentId\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"ParentSlug\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"ProjectId\")\n                        .HasMaxLength(50)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<DateTime?>(\"PubDate\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"SerializedModel\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"Serializer\")\n                        .HasMaxLength(50)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<bool?>(\"ShowCreatedBy\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<bool?>(\"ShowCreatedDate\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<bool?>(\"ShowLastModifiedBy\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<bool?>(\"ShowLastModifiedDate\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<string>(\"Slug\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"TeaserOverride\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"TemplateKey\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"ViewRoles\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<bool>(\"WasDeleted\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"ContentId\");\n\n                    b.HasIndex(\"ContentSource\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"CreatedByUser\");\n\n                    b.HasIndex(\"LastModifiedByUser\");\n\n                    b.HasIndex(\"Title\");\n\n                    b.ToTable(\"cs_ContentHistory\", (string)null);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Models.ProjectSettings\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .HasMaxLength(50)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"AboutContent\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"AboutHeading\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<bool>(\"AddBlogToPagesTree\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<bool>(\"BlogMenuLinksToNewestPost\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<string>(\"BlogPageNavComponentVisibility\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<int>(\"BlogPagePosition\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<string>(\"BlogPageText\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"CdnUrl\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"ChannelCategoriesCsv\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"ChannelRating\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<int>(\"ChannelTimeToLive\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<string>(\"CommentNotificationEmail\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"CopyrightNotice\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<int>(\"DaysToComment\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<string>(\"DefaultContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"TEXT\")\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<int>(\"DefaultFeedItems\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"INTEGER\")\n                        .HasDefaultValue(20);\n\n                    b.Property<string>(\"DefaultPageSlug\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"Description\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"DisqusShortName\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"FacebookAppId\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"Image\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<bool>(\"IncludePubDateInPostUrls\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<string>(\"LanguageCode\")\n                        .HasMaxLength(10)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"LocalMediaVirtualPath\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"ManagingEditorEmail\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<int>(\"MaxFeedItems\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"INTEGER\")\n                        .HasDefaultValue(1000);\n\n                    b.Property<bool>(\"ModerateComments\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<int>(\"PostsPerPage\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<string>(\"PubDateFormat\")\n                        .HasMaxLength(75)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"Publisher\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"PublisherEntityType\")\n                        .HasMaxLength(50)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"PublisherLogoHeight\")\n                        .HasMaxLength(20)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"PublisherLogoUrl\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"PublisherLogoWidth\")\n                        .HasMaxLength(20)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"RecaptchaPrivateKey\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"RecaptchaPublicKey\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"RemoteFeedProcessorUseAgentFragment\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"RemoteFeedUrl\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<bool>(\"ShowAboutBox\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"INTEGER\")\n                        .HasDefaultValue(true);\n\n                    b.Property<bool>(\"ShowArchivedPosts\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"INTEGER\")\n                        .HasDefaultValue(true);\n\n                    b.Property<bool>(\"ShowBlogCategories\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"INTEGER\")\n                        .HasDefaultValue(true);\n\n                    b.Property<bool>(\"ShowCreatedBy\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<bool>(\"ShowCreatedDate\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<bool>(\"ShowFeaturedPostsOnDefaultPage\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<bool>(\"ShowLastModifiedBy\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<bool>(\"ShowLastModifiedDate\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<bool>(\"ShowRecentPostsOnDefaultPage\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<bool>(\"ShowRelatedPosts\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"INTEGER\")\n                        .HasDefaultValue(true);\n\n                    b.Property<bool>(\"ShowTitle\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<string>(\"SiteName\")\n                        .HasMaxLength(200)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<byte>(\"TeaserMode\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"INTEGER\")\n                        .HasDefaultValue((byte)0);\n\n                    b.Property<int>(\"TeaserTruncationLength\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"INTEGER\")\n                        .HasDefaultValue(20);\n\n                    b.Property<byte>(\"TeaserTruncationMode\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"INTEGER\")\n                        .HasDefaultValue((byte)0);\n\n                    b.Property<string>(\"TimeZoneId\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"Title\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"TwitterCreator\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"TwitterPublisher\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<bool>(\"UseDefaultPageAsRootNode\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<string>(\"WebmasterEmail\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"TEXT\");\n\n                    b.HasKey(\"Id\");\n\n                    b.ToTable(\"cs_ContentProject\", (string)null);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageCategory\", b =>\n                {\n                    b.Property<string>(\"Value\")\n                        .HasMaxLength(50)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"TEXT\");\n\n                    b.HasKey(\"Value\", \"PageEntityId\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.HasIndex(\"Value\");\n\n                    b.ToTable(\"cs_PageCategory\", (string)null);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"Content\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"Email\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"Ip\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<bool>(\"IsAdmin\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<bool>(\"IsApproved\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<DateTime>(\"PubDate\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"UserAgent\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"Website\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_PageComment\", (string)null);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasMaxLength(500)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"Content\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"TEXT\")\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"CreatedByUser\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<DateTime>(\"CreatedUtc\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<bool>(\"DisableEditor\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<string>(\"DraftAuthor\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"DraftContent\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<DateTime?>(\"DraftPubDate\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"DraftSerializedModel\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"ExternalUrl\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<bool>(\"IsPublished\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<DateTime>(\"LastModified\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"LastModifiedByUser\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"MenuFilters\")\n                        .HasMaxLength(500)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<bool>(\"MenuOnly\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasMaxLength(500)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"MetaHtml\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"MetaJson\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<int>(\"PageOrder\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<string>(\"ParentId\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"ParentSlug\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<DateTime?>(\"PubDate\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"Script\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"SerializedModel\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"Serializer\")\n                        .HasMaxLength(50)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<bool>(\"ShowCategories\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<bool>(\"ShowComments\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<bool?>(\"ShowCreatedBy\")\n                        .HasColumnType(\"boolean\");\n\n                    b.Property<bool?>(\"ShowCreatedDate\")\n                        .HasColumnType(\"boolean\");\n\n                    b.Property<bool>(\"ShowHeading\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<bool>(\"ShowLastModified\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<bool?>(\"ShowLastModifiedBy\")\n                        .HasColumnType(\"boolean\");\n\n                    b.Property<bool?>(\"ShowLastModifiedDate\")\n                        .HasColumnType(\"boolean\");\n\n                    b.Property<bool>(\"ShowMenu\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<bool>(\"ShowPubDate\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<string>(\"Slug\")\n                        .IsRequired()\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"TemplateKey\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"ViewRoles\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"ParentId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_Page\", (string)null);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageResourceEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"Environment\")\n                        .IsRequired()\n                        .HasMaxLength(15)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"Script\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<int>(\"Sort\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<string>(\"Type\")\n                        .IsRequired()\n                        .HasMaxLength(10)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"Url\")\n                        .IsRequired()\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.ToTable(\"cs_PageResource\", (string)null);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostCategory\", b =>\n                {\n                    b.Property<string>(\"Value\")\n                        .HasMaxLength(50)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"PostEntityId\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"TEXT\");\n\n                    b.HasKey(\"Value\", \"PostEntityId\");\n\n                    b.HasIndex(\"PostEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.HasIndex(\"Value\");\n\n                    b.ToTable(\"cs_PostCategory\", (string)null);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"Content\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"Email\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"Ip\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<bool>(\"IsAdmin\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<bool>(\"IsApproved\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<string>(\"PostEntityId\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<DateTime>(\"PubDate\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"UserAgent\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"Website\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PostEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_PostComment\", (string)null);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"AutoTeaser\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"BlogId\")\n                        .IsRequired()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasMaxLength(500)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"Content\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"TEXT\")\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"CreatedByUser\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<DateTime>(\"CreatedUtc\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"DraftAuthor\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"DraftContent\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<DateTime?>(\"DraftPubDate\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"DraftSerializedModel\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"ImageUrl\")\n                        .HasMaxLength(250)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<bool>(\"IsFeatured\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<bool>(\"IsPublished\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<DateTime>(\"LastModified\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"LastModifiedByUser\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasMaxLength(500)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"MetaHtml\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"MetaJson\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<DateTime?>(\"PubDate\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"Script\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"SerializedModel\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"Serializer\")\n                        .HasMaxLength(50)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<bool>(\"ShowComments\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<string>(\"Slug\")\n                        .IsRequired()\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<bool>(\"SuppressTeaser\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<string>(\"TeaserOverride\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"TemplateKey\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"ThumbnailUrl\")\n                        .HasMaxLength(250)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"BlogId\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"Slug\");\n\n                    b.ToTable(\"cs_Post\", (string)null);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\", null)\n                        .WithMany(\"PageComments\")\n                        .HasForeignKey(\"PageEntityId\")\n                        .OnDelete(DeleteBehavior.Cascade);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageResourceEntity\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\", null)\n                        .WithMany(\"PageResources\")\n                        .HasForeignKey(\"PageEntityId\")\n                        .OnDelete(DeleteBehavior.Cascade);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\", null)\n                        .WithMany(\"PostComments\")\n                        .HasForeignKey(\"PostEntityId\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\", b =>\n                {\n                    b.Navigation(\"PageComments\");\n\n                    b.Navigation(\"PageResources\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\", b =>\n                {\n                    b.Navigation(\"PostComments\");\n                });\n#pragma warning restore 612, 618\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.SQLite/Migrations/20250815092116_simplecontent-userscript.cs",
    "content": "﻿using Microsoft.EntityFrameworkCore.Migrations;\n\n#nullable disable\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.SQLite.Migrations\n{\n    /// <inheritdoc />\n    public partial class simplecontentuserscript : Migration\n    {\n        /// <inheritdoc />\n        protected override void Up(MigrationBuilder migrationBuilder)\n        {\n            migrationBuilder.AddColumn<string>(\n                name: \"Script\",\n                table: \"cs_Post\",\n                type: \"TEXT\",\n                nullable: true);\n\n            migrationBuilder.AddColumn<string>(\n                name: \"Script\",\n                table: \"cs_PageResource\",\n                type: \"TEXT\",\n                nullable: true);\n\n            migrationBuilder.AddColumn<string>(\n                name: \"Script\",\n                table: \"cs_Page\",\n                type: \"TEXT\",\n                nullable: true);\n        }\n\n        /// <inheritdoc />\n        protected override void Down(MigrationBuilder migrationBuilder)\n        {\n            migrationBuilder.DropColumn(\n                name: \"Script\",\n                table: \"cs_Post\");\n\n            migrationBuilder.DropColumn(\n                name: \"Script\",\n                table: \"cs_PageResource\");\n\n            migrationBuilder.DropColumn(\n                name: \"Script\",\n                table: \"cs_Page\");\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.SQLite/Migrations/20250818153135_remove-pageresource-script.Designer.cs",
    "content": "﻿// <auto-generated />\nusing System;\nusing Microsoft.EntityFrameworkCore;\nusing Microsoft.EntityFrameworkCore.Infrastructure;\nusing Microsoft.EntityFrameworkCore.Migrations;\nusing Microsoft.EntityFrameworkCore.Storage.ValueConversion;\nusing cloudscribe.SimpleContent.Storage.EFCore.SQLite;\n\n#nullable disable\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.SQLite.Migrations\n{\n    [DbContext(typeof(SimpleContentDbContext))]\n    [Migration(\"20250818153135_remove-pageresource-script\")]\n    partial class removepageresourcescript\n    {\n        /// <inheritdoc />\n        protected override void BuildTargetModel(ModelBuilder modelBuilder)\n        {\n#pragma warning disable 612, 618\n            modelBuilder.HasAnnotation(\"ProductVersion\", \"8.0.0\");\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Models.ContentHistory\", b =>\n                {\n                    b.Property<Guid>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"ArchivedBy\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<DateTime>(\"ArchivedUtc\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"Content\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"ContentId\")\n                        .IsRequired()\n                        .HasMaxLength(36)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"ContentSource\")\n                        .IsRequired()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"TEXT\")\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"CreatedByUser\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<DateTime>(\"CreatedUtc\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"DraftAuthor\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"DraftContent\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<DateTime?>(\"DraftPubDate\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"DraftSerializedModel\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<bool>(\"IsDraftHx\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<bool>(\"IsPublished\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<DateTime>(\"LastModified\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"LastModifiedByUser\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"MetaHtml\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"MetaJson\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<int>(\"PageOrder\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<string>(\"ParentId\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"ParentSlug\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"ProjectId\")\n                        .HasMaxLength(50)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<DateTime?>(\"PubDate\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"SerializedModel\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"Serializer\")\n                        .HasMaxLength(50)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<bool?>(\"ShowCreatedBy\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<bool?>(\"ShowCreatedDate\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<bool?>(\"ShowLastModifiedBy\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<bool?>(\"ShowLastModifiedDate\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<string>(\"Slug\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"TeaserOverride\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"TemplateKey\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"ViewRoles\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<bool>(\"WasDeleted\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"ContentId\");\n\n                    b.HasIndex(\"ContentSource\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"CreatedByUser\");\n\n                    b.HasIndex(\"LastModifiedByUser\");\n\n                    b.HasIndex(\"Title\");\n\n                    b.ToTable(\"cs_ContentHistory\", (string)null);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Models.ProjectSettings\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .HasMaxLength(50)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"AboutContent\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"AboutHeading\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<bool>(\"AddBlogToPagesTree\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<bool>(\"BlogMenuLinksToNewestPost\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<string>(\"BlogPageNavComponentVisibility\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<int>(\"BlogPagePosition\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<string>(\"BlogPageText\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"CdnUrl\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"ChannelCategoriesCsv\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"ChannelRating\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<int>(\"ChannelTimeToLive\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<string>(\"CommentNotificationEmail\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"CopyrightNotice\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<int>(\"DaysToComment\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<string>(\"DefaultContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"TEXT\")\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<int>(\"DefaultFeedItems\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"INTEGER\")\n                        .HasDefaultValue(20);\n\n                    b.Property<string>(\"DefaultPageSlug\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"Description\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"DisqusShortName\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"FacebookAppId\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"Image\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<bool>(\"IncludePubDateInPostUrls\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<string>(\"LanguageCode\")\n                        .HasMaxLength(10)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"LocalMediaVirtualPath\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"ManagingEditorEmail\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<int>(\"MaxFeedItems\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"INTEGER\")\n                        .HasDefaultValue(1000);\n\n                    b.Property<bool>(\"ModerateComments\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<int>(\"PostsPerPage\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<string>(\"PubDateFormat\")\n                        .HasMaxLength(75)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"Publisher\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"PublisherEntityType\")\n                        .HasMaxLength(50)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"PublisherLogoHeight\")\n                        .HasMaxLength(20)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"PublisherLogoUrl\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"PublisherLogoWidth\")\n                        .HasMaxLength(20)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"RecaptchaPrivateKey\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"RecaptchaPublicKey\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"RemoteFeedProcessorUseAgentFragment\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"RemoteFeedUrl\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<bool>(\"ShowAboutBox\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"INTEGER\")\n                        .HasDefaultValue(true);\n\n                    b.Property<bool>(\"ShowArchivedPosts\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"INTEGER\")\n                        .HasDefaultValue(true);\n\n                    b.Property<bool>(\"ShowBlogCategories\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"INTEGER\")\n                        .HasDefaultValue(true);\n\n                    b.Property<bool>(\"ShowCreatedBy\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<bool>(\"ShowCreatedDate\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<bool>(\"ShowFeaturedPostsOnDefaultPage\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<bool>(\"ShowLastModifiedBy\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<bool>(\"ShowLastModifiedDate\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<bool>(\"ShowRecentPostsOnDefaultPage\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<bool>(\"ShowRelatedPosts\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"INTEGER\")\n                        .HasDefaultValue(true);\n\n                    b.Property<bool>(\"ShowTitle\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<string>(\"SiteName\")\n                        .HasMaxLength(200)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<byte>(\"TeaserMode\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"INTEGER\")\n                        .HasDefaultValue((byte)0);\n\n                    b.Property<int>(\"TeaserTruncationLength\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"INTEGER\")\n                        .HasDefaultValue(20);\n\n                    b.Property<byte>(\"TeaserTruncationMode\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"INTEGER\")\n                        .HasDefaultValue((byte)0);\n\n                    b.Property<string>(\"TimeZoneId\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"Title\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"TwitterCreator\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"TwitterPublisher\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<bool>(\"UseDefaultPageAsRootNode\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<string>(\"WebmasterEmail\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"TEXT\");\n\n                    b.HasKey(\"Id\");\n\n                    b.ToTable(\"cs_ContentProject\", (string)null);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageCategory\", b =>\n                {\n                    b.Property<string>(\"Value\")\n                        .HasMaxLength(50)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"TEXT\");\n\n                    b.HasKey(\"Value\", \"PageEntityId\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.HasIndex(\"Value\");\n\n                    b.ToTable(\"cs_PageCategory\", (string)null);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"Content\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"Email\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"Ip\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<bool>(\"IsAdmin\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<bool>(\"IsApproved\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<DateTime>(\"PubDate\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"UserAgent\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"Website\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_PageComment\", (string)null);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasMaxLength(500)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"Content\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"TEXT\")\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"CreatedByUser\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<DateTime>(\"CreatedUtc\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<bool>(\"DisableEditor\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<string>(\"DraftAuthor\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"DraftContent\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<DateTime?>(\"DraftPubDate\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"DraftSerializedModel\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"ExternalUrl\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<bool>(\"IsPublished\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<DateTime>(\"LastModified\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"LastModifiedByUser\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"MenuFilters\")\n                        .HasMaxLength(500)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<bool>(\"MenuOnly\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasMaxLength(500)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"MetaHtml\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"MetaJson\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<int>(\"PageOrder\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<string>(\"ParentId\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"ParentSlug\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<DateTime?>(\"PubDate\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"Script\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"SerializedModel\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"Serializer\")\n                        .HasMaxLength(50)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<bool>(\"ShowCategories\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<bool>(\"ShowComments\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<bool?>(\"ShowCreatedBy\")\n                        .HasColumnType(\"boolean\");\n\n                    b.Property<bool?>(\"ShowCreatedDate\")\n                        .HasColumnType(\"boolean\");\n\n                    b.Property<bool>(\"ShowHeading\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<bool>(\"ShowLastModified\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<bool?>(\"ShowLastModifiedBy\")\n                        .HasColumnType(\"boolean\");\n\n                    b.Property<bool?>(\"ShowLastModifiedDate\")\n                        .HasColumnType(\"boolean\");\n\n                    b.Property<bool>(\"ShowMenu\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<bool>(\"ShowPubDate\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<string>(\"Slug\")\n                        .IsRequired()\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"TemplateKey\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"ViewRoles\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"ParentId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_Page\", (string)null);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageResourceEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"Environment\")\n                        .IsRequired()\n                        .HasMaxLength(15)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<int>(\"Sort\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<string>(\"Type\")\n                        .IsRequired()\n                        .HasMaxLength(10)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"Url\")\n                        .IsRequired()\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.ToTable(\"cs_PageResource\", (string)null);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostCategory\", b =>\n                {\n                    b.Property<string>(\"Value\")\n                        .HasMaxLength(50)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"PostEntityId\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"TEXT\");\n\n                    b.HasKey(\"Value\", \"PostEntityId\");\n\n                    b.HasIndex(\"PostEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.HasIndex(\"Value\");\n\n                    b.ToTable(\"cs_PostCategory\", (string)null);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"Content\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"Email\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"Ip\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<bool>(\"IsAdmin\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<bool>(\"IsApproved\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<string>(\"PostEntityId\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<DateTime>(\"PubDate\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"UserAgent\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"Website\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PostEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_PostComment\", (string)null);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"AutoTeaser\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"BlogId\")\n                        .IsRequired()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasMaxLength(500)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"Content\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"TEXT\")\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"CreatedByUser\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<DateTime>(\"CreatedUtc\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"DraftAuthor\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"DraftContent\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<DateTime?>(\"DraftPubDate\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"DraftSerializedModel\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"ImageUrl\")\n                        .HasMaxLength(250)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<bool>(\"IsFeatured\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<bool>(\"IsPublished\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<DateTime>(\"LastModified\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"LastModifiedByUser\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasMaxLength(500)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"MetaHtml\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"MetaJson\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<DateTime?>(\"PubDate\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"Script\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"SerializedModel\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"Serializer\")\n                        .HasMaxLength(50)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<bool>(\"ShowComments\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<string>(\"Slug\")\n                        .IsRequired()\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<bool>(\"SuppressTeaser\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<string>(\"TeaserOverride\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"TemplateKey\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"ThumbnailUrl\")\n                        .HasMaxLength(250)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"BlogId\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"Slug\");\n\n                    b.ToTable(\"cs_Post\", (string)null);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\", null)\n                        .WithMany(\"PageComments\")\n                        .HasForeignKey(\"PageEntityId\")\n                        .OnDelete(DeleteBehavior.Cascade);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageResourceEntity\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\", null)\n                        .WithMany(\"PageResources\")\n                        .HasForeignKey(\"PageEntityId\")\n                        .OnDelete(DeleteBehavior.Cascade);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\", null)\n                        .WithMany(\"PostComments\")\n                        .HasForeignKey(\"PostEntityId\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\", b =>\n                {\n                    b.Navigation(\"PageComments\");\n\n                    b.Navigation(\"PageResources\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\", b =>\n                {\n                    b.Navigation(\"PostComments\");\n                });\n#pragma warning restore 612, 618\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.SQLite/Migrations/20250818153135_remove-pageresource-script.cs",
    "content": "﻿using Microsoft.EntityFrameworkCore.Migrations;\n\n#nullable disable\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.SQLite.Migrations\n{\n    /// <inheritdoc />\n    public partial class removepageresourcescript : Migration\n    {\n        /// <inheritdoc />\n        protected override void Up(MigrationBuilder migrationBuilder)\n        {\n            migrationBuilder.DropColumn(\n                name: \"Script\",\n                table: \"cs_PageResource\");\n        }\n\n        /// <inheritdoc />\n        protected override void Down(MigrationBuilder migrationBuilder)\n        {\n            migrationBuilder.AddColumn<string>(\n                name: \"Script\",\n                table: \"cs_PageResource\",\n                type: \"TEXT\",\n                nullable: true);\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.SQLite/Migrations/SimpleContentDbContextModelSnapshot.cs",
    "content": "﻿// <auto-generated />\nusing System;\nusing Microsoft.EntityFrameworkCore;\nusing Microsoft.EntityFrameworkCore.Infrastructure;\nusing Microsoft.EntityFrameworkCore.Storage.ValueConversion;\nusing cloudscribe.SimpleContent.Storage.EFCore.SQLite;\n\n#nullable disable\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.SQLite.Migrations\n{\n    [DbContext(typeof(SimpleContentDbContext))]\n    partial class SimpleContentDbContextModelSnapshot : ModelSnapshot\n    {\n        protected override void BuildModel(ModelBuilder modelBuilder)\n        {\n#pragma warning disable 612, 618\n            modelBuilder.HasAnnotation(\"ProductVersion\", \"8.0.0\");\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Models.ContentHistory\", b =>\n                {\n                    b.Property<Guid>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(36)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"ArchivedBy\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<DateTime>(\"ArchivedUtc\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"Content\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"ContentId\")\n                        .IsRequired()\n                        .HasMaxLength(36)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"ContentSource\")\n                        .IsRequired()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"TEXT\")\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"CreatedByUser\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<DateTime>(\"CreatedUtc\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"DraftAuthor\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"DraftContent\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<DateTime?>(\"DraftPubDate\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"DraftSerializedModel\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<bool>(\"IsDraftHx\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<bool>(\"IsPublished\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<DateTime>(\"LastModified\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"LastModifiedByUser\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"MetaHtml\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"MetaJson\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<int>(\"PageOrder\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<string>(\"ParentId\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"ParentSlug\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"ProjectId\")\n                        .HasMaxLength(50)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<DateTime?>(\"PubDate\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"SerializedModel\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"Serializer\")\n                        .HasMaxLength(50)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<bool?>(\"ShowCreatedBy\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<bool?>(\"ShowCreatedDate\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<bool?>(\"ShowLastModifiedBy\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<bool?>(\"ShowLastModifiedDate\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<string>(\"Slug\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"TeaserOverride\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"TemplateKey\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"ViewRoles\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<bool>(\"WasDeleted\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"ContentId\");\n\n                    b.HasIndex(\"ContentSource\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"CreatedByUser\");\n\n                    b.HasIndex(\"LastModifiedByUser\");\n\n                    b.HasIndex(\"Title\");\n\n                    b.ToTable(\"cs_ContentHistory\", (string)null);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Models.ProjectSettings\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .HasMaxLength(50)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"AboutContent\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"AboutHeading\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<bool>(\"AddBlogToPagesTree\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<bool>(\"BlogMenuLinksToNewestPost\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<string>(\"BlogPageNavComponentVisibility\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<int>(\"BlogPagePosition\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<string>(\"BlogPageText\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"CdnUrl\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"ChannelCategoriesCsv\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"ChannelRating\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<int>(\"ChannelTimeToLive\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<string>(\"CommentNotificationEmail\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"CopyrightNotice\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<int>(\"DaysToComment\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<string>(\"DefaultContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"TEXT\")\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<int>(\"DefaultFeedItems\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"INTEGER\")\n                        .HasDefaultValue(20);\n\n                    b.Property<string>(\"DefaultPageSlug\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"Description\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"DisqusShortName\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"FacebookAppId\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"Image\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<bool>(\"IncludePubDateInPostUrls\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<string>(\"LanguageCode\")\n                        .HasMaxLength(10)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"LocalMediaVirtualPath\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"ManagingEditorEmail\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<int>(\"MaxFeedItems\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"INTEGER\")\n                        .HasDefaultValue(1000);\n\n                    b.Property<bool>(\"ModerateComments\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<int>(\"PostsPerPage\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<string>(\"PubDateFormat\")\n                        .HasMaxLength(75)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"Publisher\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"PublisherEntityType\")\n                        .HasMaxLength(50)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"PublisherLogoHeight\")\n                        .HasMaxLength(20)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"PublisherLogoUrl\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"PublisherLogoWidth\")\n                        .HasMaxLength(20)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"RecaptchaPrivateKey\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"RecaptchaPublicKey\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"RemoteFeedProcessorUseAgentFragment\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"RemoteFeedUrl\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<bool>(\"ShowAboutBox\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"INTEGER\")\n                        .HasDefaultValue(true);\n\n                    b.Property<bool>(\"ShowArchivedPosts\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"INTEGER\")\n                        .HasDefaultValue(true);\n\n                    b.Property<bool>(\"ShowBlogCategories\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"INTEGER\")\n                        .HasDefaultValue(true);\n\n                    b.Property<bool>(\"ShowCreatedBy\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<bool>(\"ShowCreatedDate\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<bool>(\"ShowFeaturedPostsOnDefaultPage\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<bool>(\"ShowLastModifiedBy\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<bool>(\"ShowLastModifiedDate\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<bool>(\"ShowRecentPostsOnDefaultPage\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<bool>(\"ShowRelatedPosts\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"INTEGER\")\n                        .HasDefaultValue(true);\n\n                    b.Property<bool>(\"ShowTitle\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<string>(\"SiteName\")\n                        .HasMaxLength(200)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<byte>(\"TeaserMode\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"INTEGER\")\n                        .HasDefaultValue((byte)0);\n\n                    b.Property<int>(\"TeaserTruncationLength\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"INTEGER\")\n                        .HasDefaultValue(20);\n\n                    b.Property<byte>(\"TeaserTruncationMode\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"INTEGER\")\n                        .HasDefaultValue((byte)0);\n\n                    b.Property<string>(\"TimeZoneId\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"Title\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"TwitterCreator\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"TwitterPublisher\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<bool>(\"UseDefaultPageAsRootNode\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<string>(\"WebmasterEmail\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"TEXT\");\n\n                    b.HasKey(\"Id\");\n\n                    b.ToTable(\"cs_ContentProject\", (string)null);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageCategory\", b =>\n                {\n                    b.Property<string>(\"Value\")\n                        .HasMaxLength(50)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"TEXT\");\n\n                    b.HasKey(\"Value\", \"PageEntityId\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.HasIndex(\"Value\");\n\n                    b.ToTable(\"cs_PageCategory\", (string)null);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"Content\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"Email\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"Ip\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<bool>(\"IsAdmin\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<bool>(\"IsApproved\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<DateTime>(\"PubDate\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"UserAgent\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"Website\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_PageComment\", (string)null);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasMaxLength(500)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"Content\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"TEXT\")\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"CreatedByUser\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<DateTime>(\"CreatedUtc\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<bool>(\"DisableEditor\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<string>(\"DraftAuthor\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"DraftContent\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<DateTime?>(\"DraftPubDate\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"DraftSerializedModel\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"ExternalUrl\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<bool>(\"IsPublished\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<DateTime>(\"LastModified\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"LastModifiedByUser\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"MenuFilters\")\n                        .HasMaxLength(500)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<bool>(\"MenuOnly\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasMaxLength(500)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"MetaHtml\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"MetaJson\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<int>(\"PageOrder\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<string>(\"ParentId\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"ParentSlug\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<DateTime?>(\"PubDate\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"Script\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"SerializedModel\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"Serializer\")\n                        .HasMaxLength(50)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<bool>(\"ShowCategories\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<bool>(\"ShowComments\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<bool?>(\"ShowCreatedBy\")\n                        .HasColumnType(\"boolean\");\n\n                    b.Property<bool?>(\"ShowCreatedDate\")\n                        .HasColumnType(\"boolean\");\n\n                    b.Property<bool>(\"ShowHeading\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<bool>(\"ShowLastModified\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<bool?>(\"ShowLastModifiedBy\")\n                        .HasColumnType(\"boolean\");\n\n                    b.Property<bool?>(\"ShowLastModifiedDate\")\n                        .HasColumnType(\"boolean\");\n\n                    b.Property<bool>(\"ShowMenu\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<bool>(\"ShowPubDate\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<string>(\"Slug\")\n                        .IsRequired()\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"TemplateKey\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"ViewRoles\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"ParentId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_Page\", (string)null);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageResourceEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"Environment\")\n                        .IsRequired()\n                        .HasMaxLength(15)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"PageEntityId\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<int>(\"Sort\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<string>(\"Type\")\n                        .IsRequired()\n                        .HasMaxLength(10)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"Url\")\n                        .IsRequired()\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PageEntityId\");\n\n                    b.ToTable(\"cs_PageResource\", (string)null);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostCategory\", b =>\n                {\n                    b.Property<string>(\"Value\")\n                        .HasMaxLength(50)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"PostEntityId\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"TEXT\");\n\n                    b.HasKey(\"Value\", \"PostEntityId\");\n\n                    b.HasIndex(\"PostEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.HasIndex(\"Value\");\n\n                    b.ToTable(\"cs_PostCategory\", (string)null);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"Content\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"Email\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"Ip\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<bool>(\"IsAdmin\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<bool>(\"IsApproved\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<string>(\"PostEntityId\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"ProjectId\")\n                        .IsRequired()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<DateTime>(\"PubDate\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"UserAgent\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"Website\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"PostEntityId\");\n\n                    b.HasIndex(\"ProjectId\");\n\n                    b.ToTable(\"cs_PostComment\", (string)null);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .HasMaxLength(36)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"Author\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"AutoTeaser\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"BlogId\")\n                        .IsRequired()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"CategoriesCsv\")\n                        .HasMaxLength(500)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"Content\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"ContentType\")\n                        .ValueGeneratedOnAdd()\n                        .HasMaxLength(50)\n                        .HasColumnType(\"TEXT\")\n                        .HasDefaultValue(\"html\");\n\n                    b.Property<string>(\"CorrelationKey\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"CreatedByUser\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<DateTime>(\"CreatedUtc\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"DraftAuthor\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"DraftContent\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<DateTime?>(\"DraftPubDate\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"DraftSerializedModel\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"ImageUrl\")\n                        .HasMaxLength(250)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<bool>(\"IsFeatured\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<bool>(\"IsPublished\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<DateTime>(\"LastModified\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"LastModifiedByUser\")\n                        .HasMaxLength(100)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"MetaDescription\")\n                        .HasMaxLength(500)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"MetaHtml\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"MetaJson\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<DateTime?>(\"PubDate\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"Script\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"SerializedModel\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"Serializer\")\n                        .HasMaxLength(50)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<bool>(\"ShowComments\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<string>(\"Slug\")\n                        .IsRequired()\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<bool>(\"SuppressTeaser\")\n                        .HasColumnType(\"INTEGER\");\n\n                    b.Property<string>(\"TeaserOverride\")\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"TemplateKey\")\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"ThumbnailUrl\")\n                        .HasMaxLength(250)\n                        .HasColumnType(\"TEXT\");\n\n                    b.Property<string>(\"Title\")\n                        .IsRequired()\n                        .HasMaxLength(255)\n                        .HasColumnType(\"TEXT\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"BlogId\");\n\n                    b.HasIndex(\"CorrelationKey\");\n\n                    b.HasIndex(\"Slug\");\n\n                    b.ToTable(\"cs_Post\", (string)null);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageComment\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\", null)\n                        .WithMany(\"PageComments\")\n                        .HasForeignKey(\"PageEntityId\")\n                        .OnDelete(DeleteBehavior.Cascade);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageResourceEntity\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\", null)\n                        .WithMany(\"PageResources\")\n                        .HasForeignKey(\"PageEntityId\")\n                        .OnDelete(DeleteBehavior.Cascade);\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostComment\", b =>\n                {\n                    b.HasOne(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\", null)\n                        .WithMany(\"PostComments\")\n                        .HasForeignKey(\"PostEntityId\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PageEntity\", b =>\n                {\n                    b.Navigation(\"PageComments\");\n\n                    b.Navigation(\"PageResources\");\n                });\n\n            modelBuilder.Entity(\"cloudscribe.SimpleContent.Storage.EFCore.Models.PostEntity\", b =>\n                {\n                    b.Navigation(\"PostComments\");\n                });\n#pragma warning restore 612, 618\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.SQLite/README.md",
    "content": "﻿# cloudscribe.SimpleContent.Storage.EFCore.SQLite\n\n## Dev Notes\n\n### How to generate migrations\n\nopen a command/powershell window on the project folder\n\nSince this project is a netstandard20 class library it is not executable, therefore you have to pass in the --startup-project that is executable\n\ndotnet ef --startup-project ../sourceDev.WebApp migrations add  --context cloudscribe.SimpleContent.Storage.EFCore.SQLite.SimpleContentDbContext simplecontent-yyyymmdd\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.SQLite/SimpleContentDbContext.cs",
    "content": "﻿using cloudscribe.SimpleContent.Models;\nusing cloudscribe.SimpleContent.Storage.EFCore.Common;\nusing cloudscribe.SimpleContent.Storage.EFCore.Models;\nusing Microsoft.EntityFrameworkCore;\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.SQLite\n{\n    public class SimpleContentDbContext : SimpleContentDbContextBase, ISimpleContentDbContext\n    {\n        public SimpleContentDbContext(DbContextOptions<SimpleContentDbContext> options) : base(options)\n        {\n\n        }\n\n        protected SimpleContentDbContext() { }\n\n        protected override void OnModelCreating(ModelBuilder modelBuilder)\n        {\n            base.OnModelCreating(modelBuilder);\n            \n            modelBuilder.Entity<ProjectSettings>(entity =>\n            {\n                entity.ToTable(\"cs_ContentProject\");\n\n                entity.HasKey(p => p.Id);\n\n                entity.Property(p => p.Id).HasMaxLength(50);\n\n                entity.Property(p => p.Title).HasMaxLength(255);\n\n                entity.Property(p => p.Publisher).HasMaxLength(255);\n\n                entity.Property(p => p.PublisherLogoUrl).HasMaxLength(255);\n\n                entity.Property(p => p.CopyrightNotice).HasMaxLength(255);\n\n                entity.Property(p => p.ModerateComments).IsRequired();\n\n                entity.Property(p => p.CommentNotificationEmail).HasMaxLength(100);\n\n                entity.Property(p => p.BlogMenuLinksToNewestPost).IsRequired();\n\n                entity.Property(p => p.LocalMediaVirtualPath).HasMaxLength(255);\n\n                entity.Property(p => p.CdnUrl).HasMaxLength(255);\n\n                entity.Property(p => p.PubDateFormat).HasMaxLength(75);\n\n                entity.Property(p => p.IncludePubDateInPostUrls).IsRequired();\n\n                entity.Property(p => p.TimeZoneId).HasMaxLength(100);\n\n                entity.Property(p => p.RecaptchaPrivateKey).HasMaxLength(255);\n\n                entity.Property(p => p.RecaptchaPublicKey).HasMaxLength(255);\n\n                entity.Property(p => p.DefaultPageSlug).HasMaxLength(255);\n\n                entity.Property(p => p.UseDefaultPageAsRootNode).IsRequired();\n\n                entity.Property(p => p.ShowTitle).IsRequired();\n\n                entity.Property(p => p.AddBlogToPagesTree).IsRequired();\n\n                entity.Property(p => p.BlogPageText).HasMaxLength(255);\n\n                entity.Property(p => p.BlogPageNavComponentVisibility).HasMaxLength(255);\n\n                entity.Property(p => p.Image).HasMaxLength(255);\n\n                //entity.Property(p => p.UseMetaDescriptionInFeed).IsRequired();\n\n                entity.Property(p => p.LanguageCode).HasMaxLength(10);\n\n                entity.Property(p => p.ChannelCategoriesCsv).HasMaxLength(255);\n\n                entity.Property(p => p.ManagingEditorEmail).HasMaxLength(100);\n\n                entity.Property(p => p.ChannelRating).HasMaxLength(100);\n\n                entity.Property(p => p.WebmasterEmail).HasMaxLength(100);\n\n                entity.Property(p => p.RemoteFeedUrl).HasMaxLength(255);\n\n                entity.Property(p => p.RemoteFeedProcessorUseAgentFragment).HasMaxLength(255);\n\n                //entity.Property(p => p.EmailFromAddress).HasMaxLength(100);\n\n                //entity.Property(p => p.SmtpServer).HasMaxLength(100);\n\n                //entity.Property(p => p.SmtpPort);\n\n                //entity.Property(p => p.SmtpUser).HasMaxLength(500);\n\n                //entity.Property(p => p.SmtpPassword);\n\n                //entity.Property(p => p.SmtpPreferredEncoding).HasMaxLength(20);\n\n                //entity.Property(p => p.SmtpRequiresAuth).IsRequired();\n\n                //entity.Property(p => p.SmtpUseSsl).IsRequired();\n\n                entity.Property(p => p.PublisherLogoWidth).HasMaxLength(20);\n\n                entity.Property(p => p.PublisherLogoHeight).HasMaxLength(20);\n\n                entity.Property(p => p.PublisherEntityType).HasMaxLength(50);\n\n                entity.Property(p => p.DisqusShortName).HasMaxLength(100);\n\n                entity.Property(p => p.ShowRecentPostsOnDefaultPage).IsRequired();\n\n                entity.Property(p => p.ShowFeaturedPostsOnDefaultPage).IsRequired();\n\n                entity.Property(p => p.FacebookAppId).HasMaxLength(100);\n                entity.Property(p => p.SiteName).HasMaxLength(200);\n                entity.Property(p => p.TwitterCreator).HasMaxLength(100);\n                entity.Property(p => p.TwitterPublisher).HasMaxLength(100);\n\n                entity.Property(p => p.DefaultContentType)\n                .HasMaxLength(50)\n                .HasDefaultValue(\"html\")\n                ;\n\n                entity.Property(p => p.TeaserMode)\n                .HasDefaultValue(TeaserMode.Off);\n\n                entity.Property(p => p.TeaserTruncationMode)\n                .HasDefaultValue(TeaserTruncationMode.Word);\n\n                entity.Property(p => p.TeaserTruncationLength)\n                .HasDefaultValue(20);\n\n                entity.Property(p => p.DefaultFeedItems)\n                .HasDefaultValue(20);\n\n                entity.Property(p => p.MaxFeedItems)\n                .HasDefaultValue(1000);\n\n                entity.Property(p => p.AboutHeading).HasMaxLength(255);\n                entity.Property(p => p.ShowAboutBox).HasDefaultValue(true);\n                entity.Property(p => p.ShowRelatedPosts).HasDefaultValue(true);\n                entity.Property(p => p.ShowArchivedPosts).HasDefaultValue(true);\n                entity.Property(p => p.ShowBlogCategories).HasDefaultValue(true);\n            });\n\n            modelBuilder.Entity<PostEntity>(entity =>\n            {\n                entity.ToTable(\"cs_Post\");\n\n                entity.HasKey(p => p.Id);\n\n                entity.Property(p => p.Id).HasMaxLength(36);\n\n                entity.Property(p => p.CorrelationKey).HasMaxLength(255);\n\n                entity.HasIndex(p => p.CorrelationKey);\n\n                entity.Property(p => p.BlogId).HasMaxLength(50).IsRequired();\n\n                entity.HasIndex(p => p.BlogId);\n\n                entity.Property(p => p.Title).HasMaxLength(255).IsRequired();\n\n                entity.Property(p => p.Author).HasMaxLength(255);\n\n                entity.Property(p => p.Slug).HasMaxLength(255).IsRequired();\n\n                entity.HasIndex(p => p.Slug);\n\n                entity.Property(p => p.MetaDescription).HasMaxLength(500);\n\n                entity.Property(p => p.IsPublished).IsRequired();\n\n                entity.Ignore(p => p.Categories);\n\n                entity.Property(p => p.CategoriesCsv).HasMaxLength(500);\n\n                entity.Ignore(p => p.Comments);\n\n                entity.HasMany(p => p.PostComments)\n                    .WithOne();\n\n                entity.Property(p => p.ShowComments).IsRequired();\n\n                entity.Property(p => p.ImageUrl).HasMaxLength(250);\n\n                entity.Property(p => p.ThumbnailUrl).HasMaxLength(250);\n\n                entity.Property(p => p.IsFeatured).IsRequired();\n\n                entity.Property(p => p.ContentType)\n                .HasMaxLength(50)\n                .HasDefaultValue(\"html\");\n\n                entity.Property(p => p.TemplateKey)\n                  .HasMaxLength(255);\n\n                entity.Property(p => p.Serializer)\n                  .HasMaxLength(50);\n\n                entity.Property(p => p.CreatedByUser)\n                  .HasMaxLength(100);\n\n                entity.Property(p => p.LastModifiedByUser)\n                  .HasMaxLength(100);\n\n                entity.Property(p => p.DraftAuthor)\n                .HasMaxLength(255);\n\n\n            });\n\n            modelBuilder.Entity<PostComment>(entity =>\n            {\n                entity.ToTable(\"cs_PostComment\");\n\n                entity.HasKey(p => p.Id);\n                entity.Property(p => p.Id).HasMaxLength(36);\n\n                entity.Ignore(p => p.ContentId); //mapped from postid\n\n                entity.Property(p => p.PostEntityId).HasMaxLength(36);\n                entity.HasIndex(p => p.PostEntityId);\n\n                entity.Property(p => p.ProjectId).HasMaxLength(50).IsRequired();\n\n                entity.HasIndex(p => p.ProjectId);\n\n                entity.Property(p => p.Author).HasMaxLength(255);\n\n                entity.Property(p => p.Email).HasMaxLength(100);\n\n                entity.Property(p => p.Website).HasMaxLength(255);\n\n                entity.Property(p => p.Ip).HasMaxLength(100);\n\n                entity.Property(p => p.UserAgent).HasMaxLength(255);\n\n            });\n\n            modelBuilder.Entity<PostCategory>(entity =>\n            {\n                entity.ToTable(\"cs_PostCategory\");\n\n                entity.HasKey(p => new { p.Value, p.PostEntityId });\n\n                entity.Property(p => p.Value).HasMaxLength(50).IsRequired();\n\n                entity.HasIndex(p => p.Value);\n\n                entity.Property(p => p.PostEntityId).HasMaxLength(36).IsRequired();\n\n                entity.HasIndex(p => p.PostEntityId);\n\n                entity.Property(p => p.ProjectId).HasMaxLength(50).IsRequired();\n\n                entity.HasIndex(p => p.ProjectId);\n            });\n\n            modelBuilder.Entity<PageEntity>(entity =>\n            {\n                entity.ToTable(\"cs_Page\");\n\n                entity.HasKey(p => p.Id);\n                entity.Property(p => p.Id).HasMaxLength(36);\n\n                entity.Property(p => p.ProjectId).HasMaxLength(50).IsRequired();\n\n                entity.HasIndex(p => p.ProjectId);\n\n                entity.Property(p => p.Title).HasMaxLength(255).IsRequired();\n\n                entity.Property(p => p.CorrelationKey).HasMaxLength(255);\n\n                entity.HasIndex(p => p.CorrelationKey);\n\n                entity.Property(p => p.ParentId).HasMaxLength(36);\n\n                entity.HasIndex(p => p.ParentId);\n\n                entity.Property(p => p.ParentSlug).HasMaxLength(255);\n\n                entity.Property(p => p.Author).HasMaxLength(255);\n\n                entity.Property(p => p.Slug).HasMaxLength(255).IsRequired();\n\n                entity.Property(p => p.ExternalUrl).HasMaxLength(255);\n\n                entity.Property(p => p.MetaDescription).HasMaxLength(500);\n\n                entity.Property(p => p.IsPublished).IsRequired();\n\n                entity.Property(p => p.MenuOnly).IsRequired();\n\n                entity.Property(p => p.ShowMenu).IsRequired();\n\n\n                entity.Property(p => p.ShowHeading).IsRequired();\n\n                entity.Property(p => p.ShowPubDate).IsRequired();\n\n                entity.Property(p => p.ShowLastModified).IsRequired();\n\n                entity.Property(p => p.ShowCategories).IsRequired();\n\n                entity.Property(p => p.ShowComments).IsRequired();\n\n                entity.Ignore(p => p.Categories);\n\n                entity.Property(p => p.CategoriesCsv).HasMaxLength(500);\n\n                entity.Property(p => p.MenuFilters).HasMaxLength(500);\n\n                entity.Ignore(p => p.Comments);\n\n                entity.HasMany(p => p.PageComments)\n                    .WithOne().OnDelete(DeleteBehavior.Cascade);\n\n                // a shadow property to persist the categories/tags as a csv\n                //entity.Property<string>(\"CategoryCsv\");\n                entity.Ignore(p => p.Resources);\n\n                entity.HasMany(p => p.PageResources)\n                    .WithOne().OnDelete(DeleteBehavior.Cascade);\n\n                entity.Property(p => p.DisableEditor)\n                  .IsRequired();\n\n                entity.Property(p => p.ContentType)\n               .HasMaxLength(50)\n               .HasDefaultValue(\"html\");\n\n                entity.Property(p => p.TemplateKey)\n                  .HasMaxLength(255);\n\n                entity.Property(p => p.Serializer)\n                  .HasMaxLength(50);\n\n                entity.Property(p => p.CreatedByUser)\n                  .HasMaxLength(100);\n\n                entity.Property(p => p.LastModifiedByUser)\n                  .HasMaxLength(100);\n\n                entity.Property(p => p.DraftAuthor)\n                .HasMaxLength(255);\n\n                entity.Property(p => p.ShowCreatedBy).HasColumnType(\"boolean\");\n                entity.Property(p => p.ShowCreatedDate).HasColumnType(\"boolean\");\n                entity.Property(p => p.ShowLastModifiedBy).HasColumnType(\"boolean\");\n                entity.Property(p => p.ShowLastModifiedDate).HasColumnType(\"boolean\");\n            });\n\n            modelBuilder.Entity<PageComment>(entity =>\n            {\n                entity.ToTable(\"cs_PageComment\");\n\n                entity.HasKey(p => p.Id);\n                entity.Property(p => p.Id).HasMaxLength(36);\n\n                entity.Ignore(p => p.ContentId); //mapped from postid\n\n                entity.Property(p => p.PageEntityId).HasMaxLength(36);\n\n                entity.HasIndex(p => p.PageEntityId);\n\n                entity.Property(p => p.ProjectId).HasMaxLength(50).IsRequired();\n\n                entity.HasIndex(p => p.ProjectId);\n\n                entity.Property(p => p.Author).HasMaxLength(255);\n\n                entity.Property(p => p.Email).HasMaxLength(100);\n\n                entity.Property(p => p.Website).HasMaxLength(255);\n\n                entity.Property(p => p.Ip).HasMaxLength(100);\n\n                entity.Property(p => p.UserAgent).HasMaxLength(255);\n\n            });\n\n            modelBuilder.Entity<PageCategory>(entity =>\n            {\n                entity.ToTable(\"cs_PageCategory\");\n\n                entity.HasKey(p => new { p.Value, p.PageEntityId });\n\n                entity.Property(p => p.Value).HasMaxLength(50).IsRequired();\n\n                entity.HasIndex(p => p.Value);\n\n                entity.Property(p => p.PageEntityId).HasMaxLength(36).IsRequired();\n\n                entity.HasIndex(p => p.PageEntityId);\n\n                entity.Property(p => p.ProjectId).HasMaxLength(50).IsRequired();\n\n                entity.HasIndex(p => p.ProjectId);\n            });\n\n            modelBuilder.Entity<PageResourceEntity>(entity =>\n            {\n                entity.ToTable(\"cs_PageResource\");\n\n                entity.HasKey(p => p.Id);\n                entity.Property(p => p.Id).HasMaxLength(36);\n\n                entity.Ignore(p => p.ContentId); //mapped from pageEntityid\n\n                entity.Property(p => p.PageEntityId).HasMaxLength(36);\n\n                entity.HasIndex(p => p.PageEntityId);\n\n                entity.Property(p => p.Environment).HasMaxLength(15).IsRequired();\n\n\n                entity.Property(p => p.Sort).IsRequired();\n\n                entity.Property(p => p.Type).HasMaxLength(10).IsRequired();\n\n                entity.Property(p => p.Url).HasMaxLength(255).IsRequired();\n\n\n            });\n\n            modelBuilder.Entity<ContentHistory>(entity =>\n            {\n                entity.ToTable(\"cs_ContentHistory\");\n\n                entity.HasKey(p => p.Id);\n\n                entity.Property(p => p.Id).HasMaxLength(36);\n\n                entity.Property(p => p.ProjectId).HasMaxLength(50);\n\n                entity.Property(p => p.CorrelationKey).HasMaxLength(255);\n\n                entity.HasIndex(p => p.CorrelationKey);\n\n                entity.Property(p => p.ContentId)\n                .HasMaxLength(36)\n                .IsRequired();\n\n                entity.HasIndex(p => p.ContentId);\n\n                entity.Property(p => p.Title)\n                .HasMaxLength(255)\n                .IsRequired();\n\n                entity.HasIndex(p => p.Title);\n\n                entity.Property(p => p.Slug)\n                .HasMaxLength(255);\n\n                entity.Property(p => p.Author)\n                .HasMaxLength(255);\n\n                entity.Property(p => p.IsPublished)\n                .IsRequired();\n\n                entity.Property(p => p.ContentType)\n                   .HasMaxLength(50)\n                   .HasDefaultValue(\"html\");\n\n                entity.Property(p => p.CreatedByUser)\n                  .HasMaxLength(100);\n\n                entity.HasIndex(p => p.CreatedByUser);\n\n                entity.Property(p => p.LastModifiedByUser)\n                  .HasMaxLength(100);\n\n                entity.HasIndex(p => p.LastModifiedByUser);\n\n                entity.Property(p => p.DraftAuthor)\n                .HasMaxLength(255);\n\n                entity.Property(p => p.ContentSource)\n                .HasMaxLength(50)\n                .IsRequired();\n\n                entity.HasIndex(p => p.ContentSource);\n\n                entity.Property(p => p.DraftAuthor)\n                .HasMaxLength(255);\n\n                entity.Property(p => p.ArchivedBy)\n                .HasMaxLength(255);\n\n                entity.Property(p => p.ParentSlug).HasMaxLength(255);\n                entity.Property(p => p.ParentId).HasMaxLength(255);\n                entity.Property(p => p.TemplateKey).HasMaxLength(255);\n                entity.Property(p => p.Serializer).HasMaxLength(50);\n\n\n            });\n\n\n        }\n\n    }\n}\n\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.SQLite/SimpleContentDbContextFactory.cs",
    "content": "﻿using cloudscribe.SimpleContent.Storage.EFCore.Common;\nusing Microsoft.EntityFrameworkCore;\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.SQLite\n{\n    public class SimpleContentDbContextFactory : ISimpleContentDbContextFactory\n    {\n        public SimpleContentDbContextFactory(DbContextOptions<SimpleContentDbContext> options)\n        {\n            _options = options;\n        }\n\n        private readonly DbContextOptions<SimpleContentDbContext> _options;\n\n        public ISimpleContentDbContext CreateContext()\n        {\n            return new SimpleContentDbContext(_options);\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.SQLite/StartupExtensions.cs",
    "content": "﻿using cloudscribe.SimpleContent.Models;\nusing cloudscribe.SimpleContent.Storage.EFCore.Common;\nusing cloudscribe.SimpleContent.Storage.EFCore.SQLite;\nusing Microsoft.EntityFrameworkCore;\n\nnamespace Microsoft.Extensions.DependencyInjection\n{\n    public static class StartupExtensions\n    {\n        public static IServiceCollection AddCloudscribeSimpleContentEFStorageSQLite(\n            this IServiceCollection services,\n            string connectionString\n            )\n        {\n            services.AddDbContext<SimpleContentDbContext>(options =>\n                    options.UseSqlite(connectionString),\n                    optionsLifetime: ServiceLifetime.Singleton\n                    );\n\n            services.AddSingleton<ISimpleContentDbContextFactory, SimpleContentDbContextFactory>();\n\n            services.AddScoped<ISimpleContentDbContext, SimpleContentDbContext>();\n\n            services.AddCloudscribeSimpleContentEFStorageCommon();\n            services.AddScoped<IStorageInfo, StorageInfo>();\n\n            return services;\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.SQLite/StorageInfo.cs",
    "content": "﻿using cloudscribe.SimpleContent.Models;\n\nnamespace cloudscribe.SimpleContent.Storage.EFCore.SQLite\n{\n    public class StorageInfo : IStorageInfo\n    {\n        public string StoragePlatform { get { return \"Entity Framework with SQLite\"; } }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.EFCore.SQLite/cloudscribe.SimpleContent.Storage.EFCore.SQLite.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <Description>SQLite Entity Framework Core implementation of cloudscribe SimpleContent commands and queries</Description>\n    <Version>10.1.0</Version>\n    <TargetFramework>net10.0</TargetFramework>\n    <Authors>Joe Audette</Authors>\n    <PackageTags>cloudscribe;commands;queries;ef</PackageTags>\n    <PackageIcon>icon.png</PackageIcon>\n    <PackageProjectUrl>https://github.com/cloudscribe/cloudscribe.SimpleContent</PackageProjectUrl>\n    <PackageLicenseExpression>Apache-2.0</PackageLicenseExpression>\n    <RepositoryUrl>https://github.com/cloudscribe/cloudscribe.SimpleContent.git</RepositoryUrl>\n    <RepositoryType>git</RepositoryType>\n    <PackageReadmeFile>README.md</PackageReadmeFile>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <None Include=\"icon.png\" Pack=\"true\" PackagePath=\"\\\"/>\n  </ItemGroup>\n\n  <ItemGroup>\n    <ProjectReference Include=\"..\\cloudscribe.SimpleContent.Models\\cloudscribe.SimpleContent.Models.csproj\" />\n    <ProjectReference Include=\"..\\cloudscribe.SimpleContent.Storage.EFCore.Common\\cloudscribe.SimpleContent.Storage.EFCore.Common.csproj\" />\n\n  </ItemGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"Microsoft.EntityFrameworkCore\" Version=\"10.0.0\" />\n    <PackageReference Include=\"Microsoft.EntityFrameworkCore.Design\" Version=\"10.0.0\" />\n    <PackageReference Include=\"Microsoft.EntityFrameworkCore.Sqlite\" Version=\"10.0.0\" />\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"README.md\" Pack=\"true\" PackagePath=\"/\" />\n  </ItemGroup>\n</Project>\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.NoDb/ConfigProjectQueries.cs",
    "content": "﻿// Copyright (c) Source Tree Solutions, LLC. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.\n// Author:                  Joe Audette\n// Created:                 2016-04-24\n// Last Modified:           2016-08-09\n// \n\nusing cloudscribe.SimpleContent.Models;\nusing Microsoft.Extensions.Options;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace cloudscribe.SimpleContent.Storage.NoDb\n{\n    /// <summary>\n    /// this one uses config based list of projects rather than actually using NoDb\n    /// this was implemented first and is suitable for use with SimpleAuth which is also config based\n    /// it is read only, settings must be updated manually in the config files\n    /// </summary>\n    public class ConfigProjectQueries : IProjectQueries\n    {\n        public ConfigProjectQueries(\n            IOptions<List<ProjectSettings>> projectListAccessor\n            )\n        {\n            allProjects = projectListAccessor.Value;\n        }\n\n        private List<ProjectSettings> allProjects;\n\n        public Task<IProjectSettings> GetProjectSettings(\n            string projectId,\n            CancellationToken cancellationToken\n            )\n        {\n            cancellationToken.ThrowIfCancellationRequested();\n            var result = allProjects.Where(b => b.Id == projectId).FirstOrDefault();\n            return Task.FromResult((IProjectSettings)result);\n        }\n\n        public async Task<List<IProjectSettings>> GetProjectSettingsByUser(\n            string userName,\n            CancellationToken cancellationToken\n            )\n        {\n            cancellationToken.ThrowIfCancellationRequested();\n            var result = new List<IProjectSettings>();\n            var defaultProject = await GetProjectSettings(\"default\", cancellationToken).ConfigureAwait(false);\n            if (defaultProject != null)\n            {\n                result.Add(defaultProject);\n            }\n\n            return result;\n        }\n\n\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.NoDb/ContentHistoryCommands.cs",
    "content": "﻿// Copyright (c) Source Tree Solutions, LLC. All rights reserved.\n// Author:                  Joe Audette\n// Created:\t\t\t\t\t2018-07-02\n// Last Modified:\t\t\t2018-07-06\n// \n\nusing cloudscribe.SimpleContent.Models;\nusing NoDb;\nusing System;\nusing System.Linq;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace cloudscribe.SimpleContent.Storage.NoDb\n{\n    public class ContentHistoryCommands : IContentHistoryCommands, IContentHistoryCommandsSingleton\n    {\n        public ContentHistoryCommands(\n            IBasicCommands<ContentHistory> commands,\n            IBasicQueries<ContentHistory> queries\n            )\n        {\n            _commands = commands;\n            _queries = queries;\n        }\n\n        private readonly IBasicCommands<ContentHistory> _commands;\n        private readonly IBasicQueries<ContentHistory> _queries;\n\n        public async Task Create(\n            string projectId,\n            ContentHistory contentHistory,\n            CancellationToken cancellationToken = default(CancellationToken)\n            )\n        {\n            if(string.IsNullOrWhiteSpace(contentHistory.ProjectId))\n            {\n                contentHistory.ProjectId = projectId;\n            }\n            await _commands.CreateAsync(\n                projectId,\n                contentHistory.Id.ToString(),\n                contentHistory,\n                cancellationToken).ConfigureAwait(false);\n        }\n\n        public async Task Delete(\n            string projectId,\n            Guid id,\n            CancellationToken cancellationToken = default(CancellationToken)\n            )\n        {\n            await _commands.DeleteAsync(projectId, id.ToString(), cancellationToken).ConfigureAwait(false);\n        }\n\n        public async Task DeleteByContent(\n            string projectId,\n            string contentId,\n            CancellationToken cancellationToken = default(CancellationToken)\n            )\n        {\n            var items = await _queries.GetAllAsync(projectId).ConfigureAwait(false);\n            var query = items.ToList().AsQueryable();\n            var filtered = query.Where(x => x.ContentId == contentId && x.ProjectId == projectId);\n\n            foreach (var item in filtered)\n            {\n                await _commands.DeleteAsync(\n                    projectId,\n                    item.Id.ToString(),\n                    cancellationToken).ConfigureAwait(false);\n            }\n        }\n\n        public async Task DeleteByContent(\n            string projectId,\n            string contentId,\n            DateTime cutoffDate,\n            CancellationToken cancellationToken = default(CancellationToken)\n            )\n        {\n            var items = await _queries.GetAllAsync(projectId).ConfigureAwait(false);\n            var query = items.ToList().AsQueryable();\n            var filtered = query.Where(x => x.ContentId == contentId && x.ProjectId == projectId && x.ArchivedUtc < cutoffDate);\n\n            foreach (var item in filtered)\n            {\n                await _commands.DeleteAsync(\n                    projectId,\n                    item.Id.ToString(),\n                    cancellationToken).ConfigureAwait(false);\n            }\n        }\n\n        public async Task DeleteDraftHistory(\n            string projectId,\n            string contentId,\n            CancellationToken cancellationToken = default(CancellationToken)\n            )\n        {\n            var items = await _queries.GetAllAsync(projectId).ConfigureAwait(false);\n            var query = items.ToList().AsQueryable();\n            var filtered = query.Where(x => x.ContentId == contentId && x.IsDraftHx == true && x.ProjectId == projectId);\n\n            foreach (var item in filtered)\n            {\n                await _commands.DeleteAsync(\n                    projectId,\n                    item.Id.ToString(),\n                    cancellationToken).ConfigureAwait(false);\n            }\n        }\n\n        public async Task DeleteByProject(\n            string projectId,\n            CancellationToken cancellationToken = default(CancellationToken)\n            )\n        {\n            var items = await _queries.GetAllAsync(projectId).ConfigureAwait(false);\n            var query = items.ToList().AsQueryable();\n            var filtered = query.Where(x => x.ProjectId == projectId);\n\n            foreach (var item in filtered)\n            {\n                await _commands.DeleteAsync(\n                    projectId,\n                    item.Id.ToString(),\n                    cancellationToken).ConfigureAwait(false);\n            }\n        }\n\n        public async Task DeleteOlderThan(\n            string projectId,\n            DateTime cutoffDate,\n            CancellationToken cancellationToken = default(CancellationToken)\n            )\n        {\n            var items = await _queries.GetAllAsync(projectId).ConfigureAwait(false);\n            var query = items.ToList().AsQueryable();\n            var filtered = query.Where(x => x.ProjectId == projectId && x.ArchivedUtc < cutoffDate);\n\n            foreach (var item in filtered)\n            {\n                await _commands.DeleteAsync(\n                    projectId,\n                    item.Id.ToString(),\n                    cancellationToken).ConfigureAwait(false);\n            }\n        }\n\n\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.NoDb/ContentHistoryQueries.cs",
    "content": "﻿// Copyright (c) Source Tree Solutions, LLC. All rights reserved.\n// Author:                  Joe Audette\n// Created:\t\t\t\t\t2018-07-02\n// Last Modified:\t\t\t2018-07-02\n// \n\nusing cloudscribe.Pagination.Models;\nusing cloudscribe.SimpleContent.Models;\nusing NoDb;\nusing System;\nusing System.Linq;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace cloudscribe.SimpleContent.Storage.NoDb\n{\n    public class ContentHistoryQueries : IContentHistoryQueries, IContentHistoryQueriesSingleton\n    {\n        public ContentHistoryQueries(\n            IBasicQueries<ContentHistory> queries\n            )\n        {\n            _queries = queries;\n        }\n\n        private readonly IBasicQueries<ContentHistory> _queries;\n\n        public async Task<ContentHistory> Fetch(\n            string projectId,\n            Guid id,\n            CancellationToken cancellationToken = default(CancellationToken)\n            )\n        {\n            cancellationToken.ThrowIfCancellationRequested();\n\n            return await _queries.FetchAsync(\n                projectId,\n                id.ToString(),\n                cancellationToken).ConfigureAwait(false);\n        }\n\n        public async Task<PagedResult<ContentHistory>> GetByContent(\n            string projectId,\n            string contentId,\n            int pageNumber = 1,\n            int pageSize = 10,\n            CancellationToken cancellationToken = default(CancellationToken)\n            )\n        {\n            cancellationToken.ThrowIfCancellationRequested();\n\n            int offset = (pageSize * pageNumber) - pageSize;\n\n            var all = await _queries.GetAllAsync(projectId, cancellationToken).ConfigureAwait(false);\n            var list = all.ToList().AsQueryable();\n\n            var query = list\n                .Where(x =>\n                      x.ProjectId == projectId\n                      && x.ContentId == contentId\n                      );\n\n            var count = query.Count();\n\n            query = query\n                .OrderByDescending(x => x.ArchivedUtc)\n                    .Select(p => p)\n                    .Skip(offset)\n                    .Take(pageSize);\n\n\n            var result = new PagedResult<ContentHistory>\n            {\n                PageNumber = pageNumber,\n                PageSize = pageSize,\n                Data = query.ToList(),\n                TotalItems = count\n            };\n\n            return result;\n\n        }\n\n\n        public async Task<PagedResult<ContentHistory>> GetList(\n            string projectId,\n            string contentSource = null,\n            string editorQuery = null,\n            int pageNumber = 1,\n            int pageSize = 10,\n            int sortMode = 0, \n            CancellationToken cancellationToken = default(CancellationToken)\n            )\n        {\n            cancellationToken.ThrowIfCancellationRequested();\n\n            int offset = (pageSize * pageNumber) - pageSize;\n\n            var all = await _queries.GetAllAsync(projectId, cancellationToken).ConfigureAwait(false);\n            var list = all.ToList().AsQueryable();\n            \n            var query = list\n                .Where(x => \n                      x.ProjectId == projectId \n                      && (contentSource == null || x.ContentSource == contentSource)\n                      && (editorQuery == null || x.CreatedByUser == editorQuery || x.LastModifiedByUser == editorQuery)\n                      );\n\n            var count = query.Count();\n\n            query = query\n                .OrderByDescending(x => x.ArchivedUtc)\n                .ThenBy(x => x.ContentSource)\n                .ThenBy(x => x.Title)\n                    .Select(p => p)\n                    .Skip(offset)\n                    .Take(pageSize);\n\n\n            var result = new PagedResult<ContentHistory>\n            {\n                PageNumber = pageNumber,\n                PageSize = pageSize,\n                Data = query.ToList(),\n                TotalItems = count\n            };\n\n            return result;\n        }\n\n\n\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.NoDb/KeyGenerators/DefaultKeyGenerator.cs",
    "content": "﻿using cloudscribe.SimpleContent.Models;\nusing System;\nusing System.Collections.Generic;\nusing System.Text;\n\nnamespace cloudscribe.SimpleContent.Storage.NoDb\n{\n    public class DefaultKeyGenerator : GuidKeyGenerator, IKeyGenerator\n    {\n        public override string GenerateKey(IContentItem item)\n        {\n            if(!string.IsNullOrWhiteSpace(item.Slug))\n            {\n                return item.Slug;\n            }\n\n            return base.GenerateKey(item);\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.NoDb/KeyGenerators/GuidKeyGenerator.cs",
    "content": "﻿using cloudscribe.SimpleContent.Models;\nusing System;\nusing System.Collections.Generic;\nusing System.Text;\n\nnamespace cloudscribe.SimpleContent.Storage.NoDb\n{\n    public class GuidKeyGenerator : IKeyGenerator\n    {\n        public virtual string GenerateKey(IContentItem item)\n        {\n            if(!string.IsNullOrEmpty(item.Id) && item.Id.Length == 36)\n            {\n                return item.Id;\n            }\n\n            return Guid.NewGuid().ToString();\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.NoDb/KeyGenerators/IKeyGenerator.cs",
    "content": "﻿using cloudscribe.SimpleContent.Models;\n\nnamespace cloudscribe.SimpleContent.Storage.NoDb\n{\n    public interface IKeyGenerator\n    {\n        string GenerateKey(IContentItem item);\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.NoDb/PageCommands.cs",
    "content": "﻿// Copyright (c) Source Tree Solutions, LLC. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.\n// Author:                  Joe Audette\n// Created:                 2016-04-24\n// Last Modified:           2018-07-04\n//\n\nusing cloudscribe.SimpleContent.Models;\nusing NoDb;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace cloudscribe.SimpleContent.Storage.NoDb\n{\n    public class PageCommands : IPageCommands, IPageCommandsSingleton\n    {\n        public PageCommands(\n            IBasicCommands<Page> pageCommands,\n            IBasicQueries<Page> pageQueries,\n            IKeyGenerator keyGenerator\n            )\n        {\n            _commands = pageCommands;\n            _query = pageQueries;\n            _keyGenerator = keyGenerator;\n\n        }\n\n        private IBasicCommands<Page> _commands;\n        private IBasicQueries<Page> _query;\n        private IKeyGenerator _keyGenerator;\n\n        public async Task Create(\n            string projectId,\n            IPage page,\n            CancellationToken cancellationToken = default(CancellationToken)\n            )\n        {\n            var p = Page.FromIPage(page);\n            // metaweblog sets the id, don't change it if it exists\n            if (string.IsNullOrWhiteSpace(p.Id))\n            {\n                p.Id = _keyGenerator.GenerateKey(p);\n            }\n\n            p.LastModified = DateTime.UtcNow;\n\n            await _commands.CreateAsync(projectId, p.Id, p).ConfigureAwait(false);\n\n        }\n\n        public async Task Update(\n            string projectId,\n            IPage page,\n            CancellationToken cancellationToken = default(CancellationToken)\n            )\n        {\n            var p = Page.FromIPage(page);\n            p.LastModified = DateTime.UtcNow;\n            p.Resources = page.Resources;\n\n            await _commands.UpdateAsync(projectId, p.Id, p).ConfigureAwait(false);\n\n        }\n\n        public async Task Delete(\n            string projectId,\n            string pageId,\n            CancellationToken cancellationToken = default(CancellationToken)\n            )\n        {\n            var page = await _query.FetchAsync(projectId, pageId, CancellationToken.None);\n            if (page != null)\n            {\n                var pages = await GetAllPages(projectId, CancellationToken.None).ConfigureAwait(false);\n                await _commands.DeleteAsync(projectId, pageId).ConfigureAwait(false);\n                pages.Remove(page);\n            }\n        }\n\n        private async Task<List<Page>> GetAllPages(\n            string projectId,\n            CancellationToken cancellationToken)\n        {\n            var l = await _query.GetAllAsync(projectId, cancellationToken).ConfigureAwait(false);\n            var list = l.ToList();\n            return list;\n        }\n\n        public async Task<string> CloneToNewProject(\n            string sourceProjectId,\n            string targetProjectId,\n            string pageId,\n            CancellationToken cancellationToken = default(CancellationToken)\n            )\n        {\n            var page = await _query.FetchAsync(sourceProjectId, pageId, CancellationToken.None);\n            if (page == null) throw new InvalidOperationException(\"page not found\");\n\n            var p = Page.FromIPage(page);\n\n            p.LastModified = DateTime.UtcNow;\n            p.ProjectId = targetProjectId;\n            p.Id = _keyGenerator.GenerateKey(p);\n            p.Resources = page.Resources;\n\n            await _commands.CreateAsync(targetProjectId, p.Id, p).ConfigureAwait(false);\n\n            return p.Id;\n        }\n\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.NoDb/PageCompositeSerializer.cs",
    "content": "﻿// Copyright (c) Source Tree Solutions, LLC. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.\n// Author:                  Joe Audette\n// Created:                 2017-11-21\n// Last Modified:           2017-11-21\n//\n\nusing cloudscribe.SimpleContent.Models;\nusing NoDb;\n\nnamespace cloudscribe.SimpleContent.Storage.NoDb\n{\n    public class PageCompositeSerializer : IStringSerializer<Page>\n    {\n        public PageCompositeSerializer(\n            PageJsonSerializer jsonSerializer,\n            PageMarkdownSerializer markdownSerializer\n            )\n        {\n            _jsonSerializer = jsonSerializer;\n            _markdownSerializer = markdownSerializer;\n        }\n\n        private PageJsonSerializer _jsonSerializer;\n        private PageMarkdownSerializer _markdownSerializer;\n\n        public string ExpectedFileExtension { get; } = \"\";\n\n        public string Serialize(Page page)\n        {\n            if (page.ContentType == \"markdown\")\n            {\n                return _markdownSerializer.Serialize(page);\n            }\n\n            return _jsonSerializer.Serialize(page);\n        }\n\n        public Page Deserialize(string input, string key)\n        {\n            if (input.StartsWith(\"---\"))\n            {\n                return _markdownSerializer.Deserialize(input, key);\n            }\n\n            return _jsonSerializer.Deserialize(input, key);\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.NoDb/PageJsonSerializer.cs",
    "content": "﻿using cloudscribe.SimpleContent.Models;\nusing NoDb;\n\nnamespace cloudscribe.SimpleContent.Storage.NoDb\n{\n    public class PageJsonSerializer : StringSerializer<Page>\n    {\n\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.NoDb/PageMarkdownSerializer.cs",
    "content": "﻿// Copyright (c) Source Tree Solutions, LLC. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.\n// Author:                  Joe Audette\n// Created:                 2017-11-21\n// Last Modified:           2017-11-21\n//\n\nusing cloudscribe.SimpleContent.Models;\nusing Microsoft.Extensions.Logging;\nusing NoDb;\nusing System.IO;\nusing System.Text;\nusing YamlDotNet.Core;\nusing YamlDotNet.Serialization;\nusing YamlDotNet.Serialization.NamingConventions;\n\nnamespace cloudscribe.SimpleContent.Storage.NoDb\n{\n    public class PageMarkdownSerializer : IStringSerializer<Page>\n    {\n        public PageMarkdownSerializer(\n            ILogger<PageMarkdownSerializer> logger\n            )\n        {\n            _log = logger;\n        }\n\n        private ILogger _log;\n\n        public string ExpectedFileExtension { get; } = \".md\";\n\n        public string Serialize(Page page)\n        {\n            var yamlPage = new YamlPage();\n            page.CopyTo(yamlPage);\n            //foreach (var c in page.Comments)\n            //{\n            //    if (c is Comment comment)\n            //    {\n            //        yamlPage.TheComments.Add(comment);\n            //    }\n            //}\n\n            var serializer = new SerializerBuilder()\n                .WithNamingConvention(new CamelCaseNamingConvention())\n                .Build();\n            var yaml = serializer.Serialize(yamlPage);\n\n            var sb = new StringBuilder();\n            sb.Append(\"---\\r\\n\");\n            sb.Append(yaml);\n            sb.Append(\"---\\r\\n\");\n            sb.Append(page.Content);\n\n            return sb.ToString();\n\n        }\n\n        public Page Deserialize(string markdownWithYaml, string key)\n        {\n            var yamlHelper = new YamlHelper();\n            string extractedYaml = null;\n            var match = yamlHelper.MatchFrontMatter(markdownWithYaml);\n\n            var page = new Page();\n            if (match.Success)\n            {\n                extractedYaml = match.Value;\n\n                var yaml = yamlHelper.RemoveFrontMatterDelimiters(extractedYaml).Trim();\n                var input = new StringReader(yaml);\n\n                var deserializer = new DeserializerBuilder()\n                .WithNamingConvention(new CamelCaseNamingConvention())\n                .Build();\n\n                try\n                {\n                    var yamlPage = deserializer.Deserialize<YamlPage>(input);\n                    yamlPage.CopyTo(page);\n                    \n                    //page.Comments.AddRange(yamlPost.TheComments);\n                    page.Content = markdownWithYaml.Replace(extractedYaml, string.Empty).TrimStart('\\r', '\\n');\n                }\n                catch (YamlException ex)\n                {\n                    _log.LogError($\"failed to deserialize page with key {key}, error message {ex.Message} stacktrace {ex.StackTrace}\");\n                    return null;\n                }\n                \n            }\n            else\n            {\n                _log.LogError($\"failed to deserialize yamlBlock from page with key {key}\");\n            }\n\n            return page;\n\n        }\n\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.NoDb/PageQueries.cs",
    "content": "﻿// Copyright (c) Source Tree Solutions, LLC. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.\n// Author:                  Joe Audette\n// Created:                 2016-04-24\n// Last Modified:           2018-07-27\n//\n\n\nusing cloudscribe.SimpleContent.Models;\nusing NoDb;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace cloudscribe.SimpleContent.Storage.NoDb\n{\n    public class PageQueries : IPageQueries, IPageQueriesSingleton\n    {\n        public PageQueries(\n            IBasicQueries<Page> pageQueries\n            )\n        {\n            _query = pageQueries;\n        }\n\n        private IBasicQueries<Page> _query;\n\n\n        public async Task<List<IPage>> GetAllPages(\n            string projectId,\n            CancellationToken cancellationToken = default(CancellationToken)\n            )\n        {\n            cancellationToken.ThrowIfCancellationRequested();\n\n            var l = await _query.GetAllAsync(projectId, cancellationToken).ConfigureAwait(false);\n            var list = l.ToList();\n            var result = new List<IPage>();\n            result.AddRange(list);\n\n            return result;\n        }\n\n        public async Task<List<IPage>> GetPagesReadyForPublish(\n            string projectId,\n            CancellationToken cancellationToken = default(CancellationToken)\n            )\n        {\n            cancellationToken.ThrowIfCancellationRequested();\n            var allPages = await GetAllPages(projectId, cancellationToken).ConfigureAwait(false);\n            var currentTime = DateTime.UtcNow;\n            return allPages.Where(x => x.DraftPubDate != null && x.DraftPubDate < currentTime).ToList();\n\n        }\n\n\n        public async Task<IPage> GetPage(\n            string projectId,\n            string pageId,\n            CancellationToken cancellationToken = default(CancellationToken)\n            )\n        {\n            cancellationToken.ThrowIfCancellationRequested();\n\n            var allPages = await GetAllPages(projectId, cancellationToken).ConfigureAwait(false);\n            return allPages.FirstOrDefault(p => p.Id == pageId);\n        }\n\n        public async Task<List<IPage>> GetRootPages(\n            string projectId,\n            CancellationToken cancellationToken = default(CancellationToken)\n            )\n        {\n            cancellationToken.ThrowIfCancellationRequested();\n\n            var allPages = await GetAllPages(projectId, cancellationToken).ConfigureAwait(false);\n            return allPages.Where(p => p.ParentId == \"0\")\n                .OrderBy(p => p.PageOrder).ToList();\n        }\n\n        public async Task<List<IPage>> GetChildPages(\n            string projectId,\n            string pageId,\n            CancellationToken cancellationToken = default(CancellationToken)\n            )\n        {\n            cancellationToken.ThrowIfCancellationRequested();\n\n            var allPages = await GetAllPages(projectId, cancellationToken).ConfigureAwait(false);\n            return allPages.Where(p => p.ParentId == pageId)\n                .OrderBy(p => p.PageOrder).ToList();\n        }\n\n        public async Task<IPage> GetPageBySlug(\n            string projectId,\n            string slug,\n            CancellationToken cancellationToken = default(CancellationToken)\n            )\n        {\n            cancellationToken.ThrowIfCancellationRequested();\n\n            var allPages = await GetAllPages(projectId, cancellationToken).ConfigureAwait(false);\n            return allPages.FirstOrDefault(p => p.Slug == slug);\n        }\n\n        public async Task<IPage> GetPageByCorrelationKey(\n            string projectId,\n            string correlationKey,\n            CancellationToken cancellationToken = default(CancellationToken)\n            )\n        {\n            cancellationToken.ThrowIfCancellationRequested();\n\n            var allPages = await GetAllPages(projectId, cancellationToken).ConfigureAwait(false);\n            return allPages.FirstOrDefault(p => p.CorrelationKey == correlationKey);\n        }\n\n        public async Task<bool> SlugIsAvailable(\n            string projectId,\n            string slug,\n            CancellationToken cancellationToken = default(CancellationToken)\n            )\n        {\n            cancellationToken.ThrowIfCancellationRequested();\n\n            var allPages = await GetAllPages(projectId, cancellationToken).ConfigureAwait(false);\n\n            var isInUse = allPages.Any(\n                p => string.Equals(p.Slug, slug, StringComparison.OrdinalIgnoreCase));\n\n            return !isInUse;\n        }\n\n        public async Task<int> GetChildPageCount(\n            string projectId,\n            string pageId,\n            bool includeUnpublished,\n            CancellationToken cancellationToken = default(CancellationToken)\n            )\n        {\n            cancellationToken.ThrowIfCancellationRequested();\n\n            var list = await GetAllPages(projectId, cancellationToken).ConfigureAwait(false);\n\n            list = list.Where(p =>\n            p.ParentId == pageId\n                     && (includeUnpublished || (p.IsPublished && p.PubDate <= DateTime.UtcNow))\n                      ).ToList<IPage>();\n\n            return list.Count();\n        }\n\n        public async Task<int> GetCount(\n            string projectId,\n            bool includeUnpublished,\n            CancellationToken cancellationToken = default(CancellationToken)\n            )\n        {\n            cancellationToken.ThrowIfCancellationRequested();\n            var list = await GetAllPages(projectId, cancellationToken).ConfigureAwait(false);\n            if(!includeUnpublished) list = list.Where(p => p.IsPublished && p.PubDate <= DateTime.UtcNow).ToList<IPage>();\n            return list.Count();\n        }\n\n        //public Task<Dictionary<string, int>> GetCategories(\n        //    string projectId,\n        //    bool userIsBlogOwner,\n        //    CancellationToken cancellationToken\n        //    )\n        //{\n        //    var result = new Dictionary<string, int>();\n\n\n        //    return Task.FromResult(result);\n        //}\n\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.NoDb/PageStoragePathResolver.cs",
    "content": "﻿using cloudscribe.SimpleContent.Models;\nusing NoDb;\nusing System;\nusing System.IO;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace cloudscribe.SimpleContent.Storage.NoDb\n{\n    public class PageStoragePathResolver : IStoragePathResolver<Page>\n    {\n        public PageStoragePathResolver(IStoragePathOptionsResolver storageOptionsResolver)\n        {\n            _optionsResolver = storageOptionsResolver;\n        }\n\n        private IStoragePathOptionsResolver _optionsResolver;\n\n        public async Task<string> ResolvePath(\n            string projectId,\n            string key = \"\",\n            string fileExtension = \".json\",\n            bool ensureFoldersExist = false,\n            CancellationToken cancellationToken = default(CancellationToken)\n            )\n        {\n            if (string.IsNullOrWhiteSpace(projectId)) throw new ArgumentException(\"projectId must be provided\");\n\n            if (string.IsNullOrWhiteSpace(fileExtension)) fileExtension = \".json\";\n\n            var pathOptions = await _optionsResolver.Resolve(projectId).ConfigureAwait(false);\n\n            var firstFolderPath = pathOptions.AppRootFolderPath\n                + pathOptions.BaseFolderVPath.Replace(\"/\", pathOptions.FolderSeparator);\n\n            if (ensureFoldersExist && !Directory.Exists(firstFolderPath))\n            {\n                Directory.CreateDirectory(firstFolderPath);\n            }\n            \n            var projectsFolderPath = Path.Combine(firstFolderPath, pathOptions.ProjectsFolderName);\n\n            if (ensureFoldersExist && !Directory.Exists(projectsFolderPath))\n            {\n                Directory.CreateDirectory(projectsFolderPath);\n            }\n\n           \n            var projectIdFolderPath = Path.Combine(projectsFolderPath, projectId);\n\n            if (ensureFoldersExist && !Directory.Exists(projectIdFolderPath))\n            {\n                Directory.CreateDirectory(projectIdFolderPath);\n            }\n\n            var type = typeof(Page).Name.ToLowerInvariant();\n\n           \n\n            var typeFolderPath = Path.Combine(projectIdFolderPath, type.ToLowerInvariant().Trim());\n\n            if (ensureFoldersExist && !Directory.Exists(typeFolderPath))\n            {\n                Directory.CreateDirectory(typeFolderPath);\n            }\n\n            if (string.IsNullOrWhiteSpace(key))\n            {\n                return typeFolderPath + pathOptions.FolderSeparator;\n            }\n\n            var filePath = Path.Combine(typeFolderPath, key + \".md\");\n            if (File.Exists(filePath)) return filePath;\n\n            return Path.Combine(typeFolderPath, key + fileExtension);\n        }\n\n\n        \n        public async Task<string> ResolvePath(\n            string projectId,\n            string key,\n            Page page,\n            string fileExtension = \".json\",\n            bool ensureFoldersExist = false,\n            CancellationToken cancellationToken = default(CancellationToken)\n            )\n        {\n            \n            if(page.ContentType == \"markdown\")\n            {\n                fileExtension = \".md\";\n            }\n\n            return await ResolvePath(\n                projectId,\n                key,\n                fileExtension,\n                ensureFoldersExist,\n                cancellationToken).ConfigureAwait(false);\n\n        }\n\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.NoDb/PostCache.cs",
    "content": "﻿// Copyright (c) Source Tree Solutions, LLC. All rights reserved.\n// Licensed under the Apache License, Version 2.0. \n// Author:                  Joe Audette\n// Created:                 2016-11-24\n// Last Modified:           2016-11-25\n// \n\nusing cloudscribe.SimpleContent.Models;\nusing Microsoft.Extensions.Caching.Memory;\nusing Microsoft.Extensions.Options;\nusing System;\nusing System.Collections.Generic;\n\nnamespace cloudscribe.SimpleContent.Storage.NoDb\n{\n    public class PostCache\n    {\n        public PostCache(\n            IMemoryCache cache,\n            IOptions<PostCacheOptions> optionsAccessor = null\n            )\n        {\n            if (cache == null) { throw new ArgumentNullException(nameof(cache)); }\n            this.cache = cache;\n\n            options = optionsAccessor?.Value;\n            if (options == null) options = new PostCacheOptions(); \n        }\n\n        private IMemoryCache cache;\n\n        private PostCacheOptions options;\n\n        public List<Post> GetAllPosts(\n            string projectId\n            )\n        {\n            var cacheKey = GetListCacheKey(projectId);\n            List<Post> result = (List<Post>)cache.Get(cacheKey);\n\n            return result;\n\n        }\n\n        public Dictionary<string, int> GetCategories(string projectId, bool includeUnpublished)\n        {\n            var cacheKey = GetCategoriesCacheKey(projectId, includeUnpublished);\n            Dictionary<string, int> result = (Dictionary<string, int>)cache.Get(cacheKey);\n            return result;\n        }\n\n        public Dictionary<string, int> GetArchiveList(string projectId, bool includeUnpublished)\n        {\n            var cacheKey = GetArchiveListCacheKey(projectId, includeUnpublished);\n            Dictionary<string, int> result = (Dictionary<string, int>)cache.Get(cacheKey);\n            return result;\n        }\n\n        public void AddToCache(List<Post> postList, string projectId)\n        {\n            var cacheKey = GetListCacheKey(projectId);\n            cache.Set(\n                cacheKey,\n                postList,\n                new MemoryCacheEntryOptions()\n                 .SetSlidingExpiration(TimeSpan.FromSeconds(options.CacheDurationInSeconds))\n                 );\n        }\n\n        public void AddCategoriesToCache(Dictionary<string, int> categoryList, string projectId, bool includeUnpublished)\n        {\n            var cacheKey = GetCategoriesCacheKey(projectId, includeUnpublished);\n            cache.Set(\n                cacheKey,\n                categoryList,\n                new MemoryCacheEntryOptions()\n                 .SetSlidingExpiration(TimeSpan.FromSeconds(options.CacheDurationInSeconds))\n                 );\n        }\n\n        public void AddArchiveListToCache(Dictionary<string, int> archiveList, string projectId, bool includeUnpublished)\n        {\n            var cacheKey = GetArchiveListCacheKey(projectId, includeUnpublished);\n            cache.Set(\n                cacheKey,\n                archiveList,\n                new MemoryCacheEntryOptions()\n                 .SetSlidingExpiration(TimeSpan.FromSeconds(options.CacheDurationInSeconds))\n                 );\n        }\n\n        public void ClearListCache(string projectId)\n        {\n            var cacheKey = GetListCacheKey(projectId);\n            cache.Remove(cacheKey);\n\n            cacheKey = GetCategoriesCacheKey(projectId, true);\n            cache.Remove(cacheKey);\n\n            cacheKey = GetCategoriesCacheKey(projectId, false);\n            cache.Remove(cacheKey);\n\n            cacheKey = GetArchiveListCacheKey(projectId, true);\n            cache.Remove(cacheKey);\n\n            cacheKey = GetArchiveListCacheKey(projectId, false);\n            cache.Remove(cacheKey);\n        }\n\n        public string GetListCacheKey(string projectId)\n        {\n            return projectId + \"-postlist\";\n        }\n\n        public string GetCategoriesCacheKey(string projectId, bool includeUnpublished)\n        {\n            if(includeUnpublished)\n            {\n                return projectId + \"-all-categorylist\";\n            }\n            else\n            {\n                return projectId + \"-categorylist\";\n            }\n            \n        }\n\n        public string GetArchiveListCacheKey(string projectId, bool includeUnpublished)\n        {\n            if(includeUnpublished)\n            {\n                return projectId + \"-all-archivelist\";\n            }\n            else\n            {\n                return projectId + \"-archivelist\";\n            }\n            \n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.NoDb/PostCacheOptions.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading.Tasks;\n\nnamespace cloudscribe.SimpleContent.Storage.NoDb\n{\n    public class PostCacheOptions\n    {\n        public int CacheDurationInSeconds { get; set; } = 3600; //default 1 hour\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.NoDb/PostCommands.cs",
    "content": "﻿// Copyright (c) Source Tree Solutions, LLC. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.\n// Author:                  Joe Audette\n// Created:                 2016-04-24\n// Last Modified:           2018-06-28\n//\n\nusing cloudscribe.SimpleContent.Models;\nusing NoDb;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace cloudscribe.SimpleContent.Storage.NoDb\n{\n    public class PostCommands : IPostCommands, IPostCommandsSingleton\n    {\n        public PostCommands(\n            PostCache cache,\n            IBasicCommands<Post> postCommands,\n            IBasicQueries<Post> postQueries,\n            IKeyGenerator keyGenerator\n            )\n        {\n            _cache = cache;\n            _commands = postCommands;\n            _query = postQueries;\n            _keyGenerator = keyGenerator;\n        }\n\n        private PostCache _cache;\n        private IBasicCommands<Post> _commands;\n        private IBasicQueries<Post> _query;\n        private IKeyGenerator _keyGenerator;\n\n\n\n        public async Task Create(\n            string projectId,\n            IPost post,\n            CancellationToken cancellationToken = default(CancellationToken)\n           )\n        {\n            var p = Post.FromIPost(post);\n\n            p.LastModified = DateTime.UtcNow;\n            // metaweblog sets the id, don't change it if it exists\n            if(string.IsNullOrWhiteSpace(p.Id))\n            {\n                p.Id = _keyGenerator.GenerateKey(p);\n            }\n\n\n            await _commands.CreateAsync(projectId, p.Id, p).ConfigureAwait(false);\n            _cache.ClearListCache(projectId);\n        }\n\n        public async Task Update(\n            string projectId,\n            IPost post,\n            CancellationToken cancellationToken = default(CancellationToken)\n           )\n        {\n            var p = Post.FromIPost(post);\n            p.LastModified = DateTime.UtcNow;\n\n            //since we store posts in year month folders we need to check if pubdate changed and move the file if needed by delete and re-reate.\n            var currentVersion = await _query.FetchAsync(projectId, p.Id);\n            if(currentVersion.PubDate != p.PubDate)\n            {\n                await _commands.DeleteAsync(projectId, p.Id).ConfigureAwait(false);\n                await _commands.CreateAsync(projectId, p.Id, p).ConfigureAwait(false);\n            }\n            else\n            {\n                await _commands.UpdateAsync(projectId, p.Id, p).ConfigureAwait(false);\n            }\n\n            _cache.ClearListCache(projectId);\n\n        }\n\n        //private async Task HandlePubDateAboutToChange(\n        //    string projectId,\n        //    IPost post,\n        //    DateTime newPubDate,\n        //    CancellationToken cancellationToken = default(CancellationToken))\n        //{\n        //    if (post.PubDate.HasValue)\n        //    {\n        //        if ((post.PubDate.Value.Month == newPubDate.Month) && (post.PubDate.Value.Year == newPubDate.Year))\n        //        {\n        //            // we store posts in /year/month folders, if that didn't change no need to do anything\n        //            return;\n        //        }\n        //    }\n\n\n        //    // because with the filesystem storage we are storing posts in a year/month folder\n        //    // if the year or month changes we need to delete the old file and save the updated post to the\n        //    // new year/month folder\n        //    var p = Post.FromIPost(post);\n\n        //    await _commands.DeleteAsync(projectId, p.Id).ConfigureAwait(false);\n        //    p.PubDate = newPubDate;\n        //    await _commands.CreateAsync(projectId, p.Id, p).ConfigureAwait(false);\n        //}\n\n\n        public async Task Delete(\n            string projectId,\n            string postId,\n            CancellationToken cancellationToken = default(CancellationToken)\n            )\n        {\n            var post = await _query.FetchAsync(projectId, postId, cancellationToken).ConfigureAwait(false);\n            if (post != null)\n            {\n                //var allPosts = await GetAllPosts(projectId, CancellationToken.None).ConfigureAwait(false);\n                await _commands.DeleteAsync(projectId, postId).ConfigureAwait(false);\n                //allPosts.Remove(post);\n\n                _cache.ClearListCache(projectId);\n            }\n\n        }\n\n        private async Task<List<Post>> GetAllPosts(\n            string projectId,\n            CancellationToken cancellationToken)\n        {\n\n            var list = _cache.GetAllPosts(projectId);\n            if (list != null) return list;\n\n            var l = await _query.GetAllAsync(projectId, cancellationToken).ConfigureAwait(false);\n            list = l.ToList();\n            _cache.AddToCache(list, projectId);\n\n            return list;\n\n        }\n\n        public async Task<string> CloneToNewProject(\n            string sourceProjectId,\n            string targetProjectId,\n            string postId,\n            bool includeComments = false,\n            CancellationToken cancellationToken = default(CancellationToken))\n        {\n            var post = await _query.FetchAsync(sourceProjectId, postId, CancellationToken.None);\n            if (post == null) throw new InvalidOperationException(\"post not found\");\n\n            var p = Post.FromIPost(post);\n            p.LastModified = DateTime.UtcNow;\n            p.Id = _keyGenerator.GenerateKey(p);\n\n            await _commands.CreateAsync(targetProjectId, p.Id, p).ConfigureAwait(false);\n\n            // NoDB posts don't have categories or comments so no need to copy those\n\n            _cache.ClearListCache(targetProjectId);\n            return p.Id;\n        }\n\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.NoDb/PostCompositeSerializer.cs",
    "content": "﻿// Copyright (c) Source Tree Solutions, LLC. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.\n// Author:                  Joe Audette\n// Created:                 2017-11-20\n// Last Modified:           2017-11-20\n// \n\n\nusing cloudscribe.SimpleContent.Models;\nusing NoDb;\n\nnamespace cloudscribe.SimpleContent.Storage.NoDb\n{\n    public class PostCompositeSerializer : IStringSerializer<Post>\n    {\n        public PostCompositeSerializer(\n            PostXmlSerializer xmlSerializer,\n            PostMarkdownSerializer markdownSerializer\n            )\n        {\n            _xmlSerializer = xmlSerializer;\n            _markdownSerializer = markdownSerializer;\n        }\n\n        private PostXmlSerializer _xmlSerializer;\n        private PostMarkdownSerializer _markdownSerializer;\n\n        public string ExpectedFileExtension { get; } = \"\";\n\n        public string Serialize(Post post)\n        {\n            if(post.ContentType == \"markdown\")\n            {\n                return _markdownSerializer.Serialize(post);\n            }\n\n            return _xmlSerializer.Serialize(post);\n        }\n\n        public Post Deserialize(string input, string key)\n        {\n            if(input.StartsWith(\"---\"))\n            {\n                return _markdownSerializer.Deserialize(input, key);\n            }\n\n            return _xmlSerializer.Deserialize(input, key);\n        }\n\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.NoDb/PostMarkdownSerializer.cs",
    "content": "﻿// Copyright (c) Source Tree Solutions, LLC. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.\n// Author:                  Joe Audette\n// Created:                 2017-11-20\n// Last Modified:           2017-11-21\n//\n\nusing cloudscribe.SimpleContent.Models;\nusing Microsoft.Extensions.Logging;\nusing NoDb;\nusing System.IO;\nusing System.Text;\nusing YamlDotNet.Core;\nusing YamlDotNet.Serialization;\nusing YamlDotNet.Serialization.NamingConventions;\n\nnamespace cloudscribe.SimpleContent.Storage.NoDb\n{\n    public class PostMarkdownSerializer : IStringSerializer<Post>\n    {\n        public PostMarkdownSerializer(\n            ILogger<PostMarkdownSerializer> logger)\n        {\n            _log = logger;\n        }\n\n        private ILogger _log;\n        \n        public string ExpectedFileExtension { get; } = \".md\";\n\n        public string Serialize(Post post)\n        {\n            var yamlPost = new YamlPost();\n            post.CopyTo(yamlPost);\n            foreach(var c in post.Comments)\n            {\n                if (c is Comment comment)\n                {\n                    yamlPost.TheComments.Add(comment);\n                }\n            }\n\n            var serializer = new SerializerBuilder()\n                .WithNamingConvention(new CamelCaseNamingConvention())\n                .Build();\n            var yaml = serializer.Serialize(yamlPost);\n\n            var sb = new StringBuilder();\n            sb.Append(\"---\\r\\n\");\n            sb.Append(yaml);\n            sb.Append(\"---\\r\\n\");\n            sb.Append(post.Content);\n\n            return sb.ToString();\n\n        }\n\n        public Post Deserialize(string markdownWithYaml, string key)\n        {\n            var yamlHelper = new YamlHelper();\n            string extractedYaml = null;\n            var match = yamlHelper.MatchFrontMatter(markdownWithYaml);\n\n            var post = new Post();\n            if(match.Success)\n            {\n                extractedYaml = match.Value;\n\n                var yaml = yamlHelper.RemoveFrontMatterDelimiters(extractedYaml).Trim();\n                var input = new StringReader(yaml);\n\n                var deserializer = new DeserializerBuilder()\n                .WithNamingConvention(new CamelCaseNamingConvention())\n                .Build();\n\n                try\n                {\n                    var yamlPost = deserializer.Deserialize<YamlPost>(input);\n                    yamlPost.CopyTo(post);\n                    post.Comments.AddRange(yamlPost.TheComments);\n                    post.Content = markdownWithYaml.Replace(extractedYaml, string.Empty).TrimStart('\\r', '\\n');\n                }\n                catch(YamlException ex)\n                {\n                    _log.LogError($\"failed to deserialize post with key {key}, error message {ex.Message} stacktrace {ex.StackTrace}\");\n                    return null;\n                }\n                \n            }\n            else\n            {\n                _log.LogError($\"failed to deserialize yamlBlock from post with key {key}\");\n                return null;\n            }\n            \n            return post;\n\n        }\n\n       \n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.NoDb/PostQueries.cs",
    "content": "﻿// Copyright (c) Source Tree Solutions, LLC. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.\n// Author:                  Joe Audette\n// Created:                 2016-04-24\n// Last Modified:           2019-02-11\n// \n\nusing cloudscribe.SimpleContent.Models;\nusing NoDb;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace cloudscribe.SimpleContent.Storage.NoDb\n{\n    public class PostQueries : IPostQueries, IPostQueriesSingleton\n    {\n        public PostQueries(\n            PostCache cache,\n            IBasicQueries<Post> postQueries\n            )\n        {\n            _cache = cache;\n            _query = postQueries;\n        }\n\n        private readonly PostCache _cache;\n        private readonly IBasicQueries<Post> _query;\n  \n        \n        private async Task<List<Post>> GetAllPosts(\n            string projectId,\n            CancellationToken cancellationToken = default(CancellationToken)\n            )\n        {\n            cancellationToken.ThrowIfCancellationRequested();\n\n            var list = _cache.GetAllPosts(projectId);\n            if (list != null) return list;\n\n            var l = await _query.GetAllAsync(projectId, cancellationToken).ConfigureAwait(false);\n            list = l.ToList();\n            _cache.AddToCache(list, projectId);\n            \n            return list;\n\n        }\n\n        public async Task<List<IPost>> GetPostsReadyForPublish(\n            string blogId,\n            CancellationToken cancellationToken = default(CancellationToken)\n            )\n        {\n            cancellationToken.ThrowIfCancellationRequested();\n            var all = await GetAllPosts(blogId, cancellationToken).ConfigureAwait(false);\n            var currentTime = DateTime.UtcNow;\n            return all.Where(x => x.DraftPubDate != null && x.DraftPubDate < currentTime).ToList<IPost>();\n        }\n\n        public async Task<List<IPost>> GetPosts(\n            string blogId,\n            bool includeUnpublished,\n            CancellationToken cancellationToken = default(CancellationToken)\n            )\n        {\n            cancellationToken.ThrowIfCancellationRequested();\n\n            var list = await GetAllPosts(blogId, cancellationToken).ConfigureAwait(false);\n\n            list = list.Where(p =>\n                      (includeUnpublished || (p.IsPublished && p.PubDate <= DateTime.UtcNow))\n                      )\n                      .OrderByDescending(p => p.PubDate ?? p.LastModified)\n                      .ToList<Post>();\n            \n            var result = new List<IPost>();\n            result.AddRange(list);\n\n            return result;\n        }\n\n        public async Task<PagedPostResult> GetPosts(\n            string blogId,\n            string category,\n            bool includeUnpublished,\n            int pageNumber,\n            int pageSize,\n            CancellationToken cancellationToken = default(CancellationToken)\n            )\n        {\n            cancellationToken.ThrowIfCancellationRequested();\n\n            var posts = await GetAllPosts(blogId, cancellationToken).ConfigureAwait(false);\n            var totalPosts = posts.Count;\n\n            if (!string.IsNullOrEmpty(category))\n            {\n                posts = posts.Where(p =>\n                    (includeUnpublished || (p.IsPublished && p.PubDate <= DateTime.UtcNow))\n                     && p.Categories.Any(\n                        c => string.Equals(c, category, StringComparison.OrdinalIgnoreCase))\n                        )\n                        .OrderByDescending(p => p.PubDate ?? p.LastModified)\n                        .ToList<Post>();\n\n                totalPosts = posts.Count;\n\n            }\n            else\n            {\n                posts = posts.Where(p =>\n                    (includeUnpublished || (p.IsPublished && p.PubDate <= DateTime.UtcNow))\n                        )\n                        .OrderByDescending(p => p.PubDate ?? p.LastModified)\n                        .ToList<Post>();\n                \n            }\n\n            if (pageSize > 0)\n            {\n\n                var offset = 0;\n                if (pageNumber > 1) { offset = pageSize * (pageNumber - 1); }\n                posts = posts.Skip(offset).Take(pageSize).ToList<Post>();\n\n\n            }\n\n            var data = new List<IPost>();\n            data.AddRange(posts);\n\n            var result = new PagedPostResult\n            {\n                Data = data,\n                TotalItems = totalPosts\n            };\n\n            return result;\n        }\n\n        public async Task<int> GetCount(\n            string blogId,\n            string category,\n            bool includeUnpublished,\n            CancellationToken cancellationToken = default(CancellationToken)\n            )\n        {\n            cancellationToken.ThrowIfCancellationRequested();\n\n            var list = await GetAllPosts(blogId, cancellationToken).ConfigureAwait(false);\n\n            list = list.Where(p =>\n                      (includeUnpublished || (p.IsPublished && p.PubDate <= DateTime.UtcNow))\n                      ).ToList<Post>();\n\n            if (!string.IsNullOrEmpty(category))\n            {\n                list = list.Where(\n                    p => p.Categories.Any(\n                        c => string.Equals(c, category, StringComparison.OrdinalIgnoreCase))\n                        ).ToList<Post>();\n            }\n            \n            return list.Count();\n        }\n\n        public async Task<List<IPost>> GetRecentPosts(\n            string blogId,\n            int numberToGet,\n            CancellationToken cancellationToken = default(CancellationToken)\n            )\n        {\n            cancellationToken.ThrowIfCancellationRequested();\n            var posts = await GetAllPosts(blogId, cancellationToken).ConfigureAwait(false);\n\n            posts = posts.Where(p =>\n                p.IsPublished\n                && p.PubDate <= DateTime.UtcNow)\n                .OrderByDescending(p => p.PubDate)\n                .Take(numberToGet).ToList<Post>();\n\n            var result = new List<IPost>();\n            result.AddRange(posts);\n\n            return result;\n\n        }\n\n        public async Task<List<IPost>> GetFeaturedPosts(\n            string blogId,\n            int numberToGet,\n            CancellationToken cancellationToken = default(CancellationToken)\n            )\n        {\n            cancellationToken.ThrowIfCancellationRequested();\n            var posts = await GetAllPosts(blogId, cancellationToken).ConfigureAwait(false);\n\n            posts = posts.Where(p =>\n                p.IsPublished\n                && p.IsFeatured\n                && p.PubDate <= DateTime.UtcNow)\n                .OrderByDescending(p => p.PubDate)\n                .Take(numberToGet).ToList<Post>();\n\n            var result = new List<IPost>();\n            result.AddRange(posts);\n\n            return result;\n\n        }\n\n        public async Task<List<IPost>> GetRelatedPosts(\n            string blogId,\n            string currentPostId,\n            int numberToGet,\n            CancellationToken cancellationToken = default(CancellationToken)\n            )\n        {\n            cancellationToken.ThrowIfCancellationRequested();\n\n            var result = new List<IPost>();\n\n            var posts = await GetAllPosts(blogId, cancellationToken).ConfigureAwait(false);\n            var currentPost = posts.Where(x => x.Id == currentPostId).SingleOrDefault();\n            if(currentPost != null)\n            {\n                posts = posts.Where(p =>\n                p.IsPublished\n                && p.Id != currentPostId\n                && p.Categories.Any(x => currentPost.Categories.Contains(x))\n                && p.PubDate <= DateTime.UtcNow)\n                .OrderByDescending(p => p.PubDate)\n                .Take(numberToGet).ToList<Post>();\n\n\n                result.AddRange(posts);\n            }\n\n            \n\n            return result;\n\n        }\n\n        public async Task<PagedPostResult> GetPosts(\n            string blogId,\n            int year,\n            int month = 0,\n            int day = 0,\n            int pageNumber = 1,\n            int pageSize = 10,\n            bool includeUnpublished = false,\n            CancellationToken cancellationToken = default(CancellationToken)\n            )\n        {\n            cancellationToken.ThrowIfCancellationRequested();\n            var posts = await GetAllPosts(blogId, cancellationToken).ConfigureAwait(false);\n            var totalItems = posts.Count;\n\n            if (day > 0 && month > 0)\n            {\n                posts = posts.Where(x => \n                x.PubDate.HasValue\n                && x.PubDate.Value.Year == year\n                && x.PubDate.Value.Month == month\n                && x.PubDate.Value.Day == day\n                && (includeUnpublished || (x.IsPublished\n                && x.PubDate <= DateTime.UtcNow))\n                )\n                .OrderByDescending(p => p.PubDate ?? p.LastModified)\n                .ToList<Post>();\n            }\n            else if (month > 0)\n            {\n                posts = posts.Where(x => \n                x.PubDate.HasValue\n                && x.PubDate.Value.Year == year\n                && x.PubDate.Value.Month == month\n                && (includeUnpublished || (x.IsPublished\n                && x.PubDate <= DateTime.UtcNow))\n                )\n                .OrderByDescending(p => p.PubDate ?? p.LastModified)\n                .ToList<Post>();\n\n            }\n            else\n            {\n                posts = posts.Where(x => \n                x.PubDate.HasValue\n                && x.PubDate.Value.Year == year\n                )\n                .OrderByDescending(p => p.PubDate ?? p.LastModified)\n                .ToList<Post>();\n            }\n\n            if (pageSize > 0)\n            {\n                var offset = 0;\n                if (pageNumber > 1) { offset = pageSize * (pageNumber - 1); }\n                posts = posts.Skip(offset).Take(pageSize).ToList<Post>();\n\n            }\n\n            var result = new PagedPostResult();\n\n            var data = new List<IPost>();\n            data.AddRange(posts);\n\n            result.Data = data;\n            result.TotalItems = totalItems;\n\n            return result;\n            \n        }\n\n        public async Task<int> GetCount(\n            string blogId,\n            int year,\n            int month = 0,\n            int day = 0,\n            bool includeUnpublished = false,\n            CancellationToken cancellationToken = default(CancellationToken)\n            )\n        {\n            cancellationToken.ThrowIfCancellationRequested();\n            var posts = await GetAllPosts(blogId, cancellationToken).ConfigureAwait(false);\n\n            if (day > 0 && month > 0)\n            {\n                return posts.Where(x => \n                x.PubDate.HasValue\n                && x.PubDate.Value.Year == year\n                && x.PubDate.Value.Month == month\n                && x.PubDate.Value.Day == day\n                && (includeUnpublished || (x.IsPublished\n                && x.PubDate <= DateTime.UtcNow))\n                )\n                .Count();\n            }\n            else if (month > 0)\n            {\n                return posts.Where(x =>\n                x.PubDate.HasValue\n                && x.PubDate.Value.Year == year\n                && x.PubDate.Value.Month == month\n                && (includeUnpublished || (x.IsPublished\n                && x.PubDate <= DateTime.UtcNow))\n                )\n                .Count();\n\n            }\n\n            return posts.Where(x => \n                x.PubDate.HasValue\n                && x.PubDate.Value.Year == year\n                )\n                .Count();\n\n        }\n\n        public async Task<IPost> GetPost(\n            string blogId,\n            string postId,\n            CancellationToken cancellationToken = default(CancellationToken)\n            )\n        {\n            cancellationToken.ThrowIfCancellationRequested();\n\n            return await _query.FetchAsync(blogId, postId, cancellationToken).ConfigureAwait(false);\n            //var allPosts = await GetAllPosts(blogId, cancellationToken).ConfigureAwait(false);\n            //return allPosts.FirstOrDefault(p => p.Id == postId);\n\n        }\n\n        public async Task<PostResult> GetPostBySlug(\n            string blogId,\n            string slug,\n            CancellationToken cancellationToken = default(CancellationToken)\n            )\n        {\n            cancellationToken.ThrowIfCancellationRequested();\n\n            var result = new PostResult();\n            var allPosts = await GetAllPosts(blogId, cancellationToken).ConfigureAwait(false);\n            result.Post = allPosts.FirstOrDefault(p => p.Slug == slug);\n\n            if(result.Post != null)\n            {\n                var cutoff = result.Post.PubDate;\n\n                result.PreviousPost = allPosts\n                    .Where(\n                    p => p.PubDate < cutoff\n                    && p.IsPublished == true\n                    )\n                    .OrderByDescending(p => p.PubDate ?? p.LastModified)\n                    .Take(1)\n                    .FirstOrDefault();\n                \n                result.NextPost = allPosts\n                    .Where(\n                    p => p.PubDate > cutoff\n                    && p.IsPublished == true\n                    )\n                    .OrderBy(p => p.PubDate ?? p.LastModified)\n                    .Take(1)\n                    .FirstOrDefault();\n\n            }\n\n            return result;\n        }\n\n        public async Task<IPost> GetPostByCorrelationKey(\n            string blogId,\n            string correlationKey,\n            CancellationToken cancellationToken = default(CancellationToken)\n            )\n        {\n            cancellationToken.ThrowIfCancellationRequested();\n\n            var allPosts = await GetAllPosts(blogId, cancellationToken).ConfigureAwait(false);\n            return allPosts.FirstOrDefault(p => p.CorrelationKey == correlationKey);\n\n        }\n\n        public async Task<bool> SlugIsAvailable(\n            string blogId,\n            string slug,\n            CancellationToken cancellationToken = default(CancellationToken)\n            )\n        {\n            cancellationToken.ThrowIfCancellationRequested();\n\n            var allPosts = await GetAllPosts(blogId, cancellationToken).ConfigureAwait(false);\n\n            var isInUse = allPosts.Any(\n                p => string.Equals(p.Slug, slug, StringComparison.OrdinalIgnoreCase));\n\n            return !isInUse;\n        }\n\n        public async Task<Dictionary<string, int>> GetCategories(\n            string projectId,\n            bool includeUnpublished,\n            CancellationToken cancellationToken = default(CancellationToken)\n            )\n        {\n            cancellationToken.ThrowIfCancellationRequested();\n\n            var list = _cache.GetCategories(projectId, includeUnpublished);\n            if(list == null)\n            {\n                var dict = new Dictionary<string, int>();\n\n                var visiblePosts = await GetPosts(\n                    projectId,\n                    includeUnpublished,\n                    cancellationToken).ConfigureAwait(false);\n\n                foreach (var category in visiblePosts.SelectMany(post => post.Categories))\n                {\n                    var c = category.Trim();\n                    if (!dict.ContainsKey(c))\n                    {\n                        dict.Add(c, 0);\n                    }\n\n                    dict[c] = dict[c] + 1;\n                }\n\n                var sorted = new SortedDictionary<string, int>(dict);\n                list = sorted.OrderBy(x => x.Key).ToDictionary(kvp => kvp.Key, kvp => kvp.Value) as Dictionary<string, int>;\n                _cache.AddCategoriesToCache(list, projectId, includeUnpublished);\n            \n            }\n            return list;\n            \n        }\n\n        public async Task<Dictionary<string, int>> GetArchives(\n            string projectId,\n            bool includeUnpublished,\n            CancellationToken cancellationToken = default(CancellationToken)\n            )\n        {\n            cancellationToken.ThrowIfCancellationRequested();\n\n            var list = _cache.GetArchiveList(projectId, includeUnpublished);\n            if(list == null)\n            {\n                var result = new Dictionary<string, int>();\n\n                // since we are storing the files on disk grouped by year and month folders\n                // we could derive this list from the file system\n                // currently we are loading all posts into memory but for a blog with years of frequent posts\n                // maybe we don't need to keep all the old posts in memory we could load the recent year(s) by default and\n                // load the old years on demand if requests come in for them\n                // at any rate I think the way of retrieving posts needs more review and thought\n                // about efficient strategies to use the minimum resources needed\n\n                var visiblePosts = await GetPosts(\n                    projectId,\n                    includeUnpublished,\n                    cancellationToken).ConfigureAwait(false);\n\n                var grouped = from p in visiblePosts\n                              group p by new { month = p.PubDate?.Month ?? p.LastModified.Month, year = p.PubDate?.Year ?? p.LastModified.Year } into d\n                              select new\n                              {\n                                  key = d.Key.year.ToString() + \"/\" + d.Key.month.ToString(\"00\")\n                                  ,\n                                  count = d.Count()\n                              };\n\n                foreach (var item in grouped)\n                {\n                    result.Add(item.key, item.count);\n                }\n\n                list = result;\n                _cache.AddArchiveListToCache(list, projectId, includeUnpublished);\n\n            }\n            return list;\n            \n        }\n\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.NoDb/PostStoragePathResolver.cs",
    "content": "﻿// Copyright (c) Source Tree Solutions, LLC. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.\n// Author:                  Joe Audette\n// Created:                 2016-04-24\n// Last Modified:           2018-06-28\n// \n\nusing cloudscribe.SimpleContent.Models;\nusing NoDb;\nusing System;\nusing System.IO;\nusing System.Globalization;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace cloudscribe.SimpleContent.Storage.NoDb\n{\n    public class PostStoragePathResolver : IStoragePathResolver<Post>\n    {\n        public PostStoragePathResolver(\n            IStoragePathOptionsResolver storageOptionsResolver)\n        {\n            optionsResolver = storageOptionsResolver;\n        }\n\n        private IStoragePathOptionsResolver optionsResolver;\n\n        /// <summary>\n        /// if key is not provided this method will return the post folder path\n        /// if key is provided it will try to find the file which should be nested in year/month\n        /// folder based on pubdate, if the file exists it will return the path to the file\n        /// if not it will return the post folder plus key plus file extension\n        /// however that is not the correct place to store a new post. The other ResolvePath method \n        /// which takes an instance of Post should be used for determining where to save a post\n        /// </summary>\n        /// <param name=\"projectId\"></param>\n        /// <param name=\"key\"></param>\n        /// <param name=\"fileExtension\"></param>\n        /// <param name=\"ensureFoldersExist\"></param>\n        /// <param name=\"cancellationToken\"></param>\n        /// <returns></returns>\n        public async Task<string> ResolvePath(\n            string projectId,\n            string key = \"\",\n            string fileExtension = \".json\",\n            bool ensureFoldersExist = false,\n            CancellationToken cancellationToken = default(CancellationToken)\n            )\n        {\n            if (string.IsNullOrWhiteSpace(projectId)) throw new ArgumentException(\"projectId must be provided\");\n\n            var pathOptions = await optionsResolver.Resolve(projectId).ConfigureAwait(false);\n\n            var firstFolderPath = pathOptions.AppRootFolderPath\n                + pathOptions.BaseFolderVPath.Replace(\"/\", pathOptions.FolderSeparator);\n\n            if (ensureFoldersExist && !Directory.Exists(firstFolderPath))\n            {\n                Directory.CreateDirectory(firstFolderPath);\n            }\n\n           \n            var projectsFolderPath = Path.Combine(firstFolderPath, pathOptions.ProjectsFolderName);\n\n            if (ensureFoldersExist && !Directory.Exists(projectsFolderPath))\n            {\n                Directory.CreateDirectory(projectsFolderPath);\n            }\n\n           \n            var projectIdFolderPath = Path.Combine(projectsFolderPath, projectId);\n\n            if (ensureFoldersExist && !Directory.Exists(projectIdFolderPath))\n            {\n                Directory.CreateDirectory(projectIdFolderPath);\n            }\n\n            var type = typeof(Post).Name.ToLowerInvariant();\n\n            \n            var typeFolderPath = Path.Combine(projectIdFolderPath, type.ToLowerInvariant().Trim());\n\n            if (ensureFoldersExist && !Directory.Exists(typeFolderPath))\n            {\n                Directory.CreateDirectory(typeFolderPath);\n            }\n\n            if (string.IsNullOrWhiteSpace(key))\n            {\n                return typeFolderPath;\n            }\n\n            var fileName = key + \".xml\";\n            var filePath =  Path.Combine(typeFolderPath, key + fileExtension);\n            if (File.Exists(filePath)) return filePath;\n            \n            // if the file is not found in the type folder\n            // we need to check for deeper folders year/month\n            // if the file is found there then return the path\n            foreach (string file in Directory.EnumerateFiles(\n                typeFolderPath,\n                fileName,\n                SearchOption.AllDirectories) // this is needed for blog posts which are nested in year/month folders\n                )\n            {\n                return file; \n            }\n\n            fileName = key + \".md\";\n            filePath = Path.Combine(typeFolderPath, key + fileExtension);\n            if (File.Exists(filePath)) return filePath;\n\n            //try again with .md\n            foreach (string file in Directory.EnumerateFiles(\n                typeFolderPath,\n                fileName,\n                SearchOption.AllDirectories) // this is needed for blog posts which are nested in year/month folders\n                )\n            {\n                return file;\n            }\n\n            // otherwise return the best path calculation based on info provided\n            // ie to save a file the other ResolvePath method should be used and the\n            // Post should be passed in to determine the year/month path\n            return filePath;\n\n        }\n\n        /// <summary>\n        /// this method should be used to calculate the path to create or update a post\n        /// it will use the year/month of the post.PubDate in determining the path\n        /// </summary>\n        /// <param name=\"projectId\"></param>\n        /// <param name=\"key\"></param>\n        /// <param name=\"post\"></param>\n        /// <param name=\"fileExtension\"></param>\n        /// <param name=\"ensureFoldersExist\"></param>\n        /// <param name=\"cancellationToken\"></param>\n        /// <returns></returns>\n        public async Task<string> ResolvePath(\n            string projectId,\n            string key,\n            Post post,\n            string fileExtension = \".json\",\n            bool ensureFoldersExist = false,\n            CancellationToken cancellationToken = default(CancellationToken)\n            )\n        {\n            if (string.IsNullOrWhiteSpace(projectId)) throw new ArgumentException(\"projectId must be provided\");\n\n            var pathOptions = await optionsResolver.Resolve(projectId).ConfigureAwait(false);\n\n            var firstFolderPath = pathOptions.AppRootFolderPath\n                + pathOptions.BaseFolderVPath.Replace(\"/\", pathOptions.FolderSeparator);\n\n            if (ensureFoldersExist && !Directory.Exists(firstFolderPath))\n            {\n                Directory.CreateDirectory(firstFolderPath);\n            }\n\n           \n            var projectsFolderPath = Path.Combine(firstFolderPath, pathOptions.ProjectsFolderName);\n\n            if (ensureFoldersExist && !Directory.Exists(projectsFolderPath))\n            {\n                Directory.CreateDirectory(projectsFolderPath);\n            }\n\n            \n            var projectIdFolderPath = Path.Combine(projectsFolderPath, projectId);\n\n            if (ensureFoldersExist && !Directory.Exists(projectIdFolderPath))\n            {\n                Directory.CreateDirectory(projectIdFolderPath);\n            }\n\n            var type = typeof(Post).Name.ToLowerInvariant();\n\n            \n            var typeFolderPath = Path.Combine(projectIdFolderPath, type.ToLowerInvariant().Trim());\n\n            if (ensureFoldersExist && !Directory.Exists(typeFolderPath))\n            {\n                Directory.CreateDirectory(typeFolderPath);\n            }\n\n            var pubDate = post.PubDate;\n            if(!pubDate.HasValue)\n            {\n                pubDate = DateTime.UtcNow;\n            }\n\n            var yearFolderName = pubDate.Value.Year.ToString(CultureInfo.InvariantCulture);\n            var monthFolderName = pubDate.Value.Month.ToString(\"00\", CultureInfo.InvariantCulture);\n\n            var yearPath = Path.Combine(typeFolderPath, yearFolderName);\n\n            if (ensureFoldersExist && !Directory.Exists(yearPath))\n            {\n                Directory.CreateDirectory(yearPath);\n            }\n\n            var monthPath = Path.Combine(yearPath, monthFolderName);\n\n            if (ensureFoldersExist && !Directory.Exists(monthPath))\n            {\n                Directory.CreateDirectory(monthPath);\n            }\n\n            // we don't care if this file eists\n            // this method is for calculating where to save a post\n            if(post.ContentType == \"markdown\")\n            {\n                return Path.Combine(monthPath, key + \".md\");\n            }\n\n            return Path.Combine(monthPath, key + \".xml\");\n        }\n\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.NoDb/PostXmlSerializer.cs",
    "content": "﻿// Copyright (c) Source Tree Solutions, LLC. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.\n// Author:                  Joe Audette\n// Created:                 2016-04-25\n// Last Modified:           2018-08-20\n// \n\nusing cloudscribe.SimpleContent.Models;\nusing Microsoft.Extensions.Logging;\nusing NoDb;\nusing System;\nusing System.Collections.Generic;\nusing System.Globalization;\nusing System.IO;\nusing System.Linq;\nusing System.Xml.Linq;\n\nnamespace cloudscribe.SimpleContent.Storage.NoDb\n{\n    public class PostXmlSerializer : IStringSerializer<Post>\n    {\n        public PostXmlSerializer(\n            ILogger<PostXmlSerializer> logger)\n        {\n            log = logger;\n        }\n\n        private ILogger log;\n\n        public string ExpectedFileExtension { get; } = \".xml\";\n\n        public string Serialize(Post post)\n        {\n            var doc = new XDocument(\n                            new XElement(\"post\",\n                                new XElement(\"id\", post.Id),\n                                new XElement(\"title\", post.Title),\n                                new XElement(\"slug\", post.Slug),\n                                new XElement(\"correlationkey\", post.CorrelationKey),\n                                new XElement(\"author\", post.Author),\n                                new XElement(\"pubDate\", post.PubDate?.ToString(\"O\")),\n                                new XElement(\"lastModified\", post.LastModified.ToString(\"s\")),\n                                new XElement(\"excerpt\", post.MetaDescription),\n                                new XElement(\"content\", post.Content),\n                                new XElement(\"contentType\", post.ContentType),\n                                new XElement(\"imageUrl\", post.ImageUrl),\n                                new XElement(\"thumbnailUrl\", post.ThumbnailUrl),\n\n                                new XElement(\"createdUtc\", post.CreatedUtc.ToString(\"s\")),\n                                new XElement(\"createdByUser\", post.CreatedByUser),\n                                new XElement(\"lastModifiedByUser\", post.LastModifiedByUser),\n                                new XElement(\"draftAuthor\", post.DraftAuthor),\n                                new XElement(\"draftContent\", post.DraftContent),\n                                new XElement(\"draftPubDate\", post.DraftPubDate?.ToString(\"O\")),\n                                new XElement(\"templateKey\", post.TemplateKey),\n                                new XElement(\"serializedModel\", post.SerializedModel),\n                                new XElement(\"draftSerializedModel\", post.DraftSerializedModel),\n                                new XElement(\"serializer\", post.Serializer),\n                                new XElement(\"blogId\", post.BlogId),\n\n\n                                new XElement(\"ispublished\", post.IsPublished),\n                                new XElement(\"isFeatured\", post.IsFeatured),\n                                new XElement(\"autoTeaser\", post.AutoTeaser),\n                                new XElement(\"teaserOverride\", post.TeaserOverride),\n                                new XElement(\"suppressTeaser\", post.SuppressTeaser),\n                                new XElement(\"categories\", string.Empty),\n                                new XElement(\"comments\", string.Empty),\n                                new XElement(\"showcomments\", post.ShowComments)\n                            ));\n\n            //XElement categories = doc.XPathSelectElement(\"post/categories\");\n            var categories = doc.Descendants(\"categories\").FirstOrDefault();\n            foreach (string category in post.Categories)\n            {\n                categories.Add(new XElement(\"category\", category));\n            }\n\n            //XElement comments = doc.XPathSelectElement(\"post/comments\");\n            if (post.Comments != null)\n            {\n                var comments = doc.Descendants(\"comments\").FirstOrDefault();\n                foreach (Comment comment in post.Comments)\n                {\n                    try\n                    {\n                        comments.Add(\n                        new XElement(\"comment\",\n                            new XElement(\"author\", comment.Author),\n                            new XElement(\"email\", comment.Email),\n                            new XElement(\"website\", comment.Website),\n                            new XElement(\"ip\", comment.Ip),\n                            new XElement(\"userAgent\", comment.UserAgent),\n                            new XElement(\"date\", comment.PubDate.ToString(\"O\")),\n                            new XElement(\"content\", comment.Content),\n                            new XAttribute(\"isAdmin\", comment.IsAdmin),\n                            new XAttribute(\"isApproved\", comment.IsApproved),\n                            new XAttribute(\"id\", comment.Id)\n                        ));\n                    }\n                    catch (Exception ex)\n                    {\n                        log.LogError(\"error adding comment\", ex);\n                    }\n\n                }\n            }\n\n            using (StringWriter s = new StringWriter())\n            {\n                doc.Save(s, SaveOptions.None);\n\n                return s.GetStringBuilder().ToString();\n            }\n\n        }\n\n        \n\n        public Post Deserialize(string xmlString, string key)\n        {\n            // we need the key passed in here because the xml format adopted from MiniBlog/BlogEngine\n            // does not store the post id in the xml but only as part of the file name\n\n            var doc = XDocument.Parse(xmlString);\n            \n            Post post = new Post()\n            {\n                Id = key,\n                BlogId = ReadValue(doc.Root, \"blogId\"),\n                Title = ReadValue(doc.Root, \"title\"),\n                Author = ReadValue(doc.Root, \"author\"),\n                CorrelationKey = ReadValue(doc.Root, \"correlationkey\"),\n                MetaDescription = ReadValue(doc.Root, \"excerpt\"),\n                Content = ReadValue(doc.Root, \"content\"),\n                ContentType = ReadValue(doc.Root, \"contentType\"),\n                Slug = ReadValue(doc.Root, \"slug\").ToLowerInvariant(),\n                ImageUrl = ReadValue(doc.Root, \"imageUrl\"),\n                ThumbnailUrl = ReadValue(doc.Root, \"thumbnailUrl\"),\n                PubDate = GetNullableDate(doc.Root, \"pubDate\"),\n                LastModified = GetDate(doc.Root, \"lastModified\"),\n                IsPublished = bool.Parse(ReadValue(doc.Root, \"ispublished\", \"true\")),\n                IsFeatured = bool.Parse(ReadValue(doc.Root, \"isFeatured\", \"false\")),\n                AutoTeaser = ReadValue(doc.Root, \"autoTeaser\"),\n                TeaserOverride = ReadValue(doc.Root, \"teaserOverride\"),\n                SuppressTeaser = bool.Parse(ReadValue(doc.Root, \"suppressTeaser\", \"false\")),\n\n                CreatedUtc = GetDate(doc.Root, \"createdUtc\"),\n                CreatedByUser = ReadValue(doc.Root, \"createdByUser\"),\n                LastModifiedByUser = ReadValue(doc.Root, \"lastModifiedByUser\"),\n                DraftAuthor = ReadValue(doc.Root, \"draftAuthor\"),\n                DraftContent = ReadValue(doc.Root, \"draftContent\"),\n                DraftPubDate = GetNullableDate(doc.Root, \"draftPubDate\"),\n                TemplateKey = ReadValue(doc.Root, \"templateKey\"),\n                SerializedModel = ReadValue(doc.Root, \"serializedModel\"),\n                DraftSerializedModel = ReadValue(doc.Root, \"draftSerializedModel\"),\n                Serializer = ReadValue(doc.Root, \"serializer\"),\n                ShowComments = bool.Parse(ReadValue(doc.Root, \"showcomments\", \"true\"))\n\n            };\n\n            LoadCategories(post, doc.Root);\n            LoadComments(post, doc.Root);\n\n            return post;\n\n        }\n\n        protected void LoadCategories(Post post, XElement doc)\n        {\n            XElement categories = doc.Element(\"categories\");\n            if (categories == null)\n                return;\n\n            List<string> list = new List<string>();\n\n            foreach (var node in categories.Elements(\"category\"))\n            {\n                list.Add(node.Value);\n            }\n\n            post.Categories = list;\n        }\n\n        protected void LoadComments(Post post, XElement doc)\n        {\n            var comments = doc.Element(\"comments\");\n\n            if (comments == null)\n                return;\n\n            foreach (var node in comments.Elements(\"comment\"))\n            {\n                Comment comment = new Comment()\n                {\n                    Id = ReadAttribute(node, \"id\"),\n                    Author = ReadValue(node, \"author\"),\n                    Email = ReadValue(node, \"email\"),\n                    Website = ReadValue(node, \"website\"),\n                    Ip = ReadValue(node, \"ip\"),\n                    UserAgent = ReadValue(node, \"userAgent\"),\n                    IsAdmin = bool.Parse(ReadAttribute(node, \"isAdmin\", \"false\")),\n                    IsApproved = bool.Parse(ReadAttribute(node, \"isApproved\", \"true\")),\n                    Content = ReadValue(node, \"content\").Replace(\"\\n\", \"<br />\"),\n                    PubDate = DateTime.Parse(ReadValue(node, \"date\", \"2000-01-01\")),\n                };\n\n                post.Comments.Add(comment);\n            }\n        }\n\n        protected DateTime GetDate(XElement doc, XName name)\n        {\n            if (doc.Element(name) == null)\n                return DateTime.UtcNow;\n\n            DateTime d;\n            try\n            {\n                d = DateTime.ParseExact(\n                    ReadValue(doc, name, DateTime.UtcNow.ToString()),\n                    \"O\",\n                    CultureInfo.InvariantCulture,\n                    DateTimeStyles.AssumeUniversal |\n                    DateTimeStyles.AdjustToUniversal\n                );\n            }\n            catch (FormatException)\n            {\n                try\n                {\n                    d = DateTime.Parse(ReadValue(doc, name));\n                }\n                catch(Exception ex)\n                {\n                    log.LogError($\"failed to parse date so returning current date/time error: {ex.Message}: {ex.StackTrace}\");\n                    d = DateTime.UtcNow;\n                }\n                \n\n            }\n\n            return d;\n        }\n\n        protected DateTime? GetNullableDate(XElement doc, XName name)\n        {\n            if (doc.Element(name) == null)\n                return null;\n\n            var val = ReadValue(doc, name);\n            if(string.IsNullOrWhiteSpace(val)) { return null; }\n\n            DateTime? d;\n            try\n            {\n                d = DateTime.ParseExact(\n                    val,\n                    \"O\",\n                    CultureInfo.InvariantCulture,\n                    DateTimeStyles.AssumeUniversal |\n                    DateTimeStyles.AdjustToUniversal\n                );\n            }\n            catch (FormatException)\n            {\n                try\n                {\n                    d = DateTime.Parse(val);\n                }\n                catch (Exception ex)\n                {\n                    log.LogError($\"failed to parse date from {val} so returning null error: {ex.Message}: {ex.StackTrace}\");\n                    d = null;\n                }\n\n\n            }\n\n            return d;\n        }\n\n        protected string ReadValue(XElement doc, XName name, string defaultValue = \"\")\n        {\n            if (doc.Element(name) != null)\n                return doc.Element(name).Value;\n\n            return defaultValue;\n        }\n\n        protected string ReadAttribute(XElement element, XName name, string defaultValue = \"\")\n        {\n            if (element.Attribute(name) != null)\n                return element.Attribute(name).Value;\n\n            return defaultValue;\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.NoDb/ProjectCommands.cs",
    "content": "﻿// Copyright (c) Source Tree Solutions, LLC. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.\n// Author:                  Joe Audette\n// Created:                 2016-08-04\n// Last Modified:           2016-09-08\n//\n\nusing cloudscribe.SimpleContent.Models;\nusing Microsoft.Extensions.Logging;\nusing NoDb;\nusing System;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace cloudscribe.SimpleContent.Storage.NoDb\n{\n    public class ProjectCommands : IProjectCommands\n    {\n        public ProjectCommands(\n            IBasicCommands<ProjectSettings> pageCommands,\n            IBasicQueries<ProjectSettings> pageQueries,\n            ILogger<ProjectCommands> logger\n            )\n        {\n            commands = pageCommands;\n            query = pageQueries;\n            log = logger;\n        }\n\n        private IBasicCommands<ProjectSettings> commands;\n        private IBasicQueries<ProjectSettings> query;\n        private ILogger log;\n\n        public async Task Create(\n            string projectId,\n            IProjectSettings project,\n            CancellationToken cancellationToken = default(CancellationToken)\n            )\n        {\n            if (string.IsNullOrEmpty(project.Id)) { project.Id = Guid.NewGuid().ToString(); }\n\n            var p = ProjectSettings.FromIProjectSettings(project);\n\n            await commands.CreateAsync(projectId, p.Id, p).ConfigureAwait(false);\n        }\n\n        public async Task Update(\n            string projectId,\n            IProjectSettings project,\n            CancellationToken cancellationToken = default(CancellationToken)\n            )\n        {\n            var p = ProjectSettings.FromIProjectSettings(project);\n            await commands.UpdateAsync(projectId, p.Id, p).ConfigureAwait(false);\n        }\n\n        public async Task Delete(\n            string projectId,\n            string projectKey,\n            CancellationToken cancellationToken = default(CancellationToken)\n            )\n        {\n            await commands.DeleteAsync(projectId, projectKey).ConfigureAwait(false);\n        }\n\n        public async Task<string> CloneToNewProject(\n            string sourceProjectId,\n            string targetProjectId,\n            string newSiteName = null,\n            CancellationToken cancellationToken = default(CancellationToken)\n            )\n        {\n            cancellationToken.ThrowIfCancellationRequested();\n            var sourceProject = await query.FetchAsync(sourceProjectId, sourceProjectId, cancellationToken).ConfigureAwait(false);\n            if (sourceProject == null) throw new InvalidOperationException(\"Project not found\");\n\n            var p = ProjectSettings.FromIProjectSettings(sourceProject);\n            p.Id = targetProjectId;\n            if(!string.IsNullOrWhiteSpace(p.SiteName)) { p.SiteName = newSiteName; } //rename the site (not sure if this setting is used anywhere)\n\n            var destinationProject = await query.FetchAsync(targetProjectId, targetProjectId, cancellationToken).ConfigureAwait(false);\n            if(destinationProject == null)\n            {\n                await commands.CreateAsync(targetProjectId, p.Id, p).ConfigureAwait(false);\n            }\n            else\n            {\n                await commands.UpdateAsync(targetProjectId, p.Id, p).ConfigureAwait(false);\n            }\n            return p.Id;\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.NoDb/ProjectQueries.cs",
    "content": "﻿// Copyright (c) Source Tree Solutions, LLC. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.\n// Author:                  Joe Audette\n// Created:                 2016-04-24\n// Last Modified:           2018-07-07\n// \n\nusing cloudscribe.SimpleContent.Models;\nusing Microsoft.Extensions.Options;\nusing NoDb;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace cloudscribe.SimpleContent.Storage.NoDb\n{\n\n    public class ProjectQueries : IProjectQueries\n    {\n\n        public ProjectQueries(\n            IBasicQueries<ProjectSettings> queries,\n            IOptions<List<ProjectSettings>> projectListAccessor\n            )\n        {\n            configProjects = projectListAccessor.Value;\n            this.queries = queries;\n        }\n\n        private IBasicQueries<ProjectSettings> queries;\n\n        private List<ProjectSettings> configProjects;\n\n        public async Task<IProjectSettings> GetProjectSettings(\n            string projectId,\n            CancellationToken cancellationToken\n            )\n        {\n            cancellationToken.ThrowIfCancellationRequested();\n            var result = configProjects.Where(b => b.Id == projectId).FirstOrDefault();\n            if(result != null) { return result; }\n            result = await queries.FetchAsync(projectId, projectId, cancellationToken);\n            return result;\n        }\n        \n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.NoDb/README.md",
    "content": "# cloudscribe.SimpleContent.Storage.NoDb\n\n[![NuGet](https://img.shields.io/nuget/v/cloudscribe.SimpleContent.Storage.NoDb.svg)](https://www.nuget.org/packages/cloudscribe.SimpleContent.Storage.NoDb)\n[![License: Apache-2.0](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://opensource.org/licenses/Apache-2.0)\n\nNoDb file system storage implementation for cloudscribe.SimpleContent.\n\n## Installation\n\n```shell\nInstall-Package cloudscribe.SimpleContent.Storage.NoDb\n```\n\n## Usage\n\nAdd this package to your ASP.NET Core project to use NoDb file system storage for SimpleContent.\n\n## Contributing\n\nContributions are welcome! Please see the [contributing guidelines](https://github.com/cloudscribe/cloudscribe.SimpleContent/blob/main/CONTRIBUTING.md).\n\n## License\n\nLicensed under the Apache 2.0 License. See the [LICENSE](https://github.com/cloudscribe/cloudscribe.SimpleContent/blob/main/LICENSE) file for details.\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.NoDb/ServiceCollectionExtensions.cs",
    "content": "﻿// Copyright (c) Source Tree Solutions, LLC. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.\n// Author:                  Joe Audette\n// Created:                 2016-02-24\n// Last Modified:           2018-07-02\n// \n\n\nusing cloudscribe.SimpleContent.Models;\nusing cloudscribe.SimpleContent.Storage.NoDb;\nusing Microsoft.Extensions.DependencyInjection.Extensions;\nusing NoDb;\n\nnamespace Microsoft.Extensions.DependencyInjection\n{\n    public static class ServiceCollectionExtensions\n    {\n        public static IServiceCollection AddNoDbStorageForSimpleContent(\n            this IServiceCollection services,\n            bool useSingletons = false\n            )\n        {\n            if(useSingletons)\n            {\n                services.TryAddSingleton<IKeyGenerator, DefaultKeyGenerator>();\n            }\n            else\n            {\n                services.TryAddScoped<IKeyGenerator, DefaultKeyGenerator>();\n            }\n            \n          \n            services.AddNoDbProjectStorage(useSingletons);\n            services.AddNoDbPostStorage(useSingletons);\n            services.AddNoDbPageStorage(useSingletons);\n            services.AddScoped<IStorageInfo, StorageInfo>();\n\n            if (useSingletons)\n            {\n                services.AddNoDbSingleton<ContentHistory>();\n                services.TryAddSingleton<IContentHistoryCommandsSingleton, ContentHistoryCommands>();\n                services.TryAddSingleton<IContentHistoryQueriesSingleton, ContentHistoryQueries>();\n            }\n            else\n            {\n                services.AddNoDb<ContentHistory>();\n                \n            }\n\n            services.TryAddScoped<IContentHistoryCommands, ContentHistoryCommands>();\n            services.TryAddScoped<IContentHistoryQueries, ContentHistoryQueries>();\n\n\n            return services;\n        }\n\n        public static IServiceCollection AddNoDbPageStorage(\n            this IServiceCollection services,\n            bool useSingletons = false\n            )\n        {\n            if(useSingletons)\n            {\n                services.AddSingleton<PageJsonSerializer>();\n                services.AddSingleton<PageMarkdownSerializer>();\n\n                services.TryAddSingleton<IStringSerializer<Page>, PageCompositeSerializer>();\n                services.TryAddSingleton<IStoragePathResolver<Page>, PageStoragePathResolver>();\n\n                services.AddNoDbSingleton<Page>();\n                services.TryAddSingleton<IPageQueriesSingleton, PageQueries>();\n                services.TryAddSingleton<IPageCommandsSingleton, PageCommands>();\n            }\n            else\n            {\n                services.AddScoped<PageJsonSerializer>();\n                services.AddScoped<PageMarkdownSerializer>();\n\n                services.TryAddScoped<IStringSerializer<Page>, PageCompositeSerializer>();\n                services.TryAddScoped<IStoragePathResolver<Page>, PageStoragePathResolver>();\n\n                services.AddNoDb<Page>();\n                \n            }\n\n            services.TryAddScoped<IPageQueries, PageQueries>();\n            services.TryAddScoped<IPageCommands, PageCommands>();\n\n\n            return services;\n        }\n\n        public static IServiceCollection AddNoDbPostStorage(\n            this IServiceCollection services,\n            bool useSingletons = false\n            )\n        {\n            if(useSingletons)\n            {\n                services.AddSingleton<PostXmlSerializer>();\n                services.AddSingleton<PostMarkdownSerializer>();\n                \n                services.TryAddSingleton<IStringSerializer<Post>, PostCompositeSerializer>();\n                services.TryAddSingleton<IStoragePathResolver<Post>, PostStoragePathResolver>();\n\n                services.AddNoDbSingleton<Post>();\n\n                services.TryAddSingleton<IPostQueriesSingleton, PostQueries>();\n                services.TryAddSingleton<IPostCommandsSingleton, PostCommands>();\n\n                services.TryAddSingleton<PostCache, PostCache>();\n            }\n            else\n            {\n                services.AddScoped<PostXmlSerializer>();\n                services.AddScoped<PostMarkdownSerializer>();\n\n                //services.TryAddScoped<IStringSerializer<Post>, PostXmlSerializer>();\n                services.TryAddScoped<IStringSerializer<Post>, PostCompositeSerializer>();\n                services.TryAddScoped<IStoragePathResolver<Post>, PostStoragePathResolver>();\n\n                services.AddNoDb<Post>();\n                \n                services.TryAddScoped<PostCache, PostCache>();\n            }\n\n            services.TryAddScoped<IPostQueries, PostQueries>();\n            services.TryAddScoped<IPostCommands, PostCommands>();\n\n            return services;\n        }\n\n        public static IServiceCollection AddNoDbProjectStorage(\n            this IServiceCollection services,\n            bool useSingletons = false\n            )\n        {\n            if (useSingletons)\n            {\n                services.AddNoDbSingleton<ProjectSettings>();\n                services.TryAddSingleton<IProjectQueries, ProjectQueries>();\n                services.TryAddSingleton<IProjectCommands, ProjectCommands>();\n            }\n            else\n            {\n                services.AddNoDb<ProjectSettings>();\n                services.TryAddScoped<IProjectQueries, ProjectQueries>();\n                services.TryAddScoped<IProjectCommands, ProjectCommands>();\n            }\n            \n\n            return services;\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.NoDb/StorageInfo.cs",
    "content": "﻿using cloudscribe.SimpleContent.Models;\n\nnamespace cloudscribe.SimpleContent.Storage.NoDb\n{\n    public class StorageInfo : IStorageInfo\n    {\n        public string StoragePlatform { get { return \"NoDb file system storage\"; } }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.NoDb/YamlHelper.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Text;\nusing System.Text.RegularExpressions;\n\nnamespace cloudscribe.SimpleContent.Storage.NoDb\n{\n    public class YamlHelper\n    {\n\n        static readonly Regex YamlFrontMatterRegex = new Regex(\"^---[\\n,\\r\\n].*?^(---[\\n,\\r\\n]|...[\\n,\\r\\n])\", RegexOptions.Singleline | RegexOptions.Multiline);\n\n\n        public Match MatchFrontMatter (string markdownWithYaml)\n        {\n            return YamlFrontMatterRegex.Match(markdownWithYaml);\n        }\n\n        public string RemoveFrontMatterDelimiters(string source,\n            string beginDelim = \"---\",\n            string endDelim = \"\\n---\")\n        {\n            if (string.IsNullOrEmpty(source))\n                return string.Empty;\n\n            int at1, at2;\n            at1 = source.IndexOf(beginDelim, 0, source.Length, StringComparison.OrdinalIgnoreCase);\n            if (at1 == -1)\n                return string.Empty;\n\n            at2 = source.IndexOf(endDelim, at1 + beginDelim.Length, StringComparison.OrdinalIgnoreCase);\n\n            if (at1 > -1 && at2 > 1)\n            {\n                return source.Substring(at1 + beginDelim.Length, at2 - at1 - beginDelim.Length);\n            }\n\n            return string.Empty;\n        }\n\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.NoDb/YamlPage.cs",
    "content": "﻿using cloudscribe.SimpleContent.Models;\nusing System;\nusing System.Collections.Generic;\nusing YamlDotNet.Serialization;\n\nnamespace cloudscribe.SimpleContent.Storage.NoDb\n{\n    public class YamlPage : IPage\n    {\n        public YamlPage()\n        {\n            Categories = new List<string>();\n            Comments = new List<IComment>();\n            Resources = new List<PageResource>();\n            //TheComments = new List<Comment>();\n        }\n\n        [YamlMember(Order = 1)]\n        public string Id { get; set; } = string.Empty;\n\n        [YamlMember(Order = 2)]\n        public string CorrelationKey { get; set; } = string.Empty;\n\n        [YamlMember(Order = 3)]\n        public string ProjectId { get; set; } = string.Empty;\n\n        [YamlMember(Order = 4)]\n        public string Slug { get; set; } = string.Empty;\n\n        [YamlMember(Order = 5)]\n        public string ExternalUrl { get; set; } = string.Empty;\n\n        [YamlMember(Order = 6)]\n        public string ContentType { get; set; } = \"html\";\n\n        [YamlMember(Order = 7)]\n        public string ViewRoles { get; set; } = string.Empty;\n\n        [YamlMember(Order = 8)]\n        public string ParentId { get; set; } = string.Empty;\n\n        [YamlMember(Order = 9)]\n        public string ParentSlug { get; set; } = string.Empty;\n\n        [YamlMember(Order = 10)]\n        public int PageOrder { get; set; } = 3;\n\n        [YamlMember(Order = 11)]\n        public string Title { get; set; } = string.Empty;\n\n        [YamlMember(Order = 12)]\n        public string Author { get; set; } = string.Empty;\n\n        [YamlMember(Order = 13)]\n        public string MetaDescription { get; set; } = string.Empty;\n\n        [YamlMember(Order = 14)]\n        public string MetaJson { get; set; }\n\n        [YamlMember(Order = 15)]\n        public string MetaHtml { get; set; }\n\n        [YamlMember(Order = 16)]\n        public bool IsPublished { get; set; } = true;\n\n        [YamlMember(Order = 17)]\n        public DateTime? PubDate { get; set; } = DateTime.UtcNow;\n\n        [YamlMember(Order = 18)]\n        public DateTime LastModified { get; set; } = DateTime.UtcNow;\n\n        [YamlMember(Order = 19)]\n        public bool MenuOnly { get; set; } = false;\n\n        [YamlMember(Order = 20)]\n        public bool ShowMenu { get; set; } = false;\n\n        [YamlMember(Order = 21)]\n        public bool ShowHeading { get; set; } = true;\n\n        [YamlMember(Order = 22)]\n        public bool ShowPubDate { get; set; } = false;\n\n        [YamlMember(Order = 23)]\n        public bool ShowLastModified { get; set; } = false;\n\n        [YamlMember(Order = 24)]\n        public bool ShowCategories { get; set; } = false;\n\n        [YamlMember(Order = 25)]\n        public bool ShowComments { get; set; } = false;\n\n        [YamlMember(Order = 26)]\n        public string MenuFilters { get; set; }\n\n        [YamlMember(Order = 27)]\n        public bool DisableEditor { get; set; } = false;\n\n        [YamlMember(Order = 28)]\n        public List<PageResource> Resources { get; set; }\n\n        [YamlMember(Order = 29)]\n        public List<string> Categories { get; set; }\n\n        //[YamlMember(Order = 30, Alias = \"Comments\")]\n        //public List<Comment> TheComments { get; set; }\n\n\n        // new fields 2018-06-20\n        [YamlMember(Order = 30)]\n        public DateTime CreatedUtc { get; set; } = DateTime.UtcNow;\n\n        [YamlMember(Order = 31)]\n        public string CreatedByUser { get; set; }\n\n        [YamlMember(Order = 32)]\n        public string LastModifiedByUser { get; set; }\n\n        [YamlMember(Order = 33)]\n        public string DraftContent { get; set; }\n\n        [YamlMember(Order = 34)]\n        public string DraftAuthor { get; set; }\n\n        [YamlMember(Order = 35)]\n        public DateTime? DraftPubDate { get; set; }\n\n        [YamlMember(Order = 36)]\n        public string TemplateKey { get; set; }\n\n        [YamlMember(Order = 37)]\n        public string SerializedModel { get; set; }\n\n        [YamlMember(Order = 38)]\n        public string DraftSerializedModel { get; set; }\n\n        [YamlMember(Order = 39)]\n        public string Serializer { get; set; }\n\n        [YamlMember(Order = 40)]\n        public bool? ShowCreatedBy { get; set; }\n\n        [YamlMember(Order = 41)]\n        public bool? ShowCreatedDate { get; set; }\n\n        [YamlMember(Order = 42)]\n        public bool? ShowLastModifiedBy { get; set; }\n\n        [YamlMember(Order = 43)]\n        public bool? ShowLastModifiedDate { get; set; }\n\n        [YamlMember(Order = 44)]\n        public string Script { get; set; } = string.Empty;\n\n        [YamlIgnore]\n        public string Content { get; set; } = string.Empty;\n        [YamlIgnore]\n        public List<IComment> Comments { get; set; }\n\n\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.NoDb/YamlPost.cs",
    "content": "﻿using cloudscribe.SimpleContent.Models;\nusing System;\nusing System.Collections.Generic;\nusing YamlDotNet.Serialization;\n\nnamespace cloudscribe.SimpleContent.Storage.NoDb\n{\n    public class YamlPost : IPost\n    {\n        public YamlPost()\n        {\n            Categories = new List<string>();\n            Comments = new List<IComment>();\n            TheComments = new List<Comment>();\n        }\n\n        [YamlMember(Order = 1)]\n        public string Id { get; set; }\n\n        [YamlMember(Order = 2)]\n        public string BlogId { get; set; }\n\n        [YamlMember(Order = 3)]\n        public string CorrelationKey { get; set; } = string.Empty;\n\n        [YamlMember(Order = 4)]\n        public string Slug { get; set; }\n\n        [YamlMember(Order = 5)]\n        public string ContentType { get; set; } = \"html\";\n\n        [YamlMember(Order = 6)]\n        public string Title { get; set; }\n\n        [YamlMember(Order = 7)]\n        public string Author { get; set; }\n        \n        [YamlMember(Order = 8)]\n        public string MetaDescription { get; set; }\n\n        [YamlMember(Order = 9)]\n        public string MetaJson { get; set; }\n        [YamlMember(Order = 10)]\n        public string MetaHtml { get; set; }\n        \n        [YamlMember(Order = 11)]\n        public bool IsPublished { get; set; }\n\n        [YamlMember(Order = 12)]\n        public DateTime? PubDate { get; set; }\n\n        [YamlMember(Order = 13)]\n        public DateTime LastModified { get; set; } = DateTime.UtcNow;\n\n        [YamlMember(Order = 14)]\n        public bool IsFeatured { get; set; }\n\n        [YamlMember(Order = 15)]\n        public string TeaserOverride { get; set; }\n        [YamlMember(Order = 16)]\n        public bool SuppressTeaser { get; set; }\n\n        [YamlMember(Order = 17)]\n        public List<string> Categories { get; set; }\n\n        [YamlMember(Order = 18, Alias = \"Comments\")]\n        public List<Comment> TheComments { get; set; }\n\n        // new fields 2018-06-20\n        [YamlMember(Order = 19)]\n        public DateTime CreatedUtc { get; set; } = DateTime.UtcNow;\n\n        [YamlMember(Order = 20)]\n        public string CreatedByUser { get; set; }\n\n        [YamlMember(Order = 21)]\n        public string LastModifiedByUser { get; set; }\n\n        [YamlMember(Order = 22)]\n        public string DraftContent { get; set; }\n\n        [YamlMember(Order = 23)]\n        public string DraftAuthor { get; set; }\n\n        [YamlMember(Order = 24)]\n        public DateTime? DraftPubDate { get; set; }\n\n        [YamlMember(Order = 25)]\n        public string TemplateKey { get; set; }\n\n        [YamlMember(Order = 26)]\n        public string SerializedModel { get; set; }\n\n        [YamlMember(Order = 27)]\n        public string DraftSerializedModel { get; set; }\n\n        [YamlMember(Order = 28)]\n        public string Serializer { get; set; }\n\n        [YamlMember(Order = 29)]\n        public string AutoTeaser { get; set; }\n\n        [YamlMember(Order = 30)]\n        public bool ShowComments { get; set; } = true;\n\n        [YamlMember(Order = 31)]\n        public string Script { get; set; } = string.Empty;\n\n        [YamlIgnore]\n        public List<IComment> Comments { get; set; }\n\n        [YamlIgnore]\n        public string Content { get; set; }\n\n\n        // not currently used but could be later\n        public string ImageUrl { get; set; }\n        public string ThumbnailUrl { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Storage.NoDb/cloudscribe.SimpleContent.Storage.NoDb.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <Description>cloudscribe.SimpleContent.Storage implemented with NoDb file system storage</Description>\n    <Version>10.1.0</Version>\n    <TargetFramework>net10.0</TargetFramework>\n    <Authors>Joe Audette</Authors>\n    <PackageTags>cloudscribe;blog;json</PackageTags>\n    <PackageIcon>icon.png</PackageIcon>\n    <PackageProjectUrl>https://github.com/cloudscribe/cloudscribe.SimpleContent</PackageProjectUrl>\n    <PackageLicenseExpression>Apache-2.0</PackageLicenseExpression>\n    <RepositoryUrl>https://github.com/cloudscribe/cloudscribe.SimpleContent.git</RepositoryUrl>\n    <RepositoryType>git</RepositoryType>\n    <PackageReadmeFile>README.md</PackageReadmeFile>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <None Include=\"icon.png\" Pack=\"true\" PackagePath=\"\\\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <ProjectReference Include=\"..\\cloudscribe.SimpleContent.Models\\cloudscribe.SimpleContent.Models.csproj\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"NoDb\" Version=\"1.2.2\" />\n    <PackageReference Include=\"YamlDotNet\" Version=\"15.1.6\" />\n\n    <PackageReference Include=\"Microsoft.Extensions.Options\" Version=\"10.0.0\" />\n    <PackageReference Include=\"Microsoft.Extensions.Caching.Abstractions\" Version=\"10.0.0\" />\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"README.md\" Pack=\"true\" PackagePath=\"/\" />\n  </ItemGroup>\n</Project>\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Syndication/README.md",
    "content": "# cloudscribe.SimpleContent.Syndication\n\n[![NuGet](https://img.shields.io/nuget/v/cloudscribe.SimpleContent.Syndication.svg)](https://www.nuget.org/packages/cloudscribe.SimpleContent.Syndication)\n[![License: Apache-2.0](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://opensource.org/licenses/Apache-2.0)\n\nA .NET class library for adding RSS and Atom feed syndication support to cloudscribe.SimpleContent projects. This package provides syndication endpoints and helpers for exposing your blog or content as standards-compliant feeds, making it easy for users and applications to subscribe to updates.\n\n## Features\n- Generate RSS and Atom feeds for blog posts and content\n- Integrates with cloudscribe.SimpleContent and ASP.NET Core\n- Extensible for custom feed requirements\n\n## Installation\n\n```shell\nInstall-Package cloudscribe.SimpleContent.Syndication\n```\n\n## Usage\n- Add this package to your ASP.NET Core project using SimpleContent.\n- Configure and expose feed endpoints for your content or blog.\n- Supports both RSS and Atom formats out of the box.\n\n## License\n\nLicensed under the Apache 2.0 License. See the [LICENSE](https://github.com/cloudscribe/cloudscribe.SimpleContent/blob/main/LICENSE) file for details.\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Syndication/RssChannelProvider.cs",
    "content": "﻿// Copyright (c) Source Tree Solutions, LLC. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.\n// Author:                  Joe Audette\n// Created:                 2016-04-02\n// Last Modified:           2018-06-30\n// \n\nusing cloudscribe.SimpleContent.Models;\nusing cloudscribe.SimpleContent.Web.Services;\nusing cloudscribe.Syndication.Models.Rss;\nusing Microsoft.AspNetCore.Http;\nusing Microsoft.AspNetCore.Mvc;\nusing Microsoft.AspNetCore.Mvc.Infrastructure;\nusing Microsoft.AspNetCore.Mvc.Routing;\nusing Microsoft.AspNetCore.Routing;\nusing Microsoft.Extensions.Localization;\nusing System;\nusing System.Collections.Generic;\nusing System.Globalization;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace cloudscribe.SimpleContent.Syndication\n{\n    public class RssChannelProvider : IChannelProvider\n    {\n        public RssChannelProvider(\n            IProjectService projectService,\n            IBlogService blogService,\n            IBlogUrlResolver blogUrlResolver,\n            IBlogRoutes blogRoutes,\n            IHttpContextAccessor contextAccessor,\n            IUrlHelperFactory urlHelperFactory,\n            IContentProcessor contentProcessor,\n            IStringLocalizer<RssChannelProvider> localizer\n            )\n        {\n            ProjectService = projectService;\n            BlogService = blogService;\n            BlogUrlResolver = blogUrlResolver;\n            ContextAccessor = contextAccessor;\n            UrlHelperFactory = urlHelperFactory;\n            ContentProcessor = contentProcessor;\n            BlogRoutes = blogRoutes;\n            sr = localizer;\n        }\n\n        protected IUrlHelperFactory UrlHelperFactory { get; private set; }\n        protected IHttpContextAccessor ContextAccessor { get; private set; }\n        protected IProjectService ProjectService { get; private set; }\n        protected IBlogService BlogService { get; private set; }\n        protected IBlogRoutes BlogRoutes { get; private set; }\n        protected IContentProcessor ContentProcessor { get; private set; }\n        protected IBlogUrlResolver BlogUrlResolver { get; private set; }\n        protected IStringLocalizer sr { get; private set; }\n\n        public string Name { get; } = \"cloudscribe.SimpleContent.Syndication.RssChannelProvider\";\n\n        public virtual async Task<RssChannel> GetChannel(CancellationToken cancellationToken = default(CancellationToken))\n        {\n\n            var project = await ProjectService.GetCurrentProjectSettings();\n            if(project == null) { return null; }\n\n            var itemsToGet = project.DefaultFeedItems;\n            var requestedFeedItems = ContextAccessor.HttpContext?.Request.Query[\"maxItems\"].ToString();\n            if(!string.IsNullOrWhiteSpace(requestedFeedItems))\n            {\n                int.TryParse(requestedFeedItems, out itemsToGet);\n                if(itemsToGet > project.MaxFeedItems) { itemsToGet = project.MaxFeedItems; }\n            }\n            \n            var posts = await BlogService.GetRecentPosts(itemsToGet);\n            if(posts == null) { return null; }\n\n            var channel = new RssChannel\n            {\n                Title = project.Title,\n                Copyright = project.CopyrightNotice,\n                Generator = Name,\n                RemoteFeedUrl = project.RemoteFeedUrl,\n                RemoteFeedProcessorUseAgentFragment = project.RemoteFeedProcessorUseAgentFragment\n            };\n            if (!string.IsNullOrEmpty(project.Description))\n            {\n                channel.Description = project.Description;\n            }\n            else\n            {\n                // prevent error, channel desc cannot be empty\n                channel.Description = sr[\"Welcome to my blog\"];\n            }\n            \n            if(!string.IsNullOrEmpty(project.ChannelCategoriesCsv))\n            {\n                var channelCats = project.ChannelCategoriesCsv.Split(',');\n                foreach(var cat in channelCats)\n                {\n                    channel.Categories.Add(new RssCategory(cat));\n                }\n            }\n            \n            // Get ActionContext from HttpContext for URL generation\n            var actionContext = new ActionContext(\n                ContextAccessor.HttpContext,\n                ContextAccessor.HttpContext.GetRouteData(),\n                new Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor()\n            );\n            var urlHelper = UrlHelperFactory.GetUrlHelper(actionContext);\n\n            if (!string.IsNullOrEmpty(project.Image))\n            {\n                channel.Image.Url = new Uri(urlHelper.Content(project.Image));\n            }\n            if(!string.IsNullOrEmpty(project.LanguageCode))\n            {\n                channel.Language = new CultureInfo(project.LanguageCode);\n            }\n\n            var baseUrl = string.Concat(\n                        ContextAccessor.HttpContext.Request.Scheme,\n                        \"://\",\n                        ContextAccessor.HttpContext.Request.Host.ToUriComponent()\n                        );\n\n            // asp.net bug? the comments for this method say it returns an absolute fully qualified url but it returns relative\n            // looking at latest code seems ok so maybe just a bug in rc1\n            //https://github.com/aspnet/Mvc/blob/dev/src/Microsoft.AspNetCore.Mvc.Core/UrlHelperExtensions.cs\n            //https://github.com/aspnet/Mvc/blob/dev/src/Microsoft.AspNetCore.Mvc.Core/Routing/UrlHelper.cs\n\n            var indexUrl = urlHelper.RouteUrl(BlogRoutes.BlogIndexRouteName);\n            if(indexUrl == null)\n            {\n                indexUrl = urlHelper.Action(\"Index\", \"Blog\");\n            }\n            \n            if (indexUrl.StartsWith(\"/\"))\n            {\n                indexUrl = string.Concat(baseUrl, indexUrl);\n            }\n            channel.Link = new Uri(indexUrl);\n            if(!string.IsNullOrEmpty(project.ManagingEditorEmail))\n            {\n                channel.ManagingEditor = project.ManagingEditorEmail;\n            }\n\n            if(!string.IsNullOrEmpty(project.ChannelRating))\n            {\n                channel.Rating = project.ChannelRating;\n            }\n            \n            var feedUrl = string.Concat(\n                        ContextAccessor.HttpContext.Request.Scheme,\n                        \"://\",\n                        ContextAccessor.HttpContext.Request.Host.ToUriComponent(),\n                        ContextAccessor.HttpContext.Request.PathBase.ToUriComponent(),\n                        ContextAccessor.HttpContext.Request.Path.ToUriComponent(),\n                        ContextAccessor.HttpContext.Request.QueryString.ToUriComponent());\n            channel.SelfLink = new Uri(feedUrl);\n\n            channel.TimeToLive = project.ChannelTimeToLive;\n            if(!string.IsNullOrEmpty(project.WebmasterEmail))\n            {\n                channel.Webmaster = project.WebmasterEmail;\n            }\n           \n            DateTime mostRecentPubDate = DateTime.MinValue;\n            var items = new List<RssItem>();\n            foreach(var post in posts)\n            {\n                if(!post.PubDate.HasValue) { continue; }\n\n                if(post.PubDate.Value > mostRecentPubDate) { mostRecentPubDate = post.PubDate.Value; }\n                var rssItem = new RssItem\n                {\n                    Author = post.Author\n                };\n\n                if (post.Categories.Count > 0)\n                {\n                    foreach(var c in post.Categories)\n                    {\n                        rssItem.Categories.Add(new RssCategory(c));\n                    }\n                }\n\n                var postUrl = await BlogUrlResolver.ResolvePostUrl(post, project).ConfigureAwait(false);\n\n                if (string.IsNullOrEmpty(postUrl))\n                {\n                    //TODO: log \n                    continue;\n                }\n\n                if (postUrl.StartsWith(\"/\"))\n                {\n                    //postUrl = urlHelper.Content(postUrl);\n                    postUrl = string.Concat(\n                        ContextAccessor.HttpContext.Request.Scheme,\n                        \"://\",\n                        ContextAccessor.HttpContext.Request.Host.ToUriComponent(),\n                        postUrl);\n                }\n\n                var filteredResult = ContentProcessor.FilterHtmlForRss(post, project, baseUrl);\n                rssItem.Description = filteredResult.FilteredContent;\n                if(!filteredResult.IsFullContent)\n                {\n                    var readMore = \" <a href='\" + postUrl + \"'>\" + sr[\"...read more\"] + \"</a>\";\n                    rssItem.Description += readMore;\n                }\n                \n                //rssItem.Enclosures\n                \n                rssItem.Guid = new RssGuid(postUrl,true);\n                rssItem.Link = new Uri(postUrl);\n                rssItem.PublicationDate = post.PubDate.Value;\n                //rssItem.Source\n                rssItem.Title = post.Title;\n               \n                items.Add(rssItem);\n\n            }\n\n            channel.PublicationDate = mostRecentPubDate;\n            channel.Items = items;\n\n            return channel;\n        }\n\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Syndication/ServiceCollectionExtensions.cs",
    "content": "﻿using cloudscribe.SimpleContent.Syndication;\nusing cloudscribe.Syndication.Models.Rss;\nusing cloudscribe.Versioning;\nusing Microsoft.Extensions.DependencyInjection.Extensions;\n\nnamespace Microsoft.Extensions.DependencyInjection\n{\n    public static class ServiceCollectionExtensions\n    {\n        public static IServiceCollection AddSimpleContentRssSyndiction(this IServiceCollection services)\n        {\n            services.TryAddScoped<IChannelProvider, RssChannelProvider>();\n            services.AddScoped<IVersionProvider, VersionProvider>();\n            return services;\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Syndication/VersionProvider.cs",
    "content": "﻿using cloudscribe.Versioning;\nusing System;\nusing System.Reflection;\n\nnamespace cloudscribe.SimpleContent.Syndication\n{\n    public class VersionProvider : IVersionProvider\n    {\n        private Assembly assembly = typeof(RssChannelProvider).Assembly;\n\n        public string Name\n        {\n            get { return assembly.GetName().Name; }\n\n        }\n\n        public Guid ApplicationId { get { return new Guid(\"4284486d-6573-4a99-868d-56fec9f6af48\"); } }\n\n        public Version CurrentVersion\n        {\n\n            get\n            {\n\n                var version = new Version(2, 0, 0, 0);\n                var versionString = assembly.GetCustomAttribute<AssemblyFileVersionAttribute>().Version;\n                if (!string.IsNullOrWhiteSpace(versionString))\n                {\n                    Version.TryParse(versionString, out version);\n                }\n\n                return version;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Syndication/cloudscribe.SimpleContent.Syndication.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <Description>cloudscribe.SimpleContent.Syndication Class Library</Description>\n    <Version>10.1.0</Version>\n    <TargetFramework>net10.0</TargetFramework>\n    <Authors>Joe Audette</Authors>\n    <PackageTags>syndication;rss;atom;cloudscribe</PackageTags>\n    <PackageIcon>icon.png</PackageIcon>\n    <PackageProjectUrl>https://github.com/cloudscribe/cloudscribe.SimpleContent</PackageProjectUrl>\n    <PackageLicenseExpression>Apache-2.0</PackageLicenseExpression>\n    <RepositoryUrl>https://github.com/cloudscribe/cloudscribe.SimpleContent.git</RepositoryUrl>\n    <RepositoryType>git</RepositoryType>\n    <PackageReadmeFile>README.md</PackageReadmeFile>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <None Include=\"icon.png\" Pack=\"true\" PackagePath=\"\\\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <FrameworkReference Include=\"Microsoft.AspNetCore.App\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <ProjectReference Include=\"..\\cloudscribe.SimpleContent.Models\\cloudscribe.SimpleContent.Models.csproj\" />\n    <ProjectReference Include=\"..\\cloudscribe.SimpleContent.Web\\cloudscribe.SimpleContent.Web.csproj\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"cloudscribe.Syndication.Web\" Version=\"10.1.0\" />\n    <PackageReference Include=\"Microsoft.Extensions.DependencyInjection.Abstractions\" Version=\"10.0.0\" />\n    <PackageReference Include=\"cloudscribe.Versioning\" Version=\"10.1.0\" />\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"README.md\" Pack=\"true\" PackagePath=\"/\" />\n  </ItemGroup>\n</Project>\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Web/ClaimsPrincipalExtensions.cs",
    "content": "﻿// Copyright (c) Source Tree Solutions, LLC. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.\n// Author:\t\t\t\t\tJoe Audette\n// Created:\t\t\t\t\t2016-02-09\n// Last Modified:\t\t\t2016-08-15\n// \n\nusing System;\nusing System.Security.Claims;\nusing Microsoft.AspNetCore.Authorization;\nusing System.Threading.Tasks;\nusing cloudscribe.SimpleContent.Models;\n\nnamespace cloudscribe.SimpleContent.Web\n{\n    public static class ClaimsPrincipalExtensions\n    {\n\n        //public static string GetEmail(this ClaimsPrincipal principal)\n        //{\n        //    if (principal == null)\n        //    {\n        //        throw new ArgumentNullException(nameof(principal));\n        //    }\n        //    var claim = principal.FindFirst(\"Email\");\n        //    return claim != null ? claim.Value : null;\n        //}\n\n        public static string GetUserDisplayName(this ClaimsPrincipal principal)\n        {\n            if (principal == null)\n            {\n                throw new ArgumentNullException(nameof(principal));\n            }\n            var claim = principal.FindFirst(\"DisplayName\");\n            return claim != null ? claim.Value : null;\n        }\n\n        public static string GetProjectId(this ClaimsPrincipal principal)\n        {\n            if (principal == null)\n            {\n                throw new ArgumentNullException(nameof(principal));\n            }\n            var claim = principal.FindFirst(ProjectConstants.ContentEditorClaimType);\n\n\n            return claim != null ? claim.Value : null;\n        }\n\n        public static bool CanEditProject(this ClaimsPrincipal principal, string projectId)\n        {\n            if (principal == null)\n            {\n                throw new ArgumentNullException(nameof(principal));\n            }\n            var claim = principal.FindFirst(ProjectConstants.ContentEditorClaimType);\n            if(claim == null) { return false; }\n            if(claim.Value == projectId) { return true; }\n            return false;\n        }\n\n        public static async Task<bool> CanEditPages(\n            this ClaimsPrincipal principal, \n            string projectId,\n            IAuthorizationService authorizationService\n            )\n        {\n            if (principal == null)\n            {\n                throw new ArgumentNullException(nameof(principal));\n            }\n            if (principal.CanEditProject(projectId)) return true;\n\n            var claim = principal.FindFirst(ProjectConstants.PageEditorClaimType);\n            if (claim != null && claim.Value == projectId) { return true; }\n           \n            if(authorizationService != null)\n            {\n                try\n                {\n                    var result = await authorizationService.AuthorizeAsync(principal, ProjectConstants.PageEditPolicy).ConfigureAwait(false);\n                    return result.Succeeded;\n                }\n                catch(InvalidOperationException) { }\n                \n            }\n            return false;\n        }\n\n        public static async Task<bool> CanEditBlog(\n            this ClaimsPrincipal principal, \n            string projectId,\n            IAuthorizationService authorizationService\n            )\n        {\n            if (principal == null)\n            {\n                throw new ArgumentNullException(nameof(principal));\n            }\n            if (principal.CanEditProject(projectId)) return true;\n\n            var claim = principal.FindFirst(ProjectConstants.BlogEditorClaimType);\n            if (claim != null && claim.Value == projectId) { return true; }\n\n            if (authorizationService != null)\n            {\n                try\n                {\n                    var result = await authorizationService.AuthorizeAsync(principal, ProjectConstants.BlogEditPolicy).ConfigureAwait(false);\n                    return result.Succeeded;\n                }\n                catch (InvalidOperationException) { }\n\n            }\n\n            return false;\n        }\n\n        public static bool IsInRoles(this ClaimsPrincipal principal, string allowedRolesCsv)\n        {\n            // Administraotors can not be blocked access to anything\n            if (principal.IsInRole(\"Administrators\")) return true;\n\n            if (string.IsNullOrEmpty(allowedRolesCsv)) { return true; } // empty indicates no role filtering\n            string[] roles;\n            // in some cases we are using semicolon separated not comma\n            if (allowedRolesCsv.Contains(\";\"))\n            {\n                roles = allowedRolesCsv.Split(';');\n            }\n            else\n            {\n                roles = allowedRolesCsv.Split(',');\n            }\n            if (roles.Length == 0) { return true; }\n\n            //if (!principal.IsSignedIn()) { return false; }\n\n            foreach (string role in roles)\n            {\n                if (role.Length == 0) continue;\n                if (role == \"All Users\") { return true; }\n                if (principal.IsInRole(role)) { return true; }\n            }\n\n\n            return false;\n\n        }\n\n\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Web/Controllers/BlogController.cs",
    "content": "﻿// Copyright (c) Source Tree Solutions, LLC. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.\n// Author:                  Joe Audette\n// Created:                 2016-02-09\n// Last Modified:           2019-07-03\n// \n\nusing cloudscribe.DateTimeUtils;\nusing cloudscribe.SimpleContent.Models;\nusing cloudscribe.SimpleContent.Models.Versioning;\nusing cloudscribe.SimpleContent.Web.Services;\nusing cloudscribe.SimpleContent.Web.ViewModels;\nusing cloudscribe.Web.Common.Extensions;\nusing cloudscribe.Web.Common.Recaptcha;\nusing cloudscribe.Web.Navigation;\nusing MediatR;\nusing Microsoft.AspNetCore.Authorization;\nusing Microsoft.AspNetCore.Diagnostics;\nusing Microsoft.AspNetCore.Http;\nusing Microsoft.AspNetCore.Mvc;\nusing Microsoft.AspNetCore.Routing;\nusing Microsoft.Extensions.Localization;\nusing Microsoft.Extensions.Logging;\nusing Microsoft.Extensions.Options;\nusing System;\nusing System.Globalization;\nusing System.Linq;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace cloudscribe.SimpleContent.Web.Mvc.Controllers\n{\n    public class BlogController : Controller\n    {\n\n        public BlogController(\n            IMediator mediator,\n            IProjectService projectService,\n            IBlogService blogService,\n            IBlogUrlResolver blogUrlResolver,\n            IBlogRoutes blogRoutes,\n            IContentProcessor contentProcessor,\n            IProjectEmailService emailService,\n            IAuthorizationService authorizationService,\n            IAuthorNameResolver authorNameResolver,\n            IContentTemplateService templateService,\n            IContentHistoryCommands historyCommands,\n            IContentHistoryQueries historyQueries,\n            ITimeZoneHelper timeZoneHelper,\n            ITimeZoneIdResolver timeZoneIdResolver,\n            IRecaptchaServerSideValidator recaptchaServerSideValidator,\n            IStringLocalizer<SimpleContent> localizer,\n            IOptions<BlogEditOptions> configOptionsAccessor,\n            ILogger<BlogController> logger\n            \n            )\n        {\n            Mediator = mediator;\n            ProjectService = projectService;\n            BlogService = blogService;\n            BlogUrlResolver = blogUrlResolver;\n            ContentProcessor = contentProcessor;\n            TemplateService = templateService;\n            BlogRoutes = blogRoutes;\n            AuthorNameResolver = authorNameResolver;\n            HistoryCommands = historyCommands;\n            HistoryQueries = historyQueries;\n            EmailService = emailService;\n            AuthorizationService = authorizationService;\n            TimeZoneHelper = timeZoneHelper;\n            TimeZoneIdResolver = timeZoneIdResolver;\n            StringLocalizer = localizer;\n            Log = logger;\n            EditOptions = configOptionsAccessor.Value;\n            RecaptchaServerSideValidator = recaptchaServerSideValidator;\n        }\n\n        protected IMediator Mediator { get; private set; }\n        protected IProjectService ProjectService { get; private set; }\n        protected IBlogService BlogService { get; private set; }\n        protected IBlogUrlResolver BlogUrlResolver { get; private set; }\n        protected IBlogRoutes BlogRoutes { get; private set; }\n        protected IContentTemplateService TemplateService { get; private set; }\n        protected IAuthorNameResolver AuthorNameResolver { get; private set; }\n        protected IProjectEmailService EmailService { get; private set; }\n        protected IContentProcessor ContentProcessor { get; private set; }\n        protected ILogger Log { get; private set; }\n        protected ITimeZoneHelper TimeZoneHelper { get; private set; }\n        protected ITimeZoneIdResolver TimeZoneIdResolver { get; private set; }\n        protected IAuthorizationService AuthorizationService { get; private set; }\n        protected IStringLocalizer<SimpleContent> StringLocalizer { get; private set; }\n        protected BlogEditOptions EditOptions { get; private set; }\n        protected IContentHistoryCommands HistoryCommands { get; private set; }\n        protected IContentHistoryQueries HistoryQueries { get; private set; }\n\n        protected IRecaptchaServerSideValidator RecaptchaServerSideValidator { get; private set; }\n\n        [HttpHead]\n        [HttpGet]\n        [Authorize(Policy = \"BlogViewPolicy\")]\n        public virtual async Task<IActionResult> Index(\n            CancellationToken cancellationToken,\n            string category = \"\",\n            int page = 1)\n        {\n            await BlogService.PublishReadyDrafts(cancellationToken);\n\n            var project = await ProjectService.GetCurrentProjectSettings();\n\n            if (project == null)\n            {\n                HttpContext.Response.StatusCode = 404;\n                return new EmptyResult();\n            }\n\n            var model = new BlogViewModel(ContentProcessor)\n            {\n                ProjectSettings = project,\n                // check if the user has the BlogEditor claim or meets policy\n                CanEdit = await User.CanEditBlog(project.Id, AuthorizationService),\n                BlogRoutes = BlogRoutes,\n                CurrentCategory = category\n            };\n            \n            if(!string.IsNullOrEmpty(model.CurrentCategory))\n            {\n                model.ListRouteName = BlogRoutes.BlogCategoryRouteName;\n            }\n            else\n            {\n                model.ListRouteName = BlogRoutes.BlogIndexRouteName;\n            }\n\n            ViewData[\"Title\"] = model.ProjectSettings.Title;\n            var result = await BlogService.GetPosts(category, page, model.CanEdit, cancellationToken);\n            model.Posts = result.Data;\n            model.Categories = await BlogService.GetCategories(model.CanEdit, cancellationToken);\n            model.Archives = await BlogService.GetArchives(model.CanEdit, cancellationToken);\n            model.Paging.ItemsPerPage = model.ProjectSettings.PostsPerPage;\n            model.Paging.CurrentPage = page;\n            model.Paging.TotalItems = result.TotalItems; \n            model.TimeZoneHelper = TimeZoneHelper;\n            model.TimeZoneId = await TimeZoneIdResolver.GetUserTimeZoneId(cancellationToken);\n            model.NewItemPath = Url.RouteUrl(BlogRoutes.NewPostRouteName);\n\n            return View(\"Index\", model);\n        }\n\n       \n        [HttpGet]\n        [Authorize(Policy = \"BlogViewPolicy\")]\n        public virtual async Task<IActionResult> MostRecent(CancellationToken cancellationToken)\n        {\n            var project = await ProjectService.GetCurrentProjectSettings();\n            if (project == null)\n            {\n                return RedirectToAction(\"Index\");\n            }\n\n            var result = await BlogService.GetRecentPosts(1, cancellationToken);\n            if ((result != null) && (result.Count > 0))\n            {\n                var post = result[0];\n                var url = await BlogUrlResolver.ResolvePostUrl(post, project);\n                return Redirect(url);\n            }\n\n            return RedirectToRoute(BlogRoutes.BlogIndexRouteName);\n        }\n\n        [HttpHead]\n        [HttpGet]\n        [Authorize(Policy = \"BlogViewPolicy\")]\n        public virtual async Task<IActionResult> Archive(\n            CancellationToken cancellationToken,\n            int year,\n            int month = 0,\n            int day = 0,\n            int page = 1)\n        {\n            var model = new BlogViewModel(ContentProcessor)\n            {\n                ProjectSettings = await ProjectService.GetCurrentProjectSettings(),\n                BlogRoutes = BlogRoutes\n            };\n            model.CanEdit = await User.CanEditBlog(model.ProjectSettings.Id, AuthorizationService);\n            model.NewItemPath = Url.RouteUrl(BlogRoutes.NewPostRouteName);\n\n            ViewData[\"Title\"] = model.ProjectSettings.Title;\n\n            var result = await BlogService.GetPosts(\n                model.ProjectSettings.Id,\n                year,\n                month,\n                day,\n                page,\n                model.ProjectSettings.PostsPerPage,\n                model.CanEdit,\n                cancellationToken\n                );\n\n            model.Posts = result.Data;\n            model.Categories = await BlogService.GetCategories(model.CanEdit, cancellationToken);\n            model.Archives = await BlogService.GetArchives(model.CanEdit, cancellationToken);\n            model.Paging.ItemsPerPage = model.ProjectSettings.PostsPerPage;\n            model.Paging.CurrentPage = page;\n            model.Paging.TotalItems = result.TotalItems;\n            \n            model.TimeZoneHelper = TimeZoneHelper;\n            model.TimeZoneId = await TimeZoneIdResolver.GetUserTimeZoneId(cancellationToken);\n            model.Year = year;\n            model.Month = month;\n            model.Day = day;\n\n            var breadCrumbHelper = new TailCrumbUtility(HttpContext);\n            var crumbText = year.ToString() + \"-\" + month.ToString(\"00\");\n            breadCrumbHelper.AddTailCrumb(\"archive\", crumbText, \"\");\n\n            return View(\"Archive\", model);\n        }\n\n        [HttpHead]\n        [HttpGet]\n        [Authorize(Policy = \"BlogViewPolicy\")]\n        public virtual async Task<IActionResult> Category(\n            CancellationToken cancellationToken,\n            string category = \"\",\n            int page = 1)\n        {\n            var breadCrumbHelper = new TailCrumbUtility(HttpContext);\n            breadCrumbHelper.AddTailCrumb(\"category\", category, \"\");\n\n            return await Index(cancellationToken, category, page);\n        }\n\n        [HttpHead]\n        [HttpGet]\n        [Authorize(Policy = \"BlogViewPolicy\")]\n        [ActionName(\"PostNoDate\")]\n        public virtual async Task<IActionResult> Post(\n             CancellationToken cancellationToken,\n            string slug, \n            bool showDraft = false, \n            Guid? historyId = null)\n        {\n            return await Post(cancellationToken, 0, 0, 0, slug, showDraft, historyId);\n        }\n\n        [HttpHead]\n        [HttpGet]\n        [Authorize(Policy = \"BlogViewPolicy\")]\n        [ActionName(\"PostWithDate\")]\n        public virtual async Task<IActionResult> Post(\n            CancellationToken cancellationToken,\n            int year , \n            int month, \n            int day, \n            string slug, \n            bool showDraft = false,\n            Guid? historyId = null\n            )\n        {\n            var project = await ProjectService.GetCurrentProjectSettings();\n\n            if (project == null)\n            {\n                return RedirectToRoute(BlogRoutes.BlogIndexRouteName);\n            }\n\n            if(!project.IncludePubDateInPostUrls)\n            {\n                if(year > 0)\n                {\n                    return RedirectToRoute(BlogRoutes.PostWithoutDateRouteName, new { slug });\n                }\n            }\n\n            var canEdit = await User.CanEditBlog(project.Id, AuthorizationService);\n\n            PostResult result = null;\n            if(!string.IsNullOrEmpty(slug))\n            {\n                result = await BlogService.GetPostBySlug(slug, cancellationToken);\n            }\n            ContentHistory history = null;\n            var postWasDeleted = false;\n            var hasDraft = false;\n            var hasPublishedVersion = false;\n            if (result != null && result.Post != null)\n            {\n                hasDraft = result.Post.HasDraftVersion();\n                hasPublishedVersion = result.Post.HasPublishedVersion();\n            }\n\n            if (canEdit && historyId.HasValue)\n            {\n                history = await HistoryQueries.Fetch(project.Id, historyId.Value, cancellationToken);\n                if (history != null)\n                {\n                    if (result == null || result.Post == null) //page must have been deleted, restore from hx\n                    {\n                        var post = new Post();\n                        history.CopyTo(post);\n                        if (history.IsDraftHx)\n                        {\n                            post.PromoteDraftTemporarilyForRender();\n                        }\n                        postWasDeleted = true;\n                        if(result == null)\n                        {\n                            result = new PostResult();\n                        }\n                        result.Post = post;\n                    }\n                    else\n                    {\n                        var postCopy = new Post();\n                        result.Post.CopyTo(postCopy);\n                        if (history.IsDraftHx)\n                        {\n                            postCopy.Content = history.DraftContent;\n                            postCopy.Author = history.DraftAuthor;\n                        }\n                        else\n                        {\n                            postCopy.Content = history.Content;\n                            postCopy.Author = history.Author;\n                        }\n\n                        result.Post = postCopy;\n                    }\n                }\n            }\n            \n            if ((result == null) || (result.Post == null))\n            {\n                Log.LogWarning(\"post not found for slug \" + slug + \", so redirecting to index\");\n                return RedirectToRoute(BlogRoutes.BlogIndexRouteName);\n            }\n\n            if (!canEdit && result != null && result.Post != null)\n            {\n                if (!result.Post.HasPublishedVersion())\n                {\n                    Log.LogWarning($\"page {result.Post.Title} is unpublished and user is not editor so returning 404\");\n                    return NotFound();\n                }\n            }\n\n            var model = new BlogViewModel(ContentProcessor)\n            {\n                CanEdit = canEdit,\n                ShowingDeleted = postWasDeleted,\n                HasDraft = hasDraft,\n                HasPublishedVersion = hasPublishedVersion\n            };\n\n            if(history != null)\n            {\n                model.HistoryId = history.Id;\n                model.HistoryArchiveDate = history.ArchivedUtc;\n            }\n            \n            if (project.IncludePubDateInPostUrls)\n            {\n                if(year == 0)\n                {\n                    DateTime? pubDate = null;\n                    if(result.Post.PubDate.HasValue)\n                    {\n                        pubDate = result.Post.PubDate;\n                    }\n                    else\n                    {\n                        pubDate = result.Post.DraftPubDate;\n                    }\n\n                    if(!pubDate.HasValue)\n                    {\n                        pubDate = DateTime.UtcNow;\n                    }\n                    var routeVals = new RouteValueDictionary\n                    {\n                        { \"year\", pubDate.Value.Year },\n                        { \"month\", pubDate.Value.Month.ToString(\"00\") },\n                        { \"day\", pubDate.Value.Day.ToString(\"00\") },\n                        { \"slug\", result.Post.Slug }\n                    };\n\n                    if (showDraft)\n                    {\n                        routeVals.Add(\"showDraft\", true);\n                    }\n                    if(historyId.HasValue)\n                    {\n                        routeVals.Add(\"historyId\", historyId.Value);\n                    }\n                    \n                    return RedirectToRoute(BlogRoutes.PostWithDateRouteName, routeVals);\n                }\n            }\n\n            ViewData[\"Title\"] = result.Post.Title;\n            \n            if(history == null)\n            {\n                if (canEdit && model.HasDraft && (showDraft || !model.HasPublishedVersion))\n                {\n                    // we can't update the actual post here since it is cached\n                    var postCopy = new Post();\n                    result.Post.CopyTo(postCopy);\n                    postCopy.PromoteDraftTemporarilyForRender();\n                    result.Post = postCopy;\n                    model.ShowingDraft = true;\n                }\n            }\n           \n            \n            model.CurrentPost = result.Post;\n            if(result.PreviousPost != null)\n            {\n                model.PreviousPostUrl = await BlogUrlResolver.ResolvePostUrl(result.PreviousPost, project);\n            }\n            if (result.NextPost != null)\n            {\n                model.NextPostUrl = await BlogUrlResolver.ResolvePostUrl(result.NextPost, project);\n            }\n            \n            var currentUrl = await BlogUrlResolver.ResolvePostUrl(result.Post, project);\n            var breadCrumbHelper = new TailCrumbUtility(HttpContext);\n            breadCrumbHelper.AddTailCrumb(result.Post.Id, result.Post.Title, currentUrl);\n\n            model.NewItemPath = Url.RouteUrl(BlogRoutes.NewPostRouteName);\n            model.EditPath = Url.RouteUrl(BlogRoutes.PostEditRouteName, new { slug = result.Post.Slug });\n\n            model.ProjectSettings = project;\n            model.BlogRoutes = BlogRoutes;\n            model.Categories = await BlogService.GetCategories(model.CanEdit, cancellationToken);\n            model.Archives = await BlogService.GetArchives(model.CanEdit, cancellationToken);\n            model.ShowComments = result.Post.ShowComments; //mode.Length == 0; // do we need this for a global disable\n            model.CommentsAreOpen = await BlogService.CommentsAreOpen(result.Post, canEdit);\n            model.TimeZoneHelper = TimeZoneHelper;\n            model.TimeZoneId = await TimeZoneIdResolver.GetUserTimeZoneId(cancellationToken);\n\n            if (!string.IsNullOrWhiteSpace(model.CurrentPost.TemplateKey))\n            {\n                model.Template = await TemplateService.GetTemplate(project.Id, model.CurrentPost.TemplateKey);\n            }\n\n            return View(\"Post\", model);\n            \n        }\n\n        [HttpGet]\n        [AllowAnonymous]\n        public virtual async Task<IActionResult> NewPost(\n            CancellationToken cancellationToken,\n            string query = null,\n            int pageNumber = 1,\n            int pageSize = 10\n            )\n        {\n            var project = await ProjectService.GetCurrentProjectSettings();\n\n            if (project == null)\n            {\n                Log.LogInformation(\"redirecting to index because project settings not found\");\n                return RedirectToRoute(BlogRoutes.BlogIndexRouteName);\n            }\n\n            var canEdit = await User.CanEditBlog(project.Id, AuthorizationService);\n\n            if (!canEdit)\n            {\n                Log.LogInformation(\"redirecting to index because user is not allowed to edit\");\n                return RedirectToRoute(BlogRoutes.BlogIndexRouteName);\n            }\n\n            var templateCount = await TemplateService.GetCountOfTemplates(project.Id, ProjectConstants.BlogFeatureName);\n            if (templateCount == 0)\n            {\n                return RedirectToRoute(BlogRoutes.PostEditRouteName);\n            }\n\n            var templates = await TemplateService.GetTemplates(\n                project.Id,\n                ProjectConstants.BlogFeatureName,\n                query,\n                pageNumber,\n                pageSize,\n                cancellationToken);\n            \n            var model = new NewContentViewModel()\n            {\n                Templates = templates,\n                Query = query,\n                PageNumber = pageNumber,\n                PageSize = pageSize,\n                CountOfTemplates = templateCount,\n                SearchRouteName = BlogRoutes.NewPostRouteName,\n                PostActionName = \"InitTemplatedPost\"\n            };\n            \n            return View(model);\n        }\n\n        [HttpPost]\n        [AllowAnonymous]\n        [ValidateAntiForgeryToken]\n        public virtual async Task<IActionResult> InitTemplatedPost(NewContentViewModel model)\n        {\n            var project = await ProjectService.GetCurrentProjectSettings();\n\n            if (project == null)\n            {\n                Log.LogInformation(\"redirecting to index because project settings not found\");\n                return RedirectToRoute(BlogRoutes.BlogIndexRouteName);\n            }\n\n            var canEdit = await User.CanEditBlog(project.Id, AuthorizationService);\n\n            if (!canEdit)\n            {\n                Log.LogInformation(\"redirecting to index because user is not allowed to edit\");\n                return RedirectToRoute(BlogRoutes.BlogIndexRouteName);\n            }\n\n            if (!ModelState.IsValid)\n            {\n                model.Templates = await TemplateService.GetTemplates(\n                    project.Id,\n                    ProjectConstants.BlogFeatureName,\n                    model.Query,\n                    model.PageNumber,\n                    model.PageSize\n\n                    );\n                model.SearchRouteName = BlogRoutes.NewPostRouteName;\n                model.PostActionName = \"InitTemplatedPost\";\n\n                return View(\"NewPost\", model);\n            }\n\n            var template = await TemplateService.GetTemplate(project.Id, model.SelectedTemplate);\n\n            if (template == null)\n            {\n                Log.LogWarning($\"redirecting to index because content template {model.SelectedTemplate} was not found\");\n                return RedirectToRoute(BlogRoutes.BlogIndexRouteName);\n            }\n\n            var request = new InitTemplatedPostRequest(\n                project.Id,\n                User.Identity.Name,\n                await AuthorNameResolver.GetAuthorName(User),\n                model,\n                template);\n\n            var response = await Mediator.Send(request);\n            if (response.Succeeded)\n            {\n                Log.LogDebug($\"succeeded in initializing a page with template {model.SelectedTemplate}\");\n                return RedirectToRoute(BlogRoutes.PostEditWithTemplateRouteName, new { slug = response.Value.Slug });\n            }\n            else\n            {\n                if (response.ErrorMessages != null && response.ErrorMessages.Count > 0)\n                {\n                    foreach (var err in response.ErrorMessages)\n                    {\n                        this.AlertDanger(err, true);\n                    }\n                }\n            }\n\n            return RedirectToRoute(BlogRoutes.BlogIndexRouteName);\n        }\n\n        [HttpGet]\n        [AllowAnonymous]\n        public virtual async Task<IActionResult> EditWithTemplate(\n            CancellationToken cancellationToken,\n            string slug,\n            Guid? historyId = null\n            )\n        {\n            var project = await ProjectService.GetCurrentProjectSettings();\n\n            if (project == null)\n            {\n                Log.LogInformation(\"redirecting to index because project settings not found\");\n                return RedirectToRoute(BlogRoutes.BlogIndexRouteName);\n            }\n\n            var canEdit = await User.CanEditBlog(project.Id, AuthorizationService);\n            if (!canEdit)\n            {\n                Log.LogInformation(\"redirecting to index because user cannot edit\");\n                return RedirectToRoute(BlogRoutes.BlogIndexRouteName);\n            }\n\n            var postResult = await BlogService.GetPostBySlug(slug, cancellationToken);\n            ContentHistory history = null;\n            var didReplaceDraft = false;\n            var didRestoreDeleted = false;\n            Post post = null;\n\n            if (historyId.HasValue)\n            {\n                history = await HistoryQueries.Fetch(project.Id, historyId.Value).ConfigureAwait(false);\n                if (history != null)\n                {\n                    if (postResult == null || postResult.Post == null) // page was deleted, restore it from history\n                    {\n                        post = new Post();\n                        history.CopyTo(post);\n                        if (history.IsDraftHx)\n                        {\n                            post.PromoteDraftTemporarilyForRender();\n                        }\n                        didRestoreDeleted = true;\n                    }\n                    else\n                    {\n                        didReplaceDraft = post.HasDraftVersion();\n                        var postCopy = new Post();\n                        post.CopyTo(postCopy);\n                        if (history.IsDraftHx)\n                        {\n                            postCopy.DraftAuthor = history.DraftAuthor;\n                            postCopy.DraftContent = history.DraftContent;\n                            postCopy.DraftSerializedModel = history.DraftSerializedModel;\n                        }\n                        else\n                        {\n                            postCopy.DraftAuthor = history.Author;\n                            postCopy.DraftContent = history.Content;\n                            postCopy.DraftSerializedModel = history.SerializedModel;\n                        }\n                        if(postResult == null) { postResult = new PostResult(); }\n                        postResult.Post = postCopy;\n                    }\n                }\n            }\n\n            if (postResult == null)\n            {\n                Log.LogError($\"redirecting to index because page was not found for slug {slug}\");\n                return RedirectToRoute(BlogRoutes.BlogIndexRouteName);\n            }\n            ViewData[\"Title\"] = string.Format(CultureInfo.CurrentUICulture, StringLocalizer[\"Edit - {0}\"], postResult.Post.Title);\n\n            var template = await TemplateService.GetTemplate(project.Id, postResult.Post.TemplateKey);\n            if (template == null)\n            {\n                Log.LogError($\"redirecting to index because content template {postResult.Post.TemplateKey} was not found\");\n                return RedirectToRoute(BlogRoutes.BlogIndexRouteName);\n            }\n\n            var model = new PostEditWithTemplateViewModel()\n            {\n                ProjectId = project.Id,\n                Author = postResult.Post.Author,\n                Id = postResult.Post.Id,\n                Categories = string.Join(\",\", postResult.Post.Categories),\n                ContentType = postResult.Post.ContentType,\n                CorrelationKey = postResult.Post.CorrelationKey,\n                CurrentPostUrl = await BlogUrlResolver.ResolvePostUrl(postResult.Post, project).ConfigureAwait(false),\n                DeletePostRouteName = BlogRoutes.PostDeleteRouteName,\n                ImageUrl = postResult.Post.ImageUrl,\n                ThumbnailUrl = postResult.Post.ThumbnailUrl,\n                IsFeatured = postResult.Post.IsFeatured,\n                IsPublished = postResult.Post.IsPublished,\n                ShowComments = postResult.Post.ShowComments,\n                MetaDescription = postResult.Post.MetaDescription,\n                Slug = postResult.Post.Slug,\n                Title = postResult.Post.Title,\n                TeaserOverride = postResult.Post.TeaserOverride,\n                SuppressTeaser = postResult.Post.SuppressTeaser,\n                Template = template,\n                TemplateModel = TemplateService.DesrializeTemplateModel(postResult.Post, template),\n                DidReplaceDraft = didReplaceDraft,\n                DidRestoreDeleted = didRestoreDeleted,\n                HasDraft = postResult.Post.HasDraftVersion()\n        };\n            \n            if (history != null)\n            {\n                model.HistoryArchiveDate = history.ArchivedUtc;\n                model.HistoryId = history.Id;\n            }\n\n            var tzId = await TimeZoneIdResolver.GetUserTimeZoneId(cancellationToken);\n\n            if (postResult.Post.PubDate.HasValue)\n            {\n                model.PubDate = TimeZoneHelper.ConvertToLocalTime(postResult.Post.PubDate.Value, tzId);\n            }\n\n            if (postResult.Post.DraftPubDate.HasValue)\n            {\n                model.DraftPubDate = TimeZoneHelper.ConvertToLocalTime(postResult.Post.DraftPubDate.Value, tzId);\n            }\n\n            if (!string.IsNullOrWhiteSpace(postResult.Post.DraftAuthor))\n            {\n                model.Author = postResult.Post.DraftAuthor;\n            }\n\n            if (model.TemplateModel == null)\n            {\n                Log.LogError($\"redirecting to index model desrialization failed for page {postResult.Post.Title}\");\n                return RedirectToRoute(BlogRoutes.BlogIndexRouteName);\n            }\n\n            return View(model);\n        }\n\n        [HttpPost]\n        [AllowAnonymous]\n        [ValidateAntiForgeryToken]\n        public virtual async Task<IActionResult> EditWithTemplate(PostEditWithTemplateViewModel model)\n        {\n            var project = await ProjectService.GetCurrentProjectSettings();\n\n            if (project == null)\n            {\n                Log.LogInformation(\"redirecting to index because project settings not found\");\n\n                return RedirectToRoute(BlogRoutes.BlogIndexRouteName);\n            }\n\n            var canEdit = await User.CanEditBlog(project.Id, AuthorizationService);\n\n            if (!canEdit)\n            {\n                Log.LogInformation(\"redirecting to index because user is not allowed to edit\");\n                return RedirectToRoute(BlogRoutes.BlogIndexRouteName);\n            }\n\n            var post = await BlogService.GetPost(model.Id);\n\n            if (post == null && model.HistoryId.HasValue) // restore a deleted page from history\n            {\n                var history = await HistoryQueries.Fetch(project.Id, model.HistoryId.Value).ConfigureAwait(false);\n                if (history != null)\n                {\n                    post = new Post();\n                    history.CopyTo(post);\n                    await BlogService.Create(post); // re-create post here because handler expects existing page and only updates\n                }\n            }\n\n            if (post == null)\n            {\n                Log.LogError($\"redirecting to index because post was not found for id {model.Id}\");\n                return RedirectToRoute(BlogRoutes.BlogIndexRouteName);\n            }\n            ViewData[\"Title\"] = string.Format(CultureInfo.CurrentUICulture, StringLocalizer[\"Edit - {0}\"], post.Title);\n\n            var template = await TemplateService.GetTemplate(project.Id, post.TemplateKey);\n            if (template == null)\n            {\n                Log.LogError($\"redirecting to index because content template {post.TemplateKey} was not found\");\n                return RedirectToRoute(BlogRoutes.BlogIndexRouteName);\n            }\n\n            var request = new UpdateTemplatedPostRequest(\n                project.Id,\n                User.Identity.Name,\n                model,\n                template,\n                post,\n                Request.Form,\n                ModelState\n                );\n\n            var response = await Mediator.Send(request);\n            if (response.Succeeded)\n            {\n                if (model.SaveMode == SaveMode.DeleteCurrentDraft)\n                    this.AlertSuccess(StringLocalizer[\"The current draft of this post has been deleted.\"], true);\n                else\n                    this.AlertSuccess(StringLocalizer[\"The post was updated successfully.\"], true);\n\n                return RedirectToRoute(BlogRoutes.PostWithoutDateRouteName, new { slug = response.Value.Slug });\n            }\n            else\n            {\n                model.Template = template;\n                \n                return View(model);\n            }\n\n        }\n\n\n\n        [HttpGet]\n        [AllowAnonymous]\n        public virtual async Task<IActionResult> Edit(\n            CancellationToken cancellationToken,\n            string slug = \"\", \n            string type=\"\",\n            Guid? historyId = null\n            )\n        {\n            var project = await ProjectService.GetCurrentProjectSettings();\n\n            if (project == null)\n            {\n                Log.LogInformation(\"redirecting to index because project settings not found\");\n                return RedirectToRoute(BlogRoutes.BlogIndexRouteName);\n            }\n\n            var canEdit = await User.CanEditPages(project.Id, AuthorizationService);\n            if (!canEdit)\n            {\n                Log.LogInformation(\"redirecting to index because user cannot edit\");\n                return RedirectToRoute(BlogRoutes.BlogIndexRouteName);\n            }\n\n            if (slug == \"none\") { slug = string.Empty; }\n\n            var model = new PostEditViewModel\n            {\n                ProjectId = project.Id,\n                TeasersEnabled = project.TeaserMode != TeaserMode.Off\n            };\n\n            PostResult postResult = null;\n            if (!string.IsNullOrEmpty(slug))\n            {\n                postResult = await BlogService.GetPostBySlug(slug, cancellationToken);\n            }\n\n            var routeVals = new RouteValueDictionary\n            {\n                { \"slug\", slug }\n            };\n            if (historyId.HasValue)\n            {\n                routeVals.Add(\"historyId\", historyId.Value);\n            }\n\n            if (postResult != null && postResult.Post != null && !string.IsNullOrWhiteSpace(postResult.Post.TemplateKey))\n            {\n                return RedirectToRoute(BlogRoutes.PostEditWithTemplateRouteName, routeVals);\n            }\n\n            ContentHistory history = null;\n            var hasDraft = false;\n            var hasPublishedVersion = false;\n            if(postResult != null && postResult.Post != null)\n            {\n                hasDraft = postResult.Post.HasDraftVersion();\n                hasPublishedVersion = postResult.Post.HasPublishedVersion();\n            }\n\n            if (historyId.HasValue)\n            {\n                history = await HistoryQueries.Fetch(project.Id, historyId.Value, cancellationToken);\n                if (history != null)\n                {\n                    if(postResult == null || postResult.Post == null)\n                    {\n                        var post = new Post();\n                        history.CopyTo(post);\n                        if(postResult == null)\n                        {\n                            postResult = new PostResult();\n                        }\n                        postResult.Post = post;\n                        model.DidRestoreDeleted = true;\n                    }\n\n                    if (history.IsDraftHx)\n                    {\n                        model.Author = history.DraftAuthor;\n                        model.Content = history.DraftContent;\n                    }\n                    else\n                    {\n                        model.Author = history.Author;\n                        model.Content = history.Content;\n                    }\n\n                    model.HistoryArchiveDate = history.ArchivedUtc;\n                    model.HistoryId = history.Id;\n                    model.DidReplaceDraft = hasDraft;\n                }\n            }\n\n            if (postResult == null || postResult.Post == null)\n            {\n                ViewData[\"Title\"] = StringLocalizer[\"New Post\"];\n                model.Author = await AuthorNameResolver.GetAuthorName(User);\n                model.CurrentPostUrl = Url.RouteUrl(BlogRoutes.BlogIndexRouteName);\n                model.ContentType = project.DefaultContentType;\n                if(EditOptions.AllowMarkdown && !string.IsNullOrWhiteSpace(type) && type == \"markdown\")\n                {\n                    model.ContentType = \"markdown\";  \n                }\n                if(!string.IsNullOrWhiteSpace(type) && type == \"html\")\n                {\n                    model.ContentType = \"html\";\n                }\n                model.ShowComments = true;\n            }\n            else\n            {\n                ViewData[\"Title\"] = string.Format(CultureInfo.CurrentUICulture, StringLocalizer[\"Edit - {0}\"], postResult.Post.Title);\n                \n                if(history == null)\n                {\n                    if (string.IsNullOrWhiteSpace(postResult.Post.DraftContent))\n                    {\n                        model.Author = postResult.Post.Author;\n                        model.Content = postResult.Post.Content;\n                    }\n                    else\n                    {\n                        model.Author = postResult.Post.DraftAuthor;\n                        model.Content = postResult.Post.DraftContent;\n                    }\n                }\n                \n                model.Id = postResult.Post.Id;\n                model.CorrelationKey = postResult.Post.CorrelationKey;\n                model.IsPublished = postResult.Post.IsPublished;\n                model.ShowComments = postResult.Post.ShowComments;\n                model.MetaDescription = postResult.Post.MetaDescription;\n                model.Slug = postResult.Post.Slug;\n                model.Title = postResult.Post.Title;\n                model.CurrentPostUrl = await BlogUrlResolver.ResolvePostUrl(postResult.Post, project).ConfigureAwait(false);\n                model.DeletePostRouteName = BlogRoutes.PostDeleteRouteName;\n                model.Categories = string.Join(\",\", postResult.Post.Categories);\n                model.ImageUrl = postResult.Post.ImageUrl;\n                model.ThumbnailUrl = postResult.Post.ThumbnailUrl;\n                model.IsFeatured = postResult.Post.IsFeatured;\n                model.ContentType = postResult.Post.ContentType;\n                model.TeaserOverride = postResult.Post.TeaserOverride;\n                model.SuppressTeaser = postResult.Post.SuppressTeaser;\n                model.HasDraft = postResult.Post.HasDraftVersion();\n\n                var tzId = await TimeZoneIdResolver.GetUserTimeZoneId(cancellationToken);\n\n                if (postResult.Post.PubDate.HasValue)\n                {\n                    model.PubDate = TimeZoneHelper.ConvertToLocalTime(postResult.Post.PubDate.Value, tzId);\n                }\n\n                if (postResult.Post.DraftPubDate.HasValue)\n                {\n                    model.DraftPubDate = TimeZoneHelper.ConvertToLocalTime(postResult.Post.DraftPubDate.Value, tzId);\n                }\n            }\n            \n            return View(model);\n        }\n\n        [HttpPost]\n        [AllowAnonymous]\n        [ValidateAntiForgeryToken]\n        public virtual async Task<IActionResult> Edit(PostEditViewModel model)\n        {\n            var project = await ProjectService.GetCurrentProjectSettings();\n\n            if (project == null)\n            {\n                Log.LogInformation(\"redirecting to index because project settings not found\");\n\n                return RedirectToRoute(BlogRoutes.BlogIndexRouteName);\n            }\n\n            var canEdit = await User.CanEditPages(project.Id, AuthorizationService);\n\n            if (!canEdit)\n            {\n                Log.LogInformation(\"redirecting to index because user is not allowed to edit\");\n                return RedirectToRoute(BlogRoutes.BlogIndexRouteName);\n            }\n\n            IPost post = null;\n            if(!string.IsNullOrWhiteSpace(model.Id))\n            {\n                post = await BlogService.GetPost(model.Id);\n            }\n\n            if (post == null && model.HistoryId.HasValue) // restore a deleted post from history\n            {\n                var history = await HistoryQueries.Fetch(project.Id, model.HistoryId.Value).ConfigureAwait(false);\n                if (history != null)\n                {\n                    post = new Post();\n                    history.CopyTo(post);\n                    await BlogService.Create(post); // re-create post here so it gets the previous id and keeps previous history\n                }\n            }\n\n            var isNew = (post == null);\n\n            var request = new CreateOrUpdatePostRequest(\n                project.Id,\n                User.Identity.Name,\n                model,\n                post,\n                ModelState\n                );\n\n            var response = await Mediator.Send(request);\n            if(!response.Succeeded)\n            {\n                // // not effective here...:\n                //if (model.SaveMode == SaveMode.DeleteCurrentDraft)\n                //    this.AlertSuccess(StringLocalizer[\"The current draft of this post has been deleted.\"], true);\n                //else\n                //    this.AlertSuccess(StringLocalizer[\"The post was updated successfully.\"], true);\n\n                if (string.IsNullOrEmpty(model.Id))\n                {\n                    ViewData[\"Title\"] = StringLocalizer[\"New Post\"];\n                }\n                else\n                {\n                    ViewData[\"Title\"] = string.Format(CultureInfo.CurrentUICulture, StringLocalizer[\"Edit - {0}\"], model.Title);\n                }\n                model.ProjectId = project.Id;\n                model.TeasersEnabled = project.TeaserMode != TeaserMode.Off;\n\n                return View(model);\n            }\n\n            if (project.IncludePubDateInPostUrls)\n            {\n                DateTime? pubDate = null;\n                if (response.Value.PubDate.HasValue)\n                {\n                    pubDate = response.Value.PubDate;\n                }\n                else\n                {\n                    pubDate = response.Value.DraftPubDate;\n                }\n\n                if (!pubDate.HasValue)\n                {\n                    pubDate = DateTime.UtcNow;\n                }\n\n                return RedirectToRoute(BlogRoutes.PostWithDateRouteName,\n                    new\n                    {\n                        year = pubDate.Value.Year,\n                        month = pubDate.Value.Month.ToString(\"00\"),\n                        day = pubDate.Value.Day.ToString(\"00\"),\n                        slug = response.Value.Slug\n                    });\n            }\n            else\n            {\n                return RedirectToRoute(BlogRoutes.PostWithoutDateRouteName,\n                    new { slug = response.Value.Slug });\n            }\n\n\n        }\n        \n        [HttpPost]\n        [AllowAnonymous]\n        [ValidateAntiForgeryToken]\n        public virtual async Task<IActionResult> Delete(string id)\n        {\n            if (string.IsNullOrEmpty(id))\n            {\n                Log.LogInformation(\"postid not provided, redirecting\");\n                return RedirectToRoute(BlogRoutes.BlogIndexRouteName);\n            }\n\n            var project = await ProjectService.GetCurrentProjectSettings();\n\n            if (project == null)\n            {\n                Log.LogInformation(\"project settings not found, redirecting\");\n                return RedirectToRoute(BlogRoutes.BlogIndexRouteName);\n            }\n\n            bool canEdit = await User.CanEditBlog(project.Id, AuthorizationService);\n\n            if (!canEdit)\n            {\n                Log.LogInformation(\"user is not allowed to edit, redicrecting\");\n\n                return RedirectToRoute(BlogRoutes.BlogIndexRouteName);\n            }\n            \n            var post = await BlogService.GetPost(id);\n\n            if (post == null)\n            {\n                Log.LogInformation(\"post not found, redirecting\");\n\n                return RedirectToRoute(BlogRoutes.BlogIndexRouteName);\n            }\n            \n            var history = post.CreateHistory(User.Identity.Name, true);\n            await HistoryCommands.Create(project.Id, history);\n\n            await BlogService.Delete(post.Id);\n\n            Log.LogWarning(\"user \" + User.Identity.Name + \" deleted post \" + post.Slug);\n\n            return RedirectToRoute(BlogRoutes.BlogIndexRouteName);\n\n        }\n\n        [HttpPost]\n        [AllowAnonymous]\n        [ValidateAntiForgeryToken]\n        public virtual async Task<IActionResult> UnPublish(string id)\n        {\n            if (string.IsNullOrEmpty(id))\n            {\n                Log.LogInformation(\"postid not provided, redirecting\");\n                return RedirectToRoute(BlogRoutes.BlogIndexRouteName);\n            }\n\n            var project = await ProjectService.GetCurrentProjectSettings();\n\n            if (project == null)\n            {\n                Log.LogInformation(\"project settings not found, redirecting\");\n                return RedirectToRoute(BlogRoutes.BlogIndexRouteName);\n            }\n\n            bool canEdit = await User.CanEditBlog(project.Id, AuthorizationService);\n\n            if (!canEdit)\n            {\n                Log.LogInformation(\"user is not allowed to edit, redicrecting\");\n\n                return RedirectToRoute(BlogRoutes.BlogIndexRouteName);\n            }\n\n            var post = await BlogService.GetPost(id);\n\n            if (post == null)\n            {\n                Log.LogInformation(\"post not found, redirecting\");\n\n                return RedirectToRoute(BlogRoutes.BlogIndexRouteName);\n            }\n\n            var history = post.CreateHistory(User.Identity.Name, true);\n            await HistoryCommands.Create(project.Id, history);\n            if(post.HasPublishedVersion())\n            {\n                await BlogService.FireUnPublishEvent(post);\n                post.DraftAuthor = post.Author;\n                post.DraftContent = post.Content;\n                post.DraftSerializedModel = post.SerializedModel;\n                post.Content = null;\n                post.SerializedModel = null;\n            }\n            \n            post.DraftPubDate = null;\n            post.PubDate = null;\n            post.IsPublished = false;\n\n            await BlogService.Update(post);\n\n            Log.LogWarning(\"user \" + User.Identity.Name + \" unpublished post \" + post.Title);\n\n            return RedirectToRoute(BlogRoutes.PostWithoutDateRouteName, new { slug = post.Slug });\n\n        }\n\n        [Authorize(Policy = \"ViewContentHistoryPolicy\")]\n        [HttpPost]\n        [ValidateAntiForgeryToken]\n        public async Task<IActionResult> DeleteHistoryOlderThan(string id, int days)\n        {\n            var project = await ProjectService.GetCurrentProjectSettings();\n\n            if (project == null)\n            {\n                Log.LogWarning(\"project not found, redirecting/rejecting\");\n                return RedirectToRoute(BlogRoutes.BlogIndexRouteName);\n            }\n\n            var canEdit = await User.CanEditPages(project.Id, AuthorizationService);\n\n            if (!canEdit)\n            {\n                Log.LogWarning(\"user is not allowed to edit, redirecting/rejecting\");\n                return RedirectToRoute(BlogRoutes.BlogIndexRouteName);\n            }\n\n            var post = await BlogService.GetPost(id);\n\n            if (post == null)\n            {\n                Log.LogInformation($\"page not found for {id}, redirecting/rejecting\");\n                return RedirectToRoute(BlogRoutes.BlogIndexRouteName);\n            }\n\n            if (days < 0) //delete all history\n            {\n                await HistoryCommands.DeleteByContent(project.Id, id).ConfigureAwait(false);\n            }\n            else\n            {\n                var cutoffUtc = DateTime.UtcNow.AddDays(-days);\n                await HistoryCommands.DeleteByContent(project.Id, id, cutoffUtc).ConfigureAwait(false);\n            }\n\n            return RedirectToRoute(BlogRoutes.PostHistoryRouteName, new { slug = post.Slug });\n        }\n\n        [HttpGet]\n        [Authorize(Policy = \"ViewContentHistoryPolicy\")]\n        public virtual async Task<IActionResult> History(\n            CancellationToken cancellationToken,\n            string slug,\n            int pageNumber = 1,\n            int pageSize = 10\n            )\n        {\n\n            var project = await ProjectService.GetCurrentProjectSettings();\n            if (project == null)\n            {\n                Log.LogError(\"project settings not found returning 404\");\n                return NotFound();\n            }\n\n            var result = await BlogService.GetPostBySlug(slug);\n\n            if ((result == null) || (result.Post == null))\n            {\n                Log.LogWarning(\"post not found for slug \" + slug + \", so redirecting to index\");\n                return RedirectToRoute(BlogRoutes.BlogIndexRouteName);\n            }\n\n            var model = new ContentHistoryViewModel()\n            {\n                History = await HistoryQueries.GetByContent(\n                    project.Id,\n                    result.Post.Id,\n                    pageNumber,\n                    pageSize,\n                    cancellationToken),\n                ContentId = result.Post.Id,\n                ContentSource = ContentSource.Blog,\n                ContentTitle = result.Post.Title,\n                ContentSlug = result.Post.Slug,\n                CanEditPosts = await User.CanEditBlog(project.Id, AuthorizationService)\n            };\n\n            return View(model);\n        }\n        \n        [HttpPost]\n        [Authorize(Policy = \"BlogViewPolicy\")]\n        [ValidateAntiForgeryToken]\n        public virtual async Task<IActionResult> AjaxPostComment(CommentViewModel model)\n        {\n            // disable status code page for ajax requests\n            var statusCodePagesFeature = HttpContext.Features.Get<IStatusCodePagesFeature>();\n            if (statusCodePagesFeature != null)\n            {\n                statusCodePagesFeature.Enabled = false;\n            }\n\n            // this should validate the [EmailAddress] on the model\n            // failure here should indicate invalid email since it is the only attribute in use\n            if (!ModelState.IsValid)\n            {  \n                Response.StatusCode = 403;\n                //await Response.WriteAsync(\"Please enter a valid e-mail address\");\n                return Content(StringLocalizer[\"Please enter a valid e-mail address\"]);\n            }\n            \n            var project = await ProjectService.GetCurrentProjectSettings();\n\n            if (project == null)\n            {\n                Log.LogDebug(\"returning 500 blog not found\");\n                return StatusCode(500);\n            }\n\n            if (string.IsNullOrEmpty(model.PostId))\n            {\n                Log.LogDebug(\"returning 500 because no postid was posted\");\n                return StatusCode(500);\n            }\n\n            if (string.IsNullOrEmpty(model.Name))\n            {\n                Log.LogDebug(\"returning 403 because no name was posted\");\n                Response.StatusCode = 403;\n                //await Response.WriteAsync(\"Please enter a valid name\");\n                return Content(\"Please enter a valid name\");\n            }\n\n            if (string.IsNullOrEmpty(model.Content))\n            {\n                Log.LogDebug(\"returning 403 because no content was posted\");\n                Response.StatusCode = 403;\n                //await Response.WriteAsync(\"Please enter a valid content\");\n                return Content(StringLocalizer[\"Please enter valid content\"]);\n            }\n\n            var blogPost = await BlogService.GetPost(model.PostId);\n\n            if (blogPost == null)\n            {\n                Log.LogDebug(\"returning 500 blog post not found\");\n                return StatusCode(500);\n            }\n\n            if(!HttpContext.User.Identity.IsAuthenticated)\n            {\n                if(!string.IsNullOrEmpty(project.RecaptchaPublicKey))\n                {\n                    var captchaResponse = await RecaptchaServerSideValidator.ValidateRecaptcha(Request, project.RecaptchaPrivateKey);\n                    if (!captchaResponse.Success)\n                    {\n                        Log.LogDebug(\"returning 403 captcha validation failed\");\n                        Response.StatusCode = 403;\n                        //await Response.WriteAsync(\"captcha validation failed\");\n                        return Content(StringLocalizer[\"captcha validation failed\"]);\n                    }\n                }\n            }\n\n            var userAgent = HttpContext.Request.Headers[\"User-Agent\"].ToString();\n\n            var canEdit = await User.CanEditBlog(project.Id, AuthorizationService);\n            \n            var isApproved = canEdit;\n            if (!isApproved) isApproved = !project.ModerateComments;\n\n            var comment = new Comment()\n            {\n                Id = Guid.NewGuid().ToString(),\n                Author = model.Name,\n                Email = model.Email,\n                Website = GetUrl(model.WebSite),\n                Ip = HttpContext.Connection.RemoteIpAddress.MapToIPv4().ToString(),\n                UserAgent = userAgent,\n                IsAdmin = User.CanEditProject(project.Id),\n                Content = System.Text.Encodings.Web.HtmlEncoder.Default.Encode(\n                    model.Content.Trim()).Replace(\"\\n\", \"<br />\"),\n\n                IsApproved = isApproved,\n                PubDate = DateTime.UtcNow\n            };\n            \n            blogPost.Comments.Add(comment);\n            await BlogService.Update(blogPost);\n\n            // TODO: clear cache\n\n            //no need to send notification when project owner posts a comment, ie in response\n            var shouldSendEmail = !canEdit;\n       \n            if(shouldSendEmail)\n            {\n                var postUrl = await BlogUrlResolver.ResolvePostUrl(blogPost, project);\n                var baseUrl = string.Concat(HttpContext.Request.Scheme,\n                        \"://\",\n                        HttpContext.Request.Host.ToUriComponent());\n\n                postUrl = baseUrl + postUrl;\n\n                EmailService.SendCommentNotificationEmailAsync(\n                    project,\n                    blogPost,\n                    comment,\n                    postUrl,\n                    postUrl,\n                    postUrl\n                    ).Forget(); //async but don't want to wait\n            }\n\n            var viewModel = new BlogViewModel(ContentProcessor)\n            {\n                ProjectSettings = project,\n                BlogRoutes = BlogRoutes,\n                CurrentPost = blogPost,\n                TmpComment = comment,\n                TimeZoneHelper = TimeZoneHelper,\n                TimeZoneId = project.TimeZoneId,\n                CanEdit = canEdit\n            };\n            \n\n            return PartialView(\"CommentPartial\", viewModel);\n            \n        }\n\n        [HttpPost]\n        [AllowAnonymous]\n        [ValidateAntiForgeryToken]\n        public virtual async Task<IActionResult> AjaxApproveComment(string postId, string commentId)\n        {\n            // disable status code page for ajax requests\n            var statusCodePagesFeature = HttpContext.Features.Get<IStatusCodePagesFeature>();\n            if (statusCodePagesFeature != null)\n            {\n                statusCodePagesFeature.Enabled = false;\n            }\n\n            if (string.IsNullOrEmpty(postId))\n            {\n                Log.LogDebug(\"returning 404 because no postid was posted\");\n               \n                return StatusCode(404);\n            }\n\n            if (string.IsNullOrEmpty(commentId))\n            {\n                Log.LogDebug(\"returning 404 because no commentid was posted\");\n                //Response.StatusCode = 404;\n                // await Response.WriteAsync(\"Comm\");\n                return StatusCode(404);\n            }\n\n            var project = await ProjectService.GetCurrentProjectSettings();\n\n            if (project == null)\n            {\n                Log.LogDebug(\"returning 500 blog not found\");\n                //Response.StatusCode = 500;\n                return StatusCode(500);\n            }\n\n            bool canEdit = await User.CanEditBlog(project.Id, AuthorizationService);\n            \n            if (!canEdit)\n            {\n                Log.LogInformation(\"returning 403 user is not allowed to edit\");\n                return StatusCode(403);\n            }\n\n            var blogPost = await BlogService.GetPost(postId);\n\n            if (blogPost == null)\n            {\n                Log.LogDebug(\"returning 404 blog post not found\");\n                return StatusCode(404);\n            }\n\n            var comment = blogPost.Comments.FirstOrDefault(c => c.Id == commentId);\n\n            if (comment == null)\n            {\n                Log.LogDebug(\"returning 404 comment not found\");\n                return StatusCode(404);\n            }\n\n            comment.IsApproved = true;\n            await BlogService.Update(blogPost);\n\n            return StatusCode(200);\n\n        }\n\n        [HttpPost]\n        [AllowAnonymous]\n        [ValidateAntiForgeryToken]\n        public virtual async Task<IActionResult> AjaxDeleteComment(string postId, string commentId)\n        {\n            // disable status code page for ajax requests\n            var statusCodePagesFeature = HttpContext.Features.Get<IStatusCodePagesFeature>();\n            if (statusCodePagesFeature != null)\n            {\n                statusCodePagesFeature.Enabled = false;\n            }\n\n            if (string.IsNullOrEmpty(postId))\n            {\n                Log.LogDebug(\"returning 404 because no postid was posted\");\n                return StatusCode(404);\n            }\n\n            if (string.IsNullOrEmpty(commentId))\n            {\n                Log.LogDebug(\"returning 404 because no commentid was posted\");\n                return StatusCode(404);\n            }\n\n            var project = await ProjectService.GetCurrentProjectSettings();\n\n            if (project == null)\n            {\n                Log.LogDebug(\"returning 404 blog not found\");\n                return StatusCode(404);\n            }\n\n            bool canEdit = await User.CanEditBlog(project.Id, AuthorizationService);\n            \n            if (!canEdit)\n            {\n                Log.LogInformation(\"returning 403 user is not allowed to edit\");\n                return StatusCode(403);\n            }\n\n            var blogPost = await BlogService.GetPost(postId);\n\n            if (blogPost == null)\n            {\n                Log.LogDebug(\"returning 404 blog post not found\");\n                return StatusCode(404);\n            }\n\n            var comment = blogPost.Comments.FirstOrDefault(c => c.Id == commentId);\n\n            if (comment == null)\n            {\n                Log.LogDebug(\"returning 404 comment not found\");\n                return StatusCode(404);\n            }\n\n            //comment.IsApproved = true;\n            //blogPost.Comments.Remove(comment);\n            var copyOfComments = blogPost.Comments.ToList();\n            for (var i =0; i < copyOfComments.Count; i++)\n            {\n                if(copyOfComments[i].Id == commentId)\n                {\n                    copyOfComments.RemoveAt(i);\n                }\n            }\n            blogPost.Comments = copyOfComments;\n            await BlogService.Update(blogPost);\n\n            return StatusCode(200);\n        }\n\n        [HttpGet]\n        [Authorize]\n        public virtual async Task<IActionResult> CanEdit(CancellationToken cancellationToken)\n        {\n            var project = await ProjectService.GetCurrentProjectSettings();\n            if (project == null)\n            {\n                Log.LogError(\"project settings not found returning 404\");\n                return NotFound();\n            }\n\n            var canEdit = await User.CanEditBlog(project.Id, AuthorizationService);\n\n            return Ok(canEdit);\n        }\n\n        protected string GetUrl(string website)\n        {\n            if(string.IsNullOrEmpty(website)) { return string.Empty; }\n\n            if (!website.Contains(\"://\"))\n                website = \"http://\" + website;\n\n            if (Uri.TryCreate(website, UriKind.Absolute, out Uri url))\n                return url.ToString();\n\n            return string.Empty;\n        }\n  \n\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Web/Controllers/ContentHistoryController.cs",
    "content": "﻿// Copyright (c) Source Tree Solutions, LLC. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.\n// Author:                  Joe Audette\n// Created:                 2018-07-03\n// Last Modified:           2018-07-09\n// \n\nusing cloudscribe.SimpleContent.Models;\nusing cloudscribe.SimpleContent.Web.ViewModels;\nusing Microsoft.AspNetCore.Authorization;\nusing Microsoft.AspNetCore.Mvc;\nusing Microsoft.Extensions.Logging;\nusing System;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace cloudscribe.SimpleContent.Web.Mvc.Controllers\n{\n    public class ContentHistoryController : Controller\n    {\n        public ContentHistoryController(\n            IProjectService projectService,\n            IContentHistoryQueries historyQueries,\n            IContentHistoryCommands historyCommands,\n            IAuthorizationService authorizationService,\n            ILogger<ContentHistoryController> logger\n            )\n        {\n            ProjectService = projectService;\n            HistoryQueries = historyQueries;\n            HistoryCommands = historyCommands;\n            AuthorizationService = authorizationService;\n            Log = logger;\n        }\n\n        protected IProjectService ProjectService { get; private set; }\n        protected IContentHistoryQueries HistoryQueries { get; private set; }\n        protected IContentHistoryCommands HistoryCommands { get; private set; }\n        protected IAuthorizationService AuthorizationService { get; private set; }\n        protected ILogger Log { get; private set; }\n\n        [Authorize(Policy = \"ViewContentHistoryPolicy\")]\n        public virtual async Task<IActionResult> Index(\n            CancellationToken cancellationToken,\n            int pageNumber = 1,\n            int pageSize = 10,\n            int sortMode = 0,\n            string contentSource = null,\n            string editor = null\n\n            )\n        {\n            var project = await ProjectService.GetCurrentProjectSettings();\n            if (project == null)\n            {\n                Log.LogError(\"project settings not found returning 404\");\n                return NotFound();\n            }\n\n            var model = new ContentHistoryViewModel()\n            {\n                History = await HistoryQueries.GetList(\n                project.Id,\n                contentSource,\n                editor,\n                pageNumber,\n                pageSize,\n                sortMode,\n                cancellationToken),\n                ContentSource = contentSource,\n                Editor = editor,\n                SortMode = sortMode,\n                CanEditPages = await User.CanEditPages(project.Id, AuthorizationService),\n                CanEditPosts = await User.CanEditBlog(project.Id, AuthorizationService)\n            };\n            \n            return View(model);\n        }\n\n        [Authorize(Policy = \"ViewContentHistoryPolicy\")]\n        [HttpPost]\n        [ValidateAntiForgeryToken]\n        public async Task<IActionResult> DeleteHistory(Guid id, string returnUrl = null)\n        {\n            var project = await ProjectService.GetCurrentProjectSettings();\n            if (project == null)\n            {\n                Log.LogError(\"project settings not found\");\n                return RedirectToAction(\"Index\");\n            }\n\n            var hx = await HistoryQueries.Fetch(project.Id, id).ConfigureAwait(false);\n            if(hx != null)\n            {\n                switch(hx.ContentSource)\n                {\n                    case ContentSource.Blog:\n                        var canEditPosts = await User.CanEditPages(project.Id, AuthorizationService);\n                        if(canEditPosts)\n                        {\n                            await HistoryCommands.Delete(project.Id, id).ConfigureAwait(false);\n                        }\n\n                        break;\n\n                    case ContentSource.Page:\n                        var canEditPages = await User.CanEditPages(project.Id, AuthorizationService);\n                        if(canEditPages)\n                        {\n                            await HistoryCommands.Delete(project.Id, id).ConfigureAwait(false);\n                        }\n\n                        break;\n                }\n            }\n\n            if(!string.IsNullOrEmpty(returnUrl))\n            {\n                return LocalRedirect(returnUrl);\n            }\n\n            return RedirectToAction(\"Index\");\n        }\n\n        [Authorize(Policy = \"ViewContentHistoryPolicy\")]\n        [HttpPost]\n        [ValidateAntiForgeryToken]\n        public async Task<IActionResult> DeleteOlderThan(int days)\n        {\n            if(days < 0)\n            {\n                return RedirectToAction(\"Index\");\n            }\n\n            var project = await ProjectService.GetCurrentProjectSettings();\n            if (project == null)\n            {\n                Log.LogError(\"project settings not found\");\n                return RedirectToAction(\"Index\");\n            }\n\n            var cutoffUtc = DateTime.UtcNow.AddDays(-days);\n            var canEditPosts = await User.CanEditBlog(project.Id, AuthorizationService);\n            var canEditPages = await User.CanEditPages(project.Id, AuthorizationService);\n            if(canEditPages && canEditPosts)\n            {\n                await HistoryCommands.DeleteOlderThan(project.Id, cutoffUtc).ConfigureAwait(false);\n            }\n            else\n            {\n                Log.LogWarning($\"rejected request to delete content history older than {days} for user {User.Identity.Name} because this is only allowed if users can edit both pages and posts.\");\n            }\n\n\n\n\n            return RedirectToAction(\"Index\");\n        }\n\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Web/Controllers/PageController.cs",
    "content": "﻿using cloudscribe.DateTimeUtils;\nusing cloudscribe.SimpleContent.Models;\nusing cloudscribe.SimpleContent.Models.Versioning;\nusing cloudscribe.SimpleContent.Services;\nusing cloudscribe.SimpleContent.Web.Services;\nusing cloudscribe.SimpleContent.Web.ViewModels;\nusing cloudscribe.Web.Common.Extensions;\nusing cloudscribe.Web.Navigation.Caching;\nusing MediatR;\nusing Microsoft.AspNetCore.Authorization;\nusing Microsoft.AspNetCore.Mvc;\nusing Microsoft.AspNetCore.Routing;\nusing Microsoft.Extensions.Localization;\nusing Microsoft.Extensions.Logging;\nusing Microsoft.Extensions.Options;\nusing Org.BouncyCastle.Asn1.Cmp;\nusing System;\nusing System.Collections.Generic;\nusing System.Globalization;\nusing System.Linq;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace cloudscribe.SimpleContent.Web.Mvc.Controllers\n{\n    public class PageController : Controller\n    {\n        public PageController(\n            IMediator mediator,\n            IProjectService projectService,\n            IPageService blogService,\n            IContentProcessor contentProcessor,\n            IPageRoutes pageRoutes,\n            IAuthorizationService authorizationService,\n            ITimeZoneHelper timeZoneHelper,\n            ITimeZoneIdResolver timeZoneIdResolver,\n            IAuthorNameResolver authorNameResolver,\n            IContentTemplateService templateService,\n            IContentHistoryCommands historyCommands,\n            IContentHistoryQueries historyQueries,\n            IStringLocalizer<SimpleContent> localizer,\n            ITreeCache treeCache,\n            DraftPublishService draftPublishService,\n            JsSecuritySanitizer jsSecuritySanitizer,\n            IOptions<PageEditOptions> pageEditOptionsAccessor,\n\n            ILogger<PageController> logger)\n        {\n            Mediator = mediator;\n            ProjectService = projectService;\n            PageService = blogService;\n            TemplateService = templateService;\n            ContentProcessor = contentProcessor;\n            AuthorizationService = authorizationService;\n            AuthorNameResolver = authorNameResolver;\n            HistoryCommands = historyCommands;\n            HistoryQueries = historyQueries;\n            TimeZoneHelper = timeZoneHelper;\n            TimeZoneIdResolver = timeZoneIdResolver;\n            PageRoutes = pageRoutes;\n            EditOptions = pageEditOptionsAccessor.Value;\n            StringLocalizer = localizer;\n            NavigationCache = treeCache;\n            DraftPublishService = draftPublishService;\n            JsSecuritySanitizer = jsSecuritySanitizer;\n            Log = logger;\n        }\n\n        protected IProjectService ProjectService { get; private set; }\n        protected IPageService PageService { get; private set; }\n        protected IContentTemplateService TemplateService { get; private set; }\n        protected IContentProcessor ContentProcessor { get; private set; }\n        protected IAuthorizationService AuthorizationService { get; private set; }\n        protected IAuthorNameResolver AuthorNameResolver { get; private set; }\n        protected ITimeZoneHelper TimeZoneHelper { get; private set; }\n        protected ITimeZoneIdResolver TimeZoneIdResolver { get; private set; }\n        protected ILogger Log { get; private set; }\n        protected IPageRoutes PageRoutes { get; private set; }\n        protected IStringLocalizer<SimpleContent> StringLocalizer { get; private set; }\n        protected PageEditOptions EditOptions { get; private set; }\n        protected IContentHistoryCommands HistoryCommands { get; private set; }\n        protected IContentHistoryQueries HistoryQueries { get; private set; }\n\n        protected ITreeCache NavigationCache { get; private set; }\n        protected DraftPublishService DraftPublishService { get; private set; }\n        public JsSecuritySanitizer JsSecuritySanitizer { get; private set; }\n        protected IMediator Mediator { get; private set; }\n\n        [HttpHead]\n        [HttpGet]\n        [AllowAnonymous]\n        public virtual async Task<IActionResult> Index(\n            CancellationToken cancellationToken,\n            string slug = \"\", \n            bool showDraft = false,\n            Guid? historyId = null\n            )\n        {\n            await DraftPublishService.PublishReadyDrafts(cancellationToken);\n\n            var viewContextRequest = new PageViewContextRequest(User, slug, showDraft, historyId);\n            var viewContext = await Mediator.Send(viewContextRequest);\n            if (viewContext.Project == null)\n            {\n                Log.LogError(\"project settings not found returning 404\");\n                return NotFound();\n            }\n\n            var page = viewContext.CurrentPage;\n            \n            \n            if(page == null)\n            { \n                if (viewContext.CanEdit && viewContext.RootPageCount == 0)\n                {\n                    page = new Page\n                    {\n                        ProjectId = viewContext.Project.Id,\n                        Slug = viewContext.Project.DefaultPageSlug\n                    };\n                    if (HttpContext.Request.Path == \"/\")\n                    {\n                        ViewData[\"Title\"] = StringLocalizer[\"Home\"];\n                        page.Title = StringLocalizer[\"No pages found, please click the plus icon to create the home page\"];\n                    }\n                    else\n                    {\n                        ViewData[\"Title\"] = StringLocalizer[\"No Pages Found\"];\n                        page.Title = StringLocalizer[\"No pages found, please click the plus icon to create the first page\"];\n                    }\n                }\n                else\n                {\n                    if (viewContext.RootPageCount > 0)\n                    {\n                        if (slug == viewContext.Project.DefaultPageSlug)\n                        {\n                            // slug was empty and no matching page found for default slug\n                            // but since there exist root level pages we should\n                            // show an index menu. \n                            // esp useful if not using pages as the default route\n                            // /p or /docs\n                            ViewData[\"Title\"] = StringLocalizer[\"Content Index\"];\n                            var emptyModel = new PageViewModel(ContentProcessor)\n                            {\n                                ProjectSettings = viewContext.Project,\n                                CanEdit = viewContext.CanEdit,\n                                CommentsAreOpen = false,\n                                TimeZoneHelper = TimeZoneHelper,\n                                TimeZoneId = await TimeZoneIdResolver.GetUserTimeZoneId(),\n                                PageTreePath = Url.Action(\"Tree\"),\n                                NewItemPath = Url.RouteUrl(PageRoutes.NewPageRouteName, new { slug = \"\" }),\n                                EditPath = Url.RouteUrl(PageRoutes.PageEditRouteName, new { slug })\n                            };\n\n                            return View(\"IndexMenu\", emptyModel);\n                        }\n                        \n                        return NotFound();\n                    }\n                    else\n                    {\n                        Response.StatusCode = 404;\n                        return View(\"NoPages\", 404);\n                    }\n                }\n            }\n            // page is not null at this point\n\n            if (!string.IsNullOrEmpty(page.ViewRoles))\n            {\n                if (!User.Identity.IsAuthenticated)\n                {\n                    Log.LogWarning($\"page {page.Title} is protected and user is not authenticated, returning login page and 302\");\n                    return View(\"NotFound\", 401);\n                }\n                else if (!User.IsInRoles(page.ViewRoles))\n                {\n                    Log.LogWarning($\"page {page.Title} is protected by roles that user is not in so returning 403\");\n                    return View(\"NotFound\", 403);\n                }\n            }\n\n            if (!string.IsNullOrEmpty(page.ExternalUrl))\n            {\n                if (viewContext.CanEdit)\n                {\n                    Log.LogWarning($\"page {page.Title} has override url {page.ExternalUrl}, redirecting to edit since user can edit\");\n                    return RedirectToRoute(PageRoutes.PageEditRouteName, new { slug = page.Slug });\n                }\n                else\n                {\n                    Log.LogWarning($\"page {page.Title} has override url {page.ExternalUrl}, not intended to be viewed so returning 404\");\n                    return NotFound();\n                }\n            }\n            \n            if (!viewContext.CanEdit)\n            {\n                if (!page.HasPublishedVersion())\n                {\n                    Log.LogWarning($\"page {page.Title} is unpublished and user is not editor so returning 404\");\n                    return NotFound();\n                }\n            }\n\n            Dictionary<string, bool?> showEditorialItems = ShowEditorialItemsResolver(page, viewContext.Project);\n            \n            var model = new PageViewModel(ContentProcessor)\n            {\n                CurrentPage = page,\n                ProjectSettings = viewContext.Project,\n                CanEdit = viewContext.CanEdit,\n                CommentsAreOpen = false,\n                TimeZoneHelper = TimeZoneHelper,\n                TimeZoneId = await TimeZoneIdResolver.GetUserTimeZoneId(),\n                PageTreePath = Url.Action(\"Tree\"),\n                HasPublishedVersion = viewContext.HasPublishedVersion,\n                HasDraft = viewContext.HasDraft,\n                ShowingDraft = viewContext.ShowingDraft,\n                ShowCreatedBy = showEditorialItems[\"ShowCreatedBy\"],\n                ShowCreatedDate = showEditorialItems[\"ShowCreatedDate\"],\n                ShowLastModifiedBy = showEditorialItems[\"ShowLastModifiedBy\"],\n                ShowLastModifiedDate = showEditorialItems[\"ShowLastModifiedDate\"]\n            };\n\n            if(viewContext.History != null)\n            {\n                model.HistoryId = viewContext.History.Id;\n                model.HistoryArchiveDate = viewContext.History.ArchivedUtc;\n                model.ShowingDeleted = viewContext.DidRestoreDeleted;\n            }\n\n            model.EditPath = Url.RouteUrl(PageRoutes.PageEditRouteName, new { slug = model.CurrentPage.Slug });\n\n            if (model.CurrentPage.Slug == viewContext.Project.DefaultPageSlug)\n            {\n                // not setting the parent slug if the current page is home page\n                // otherwise it would be awkward to create more root level pages\n                model.NewItemPath = Url.RouteUrl(PageRoutes.NewPageRouteName, new { slug = \"\" });\n            }\n            else\n            {\n                // for non home pages if the user clicks the new link\n                // make it use the current page slug as the parent slug for the new item\n                model.NewItemPath = Url.RouteUrl(PageRoutes.NewPageRouteName, new { slug = \"\", parentSlug = model.CurrentPage.Slug });\n            }\n            if(!string.IsNullOrWhiteSpace(page.TemplateKey))\n            {\n                model.Template = await TemplateService.GetTemplate(viewContext.Project.Id, page.TemplateKey);\n            }\n            \n            ViewData[\"Title\"] = page.Title;\n                \n            if (page.MenuOnly)\n            {\n                return View(\"ChildMenu\", model);\n            }\n            return View(model);\n        }\n\n        [HttpGet]\n        [AllowAnonymous]\n        public virtual async Task<IActionResult> NewPage(\n            CancellationToken cancellationToken,\n            string parentSlug = \"\",\n            string query = null,\n            int pageNumber = 1,\n            int pageSize = 10\n            )\n        {\n            var editContextRequest = new PageEditContextRequest(User, null, null, null, null);\n            var editContext = await Mediator.Send(editContextRequest);\n\n            if (!editContext.IsValidRequest)\n            {\n                Log.LogInformation(\"redirecting to index because project settings not found\");\n                return RedirectToRoute(PageRoutes.PageRouteName);\n            }\n            \n            var templateCount = await TemplateService.GetCountOfTemplates(editContext.Project.Id, ProjectConstants.PageFeatureName);\n            if (templateCount == 0)\n            {\n                return RedirectToRoute(PageRoutes.PageEditRouteName, new { parentSlug });\n            }\n\n            var templates = await TemplateService.GetTemplates(\n                editContext.Project.Id, \n                ProjectConstants.PageFeatureName, \n                query,\n                pageNumber,\n                pageSize,\n                cancellationToken);\n\n            \n            var model = new NewContentViewModel()\n            {\n                ParentSlug = parentSlug,\n                Templates = templates,\n                Query = query,\n                PageNumber = pageNumber,\n                PageSize = pageSize,\n                CountOfTemplates = templateCount,\n                SearchRouteName = PageRoutes.NewPageRouteName,\n                PostActionName = \"InitTemplatedPage\",\n                ShowCreatedBy = editContext.Project.ShowCreatedBy,\n                ShowCreatedDate = editContext.Project.ShowCreatedDate,\n                ShowLastModifiedBy = editContext.Project.ShowLastModifiedBy,\n                ShowLastModifiedDate = editContext.Project.ShowLastModifiedDate\n            };\n\n            if(!string.IsNullOrWhiteSpace(parentSlug))\n            {\n                model.PageOrder = await PageService.GetNextChildPageOrder(parentSlug);\n            }\n            if(editContext.RootPageCount == 0)\n            {\n                var slug = editContext.Project.DefaultPageSlug;\n\n                if (editContext.Project.DefaultPageSlug == \"home\")\n                    model.Title = StringLocalizer[\"Home\"];\n                else\n                    model.Title = StringLocalizer[\"Page 1\"];\n            }\n            \n            return View(model);\n        }\n\n        [HttpPost]\n        [AllowAnonymous]\n        [ValidateAntiForgeryToken]\n        public virtual async Task<IActionResult> InitTemplatedPage(NewContentViewModel model)\n        {\n            var project = await ProjectService.GetCurrentProjectSettings();\n\n            if (project == null)\n            {\n                Log.LogInformation(\"redirecting to index because project settings not found\");\n                return RedirectToRoute(PageRoutes.PageRouteName);\n            }\n\n            var canEdit = await User.CanEditPages(project.Id, AuthorizationService);\n\n            if (!canEdit)\n            {\n                Log.LogInformation(\"redirecting to index because user is not allowed to edit\");\n                return RedirectToRoute(PageRoutes.PageRouteName);\n            }\n\n            if (!ModelState.IsValid)\n            {\n                model.Templates = await TemplateService.GetTemplates(\n                    project.Id, \n                    ProjectConstants.PageFeatureName,\n                    model.Query,\n                    model.PageNumber,\n                    model.PageSize\n\n                    );\n                model.SearchRouteName = PageRoutes.NewPageRouteName;\n                model.PostActionName = \"InitTemplatedPage\";\n\n                return View(\"NewPage\", model);\n            }\n\n            var template = await TemplateService.GetTemplate(project.Id, model.SelectedTemplate);\n\n            if (template == null)\n            {\n                Log.LogWarning($\"redirecting to index because content template {model.SelectedTemplate} was not found\");\n                return RedirectToRoute(PageRoutes.PageRouteName);\n            }\n\n            var request = new InitTemplatedPageRequest(\n                project.Id,\n                User.Identity.Name,\n                await AuthorNameResolver.GetAuthorName(User),\n                model, \n                template);\n\n            var response = await Mediator.Send(request);\n            if(response.Succeeded)\n            {\n                Log.LogDebug($\"succeeded in initializing a page with template {model.SelectedTemplate}\");\n                return RedirectToRoute(PageRoutes.PageEditRouteName, new { slug = response.Value.Slug });\n            }\n            else\n            {\n                if(response.ErrorMessages != null && response.ErrorMessages.Count > 0)\n                {\n                    foreach(var err in response.ErrorMessages)\n                    {\n                        this.AlertDanger(err, true);\n                    }\n                }\n            }\n            \n            return RedirectToRoute(PageRoutes.PageRouteName);\n        }\n        \n        protected virtual async Task<IActionResult> EditWithTemplate(CancellationToken cancellationToken, PageEditContext editContext)\n        {\n            ViewData[\"Title\"] = string.Format(CultureInfo.CurrentUICulture, StringLocalizer[\"Edit - {0}\"], editContext.CurrentPage.Title);\n\n            var template = await TemplateService.GetTemplate(editContext.Project.Id, editContext.CurrentPage.TemplateKey);\n            if (template == null)\n            {\n                Log.LogError($\"redirecting to index because content template {editContext.CurrentPage.TemplateKey} was not found\");\n                return RedirectToRoute(PageRoutes.PageRouteName);\n            }\n\n            Dictionary<string, bool?> editEditorialItems = EditEditorialItemsResolver(editContext.CurrentPage, editContext.Project);\n\n            var model = new PageEditWithTemplateViewModel()\n            {\n                ProjectId = editContext.Project.Id,\n                DisqusShortname = editContext.Project.DisqusShortName,\n                Author = editContext.CurrentPage.Author,\n                Id = editContext.CurrentPage.Id,\n                CorrelationKey = editContext.CurrentPage.CorrelationKey,\n                IsPublished = editContext.CurrentPage.IsPublished,\n                ShowMenu = editContext.CurrentPage.ShowMenu,\n                MetaDescription = editContext.CurrentPage.MetaDescription,\n                PageOrder = editContext.CurrentPage.PageOrder,\n                ParentId = editContext.CurrentPage.ParentId,\n                ParentSlug = editContext.CurrentPage.ParentSlug,\n                ShowHeading = editContext.CurrentPage.ShowHeading,\n                Slug = editContext.CurrentPage.Slug,\n                Title = editContext.CurrentPage.Title,\n                MenuFilters = editContext.CurrentPage.MenuFilters,\n                ViewRoles = editContext.CurrentPage.ViewRoles,\n                ShowComments = editContext.CurrentPage.ShowComments,\n                Template = template,\n                TemplateModel = TemplateService.DesrializeTemplateModel(editContext.CurrentPage, template), // if draft serialized model exists use that - jk\n                ProjectDefaultSlug = editContext.Project.DefaultPageSlug,\n                DidReplaceDraft = editContext.DidReplaceDraft,\n                DidRestoreDeleted = editContext.DidRestoreDeleted,\n                HasDraft = editContext.CurrentPage.HasDraftVersion(),\n                ShowCreatedBy = editEditorialItems[\"ShowCreatedBy\"],\n                ShowCreatedDate = editEditorialItems[\"ShowCreatedDate\"],\n                ShowLastModifiedBy = editEditorialItems[\"ShowLastModifiedBy\"],\n                ShowLastModifiedDate = editEditorialItems[\"ShowLastModifiedDate\"]\n            };\n\n            if (editContext.History != null)\n            {\n                model.HistoryArchiveDate = editContext.History.ArchivedUtc;\n                model.HistoryId = editContext.History.Id;\n            }\n\n            var tzId = await TimeZoneIdResolver.GetUserTimeZoneId();\n\n            if (editContext.CurrentPage.PubDate.HasValue)\n            {\n                model.PubDate = TimeZoneHelper.ConvertToLocalTime(editContext.CurrentPage.PubDate.Value, tzId);\n            }\n\n            if (editContext.CurrentPage.DraftPubDate.HasValue)\n            {\n                model.DraftPubDate = TimeZoneHelper.ConvertToLocalTime(editContext.CurrentPage.DraftPubDate.Value, tzId);\n            }\n\n            if (!string.IsNullOrWhiteSpace(editContext.CurrentPage.DraftAuthor))\n            {\n                model.Author = editContext.CurrentPage.DraftAuthor;\n            }\n\n            if (model.TemplateModel == null)\n            {\n                Log.LogError($\"redirecting to index model desrialization failed for page {editContext.CurrentPage.Title}\");\n                return RedirectToRoute(PageRoutes.PageRouteName);\n            }\n\n            return View(\"EditWithTemplate\", model);\n        }\n\n        [HttpPost]\n        [AllowAnonymous]\n        [ValidateAntiForgeryToken]\n        public virtual async Task<IActionResult> EditWithTemplate(PageEditWithTemplateViewModel model)\n        {\n            var editContextRequest = new PageEditContextRequest(User, null, model.Id, null, null);\n            var editContext = await Mediator.Send(editContextRequest);\n\n            if (!editContext.IsValidRequest)\n            {\n                Log.LogInformation(\"redirecting to index because project settings not found\");\n                return RedirectToRoute(PageRoutes.PageRouteName);\n            }\n\n            var currentPage = editContext.CurrentPage;\n\n            if (editContext.CurrentPage == null && model.HistoryId.HasValue)\n            {\n                var history = await HistoryQueries.Fetch(editContext.Project.Id, model.HistoryId.Value).ConfigureAwait(false);\n                if (history != null)\n                {\n                    var hxPage = new Page();\n                    history.CopyTo(hxPage);\n                    await PageService.Create(hxPage); // re-create page here because handler expects existing page and only updates\n                    currentPage = hxPage;\n                }\n            }\n            \n            if (currentPage == null)\n            {\n                Log.LogError($\"redirecting to index because page was not found for id {model.Id}\");\n                return RedirectToRoute(PageRoutes.PageRouteName);\n            }\n            ViewData[\"Title\"] = string.Format(CultureInfo.CurrentUICulture, StringLocalizer[\"Edit - {0}\"], currentPage.Title);\n\n            var template = await TemplateService.GetTemplate(editContext.Project.Id, currentPage.TemplateKey);\n            if (template == null)\n            {\n                Log.LogError($\"redirecting to index because content template {currentPage.TemplateKey} was not found\");\n                return RedirectToRoute(PageRoutes.PageRouteName);\n            }\n            \n            var request = new UpdateTemplatedPageRequest(\n                editContext.Project.Id,\n                User.Identity.Name,\n                model,\n                template,\n                currentPage,\n                Request.Form,\n                ModelState\n                );\n\n            var response = await Mediator.Send(request);\n            if (response.Succeeded)\n            {\n                if (model.SaveMode == SaveMode.DeleteCurrentDraft)\n                    this.AlertSuccess(StringLocalizer[\"The current draft of this page has been deleted.\"], true);\n                else\n                    this.AlertSuccess(StringLocalizer[\"The page was updated successfully.\"], true);\n\n                if(response.Value.Slug == editContext.Project.DefaultPageSlug)\n                {\n                    return RedirectToRoute(PageRoutes.PageRouteName, new { slug = \"\" });\n                }\n                return RedirectToRoute(PageRoutes.PageRouteName, new { slug = response.Value.Slug });\n            }\n            else\n            {\n                model.Template = template;\n                model.ProjectDefaultSlug = editContext.Project.DefaultPageSlug;\n\n                return View(\"EditWithTemplate\", model);\n            }\n            \n        }\n\n        [HttpGet]\n        [AllowAnonymous]\n        public virtual async Task<IActionResult> Edit(\n            CancellationToken cancellationToken,\n            string slug = \"\",\n            string parentSlug = \"\",\n            string type = \"\",\n            Guid? historyId = null\n            )\n        {\n            var request = new PageEditContextRequest(User, slug, null, null, historyId);\n            var editContext = await Mediator.Send(request);\n            if(!editContext.IsValidRequest)\n            {\n                Log.LogInformation(\"redirecting to index because project settings not found\");\n                return RedirectToRoute(PageRoutes.PageRouteName);\n            }\n\n            if (editContext.CurrentPage != null && !string.IsNullOrWhiteSpace(editContext.CurrentPage.TemplateKey))\n            {\n                //return RedirectToRoute(PageRoutes.PageEditWithTemplateRouteName, routeVals);\n                return await EditWithTemplate(cancellationToken, editContext);\n            }\n\n            Dictionary<string, bool?> editEditorialItems = EditEditorialItemsResolver(editContext.CurrentPage, editContext.Project);\n            PageEditViewModel model;\n\n            if (editEditorialItems.Count > 0)\n            {\n                model = new PageEditViewModel\n                {\n                    ProjectId = editContext.Project.Id,\n                    DisqusShortname = editContext.Project.DisqusShortName,\n                    ProjectDefaultSlug = editContext.Project.DefaultPageSlug,\n                    ShowCreatedBy = editEditorialItems[\"ShowCreatedBy\"],\n                    ShowCreatedDate = editEditorialItems[\"ShowCreatedDate\"],\n                    ShowLastModifiedBy = editEditorialItems[\"ShowLastModifiedBy\"],\n                    ShowLastModifiedDate = editEditorialItems[\"ShowLastModifiedDate\"]\n                };\n            }\n            else\n            {\n                model = new PageEditViewModel\n                {\n                    ProjectId = editContext.Project.Id,\n                    DisqusShortname = editContext.Project.DisqusShortName,\n                    ProjectDefaultSlug = editContext.Project.DefaultPageSlug,\n                    ShowCreatedBy = null,\n                    ShowCreatedDate = null,\n                    ShowLastModifiedBy = null,\n                    ShowLastModifiedDate = null\n                };\n            }\n            \n            var routeVals = new RouteValueDictionary\n            {\n                { \"slug\", slug }\n            };\n            if (historyId.HasValue)\n            {\n                routeVals.Add(\"historyId\", historyId.Value);\n            }\n            \n            if (editContext.CurrentPage == null) // new page\n            {\n                ViewData[\"Title\"] = StringLocalizer[\"New Page\"];\n                model.ParentSlug = parentSlug;\n                model.PageOrder = await PageService.GetNextChildPageOrder(parentSlug, cancellationToken);\n                model.ContentType = editContext.Project.DefaultContentType;\n\n                if (EditOptions.AllowMarkdown && !string.IsNullOrWhiteSpace(type) && type == \"markdown\")\n                {\n                    model.ContentType = \"markdown\";\n                }\n                if (!string.IsNullOrWhiteSpace(type) && type == \"html\")\n                {\n                    model.ContentType = \"html\";\n                }\n                \n                if (editContext.RootPageCount == 0) // expected if home page doesn't exist yet\n                {\n                    var rootPagePath = Url.RouteUrl(PageRoutes.PageRouteName);\n                    if (string.IsNullOrWhiteSpace(slug))\n                    {\n                        slug = editContext.Project.DefaultPageSlug;\n\n                        if(editContext.Project.DefaultPageSlug == \"home\")\n                            model.Title = StringLocalizer[\"Home\"];\n                        else\n                            model.Title = StringLocalizer[\"Page 1\"];\n                    }\n\n                }\n                model.Author = await AuthorNameResolver.GetAuthorName(User);\n                model.Slug = slug;\n            }\n            else // page not null\n            {\n                // if the page is protected by view roles return 404 if user is not in an allowed role\n                if ((!string.IsNullOrEmpty(editContext.CurrentPage.ViewRoles)))\n                {\n                    if (!User.IsInRoles(editContext.CurrentPage.ViewRoles))\n                    {\n                        Log.LogWarning($\"page {editContext.CurrentPage.Title} is protected by roles that user is not in so returning 404\");\n                        return NotFound();\n                    }\n                }\n\n                ViewData[\"Title\"] = string.Format(CultureInfo.CurrentUICulture, StringLocalizer[\"Edit - {0}\"], editContext.CurrentPage.Title);\n                if (string.IsNullOrWhiteSpace(editContext.CurrentPage.DraftContent))\n                {\n                    model.Author = editContext.CurrentPage.Author;\n                    model.Content = editContext.CurrentPage.Content;\n                }\n                else\n                {\n                    model.Author = editContext.CurrentPage.DraftAuthor;\n                    model.Content = editContext.CurrentPage.DraftContent;\n                }\n\n                model.Id = editContext.CurrentPage.Id;\n                model.CorrelationKey = editContext.CurrentPage.CorrelationKey;\n                model.IsPublished = editContext.CurrentPage.IsPublished;\n                model.ShowMenu = editContext.CurrentPage.ShowMenu;\n                model.MenuOnly = editContext.CurrentPage.MenuOnly;\n                model.MetaDescription = editContext.CurrentPage.MetaDescription;\n                model.PageOrder = editContext.CurrentPage.PageOrder;\n                model.ParentId = editContext.CurrentPage.ParentId;\n                model.ParentSlug = editContext.CurrentPage.ParentSlug;\n                model.ShowHeading = editContext.CurrentPage.ShowHeading;\n                model.Slug = editContext.CurrentPage.Slug;\n                model.ExternalUrl = editContext.CurrentPage.ExternalUrl;\n                model.Title = editContext.CurrentPage.Title;\n                model.MenuFilters = editContext.CurrentPage.MenuFilters;\n                model.ViewRoles = editContext.CurrentPage.ViewRoles;\n                model.ShowComments = editContext.CurrentPage.ShowComments;\n                model.DisableEditor = editContext.CurrentPage.DisableEditor;\n                model.ContentType = editContext.CurrentPage.ContentType;\n                model.DidReplaceDraft = editContext.DidReplaceDraft;\n                model.DidRestoreDeleted = editContext.DidRestoreDeleted;\n                model.HasDraft = editContext.CurrentPage.HasDraftVersion();\n                if (editContext.History != null)\n                {\n                    model.HistoryArchiveDate = editContext.History.ArchivedUtc;\n                    model.HistoryId = editContext.History.Id;\n                }\n\n                var tzId = await TimeZoneIdResolver.GetUserTimeZoneId();\n\n                if (editContext.CurrentPage.PubDate.HasValue)\n                {\n                    model.PubDate = TimeZoneHelper.ConvertToLocalTime(editContext.CurrentPage.PubDate.Value, tzId);\n                }\n\n                if (editContext.CurrentPage.DraftPubDate.HasValue)\n                {\n                    model.DraftPubDate = TimeZoneHelper.ConvertToLocalTime(editContext.CurrentPage.DraftPubDate.Value, tzId);\n                }\n            }\n\n            return View(model);\n        }\n\n        [HttpPost]\n        [AllowAnonymous]\n        [ValidateAntiForgeryToken]\n        public virtual async Task<IActionResult> Edit(PageEditViewModel model)\n        {\n            var editContextRequest = new PageEditContextRequest(User, null, model.Id, null, null);\n            var editContext = await Mediator.Send(editContextRequest);\n\n            if (!editContext.IsValidRequest)\n            {\n                Log.LogInformation(\"redirecting to index because project settings not found\");\n                return RedirectToRoute(PageRoutes.PageRouteName);\n            }\n\n            if (!ModelState.IsValid)\n            {\n                if (string.IsNullOrEmpty(model.Id))\n                {\n                    ViewData[\"Title\"] = StringLocalizer[\"New Page\"];\n                }\n                else\n                {\n                    ViewData[\"Title\"] = string.Format(CultureInfo.CurrentUICulture, StringLocalizer[\"Edit - {0}\"], model.Title);\n                }\n                model.DisqusShortname = editContext.Project.DisqusShortName;\n                model.ProjectDefaultSlug = editContext.Project.DefaultPageSlug;\n\n                return View(model);\n            }\n\n            var currentPage = editContext.CurrentPage;\n\n\n            if (editContext.CurrentPage == null && model.HistoryId.HasValue) // restore a deleted page from history\n            {\n                var history = await HistoryQueries.Fetch(editContext.Project.Id, model.HistoryId.Value).ConfigureAwait(false);\n                if (history != null)\n                {\n                    var hxPage = new Page();\n                    history.CopyTo(hxPage);\n                    await PageService.Create(hxPage); // re-create page here because handler expects existing page and only updates\n                    currentPage = hxPage;\n                }\n            }\n\n            var isNew = (currentPage == null);\n\n            var request = new CreateOrUpdatePageRequest(\n                editContext.Project.Id,\n                User.Identity.Name,\n                model,\n                currentPage,\n                ModelState\n                );\n\n            var response = await Mediator.Send(request);\n            if (response.Succeeded)\n            {\n                if(isNew)\n                {\n                    this.AlertSuccess(StringLocalizer[\"The page was created successfully.\"], true);\n                }\n                else\n                {\n                    if (model.SaveMode == SaveMode.DeleteCurrentDraft)\n                        this.AlertSuccess(StringLocalizer[\"The current draft of this page has been deleted.\"], true);\n                    else\n                        this.AlertSuccess(StringLocalizer[\"The page was updated successfully.\"], true);\n                }\n\n                if (!string.IsNullOrEmpty(response.Value.ExternalUrl))\n                {\n                    this.AlertWarning(StringLocalizer[\"Note that since this page has an override url, the menu item will link to the url so the page is used only as a means to add a link in the menu, the content is not used.\"], true);\n                    return RedirectToRoute(PageRoutes.PageEditRouteName, new { slug = response.Value.Slug });\n                }\n\n                if(response.Value.Slug == editContext.Project.DefaultPageSlug)\n                {\n                    return RedirectToRoute(PageRoutes.PageRouteName, new { slug = \"\" });\n                }\n                \n                return RedirectToRoute(PageRoutes.PageRouteName, new { slug = response.Value.Slug });\n            }\n            else\n            {\n                model.DisqusShortname = editContext.Project.DisqusShortName;\n                model.ProjectDefaultSlug = editContext.Project.DefaultPageSlug;\n\n                return View(model);\n            }\n            \n        }\n        \n        [HttpGet]\n        [AllowAnonymous]\n        public virtual async Task<IActionResult> Development(CancellationToken cancellationToken, string slug, string script)\n        {\n            var editContextRequest = new PageEditContextRequest(User, slug, null, script, null);\n            var editContext = await Mediator.Send(editContextRequest);\n            if (!editContext.IsValidRequest)\n            {\n                Log.LogInformation(\"redirecting to index because project settings not found\");\n                return RedirectToRoute(PageRoutes.PageRouteName, new { slug = \"\" } );\n            }\n            \n            var canDev = EditOptions.AlwaysShowDeveloperLink ? true : User.IsInRole(EditOptions.DeveloperAllowedRole);\n\n            if (!canDev)\n            {\n                Log.LogInformation(\"redirecting to index because user is not allowed by edit config for developer tools\");\n                return RedirectToRoute(PageRoutes.PageRouteName);\n            }\n            \n            if (editContext.CurrentPage == null)\n            {\n                Log.LogInformation(\"page not found, redirecting\");\n                return RedirectToRoute(PageRoutes.PageRouteName, new { slug = \"\" });\n            }\n\n            if ((!string.IsNullOrEmpty(editContext.CurrentPage.ViewRoles)))\n            {\n                if (!User.IsInRoles(editContext.CurrentPage.ViewRoles))\n                {\n                    Log.LogWarning($\"page {editContext.CurrentPage.Title} is protected by roles that user is not in so redirecting\");\n                    return RedirectToRoute(PageRoutes.PageRouteName, new { slug = \"\" });\n                }\n            }\n\n            ViewData[\"Title\"] = string.Format(CultureInfo.CurrentUICulture, StringLocalizer[\"Developer Tools - {0}\"], editContext.CurrentPage.Title);\n\n            var invalidScript = TempData[\"InvalidScript\"] as string;\n            \n            var model = new PageDevelopmentViewModel\n            {\n                Slug = editContext.CurrentPage.Slug,\n                Script = invalidScript ?? editContext.CurrentPage.Script\n            };\n            model.AddResourceViewModel.Slug = editContext.CurrentPage.Slug;\n            model.Css = editContext.CurrentPage.Resources.Where(x => x.Type == \"css\").OrderBy(x => x.Sort).ThenBy(x => x.Url).ToList<IPageResource>();\n            model.Js = editContext.CurrentPage.Resources.Where(x => x.Type == \"js\").OrderBy(x => x.Sort).ThenBy(x => x.Url).ToList<IPageResource>();\n            \n            return View(model);\n\n        }\n\n        [HttpPost]\n        [AllowAnonymous]\n        [ValidateAntiForgeryToken]\n        public virtual async Task<IActionResult> AddResource(AddPageResourceViewModel model)\n        {\n            var editContextRequest = new PageEditContextRequest(User, model.Slug, null, null, null);\n            var editContext = await Mediator.Send(editContextRequest);\n            if (!editContext.IsValidRequest)\n            {\n                Log.LogInformation(\"redirecting to index because project settings not found\");\n                return RedirectToRoute(PageRoutes.PageRouteName, new { slug = \"\" });\n            }\n\n            if (!ModelState.IsValid)\n            {\n                this.AlertDanger(StringLocalizer[\"Invalid request\"], true);\n                return RedirectToRoute(PageRoutes.PageDevelopRouteName, new { slug = model.Slug });\n            }\n            \n            var canDev = EditOptions.AlwaysShowDeveloperLink ? true : User.IsInRole(EditOptions.DeveloperAllowedRole);\n            if (!canDev)\n            {\n                Log.LogInformation(\"redirecting to index because user is not allowed by edit config for developer tools\");\n                return RedirectToRoute(PageRoutes.PageRouteName);\n            }\n            \n            if (editContext.CurrentPage == null)\n            {\n                Log.LogInformation(\"page not found, redirecting\");\n                return RedirectToRoute(PageRoutes.PageRouteName, new { slug = \"\" });\n            }\n\n            if ((!string.IsNullOrEmpty(editContext.CurrentPage.ViewRoles)))\n            {\n                if (!User.IsInRoles(editContext.CurrentPage.ViewRoles))\n                {\n                    Log.LogWarning($\"page {editContext.CurrentPage.Title} is protected by roles that user is not in so redirecting\");\n                    return RedirectToRoute(PageRoutes.PageRouteName, new { slug = \"\" });\n                }\n            }\n\n            var resource = new PageResource\n            {\n                ContentId = editContext.CurrentPage.Id,\n                Type = model.Type,\n                Environment = model.Environment,\n                Sort = model.Sort,\n                Url = model.Url\n            };\n            editContext.CurrentPage.Resources.Add(resource);\n            \n            await PageService.Update(editContext.CurrentPage);\n\n            return RedirectToRoute(PageRoutes.PageDevelopRouteName, new { slug = editContext.CurrentPage.Slug });\n        }\n\n        [HttpPost]\n        [AllowAnonymous]\n        [ValidateAntiForgeryToken]\n        public virtual async Task<IActionResult> AddScriptResource(PageDevelopmentViewModel model)\n        {\n            var editContextRequest = new PageEditContextRequest(User, model.Slug, null, model.Script, null);\n            var editContext = await Mediator.Send(editContextRequest);\n            var canDev = EditOptions.AlwaysShowDeveloperLink ? true : User.IsInRole(EditOptions.DeveloperAllowedRole);\n\n            if (!editContext.IsValidRequest)\n            {\n                Log.LogInformation(\"redirecting to index because project settings not found\");\n                return RedirectToRoute(PageRoutes.PageRouteName, new { slug = \"\" });\n            }\n\n            if (!canDev)\n            {\n                Log.LogInformation(\"redirecting to index because user is not allowed by edit config for developer tools\");\n                return RedirectToRoute(PageRoutes.PageRouteName);\n            }\n\n            if (editContext.CurrentPage == null)\n            {\n                Log.LogInformation(\"page not found, redirecting\");\n                return RedirectToRoute(PageRoutes.PageRouteName, new { slug = \"\" });\n            }\n\n            if (!string.IsNullOrEmpty(editContext.CurrentPage.ViewRoles))\n            {\n                if (!User.IsInRoles(editContext.CurrentPage.ViewRoles))\n                {\n                    Log.LogWarning($\"page {editContext.CurrentPage.Title} is protected by roles that user is not in so redirecting\");\n                    return RedirectToRoute(PageRoutes.PageRouteName, new { slug = \"\" });\n                }\n            }\n\n            // Allow empty script to clear/remove existing script\n            if (string.IsNullOrEmpty(model.Script))\n            {\n                editContext.CurrentPage.Script = null; // Clear the script\n                await PageService.Update(editContext.CurrentPage);\n                this.AlertSuccess(StringLocalizer[\"Script cleared successfully\"], true);\n                return RedirectToRoute(PageRoutes.PageDevelopRouteName, new { slug = editContext.CurrentPage.Slug });\n            }\n\n            // Trim whitespace before validation\n            model.Script = model.Script.Trim();\n\n            if (!model.Script.EndsWith(';'))\n            {\n                this.AlertDanger(StringLocalizer[\"Scripts should end with a semicolon\"], true);\n                // Preserve the invalid script so user doesn't lose their work\n                TempData[\"InvalidScript\"] = model.Script;\n                return RedirectToRoute(PageRoutes.PageDevelopRouteName, new { slug = editContext.CurrentPage.Slug });\n            }\n\n            // Validate script security before saving\n            var sanitizer = new JsSecuritySanitizer();\n            if (!sanitizer.IsSafe(model.Script, out var issues))\n            {\n                var errorMessage = $\"Script blocked due to security violations: {string.Join(\", \", issues)}\"; // too helpful?!\n                // var errorMessage = $\"Script blocked due to security violations - check the log for details\";\n                this.AlertDanger(StringLocalizer[errorMessage], true);\n                Log.LogWarning(\"Unsafe user-defined script blocked for page \" + (editContext.CurrentPage.Slug ?? editContext.CurrentPage.Id) + \" : \" + string.Join(\", \", issues));\n                \n                // Preserve the invalid script so user doesn't lose their work\n                TempData[\"InvalidScript\"] = model.Script;\n                return RedirectToRoute(PageRoutes.PageDevelopRouteName, new { slug = editContext.CurrentPage.Slug });\n            }\n\n            editContext.CurrentPage.Script = model.Script;\n\n            await PageService.Update(editContext.CurrentPage);\n            \n            this.AlertSuccess(StringLocalizer[\"Script saved successfully\"], true);\n\n            return RedirectToRoute(PageRoutes.PageDevelopRouteName, new { slug = editContext.CurrentPage.Slug });\n        }\n\n        [HttpPost]\n        [AllowAnonymous]\n        [ValidateAntiForgeryToken]\n        public virtual async Task<IActionResult> RemoveResource(string slug, string id)\n        {\n            var editContextRequest = new PageEditContextRequest(User, slug, null, null, null);\n            var editContext = await Mediator.Send(editContextRequest);\n            if (!editContext.IsValidRequest)\n            {\n                Log.LogInformation(\"redirecting to index because project settings not found\");\n                return RedirectToRoute(PageRoutes.PageRouteName, new { slug = \"\" });\n            }\n            \n            var canDev = EditOptions.AlwaysShowDeveloperLink ? true : User.IsInRole(EditOptions.DeveloperAllowedRole);\n            if (!canDev)\n            {\n                Log.LogInformation(\"redirecting to index because user is not allowed by edit config for developer tools\");\n                return RedirectToRoute(PageRoutes.PageRouteName);\n            }\n            \n            if (editContext.CurrentPage == null)\n            {\n                Log.LogInformation(\"page not found, redirecting\");\n                return RedirectToRoute(PageRoutes.PageRouteName, new { slug = \"\" });\n            }\n\n            if ((!string.IsNullOrEmpty(editContext.CurrentPage.ViewRoles)))\n            {\n                if (!User.IsInRoles(editContext.CurrentPage.ViewRoles))\n                {\n                    Log.LogWarning($\"page {editContext.CurrentPage.Title} is protected by roles that user is not in so redirecting\");\n                    return RedirectToRoute(PageRoutes.PageRouteName, new { slug = \"\" });\n                }\n            }\n\n            var found = false;\n            var copyOfResources = editContext.CurrentPage.Resources.ToList();\n            for (var i = 0; i < copyOfResources.Count; i++)\n            {\n                if(copyOfResources[i].Id == id)\n                {\n                    found = true;\n                    copyOfResources.RemoveAt(i);\n                }\n            }\n            if(found)\n            {\n                // needed so the ef entity shadow copy of resources gets synced\n                editContext.CurrentPage.Resources = copyOfResources;\n                await PageService.Update(editContext.CurrentPage);\n            }\n            else\n            {\n                Log.LogWarning($\"page resource not found for {slug} and {id}\");\n            }\n            \n            return RedirectToRoute(PageRoutes.PageDevelopRouteName, new { slug = editContext.CurrentPage.Slug });\n\n        }\n\n\n        [HttpPost]\n        [AllowAnonymous]\n        [ValidateAntiForgeryToken]\n        public virtual async Task<IActionResult> Delete(string id)\n        {\n            var editContextRequest = new PageEditContextRequest(User, null, id, null, null);\n            var editContext = await Mediator.Send(editContextRequest);\n            if (!editContext.IsValidRequest)\n            {\n                if (Request.IsAjaxRequest())\n                {\n                    return BadRequest();\n                }\n                Log.LogInformation(\"redirecting to index because project settings not found\");\n                return RedirectToRoute(PageRoutes.PageRouteName, new { slug = \"\" });\n            }\n\n            if (string.IsNullOrEmpty(id))\n            {\n                Log.LogInformation(\"postid not provided, redirecting/rejecting\");\n                if (Request.IsAjaxRequest())\n                {\n                    return BadRequest();\n                }\n                return RedirectToRoute(PageRoutes.PageRouteName, new { slug = \"\" });\n            }\n            \n            if (editContext.CurrentPage == null)\n            {\n                Log.LogInformation($\"page not found for {id}, redirecting/rejecting\");\n                if (Request.IsAjaxRequest())\n                {\n                    return BadRequest();\n                }\n                return RedirectToRoute(PageRoutes.PageRouteName, new { slug = \"\" });\n            }\n\n            if ((!string.IsNullOrEmpty(editContext.CurrentPage.ViewRoles)))\n            {\n                if (!User.IsInRoles(editContext.CurrentPage.ViewRoles))\n                {\n                    Log.LogWarning($\"page {editContext.CurrentPage.Title} is protected by roles that user is not in so redirecting\");\n                    return RedirectToRoute(PageRoutes.PageRouteName);\n                }\n            }\n\n            if(!EditOptions.AllowDeleteDefaultPage)\n            {\n                if (editContext.CurrentPage.Slug == editContext.Project.DefaultPageSlug) // don't allow delete the home/default page from the ui\n                {\n                    Log.LogError($\"Rejecting/redirecting, user {User.Identity.Name} tried to delete the default page {editContext.CurrentPage.Title}\");\n                    if (Request.IsAjaxRequest())\n                    {\n                        return BadRequest();\n                    }\n                    this.AlertWarning(StringLocalizer[\"Sorry, deleting the default page is not allowed by configuration.\"], true);\n                    return RedirectToRoute(PageRoutes.PageRouteName, new { slug = \"\" });\n                }\n            }\n\n\n            if (string.IsNullOrWhiteSpace(editContext.CurrentPage.ExternalUrl) && !editContext.CurrentPage.MenuOnly)\n            {\n                //don't create history for deleted page that was just a menu item with an external url\n                var history = editContext.CurrentPage.CreateHistory(User.Identity.Name, true);\n                await HistoryCommands.Create(editContext.Project.Id, history);\n            }\n            \n            \n            await PageService.DeletePage(editContext.CurrentPage.Id);\n            await NavigationCache.ClearTreeCache();\n\n            Log.LogWarning($\"user {User.Identity.Name} deleted page {editContext.CurrentPage.Title}\");\n\n            if (Request.IsAjaxRequest())\n            {\n                return Json(new PageActionResult(true,\"success\"));\n            }\n\n            return RedirectToRoute(PageRoutes.PageRouteName, new { slug = \"\" });\n\n        }\n\n        [HttpPost]\n        [AllowAnonymous]\n        [ValidateAntiForgeryToken]\n        public virtual async Task<IActionResult> UnPublish(string id)\n        {\n            if (string.IsNullOrEmpty(id))\n            {\n                Log.LogInformation(\"pageId not provided, redirecting/rejecting\");\n                return RedirectToRoute(PageRoutes.PageRouteName, new { slug = \"\" });\n            }\n\n            var editContextRequest = new PageEditContextRequest(User, null, id, null, null);\n            var editContext = await Mediator.Send(editContextRequest);\n            if (!editContext.IsValidRequest)\n            {\n                if (Request.IsAjaxRequest())\n                {\n                    return BadRequest();\n                }\n                Log.LogInformation(\"redirecting to index because project settings not found\");\n                return RedirectToRoute(PageRoutes.PageRouteName, new { slug = \"\" });\n            }\n            \n            if (editContext.CurrentPage == null)\n            {\n                Log.LogInformation($\"page not found for {id}, redirecting/rejecting\");\n                return RedirectToRoute(PageRoutes.PageRouteName, new { slug = \"\" });\n            }\n\n            if ((!string.IsNullOrEmpty(editContext.CurrentPage.ViewRoles)))\n            {\n                if (!User.IsInRoles(editContext.CurrentPage.ViewRoles))\n                {\n                    Log.LogWarning($\"page {editContext.CurrentPage.Title} is protected by roles that user is not in so redirecting\");\n                    return RedirectToRoute(PageRoutes.PageRouteName);\n                }\n            }\n            \n            if (string.IsNullOrWhiteSpace(editContext.CurrentPage.ExternalUrl) && !editContext.CurrentPage.MenuOnly)\n            {\n                //don't create history for deleted page that was just a menu item with an external url\n                var history = editContext.CurrentPage.CreateHistory(User.Identity.Name, true);\n                await HistoryCommands.Create(editContext.Project.Id, history);\n            }\n\n            if (!string.IsNullOrWhiteSpace(editContext.CurrentPage.ExternalUrl))\n            {\n                //don't unpublish links just delete\n                await PageService.DeletePage(editContext.CurrentPage.Id);\n            }\n            else\n            {\n                if(editContext.CurrentPage.HasPublishedVersion())\n                {\n                    await PageService.FireUnPublishEvent(editContext.CurrentPage);\n\n                    editContext.CurrentPage.DraftAuthor = editContext.CurrentPage.Author;\n                    editContext.CurrentPage.DraftContent = editContext.CurrentPage.Content;\n                    editContext.CurrentPage.DraftSerializedModel = editContext.CurrentPage.SerializedModel;\n                    editContext.CurrentPage.Content = null;\n                    editContext.CurrentPage.SerializedModel = null;  \n                }\n\n                editContext.CurrentPage.DraftPubDate = null;\n                editContext.CurrentPage.PubDate = null;\n                editContext.CurrentPage.IsPublished = false;\n                await PageService.Update(editContext.CurrentPage);\n                \n            }\n\n            await NavigationCache.ClearTreeCache();\n\n            Log.LogWarning($\"user {User.Identity.Name} unpublished page {editContext.CurrentPage.Title}\");\n\n            var slug = editContext.CurrentPage.Slug;\n            if(slug == editContext.Project.DefaultPageSlug) { slug = string.Empty; }\n\n            return RedirectToRoute(PageRoutes.PageRouteName, new { slug });\n\n        }\n\n        [Authorize(Policy = \"ViewContentHistoryPolicy\")]\n        [HttpPost]\n        [ValidateAntiForgeryToken]\n        public async Task<IActionResult> DeleteHistoryOlderThan(string id, int days)\n        {\n            var editContextRequest = new PageEditContextRequest(User, null, id, null, null);\n            var editContext = await Mediator.Send(editContextRequest);\n            if (!editContext.IsValidRequest)\n            {\n                Log.LogInformation(\"redirecting to index because project settings not found\");\n                return RedirectToRoute(PageRoutes.PageRouteName, new { slug = \"\" });\n            }\n            \n            if (editContext.CurrentPage == null)\n            {\n                Log.LogInformation($\"page not found for {id}, redirecting/rejecting\");\n                return RedirectToRoute(PageRoutes.PageRouteName, new { slug = \"\" });\n            }\n\n            if (days < 0) //delete all history\n            {\n                await HistoryCommands.DeleteByContent(editContext.Project.Id, id).ConfigureAwait(false);\n            }\n            else\n            {\n                var cutoffUtc = DateTime.UtcNow.AddDays(-days);\n                await HistoryCommands.DeleteByContent(editContext.Project.Id, id, cutoffUtc).ConfigureAwait(false);\n            }\n            \n            return RedirectToRoute(PageRoutes.PageHistoryRouteName, new { slug = editContext.CurrentPage.Slug });\n        }\n\n        [HttpGet]\n        public virtual IActionResult SiteMap()\n        {\n            return View(\"SiteMapIndex\");\n        }\n\n        [HttpGet]\n  \n        public virtual async Task<IActionResult> Tree()\n        {\n            var editContextRequest = new PageEditContextRequest(User, null, null, null, null);\n            var editContext = await Mediator.Send(editContextRequest);\n            if (!editContext.IsValidRequest)\n            {\n                Log.LogInformation(\"redirecting to index because invalid edit request\");\n                return RedirectToRoute(PageRoutes.PageRouteName, new { slug = \"\" });\n            }\n            \n            ViewData[\"Title\"] = StringLocalizer[\"Page Management\"];\n            var model = new PageTreeViewModel\n            {\n                TreeServiceUrl = Url.Action(\"TreeJson\"),\n                NewPageUrl = Url.RouteUrl(PageRoutes.NewPageRouteName),\n                EditUrl = Url.RouteUrl(PageRoutes.PageEditRouteName),\n                ViewUrl = Url.RouteUrl(PageRoutes.PageRouteName),\n                MoveUrl = Url.Action(\"Move\"),\n                DeleteUrl = Url.Action(\"Delete\"),\n                SortUrl = Url.Action(\"SortChildPagesAlpha\")\n            };\n\n            return View(model);\n        }\n\n        [HttpGet]\n        [AllowAnonymous]\n        public virtual async Task<IActionResult> TreeJson(CancellationToken cancellationToken, string node = \"root\")\n        {\n            var editContextRequest = new PageEditContextRequest(User, null, null, null, null);\n            var editContext = await Mediator.Send(editContextRequest);\n            if (!editContext.IsValidRequest)\n            {\n                Log.LogInformation(\"invalid edit request\");\n                return BadRequest();\n            }\n            \n            string resolveUrl(IPage page)\n            {\n                if (page.Slug == editContext.Project.DefaultPageSlug)\n                {\n                    return Url.RouteUrl(PageRoutes.PageRouteName);\n                }\n\n                return Url.RouteUrl(PageRoutes.PageRouteName, new { slug = page.Slug });\n            };\n\n            var result = await PageService.GetPageTreeJson(User, resolveUrl, node, cancellationToken);\n\n            return new ContentResult\n            {\n                ContentType = \"application/json\",\n                Content = result,\n                StatusCode = 200\n            };\n\n        }\n\n        [HttpPost]\n        [AllowAnonymous]\n        [ValidateAntiForgeryToken]\n        public virtual async Task<IActionResult> Move(PageMoveModel model)\n        {\n            if (model == null)\n            {\n                Log.LogInformation(\"model was null\");\n                return BadRequest();\n            }\n\n            var editContextRequest = new PageEditContextRequest(User, null, null, null, null);\n            var editContext = await Mediator.Send(editContextRequest);\n            if (!editContext.IsValidRequest)\n            {\n                Log.LogInformation(\"invalid edit request\");\n                return BadRequest();\n            }\n            \n            var result = await PageService.Move(model);\n            await NavigationCache.ClearTreeCache();\n\n            return Json(result);\n        }\n\n        [HttpPost]\n        [AllowAnonymous]\n        [ValidateAntiForgeryToken]\n        public virtual async Task<IActionResult> SortChildPagesAlpha(string pageId)\n        {\n            var editContextRequest = new PageEditContextRequest(User, null, null, null, null);\n            var editContext = await Mediator.Send(editContextRequest);\n            if (!editContext.IsValidRequest)\n            {\n                Log.LogInformation(\"invalid edit request\");\n                return BadRequest();\n            }\n            \n            var result = await PageService.SortChildPagesAlpha(pageId);\n            await NavigationCache.ClearTreeCache();\n\n            return Json(result);\n        }\n\n        [HttpGet]\n        [Authorize(Policy = \"ViewContentHistoryPolicy\")]\n        public virtual async Task<IActionResult> History(\n            CancellationToken cancellationToken,\n            string slug,\n            int pageNumber = 1,\n            int pageSize = 10\n            )\n        {\n\n            var project = await ProjectService.GetCurrentProjectSettings();\n            if (project == null)\n            {\n                Log.LogError(\"project settings not found returning 404\");\n                return NotFound();\n            }\n\n            var page = await PageService.GetPageBySlug(slug, cancellationToken);\n\n            if (page == null)\n            {\n                Log.LogWarning(\"page not found for slug \" + slug + \", so redirecting to index\");\n                return RedirectToRoute(PageRoutes.PageRouteName);\n            }\n\n            var model = new ContentHistoryViewModel()\n            {\n                History = await HistoryQueries.GetByContent(\n                    project.Id,\n                    page.Id,\n                    pageNumber,\n                    pageSize,\n                    cancellationToken),\n\n                ContentId = page.Id,\n                ContentTitle = page.Title,\n                ContentSlug = page.Slug,\n                ContentSource = ContentSource.Page,\n                CanEditPages = await User.CanEditPages(project.Id, AuthorizationService)\n            };\n\n            return View(model);\n\n        }\n\n        [HttpGet]\n        [Authorize]\n        public virtual async Task<IActionResult> CanEdit(CancellationToken cancellationToken)\n        {\n            var project = await ProjectService.GetCurrentProjectSettings();\n            if (project == null)\n            {\n                Log.LogError(\"project settings not found returning 404\");\n                return NotFound();\n            }\n\n            var canEdit = await User.CanEditPages(project.Id, AuthorizationService);\n\n            return Ok(canEdit);\n        }\n\n        public Dictionary<string, bool?> ShowEditorialItemsResolver(IPage page, IProjectSettings viewContextProject)\n        {\n            Dictionary<string, bool?> showItems = [];\n\n            if (page.ShowCreatedBy.HasValue)\n            {\n                //page has setting so must have been overidden so use it\n                showItems.Add(\"ShowCreatedBy\", (bool)page.ShowCreatedBy);\n            }\n            else\n            {\n                showItems.Add(\"ShowCreatedBy\", viewContextProject.ShowCreatedBy);\n            }\n\n            if (page.ShowCreatedDate.HasValue)\n            {\n                //page has setting so must have been overidden so use it\n                showItems.Add(\"ShowCreatedDate\", (bool)page.ShowCreatedDate);\n            }\n            else\n            {\n                showItems.Add(\"ShowCreatedDate\", viewContextProject.ShowCreatedDate);\n            }\n\n            if (page.ShowLastModifiedBy.HasValue)\n            {\n                //page has setting so must have been overidden so use it\n                showItems.Add(\"ShowLastModifiedBy\", (bool)page.ShowLastModifiedBy);\n            }\n            else\n            {\n                showItems.Add(\"ShowLastModifiedBy\", viewContextProject.ShowLastModifiedBy);\n            }\n\n            if (page.ShowLastModifiedDate.HasValue)\n            {\n                //page has setting so must have been overidden so use it\n                showItems.Add(\"ShowLastModifiedDate\", (bool)page.ShowLastModifiedDate);\n            }\n            else\n            {\n                showItems.Add(\"ShowLastModifiedDate\", viewContextProject.ShowLastModifiedDate);\n            }\n\n            return showItems;\n        }\n\n        public Dictionary<string, bool?> EditEditorialItemsResolver(IPage page, IProjectSettings viewContextProject)\n        {\n            Dictionary<string, bool?> showItems = [];\n\n            if (page != null) //check if new page\n            {\n                if (page.ShowCreatedBy != null && page.ShowCreatedBy.HasValue)\n                {\n                    //page has setting so must have been overidden so use it\n                    showItems.Add(\"ShowCreatedBy\", (bool)page.ShowCreatedBy);\n                }\n                else\n                {\n                    showItems.Add(\"ShowCreatedBy\", null);\n                }\n\n                if (page.ShowCreatedDate != null && page.ShowCreatedDate.HasValue)\n                {\n                    //page has setting so must have been overidden so use it\n                    showItems.Add(\"ShowCreatedDate\", (bool)page.ShowCreatedDate);\n                }\n                else\n                {\n                    showItems.Add(\"ShowCreatedDate\", null);\n                }\n\n                if (page.ShowLastModifiedBy != null && page.ShowLastModifiedBy.HasValue)\n                {\n                    //page has setting so must have been overidden so use it\n                    showItems.Add(\"ShowLastModifiedBy\", (bool)page.ShowLastModifiedBy);\n                }\n                else\n                {\n                    showItems.Add(\"ShowLastModifiedBy\", null);\n                }\n\n                if (page.ShowLastModifiedDate != null && page.ShowLastModifiedDate.HasValue)\n                {\n                    //page has setting so must have been overidden so use it\n                    showItems.Add(\"ShowLastModifiedDate\", (bool)page.ShowLastModifiedDate);\n                }\n                else\n                {\n                    showItems.Add(\"ShowLastModifiedDate\", null);\n                }\n            }\n            return showItems;\n        }\n\n        [HttpGet]\n        [AllowAnonymous]\n        public async Task<IActionResult> InlineScript(string pageId)\n        {\n            if (string.IsNullOrWhiteSpace(pageId))\n            {\n                return NoContent();\n            }\n\n            IPage page = await PageService.GetPage(pageId);\n\n            if (page?.Script == null)\n            {\n                return NoContent(); // HTTP 204\n            }\n\n            if (string.IsNullOrWhiteSpace(page.Script))\n            {\n                return NoContent();\n            }\n\n            var sanitizer = new JsSecuritySanitizer();\n\n            if (!sanitizer.IsSafe(page.Script, out var issues))\n            {\n                Log.LogWarning(\"Unsafe user-defined script blocked on page \" + (page.Slug ?? pageId) + \" : \" + string.Join(\", \", issues));\n                \n                // Return a more helpful error message for developers\n                var errorScript = $\"console.warn('Script blocked due to security violations: {string.Join(\", \", issues)}');\";\n                return Content(errorScript, \"application/javascript\");\n            }\n\n            // Add caching headers for performance\n            var etag = $\"\\\"{page.Id}-{page.LastModified.Ticks}\\\"\";\n            Response.Headers[\"ETag\"] = etag;\n            Response.Headers[\"Cache-Control\"] = \"public, max-age=3600\"; // Cache for 1 hour\n            \n            // Check if client has cached version\n            if (Request.Headers.IfNoneMatch == etag)\n            {\n                return StatusCode(304); // Not Modified\n            }\n\n            // Improved CSP header - less restrictive but still secure\n            Response.Headers[\"Content-Security-Policy\"] = \"script-src 'self'; object-src 'none';\";\n            \n            return Content(page.Script, \"application/javascript\");\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Web/Controllers/csscsrController.cs",
    "content": "﻿// Copyright (c) Source Tree Solutions, LLC. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.\n// Author:                  Joe Audette\n// Created:                 2016-05-27\n// Last Modified:           2018-04-05\n// \n\nusing cloudscribe.Web.Common.Helpers;\nusing Microsoft.AspNetCore.Authorization;\nusing Microsoft.AspNetCore.Http;\nusing Microsoft.AspNetCore.Mvc;\nusing Microsoft.Extensions.Logging;\nusing System.IO;\nusing System.Reflection;\n\nnamespace cloudscribe.SimpleContent.Web.Mvc.Controllers\n{\n    /// <summary>\n    /// csscsr:cloudscribe SimpleContent static resource controller\n    /// \n    /// </summary>\n    [ApiExplorerSettings(IgnoreApi = true)]\n    public class CsscsrController : Controller\n    {\n        public CsscsrController(\n            IResourceHelper resourceHelper,\n            ILogger<CsscsrController> logger)\n        {\n            ResourceHelper = resourceHelper;\n            Log = logger;\n        }\n        \n        protected IResourceHelper ResourceHelper { get; private set; }\n        protected ILogger Log { get; private set; }\n\n\n        protected virtual IActionResult GetResult(string resourceName, string contentType)\n        {\n            var assembly = typeof(CsscsrController).GetTypeInfo().Assembly;\n            resourceName = ResourceHelper.ResolveResourceIdentifier(resourceName);\n            var resourceStream = assembly.GetManifestResourceStream(resourceName);\n            if (resourceStream == null)\n            {\n                Log.LogError(\"resource not found for \" + resourceName);\n                return NotFound();\n            }\n\n            Log.LogDebug(\"resource found for \" + resourceName);\n\n            var status = ETagGenerator.AddEtagForStream(HttpContext, resourceStream);\n            if (status != null) { return status; } //304\n\n            return new FileStreamResult(resourceStream, contentType);\n        }\n\n\n        // /csscsr/js/\n        [HttpGet]\n        [AllowAnonymous]\n        public virtual IActionResult Js()\n        {\n            var baseSegment = \"cloudscribe.SimpleContent.Web.js.\";\n            \n            var requestPath = HttpContext.Request.Path.Value;\n            Log.LogDebug(requestPath + \" requested\");\n\n            if (requestPath.Length < \"/csscsr/js/\".Length) return NotFound();\n\n            var seg = requestPath.Substring(\"/csscsr/js/\".Length);\n            var ext = Path.GetExtension(requestPath);\n            var mimeType = ResourceHelper.GetMimeType(ext);\n\n            return GetResult(baseSegment + seg, mimeType);\n        }\n\n        // /csscsr/css/\n        [HttpGet]\n        [AllowAnonymous]\n        public virtual IActionResult Css()\n        {\n            var baseSegment = \"cloudscribe.SimpleContent.Web.css.\";\n            \n            var requestPath = HttpContext.Request.Path.Value;\n            Log.LogDebug(requestPath + \" requested\");\n\n            if (requestPath.Length < \"/csscsr/css/\".Length) return NotFound();\n\n            var seg = requestPath.Substring(\"/csscsr/css/\".Length);\n            var ext = Path.GetExtension(requestPath);\n            var mimeType = ResourceHelper.GetMimeType(ext);\n\n            return GetResult(\n                baseSegment + seg,\n                mimeType);\n        }\n\n\n        //TODO: caching, what are best practices for caching static resources ?\n        // seems like for embedded we could set long cache in production since it cannot change\n        //https://docs.asp.net/en/latest/performance/caching/response.html\n        \n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Web/Design/DefaultSimpleContentThemeHelper.cs",
    "content": "﻿using Microsoft.Extensions.Options;\n\nnamespace cloudscribe.SimpleContent.Web.Design\n{\n    public class DefaultSimpleContentThemeHelper : ISimpleContentThemeHelper\n    {\n        public DefaultSimpleContentThemeHelper(\n            IOptions<SimpleContentThemeConfig> themeConfigAccessor,\n            IOptions<SimpleContentIconConfig> iconConfigOptionsAccessor\n            )\n        {\n            _themeConfig = themeConfigAccessor.Value;\n            _iconConfig = iconConfigOptionsAccessor.Value;\n        }\n\n        private SimpleContentThemeConfig _themeConfig;\n        private SimpleContentIconConfig _iconConfig;\n\n        public SimpleContentThemeSettings GetThemeSettings()\n        {\n            SimpleContentThemeSettings result = null;\n            foreach (var ts in _themeConfig.ThemeSettings)\n            {\n                if (ts.ThemeName == \"default\")\n                {\n                    result = ts;\n                    break;\n                }\n            }\n           \n            if (result == null)\n            {\n                result = new SimpleContentThemeSettings();\n            }\n            result.Icons = _iconConfig.GetIcons(result.IconSetId);\n\n\n            return result;\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Web/Design/ISimpleContentThemeHelper.cs",
    "content": "﻿namespace cloudscribe.SimpleContent.Web.Design\n{\n    public interface ISimpleContentThemeHelper\n    {\n        SimpleContentThemeSettings GetThemeSettings();\n    }\n}"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Web/Design/IconCssClasses.cs",
    "content": "﻿namespace cloudscribe.SimpleContent.Web.Design\n{\n    public class IconCssClasses\n    {\n        public string SetId { get; set; } = \"glyphicons\";\n\n        public string Previous { get; set; } = \"glyphicon glyphicon-backward\";\n        public string Next { get; set; } = \"glyphicon glyphicon-forward\";\n        public string Comments { get; set; } = \"glyphicon glyphicon-comment\";\n        public string Tags { get; set; } = \"glyphicon glyphicon-tags\";\n\n        public string Archives { get; set; } = \"glyphicon glyphicon-calendar\";\n\n        public string About { get; set; } = \"glyphicon glyphicon-star\";\n\n        public string BadRequest { get; set; } = \"glyphicons glyphicons-ban-circle\";\n\n       public string UnAuthorized { get; set; } = \"glyphicons glyphicons-ban-circle\";\n\n        public string Forbidden { get; set; } = \"glyphicons glyphicons-exclamation-sign\";\n\n       public string PageNotFound { get; set; } = \"glyphicons glyphicons-exclamation-sign\";\n\n        public string Error { get; set; } = \"glyphicons glyphicons-exclamation-sign\";\n\n        public string Home { get; set; } = \"glyphicons glyphicons-home\";\n\n        public string ShowEditToolbar { get; set; } = \"glyphicon glyphicon-pencil\";\n\n        public string NewItem { get; set; } = \"glyphicon glyphicon-plus\";\n\n        public string PageTree { get; set; } = \"glyphicon glyphicon-tree-conifer\";\n\n        public string SortAlpha { get; set; } = \"glyphicon glyphicon-sort-by-alphabet\";\n\n        public string Edit { get; set; } = \"glyphicon glyphicon-edit\";\n\n        public string View { get; set; } = \"glyphicon glyphicon-eye-open\";\n\n        public string Delete { get; set; } = \"glyphicon glyphicon-trash\";\n\n        public string Unpublish { get; set; } = \"glyphicon glyphicon-eye-close\";\n\n        public string RelatedPosts { get; set; } = \"far fa-hand-point-right\"; //\"fas fa-asterisk\";\n        public string OpenInNewWindow { get; set; } = \"fas fa-external-link-alt\";\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Web/Design/SimpleContentIconConfig.cs",
    "content": "﻿using System.Collections.Generic;\n\nnamespace cloudscribe.SimpleContent.Web.Design\n{\n    public class SimpleContentIconConfig\n    {\n        public SimpleContentIconConfig()\n        {\n            IconSets = new List<IconCssClasses>();\n        }\n\n        public string DefaultSetId { get; set; } = \"glyphicons\";\n\n        public List<IconCssClasses> IconSets { get; set; }\n\n        public IconCssClasses GetIcons(string setId)\n        {\n            foreach (var set in IconSets)\n            {\n                if (set.SetId == setId)\n                {\n                    return set;\n                }\n            }\n\n            foreach (var set in IconSets)\n            {\n                if (set.SetId == DefaultSetId)\n                {\n                    return set;\n                }\n            }\n\n            return new IconCssClasses();\n        }\n\n\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Web/Design/SimpleContentThemeConfig.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Text;\n\nnamespace cloudscribe.SimpleContent.Web.Design\n{\n    public class SimpleContentThemeConfig\n    {\n        public SimpleContentThemeConfig()\n        {\n            ThemeSettings = new List<SimpleContentThemeSettings>();\n        }\n\n        public List<SimpleContentThemeSettings> ThemeSettings { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Web/Design/SimpleContentThemeSettings.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Text;\n\nnamespace cloudscribe.SimpleContent.Web.Design\n{\n    public class SimpleContentThemeSettings\n    {\n        public SimpleContentThemeSettings()\n        {\n            Icons = new IconCssClasses();\n        }\n\n        public string ThemeName { get; set; } = \"default\";\n        public string IconSetId { get; set; } = \"fontawesome4x\";\n\n        public IconCssClasses Icons { get; set; }\n\n        public int NumberOfRecentPostsToShow { get; set; } = 3;\n        public int NumberOfFeaturedPostsToShow { get; set; } = 3;\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Web/README.md",
    "content": "# cloudscribe.SimpleContent.Web\n\n[![NuGet](https://img.shields.io/nuget/v/cloudscribe.SimpleContent.Web.svg)](https://www.nuget.org/packages/cloudscribe.SimpleContent.Web)\n[![License: Apache-2.0](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://opensource.org/licenses/Apache-2.0)\n\nA flexible ASP.NET Core web library providing the main UI, controllers, and integration points for the cloudscribe.SimpleContent CMS and blog engine. This package delivers the core web application features for managing, editing, and displaying content and blog posts, with support for themes, markdown, and extensibility.\n\n## Features\n- Full-featured content and blog engine for ASP.NET Core\n- Admin UI for creating and managing posts and pages\n- Markdown editing and rendering\n- Theme support and customizable layouts\n- Extensible with custom controllers and views\n- Works with or without a database (supports NoDb and EFCore providers)\n\n## Installation\n\n```shell\nInstall-Package cloudscribe.SimpleContent.Web\n```\n\n## Usage\n- Add this package to your ASP.NET Core project.\n- Configure and register SimpleContent services in `Startup.cs` or `Program.cs`.\n- Use the provided routes and controllers to expose content management and blog features.\n\n## License\n\nLicensed under the Apache 2.0 License. See the [LICENSE](https://github.com/cloudscribe/cloudscribe.SimpleContent/blob/main/LICENSE) file for details.\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Web/Routes.cs",
    "content": "﻿using cloudscribe.SimpleContent.Models;\nusing Microsoft.AspNetCore.Routing;\n\nnamespace Microsoft.AspNetCore.Builder\n{\n    public static class Routes\n    {\n        //public static IRouteBuilder AddStandardRoutesForSimpleContent(this IRouteBuilder routes)\n        //{\n        //    routes.AddBlogRoutesForSimpleContent();\n        //    routes.AddDefaultPageRouteForSimpleContent();\n\n\n        //    return routes;\n        //}\n\n        public static IEndpointRouteBuilder AddSimpleContentStaticResourceRoutes(this IEndpointRouteBuilder routes)\n        {\n            routes.MapControllerRoute(\n               name: \"csscsrjs\",\n               pattern: \"csscsr/js/{*slug}\"\n               , defaults: new { controller = \"csscsr\", action = \"js\" }\n               );\n\n            routes.MapControllerRoute(\n               name: \"csscsrcss\",\n               pattern: \"csscsr/css/{*slug}\"\n               , defaults: new { controller = \"csscsr\", action = \"css\" }\n               );\n\n            return routes;\n        }\n\n        public static IEndpointRouteBuilder AddDefaultPageRouteForSimpleContent(this IEndpointRouteBuilder routes)\n        {\n            routes.MapControllerRoute(\n               name: ProjectConstants.NewPageRouteName,\n               pattern: \"newpage/{parentSlug?}\"\n               , defaults: new { controller = \"Page\", action = \"NewPage\" }\n               );\n\n            routes.MapControllerRoute(\n               name: ProjectConstants.PageEditRouteName,\n               pattern: \"editpage/{slug?}\"\n               , defaults: new { controller = \"Page\", action = \"Edit\" }\n               );\n\n            routes.MapControllerRoute(\n               name: ProjectConstants.PageEditWithTemplateRouteName,\n               pattern: \"editwithpattern/{slug?}\"\n               , defaults: new { controller = \"Page\", action = \"EditWithpattern\" }\n               );\n\n            routes.MapControllerRoute(\n               name: ProjectConstants.PageDevelopRouteName,\n               pattern: \"development/{slug}\"\n               , defaults: new { controller = \"Page\", action = \"Development\" }\n               );\n\n            routes.MapControllerRoute(\n               name: ProjectConstants.PageTreeRouteName,\n               pattern: \"tree\"\n               , defaults: new { controller = \"Page\", action = \"Tree\" }\n               );\n\n            routes.MapControllerRoute(\n               name: ProjectConstants.PageDeleteRouteName,\n               pattern: \"deletepage/{id}\"\n               , defaults: new { controller = \"Page\", action = \"Delete\" }\n               );\n\n            routes.MapControllerRoute(\n               name: ProjectConstants.PageHistoryRouteName,\n               pattern: \"history/{slug?}\"\n               , defaults: new { controller = \"Page\", action = \"History\" }\n               );\n\n            routes.MapControllerRoute(\n               name: ProjectConstants.PageIndexRouteName,\n               pattern: \"{slug=none}\"\n               , defaults: new { controller = \"Page\", action = \"Index\" }\n               );\n\n            routes.MapControllerRoute(\n               name: ProjectConstants.PageCanEditRouteName,\n               pattern: \"page/canedit\"\n               , defaults: new { controller = \"Page\", action = \"CanEdit\" }\n               );\n\n\n\n\n            return routes;\n        }\n\n        public static IEndpointRouteBuilder AddCulturePageRouteForSimpleContent(\n            this IEndpointRouteBuilder routes,\n            IRouteConstraint cultureConstraint\n            )\n        {\n            routes.MapControllerRoute(\n               name: ProjectConstants.CultureNewPageRouteName,\n               pattern: \"{culture}/newpage/{parentSlug?}\"\n               , defaults: new { controller = \"Page\", action = \"NewPage\" }\n               , constraints: new { culture = cultureConstraint }\n               );\n\n            routes.MapControllerRoute(\n               name: ProjectConstants.CulturePageEditRouteName,\n               pattern: \"{culture}/editpage/{slug?}\"\n               , defaults: new { controller = \"Page\", action = \"Edit\" }\n               , constraints: new { culture = cultureConstraint }\n               );\n\n            routes.MapControllerRoute(\n               name: ProjectConstants.CulturePageEditWithTemplateRouteName,\n               pattern: \"{culture}/editwithpattern/{slug?}\"\n               , defaults: new { controller = \"Page\", action = \"EditWithpattern\" }\n               , constraints: new { culture = cultureConstraint }\n               );\n\n            routes.MapControllerRoute(\n               name: ProjectConstants.CulturePageDevelopRouteName,\n               pattern: \"{culture}/development/{slug}\"\n               , defaults: new { controller = \"Page\", action = \"Development\" }\n               , constraints: new { culture = cultureConstraint }\n               );\n\n            routes.MapControllerRoute(\n               name: ProjectConstants.CulturePageTreeRouteName,\n               pattern: \"{culture}/tree\"\n               , defaults: new { controller = \"Page\", action = \"Tree\" }\n               , constraints: new { culture = cultureConstraint }\n               );\n\n            routes.MapControllerRoute(\n               name: ProjectConstants.CulturePageDeleteRouteName,\n               pattern: \"{culture}/deletepage/{id}\"\n               , defaults: new { controller = \"Page\", action = \"Delete\" }\n               , constraints: new { culture = cultureConstraint }\n               );\n\n            routes.MapControllerRoute(\n               name: ProjectConstants.CulturePageHistoryRouteName,\n               pattern: \"{culture}/history/{slug?}\"\n               , defaults: new { controller = \"Page\", action = \"History\" }\n               , constraints: new { culture = cultureConstraint }\n               );\n\n            routes.MapControllerRoute(\n               name: ProjectConstants.CulturePageIndexRouteName,\n               pattern: \"{culture}/{slug=none}\"\n               , defaults: new { controller = \"Page\", action = \"Index\" }\n               , constraints: new { culture = cultureConstraint }\n               );\n\n            routes.MapControllerRoute(\n              name: ProjectConstants.CulturePageCanEditRouteName,\n              pattern: \"{culture}/page/canedit\"\n              , defaults: new { controller = \"Page\", action = \"CanEdit\" }\n              , constraints: new { culture = cultureConstraint }\n              );\n\n\n\n            return routes;\n        }\n\n        public static IEndpointRouteBuilder AddDefaultPageRouteForSimpleContent(\n            this IEndpointRouteBuilder routes,\n            IRouteConstraint siteFolderConstraint\n            )\n        {\n            routes.MapControllerRoute(\n              name: ProjectConstants.FolderNewPageRouteName,\n              pattern: \"{sitefolder}/newpage/{parentSlug?}\"\n              , defaults: new { controller = \"Page\", action = \"NewPage\" }\n              , constraints: new { sitefolder = siteFolderConstraint }\n              );\n\n            routes.MapControllerRoute(\n              name: ProjectConstants.FolderPageEditRouteName,\n              pattern: \"{sitefolder}/editpage/{slug?}\"\n              , defaults: new { controller = \"Page\", action = \"Edit\" }\n              , constraints: new { sitefolder = siteFolderConstraint }\n              );\n\n            routes.MapControllerRoute(\n              name: ProjectConstants.FolderPageEditWithTemplateRouteName,\n              pattern: \"{sitefolder}/editwithpattern/{slug?}\"\n              , defaults: new { controller = \"Page\", action = \"EditWithpattern\" }\n              , constraints: new { sitefolder = siteFolderConstraint }\n              );\n\n            routes.MapControllerRoute(\n              name: ProjectConstants.FolderPageDevelopRouteName,\n              pattern: \"{sitefolder}/development/{slug}\"\n              , defaults: new { controller = \"Page\", action = \"Development\" }\n              , constraints: new { sitefolder = siteFolderConstraint }\n              );\n\n            routes.MapControllerRoute(\n              name: ProjectConstants.FolderPageTreeRouteName,\n              pattern: \"{sitefolder}/tree\"\n              , defaults: new { controller = \"Page\", action = \"Tree\" }\n              , constraints: new { sitefolder = siteFolderConstraint }\n              );\n\n            routes.MapControllerRoute(\n              name: ProjectConstants.FolderPageDeleteRouteName,\n              pattern: \"{sitefolder}/deletepage/{id}\"\n              , defaults: new { controller = \"Page\", action = \"Delete\" }\n              , constraints: new { sitefolder = siteFolderConstraint }\n              );\n\n            routes.MapControllerRoute(\n               name: ProjectConstants.FolderPageHistoryRouteName,\n               pattern: \"{sitefolder}/history/{slug?}\"\n               , defaults: new { controller = \"Page\", action = \"History\" }\n               , constraints: new { sitefolder = siteFolderConstraint }\n               );\n\n            routes.MapControllerRoute(\n               name: ProjectConstants.FolderPageIndexRouteName,\n               pattern: \"{sitefolder}/{slug=none}\"\n               , defaults: new { controller = \"Page\", action = \"Index\" }\n               , constraints: new { sitefolder = siteFolderConstraint }\n               );\n\n            routes.MapControllerRoute(\n               name: ProjectConstants.FolderPageCanEditRouteName,\n               pattern: \"{sitefolder}/page/canedit\"\n               , defaults: new { controller = \"Page\", action = \"CanEdit\" }\n               , constraints: new { sitefolder = siteFolderConstraint }\n               );\n\n\n\n\n            return routes;\n        }\n\n        public static IEndpointRouteBuilder AddCulturePageRouteForSimpleContent(\n            this IEndpointRouteBuilder routes,\n            IRouteConstraint siteFolderConstraint,\n            IRouteConstraint cultureConstraint\n            )\n        {\n            routes.MapControllerRoute(\n              name: ProjectConstants.CultureFolderNewPageRouteName,\n              pattern: \"{sitefolder}/{culture}/newpage/{parentSlug?}\"\n              , defaults: new { controller = \"Page\", action = \"NewPage\" }\n              , constraints: new { sitefolder = siteFolderConstraint, culture = cultureConstraint }\n              );\n\n            routes.MapControllerRoute(\n              name: ProjectConstants.CultureFolderPageEditRouteName,\n              pattern: \"{sitefolder}/{culture}/editpage/{slug?}\"\n              , defaults: new { controller = \"Page\", action = \"Edit\" }\n              , constraints: new { sitefolder = siteFolderConstraint, culture = cultureConstraint }\n              );\n\n            routes.MapControllerRoute(\n              name: ProjectConstants.CultureFolderPageEditWithTemplateRouteName,\n              pattern: \"{sitefolder}/{culture}/editwithpattern/{slug?}\"\n              , defaults: new { controller = \"Page\", action = \"EditWithpattern\" }\n              , constraints: new { sitefolder = siteFolderConstraint, culture = cultureConstraint }\n              );\n\n            routes.MapControllerRoute(\n              name: ProjectConstants.CultureFolderPageDevelopRouteName,\n              pattern: \"{sitefolder}/{culture}/development/{slug}\"\n              , defaults: new { controller = \"Page\", action = \"Development\" }\n              , constraints: new { sitefolder = siteFolderConstraint, culture = cultureConstraint }\n              );\n\n            routes.MapControllerRoute(\n              name: ProjectConstants.CultureFolderPageTreeRouteName,\n              pattern: \"{sitefolder}/{culture}/tree\"\n              , defaults: new { controller = \"Page\", action = \"Tree\" }\n              , constraints: new { sitefolder = siteFolderConstraint, culture = cultureConstraint }\n              );\n\n            routes.MapControllerRoute(\n              name: ProjectConstants.CultureFolderPageDeleteRouteName,\n              pattern: \"{sitefolder}/{culture}/deletepage/{id}\"\n              , defaults: new { controller = \"Page\", action = \"Delete\" }\n              , constraints: new { sitefolder = siteFolderConstraint, culture = cultureConstraint }\n              );\n\n            routes.MapControllerRoute(\n               name: ProjectConstants.CultureFolderPageHistoryRouteName,\n               pattern: \"{sitefolder}/{culture}/history/{slug?}\"\n               , defaults: new { controller = \"Page\", action = \"History\" }\n               , constraints: new { sitefolder = siteFolderConstraint, culture = cultureConstraint }\n               );\n\n            routes.MapControllerRoute(\n               name: ProjectConstants.CultureFolderPageIndexRouteName,\n               pattern: \"{sitefolder}/{culture}/{slug=none}\"\n               , defaults: new { controller = \"Page\", action = \"Index\" }\n               , constraints: new { sitefolder = siteFolderConstraint, culture = cultureConstraint }\n               );\n\n            routes.MapControllerRoute(\n              name: ProjectConstants.CultureFolderPageCanEditRouteName,\n              pattern: \"{sitefolder}/{culture}/page/canedit\"\n              , defaults: new { controller = \"Page\", action = \"CanEdit\" }\n              , constraints: new { sitefolder = siteFolderConstraint, culture = cultureConstraint }\n              );\n\n\n\n\n            return routes;\n        }\n\n        public static IEndpointRouteBuilder AddCustomPageRouteForSimpleContent(\n            this IEndpointRouteBuilder routes,\n            string prefix)\n        {\n            routes.MapControllerRoute(\n               name: ProjectConstants.NewPageRouteName,\n               pattern: prefix + \"/newpage/{parentSlug?}\"\n               , defaults: new { controller = \"Page\", action = \"NewPage\" }\n               );\n\n            routes.MapControllerRoute(\n               name: ProjectConstants.PageEditRouteName,\n               pattern: prefix + \"/editpage/{slug?}\"\n               , defaults: new { controller = \"Page\", action = \"Edit\" }\n               );\n\n            routes.MapControllerRoute(\n               name: ProjectConstants.PageEditWithTemplateRouteName,\n               pattern: prefix + \"/editwithpattern/{slug?}\"\n               , defaults: new { controller = \"Page\", action = \"EditWithpattern\" }\n               );\n\n            routes.MapControllerRoute(\n               name: ProjectConstants.PageDevelopRouteName,\n               pattern: prefix + \"/development/{slug}\"\n               , defaults: new { controller = \"Page\", action = \"Development\" }\n               );\n\n            routes.MapControllerRoute(\n               name: ProjectConstants.PageTreeRouteName,\n               pattern: prefix + \"/tree\"\n               , defaults: new { controller = \"Page\", action = \"Tree\" }\n               );\n\n            routes.MapControllerRoute(\n               name: ProjectConstants.PageDeleteRouteName,\n               pattern: prefix + \"/deletepage/{id}\"\n               , defaults: new { controller = \"Page\", action = \"Delete\" }\n               );\n\n            routes.MapControllerRoute(\n               name: ProjectConstants.PageHistoryRouteName,\n               pattern: prefix + \"/history/{slug?}\"\n               , defaults: new { controller = \"Page\", action = \"History\" }\n               );\n\n            routes.MapControllerRoute(\n               name: ProjectConstants.PageIndexRouteName,\n               pattern: prefix + \"/{slug=none}\"\n               , defaults: new { controller = \"Page\", action = \"Index\" }\n               );\n\n            routes.MapControllerRoute(\n               name: ProjectConstants.PageCanEditRouteName,\n               pattern: prefix + \"/page/canedit\"\n               , defaults: new { controller = \"Page\", action = \"CanEdit\" }\n               );\n\n\n\n            return routes;\n        }\n\n        public static IEndpointRouteBuilder AddCultureCustomPageRouteForSimpleContent(\n            this IEndpointRouteBuilder routes,\n            IRouteConstraint cultureConstraint,\n            string prefix)\n        {\n            routes.MapControllerRoute(\n               name: ProjectConstants.CultureNewPageRouteName,\n               pattern: \"{culture}/\" + prefix + \" / newpage/{parentSlug?}\"\n               , defaults: new { controller = \"Page\", action = \"NewPage\" }\n               , constraints: new { culture = cultureConstraint }\n               );\n\n            routes.MapControllerRoute(\n               name: ProjectConstants.CulturePageEditRouteName,\n               pattern: \"{culture}/\" + prefix + \"/editpage/{slug?}\"\n               , defaults: new { controller = \"Page\", action = \"Edit\" }\n               , constraints: new { culture = cultureConstraint }\n               );\n\n\n            routes.MapControllerRoute(\n               name: ProjectConstants.CulturePageEditWithTemplateRouteName,\n               pattern: \"{culture}/\" + prefix + \"/editwithpattern/{slug?}\"\n               , defaults: new { controller = \"Page\", action = \"EditWithpattern\" }\n               , constraints: new { culture = cultureConstraint }\n               );\n\n            routes.MapControllerRoute(\n               name: ProjectConstants.CulturePageDevelopRouteName,\n               pattern: \"{culture}/\" + prefix + \"/development/{slug}\"\n               , defaults: new { controller = \"Page\", action = \"Development\" }\n               , constraints: new { culture = cultureConstraint }\n               );\n\n            routes.MapControllerRoute(\n               name: ProjectConstants.CulturePageTreeRouteName,\n               pattern: \"{culture}/\" + prefix + \"/tree\"\n               , defaults: new { controller = \"Page\", action = \"Tree\" }\n               , constraints: new { culture = cultureConstraint }\n               );\n\n            routes.MapControllerRoute(\n               name: ProjectConstants.CulturePageDeleteRouteName,\n               pattern: \"{culture}/\" + prefix + \"/deletepage/{id}\"\n               , defaults: new { controller = \"Page\", action = \"Delete\" }\n               , constraints: new { culture = cultureConstraint }\n               );\n\n            routes.MapControllerRoute(\n               name: ProjectConstants.CulturePageHistoryRouteName,\n               pattern: \"{culture}/\" + prefix + \"/history/{slug?}\"\n               , defaults: new { controller = \"Page\", action = \"History\" }\n               , constraints: new { culture = cultureConstraint }\n               );\n\n            routes.MapControllerRoute(\n               name: ProjectConstants.CulturePageIndexRouteName,\n               pattern: \"{culture}/\" + prefix + \"/{slug=none}\"\n               , defaults: new { controller = \"Page\", action = \"Index\" }\n               , constraints: new { culture = cultureConstraint }\n               );\n\n            routes.MapControllerRoute(\n               name: ProjectConstants.CulturePageCanEditRouteName,\n               pattern: \"{culture}/\" + prefix + \"/page/canedit\"\n               , defaults: new { controller = \"Page\", action = \"CanEdit\" }\n               , constraints: new { culture = cultureConstraint }\n               );\n\n\n\n            return routes;\n        }\n\n\n        public static IEndpointRouteBuilder AddCustomPageRouteForSimpleContent(\n            this IEndpointRouteBuilder routes,\n            IRouteConstraint siteFolderConstraint,\n            string prefix\n\n            )\n        {\n            routes.MapControllerRoute(\n               name: ProjectConstants.FolderNewPageRouteName,\n               pattern: \"{sitefolder}/\" + prefix + \"/newpage/{parentSlug?}\"\n               , defaults: new { controller = \"Page\", action = \"NewPage\" }\n               , constraints: new { sitefolder = siteFolderConstraint }\n               );\n\n            routes.MapControllerRoute(\n               name: ProjectConstants.FolderPageEditRouteName,\n               pattern: \"{sitefolder}/\" + prefix + \"/editpage/{slug?}\"\n               , defaults: new { controller = \"Page\", action = \"Edit\" }\n               , constraints: new { sitefolder = siteFolderConstraint }\n               );\n\n            routes.MapControllerRoute(\n               name: ProjectConstants.FolderPageEditWithTemplateRouteName,\n               pattern: \"{sitefolder}/\" + prefix + \"/editwithpattern/{slug?}\"\n               , defaults: new { controller = \"Page\", action = \"EditWithpattern\" }\n               , constraints: new { sitefolder = siteFolderConstraint }\n               );\n\n            routes.MapControllerRoute(\n               name: ProjectConstants.FolderPageDevelopRouteName,\n               pattern: \"{sitefolder}/\" + prefix + \"/development/{slug}\"\n               , defaults: new { controller = \"Page\", action = \"Development\" }\n               , constraints: new { sitefolder = siteFolderConstraint }\n               );\n\n            routes.MapControllerRoute(\n               name: ProjectConstants.FolderPageTreeRouteName,\n               pattern: \"{sitefolder}/\" + prefix + \"/tree\"\n               , defaults: new { controller = \"Page\", action = \"Tree\" }\n               , constraints: new { sitefolder = siteFolderConstraint }\n               );\n\n            routes.MapControllerRoute(\n               name: ProjectConstants.FolderPageDeleteRouteName,\n               pattern: \"{sitefolder}/\" + prefix + \"/deletepage/{id}\"\n               , defaults: new { controller = \"Page\", action = \"Delete\" }\n               , constraints: new { sitefolder = siteFolderConstraint }\n               );\n\n            routes.MapControllerRoute(\n               name: ProjectConstants.FolderPageHistoryRouteName,\n               pattern: \"{sitefolder}/\" + prefix + \"/history/{slug?}\"\n               , defaults: new { controller = \"Page\", action = \"History\" }\n               , constraints: new { sitefolder = siteFolderConstraint }\n               );\n\n            routes.MapControllerRoute(\n               name: ProjectConstants.FolderPageIndexRouteName,\n               pattern: \"{sitefolder}/\" + prefix + \"/{slug=none}\"\n               , defaults: new { controller = \"Page\", action = \"Index\" }\n               , constraints: new { sitefolder = siteFolderConstraint }\n               );\n\n            routes.MapControllerRoute(\n               name: ProjectConstants.FolderPageCanEditRouteName,\n               pattern: \"{sitefolder}/\" + prefix + \"/page/canedit\"\n               , defaults: new { controller = \"Page\", action = \"CanEdit\" }\n               , constraints: new { sitefolder = siteFolderConstraint }\n               );\n\n\n\n            return routes;\n        }\n\n        public static IEndpointRouteBuilder AddCultureCustomPageRouteForSimpleContent(\n            this IEndpointRouteBuilder routes,\n            IRouteConstraint siteFolderConstraint,\n            IRouteConstraint cultureConstraint,\n            string prefix\n\n            )\n        {\n            routes.MapControllerRoute(\n               name: ProjectConstants.CultureFolderNewPageRouteName,\n               pattern: \"{sitefolder}/{culture}/\" + prefix + \"/newpage/{parentSlug?}\"\n               , defaults: new { controller = \"Page\", action = \"NewPage\" }\n               , constraints: new { sitefolder = siteFolderConstraint, culture = cultureConstraint }\n               );\n\n            routes.MapControllerRoute(\n               name: ProjectConstants.CultureFolderPageEditRouteName,\n               pattern: \"{sitefolder}/{culture}/\" + prefix + \"/editpage/{slug?}\"\n               , defaults: new { controller = \"Page\", action = \"Edit\" }\n               , constraints: new { sitefolder = siteFolderConstraint, culture = cultureConstraint }\n               );\n\n            routes.MapControllerRoute(\n               name: ProjectConstants.CultureFolderPageEditWithTemplateRouteName,\n               pattern: \"{sitefolder}/{culture}/\" + prefix + \"/editwithpattern/{slug?}\"\n               , defaults: new { controller = \"Page\", action = \"EditWithpattern\" }\n               , constraints: new { sitefolder = siteFolderConstraint, culture = cultureConstraint }\n               );\n\n            routes.MapControllerRoute(\n               name: ProjectConstants.CultureFolderPageDevelopRouteName,\n               pattern: \"{sitefolder}/{culture}/\" + prefix + \"/development/{slug}\"\n               , defaults: new { controller = \"Page\", action = \"Development\" }\n               , constraints: new { sitefolder = siteFolderConstraint, culture = cultureConstraint }\n               );\n\n            routes.MapControllerRoute(\n               name: ProjectConstants.CultureFolderPageTreeRouteName,\n               pattern: \"{sitefolder}/{culture}/\" + prefix + \"/tree\"\n               , defaults: new { controller = \"Page\", action = \"Tree\" }\n               , constraints: new { sitefolder = siteFolderConstraint, culture = cultureConstraint }\n               );\n\n            routes.MapControllerRoute(\n               name: ProjectConstants.CultureFolderPageDeleteRouteName,\n               pattern: \"{sitefolder}/{culture}/\" + prefix + \"/deletepage/{id}\"\n               , defaults: new { controller = \"Page\", action = \"Delete\" }\n               , constraints: new { sitefolder = siteFolderConstraint, culture = cultureConstraint }\n               );\n\n            routes.MapControllerRoute(\n               name: ProjectConstants.CultureFolderPageHistoryRouteName,\n               pattern: \"{sitefolder}/{culture}/\" + prefix + \"/history/{slug?}\"\n               , defaults: new { controller = \"Page\", action = \"History\" }\n               , constraints: new { sitefolder = siteFolderConstraint, culture = cultureConstraint }\n               );\n\n            routes.MapControllerRoute(\n               name: ProjectConstants.CultureFolderPageIndexRouteName,\n               pattern: \"{sitefolder}/{culture}/\" + prefix + \"/{slug=none}\"\n               , defaults: new { controller = \"Page\", action = \"Index\" }\n               , constraints: new { sitefolder = siteFolderConstraint, culture = cultureConstraint }\n               );\n\n            routes.MapControllerRoute(\n               name: ProjectConstants.CultureFolderPageCanEditRouteName,\n               pattern: \"{sitefolder}/{culture}/\" + prefix + \"/page/canedit\"\n               , defaults: new { controller = \"Page\", action = \"CanEdit\" }\n               , constraints: new { sitefolder = siteFolderConstraint, culture = cultureConstraint }\n               );\n\n\n\n            return routes;\n        }\n\n        private static string GetSegmentpattern(string providedStartSegment)\n        {\n            string segmentResult = \"\";\n            if (!string.IsNullOrEmpty(providedStartSegment))\n            {\n                if (providedStartSegment != string.Empty)\n                {\n                    if (!providedStartSegment.EndsWith(\"/\"))\n                    {\n                        segmentResult = providedStartSegment + \"/\";\n                    }\n                }\n            }\n\n            return segmentResult;\n        }\n\n        public static IEndpointRouteBuilder AddBlogRoutesForSimpleContent(\n            this IEndpointRouteBuilder routes,\n            string startSegment = \"blog\")\n        {\n            string firstSegment = GetSegmentpattern(startSegment);\n\n            routes.MapControllerRoute(\n                   name: ProjectConstants.BlogCategoryRouteName,\n                   pattern: firstSegment + \"category/{category=''}/{pagenumber=1}\"\n                   , defaults: new { controller = \"Blog\", action = \"Category\" }\n                   );\n\n\n            routes.MapControllerRoute(\n                  ProjectConstants.BlogArchiveRouteName,\n                  firstSegment + \"{year}/{month}/{day}\",\n                  new { controller = \"Blog\", action = \"Archive\", month = \"00\", day = \"00\" },\n                  //new { controller = \"Blog\", action = \"Archive\" },\n                  new { year = @\"\\d{4}\", month = @\"\\d{2}\", day = @\"\\d{2}\" }\n                );\n\n            routes.MapControllerRoute(\n                  ProjectConstants.PostWithDateRouteName,\n                  firstSegment + \"{year}/{month}/{day}/{slug}\",\n                  new { controller = \"Blog\", action = \"PostWithDate\" },\n                  new { year = @\"\\d{4}\", month = @\"\\d{2}\", day = @\"\\d{2}\" }\n                );\n\n            routes.MapControllerRoute(\n               name: ProjectConstants.NewPostRouteName,\n               pattern: firstSegment + \"newpost\"\n               , defaults: new { controller = \"Blog\", action = \"NewPost\" }\n               );\n\n            routes.MapControllerRoute(\n               name: ProjectConstants.PostEditWithTemplateRouteName,\n               pattern: firstSegment + \"editwithpattern/{slug}\"\n               , defaults: new { controller = \"Blog\", action = \"EditWithpattern\" }\n               );\n\n            routes.MapControllerRoute(\n               name: ProjectConstants.PostEditRouteName,\n               pattern: firstSegment + \"edit/{slug?}\"\n               , defaults: new { controller = \"Blog\", action = \"Edit\" }\n               );\n\n            routes.MapControllerRoute(\n               name: ProjectConstants.PostDeleteRouteName,\n               pattern: firstSegment + \"delete/{id?}\"\n               , defaults: new { controller = \"Blog\", action = \"Delete\" }\n               );\n\n            routes.MapControllerRoute(\n              name: ProjectConstants.MostRecentPostRouteName,\n              pattern: firstSegment + \"mostrecent\"\n              , defaults: new { controller = \"Blog\", action = \"MostRecent\" }\n              );\n\n            routes.MapControllerRoute(\n               name: ProjectConstants.PostHistoryRouteName,\n               pattern: firstSegment + \"history/{slug?}\"\n               , defaults: new { controller = \"Blog\", action = \"History\" }\n               );\n\n            routes.MapControllerRoute(\n               name: ProjectConstants.PostWithoutDateRouteName,\n               pattern: firstSegment + \"{slug}\"\n               , defaults: new { controller = \"Blog\", action = \"PostNoDate\" }\n               );\n\n            routes.MapControllerRoute(\n               name: ProjectConstants.BlogIndexRouteName,\n               pattern: firstSegment\n               , defaults: new { controller = \"Blog\", action = \"Index\" }\n               );\n\n            routes.MapControllerRoute(\n               name: ProjectConstants.BlogCanEditRouteName,\n               pattern: firstSegment + \"blog/canedit\"\n               , defaults: new { controller = \"Blog\", action = \"CanEdit\" }\n               );\n\n            return routes;\n        }\n\n        public static IEndpointRouteBuilder AddCultureBlogRoutesForSimpleContent(\n            this IEndpointRouteBuilder routes,\n            IRouteConstraint cultureConstraint,\n            string startSegment = \"blog\")\n        {\n            string firstSegment = GetSegmentpattern(startSegment);\n\n            routes.MapControllerRoute(\n                   name: ProjectConstants.CultureBlogCategoryRouteName,\n                   pattern: \"{culture}/\" + firstSegment + \"category/{category=''}/{pagenumber=1}\"\n                   , defaults: new { controller = \"Blog\", action = \"Category\" }\n                   , constraints: new { culture = cultureConstraint }\n                   );\n\n\n            routes.MapControllerRoute(\n                  ProjectConstants.CultureBlogArchiveRouteName,\n                  \"{culture}/\" + firstSegment + \"{year}/{month}/{day}\",\n                  new { controller = \"Blog\", action = \"Archive\", month = \"00\", day = \"00\" },\n                  new { culture = cultureConstraint, year = @\"\\d{4}\", month = @\"\\d{2}\", day = @\"\\d{2}\" }\n                );\n\n            routes.MapControllerRoute(\n                  ProjectConstants.CulturePostWithDateRouteName,\n                  \"{culture}/\" + firstSegment + \"{year}/{month}/{day}/{slug}\",\n                  new { controller = \"Blog\", action = \"PostWithDate\" },\n                  new { culture = cultureConstraint, year = @\"\\d{4}\", month = @\"\\d{2}\", day = @\"\\d{2}\" }\n                );\n\n            routes.MapControllerRoute(\n               name: ProjectConstants.CultureNewPostRouteName,\n               pattern: \"{culture}/\" + firstSegment + \"newpost\"\n               , defaults: new { controller = \"Blog\", action = \"NewPost\" }\n               , constraints: new { culture = cultureConstraint }\n               );\n\n            routes.MapControllerRoute(\n               name: ProjectConstants.CulturePostEditWithTemplateRouteName,\n               pattern: \"{culture}/\" + firstSegment + \"editwithpattern/{slug}\"\n               , defaults: new { controller = \"Blog\", action = \"EditWithpattern\" }\n               , constraints: new { culture = cultureConstraint }\n               );\n\n            routes.MapControllerRoute(\n               name: ProjectConstants.CulturePostEditRouteName,\n               pattern: \"{culture}/\" + firstSegment + \"edit/{slug?}\"\n               , defaults: new { controller = \"Blog\", action = \"Edit\" }\n               , constraints: new { culture = cultureConstraint }\n               );\n\n            routes.MapControllerRoute(\n               name: ProjectConstants.CulturePostDeleteRouteName,\n               pattern: \"{culture}/\" + firstSegment + \"delete/{id?}\"\n               , defaults: new { controller = \"Blog\", action = \"Delete\" }\n               , constraints: new { culture = cultureConstraint }\n               );\n\n            routes.MapControllerRoute(\n              name: ProjectConstants.CultureMostRecentPostRouteName,\n              pattern: \"{culture}/\" + firstSegment + \"mostrecent\"\n              , defaults: new { controller = \"Blog\", action = \"MostRecent\" }\n              );\n\n            routes.MapControllerRoute(\n               name: ProjectConstants.CulturePostHistoryRouteName,\n               pattern: \"{culture}/\" + firstSegment + \"history/{slug?}\"\n               , defaults: new { controller = \"Blog\", action = \"History\" }\n               , constraints: new { culture = cultureConstraint }\n               );\n\n            routes.MapControllerRoute(\n               name: ProjectConstants.CulturePostWithoutDateRouteName,\n               pattern: \"{culture}/\" + firstSegment + \"{slug}\"\n               , defaults: new { controller = \"Blog\", action = \"PostNoDate\" }\n               , constraints: new { culture = cultureConstraint }\n               );\n\n            routes.MapControllerRoute(\n               name: ProjectConstants.CultureBlogIndexRouteName,\n               pattern: \"{culture}/\" + firstSegment\n               , defaults: new { controller = \"Blog\", action = \"Index\" }\n               , constraints: new { culture = cultureConstraint }\n               );\n\n            routes.MapControllerRoute(\n               name: ProjectConstants.CultureBlogCanEditRouteName,\n               pattern: \"{culture}/\" + firstSegment + \"blog/canedit\"\n               , defaults: new { controller = \"Blog\", action = \"CanEdit\" }\n               , constraints: new { culture = cultureConstraint }\n               );\n\n            return routes;\n        }\n\n        public static IEndpointRouteBuilder AddBlogRoutesForSimpleContent(\n            this IEndpointRouteBuilder routes,\n            IRouteConstraint siteFolderConstraint,\n            string startSegment = \"blog\"\n            )\n        {\n            string firstSegment = GetSegmentpattern(startSegment);\n\n            routes.MapControllerRoute(\n                   name: ProjectConstants.FolderBlogCategoryRouteName,\n                   pattern: \"{sitefolder}/\" + firstSegment + \"category/{category=''}/{pagenumber=1}\"\n                   , defaults: new { controller = \"Blog\", action = \"Category\" }\n                   , constraints: new { sitefolder = siteFolderConstraint }\n                   );\n\n            routes.MapControllerRoute(\n                  ProjectConstants.FolderBlogArchiveRouteName,\n                  \"{sitefolder}/\" + firstSegment + \"{year}/{month}/{day}\",\n                  new { controller = \"Blog\", action = \"Archive\", month = \"00\", day = \"00\" },\n                  new { sitefolder = siteFolderConstraint, year = @\"\\d{4}\", month = @\"\\d{2}\", day = @\"\\d{2}\" }\n                );\n\n            routes.MapControllerRoute(\n                  ProjectConstants.FolderPostWithDateRouteName,\n                  \"{sitefolder}/\" + firstSegment + \"{year}/{month}/{day}/{slug}\",\n                  new { controller = \"Blog\", action = \"PostWithDate\" },\n                  new { sitefolder = siteFolderConstraint, year = @\"\\d{4}\", month = @\"\\d{2}\", day = @\"\\d{2}\" }\n                );\n\n            routes.MapControllerRoute(\n               name: ProjectConstants.FolderNewPostRouteName,\n               pattern: \"{sitefolder}/\" + firstSegment + \"newpost\"\n               , defaults: new { controller = \"Blog\", action = \"NewPost\" }\n               , constraints: new { sitefolder = siteFolderConstraint }\n               );\n\n            routes.MapControllerRoute(\n               name: ProjectConstants.FolderPostEditWithTemplateRouteName,\n               pattern: \"{sitefolder}/\" + firstSegment + \"editwithpattern/{slug}\"\n               , defaults: new { controller = \"Blog\", action = \"EditWithpattern\" }\n               , constraints: new { sitefolder = siteFolderConstraint }\n               );\n\n            routes.MapControllerRoute(\n               name: ProjectConstants.FolderPostEditRouteName,\n               pattern: \"{sitefolder}/\" + firstSegment + \"edit/{slug?}\"\n               , defaults: new { controller = \"Blog\", action = \"Edit\" }\n               , constraints: new { sitefolder = siteFolderConstraint }\n               );\n\n            routes.MapControllerRoute(\n               name: ProjectConstants.FolderPostDeleteRouteName,\n               pattern: \"{sitefolder}/\" + firstSegment + \"delete/{id?}\"\n               , defaults: new { controller = \"Blog\", action = \"Delete\" }\n               , constraints: new { sitefolder = siteFolderConstraint }\n               );\n\n            routes.MapControllerRoute(\n              name: ProjectConstants.FolderMostRecentPostRouteName,\n              pattern: \"{sitefolder}/\" + firstSegment + \"mostrecent\"\n              , defaults: new { controller = \"Blog\", action = \"MostRecent\" }\n              , constraints: new { sitefolder = siteFolderConstraint }\n              );\n\n            routes.MapControllerRoute(\n               name: ProjectConstants.FolderPostHistoryRouteName,\n               pattern: \"{sitefolder}/\" + firstSegment + \"history/{slug?}\"\n               , defaults: new { controller = \"Blog\", action = \"History\" }\n               , constraints: new { sitefolder = siteFolderConstraint }\n               );\n\n            routes.MapControllerRoute(\n               name: ProjectConstants.FolderPostWithoutDateRouteName,\n               pattern: \"{sitefolder}/\" + firstSegment + \"{slug}\"\n               , defaults: new { controller = \"Blog\", action = \"PostNoDate\" }\n               , constraints: new { sitefolder = siteFolderConstraint }\n               );\n\n            routes.MapControllerRoute(\n               name: ProjectConstants.FolderBlogIndexRouteName,\n               pattern: \"{sitefolder}/\" + firstSegment + \"\"\n               , defaults: new { controller = \"Blog\", action = \"Index\" }\n               , constraints: new { sitefolder = siteFolderConstraint }\n               );\n\n            routes.MapControllerRoute(\n               name: ProjectConstants.FolderBlogCanEditRouteName,\n               pattern: \"{sitefolder}/\" + firstSegment + \"blog/canedit\"\n               , defaults: new { controller = \"Blog\", action = \"CanEdit\" }\n               , constraints: new { sitefolder = siteFolderConstraint }\n               );\n\n\n            return routes;\n        }\n\n        public static IEndpointRouteBuilder AddCultureBlogRoutesForSimpleContent(\n            this IEndpointRouteBuilder routes,\n            IRouteConstraint siteFolderConstraint,\n            IRouteConstraint cultureConstraint,\n            string startSegment = \"blog\"\n            )\n        {\n            string firstSegment = GetSegmentpattern(startSegment);\n\n            routes.MapControllerRoute(\n                   name: ProjectConstants.CultureFolderBlogCategoryRouteName,\n                   pattern: \"{sitefolder}/{culture}/\" + firstSegment + \"category/{category=''}/{pagenumber=1}\"\n                   , defaults: new { controller = \"Blog\", action = \"Category\" }\n                   , constraints: new { sitefolder = siteFolderConstraint, culture = cultureConstraint }\n                   );\n\n            routes.MapControllerRoute(\n                  ProjectConstants.CultureFolderBlogArchiveRouteName,\n                  \"{sitefolder}/{culture}/\" + firstSegment + \"{year}/{month}/{day}\",\n                  new { controller = \"Blog\", action = \"Archive\", month = \"00\", day = \"00\" },\n                  new { sitefolder = siteFolderConstraint, culture = cultureConstraint, year = @\"\\d{4}\", month = @\"\\d{2}\", day = @\"\\d{2}\" }\n                );\n\n            routes.MapControllerRoute(\n                  ProjectConstants.CultureFolderPostWithDateRouteName,\n                  \"{sitefolder}/{culture}/\" + firstSegment + \"{year}/{month}/{day}/{slug}\",\n                  new { controller = \"Blog\", action = \"PostWithDate\" },\n                  new { sitefolder = siteFolderConstraint, culture = cultureConstraint, year = @\"\\d{4}\", month = @\"\\d{2}\", day = @\"\\d{2}\" }\n                );\n\n            routes.MapControllerRoute(\n               name: ProjectConstants.CultureFolderNewPostRouteName,\n               pattern: \"{sitefolder}/{culture}/\" + firstSegment + \"newpost\"\n               , defaults: new { controller = \"Blog\", action = \"NewPost\" }\n               , constraints: new { sitefolder = siteFolderConstraint, culture = cultureConstraint }\n               );\n\n            routes.MapControllerRoute(\n               name: ProjectConstants.CultureFolderPostEditWithTemplateRouteName,\n               pattern: \"{sitefolder}/{culture}/\" + firstSegment + \"editwithpattern/{slug}\"\n               , defaults: new { controller = \"Blog\", action = \"EditWithpattern\" }\n               , constraints: new { sitefolder = siteFolderConstraint, culture = cultureConstraint }\n               );\n\n            routes.MapControllerRoute(\n               name: ProjectConstants.CultureFolderPostEditRouteName,\n               pattern: \"{sitefolder}/{culture}/\" + firstSegment + \"edit/{slug?}\"\n               , defaults: new { controller = \"Blog\", action = \"Edit\" }\n               , constraints: new { sitefolder = siteFolderConstraint, culture = cultureConstraint }\n               );\n\n            routes.MapControllerRoute(\n               name: ProjectConstants.CultureFolderPostDeleteRouteName,\n               pattern: \"{sitefolder}/{culture}/\" + firstSegment + \"delete/{id?}\"\n               , defaults: new { controller = \"Blog\", action = \"Delete\" }\n               , constraints: new { sitefolder = siteFolderConstraint, culture = cultureConstraint }\n               );\n\n            routes.MapControllerRoute(\n              name: ProjectConstants.CultureFolderMostRecentPostRouteName,\n              pattern: \"{sitefolder}/{culture}/\" + firstSegment + \"mostrecent\"\n              , defaults: new { controller = \"Blog\", action = \"MostRecent\" }\n              , constraints: new { sitefolder = siteFolderConstraint, culture = cultureConstraint }\n              );\n\n            routes.MapControllerRoute(\n               name: ProjectConstants.CultureFolderPostHistoryRouteName,\n               pattern: \"{sitefolder}/{culture}/\" + firstSegment + \"history/{slug?}\"\n               , defaults: new { controller = \"Blog\", action = \"History\" }\n               , constraints: new { sitefolder = siteFolderConstraint, culture = cultureConstraint }\n               );\n\n            routes.MapControllerRoute(\n               name: ProjectConstants.CultureFolderPostWithoutDateRouteName,\n               pattern: \"{sitefolder}/{culture}/\" + firstSegment + \"{slug}\"\n               , defaults: new { controller = \"Blog\", action = \"PostNoDate\" }\n               , constraints: new { sitefolder = siteFolderConstraint, culture = cultureConstraint }\n               );\n\n            routes.MapControllerRoute(\n               name: ProjectConstants.CultureFolderBlogIndexRouteName,\n               pattern: \"{sitefolder}/{culture}/\" + firstSegment + \"\"\n               , defaults: new { controller = \"Blog\", action = \"Index\" }\n               , constraints: new { sitefolder = siteFolderConstraint, culture = cultureConstraint }\n               );\n\n            routes.MapControllerRoute(\n               name: ProjectConstants.CultureFolderBlogCanEditRouteName,\n               pattern: \"{sitefolder}/{culture}/\" + firstSegment + \"blog/canedit\"\n               , defaults: new { controller = \"Blog\", action = \"CanEdit\" }\n               , constraints: new { sitefolder = siteFolderConstraint, culture = cultureConstraint }\n               );\n\n\n            return routes;\n        }\n\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Web/Routes2x.cs",
    "content": "﻿using cloudscribe.SimpleContent.Models;\nusing Microsoft.AspNetCore.Routing;\n\nnamespace Microsoft.AspNetCore.Builder\n{\n    public static class Routes2x\n    {\n        public static IRouteBuilder AddSimpleContentStaticResourceRoutes(this IRouteBuilder routes)\n        {\n            routes.MapRoute(\n               name: \"csscsrjs\",\n               template: \"csscsr/js/{*slug}\"\n               , defaults: new { controller = \"csscsr\", action = \"js\" }\n               );\n\n            routes.MapRoute(\n               name: \"csscsrcss\",\n               template: \"csscsr/css/{*slug}\"\n               , defaults: new { controller = \"csscsr\", action = \"css\" }\n               );\n\n            return routes;\n        }\n\n        public static IRouteBuilder AddDefaultPageRouteForSimpleContent(this IRouteBuilder routes)\n        {\n            routes.MapRoute(\n               name: ProjectConstants.NewPageRouteName,\n               template: \"newpage/{parentSlug?}\"\n               , defaults: new { controller = \"Page\", action = \"NewPage\" }\n               );\n\n            routes.MapRoute(\n               name: ProjectConstants.PageEditRouteName,\n               template: \"editpage/{slug?}\"\n               , defaults: new { controller = \"Page\", action = \"Edit\" }\n               );\n\n            routes.MapRoute(\n               name: ProjectConstants.PageEditWithTemplateRouteName,\n               template: \"editwithtemplate/{slug?}\"\n               , defaults: new { controller = \"Page\", action = \"EditWithTemplate\" }\n               );\n\n            routes.MapRoute(\n               name: ProjectConstants.PageDevelopRouteName,\n               template: \"development/{slug}\"\n               , defaults: new { controller = \"Page\", action = \"Development\" }\n               );\n\n            routes.MapRoute(\n               name: ProjectConstants.PageTreeRouteName,\n               template: \"tree\"\n               , defaults: new { controller = \"Page\", action = \"Tree\" }\n               );\n\n            routes.MapRoute(\n               name: ProjectConstants.PageDeleteRouteName,\n               template: \"deletepage/{id}\"\n               , defaults: new { controller = \"Page\", action = \"Delete\" }\n               );\n\n            routes.MapRoute(\n               name: ProjectConstants.PageHistoryRouteName,\n               template: \"history/{slug?}\"\n               , defaults: new { controller = \"Page\", action = \"History\" }\n               );\n\n            routes.MapRoute(\n               name: ProjectConstants.PageIndexRouteName,\n               template: \"{slug=none}\"\n               , defaults: new { controller = \"Page\", action = \"Index\" }\n               );\n\n            routes.MapRoute(\n               name: ProjectConstants.PageCanEditRouteName,\n               template: \"page/canedit\"\n               , defaults: new { controller = \"Page\", action = \"CanEdit\" }\n               );\n\n\n\n\n            return routes;\n        }\n\n        public static IRouteBuilder AddCulturePageRouteForSimpleContent(\n            this IRouteBuilder routes,\n            IRouteConstraint cultureConstraint\n            )\n        {\n            routes.MapRoute(\n               name: ProjectConstants.CultureNewPageRouteName,\n               template: \"{culture}/newpage/{parentSlug?}\"\n               , defaults: new { controller = \"Page\", action = \"NewPage\" }\n               , constraints: new { culture = cultureConstraint }\n               );\n\n            routes.MapRoute(\n               name: ProjectConstants.CulturePageEditRouteName,\n               template: \"{culture}/editpage/{slug?}\"\n               , defaults: new { controller = \"Page\", action = \"Edit\" }\n               , constraints: new { culture = cultureConstraint }\n               );\n\n            routes.MapRoute(\n               name: ProjectConstants.CulturePageEditWithTemplateRouteName,\n               template: \"{culture}/editwithtemplate/{slug?}\"\n               , defaults: new { controller = \"Page\", action = \"EditWithTemplate\" }\n               , constraints: new { culture = cultureConstraint }\n               );\n\n            routes.MapRoute(\n               name: ProjectConstants.CulturePageDevelopRouteName,\n               template: \"{culture}/development/{slug}\"\n               , defaults: new { controller = \"Page\", action = \"Development\" }\n               , constraints: new { culture = cultureConstraint }\n               );\n\n            routes.MapRoute(\n               name: ProjectConstants.CulturePageTreeRouteName,\n               template: \"{culture}/tree\"\n               , defaults: new { controller = \"Page\", action = \"Tree\" }\n               , constraints: new { culture = cultureConstraint }\n               );\n\n            routes.MapRoute(\n               name: ProjectConstants.CulturePageDeleteRouteName,\n               template: \"{culture}/deletepage/{id}\"\n               , defaults: new { controller = \"Page\", action = \"Delete\" }\n               , constraints: new { culture = cultureConstraint }\n               );\n\n            routes.MapRoute(\n               name: ProjectConstants.CulturePageHistoryRouteName,\n               template: \"{culture}/history/{slug?}\"\n               , defaults: new { controller = \"Page\", action = \"History\" }\n               , constraints: new { culture = cultureConstraint }\n               );\n\n            routes.MapRoute(\n               name: ProjectConstants.CulturePageIndexRouteName,\n               template: \"{culture}/{slug=none}\"\n               , defaults: new { controller = \"Page\", action = \"Index\" }\n               , constraints: new { culture = cultureConstraint }\n               );\n\n            routes.MapRoute(\n              name: ProjectConstants.CulturePageCanEditRouteName,\n              template: \"{culture}/page/canedit\"\n              , defaults: new { controller = \"Page\", action = \"CanEdit\" }\n              , constraints: new { culture = cultureConstraint }\n              );\n\n\n\n            return routes;\n        }\n\n        public static IRouteBuilder AddDefaultPageRouteForSimpleContent(\n            this IRouteBuilder routes,\n            IRouteConstraint siteFolderConstraint\n            )\n        {\n            routes.MapRoute(\n              name: ProjectConstants.FolderNewPageRouteName,\n              template: \"{sitefolder}/newpage/{parentSlug?}\"\n              , defaults: new { controller = \"Page\", action = \"NewPage\" }\n              , constraints: new { sitefolder = siteFolderConstraint }\n              );\n\n            routes.MapRoute(\n              name: ProjectConstants.FolderPageEditRouteName,\n              template: \"{sitefolder}/editpage/{slug?}\"\n              , defaults: new { controller = \"Page\", action = \"Edit\" }\n              , constraints: new { sitefolder = siteFolderConstraint }\n              );\n\n            routes.MapRoute(\n              name: ProjectConstants.FolderPageEditWithTemplateRouteName,\n              template: \"{sitefolder}/editwithtemplate/{slug?}\"\n              , defaults: new { controller = \"Page\", action = \"EditWithTemplate\" }\n              , constraints: new { sitefolder = siteFolderConstraint }\n              );\n\n            routes.MapRoute(\n              name: ProjectConstants.FolderPageDevelopRouteName,\n              template: \"{sitefolder}/development/{slug}\"\n              , defaults: new { controller = \"Page\", action = \"Development\" }\n              , constraints: new { sitefolder = siteFolderConstraint }\n              );\n\n            routes.MapRoute(\n              name: ProjectConstants.FolderPageTreeRouteName,\n              template: \"{sitefolder}/tree\"\n              , defaults: new { controller = \"Page\", action = \"Tree\" }\n              , constraints: new { sitefolder = siteFolderConstraint }\n              );\n\n            routes.MapRoute(\n              name: ProjectConstants.FolderPageDeleteRouteName,\n              template: \"{sitefolder}/deletepage/{id}\"\n              , defaults: new { controller = \"Page\", action = \"Delete\" }\n              , constraints: new { sitefolder = siteFolderConstraint }\n              );\n\n            routes.MapRoute(\n               name: ProjectConstants.FolderPageHistoryRouteName,\n               template: \"{sitefolder}/history/{slug?}\"\n               , defaults: new { controller = \"Page\", action = \"History\" }\n               , constraints: new { sitefolder = siteFolderConstraint }\n               );\n\n            routes.MapRoute(\n               name: ProjectConstants.FolderPageIndexRouteName,\n               template: \"{sitefolder}/{slug=none}\"\n               , defaults: new { controller = \"Page\", action = \"Index\" }\n               , constraints: new { sitefolder = siteFolderConstraint }\n               );\n\n            routes.MapRoute(\n               name: ProjectConstants.FolderPageCanEditRouteName,\n               template: \"{sitefolder}/page/canedit\"\n               , defaults: new { controller = \"Page\", action = \"CanEdit\" }\n               , constraints: new { sitefolder = siteFolderConstraint }\n               );\n\n\n\n\n            return routes;\n        }\n\n        public static IRouteBuilder AddCulturePageRouteForSimpleContent(\n            this IRouteBuilder routes,\n            IRouteConstraint siteFolderConstraint,\n            IRouteConstraint cultureConstraint\n            )\n        {\n            routes.MapRoute(\n              name: ProjectConstants.CultureFolderNewPageRouteName,\n              template: \"{sitefolder}/{culture}/newpage/{parentSlug?}\"\n              , defaults: new { controller = \"Page\", action = \"NewPage\" }\n              , constraints: new { sitefolder = siteFolderConstraint, culture = cultureConstraint }\n              );\n\n            routes.MapRoute(\n              name: ProjectConstants.CultureFolderPageEditRouteName,\n              template: \"{sitefolder}/{culture}/editpage/{slug?}\"\n              , defaults: new { controller = \"Page\", action = \"Edit\" }\n              , constraints: new { sitefolder = siteFolderConstraint, culture = cultureConstraint }\n              );\n\n            routes.MapRoute(\n              name: ProjectConstants.CultureFolderPageEditWithTemplateRouteName,\n              template: \"{sitefolder}/{culture}/editwithtemplate/{slug?}\"\n              , defaults: new { controller = \"Page\", action = \"EditWithTemplate\" }\n              , constraints: new { sitefolder = siteFolderConstraint, culture = cultureConstraint }\n              );\n\n            routes.MapRoute(\n              name: ProjectConstants.CultureFolderPageDevelopRouteName,\n              template: \"{sitefolder}/{culture}/development/{slug}\"\n              , defaults: new { controller = \"Page\", action = \"Development\" }\n              , constraints: new { sitefolder = siteFolderConstraint, culture = cultureConstraint }\n              );\n\n            routes.MapRoute(\n              name: ProjectConstants.CultureFolderPageTreeRouteName,\n              template: \"{sitefolder}/{culture}/tree\"\n              , defaults: new { controller = \"Page\", action = \"Tree\" }\n              , constraints: new { sitefolder = siteFolderConstraint, culture = cultureConstraint }\n              );\n\n            routes.MapRoute(\n              name: ProjectConstants.CultureFolderPageDeleteRouteName,\n              template: \"{sitefolder}/{culture}/deletepage/{id}\"\n              , defaults: new { controller = \"Page\", action = \"Delete\" }\n              , constraints: new { sitefolder = siteFolderConstraint, culture = cultureConstraint }\n              );\n\n            routes.MapRoute(\n               name: ProjectConstants.CultureFolderPageHistoryRouteName,\n               template: \"{sitefolder}/{culture}/history/{slug?}\"\n               , defaults: new { controller = \"Page\", action = \"History\" }\n               , constraints: new { sitefolder = siteFolderConstraint, culture = cultureConstraint }\n               );\n\n            routes.MapRoute(\n               name: ProjectConstants.CultureFolderPageIndexRouteName,\n               template: \"{sitefolder}/{culture}/{slug=none}\"\n               , defaults: new { controller = \"Page\", action = \"Index\" }\n               , constraints: new { sitefolder = siteFolderConstraint, culture = cultureConstraint }\n               );\n\n            routes.MapRoute(\n              name: ProjectConstants.CultureFolderPageCanEditRouteName,\n              template: \"{sitefolder}/{culture}/page/canedit\"\n              , defaults: new { controller = \"Page\", action = \"CanEdit\" }\n              , constraints: new { sitefolder = siteFolderConstraint, culture = cultureConstraint }\n              );\n\n\n\n\n            return routes;\n        }\n\n        public static IRouteBuilder AddCustomPageRouteForSimpleContent(\n            this IRouteBuilder routes,\n            string prefix)\n        {\n            routes.MapRoute(\n               name: ProjectConstants.NewPageRouteName,\n               template: prefix + \"/newpage/{parentSlug?}\"\n               , defaults: new { controller = \"Page\", action = \"NewPage\" }\n               );\n\n            routes.MapRoute(\n               name: ProjectConstants.PageEditRouteName,\n               template: prefix + \"/editpage/{slug?}\"\n               , defaults: new { controller = \"Page\", action = \"Edit\" }\n               );\n\n            routes.MapRoute(\n               name: ProjectConstants.PageEditWithTemplateRouteName,\n               template: prefix + \"/editwithtemplate/{slug?}\"\n               , defaults: new { controller = \"Page\", action = \"EditWithTemplate\" }\n               );\n\n            routes.MapRoute(\n               name: ProjectConstants.PageDevelopRouteName,\n               template: prefix + \"/development/{slug}\"\n               , defaults: new { controller = \"Page\", action = \"Development\" }\n               );\n\n            routes.MapRoute(\n               name: ProjectConstants.PageTreeRouteName,\n               template: prefix + \"/tree\"\n               , defaults: new { controller = \"Page\", action = \"Tree\" }\n               );\n\n            routes.MapRoute(\n               name: ProjectConstants.PageDeleteRouteName,\n               template: prefix + \"/deletepage/{id}\"\n               , defaults: new { controller = \"Page\", action = \"Delete\" }\n               );\n\n            routes.MapRoute(\n               name: ProjectConstants.PageHistoryRouteName,\n               template: prefix + \"/history/{slug?}\"\n               , defaults: new { controller = \"Page\", action = \"History\" }\n               );\n\n            routes.MapRoute(\n               name: ProjectConstants.PageIndexRouteName,\n               template: prefix + \"/{slug=none}\"\n               , defaults: new { controller = \"Page\", action = \"Index\" }\n               );\n\n            routes.MapRoute(\n               name: ProjectConstants.PageCanEditRouteName,\n               template: prefix + \"/page/canedit\"\n               , defaults: new { controller = \"Page\", action = \"CanEdit\" }\n               );\n\n\n\n            return routes;\n        }\n\n        public static IRouteBuilder AddCultureCustomPageRouteForSimpleContent(\n            this IRouteBuilder routes,\n            IRouteConstraint cultureConstraint,\n            string prefix)\n        {\n            routes.MapRoute(\n               name: ProjectConstants.CultureNewPageRouteName,\n               template: \"{culture}/\" + prefix + \" / newpage/{parentSlug?}\"\n               , defaults: new { controller = \"Page\", action = \"NewPage\" }\n               , constraints: new { culture = cultureConstraint }\n               );\n\n            routes.MapRoute(\n               name: ProjectConstants.CulturePageEditRouteName,\n               template: \"{culture}/\" + prefix + \"/editpage/{slug?}\"\n               , defaults: new { controller = \"Page\", action = \"Edit\" }\n               , constraints: new { culture = cultureConstraint }\n               );\n\n\n            routes.MapRoute(\n               name: ProjectConstants.CulturePageEditWithTemplateRouteName,\n               template: \"{culture}/\" + prefix + \"/editwithtemplate/{slug?}\"\n               , defaults: new { controller = \"Page\", action = \"EditWithTemplate\" }\n               , constraints: new { culture = cultureConstraint }\n               );\n\n            routes.MapRoute(\n               name: ProjectConstants.CulturePageDevelopRouteName,\n               template: \"{culture}/\" + prefix + \"/development/{slug}\"\n               , defaults: new { controller = \"Page\", action = \"Development\" }\n               , constraints: new { culture = cultureConstraint }\n               );\n\n            routes.MapRoute(\n               name: ProjectConstants.CulturePageTreeRouteName,\n               template: \"{culture}/\" + prefix + \"/tree\"\n               , defaults: new { controller = \"Page\", action = \"Tree\" }\n               , constraints: new { culture = cultureConstraint }\n               );\n\n            routes.MapRoute(\n               name: ProjectConstants.CulturePageDeleteRouteName,\n               template: \"{culture}/\" + prefix + \"/deletepage/{id}\"\n               , defaults: new { controller = \"Page\", action = \"Delete\" }\n               , constraints: new { culture = cultureConstraint }\n               );\n\n            routes.MapRoute(\n               name: ProjectConstants.CulturePageHistoryRouteName,\n               template: \"{culture}/\" + prefix + \"/history/{slug?}\"\n               , defaults: new { controller = \"Page\", action = \"History\" }\n               , constraints: new { culture = cultureConstraint }\n               );\n\n            routes.MapRoute(\n               name: ProjectConstants.CulturePageIndexRouteName,\n               template: \"{culture}/\" + prefix + \"/{slug=none}\"\n               , defaults: new { controller = \"Page\", action = \"Index\" }\n               , constraints: new { culture = cultureConstraint }\n               );\n\n            routes.MapRoute(\n               name: ProjectConstants.CulturePageCanEditRouteName,\n               template: \"{culture}/\" + prefix + \"/page/canedit\"\n               , defaults: new { controller = \"Page\", action = \"CanEdit\" }\n               , constraints: new { culture = cultureConstraint }\n               );\n\n\n\n            return routes;\n        }\n\n\n        public static IRouteBuilder AddCustomPageRouteForSimpleContent(\n            this IRouteBuilder routes,\n            IRouteConstraint siteFolderConstraint,\n            string prefix\n\n            )\n        {\n            routes.MapRoute(\n               name: ProjectConstants.FolderNewPageRouteName,\n               template: \"{sitefolder}/\" + prefix + \"/newpage/{parentSlug?}\"\n               , defaults: new { controller = \"Page\", action = \"NewPage\" }\n               , constraints: new { sitefolder = siteFolderConstraint }\n               );\n\n            routes.MapRoute(\n               name: ProjectConstants.FolderPageEditRouteName,\n               template: \"{sitefolder}/\" + prefix + \"/editpage/{slug?}\"\n               , defaults: new { controller = \"Page\", action = \"Edit\" }\n               , constraints: new { sitefolder = siteFolderConstraint }\n               );\n\n            routes.MapRoute(\n               name: ProjectConstants.FolderPageEditWithTemplateRouteName,\n               template: \"{sitefolder}/\" + prefix + \"/editwithtemplate/{slug?}\"\n               , defaults: new { controller = \"Page\", action = \"EditWithTemplate\" }\n               , constraints: new { sitefolder = siteFolderConstraint }\n               );\n\n            routes.MapRoute(\n               name: ProjectConstants.FolderPageDevelopRouteName,\n               template: \"{sitefolder}/\" + prefix + \"/development/{slug}\"\n               , defaults: new { controller = \"Page\", action = \"Development\" }\n               , constraints: new { sitefolder = siteFolderConstraint }\n               );\n\n            routes.MapRoute(\n               name: ProjectConstants.FolderPageTreeRouteName,\n               template: \"{sitefolder}/\" + prefix + \"/tree\"\n               , defaults: new { controller = \"Page\", action = \"Tree\" }\n               , constraints: new { sitefolder = siteFolderConstraint }\n               );\n\n            routes.MapRoute(\n               name: ProjectConstants.FolderPageDeleteRouteName,\n               template: \"{sitefolder}/\" + prefix + \"/deletepage/{id}\"\n               , defaults: new { controller = \"Page\", action = \"Delete\" }\n               , constraints: new { sitefolder = siteFolderConstraint }\n               );\n\n            routes.MapRoute(\n               name: ProjectConstants.FolderPageHistoryRouteName,\n               template: \"{sitefolder}/\" + prefix + \"/history/{slug?}\"\n               , defaults: new { controller = \"Page\", action = \"History\" }\n               , constraints: new { sitefolder = siteFolderConstraint }\n               );\n\n            routes.MapRoute(\n               name: ProjectConstants.FolderPageIndexRouteName,\n               template: \"{sitefolder}/\" + prefix + \"/{slug=none}\"\n               , defaults: new { controller = \"Page\", action = \"Index\" }\n               , constraints: new { sitefolder = siteFolderConstraint }\n               );\n\n            routes.MapRoute(\n               name: ProjectConstants.FolderPageCanEditRouteName,\n               template: \"{sitefolder}/\" + prefix + \"/page/canedit\"\n               , defaults: new { controller = \"Page\", action = \"CanEdit\" }\n               , constraints: new { sitefolder = siteFolderConstraint }\n               );\n\n\n\n            return routes;\n        }\n\n        public static IRouteBuilder AddCultureCustomPageRouteForSimpleContent(\n            this IRouteBuilder routes,\n            IRouteConstraint siteFolderConstraint,\n            IRouteConstraint cultureConstraint,\n            string prefix\n\n            )\n        {\n            routes.MapRoute(\n               name: ProjectConstants.CultureFolderNewPageRouteName,\n               template: \"{sitefolder}/{culture}/\" + prefix + \"/newpage/{parentSlug?}\"\n               , defaults: new { controller = \"Page\", action = \"NewPage\" }\n               , constraints: new { sitefolder = siteFolderConstraint, culture = cultureConstraint }\n               );\n\n            routes.MapRoute(\n               name: ProjectConstants.CultureFolderPageEditRouteName,\n               template: \"{sitefolder}/{culture}/\" + prefix + \"/editpage/{slug?}\"\n               , defaults: new { controller = \"Page\", action = \"Edit\" }\n               , constraints: new { sitefolder = siteFolderConstraint, culture = cultureConstraint }\n               );\n\n            routes.MapRoute(\n               name: ProjectConstants.CultureFolderPageEditWithTemplateRouteName,\n               template: \"{sitefolder}/{culture}/\" + prefix + \"/editwithtemplate/{slug?}\"\n               , defaults: new { controller = \"Page\", action = \"EditWithTemplate\" }\n               , constraints: new { sitefolder = siteFolderConstraint, culture = cultureConstraint }\n               );\n\n            routes.MapRoute(\n               name: ProjectConstants.CultureFolderPageDevelopRouteName,\n               template: \"{sitefolder}/{culture}/\" + prefix + \"/development/{slug}\"\n               , defaults: new { controller = \"Page\", action = \"Development\" }\n               , constraints: new { sitefolder = siteFolderConstraint, culture = cultureConstraint }\n               );\n\n            routes.MapRoute(\n               name: ProjectConstants.CultureFolderPageTreeRouteName,\n               template: \"{sitefolder}/{culture}/\" + prefix + \"/tree\"\n               , defaults: new { controller = \"Page\", action = \"Tree\" }\n               , constraints: new { sitefolder = siteFolderConstraint, culture = cultureConstraint }\n               );\n\n            routes.MapRoute(\n               name: ProjectConstants.CultureFolderPageDeleteRouteName,\n               template: \"{sitefolder}/{culture}/\" + prefix + \"/deletepage/{id}\"\n               , defaults: new { controller = \"Page\", action = \"Delete\" }\n               , constraints: new { sitefolder = siteFolderConstraint, culture = cultureConstraint }\n               );\n\n            routes.MapRoute(\n               name: ProjectConstants.CultureFolderPageHistoryRouteName,\n               template: \"{sitefolder}/{culture}/\" + prefix + \"/history/{slug?}\"\n               , defaults: new { controller = \"Page\", action = \"History\" }\n               , constraints: new { sitefolder = siteFolderConstraint, culture = cultureConstraint }\n               );\n\n            routes.MapRoute(\n               name: ProjectConstants.CultureFolderPageIndexRouteName,\n               template: \"{sitefolder}/{culture}/\" + prefix + \"/{slug=none}\"\n               , defaults: new { controller = \"Page\", action = \"Index\" }\n               , constraints: new { sitefolder = siteFolderConstraint, culture = cultureConstraint }\n               );\n\n            routes.MapRoute(\n               name: ProjectConstants.CultureFolderPageCanEditRouteName,\n               template: \"{sitefolder}/{culture}/\" + prefix + \"/page/canedit\"\n               , defaults: new { controller = \"Page\", action = \"CanEdit\" }\n               , constraints: new { sitefolder = siteFolderConstraint, culture = cultureConstraint }\n               );\n\n\n\n            return routes;\n        }\n\n        private static string GetSegmentTemplate(string providedStartSegment)\n        {\n            string segmentResult = \"\";\n            if (!string.IsNullOrEmpty(providedStartSegment))\n            {\n                if (providedStartSegment != string.Empty)\n                {\n                    if (!providedStartSegment.EndsWith(\"/\"))\n                    {\n                        segmentResult = providedStartSegment + \"/\";\n                    }\n                }\n            }\n\n            return segmentResult;\n        }\n\n        public static IRouteBuilder AddBlogRoutesForSimpleContent(\n            this IRouteBuilder routes,\n            string startSegment = \"blog\")\n        {\n            string firstSegment = GetSegmentTemplate(startSegment);\n\n            routes.MapRoute(\n                   name: ProjectConstants.BlogCategoryRouteName,\n                   template: firstSegment + \"category/{category=''}/{pagenumber=1}\"\n                   , defaults: new { controller = \"Blog\", action = \"Category\" }\n                   );\n\n\n            routes.MapRoute(\n                  ProjectConstants.BlogArchiveRouteName,\n                  firstSegment + \"{year}/{month}/{day}\",\n                  new { controller = \"Blog\", action = \"Archive\", month = \"00\", day = \"00\" },\n                  //new { controller = \"Blog\", action = \"Archive\" },\n                  new { year = @\"\\d{4}\", month = @\"\\d{2}\", day = @\"\\d{2}\" }\n                );\n\n            routes.MapRoute(\n                  ProjectConstants.PostWithDateRouteName,\n                  firstSegment + \"{year}/{month}/{day}/{slug}\",\n                  new { controller = \"Blog\", action = \"PostWithDate\" },\n                  new { year = @\"\\d{4}\", month = @\"\\d{2}\", day = @\"\\d{2}\" }\n                );\n\n            routes.MapRoute(\n               name: ProjectConstants.NewPostRouteName,\n               template: firstSegment + \"newpost\"\n               , defaults: new { controller = \"Blog\", action = \"NewPost\" }\n               );\n\n            routes.MapRoute(\n               name: ProjectConstants.PostEditWithTemplateRouteName,\n               template: firstSegment + \"editwithtemplate/{slug}\"\n               , defaults: new { controller = \"Blog\", action = \"EditWithTemplate\" }\n               );\n\n            routes.MapRoute(\n               name: ProjectConstants.PostEditRouteName,\n               template: firstSegment + \"edit/{slug?}\"\n               , defaults: new { controller = \"Blog\", action = \"Edit\" }\n               );\n\n            routes.MapRoute(\n               name: ProjectConstants.PostDeleteRouteName,\n               template: firstSegment + \"delete/{id?}\"\n               , defaults: new { controller = \"Blog\", action = \"Delete\" }\n               );\n\n            routes.MapRoute(\n              name: ProjectConstants.MostRecentPostRouteName,\n              template: firstSegment + \"mostrecent\"\n              , defaults: new { controller = \"Blog\", action = \"MostRecent\" }\n              );\n\n            routes.MapRoute(\n               name: ProjectConstants.PostHistoryRouteName,\n               template: firstSegment + \"history/{slug?}\"\n               , defaults: new { controller = \"Blog\", action = \"History\" }\n               );\n\n            routes.MapRoute(\n               name: ProjectConstants.PostWithoutDateRouteName,\n               template: firstSegment + \"{slug}\"\n               , defaults: new { controller = \"Blog\", action = \"PostNoDate\" }\n               );\n\n            routes.MapRoute(\n               name: ProjectConstants.BlogIndexRouteName,\n               template: firstSegment\n               , defaults: new { controller = \"Blog\", action = \"Index\" }\n               );\n\n            routes.MapRoute(\n               name: ProjectConstants.BlogCanEditRouteName,\n               template: firstSegment + \"blog/canedit\"\n               , defaults: new { controller = \"Blog\", action = \"CanEdit\" }\n               );\n\n            return routes;\n        }\n\n        public static IRouteBuilder AddCultureBlogRoutesForSimpleContent(\n            this IRouteBuilder routes,\n            IRouteConstraint cultureConstraint,\n            string startSegment = \"blog\")\n        {\n            string firstSegment = GetSegmentTemplate(startSegment);\n\n            routes.MapRoute(\n                   name: ProjectConstants.CultureBlogCategoryRouteName,\n                   template: \"{culture}/\" + firstSegment + \"category/{category=''}/{pagenumber=1}\"\n                   , defaults: new { controller = \"Blog\", action = \"Category\" }\n                   , constraints: new { culture = cultureConstraint }\n                   );\n\n\n            routes.MapRoute(\n                  ProjectConstants.CultureBlogArchiveRouteName,\n                  \"{culture}/\" + firstSegment + \"{year}/{month}/{day}\",\n                  new { controller = \"Blog\", action = \"Archive\", month = \"00\", day = \"00\" },\n                  new { culture = cultureConstraint, year = @\"\\d{4}\", month = @\"\\d{2}\", day = @\"\\d{2}\" }\n                );\n\n            routes.MapRoute(\n                  ProjectConstants.CulturePostWithDateRouteName,\n                  \"{culture}/\" + firstSegment + \"{year}/{month}/{day}/{slug}\",\n                  new { controller = \"Blog\", action = \"PostWithDate\" },\n                  new { culture = cultureConstraint, year = @\"\\d{4}\", month = @\"\\d{2}\", day = @\"\\d{2}\" }\n                );\n\n            routes.MapRoute(\n               name: ProjectConstants.CultureNewPostRouteName,\n               template: \"{culture}/\" + firstSegment + \"newpost\"\n               , defaults: new { controller = \"Blog\", action = \"NewPost\" }\n               , constraints: new { culture = cultureConstraint }\n               );\n\n            routes.MapRoute(\n               name: ProjectConstants.CulturePostEditWithTemplateRouteName,\n               template: \"{culture}/\" + firstSegment + \"editwithtemplate/{slug}\"\n               , defaults: new { controller = \"Blog\", action = \"EditWithTemplate\" }\n               , constraints: new { culture = cultureConstraint }\n               );\n\n            routes.MapRoute(\n               name: ProjectConstants.CulturePostEditRouteName,\n               template: \"{culture}/\" + firstSegment + \"edit/{slug?}\"\n               , defaults: new { controller = \"Blog\", action = \"Edit\" }\n               , constraints: new { culture = cultureConstraint }\n               );\n\n            routes.MapRoute(\n               name: ProjectConstants.CulturePostDeleteRouteName,\n               template: \"{culture}/\" + firstSegment + \"delete/{id?}\"\n               , defaults: new { controller = \"Blog\", action = \"Delete\" }\n               , constraints: new { culture = cultureConstraint }\n               );\n\n            routes.MapRoute(\n              name: ProjectConstants.CultureMostRecentPostRouteName,\n              template: \"{culture}/\" + firstSegment + \"mostrecent\"\n              , defaults: new { controller = \"Blog\", action = \"MostRecent\" }\n              );\n\n            routes.MapRoute(\n               name: ProjectConstants.CulturePostHistoryRouteName,\n               template: \"{culture}/\" + firstSegment + \"history/{slug?}\"\n               , defaults: new { controller = \"Blog\", action = \"History\" }\n               , constraints: new { culture = cultureConstraint }\n               );\n\n            routes.MapRoute(\n               name: ProjectConstants.CulturePostWithoutDateRouteName,\n               template: \"{culture}/\" + firstSegment + \"{slug}\"\n               , defaults: new { controller = \"Blog\", action = \"PostNoDate\" }\n               , constraints: new { culture = cultureConstraint }\n               );\n\n            routes.MapRoute(\n               name: ProjectConstants.CultureBlogIndexRouteName,\n               template: \"{culture}/\" + firstSegment\n               , defaults: new { controller = \"Blog\", action = \"Index\" }\n               , constraints: new { culture = cultureConstraint }\n               );\n\n            routes.MapRoute(\n               name: ProjectConstants.CultureBlogCanEditRouteName,\n               template: \"{culture}/\" + firstSegment + \"blog/canedit\"\n               , defaults: new { controller = \"Blog\", action = \"CanEdit\" }\n               , constraints: new { culture = cultureConstraint }\n               );\n\n            return routes;\n        }\n\n        public static IRouteBuilder AddBlogRoutesForSimpleContent(\n            this IRouteBuilder routes,\n            IRouteConstraint siteFolderConstraint,\n            string startSegment = \"blog\"\n            )\n        {\n            string firstSegment = GetSegmentTemplate(startSegment);\n\n            routes.MapRoute(\n                   name: ProjectConstants.FolderBlogCategoryRouteName,\n                   template: \"{sitefolder}/\" + firstSegment + \"category/{category=''}/{pagenumber=1}\"\n                   , defaults: new { controller = \"Blog\", action = \"Category\" }\n                   , constraints: new { sitefolder = siteFolderConstraint }\n                   );\n\n            routes.MapRoute(\n                  ProjectConstants.FolderBlogArchiveRouteName,\n                  \"{sitefolder}/\" + firstSegment + \"{year}/{month}/{day}\",\n                  new { controller = \"Blog\", action = \"Archive\", month = \"00\", day = \"00\" },\n                  new { sitefolder = siteFolderConstraint, year = @\"\\d{4}\", month = @\"\\d{2}\", day = @\"\\d{2}\" }\n                );\n\n            routes.MapRoute(\n                  ProjectConstants.FolderPostWithDateRouteName,\n                  \"{sitefolder}/\" + firstSegment + \"{year}/{month}/{day}/{slug}\",\n                  new { controller = \"Blog\", action = \"PostWithDate\" },\n                  new { sitefolder = siteFolderConstraint, year = @\"\\d{4}\", month = @\"\\d{2}\", day = @\"\\d{2}\" }\n                );\n\n            routes.MapRoute(\n               name: ProjectConstants.FolderNewPostRouteName,\n               template: \"{sitefolder}/\" + firstSegment + \"newpost\"\n               , defaults: new { controller = \"Blog\", action = \"NewPost\" }\n               , constraints: new { sitefolder = siteFolderConstraint }\n               );\n\n            routes.MapRoute(\n               name: ProjectConstants.FolderPostEditWithTemplateRouteName,\n               template: \"{sitefolder}/\" + firstSegment + \"editwithtemplate/{slug}\"\n               , defaults: new { controller = \"Blog\", action = \"EditWithTemplate\" }\n               , constraints: new { sitefolder = siteFolderConstraint }\n               );\n\n            routes.MapRoute(\n               name: ProjectConstants.FolderPostEditRouteName,\n               template: \"{sitefolder}/\" + firstSegment + \"edit/{slug?}\"\n               , defaults: new { controller = \"Blog\", action = \"Edit\" }\n               , constraints: new { sitefolder = siteFolderConstraint }\n               );\n\n            routes.MapRoute(\n               name: ProjectConstants.FolderPostDeleteRouteName,\n               template: \"{sitefolder}/\" + firstSegment + \"delete/{id?}\"\n               , defaults: new { controller = \"Blog\", action = \"Delete\" }\n               , constraints: new { sitefolder = siteFolderConstraint }\n               );\n\n            routes.MapRoute(\n              name: ProjectConstants.FolderMostRecentPostRouteName,\n              template: \"{sitefolder}/\" + firstSegment + \"mostrecent\"\n              , defaults: new { controller = \"Blog\", action = \"MostRecent\" }\n              , constraints: new { sitefolder = siteFolderConstraint }\n              );\n\n            routes.MapRoute(\n               name: ProjectConstants.FolderPostHistoryRouteName,\n               template: \"{sitefolder}/\" + firstSegment + \"history/{slug?}\"\n               , defaults: new { controller = \"Blog\", action = \"History\" }\n               , constraints: new { sitefolder = siteFolderConstraint }\n               );\n\n            routes.MapRoute(\n               name: ProjectConstants.FolderPostWithoutDateRouteName,\n               template: \"{sitefolder}/\" + firstSegment + \"{slug}\"\n               , defaults: new { controller = \"Blog\", action = \"PostNoDate\" }\n               , constraints: new { sitefolder = siteFolderConstraint }\n               );\n\n            routes.MapRoute(\n               name: ProjectConstants.FolderBlogIndexRouteName,\n               template: \"{sitefolder}/\" + firstSegment + \"\"\n               , defaults: new { controller = \"Blog\", action = \"Index\" }\n               , constraints: new { sitefolder = siteFolderConstraint }\n               );\n\n            routes.MapRoute(\n               name: ProjectConstants.FolderBlogCanEditRouteName,\n               template: \"{sitefolder}/\" + firstSegment + \"blog/canedit\"\n               , defaults: new { controller = \"Blog\", action = \"CanEdit\" }\n               , constraints: new { sitefolder = siteFolderConstraint }\n               );\n\n\n            return routes;\n        }\n\n        public static IRouteBuilder AddCultureBlogRoutesForSimpleContent(\n            this IRouteBuilder routes,\n            IRouteConstraint siteFolderConstraint,\n            IRouteConstraint cultureConstraint,\n            string startSegment = \"blog\"\n            )\n        {\n            string firstSegment = GetSegmentTemplate(startSegment);\n\n            routes.MapRoute(\n                   name: ProjectConstants.CultureFolderBlogCategoryRouteName,\n                   template: \"{sitefolder}/{culture}/\" + firstSegment + \"category/{category=''}/{pagenumber=1}\"\n                   , defaults: new { controller = \"Blog\", action = \"Category\" }\n                   , constraints: new { sitefolder = siteFolderConstraint, culture = cultureConstraint }\n                   );\n\n            routes.MapRoute(\n                  ProjectConstants.CultureFolderBlogArchiveRouteName,\n                  \"{sitefolder}/{culture}/\" + firstSegment + \"{year}/{month}/{day}\",\n                  new { controller = \"Blog\", action = \"Archive\", month = \"00\", day = \"00\" },\n                  new { sitefolder = siteFolderConstraint, culture = cultureConstraint, year = @\"\\d{4}\", month = @\"\\d{2}\", day = @\"\\d{2}\" }\n                );\n\n            routes.MapRoute(\n                  ProjectConstants.CultureFolderPostWithDateRouteName,\n                  \"{sitefolder}/{culture}/\" + firstSegment + \"{year}/{month}/{day}/{slug}\",\n                  new { controller = \"Blog\", action = \"PostWithDate\" },\n                  new { sitefolder = siteFolderConstraint, culture = cultureConstraint, year = @\"\\d{4}\", month = @\"\\d{2}\", day = @\"\\d{2}\" }\n                );\n\n            routes.MapRoute(\n               name: ProjectConstants.CultureFolderNewPostRouteName,\n               template: \"{sitefolder}/{culture}/\" + firstSegment + \"newpost\"\n               , defaults: new { controller = \"Blog\", action = \"NewPost\" }\n               , constraints: new { sitefolder = siteFolderConstraint, culture = cultureConstraint }\n               );\n\n            routes.MapRoute(\n               name: ProjectConstants.CultureFolderPostEditWithTemplateRouteName,\n               template: \"{sitefolder}/{culture}/\" + firstSegment + \"editwithtemplate/{slug}\"\n               , defaults: new { controller = \"Blog\", action = \"EditWithTemplate\" }\n               , constraints: new { sitefolder = siteFolderConstraint, culture = cultureConstraint }\n               );\n\n            routes.MapRoute(\n               name: ProjectConstants.CultureFolderPostEditRouteName,\n               template: \"{sitefolder}/{culture}/\" + firstSegment + \"edit/{slug?}\"\n               , defaults: new { controller = \"Blog\", action = \"Edit\" }\n               , constraints: new { sitefolder = siteFolderConstraint, culture = cultureConstraint }\n               );\n\n            routes.MapRoute(\n               name: ProjectConstants.CultureFolderPostDeleteRouteName,\n               template: \"{sitefolder}/{culture}/\" + firstSegment + \"delete/{id?}\"\n               , defaults: new { controller = \"Blog\", action = \"Delete\" }\n               , constraints: new { sitefolder = siteFolderConstraint, culture = cultureConstraint }\n               );\n\n            routes.MapRoute(\n              name: ProjectConstants.CultureFolderMostRecentPostRouteName,\n              template: \"{sitefolder}/{culture}/\" + firstSegment + \"mostrecent\"\n              , defaults: new { controller = \"Blog\", action = \"MostRecent\" }\n              , constraints: new { sitefolder = siteFolderConstraint, culture = cultureConstraint }\n              );\n\n            routes.MapRoute(\n               name: ProjectConstants.CultureFolderPostHistoryRouteName,\n               template: \"{sitefolder}/{culture}/\" + firstSegment + \"history/{slug?}\"\n               , defaults: new { controller = \"Blog\", action = \"History\" }\n               , constraints: new { sitefolder = siteFolderConstraint, culture = cultureConstraint }\n               );\n\n            routes.MapRoute(\n               name: ProjectConstants.CultureFolderPostWithoutDateRouteName,\n               template: \"{sitefolder}/{culture}/\" + firstSegment + \"{slug}\"\n               , defaults: new { controller = \"Blog\", action = \"PostNoDate\" }\n               , constraints: new { sitefolder = siteFolderConstraint, culture = cultureConstraint }\n               );\n\n            routes.MapRoute(\n               name: ProjectConstants.CultureFolderBlogIndexRouteName,\n               template: \"{sitefolder}/{culture}/\" + firstSegment + \"\"\n               , defaults: new { controller = \"Blog\", action = \"Index\" }\n               , constraints: new { sitefolder = siteFolderConstraint, culture = cultureConstraint }\n               );\n\n            routes.MapRoute(\n               name: ProjectConstants.CultureFolderBlogCanEditRouteName,\n               template: \"{sitefolder}/{culture}/\" + firstSegment + \"blog/canedit\"\n               , defaults: new { controller = \"Blog\", action = \"CanEdit\" }\n               , constraints: new { sitefolder = siteFolderConstraint, culture = cultureConstraint }\n               );\n\n\n            return routes;\n        }\n\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Web/Services/Blog/BlogService.cs",
    "content": "﻿// Copyright (c) Source Tree Solutions, LLC. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.\n// Author:                  Joe Audette\n// Created:                 2016-02-09\n// Last Modified:           2018-08-20\n// \n\nusing cloudscribe.SimpleContent.Models;\nusing cloudscribe.SimpleContent.Web.Services;\nusing Microsoft.Extensions.Logging;\nusing System;\nusing System.Collections.Generic;\nusing System.Threading;\nusing System.Threading.Tasks;\n\n\nnamespace cloudscribe.SimpleContent.Services\n{\n    public class BlogService : IBlogService\n    {\n        public BlogService(\n            IProjectService projectService,\n            IPostQueries postQueries,\n            IPostCommands postCommands,\n            IContentProcessor contentProcessor,\n            IBlogUrlResolver blogUrlResolver,\n            PostEvents eventHandlers,\n            IContentHistoryCommands historyCommands,\n            ILogger<BlogService> logger\n           )\n        {\n            _postQueries = postQueries;\n            _postCommands = postCommands;\n            _projectService = projectService;\n            _contentProcessor = contentProcessor;\n            _blogUrlResolver = blogUrlResolver;\n            _eventHandlers = eventHandlers;\n            _historyCommands = historyCommands;\n            _log = logger;\n        }\n\n        private readonly IProjectService _projectService;\n        private readonly IPostQueries _postQueries;\n        private readonly IPostCommands _postCommands;\n        private IProjectSettings _settings = null;\n        private readonly IContentProcessor _contentProcessor;\n        private readonly IBlogUrlResolver _blogUrlResolver;\n        private readonly PostEvents _eventHandlers;\n        private readonly IContentHistoryCommands _historyCommands;\n        private readonly ILogger _log;\n\n        private async Task EnsureBlogSettings()\n        {\n            if(_settings != null) { return; }\n            _settings = await _projectService.GetCurrentProjectSettings().ConfigureAwait(false);    \n        }\n\n        public async Task PublishReadyDrafts(CancellationToken cancellationToken = default(CancellationToken))\n        {\n            await EnsureBlogSettings();\n\n            try\n            {\n                var drafts = await _postQueries.GetPostsReadyForPublish(_settings.Id, cancellationToken);\n                foreach (var post in drafts)\n                {\n                    post.Content = post.DraftContent;\n                    post.Author = post.DraftAuthor;\n                    post.PubDate = post.DraftPubDate.Value;\n                    post.SerializedModel = post.DraftSerializedModel;\n                    post.IsPublished = true;\n\n                    post.DraftAuthor = null;\n                    post.DraftContent = null;\n                    post.DraftSerializedModel = null;\n                    post.DraftPubDate = null;\n\n                    await Update(post);\n\n                    await _eventHandlers.HandlePublished(_settings.Id, post).ConfigureAwait(false);\n                    await _historyCommands.DeleteDraftHistory(_settings.Id, post.Id).ConfigureAwait(false);\n\n                    _log.LogDebug($\"auto published draft for post {post.Title}\");\n                }\n            }\n            catch (OperationCanceledException)\n            {\n                _log.LogDebug(\"PublishReadyDrafts for post cancelled\");\n            }\n            catch (Exception ex)\n            {\n                _log.LogError(ex, \"PublishReadyDrafts for post threw exception\");\n            }\n        }\n\n        public async Task<List<IPost>> GetPosts(bool includeUnpublished, CancellationToken cancellationToken = default(CancellationToken))\n        {\n            await EnsureBlogSettings().ConfigureAwait(false);\n\n            return await _postQueries.GetPosts(\n                _settings.Id,\n                includeUnpublished,\n                cancellationToken)\n                .ConfigureAwait(false);\n        }\n\n        public async Task<PagedPostResult> GetPosts(\n            string category,\n            int pageNumber,\n            bool includeUnpublished,\n            CancellationToken cancellationToken = default(CancellationToken)\n            )\n        {\n            await EnsureBlogSettings().ConfigureAwait(false);\n\n            return await _postQueries.GetPosts(\n                _settings.Id,\n                category,\n                includeUnpublished,\n                pageNumber,\n                _settings.PostsPerPage,\n                cancellationToken)\n                .ConfigureAwait(false);\n        }\n\n        public async Task<int> GetCount(string category, bool includeUnpublished, CancellationToken cancellationToken = default(CancellationToken))\n        {\n            await EnsureBlogSettings().ConfigureAwait(false);\n\n            return await _postQueries.GetCount(\n                _settings.Id,\n                category,\n                includeUnpublished,\n                cancellationToken)\n                .ConfigureAwait(false);\n        }\n\n        public async Task<int> GetCount(\n            string projectId,\n            int year,\n            int month = 0,\n            int day = 0,\n            bool includeUnpublished = false,\n            CancellationToken cancellationToken = default(CancellationToken)\n            )\n        {\n            return await _postQueries.GetCount(\n                projectId,\n                year,\n                month,\n                day,\n                includeUnpublished,\n                cancellationToken)\n                .ConfigureAwait(false);\n        }\n\n        public async Task<List<IPost>> GetRecentPosts(int numberToGet, CancellationToken cancellationToken = default(CancellationToken))\n        {\n            await EnsureBlogSettings().ConfigureAwait(false);\n\n            return await _postQueries.GetRecentPosts(\n                _settings.Id,\n                numberToGet,\n                cancellationToken)\n                .ConfigureAwait(false);\n        }\n\n        public async Task<List<IPost>> GetFeaturedPosts(int numberToGet, CancellationToken cancellationToken = default(CancellationToken))\n        {\n            await EnsureBlogSettings().ConfigureAwait(false);\n\n            return await _postQueries.GetFeaturedPosts(\n                _settings.Id,\n                numberToGet,\n                cancellationToken)\n                .ConfigureAwait(false);\n        }\n        \n        public async Task<PagedPostResult> GetPosts(\n            string projectId, \n            int year, \n            int month = 0, \n            int day = 0, \n            int pageNumber = 1, \n            int pageSize = 10,\n            bool includeUnpublished = false,\n            CancellationToken cancellationToken = default(CancellationToken)\n            )\n        {\n            return await _postQueries.GetPosts(projectId, year, month, day, pageNumber, pageSize, includeUnpublished, cancellationToken).ConfigureAwait(false);\n        }\n\n        public async Task FirePublishEvent(IPost post)\n        {\n            await _eventHandlers.HandlePublished(post.BlogId, post);\n        }\n\n        public async Task FireUnPublishEvent(IPost post)\n        {\n            await _eventHandlers.HandleUnPublished(post.BlogId, post);\n        }\n\n        public async Task Create(IPost post)\n        {\n            await EnsureBlogSettings().ConfigureAwait(false);\n\n            //if(convertToRelativeUrls)\n            //{\n            //    await _blogUrlResolver.ConvertToRelativeUrls(post, _settings).ConfigureAwait(false);\n            //}\n\n            if (string.IsNullOrEmpty(post.Slug))\n            {\n                var slug = CreateSlug(post.Title);\n                var available = await SlugIsAvailable(slug);\n                while (!available)\n                {\n                    slug = slug + \"-\";\n                    available = await SlugIsAvailable(slug);\n                }\n                if (available)\n                {\n                    post.Slug = slug;\n                }\n            }\n\n            await _postCommands.Create(_settings.Id, post).ConfigureAwait(false);\n            await _eventHandlers.HandleCreated(_settings.Id, post).ConfigureAwait(false);\n        }\n        \n        public async Task Update(IPost post)\n        {\n            await EnsureBlogSettings().ConfigureAwait(false);\n            await _eventHandlers.HandlePreUpdate(_settings.Id, post.Id).ConfigureAwait(false);\n\n            //if (convertToRelativeUrls)\n            //{\n            //    await _blogUrlResolver.ConvertToRelativeUrls(post, _settings).ConfigureAwait(false);\n            //}\n\n            await _postCommands.Update(_settings.Id, post).ConfigureAwait(false);\n            await _eventHandlers.HandleUpdated(_settings.Id, post).ConfigureAwait(false);\n        }\n        \n        private async Task InitializeNewPosts(string projectId, IPost post, bool publish)\n        {\n            if(publish)\n            {\n                post.PubDate = DateTime.UtcNow;\n            }\n\n            if(string.IsNullOrEmpty(post.Slug))\n            {\n                var slug = CreateSlug(post.Title);\n                var available = await SlugIsAvailable(slug);\n                if (available)\n                {\n                    post.Slug = slug;\n                }\n            }\n        }\n        \n        public async Task<IPost> GetPost(string postId, CancellationToken cancellationToken = default(CancellationToken))\n        {\n            await EnsureBlogSettings().ConfigureAwait(false);\n\n            return await _postQueries.GetPost(\n                _settings.Id,\n                postId,\n                cancellationToken)\n                .ConfigureAwait(false);\n        }\n        \n        public async Task<PostResult> GetPostBySlug(string slug, CancellationToken cancellationToken = default(CancellationToken))\n        {\n            await EnsureBlogSettings().ConfigureAwait(false);\n\n            return await _postQueries.GetPostBySlug(\n                _settings.Id,\n                slug,\n                cancellationToken)\n                .ConfigureAwait(false);\n        }\n\n        public string CreateSlug(string title)\n        {\n            return ContentUtils.CreateSlug(title);\n        }\n\n        public async Task<bool> SlugIsAvailable(string slug)\n        {\n            await EnsureBlogSettings().ConfigureAwait(false);\n\n            return await _postQueries.SlugIsAvailable(\n                _settings.Id,\n                slug,\n                CancellationToken.None)\n                .ConfigureAwait(false);\n        }\n        \n        public async Task<bool> SlugIsAvailable(string projectId, string slug)\n        { \n            return await _postQueries.SlugIsAvailable(\n                projectId,\n                slug,\n                CancellationToken.None)\n                .ConfigureAwait(false);\n        }\n\n        \n\n        public async Task Delete(string postId)\n        {\n            await EnsureBlogSettings().ConfigureAwait(false);\n            await _eventHandlers.HandlePreDelete(_settings.Id, postId).ConfigureAwait(false);\n            await _postCommands.Delete(_settings.Id, postId).ConfigureAwait(false);\n\n        }\n        \n        public async Task<Dictionary<string, int>> GetCategories(bool includeUnpublished, CancellationToken cancellationToken = default(CancellationToken))\n        {\n            await EnsureBlogSettings().ConfigureAwait(false);\n\n            return await _postQueries.GetCategories(\n                _settings.Id,\n                includeUnpublished,\n                cancellationToken)\n                .ConfigureAwait(false);\n        }\n        \n        public async Task<Dictionary<string, int>> GetArchives(bool includeUnpublished, CancellationToken cancellationToken = default(CancellationToken))\n        {\n            await EnsureBlogSettings().ConfigureAwait(false);\n            \n            return await _postQueries.GetArchives(\n                _settings.Id,\n                includeUnpublished,\n                cancellationToken)\n                .ConfigureAwait(false);\n        }\n\n        public async Task<bool> CommentsAreOpen(IPost post, bool userCanEdit)\n        {\n            \n            await EnsureBlogSettings().ConfigureAwait(false);\n\n            if(_settings.DaysToComment == -1) { return true; }\n            if(_settings.DaysToComment == 0) { return false; }\n            if (userCanEdit) { return true; }\n\n            var result = post.PubDate > DateTime.UtcNow.AddDays(-_settings.DaysToComment);\n            return result;\n        }\n        \n        ///// <summary>\n        ///// this is only used for processing images added via metaweblog api\n        ///// </summary>\n        ///// <param name=\"projectId\"></param>\n        ///// <param name=\"bytes\"></param>\n        ///// <param name=\"fileName\"></param>\n        ///// <returns></returns>\n        //public async Task SaveMedia(\n        //    string projectId, \n        //    byte[] bytes, string \n        //    fileName)\n        //{          \n        //    var settings = await _projectService.GetProjectSettings(projectId).ConfigureAwait(false);\n        //    await _mediaProcessor.SaveMedia(settings.LocalMediaVirtualPath, fileName, bytes).ConfigureAwait(false);\n        //}\n\n        \n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Web/Services/Blog/BlogSiteMapNodeService.cs",
    "content": "﻿// Copyright (c) Source Tree Solutions, LLC. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.\n// Author:                  Joe Audette\n// Created:                 2016-04-21\n// Last Modified:           2018-07-08\n// \n\nusing cloudscribe.SimpleContent.Models;\nusing cloudscribe.Web.SiteMap;\nusing Microsoft.AspNetCore.Http;\nusing Microsoft.Extensions.Logging;\nusing System;\nusing System.Collections.Generic;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace cloudscribe.SimpleContent.Services\n{\n    public class BlogSiteMapNodeService : ISiteMapNodeService\n    {\n        public BlogSiteMapNodeService(\n            IProjectService projectService,\n            IBlogService blogService,\n            IBlogUrlResolver blogUrlResolver,\n            IHttpContextAccessor contextAccessor,\n            ILogger<BlogSiteMapNodeService> logger)\n        {\n            _projectService = projectService;\n            _blogService = blogService;\n            _blogUrlResolver = blogUrlResolver;\n            _contextAccessor = contextAccessor;\n            _log = logger;\n        }\n\n        private readonly IProjectService _projectService;\n        private readonly IBlogService _blogService;\n        private readonly IBlogUrlResolver _blogUrlResolver;\n        private readonly ILogger _log;\n        private readonly IHttpContextAccessor _contextAccessor;\n        private string _baseUrl = string.Empty;\n        private List<string> _addedUrls = new List<string>();\n\n        public string BaseUrl\n        {\n            get\n            {\n                if (string.IsNullOrEmpty(_baseUrl))\n                {\n                    _baseUrl = string.Concat(_contextAccessor.HttpContext.Request.Scheme,\n                        \"://\",\n                        _contextAccessor.HttpContext.Request.Host.ToUriComponent());\n                }\n                return _baseUrl;\n            }\n        }\n\n\n        public async Task<IEnumerable<ISiteMapNode>> GetSiteMapNodes(\n            CancellationToken cancellationToken = default(CancellationToken))\n        {\n            var mapNodes = new List<SiteMapNode>();\n            var includeUnpublished = false;\n            var posts = await _blogService.GetPosts(includeUnpublished).ConfigureAwait(false);\n            if(posts == null)\n            {\n                _log.LogWarning(\"post list came back null so returning empty list of sitemapnodes\");\n                return mapNodes;\n            }\n\n            var project = await _projectService.GetCurrentProjectSettings();\n            if (project == null)\n            {\n                _log.LogWarning(\"projectsettings back null so returning empty list of sitemapnodes\");\n                return mapNodes;\n            }\n\n            foreach (var post in posts)\n            {\n                if (!post.IsPublished) continue;\n                if (post.PubDate > DateTime.UtcNow) continue;\n                var url = await ResolveUrl(post, project).ConfigureAwait(false);\n\n                if (string.IsNullOrEmpty(url))\n                {\n                    _log.LogWarning(\"failed to resolve url for post \" + post.Id + \", skipping this post for sitemap\");\n                    continue;\n                }\n\n                if (_addedUrls.Contains(url)) continue;\n\n                mapNodes.Add(\n                            new SiteMapNode(url)\n                            {\n                                LastModified = post.LastModified  \n                            });\n\n                _addedUrls.Add(url);\n            }\n\n            return mapNodes;\n        }\n\n        private async Task<string> ResolveUrl(IPost post, IProjectSettings project)\n        {\n            if (string.IsNullOrWhiteSpace(post.Slug)) return string.Empty;\n            var url = await _blogUrlResolver.ResolvePostUrl(post, project).ConfigureAwait(false);\n            if (url == null) return string.Empty;\n            if (url.StartsWith(\"http\")) return url;\n\n            return BaseUrl + url;\n        }\n\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Web/Services/Blog/BlogUrlResolver.cs",
    "content": "﻿using cloudscribe.SimpleContent.Models;\nusing cloudscribe.SimpleContent.Services;\nusing Microsoft.AspNetCore.Http;\nusing Microsoft.AspNetCore.Mvc;\nusing Microsoft.AspNetCore.Mvc.Infrastructure;\nusing Microsoft.AspNetCore.Mvc.Routing;\nusing Microsoft.AspNetCore.Routing;\nusing System;\nusing System.Threading.Tasks;\n\nnamespace cloudscribe.SimpleContent.Web.Services\n{\n    public class BlogUrlResolver : IBlogUrlResolver\n    {\n        public BlogUrlResolver(\n            IHttpContextAccessor contextAccessor,\n            IUrlHelperFactory urlHelperFactory,\n            IContentProcessor contentProcessor,\n            IBlogRoutes blogRoutes\n            )\n        {\n            _contextAccessor = contextAccessor;\n            _urlHelperFactory = urlHelperFactory;\n            _contentProcessor = contentProcessor;\n            _blogRoutes = blogRoutes;\n        }\n\n        private readonly IHttpContextAccessor _contextAccessor;\n        private readonly IUrlHelperFactory _urlHelperFactory;\n        private readonly IContentProcessor _contentProcessor;\n        private readonly IBlogRoutes _blogRoutes;\n\n        public Task<string> ResolveBlogUrl(IProjectSettings blog)\n        {\n            //await EnsureBlogSettings().ConfigureAwait(false);\n\n            var actionContext = new ActionContext(\n                _contextAccessor.HttpContext,\n                _contextAccessor.HttpContext.GetRouteData(),\n                new Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor()\n            );\n            var urlHelper = _urlHelperFactory.GetUrlHelper(actionContext);\n            var result = urlHelper.RouteUrl(_blogRoutes.BlogIndexRouteName);\n\n            return Task.FromResult(result);\n        }\n\n        public Task<string> ResolvePostUrl(IPost post, IProjectSettings projectSettings)\n        {\n            \n            var actionContext = new ActionContext(\n                _contextAccessor.HttpContext,\n                _contextAccessor.HttpContext.GetRouteData(),\n                new Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor()\n            );\n            var urlHelper = _urlHelperFactory.GetUrlHelper(actionContext);\n            string postUrl;\n            if (projectSettings.IncludePubDateInPostUrls)\n            {\n                DateTime? pubDate = post.PubDate;\n                if (!pubDate.HasValue)\n                {\n                    pubDate = DateTime.UtcNow;\n                }\n                postUrl = urlHelper.RouteUrl(_blogRoutes.PostWithDateRouteName,\n                    new\n                    {\n                        year = pubDate.Value.Year,\n                        month = pubDate.Value.Month.ToString(\"00\"),\n                        day = pubDate.Value.Day.ToString(\"00\"),\n                        slug = post.Slug\n                    });\n            }\n            else\n            {\n                postUrl = urlHelper.RouteUrl(_blogRoutes.PostWithoutDateRouteName,\n                    new { slug = post.Slug });\n            }\n\n            return Task.FromResult(postUrl);\n\n        }\n\n        //public async Task ConvertToRelativeUrls(IPost post, IProjectSettings projectSettings)\n        //{\n        //    var httpContext = _contextAccessor.HttpContext;\n        //    var urlHelper = _urlHelperFactory.GetUrlHelper(_actionContextAccesor.ActionContext);\n        //    var imageAbsoluteBaseUrl = urlHelper.Content(\"~\" + projectSettings.LocalMediaVirtualPath);\n        //    if (httpContext != null)\n        //    {\n        //        imageAbsoluteBaseUrl = httpContext.Request.AppBaseUrl() + projectSettings.LocalMediaVirtualPath;\n        //    }\n\n        //    // open live writer passes in posts with absolute urls\n        //    // we want to change them to relative to keep the files portable\n        //    // to a different root url\n        //    post.DraftContent = await _contentProcessor.ConvertMediaUrlsToRelative(\n        //        projectSettings.LocalMediaVirtualPath,\n        //        imageAbsoluteBaseUrl, //this shold be resolved from virtual using urlhelper\n        //        post.DraftContent);\n        //    // olw also adds hard coded style to images\n        //    post.DraftContent = _contentProcessor.RemoveImageStyleAttribute(post.DraftContent);\n\n        //    post.Content = await _contentProcessor.ConvertMediaUrlsToRelative(\n        //        projectSettings.LocalMediaVirtualPath,\n        //        imageAbsoluteBaseUrl, //this shold be resolved from virtual using urlhelper\n        //        post.Content);\n\n        //    post.Content = _contentProcessor.RemoveImageStyleAttribute(post.Content);\n        //}\n\n        public async Task ConvertMediaToRelativeUrls(IPost post)\n        {\n            var baseUrl = string.Concat(\n                        _contextAccessor.HttpContext.Request.Scheme,\n                        \"://\",\n                        _contextAccessor.HttpContext.Request.Host.ToUriComponent()\n                        );\n            \n            // open live writer passes in posts with absolute urls\n            // we want to change them to relative to keep the files portable\n            // to a different root url\n            post.DraftContent = await _contentProcessor.ConvertMediaUrlsToRelative(\n                baseUrl, //this shold be resolved from virtual using urlhelper\n                post.DraftContent);\n            // olw also adds hard coded style to images\n            post.DraftContent = _contentProcessor.RemoveImageStyleAttribute(post.DraftContent);\n\n            post.Content = await _contentProcessor.ConvertMediaUrlsToRelative(\n                baseUrl, //this shold be resolved from virtual using urlhelper\n                post.Content);\n\n            post.Content = _contentProcessor.RemoveImageStyleAttribute(post.Content);\n        }\n\n        public Task ConvertMediaToAbsoluteUrls(IPost post, IProjectSettings projectSettings)\n        {\n            string baseUrl = projectSettings.CdnUrl;\n            if(string.IsNullOrWhiteSpace(baseUrl))\n            {\n                baseUrl = string.Concat(\n                        _contextAccessor.HttpContext.Request.Scheme,\n                        \"://\",\n                        _contextAccessor.HttpContext.Request.Host.ToUriComponent()\n                        );\n            }\n\n            post.Content = _contentProcessor.ConvertUrlsToAbsolute(baseUrl, post.Content);\n            post.DraftContent = _contentProcessor.ConvertUrlsToAbsolute(baseUrl, post.DraftContent);\n\n            return Task.CompletedTask;\n        }\n\n\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Web/Services/Blog/CreateOrUpdatePostHandler.cs",
    "content": "﻿// Copyright (c) Source Tree Solutions, LLC. All rights reserved.\n// Author:                  Joe Audette\n// Created:                 2018-06-28\n// Last Modified:           2019-04-07\n// \n\nusing cloudscribe.DateTimeUtils;\nusing cloudscribe.SimpleContent.Models;\nusing cloudscribe.SimpleContent.Models.Versioning;\nusing Markdig;\nusing MediatR;\nusing Microsoft.Extensions.Localization;\nusing Microsoft.Extensions.Logging;\nusing Microsoft.Extensions.Options;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace cloudscribe.SimpleContent.Web.Services\n{\n    public class CreateOrUpdatePostHandler : IRequestHandler<CreateOrUpdatePostRequest, CommandResult<IPost>>\n    {\n        public CreateOrUpdatePostHandler(\n            IProjectService projectService,\n            IBlogService blogService,\n            IContentHistoryCommands historyCommands,\n            ITimeZoneHelper timeZoneHelper,\n            ITimeZoneIdResolver timeZoneIdResolver,\n            ITeaserService teaserService,\n            IMarkdownProcessor markdownProcessor,\n            IOptions<BlogEditOptions> configOptionsAccessor,\n            IStringLocalizer<SimpleContent> localizer,\n            ILogger<CreateOrUpdatePostHandler> logger\n            )\n        {\n            _projectService = projectService;\n            _blogService = blogService;\n            _historyCommands = historyCommands;\n            _timeZoneHelper = timeZoneHelper;\n            _timeZoneIdResolver = timeZoneIdResolver;\n            _teaserService = teaserService;\n            _markdownProcessor = markdownProcessor;\n            _editOptions = configOptionsAccessor.Value;\n            _localizer = localizer;\n            _log = logger;\n        }\n\n        private readonly IProjectService _projectService;\n        private readonly IBlogService _blogService;\n        private readonly IContentHistoryCommands _historyCommands;\n        private readonly ITimeZoneHelper _timeZoneHelper;\n        private readonly ITimeZoneIdResolver _timeZoneIdResolver;\n        private readonly ITeaserService _teaserService;\n        private readonly IMarkdownProcessor _markdownProcessor;\n        private readonly BlogEditOptions _editOptions;\n        private readonly IStringLocalizer _localizer;\n        private readonly ILogger _log;\n\n        public async Task<CommandResult<IPost>> Handle(CreateOrUpdatePostRequest request, CancellationToken cancellationToken = default(CancellationToken))\n        {\n            var errors = new List<string>();\n\n            try\n            {\n                bool isNew = false;\n                var project = await _projectService.GetCurrentProjectSettings();\n                var post = request.Post;\n                ContentHistory history = null;\n                if (post == null)\n                {\n                    isNew = true;\n                    post = new Post()\n                    {\n                        BlogId = request.ProjectId,\n                        Title = request.ViewModel.Title,\n                        MetaDescription = request.ViewModel.MetaDescription,                  \n                        CreatedByUser = request.UserName\n                    };\n                    \n                }\n                else\n                {\n                    history = post.CreateHistory(request.UserName);\n                }\n\n                //normally empty since not in the views\n                if (!string.IsNullOrEmpty(request.ViewModel.Slug))\n                {\n                    // remove any bad characters\n                    request.ViewModel.Slug = ContentUtils.CreateSlug(request.ViewModel.Slug);\n                    if (request.ViewModel.Slug != post.Slug)\n                    {\n                        var slug = request.ViewModel.Slug;\n                        var slugIsAvailable = await _blogService.SlugIsAvailable(slug);\n                        while (!slugIsAvailable)\n                        {\n                            slug += \"-\";\n                            slugIsAvailable = await _blogService.SlugIsAvailable(slug);\n                        }\n                        if(slugIsAvailable)\n                        {\n                            post.Slug = slug;\n                        }\n                    }\n                }\n                \n                if (request.ModelState.IsValid)\n                {\n                    post.Title = request.ViewModel.Title;\n                    post.MetaDescription = request.ViewModel.MetaDescription;\n                    post.CorrelationKey = request.ViewModel.CorrelationKey;\n                    post.ImageUrl = request.ViewModel.ImageUrl;\n                    post.ThumbnailUrl = request.ViewModel.ThumbnailUrl;\n                    post.IsFeatured = request.ViewModel.IsFeatured;\n                    post.ContentType = request.ViewModel.ContentType;\n                    post.TeaserOverride = request.ViewModel.TeaserOverride;\n                    post.SuppressTeaser = request.ViewModel.SuppressTeaser;\n                    post.ShowComments = request.ViewModel.ShowComments;\n                    post.LastModified = DateTime.UtcNow;\n                    post.LastModifiedByUser = request.UserName;\n                    \n                    var categories = new List<string>();\n\n                    if (!string.IsNullOrEmpty(request.ViewModel.Categories))\n                    {\n                        if (_editOptions.ForceLowerCaseCategories)\n                        {\n                            categories = request.ViewModel.Categories.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries).Select(x => x.Trim().ToLower())\n                            .Where(x =>\n                            !string.IsNullOrWhiteSpace(x)\n                            && x != \",\"\n                            )\n                            .Distinct()\n                            .ToList();\n                        }\n                        else\n                        {\n                            categories = request.ViewModel.Categories.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries).Select(x => x.Trim())\n                            .Where(x =>\n                            !string.IsNullOrWhiteSpace(x)\n                            && x != \",\"\n                            )\n                            .Distinct()\n                            .ToList();\n                        }\n                    }\n                    post.Categories = categories;\n\n                    var tzId = await _timeZoneIdResolver.GetUserTimeZoneId(CancellationToken.None);\n                    var shouldFirePublishEvent = false;\n                    var saveMode = request.ViewModel.SaveMode;\n                    if(saveMode == SaveMode.PublishLater)\n                    {\n                        if (request.ViewModel.NewPubDate.HasValue)\n                        {\n                            var newPubDate = _timeZoneHelper.ConvertToUtc(request.ViewModel.NewPubDate.Value, tzId);\n                            if (newPubDate < DateTime.UtcNow)\n                            {\n                                saveMode = SaveMode.PublishNow;\n                                post.PubDate = newPubDate;\n                            }\n                        }\n                    }\n\n                    switch (saveMode)\n                    {\n                        case SaveMode.SaveDraft:\n\n                            post.DraftContent = request.ViewModel.Content;\n                            post.DraftAuthor = request.ViewModel.Author;\n                            \n                            break;\n\n                        case SaveMode.PublishLater:\n\n                            post.DraftContent = request.ViewModel.Content;\n                            post.DraftAuthor = request.ViewModel.Author;\n                            if (request.ViewModel.NewPubDate.HasValue)\n                            {\n                                \n                                post.DraftPubDate = _timeZoneHelper.ConvertToUtc(request.ViewModel.NewPubDate.Value, tzId);\n                            }\n                            if (!post.PubDate.HasValue)\n                            {\n                                post.IsPublished = false;\n                            }\n                            \n\n                            break;\n\n                        case SaveMode.PublishNow:\n\n                            post.Content = request.ViewModel.Content;\n                            post.Author = request.ViewModel.Author;\n                            if(!post.PubDate.HasValue)\n                            {\n                                post.PubDate = DateTime.UtcNow;\n                            }\n                            else if (post.PubDate > DateTime.UtcNow)\n                            {\n                                post.PubDate = DateTime.UtcNow;\n                            }\n                            \n                            post.IsPublished = true;\n                            shouldFirePublishEvent = true;\n\n                            post.DraftAuthor = null;\n                            post.DraftContent = null;\n                            post.DraftPubDate = null;\n\n                            break;\n\n                        case SaveMode.DeleteCurrentDraft:\n\n                            shouldFirePublishEvent = false;\n\n                            post.DraftAuthor = null;\n                            post.DraftContent = null;\n                            post.DraftPubDate = null;\n                            post.DraftSerializedModel = null;\n\n                            break;\n                    }\n\n                    if(project.TeaserMode != TeaserMode.Off)\n                    {\n                        // need to generate the teaser on save\n                        string html = null;\n                        if(post.ContentType == \"markdown\")\n                        {\n                            var mdPipeline = new MarkdownPipelineBuilder().UseAdvancedExtensions().Build();\n                            html = Markdown.ToHtml(post.Content, mdPipeline);\n                        }\n                        else\n                        {\n                            html = post.Content;\n                        }\n                        var teaserResult = _teaserService.GenerateTeaser(\n                            project.TeaserTruncationMode,\n                            project.TeaserTruncationLength,\n                            html,\n                            Guid.NewGuid().ToString(),//cache key\n                            post.Slug,\n                            project.LanguageCode,\n                            false //logWarnings\n                            );\n                        post.AutoTeaser = teaserResult.Content;\n                    }\n\n                    if (history != null)\n                    {\n                        await _historyCommands.Create(request.ProjectId, history).ConfigureAwait(false);\n                    }\n\n                    if (isNew)\n                    {\n                        await _blogService.Create(post);\n                    }\n                    else\n                    {\n                        await _blogService.Update(post);\n                    }\n\n                    if(shouldFirePublishEvent)\n                    {\n                        await _blogService.FirePublishEvent(post);\n                        await _historyCommands.DeleteDraftHistory(request.ProjectId, post.Id).ConfigureAwait(false);\n                    }\n                   \n                }\n\n                return new CommandResult<IPost>(post, request.ModelState.IsValid, errors);\n\n            }\n            catch(Exception ex)\n            {\n                _log.LogError($\"{ex.Message}:{ex.StackTrace}\");\n\n                errors.Add(_localizer[\"Updating a page failed. An error has been logged.\"]);\n\n                return new CommandResult<IPost>(null, false, errors);\n            }\n\n        }\n\n\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Web/Services/Blog/CreateOrUpdatePostRequest.cs",
    "content": "﻿using cloudscribe.SimpleContent.Models;\nusing cloudscribe.SimpleContent.Web.ViewModels;\nusing MediatR;\nusing Microsoft.AspNetCore.Mvc.ModelBinding;\n\nnamespace cloudscribe.SimpleContent.Web.Services\n{\n    public class CreateOrUpdatePostRequest : IRequest<CommandResult<IPost>>\n    {\n        public CreateOrUpdatePostRequest(\n            string projectId,\n            string userName,\n            PostEditViewModel viewModel,\n            IPost post,\n            ModelStateDictionary modelState\n            )\n        {\n            ProjectId = projectId;\n            UserName = userName;\n            ViewModel = viewModel;\n            Post = post;\n            ModelState = modelState;\n        }\n\n        public string ProjectId { get; private set; }\n        public string UserName { get; private set; }\n\n        public PostEditViewModel ViewModel { get; private set; }\n\n        public IPost Post { get; private set; }\n\n        public ModelStateDictionary ModelState { get; private set; }\n\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Web/Services/Blog/InitTemplatedPostHandler.cs",
    "content": "﻿// Copyright (c) Source Tree Solutions, LLC. All rights reserved.\n// Author:                  Joe Audette\n// Created:                 2018-07-14\n// Last Modified:           2018-07-14\n// \n\nusing cloudscribe.SimpleContent.Models;\nusing cloudscribe.Web.Common.Razor;\nusing MediatR;\nusing Microsoft.Extensions.Localization;\nusing Microsoft.Extensions.Logging;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace cloudscribe.SimpleContent.Web.Services\n{\n    public class InitTemplatedPostHandler : IRequestHandler<InitTemplatedPostRequest, CommandResult<IPost>>\n    {\n        public InitTemplatedPostHandler(\n            IBlogService blogService,\n            IEnumerable<IModelSerializer> serializers,\n            ViewRenderer viewRenderer,\n            IStringLocalizer<cloudscribe.SimpleContent.Web.SimpleContent> localizer,\n            ILogger<InitTemplatedPageHandler> logger\n            )\n        {\n            _blogService = blogService;\n            _serializers = serializers;\n            _viewRenderer = viewRenderer;\n            _localizer = localizer;\n            _log = logger;\n        }\n\n        private readonly IBlogService _blogService;\n        private readonly IEnumerable<IModelSerializer> _serializers;\n        private readonly ViewRenderer _viewRenderer;\n        private readonly IStringLocalizer _localizer;\n        private readonly ILogger _log;\n\n        private IModelSerializer GetSerializer(string name)\n        {\n            foreach (var s in _serializers)\n            {\n                if (s.Name == name) return s;\n            }\n\n            return _serializers.FirstOrDefault();\n        }\n\n        public async Task<CommandResult<IPost>> Handle(InitTemplatedPostRequest request, CancellationToken cancellationToken = default(CancellationToken))\n        {\n            // initialize an unpublished post based on the template\n\n            var errors = new List<string>();\n            try\n            {\n                var serializer = GetSerializer(request.Template.SerializerName);\n                var type = Type.GetType(request.Template.ModelType);\n                var model = Activator.CreateInstance(type);\n\n                var post = new Post\n                {\n                    BlogId = request.ProjectId,\n                    CreatedByUser = request.CreatedByUserName,\n                    DraftAuthor = request.Author,\n                    LastModifiedByUser = request.CreatedByUserName,\n                    TemplateKey = request.Template.Key,\n                    Title = request.ViewModel.Title,\n                    Serializer = serializer.Name,\n                    DraftSerializedModel = serializer.Serialize(request.Template.ModelType, model),\n                    Content = await _viewRenderer.RenderViewAsString(request.Template.RenderView, model).ConfigureAwait(false),\n                    IsPublished = false\n                };\n                \n                await _blogService.Create(post);\n                \n                var result = new CommandResult<IPost>(post, true, errors);\n\n                return result;\n            }\n            catch (Exception ex)\n            {\n                _log.LogError($\"{ex.Message}:{ex.StackTrace}\");\n\n                errors.Add(_localizer[\"Initializing a new post from a content template failed. An error has been logged.\"]);\n\n                return new CommandResult<IPost>(null, false, errors);\n            }\n\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Web/Services/Blog/InitTemplatedPostRequest.cs",
    "content": "﻿using cloudscribe.SimpleContent.Models;\nusing cloudscribe.SimpleContent.Web.ViewModels;\nusing MediatR;\n\nnamespace cloudscribe.SimpleContent.Web.Services\n{\n    public class InitTemplatedPostRequest : IRequest<CommandResult<IPost>>\n    {\n        public InitTemplatedPostRequest(\n            string projectId,\n            string createdByUserName,\n            string author,\n            NewContentViewModel model,\n            ContentTemplate template\n            )\n        {\n            ProjectId = projectId;\n            CreatedByUserName = createdByUserName;\n            Author = author;\n            ViewModel = model;\n            Template = template;\n        }\n\n        public string ProjectId { get; private set; }\n        public string CreatedByUserName { get; private set; }\n\n        public string Author { get; private set; }\n\n        public NewContentViewModel ViewModel { get; private set; }\n        public ContentTemplate Template { get; private set; }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Web/Services/Blog/NavigationBlogNodeFinder.cs",
    "content": "﻿using cloudscribe.SimpleContent.Models;\nusing cloudscribe.Web.Navigation;\nusing Microsoft.AspNetCore.Mvc;\nusing System;\n\nnamespace cloudscribe.SimpleContent.Web.Services\n{\n    /// <summary>\n    /// individual blog posts are not menu items so no currentNode is found to highlight in the menu\n    /// by plugging in this custom implementation of IFindCurrentNode we can find the blog index or mostrecentpost node\n    /// and highlight it\n    /// </summary>\n    public class NavigationBlogNodeFinder : IFindCurrentNode\n    {\n        public NavigationBlogNodeFinder(\n            IBlogRoutes blogRoutes\n            )\n        {\n            _blogRoutes = blogRoutes;\n        }\n\n        private IBlogRoutes _blogRoutes;\n\n        public TreeNode<NavigationNode> FindNode(\n            TreeNode<NavigationNode> rootNode,\n            IUrlHelper urlHelper,\n            string currentUrl,\n            string urlPrefix = \"\")\n        {\n            if (string.IsNullOrEmpty(currentUrl)) return null;\n            if (rootNode == null) return null;\n            if (rootNode.Value.Controller == \"Blog\") return rootNode;\n            if (rootNode.Value.NamedRoute == _blogRoutes.BlogIndexRouteName) return rootNode;\n            if (rootNode.Value.NamedRoute == _blogRoutes.MostRecentPostRouteName) return rootNode;\n\n            var blogUrl = urlHelper.RouteUrl(_blogRoutes.BlogIndexRouteName);\n            \n            if (rootNode.Value.Url == blogUrl) return rootNode;\n            \n            Func<TreeNode<NavigationNode>, bool> match = delegate (TreeNode<NavigationNode> n)\n            {\n                if (n == null) { return false; }\n                if(blogUrl == null) { return false; }\n                if (currentUrl.StartsWith(blogUrl))\n                {\n                    if (n.Value.Controller == \"Blog\") return true;\n                    if (n.Value.NamedRoute == _blogRoutes.BlogIndexRouteName) return true;\n                    if (n.Value.NamedRoute == _blogRoutes.MostRecentPostRouteName) return true;\n                    if (n.Value.Url == blogUrl) return true;\n                }\n\n                return false;\n            };\n\n\n            return rootNode.Find(match);\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Web/Services/Blog/PostEvents.cs",
    "content": "﻿// Copyright (c) Source Tree Solutions, LLC. All rights reserved.\n// Licensed under the Apache License, Version 2.0. \n// Author:                  Joe Audette\n// Created:                 2016-11-25\n// Last Modified:           2018-06-28\n// \n\nusing cloudscribe.SimpleContent.Models;\nusing cloudscribe.SimpleContent.Models.EventHandlers;\nusing Microsoft.Extensions.Logging;\nusing System;\nusing System.Collections.Generic;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace cloudscribe.SimpleContent.Web.Services\n{\n    public class PostEvents\n    {\n        public PostEvents(\n            IEnumerable<IHandlePostPreUpdate> preUpdateHandlers,\n            IEnumerable<IHandlePostPreDelete> preDeleteHandlers,\n            IEnumerable<IHandlePostCreated> createdHandlers,\n            IEnumerable<IHandlePostUpdated> updateHandlers,\n            IEnumerable<IHandlePostPublished> publishHandlers,\n            IEnumerable<IHandlePostUnPublished> unPublishHandlers,\n            ILogger<PostEvents> logger\n            )\n        {\n            _preUpdateHandlers = preUpdateHandlers;\n            _preDeleteHandlers = preDeleteHandlers;\n            _createdHandlers = createdHandlers;\n            _updateHandlers = updateHandlers;\n            _publishHandlers = publishHandlers;\n            _unPublishHandlers = unPublishHandlers;\n            _log = logger;\n        }\n\n        private readonly IEnumerable<IHandlePostPreUpdate> _preUpdateHandlers;\n        private readonly IEnumerable<IHandlePostPreDelete> _preDeleteHandlers;\n        private readonly IEnumerable<IHandlePostCreated> _createdHandlers;\n        private readonly IEnumerable<IHandlePostUpdated> _updateHandlers;\n        private readonly IEnumerable<IHandlePostPublished> _publishHandlers;\n        private readonly IEnumerable<IHandlePostUnPublished> _unPublishHandlers;\n        private readonly ILogger _log;\n\n        public async Task HandlePreUpdate(\n            string projectId,\n            string postId,\n            CancellationToken cancellationToken = default(CancellationToken)\n            )\n        {\n            foreach (var handler in _preUpdateHandlers)\n            {\n                try\n                {\n                    await handler.Handle(projectId, postId, cancellationToken).ConfigureAwait(false);\n                }\n                catch (Exception ex)\n                {\n                    _log.LogError($\"{ex.Message} : {ex.StackTrace}\");\n                }\n\n            }\n        }\n\n        public async Task HandlePreDelete(\n            string projectId,\n            string postId,\n            CancellationToken cancellationToken = default(CancellationToken)\n            )\n        {\n            foreach (var handler in _preDeleteHandlers)\n            {\n                try\n                {\n                    await handler.Handle(projectId, postId, cancellationToken).ConfigureAwait(false);\n                }\n                catch (Exception ex)\n                {\n                    _log.LogError($\"{ex.Message} : {ex.StackTrace}\");\n                }\n\n            }\n        }\n\n        public async Task HandleCreated(\n            string projectId,\n            IPost post,\n            CancellationToken cancellationToken = default(CancellationToken)\n            )\n        {\n            foreach (var handler in _createdHandlers)\n            {\n                try\n                {\n                    await handler.Handle(projectId, post, cancellationToken).ConfigureAwait(false);\n                }\n                catch (Exception ex)\n                {\n                    _log.LogError($\"{ex.Message} : {ex.StackTrace}\");\n                }\n\n            }\n        }\n\n        public async Task HandleUpdated(\n            string projectId,\n            IPost post,\n            CancellationToken cancellationToken = default(CancellationToken)\n            )\n        {\n            foreach (var handler in _updateHandlers)\n            {\n                try\n                {\n                    await handler.Handle(projectId, post, cancellationToken).ConfigureAwait(false);\n                }\n                catch (Exception ex)\n                {\n                    _log.LogError($\"{ex.Message} : {ex.StackTrace}\");\n                }\n\n            }\n        }\n\n        public async Task HandlePublished(\n            string projectId,\n            IPost post,\n            CancellationToken cancellationToken = default(CancellationToken)\n            )\n        {\n            foreach (var handler in _publishHandlers)\n            {\n                try\n                {\n                    await handler.Handle(projectId, post, cancellationToken).ConfigureAwait(false);\n                }\n                catch (Exception ex)\n                {\n                    _log.LogError($\"{ex.Message} : {ex.StackTrace}\");\n                }\n\n            }\n        }\n\n        public async Task HandleUnPublished(\n            string projectId,\n            IPost post,\n            CancellationToken cancellationToken = default(CancellationToken)\n            )\n        {\n            foreach (var handler in _unPublishHandlers)\n            {\n                try\n                {\n                    await handler.Handle(projectId, post, cancellationToken).ConfigureAwait(false);\n                }\n                catch (Exception ex)\n                {\n                    _log.LogError($\"{ex.Message} : {ex.StackTrace}\");\n                }\n\n            }\n        }\n\n\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Web/Services/Blog/TeaserCache.cs",
    "content": "﻿using cloudscribe.SimpleContent.Models;\nusing Microsoft.Extensions.Caching.Memory;\nusing Microsoft.Extensions.Options;\nusing System;\nusing System.Collections.Generic;\nusing System.Text;\n\nnamespace cloudscribe.SimpleContent.Web.Services\n{\n    public class TeaserCache\n    {\n        public TeaserCache(\n            IMemoryCache cache,\n            IOptions<TeaserCacheOptions> optionsAccessor = null\n            )\n        {\n            _cache = cache ?? throw new ArgumentNullException(nameof(cache));\n            _options = optionsAccessor?.Value;\n            if (_options == null) _options = new TeaserCacheOptions();\n        }\n\n        private IMemoryCache _cache;\n\n        private TeaserCacheOptions _options;\n\n        public string GetTeaser(string postId)\n        {\n            return (string)_cache.Get(postId);\n        }\n\n        public void AddToCache(string teaser, string postId)\n        {\n            var cacheOptions = new MemoryCacheEntryOptions()\n            {\n                Size = _options.Size\n            }\n            .SetSlidingExpiration(TimeSpan.FromSeconds(_options.CacheDurationInSeconds));\n\n            _cache.Set(\n                postId,\n                teaser,\n                cacheOptions\n                 );\n        }\n\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Web/Services/Blog/TeaserService.cs",
    "content": "﻿// Copyright (c) Source Tree Solutions, LLC. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.\n// Authors:                  John Jacobs/Joe Audette\n// Created:                 2017-12-22\n// Last Modified:           2018-02-04 \n// \nusing cloudscribe.HtmlAgilityPack;\nusing cloudscribe.SimpleContent.Models;\nusing Humanizer;\nusing Microsoft.Extensions.Logging;\nusing System;\nusing System.Collections.Generic;\nusing System.Globalization;\nusing System.Linq;\n\nnamespace cloudscribe.SimpleContent.Web.Services\n{\n    /// <summary>\n    /// Encapsulates the logic to generate abbreviated teasers of html.\n    /// </summary>\n    public class TeaserService : ITeaserService\n    {\n        public TeaserService(\n            TeaserCache cache = null, //nulls allowed for unit test\n            ILogger<TeaserService> logger = null\n            )\n        {\n            if(cache != null)\n            {\n                _cache = cache;\n            }\n\n            if(logger != null) // can be null in Unit Tests\n            {\n                _log = logger;\n            }\n            \n        }\n\n        private ILogger _log = null;\n        private TeaserCache _cache = null;\n\n        private const int defaultLengthWords = 20;\n        private const int defaultLengthCharacters = 200;\n        private const int defaultLengthAbsolute = 30;\n        private const string terminator = \"\";\n        \n        public TeaserResult GenerateTeaser(\n            TeaserTruncationMode truncationMode,\n            int truncationLength,\n            string html,\n            string cacheKey,\n            string slug,\n            string languageCode,\n            bool logWarnings = true)\n        {\n            var result = new TeaserResult();\n\n            if (string.IsNullOrWhiteSpace(html))\n            {\n                result.Content = html;\n                result.DidTruncate = false;\n                return result;\n            }\n\n            // Try to get language metadata for humanizer.\n            var cultureInfo = CultureInfo.InvariantCulture;\n            if (!string.IsNullOrEmpty(languageCode))\n            {\n                try\n                {\n                    cultureInfo = new CultureInfo(languageCode);\n                }\n                catch (CultureNotFoundException) { }\n            }\n\n            var contentLength = GetContentLength(html, truncationMode);\n            if(contentLength <= truncationLength)\n            {\n                result.Content = html;\n                result.DidTruncate = false;\n                return result;\n            }\n\n            if (_cache != null)\n            {\n                var cachedTeaser = _cache.GetTeaser(cacheKey);\n                if (!string.IsNullOrEmpty(cachedTeaser))\n                {\n                    result.Content = cachedTeaser;\n                    result.DidTruncate = true;\n                    return result;\n                }\n            }\n\n            var isRightToLeftLanguage = cultureInfo.TextInfo.IsRightToLeft;\n\n            // Get global teaser settings.\n            var truncationLengthToUse = truncationLength <= 0 ? GetDefaultTeaserLength(truncationMode) : truncationLength;\n\n            // Truncate the raw content first. In general, Humanizer is smart enough to ignore tags, especially if using word truncation.\n            var text = TruncatePost(truncationMode, html, truncationLengthToUse, isRightToLeftLanguage);\n            // Don't leave dangling <p> tags.\n            HtmlNode.ElementsFlags[\"p\"] = HtmlElementFlag.Closed;\n\n            var modeDesc = GetModeDescription(truncationMode);\n            \n            //if we get bad output try increasing the allowed length unti it is valid\n            while (!IsValidMarkup(text) && truncationLengthToUse <= contentLength)\n            {\n                truncationLengthToUse += 1;\n                if (_log != null && logWarnings)\n                {\n                    _log.LogWarning($\"teaser truncation for post {slug}, produced invalid html, so trying again and increasing the truncation length to {truncationLengthToUse} {modeDesc}. You should re-publish this post to create a persistent teaser.\");\n                }\n\n                text = TruncatePost(truncationMode, html, truncationLengthToUse, isRightToLeftLanguage);\n            }\n\n            if (!IsValidMarkup(text))\n            {\n                if (_log != null)\n                {\n                    _log.LogError($\"failed to create valid teaser for post {slug}, so returning full content\");\n                }\n\n                result.Content = html;\n                result.DidTruncate = false;\n                return result;\n            }\n\n            if (_cache != null)\n            {\n                _cache.AddToCache(text, cacheKey);\n            }\n\n            var doc = new HtmlDocument();\n            doc.LoadHtml(text);\n            \n            result.Content = doc.DocumentNode.InnerHtml;\n            result.DidTruncate = true;\n            return result;\n\n        }\n        \n        private bool IsValidMarkup(string html)\n        {\n            var errors = GetMarkupErrors(html);\n            return errors.Count() == 0;\n        }\n\n        private IEnumerable<HtmlParseError> GetMarkupErrors(string html)\n        {\n            var document = new HtmlAgilityPack.HtmlDocument();\n            document.OptionFixNestedTags = true;\n            document.LoadHtml(html);\n\n            return document.ParseErrors;\n        }\n\n        private string GetModeDescription(TeaserTruncationMode mode)\n        {\n            switch (mode)\n            {\n                case TeaserTruncationMode.Length:\n                    return \"string length\";\n                case TeaserTruncationMode.Character:\n                    return \"letters or digits\";\n                case TeaserTruncationMode.Word:\n                default:\n                    return \"words\";\n            }\n        }\n\n        private int GetContentLength(string html, TeaserTruncationMode mode)\n        {\n            if (string.IsNullOrEmpty(html)) return 0;\n            switch (mode)\n            {\n                case TeaserTruncationMode.Length:\n                    return html.Length;\n                case TeaserTruncationMode.Character:\n                    return html.ToCharArray().Count(char.IsLetterOrDigit);\n                case TeaserTruncationMode.Word:\n                default:\n                    return html.Split((char[])null, StringSplitOptions.RemoveEmptyEntries).Count();\n            }\n        }\n\n        // Internal for unit testing purposes only.\n        private int GetDefaultTeaserLength(TeaserTruncationMode mode)\n        {\n            switch (mode)\n            {\n                case TeaserTruncationMode.Length:\n                    return defaultLengthAbsolute;\n                case TeaserTruncationMode.Character:\n                    return defaultLengthCharacters;\n                case TeaserTruncationMode.Word:\n                default:\n                    return defaultLengthWords;\n            }\n        }\n\n        // Internal for unit testing purposes only.\n        private string TruncatePost(TeaserTruncationMode mode, string content, int length, bool isRightToLeftLanguage = false)\n        {\n            var truncateFrom = isRightToLeftLanguage ? TruncateFrom.Left : TruncateFrom.Right;\n            switch (mode)\n            {\n                case TeaserTruncationMode.Length:\n                    return content.Truncate(length, terminator, Truncator.FixedLength, truncateFrom);\n                case TeaserTruncationMode.Character:\n                    return content.Truncate(length, terminator, Truncator.FixedNumberOfCharacters, truncateFrom);\n                case TeaserTruncationMode.Word:\n                default:\n                    return content.Truncate(length, terminator, Truncator.FixedNumberOfWords, truncateFrom);\n            }\n        }\n\n    }\n}"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Web/Services/Blog/TeaserServiceDisabled.cs",
    "content": "﻿using cloudscribe.SimpleContent.Models;\n\nnamespace cloudscribe.SimpleContent.Web.Services\n{\n    /// <summary>\n    /// This implementation can be registered with DI if you want to completely disable the teaser generation and always use full content\n    /// </summary>\n    public class TeaserServiceDisabled : ITeaserService\n    {\n        public TeaserServiceDisabled()\n        {\n\n        }\n\n        public TeaserResult GenerateTeaser(\n            TeaserTruncationMode truncationMode,\n            int truncationLength,\n            string html,\n            string cacheKey,\n            string slug,\n            string languageCode,\n            bool logWarnings = true)\n        {\n            var result = new TeaserResult();\n            result.Content = html;\n            result.DidTruncate = false;\n\n            return result;\n\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Web/Services/Blog/UpdateTemplatedPostHandler.cs",
    "content": "﻿// Copyright (c) Source Tree Solutions, LLC. All rights reserved.\n// Author:                  Joe Audette\n// Created:                 2018-07-14\n// Last Modified:           2019-04-07\n// \n\nusing cloudscribe.DateTimeUtils;\nusing cloudscribe.SimpleContent.Models;\nusing cloudscribe.SimpleContent.Models.Versioning;\nusing cloudscribe.SimpleContent.Web.Templating;\nusing cloudscribe.Web.Common.Razor;\nusing MediatR;\nusing Microsoft.Extensions.Localization;\nusing Microsoft.Extensions.Logging;\nusing Microsoft.Extensions.Options;\nusing System;\nusing System.Collections.Generic;\nusing System.ComponentModel.DataAnnotations;\nusing System.Linq;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace cloudscribe.SimpleContent.Web.Services\n{\n    public class UpdateTemplatedPostHandler : IRequestHandler<UpdateTemplatedPostRequest, CommandResult<IPost>>\n    {\n        public UpdateTemplatedPostHandler(\n            IProjectService projectService,\n            IBlogService blogService,\n            IOptions<BlogEditOptions> configOptionsAccessor,\n            IContentHistoryCommands historyCommands,\n            ITimeZoneHelper timeZoneHelper,\n            ITimeZoneIdResolver timeZoneIdResolver,\n            ITeaserService teaserService,\n            IEnumerable<IModelSerializer> serializers,\n            IEnumerable<IParseModelFromForm> formParsers,\n            IEnumerable<IValidateTemplateModel> modelValidators,\n            ViewRenderer viewRenderer,\n            IStringLocalizer<cloudscribe.SimpleContent.Web.SimpleContent> localizer,\n            ILogger<UpdateTemplatedPostHandler> logger\n            )\n        {\n            _projectService = projectService;\n            _blogService = blogService;\n            _editOptions = configOptionsAccessor.Value;\n            _historyCommands = historyCommands;\n            _timeZoneHelper = timeZoneHelper;\n            _timeZoneIdResolver = timeZoneIdResolver;\n            _teaserService = teaserService;\n            _serializers = serializers;\n            _formParsers = formParsers;\n            _modelValidators = modelValidators;\n            _viewRenderer = viewRenderer;\n            _localizer = localizer;\n            _log = logger;\n        }\n\n        private readonly IProjectService _projectService;\n        private readonly IBlogService _blogService;\n        private readonly BlogEditOptions _editOptions;\n        private readonly IContentHistoryCommands _historyCommands;\n        private readonly ITimeZoneHelper _timeZoneHelper;\n        private readonly ITimeZoneIdResolver _timeZoneIdResolver;\n        private readonly ITeaserService _teaserService;\n        private readonly IEnumerable<IModelSerializer> _serializers;\n        private readonly IEnumerable<IParseModelFromForm> _formParsers;\n        private readonly IEnumerable<IValidateTemplateModel> _modelValidators;\n        private readonly ViewRenderer _viewRenderer;\n        private readonly IStringLocalizer _localizer;\n        private readonly ILogger _log;\n\n        private IModelSerializer GetSerializer(string name)\n        {\n            foreach (var s in _serializers)\n            {\n                if (s.Name == name) return s;\n            }\n\n            return _serializers.FirstOrDefault();\n        }\n\n        private IParseModelFromForm GetFormParser(string name)\n        {\n            foreach (var s in _formParsers)\n            {\n                if (s.ParserName == name) return s;\n            }\n\n            return _formParsers.FirstOrDefault();\n        }\n\n        private IValidateTemplateModel GetValidator(string name)\n        {\n            foreach (var s in _modelValidators)\n            {\n                if (s.ValidatorName == name) return s;\n            }\n\n            return _modelValidators.FirstOrDefault();\n        }\n\n        public async Task<CommandResult<IPost>> Handle(UpdateTemplatedPostRequest request, CancellationToken cancellationToken = default(CancellationToken))\n        {\n            var errors = new List<string>();\n            var customModelIsValid = true;\n            try\n            {\n                var post = request.Post;\n                var history = post.CreateHistory(request.UserName);\n                var project = await _projectService.GetCurrentProjectSettings();\n                var serializer = GetSerializer(request.Template.SerializerName);\n                var parser = GetFormParser(request.Template.FormParserName);\n                var validator = GetValidator(request.Template.ValidatorName);\n                var type = Type.GetType(request.Template.ModelType);\n                var model = parser.ParseModel(request.Template.ModelType, request.Form);\n                if (model == null)\n                {\n                    errors.Add(_localizer[\"Failed to parse custom template model from form.\"]);\n                    customModelIsValid = false;\n                    //failed to parse model from form\n                    // at least return the original model before changes\n                    string pageModelString;\n                    if (!string.IsNullOrWhiteSpace(post.DraftSerializedModel))\n                    {\n                        pageModelString = post.DraftSerializedModel;\n                    }\n                    else\n                    {\n                        pageModelString = post.SerializedModel;\n                    }\n                    if (!string.IsNullOrWhiteSpace(pageModelString))\n                    {\n                        request.ViewModel.TemplateModel = serializer.Deserialize(request.Template.ModelType, pageModelString);\n                    }\n                }\n\n                if (customModelIsValid)\n                {\n                    // we are going to return the parsed model either way\n                    request.ViewModel.TemplateModel = model;\n\n                    var validationContext = new ValidationContext(model, serviceProvider: null, items: null);\n                    var validationResults = new List<ValidationResult>();\n\n                    customModelIsValid = validator.IsValid(model, validationContext, validationResults);\n                    if (!customModelIsValid)\n                    {\n                        foreach (var item in validationResults)\n                        {\n                            foreach (var memberName in item.MemberNames)\n                            {\n                                request.ModelState.AddModelError(memberName, item.ErrorMessage);\n\n                            }\n                        }\n                    }\n                }\n\n                if (!string.IsNullOrEmpty(request.ViewModel.Slug))\n                {\n                    // remove any bad characters\n                    request.ViewModel.Slug = ContentUtils.CreateSlug(request.ViewModel.Slug);\n                    if (request.ViewModel.Slug != post.Slug)\n                    {\n                        var slug = request.ViewModel.Slug;\n                        var slugIsAvailable = await _blogService.SlugIsAvailable(slug);\n                        while (!slugIsAvailable)\n                        {\n                            slug += \"-\";\n                            slugIsAvailable = await _blogService.SlugIsAvailable(slug);\n                            \n                        }\n\n                        if (slugIsAvailable)\n                        {\n                            post.Slug = slug;\n                        }\n                    }\n                }\n\n                if (request.ModelState.IsValid)\n                {\n                    var modelString = serializer.Serialize(request.Template.ModelType, model);\n                    var renderedModel = await _viewRenderer.RenderViewAsString(request.Template.RenderView, model).ConfigureAwait(false);\n\n                    post.Title = request.ViewModel.Title;\n                    post.CorrelationKey = request.ViewModel.CorrelationKey;\n                    post.ImageUrl = request.ViewModel.ImageUrl;\n                    post.ThumbnailUrl = request.ViewModel.ThumbnailUrl;\n                    post.IsFeatured = request.ViewModel.IsFeatured;\n                    post.TeaserOverride = request.ViewModel.TeaserOverride;\n                    post.SuppressTeaser = request.ViewModel.SuppressTeaser;\n                    post.ShowComments = request.ViewModel.ShowComments;\n                    post.LastModified = DateTime.UtcNow;\n                    post.LastModifiedByUser = request.UserName;\n                    post.MetaDescription = request.ViewModel.MetaDescription;\n                    \n                    var categories = new List<string>();\n                    if (!string.IsNullOrEmpty(request.ViewModel.Categories))\n                    {\n                        if (_editOptions.ForceLowerCaseCategories)\n                        {\n                            categories = request.ViewModel.Categories.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries).Select(x => x.Trim().ToLower())\n                            .Where(x =>\n                            !string.IsNullOrWhiteSpace(x)\n                            && x != \",\"\n                            )\n                            .Distinct()\n                            .ToList();\n                        }\n                        else\n                        {\n                            categories = request.ViewModel.Categories.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries).Select(x => x.Trim())\n                            .Where(x =>\n                            !string.IsNullOrWhiteSpace(x)\n                            && x != \",\"\n                            )\n                            .Distinct()\n                            .ToList();\n                        }\n                    }\n                    post.Categories = categories;\n\n                    var tzId = await _timeZoneIdResolver.GetUserTimeZoneId(CancellationToken.None);\n                    var shouldFirePublishEvent = false;\n                    var saveMode = request.ViewModel.SaveMode;\n                    if (saveMode == SaveMode.PublishLater)\n                    {\n                        if (request.ViewModel.NewPubDate.HasValue)\n                        {\n                            var newPubDate = _timeZoneHelper.ConvertToUtc(request.ViewModel.NewPubDate.Value, tzId);\n                            if (newPubDate < DateTime.UtcNow)\n                            {\n                                saveMode = SaveMode.PublishNow;\n                                post.PubDate = newPubDate;\n                            }\n                        }\n                    }\n\n                    switch (saveMode)\n                    {\n                        case SaveMode.SaveDraft:\n\n                            post.DraftSerializedModel = modelString;\n                            post.DraftContent = renderedModel;\n                            post.DraftAuthor = request.ViewModel.Author;\n                            if (!post.PubDate.HasValue) { post.IsPublished = false; }\n\n                            break;\n\n                        case SaveMode.PublishLater:\n                            post.DraftSerializedModel = modelString;\n                            post.DraftContent = renderedModel;\n                            post.DraftAuthor = request.ViewModel.Author;\n                            if (request.ViewModel.NewPubDate.HasValue)\n                            {\n                                post.DraftPubDate = _timeZoneHelper.ConvertToUtc(request.ViewModel.NewPubDate.Value, tzId);\n                            }\n                            if (!post.PubDate.HasValue) { post.IsPublished = false; }\n\n                            break;\n\n                        case SaveMode.PublishNow:\n\n                            post.Author = request.ViewModel.Author;\n                            post.Content = renderedModel;\n                            post.SerializedModel = modelString;\n\n                            if(!post.PubDate.HasValue)\n                            {\n                                post.PubDate = DateTime.UtcNow;\n                            }\n                            \n                            post.IsPublished = true;\n                            shouldFirePublishEvent = true;\n\n                            post.DraftAuthor = null;\n                            post.DraftContent = null;\n                            post.DraftPubDate = null;\n                            post.DraftSerializedModel = null;\n\n                            break;\n\n                        case SaveMode.DeleteCurrentDraft:\n\n                            shouldFirePublishEvent = false;\n\n                            post.DraftAuthor = null;\n                            post.DraftContent = null;\n                            post.DraftPubDate = null;\n                            post.DraftSerializedModel = null;\n\n                            break;\n                    }\n\n                    if (project.TeaserMode != TeaserMode.Off)\n                    {\n                        // need to generate the teaser on save\n                        var teaserResult = _teaserService.GenerateTeaser(\n                            project.TeaserTruncationMode,\n                            project.TeaserTruncationLength,\n                            post.Content,\n                            Guid.NewGuid().ToString(),//cache key\n                            post.Slug,\n                            project.LanguageCode,\n                            false //logWarnings\n                            );\n                        post.AutoTeaser = teaserResult.Content;\n                    }\n\n                    await _historyCommands.Create(request.ProjectId, history).ConfigureAwait(false);\n\n                    await _blogService.Update(post);\n\n                    if (shouldFirePublishEvent)\n                    {\n                        await _blogService.FirePublishEvent(post).ConfigureAwait(false);\n                        await _historyCommands.DeleteDraftHistory(project.Id, post.Id).ConfigureAwait(false);\n                    }\n\n                   \n                }\n\n                return new CommandResult<IPost>(post, customModelIsValid && request.ModelState.IsValid, errors);\n\n            }\n            catch (Exception ex)\n            {\n                _log.LogError($\"{ex.Message}:{ex.StackTrace}\");\n\n                errors.Add(_localizer[\"Updating a post from a content template failed. An error has been logged.\"]);\n\n                return new CommandResult<IPost>(null, false, errors);\n            }\n\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Web/Services/Blog/UpdateTemplatedPostRequest.cs",
    "content": "﻿using cloudscribe.SimpleContent.Models;\nusing cloudscribe.SimpleContent.Web.ViewModels;\nusing MediatR;\nusing Microsoft.AspNetCore.Http;\nusing Microsoft.AspNetCore.Mvc.ModelBinding;\n\nnamespace cloudscribe.SimpleContent.Web.Services\n{\n    public class UpdateTemplatedPostRequest : IRequest<CommandResult<IPost>>\n    {\n        public UpdateTemplatedPostRequest(\n            string projectId,\n            string userName,\n            PostEditWithTemplateViewModel viewModel,\n            ContentTemplate template,\n            IPost post,\n            IFormCollection form,\n            ModelStateDictionary modelState\n            )\n        {\n            ProjectId = projectId;\n            UserName = userName;\n            ViewModel = viewModel;\n            Template = template;\n            Post = post;\n            Form = form;\n            ModelState = modelState;\n\n        }\n\n        public string ProjectId { get; private set; }\n        public string UserName { get; private set; }\n\n        public PostEditWithTemplateViewModel ViewModel { get; private set; }\n        public ContentTemplate Template { get; private set; }\n        public IPost Post { get; private set; }\n\n        public IFormCollection Form { get; private set; }\n        public ModelStateDictionary ModelState { get; private set; }\n\n\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Web/Services/ContentProcessor.cs",
    "content": "﻿using cloudscribe.HtmlAgilityPack;\nusing cloudscribe.SimpleContent.Models;\nusing Markdig;\nusing Microsoft.AspNetCore.Mvc;\nusing System;\nusing System.Globalization;\nusing System.IO;\nusing System.Linq;\nusing System.Text.RegularExpressions;\nusing System.Threading.Tasks;\n\nnamespace cloudscribe.SimpleContent.Web.Services\n{\n    public class ContentProcessor : IContentProcessor\n    {\n        public ContentProcessor(\n            ITeaserService teaserService,\n            IMarkdownProcessor markdownProcessor\n            )\n        {\n            _markdownProcessor = markdownProcessor;\n            _teaserService = teaserService;\n        }\n\n        private IMarkdownProcessor _markdownProcessor;\n        private ITeaserService _teaserService;\n        private MarkdownPipeline _mdPipeline = null;\n\n        private static readonly Regex _linkRegex = new Regex(\"((http://|https://|www\\\\.)([A-Z0-9.\\\\-]{1,})\\\\.[0-9A-Z?;~&%\\\\(\\\\)#,=\\\\-_\\\\./\\\\+]{2,}[0-9A-Z?~&%#=\\\\-_/\\\\+])\",\n            RegexOptions.Compiled | RegexOptions.IgnoreCase\n            );\n\n        private const string Link = \"<a href=\\\"{0}{1}\\\" rel=\\\"nofollow\\\">{2}</a>\";\n\n        private static string Evaluator(Match match)\n        {\n            var info = CultureInfo.InvariantCulture;\n            return string.Format(info, Link, !match.Value.Contains(\"://\") ? \"http://\" : string.Empty, match.Value, ShortenUrl(match.Value, 50));\n        }\n\n        private static string ShortenUrl(string url, int max)\n        {\n            if (string.IsNullOrWhiteSpace(url)) return url;\n            if (url.Length <= max)\n            {\n                return url;\n            }\n\n            // Remove the protocal\n            var startIndex = url.IndexOf(\"://\");\n            if (startIndex > -1)\n            {\n                url = url.Substring(startIndex + 3);\n            }\n\n            if (url.Length <= max)\n            {\n                return url;\n            }\n\n            // Compress folder structure\n            var firstIndex = url.IndexOf(\"/\") + 1;\n            var lastIndex = url.LastIndexOf(\"/\");\n            if (firstIndex < lastIndex)\n            {\n                url = url.Remove(firstIndex, lastIndex - firstIndex);\n                url = url.Insert(firstIndex, \"...\");\n            }\n\n            if (url.Length <= max)\n            {\n                return url;\n            }\n\n            // Remove URL parameters\n            var queryIndex = url.IndexOf(\"?\");\n            if (queryIndex > -1)\n            {\n                url = url.Substring(0, queryIndex);\n            }\n\n            if (url.Length <= max)\n            {\n                return url;\n            }\n\n            // Remove URL fragment\n            var fragmentIndex = url.IndexOf(\"#\");\n            if (fragmentIndex > -1)\n            {\n                url = url.Substring(0, fragmentIndex);\n            }\n\n            if (url.Length <= max)\n            {\n                return url;\n            }\n\n            // Compress page\n            firstIndex = url.LastIndexOf(\"/\") + 1;\n            lastIndex = url.LastIndexOf(\".\");\n            if (lastIndex - firstIndex > 10)\n            {\n                var page = url.Substring(firstIndex, lastIndex - firstIndex);\n                var length = url.Length - max + 3;\n                if (page.Length > length)\n                {\n                    url = url.Replace(page, string.Format(\"...{0}\", page.Substring(length)));\n                }\n            }\n\n            return url;\n        }\n\n        private HtmlNode GetPrimaryOrFirstImage(HtmlDocument doc)\n        {\n            foreach (var img in doc.DocumentNode.Descendants(\"img\"))\n            {\n                if (img.Attributes[\"data-primary-image\"] != null)\n                {\n                    return img;\n                }\n            }\n\n            foreach (var img in doc.DocumentNode.Descendants(\"img\"))\n            {\n                if (img.Attributes[\"src\"] != null)\n                {\n                    return img;\n                }\n            }\n\n            return null;\n        }\n\n        public ContentFilterResult FilterHtmlForRss(IPost post, IProjectSettings settings, string absoluteMediaBaseUrl)\n        {\n            bool useTeaser = (settings.TeaserMode == TeaserMode.ListsAndFeed || settings.TeaserMode == TeaserMode.FeedOnly) && !post.SuppressTeaser;\n            var result = FilterHtmlForList(post, settings, useTeaser);\n            result.FilteredContent = ConvertUrlsToAbsolute(absoluteMediaBaseUrl, result.FilteredContent);\n\n            return result;\n        }\n\n        public ContentFilterResult FilterHtmlForList(IPost post, IProjectSettings settings)\n        {\n            bool useTeaser = (settings.TeaserMode == TeaserMode.ListsAndFeed || settings.TeaserMode == TeaserMode.ListOnly) && !post.SuppressTeaser;\n\n            return FilterHtmlForList(post, settings, useTeaser);\n        }\n\n        private ContentFilterResult FilterHtmlForList(IPost post, IProjectSettings settings, bool useTeaser)\n        {\n            var result = new ContentFilterResult();\n            if (useTeaser)\n            {\n                TeaserResult teaserResult = null;\n                string teaser = null;\n\n                if (!string.IsNullOrWhiteSpace(post.TeaserOverride))\n                {\n                    if (post.ContentType == \"markdown\")\n                    {\n                        teaser = MapImageUrlsToCdn(\n                            ConvertMarkdownToHtml(post.TeaserOverride),\n                            settings.CdnUrl,\n                            settings.LocalMediaVirtualPath);\n\n                    }\n                    else\n                    {\n                        teaser = MapImageUrlsToCdn(\n                            post.TeaserOverride,\n                            settings.CdnUrl,\n                            settings.LocalMediaVirtualPath);\n                    }\n\n                    result.FilteredContent = teaser;\n                    result.IsFullContent = false;\n                }\n                else if (!string.IsNullOrWhiteSpace(post.AutoTeaser)) // as of 2018-08-20 this gets populated on save\n                {\n                    teaser = MapImageUrlsToCdn(\n                        post.AutoTeaser,\n                        settings.CdnUrl,\n                        settings.LocalMediaVirtualPath);\n                    \n                    result.FilteredContent = teaser;\n                    result.IsFullContent = false;\n                }\n                else\n                {\n                    // need to generate teaser\n                    if (post.ContentType == \"markdown\")\n                    {\n                        var html = MapImageUrlsToCdn(\n                            ConvertMarkdownToHtml(post.CoalesceContentToDraftContent()),\n                            settings.CdnUrl,\n                            settings.LocalMediaVirtualPath);\n\n                        teaserResult = _teaserService.GenerateTeaser(\n                            settings.TeaserTruncationMode,\n                            settings.TeaserTruncationLength,\n                            html,\n                            post.Id,\n                            post.Slug,\n                            settings.LanguageCode\n                            );\n                    }\n                    else\n                    {\n                        var html = MapImageUrlsToCdn(\n                            post.CoalesceContentToDraftContent(),\n                            settings.CdnUrl,\n                            settings.LocalMediaVirtualPath);\n\n                        teaserResult = _teaserService.GenerateTeaser(\n                            settings.TeaserTruncationMode,\n                            settings.TeaserTruncationLength,\n                            html,\n                            post.Id,\n                            post.Slug,\n                            settings.LanguageCode\n                            );\n                    }\n\n                    result.FilteredContent = teaserResult.Content;\n                    result.IsFullContent = !teaserResult.DidTruncate;\n                }\n\n\n            }\n            else\n            {\n                // using full content\n                if (post.ContentType == \"markdown\")\n                {\n                    result.FilteredContent = MapImageUrlsToCdn(\n                            ConvertMarkdownToHtml(post.CoalesceContentToDraftContent()),\n                            settings.CdnUrl,\n                            settings.LocalMediaVirtualPath);\n                }\n                else\n                {\n                    result.FilteredContent = MapImageUrlsToCdn(\n                            post.CoalesceContentToDraftContent(),\n                            settings.CdnUrl,\n                            settings.LocalMediaVirtualPath);\n                }\n\n                result.IsFullContent = true;\n            }\n\n\n\n            return result;\n        }\n\n        public string ConvertMarkdownToHtml(string markdown)\n        {\n            if (_mdPipeline == null)\n            {\n                _mdPipeline = new MarkdownPipelineBuilder().UseAdvancedExtensions().Build();\n            }\n\n            return Markdown.ToHtml(markdown ?? \"\", _mdPipeline);\n        }\n\n\n        public string FilterHtml(IContentItem p, IProjectSettings projectSettings)\n        {\n            if (p.ContentType == \"markdown\")\n            {\n                var html = ConvertMarkdownToHtml(p.Content);\n                return MapImageUrlsToCdn(\n                    html,\n                    projectSettings.CdnUrl,\n                    projectSettings.LocalMediaVirtualPath);\n            }\n            return MapImageUrlsToCdn(\n                p.Content,\n                projectSettings.CdnUrl,\n                projectSettings.LocalMediaVirtualPath);\n        }\n\n        public string MapImageUrlsToCdn(\n            string htmlInput,\n            string cdnUrl = \"\",\n            string rootPath = \"\")\n        {\n            if (string.IsNullOrWhiteSpace(htmlInput)) return htmlInput;\n            if (string.IsNullOrWhiteSpace(cdnUrl)) return htmlInput;\n\n            var htmlOutput = htmlInput;\n\n            // think this is a legacy from MiniBlog not needed\n            // Youtube content embedded using this syntax: [youtube:xyzAbc123]\n            //var video = \"<div class=\\\"video\\\"><iframe src=\\\"//www.youtube.com/embed/{0}?modestbranding=1&amp;theme=light\\\" allowfullscreen></iframe></div>\";\n           // htmlOutput = Regex.Replace(htmlOutput, @\"\\[youtube:(.*?)\\]\", (Match m) => string.Format(video, m.Groups[1].Value));\n\n            if (!rootPath.StartsWith(\"/\"))\n                rootPath = \"/\" + rootPath;\n            \n            htmlOutput = Regex.Replace(htmlOutput, \"<img.*?src=\\\"([^\\\"]+)\\\"\", (Match m) =>\n            {\n                string src = m.Groups[1].Value;\n                int index = src.IndexOf(rootPath);\n\n                if (index > -1)\n                {\n                    string clean = src.Substring(index);\n                    return m.Value.Replace(src, cdnUrl + clean);\n                }\n\n                return m.Value;\n            });\n            \n            return htmlOutput;\n        }\n\n        //public Task<string> ConvertMediaUrlsToRelative(\n        //    string mediaVirtualPath,\n        //    string absoluteBaseMediaUrl,\n        //    string htmlInput)\n        //{\n        //    if (string.IsNullOrEmpty(htmlInput)) { return Task.FromResult(htmlInput); }\n\n        //    var htmlOutput = htmlInput;\n        //    // convert any fully qualified image urls to relative urls\n        //    if (absoluteBaseMediaUrl.Length > 0)\n        //    {\n\n        //        // need to change absolute urls to relative urls\n        //        // absolute image urls are created when posting from open live writer\n\n        //        htmlOutput = Regex.Replace(htmlOutput, \"<img.*?src=\\\"([^\\\"]+)\\\"\", (Match m) =>\n        //        {\n        //            string src = m.Groups[1].Value;\n        //            int index = src.IndexOf(absoluteBaseMediaUrl);\n\n        //            if (index > -1)\n        //            {\n        //                string clean = src.Substring(absoluteBaseMediaUrl.Length);\n        //                return m.Value.Replace(src, mediaVirtualPath + clean);\n        //            }\n\n        //            return m.Value;\n        //        });\n\n        //        htmlOutput = Regex.Replace(htmlOutput, \"<a.*?href=\\\"([^\\\"]+)\\\"\", (Match m) =>\n        //        {\n        //            string src = m.Groups[1].Value;\n        //            int index = src.IndexOf(absoluteBaseMediaUrl);\n\n        //            if (index > -1)\n        //            {\n        //                string clean = src.Substring(absoluteBaseMediaUrl.Length);\n        //                return m.Value.Replace(src, mediaVirtualPath + clean);\n        //            }\n\n        //            return m.Value;\n        //        });\n                \n        //    }\n\n        //    return Task.FromResult(htmlOutput);\n        //}\n\n        public Task<string> ConvertMediaUrlsToRelative(\n            string absoluteBaseMediaUrl,\n            string htmlInput)\n        {\n            if (string.IsNullOrEmpty(htmlInput)) { return Task.FromResult(htmlInput); }\n\n            var htmlOutput = htmlInput;\n            // convert any fully qualified image urls to relative urls\n            if (!string.IsNullOrWhiteSpace(absoluteBaseMediaUrl))\n            {\n\n                // need to change absolute urls to relative urls\n                // absolute image urls are created when posting from open live writer\n\n                htmlOutput = Regex.Replace(htmlOutput, \"<img.*?src=\\\"([^\\\"]+)\\\"\", (Match m) =>\n                {\n                    string src = m.Groups[1].Value;\n                    int index = src.IndexOf(absoluteBaseMediaUrl);\n\n                    if (index > -1)\n                    {\n                        string clean = src.Substring(absoluteBaseMediaUrl.Length);\n                        return m.Value.Replace(src, clean);\n                    }\n\n                    return m.Value;\n                });\n\n                htmlOutput = Regex.Replace(htmlOutput, \"<a.*?href=\\\"([^\\\"]+)\\\"\", (Match m) =>\n                {\n                    string src = m.Groups[1].Value;\n                    int index = src.IndexOf(absoluteBaseMediaUrl);\n\n                    if (index > -1)\n                    {\n                        string clean = src.Substring(absoluteBaseMediaUrl.Length);\n                        return m.Value.Replace(src, clean);\n                    }\n\n                    return m.Value;\n                });\n\n            }\n\n            return Task.FromResult(htmlOutput);\n        }\n\n        public string ConvertUrlsToAbsolute(\n            string absoluteBaseMediaUrl,\n            string htmlInput)\n        {\n            if (string.IsNullOrWhiteSpace(htmlInput)) return htmlInput;\n            var writer = new StringWriter();\n            var doc = new HtmlDocument();\n            doc.LoadHtml(htmlInput);\n\n            foreach (var img in doc.DocumentNode.Descendants(\"img\"))\n            {\n                if (img.Attributes[\"src\"] != null)\n                {\n                    var src = img.Attributes[\"src\"].Value;\n                    if (src.StartsWith(\"data\")) continue; //base64\n                    if (src.StartsWith(\"http\")) continue;\n                    img.Attributes[\"src\"].Value = new Uri(new Uri(absoluteBaseMediaUrl), src).AbsoluteUri;\n\n                }\n\n            }\n\n            foreach (var a in doc.DocumentNode.Descendants(\"a\"))\n            {\n                if (a.Attributes[\"href\"] != null)\n                {\n                    var href = a.Attributes[\"href\"].Value;\n                    if (href.StartsWith(\"http\")) continue;\n                    a.Attributes[\"href\"].Value = new Uri(new Uri(absoluteBaseMediaUrl), href).AbsoluteUri;\n                }\n\n            }\n\n            doc.Save(writer);\n\n            var newHtml = writer.ToString();\n\n            return newHtml;\n\n        }\n\n\n        private string pslug = string.Empty;\n        private string firstImageUrl;\n        public string ExtractFirstImageUrl(IContentItem item, IUrlHelper urlHelper, string fallbackImageUrl = null)\n        {\n            if (urlHelper == null) return string.Empty;\n            if (item == null) return string.Empty;\n\n            var baseUrl = string.Concat(urlHelper.ActionContext.HttpContext.Request.Scheme,\n                        \"://\",\n                        urlHelper.ActionContext.HttpContext.Request.Host.ToUriComponent());\n\n            if (item.ContentType == \"markdown\")\n            {\n                var mdImg = _markdownProcessor.ExtractFirstImageUrl(item.Content);\n                if (!string.IsNullOrEmpty(mdImg))\n                {\n                    if (mdImg.StartsWith(\"http\")) return mdImg;\n\n                    return baseUrl + mdImg;\n                }\n\n                return string.Empty;\n            }\n\n            if (!string.IsNullOrWhiteSpace(firstImageUrl) && pslug == item.Slug)\n            {\n                if (firstImageUrl.StartsWith(\"http\")) return firstImageUrl;\n\n                return baseUrl + firstImageUrl; //don't extract it more than once\n            }\n\n            if (item == null) return string.Empty;\n\n\n            firstImageUrl = ExtractFirstImageUrl(item.Content, fallbackImageUrl);\n            pslug = item.Slug;\n\n            if (string.IsNullOrWhiteSpace(firstImageUrl)) return fallbackImageUrl;\n            if (firstImageUrl == baseUrl) return fallbackImageUrl;\n\n            if (firstImageUrl.StartsWith(\"http\")) return firstImageUrl;\n\n\n\n            return baseUrl + firstImageUrl;\n        }\n\n        /// <summary>\n        /// extracts the src url of the first image found, if the first image is not the one you want \n        /// then you can add an attribute data-primary-image=\"true\" to make it use that image instead of the first one\n        /// </summary>\n        /// <param name=\"htmlInput\"></param>\n        /// <param name=\"fallbackImageUrl\"></param>\n        /// <returns></returns>\n        public string ExtractFirstImageUrl(string htmlInput, string fallbackImageUrl = null)\n        {\n            if (string.IsNullOrWhiteSpace(htmlInput)) return htmlInput;\n\n            var doc = new HtmlDocument();\n            doc.LoadHtml(htmlInput);\n\n            var img = GetPrimaryOrFirstImage(doc);\n            if (img != null && img.Attributes[\"src\"] != null)\n            {\n                return img.Attributes[\"src\"].Value;\n            }\n\n            return fallbackImageUrl;\n\n        }\n\n        public ImageSizeResult ExtractFirstImageDimensions(IContentItem item)\n        {\n            return ExtractFirstImageDimensions(item.Content);\n        }\n\n        public ImageSizeResult ExtractFirstImageDimensions(string htmlInput, string fallbackWidth = \"550px\", string fallbackHeight = \"550px\")\n        {\n            if (!string.IsNullOrWhiteSpace(htmlInput))\n            {\n                var doc = new HtmlDocument();\n                doc.LoadHtml(htmlInput);\n\n                var img = GetPrimaryOrFirstImage(doc);\n                if (img != null && img.Attributes[\"style\"] != null)\n                {\n                    var style = img.Attributes[\"style\"].Value;\n                    var styleItems = style.Split(';')\n                    .Select(s => s.Trim()).ToArray();\n                    return ExtractDims(styleItems as string[], fallbackWidth, fallbackHeight);\n                }\n\n            }\n\n\n            return new ImageSizeResult { Width = fallbackWidth, Height = fallbackHeight };\n\n        }\n\n        private ImageSizeResult ExtractDims(string[] atts, string fallbackWidth = \"550px\", string fallbackHeight = \"550px\")\n        {\n            string h = fallbackHeight;\n            string w = fallbackWidth;\n            foreach (var item in atts)\n            {\n\n                if (item.StartsWith(\"height\") && item.Contains(\":\"))\n                {\n                    h = item.Substring(item.LastIndexOf(\":\") + 1);\n\n                }\n                if (item.StartsWith(\"width\") && item.Contains(\":\"))\n                {\n                    w = item.Substring(item.LastIndexOf(\":\") + 1);\n\n                }\n            }\n\n            return new ImageSizeResult { Width = w, Height = h };\n\n        }\n\n        public string RemoveImageStyleAttribute(\n            string htmlInput)\n        {\n            if (string.IsNullOrWhiteSpace(htmlInput)) return htmlInput;\n            string newHtml;\n            using (var writer = new StringWriter())\n            {\n                var doc = new HtmlDocument();\n                doc.LoadHtml(htmlInput);\n\n                foreach (var img in doc.DocumentNode.Descendants(\"img\"))\n                {\n                    if (img.Attributes[\"style\"] != null)\n                    {\n                        img.Attributes[\"style\"].Remove();\n                    }\n\n                    if (img.Attributes[\"height\"] != null)\n                    {\n                        img.Attributes[\"height\"].Remove();\n                    }\n\n                    if (img.Attributes[\"width\"] != null)\n                    {\n                        img.Attributes[\"width\"].Remove();\n                    }\n\n                }\n\n                doc.Save(writer);\n                newHtml = writer.ToString();\n            }\n\n\n\n            return newHtml;\n\n        }\n\n\n        public string FilterComment(IComment c)\n        {\n            return FilterCommentLinks(c.Content);\n        }\n\n        public string FilterCommentLinks(string rawComment)\n        {\n            return _linkRegex.Replace(rawComment, new MatchEvaluator(Evaluator));\n        }\n\n\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Web/Services/CultureHelper.cs",
    "content": "﻿using cloudscribe.SimpleContent.Models;\nusing Microsoft.AspNetCore.Builder;\nusing Microsoft.Extensions.Options;\nusing System.Globalization;\n\nnamespace cloudscribe.SimpleContent.Web.Services\n{\n    public class CultureHelper\n    {\n        public CultureHelper(\n            IOptions<RequestLocalizationOptions> localizationOptionsAccessor,\n            IOptions<ContentLocalizationOptions> contentLocalizationOptionsAccessor\n            )\n        {\n            _options = localizationOptionsAccessor.Value;\n            _contentOptions = contentLocalizationOptionsAccessor.Value;\n        }\n\n        private readonly RequestLocalizationOptions _options;\n        private readonly ContentLocalizationOptions _contentOptions;\n\n        public bool IsDefaultCulture()\n        {\n            return _options.DefaultRequestCulture.UICulture.Name == CultureInfo.CurrentUICulture.Name;\n        }\n\n        public string CurrentUICultureName()\n        {\n            return CultureInfo.CurrentUICulture.Name;\n        }\n        \n        public bool UseCultureRoutesAndProjects()\n        {\n            \n            return _contentOptions.UseCultureRoutesAndProjects;\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Web/Services/DefaultAuthorNameResolver.cs",
    "content": "﻿using cloudscribe.SimpleContent.Models;\nusing System.Security.Claims;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace cloudscribe.SimpleContent.Web.Services\n{\n    public class DefaultAuthorNameResolver : IAuthorNameResolver\n    {\n        public Task<string> GetAuthorName(ClaimsPrincipal user, CancellationToken cancellationToken = default(CancellationToken))\n        {\n            var result = user.GetUserDisplayName();\n            if(string.IsNullOrEmpty(result))\n            {\n                result = user.Identity.Name;\n            }\n            return Task.FromResult(result);\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Web/Services/DefaultProjectSettingsResolver.cs",
    "content": "﻿// Copyright (c) Source Tree Solutions, LLC. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.\n// Author:                  Joe Audette\n// Created:                 2016-02-09\n// Last Modified:           2017-06-05\n// \n\nusing cloudscribe.SimpleContent.Models;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace cloudscribe.SimpleContent.Services\n{\n    public class DefaultProjectSettingsResolver : IProjectSettingsResolver\n    {\n        public DefaultProjectSettingsResolver(\n            IProjectQueries projectQueries\n            )\n        {\n            _queries = projectQueries;\n        }\n\n        private IProjectQueries _queries;\n\n        public async Task<IProjectSettings> GetCurrentProjectSettings(CancellationToken cancellationToken)\n        {\n            return await _queries.GetProjectSettings(\"default\", cancellationToken).ConfigureAwait(false);\n \n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Web/Services/DefaultTimeZoneIdResolver.cs",
    "content": "﻿using cloudscribe.DateTimeUtils;\nusing cloudscribe.SimpleContent.Models;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace cloudscribe.SimpleContent.Web.Services\n{\n    public class DefaultTimeZoneIdResolver : ITimeZoneIdResolver\n    {\n        public DefaultTimeZoneIdResolver(\n            IProjectSettingsResolver projectSettingsResolver\n            )\n        {\n            _projectSettingsResolver = projectSettingsResolver;\n        }\n\n        private IProjectSettingsResolver _projectSettingsResolver;\n\n        public async Task<string> GetUserTimeZoneId(CancellationToken cancellationToken = default(CancellationToken))\n        {\n            var project = await _projectSettingsResolver.GetCurrentProjectSettings(cancellationToken);\n            return project.TimeZoneId;\n\n        }\n\n        public async Task<string> GetSiteTimeZoneId(CancellationToken cancellationToken = default(CancellationToken))\n        {\n            var project = await _projectSettingsResolver.GetCurrentProjectSettings(cancellationToken);\n            return project.TimeZoneId;\n        }\n\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Web/Services/FileSystemMediaProcessor.cs",
    "content": "﻿// Copyright (c) Source Tree Solutions, LLC. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.\n// Author:                  Joe Audette\n// Created:                 2016-02-12\n// Last Modified:           2019-09-02\n// \n\n\nusing cloudscribe.SimpleContent.Models;\nusing Microsoft.AspNetCore.Hosting;\nusing Microsoft.Extensions.Logging;\nusing System;\nusing System.IO;\nusing System.Threading.Tasks;\n\nnamespace cloudscribe.SimpleContent.Services\n{\n    public class FileSystemMediaProcessor : IMediaProcessor\n    {\n        public FileSystemMediaProcessor(\n            ILogger<FileSystemMediaProcessor> logger,\n            IWebHostEnvironment env)\n        {\n            Hosting = env;\n            Log = logger;\n        }\n\n        protected ILogger Log;\n\n        protected IWebHostEnvironment Hosting;\n\n        public virtual Task<string> ResolveMediaUrl(string mediaVirtualPath, string fileName)\n        {\n            return Task.FromResult(mediaVirtualPath + fileName);\n        }\n  \n        \n\n        public virtual Task SaveMedia(string mediaVirtualPath, string fileName, byte[] bytes)\n        {\n            EnsureFsPath(mediaVirtualPath);\n            var newUrl = mediaVirtualPath + fileName;\n            var fsPath = Hosting.WebRootPath + newUrl.Replace('/', Path.DirectorySeparatorChar);\n\n            File.WriteAllBytes(fsPath, bytes);\n            return Task.FromResult(0);\n\n        }\n\n        protected void EnsureFolderPaths(string existingPath, string[] folderNameSegments)\n        {\n            if (string.IsNullOrEmpty(existingPath)) return;\n            if (folderNameSegments.Length == 0) return;\n            if (!Directory.Exists(existingPath)) return;\n\n            var partial = existingPath;\n            for (var i = 0; i < folderNameSegments.Length; i++)\n            {\n                partial = Path.Combine(partial, folderNameSegments[i]);\n\n                if (!Directory.Exists(partial))\n                {\n                    try\n                    {\n                        Directory.CreateDirectory(partial);\n\n                    }\n                    catch (Exception ex)\n                    {\n                        Log.LogError($\"failed to create folder {partial}\", ex);\n\n                    }\n                }\n            }\n        }\n\n        private void EnsureFsPath(string mediaVirtualPath)\n        {\n            var fsPath = Hosting.WebRootPath + mediaVirtualPath.Replace('/', Path.DirectorySeparatorChar);\n            if (Directory.Exists(fsPath)) return; //nothing to do\n\n            var segments = mediaVirtualPath.Split('/');\n\n            EnsureFolderPaths(Hosting.WebRootPath, segments);\n            \n        }\n\n\n        //private byte[] ConvertToBytes(string base64)\n        //{\n        //    int index = base64.IndexOf(\"base64,\", StringComparison.Ordinal) + 7;\n        //    return Convert.FromBase64String(base64.Substring(index));\n        //}\n\n        //public virtual Task<string> ConvertBase64EmbeddedImagesToFilesWithUrls(\n        //    string mediaVirtualPath,\n        //    string content)\n        //{\n        //    if (string.IsNullOrEmpty(content)) { return Task.FromResult(\"\"); }\n\n        //    // process base64 encoded images into the file system and replace with relative urls\n        //    foreach (Match match in Regex.Matches(content, \"(src|href)=\\\"(data:([^\\\"]+))\\\"(>.*?</a>)?\"))\n        //    {\n        //        string extension = string.Empty;\n        //        string filename = Guid.NewGuid().ToString();\n\n        //        // Image\n        //        if (match.Groups[1].Value == \"src\")\n        //        {\n        //            extension = Regex.Match(match.Value, \"data:([^/]+)/([a-z]+);base64\").Groups[2].Value;\n        //        }\n        //        // Other file type\n        //        else\n        //        {\n        //            // Entire filename\n        //            extension = Regex.Match(match.Value, \"data:([^/]+)/([a-z0-9+-.]+);base64.*\\\">(.*)</a>\").Groups[3].Value;\n        //        }\n\n        //        if (string.IsNullOrWhiteSpace(extension))\n        //            extension = \".bin\";\n        //        else\n        //            extension = \".\" + extension.Trim('.');\n\n        //        try\n        //        {\n        //            byte[] bytes = ConvertToBytes(match.Groups[2].Value);\n        //            var newUrl = mediaVirtualPath + filename + extension;\n        //            var fsPath = hosting.WebRootPath + newUrl.Replace('/', Path.DirectorySeparatorChar);\n\n        //            File.WriteAllBytes(fsPath, bytes);\n\n        //            string value = string.Format(\"src=\\\"{0}\\\" alt=\\\"\\\" \", newUrl);\n\n        //            if (match.Groups[1].Value == \"href\")\n        //                value = string.Format(\"href=\\\"{0}\\\"\", newUrl);\n\n        //            Match m = Regex.Match(match.Value, \"(src|href)=\\\"(data:([^\\\"]+))\\\"\");\n        //            content = content.Replace(m.Value, value);\n        //        }\n        //        catch (Exception ex)\n        //        {\n        //            log.LogError(\"something went wrong while trying to process media from base64 to the file system\", ex);\n        //        }\n\n        //    }\n\n        //    return Task.FromResult(content);\n        //}\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Web/Services/HttpRequestExtensions.cs",
    "content": "﻿\nusing Microsoft.AspNetCore.Http;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading.Tasks;\n\nnamespace cloudscribe.SimpleContent.Services\n{\n    public static class HttpRequestExtensions\n    {\n        public static string RawUrl(this HttpRequest request)\n        {\n            if (string.IsNullOrEmpty(request.Scheme))\n            {\n                throw new InvalidOperationException(\"Missing Scheme\");\n            }\n            if (!request.Host.HasValue)\n            {\n                throw new InvalidOperationException(\"Missing Host\");\n            }\n            string path = (request.PathBase.HasValue || request.Path.HasValue) ? (request.PathBase + request.Path).ToString() : \"/\";\n            return request.Scheme + \"://\" + request.Host + path + request.Query.ToString();\n        }\n\n        public static string AppBaseUrl(this HttpRequest request)\n        {\n            if (string.IsNullOrEmpty(request.Scheme))\n            {\n                throw new InvalidOperationException(\"Missing Scheme\");\n            }\n            if (!request.Host.HasValue)\n            {\n                throw new InvalidOperationException(\"Missing Host\");\n            }\n            //string path = (request.PathBase.HasValue || request.Path.HasValue) ? (request.PathBase + request.Path).ToString() : \"/\";\n            return request.Scheme + \"://\" + request.Host;\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Web/Services/IContentProcessor.cs",
    "content": "﻿using cloudscribe.SimpleContent.Models;\nusing Microsoft.AspNetCore.Mvc;\nusing System.Threading.Tasks;\n\nnamespace cloudscribe.SimpleContent.Web.Services\n{\n    public interface IContentProcessor\n    {\n        ImageSizeResult ExtractFirstImageDimensions(IContentItem item);\n        ImageSizeResult ExtractFirstImageDimensions(string htmlInput, string fallbackWidth = \"550px\", string fallbackHeight = \"550px\");\n        string ExtractFirstImageUrl(IContentItem item, IUrlHelper urlHelper, string fallbackImageUrl = null);\n        string FilterHtml(IContentItem p, IProjectSettings projectSettings);\n        ContentFilterResult FilterHtmlForList(IPost post, IProjectSettings settings);\n        ContentFilterResult FilterHtmlForRss(IPost post, IProjectSettings settings, string absoluteMediaBaseUrl);\n        string FilterComment(IComment comment);\n\n        string ConvertMarkdownToHtml(string markdown);\n\n        //Task<string> ConvertMediaUrlsToRelative(string mediaVirtualPath, string absoluteBaseMediaUrl, string htmlInput);\n        Task<string> ConvertMediaUrlsToRelative(string absoluteBaseMediaUrl, string htmlInput);\n        string ConvertUrlsToAbsolute(string absoluteBaseMediaUrl, string htmlInput);\n        string RemoveImageStyleAttribute(string htmlInput);\n    }\n}"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Web/Services/JsonModelSerializer.cs",
    "content": "﻿using cloudscribe.SimpleContent.Models;\nusing Newtonsoft.Json;\nusing System;\nusing System.Collections.Generic;\nusing System.Text;\n\nnamespace cloudscribe.SimpleContent.Web.Services\n{\n    public class JsonModelSerializer : IModelSerializer\n    {\n        public JsonModelSerializer()\n        {\n\n        }\n\n        public string Name { get; } = \"Json\";\n\n        public string Serialize(string typeName, object obj)\n        {\n            //var type = Type.GetType(typeName);\n\n            return JsonConvert.SerializeObject(\n                obj,\n                Formatting.None,\n                new JsonSerializerSettings\n                {\n                    DefaultValueHandling = DefaultValueHandling.Include\n                    //, DateTimeZoneHandling = DateTimeZoneHandling.Utc  \n                }\n                );\n        }\n\n        public object Deserialize(string typeName, string serializedObject)\n        {\n            var type = Type.GetType(typeName);\n            if (string.IsNullOrWhiteSpace(serializedObject)) throw new ArgumentException(\"must pass in a string\");\n            var settings = new JsonSerializerSettings\n            {\n                DefaultValueHandling = DefaultValueHandling.Include\n                //,DateTimeZoneHandling = DateTimeZoneHandling.Utc\n            };\n            return JsonConvert.DeserializeObject(serializedObject, type, settings);\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Web/Services/MarkdownProcessor.cs",
    "content": "﻿using System.Linq;\nusing System.Text.RegularExpressions;\nusing Markdig;\nusing Markdig.Syntax;\nusing Markdig.Syntax.Inlines;\nusing cloudscribe.SimpleContent.Models;\nusing System;\n\nnamespace cloudscribe.SimpleContent.Web.Services\n{\n    public class MarkdownProcessor : IMarkdownProcessor\n    {\n        private MarkdownPipeline _mdPipeline = null;\n        public string ExtractFirstImageUrl(string markdown)\n        {\n            if (_mdPipeline == null)\n            {\n                _mdPipeline = new MarkdownPipelineBuilder().UseAdvancedExtensions().Build();\n            }\n\n            if (!String.IsNullOrWhiteSpace(markdown))\n            {\n                var doc = Markdown.Parse(markdown, _mdPipeline);\n                var img = doc.Descendants<ParagraphBlock>()\n                    .SelectMany(x => x.Inline.Descendants<LinkInline>())\n                    .FirstOrDefault(l => l.IsImage);\n                if (img != null)\n                {\n                    return img.Url;\n                }\n            }\n\n            return string.Empty;\n        }\n\n\n        //private const string imgRegex = @\"!\\[.*?\\]\\((.*?)\\)\";\n        \n        //public string ExtractFirstImageUrl(string markdown)\n        //{\n        //    var matches = new Regex(imgRegex)\n        //        .Matches(markdown)\n        //        .Cast<Match>()\n        //        .Select(m => ExtractUrl(m.Value)) \n        //        .ToList();\n\n        //    return matches.FirstOrDefault();\n        //}\n\n        \n        //private string ExtractUrl(string input)\n        //{\n        //    if (string.IsNullOrEmpty(input)) return input;\n        //    // example input coming from the regex above\n        //    // I just want the url:\n        //    //![my pond](/media/images/img_1349-ws.jpg)\n        //    var indexOpen = input.IndexOf(\"(\");\n        //    var indexClose = input.IndexOf(\")\");\n        //    if(indexOpen > -1 && indexClose > -1 && indexClose > indexOpen)\n        //    {\n        //        return input.Substring(indexOpen + 1, indexClose - indexOpen -1);\n        //    }\n            \n        //    return input;\n        //}\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Web/Services/Page/CreateOrUpdatePageHandler.cs",
    "content": "﻿// Copyright (c) Source Tree Solutions, LLC. All rights reserved.\n// Author:                  Joe Audette\n// Created:                 2018-06-27\n// Last Modified:           2019-04-07\n// \n\nusing cloudscribe.DateTimeUtils;\nusing cloudscribe.SimpleContent.Models;\nusing cloudscribe.SimpleContent.Models.Versioning;\nusing cloudscribe.Web.Navigation.Caching;\nusing MediatR;\nusing Microsoft.Extensions.Localization;\nusing Microsoft.Extensions.Logging;\nusing System;\nusing System.Collections.Generic;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace cloudscribe.SimpleContent.Web.Services\n{\n    public class CreateOrUpdatePageHandler : IRequestHandler<CreateOrUpdatePageRequest, CommandResult<IPage>>\n    {\n        public CreateOrUpdatePageHandler(\n            IProjectService projectService,\n            IPageService pageService,\n            ITreeCache treeCache,\n            ITimeZoneHelper timeZoneHelper,\n            ITimeZoneIdResolver timeZoneIdResolver,\n            IContentHistoryCommands historyCommands,\n            IStringLocalizer<cloudscribe.SimpleContent.Web.SimpleContent> localizer,\n            ILogger<CreateOrUpdatePageHandler> logger\n            )\n        {\n            _projectService = projectService;\n            _navigationCache = treeCache;\n            _pageService = pageService;\n            _historyCommands = historyCommands;\n            _timeZoneHelper = timeZoneHelper;\n            _timeZoneIdResolver = timeZoneIdResolver;\n            _localizer = localizer;\n            _log = logger;\n        }\n\n        private readonly IProjectService _projectService;\n        private readonly IPageService _pageService;\n        private readonly IContentHistoryCommands _historyCommands;\n        private readonly IStringLocalizer _localizer;\n        private readonly ITimeZoneHelper _timeZoneHelper;\n        private readonly ITimeZoneIdResolver _timeZoneIdResolver;\n        private readonly ITreeCache _navigationCache;\n        private readonly ILogger _log;\n\n        public async Task<CommandResult<IPage>> Handle(CreateOrUpdatePageRequest request, CancellationToken cancellationToken = default(CancellationToken))\n        {\n            var errors = new List<string>();\n            \n            try\n            {\n                bool isNew = false;\n                var project = await _projectService.GetCurrentProjectSettings();\n                var page = request.Page;\n                ContentHistory history = null;\n                if(page == null)\n                {\n                    isNew = true;\n                    page = new Page()\n                    {\n                        ProjectId = request.ProjectId,\n                        ParentId = \"0\",\n                        CreatedByUser = request.UserName,\n                        ContentType = request.ViewModel.ContentType\n                    };\n                }\n                else\n                {\n                    history = page.CreateHistory(request.UserName);\n                }\n\n                \n                if (!string.IsNullOrEmpty(request.ViewModel.Slug))\n                {\n                    // remove any bad characters\n                    var slug = ContentUtils.CreateSlug(request.ViewModel.Slug);\n                    if (slug != page.Slug)\n                    {\n                        var slugIsAvailable = await _pageService.SlugIsAvailable(slug);\n                        while (!slugIsAvailable)\n                        {\n                            slug += \"-\";\n                            slugIsAvailable = await _pageService.SlugIsAvailable(slug);\n                        }\n                        if(slugIsAvailable)\n                        {\n                            page.Slug = slug;\n                        }\n                    }\n                }\n\n                if (request.ModelState.IsValid)\n                {\n                    page.Title = request.ViewModel.Title;\n                    page.CorrelationKey = request.ViewModel.CorrelationKey;\n                    page.LastModified = DateTime.UtcNow;\n                    page.LastModifiedByUser = request.UserName;\n                    page.MenuFilters = request.ViewModel.MenuFilters;\n                    page.MetaDescription = request.ViewModel.MetaDescription;\n                    page.PageOrder = request.ViewModel.PageOrder;\n\n                    page.ShowHeading = request.ViewModel.ShowHeading;\n                    page.ShowMenu = request.ViewModel.ShowMenu;\n                    page.MenuOnly = request.ViewModel.MenuOnly;\n                    page.DisableEditor = request.ViewModel.DisableEditor;\n                    page.ShowComments = request.ViewModel.ShowComments;\n                    page.MenuFilters = request.ViewModel.MenuFilters;\n                    page.ExternalUrl = request.ViewModel.ExternalUrl;\n                    page.ViewRoles = request.ViewModel.ViewRoles;\n\n                    page.ShowCreatedBy = request.ViewModel.ShowCreatedBy;\n                    page.ShowCreatedDate = request.ViewModel.ShowCreatedDate;\n                    page.ShowLastModifiedBy = request.ViewModel.ShowLastModifiedBy;\n                    page.ShowLastModifiedDate = request.ViewModel.ShowLastModifiedDate;\n\n                    if (!string.IsNullOrEmpty(request.ViewModel.ParentSlug))\n                    {\n                        var parentPage = await _pageService.GetPageBySlug(request.ViewModel.ParentSlug);\n                        if (parentPage != null)\n                        {\n                            if (parentPage.Id != page.ParentId)\n                            {\n                                page.ParentId = parentPage.Id;\n                                page.ParentSlug = parentPage.Slug;\n                            }\n                        }\n                    }\n                    else\n                    {\n                        // empty means root level\n                        page.ParentSlug = string.Empty;\n                        page.ParentId = \"0\";\n                    }\n\n                    if (page.ParentSlug == project.DefaultPageSlug)\n                    {\n                        _log.LogWarning($\"{request.UserName} tried to explicitely set the default page slug as the parent slug which is not allowed since all root pages are already children of the default page\");\n                        page.ParentSlug = string.Empty;\n                        page.ParentId = \"0\";\n                    }\n\n                    var tzId = await _timeZoneIdResolver.GetUserTimeZoneId(CancellationToken.None);\n                    var shouldFirePublishEvent = false;\n                    \n                    var saveMode = request.ViewModel.SaveMode;\n                    if (saveMode == SaveMode.PublishLater)\n                    {\n                        if(request.ViewModel.NewPubDate.HasValue)\n                        {\n                            var newPubDate = _timeZoneHelper.ConvertToUtc(request.ViewModel.NewPubDate.Value, tzId);\n                            if(newPubDate < DateTime.UtcNow)\n                            {\n                                saveMode = SaveMode.PublishNow;\n                                page.PubDate = newPubDate;\n                            } \n                        }\n                    }\n\n                    switch (saveMode)\n                    {\n                        //case SaveMode.UnPublish:\n                            \n                        //    page.DraftContent = request.ViewModel.Content;\n                        //    page.DraftAuthor = request.ViewModel.Author;\n                        //    page.DraftPubDate = null;\n                        //    page.IsPublished = false;\n                        //    page.PubDate = null;\n\n                        //    shouldFireUnPublishEvent = true;\n\n                        //    break;\n\n                        case SaveMode.SaveDraft:\n                            \n                            page.DraftContent = request.ViewModel.Content;\n                            page.DraftAuthor = request.ViewModel.Author;\n                            // should we clear the draft pub date if save draft clicked?\n                            //page.DraftPubDate = null;\n                            if(!page.PubDate.HasValue) { page.IsPublished = false; }\n\n                            break;\n\n                        case SaveMode.PublishLater:\n\n                            page.DraftContent = request.ViewModel.Content;\n                            page.DraftAuthor = request.ViewModel.Author;\n                            if (request.ViewModel.NewPubDate.HasValue)\n                            {\n                                \n                                page.DraftPubDate = _timeZoneHelper.ConvertToUtc(request.ViewModel.NewPubDate.Value, tzId); \n                            }\n                            if (!page.PubDate.HasValue) { page.IsPublished = false; }\n\n                            break;\n\n                        case SaveMode.PublishNow:\n\n                            page.Content = request.ViewModel.Content;\n                            page.Author = request.ViewModel.Author;\n                            if(!page.PubDate.HasValue)\n                            {\n                                page.PubDate = DateTime.UtcNow;\n                            }\n                            page.IsPublished = true;\n                            shouldFirePublishEvent = true;\n\n                            page.DraftAuthor = null;\n                            page.DraftContent = null;\n                            page.DraftPubDate = null;\n\n                            break;\n\n                        case SaveMode.DeleteCurrentDraft:\n\n                            shouldFirePublishEvent = false;\n\n                            page.DraftAuthor = null;\n                            page.DraftContent = null;\n                            page.DraftPubDate = null;\n                            page.DraftSerializedModel = null;\n\n                            break;\n                    }\n\n                    if(history != null)\n                    {\n                        await _historyCommands.Create(request.ProjectId, history).ConfigureAwait(false);\n                    }\n\n                    if(isNew)\n                    {\n                        await _pageService.Create(page);\n                    }\n                    else\n                    {\n                        await _pageService.Update(page);\n                    }\n\n                    if(shouldFirePublishEvent)\n                    {\n                        await _pageService.FirePublishEvent(page).ConfigureAwait(false);\n                        await _historyCommands.DeleteDraftHistory(project.Id, page.Id).ConfigureAwait(false);\n                    }\n\n                    //if (shouldFireUnPublishEvent)\n                    //{\n                    //    await _pageService.FireUnPublishEvent(page).ConfigureAwait(false);\n                    //}\n\n                    await _navigationCache.ClearTreeCache();\n\n                }\n\n                return new CommandResult<IPage>(page, request.ModelState.IsValid, errors);\n\n            }\n            catch (Exception ex)\n            {\n                _log.LogError($\"{ex.Message}:{ex.StackTrace}\");\n\n                errors.Add(_localizer[\"Updating a page failed. An error has been logged.\"]);\n\n                return new CommandResult<IPage>(null, false, errors);\n            }\n\n        }\n\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Web/Services/Page/CreateOrUpdatePageRequest.cs",
    "content": "﻿using cloudscribe.SimpleContent.Models;\nusing cloudscribe.SimpleContent.Web.ViewModels;\nusing MediatR;\nusing Microsoft.AspNetCore.Mvc.ModelBinding;\n\nnamespace cloudscribe.SimpleContent.Web.Services\n{\n    public class CreateOrUpdatePageRequest : IRequest<CommandResult<IPage>>\n    {\n        public CreateOrUpdatePageRequest(\n            string projectId,\n            string userName,\n            PageEditViewModel viewModel,\n            IPage page,\n            ModelStateDictionary modelState\n            )\n        {\n            ProjectId = projectId;\n            UserName = userName;\n            ViewModel = viewModel;\n            Page = page;\n            ModelState = modelState;\n        }\n\n        public string ProjectId { get; private set; }\n        public string UserName { get; private set; }\n\n        public PageEditViewModel ViewModel { get; private set; }\n      \n        public IPage Page { get; private set; }\n\n        public ModelStateDictionary ModelState { get; private set; }\n\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Web/Services/Page/DraftPublishService.cs",
    "content": "﻿using cloudscribe.SimpleContent.Models;\nusing cloudscribe.SimpleContent.Services;\nusing cloudscribe.Web.Navigation.Caching;\nusing Microsoft.Extensions.Logging;\nusing System;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace cloudscribe.SimpleContent.Web.Services\n{\n    public class DraftPublishService\n    {\n        public DraftPublishService(\n            IProjectService projectService,\n            IPageQueries pageQueries,\n            IPageCommands pageCommands,\n            PageEvents eventHandlers,\n            IContentHistoryCommands historyCommands,\n            ITreeCache treeCache,\n            ILogger<DraftPublishService> logger\n            )\n        {\n\n            _projectService = projectService;\n            _pageQueries = pageQueries;\n            _pageCommands = pageCommands;\n            _eventHandlers = eventHandlers;\n            _historyCommands = historyCommands;\n            _navigationCache = treeCache;\n            _log = logger;\n\n        }\n\n        private readonly IPageQueries _pageQueries;\n        private readonly IPageCommands _pageCommands;\n        private readonly IProjectService _projectService;\n        private readonly PageEvents _eventHandlers;\n        private readonly IContentHistoryCommands _historyCommands;\n        private readonly ITreeCache _navigationCache;\n        private readonly ILogger _log;\n\n        public async Task PublishReadyDrafts(CancellationToken cancellationToken = default(CancellationToken))\n        {\n            var settings = await _projectService.GetCurrentProjectSettings().ConfigureAwait(false);\n\n            try\n            {\n                var drafts = await _pageQueries.GetPagesReadyForPublish(settings.Id, cancellationToken);\n                foreach (var page in drafts)\n                {\n                    page.Content = page.DraftContent;\n                    page.Author = page.DraftAuthor;\n                    page.PubDate = page.DraftPubDate.Value;\n                    page.SerializedModel = page.DraftSerializedModel;\n                    page.IsPublished = true;\n\n                    page.DraftAuthor = null;\n                    page.DraftContent = null;\n                    page.DraftSerializedModel = null;\n                    page.DraftPubDate = null;\n\n                    await Update(page, settings);\n\n                    await _eventHandlers.HandlePublished(page.ProjectId, page).ConfigureAwait(false);\n                    await _historyCommands.DeleteDraftHistory(page.ProjectId, page.Id).ConfigureAwait(false);\n\n                    await _navigationCache.ClearTreeCache();\n\n                    _log.LogDebug($\"auto published draft for page {page.Title}\");\n                }\n            }\n            catch (OperationCanceledException)\n            {\n                _log.LogDebug(\"PublishReadyDrafts for page cancelled\");\n            }\n            catch (Exception ex)\n            {\n                _log.LogError(ex, \"PublishReadyDrafts for page threw exception\");\n            }\n        }\n\n        private async Task Update(IPage page, IProjectSettings settings)\n        {\n            \n            await _eventHandlers.HandlePreUpdate(settings.Id, page.Id).ConfigureAwait(false);\n            await _pageCommands.Update(settings.Id, page).ConfigureAwait(false);\n            await _eventHandlers.HandleUpdated(settings.Id, page).ConfigureAwait(false);\n        }\n\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Web/Services/Page/InitTemplatedPageHandler.cs",
    "content": "﻿// Copyright (c) Source Tree Solutions, LLC. All rights reserved.\n// Author:                  Joe Audette\n// Created:                 2018-06-21\n// Last Modified:           2019-02-17\n// \n\nusing cloudscribe.SimpleContent.Models;\nusing cloudscribe.Web.Common.Razor;\nusing cloudscribe.Web.Navigation.Caching;\nusing MediatR;\nusing Microsoft.Extensions.Localization;\nusing Microsoft.Extensions.Logging;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace cloudscribe.SimpleContent.Web.Services\n{\n    public class InitTemplatedPageHandler : IRequestHandler<InitTemplatedPageRequest, CommandResult<IPage>>\n    {\n        public InitTemplatedPageHandler(\n            IPageService pageService,\n            ITreeCache treeCache,\n            IEnumerable<IModelSerializer> serializers,\n            ViewRenderer viewRenderer,\n            IStringLocalizer<cloudscribe.SimpleContent.Web.SimpleContent> localizer,\n            ILogger<InitTemplatedPageHandler> logger\n            )\n        {\n            _pageService = pageService;\n            _navigationCache = treeCache;\n            _serializers = serializers;\n            _viewRenderer = viewRenderer;\n            _localizer = localizer;\n            _log = logger;\n        }\n\n        private readonly IPageService _pageService;\n        private readonly IEnumerable<IModelSerializer> _serializers;\n        private readonly ViewRenderer _viewRenderer;\n        private readonly IStringLocalizer _localizer;\n        private readonly ITreeCache _navigationCache;\n        private readonly ILogger _log;\n\n        private IModelSerializer GetSerializer(string name)\n        {\n            foreach(var s in _serializers)\n            {\n                if (s.Name == name) return s;\n            }\n\n            return _serializers.FirstOrDefault();\n        }\n\n        public async Task<CommandResult<IPage>> Handle(InitTemplatedPageRequest request, CancellationToken cancellationToken = default(CancellationToken))\n        {\n            // initialize an unpublished page based on the template\n\n            var errors = new List<string>();\n            try\n            {\n                var serializer = GetSerializer(request.Template.SerializerName);\n                var type = Type.GetType(request.Template.ModelType);\n                var model = Activator.CreateInstance(type);\n                \n                var page = new Page\n                {\n                    ProjectId = request.ProjectId,\n                    CreatedByUser = request.CreatedByUserName,\n                    DraftAuthor = request.Author,\n                    LastModifiedByUser = request.CreatedByUserName,\n                    TemplateKey = request.Template.Key,\n                    Title = request.ViewModel.Title,\n                    Serializer = serializer.Name,\n                    DraftSerializedModel = serializer.Serialize(request.Template.ModelType, model),\n                    ParentSlug = request.ViewModel.ParentSlug,\n                    PageOrder = request.ViewModel.PageOrder,\n                    Content = await _viewRenderer.RenderViewAsString(request.Template.RenderView, model).ConfigureAwait(false),\n                    IsPublished = false\n                };\n                \n                if (!string.IsNullOrEmpty(request.ViewModel.ParentSlug))\n                {\n                    var parentPage = await _pageService.GetPageBySlug(request.ViewModel.ParentSlug);\n                    if (parentPage != null)\n                    {\n                        if (parentPage.Id != page.ParentId)\n                        {\n                            page.ParentId = parentPage.Id;\n                            page.ParentSlug = parentPage.Slug;\n                            \n                        }\n                    }\n                }\n                else\n                {\n                    // empty means root level\n                    page.ParentSlug = string.Empty;\n                    page.ParentId = \"0\";\n                }\n                \n                await _pageService.Create(page);\n                await _navigationCache.ClearTreeCache();\n\n                var result = new CommandResult<IPage>(page, true, errors);\n\n                return result;\n            }\n            catch(Exception ex)\n            {\n                _log.LogError($\"{ex.Message}:{ex.StackTrace}\");\n\n                errors.Add(_localizer[\"Initializing a new page from a content template failed. An error has been logged.\"]);\n                \n                return new CommandResult<IPage>(null, false, errors);\n            }\n            \n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Web/Services/Page/InitTemplatedPageRequest.cs",
    "content": "﻿using cloudscribe.SimpleContent.Models;\nusing cloudscribe.SimpleContent.Web.ViewModels;\nusing MediatR;\n\nnamespace cloudscribe.SimpleContent.Web.Services\n{\n    public class InitTemplatedPageRequest : IRequest<CommandResult<IPage>>\n    {\n        public InitTemplatedPageRequest(\n            string projectId,\n            string createdByUserName,\n            string author,\n            NewContentViewModel model, \n            ContentTemplate template\n            )\n        {\n            ProjectId = projectId;\n            CreatedByUserName = createdByUserName;\n            Author = author;\n            ViewModel = model;\n            Template = template;\n        }\n\n        public string ProjectId { get; private set; }\n        public string CreatedByUserName { get; private set; }\n\n        public string Author { get; private set; }\n\n        public NewContentViewModel ViewModel { get; private set; }\n        public ContentTemplate Template { get; private set; }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Web/Services/Page/JsSecuritySanitizer.cs",
    "content": "﻿\n//This product includes software developed by Sebastien Ros and contributors (https://github.com/sebastienros/esprima-dotnet).\n\n//Esprima.NET is licensed under the BSD 2-Clause License:\n\n//Copyright(c) 2014, Sebastien Ros\n//All rights reserved.\n\n//Redistribution and use in source and binary forms, with or without\n//modification, are permitted provided that the following conditions are met:\n\n//1.Redistributions of source code must retain the above copyright notice,\n//   this list of conditions and the following disclaimer.\n\n//2. Redistributions in binary form must reproduce the above copyright\n//   notice, this list of conditions and the following disclaimer in the\n//   documentation and/or other materials provided with the distribution.\n\n//THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n//AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n//IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n//ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE\n//LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n//CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\n//SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\n//INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\n//CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n//ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n//POSSIBILITY OF SUCH DAMAGE.\n\n\nusing Esprima;\nusing Esprima.Ast;\nusing System.Collections.Generic;\n\nnamespace cloudscribe.SimpleContent.Web.Services\n{\n    public class JsSecuritySanitizer \n    {\n        private static readonly HashSet<string> DangerousCalls = new()\n        {\n            \"eval\",                // Executes arbitrary strings as code\n            \"Function\",            // Creates functions from strings (like eval)\n            \"setTimeout\",          // Often used with string eval\n            \"setInterval\",         // Same\n            \"execScript\",          // IE-specific eval alternative\n            // \"alert\",               // Common in test payloads (may remove if just for dev)\n            \"confirm\",             // Can be used to trick users\n            \"prompt\",              // Same\n            \"fetch\",               // Sends data out\n            \"XMLHttpRequest\",      // Same\n            \"open\",                // Opens new windows/tabs\n            \"showModalDialog\",     // Obsolete, but sometimes used for phishing\n            \"postMessage\",         // Can be abused for cross-origin data leaks\n            \"webkitRequestFullscreen\", // Abused for phishing\n            \"requestFullscreen\",   // Tricking users\n            \"requestPointerLock\",  // Locking pointer as part of scams\n        };\n\n        private static readonly HashSet<string> DangerousProperties = new()\n        {\n            \"document.cookie\",        // Accesses user's cookies\n            \"window.location\",        // Can redirect user or steal location\n            \"location.href\",          // Commonly set to redirect\n            \"document.location\",      // Same\n            \"window.name\",            // Used to pass data between domains\n            \"localStorage\",           // Persistent local storage (including .setItem, .getItem, etc.)\n            \"sessionStorage\",         // Session-scoped storage (including .setItem, .getItem, etc.)\n            \"indexedDB\",              // DB access\n            \"navigator.geolocation\",  // Gets user location\n            \"navigator.clipboard\",    // Read/write clipboard\n            \"navigator.sendBeacon\",   // Sends data after page unload\n            \"navigator.mediaDevices\", // Webcam/mic access\n            \"window.parent\",          // Cross-frame manipulation\n            \"window.top\",             // Can break out of iframes\n            \"window.opener\",          // Can hijack the opener page\n            \"window.history\",         // Modify browser history\n        };\n\n        public bool IsSafe(string script, out List<string> issues)\n        {\n            issues = new List<string>();\n\n            try\n            {\n                var parser = new JavaScriptParser();\n                var program = parser.ParseScript(script);\n\n                TraverseNode(program, issues);\n                return issues.Count == 0;\n            }\n            catch (ParserException ex)\n            {\n                issues.Add($\"Parsing error: {ex.Message}\");\n                return false;\n            }\n        }\n\n        private void TraverseNode(Node node, List<string> issues)\n        {\n            if (node == null) return;\n\n            // Check for dangerous function calls\n            if (node is CallExpression callExpr)\n            {\n                if (callExpr.Callee is Identifier ident &&\n                    DangerousCalls.Contains(ident.Name))\n                {\n                    issues.Add($\"Call to disallowed function: {ident.Name}\");\n                }\n                \n                // Check for method calls on dangerous objects (e.g., localStorage.setItem)\n                if (callExpr.Callee is MemberExpression memberCall &&\n                    memberCall.Object is Identifier objIdent)\n                {\n                    // Check if it's a dangerous object being called\n                    if (DangerousProperties.Contains(objIdent.Name))\n                    {\n                        issues.Add($\"Method call on disallowed object: {objIdent.Name}\");\n                    }\n                }\n            }\n\n            // Check for dangerous constructor calls (new XMLHttpRequest(), new Function(), etc.)\n            if (node is NewExpression newExpr)\n            {\n                if (newExpr.Callee is Identifier ident &&\n                    DangerousCalls.Contains(ident.Name))\n                {\n                    issues.Add($\"Use of disallowed constructor: new {ident.Name}()\");\n                }\n            }\n\n            // Check for dangerous property access like window.location or document.cookie\n            if (node is MemberExpression memberExpr &&\n                memberExpr.Object is Identifier obj &&\n                memberExpr.Property is Identifier prop)\n            {\n                string fullAccess = $\"{obj.Name}.{prop.Name}\";\n                if (DangerousProperties.Contains(fullAccess))\n                {\n                    issues.Add($\"Access to disallowed property: {fullAccess}\");\n                }\n            }\n\n            // Recursively walk all child nodes\n            foreach (var child in node.ChildNodes)\n            {\n                TraverseNode(child, issues);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Web/Services/Page/PageEditContext.cs",
    "content": "﻿using cloudscribe.SimpleContent.Models;\n\nnamespace cloudscribe.SimpleContent.Web.Services\n{\n    public class PageEditContext\n    {\n        public PageEditContext(\n            IProjectSettings projectSettings,\n            IPage currentPage,\n            ContentHistory contentHistory,\n            bool canEdit,\n            bool didReplaceDraft,\n            bool didRestoreDeleted,\n            int rootPageCount = -1\n            )\n        {\n            Project = projectSettings;\n            CurrentPage = currentPage;\n            History = contentHistory;\n            CanEdit = canEdit;\n            DidReplaceDraft = didReplaceDraft;\n            DidRestoreDeleted = didRestoreDeleted;\n            RootPageCount = rootPageCount;\n        }\n\n        public IProjectSettings Project { get; private set; } = null;\n        public IPage CurrentPage { get; private set; } = null;\n        public bool CanEdit { get; private set; }\n        public ContentHistory History { get; private set; } = null;\n        public bool DidReplaceDraft { get; private set; }\n        public bool DidRestoreDeleted { get; private set; }\n        public int RootPageCount { get; private set; } = -1;\n        public bool IsValidRequest\n        {\n            get\n            {\n                return CanEdit && Project != null;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Web/Services/Page/PageEditContextRequest.cs",
    "content": "﻿using MediatR;\nusing System;\nusing System.Security.Claims;\n\nnamespace cloudscribe.SimpleContent.Web.Services\n{\n    public class PageEditContextRequest : IRequest<PageEditContext>\n    {\n        public PageEditContextRequest(\n            ClaimsPrincipal user,\n            string slug,\n            string pageId,\n            string script,\n            Guid? historyId\n            )\n        {\n            User = user;\n            Slug = slug;\n            PageId = pageId;\n            HistoryId = historyId;\n            Script = script;\n        }\n\n        public ClaimsPrincipal User { get; private set; }\n        public string Slug { get; private set; }\n        public string Script { get; private set; }\n        public string PageId { get; private set; }\n        public Guid? HistoryId { get; private set; }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Web/Services/Page/PageEditContextRequestHandler.cs",
    "content": "﻿// Copyright (c) Source Tree Solutions, LLC. All rights reserved.\n// Author:                  Joe Audette\n// Created:                 2018-07-24\n// Last Modified:           2018-07-24\n// \n\nusing cloudscribe.SimpleContent.Models;\nusing MediatR;\nusing Microsoft.AspNetCore.Authorization;\nusing System;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace cloudscribe.SimpleContent.Web.Services\n{\n    public class PageEditContextRequestHandler : IRequestHandler<PageEditContextRequest, PageEditContext>\n    {\n        public PageEditContextRequestHandler(\n            IProjectService projectService,\n            IPageService pageService,\n            IAuthorizationService authorizationService,\n            IContentHistoryQueries historyQueries\n            )\n        {\n            _projectService = projectService;\n            _pageService = pageService;\n            _authorizationService = authorizationService;\n            _historyQueries = historyQueries;\n        }\n\n        private readonly IProjectService _projectService;\n        private readonly IPageService _pageService;\n        private readonly IAuthorizationService _authorizationService;\n        private readonly IContentHistoryQueries _historyQueries;\n\n        public async Task<PageEditContext> Handle(PageEditContextRequest request, CancellationToken cancellationToken = default(CancellationToken))\n        {\n            IPage page = null;\n            ContentHistory history = null;\n            var canEdit = false;\n            var didReplaceDraft = false;\n            var didRestoreDeleted = false;\n            var rootPageCount = -1;\n            IProjectSettings project = await _projectService.GetCurrentProjectSettings();\n            if(project != null)\n            {\n                canEdit = await request.User.CanEditPages(project.Id, _authorizationService);\n                var slug = request.Slug;\n                if (slug == \"none\") { slug = string.Empty; }\n\n                if (!string.IsNullOrEmpty(slug))\n                {\n                    page = await _pageService.GetPageBySlug(slug, cancellationToken);\n                }\n                else if(!string.IsNullOrWhiteSpace(request.PageId))\n                {\n                    page = await _pageService.GetPage(request.PageId, cancellationToken);\n                }\n\n                if (request.HistoryId.HasValue)\n                {\n                    history = await _historyQueries.Fetch(project.Id, request.HistoryId.Value).ConfigureAwait(false);\n                    if (history != null)\n                    {\n                        //if (!string.IsNullOrWhiteSpace(history.TemplateKey))\n                        //{\n                        //    return RedirectToRoute(PageRoutes.PageEditWithTemplateRouteName, routeVals);\n                        //}\n\n                        if (page == null) // page was deleted, restore it from history\n                        {\n                            page = new Page();\n                            history.CopyTo(page);\n                            if (history.IsDraftHx)\n                            {\n                                page.PromoteDraftTemporarilyForRender();\n                            }\n                            didRestoreDeleted = true;\n                        }\n                        else\n                        {\n                            didReplaceDraft = page.HasDraftVersion();\n                            var pageCopy = new Page();\n                            page.CopyTo(pageCopy);\n                            if (history.IsDraftHx)\n                            {\n                                pageCopy.DraftAuthor = history.DraftAuthor;\n                                pageCopy.DraftContent = history.DraftContent;\n                                pageCopy.DraftSerializedModel = history.DraftSerializedModel;\n                            }\n                            else\n                            {\n                                pageCopy.DraftAuthor = history.Author;\n                                pageCopy.DraftContent = history.Content;\n                                pageCopy.DraftSerializedModel = history.SerializedModel;\n                            }\n                            page = pageCopy;\n                        }\n\n                        //model.HistoryArchiveDate = history.ArchivedUtc;\n                        //model.HistoryId = history.Id;\n                        //model.DidReplaceDraft = didReplaceDraft;\n                        //model.DidRestoreDeleted = didRestoreDeleted;\n                    }\n                }\n\n                if(page == null)\n                {\n                    var rootList = await _pageService.GetRootPages(cancellationToken).ConfigureAwait(false);\n                    rootPageCount = rootList.Count;\n                }\n            }\n\n            return new PageEditContext(\n                project,\n                page,\n                history,\n                canEdit,\n                didReplaceDraft,\n                didRestoreDeleted,\n                rootPageCount\n                );\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Web/Services/Page/PageEvents.cs",
    "content": "﻿// Copyright (c) Source Tree Solutions, LLC. All rights reserved.\n// Licensed under the Apache License, Version 2.0. \n// Author:                  Joe Audette\n// Created:                 2016-11-25\n// Last Modified:           2018-06-28\n// \n\nusing System.Collections.Generic;\nusing System.Threading;\nusing System.Threading.Tasks;\nusing Microsoft.Extensions.Logging;\nusing cloudscribe.SimpleContent.Models.EventHandlers;\nusing System;\nusing cloudscribe.SimpleContent.Models;\n\nnamespace cloudscribe.SimpleContent.Services\n{\n    public class PageEvents\n    {\n        public PageEvents(\n            IEnumerable<IHandlePagePreUpdate> preUpdateHandlers,\n            IEnumerable<IHandlePagePreDelete> preDeleteHandlers,\n            IEnumerable<IHandlePageCreated> createdHandlers,\n            IEnumerable<IHandlePageUpdated> updateHandlers,\n            IEnumerable<IHandlePagePublished> publishHandlers,\n            IEnumerable<IHandlePageUnPublished> unPublishHandlers,\n            IEnumerable<IHandlePageMoved> movedHandlers,\n            ILogger<PageEvents> logger\n            )\n        {\n            _preUpdateHandlers = preUpdateHandlers;\n            _preDeleteHandlers = preDeleteHandlers;\n            _createdHandlers = createdHandlers;\n            _updateHandlers = updateHandlers;\n            _publishHandlers = publishHandlers;\n            _unPublishHandlers = unPublishHandlers;\n            _movedHandlers = movedHandlers;\n            _log = logger;\n        }\n\n        private readonly IEnumerable<IHandlePagePreUpdate> _preUpdateHandlers;\n        private readonly IEnumerable<IHandlePagePreDelete> _preDeleteHandlers;\n        private readonly IEnumerable<IHandlePageCreated> _createdHandlers;\n        private readonly IEnumerable<IHandlePageUpdated> _updateHandlers;\n        private readonly IEnumerable<IHandlePagePublished> _publishHandlers;\n        private readonly IEnumerable<IHandlePageUnPublished> _unPublishHandlers;\n        private readonly IEnumerable<IHandlePageMoved> _movedHandlers;\n        private readonly ILogger _log;\n\n        public async Task HandlePreUpdate(\n            string projectId,\n            string pageId,\n            CancellationToken cancellationToken = default(CancellationToken)\n            )\n        {\n            foreach(var handler in _preUpdateHandlers)\n            {\n                try\n                {\n                    await handler.Handle(projectId, pageId, cancellationToken).ConfigureAwait(false);\n                }\n                catch(Exception ex)\n                {\n                    _log.LogError($\"{ex.Message} : {ex.StackTrace}\");\n                }\n                \n            }\n        }\n\n        public async Task HandlePreDelete(\n            string projectId,\n            string pageId,\n            CancellationToken cancellationToken = default(CancellationToken)\n            )\n        {\n            foreach (var handler in _preDeleteHandlers)\n            {\n                try\n                {\n                    await handler.Handle(projectId, pageId, cancellationToken).ConfigureAwait(false);\n                }\n                catch (Exception ex)\n                {\n                    _log.LogError($\"{ex.Message} : {ex.StackTrace}\");\n                }\n                \n            }\n        }\n\n        public async Task HandleCreated(\n            string projectId,\n            IPage page,\n            CancellationToken cancellationToken = default(CancellationToken)\n            )\n        {\n            foreach (var handler in _createdHandlers)\n            {\n                try\n                {\n                    await handler.Handle(projectId, page, cancellationToken).ConfigureAwait(false);\n                }\n                catch (Exception ex)\n                {\n                    _log.LogError($\"{ex.Message} : {ex.StackTrace}\");\n                }\n                \n            }\n        }\n\n        public async Task HandleUpdated(\n            string projectId,\n            IPage page,\n            CancellationToken cancellationToken = default(CancellationToken)\n            )\n        {\n            foreach (var handler in _updateHandlers)\n            {\n                try\n                {\n                    await handler.Handle(projectId, page, cancellationToken).ConfigureAwait(false);\n                }\n                catch (Exception ex)\n                {\n                    _log.LogError($\"{ex.Message} : {ex.StackTrace}\");\n                }\n                \n            }\n        }\n\n        public async Task HandlePublished(\n            string projectId,\n            IPage page,\n            CancellationToken cancellationToken = default(CancellationToken)\n            )\n        {\n            foreach (var handler in _publishHandlers)\n            {\n                try\n                {\n                    await handler.Handle(projectId, page, cancellationToken).ConfigureAwait(false);\n                }\n                catch (Exception ex)\n                {\n                    _log.LogError($\"{ex.Message} : {ex.StackTrace}\");\n                }\n\n            }\n        }\n\n        public async Task HandleUnPublished(\n            string projectId,\n            IPage page,\n            CancellationToken cancellationToken = default(CancellationToken)\n            )\n        {\n            foreach (var handler in _unPublishHandlers)\n            {\n                try\n                {\n                    await handler.Handle(projectId, page, cancellationToken).ConfigureAwait(false);\n                }\n                catch (Exception ex)\n                {\n                    _log.LogError($\"{ex.Message} : {ex.StackTrace}\");\n                }\n\n            }\n        }\n\n\n        public async Task HandleMoved(\n            string projectId,\n            IPage movedPage,\n            IPage targetPage,\n            string position, // before / after / inside\n            CancellationToken cancellationToken = default(CancellationToken)\n            )\n        {\n            foreach (var handler in _movedHandlers)\n            {\n                try\n                {\n                    await handler.Handle(projectId, movedPage, targetPage, position, cancellationToken).ConfigureAwait(false);\n                }\n                catch (Exception ex)\n                {\n                    _log.LogError($\"{ex.Message} : {ex.StackTrace}\");\n                }\n\n            }\n        }\n\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Web/Services/Page/PageService.cs",
    "content": "﻿// Copyright (c) Source Tree Solutions, LLC. All rights reserved.\n// Licensed under the Apache License, Version 2.0. \n// Author:                  Joe Audette\n// Created:                 2016-02-09\n// Last Modified:           2019-02-17\n// \n\n\nusing cloudscribe.SimpleContent.Models;\nusing cloudscribe.SimpleContent.Web;\nusing cloudscribe.SimpleContent.Web.Services;\nusing Microsoft.AspNetCore.Mvc.RazorPages;\nusing Microsoft.Extensions.Localization;\nusing Microsoft.Extensions.Logging;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Security.Claims;\nusing System.Text;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace cloudscribe.SimpleContent.Services\n{\n    public class PageService : IPageService\n    {\n        public PageService(\n            IProjectService projectService,\n            IPageQueries pageQueries,\n            IPageCommands pageCommands,\n            PageEvents eventHandlers,\n            IContentProcessor contentProcessor,\n            IStringLocalizer<cloudscribe.SimpleContent.Web.SimpleContent> localizer,\n            IContentHistoryCommands historyCommands,\n            ILogger<PageService> logger\n            )\n        {\n\n            _projectService = projectService;\n            _pageQueries = pageQueries;\n            _pageCommands = pageCommands;\n            _contentProcessor = contentProcessor;\n            _eventHandlers = eventHandlers;\n            _sr = localizer;\n            _historyCommands = historyCommands;\n            \n            _log = logger;\n        }\n        \n        private readonly IPageQueries _pageQueries;\n        private readonly IPageCommands _pageCommands;\n        private readonly IProjectService _projectService;\n        private readonly IContentProcessor _contentProcessor;\n        private readonly PageEvents _eventHandlers;\n        private readonly IStringLocalizer _sr;\n        private readonly IContentHistoryCommands _historyCommands;\n        \n        private readonly ILogger _log;\n\n        private IProjectSettings _settings = null;\n\n        private async Task EnsureProjectSettings()\n        {\n            if (_settings != null) { return; }\n            _settings = await _projectService.GetCurrentProjectSettings().ConfigureAwait(false);\n            \n        }\n        \n        public async Task<bool> SlugIsAvailable(string slug)\n        {\n            await EnsureProjectSettings();\n            return await _pageQueries.SlugIsAvailable(\n                _settings.Id,\n                slug,\n                CancellationToken.None\n                ).ConfigureAwait(false);\n        }\n        \n        public async Task Create(IPage page)\n        {\n            await EnsureProjectSettings().ConfigureAwait(false);\n            \n            if (string.IsNullOrEmpty(page.Slug))\n            {\n                var rootList = await GetRootPages().ConfigureAwait(false);\n                if(rootList.Count == 0)\n                {\n                    // no pages yet, creating first one so use default slug\n                    page.Slug = _settings.DefaultPageSlug;\n                }\n                else\n                {\n                    var slug = ContentUtils.CreateSlug(page.Title);\n                    var available = await SlugIsAvailable(slug);\n                    while(!available)\n                    {\n                        slug = slug + \"-\";\n                        available = await SlugIsAvailable(slug);\n                    }\n                    if (available)\n                    {\n                        page.Slug = slug;\n                    }\n                }\n\n                \n            }\n            \n            await _pageCommands.Create(_settings.Id, page).ConfigureAwait(false);\n            await _eventHandlers.HandleCreated(_settings.Id, page).ConfigureAwait(false);\n           \n        }\n\n        public async Task Update(IPage page)\n        {\n            await EnsureProjectSettings().ConfigureAwait(false);\n            await _eventHandlers.HandlePreUpdate(_settings.Id, page.Id).ConfigureAwait(false);\n            await _pageCommands.Update(_settings.Id, page).ConfigureAwait(false);\n            await _eventHandlers.HandleUpdated(_settings.Id, page).ConfigureAwait(false);\n        }\n\n        public async Task DeletePage(string pageId)\n        {\n            await EnsureProjectSettings().ConfigureAwait(false);\n            await _eventHandlers.HandlePreDelete(_settings.Id, pageId).ConfigureAwait(false);\n\n            // we have a loosely coupled raltionship of pages not enforced in the db\n            // so we have to consider how to handle child pages belonging to a page that is about to be deleted\n            // it seems dangerous to cascade the delete to child pages\n            // in most cases a delete decisioon should be made on each page\n            // the possibility of accidently deleting multiple pages would be high\n            // so for now we will just orphan the children to become root pages\n            // which can result in a bad user experience if a bunch of pages suddenly appear in the root\n            // we will show a warning that indicates the child pages will become root pages\n            // and that they should delete child pages before deleting the parent page if that is the intent\n            await HandleChildPagesBeforeDelete(pageId);\n\n            await _pageCommands.Delete(_settings.Id, pageId).ConfigureAwait(false);\n            \n\n        }\n\n        private async Task HandleChildPagesBeforeDelete(string pageId)\n        {\n            var children = await GetChildPages(pageId);\n            foreach(var c in children)\n            {\n                // rebase to root \n                c.ParentId = \"0\";\n                c.ParentSlug = string.Empty;\n                await _pageCommands.Update(_settings.Id, c).ConfigureAwait(false);\n            }\n        }\n        \n        public async Task<IPage> GetPage(string pageId, CancellationToken cancellationToken = default(CancellationToken))\n        {\n            await EnsureProjectSettings().ConfigureAwait(false);\n\n            return await _pageQueries.GetPage(\n                _settings.Id,\n                pageId,\n                cancellationToken)\n                .ConfigureAwait(false);\n        }\n\n        public async Task<IPage> GetPageBySlug(string slug, CancellationToken cancellationToken = default(CancellationToken))\n        {\n            await EnsureProjectSettings().ConfigureAwait(false);\n\n            return await _pageQueries.GetPageBySlug(\n                _settings.Id,\n                slug,\n                cancellationToken)\n                .ConfigureAwait(false);\n        }\n\n        public async Task<List<IPage>> GetAllPages(string projectId, CancellationToken cancellationToken = default(CancellationToken))\n        {\n            return await _pageQueries.GetAllPages(\n                projectId,\n                cancellationToken)\n                .ConfigureAwait(false);\n        }\n\n        public async Task<List<IPage>> GetRootPages(CancellationToken cancellationToken = default(CancellationToken))\n        {\n            await EnsureProjectSettings();\n            return await _pageQueries.GetRootPages(\n                _settings.Id,\n                cancellationToken\n                ).ConfigureAwait(false);\n        }\n\n        public async Task<List<IPage>> GetChildPages(string pageId, CancellationToken cancellationToken = default(CancellationToken))\n        {\n            await EnsureProjectSettings();\n            return await _pageQueries.GetChildPages(\n                _settings.Id,\n                pageId,\n                cancellationToken\n                ).ConfigureAwait(false);\n        }\n\n        public async Task<int> GetNextChildPageOrder(string pageSlug, CancellationToken cancellationToken = default(CancellationToken))\n        {\n            await EnsureProjectSettings();\n            var pageId = \"0\"; // root level pages have this parent id\n            var page = await _pageQueries.GetPageBySlug(_settings.Id, pageSlug);\n            if (page != null)\n            {\n                pageId = page.Id;\n            }\n            \n            var countOfChildren =  await _pageQueries.GetChildPageCount(\n                _settings.Id,\n                pageId,\n                true,\n                cancellationToken\n                ).ConfigureAwait(false);\n\n            return (countOfChildren * 3) + 2;\n        }\n\n        public async Task<PageActionResult> Move(PageMoveModel model)\n        {\n            PageActionResult result;\n            \n            if (string.IsNullOrEmpty(model.MovedNode) || string.IsNullOrEmpty(model.TargetNode) || (model.MovedNode == \"-1\") || (model.TargetNode == \"-1\") || (string.IsNullOrEmpty(model.Position)))\n            {\n                result = new PageActionResult(false, _sr[\"bad request, failed to move page\"]);\n                return result;\n            }\n\n            var movedNode = await GetPage(model.MovedNode);\n            var targetNode = await GetPage(model.TargetNode);\n\n            if ((movedNode == null) || (targetNode == null))\n            {\n                result = new PageActionResult(false, _sr[\"bad request, page or target page not found\"]);\n                return result;\n            }\n\n            if(movedNode.Slug == _settings.DefaultPageSlug)\n            {\n                result = new PageActionResult(false, _sr[\"Moving the default/home page is not allowed\"]);\n                return result;\n            }\n\n            switch (model.Position)\n            {\n                case \"inside\":\n                    // this case is when moving to a new parent node that doesn't have any children yet\n                    // target is the new parent\n                    // or when momving to the first position of the current parent\n                    movedNode.ParentId = targetNode.Id;\n                    movedNode.ParentSlug = targetNode.Slug;\n                    movedNode.PageOrder = 0;\n                    await _pageCommands.Update(movedNode.ProjectId, movedNode);\n                    await SortChildPages(targetNode.Id);\n\n                    break;\n\n                case \"before\":\n                    // put this page before the target page beneath the same parent as the target\n                    if (targetNode.ParentId != movedNode.ParentId)\n                    {\n                        movedNode.ParentId = targetNode.ParentId;\n                        movedNode.ParentSlug = targetNode.ParentSlug;\n                        movedNode.PageOrder = targetNode.PageOrder - 1;\n                        await _pageCommands.Update(movedNode.ProjectId, movedNode);\n                        await SortChildPages(targetNode.ParentId);\n\n                    }\n                    else\n                    {\n                        //parent did not change just sort\n                        // set sort and re-sort\n                        movedNode.PageOrder = targetNode.PageOrder - 1;\n                        await _pageCommands.Update(movedNode.ProjectId, movedNode);\n                        await SortChildPages(targetNode.ParentId);\n\n                    }\n\n                    break;\n\n                case \"after\":\n                default:\n                    // put this page after the target page beneath the same parent as the target\n                    if (targetNode.ParentId != movedNode.ParentId)\n                    {\n                        movedNode.ParentId = targetNode.ParentId;\n                        movedNode.ParentSlug = targetNode.ParentSlug;\n                        movedNode.PageOrder = targetNode.PageOrder + 1;\n                        await _pageCommands.Update(movedNode.ProjectId, movedNode);\n                        await SortChildPages(targetNode.ParentId);\n                    }\n                    else\n                    {\n                        //parent did not change just sort\n                        movedNode.PageOrder = targetNode.PageOrder + 1;\n                        await _pageCommands.Update(movedNode.ProjectId, movedNode);\n                        await SortChildPages(targetNode.ParentId);\n\n                    }\n\n                    break;\n            }\n\n            //ClearNavigationCache();\n\n            result = new PageActionResult(true, _sr[\"operation succeeded\"]);\n\n            await _eventHandlers.HandleMoved(_settings.Id, movedNode, targetNode, model.Position).ConfigureAwait(false);\n\n            return result;\n        }\n\n        public async Task SortChildPages(string pageId)\n        {\n            var children = await GetChildPages(pageId);\n            int i = 1;\n            foreach(var child in children)\n            {\n                child.PageOrder = i;\n                await _pageCommands.Update(child.ProjectId, child);\n                i += 2;\n            }\n        }\n\n        public async Task<PageActionResult> SortChildPagesAlpha(string pageId)\n        {\n            var children = await GetChildPages(pageId);\n            var sorted = children.OrderBy(p => p.Title);\n            int i = 1;\n            foreach (var child in sorted)\n            {\n                child.PageOrder = i;\n                await _pageCommands.Update(child.ProjectId, child);\n                i += 2;\n            }\n\n            //ClearNavigationCache();\n            return new PageActionResult(true, _sr[\"operation succeeded\"]);\n\n        }\n\n        public async Task<string> GetPageTreeJson(ClaimsPrincipal user, Func<IPage, string> urlResolver, string node = \"root\", CancellationToken cancellationToken = default(CancellationToken))\n        {\n            await EnsureProjectSettings();\n            \n            List<IPage> list;\n            if(node == \"root\")\n            {\n                list = await GetRootPages();\n            }\n            else\n            {\n                list = await GetChildPages(node);\n            }\n            \n            var comma = string.Empty;\n            var sb = new StringBuilder();\n            sb.Append(\"[\");\n            foreach (var p in list)\n            {\n                sb.Append(comma);\n                await BuildPageJson(user, sb, p, urlResolver, cancellationToken);\n                comma = \",\";\n            }\n            sb.Append(\"]\");\n\n            return sb.ToString();\n        }\n\n        private async Task BuildPageJson(ClaimsPrincipal user, StringBuilder script, IPage page, Func<IPage, string> urlResolver, CancellationToken cancellationToken = default(CancellationToken))\n        {\n            var childPagesCount = await _pageQueries.GetChildPageCount(page.ProjectId, page.Id, true, cancellationToken); \n            script.Append(\"{\");\n            script.Append(\"\\\"id\\\":\" + \"\\\"\" + page.Id + \"\\\"\");\n            script.Append(\",\\\"slug\\\":\" + \"\\\"\" + page.Slug + \"\\\"\");\n            script.Append(\",\\\"label\\\":\\\"\" + Encode(page.Title) + \"\\\"\");\n            script.Append(\",\\\"url\\\":\\\"\" + urlResolver(page) + \"\\\"\");\n            script.Append(\",\\\"parentId\\\":\" + \"\\\"\" + page.ParentId + \"\\\"\");\n            script.Append(\",\\\"childcount\\\":\" + childPagesCount.ToString());\n            script.Append(\",\\\"children\\\":[\");\n            script.Append(\"]\");\n            if (childPagesCount > 0)\n            {\n                script.Append(\",\\\"load_on_demand\\\":true\");\n            }\n            \n            if(!string.IsNullOrEmpty(page.ViewRoles) && !user.IsInRoles(page.ViewRoles))\n            {\n                script.Append(\",\\\"canEdit\\\":false\");\n                script.Append(\",\\\"canCreateChild\\\":false\");\n                script.Append(\",\\\"canDelete\\\":false\");\n            }\n            else\n            {\n                script.Append(\",\\\"canEdit\\\":true\");\n                script.Append(\",\\\"canCreateChild\\\":true\");\n                if (page.Slug == _settings.DefaultPageSlug)\n                {\n                    script.Append(\",\\\"canDelete\\\":false\"); // don't allow delete the home/default page from the ui\n                }\n                else\n                {\n                    script.Append(\",\\\"canDelete\\\":true\");\n                }\n            }\n            \n            script.Append(\",\\\"pubstatus\\\":\\\"\" + GetPublishingStatus(page) + \"\\\"\");\n            \n            script.Append(\"}\");\n\n        }\n\n        private string GetPublishingStatus(IPage page)\n        {\n            if(!string.IsNullOrEmpty(page.ExternalUrl)) return _sr[\"Link Only\"];\n\n            if (!page.IsPublished) return _sr[\"Unpublished\"];\n            if (page.PubDate > DateTime.UtcNow) return _sr[\"Future Published\"];\n            if (string.IsNullOrEmpty(page.ViewRoles) || page.ViewRoles.Contains(\"All Users\")) return _sr[\"Public\"];\n            return _sr[\"Protected\"];\n        }\n\n        public async Task FirePublishEvent(IPage page)\n        {\n            await _eventHandlers.HandlePublished(page.ProjectId, page);\n        }\n\n        public async Task FireUnPublishEvent(IPage page)\n        {\n            await _eventHandlers.HandleUnPublished(page.ProjectId, page);\n        }\n\n        private string Encode(string input)\n        {\n            return JsonEscape(input);\n        }\n\n        private static string JsonEscape(string s)\n        {\n            StringBuilder sb = new StringBuilder();\n            foreach (char c in s)\n            {\n                switch (c)\n                {\n                    case '\\\"':\n                        sb.Append(\"\\\\\\\"\");\n                        break;\n                    case '\\\\':\n                        sb.Append(\"\\\\\\\\\");\n                        break;\n                    case '\\b':\n                        sb.Append(\"\\\\b\");\n                        break;\n                    case '\\f':\n                        sb.Append(\"\\\\f\");\n                        break;\n                    case '\\n':\n                        sb.Append(\"\\\\n\");\n                        break;\n                    case '\\r':\n                        sb.Append(\"\\\\r\");\n                        break;\n                    case '\\t':\n                        sb.Append(\"\\\\t\");\n                        break;\n                    default:\n                        int i = (int)c;\n                        if (i < 32 || i > 127)\n                        {\n                            sb.AppendFormat(\"\\\\u{0:X04}\", i);\n                        }\n                        else\n                        {\n                            sb.Append(c);\n                        }\n                        break;\n                }\n            }\n\n            return sb.ToString();\n        }\n\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Web/Services/Page/PageUrlResolver.cs",
    "content": "﻿using cloudscribe.SimpleContent.Models;\nusing Microsoft.AspNetCore.Http;\nusing Microsoft.AspNetCore.Mvc;\nusing Microsoft.AspNetCore.Mvc.Infrastructure;\nusing Microsoft.AspNetCore.Mvc.Routing;\nusing Microsoft.AspNetCore.Routing;\nusing System.Threading.Tasks;\n\nnamespace cloudscribe.SimpleContent.Web.Services\n{\n    public class PageUrlResolver : IPageUrlResolver\n    {\n        public PageUrlResolver(\n            IHttpContextAccessor contextAccessor,\n            IUrlHelperFactory urlHelperFactory,\n            IContentProcessor contentProcessor,\n            IPageRoutes pageRoutes\n            )\n        {\n            _contextAccessor = contextAccessor;\n            _urlHelperFactory = urlHelperFactory;\n            _contentProcessor = contentProcessor;\n            _pageRoutes = pageRoutes;\n        }\n\n        private readonly IHttpContextAccessor _contextAccessor;\n        private readonly IUrlHelperFactory _urlHelperFactory;\n        private readonly IContentProcessor _contentProcessor;\n        private readonly IPageRoutes _pageRoutes;\n\n        public Task<string> ResolvePageUrl(IPage page)\n        {\n            var actionContext = new ActionContext(\n                _contextAccessor.HttpContext,\n                _contextAccessor.HttpContext.GetRouteData(),\n                new Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor()\n            );\n            var urlHelper = _urlHelperFactory.GetUrlHelper(actionContext);\n            var result = urlHelper.RouteUrl(_pageRoutes.PageRouteName, new { slug = page.Slug });\n            return Task.FromResult(result);\n        }\n\n        public async Task ConvertMediaToRelativeUrls(IPage page)\n        {\n            var baseUrl = string.Concat(\n                        _contextAccessor.HttpContext.Request.Scheme,\n                        \"://\",\n                        _contextAccessor.HttpContext.Request.Host.ToUriComponent()\n                        );\n\n            page.DraftContent = await _contentProcessor.ConvertMediaUrlsToRelative(\n                baseUrl, \n                page.DraftContent);\n\n            // olw also adds hard coded style to images\n            page.DraftContent = _contentProcessor.RemoveImageStyleAttribute(page.DraftContent);\n\n            // open live writer passes in posts with absolute urls\n            // we want to change them to relative to keep the files portable\n            // to a different root url\n            page.Content = await _contentProcessor.ConvertMediaUrlsToRelative(\n                baseUrl, \n                page.Content);\n\n            // olw also adds hard coded style to images\n            page.Content = _contentProcessor.RemoveImageStyleAttribute(page.Content);\n        }\n\n        public Task ConvertMediaToAbsoluteUrls(IPage page, IProjectSettings projectSettings)\n        {\n            string baseUrl = projectSettings.CdnUrl;\n            if (string.IsNullOrWhiteSpace(baseUrl))\n            {\n                baseUrl = string.Concat(\n                        _contextAccessor.HttpContext.Request.Scheme,\n                        \"://\",\n                        _contextAccessor.HttpContext.Request.Host.ToUriComponent()\n                        );\n            }\n\n            page.Content = _contentProcessor.ConvertUrlsToAbsolute(baseUrl, page.Content);\n            page.DraftContent = _contentProcessor.ConvertUrlsToAbsolute(baseUrl, page.DraftContent);\n\n            return Task.CompletedTask;\n        }\n\n    }\n    \n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Web/Services/Page/PageViewContext.cs",
    "content": "﻿using cloudscribe.SimpleContent.Models;\n\nnamespace cloudscribe.SimpleContent.Web.Services\n{\n    public class PageViewContext\n    {\n        public PageViewContext(\n            IProjectSettings project,\n            IPage currentPage,\n            ContentHistory history,\n            bool canEdit,\n            bool hasDraft,\n            bool hasPublishedVersion,\n            bool didReplaceDraft,\n            bool didRestoreDeleted,\n            bool showingDraft,\n            int rootPageCount\n            )\n        {\n            Project = project;\n            CurrentPage = currentPage;\n            History = history;\n            HasDraft = hasDraft;\n            CanEdit = canEdit;\n            HasPublishedVersion = hasPublishedVersion;\n            DidReplaceDraft = didReplaceDraft;\n            DidRestoreDeleted = didRestoreDeleted;\n            ShowingDraft = showingDraft;\n            RootPageCount = rootPageCount;\n\n        }\n\n        public IProjectSettings Project { get; private set; } = null;\n        public IPage CurrentPage { get; private set; } = null;\n        public bool CanEdit { get; private set; }\n        public ContentHistory History { get; private set; } = null;\n        public bool HasDraft { get; private set; }\n        public bool HasPublishedVersion { get; private set; }\n        public bool DidReplaceDraft { get; private set; }\n        public bool ShowingDraft { get; private set; }\n        public bool DidRestoreDeleted { get; private set; }\n        public int RootPageCount { get; private set; } = -1;\n\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Web/Services/Page/PageViewContextRequest.cs",
    "content": "﻿using MediatR;\nusing System;\nusing System.Security.Claims;\n\nnamespace cloudscribe.SimpleContent.Web.Services\n{\n    public class PageViewContextRequest : IRequest<PageViewContext>\n    {\n        public PageViewContextRequest(\n            ClaimsPrincipal user,\n            string slug,\n            bool showDraft,\n            Guid? historyId\n            )\n        {\n            User = user;\n            Slug = slug;\n            ShowDraft = showDraft;\n            HistoryId = historyId;\n\n        }\n\n        public ClaimsPrincipal User { get; private set; }\n        public string Slug { get; private set; }\n        public bool ShowDraft { get; private set; }\n        public Guid? HistoryId { get; private set; }\n\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Web/Services/Page/PageViewContextRequestHandler.cs",
    "content": "﻿// Copyright (c) Source Tree Solutions, LLC. All rights reserved.\n// Author:                  Joe Audette\n// Created:                 2018-07-24\n// Last Modified:           2018-07-27\n// \n\nusing cloudscribe.SimpleContent.Models;\nusing MediatR;\nusing Microsoft.AspNetCore.Authorization;\nusing System;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace cloudscribe.SimpleContent.Web.Services\n{\n    public class PageViewContextRequestHandler : IRequestHandler<PageViewContextRequest, PageViewContext>\n    {\n        public PageViewContextRequestHandler(\n            IProjectService projectService,\n            IPageService pageService,\n            IAuthorizationService authorizationService,\n            IContentHistoryQueries historyQueries\n            )\n        {\n            _projectService = projectService;\n            _pageService = pageService;\n            _authorizationService = authorizationService;\n            _historyQueries = historyQueries;\n        }\n\n        private readonly IProjectService _projectService;\n        private readonly IPageService _pageService;\n        private readonly IAuthorizationService _authorizationService;\n        private readonly IContentHistoryQueries _historyQueries;\n\n        public async Task<PageViewContext> Handle(PageViewContextRequest request, CancellationToken cancellationToken = default(CancellationToken))\n        {\n            IPage page = null;\n            ContentHistory history = null;\n            var canEdit = false;\n            var hasDraft = false;\n            var hasPublishedVersion = false;\n            var didReplaceDraft = false;\n            var didRestoreDeleted = false;\n            var showingDraft = false;\n            var rootPageCount = -1;\n            IProjectSettings project = await _projectService.GetCurrentProjectSettings();\n            if(project != null)\n            {\n                canEdit = await request.User.CanEditPages(project.Id, _authorizationService);\n\n                var slug = request.Slug;\n                if (string.IsNullOrEmpty(slug) || slug == \"none\") { slug = project.DefaultPageSlug; }\n\n                page = await _pageService.GetPageBySlug(slug, cancellationToken);\n                \n                if (page != null)\n                {\n                    hasDraft = page.HasDraftVersion();\n                    hasPublishedVersion = page.HasPublishedVersion();\n                }\n\n                if (canEdit && request.HistoryId.HasValue)\n                {\n                    history = await _historyQueries.Fetch(project.Id, request.HistoryId.Value);\n                    if (history != null)\n                    {\n                        if (page == null) //page must have been deleted, restore from hx\n                        {\n                            page = new Page();\n                            history.CopyTo(page);\n                            if (history.IsDraftHx)\n                            {\n                                page.PromoteDraftTemporarilyForRender();\n                            }\n                            didRestoreDeleted = true;\n                        }\n                        else\n                        {\n                            var pageCopy = new Page();\n                            page.CopyTo(pageCopy);\n                            if (history.IsDraftHx)\n                            {\n                                pageCopy.Content = history.DraftContent;\n                                pageCopy.Author = history.DraftAuthor;\n                            }\n                            else\n                            {\n                                pageCopy.Content = history.Content;\n                                pageCopy.Author = history.Author;\n                            }\n\n                            page = pageCopy;\n                            didReplaceDraft = hasDraft;\n                        }\n                    }\n                }\n                else if (canEdit && page != null && ((request.ShowDraft && page.HasDraftVersion()) || !page.HasPublishedVersion()))\n                {\n                    var pageCopy = new Page();\n                    page.CopyTo(pageCopy);\n                    pageCopy.PromoteDraftTemporarilyForRender();\n                    page = pageCopy;\n                    showingDraft = true;\n                }\n\n                if (page == null)\n                {\n                    var rootList = await _pageService.GetRootPages(cancellationToken).ConfigureAwait(false);\n                    rootPageCount = rootList.Count;\n                }\n\n            }\n            \n            return new PageViewContext(\n                project,\n                page,\n                history,\n                canEdit,\n                hasDraft,\n                hasPublishedVersion,\n                didReplaceDraft,\n                didRestoreDeleted,\n                showingDraft,\n                rootPageCount\n                );\n        }\n\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Web/Services/Page/PagesNavigationNodePermissionResolver.cs",
    "content": "﻿// Copyright (c) Source Tree Solutions, LLC. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.\n// Author:\t\t\t\t\tJoe Audette\n// Created:\t\t\t\t\t2016-08-12\n// Last Modified:\t\t\t2019-07-31\n// \n\nusing cloudscribe.SimpleContent.Web;\nusing cloudscribe.Web.Navigation;\nusing Microsoft.AspNetCore.Authorization;\nusing Microsoft.AspNetCore.Http;\nusing System;\nusing System.Threading.Tasks;\n\nnamespace cloudscribe.SimpleContent.Web.Services\n{\n    public class PagesNavigationNodePermissionResolver : INavigationNodePermissionResolver\n    {\n        public PagesNavigationNodePermissionResolver(\n            IHttpContextAccessor httpContextAccessor,\n            IAuthorizationService authorizationService\n            )\n        {\n            _httpContextAccessor = httpContextAccessor;\n            _authorizationService = authorizationService;\n        }\n\n        private IHttpContextAccessor _httpContextAccessor;\n        private IAuthorizationService _authorizationService;\n\n        public virtual async Task<bool> ShouldAllowView(TreeNode<NavigationNode> menuNode)\n        {\n            // for unpublished pages CustomData will be populated with the projectId\n            // in that case we need to filter it from navigation unless the user has edit permissions\n            if (string.IsNullOrEmpty(menuNode.Value.CustomData)) { return true; }\n            \n            // if the user is not authenticated no need to check further\n            if (!_httpContextAccessor.HttpContext.User.Identity.IsAuthenticated)\n            {\n                return false;\n            }\n\n            bool canEdit = false;\n\n            var projectId = menuNode.Value.CustomData;\n            var user = _httpContextAccessor.HttpContext.User;\n            try\n            {\n                // http://stackoverflow.com/questions/22628087/calling-async-method-synchronously\n                canEdit = await user.CanEditPages(projectId, _authorizationService);\n            }\n            catch(InvalidOperationException)\n            { }\n           \n            return canEdit;\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Web/Services/Page/PagesNavigationTreeBuilder.cs",
    "content": "﻿// Copyright (c) Source Tree Solutions, LLC. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.\n// Author:                  Joe Audette\n// Created:                 2016-05-27\n// Last Modified:           2019-07-03\n// \n\nusing cloudscribe.SimpleContent.Models;\nusing cloudscribe.Web.Navigation;\nusing Microsoft.AspNetCore.Http;\nusing Microsoft.AspNetCore.Mvc;\nusing Microsoft.AspNetCore.Mvc.Infrastructure;\nusing Microsoft.AspNetCore.Mvc.Routing;\nusing Microsoft.AspNetCore.Routing;\nusing System.Linq;\nusing System.Threading.Tasks;\n\nnamespace cloudscribe.SimpleContent.Services\n{\n    public class PagesNavigationTreeBuilder : INavigationTreeBuilder\n    {\n        public PagesNavigationTreeBuilder(\n            IProjectService projectService,\n            IPageService pageService,\n            INodeUrlPrefixProvider prefixProvider,\n            IUrlHelperFactory urlHelperFactory,\n            IPageRoutes pageRoutes,\n            IBlogRoutes blogRoutes,\n            IHttpContextAccessor httpContextAccessor\n            )\n        {\n            _projectService = projectService;\n            _pageService = pageService;\n            _prefixProvider = prefixProvider;\n            _urlHelperFactory = urlHelperFactory;\n            _httpContextAccessor = httpContextAccessor;\n            _pageRoutes = pageRoutes;\n            _blogRoutes = blogRoutes;\n        }\n\n        private IProjectService _projectService;\n        private IPageService _pageService;\n        private INodeUrlPrefixProvider _prefixProvider;\n        private IUrlHelperFactory _urlHelperFactory;\n        private IPageRoutes _pageRoutes;\n        private IBlogRoutes _blogRoutes;\n        private IHttpContextAccessor _httpContextAccessor;\n        private TreeNode<NavigationNode> _rootNode = null;\n\n        public string Name\n        {\n            get { return \"cloudscribe.SimpleContent.Services.PagesNavigationTreeBuilder\"; }\n        }\n\n        public async Task<TreeNode<NavigationNode>> BuildTree(NavigationTreeBuilderService service)\n        {\n\n            if (_rootNode == null)\n            {\n                _rootNode = await BuildTreeInternal(service);\n            }\n\n            return _rootNode;\n        }\n\n        private async Task<TreeNode<NavigationNode>> BuildTreeInternal(NavigationTreeBuilderService service)\n        {\n            NavigationNode rootNav;\n\n            var project = await _projectService.GetCurrentProjectSettings();\n\n            IPage homePage = null;\n\n            if(\n                project != null \n                && project.UseDefaultPageAsRootNode\n                && !string.IsNullOrEmpty(project.DefaultPageSlug)\n                )\n            {\n                //make the home page the \"root\" which contains all the other pages\n                homePage = await _pageService.GetPageBySlug(project.DefaultPageSlug);\n\n            }\n\n            var rootList = await _pageService.GetRootPages().ConfigureAwait(false);\n            var rootListCount = rootList.Count();\n\n            var actionContext = new ActionContext(\n                _httpContextAccessor.HttpContext,\n                _httpContextAccessor.HttpContext.GetRouteData(),\n                new Microsoft.AspNetCore.Mvc.Abstractions.ActionDescriptor()\n            );\n            var urlHelper = _urlHelperFactory.GetUrlHelper(actionContext);\n            //var folderPrefix = _prefixProvider.GetPrefix();\n            if ((homePage != null) && project.UseDefaultPageAsRootNode)\n            {\n                rootNav = new NavigationNode\n                {\n                    Key = homePage.Id,\n                    Text = homePage.Title,\n                    CreatedUtc = homePage.CreatedUtc,\n                    LastModifiedUtc = homePage.LastModified,\n                    ComponentVisibility = homePage.MenuFilters,\n                    ViewRoles = homePage.ViewRoles,\n                    Url = urlHelper.RouteUrl(_pageRoutes.PageRouteName, new { slug = \"\" }) //_pageRouteHelper.ResolveHomeUrl(urlHelper, folderPrefix) // urlHelper.Content(\"~/\" + folderPrefix);\n                };\n            }\n            else\n            {\n                rootNav = new NavigationNode\n                {\n                    Key = \"pagesRoot\",\n                    Title = \"Home\",\n                    Text = \"Home\",\n                    Url = urlHelper.RouteUrl(_pageRoutes.PageRouteName, new { slug = \"\" })\n                };\n                \n            }\n            \n            var treeRoot = new TreeNode<NavigationNode>(rootNav);\n            \n            var blogPosition = project.BlogPagePosition;\n\n            if (project.AddBlogToPagesTree) \n                blogPosition--;\n\n            var didAddBlog = false;\n            if (rootListCount <= 1 || blogPosition < 1)\n            {   // if there are no pages we won't hit the loop below so go ahead and add the blog page\n                if (project.AddBlogToPagesTree)\n                {\n                    MakeBlogNode(project, urlHelper, treeRoot);\n                    didAddBlog = true;\n                }\n            }\n\n            var rootPosition = 1;\n            foreach (var page in rootList)\n            {\n                if (project.UseDefaultPageAsRootNode && (homePage != null && homePage.Id == page.Id))\n                {\n                    // this homepage doesn't always come through as first item, which messes up the counting\n                    await AddChildNodes(treeRoot, project, urlHelper).ConfigureAwait(false);\n                    continue;\n                }\n\n                if (!didAddBlog && (project.AddBlogToPagesTree && rootPosition == blogPosition))\n                {\n                    MakeBlogNode(project, urlHelper, treeRoot);\n                    didAddBlog = true;\n                }\n\n                var node = new NavigationNode();\n\n                node.Key = page.Id;\n                //node.ParentKey = page.ParentId;\n                node.Text = page.Title;\n                node.ViewRoles = page.ViewRoles;\n                node.ComponentVisibility = page.MenuFilters;\n                node.CreatedUtc = page.CreatedUtc;\n                node.LastModifiedUtc = page.LastModified;\n                SetUrl(node, page, urlHelper);\n                \n                // for unpublished pages PagesNavigationNodePermissionResolver\n                // will look for projectid in CustomData and if it exists\n                // filter node from view unless user has edit permissions\n                if (!page.HasPublishedVersion())\n                {\n                    node.CustomData = project.Id;\n                }\n\n                var treeNode = treeRoot.AddChild(node);\n                await AddChildNodes(treeNode, project, urlHelper).ConfigureAwait(false);\n                rootPosition += 1;\n            }\n\n            // if we didn't add the blog yet because we ran out of indexing - put it in after all the pages.\n            if (!didAddBlog && (project.AddBlogToPagesTree))\n            {\n                MakeBlogNode(project, urlHelper, treeRoot);\n                didAddBlog = true;\n            }\n\n            return treeRoot;\n        }\n\n        private void MakeBlogNode(IProjectSettings project, IUrlHelper urlHelper, TreeNode<NavigationNode> treeRoot)\n        {\n            var node = new NavigationNode\n            {\n                Key  = project.BlogPageText,\n                Text = project.BlogPageText\n                //ParentKey = \"RootNode\";\n            };\n\n            if (project.BlogMenuLinksToNewestPost)\n            {\n                node.NamedRoute = _blogRoutes.MostRecentPostRouteName;\n                node.Url = urlHelper.RouteUrl(_blogRoutes.MostRecentPostRouteName);\n            }\n            else\n            {\n                node.NamedRoute = _blogRoutes.BlogIndexRouteName;\n                node.Url = urlHelper.RouteUrl(_blogRoutes.BlogIndexRouteName);\n                node.ExcludeFromSearchSiteMap = true;\n            }\n            node.ComponentVisibility = project.BlogPageNavComponentVisibility;\n            var blogNode = treeRoot.AddChild(node);\n        }\n\n        private async Task AddChildNodes(\n            TreeNode<NavigationNode> treeNode,\n            IProjectSettings project,\n            IUrlHelper urlHelper\n            )\n        {\n            var childList = await _pageService.GetChildPages(treeNode.Value.Key).ConfigureAwait(false);\n            //var urlHelper = _urlHelperFactory.GetUrlHelper(_actionContextAccesor.ActionContext);\n            foreach (var page in childList)\n            {\n                var node = new NavigationNode\n                {\n                    Key = page.Id,\n                    Text = page.Title,\n                    ViewRoles = page.ViewRoles,\n                    ComponentVisibility = page.MenuFilters,\n                    CreatedUtc = page.CreatedUtc,\n                    LastModifiedUtc = page.LastModified\n                };\n                SetUrl(node, page, urlHelper);\n\n                // for unpublished pages PagesNavigationNodePermissionResolver\n                // will look for projectid in CustomData and if it exists\n                // filter node from view unless user has edit permissions\n                if (!page.HasPublishedVersion())\n                {\n                    node.CustomData = project.Id;\n                }\n\n                var childNode = treeNode.AddChild(node);\n                await AddChildNodes(childNode, project, urlHelper).ConfigureAwait(false); //recurse\n            }\n        }\n\n        private void SetUrl(NavigationNode node, IPage page, IUrlHelper urlHelper)\n        {\n            if (!string.IsNullOrEmpty(page.ExternalUrl))\n            {\n                if (page.ExternalUrl.StartsWith(\"http\"))\n                {\n                    node.ExcludeFromSearchSiteMap = true;\n                    node.Target = \"_blank\"; // the default nav cshtml templates don't use this but could be customized to use it\n                }\n                else if(!page.ExternalUrl.StartsWith(\"/\"))\n                {\n                    page.ExternalUrl = \"/\" + page.ExternalUrl;\n                }\n                node.Url = urlHelper.Content(page.ExternalUrl);\n            }\n            else\n            {\n                node.Url = urlHelper.RouteUrl(_pageRoutes.PageRouteName, new { slug = page.Slug });\n            }\n        }\n\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Web/Services/Page/UpdateTemplatedPageHandler.cs",
    "content": "﻿// Copyright (c) Source Tree Solutions, LLC. All rights reserved.\n// Author:                  Joe Audette\n// Created:                 2018-06-22\n// Last Modified:           2019-04-07\n// \n\nusing cloudscribe.DateTimeUtils;\nusing cloudscribe.SimpleContent.Models;\nusing cloudscribe.SimpleContent.Models.Versioning;\nusing cloudscribe.SimpleContent.Web.Templating;\nusing cloudscribe.Web.Common.Razor;\nusing cloudscribe.Web.Navigation.Caching;\nusing MediatR;\nusing Microsoft.Extensions.Localization;\nusing Microsoft.Extensions.Logging;\nusing System;\nusing System.Collections.Generic;\nusing System.ComponentModel.DataAnnotations;\nusing System.Linq;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace cloudscribe.SimpleContent.Web.Services\n{\n    public class UpdateTemplatedPageHandler : IRequestHandler<UpdateTemplatedPageRequest, CommandResult<IPage>>\n    {\n        public UpdateTemplatedPageHandler(\n            IProjectService projectService,\n            IPageService pageService,\n            ITreeCache treeCache,\n            IContentHistoryCommands historyCommands,\n            ITimeZoneHelper timeZoneHelper,\n            ITimeZoneIdResolver timeZoneIdResolver,\n            IEnumerable<IModelSerializer> serializers,\n            IEnumerable<IParseModelFromForm> formParsers,\n            IEnumerable<IValidateTemplateModel> modelValidators,\n            ViewRenderer viewRenderer,\n            IStringLocalizer<cloudscribe.SimpleContent.Web.SimpleContent> localizer,\n            ILogger<UpdateTemplatedPageHandler> logger\n            )\n        {\n            _projectService = projectService;\n            _pageService = pageService;\n            _navigationCache = treeCache;\n            _historyCommands = historyCommands;\n            _timeZoneHelper = timeZoneHelper;\n            _timeZoneIdResolver = timeZoneIdResolver;\n            _serializers = serializers;\n            _formParsers = formParsers;\n            _modelValidators = modelValidators;\n            _viewRenderer = viewRenderer;\n            _localizer = localizer;\n            _log = logger;\n        }\n\n        private readonly IProjectService _projectService;\n        private readonly IPageService _pageService;\n        private readonly IContentHistoryCommands _historyCommands;\n        private readonly ITimeZoneHelper _timeZoneHelper;\n        private readonly ITimeZoneIdResolver _timeZoneIdResolver;\n        private readonly IEnumerable<IModelSerializer> _serializers;\n        private readonly IEnumerable<IParseModelFromForm> _formParsers;\n        private readonly IEnumerable<IValidateTemplateModel> _modelValidators;\n        private readonly ViewRenderer _viewRenderer;\n        private readonly IStringLocalizer _localizer;\n        private readonly ITreeCache _navigationCache;\n        private readonly ILogger _log;\n\n        private IModelSerializer GetSerializer(string name)\n        {\n            foreach (var s in _serializers)\n            {\n                if (s.Name == name) return s;\n            }\n\n            return _serializers.FirstOrDefault();\n        }\n\n        private IParseModelFromForm GetFormParser(string name)\n        {\n            foreach (var s in _formParsers)\n            {\n                if (s.ParserName == name) return s;\n            }\n\n            return _formParsers.FirstOrDefault();\n        }\n\n        private IValidateTemplateModel GetValidator(string name)\n        {\n            foreach (var s in _modelValidators)\n            {\n                if (s.ValidatorName == name) return s;\n            }\n\n            return _modelValidators.FirstOrDefault();\n        }\n\n        public async Task<CommandResult<IPage>> Handle(UpdateTemplatedPageRequest request, CancellationToken cancellationToken = default(CancellationToken))\n        {\n            var errors = new List<string>();\n            var customModelIsValid = true;\n            try\n            {\n                var projectSettings = await _projectService.GetProjectSettings(request.ProjectId);\n                var page = request.Page;\n                var history = page.CreateHistory(request.UserName);\n                var project = await _projectService.GetCurrentProjectSettings();\n                var serializer = GetSerializer(request.Template.SerializerName);\n                var parser = GetFormParser(request.Template.FormParserName);\n                var validator = GetValidator(request.Template.ValidatorName);\n                var type = Type.GetType(request.Template.ModelType);\n                var model = parser.ParseModel(request.Template.ModelType, request.Form);\n                if(model == null)\n                {\n                    errors.Add(_localizer[\"Failed to parse custom template model from form.\"]);\n                    customModelIsValid = false;\n                    //failed to parse model from form\n                    // at least return the original model before changes\n                    string pageModelString;\n                    if (!string.IsNullOrWhiteSpace(page.DraftSerializedModel))\n                    {\n                        pageModelString = page.DraftSerializedModel;\n                    }\n                    else\n                    {\n                        pageModelString = page.SerializedModel;\n                    }\n                    if (!string.IsNullOrWhiteSpace(pageModelString))\n                    {\n                        request.ViewModel.TemplateModel = serializer.Deserialize(request.Template.ModelType, pageModelString);\n                    }\n                }\n\n                if (customModelIsValid)\n                {\n                    // we are going to return the parsed model either way\n                    request.ViewModel.TemplateModel = model;\n\n                    var validationContext = new ValidationContext(model, serviceProvider: null, items: null);\n                    var validationResults = new List<ValidationResult>();\n\n                    customModelIsValid = validator.IsValid(model, validationContext, validationResults);\n                    if (!customModelIsValid)\n                    {\n                        foreach(var item in validationResults)\n                        {\n                           foreach(var memberName in item.MemberNames)\n                           {\n                                request.ModelState.AddModelError(memberName, item.ErrorMessage);\n\n                           }\n                        }\n                    }\n                }\n\n                if (!string.IsNullOrEmpty(request.ViewModel.Slug))\n                {\n                    // remove any bad characters\n                    var slug = ContentUtils.CreateSlug(request.ViewModel.Slug);\n                    if (slug != page.Slug)\n                    {\n                        var slugIsAvailable = await _pageService.SlugIsAvailable(slug);\n                        while (!slugIsAvailable)\n                        {\n                            slug += \"-\";\n                            slugIsAvailable = await _pageService.SlugIsAvailable(slug);\n                        }\n                        if (slugIsAvailable)\n                        {\n                            page.Slug = slug;\n                        }\n                    }\n                }\n                \n                if (request.ModelState.IsValid)\n                {\n                    var modelString = serializer.Serialize(request.Template.ModelType, model);\n                    var renderedModel = await _viewRenderer.RenderViewAsString(request.Template.RenderView, model).ConfigureAwait(false);\n                    \n                    page.Title = request.ViewModel.Title;\n                    page.CorrelationKey = request.ViewModel.CorrelationKey;\n                    page.LastModified = DateTime.UtcNow;\n                    page.LastModifiedByUser = request.UserName;\n                    page.MenuFilters = request.ViewModel.MenuFilters;\n                    page.MetaDescription = request.ViewModel.MetaDescription;\n                    page.PageOrder = request.ViewModel.PageOrder;\n                    page.ShowHeading = request.ViewModel.ShowHeading;\n                    page.ShowMenu = request.ViewModel.ShowMenu;\n                    page.ShowComments = request.ViewModel.ShowComments;\n                    page.MenuFilters = request.ViewModel.MenuFilters;\n                    page.ViewRoles = request.ViewModel.ViewRoles;\n                    page.ShowCreatedBy = request.ViewModel.ShowCreatedBy;\n                    page.ShowCreatedDate = request.ViewModel.ShowCreatedDate;\n                    page.ShowLastModifiedBy = request.ViewModel.ShowLastModifiedBy;\n                    page.ShowLastModifiedDate = request.ViewModel.ShowLastModifiedDate;\n\n                    if (!string.IsNullOrEmpty(request.ViewModel.ParentSlug))\n                    {\n                        var parentPage = await _pageService.GetPageBySlug(request.ViewModel.ParentSlug);\n                        if (parentPage != null)\n                        {\n                            if (parentPage.Id != page.ParentId)\n                            {\n                                page.ParentId = parentPage.Id;\n                                page.ParentSlug = parentPage.Slug;\n                            }\n                        }\n                    }\n                    else\n                    {\n                        // empty means root level\n                        page.ParentSlug = string.Empty;\n                        page.ParentId = \"0\";\n                    }\n\n                    if (page.ParentSlug == project.DefaultPageSlug)\n                    {\n                        _log.LogWarning($\"{request.UserName} tried to explicitely set the default page slug as the parent slug which is not allowed since all root pages are already children of the default page\");\n                        page.ParentSlug = string.Empty;\n                        page.ParentId = \"0\";\n                    }\n\n                    var tzId = await _timeZoneIdResolver.GetUserTimeZoneId(CancellationToken.None);\n                    var shouldFirePublishEvent = false;\n                    var saveMode = request.ViewModel.SaveMode;\n                    if (saveMode == SaveMode.PublishLater)\n                    {\n                        if (request.ViewModel.NewPubDate.HasValue)\n                        {\n                            var newPubDate = _timeZoneHelper.ConvertToUtc(request.ViewModel.NewPubDate.Value, tzId);\n                            if (newPubDate < DateTime.UtcNow)\n                            {\n                                saveMode = SaveMode.PublishNow;\n                                page.PubDate = newPubDate;\n                            }\n                        }\n\n                    }\n                    switch (saveMode)\n                    {   \n                        case SaveMode.SaveDraft:\n\n                            page.DraftSerializedModel = modelString;\n                            page.DraftContent = renderedModel;\n                            page.DraftAuthor = request.ViewModel.Author;\n                            if (!page.PubDate.HasValue) { page.IsPublished = false; }\n\n                            break;\n\n                        case SaveMode.PublishLater:\n                            page.DraftSerializedModel = modelString;\n                            page.DraftContent = renderedModel;\n                            page.DraftAuthor = request.ViewModel.Author;\n                            if (request.ViewModel.NewPubDate.HasValue)\n                            {\n                                \n                                page.DraftPubDate = _timeZoneHelper.ConvertToUtc(request.ViewModel.NewPubDate.Value, tzId);\n                            }\n                            if (!page.PubDate.HasValue) { page.IsPublished = false; }\n\n                            break;\n\n                        case SaveMode.PublishNow:\n\n                            page.Author = request.ViewModel.Author;\n                            page.Content = renderedModel;\n                            page.SerializedModel = modelString;\n                            if(!page.PubDate.HasValue)\n                            {\n                                page.PubDate = DateTime.UtcNow;\n                            }\n                            page.IsPublished = true;\n                            shouldFirePublishEvent = true;\n\n                            page.DraftAuthor = null;\n                            page.DraftContent = null;\n                            page.DraftPubDate = null;\n                            page.DraftSerializedModel = null;\n\n                            break;\n\n                        case SaveMode.DeleteCurrentDraft:\n\n                            shouldFirePublishEvent = false;\n\n                            page.DraftAuthor = null;\n                            page.DraftContent = null;\n                            page.DraftPubDate = null;\n                            page.DraftSerializedModel = null;\n\n                            break;\n                    }\n\n                    await _historyCommands.Create(request.ProjectId, history).ConfigureAwait(false);\n                    \n                    await _pageService.Update(page);\n\n                    if (shouldFirePublishEvent)\n                    {\n                        await _pageService.FirePublishEvent(page).ConfigureAwait(false);\n                        await _historyCommands.DeleteDraftHistory(project.Id, page.Id).ConfigureAwait(false);\n                    }\n\n                    await _navigationCache.ClearTreeCache();\n\n\n                }\n                \n                return new CommandResult<IPage>(page, customModelIsValid && request.ModelState.IsValid, errors);\n                \n            }\n            catch(Exception ex)\n            {\n                _log.LogError($\"{ex.Message}:{ex.StackTrace}\");\n\n                errors.Add(_localizer[\"Updating a page from a content template failed. An error has been logged.\"]);\n\n                return new CommandResult<IPage>(null, false, errors);\n            }\n\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Web/Services/Page/UpdateTemplatedPageRequest.cs",
    "content": "﻿using cloudscribe.SimpleContent.Models;\nusing cloudscribe.SimpleContent.Web.ViewModels;\nusing MediatR;\nusing Microsoft.AspNetCore.Http;\nusing Microsoft.AspNetCore.Mvc.ModelBinding;\n\nnamespace cloudscribe.SimpleContent.Web.Services\n{\n    public class UpdateTemplatedPageRequest : IRequest<CommandResult<IPage>>\n    {\n        public UpdateTemplatedPageRequest(\n            string projectId,\n            string userName,\n            PageEditWithTemplateViewModel viewModel,\n            ContentTemplate template,\n            IPage page,\n            IFormCollection form,\n            ModelStateDictionary modelState\n            )\n        {\n            ProjectId = projectId;\n            UserName = userName;\n            ViewModel = viewModel;\n            Template = template;\n            Page = page;\n            Form = form;\n            ModelState = modelState;\n\n        }\n\n        public string ProjectId { get; private set; }\n        public string UserName { get; private set; }\n\n        public PageEditWithTemplateViewModel ViewModel { get; private set; }\n        public ContentTemplate Template { get; private set; }\n        public IPage Page { get; private set; }\n        \n        public IFormCollection Form { get; private set; }\n        public ModelStateDictionary ModelState { get; private set; }\n\n\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Web/Services/ProjectEmailService.cs",
    "content": "﻿// Copyright (c) Source Tree Solutions, LLC. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.\n// Author:                  Joe Audette\n// Created:                 2016-04-21\n// Last Modified:           2018-03-12\n// \n\nusing cloudscribe.Email;\nusing cloudscribe.SimpleContent.Models;\nusing Microsoft.Extensions.Logging;\nusing cloudscribe.Web.Common.Razor;\nusing System;\nusing System.Threading.Tasks;\n\nnamespace cloudscribe.SimpleContent.Services\n{\n    public class ProjectEmailService : IProjectEmailService\n    {\n\n        public ProjectEmailService(\n            ViewRenderer viewRenderer,\n            IEmailSenderResolver emailSenderResolver,\n            ILogger<ProjectEmailService> logger)\n        {\n            _viewRenderer = viewRenderer;\n            _emailSenderResolver = emailSenderResolver;\n            _log = logger;\n        }\n\n        private ViewRenderer _viewRenderer;\n        private IEmailSenderResolver _emailSenderResolver;\n        private ILogger _log;\n\n        public async Task SendCommentNotificationEmailAsync(\n            IProjectSettings project,\n            IPost post,\n            IComment comment,\n            string postUrl,\n            string approveUrl,\n            string deleteUrl\n            )\n        {\n            var sender = await _emailSenderResolver.GetEmailSender(project.Id);\n            if (sender == null)\n            {\n                var logMessage = $\"failed to send comment notification email because email settings are not populated for site {project.Title}\";\n                _log.LogError(logMessage);\n                return;\n            }\n\n            if (string.IsNullOrWhiteSpace(project.CommentNotificationEmail))\n            {\n                var logMessage = $\"failed to send comment notification email because CommentNotificationEmail is not populated for project {project.Id}\";\n                _log.LogError(logMessage);\n                return;\n            }\n\n            \n            var model = new CommentNotificationModel(project, post, comment, postUrl);\n            var subject = \"Blog comment: \" + post.Title;\n\n            string plainTextMessage = null;\n            string htmlMessage = null;\n            \n            try\n            {\n                try\n                {\n                    htmlMessage \n                        = await _viewRenderer.RenderViewAsString<CommentNotificationModel>(\"CommentEmail\", model);\n                }\n                catch(Exception ex)\n                {\n                    _log.LogError(\"error generating html email from razor template\", ex);\n                    return;\n                }\n                \n                await sender.SendEmailAsync(\n                    project.CommentNotificationEmail, //to\n                    null, //from\n                    subject,\n                    plainTextMessage,\n                    htmlMessage,\n                    comment.Email, //replyto\n                    configLookupKey: project.Id\n                    ).ConfigureAwait(false);\n            }\n            catch (Exception ex)\n            {\n                _log.LogError($\"error sending comment notification email {ex.Message} : {ex.StackTrace}\");\n            }\n\n        }\n\n        \n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Web/Services/ProjectEmailServiceFake.cs",
    "content": "﻿using cloudscribe.SimpleContent.Models;\nusing System.Threading.Tasks;\n\nnamespace cloudscribe.SimpleContent.Services\n{\n    public class ProjectEmailServiceFake : IProjectEmailService\n    {\n        public Task SendCommentNotificationEmailAsync(\n            IProjectSettings project, \n            IPost post, \n            IComment comment, \n            string postUrl, \n            string approveUrl, \n            string deleteUrl)\n        {\n            return Task.FromResult(0);\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Web/Services/ProjectService.cs",
    "content": "﻿// Copyright (c) Source Tree Solutions, LLC. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.\n// Author:                  Joe Audette\n// Created:                 2016-02-09\n// Last Modified:           2019-03-04\n// \n\nusing cloudscribe.SimpleContent.Models;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace cloudscribe.SimpleContent.Services\n{\n    public class ProjectService : IProjectService\n    {\n\n        public ProjectService(\n            IProjectSettingsResolver settingsResolver,\n            IProjectQueries projectQueries,\n            IProjectCommands projectCommands\n            )\n        {\n            _projectQueries = projectQueries;\n            _projectCommands = projectCommands;\n            _settingsResolver = settingsResolver;\n           \n            \n        }\n        \n        private readonly IProjectQueries _projectQueries;\n        private readonly IProjectCommands _projectCommands;\n        private readonly IProjectSettingsResolver _settingsResolver;\n        private IProjectSettings _currentSettings = null;\n        \n\n\n        private async Task<bool> EnsureSettings()\n        {\n            if (_currentSettings != null) { return true; }\n            _currentSettings = await _settingsResolver.GetCurrentProjectSettings(CancellationToken.None);\n            if (_currentSettings != null)\n            {\n                return true;\n            }\n            return false;\n        }\n\n        public async Task Create(IProjectSettings project)\n        {\n            await _projectCommands.Create(project.Id, project, CancellationToken.None).ConfigureAwait(false);\n        }\n\n        public async Task Update(IProjectSettings project)\n        {\n            await _projectCommands.Update(project.Id, project, CancellationToken.None).ConfigureAwait(false);\n        }\n\n        public async Task<IProjectSettings> GetCurrentProjectSettings()\n        {\n            await EnsureSettings().ConfigureAwait(false);\n            return _currentSettings;\n        }\n\n        public async Task<IProjectSettings> GetProjectSettings(string projectId)\n        {\n            \n            return await _projectQueries.GetProjectSettings(projectId, CancellationToken.None).ConfigureAwait(false);\n        }\n\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Web/Services/Resources.cs",
    "content": "﻿namespace cloudscribe.SimpleContent.Web\n{\n    /// <summary>\n    /// this file is just used to inject a type for IStringLocalizer<SimpleContent>\n    /// for shared resources to be used in views and/or controllers\n    /// instead of having multiple resx files, we can have one for this project\n    /// </summary>\n    public class SimpleContent\n    {\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Web/Services/Truncation/FixedLengthTruncator.cs",
    "content": "﻿namespace Humanizer\n{\n    /// <summary>\n    /// Truncate a string to a fixed length\n    /// </summary>\n    class FixedLengthTruncator : ITruncator\n    {\n        public string Truncate(string value, int length, string truncationString, TruncateFrom truncateFrom = TruncateFrom.Right)\n        {\n            if (value == null)\n                return null;\n\n            if (value.Length == 0)\n                return value;\n\n            if (truncationString == null || truncationString.Length > length)\n                return truncateFrom == TruncateFrom.Right\n                    ? value.Substring(0, length)\n                    : value.Substring(value.Length - length);\n            \n\n            if (truncateFrom == TruncateFrom.Left)\n                return value.Length > length\n                    ? truncationString + value.Substring(value.Length - length + truncationString.Length)\n                    : value;\n\n            return value.Length > length\n                ? value.Substring(0, length - truncationString.Length) + truncationString\n                : value;\n        }\n    }\n}"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Web/Services/Truncation/FixedNumberOfCharactersTruncator.cs",
    "content": "using System;\nusing System.Linq;\n\nnamespace Humanizer\n{\n    /// <summary>\n    /// Truncate a string to a fixed number of letters or digits\n    /// </summary>\n    class FixedNumberOfCharactersTruncator : ITruncator\n    {\n        public string Truncate(string value, int length, string truncationString, TruncateFrom truncateFrom = TruncateFrom.Right)\n        {\n            if (value == null)\n                return null;\n\n            if (value.Length == 0)\n                return value;\n\n            if (truncationString == null)\n                truncationString = string.Empty;\n\n            if (truncationString.Length > length)\n                return truncateFrom == TruncateFrom.Right ? value.Substring(0, length) : value.Substring(value.Length - length);\n\n            var alphaNumericalCharactersProcessed = 0;\n\n            if (value.ToCharArray().Count(char.IsLetterOrDigit) <= length)\n                return value;\n\n            if (truncateFrom == TruncateFrom.Left)\n            {\n                for (var i = value.Length - 1; i > 0; i--)\n                {\n                    if (char.IsLetterOrDigit(value[i]))\n                        alphaNumericalCharactersProcessed++;\n\n                    if (alphaNumericalCharactersProcessed + truncationString.Length == length)\n                        return truncationString + value.Substring(i);\n                }         \n            }\n\n            for (var i = 0; i < value.Length - truncationString.Length; i++)\n            {\n                if (char.IsLetterOrDigit(value[i]))\n                    alphaNumericalCharactersProcessed++;\n\n                if (alphaNumericalCharactersProcessed + truncationString.Length == length)\n                    return value.Substring(0, i + 1) + truncationString;\n            }\n\n            return value;\n        }\n    }\n}"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Web/Services/Truncation/FixedNumberOfWordsTruncator.cs",
    "content": "using System;\nusing System.Linq;\n\nnamespace Humanizer\n{\n    /// <summary>\n    /// Truncate a string to a fixed number of words\n    /// </summary>\n    class FixedNumberOfWordsTruncator : ITruncator\n    {\n        public string Truncate(string value, int length, string truncationString, TruncateFrom truncateFrom = TruncateFrom.Right)\n        {\n            if (value == null)\n                return null;\n\n            if (value.Length == 0)\n                return value;\n\n            var numberOfWords = value.Split((char[])null, StringSplitOptions.RemoveEmptyEntries).Count();\n            if (numberOfWords <= length)\n                return value;\n\n            return truncateFrom == TruncateFrom.Left\n                ? TruncateFromLeft(value, length, truncationString)\n                : TruncateFromRight(value, length, truncationString);\n        }\n\n        private static string TruncateFromRight(string value, int length, string truncationString)\n        {\n            var lastCharactersWasWhiteSpace = true;\n            var numberOfWordsProcessed = 0;\n            for (var i = 0; i < value.Length; i++)\n            {\n                if (char.IsWhiteSpace(value[i]))\n                {\n                    if (!lastCharactersWasWhiteSpace)\n                        numberOfWordsProcessed++;\n\n                    lastCharactersWasWhiteSpace = true;\n\n                    if (numberOfWordsProcessed == length)\n                        return value.Substring(0, i) + truncationString;\n                }\n                else\n                    lastCharactersWasWhiteSpace = false;\n\n            }\n            return value + truncationString;\n        }\n\n        private static string TruncateFromLeft(string value, int length, string truncationString)\n        {\n            var lastCharactersWasWhiteSpace = true;\n            var numberOfWordsProcessed = 0;\n            for (var i = value.Length - 1; i > 0; i--)\n            {\n                if (char.IsWhiteSpace(value[i]))\n                {\n                    if (!lastCharactersWasWhiteSpace)\n                        numberOfWordsProcessed++;\n\n                    lastCharactersWasWhiteSpace = true;\n\n                    if (numberOfWordsProcessed == length)\n                        return truncationString + value.Substring(i + 1).TrimEnd();\n                }\n                else\n                    lastCharactersWasWhiteSpace = false;\n\n            }\n            return truncationString + value;\n        }\n    }\n}"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Web/Services/Truncation/ITruncator.cs",
    "content": "﻿namespace Humanizer\n{\n    /// <summary>\n    /// Can truncate a string.\n    /// </summary>\n    public interface ITruncator\n    {\n        /// <summary>\n        /// Truncate a string\n        /// </summary>\n        /// <param name=\"value\">The string to truncate</param>\n        /// <param name=\"length\">The length to truncate to</param>\n        /// <param name=\"truncationString\">The string used to truncate with</param>\n        /// <param name=\"truncateFrom\">The enum value used to determine from where to truncate the string</param>\n        /// <returns>The truncated string</returns>\n        string Truncate(string value, int length, string truncationString, TruncateFrom truncateFrom = TruncateFrom.Right);\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Web/Services/Truncation/TruncateExtensions.cs",
    "content": "﻿using System;\n\nnamespace Humanizer\n{\n    /// <summary>\n    /// Allow strings to be truncated\n    /// </summary>\n    public static class TruncateExtensions\n    {\n        /// <summary>\n        /// Truncate the string\n        /// </summary>\n        /// <param name=\"input\">The string to be truncated</param>\n        /// <param name=\"length\">The length to truncate to</param>\n        /// <returns>The truncated string</returns>\n        public static string Truncate(this string input, int length)\n        {\n            return input.Truncate(length, \"…\", Truncator.FixedLength);\n        }\n\n        /// <summary>\n        /// Truncate the string\n        /// </summary>\n        /// <param name=\"input\">The string to be truncated</param>\n        /// <param name=\"length\">The length to truncate to</param>\n        /// <param name=\"truncator\">The truncate to use</param>\n        /// <param name=\"from\">The enum value used to determine from where to truncate the string</param>\n        /// <returns>The truncated string</returns>\n        public static string Truncate(this string input, int length, ITruncator truncator, TruncateFrom from = TruncateFrom.Right)\n        {\n            return input.Truncate(length, \"…\", truncator, from);\n        }\n\n        /// <summary>\n        /// Truncate the string\n        /// </summary>\n        /// <param name=\"input\">The string to be truncated</param>\n        /// <param name=\"length\">The length to truncate to</param>\n        /// <param name=\"truncationString\">The string used to truncate with</param>\n        /// <param name=\"from\">The enum value used to determine from where to truncate the string</param>\n        /// <returns>The truncated string</returns>\n        public static string Truncate(this string input, int length, string truncationString, TruncateFrom from = TruncateFrom.Right)\n        {\n            return input.Truncate(length, truncationString, Truncator.FixedLength, from);\n        }\n\n        /// <summary>\n        /// Truncate the string\n        /// </summary>\n        /// <param name=\"input\">The string to be truncated</param>\n        /// <param name=\"length\">The length to truncate to</param>\n        /// <param name=\"truncationString\">The string used to truncate with</param>\n        /// <param name=\"truncator\">The truncator to use</param>\n        /// <param name=\"from\">The enum value used to determine from where to truncate the string</param>\n        /// <returns>The truncated string</returns>\n        public static string Truncate(this string input, int length, string truncationString, ITruncator truncator, TruncateFrom from = TruncateFrom.Right)\n        {\n            if (truncator == null)\n                throw new ArgumentNullException(nameof(truncator));\n\n            if (input == null)\n                return null;\n\n            return truncator.Truncate(input, length, truncationString, from);\n        }\n    }\n\n    /// <summary>\n    /// Truncation location for humanizer\n    /// </summary>\n    public enum TruncateFrom\n    {\n        /// <summary>\n        /// Truncate letters from the left (start) of the string\n        /// </summary>\n        Left,\n        /// <summary>\n        /// Truncate letters from the right (end) of the string\n        /// </summary>\n        Right\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Web/Services/Truncation/Truncator.cs",
    "content": "﻿namespace Humanizer\n{\n    /// <summary>\n    /// Gets a ITruncator\n    /// </summary>\n    public static class Truncator\n    {\n        /// <summary>\n        /// Fixed length truncator\n        /// </summary>\n        public static ITruncator FixedLength\n        {\n            get\n            {\n                return new FixedLengthTruncator();\n            }\n        }\n\n        /// <summary>\n        /// Fixed number of characters truncator\n        /// </summary>\n        public static ITruncator FixedNumberOfCharacters\n        {\n            get\n            {\n                return new FixedNumberOfCharactersTruncator();\n            }\n        }\n\n        /// <summary>\n        /// Fixed number of words truncator\n        /// </summary>\n        public static ITruncator FixedNumberOfWords\n        {\n            get\n            {\n                return new FixedNumberOfWordsTruncator();\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Web/StartupExtensions.cs",
    "content": "﻿using cloudscribe.DateTimeUtils;\nusing cloudscribe.SimpleContent.Models;\nusing cloudscribe.SimpleContent.Services;\nusing cloudscribe.SimpleContent.Web;\nusing cloudscribe.SimpleContent.Web.Design;\nusing cloudscribe.SimpleContent.Web.Services;\nusing cloudscribe.SimpleContent.Web.TagHelpers;\nusing cloudscribe.SimpleContent.Web.Templating;\nusing cloudscribe.Versioning;\nusing cloudscribe.Web.Common.Razor;\nusing cloudscribe.Web.Navigation;\nusing cloudscribe.Web.SiteMap;\nusing MediatR;\nusing Microsoft.AspNetCore.Builder;\nusing Microsoft.AspNetCore.Routing;\nusing Microsoft.Extensions.Configuration;\nusing Microsoft.Extensions.DependencyInjection.Extensions;\nusing System.Reflection;\n\nnamespace Microsoft.Extensions.DependencyInjection\n{\n    public static class StartupExtensions\n    {\n       \n        public static IServiceCollection AddSimpleContentMvc(\n            this IServiceCollection services,\n            IConfiguration configuration\n            )\n        {\n            services.TryAddScoped<IPageRoutes, DefaultPageRoutes>();\n            services.TryAddScoped<IBlogRoutes, DefaultBlogRoutes>();\n            services.TryAddScoped<IBlogService, BlogService>();\n            services.TryAddScoped<IAuthorNameResolver, DefaultAuthorNameResolver>();\n            services.TryAddScoped<PageEvents, PageEvents>();\n            services.TryAddScoped<PostEvents, PostEvents>();\n\n            services.TryAddScoped<IPageService, PageService>();\n            services.AddScoped<DraftPublishService>();\n            services.AddScoped<JsSecuritySanitizer>();\n            services.TryAddScoped<IProjectService, ProjectService>();\n            services.TryAddScoped<IProjectSettingsResolver, DefaultProjectSettingsResolver>();\n            services.TryAddScoped<IMediaProcessor, FileSystemMediaProcessor>();\n\n            services.TryAddScoped<IMarkdownProcessor, MarkdownProcessor>();\n            services.TryAddScoped<IContentProcessor, ContentProcessor>();\n\n            services.TryAddScoped<TeaserCache>();\n            services.TryAddScoped<ITeaserService, TeaserService>();\n            \n            services.TryAddScoped<IProjectEmailService, ProjectEmailService>();\n            services.TryAddScoped<ViewRenderer, ViewRenderer>();\n            \n            //services.TryAddScoped<IPageNavigationCacheKeys, PageNavigationCacheKeys>();\n            services.AddScoped<INavigationTreeBuilder, PagesNavigationTreeBuilder>();\n            services.AddScoped<ISiteMapNodeService, BlogSiteMapNodeService>();\n            services.AddScoped<IFindCurrentNode, NavigationBlogNodeFinder>();\n\n            services.TryAddScoped<IRoleSelectorProperties, NotImplementedRoleSelectorProperties>();\n\n            services.AddScoped<IVersionProvider, VersionInfo>();\n            services.AddScoped<IVersionProvider, DataStorageVersionInfo>();\n\n            if (configuration != null)\n            {   \n                services.Configure<IconCssClasses>(configuration.GetSection(\"IconCssClasses\"));\n                services.Configure<PageEditOptions>(configuration.GetSection(\"PageEditOptions\"));\n                services.Configure<BlogEditOptions>(configuration.GetSection(\"BlogEditOptions\"));\n                services.Configure<SimpleContentIconConfig>(configuration.GetSection(\"SimpleContentIconConfig\"));\n                services.Configure<SimpleContentThemeConfig>(configuration.GetSection(\"SimpleContentThemeConfig\"));\n                services.Configure<ContentTemplateConfig>(configuration.GetSection(\"ContentTemplateConfig\"));\n                services.Configure<ContentLocalizationOptions>(configuration.GetSection(\"ContentLocalizationOptions\"));\n\n                \n            }\n            else\n            {\n                // not doing anything just configuring the default\n                services.Configure<IconCssClasses>(c => {  });\n                services.Configure<PageEditOptions>(c => { });\n                services.Configure<BlogEditOptions>(c => { });\n                services.Configure<SimpleContentIconConfig>(c => { });\n                services.Configure<SimpleContentThemeConfig>(c => {  });\n                services.Configure<ContentTemplateConfig>(c => { });\n                services.Configure<ContentLocalizationOptions>(c => { });\n            }\n            \n            services.TryAddScoped<ISimpleContentThemeHelper, DefaultSimpleContentThemeHelper>();\n\n            // jk breaking change in Mediatr v12 will be...:\n            //services.AddMediatR(cfg => cfg.RegisterServicesFromAssemblies(Assembly.GetExecutingAssembly()));\n            services.AddMediatR(typeof(PageService).Assembly);\n            \n\n            services.AddScoped<IParseModelFromForm, DefaultModelFormParser>();\n            services.AddScoped<IValidateTemplateModel, DefaultTemplateModelValidator>();\n            \n            services.TryAddScoped<IPageUrlResolver, PageUrlResolver>();\n            services.TryAddScoped<IBlogUrlResolver, BlogUrlResolver>();\n\n            services.AddSingleton<IModelSerializer, JsonModelSerializer>();\n            services.AddSingleton<IContentTemplateProvider, ConfigContentTemplateProvider>();\n            services.TryAddSingleton<IContentTemplateService, ContentTemplateService>();\n\n            services.TryAddScoped<ITimeZoneIdResolver, DefaultTimeZoneIdResolver>();\n            \n            services.AddScoped<CultureHelper>();\n\n            return services;\n        }\n\n        \n\n        \n\n\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Web/TagHelpers/IRoleSelectorProperties.cs",
    "content": "﻿using System.Collections.Generic;\n\nnamespace cloudscribe.SimpleContent.Web.TagHelpers\n{\n    public interface IRoleSelectorProperties\n    {\n        string Controller { get; }\n\n        string Action { get; }\n\n        Dictionary<string, string> GetAttributes(string csvTargetElementId, string displayTargetId = \"\");\n\n        Dictionary<string, string> GetRouteParams(string projectId);\n\n        List<string> RequiredScriptPaths { get; }\n\n        //string CsvTargetElementId { get; }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Web/TagHelpers/NotImplementedRoleSelectorProperties.cs",
    "content": "﻿using System.Collections.Generic;\n\nnamespace cloudscribe.SimpleContent.Web.TagHelpers\n{\n    public class NotImplementedRoleSelectorProperties : IRoleSelectorProperties\n    {\n        public string Action\n        {\n            get { return string.Empty; }\n        }\n\n        public string Controller\n        {\n            get { return string.Empty; }\n        }\n\n        public Dictionary<string, string> GetAttributes(string csvTargetElementId, string displayTargetId = \"\")\n        {\n            return null; \n        }\n        \n        public Dictionary<string, string> GetRouteParams(string projectId)\n        {\n            return null; \n        }\n\n        public List<string> RequiredScriptPaths\n        {\n            get { return null; }\n        }\n\n       \n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Web/TagHelpers/RoleSelectorTagHelper.cs",
    "content": "﻿// Copyright (c) Source Tree Solutions, LLC. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.\n// Author:\t\t\t\t\tJoe Audette\n// Created:\t\t\t\t\t2016-08-26\n// Last Modified:\t\t\t2016-08-27\n// \n\nusing Microsoft.AspNetCore.Mvc.TagHelpers;\nusing Microsoft.AspNetCore.Mvc.ViewFeatures;\nusing Microsoft.AspNetCore.Razor.TagHelpers;\nusing System.Threading.Tasks;\n\nnamespace cloudscribe.SimpleContent.Web.TagHelpers\n{\n    /// <summary>\n    /// purpose to allow external components to provide a way to select roles\n    /// specifically when using SimpleContent with cloudscribe.Core, we need a way to provide the controller and action and data-*\n    /// attributes to open modal for role selection and a way to feed the selected roles back into SimpleContent page editor\n    /// abstracting the IRoleSelectorProperties allows us to avoid coupling dependencies since SimpleContent can be used without\n    /// cloudscribe.Core. If the default NotImplementedRoleSelectorProperties is used then the selection link/button is not rendered at all\n    /// </summary>\n    [HtmlTargetElement(\"a\", Attributes = \"csc-role-selector,csc-projectId\")]\n    public class RoleSelectorTagHelper : AnchorTagHelper\n    {\n        private const string RoleSelectorAttributeName = \"csc-role-selector\";\n        private const string ProjectIdAttributeName = \"csc-projectId\";\n        private const string CsvTargetIdAttributeName = \"csc-target-id\";\n        private const string DisplayTargetIdAttributeName = \"csc-display-target-id\";\n\n        public RoleSelectorTagHelper(\n            IHtmlGenerator generator\n            ) : base(generator)\n        {\n            \n        }\n        \n        [HtmlAttributeName(RoleSelectorAttributeName)]\n        public IRoleSelectorProperties RoleSelectorInfo { get; set; } = null;\n        \n        [HtmlAttributeName(ProjectIdAttributeName)]\n        public string ProjectId { get; set; } = string.Empty;\n\n        [HtmlAttributeName(CsvTargetIdAttributeName)]\n        public string CsvTargetElementId { get; set; } = string.Empty;\n\n        [HtmlAttributeName(DisplayTargetIdAttributeName)]\n        public string DisplayTargetElementId { get; set; } = string.Empty;\n\n        public override async Task ProcessAsync(TagHelperContext context, TagHelperOutput output)\n        {\n            if (RoleSelectorInfo == null \n                || string.IsNullOrEmpty(RoleSelectorInfo.Controller) \n                || string.IsNullOrEmpty(RoleSelectorInfo.Action)\n                || string.IsNullOrEmpty(ProjectId)\n                || string.IsNullOrEmpty(CsvTargetElementId)\n                )\n            {\n                output.SuppressOutput();\n                return;\n            }\n            \n            // we don't need to render these\n            var markerAttribute = new TagHelperAttribute(RoleSelectorAttributeName);\n            output.Attributes.Remove(markerAttribute);\n            var projectAttribute = new TagHelperAttribute(ProjectIdAttributeName);\n            output.Attributes.Remove(projectAttribute);\n            var csvAttribute = new TagHelperAttribute(CsvTargetIdAttributeName);\n            output.Attributes.Remove(csvAttribute);\n            var displayAttribute = new TagHelperAttribute(DisplayTargetIdAttributeName);\n            output.Attributes.Remove(displayAttribute);\n            //\n\n            this.Action = RoleSelectorInfo.Action;\n            this.Controller = RoleSelectorInfo.Controller;\n            var routeParams = RoleSelectorInfo.GetRouteParams(ProjectId);\n            if(routeParams != null)\n            {\n                foreach(var param in routeParams)\n                {\n                    this.RouteValues.Add(param.Key, param.Value);\n                }\n            }\n            var atts = RoleSelectorInfo.GetAttributes(CsvTargetElementId, DisplayTargetElementId);\n            if(atts != null)\n            {\n                foreach(var att in atts)\n                {\n                    output.Attributes.Add(new TagHelperAttribute(att.Key, att.Value));\n                }\n            }\n            \n            await base.ProcessAsync(context, output);\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Web/TagHelpers/SchemaOrgMetaTagHelper.cs",
    "content": "// Copyright (c) Source Tree Solutions, LLC. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.\n// Author:\t\t\t\t\tJoe Audette\n// Created:\t\t\t\t\t2017-03-06\n// Last Modified:\t\t\t2017-03-06\n// \n\nusing Microsoft.AspNetCore.Html;\nusing Microsoft.AspNetCore.Mvc.TagHelpers;\nusing Microsoft.AspNetCore.Mvc.ViewFeatures;\nusing Microsoft.AspNetCore.Razor.TagHelpers;\nusing System.Globalization;\nusing System.Threading.Tasks;\nusing System.Text;\n\nnamespace cloudscribe.SimpleContent.Web.TagHelpers\n{\n    [HtmlTargetElement(\"schema-org-meta\")]\n    public class SchemaOrgMetaTagHelper : TagHelper\n    {\n       \n        private const string ItemPropAttributeName = \"itemprop\";\n\n        private const string ItemTypeAttributeName = \"itemtype\";\n\n        private const string ItemScopeAttributeName = \"itemscope\";\n        private const string ContentAttributeName = \"content\";\n\n        [HtmlAttributeName(ItemPropAttributeName)]\n        public string ItemProp { get; set; } \n\n        [HtmlAttributeName(ItemTypeAttributeName)]\n        public string ItemType { get; set; } \n\n        [HtmlAttributeName(ContentAttributeName)]\n        public string Content { get; set; } \n\n        \n        public override void Process(TagHelperContext context, TagHelperOutput output)\n        {\n            if (string.IsNullOrEmpty(ItemProp))\n            {\n                output.SuppressOutput();\n                return;\n            }\n\n            if (string.IsNullOrEmpty(Content))\n            {\n                output.SuppressOutput();\n                return;\n            }\n           \n            \n\n            output.TagName = \"meta\";    // Replaces <schema-org-meta> with <meta> tag\n            output.TagMode = TagMode.SelfClosing;\n            output.Attributes.Add(ItemPropAttributeName, ItemProp);\n            \n            if(!string.IsNullOrEmpty(ItemType))\n            {\n                output.Attributes.Add(ItemScopeAttributeName, \"\");\n\n                output.Attributes.Add(ItemTypeAttributeName, ItemType);\n\n            }\n            output.Attributes.Add(ContentAttributeName, Content);\n            //output.Attributes.Add( new TagHelperAttribute(\"type\", new HtmlString(\"application/ld+json\")));\n\n            \n\n\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Web/Templating/ConfigContentTemplateProvider.cs",
    "content": "﻿// Copyright (c) Source Tree Solutions, LLC. All rights reserved.\n// Author:                  Joe Audette\n// Created:                 2018-06-20\n// Last Modified:           2018-07-10\n// \n\nusing cloudscribe.SimpleContent.Models;\nusing Microsoft.Extensions.Options;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading.Tasks;\n\nnamespace cloudscribe.SimpleContent.Web.Services\n{\n    public class ConfigContentTemplateProvider : IContentTemplateProvider\n    {\n        public ConfigContentTemplateProvider(IOptions<ContentTemplateConfig> configAccessor)\n        {\n            _configuredTemplates = configAccessor.Value;\n        }\n\n        private ContentTemplateConfig _configuredTemplates;\n\n        public Task<List<ContentTemplate>> GetAllTemplates()\n        {\n            var result = _configuredTemplates.Templates.ToList();\n\n            return Task.FromResult(result);\n\n        }\n        \n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Web/Templating/ContentTemplateService.cs",
    "content": "﻿// Copyright (c) Source Tree Solutions, LLC. All rights reserved.\n// Author:                  Joe Audette\n// Created:                 2018-06-21\n// Last Modified:           2018-07-14\n// \n\nusing cloudscribe.Pagination.Models;\nusing cloudscribe.SimpleContent.Models;\nusing Microsoft.Extensions.Logging;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace cloudscribe.SimpleContent.Web.Templating\n{\n    public class ContentTemplateService : IContentTemplateService\n    {\n        public ContentTemplateService(\n            IEnumerable<IContentTemplateProvider> templateProviders,\n            IEnumerable<IModelSerializer> serializers,\n            ILogger<ContentTemplateService> logger\n             )\n        {\n            _templateProviders = templateProviders;\n            _serializers = serializers;\n            _log = logger;\n            \n        }\n\n        private readonly IEnumerable<IContentTemplateProvider> _templateProviders;\n        private readonly IEnumerable<IModelSerializer> _serializers;\n        private readonly ILogger _log;\n\n        private List<ContentTemplate> _aggregateTemplates = null;\n\n        private async Task EnsureAggregateTemplates()\n        {\n            if(_aggregateTemplates != null) { return; }\n\n            _aggregateTemplates = new List<ContentTemplate>();\n            foreach (var provider in _templateProviders)\n            {\n                var templates = await provider.GetAllTemplates().ConfigureAwait(false);\n                _aggregateTemplates.AddRange(templates);\n            }\n        }\n\n        private IModelSerializer GetSerializer(string name)\n        {\n            foreach (var s in _serializers)\n            {\n                if (s.Name == name) return s;\n            }\n\n            return _serializers.FirstOrDefault();\n        }\n\n     \n        public object DesrializeTemplateModel(IPage page, ContentTemplate template, bool allowDraft = true)\n        {\n            string modelString;\n\n            if(allowDraft && !string.IsNullOrWhiteSpace(page.DraftSerializedModel))\n            {\n                modelString = page.DraftSerializedModel;\n            }\n            else\n            {\n                modelString = page.SerializedModel;\n            }\n            if(string.IsNullOrWhiteSpace(modelString))\n            {\n                _log.LogError($\"could not deserialize model from empty string on page {page.Title}\");\n                return null;\n            }\n            var serializer = GetSerializer(template.SerializerName);\n\n            try\n            {\n                var result = serializer.Deserialize(template.ModelType, modelString);\n                return result;\n            }\n            catch(Exception ex)\n            {\n                _log.LogError($\"Failed to deserialize model for page {page.Title} returning null. Exception was {ex.Message}:{ex.StackTrace}\");\n                return null;\n            }\n            \n            \n        }\n\n        public object DesrializeTemplateModel(IPost post, ContentTemplate template)\n        {\n            string modelString;\n            if (!string.IsNullOrWhiteSpace(post.DraftSerializedModel))\n            {\n                modelString = post.DraftSerializedModel;\n            }\n            else\n            {\n                modelString = post.SerializedModel;\n            }\n            if (string.IsNullOrWhiteSpace(modelString))\n            {\n                _log.LogError($\"could not deserialize model from empty string on page {post.Title}\");\n                return null;\n            }\n            var serializer = GetSerializer(template.SerializerName);\n\n            try\n            {\n                var result = serializer.Deserialize(template.ModelType, modelString);\n                return result;\n            }\n            catch (Exception ex)\n            {\n                _log.LogError($\"Failed to deserialize model for page {post.Title} returning null. Exception was {ex.Message}:{ex.StackTrace}\");\n                return null;\n            }\n\n\n        }\n\n\n        public async Task<int> GetCountOfTemplates(\n            string projectId,\n            string forFeature\n            )\n        {\n            await EnsureAggregateTemplates();\n\n            return _aggregateTemplates.Where(x =>\n                 (x.ProjectId == \"*\" || x.ProjectId == projectId)\n                  && (true.Equals(x.Enabled))\n                  && (x.AvailableForFeature == \"*\" || x.AvailableForFeature == forFeature)\n                  )\n                .Count();\n        }\n\n\n        public async Task<PagedResult<ContentTemplate>> GetTemplates(\n            string projectId, \n            string forFeature, \n            string query,\n            int pageNumber,\n            int pageSize,\n            CancellationToken cancellationToken = default(CancellationToken)\n            )\n        {\n            await EnsureAggregateTemplates();\n\n            int offset = (pageSize * pageNumber) - pageSize;\n\n            var result = new PagedResult<ContentTemplate>()\n            {\n                PageNumber = pageNumber,\n                PageSize = pageSize\n            };\n\n            var list = _aggregateTemplates.Where(x =>\n                 (x.ProjectId == \"*\" || x.ProjectId == projectId)\n                  && (true.Equals(x.Enabled))\n                  && (x.AvailableForFeature == \"*\" || x.AvailableForFeature == forFeature)\n                  && ((query == null) || x.Title.ToUpper().Contains(query.ToUpper()))\n                )\n                .ToList();\n\n            result.TotalItems = list.Count;\n            result.Data = list.OrderBy(x => x.GroupSort1).ThenBy(x => x.GroupSort2).ThenBy(x => x.Title)\n                .Skip(offset)\n                .Take(pageSize)\n                .ToList()\n                ;\n\n\n            return result;\n\n        }\n\n        public async Task<ContentTemplate> GetTemplate(\n            string projectId, \n            string key, \n            CancellationToken cancellationToken = default(CancellationToken))\n        {\n            await EnsureAggregateTemplates();\n            \n            return _aggregateTemplates.Where(x => \n                    (x.ProjectId == \"*\" || x.ProjectId == projectId) \n                    && x.Key == key\n                )\n                .FirstOrDefault();\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Web/Templating/DefaultModelFormParser.cs",
    "content": "﻿// Copyright (c) Source Tree Solutions, LLC. All rights reserved.\n// Author:                  Joe Audette\n// Created:                 2018-06-22\n// Last Modified:           2018-07-10\n// \n\nusing Microsoft.AspNetCore.Http;\nusing Microsoft.Extensions.Logging;\nusing Newtonsoft.Json;\nusing System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.Net;\n\nnamespace cloudscribe.SimpleContent.Web.Templating\n{\n    public class DefaultModelFormParser : IParseModelFromForm\n    {\n        public DefaultModelFormParser(\n            ILogger<DefaultModelFormParser> logger\n            )\n        {\n            Log = logger;\n        }\n\n        protected ILogger Log { get; private set; }\n\n        public string ParserName { get; } = \"DefaultModelFormParser\";\n\n        public virtual object ParseModel(string modelType, IFormCollection form)\n        {\n            if (string.IsNullOrWhiteSpace(modelType))\n            {\n                Log.LogError(\"modelType was empty\");\n                return null;\n            }\n            if(form == null)\n            {\n                Log.LogError(\"form was null\");\n                return null;\n            }\n\n            try\n            {\n                var type = Type.GetType(modelType);\n                var model = Activator.CreateInstance(type);\n                var modelProps = model.GetType().GetProperties();\n                foreach(var prop in modelProps)\n                {\n                    var formVal = form[prop.Name].ToString();\n                    if(string.IsNullOrWhiteSpace(formVal))\n                    { \n                        Log.LogDebug($\"no form value found for {prop.Name}\");\n                    }\n                    \n                    try\n                    {\n                        if(prop.PropertyType == typeof(DateTime?) || prop.PropertyType == typeof(DateTime))\n                        {\n                            if (!string.IsNullOrWhiteSpace(formVal))\n                            {\n                                prop.SetValue(model, Convert.ToDateTime(formVal), null);\n                            }\n                                    \n                        }\n                        else if(prop.PropertyType == typeof(decimal?) || prop.PropertyType == typeof(decimal))\n                        {\n                            if (!string.IsNullOrWhiteSpace(formVal))\n                            {\n                                prop.SetValue(model, Convert.ToDecimal(formVal), null);\n                            }    \n                        }\n                        else if (prop.PropertyType == typeof(int?) || prop.PropertyType == typeof(int))\n                        {\n                            if (!string.IsNullOrWhiteSpace(formVal))\n                            {\n                                prop.SetValue(model, Convert.ToInt32(formVal), null);\n                            }     \n                        }\n                        else if (prop.PropertyType == typeof(long?) || prop.PropertyType == typeof(long))\n                        {\n                            if (!string.IsNullOrWhiteSpace(formVal))\n                            {\n                                prop.SetValue(model, Convert.ToInt64(formVal), null);\n                            }       \n                        }\n                        else if (prop.PropertyType == typeof(double?) || prop.PropertyType == typeof(double))\n                        {\n                            if (!string.IsNullOrWhiteSpace(formVal))\n                            {\n                                prop.SetValue(model, Convert.ToDouble(formVal), null);\n                            }     \n                        }\n                        else if (prop.PropertyType == typeof(bool?) || prop.PropertyType == typeof(bool))\n                        {\n                            if (!string.IsNullOrWhiteSpace(formVal))\n                            {\n                                // tag helpers for bool checkboxes send back \"true,false\"\n\n                                if(formVal.ToLower().Contains(\"true\"))\n                                    prop.SetValue(model, true, null);\n                                else\n                                    prop.SetValue(model, false, null);\n                            }      \n                        }\n                        else if (prop.PropertyType == typeof(Guid?) || prop.PropertyType == typeof(Guid))\n                        {\n                            if (!string.IsNullOrWhiteSpace(formVal) && formVal.Length == 36)\n                            {\n                                prop.SetValue(model, new Guid(formVal), null);\n                            }\n                        }\n                        else\n                        {\n                            if (!string.IsNullOrWhiteSpace(formVal))\n                            {\n                                prop.SetValue(model, Convert.ChangeType(formVal, prop.PropertyType), null);\n                            } \n                            else\n                            {\n                                foreach(Type interfaceType in prop.PropertyType.GetInterfaces())\n                                {\n                                    if (interfaceType.IsGenericType && interfaceType.GetGenericTypeDefinition() == typeof(IList<>))\n                                    {\n                                        Type itemType = prop.PropertyType.GetGenericArguments()[0];\n                                        Log.LogDebug($\"found Ilist {prop.Name}\");\n                                        var jsonVal = WebUtility.UrlDecode(form[prop.Name + \"Json\"].ToString());\n                                        if (!string.IsNullOrWhiteSpace(jsonVal))\n                                        {\n                                            Log.LogDebug($\"found json for {prop.Name}\");\n                                            var jsonSettings = new JsonSerializerSettings { DefaultValueHandling = DefaultValueHandling.Include };\n                                            var obj = JsonConvert.DeserializeObject(jsonVal, prop.PropertyType, jsonSettings);\n                                            prop.SetValue(model, obj, null);\n\n                                        }\n\n                                        break;\n                                    }\n                                }\n                            }\n                        }\n\n                            \n                    }\n                    catch(Exception ex)\n                    {\n                        Log.LogError($\"failed to set property {prop.Name} using {formVal}. error:{ex.Message}:{ex.StackTrace}\");\n                    }\n                        \n                    Log.LogDebug($\"value {formVal} found for {prop.Name}\");\n                    \n                    \n                }\n\n                return model;\n\n            }\n            catch(Exception ex)\n            {\n                Log.LogError($\"{ex.Message}:{ex.StackTrace}\");\n                return null;\n            }\n            \n\n            \n        }\n\n\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Web/Templating/DefaultTemplateModelValidator.cs",
    "content": "﻿// Copyright (c) Source Tree Solutions, LLC. All rights reserved.\n// Author:                  Joe Audette\n// Created:                 2018-06-22\n// Last Modified:           2018-06-27\n// \n\nusing System.Collections.Generic;\nusing System.ComponentModel.DataAnnotations;\n\nnamespace cloudscribe.SimpleContent.Web.Templating\n{\n    public class DefaultTemplateModelValidator : IValidateTemplateModel\n    {\n\n        public string ValidatorName { get; } = \"DefaultTemplateModelValidator\";\n\n        public virtual bool IsValid(object model, ValidationContext validationContext, List<ValidationResult> results)\n        {\n            return Validator.TryValidateObject(model, validationContext, results);\n        }\n\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Web/Templating/IParseModelFromForm.cs",
    "content": "﻿using Microsoft.AspNetCore.Http;\n\nnamespace cloudscribe.SimpleContent.Web.Templating\n{\n    public interface IParseModelFromForm\n    {\n        string ParserName { get; }\n        object ParseModel(string modelType, IFormCollection form);\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Web/Templating/IValidateTemplateModel.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.ComponentModel.DataAnnotations;\n\nnamespace cloudscribe.SimpleContent.Web.Templating\n{\n    public interface IValidateTemplateModel\n    {\n        string ValidatorName { get; }\n        bool IsValid(object model, ValidationContext validationContext, List<ValidationResult> results);\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Web/VersionInfo.cs",
    "content": "﻿// Copyright(c) Source Tree Solutions, LLC.All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.\n//  Author:                     Joe Audette\n//  Created:                    2017-09-23\n//\tLast Modified:              2017-10-05\n// \n\nusing cloudscribe.SimpleContent.Models;\nusing cloudscribe.SimpleContent.Services;\nusing cloudscribe.Versioning;\nusing System;\nusing System.Reflection;\n\n\nnamespace cloudscribe.SimpleContent.Web\n{\n    public class VersionInfo : IVersionProvider\n    {\n        public string Name { get { return \"cloudscribe.SimpleContent.Web\"; } }\n\n        public Guid ApplicationId { get { return new Guid(\"f83067b4-919d-4910-acd1-4b3b1c210ecf\"); } }\n\n        public Version CurrentVersion\n        {\n\n            get\n            {\n\n                var version = new Version(2, 0, 0, 0);\n                var versionString = typeof(PageService).Assembly.GetCustomAttribute<AssemblyFileVersionAttribute>().Version;\n                if (!string.IsNullOrWhiteSpace(versionString))\n                {\n                    Version.TryParse(versionString, out version);\n                }\n\n                return version;\n            }\n        }\n    }\n\n    public class DataStorageVersionInfo : IVersionProvider\n    {\n        public DataStorageVersionInfo(\n            IStorageInfo dbPlatform)\n        {\n            _dbPlatform = dbPlatform;\n            name = _dbPlatform.GetType().Assembly.GetName().Name;\n\n        }\n\n        private IStorageInfo _dbPlatform;\n        private string name = \"DataStorageVersionInfo\";\n\n        public string Name\n        {\n            get { return name; }\n\n        }\n\n        public Guid ApplicationId { get { return new Guid(\"c0928150-0f7b-498a-b33b-1d113681d69a\"); } }\n\n        public Version CurrentVersion\n        {\n\n            get\n            {\n\n                var version = new Version(2, 0, 0, 0);\n                var versionString = _dbPlatform.GetType().Assembly.GetCustomAttribute<AssemblyFileVersionAttribute>().Version;\n                if (!string.IsNullOrWhiteSpace(versionString))\n                {\n                    Version.TryParse(versionString, out version);\n                }\n\n                return version;\n            }\n        }\n\n    }\n\n    \n\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Web/ViewComponents/FeaturedPostsViewComponent.cs",
    "content": "﻿using cloudscribe.DateTimeUtils;\nusing cloudscribe.SimpleContent.Models;\nusing cloudscribe.SimpleContent.Web.Services;\nusing cloudscribe.SimpleContent.Web.ViewModels;\nusing Microsoft.AspNetCore.Mvc;\nusing System.Threading.Tasks;\n\nnamespace cloudscribe.SimpleContent.Web\n{\n    public class FeaturedPostsViewComponent : ViewComponent\n    {\n        public FeaturedPostsViewComponent(\n            IProjectService projectService,\n            IPostQueries postQueries,\n            IContentProcessor contentProcessor,\n            ITimeZoneHelper timeZoneHelper\n            )\n        {\n            _projectService = projectService;\n            _postQueries = postQueries;\n            _timeZoneHelper = timeZoneHelper;\n            _contentProcessor = contentProcessor;\n        }\n\n        private readonly IProjectService _projectService;\n        private readonly IPostQueries _postQueries;\n        private readonly ITimeZoneHelper _timeZoneHelper;\n        private readonly IContentProcessor _contentProcessor;\n\n        public async Task<IViewComponentResult> InvokeAsync(string viewName = \"FeaturedPosts\", int numberToShow = 5)\n        {\n            var model = new RecentPostsViewModel(_contentProcessor);\n            var settings = await _projectService.GetCurrentProjectSettings().ConfigureAwait(false);\n            var list = await _postQueries.GetFeaturedPosts(settings.Id, numberToShow);\n            model.ProjectSettings = settings;\n            model.Posts = list;\n            model.TimeZoneHelper = _timeZoneHelper;\n            model.TimeZoneId = model.ProjectSettings.TimeZoneId;\n\n            return View(viewName, model);\n        }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Web/ViewComponents/RecentPostsViewComponent.cs",
    "content": "﻿using cloudscribe.DateTimeUtils;\nusing cloudscribe.SimpleContent.Models;\nusing cloudscribe.SimpleContent.Web.Services;\nusing cloudscribe.SimpleContent.Web.ViewModels;\nusing Microsoft.AspNetCore.Mvc;\nusing System.Threading.Tasks;\n\nnamespace cloudscribe.SimpleContent.Web\n{\n    public class RecentPostsViewComponent : ViewComponent\n    {\n        public RecentPostsViewComponent(\n            IProjectService projectService,\n            IPostQueries postQueries,\n            IContentProcessor contentProcessor,\n            ITimeZoneHelper timeZoneHelper\n            )\n        {\n            _projectService = projectService;\n            _postQueries = postQueries;\n            _timeZoneHelper = timeZoneHelper;\n            _contentProcessor = contentProcessor;\n        }\n\n        private IProjectService _projectService;\n        private IPostQueries _postQueries;\n        private ITimeZoneHelper _timeZoneHelper;\n        private IContentProcessor _contentProcessor;\n\n\n        public async Task<IViewComponentResult> InvokeAsync(string viewName = \"RecentPosts\", int numberToShow = 5)\n        {\n            var model = new RecentPostsViewModel(_contentProcessor);\n            var settings = await _projectService.GetCurrentProjectSettings().ConfigureAwait(false);\n            var list = await _postQueries.GetRecentPosts(settings.Id, numberToShow);\n            model.ProjectSettings = settings;\n            model.Posts = list;\n            model.TimeZoneHelper = _timeZoneHelper;\n            model.TimeZoneId = model.ProjectSettings.TimeZoneId;\n\n            return View(viewName, model);\n        }\n\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Web/ViewComponents/RelatedPostsViewComponent.cs",
    "content": "﻿using cloudscribe.DateTimeUtils;\nusing cloudscribe.SimpleContent.Models;\nusing cloudscribe.SimpleContent.Web.Services;\nusing cloudscribe.SimpleContent.Web.ViewModels;\nusing Microsoft.AspNetCore.Mvc;\nusing System.Threading.Tasks;\n\nnamespace cloudscribe.SimpleContent.Web.ViewComponents\n{\n    public class RelatedPostsViewComponent : ViewComponent\n    {\n        public RelatedPostsViewComponent(\n            IProjectService projectService,\n            IPostQueries postQueries,\n            IContentProcessor contentProcessor,\n            ITimeZoneHelper timeZoneHelper\n            )\n        {\n            _projectService = projectService;\n            _postQueries = postQueries;\n            _timeZoneHelper = timeZoneHelper;\n            _contentProcessor = contentProcessor;\n        }\n\n        private readonly IProjectService _projectService;\n        private readonly IPostQueries _postQueries;\n        private readonly ITimeZoneHelper _timeZoneHelper;\n        private readonly IContentProcessor _contentProcessor;\n\n        public async Task<IViewComponentResult> InvokeAsync(string currentPostId, string viewName = \"RelatedPosts\", int numberToShow = 5)\n        {\n            var model = new RecentPostsViewModel(_contentProcessor);\n            var settings = await _projectService.GetCurrentProjectSettings().ConfigureAwait(false);\n            var list = await _postQueries.GetRelatedPosts(settings.Id, currentPostId, numberToShow);\n            model.ProjectSettings = settings;\n            model.Posts = list;\n            model.TimeZoneHelper = _timeZoneHelper;\n            model.TimeZoneId = model.ProjectSettings.TimeZoneId;\n\n            return View(viewName, model);\n        }\n\n\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Web/ViewModels/AddPageResourceViewModel.cs",
    "content": "﻿using System.ComponentModel.DataAnnotations;\n\nnamespace cloudscribe.SimpleContent.Web.ViewModels\n{\n    public class AddPageResourceViewModel\n    {\n        public string Slug { get; set; }\n        public int Sort { get; set; }\n        /// <summary>\n        /// css or js\n        /// </summary>\n        public string Type { get; set; }\n        /// <summary>\n        /// any, dev, or prod\n        /// </summary>\n        public string Environment { get; set; }\n        [Required(ErrorMessage =\"Url is required\")]\n        //[DataType(DataType.Url)]\n        [RegularExpression(@\"^(http(s)?://)?(\\/?)[0-9a-zA-Z]([-.\\w]*[0-9a-zA-Z])*(:(0-9)*)*(\\/?)([a-zA-Z0-9\\-‌​\\.\\?\\,\\'\\/\\\\\\+&amp;%\\$#_]*)?$\", ErrorMessage =\"Please provide a valid url or relative url\")]\n        public string Url { get; set; }\n    }\n\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Web/ViewModels/BlogViewModel.cs",
    "content": "﻿// Copyright (c) Source Tree Solutions, LLC. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.\n// Author:                  Joe Audette\n// Created:                 2016-02-09\n// Last Modified:           2018-11-13\n// \n\nusing cloudscribe.DateTimeUtils;\nusing cloudscribe.SimpleContent.Models;\nusing cloudscribe.SimpleContent.Web.Services;\nusing cloudscribe.Web.Pagination;\nusing Microsoft.AspNetCore.Mvc;\nusing System;\nusing System.Collections.Generic;\n\nnamespace cloudscribe.SimpleContent.Web.ViewModels\n{\n    public class BlogViewModel\n    {\n        public BlogViewModel(IContentProcessor contentProcessor)\n        {\n            _contentProcessor = contentProcessor;\n           \n            ProjectSettings = new ProjectSettings();\n            Paging = new PaginationSettings();\n            Categories = new Dictionary<string, int>();\n            Archives = new Dictionary<string, int>();\n            BlogRoutes = new DefaultBlogRoutes();\n        }\n\n        private IContentProcessor _contentProcessor;\n        \n        public IProjectSettings ProjectSettings { get; set; }\n        public IPost CurrentPost { get; set; } = null;\n        public ContentTemplate Template { get; set; } = null;\n\n        public bool HasPublishedVersion { get; set; }\n        public bool HasDraft { get; set; }\n        public bool ShowingDraft { get; set; }\n        public bool ShowingDeleted { get; set; }\n\n        public Guid? HistoryId { get; set; }\n        public DateTime? HistoryArchiveDate { get; set; }\n\n        public string CurrentCategory { get; set; } = string.Empty;\n\n        public string ListRouteName { get; set; } \n\n        public string EditPath { get; set; } = string.Empty;\n        public string NewItemPath { get; set; } = string.Empty;\n\n        public List<IPost> Posts { get; set; }\n        public Dictionary<string, int> Categories { get; set; }\n        public Dictionary<string, int> Archives { get; set; }\n        public PaginationSettings Paging { get; private set; }\n        public int Year { get; set; } = 0;\n        public int Month { get; set; } = 0;\n        public int Day { get; set; } = 0;\n        public bool CanEdit { get; set; } = false;\n        \n        public bool ShowComments { get; set; } = true;\n        public bool CommentsAreOpen { get; set; } = false;\n        \n\n        public IComment TmpComment { get; set; } = null;\n        public IPost TmpPost { get; set; } = null;\n        public ITimeZoneHelper TimeZoneHelper { get; set; }\n        public string TimeZoneId { get; set; } = \"GMT\";\n\n        public string PreviousPostUrl { get; set; } = string.Empty;\n\n        public string NextPostUrl { get; set; } = string.Empty;\n        \n        public string FilterHtml(IPost p)\n        {\n            return _contentProcessor.FilterHtml(p, ProjectSettings);\n        }\n        \n        public ContentFilterResult FilterHtmlForList(IPost p)\n        {\n            return _contentProcessor.FilterHtmlForList(p, ProjectSettings);\n        }\n        \n        public string FilterComment(IComment c)\n        {\n            return _contentProcessor.FilterComment(c);\n        }\n\n        public string FormatDate(DateTime pubDate)\n        {\n            var localTime = TimeZoneHelper.ConvertToLocalTime(pubDate, TimeZoneId);\n            return localTime.ToString(ProjectSettings.PubDateFormat);\n        }\n\n        public string FormatDateForEdit(DateTime pubDate)\n        {\n            var localTime = TimeZoneHelper.ConvertToLocalTime(pubDate, TimeZoneId);\n            return localTime.ToString();\n        }\n\n        public string FormatCommentDate(DateTime pubDate)\n        {\n            var localTime = TimeZoneHelper.ConvertToLocalTime(pubDate, TimeZoneId);\n            return localTime.ToString();\n        }\n\n        public IBlogRoutes BlogRoutes { get; set; }\n\n        \n        public string ExtractFirstImageUrl(IPost post, IUrlHelper urlHelper, string fallbackImageUrl = null)\n        {\n            return _contentProcessor.ExtractFirstImageUrl(post, urlHelper, fallbackImageUrl);\n            \n        }\n\n        public ImageSizeResult ExtractFirstImageDimensions(IPost post)\n        {\n            return _contentProcessor.ExtractFirstImageDimensions(post);\n        }\n\n\n\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Web/ViewModels/CommentViewModel.cs",
    "content": "﻿\n\nusing System;\nusing System.Collections.Generic;\nusing System.ComponentModel.DataAnnotations;\nusing System.Linq;\nusing System.Threading.Tasks;\n\nnamespace cloudscribe.SimpleContent.Web.ViewModels\n{\n    public class CommentViewModel\n    {\n        public string PostId { get; set; } = string.Empty;\n        public string Name { get; set; } = string.Empty;\n\n        [EmailAddress]\n        public string Email { get; set; } = string.Empty;\n\n        public string WebSite { get; set; } = string.Empty;\n\n        public string Content { get; set; } = string.Empty;\n        \n\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Web/ViewModels/ContentHistoryViewModel.cs",
    "content": "﻿using cloudscribe.Pagination.Models;\nusing cloudscribe.SimpleContent.Models;\n\nnamespace cloudscribe.SimpleContent.Web.ViewModels\n{\n    public class ContentHistoryViewModel\n    {\n        public ContentHistoryViewModel()\n        {\n            History = new PagedResult<ContentHistory>();\n        }\n\n        public PagedResult<ContentHistory> History { get; set; }\n\n        public int SortMode { get; set; } = 0;\n        public string ContentId { get; set; }\n        public string ContentSource { get; set; }\n\n        public string Editor { get; set; }\n\n        public string ContentTitle { get; set; }\n        public string ContentSlug { get; set; }\n\n        public bool CanEditPages { get; set; }\n        public bool CanEditPosts { get; set; }\n\n\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Web/ViewModels/NewContentViewModel.cs",
    "content": "﻿using cloudscribe.Pagination.Models;\nusing cloudscribe.SimpleContent.Models;\nusing System.ComponentModel.DataAnnotations;\n\nnamespace cloudscribe.SimpleContent.Web.ViewModels\n{\n    public class NewContentViewModel\n    {\n        public NewContentViewModel()\n        {\n            Templates = new PagedResult<ContentTemplate>();\n        }\n\n        public string Query { get; set; }\n        public string ParentSlug { get; set; }\n        public int PageOrder { get; set; } = 3;\n        public string ContentType { get; set; }\n        public PagedResult<ContentTemplate> Templates { get; set; }\n\n        [Required (ErrorMessage = \"Template is required\")]\n        public string SelectedTemplate { get; set; }\n\n        [Required(ErrorMessage = \"Title is required\")]\n        public string Title { get; set; }\n\n        public int PageNumber { get; set; } = 1;\n        public int PageSize { get; set; } = 10;\n\n        public int CountOfTemplates { get; set; }\n\n        public string SearchRouteName { get; set; }\n        public string PostActionName { get; set; }\n        public bool ShowCreatedBy { get; set; }\n        public bool ShowCreatedDate { get; set; }\n        public bool ShowLastModifiedBy { get; set; }\n        public bool ShowLastModifiedDate { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Web/ViewModels/PageDevelopmentViewModel.cs",
    "content": "﻿using cloudscribe.SimpleContent.Models;\nusing System.Collections.Generic;\n\nnamespace cloudscribe.SimpleContent.Web.ViewModels\n{\n    public class PageDevelopmentViewModel\n    {\n        public PageDevelopmentViewModel()\n        {\n            Css = new List<IPageResource>();\n            Js = new List<IPageResource>();\n            AddResourceViewModel = new AddPageResourceViewModel();\n        }\n\n        public string Slug { get; set; } = string.Empty;\n        public string Script { get; set; } = string.Empty;\n        public List<IPageResource> Css { get; set; }\n        public List<IPageResource> Js { get; set; }\n\n        public AddPageResourceViewModel AddResourceViewModel { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Web/ViewModels/PageEditViewModel.cs",
    "content": "﻿using cloudscribe.Web.Common.DataAnnotations;\nusing System;\nusing System.ComponentModel.DataAnnotations;\n\nnamespace cloudscribe.SimpleContent.Web.ViewModels\n{\n    public class PageEditViewModel\n    {\n        public PageEditViewModel()\n        {\n            \n        }\n        public string Id { get; set; } = string.Empty;\n\n        [Required(ErrorMessage = \"ProjectId is required\")]\n        public string ProjectId { get; set; } = string.Empty;\n\n        public string ParentId { get; set; } = \"0\";\n        public string ParentSlug { get; set; } = string.Empty;\n\n        public string CorrelationKey { get; set; } = string.Empty;\n\n        public int PageOrder { get; set; } = 3;\n\n        [Required(ErrorMessage = \"Page Heading is required\")]\n        [StringLength(255, ErrorMessage = \"Page Heading has a maximum length of 255 characters\")]\n        public string Title { get; set; } = string.Empty;\n\n        public string Author { get; set; } = string.Empty;\n\n        public string Slug { get; set; } = string.Empty;\n\n        public string ProjectDefaultSlug { get; set; }\n\n        public string MetaDescription { get; set; } = string.Empty;\n\n        \n        public string Content { get; set; } = string.Empty;\n\n        public string ViewRoles { get; set; } = string.Empty;\n\n        public DateTime? PubDate { get; set; }\n\n        [RequiredWhen(\"SaveMode\", \"PublishLater\", ErrorMessage = \"A Date is required to publish later.\")]\n        public DateTime? NewPubDate { get; set; }\n\n        public DateTime? DraftPubDate { get; set; }\n\n\n        public bool IsPublished { get; set; } \n\n        public bool ShowHeading { get; set; } = true;\n\n        public string DisqusShortname { get; set; }\n\n        public bool ShowComments { get; set; } = false;\n\n        [RegularExpression(@\"^(http(s)?://)?(\\/?)[0-9a-zA-Z]([-.\\w]*[0-9a-zA-Z])*(:(0-9)*)*(\\/?)([a-zA-Z0-9\\-‌​\\.\\?\\,\\'\\/\\\\\\+&amp;%\\$#_]*)?$\", ErrorMessage = \"Please provide a valid url or relative url\")]\n        public string ExternalUrl { get; set; } = string.Empty;\n\n        public bool ShowMenu { get; set; } = false;\n\n        public bool MenuOnly { get; set; } = false;\n        [StringLength(500, ErrorMessage =\"The menu filters has a maximun length of 500 characters\")]\n        public string MenuFilters { get; set; }\n\n        public bool DisableEditor { get; set; }\n\n        public string ContentType { get; set; } = \"html\";\n\n        public string SaveMode { get; set; } //SaveDraft, PublishNow, PublishLater buttomn values\n\n        public Guid? HistoryId { get; set; }\n        public DateTime? HistoryArchiveDate { get; set; }\n        public bool DidReplaceDraft { get; set; }\n        public bool DidRestoreDeleted { get; set; }\n\n        public bool HasDraft { get; set; }\n        public bool? ShowCreatedBy { get; set; }\n        public bool? ShowCreatedDate { get; set; }\n        public bool? ShowLastModifiedBy { get; set; }\n        public bool? ShowLastModifiedDate { get; set; }\n        public string? Script { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Web/ViewModels/PageEditWithTemplateViewModel.cs",
    "content": "﻿using cloudscribe.SimpleContent.Models;\nusing cloudscribe.Web.Common.DataAnnotations;\nusing System;\nusing System.ComponentModel.DataAnnotations;\n\nnamespace cloudscribe.SimpleContent.Web.ViewModels\n{\n    public class PageEditWithTemplateViewModel\n    {\n        public string ProjectId { get; set; } = string.Empty;\n\n        public string Id { get; set; } = string.Empty;\n\n        public object TemplateModel { get; set; }\n\n        public ContentTemplate Template { get; set; }\n        \n        public string ParentId { get; set; } = \"0\";\n        public string ParentSlug { get; set; } = string.Empty;\n\n        public string CorrelationKey { get; set; } = string.Empty;\n\n        public int PageOrder { get; set; } = 3;\n\n        [Required(ErrorMessage = \"Page Heading is required\")]\n        [StringLength(255, ErrorMessage = \"Page Heading has a maximum length of 255 characters\")]\n        public string Title { get; set; } = string.Empty;\n\n        public string Author { get; set; } = string.Empty;\n\n        public string Slug { get; set; } = string.Empty;\n        public string ProjectDefaultSlug { get; set; }\n\n        public string MetaDescription { get; set; } = string.Empty;\n\n        public string ViewRoles { get; set; } = string.Empty;\n\n        public DateTime? PubDate { get; set; }\n\n        [RequiredWhen(\"SaveMode\", \"PublishLater\", ErrorMessage = \"A Date is required to publish later.\")]\n        public DateTime? NewPubDate { get; set; }\n\n        public DateTime? DraftPubDate { get; set; }\n\n        public bool IsPublished { get; set; } = true;\n\n        public bool ShowHeading { get; set; } = true;\n\n        public string DisqusShortname { get; set; }\n\n        public bool ShowComments { get; set; } = false;\n\n        public bool ShowMenu { get; set; } = false;\n\n        [StringLength(500, ErrorMessage = \"The menu filters has a maximun length of 500 characters\")]\n        public string MenuFilters { get; set; }\n\n        public string SaveMode { get; set; } //SaveDraft, PublishNow, PublishLater buttomn values\n\n        public Guid? HistoryId { get; set; }\n        public DateTime? HistoryArchiveDate { get; set; }\n        public bool DidReplaceDraft { get; set; }\n        public bool DidRestoreDeleted { get; set; }\n        public bool HasDraft { get; set; }\n        public bool? ShowCreatedBy { get; set; }\n        public bool? ShowCreatedDate { get; set; }\n        public bool? ShowLastModifiedBy { get; set; }\n        public bool? ShowLastModifiedDate { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Web/ViewModels/PageTreeViewModel.cs",
    "content": "﻿namespace cloudscribe.SimpleContent.Web.ViewModels\n{\n    public class PageTreeViewModel\n    {\n        public string TreeServiceUrl { get; set; }\n        public string SortUrl { get; set; }\n        public string MoveUrl { get; set; }\n        public string DeleteUrl { get; set; }\n        public string ViewUrl { get; set; }\n        public string EditUrl { get; set; }\n        public string NewPageUrl { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Web/ViewModels/PageViewModel.cs",
    "content": "﻿// Copyright (c) Source Tree Solutions, LLC. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.\n// Author:                  Joe Audette\n// Created:                 2016-02-24\n// Last Modified:           2018-07-03\n// \n\nusing cloudscribe.DateTimeUtils;\nusing cloudscribe.SimpleContent.Models;\nusing cloudscribe.SimpleContent.Web.Services;\nusing Microsoft.AspNetCore.Mvc;\nusing System;\n\nnamespace cloudscribe.SimpleContent.Web.ViewModels\n{\n    public class PageViewModel\n    {\n        public PageViewModel(IContentProcessor contentProcessor)\n        {\n            _contentProcessor = contentProcessor;\n           \n        }\n\n        private IContentProcessor _contentProcessor;\n        \n        public IProjectSettings ProjectSettings { get; set; }\n        public IPage CurrentPage { get; set; } = null;\n        public ContentTemplate Template { get; set; } = null;\n\n        public string EditPath { get; set; } = string.Empty;\n        public string NewItemPath { get; set; } = string.Empty;\n\n        public string PageTreePath { get; set; } = string.Empty;\n      \n\n        public bool CanEdit { get; set; } = false;\n        public bool IsNew { get; set; } = false;\n        //public string Mode { get; set; } = string.Empty;\n        public bool ShowComments { get; set; } = true;\n        public bool CommentsAreOpen { get; set; } = false;\n        //public int ApprovedCommentCount { get; set; } = 0;\n        //public bool CommentsRequireApproval { get; set; } = true;\n\n        public IComment TmpComment { get; set; } = null;\n        public ITimeZoneHelper TimeZoneHelper { get; set; }\n        public string TimeZoneId { get; set; } = \"GMT\";\n\n        public bool HasPublishedVersion { get; set; }\n        public bool HasDraft { get; set; }\n        public bool ShowingDraft { get; set; }\n        public bool ShowingDeleted { get; set; }\n\n        public Guid? HistoryId { get; set; }\n        public DateTime? HistoryArchiveDate { get; set; }\n\n        public string FormatDate(DateTime pubDate)\n        {\n            var localTime = TimeZoneHelper.ConvertToLocalTime(pubDate, TimeZoneId);\n            return localTime.ToString(ProjectSettings.PubDateFormat);\n        }\n\n        public string FormatDateForEdit(DateTime pubDate)\n        {\n            var localTime = TimeZoneHelper.ConvertToLocalTime(pubDate, TimeZoneId);\n            return localTime.ToString();\n        }\n\n        \n        public string FilterHtml(IPage p)\n        {\n            return _contentProcessor.FilterHtml(p, ProjectSettings);\n            \n        }\n\n        public string FilterComment(IComment c)\n        {\n            return _contentProcessor.FilterComment(c);\n        }\n\n        //private string firstImageUrl;\n        public string ExtractFirstImageUrl(IPage page, IUrlHelper urlHelper)\n        {\n            return _contentProcessor.ExtractFirstImageUrl(page, urlHelper);\n\n            //if (urlHelper == null) return string.Empty;\n\n            //var baseUrl = string.Concat(urlHelper.ActionContext.HttpContext.Request.Scheme,\n            //           \"://\",\n            //           urlHelper.ActionContext.HttpContext.Request.Host.ToUriComponent());\n\n            //if (page.ContentType == \"markdown\")\n            //{\n            //    var mdImg = mdProcessor.ExtractFirstImageUrl(page.Content);\n            //    if (!string.IsNullOrEmpty(mdImg))\n            //    {\n            //        if (mdImg.StartsWith(\"http\")) return mdImg;\n\n            //        return baseUrl + mdImg;\n            //    }\n\n            //    return string.Empty;\n            //}\n\n            //if (!string.IsNullOrWhiteSpace(firstImageUrl))\n            //{\n            //    if (firstImageUrl.StartsWith(\"http\")) return firstImageUrl;\n\n            //    return baseUrl + firstImageUrl; //don't extract it more than once\n            //}\n\n            //if (page == null) return string.Empty;\n            \n\n            //firstImageUrl = filter.ExtractFirstImageUrl(page.Content);\n\n            //if (firstImageUrl == null) return string.Empty;\n\n            //if (firstImageUrl.StartsWith(\"http\")) return firstImageUrl;\n            \n            //return baseUrl + firstImageUrl;\n        }\n\n        public ImageSizeResult ExtractFirstImageDimensions(IPage page)\n        {\n            return _contentProcessor.ExtractFirstImageDimensions(page);\n        }\n\n        public bool? ShowCreatedBy { get; set; }\n        public bool? ShowCreatedDate { get; set; }\n        public bool? ShowLastModifiedBy { get; set; }\n        public bool? ShowLastModifiedDate { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Web/ViewModels/PostEditViewModel.cs",
    "content": "﻿// Copyright (c) Source Tree Solutions, LLC. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.\n// Author:                  Joe Audette\n// Created:                 2017-03-02\n// Last Modified:           2018-02-10\n// \n\nusing cloudscribe.Web.Common.DataAnnotations;\nusing System;\nusing System.ComponentModel.DataAnnotations;\n\nnamespace cloudscribe.SimpleContent.Web.ViewModels\n{\n    public class PostEditViewModel\n    {\n        public string Id { get; set; } = string.Empty;\n\n        [Required(ErrorMessage = \"ProjectId is required\")]\n        public string ProjectId { get; set; } = string.Empty;\n\n        public string CorrelationKey { get; set; } = string.Empty;\n\n\n        [Required(ErrorMessage = \"Title is required\")]\n        [StringLength(255, ErrorMessage = \"Title has a maximum length of 255 characters\")]\n        public string Title { get; set; } = string.Empty;\n\n        public string Author { get; set; } = string.Empty;\n\n        public string Slug { get; set; } = string.Empty;\n\n        public string MetaDescription { get; set; } = string.Empty;\n\n        public string Content { get; set; } = string.Empty;\n\n        public bool IsPublished { get; set; } = false;\n\n        public string Categories { get; set; }\n\n        public DateTime? PubDate { get; set; }\n\n        [RequiredWhen(\"SaveMode\", \"PublishLater\", ErrorMessage = \"A Date is required to publish later.\")]\n        public DateTime? NewPubDate { get; set; }\n\n        public DateTime? DraftPubDate { get; set; }\n\n        public string CurrentPostUrl { get; set; }\n\n        public string DeletePostRouteName { get; set; }\n        public bool ShowComments { get; set; } = false;\n        public bool IsFeatured { get; set; } = false;\n\n        public string ImageUrl { get; set; }\n        public string ThumbnailUrl { get; set; }\n\n        public string ContentType { get; set; } = \"html\";\n\n        public string TeaserOverride { get; set; }\n\n        public bool SuppressTeaser { get; set; }\n\n        public bool TeasersEnabled { get; set; }\n\n        public string SaveMode { get; set; } //SaveDraft, PublishNow, PublishLater buttomn values\n\n        public Guid? HistoryId { get; set; }\n        public DateTime? HistoryArchiveDate { get; set; }\n        public bool DidReplaceDraft { get; set; }\n        public bool DidRestoreDeleted { get; set; }\n\n        public bool HasDraft { get; set; }\n\n    }\n}"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Web/ViewModels/PostEditWithTemplateViewModel.cs",
    "content": "﻿using cloudscribe.SimpleContent.Models;\nusing cloudscribe.Web.Common.DataAnnotations;\nusing System;\nusing System.ComponentModel.DataAnnotations;\n\nnamespace cloudscribe.SimpleContent.Web.ViewModels\n{\n    public class PostEditWithTemplateViewModel\n    {\n        public string Id { get; set; } = string.Empty;\n\n        [Required(ErrorMessage = \"ProjectId is required\")]\n        public string ProjectId { get; set; } = string.Empty;\n\n        public string CorrelationKey { get; set; } = string.Empty;\n\n\n        [Required(ErrorMessage = \"Title is required\")]\n        [StringLength(255, ErrorMessage = \"Title has a maximum length of 255 characters\")]\n        public string Title { get; set; } = string.Empty;\n\n        public string Author { get; set; } = string.Empty;\n\n        public string Slug { get; set; } = string.Empty;\n\n        public string MetaDescription { get; set; } = string.Empty;\n\n        public object TemplateModel { get; set; }\n\n        public ContentTemplate Template { get; set; }\n\n\n        public bool IsPublished { get; set; } = false;\n\n        public string Categories { get; set; }\n\n        public DateTime? PubDate { get; set; }\n\n        [RequiredWhen(\"SaveMode\", \"PublishLater\", ErrorMessage = \"A Date is required to publish later.\")]\n        public DateTime? NewPubDate { get; set; }\n\n        public DateTime? DraftPubDate { get; set; }\n\n        public string CurrentPostUrl { get; set; }\n\n        public string DeletePostRouteName { get; set; }\n        public bool ShowComments { get; set; } = false;\n        public bool IsFeatured { get; set; } = false;\n\n        public string ImageUrl { get; set; }\n        public string ThumbnailUrl { get; set; }\n\n        public string ContentType { get; set; } = \"html\";\n\n        public string TeaserOverride { get; set; }\n\n        public bool SuppressTeaser { get; set; }\n\n        public bool TeasersEnabled { get; set; }\n\n        public string SaveMode { get; set; } //SaveDraft, PublishNow, PublishLater buttomn values\n\n        public Guid? HistoryId { get; set; }\n        public DateTime? HistoryArchiveDate { get; set; }\n        public bool DidReplaceDraft { get; set; }\n        public bool DidRestoreDeleted { get; set; }\n\n        public bool HasDraft { get; set; }\n\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Web/ViewModels/PostViewModel.cs",
    "content": "﻿//// Copyright (c) Source Tree Solutions, LLC. All rights reserved.\n//// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.\n//// Author:                  Joe Audette\n//// Created:                 2016-02-12\n//// Last Modified:           2016-02-23\n//// \n\n\n//namespace cloudscribe.SimpleContent.Web.ViewModels\n//{\n//    public class PostViewModel\n//    {\n        \n//        public string Id { get; set; } = string.Empty;\n   \n//        public string Title { get; set; } = string.Empty;\n\n//        public string Author { get; set; } = string.Empty;\n\n//        public string Slug { get; set; } = string.Empty;\n\n//        public string MetaDescription { get; set; } = string.Empty;\n\n//        public string Content { get; set; } = string.Empty;\n        \n//        public bool IsPublished { get; set; } = false;\n\n//        public string Categories { get; set; }\n\n//        public string PubDate { get; set; } = string.Empty;\n\n\n//    }\n//}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Web/ViewModels/RecentPostsViewModel.cs",
    "content": "﻿using cloudscribe.SimpleContent.Models;\nusing System.Collections.Generic;\nusing System;\nusing cloudscribe.SimpleContent.Web.Services;\nusing Microsoft.AspNetCore.Mvc;\nusing cloudscribe.DateTimeUtils;\n\nnamespace cloudscribe.SimpleContent.Web.ViewModels\n{\n    public class RecentPostsViewModel\n    {\n        public RecentPostsViewModel(IContentProcessor contentProcessor)\n        {\n            _contentProcessor = contentProcessor;\n            \n            ProjectSettings = new ProjectSettings();\n            Posts = new List<IPost>();\n        }\n\n        private IContentProcessor _contentProcessor;\n        \n\n        public IProjectSettings ProjectSettings { get; set; }\n\n        public ITimeZoneHelper TimeZoneHelper { get; set; }\n        public string TimeZoneId { get; set; } = \"GMT\";\n\n        public List<IPost> Posts { get; set; }\n\n        public string FormatDate(DateTime pubDate)\n        {\n            var localTime = TimeZoneHelper.ConvertToLocalTime(pubDate, TimeZoneId);\n            return localTime.ToString(ProjectSettings.PubDateFormat);\n        }\n\n        //private string pslug = string.Empty;\n        //private string firstImageUrl;\n        public string ExtractFirstImageUrl(IPost post, IUrlHelper urlHelper, string fallbackImageUrl = null)\n        {\n            return _contentProcessor.ExtractFirstImageUrl(post, urlHelper, fallbackImageUrl);\n\n            //if (urlHelper == null) return string.Empty;\n            //if (post == null) return string.Empty;\n\n            //var baseUrl = string.Concat(urlHelper.ActionContext.HttpContext.Request.Scheme,\n            //            \"://\",\n            //            urlHelper.ActionContext.HttpContext.Request.Host.ToUriComponent());\n\n            //if (post.ContentType == \"markdown\")\n            //{\n            //    var mdImg = mdProcessor.ExtractFirstImageUrl(post.Content);\n            //    if (!string.IsNullOrEmpty(mdImg))\n            //    {\n            //        if (mdImg.StartsWith(\"http\")) return mdImg;\n\n            //        return baseUrl + mdImg;\n            //    }\n\n            //    return string.Empty;\n            //}\n\n            //if (!string.IsNullOrWhiteSpace(firstImageUrl) && pslug == post.Slug)\n            //{\n            //    if (firstImageUrl.StartsWith(\"http\")) return firstImageUrl;\n\n            //    return baseUrl + firstImageUrl; //don't extract it more than once\n            //}\n\n            //if (post == null) return string.Empty;\n\n\n            //firstImageUrl = filter.ExtractFirstImageUrl(post.Content);\n            //pslug = post.Slug;\n\n            //if (firstImageUrl == null) return fallbackImageUrl;\n\n            //if (firstImageUrl.StartsWith(\"http\")) return firstImageUrl;\n\n\n\n            //return baseUrl + firstImageUrl;\n        }\n\n    }\n}\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Web/cloudscribe.SimpleContent.Web.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <Description>A simple, yet flexible content and blog engine for ASP.NET Core that can work with or without a database</Description>\n    <Version>10.1.0</Version>\n    <TargetFramework>net10.0</TargetFramework>\n    <Authors>Joe Audette</Authors>\n    <PackageTags>cloudscribe;blog,content</PackageTags>\n    <PackageIcon>icon.png</PackageIcon>\n    <PackageProjectUrl>https://github.com/cloudscribe/cloudscribe.SimpleContent</PackageProjectUrl>\n    <PackageLicenseExpression>Apache-2.0</PackageLicenseExpression>\n    <RepositoryUrl>https://github.com/cloudscribe/cloudscribe.SimpleContent.git</RepositoryUrl>\n    <RepositoryType>git</RepositoryType>\n    <PackageReadmeFile>README.md</PackageReadmeFile>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <None Include=\"icon.png\" Pack=\"true\" PackagePath=\"\\\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <FrameworkReference Include=\"Microsoft.AspNetCore.App\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <ProjectReference Include=\"..\\cloudscribe.SimpleContent.Models\\cloudscribe.SimpleContent.Models.csproj\" />\n\n  </ItemGroup>\n\n  <ItemGroup>\n    <EmbeddedResource Include=\"js\\**;css\\**\" Exclude=\"bin\\**;obj\\**;**\\*.xproj;packages\\**;@(EmbeddedResource)\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <None Remove=\"css\\editing-side-menu.css\" />\n    <None Remove=\"js\\edit-script.js\" />\n    <None Remove=\"js\\sc-simple-gallery-init.js\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"cloudscribe.HtmlAgilityPack\" Version=\"1.0.1\" />\n\n    <PackageReference Include=\"cloudscribe.Versioning\" Version=\"10.1.0\" />\n    <PackageReference Include=\"cloudscribe.Email.Senders\" Version=\"10.1.0\" />\n    <PackageReference Include=\"cloudscribe.Web.Common\" Version=\"10.1.0\" />\n    <PackageReference Include=\"cloudscribe.Web.Navigation\" Version=\"10.1.0\" />\n    <PackageReference Include=\"cloudscribe.Web.Pagination\" Version=\"10.1.0\" />\n    <PackageReference Include=\"cloudscribe.DateTimeUtils\" Version=\"10.1.0\" />\n    <PackageReference Include=\"cloudscribe.Web.SiteMap.FromNavigation\" Version=\"10.1.0\" />\n\n    <PackageReference Include=\"Microsoft.Extensions.Caching.Abstractions\" Version=\"10.0.0\" />\n    <PackageReference Include=\"Microsoft.Extensions.Configuration.Abstractions\" Version=\"10.0.0\" />\n    <PackageReference Include=\"Microsoft.Extensions.DependencyInjection.Abstractions\" Version=\"10.0.0\" />\n    <PackageReference Include=\"Microsoft.Extensions.FileProviders.Embedded\" Version=\"10.0.0\" />\n    <PackageReference Include=\"Microsoft.Extensions.Localization\" Version=\"10.0.0\" />\n    <PackageReference Include=\"Microsoft.Extensions.Options.ConfigurationExtensions\" Version=\"10.0.0\" />\n\n    <PackageReference Include=\"Markdig\" Version=\"0.37.0\" />\n    <PackageReference Include=\"MediatR\" Version=\"11.1.0\" />\n    <PackageReference Include=\"MediatR.Extensions.Microsoft.DependencyInjection\" Version=\"11.1.0\" />\n\n    <PackageReference Include=\"Esprima\" Version=\"3.0.5\" />\n\n    <!-- JK:  Net10 - dealing with persistent security vuln warnings: -->\n    \n    <!-- Security vulnerability fixes - must match versions in Core/Logging repos -->\n    <!-- GHSA-ghhp-997w-qr28: Critical vulnerability in System.Text.Encodings.Web < 4.5.1 -->\n    <PackageReference Include=\"System.Text.Encodings.Web\" Version=\"10.0.0\" />\n    <!-- GHSA-5crp-9r3c-p9vr: High severity vulnerability in Newtonsoft.Json < 13.0.1 -->\n    <PackageReference Include=\"Newtonsoft.Json\" Version=\"13.0.3\" />\n    <!-- GHSA-cmhx-cq75-c4mj: High severity vulnerability in System.Text.RegularExpressions < 4.3.1 -->\n    <PackageReference Include=\"System.Text.RegularExpressions\" Version=\"4.3.1\" />\n    <!-- GHSA-7jgj-8wvc-jh57: High severity vulnerability in System.Net.Http < 4.3.4 -->\n    <PackageReference Include=\"System.Net.Http\" Version=\"4.3.4\" />\n    \n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"README.md\" Pack=\"true\" PackagePath=\"/\" />\n  </ItemGroup>\n</Project>\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Web/css/blog-common.css",
    "content": "﻿\n\n/*\ndiv.row.blog-container { font-size:10px;}\n    */\n\ndiv[itemtype='http://schema.org/Blog']\n{\n    /*\n    font: 1.8em/1.5 'Century Gothic', Verdana, Geneva, 'DejaVu Sans', sans-serif;\n \n    */\n\n}\n\ndiv[itemtype='http://schema.org/Blog'] *\n{\n    /*\n    font-family: 'Century Gothic', Verdana, Geneva, 'DejaVu Sans', sans-serif;\n    */\n    /*margin: 0; */\n\n}\n\n\n\n\n/*\ndiv.blogcontainer {\n    min-height: 100%;\n    padding-bottom: 35px;\n}\n    */\n\n/*#region Post */\n\n.post header h1 {\n    margin: 0 0 3px 0;\n}\n\n/*\n.post header a {\n    color: #000;\n}\n*/\n\n\n.post header div.bh {\n    font-size: .75em;\n    opacity: .8;\n    margin-bottom: 1em;\n}\n\n.post header div a {\n    margin-left: 10px;\n}\n\n.post header div .categories {\n    margin: 0;\n    padding: 10px;\n    display: inline;\n}\n\n.post header div .categories a {\n    margin: 0;\n}\n\n.post header div .categories li {\n    display: inline;\n}\n\n.post header div .categories li:not(:first-child):not(:last-child):after {\n    content: \", \";\n}\n\n.post abbr {\n    border: none;\n}\n\n.post h2 {\n    margin-bottom: 0;\n    font-size: 1.3em;\n}\n\n.post h3 {\n    margin-bottom: 0;\n    font-size: 1.1em;\n}\n\n.post div[itemprop='articleBody'] {\n    border-bottom: 1px solid #d3d3d3;\n    padding-bottom: .5em;\n    margin-bottom: 2em;\n    -ms-text-size-adjust: 150%;\n}\n\n.post p {\n    padding: .2em 0;\n}\n\n/*#endregion */\n\n/*#region Comments */\n\n#comments article {\n    position: relative;\n    max-height: 9999px;\n    overflow: hidden;\n    -webkit-transition: height .5s ease-in-out;\n    -moz-transition: height .5s ease-in-out;\n    -o-transition: height .5s ease-in-out;\n    transition: height .5s ease-in-out;\n}\n\n    #comments article div {\n        padding-left: 70px;\n    }\n\n        #comments article div p {\n            border: 1px solid #d3d3d3;\n            border-radius: 5px;\n            padding: 7px;\n            position: relative;\n        }\n\n            #comments article div p:before {\n                content: \"\";\n                position: absolute;\n                top: 10px;\n                left: -10px;\n                border-style: solid;\n                border-width: 9px 9px 9px 0;\n                border-color: transparent #d3d3d3;\n            }\n\n            #comments article div p:after {\n                content: \"\";\n                position: absolute;\n                top: 10px;\n                left: -9px;\n                border-style: solid;\n                border-width: 9px 9px 9px 0;\n                border-color: transparent #ffffff;\n            }\n\n    #comments article.self div p {\n        background: #f7f7f7;\n    }\n\n        #comments article.self div p:after {\n            border-color: transparent #f7f7f7;\n        }\n\n    #comments article [itemprop='commentText'] {\n        margin: 0;\n    }\n\n    #comments article img {\n        border-radius: 5px;\n        position: absolute;\n        top: 19px;\n    }\n\n    #comments article [itemprop='commentTime'] {\n        display: block;\n        text-align: right;\n        font-size: .7em;\n    }\n\n    #comments article [itemprop='creator'] {\n        font-size: .8em;\n        margin-left: 7px;\n    }\n\n    #comments article [itemprop='approvalWarning'] {\n        margin-left: 70px;\n        font-size: 0.6em;\n        background-color: rgba(255, 255, 0, 0.50);\n        padding: 5px;\n    }\n\n/*#endregion */\n\n/*#region Comment form */\n\n#commentform {\n    margin-top: 2em;\n}\n\n#status {\n    margin-left: 1em;\n}\n\n/*#endregion */\n\n\n/*\nfooter {\n    background-color: #181818;\n    color: #fff;\n    font-size: .85em;\n    padding: 5px;\n    clear: both;\n    position: relative;\n    margin: -35px 0 0 0;\n    height: 35px;\n}\n\n    footer p {\n        padding: 1em 0;\n        text-align: center;\n    }\n\n    footer a {\n        color: #a9d2e1;\n    }\n\n*/\n\n.nextpost {\n    float:right;\n    text-align:right;\n}\n.prevpost {\n    float:left;\n    text-align:left;\n}\n.post .jumbotron {margin-bottom:0;}\n\nimg, video, iframe {\n    max-width: 100%;\n}\n\n\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Web/css/editing-side-menu.css",
    "content": "﻿.btn-group-small-admin {\n    left: auto;\n    top: 25%;\n}\n\n.btn-group-small-admin > .btn:not(:first-child), .btn-group-small-admin > .btn-group-small-admin:not(:first-child) {\n    margin-left: 0;\n}\n\n/*Below won't be required if they are removed from the other stylesheets*/\n#newPostLink {\n    position: unset;\n}\n\n#editPostLink {\n    position: unset;\n}\n\n#unpublishPostLink {\n    position: unset;\n}\n\n#pageManagerLink {\n    position: unset;\n}\n\n#newPageLink {\n    position: unset;\n}\n\n#editPageLink {\n    position: unset;\n}\n\n#unpublishPageLink {\n    position: unset;\n}"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Web/js/blog-comments.js",
    "content": "﻿/* globals NodeList, HTMLCollection */\n\n(function () {\n    var postId = null;\n\n    //#region Helpers\n\n    function objectToUrl(obj) {\n        var string = '';\n\n        for (var prop in obj) {\n            if (obj.hasOwnProperty(prop)) {\n                string += prop + '=' + obj[prop].replace(/ /g, '+') + '&';\n            }\n        }\n\n        return string.substring(0, string.length - 1);\n    }\n\n    var AsynObject = AsynObject ? AsynObject : {};\n\n    AsynObject.ajax = function (url, callback) {\n        var ajaxRequest = AsynObject.getAjaxRequest(callback);\n        ajaxRequest.open(\"GET\", url, true);\n        ajaxRequest.setRequestHeader('X-Requested-With', 'XMLHttpRequest');\n        ajaxRequest.send(null);\n    };\n\n    AsynObject.postAjax = function (url, callback, data) {\n        var ajaxRequest = AsynObject.getAjaxRequest(callback);\n        ajaxRequest.open(\"POST\", url, true);\n        ajaxRequest.setRequestHeader(\"Content-Type\", \"application/x-www-form-urlencoded\");\n        ajaxRequest.send(objectToUrl(data));\n    };\n\n    AsynObject.getAjaxRequest = function (callback) {\n\n        var ajaxRequest = new XMLHttpRequest();\n\n        ajaxRequest.onreadystatechange = function () {\n            if (ajaxRequest.readyState > 1 && ajaxRequest.status > 0) {\n                callback(ajaxRequest.readyState, ajaxRequest.status, ajaxRequest.responseText);\n            }\n        };\n\n        return ajaxRequest;\n    };\n\n    function hasClass(elem, className) {\n        return new RegExp(' ' + className + ' ').test(' ' + elem.className + ' ');\n    }\n\n    function addClass(elem, className) {\n        if (!hasClass(elem, className)) {\n            elem.className += ' ' + className;\n        }\n    }\n\n    function removeClass(elem, className) {\n        var newClass = ' ' + elem.className.replace(/[\\t\\r\\n]/g, ' ') + ' ';\n        if (hasClass(elem, className)) {\n            while (newClass.indexOf(' ' + className + ' ') >= 0) {\n                newClass = newClass.replace(' ' + className + ' ', ' ');\n            }\n            elem.className = newClass.replace(/^\\s+|\\s+$/g, '');\n        }\n    }\n\n    function toDOM(htmlString) {\n        var wrapper = document.createElement('div');\n        wrapper.innerHTML = htmlString;\n        return wrapper.children;\n    }\n\n    function getParentsByAttribute(element, attr, value) {\n        var arr = [];\n\n        while (element) {\n            element = element.parentNode;\n            if (element.hasAttribute(attr) && element.getAttribute(attr) === value) {\n                arr.push(element);\n            }\n            if (!element.parentNode.parentNode) {\n                break;\n            }\n        }\n\n        return arr;\n    }\n\n    Element.prototype.remove = function () {\n        this.parentElement.removeChild(this);\n    };\n\n    NodeList.prototype.remove = HTMLCollection.prototype.remove = function () {\n        for (var i = 0, len = this.length; i < len; i++) {\n            if (this[i] && this[i].parentElement) {\n                this[i].parentElement.removeChild(this[i]);\n            }\n        }\n    };\n\n    function slide(thisObj, direction, callback) {\n        if (direction === \"Up\") {\n            thisObj.style.height = '0px';\n        } else {\n            var clone = thisObj.cloneNode(true);\n\n            clone.style.position = 'absolute';\n            clone.style.visibility = 'hidden';\n            clone.style.height = 'auto';\n\n            addClass(clone, 'slideClone col-md-6 col-md-offset-3');\n\n            document.body.appendChild(clone);\n\n            var slideClone = document.getElementsByClassName(\"slideClone\")[0];\n            var newHeight = slideClone.clientHeight;\n\n            slideClone.remove();\n            thisObj.style.height = newHeight + 'px';\n            if (callback) {\n                setTimeout(function () {\n                    callback();\n                }, 500);\n            }\n        }\n    }\n\n    //#endregion\n\n    //var endpoint = \"/comment.ashx\";\n\n    function deleteComment(commentId, element) {\n        var deleteEndpoint = document.querySelector(\"[itemprop=blogPost]\").getAttribute(\"data-delete-comment-url\");\n        if (confirm(\"Do you want to delete this comment?\")) {\n            AsynObject.postAjax(deleteEndpoint, function (state, status) {\n                if (state === 4 && status === 200) {\n                    slide(element, \"Up\", function () {\n                        element.remove();\n                    });\n                    return;\n                } else if (status !== 200) {\n                    alert(\"Something went wrong. Please try again\");\n                }\n            }, {\n                mode: \"delete\",\n                postId: postId,\n                commentId: commentId,\n                __RequestVerificationToken: document.querySelector(\"input[name=__RequestVerificationToken]\").getAttribute(\"value\")\n            });\n        }\n    }\n\n    function approveComment(commentId, element) {\n        var approveEndpoint = document.querySelector(\"[itemprop=blogPost]\").getAttribute(\"data-approve-comment-url\");\n        AsynObject.postAjax(approveEndpoint, function (state, status) {\n            if (state === 4 && status === 200) {                \n                element.remove();\n                return;\n            } else if (status !== 200) {\n                alert(\"Something went wrong. Please try again\");\n            }\n        }, {\n            mode: \"approve\",\n            postId: postId,\n            commentId: commentId,\n            __RequestVerificationToken: document.querySelector(\"input[name=__RequestVerificationToken]\").getAttribute(\"value\")\n        });\n    }\n\n    function saveComment(name, email, website, content, captchaResult, callback) {\n\n        if (localStorage) {\n            localStorage.setItem(\"name\", name);\n            localStorage.setItem(\"email\", email);\n            localStorage.setItem(\"website\", website);\n        }\n        endpoint = document.getElementById(\"commentform\").getAttribute(\"data-blog-path\");\n        AsynObject.postAjax(endpoint, function (state, status, data) {\n\n            var elemStatus = document.getElementById(\"status\");\n            if (state === 4 && status === 200) {\n                elemStatus.innerHTML = \"Your comment has been added\";\n                removeClass(elemStatus, \"alert-danger\");\n                addClass(elemStatus, \"alert-success\");\n\n                document.getElementById(\"commentcontent\").value = \"\";\n\n                var comment = toDOM(data)[0];\n                comment.style.height = \"0px\";\n                var elemComments = document.getElementById(\"comments\");\n                elemComments.appendChild(comment);\n                slide(comment, \"Down\");\n                callback(true);\n\n                return;\n            } else if (status !== 200) {\n                addClass(elemStatus, \"alert-danger\");\n                elemStatus.innerText = \"Unable to add comment\";\n                callback(false);\n            }\n        }, {\n            mode: \"save\",\n            postId: postId,\n            name: name,\n            email: email,\n            website: website,\n            content: content,\n            \"g-recaptcha-response\" : captchaResult,\n            __RequestVerificationToken: document.querySelector(\"input[name=__RequestVerificationToken]\").getAttribute(\"value\")\n        });\n\n    }\n\n    function initialize() {\n        postId = document.querySelector(\"[itemprop=blogPost]\").getAttribute(\"data-id\");\n        endpoint = document.getElementById(\"commentform\").getAttribute(\"data-blog-path\");\n        var email = document.getElementById(\"commentemail\");\n        var name = document.getElementById(\"commentname\");\n        var website = document.getElementById(\"commenturl\");\n        var content = document.getElementById(\"commentcontent\");\n        var commentForm = document.getElementById(\"commentform\");\n        var recaptcha;\n\n        var allComments = document.querySelectorAll(\"[itemprop=comment]\");\n        for (var i = 0; i < allComments.length; ++i) {\n            allComments[i].style.height = allComments[i].clientHeight + 'px';\n        }\n\n        commentForm.onsubmit = function (e) {\n            e.preventDefault();\n            var button = e.target;\n            button.setAttribute(\"disabled\", true);\n            var recpatchaValue = \"\";\n            recaptcha = document.getElementById(\"g-recaptcha-response\");\n            if (recaptcha)\n            {\n                recpatchaValue = recaptcha.value;\n                if (recpatchaValue.length == 0) { return; }\n            }\n            \n            saveComment(name.value, email.value, website.value, content.value, recpatchaValue, function () {\n                button.removeAttribute(\"disabled\");\n                if (recaptcha) {\n                    grecaptcha.reset();\n                }\n                \n            });\n        };\n\n        website.addEventListener(\"keyup\", function (e) {\n            var w = e.target;\n            if (w.value.trim().length >= 4 && w.value.indexOf(\"http\") === -1) {\n                w.value = \"http://\" + w.value;\n            }\n        });\n\n        window.addEventListener(\"click\", function (e) {\n            var tag = e.target;\n\n            if (hasClass(tag, \"deletecomment\")) {\n                var comment = getParentsByAttribute(tag, \"itemprop\", \"comment\")[0];\n                deleteComment(comment.getAttribute(\"data-id\"), comment);\n            }\n            if (hasClass(tag, \"approvecomment\")) {\n                var comment = getParentsByAttribute(tag, \"itemprop\", \"comment\")[0];\n                approveComment(comment.getAttribute(\"data-id\"), tag);\n            }\n        });\n\n        if (localStorage) {\n            email.value = localStorage.getItem(\"email\");\n            website.value = localStorage.getItem(\"website\");\n\n            if (name.value.length === 0) {\n                name.value = localStorage.getItem(\"name\");\n            }\n        }\n    }\n\n    if (document.getElementById(\"commentform\")) {\n        initialize();\n    }\n})();\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Web/js/edit-script.js",
    "content": "﻿$(function () {\n    $('[data-bs-toggle=\"tooltip\"]').tooltip()\n});\n$(document).ready(function () {\n    $('#SaveMode').click(function () {\n        var newDateVal = $('#NewPubDate').val();\n        if (newDateVal.length == 0) {\n            $('#dateRequired').modal('show')\n            $('#SaveMode').html($('#SaveMode').data(\"enabled-text\"));\n            return false;\n        }\n    });\n});\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Web/js/pagetree.js",
    "content": "﻿// Author: Joe Audette\n// Version: 2018-02-12\nvar tetherInstance;\n$(function () {\n\n    String.format = function () {\n        var s = arguments[0];\n        for (var i = 0; i < arguments.length - 1; i++) {\n            var reg = new RegExp(\"\\\\{\" + i + \"\\\\}\", \"gm\");\n            s = s.replace(reg, arguments[i + 1]);\n        }\n        return s;\n    };\n    \n    var pageTree = {\n        ui: {\n            treeDiv: $('#tree1'),\n            cmdBarDiv: $('#cmdBar'),\n            selectedPageInput: $('#hdnSelPage'),\n            cmdHeading: $('#cmdHeading'),\n            sortLi: $('#liSort'),\n            editLi: $('#liEdit'),\n            deleteLi: $('#liDelete'),\n            newChildLi: $('#liNewChild'),\n            editLink: $('#lnkEdit'),\n            viewLink: $('#lnkView'),\n            sortButton: $('#lnkSort'),\n            newChildLink: $('#lnkNewChild'),\n            deleteButton: $('#lnkDeletePage'),\n            pubStatusLabel: $('#spnPubStatus'),\n            movePagePromptFormat: $('#config').data(\"move-prompt-format\"),\n            deletePagePromptFormat: $('#config').data(\"delete-prompt-format\"),\n            deletePageWithChildrenPromptFormat: $('#config').data(\"delete-with-children-prompt-format\"),\n            sortChildrenAlphaPagePromptFormat: $('#config').data(\"sort-children-alpha-prompt-format\"),\n        },\n        urls: {\n            treeDataUrl: $('#config').data(\"service-url\"),\n            sortUrl: $('#config').data(\"sort-url\"),\n            moveUrl: $('#config').data(\"move-url\"),\n            deleteUrl: $('#config').data(\"delete-url\"),\n            editUrl: $('#config').data(\"edit-url\"),\n            newPageUrl: $('#config').data(\"new-page-url\")\n        },\n        xsrfToken: $('[name=\"__RequestVerificationToken\"]:first').val(),\n        showCommands : function (node) {\n            pageTree.ui.selectedPageInput.val(node.id);\n            pageTree.ui.cmdHeading.html(node.name);\n            pageTree.ui.editLink.attr('href', this.urls.editUrl + '/' + node.slug);\n            pageTree.ui.viewLink.attr('href', node.url);\n            pageTree.ui.newChildLink.attr('href', this.urls.newPageUrl + \"?parentslug=\" + node.slug);\n            pageTree.ui.pubStatusLabel.html(node.pubstatus);\n            pageTree.ui.cmdBarDiv.show();\n            tetherInstance = new Tether({\n                element: '.commandPanel',\n                target: '.jqtree-selected',\n                attachment: 'top left',\n                targetAttachment: 'top right'\n            });\n            setTimeout(function () {\n                if (tetherInstance) {\n                    tetherInstance.position();\n                }\n            });\n            setTimeout(function () {\n                tetherInstance.position();\n            })\n            if (node.childcount > 1) {\n                pageTree.ui.sortLi.show();\n            } else {\n                pageTree.ui.sortLi.hide();\n            };\n            if (node.canEdit) {\n                pageTree.ui.editLi.show();  \n            } else {\n                pageTree.ui.editLi.hide();\n            };\n            if (node.canDelete) {\n                pageTree.ui.deleteLi.show();\n            } else {\n                pageTree.ui.deleteLi.hide();\n            };\n            if (node.canCreateChild) {\n                pageTree.ui.newChildLi.show();\n            } else {\n                pageTree.ui.newChildLi.hide();\n            };\n        },\n        moveNode : function (movedNode, targetNode, previousParent, position) {\n            var obj = {};\n            obj['movedNode'] = movedNode.id;\n            obj['targetNode'] = targetNode.id;\n            obj['previousParent'] = previousParent.id;\n            obj['position'] = position;\n            var moveResult = false;\n            $.ajax({\n                type: \"POST\",\n                url: pageTree.urls.moveUrl,\n                async: false,\n                headers: { 'X-CSRFToken': this.xsrfToken },\n                dataType: \"json\",\n                data: obj,\n                success: function (data, textStatus, jqXHR) {\n                    if (data.success) { moveResult = true; } else {\n                        alert(data.message);\n                    }\n                },\n                complete: function (jqXHR, textStatus) {\n\n                },\n                error: function (jqXHR, textStatus, errorThrown) {\n                    alert(errorThrown);\n                }\n            });\n            return moveResult;\n        },\n        init: function () {\n            this.ui.sortButton.click(function (e) {\n                e.preventDefault();\n                var node = pageTree.ui.treeDiv.tree('getNodeById', pageTree.ui.selectedPageInput.val());\n                var prompt = String.format(pageTree.ui.sortChildrenAlphaPagePromptFormat, node.name);\n                $(\"#confirmModalBody\").html(prompt);\n                $(\"#mdlConfirm\").modal('show');\n\n                var sorter = function () {\n                    $(\"#mdlConfirm\").modal('hide');\n                    var objSort = {};\n                    objSort['pageId'] = node.id;\n                    $.ajax({\n                        type: \"POST\",\n                        url: pageTree.urls.sortUrl,\n                        headers: { 'X-CSRFToken': pageTree.xsrfToken },\n                        async: false,\n                        processData: true,\n                        dataType: \"json\",\n                        data: objSort,\n                        success: function (data, textStatus, jqXHR) {\n                            if (data.success) {\n                                pageTree.ui.treeDiv.tree('loadDataFromUrl', node);\n                            } else {\n                                alert(data.message);\n                            }\n                        },\n                        complete: function (jqXHR, textStatus) {\n\n                        },\n                        error: function (jqXHR, textStatus, errorThrown) {\n                            alert(errorThrown);\n                        }\n                    });\n                };\n                $('#btnConfirm').off('click').on('click', sorter);     \n                \n            }); // end sortbutton click\n\n            pageTree.ui.deleteButton.click(function (e) {\n                e.preventDefault();\n                var node = pageTree.ui.treeDiv.tree('getNodeById', pageTree.ui.selectedPageInput.val());\n                var doDelete = false;\n                var prompt;\n                if (node.childcount > 0) {\n                    prompt = String.format(pageTree.ui.deletePageWithChildrenPromptFormat, node.name, node.name);\n                } else {\n                    prompt = String.format(pageTree.ui.deletePagePromptFormat, node.name);\n                }\n\n                $(\"#confirmDeleteModalBody\").html(prompt);\n                $(\"#mdlDelete\").modal('show');\n                \n                var deleter = function () {\n                    $(\"#mdlDelete\").modal('hide');\n                    var objDel = {};\n                    objDel['id'] = node.id;\n                    $.ajax({\n                        type: \"POST\",\n                        url: pageTree.urls.deleteUrl,\n                        headers: { 'X-CSRFToken': pageTree.xsrfToken },\n                        async: false,\n                        dataType: \"json\",\n                        data: objDel,\n                        success: function (data, textStatus, jqXHR) {\n                            if (data.success) {\n                                pageTree.ui.treeDiv.tree('removeNode', node);\n                                pageTree.ui.cmdBarDiv.hide();\n                            } else {\n                                alert(data.message);\n                            }\n                        },\n                        complete: function (jqXHR, textStatus) {\n\n                        },\n                        error: function (jqXHR, textStatus, errorThrown) {\n                            alert(textStatus);\n                        }\n                    });\n                };\n\n                $('#btnConfirmDelete').off('click').on('click', deleter);     \n\n            }); // end delete click\n\n            pageTree.ui.treeDiv.tree({\n                dataUrl: pageTree.urls.treeDataUrl\n                , dragAndDrop: true\n                , onLoadFailed: function (response) {\n                    alert(response);\n                }\n            });\n            pageTree.ui.treeDiv.bind(\n                'tree.click',\n                function (event) {\n                    var node = event.node;\n                }\n            );\n            pageTree.ui.treeDiv.bind(\n                'tree.dblclick',\n                function (event) {\n                    console.log(e.node);\n                }\n            );\n            pageTree.ui.treeDiv.bind(\n                'tree.select',\n                function (event) {\n                    if (event.node) {\n                        pageTree.showCommands(event.node);\n                    } else {\n                        // event.node is null\n                        // a node was deselected\n                        // e.previous_node contains the deselected node\n                        var node = event.previous_node;\n                        pageTree.ui.selectedPageInput.val(-1);\n                        pageTree.ui.cmdBarDiv.hide();\n                    }\n                }\n            );\n            pageTree.ui.treeDiv.bind(\n                'tree.contextmenu',\n                function (event) {\n                    var node = event.node;\n                }\n            );\n            pageTree.ui.treeDiv.bind(\n                'tree.move',\n                function (event) {\n                    event.preventDefault();\n                    var prompt = String.format(pageTree.ui.movePagePromptFormat, event.move_info.moved_node.name, event.move_info.position, event.move_info.target_node.name);\n                    $(\"#confirmModalBody\").html(prompt);\n                    $(\"#mdlConfirm\").modal('show');\n                    var mover = function () {\n                        $(\"#mdlConfirm\").modal('hide');\n                        if (pageTree.moveNode(event.move_info.moved_node, event.move_info.target_node, event.move_info.previous_parent, event.move_info.position)) {\n                            event.move_info.do_move(); // this moves it in the ui\n                        }\n                        return false;\n                    }\n\n                    $('#btnConfirm').off('click').on('click', mover);   \n                }\n            );\n            pageTree.ui.treeDiv.bind(\n                'tree.init',\n                function () {\n                }\n            );\n            pageTree.ui.treeDiv.bind(\n                'tree.open',\n                function (event) {\n\n                    pageTree.ui.treeDiv.tree('selectNode', null);\n                    pageTree.ui.treeDiv.tree('selectNode', event.node);\n                }\n            );\n            pageTree.ui.treeDiv.bind(\n                'tree.close',\n                function (event) {\n                    pageTree.ui.treeDiv.tree('selectNode', null);\n                    pageTree.ui.treeDiv.tree('selectNode', event.node);\n                }\n            );\n\n        } \n    };\n    pageTree.init();\n}); \n\n$(window).on('scroll', function () {\n    if (tetherInstance) {\n        tetherInstance.position();\n    }\n});"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Web/js/sc-simple-gallery-init.js",
    "content": "﻿baguetteBox.run('.simple-gallery', { animation: 'slideIn' });\n"
  },
  {
    "path": "src/cloudscribe.SimpleContent.Web/js/unsaved-changes-warning.js",
    "content": "// Unsaved changes warning for Summernote editor\n(function() {\n    'use strict';\n    \n    let summernoteChanged = false;\n    \n    // Wait for DOM to be ready\n    document.addEventListener('DOMContentLoaded', function() {\n        // Find all Summernote textareas\n        const summernoteTextareas = document.querySelectorAll('[data-summernote-unobtrusive]');\n        if (summernoteTextareas.length === 0) {\n            return; // No Summernote on this page\n        }\n        \n        // Wait for Summernote to initialize (it's loaded asynchronously)\n        const checkSummernote = setInterval(function() {\n            if (typeof $ !== 'undefined' && $.fn.summernote) {\n                // Check if all Summernote instances are initialized\n                let allInitialized = true;\n                summernoteTextareas.forEach(function(textarea) {\n                    if (!$(textarea).data('summernote')) {\n                        allInitialized = false;\n                    }\n                });\n                \n                if (allInitialized) {\n                    clearInterval(checkSummernote);\n                    \n                    // Listen for Summernote change events on all instances\n                    summernoteTextareas.forEach(function(textarea) {\n                        $(textarea).on('summernote.change', function() {\n                            summernoteChanged = true;\n                        });\n                    });\n                    \n                    // Find Developer Tools link\n                    const devToolsLink = document.querySelector('a[data-unsaved-warning]');\n                    if (devToolsLink) {\n                        devToolsLink.addEventListener('click', function(e) {\n                            if (summernoteChanged) {\n                                const warningText = devToolsLink.getAttribute('data-unsaved-warning') || 'You have unsaved changes in the editor. Are you sure you want to navigate to Developer Tools? Your changes will be lost.';\n                                const confirmLeave = confirm(warningText);\n                                if (!confirmLeave) {\n                                    e.preventDefault();\n                                    return false;\n                                }\n                            }\n                        });\n                    }\n                    \n                    // Reset the flag when form is submitted successfully\n                    const form = document.querySelector('form[data-submit-once=\"true\"]');\n                    if (form) {\n                        form.addEventListener('submit', function() {\n                            summernoteChanged = false;\n                        });\n                    }\n                }\n            }\n        }, 100);\n        \n        // Stop checking after 10 seconds (failsafe)\n        setTimeout(function() {\n            clearInterval(checkSummernote);\n        }, 10000);\n    });\n})();"
  },
  {
    "path": "src/sourceDev.WebApp/Config/Authorization.cs",
    "content": "﻿using Microsoft.AspNetCore.Authorization;\n\nnamespace Microsoft.Extensions.DependencyInjection\n{\n    public static class Authorization\n    {\n        public static AuthorizationOptions SetupAuthorizationPolicies(this AuthorizationOptions options)\n        {\n            //https://docs.asp.net/en/latest/security/authorization/policies.html\n\n\n            options.AddCloudscribeLoggingDefaultPolicy();\n\n            options.AddCloudscribeCoreDefaultPolicies();\n\n            options.AddCloudscribeCoreSimpleContentIntegrationDefaultPolicies();\n\n            options.AddPolicy(\n                \"FileManagerPolicy\",\n                authBuilder =>\n                {\n                    authBuilder.RequireRole(\"Administrators\", \"Content Administrators\");\n                });\n\n            options.AddPolicy(\n                \"FileUploadPolicy\",\n                authBuilder =>\n                {\n                    authBuilder.RequireRole(\"Administrators\", \"Content Administrators\");\n                });\n\n            options.AddPolicy(\n                \"FileManagerDeletePolicy\",\n                authBuilder =>\n                {\n                    authBuilder.RequireRole(\"Administrators\", \"Content Administrators\");\n                });\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n            // add other policies here\n\n\n            return options;\n        }\n\n    }\n}\n"
  },
  {
    "path": "src/sourceDev.WebApp/Config/CloudscribeFeatures.cs",
    "content": "﻿using Microsoft.AspNetCore.Hosting;\nusing Microsoft.Extensions.Hosting;\n\n\nusing Microsoft.Extensions.Configuration;\nusing System.IO;\nusing System.Collections.Generic;\nusing cloudscribe.SimpleContent.Models;\nusing cloudscribe.Versioning;\n\nnamespace Microsoft.Extensions.DependencyInjection\n{\n    public static class CloudscribeFeatures\n    {\n\n        public static IServiceCollection SetupDataStorage(\n            this IServiceCollection services,\n            IConfiguration config,\n            IWebHostEnvironment env\n            )\n        {\n            var storage = config[\"DevOptions:DbPlatform\"].ToLowerInvariant();\n            var efProvider = config[\"DevOptions:EFProvider\"].ToLowerInvariant();\n            string connectionString;\n\n            switch (storage)\n            {\n                case \"efcore\":\n                    switch (efProvider.ToLower())\n                    {\n                        case \"mysql\":\n                            connectionString = config.GetConnectionString(\"MySqlEntityFrameworkConnection\");\n                            services.AddCloudscribeCoreEFStorageMySql(connectionString);\n                            services.AddCloudscribeLoggingEFStorageMySQL(connectionString);\n                            services.AddCloudscribeSimpleContentEFStorageMySQL(connectionString);\n                            break;\n\n                        case \"pgsql\":\n                            connectionString = config.GetConnectionString(\"PostgreSqlEntityFrameworkConnection\");\n                            services.AddCloudscribeCorePostgreSqlStorage(connectionString);\n                            services.AddCloudscribeLoggingPostgreSqlStorage(connectionString);\n                            services.AddCloudscribeSimpleContentPostgreSqlStorage(connectionString);\n                            break;\n\n                        case \"sqlite\":\n                            var dbName = config.GetConnectionString(\"SQLiteDbName\");\n                            var dbPath = Path.Combine(env.ContentRootPath, dbName);\n                            connectionString = $\"Data Source={dbPath}\";\n                            services.AddCloudscribeCoreEFStorageSQLite(connectionString);\n                            services.AddCloudscribeLoggingEFStorageSQLite(connectionString);\n                            services.AddCloudscribeSimpleContentEFStorageSQLite(connectionString);\n                            break;\n\n                        case \"mssql\":\n                        default:\n                            connectionString = config.GetConnectionString(\"EntityFrameworkConnection\");\n                            services.AddCloudscribeCoreEFStorageMSSQL(connectionString);\n                            services.AddCloudscribeLoggingEFStorageMSSQL(connectionString);\n                            services.AddCloudscribeSimpleContentEFStorageMSSQL(connectionString);\n                            break;\n                    }\n                    break;\n\n                case \"nodb\":\n                default:\n                    var useSingletons = true;\n                    services.AddCloudscribeCoreNoDbStorage(useSingletons);\n                    services.AddCloudscribeLoggingNoDbStorage(config);\n                    services.AddNoDbStorageForSimpleContent(useSingletons);\n                    break;\n            }\n\n            return services;\n        }\n\n        public static IServiceCollection SetupCloudscribeFeatures(\n            this IServiceCollection services,\n            IConfiguration config\n            )\n        {\n            services.AddScoped<IVersionProvider, cloudscribe.Core.SimpleContent.CompiledViews.Bootstrap5.VersionProvider>();\n            services.AddScoped<IVersionProvider, cloudscribe.SimpleContent.CompiledViews.Bootstrap5.VersionProvider>();\n            services.AddCloudscribeLogging(config);\n\n            services.AddScoped<cloudscribe.Web.Navigation.INavigationNodePermissionResolver, cloudscribe.Web.Navigation.NavigationNodePermissionResolver>();\n            services.AddScoped<cloudscribe.Web.Navigation.INavigationNodePermissionResolver, cloudscribe.SimpleContent.Web.Services.PagesNavigationNodePermissionResolver>();\n            services.AddCloudscribeCoreMvc(config);\n\n            //The template should not have put this here\n            // var storage = config[\"DevOptions:DbPlatform\"].ToLowerInvariant();\n            // if (storage == \"efcore\")\n            // {\n            //     services.AddScoped<IQueryTool, QueryTool>();\n            // }\n\n            services.Configure<List<ProjectSettings>>(config.GetSection(\"ContentProjects\"));\n\n            services.AddCloudscribeCoreIntegrationForSimpleContent(config);\n\n            // for testing that teasers can be disabled\n            //services.AddScoped<ITeaserService, cloudscribe.SimpleContent.Web.Services.TeaserServiceDisabled>();\n\n            services.AddSimpleContentMvc(config);\n            services.AddContentTemplatesForSimpleContent(config);\n\n            services.AddMetaWeblogForSimpleContent(config.GetSection(\"MetaWeblogApiOptions\"));\n\n            services.Configure<cloudscribe.FileManager.Web.Models.AutomaticUploadOptions>(config.GetSection(\"AutomaticUploadOptions\"));\n\n            services.AddSimpleContentRssSyndiction();\n\n\n            return services;\n        }\n\n    }\n}\n"
  },
  {
    "path": "src/sourceDev.WebApp/Config/DataProtection.cs",
    "content": "﻿using Microsoft.AspNetCore.DataProtection;\nusing Microsoft.AspNetCore.Hosting;\nusing Microsoft.Extensions.Configuration;\nusing Microsoft.Extensions.Hosting;\nusing System.IO;\n\nnamespace Microsoft.Extensions.DependencyInjection\n{\n    public static class DataProtection\n    {\n        public static IServiceCollection SetupDataProtection(\n            this IServiceCollection services,\n            IConfiguration config,\n            IWebHostEnvironment environment\n            )\n        {\n\n            // **** VERY IMPORTANT *****\n            // https://www.cloudscribe.com/docs/configuring-data-protection\n            // data protection keys are used to encrypt the auth token in the cookie\n            // and also to encrypt social auth secrets and smtp password in the data storage\n            // therefore we need keys to be persistent in order to be able to decrypt\n            // if you move an app to different hosting and the keys change then you would have\n            // to update those settings again from the Administration UI\n\n            // for IIS hosting you should use a powershell script to create a keyring in the registry\n            // per application pool and use a different application pool per app\n            // https://docs.microsoft.com/en-us/aspnet/core/publishing/iis#data-protection\n            // https://docs.microsoft.com/en-us/aspnet/core/security/data-protection/configuration/overview?tabs=aspnetcore2x\n            if (environment.IsProduction())\n            {\n                // If you are hosted in Azure you should add the package Microsoft.AspNetCore.DataProtection.AzureStorage to the .csproj file\n                // and uncomment/configure the code below as per documentation here: \n                // https://docs.microsoft.com/en-us/aspnet/core/security/data-protection/configuration/overview?view=aspnetcore-2.1&tabs=aspnetcore2x\n\n                // If using Azure for production the uri with sas token could be stored in azure as environment variable or using key vault\n                // but the keys go in azure blob storage per docs https://docs.microsoft.com/en-us/aspnet/core/security/data-protection/implementation/key-storage-providers\n                // this is false by default you should set it to true in azure environment variables\n                //var useBlobStorageForDataProtection = config.GetValue<bool>(\"AppSettings:UseAzureBlobForDataProtection\");\n                // best to put this in azure environment variables instead of appsettings.json\n                //var storageConnectionString = config[\"AppSettings:DataProtectionBlobStorageConnectionString\"];\n                // if (useBlobStorageForDataProtection && !string.IsNullOrWhiteSpace(storageConnectionString))\n                //{\n                //    var storageAccount = Microsoft.WindowsAzure.Storage.CloudStorageAccount.Parse(storageConnectionString);\n                //    var client = storageAccount.CreateCloudBlobClient();\n                //    var container = client.GetContainerReference(\"key-container\");\n                   // The container must exist before calling the DataProtection APIs.\n                    // The specific file within the container does not have to exist,\n                    // as it will be created on-demand.\n                //    container.CreateIfNotExistsAsync().GetAwaiter().GetResult();\n                //    services.AddDataProtection()\n                //        .PersistKeysToAzureBlobStorage(container, \"keys.xml\")\n                //        .ProtectKeysWithAzureKeyVault(\"<keyIdentifier>\", \"<clientId>\", \"<clientSecret>\")\n                //        ;\n\n                // https://docs.microsoft.com/en-us/aspnet/core/security/data-protection/configuration/overview?view=aspnetcore-2.2\n                //latest docs show it like this:\n                //services.AddDataProtection()\n                //        .PersistKeysToAzureBlobStorage(new Uri(\"<blobUriWithSasToken>\"))\n                //        .ProtectKeysWithAzureKeyVault(\"<keyIdentifier>\", \"<clientId>\", \"<clientSecret>\");\n\n                //}\n                //else\n                //{\n                    services.AddDataProtection();\n                //}\n            }\n            else\n            {\n                // dp_Keys folder should be added to .gitignore so the keys don't go into source control\n                // ie add a line with: **/dp_keys/**\n                // to your .gitignore file\n                string pathToCryptoKeys = Path.Combine(environment.ContentRootPath, \"dp_keys\");\n                services.AddDataProtection()\n                    .PersistKeysToFileSystem(new DirectoryInfo(pathToCryptoKeys))\n                    ;\n            }\n\n            return services;\n        }\n\n    }\n}\n"
  },
  {
    "path": "src/sourceDev.WebApp/Config/Localization.cs",
    "content": "﻿using cloudscribe.Core.Web.Localization;\nusing Microsoft.AspNetCore.Builder;\nusing Microsoft.AspNetCore.Localization;\nusing Microsoft.Extensions.Configuration;\nusing Microsoft.Extensions.Localization;\nusing System.Globalization;\nusing System.Linq;\n\nnamespace Microsoft.Extensions.DependencyInjection\n{\n    public static class Localization\n    {\n        public static IServiceCollection SetupLocalization(\n            this IServiceCollection services,\n            IConfiguration config\n            )\n        {\n            // https://github.com/cloudscribe/cloudscribe.Web.Localization\n            // https://www.cloudscribe.com/localization\n            services.Configure<GlobalResourceOptions>(config.GetSection(\"GlobalResourceOptions\"));\n            services.AddSingleton<IStringLocalizerFactory, GlobalResourceManagerStringLocalizerFactory>();\n\n            services.AddLocalization(options => options.ResourcesPath = \"GlobalResources\");\n\n            //you should only add cultures that you really plan to support\n            //if you translate the resx files or other files please share them back with us, email zip to info@cloudscribe.com\n            var supportedCultures = new[]\n                {\n                    new CultureInfo(\"en-US\"),\n                    //new CultureInfo(\"en-GB\"),\n                    //new CultureInfo(\"cy\"),  // deliberately not cy-GB\n                    new CultureInfo(\"fr-FR\"),\n                    new CultureInfo(\"cy-GB\"),\n                    new CultureInfo(\"it-IT\"),\n                    //new CultureInfo(\"ar-AR\"),\n                    //new CultureInfo(\"es-ES\"),\n\n                };\n\n            //this comes from cloudscribe core\n            var routeSegmentLocalizationProvider = new UrlSegmentRequestCultureProvider(supportedCultures.ToList());\n\n            services.Configure<RequestLocalizationOptions>(options =>\n            {\n\n\n                // State what the default culture for your application is. This will be used if no specific culture\n                // can be determined for a given request.\n                options.DefaultRequestCulture = new RequestCulture(culture: \"en-US\", uiCulture: \"en-US\");\n\n                // You must explicitly state which cultures your application supports.\n                // These are the cultures the app supports for formatting numbers, dates, etc.\n                options.SupportedCultures = supportedCultures;\n\n                // These are the cultures the app supports for UI strings, i.e. we have localized resources for.\n                options.SupportedUICultures = supportedCultures;\n\n                // You can change which providers are configured to determine the culture for requests, or even add a custom\n                // provider with your own logic. The providers will be asked in order to provide a culture for each request,\n                // and the first to provide a non-null result that is in the configured supported cultures list will be used.\n                // By default, the following built-in providers are configured:\n                // - QueryStringRequestCultureProvider, sets culture via \"culture\" and \"ui-culture\" query string values, useful for testing\n                // - CookieRequestCultureProvider, sets culture via \"ASPNET_CULTURE\" cookie\n                // - AcceptLanguageHeaderRequestCultureProvider, sets culture via the \"Accept-Language\" request header\n                //options.RequestCultureProviders.Insert(0, new CustomRequestCultureProvider(async context =>\n                //{\n                //  // My custom request culture logic\n                //  return new ProviderCultureResult(\"en\");\n                //}));\n\n                options.RequestCultureProviders.Insert(0, routeSegmentLocalizationProvider);\n\n            });\n\n            return services;\n        }\n\n    }\n}\n"
  },
  {
    "path": "src/sourceDev.WebApp/Config/RoutingAndMvc copy.cs.old",
    "content": "﻿using cloudscribe.Web.Localization;\nusing Microsoft.AspNetCore.Http;\nusing Microsoft.AspNetCore.Mvc;\nusing Microsoft.AspNetCore.Routing;\nusing Microsoft.Extensions.Configuration;\nusing Microsoft.Extensions.DependencyInjection;\n\nnamespace Microsoft.AspNetCore.Builder\n{\n    public static class RoutingAndMvc\n    {\n\n        /// this traditional mvc routing works around a bug in endpoint routing\n        public static IRouteBuilder UseCustomRoutes(\n            this IRouteBuilder routes,\n            bool useFolders,\n            IConfiguration config)\n        {\n            if (useFolders)\n            {\n                routes.AddCultureBlogRoutesForSimpleContent(new cloudscribe.Core.Web.Components.SiteFolderRouteConstraint(), new CultureSegmentRouteConstraint(true));\n                routes.AddBlogRoutesForSimpleContent(new cloudscribe.Core.Web.Components.SiteFolderRouteConstraint());\n            }\n\n            routes.AddCultureBlogRoutesForSimpleContent(new CultureSegmentRouteConstraint());\n            routes.AddBlogRoutesForSimpleContent();\n\n            routes.AddSimpleContentStaticResourceRoutes();\n\n            routes.AddCloudscribeFileManagerRoutes();\n            if (useFolders)\n            {\n                routes.MapRoute(\n                    name: \"foldererrorhandler\",\n                    template: \"{sitefolder}/oops/error/{statusCode?}\",\n                    defaults: new { controller = \"Oops\", action = \"Error\" },\n                    constraints: new { name = new cloudscribe.Core.Web.Components.SiteFolderRouteConstraint() }\n                );\n\n                routes.MapRoute(\n                      name: \"apifoldersitemap-localized\",\n                      template: \"{sitefolder}/{culture}/api/sitemap\"\n                      , defaults: new { controller = \"FolderSiteMap\", action = \"Index\" }\n                      , constraints: new { name = new cloudscribe.Core.Web.Components.SiteFolderRouteConstraint(), culture = new CultureSegmentRouteConstraint(true) }\n                      );\n\n                routes.MapRoute(\n                       name: \"apifoldersitemap\",\n                       template: \"{sitefolder}/api/sitemap\"\n                       , defaults: new { controller = \"FolderSiteMap\", action = \"Index\" }\n                       , constraints: new { name = new cloudscribe.Core.Web.Components.SiteFolderRouteConstraint() }\n                       );\n\n                routes.MapRoute(\n                      name: \"apifoldermetaweblog-localized\",\n                      template: \"{sitefolder}/{culture}/api/metaweblog\"\n                      , defaults: new { controller = \"FolderMetaweblog\", action = \"Index\" }\n                      , constraints: new { name = new cloudscribe.Core.Web.Components.SiteFolderRouteConstraint(), culture = new CultureSegmentRouteConstraint(true) }\n                      );\n\n                routes.MapRoute(\n                       name: \"apifoldermetaweblog\",\n                       template: \"{sitefolder}/api/metaweblog\"\n                       , defaults: new { controller = \"FolderMetaweblog\", action = \"Index\" }\n                       , constraints: new { name = new cloudscribe.Core.Web.Components.SiteFolderRouteConstraint() }\n                       );\n\n                routes.MapRoute(\n                       name: \"apifolderrss-localized\",\n                       template: \"{sitefolder}/{culture}/api/rss\"\n                       , defaults: new { controller = \"FolderRss\", action = \"Index\" }\n                       , constraints: new { name = new cloudscribe.Core.Web.Components.SiteFolderRouteConstraint(), culture = new CultureSegmentRouteConstraint(true) }\n                       );\n\n                routes.MapRoute(\n                       name: \"apifolderrss\",\n                       template: \"{sitefolder}/api/rss\"\n                       , defaults: new { controller = \"FolderRss\", action = \"Index\" }\n                       , constraints: new { name = new cloudscribe.Core.Web.Components.SiteFolderRouteConstraint() }\n                       );\n\n                routes.MapRoute(\n                    name: \"folderdefault\",\n                    template: \"{sitefolder}/{controller}/{action}/{id?}\",\n                    defaults: new { action = \"Index\" },\n                    constraints: new { name = new cloudscribe.Core.Web.Components.SiteFolderRouteConstraint() }\n                    );\n\n                routes.AddCulturePageRouteForSimpleContent(new cloudscribe.Core.Web.Components.SiteFolderRouteConstraint(), new CultureSegmentRouteConstraint(true));\n                routes.AddDefaultPageRouteForSimpleContent(new cloudscribe.Core.Web.Components.SiteFolderRouteConstraint());\n\n            }\n            routes.MapRoute(\n                name: \"errorhandler\",\n                template: \"oops/error/{statusCode?}\",\n                defaults: new { controller = \"Oops\", action = \"Error\" }\n                );\n\n            routes.MapRoute(\n                name: \"api-sitemap-culture\",\n                template: \"{culture}/api/sitemap\"\n                , defaults: new { controller = \"CultureSiteMap\", action = \"Index\" }\n                , constraints: new { culture = new CultureSegmentRouteConstraint() }\n                );\n\n            routes.MapRoute(\n                name: \"api-rss-culture\",\n                template: \"{culture}/api/rss\"\n                , defaults: new { controller = \"CultureRss\", action = \"Index\" }\n                , constraints: new { culture = new CultureSegmentRouteConstraint() }\n                );\n\n            routes.MapRoute(\n                name: \"api-metaweblog-culture\",\n                template: \"{culture}/api/metaweblog\"\n                , defaults: new { controller = \"CultureMetaweblog\", action = \"Index\" }\n                , constraints: new { culture = new CultureSegmentRouteConstraint() }\n                );\n\n            routes.MapRoute(\n                name: \"sitemap-localized\",\n                template: \"sitemap\"\n                , defaults: new { controller = \"Page\", action = \"SiteMap\" }\n                , constraints: new { culture = new CultureSegmentRouteConstraint() }\n                );\n\n            routes.MapRoute(\n                name: \"sitemap\",\n                template: \"sitemap\"\n                , defaults: new { controller = \"Page\", action = \"SiteMap\" }\n                );\n\n            var useHomeIndexAsDefault = config.GetValue<bool>(\"DevOptions:UseHomeIndexAsDefault\");\n            if (useHomeIndexAsDefault)\n            {\n                routes.MapRoute(\n                    name: \"default-localized\",\n                    template: \"{culture}/{controller}/{action}/{id?}\",\n                    defaults: new { controller = \"Home\", action = \"Index\" },\n                    constraints: new { culture = new CultureSegmentRouteConstraint() }\n                    );\n\n                routes.MapRoute(\n                    name: \"default\",\n                    template: \"{controller}/{action}\"\n                    , defaults: new { controller = \"Home\", action = \"Index\" }\n                    );\n            }\n            else\n            {\n                routes.MapRoute(\n                    name: \"default-localized\",\n                    template: \"{culture}/{controller}/{action}/{id?}\",\n                    defaults: null,\n                    constraints: new { culture = new CultureSegmentRouteConstraint() }\n                    );\n\n                routes.MapRoute(\n                    name: \"default\",\n                    template: \"{controller}/{action}\"\n                    //, defaults: new { controller = \"Home\", action = \"Index\" }\n                    );\n            }\n\n            return routes;\n        }\n\n        // this new endpoint routing has bugs that breaks folder and culture route constraints, this code could be used later after aspnetcore team fixes the bug\n        // https://github.com/aspnet/AspNetCore/issues/14877\n\n        public static IEndpointRouteBuilder UseCustomRoutes(\n            this IEndpointRouteBuilder\n            routes, bool useFolders,\n            IConfiguration config)\n        {\n            var useCustomRoutes = config.GetValue<bool>(\"DevOptions:UseCustomRoutes\");\n\n            if (useFolders)\n            {\n                routes.AddCultureBlogRoutesForSimpleContent(new cloudscribe.Core.Web.Components.SiteFolderRouteConstraint(), new CultureSegmentRouteConstraint(true));\n                routes.AddBlogRoutesForSimpleContent(new cloudscribe.Core.Web.Components.SiteFolderRouteConstraint());\n            }\n\n            routes.AddCultureBlogRoutesForSimpleContent(new CultureSegmentRouteConstraint());\n            routes.AddBlogRoutesForSimpleContent();\n\n            routes.AddSimpleContentStaticResourceRoutes();\n\n            //TODO filemanager culture routes?\n\n            routes.AddCloudscribeFileManagerRoutes();\n\n\n\n            if (useFolders)\n            {\n                routes.MapControllerRoute(\n                   name: \"foldererrorhandler\",\n                   pattern: \"{sitefolder}/oops/error/{statusCode?}\",\n                   defaults: new { controller = \"Oops\", action = \"Error\" },\n                   constraints: new { name = new cloudscribe.Core.Web.Components.SiteFolderRouteConstraint() }\n                );\n\n                routes.MapControllerRoute(\n                      name: \"apifoldersitemap-localized\",\n                      pattern: \"{sitefolder}/{culture}/api/sitemap\"\n                      , defaults: new { controller = \"FolderSiteMap\", action = \"Index\" }\n                      , constraints: new { name = new cloudscribe.Core.Web.Components.SiteFolderRouteConstraint(), culture = new CultureSegmentRouteConstraint(true) }\n                      );\n\n                routes.MapControllerRoute(\n                       name: \"apifoldersitemap\",\n                       pattern: \"{sitefolder}/api/sitemap\"\n                       , defaults: new { controller = \"FolderSiteMap\", action = \"Index\" }\n                       , constraints: new { name = new cloudscribe.Core.Web.Components.SiteFolderRouteConstraint() }\n                       );\n\n                routes.MapControllerRoute(\n                      name: \"folderserviceworker\",\n                      pattern: \"{sitefolder}/serviceworker\"\n                      , defaults: new { controller = \"Pwa\", action = \"ServiceWorker\" }\n                      , constraints: new { name = new cloudscribe.Core.Web.Components.SiteFolderRouteConstraint() }\n                      );\n\n                routes.MapControllerRoute(\n                      name: \"apifoldermetaweblog-localized\",\n                      pattern: \"{sitefolder}/{culture}/api/metaweblog\"\n                      , defaults: new { controller = \"FolderMetaweblog\", action = \"Index\" }\n                      , constraints: new { name = new cloudscribe.Core.Web.Components.SiteFolderRouteConstraint(), culture = new CultureSegmentRouteConstraint(true) }\n                      );\n\n                routes.MapControllerRoute(\n                       name: \"apifoldermetaweblog\",\n                       pattern: \"{sitefolder}/api/metaweblog\"\n                       , defaults: new { controller = \"FolderMetaweblog\", action = \"Index\" }\n                       , constraints: new { name = new cloudscribe.Core.Web.Components.SiteFolderRouteConstraint() }\n                       );\n\n                routes.MapControllerRoute(\n                       name: \"apifolderrss-localized\",\n                       pattern: \"{sitefolder}/{culture}/api/rss\"\n                       , defaults: new { controller = \"FolderRss\", action = \"Index\" }\n                       , constraints: new { name = new cloudscribe.Core.Web.Components.SiteFolderRouteConstraint(), culture = new CultureSegmentRouteConstraint(true) }\n                       );\n\n                routes.MapControllerRoute(\n                       name: \"apifolderrss\",\n                       pattern: \"{sitefolder}/api/rss\"\n                       , defaults: new { controller = \"FolderRss\", action = \"Index\" }\n                       , constraints: new { name = new cloudscribe.Core.Web.Components.SiteFolderRouteConstraint() }\n                       );\n\n                if (useCustomRoutes)\n                {\n                    routes.MapControllerRoute(\n                    name: \"folderdefault\",\n                        pattern: \"{sitefolder}/{controller}/{action}/{id?}\"\n                        , defaults: new { controller = \"Home\", action = \"Index\" }\n                        , constraints: new { name = new cloudscribe.Core.Web.Components.SiteFolderRouteConstraint() }\n                        );\n\n                    routes.AddCultureCustomPageRouteForSimpleContent(new cloudscribe.Core.Web.Components.SiteFolderRouteConstraint(), new CultureSegmentRouteConstraint(true), \"docs\");\n\n                    routes.AddCustomPageRouteForSimpleContent(new cloudscribe.Core.Web.Components.SiteFolderRouteConstraint(), \"docs\");\n                }\n                else\n                {\n                    routes.MapControllerRoute(\n                        name: \"foldersitemap-localized\",\n                        pattern: \"{sitefolder}/{culture}/sitemap\"\n                        , defaults: new { controller = \"Page\", action = \"SiteMap\" }\n                        , constraints: new { name = new cloudscribe.Core.Web.Components.SiteFolderRouteConstraint(), culture = new CultureSegmentRouteConstraint(true) }\n                        );\n\n                    routes.MapControllerRoute(\n                        name: \"foldersitemap\",\n                        pattern: \"{sitefolder}/sitemap\"\n                        , defaults: new { controller = \"Page\", action = \"SiteMap\" }\n                        , constraints: new { name = new cloudscribe.Core.Web.Components.SiteFolderRouteConstraint() }\n                        );\n\n                    routes.MapControllerRoute(\n                           name: \"folderdefault-localized\",\n                           pattern: \"{sitefolder}/{culture}/{controller}/{action}/{id?}\",\n                           defaults: new { controller = \"Home\" },\n                           constraints: new { sitefolder = new cloudscribe.Core.Web.Components.SiteFolderRouteConstraint(), culture = new CultureSegmentRouteConstraint(true) });\n\n                    routes.MapControllerRoute(\n                        name: \"folderdefault\",\n                        pattern: \"{sitefolder}/{controller}/{action}/{id?}\"\n                        , defaults: new { controller = \"Home\" }\n                        , constraints: new { name = new cloudscribe.Core.Web.Components.SiteFolderRouteConstraint() }\n                        );\n\n                    routes.AddCulturePageRouteForSimpleContent(new cloudscribe.Core.Web.Components.SiteFolderRouteConstraint(), new CultureSegmentRouteConstraint(true));\n                    routes.AddDefaultPageRouteForSimpleContent(new cloudscribe.Core.Web.Components.SiteFolderRouteConstraint());\n\n                    //routes.AddBlogRoutesForSimpleContent(new cloudscribe.Core.Web.Components.SiteFolderRouteConstraint(),\"\");\n                }\n\n\n            }\n\n            if (useCustomRoutes)\n            {\n                routes.AddCultureCustomPageRouteForSimpleContent(new CultureSegmentRouteConstraint(),\"docs\");\n                routes.AddCustomPageRouteForSimpleContent(\"docs\");\n            }\n\n\n            routes.MapControllerRoute(\n               name: \"errorhandler\",\n               pattern: \"oops/error/{statusCode?}\",\n               defaults: new { controller = \"Oops\", action = \"Error\" }\n               );\n\n            routes.MapControllerRoute(\n                       name: \"api-sitemap-culture\",\n                       pattern: \"{culture}/api/sitemap\"\n                       , defaults: new { controller = \"CultureSiteMap\", action = \"Index\" }\n                       , constraints: new { culture = new CultureSegmentRouteConstraint() }\n                       );\n\n            routes.MapControllerRoute(\n                       name: \"api-rss-culture\",\n                       pattern: \"{culture}/api/rss\"\n                       , defaults: new { controller = \"CultureRss\", action = \"Index\" }\n                       , constraints: new { culture = new CultureSegmentRouteConstraint() }\n                       );\n\n            routes.MapControllerRoute(\n                       name: \"api-metaweblog-culture\",\n                       pattern: \"{culture}/api/metaweblog\"\n                       , defaults: new { controller = \"CultureMetaweblog\", action = \"Index\" }\n                       , constraints: new { culture = new CultureSegmentRouteConstraint() }\n                       );\n\n            //routes.AddPwaDefaultRoutes(new cloudscribe.Core.Web.Components.SiteFolderRouteConstraint());\n\n            routes.MapControllerRoute(\n                name: \"sitemap-localized\",\n                pattern: \"sitemap\"\n                , defaults: new { controller = \"Page\", action = \"SiteMap\" }\n                , constraints: new { culture = new CultureSegmentRouteConstraint() }\n                );\n\n            routes.MapControllerRoute(\n                name: \"sitemap\",\n                pattern: \"sitemap\"\n                , defaults: new { controller = \"Page\", action = \"SiteMap\" }\n                );\n\n            var useHomeIndexAsDefault = config.GetValue<bool>(\"DevOptions:UseHomeIndexAsDefault\");\n            if (useHomeIndexAsDefault)\n            {\n                routes.MapControllerRoute(\n                    name: \"default-localized\",\n                    pattern: \"{culture}/{controller}/{action}/{id?}\",\n                    defaults: new { controller = \"Home\", action = \"Index\" },\n                    constraints: new { culture = new CultureSegmentRouteConstraint() }\n                    );\n\n                routes.MapControllerRoute(\n                    name: \"default\",\n                    pattern: \"{controller}/{action}\"\n                    , defaults: new { controller = \"Home\", action = \"Index\" }\n                    );\n            }\n            else\n            {\n                routes.MapControllerRoute(\n                    name: \"default-localized\",\n                    pattern: \"{culture}/{controller}/{action}/{id?}\",\n                    defaults: null,\n                    constraints: new { culture = new CultureSegmentRouteConstraint() }\n                    );\n\n                routes.MapControllerRoute(\n                    name: \"default\",\n                    pattern: \"{controller}/{action}\"\n                    //, defaults: new { controller = \"Home\", action = \"Index\" }\n                    );\n            }\n\n\n            if (!useCustomRoutes)\n            {\n                routes.AddCulturePageRouteForSimpleContent(new CultureSegmentRouteConstraint());\n                routes.AddDefaultPageRouteForSimpleContent();\n            }\n            //routes.AddBlogRoutesForSimpleContent(\"\");\n\n\n            return routes;\n        }\n\n        public static IServiceCollection SetupMvc(\n            this IServiceCollection services,\n            bool sslIsAvailable\n            )\n        {\n            services.Configure<MvcOptions>(options =>\n            {\n                // workaround for\n                //https://github.com/cloudscribe/cloudscribe.SimpleContent/issues/466\n                options.EnableEndpointRouting = false;\n                if (sslIsAvailable)\n                {\n                    options.Filters.Add(new RequireHttpsAttribute());\n                }\n\n                options.CacheProfiles.Add(\"SiteMapCacheProfile\",\n                     new CacheProfile\n                     {\n                         Duration = 30\n                     });\n\n                options.CacheProfiles.Add(\"RssCacheProfile\",\n                     new CacheProfile\n                     {\n                         Duration = 100\n                     });\n\n            });\n\n            services.AddRouting(options =>\n            {\n                options.LowercaseUrls = true;\n                options.LowercaseQueryStrings = false;\n            });\n\n            services.AddMvc()\n                .AddRazorOptions(options =>\n                {\n                    options.ViewLocationExpanders.Add(new cloudscribe.Core.Web.Components.SiteViewLocationExpander());\n                })\n                ;\n\n            return services;\n        }\n\n    }\n}\n"
  },
  {
    "path": "src/sourceDev.WebApp/Config/RoutingAndMvc.cs",
    "content": "﻿using cloudscribe.Web.Localization;\nusing Microsoft.AspNetCore.Mvc;\nusing Microsoft.AspNetCore.Routing;\nusing Microsoft.Extensions.Configuration;\nusing Microsoft.Extensions.DependencyInjection;\n\nnamespace Microsoft.AspNetCore.Builder\n{\n    public static class RoutingAndMvc\n    {\n        /// <summary>\n        /// this is the 2.x way which still works\n        /// </summary>\n        /// <param name=\"routes\"></param>\n        /// <param name=\"useFolders\"></param>\n        /// <param name=\"config\"></param>\n        /// <returns></returns>\n        public static IRouteBuilder UseCustomRoutes(\n            this IRouteBuilder\n            routes, bool useFolders,\n            IConfiguration config)\n        {\n            var useCustomRoutes = config.GetValue<bool>(\"DevOptions:UseCustomRoutes\");\n\n            if (useFolders)\n            {\n                routes.AddCultureBlogRoutesForSimpleContent(new cloudscribe.Core.Web.Components.SiteFolderRouteConstraint(), new CultureSegmentRouteConstraint(true));\n                routes.AddBlogRoutesForSimpleContent(new cloudscribe.Core.Web.Components.SiteFolderRouteConstraint());\n            }\n\n            routes.AddCultureBlogRoutesForSimpleContent(new CultureSegmentRouteConstraint());\n            routes.AddBlogRoutesForSimpleContent();\n\n            routes.AddSimpleContentStaticResourceRoutes();\n\n            //TODO filemanager culture routes?\n\n            routes.AddCloudscribeFileManagerRoutes();\n\n\n\n            if (useFolders)\n            {\n                routes.MapRoute(\n                   name: \"foldererrorhandler\",\n                   template: \"{sitefolder}/oops/error/{statusCode?}\",\n                   defaults: new { controller = \"Oops\", action = \"Error\" },\n                   constraints: new { name = new cloudscribe.Core.Web.Components.SiteFolderRouteConstraint() }\n                );\n\n                routes.MapRoute(\n                      name: \"apifoldersitemap-localized\",\n                      template: \"{sitefolder}/{culture}/api/sitemap\"\n                      , defaults: new { controller = \"FolderSiteMap\", action = \"Index\" }\n                      , constraints: new { name = new cloudscribe.Core.Web.Components.SiteFolderRouteConstraint(), culture = new CultureSegmentRouteConstraint(true) }\n                      );\n\n                routes.MapRoute(\n                       name: \"apifoldersitemap\",\n                       template: \"{sitefolder}/api/sitemap\"\n                       , defaults: new { controller = \"FolderSiteMap\", action = \"Index\" }\n                       , constraints: new { name = new cloudscribe.Core.Web.Components.SiteFolderRouteConstraint() }\n                       );\n\n                routes.MapRoute(\n                      name: \"folderserviceworker\",\n                      template: \"{sitefolder}/serviceworker\"\n                      , defaults: new { controller = \"Pwa\", action = \"ServiceWorker\" }\n                      , constraints: new { name = new cloudscribe.Core.Web.Components.SiteFolderRouteConstraint() }\n                      );\n\n                routes.MapRoute(\n                      name: \"apifoldermetaweblog-localized\",\n                      template: \"{sitefolder}/{culture}/api/metaweblog\"\n                      , defaults: new { controller = \"FolderMetaweblog\", action = \"Index\" }\n                      , constraints: new { name = new cloudscribe.Core.Web.Components.SiteFolderRouteConstraint(), culture = new CultureSegmentRouteConstraint(true) }\n                      );\n\n                routes.MapRoute(\n                       name: \"apifoldermetaweblog\",\n                       template: \"{sitefolder}/api/metaweblog\"\n                       , defaults: new { controller = \"FolderMetaweblog\", action = \"Index\" }\n                       , constraints: new { name = new cloudscribe.Core.Web.Components.SiteFolderRouteConstraint() }\n                       );\n\n                routes.MapRoute(\n                       name: \"apifolderrss-localized\",\n                       template: \"{sitefolder}/{culture}/api/rss\"\n                       , defaults: new { controller = \"FolderRss\", action = \"Index\" }\n                       , constraints: new { name = new cloudscribe.Core.Web.Components.SiteFolderRouteConstraint(), culture = new CultureSegmentRouteConstraint(true) }\n                       );\n\n                routes.MapRoute(\n                       name: \"apifolderrss\",\n                       template: \"{sitefolder}/api/rss\"\n                       , defaults: new { controller = \"FolderRss\", action = \"Index\" }\n                       , constraints: new { name = new cloudscribe.Core.Web.Components.SiteFolderRouteConstraint() }\n                       );\n\n                if (useCustomRoutes)\n                {\n                    routes.MapRoute(\n                    name: \"folderdefault\",\n                        template: \"{sitefolder}/{controller}/{action}/{id?}\"\n                        , defaults: new { controller = \"Home\", action = \"Index\" }\n                        , constraints: new { name = new cloudscribe.Core.Web.Components.SiteFolderRouteConstraint() }\n                        );\n\n                    routes.AddCultureCustomPageRouteForSimpleContent(new cloudscribe.Core.Web.Components.SiteFolderRouteConstraint(), new CultureSegmentRouteConstraint(true), \"docs\");\n\n                    routes.AddCustomPageRouteForSimpleContent(new cloudscribe.Core.Web.Components.SiteFolderRouteConstraint(), \"docs\");\n                }\n                else\n                {\n                    routes.MapRoute(\n                        name: \"foldersitemap-localized\",\n                        template: \"{sitefolder}/{culture}/sitemap\"\n                        , defaults: new { controller = \"Page\", action = \"SiteMap\" }\n                        , constraints: new { name = new cloudscribe.Core.Web.Components.SiteFolderRouteConstraint(), culture = new CultureSegmentRouteConstraint(true) }\n                        );\n\n                    routes.MapRoute(\n                        name: \"foldersitemap\",\n                        template: \"{sitefolder}/sitemap\"\n                        , defaults: new { controller = \"Page\", action = \"SiteMap\" }\n                        , constraints: new { name = new cloudscribe.Core.Web.Components.SiteFolderRouteConstraint() }\n                        );\n\n                    routes.MapRoute(\n                           name: \"folderdefault-localized\",\n                           template: \"{sitefolder}/{culture}/{controller}/{action}/{id?}\",\n                           defaults: new { controller = \"Home\" },\n                           constraints: new { sitefolder = new cloudscribe.Core.Web.Components.SiteFolderRouteConstraint(), culture = new CultureSegmentRouteConstraint(true) });\n\n                    routes.MapRoute(\n                        name: \"folderdefault\",\n                        template: \"{sitefolder}/{controller}/{action}/{id?}\"\n                        , defaults: new { controller = \"Home\" }\n                        , constraints: new { name = new cloudscribe.Core.Web.Components.SiteFolderRouteConstraint() }\n                        );\n\n                    routes.AddCulturePageRouteForSimpleContent(new cloudscribe.Core.Web.Components.SiteFolderRouteConstraint(), new CultureSegmentRouteConstraint(true));\n                    routes.AddDefaultPageRouteForSimpleContent(new cloudscribe.Core.Web.Components.SiteFolderRouteConstraint());\n\n                    //routes.AddBlogRoutesForSimpleContent(new cloudscribe.Core.Web.Components.SiteFolderRouteConstraint(),\"\");\n                }\n\n\n            }\n\n            if (useCustomRoutes)\n            {\n                routes.AddCultureCustomPageRouteForSimpleContent(new CultureSegmentRouteConstraint(), \"docs\");\n                routes.AddCustomPageRouteForSimpleContent(\"docs\");\n            }\n\n\n            routes.MapRoute(\n               name: \"errorhandler\",\n               template: \"oops/error/{statusCode?}\",\n               defaults: new { controller = \"Oops\", action = \"Error\" }\n               );\n\n            routes.MapRoute(\n                       name: \"api-sitemap-culture\",\n                       template: \"{culture}/api/sitemap\"\n                       , defaults: new { controller = \"CultureSiteMap\", action = \"Index\" }\n                       , constraints: new { culture = new CultureSegmentRouteConstraint() }\n                       );\n\n            routes.MapRoute(\n                       name: \"api-rss-culture\",\n                       template: \"{culture}/api/rss\"\n                       , defaults: new { controller = \"CultureRss\", action = \"Index\" }\n                       , constraints: new { culture = new CultureSegmentRouteConstraint() }\n                       );\n\n            routes.MapRoute(\n                       name: \"api-metaweblog-culture\",\n                       template: \"{culture}/api/metaweblog\"\n                       , defaults: new { controller = \"CultureMetaweblog\", action = \"Index\" }\n                       , constraints: new { culture = new CultureSegmentRouteConstraint() }\n                       );\n\n            //routes.AddPwaDefaultRoutes(new cloudscribe.Core.Web.Components.SiteFolderRouteConstraint());\n\n            routes.MapRoute(\n                name: \"sitemap-localized\",\n                template: \"sitemap\"\n                , defaults: new { controller = \"Page\", action = \"SiteMap\" }\n                , constraints: new { culture = new CultureSegmentRouteConstraint() }\n                );\n\n            routes.MapRoute(\n                name: \"sitemap\",\n                template: \"sitemap\"\n                , defaults: new { controller = \"Page\", action = \"SiteMap\" }\n                );\n\n            var useHomeIndexAsDefault = config.GetValue<bool>(\"DevOptions:UseHomeIndexAsDefault\");\n            if (useHomeIndexAsDefault)\n            {\n                routes.MapRoute(\n                    name: \"default-localized\",\n                    template: \"{culture}/{controller}/{action}/{id?}\",\n                    defaults: new { controller = \"Home\", action = \"Index\" },\n                    constraints: new { culture = new CultureSegmentRouteConstraint() }\n                    );\n\n                routes.MapRoute(\n                    name: \"default\",\n                    template: \"{controller}/{action}\"\n                    , defaults: new { controller = \"Home\", action = \"Index\" }\n                    );\n            }\n            else\n            {\n                routes.MapRoute(\n                    name: \"default-localized\",\n                    template: \"{culture}/{controller}/{action}/{id?}\",\n                    defaults: null,\n                    constraints: new { culture = new CultureSegmentRouteConstraint() }\n                    );\n\n                routes.MapRoute(\n                    name: \"default\",\n                    template: \"{controller}/{action}\"\n                    //, defaults: new { controller = \"Home\", action = \"Index\" }\n                    );\n            }\n\n\n            if (!useCustomRoutes)\n            {\n                routes.AddCulturePageRouteForSimpleContent(new CultureSegmentRouteConstraint());\n                routes.AddDefaultPageRouteForSimpleContent();\n            }\n            //routes.AddBlogRoutesForSimpleContent(\"\");\n\n\n            return routes;\n        }\n\n        /// <summary>\n        /// this is the new 3.0 endpoint routing but it has bugs that break folder tenants and culture segment route constraints\n        /// </summary>\n        /// <param name=\"routes\"></param>\n        /// <param name=\"useFolders\"></param>\n        /// <param name=\"config\"></param>\n        /// <returns></returns>\n        public static IEndpointRouteBuilder UseCustomRoutes(\n            this IEndpointRouteBuilder\n            routes, bool useFolders,\n            IConfiguration config)\n        {\n            var useCustomRoutes = config.GetValue<bool>(\"DevOptions:UseCustomRoutes\");\n\n            if (useFolders)\n            {\n                routes.AddCultureBlogRoutesForSimpleContent(new cloudscribe.Core.Web.Components.SiteFolderRouteConstraint(), new CultureSegmentRouteConstraint(true));\n                routes.AddBlogRoutesForSimpleContent(new cloudscribe.Core.Web.Components.SiteFolderRouteConstraint());\n            }\n\n            routes.AddCultureBlogRoutesForSimpleContent(new CultureSegmentRouteConstraint());\n            routes.AddBlogRoutesForSimpleContent();\n\n            routes.AddSimpleContentStaticResourceRoutes();\n\n            //TODO filemanager culture routes?\n\n            routes.AddCloudscribeFileManagerRoutes();\n\n\n\n            if (useFolders)\n            {\n                routes.MapControllerRoute(\n                   name: \"foldererrorhandler\",\n                   pattern: \"{sitefolder}/oops/error/{statusCode?}\",\n                   defaults: new { controller = \"Oops\", action = \"Error\" },\n                   constraints: new { name = new cloudscribe.Core.Web.Components.SiteFolderRouteConstraint() }\n                );\n\n                routes.MapControllerRoute(\n                      name: \"apifoldersitemap-localized\",\n                      pattern: \"{sitefolder}/{culture}/api/sitemap\"\n                      , defaults: new { controller = \"FolderSiteMap\", action = \"Index\" }\n                      , constraints: new { name = new cloudscribe.Core.Web.Components.SiteFolderRouteConstraint(), culture = new CultureSegmentRouteConstraint(true) }\n                      );\n\n                routes.MapControllerRoute(\n                       name: \"apifoldersitemap\",\n                       pattern: \"{sitefolder}/api/sitemap\"\n                       , defaults: new { controller = \"FolderSiteMap\", action = \"Index\" }\n                       , constraints: new { name = new cloudscribe.Core.Web.Components.SiteFolderRouteConstraint() }\n                       );\n\n                routes.MapControllerRoute(\n                      name: \"folderserviceworker\",\n                      pattern: \"{sitefolder}/serviceworker\"\n                      , defaults: new { controller = \"Pwa\", action = \"ServiceWorker\" }\n                      , constraints: new { name = new cloudscribe.Core.Web.Components.SiteFolderRouteConstraint() }\n                      );\n\n                routes.MapControllerRoute(\n                      name: \"apifoldermetaweblog-localized\",\n                      pattern: \"{sitefolder}/{culture}/api/metaweblog\"\n                      , defaults: new { controller = \"FolderMetaweblog\", action = \"Index\" }\n                      , constraints: new { name = new cloudscribe.Core.Web.Components.SiteFolderRouteConstraint(), culture = new CultureSegmentRouteConstraint(true) }\n                      );\n\n                routes.MapControllerRoute(\n                       name: \"apifoldermetaweblog\",\n                       pattern: \"{sitefolder}/api/metaweblog\"\n                       , defaults: new { controller = \"FolderMetaweblog\", action = \"Index\" }\n                       , constraints: new { name = new cloudscribe.Core.Web.Components.SiteFolderRouteConstraint() }\n                       );\n\n                routes.MapControllerRoute(\n                       name: \"apifolderrss-localized\",\n                       pattern: \"{sitefolder}/{culture}/api/rss\"\n                       , defaults: new { controller = \"FolderRss\", action = \"Index\" }\n                       , constraints: new { name = new cloudscribe.Core.Web.Components.SiteFolderRouteConstraint(), culture = new CultureSegmentRouteConstraint(true) }\n                       );\n\n                routes.MapControllerRoute(\n                       name: \"apifolderrss\",\n                       pattern: \"{sitefolder}/api/rss\"\n                       , defaults: new { controller = \"FolderRss\", action = \"Index\" }\n                       , constraints: new { name = new cloudscribe.Core.Web.Components.SiteFolderRouteConstraint() }\n                       );\n\n                if (useCustomRoutes)\n                {\n                    routes.MapControllerRoute(\n                    name: \"folderdefault\",\n                        pattern: \"{sitefolder}/{controller}/{action}/{id?}\"\n                        , defaults: new { controller = \"Home\", action = \"Index\" }\n                        , constraints: new { name = new cloudscribe.Core.Web.Components.SiteFolderRouteConstraint() }\n                        );\n\n                    routes.AddCultureCustomPageRouteForSimpleContent(new cloudscribe.Core.Web.Components.SiteFolderRouteConstraint(), new CultureSegmentRouteConstraint(true), \"docs\");\n\n                    routes.AddCustomPageRouteForSimpleContent(new cloudscribe.Core.Web.Components.SiteFolderRouteConstraint(), \"docs\");\n                }\n                else\n                {\n                    routes.MapControllerRoute(\n                        name: \"foldersitemap-localized\",\n                        pattern: \"{sitefolder}/{culture}/sitemap\"\n                        , defaults: new { controller = \"Page\", action = \"SiteMap\" }\n                        , constraints: new { name = new cloudscribe.Core.Web.Components.SiteFolderRouteConstraint(), culture = new CultureSegmentRouteConstraint(true) }\n                        );\n\n                    routes.MapControllerRoute(\n                        name: \"foldersitemap\",\n                        pattern: \"{sitefolder}/sitemap\"\n                        , defaults: new { controller = \"Page\", action = \"SiteMap\" }\n                        , constraints: new { name = new cloudscribe.Core.Web.Components.SiteFolderRouteConstraint() }\n                        );\n\n                    routes.MapControllerRoute(\n                           name: \"folderdefault-localized\",\n                           pattern: \"{sitefolder}/{culture}/{controller}/{action}/{id?}\",\n                           defaults: new { controller = \"Home\" },\n                           constraints: new { sitefolder = new cloudscribe.Core.Web.Components.SiteFolderRouteConstraint(), culture = new CultureSegmentRouteConstraint(true) });\n\n                    routes.MapControllerRoute(\n                        name: \"folderdefault\",\n                        pattern: \"{sitefolder}/{controller}/{action}/{id?}\"\n                        , defaults: new { controller = \"Home\" }\n                        , constraints: new { name = new cloudscribe.Core.Web.Components.SiteFolderRouteConstraint() }\n                        );\n\n                    routes.AddCulturePageRouteForSimpleContent(new cloudscribe.Core.Web.Components.SiteFolderRouteConstraint(), new CultureSegmentRouteConstraint(true));\n                    routes.AddDefaultPageRouteForSimpleContent(new cloudscribe.Core.Web.Components.SiteFolderRouteConstraint());\n\n                    //routes.AddBlogRoutesForSimpleContent(new cloudscribe.Core.Web.Components.SiteFolderRouteConstraint(),\"\");\n                }\n\n\n            }\n\n            if (useCustomRoutes)\n            {\n                routes.AddCultureCustomPageRouteForSimpleContent(new CultureSegmentRouteConstraint(),\"docs\");\n                routes.AddCustomPageRouteForSimpleContent(\"docs\");\n            }\n\n\n            routes.MapControllerRoute(\n               name: \"errorhandler\",\n               pattern: \"oops/error/{statusCode?}\",\n               defaults: new { controller = \"Oops\", action = \"Error\" }\n               );\n\n            routes.MapControllerRoute(\n                       name: \"api-sitemap-culture\",\n                       pattern: \"{culture}/api/sitemap\"\n                       , defaults: new { controller = \"CultureSiteMap\", action = \"Index\" }\n                       , constraints: new { culture = new CultureSegmentRouteConstraint() }\n                       );\n\n            routes.MapControllerRoute(\n                       name: \"api-rss-culture\",\n                       pattern: \"{culture}/api/rss\"\n                       , defaults: new { controller = \"CultureRss\", action = \"Index\" }\n                       , constraints: new { culture = new CultureSegmentRouteConstraint() }\n                       );\n\n            routes.MapControllerRoute(\n                       name: \"api-metaweblog-culture\",\n                       pattern: \"{culture}/api/metaweblog\"\n                       , defaults: new { controller = \"CultureMetaweblog\", action = \"Index\" }\n                       , constraints: new { culture = new CultureSegmentRouteConstraint() }\n                       );\n\n            //routes.AddPwaDefaultRoutes(new cloudscribe.Core.Web.Components.SiteFolderRouteConstraint());\n\n            routes.MapControllerRoute(\n                name: \"sitemap-localized\",\n                pattern: \"sitemap\"\n                , defaults: new { controller = \"Page\", action = \"SiteMap\" }\n                , constraints: new { culture = new CultureSegmentRouteConstraint() }\n                );\n\n            routes.MapControllerRoute(\n                name: \"sitemap\",\n                pattern: \"sitemap\"\n                , defaults: new { controller = \"Page\", action = \"SiteMap\" }\n                );\n\n            var useHomeIndexAsDefault = config.GetValue<bool>(\"DevOptions:UseHomeIndexAsDefault\");\n            if (useHomeIndexAsDefault)\n            {\n                routes.MapControllerRoute(\n                    name: \"default-localized\",\n                    pattern: \"{culture}/{controller}/{action}/{id?}\",\n                    defaults: new { controller = \"Home\", action = \"Index\" },\n                    constraints: new { culture = new CultureSegmentRouteConstraint() }\n                    );\n\n                routes.MapControllerRoute(\n                    name: \"default\",\n                    pattern: \"{controller}/{action}\"\n                    , defaults: new { controller = \"Home\", action = \"Index\" }\n                    );\n            }\n            else\n            {\n                routes.MapControllerRoute(\n                    name: \"default-localized\",\n                    pattern: \"{culture}/{controller}/{action}/{id?}\",\n                    defaults: null,\n                    constraints: new { culture = new CultureSegmentRouteConstraint() }\n                    );\n\n                routes.MapControllerRoute(\n                    name: \"default\",\n                    pattern: \"{controller}/{action}\"\n                    //, defaults: new { controller = \"Home\", action = \"Index\" }\n                    );\n            }\n\n\n            if (!useCustomRoutes)\n            {\n                routes.AddCulturePageRouteForSimpleContent(new CultureSegmentRouteConstraint());\n                routes.AddDefaultPageRouteForSimpleContent();\n            }\n            //routes.AddBlogRoutesForSimpleContent(\"\");\n\n\n            return routes;\n        }\n\n\n\n        public static IServiceCollection SetupMvc(\n            this IServiceCollection services,\n            bool sslIsAvailable\n            )\n        {\n            services.Configure<ForwardedHeadersOptions>(options =>\n            {\n                options.ForwardedHeaders = Microsoft.AspNetCore.HttpOverrides.ForwardedHeaders.XForwardedProto;\n            });\n\n            services.Configure<MvcOptions>(options =>\n            {\n                options.EnableEndpointRouting = false;\n\n                if (sslIsAvailable)\n                {\n                    options.Filters.Add(new RequireHttpsAttribute());\n                }\n\n\n                options.CacheProfiles.Add(\"SiteMapCacheProfile\",\n                     new CacheProfile\n                     {\n                         Duration = 30\n                     });\n\n                options.CacheProfiles.Add(\"RssCacheProfile\",\n                     new CacheProfile\n                     {\n                         Duration = 100\n                     });\n            });\n\n            services.AddRouting(options =>\n            {\n                options.LowercaseUrls = true;\n                options.LowercaseQueryStrings = false;\n            });\n\n            services.AddMvc()\n                .AddRazorOptions(options =>\n                {\n                    options.ViewLocationExpanders.Add(new cloudscribe.Core.Web.Components.SiteViewLocationExpander());\n\n                });\n\n            return services;\n        }\n    }\n}\n"
  },
  {
    "path": "src/sourceDev.WebApp/Controllers/HomeController.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing Microsoft.AspNetCore.Mvc;\n\n\nnamespace sourceDev.WebApp.Controllers\n{\n    public class HomeController : Controller\n    {\n        public IActionResult Index()\n        {\n            return View();\n        }\n\n        public IActionResult About()\n        {\n            ViewData[\"Message\"] = \"Your application description page.\";\n\n            return View();\n        }\n\n        public IActionResult Contact()\n        {\n            ViewData[\"Message\"] = \"Your contact page.\";\n\n            return View();\n        }\n\n        \n    }\n}\n"
  },
  {
    "path": "src/sourceDev.WebApp/GlobalResources/CloudscribeCore.en-US.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"AliasId\" xml:space=\"preserve\">\n    <value>AliasId</value>\n  </data>\n  <data name=\"Are you sure you want to delete the site {0} and all related data? You cannot undo this action.\" xml:space=\"preserve\">\n    <value>Are you sure you want to delete the site {0} and all related data? You cannot undo this action.</value>\n  </data>\n  <data name=\"Close Site To Public\" xml:space=\"preserve\">\n    <value>Close Site To Public</value>\n  </data>\n  <data name=\"Closed Message\" xml:space=\"preserve\">\n    <value>Closed Message</value>\n  </data>\n  <data name=\"Delete\" xml:space=\"preserve\">\n    <value>Delete</value>\n  </data>\n  <data name=\"Domain Mappings\" xml:space=\"preserve\">\n    <value>Domain Mappings</value>\n  </data>\n  <data name=\"only digits, numbers, - and _ allowed, no spaces allowed\" xml:space=\"preserve\">\n    <value>only digits, numbers, - and _ allowed, no spaces allowed</value>\n  </data>\n  <data name=\"Save\" xml:space=\"preserve\">\n    <value>Save</value>\n  </data>\n  <data name=\"Site Folder Name\" xml:space=\"preserve\">\n    <value>Site Folder Name</value>\n  </data>\n  <data name=\"Site Name\" xml:space=\"preserve\">\n    <value>Site Name</value>\n  </data>\n  <data name=\"Theme\" xml:space=\"preserve\">\n    <value>Theme</value>\n  </data>\n  <data name=\"Time Zone\" xml:space=\"preserve\">\n    <value>Time Zone</value>\n  </data>\n  <data name=\"Add Host Mapping\" xml:space=\"preserve\">\n    <value>Add Host Mapping</value>\n  </data>\n  <data name=\"Address1\" xml:space=\"preserve\">\n    <value>Address1</value>\n  </data>\n  <data name=\"Address2\" xml:space=\"preserve\">\n    <value>Address2</value>\n  </data>\n  <data name=\"Allow New Registrations\" xml:space=\"preserve\">\n    <value>Allow New Registrations</value>\n  </data>\n  <data name=\"Allow Persistent Login\" xml:space=\"preserve\">\n    <value>Allow Persistent Login</value>\n  </data>\n  <data name=\"Are you sure you want to delete the host/domain name mapping {0}\" xml:space=\"preserve\">\n    <value>Are you sure you want to delete the host/domain name mapping {0}</value>\n  </data>\n  <data name=\"Back to site list\" xml:space=\"preserve\">\n    <value>Back to site list</value>\n  </data>\n  <data name=\"City\" xml:space=\"preserve\">\n    <value>City</value>\n  </data>\n  <data name=\"Country\" xml:space=\"preserve\">\n    <value>Country</value>\n  </data>\n  <data name=\"Default Email From Address\" xml:space=\"preserve\">\n    <value>Default Email From Address</value>\n  </data>\n  <data name=\"Default Email From Name\" xml:space=\"preserve\">\n    <value>Default Email From Name</value>\n  </data>\n  <data name=\"Email addresses (csv) to notify of new unapproved users\" xml:space=\"preserve\">\n    <value>Email addresses (csv) to notify of new unapproved users</value>\n  </data>\n  <data name=\"Email Confirmed\" xml:space=\"preserve\">\n    <value>Email Confirmed</value>\n  </data>\n  <data name=\"Facebook App Id\" xml:space=\"preserve\">\n    <value>Facebook App Id</value>\n  </data>\n  <data name=\"Facebook App Secret\" xml:space=\"preserve\">\n    <value>Facebook App Secret</value>\n  </data>\n  <data name=\"Fax\" xml:space=\"preserve\">\n    <value>Fax</value>\n  </data>\n  <data name=\"Folder\" xml:space=\"preserve\">\n    <value>Folder</value>\n  </data>\n  <data name=\"Google Client Id\" xml:space=\"preserve\">\n    <value>Google Client Id</value>\n  </data>\n  <data name=\"Google Client Secret\" xml:space=\"preserve\">\n    <value>Google Client Secret</value>\n  </data>\n  <data name=\"Host Name\" xml:space=\"preserve\">\n    <value>Host Name</value>\n  </data>\n  <data name=\"Id:\" xml:space=\"preserve\">\n    <value>Id:</value>\n  </data>\n  <data name=\"Login Info Bottom\" xml:space=\"preserve\">\n    <value>Login Info Bottom</value>\n  </data>\n  <data name=\"Login Info Top\" xml:space=\"preserve\">\n    <value>Login Info Top</value>\n  </data>\n  <data name=\"Microsoft Client Id\" xml:space=\"preserve\">\n    <value>Microsoft Client Id</value>\n  </data>\n  <data name=\"Microsoft Client Secret\" xml:space=\"preserve\">\n    <value>Microsoft Client Secret</value>\n  </data>\n  <data name=\"Name\" xml:space=\"preserve\">\n    <value>Name</value>\n  </data>\n  <data name=\"New Site\" xml:space=\"preserve\">\n    <value>New Site</value>\n  </data>\n  <data name=\"Only Use Social Authentication\" xml:space=\"preserve\">\n    <value>Only Use Social Authentication</value>\n  </data>\n  <data name=\"Phone\" xml:space=\"preserve\">\n    <value>Phone</value>\n  </data>\n  <data name=\"Please Click here to log in\" xml:space=\"preserve\">\n    <value>Please Click here to Log in</value>\n  </data>\n  <data name=\"Please Confirm Email Address\" xml:space=\"preserve\">\n    <value>Please Confirm Email Address</value>\n  </data>\n  <data name=\"Port\" xml:space=\"preserve\">\n    <value>Port</value>\n  </data>\n  <data name=\"Postal Code\" xml:space=\"preserve\">\n    <value>Postal Code</value>\n  </data>\n  <data name=\"Preferred Host Name\" xml:space=\"preserve\">\n    <value>Preferred Host Name</value>\n  </data>\n  <data name=\"Public Email\" xml:space=\"preserve\">\n    <value>Public Email</value>\n  </data>\n  <data name=\"Re-Send Verification Email\" xml:space=\"preserve\">\n    <value>Re-Send Verification Email</value>\n  </data>\n  <data name=\"Really Delete Users\" xml:space=\"preserve\">\n    <value>Really Delete Users</value>\n  </data>\n  <data name=\"Recaptcha Private Key\" xml:space=\"preserve\">\n    <value>Recaptcha Private Key</value>\n  </data>\n  <data name=\"Recaptcha Public Key\" xml:space=\"preserve\">\n    <value>Recaptcha Public Key</value>\n  </data>\n  <data name=\"Registration Agreement\" xml:space=\"preserve\">\n    <value>Registration Agreement</value>\n  </data>\n  <data name=\"Registration Preamble\" xml:space=\"preserve\">\n    <value>Registration Preamble</value>\n  </data>\n  <data name=\"Require Approval Before Login\" xml:space=\"preserve\">\n    <value>Require Approval Before Login</value>\n  </data>\n  <data name=\"Require Captcha On Login?\" xml:space=\"preserve\">\n    <value>Require Captcha On Login?</value>\n  </data>\n  <data name=\"Require Captcha On Registration?\" xml:space=\"preserve\">\n    <value>Require Captcha On Registration?</value>\n  </data>\n  <data name=\"Require Confirmed Email\" xml:space=\"preserve\">\n    <value>Require Confirmed Email</value>\n  </data>\n  <data name=\"Require Confirmed Phone\" xml:space=\"preserve\">\n    <value>Require Confirmed Phone</value>\n  </data>\n  <data name=\"Requires Authentication?\" xml:space=\"preserve\">\n    <value>Requires Authentication?</value>\n  </data>\n  <data name=\"Requires SSL?\" xml:space=\"preserve\">\n    <value>Requires SSL?</value>\n  </data>\n  <data name=\"Settings\" xml:space=\"preserve\">\n    <value>Settings</value>\n  </data>\n  <data name=\"Sms Client Id\" xml:space=\"preserve\">\n    <value>Sms Client Id</value>\n  </data>\n  <data name=\"Sms From\" xml:space=\"preserve\">\n    <value>Sms From</value>\n  </data>\n  <data name=\"Sms Secure Token\" xml:space=\"preserve\">\n    <value>Sms Secure Token</value>\n  </data>\n  <data name=\"Smtp Password\" xml:space=\"preserve\">\n    <value>Smtp Password</value>\n  </data>\n  <data name=\"Smtp Server\" xml:space=\"preserve\">\n    <value>Smtp Server</value>\n  </data>\n  <data name=\"Smtp User\" xml:space=\"preserve\">\n    <value>Smtp User</value>\n  </data>\n  <data name=\"State\" xml:space=\"preserve\">\n    <value>State</value>\n  </data>\n  <data name=\"Thank you for confirming your email.\" xml:space=\"preserve\">\n    <value>Thank you for confirming your email.</value>\n  </data>\n  <data name=\"Twitter Consumer Key\" xml:space=\"preserve\">\n    <value>Twitter Consumer Key</value>\n  </data>\n  <data name=\"Twitter Consumer Secret\" xml:space=\"preserve\">\n    <value>Twitter Consumer Secret</value>\n  </data>\n  <data name=\"Use Email For Login\" xml:space=\"preserve\">\n    <value>Use Email For Login</value>\n  </data>\n  <data name=\"Add Phone Number\" xml:space=\"preserve\">\n    <value>Add Phone Number</value>\n  </data>\n  <data name=\"Are you sure you want to delete the country {0} and all of its states? You cannot undo this action.\" xml:space=\"preserve\">\n    <value>Are you sure you want to delete the country {0} and all of its states? You cannot undo this action.</value>\n  </data>\n  <data name=\"Are you sure you want to delete {0}?\" xml:space=\"preserve\">\n    <value>Are you sure you want to delete {0}?</value>\n  </data>\n  <data name=\"Back To Country List\" xml:space=\"preserve\">\n    <value>Back To Country List</value>\n  </data>\n  <data name=\"Back To State List\" xml:space=\"preserve\">\n    <value>Back To State List</value>\n  </data>\n  <data name=\"Change Password\" xml:space=\"preserve\">\n    <value>Change Password</value>\n  </data>\n  <data name=\"Code\" xml:space=\"preserve\">\n    <value>Code</value>\n  </data>\n  <data name=\"Confirm New Password\" xml:space=\"preserve\">\n    <value>Confirm New Password</value>\n  </data>\n  <data name=\"Confirm Password\" xml:space=\"preserve\">\n    <value>Confirm Password</value>\n  </data>\n  <data name=\"Core Data Administration\" xml:space=\"preserve\">\n    <value>Core Data Administration</value>\n  </data>\n  <data name=\"Country Detail\" xml:space=\"preserve\">\n    <value>Country Detail</value>\n  </data>\n  <data name=\"Country List Administration\" xml:space=\"preserve\">\n    <value>Country List Administration</value>\n  </data>\n  <data name=\"Create a new account.\" xml:space=\"preserve\">\n    <value>Create a new account.</value>\n  </data>\n  <data name=\"Edit\" xml:space=\"preserve\">\n    <value>Edit</value>\n  </data>\n  <data name=\"Edit State\" xml:space=\"preserve\">\n    <value>Edit State</value>\n  </data>\n  <data name=\"Email\" xml:space=\"preserve\">\n    <value>Email</value>\n  </data>\n  <data name=\"Forgot Password Confirmation\" xml:space=\"preserve\">\n    <value>Forgot Password Confirmation</value>\n  </data>\n  <data name=\"Forgot your password?\" xml:space=\"preserve\">\n    <value>Forgot your password?</value>\n  </data>\n  <data name=\"Log In\" xml:space=\"preserve\">\n    <value>Log In</value>\n  </data>\n  <data name=\"Must match password\" xml:space=\"preserve\">\n    <value>Must match password</value>\n  </data>\n  <data name=\"New Country\" xml:space=\"preserve\">\n    <value>New Country</value>\n  </data>\n  <data name=\"New Currency\" xml:space=\"preserve\">\n    <value>New Currency</value>\n  </data>\n  <data name=\"New Password\" xml:space=\"preserve\">\n    <value>New Password</value>\n  </data>\n  <data name=\"New State\" xml:space=\"preserve\">\n    <value>New State</value>\n  </data>\n  <data name=\"Number\" xml:space=\"preserve\">\n    <value>Number</value>\n  </data>\n  <data name=\"Old Password\" xml:space=\"preserve\">\n    <value>Old Password</value>\n  </data>\n  <data name=\"Password\" xml:space=\"preserve\">\n    <value>Password</value>\n  </data>\n  <data name=\"Please check your email to reset your password.\" xml:space=\"preserve\">\n    <value>Please check your email to reset your password.</value>\n  </data>\n  <data name=\"Register\" xml:space=\"preserve\">\n    <value>Register</value>\n  </data>\n  <data name=\"Register as a new user?\" xml:space=\"preserve\">\n    <value>Register as a new user?</value>\n  </data>\n  <data name=\"Remember Me\" xml:space=\"preserve\">\n    <value>Remember Me</value>\n  </data>\n  <data name=\"Remember this web browser\" xml:space=\"preserve\">\n    <value>Remember this web browser</value>\n  </data>\n  <data name=\"Reset\" xml:space=\"preserve\">\n    <value>Reset</value>\n  </data>\n  <data name=\"Reset password\" xml:space=\"preserve\">\n    <value>Reset password</value>\n  </data>\n  <data name=\"Reset password confirmation\" xml:space=\"preserve\">\n    <value>Reset password confirmation</value>\n  </data>\n  <data name=\"Reset your password.\" xml:space=\"preserve\">\n    <value>Reset your password.</value>\n  </data>\n  <data name=\"Select Two-Factor Authentication Provider:\" xml:space=\"preserve\">\n    <value>Select Two-Factor Authentication Provider:</value>\n  </data>\n  <data name=\"Send Verification Code\" xml:space=\"preserve\">\n    <value>Send Verification Code</value>\n  </data>\n  <data name=\"State List Administration\" xml:space=\"preserve\">\n    <value>State List Administration</value>\n  </data>\n  <data name=\"States\" xml:space=\"preserve\">\n    <value>States</value>\n  </data>\n  <data name=\"Submit\" xml:space=\"preserve\">\n    <value>Submit</value>\n  </data>\n  <data name=\"Thanks for registering!\" xml:space=\"preserve\">\n    <value>Thanks for registering!</value>\n  </data>\n  <data name=\"Title\" xml:space=\"preserve\">\n    <value>Title</value>\n  </data>\n  <data name=\"Use a local account to log in.\" xml:space=\"preserve\">\n    <value>Use a local account to log in.</value>\n  </data>\n  <data name=\"Use an existing account to log in\" xml:space=\"preserve\">\n    <value>Use an existing account to log in</value>\n  </data>\n  <data name=\"Verify\" xml:space=\"preserve\">\n    <value>Verify</value>\n  </data>\n  <data name=\"You must agree to the terms\" xml:space=\"preserve\">\n    <value>You must agree to the terms</value>\n  </data>\n  <data name=\"Your password has been reset.\" xml:space=\"preserve\">\n    <value>Your password has been reset.</value>\n  </data>\n  <data name=\"Account Approved\" xml:space=\"preserve\">\n    <value>Account Approved</value>\n  </data>\n  <data name=\"Account Locked\" xml:space=\"preserve\">\n    <value>Account Locked</value>\n  </data>\n  <data name=\"Add\" xml:space=\"preserve\">\n    <value>Add</value>\n  </data>\n  <data name=\"Add a phone number.\" xml:space=\"preserve\">\n    <value>Add a phone number.</value>\n  </data>\n  <data name=\"Add another service to log in.\" xml:space=\"preserve\">\n    <value>Add another service to log in.</value>\n  </data>\n  <data name=\"Add User\" xml:space=\"preserve\">\n    <value>Add User</value>\n  </data>\n  <data name=\"All\" xml:space=\"preserve\">\n    <value>All</value>\n  </data>\n  <data name=\"Are you sure you want to add {0}?\" xml:space=\"preserve\">\n    <value>Are you sure you want to add {0}?</value>\n  </data>\n  <data name=\"Are you sure you want to delete the user {0}? You cannot undo this action.\" xml:space=\"preserve\">\n    <value>Are you sure you want to delete the user {0}? You cannot undo this action.</value>\n  </data>\n  <data name=\"Are you sure you want to remove {0}?\" xml:space=\"preserve\">\n    <value>Are you sure you want to remove {0}?</value>\n  </data>\n  <data name=\"Change\" xml:space=\"preserve\">\n    <value>Change</value>\n  </data>\n  <data name=\"Change your account settings\" xml:space=\"preserve\">\n    <value>Change your account settings</value>\n  </data>\n  <data name=\"Close\" xml:space=\"preserve\">\n    <value>Close</value>\n  </data>\n  <data name=\"Cloudscribe Version\" xml:space=\"preserve\">\n    <value>Cloudscribe Version</value>\n  </data>\n  <data name=\"Create\" xml:space=\"preserve\">\n    <value>Create</value>\n  </data>\n  <data name=\"Database Platform\" xml:space=\"preserve\">\n    <value>Database Platform</value>\n  </data>\n  <data name=\"Date of Birth\" xml:space=\"preserve\">\n    <value>Date of Birth</value>\n  </data>\n  <data name=\"Disable\" xml:space=\"preserve\">\n    <value>Disable</value>\n  </data>\n  <data name=\"Disabled\" xml:space=\"preserve\">\n    <value>Disabled</value>\n  </data>\n  <data name=\"Display Name\" xml:space=\"preserve\">\n    <value>Display Name</value>\n  </data>\n  <data name=\"Enable\" xml:space=\"preserve\">\n    <value>Enable</value>\n  </data>\n  <data name=\"Enabled\" xml:space=\"preserve\">\n    <value>Enabled</value>\n  </data>\n  <data name=\"Environment Name\" xml:space=\"preserve\">\n    <value>Environment Name</value>\n  </data>\n  <data name=\"External Logins:\" xml:space=\"preserve\">\n    <value>External Logins:</value>\n  </data>\n  <data name=\"First Name\" xml:space=\"preserve\">\n    <value>First Name</value>\n  </data>\n  <data name=\"Last Name\" xml:space=\"preserve\">\n    <value>Last Name</value>\n  </data>\n  <data name=\"Manage\" xml:space=\"preserve\">\n    <value>Manage</value>\n  </data>\n  <data name=\"Manage your account\" xml:space=\"preserve\">\n    <value>Manage your account</value>\n  </data>\n  <data name=\"Manage your external logins\" xml:space=\"preserve\">\n    <value>Manage your external logins</value>\n  </data>\n  <data name=\"Members\" xml:space=\"preserve\">\n    <value>Members</value>\n  </data>\n  <data name=\"New Role\" xml:space=\"preserve\">\n    <value>New Role</value>\n  </data>\n  <data name=\"None\" xml:space=\"preserve\">\n    <value>None</value>\n  </data>\n  <data name=\"Operating System\" xml:space=\"preserve\">\n    <value>Operating System</value>\n  </data>\n  <data name=\"Password:\" xml:space=\"preserve\">\n    <value>Password:</value>\n  </data>\n  <data name=\"Phone Number:\" xml:space=\"preserve\">\n    <value>Phone Number:</value>\n  </data>\n  <data name=\"Phone Numbers can used as a second factor of verification in two-factor authentication, for better account security add your phone number now.\" xml:space=\"preserve\">\n    <value>Phone Numbers can used as a second factor of verification in two-factor authentication, for better account security add your phone number now.</value>\n  </data>\n  <data name=\"Registered Logins\" xml:space=\"preserve\">\n    <value>Registered Logins</value>\n  </data>\n  <data name=\"Remove\" xml:space=\"preserve\">\n    <value>Remove</value>\n  </data>\n  <data name=\"Remove Login\" xml:space=\"preserve\">\n    <value>Remove Login</value>\n  </data>\n  <data name=\"Role Name\" xml:space=\"preserve\">\n    <value>Role Name</value>\n  </data>\n  <data name=\"Runtime\" xml:space=\"preserve\">\n    <value>Runtime</value>\n  </data>\n  <data name=\"Search\" xml:space=\"preserve\">\n    <value>Search</value>\n  </data>\n  <data name=\"Search By IP Address\" xml:space=\"preserve\">\n    <value>Search By IP Address</value>\n  </data>\n  <data name=\"Server Host Name\" xml:space=\"preserve\">\n    <value>Server Host Name</value>\n  </data>\n  <data name=\"Server IP Address\" xml:space=\"preserve\">\n    <value>Server IP Address</value>\n  </data>\n  <data name=\"Server Time UTC\" xml:space=\"preserve\">\n    <value>Server Time UTC</value>\n  </data>\n  <data name=\"Set Password\" xml:space=\"preserve\">\n    <value>Set Password</value>\n  </data>\n  <data name=\"Set your password\" xml:space=\"preserve\">\n    <value>Set your password</value>\n  </data>\n  <data name=\"Two-Factor Authentication:\" xml:space=\"preserve\">\n    <value>Two-Factor Authentication:</value>\n  </data>\n  <data name=\"UserId\" xml:space=\"preserve\">\n    <value>UserId</value>\n  </data>\n  <data name=\"You do not have a local username/password for this site. Add a local account so you can log in without an external login.\" xml:space=\"preserve\">\n    <value>You do not have a local username/password for this site. Add a local account so you can log in without an external login.</value>\n  </data>\n  <data name=\"Confirm your account\" xml:space=\"preserve\">\n    <value>Confirm your account</value>\n  </data>\n  <data name=\"Edit Country\" xml:space=\"preserve\">\n    <value>Edit Country</value>\n  </data>\n  <data name=\"Edit Role\" xml:space=\"preserve\">\n    <value>Edit Role</value>\n  </data>\n  <data name=\"Invalid code.\" xml:space=\"preserve\">\n    <value>Invalid code.</value>\n  </data>\n  <data name=\"Invalid login attempt.\" xml:space=\"preserve\">\n    <value>Invalid login attempt.</value>\n  </data>\n  <data name=\"Manage User\" xml:space=\"preserve\">\n    <value>Manage User</value>\n  </data>\n  <data name=\"New User\" xml:space=\"preserve\">\n    <value>New User</value>\n  </data>\n  <data name=\"Non Role Members\" xml:space=\"preserve\">\n    <value>Non Role Members</value>\n  </data>\n  <data name=\"Please check your email inbox, we just sent you a link that you need to click to confirm your account\" xml:space=\"preserve\">\n    <value>Please check your email inbox, we just sent you a link that you need to click to confirm your account</value>\n  </data>\n  <data name=\"reCAPTCHA Error occured. Please try again\" xml:space=\"preserve\">\n    <value>reCAPTCHA Error occured. Please try again</value>\n  </data>\n  <data name=\"Role Management\" xml:space=\"preserve\">\n    <value>Role Management</value>\n  </data>\n  <data name=\"Role Members\" xml:space=\"preserve\">\n    <value>Role Members</value>\n  </data>\n  <data name=\"Security Code\" xml:space=\"preserve\">\n    <value>Security Code</value>\n  </data>\n  <data name=\"The country {0} was successfully created.\" xml:space=\"preserve\">\n    <value>The country {0} was successfully created.</value>\n  </data>\n  <data name=\"The country {0} was successfully deleted.\" xml:space=\"preserve\">\n    <value>The country {0} was successfully deleted.</value>\n  </data>\n  <data name=\"The country {0} was successfully updated.\" xml:space=\"preserve\">\n    <value>The country {0} was successfully updated.</value>\n  </data>\n  <data name=\"The currency {0} was successfully created.\" xml:space=\"preserve\">\n    <value>The currency {0} was successfully created.</value>\n  </data>\n  <data name=\"The currency {0} was successfully deleted.\" xml:space=\"preserve\">\n    <value>The currency {0} was successfully deleted.</value>\n  </data>\n  <data name=\"The currency {0} was successfully updated.\" xml:space=\"preserve\">\n    <value>The currency {0} was successfully updated.</value>\n  </data>\n  <data name=\"The role &lt;b&gt;{0}&lt;/b&gt; was successfully created.\" xml:space=\"preserve\">\n    <value>The role &lt;b&gt;{0}&lt;/b&gt; was successfully created.</value>\n  </data>\n  <data name=\"The role &lt;b&gt;{0}&lt;/b&gt; was successfully deleted.\" xml:space=\"preserve\">\n    <value>The role &lt;b&gt;{0}&lt;/b&gt; was successfully deleted.</value>\n  </data>\n  <data name=\"The role &lt;b&gt;{0}&lt;/b&gt; was successfully updated.\" xml:space=\"preserve\">\n    <value>The role &lt;b&gt;{0}&lt;/b&gt; was successfully updated.</value>\n  </data>\n  <data name=\"The state {0} was successfully created.\" xml:space=\"preserve\">\n    <value>The state {0} was successfully created.</value>\n  </data>\n  <data name=\"The state {0} was successfully deleted.\" xml:space=\"preserve\">\n    <value>The state {0} was successfully deleted.</value>\n  </data>\n  <data name=\"The state {0} was successfully updated.\" xml:space=\"preserve\">\n    <value>The state {0} was successfully updated.</value>\n  </data>\n  <data name=\"user account for {0} was successfully approved.\" xml:space=\"preserve\">\n    <value>user account for {0} was successfully approved.</value>\n  </data>\n  <data name=\"user account for {0} was successfully created.\" xml:space=\"preserve\">\n    <value>user account for {0} was successfully created.</value>\n  </data>\n  <data name=\"user account for {0} was successfully deleted.\" xml:space=\"preserve\">\n    <value>user account for {0} was successfully deleted.</value>\n  </data>\n  <data name=\"user account for {0} was successfully updated.\" xml:space=\"preserve\">\n    <value>user account for {0} was successfully updated.</value>\n  </data>\n  <data name=\"User Management\" xml:space=\"preserve\">\n    <value>User Management</value>\n  </data>\n  <data name=\"Your security code is: {0}\" xml:space=\"preserve\">\n    <value>Your security code is: {0}</value>\n  </data>\n  <data name=\"{0} - Edit Role\" xml:space=\"preserve\">\n    <value>{0} - Edit Role</value>\n  </data>\n  <data name=\"{0} - Locked Out User Accounts\" xml:space=\"preserve\">\n    <value>{0} - Locked Out User Accounts</value>\n  </data>\n  <data name=\"{0} - Manage User\" xml:space=\"preserve\">\n    <value>{0} - Manage User</value>\n  </data>\n  <data name=\"{0} - New Role\" xml:space=\"preserve\">\n    <value>{0} - New Role</value>\n  </data>\n  <data name=\"{0} - New User\" xml:space=\"preserve\">\n    <value>{0} - New User</value>\n  </data>\n  <data name=\"{0} - Non Role Members\" xml:space=\"preserve\">\n    <value>{0} - Non Role Members</value>\n  </data>\n  <data name=\"{0} - Role Management\" xml:space=\"preserve\">\n    <value>{0} - Role Management</value>\n  </data>\n  <data name=\"{0} - Role Members\" xml:space=\"preserve\">\n    <value>{0} - Role Members</value>\n  </data>\n  <data name=\"{0} - User Accounts Pending Approval\" xml:space=\"preserve\">\n    <value>{0} - User Accounts Pending Approval</value>\n  </data>\n  <data name=\"{0} - User Management\" xml:space=\"preserve\">\n    <value>{0} - User Management</value>\n  </data>\n  <data name=\"{0} - {1}\" xml:space=\"preserve\">\n    <value>{0} - {1}</value>\n  </data>\n  <data name=\"{0} States\" xml:space=\"preserve\">\n    <value>{0} States</value>\n  </data>\n  <data name=\"{0} was successfully added to the role {1}.\" xml:space=\"preserve\">\n    <value>{0} was successfully added to the role {1}.</value>\n  </data>\n  <data name=\"{0} was successfully removed from the role {1}.\" xml:space=\"preserve\">\n    <value>{0} was successfully removed from the role {1}.</value>\n  </data>\n  <data name=\"-Please select-\" xml:space=\"preserve\">\n    <value>-Please select-</value>\n  </data>\n  <data name=\"Basic site settings for {0} were successfully updated.\" xml:space=\"preserve\">\n    <value>Basic site settings for {0} were successfully updated.</value>\n  </data>\n  <data name=\"Captcha Settings\" xml:space=\"preserve\">\n    <value>Captcha Settings</value>\n  </data>\n  <data name=\"Captcha Settings for {0} was successfully updated.\" xml:space=\"preserve\">\n    <value>Captcha Settings for {0} was successfully updated.</value>\n  </data>\n  <data name=\"Company Info\" xml:space=\"preserve\">\n    <value>Company Info</value>\n  </data>\n  <data name=\"Company Info for {0} was successfully updated.\" xml:space=\"preserve\">\n    <value>Company Info for {0} was successfully updated.</value>\n  </data>\n  <data name=\"Create New Site\" xml:space=\"preserve\">\n    <value>Create New Site</value>\n  </data>\n  <data name=\"Domain/Host Name Mappings\" xml:space=\"preserve\">\n    <value>Domain/Host Name Mappings</value>\n  </data>\n  <data name=\"Domain/Host Name Mappings for {0}\" xml:space=\"preserve\">\n    <value>Domain/Host Name Mappings for {0}</value>\n  </data>\n  <data name=\"Email Settings\" xml:space=\"preserve\">\n    <value>Email Settings</value>\n  </data>\n  <data name=\"Email Settings for {0} were successfully updated.\" xml:space=\"preserve\">\n    <value>Email Settings for {0} were successfully updated.</value>\n  </data>\n  <data name=\"failed to add the requested host name mapping becuase it is already mapped to another site.\" xml:space=\"preserve\">\n    <value>failed to add the requested host name mapping becuase it is already mapped to another site.</value>\n  </data>\n  <data name=\"Failed to verify phone number\" xml:space=\"preserve\">\n    <value>Failed to verify phone number</value>\n  </data>\n  <data name=\"Folder name is required.\" xml:space=\"preserve\">\n    <value>Folder name is required.</value>\n  </data>\n  <data name=\"Host/domain mapping for {0} was successfully created.\" xml:space=\"preserve\">\n    <value>Host/domain mapping for {0} was successfully created.</value>\n  </data>\n  <data name=\"Host/domain mapping for {0} was successfully removed.\" xml:space=\"preserve\">\n    <value>Host/domain mapping for {0} was successfully removed.</value>\n  </data>\n  <data name=\"Login Page Content\" xml:space=\"preserve\">\n    <value>Login Page Content</value>\n  </data>\n  <data name=\"Login Page Info for {0} was successfully updated.\" xml:space=\"preserve\">\n    <value>Login Page Info for {0} was successfully updated.</value>\n  </data>\n  <data name=\"oops something went wrong please try again\" xml:space=\"preserve\">\n    <value>oops something went wrong please try again</value>\n  </data>\n  <data name=\"oops something went wrong, site was not found.\" xml:space=\"preserve\">\n    <value>oops something went wrong, site was not found.</value>\n  </data>\n  <data name=\"oops something went wrong, the external login was not removed, please try again.\" xml:space=\"preserve\">\n    <value>oops something went wrong, the external login was not removed, please try again.</value>\n  </data>\n  <data name=\"Registration Page Content\" xml:space=\"preserve\">\n    <value>Registration Page Content</value>\n  </data>\n  <data name=\"Registration Page Content for {0} was successfully updated.\" xml:space=\"preserve\">\n    <value>Registration Page Content for {0} was successfully updated.</value>\n  </data>\n  <data name=\"Security Settings\" xml:space=\"preserve\">\n    <value>Security Settings</value>\n  </data>\n  <data name=\"Security Settings for {0} was successfully updated.\" xml:space=\"preserve\">\n    <value>Security Settings for {0} was successfully updated.</value>\n  </data>\n  <data name=\"Site Administration\" xml:space=\"preserve\">\n    <value>Site Administration</value>\n  </data>\n  <data name=\"Site List\" xml:space=\"preserve\">\n    <value>Site List</value>\n  </data>\n  <data name=\"Site Settings\" xml:space=\"preserve\">\n    <value>Site Settings</value>\n  </data>\n  <data name=\"SMS Settings\" xml:space=\"preserve\">\n    <value>SMS Settings</value>\n  </data>\n  <data name=\"SMS Settings for {0} were successfully updated.\" xml:space=\"preserve\">\n    <value>SMS Settings for {0} were successfully updated.</value>\n  </data>\n  <data name=\"Social Login Settings\" xml:space=\"preserve\">\n    <value>Social Login Settings</value>\n  </data>\n  <data name=\"Social Login Settings for {0} was successfully updated.\" xml:space=\"preserve\">\n    <value>Social Login Settings for {0} was successfully updated.</value>\n  </data>\n  <data name=\"System Information\" xml:space=\"preserve\">\n    <value>System Information</value>\n  </data>\n  <data name=\"The external login was removed.\" xml:space=\"preserve\">\n    <value>The external login was removed.</value>\n  </data>\n  <data name=\"The selected folder name is already in use on another site.\" xml:space=\"preserve\">\n    <value>The selected folder name is already in use on another site.</value>\n  </data>\n  <data name=\"The selected host/domain name is already in use on another site.\" xml:space=\"preserve\">\n    <value>The selected host/domain name is already in use on another site.</value>\n  </data>\n  <data name=\"The site {0} was not deleted because it is a server admin site.\" xml:space=\"preserve\">\n    <value>The site {0} was not deleted because it is a server admin site.</value>\n  </data>\n  <data name=\"The site {0} was successfully deleted.\" xml:space=\"preserve\">\n    <value>The site {0} was successfully deleted.</value>\n  </data>\n  <data name=\"Your password has been changed.\" xml:space=\"preserve\">\n    <value>Your password has been changed.</value>\n  </data>\n  <data name=\"Your password has been set.\" xml:space=\"preserve\">\n    <value>your password has been set</value>\n  </data>\n  <data name=\"Your phone number was added.\" xml:space=\"preserve\">\n    <value>Your phone number was added.</value>\n  </data>\n  <data name=\"Your phone number was removed.\" xml:space=\"preserve\">\n    <value>Your phone number was removed.</value>\n  </data>\n  <data name=\"{0} - Captcha Settings\" xml:space=\"preserve\">\n    <value>{0} - Captcha Settings</value>\n  </data>\n  <data name=\"{0} - Company Info\" xml:space=\"preserve\">\n    <value>{0} - Company Info</value>\n  </data>\n  <data name=\"{0} - Email Settings\" xml:space=\"preserve\">\n    <value>{0} - Email Settings</value>\n  </data>\n  <data name=\"{0} - Login Page Content\" xml:space=\"preserve\">\n    <value>{0} - Login Page Content</value>\n  </data>\n  <data name=\"{0} - Registration Page Content\" xml:space=\"preserve\">\n    <value>{0} - Registration Page Content</value>\n  </data>\n  <data name=\"{0} - Security Settings\" xml:space=\"preserve\">\n    <value>{0} - Security Settings</value>\n  </data>\n  <data name=\"{0} - Settings\" xml:space=\"preserve\">\n    <value>{0} - Settings</value>\n  </data>\n  <data name=\"{0} - SMS Settings\" xml:space=\"preserve\">\n    <value>{0} - SMS Settings</value>\n  </data>\n  <data name=\"{0} - Social Login Settings\" xml:space=\"preserve\">\n    <value>{0} - Social Login Settings</value>\n  </data>\n  <data name=\"Time Zone:\" xml:space=\"preserve\">\n    <value>Time Zone:</value>\n  </data>\n  <data name=\"Update Time Zone\" xml:space=\"preserve\">\n    <value>Update Time Zone</value>\n  </data>\n  <data name=\"Culture Code\" xml:space=\"preserve\">\n    <value>Culture Code</value>\n  </data>\n  <data name=\"Username\" xml:space=\"preserve\">\n    <value>Username</value>\n  </data>\n  <data name=\"Username not accepted please try a different value\" xml:space=\"preserve\">\n    <value>Username not accepted please try a different value</value>\n  </data>\n  <data name=\"Register using your {0} account\" xml:space=\"preserve\">\n    <value>Register in using your {0} account</value>\n  </data>\n  <data name=\"Use an existing account\" xml:space=\"preserve\">\n    <value>Use an existing account</value>\n  </data>\n  <data name=\"New Account Pending Approval\" xml:space=\"preserve\">\n    <value>New Account Pending Approval</value>\n  </data>\n  <data name=\"Hello {0}!\" xml:space=\"preserve\">\n    <value>Hello {0}!</value>\n  </data>\n  <data name=\"Log off\" xml:space=\"preserve\">\n    <value>Log off</value>\n  </data>\n  <data name=\"Access Denied\" xml:space=\"preserve\">\n    <value>Access Denied</value>\n  </data>\n  <data name=\"Back To List\" xml:space=\"preserve\">\n    <value>Back To List</value>\n  </data>\n  <data name=\"Before you can Log in, we need to confirm that the email address you provided is valid. We sent an email to the address you&#xD;&#xA;    provided with a link that you need to click in order to confirm your email address is valid.\" xml:space=\"preserve\">\n    <value>Before you can Log in, we need to confirm that the email address you provided is valid. We sent an email to the address you\n    provided with a link that you need to click in order to confirm your email address is valid.</value>\n  </data>\n  <data name=\"Enter your email.\" xml:space=\"preserve\">\n    <value>Enter your email.</value>\n  </data>\n  <data name=\"Error from external provider: {0}\" xml:space=\"preserve\">\n    <value>Error from external provider: {0}</value>\n  </data>\n  <data name=\"I Agree to these terms of use.\" xml:space=\"preserve\">\n    <value>I Agree to these terms of use.</value>\n  </data>\n  <data name=\"ISOCode2\" xml:space=\"preserve\">\n    <value>ISOCode2</value>\n  </data>\n  <data name=\"ISOCode3\" xml:space=\"preserve\">\n    <value>ISOCode3</value>\n  </data>\n  <data name=\"Locked out\" xml:space=\"preserve\">\n    <value>Locked out</value>\n  </data>\n  <data name=\"Log in using your {0} account\" xml:space=\"preserve\">\n    <value>Log in using your {0} account</value>\n  </data>\n  <data name=\"Login Failure\" xml:space=\"preserve\">\n    <value>Login Failure</value>\n  </data>\n  <data name=\"Oops something went wrong\" xml:space=\"preserve\">\n    <value>Oops something went wrong</value>\n  </data>\n  <data name=\"Oops!\" xml:space=\"preserve\">\n    <value>Oops!</value>\n  </data>\n  <data name=\"Please enter a valid email for this site below and click the Register button to finish logging in.\" xml:space=\"preserve\">\n    <value>Please enter a valid email for this site below and click the Register button to finish logging in.</value>\n  </data>\n  <data name=\"Registration Agreement Required\" xml:space=\"preserve\">\n    <value>Registration Agreement Required</value>\n  </data>\n  <data name=\"Site Closed To Public Temporarily\" xml:space=\"preserve\">\n    <value>Site Closed To Public Temporarily</value>\n  </data>\n  <data name=\"Sorry for the delay, but this site requires approval of new accounts. An email has been sent to the site managers notifying them of your registration request. You should recieve an email notifying you once your account has been approved.\" xml:space=\"preserve\">\n    <value>Sorry for the delay, but this site requires approval of new accounts. An email has been sent to the site managers notifying them of your registration request. You should recieve an email notifying you once your account has been approved.</value>\n  </data>\n  <data name=\"The role name is already in use.\" xml:space=\"preserve\">\n    <value>The role name is already in use.</value>\n  </data>\n  <data name=\"This account has been locked out, please try again later.\" xml:space=\"preserve\">\n    <value>This account has been locked out, please try again later.</value>\n  </data>\n  <data name=\"Unsuccessful login with service.\" xml:space=\"preserve\">\n    <value>Unsuccessful login with service.</value>\n  </data>\n  <data name=\"Your time zone has been updated.\" xml:space=\"preserve\">\n    <value>Your time zone has been updated.</value>\n  </data>\n  <data name=\"Bad Request\" xml:space=\"preserve\">\n    <value>Bad Request</value>\n  </data>\n  <data name=\"Forbidden\" xml:space=\"preserve\">\n    <value>Forbidden</value>\n  </data>\n  <data name=\"Login Name\" xml:space=\"preserve\">\n    <value>Login Name</value>\n  </data>\n  <data name=\"Page Not Found\" xml:space=\"preserve\">\n    <value>Page Not Found</value>\n  </data>\n  <data name=\"Remove this {0} login from your account\" xml:space=\"preserve\">\n    <value>Remove this {0} login from your account</value>\n  </data>\n  <data name=\"Select Roles\" xml:space=\"preserve\">\n    <value>Select Roles</value>\n  </data>\n  <data name=\"Site Home\" xml:space=\"preserve\">\n    <value>Site Home</value>\n  </data>\n  <data name=\"Sorry, but the page requires authentication.\" xml:space=\"preserve\">\n    <value>Sorry, but the page requires authentication.</value>\n  </data>\n  <data name=\"Sorry, but the page you were looking for can't be found.\" xml:space=\"preserve\">\n    <value>Sorry, but the page you were looking for can't be found.</value>\n  </data>\n  <data name=\"Sorry, but you don't have permission to access this page.\" xml:space=\"preserve\">\n    <value>Sorry, but you don't have permission to access this page.</value>\n  </data>\n  <data name=\"Unauthorized\" xml:space=\"preserve\">\n    <value>Unauthorized</value>\n  </data>\n  <data name=\"Unexpected Error\" xml:space=\"preserve\">\n    <value>Unexpected Error</value>\n  </data>\n  <data name=\"Update\" xml:space=\"preserve\">\n    <value>Update</value>\n  </data>\n  <data name=\"Verify Phone Number\" xml:space=\"preserve\">\n    <value>Verify Phone Number</value>\n  </data>\n  <data name=\"Well, this is embarrassing. An error occurred while processing your request. Rest assured, this problem has been logged and hamsters have been released to fix the problem.\" xml:space=\"preserve\">\n    <value>Well, this is embarrassing. An error occurred while processing your request. Rest assured, this problem has been logged and hamsters have been released to fix the problem.</value>\n  </data>\n  <data name=\"Your browser sent a request that this server could not understand.\" xml:space=\"preserve\">\n    <value>Your browser sent a request that this server could not understand.</value>\n  </data>\n  <data name=\"Add Claim\" xml:space=\"preserve\">\n    <value>Add Claim</value>\n  </data>\n  <data name=\"Approve this account\" xml:space=\"preserve\">\n    <value>Approve this account</value>\n  </data>\n  <data name=\"Are you sure you want to remove the claim {0}?\" xml:space=\"preserve\">\n    <value>Are you sure you want to remove the claim {0}?</value>\n  </data>\n  <data name=\"Claim Type\" xml:space=\"preserve\">\n    <value>Claim Type</value>\n  </data>\n  <data name=\"Claim Value\" xml:space=\"preserve\">\n    <value>Claim Value</value>\n  </data>\n  <data name=\"Created\" xml:space=\"preserve\">\n    <value>Created</value>\n  </data>\n  <data name=\"Domain/Host name mappings are used internally to resolve a specific site from the database when a web request comes in for that host/domain name. If no maping exists then the default site will be used (i.e. the first site). This is only needed if you are hosting multiple sites based on host names within a single web site installation.\" xml:space=\"preserve\">\n    <value>Domain/Host name mappings are used internally to resolve a specific site from the database when a web request comes in for that host/domain name. If no maping exists then the default site will be used (i.e. the first site). This is only needed if you are hosting multiple sites based on host names within a single web site installation.</value>\n  </data>\n  <data name=\"Email/Login\" xml:space=\"preserve\">\n    <value>Email/Login</value>\n  </data>\n  <data name=\"First Page\" xml:space=\"preserve\">\n    <value>First Page</value>\n  </data>\n  <data name=\"Google Analytics ProfileId\" xml:space=\"preserve\">\n    <value>Google Analytics ProfileId</value>\n  </data>\n  <data name=\"Last Page\" xml:space=\"preserve\">\n    <value>Last Page</value>\n  </data>\n  <data name=\"Next page\" xml:space=\"preserve\">\n    <value>Next page</value>\n  </data>\n  <data name=\"Note that the request has to be coming to the web site installation for this to work. That is, you still need a DNS record for the domain or host name to resolve to the IP (Internet Protocol) address of the web site installation, and if the IP address is shared with other web site installations you also still need host name mappings in the web server bindings so that the web server maps the request to the correct web site installation.\" xml:space=\"preserve\">\n    <value>Note that the request has to be coming to the web site installation for this to work. That is, you still need a DNS record for the domain or host name to resolve to the IP (Internet Protocol) address of the web site installation, and if the IP address is shared with other web site installations you also still need host name mappings in the web server bindings so that the web server maps the request to the correct web site installation.</value>\n  </data>\n  <data name=\"OpenIdConnect App Id\" xml:space=\"preserve\">\n    <value>OpenIdConnect App Id</value>\n  </data>\n  <data name=\"OpenIdConnect App Secret\" xml:space=\"preserve\">\n    <value>OpenIdConnect App Secret</value>\n  </data>\n  <data name=\"OpenIdConnect Authority Url\" xml:space=\"preserve\">\n    <value>OpenIdConnect Authority Url</value>\n  </data>\n  <data name=\"OpenIdConnect Display Name\" xml:space=\"preserve\">\n    <value>OpenIdConnect Display Name</value>\n  </data>\n  <data name=\"Previous page\" xml:space=\"preserve\">\n    <value>Previous page</value>\n  </data>\n  <data name=\"Registration Agreement/Terms of Use\" xml:space=\"preserve\">\n    <value>Registration Agreement/Terms of Use</value>\n  </data>\n  <data name=\"Require Users To Accept Changed Agreement?\" xml:space=\"preserve\">\n    <value>Require Users To Accept Changed Agreement?</value>\n  </data>\n  <data name=\"Send Email Notification\" xml:space=\"preserve\">\n    <value>Send Email Notification</value>\n  </data>\n  <data name=\"Use Invisible reCaptcha?\" xml:space=\"preserve\">\n    <value>Use Invisible reCaptcha?</value>\n  </data>\n  <data name=\"Your information has been updated.\" xml:space=\"preserve\">\n    <value>Your information has been updated.</value>\n  </data>\n  <data name=\"Update User Info\" xml:space=\"preserve\">\n    <value>Update User Info</value>\n  </data>\n  <data name=\"Website Url\" xml:space=\"preserve\">\n    <value>Website Url</value>\n  </data>\n  <data name=\"Must Change Password\" xml:space=\"preserve\">\n    <value>Must Change Password</value>\n  </data>\n  <data name=\"{0} - Users\" xml:space=\"preserve\">\n    <value>{0} - Users</value>\n  </data>\n  <data name=\"Activity\" xml:space=\"preserve\">\n    <value>Activity</value>\n  </data>\n  <data name=\"Capture Count\" xml:space=\"preserve\">\n    <value>Capture Count</value>\n  </data>\n  <data name=\"First Capture\" xml:space=\"preserve\">\n    <value>First Capture</value>\n  </data>\n  <data name=\"Ip Address\" xml:space=\"preserve\">\n    <value>Ip Address</value>\n  </data>\n  <data name=\"Last Capture\" xml:space=\"preserve\">\n    <value>Last Capture</value>\n  </data>\n  <data name=\"User Activity - {0}\" xml:space=\"preserve\">\n    <value>User Activity - {0}</value>\n  </data>\n  <data name=\"{0} - User Activity - {1}\" xml:space=\"preserve\">\n    <value>{0} - User Activity - {1}</value>\n  </data>\n  <data name=\"Add authenticator app\" xml:space=\"preserve\">\n    <value>Add authenticator app</value>\n  </data>\n  <data name=\"Authenticator app\" xml:space=\"preserve\">\n    <value>Authenticator app</value>\n  </data>\n  <data name=\"Configure authenticator app\" xml:space=\"preserve\">\n    <value>Configure authenticator app</value>\n  </data>\n  <data name=\"Disable 2FA\" xml:space=\"preserve\">\n    <value>Disable 2FA</value>\n  </data>\n  <data name=\"Disable two-factor authentication (2FA)\" xml:space=\"preserve\">\n    <value>Disable two-factor authentication (2FA)</value>\n  </data>\n  <data name=\"Enable authenticator\" xml:space=\"preserve\">\n    <value>Enable authenticator</value>\n  </data>\n  <data name=\"If you lose your device and don't have the recovery codes you will lose access to your account.\" xml:space=\"preserve\">\n    <value>If you lose your device and don't have the recovery codes you will lose access to your account.</value>\n  </data>\n  <data name=\"If you reset your authenticator key your authenticator app will not work until you reconfigure it.\" xml:space=\"preserve\">\n    <value>If you reset your authenticator key your authenticator app will not work until you reconfigure it.</value>\n  </data>\n  <data name=\"Once you have scanned the QR code or input the key above, your two factor authentication app will provide you with a unique code. Enter the code in the confirmation box below.\" xml:space=\"preserve\">\n    <value>Once you have scanned the QR code or input the key above, your two factor authentication app will provide you with a unique code. Enter the code in the confirmation box below.</value>\n  </data>\n  <data name=\"Put these codes in a safe place.\" xml:space=\"preserve\">\n    <value>Put these codes in a safe place.</value>\n  </data>\n  <data name=\"Recovery code verification\" xml:space=\"preserve\">\n    <value>Recovery code verification</value>\n  </data>\n  <data name=\"Recovery codes\" xml:space=\"preserve\">\n    <value>Recovery codes</value>\n  </data>\n  <data name=\"Reset authenticator key\" xml:space=\"preserve\">\n    <value>Reset authenticator key</value>\n  </data>\n  <data name=\"Reset recovery codes\" xml:space=\"preserve\">\n    <value>Reset recovery codes</value>\n  </data>\n  <data name=\"This action only disables 2FA.\" xml:space=\"preserve\">\n    <value>This action only disables 2FA.</value>\n  </data>\n  <data name=\"This process disables 2FA until you verify your authenticator app and will also reset your 2FA recovery codes.  If you do not complete your authenticator app configuration you may lose access to your account.\" xml:space=\"preserve\">\n    <value>This process disables 2FA until you verify your authenticator app and will also reset your 2FA recovery codes.  If you do not complete your authenticator app configuration you may lose access to your account.</value>\n  </data>\n  <data name=\"To use an authenticator app go through the following steps:\" xml:space=\"preserve\">\n    <value>To use an authenticator app go through the following steps:</value>\n  </data>\n  <data name=\"Two-factor authentication\" xml:space=\"preserve\">\n    <value>Two-factor authentication</value>\n  </data>\n  <data name=\"Verification Code\" xml:space=\"preserve\">\n    <value>Verification Code</value>\n  </data>\n  <data name=\"You have 1 recovery code left.\" xml:space=\"preserve\">\n    <value>You have 1 recovery code left.</value>\n  </data>\n  <data name=\"You have no recovery codes left.\" xml:space=\"preserve\">\n    <value>You have no recovery codes left.</value>\n  </data>\n  <data name=\"You have requested to login with a recovery code. This login will not be remembered until you provide an authenticator app code at login or disable 2FA and login again.\" xml:space=\"preserve\">\n    <value>You have requested to login with a recovery code. This login will not be remembered until you provide an authenticator app code at login or disable 2FA and login again.</value>\n  </data>\n  <data name=\"Your login is protected with an authenticator app. Enter your authenticator code below.\" xml:space=\"preserve\">\n    <value>Your login is protected with an authenticator app. Enter your authenticator code below.</value>\n  </data>\n  <data name=\"Disable 2 Factor Authentication\" xml:space=\"preserve\">\n    <value>Disable 2 Factor Authentication</value>\n  </data>\n  <data name=\"Reset Authenticator\" xml:space=\"preserve\">\n    <value>Reset Authenticator</value>\n  </data>\n  <data name=\"For your security, you have been automatically logged out.&lt;br /&gt;This is to protect your personal data, in case you are away from your computer.\" xml:space=\"preserve\">\n    <value>For your security, you have been automatically logged out.&lt;br /&gt;This is to protect your personal data, in case you are away from your computer.</value>\n  </data>\n  <data name=\"For your security, your session will time out in {0} seconds...\" xml:space=\"preserve\">\n    <value>For your security, your session will time out in {0} seconds...</value>\n  </data>\n  <data name=\"Log out\" xml:space=\"preserve\">\n    <value>Log out</value>\n  </data>\n  <data name=\"Stay logged in\" xml:space=\"preserve\">\n    <value>Stay logged in</value>\n  </data>\n  <data name=\"Timed out\" xml:space=\"preserve\">\n    <value>Timed out</value>\n  </data>\n  <data name=\"If checked will show the blog categories in the side bar\" xml:space=\"preserve\">\n    <value>If checked will show the blog categories in the side bar</value>\n  </data>\n  <data name=\"If checked will show the blog archives in the side bar\" xml:space=\"preserve\">\n    <value>If checked will show the blog archives in the side bar</value>\n  </data>\n  <data name=\"Show the blog categories in the side bar\" xml:space=\"preserve\">\n    <value>Show the blog categories in the side bar</value>\n  </data>\n  <data name=\"Show the blog archives in the side bar\" xml:space=\"preserve\">\n    <value>Show the blog archives in the side bar</value>\n  </data>\n  <data name=\"Created By\" xml:space=\"preserve\">\n    <value>Created By</value>\n  </data>\n  <data name=\"Last Updated\" xml:space=\"preserve\">\n    <value>Last Updated</value>\n  </data>\n  <data name=\"Updated\" xml:space=\"preserve\">\n    <value>Updated</value>\n  </data>\n  <data name=\"Show Created By\" xml:space=\"preserve\">\n    <value>Show Created By</value>\n  </data>\n  <data name=\"Show Created Date\" xml:space=\"preserve\">\n    <value>Show Created Date</value>\n  </data>\n  <data name=\"Show Last Modified By\" xml:space=\"preserve\">\n    <value>Show Last Modified By</value>\n  </data>\n  <data name=\"Show Last Modified Date\" xml:space=\"preserve\">\n    <value>Show Last Modified Date</value>\n  </data>\n  <data name=\"Show / hide the following information below the main content of the page.\" xml:space=\"preserve\">\n    <value>Show / hide the following information below the main content of the page.</value>\n  </data>\n  <data name=\"Show / hide the following information below the main content of pages (site default).\" xml:space=\"preserve\">\n    <value>Show / hide the following information below the main content of pages (site default).</value>\n  </data>\n</root>"
  },
  {
    "path": "src/sourceDev.WebApp/GlobalResources/CloudscribeCore.fr-FR.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Are you sure you want to delete the site {0} and all related data? You cannot undo this action.\" xml:space=\"preserve\">\n    <value>Etes-vous sûr de vouloir supprimer le site {0} et toutes les données relatives ? Vous ne pouvez pas annuler cette action.</value>\n  </data>\n  <data name=\"Close Site To Public\" xml:space=\"preserve\">\n    <value>Fermer le site au public</value>\n  </data>\n  <data name=\"Delete\" xml:space=\"preserve\">\n    <value>Effacer</value>\n  </data>\n  <data name=\"Domain Mappings\" xml:space=\"preserve\">\n    <value>Mappages de domaine</value>\n  </data>\n  <data name=\"Save\" xml:space=\"preserve\">\n    <value>Sauvegarder</value>\n  </data>\n  <data name=\"Site Folder Name\" xml:space=\"preserve\">\n    <value>Site Nom du dossier</value>\n  </data>\n  <data name=\"Site Name\" xml:space=\"preserve\">\n    <value>Nom du site</value>\n  </data>\n  <data name=\"TimeZone\" xml:space=\"preserve\">\n    <value>Fuseau horaire</value>\n  </data>\n  <data name=\"Require Captcha On Login?\" xml:space=\"preserve\">\n    <value>Exiger Captcha Sur Login?</value>\n  </data>\n  <data name=\"Require Captcha On Registration?\" xml:space=\"preserve\">\n    <value>Exiger Captcha sur l'enregistrement ?</value>\n  </data>\n  <data name=\"Log in\" xml:space=\"preserve\">\n    <value>S'identifier</value>\n  </data>\n  <data name=\"Hello {0}!\" xml:space=\"preserve\">\n    <value>Bonjour {0}!</value>\n  </data>\n  <data name=\"Log off\" xml:space=\"preserve\">\n    <value>Se déconnecter</value>\n  </data>\n  <data name=\"Site Settings\" xml:space=\"preserve\">\n    <value>Paramètres du site</value>\n  </data>\n  <data name=\"Site Administration\" xml:space=\"preserve\">\n    <value>Administration du site</value>\n  </data>\n  <data name=\"If checked will show the blog categories in the side bar\" xml:space=\"preserve\">\n    <value>Si cette case est cochée, les catégories de blog s'afficheront dans la barre latérale</value>\n  </data>\n  <data name=\"If checked will show the blog archives in the side bar\" xml:space=\"preserve\">\n    <value>Si cette case est cochée, les archives du blog s'afficheront dans la barre latérale</value>\n  </data>\n  <data name=\"Show the blog categories in the side bar\" xml:space=\"preserve\">\n    <value>Afficher les catégories de blog dans la barre latérale</value>\n  </data>\n  <data name=\"Show the blog archives in the side bar\" xml:space=\"preserve\">\n    <value>Afficher les archives du blog dans la barre latérale</value>\n  </data>\n  <data name=\"Created\" xml:space=\"preserve\">\n    <value>Créé</value>\n  </data>\n  <data name=\"Created By\" xml:space=\"preserve\">\n    <value>Créé par</value>\n  </data>\n  <data name=\"Last Updated\" xml:space=\"preserve\">\n    <value>Dernière mise à jour</value>\n  </data>\n  <data name=\"Updated\" xml:space=\"preserve\">\n    <value>Mis à jour</value>\n  </data>\n  <data name=\"Updated By\" xml:space=\"preserve\">\n    <value>Mis à jour par</value>\n  </data>\n  <data name=\"Show Created By\" xml:space=\"preserve\">\n    <value>Afficher créé par</value>\n  </data>\n  <data name=\"Show Created Date\" xml:space=\"preserve\">\n    <value>Afficher la date de création</value>\n  </data>\n  <data name=\"Show Last Modified By\" xml:space=\"preserve\">\n    <value>Afficher Dernière modification par</value>\n  </data>\n  <data name=\"Show Last Modified Date\" xml:space=\"preserve\">\n    <value>Afficher la date de la dernière modification</value>\n  </data>\n  <data name=\"Show / hide the following information below the main content of the page.\" xml:space=\"preserve\">\n    <value>Afficher/masquer les informations suivantes sous le contenu principal de la page.</value>\n  </data>\n  <data name=\"Show / hide the following information below the main content of pages (site default).\" xml:space=\"preserve\">\n    <value>Afficher/masquer les informations suivantes sous le contenu principal des pages (par défaut du site).</value>\n  </data>\n</root>"
  },
  {
    "path": "src/sourceDev.WebApp/GlobalResources/CloudscribeCore.it-IT.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"AliasId\" xml:space=\"preserve\">\n    <value>AliasId</value>\n  </data>\n  <data name=\"Are you sure you want to delete the site {0} and all related data? You cannot undo this action.\" xml:space=\"preserve\">\n    <value>Sei sicuro di voler eliminare il sito {0} e tutti i suoi dati? Questa operazione non può essere annullata.</value>\n  </data>\n  <data name=\"Close Site To Public\" xml:space=\"preserve\">\n    <value>Chiudi il sito al pubblico</value>\n  </data>\n  <data name=\"Closed Message\" xml:space=\"preserve\">\n    <value>Messaggio di chiusura</value>\n  </data>\n  <data name=\"Delete\" xml:space=\"preserve\">\n    <value>Elimina</value>\n  </data>\n  <data name=\"Domain Mappings\" xml:space=\"preserve\">\n    <value>Mappatura domini</value>\n  </data>\n  <data name=\"only digits, numbers, - and _ allowed, no spaces allowed\" xml:space=\"preserve\">\n    <value>solo caratteri, numeri, - e _ sono consentiti, gli spazi non sono consentiti</value>\n  </data>\n  <data name=\"Save\" xml:space=\"preserve\">\n    <value>Salva</value>\n  </data>\n  <data name=\"Site Folder Name\" xml:space=\"preserve\">\n    <value>Nome cartella sito</value>\n  </data>\n  <data name=\"Site Name\" xml:space=\"preserve\">\n    <value>Nome sito</value>\n  </data>\n  <data name=\"Theme\" xml:space=\"preserve\">\n    <value>Tema</value>\n  </data>\n  <data name=\"Time Zone\" xml:space=\"preserve\">\n    <value>Fuso orario</value>\n  </data>\n  <data name=\"Add Host Mapping\" xml:space=\"preserve\">\n    <value>Aggiungi mapping host</value>\n  </data>\n  <data name=\"Address1\" xml:space=\"preserve\">\n    <value>Indirizzo</value>\n  </data>\n  <data name=\"Address2\" xml:space=\"preserve\">\n    <value>Indirizzo 2</value>\n  </data>\n  <data name=\"Allow New Registrations\" xml:space=\"preserve\">\n    <value>Consenti nuove registrazioni</value>\n  </data>\n  <data name=\"Allow Persistent Login\" xml:space=\"preserve\">\n    <value>Consenti il login permanente</value>\n  </data>\n  <data name=\"Are you sure you want to delete the host/domain name mapping {0}\" xml:space=\"preserve\">\n    <value>Sei sicuro di voler eliminare il mapping host/dominio {0}?</value>\n  </data>\n  <data name=\"Back to site list\" xml:space=\"preserve\">\n    <value>Ritorna alla lista siti</value>\n  </data>\n  <data name=\"City\" xml:space=\"preserve\">\n    <value>Città</value>\n  </data>\n  <data name=\"Country\" xml:space=\"preserve\">\n    <value>Nazione</value>\n  </data>\n  <data name=\"Default Email From Address\" xml:space=\"preserve\">\n    <value>Indirizzo email mittente predefinito</value>\n  </data>\n  <data name=\"Default Email From Name\" xml:space=\"preserve\">\n    <value>Nome email mittente predefinito</value>\n  </data>\n  <data name=\"Email addresses (csv) to notify of new unapproved users\" xml:space=\"preserve\">\n    <value>Indirizzi email (csv) da notificare dei nuovi utenti non approvati</value>\n  </data>\n  <data name=\"Email Confirmed\" xml:space=\"preserve\">\n    <value>Email confermata</value>\n  </data>\n  <data name=\"Facebook App Id\" xml:space=\"preserve\">\n    <value>Facebook App Id</value>\n  </data>\n  <data name=\"Facebook App Secret\" xml:space=\"preserve\">\n    <value>Facebook App Secret</value>\n  </data>\n  <data name=\"Fax\" xml:space=\"preserve\">\n    <value>Fax</value>\n  </data>\n  <data name=\"Folder\" xml:space=\"preserve\">\n    <value>Cartella</value>\n  </data>\n  <data name=\"Google Client Id\" xml:space=\"preserve\">\n    <value>Google Client Id</value>\n  </data>\n  <data name=\"Google Client Secret\" xml:space=\"preserve\">\n    <value>Google Client Secret</value>\n  </data>\n  <data name=\"Host Name\" xml:space=\"preserve\">\n    <value>Nome host</value>\n  </data>\n  <data name=\"Id:\" xml:space=\"preserve\">\n    <value>Id:</value>\n  </data>\n  <data name=\"Login Info Bottom\" xml:space=\"preserve\">\n    <value>Informazioni di login (inferiore)</value>\n  </data>\n  <data name=\"Login Info Top\" xml:space=\"preserve\">\n    <value>Informazioni di login (superiore)</value>\n  </data>\n  <data name=\"Microsoft Client Id\" xml:space=\"preserve\">\n    <value>Microsoft Client Id</value>\n  </data>\n  <data name=\"Microsoft Client Secret\" xml:space=\"preserve\">\n    <value>Microsoft Client Secret</value>\n  </data>\n  <data name=\"Name\" xml:space=\"preserve\">\n    <value>Nome</value>\n  </data>\n  <data name=\"New Site\" xml:space=\"preserve\">\n    <value>Nuovo sito</value>\n  </data>\n  <data name=\"Only Use Social Authentication\" xml:space=\"preserve\">\n    <value>Utilizza solo l'autenticazione social</value>\n  </data>\n  <data name=\"Phone\" xml:space=\"preserve\">\n    <value>Telefono</value>\n  </data>\n  <data name=\"Please Click here to log in\" xml:space=\"preserve\">\n    <value>Clicca qui per accedere</value>\n  </data>\n  <data name=\"Please Confirm Email Address\" xml:space=\"preserve\">\n    <value>Conferma l'idirizzo email</value>\n  </data>\n  <data name=\"Port\" xml:space=\"preserve\">\n    <value>Porta</value>\n  </data>\n  <data name=\"Postal Code\" xml:space=\"preserve\">\n    <value>Codice postale</value>\n  </data>\n  <data name=\"Preferred Host Name\" xml:space=\"preserve\">\n    <value>Nome host preferito</value>\n  </data>\n  <data name=\"Public Email\" xml:space=\"preserve\">\n    <value>Email pubblica</value>\n  </data>\n  <data name=\"Re-Send Verification Email\" xml:space=\"preserve\">\n    <value>Reinvia la email di verifica</value>\n  </data>\n  <data name=\"Really Delete Users\" xml:space=\"preserve\">\n    <value>Eliminare fisicamente gli utenti</value>\n  </data>\n  <data name=\"Recaptcha Private Key\" xml:space=\"preserve\">\n    <value>Recaptcha Private Key</value>\n  </data>\n  <data name=\"Recaptcha Public Key\" xml:space=\"preserve\">\n    <value>Recaptcha Public Key</value>\n  </data>\n  <data name=\"Registration Agreement\" xml:space=\"preserve\">\n    <value>Contratto di registrazione</value>\n  </data>\n  <data name=\"Registration Preamble\" xml:space=\"preserve\">\n    <value>Registrazione preambolo</value>\n  </data>\n  <data name=\"Require Approval Before Login\" xml:space=\"preserve\">\n    <value>E' richietsa l'approvazione prima di accedere</value>\n  </data>\n  <data name=\"Require Captcha On Login?\" xml:space=\"preserve\">\n    <value>E' richiesto il captcha per accedere?</value>\n  </data>\n  <data name=\"Require Captcha On Registration?\" xml:space=\"preserve\">\n    <value>E' richiesto il captcha per registrarsi?</value>\n  </data>\n  <data name=\"Require Confirmed Email\" xml:space=\"preserve\">\n    <value>E' richiesta la conferma della email</value>\n  </data>\n  <data name=\"Require Confirmed Phone\" xml:space=\"preserve\">\n    <value>E' richiesta la conferma del telefono</value>\n  </data>\n  <data name=\"Requires Authentication?\" xml:space=\"preserve\">\n    <value>E' richiesta l'autenticazione</value>\n  </data>\n  <data name=\"Requires SSL?\" xml:space=\"preserve\">\n    <value>E' richiesto l'uso di SSL?</value>\n  </data>\n  <data name=\"Settings\" xml:space=\"preserve\">\n    <value>Impostazioni</value>\n  </data>\n  <data name=\"Sms Client Id\" xml:space=\"preserve\">\n    <value>Sms Client Id</value>\n  </data>\n  <data name=\"Sms From\" xml:space=\"preserve\">\n    <value>Sms From</value>\n  </data>\n  <data name=\"Sms Secure Token\" xml:space=\"preserve\">\n    <value>Sms Secure Token</value>\n  </data>\n  <data name=\"Smtp Password\" xml:space=\"preserve\">\n    <value>Smtp Password</value>\n  </data>\n  <data name=\"Smtp Server\" xml:space=\"preserve\">\n    <value>Smtp Server</value>\n  </data>\n  <data name=\"Smtp User\" xml:space=\"preserve\">\n    <value>Smtp User</value>\n  </data>\n  <data name=\"State\" xml:space=\"preserve\">\n    <value>Provincia</value>\n  </data>\n  <data name=\"Thank you for confirming your email.\" xml:space=\"preserve\">\n    <value>Grazie per aver confermato la tua email.</value>\n  </data>\n  <data name=\"Twitter Consumer Key\" xml:space=\"preserve\">\n    <value>Twitter Consumer Key</value>\n  </data>\n  <data name=\"Twitter Consumer Secret\" xml:space=\"preserve\">\n    <value>Twitter Consumer Secret</value>\n  </data>\n  <data name=\"Use Email For Login\" xml:space=\"preserve\">\n    <value>Utilizza l'email come login</value>\n  </data>\n  <data name=\"Add Phone Number\" xml:space=\"preserve\">\n    <value>Aggiungi numero di telefono</value>\n  </data>\n  <data name=\"Are you sure you want to delete the country {0} and all of its states? You cannot undo this action.\" xml:space=\"preserve\">\n    <value>Sei sicuro di voler eliminare la nazione {0} e tutti i suoi stati? Questa operazione non può essere annullata.</value>\n  </data>\n  <data name=\"Are you sure you want to delete {0}?\" xml:space=\"preserve\">\n    <value>Sei sicuro di voler eliminare {0}?</value>\n  </data>\n  <data name=\"Back To Country List\" xml:space=\"preserve\">\n    <value>Ritorna alla lista di nazioni</value>\n  </data>\n  <data name=\"Back To State List\" xml:space=\"preserve\">\n    <value>Ritorna alla lista province</value>\n  </data>\n  <data name=\"Change Password\" xml:space=\"preserve\">\n    <value>Cambia password</value>\n  </data>\n  <data name=\"Code\" xml:space=\"preserve\">\n    <value>Codice</value>\n  </data>\n  <data name=\"Confirm New Password\" xml:space=\"preserve\">\n    <value>Conferma la nuova password</value>\n  </data>\n  <data name=\"Confirm Password\" xml:space=\"preserve\">\n    <value>Conferma password</value>\n  </data>\n  <data name=\"Core Data Administration\" xml:space=\"preserve\">\n    <value>Amministrazione dati del sito</value>\n  </data>\n  <data name=\"Country Detail\" xml:space=\"preserve\">\n    <value>Dettaglio nazione</value>\n  </data>\n  <data name=\"Country List Administration\" xml:space=\"preserve\">\n    <value>Amministrazione lista nazioni</value>\n  </data>\n  <data name=\"Create a new account.\" xml:space=\"preserve\">\n    <value>Crea un nuovo account.</value>\n  </data>\n  <data name=\"Edit\" xml:space=\"preserve\">\n    <value>Modifica</value>\n  </data>\n  <data name=\"Edit State\" xml:space=\"preserve\">\n    <value>Modifica stato</value>\n  </data>\n  <data name=\"Email\" xml:space=\"preserve\">\n    <value>Email</value>\n  </data>\n  <data name=\"Forgot Password Confirmation\" xml:space=\"preserve\">\n    <value>Conferma password dimenticata</value>\n  </data>\n  <data name=\"Forgot your password?\" xml:space=\"preserve\">\n    <value>Password dimenticata?</value>\n  </data>\n  <data name=\"Log In\" xml:space=\"preserve\">\n    <value>Accedi</value>\n  </data>\n  <data name=\"Must match password\" xml:space=\"preserve\">\n    <value>La password deve coincidere</value>\n  </data>\n  <data name=\"New Country\" xml:space=\"preserve\">\n    <value>Nuova nazione</value>\n  </data>\n  <data name=\"New Currency\" xml:space=\"preserve\">\n    <value>Nuova valuta</value>\n  </data>\n  <data name=\"New Password\" xml:space=\"preserve\">\n    <value>Nuova password</value>\n  </data>\n  <data name=\"New State\" xml:space=\"preserve\">\n    <value>Nuova provincia</value>\n  </data>\n  <data name=\"Number\" xml:space=\"preserve\">\n    <value>Numero</value>\n  </data>\n  <data name=\"Old Password\" xml:space=\"preserve\">\n    <value>Vecchia password</value>\n  </data>\n  <data name=\"Password\" xml:space=\"preserve\">\n    <value>Password</value>\n  </data>\n  <data name=\"Please check your email to reset your password.\" xml:space=\"preserve\">\n    <value>Controlla la tua casella di posta per resettare la tua password.</value>\n  </data>\n  <data name=\"Register\" xml:space=\"preserve\">\n    <value>Registrati</value>\n  </data>\n  <data name=\"Register as a new user?\" xml:space=\"preserve\">\n    <value>Registrati come nuovo utente?</value>\n  </data>\n  <data name=\"Remember Me\" xml:space=\"preserve\">\n    <value>Ricorda</value>\n  </data>\n  <data name=\"Remember this web browser\" xml:space=\"preserve\">\n    <value>Ricorda questo web browser</value>\n  </data>\n  <data name=\"Reset\" xml:space=\"preserve\">\n    <value>Reset</value>\n  </data>\n  <data name=\"Reset password\" xml:space=\"preserve\">\n    <value>Reset password</value>\n  </data>\n  <data name=\"Reset password confirmation\" xml:space=\"preserve\">\n    <value>Reset password di conferma</value>\n  </data>\n  <data name=\"Reset your password.\" xml:space=\"preserve\">\n    <value>Reset la tua password.</value>\n  </data>\n  <data name=\"Select Two-Factor Authentication Provider:\" xml:space=\"preserve\">\n    <value>Seleziona il provider per l'autenticazione a due fattori:</value>\n  </data>\n  <data name=\"Send Verification Code\" xml:space=\"preserve\">\n    <value>Invia codice di verifica</value>\n  </data>\n  <data name=\"State List Administration\" xml:space=\"preserve\">\n    <value>Amministrazione lista province</value>\n  </data>\n  <data name=\"States\" xml:space=\"preserve\">\n    <value>Province</value>\n  </data>\n  <data name=\"Submit\" xml:space=\"preserve\">\n    <value>Invia</value>\n  </data>\n  <data name=\"Thanks for registering!\" xml:space=\"preserve\">\n    <value>Grazie per la registrazione!</value>\n  </data>\n  <data name=\"Title\" xml:space=\"preserve\">\n    <value>Titolo</value>\n  </data>\n  <data name=\"Use a local account to log in.\" xml:space=\"preserve\">\n    <value>Utilizza un account locale per accedere.</value>\n  </data>\n  <data name=\"Use an existing account to log in\" xml:space=\"preserve\">\n    <value>Utilizza un account esistente per accedere</value>\n  </data>\n  <data name=\"Verify\" xml:space=\"preserve\">\n    <value>Verifica</value>\n  </data>\n  <data name=\"You must agree to the terms\" xml:space=\"preserve\">\n    <value>Devi accettare i termini del contratto</value>\n  </data>\n  <data name=\"Your password has been reset.\" xml:space=\"preserve\">\n    <value>La tua password è stata resettata.</value>\n  </data>\n  <data name=\"Account Approved\" xml:space=\"preserve\">\n    <value>Account approvato</value>\n  </data>\n  <data name=\"Account Locked\" xml:space=\"preserve\">\n    <value>Account bloccato</value>\n  </data>\n  <data name=\"Add\" xml:space=\"preserve\">\n    <value>Aggiungi</value>\n  </data>\n  <data name=\"Add a phone number.\" xml:space=\"preserve\">\n    <value>Aggiungi un numero di telefono.</value>\n  </data>\n  <data name=\"Add another service to log in.\" xml:space=\"preserve\">\n    <value>Aggiungi un altro servizio per accedere.</value>\n  </data>\n  <data name=\"Add User\" xml:space=\"preserve\">\n    <value>Aggiungi utente</value>\n  </data>\n  <data name=\"All\" xml:space=\"preserve\">\n    <value>Tutti</value>\n  </data>\n  <data name=\"Are you sure you want to add {0}?\" xml:space=\"preserve\">\n    <value>Sei sicuro di voler aggiungere {0}?</value>\n  </data>\n  <data name=\"Are you sure you want to delete the user {0}? You cannot undo this action.\" xml:space=\"preserve\">\n    <value>Sei sicuro di voler eliminare l'utente {0}? Questa operazione non può essere annullata.</value>\n  </data>\n  <data name=\"Are you sure you want to remove {0}?\" xml:space=\"preserve\">\n    <value>Sei sicuro di voler eliminare {0}?</value>\n  </data>\n  <data name=\"Change\" xml:space=\"preserve\">\n    <value>Cambia</value>\n  </data>\n  <data name=\"Change your account settings\" xml:space=\"preserve\">\n    <value>Cambia le impostazione del tuo account</value>\n  </data>\n  <data name=\"Close\" xml:space=\"preserve\">\n    <value>Chiudi</value>\n  </data>\n  <data name=\"Cloudscribe Version\" xml:space=\"preserve\">\n    <value>Versione di Cloudscribe</value>\n  </data>\n  <data name=\"Create\" xml:space=\"preserve\">\n    <value>Crea</value>\n  </data>\n  <data name=\"Database Platform\" xml:space=\"preserve\">\n    <value>Piattaforma database</value>\n  </data>\n  <data name=\"Date of Birth\" xml:space=\"preserve\">\n    <value>Data di nascita</value>\n  </data>\n  <data name=\"Disable\" xml:space=\"preserve\">\n    <value>Disattiva</value>\n  </data>\n  <data name=\"Disabled\" xml:space=\"preserve\">\n    <value>Disabilitato</value>\n  </data>\n  <data name=\"Display Name\" xml:space=\"preserve\">\n    <value>Nome visualizzato</value>\n  </data>\n  <data name=\"Enable\" xml:space=\"preserve\">\n    <value>Abilita</value>\n  </data>\n  <data name=\"Enabled\" xml:space=\"preserve\">\n    <value>Abilitato</value>\n  </data>\n  <data name=\"Environment Name\" xml:space=\"preserve\">\n    <value>Nome ambiente</value>\n  </data>\n  <data name=\"External Logins:\" xml:space=\"preserve\">\n    <value>Login esterni:</value>\n  </data>\n  <data name=\"First Name\" xml:space=\"preserve\">\n    <value>Nome</value>\n  </data>\n  <data name=\"Last Name\" xml:space=\"preserve\">\n    <value>Cognome</value>\n  </data>\n  <data name=\"Manage\" xml:space=\"preserve\">\n    <value>Gestisci</value>\n  </data>\n  <data name=\"Manage your account\" xml:space=\"preserve\">\n    <value>Gestisci il tuo account</value>\n  </data>\n  <data name=\"Manage your external logins\" xml:space=\"preserve\">\n    <value>Gestisci i tuoi login esterni</value>\n  </data>\n  <data name=\"Members\" xml:space=\"preserve\">\n    <value>Membri</value>\n  </data>\n  <data name=\"New Role\" xml:space=\"preserve\">\n    <value>Nuovo ruolo</value>\n  </data>\n  <data name=\"None\" xml:space=\"preserve\">\n    <value>Nessuno</value>\n  </data>\n  <data name=\"Operating System\" xml:space=\"preserve\">\n    <value>Sistema operativo</value>\n  </data>\n  <data name=\"Password:\" xml:space=\"preserve\">\n    <value>Password:</value>\n  </data>\n  <data name=\"Phone Number:\" xml:space=\"preserve\">\n    <value>Numero di telefono:</value>\n  </data>\n  <data name=\"Phone Numbers can used as a second factor of verification in two-factor authentication, for better account security add your phone number now.\" xml:space=\"preserve\">\n    <value>Il numero di telefono può essere usato come verifica per l'autenticazione a due fattori, per una maggiore sicurezza del tuo account aggiungi il tuo numero di telefono ora.</value>\n  </data>\n  <data name=\"Registered Logins\" xml:space=\"preserve\">\n    <value>Login registrate</value>\n  </data>\n  <data name=\"Remove\" xml:space=\"preserve\">\n    <value>Rimuovi</value>\n  </data>\n  <data name=\"Remove Login\" xml:space=\"preserve\">\n    <value>Rimuovi login</value>\n  </data>\n  <data name=\"Role Name\" xml:space=\"preserve\">\n    <value>Nome ruolo</value>\n  </data>\n  <data name=\"Runtime\" xml:space=\"preserve\">\n    <value>Runtime</value>\n  </data>\n  <data name=\"Search\" xml:space=\"preserve\">\n    <value>Cerca</value>\n  </data>\n  <data name=\"Search By IP Address\" xml:space=\"preserve\">\n    <value>Cerca per indirizzo IP</value>\n  </data>\n  <data name=\"Server Host Name\" xml:space=\"preserve\">\n    <value>Nome host server</value>\n  </data>\n  <data name=\"Server IP Address\" xml:space=\"preserve\">\n    <value>Indirizzo IP server</value>\n  </data>\n  <data name=\"Server Time UTC\" xml:space=\"preserve\">\n    <value>Server Time UTC</value>\n  </data>\n  <data name=\"Set Password\" xml:space=\"preserve\">\n    <value>Imposta password</value>\n  </data>\n  <data name=\"Set your password\" xml:space=\"preserve\">\n    <value>Imposta la tua password</value>\n  </data>\n  <data name=\"Two-Factor Authentication:\" xml:space=\"preserve\">\n    <value>Autenticazione a due fattori:</value>\n  </data>\n  <data name=\"UserId\" xml:space=\"preserve\">\n    <value>Id utente</value>\n  </data>\n  <data name=\"You do not have a local username/password for this site. Add a local account so you can log in without an external login.\" xml:space=\"preserve\">\n    <value>Non hai un nome utente/password locale per questo sito. Aggiungi un account locale per poter accedere senza l'uso di login esterne.</value>\n  </data>\n  <data name=\"Confirm your account\" xml:space=\"preserve\">\n    <value>Conferma il tuo account</value>\n  </data>\n  <data name=\"Edit Country\" xml:space=\"preserve\">\n    <value>Modifica nazione</value>\n  </data>\n  <data name=\"Edit Role\" xml:space=\"preserve\">\n    <value>Modifica ruolo</value>\n  </data>\n  <data name=\"Invalid code.\" xml:space=\"preserve\">\n    <value>Codice non valido.</value>\n  </data>\n  <data name=\"Invalid login attempt.\" xml:space=\"preserve\">\n    <value>Tentativo di accesso non valido.</value>\n  </data>\n  <data name=\"Manage User\" xml:space=\"preserve\">\n    <value>Gestisci utenti</value>\n  </data>\n  <data name=\"New User\" xml:space=\"preserve\">\n    <value>Nuovo utente</value>\n  </data>\n  <data name=\"Non Role Members\" xml:space=\"preserve\">\n    <value>Membri non nel ruolo</value>\n  </data>\n  <data name=\"Please check your email inbox, we just sent you a link that you need to click to confirm your account\" xml:space=\"preserve\">\n    <value>Controlla la tua casella di posta, ti abbiamo inviato un link per confermare il tuo account</value>\n  </data>\n  <data name=\"reCAPTCHA Error occured. Please try again\" xml:space=\"preserve\">\n    <value>Errore in reCAPTCHA. Riprova ancora</value>\n  </data>\n  <data name=\"Role Management\" xml:space=\"preserve\">\n    <value>Gestione ruoli</value>\n  </data>\n  <data name=\"Role Members\" xml:space=\"preserve\">\n    <value>Gestione membri</value>\n  </data>\n  <data name=\"Security Code\" xml:space=\"preserve\">\n    <value>Codice di sicurezza</value>\n  </data>\n  <data name=\"The country {0} was successfully created.\" xml:space=\"preserve\">\n    <value>La nazione {0} è stata creata correttamente.</value>\n  </data>\n  <data name=\"The country {0} was successfully deleted.\" xml:space=\"preserve\">\n    <value>La nazione {0} è stata eliminata correttamente.</value>\n  </data>\n  <data name=\"The country {0} was successfully updated.\" xml:space=\"preserve\">\n    <value>La nazione {0} è stata aggiornata correttamente.</value>\n  </data>\n  <data name=\"The currency {0} was successfully created.\" xml:space=\"preserve\">\n    <value>La valuta {0} è stata creata correttamente.</value>\n  </data>\n  <data name=\"The currency {0} was successfully deleted.\" xml:space=\"preserve\">\n    <value>La valuta {0} è stata eliminata correttamente.</value>\n  </data>\n  <data name=\"The currency {0} was successfully updated.\" xml:space=\"preserve\">\n    <value>La valuta {0} è stata aggiornata correttamente.</value>\n  </data>\n  <data name=\"The role &lt;b&gt;{0}&lt;/b&gt; was successfully created.\" xml:space=\"preserve\">\n    <value>Il ruolo &lt;b&gt;{0}&lt;/b&gt; è stato creato correttamente.</value>\n  </data>\n  <data name=\"The role &lt;b&gt;{0}&lt;/b&gt; was successfully deleted.\" xml:space=\"preserve\">\n    <value>Il ruolo &lt;b&gt;{0}&lt;/b&gt; è stato eliminata correttamente.</value>\n  </data>\n  <data name=\"The role &lt;b&gt;{0}&lt;/b&gt; was successfully updated.\" xml:space=\"preserve\">\n    <value>Il ruolo &lt;b&gt;{0}&lt;/b&gt; è stato aggiornato correttamente.</value>\n  </data>\n  <data name=\"The state {0} was successfully created.\" xml:space=\"preserve\">\n    <value>Il stato {0} è stato creato correttamente.</value>\n  </data>\n  <data name=\"The state {0} was successfully deleted.\" xml:space=\"preserve\">\n    <value>Il stato {0} è stato eliminato correttamente.</value>\n  </data>\n  <data name=\"The state {0} was successfully updated.\" xml:space=\"preserve\">\n    <value>Il stato {0} è stato aggiornato correttamente.</value>\n  </data>\n  <data name=\"user account for {0} was successfully approved.\" xml:space=\"preserve\">\n    <value>l'account per {0} è stato approvato.</value>\n  </data>\n  <data name=\"user account for {0} was successfully created.\" xml:space=\"preserve\">\n    <value>l'account per {0} è stato creato correttamente.</value>\n  </data>\n  <data name=\"user account for {0} was successfully deleted.\" xml:space=\"preserve\">\n    <value>l'account per {0} è stato eliminato correttamente.</value>\n  </data>\n  <data name=\"user account for {0} was successfully updated.\" xml:space=\"preserve\">\n    <value>l'account per {0} è stato aggiornato correttamente.</value>\n  </data>\n  <data name=\"User Management\" xml:space=\"preserve\">\n    <value>Gestione utenti</value>\n  </data>\n  <data name=\"Your security code is: {0}\" xml:space=\"preserve\">\n    <value>Il tuo codice di sicurezza è: {0}</value>\n  </data>\n  <data name=\"{0} - Edit Role\" xml:space=\"preserve\">\n    <value>{0} - Modifica ruolo</value>\n  </data>\n  <data name=\"{0} - Locked Out User Accounts\" xml:space=\"preserve\">\n    <value>{0} - Utenti bloccati</value>\n  </data>\n  <data name=\"{0} - Manage User\" xml:space=\"preserve\">\n    <value>{0} - Gestione utenti</value>\n  </data>\n  <data name=\"{0} - New Role\" xml:space=\"preserve\">\n    <value>{0} - Nuovo ruolo</value>\n  </data>\n  <data name=\"{0} - New User\" xml:space=\"preserve\">\n    <value>{0} - Nuovo utente</value>\n  </data>\n  <data name=\"{0} - Non Role Members\" xml:space=\"preserve\">\n    <value>{0} - Utenti non nel ruolo</value>\n  </data>\n  <data name=\"{0} - Role Management\" xml:space=\"preserve\">\n    <value>{0} - Gestione ruoli</value>\n  </data>\n  <data name=\"{0} - Role Members\" xml:space=\"preserve\">\n    <value>{0} - Utenti nel ruolo</value>\n  </data>\n  <data name=\"{0} - User Accounts Pending Approval\" xml:space=\"preserve\">\n    <value>{0} - Utenti in attesa di approvazione</value>\n  </data>\n  <data name=\"{0} - User Management\" xml:space=\"preserve\">\n    <value>Gestione utenti</value>\n  </data>\n  <data name=\"{0} - {1}\" xml:space=\"preserve\">\n    <value>{0} - {1}</value>\n  </data>\n  <data name=\"{0} States\" xml:space=\"preserve\">\n    <value>{0} Province</value>\n  </data>\n  <data name=\"{0} was successfully added to the role {1}.\" xml:space=\"preserve\">\n    <value>{0} è stato aggiunto al ruolo {1}.</value>\n  </data>\n  <data name=\"{0} was successfully removed from the role {1}.\" xml:space=\"preserve\">\n    <value>{0} è stato rimosso dal ruolo {1}.</value>\n  </data>\n  <data name=\"-Please select-\" xml:space=\"preserve\">\n    <value>- Seleziona -</value>\n  </data>\n  <data name=\"Basic site settings for {0} were successfully updated.\" xml:space=\"preserve\">\n    <value>Le impostazioni del sito {0} sono state aggiornate.</value>\n  </data>\n  <data name=\"Captcha Settings\" xml:space=\"preserve\">\n    <value>Impostazioni captcha</value>\n  </data>\n  <data name=\"Captcha Settings for {0} was successfully updated.\" xml:space=\"preserve\">\n    <value>Le impostazioni captcha di {0} sono state aggoirnate.</value>\n  </data>\n  <data name=\"Company Info\" xml:space=\"preserve\">\n    <value>Informazioni sulla società</value>\n  </data>\n  <data name=\"Company Info for {0} was successfully updated.\" xml:space=\"preserve\">\n    <value>Le informazioni sulla società per {0} sono state aggiornate.</value>\n  </data>\n  <data name=\"Create New Site\" xml:space=\"preserve\">\n    <value>Crea nuovo sito</value>\n  </data>\n  <data name=\"Domain/Host Name Mappings\" xml:space=\"preserve\">\n    <value>Mappatura dominio/nome host</value>\n  </data>\n  <data name=\"Domain/Host Name Mappings for {0}\" xml:space=\"preserve\">\n    <value>Mappatura dominio/nome host per {0}</value>\n  </data>\n  <data name=\"Email Settings\" xml:space=\"preserve\">\n    <value>Impostazioni email</value>\n  </data>\n  <data name=\"Email Settings for {0} were successfully updated.\" xml:space=\"preserve\">\n    <value>Le impostazione email per {0} sono state aggiornate.</value>\n  </data>\n  <data name=\"failed to add the requested host name mapping becuase it is already mapped to another site.\" xml:space=\"preserve\">\n    <value>fallita la mappatura nome host perché è già usata per un altro sito.</value>\n  </data>\n  <data name=\"Failed to verify phone number\" xml:space=\"preserve\">\n    <value>Fallita la verifica del numero di telefono</value>\n  </data>\n  <data name=\"Folder name is required.\" xml:space=\"preserve\">\n    <value>Il nome della cartella è obbligatorio.</value>\n  </data>\n  <data name=\"Host/domain mapping for {0} was successfully created.\" xml:space=\"preserve\">\n    <value>La mappatura dominio/host per {0} è stata creata.</value>\n  </data>\n  <data name=\"Host/domain mapping for {0} was successfully removed.\" xml:space=\"preserve\">\n    <value>La mappatura dominio/host per {0} è stata rimossa.</value>\n  </data>\n  <data name=\"Login Page Content\" xml:space=\"preserve\">\n    <value>Contenuto pagina di login</value>\n  </data>\n  <data name=\"Login Page Info for {0} was successfully updated.\" xml:space=\"preserve\">\n    <value>Le informazioni della pagina di login per {0} sono state aggiornate.</value>\n  </data>\n  <data name=\"oops something went wrong please try again\" xml:space=\"preserve\">\n    <value>oops qualcosa non ha funzionato riprova ancora</value>\n  </data>\n  <data name=\"oops something went wrong, site was not found.\" xml:space=\"preserve\">\n    <value>oops qualcosa non ha funzionato, il sito non è stato trovato.</value>\n  </data>\n  <data name=\"oops something went wrong, the external login was not removed, please try again.\" xml:space=\"preserve\">\n    <value>oops qualcosa non ha funzionato, la login esterna non è stata rimossa, riprova ancora.</value>\n  </data>\n  <data name=\"Registration Page Content\" xml:space=\"preserve\">\n    <value>Contenuto della pagina di registrazione</value>\n  </data>\n  <data name=\"Registration Page Content for {0} was successfully updated.\" xml:space=\"preserve\">\n    <value>Il contenuto della pagina di registrazione per {0} è stato aggiornato.</value>\n  </data>\n  <data name=\"Security Settings\" xml:space=\"preserve\">\n    <value>Impostazioni di sicurezza</value>\n  </data>\n  <data name=\"Security Settings for {0} was successfully updated.\" xml:space=\"preserve\">\n    <value>Le Impostazioni di sicurezza per {0} sono state aggiornate,</value>\n  </data>\n  <data name=\"Site Administration\" xml:space=\"preserve\">\n    <value>Amministrazione sito</value>\n  </data>\n  <data name=\"Site List\" xml:space=\"preserve\">\n    <value>Lista siti</value>\n  </data>\n  <data name=\"Site Settings\" xml:space=\"preserve\">\n    <value>Impostazioni sito</value>\n  </data>\n  <data name=\"SMS Settings\" xml:space=\"preserve\">\n    <value>Impostazioni SMS</value>\n  </data>\n  <data name=\"SMS Settings for {0} were successfully updated.\" xml:space=\"preserve\">\n    <value>Le impostazioni SMS per {0} sono state aggiornate.</value>\n  </data>\n  <data name=\"Social Login Settings\" xml:space=\"preserve\">\n    <value>Impostazioni login social</value>\n  </data>\n  <data name=\"Social Login Settings for {0} was successfully updated.\" xml:space=\"preserve\">\n    <value>Le impostazioni login social per {0} sono state aggiornate.</value>\n  </data>\n  <data name=\"System Information\" xml:space=\"preserve\">\n    <value>Informazioni di sistema</value>\n  </data>\n  <data name=\"The external login was removed.\" xml:space=\"preserve\">\n    <value>La login esterna è stata rimossa</value>\n  </data>\n  <data name=\"The selected folder name is already in use on another site.\" xml:space=\"preserve\">\n    <value>Il nome della cartella è già utilizzato in un altro sito.</value>\n  </data>\n  <data name=\"The selected host/domain name is already in use on another site.\" xml:space=\"preserve\">\n    <value>Il dominio/nome host è già utilizzato in un altro sito.</value>\n  </data>\n  <data name=\"The site {0} was not deleted because it is a server admin site.\" xml:space=\"preserve\">\n    <value>Il sito {0} non è stato eliminato perché è il sito di amministrazione del server.</value>\n  </data>\n  <data name=\"The site {0} was successfully deleted.\" xml:space=\"preserve\">\n    <value>Il sito {0} è stato eliminato correttamente.</value>\n  </data>\n  <data name=\"Your password has been changed.\" xml:space=\"preserve\">\n    <value>La tua password è stata cambiata.</value>\n  </data>\n  <data name=\"Your password has been set.\" xml:space=\"preserve\">\n    <value>La tua password è stata impostata.</value>\n  </data>\n  <data name=\"Your phone number was added.\" xml:space=\"preserve\">\n    <value>Il tuo numero di telefono è stato aggiunto.</value>\n  </data>\n  <data name=\"Your phone number was removed.\" xml:space=\"preserve\">\n    <value>Il tuo numero di telefono è stato rimosso.</value>\n  </data>\n  <data name=\"{0} - Captcha Settings\" xml:space=\"preserve\">\n    <value>{0} - Impostazioni captcha</value>\n  </data>\n  <data name=\"{0} - Company Info\" xml:space=\"preserve\">\n    <value>{0} - Informazioni sulla società</value>\n  </data>\n  <data name=\"{0} - Email Settings\" xml:space=\"preserve\">\n    <value>{0} - Impostazioni email</value>\n  </data>\n  <data name=\"{0} - Login Page Content\" xml:space=\"preserve\">\n    <value>{0} - Contenuto pagina di login</value>\n  </data>\n  <data name=\"{0} - Registration Page Content\" xml:space=\"preserve\">\n    <value>{0} - Contenuto pagina di registrazione</value>\n  </data>\n  <data name=\"{0} - Security Settings\" xml:space=\"preserve\">\n    <value>{0} - Impostazioni di sicurezza</value>\n  </data>\n  <data name=\"{0} - Settings\" xml:space=\"preserve\">\n    <value>{0} - Impostazioni</value>\n  </data>\n  <data name=\"{0} - SMS Settings\" xml:space=\"preserve\">\n    <value>{0} - Impostazioni SMS</value>\n  </data>\n  <data name=\"{0} - Social Login Settings\" xml:space=\"preserve\">\n    <value>{0} - Impostazioni login social</value>\n  </data>\n  <data name=\"Time Zone:\" xml:space=\"preserve\">\n    <value>Fuso orario:</value>\n  </data>\n  <data name=\"Update Time Zone\" xml:space=\"preserve\">\n    <value>Aggiorna fuso orario</value>\n  </data>\n  <data name=\"Culture Code\" xml:space=\"preserve\">\n    <value>Codice lingua</value>\n  </data>\n  <data name=\"Username\" xml:space=\"preserve\">\n    <value>Nome utente</value>\n  </data>\n  <data name=\"Username not accepted please try a different value\" xml:space=\"preserve\">\n    <value>Nome utente non accettato, prova con un altro valore</value>\n  </data>\n  <data name=\"Register using your {0} account\" xml:space=\"preserve\">\n    <value>Registrati usanto il tuo account {0}</value>\n  </data>\n  <data name=\"Use an existing account\" xml:space=\"preserve\">\n    <value>Utilizza un account esistente</value>\n  </data>\n  <data name=\"New Account Pending Approval\" xml:space=\"preserve\">\n    <value>Nuovo account in attesa di approvazione</value>\n  </data>\n  <data name=\"Hello {0}!\" xml:space=\"preserve\">\n    <value>Ciao {0}!</value>\n  </data>\n  <data name=\"Log off\" xml:space=\"preserve\">\n    <value>Esci</value>\n  </data>\n  <data name=\"Access Denied\" xml:space=\"preserve\">\n    <value>Accesso negato</value>\n  </data>\n  <data name=\"Back To List\" xml:space=\"preserve\">\n    <value>Ritorna alla lista</value>\n  </data>\n  <data name=\"Before you can Log in, we need to confirm that the email address you provided is valid. We sent an email to the address you&#xD;&#xA;    provided with a link that you need to click in order to confirm your email address is valid.\" xml:space=\"preserve\">\n    <value>Prima di accedere, devi confermare l'indirizzo email che hai fornito. Ti abbiamo inviato una email contenente un link per confermare la validità dell'indirizzo.</value>\n  </data>\n  <data name=\"Enter your email.\" xml:space=\"preserve\">\n    <value>Inserire la tua email.</value>\n  </data>\n  <data name=\"Error from external provider: {0}\" xml:space=\"preserve\">\n    <value>Errore dal provider esterno: {0}</value>\n  </data>\n  <data name=\"I Agree to these terms of use.\" xml:space=\"preserve\">\n    <value>Accetto i termini di utilizzo.</value>\n  </data>\n  <data name=\"ISOCode2\" xml:space=\"preserve\">\n    <value>ISOCode2</value>\n  </data>\n  <data name=\"ISOCode3\" xml:space=\"preserve\">\n    <value>ISOCode3</value>\n  </data>\n  <data name=\"Locked out\" xml:space=\"preserve\">\n    <value>Bloccato</value>\n  </data>\n  <data name=\"Log in using your {0} account\" xml:space=\"preserve\">\n    <value>Accedi con il tuo account {0}</value>\n  </data>\n  <data name=\"Login Failure\" xml:space=\"preserve\">\n    <value>Accesso non riuscito</value>\n  </data>\n  <data name=\"Oops something went wrong\" xml:space=\"preserve\">\n    <value>Oops qualcosa non ha funzionato</value>\n  </data>\n  <data name=\"Oops!\" xml:space=\"preserve\">\n    <value>Oops!</value>\n  </data>\n  <data name=\"Please enter a valid email for this site below and click the Register button to finish logging in.\" xml:space=\"preserve\">\n    <value>Inserisci un indirizzo email valido per questo sito e clicca il bottone registra per concludere l'accesso.</value>\n  </data>\n  <data name=\"Registration Agreement Required\" xml:space=\"preserve\">\n    <value>Il contratto di registrazione è obbligatorio</value>\n  </data>\n  <data name=\"Site Closed To Public Temporarily\" xml:space=\"preserve\">\n    <value>Il sito è temporaneamente chiuso al pubblico</value>\n  </data>\n  <data name=\"Sorry for the delay, but this site requires approval of new accounts. An email has been sent to the site managers notifying them of your registration request. You should recieve an email notifying you once your account has been approved.\" xml:space=\"preserve\">\n    <value>Siamo spiacenti per l'attesa, ma questo sito richiede l'approvazione per i nuovi account. Una email è stata inviata agli amministratori per notificare la tua registrazione. Dovresti ricevere una email una volta che il tuo account sarà approvato.</value>\n  </data>\n  <data name=\"The role name is already in use.\" xml:space=\"preserve\">\n    <value>Il nome ruolo è già utilizzato.</value>\n  </data>\n  <data name=\"This account has been locked out, please try again later.\" xml:space=\"preserve\">\n    <value>Questo account è stato bloccato, riprovare più tardi.</value>\n  </data>\n  <data name=\"Unsuccessful login with service.\" xml:space=\"preserve\">\n    <value>Login con il servizio non riuscito.</value>\n  </data>\n  <data name=\"Your time zone has been updated.\" xml:space=\"preserve\">\n    <value>Il tuo fuso orario è stato aggiornato.</value>\n  </data>\n  <data name=\"Bad Request\" xml:space=\"preserve\">\n    <value>Richiesta non valida</value>\n  </data>\n  <data name=\"Forbidden\" xml:space=\"preserve\">\n    <value>Proibito</value>\n  </data>\n  <data name=\"Login Name\" xml:space=\"preserve\">\n    <value>Nome login</value>\n  </data>\n  <data name=\"Page Not Found\" xml:space=\"preserve\">\n    <value>Pagina non trovata</value>\n  </data>\n  <data name=\"Remove this {0} login from your account\" xml:space=\"preserve\">\n    <value>Rimuovi questo login {0} dal tuo account</value>\n  </data>\n  <data name=\"Select Roles\" xml:space=\"preserve\">\n    <value>Seleziona i ruoli</value>\n  </data>\n  <data name=\"Site Home\" xml:space=\"preserve\">\n    <value>Home sito</value>\n  </data>\n  <data name=\"Sorry, but the page requires authentication.\" xml:space=\"preserve\">\n    <value>Ci spiace, ma la pagina che hai richiesto richiede l'autenticazione.</value>\n  </data>\n  <data name=\"Sorry, but the page you were looking for can't be found.\" xml:space=\"preserve\">\n    <value>Ci spiace, ma la pagina che stai cercando non può essere trovata.</value>\n  </data>\n  <data name=\"Sorry, but you don't have permission to access this page.\" xml:space=\"preserve\">\n    <value>Ci spiace, ma non hai i permessi per accedere a questa pagina.</value>\n  </data>\n  <data name=\"Unauthorized\" xml:space=\"preserve\">\n    <value>Non autorizzato</value>\n  </data>\n  <data name=\"Unexpected Error\" xml:space=\"preserve\">\n    <value>Errore inaspettato</value>\n  </data>\n  <data name=\"Update\" xml:space=\"preserve\">\n    <value>Aggiorna</value>\n  </data>\n  <data name=\"Verify Phone Number\" xml:space=\"preserve\">\n    <value>Verifica numero di telefono</value>\n  </data>\n  <data name=\"Well, this is embarrassing. An error occurred while processing your request. Rest assured, this problem has been logged and hamsters have been released to fix the problem.\" xml:space=\"preserve\">\n    <value>Si è verificato un errore durante l'elaborazione della richiesta. Siate certi, questo problema è stato registrato e gli addetti cercheranno di risolvere il problema.</value>\n  </data>\n  <data name=\"Your browser sent a request that this server could not understand.\" xml:space=\"preserve\">\n    <value>Il tuo browser ha inviato una richiesta sconosciuta.</value>\n  </data>\n  <data name=\"Add Claim\" xml:space=\"preserve\">\n    <value>Aggiungi claim</value>\n  </data>\n  <data name=\"Approve this account\" xml:space=\"preserve\">\n    <value>Approva questo account</value>\n  </data>\n  <data name=\"Are you sure you want to remove the claim {0}?\" xml:space=\"preserve\">\n    <value>Sei sicuro di voler eliminare il claim {0}?</value>\n  </data>\n  <data name=\"Claim Type\" xml:space=\"preserve\">\n    <value>Tipo di claim</value>\n  </data>\n  <data name=\"Claim Value\" xml:space=\"preserve\">\n    <value>Valore del claim</value>\n  </data>\n  <data name=\"Created\" xml:space=\"preserve\">\n    <value>Creato</value>\n  </data>\n  <data name=\"Domain/Host name mappings are used internally to resolve a specific site from the database when a web request comes in for that host/domain name. If no maping exists then the default site will be used (i.e. the first site). This is only needed if you are hosting multiple sites based on host names within a single web site installation.\" xml:space=\"preserve\">\n    <value>I mapping dei nomi di dominio/host vengono utilizzati internamente per risolvere un sito specifico dal database quando viene fornita una richiesta web per il nome host/dominio. Se nessun mapping esiste  verrà utilizzato il sito predefinito. Questo è necessario solo se si ospitano più siti basati su nomi host all'interno di una singola installazione di sito web.</value>\n  </data>\n  <data name=\"Email/Login\" xml:space=\"preserve\">\n    <value>Email/Login</value>\n  </data>\n  <data name=\"First Page\" xml:space=\"preserve\">\n    <value>Prima pagina</value>\n  </data>\n  <data name=\"Google Analytics ProfileId\" xml:space=\"preserve\">\n    <value>Google Analytics ProfileId</value>\n  </data>\n  <data name=\"Last Page\" xml:space=\"preserve\">\n    <value>Ultima pagina</value>\n  </data>\n  <data name=\"Next page\" xml:space=\"preserve\">\n    <value>Pagina successiva</value>\n  </data>\n  <data name=\"Note that the request has to be coming to the web site installation for this to work. That is, you still need a DNS record for the domain or host name to resolve to the IP (Internet Protocol) address of the web site installation, and if the IP address is shared with other web site installations you also still need host name mappings in the web server bindings so that the web server maps the request to the correct web site installation.\" xml:space=\"preserve\">\n    <value>Si noti che la richiesta deve pervenire al sito web di installazione per funzionare. Ovvero, è necessario un record DNS per il dominio o il nome host per risolvere l'indirizzo IP del sito web di installazione e se l'indirizzo IP è condiviso con altre installazioni di siti web è anche necessario fare il mapping dei nomi host nelle associazioni del server web, in modo che il server web esegua il mapping della richiesta all'installazione del sito web corretto.</value>\n  </data>\n  <data name=\"OpenIdConnect App Id\" xml:space=\"preserve\">\n    <value>OpenIdConnect App Id</value>\n  </data>\n  <data name=\"OpenIdConnect App Secret\" xml:space=\"preserve\">\n    <value>OpenIdConnect App Secret</value>\n  </data>\n  <data name=\"OpenIdConnect Authority Url\" xml:space=\"preserve\">\n    <value>OpenIdConnect Authority Url</value>\n  </data>\n  <data name=\"OpenIdConnect Display Name\" xml:space=\"preserve\">\n    <value>OpenIdConnect Display Name</value>\n  </data>\n  <data name=\"Previous page\" xml:space=\"preserve\">\n    <value>Pagina precedente</value>\n  </data>\n  <data name=\"Registration Agreement/Terms of Use\" xml:space=\"preserve\">\n    <value>Contratto di registrazione/termini di utilizzo</value>\n  </data>\n  <data name=\"Require Users To Accept Changed Agreement?\" xml:space=\"preserve\">\n    <value>E' richiesto agli utenti di accettare il cambio del contratto?</value>\n  </data>\n  <data name=\"Send Email Notification\" xml:space=\"preserve\">\n    <value>Invia email di notifica</value>\n  </data>\n  <data name=\"Your information has been updated.\" xml:space=\"preserve\">\n    <value>Le tue informazioni sono state aggiornate.</value>\n  </data>\n  <data name=\"Update User Info\" xml:space=\"preserve\">\n    <value>Aggiorna info utente</value>\n  </data>\n  <data name=\"Website Url\" xml:space=\"preserve\">\n    <value>Sito web</value>\n  </data>\n  <data name=\"Must Change Password\" xml:space=\"preserve\">\n    <value>Devi cambiare la password</value>\n  </data>\n  <data name=\"{0} - Users\" xml:space=\"preserve\">\n    <value>{0} - Utenti</value>\n  </data>\n  <data name=\"Activity\" xml:space=\"preserve\">\n    <value>Attività</value>\n  </data>\n  <data name=\"Capture Count\" xml:space=\"preserve\">\n    <value>Raccolta contatore</value>\n  </data>\n  <data name=\"First Capture\" xml:space=\"preserve\">\n    <value>Prima cattura</value>\n  </data>\n  <data name=\"Ip Address\" xml:space=\"preserve\">\n    <value>Indirizzo Ip</value>\n  </data>\n  <data name=\"Last Capture\" xml:space=\"preserve\">\n    <value>Ultima cattura</value>\n  </data>\n  <data name=\"User Activity - {0}\" xml:space=\"preserve\">\n    <value>Attività utente - {0}</value>\n  </data>\n  <data name=\"{0} - User Activity - {1}\" xml:space=\"preserve\">\n    <value>{0} - Attività utente - {1}</value>\n  </data>\n  <data name=\"Add authenticator app\" xml:space=\"preserve\">\n    <value>Aggiungi app di autenticazione</value>\n  </data>\n  <data name=\"Authenticator app\" xml:space=\"preserve\">\n    <value>App di autenticazione</value>\n  </data>\n  <data name=\"Configure authenticator app\" xml:space=\"preserve\">\n    <value>Configura app di autenticazione</value>\n  </data>\n  <data name=\"Disable 2FA\" xml:space=\"preserve\">\n    <value>Disattiva 2FA</value>\n  </data>\n  <data name=\"Disable two-factor authentication (2FA)\" xml:space=\"preserve\">\n    <value>Disattiva autenticazione a due fattori (2FA)</value>\n  </data>\n  <data name=\"Enable authenticator\" xml:space=\"preserve\">\n    <value>Abilita autenticatore</value>\n  </data>\n  <data name=\"If you lose your device and don't have the recovery codes you will lose access to your account.\" xml:space=\"preserve\">\n    <value>Se perdi il tuo dispositivo e non hai un salvataggio dei codici perderai l'accesso al tuo account.</value>\n  </data>\n  <data name=\"If you reset your authenticator key your authenticator app will not work until you reconfigure it.\" xml:space=\"preserve\">\n    <value>Se resetti la tua chiave, l'app di autenticazione non funzionarà fino a che non la riconfiguri.</value>\n  </data>\n  <data name=\"Once you have scanned the QR code or input the key above, your two factor authentication app will provide you with a unique code. Enter the code in the confirmation box below.\" xml:space=\"preserve\">\n    <value>Una volta scansionato il codice QR o inserito la chiave qui sopra, la tua app di autenticazione ti fornirà un codice univoco. Inserisci il codice di conferma nel box sottostate.</value>\n  </data>\n  <data name=\"Put these codes in a safe place.\" xml:space=\"preserve\">\n    <value>Metti i codici in un posto sicuro.</value>\n  </data>\n  <data name=\"Recovery code verification\" xml:space=\"preserve\">\n    <value>Verifica del codice di ripristino</value>\n  </data>\n  <data name=\"Recovery codes\" xml:space=\"preserve\">\n    <value>Codici di ripristino</value>\n  </data>\n  <data name=\"Reset authenticator key\" xml:space=\"preserve\">\n    <value>Reset authenticator key</value>\n  </data>\n  <data name=\"Reset recovery codes\" xml:space=\"preserve\">\n    <value>Reset codici di ripristino</value>\n  </data>\n  <data name=\"This action only disables 2FA.\" xml:space=\"preserve\">\n    <value>Questa operazione disabilita solo il 2FA.</value>\n  </data>\n  <data name=\"This process disables 2FA until you verify your authenticator app and will also reset your 2FA recovery codes.  If you do not complete your authenticator app configuration you may lose access to your account.\" xml:space=\"preserve\">\n    <value>Questo processo disabilita il 2FA fino alla verifica della tua app di autenticazione e resetterà i codici 2FA di ripristino. Se non completi la configurazione della tua app di autenticazione potresti non accedere al tuo account.</value>\n  </data>\n  <data name=\"To use an authenticator app go through the following steps:\" xml:space=\"preserve\">\n    <value>Per utilizzare una app di autenticazione segui i seguenti passaggi:</value>\n  </data>\n  <data name=\"Two-factor authentication\" xml:space=\"preserve\">\n    <value>Autenticazione a due fattori</value>\n  </data>\n  <data name=\"Verification Code\" xml:space=\"preserve\">\n    <value>Codice di verifica</value>\n  </data>\n  <data name=\"You have 1 recovery code left.\" xml:space=\"preserve\">\n    <value>Hai un codice di ripristino</value>\n  </data>\n  <data name=\"You have no recovery codes left.\" xml:space=\"preserve\">\n    <value>Non hai un codice di ripristino</value>\n  </data>\n  <data name=\"You have requested to login with a recovery code. This login will not be remembered until you provide an authenticator app code at login or disable 2FA and login again.\" xml:space=\"preserve\">\n    <value>Hai richiesto di accedere con un codice di ripristino. Questa login non verrà ricordata fino a che non fornirai un codice dell'app di autenticazione in fase di accesso o disattiva il 2FA e accedi di nuovo.</value>\n  </data>\n  <data name=\"Your login is protected with an authenticator app. Enter your authenticator code below.\" xml:space=\"preserve\">\n    <value>La tua login è protetta con una app di autenticazione. Inserisci il codice dell'app qui sotto.</value>\n  </data>\n  <data name=\"Disable 2 Factor Authentication\" xml:space=\"preserve\">\n    <value>Disattiva autenticazione a 2 fattori</value>\n  </data>\n  <data name=\"Reset Authenticator\" xml:space=\"preserve\">\n    <value>Reset authenticator</value>\n  </data>\n  <data name=\"Comment\" xml:space=\"preserve\">\n    <value>Commenti</value>\n  </data>\n  <data name=\"Country State Administration\" xml:space=\"preserve\">\n    <value>Amministrazione nazioni</value>\n  </data>\n  <data name=\"Forced Culture\" xml:space=\"preserve\">\n    <value>Lingua</value>\n  </data>\n  <data name=\"Forced UI Culture\" xml:space=\"preserve\">\n    <value>Lingua interfaccia</value>\n  </data>\n  <data name=\"Locked Out User Accounts\" xml:space=\"preserve\">\n    <value>Account utente bloccati</value>\n  </data>\n  <data name=\"My Account\" xml:space=\"preserve\">\n    <value>Il mio account</value>\n  </data>\n  <data name=\"Phone Number\" xml:space=\"preserve\">\n    <value>Telefono</value>\n  </data>\n  <data name=\"Use Invisible reCaptcha?\" xml:space=\"preserve\">\n    <value>Utilizza il reCaptcha invisibile?</value>\n  </data>\n  <data name=\"User Accounts Pending Approval\" xml:space=\"preserve\">\n    <value>Account utente in attesa di approvazione</value>\n  </data>\n  <data name=\"User Claims\" xml:space=\"preserve\">\n    <value>Claims utente</value>\n  </data>\n  <data name=\"User Info:\" xml:space=\"preserve\">\n    <value>Informazioni utente:</value>\n  </data>\n  <data name=\"User Roles\" xml:space=\"preserve\">\n    <value>Ruoli utente</value>\n  </data>\n  <data name=\"Website\" xml:space=\"preserve\">\n    <value>Sito web</value>\n  </data>\n  <data name=\"Working...\" xml:space=\"preserve\">\n    <value>Attendere prego</value>\n  </data>\n  <data name=\"If checked will show the blog categories in the side bar\" xml:space=\"preserve\">\n    <value>Se selezionato mostrerà le categorie del blog nella barra laterale</value>\n  </data>\n  <data name=\"If checked will show the blog archives in the side bar\" xml:space=\"preserve\">\n    <value>Se selezionato mostrerà gli archivi del blog nella barra laterale</value>\n  </data>\n  <data name=\"Show the blog categories in the side bar\" xml:space=\"preserve\">\n    <value>Mostra le categorie del blog nella barra laterale</value>\n  </data>\n  <data name=\"Show the blog archives in the side bar\" xml:space=\"preserve\">\n    <value>Mostra gli archivi del blog nella barra laterale</value>\n  </data>\n  <data name=\"Created By\" xml:space=\"preserve\">\n    <value>Creato da</value>\n  </data>\n  <data name=\"Last Updated\" xml:space=\"preserve\">\n    <value>Ultimo aggiornamento</value>\n  </data>\n  <data name=\"Updated\" xml:space=\"preserve\">\n    <value>Aggiornato</value>\n  </data>\n  <data name=\"Updated By\" xml:space=\"preserve\">\n    <value>Aggiornato da</value>\n  </data>\n  <data name=\"Show Created By\" xml:space=\"preserve\">\n    <value>Mostra Creato da</value>\n  </data>\n  <data name=\"Show Created Date\" xml:space=\"preserve\">\n    <value>Mostra data di creazione</value>\n  </data>\n  <data name=\"Show Last Modified By\" xml:space=\"preserve\">\n    <value>Mostra ultima modifica di</value>\n  </data>\n  <data name=\"Show Last Modified Date\" xml:space=\"preserve\">\n    <value>Mostra data ultima modifica</value>\n  </data>\n  <data name=\"Show / hide the following information below the main content of the page.\" xml:space=\"preserve\">\n    <value>Mostra/nascondi le seguenti informazioni sotto il contenuto principale della pagina.</value>\n  </data>\n  <data name=\"Show / hide the following information below the main content of pages (site default).\" xml:space=\"preserve\">\n    <value>Mostra/nascondi le seguenti informazioni sotto il contenuto principale delle pagine (impostazione predefinita del sito).</value>\n  </data>\n</root>"
  },
  {
    "path": "src/sourceDev.WebApp/GlobalResources/CloudscribeIds4Resources.en-US.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"A client is a piece of software that requests tokens from IdentityServer - either for authenticating a user or for accessing a resource (also often called a relying party or RP)\" xml:space=\"preserve\">\n    <value>A client is a piece of software that requests tokens from IdentityServer - either for authenticating a user or for accessing a resource (also often called a relying party or RP)</value>\n  </data>\n  <data name=\"Absolute Refresh Token Lifetime\" xml:space=\"preserve\">\n    <value>Absolute Refresh Token Lifetime</value>\n  </data>\n  <data name=\"Access Token Lifetime\" xml:space=\"preserve\">\n    <value>Access Token Lifetime</value>\n  </data>\n  <data name=\"Access Token Type\" xml:space=\"preserve\">\n    <value>Access Token Type</value>\n  </data>\n  <data name=\"Add\" xml:space=\"preserve\">\n    <value>Add</value>\n  </data>\n  <data name=\"Add Claim\" xml:space=\"preserve\">\n    <value>Add Claim</value>\n  </data>\n  <data name=\"Add Scope\" xml:space=\"preserve\">\n    <value>Add Scope</value>\n  </data>\n  <data name=\"Add Secret\" xml:space=\"preserve\">\n    <value>Add Secret</value>\n  </data>\n  <data name=\"Allow Access To All Scopes\" xml:space=\"preserve\">\n    <value>Allow Access To All Scopes</value>\n  </data>\n  <data name=\"Allow Access Tokens Via Browser\" xml:space=\"preserve\">\n    <value>Allow Access Tokens Via Browser</value>\n  </data>\n  <data name=\"Allow Remember Consent\" xml:space=\"preserve\">\n    <value>Allow Remember Consent</value>\n  </data>\n  <data name=\"Allowed CORS Origins\" xml:space=\"preserve\">\n    <value>Allowed CORS Origins</value>\n  </data>\n  <data name=\"Allowed Grant Types\" xml:space=\"preserve\">\n    <value>Allowed Grant Types</value>\n  </data>\n  <data name=\"Allowed Scopes\" xml:space=\"preserve\">\n    <value>Allowed Scopes</value>\n  </data>\n  <data name=\"Always Send Client Claims\" xml:space=\"preserve\">\n    <value>Always Send Client Claims</value>\n  </data>\n  <data name=\"API Resource already has a claim with that name.\" xml:space=\"preserve\">\n    <value>API Resource already has a claim with that name.</value>\n  </data>\n  <data name=\"API Resource already has a scope with that name.\" xml:space=\"preserve\">\n    <value>API Resource already has a scope with that name.</value>\n  </data>\n  <data name=\"API Resource already has a secret with that value.\" xml:space=\"preserve\">\n    <value>API Resource already has a secret with that value.</value>\n  </data>\n  <data name=\"API Resource Management\" xml:space=\"preserve\">\n    <value>API Resource Management</value>\n  </data>\n  <data name=\"API Resource name is already in use\" xml:space=\"preserve\">\n    <value>API Resource name is already in use</value>\n  </data>\n  <data name=\"API Resource not found\" xml:space=\"preserve\">\n    <value>API Resource not found</value>\n  </data>\n  <data name=\"API Resource scope already has a claim with that name.\" xml:space=\"preserve\">\n    <value>API Resource scope already has a claim with that name.</value>\n  </data>\n  <data name=\"API Resources identify web APIs (also called resource servers). To get access tokens for APIs, you need to register them.\" xml:space=\"preserve\">\n    <value>API Resources identify web APIs (also called resource servers). To get access tokens for APIs, you need to register them.</value>\n  </data>\n  <data name=\"Application Access\" xml:space=\"preserve\">\n    <value>Application Access</value>\n  </data>\n  <data name=\"Are you sure you want to delete {0}?\" xml:space=\"preserve\">\n    <value>Are you sure you want to delete {0}?</value>\n  </data>\n  <data name=\"Authorization Code Lifetime\" xml:space=\"preserve\">\n    <value>Authorization Code Lifetime</value>\n  </data>\n  <data name=\"Cancel\" xml:space=\"preserve\">\n    <value>Cancel</value>\n  </data>\n  <data name=\"Claims\" xml:space=\"preserve\">\n    <value>Claims</value>\n  </data>\n  <data name=\"Click &lt;a href='{0}'&gt;here&lt;/a&gt; to return to the&lt;span&gt;{1}&lt;/span&gt; application.\" xml:space=\"preserve\">\n    <value>Click &lt;a href='{0}'&gt;here&lt;/a&gt; to return to the&lt;span&gt;{1}&lt;/span&gt; application.</value>\n  </data>\n  <data name=\"Client already exists with that client id\" xml:space=\"preserve\">\n    <value>Client already exists with that client id</value>\n  </data>\n  <data name=\"Client already has a claim with that type and value.\" xml:space=\"preserve\">\n    <value>Client already has a claim with that type and value.</value>\n  </data>\n  <data name=\"Client already has a CORS Origin with that value.\" xml:space=\"preserve\">\n    <value>Client already has a CORS Origin with that value.</value>\n  </data>\n  <data name=\"Client already has a Grant Type with that value.\" xml:space=\"preserve\">\n    <value>Client already has a Grant Type with that value.</value>\n  </data>\n  <data name=\"Client already has a Logout Redirect Url with that value.\" xml:space=\"preserve\">\n    <value>Client already has a Logout Redirect Url with that value.</value>\n  </data>\n  <data name=\"Client already has a Redirect Uri with that value.\" xml:space=\"preserve\">\n    <value>Client already has a Redirect Uri with that value.</value>\n  </data>\n  <data name=\"Client already has a Restriction with that value.\" xml:space=\"preserve\">\n    <value>Client already has a Restriction with that value.</value>\n  </data>\n  <data name=\"Client already has a Scope with that value.\" xml:space=\"preserve\">\n    <value>Client already has a Scope with that value.</value>\n  </data>\n  <data name=\"Client already has a secret with that value.\" xml:space=\"preserve\">\n    <value>Client already has a secret with that value.</value>\n  </data>\n  <data name=\"Client Management\" xml:space=\"preserve\">\n    <value>Client Management</value>\n  </data>\n  <data name=\"Client not found\" xml:space=\"preserve\">\n    <value>Client not found</value>\n  </data>\n  <data name=\"Client Secrets\" xml:space=\"preserve\">\n    <value>Client Secrets</value>\n  </data>\n  <data name=\"Client Uri\" xml:space=\"preserve\">\n    <value>Client Uri</value>\n  </data>\n  <data name=\"CORS Origin\" xml:space=\"preserve\">\n    <value>CORS Origin</value>\n  </data>\n  <data name=\"Create\" xml:space=\"preserve\">\n    <value>Create</value>\n  </data>\n  <data name=\"Delete\" xml:space=\"preserve\">\n    <value>Delete</value>\n  </data>\n  <data name=\"Description\" xml:space=\"preserve\">\n    <value>Description</value>\n  </data>\n  <data name=\"Display Name\" xml:space=\"preserve\">\n    <value>Display Name</value>\n  </data>\n  <data name=\"Edit\" xml:space=\"preserve\">\n    <value>Edit</value>\n  </data>\n  <data name=\"Emphasize\" xml:space=\"preserve\">\n    <value>Emphasize</value>\n  </data>\n  <data name=\"Enable Local Login\" xml:space=\"preserve\">\n    <value>Enable Local Login</value>\n  </data>\n  <data name=\"Enabled\" xml:space=\"preserve\">\n    <value>Enabled</value>\n  </data>\n  <data name=\"Examples for clients are web applications, native mobile or desktop applications, SPAs, server processes etc.\" xml:space=\"preserve\">\n    <value>Examples for clients are web applications, native mobile or desktop applications, SPAs, server processes etc.</value>\n  </data>\n  <data name=\"Expiration\" xml:space=\"preserve\">\n    <value>Expiration</value>\n  </data>\n  <data name=\"First Page\" xml:space=\"preserve\">\n    <value>First Page</value>\n  </data>\n  <data name=\"Grant Type\" xml:space=\"preserve\">\n    <value>Grant Type</value>\n  </data>\n  <data name=\"Id\" xml:space=\"preserve\">\n    <value>Id</value>\n  </data>\n  <data name=\"Identity Resource already has a claim with that name.\" xml:space=\"preserve\">\n    <value>Identity Resource already has a claim with that name.</value>\n  </data>\n  <data name=\"Identity Resource Management\" xml:space=\"preserve\">\n    <value>Identity Resource Management</value>\n  </data>\n  <data name=\"Identity Resource name is already in use\" xml:space=\"preserve\">\n    <value>Identity Resource name is already in use</value>\n  </data>\n  <data name=\"Identity resources are data like user ID, name, or email address of a user. An identity resource has a unique name, and you can assign arbitrary claim types to it. These claims will then be included in the identity token for the user. The client will use the scope parameter to request access to an identity resource.\" xml:space=\"preserve\">\n    <value>Identity resources are data like user ID, name, or email address of a user. An identity resource has a unique name, and you can assign arbitrary claim types to it. These claims will then be included in the identity token for the user. The client will use the scope parameter to request access to an identity resource.</value>\n  </data>\n  <data name=\"Identity Token Lifetime\" xml:space=\"preserve\">\n    <value>Identity Token Lifetime</value>\n  </data>\n  <data name=\"Include Jwt Id\" xml:space=\"preserve\">\n    <value>Include Jwt Id</value>\n  </data>\n  <data name=\"Invalid request could not find scope claim with that name.\" xml:space=\"preserve\">\n    <value>Invalid request could not find scope claim with that name.</value>\n  </data>\n  <data name=\"Invalid request could not find scope with that name.\" xml:space=\"preserve\">\n    <value>Invalid request could not find scope with that name.</value>\n  </data>\n  <data name=\"Invalid request, API Resource claim not found.\" xml:space=\"preserve\">\n    <value>Invalid request, API Resource claim not found.</value>\n  </data>\n  <data name=\"Invalid request, API Resource not found.\" xml:space=\"preserve\">\n    <value>Invalid request, API Resource not found.</value>\n  </data>\n  <data name=\"Invalid request, API Resource scope claim not found.\" xml:space=\"preserve\">\n    <value>Invalid request, API Resource scope claim not found.</value>\n  </data>\n  <data name=\"Invalid request, API scope not found.\" xml:space=\"preserve\">\n    <value>Invalid request, API scope not found.</value>\n  </data>\n  <data name=\"Invalid request, API secret not found.\" xml:space=\"preserve\">\n    <value>Invalid request, API secret not found.</value>\n  </data>\n  <data name=\"Invalid request, Client not found.\" xml:space=\"preserve\">\n    <value>Invalid request, Client not found.</value>\n  </data>\n  <data name=\"Invalid request, CORS Origin not found.\" xml:space=\"preserve\">\n    <value>Invalid request, CORS Origin not found.</value>\n  </data>\n  <data name=\"Invalid request, Grant Type not found.\" xml:space=\"preserve\">\n    <value>Invalid request, Grant Type not found.</value>\n  </data>\n  <data name=\"Invalid request, Identity Resource claim not found.\" xml:space=\"preserve\">\n    <value>Invalid request, Identity Resource claim not found.</value>\n  </data>\n  <data name=\"Invalid request, Logout Redirect Url not found.\" xml:space=\"preserve\">\n    <value>Invalid request, Logout Redirect Url not found.</value>\n  </data>\n  <data name=\"Invalid request, Redirect Url not found.\" xml:space=\"preserve\">\n    <value>Invalid request, Redirect Url not found.</value>\n  </data>\n  <data name=\"Invalid request, Restriction not found.\" xml:space=\"preserve\">\n    <value>Invalid request, Restriction not found.</value>\n  </data>\n  <data name=\"Last Page\" xml:space=\"preserve\">\n    <value>Last Page</value>\n  </data>\n  <data name=\"Logo Uri\" xml:space=\"preserve\">\n    <value>Logo Uri</value>\n  </data>\n  <data name=\"Logout\" xml:space=\"preserve\">\n    <value>Logout</value>\n  </data>\n  <data name=\"Logout Session Required\" xml:space=\"preserve\">\n    <value>Logout Session Required</value>\n  </data>\n  <data name=\"Logout Uri\" xml:space=\"preserve\">\n    <value>Logout Uri</value>\n  </data>\n  <data name=\"Name\" xml:space=\"preserve\">\n    <value>Name</value>\n  </data>\n  <data name=\"New Api Resource\" xml:space=\"preserve\">\n    <value>New Api Resource</value>\n  </data>\n  <data name=\"New Client\" xml:space=\"preserve\">\n    <value>New Client</value>\n  </data>\n  <data name=\"Next page\" xml:space=\"preserve\">\n    <value>Next page</value>\n  </data>\n  <data name=\"No, Do Not Allow\" xml:space=\"preserve\">\n    <value>No, Do Not Allow</value>\n  </data>\n  <data name=\"Personal Information\" xml:space=\"preserve\">\n    <value>Personal Information</value>\n  </data>\n  <data name=\"Post Logout Redirect Urls\" xml:space=\"preserve\">\n    <value>Post Logout Redirect Urls</value>\n  </data>\n  <data name=\"Prefix Client Claims\" xml:space=\"preserve\">\n    <value>Prefix Client Claims</value>\n  </data>\n  <data name=\"Previous page\" xml:space=\"preserve\">\n    <value>Previous page</value>\n  </data>\n  <data name=\"Provider Restrictions\" xml:space=\"preserve\">\n    <value>Provider Restrictions</value>\n  </data>\n  <data name=\"Redirect Urls\" xml:space=\"preserve\">\n    <value>Redirect Urls</value>\n  </data>\n  <data name=\"Refresh Token Expiration\" xml:space=\"preserve\">\n    <value>Refresh Token Expiration</value>\n  </data>\n  <data name=\"Refresh Token Usage\" xml:space=\"preserve\">\n    <value>Refresh Token Usage</value>\n  </data>\n  <data name=\"Remember My Decision\" xml:space=\"preserve\">\n    <value>Remember My Decision</value>\n  </data>\n  <data name=\"Require Client Secret\" xml:space=\"preserve\">\n    <value>Require Client Secret</value>\n  </data>\n  <data name=\"Require Consent\" xml:space=\"preserve\">\n    <value>Require Consent</value>\n  </data>\n  <data name=\"Require Pkce\" xml:space=\"preserve\">\n    <value>Require Pkce</value>\n  </data>\n  <data name=\"Required\" xml:space=\"preserve\">\n    <value>Required</value>\n  </data>\n  <data name=\"Restriction\" xml:space=\"preserve\">\n    <value>Restriction</value>\n  </data>\n  <data name=\"Save\" xml:space=\"preserve\">\n    <value>Save</value>\n  </data>\n  <data name=\"Scope\" xml:space=\"preserve\">\n    <value>Scope</value>\n  </data>\n  <data name=\"Scopes\" xml:space=\"preserve\">\n    <value>Scopes</value>\n  </data>\n  <data name=\"Secrets\" xml:space=\"preserve\">\n    <value>Secrets</value>\n  </data>\n  <data name=\"Show In Discovery\" xml:space=\"preserve\">\n    <value>Show In Discovery</value>\n  </data>\n  <data name=\"Show In Discovery Document\" xml:space=\"preserve\">\n    <value>Show In Discovery Document</value>\n  </data>\n  <data name=\"Sliding Refresh Token Lifetime\" xml:space=\"preserve\">\n    <value>Sliding Refresh Token Lifetime</value>\n  </data>\n  <data name=\"The API Resource &lt;b&gt;{0}&lt;/b&gt; was successfully created.\" xml:space=\"preserve\">\n    <value>The API Resource &lt;b&gt;{0}&lt;/b&gt; was successfully created.</value>\n  </data>\n  <data name=\"The API Resource &lt;b&gt;{0}&lt;/b&gt; was successfully updated.\" xml:space=\"preserve\">\n    <value>The API Resource &lt;b&gt;{0}&lt;/b&gt; was successfully updated.</value>\n  </data>\n  <data name=\"The Claim &lt;b&gt;{0}&lt;/b&gt; was successfully added.\" xml:space=\"preserve\">\n    <value>The Claim &lt;b&gt;{0}&lt;/b&gt; was successfully added.</value>\n  </data>\n  <data name=\"The Claim &lt;b&gt;{0}&lt;/b&gt; was successfully removed.\" xml:space=\"preserve\">\n    <value>The Claim &lt;b&gt;{0}&lt;/b&gt; was successfully removed.</value>\n  </data>\n  <data name=\"The Client &lt;b&gt;{0}&lt;/b&gt; was successfully Created.\" xml:space=\"preserve\">\n    <value>The Client &lt;b&gt;{0}&lt;/b&gt; was successfully Created.</value>\n  </data>\n  <data name=\"The Client &lt;b&gt;{0}&lt;/b&gt; was successfully updated.\" xml:space=\"preserve\">\n    <value>The Client &lt;b&gt;{0}&lt;/b&gt; was successfully updated.</value>\n  </data>\n  <data name=\"The CORS Origin field is required.\" xml:space=\"preserve\">\n    <value>The CORS Origin field is required.</value>\n  </data>\n  <data name=\"The CORS Origin was successfully added.\" xml:space=\"preserve\">\n    <value>The CORS Origin was successfully added.</value>\n  </data>\n  <data name=\"The CORS Origin was successfully removed.\" xml:space=\"preserve\">\n    <value>The CORS Origin was successfully removed.</value>\n  </data>\n  <data name=\"The Grant Type field is required.\" xml:space=\"preserve\">\n    <value>The Grant Type field is required.</value>\n  </data>\n  <data name=\"The Grant Type was successfully added.\" xml:space=\"preserve\">\n    <value>The Grant Type was successfully added.</value>\n  </data>\n  <data name=\"The Grant Type was successfully removed.\" xml:space=\"preserve\">\n    <value>The Grant Type was successfully removed.</value>\n  </data>\n  <data name=\"The Identity Resource &lt;b&gt;{0}&lt;/b&gt; was successfully Created.\" xml:space=\"preserve\">\n    <value>The Identity Resource &lt;b&gt;{0}&lt;/b&gt; was successfully Created.</value>\n  </data>\n  <data name=\"The Identity Resource &lt;b&gt;{0}&lt;/b&gt; was successfully updated.\" xml:space=\"preserve\">\n    <value>The Identity Resource &lt;b&gt;{0}&lt;/b&gt; was successfully updated.</value>\n  </data>\n  <data name=\"The Logout Redirect Url was successfully added.\" xml:space=\"preserve\">\n    <value>The Logout Redirect Url was successfully added.</value>\n  </data>\n  <data name=\"The Logout Redirect Url was successfully removed.\" xml:space=\"preserve\">\n    <value>The Logout Redirect Url was successfully removed.</value>\n  </data>\n  <data name=\"The Redirect Uri was successfully added.\" xml:space=\"preserve\">\n    <value>The Redirect Uri was successfully added.</value>\n  </data>\n  <data name=\"The Redirect Url was successfully removed.\" xml:space=\"preserve\">\n    <value>The Redirect Url was successfully removed.</value>\n  </data>\n  <data name=\"The Restriction was successfully added.\" xml:space=\"preserve\">\n    <value>The Restriction was successfully added.</value>\n  </data>\n  <data name=\"The Restriction was successfully removed.\" xml:space=\"preserve\">\n    <value>The Restriction was successfully removed.</value>\n  </data>\n  <data name=\"The Scope Claim &lt;b&gt;{0}&lt;/b&gt; was successfully added.\" xml:space=\"preserve\">\n    <value>The Scope Claim &lt;b&gt;{0}&lt;/b&gt; was successfully added.</value>\n  </data>\n  <data name=\"The Scope Claim &lt;b&gt;{0}&lt;/b&gt; was successfully removed.\" xml:space=\"preserve\">\n    <value>The Scope Claim &lt;b&gt;{0}&lt;/b&gt; was successfully removed.</value>\n  </data>\n  <data name=\"The Scope field is required.\" xml:space=\"preserve\">\n    <value>The Scope field is required.</value>\n  </data>\n  <data name=\"The Scope was successfully added.\" xml:space=\"preserve\">\n    <value>The Scope was successfully added.</value>\n  </data>\n  <data name=\"The Scope was successfully removed.\" xml:space=\"preserve\">\n    <value>The Scope was successfully removed.</value>\n  </data>\n  <data name=\"The Secret was successfully added.\" xml:space=\"preserve\">\n    <value>The Secret was successfully added.</value>\n  </data>\n  <data name=\"The Secret was successfully removed.\" xml:space=\"preserve\">\n    <value>The Secret was successfully removed.</value>\n  </data>\n  <data name=\"The Type field is required.\" xml:space=\"preserve\">\n    <value>The Type field is required.</value>\n  </data>\n  <data name=\"The Url field is required.\" xml:space=\"preserve\">\n    <value>The Url field is required.</value>\n  </data>\n  <data name=\"The Value field is required.\" xml:space=\"preserve\">\n    <value>The Value field is required.</value>\n  </data>\n  <data name=\"Type\" xml:space=\"preserve\">\n    <value>Type</value>\n  </data>\n  <data name=\"Uncheck the permissions you do not wish to grant.\" xml:space=\"preserve\">\n    <value>Uncheck the permissions you do not wish to grant.</value>\n  </data>\n  <data name=\"Update Access Token Claims On Refresh\" xml:space=\"preserve\">\n    <value>Update Access Token Claims On Refresh</value>\n  </data>\n  <data name=\"Url\" xml:space=\"preserve\">\n    <value>Url</value>\n  </data>\n  <data name=\"Value\" xml:space=\"preserve\">\n    <value>Value</value>\n  </data>\n  <data name=\"Would you like to logout of IdentityServer?\" xml:space=\"preserve\">\n    <value>Would you like to logout of IdentityServer?</value>\n  </data>\n  <data name=\"Yes\" xml:space=\"preserve\">\n    <value>Yes</value>\n  </data>\n  <data name=\"Yes, Allow\" xml:space=\"preserve\">\n    <value>Yes, Allow</value>\n  </data>\n  <data name=\"You are now logged out\" xml:space=\"preserve\">\n    <value>You are now logged out</value>\n  </data>\n  <data name=\"You must pick at least one permission.\" xml:space=\"preserve\">\n    <value>You must pick at least one permission.</value>\n  </data>\n  <data name=\"{0} - API Resource Management\" xml:space=\"preserve\">\n    <value>{0} - API Resource Management</value>\n  </data>\n  <data name=\"{0} - Client Management\" xml:space=\"preserve\">\n    <value>{0} - Client Management</value>\n  </data>\n  <data name=\"{0} - Edit API Resource\" xml:space=\"preserve\">\n    <value>{0} - Edit API Resource</value>\n  </data>\n  <data name=\"{0} - Edit Client\" xml:space=\"preserve\">\n    <value>{0} - Edit Client</value>\n  </data>\n  <data name=\"{0} - Edit Identity Resource\" xml:space=\"preserve\">\n    <value>{0} - Edit Identity Resource</value>\n  </data>\n  <data name=\"{0} - Identity Resource Management\" xml:space=\"preserve\">\n    <value>{0} - Identity Resource Management</value>\n  </data>\n  <data name=\"{0} - New API Resource\" xml:space=\"preserve\">\n    <value>{0} - New API Resource</value>\n  </data>\n  <data name=\"{0} - New Client\" xml:space=\"preserve\">\n    <value>{0} - New Client</value>\n  </data>\n  <data name=\"{0} - New Identity Resource\" xml:space=\"preserve\">\n    <value>{0} - New Identity Resource</value>\n  </data>\n  <data name=\"{0} &lt;small&gt;is requesting your permission&lt;/small&gt;\" xml:space=\"preserve\">\n    <value>{0} &lt;small&gt;is requesting your permission&lt;/small&gt;</value>\n  </data>\n  <data name=\"Always Include User Claims In Id Token\" xml:space=\"preserve\">\n    <value>Always Include User Claims In Id Token</value>\n  </data>\n  <data name=\"Client Claims Prefix\" xml:space=\"preserve\">\n    <value>Client Claims Prefix</value>\n  </data>\n  <data name=\"Pairwise Subject Salt\" xml:space=\"preserve\">\n    <value>Pairwise Subject Salt</value>\n  </data>\n  <data name=\"Client already has a property with that key, to change a proprty you must delete it and then add it back with the new value.\" xml:space=\"preserve\">\n    <value>Client already has a property with that key, to change a proprty you must delete it and then add it back with the new value.</value>\n  </data>\n  <data name=\"Invalid request, client property not found.\" xml:space=\"preserve\">\n    <value>Invalid request, client property not found.</value>\n  </data>\n  <data name=\"The property &lt;b&gt;{0}&lt;/b&gt; was successfully added.\" xml:space=\"preserve\">\n    <value>The property &lt;b&gt;{0}&lt;/b&gt; was successfully added.</value>\n  </data>\n  <data name=\"The property &lt;b&gt;{0}&lt;/b&gt; was successfully removed.\" xml:space=\"preserve\">\n    <value>The property &lt;b&gt;{0}&lt;/b&gt; was successfully removed.</value>\n  </data>\n  <data name=\"Custom Properties\" xml:space=\"preserve\">\n    <value>Custom Properties</value>\n  </data>\n  <data name=\"Key\" xml:space=\"preserve\">\n    <value>Key</value>\n  </data>\n  <data name=\"Apply Sha256 Hash\" xml:space=\"preserve\">\n    <value>Apply Sha256 Hash</value>\n  </data>\n  <data name=\"Apply Sha512 Hash\" xml:space=\"preserve\">\n    <value>Apply Sha512 Hash</value>\n  </data>\n  <data name=\"Don't Hash\" xml:space=\"preserve\">\n    <value>Don't Hash</value>\n  </data>\n</root>"
  },
  {
    "path": "src/sourceDev.WebApp/GlobalResources/CloudscribeIds4Resources.fr-FR.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"API Resource Management\" xml:space=\"preserve\">\n    <value>Gestion des ressources API</value>\n  </data>\n</root>"
  },
  {
    "path": "src/sourceDev.WebApp/GlobalResources/MenuResources.fr-FR.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"About\" xml:space=\"preserve\">\n    <value>Sur</value>\n  </data>\n  <data name=\"Administration\" xml:space=\"preserve\">\n    <value>Administration</value>\n  </data>\n  <data name=\"API Clients\" xml:space=\"preserve\">\n    <value>Clients API</value>\n  </data>\n  <data name=\"API Resources\" xml:space=\"preserve\">\n    <value>Ressources API</value>\n  </data>\n  <data name=\"Captcha Settings\" xml:space=\"preserve\">\n    <value>Paramètres Captcha</value>\n  </data>\n  <data name=\"Company Info\" xml:space=\"preserve\">\n    <value>Information d'entreprise</value>\n  </data>\n  <data name=\"Contact\" xml:space=\"preserve\">\n    <value>Contact</value>\n  </data>\n  <data name=\"Core Data\" xml:space=\"preserve\">\n    <value>Données de base</value>\n  </data>\n  <data name=\"Country State Administration\" xml:space=\"preserve\">\n    <value>Administration nationale du pays</value>\n  </data>\n  <data name=\"Domain Mappings\" xml:space=\"preserve\">\n    <value>Mappages de domaine</value>\n  </data>\n  <data name=\"Edit API Resource\" xml:space=\"preserve\">\n    <value>Modifier la ressource API</value>\n  </data>\n  <data name=\"Edit Client\" xml:space=\"preserve\">\n    <value>Modifier le client</value>\n  </data>\n  <data name=\"Edit Identity Resource\" xml:space=\"preserve\">\n    <value>Modifier la ressource d'identité</value>\n  </data>\n  <data name=\"Email Settings\" xml:space=\"preserve\">\n    <value>Paramètres de messagerie</value>\n  </data>\n  <data name=\"General\" xml:space=\"preserve\">\n    <value>Général</value>\n  </data>\n  <data name=\"Home\" xml:space=\"preserve\">\n    <value>Accueil</value>\n  </data>\n  <data name=\"Identity Resources\" xml:space=\"preserve\">\n    <value>Ressources d'identité</value>\n  </data>\n  <data name=\"IpSearch\" xml:space=\"preserve\">\n    <value>IpSearch</value>\n  </data>\n  <data name=\"Locked Users\" xml:space=\"preserve\">\n    <value>Utilisateurs verrouillés</value>\n  </data>\n  <data name=\"Login Page Info\" xml:space=\"preserve\">\n    <value>Info de la page de connexion</value>\n  </data>\n  <data name=\"New API Resource\" xml:space=\"preserve\">\n    <value>Nouvelle ressource API</value>\n  </data>\n  <data name=\"New Client\" xml:space=\"preserve\">\n    <value>Nouveau client</value>\n  </data>\n  <data name=\"New Country\" xml:space=\"preserve\">\n    <value>Nouveau pays</value>\n  </data>\n  <data name=\"New Identity Resource\" xml:space=\"preserve\">\n    <value>Nouvelle ressource d'identité</value>\n  </data>\n  <data name=\"New Role\" xml:space=\"preserve\">\n    <value>Nouveau rôle</value>\n  </data>\n  <data name=\"New Site\" xml:space=\"preserve\">\n    <value>Nouveau site</value>\n  </data>\n  <data name=\"New State\" xml:space=\"preserve\">\n    <value>État nouveau</value>\n  </data>\n  <data name=\"New User\" xml:space=\"preserve\">\n    <value>Nouvel utilisateur</value>\n  </data>\n  <data name=\"Register Page Info\" xml:space=\"preserve\">\n    <value>Inscrivez-vous à la page</value>\n  </data>\n  <data name=\"Role Management\" xml:space=\"preserve\">\n    <value>Gestion des rôles</value>\n  </data>\n  <data name=\"Role Members\" xml:space=\"preserve\">\n    <value>Membres du rôle</value>\n  </data>\n  <data name=\"Security Settings\" xml:space=\"preserve\">\n    <value>Les paramètres de sécurité</value>\n  </data>\n  <data name=\"Site List\" xml:space=\"preserve\">\n    <value>Liste du site</value>\n  </data>\n  <data name=\"Site Settings\" xml:space=\"preserve\">\n    <value>Paramètres du site</value>\n  </data>\n  <data name=\"SMS Settings\" xml:space=\"preserve\">\n    <value>Paramètres SMS</value>\n  </data>\n  <data name=\"Social Logins\" xml:space=\"preserve\">\n    <value>Logins sociaux</value>\n  </data>\n  <data name=\"States\" xml:space=\"preserve\">\n    <value>États</value>\n  </data>\n  <data name=\"System Information\" xml:space=\"preserve\">\n    <value>Informations sur le système</value>\n  </data>\n  <data name=\"System Log\" xml:space=\"preserve\">\n    <value>Journal du système</value>\n  </data>\n  <data name=\"Un-Approved Users\" xml:space=\"preserve\">\n    <value>Utilisateurs non approuvés</value>\n  </data>\n  <data name=\"User List\" xml:space=\"preserve\">\n    <value>liste d'utilisateur</value>\n  </data>\n  <data name=\"User Management\" xml:space=\"preserve\">\n    <value>Gestion des utilisateurs</value>\n  </data>\n  <data name=\"User Search\" xml:space=\"preserve\">\n    <value>Recherche d'utilisateur</value>\n  </data>\n  <data name=\"Content History\" xml:space=\"preserve\">\n    <value>Histoire du contenu</value>\n  </data>\n  <data name=\"Content Settings\" xml:space=\"preserve\">\n    <value>Paramètres de contenu</value>\n  </data>\n  <data name=\"File Manager\" xml:space=\"preserve\">\n    <value>Gestionnaire de fichiers</value>\n  </data>\n  <data name=\"Page Management\" xml:space=\"preserve\">\n    <value>Gestion de page</value>\n  </data>\n  <data name=\"Privacy Settings\" xml:space=\"preserve\">\n    <value>Paramètres de confidentialité</value>\n  </data>\n</root>"
  },
  {
    "path": "src/sourceDev.WebApp/GlobalResources/MenuResources.it-IT.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Administration\" xml:space=\"preserve\">\n    <value>Amministrazione</value>\n  </data>\n  <data name=\"API Clients\" xml:space=\"preserve\">\n    <value>API Clients</value>\n  </data>\n  <data name=\"API Resources\" xml:space=\"preserve\">\n    <value>API Resources</value>\n  </data>\n  <data name=\"Captcha Settings\" xml:space=\"preserve\">\n    <value>Impostazioni captcha</value>\n  </data>\n  <data name=\"Company Info\" xml:space=\"preserve\">\n    <value>Informazioni sulla società</value>\n  </data>\n  <data name=\"Contact\" xml:space=\"preserve\">\n    <value>Contatto</value>\n  </data>\n  <data name=\"Core Data\" xml:space=\"preserve\">\n    <value>Dati del sito</value>\n  </data>\n  <data name=\"Country State Administration\" xml:space=\"preserve\">\n    <value>Amministrazione nazioni</value>\n  </data>\n  <data name=\"Domain Mappings\" xml:space=\"preserve\">\n    <value>Mapping domini</value>\n  </data>\n  <data name=\"Edit API Resource\" xml:space=\"preserve\">\n    <value>Modifica risorse API</value>\n  </data>\n  <data name=\"Edit Client\" xml:space=\"preserve\">\n    <value>Modifica Client</value>\n  </data>\n  <data name=\"Edit Identity Resource\" xml:space=\"preserve\">\n    <value>Modifica risorse Identity</value>\n  </data>\n  <data name=\"Email Settings\" xml:space=\"preserve\">\n    <value>Impostazioni email</value>\n  </data>\n  <data name=\"General\" xml:space=\"preserve\">\n    <value>Generale</value>\n  </data>\n  <data name=\"Home\" xml:space=\"preserve\">\n    <value>Home</value>\n  </data>\n  <data name=\"Identity Resources\" xml:space=\"preserve\">\n    <value>Risorse Identity</value>\n  </data>\n  <data name=\"IpSearch\" xml:space=\"preserve\">\n    <value>Ricerca IP</value>\n  </data>\n  <data name=\"Locked Users\" xml:space=\"preserve\">\n    <value>Utenti bloccati</value>\n  </data>\n  <data name=\"Login Page Info\" xml:space=\"preserve\">\n    <value>Info pagina di login</value>\n  </data>\n  <data name=\"New API Resource\" xml:space=\"preserve\">\n    <value>Nuova risorsa API</value>\n  </data>\n  <data name=\"New Client\" xml:space=\"preserve\">\n    <value>Nuovo Client</value>\n  </data>\n  <data name=\"New Country\" xml:space=\"preserve\">\n    <value>Nuova nazione</value>\n  </data>\n  <data name=\"New Identity Resource\" xml:space=\"preserve\">\n    <value>Nuova risorsa Identity</value>\n  </data>\n  <data name=\"New Role\" xml:space=\"preserve\">\n    <value>Nuovo ruolo</value>\n  </data>\n  <data name=\"New Site\" xml:space=\"preserve\">\n    <value>Nuovo sito</value>\n  </data>\n  <data name=\"New State\" xml:space=\"preserve\">\n    <value>Nuova provincia</value>\n  </data>\n  <data name=\"New User\" xml:space=\"preserve\">\n    <value>Nuovo utente</value>\n  </data>\n  <data name=\"Register Page Info\" xml:space=\"preserve\">\n    <value>Info pagina di registrazione</value>\n  </data>\n  <data name=\"Role Management\" xml:space=\"preserve\">\n    <value>Gestione ruoli</value>\n  </data>\n  <data name=\"Role Members\" xml:space=\"preserve\">\n    <value>Membri del ruolo</value>\n  </data>\n  <data name=\"Security Settings\" xml:space=\"preserve\">\n    <value>Impostazioni di sicurezza</value>\n  </data>\n  <data name=\"Site List\" xml:space=\"preserve\">\n    <value>Lista siti</value>\n  </data>\n  <data name=\"Site Settings\" xml:space=\"preserve\">\n    <value>Impostazioni sito</value>\n  </data>\n  <data name=\"SMS Settings\" xml:space=\"preserve\">\n    <value>Impostazioni SMS</value>\n  </data>\n  <data name=\"Social Logins\" xml:space=\"preserve\">\n    <value>Login social</value>\n  </data>\n  <data name=\"States\" xml:space=\"preserve\">\n    <value>Province</value>\n  </data>\n  <data name=\"System Information\" xml:space=\"preserve\">\n    <value>Imformazioni di sistema</value>\n  </data>\n  <data name=\"System Log\" xml:space=\"preserve\">\n    <value>Log di sistema</value>\n  </data>\n  <data name=\"Un-Approved Users\" xml:space=\"preserve\">\n    <value>Utenti non approvati</value>\n  </data>\n  <data name=\"User List\" xml:space=\"preserve\">\n    <value>Lista utenti</value>\n  </data>\n  <data name=\"User Management\" xml:space=\"preserve\">\n    <value>Gestione utenti</value>\n  </data>\n  <data name=\"User Search\" xml:space=\"preserve\">\n    <value>Ricerca utenti</value>\n  </data>\n  <data name=\"About\" xml:space=\"preserve\">\n    <value>Info</value>\n  </data>\n  <data name=\"Change Password\" xml:space=\"preserve\">\n    <value>Cambia password</value>\n  </data>\n  <data name=\"Personal Data\" xml:space=\"preserve\">\n    <value>Dati personali</value>\n  </data>\n  <data name=\"Two Factor Authentication\" xml:space=\"preserve\">\n    <value>Autenticazione a due fattori</value>\n  </data>\n  <data name=\"User Info\" xml:space=\"preserve\">\n    <value>Info utente</value>\n  </data>\n  <data name=\"Content History\" xml:space=\"preserve\">\n    <value>Cronologia contenuti</value>\n  </data>\n  <data name=\"Content Settings\" xml:space=\"preserve\">\n    <value>Impostazioni contenuti</value>\n  </data>\n  <data name=\"Page Management\" xml:space=\"preserve\">\n    <value>Gestione pagine</value>\n  </data>\n  <data name=\"Privacy Settings\" xml:space=\"preserve\">\n    <value>Impostazioni privacy</value>\n  </data>\n</root>"
  },
  {
    "path": "src/sourceDev.WebApp/GlobalResources/QueryToolResources.cy.resx",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!--\n    Microsoft ResX Schema\n\n    Version 2.0\n\n    The primary goals of this format is to allow a simple XML format\n    that is mostly human readable. The generation and parsing of the\n    various data types are done through the TypeConverter classes\n    associated with the data types.\n\n    Example:\n\n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n\n    There are any number of \"resheader\" rows that contain simple\n    name/value pairs.\n\n    Each data row contains a name, and value. The row also contains a\n    type or mimetype. Type corresponds to a .NET class that support\n    text/value conversion through the TypeConverter architecture.\n    Classes that don't support this are serialized and stored with the\n    mimetype set.\n\n    The mimetype is used for serialized objects, and tells the\n    ResXResourceReader how to depersist the object. This is currently not\n    extensible. For a given mimetype the value must be set accordingly:\n\n    Note - application/x-microsoft.net.object.binary.base64 is the format\n    that the ResXResourceWriter will generate, however the reader can\n    read any of the formats listed below.\n\n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with\n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with\n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array\n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Are you sure you want to delete the selected saved query?\" xml:space=\"preserve\">\n    <value>Ydych chi'n siŵr eich bod am ddileu'r ymholiad sydd wedi'i gadw a ddewiswyd?</value>\n  </data>\n  <data name=\"Cancel\" xml:space=\"preserve\">\n    <value>Canslo</value>\n  </data>\n  <data name=\"Check to enable this query to be run via the QueryTool API.\" xml:space=\"preserve\">\n    <value>Gwiriwch i alluogi rhedeg yr ymholiad hwn trwy'r API QueryTool.</value>\n  </data>\n  <data name=\"Choose a table name from the list\" xml:space=\"preserve\">\n    <value>Dewiswch enw tabl o'r rhestr</value>\n  </data>\n  <data name=\"Choose one or more column names from the list. Control and click to select multiple items.\" xml:space=\"preserve\">\n    <value>Dewiswch un neu fwy o enwau colofnau o'r rhestr. Rheoli a chlicio i ddewis eitemau lluosog.</value>\n  </data>\n  <data name=\"Clear Query\" xml:space=\"preserve\">\n    <value>Clirio Ymholiad</value>\n  </data>\n  <data name=\"Close\" xml:space=\"preserve\">\n    <value>Cau</value>\n  </data>\n  <data name=\"Columns\" xml:space=\"preserve\">\n    <value>Colofnau</value>\n  </data>\n  <data name=\"Confirm Delete\" xml:space=\"preserve\">\n    <value>Cadarnhau Dileu</value>\n  </data>\n  <data name=\"Delete\" xml:space=\"preserve\">\n    <value>Dileu</value>\n  </data>\n  <data name=\"Delete Saved Query\" xml:space=\"preserve\">\n    <value>Dileu Ymholiad Wedi'i Gadw</value>\n  </data>\n  <data name=\"Enable as API query?\" xml:space=\"preserve\">\n    <value>Galluogi fel ymholiad API?</value>\n  </data>\n  <data name=\"Enter a name for the query to save it for later use\" xml:space=\"preserve\">\n    <value>Rhowch enw ar gyfer yr ymholiad i'w gadw i'w ddefnyddio'n ddiweddarach</value>\n  </data>\n  <data name=\"Error deleting query\" xml:space=\"preserve\">\n    <value>Gwall wrth ddileu ymholiad</value>\n  </data>\n  <data name=\"Error loading query\" xml:space=\"preserve\">\n    <value>Gwall wrth lwytho'r ymholiad</value>\n  </data>\n  <data name=\"Error saving query\" xml:space=\"preserve\">\n    <value>Gwall wrth gadw ymholiad</value>\n  </data>\n  <data name=\"Execute Query\" xml:space=\"preserve\">\n    <value>Gweithredu Ymholiad</value>\n  </data>\n  <data name=\"Export CSV\" xml:space=\"preserve\">\n    <value>Allforio CSV</value>\n  </data>\n  <data name=\"Export results to CSV file\" xml:space=\"preserve\">\n    <value>Allforio canlyniadau i ffeil CSV</value>\n  </data>\n  <data name=\"For the full instructions see the {0}Query Tool Documentation{1}.\" xml:space=\"preserve\">\n    <value>Am y cyfarwyddiadau llawn gweler y {0}Dogfennaeth Offeryn Ymholiad{1}.</value>\n  </data>\n  <data name=\"Generate a DELETE statement for the selected table\" xml:space=\"preserve\">\n    <value>Cynhyrchu datganiad DELETE ar gyfer y tabl a ddewiswyd</value>\n  </data>\n  <data name=\"Generate a SELECT statement for the selected table and columns\" xml:space=\"preserve\">\n    <value>Cynhyrchu datganiad SELECT ar gyfer y tabl a'r colofnau a ddewiswyd</value>\n  </data>\n  <data name=\"Generate an INSERT statement for the selected table and columns\" xml:space=\"preserve\">\n    <value>Cynhyrchwch ddatganiad INSERT ar gyfer y tabl a'r colofnau a ddewiswyd</value>\n  </data>\n  <data name=\"Generate an UPDATE statement for the selected table and columns\" xml:space=\"preserve\">\n    <value>Cynhyrchu datganiad UPDATE ar gyfer y tabl a'r colofnau a ddewiswyd</value>\n  </data>\n  <data name=\"Insert\" xml:space=\"preserve\">\n    <value>Mewnosod</value>\n  </data>\n  <data name=\"Insert at Cursor\" xml:space=\"preserve\">\n    <value>Mewnosod yn Cursor</value>\n  </data>\n  <data name=\"Insert column names into Query at current cursor position\" xml:space=\"preserve\">\n    <value>Mewnosod enwau colofnau yn Ymholiad yn y safle cyrchwr cyfredol</value>\n  </data>\n  <data name=\"Insert table name into Query at current cursor position\" xml:space=\"preserve\">\n    <value>Mewnosod enw tabl yn Ymholiad yn y safle cyrchwr presennol</value>\n  </data>\n  <data name=\"Invalid query! Only SELECT, INSERT, UPDATE, and DELETE are allowed.\" xml:space=\"preserve\">\n    <value>Ymholiad annilys! Dim ond SELECT, INSERT, UPDATE, a DELETE a ganiateir.</value>\n  </data>\n  <data name=\"Load Saved Query\" xml:space=\"preserve\">\n    <value>Llwyth Ymholiad Cadw</value>\n  </data>\n  <data name=\"Query\" xml:space=\"preserve\">\n    <value>Ymholiad</value>\n  </data>\n  <data name=\"Query Tool\" xml:space=\"preserve\">\n    <value>Offeryn Ymholiad</value>\n  </data>\n  <data name=\"Query deleted\" xml:space=\"preserve\">\n    <value>Ymholiad wedi'i ddileu</value>\n  </data>\n  <data name=\"Query loaded\" xml:space=\"preserve\">\n    <value>Ymholiad wedi'i lwytho</value>\n  </data>\n  <data name=\"Query saved\" xml:space=\"preserve\">\n    <value>Ymholiad wedi'i gadw</value>\n  </data>\n  <data name=\"Save Query\" xml:space=\"preserve\">\n    <value>Cadw Ymholiad</value>\n  </data>\n  <data name=\"Save Query As\" xml:space=\"preserve\">\n    <value>Cadw Ymholiad Fel</value>\n  </data>\n  <data name=\"Saved Queries\" xml:space=\"preserve\">\n    <value>Ymholiadau wedi'u Cadw</value>\n  </data>\n  <data name=\"Select\" xml:space=\"preserve\">\n    <value>Dewiswch</value>\n  </data>\n  <data name=\"Select a saved query to load it into the query editor\" xml:space=\"preserve\">\n    <value>Dewiswch ymholiad sydd wedi'i gadw i'w lwytho i mewn i olygydd yr ymholiad</value>\n  </data>\n  <data name=\"Tables\" xml:space=\"preserve\">\n    <value>Byrddau</value>\n  </data>\n  <data name=\"This tool allows you to query your database using SQL. You can create SQL statements for common operations such as SELECT, INSERT, UPDATE and DELETE. The tool can automatically generate the SQL for you based on the table and columns you select. You can also save your queries for later use.\" xml:space=\"preserve\">\n    <value>Mae'r offeryn hwn yn caniatáu ichi gwestiynu'ch cronfa ddata gan ddefnyddio SQL. Gallwch greu datganiadau SQL ar gyfer gweithrediadau cyffredin fel SELECT, INSERT, UPDATE a DELETE. Gall yr offeryn gynhyrchu'r SQL yn awtomatig i chi yn seiliedig ar y tabl a'r colofnau a ddewiswch. Gallwch hefyd arbed eich ymholiadau i'w defnyddio'n ddiweddarach.</value>\n  </data>\n  <data name=\"Update\" xml:space=\"preserve\">\n    <value>Diweddariad</value>\n  </data>\n  <data name=\"Write your SQL query here\" xml:space=\"preserve\">\n    <value>Ysgrifennwch eich ymholiad SQL yma</value>\n  </data>\n  <data name=\"You must select at least one column from the 'Columns' list!\" xml:space=\"preserve\">\n    <value>Rhaid dewis o leiaf un golofn o'r rhestr 'Colofnau'!</value>\n  </data>\n  <data name=\"{0} rows affected\" xml:space=\"preserve\">\n    <value>{0} rhes wedi'u heffeithio</value>\n  </data>\n</root>\n"
  },
  {
    "path": "src/sourceDev.WebApp/GlobalResources/QueryToolResources.de.resx",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!--\n    Microsoft ResX Schema\n\n    Version 2.0\n\n    The primary goals of this format is to allow a simple XML format\n    that is mostly human readable. The generation and parsing of the\n    various data types are done through the TypeConverter classes\n    associated with the data types.\n\n    Example:\n\n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n\n    There are any number of \"resheader\" rows that contain simple\n    name/value pairs.\n\n    Each data row contains a name, and value. The row also contains a\n    type or mimetype. Type corresponds to a .NET class that support\n    text/value conversion through the TypeConverter architecture.\n    Classes that don't support this are serialized and stored with the\n    mimetype set.\n\n    The mimetype is used for serialized objects, and tells the\n    ResXResourceReader how to depersist the object. This is currently not\n    extensible. For a given mimetype the value must be set accordingly:\n\n    Note - application/x-microsoft.net.object.binary.base64 is the format\n    that the ResXResourceWriter will generate, however the reader can\n    read any of the formats listed below.\n\n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with\n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with\n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array\n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Are you sure you want to delete the selected saved query?\" xml:space=\"preserve\">\n    <value>Möchten Sie die ausgewählte gespeicherte Abfrage wirklich löschen?</value>\n  </data>\n  <data name=\"Cancel\" xml:space=\"preserve\">\n    <value>Stornieren</value>\n  </data>\n  <data name=\"Check to enable this query to be run via the QueryTool API.\" xml:space=\"preserve\">\n    <value>Aktivieren Sie diese Option, damit diese Abfrage über die QueryTool-API ausgeführt werden kann.</value>\n  </data>\n  <data name=\"Choose a table name from the list\" xml:space=\"preserve\">\n    <value>Wählen Sie einen Tabellennamen aus der Liste aus</value>\n  </data>\n  <data name=\"Choose one or more column names from the list. Control and click to select multiple items.\" xml:space=\"preserve\">\n    <value>Wählen Sie einen oder mehrere Spaltennamen aus der Liste aus. Steuern und klicken Sie, um mehrere Elemente auszuwählen.</value>\n  </data>\n  <data name=\"Clear Query\" xml:space=\"preserve\">\n    <value>Abfrage löschen</value>\n  </data>\n  <data name=\"Close\" xml:space=\"preserve\">\n    <value>Schließen</value>\n  </data>\n  <data name=\"Columns\" xml:space=\"preserve\">\n    <value>Säulen</value>\n  </data>\n  <data name=\"Confirm Delete\" xml:space=\"preserve\">\n    <value>Löschen bestätigen</value>\n  </data>\n  <data name=\"Delete\" xml:space=\"preserve\">\n    <value>Löschen</value>\n  </data>\n  <data name=\"Delete Saved Query\" xml:space=\"preserve\">\n    <value>Gespeicherte Abfrage löschen</value>\n  </data>\n  <data name=\"Enable as API query?\" xml:space=\"preserve\">\n    <value>Als API-Abfrage aktivieren?</value>\n  </data>\n  <data name=\"Enter a name for the query to save it for later use\" xml:space=\"preserve\">\n    <value>Geben Sie einen Namen für die Abfrage ein, um sie zur späteren Verwendung zu speichern</value>\n  </data>\n  <data name=\"Error deleting query\" xml:space=\"preserve\">\n    <value>Fehler beim Löschen der Abfrage</value>\n  </data>\n  <data name=\"Error loading query\" xml:space=\"preserve\">\n    <value>Fehler beim Laden der Abfrage</value>\n  </data>\n  <data name=\"Error saving query\" xml:space=\"preserve\">\n    <value>Fehler beim Speichern der Abfrage</value>\n  </data>\n  <data name=\"Execute Query\" xml:space=\"preserve\">\n    <value>Abfrage ausführen</value>\n  </data>\n  <data name=\"Export CSV\" xml:space=\"preserve\">\n    <value>CSV-Datei exportieren</value>\n  </data>\n  <data name=\"Export results to CSV file\" xml:space=\"preserve\">\n    <value>Ergebnisse in CSV-Datei exportieren</value>\n  </data>\n  <data name=\"For the full instructions see the {0}Query Tool Documentation{1}.\" xml:space=\"preserve\">\n    <value>Die vollständige Anleitung finden Sie in der {0}Dokumentation zum Abfragetool{1}.</value>\n  </data>\n  <data name=\"Generate a DELETE statement for the selected table\" xml:space=\"preserve\">\n    <value>Generieren Sie eine DELETE-Anweisung für die ausgewählte Tabelle</value>\n  </data>\n  <data name=\"Generate a SELECT statement for the selected table and columns\" xml:space=\"preserve\">\n    <value>Generieren Sie eine SELECT-Anweisung für die ausgewählte Tabelle und Spalten</value>\n  </data>\n  <data name=\"Generate an INSERT statement for the selected table and columns\" xml:space=\"preserve\">\n    <value>Generieren Sie eine INSERT-Anweisung für die ausgewählte Tabelle und die ausgewählten Spalten</value>\n  </data>\n  <data name=\"Generate an UPDATE statement for the selected table and columns\" xml:space=\"preserve\">\n    <value>Generieren Sie eine UPDATE-Anweisung für die ausgewählte Tabelle und Spalten</value>\n  </data>\n  <data name=\"Insert\" xml:space=\"preserve\">\n    <value>Einfügung</value>\n  </data>\n  <data name=\"Insert at Cursor\" xml:space=\"preserve\">\n    <value>Am Cursor einfügen</value>\n  </data>\n  <data name=\"Insert column names into Query at current cursor position\" xml:space=\"preserve\">\n    <value>Spaltennamen an der aktuellen Cursorposition in die Abfrage einfügen</value>\n  </data>\n  <data name=\"Insert table name into Query at current cursor position\" xml:space=\"preserve\">\n    <value>Tabellennamen an der aktuellen Cursorposition in die Abfrage einfügen</value>\n  </data>\n  <data name=\"Invalid query! Only SELECT, INSERT, UPDATE, and DELETE are allowed.\" xml:space=\"preserve\">\n    <value>Ungültige Abfrage! Nur SELECT, INSERT, UPDATE und DELETE sind erlaubt.</value>\n  </data>\n  <data name=\"Load Saved Query\" xml:space=\"preserve\">\n    <value>Gespeicherte Abfrage laden</value>\n  </data>\n  <data name=\"Query\" xml:space=\"preserve\">\n    <value>Anfrage</value>\n  </data>\n  <data name=\"Query Tool\" xml:space=\"preserve\">\n    <value>Abfrage-Tool</value>\n  </data>\n  <data name=\"Query deleted\" xml:space=\"preserve\">\n    <value>Abfrage gelöscht</value>\n  </data>\n  <data name=\"Query loaded\" xml:space=\"preserve\">\n    <value>Abfrage geladen</value>\n  </data>\n  <data name=\"Query saved\" xml:space=\"preserve\">\n    <value>Abfrage gespeichert</value>\n  </data>\n  <data name=\"Save Query\" xml:space=\"preserve\">\n    <value>Abfrage speichern</value>\n  </data>\n  <data name=\"Save Query As\" xml:space=\"preserve\">\n    <value>Abfrage speichern unter</value>\n  </data>\n  <data name=\"Saved Queries\" xml:space=\"preserve\">\n    <value>Gespeicherte Abfragen</value>\n  </data>\n  <data name=\"Select\" xml:space=\"preserve\">\n    <value>Wählen</value>\n  </data>\n  <data name=\"Select a saved query to load it into the query editor\" xml:space=\"preserve\">\n    <value>Wählen Sie eine gespeicherte Abfrage aus, um sie in den Abfrageeditor zu laden</value>\n  </data>\n  <data name=\"Tables\" xml:space=\"preserve\">\n    <value>Tische</value>\n  </data>\n  <data name=\"This tool allows you to query your database using SQL. You can create SQL statements for common operations such as SELECT, INSERT, UPDATE and DELETE. The tool can automatically generate the SQL for you based on the table and columns you select. You can also save your queries for later use.\" xml:space=\"preserve\">\n    <value>Mit diesem Tool können Sie Ihre Datenbank mit SQL abfragen. Sie können SQL-Anweisungen für allgemeine Operationen wie SELECT, INSERT, UPDATE und DELETE erstellen. Das Tool kann die SQL basierend auf der von Ihnen ausgewählten Tabelle und den ausgewählten Spalten automatisch für Sie generieren. Sie können Ihre Abfragen auch zur späteren Verwendung speichern.</value>\n  </data>\n  <data name=\"Update\" xml:space=\"preserve\">\n    <value>Aktualisieren</value>\n  </data>\n  <data name=\"Write your SQL query here\" xml:space=\"preserve\">\n    <value>Schreiben Sie hier Ihre SQL-Abfrage</value>\n  </data>\n  <data name=\"You must select at least one column from the 'Columns' list!\" xml:space=\"preserve\">\n    <value>Sie müssen mindestens eine Spalte aus der Liste 'Spalten' auswählen!</value>\n  </data>\n  <data name=\"{0} rows affected\" xml:space=\"preserve\">\n    <value>{0} Zeilen betroffen</value>\n  </data>\n</root>\n"
  },
  {
    "path": "src/sourceDev.WebApp/GlobalResources/QueryToolResources.en.resx",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!--\n    Microsoft ResX Schema\n\n    Version 2.0\n\n    The primary goals of this format is to allow a simple XML format\n    that is mostly human readable. The generation and parsing of the\n    various data types are done through the TypeConverter classes\n    associated with the data types.\n\n    Example:\n\n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n\n    There are any number of \"resheader\" rows that contain simple\n    name/value pairs.\n\n    Each data row contains a name, and value. The row also contains a\n    type or mimetype. Type corresponds to a .NET class that support\n    text/value conversion through the TypeConverter architecture.\n    Classes that don't support this are serialized and stored with the\n    mimetype set.\n\n    The mimetype is used for serialized objects, and tells the\n    ResXResourceReader how to depersist the object. This is currently not\n    extensible. For a given mimetype the value must be set accordingly:\n\n    Note - application/x-microsoft.net.object.binary.base64 is the format\n    that the ResXResourceWriter will generate, however the reader can\n    read any of the formats listed below.\n\n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with\n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with\n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array\n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Are you sure you want to delete the selected saved query?\" xml:space=\"preserve\">\n    <value>Are you sure you want to delete the selected saved query?</value>\n  </data>\n  <data name=\"Cancel\" xml:space=\"preserve\">\n    <value>Cancel</value>\n  </data>\n  <data name=\"Check to enable this query to be run via the QueryTool API.\" xml:space=\"preserve\">\n    <value>Check to enable this query to be run via the QueryTool API.</value>\n  </data>\n  <data name=\"Choose a table name from the list\" xml:space=\"preserve\">\n    <value>Choose a table name from the list</value>\n  </data>\n  <data name=\"Choose one or more column names from the list. Control and click to select multiple items.\" xml:space=\"preserve\">\n    <value>Choose one or more column names from the list. Control and click to select multiple items.</value>\n  </data>\n  <data name=\"Clear Query\" xml:space=\"preserve\">\n    <value>Clear Query</value>\n  </data>\n  <data name=\"Close\" xml:space=\"preserve\">\n    <value>Close</value>\n  </data>\n  <data name=\"Columns\" xml:space=\"preserve\">\n    <value>Columns</value>\n  </data>\n  <data name=\"Confirm Delete\" xml:space=\"preserve\">\n    <value>Confirm Delete</value>\n  </data>\n  <data name=\"Delete\" xml:space=\"preserve\">\n    <value>Delete</value>\n  </data>\n  <data name=\"Delete Saved Query\" xml:space=\"preserve\">\n    <value>Delete Saved Query</value>\n  </data>\n  <data name=\"Enable as API query?\" xml:space=\"preserve\">\n    <value>Enable as API query?</value>\n  </data>\n  <data name=\"Enter a name for the query to save it for later use\" xml:space=\"preserve\">\n    <value>Enter a name for the query to save it for later use</value>\n  </data>\n  <data name=\"Error deleting query\" xml:space=\"preserve\">\n    <value>Error deleting query</value>\n  </data>\n  <data name=\"Error loading query\" xml:space=\"preserve\">\n    <value>Error loading query</value>\n  </data>\n  <data name=\"Error saving query\" xml:space=\"preserve\">\n    <value>Error saving query</value>\n  </data>\n  <data name=\"Execute Query\" xml:space=\"preserve\">\n    <value>Execute Query</value>\n  </data>\n  <data name=\"Export CSV\" xml:space=\"preserve\">\n    <value>Export CSV</value>\n  </data>\n  <data name=\"Export results to CSV file\" xml:space=\"preserve\">\n    <value>Export results to CSV file</value>\n  </data>\n  <data name=\"For the full instructions see the {0}Query Tool Documentation{1}.\" xml:space=\"preserve\">\n    <value>For the full instructions see the {0}Query Tool Documentation{1}.</value>\n  </data>\n  <data name=\"Generate a DELETE statement for the selected table\" xml:space=\"preserve\">\n    <value>Generate a DELETE statement for the selected table</value>\n  </data>\n  <data name=\"Generate a SELECT statement for the selected table and columns\" xml:space=\"preserve\">\n    <value>Generate a SELECT statement for the selected table and columns</value>\n  </data>\n  <data name=\"Generate an INSERT statement for the selected table and columns\" xml:space=\"preserve\">\n    <value>Generate an INSERT statement for the selected table and columns</value>\n  </data>\n  <data name=\"Generate an UPDATE statement for the selected table and columns\" xml:space=\"preserve\">\n    <value>Generate an UPDATE statement for the selected table and columns</value>\n  </data>\n  <data name=\"Insert\" xml:space=\"preserve\">\n    <value>Insert</value>\n  </data>\n  <data name=\"Insert at Cursor\" xml:space=\"preserve\">\n    <value>Insert at Cursor</value>\n  </data>\n  <data name=\"Insert column names into Query at current cursor position\" xml:space=\"preserve\">\n    <value>Insert column names into Query at current cursor position</value>\n  </data>\n  <data name=\"Insert table name into Query at current cursor position\" xml:space=\"preserve\">\n    <value>Insert table name into Query at current cursor position</value>\n  </data>\n  <data name=\"Invalid query! Only SELECT, INSERT, UPDATE, and DELETE are allowed.\" xml:space=\"preserve\">\n    <value>Invalid query! Only SELECT, INSERT, UPDATE, and DELETE are allowed.</value>\n  </data>\n  <data name=\"Load Saved Query\" xml:space=\"preserve\">\n    <value>Load Saved Query</value>\n  </data>\n  <data name=\"Query\" xml:space=\"preserve\">\n    <value>Query</value>\n  </data>\n  <data name=\"Query Tool\" xml:space=\"preserve\">\n    <value>Query Tool</value>\n  </data>\n  <data name=\"Query deleted\" xml:space=\"preserve\">\n    <value>Query deleted</value>\n  </data>\n  <data name=\"Query loaded\" xml:space=\"preserve\">\n    <value>Query loaded</value>\n  </data>\n  <data name=\"Query saved\" xml:space=\"preserve\">\n    <value>Query saved</value>\n  </data>\n  <data name=\"Save Query\" xml:space=\"preserve\">\n    <value>Save Query</value>\n  </data>\n  <data name=\"Save Query As\" xml:space=\"preserve\">\n    <value>Save Query As</value>\n  </data>\n  <data name=\"Saved Queries\" xml:space=\"preserve\">\n    <value>Saved Queries</value>\n  </data>\n  <data name=\"Select\" xml:space=\"preserve\">\n    <value>Select</value>\n  </data>\n  <data name=\"Select a saved query to load it into the query editor\" xml:space=\"preserve\">\n    <value>Select a saved query to load it into the query editor</value>\n  </data>\n  <data name=\"Tables\" xml:space=\"preserve\">\n    <value>Tables</value>\n  </data>\n  <data name=\"This tool allows you to query your database using SQL. You can create SQL statements for common operations such as SELECT, INSERT, UPDATE and DELETE. The tool can automatically generate the SQL for you based on the table and columns you select. You can also save your queries for later use.\" xml:space=\"preserve\">\n    <value>This tool allows you to query your database using SQL. You can create SQL statements for common operations such as SELECT, INSERT, UPDATE and DELETE. The tool can automatically generate the SQL for you based on the table and columns you select. You can also save your queries for later use.</value>\n  </data>\n  <data name=\"Update\" xml:space=\"preserve\">\n    <value>Update</value>\n  </data>\n  <data name=\"Write your SQL query here\" xml:space=\"preserve\">\n    <value>Write your SQL query here</value>\n  </data>\n  <data name=\"You must select at least one column from the 'Columns' list!\" xml:space=\"preserve\">\n    <value>You must select at least one column from the 'Columns' list!</value>\n  </data>\n  <data name=\"{0} rows affected\" xml:space=\"preserve\">\n    <value>{0} rows affected</value>\n  </data>\n</root>\n"
  },
  {
    "path": "src/sourceDev.WebApp/GlobalResources/QueryToolResources.fr.resx",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!--\n    Microsoft ResX Schema\n\n    Version 2.0\n\n    The primary goals of this format is to allow a simple XML format\n    that is mostly human readable. The generation and parsing of the\n    various data types are done through the TypeConverter classes\n    associated with the data types.\n\n    Example:\n\n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n\n    There are any number of \"resheader\" rows that contain simple\n    name/value pairs.\n\n    Each data row contains a name, and value. The row also contains a\n    type or mimetype. Type corresponds to a .NET class that support\n    text/value conversion through the TypeConverter architecture.\n    Classes that don't support this are serialized and stored with the\n    mimetype set.\n\n    The mimetype is used for serialized objects, and tells the\n    ResXResourceReader how to depersist the object. This is currently not\n    extensible. For a given mimetype the value must be set accordingly:\n\n    Note - application/x-microsoft.net.object.binary.base64 is the format\n    that the ResXResourceWriter will generate, however the reader can\n    read any of the formats listed below.\n\n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with\n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with\n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array\n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Are you sure you want to delete the selected saved query?\" xml:space=\"preserve\">\n    <value>Voulez-vous vraiment supprimer la requête enregistrée sélectionnée ?</value>\n  </data>\n  <data name=\"Cancel\" xml:space=\"preserve\">\n    <value>Annuler</value>\n  </data>\n  <data name=\"Check to enable this query to be run via the QueryTool API.\" xml:space=\"preserve\">\n    <value>Cochez cette case pour permettre à cette requête d'être exécutée via l'API QueryTool.</value>\n  </data>\n  <data name=\"Choose a table name from the list\" xml:space=\"preserve\">\n    <value>Choisissez un nom de table dans la liste</value>\n  </data>\n  <data name=\"Choose one or more column names from the list. Control and click to select multiple items.\" xml:space=\"preserve\">\n    <value>Choisissez un ou plusieurs noms de colonne dans la liste. Contrôlez et cliquez pour sélectionner plusieurs éléments.</value>\n  </data>\n  <data name=\"Clear Query\" xml:space=\"preserve\">\n    <value>Effacer la requête</value>\n  </data>\n  <data name=\"Close\" xml:space=\"preserve\">\n    <value>Fermer</value>\n  </data>\n  <data name=\"Columns\" xml:space=\"preserve\">\n    <value>Colonnes</value>\n  </data>\n  <data name=\"Confirm Delete\" xml:space=\"preserve\">\n    <value>Confirmation de la suppression</value>\n  </data>\n  <data name=\"Delete\" xml:space=\"preserve\">\n    <value>Supprimer</value>\n  </data>\n  <data name=\"Delete Saved Query\" xml:space=\"preserve\">\n    <value>Supprimer la requête enregistrée</value>\n  </data>\n  <data name=\"Enable as API query?\" xml:space=\"preserve\">\n    <value>Activer en tant que requête API ?</value>\n  </data>\n  <data name=\"Enter a name for the query to save it for later use\" xml:space=\"preserve\">\n    <value>Entrez un nom pour la requête afin de l'enregistrer pour une utilisation ultérieure</value>\n  </data>\n  <data name=\"Error deleting query\" xml:space=\"preserve\">\n    <value>Erreur lors de la suppression de la requête</value>\n  </data>\n  <data name=\"Error loading query\" xml:space=\"preserve\">\n    <value>Erreur lors du chargement de la requête</value>\n  </data>\n  <data name=\"Error saving query\" xml:space=\"preserve\">\n    <value>Erreur lors de l'enregistrement de la requête</value>\n  </data>\n  <data name=\"Execute Query\" xml:space=\"preserve\">\n    <value>Exécuter l'ordre</value>\n  </data>\n  <data name=\"Export CSV\" xml:space=\"preserve\">\n    <value>Exporter CSV</value>\n  </data>\n  <data name=\"Export results to CSV file\" xml:space=\"preserve\">\n    <value>Exporter les résultats vers un fichier CSV</value>\n  </data>\n  <data name=\"For the full instructions see the {0}Query Tool Documentation{1}.\" xml:space=\"preserve\">\n    <value>Pour obtenir des instructions complètes, consultez la {0}documentation de l'éditeur de requêtes{1}.</value>\n  </data>\n  <data name=\"Generate a DELETE statement for the selected table\" xml:space=\"preserve\">\n    <value>Générer une instruction DELETE pour la table sélectionnée</value>\n  </data>\n  <data name=\"Generate a SELECT statement for the selected table and columns\" xml:space=\"preserve\">\n    <value>Générer une instruction SELECT pour la table et les colonnes sélectionnées</value>\n  </data>\n  <data name=\"Generate an INSERT statement for the selected table and columns\" xml:space=\"preserve\">\n    <value>Générer une instruction INSERT pour la table et les colonnes sélectionnées</value>\n  </data>\n  <data name=\"Generate an UPDATE statement for the selected table and columns\" xml:space=\"preserve\">\n    <value>Générer une instruction UPDATE pour la table et les colonnes sélectionnées</value>\n  </data>\n  <data name=\"Insert\" xml:space=\"preserve\">\n    <value>Insérer</value>\n  </data>\n  <data name=\"Insert at Cursor\" xml:space=\"preserve\">\n    <value>Insérer au curseur</value>\n  </data>\n  <data name=\"Insert column names into Query at current cursor position\" xml:space=\"preserve\">\n    <value>Insérer les noms de colonne dans la requête à la position actuelle du curseur</value>\n  </data>\n  <data name=\"Insert table name into Query at current cursor position\" xml:space=\"preserve\">\n    <value>Insérer le nom de la table dans la requête à la position actuelle du curseur</value>\n  </data>\n  <data name=\"Invalid query! Only SELECT, INSERT, UPDATE, and DELETE are allowed.\" xml:space=\"preserve\">\n    <value>Requête invalide ! Seuls SELECT, INSERT, UPDATE et DELETE sont autorisés.</value>\n  </data>\n  <data name=\"Load Saved Query\" xml:space=\"preserve\">\n    <value>Charger la requête enregistrée</value>\n  </data>\n  <data name=\"Query\" xml:space=\"preserve\">\n    <value>Mettre en doute</value>\n  </data>\n  <data name=\"Query Tool\" xml:space=\"preserve\">\n    <value>Outil de requête</value>\n  </data>\n  <data name=\"Query deleted\" xml:space=\"preserve\">\n    <value>Requête supprimée</value>\n  </data>\n  <data name=\"Query loaded\" xml:space=\"preserve\">\n    <value>Requête chargée</value>\n  </data>\n  <data name=\"Query saved\" xml:space=\"preserve\">\n    <value>Requête enregistrée</value>\n  </data>\n  <data name=\"Save Query\" xml:space=\"preserve\">\n    <value>Enregistrer la requête</value>\n  </data>\n  <data name=\"Save Query As\" xml:space=\"preserve\">\n    <value>Enregistrer la requête sous</value>\n  </data>\n  <data name=\"Saved Queries\" xml:space=\"preserve\">\n    <value>Requêtes enregistrées</value>\n  </data>\n  <data name=\"Select\" xml:space=\"preserve\">\n    <value>Sélectionner</value>\n  </data>\n  <data name=\"Select a saved query to load it into the query editor\" xml:space=\"preserve\">\n    <value>Sélectionnez une requête enregistrée pour la charger dans l'éditeur de requêtes</value>\n  </data>\n  <data name=\"Tables\" xml:space=\"preserve\">\n    <value>les tables</value>\n  </data>\n  <data name=\"This tool allows you to query your database using SQL. You can create SQL statements for common operations such as SELECT, INSERT, UPDATE and DELETE. The tool can automatically generate the SQL for you based on the table and columns you select. You can also save your queries for later use.\" xml:space=\"preserve\">\n    <value>Cet outil vous permet d'interroger votre base de données en utilisant SQL. Vous pouvez créer des instructions SQL pour des opérations courantes telles que SELECT, INSERT, UPDATE et DELETE. L'outil peut générer automatiquement le SQL pour vous en fonction de la table et des colonnes que vous sélectionnez. Vous pouvez également enregistrer vos requêtes pour une utilisation ultérieure.</value>\n  </data>\n  <data name=\"Update\" xml:space=\"preserve\">\n    <value>Mise à jour</value>\n  </data>\n  <data name=\"Write your SQL query here\" xml:space=\"preserve\">\n    <value>Écrivez votre requête SQL ici</value>\n  </data>\n  <data name=\"You must select at least one column from the 'Columns' list!\" xml:space=\"preserve\">\n    <value>Vous devez sélectionner au moins une colonne dans la liste \"Colonnes\" !</value>\n  </data>\n  <data name=\"{0} rows affected\" xml:space=\"preserve\">\n    <value>{0} lignes concernées</value>\n  </data>\n</root>\n"
  },
  {
    "path": "src/sourceDev.WebApp/GlobalResources/QueryToolResources.it.resx",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!--\n    Microsoft ResX Schema\n\n    Version 2.0\n\n    The primary goals of this format is to allow a simple XML format\n    that is mostly human readable. The generation and parsing of the\n    various data types are done through the TypeConverter classes\n    associated with the data types.\n\n    Example:\n\n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n\n    There are any number of \"resheader\" rows that contain simple\n    name/value pairs.\n\n    Each data row contains a name, and value. The row also contains a\n    type or mimetype. Type corresponds to a .NET class that support\n    text/value conversion through the TypeConverter architecture.\n    Classes that don't support this are serialized and stored with the\n    mimetype set.\n\n    The mimetype is used for serialized objects, and tells the\n    ResXResourceReader how to depersist the object. This is currently not\n    extensible. For a given mimetype the value must be set accordingly:\n\n    Note - application/x-microsoft.net.object.binary.base64 is the format\n    that the ResXResourceWriter will generate, however the reader can\n    read any of the formats listed below.\n\n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with\n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with\n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array\n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Are you sure you want to delete the selected saved query?\" xml:space=\"preserve\">\n    <value>Sei sicuro di voler eliminare la query salvata selezionata?</value>\n  </data>\n  <data name=\"Cancel\" xml:space=\"preserve\">\n    <value>Annulla</value>\n  </data>\n  <data name=\"Check to enable this query to be run via the QueryTool API.\" xml:space=\"preserve\">\n    <value>Selezionare per abilitare l'esecuzione di questa query tramite l'API QueryTool.</value>\n  </data>\n  <data name=\"Choose a table name from the list\" xml:space=\"preserve\">\n    <value>Scegli un nome di tabella dall'elenco</value>\n  </data>\n  <data name=\"Choose one or more column names from the list. Control and click to select multiple items.\" xml:space=\"preserve\">\n    <value>Scegli uno o più nomi di colonna dall'elenco. Controllare e fare clic per selezionare più elementi.</value>\n  </data>\n  <data name=\"Clear Query\" xml:space=\"preserve\">\n    <value>Cancella domanda</value>\n  </data>\n  <data name=\"Close\" xml:space=\"preserve\">\n    <value>Vicino</value>\n  </data>\n  <data name=\"Columns\" xml:space=\"preserve\">\n    <value>Colonne</value>\n  </data>\n  <data name=\"Confirm Delete\" xml:space=\"preserve\">\n    <value>Conferma cancellazione</value>\n  </data>\n  <data name=\"Delete\" xml:space=\"preserve\">\n    <value>Eliminare</value>\n  </data>\n  <data name=\"Delete Saved Query\" xml:space=\"preserve\">\n    <value>Elimina query salvata</value>\n  </data>\n  <data name=\"Enable as API query?\" xml:space=\"preserve\">\n    <value>Abilitare come query API?</value>\n  </data>\n  <data name=\"Enter a name for the query to save it for later use\" xml:space=\"preserve\">\n    <value>Immettere un nome per la query per salvarla per un uso successivo</value>\n  </data>\n  <data name=\"Error deleting query\" xml:space=\"preserve\">\n    <value>Errore durante l'eliminazione della query</value>\n  </data>\n  <data name=\"Error loading query\" xml:space=\"preserve\">\n    <value>Errore durante il caricamento della query</value>\n  </data>\n  <data name=\"Error saving query\" xml:space=\"preserve\">\n    <value>Errore durante il salvataggio della query</value>\n  </data>\n  <data name=\"Execute Query\" xml:space=\"preserve\">\n    <value>Esegui interrogazione</value>\n  </data>\n  <data name=\"Export CSV\" xml:space=\"preserve\">\n    <value>Esporta CSV</value>\n  </data>\n  <data name=\"Export results to CSV file\" xml:space=\"preserve\">\n    <value>Esporta i risultati in un file CSV</value>\n  </data>\n  <data name=\"For the full instructions see the {0}Query Tool Documentation{1}.\" xml:space=\"preserve\">\n    <value>Per le istruzioni complete, consulta la {0}documentazione di Query Tool{1}.</value>\n  </data>\n  <data name=\"Generate a DELETE statement for the selected table\" xml:space=\"preserve\">\n    <value>Genera un'istruzione DELETE per la tabella selezionata</value>\n  </data>\n  <data name=\"Generate a SELECT statement for the selected table and columns\" xml:space=\"preserve\">\n    <value>Genera un'istruzione SELECT per la tabella e le colonne selezionate</value>\n  </data>\n  <data name=\"Generate an INSERT statement for the selected table and columns\" xml:space=\"preserve\">\n    <value>Genera un'istruzione INSERT per la tabella e le colonne selezionate</value>\n  </data>\n  <data name=\"Generate an UPDATE statement for the selected table and columns\" xml:space=\"preserve\">\n    <value>Genera un'istruzione UPDATE per la tabella e le colonne selezionate</value>\n  </data>\n  <data name=\"Insert\" xml:space=\"preserve\">\n    <value>Inserire</value>\n  </data>\n  <data name=\"Insert at Cursor\" xml:space=\"preserve\">\n    <value>Inserisci al cursore</value>\n  </data>\n  <data name=\"Insert column names into Query at current cursor position\" xml:space=\"preserve\">\n    <value>Inserisci i nomi delle colonne nella query nella posizione corrente del cursore</value>\n  </data>\n  <data name=\"Insert table name into Query at current cursor position\" xml:space=\"preserve\">\n    <value>Inserisci il nome della tabella nella query nella posizione corrente del cursore</value>\n  </data>\n  <data name=\"Invalid query! Only SELECT, INSERT, UPDATE, and DELETE are allowed.\" xml:space=\"preserve\">\n    <value>Richiesta non valida! Sono consentiti solo SELECT, INSERT, UPDATE e DELETE.</value>\n  </data>\n  <data name=\"Load Saved Query\" xml:space=\"preserve\">\n    <value>Carica query salvata</value>\n  </data>\n  <data name=\"Query\" xml:space=\"preserve\">\n    <value>Domanda</value>\n  </data>\n  <data name=\"Query Tool\" xml:space=\"preserve\">\n    <value>Strumento di interrogazione</value>\n  </data>\n  <data name=\"Query deleted\" xml:space=\"preserve\">\n    <value>Interrogazione eliminata</value>\n  </data>\n  <data name=\"Query loaded\" xml:space=\"preserve\">\n    <value>Query caricata</value>\n  </data>\n  <data name=\"Query saved\" xml:space=\"preserve\">\n    <value>Query salvata</value>\n  </data>\n  <data name=\"Save Query\" xml:space=\"preserve\">\n    <value>Salva domanda</value>\n  </data>\n  <data name=\"Save Query As\" xml:space=\"preserve\">\n    <value>Salva query con nome</value>\n  </data>\n  <data name=\"Saved Queries\" xml:space=\"preserve\">\n    <value>Query salvate</value>\n  </data>\n  <data name=\"Select\" xml:space=\"preserve\">\n    <value>Selezionare</value>\n  </data>\n  <data name=\"Select a saved query to load it into the query editor\" xml:space=\"preserve\">\n    <value>Selezionare una query salvata per caricarla nell'editor di query</value>\n  </data>\n  <data name=\"Tables\" xml:space=\"preserve\">\n    <value>Tabelle</value>\n  </data>\n  <data name=\"This tool allows you to query your database using SQL. You can create SQL statements for common operations such as SELECT, INSERT, UPDATE and DELETE. The tool can automatically generate the SQL for you based on the table and columns you select. You can also save your queries for later use.\" xml:space=\"preserve\">\n    <value>Questo strumento ti consente di interrogare il tuo database utilizzando SQL. È possibile creare istruzioni SQL per operazioni comuni come SELECT, INSERT, UPDATE e DELETE. Lo strumento può generare automaticamente l'SQL per te in base alla tabella e alle colonne selezionate. Puoi anche salvare le tue query per un uso successivo.</value>\n  </data>\n  <data name=\"Update\" xml:space=\"preserve\">\n    <value>Aggiornamento</value>\n  </data>\n  <data name=\"Write your SQL query here\" xml:space=\"preserve\">\n    <value>Scrivi qui la tua query SQL</value>\n  </data>\n  <data name=\"You must select at least one column from the 'Columns' list!\" xml:space=\"preserve\">\n    <value>Devi selezionare almeno una colonna dall'elenco 'Colonne'!</value>\n  </data>\n  <data name=\"{0} rows affected\" xml:space=\"preserve\">\n    <value>{0} righe interessate</value>\n  </data>\n</root>\n"
  },
  {
    "path": "src/sourceDev.WebApp/GlobalResources/SimpleContent.cy.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Archives\" xml:space=\"preserve\">\n    <value>Archifau</value>\n  </data>\n  <data name=\"Categories\" xml:space=\"preserve\">\n    <value>Categorïau</value>\n  </data>\n  <data name=\"Comments\" xml:space=\"preserve\">\n    <value>Sylwadau</value>\n  </data>\n  <data name=\"Posted in:\" xml:space=\"preserve\">\n    <value>Anfonwyd yn:</value>\n  </data>\n  <data name=\"Recent Posts\" xml:space=\"preserve\">\n    <value>Swyddi diweddar</value>\n  </data>\n  <data name=\"If checked will show the blog categories in the side bar\" xml:space=\"preserve\">\n    <value>Os caiff ei wirio bydd yn dangos y categorïau blog yn y bar ochr</value>\n  </data>\n  <data name=\"If checked will show the blog archives in the side bar\" xml:space=\"preserve\">\n    <value>Os caiff ei wirio bydd yn dangos yr archifau blog yn y bar ochr</value>\n  </data>\n  <data name=\"Show the blog categories in the side bar\" xml:space=\"preserve\">\n    <value>Dangoswch y categorïau blog yn y bar ochr</value>\n  </data>\n  <data name=\"Show the blog archives in the side bar\" xml:space=\"preserve\">\n    <value>Dangoswch yr archifau blog yn y bar ochr</value>\n  </data>\n  <data name=\"Created\" xml:space=\"preserve\">\n    <value>Wedi creu</value>\n  </data>\n  <data name=\"Created By\" xml:space=\"preserve\">\n    <value>Crëwyd Gan</value>\n  </data>\n  <data name=\"Last Updated\" xml:space=\"preserve\">\n    <value>Diweddarwyd Diwethaf</value>\n  </data>\n  <data name=\"Updated\" xml:space=\"preserve\">\n    <value>Wedi'i ddiweddaru</value>\n  </data>\n  <data name=\"Updated By\" xml:space=\"preserve\">\n    <value>Diweddarwyd Gan</value>\n  </data>\n  <data name=\"Show Created By\" xml:space=\"preserve\">\n    <value>Dangos Crëwyd Gan</value>\n  </data>\n  <data name=\"Show Created Date\" xml:space=\"preserve\">\n    <value>Dangos Dyddiad Creu</value>\n  </data>\n  <data name=\"Show Last Modified By\" xml:space=\"preserve\">\n    <value>Dangos Addaswyd Diwethaf Gan</value>\n  </data>\n  <data name=\"Show Last Modified Date\" xml:space=\"preserve\">\n    <value>Dangos Dyddiad Addaswyd Diwethaf</value>\n  </data>\n  <data name=\"Show / hide the following information below the main content of the page.\" xml:space=\"preserve\">\n    <value>Dangos / cuddio'r wybodaeth ganlynol o dan brif gynnwys y dudalen.</value>\n  </data>\n  <data name=\"Show / hide the following information below the main content of pages (site default).\" xml:space=\"preserve\">\n    <value>Dangos / cuddio'r wybodaeth ganlynol o dan brif gynnwys tudalennau (rhagosodiad y safle).</value>\n  </data>\n</root>"
  },
  {
    "path": "src/sourceDev.WebApp/GlobalResources/SimpleContent.en-US.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"A comma separated list of navigation component filter names used to filter the blog out of the menu. Leave this blank so the blog menu item is not filtered from any of the menu views. There are some standard filter names like topnav and breadcrumbs but it is also possible to use custom names with custom views. As soon as you populate this field it becomes filtered to only show the blog menu item in the included views, whereas blank means unfiltered.\" xml:space=\"preserve\">\n    <value>A comma separated list of navigation component filter names used to filter the blog out of the menu. Leave this blank so the blog menu item is not filtered from any of the menu views. There are some standard filter names like topnav and breadcrumbs but it is also possible to use custom names with custom views. As soon as you populate this field it becomes filtered to only show the blog menu item in the included views, whereas blank means unfiltered.</value>\n  </data>\n  <data name=\"About me\" xml:space=\"preserve\">\n    <value>About me</value>\n  </data>\n  <data name=\"Add Blog To Menu\" xml:space=\"preserve\">\n    <value>Add Blog To Menu</value>\n  </data>\n  <data name=\"Add CSS Url\" xml:space=\"preserve\">\n    <value>Add CSS Url</value>\n  </data>\n  <data name=\"Add Javascript Url\" xml:space=\"preserve\">\n    <value>Add Javascript Url</value>\n  </data>\n  <data name=\"Add the blog as a top level menu item. There are multiple other ways of adding the blog to the menu. You can make a page that links to /blog or it can be done from the navigation.xml file. If you see it in the menu more than once it means you have multiple ways it is configured to be added.\" xml:space=\"preserve\">\n    <value>Add the blog as a top level menu item. There are multiple other ways of adding the blog to the menu. You can make a page that links to /blog or it can be done from the navigation.xml file. If you see it in the menu more than once it means you have multiple ways it is configured to be added.</value>\n  </data>\n  <data name=\"Any\" xml:space=\"preserve\">\n    <value>Any</value>\n  </data>\n  <data name=\"Archives\" xml:space=\"preserve\">\n    <value>Archives</value>\n  </data>\n  <data name=\"Are you sure you want to delete the post {0}? You cannot undo this action.\" xml:space=\"preserve\">\n    <value>Are you sure you want to delete the post {0}? You cannot undo this action.</value>\n  </data>\n  <data name=\"Author\" xml:space=\"preserve\">\n    <value>Author</value>\n  </data>\n  <data name=\"Blog Menu Links To Newest Post\" xml:space=\"preserve\">\n    <value>Blog Menu Links To Newest Post</value>\n  </data>\n  <data name=\"Blog Menu Position\" xml:space=\"preserve\">\n    <value>Blog Menu Position</value>\n  </data>\n  <data name=\"Blog Page Menu Text\" xml:space=\"preserve\">\n    <value>Blog Page Menu Text</value>\n  </data>\n  <data name=\"Blog Page Menu Visibility\" xml:space=\"preserve\">\n    <value>Blog Page Menu Visibility</value>\n  </data>\n  <data name=\"Blog Page Title\" xml:space=\"preserve\">\n    <value>Blog Page Title</value>\n  </data>\n  <data name=\"Cancel\" xml:space=\"preserve\">\n    <value>Cancel</value>\n  </data>\n  <data name=\"Categories\" xml:space=\"preserve\">\n    <value>Categories</value>\n  </data>\n  <data name=\"Comma Separated Channel Categories\" xml:space=\"preserve\">\n    <value>Comma Separated Channel Categories</value>\n  </data>\n  <data name=\"Comment Notification Email\" xml:space=\"preserve\">\n    <value>Comment Notification Email</value>\n  </data>\n  <data name=\"Comments\" xml:space=\"preserve\">\n    <value>Comments</value>\n  </data>\n  <data name=\"Content\" xml:space=\"preserve\">\n    <value>Content</value>\n  </data>\n  <data name=\"Content Index\" xml:space=\"preserve\">\n    <value>Content Index</value>\n  </data>\n  <data name=\"Correlation Key\" xml:space=\"preserve\">\n    <value>Correlation Key</value>\n  </data>\n  <data name=\"Date Format\" xml:space=\"preserve\">\n    <value>Date Format</value>\n  </data>\n  <data name=\"Days To Comment\" xml:space=\"preserve\">\n    <value>Days To Comment</value>\n  </data>\n  <data name=\"Default Page\" xml:space=\"preserve\">\n    <value>Default Page</value>\n  </data>\n  <data name=\"Delete\" xml:space=\"preserve\">\n    <value>Delete</value>\n  </data>\n  <data name=\"Developer Tools - {0}\" xml:space=\"preserve\">\n    <value>Developer Tools - {0}</value>\n  </data>\n  <data name=\"Development\" xml:space=\"preserve\">\n    <value>Development</value>\n  </data>\n  <data name=\"Disqus Short Name\" xml:space=\"preserve\">\n    <value>Disqus Short Name</value>\n  </data>\n  <data name=\"Edit\" xml:space=\"preserve\">\n    <value>Edit</value>\n  </data>\n  <data name=\"Edit - {0}\" xml:space=\"preserve\">\n    <value>Edit - {0}</value>\n  </data>\n  <data name=\"Environment\" xml:space=\"preserve\">\n    <value>Environment</value>\n  </data>\n  <data name=\"Feedburner Url\" xml:space=\"preserve\">\n    <value>Feedburner Url</value>\n  </data>\n  <data name=\"Home\" xml:space=\"preserve\">\n    <value>Home</value>\n  </data>\n  <data name=\"If checked the blog menu item will link to the most recent post instead of the post list.\" xml:space=\"preserve\">\n    <value>If checked the blog menu item will link to the most recent post instead of the post list.</value>\n  </data>\n  <data name=\"If checked will show the blog title and description at the top of the post list.\" xml:space=\"preserve\">\n    <value>If checked will show the blog title and description at the top of the post list.</value>\n  </data>\n  <data name=\"Image Path\" xml:space=\"preserve\">\n    <value>Image Path</value>\n  </data>\n  <data name=\"Include Date In Post Urls\" xml:space=\"preserve\">\n    <value>Include Date In Post Urls</value>\n  </data>\n  <data name=\"Invalid request\" xml:space=\"preserve\">\n    <value>Invalid request</value>\n  </data>\n  <data name=\"Is Published\" xml:space=\"preserve\">\n    <value>Is Published</value>\n  </data>\n  <data name=\"Language Code\" xml:space=\"preserve\">\n    <value>Language Code</value>\n  </data>\n  <data name=\"Managing Editor Email\" xml:space=\"preserve\">\n    <value>Managing Editor Email</value>\n  </data>\n  <data name=\"Meta Description\" xml:space=\"preserve\">\n    <value>Meta Description</value>\n  </data>\n  <data name=\"Moderate Comments\" xml:space=\"preserve\">\n    <value>Moderate Comments</value>\n  </data>\n  <data name=\"New Page\" xml:space=\"preserve\">\n    <value>New Page</value>\n  </data>\n  <data name=\"New Post\" xml:space=\"preserve\">\n    <value>New Post</value>\n  </data>\n  <data name=\"Next Post\" xml:space=\"preserve\">\n    <value>Next Post</value>\n  </data>\n  <data name=\"Note that since this page has an override url, the menu item will link to the url so the page is used only as a means to add a link in the menu, the content is not used.\" xml:space=\"preserve\">\n    <value>Note that since this page has an override url, the menu item will link to the url so the page is used only as a means to add a link in the menu, the content is not used.</value>\n  </data>\n  <data name=\"Number of posts to show per page on the post list.\" xml:space=\"preserve\">\n    <value>Number of posts to show per page on the post list.</value>\n  </data>\n  <data name=\"On public pages, meta description is very important to search engines. It should be no longer than 135 – 160 characters long (although Google has recently been testing longer snippets). Any longer and search engines will chop the end off, so make sure any important keywords are nearer the front.\" xml:space=\"preserve\">\n    <value>On public pages, meta description is very important to search engines. It should be no longer than 135 – 160 characters long (although Google has recently been testing longer snippets). Any longer and search engines will chop the end off, so make sure any important keywords are nearer the front.</value>\n  </data>\n  <data name=\"Organization\" xml:space=\"preserve\">\n    <value>Organization</value>\n  </data>\n  <data name=\"Page Management\" xml:space=\"preserve\">\n    <value>Page Management</value>\n  </data>\n  <data name=\"Person\" xml:space=\"preserve\">\n    <value>Person</value>\n  </data>\n  <data name=\"Please enter a valid e-mail address\" xml:space=\"preserve\">\n    <value>Please enter a valid e-mail address</value>\n  </data>\n  <data name=\"Posted in:\" xml:space=\"preserve\">\n    <value>Posted in:</value>\n  </data>\n  <data name=\"Posts Per Page\" xml:space=\"preserve\">\n    <value>Posts Per Page</value>\n  </data>\n  <data name=\"Previous Post\" xml:space=\"preserve\">\n    <value>Previous Post</value>\n  </data>\n  <data name=\"Production\" xml:space=\"preserve\">\n    <value>Production</value>\n  </data>\n  <data name=\"Provide your Disqus site name aka short name to use Disqus instead of the internal comment system. Highly recommended.\" xml:space=\"preserve\">\n    <value>Provide your Disqus site name aka short name to use Disqus instead of the internal comment system. Highly recommended.</value>\n  </data>\n  <data name=\"Publication Date\" xml:space=\"preserve\">\n    <value>Publication Date</value>\n  </data>\n  <data name=\"Publisher\" xml:space=\"preserve\">\n    <value>Publisher</value>\n  </data>\n  <data name=\"Publisher Logo Height\" xml:space=\"preserve\">\n    <value>Publisher Logo Height</value>\n  </data>\n  <data name=\"Publisher Logo Url\" xml:space=\"preserve\">\n    <value>Publisher Logo Url</value>\n  </data>\n  <data name=\"Publisher Logo Width\" xml:space=\"preserve\">\n    <value>Publisher Logo Width</value>\n  </data>\n  <data name=\"Publisher Type\" xml:space=\"preserve\">\n    <value>Publisher Type</value>\n  </data>\n  <data name=\"Save\" xml:space=\"preserve\">\n    <value>Save</value>\n  </data>\n  <data name=\"Script\" xml:space=\"preserve\">\n    <value>Script</value>\n  </data>\n  <data name=\"Show Blog Title and Description\" xml:space=\"preserve\">\n    <value>Show Blog Title and Description</value>\n  </data>\n  <data name=\"Show Recent Posts on Default Page\" xml:space=\"preserve\">\n    <value>Show Recent Posts on Default Page</value>\n  </data>\n  <data name=\"Slug\" xml:space=\"preserve\">\n    <value>Slug</value>\n  </data>\n  <data name=\"slug is already in use.\" xml:space=\"preserve\">\n    <value>slug is already in use.</value>\n  </data>\n  <data name=\"Sort\" xml:space=\"preserve\">\n    <value>Sort</value>\n  </data>\n  <data name=\"The description also is used as the channel description in the RSS feed.\" xml:space=\"preserve\">\n    <value>The description also is used as the channel description in the RSS feed.</value>\n  </data>\n  <data name=\"The page was created successfully.\" xml:space=\"preserve\">\n    <value>The page was created successfully.</value>\n  </data>\n  <data name=\"The page was updated successfully.\" xml:space=\"preserve\">\n    <value>The page was updated successfully.</value>\n  </data>\n  <data name=\"The position of the blog within the top level menu.\" xml:space=\"preserve\">\n    <value>The position of the blog within the top level menu.</value>\n  </data>\n  <data name=\"This is used in meta data, see http://schema.org/logo.\" xml:space=\"preserve\">\n    <value>This is used in meta data, see http://schema.org/logo.</value>\n  </data>\n  <data name=\"This is used in meta data, see http://schema.org/publisher.\" xml:space=\"preserve\">\n    <value>This is used in meta data, see http://schema.org/publisher.</value>\n  </data>\n  <data name=\"This setting only applies to using the internal comment system, it does not impact Disqus comments.\" xml:space=\"preserve\">\n    <value>This setting only applies to using the internal comment system, it does not impact Disqus comments.</value>\n  </data>\n  <data name=\"Title\" xml:space=\"preserve\">\n    <value>Title</value>\n  </data>\n  <data name=\"Url\" xml:space=\"preserve\">\n    <value>Url</value>\n  </data>\n  <data name=\"Use Meta Description In Feed\" xml:space=\"preserve\">\n    <value>Use Meta Description In Feed</value>\n  </data>\n  <data name=\"Webmaster Email\" xml:space=\"preserve\">\n    <value>Webmaster Email</value>\n  </data>\n  <data name=\"With great power comes great responsibility. This page is intended for use by developers, for adding javscript and css into the page. Use this page only if you understand what you are doing.\" xml:space=\"preserve\">\n    <value>With great power comes great responsibility. This page is intended for use by developers, for adding javscript and css into the page. Use this page only if you understand what you are doing.</value>\n  </data>\n  <data name=\"A page becomes a child page of another page if you enter the slug of the other page as the parent slug. The menu hierarchy is determined by the parent child relationship between pages. If you enter an invalid parent slug it will be ignored but will not cause any error. You can also manage the hierarchy from the Page Manager.\" xml:space=\"preserve\">\n    <value>A page becomes a child page of another page if you enter the slug of the other page as the parent slug. The menu hierarchy is determined by the parent child relationship between pages. If you enter an invalid parent slug it will be ignored but will not cause any error. You can also manage the hierarchy from the Page Manager.</value>\n  </data>\n  <data name=\"A page is visible to the public if the Is Published checkbox is checked and if the Publication Date is before the current moment, and if not protected by roles.\" xml:space=\"preserve\">\n    <value>A page is visible to the public if the Is Published checkbox is checked and if the Publication Date is before the current moment, and if not protected by roles.</value>\n  </data>\n  <data name=\"Are you sure you want to delete the page {0}?\" xml:space=\"preserve\">\n    <value>Are you sure you want to delete the page {0}?</value>\n  </data>\n  <data name=\"Are you sure you want to delete the page {0}? You cannot undo this action.\" xml:space=\"preserve\">\n    <value>Are you sure you want to delete the page {0}? You cannot undo this action.</value>\n  </data>\n  <data name=\"Are you sure you want to move the page {0} {1} {2}?\" xml:space=\"preserve\">\n    <value>Are you sure you want to move the page {0} {1} {2}?</value>\n  </data>\n  <data name=\"Are you sure you want to sort the child pages of {0} alphabetically?\" xml:space=\"preserve\">\n    <value>Are you sure you want to sort the child pages of {0} alphabetically?</value>\n  </data>\n  <data name=\"Bad Request\" xml:space=\"preserve\">\n    <value>Bad Request</value>\n  </data>\n  <data name=\"Check this box if the current page is only meant as a parent container for other pages and has no content of it's own.\" xml:space=\"preserve\">\n    <value>Check this box if the current page is only meant as a parent container for other pages and has no content of it's own.</value>\n  </data>\n  <data name=\"Developer Tools\" xml:space=\"preserve\">\n    <value>Developer Tools</value>\n  </data>\n  <data name=\"Edit Page\" xml:space=\"preserve\">\n    <value>Edit Page</value>\n  </data>\n  <data name=\"Enable Comments\" xml:space=\"preserve\">\n    <value>Enable Comments</value>\n  </data>\n  <data name=\"Forbidden\" xml:space=\"preserve\">\n    <value>Forbidden</value>\n  </data>\n  <data name=\"If the page is a parent of other pages, you check this box to make it show a menu of links to the child pages.\" xml:space=\"preserve\">\n    <value>If the page is a parent of other pages, you check this box to make it show a menu of links to the child pages.</value>\n  </data>\n  <data name=\"If you populate this field with an url then the page is used only as a means to add the url as a menu item. The page content in that case is not used or visible to users. You can use a relative url or a fully qualified url so it can link to external sites. Use this with caution and note that once populated the only way to edit the page is from the link in Page Manager.\" xml:space=\"preserve\">\n    <value>If you populate this field with an url then the page is used only as a means to add the url as a menu item. The page content in that case is not used or visible to users. You can use a relative url or a fully qualified url so it can link to external sites. Use this with caution and note that once populated the only way to edit the page is from the link in Page Manager.</value>\n  </data>\n  <data name=\"Leave blank to include this page in all menu views. A comma separated list of menu filter names can be used to filter the page out of the various menu views. For example enter breadcrumbs to leave a page out of other views but keep it in breadcrumbs. Standard menu filter names include: topnav,breadcrumbs,childtree\" xml:space=\"preserve\">\n    <value>Leave blank to include this page in all menu views. A comma separated list of menu filter names can be used to filter the page out of the various menu views. For example enter breadcrumbs to leave a page out of other views but keep it in breadcrumbs. Standard menu filter names include: topnav,breadcrumbs,childtree</value>\n  </data>\n  <data name=\"Leave View Roles blank for public pages. You can put comma separated role names here to make a page visible only to users who are role members.\" xml:space=\"preserve\">\n    <value>Leave View Roles blank for public pages. You can put comma separated role names here to make a page visible only to users who are role members.</value>\n  </data>\n  <data name=\"Manage Page Hierarchy\" xml:space=\"preserve\">\n    <value>Manage Page Hierarchy</value>\n  </data>\n  <data name=\"Menu Filters\" xml:space=\"preserve\">\n    <value>Menu Filters</value>\n  </data>\n  <data name=\"New Child Page\" xml:space=\"preserve\">\n    <value>New Child Page</value>\n  </data>\n  <data name=\"New Root Level Page\" xml:space=\"preserve\">\n    <value>New Root Level Page</value>\n  </data>\n  <data name=\"No Content Only Show Child Menu\" xml:space=\"preserve\">\n    <value>No Content Only Show Child Menu</value>\n  </data>\n  <data name=\"No Pages Found\" xml:space=\"preserve\">\n    <value>No Pages Found</value>\n  </data>\n  <data name=\"No pages have been created yet, if this is your site, please login to create your first page\" xml:space=\"preserve\">\n    <value>No pages have been created yet, if this is your site, please login to create your first page</value>\n  </data>\n  <data name=\"On most pages you will prbably want the page heading to show, but maybe not on the home page. If unchecked then the page heading will not be shown.\" xml:space=\"preserve\">\n    <value>On most pages you will prbably want the page heading to show, but maybe not on the home page. If unchecked then the page heading will not be shown.</value>\n  </data>\n  <data name=\"Override Url\" xml:space=\"preserve\">\n    <value>Override Url</value>\n  </data>\n  <data name=\"Page Heading\" xml:space=\"preserve\">\n    <value>Page Heading</value>\n  </data>\n  <data name=\"Page Not Found\" xml:space=\"preserve\">\n    <value>Page Not Found</value>\n  </data>\n  <data name=\"Page Order\" xml:space=\"preserve\">\n    <value>Page Order</value>\n  </data>\n  <data name=\"Parent Slug\" xml:space=\"preserve\">\n    <value>Parent Slug</value>\n  </data>\n  <data name=\"Select Roles\" xml:space=\"preserve\">\n    <value>Select Roles</value>\n  </data>\n  <data name=\"Settings\" xml:space=\"preserve\">\n    <value>Settings</value>\n  </data>\n  <data name=\"Show Child Menu\" xml:space=\"preserve\">\n    <value>Show Child Menu</value>\n  </data>\n  <data name=\"Show Heading\" xml:space=\"preserve\">\n    <value>Show Heading</value>\n  </data>\n  <data name=\"Site Home\" xml:space=\"preserve\">\n    <value>Site Home</value>\n  </data>\n  <data name=\"Sorry, but the page requires authentication.\" xml:space=\"preserve\">\n    <value>Sorry, but the page requires authentication.</value>\n  </data>\n  <data name=\"Sorry, but the page you were looking for can't be found.\" xml:space=\"preserve\">\n    <value>Sorry, but the page you were looking for can't be found.</value>\n  </data>\n  <data name=\"Sorry, but you don't have permission to access this page.\" xml:space=\"preserve\">\n    <value>Sorry, but you don't have permission to access this page.</value>\n  </data>\n  <data name=\"Sort Child Pages Alpha\" xml:space=\"preserve\">\n    <value>Sort Child Pages Alpha</value>\n  </data>\n  <data name=\"The page {0} has child pages, if you delete it, all of the child pages will become root level pages. You should delete child pages before deleting the parent page. Are you sure you want to delete {1}?\" xml:space=\"preserve\">\n    <value>The page {0} has child pages, if you delete it, all of the child pages will become root level pages. You should delete child pages before deleting the parent page. Are you sure you want to delete {1}?</value>\n  </data>\n  <data name=\"This is the heading and title of the page. For new pages the url slug will be generated based on the title.\" xml:space=\"preserve\">\n    <value>This is the heading and title of the page. For new pages the url slug will be generated based on the title.</value>\n  </data>\n  <data name=\"This is the sort order of this page within it's subtree of the menu. You can also move pages around easily from Page Manager, which will update the page order.\" xml:space=\"preserve\">\n    <value>This is the sort order of this page within it's subtree of the menu. You can also move pages around easily from Page Manager, which will update the page order.</value>\n  </data>\n  <data name=\"Unauthorized\" xml:space=\"preserve\">\n    <value>Unauthorized</value>\n  </data>\n  <data name=\"Unexpected Error\" xml:space=\"preserve\">\n    <value>Unexpected Error</value>\n  </data>\n  <data name=\"View\" xml:space=\"preserve\">\n    <value>View</value>\n  </data>\n  <data name=\"View Roles\" xml:space=\"preserve\">\n    <value>View Roles</value>\n  </data>\n  <data name=\"Well, this is embarrassing. An error occurred while processing your request. Rest assured, this problem has been logged and hamsters have been released to fix the problem.\" xml:space=\"preserve\">\n    <value>Well, this is embarrassing. An error occurred while processing your request. Rest assured, this problem has been logged and hamsters have been released to fix the problem.</value>\n  </data>\n  <data name=\"You can drag and drop page nodes in the treeview below to move them around in the site hierarchy or to change their sort position. Click on a page to show a menu of commands related to that page. Note that changes will not be reflected in the main menu until you refresh the page.\" xml:space=\"preserve\">\n    <value>You can drag and drop page nodes in the treeview below to move them around in the site hierarchy or to change their sort position. Click on a page to show a menu of commands related to that page. Note that changes will not be reflected in the main menu until you refresh the page.</value>\n  </data>\n  <data name=\"Your browser sent a request that this server could not understand.\" xml:space=\"preserve\">\n    <value>Your browser sent a request that this server could not understand.</value>\n  </data>\n  <data name=\"Content Settings\" xml:space=\"preserve\">\n    <value>Content Settings</value>\n  </data>\n  <data name=\"Content Settings were successfully updated.\" xml:space=\"preserve\">\n    <value>Content Settings were successfully updated.</value>\n  </data>\n  <data name=\"Image Url\" xml:space=\"preserve\">\n    <value>Image Url</value>\n  </data>\n  <data name=\"Is Featured\" xml:space=\"preserve\">\n    <value>Is Featured</value>\n  </data>\n  <data name=\"Thumbnail Url\" xml:space=\"preserve\">\n    <value>Thumbnail Url</value>\n  </data>\n  <data name=\"Show Featured Posts on Default Page\" xml:space=\"preserve\">\n    <value>Show Featured Posts on Default Page</value>\n  </data>\n  <data name=\"Featured Posts\" xml:space=\"preserve\">\n    <value>Featured Posts</value>\n  </data>\n  <data name=\"Recent Posts\" xml:space=\"preserve\">\n    <value>Recent Posts</value>\n  </data>\n  <data name=\"If checked will show the blog categories in the side bar\" xml:space=\"preserve\">\n    <value>If checked will show the blog categories in the side bar</value>\n  </data>\n  <data name=\"If checked will show the blog archives in the side bar\" xml:space=\"preserve\">\n    <value>If checked will show the blog archives in the side bar</value>\n  </data>\n  <data name=\"Show the blog categories in the side bar\" xml:space=\"preserve\">\n    <value>Show the blog categories in the side bar</value>\n  </data>\n  <data name=\"Show the blog archives in the side bar\" xml:space=\"preserve\">\n    <value>Show the blog archives in the side bar</value>\n  </data>\n  <data name=\"Created\" xml:space=\"preserve\">\n    <value>Created</value>\n  </data>\n  <data name=\"Created By\" xml:space=\"preserve\">\n    <value>Created By</value>\n  </data>\n  <data name=\"Last Updated\" xml:space=\"preserve\">\n    <value>Last Updated</value>\n  </data>\n  <data name=\"Updated\" xml:space=\"preserve\">\n    <value>Updated</value>\n  </data>\n  <data name=\"Updated By\" xml:space=\"preserve\">\n    <value>Updated By</value>\n  </data>\n  <data name=\"Show Created By\" xml:space=\"preserve\">\n    <value>Show Created By</value>\n  </data>\n  <data name=\"Show Created Date\" xml:space=\"preserve\">\n    <value>Show Created Date</value>\n  </data>\n  <data name=\"Show Last Modified By\" xml:space=\"preserve\">\n    <value>Show Last Modified By</value>\n  </data>\n  <data name=\"Show Last Modified Date\" xml:space=\"preserve\">\n    <value>Show Last Modified Date</value>\n  </data>\n  <data name=\"Show / hide the following information below the main content of the page.\" xml:space=\"preserve\">\n    <value>Show / hide the following information below the main content of the page.</value>\n  </data>\n  <data name=\"Show / hide the following information below the main content of pages (site default).\" xml:space=\"preserve\">\n    <value>Show / hide the following information below the main content of pages (site default).</value>\n  </data>\n  <data name=\"You have unsaved changes in the editor. Are you sure you want to navigate to Developer Tools? Your changes will be lost.\" xml:space=\"preserve\">\n    <value>You have unsaved changes in the editor. Are you sure you want to navigate to Developer Tools? Your changes will be lost.</value>\n  </data>\n  <data name=\"Raw JavaScript\" xml:space=\"preserve\">\n    <value>Raw JavaScript</value>\n  </data>\n  <data name=\"Enter your JavaScript below. Do not include script tags.\" xml:space=\"preserve\">\n    <value>Enter your JavaScript below. Do not include script tags.</value>\n  </data>\n  <data name=\"Scripts are automatically validated for security - only safe DOM manipulation and event handling are permitted.\" xml:space=\"preserve\">\n    <value>Scripts are automatically validated for security - only safe DOM manipulation and event handling are permitted.</value>\n  </data>\n  <data name=\"Enter custom Javascript to run on your page. Do not include script tags.\" xml:space=\"preserve\">\n    <value>Enter custom Javascript to run on your page. Do not include script tags.</value>\n  </data>\n  <data name=\"Save JavaScript\" xml:space=\"preserve\">\n    <value>Save JavaScript</value>\n  </data>\n  <data name=\"JavaScript URLs\" xml:space=\"preserve\">\n    <value>JavaScript URLs</value>\n  </data>\n  <data name=\"CSS URLs\" xml:space=\"preserve\">\n    <value>CSS URLs</value>\n  </data>\n  <data name=\"Return to Page Editing\" xml:space=\"preserve\">\n    <value>Return to Page Editing</value>\n  </data>\n  <data name=\"Creator Twitter Handle\" xml:space=\"preserve\">\n    <value>Creator Twitter Handle</value>\n  </data>\n  <data name=\"Date Required\" xml:space=\"preserve\">\n    <value>Date Required</value>\n  </data>\n  <data name=\"Description\" xml:space=\"preserve\">\n    <value>Description</value>\n  </data>\n  <data name=\"Disable HTML Editor\" xml:space=\"preserve\">\n    <value>Disable HTML Editor</value>\n  </data>\n  <data name=\"Publish Later:\" xml:space=\"preserve\">\n    <value>Publish Later:</value>\n  </data>\n  <data name=\"Publish Now\" xml:space=\"preserve\">\n    <value>Publish Now</value>\n  </data>\n  <data name=\"Publisher Twitter Handle\" xml:space=\"preserve\">\n    <value>Publisher Twitter Handle</value>\n  </data>\n  <data name=\"Save Draft\" xml:space=\"preserve\">\n    <value>Save Draft</value>\n  </data>\n  <data name=\"Site Name\" xml:space=\"preserve\">\n    <value>Site Name</value>\n  </data>\n  <data name=\"To publish later you must enter a date.\" xml:space=\"preserve\">\n    <value>To publish later you must enter a date.</value>\n  </data>\n  <data name=\"Version History\" xml:space=\"preserve\">\n    <value>Version History</value>\n  </data>\n  <data name=\"Script saved successfully\" xml:space=\"preserve\">\n    <value>Script saved successfully</value>\n  </data>\n  <data name=\"Script cleared successfully\" xml:space=\"preserve\">\n    <value>Script cleared successfully</value>\n  </data>\n</root>"
  },
  {
    "path": "src/sourceDev.WebApp/GlobalResources/SimpleContent.it-IT.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n  <!-- \r\n    Microsoft ResX Schema \r\n    \r\n    Version 2.0\r\n    \r\n    The primary goals of this format is to allow a simple XML format \r\n    that is mostly human readable. The generation and parsing of the \r\n    various data types are done through the TypeConverter classes \r\n    associated with the data types.\r\n    \r\n    Example:\r\n    \r\n    ... ado.net/XML headers & schema ...\r\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\r\n    <resheader name=\"version\">2.0</resheader>\r\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\r\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\r\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\r\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\r\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\r\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\r\n    </data>\r\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\r\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\r\n        <comment>This is a comment</comment>\r\n    </data>\r\n                \r\n    There are any number of \"resheader\" rows that contain simple \r\n    name/value pairs.\r\n    \r\n    Each data row contains a name, and value. The row also contains a \r\n    type or mimetype. Type corresponds to a .NET class that support \r\n    text/value conversion through the TypeConverter architecture. \r\n    Classes that don't support this are serialized and stored with the \r\n    mimetype set.\r\n    \r\n    The mimetype is used for serialized objects, and tells the \r\n    ResXResourceReader how to depersist the object. This is currently not \r\n    extensible. For a given mimetype the value must be set accordingly:\r\n    \r\n    Note - application/x-microsoft.net.object.binary.base64 is the format \r\n    that the ResXResourceWriter will generate, however the reader can \r\n    read any of the formats listed below.\r\n    \r\n    mimetype: application/x-microsoft.net.object.binary.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\r\n            : and then encoded with base64 encoding.\r\n    \r\n    mimetype: application/x-microsoft.net.object.soap.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\r\n            : and then encoded with base64 encoding.\r\n\r\n    mimetype: application/x-microsoft.net.object.bytearray.base64\r\n    value   : The object must be serialized into a byte array \r\n            : using a System.ComponentModel.TypeConverter\r\n            : and then encoded with base64 encoding.\r\n    -->\r\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\r\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\r\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\r\n      <xsd:complexType>\r\n        <xsd:choice maxOccurs=\"unbounded\">\r\n          <xsd:element name=\"metadata\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\r\n              <xsd:attribute ref=\"xml:space\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"assembly\">\r\n            <xsd:complexType>\r\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"data\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\r\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\r\n              <xsd:attribute ref=\"xml:space\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"resheader\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n        </xsd:choice>\r\n      </xsd:complexType>\r\n    </xsd:element>\r\n  </xsd:schema>\r\n  <resheader name=\"resmimetype\">\r\n    <value>text/microsoft-resx</value>\r\n  </resheader>\r\n  <resheader name=\"version\">\r\n    <value>2.0</value>\r\n  </resheader>\r\n  <resheader name=\"reader\">\r\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <resheader name=\"writer\">\r\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <data name=\"A comma separated list of navigation component filter names used to filter the blog out of the menu. Leave this blank so the blog menu item is not filtered from any of the menu views. There are some standard filter names like topnav and breadcrumbs but it is also possible to use custom names with custom views. As soon as you populate this field it becomes filtered to only show the blog menu item in the included views, whereas blank means unfiltered.\" xml:space=\"preserve\">\r\n    <value>Un elenco separato da virgola dei nomi dei filtri dei componenti di navigazione utilizzati per filtrare il blog dal menu. Lascia questo vuoto in modo che l'elemento del menu del blog non venga filtrato da nessuna delle visualizzazioni del menu. Esistono alcuni nomi di filtri standard come topnav e breadcrumbs, ma è anche possibile utilizzare nomi personalizzati con visualizzazioni personalizzate. Non appena si popola questo campo, viene filtrato per mostrare solo la voce di menu del blog nelle viste incluse, mentre vuoto significa non filtrati.</value>\r\n  </data>\r\n  <data name=\"About me\" xml:space=\"preserve\">\r\n    <value>Riguardo a me</value>\r\n  </data>\r\n  <data name=\"Add Blog To Menu\" xml:space=\"preserve\">\r\n    <value>Aggiungi Blog al Menu</value>\r\n  </data>\r\n  <data name=\"Add CSS Url\" xml:space=\"preserve\">\r\n    <value>Aggiungi CSS Url</value>\r\n  </data>\r\n  <data name=\"Add Javascript Url\" xml:space=\"preserve\">\r\n    <value>Aggiungi Javascript Url</value>\r\n  </data>\r\n  <data name=\"Add the blog as a top level menu item. There are multiple other ways of adding the blog to the menu. You can make a page that links to /blog or it can be done from the navigation.xml file. If you see it in the menu more than once it means you have multiple ways it is configured to be added.\" xml:space=\"preserve\">\r\n    <value>Aggiungi il blog come elemento di menu di livello superiore. Ci sono molti altri modi per aggiungere il blog al menu. Puoi creare una pagina che rimandi a /blog o che possa essere eseguita dal file navigation.xml. Se lo vedi nel menu più di una volta significa che hai diversi modi per configurarlo.</value>\r\n  </data>\r\n  <data name=\"Any\" xml:space=\"preserve\">\r\n    <value>Qualunque</value>\r\n  </data>\r\n  <data name=\"Archives\" xml:space=\"preserve\">\r\n    <value>Archivi</value>\r\n  </data>\r\n  <data name=\"Are you sure you want to delete the post {0}? You cannot undo this action.\" xml:space=\"preserve\">\r\n    <value>Sei sicuro di voler eliminare il post {0}? Non puoi tornare indietro.</value>\r\n  </data>\r\n  <data name=\"Author\" xml:space=\"preserve\">\r\n    <value>Autore</value>\r\n  </data>\r\n  <data name=\"Blog Menu Links To Newest Post\" xml:space=\"preserve\">\r\n    <value>Menu blog link al post più recente</value>\r\n  </data>\r\n  <data name=\"Blog Menu Position\" xml:space=\"preserve\">\r\n    <value>Posizione del menu Blog</value>\r\n  </data>\r\n  <data name=\"Blog Page Menu Text\" xml:space=\"preserve\">\r\n    <value>Testo del menu pagina Blog</value>\r\n  </data>\r\n  <data name=\"Blog Page Menu Visibility\" xml:space=\"preserve\">\r\n    <value>Visibilità del menu pagina Blog</value>\r\n  </data>\r\n  <data name=\"Blog Page Title\" xml:space=\"preserve\">\r\n    <value>Titolo della pagina del Blog</value>\r\n  </data>\r\n  <data name=\"Cancel\" xml:space=\"preserve\">\r\n    <value>Annulla</value>\r\n  </data>\r\n  <data name=\"Categories\" xml:space=\"preserve\">\r\n    <value>Categorie</value>\r\n  </data>\r\n  <data name=\"Comma Separated Channel Categories\" xml:space=\"preserve\">\r\n    <value>Categorie canali separati da virgola</value>\r\n  </data>\r\n  <data name=\"Comment Notification Email\" xml:space=\"preserve\">\r\n    <value>Email per la notifica dei commenti</value>\r\n  </data>\r\n  <data name=\"Comments\" xml:space=\"preserve\">\r\n    <value>Commenti</value>\r\n  </data>\r\n  <data name=\"Content\" xml:space=\"preserve\">\r\n    <value>Contenuto</value>\r\n  </data>\r\n  <data name=\"Content Index\" xml:space=\"preserve\">\r\n    <value>Indice contenuti</value>\r\n  </data>\r\n  <data name=\"Correlation Key\" xml:space=\"preserve\">\r\n    <value>Chiave correlata</value>\r\n  </data>\r\n  <data name=\"Date Format\" xml:space=\"preserve\">\r\n    <value>Formato data</value>\r\n  </data>\r\n  <data name=\"Days To Comment\" xml:space=\"preserve\">\r\n    <value>Giorni per commentare</value>\r\n  </data>\r\n  <data name=\"Default Page\" xml:space=\"preserve\">\r\n    <value>Pagina predefinita</value>\r\n  </data>\r\n  <data name=\"Delete\" xml:space=\"preserve\">\r\n    <value>Elimina</value>\r\n  </data>\r\n  <data name=\"Developer Tools - {0}\" xml:space=\"preserve\">\r\n    <value>Strumenti per sviluppatori - {0}</value>\r\n  </data>\r\n  <data name=\"Development\" xml:space=\"preserve\">\r\n    <value>Sviluppo</value>\r\n  </data>\r\n  <data name=\"Disqus Short Name\" xml:space=\"preserve\">\r\n    <value>Nome breve Disqus</value>\r\n  </data>\r\n  <data name=\"Edit\" xml:space=\"preserve\">\r\n    <value>Modifica</value>\r\n  </data>\r\n  <data name=\"Edit - {0}\" xml:space=\"preserve\">\r\n    <value>Modifica - {0}</value>\r\n  </data>\r\n  <data name=\"Environment\" xml:space=\"preserve\">\r\n    <value>Ambiente</value>\r\n  </data>\r\n  <data name=\"Feedburner Url\" xml:space=\"preserve\">\r\n    <value>Feedburner Url</value>\r\n  </data>\r\n  <data name=\"Home\" xml:space=\"preserve\">\r\n    <value>Home</value>\r\n  </data>\r\n  <data name=\"If checked the blog menu item will link to the most recent post instead of the post list.\" xml:space=\"preserve\">\r\n    <value>Se selezionato, l'elemento del menu del blog si collegherà al post più recente anziché all'elenco dei post.</value>\r\n  </data>\r\n  <data name=\"If checked will show the blog title and description at the top of the post list.\" xml:space=\"preserve\">\r\n    <value>Se selezionato mostrerà il titolo del blog e la descrizione nella parte superiore dell'elenco dei post.</value>\r\n  </data>\r\n  <data name=\"Image Path\" xml:space=\"preserve\">\r\n    <value>Percorso immagine</value>\r\n  </data>\r\n  <data name=\"Include Date In Post Urls\" xml:space=\"preserve\">\r\n    <value>Includi la data negli url dei post</value>\r\n  </data>\r\n  <data name=\"Invalid request\" xml:space=\"preserve\">\r\n    <value>Richiesta non valida</value>\r\n  </data>\r\n  <data name=\"Is Published\" xml:space=\"preserve\">\r\n    <value>Pubblicato</value>\r\n  </data>\r\n  <data name=\"Language Code\" xml:space=\"preserve\">\r\n    <value>Codice lingua</value>\r\n  </data>\r\n  <data name=\"Managing Editor Email\" xml:space=\"preserve\">\r\n    <value>Gestione editor email</value>\r\n  </data>\r\n  <data name=\"Meta Description\" xml:space=\"preserve\">\r\n    <value>Descrizioni Meta</value>\r\n  </data>\r\n  <data name=\"Moderate Comments\" xml:space=\"preserve\">\r\n    <value>Commenti moderati</value>\r\n  </data>\r\n  <data name=\"New Page\" xml:space=\"preserve\">\r\n    <value>Nuova pagina</value>\r\n  </data>\r\n  <data name=\"New Post\" xml:space=\"preserve\">\r\n    <value>Nuovo post</value>\r\n  </data>\r\n  <data name=\"Next Post\" xml:space=\"preserve\">\r\n    <value>Prossimo post</value>\r\n  </data>\r\n  <data name=\"Note that since this page has an override url, the menu item will link to the url so the page is used only as a means to add a link in the menu, the content is not used.\" xml:space=\"preserve\">\r\n    <value>Tieni presente che poiché questa pagina ha un URL di sostituzione, la voce di menu si collegherà all'URL in modo che la pagina venga utilizzata solo come mezzo per aggiungere un collegamento nel menu, il contenuto non viene utilizzato.</value>\r\n  </data>\r\n  <data name=\"Number of posts to show per page on the post list.\" xml:space=\"preserve\">\r\n    <value>Numero di post da mostrare per pagina nell'elenco dei post.</value>\r\n  </data>\r\n  <data name=\"On public pages, meta description is very important to search engines. It should be no longer than 135 – 160 characters long (although Google has recently been testing longer snippets). Any longer and search engines will chop the end off, so make sure any important keywords are nearer the front.\" xml:space=\"preserve\">\r\n    <value>Nelle pagine pubbliche, la descrizione meta è molto importante per i motori di ricerca. Non deve superare i 135-160 caratteri (sebbene Google abbia recentemente testato snippet più lunghi). Testi più lunghi verranno tagliati alla fine, quindi assicurati che le parole chiave più importanti siano all'inizio.</value>\r\n  </data>\r\n  <data name=\"Organization\" xml:space=\"preserve\">\r\n    <value>Organizazione</value>\r\n  </data>\r\n  <data name=\"Page Management\" xml:space=\"preserve\">\r\n    <value>Gestione pagine</value>\r\n  </data>\r\n  <data name=\"Person\" xml:space=\"preserve\">\r\n    <value>Persona</value>\r\n  </data>\r\n  <data name=\"Please enter a valid e-mail address\" xml:space=\"preserve\">\r\n    <value>Inserire un indirizzo email valido</value>\r\n  </data>\r\n  <data name=\"Posted in:\" xml:space=\"preserve\">\r\n    <value>Postato in:</value>\r\n  </data>\r\n  <data name=\"Posts Per Page\" xml:space=\"preserve\">\r\n    <value>Post per pagina</value>\r\n  </data>\r\n  <data name=\"Previous Post\" xml:space=\"preserve\">\r\n    <value>Post precedente</value>\r\n  </data>\r\n  <data name=\"Production\" xml:space=\"preserve\">\r\n    <value>Produzione</value>\r\n  </data>\r\n  <data name=\"Provide your Disqus site name aka short name to use Disqus instead of the internal comment system. Highly recommended.\" xml:space=\"preserve\">\r\n    <value>Fornire il nome del sito Disqus o il nome abbreviato per utilizzare Disqus anziché il sistema di commenti interni. Altamente raccomandato.</value>\r\n  </data>\r\n  <data name=\"Publication Date\" xml:space=\"preserve\">\r\n    <value>Data pubblicazione</value>\r\n  </data>\r\n  <data name=\"Publisher\" xml:space=\"preserve\">\r\n    <value>Editore</value>\r\n  </data>\r\n  <data name=\"Publisher Logo Height\" xml:space=\"preserve\">\r\n    <value>Altezza logo editore</value>\r\n  </data>\r\n  <data name=\"Publisher Logo Url\" xml:space=\"preserve\">\r\n    <value>Url logo editore</value>\r\n  </data>\r\n  <data name=\"Publisher Logo Width\" xml:space=\"preserve\">\r\n    <value>Larghezza logo editore</value>\r\n  </data>\r\n  <data name=\"Publisher Type\" xml:space=\"preserve\">\r\n    <value>Tipo editore</value>\r\n  </data>\r\n  <data name=\"Save\" xml:space=\"preserve\">\r\n    <value>Salva</value>\r\n  </data>\r\n  <data name=\"Script\" xml:space=\"preserve\">\r\n    <value>Script</value>\r\n  </data>\r\n  <data name=\"Show Blog Title and Description\" xml:space=\"preserve\">\r\n    <value>Mostra titolo e descrizione Blog</value>\r\n  </data>\r\n  <data name=\"Show Recent Posts on Default Page\" xml:space=\"preserve\">\r\n    <value>Mostra post recenti nella pagina predefinita</value>\r\n  </data>\r\n  <data name=\"Slug\" xml:space=\"preserve\">\r\n    <value>Url semplice</value>\r\n  </data>\r\n  <data name=\"slug is already in use.\" xml:space=\"preserve\">\r\n    <value>url semplice già utilizzato.</value>\r\n  </data>\r\n  <data name=\"Sort\" xml:space=\"preserve\">\r\n    <value>Ordina</value>\r\n  </data>\r\n  <data name=\"The description also is used as the channel description in the RSS feed.\" xml:space=\"preserve\">\r\n    <value>La descrizione viene anche utilizzata come descrizione del canale nel feed RSS.</value>\r\n  </data>\r\n  <data name=\"The page was created successfully.\" xml:space=\"preserve\">\r\n    <value>La pagina è stata creata correttamente.</value>\r\n  </data>\r\n  <data name=\"The page was updated successfully.\" xml:space=\"preserve\">\r\n    <value>La pagina è stata aggiornata correttamente.</value>\r\n  </data>\r\n  <data name=\"The position of the blog within the top level menu.\" xml:space=\"preserve\">\r\n    <value>La posizione del blog nel menu di livello superiore.</value>\r\n  </data>\r\n  <data name=\"This is used in meta data, see http://schema.org/logo.\" xml:space=\"preserve\">\r\n    <value>Questo è usato nei metadati, vedi http://schema.org/logo.</value>\r\n  </data>\r\n  <data name=\"This is used in meta data, see http://schema.org/publisher.\" xml:space=\"preserve\">\r\n    <value>Questo è usato nei metadati, vedi http://schema.org/publisher.</value>\r\n  </data>\r\n  <data name=\"This setting only applies to using the internal comment system, it does not impact Disqus comments.\" xml:space=\"preserve\">\r\n    <value>Questa impostazione si applica solo all'utilizzo del sistema di commenti interni, non ha alcun impatto sui commenti di Disqus.</value>\r\n  </data>\r\n  <data name=\"Title\" xml:space=\"preserve\">\r\n    <value>Titolo</value>\r\n  </data>\r\n  <data name=\"Url\" xml:space=\"preserve\">\r\n    <value>Url</value>\r\n  </data>\r\n  <data name=\"Use Meta Description In Feed\" xml:space=\"preserve\">\r\n    <value>Usa la descrione meta nel feed</value>\r\n  </data>\r\n  <data name=\"Webmaster Email\" xml:space=\"preserve\">\r\n    <value>Email webmaster</value>\r\n  </data>\r\n  <data name=\"With great power comes great responsibility. This page is intended for use by developers, for adding javscript and css into the page. Use this page only if you understand what you are doing.\" xml:space=\"preserve\">\r\n    <value>Con un grande potere viene una grande responsabilità. Questa pagina è destinata agli sviluppatori, per l'aggiunta di javscript e css nella pagina. Usa questa pagina solo se capisci cosa stai facendo.</value>\r\n  </data>\r\n  <data name=\"A page becomes a child page of another page if you enter the slug of the other page as the parent slug. The menu hierarchy is determined by the parent child relationship between pages. If you enter an invalid parent slug it will be ignored but will not cause any error. You can also manage the hierarchy from the Page Manager.\" xml:space=\"preserve\">\r\n    <value>Una pagina diventa una pagina figlio di un'altra pagina se si inserisce lo slug dell'altra pagina come slug genitore. La gerarchia dei menu è determinata dalla relazione padre figlio tra le pagine. Se inserisci uno slug genitore non valido, verrà ignorato ma non causerà alcun errore. È inoltre possibile gestire la gerarchia dal Gestore pagine.</value>\r\n  </data>\r\n  <data name=\"A page is visible to the public if the Is Published checkbox is checked and if the Publication Date is before the current moment, and if not protected by roles.\" xml:space=\"preserve\">\r\n    <value>Una pagina è visibile al pubblico se la casella Pubblicato è selezionata e se la data di pubblicazione è precedente ad ora e se non è protetta dai ruoli.</value>\r\n  </data>\r\n  <data name=\"Are you sure you want to delete the page {0}?\" xml:space=\"preserve\">\r\n    <value>Sei sicuro di voler eliminare la pagina {0}?</value>\r\n  </data>\r\n  <data name=\"Are you sure you want to delete the page {0}? You cannot undo this action.\" xml:space=\"preserve\">\r\n    <value>Sei sicuro di voler eliminare la pagina {0}? Non puoi tornare indietro.</value>\r\n  </data>\r\n  <data name=\"Are you sure you want to move the page {0} {1} {2}?\" xml:space=\"preserve\">\r\n    <value>Sei sicuro di voler spostare la pagina {0} {1} {2}?</value>\r\n  </data>\r\n  <data name=\"Are you sure you want to sort the child pages of {0} alphabetically?\" xml:space=\"preserve\">\r\n    <value>Sei sicuro di voler ordinare alfabeticamente le pagine figlie di {0}?</value>\r\n  </data>\r\n  <data name=\"Bad Request\" xml:space=\"preserve\">\r\n    <value>Richiesta errata</value>\r\n  </data>\r\n  <data name=\"Check this box if the current page is only meant as a parent container for other pages and has no content of it's own.\" xml:space=\"preserve\">\r\n    <value>Seleziona questa casella se la pagina corrente è intesa solo come contenitore genitore per altre pagine e non ha contenuto di sua proprietà.</value>\r\n  </data>\r\n  <data name=\"Developer Tools\" xml:space=\"preserve\">\r\n    <value>Strumenti per sviluppatori</value>\r\n  </data>\r\n  <data name=\"Edit Page\" xml:space=\"preserve\">\r\n    <value>Modifica pagina</value>\r\n  </data>\r\n  <data name=\"Enable Comments\" xml:space=\"preserve\">\r\n    <value>Abilita commenti</value>\r\n  </data>\r\n  <data name=\"Forbidden\" xml:space=\"preserve\">\r\n    <value>Proibito</value>\r\n  </data>\r\n  <data name=\"If the page is a parent of other pages, you check this box to make it show a menu of links to the child pages.\" xml:space=\"preserve\">\r\n    <value>Se la pagina è padre di altre pagine, seleziona questa casella per mostrare un menu di collegamenti alle pagine secondarie.</value>\r\n  </data>\r\n  <data name=\"If you populate this field with an url then the page is used only as a means to add the url as a menu item. The page content in that case is not used or visible to users. You can use a relative url or a fully qualified url so it can link to external sites. Use this with caution and note that once populated the only way to edit the page is from the link in Page Manager.\" xml:space=\"preserve\">\r\n    <value>Se si popola questo campo con un url, la pagina viene utilizzata solo come mezzo per aggiungere l'url come voce di menu. Il contenuto della pagina in quel caso non viene utilizzato o visibile agli utenti. Puoi utilizzare un url relativo o un URL assoluto in modo che possa collegarsi a siti esterni. Usalo con cautela e nota che una volta popolato l'unico modo per modificare la pagina è dal link Gestione pagine.</value>\r\n  </data>\r\n  <data name=\"Leave blank to include this page in all menu views. A comma separated list of menu filter names can be used to filter the page out of the various menu views. For example enter breadcrumbs to leave a page out of other views but keep it in breadcrumbs. Standard menu filter names include: topnav,breadcrumbs,childtree\" xml:space=\"preserve\">\r\n    <value>Lascia vuoto per includere questa pagina in tutte le visualizzazioni del menu. Un elenco separato da virgole di nomi di filtri di menu può essere utilizzato per filtrare la pagina dalle varie visualizzazioni di menu. Ad esempio, inserisci breadcrumbs per lasciare una pagina fuori dalle altre visualizzazioni ma mantienila nel breadcrumbs. I nomi dei filtri di menu standard includono: topnav, breadcrumbs, childtree</value>\r\n  </data>\r\n  <data name=\"Leave View Roles blank for public pages. You can put comma separated role names here to make a page visible only to users who are role members.\" xml:space=\"preserve\">\r\n    <value>Lascia vuota la vista ruoli per le pagine pubbliche. Puoi mettere i nomi dei ruoli separati da virgola qui per rendere una pagina visibile solo agli utenti che sono membri di ruolo.</value>\r\n  </data>\r\n  <data name=\"Manage Page Hierarchy\" xml:space=\"preserve\">\r\n    <value>Gestione gerarchia di pagine</value>\r\n  </data>\r\n  <data name=\"Menu Filters\" xml:space=\"preserve\">\r\n    <value>Filtri menu</value>\r\n  </data>\r\n  <data name=\"New Child Page\" xml:space=\"preserve\">\r\n    <value>Nuova pagina figlio</value>\r\n  </data>\r\n  <data name=\"New Root Level Page\" xml:space=\"preserve\">\r\n    <value>Nuova pagina radice</value>\r\n  </data>\r\n  <data name=\"No Content Only Show Child Menu\" xml:space=\"preserve\">\r\n    <value>Nessun contenuto mostra solo il menu secondario</value>\r\n  </data>\r\n  <data name=\"No Pages Found\" xml:space=\"preserve\">\r\n    <value>Nessuna pagina trovata</value>\r\n  </data>\r\n  <data name=\"No pages have been created yet, if this is your site, please login to create your first page\" xml:space=\"preserve\">\r\n    <value>Nessuna pagina è stata ancora creata, se questo è il tuo sito, effettua il login per creare la tua prima pagina</value>\r\n  </data>\r\n  <data name=\"On most pages you will prbably want the page heading to show, but maybe not on the home page. If unchecked then the page heading will not be shown.\" xml:space=\"preserve\">\r\n    <value>Sulla maggior parte delle pagine probabilmente vorrai mostrare l'intestazione della pagina, ma forse non sulla home page. Se deselezionata, l'intestazione della pagina non verrà mostrata.</value>\r\n  </data>\r\n  <data name=\"Override Url\" xml:space=\"preserve\">\r\n    <value>Sovrascrivi Url</value>\r\n  </data>\r\n  <data name=\"Page Heading\" xml:space=\"preserve\">\r\n    <value>Intestazione pagina</value>\r\n  </data>\r\n  <data name=\"Page Not Found\" xml:space=\"preserve\">\r\n    <value>Pagina non trovata</value>\r\n  </data>\r\n  <data name=\"Page Order\" xml:space=\"preserve\">\r\n    <value>Ordinamento pagina</value>\r\n  </data>\r\n  <data name=\"Parent Slug\" xml:space=\"preserve\">\r\n    <value>Url semplice padre</value>\r\n  </data>\r\n  <data name=\"Select Roles\" xml:space=\"preserve\">\r\n    <value>Seleziona ruoli</value>\r\n  </data>\r\n  <data name=\"Settings\" xml:space=\"preserve\">\r\n    <value>Impostazioni</value>\r\n  </data>\r\n  <data name=\"Show Child Menu\" xml:space=\"preserve\">\r\n    <value>Mostra sottomenu</value>\r\n  </data>\r\n  <data name=\"Show Heading\" xml:space=\"preserve\">\r\n    <value>Mostra intestazione</value>\r\n  </data>\r\n  <data name=\"Site Home\" xml:space=\"preserve\">\r\n    <value>Home sito</value>\r\n  </data>\r\n  <data name=\"Sorry, but the page requires authentication.\" xml:space=\"preserve\">\r\n    <value>La pagina richiede l'autenticazione.</value>\r\n  </data>\r\n  <data name=\"Sorry, but the page you were looking for can't be found.\" xml:space=\"preserve\">\r\n    <value>La pagina che stai cercando non è stata trovata.</value>\r\n  </data>\r\n  <data name=\"Sorry, but you don't have permission to access this page.\" xml:space=\"preserve\">\r\n    <value>Non hai le autorizzazioni per accedere a questa pagina.</value>\r\n  </data>\r\n  <data name=\"Sort Child Pages Alpha\" xml:space=\"preserve\">\r\n    <value>Ordina sottopagine</value>\r\n  </data>\r\n  <data name=\"The page {0} has child pages, if you delete it, all of the child pages will become root level pages. You should delete child pages before deleting the parent page. Are you sure you want to delete {1}?\" xml:space=\"preserve\">\r\n    <value>La pagina {0} ha pagine figlio, se la elimini, tutte le pagine figlio diventeranno pagine di livello root. È necessario eliminare le pagine figlio prima di eliminare la pagina padre. Sei sicuro di voler eliminare {1}?</value>\r\n  </data>\r\n  <data name=\"This is the heading and title of the page. For new pages the url slug will be generated based on the title.\" xml:space=\"preserve\">\r\n    <value>Questa è l'intestazione e il titolo della pagina. Per le nuove pagine l'url slug verrà generato in base al titolo.</value>\r\n  </data>\r\n  <data name=\"This is the sort order of this page within it's subtree of the menu. You can also move pages around easily from Page Manager, which will update the page order.\" xml:space=\"preserve\">\r\n    <value>Questo è l'ordinamento di questa pagina all'interno della sottostruttura del menu. Puoi anche spostare facilmente le pagine da Gestore pagine, che aggiornerà l'ordine delle pagine.</value>\r\n  </data>\r\n  <data name=\"Unauthorized\" xml:space=\"preserve\">\r\n    <value>Non autorizzato</value>\r\n  </data>\r\n  <data name=\"Unexpected Error\" xml:space=\"preserve\">\r\n    <value>Errore inaspettato</value>\r\n  </data>\r\n  <data name=\"View\" xml:space=\"preserve\">\r\n    <value>Mostra</value>\r\n  </data>\r\n  <data name=\"View Roles\" xml:space=\"preserve\">\r\n    <value>Visibile ai rouli</value>\r\n  </data>\r\n  <data name=\"Well, this is embarrassing. An error occurred while processing your request. Rest assured, this problem has been logged and hamsters have been released to fix the problem.\" xml:space=\"preserve\">\r\n    <value>Beh, questo è imbarazzante. Si è verificato un errore durante l'elaborazione della richiesta. Questo problema è stato registrato e i tecnici si occuperanno di risolvere il problema al più presto.</value>\r\n  </data>\r\n  <data name=\"You can drag and drop page nodes in the treeview below to move them around in the site hierarchy or to change their sort position. Click on a page to show a menu of commands related to that page. Note that changes will not be reflected in the main menu until you refresh the page.\" xml:space=\"preserve\">\r\n    <value>È possibile trascinare e rilasciare i nodi della pagina nella vista albero qui di seguito per spostarli nella gerarchia del sito o per modificare la loro posizione di ordinamento. Clicca su una pagina per mostrare un menu di comandi relativi a quella pagina. Si noti che le modifiche non si rifletteranno nel menu principale fino a quando non si aggiorna la pagina.</value>\r\n  </data>\r\n  <data name=\"Your browser sent a request that this server could not understand.\" xml:space=\"preserve\">\r\n    <value>Il tuo browser ha inviato una richiesta che questo server non è riuscito a capire.</value>\r\n  </data>\r\n  <data name=\"Content Settings\" xml:space=\"preserve\">\r\n    <value>Impostazioni contenuti</value>\r\n  </data>\r\n  <data name=\"Content Settings were successfully updated.\" xml:space=\"preserve\">\r\n    <value>Impostazioni contenuti salvate correttamente.</value>\r\n  </data>\r\n  <data name=\"Image Url\" xml:space=\"preserve\">\r\n    <value>Url immagine</value>\r\n  </data>\r\n  <data name=\"Is Featured\" xml:space=\"preserve\">\r\n    <value>In primo piano</value>\r\n  </data>\r\n  <data name=\"Thumbnail Url\" xml:space=\"preserve\">\r\n    <value>Url miniatura</value>\r\n  </data>\r\n  <data name=\"Show Featured Posts on Default Page\" xml:space=\"preserve\">\r\n    <value>Mostra post in primo piano nella pagina predefinita</value>\r\n  </data>\r\n  <data name=\"Featured Posts\" xml:space=\"preserve\">\r\n    <value>Messaggi in primo piano</value>\r\n  </data>\r\n  <data name=\"Recent Posts\" xml:space=\"preserve\">\r\n    <value>Post recenti</value>\r\n  </data>\r\n  <data name=\"Creator Twitter Handle\" xml:space=\"preserve\">\r\n    <value>Twitter Handle autore</value>\r\n  </data>\r\n  <data name=\"Date Required\" xml:space=\"preserve\">\r\n    <value>Richiesta data</value>\r\n  </data>\r\n  <data name=\"Description\" xml:space=\"preserve\">\r\n    <value>Descrizione</value>\r\n  </data>\r\n  <data name=\"Disable HTML Editor\" xml:space=\"preserve\">\r\n    <value>Disattiva editor HTML</value>\r\n  </data>\r\n  <data name=\"Publish Later:\" xml:space=\"preserve\">\r\n    <value>Pubblica il:</value>\r\n  </data>\r\n  <data name=\"Publish Now\" xml:space=\"preserve\">\r\n    <value>Pubblica ora</value>\r\n  </data>\r\n  <data name=\"Publisher Twitter Handle\" xml:space=\"preserve\">\r\n    <value>Twitter Handle editore</value>\r\n  </data>\r\n  <data name=\"Save Draft\" xml:space=\"preserve\">\r\n    <value>Salva bozza</value>\r\n  </data>\r\n  <data name=\"Site Name\" xml:space=\"preserve\">\r\n    <value>Nome sito</value>\r\n  </data>\r\n  <data name=\"To publish later you must enter a date.\" xml:space=\"preserve\">\r\n    <value>Inserire una data di pubblicazione.</value>\r\n  </data>\r\n  <data name=\"Version History\" xml:space=\"preserve\">\r\n    <value>Cronologia versione</value>\r\n  </data>\r\n  <data name=\"If checked will show the blog categories in the side bar\" xml:space=\"preserve\">\r\n    <value>Se selezionato mostrerà le categorie del blog nella barra laterale</value>\r\n  </data>\r\n  <data name=\"If checked will show the blog archives in the side bar\" xml:space=\"preserve\">\r\n    <value>Se selezionato mostrerà gli archivi del blog nella barra laterale</value>\r\n  </data>\r\n  <data name=\"Show the blog categories in the side bar\" xml:space=\"preserve\">\r\n    <value>Mostra le categorie del blog nella barra laterale</value>\r\n  </data>\r\n  <data name=\"Show the blog archives in the side bar\" xml:space=\"preserve\">\r\n    <value>Mostra gli archivi del blog nella barra laterale</value>\r\n  </data>\r\n  <data name=\"Created\" xml:space=\"preserve\">\r\n    <value>Creato</value>\r\n  </data>\r\n  <data name=\"Created By\" xml:space=\"preserve\">\r\n    <value>Creato da</value>\r\n  </data>\r\n  <data name=\"Last Updated\" xml:space=\"preserve\">\r\n    <value>Ultimo aggiornamento</value>\r\n  </data>\r\n  <data name=\"Updated\" xml:space=\"preserve\">\r\n    <value>Aggiornato</value>\r\n  </data>\r\n  <data name=\"Updated By\" xml:space=\"preserve\">\r\n    <value>Aggiornato da</value>\r\n  </data>\r\n  <data name=\"Show Created By\" xml:space=\"preserve\">\r\n    <value>Mostra Creato da</value>\r\n  </data>\r\n  <data name=\"Show Created Date\" xml:space=\"preserve\">\r\n    <value>Mostra data di creazione</value>\r\n  </data>\r\n  <data name=\"Show Last Modified By\" xml:space=\"preserve\">\r\n    <value>Mostra ultima modifica di</value>\r\n  </data>\r\n  <data name=\"Show Last Modified Date\" xml:space=\"preserve\">\r\n    <value>Mostra data ultima modifica</value>\r\n  </data>\r\n  <data name=\"Show / hide the following information below the main content of the page.\" xml:space=\"preserve\">\r\n    <value>Mostra/nascondi le seguenti informazioni sotto il contenuto principale della pagina.</value>\r\n  </data>\r\n  <data name=\"Show / hide the following information below the main content of pages (site default).\" xml:space=\"preserve\">\r\n    <value>Mostra/nascondi le seguenti informazioni sotto il contenuto principale delle pagine (impostazione predefinita del sito).</value>\r\n  </data>\r\n</root>"
  },
  {
    "path": "src/sourceDev.WebApp/GlobalResources/SimpleContent.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"A comma separated list of navigation component filter names used to filter the blog out of the menu. Leave this blank so the blog menu item is not filtered from any of the menu views. There are some standard filter names like topnav and breadcrumbs but it is also possible to use custom names with custom views. As soon as you populate this field it becomes filtered to only show the blog menu item in the included views, whereas blank means unfiltered.\" xml:space=\"preserve\">\n    <value>A comma separated list of navigation component filter names used to filter the blog out of the menu. Leave this blank so the blog menu item is not filtered from any of the menu views. There are some standard filter names like topnav and breadcrumbs but it is also possible to use custom names with custom views. As soon as you populate this field it becomes filtered to only show the blog menu item in the included views, whereas blank means unfiltered.</value>\n  </data>\n  <data name=\"About me\" xml:space=\"preserve\">\n    <value>About me</value>\n  </data>\n  <data name=\"Add Blog To Menu\" xml:space=\"preserve\">\n    <value>Add Blog To Menu</value>\n  </data>\n  <data name=\"Add CSS Url\" xml:space=\"preserve\">\n    <value>Add CSS Url</value>\n  </data>\n  <data name=\"Add Javascript Url\" xml:space=\"preserve\">\n    <value>Add Javascript Url</value>\n  </data>\n  <data name=\"Add the blog as a top level menu item. There are multiple other ways of adding the blog to the menu. You can make a page that links to /blog or it can be done from the navigation.xml file. If you see it in the menu more than once it means you have multiple ways it is configured to be added.\" xml:space=\"preserve\">\n    <value>Add the blog as a top level menu item. There are multiple other ways of adding the blog to the menu. You can make a page that links to /blog or it can be done from the navigation.xml file. If you see it in the menu more than once it means you have multiple ways it is configured to be added.</value>\n  </data>\n  <data name=\"Any\" xml:space=\"preserve\">\n    <value>Any</value>\n  </data>\n  <data name=\"Archives\" xml:space=\"preserve\">\n    <value>Archives</value>\n  </data>\n  <data name=\"Are you sure you want to delete the post {0}? You cannot undo this action.\" xml:space=\"preserve\">\n    <value>Are you sure you want to delete the post {0}? You cannot undo this action.</value>\n  </data>\n  <data name=\"Author\" xml:space=\"preserve\">\n    <value>Author</value>\n  </data>\n  <data name=\"Blog Menu Links To Newest Post\" xml:space=\"preserve\">\n    <value>Blog Menu Links To Newest Post</value>\n  </data>\n  <data name=\"Blog Menu Position\" xml:space=\"preserve\">\n    <value>Blog Menu Position</value>\n  </data>\n  <data name=\"Blog Page Menu Text\" xml:space=\"preserve\">\n    <value>Blog Page Menu Text</value>\n  </data>\n  <data name=\"Blog Page Menu Visibility\" xml:space=\"preserve\">\n    <value>Blog Page Menu Visibility</value>\n  </data>\n  <data name=\"Blog Page Title\" xml:space=\"preserve\">\n    <value>Blog Page Title</value>\n  </data>\n  <data name=\"Cancel\" xml:space=\"preserve\">\n    <value>Cancel</value>\n  </data>\n  <data name=\"Categories\" xml:space=\"preserve\">\n    <value>Categories</value>\n  </data>\n  <data name=\"Comma Separated Channel Categories\" xml:space=\"preserve\">\n    <value>Comma Separated Channel Categories</value>\n  </data>\n  <data name=\"Comment Notification Email\" xml:space=\"preserve\">\n    <value>Comment Notification Email</value>\n  </data>\n  <data name=\"Comments\" xml:space=\"preserve\">\n    <value>Comments</value>\n  </data>\n  <data name=\"Content\" xml:space=\"preserve\">\n    <value>Content</value>\n  </data>\n  <data name=\"Content Index\" xml:space=\"preserve\">\n    <value>Content Index</value>\n  </data>\n  <data name=\"Correlation Key\" xml:space=\"preserve\">\n    <value>Correlation Key</value>\n  </data>\n  <data name=\"Date Format\" xml:space=\"preserve\">\n    <value>Date Format</value>\n  </data>\n  <data name=\"Days To Comment\" xml:space=\"preserve\">\n    <value>Days To Comment</value>\n  </data>\n  <data name=\"Default Page\" xml:space=\"preserve\">\n    <value>Default Page</value>\n  </data>\n  <data name=\"Delete\" xml:space=\"preserve\">\n    <value>Delete</value>\n  </data>\n  <data name=\"Developer Tools - {0}\" xml:space=\"preserve\">\n    <value>Developer Tools - {0}</value>\n  </data>\n  <data name=\"Development\" xml:space=\"preserve\">\n    <value>Development</value>\n  </data>\n  <data name=\"Disqus Short Name\" xml:space=\"preserve\">\n    <value>Disqus Short Name</value>\n  </data>\n  <data name=\"Edit\" xml:space=\"preserve\">\n    <value>Edit</value>\n  </data>\n  <data name=\"Edit - {0}\" xml:space=\"preserve\">\n    <value>Edit - {0}</value>\n  </data>\n  <data name=\"Environment\" xml:space=\"preserve\">\n    <value>Environment</value>\n  </data>\n  <data name=\"Feedburner Url\" xml:space=\"preserve\">\n    <value>Feedburner Url</value>\n  </data>\n  <data name=\"Home\" xml:space=\"preserve\">\n    <value>Home</value>\n  </data>\n  <data name=\"If checked the blog menu item will link to the most recent post instead of the post list.\" xml:space=\"preserve\">\n    <value>If checked the blog menu item will link to the most recent post instead of the post list.</value>\n  </data>\n  <data name=\"If checked will show the blog title and description at the top of the post list.\" xml:space=\"preserve\">\n    <value>If checked will show the blog title and description at the top of the post list.</value>\n  </data>\n  <data name=\"Image Path\" xml:space=\"preserve\">\n    <value>Image Path</value>\n  </data>\n  <data name=\"Include Date In Post Urls\" xml:space=\"preserve\">\n    <value>Include Date In Post Urls</value>\n  </data>\n  <data name=\"Invalid request\" xml:space=\"preserve\">\n    <value>Invalid request</value>\n  </data>\n  <data name=\"Is Published\" xml:space=\"preserve\">\n    <value>Is Published</value>\n  </data>\n  <data name=\"Language Code\" xml:space=\"preserve\">\n    <value>Language Code</value>\n  </data>\n  <data name=\"Managing Editor Email\" xml:space=\"preserve\">\n    <value>Managing Editor Email</value>\n  </data>\n  <data name=\"Meta Description\" xml:space=\"preserve\">\n    <value>Meta Description</value>\n  </data>\n  <data name=\"Moderate Comments\" xml:space=\"preserve\">\n    <value>Moderate Comments</value>\n  </data>\n  <data name=\"New Page\" xml:space=\"preserve\">\n    <value>New Page</value>\n  </data>\n  <data name=\"New Post\" xml:space=\"preserve\">\n    <value>New Post</value>\n  </data>\n  <data name=\"Next Post\" xml:space=\"preserve\">\n    <value>Next Post</value>\n  </data>\n  <data name=\"Note that since this page has an override url, the menu item will link to the url so the page is used only as a means to add a link in the menu, the content is not used.\" xml:space=\"preserve\">\n    <value>Note that since this page has an override url, the menu item will link to the url so the page is used only as a means to add a link in the menu, the content is not used.</value>\n  </data>\n  <data name=\"Number of posts to show per page on the post list.\" xml:space=\"preserve\">\n    <value>Number of posts to show per page on the post list.</value>\n  </data>\n  <data name=\"On public pages, meta description is very important to search engines. It should be no longer than 135 – 160 characters long (although Google has recently been testing longer snippets). Any longer and search engines will chop the end off, so make sure any important keywords are nearer the front.\" xml:space=\"preserve\">\n    <value>On public pages, meta description is very important to search engines. It should be no longer than 135 – 160 characters long (although Google has recently been testing longer snippets). Any longer and search engines will chop the end off, so make sure any important keywords are nearer the front.</value>\n  </data>\n  <data name=\"Organization\" xml:space=\"preserve\">\n    <value>Organization</value>\n  </data>\n  <data name=\"Page Management\" xml:space=\"preserve\">\n    <value>Page Management</value>\n  </data>\n  <data name=\"Person\" xml:space=\"preserve\">\n    <value>Person</value>\n  </data>\n  <data name=\"Please enter a valid e-mail address\" xml:space=\"preserve\">\n    <value>Please enter a valid e-mail address</value>\n  </data>\n  <data name=\"Posted in:\" xml:space=\"preserve\">\n    <value>Posted in:</value>\n  </data>\n  <data name=\"Posts Per Page\" xml:space=\"preserve\">\n    <value>Posts Per Page</value>\n  </data>\n  <data name=\"Previous Post\" xml:space=\"preserve\">\n    <value>Previous Post</value>\n  </data>\n  <data name=\"Production\" xml:space=\"preserve\">\n    <value>Production</value>\n  </data>\n  <data name=\"Provide your Disqus site name aka short name to use Disqus instead of the internal comment system. Highly recommended.\" xml:space=\"preserve\">\n    <value>Provide your Disqus site name aka short name to use Disqus instead of the internal comment system. Highly recommended.</value>\n  </data>\n  <data name=\"Publication Date\" xml:space=\"preserve\">\n    <value>Publication Date</value>\n  </data>\n  <data name=\"Publisher\" xml:space=\"preserve\">\n    <value>Publisher</value>\n  </data>\n  <data name=\"Publisher Logo Height\" xml:space=\"preserve\">\n    <value>Publisher Logo Height</value>\n  </data>\n  <data name=\"Publisher Logo Url\" xml:space=\"preserve\">\n    <value>Publisher Logo Url</value>\n  </data>\n  <data name=\"Publisher Logo Width\" xml:space=\"preserve\">\n    <value>Publisher Logo Width</value>\n  </data>\n  <data name=\"Publisher Type\" xml:space=\"preserve\">\n    <value>Publisher Type</value>\n  </data>\n  <data name=\"Save\" xml:space=\"preserve\">\n    <value>Save</value>\n  </data>\n  <data name=\"Script\" xml:space=\"preserve\">\n    <value>Script</value>\n  </data>\n  <data name=\"Show Blog Title and Description\" xml:space=\"preserve\">\n    <value>Show Blog Title and Description</value>\n  </data>\n  <data name=\"Show Recent Posts on Default Page\" xml:space=\"preserve\">\n    <value>Show Recent Posts on Default Page</value>\n  </data>\n  <data name=\"Slug\" xml:space=\"preserve\">\n    <value>Slug</value>\n  </data>\n  <data name=\"slug is already in use.\" xml:space=\"preserve\">\n    <value>slug is already in use.</value>\n  </data>\n  <data name=\"Sort\" xml:space=\"preserve\">\n    <value>Sort</value>\n  </data>\n  <data name=\"The description also is used as the channel description in the RSS feed.\" xml:space=\"preserve\">\n    <value>The description also is used as the channel description in the RSS feed.</value>\n  </data>\n  <data name=\"The page was created successfully.\" xml:space=\"preserve\">\n    <value>The page was created successfully.</value>\n  </data>\n  <data name=\"The page was updated successfully.\" xml:space=\"preserve\">\n    <value>The page was updated successfully.</value>\n  </data>\n  <data name=\"The position of the blog within the top level menu.\" xml:space=\"preserve\">\n    <value>The position of the blog within the top level menu.</value>\n  </data>\n  <data name=\"This is used in meta data, see http://schema.org/logo.\" xml:space=\"preserve\">\n    <value>This is used in meta data, see http://schema.org/logo.</value>\n  </data>\n  <data name=\"This is used in meta data, see http://schema.org/publisher.\" xml:space=\"preserve\">\n    <value>This is used in meta data, see http://schema.org/publisher.</value>\n  </data>\n  <data name=\"This setting only applies to using the internal comment system, it does not impact Disqus comments.\" xml:space=\"preserve\">\n    <value>This setting only applies to using the internal comment system, it does not impact Disqus comments.</value>\n  </data>\n  <data name=\"Title\" xml:space=\"preserve\">\n    <value>Title</value>\n  </data>\n  <data name=\"Url\" xml:space=\"preserve\">\n    <value>Url</value>\n  </data>\n  <data name=\"Use Meta Description In Feed\" xml:space=\"preserve\">\n    <value>Use Meta Description In Feed</value>\n  </data>\n  <data name=\"Webmaster Email\" xml:space=\"preserve\">\n    <value>Webmaster Email</value>\n  </data>\n  <data name=\"With great power comes great responsibility. This page is intended for use by developers, for adding javscript and css into the page. Use this page only if you understand what you are doing.\" xml:space=\"preserve\">\n    <value>With great power comes great responsibility. This page is intended for use by developers, for adding javscript and css into the page. Use this page only if you understand what you are doing.</value>\n  </data>\n  <data name=\"A page becomes a child page of another page if you enter the slug of the other page as the parent slug. The menu hierarchy is determined by the parent child relationship between pages. If you enter an invalid parent slug it will be ignored but will not cause any error. You can also manage the hierarchy from the Page Manager.\" xml:space=\"preserve\">\n    <value>A page becomes a child page of another page if you enter the slug of the other page as the parent slug. The menu hierarchy is determined by the parent child relationship between pages. If you enter an invalid parent slug it will be ignored but will not cause any error. You can also manage the hierarchy from the Page Manager.</value>\n  </data>\n  <data name=\"A page is visible to the public if the Is Published checkbox is checked and if the Publication Date is before the current moment, and if not protected by roles.\" xml:space=\"preserve\">\n    <value>A page is visible to the public if the Is Published checkbox is checked and if the Publication Date is before the current moment, and if not protected by roles.</value>\n  </data>\n  <data name=\"Are you sure you want to delete the page {0}?\" xml:space=\"preserve\">\n    <value>Are you sure you want to delete the page {0}?</value>\n  </data>\n  <data name=\"Are you sure you want to delete the page {0}? You cannot undo this action.\" xml:space=\"preserve\">\n    <value>Are you sure you want to delete the page {0}? You cannot undo this action.</value>\n  </data>\n  <data name=\"Are you sure you want to move the page {0} {1} {2}?\" xml:space=\"preserve\">\n    <value>Are you sure you want to move the page {0} {1} {2}?</value>\n  </data>\n  <data name=\"Are you sure you want to sort the child pages of {0} alphabetically?\" xml:space=\"preserve\">\n    <value>Are you sure you want to sort the child pages of {0} alphabetically?</value>\n  </data>\n  <data name=\"Bad Request\" xml:space=\"preserve\">\n    <value>Bad Request</value>\n  </data>\n  <data name=\"Check this box if the current page is only meant as a parent container for other pages and has no content of it's own.\" xml:space=\"preserve\">\n    <value>Check this box if the current page is only meant as a parent container for other pages and has no content of it's own.</value>\n  </data>\n  <data name=\"Developer Tools\" xml:space=\"preserve\">\n    <value>Developer Tools</value>\n  </data>\n  <data name=\"Edit Page\" xml:space=\"preserve\">\n    <value>Edit Page</value>\n  </data>\n  <data name=\"Enable Comments\" xml:space=\"preserve\">\n    <value>Enable Comments</value>\n  </data>\n  <data name=\"Forbidden\" xml:space=\"preserve\">\n    <value>Forbidden</value>\n  </data>\n  <data name=\"If the page is a parent of other pages, you check this box to make it show a menu of links to the child pages.\" xml:space=\"preserve\">\n    <value>If the page is a parent of other pages, you check this box to make it show a menu of links to the child pages.</value>\n  </data>\n  <data name=\"If you populate this field with an url then the page is used only as a means to add the url as a menu item. The page content in that case is not used or visible to users. You can use a relative url or a fully qualified url so it can link to external sites. Use this with caution and note that once populated the only way to edit the page is from the link in Page Manager.\" xml:space=\"preserve\">\n    <value>If you populate this field with an url then the page is used only as a means to add the url as a menu item. The page content in that case is not used or visible to users. You can use a relative url or a fully qualified url so it can link to external sites. Use this with caution and note that once populated the only way to edit the page is from the link in Page Manager.</value>\n  </data>\n  <data name=\"Leave blank to include this page in all menu views. A comma separated list of menu filter names can be used to filter the page out of the various menu views. For example enter breadcrumbs to leave a page out of other views but keep it in breadcrumbs. Standard menu filter names include: topnav,breadcrumbs,childtree\" xml:space=\"preserve\">\n    <value>Leave blank to include this page in all menu views. A comma separated list of menu filter names can be used to filter the page out of the various menu views. For example enter breadcrumbs to leave a page out of other views but keep it in breadcrumbs. Standard menu filter names include: topnav,breadcrumbs,childtree</value>\n  </data>\n  <data name=\"Leave View Roles blank for public pages. You can put comma separated role names here to make a page visible only to users who are role members.\" xml:space=\"preserve\">\n    <value>Leave View Roles blank for public pages. You can put comma separated role names here to make a page visible only to users who are role members.</value>\n  </data>\n  <data name=\"Manage Page Hierarchy\" xml:space=\"preserve\">\n    <value>Manage Page Hierarchy</value>\n  </data>\n  <data name=\"Menu Filters\" xml:space=\"preserve\">\n    <value>Menu Filters</value>\n  </data>\n  <data name=\"New Child Page\" xml:space=\"preserve\">\n    <value>New Child Page</value>\n  </data>\n  <data name=\"New Root Level Page\" xml:space=\"preserve\">\n    <value>New Root Level Page</value>\n  </data>\n  <data name=\"No Content Only Show Child Menu\" xml:space=\"preserve\">\n    <value>No Content Only Show Child Menu</value>\n  </data>\n  <data name=\"No Pages Found\" xml:space=\"preserve\">\n    <value>No Pages Found</value>\n  </data>\n  <data name=\"No pages have been created yet, if this is your site, please login to create your first page\" xml:space=\"preserve\">\n    <value>No pages have been created yet, if this is your site, please login to create your first page</value>\n  </data>\n  <data name=\"On most pages you will prbably want the page heading to show, but maybe not on the home page. If unchecked then the page heading will not be shown.\" xml:space=\"preserve\">\n    <value>On most pages you will prbably want the page heading to show, but maybe not on the home page. If unchecked then the page heading will not be shown.</value>\n  </data>\n  <data name=\"Override Url\" xml:space=\"preserve\">\n    <value>Override Url</value>\n  </data>\n  <data name=\"Page Heading\" xml:space=\"preserve\">\n    <value>Page Heading</value>\n  </data>\n  <data name=\"Page Not Found\" xml:space=\"preserve\">\n    <value>Page Not Found</value>\n  </data>\n  <data name=\"Page Order\" xml:space=\"preserve\">\n    <value>Page Order</value>\n  </data>\n  <data name=\"Parent Slug\" xml:space=\"preserve\">\n    <value>Parent Slug</value>\n  </data>\n  <data name=\"Select Roles\" xml:space=\"preserve\">\n    <value>Select Roles</value>\n  </data>\n  <data name=\"Settings\" xml:space=\"preserve\">\n    <value>Settings</value>\n  </data>\n  <data name=\"Show Child Menu\" xml:space=\"preserve\">\n    <value>Show Child Menu</value>\n  </data>\n  <data name=\"Show Heading\" xml:space=\"preserve\">\n    <value>Show Heading</value>\n  </data>\n  <data name=\"Site Home\" xml:space=\"preserve\">\n    <value>Site Home</value>\n  </data>\n  <data name=\"Sorry, but the page requires authentication.\" xml:space=\"preserve\">\n    <value>Sorry, but the page requires authentication.</value>\n  </data>\n  <data name=\"Sorry, but the page you were looking for can't be found.\" xml:space=\"preserve\">\n    <value>Sorry, but the page you were looking for can't be found.</value>\n  </data>\n  <data name=\"Sorry, but you don't have permission to access this page.\" xml:space=\"preserve\">\n    <value>Sorry, but you don't have permission to access this page.</value>\n  </data>\n  <data name=\"Sort Child Pages Alpha\" xml:space=\"preserve\">\n    <value>Sort Child Pages Alpha</value>\n  </data>\n  <data name=\"The page {0} has child pages, if you delete it, all of the child pages will become root level pages. You should delete child pages before deleting the parent page. Are you sure you want to delete {1}?\" xml:space=\"preserve\">\n    <value>The page {0} has child pages, if you delete it, all of the child pages will become root level pages. You should delete child pages before deleting the parent page. Are you sure you want to delete {1}?</value>\n  </data>\n  <data name=\"This is the heading and title of the page. For new pages the url slug will be generated based on the title.\" xml:space=\"preserve\">\n    <value>This is the heading and title of the page. For new pages the url slug will be generated based on the title.</value>\n  </data>\n  <data name=\"This is the sort order of this page within it's subtree of the menu. You can also move pages around easily from Page Manager, which will update the page order.\" xml:space=\"preserve\">\n    <value>This is the sort order of this page within it's subtree of the menu. You can also move pages around easily from Page Manager, which will update the page order.</value>\n  </data>\n  <data name=\"Unauthorized\" xml:space=\"preserve\">\n    <value>Unauthorized</value>\n  </data>\n  <data name=\"Unexpected Error\" xml:space=\"preserve\">\n    <value>Unexpected Error</value>\n  </data>\n  <data name=\"View\" xml:space=\"preserve\">\n    <value>View</value>\n  </data>\n  <data name=\"View Roles\" xml:space=\"preserve\">\n    <value>View Roles</value>\n  </data>\n  <data name=\"Well, this is embarrassing. An error occurred while processing your request. Rest assured, this problem has been logged and hamsters have been released to fix the problem.\" xml:space=\"preserve\">\n    <value>Well, this is embarrassing. An error occurred while processing your request. Rest assured, this problem has been logged and hamsters have been released to fix the problem.</value>\n  </data>\n  <data name=\"You can drag and drop page nodes in the treeview below to move them around in the site hierarchy or to change their sort position. Click on a page to show a menu of commands related to that page. Note that changes will not be reflected in the main menu until you refresh the page.\" xml:space=\"preserve\">\n    <value>You can drag and drop page nodes in the treeview below to move them around in the site hierarchy or to change their sort position. Click on a page to show a menu of commands related to that page. Note that changes will not be reflected in the main menu until you refresh the page.</value>\n  </data>\n  <data name=\"Your browser sent a request that this server could not understand.\" xml:space=\"preserve\">\n    <value>Your browser sent a request that this server could not understand.</value>\n  </data>\n  <data name=\"Content Settings\" xml:space=\"preserve\">\n    <value>Content Settings</value>\n  </data>\n  <data name=\"Content Settings were successfully updated.\" xml:space=\"preserve\">\n    <value>Content Settings were successfully updated.</value>\n  </data>\n  <data name=\"Image Url\" xml:space=\"preserve\">\n    <value>Image Url</value>\n  </data>\n  <data name=\"Is Featured\" xml:space=\"preserve\">\n    <value>Is Featured</value>\n  </data>\n  <data name=\"Thumbnail Url\" xml:space=\"preserve\">\n    <value>Thumbnail Url</value>\n  </data>\n  <data name=\"Show Featured Posts on Default Page\" xml:space=\"preserve\">\n    <value>Show Featured Posts on Default Page</value>\n  </data>\n  <data name=\"Featured Posts\" xml:space=\"preserve\">\n    <value>Featured Posts</value>\n  </data>\n  <data name=\"Recent Posts\" xml:space=\"preserve\">\n    <value>Recent Posts</value>\n  </data>\n  <data name=\"If checked will show the blog categories in the side bar\" xml:space=\"preserve\">\n    <value>If checked will show the blog categories in the side bar</value>\n  </data>\n  <data name=\"If checked will show the blog archives in the side bar\" xml:space=\"preserve\">\n    <value>If checked will show the blog archives in the side bar</value>\n  </data>\n  <data name=\"Show the blog categories in the side bar\" xml:space=\"preserve\">\n    <value>Show the blog categories in the side bar</value>\n  </data>\n  <data name=\"Show the blog archives in the side bar\" xml:space=\"preserve\">\n    <value>Show the blog archives in the side bar</value>\n  </data>\n  <data name=\"Created\" xml:space=\"preserve\">\n    <value>Created</value>\n  </data>\n  <data name=\"Created By\" xml:space=\"preserve\">\n    <value>Created By</value>\n  </data>\n  <data name=\"Last Updated\" xml:space=\"preserve\">\n    <value>Last Updated</value>\n  </data>\n  <data name=\"Updated\" xml:space=\"preserve\">\n    <value>Updated</value>\n  </data>\n  <data name=\"Updated By\" xml:space=\"preserve\">\n    <value>Updated By</value>\n  </data>\n  <data name=\"Show Created By\" xml:space=\"preserve\">\n    <value>Show Created By</value>\n  </data>\n  <data name=\"Show Created Date\" xml:space=\"preserve\">\n    <value>Show Created Date</value>\n  </data>\n  <data name=\"Show Last Modified By\" xml:space=\"preserve\">\n    <value>Show Last Modified By</value>\n  </data>\n  <data name=\"Show Last Modified Date\" xml:space=\"preserve\">\n    <value>Show Last Modified Date</value>\n  </data>\n  <data name=\"Show / hide the following information below the main content of the page.\" xml:space=\"preserve\">\n    <value>Show / hide the following information below the main content of the page.</value>\n  </data>\n  <data name=\"Show / hide the following information below the main content of pages (site default).\" xml:space=\"preserve\">\n    <value>Show / hide the following information below the main content of pages (site default).</value>\n  </data>\n  <data name=\"You have unsaved changes in the editor. Are you sure you want to navigate to Developer Tools? Your changes will be lost.\" xml:space=\"preserve\">\n    <value>You have unsaved changes in the editor. Are you sure you want to navigate to Developer Tools? Your changes will be lost.</value>\n  </data>\n  <data name=\"Raw JavaScript\" xml:space=\"preserve\">\n    <value>Raw JavaScript</value>\n  </data>\n  <data name=\"Enter your JavaScript below. Do not include script tags.\" xml:space=\"preserve\">\n    <value>Enter your JavaScript below. Do not include script tags.</value>\n  </data>\n  <data name=\"Scripts are automatically validated for security - only safe DOM manipulation and event handling are permitted.\" xml:space=\"preserve\">\n    <value>Scripts are automatically validated for security - only safe DOM manipulation and event handling are permitted.</value>\n  </data>\n  <data name=\"Enter custom Javascript to run on your page. Do not include script tags.\" xml:space=\"preserve\">\n    <value>Enter custom Javascript to run on your page. Do not include script tags.</value>\n  </data>\n  <data name=\"Save JavaScript\" xml:space=\"preserve\">\n    <value>Save JavaScript</value>\n  </data>\n  <data name=\"JavaScript URLs\" xml:space=\"preserve\">\n    <value>JavaScript URLs</value>\n  </data>\n  <data name=\"CSS URLs\" xml:space=\"preserve\">\n    <value>CSS URLs</value>\n  </data>\n  <data name=\"Return to Page Editing\" xml:space=\"preserve\">\n    <value>Return to Page Editing</value>\n  </data>\n  <data name=\"Creator Twitter Handle\" xml:space=\"preserve\">\n    <value>Creator Twitter Handle</value>\n  </data>\n  <data name=\"Date Required\" xml:space=\"preserve\">\n    <value>Date Required</value>\n  </data>\n  <data name=\"Description\" xml:space=\"preserve\">\n    <value>Description</value>\n  </data>\n  <data name=\"Disable HTML Editor\" xml:space=\"preserve\">\n    <value>Disable HTML Editor</value>\n  </data>\n  <data name=\"Publish Later:\" xml:space=\"preserve\">\n    <value>Publish Later:</value>\n  </data>\n  <data name=\"Publish Now\" xml:space=\"preserve\">\n    <value>Publish Now</value>\n  </data>\n  <data name=\"Publisher Twitter Handle\" xml:space=\"preserve\">\n    <value>Publisher Twitter Handle</value>\n  </data>\n  <data name=\"Save Draft\" xml:space=\"preserve\">\n    <value>Save Draft</value>\n  </data>\n  <data name=\"Site Name\" xml:space=\"preserve\">\n    <value>Site Name</value>\n  </data>\n  <data name=\"To publish later you must enter a date.\" xml:space=\"preserve\">\n    <value>To publish later you must enter a date.</value>\n  </data>\n  <data name=\"Version History\" xml:space=\"preserve\">\n    <value>Version History</value>\n  </data>\n  <data name=\"Script saved successfully\" xml:space=\"preserve\">\n    <value>Script saved successfully</value>\n  </data>\n  <data name=\"Script cleared successfully\" xml:space=\"preserve\">\n    <value>Script cleared successfully</value>\n  </data>\n</root>"
  },
  {
    "path": "src/sourceDev.WebApp/Program.cs",
    "content": "﻿using Microsoft.AspNetCore;\nusing Microsoft.AspNetCore.Hosting;\nusing Microsoft.Extensions.Configuration;\nusing Microsoft.Extensions.DependencyInjection;\nusing Microsoft.Extensions.Hosting;\nusing Microsoft.Extensions.Logging;\nusing System;\nusing System.Linq;\n\nnamespace sourceDev.WebApp\n{\n    public class Program\n    {\n        public static void Main(string[] args)\n        {\n            var hostBuilder = CreateHostBuilder(args);\n            var host = hostBuilder.Build();\n\n            var config = host.Services.GetRequiredService<IConfiguration>();\n\n            using (var scope = host.Services.CreateScope())\n            {\n                var scopedServices = scope.ServiceProvider;\n                try\n                {\n                    EnsureDataStorageIsReady(config, scopedServices);\n\n                }\n                catch (Exception ex)\n                {\n                    var logger = scopedServices.GetRequiredService<ILogger<Program>>();\n                    logger.LogError(ex, \"An error occurred while migrating the database.\");\n                }\n            }\n\n            var env = host.Services.GetRequiredService<IWebHostEnvironment>();\n            var loggerFactory = host.Services.GetRequiredService<ILoggerFactory>();\n            ConfigureLogging(env, loggerFactory, host.Services, config);\n\n            host.Run();\n        }\n\n        public static IHostBuilder CreateHostBuilder(string[] args) =>\n            Host.CreateDefaultBuilder(args)\n                .ConfigureWebHostDefaults(webBuilder =>\n                {\n                    webBuilder.UseStartup<Startup>();\n                });\n\n        private static void EnsureDataStorageIsReady(IConfiguration config, IServiceProvider scopedServices)\n        {\n            var deleteLogsOlderThanDays = 90;\n            var storage = config[\"DevOptions:DbPlatform\"].ToLowerInvariant();\n            switch (storage)\n            {\n                case \"efcore\":\n                    LoggingEFStartup.InitializeDatabaseAsync(scopedServices, deleteLogsOlderThanDays).Wait();\n                    CoreEFStartup.InitializeDatabaseAsync(scopedServices).Wait();\n                    SimpleContentEFStartup.InitializeDatabaseAsync(scopedServices).Wait();\n                    break;\n\n                case \"nodb\":\n                default:\n                    CoreNoDbStartup.InitializeDataAsync(scopedServices).Wait();\n                    break;\n            }\n        }\n\n        private static void ConfigureLogging(\n            IWebHostEnvironment env,\n            ILoggerFactory loggerFactory,\n            IServiceProvider serviceProvider,\n            IConfiguration config\n            )\n        {\n            var dbLoggerConfig = config.GetSection(\"DbLoggerConfig\").Get<cloudscribe.Logging.Models.DbLoggerConfig>();\n            LogLevel minimumLevel;\n            string levelConfig;\n            if (env.IsProduction())\n            {\n                levelConfig = dbLoggerConfig.ProductionLogLevel;\n            }\n            else\n            {\n                levelConfig = dbLoggerConfig.DevLogLevel;\n            }\n            switch (levelConfig)\n            {\n                case \"Debug\":\n                    minimumLevel = LogLevel.Debug;\n                    break;\n\n                case \"Information\":\n                    minimumLevel = LogLevel.Information;\n                    break;\n\n                case \"Trace\":\n                    minimumLevel = LogLevel.Trace;\n                    break;\n\n                default:\n                    minimumLevel = LogLevel.Warning;\n                    break;\n            }\n\n            // a customizable filter for logging\n            // add exclusions in appsettings.json to remove noise in the logs\n            bool logFilter(string loggerName, LogLevel logLevel)\n            {\n                if (dbLoggerConfig.ExcludedNamesSpaces.Any(f => loggerName.StartsWith(f)))\n                {\n                    return false;\n                }\n\n                if (logLevel < minimumLevel)\n                {\n                    return false;\n                }\n\n                if (dbLoggerConfig.BelowWarningExcludedNamesSpaces.Any(f => loggerName.StartsWith(f)) && logLevel < LogLevel.Warning)\n                {\n                    return false;\n                }\n                return true;\n            }\n\n            loggerFactory.AddDbLogger(serviceProvider, logFilter);\n        }\n\n    }\n\n\n}\n"
  },
  {
    "path": "src/sourceDev.WebApp/Properties/launchSettings.json",
    "content": "{\n  \"iisSettings\": {\n    \"windowsAuthentication\": false,\n    \"anonymousAuthentication\": true,\n    \"iisExpress\": {\n      \"applicationUrl\": \"http://localhost:61837/\",\n      \"sslPort\": 44314\n    }\n  },\n  \"profiles\": {\n    \"IIS Express\": {\n      \"commandName\": \"IISExpress\",\n      \"launchBrowser\": true,\n      \"environmentVariables\": {\n        \"ASPNETCORE_ENVIRONMENT\": \"Development\"\n      }\n    },\n    \"IIS Express Production\": {\n      \"commandName\": \"IISExpress\",\n      \"launchBrowser\": true,\n      \"environmentVariables\": {\n        \"ASPNETCORE_ENVIRONMENT\": \"Production\"\n      }\n    },\n    \"sourceDev.WebApp - Development\": {\n      \"commandName\": \"Project\",\n      \"launchBrowser\": true,\n      \"applicationUrl\": \"https://localhost:44314;http://localhost:61837\",\n      \"environmentVariables\": {\n        \"ASPNETCORE_ENVIRONMENT\": \"Development\"\n      }\n    },\n    \"sourceDev.WebApp - Production\": {\n      \"commandName\": \"Project\",\n      \"launchBrowser\": true,\n      \"applicationUrl\": \"https://localhost:44314;http://localhost:61837\",\n      \"environmentVariables\": {\n        \"ASPNETCORE_ENVIRONMENT\": \"Production\"\n      }\n    }\n\n\n  }\n}\n"
  },
  {
    "path": "src/sourceDev.WebApp/SharedThemes/_ViewImports.cshtml",
    "content": "﻿@using sourceDev.WebApp\n@using System\n@using System.Collections.Generic\n@using System.Globalization\n@using System.Linq\n@using Microsoft.AspNetCore.Http\n@using Microsoft.AspNetCore.Authentication\n@using Microsoft.AspNetCore.Identity\n@using Microsoft.AspNetCore.Localization\n@using Microsoft.Extensions.Localization\n@using Microsoft.Extensions.Options\n@using cloudscribe.Core.Models\n@using cloudscribe.Core.Identity\n@using cloudscribe.Core.Web\n@using cloudscribe.Core.Web.Components\n@using cloudscribe.Core.Web.Design\n@using cloudscribe.Web.Navigation\n@using cloudscribe.Web.Pagination\n@using cloudscribe.Pagination.Models\n@using cloudscribe.Web.Common\n@using cloudscribe.Web.Common.Components\n@using cloudscribe.Web.Common.Helpers\n@using cloudscribe.Web.Common.Models\n@using cloudscribe.Web.Common.Extensions\n@addTagHelper \"*, Microsoft.AspNetCore.Mvc.TagHelpers\"\n@addTagHelper \"*, cloudscribe.Web.Common\"\n@addTagHelper \"*, cloudscribe.Core.Web\"\n@addTagHelper \"*, cloudscribe.Web.Navigation\"\n@addTagHelper \"*, cloudscribe.Web.Pagination\"\n"
  },
  {
    "path": "src/sourceDev.WebApp/SharedThemes/_ViewStart.cshtml",
    "content": "﻿@{\n    Layout = \"_Layout\";\n}\n"
  },
  {
    "path": "src/sourceDev.WebApp/SharedThemes/cerulean/Shared/_Layout.cshtml",
    "content": "﻿@inject ISiteContextResolver siteResolver\n@inject ICoreThemeHelper themeHelper\n@{\n    var themeSettings = themeHelper.GetThemeSettings();\n    @*\n        These settings can be set by a main view to show additional columns.\n        Views that push content into the optional sections SideNav, AsidePrimary, and AsideSecondary\n        are obligated to set the needed viewtate property to true to show the section,\n        otherwise an error will occur.\n        The sideNav column also supports a toggle so it can be hidden and toggled visible even though it renders.\n    *@\n    bool sideNavVisible = true.Equals(ViewData[\"SideNavVisible\"]);\n    string sideNavToggleClass = ViewData[\"SideNavToggle\"]?.ToString() ?? \"collapse\";\n    bool asidePrimaryVisible = true.Equals(ViewData[\"AsidePrimaryVisible\"]);\n    bool asideSecondaryVisible = true.Equals(ViewData[\"AsideSecondaryVisible\"]);\n    var Tenant = await siteResolver.ResolveSite(Context.Request.Host.Host, Context.Request.Path);\n    var siteRoot = \"\";\n    if (!string.IsNullOrWhiteSpace(Tenant.SiteFolderName)) { siteRoot = \"/\" + Tenant.SiteFolderName; }\n}\n<!DOCTYPE html>\n<html lang=\"@CultureInfo.CurrentUICulture.Name\">\n<head>\n    <meta charset=\"utf-8\" />\n    <title>@ViewData[\"Title\"] - @(Tenant?.SiteName ?? \"Sample\")</title>\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1, shrink-to-fit=no\">\n    @RenderSection(\"Meta\", required: false)\n    <environment names=\"Development\">\n        <link rel=\"stylesheet\" href=\"~/css/bootstrap.css\" cs-resolve-theme-resource=\"true\" cs-shared-theme=\"true\" cs-tenant=\"@Tenant\" />\n        <link rel=\"stylesheet\" href=\"~/css/fontawesome-all.min.css\" cs-resolve-theme-resource=\"true\" cs-shared-theme=\"true\" cs-tenant=\"@Tenant\" />\n        <link rel=\"stylesheet\" href=\"~/css/site.css\" cs-resolve-theme-resource=\"true\" cs-shared-theme=\"true\" cs-tenant=\"@Tenant\" asp-append-version=\"true\" />\n    </environment>\n    <environment names=\"Staging,Production\">\n        <link rel=\"stylesheet\" href=\"~/css/bootstrap.min.css\" cs-resolve-theme-resource=\"true\" cs-shared-theme=\"true\" cs-tenant=\"@Tenant\" />\n        <link rel=\"stylesheet\" href=\"~/css/fontawesome-all.min.css\" cs-resolve-theme-resource=\"true\" cs-shared-theme=\"true\" cs-tenant=\"@Tenant\" />\n        <link rel=\"stylesheet\" href=\"~/css/site.min.css\" cs-resolve-theme-resource=\"true\" cs-shared-theme=\"true\" cs-tenant=\"@Tenant\" asp-append-version=\"true\" />\n    </environment>\n    @RenderSection(\"Styles\", required: false)    \n    \n    <google-analytics profile-id=\"@Tenant.GoogleAnalyticsProfileId\" user-id=\"@User.GetUserId()\"></google-analytics>\n    <base href=\"@Context.Request.Path\" />\n</head>\n<body class=\"d-flex flex-column @ViewData[\"BodyClass\"]\">\n    <header>\n        <a id=\"skippy\" class=\"visually-hidden visually-hidden-focusable\" href=\"#content\">\n            <div class=\"container\">\n                <span class=\"skiplink-text\">Skip to main content</span>\n            </div>\n        </a>\n        <div class=\"fixed-top container-fluid brand-header bg-white\">\n            <div class=\"d-flex align-items-center bg-white\">\n                @if (!string.IsNullOrWhiteSpace(Tenant.LogoUrl))\n                {\n                    <div>\n                         <partial name=\"SiteLogoPartial\" model=\"@Tenant\" />\n                    </div>\n                }\n                @if (Tenant.ShowSiteNameLink)\n                {\n                    <div class=\"align-self-center pt-4 pt-sm-0\">\n                         <partial name=\"SiteTitlePartial\" model=\"@Tenant\" />\n                    </div>\n                }\n                @if (!string.IsNullOrWhiteSpace(Tenant.HeaderContent))\n                {\n                    <div class=\"flex-fill align-self-center pt-3 d-none d-sm-block\">\n                        <partial name=\"SiteHeaderPartial\" />\n                    </div>\n                }\n            </div>\n        </div>\n        <nav class=\"navbar navbar-expand-md navbar-dark fixed-top bg-dark pt-0 pb-0\">\n            <button class=\"navbar-toggler\" type=\"button\" data-bs-toggle=\"collapse\" data-bs-target=\"#navbarNavDropdown\" aria-controls=\"navbarNavDropdown\" aria-expanded=\"false\" aria-label=\"Toggle navigation\">\n                <span class=\"navbar-toggler-icon\"></span>\n            </button>\n\n            <div class=\"collapse navbar-collapse bg-dark\" id=\"navbarNavDropdown\">\n                @await Component.InvokeAsync(\"Navigation\", new { viewName = \"Bootstrap5TopNavWithDropdowns\", filterName = NamedNavigationFilters.TopNav, startingNodeKey = \"\" })\n                <partial name=\"_LoginPartialWithDropdowns\" />\n            </div>\n        </nav>\n    </header>\n    <div id=\"wrapper\" class=\"container cs-container flex-fill\">\n        @await Component.InvokeAsync(\"Navigation\", new { viewName = \"Bootstrap5Breadcrumbs\", filterName = NamedNavigationFilters.Breadcrumbs, startingNodeKey = \"\" })\n        <div class=\"row\">\n            <main id=\"content\" class=\"col order-3\">\n                <partial name=\"AlertsPartial\" />\n                <partial name=\"_CookieConsentPartial\" />\n                <partial name=\"_AutoLogoutWarningPartial\" />\n                @RenderBody()\n            </main>\n            @if (sideNavVisible)\n            {\n                <nav id=\"sidenavmenu\" class=\" col col-3 order-1 @sideNavToggleClass\">\n                    @RenderSection(\"SideNav\", required: false)\n                </nav>\n\n            }\n            @if (asideSecondaryVisible)\n            {\n                <aside id=\"asideSecondary\" class=\"col col-1 order-2\">\n                    @RenderSection(\"AsideSecondary\", required: false)\n                </aside>\n\n            }\n            @if (asidePrimaryVisible)\n            {\n                <aside id=\"asidePrimary\" class=\"col-12 col-md-3 col-sm-12  col-sm-12 order-4\">\n                    @RenderSection(\"AsidePrimary\", required: false)\n                </aside>\n\n            }\n        </div>\n    </div>\n    <footer class=\"sticky-bottom border pt-2 h-100\">\n         <div class=\"w-100 text-center\">\n            <partial name=\"SiteFooterPartial\" />\n        </div>\n        <div class=\"d-flex flex-wrap flex-grow justify-content-center\">\n            <div class=\"p-2\">\n            <ul class=\"list-unstyled d-flex flex-wrap\">\n                @if (Tenant != null && !string.IsNullOrWhiteSpace(Tenant.PrivacyPolicy))\n                {\n                    <li class=\"ps-sm-2 me-sm-2\">\n                        <a asp-controller=\"Privacy\" asp-action=\"Index\">Privacy Policy</a>\n                    </li>\n                }\n                <li class=\"ps-sm-2 me-sm-2\">\n                    @* you are free to remove the powered by cloudscribe link but we appreciate it if you choose to keep it! *@\n                    <a class=\"text-nowrap\" target=\"_blank\" href=\"https://www.cloudscribe.com/?utm_source=@Context.Request.Host.Value&amp;utm_medium=referral&amp;utm_campaign=poweredbycloudscribe\">Powered by cloudscribe</a>\n                </li>\n            </ul>\n        </div>\n        <div class=\"ps-sm-2  text-center w-100\"><span class=\"text-nowrap\">Copyright &copy; @DateTime.Now.Year</span><span class=\"d-none d-sm-inline\"> - </span><span> @(Tenant?.SiteName ?? \"Sample\")</span></div>\n        <partial name=\"_CookieConsentRevokePartial\" />\n        </div>  \n    </footer>\n    @RenderSection(\"Toolbar\", required: false)\n    <environment names=\"Development\">\n        <script src=\"~/js/jquery.js\" cs-resolve-theme-resource=\"true\" cs-shared-theme=\"true\" cs-tenant=\"@Tenant\"></script>\n        <script src=\"~/js/bootstrap.bundle.js\" cs-resolve-theme-resource=\"true\" cs-shared-theme=\"true\" cs-tenant=\"@Tenant\"></script>\n        <script src=\"~/cr/js/bs4.smartmenus.min.js\"></script>\n    </environment>\n    <environment names=\"Staging,Production\">\n        <script src=\"~/js/jquery.min.js\" cs-resolve-theme-resource=\"true\" cs-shared-theme=\"true\" cs-tenant=\"@Tenant\"></script>\n        <script src=\"~/js/bootstrap.bundle.min.js\" cs-resolve-theme-resource=\"true\" cs-shared-theme=\"true\" cs-tenant=\"@Tenant\"></script>\n        <script src=\"~/cr/js/bs4.smartmenus.min.js\"></script>\n    </environment>\n    @RenderSection(\"Bottom\", required: false)\n    @RenderSection(\"Scripts\", required: false)     \n    @Html.RenderResources(\"js\") @*render any js resources declared via helpers in partial views etc*@\n    <add-this profile-id=\"@Tenant.AddThisDotComUsername\" async></add-this>\n</body>\n</html>\n"
  },
  {
    "path": "src/sourceDev.WebApp/SharedThemes/cerulean/wwwroot/css/_bootswatch.scss",
    "content": "// Cerulean 5.1.3\n// Bootswatch\n\n\n// Variables\n\n$text-shadow: 0 1px 0 rgba(0, 0, 0, .05) !default;\n\n// Mixins\n\n@mixin btn-shadow($color){\n  @include gradient-y-three-colors(tint-color($color, 16%), $color, 60%, shade-color($color, 6%));\n}\n\n// Navbar\n\n.navbar {\n  @each $color, $value in $theme-colors {\n    &.bg-#{$color} {\n      @include btn-shadow($value);\n    }\n  }\n}\n\n.navbar-brand,\n.nav-link {\n  text-shadow: $text-shadow;\n}\n\n// Buttons\n\n.btn {\n  text-shadow: $text-shadow;\n}\n\n.btn-secondary {\n  color: $gray-700;\n}\n\n@each $color, $value in $theme-colors {\n  .btn-#{$color} {\n    @include btn-shadow($value);\n  }\n}\n\n// Typography\n\n.text-secondary {\n  color: $gray-500 !important;\n}\n\n.bg-primary,\n.bg-success,\n.bg-info,\n.bg-warning,\n.bg-danger,\n.bg-dark {\n  h1,\n  h2,\n  h3,\n  h4,\n  h5,\n  h6 {\n    color: $white;\n  }\n}\n\n// Navs\n\n.dropdown-menu {\n  .dropdown-header {\n    color: $gray-600;\n  }\n}\n\n// Indicators\n\n.badge {\n  &.bg-secondary,\n  &.bg-light {\n    color: $dark;\n  }\n}\n"
  },
  {
    "path": "src/sourceDev.WebApp/SharedThemes/cerulean/wwwroot/css/_variables.scss",
    "content": "// Cerulean 5.1.3\n// Bootswatch\n\n$theme: \"cerulean\" !default;\n\n//\n// Color system\n//\n\n$white:    #fff !default;\n$gray-100: #f8f9fa !default;\n$gray-200: #e9ecef !default;\n$gray-300: #dee2e6 !default;\n$gray-400: #ced4da !default;\n$gray-500: #adb5bd !default;\n$gray-600: #868e96 !default;\n$gray-700: #495057 !default;\n$gray-800: #343a40 !default;\n$gray-900: #212529 !default;\n$black:    #000 !default;\n\n$blue:    #033c73 !default;\n$indigo:  #6610f2 !default;\n$purple:  #6f42c1 !default;\n$pink:    #e83e8c !default;\n$red:     #c71c22 !default;\n$orange:  #fd7e14 !default;\n$yellow:  #dd5600 !default;\n$green:   #73a839 !default;\n$teal:    #20c997 !default;\n$cyan:    #2fa4e7 !default;\n\n$primary:       $cyan !default;\n$secondary:     $gray-200 !default;\n$success:       $green !default;\n$info:          $blue !default;\n$warning:       $yellow !default;\n$danger:        $red !default;\n$light:         $gray-100 !default;\n$dark:          $gray-800 !default;\n\n$min-contrast-ratio:   2.75 !default;\n\n// Body\n\n$body-color:    $gray-700 !default;\n\n// Fonts\n\n$headings-color:         $cyan !default;\n\n// Dropdowns\n\n$dropdown-link-color:           $body-color !default;\n$dropdown-link-hover-color:     $white !default;\n$dropdown-link-hover-bg:        $primary !default;\n\n// Navbar\n\n$navbar-dark-color:             rgba($white, .8) !default;\n$navbar-dark-hover-color:       $white !default;\n"
  },
  {
    "path": "src/sourceDev.WebApp/SharedThemes/cerulean/wwwroot/css/bootstrap.css",
    "content": "/*!\n * Bootswatch v5.1.3\n * Homepage: https://bootswatch.com\n * Copyright 2012-2021 Thomas Park\n * Licensed under MIT\n * Based on Bootstrap\n*/\n/*!\n * Bootstrap v5.1.3 (https://getbootstrap.com/)\n * Copyright 2011-2021 The Bootstrap Authors\n * Copyright 2011-2021 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n:root {\n  --bs-blue: #033c73;\n  --bs-indigo: #6610f2;\n  --bs-purple: #6f42c1;\n  --bs-pink: #e83e8c;\n  --bs-red: #c71c22;\n  --bs-orange: #fd7e14;\n  --bs-yellow: #dd5600;\n  --bs-green: #73a839;\n  --bs-teal: #20c997;\n  --bs-cyan: #2fa4e7;\n  --bs-white: #fff;\n  --bs-gray: #868e96;\n  --bs-gray-dark: #343a40;\n  --bs-gray-100: #f8f9fa;\n  --bs-gray-200: #e9ecef;\n  --bs-gray-300: #dee2e6;\n  --bs-gray-400: #ced4da;\n  --bs-gray-500: #adb5bd;\n  --bs-gray-600: #868e96;\n  --bs-gray-700: #495057;\n  --bs-gray-800: #343a40;\n  --bs-gray-900: #212529;\n  --bs-primary: #2fa4e7;\n  --bs-secondary: #e9ecef;\n  --bs-success: #73a839;\n  --bs-info: #033c73;\n  --bs-warning: #dd5600;\n  --bs-danger: #c71c22;\n  --bs-light: #f8f9fa;\n  --bs-dark: #343a40;\n  --bs-primary-rgb: 47, 164, 231;\n  --bs-secondary-rgb: 233, 236, 239;\n  --bs-success-rgb: 115, 168, 57;\n  --bs-info-rgb: 3, 60, 115;\n  --bs-warning-rgb: 221, 86, 0;\n  --bs-danger-rgb: 199, 28, 34;\n  --bs-light-rgb: 248, 249, 250;\n  --bs-dark-rgb: 52, 58, 64;\n  --bs-white-rgb: 255, 255, 255;\n  --bs-black-rgb: 0, 0, 0;\n  --bs-body-color-rgb: 73, 80, 87;\n  --bs-body-bg-rgb: 255, 255, 255;\n  --bs-font-sans-serif: system-ui, -apple-system, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, \"Noto Sans\", \"Liberation Sans\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n  --bs-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n  --bs-gradient: linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));\n  --bs-body-font-family: var(--bs-font-sans-serif);\n  --bs-body-font-size: 1rem;\n  --bs-body-font-weight: 400;\n  --bs-body-line-height: 1.5;\n  --bs-body-color: #495057;\n  --bs-body-bg: #fff;\n}\n\n*,\n*::before,\n*::after {\n  box-sizing: border-box;\n}\n\n@media (prefers-reduced-motion: no-preference) {\n  :root {\n    scroll-behavior: smooth;\n  }\n}\n\nbody {\n  margin: 0;\n  font-family: var(--bs-body-font-family);\n  font-size: var(--bs-body-font-size);\n  font-weight: var(--bs-body-font-weight);\n  line-height: var(--bs-body-line-height);\n  color: var(--bs-body-color);\n  text-align: var(--bs-body-text-align);\n  background-color: var(--bs-body-bg);\n  -webkit-text-size-adjust: 100%;\n  -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\n\nhr {\n  margin: 1rem 0;\n  color: inherit;\n  background-color: currentColor;\n  border: 0;\n  opacity: 0.25;\n}\n\nhr:not([size]) {\n  height: 1px;\n}\n\nh1, .h1, h2, .h2, h3, .h3, h4, .h4, h5, .h5, h6, .h6 {\n  margin-top: 0;\n  margin-bottom: 0.5rem;\n  font-weight: 500;\n  line-height: 1.2;\n  color: #2fa4e7;\n}\n\nh1, .h1 {\n  font-size: calc(1.375rem + 1.5vw);\n}\n\n@media (min-width: 1200px) {\n  h1, .h1 {\n    font-size: 2.5rem;\n  }\n}\n\nh2, .h2 {\n  font-size: calc(1.325rem + 0.9vw);\n}\n\n@media (min-width: 1200px) {\n  h2, .h2 {\n    font-size: 2rem;\n  }\n}\n\nh3, .h3 {\n  font-size: calc(1.3rem + 0.6vw);\n}\n\n@media (min-width: 1200px) {\n  h3, .h3 {\n    font-size: 1.75rem;\n  }\n}\n\nh4, .h4 {\n  font-size: calc(1.275rem + 0.3vw);\n}\n\n@media (min-width: 1200px) {\n  h4, .h4 {\n    font-size: 1.5rem;\n  }\n}\n\nh5, .h5 {\n  font-size: 1.25rem;\n}\n\nh6, .h6 {\n  font-size: 1rem;\n}\n\np {\n  margin-top: 0;\n  margin-bottom: 1rem;\n}\n\nabbr[title],\nabbr[data-bs-original-title] {\n  -webkit-text-decoration: underline dotted;\n  text-decoration: underline dotted;\n  cursor: help;\n  -webkit-text-decoration-skip-ink: none;\n  text-decoration-skip-ink: none;\n}\n\naddress {\n  margin-bottom: 1rem;\n  font-style: normal;\n  line-height: inherit;\n}\n\nol,\nul {\n  padding-left: 2rem;\n}\n\nol,\nul,\ndl {\n  margin-top: 0;\n  margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n  margin-bottom: 0;\n}\n\ndt {\n  font-weight: 700;\n}\n\ndd {\n  margin-bottom: .5rem;\n  margin-left: 0;\n}\n\nblockquote {\n  margin: 0 0 1rem;\n}\n\nb,\nstrong {\n  font-weight: bolder;\n}\n\nsmall, .small {\n  font-size: 0.875em;\n}\n\nmark, .mark {\n  padding: 0.2em;\n  background-color: #fcf8e3;\n}\n\nsub,\nsup {\n  position: relative;\n  font-size: 0.75em;\n  line-height: 0;\n  vertical-align: baseline;\n}\n\nsub {\n  bottom: -.25em;\n}\n\nsup {\n  top: -.5em;\n}\n\na {\n  color: #2fa4e7;\n  text-decoration: underline;\n}\n\na:hover {\n  color: #2683b9;\n}\n\na:not([href]):not([class]), a:not([href]):not([class]):hover {\n  color: inherit;\n  text-decoration: none;\n}\n\npre,\ncode,\nkbd,\nsamp {\n  font-family: var(--bs-font-monospace);\n  font-size: 1em;\n  direction: ltr /* rtl:ignore */;\n  unicode-bidi: bidi-override;\n}\n\npre {\n  display: block;\n  margin-top: 0;\n  margin-bottom: 1rem;\n  overflow: auto;\n  font-size: 0.875em;\n}\n\npre code {\n  font-size: inherit;\n  color: inherit;\n  word-break: normal;\n}\n\ncode {\n  font-size: 0.875em;\n  color: #e83e8c;\n  word-wrap: break-word;\n}\n\na > code {\n  color: inherit;\n}\n\nkbd {\n  padding: 0.2rem 0.4rem;\n  font-size: 0.875em;\n  color: #fff;\n  background-color: #212529;\n  border-radius: 0.2rem;\n}\n\nkbd kbd {\n  padding: 0;\n  font-size: 1em;\n  font-weight: 700;\n}\n\nfigure {\n  margin: 0 0 1rem;\n}\n\nimg,\nsvg {\n  vertical-align: middle;\n}\n\ntable {\n  caption-side: bottom;\n  border-collapse: collapse;\n}\n\ncaption {\n  padding-top: 0.5rem;\n  padding-bottom: 0.5rem;\n  color: #868e96;\n  text-align: left;\n}\n\nth {\n  text-align: inherit;\n  text-align: -webkit-match-parent;\n}\n\nthead,\ntbody,\ntfoot,\ntr,\ntd,\nth {\n  border-color: inherit;\n  border-style: solid;\n  border-width: 0;\n}\n\nlabel {\n  display: inline-block;\n}\n\nbutton {\n  border-radius: 0;\n}\n\nbutton:focus:not(:focus-visible) {\n  outline: 0;\n}\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n  margin: 0;\n  font-family: inherit;\n  font-size: inherit;\n  line-height: inherit;\n}\n\nbutton,\nselect {\n  text-transform: none;\n}\n\n[role=\"button\"] {\n  cursor: pointer;\n}\n\nselect {\n  word-wrap: normal;\n}\n\nselect:disabled {\n  opacity: 1;\n}\n\n[list]::-webkit-calendar-picker-indicator {\n  display: none;\n}\n\nbutton,\n[type=\"button\"],\n[type=\"reset\"],\n[type=\"submit\"] {\n  -webkit-appearance: button;\n}\n\nbutton:not(:disabled),\n[type=\"button\"]:not(:disabled),\n[type=\"reset\"]:not(:disabled),\n[type=\"submit\"]:not(:disabled) {\n  cursor: pointer;\n}\n\n::-moz-focus-inner {\n  padding: 0;\n  border-style: none;\n}\n\ntextarea {\n  resize: vertical;\n}\n\nfieldset {\n  min-width: 0;\n  padding: 0;\n  margin: 0;\n  border: 0;\n}\n\nlegend {\n  float: left;\n  width: 100%;\n  padding: 0;\n  margin-bottom: 0.5rem;\n  font-size: calc(1.275rem + 0.3vw);\n  line-height: inherit;\n}\n\n@media (min-width: 1200px) {\n  legend {\n    font-size: 1.5rem;\n  }\n}\n\nlegend + * {\n  clear: left;\n}\n\n::-webkit-datetime-edit-fields-wrapper,\n::-webkit-datetime-edit-text,\n::-webkit-datetime-edit-minute,\n::-webkit-datetime-edit-hour-field,\n::-webkit-datetime-edit-day-field,\n::-webkit-datetime-edit-month-field,\n::-webkit-datetime-edit-year-field {\n  padding: 0;\n}\n\n::-webkit-inner-spin-button {\n  height: auto;\n}\n\n[type=\"search\"] {\n  outline-offset: -2px;\n  -webkit-appearance: textfield;\n}\n\n/* rtl:raw:\n[type=\"tel\"],\n[type=\"url\"],\n[type=\"email\"],\n[type=\"number\"] {\n  direction: ltr;\n}\n*/\n::-webkit-search-decoration {\n  -webkit-appearance: none;\n}\n\n::-webkit-color-swatch-wrapper {\n  padding: 0;\n}\n\n::file-selector-button {\n  font: inherit;\n}\n\n::-webkit-file-upload-button {\n  font: inherit;\n  -webkit-appearance: button;\n}\n\noutput {\n  display: inline-block;\n}\n\niframe {\n  border: 0;\n}\n\nsummary {\n  display: list-item;\n  cursor: pointer;\n}\n\nprogress {\n  vertical-align: baseline;\n}\n\n[hidden] {\n  display: none !important;\n}\n\n.lead {\n  font-size: 1.25rem;\n  font-weight: 300;\n}\n\n.display-1 {\n  font-size: calc(1.625rem + 4.5vw);\n  font-weight: 300;\n  line-height: 1.2;\n}\n\n@media (min-width: 1200px) {\n  .display-1 {\n    font-size: 5rem;\n  }\n}\n\n.display-2 {\n  font-size: calc(1.575rem + 3.9vw);\n  font-weight: 300;\n  line-height: 1.2;\n}\n\n@media (min-width: 1200px) {\n  .display-2 {\n    font-size: 4.5rem;\n  }\n}\n\n.display-3 {\n  font-size: calc(1.525rem + 3.3vw);\n  font-weight: 300;\n  line-height: 1.2;\n}\n\n@media (min-width: 1200px) {\n  .display-3 {\n    font-size: 4rem;\n  }\n}\n\n.display-4 {\n  font-size: calc(1.475rem + 2.7vw);\n  font-weight: 300;\n  line-height: 1.2;\n}\n\n@media (min-width: 1200px) {\n  .display-4 {\n    font-size: 3.5rem;\n  }\n}\n\n.display-5 {\n  font-size: calc(1.425rem + 2.1vw);\n  font-weight: 300;\n  line-height: 1.2;\n}\n\n@media (min-width: 1200px) {\n  .display-5 {\n    font-size: 3rem;\n  }\n}\n\n.display-6 {\n  font-size: calc(1.375rem + 1.5vw);\n  font-weight: 300;\n  line-height: 1.2;\n}\n\n@media (min-width: 1200px) {\n  .display-6 {\n    font-size: 2.5rem;\n  }\n}\n\n.list-unstyled {\n  padding-left: 0;\n  list-style: none;\n}\n\n.list-inline {\n  padding-left: 0;\n  list-style: none;\n}\n\n.list-inline-item {\n  display: inline-block;\n}\n\n.list-inline-item:not(:last-child) {\n  margin-right: 0.5rem;\n}\n\n.initialism {\n  font-size: 0.875em;\n  text-transform: uppercase;\n}\n\n.blockquote {\n  margin-bottom: 1rem;\n  font-size: 1.25rem;\n}\n\n.blockquote > :last-child {\n  margin-bottom: 0;\n}\n\n.blockquote-footer {\n  margin-top: -1rem;\n  margin-bottom: 1rem;\n  font-size: 0.875em;\n  color: #868e96;\n}\n\n.blockquote-footer::before {\n  content: \"\\2014\\00A0\";\n}\n\n.img-fluid {\n  max-width: 100%;\n  height: auto;\n}\n\n.img-thumbnail {\n  padding: 0.25rem;\n  background-color: #fff;\n  border: 1px solid #dee2e6;\n  border-radius: 0.25rem;\n  max-width: 100%;\n  height: auto;\n}\n\n.figure {\n  display: inline-block;\n}\n\n.figure-img {\n  margin-bottom: 0.5rem;\n  line-height: 1;\n}\n\n.figure-caption {\n  font-size: 0.875em;\n  color: #868e96;\n}\n\n.container,\n.container-fluid,\n.container-sm,\n.container-md,\n.container-lg,\n.container-xl,\n.container-xxl {\n  width: 100%;\n  padding-right: var(--bs-gutter-x, 0.75rem);\n  padding-left: var(--bs-gutter-x, 0.75rem);\n  margin-right: auto;\n  margin-left: auto;\n}\n\n@media (min-width: 576px) {\n  .container, .container-sm {\n    max-width: 540px;\n  }\n}\n\n@media (min-width: 768px) {\n  .container, .container-sm, .container-md {\n    max-width: 720px;\n  }\n}\n\n@media (min-width: 992px) {\n  .container, .container-sm, .container-md, .container-lg {\n    max-width: 960px;\n  }\n}\n\n@media (min-width: 1200px) {\n  .container, .container-sm, .container-md, .container-lg, .container-xl {\n    max-width: 1140px;\n  }\n}\n\n@media (min-width: 1400px) {\n  .container, .container-sm, .container-md, .container-lg, .container-xl, .container-xxl {\n    max-width: 1320px;\n  }\n}\n\n.row {\n  --bs-gutter-x: 1.5rem;\n  --bs-gutter-y: 0;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n  flex-wrap: wrap;\n  margin-top: calc(-1 * var(--bs-gutter-y));\n  margin-right: calc(-.5 * var(--bs-gutter-x));\n  margin-left: calc(-.5 * var(--bs-gutter-x));\n}\n\n.row > * {\n  -ms-flex-negative: 0;\n  flex-shrink: 0;\n  width: 100%;\n  max-width: 100%;\n  padding-right: calc(var(--bs-gutter-x) * .5);\n  padding-left: calc(var(--bs-gutter-x) * .5);\n  margin-top: var(--bs-gutter-y);\n}\n\n.col {\n  -ms-flex: 1 0 0%;\n  flex: 1 0 0%;\n}\n\n.row-cols-auto > * {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: auto;\n}\n\n.row-cols-1 > * {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 100%;\n}\n\n.row-cols-2 > * {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 50%;\n}\n\n.row-cols-3 > * {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 33.333333%;\n}\n\n.row-cols-4 > * {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 25%;\n}\n\n.row-cols-5 > * {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 20%;\n}\n\n.row-cols-6 > * {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 16.666667%;\n}\n\n.col-auto {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: auto;\n}\n\n.col-1 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 8.333333%;\n}\n\n.col-2 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 16.666667%;\n}\n\n.col-3 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 25%;\n}\n\n.col-4 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 33.333333%;\n}\n\n.col-5 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 41.666667%;\n}\n\n.col-6 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 50%;\n}\n\n.col-7 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 58.333333%;\n}\n\n.col-8 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 66.666667%;\n}\n\n.col-9 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 75%;\n}\n\n.col-10 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 83.333333%;\n}\n\n.col-11 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 91.666667%;\n}\n\n.col-12 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 100%;\n}\n\n.offset-1 {\n  margin-left: 8.333333%;\n}\n\n.offset-2 {\n  margin-left: 16.666667%;\n}\n\n.offset-3 {\n  margin-left: 25%;\n}\n\n.offset-4 {\n  margin-left: 33.333333%;\n}\n\n.offset-5 {\n  margin-left: 41.666667%;\n}\n\n.offset-6 {\n  margin-left: 50%;\n}\n\n.offset-7 {\n  margin-left: 58.333333%;\n}\n\n.offset-8 {\n  margin-left: 66.666667%;\n}\n\n.offset-9 {\n  margin-left: 75%;\n}\n\n.offset-10 {\n  margin-left: 83.333333%;\n}\n\n.offset-11 {\n  margin-left: 91.666667%;\n}\n\n.g-0,\n.gx-0 {\n  --bs-gutter-x: 0;\n}\n\n.g-0,\n.gy-0 {\n  --bs-gutter-y: 0;\n}\n\n.g-1,\n.gx-1 {\n  --bs-gutter-x: 0.25rem;\n}\n\n.g-1,\n.gy-1 {\n  --bs-gutter-y: 0.25rem;\n}\n\n.g-2,\n.gx-2 {\n  --bs-gutter-x: 0.5rem;\n}\n\n.g-2,\n.gy-2 {\n  --bs-gutter-y: 0.5rem;\n}\n\n.g-3,\n.gx-3 {\n  --bs-gutter-x: 1rem;\n}\n\n.g-3,\n.gy-3 {\n  --bs-gutter-y: 1rem;\n}\n\n.g-4,\n.gx-4 {\n  --bs-gutter-x: 1.5rem;\n}\n\n.g-4,\n.gy-4 {\n  --bs-gutter-y: 1.5rem;\n}\n\n.g-5,\n.gx-5 {\n  --bs-gutter-x: 3rem;\n}\n\n.g-5,\n.gy-5 {\n  --bs-gutter-y: 3rem;\n}\n\n@media (min-width: 576px) {\n  .col-sm {\n    -ms-flex: 1 0 0%;\n    flex: 1 0 0%;\n  }\n  .row-cols-sm-auto > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .row-cols-sm-1 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .row-cols-sm-2 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .row-cols-sm-3 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 33.333333%;\n  }\n  .row-cols-sm-4 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .row-cols-sm-5 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 20%;\n  }\n  .row-cols-sm-6 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 16.666667%;\n  }\n  .col-sm-auto {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .col-sm-1 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 8.333333%;\n  }\n  .col-sm-2 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 16.666667%;\n  }\n  .col-sm-3 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .col-sm-4 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 33.333333%;\n  }\n  .col-sm-5 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 41.666667%;\n  }\n  .col-sm-6 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .col-sm-7 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 58.333333%;\n  }\n  .col-sm-8 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 66.666667%;\n  }\n  .col-sm-9 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 75%;\n  }\n  .col-sm-10 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 83.333333%;\n  }\n  .col-sm-11 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 91.666667%;\n  }\n  .col-sm-12 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .offset-sm-0 {\n    margin-left: 0;\n  }\n  .offset-sm-1 {\n    margin-left: 8.333333%;\n  }\n  .offset-sm-2 {\n    margin-left: 16.666667%;\n  }\n  .offset-sm-3 {\n    margin-left: 25%;\n  }\n  .offset-sm-4 {\n    margin-left: 33.333333%;\n  }\n  .offset-sm-5 {\n    margin-left: 41.666667%;\n  }\n  .offset-sm-6 {\n    margin-left: 50%;\n  }\n  .offset-sm-7 {\n    margin-left: 58.333333%;\n  }\n  .offset-sm-8 {\n    margin-left: 66.666667%;\n  }\n  .offset-sm-9 {\n    margin-left: 75%;\n  }\n  .offset-sm-10 {\n    margin-left: 83.333333%;\n  }\n  .offset-sm-11 {\n    margin-left: 91.666667%;\n  }\n  .g-sm-0,\n  .gx-sm-0 {\n    --bs-gutter-x: 0;\n  }\n  .g-sm-0,\n  .gy-sm-0 {\n    --bs-gutter-y: 0;\n  }\n  .g-sm-1,\n  .gx-sm-1 {\n    --bs-gutter-x: 0.25rem;\n  }\n  .g-sm-1,\n  .gy-sm-1 {\n    --bs-gutter-y: 0.25rem;\n  }\n  .g-sm-2,\n  .gx-sm-2 {\n    --bs-gutter-x: 0.5rem;\n  }\n  .g-sm-2,\n  .gy-sm-2 {\n    --bs-gutter-y: 0.5rem;\n  }\n  .g-sm-3,\n  .gx-sm-3 {\n    --bs-gutter-x: 1rem;\n  }\n  .g-sm-3,\n  .gy-sm-3 {\n    --bs-gutter-y: 1rem;\n  }\n  .g-sm-4,\n  .gx-sm-4 {\n    --bs-gutter-x: 1.5rem;\n  }\n  .g-sm-4,\n  .gy-sm-4 {\n    --bs-gutter-y: 1.5rem;\n  }\n  .g-sm-5,\n  .gx-sm-5 {\n    --bs-gutter-x: 3rem;\n  }\n  .g-sm-5,\n  .gy-sm-5 {\n    --bs-gutter-y: 3rem;\n  }\n}\n\n@media (min-width: 768px) {\n  .col-md {\n    -ms-flex: 1 0 0%;\n    flex: 1 0 0%;\n  }\n  .row-cols-md-auto > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .row-cols-md-1 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .row-cols-md-2 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .row-cols-md-3 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 33.333333%;\n  }\n  .row-cols-md-4 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .row-cols-md-5 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 20%;\n  }\n  .row-cols-md-6 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 16.666667%;\n  }\n  .col-md-auto {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .col-md-1 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 8.333333%;\n  }\n  .col-md-2 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 16.666667%;\n  }\n  .col-md-3 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .col-md-4 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 33.333333%;\n  }\n  .col-md-5 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 41.666667%;\n  }\n  .col-md-6 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .col-md-7 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 58.333333%;\n  }\n  .col-md-8 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 66.666667%;\n  }\n  .col-md-9 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 75%;\n  }\n  .col-md-10 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 83.333333%;\n  }\n  .col-md-11 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 91.666667%;\n  }\n  .col-md-12 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .offset-md-0 {\n    margin-left: 0;\n  }\n  .offset-md-1 {\n    margin-left: 8.333333%;\n  }\n  .offset-md-2 {\n    margin-left: 16.666667%;\n  }\n  .offset-md-3 {\n    margin-left: 25%;\n  }\n  .offset-md-4 {\n    margin-left: 33.333333%;\n  }\n  .offset-md-5 {\n    margin-left: 41.666667%;\n  }\n  .offset-md-6 {\n    margin-left: 50%;\n  }\n  .offset-md-7 {\n    margin-left: 58.333333%;\n  }\n  .offset-md-8 {\n    margin-left: 66.666667%;\n  }\n  .offset-md-9 {\n    margin-left: 75%;\n  }\n  .offset-md-10 {\n    margin-left: 83.333333%;\n  }\n  .offset-md-11 {\n    margin-left: 91.666667%;\n  }\n  .g-md-0,\n  .gx-md-0 {\n    --bs-gutter-x: 0;\n  }\n  .g-md-0,\n  .gy-md-0 {\n    --bs-gutter-y: 0;\n  }\n  .g-md-1,\n  .gx-md-1 {\n    --bs-gutter-x: 0.25rem;\n  }\n  .g-md-1,\n  .gy-md-1 {\n    --bs-gutter-y: 0.25rem;\n  }\n  .g-md-2,\n  .gx-md-2 {\n    --bs-gutter-x: 0.5rem;\n  }\n  .g-md-2,\n  .gy-md-2 {\n    --bs-gutter-y: 0.5rem;\n  }\n  .g-md-3,\n  .gx-md-3 {\n    --bs-gutter-x: 1rem;\n  }\n  .g-md-3,\n  .gy-md-3 {\n    --bs-gutter-y: 1rem;\n  }\n  .g-md-4,\n  .gx-md-4 {\n    --bs-gutter-x: 1.5rem;\n  }\n  .g-md-4,\n  .gy-md-4 {\n    --bs-gutter-y: 1.5rem;\n  }\n  .g-md-5,\n  .gx-md-5 {\n    --bs-gutter-x: 3rem;\n  }\n  .g-md-5,\n  .gy-md-5 {\n    --bs-gutter-y: 3rem;\n  }\n}\n\n@media (min-width: 992px) {\n  .col-lg {\n    -ms-flex: 1 0 0%;\n    flex: 1 0 0%;\n  }\n  .row-cols-lg-auto > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .row-cols-lg-1 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .row-cols-lg-2 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .row-cols-lg-3 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 33.333333%;\n  }\n  .row-cols-lg-4 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .row-cols-lg-5 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 20%;\n  }\n  .row-cols-lg-6 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 16.666667%;\n  }\n  .col-lg-auto {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .col-lg-1 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 8.333333%;\n  }\n  .col-lg-2 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 16.666667%;\n  }\n  .col-lg-3 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .col-lg-4 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 33.333333%;\n  }\n  .col-lg-5 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 41.666667%;\n  }\n  .col-lg-6 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .col-lg-7 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 58.333333%;\n  }\n  .col-lg-8 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 66.666667%;\n  }\n  .col-lg-9 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 75%;\n  }\n  .col-lg-10 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 83.333333%;\n  }\n  .col-lg-11 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 91.666667%;\n  }\n  .col-lg-12 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .offset-lg-0 {\n    margin-left: 0;\n  }\n  .offset-lg-1 {\n    margin-left: 8.333333%;\n  }\n  .offset-lg-2 {\n    margin-left: 16.666667%;\n  }\n  .offset-lg-3 {\n    margin-left: 25%;\n  }\n  .offset-lg-4 {\n    margin-left: 33.333333%;\n  }\n  .offset-lg-5 {\n    margin-left: 41.666667%;\n  }\n  .offset-lg-6 {\n    margin-left: 50%;\n  }\n  .offset-lg-7 {\n    margin-left: 58.333333%;\n  }\n  .offset-lg-8 {\n    margin-left: 66.666667%;\n  }\n  .offset-lg-9 {\n    margin-left: 75%;\n  }\n  .offset-lg-10 {\n    margin-left: 83.333333%;\n  }\n  .offset-lg-11 {\n    margin-left: 91.666667%;\n  }\n  .g-lg-0,\n  .gx-lg-0 {\n    --bs-gutter-x: 0;\n  }\n  .g-lg-0,\n  .gy-lg-0 {\n    --bs-gutter-y: 0;\n  }\n  .g-lg-1,\n  .gx-lg-1 {\n    --bs-gutter-x: 0.25rem;\n  }\n  .g-lg-1,\n  .gy-lg-1 {\n    --bs-gutter-y: 0.25rem;\n  }\n  .g-lg-2,\n  .gx-lg-2 {\n    --bs-gutter-x: 0.5rem;\n  }\n  .g-lg-2,\n  .gy-lg-2 {\n    --bs-gutter-y: 0.5rem;\n  }\n  .g-lg-3,\n  .gx-lg-3 {\n    --bs-gutter-x: 1rem;\n  }\n  .g-lg-3,\n  .gy-lg-3 {\n    --bs-gutter-y: 1rem;\n  }\n  .g-lg-4,\n  .gx-lg-4 {\n    --bs-gutter-x: 1.5rem;\n  }\n  .g-lg-4,\n  .gy-lg-4 {\n    --bs-gutter-y: 1.5rem;\n  }\n  .g-lg-5,\n  .gx-lg-5 {\n    --bs-gutter-x: 3rem;\n  }\n  .g-lg-5,\n  .gy-lg-5 {\n    --bs-gutter-y: 3rem;\n  }\n}\n\n@media (min-width: 1200px) {\n  .col-xl {\n    -ms-flex: 1 0 0%;\n    flex: 1 0 0%;\n  }\n  .row-cols-xl-auto > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .row-cols-xl-1 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .row-cols-xl-2 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .row-cols-xl-3 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 33.333333%;\n  }\n  .row-cols-xl-4 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .row-cols-xl-5 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 20%;\n  }\n  .row-cols-xl-6 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 16.666667%;\n  }\n  .col-xl-auto {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .col-xl-1 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 8.333333%;\n  }\n  .col-xl-2 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 16.666667%;\n  }\n  .col-xl-3 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .col-xl-4 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 33.333333%;\n  }\n  .col-xl-5 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 41.666667%;\n  }\n  .col-xl-6 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .col-xl-7 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 58.333333%;\n  }\n  .col-xl-8 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 66.666667%;\n  }\n  .col-xl-9 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 75%;\n  }\n  .col-xl-10 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 83.333333%;\n  }\n  .col-xl-11 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 91.666667%;\n  }\n  .col-xl-12 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .offset-xl-0 {\n    margin-left: 0;\n  }\n  .offset-xl-1 {\n    margin-left: 8.333333%;\n  }\n  .offset-xl-2 {\n    margin-left: 16.666667%;\n  }\n  .offset-xl-3 {\n    margin-left: 25%;\n  }\n  .offset-xl-4 {\n    margin-left: 33.333333%;\n  }\n  .offset-xl-5 {\n    margin-left: 41.666667%;\n  }\n  .offset-xl-6 {\n    margin-left: 50%;\n  }\n  .offset-xl-7 {\n    margin-left: 58.333333%;\n  }\n  .offset-xl-8 {\n    margin-left: 66.666667%;\n  }\n  .offset-xl-9 {\n    margin-left: 75%;\n  }\n  .offset-xl-10 {\n    margin-left: 83.333333%;\n  }\n  .offset-xl-11 {\n    margin-left: 91.666667%;\n  }\n  .g-xl-0,\n  .gx-xl-0 {\n    --bs-gutter-x: 0;\n  }\n  .g-xl-0,\n  .gy-xl-0 {\n    --bs-gutter-y: 0;\n  }\n  .g-xl-1,\n  .gx-xl-1 {\n    --bs-gutter-x: 0.25rem;\n  }\n  .g-xl-1,\n  .gy-xl-1 {\n    --bs-gutter-y: 0.25rem;\n  }\n  .g-xl-2,\n  .gx-xl-2 {\n    --bs-gutter-x: 0.5rem;\n  }\n  .g-xl-2,\n  .gy-xl-2 {\n    --bs-gutter-y: 0.5rem;\n  }\n  .g-xl-3,\n  .gx-xl-3 {\n    --bs-gutter-x: 1rem;\n  }\n  .g-xl-3,\n  .gy-xl-3 {\n    --bs-gutter-y: 1rem;\n  }\n  .g-xl-4,\n  .gx-xl-4 {\n    --bs-gutter-x: 1.5rem;\n  }\n  .g-xl-4,\n  .gy-xl-4 {\n    --bs-gutter-y: 1.5rem;\n  }\n  .g-xl-5,\n  .gx-xl-5 {\n    --bs-gutter-x: 3rem;\n  }\n  .g-xl-5,\n  .gy-xl-5 {\n    --bs-gutter-y: 3rem;\n  }\n}\n\n@media (min-width: 1400px) {\n  .col-xxl {\n    -ms-flex: 1 0 0%;\n    flex: 1 0 0%;\n  }\n  .row-cols-xxl-auto > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .row-cols-xxl-1 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .row-cols-xxl-2 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .row-cols-xxl-3 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 33.333333%;\n  }\n  .row-cols-xxl-4 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .row-cols-xxl-5 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 20%;\n  }\n  .row-cols-xxl-6 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 16.666667%;\n  }\n  .col-xxl-auto {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .col-xxl-1 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 8.333333%;\n  }\n  .col-xxl-2 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 16.666667%;\n  }\n  .col-xxl-3 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .col-xxl-4 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 33.333333%;\n  }\n  .col-xxl-5 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 41.666667%;\n  }\n  .col-xxl-6 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .col-xxl-7 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 58.333333%;\n  }\n  .col-xxl-8 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 66.666667%;\n  }\n  .col-xxl-9 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 75%;\n  }\n  .col-xxl-10 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 83.333333%;\n  }\n  .col-xxl-11 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 91.666667%;\n  }\n  .col-xxl-12 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .offset-xxl-0 {\n    margin-left: 0;\n  }\n  .offset-xxl-1 {\n    margin-left: 8.333333%;\n  }\n  .offset-xxl-2 {\n    margin-left: 16.666667%;\n  }\n  .offset-xxl-3 {\n    margin-left: 25%;\n  }\n  .offset-xxl-4 {\n    margin-left: 33.333333%;\n  }\n  .offset-xxl-5 {\n    margin-left: 41.666667%;\n  }\n  .offset-xxl-6 {\n    margin-left: 50%;\n  }\n  .offset-xxl-7 {\n    margin-left: 58.333333%;\n  }\n  .offset-xxl-8 {\n    margin-left: 66.666667%;\n  }\n  .offset-xxl-9 {\n    margin-left: 75%;\n  }\n  .offset-xxl-10 {\n    margin-left: 83.333333%;\n  }\n  .offset-xxl-11 {\n    margin-left: 91.666667%;\n  }\n  .g-xxl-0,\n  .gx-xxl-0 {\n    --bs-gutter-x: 0;\n  }\n  .g-xxl-0,\n  .gy-xxl-0 {\n    --bs-gutter-y: 0;\n  }\n  .g-xxl-1,\n  .gx-xxl-1 {\n    --bs-gutter-x: 0.25rem;\n  }\n  .g-xxl-1,\n  .gy-xxl-1 {\n    --bs-gutter-y: 0.25rem;\n  }\n  .g-xxl-2,\n  .gx-xxl-2 {\n    --bs-gutter-x: 0.5rem;\n  }\n  .g-xxl-2,\n  .gy-xxl-2 {\n    --bs-gutter-y: 0.5rem;\n  }\n  .g-xxl-3,\n  .gx-xxl-3 {\n    --bs-gutter-x: 1rem;\n  }\n  .g-xxl-3,\n  .gy-xxl-3 {\n    --bs-gutter-y: 1rem;\n  }\n  .g-xxl-4,\n  .gx-xxl-4 {\n    --bs-gutter-x: 1.5rem;\n  }\n  .g-xxl-4,\n  .gy-xxl-4 {\n    --bs-gutter-y: 1.5rem;\n  }\n  .g-xxl-5,\n  .gx-xxl-5 {\n    --bs-gutter-x: 3rem;\n  }\n  .g-xxl-5,\n  .gy-xxl-5 {\n    --bs-gutter-y: 3rem;\n  }\n}\n\n.table {\n  --bs-table-bg: transparent;\n  --bs-table-accent-bg: transparent;\n  --bs-table-striped-color: #495057;\n  --bs-table-striped-bg: rgba(0, 0, 0, 0.05);\n  --bs-table-active-color: #495057;\n  --bs-table-active-bg: rgba(0, 0, 0, 0.1);\n  --bs-table-hover-color: #495057;\n  --bs-table-hover-bg: rgba(0, 0, 0, 0.075);\n  width: 100%;\n  margin-bottom: 1rem;\n  color: #495057;\n  vertical-align: top;\n  border-color: #dee2e6;\n}\n\n.table > :not(caption) > * > * {\n  padding: 0.5rem 0.5rem;\n  background-color: var(--bs-table-bg);\n  border-bottom-width: 1px;\n  box-shadow: inset 0 0 0 9999px var(--bs-table-accent-bg);\n}\n\n.table > tbody {\n  vertical-align: inherit;\n}\n\n.table > thead {\n  vertical-align: bottom;\n}\n\n.table > :not(:first-child) {\n  border-top: 2px solid currentColor;\n}\n\n.caption-top {\n  caption-side: top;\n}\n\n.table-sm > :not(caption) > * > * {\n  padding: 0.25rem 0.25rem;\n}\n\n.table-bordered > :not(caption) > * {\n  border-width: 1px 0;\n}\n\n.table-bordered > :not(caption) > * > * {\n  border-width: 0 1px;\n}\n\n.table-borderless > :not(caption) > * > * {\n  border-bottom-width: 0;\n}\n\n.table-borderless > :not(:first-child) {\n  border-top-width: 0;\n}\n\n.table-striped > tbody > tr:nth-of-type(odd) > * {\n  --bs-table-accent-bg: var(--bs-table-striped-bg);\n  color: var(--bs-table-striped-color);\n}\n\n.table-active {\n  --bs-table-accent-bg: var(--bs-table-active-bg);\n  color: var(--bs-table-active-color);\n}\n\n.table-hover > tbody > tr:hover > * {\n  --bs-table-accent-bg: var(--bs-table-hover-bg);\n  color: var(--bs-table-hover-color);\n}\n\n.table-primary {\n  --bs-table-bg: #d5edfa;\n  --bs-table-striped-bg: #cae1ee;\n  --bs-table-striped-color: #000;\n  --bs-table-active-bg: #c0d5e1;\n  --bs-table-active-color: #000;\n  --bs-table-hover-bg: #c5dbe7;\n  --bs-table-hover-color: #000;\n  color: #000;\n  border-color: #c0d5e1;\n}\n\n.table-secondary {\n  --bs-table-bg: #fbfbfc;\n  --bs-table-striped-bg: #eeeeef;\n  --bs-table-striped-color: #000;\n  --bs-table-active-bg: #e2e2e3;\n  --bs-table-active-color: #000;\n  --bs-table-hover-bg: #e8e8e9;\n  --bs-table-hover-color: #000;\n  color: #000;\n  border-color: #e2e2e3;\n}\n\n.table-success {\n  --bs-table-bg: #e3eed7;\n  --bs-table-striped-bg: #d8e2cc;\n  --bs-table-striped-color: #000;\n  --bs-table-active-bg: #ccd6c2;\n  --bs-table-active-color: #000;\n  --bs-table-hover-bg: #d2dcc7;\n  --bs-table-hover-color: #000;\n  color: #000;\n  border-color: #ccd6c2;\n}\n\n.table-info {\n  --bs-table-bg: #cdd8e3;\n  --bs-table-striped-bg: #c3cdd8;\n  --bs-table-striped-color: #000;\n  --bs-table-active-bg: #b9c2cc;\n  --bs-table-active-color: #000;\n  --bs-table-hover-bg: #bec8d2;\n  --bs-table-hover-color: #000;\n  color: #000;\n  border-color: #b9c2cc;\n}\n\n.table-warning {\n  --bs-table-bg: #f8ddcc;\n  --bs-table-striped-bg: #ecd2c2;\n  --bs-table-striped-color: #000;\n  --bs-table-active-bg: #dfc7b8;\n  --bs-table-active-color: #000;\n  --bs-table-hover-bg: #e5ccbd;\n  --bs-table-hover-color: #000;\n  color: #000;\n  border-color: #dfc7b8;\n}\n\n.table-danger {\n  --bs-table-bg: #f4d2d3;\n  --bs-table-striped-bg: #e8c8c8;\n  --bs-table-striped-color: #000;\n  --bs-table-active-bg: #dcbdbe;\n  --bs-table-active-color: #000;\n  --bs-table-hover-bg: #e2c2c3;\n  --bs-table-hover-color: #000;\n  color: #000;\n  border-color: #dcbdbe;\n}\n\n.table-light {\n  --bs-table-bg: #f8f9fa;\n  --bs-table-striped-bg: #ecedee;\n  --bs-table-striped-color: #000;\n  --bs-table-active-bg: #dfe0e1;\n  --bs-table-active-color: #000;\n  --bs-table-hover-bg: #e5e6e7;\n  --bs-table-hover-color: #000;\n  color: #000;\n  border-color: #dfe0e1;\n}\n\n.table-dark {\n  --bs-table-bg: #343a40;\n  --bs-table-striped-bg: #3e444a;\n  --bs-table-striped-color: #fff;\n  --bs-table-active-bg: #484e53;\n  --bs-table-active-color: #fff;\n  --bs-table-hover-bg: #43494e;\n  --bs-table-hover-color: #fff;\n  color: #fff;\n  border-color: #484e53;\n}\n\n.table-responsive {\n  overflow-x: auto;\n  -webkit-overflow-scrolling: touch;\n}\n\n@media (max-width: 575.98px) {\n  .table-responsive-sm {\n    overflow-x: auto;\n    -webkit-overflow-scrolling: touch;\n  }\n}\n\n@media (max-width: 767.98px) {\n  .table-responsive-md {\n    overflow-x: auto;\n    -webkit-overflow-scrolling: touch;\n  }\n}\n\n@media (max-width: 991.98px) {\n  .table-responsive-lg {\n    overflow-x: auto;\n    -webkit-overflow-scrolling: touch;\n  }\n}\n\n@media (max-width: 1199.98px) {\n  .table-responsive-xl {\n    overflow-x: auto;\n    -webkit-overflow-scrolling: touch;\n  }\n}\n\n@media (max-width: 1399.98px) {\n  .table-responsive-xxl {\n    overflow-x: auto;\n    -webkit-overflow-scrolling: touch;\n  }\n}\n\n.form-label {\n  margin-bottom: 0.5rem;\n}\n\n.col-form-label {\n  padding-top: calc(0.375rem + 1px);\n  padding-bottom: calc(0.375rem + 1px);\n  margin-bottom: 0;\n  font-size: inherit;\n  line-height: 1.5;\n}\n\n.col-form-label-lg {\n  padding-top: calc(0.5rem + 1px);\n  padding-bottom: calc(0.5rem + 1px);\n  font-size: 1.25rem;\n}\n\n.col-form-label-sm {\n  padding-top: calc(0.25rem + 1px);\n  padding-bottom: calc(0.25rem + 1px);\n  font-size: 0.875rem;\n}\n\n.form-text {\n  margin-top: 0.25rem;\n  font-size: 0.875em;\n  color: #868e96;\n}\n\n.form-control {\n  display: block;\n  width: 100%;\n  padding: 0.375rem 0.75rem;\n  font-size: 1rem;\n  font-weight: 400;\n  line-height: 1.5;\n  color: #495057;\n  background-color: #fff;\n  background-clip: padding-box;\n  border: 1px solid #ced4da;\n  -webkit-appearance: none;\n  -moz-appearance: none;\n  appearance: none;\n  border-radius: 0.25rem;\n  transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .form-control {\n    transition: none;\n  }\n}\n\n.form-control[type=\"file\"] {\n  overflow: hidden;\n}\n\n.form-control[type=\"file\"]:not(:disabled):not([readonly]) {\n  cursor: pointer;\n}\n\n.form-control:focus {\n  color: #495057;\n  background-color: #fff;\n  border-color: #97d2f3;\n  outline: 0;\n  box-shadow: 0 0 0 0.25rem rgba(47, 164, 231, 0.25);\n}\n\n.form-control::-webkit-date-and-time-value {\n  height: 1.5em;\n}\n\n.form-control::-webkit-input-placeholder {\n  color: #868e96;\n  opacity: 1;\n}\n\n.form-control::-moz-placeholder {\n  color: #868e96;\n  opacity: 1;\n}\n\n.form-control:-ms-input-placeholder {\n  color: #868e96;\n  opacity: 1;\n}\n\n.form-control::-ms-input-placeholder {\n  color: #868e96;\n  opacity: 1;\n}\n\n.form-control::placeholder {\n  color: #868e96;\n  opacity: 1;\n}\n\n.form-control:disabled, .form-control[readonly] {\n  background-color: #e9ecef;\n  opacity: 1;\n}\n\n.form-control::file-selector-button {\n  padding: 0.375rem 0.75rem;\n  margin: -0.375rem -0.75rem;\n  -webkit-margin-end: 0.75rem;\n  -moz-margin-end: 0.75rem;\n  margin-inline-end: 0.75rem;\n  color: #495057;\n  background-color: #e9ecef;\n  pointer-events: none;\n  border-color: inherit;\n  border-style: solid;\n  border-width: 0;\n  border-inline-end-width: 1px;\n  border-radius: 0;\n  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .form-control::file-selector-button {\n    transition: none;\n  }\n}\n\n.form-control:hover:not(:disabled):not([readonly])::file-selector-button {\n  background-color: #dde0e3;\n}\n\n.form-control::-webkit-file-upload-button {\n  padding: 0.375rem 0.75rem;\n  margin: -0.375rem -0.75rem;\n  -webkit-margin-end: 0.75rem;\n  margin-inline-end: 0.75rem;\n  color: #495057;\n  background-color: #e9ecef;\n  pointer-events: none;\n  border-color: inherit;\n  border-style: solid;\n  border-width: 0;\n  border-inline-end-width: 1px;\n  border-radius: 0;\n  -webkit-transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .form-control::-webkit-file-upload-button {\n    -webkit-transition: none;\n    transition: none;\n  }\n}\n\n.form-control:hover:not(:disabled):not([readonly])::-webkit-file-upload-button {\n  background-color: #dde0e3;\n}\n\n.form-control-plaintext {\n  display: block;\n  width: 100%;\n  padding: 0.375rem 0;\n  margin-bottom: 0;\n  line-height: 1.5;\n  color: #495057;\n  background-color: transparent;\n  border: solid transparent;\n  border-width: 1px 0;\n}\n\n.form-control-plaintext.form-control-sm, .form-control-plaintext.form-control-lg {\n  padding-right: 0;\n  padding-left: 0;\n}\n\n.form-control-sm {\n  min-height: calc(1.5em + 0.5rem + 2px);\n  padding: 0.25rem 0.5rem;\n  font-size: 0.875rem;\n  border-radius: 0.2rem;\n}\n\n.form-control-sm::file-selector-button {\n  padding: 0.25rem 0.5rem;\n  margin: -0.25rem -0.5rem;\n  -webkit-margin-end: 0.5rem;\n  -moz-margin-end: 0.5rem;\n  margin-inline-end: 0.5rem;\n}\n\n.form-control-sm::-webkit-file-upload-button {\n  padding: 0.25rem 0.5rem;\n  margin: -0.25rem -0.5rem;\n  -webkit-margin-end: 0.5rem;\n  margin-inline-end: 0.5rem;\n}\n\n.form-control-lg {\n  min-height: calc(1.5em + 1rem + 2px);\n  padding: 0.5rem 1rem;\n  font-size: 1.25rem;\n  border-radius: 0.3rem;\n}\n\n.form-control-lg::file-selector-button {\n  padding: 0.5rem 1rem;\n  margin: -0.5rem -1rem;\n  -webkit-margin-end: 1rem;\n  -moz-margin-end: 1rem;\n  margin-inline-end: 1rem;\n}\n\n.form-control-lg::-webkit-file-upload-button {\n  padding: 0.5rem 1rem;\n  margin: -0.5rem -1rem;\n  -webkit-margin-end: 1rem;\n  margin-inline-end: 1rem;\n}\n\ntextarea.form-control {\n  min-height: calc(1.5em + 0.75rem + 2px);\n}\n\ntextarea.form-control-sm {\n  min-height: calc(1.5em + 0.5rem + 2px);\n}\n\ntextarea.form-control-lg {\n  min-height: calc(1.5em + 1rem + 2px);\n}\n\n.form-control-color {\n  width: 3rem;\n  height: auto;\n  padding: 0.375rem;\n}\n\n.form-control-color:not(:disabled):not([readonly]) {\n  cursor: pointer;\n}\n\n.form-control-color::-moz-color-swatch {\n  height: 1.5em;\n  border-radius: 0.25rem;\n}\n\n.form-control-color::-webkit-color-swatch {\n  height: 1.5em;\n  border-radius: 0.25rem;\n}\n\n.form-select {\n  display: block;\n  width: 100%;\n  padding: 0.375rem 2.25rem 0.375rem 0.75rem;\n  -moz-padding-start: calc(0.75rem - 3px);\n  font-size: 1rem;\n  font-weight: 400;\n  line-height: 1.5;\n  color: #495057;\n  background-color: #fff;\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e\");\n  background-repeat: no-repeat;\n  background-position: right 0.75rem center;\n  background-size: 16px 12px;\n  border: 1px solid #ced4da;\n  border-radius: 0.25rem;\n  transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n  -webkit-appearance: none;\n  -moz-appearance: none;\n  appearance: none;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .form-select {\n    transition: none;\n  }\n}\n\n.form-select:focus {\n  border-color: #97d2f3;\n  outline: 0;\n  box-shadow: 0 0 0 0.25rem rgba(47, 164, 231, 0.25);\n}\n\n.form-select[multiple], .form-select[size]:not([size=\"1\"]) {\n  padding-right: 0.75rem;\n  background-image: none;\n}\n\n.form-select:disabled {\n  background-color: #e9ecef;\n}\n\n.form-select:-moz-focusring {\n  color: transparent;\n  text-shadow: 0 0 0 #495057;\n}\n\n.form-select-sm {\n  padding-top: 0.25rem;\n  padding-bottom: 0.25rem;\n  padding-left: 0.5rem;\n  font-size: 0.875rem;\n  border-radius: 0.2rem;\n}\n\n.form-select-lg {\n  padding-top: 0.5rem;\n  padding-bottom: 0.5rem;\n  padding-left: 1rem;\n  font-size: 1.25rem;\n  border-radius: 0.3rem;\n}\n\n.form-check {\n  display: block;\n  min-height: 1.5rem;\n  padding-left: 1.5em;\n  margin-bottom: 0.125rem;\n}\n\n.form-check .form-check-input {\n  float: left;\n  margin-left: -1.5em;\n}\n\n.form-check-input {\n  width: 1em;\n  height: 1em;\n  margin-top: 0.25em;\n  vertical-align: top;\n  background-color: #fff;\n  background-repeat: no-repeat;\n  background-position: center;\n  background-size: contain;\n  border: 1px solid rgba(0, 0, 0, 0.25);\n  -webkit-appearance: none;\n  -moz-appearance: none;\n  appearance: none;\n  -webkit-print-color-adjust: exact;\n  color-adjust: exact;\n}\n\n.form-check-input[type=\"checkbox\"] {\n  border-radius: 0.25em;\n}\n\n.form-check-input[type=\"radio\"] {\n  border-radius: 50%;\n}\n\n.form-check-input:active {\n  -webkit-filter: brightness(90%);\n  filter: brightness(90%);\n}\n\n.form-check-input:focus {\n  border-color: #97d2f3;\n  outline: 0;\n  box-shadow: 0 0 0 0.25rem rgba(47, 164, 231, 0.25);\n}\n\n.form-check-input:checked {\n  background-color: #2fa4e7;\n  border-color: #2fa4e7;\n}\n\n.form-check-input:checked[type=\"checkbox\"] {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10l3 3l6-6'/%3e%3c/svg%3e\");\n}\n\n.form-check-input:checked[type=\"radio\"] {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='2' fill='%23fff'/%3e%3c/svg%3e\");\n}\n\n.form-check-input[type=\"checkbox\"]:indeterminate {\n  background-color: #2fa4e7;\n  border-color: #2fa4e7;\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10h8'/%3e%3c/svg%3e\");\n}\n\n.form-check-input:disabled {\n  pointer-events: none;\n  -webkit-filter: none;\n  filter: none;\n  opacity: 0.5;\n}\n\n.form-check-input[disabled] ~ .form-check-label, .form-check-input:disabled ~ .form-check-label {\n  opacity: 0.5;\n}\n\n.form-switch {\n  padding-left: 2.5em;\n}\n\n.form-switch .form-check-input {\n  width: 2em;\n  margin-left: -2.5em;\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%280, 0, 0, 0.25%29'/%3e%3c/svg%3e\");\n  background-position: left center;\n  border-radius: 2em;\n  transition: background-position 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .form-switch .form-check-input {\n    transition: none;\n  }\n}\n\n.form-switch .form-check-input:focus {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%2397d2f3'/%3e%3c/svg%3e\");\n}\n\n.form-switch .form-check-input:checked {\n  background-position: right center;\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e\");\n}\n\n.form-check-inline {\n  display: inline-block;\n  margin-right: 1rem;\n}\n\n.btn-check {\n  position: absolute;\n  clip: rect(0, 0, 0, 0);\n  pointer-events: none;\n}\n\n.btn-check[disabled] + .btn, .btn-check:disabled + .btn {\n  pointer-events: none;\n  -webkit-filter: none;\n  filter: none;\n  opacity: 0.65;\n}\n\n.form-range {\n  width: 100%;\n  height: 1.5rem;\n  padding: 0;\n  background-color: transparent;\n  -webkit-appearance: none;\n  -moz-appearance: none;\n  appearance: none;\n}\n\n.form-range:focus {\n  outline: 0;\n}\n\n.form-range:focus::-webkit-slider-thumb {\n  box-shadow: 0 0 0 1px #fff, 0 0 0 0.25rem rgba(47, 164, 231, 0.25);\n}\n\n.form-range:focus::-moz-range-thumb {\n  box-shadow: 0 0 0 1px #fff, 0 0 0 0.25rem rgba(47, 164, 231, 0.25);\n}\n\n.form-range::-moz-focus-outer {\n  border: 0;\n}\n\n.form-range::-webkit-slider-thumb {\n  width: 1rem;\n  height: 1rem;\n  margin-top: -0.25rem;\n  background-color: #2fa4e7;\n  border: 0;\n  border-radius: 1rem;\n  -webkit-transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n  transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n  -webkit-appearance: none;\n  appearance: none;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .form-range::-webkit-slider-thumb {\n    -webkit-transition: none;\n    transition: none;\n  }\n}\n\n.form-range::-webkit-slider-thumb:active {\n  background-color: #c1e4f8;\n}\n\n.form-range::-webkit-slider-runnable-track {\n  width: 100%;\n  height: 0.5rem;\n  color: transparent;\n  cursor: pointer;\n  background-color: #dee2e6;\n  border-color: transparent;\n  border-radius: 1rem;\n}\n\n.form-range::-moz-range-thumb {\n  width: 1rem;\n  height: 1rem;\n  background-color: #2fa4e7;\n  border: 0;\n  border-radius: 1rem;\n  -moz-transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n  transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n  -moz-appearance: none;\n  appearance: none;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .form-range::-moz-range-thumb {\n    -moz-transition: none;\n    transition: none;\n  }\n}\n\n.form-range::-moz-range-thumb:active {\n  background-color: #c1e4f8;\n}\n\n.form-range::-moz-range-track {\n  width: 100%;\n  height: 0.5rem;\n  color: transparent;\n  cursor: pointer;\n  background-color: #dee2e6;\n  border-color: transparent;\n  border-radius: 1rem;\n}\n\n.form-range:disabled {\n  pointer-events: none;\n}\n\n.form-range:disabled::-webkit-slider-thumb {\n  background-color: #adb5bd;\n}\n\n.form-range:disabled::-moz-range-thumb {\n  background-color: #adb5bd;\n}\n\n.form-floating {\n  position: relative;\n}\n\n.form-floating > .form-control,\n.form-floating > .form-select {\n  height: calc(3.5rem + 2px);\n  line-height: 1.25;\n}\n\n.form-floating > label {\n  position: absolute;\n  top: 0;\n  left: 0;\n  height: 100%;\n  padding: 1rem 0.75rem;\n  pointer-events: none;\n  border: 1px solid transparent;\n  -webkit-transform-origin: 0 0;\n  transform-origin: 0 0;\n  transition: opacity 0.1s ease-in-out, -webkit-transform 0.1s ease-in-out;\n  transition: opacity 0.1s ease-in-out, transform 0.1s ease-in-out;\n  transition: opacity 0.1s ease-in-out, transform 0.1s ease-in-out, -webkit-transform 0.1s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .form-floating > label {\n    transition: none;\n  }\n}\n\n.form-floating > .form-control {\n  padding: 1rem 0.75rem;\n}\n\n.form-floating > .form-control::-webkit-input-placeholder {\n  color: transparent;\n}\n\n.form-floating > .form-control::-moz-placeholder {\n  color: transparent;\n}\n\n.form-floating > .form-control:-ms-input-placeholder {\n  color: transparent;\n}\n\n.form-floating > .form-control::-ms-input-placeholder {\n  color: transparent;\n}\n\n.form-floating > .form-control::placeholder {\n  color: transparent;\n}\n\n.form-floating > .form-control:not(:-moz-placeholder-shown) {\n  padding-top: 1.625rem;\n  padding-bottom: 0.625rem;\n}\n\n.form-floating > .form-control:not(:-ms-input-placeholder) {\n  padding-top: 1.625rem;\n  padding-bottom: 0.625rem;\n}\n\n.form-floating > .form-control:focus, .form-floating > .form-control:not(:placeholder-shown) {\n  padding-top: 1.625rem;\n  padding-bottom: 0.625rem;\n}\n\n.form-floating > .form-control:-webkit-autofill {\n  padding-top: 1.625rem;\n  padding-bottom: 0.625rem;\n}\n\n.form-floating > .form-select {\n  padding-top: 1.625rem;\n  padding-bottom: 0.625rem;\n}\n\n.form-floating > .form-control:not(:-moz-placeholder-shown) ~ label {\n  opacity: 0.65;\n  transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);\n}\n\n.form-floating > .form-control:not(:-ms-input-placeholder) ~ label {\n  opacity: 0.65;\n  transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);\n}\n\n.form-floating > .form-control:focus ~ label,\n.form-floating > .form-control:not(:placeholder-shown) ~ label,\n.form-floating > .form-select ~ label {\n  opacity: 0.65;\n  -webkit-transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);\n  transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);\n}\n\n.form-floating > .form-control:-webkit-autofill ~ label {\n  opacity: 0.65;\n  -webkit-transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);\n  transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);\n}\n\n.input-group {\n  position: relative;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n  flex-wrap: wrap;\n  -ms-flex-align: stretch;\n  align-items: stretch;\n  width: 100%;\n}\n\n.input-group > .form-control,\n.input-group > .form-select {\n  position: relative;\n  -ms-flex: 1 1 auto;\n  flex: 1 1 auto;\n  width: 1%;\n  min-width: 0;\n}\n\n.input-group > .form-control:focus,\n.input-group > .form-select:focus {\n  z-index: 3;\n}\n\n.input-group .btn {\n  position: relative;\n  z-index: 2;\n}\n\n.input-group .btn:focus {\n  z-index: 3;\n}\n\n.input-group-text {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-align: center;\n  align-items: center;\n  padding: 0.375rem 0.75rem;\n  font-size: 1rem;\n  font-weight: 400;\n  line-height: 1.5;\n  color: #495057;\n  text-align: center;\n  white-space: nowrap;\n  background-color: #e9ecef;\n  border: 1px solid #ced4da;\n  border-radius: 0.25rem;\n}\n\n.input-group-lg > .form-control,\n.input-group-lg > .form-select,\n.input-group-lg > .input-group-text,\n.input-group-lg > .btn {\n  padding: 0.5rem 1rem;\n  font-size: 1.25rem;\n  border-radius: 0.3rem;\n}\n\n.input-group-sm > .form-control,\n.input-group-sm > .form-select,\n.input-group-sm > .input-group-text,\n.input-group-sm > .btn {\n  padding: 0.25rem 0.5rem;\n  font-size: 0.875rem;\n  border-radius: 0.2rem;\n}\n\n.input-group-lg > .form-select,\n.input-group-sm > .form-select {\n  padding-right: 3rem;\n}\n\n.input-group:not(.has-validation) > :not(:last-child):not(.dropdown-toggle):not(.dropdown-menu),\n.input-group:not(.has-validation) > .dropdown-toggle:nth-last-child(n + 3) {\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n}\n\n.input-group.has-validation > :nth-last-child(n + 3):not(.dropdown-toggle):not(.dropdown-menu),\n.input-group.has-validation > .dropdown-toggle:nth-last-child(n + 4) {\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n}\n\n.input-group > :not(:first-child):not(.dropdown-menu):not(.valid-tooltip):not(.valid-feedback):not(.invalid-tooltip):not(.invalid-feedback) {\n  margin-left: -1px;\n  border-top-left-radius: 0;\n  border-bottom-left-radius: 0;\n}\n\n.valid-feedback {\n  display: none;\n  width: 100%;\n  margin-top: 0.25rem;\n  font-size: 0.875em;\n  color: #73a839;\n}\n\n.valid-tooltip {\n  position: absolute;\n  top: 100%;\n  z-index: 5;\n  display: none;\n  max-width: 100%;\n  padding: 0.25rem 0.5rem;\n  margin-top: .1rem;\n  font-size: 0.875rem;\n  color: #fff;\n  background-color: rgba(115, 168, 57, 0.9);\n  border-radius: 0.25rem;\n}\n\n.was-validated :valid ~ .valid-feedback,\n.was-validated :valid ~ .valid-tooltip,\n.is-valid ~ .valid-feedback,\n.is-valid ~ .valid-tooltip {\n  display: block;\n}\n\n.was-validated .form-control:valid, .form-control.is-valid {\n  border-color: #73a839;\n  padding-right: calc(1.5em + 0.75rem);\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%2373a839' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e\");\n  background-repeat: no-repeat;\n  background-position: right calc(0.375em + 0.1875rem) center;\n  background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n\n.was-validated .form-control:valid:focus, .form-control.is-valid:focus {\n  border-color: #73a839;\n  box-shadow: 0 0 0 0.25rem rgba(115, 168, 57, 0.25);\n}\n\n.was-validated textarea.form-control:valid, textarea.form-control.is-valid {\n  padding-right: calc(1.5em + 0.75rem);\n  background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem);\n}\n\n.was-validated .form-select:valid, .form-select.is-valid {\n  border-color: #73a839;\n}\n\n.was-validated .form-select:valid:not([multiple]):not([size]), .was-validated .form-select:valid:not([multiple])[size=\"1\"], .form-select.is-valid:not([multiple]):not([size]), .form-select.is-valid:not([multiple])[size=\"1\"] {\n  padding-right: 4.125rem;\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e\"), url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%2373a839' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e\");\n  background-position: right 0.75rem center, center right 2.25rem;\n  background-size: 16px 12px, calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n\n.was-validated .form-select:valid:focus, .form-select.is-valid:focus {\n  border-color: #73a839;\n  box-shadow: 0 0 0 0.25rem rgba(115, 168, 57, 0.25);\n}\n\n.was-validated .form-check-input:valid, .form-check-input.is-valid {\n  border-color: #73a839;\n}\n\n.was-validated .form-check-input:valid:checked, .form-check-input.is-valid:checked {\n  background-color: #73a839;\n}\n\n.was-validated .form-check-input:valid:focus, .form-check-input.is-valid:focus {\n  box-shadow: 0 0 0 0.25rem rgba(115, 168, 57, 0.25);\n}\n\n.was-validated .form-check-input:valid ~ .form-check-label, .form-check-input.is-valid ~ .form-check-label {\n  color: #73a839;\n}\n\n.form-check-inline .form-check-input ~ .valid-feedback {\n  margin-left: .5em;\n}\n\n.was-validated .input-group .form-control:valid, .input-group .form-control.is-valid, .was-validated\n.input-group .form-select:valid,\n.input-group .form-select.is-valid {\n  z-index: 1;\n}\n\n.was-validated .input-group .form-control:valid:focus, .input-group .form-control.is-valid:focus, .was-validated\n.input-group .form-select:valid:focus,\n.input-group .form-select.is-valid:focus {\n  z-index: 3;\n}\n\n.invalid-feedback {\n  display: none;\n  width: 100%;\n  margin-top: 0.25rem;\n  font-size: 0.875em;\n  color: #c71c22;\n}\n\n.invalid-tooltip {\n  position: absolute;\n  top: 100%;\n  z-index: 5;\n  display: none;\n  max-width: 100%;\n  padding: 0.25rem 0.5rem;\n  margin-top: .1rem;\n  font-size: 0.875rem;\n  color: #fff;\n  background-color: rgba(199, 28, 34, 0.9);\n  border-radius: 0.25rem;\n}\n\n.was-validated :invalid ~ .invalid-feedback,\n.was-validated :invalid ~ .invalid-tooltip,\n.is-invalid ~ .invalid-feedback,\n.is-invalid ~ .invalid-tooltip {\n  display: block;\n}\n\n.was-validated .form-control:invalid, .form-control.is-invalid {\n  border-color: #c71c22;\n  padding-right: calc(1.5em + 0.75rem);\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23c71c22'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23c71c22' stroke='none'/%3e%3c/svg%3e\");\n  background-repeat: no-repeat;\n  background-position: right calc(0.375em + 0.1875rem) center;\n  background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n\n.was-validated .form-control:invalid:focus, .form-control.is-invalid:focus {\n  border-color: #c71c22;\n  box-shadow: 0 0 0 0.25rem rgba(199, 28, 34, 0.25);\n}\n\n.was-validated textarea.form-control:invalid, textarea.form-control.is-invalid {\n  padding-right: calc(1.5em + 0.75rem);\n  background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem);\n}\n\n.was-validated .form-select:invalid, .form-select.is-invalid {\n  border-color: #c71c22;\n}\n\n.was-validated .form-select:invalid:not([multiple]):not([size]), .was-validated .form-select:invalid:not([multiple])[size=\"1\"], .form-select.is-invalid:not([multiple]):not([size]), .form-select.is-invalid:not([multiple])[size=\"1\"] {\n  padding-right: 4.125rem;\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e\"), url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23c71c22'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23c71c22' stroke='none'/%3e%3c/svg%3e\");\n  background-position: right 0.75rem center, center right 2.25rem;\n  background-size: 16px 12px, calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n\n.was-validated .form-select:invalid:focus, .form-select.is-invalid:focus {\n  border-color: #c71c22;\n  box-shadow: 0 0 0 0.25rem rgba(199, 28, 34, 0.25);\n}\n\n.was-validated .form-check-input:invalid, .form-check-input.is-invalid {\n  border-color: #c71c22;\n}\n\n.was-validated .form-check-input:invalid:checked, .form-check-input.is-invalid:checked {\n  background-color: #c71c22;\n}\n\n.was-validated .form-check-input:invalid:focus, .form-check-input.is-invalid:focus {\n  box-shadow: 0 0 0 0.25rem rgba(199, 28, 34, 0.25);\n}\n\n.was-validated .form-check-input:invalid ~ .form-check-label, .form-check-input.is-invalid ~ .form-check-label {\n  color: #c71c22;\n}\n\n.form-check-inline .form-check-input ~ .invalid-feedback {\n  margin-left: .5em;\n}\n\n.was-validated .input-group .form-control:invalid, .input-group .form-control.is-invalid, .was-validated\n.input-group .form-select:invalid,\n.input-group .form-select.is-invalid {\n  z-index: 2;\n}\n\n.was-validated .input-group .form-control:invalid:focus, .input-group .form-control.is-invalid:focus, .was-validated\n.input-group .form-select:invalid:focus,\n.input-group .form-select.is-invalid:focus {\n  z-index: 3;\n}\n\n.btn {\n  display: inline-block;\n  font-weight: 400;\n  line-height: 1.5;\n  color: #495057;\n  text-align: center;\n  text-decoration: none;\n  vertical-align: middle;\n  cursor: pointer;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  user-select: none;\n  background-color: transparent;\n  border: 1px solid transparent;\n  padding: 0.375rem 0.75rem;\n  font-size: 1rem;\n  border-radius: 0.25rem;\n  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .btn {\n    transition: none;\n  }\n}\n\n.btn:hover {\n  color: #495057;\n}\n\n.btn-check:focus + .btn, .btn:focus {\n  outline: 0;\n  box-shadow: 0 0 0 0.25rem rgba(47, 164, 231, 0.25);\n}\n\n.btn:disabled, .btn.disabled,\nfieldset:disabled .btn {\n  pointer-events: none;\n  opacity: 0.65;\n}\n\n.btn-primary {\n  color: #fff;\n  background-color: #2fa4e7;\n  border-color: #2fa4e7;\n}\n\n.btn-primary:hover {\n  color: #fff;\n  background-color: #288bc4;\n  border-color: #2683b9;\n}\n\n.btn-check:focus + .btn-primary, .btn-primary:focus {\n  color: #fff;\n  background-color: #288bc4;\n  border-color: #2683b9;\n  box-shadow: 0 0 0 0.25rem rgba(78, 178, 235, 0.5);\n}\n\n.btn-check:checked + .btn-primary,\n.btn-check:active + .btn-primary, .btn-primary:active, .btn-primary.active,\n.show > .btn-primary.dropdown-toggle {\n  color: #fff;\n  background-color: #2683b9;\n  border-color: #237bad;\n}\n\n.btn-check:checked + .btn-primary:focus,\n.btn-check:active + .btn-primary:focus, .btn-primary:active:focus, .btn-primary.active:focus,\n.show > .btn-primary.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.25rem rgba(78, 178, 235, 0.5);\n}\n\n.btn-primary:disabled, .btn-primary.disabled {\n  color: #fff;\n  background-color: #2fa4e7;\n  border-color: #2fa4e7;\n}\n\n.btn-secondary {\n  color: #000;\n  background-color: #e9ecef;\n  border-color: #e9ecef;\n}\n\n.btn-secondary:hover {\n  color: #000;\n  background-color: #eceff1;\n  border-color: #ebeef1;\n}\n\n.btn-check:focus + .btn-secondary, .btn-secondary:focus {\n  color: #000;\n  background-color: #eceff1;\n  border-color: #ebeef1;\n  box-shadow: 0 0 0 0.25rem rgba(198, 201, 203, 0.5);\n}\n\n.btn-check:checked + .btn-secondary,\n.btn-check:active + .btn-secondary, .btn-secondary:active, .btn-secondary.active,\n.show > .btn-secondary.dropdown-toggle {\n  color: #000;\n  background-color: #edf0f2;\n  border-color: #ebeef1;\n}\n\n.btn-check:checked + .btn-secondary:focus,\n.btn-check:active + .btn-secondary:focus, .btn-secondary:active:focus, .btn-secondary.active:focus,\n.show > .btn-secondary.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.25rem rgba(198, 201, 203, 0.5);\n}\n\n.btn-secondary:disabled, .btn-secondary.disabled {\n  color: #000;\n  background-color: #e9ecef;\n  border-color: #e9ecef;\n}\n\n.btn-success {\n  color: #fff;\n  background-color: #73a839;\n  border-color: #73a839;\n}\n\n.btn-success:hover {\n  color: #fff;\n  background-color: #628f30;\n  border-color: #5c862e;\n}\n\n.btn-check:focus + .btn-success, .btn-success:focus {\n  color: #fff;\n  background-color: #628f30;\n  border-color: #5c862e;\n  box-shadow: 0 0 0 0.25rem rgba(136, 181, 87, 0.5);\n}\n\n.btn-check:checked + .btn-success,\n.btn-check:active + .btn-success, .btn-success:active, .btn-success.active,\n.show > .btn-success.dropdown-toggle {\n  color: #fff;\n  background-color: #5c862e;\n  border-color: #567e2b;\n}\n\n.btn-check:checked + .btn-success:focus,\n.btn-check:active + .btn-success:focus, .btn-success:active:focus, .btn-success.active:focus,\n.show > .btn-success.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.25rem rgba(136, 181, 87, 0.5);\n}\n\n.btn-success:disabled, .btn-success.disabled {\n  color: #fff;\n  background-color: #73a839;\n  border-color: #73a839;\n}\n\n.btn-info {\n  color: #fff;\n  background-color: #033c73;\n  border-color: #033c73;\n}\n\n.btn-info:hover {\n  color: #fff;\n  background-color: #033362;\n  border-color: #02305c;\n}\n\n.btn-check:focus + .btn-info, .btn-info:focus {\n  color: #fff;\n  background-color: #033362;\n  border-color: #02305c;\n  box-shadow: 0 0 0 0.25rem rgba(41, 89, 136, 0.5);\n}\n\n.btn-check:checked + .btn-info,\n.btn-check:active + .btn-info, .btn-info:active, .btn-info.active,\n.show > .btn-info.dropdown-toggle {\n  color: #fff;\n  background-color: #02305c;\n  border-color: #022d56;\n}\n\n.btn-check:checked + .btn-info:focus,\n.btn-check:active + .btn-info:focus, .btn-info:active:focus, .btn-info.active:focus,\n.show > .btn-info.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.25rem rgba(41, 89, 136, 0.5);\n}\n\n.btn-info:disabled, .btn-info.disabled {\n  color: #fff;\n  background-color: #033c73;\n  border-color: #033c73;\n}\n\n.btn-warning {\n  color: #fff;\n  background-color: #dd5600;\n  border-color: #dd5600;\n}\n\n.btn-warning:hover {\n  color: #fff;\n  background-color: #bc4900;\n  border-color: #b14500;\n}\n\n.btn-check:focus + .btn-warning, .btn-warning:focus {\n  color: #fff;\n  background-color: #bc4900;\n  border-color: #b14500;\n  box-shadow: 0 0 0 0.25rem rgba(226, 111, 38, 0.5);\n}\n\n.btn-check:checked + .btn-warning,\n.btn-check:active + .btn-warning, .btn-warning:active, .btn-warning.active,\n.show > .btn-warning.dropdown-toggle {\n  color: #fff;\n  background-color: #b14500;\n  border-color: #a64100;\n}\n\n.btn-check:checked + .btn-warning:focus,\n.btn-check:active + .btn-warning:focus, .btn-warning:active:focus, .btn-warning.active:focus,\n.show > .btn-warning.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.25rem rgba(226, 111, 38, 0.5);\n}\n\n.btn-warning:disabled, .btn-warning.disabled {\n  color: #fff;\n  background-color: #dd5600;\n  border-color: #dd5600;\n}\n\n.btn-danger {\n  color: #fff;\n  background-color: #c71c22;\n  border-color: #c71c22;\n}\n\n.btn-danger:hover {\n  color: #fff;\n  background-color: #a9181d;\n  border-color: #9f161b;\n}\n\n.btn-check:focus + .btn-danger, .btn-danger:focus {\n  color: #fff;\n  background-color: #a9181d;\n  border-color: #9f161b;\n  box-shadow: 0 0 0 0.25rem rgba(207, 62, 67, 0.5);\n}\n\n.btn-check:checked + .btn-danger,\n.btn-check:active + .btn-danger, .btn-danger:active, .btn-danger.active,\n.show > .btn-danger.dropdown-toggle {\n  color: #fff;\n  background-color: #9f161b;\n  border-color: #95151a;\n}\n\n.btn-check:checked + .btn-danger:focus,\n.btn-check:active + .btn-danger:focus, .btn-danger:active:focus, .btn-danger.active:focus,\n.show > .btn-danger.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.25rem rgba(207, 62, 67, 0.5);\n}\n\n.btn-danger:disabled, .btn-danger.disabled {\n  color: #fff;\n  background-color: #c71c22;\n  border-color: #c71c22;\n}\n\n.btn-light {\n  color: #000;\n  background-color: #f8f9fa;\n  border-color: #f8f9fa;\n}\n\n.btn-light:hover {\n  color: #000;\n  background-color: #f9fafb;\n  border-color: #f9fafb;\n}\n\n.btn-check:focus + .btn-light, .btn-light:focus {\n  color: #000;\n  background-color: #f9fafb;\n  border-color: #f9fafb;\n  box-shadow: 0 0 0 0.25rem rgba(211, 212, 213, 0.5);\n}\n\n.btn-check:checked + .btn-light,\n.btn-check:active + .btn-light, .btn-light:active, .btn-light.active,\n.show > .btn-light.dropdown-toggle {\n  color: #000;\n  background-color: #f9fafb;\n  border-color: #f9fafb;\n}\n\n.btn-check:checked + .btn-light:focus,\n.btn-check:active + .btn-light:focus, .btn-light:active:focus, .btn-light.active:focus,\n.show > .btn-light.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.25rem rgba(211, 212, 213, 0.5);\n}\n\n.btn-light:disabled, .btn-light.disabled {\n  color: #000;\n  background-color: #f8f9fa;\n  border-color: #f8f9fa;\n}\n\n.btn-dark {\n  color: #fff;\n  background-color: #343a40;\n  border-color: #343a40;\n}\n\n.btn-dark:hover {\n  color: #fff;\n  background-color: #2c3136;\n  border-color: #2a2e33;\n}\n\n.btn-check:focus + .btn-dark, .btn-dark:focus {\n  color: #fff;\n  background-color: #2c3136;\n  border-color: #2a2e33;\n  box-shadow: 0 0 0 0.25rem rgba(82, 88, 93, 0.5);\n}\n\n.btn-check:checked + .btn-dark,\n.btn-check:active + .btn-dark, .btn-dark:active, .btn-dark.active,\n.show > .btn-dark.dropdown-toggle {\n  color: #fff;\n  background-color: #2a2e33;\n  border-color: #272c30;\n}\n\n.btn-check:checked + .btn-dark:focus,\n.btn-check:active + .btn-dark:focus, .btn-dark:active:focus, .btn-dark.active:focus,\n.show > .btn-dark.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.25rem rgba(82, 88, 93, 0.5);\n}\n\n.btn-dark:disabled, .btn-dark.disabled {\n  color: #fff;\n  background-color: #343a40;\n  border-color: #343a40;\n}\n\n.btn-outline-primary {\n  color: #2fa4e7;\n  border-color: #2fa4e7;\n}\n\n.btn-outline-primary:hover {\n  color: #fff;\n  background-color: #2fa4e7;\n  border-color: #2fa4e7;\n}\n\n.btn-check:focus + .btn-outline-primary, .btn-outline-primary:focus {\n  box-shadow: 0 0 0 0.25rem rgba(47, 164, 231, 0.5);\n}\n\n.btn-check:checked + .btn-outline-primary,\n.btn-check:active + .btn-outline-primary, .btn-outline-primary:active, .btn-outline-primary.active, .btn-outline-primary.dropdown-toggle.show {\n  color: #fff;\n  background-color: #2fa4e7;\n  border-color: #2fa4e7;\n}\n\n.btn-check:checked + .btn-outline-primary:focus,\n.btn-check:active + .btn-outline-primary:focus, .btn-outline-primary:active:focus, .btn-outline-primary.active:focus, .btn-outline-primary.dropdown-toggle.show:focus {\n  box-shadow: 0 0 0 0.25rem rgba(47, 164, 231, 0.5);\n}\n\n.btn-outline-primary:disabled, .btn-outline-primary.disabled {\n  color: #2fa4e7;\n  background-color: transparent;\n}\n\n.btn-outline-secondary {\n  color: #e9ecef;\n  border-color: #e9ecef;\n}\n\n.btn-outline-secondary:hover {\n  color: #000;\n  background-color: #e9ecef;\n  border-color: #e9ecef;\n}\n\n.btn-check:focus + .btn-outline-secondary, .btn-outline-secondary:focus {\n  box-shadow: 0 0 0 0.25rem rgba(233, 236, 239, 0.5);\n}\n\n.btn-check:checked + .btn-outline-secondary,\n.btn-check:active + .btn-outline-secondary, .btn-outline-secondary:active, .btn-outline-secondary.active, .btn-outline-secondary.dropdown-toggle.show {\n  color: #000;\n  background-color: #e9ecef;\n  border-color: #e9ecef;\n}\n\n.btn-check:checked + .btn-outline-secondary:focus,\n.btn-check:active + .btn-outline-secondary:focus, .btn-outline-secondary:active:focus, .btn-outline-secondary.active:focus, .btn-outline-secondary.dropdown-toggle.show:focus {\n  box-shadow: 0 0 0 0.25rem rgba(233, 236, 239, 0.5);\n}\n\n.btn-outline-secondary:disabled, .btn-outline-secondary.disabled {\n  color: #e9ecef;\n  background-color: transparent;\n}\n\n.btn-outline-success {\n  color: #73a839;\n  border-color: #73a839;\n}\n\n.btn-outline-success:hover {\n  color: #fff;\n  background-color: #73a839;\n  border-color: #73a839;\n}\n\n.btn-check:focus + .btn-outline-success, .btn-outline-success:focus {\n  box-shadow: 0 0 0 0.25rem rgba(115, 168, 57, 0.5);\n}\n\n.btn-check:checked + .btn-outline-success,\n.btn-check:active + .btn-outline-success, .btn-outline-success:active, .btn-outline-success.active, .btn-outline-success.dropdown-toggle.show {\n  color: #fff;\n  background-color: #73a839;\n  border-color: #73a839;\n}\n\n.btn-check:checked + .btn-outline-success:focus,\n.btn-check:active + .btn-outline-success:focus, .btn-outline-success:active:focus, .btn-outline-success.active:focus, .btn-outline-success.dropdown-toggle.show:focus {\n  box-shadow: 0 0 0 0.25rem rgba(115, 168, 57, 0.5);\n}\n\n.btn-outline-success:disabled, .btn-outline-success.disabled {\n  color: #73a839;\n  background-color: transparent;\n}\n\n.btn-outline-info {\n  color: #033c73;\n  border-color: #033c73;\n}\n\n.btn-outline-info:hover {\n  color: #fff;\n  background-color: #033c73;\n  border-color: #033c73;\n}\n\n.btn-check:focus + .btn-outline-info, .btn-outline-info:focus {\n  box-shadow: 0 0 0 0.25rem rgba(3, 60, 115, 0.5);\n}\n\n.btn-check:checked + .btn-outline-info,\n.btn-check:active + .btn-outline-info, .btn-outline-info:active, .btn-outline-info.active, .btn-outline-info.dropdown-toggle.show {\n  color: #fff;\n  background-color: #033c73;\n  border-color: #033c73;\n}\n\n.btn-check:checked + .btn-outline-info:focus,\n.btn-check:active + .btn-outline-info:focus, .btn-outline-info:active:focus, .btn-outline-info.active:focus, .btn-outline-info.dropdown-toggle.show:focus {\n  box-shadow: 0 0 0 0.25rem rgba(3, 60, 115, 0.5);\n}\n\n.btn-outline-info:disabled, .btn-outline-info.disabled {\n  color: #033c73;\n  background-color: transparent;\n}\n\n.btn-outline-warning {\n  color: #dd5600;\n  border-color: #dd5600;\n}\n\n.btn-outline-warning:hover {\n  color: #fff;\n  background-color: #dd5600;\n  border-color: #dd5600;\n}\n\n.btn-check:focus + .btn-outline-warning, .btn-outline-warning:focus {\n  box-shadow: 0 0 0 0.25rem rgba(221, 86, 0, 0.5);\n}\n\n.btn-check:checked + .btn-outline-warning,\n.btn-check:active + .btn-outline-warning, .btn-outline-warning:active, .btn-outline-warning.active, .btn-outline-warning.dropdown-toggle.show {\n  color: #fff;\n  background-color: #dd5600;\n  border-color: #dd5600;\n}\n\n.btn-check:checked + .btn-outline-warning:focus,\n.btn-check:active + .btn-outline-warning:focus, .btn-outline-warning:active:focus, .btn-outline-warning.active:focus, .btn-outline-warning.dropdown-toggle.show:focus {\n  box-shadow: 0 0 0 0.25rem rgba(221, 86, 0, 0.5);\n}\n\n.btn-outline-warning:disabled, .btn-outline-warning.disabled {\n  color: #dd5600;\n  background-color: transparent;\n}\n\n.btn-outline-danger {\n  color: #c71c22;\n  border-color: #c71c22;\n}\n\n.btn-outline-danger:hover {\n  color: #fff;\n  background-color: #c71c22;\n  border-color: #c71c22;\n}\n\n.btn-check:focus + .btn-outline-danger, .btn-outline-danger:focus {\n  box-shadow: 0 0 0 0.25rem rgba(199, 28, 34, 0.5);\n}\n\n.btn-check:checked + .btn-outline-danger,\n.btn-check:active + .btn-outline-danger, .btn-outline-danger:active, .btn-outline-danger.active, .btn-outline-danger.dropdown-toggle.show {\n  color: #fff;\n  background-color: #c71c22;\n  border-color: #c71c22;\n}\n\n.btn-check:checked + .btn-outline-danger:focus,\n.btn-check:active + .btn-outline-danger:focus, .btn-outline-danger:active:focus, .btn-outline-danger.active:focus, .btn-outline-danger.dropdown-toggle.show:focus {\n  box-shadow: 0 0 0 0.25rem rgba(199, 28, 34, 0.5);\n}\n\n.btn-outline-danger:disabled, .btn-outline-danger.disabled {\n  color: #c71c22;\n  background-color: transparent;\n}\n\n.btn-outline-light {\n  color: #f8f9fa;\n  border-color: #f8f9fa;\n}\n\n.btn-outline-light:hover {\n  color: #000;\n  background-color: #f8f9fa;\n  border-color: #f8f9fa;\n}\n\n.btn-check:focus + .btn-outline-light, .btn-outline-light:focus {\n  box-shadow: 0 0 0 0.25rem rgba(248, 249, 250, 0.5);\n}\n\n.btn-check:checked + .btn-outline-light,\n.btn-check:active + .btn-outline-light, .btn-outline-light:active, .btn-outline-light.active, .btn-outline-light.dropdown-toggle.show {\n  color: #000;\n  background-color: #f8f9fa;\n  border-color: #f8f9fa;\n}\n\n.btn-check:checked + .btn-outline-light:focus,\n.btn-check:active + .btn-outline-light:focus, .btn-outline-light:active:focus, .btn-outline-light.active:focus, .btn-outline-light.dropdown-toggle.show:focus {\n  box-shadow: 0 0 0 0.25rem rgba(248, 249, 250, 0.5);\n}\n\n.btn-outline-light:disabled, .btn-outline-light.disabled {\n  color: #f8f9fa;\n  background-color: transparent;\n}\n\n.btn-outline-dark {\n  color: #343a40;\n  border-color: #343a40;\n}\n\n.btn-outline-dark:hover {\n  color: #fff;\n  background-color: #343a40;\n  border-color: #343a40;\n}\n\n.btn-check:focus + .btn-outline-dark, .btn-outline-dark:focus {\n  box-shadow: 0 0 0 0.25rem rgba(52, 58, 64, 0.5);\n}\n\n.btn-check:checked + .btn-outline-dark,\n.btn-check:active + .btn-outline-dark, .btn-outline-dark:active, .btn-outline-dark.active, .btn-outline-dark.dropdown-toggle.show {\n  color: #fff;\n  background-color: #343a40;\n  border-color: #343a40;\n}\n\n.btn-check:checked + .btn-outline-dark:focus,\n.btn-check:active + .btn-outline-dark:focus, .btn-outline-dark:active:focus, .btn-outline-dark.active:focus, .btn-outline-dark.dropdown-toggle.show:focus {\n  box-shadow: 0 0 0 0.25rem rgba(52, 58, 64, 0.5);\n}\n\n.btn-outline-dark:disabled, .btn-outline-dark.disabled {\n  color: #343a40;\n  background-color: transparent;\n}\n\n.btn-link {\n  font-weight: 400;\n  color: #2fa4e7;\n  text-decoration: underline;\n}\n\n.btn-link:hover {\n  color: #2683b9;\n}\n\n.btn-link:disabled, .btn-link.disabled {\n  color: #868e96;\n}\n\n.btn-lg, .btn-group-lg > .btn {\n  padding: 0.5rem 1rem;\n  font-size: 1.25rem;\n  border-radius: 0.3rem;\n}\n\n.btn-sm, .btn-group-sm > .btn {\n  padding: 0.25rem 0.5rem;\n  font-size: 0.875rem;\n  border-radius: 0.2rem;\n}\n\n.fade {\n  transition: opacity 0.15s linear;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .fade {\n    transition: none;\n  }\n}\n\n.fade:not(.show) {\n  opacity: 0;\n}\n\n.collapse:not(.show) {\n  display: none;\n}\n\n.collapsing {\n  height: 0;\n  overflow: hidden;\n  transition: height 0.35s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .collapsing {\n    transition: none;\n  }\n}\n\n.collapsing.collapse-horizontal {\n  width: 0;\n  height: auto;\n  transition: width 0.35s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .collapsing.collapse-horizontal {\n    transition: none;\n  }\n}\n\n.dropup,\n.dropend,\n.dropdown,\n.dropstart {\n  position: relative;\n}\n\n.dropdown-toggle {\n  white-space: nowrap;\n}\n\n.dropdown-toggle::after {\n  display: inline-block;\n  margin-left: 0.255em;\n  vertical-align: 0.255em;\n  content: \"\";\n  border-top: 0.3em solid;\n  border-right: 0.3em solid transparent;\n  border-bottom: 0;\n  border-left: 0.3em solid transparent;\n}\n\n.dropdown-toggle:empty::after {\n  margin-left: 0;\n}\n\n.dropdown-menu {\n  position: absolute;\n  z-index: 1000;\n  display: none;\n  min-width: 10rem;\n  padding: 0.5rem 0;\n  margin: 0;\n  font-size: 1rem;\n  color: #495057;\n  text-align: left;\n  list-style: none;\n  background-color: #fff;\n  background-clip: padding-box;\n  border: 1px solid rgba(0, 0, 0, 0.15);\n  border-radius: 0.25rem;\n}\n\n.dropdown-menu[data-bs-popper] {\n  top: 100%;\n  left: 0;\n  margin-top: 0.125rem;\n}\n\n.dropdown-menu-start {\n  --bs-position: start;\n}\n\n.dropdown-menu-start[data-bs-popper] {\n  right: auto;\n  left: 0;\n}\n\n.dropdown-menu-end {\n  --bs-position: end;\n}\n\n.dropdown-menu-end[data-bs-popper] {\n  right: 0;\n  left: auto;\n}\n\n@media (min-width: 576px) {\n  .dropdown-menu-sm-start {\n    --bs-position: start;\n  }\n  .dropdown-menu-sm-start[data-bs-popper] {\n    right: auto;\n    left: 0;\n  }\n  .dropdown-menu-sm-end {\n    --bs-position: end;\n  }\n  .dropdown-menu-sm-end[data-bs-popper] {\n    right: 0;\n    left: auto;\n  }\n}\n\n@media (min-width: 768px) {\n  .dropdown-menu-md-start {\n    --bs-position: start;\n  }\n  .dropdown-menu-md-start[data-bs-popper] {\n    right: auto;\n    left: 0;\n  }\n  .dropdown-menu-md-end {\n    --bs-position: end;\n  }\n  .dropdown-menu-md-end[data-bs-popper] {\n    right: 0;\n    left: auto;\n  }\n}\n\n@media (min-width: 992px) {\n  .dropdown-menu-lg-start {\n    --bs-position: start;\n  }\n  .dropdown-menu-lg-start[data-bs-popper] {\n    right: auto;\n    left: 0;\n  }\n  .dropdown-menu-lg-end {\n    --bs-position: end;\n  }\n  .dropdown-menu-lg-end[data-bs-popper] {\n    right: 0;\n    left: auto;\n  }\n}\n\n@media (min-width: 1200px) {\n  .dropdown-menu-xl-start {\n    --bs-position: start;\n  }\n  .dropdown-menu-xl-start[data-bs-popper] {\n    right: auto;\n    left: 0;\n  }\n  .dropdown-menu-xl-end {\n    --bs-position: end;\n  }\n  .dropdown-menu-xl-end[data-bs-popper] {\n    right: 0;\n    left: auto;\n  }\n}\n\n@media (min-width: 1400px) {\n  .dropdown-menu-xxl-start {\n    --bs-position: start;\n  }\n  .dropdown-menu-xxl-start[data-bs-popper] {\n    right: auto;\n    left: 0;\n  }\n  .dropdown-menu-xxl-end {\n    --bs-position: end;\n  }\n  .dropdown-menu-xxl-end[data-bs-popper] {\n    right: 0;\n    left: auto;\n  }\n}\n\n.dropup .dropdown-menu[data-bs-popper] {\n  top: auto;\n  bottom: 100%;\n  margin-top: 0;\n  margin-bottom: 0.125rem;\n}\n\n.dropup .dropdown-toggle::after {\n  display: inline-block;\n  margin-left: 0.255em;\n  vertical-align: 0.255em;\n  content: \"\";\n  border-top: 0;\n  border-right: 0.3em solid transparent;\n  border-bottom: 0.3em solid;\n  border-left: 0.3em solid transparent;\n}\n\n.dropup .dropdown-toggle:empty::after {\n  margin-left: 0;\n}\n\n.dropend .dropdown-menu[data-bs-popper] {\n  top: 0;\n  right: auto;\n  left: 100%;\n  margin-top: 0;\n  margin-left: 0.125rem;\n}\n\n.dropend .dropdown-toggle::after {\n  display: inline-block;\n  margin-left: 0.255em;\n  vertical-align: 0.255em;\n  content: \"\";\n  border-top: 0.3em solid transparent;\n  border-right: 0;\n  border-bottom: 0.3em solid transparent;\n  border-left: 0.3em solid;\n}\n\n.dropend .dropdown-toggle:empty::after {\n  margin-left: 0;\n}\n\n.dropend .dropdown-toggle::after {\n  vertical-align: 0;\n}\n\n.dropstart .dropdown-menu[data-bs-popper] {\n  top: 0;\n  right: 100%;\n  left: auto;\n  margin-top: 0;\n  margin-right: 0.125rem;\n}\n\n.dropstart .dropdown-toggle::after {\n  display: inline-block;\n  margin-left: 0.255em;\n  vertical-align: 0.255em;\n  content: \"\";\n}\n\n.dropstart .dropdown-toggle::after {\n  display: none;\n}\n\n.dropstart .dropdown-toggle::before {\n  display: inline-block;\n  margin-right: 0.255em;\n  vertical-align: 0.255em;\n  content: \"\";\n  border-top: 0.3em solid transparent;\n  border-right: 0.3em solid;\n  border-bottom: 0.3em solid transparent;\n}\n\n.dropstart .dropdown-toggle:empty::after {\n  margin-left: 0;\n}\n\n.dropstart .dropdown-toggle::before {\n  vertical-align: 0;\n}\n\n.dropdown-divider {\n  height: 0;\n  margin: 0.5rem 0;\n  overflow: hidden;\n  border-top: 1px solid rgba(0, 0, 0, 0.15);\n}\n\n.dropdown-item {\n  display: block;\n  width: 100%;\n  padding: 0.25rem 1rem;\n  clear: both;\n  font-weight: 400;\n  color: #495057;\n  text-align: inherit;\n  text-decoration: none;\n  white-space: nowrap;\n  background-color: transparent;\n  border: 0;\n}\n\n.dropdown-item:hover, .dropdown-item:focus {\n  color: #fff;\n  background-color: #2fa4e7;\n}\n\n.dropdown-item.active, .dropdown-item:active {\n  color: #fff;\n  text-decoration: none;\n  background-color: #2fa4e7;\n}\n\n.dropdown-item.disabled, .dropdown-item:disabled {\n  color: #adb5bd;\n  pointer-events: none;\n  background-color: transparent;\n}\n\n.dropdown-menu.show {\n  display: block;\n}\n\n.dropdown-header {\n  display: block;\n  padding: 0.5rem 1rem;\n  margin-bottom: 0;\n  font-size: 0.875rem;\n  color: #868e96;\n  white-space: nowrap;\n}\n\n.dropdown-item-text {\n  display: block;\n  padding: 0.25rem 1rem;\n  color: #495057;\n}\n\n.dropdown-menu-dark {\n  color: #dee2e6;\n  background-color: #343a40;\n  border-color: rgba(0, 0, 0, 0.15);\n}\n\n.dropdown-menu-dark .dropdown-item {\n  color: #dee2e6;\n}\n\n.dropdown-menu-dark .dropdown-item:hover, .dropdown-menu-dark .dropdown-item:focus {\n  color: #fff;\n  background-color: rgba(255, 255, 255, 0.15);\n}\n\n.dropdown-menu-dark .dropdown-item.active, .dropdown-menu-dark .dropdown-item:active {\n  color: #fff;\n  background-color: #2fa4e7;\n}\n\n.dropdown-menu-dark .dropdown-item.disabled, .dropdown-menu-dark .dropdown-item:disabled {\n  color: #adb5bd;\n}\n\n.dropdown-menu-dark .dropdown-divider {\n  border-color: rgba(0, 0, 0, 0.15);\n}\n\n.dropdown-menu-dark .dropdown-item-text {\n  color: #dee2e6;\n}\n\n.dropdown-menu-dark .dropdown-header {\n  color: #adb5bd;\n}\n\n.btn-group,\n.btn-group-vertical {\n  position: relative;\n  display: -ms-inline-flexbox;\n  display: inline-flex;\n  vertical-align: middle;\n}\n\n.btn-group > .btn,\n.btn-group-vertical > .btn {\n  position: relative;\n  -ms-flex: 1 1 auto;\n  flex: 1 1 auto;\n}\n\n.btn-group > .btn-check:checked + .btn,\n.btn-group > .btn-check:focus + .btn,\n.btn-group > .btn:hover,\n.btn-group > .btn:focus,\n.btn-group > .btn:active,\n.btn-group > .btn.active,\n.btn-group-vertical > .btn-check:checked + .btn,\n.btn-group-vertical > .btn-check:focus + .btn,\n.btn-group-vertical > .btn:hover,\n.btn-group-vertical > .btn:focus,\n.btn-group-vertical > .btn:active,\n.btn-group-vertical > .btn.active {\n  z-index: 1;\n}\n\n.btn-toolbar {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n  flex-wrap: wrap;\n  -ms-flex-pack: start;\n  justify-content: flex-start;\n}\n\n.btn-toolbar .input-group {\n  width: auto;\n}\n\n.btn-group > .btn:not(:first-child),\n.btn-group > .btn-group:not(:first-child) {\n  margin-left: -1px;\n}\n\n.btn-group > .btn:not(:last-child):not(.dropdown-toggle),\n.btn-group > .btn-group:not(:last-child) > .btn {\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n}\n\n.btn-group > .btn:nth-child(n + 3),\n.btn-group > :not(.btn-check) + .btn,\n.btn-group > .btn-group:not(:first-child) > .btn {\n  border-top-left-radius: 0;\n  border-bottom-left-radius: 0;\n}\n\n.dropdown-toggle-split {\n  padding-right: 0.5625rem;\n  padding-left: 0.5625rem;\n}\n\n.dropdown-toggle-split::after,\n.dropup .dropdown-toggle-split::after,\n.dropend .dropdown-toggle-split::after {\n  margin-left: 0;\n}\n\n.dropstart .dropdown-toggle-split::before {\n  margin-right: 0;\n}\n\n.btn-sm + .dropdown-toggle-split, .btn-group-sm > .btn + .dropdown-toggle-split {\n  padding-right: 0.375rem;\n  padding-left: 0.375rem;\n}\n\n.btn-lg + .dropdown-toggle-split, .btn-group-lg > .btn + .dropdown-toggle-split {\n  padding-right: 0.75rem;\n  padding-left: 0.75rem;\n}\n\n.btn-group-vertical {\n  -ms-flex-direction: column;\n  flex-direction: column;\n  -ms-flex-align: start;\n  align-items: flex-start;\n  -ms-flex-pack: center;\n  justify-content: center;\n}\n\n.btn-group-vertical > .btn,\n.btn-group-vertical > .btn-group {\n  width: 100%;\n}\n\n.btn-group-vertical > .btn:not(:first-child),\n.btn-group-vertical > .btn-group:not(:first-child) {\n  margin-top: -1px;\n}\n\n.btn-group-vertical > .btn:not(:last-child):not(.dropdown-toggle),\n.btn-group-vertical > .btn-group:not(:last-child) > .btn {\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 0;\n}\n\n.btn-group-vertical > .btn ~ .btn,\n.btn-group-vertical > .btn-group:not(:first-child) > .btn {\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n}\n\n.nav {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n  flex-wrap: wrap;\n  padding-left: 0;\n  margin-bottom: 0;\n  list-style: none;\n}\n\n.nav-link {\n  display: block;\n  padding: 0.5rem 1rem;\n  color: #2fa4e7;\n  text-decoration: none;\n  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .nav-link {\n    transition: none;\n  }\n}\n\n.nav-link:hover, .nav-link:focus {\n  color: #2683b9;\n}\n\n.nav-link.disabled {\n  color: #868e96;\n  pointer-events: none;\n  cursor: default;\n}\n\n.nav-tabs {\n  border-bottom: 1px solid #dee2e6;\n}\n\n.nav-tabs .nav-link {\n  margin-bottom: -1px;\n  background: none;\n  border: 1px solid transparent;\n  border-top-left-radius: 0.25rem;\n  border-top-right-radius: 0.25rem;\n}\n\n.nav-tabs .nav-link:hover, .nav-tabs .nav-link:focus {\n  border-color: #e9ecef #e9ecef #dee2e6;\n  isolation: isolate;\n}\n\n.nav-tabs .nav-link.disabled {\n  color: #868e96;\n  background-color: transparent;\n  border-color: transparent;\n}\n\n.nav-tabs .nav-link.active,\n.nav-tabs .nav-item.show .nav-link {\n  color: #495057;\n  background-color: #fff;\n  border-color: #dee2e6 #dee2e6 #fff;\n}\n\n.nav-tabs .dropdown-menu {\n  margin-top: -1px;\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n}\n\n.nav-pills .nav-link {\n  background: none;\n  border: 0;\n  border-radius: 0.25rem;\n}\n\n.nav-pills .nav-link.active,\n.nav-pills .show > .nav-link {\n  color: #fff;\n  background-color: #2fa4e7;\n}\n\n.nav-fill > .nav-link,\n.nav-fill .nav-item {\n  -ms-flex: 1 1 auto;\n  flex: 1 1 auto;\n  text-align: center;\n}\n\n.nav-justified > .nav-link,\n.nav-justified .nav-item {\n  -ms-flex-preferred-size: 0;\n  flex-basis: 0;\n  -ms-flex-positive: 1;\n  flex-grow: 1;\n  text-align: center;\n}\n\n.nav-fill .nav-item .nav-link,\n.nav-justified .nav-item .nav-link {\n  width: 100%;\n}\n\n.tab-content > .tab-pane {\n  display: none;\n}\n\n.tab-content > .active {\n  display: block;\n}\n\n.navbar {\n  position: relative;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n  flex-wrap: wrap;\n  -ms-flex-align: center;\n  align-items: center;\n  -ms-flex-pack: justify;\n  justify-content: space-between;\n  padding-top: 0.5rem;\n  padding-bottom: 0.5rem;\n}\n\n.navbar > .container,\n.navbar > .container-fluid, .navbar > .container-sm, .navbar > .container-md, .navbar > .container-lg, .navbar > .container-xl, .navbar > .container-xxl {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: inherit;\n  flex-wrap: inherit;\n  -ms-flex-align: center;\n  align-items: center;\n  -ms-flex-pack: justify;\n  justify-content: space-between;\n}\n\n.navbar-brand {\n  padding-top: 0.3125rem;\n  padding-bottom: 0.3125rem;\n  margin-right: 1rem;\n  font-size: 1.25rem;\n  text-decoration: none;\n  white-space: nowrap;\n}\n\n.navbar-nav {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  padding-left: 0;\n  margin-bottom: 0;\n  list-style: none;\n}\n\n.navbar-nav .nav-link {\n  padding-right: 0;\n  padding-left: 0;\n}\n\n.navbar-nav .dropdown-menu {\n  position: static;\n}\n\n.navbar-text {\n  padding-top: 0.5rem;\n  padding-bottom: 0.5rem;\n}\n\n.navbar-collapse {\n  -ms-flex-preferred-size: 100%;\n  flex-basis: 100%;\n  -ms-flex-positive: 1;\n  flex-grow: 1;\n  -ms-flex-align: center;\n  align-items: center;\n}\n\n.navbar-toggler {\n  padding: 0.25rem 0.75rem;\n  font-size: 1.25rem;\n  line-height: 1;\n  background-color: transparent;\n  border: 1px solid transparent;\n  border-radius: 0.25rem;\n  transition: box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .navbar-toggler {\n    transition: none;\n  }\n}\n\n.navbar-toggler:hover {\n  text-decoration: none;\n}\n\n.navbar-toggler:focus {\n  text-decoration: none;\n  outline: 0;\n  box-shadow: 0 0 0 0.25rem;\n}\n\n.navbar-toggler-icon {\n  display: inline-block;\n  width: 1.5em;\n  height: 1.5em;\n  vertical-align: middle;\n  background-repeat: no-repeat;\n  background-position: center;\n  background-size: 100%;\n}\n\n.navbar-nav-scroll {\n  max-height: var(--bs-scroll-height, 75vh);\n  overflow-y: auto;\n}\n\n@media (min-width: 576px) {\n  .navbar-expand-sm {\n    -ms-flex-wrap: nowrap;\n    flex-wrap: nowrap;\n    -ms-flex-pack: start;\n    justify-content: flex-start;\n  }\n  .navbar-expand-sm .navbar-nav {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .navbar-expand-sm .navbar-nav .dropdown-menu {\n    position: absolute;\n  }\n  .navbar-expand-sm .navbar-nav .nav-link {\n    padding-right: 0.5rem;\n    padding-left: 0.5rem;\n  }\n  .navbar-expand-sm .navbar-nav-scroll {\n    overflow: visible;\n  }\n  .navbar-expand-sm .navbar-collapse {\n    display: -ms-flexbox !important;\n    display: flex !important;\n    -ms-flex-preferred-size: auto;\n    flex-basis: auto;\n  }\n  .navbar-expand-sm .navbar-toggler {\n    display: none;\n  }\n  .navbar-expand-sm .offcanvas-header {\n    display: none;\n  }\n  .navbar-expand-sm .offcanvas {\n    position: inherit;\n    bottom: 0;\n    z-index: 1000;\n    -ms-flex-positive: 1;\n    flex-grow: 1;\n    visibility: visible !important;\n    background-color: transparent;\n    border-right: 0;\n    border-left: 0;\n    transition: none;\n    -webkit-transform: none;\n    transform: none;\n  }\n  .navbar-expand-sm .offcanvas-top,\n  .navbar-expand-sm .offcanvas-bottom {\n    height: auto;\n    border-top: 0;\n    border-bottom: 0;\n  }\n  .navbar-expand-sm .offcanvas-body {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-positive: 0;\n    flex-grow: 0;\n    padding: 0;\n    overflow-y: visible;\n  }\n}\n\n@media (min-width: 768px) {\n  .navbar-expand-md {\n    -ms-flex-wrap: nowrap;\n    flex-wrap: nowrap;\n    -ms-flex-pack: start;\n    justify-content: flex-start;\n  }\n  .navbar-expand-md .navbar-nav {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .navbar-expand-md .navbar-nav .dropdown-menu {\n    position: absolute;\n  }\n  .navbar-expand-md .navbar-nav .nav-link {\n    padding-right: 0.5rem;\n    padding-left: 0.5rem;\n  }\n  .navbar-expand-md .navbar-nav-scroll {\n    overflow: visible;\n  }\n  .navbar-expand-md .navbar-collapse {\n    display: -ms-flexbox !important;\n    display: flex !important;\n    -ms-flex-preferred-size: auto;\n    flex-basis: auto;\n  }\n  .navbar-expand-md .navbar-toggler {\n    display: none;\n  }\n  .navbar-expand-md .offcanvas-header {\n    display: none;\n  }\n  .navbar-expand-md .offcanvas {\n    position: inherit;\n    bottom: 0;\n    z-index: 1000;\n    -ms-flex-positive: 1;\n    flex-grow: 1;\n    visibility: visible !important;\n    background-color: transparent;\n    border-right: 0;\n    border-left: 0;\n    transition: none;\n    -webkit-transform: none;\n    transform: none;\n  }\n  .navbar-expand-md .offcanvas-top,\n  .navbar-expand-md .offcanvas-bottom {\n    height: auto;\n    border-top: 0;\n    border-bottom: 0;\n  }\n  .navbar-expand-md .offcanvas-body {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-positive: 0;\n    flex-grow: 0;\n    padding: 0;\n    overflow-y: visible;\n  }\n}\n\n@media (min-width: 992px) {\n  .navbar-expand-lg {\n    -ms-flex-wrap: nowrap;\n    flex-wrap: nowrap;\n    -ms-flex-pack: start;\n    justify-content: flex-start;\n  }\n  .navbar-expand-lg .navbar-nav {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .navbar-expand-lg .navbar-nav .dropdown-menu {\n    position: absolute;\n  }\n  .navbar-expand-lg .navbar-nav .nav-link {\n    padding-right: 0.5rem;\n    padding-left: 0.5rem;\n  }\n  .navbar-expand-lg .navbar-nav-scroll {\n    overflow: visible;\n  }\n  .navbar-expand-lg .navbar-collapse {\n    display: -ms-flexbox !important;\n    display: flex !important;\n    -ms-flex-preferred-size: auto;\n    flex-basis: auto;\n  }\n  .navbar-expand-lg .navbar-toggler {\n    display: none;\n  }\n  .navbar-expand-lg .offcanvas-header {\n    display: none;\n  }\n  .navbar-expand-lg .offcanvas {\n    position: inherit;\n    bottom: 0;\n    z-index: 1000;\n    -ms-flex-positive: 1;\n    flex-grow: 1;\n    visibility: visible !important;\n    background-color: transparent;\n    border-right: 0;\n    border-left: 0;\n    transition: none;\n    -webkit-transform: none;\n    transform: none;\n  }\n  .navbar-expand-lg .offcanvas-top,\n  .navbar-expand-lg .offcanvas-bottom {\n    height: auto;\n    border-top: 0;\n    border-bottom: 0;\n  }\n  .navbar-expand-lg .offcanvas-body {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-positive: 0;\n    flex-grow: 0;\n    padding: 0;\n    overflow-y: visible;\n  }\n}\n\n@media (min-width: 1200px) {\n  .navbar-expand-xl {\n    -ms-flex-wrap: nowrap;\n    flex-wrap: nowrap;\n    -ms-flex-pack: start;\n    justify-content: flex-start;\n  }\n  .navbar-expand-xl .navbar-nav {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .navbar-expand-xl .navbar-nav .dropdown-menu {\n    position: absolute;\n  }\n  .navbar-expand-xl .navbar-nav .nav-link {\n    padding-right: 0.5rem;\n    padding-left: 0.5rem;\n  }\n  .navbar-expand-xl .navbar-nav-scroll {\n    overflow: visible;\n  }\n  .navbar-expand-xl .navbar-collapse {\n    display: -ms-flexbox !important;\n    display: flex !important;\n    -ms-flex-preferred-size: auto;\n    flex-basis: auto;\n  }\n  .navbar-expand-xl .navbar-toggler {\n    display: none;\n  }\n  .navbar-expand-xl .offcanvas-header {\n    display: none;\n  }\n  .navbar-expand-xl .offcanvas {\n    position: inherit;\n    bottom: 0;\n    z-index: 1000;\n    -ms-flex-positive: 1;\n    flex-grow: 1;\n    visibility: visible !important;\n    background-color: transparent;\n    border-right: 0;\n    border-left: 0;\n    transition: none;\n    -webkit-transform: none;\n    transform: none;\n  }\n  .navbar-expand-xl .offcanvas-top,\n  .navbar-expand-xl .offcanvas-bottom {\n    height: auto;\n    border-top: 0;\n    border-bottom: 0;\n  }\n  .navbar-expand-xl .offcanvas-body {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-positive: 0;\n    flex-grow: 0;\n    padding: 0;\n    overflow-y: visible;\n  }\n}\n\n@media (min-width: 1400px) {\n  .navbar-expand-xxl {\n    -ms-flex-wrap: nowrap;\n    flex-wrap: nowrap;\n    -ms-flex-pack: start;\n    justify-content: flex-start;\n  }\n  .navbar-expand-xxl .navbar-nav {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .navbar-expand-xxl .navbar-nav .dropdown-menu {\n    position: absolute;\n  }\n  .navbar-expand-xxl .navbar-nav .nav-link {\n    padding-right: 0.5rem;\n    padding-left: 0.5rem;\n  }\n  .navbar-expand-xxl .navbar-nav-scroll {\n    overflow: visible;\n  }\n  .navbar-expand-xxl .navbar-collapse {\n    display: -ms-flexbox !important;\n    display: flex !important;\n    -ms-flex-preferred-size: auto;\n    flex-basis: auto;\n  }\n  .navbar-expand-xxl .navbar-toggler {\n    display: none;\n  }\n  .navbar-expand-xxl .offcanvas-header {\n    display: none;\n  }\n  .navbar-expand-xxl .offcanvas {\n    position: inherit;\n    bottom: 0;\n    z-index: 1000;\n    -ms-flex-positive: 1;\n    flex-grow: 1;\n    visibility: visible !important;\n    background-color: transparent;\n    border-right: 0;\n    border-left: 0;\n    transition: none;\n    -webkit-transform: none;\n    transform: none;\n  }\n  .navbar-expand-xxl .offcanvas-top,\n  .navbar-expand-xxl .offcanvas-bottom {\n    height: auto;\n    border-top: 0;\n    border-bottom: 0;\n  }\n  .navbar-expand-xxl .offcanvas-body {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-positive: 0;\n    flex-grow: 0;\n    padding: 0;\n    overflow-y: visible;\n  }\n}\n\n.navbar-expand {\n  -ms-flex-wrap: nowrap;\n  flex-wrap: nowrap;\n  -ms-flex-pack: start;\n  justify-content: flex-start;\n}\n\n.navbar-expand .navbar-nav {\n  -ms-flex-direction: row;\n  flex-direction: row;\n}\n\n.navbar-expand .navbar-nav .dropdown-menu {\n  position: absolute;\n}\n\n.navbar-expand .navbar-nav .nav-link {\n  padding-right: 0.5rem;\n  padding-left: 0.5rem;\n}\n\n.navbar-expand .navbar-nav-scroll {\n  overflow: visible;\n}\n\n.navbar-expand .navbar-collapse {\n  display: -ms-flexbox !important;\n  display: flex !important;\n  -ms-flex-preferred-size: auto;\n  flex-basis: auto;\n}\n\n.navbar-expand .navbar-toggler {\n  display: none;\n}\n\n.navbar-expand .offcanvas-header {\n  display: none;\n}\n\n.navbar-expand .offcanvas {\n  position: inherit;\n  bottom: 0;\n  z-index: 1000;\n  -ms-flex-positive: 1;\n  flex-grow: 1;\n  visibility: visible !important;\n  background-color: transparent;\n  border-right: 0;\n  border-left: 0;\n  transition: none;\n  -webkit-transform: none;\n  transform: none;\n}\n\n.navbar-expand .offcanvas-top,\n.navbar-expand .offcanvas-bottom {\n  height: auto;\n  border-top: 0;\n  border-bottom: 0;\n}\n\n.navbar-expand .offcanvas-body {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-positive: 0;\n  flex-grow: 0;\n  padding: 0;\n  overflow-y: visible;\n}\n\n.navbar-light .navbar-brand {\n  color: rgba(0, 0, 0, 0.9);\n}\n\n.navbar-light .navbar-brand:hover, .navbar-light .navbar-brand:focus {\n  color: rgba(0, 0, 0, 0.9);\n}\n\n.navbar-light .navbar-nav .nav-link {\n  color: rgba(0, 0, 0, 0.55);\n}\n\n.navbar-light .navbar-nav .nav-link:hover, .navbar-light .navbar-nav .nav-link:focus {\n  color: rgba(0, 0, 0, 0.7);\n}\n\n.navbar-light .navbar-nav .nav-link.disabled {\n  color: rgba(0, 0, 0, 0.3);\n}\n\n.navbar-light .navbar-nav .show > .nav-link,\n.navbar-light .navbar-nav .nav-link.active {\n  color: rgba(0, 0, 0, 0.9);\n}\n\n.navbar-light .navbar-toggler {\n  color: rgba(0, 0, 0, 0.55);\n  border-color: rgba(0, 0, 0, 0.1);\n}\n\n.navbar-light .navbar-toggler-icon {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%280, 0, 0, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e\");\n}\n\n.navbar-light .navbar-text {\n  color: rgba(0, 0, 0, 0.55);\n}\n\n.navbar-light .navbar-text a,\n.navbar-light .navbar-text a:hover,\n.navbar-light .navbar-text a:focus {\n  color: rgba(0, 0, 0, 0.9);\n}\n\n.navbar-dark .navbar-brand {\n  color: #fff;\n}\n\n.navbar-dark .navbar-brand:hover, .navbar-dark .navbar-brand:focus {\n  color: #fff;\n}\n\n.navbar-dark .navbar-nav .nav-link {\n  color: rgba(255, 255, 255, 0.8);\n}\n\n.navbar-dark .navbar-nav .nav-link:hover, .navbar-dark .navbar-nav .nav-link:focus {\n  color: #fff;\n}\n\n.navbar-dark .navbar-nav .nav-link.disabled {\n  color: rgba(255, 255, 255, 0.25);\n}\n\n.navbar-dark .navbar-nav .show > .nav-link,\n.navbar-dark .navbar-nav .nav-link.active {\n  color: #fff;\n}\n\n.navbar-dark .navbar-toggler {\n  color: rgba(255, 255, 255, 0.8);\n  border-color: rgba(255, 255, 255, 0.1);\n}\n\n.navbar-dark .navbar-toggler-icon {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.8%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e\");\n}\n\n.navbar-dark .navbar-text {\n  color: rgba(255, 255, 255, 0.8);\n}\n\n.navbar-dark .navbar-text a,\n.navbar-dark .navbar-text a:hover,\n.navbar-dark .navbar-text a:focus {\n  color: #fff;\n}\n\n.card {\n  position: relative;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  min-width: 0;\n  word-wrap: break-word;\n  background-color: #fff;\n  background-clip: border-box;\n  border: 1px solid rgba(0, 0, 0, 0.125);\n  border-radius: 0.25rem;\n}\n\n.card > hr {\n  margin-right: 0;\n  margin-left: 0;\n}\n\n.card > .list-group {\n  border-top: inherit;\n  border-bottom: inherit;\n}\n\n.card > .list-group:first-child {\n  border-top-width: 0;\n  border-top-left-radius: calc(0.25rem - 1px);\n  border-top-right-radius: calc(0.25rem - 1px);\n}\n\n.card > .list-group:last-child {\n  border-bottom-width: 0;\n  border-bottom-right-radius: calc(0.25rem - 1px);\n  border-bottom-left-radius: calc(0.25rem - 1px);\n}\n\n.card > .card-header + .list-group,\n.card > .list-group + .card-footer {\n  border-top: 0;\n}\n\n.card-body {\n  -ms-flex: 1 1 auto;\n  flex: 1 1 auto;\n  padding: 1rem 1rem;\n}\n\n.card-title {\n  margin-bottom: 0.5rem;\n}\n\n.card-subtitle {\n  margin-top: -0.25rem;\n  margin-bottom: 0;\n}\n\n.card-text:last-child {\n  margin-bottom: 0;\n}\n\n.card-link + .card-link {\n  margin-left: 1rem;\n}\n\n.card-header {\n  padding: 0.5rem 1rem;\n  margin-bottom: 0;\n  background-color: rgba(0, 0, 0, 0.03);\n  border-bottom: 1px solid rgba(0, 0, 0, 0.125);\n}\n\n.card-header:first-child {\n  border-radius: calc(0.25rem - 1px) calc(0.25rem - 1px) 0 0;\n}\n\n.card-footer {\n  padding: 0.5rem 1rem;\n  background-color: rgba(0, 0, 0, 0.03);\n  border-top: 1px solid rgba(0, 0, 0, 0.125);\n}\n\n.card-footer:last-child {\n  border-radius: 0 0 calc(0.25rem - 1px) calc(0.25rem - 1px);\n}\n\n.card-header-tabs {\n  margin-right: -0.5rem;\n  margin-bottom: -0.5rem;\n  margin-left: -0.5rem;\n  border-bottom: 0;\n}\n\n.card-header-pills {\n  margin-right: -0.5rem;\n  margin-left: -0.5rem;\n}\n\n.card-img-overlay {\n  position: absolute;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  padding: 1rem;\n  border-radius: calc(0.25rem - 1px);\n}\n\n.card-img,\n.card-img-top,\n.card-img-bottom {\n  width: 100%;\n}\n\n.card-img,\n.card-img-top {\n  border-top-left-radius: calc(0.25rem - 1px);\n  border-top-right-radius: calc(0.25rem - 1px);\n}\n\n.card-img,\n.card-img-bottom {\n  border-bottom-right-radius: calc(0.25rem - 1px);\n  border-bottom-left-radius: calc(0.25rem - 1px);\n}\n\n.card-group > .card {\n  margin-bottom: 0.75rem;\n}\n\n@media (min-width: 576px) {\n  .card-group {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-flow: row wrap;\n    flex-flow: row wrap;\n  }\n  .card-group > .card {\n    -ms-flex: 1 0 0%;\n    flex: 1 0 0%;\n    margin-bottom: 0;\n  }\n  .card-group > .card + .card {\n    margin-left: 0;\n    border-left: 0;\n  }\n  .card-group > .card:not(:last-child) {\n    border-top-right-radius: 0;\n    border-bottom-right-radius: 0;\n  }\n  .card-group > .card:not(:last-child) .card-img-top,\n  .card-group > .card:not(:last-child) .card-header {\n    border-top-right-radius: 0;\n  }\n  .card-group > .card:not(:last-child) .card-img-bottom,\n  .card-group > .card:not(:last-child) .card-footer {\n    border-bottom-right-radius: 0;\n  }\n  .card-group > .card:not(:first-child) {\n    border-top-left-radius: 0;\n    border-bottom-left-radius: 0;\n  }\n  .card-group > .card:not(:first-child) .card-img-top,\n  .card-group > .card:not(:first-child) .card-header {\n    border-top-left-radius: 0;\n  }\n  .card-group > .card:not(:first-child) .card-img-bottom,\n  .card-group > .card:not(:first-child) .card-footer {\n    border-bottom-left-radius: 0;\n  }\n}\n\n.accordion-button {\n  position: relative;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-align: center;\n  align-items: center;\n  width: 100%;\n  padding: 1rem 1.25rem;\n  font-size: 1rem;\n  color: #495057;\n  text-align: left;\n  background-color: #fff;\n  border: 0;\n  border-radius: 0;\n  overflow-anchor: none;\n  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, border-radius 0.15s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .accordion-button {\n    transition: none;\n  }\n}\n\n.accordion-button:not(.collapsed) {\n  color: #2a94d0;\n  background-color: #eaf6fd;\n  box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.125);\n}\n\n.accordion-button:not(.collapsed)::after {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%232a94d0'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e\");\n  -webkit-transform: rotate(-180deg);\n  transform: rotate(-180deg);\n}\n\n.accordion-button::after {\n  -ms-flex-negative: 0;\n  flex-shrink: 0;\n  width: 1.25rem;\n  height: 1.25rem;\n  margin-left: auto;\n  content: \"\";\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23495057'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e\");\n  background-repeat: no-repeat;\n  background-size: 1.25rem;\n  transition: -webkit-transform 0.2s ease-in-out;\n  transition: transform 0.2s ease-in-out;\n  transition: transform 0.2s ease-in-out, -webkit-transform 0.2s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .accordion-button::after {\n    transition: none;\n  }\n}\n\n.accordion-button:hover {\n  z-index: 2;\n}\n\n.accordion-button:focus {\n  z-index: 3;\n  border-color: #97d2f3;\n  outline: 0;\n  box-shadow: 0 0 0 0.25rem rgba(47, 164, 231, 0.25);\n}\n\n.accordion-header {\n  margin-bottom: 0;\n}\n\n.accordion-item {\n  background-color: #fff;\n  border: 1px solid rgba(0, 0, 0, 0.125);\n}\n\n.accordion-item:first-of-type {\n  border-top-left-radius: 0.25rem;\n  border-top-right-radius: 0.25rem;\n}\n\n.accordion-item:first-of-type .accordion-button {\n  border-top-left-radius: calc(0.25rem - 1px);\n  border-top-right-radius: calc(0.25rem - 1px);\n}\n\n.accordion-item:not(:first-of-type) {\n  border-top: 0;\n}\n\n.accordion-item:last-of-type {\n  border-bottom-right-radius: 0.25rem;\n  border-bottom-left-radius: 0.25rem;\n}\n\n.accordion-item:last-of-type .accordion-button.collapsed {\n  border-bottom-right-radius: calc(0.25rem - 1px);\n  border-bottom-left-radius: calc(0.25rem - 1px);\n}\n\n.accordion-item:last-of-type .accordion-collapse {\n  border-bottom-right-radius: 0.25rem;\n  border-bottom-left-radius: 0.25rem;\n}\n\n.accordion-body {\n  padding: 1rem 1.25rem;\n}\n\n.accordion-flush .accordion-collapse {\n  border-width: 0;\n}\n\n.accordion-flush .accordion-item {\n  border-right: 0;\n  border-left: 0;\n  border-radius: 0;\n}\n\n.accordion-flush .accordion-item:first-child {\n  border-top: 0;\n}\n\n.accordion-flush .accordion-item:last-child {\n  border-bottom: 0;\n}\n\n.accordion-flush .accordion-item .accordion-button {\n  border-radius: 0;\n}\n\n.breadcrumb {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n  flex-wrap: wrap;\n  padding: 0 0;\n  margin-bottom: 1rem;\n  list-style: none;\n}\n\n.breadcrumb-item + .breadcrumb-item {\n  padding-left: 0.5rem;\n}\n\n.breadcrumb-item + .breadcrumb-item::before {\n  float: left;\n  padding-right: 0.5rem;\n  color: #868e96;\n  content: var(--bs-breadcrumb-divider, \"/\") /* rtl: var(--bs-breadcrumb-divider, \"/\") */;\n}\n\n.breadcrumb-item.active {\n  color: #868e96;\n}\n\n.pagination {\n  display: -ms-flexbox;\n  display: flex;\n  padding-left: 0;\n  list-style: none;\n}\n\n.page-link {\n  position: relative;\n  display: block;\n  color: #2fa4e7;\n  text-decoration: none;\n  background-color: #fff;\n  border: 1px solid #dee2e6;\n  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .page-link {\n    transition: none;\n  }\n}\n\n.page-link:hover {\n  z-index: 2;\n  color: #2683b9;\n  background-color: #e9ecef;\n  border-color: #dee2e6;\n}\n\n.page-link:focus {\n  z-index: 3;\n  color: #2683b9;\n  background-color: #e9ecef;\n  outline: 0;\n  box-shadow: 0 0 0 0.25rem rgba(47, 164, 231, 0.25);\n}\n\n.page-item:not(:first-child) .page-link {\n  margin-left: -1px;\n}\n\n.page-item.active .page-link {\n  z-index: 3;\n  color: #fff;\n  background-color: #2fa4e7;\n  border-color: #2fa4e7;\n}\n\n.page-item.disabled .page-link {\n  color: #868e96;\n  pointer-events: none;\n  background-color: #fff;\n  border-color: #dee2e6;\n}\n\n.page-link {\n  padding: 0.375rem 0.75rem;\n}\n\n.page-item:first-child .page-link {\n  border-top-left-radius: 0.25rem;\n  border-bottom-left-radius: 0.25rem;\n}\n\n.page-item:last-child .page-link {\n  border-top-right-radius: 0.25rem;\n  border-bottom-right-radius: 0.25rem;\n}\n\n.pagination-lg .page-link {\n  padding: 0.75rem 1.5rem;\n  font-size: 1.25rem;\n}\n\n.pagination-lg .page-item:first-child .page-link {\n  border-top-left-radius: 0.3rem;\n  border-bottom-left-radius: 0.3rem;\n}\n\n.pagination-lg .page-item:last-child .page-link {\n  border-top-right-radius: 0.3rem;\n  border-bottom-right-radius: 0.3rem;\n}\n\n.pagination-sm .page-link {\n  padding: 0.25rem 0.5rem;\n  font-size: 0.875rem;\n}\n\n.pagination-sm .page-item:first-child .page-link {\n  border-top-left-radius: 0.2rem;\n  border-bottom-left-radius: 0.2rem;\n}\n\n.pagination-sm .page-item:last-child .page-link {\n  border-top-right-radius: 0.2rem;\n  border-bottom-right-radius: 0.2rem;\n}\n\n.badge {\n  display: inline-block;\n  padding: 0.35em 0.65em;\n  font-size: 0.75em;\n  font-weight: 700;\n  line-height: 1;\n  color: #fff;\n  text-align: center;\n  white-space: nowrap;\n  vertical-align: baseline;\n  border-radius: 0.25rem;\n}\n\n.badge:empty {\n  display: none;\n}\n\n.btn .badge {\n  position: relative;\n  top: -1px;\n}\n\n.alert {\n  position: relative;\n  padding: 1rem 1rem;\n  margin-bottom: 1rem;\n  border: 1px solid transparent;\n  border-radius: 0.25rem;\n}\n\n.alert-heading {\n  color: inherit;\n}\n\n.alert-link {\n  font-weight: 700;\n}\n\n.alert-dismissible {\n  padding-right: 3rem;\n}\n\n.alert-dismissible .btn-close {\n  position: absolute;\n  top: 0;\n  right: 0;\n  z-index: 2;\n  padding: 1.25rem 1rem;\n}\n\n.alert-primary {\n  color: #1c628b;\n  background-color: #d5edfa;\n  border-color: #c1e4f8;\n}\n\n.alert-primary .alert-link {\n  color: #164e6f;\n}\n\n.alert-secondary {\n  color: #8c8e8f;\n  background-color: #fbfbfc;\n  border-color: #f8f9fa;\n}\n\n.alert-secondary .alert-link {\n  color: #707272;\n}\n\n.alert-success {\n  color: #456522;\n  background-color: #e3eed7;\n  border-color: #d5e5c4;\n}\n\n.alert-success .alert-link {\n  color: #37511b;\n}\n\n.alert-info {\n  color: #022445;\n  background-color: #cdd8e3;\n  border-color: #b3c5d5;\n}\n\n.alert-info .alert-link {\n  color: #021d37;\n}\n\n.alert-warning {\n  color: #853400;\n  background-color: #f8ddcc;\n  border-color: #f5ccb3;\n}\n\n.alert-warning .alert-link {\n  color: #6a2a00;\n}\n\n.alert-danger {\n  color: #771114;\n  background-color: #f4d2d3;\n  border-color: #eebbbd;\n}\n\n.alert-danger .alert-link {\n  color: #5f0e10;\n}\n\n.alert-light {\n  color: #959596;\n  background-color: #fefefe;\n  border-color: #fdfdfe;\n}\n\n.alert-light .alert-link {\n  color: #777778;\n}\n\n.alert-dark {\n  color: #1f2326;\n  background-color: #d6d8d9;\n  border-color: #c2c4c6;\n}\n\n.alert-dark .alert-link {\n  color: #191c1e;\n}\n\n@-webkit-keyframes progress-bar-stripes {\n  0% {\n    background-position-x: 1rem;\n  }\n}\n\n@keyframes progress-bar-stripes {\n  0% {\n    background-position-x: 1rem;\n  }\n}\n\n.progress {\n  display: -ms-flexbox;\n  display: flex;\n  height: 1rem;\n  overflow: hidden;\n  font-size: 0.75rem;\n  background-color: #e9ecef;\n  border-radius: 0.25rem;\n}\n\n.progress-bar {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  -ms-flex-pack: center;\n  justify-content: center;\n  overflow: hidden;\n  color: #fff;\n  text-align: center;\n  white-space: nowrap;\n  background-color: #2fa4e7;\n  transition: width 0.6s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .progress-bar {\n    transition: none;\n  }\n}\n\n.progress-bar-striped {\n  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-size: 1rem 1rem;\n}\n\n.progress-bar-animated {\n  -webkit-animation: 1s linear infinite progress-bar-stripes;\n  animation: 1s linear infinite progress-bar-stripes;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .progress-bar-animated {\n    -webkit-animation: none;\n    animation: none;\n  }\n}\n\n.list-group {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  padding-left: 0;\n  margin-bottom: 0;\n  border-radius: 0.25rem;\n}\n\n.list-group-numbered {\n  list-style-type: none;\n  counter-reset: section;\n}\n\n.list-group-numbered > li::before {\n  content: counters(section, \".\") \". \";\n  counter-increment: section;\n}\n\n.list-group-item-action {\n  width: 100%;\n  color: #495057;\n  text-align: inherit;\n}\n\n.list-group-item-action:hover, .list-group-item-action:focus {\n  z-index: 1;\n  color: #495057;\n  text-decoration: none;\n  background-color: #f8f9fa;\n}\n\n.list-group-item-action:active {\n  color: #495057;\n  background-color: #e9ecef;\n}\n\n.list-group-item {\n  position: relative;\n  display: block;\n  padding: 0.5rem 1rem;\n  color: #212529;\n  text-decoration: none;\n  background-color: #fff;\n  border: 1px solid rgba(0, 0, 0, 0.125);\n}\n\n.list-group-item:first-child {\n  border-top-left-radius: inherit;\n  border-top-right-radius: inherit;\n}\n\n.list-group-item:last-child {\n  border-bottom-right-radius: inherit;\n  border-bottom-left-radius: inherit;\n}\n\n.list-group-item.disabled, .list-group-item:disabled {\n  color: #868e96;\n  pointer-events: none;\n  background-color: #fff;\n}\n\n.list-group-item.active {\n  z-index: 2;\n  color: #fff;\n  background-color: #2fa4e7;\n  border-color: #2fa4e7;\n}\n\n.list-group-item + .list-group-item {\n  border-top-width: 0;\n}\n\n.list-group-item + .list-group-item.active {\n  margin-top: -1px;\n  border-top-width: 1px;\n}\n\n.list-group-horizontal {\n  -ms-flex-direction: row;\n  flex-direction: row;\n}\n\n.list-group-horizontal > .list-group-item:first-child {\n  border-bottom-left-radius: 0.25rem;\n  border-top-right-radius: 0;\n}\n\n.list-group-horizontal > .list-group-item:last-child {\n  border-top-right-radius: 0.25rem;\n  border-bottom-left-radius: 0;\n}\n\n.list-group-horizontal > .list-group-item.active {\n  margin-top: 0;\n}\n\n.list-group-horizontal > .list-group-item + .list-group-item {\n  border-top-width: 1px;\n  border-left-width: 0;\n}\n\n.list-group-horizontal > .list-group-item + .list-group-item.active {\n  margin-left: -1px;\n  border-left-width: 1px;\n}\n\n@media (min-width: 576px) {\n  .list-group-horizontal-sm {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .list-group-horizontal-sm > .list-group-item:first-child {\n    border-bottom-left-radius: 0.25rem;\n    border-top-right-radius: 0;\n  }\n  .list-group-horizontal-sm > .list-group-item:last-child {\n    border-top-right-radius: 0.25rem;\n    border-bottom-left-radius: 0;\n  }\n  .list-group-horizontal-sm > .list-group-item.active {\n    margin-top: 0;\n  }\n  .list-group-horizontal-sm > .list-group-item + .list-group-item {\n    border-top-width: 1px;\n    border-left-width: 0;\n  }\n  .list-group-horizontal-sm > .list-group-item + .list-group-item.active {\n    margin-left: -1px;\n    border-left-width: 1px;\n  }\n}\n\n@media (min-width: 768px) {\n  .list-group-horizontal-md {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .list-group-horizontal-md > .list-group-item:first-child {\n    border-bottom-left-radius: 0.25rem;\n    border-top-right-radius: 0;\n  }\n  .list-group-horizontal-md > .list-group-item:last-child {\n    border-top-right-radius: 0.25rem;\n    border-bottom-left-radius: 0;\n  }\n  .list-group-horizontal-md > .list-group-item.active {\n    margin-top: 0;\n  }\n  .list-group-horizontal-md > .list-group-item + .list-group-item {\n    border-top-width: 1px;\n    border-left-width: 0;\n  }\n  .list-group-horizontal-md > .list-group-item + .list-group-item.active {\n    margin-left: -1px;\n    border-left-width: 1px;\n  }\n}\n\n@media (min-width: 992px) {\n  .list-group-horizontal-lg {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .list-group-horizontal-lg > .list-group-item:first-child {\n    border-bottom-left-radius: 0.25rem;\n    border-top-right-radius: 0;\n  }\n  .list-group-horizontal-lg > .list-group-item:last-child {\n    border-top-right-radius: 0.25rem;\n    border-bottom-left-radius: 0;\n  }\n  .list-group-horizontal-lg > .list-group-item.active {\n    margin-top: 0;\n  }\n  .list-group-horizontal-lg > .list-group-item + .list-group-item {\n    border-top-width: 1px;\n    border-left-width: 0;\n  }\n  .list-group-horizontal-lg > .list-group-item + .list-group-item.active {\n    margin-left: -1px;\n    border-left-width: 1px;\n  }\n}\n\n@media (min-width: 1200px) {\n  .list-group-horizontal-xl {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .list-group-horizontal-xl > .list-group-item:first-child {\n    border-bottom-left-radius: 0.25rem;\n    border-top-right-radius: 0;\n  }\n  .list-group-horizontal-xl > .list-group-item:last-child {\n    border-top-right-radius: 0.25rem;\n    border-bottom-left-radius: 0;\n  }\n  .list-group-horizontal-xl > .list-group-item.active {\n    margin-top: 0;\n  }\n  .list-group-horizontal-xl > .list-group-item + .list-group-item {\n    border-top-width: 1px;\n    border-left-width: 0;\n  }\n  .list-group-horizontal-xl > .list-group-item + .list-group-item.active {\n    margin-left: -1px;\n    border-left-width: 1px;\n  }\n}\n\n@media (min-width: 1400px) {\n  .list-group-horizontal-xxl {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .list-group-horizontal-xxl > .list-group-item:first-child {\n    border-bottom-left-radius: 0.25rem;\n    border-top-right-radius: 0;\n  }\n  .list-group-horizontal-xxl > .list-group-item:last-child {\n    border-top-right-radius: 0.25rem;\n    border-bottom-left-radius: 0;\n  }\n  .list-group-horizontal-xxl > .list-group-item.active {\n    margin-top: 0;\n  }\n  .list-group-horizontal-xxl > .list-group-item + .list-group-item {\n    border-top-width: 1px;\n    border-left-width: 0;\n  }\n  .list-group-horizontal-xxl > .list-group-item + .list-group-item.active {\n    margin-left: -1px;\n    border-left-width: 1px;\n  }\n}\n\n.list-group-flush {\n  border-radius: 0;\n}\n\n.list-group-flush > .list-group-item {\n  border-width: 0 0 1px;\n}\n\n.list-group-flush > .list-group-item:last-child {\n  border-bottom-width: 0;\n}\n\n.list-group-item-primary {\n  color: #1c628b;\n  background-color: #d5edfa;\n}\n\n.list-group-item-primary.list-group-item-action:hover, .list-group-item-primary.list-group-item-action:focus {\n  color: #1c628b;\n  background-color: #c0d5e1;\n}\n\n.list-group-item-primary.list-group-item-action.active {\n  color: #fff;\n  background-color: #1c628b;\n  border-color: #1c628b;\n}\n\n.list-group-item-secondary {\n  color: #8c8e8f;\n  background-color: #fbfbfc;\n}\n\n.list-group-item-secondary.list-group-item-action:hover, .list-group-item-secondary.list-group-item-action:focus {\n  color: #8c8e8f;\n  background-color: #e2e2e3;\n}\n\n.list-group-item-secondary.list-group-item-action.active {\n  color: #fff;\n  background-color: #8c8e8f;\n  border-color: #8c8e8f;\n}\n\n.list-group-item-success {\n  color: #456522;\n  background-color: #e3eed7;\n}\n\n.list-group-item-success.list-group-item-action:hover, .list-group-item-success.list-group-item-action:focus {\n  color: #456522;\n  background-color: #ccd6c2;\n}\n\n.list-group-item-success.list-group-item-action.active {\n  color: #fff;\n  background-color: #456522;\n  border-color: #456522;\n}\n\n.list-group-item-info {\n  color: #022445;\n  background-color: #cdd8e3;\n}\n\n.list-group-item-info.list-group-item-action:hover, .list-group-item-info.list-group-item-action:focus {\n  color: #022445;\n  background-color: #b9c2cc;\n}\n\n.list-group-item-info.list-group-item-action.active {\n  color: #fff;\n  background-color: #022445;\n  border-color: #022445;\n}\n\n.list-group-item-warning {\n  color: #853400;\n  background-color: #f8ddcc;\n}\n\n.list-group-item-warning.list-group-item-action:hover, .list-group-item-warning.list-group-item-action:focus {\n  color: #853400;\n  background-color: #dfc7b8;\n}\n\n.list-group-item-warning.list-group-item-action.active {\n  color: #fff;\n  background-color: #853400;\n  border-color: #853400;\n}\n\n.list-group-item-danger {\n  color: #771114;\n  background-color: #f4d2d3;\n}\n\n.list-group-item-danger.list-group-item-action:hover, .list-group-item-danger.list-group-item-action:focus {\n  color: #771114;\n  background-color: #dcbdbe;\n}\n\n.list-group-item-danger.list-group-item-action.active {\n  color: #fff;\n  background-color: #771114;\n  border-color: #771114;\n}\n\n.list-group-item-light {\n  color: #959596;\n  background-color: #fefefe;\n}\n\n.list-group-item-light.list-group-item-action:hover, .list-group-item-light.list-group-item-action:focus {\n  color: #959596;\n  background-color: #e5e5e5;\n}\n\n.list-group-item-light.list-group-item-action.active {\n  color: #fff;\n  background-color: #959596;\n  border-color: #959596;\n}\n\n.list-group-item-dark {\n  color: #1f2326;\n  background-color: #d6d8d9;\n}\n\n.list-group-item-dark.list-group-item-action:hover, .list-group-item-dark.list-group-item-action:focus {\n  color: #1f2326;\n  background-color: #c1c2c3;\n}\n\n.list-group-item-dark.list-group-item-action.active {\n  color: #fff;\n  background-color: #1f2326;\n  border-color: #1f2326;\n}\n\n.btn-close {\n  box-sizing: content-box;\n  width: 1em;\n  height: 1em;\n  padding: 0.25em 0.25em;\n  color: #000;\n  background: transparent url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23000'%3e%3cpath d='M.293.293a1 1 0 011.414 0L8 6.586 14.293.293a1 1 0 111.414 1.414L9.414 8l6.293 6.293a1 1 0 01-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 01-1.414-1.414L6.586 8 .293 1.707a1 1 0 010-1.414z'/%3e%3c/svg%3e\") center/1em auto no-repeat;\n  border: 0;\n  border-radius: 0.25rem;\n  opacity: 0.5;\n}\n\n.btn-close:hover {\n  color: #000;\n  text-decoration: none;\n  opacity: 0.75;\n}\n\n.btn-close:focus {\n  outline: 0;\n  box-shadow: 0 0 0 0.25rem rgba(47, 164, 231, 0.25);\n  opacity: 1;\n}\n\n.btn-close:disabled, .btn-close.disabled {\n  pointer-events: none;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  user-select: none;\n  opacity: 0.25;\n}\n\n.btn-close-white {\n  -webkit-filter: invert(1) grayscale(100%) brightness(200%);\n  filter: invert(1) grayscale(100%) brightness(200%);\n}\n\n.toast {\n  width: 350px;\n  max-width: 100%;\n  font-size: 0.875rem;\n  pointer-events: auto;\n  background-color: rgba(255, 255, 255, 0.85);\n  background-clip: padding-box;\n  border: 1px solid rgba(0, 0, 0, 0.1);\n  box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15);\n  border-radius: 0.25rem;\n}\n\n.toast.showing {\n  opacity: 0;\n}\n\n.toast:not(.show) {\n  display: none;\n}\n\n.toast-container {\n  width: -webkit-max-content;\n  width: -moz-max-content;\n  width: max-content;\n  max-width: 100%;\n  pointer-events: none;\n}\n\n.toast-container > :not(:last-child) {\n  margin-bottom: 0.75rem;\n}\n\n.toast-header {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-align: center;\n  align-items: center;\n  padding: 0.5rem 0.75rem;\n  color: #868e96;\n  background-color: rgba(255, 255, 255, 0.85);\n  background-clip: padding-box;\n  border-bottom: 1px solid rgba(0, 0, 0, 0.05);\n  border-top-left-radius: calc(0.25rem - 1px);\n  border-top-right-radius: calc(0.25rem - 1px);\n}\n\n.toast-header .btn-close {\n  margin-right: -0.375rem;\n  margin-left: 0.75rem;\n}\n\n.toast-body {\n  padding: 0.75rem;\n  word-wrap: break-word;\n}\n\n.modal {\n  position: fixed;\n  top: 0;\n  left: 0;\n  z-index: 1055;\n  display: none;\n  width: 100%;\n  height: 100%;\n  overflow-x: hidden;\n  overflow-y: auto;\n  outline: 0;\n}\n\n.modal-dialog {\n  position: relative;\n  width: auto;\n  margin: 0.5rem;\n  pointer-events: none;\n}\n\n.modal.fade .modal-dialog {\n  transition: -webkit-transform 0.3s ease-out;\n  transition: transform 0.3s ease-out;\n  transition: transform 0.3s ease-out, -webkit-transform 0.3s ease-out;\n  -webkit-transform: translate(0, -50px);\n  transform: translate(0, -50px);\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .modal.fade .modal-dialog {\n    transition: none;\n  }\n}\n\n.modal.show .modal-dialog {\n  -webkit-transform: none;\n  transform: none;\n}\n\n.modal.modal-static .modal-dialog {\n  -webkit-transform: scale(1.02);\n  transform: scale(1.02);\n}\n\n.modal-dialog-scrollable {\n  height: calc(100% - 1rem);\n}\n\n.modal-dialog-scrollable .modal-content {\n  max-height: 100%;\n  overflow: hidden;\n}\n\n.modal-dialog-scrollable .modal-body {\n  overflow-y: auto;\n}\n\n.modal-dialog-centered {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-align: center;\n  align-items: center;\n  min-height: calc(100% - 1rem);\n}\n\n.modal-content {\n  position: relative;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  width: 100%;\n  pointer-events: auto;\n  background-color: #fff;\n  background-clip: padding-box;\n  border: 1px solid rgba(0, 0, 0, 0.2);\n  border-radius: 0.3rem;\n  outline: 0;\n}\n\n.modal-backdrop {\n  position: fixed;\n  top: 0;\n  left: 0;\n  z-index: 1050;\n  width: 100vw;\n  height: 100vh;\n  background-color: #000;\n}\n\n.modal-backdrop.fade {\n  opacity: 0;\n}\n\n.modal-backdrop.show {\n  opacity: 0.5;\n}\n\n.modal-header {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-negative: 0;\n  flex-shrink: 0;\n  -ms-flex-align: center;\n  align-items: center;\n  -ms-flex-pack: justify;\n  justify-content: space-between;\n  padding: 1rem 1rem;\n  border-bottom: 1px solid #dee2e6;\n  border-top-left-radius: calc(0.3rem - 1px);\n  border-top-right-radius: calc(0.3rem - 1px);\n}\n\n.modal-header .btn-close {\n  padding: 0.5rem 0.5rem;\n  margin: -0.5rem -0.5rem -0.5rem auto;\n}\n\n.modal-title {\n  margin-bottom: 0;\n  line-height: 1.5;\n}\n\n.modal-body {\n  position: relative;\n  -ms-flex: 1 1 auto;\n  flex: 1 1 auto;\n  padding: 1rem;\n}\n\n.modal-footer {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n  flex-wrap: wrap;\n  -ms-flex-negative: 0;\n  flex-shrink: 0;\n  -ms-flex-align: center;\n  align-items: center;\n  -ms-flex-pack: end;\n  justify-content: flex-end;\n  padding: 0.75rem;\n  border-top: 1px solid #dee2e6;\n  border-bottom-right-radius: calc(0.3rem - 1px);\n  border-bottom-left-radius: calc(0.3rem - 1px);\n}\n\n.modal-footer > * {\n  margin: 0.25rem;\n}\n\n@media (min-width: 576px) {\n  .modal-dialog {\n    max-width: 500px;\n    margin: 1.75rem auto;\n  }\n  .modal-dialog-scrollable {\n    height: calc(100% - 3.5rem);\n  }\n  .modal-dialog-centered {\n    min-height: calc(100% - 3.5rem);\n  }\n  .modal-sm {\n    max-width: 300px;\n  }\n}\n\n@media (min-width: 992px) {\n  .modal-lg,\n  .modal-xl {\n    max-width: 800px;\n  }\n}\n\n@media (min-width: 1200px) {\n  .modal-xl {\n    max-width: 1140px;\n  }\n}\n\n.modal-fullscreen {\n  width: 100vw;\n  max-width: none;\n  height: 100%;\n  margin: 0;\n}\n\n.modal-fullscreen .modal-content {\n  height: 100%;\n  border: 0;\n  border-radius: 0;\n}\n\n.modal-fullscreen .modal-header {\n  border-radius: 0;\n}\n\n.modal-fullscreen .modal-body {\n  overflow-y: auto;\n}\n\n.modal-fullscreen .modal-footer {\n  border-radius: 0;\n}\n\n@media (max-width: 575.98px) {\n  .modal-fullscreen-sm-down {\n    width: 100vw;\n    max-width: none;\n    height: 100%;\n    margin: 0;\n  }\n  .modal-fullscreen-sm-down .modal-content {\n    height: 100%;\n    border: 0;\n    border-radius: 0;\n  }\n  .modal-fullscreen-sm-down .modal-header {\n    border-radius: 0;\n  }\n  .modal-fullscreen-sm-down .modal-body {\n    overflow-y: auto;\n  }\n  .modal-fullscreen-sm-down .modal-footer {\n    border-radius: 0;\n  }\n}\n\n@media (max-width: 767.98px) {\n  .modal-fullscreen-md-down {\n    width: 100vw;\n    max-width: none;\n    height: 100%;\n    margin: 0;\n  }\n  .modal-fullscreen-md-down .modal-content {\n    height: 100%;\n    border: 0;\n    border-radius: 0;\n  }\n  .modal-fullscreen-md-down .modal-header {\n    border-radius: 0;\n  }\n  .modal-fullscreen-md-down .modal-body {\n    overflow-y: auto;\n  }\n  .modal-fullscreen-md-down .modal-footer {\n    border-radius: 0;\n  }\n}\n\n@media (max-width: 991.98px) {\n  .modal-fullscreen-lg-down {\n    width: 100vw;\n    max-width: none;\n    height: 100%;\n    margin: 0;\n  }\n  .modal-fullscreen-lg-down .modal-content {\n    height: 100%;\n    border: 0;\n    border-radius: 0;\n  }\n  .modal-fullscreen-lg-down .modal-header {\n    border-radius: 0;\n  }\n  .modal-fullscreen-lg-down .modal-body {\n    overflow-y: auto;\n  }\n  .modal-fullscreen-lg-down .modal-footer {\n    border-radius: 0;\n  }\n}\n\n@media (max-width: 1199.98px) {\n  .modal-fullscreen-xl-down {\n    width: 100vw;\n    max-width: none;\n    height: 100%;\n    margin: 0;\n  }\n  .modal-fullscreen-xl-down .modal-content {\n    height: 100%;\n    border: 0;\n    border-radius: 0;\n  }\n  .modal-fullscreen-xl-down .modal-header {\n    border-radius: 0;\n  }\n  .modal-fullscreen-xl-down .modal-body {\n    overflow-y: auto;\n  }\n  .modal-fullscreen-xl-down .modal-footer {\n    border-radius: 0;\n  }\n}\n\n@media (max-width: 1399.98px) {\n  .modal-fullscreen-xxl-down {\n    width: 100vw;\n    max-width: none;\n    height: 100%;\n    margin: 0;\n  }\n  .modal-fullscreen-xxl-down .modal-content {\n    height: 100%;\n    border: 0;\n    border-radius: 0;\n  }\n  .modal-fullscreen-xxl-down .modal-header {\n    border-radius: 0;\n  }\n  .modal-fullscreen-xxl-down .modal-body {\n    overflow-y: auto;\n  }\n  .modal-fullscreen-xxl-down .modal-footer {\n    border-radius: 0;\n  }\n}\n\n.tooltip {\n  position: absolute;\n  z-index: 1080;\n  display: block;\n  margin: 0;\n  font-family: var(--bs-font-sans-serif);\n  font-style: normal;\n  font-weight: 400;\n  line-height: 1.5;\n  text-align: left;\n  text-align: start;\n  text-decoration: none;\n  text-shadow: none;\n  text-transform: none;\n  letter-spacing: normal;\n  word-break: normal;\n  word-spacing: normal;\n  white-space: normal;\n  line-break: auto;\n  font-size: 0.875rem;\n  word-wrap: break-word;\n  opacity: 0;\n}\n\n.tooltip.show {\n  opacity: 0.9;\n}\n\n.tooltip .tooltip-arrow {\n  position: absolute;\n  display: block;\n  width: 0.8rem;\n  height: 0.4rem;\n}\n\n.tooltip .tooltip-arrow::before {\n  position: absolute;\n  content: \"\";\n  border-color: transparent;\n  border-style: solid;\n}\n\n.bs-tooltip-top, .bs-tooltip-auto[data-popper-placement^=\"top\"] {\n  padding: 0.4rem 0;\n}\n\n.bs-tooltip-top .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=\"top\"] .tooltip-arrow {\n  bottom: 0;\n}\n\n.bs-tooltip-top .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=\"top\"] .tooltip-arrow::before {\n  top: -1px;\n  border-width: 0.4rem 0.4rem 0;\n  border-top-color: #000;\n}\n\n.bs-tooltip-end, .bs-tooltip-auto[data-popper-placement^=\"right\"] {\n  padding: 0 0.4rem;\n}\n\n.bs-tooltip-end .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=\"right\"] .tooltip-arrow {\n  left: 0;\n  width: 0.4rem;\n  height: 0.8rem;\n}\n\n.bs-tooltip-end .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=\"right\"] .tooltip-arrow::before {\n  right: -1px;\n  border-width: 0.4rem 0.4rem 0.4rem 0;\n  border-right-color: #000;\n}\n\n.bs-tooltip-bottom, .bs-tooltip-auto[data-popper-placement^=\"bottom\"] {\n  padding: 0.4rem 0;\n}\n\n.bs-tooltip-bottom .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=\"bottom\"] .tooltip-arrow {\n  top: 0;\n}\n\n.bs-tooltip-bottom .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=\"bottom\"] .tooltip-arrow::before {\n  bottom: -1px;\n  border-width: 0 0.4rem 0.4rem;\n  border-bottom-color: #000;\n}\n\n.bs-tooltip-start, .bs-tooltip-auto[data-popper-placement^=\"left\"] {\n  padding: 0 0.4rem;\n}\n\n.bs-tooltip-start .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=\"left\"] .tooltip-arrow {\n  right: 0;\n  width: 0.4rem;\n  height: 0.8rem;\n}\n\n.bs-tooltip-start .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=\"left\"] .tooltip-arrow::before {\n  left: -1px;\n  border-width: 0.4rem 0 0.4rem 0.4rem;\n  border-left-color: #000;\n}\n\n.tooltip-inner {\n  max-width: 200px;\n  padding: 0.25rem 0.5rem;\n  color: #fff;\n  text-align: center;\n  background-color: #000;\n  border-radius: 0.25rem;\n}\n\n.popover {\n  position: absolute;\n  top: 0;\n  left: 0 /* rtl:ignore */;\n  z-index: 1070;\n  display: block;\n  max-width: 276px;\n  font-family: var(--bs-font-sans-serif);\n  font-style: normal;\n  font-weight: 400;\n  line-height: 1.5;\n  text-align: left;\n  text-align: start;\n  text-decoration: none;\n  text-shadow: none;\n  text-transform: none;\n  letter-spacing: normal;\n  word-break: normal;\n  word-spacing: normal;\n  white-space: normal;\n  line-break: auto;\n  font-size: 0.875rem;\n  word-wrap: break-word;\n  background-color: #fff;\n  background-clip: padding-box;\n  border: 1px solid rgba(0, 0, 0, 0.2);\n  border-radius: 0.3rem;\n}\n\n.popover .popover-arrow {\n  position: absolute;\n  display: block;\n  width: 1rem;\n  height: 0.5rem;\n}\n\n.popover .popover-arrow::before, .popover .popover-arrow::after {\n  position: absolute;\n  display: block;\n  content: \"\";\n  border-color: transparent;\n  border-style: solid;\n}\n\n.bs-popover-top > .popover-arrow, .bs-popover-auto[data-popper-placement^=\"top\"] > .popover-arrow {\n  bottom: calc(-0.5rem - 1px);\n}\n\n.bs-popover-top > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=\"top\"] > .popover-arrow::before {\n  bottom: 0;\n  border-width: 0.5rem 0.5rem 0;\n  border-top-color: rgba(0, 0, 0, 0.25);\n}\n\n.bs-popover-top > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=\"top\"] > .popover-arrow::after {\n  bottom: 1px;\n  border-width: 0.5rem 0.5rem 0;\n  border-top-color: #fff;\n}\n\n.bs-popover-end > .popover-arrow, .bs-popover-auto[data-popper-placement^=\"right\"] > .popover-arrow {\n  left: calc(-0.5rem - 1px);\n  width: 0.5rem;\n  height: 1rem;\n}\n\n.bs-popover-end > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=\"right\"] > .popover-arrow::before {\n  left: 0;\n  border-width: 0.5rem 0.5rem 0.5rem 0;\n  border-right-color: rgba(0, 0, 0, 0.25);\n}\n\n.bs-popover-end > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=\"right\"] > .popover-arrow::after {\n  left: 1px;\n  border-width: 0.5rem 0.5rem 0.5rem 0;\n  border-right-color: #fff;\n}\n\n.bs-popover-bottom > .popover-arrow, .bs-popover-auto[data-popper-placement^=\"bottom\"] > .popover-arrow {\n  top: calc(-0.5rem - 1px);\n}\n\n.bs-popover-bottom > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=\"bottom\"] > .popover-arrow::before {\n  top: 0;\n  border-width: 0 0.5rem 0.5rem 0.5rem;\n  border-bottom-color: rgba(0, 0, 0, 0.25);\n}\n\n.bs-popover-bottom > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=\"bottom\"] > .popover-arrow::after {\n  top: 1px;\n  border-width: 0 0.5rem 0.5rem 0.5rem;\n  border-bottom-color: #fff;\n}\n\n.bs-popover-bottom .popover-header::before, .bs-popover-auto[data-popper-placement^=\"bottom\"] .popover-header::before {\n  position: absolute;\n  top: 0;\n  left: 50%;\n  display: block;\n  width: 1rem;\n  margin-left: -0.5rem;\n  content: \"\";\n  border-bottom: 1px solid #f0f0f0;\n}\n\n.bs-popover-start > .popover-arrow, .bs-popover-auto[data-popper-placement^=\"left\"] > .popover-arrow {\n  right: calc(-0.5rem - 1px);\n  width: 0.5rem;\n  height: 1rem;\n}\n\n.bs-popover-start > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=\"left\"] > .popover-arrow::before {\n  right: 0;\n  border-width: 0.5rem 0 0.5rem 0.5rem;\n  border-left-color: rgba(0, 0, 0, 0.25);\n}\n\n.bs-popover-start > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=\"left\"] > .popover-arrow::after {\n  right: 1px;\n  border-width: 0.5rem 0 0.5rem 0.5rem;\n  border-left-color: #fff;\n}\n\n.popover-header {\n  padding: 0.5rem 1rem;\n  margin-bottom: 0;\n  font-size: 1rem;\n  color: #2fa4e7;\n  background-color: #f0f0f0;\n  border-bottom: 1px solid rgba(0, 0, 0, 0.2);\n  border-top-left-radius: calc(0.3rem - 1px);\n  border-top-right-radius: calc(0.3rem - 1px);\n}\n\n.popover-header:empty {\n  display: none;\n}\n\n.popover-body {\n  padding: 1rem 1rem;\n  color: #495057;\n}\n\n.carousel {\n  position: relative;\n}\n\n.carousel.pointer-event {\n  -ms-touch-action: pan-y;\n  touch-action: pan-y;\n}\n\n.carousel-inner {\n  position: relative;\n  width: 100%;\n  overflow: hidden;\n}\n\n.carousel-inner::after {\n  display: block;\n  clear: both;\n  content: \"\";\n}\n\n.carousel-item {\n  position: relative;\n  display: none;\n  float: left;\n  width: 100%;\n  margin-right: -100%;\n  -webkit-backface-visibility: hidden;\n  backface-visibility: hidden;\n  transition: -webkit-transform 0.6s ease-in-out;\n  transition: transform 0.6s ease-in-out;\n  transition: transform 0.6s ease-in-out, -webkit-transform 0.6s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .carousel-item {\n    transition: none;\n  }\n}\n\n.carousel-item.active,\n.carousel-item-next,\n.carousel-item-prev {\n  display: block;\n}\n\n/* rtl:begin:ignore */\n.carousel-item-next:not(.carousel-item-start),\n.active.carousel-item-end {\n  -webkit-transform: translateX(100%);\n  transform: translateX(100%);\n}\n\n.carousel-item-prev:not(.carousel-item-end),\n.active.carousel-item-start {\n  -webkit-transform: translateX(-100%);\n  transform: translateX(-100%);\n}\n\n/* rtl:end:ignore */\n.carousel-fade .carousel-item {\n  opacity: 0;\n  transition-property: opacity;\n  -webkit-transform: none;\n  transform: none;\n}\n\n.carousel-fade .carousel-item.active,\n.carousel-fade .carousel-item-next.carousel-item-start,\n.carousel-fade .carousel-item-prev.carousel-item-end {\n  z-index: 1;\n  opacity: 1;\n}\n\n.carousel-fade .active.carousel-item-start,\n.carousel-fade .active.carousel-item-end {\n  z-index: 0;\n  opacity: 0;\n  transition: opacity 0s 0.6s;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .carousel-fade .active.carousel-item-start,\n  .carousel-fade .active.carousel-item-end {\n    transition: none;\n  }\n}\n\n.carousel-control-prev,\n.carousel-control-next {\n  position: absolute;\n  top: 0;\n  bottom: 0;\n  z-index: 1;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-align: center;\n  align-items: center;\n  -ms-flex-pack: center;\n  justify-content: center;\n  width: 15%;\n  padding: 0;\n  color: #fff;\n  text-align: center;\n  background: none;\n  border: 0;\n  opacity: 0.5;\n  transition: opacity 0.15s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .carousel-control-prev,\n  .carousel-control-next {\n    transition: none;\n  }\n}\n\n.carousel-control-prev:hover, .carousel-control-prev:focus,\n.carousel-control-next:hover,\n.carousel-control-next:focus {\n  color: #fff;\n  text-decoration: none;\n  outline: 0;\n  opacity: 0.9;\n}\n\n.carousel-control-prev {\n  left: 0;\n}\n\n.carousel-control-next {\n  right: 0;\n}\n\n.carousel-control-prev-icon,\n.carousel-control-next-icon {\n  display: inline-block;\n  width: 2rem;\n  height: 2rem;\n  background-repeat: no-repeat;\n  background-position: 50%;\n  background-size: 100% 100%;\n}\n\n/* rtl:options: {\n  \"autoRename\": true,\n  \"stringMap\":[ {\n    \"name\"    : \"prev-next\",\n    \"search\"  : \"prev\",\n    \"replace\" : \"next\"\n  } ]\n} */\n.carousel-control-prev-icon {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0z'/%3e%3c/svg%3e\");\n}\n\n.carousel-control-next-icon {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e\");\n}\n\n.carousel-indicators {\n  position: absolute;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 2;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-pack: center;\n  justify-content: center;\n  padding: 0;\n  margin-right: 15%;\n  margin-bottom: 1rem;\n  margin-left: 15%;\n  list-style: none;\n}\n\n.carousel-indicators [data-bs-target] {\n  box-sizing: content-box;\n  -ms-flex: 0 1 auto;\n  flex: 0 1 auto;\n  width: 30px;\n  height: 3px;\n  padding: 0;\n  margin-right: 3px;\n  margin-left: 3px;\n  text-indent: -999px;\n  cursor: pointer;\n  background-color: #fff;\n  background-clip: padding-box;\n  border: 0;\n  border-top: 10px solid transparent;\n  border-bottom: 10px solid transparent;\n  opacity: 0.5;\n  transition: opacity 0.6s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .carousel-indicators [data-bs-target] {\n    transition: none;\n  }\n}\n\n.carousel-indicators .active {\n  opacity: 1;\n}\n\n.carousel-caption {\n  position: absolute;\n  right: 15%;\n  bottom: 1.25rem;\n  left: 15%;\n  padding-top: 1.25rem;\n  padding-bottom: 1.25rem;\n  color: #fff;\n  text-align: center;\n}\n\n.carousel-dark .carousel-control-prev-icon,\n.carousel-dark .carousel-control-next-icon {\n  -webkit-filter: invert(1) grayscale(100);\n  filter: invert(1) grayscale(100);\n}\n\n.carousel-dark .carousel-indicators [data-bs-target] {\n  background-color: #000;\n}\n\n.carousel-dark .carousel-caption {\n  color: #000;\n}\n\n@-webkit-keyframes spinner-border {\n  to {\n    -webkit-transform: rotate(360deg) /* rtl:ignore */;\n    transform: rotate(360deg) /* rtl:ignore */;\n  }\n}\n\n@keyframes spinner-border {\n  to {\n    -webkit-transform: rotate(360deg) /* rtl:ignore */;\n    transform: rotate(360deg) /* rtl:ignore */;\n  }\n}\n\n.spinner-border {\n  display: inline-block;\n  width: 2rem;\n  height: 2rem;\n  vertical-align: -0.125em;\n  border: 0.25em solid currentColor;\n  border-right-color: transparent;\n  border-radius: 50%;\n  -webkit-animation: 0.75s linear infinite spinner-border;\n  animation: 0.75s linear infinite spinner-border;\n}\n\n.spinner-border-sm {\n  width: 1rem;\n  height: 1rem;\n  border-width: 0.2em;\n}\n\n@-webkit-keyframes spinner-grow {\n  0% {\n    -webkit-transform: scale(0);\n    transform: scale(0);\n  }\n  50% {\n    opacity: 1;\n    -webkit-transform: none;\n    transform: none;\n  }\n}\n\n@keyframes spinner-grow {\n  0% {\n    -webkit-transform: scale(0);\n    transform: scale(0);\n  }\n  50% {\n    opacity: 1;\n    -webkit-transform: none;\n    transform: none;\n  }\n}\n\n.spinner-grow {\n  display: inline-block;\n  width: 2rem;\n  height: 2rem;\n  vertical-align: -0.125em;\n  background-color: currentColor;\n  border-radius: 50%;\n  opacity: 0;\n  -webkit-animation: 0.75s linear infinite spinner-grow;\n  animation: 0.75s linear infinite spinner-grow;\n}\n\n.spinner-grow-sm {\n  width: 1rem;\n  height: 1rem;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .spinner-border,\n  .spinner-grow {\n    -webkit-animation-duration: 1.5s;\n    animation-duration: 1.5s;\n  }\n}\n\n.offcanvas {\n  position: fixed;\n  bottom: 0;\n  z-index: 1045;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  max-width: 100%;\n  visibility: hidden;\n  background-color: #fff;\n  background-clip: padding-box;\n  outline: 0;\n  transition: -webkit-transform 0.3s ease-in-out;\n  transition: transform 0.3s ease-in-out;\n  transition: transform 0.3s ease-in-out, -webkit-transform 0.3s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .offcanvas {\n    transition: none;\n  }\n}\n\n.offcanvas-backdrop {\n  position: fixed;\n  top: 0;\n  left: 0;\n  z-index: 1040;\n  width: 100vw;\n  height: 100vh;\n  background-color: #000;\n}\n\n.offcanvas-backdrop.fade {\n  opacity: 0;\n}\n\n.offcanvas-backdrop.show {\n  opacity: 0.5;\n}\n\n.offcanvas-header {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-align: center;\n  align-items: center;\n  -ms-flex-pack: justify;\n  justify-content: space-between;\n  padding: 1rem 1rem;\n}\n\n.offcanvas-header .btn-close {\n  padding: 0.5rem 0.5rem;\n  margin-top: -0.5rem;\n  margin-right: -0.5rem;\n  margin-bottom: -0.5rem;\n}\n\n.offcanvas-title {\n  margin-bottom: 0;\n  line-height: 1.5;\n}\n\n.offcanvas-body {\n  -ms-flex-positive: 1;\n  flex-grow: 1;\n  padding: 1rem 1rem;\n  overflow-y: auto;\n}\n\n.offcanvas-start {\n  top: 0;\n  left: 0;\n  width: 400px;\n  border-right: 1px solid rgba(0, 0, 0, 0.2);\n  -webkit-transform: translateX(-100%);\n  transform: translateX(-100%);\n}\n\n.offcanvas-end {\n  top: 0;\n  right: 0;\n  width: 400px;\n  border-left: 1px solid rgba(0, 0, 0, 0.2);\n  -webkit-transform: translateX(100%);\n  transform: translateX(100%);\n}\n\n.offcanvas-top {\n  top: 0;\n  right: 0;\n  left: 0;\n  height: 30vh;\n  max-height: 100%;\n  border-bottom: 1px solid rgba(0, 0, 0, 0.2);\n  -webkit-transform: translateY(-100%);\n  transform: translateY(-100%);\n}\n\n.offcanvas-bottom {\n  right: 0;\n  left: 0;\n  height: 30vh;\n  max-height: 100%;\n  border-top: 1px solid rgba(0, 0, 0, 0.2);\n  -webkit-transform: translateY(100%);\n  transform: translateY(100%);\n}\n\n.offcanvas.show {\n  -webkit-transform: none;\n  transform: none;\n}\n\n.placeholder {\n  display: inline-block;\n  min-height: 1em;\n  vertical-align: middle;\n  cursor: wait;\n  background-color: currentColor;\n  opacity: 0.5;\n}\n\n.placeholder.btn::before {\n  display: inline-block;\n  content: \"\";\n}\n\n.placeholder-xs {\n  min-height: .6em;\n}\n\n.placeholder-sm {\n  min-height: .8em;\n}\n\n.placeholder-lg {\n  min-height: 1.2em;\n}\n\n.placeholder-glow .placeholder {\n  -webkit-animation: placeholder-glow 2s ease-in-out infinite;\n  animation: placeholder-glow 2s ease-in-out infinite;\n}\n\n@-webkit-keyframes placeholder-glow {\n  50% {\n    opacity: 0.2;\n  }\n}\n\n@keyframes placeholder-glow {\n  50% {\n    opacity: 0.2;\n  }\n}\n\n.placeholder-wave {\n  -webkit-mask-image: linear-gradient(130deg, #000 55%, rgba(0, 0, 0, 0.8) 75%, #000 95%);\n  mask-image: linear-gradient(130deg, #000 55%, rgba(0, 0, 0, 0.8) 75%, #000 95%);\n  -webkit-mask-size: 200% 100%;\n  mask-size: 200% 100%;\n  -webkit-animation: placeholder-wave 2s linear infinite;\n  animation: placeholder-wave 2s linear infinite;\n}\n\n@-webkit-keyframes placeholder-wave {\n  100% {\n    -webkit-mask-position: -200% 0%;\n    mask-position: -200% 0%;\n  }\n}\n\n@keyframes placeholder-wave {\n  100% {\n    -webkit-mask-position: -200% 0%;\n    mask-position: -200% 0%;\n  }\n}\n\n.clearfix::after {\n  display: block;\n  clear: both;\n  content: \"\";\n}\n\n.link-primary {\n  color: #2fa4e7;\n}\n\n.link-primary:hover, .link-primary:focus {\n  color: #2683b9;\n}\n\n.link-secondary {\n  color: #e9ecef;\n}\n\n.link-secondary:hover, .link-secondary:focus {\n  color: #edf0f2;\n}\n\n.link-success {\n  color: #73a839;\n}\n\n.link-success:hover, .link-success:focus {\n  color: #5c862e;\n}\n\n.link-info {\n  color: #033c73;\n}\n\n.link-info:hover, .link-info:focus {\n  color: #02305c;\n}\n\n.link-warning {\n  color: #dd5600;\n}\n\n.link-warning:hover, .link-warning:focus {\n  color: #b14500;\n}\n\n.link-danger {\n  color: #c71c22;\n}\n\n.link-danger:hover, .link-danger:focus {\n  color: #9f161b;\n}\n\n.link-light {\n  color: #f8f9fa;\n}\n\n.link-light:hover, .link-light:focus {\n  color: #f9fafb;\n}\n\n.link-dark {\n  color: #343a40;\n}\n\n.link-dark:hover, .link-dark:focus {\n  color: #2a2e33;\n}\n\n.ratio {\n  position: relative;\n  width: 100%;\n}\n\n.ratio::before {\n  display: block;\n  padding-top: var(--bs-aspect-ratio);\n  content: \"\";\n}\n\n.ratio > * {\n  position: absolute;\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n}\n\n.ratio-1x1 {\n  --bs-aspect-ratio: 100%;\n}\n\n.ratio-4x3 {\n  --bs-aspect-ratio: calc(3 / 4 * 100%);\n}\n\n.ratio-16x9 {\n  --bs-aspect-ratio: calc(9 / 16 * 100%);\n}\n\n.ratio-21x9 {\n  --bs-aspect-ratio: calc(9 / 21 * 100%);\n}\n\n.fixed-top {\n  position: fixed;\n  top: 0;\n  right: 0;\n  left: 0;\n  z-index: 1030;\n}\n\n.fixed-bottom {\n  position: fixed;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 1030;\n}\n\n.sticky-top {\n  position: -webkit-sticky;\n  position: sticky;\n  top: 0;\n  z-index: 1020;\n}\n\n@media (min-width: 576px) {\n  .sticky-sm-top {\n    position: -webkit-sticky;\n    position: sticky;\n    top: 0;\n    z-index: 1020;\n  }\n}\n\n@media (min-width: 768px) {\n  .sticky-md-top {\n    position: -webkit-sticky;\n    position: sticky;\n    top: 0;\n    z-index: 1020;\n  }\n}\n\n@media (min-width: 992px) {\n  .sticky-lg-top {\n    position: -webkit-sticky;\n    position: sticky;\n    top: 0;\n    z-index: 1020;\n  }\n}\n\n@media (min-width: 1200px) {\n  .sticky-xl-top {\n    position: -webkit-sticky;\n    position: sticky;\n    top: 0;\n    z-index: 1020;\n  }\n}\n\n@media (min-width: 1400px) {\n  .sticky-xxl-top {\n    position: -webkit-sticky;\n    position: sticky;\n    top: 0;\n    z-index: 1020;\n  }\n}\n\n.hstack {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-direction: row;\n  flex-direction: row;\n  -ms-flex-align: center;\n  align-items: center;\n  -ms-flex-item-align: stretch;\n  align-self: stretch;\n}\n\n.vstack {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex: 1 1 auto;\n  flex: 1 1 auto;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  -ms-flex-item-align: stretch;\n  align-self: stretch;\n}\n\n.visually-hidden,\n.visually-hidden-focusable:not(:focus):not(:focus-within) {\n  position: absolute !important;\n  width: 1px !important;\n  height: 1px !important;\n  padding: 0 !important;\n  margin: -1px !important;\n  overflow: hidden !important;\n  clip: rect(0, 0, 0, 0) !important;\n  white-space: nowrap !important;\n  border: 0 !important;\n}\n\n.stretched-link::after {\n  position: absolute;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 1;\n  content: \"\";\n}\n\n.text-truncate {\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n}\n\n.vr {\n  display: inline-block;\n  -ms-flex-item-align: stretch;\n  align-self: stretch;\n  width: 1px;\n  min-height: 1em;\n  background-color: currentColor;\n  opacity: 0.25;\n}\n\n.align-baseline {\n  vertical-align: baseline !important;\n}\n\n.align-top {\n  vertical-align: top !important;\n}\n\n.align-middle {\n  vertical-align: middle !important;\n}\n\n.align-bottom {\n  vertical-align: bottom !important;\n}\n\n.align-text-bottom {\n  vertical-align: text-bottom !important;\n}\n\n.align-text-top {\n  vertical-align: text-top !important;\n}\n\n.float-start {\n  float: left !important;\n}\n\n.float-end {\n  float: right !important;\n}\n\n.float-none {\n  float: none !important;\n}\n\n.opacity-0 {\n  opacity: 0 !important;\n}\n\n.opacity-25 {\n  opacity: 0.25 !important;\n}\n\n.opacity-50 {\n  opacity: 0.5 !important;\n}\n\n.opacity-75 {\n  opacity: 0.75 !important;\n}\n\n.opacity-100 {\n  opacity: 1 !important;\n}\n\n.overflow-auto {\n  overflow: auto !important;\n}\n\n.overflow-hidden {\n  overflow: hidden !important;\n}\n\n.overflow-visible {\n  overflow: visible !important;\n}\n\n.overflow-scroll {\n  overflow: scroll !important;\n}\n\n.d-inline {\n  display: inline !important;\n}\n\n.d-inline-block {\n  display: inline-block !important;\n}\n\n.d-block {\n  display: block !important;\n}\n\n.d-grid {\n  display: grid !important;\n}\n\n.d-table {\n  display: table !important;\n}\n\n.d-table-row {\n  display: table-row !important;\n}\n\n.d-table-cell {\n  display: table-cell !important;\n}\n\n.d-flex {\n  display: -ms-flexbox !important;\n  display: flex !important;\n}\n\n.d-inline-flex {\n  display: -ms-inline-flexbox !important;\n  display: inline-flex !important;\n}\n\n.d-none {\n  display: none !important;\n}\n\n.shadow {\n  box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15) !important;\n}\n\n.shadow-sm {\n  box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075) !important;\n}\n\n.shadow-lg {\n  box-shadow: 0 1rem 3rem rgba(0, 0, 0, 0.175) !important;\n}\n\n.shadow-none {\n  box-shadow: none !important;\n}\n\n.position-static {\n  position: static !important;\n}\n\n.position-relative {\n  position: relative !important;\n}\n\n.position-absolute {\n  position: absolute !important;\n}\n\n.position-fixed {\n  position: fixed !important;\n}\n\n.position-sticky {\n  position: -webkit-sticky !important;\n  position: sticky !important;\n}\n\n.top-0 {\n  top: 0 !important;\n}\n\n.top-50 {\n  top: 50% !important;\n}\n\n.top-100 {\n  top: 100% !important;\n}\n\n.bottom-0 {\n  bottom: 0 !important;\n}\n\n.bottom-50 {\n  bottom: 50% !important;\n}\n\n.bottom-100 {\n  bottom: 100% !important;\n}\n\n.start-0 {\n  left: 0 !important;\n}\n\n.start-50 {\n  left: 50% !important;\n}\n\n.start-100 {\n  left: 100% !important;\n}\n\n.end-0 {\n  right: 0 !important;\n}\n\n.end-50 {\n  right: 50% !important;\n}\n\n.end-100 {\n  right: 100% !important;\n}\n\n.translate-middle {\n  -webkit-transform: translate(-50%, -50%) !important;\n  transform: translate(-50%, -50%) !important;\n}\n\n.translate-middle-x {\n  -webkit-transform: translateX(-50%) !important;\n  transform: translateX(-50%) !important;\n}\n\n.translate-middle-y {\n  -webkit-transform: translateY(-50%) !important;\n  transform: translateY(-50%) !important;\n}\n\n.border {\n  border: 1px solid #dee2e6 !important;\n}\n\n.border-0 {\n  border: 0 !important;\n}\n\n.border-top {\n  border-top: 1px solid #dee2e6 !important;\n}\n\n.border-top-0 {\n  border-top: 0 !important;\n}\n\n.border-end {\n  border-right: 1px solid #dee2e6 !important;\n}\n\n.border-end-0 {\n  border-right: 0 !important;\n}\n\n.border-bottom {\n  border-bottom: 1px solid #dee2e6 !important;\n}\n\n.border-bottom-0 {\n  border-bottom: 0 !important;\n}\n\n.border-start {\n  border-left: 1px solid #dee2e6 !important;\n}\n\n.border-start-0 {\n  border-left: 0 !important;\n}\n\n.border-primary {\n  border-color: #2fa4e7 !important;\n}\n\n.border-secondary {\n  border-color: #e9ecef !important;\n}\n\n.border-success {\n  border-color: #73a839 !important;\n}\n\n.border-info {\n  border-color: #033c73 !important;\n}\n\n.border-warning {\n  border-color: #dd5600 !important;\n}\n\n.border-danger {\n  border-color: #c71c22 !important;\n}\n\n.border-light {\n  border-color: #f8f9fa !important;\n}\n\n.border-dark {\n  border-color: #343a40 !important;\n}\n\n.border-white {\n  border-color: #fff !important;\n}\n\n.border-1 {\n  border-width: 1px !important;\n}\n\n.border-2 {\n  border-width: 2px !important;\n}\n\n.border-3 {\n  border-width: 3px !important;\n}\n\n.border-4 {\n  border-width: 4px !important;\n}\n\n.border-5 {\n  border-width: 5px !important;\n}\n\n.w-25 {\n  width: 25% !important;\n}\n\n.w-50 {\n  width: 50% !important;\n}\n\n.w-75 {\n  width: 75% !important;\n}\n\n.w-100 {\n  width: 100% !important;\n}\n\n.w-auto {\n  width: auto !important;\n}\n\n.mw-100 {\n  max-width: 100% !important;\n}\n\n.vw-100 {\n  width: 100vw !important;\n}\n\n.min-vw-100 {\n  min-width: 100vw !important;\n}\n\n.h-25 {\n  height: 25% !important;\n}\n\n.h-50 {\n  height: 50% !important;\n}\n\n.h-75 {\n  height: 75% !important;\n}\n\n.h-100 {\n  height: 100% !important;\n}\n\n.h-auto {\n  height: auto !important;\n}\n\n.mh-100 {\n  max-height: 100% !important;\n}\n\n.vh-100 {\n  height: 100vh !important;\n}\n\n.min-vh-100 {\n  min-height: 100vh !important;\n}\n\n.flex-fill {\n  -ms-flex: 1 1 auto !important;\n  flex: 1 1 auto !important;\n}\n\n.flex-row {\n  -ms-flex-direction: row !important;\n  flex-direction: row !important;\n}\n\n.flex-column {\n  -ms-flex-direction: column !important;\n  flex-direction: column !important;\n}\n\n.flex-row-reverse {\n  -ms-flex-direction: row-reverse !important;\n  flex-direction: row-reverse !important;\n}\n\n.flex-column-reverse {\n  -ms-flex-direction: column-reverse !important;\n  flex-direction: column-reverse !important;\n}\n\n.flex-grow-0 {\n  -ms-flex-positive: 0 !important;\n  flex-grow: 0 !important;\n}\n\n.flex-grow-1 {\n  -ms-flex-positive: 1 !important;\n  flex-grow: 1 !important;\n}\n\n.flex-shrink-0 {\n  -ms-flex-negative: 0 !important;\n  flex-shrink: 0 !important;\n}\n\n.flex-shrink-1 {\n  -ms-flex-negative: 1 !important;\n  flex-shrink: 1 !important;\n}\n\n.flex-wrap {\n  -ms-flex-wrap: wrap !important;\n  flex-wrap: wrap !important;\n}\n\n.flex-nowrap {\n  -ms-flex-wrap: nowrap !important;\n  flex-wrap: nowrap !important;\n}\n\n.flex-wrap-reverse {\n  -ms-flex-wrap: wrap-reverse !important;\n  flex-wrap: wrap-reverse !important;\n}\n\n.gap-0 {\n  gap: 0 !important;\n}\n\n.gap-1 {\n  gap: 0.25rem !important;\n}\n\n.gap-2 {\n  gap: 0.5rem !important;\n}\n\n.gap-3 {\n  gap: 1rem !important;\n}\n\n.gap-4 {\n  gap: 1.5rem !important;\n}\n\n.gap-5 {\n  gap: 3rem !important;\n}\n\n.justify-content-start {\n  -ms-flex-pack: start !important;\n  justify-content: flex-start !important;\n}\n\n.justify-content-end {\n  -ms-flex-pack: end !important;\n  justify-content: flex-end !important;\n}\n\n.justify-content-center {\n  -ms-flex-pack: center !important;\n  justify-content: center !important;\n}\n\n.justify-content-between {\n  -ms-flex-pack: justify !important;\n  justify-content: space-between !important;\n}\n\n.justify-content-around {\n  -ms-flex-pack: distribute !important;\n  justify-content: space-around !important;\n}\n\n.justify-content-evenly {\n  -ms-flex-pack: space-evenly !important;\n  justify-content: space-evenly !important;\n}\n\n.align-items-start {\n  -ms-flex-align: start !important;\n  align-items: flex-start !important;\n}\n\n.align-items-end {\n  -ms-flex-align: end !important;\n  align-items: flex-end !important;\n}\n\n.align-items-center {\n  -ms-flex-align: center !important;\n  align-items: center !important;\n}\n\n.align-items-baseline {\n  -ms-flex-align: baseline !important;\n  align-items: baseline !important;\n}\n\n.align-items-stretch {\n  -ms-flex-align: stretch !important;\n  align-items: stretch !important;\n}\n\n.align-content-start {\n  -ms-flex-line-pack: start !important;\n  align-content: flex-start !important;\n}\n\n.align-content-end {\n  -ms-flex-line-pack: end !important;\n  align-content: flex-end !important;\n}\n\n.align-content-center {\n  -ms-flex-line-pack: center !important;\n  align-content: center !important;\n}\n\n.align-content-between {\n  -ms-flex-line-pack: justify !important;\n  align-content: space-between !important;\n}\n\n.align-content-around {\n  -ms-flex-line-pack: distribute !important;\n  align-content: space-around !important;\n}\n\n.align-content-stretch {\n  -ms-flex-line-pack: stretch !important;\n  align-content: stretch !important;\n}\n\n.align-self-auto {\n  -ms-flex-item-align: auto !important;\n  align-self: auto !important;\n}\n\n.align-self-start {\n  -ms-flex-item-align: start !important;\n  align-self: flex-start !important;\n}\n\n.align-self-end {\n  -ms-flex-item-align: end !important;\n  align-self: flex-end !important;\n}\n\n.align-self-center {\n  -ms-flex-item-align: center !important;\n  align-self: center !important;\n}\n\n.align-self-baseline {\n  -ms-flex-item-align: baseline !important;\n  align-self: baseline !important;\n}\n\n.align-self-stretch {\n  -ms-flex-item-align: stretch !important;\n  align-self: stretch !important;\n}\n\n.order-first {\n  -ms-flex-order: -1 !important;\n  order: -1 !important;\n}\n\n.order-0 {\n  -ms-flex-order: 0 !important;\n  order: 0 !important;\n}\n\n.order-1 {\n  -ms-flex-order: 1 !important;\n  order: 1 !important;\n}\n\n.order-2 {\n  -ms-flex-order: 2 !important;\n  order: 2 !important;\n}\n\n.order-3 {\n  -ms-flex-order: 3 !important;\n  order: 3 !important;\n}\n\n.order-4 {\n  -ms-flex-order: 4 !important;\n  order: 4 !important;\n}\n\n.order-5 {\n  -ms-flex-order: 5 !important;\n  order: 5 !important;\n}\n\n.order-last {\n  -ms-flex-order: 6 !important;\n  order: 6 !important;\n}\n\n.m-0 {\n  margin: 0 !important;\n}\n\n.m-1 {\n  margin: 0.25rem !important;\n}\n\n.m-2 {\n  margin: 0.5rem !important;\n}\n\n.m-3 {\n  margin: 1rem !important;\n}\n\n.m-4 {\n  margin: 1.5rem !important;\n}\n\n.m-5 {\n  margin: 3rem !important;\n}\n\n.m-auto {\n  margin: auto !important;\n}\n\n.mx-0 {\n  margin-right: 0 !important;\n  margin-left: 0 !important;\n}\n\n.mx-1 {\n  margin-right: 0.25rem !important;\n  margin-left: 0.25rem !important;\n}\n\n.mx-2 {\n  margin-right: 0.5rem !important;\n  margin-left: 0.5rem !important;\n}\n\n.mx-3 {\n  margin-right: 1rem !important;\n  margin-left: 1rem !important;\n}\n\n.mx-4 {\n  margin-right: 1.5rem !important;\n  margin-left: 1.5rem !important;\n}\n\n.mx-5 {\n  margin-right: 3rem !important;\n  margin-left: 3rem !important;\n}\n\n.mx-auto {\n  margin-right: auto !important;\n  margin-left: auto !important;\n}\n\n.my-0 {\n  margin-top: 0 !important;\n  margin-bottom: 0 !important;\n}\n\n.my-1 {\n  margin-top: 0.25rem !important;\n  margin-bottom: 0.25rem !important;\n}\n\n.my-2 {\n  margin-top: 0.5rem !important;\n  margin-bottom: 0.5rem !important;\n}\n\n.my-3 {\n  margin-top: 1rem !important;\n  margin-bottom: 1rem !important;\n}\n\n.my-4 {\n  margin-top: 1.5rem !important;\n  margin-bottom: 1.5rem !important;\n}\n\n.my-5 {\n  margin-top: 3rem !important;\n  margin-bottom: 3rem !important;\n}\n\n.my-auto {\n  margin-top: auto !important;\n  margin-bottom: auto !important;\n}\n\n.mt-0 {\n  margin-top: 0 !important;\n}\n\n.mt-1 {\n  margin-top: 0.25rem !important;\n}\n\n.mt-2 {\n  margin-top: 0.5rem !important;\n}\n\n.mt-3 {\n  margin-top: 1rem !important;\n}\n\n.mt-4 {\n  margin-top: 1.5rem !important;\n}\n\n.mt-5 {\n  margin-top: 3rem !important;\n}\n\n.mt-auto {\n  margin-top: auto !important;\n}\n\n.me-0 {\n  margin-right: 0 !important;\n}\n\n.me-1 {\n  margin-right: 0.25rem !important;\n}\n\n.me-2 {\n  margin-right: 0.5rem !important;\n}\n\n.me-3 {\n  margin-right: 1rem !important;\n}\n\n.me-4 {\n  margin-right: 1.5rem !important;\n}\n\n.me-5 {\n  margin-right: 3rem !important;\n}\n\n.me-auto {\n  margin-right: auto !important;\n}\n\n.mb-0 {\n  margin-bottom: 0 !important;\n}\n\n.mb-1 {\n  margin-bottom: 0.25rem !important;\n}\n\n.mb-2 {\n  margin-bottom: 0.5rem !important;\n}\n\n.mb-3 {\n  margin-bottom: 1rem !important;\n}\n\n.mb-4 {\n  margin-bottom: 1.5rem !important;\n}\n\n.mb-5 {\n  margin-bottom: 3rem !important;\n}\n\n.mb-auto {\n  margin-bottom: auto !important;\n}\n\n.ms-0 {\n  margin-left: 0 !important;\n}\n\n.ms-1 {\n  margin-left: 0.25rem !important;\n}\n\n.ms-2 {\n  margin-left: 0.5rem !important;\n}\n\n.ms-3 {\n  margin-left: 1rem !important;\n}\n\n.ms-4 {\n  margin-left: 1.5rem !important;\n}\n\n.ms-5 {\n  margin-left: 3rem !important;\n}\n\n.ms-auto {\n  margin-left: auto !important;\n}\n\n.p-0 {\n  padding: 0 !important;\n}\n\n.p-1 {\n  padding: 0.25rem !important;\n}\n\n.p-2 {\n  padding: 0.5rem !important;\n}\n\n.p-3 {\n  padding: 1rem !important;\n}\n\n.p-4 {\n  padding: 1.5rem !important;\n}\n\n.p-5 {\n  padding: 3rem !important;\n}\n\n.px-0 {\n  padding-right: 0 !important;\n  padding-left: 0 !important;\n}\n\n.px-1 {\n  padding-right: 0.25rem !important;\n  padding-left: 0.25rem !important;\n}\n\n.px-2 {\n  padding-right: 0.5rem !important;\n  padding-left: 0.5rem !important;\n}\n\n.px-3 {\n  padding-right: 1rem !important;\n  padding-left: 1rem !important;\n}\n\n.px-4 {\n  padding-right: 1.5rem !important;\n  padding-left: 1.5rem !important;\n}\n\n.px-5 {\n  padding-right: 3rem !important;\n  padding-left: 3rem !important;\n}\n\n.py-0 {\n  padding-top: 0 !important;\n  padding-bottom: 0 !important;\n}\n\n.py-1 {\n  padding-top: 0.25rem !important;\n  padding-bottom: 0.25rem !important;\n}\n\n.py-2 {\n  padding-top: 0.5rem !important;\n  padding-bottom: 0.5rem !important;\n}\n\n.py-3 {\n  padding-top: 1rem !important;\n  padding-bottom: 1rem !important;\n}\n\n.py-4 {\n  padding-top: 1.5rem !important;\n  padding-bottom: 1.5rem !important;\n}\n\n.py-5 {\n  padding-top: 3rem !important;\n  padding-bottom: 3rem !important;\n}\n\n.pt-0 {\n  padding-top: 0 !important;\n}\n\n.pt-1 {\n  padding-top: 0.25rem !important;\n}\n\n.pt-2 {\n  padding-top: 0.5rem !important;\n}\n\n.pt-3 {\n  padding-top: 1rem !important;\n}\n\n.pt-4 {\n  padding-top: 1.5rem !important;\n}\n\n.pt-5 {\n  padding-top: 3rem !important;\n}\n\n.pe-0 {\n  padding-right: 0 !important;\n}\n\n.pe-1 {\n  padding-right: 0.25rem !important;\n}\n\n.pe-2 {\n  padding-right: 0.5rem !important;\n}\n\n.pe-3 {\n  padding-right: 1rem !important;\n}\n\n.pe-4 {\n  padding-right: 1.5rem !important;\n}\n\n.pe-5 {\n  padding-right: 3rem !important;\n}\n\n.pb-0 {\n  padding-bottom: 0 !important;\n}\n\n.pb-1 {\n  padding-bottom: 0.25rem !important;\n}\n\n.pb-2 {\n  padding-bottom: 0.5rem !important;\n}\n\n.pb-3 {\n  padding-bottom: 1rem !important;\n}\n\n.pb-4 {\n  padding-bottom: 1.5rem !important;\n}\n\n.pb-5 {\n  padding-bottom: 3rem !important;\n}\n\n.ps-0 {\n  padding-left: 0 !important;\n}\n\n.ps-1 {\n  padding-left: 0.25rem !important;\n}\n\n.ps-2 {\n  padding-left: 0.5rem !important;\n}\n\n.ps-3 {\n  padding-left: 1rem !important;\n}\n\n.ps-4 {\n  padding-left: 1.5rem !important;\n}\n\n.ps-5 {\n  padding-left: 3rem !important;\n}\n\n.font-monospace {\n  font-family: var(--bs-font-monospace) !important;\n}\n\n.fs-1 {\n  font-size: calc(1.375rem + 1.5vw) !important;\n}\n\n.fs-2 {\n  font-size: calc(1.325rem + 0.9vw) !important;\n}\n\n.fs-3 {\n  font-size: calc(1.3rem + 0.6vw) !important;\n}\n\n.fs-4 {\n  font-size: calc(1.275rem + 0.3vw) !important;\n}\n\n.fs-5 {\n  font-size: 1.25rem !important;\n}\n\n.fs-6 {\n  font-size: 1rem !important;\n}\n\n.fst-italic {\n  font-style: italic !important;\n}\n\n.fst-normal {\n  font-style: normal !important;\n}\n\n.fw-light {\n  font-weight: 300 !important;\n}\n\n.fw-lighter {\n  font-weight: lighter !important;\n}\n\n.fw-normal {\n  font-weight: 400 !important;\n}\n\n.fw-bold {\n  font-weight: 700 !important;\n}\n\n.fw-bolder {\n  font-weight: bolder !important;\n}\n\n.lh-1 {\n  line-height: 1 !important;\n}\n\n.lh-sm {\n  line-height: 1.25 !important;\n}\n\n.lh-base {\n  line-height: 1.5 !important;\n}\n\n.lh-lg {\n  line-height: 2 !important;\n}\n\n.text-start {\n  text-align: left !important;\n}\n\n.text-end {\n  text-align: right !important;\n}\n\n.text-center {\n  text-align: center !important;\n}\n\n.text-decoration-none {\n  text-decoration: none !important;\n}\n\n.text-decoration-underline {\n  text-decoration: underline !important;\n}\n\n.text-decoration-line-through {\n  text-decoration: line-through !important;\n}\n\n.text-lowercase {\n  text-transform: lowercase !important;\n}\n\n.text-uppercase {\n  text-transform: uppercase !important;\n}\n\n.text-capitalize {\n  text-transform: capitalize !important;\n}\n\n.text-wrap {\n  white-space: normal !important;\n}\n\n.text-nowrap {\n  white-space: nowrap !important;\n}\n\n/* rtl:begin:remove */\n.text-break {\n  word-wrap: break-word !important;\n  word-break: break-word !important;\n}\n\n/* rtl:end:remove */\n.text-primary {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-primary-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-secondary {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-secondary-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-success {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-success-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-info {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-info-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-warning {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-warning-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-danger {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-danger-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-light {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-light-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-dark {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-dark-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-black {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-black-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-white {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-white-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-body {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-body-color-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-muted {\n  --bs-text-opacity: 1;\n  color: #868e96 !important;\n}\n\n.text-black-50 {\n  --bs-text-opacity: 1;\n  color: rgba(0, 0, 0, 0.5) !important;\n}\n\n.text-white-50 {\n  --bs-text-opacity: 1;\n  color: rgba(255, 255, 255, 0.5) !important;\n}\n\n.text-reset {\n  --bs-text-opacity: 1;\n  color: inherit !important;\n}\n\n.text-opacity-25 {\n  --bs-text-opacity: 0.25;\n}\n\n.text-opacity-50 {\n  --bs-text-opacity: 0.5;\n}\n\n.text-opacity-75 {\n  --bs-text-opacity: 0.75;\n}\n\n.text-opacity-100 {\n  --bs-text-opacity: 1;\n}\n\n.bg-primary {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-primary-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-secondary {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-secondary-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-success {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-success-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-info {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-info-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-warning {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-warning-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-danger {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-danger-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-light {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-light-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-dark {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-dark-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-black {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-black-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-white {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-white-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-body {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-body-bg-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-transparent {\n  --bs-bg-opacity: 1;\n  background-color: transparent !important;\n}\n\n.bg-opacity-10 {\n  --bs-bg-opacity: 0.1;\n}\n\n.bg-opacity-25 {\n  --bs-bg-opacity: 0.25;\n}\n\n.bg-opacity-50 {\n  --bs-bg-opacity: 0.5;\n}\n\n.bg-opacity-75 {\n  --bs-bg-opacity: 0.75;\n}\n\n.bg-opacity-100 {\n  --bs-bg-opacity: 1;\n}\n\n.bg-gradient {\n  background-image: var(--bs-gradient) !important;\n}\n\n.user-select-all {\n  -webkit-user-select: all !important;\n  -moz-user-select: all !important;\n  user-select: all !important;\n}\n\n.user-select-auto {\n  -webkit-user-select: auto !important;\n  -moz-user-select: auto !important;\n  -ms-user-select: auto !important;\n  user-select: auto !important;\n}\n\n.user-select-none {\n  -webkit-user-select: none !important;\n  -moz-user-select: none !important;\n  -ms-user-select: none !important;\n  user-select: none !important;\n}\n\n.pe-none {\n  pointer-events: none !important;\n}\n\n.pe-auto {\n  pointer-events: auto !important;\n}\n\n.rounded {\n  border-radius: 0.25rem !important;\n}\n\n.rounded-0 {\n  border-radius: 0 !important;\n}\n\n.rounded-1 {\n  border-radius: 0.2rem !important;\n}\n\n.rounded-2 {\n  border-radius: 0.25rem !important;\n}\n\n.rounded-3 {\n  border-radius: 0.3rem !important;\n}\n\n.rounded-circle {\n  border-radius: 50% !important;\n}\n\n.rounded-pill {\n  border-radius: 50rem !important;\n}\n\n.rounded-top {\n  border-top-left-radius: 0.25rem !important;\n  border-top-right-radius: 0.25rem !important;\n}\n\n.rounded-end {\n  border-top-right-radius: 0.25rem !important;\n  border-bottom-right-radius: 0.25rem !important;\n}\n\n.rounded-bottom {\n  border-bottom-right-radius: 0.25rem !important;\n  border-bottom-left-radius: 0.25rem !important;\n}\n\n.rounded-start {\n  border-bottom-left-radius: 0.25rem !important;\n  border-top-left-radius: 0.25rem !important;\n}\n\n.visible {\n  visibility: visible !important;\n}\n\n.invisible {\n  visibility: hidden !important;\n}\n\n@media (min-width: 576px) {\n  .float-sm-start {\n    float: left !important;\n  }\n  .float-sm-end {\n    float: right !important;\n  }\n  .float-sm-none {\n    float: none !important;\n  }\n  .d-sm-inline {\n    display: inline !important;\n  }\n  .d-sm-inline-block {\n    display: inline-block !important;\n  }\n  .d-sm-block {\n    display: block !important;\n  }\n  .d-sm-grid {\n    display: grid !important;\n  }\n  .d-sm-table {\n    display: table !important;\n  }\n  .d-sm-table-row {\n    display: table-row !important;\n  }\n  .d-sm-table-cell {\n    display: table-cell !important;\n  }\n  .d-sm-flex {\n    display: -ms-flexbox !important;\n    display: flex !important;\n  }\n  .d-sm-inline-flex {\n    display: -ms-inline-flexbox !important;\n    display: inline-flex !important;\n  }\n  .d-sm-none {\n    display: none !important;\n  }\n  .flex-sm-fill {\n    -ms-flex: 1 1 auto !important;\n    flex: 1 1 auto !important;\n  }\n  .flex-sm-row {\n    -ms-flex-direction: row !important;\n    flex-direction: row !important;\n  }\n  .flex-sm-column {\n    -ms-flex-direction: column !important;\n    flex-direction: column !important;\n  }\n  .flex-sm-row-reverse {\n    -ms-flex-direction: row-reverse !important;\n    flex-direction: row-reverse !important;\n  }\n  .flex-sm-column-reverse {\n    -ms-flex-direction: column-reverse !important;\n    flex-direction: column-reverse !important;\n  }\n  .flex-sm-grow-0 {\n    -ms-flex-positive: 0 !important;\n    flex-grow: 0 !important;\n  }\n  .flex-sm-grow-1 {\n    -ms-flex-positive: 1 !important;\n    flex-grow: 1 !important;\n  }\n  .flex-sm-shrink-0 {\n    -ms-flex-negative: 0 !important;\n    flex-shrink: 0 !important;\n  }\n  .flex-sm-shrink-1 {\n    -ms-flex-negative: 1 !important;\n    flex-shrink: 1 !important;\n  }\n  .flex-sm-wrap {\n    -ms-flex-wrap: wrap !important;\n    flex-wrap: wrap !important;\n  }\n  .flex-sm-nowrap {\n    -ms-flex-wrap: nowrap !important;\n    flex-wrap: nowrap !important;\n  }\n  .flex-sm-wrap-reverse {\n    -ms-flex-wrap: wrap-reverse !important;\n    flex-wrap: wrap-reverse !important;\n  }\n  .gap-sm-0 {\n    gap: 0 !important;\n  }\n  .gap-sm-1 {\n    gap: 0.25rem !important;\n  }\n  .gap-sm-2 {\n    gap: 0.5rem !important;\n  }\n  .gap-sm-3 {\n    gap: 1rem !important;\n  }\n  .gap-sm-4 {\n    gap: 1.5rem !important;\n  }\n  .gap-sm-5 {\n    gap: 3rem !important;\n  }\n  .justify-content-sm-start {\n    -ms-flex-pack: start !important;\n    justify-content: flex-start !important;\n  }\n  .justify-content-sm-end {\n    -ms-flex-pack: end !important;\n    justify-content: flex-end !important;\n  }\n  .justify-content-sm-center {\n    -ms-flex-pack: center !important;\n    justify-content: center !important;\n  }\n  .justify-content-sm-between {\n    -ms-flex-pack: justify !important;\n    justify-content: space-between !important;\n  }\n  .justify-content-sm-around {\n    -ms-flex-pack: distribute !important;\n    justify-content: space-around !important;\n  }\n  .justify-content-sm-evenly {\n    -ms-flex-pack: space-evenly !important;\n    justify-content: space-evenly !important;\n  }\n  .align-items-sm-start {\n    -ms-flex-align: start !important;\n    align-items: flex-start !important;\n  }\n  .align-items-sm-end {\n    -ms-flex-align: end !important;\n    align-items: flex-end !important;\n  }\n  .align-items-sm-center {\n    -ms-flex-align: center !important;\n    align-items: center !important;\n  }\n  .align-items-sm-baseline {\n    -ms-flex-align: baseline !important;\n    align-items: baseline !important;\n  }\n  .align-items-sm-stretch {\n    -ms-flex-align: stretch !important;\n    align-items: stretch !important;\n  }\n  .align-content-sm-start {\n    -ms-flex-line-pack: start !important;\n    align-content: flex-start !important;\n  }\n  .align-content-sm-end {\n    -ms-flex-line-pack: end !important;\n    align-content: flex-end !important;\n  }\n  .align-content-sm-center {\n    -ms-flex-line-pack: center !important;\n    align-content: center !important;\n  }\n  .align-content-sm-between {\n    -ms-flex-line-pack: justify !important;\n    align-content: space-between !important;\n  }\n  .align-content-sm-around {\n    -ms-flex-line-pack: distribute !important;\n    align-content: space-around !important;\n  }\n  .align-content-sm-stretch {\n    -ms-flex-line-pack: stretch !important;\n    align-content: stretch !important;\n  }\n  .align-self-sm-auto {\n    -ms-flex-item-align: auto !important;\n    align-self: auto !important;\n  }\n  .align-self-sm-start {\n    -ms-flex-item-align: start !important;\n    align-self: flex-start !important;\n  }\n  .align-self-sm-end {\n    -ms-flex-item-align: end !important;\n    align-self: flex-end !important;\n  }\n  .align-self-sm-center {\n    -ms-flex-item-align: center !important;\n    align-self: center !important;\n  }\n  .align-self-sm-baseline {\n    -ms-flex-item-align: baseline !important;\n    align-self: baseline !important;\n  }\n  .align-self-sm-stretch {\n    -ms-flex-item-align: stretch !important;\n    align-self: stretch !important;\n  }\n  .order-sm-first {\n    -ms-flex-order: -1 !important;\n    order: -1 !important;\n  }\n  .order-sm-0 {\n    -ms-flex-order: 0 !important;\n    order: 0 !important;\n  }\n  .order-sm-1 {\n    -ms-flex-order: 1 !important;\n    order: 1 !important;\n  }\n  .order-sm-2 {\n    -ms-flex-order: 2 !important;\n    order: 2 !important;\n  }\n  .order-sm-3 {\n    -ms-flex-order: 3 !important;\n    order: 3 !important;\n  }\n  .order-sm-4 {\n    -ms-flex-order: 4 !important;\n    order: 4 !important;\n  }\n  .order-sm-5 {\n    -ms-flex-order: 5 !important;\n    order: 5 !important;\n  }\n  .order-sm-last {\n    -ms-flex-order: 6 !important;\n    order: 6 !important;\n  }\n  .m-sm-0 {\n    margin: 0 !important;\n  }\n  .m-sm-1 {\n    margin: 0.25rem !important;\n  }\n  .m-sm-2 {\n    margin: 0.5rem !important;\n  }\n  .m-sm-3 {\n    margin: 1rem !important;\n  }\n  .m-sm-4 {\n    margin: 1.5rem !important;\n  }\n  .m-sm-5 {\n    margin: 3rem !important;\n  }\n  .m-sm-auto {\n    margin: auto !important;\n  }\n  .mx-sm-0 {\n    margin-right: 0 !important;\n    margin-left: 0 !important;\n  }\n  .mx-sm-1 {\n    margin-right: 0.25rem !important;\n    margin-left: 0.25rem !important;\n  }\n  .mx-sm-2 {\n    margin-right: 0.5rem !important;\n    margin-left: 0.5rem !important;\n  }\n  .mx-sm-3 {\n    margin-right: 1rem !important;\n    margin-left: 1rem !important;\n  }\n  .mx-sm-4 {\n    margin-right: 1.5rem !important;\n    margin-left: 1.5rem !important;\n  }\n  .mx-sm-5 {\n    margin-right: 3rem !important;\n    margin-left: 3rem !important;\n  }\n  .mx-sm-auto {\n    margin-right: auto !important;\n    margin-left: auto !important;\n  }\n  .my-sm-0 {\n    margin-top: 0 !important;\n    margin-bottom: 0 !important;\n  }\n  .my-sm-1 {\n    margin-top: 0.25rem !important;\n    margin-bottom: 0.25rem !important;\n  }\n  .my-sm-2 {\n    margin-top: 0.5rem !important;\n    margin-bottom: 0.5rem !important;\n  }\n  .my-sm-3 {\n    margin-top: 1rem !important;\n    margin-bottom: 1rem !important;\n  }\n  .my-sm-4 {\n    margin-top: 1.5rem !important;\n    margin-bottom: 1.5rem !important;\n  }\n  .my-sm-5 {\n    margin-top: 3rem !important;\n    margin-bottom: 3rem !important;\n  }\n  .my-sm-auto {\n    margin-top: auto !important;\n    margin-bottom: auto !important;\n  }\n  .mt-sm-0 {\n    margin-top: 0 !important;\n  }\n  .mt-sm-1 {\n    margin-top: 0.25rem !important;\n  }\n  .mt-sm-2 {\n    margin-top: 0.5rem !important;\n  }\n  .mt-sm-3 {\n    margin-top: 1rem !important;\n  }\n  .mt-sm-4 {\n    margin-top: 1.5rem !important;\n  }\n  .mt-sm-5 {\n    margin-top: 3rem !important;\n  }\n  .mt-sm-auto {\n    margin-top: auto !important;\n  }\n  .me-sm-0 {\n    margin-right: 0 !important;\n  }\n  .me-sm-1 {\n    margin-right: 0.25rem !important;\n  }\n  .me-sm-2 {\n    margin-right: 0.5rem !important;\n  }\n  .me-sm-3 {\n    margin-right: 1rem !important;\n  }\n  .me-sm-4 {\n    margin-right: 1.5rem !important;\n  }\n  .me-sm-5 {\n    margin-right: 3rem !important;\n  }\n  .me-sm-auto {\n    margin-right: auto !important;\n  }\n  .mb-sm-0 {\n    margin-bottom: 0 !important;\n  }\n  .mb-sm-1 {\n    margin-bottom: 0.25rem !important;\n  }\n  .mb-sm-2 {\n    margin-bottom: 0.5rem !important;\n  }\n  .mb-sm-3 {\n    margin-bottom: 1rem !important;\n  }\n  .mb-sm-4 {\n    margin-bottom: 1.5rem !important;\n  }\n  .mb-sm-5 {\n    margin-bottom: 3rem !important;\n  }\n  .mb-sm-auto {\n    margin-bottom: auto !important;\n  }\n  .ms-sm-0 {\n    margin-left: 0 !important;\n  }\n  .ms-sm-1 {\n    margin-left: 0.25rem !important;\n  }\n  .ms-sm-2 {\n    margin-left: 0.5rem !important;\n  }\n  .ms-sm-3 {\n    margin-left: 1rem !important;\n  }\n  .ms-sm-4 {\n    margin-left: 1.5rem !important;\n  }\n  .ms-sm-5 {\n    margin-left: 3rem !important;\n  }\n  .ms-sm-auto {\n    margin-left: auto !important;\n  }\n  .p-sm-0 {\n    padding: 0 !important;\n  }\n  .p-sm-1 {\n    padding: 0.25rem !important;\n  }\n  .p-sm-2 {\n    padding: 0.5rem !important;\n  }\n  .p-sm-3 {\n    padding: 1rem !important;\n  }\n  .p-sm-4 {\n    padding: 1.5rem !important;\n  }\n  .p-sm-5 {\n    padding: 3rem !important;\n  }\n  .px-sm-0 {\n    padding-right: 0 !important;\n    padding-left: 0 !important;\n  }\n  .px-sm-1 {\n    padding-right: 0.25rem !important;\n    padding-left: 0.25rem !important;\n  }\n  .px-sm-2 {\n    padding-right: 0.5rem !important;\n    padding-left: 0.5rem !important;\n  }\n  .px-sm-3 {\n    padding-right: 1rem !important;\n    padding-left: 1rem !important;\n  }\n  .px-sm-4 {\n    padding-right: 1.5rem !important;\n    padding-left: 1.5rem !important;\n  }\n  .px-sm-5 {\n    padding-right: 3rem !important;\n    padding-left: 3rem !important;\n  }\n  .py-sm-0 {\n    padding-top: 0 !important;\n    padding-bottom: 0 !important;\n  }\n  .py-sm-1 {\n    padding-top: 0.25rem !important;\n    padding-bottom: 0.25rem !important;\n  }\n  .py-sm-2 {\n    padding-top: 0.5rem !important;\n    padding-bottom: 0.5rem !important;\n  }\n  .py-sm-3 {\n    padding-top: 1rem !important;\n    padding-bottom: 1rem !important;\n  }\n  .py-sm-4 {\n    padding-top: 1.5rem !important;\n    padding-bottom: 1.5rem !important;\n  }\n  .py-sm-5 {\n    padding-top: 3rem !important;\n    padding-bottom: 3rem !important;\n  }\n  .pt-sm-0 {\n    padding-top: 0 !important;\n  }\n  .pt-sm-1 {\n    padding-top: 0.25rem !important;\n  }\n  .pt-sm-2 {\n    padding-top: 0.5rem !important;\n  }\n  .pt-sm-3 {\n    padding-top: 1rem !important;\n  }\n  .pt-sm-4 {\n    padding-top: 1.5rem !important;\n  }\n  .pt-sm-5 {\n    padding-top: 3rem !important;\n  }\n  .pe-sm-0 {\n    padding-right: 0 !important;\n  }\n  .pe-sm-1 {\n    padding-right: 0.25rem !important;\n  }\n  .pe-sm-2 {\n    padding-right: 0.5rem !important;\n  }\n  .pe-sm-3 {\n    padding-right: 1rem !important;\n  }\n  .pe-sm-4 {\n    padding-right: 1.5rem !important;\n  }\n  .pe-sm-5 {\n    padding-right: 3rem !important;\n  }\n  .pb-sm-0 {\n    padding-bottom: 0 !important;\n  }\n  .pb-sm-1 {\n    padding-bottom: 0.25rem !important;\n  }\n  .pb-sm-2 {\n    padding-bottom: 0.5rem !important;\n  }\n  .pb-sm-3 {\n    padding-bottom: 1rem !important;\n  }\n  .pb-sm-4 {\n    padding-bottom: 1.5rem !important;\n  }\n  .pb-sm-5 {\n    padding-bottom: 3rem !important;\n  }\n  .ps-sm-0 {\n    padding-left: 0 !important;\n  }\n  .ps-sm-1 {\n    padding-left: 0.25rem !important;\n  }\n  .ps-sm-2 {\n    padding-left: 0.5rem !important;\n  }\n  .ps-sm-3 {\n    padding-left: 1rem !important;\n  }\n  .ps-sm-4 {\n    padding-left: 1.5rem !important;\n  }\n  .ps-sm-5 {\n    padding-left: 3rem !important;\n  }\n  .text-sm-start {\n    text-align: left !important;\n  }\n  .text-sm-end {\n    text-align: right !important;\n  }\n  .text-sm-center {\n    text-align: center !important;\n  }\n}\n\n@media (min-width: 768px) {\n  .float-md-start {\n    float: left !important;\n  }\n  .float-md-end {\n    float: right !important;\n  }\n  .float-md-none {\n    float: none !important;\n  }\n  .d-md-inline {\n    display: inline !important;\n  }\n  .d-md-inline-block {\n    display: inline-block !important;\n  }\n  .d-md-block {\n    display: block !important;\n  }\n  .d-md-grid {\n    display: grid !important;\n  }\n  .d-md-table {\n    display: table !important;\n  }\n  .d-md-table-row {\n    display: table-row !important;\n  }\n  .d-md-table-cell {\n    display: table-cell !important;\n  }\n  .d-md-flex {\n    display: -ms-flexbox !important;\n    display: flex !important;\n  }\n  .d-md-inline-flex {\n    display: -ms-inline-flexbox !important;\n    display: inline-flex !important;\n  }\n  .d-md-none {\n    display: none !important;\n  }\n  .flex-md-fill {\n    -ms-flex: 1 1 auto !important;\n    flex: 1 1 auto !important;\n  }\n  .flex-md-row {\n    -ms-flex-direction: row !important;\n    flex-direction: row !important;\n  }\n  .flex-md-column {\n    -ms-flex-direction: column !important;\n    flex-direction: column !important;\n  }\n  .flex-md-row-reverse {\n    -ms-flex-direction: row-reverse !important;\n    flex-direction: row-reverse !important;\n  }\n  .flex-md-column-reverse {\n    -ms-flex-direction: column-reverse !important;\n    flex-direction: column-reverse !important;\n  }\n  .flex-md-grow-0 {\n    -ms-flex-positive: 0 !important;\n    flex-grow: 0 !important;\n  }\n  .flex-md-grow-1 {\n    -ms-flex-positive: 1 !important;\n    flex-grow: 1 !important;\n  }\n  .flex-md-shrink-0 {\n    -ms-flex-negative: 0 !important;\n    flex-shrink: 0 !important;\n  }\n  .flex-md-shrink-1 {\n    -ms-flex-negative: 1 !important;\n    flex-shrink: 1 !important;\n  }\n  .flex-md-wrap {\n    -ms-flex-wrap: wrap !important;\n    flex-wrap: wrap !important;\n  }\n  .flex-md-nowrap {\n    -ms-flex-wrap: nowrap !important;\n    flex-wrap: nowrap !important;\n  }\n  .flex-md-wrap-reverse {\n    -ms-flex-wrap: wrap-reverse !important;\n    flex-wrap: wrap-reverse !important;\n  }\n  .gap-md-0 {\n    gap: 0 !important;\n  }\n  .gap-md-1 {\n    gap: 0.25rem !important;\n  }\n  .gap-md-2 {\n    gap: 0.5rem !important;\n  }\n  .gap-md-3 {\n    gap: 1rem !important;\n  }\n  .gap-md-4 {\n    gap: 1.5rem !important;\n  }\n  .gap-md-5 {\n    gap: 3rem !important;\n  }\n  .justify-content-md-start {\n    -ms-flex-pack: start !important;\n    justify-content: flex-start !important;\n  }\n  .justify-content-md-end {\n    -ms-flex-pack: end !important;\n    justify-content: flex-end !important;\n  }\n  .justify-content-md-center {\n    -ms-flex-pack: center !important;\n    justify-content: center !important;\n  }\n  .justify-content-md-between {\n    -ms-flex-pack: justify !important;\n    justify-content: space-between !important;\n  }\n  .justify-content-md-around {\n    -ms-flex-pack: distribute !important;\n    justify-content: space-around !important;\n  }\n  .justify-content-md-evenly {\n    -ms-flex-pack: space-evenly !important;\n    justify-content: space-evenly !important;\n  }\n  .align-items-md-start {\n    -ms-flex-align: start !important;\n    align-items: flex-start !important;\n  }\n  .align-items-md-end {\n    -ms-flex-align: end !important;\n    align-items: flex-end !important;\n  }\n  .align-items-md-center {\n    -ms-flex-align: center !important;\n    align-items: center !important;\n  }\n  .align-items-md-baseline {\n    -ms-flex-align: baseline !important;\n    align-items: baseline !important;\n  }\n  .align-items-md-stretch {\n    -ms-flex-align: stretch !important;\n    align-items: stretch !important;\n  }\n  .align-content-md-start {\n    -ms-flex-line-pack: start !important;\n    align-content: flex-start !important;\n  }\n  .align-content-md-end {\n    -ms-flex-line-pack: end !important;\n    align-content: flex-end !important;\n  }\n  .align-content-md-center {\n    -ms-flex-line-pack: center !important;\n    align-content: center !important;\n  }\n  .align-content-md-between {\n    -ms-flex-line-pack: justify !important;\n    align-content: space-between !important;\n  }\n  .align-content-md-around {\n    -ms-flex-line-pack: distribute !important;\n    align-content: space-around !important;\n  }\n  .align-content-md-stretch {\n    -ms-flex-line-pack: stretch !important;\n    align-content: stretch !important;\n  }\n  .align-self-md-auto {\n    -ms-flex-item-align: auto !important;\n    align-self: auto !important;\n  }\n  .align-self-md-start {\n    -ms-flex-item-align: start !important;\n    align-self: flex-start !important;\n  }\n  .align-self-md-end {\n    -ms-flex-item-align: end !important;\n    align-self: flex-end !important;\n  }\n  .align-self-md-center {\n    -ms-flex-item-align: center !important;\n    align-self: center !important;\n  }\n  .align-self-md-baseline {\n    -ms-flex-item-align: baseline !important;\n    align-self: baseline !important;\n  }\n  .align-self-md-stretch {\n    -ms-flex-item-align: stretch !important;\n    align-self: stretch !important;\n  }\n  .order-md-first {\n    -ms-flex-order: -1 !important;\n    order: -1 !important;\n  }\n  .order-md-0 {\n    -ms-flex-order: 0 !important;\n    order: 0 !important;\n  }\n  .order-md-1 {\n    -ms-flex-order: 1 !important;\n    order: 1 !important;\n  }\n  .order-md-2 {\n    -ms-flex-order: 2 !important;\n    order: 2 !important;\n  }\n  .order-md-3 {\n    -ms-flex-order: 3 !important;\n    order: 3 !important;\n  }\n  .order-md-4 {\n    -ms-flex-order: 4 !important;\n    order: 4 !important;\n  }\n  .order-md-5 {\n    -ms-flex-order: 5 !important;\n    order: 5 !important;\n  }\n  .order-md-last {\n    -ms-flex-order: 6 !important;\n    order: 6 !important;\n  }\n  .m-md-0 {\n    margin: 0 !important;\n  }\n  .m-md-1 {\n    margin: 0.25rem !important;\n  }\n  .m-md-2 {\n    margin: 0.5rem !important;\n  }\n  .m-md-3 {\n    margin: 1rem !important;\n  }\n  .m-md-4 {\n    margin: 1.5rem !important;\n  }\n  .m-md-5 {\n    margin: 3rem !important;\n  }\n  .m-md-auto {\n    margin: auto !important;\n  }\n  .mx-md-0 {\n    margin-right: 0 !important;\n    margin-left: 0 !important;\n  }\n  .mx-md-1 {\n    margin-right: 0.25rem !important;\n    margin-left: 0.25rem !important;\n  }\n  .mx-md-2 {\n    margin-right: 0.5rem !important;\n    margin-left: 0.5rem !important;\n  }\n  .mx-md-3 {\n    margin-right: 1rem !important;\n    margin-left: 1rem !important;\n  }\n  .mx-md-4 {\n    margin-right: 1.5rem !important;\n    margin-left: 1.5rem !important;\n  }\n  .mx-md-5 {\n    margin-right: 3rem !important;\n    margin-left: 3rem !important;\n  }\n  .mx-md-auto {\n    margin-right: auto !important;\n    margin-left: auto !important;\n  }\n  .my-md-0 {\n    margin-top: 0 !important;\n    margin-bottom: 0 !important;\n  }\n  .my-md-1 {\n    margin-top: 0.25rem !important;\n    margin-bottom: 0.25rem !important;\n  }\n  .my-md-2 {\n    margin-top: 0.5rem !important;\n    margin-bottom: 0.5rem !important;\n  }\n  .my-md-3 {\n    margin-top: 1rem !important;\n    margin-bottom: 1rem !important;\n  }\n  .my-md-4 {\n    margin-top: 1.5rem !important;\n    margin-bottom: 1.5rem !important;\n  }\n  .my-md-5 {\n    margin-top: 3rem !important;\n    margin-bottom: 3rem !important;\n  }\n  .my-md-auto {\n    margin-top: auto !important;\n    margin-bottom: auto !important;\n  }\n  .mt-md-0 {\n    margin-top: 0 !important;\n  }\n  .mt-md-1 {\n    margin-top: 0.25rem !important;\n  }\n  .mt-md-2 {\n    margin-top: 0.5rem !important;\n  }\n  .mt-md-3 {\n    margin-top: 1rem !important;\n  }\n  .mt-md-4 {\n    margin-top: 1.5rem !important;\n  }\n  .mt-md-5 {\n    margin-top: 3rem !important;\n  }\n  .mt-md-auto {\n    margin-top: auto !important;\n  }\n  .me-md-0 {\n    margin-right: 0 !important;\n  }\n  .me-md-1 {\n    margin-right: 0.25rem !important;\n  }\n  .me-md-2 {\n    margin-right: 0.5rem !important;\n  }\n  .me-md-3 {\n    margin-right: 1rem !important;\n  }\n  .me-md-4 {\n    margin-right: 1.5rem !important;\n  }\n  .me-md-5 {\n    margin-right: 3rem !important;\n  }\n  .me-md-auto {\n    margin-right: auto !important;\n  }\n  .mb-md-0 {\n    margin-bottom: 0 !important;\n  }\n  .mb-md-1 {\n    margin-bottom: 0.25rem !important;\n  }\n  .mb-md-2 {\n    margin-bottom: 0.5rem !important;\n  }\n  .mb-md-3 {\n    margin-bottom: 1rem !important;\n  }\n  .mb-md-4 {\n    margin-bottom: 1.5rem !important;\n  }\n  .mb-md-5 {\n    margin-bottom: 3rem !important;\n  }\n  .mb-md-auto {\n    margin-bottom: auto !important;\n  }\n  .ms-md-0 {\n    margin-left: 0 !important;\n  }\n  .ms-md-1 {\n    margin-left: 0.25rem !important;\n  }\n  .ms-md-2 {\n    margin-left: 0.5rem !important;\n  }\n  .ms-md-3 {\n    margin-left: 1rem !important;\n  }\n  .ms-md-4 {\n    margin-left: 1.5rem !important;\n  }\n  .ms-md-5 {\n    margin-left: 3rem !important;\n  }\n  .ms-md-auto {\n    margin-left: auto !important;\n  }\n  .p-md-0 {\n    padding: 0 !important;\n  }\n  .p-md-1 {\n    padding: 0.25rem !important;\n  }\n  .p-md-2 {\n    padding: 0.5rem !important;\n  }\n  .p-md-3 {\n    padding: 1rem !important;\n  }\n  .p-md-4 {\n    padding: 1.5rem !important;\n  }\n  .p-md-5 {\n    padding: 3rem !important;\n  }\n  .px-md-0 {\n    padding-right: 0 !important;\n    padding-left: 0 !important;\n  }\n  .px-md-1 {\n    padding-right: 0.25rem !important;\n    padding-left: 0.25rem !important;\n  }\n  .px-md-2 {\n    padding-right: 0.5rem !important;\n    padding-left: 0.5rem !important;\n  }\n  .px-md-3 {\n    padding-right: 1rem !important;\n    padding-left: 1rem !important;\n  }\n  .px-md-4 {\n    padding-right: 1.5rem !important;\n    padding-left: 1.5rem !important;\n  }\n  .px-md-5 {\n    padding-right: 3rem !important;\n    padding-left: 3rem !important;\n  }\n  .py-md-0 {\n    padding-top: 0 !important;\n    padding-bottom: 0 !important;\n  }\n  .py-md-1 {\n    padding-top: 0.25rem !important;\n    padding-bottom: 0.25rem !important;\n  }\n  .py-md-2 {\n    padding-top: 0.5rem !important;\n    padding-bottom: 0.5rem !important;\n  }\n  .py-md-3 {\n    padding-top: 1rem !important;\n    padding-bottom: 1rem !important;\n  }\n  .py-md-4 {\n    padding-top: 1.5rem !important;\n    padding-bottom: 1.5rem !important;\n  }\n  .py-md-5 {\n    padding-top: 3rem !important;\n    padding-bottom: 3rem !important;\n  }\n  .pt-md-0 {\n    padding-top: 0 !important;\n  }\n  .pt-md-1 {\n    padding-top: 0.25rem !important;\n  }\n  .pt-md-2 {\n    padding-top: 0.5rem !important;\n  }\n  .pt-md-3 {\n    padding-top: 1rem !important;\n  }\n  .pt-md-4 {\n    padding-top: 1.5rem !important;\n  }\n  .pt-md-5 {\n    padding-top: 3rem !important;\n  }\n  .pe-md-0 {\n    padding-right: 0 !important;\n  }\n  .pe-md-1 {\n    padding-right: 0.25rem !important;\n  }\n  .pe-md-2 {\n    padding-right: 0.5rem !important;\n  }\n  .pe-md-3 {\n    padding-right: 1rem !important;\n  }\n  .pe-md-4 {\n    padding-right: 1.5rem !important;\n  }\n  .pe-md-5 {\n    padding-right: 3rem !important;\n  }\n  .pb-md-0 {\n    padding-bottom: 0 !important;\n  }\n  .pb-md-1 {\n    padding-bottom: 0.25rem !important;\n  }\n  .pb-md-2 {\n    padding-bottom: 0.5rem !important;\n  }\n  .pb-md-3 {\n    padding-bottom: 1rem !important;\n  }\n  .pb-md-4 {\n    padding-bottom: 1.5rem !important;\n  }\n  .pb-md-5 {\n    padding-bottom: 3rem !important;\n  }\n  .ps-md-0 {\n    padding-left: 0 !important;\n  }\n  .ps-md-1 {\n    padding-left: 0.25rem !important;\n  }\n  .ps-md-2 {\n    padding-left: 0.5rem !important;\n  }\n  .ps-md-3 {\n    padding-left: 1rem !important;\n  }\n  .ps-md-4 {\n    padding-left: 1.5rem !important;\n  }\n  .ps-md-5 {\n    padding-left: 3rem !important;\n  }\n  .text-md-start {\n    text-align: left !important;\n  }\n  .text-md-end {\n    text-align: right !important;\n  }\n  .text-md-center {\n    text-align: center !important;\n  }\n}\n\n@media (min-width: 992px) {\n  .float-lg-start {\n    float: left !important;\n  }\n  .float-lg-end {\n    float: right !important;\n  }\n  .float-lg-none {\n    float: none !important;\n  }\n  .d-lg-inline {\n    display: inline !important;\n  }\n  .d-lg-inline-block {\n    display: inline-block !important;\n  }\n  .d-lg-block {\n    display: block !important;\n  }\n  .d-lg-grid {\n    display: grid !important;\n  }\n  .d-lg-table {\n    display: table !important;\n  }\n  .d-lg-table-row {\n    display: table-row !important;\n  }\n  .d-lg-table-cell {\n    display: table-cell !important;\n  }\n  .d-lg-flex {\n    display: -ms-flexbox !important;\n    display: flex !important;\n  }\n  .d-lg-inline-flex {\n    display: -ms-inline-flexbox !important;\n    display: inline-flex !important;\n  }\n  .d-lg-none {\n    display: none !important;\n  }\n  .flex-lg-fill {\n    -ms-flex: 1 1 auto !important;\n    flex: 1 1 auto !important;\n  }\n  .flex-lg-row {\n    -ms-flex-direction: row !important;\n    flex-direction: row !important;\n  }\n  .flex-lg-column {\n    -ms-flex-direction: column !important;\n    flex-direction: column !important;\n  }\n  .flex-lg-row-reverse {\n    -ms-flex-direction: row-reverse !important;\n    flex-direction: row-reverse !important;\n  }\n  .flex-lg-column-reverse {\n    -ms-flex-direction: column-reverse !important;\n    flex-direction: column-reverse !important;\n  }\n  .flex-lg-grow-0 {\n    -ms-flex-positive: 0 !important;\n    flex-grow: 0 !important;\n  }\n  .flex-lg-grow-1 {\n    -ms-flex-positive: 1 !important;\n    flex-grow: 1 !important;\n  }\n  .flex-lg-shrink-0 {\n    -ms-flex-negative: 0 !important;\n    flex-shrink: 0 !important;\n  }\n  .flex-lg-shrink-1 {\n    -ms-flex-negative: 1 !important;\n    flex-shrink: 1 !important;\n  }\n  .flex-lg-wrap {\n    -ms-flex-wrap: wrap !important;\n    flex-wrap: wrap !important;\n  }\n  .flex-lg-nowrap {\n    -ms-flex-wrap: nowrap !important;\n    flex-wrap: nowrap !important;\n  }\n  .flex-lg-wrap-reverse {\n    -ms-flex-wrap: wrap-reverse !important;\n    flex-wrap: wrap-reverse !important;\n  }\n  .gap-lg-0 {\n    gap: 0 !important;\n  }\n  .gap-lg-1 {\n    gap: 0.25rem !important;\n  }\n  .gap-lg-2 {\n    gap: 0.5rem !important;\n  }\n  .gap-lg-3 {\n    gap: 1rem !important;\n  }\n  .gap-lg-4 {\n    gap: 1.5rem !important;\n  }\n  .gap-lg-5 {\n    gap: 3rem !important;\n  }\n  .justify-content-lg-start {\n    -ms-flex-pack: start !important;\n    justify-content: flex-start !important;\n  }\n  .justify-content-lg-end {\n    -ms-flex-pack: end !important;\n    justify-content: flex-end !important;\n  }\n  .justify-content-lg-center {\n    -ms-flex-pack: center !important;\n    justify-content: center !important;\n  }\n  .justify-content-lg-between {\n    -ms-flex-pack: justify !important;\n    justify-content: space-between !important;\n  }\n  .justify-content-lg-around {\n    -ms-flex-pack: distribute !important;\n    justify-content: space-around !important;\n  }\n  .justify-content-lg-evenly {\n    -ms-flex-pack: space-evenly !important;\n    justify-content: space-evenly !important;\n  }\n  .align-items-lg-start {\n    -ms-flex-align: start !important;\n    align-items: flex-start !important;\n  }\n  .align-items-lg-end {\n    -ms-flex-align: end !important;\n    align-items: flex-end !important;\n  }\n  .align-items-lg-center {\n    -ms-flex-align: center !important;\n    align-items: center !important;\n  }\n  .align-items-lg-baseline {\n    -ms-flex-align: baseline !important;\n    align-items: baseline !important;\n  }\n  .align-items-lg-stretch {\n    -ms-flex-align: stretch !important;\n    align-items: stretch !important;\n  }\n  .align-content-lg-start {\n    -ms-flex-line-pack: start !important;\n    align-content: flex-start !important;\n  }\n  .align-content-lg-end {\n    -ms-flex-line-pack: end !important;\n    align-content: flex-end !important;\n  }\n  .align-content-lg-center {\n    -ms-flex-line-pack: center !important;\n    align-content: center !important;\n  }\n  .align-content-lg-between {\n    -ms-flex-line-pack: justify !important;\n    align-content: space-between !important;\n  }\n  .align-content-lg-around {\n    -ms-flex-line-pack: distribute !important;\n    align-content: space-around !important;\n  }\n  .align-content-lg-stretch {\n    -ms-flex-line-pack: stretch !important;\n    align-content: stretch !important;\n  }\n  .align-self-lg-auto {\n    -ms-flex-item-align: auto !important;\n    align-self: auto !important;\n  }\n  .align-self-lg-start {\n    -ms-flex-item-align: start !important;\n    align-self: flex-start !important;\n  }\n  .align-self-lg-end {\n    -ms-flex-item-align: end !important;\n    align-self: flex-end !important;\n  }\n  .align-self-lg-center {\n    -ms-flex-item-align: center !important;\n    align-self: center !important;\n  }\n  .align-self-lg-baseline {\n    -ms-flex-item-align: baseline !important;\n    align-self: baseline !important;\n  }\n  .align-self-lg-stretch {\n    -ms-flex-item-align: stretch !important;\n    align-self: stretch !important;\n  }\n  .order-lg-first {\n    -ms-flex-order: -1 !important;\n    order: -1 !important;\n  }\n  .order-lg-0 {\n    -ms-flex-order: 0 !important;\n    order: 0 !important;\n  }\n  .order-lg-1 {\n    -ms-flex-order: 1 !important;\n    order: 1 !important;\n  }\n  .order-lg-2 {\n    -ms-flex-order: 2 !important;\n    order: 2 !important;\n  }\n  .order-lg-3 {\n    -ms-flex-order: 3 !important;\n    order: 3 !important;\n  }\n  .order-lg-4 {\n    -ms-flex-order: 4 !important;\n    order: 4 !important;\n  }\n  .order-lg-5 {\n    -ms-flex-order: 5 !important;\n    order: 5 !important;\n  }\n  .order-lg-last {\n    -ms-flex-order: 6 !important;\n    order: 6 !important;\n  }\n  .m-lg-0 {\n    margin: 0 !important;\n  }\n  .m-lg-1 {\n    margin: 0.25rem !important;\n  }\n  .m-lg-2 {\n    margin: 0.5rem !important;\n  }\n  .m-lg-3 {\n    margin: 1rem !important;\n  }\n  .m-lg-4 {\n    margin: 1.5rem !important;\n  }\n  .m-lg-5 {\n    margin: 3rem !important;\n  }\n  .m-lg-auto {\n    margin: auto !important;\n  }\n  .mx-lg-0 {\n    margin-right: 0 !important;\n    margin-left: 0 !important;\n  }\n  .mx-lg-1 {\n    margin-right: 0.25rem !important;\n    margin-left: 0.25rem !important;\n  }\n  .mx-lg-2 {\n    margin-right: 0.5rem !important;\n    margin-left: 0.5rem !important;\n  }\n  .mx-lg-3 {\n    margin-right: 1rem !important;\n    margin-left: 1rem !important;\n  }\n  .mx-lg-4 {\n    margin-right: 1.5rem !important;\n    margin-left: 1.5rem !important;\n  }\n  .mx-lg-5 {\n    margin-right: 3rem !important;\n    margin-left: 3rem !important;\n  }\n  .mx-lg-auto {\n    margin-right: auto !important;\n    margin-left: auto !important;\n  }\n  .my-lg-0 {\n    margin-top: 0 !important;\n    margin-bottom: 0 !important;\n  }\n  .my-lg-1 {\n    margin-top: 0.25rem !important;\n    margin-bottom: 0.25rem !important;\n  }\n  .my-lg-2 {\n    margin-top: 0.5rem !important;\n    margin-bottom: 0.5rem !important;\n  }\n  .my-lg-3 {\n    margin-top: 1rem !important;\n    margin-bottom: 1rem !important;\n  }\n  .my-lg-4 {\n    margin-top: 1.5rem !important;\n    margin-bottom: 1.5rem !important;\n  }\n  .my-lg-5 {\n    margin-top: 3rem !important;\n    margin-bottom: 3rem !important;\n  }\n  .my-lg-auto {\n    margin-top: auto !important;\n    margin-bottom: auto !important;\n  }\n  .mt-lg-0 {\n    margin-top: 0 !important;\n  }\n  .mt-lg-1 {\n    margin-top: 0.25rem !important;\n  }\n  .mt-lg-2 {\n    margin-top: 0.5rem !important;\n  }\n  .mt-lg-3 {\n    margin-top: 1rem !important;\n  }\n  .mt-lg-4 {\n    margin-top: 1.5rem !important;\n  }\n  .mt-lg-5 {\n    margin-top: 3rem !important;\n  }\n  .mt-lg-auto {\n    margin-top: auto !important;\n  }\n  .me-lg-0 {\n    margin-right: 0 !important;\n  }\n  .me-lg-1 {\n    margin-right: 0.25rem !important;\n  }\n  .me-lg-2 {\n    margin-right: 0.5rem !important;\n  }\n  .me-lg-3 {\n    margin-right: 1rem !important;\n  }\n  .me-lg-4 {\n    margin-right: 1.5rem !important;\n  }\n  .me-lg-5 {\n    margin-right: 3rem !important;\n  }\n  .me-lg-auto {\n    margin-right: auto !important;\n  }\n  .mb-lg-0 {\n    margin-bottom: 0 !important;\n  }\n  .mb-lg-1 {\n    margin-bottom: 0.25rem !important;\n  }\n  .mb-lg-2 {\n    margin-bottom: 0.5rem !important;\n  }\n  .mb-lg-3 {\n    margin-bottom: 1rem !important;\n  }\n  .mb-lg-4 {\n    margin-bottom: 1.5rem !important;\n  }\n  .mb-lg-5 {\n    margin-bottom: 3rem !important;\n  }\n  .mb-lg-auto {\n    margin-bottom: auto !important;\n  }\n  .ms-lg-0 {\n    margin-left: 0 !important;\n  }\n  .ms-lg-1 {\n    margin-left: 0.25rem !important;\n  }\n  .ms-lg-2 {\n    margin-left: 0.5rem !important;\n  }\n  .ms-lg-3 {\n    margin-left: 1rem !important;\n  }\n  .ms-lg-4 {\n    margin-left: 1.5rem !important;\n  }\n  .ms-lg-5 {\n    margin-left: 3rem !important;\n  }\n  .ms-lg-auto {\n    margin-left: auto !important;\n  }\n  .p-lg-0 {\n    padding: 0 !important;\n  }\n  .p-lg-1 {\n    padding: 0.25rem !important;\n  }\n  .p-lg-2 {\n    padding: 0.5rem !important;\n  }\n  .p-lg-3 {\n    padding: 1rem !important;\n  }\n  .p-lg-4 {\n    padding: 1.5rem !important;\n  }\n  .p-lg-5 {\n    padding: 3rem !important;\n  }\n  .px-lg-0 {\n    padding-right: 0 !important;\n    padding-left: 0 !important;\n  }\n  .px-lg-1 {\n    padding-right: 0.25rem !important;\n    padding-left: 0.25rem !important;\n  }\n  .px-lg-2 {\n    padding-right: 0.5rem !important;\n    padding-left: 0.5rem !important;\n  }\n  .px-lg-3 {\n    padding-right: 1rem !important;\n    padding-left: 1rem !important;\n  }\n  .px-lg-4 {\n    padding-right: 1.5rem !important;\n    padding-left: 1.5rem !important;\n  }\n  .px-lg-5 {\n    padding-right: 3rem !important;\n    padding-left: 3rem !important;\n  }\n  .py-lg-0 {\n    padding-top: 0 !important;\n    padding-bottom: 0 !important;\n  }\n  .py-lg-1 {\n    padding-top: 0.25rem !important;\n    padding-bottom: 0.25rem !important;\n  }\n  .py-lg-2 {\n    padding-top: 0.5rem !important;\n    padding-bottom: 0.5rem !important;\n  }\n  .py-lg-3 {\n    padding-top: 1rem !important;\n    padding-bottom: 1rem !important;\n  }\n  .py-lg-4 {\n    padding-top: 1.5rem !important;\n    padding-bottom: 1.5rem !important;\n  }\n  .py-lg-5 {\n    padding-top: 3rem !important;\n    padding-bottom: 3rem !important;\n  }\n  .pt-lg-0 {\n    padding-top: 0 !important;\n  }\n  .pt-lg-1 {\n    padding-top: 0.25rem !important;\n  }\n  .pt-lg-2 {\n    padding-top: 0.5rem !important;\n  }\n  .pt-lg-3 {\n    padding-top: 1rem !important;\n  }\n  .pt-lg-4 {\n    padding-top: 1.5rem !important;\n  }\n  .pt-lg-5 {\n    padding-top: 3rem !important;\n  }\n  .pe-lg-0 {\n    padding-right: 0 !important;\n  }\n  .pe-lg-1 {\n    padding-right: 0.25rem !important;\n  }\n  .pe-lg-2 {\n    padding-right: 0.5rem !important;\n  }\n  .pe-lg-3 {\n    padding-right: 1rem !important;\n  }\n  .pe-lg-4 {\n    padding-right: 1.5rem !important;\n  }\n  .pe-lg-5 {\n    padding-right: 3rem !important;\n  }\n  .pb-lg-0 {\n    padding-bottom: 0 !important;\n  }\n  .pb-lg-1 {\n    padding-bottom: 0.25rem !important;\n  }\n  .pb-lg-2 {\n    padding-bottom: 0.5rem !important;\n  }\n  .pb-lg-3 {\n    padding-bottom: 1rem !important;\n  }\n  .pb-lg-4 {\n    padding-bottom: 1.5rem !important;\n  }\n  .pb-lg-5 {\n    padding-bottom: 3rem !important;\n  }\n  .ps-lg-0 {\n    padding-left: 0 !important;\n  }\n  .ps-lg-1 {\n    padding-left: 0.25rem !important;\n  }\n  .ps-lg-2 {\n    padding-left: 0.5rem !important;\n  }\n  .ps-lg-3 {\n    padding-left: 1rem !important;\n  }\n  .ps-lg-4 {\n    padding-left: 1.5rem !important;\n  }\n  .ps-lg-5 {\n    padding-left: 3rem !important;\n  }\n  .text-lg-start {\n    text-align: left !important;\n  }\n  .text-lg-end {\n    text-align: right !important;\n  }\n  .text-lg-center {\n    text-align: center !important;\n  }\n}\n\n@media (min-width: 1200px) {\n  .float-xl-start {\n    float: left !important;\n  }\n  .float-xl-end {\n    float: right !important;\n  }\n  .float-xl-none {\n    float: none !important;\n  }\n  .d-xl-inline {\n    display: inline !important;\n  }\n  .d-xl-inline-block {\n    display: inline-block !important;\n  }\n  .d-xl-block {\n    display: block !important;\n  }\n  .d-xl-grid {\n    display: grid !important;\n  }\n  .d-xl-table {\n    display: table !important;\n  }\n  .d-xl-table-row {\n    display: table-row !important;\n  }\n  .d-xl-table-cell {\n    display: table-cell !important;\n  }\n  .d-xl-flex {\n    display: -ms-flexbox !important;\n    display: flex !important;\n  }\n  .d-xl-inline-flex {\n    display: -ms-inline-flexbox !important;\n    display: inline-flex !important;\n  }\n  .d-xl-none {\n    display: none !important;\n  }\n  .flex-xl-fill {\n    -ms-flex: 1 1 auto !important;\n    flex: 1 1 auto !important;\n  }\n  .flex-xl-row {\n    -ms-flex-direction: row !important;\n    flex-direction: row !important;\n  }\n  .flex-xl-column {\n    -ms-flex-direction: column !important;\n    flex-direction: column !important;\n  }\n  .flex-xl-row-reverse {\n    -ms-flex-direction: row-reverse !important;\n    flex-direction: row-reverse !important;\n  }\n  .flex-xl-column-reverse {\n    -ms-flex-direction: column-reverse !important;\n    flex-direction: column-reverse !important;\n  }\n  .flex-xl-grow-0 {\n    -ms-flex-positive: 0 !important;\n    flex-grow: 0 !important;\n  }\n  .flex-xl-grow-1 {\n    -ms-flex-positive: 1 !important;\n    flex-grow: 1 !important;\n  }\n  .flex-xl-shrink-0 {\n    -ms-flex-negative: 0 !important;\n    flex-shrink: 0 !important;\n  }\n  .flex-xl-shrink-1 {\n    -ms-flex-negative: 1 !important;\n    flex-shrink: 1 !important;\n  }\n  .flex-xl-wrap {\n    -ms-flex-wrap: wrap !important;\n    flex-wrap: wrap !important;\n  }\n  .flex-xl-nowrap {\n    -ms-flex-wrap: nowrap !important;\n    flex-wrap: nowrap !important;\n  }\n  .flex-xl-wrap-reverse {\n    -ms-flex-wrap: wrap-reverse !important;\n    flex-wrap: wrap-reverse !important;\n  }\n  .gap-xl-0 {\n    gap: 0 !important;\n  }\n  .gap-xl-1 {\n    gap: 0.25rem !important;\n  }\n  .gap-xl-2 {\n    gap: 0.5rem !important;\n  }\n  .gap-xl-3 {\n    gap: 1rem !important;\n  }\n  .gap-xl-4 {\n    gap: 1.5rem !important;\n  }\n  .gap-xl-5 {\n    gap: 3rem !important;\n  }\n  .justify-content-xl-start {\n    -ms-flex-pack: start !important;\n    justify-content: flex-start !important;\n  }\n  .justify-content-xl-end {\n    -ms-flex-pack: end !important;\n    justify-content: flex-end !important;\n  }\n  .justify-content-xl-center {\n    -ms-flex-pack: center !important;\n    justify-content: center !important;\n  }\n  .justify-content-xl-between {\n    -ms-flex-pack: justify !important;\n    justify-content: space-between !important;\n  }\n  .justify-content-xl-around {\n    -ms-flex-pack: distribute !important;\n    justify-content: space-around !important;\n  }\n  .justify-content-xl-evenly {\n    -ms-flex-pack: space-evenly !important;\n    justify-content: space-evenly !important;\n  }\n  .align-items-xl-start {\n    -ms-flex-align: start !important;\n    align-items: flex-start !important;\n  }\n  .align-items-xl-end {\n    -ms-flex-align: end !important;\n    align-items: flex-end !important;\n  }\n  .align-items-xl-center {\n    -ms-flex-align: center !important;\n    align-items: center !important;\n  }\n  .align-items-xl-baseline {\n    -ms-flex-align: baseline !important;\n    align-items: baseline !important;\n  }\n  .align-items-xl-stretch {\n    -ms-flex-align: stretch !important;\n    align-items: stretch !important;\n  }\n  .align-content-xl-start {\n    -ms-flex-line-pack: start !important;\n    align-content: flex-start !important;\n  }\n  .align-content-xl-end {\n    -ms-flex-line-pack: end !important;\n    align-content: flex-end !important;\n  }\n  .align-content-xl-center {\n    -ms-flex-line-pack: center !important;\n    align-content: center !important;\n  }\n  .align-content-xl-between {\n    -ms-flex-line-pack: justify !important;\n    align-content: space-between !important;\n  }\n  .align-content-xl-around {\n    -ms-flex-line-pack: distribute !important;\n    align-content: space-around !important;\n  }\n  .align-content-xl-stretch {\n    -ms-flex-line-pack: stretch !important;\n    align-content: stretch !important;\n  }\n  .align-self-xl-auto {\n    -ms-flex-item-align: auto !important;\n    align-self: auto !important;\n  }\n  .align-self-xl-start {\n    -ms-flex-item-align: start !important;\n    align-self: flex-start !important;\n  }\n  .align-self-xl-end {\n    -ms-flex-item-align: end !important;\n    align-self: flex-end !important;\n  }\n  .align-self-xl-center {\n    -ms-flex-item-align: center !important;\n    align-self: center !important;\n  }\n  .align-self-xl-baseline {\n    -ms-flex-item-align: baseline !important;\n    align-self: baseline !important;\n  }\n  .align-self-xl-stretch {\n    -ms-flex-item-align: stretch !important;\n    align-self: stretch !important;\n  }\n  .order-xl-first {\n    -ms-flex-order: -1 !important;\n    order: -1 !important;\n  }\n  .order-xl-0 {\n    -ms-flex-order: 0 !important;\n    order: 0 !important;\n  }\n  .order-xl-1 {\n    -ms-flex-order: 1 !important;\n    order: 1 !important;\n  }\n  .order-xl-2 {\n    -ms-flex-order: 2 !important;\n    order: 2 !important;\n  }\n  .order-xl-3 {\n    -ms-flex-order: 3 !important;\n    order: 3 !important;\n  }\n  .order-xl-4 {\n    -ms-flex-order: 4 !important;\n    order: 4 !important;\n  }\n  .order-xl-5 {\n    -ms-flex-order: 5 !important;\n    order: 5 !important;\n  }\n  .order-xl-last {\n    -ms-flex-order: 6 !important;\n    order: 6 !important;\n  }\n  .m-xl-0 {\n    margin: 0 !important;\n  }\n  .m-xl-1 {\n    margin: 0.25rem !important;\n  }\n  .m-xl-2 {\n    margin: 0.5rem !important;\n  }\n  .m-xl-3 {\n    margin: 1rem !important;\n  }\n  .m-xl-4 {\n    margin: 1.5rem !important;\n  }\n  .m-xl-5 {\n    margin: 3rem !important;\n  }\n  .m-xl-auto {\n    margin: auto !important;\n  }\n  .mx-xl-0 {\n    margin-right: 0 !important;\n    margin-left: 0 !important;\n  }\n  .mx-xl-1 {\n    margin-right: 0.25rem !important;\n    margin-left: 0.25rem !important;\n  }\n  .mx-xl-2 {\n    margin-right: 0.5rem !important;\n    margin-left: 0.5rem !important;\n  }\n  .mx-xl-3 {\n    margin-right: 1rem !important;\n    margin-left: 1rem !important;\n  }\n  .mx-xl-4 {\n    margin-right: 1.5rem !important;\n    margin-left: 1.5rem !important;\n  }\n  .mx-xl-5 {\n    margin-right: 3rem !important;\n    margin-left: 3rem !important;\n  }\n  .mx-xl-auto {\n    margin-right: auto !important;\n    margin-left: auto !important;\n  }\n  .my-xl-0 {\n    margin-top: 0 !important;\n    margin-bottom: 0 !important;\n  }\n  .my-xl-1 {\n    margin-top: 0.25rem !important;\n    margin-bottom: 0.25rem !important;\n  }\n  .my-xl-2 {\n    margin-top: 0.5rem !important;\n    margin-bottom: 0.5rem !important;\n  }\n  .my-xl-3 {\n    margin-top: 1rem !important;\n    margin-bottom: 1rem !important;\n  }\n  .my-xl-4 {\n    margin-top: 1.5rem !important;\n    margin-bottom: 1.5rem !important;\n  }\n  .my-xl-5 {\n    margin-top: 3rem !important;\n    margin-bottom: 3rem !important;\n  }\n  .my-xl-auto {\n    margin-top: auto !important;\n    margin-bottom: auto !important;\n  }\n  .mt-xl-0 {\n    margin-top: 0 !important;\n  }\n  .mt-xl-1 {\n    margin-top: 0.25rem !important;\n  }\n  .mt-xl-2 {\n    margin-top: 0.5rem !important;\n  }\n  .mt-xl-3 {\n    margin-top: 1rem !important;\n  }\n  .mt-xl-4 {\n    margin-top: 1.5rem !important;\n  }\n  .mt-xl-5 {\n    margin-top: 3rem !important;\n  }\n  .mt-xl-auto {\n    margin-top: auto !important;\n  }\n  .me-xl-0 {\n    margin-right: 0 !important;\n  }\n  .me-xl-1 {\n    margin-right: 0.25rem !important;\n  }\n  .me-xl-2 {\n    margin-right: 0.5rem !important;\n  }\n  .me-xl-3 {\n    margin-right: 1rem !important;\n  }\n  .me-xl-4 {\n    margin-right: 1.5rem !important;\n  }\n  .me-xl-5 {\n    margin-right: 3rem !important;\n  }\n  .me-xl-auto {\n    margin-right: auto !important;\n  }\n  .mb-xl-0 {\n    margin-bottom: 0 !important;\n  }\n  .mb-xl-1 {\n    margin-bottom: 0.25rem !important;\n  }\n  .mb-xl-2 {\n    margin-bottom: 0.5rem !important;\n  }\n  .mb-xl-3 {\n    margin-bottom: 1rem !important;\n  }\n  .mb-xl-4 {\n    margin-bottom: 1.5rem !important;\n  }\n  .mb-xl-5 {\n    margin-bottom: 3rem !important;\n  }\n  .mb-xl-auto {\n    margin-bottom: auto !important;\n  }\n  .ms-xl-0 {\n    margin-left: 0 !important;\n  }\n  .ms-xl-1 {\n    margin-left: 0.25rem !important;\n  }\n  .ms-xl-2 {\n    margin-left: 0.5rem !important;\n  }\n  .ms-xl-3 {\n    margin-left: 1rem !important;\n  }\n  .ms-xl-4 {\n    margin-left: 1.5rem !important;\n  }\n  .ms-xl-5 {\n    margin-left: 3rem !important;\n  }\n  .ms-xl-auto {\n    margin-left: auto !important;\n  }\n  .p-xl-0 {\n    padding: 0 !important;\n  }\n  .p-xl-1 {\n    padding: 0.25rem !important;\n  }\n  .p-xl-2 {\n    padding: 0.5rem !important;\n  }\n  .p-xl-3 {\n    padding: 1rem !important;\n  }\n  .p-xl-4 {\n    padding: 1.5rem !important;\n  }\n  .p-xl-5 {\n    padding: 3rem !important;\n  }\n  .px-xl-0 {\n    padding-right: 0 !important;\n    padding-left: 0 !important;\n  }\n  .px-xl-1 {\n    padding-right: 0.25rem !important;\n    padding-left: 0.25rem !important;\n  }\n  .px-xl-2 {\n    padding-right: 0.5rem !important;\n    padding-left: 0.5rem !important;\n  }\n  .px-xl-3 {\n    padding-right: 1rem !important;\n    padding-left: 1rem !important;\n  }\n  .px-xl-4 {\n    padding-right: 1.5rem !important;\n    padding-left: 1.5rem !important;\n  }\n  .px-xl-5 {\n    padding-right: 3rem !important;\n    padding-left: 3rem !important;\n  }\n  .py-xl-0 {\n    padding-top: 0 !important;\n    padding-bottom: 0 !important;\n  }\n  .py-xl-1 {\n    padding-top: 0.25rem !important;\n    padding-bottom: 0.25rem !important;\n  }\n  .py-xl-2 {\n    padding-top: 0.5rem !important;\n    padding-bottom: 0.5rem !important;\n  }\n  .py-xl-3 {\n    padding-top: 1rem !important;\n    padding-bottom: 1rem !important;\n  }\n  .py-xl-4 {\n    padding-top: 1.5rem !important;\n    padding-bottom: 1.5rem !important;\n  }\n  .py-xl-5 {\n    padding-top: 3rem !important;\n    padding-bottom: 3rem !important;\n  }\n  .pt-xl-0 {\n    padding-top: 0 !important;\n  }\n  .pt-xl-1 {\n    padding-top: 0.25rem !important;\n  }\n  .pt-xl-2 {\n    padding-top: 0.5rem !important;\n  }\n  .pt-xl-3 {\n    padding-top: 1rem !important;\n  }\n  .pt-xl-4 {\n    padding-top: 1.5rem !important;\n  }\n  .pt-xl-5 {\n    padding-top: 3rem !important;\n  }\n  .pe-xl-0 {\n    padding-right: 0 !important;\n  }\n  .pe-xl-1 {\n    padding-right: 0.25rem !important;\n  }\n  .pe-xl-2 {\n    padding-right: 0.5rem !important;\n  }\n  .pe-xl-3 {\n    padding-right: 1rem !important;\n  }\n  .pe-xl-4 {\n    padding-right: 1.5rem !important;\n  }\n  .pe-xl-5 {\n    padding-right: 3rem !important;\n  }\n  .pb-xl-0 {\n    padding-bottom: 0 !important;\n  }\n  .pb-xl-1 {\n    padding-bottom: 0.25rem !important;\n  }\n  .pb-xl-2 {\n    padding-bottom: 0.5rem !important;\n  }\n  .pb-xl-3 {\n    padding-bottom: 1rem !important;\n  }\n  .pb-xl-4 {\n    padding-bottom: 1.5rem !important;\n  }\n  .pb-xl-5 {\n    padding-bottom: 3rem !important;\n  }\n  .ps-xl-0 {\n    padding-left: 0 !important;\n  }\n  .ps-xl-1 {\n    padding-left: 0.25rem !important;\n  }\n  .ps-xl-2 {\n    padding-left: 0.5rem !important;\n  }\n  .ps-xl-3 {\n    padding-left: 1rem !important;\n  }\n  .ps-xl-4 {\n    padding-left: 1.5rem !important;\n  }\n  .ps-xl-5 {\n    padding-left: 3rem !important;\n  }\n  .text-xl-start {\n    text-align: left !important;\n  }\n  .text-xl-end {\n    text-align: right !important;\n  }\n  .text-xl-center {\n    text-align: center !important;\n  }\n}\n\n@media (min-width: 1400px) {\n  .float-xxl-start {\n    float: left !important;\n  }\n  .float-xxl-end {\n    float: right !important;\n  }\n  .float-xxl-none {\n    float: none !important;\n  }\n  .d-xxl-inline {\n    display: inline !important;\n  }\n  .d-xxl-inline-block {\n    display: inline-block !important;\n  }\n  .d-xxl-block {\n    display: block !important;\n  }\n  .d-xxl-grid {\n    display: grid !important;\n  }\n  .d-xxl-table {\n    display: table !important;\n  }\n  .d-xxl-table-row {\n    display: table-row !important;\n  }\n  .d-xxl-table-cell {\n    display: table-cell !important;\n  }\n  .d-xxl-flex {\n    display: -ms-flexbox !important;\n    display: flex !important;\n  }\n  .d-xxl-inline-flex {\n    display: -ms-inline-flexbox !important;\n    display: inline-flex !important;\n  }\n  .d-xxl-none {\n    display: none !important;\n  }\n  .flex-xxl-fill {\n    -ms-flex: 1 1 auto !important;\n    flex: 1 1 auto !important;\n  }\n  .flex-xxl-row {\n    -ms-flex-direction: row !important;\n    flex-direction: row !important;\n  }\n  .flex-xxl-column {\n    -ms-flex-direction: column !important;\n    flex-direction: column !important;\n  }\n  .flex-xxl-row-reverse {\n    -ms-flex-direction: row-reverse !important;\n    flex-direction: row-reverse !important;\n  }\n  .flex-xxl-column-reverse {\n    -ms-flex-direction: column-reverse !important;\n    flex-direction: column-reverse !important;\n  }\n  .flex-xxl-grow-0 {\n    -ms-flex-positive: 0 !important;\n    flex-grow: 0 !important;\n  }\n  .flex-xxl-grow-1 {\n    -ms-flex-positive: 1 !important;\n    flex-grow: 1 !important;\n  }\n  .flex-xxl-shrink-0 {\n    -ms-flex-negative: 0 !important;\n    flex-shrink: 0 !important;\n  }\n  .flex-xxl-shrink-1 {\n    -ms-flex-negative: 1 !important;\n    flex-shrink: 1 !important;\n  }\n  .flex-xxl-wrap {\n    -ms-flex-wrap: wrap !important;\n    flex-wrap: wrap !important;\n  }\n  .flex-xxl-nowrap {\n    -ms-flex-wrap: nowrap !important;\n    flex-wrap: nowrap !important;\n  }\n  .flex-xxl-wrap-reverse {\n    -ms-flex-wrap: wrap-reverse !important;\n    flex-wrap: wrap-reverse !important;\n  }\n  .gap-xxl-0 {\n    gap: 0 !important;\n  }\n  .gap-xxl-1 {\n    gap: 0.25rem !important;\n  }\n  .gap-xxl-2 {\n    gap: 0.5rem !important;\n  }\n  .gap-xxl-3 {\n    gap: 1rem !important;\n  }\n  .gap-xxl-4 {\n    gap: 1.5rem !important;\n  }\n  .gap-xxl-5 {\n    gap: 3rem !important;\n  }\n  .justify-content-xxl-start {\n    -ms-flex-pack: start !important;\n    justify-content: flex-start !important;\n  }\n  .justify-content-xxl-end {\n    -ms-flex-pack: end !important;\n    justify-content: flex-end !important;\n  }\n  .justify-content-xxl-center {\n    -ms-flex-pack: center !important;\n    justify-content: center !important;\n  }\n  .justify-content-xxl-between {\n    -ms-flex-pack: justify !important;\n    justify-content: space-between !important;\n  }\n  .justify-content-xxl-around {\n    -ms-flex-pack: distribute !important;\n    justify-content: space-around !important;\n  }\n  .justify-content-xxl-evenly {\n    -ms-flex-pack: space-evenly !important;\n    justify-content: space-evenly !important;\n  }\n  .align-items-xxl-start {\n    -ms-flex-align: start !important;\n    align-items: flex-start !important;\n  }\n  .align-items-xxl-end {\n    -ms-flex-align: end !important;\n    align-items: flex-end !important;\n  }\n  .align-items-xxl-center {\n    -ms-flex-align: center !important;\n    align-items: center !important;\n  }\n  .align-items-xxl-baseline {\n    -ms-flex-align: baseline !important;\n    align-items: baseline !important;\n  }\n  .align-items-xxl-stretch {\n    -ms-flex-align: stretch !important;\n    align-items: stretch !important;\n  }\n  .align-content-xxl-start {\n    -ms-flex-line-pack: start !important;\n    align-content: flex-start !important;\n  }\n  .align-content-xxl-end {\n    -ms-flex-line-pack: end !important;\n    align-content: flex-end !important;\n  }\n  .align-content-xxl-center {\n    -ms-flex-line-pack: center !important;\n    align-content: center !important;\n  }\n  .align-content-xxl-between {\n    -ms-flex-line-pack: justify !important;\n    align-content: space-between !important;\n  }\n  .align-content-xxl-around {\n    -ms-flex-line-pack: distribute !important;\n    align-content: space-around !important;\n  }\n  .align-content-xxl-stretch {\n    -ms-flex-line-pack: stretch !important;\n    align-content: stretch !important;\n  }\n  .align-self-xxl-auto {\n    -ms-flex-item-align: auto !important;\n    align-self: auto !important;\n  }\n  .align-self-xxl-start {\n    -ms-flex-item-align: start !important;\n    align-self: flex-start !important;\n  }\n  .align-self-xxl-end {\n    -ms-flex-item-align: end !important;\n    align-self: flex-end !important;\n  }\n  .align-self-xxl-center {\n    -ms-flex-item-align: center !important;\n    align-self: center !important;\n  }\n  .align-self-xxl-baseline {\n    -ms-flex-item-align: baseline !important;\n    align-self: baseline !important;\n  }\n  .align-self-xxl-stretch {\n    -ms-flex-item-align: stretch !important;\n    align-self: stretch !important;\n  }\n  .order-xxl-first {\n    -ms-flex-order: -1 !important;\n    order: -1 !important;\n  }\n  .order-xxl-0 {\n    -ms-flex-order: 0 !important;\n    order: 0 !important;\n  }\n  .order-xxl-1 {\n    -ms-flex-order: 1 !important;\n    order: 1 !important;\n  }\n  .order-xxl-2 {\n    -ms-flex-order: 2 !important;\n    order: 2 !important;\n  }\n  .order-xxl-3 {\n    -ms-flex-order: 3 !important;\n    order: 3 !important;\n  }\n  .order-xxl-4 {\n    -ms-flex-order: 4 !important;\n    order: 4 !important;\n  }\n  .order-xxl-5 {\n    -ms-flex-order: 5 !important;\n    order: 5 !important;\n  }\n  .order-xxl-last {\n    -ms-flex-order: 6 !important;\n    order: 6 !important;\n  }\n  .m-xxl-0 {\n    margin: 0 !important;\n  }\n  .m-xxl-1 {\n    margin: 0.25rem !important;\n  }\n  .m-xxl-2 {\n    margin: 0.5rem !important;\n  }\n  .m-xxl-3 {\n    margin: 1rem !important;\n  }\n  .m-xxl-4 {\n    margin: 1.5rem !important;\n  }\n  .m-xxl-5 {\n    margin: 3rem !important;\n  }\n  .m-xxl-auto {\n    margin: auto !important;\n  }\n  .mx-xxl-0 {\n    margin-right: 0 !important;\n    margin-left: 0 !important;\n  }\n  .mx-xxl-1 {\n    margin-right: 0.25rem !important;\n    margin-left: 0.25rem !important;\n  }\n  .mx-xxl-2 {\n    margin-right: 0.5rem !important;\n    margin-left: 0.5rem !important;\n  }\n  .mx-xxl-3 {\n    margin-right: 1rem !important;\n    margin-left: 1rem !important;\n  }\n  .mx-xxl-4 {\n    margin-right: 1.5rem !important;\n    margin-left: 1.5rem !important;\n  }\n  .mx-xxl-5 {\n    margin-right: 3rem !important;\n    margin-left: 3rem !important;\n  }\n  .mx-xxl-auto {\n    margin-right: auto !important;\n    margin-left: auto !important;\n  }\n  .my-xxl-0 {\n    margin-top: 0 !important;\n    margin-bottom: 0 !important;\n  }\n  .my-xxl-1 {\n    margin-top: 0.25rem !important;\n    margin-bottom: 0.25rem !important;\n  }\n  .my-xxl-2 {\n    margin-top: 0.5rem !important;\n    margin-bottom: 0.5rem !important;\n  }\n  .my-xxl-3 {\n    margin-top: 1rem !important;\n    margin-bottom: 1rem !important;\n  }\n  .my-xxl-4 {\n    margin-top: 1.5rem !important;\n    margin-bottom: 1.5rem !important;\n  }\n  .my-xxl-5 {\n    margin-top: 3rem !important;\n    margin-bottom: 3rem !important;\n  }\n  .my-xxl-auto {\n    margin-top: auto !important;\n    margin-bottom: auto !important;\n  }\n  .mt-xxl-0 {\n    margin-top: 0 !important;\n  }\n  .mt-xxl-1 {\n    margin-top: 0.25rem !important;\n  }\n  .mt-xxl-2 {\n    margin-top: 0.5rem !important;\n  }\n  .mt-xxl-3 {\n    margin-top: 1rem !important;\n  }\n  .mt-xxl-4 {\n    margin-top: 1.5rem !important;\n  }\n  .mt-xxl-5 {\n    margin-top: 3rem !important;\n  }\n  .mt-xxl-auto {\n    margin-top: auto !important;\n  }\n  .me-xxl-0 {\n    margin-right: 0 !important;\n  }\n  .me-xxl-1 {\n    margin-right: 0.25rem !important;\n  }\n  .me-xxl-2 {\n    margin-right: 0.5rem !important;\n  }\n  .me-xxl-3 {\n    margin-right: 1rem !important;\n  }\n  .me-xxl-4 {\n    margin-right: 1.5rem !important;\n  }\n  .me-xxl-5 {\n    margin-right: 3rem !important;\n  }\n  .me-xxl-auto {\n    margin-right: auto !important;\n  }\n  .mb-xxl-0 {\n    margin-bottom: 0 !important;\n  }\n  .mb-xxl-1 {\n    margin-bottom: 0.25rem !important;\n  }\n  .mb-xxl-2 {\n    margin-bottom: 0.5rem !important;\n  }\n  .mb-xxl-3 {\n    margin-bottom: 1rem !important;\n  }\n  .mb-xxl-4 {\n    margin-bottom: 1.5rem !important;\n  }\n  .mb-xxl-5 {\n    margin-bottom: 3rem !important;\n  }\n  .mb-xxl-auto {\n    margin-bottom: auto !important;\n  }\n  .ms-xxl-0 {\n    margin-left: 0 !important;\n  }\n  .ms-xxl-1 {\n    margin-left: 0.25rem !important;\n  }\n  .ms-xxl-2 {\n    margin-left: 0.5rem !important;\n  }\n  .ms-xxl-3 {\n    margin-left: 1rem !important;\n  }\n  .ms-xxl-4 {\n    margin-left: 1.5rem !important;\n  }\n  .ms-xxl-5 {\n    margin-left: 3rem !important;\n  }\n  .ms-xxl-auto {\n    margin-left: auto !important;\n  }\n  .p-xxl-0 {\n    padding: 0 !important;\n  }\n  .p-xxl-1 {\n    padding: 0.25rem !important;\n  }\n  .p-xxl-2 {\n    padding: 0.5rem !important;\n  }\n  .p-xxl-3 {\n    padding: 1rem !important;\n  }\n  .p-xxl-4 {\n    padding: 1.5rem !important;\n  }\n  .p-xxl-5 {\n    padding: 3rem !important;\n  }\n  .px-xxl-0 {\n    padding-right: 0 !important;\n    padding-left: 0 !important;\n  }\n  .px-xxl-1 {\n    padding-right: 0.25rem !important;\n    padding-left: 0.25rem !important;\n  }\n  .px-xxl-2 {\n    padding-right: 0.5rem !important;\n    padding-left: 0.5rem !important;\n  }\n  .px-xxl-3 {\n    padding-right: 1rem !important;\n    padding-left: 1rem !important;\n  }\n  .px-xxl-4 {\n    padding-right: 1.5rem !important;\n    padding-left: 1.5rem !important;\n  }\n  .px-xxl-5 {\n    padding-right: 3rem !important;\n    padding-left: 3rem !important;\n  }\n  .py-xxl-0 {\n    padding-top: 0 !important;\n    padding-bottom: 0 !important;\n  }\n  .py-xxl-1 {\n    padding-top: 0.25rem !important;\n    padding-bottom: 0.25rem !important;\n  }\n  .py-xxl-2 {\n    padding-top: 0.5rem !important;\n    padding-bottom: 0.5rem !important;\n  }\n  .py-xxl-3 {\n    padding-top: 1rem !important;\n    padding-bottom: 1rem !important;\n  }\n  .py-xxl-4 {\n    padding-top: 1.5rem !important;\n    padding-bottom: 1.5rem !important;\n  }\n  .py-xxl-5 {\n    padding-top: 3rem !important;\n    padding-bottom: 3rem !important;\n  }\n  .pt-xxl-0 {\n    padding-top: 0 !important;\n  }\n  .pt-xxl-1 {\n    padding-top: 0.25rem !important;\n  }\n  .pt-xxl-2 {\n    padding-top: 0.5rem !important;\n  }\n  .pt-xxl-3 {\n    padding-top: 1rem !important;\n  }\n  .pt-xxl-4 {\n    padding-top: 1.5rem !important;\n  }\n  .pt-xxl-5 {\n    padding-top: 3rem !important;\n  }\n  .pe-xxl-0 {\n    padding-right: 0 !important;\n  }\n  .pe-xxl-1 {\n    padding-right: 0.25rem !important;\n  }\n  .pe-xxl-2 {\n    padding-right: 0.5rem !important;\n  }\n  .pe-xxl-3 {\n    padding-right: 1rem !important;\n  }\n  .pe-xxl-4 {\n    padding-right: 1.5rem !important;\n  }\n  .pe-xxl-5 {\n    padding-right: 3rem !important;\n  }\n  .pb-xxl-0 {\n    padding-bottom: 0 !important;\n  }\n  .pb-xxl-1 {\n    padding-bottom: 0.25rem !important;\n  }\n  .pb-xxl-2 {\n    padding-bottom: 0.5rem !important;\n  }\n  .pb-xxl-3 {\n    padding-bottom: 1rem !important;\n  }\n  .pb-xxl-4 {\n    padding-bottom: 1.5rem !important;\n  }\n  .pb-xxl-5 {\n    padding-bottom: 3rem !important;\n  }\n  .ps-xxl-0 {\n    padding-left: 0 !important;\n  }\n  .ps-xxl-1 {\n    padding-left: 0.25rem !important;\n  }\n  .ps-xxl-2 {\n    padding-left: 0.5rem !important;\n  }\n  .ps-xxl-3 {\n    padding-left: 1rem !important;\n  }\n  .ps-xxl-4 {\n    padding-left: 1.5rem !important;\n  }\n  .ps-xxl-5 {\n    padding-left: 3rem !important;\n  }\n  .text-xxl-start {\n    text-align: left !important;\n  }\n  .text-xxl-end {\n    text-align: right !important;\n  }\n  .text-xxl-center {\n    text-align: center !important;\n  }\n}\n\n@media (min-width: 1200px) {\n  .fs-1 {\n    font-size: 2.5rem !important;\n  }\n  .fs-2 {\n    font-size: 2rem !important;\n  }\n  .fs-3 {\n    font-size: 1.75rem !important;\n  }\n  .fs-4 {\n    font-size: 1.5rem !important;\n  }\n}\n\n@media print {\n  .d-print-inline {\n    display: inline !important;\n  }\n  .d-print-inline-block {\n    display: inline-block !important;\n  }\n  .d-print-block {\n    display: block !important;\n  }\n  .d-print-grid {\n    display: grid !important;\n  }\n  .d-print-table {\n    display: table !important;\n  }\n  .d-print-table-row {\n    display: table-row !important;\n  }\n  .d-print-table-cell {\n    display: table-cell !important;\n  }\n  .d-print-flex {\n    display: -ms-flexbox !important;\n    display: flex !important;\n  }\n  .d-print-inline-flex {\n    display: -ms-inline-flexbox !important;\n    display: inline-flex !important;\n  }\n  .d-print-none {\n    display: none !important;\n  }\n}\n\n.navbar.bg-primary {\n  background-image: linear-gradient(#50b3eb, #2fa4e7 60%, #2c9ad9);\n}\n\n.navbar.bg-secondary {\n  background-image: linear-gradient(#edeff2, #e9ecef 60%, #dbdee1);\n}\n\n.navbar.bg-success {\n  background-image: linear-gradient(#89b659, #73a839 60%, #6c9e36);\n}\n\n.navbar.bg-info {\n  background-image: linear-gradient(#2b5b89, #033c73 60%, #03386c);\n}\n\n.navbar.bg-warning {\n  background-image: linear-gradient(#e27129, #dd5600 60%, #d05100);\n}\n\n.navbar.bg-danger {\n  background-image: linear-gradient(#d04045, #c71c22 60%, #bb1a20);\n}\n\n.navbar.bg-light {\n  background-image: linear-gradient(#f9fafb, #f8f9fa 60%, #e9eaeb);\n}\n\n.navbar.bg-dark {\n  background-image: linear-gradient(#545a5f, #343a40 60%, #31373c);\n}\n\n.navbar-brand,\n.nav-link {\n  text-shadow: 0 1px 0 rgba(0, 0, 0, 0.05);\n}\n\n.btn {\n  text-shadow: 0 1px 0 rgba(0, 0, 0, 0.05);\n}\n\n.btn-secondary {\n  color: #495057;\n}\n\n.btn-primary {\n  background-image: linear-gradient(#50b3eb, #2fa4e7 60%, #2c9ad9);\n}\n\n.btn-secondary {\n  background-image: linear-gradient(#edeff2, #e9ecef 60%, #dbdee1);\n}\n\n.btn-success {\n  background-image: linear-gradient(#89b659, #73a839 60%, #6c9e36);\n}\n\n.btn-info {\n  background-image: linear-gradient(#2b5b89, #033c73 60%, #03386c);\n}\n\n.btn-warning {\n  background-image: linear-gradient(#e27129, #dd5600 60%, #d05100);\n}\n\n.btn-danger {\n  background-image: linear-gradient(#d04045, #c71c22 60%, #bb1a20);\n}\n\n.btn-light {\n  background-image: linear-gradient(#f9fafb, #f8f9fa 60%, #e9eaeb);\n}\n\n.btn-dark {\n  background-image: linear-gradient(#545a5f, #343a40 60%, #31373c);\n}\n\n.text-secondary {\n  color: #adb5bd !important;\n}\n\n.bg-primary h1, .bg-primary .h1,\n.bg-primary h2,\n.bg-primary .h2,\n.bg-primary h3,\n.bg-primary .h3,\n.bg-primary h4,\n.bg-primary .h4,\n.bg-primary h5,\n.bg-primary .h5,\n.bg-primary h6,\n.bg-primary .h6,\n.bg-success h1,\n.bg-success .h1,\n.bg-success h2,\n.bg-success .h2,\n.bg-success h3,\n.bg-success .h3,\n.bg-success h4,\n.bg-success .h4,\n.bg-success h5,\n.bg-success .h5,\n.bg-success h6,\n.bg-success .h6,\n.bg-info h1,\n.bg-info .h1,\n.bg-info h2,\n.bg-info .h2,\n.bg-info h3,\n.bg-info .h3,\n.bg-info h4,\n.bg-info .h4,\n.bg-info h5,\n.bg-info .h5,\n.bg-info h6,\n.bg-info .h6,\n.bg-warning h1,\n.bg-warning .h1,\n.bg-warning h2,\n.bg-warning .h2,\n.bg-warning h3,\n.bg-warning .h3,\n.bg-warning h4,\n.bg-warning .h4,\n.bg-warning h5,\n.bg-warning .h5,\n.bg-warning h6,\n.bg-warning .h6,\n.bg-danger h1,\n.bg-danger .h1,\n.bg-danger h2,\n.bg-danger .h2,\n.bg-danger h3,\n.bg-danger .h3,\n.bg-danger h4,\n.bg-danger .h4,\n.bg-danger h5,\n.bg-danger .h5,\n.bg-danger h6,\n.bg-danger .h6,\n.bg-dark h1,\n.bg-dark .h1,\n.bg-dark h2,\n.bg-dark .h2,\n.bg-dark h3,\n.bg-dark .h3,\n.bg-dark h4,\n.bg-dark .h4,\n.bg-dark h5,\n.bg-dark .h5,\n.bg-dark h6,\n.bg-dark .h6 {\n  color: #fff;\n}\n\n.dropdown-menu .dropdown-header {\n  color: #868e96;\n}\n\n.badge.bg-secondary, .badge.bg-light {\n  color: #343a40;\n}\n"
  },
  {
    "path": "src/sourceDev.WebApp/SharedThemes/cerulean/wwwroot/css/fontawesome-all.css",
    "content": "/*!\n * Font Awesome Free 5.0.8 by @fontawesome - https://fontawesome.com\n * License - https://fontawesome.com/license (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)\n */\n.fa,\n.fas,\n.far,\n.fal,\n.fab {\n  -moz-osx-font-smoothing: grayscale;\n  -webkit-font-smoothing: antialiased;\n  display: inline-block;\n  font-style: normal;\n  font-variant: normal;\n  text-rendering: auto;\n  line-height: 1; }\n\n.fa-lg {\n  font-size: 1.33333em;\n  line-height: 0.75em;\n  vertical-align: -.0667em; }\n\n.fa-xs {\n  font-size: .75em; }\n\n.fa-sm {\n  font-size: .875em; }\n\n.fa-1x {\n  font-size: 1em; }\n\n.fa-2x {\n  font-size: 2em; }\n\n.fa-3x {\n  font-size: 3em; }\n\n.fa-4x {\n  font-size: 4em; }\n\n.fa-5x {\n  font-size: 5em; }\n\n.fa-6x {\n  font-size: 6em; }\n\n.fa-7x {\n  font-size: 7em; }\n\n.fa-8x {\n  font-size: 8em; }\n\n.fa-9x {\n  font-size: 9em; }\n\n.fa-10x {\n  font-size: 10em; }\n\n.fa-fw {\n  text-align: center;\n  width: 1.25em; }\n\n.fa-ul {\n  list-style-type: none;\n  margin-left: 2.5em;\n  padding-left: 0; }\n  .fa-ul > li {\n    position: relative; }\n\n.fa-li {\n  left: -2em;\n  position: absolute;\n  text-align: center;\n  width: 2em;\n  line-height: inherit; }\n\n.fa-border {\n  border: solid 0.08em #eee;\n  border-radius: .1em;\n  padding: .2em .25em .15em; }\n\n.fa-pull-left {\n  float: left; }\n\n.fa-pull-right {\n  float: right; }\n\n.fa.fa-pull-left,\n.fas.fa-pull-left,\n.far.fa-pull-left,\n.fal.fa-pull-left,\n.fab.fa-pull-left {\n  margin-right: .3em; }\n\n.fa.fa-pull-right,\n.fas.fa-pull-right,\n.far.fa-pull-right,\n.fal.fa-pull-right,\n.fab.fa-pull-right {\n  margin-left: .3em; }\n\n.fa-spin {\n  -webkit-animation: fa-spin 2s infinite linear;\n          animation: fa-spin 2s infinite linear; }\n\n.fa-pulse {\n  -webkit-animation: fa-spin 1s infinite steps(8);\n          animation: fa-spin 1s infinite steps(8); }\n\n@-webkit-keyframes fa-spin {\n  0% {\n    -webkit-transform: rotate(0deg);\n            transform: rotate(0deg); }\n  100% {\n    -webkit-transform: rotate(360deg);\n            transform: rotate(360deg); } }\n\n@keyframes fa-spin {\n  0% {\n    -webkit-transform: rotate(0deg);\n            transform: rotate(0deg); }\n  100% {\n    -webkit-transform: rotate(360deg);\n            transform: rotate(360deg); } }\n\n.fa-rotate-90 {\n  -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)\";\n  -webkit-transform: rotate(90deg);\n          transform: rotate(90deg); }\n\n.fa-rotate-180 {\n  -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)\";\n  -webkit-transform: rotate(180deg);\n          transform: rotate(180deg); }\n\n.fa-rotate-270 {\n  -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)\";\n  -webkit-transform: rotate(270deg);\n          transform: rotate(270deg); }\n\n.fa-flip-horizontal {\n  -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)\";\n  -webkit-transform: scale(-1, 1);\n          transform: scale(-1, 1); }\n\n.fa-flip-vertical {\n  -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)\";\n  -webkit-transform: scale(1, -1);\n          transform: scale(1, -1); }\n\n.fa-flip-horizontal.fa-flip-vertical {\n  -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)\";\n  -webkit-transform: scale(-1, -1);\n          transform: scale(-1, -1); }\n\n:root .fa-rotate-90,\n:root .fa-rotate-180,\n:root .fa-rotate-270,\n:root .fa-flip-horizontal,\n:root .fa-flip-vertical {\n  -webkit-filter: none;\n          filter: none; }\n\n.fa-stack {\n  display: inline-block;\n  height: 2em;\n  line-height: 2em;\n  position: relative;\n  vertical-align: middle;\n  width: 2em; }\n\n.fa-stack-1x,\n.fa-stack-2x {\n  left: 0;\n  position: absolute;\n  text-align: center;\n  width: 100%; }\n\n.fa-stack-1x {\n  line-height: inherit; }\n\n.fa-stack-2x {\n  font-size: 2em; }\n\n.fa-inverse {\n  color: #fff; }\n\n/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen\nreaders do not read off random characters that represent icons */\n.fa-500px:before {\n  content: \"\\f26e\"; }\n\n.fa-accessible-icon:before {\n  content: \"\\f368\"; }\n\n.fa-accusoft:before {\n  content: \"\\f369\"; }\n\n.fa-address-book:before {\n  content: \"\\f2b9\"; }\n\n.fa-address-card:before {\n  content: \"\\f2bb\"; }\n\n.fa-adjust:before {\n  content: \"\\f042\"; }\n\n.fa-adn:before {\n  content: \"\\f170\"; }\n\n.fa-adversal:before {\n  content: \"\\f36a\"; }\n\n.fa-affiliatetheme:before {\n  content: \"\\f36b\"; }\n\n.fa-algolia:before {\n  content: \"\\f36c\"; }\n\n.fa-align-center:before {\n  content: \"\\f037\"; }\n\n.fa-align-justify:before {\n  content: \"\\f039\"; }\n\n.fa-align-left:before {\n  content: \"\\f036\"; }\n\n.fa-align-right:before {\n  content: \"\\f038\"; }\n\n.fa-amazon:before {\n  content: \"\\f270\"; }\n\n.fa-amazon-pay:before {\n  content: \"\\f42c\"; }\n\n.fa-ambulance:before {\n  content: \"\\f0f9\"; }\n\n.fa-american-sign-language-interpreting:before {\n  content: \"\\f2a3\"; }\n\n.fa-amilia:before {\n  content: \"\\f36d\"; }\n\n.fa-anchor:before {\n  content: \"\\f13d\"; }\n\n.fa-android:before {\n  content: \"\\f17b\"; }\n\n.fa-angellist:before {\n  content: \"\\f209\"; }\n\n.fa-angle-double-down:before {\n  content: \"\\f103\"; }\n\n.fa-angle-double-left:before {\n  content: \"\\f100\"; }\n\n.fa-angle-double-right:before {\n  content: \"\\f101\"; }\n\n.fa-angle-double-up:before {\n  content: \"\\f102\"; }\n\n.fa-angle-down:before {\n  content: \"\\f107\"; }\n\n.fa-angle-left:before {\n  content: \"\\f104\"; }\n\n.fa-angle-right:before {\n  content: \"\\f105\"; }\n\n.fa-angle-up:before {\n  content: \"\\f106\"; }\n\n.fa-angrycreative:before {\n  content: \"\\f36e\"; }\n\n.fa-angular:before {\n  content: \"\\f420\"; }\n\n.fa-app-store:before {\n  content: \"\\f36f\"; }\n\n.fa-app-store-ios:before {\n  content: \"\\f370\"; }\n\n.fa-apper:before {\n  content: \"\\f371\"; }\n\n.fa-apple:before {\n  content: \"\\f179\"; }\n\n.fa-apple-pay:before {\n  content: \"\\f415\"; }\n\n.fa-archive:before {\n  content: \"\\f187\"; }\n\n.fa-arrow-alt-circle-down:before {\n  content: \"\\f358\"; }\n\n.fa-arrow-alt-circle-left:before {\n  content: \"\\f359\"; }\n\n.fa-arrow-alt-circle-right:before {\n  content: \"\\f35a\"; }\n\n.fa-arrow-alt-circle-up:before {\n  content: \"\\f35b\"; }\n\n.fa-arrow-circle-down:before {\n  content: \"\\f0ab\"; }\n\n.fa-arrow-circle-left:before {\n  content: \"\\f0a8\"; }\n\n.fa-arrow-circle-right:before {\n  content: \"\\f0a9\"; }\n\n.fa-arrow-circle-up:before {\n  content: \"\\f0aa\"; }\n\n.fa-arrow-down:before {\n  content: \"\\f063\"; }\n\n.fa-arrow-left:before {\n  content: \"\\f060\"; }\n\n.fa-arrow-right:before {\n  content: \"\\f061\"; }\n\n.fa-arrow-up:before {\n  content: \"\\f062\"; }\n\n.fa-arrows-alt:before {\n  content: \"\\f0b2\"; }\n\n.fa-arrows-alt-h:before {\n  content: \"\\f337\"; }\n\n.fa-arrows-alt-v:before {\n  content: \"\\f338\"; }\n\n.fa-assistive-listening-systems:before {\n  content: \"\\f2a2\"; }\n\n.fa-asterisk:before {\n  content: \"\\f069\"; }\n\n.fa-asymmetrik:before {\n  content: \"\\f372\"; }\n\n.fa-at:before {\n  content: \"\\f1fa\"; }\n\n.fa-audible:before {\n  content: \"\\f373\"; }\n\n.fa-audio-description:before {\n  content: \"\\f29e\"; }\n\n.fa-autoprefixer:before {\n  content: \"\\f41c\"; }\n\n.fa-avianex:before {\n  content: \"\\f374\"; }\n\n.fa-aviato:before {\n  content: \"\\f421\"; }\n\n.fa-aws:before {\n  content: \"\\f375\"; }\n\n.fa-backward:before {\n  content: \"\\f04a\"; }\n\n.fa-balance-scale:before {\n  content: \"\\f24e\"; }\n\n.fa-ban:before {\n  content: \"\\f05e\"; }\n\n.fa-band-aid:before {\n  content: \"\\f462\"; }\n\n.fa-bandcamp:before {\n  content: \"\\f2d5\"; }\n\n.fa-barcode:before {\n  content: \"\\f02a\"; }\n\n.fa-bars:before {\n  content: \"\\f0c9\"; }\n\n.fa-baseball-ball:before {\n  content: \"\\f433\"; }\n\n.fa-basketball-ball:before {\n  content: \"\\f434\"; }\n\n.fa-bath:before {\n  content: \"\\f2cd\"; }\n\n.fa-battery-empty:before {\n  content: \"\\f244\"; }\n\n.fa-battery-full:before {\n  content: \"\\f240\"; }\n\n.fa-battery-half:before {\n  content: \"\\f242\"; }\n\n.fa-battery-quarter:before {\n  content: \"\\f243\"; }\n\n.fa-battery-three-quarters:before {\n  content: \"\\f241\"; }\n\n.fa-bed:before {\n  content: \"\\f236\"; }\n\n.fa-beer:before {\n  content: \"\\f0fc\"; }\n\n.fa-behance:before {\n  content: \"\\f1b4\"; }\n\n.fa-behance-square:before {\n  content: \"\\f1b5\"; }\n\n.fa-bell:before {\n  content: \"\\f0f3\"; }\n\n.fa-bell-slash:before {\n  content: \"\\f1f6\"; }\n\n.fa-bicycle:before {\n  content: \"\\f206\"; }\n\n.fa-bimobject:before {\n  content: \"\\f378\"; }\n\n.fa-binoculars:before {\n  content: \"\\f1e5\"; }\n\n.fa-birthday-cake:before {\n  content: \"\\f1fd\"; }\n\n.fa-bitbucket:before {\n  content: \"\\f171\"; }\n\n.fa-bitcoin:before {\n  content: \"\\f379\"; }\n\n.fa-bity:before {\n  content: \"\\f37a\"; }\n\n.fa-black-tie:before {\n  content: \"\\f27e\"; }\n\n.fa-blackberry:before {\n  content: \"\\f37b\"; }\n\n.fa-blind:before {\n  content: \"\\f29d\"; }\n\n.fa-blogger:before {\n  content: \"\\f37c\"; }\n\n.fa-blogger-b:before {\n  content: \"\\f37d\"; }\n\n.fa-bluetooth:before {\n  content: \"\\f293\"; }\n\n.fa-bluetooth-b:before {\n  content: \"\\f294\"; }\n\n.fa-bold:before {\n  content: \"\\f032\"; }\n\n.fa-bolt:before {\n  content: \"\\f0e7\"; }\n\n.fa-bomb:before {\n  content: \"\\f1e2\"; }\n\n.fa-book:before {\n  content: \"\\f02d\"; }\n\n.fa-bookmark:before {\n  content: \"\\f02e\"; }\n\n.fa-bowling-ball:before {\n  content: \"\\f436\"; }\n\n.fa-box:before {\n  content: \"\\f466\"; }\n\n.fa-boxes:before {\n  content: \"\\f468\"; }\n\n.fa-braille:before {\n  content: \"\\f2a1\"; }\n\n.fa-briefcase:before {\n  content: \"\\f0b1\"; }\n\n.fa-btc:before {\n  content: \"\\f15a\"; }\n\n.fa-bug:before {\n  content: \"\\f188\"; }\n\n.fa-building:before {\n  content: \"\\f1ad\"; }\n\n.fa-bullhorn:before {\n  content: \"\\f0a1\"; }\n\n.fa-bullseye:before {\n  content: \"\\f140\"; }\n\n.fa-buromobelexperte:before {\n  content: \"\\f37f\"; }\n\n.fa-bus:before {\n  content: \"\\f207\"; }\n\n.fa-buysellads:before {\n  content: \"\\f20d\"; }\n\n.fa-calculator:before {\n  content: \"\\f1ec\"; }\n\n.fa-calendar:before {\n  content: \"\\f133\"; }\n\n.fa-calendar-alt:before {\n  content: \"\\f073\"; }\n\n.fa-calendar-check:before {\n  content: \"\\f274\"; }\n\n.fa-calendar-minus:before {\n  content: \"\\f272\"; }\n\n.fa-calendar-plus:before {\n  content: \"\\f271\"; }\n\n.fa-calendar-times:before {\n  content: \"\\f273\"; }\n\n.fa-camera:before {\n  content: \"\\f030\"; }\n\n.fa-camera-retro:before {\n  content: \"\\f083\"; }\n\n.fa-car:before {\n  content: \"\\f1b9\"; }\n\n.fa-caret-down:before {\n  content: \"\\f0d7\"; }\n\n.fa-caret-left:before {\n  content: \"\\f0d9\"; }\n\n.fa-caret-right:before {\n  content: \"\\f0da\"; }\n\n.fa-caret-square-down:before {\n  content: \"\\f150\"; }\n\n.fa-caret-square-left:before {\n  content: \"\\f191\"; }\n\n.fa-caret-square-right:before {\n  content: \"\\f152\"; }\n\n.fa-caret-square-up:before {\n  content: \"\\f151\"; }\n\n.fa-caret-up:before {\n  content: \"\\f0d8\"; }\n\n.fa-cart-arrow-down:before {\n  content: \"\\f218\"; }\n\n.fa-cart-plus:before {\n  content: \"\\f217\"; }\n\n.fa-cc-amazon-pay:before {\n  content: \"\\f42d\"; }\n\n.fa-cc-amex:before {\n  content: \"\\f1f3\"; }\n\n.fa-cc-apple-pay:before {\n  content: \"\\f416\"; }\n\n.fa-cc-diners-club:before {\n  content: \"\\f24c\"; }\n\n.fa-cc-discover:before {\n  content: \"\\f1f2\"; }\n\n.fa-cc-jcb:before {\n  content: \"\\f24b\"; }\n\n.fa-cc-mastercard:before {\n  content: \"\\f1f1\"; }\n\n.fa-cc-paypal:before {\n  content: \"\\f1f4\"; }\n\n.fa-cc-stripe:before {\n  content: \"\\f1f5\"; }\n\n.fa-cc-visa:before {\n  content: \"\\f1f0\"; }\n\n.fa-centercode:before {\n  content: \"\\f380\"; }\n\n.fa-certificate:before {\n  content: \"\\f0a3\"; }\n\n.fa-chart-area:before {\n  content: \"\\f1fe\"; }\n\n.fa-chart-bar:before {\n  content: \"\\f080\"; }\n\n.fa-chart-line:before {\n  content: \"\\f201\"; }\n\n.fa-chart-pie:before {\n  content: \"\\f200\"; }\n\n.fa-check:before {\n  content: \"\\f00c\"; }\n\n.fa-check-circle:before {\n  content: \"\\f058\"; }\n\n.fa-check-square:before {\n  content: \"\\f14a\"; }\n\n.fa-chess:before {\n  content: \"\\f439\"; }\n\n.fa-chess-bishop:before {\n  content: \"\\f43a\"; }\n\n.fa-chess-board:before {\n  content: \"\\f43c\"; }\n\n.fa-chess-king:before {\n  content: \"\\f43f\"; }\n\n.fa-chess-knight:before {\n  content: \"\\f441\"; }\n\n.fa-chess-pawn:before {\n  content: \"\\f443\"; }\n\n.fa-chess-queen:before {\n  content: \"\\f445\"; }\n\n.fa-chess-rook:before {\n  content: \"\\f447\"; }\n\n.fa-chevron-circle-down:before {\n  content: \"\\f13a\"; }\n\n.fa-chevron-circle-left:before {\n  content: \"\\f137\"; }\n\n.fa-chevron-circle-right:before {\n  content: \"\\f138\"; }\n\n.fa-chevron-circle-up:before {\n  content: \"\\f139\"; }\n\n.fa-chevron-down:before {\n  content: \"\\f078\"; }\n\n.fa-chevron-left:before {\n  content: \"\\f053\"; }\n\n.fa-chevron-right:before {\n  content: \"\\f054\"; }\n\n.fa-chevron-up:before {\n  content: \"\\f077\"; }\n\n.fa-child:before {\n  content: \"\\f1ae\"; }\n\n.fa-chrome:before {\n  content: \"\\f268\"; }\n\n.fa-circle:before {\n  content: \"\\f111\"; }\n\n.fa-circle-notch:before {\n  content: \"\\f1ce\"; }\n\n.fa-clipboard:before {\n  content: \"\\f328\"; }\n\n.fa-clipboard-check:before {\n  content: \"\\f46c\"; }\n\n.fa-clipboard-list:before {\n  content: \"\\f46d\"; }\n\n.fa-clock:before {\n  content: \"\\f017\"; }\n\n.fa-clone:before {\n  content: \"\\f24d\"; }\n\n.fa-closed-captioning:before {\n  content: \"\\f20a\"; }\n\n.fa-cloud:before {\n  content: \"\\f0c2\"; }\n\n.fa-cloud-download-alt:before {\n  content: \"\\f381\"; }\n\n.fa-cloud-upload-alt:before {\n  content: \"\\f382\"; }\n\n.fa-cloudscale:before {\n  content: \"\\f383\"; }\n\n.fa-cloudsmith:before {\n  content: \"\\f384\"; }\n\n.fa-cloudversify:before {\n  content: \"\\f385\"; }\n\n.fa-code:before {\n  content: \"\\f121\"; }\n\n.fa-code-branch:before {\n  content: \"\\f126\"; }\n\n.fa-codepen:before {\n  content: \"\\f1cb\"; }\n\n.fa-codiepie:before {\n  content: \"\\f284\"; }\n\n.fa-coffee:before {\n  content: \"\\f0f4\"; }\n\n.fa-cog:before {\n  content: \"\\f013\"; }\n\n.fa-cogs:before {\n  content: \"\\f085\"; }\n\n.fa-columns:before {\n  content: \"\\f0db\"; }\n\n.fa-comment:before {\n  content: \"\\f075\"; }\n\n.fa-comment-alt:before {\n  content: \"\\f27a\"; }\n\n.fa-comments:before {\n  content: \"\\f086\"; }\n\n.fa-compass:before {\n  content: \"\\f14e\"; }\n\n.fa-compress:before {\n  content: \"\\f066\"; }\n\n.fa-connectdevelop:before {\n  content: \"\\f20e\"; }\n\n.fa-contao:before {\n  content: \"\\f26d\"; }\n\n.fa-copy:before {\n  content: \"\\f0c5\"; }\n\n.fa-copyright:before {\n  content: \"\\f1f9\"; }\n\n.fa-cpanel:before {\n  content: \"\\f388\"; }\n\n.fa-creative-commons:before {\n  content: \"\\f25e\"; }\n\n.fa-credit-card:before {\n  content: \"\\f09d\"; }\n\n.fa-crop:before {\n  content: \"\\f125\"; }\n\n.fa-crosshairs:before {\n  content: \"\\f05b\"; }\n\n.fa-css3:before {\n  content: \"\\f13c\"; }\n\n.fa-css3-alt:before {\n  content: \"\\f38b\"; }\n\n.fa-cube:before {\n  content: \"\\f1b2\"; }\n\n.fa-cubes:before {\n  content: \"\\f1b3\"; }\n\n.fa-cut:before {\n  content: \"\\f0c4\"; }\n\n.fa-cuttlefish:before {\n  content: \"\\f38c\"; }\n\n.fa-d-and-d:before {\n  content: \"\\f38d\"; }\n\n.fa-dashcube:before {\n  content: \"\\f210\"; }\n\n.fa-database:before {\n  content: \"\\f1c0\"; }\n\n.fa-deaf:before {\n  content: \"\\f2a4\"; }\n\n.fa-delicious:before {\n  content: \"\\f1a5\"; }\n\n.fa-deploydog:before {\n  content: \"\\f38e\"; }\n\n.fa-deskpro:before {\n  content: \"\\f38f\"; }\n\n.fa-desktop:before {\n  content: \"\\f108\"; }\n\n.fa-deviantart:before {\n  content: \"\\f1bd\"; }\n\n.fa-digg:before {\n  content: \"\\f1a6\"; }\n\n.fa-digital-ocean:before {\n  content: \"\\f391\"; }\n\n.fa-discord:before {\n  content: \"\\f392\"; }\n\n.fa-discourse:before {\n  content: \"\\f393\"; }\n\n.fa-dna:before {\n  content: \"\\f471\"; }\n\n.fa-dochub:before {\n  content: \"\\f394\"; }\n\n.fa-docker:before {\n  content: \"\\f395\"; }\n\n.fa-dollar-sign:before {\n  content: \"\\f155\"; }\n\n.fa-dolly:before {\n  content: \"\\f472\"; }\n\n.fa-dolly-flatbed:before {\n  content: \"\\f474\"; }\n\n.fa-dot-circle:before {\n  content: \"\\f192\"; }\n\n.fa-download:before {\n  content: \"\\f019\"; }\n\n.fa-draft2digital:before {\n  content: \"\\f396\"; }\n\n.fa-dribbble:before {\n  content: \"\\f17d\"; }\n\n.fa-dribbble-square:before {\n  content: \"\\f397\"; }\n\n.fa-dropbox:before {\n  content: \"\\f16b\"; }\n\n.fa-drupal:before {\n  content: \"\\f1a9\"; }\n\n.fa-dyalog:before {\n  content: \"\\f399\"; }\n\n.fa-earlybirds:before {\n  content: \"\\f39a\"; }\n\n.fa-edge:before {\n  content: \"\\f282\"; }\n\n.fa-edit:before {\n  content: \"\\f044\"; }\n\n.fa-eject:before {\n  content: \"\\f052\"; }\n\n.fa-elementor:before {\n  content: \"\\f430\"; }\n\n.fa-ellipsis-h:before {\n  content: \"\\f141\"; }\n\n.fa-ellipsis-v:before {\n  content: \"\\f142\"; }\n\n.fa-ember:before {\n  content: \"\\f423\"; }\n\n.fa-empire:before {\n  content: \"\\f1d1\"; }\n\n.fa-envelope:before {\n  content: \"\\f0e0\"; }\n\n.fa-envelope-open:before {\n  content: \"\\f2b6\"; }\n\n.fa-envelope-square:before {\n  content: \"\\f199\"; }\n\n.fa-envira:before {\n  content: \"\\f299\"; }\n\n.fa-eraser:before {\n  content: \"\\f12d\"; }\n\n.fa-erlang:before {\n  content: \"\\f39d\"; }\n\n.fa-ethereum:before {\n  content: \"\\f42e\"; }\n\n.fa-etsy:before {\n  content: \"\\f2d7\"; }\n\n.fa-euro-sign:before {\n  content: \"\\f153\"; }\n\n.fa-exchange-alt:before {\n  content: \"\\f362\"; }\n\n.fa-exclamation:before {\n  content: \"\\f12a\"; }\n\n.fa-exclamation-circle:before {\n  content: \"\\f06a\"; }\n\n.fa-exclamation-triangle:before {\n  content: \"\\f071\"; }\n\n.fa-expand:before {\n  content: \"\\f065\"; }\n\n.fa-expand-arrows-alt:before {\n  content: \"\\f31e\"; }\n\n.fa-expeditedssl:before {\n  content: \"\\f23e\"; }\n\n.fa-external-link-alt:before {\n  content: \"\\f35d\"; }\n\n.fa-external-link-square-alt:before {\n  content: \"\\f360\"; }\n\n.fa-eye:before {\n  content: \"\\f06e\"; }\n\n.fa-eye-dropper:before {\n  content: \"\\f1fb\"; }\n\n.fa-eye-slash:before {\n  content: \"\\f070\"; }\n\n.fa-facebook:before {\n  content: \"\\f09a\"; }\n\n.fa-facebook-f:before {\n  content: \"\\f39e\"; }\n\n.fa-facebook-messenger:before {\n  content: \"\\f39f\"; }\n\n.fa-facebook-square:before {\n  content: \"\\f082\"; }\n\n.fa-fast-backward:before {\n  content: \"\\f049\"; }\n\n.fa-fast-forward:before {\n  content: \"\\f050\"; }\n\n.fa-fax:before {\n  content: \"\\f1ac\"; }\n\n.fa-female:before {\n  content: \"\\f182\"; }\n\n.fa-fighter-jet:before {\n  content: \"\\f0fb\"; }\n\n.fa-file:before {\n  content: \"\\f15b\"; }\n\n.fa-file-alt:before {\n  content: \"\\f15c\"; }\n\n.fa-file-archive:before {\n  content: \"\\f1c6\"; }\n\n.fa-file-audio:before {\n  content: \"\\f1c7\"; }\n\n.fa-file-code:before {\n  content: \"\\f1c9\"; }\n\n.fa-file-excel:before {\n  content: \"\\f1c3\"; }\n\n.fa-file-image:before {\n  content: \"\\f1c5\"; }\n\n.fa-file-pdf:before {\n  content: \"\\f1c1\"; }\n\n.fa-file-powerpoint:before {\n  content: \"\\f1c4\"; }\n\n.fa-file-video:before {\n  content: \"\\f1c8\"; }\n\n.fa-file-word:before {\n  content: \"\\f1c2\"; }\n\n.fa-film:before {\n  content: \"\\f008\"; }\n\n.fa-filter:before {\n  content: \"\\f0b0\"; }\n\n.fa-fire:before {\n  content: \"\\f06d\"; }\n\n.fa-fire-extinguisher:before {\n  content: \"\\f134\"; }\n\n.fa-firefox:before {\n  content: \"\\f269\"; }\n\n.fa-first-aid:before {\n  content: \"\\f479\"; }\n\n.fa-first-order:before {\n  content: \"\\f2b0\"; }\n\n.fa-firstdraft:before {\n  content: \"\\f3a1\"; }\n\n.fa-flag:before {\n  content: \"\\f024\"; }\n\n.fa-flag-checkered:before {\n  content: \"\\f11e\"; }\n\n.fa-flask:before {\n  content: \"\\f0c3\"; }\n\n.fa-flickr:before {\n  content: \"\\f16e\"; }\n\n.fa-flipboard:before {\n  content: \"\\f44d\"; }\n\n.fa-fly:before {\n  content: \"\\f417\"; }\n\n.fa-folder:before {\n  content: \"\\f07b\"; }\n\n.fa-folder-open:before {\n  content: \"\\f07c\"; }\n\n.fa-font:before {\n  content: \"\\f031\"; }\n\n.fa-font-awesome:before {\n  content: \"\\f2b4\"; }\n\n.fa-font-awesome-alt:before {\n  content: \"\\f35c\"; }\n\n.fa-font-awesome-flag:before {\n  content: \"\\f425\"; }\n\n.fa-fonticons:before {\n  content: \"\\f280\"; }\n\n.fa-fonticons-fi:before {\n  content: \"\\f3a2\"; }\n\n.fa-football-ball:before {\n  content: \"\\f44e\"; }\n\n.fa-fort-awesome:before {\n  content: \"\\f286\"; }\n\n.fa-fort-awesome-alt:before {\n  content: \"\\f3a3\"; }\n\n.fa-forumbee:before {\n  content: \"\\f211\"; }\n\n.fa-forward:before {\n  content: \"\\f04e\"; }\n\n.fa-foursquare:before {\n  content: \"\\f180\"; }\n\n.fa-free-code-camp:before {\n  content: \"\\f2c5\"; }\n\n.fa-freebsd:before {\n  content: \"\\f3a4\"; }\n\n.fa-frown:before {\n  content: \"\\f119\"; }\n\n.fa-futbol:before {\n  content: \"\\f1e3\"; }\n\n.fa-gamepad:before {\n  content: \"\\f11b\"; }\n\n.fa-gavel:before {\n  content: \"\\f0e3\"; }\n\n.fa-gem:before {\n  content: \"\\f3a5\"; }\n\n.fa-genderless:before {\n  content: \"\\f22d\"; }\n\n.fa-get-pocket:before {\n  content: \"\\f265\"; }\n\n.fa-gg:before {\n  content: \"\\f260\"; }\n\n.fa-gg-circle:before {\n  content: \"\\f261\"; }\n\n.fa-gift:before {\n  content: \"\\f06b\"; }\n\n.fa-git:before {\n  content: \"\\f1d3\"; }\n\n.fa-git-square:before {\n  content: \"\\f1d2\"; }\n\n.fa-github:before {\n  content: \"\\f09b\"; }\n\n.fa-github-alt:before {\n  content: \"\\f113\"; }\n\n.fa-github-square:before {\n  content: \"\\f092\"; }\n\n.fa-gitkraken:before {\n  content: \"\\f3a6\"; }\n\n.fa-gitlab:before {\n  content: \"\\f296\"; }\n\n.fa-gitter:before {\n  content: \"\\f426\"; }\n\n.fa-glass-martini:before {\n  content: \"\\f000\"; }\n\n.fa-glide:before {\n  content: \"\\f2a5\"; }\n\n.fa-glide-g:before {\n  content: \"\\f2a6\"; }\n\n.fa-globe:before {\n  content: \"\\f0ac\"; }\n\n.fa-gofore:before {\n  content: \"\\f3a7\"; }\n\n.fa-golf-ball:before {\n  content: \"\\f450\"; }\n\n.fa-goodreads:before {\n  content: \"\\f3a8\"; }\n\n.fa-goodreads-g:before {\n  content: \"\\f3a9\"; }\n\n.fa-google:before {\n  content: \"\\f1a0\"; }\n\n.fa-google-drive:before {\n  content: \"\\f3aa\"; }\n\n.fa-google-play:before {\n  content: \"\\f3ab\"; }\n\n.fa-google-plus:before {\n  content: \"\\f2b3\"; }\n\n.fa-google-plus-g:before {\n  content: \"\\f0d5\"; }\n\n.fa-google-plus-square:before {\n  content: \"\\f0d4\"; }\n\n.fa-google-wallet:before {\n  content: \"\\f1ee\"; }\n\n.fa-graduation-cap:before {\n  content: \"\\f19d\"; }\n\n.fa-gratipay:before {\n  content: \"\\f184\"; }\n\n.fa-grav:before {\n  content: \"\\f2d6\"; }\n\n.fa-gripfire:before {\n  content: \"\\f3ac\"; }\n\n.fa-grunt:before {\n  content: \"\\f3ad\"; }\n\n.fa-gulp:before {\n  content: \"\\f3ae\"; }\n\n.fa-h-square:before {\n  content: \"\\f0fd\"; }\n\n.fa-hacker-news:before {\n  content: \"\\f1d4\"; }\n\n.fa-hacker-news-square:before {\n  content: \"\\f3af\"; }\n\n.fa-hand-lizard:before {\n  content: \"\\f258\"; }\n\n.fa-hand-paper:before {\n  content: \"\\f256\"; }\n\n.fa-hand-peace:before {\n  content: \"\\f25b\"; }\n\n.fa-hand-point-down:before {\n  content: \"\\f0a7\"; }\n\n.fa-hand-point-left:before {\n  content: \"\\f0a5\"; }\n\n.fa-hand-point-right:before {\n  content: \"\\f0a4\"; }\n\n.fa-hand-point-up:before {\n  content: \"\\f0a6\"; }\n\n.fa-hand-pointer:before {\n  content: \"\\f25a\"; }\n\n.fa-hand-rock:before {\n  content: \"\\f255\"; }\n\n.fa-hand-scissors:before {\n  content: \"\\f257\"; }\n\n.fa-hand-spock:before {\n  content: \"\\f259\"; }\n\n.fa-handshake:before {\n  content: \"\\f2b5\"; }\n\n.fa-hashtag:before {\n  content: \"\\f292\"; }\n\n.fa-hdd:before {\n  content: \"\\f0a0\"; }\n\n.fa-heading:before {\n  content: \"\\f1dc\"; }\n\n.fa-headphones:before {\n  content: \"\\f025\"; }\n\n.fa-heart:before {\n  content: \"\\f004\"; }\n\n.fa-heartbeat:before {\n  content: \"\\f21e\"; }\n\n.fa-hips:before {\n  content: \"\\f452\"; }\n\n.fa-hire-a-helper:before {\n  content: \"\\f3b0\"; }\n\n.fa-history:before {\n  content: \"\\f1da\"; }\n\n.fa-hockey-puck:before {\n  content: \"\\f453\"; }\n\n.fa-home:before {\n  content: \"\\f015\"; }\n\n.fa-hooli:before {\n  content: \"\\f427\"; }\n\n.fa-hospital:before {\n  content: \"\\f0f8\"; }\n\n.fa-hospital-symbol:before {\n  content: \"\\f47e\"; }\n\n.fa-hotjar:before {\n  content: \"\\f3b1\"; }\n\n.fa-hourglass:before {\n  content: \"\\f254\"; }\n\n.fa-hourglass-end:before {\n  content: \"\\f253\"; }\n\n.fa-hourglass-half:before {\n  content: \"\\f252\"; }\n\n.fa-hourglass-start:before {\n  content: \"\\f251\"; }\n\n.fa-houzz:before {\n  content: \"\\f27c\"; }\n\n.fa-html5:before {\n  content: \"\\f13b\"; }\n\n.fa-hubspot:before {\n  content: \"\\f3b2\"; }\n\n.fa-i-cursor:before {\n  content: \"\\f246\"; }\n\n.fa-id-badge:before {\n  content: \"\\f2c1\"; }\n\n.fa-id-card:before {\n  content: \"\\f2c2\"; }\n\n.fa-image:before {\n  content: \"\\f03e\"; }\n\n.fa-images:before {\n  content: \"\\f302\"; }\n\n.fa-imdb:before {\n  content: \"\\f2d8\"; }\n\n.fa-inbox:before {\n  content: \"\\f01c\"; }\n\n.fa-indent:before {\n  content: \"\\f03c\"; }\n\n.fa-industry:before {\n  content: \"\\f275\"; }\n\n.fa-info:before {\n  content: \"\\f129\"; }\n\n.fa-info-circle:before {\n  content: \"\\f05a\"; }\n\n.fa-instagram:before {\n  content: \"\\f16d\"; }\n\n.fa-internet-explorer:before {\n  content: \"\\f26b\"; }\n\n.fa-ioxhost:before {\n  content: \"\\f208\"; }\n\n.fa-italic:before {\n  content: \"\\f033\"; }\n\n.fa-itunes:before {\n  content: \"\\f3b4\"; }\n\n.fa-itunes-note:before {\n  content: \"\\f3b5\"; }\n\n.fa-jenkins:before {\n  content: \"\\f3b6\"; }\n\n.fa-joget:before {\n  content: \"\\f3b7\"; }\n\n.fa-joomla:before {\n  content: \"\\f1aa\"; }\n\n.fa-js:before {\n  content: \"\\f3b8\"; }\n\n.fa-js-square:before {\n  content: \"\\f3b9\"; }\n\n.fa-jsfiddle:before {\n  content: \"\\f1cc\"; }\n\n.fa-key:before {\n  content: \"\\f084\"; }\n\n.fa-keyboard:before {\n  content: \"\\f11c\"; }\n\n.fa-keycdn:before {\n  content: \"\\f3ba\"; }\n\n.fa-kickstarter:before {\n  content: \"\\f3bb\"; }\n\n.fa-kickstarter-k:before {\n  content: \"\\f3bc\"; }\n\n.fa-korvue:before {\n  content: \"\\f42f\"; }\n\n.fa-language:before {\n  content: \"\\f1ab\"; }\n\n.fa-laptop:before {\n  content: \"\\f109\"; }\n\n.fa-laravel:before {\n  content: \"\\f3bd\"; }\n\n.fa-lastfm:before {\n  content: \"\\f202\"; }\n\n.fa-lastfm-square:before {\n  content: \"\\f203\"; }\n\n.fa-leaf:before {\n  content: \"\\f06c\"; }\n\n.fa-leanpub:before {\n  content: \"\\f212\"; }\n\n.fa-lemon:before {\n  content: \"\\f094\"; }\n\n.fa-less:before {\n  content: \"\\f41d\"; }\n\n.fa-level-down-alt:before {\n  content: \"\\f3be\"; }\n\n.fa-level-up-alt:before {\n  content: \"\\f3bf\"; }\n\n.fa-life-ring:before {\n  content: \"\\f1cd\"; }\n\n.fa-lightbulb:before {\n  content: \"\\f0eb\"; }\n\n.fa-line:before {\n  content: \"\\f3c0\"; }\n\n.fa-link:before {\n  content: \"\\f0c1\"; }\n\n.fa-linkedin:before {\n  content: \"\\f08c\"; }\n\n.fa-linkedin-in:before {\n  content: \"\\f0e1\"; }\n\n.fa-linode:before {\n  content: \"\\f2b8\"; }\n\n.fa-linux:before {\n  content: \"\\f17c\"; }\n\n.fa-lira-sign:before {\n  content: \"\\f195\"; }\n\n.fa-list:before {\n  content: \"\\f03a\"; }\n\n.fa-list-alt:before {\n  content: \"\\f022\"; }\n\n.fa-list-ol:before {\n  content: \"\\f0cb\"; }\n\n.fa-list-ul:before {\n  content: \"\\f0ca\"; }\n\n.fa-location-arrow:before {\n  content: \"\\f124\"; }\n\n.fa-lock:before {\n  content: \"\\f023\"; }\n\n.fa-lock-open:before {\n  content: \"\\f3c1\"; }\n\n.fa-long-arrow-alt-down:before {\n  content: \"\\f309\"; }\n\n.fa-long-arrow-alt-left:before {\n  content: \"\\f30a\"; }\n\n.fa-long-arrow-alt-right:before {\n  content: \"\\f30b\"; }\n\n.fa-long-arrow-alt-up:before {\n  content: \"\\f30c\"; }\n\n.fa-low-vision:before {\n  content: \"\\f2a8\"; }\n\n.fa-lyft:before {\n  content: \"\\f3c3\"; }\n\n.fa-magento:before {\n  content: \"\\f3c4\"; }\n\n.fa-magic:before {\n  content: \"\\f0d0\"; }\n\n.fa-magnet:before {\n  content: \"\\f076\"; }\n\n.fa-male:before {\n  content: \"\\f183\"; }\n\n.fa-map:before {\n  content: \"\\f279\"; }\n\n.fa-map-marker:before {\n  content: \"\\f041\"; }\n\n.fa-map-marker-alt:before {\n  content: \"\\f3c5\"; }\n\n.fa-map-pin:before {\n  content: \"\\f276\"; }\n\n.fa-map-signs:before {\n  content: \"\\f277\"; }\n\n.fa-mars:before {\n  content: \"\\f222\"; }\n\n.fa-mars-double:before {\n  content: \"\\f227\"; }\n\n.fa-mars-stroke:before {\n  content: \"\\f229\"; }\n\n.fa-mars-stroke-h:before {\n  content: \"\\f22b\"; }\n\n.fa-mars-stroke-v:before {\n  content: \"\\f22a\"; }\n\n.fa-maxcdn:before {\n  content: \"\\f136\"; }\n\n.fa-medapps:before {\n  content: \"\\f3c6\"; }\n\n.fa-medium:before {\n  content: \"\\f23a\"; }\n\n.fa-medium-m:before {\n  content: \"\\f3c7\"; }\n\n.fa-medkit:before {\n  content: \"\\f0fa\"; }\n\n.fa-medrt:before {\n  content: \"\\f3c8\"; }\n\n.fa-meetup:before {\n  content: \"\\f2e0\"; }\n\n.fa-meh:before {\n  content: \"\\f11a\"; }\n\n.fa-mercury:before {\n  content: \"\\f223\"; }\n\n.fa-microchip:before {\n  content: \"\\f2db\"; }\n\n.fa-microphone:before {\n  content: \"\\f130\"; }\n\n.fa-microphone-slash:before {\n  content: \"\\f131\"; }\n\n.fa-microsoft:before {\n  content: \"\\f3ca\"; }\n\n.fa-minus:before {\n  content: \"\\f068\"; }\n\n.fa-minus-circle:before {\n  content: \"\\f056\"; }\n\n.fa-minus-square:before {\n  content: \"\\f146\"; }\n\n.fa-mix:before {\n  content: \"\\f3cb\"; }\n\n.fa-mixcloud:before {\n  content: \"\\f289\"; }\n\n.fa-mizuni:before {\n  content: \"\\f3cc\"; }\n\n.fa-mobile:before {\n  content: \"\\f10b\"; }\n\n.fa-mobile-alt:before {\n  content: \"\\f3cd\"; }\n\n.fa-modx:before {\n  content: \"\\f285\"; }\n\n.fa-monero:before {\n  content: \"\\f3d0\"; }\n\n.fa-money-bill-alt:before {\n  content: \"\\f3d1\"; }\n\n.fa-moon:before {\n  content: \"\\f186\"; }\n\n.fa-motorcycle:before {\n  content: \"\\f21c\"; }\n\n.fa-mouse-pointer:before {\n  content: \"\\f245\"; }\n\n.fa-music:before {\n  content: \"\\f001\"; }\n\n.fa-napster:before {\n  content: \"\\f3d2\"; }\n\n.fa-neuter:before {\n  content: \"\\f22c\"; }\n\n.fa-newspaper:before {\n  content: \"\\f1ea\"; }\n\n.fa-nintendo-switch:before {\n  content: \"\\f418\"; }\n\n.fa-node:before {\n  content: \"\\f419\"; }\n\n.fa-node-js:before {\n  content: \"\\f3d3\"; }\n\n.fa-npm:before {\n  content: \"\\f3d4\"; }\n\n.fa-ns8:before {\n  content: \"\\f3d5\"; }\n\n.fa-nutritionix:before {\n  content: \"\\f3d6\"; }\n\n.fa-object-group:before {\n  content: \"\\f247\"; }\n\n.fa-object-ungroup:before {\n  content: \"\\f248\"; }\n\n.fa-odnoklassniki:before {\n  content: \"\\f263\"; }\n\n.fa-odnoklassniki-square:before {\n  content: \"\\f264\"; }\n\n.fa-opencart:before {\n  content: \"\\f23d\"; }\n\n.fa-openid:before {\n  content: \"\\f19b\"; }\n\n.fa-opera:before {\n  content: \"\\f26a\"; }\n\n.fa-optin-monster:before {\n  content: \"\\f23c\"; }\n\n.fa-osi:before {\n  content: \"\\f41a\"; }\n\n.fa-outdent:before {\n  content: \"\\f03b\"; }\n\n.fa-page4:before {\n  content: \"\\f3d7\"; }\n\n.fa-pagelines:before {\n  content: \"\\f18c\"; }\n\n.fa-paint-brush:before {\n  content: \"\\f1fc\"; }\n\n.fa-palfed:before {\n  content: \"\\f3d8\"; }\n\n.fa-pallet:before {\n  content: \"\\f482\"; }\n\n.fa-paper-plane:before {\n  content: \"\\f1d8\"; }\n\n.fa-paperclip:before {\n  content: \"\\f0c6\"; }\n\n.fa-paragraph:before {\n  content: \"\\f1dd\"; }\n\n.fa-paste:before {\n  content: \"\\f0ea\"; }\n\n.fa-patreon:before {\n  content: \"\\f3d9\"; }\n\n.fa-pause:before {\n  content: \"\\f04c\"; }\n\n.fa-pause-circle:before {\n  content: \"\\f28b\"; }\n\n.fa-paw:before {\n  content: \"\\f1b0\"; }\n\n.fa-paypal:before {\n  content: \"\\f1ed\"; }\n\n.fa-pen-square:before {\n  content: \"\\f14b\"; }\n\n.fa-pencil-alt:before {\n  content: \"\\f303\"; }\n\n.fa-percent:before {\n  content: \"\\f295\"; }\n\n.fa-periscope:before {\n  content: \"\\f3da\"; }\n\n.fa-phabricator:before {\n  content: \"\\f3db\"; }\n\n.fa-phoenix-framework:before {\n  content: \"\\f3dc\"; }\n\n.fa-phone:before {\n  content: \"\\f095\"; }\n\n.fa-phone-square:before {\n  content: \"\\f098\"; }\n\n.fa-phone-volume:before {\n  content: \"\\f2a0\"; }\n\n.fa-php:before {\n  content: \"\\f457\"; }\n\n.fa-pied-piper:before {\n  content: \"\\f2ae\"; }\n\n.fa-pied-piper-alt:before {\n  content: \"\\f1a8\"; }\n\n.fa-pied-piper-pp:before {\n  content: \"\\f1a7\"; }\n\n.fa-pills:before {\n  content: \"\\f484\"; }\n\n.fa-pinterest:before {\n  content: \"\\f0d2\"; }\n\n.fa-pinterest-p:before {\n  content: \"\\f231\"; }\n\n.fa-pinterest-square:before {\n  content: \"\\f0d3\"; }\n\n.fa-plane:before {\n  content: \"\\f072\"; }\n\n.fa-play:before {\n  content: \"\\f04b\"; }\n\n.fa-play-circle:before {\n  content: \"\\f144\"; }\n\n.fa-playstation:before {\n  content: \"\\f3df\"; }\n\n.fa-plug:before {\n  content: \"\\f1e6\"; }\n\n.fa-plus:before {\n  content: \"\\f067\"; }\n\n.fa-plus-circle:before {\n  content: \"\\f055\"; }\n\n.fa-plus-square:before {\n  content: \"\\f0fe\"; }\n\n.fa-podcast:before {\n  content: \"\\f2ce\"; }\n\n.fa-pound-sign:before {\n  content: \"\\f154\"; }\n\n.fa-power-off:before {\n  content: \"\\f011\"; }\n\n.fa-print:before {\n  content: \"\\f02f\"; }\n\n.fa-product-hunt:before {\n  content: \"\\f288\"; }\n\n.fa-pushed:before {\n  content: \"\\f3e1\"; }\n\n.fa-puzzle-piece:before {\n  content: \"\\f12e\"; }\n\n.fa-python:before {\n  content: \"\\f3e2\"; }\n\n.fa-qq:before {\n  content: \"\\f1d6\"; }\n\n.fa-qrcode:before {\n  content: \"\\f029\"; }\n\n.fa-question:before {\n  content: \"\\f128\"; }\n\n.fa-question-circle:before {\n  content: \"\\f059\"; }\n\n.fa-quidditch:before {\n  content: \"\\f458\"; }\n\n.fa-quinscape:before {\n  content: \"\\f459\"; }\n\n.fa-quora:before {\n  content: \"\\f2c4\"; }\n\n.fa-quote-left:before {\n  content: \"\\f10d\"; }\n\n.fa-quote-right:before {\n  content: \"\\f10e\"; }\n\n.fa-random:before {\n  content: \"\\f074\"; }\n\n.fa-ravelry:before {\n  content: \"\\f2d9\"; }\n\n.fa-react:before {\n  content: \"\\f41b\"; }\n\n.fa-rebel:before {\n  content: \"\\f1d0\"; }\n\n.fa-recycle:before {\n  content: \"\\f1b8\"; }\n\n.fa-red-river:before {\n  content: \"\\f3e3\"; }\n\n.fa-reddit:before {\n  content: \"\\f1a1\"; }\n\n.fa-reddit-alien:before {\n  content: \"\\f281\"; }\n\n.fa-reddit-square:before {\n  content: \"\\f1a2\"; }\n\n.fa-redo:before {\n  content: \"\\f01e\"; }\n\n.fa-redo-alt:before {\n  content: \"\\f2f9\"; }\n\n.fa-registered:before {\n  content: \"\\f25d\"; }\n\n.fa-rendact:before {\n  content: \"\\f3e4\"; }\n\n.fa-renren:before {\n  content: \"\\f18b\"; }\n\n.fa-reply:before {\n  content: \"\\f3e5\"; }\n\n.fa-reply-all:before {\n  content: \"\\f122\"; }\n\n.fa-replyd:before {\n  content: \"\\f3e6\"; }\n\n.fa-resolving:before {\n  content: \"\\f3e7\"; }\n\n.fa-retweet:before {\n  content: \"\\f079\"; }\n\n.fa-road:before {\n  content: \"\\f018\"; }\n\n.fa-rocket:before {\n  content: \"\\f135\"; }\n\n.fa-rocketchat:before {\n  content: \"\\f3e8\"; }\n\n.fa-rockrms:before {\n  content: \"\\f3e9\"; }\n\n.fa-rss:before {\n  content: \"\\f09e\"; }\n\n.fa-rss-square:before {\n  content: \"\\f143\"; }\n\n.fa-ruble-sign:before {\n  content: \"\\f158\"; }\n\n.fa-rupee-sign:before {\n  content: \"\\f156\"; }\n\n.fa-safari:before {\n  content: \"\\f267\"; }\n\n.fa-sass:before {\n  content: \"\\f41e\"; }\n\n.fa-save:before {\n  content: \"\\f0c7\"; }\n\n.fa-schlix:before {\n  content: \"\\f3ea\"; }\n\n.fa-scribd:before {\n  content: \"\\f28a\"; }\n\n.fa-search:before {\n  content: \"\\f002\"; }\n\n.fa-search-minus:before {\n  content: \"\\f010\"; }\n\n.fa-search-plus:before {\n  content: \"\\f00e\"; }\n\n.fa-searchengin:before {\n  content: \"\\f3eb\"; }\n\n.fa-sellcast:before {\n  content: \"\\f2da\"; }\n\n.fa-sellsy:before {\n  content: \"\\f213\"; }\n\n.fa-server:before {\n  content: \"\\f233\"; }\n\n.fa-servicestack:before {\n  content: \"\\f3ec\"; }\n\n.fa-share:before {\n  content: \"\\f064\"; }\n\n.fa-share-alt:before {\n  content: \"\\f1e0\"; }\n\n.fa-share-alt-square:before {\n  content: \"\\f1e1\"; }\n\n.fa-share-square:before {\n  content: \"\\f14d\"; }\n\n.fa-shekel-sign:before {\n  content: \"\\f20b\"; }\n\n.fa-shield-alt:before {\n  content: \"\\f3ed\"; }\n\n.fa-ship:before {\n  content: \"\\f21a\"; }\n\n.fa-shipping-fast:before {\n  content: \"\\f48b\"; }\n\n.fa-shirtsinbulk:before {\n  content: \"\\f214\"; }\n\n.fa-shopping-bag:before {\n  content: \"\\f290\"; }\n\n.fa-shopping-basket:before {\n  content: \"\\f291\"; }\n\n.fa-shopping-cart:before {\n  content: \"\\f07a\"; }\n\n.fa-shower:before {\n  content: \"\\f2cc\"; }\n\n.fa-sign-in-alt:before {\n  content: \"\\f2f6\"; }\n\n.fa-sign-language:before {\n  content: \"\\f2a7\"; }\n\n.fa-sign-out-alt:before {\n  content: \"\\f2f5\"; }\n\n.fa-signal:before {\n  content: \"\\f012\"; }\n\n.fa-simplybuilt:before {\n  content: \"\\f215\"; }\n\n.fa-sistrix:before {\n  content: \"\\f3ee\"; }\n\n.fa-sitemap:before {\n  content: \"\\f0e8\"; }\n\n.fa-skyatlas:before {\n  content: \"\\f216\"; }\n\n.fa-skype:before {\n  content: \"\\f17e\"; }\n\n.fa-slack:before {\n  content: \"\\f198\"; }\n\n.fa-slack-hash:before {\n  content: \"\\f3ef\"; }\n\n.fa-sliders-h:before {\n  content: \"\\f1de\"; }\n\n.fa-slideshare:before {\n  content: \"\\f1e7\"; }\n\n.fa-smile:before {\n  content: \"\\f118\"; }\n\n.fa-snapchat:before {\n  content: \"\\f2ab\"; }\n\n.fa-snapchat-ghost:before {\n  content: \"\\f2ac\"; }\n\n.fa-snapchat-square:before {\n  content: \"\\f2ad\"; }\n\n.fa-snowflake:before {\n  content: \"\\f2dc\"; }\n\n.fa-sort:before {\n  content: \"\\f0dc\"; }\n\n.fa-sort-alpha-down:before {\n  content: \"\\f15d\"; }\n\n.fa-sort-alpha-up:before {\n  content: \"\\f15e\"; }\n\n.fa-sort-amount-down:before {\n  content: \"\\f160\"; }\n\n.fa-sort-amount-up:before {\n  content: \"\\f161\"; }\n\n.fa-sort-down:before {\n  content: \"\\f0dd\"; }\n\n.fa-sort-numeric-down:before {\n  content: \"\\f162\"; }\n\n.fa-sort-numeric-up:before {\n  content: \"\\f163\"; }\n\n.fa-sort-up:before {\n  content: \"\\f0de\"; }\n\n.fa-soundcloud:before {\n  content: \"\\f1be\"; }\n\n.fa-space-shuttle:before {\n  content: \"\\f197\"; }\n\n.fa-speakap:before {\n  content: \"\\f3f3\"; }\n\n.fa-spinner:before {\n  content: \"\\f110\"; }\n\n.fa-spotify:before {\n  content: \"\\f1bc\"; }\n\n.fa-square:before {\n  content: \"\\f0c8\"; }\n\n.fa-square-full:before {\n  content: \"\\f45c\"; }\n\n.fa-stack-exchange:before {\n  content: \"\\f18d\"; }\n\n.fa-stack-overflow:before {\n  content: \"\\f16c\"; }\n\n.fa-star:before {\n  content: \"\\f005\"; }\n\n.fa-star-half:before {\n  content: \"\\f089\"; }\n\n.fa-staylinked:before {\n  content: \"\\f3f5\"; }\n\n.fa-steam:before {\n  content: \"\\f1b6\"; }\n\n.fa-steam-square:before {\n  content: \"\\f1b7\"; }\n\n.fa-steam-symbol:before {\n  content: \"\\f3f6\"; }\n\n.fa-step-backward:before {\n  content: \"\\f048\"; }\n\n.fa-step-forward:before {\n  content: \"\\f051\"; }\n\n.fa-stethoscope:before {\n  content: \"\\f0f1\"; }\n\n.fa-sticker-mule:before {\n  content: \"\\f3f7\"; }\n\n.fa-sticky-note:before {\n  content: \"\\f249\"; }\n\n.fa-stop:before {\n  content: \"\\f04d\"; }\n\n.fa-stop-circle:before {\n  content: \"\\f28d\"; }\n\n.fa-stopwatch:before {\n  content: \"\\f2f2\"; }\n\n.fa-strava:before {\n  content: \"\\f428\"; }\n\n.fa-street-view:before {\n  content: \"\\f21d\"; }\n\n.fa-strikethrough:before {\n  content: \"\\f0cc\"; }\n\n.fa-stripe:before {\n  content: \"\\f429\"; }\n\n.fa-stripe-s:before {\n  content: \"\\f42a\"; }\n\n.fa-studiovinari:before {\n  content: \"\\f3f8\"; }\n\n.fa-stumbleupon:before {\n  content: \"\\f1a4\"; }\n\n.fa-stumbleupon-circle:before {\n  content: \"\\f1a3\"; }\n\n.fa-subscript:before {\n  content: \"\\f12c\"; }\n\n.fa-subway:before {\n  content: \"\\f239\"; }\n\n.fa-suitcase:before {\n  content: \"\\f0f2\"; }\n\n.fa-sun:before {\n  content: \"\\f185\"; }\n\n.fa-superpowers:before {\n  content: \"\\f2dd\"; }\n\n.fa-superscript:before {\n  content: \"\\f12b\"; }\n\n.fa-supple:before {\n  content: \"\\f3f9\"; }\n\n.fa-sync:before {\n  content: \"\\f021\"; }\n\n.fa-sync-alt:before {\n  content: \"\\f2f1\"; }\n\n.fa-syringe:before {\n  content: \"\\f48e\"; }\n\n.fa-table:before {\n  content: \"\\f0ce\"; }\n\n.fa-table-tennis:before {\n  content: \"\\f45d\"; }\n\n.fa-tablet:before {\n  content: \"\\f10a\"; }\n\n.fa-tablet-alt:before {\n  content: \"\\f3fa\"; }\n\n.fa-tachometer-alt:before {\n  content: \"\\f3fd\"; }\n\n.fa-tag:before {\n  content: \"\\f02b\"; }\n\n.fa-tags:before {\n  content: \"\\f02c\"; }\n\n.fa-tasks:before {\n  content: \"\\f0ae\"; }\n\n.fa-taxi:before {\n  content: \"\\f1ba\"; }\n\n.fa-telegram:before {\n  content: \"\\f2c6\"; }\n\n.fa-telegram-plane:before {\n  content: \"\\f3fe\"; }\n\n.fa-tencent-weibo:before {\n  content: \"\\f1d5\"; }\n\n.fa-terminal:before {\n  content: \"\\f120\"; }\n\n.fa-text-height:before {\n  content: \"\\f034\"; }\n\n.fa-text-width:before {\n  content: \"\\f035\"; }\n\n.fa-th:before {\n  content: \"\\f00a\"; }\n\n.fa-th-large:before {\n  content: \"\\f009\"; }\n\n.fa-th-list:before {\n  content: \"\\f00b\"; }\n\n.fa-themeisle:before {\n  content: \"\\f2b2\"; }\n\n.fa-thermometer:before {\n  content: \"\\f491\"; }\n\n.fa-thermometer-empty:before {\n  content: \"\\f2cb\"; }\n\n.fa-thermometer-full:before {\n  content: \"\\f2c7\"; }\n\n.fa-thermometer-half:before {\n  content: \"\\f2c9\"; }\n\n.fa-thermometer-quarter:before {\n  content: \"\\f2ca\"; }\n\n.fa-thermometer-three-quarters:before {\n  content: \"\\f2c8\"; }\n\n.fa-thumbs-down:before {\n  content: \"\\f165\"; }\n\n.fa-thumbs-up:before {\n  content: \"\\f164\"; }\n\n.fa-thumbtack:before {\n  content: \"\\f08d\"; }\n\n.fa-ticket-alt:before {\n  content: \"\\f3ff\"; }\n\n.fa-times:before {\n  content: \"\\f00d\"; }\n\n.fa-times-circle:before {\n  content: \"\\f057\"; }\n\n.fa-tint:before {\n  content: \"\\f043\"; }\n\n.fa-toggle-off:before {\n  content: \"\\f204\"; }\n\n.fa-toggle-on:before {\n  content: \"\\f205\"; }\n\n.fa-trademark:before {\n  content: \"\\f25c\"; }\n\n.fa-train:before {\n  content: \"\\f238\"; }\n\n.fa-transgender:before {\n  content: \"\\f224\"; }\n\n.fa-transgender-alt:before {\n  content: \"\\f225\"; }\n\n.fa-trash:before {\n  content: \"\\f1f8\"; }\n\n.fa-trash-alt:before {\n  content: \"\\f2ed\"; }\n\n.fa-tree:before {\n  content: \"\\f1bb\"; }\n\n.fa-trello:before {\n  content: \"\\f181\"; }\n\n.fa-tripadvisor:before {\n  content: \"\\f262\"; }\n\n.fa-trophy:before {\n  content: \"\\f091\"; }\n\n.fa-truck:before {\n  content: \"\\f0d1\"; }\n\n.fa-tty:before {\n  content: \"\\f1e4\"; }\n\n.fa-tumblr:before {\n  content: \"\\f173\"; }\n\n.fa-tumblr-square:before {\n  content: \"\\f174\"; }\n\n.fa-tv:before {\n  content: \"\\f26c\"; }\n\n.fa-twitch:before {\n  content: \"\\f1e8\"; }\n\n.fa-twitter:before {\n  content: \"\\f099\"; }\n\n.fa-twitter-square:before {\n  content: \"\\f081\"; }\n\n.fa-typo3:before {\n  content: \"\\f42b\"; }\n\n.fa-uber:before {\n  content: \"\\f402\"; }\n\n.fa-uikit:before {\n  content: \"\\f403\"; }\n\n.fa-umbrella:before {\n  content: \"\\f0e9\"; }\n\n.fa-underline:before {\n  content: \"\\f0cd\"; }\n\n.fa-undo:before {\n  content: \"\\f0e2\"; }\n\n.fa-undo-alt:before {\n  content: \"\\f2ea\"; }\n\n.fa-uniregistry:before {\n  content: \"\\f404\"; }\n\n.fa-universal-access:before {\n  content: \"\\f29a\"; }\n\n.fa-university:before {\n  content: \"\\f19c\"; }\n\n.fa-unlink:before {\n  content: \"\\f127\"; }\n\n.fa-unlock:before {\n  content: \"\\f09c\"; }\n\n.fa-unlock-alt:before {\n  content: \"\\f13e\"; }\n\n.fa-untappd:before {\n  content: \"\\f405\"; }\n\n.fa-upload:before {\n  content: \"\\f093\"; }\n\n.fa-usb:before {\n  content: \"\\f287\"; }\n\n.fa-user:before {\n  content: \"\\f007\"; }\n\n.fa-user-circle:before {\n  content: \"\\f2bd\"; }\n\n.fa-user-md:before {\n  content: \"\\f0f0\"; }\n\n.fa-user-plus:before {\n  content: \"\\f234\"; }\n\n.fa-user-secret:before {\n  content: \"\\f21b\"; }\n\n.fa-user-times:before {\n  content: \"\\f235\"; }\n\n.fa-users:before {\n  content: \"\\f0c0\"; }\n\n.fa-ussunnah:before {\n  content: \"\\f407\"; }\n\n.fa-utensil-spoon:before {\n  content: \"\\f2e5\"; }\n\n.fa-utensils:before {\n  content: \"\\f2e7\"; }\n\n.fa-vaadin:before {\n  content: \"\\f408\"; }\n\n.fa-venus:before {\n  content: \"\\f221\"; }\n\n.fa-venus-double:before {\n  content: \"\\f226\"; }\n\n.fa-venus-mars:before {\n  content: \"\\f228\"; }\n\n.fa-viacoin:before {\n  content: \"\\f237\"; }\n\n.fa-viadeo:before {\n  content: \"\\f2a9\"; }\n\n.fa-viadeo-square:before {\n  content: \"\\f2aa\"; }\n\n.fa-viber:before {\n  content: \"\\f409\"; }\n\n.fa-video:before {\n  content: \"\\f03d\"; }\n\n.fa-vimeo:before {\n  content: \"\\f40a\"; }\n\n.fa-vimeo-square:before {\n  content: \"\\f194\"; }\n\n.fa-vimeo-v:before {\n  content: \"\\f27d\"; }\n\n.fa-vine:before {\n  content: \"\\f1ca\"; }\n\n.fa-vk:before {\n  content: \"\\f189\"; }\n\n.fa-vnv:before {\n  content: \"\\f40b\"; }\n\n.fa-volleyball-ball:before {\n  content: \"\\f45f\"; }\n\n.fa-volume-down:before {\n  content: \"\\f027\"; }\n\n.fa-volume-off:before {\n  content: \"\\f026\"; }\n\n.fa-volume-up:before {\n  content: \"\\f028\"; }\n\n.fa-vuejs:before {\n  content: \"\\f41f\"; }\n\n.fa-warehouse:before {\n  content: \"\\f494\"; }\n\n.fa-weibo:before {\n  content: \"\\f18a\"; }\n\n.fa-weight:before {\n  content: \"\\f496\"; }\n\n.fa-weixin:before {\n  content: \"\\f1d7\"; }\n\n.fa-whatsapp:before {\n  content: \"\\f232\"; }\n\n.fa-whatsapp-square:before {\n  content: \"\\f40c\"; }\n\n.fa-wheelchair:before {\n  content: \"\\f193\"; }\n\n.fa-whmcs:before {\n  content: \"\\f40d\"; }\n\n.fa-wifi:before {\n  content: \"\\f1eb\"; }\n\n.fa-wikipedia-w:before {\n  content: \"\\f266\"; }\n\n.fa-window-close:before {\n  content: \"\\f410\"; }\n\n.fa-window-maximize:before {\n  content: \"\\f2d0\"; }\n\n.fa-window-minimize:before {\n  content: \"\\f2d1\"; }\n\n.fa-window-restore:before {\n  content: \"\\f2d2\"; }\n\n.fa-windows:before {\n  content: \"\\f17a\"; }\n\n.fa-won-sign:before {\n  content: \"\\f159\"; }\n\n.fa-wordpress:before {\n  content: \"\\f19a\"; }\n\n.fa-wordpress-simple:before {\n  content: \"\\f411\"; }\n\n.fa-wpbeginner:before {\n  content: \"\\f297\"; }\n\n.fa-wpexplorer:before {\n  content: \"\\f2de\"; }\n\n.fa-wpforms:before {\n  content: \"\\f298\"; }\n\n.fa-wrench:before {\n  content: \"\\f0ad\"; }\n\n.fa-xbox:before {\n  content: \"\\f412\"; }\n\n.fa-xing:before {\n  content: \"\\f168\"; }\n\n.fa-xing-square:before {\n  content: \"\\f169\"; }\n\n.fa-y-combinator:before {\n  content: \"\\f23b\"; }\n\n.fa-yahoo:before {\n  content: \"\\f19e\"; }\n\n.fa-yandex:before {\n  content: \"\\f413\"; }\n\n.fa-yandex-international:before {\n  content: \"\\f414\"; }\n\n.fa-yelp:before {\n  content: \"\\f1e9\"; }\n\n.fa-yen-sign:before {\n  content: \"\\f157\"; }\n\n.fa-yoast:before {\n  content: \"\\f2b1\"; }\n\n.fa-youtube:before {\n  content: \"\\f167\"; }\n\n.fa-youtube-square:before {\n  content: \"\\f431\"; }\n\n.sr-only {\n  border: 0;\n  clip: rect(0, 0, 0, 0);\n  height: 1px;\n  margin: -1px;\n  overflow: hidden;\n  padding: 0;\n  position: absolute;\n  width: 1px; }\n\n.sr-only-focusable:active, .sr-only-focusable:focus {\n  clip: auto;\n  height: auto;\n  margin: 0;\n  overflow: visible;\n  position: static;\n  width: auto; }\n@font-face {\n  font-family: 'Font Awesome 5 Brands';\n  font-style: normal;\n  font-weight: normal;\n  src: url(\"../webfonts/fa-brands-400.eot\");\n  src: url(\"../webfonts/fa-brands-400.eot?#iefix\") format(\"embedded-opentype\"), url(\"../webfonts/fa-brands-400.woff2\") format(\"woff2\"), url(\"../webfonts/fa-brands-400.woff\") format(\"woff\"), url(\"../webfonts/fa-brands-400.ttf\") format(\"truetype\"), url(\"../webfonts/fa-brands-400.svg#fontawesome\") format(\"svg\"); }\n\n.fab {\n  font-family: 'Font Awesome 5 Brands'; }\n@font-face {\n  font-family: 'Font Awesome 5 Free';\n  font-style: normal;\n  font-weight: 400;\n  src: url(\"../webfonts/fa-regular-400.eot\");\n  src: url(\"../webfonts/fa-regular-400.eot?#iefix\") format(\"embedded-opentype\"), url(\"../webfonts/fa-regular-400.woff2\") format(\"woff2\"), url(\"../webfonts/fa-regular-400.woff\") format(\"woff\"), url(\"../webfonts/fa-regular-400.ttf\") format(\"truetype\"), url(\"../webfonts/fa-regular-400.svg#fontawesome\") format(\"svg\"); }\n\n.far {\n  font-family: 'Font Awesome 5 Free';\n  font-weight: 400; }\n@font-face {\n  font-family: 'Font Awesome 5 Free';\n  font-style: normal;\n  font-weight: 900;\n  src: url(\"../webfonts/fa-solid-900.eot\");\n  src: url(\"../webfonts/fa-solid-900.eot?#iefix\") format(\"embedded-opentype\"), url(\"../webfonts/fa-solid-900.woff2\") format(\"woff2\"), url(\"../webfonts/fa-solid-900.woff\") format(\"woff\"), url(\"../webfonts/fa-solid-900.ttf\") format(\"truetype\"), url(\"../webfonts/fa-solid-900.svg#fontawesome\") format(\"svg\"); }\n\n.fa,\n.fas {\n  font-family: 'Font Awesome 5 Free';\n  font-weight: 900; }\n"
  },
  {
    "path": "src/sourceDev.WebApp/SharedThemes/cerulean/wwwroot/css/site.css",
    "content": "﻿html {\n    position: relative;\n    min-height: 100%;\n}\n\nbody {\n    min-height: 100vh;\n    padding-top: 142px;\n}\n\n#newPostLink {\n    position: absolute;\n    top: 170px;\n    right: 0px;\n}\n\n#editPostLink {\n    position: absolute;\n    top: 200px;\n    right: 0px;\n}\n\n#unpublishPostLink {\n    position: absolute;\n    top: 230px !important;\n    right: 0px !important;\n}\n\n#pageManagerLink {\n    position: absolute;\n    top: 170px;\n    right: 0px;\n}\n\n#newPageLink {\n    position: absolute;\n    top: 200px;\n    right: 0px;\n}\n\n#editPageLink {\n    position: absolute;\n    top: 230px;\n    right: 0px\n}\n\n#unpublishPageLink {\n    position: absolute;\n    top: 260px !important;\n    right: 0px !important\n}\n\n#sidenavtoggle {\n    position: absolute;\n    top: 220px;\n    right: 5px;\n}\n\n\n@media screen and (max-width: 812px) {\n    #sidenavtoggle,\n    #sidenavmenu {\n        display: none;\n    }\n}\n\n.flex-fill {\n    flex: 1 1 auto !important;\n}\n\n\n.carousel-caption p {\n    font-size: 20px;\n    line-height: 1.4;\n}\n\n@media screen and (max-width: 768px) {\n    .carousel-caption {\n        display: none\n    }\n}\n\n\n\n\nimg, video, iframe {\n    max-width: 100%;\n}\n\ntd img, video, iframe {\n    max-width: none;\n}\n\n\n\n.table td, .table th {\n    vertical-align: inherit;\n}\n\n/******** jquery smartmenu bootstrap 4 ******/\n/* Carets in collapsible mode (make them look like +/- buttons) */\n.navbar-nav.sm-collapsible .sub-arrow {\n    position: absolute;\n    top: 50%;\n    right: 0;\n    margin: -0.7em 0.5em 0 0;\n    border: 1px solid rgba(0, 0, 0, .1);\n    border-radius: .25rem;\n    padding: 0;\n    width: 2em;\n    height: 1.4em;\n    font-size: 1.25rem;\n    line-height: 1.2em;\n    text-align: center;\n}\n\n    .navbar-nav.sm-collapsible .sub-arrow::before {\n        content: '+';\n    }\n\n.navbar-nav.sm-collapsible .show > a > .sub-arrow::before {\n    content: '-';\n}\n\n.navbar-dark .navbar-nav.sm-collapsible .nav-link .sub-arrow {\n    border-color: rgba(255, 255, 255, .1);\n}\n/* make sure there's room for the carets */\n.navbar-nav.sm-collapsible .has-submenu {\n    padding-right: 3em;\n}\n/* keep the carets properly positioned */\n.navbar-nav.sm-collapsible .nav-link,\n.navbar-nav.sm-collapsible .dropdown-item {\n    position: relative;\n}\n\n\n/* Nav carets in expanded mode */\n.navbar-nav:not(.sm-collapsible) .nav-link .sub-arrow {\n    display: inline-block;\n    width: 0;\n    height: 0;\n    margin-left: .255em;\n    vertical-align: .255em;\n    border-top: .3em solid;\n    border-right: .3em solid transparent;\n    border-left: .3em solid transparent;\n}\n/* point the arrows up for .fixed-bottom navbars */\n.fixed-bottom .navbar-nav:not(.sm-collapsible) .nav-link .sub-arrow,\n.fixed-bottom .navbar-nav:not(.sm-collapsible):not([data-sm-skip]) .dropdown-toggle::after {\n    border-top: 0;\n    border-bottom: .3em solid;\n}\n\n\n/* Dropdown carets in expanded mode */\n.navbar-nav:not(.sm-collapsible) .dropdown-item .sub-arrow,\n.navbar-nav:not(.sm-collapsible):not([data-sm-skip]) .dropdown-menu .dropdown-toggle::after {\n    position: absolute;\n    top: 50%;\n    right: 0;\n    width: 0;\n    height: 0;\n    margin-top: -.3em;\n    margin-right: 1em;\n    border-top: .3em solid transparent;\n    border-bottom: .3em solid transparent;\n    border-left: .3em solid;\n}\n/* make sure there's room for the carets */\n.navbar-nav:not(.sm-collapsible) .dropdown-item.has-submenu {\n    padding-right: 2em;\n}\n\n\n/* Scrolling arrows for tall menus */\n.navbar-nav .scroll-up,\n.navbar-nav .scroll-down {\n    position: absolute;\n    display: none;\n    visibility: hidden;\n    height: 20px;\n    overflow: hidden;\n    text-align: center;\n}\n\n.navbar-nav .scroll-up-arrow,\n.navbar-nav .scroll-down-arrow {\n    position: absolute;\n    top: -2px;\n    left: 50%;\n    margin-left: -8px;\n    width: 0;\n    height: 0;\n    overflow: hidden;\n    border-top: 7px solid transparent;\n    border-right: 7px solid transparent;\n    border-bottom: 7px solid;\n    border-left: 7px solid transparent;\n}\n\n.navbar-nav .scroll-down-arrow {\n    top: 6px;\n    border-top: 7px solid;\n    border-right: 7px solid transparent;\n    border-bottom: 7px solid transparent;\n    border-left: 7px solid transparent;\n}\n\n\n/* Add some spacing for 2+ level sub menus in collapsible mode */\n.navbar-nav.sm-collapsible .dropdown-menu .dropdown-menu {\n    margin: .5em;\n}\n\n\n/* Fix SmartMenus sub menus auto width (subMenusMinWidth/subMenusMaxWidth options) */\n.navbar-nav:not([data-sm-skip]) .dropdown-item {\n    white-space: normal;\n}\n\n.navbar-nav:not(.sm-collapsible) .sm-nowrap > li > .dropdown-item {\n    white-space: nowrap;\n}\n/******** end jquery smart menu bootstrap-4 *****************/\n\n.brand-header {\n    height: 100px;\n}\n\nheader .navbar {\n    top: 100px;\n}\n"
  },
  {
    "path": "src/sourceDev.WebApp/SharedThemes/cerulean/wwwroot/js/bootstrap.bundle.js",
    "content": "/*!\n  * Bootstrap v5.0.2 (https://getbootstrap.com/)\n  * Copyright 2011-2021 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)\n  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n  */\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n  typeof define === 'function' && define.amd ? define(factory) :\n  (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.bootstrap = factory());\n}(this, (function () { 'use strict';\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): dom/selector-engine.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n  const NODE_TEXT = 3;\n  const SelectorEngine = {\n    find(selector, element = document.documentElement) {\n      return [].concat(...Element.prototype.querySelectorAll.call(element, selector));\n    },\n\n    findOne(selector, element = document.documentElement) {\n      return Element.prototype.querySelector.call(element, selector);\n    },\n\n    children(element, selector) {\n      return [].concat(...element.children).filter(child => child.matches(selector));\n    },\n\n    parents(element, selector) {\n      const parents = [];\n      let ancestor = element.parentNode;\n\n      while (ancestor && ancestor.nodeType === Node.ELEMENT_NODE && ancestor.nodeType !== NODE_TEXT) {\n        if (ancestor.matches(selector)) {\n          parents.push(ancestor);\n        }\n\n        ancestor = ancestor.parentNode;\n      }\n\n      return parents;\n    },\n\n    prev(element, selector) {\n      let previous = element.previousElementSibling;\n\n      while (previous) {\n        if (previous.matches(selector)) {\n          return [previous];\n        }\n\n        previous = previous.previousElementSibling;\n      }\n\n      return [];\n    },\n\n    next(element, selector) {\n      let next = element.nextElementSibling;\n\n      while (next) {\n        if (next.matches(selector)) {\n          return [next];\n        }\n\n        next = next.nextElementSibling;\n      }\n\n      return [];\n    }\n\n  };\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): util/index.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n\n  const MAX_UID = 1000000;\n  const MILLISECONDS_MULTIPLIER = 1000;\n  const TRANSITION_END = 'transitionend'; // Shoutout AngusCroll (https://goo.gl/pxwQGp)\n\n  const toType = obj => {\n    if (obj === null || obj === undefined) {\n      return `${obj}`;\n    }\n\n    return {}.toString.call(obj).match(/\\s([a-z]+)/i)[1].toLowerCase();\n  };\n  /**\n   * --------------------------------------------------------------------------\n   * Public Util Api\n   * --------------------------------------------------------------------------\n   */\n\n\n  const getUID = prefix => {\n    do {\n      prefix += Math.floor(Math.random() * MAX_UID);\n    } while (document.getElementById(prefix));\n\n    return prefix;\n  };\n\n  const getSelector = element => {\n    let selector = element.getAttribute('data-bs-target');\n\n    if (!selector || selector === '#') {\n      let hrefAttr = element.getAttribute('href'); // The only valid content that could double as a selector are IDs or classes,\n      // so everything starting with `#` or `.`. If a \"real\" URL is used as the selector,\n      // `document.querySelector` will rightfully complain it is invalid.\n      // See https://github.com/twbs/bootstrap/issues/32273\n\n      if (!hrefAttr || !hrefAttr.includes('#') && !hrefAttr.startsWith('.')) {\n        return null;\n      } // Just in case some CMS puts out a full URL with the anchor appended\n\n\n      if (hrefAttr.includes('#') && !hrefAttr.startsWith('#')) {\n        hrefAttr = `#${hrefAttr.split('#')[1]}`;\n      }\n\n      selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : null;\n    }\n\n    return selector;\n  };\n\n  const getSelectorFromElement = element => {\n    const selector = getSelector(element);\n\n    if (selector) {\n      return document.querySelector(selector) ? selector : null;\n    }\n\n    return null;\n  };\n\n  const getElementFromSelector = element => {\n    const selector = getSelector(element);\n    return selector ? document.querySelector(selector) : null;\n  };\n\n  const getTransitionDurationFromElement = element => {\n    if (!element) {\n      return 0;\n    } // Get transition-duration of the element\n\n\n    let {\n      transitionDuration,\n      transitionDelay\n    } = window.getComputedStyle(element);\n    const floatTransitionDuration = Number.parseFloat(transitionDuration);\n    const floatTransitionDelay = Number.parseFloat(transitionDelay); // Return 0 if element or transition duration is not found\n\n    if (!floatTransitionDuration && !floatTransitionDelay) {\n      return 0;\n    } // If multiple durations are defined, take the first\n\n\n    transitionDuration = transitionDuration.split(',')[0];\n    transitionDelay = transitionDelay.split(',')[0];\n    return (Number.parseFloat(transitionDuration) + Number.parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER;\n  };\n\n  const triggerTransitionEnd = element => {\n    element.dispatchEvent(new Event(TRANSITION_END));\n  };\n\n  const isElement$1 = obj => {\n    if (!obj || typeof obj !== 'object') {\n      return false;\n    }\n\n    if (typeof obj.jquery !== 'undefined') {\n      obj = obj[0];\n    }\n\n    return typeof obj.nodeType !== 'undefined';\n  };\n\n  const getElement = obj => {\n    if (isElement$1(obj)) {\n      // it's a jQuery object or a node element\n      return obj.jquery ? obj[0] : obj;\n    }\n\n    if (typeof obj === 'string' && obj.length > 0) {\n      return SelectorEngine.findOne(obj);\n    }\n\n    return null;\n  };\n\n  const typeCheckConfig = (componentName, config, configTypes) => {\n    Object.keys(configTypes).forEach(property => {\n      const expectedTypes = configTypes[property];\n      const value = config[property];\n      const valueType = value && isElement$1(value) ? 'element' : toType(value);\n\n      if (!new RegExp(expectedTypes).test(valueType)) {\n        throw new TypeError(`${componentName.toUpperCase()}: Option \"${property}\" provided type \"${valueType}\" but expected type \"${expectedTypes}\".`);\n      }\n    });\n  };\n\n  const isVisible = element => {\n    if (!isElement$1(element) || element.getClientRects().length === 0) {\n      return false;\n    }\n\n    return getComputedStyle(element).getPropertyValue('visibility') === 'visible';\n  };\n\n  const isDisabled = element => {\n    if (!element || element.nodeType !== Node.ELEMENT_NODE) {\n      return true;\n    }\n\n    if (element.classList.contains('disabled')) {\n      return true;\n    }\n\n    if (typeof element.disabled !== 'undefined') {\n      return element.disabled;\n    }\n\n    return element.hasAttribute('disabled') && element.getAttribute('disabled') !== 'false';\n  };\n\n  const findShadowRoot = element => {\n    if (!document.documentElement.attachShadow) {\n      return null;\n    } // Can find the shadow root otherwise it'll return the document\n\n\n    if (typeof element.getRootNode === 'function') {\n      const root = element.getRootNode();\n      return root instanceof ShadowRoot ? root : null;\n    }\n\n    if (element instanceof ShadowRoot) {\n      return element;\n    } // when we don't find a shadow root\n\n\n    if (!element.parentNode) {\n      return null;\n    }\n\n    return findShadowRoot(element.parentNode);\n  };\n\n  const noop = () => {};\n\n  const reflow = element => element.offsetHeight;\n\n  const getjQuery = () => {\n    const {\n      jQuery\n    } = window;\n\n    if (jQuery && !document.body.hasAttribute('data-bs-no-jquery')) {\n      return jQuery;\n    }\n\n    return null;\n  };\n\n  const DOMContentLoadedCallbacks = [];\n\n  const onDOMContentLoaded = callback => {\n    if (document.readyState === 'loading') {\n      // add listener on the first call when the document is in loading state\n      if (!DOMContentLoadedCallbacks.length) {\n        document.addEventListener('DOMContentLoaded', () => {\n          DOMContentLoadedCallbacks.forEach(callback => callback());\n        });\n      }\n\n      DOMContentLoadedCallbacks.push(callback);\n    } else {\n      callback();\n    }\n  };\n\n  const isRTL = () => document.documentElement.dir === 'rtl';\n\n  const defineJQueryPlugin = plugin => {\n    onDOMContentLoaded(() => {\n      const $ = getjQuery();\n      /* istanbul ignore if */\n\n      if ($) {\n        const name = plugin.NAME;\n        const JQUERY_NO_CONFLICT = $.fn[name];\n        $.fn[name] = plugin.jQueryInterface;\n        $.fn[name].Constructor = plugin;\n\n        $.fn[name].noConflict = () => {\n          $.fn[name] = JQUERY_NO_CONFLICT;\n          return plugin.jQueryInterface;\n        };\n      }\n    });\n  };\n\n  const execute = callback => {\n    if (typeof callback === 'function') {\n      callback();\n    }\n  };\n\n  const executeAfterTransition = (callback, transitionElement, waitForTransition = true) => {\n    if (!waitForTransition) {\n      execute(callback);\n      return;\n    }\n\n    const durationPadding = 5;\n    const emulatedDuration = getTransitionDurationFromElement(transitionElement) + durationPadding;\n    let called = false;\n\n    const handler = ({\n      target\n    }) => {\n      if (target !== transitionElement) {\n        return;\n      }\n\n      called = true;\n      transitionElement.removeEventListener(TRANSITION_END, handler);\n      execute(callback);\n    };\n\n    transitionElement.addEventListener(TRANSITION_END, handler);\n    setTimeout(() => {\n      if (!called) {\n        triggerTransitionEnd(transitionElement);\n      }\n    }, emulatedDuration);\n  };\n  /**\n   * Return the previous/next element of a list.\n   *\n   * @param {array} list    The list of elements\n   * @param activeElement   The active element\n   * @param shouldGetNext   Choose to get next or previous element\n   * @param isCycleAllowed\n   * @return {Element|elem} The proper element\n   */\n\n\n  const getNextActiveElement = (list, activeElement, shouldGetNext, isCycleAllowed) => {\n    let index = list.indexOf(activeElement); // if the element does not exist in the list return an element depending on the direction and if cycle is allowed\n\n    if (index === -1) {\n      return list[!shouldGetNext && isCycleAllowed ? list.length - 1 : 0];\n    }\n\n    const listLength = list.length;\n    index += shouldGetNext ? 1 : -1;\n\n    if (isCycleAllowed) {\n      index = (index + listLength) % listLength;\n    }\n\n    return list[Math.max(0, Math.min(index, listLength - 1))];\n  };\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): dom/event-handler.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const namespaceRegex = /[^.]*(?=\\..*)\\.|.*/;\n  const stripNameRegex = /\\..*/;\n  const stripUidRegex = /::\\d+$/;\n  const eventRegistry = {}; // Events storage\n\n  let uidEvent = 1;\n  const customEvents = {\n    mouseenter: 'mouseover',\n    mouseleave: 'mouseout'\n  };\n  const customEventsRegex = /^(mouseenter|mouseleave)/i;\n  const nativeEvents = new Set(['click', 'dblclick', 'mouseup', 'mousedown', 'contextmenu', 'mousewheel', 'DOMMouseScroll', 'mouseover', 'mouseout', 'mousemove', 'selectstart', 'selectend', 'keydown', 'keypress', 'keyup', 'orientationchange', 'touchstart', 'touchmove', 'touchend', 'touchcancel', 'pointerdown', 'pointermove', 'pointerup', 'pointerleave', 'pointercancel', 'gesturestart', 'gesturechange', 'gestureend', 'focus', 'blur', 'change', 'reset', 'select', 'submit', 'focusin', 'focusout', 'load', 'unload', 'beforeunload', 'resize', 'move', 'DOMContentLoaded', 'readystatechange', 'error', 'abort', 'scroll']);\n  /**\n   * ------------------------------------------------------------------------\n   * Private methods\n   * ------------------------------------------------------------------------\n   */\n\n  function getUidEvent(element, uid) {\n    return uid && `${uid}::${uidEvent++}` || element.uidEvent || uidEvent++;\n  }\n\n  function getEvent(element) {\n    const uid = getUidEvent(element);\n    element.uidEvent = uid;\n    eventRegistry[uid] = eventRegistry[uid] || {};\n    return eventRegistry[uid];\n  }\n\n  function bootstrapHandler(element, fn) {\n    return function handler(event) {\n      event.delegateTarget = element;\n\n      if (handler.oneOff) {\n        EventHandler.off(element, event.type, fn);\n      }\n\n      return fn.apply(element, [event]);\n    };\n  }\n\n  function bootstrapDelegationHandler(element, selector, fn) {\n    return function handler(event) {\n      const domElements = element.querySelectorAll(selector);\n\n      for (let {\n        target\n      } = event; target && target !== this; target = target.parentNode) {\n        for (let i = domElements.length; i--;) {\n          if (domElements[i] === target) {\n            event.delegateTarget = target;\n\n            if (handler.oneOff) {\n              // eslint-disable-next-line unicorn/consistent-destructuring\n              EventHandler.off(element, event.type, selector, fn);\n            }\n\n            return fn.apply(target, [event]);\n          }\n        }\n      } // To please ESLint\n\n\n      return null;\n    };\n  }\n\n  function findHandler(events, handler, delegationSelector = null) {\n    const uidEventList = Object.keys(events);\n\n    for (let i = 0, len = uidEventList.length; i < len; i++) {\n      const event = events[uidEventList[i]];\n\n      if (event.originalHandler === handler && event.delegationSelector === delegationSelector) {\n        return event;\n      }\n    }\n\n    return null;\n  }\n\n  function normalizeParams(originalTypeEvent, handler, delegationFn) {\n    const delegation = typeof handler === 'string';\n    const originalHandler = delegation ? delegationFn : handler;\n    let typeEvent = getTypeEvent(originalTypeEvent);\n    const isNative = nativeEvents.has(typeEvent);\n\n    if (!isNative) {\n      typeEvent = originalTypeEvent;\n    }\n\n    return [delegation, originalHandler, typeEvent];\n  }\n\n  function addHandler(element, originalTypeEvent, handler, delegationFn, oneOff) {\n    if (typeof originalTypeEvent !== 'string' || !element) {\n      return;\n    }\n\n    if (!handler) {\n      handler = delegationFn;\n      delegationFn = null;\n    } // in case of mouseenter or mouseleave wrap the handler within a function that checks for its DOM position\n    // this prevents the handler from being dispatched the same way as mouseover or mouseout does\n\n\n    if (customEventsRegex.test(originalTypeEvent)) {\n      const wrapFn = fn => {\n        return function (event) {\n          if (!event.relatedTarget || event.relatedTarget !== event.delegateTarget && !event.delegateTarget.contains(event.relatedTarget)) {\n            return fn.call(this, event);\n          }\n        };\n      };\n\n      if (delegationFn) {\n        delegationFn = wrapFn(delegationFn);\n      } else {\n        handler = wrapFn(handler);\n      }\n    }\n\n    const [delegation, originalHandler, typeEvent] = normalizeParams(originalTypeEvent, handler, delegationFn);\n    const events = getEvent(element);\n    const handlers = events[typeEvent] || (events[typeEvent] = {});\n    const previousFn = findHandler(handlers, originalHandler, delegation ? handler : null);\n\n    if (previousFn) {\n      previousFn.oneOff = previousFn.oneOff && oneOff;\n      return;\n    }\n\n    const uid = getUidEvent(originalHandler, originalTypeEvent.replace(namespaceRegex, ''));\n    const fn = delegation ? bootstrapDelegationHandler(element, handler, delegationFn) : bootstrapHandler(element, handler);\n    fn.delegationSelector = delegation ? handler : null;\n    fn.originalHandler = originalHandler;\n    fn.oneOff = oneOff;\n    fn.uidEvent = uid;\n    handlers[uid] = fn;\n    element.addEventListener(typeEvent, fn, delegation);\n  }\n\n  function removeHandler(element, events, typeEvent, handler, delegationSelector) {\n    const fn = findHandler(events[typeEvent], handler, delegationSelector);\n\n    if (!fn) {\n      return;\n    }\n\n    element.removeEventListener(typeEvent, fn, Boolean(delegationSelector));\n    delete events[typeEvent][fn.uidEvent];\n  }\n\n  function removeNamespacedHandlers(element, events, typeEvent, namespace) {\n    const storeElementEvent = events[typeEvent] || {};\n    Object.keys(storeElementEvent).forEach(handlerKey => {\n      if (handlerKey.includes(namespace)) {\n        const event = storeElementEvent[handlerKey];\n        removeHandler(element, events, typeEvent, event.originalHandler, event.delegationSelector);\n      }\n    });\n  }\n\n  function getTypeEvent(event) {\n    // allow to get the native events from namespaced events ('click.bs.button' --> 'click')\n    event = event.replace(stripNameRegex, '');\n    return customEvents[event] || event;\n  }\n\n  const EventHandler = {\n    on(element, event, handler, delegationFn) {\n      addHandler(element, event, handler, delegationFn, false);\n    },\n\n    one(element, event, handler, delegationFn) {\n      addHandler(element, event, handler, delegationFn, true);\n    },\n\n    off(element, originalTypeEvent, handler, delegationFn) {\n      if (typeof originalTypeEvent !== 'string' || !element) {\n        return;\n      }\n\n      const [delegation, originalHandler, typeEvent] = normalizeParams(originalTypeEvent, handler, delegationFn);\n      const inNamespace = typeEvent !== originalTypeEvent;\n      const events = getEvent(element);\n      const isNamespace = originalTypeEvent.startsWith('.');\n\n      if (typeof originalHandler !== 'undefined') {\n        // Simplest case: handler is passed, remove that listener ONLY.\n        if (!events || !events[typeEvent]) {\n          return;\n        }\n\n        removeHandler(element, events, typeEvent, originalHandler, delegation ? handler : null);\n        return;\n      }\n\n      if (isNamespace) {\n        Object.keys(events).forEach(elementEvent => {\n          removeNamespacedHandlers(element, events, elementEvent, originalTypeEvent.slice(1));\n        });\n      }\n\n      const storeElementEvent = events[typeEvent] || {};\n      Object.keys(storeElementEvent).forEach(keyHandlers => {\n        const handlerKey = keyHandlers.replace(stripUidRegex, '');\n\n        if (!inNamespace || originalTypeEvent.includes(handlerKey)) {\n          const event = storeElementEvent[keyHandlers];\n          removeHandler(element, events, typeEvent, event.originalHandler, event.delegationSelector);\n        }\n      });\n    },\n\n    trigger(element, event, args) {\n      if (typeof event !== 'string' || !element) {\n        return null;\n      }\n\n      const $ = getjQuery();\n      const typeEvent = getTypeEvent(event);\n      const inNamespace = event !== typeEvent;\n      const isNative = nativeEvents.has(typeEvent);\n      let jQueryEvent;\n      let bubbles = true;\n      let nativeDispatch = true;\n      let defaultPrevented = false;\n      let evt = null;\n\n      if (inNamespace && $) {\n        jQueryEvent = $.Event(event, args);\n        $(element).trigger(jQueryEvent);\n        bubbles = !jQueryEvent.isPropagationStopped();\n        nativeDispatch = !jQueryEvent.isImmediatePropagationStopped();\n        defaultPrevented = jQueryEvent.isDefaultPrevented();\n      }\n\n      if (isNative) {\n        evt = document.createEvent('HTMLEvents');\n        evt.initEvent(typeEvent, bubbles, true);\n      } else {\n        evt = new CustomEvent(event, {\n          bubbles,\n          cancelable: true\n        });\n      } // merge custom information in our event\n\n\n      if (typeof args !== 'undefined') {\n        Object.keys(args).forEach(key => {\n          Object.defineProperty(evt, key, {\n            get() {\n              return args[key];\n            }\n\n          });\n        });\n      }\n\n      if (defaultPrevented) {\n        evt.preventDefault();\n      }\n\n      if (nativeDispatch) {\n        element.dispatchEvent(evt);\n      }\n\n      if (evt.defaultPrevented && typeof jQueryEvent !== 'undefined') {\n        jQueryEvent.preventDefault();\n      }\n\n      return evt;\n    }\n\n  };\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): dom/data.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n  const elementMap = new Map();\n  var Data = {\n    set(element, key, instance) {\n      if (!elementMap.has(element)) {\n        elementMap.set(element, new Map());\n      }\n\n      const instanceMap = elementMap.get(element); // make it clear we only want one instance per element\n      // can be removed later when multiple key/instances are fine to be used\n\n      if (!instanceMap.has(key) && instanceMap.size !== 0) {\n        // eslint-disable-next-line no-console\n        console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(instanceMap.keys())[0]}.`);\n        return;\n      }\n\n      instanceMap.set(key, instance);\n    },\n\n    get(element, key) {\n      if (elementMap.has(element)) {\n        return elementMap.get(element).get(key) || null;\n      }\n\n      return null;\n    },\n\n    remove(element, key) {\n      if (!elementMap.has(element)) {\n        return;\n      }\n\n      const instanceMap = elementMap.get(element);\n      instanceMap.delete(key); // free up element references if there are no instances left for an element\n\n      if (instanceMap.size === 0) {\n        elementMap.delete(element);\n      }\n    }\n\n  };\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): base-component.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const VERSION = '5.0.2';\n\n  class BaseComponent {\n    constructor(element) {\n      element = getElement(element);\n\n      if (!element) {\n        return;\n      }\n\n      this._element = element;\n      Data.set(this._element, this.constructor.DATA_KEY, this);\n    }\n\n    dispose() {\n      Data.remove(this._element, this.constructor.DATA_KEY);\n      EventHandler.off(this._element, this.constructor.EVENT_KEY);\n      Object.getOwnPropertyNames(this).forEach(propertyName => {\n        this[propertyName] = null;\n      });\n    }\n\n    _queueCallback(callback, element, isAnimated = true) {\n      executeAfterTransition(callback, element, isAnimated);\n    }\n    /** Static */\n\n\n    static getInstance(element) {\n      return Data.get(element, this.DATA_KEY);\n    }\n\n    static getOrCreateInstance(element, config = {}) {\n      return this.getInstance(element) || new this(element, typeof config === 'object' ? config : null);\n    }\n\n    static get VERSION() {\n      return VERSION;\n    }\n\n    static get NAME() {\n      throw new Error('You have to implement the static method \"NAME\", for each component!');\n    }\n\n    static get DATA_KEY() {\n      return `bs.${this.NAME}`;\n    }\n\n    static get EVENT_KEY() {\n      return `.${this.DATA_KEY}`;\n    }\n\n  }\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): alert.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$c = 'alert';\n  const DATA_KEY$b = 'bs.alert';\n  const EVENT_KEY$b = `.${DATA_KEY$b}`;\n  const DATA_API_KEY$8 = '.data-api';\n  const SELECTOR_DISMISS = '[data-bs-dismiss=\"alert\"]';\n  const EVENT_CLOSE = `close${EVENT_KEY$b}`;\n  const EVENT_CLOSED = `closed${EVENT_KEY$b}`;\n  const EVENT_CLICK_DATA_API$7 = `click${EVENT_KEY$b}${DATA_API_KEY$8}`;\n  const CLASS_NAME_ALERT = 'alert';\n  const CLASS_NAME_FADE$6 = 'fade';\n  const CLASS_NAME_SHOW$9 = 'show';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Alert extends BaseComponent {\n    // Getters\n    static get NAME() {\n      return NAME$c;\n    } // Public\n\n\n    close(element) {\n      const rootElement = element ? this._getRootElement(element) : this._element;\n\n      const customEvent = this._triggerCloseEvent(rootElement);\n\n      if (customEvent === null || customEvent.defaultPrevented) {\n        return;\n      }\n\n      this._removeElement(rootElement);\n    } // Private\n\n\n    _getRootElement(element) {\n      return getElementFromSelector(element) || element.closest(`.${CLASS_NAME_ALERT}`);\n    }\n\n    _triggerCloseEvent(element) {\n      return EventHandler.trigger(element, EVENT_CLOSE);\n    }\n\n    _removeElement(element) {\n      element.classList.remove(CLASS_NAME_SHOW$9);\n      const isAnimated = element.classList.contains(CLASS_NAME_FADE$6);\n\n      this._queueCallback(() => this._destroyElement(element), element, isAnimated);\n    }\n\n    _destroyElement(element) {\n      element.remove();\n      EventHandler.trigger(element, EVENT_CLOSED);\n    } // Static\n\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = Alert.getOrCreateInstance(this);\n\n        if (config === 'close') {\n          data[config](this);\n        }\n      });\n    }\n\n    static handleDismiss(alertInstance) {\n      return function (event) {\n        if (event) {\n          event.preventDefault();\n        }\n\n        alertInstance.close(this);\n      };\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(document, EVENT_CLICK_DATA_API$7, SELECTOR_DISMISS, Alert.handleDismiss(new Alert()));\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Alert to jQuery only if jQuery is present\n   */\n\n  defineJQueryPlugin(Alert);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): button.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$b = 'button';\n  const DATA_KEY$a = 'bs.button';\n  const EVENT_KEY$a = `.${DATA_KEY$a}`;\n  const DATA_API_KEY$7 = '.data-api';\n  const CLASS_NAME_ACTIVE$3 = 'active';\n  const SELECTOR_DATA_TOGGLE$5 = '[data-bs-toggle=\"button\"]';\n  const EVENT_CLICK_DATA_API$6 = `click${EVENT_KEY$a}${DATA_API_KEY$7}`;\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Button extends BaseComponent {\n    // Getters\n    static get NAME() {\n      return NAME$b;\n    } // Public\n\n\n    toggle() {\n      // Toggle class and sync the `aria-pressed` attribute with the return value of the `.toggle()` method\n      this._element.setAttribute('aria-pressed', this._element.classList.toggle(CLASS_NAME_ACTIVE$3));\n    } // Static\n\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = Button.getOrCreateInstance(this);\n\n        if (config === 'toggle') {\n          data[config]();\n        }\n      });\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(document, EVENT_CLICK_DATA_API$6, SELECTOR_DATA_TOGGLE$5, event => {\n    event.preventDefault();\n    const button = event.target.closest(SELECTOR_DATA_TOGGLE$5);\n    const data = Button.getOrCreateInstance(button);\n    data.toggle();\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Button to jQuery only if jQuery is present\n   */\n\n  defineJQueryPlugin(Button);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): dom/manipulator.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  function normalizeData(val) {\n    if (val === 'true') {\n      return true;\n    }\n\n    if (val === 'false') {\n      return false;\n    }\n\n    if (val === Number(val).toString()) {\n      return Number(val);\n    }\n\n    if (val === '' || val === 'null') {\n      return null;\n    }\n\n    return val;\n  }\n\n  function normalizeDataKey(key) {\n    return key.replace(/[A-Z]/g, chr => `-${chr.toLowerCase()}`);\n  }\n\n  const Manipulator = {\n    setDataAttribute(element, key, value) {\n      element.setAttribute(`data-bs-${normalizeDataKey(key)}`, value);\n    },\n\n    removeDataAttribute(element, key) {\n      element.removeAttribute(`data-bs-${normalizeDataKey(key)}`);\n    },\n\n    getDataAttributes(element) {\n      if (!element) {\n        return {};\n      }\n\n      const attributes = {};\n      Object.keys(element.dataset).filter(key => key.startsWith('bs')).forEach(key => {\n        let pureKey = key.replace(/^bs/, '');\n        pureKey = pureKey.charAt(0).toLowerCase() + pureKey.slice(1, pureKey.length);\n        attributes[pureKey] = normalizeData(element.dataset[key]);\n      });\n      return attributes;\n    },\n\n    getDataAttribute(element, key) {\n      return normalizeData(element.getAttribute(`data-bs-${normalizeDataKey(key)}`));\n    },\n\n    offset(element) {\n      const rect = element.getBoundingClientRect();\n      return {\n        top: rect.top + document.body.scrollTop,\n        left: rect.left + document.body.scrollLeft\n      };\n    },\n\n    position(element) {\n      return {\n        top: element.offsetTop,\n        left: element.offsetLeft\n      };\n    }\n\n  };\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): carousel.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$a = 'carousel';\n  const DATA_KEY$9 = 'bs.carousel';\n  const EVENT_KEY$9 = `.${DATA_KEY$9}`;\n  const DATA_API_KEY$6 = '.data-api';\n  const ARROW_LEFT_KEY = 'ArrowLeft';\n  const ARROW_RIGHT_KEY = 'ArrowRight';\n  const TOUCHEVENT_COMPAT_WAIT = 500; // Time for mouse compat events to fire after touch\n\n  const SWIPE_THRESHOLD = 40;\n  const Default$9 = {\n    interval: 5000,\n    keyboard: true,\n    slide: false,\n    pause: 'hover',\n    wrap: true,\n    touch: true\n  };\n  const DefaultType$9 = {\n    interval: '(number|boolean)',\n    keyboard: 'boolean',\n    slide: '(boolean|string)',\n    pause: '(string|boolean)',\n    wrap: 'boolean',\n    touch: 'boolean'\n  };\n  const ORDER_NEXT = 'next';\n  const ORDER_PREV = 'prev';\n  const DIRECTION_LEFT = 'left';\n  const DIRECTION_RIGHT = 'right';\n  const KEY_TO_DIRECTION = {\n    [ARROW_LEFT_KEY]: DIRECTION_RIGHT,\n    [ARROW_RIGHT_KEY]: DIRECTION_LEFT\n  };\n  const EVENT_SLIDE = `slide${EVENT_KEY$9}`;\n  const EVENT_SLID = `slid${EVENT_KEY$9}`;\n  const EVENT_KEYDOWN = `keydown${EVENT_KEY$9}`;\n  const EVENT_MOUSEENTER = `mouseenter${EVENT_KEY$9}`;\n  const EVENT_MOUSELEAVE = `mouseleave${EVENT_KEY$9}`;\n  const EVENT_TOUCHSTART = `touchstart${EVENT_KEY$9}`;\n  const EVENT_TOUCHMOVE = `touchmove${EVENT_KEY$9}`;\n  const EVENT_TOUCHEND = `touchend${EVENT_KEY$9}`;\n  const EVENT_POINTERDOWN = `pointerdown${EVENT_KEY$9}`;\n  const EVENT_POINTERUP = `pointerup${EVENT_KEY$9}`;\n  const EVENT_DRAG_START = `dragstart${EVENT_KEY$9}`;\n  const EVENT_LOAD_DATA_API$2 = `load${EVENT_KEY$9}${DATA_API_KEY$6}`;\n  const EVENT_CLICK_DATA_API$5 = `click${EVENT_KEY$9}${DATA_API_KEY$6}`;\n  const CLASS_NAME_CAROUSEL = 'carousel';\n  const CLASS_NAME_ACTIVE$2 = 'active';\n  const CLASS_NAME_SLIDE = 'slide';\n  const CLASS_NAME_END = 'carousel-item-end';\n  const CLASS_NAME_START = 'carousel-item-start';\n  const CLASS_NAME_NEXT = 'carousel-item-next';\n  const CLASS_NAME_PREV = 'carousel-item-prev';\n  const CLASS_NAME_POINTER_EVENT = 'pointer-event';\n  const SELECTOR_ACTIVE$1 = '.active';\n  const SELECTOR_ACTIVE_ITEM = '.active.carousel-item';\n  const SELECTOR_ITEM = '.carousel-item';\n  const SELECTOR_ITEM_IMG = '.carousel-item img';\n  const SELECTOR_NEXT_PREV = '.carousel-item-next, .carousel-item-prev';\n  const SELECTOR_INDICATORS = '.carousel-indicators';\n  const SELECTOR_INDICATOR = '[data-bs-target]';\n  const SELECTOR_DATA_SLIDE = '[data-bs-slide], [data-bs-slide-to]';\n  const SELECTOR_DATA_RIDE = '[data-bs-ride=\"carousel\"]';\n  const POINTER_TYPE_TOUCH = 'touch';\n  const POINTER_TYPE_PEN = 'pen';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Carousel extends BaseComponent {\n    constructor(element, config) {\n      super(element);\n      this._items = null;\n      this._interval = null;\n      this._activeElement = null;\n      this._isPaused = false;\n      this._isSliding = false;\n      this.touchTimeout = null;\n      this.touchStartX = 0;\n      this.touchDeltaX = 0;\n      this._config = this._getConfig(config);\n      this._indicatorsElement = SelectorEngine.findOne(SELECTOR_INDICATORS, this._element);\n      this._touchSupported = 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0;\n      this._pointerEvent = Boolean(window.PointerEvent);\n\n      this._addEventListeners();\n    } // Getters\n\n\n    static get Default() {\n      return Default$9;\n    }\n\n    static get NAME() {\n      return NAME$a;\n    } // Public\n\n\n    next() {\n      this._slide(ORDER_NEXT);\n    }\n\n    nextWhenVisible() {\n      // Don't call next when the page isn't visible\n      // or the carousel or its parent isn't visible\n      if (!document.hidden && isVisible(this._element)) {\n        this.next();\n      }\n    }\n\n    prev() {\n      this._slide(ORDER_PREV);\n    }\n\n    pause(event) {\n      if (!event) {\n        this._isPaused = true;\n      }\n\n      if (SelectorEngine.findOne(SELECTOR_NEXT_PREV, this._element)) {\n        triggerTransitionEnd(this._element);\n        this.cycle(true);\n      }\n\n      clearInterval(this._interval);\n      this._interval = null;\n    }\n\n    cycle(event) {\n      if (!event) {\n        this._isPaused = false;\n      }\n\n      if (this._interval) {\n        clearInterval(this._interval);\n        this._interval = null;\n      }\n\n      if (this._config && this._config.interval && !this._isPaused) {\n        this._updateInterval();\n\n        this._interval = setInterval((document.visibilityState ? this.nextWhenVisible : this.next).bind(this), this._config.interval);\n      }\n    }\n\n    to(index) {\n      this._activeElement = SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element);\n\n      const activeIndex = this._getItemIndex(this._activeElement);\n\n      if (index > this._items.length - 1 || index < 0) {\n        return;\n      }\n\n      if (this._isSliding) {\n        EventHandler.one(this._element, EVENT_SLID, () => this.to(index));\n        return;\n      }\n\n      if (activeIndex === index) {\n        this.pause();\n        this.cycle();\n        return;\n      }\n\n      const order = index > activeIndex ? ORDER_NEXT : ORDER_PREV;\n\n      this._slide(order, this._items[index]);\n    } // Private\n\n\n    _getConfig(config) {\n      config = { ...Default$9,\n        ...Manipulator.getDataAttributes(this._element),\n        ...(typeof config === 'object' ? config : {})\n      };\n      typeCheckConfig(NAME$a, config, DefaultType$9);\n      return config;\n    }\n\n    _handleSwipe() {\n      const absDeltax = Math.abs(this.touchDeltaX);\n\n      if (absDeltax <= SWIPE_THRESHOLD) {\n        return;\n      }\n\n      const direction = absDeltax / this.touchDeltaX;\n      this.touchDeltaX = 0;\n\n      if (!direction) {\n        return;\n      }\n\n      this._slide(direction > 0 ? DIRECTION_RIGHT : DIRECTION_LEFT);\n    }\n\n    _addEventListeners() {\n      if (this._config.keyboard) {\n        EventHandler.on(this._element, EVENT_KEYDOWN, event => this._keydown(event));\n      }\n\n      if (this._config.pause === 'hover') {\n        EventHandler.on(this._element, EVENT_MOUSEENTER, event => this.pause(event));\n        EventHandler.on(this._element, EVENT_MOUSELEAVE, event => this.cycle(event));\n      }\n\n      if (this._config.touch && this._touchSupported) {\n        this._addTouchEventListeners();\n      }\n    }\n\n    _addTouchEventListeners() {\n      const start = event => {\n        if (this._pointerEvent && (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH)) {\n          this.touchStartX = event.clientX;\n        } else if (!this._pointerEvent) {\n          this.touchStartX = event.touches[0].clientX;\n        }\n      };\n\n      const move = event => {\n        // ensure swiping with one touch and not pinching\n        this.touchDeltaX = event.touches && event.touches.length > 1 ? 0 : event.touches[0].clientX - this.touchStartX;\n      };\n\n      const end = event => {\n        if (this._pointerEvent && (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH)) {\n          this.touchDeltaX = event.clientX - this.touchStartX;\n        }\n\n        this._handleSwipe();\n\n        if (this._config.pause === 'hover') {\n          // If it's a touch-enabled device, mouseenter/leave are fired as\n          // part of the mouse compatibility events on first tap - the carousel\n          // would stop cycling until user tapped out of it;\n          // here, we listen for touchend, explicitly pause the carousel\n          // (as if it's the second time we tap on it, mouseenter compat event\n          // is NOT fired) and after a timeout (to allow for mouse compatibility\n          // events to fire) we explicitly restart cycling\n          this.pause();\n\n          if (this.touchTimeout) {\n            clearTimeout(this.touchTimeout);\n          }\n\n          this.touchTimeout = setTimeout(event => this.cycle(event), TOUCHEVENT_COMPAT_WAIT + this._config.interval);\n        }\n      };\n\n      SelectorEngine.find(SELECTOR_ITEM_IMG, this._element).forEach(itemImg => {\n        EventHandler.on(itemImg, EVENT_DRAG_START, e => e.preventDefault());\n      });\n\n      if (this._pointerEvent) {\n        EventHandler.on(this._element, EVENT_POINTERDOWN, event => start(event));\n        EventHandler.on(this._element, EVENT_POINTERUP, event => end(event));\n\n        this._element.classList.add(CLASS_NAME_POINTER_EVENT);\n      } else {\n        EventHandler.on(this._element, EVENT_TOUCHSTART, event => start(event));\n        EventHandler.on(this._element, EVENT_TOUCHMOVE, event => move(event));\n        EventHandler.on(this._element, EVENT_TOUCHEND, event => end(event));\n      }\n    }\n\n    _keydown(event) {\n      if (/input|textarea/i.test(event.target.tagName)) {\n        return;\n      }\n\n      const direction = KEY_TO_DIRECTION[event.key];\n\n      if (direction) {\n        event.preventDefault();\n\n        this._slide(direction);\n      }\n    }\n\n    _getItemIndex(element) {\n      this._items = element && element.parentNode ? SelectorEngine.find(SELECTOR_ITEM, element.parentNode) : [];\n      return this._items.indexOf(element);\n    }\n\n    _getItemByOrder(order, activeElement) {\n      const isNext = order === ORDER_NEXT;\n      return getNextActiveElement(this._items, activeElement, isNext, this._config.wrap);\n    }\n\n    _triggerSlideEvent(relatedTarget, eventDirectionName) {\n      const targetIndex = this._getItemIndex(relatedTarget);\n\n      const fromIndex = this._getItemIndex(SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element));\n\n      return EventHandler.trigger(this._element, EVENT_SLIDE, {\n        relatedTarget,\n        direction: eventDirectionName,\n        from: fromIndex,\n        to: targetIndex\n      });\n    }\n\n    _setActiveIndicatorElement(element) {\n      if (this._indicatorsElement) {\n        const activeIndicator = SelectorEngine.findOne(SELECTOR_ACTIVE$1, this._indicatorsElement);\n        activeIndicator.classList.remove(CLASS_NAME_ACTIVE$2);\n        activeIndicator.removeAttribute('aria-current');\n        const indicators = SelectorEngine.find(SELECTOR_INDICATOR, this._indicatorsElement);\n\n        for (let i = 0; i < indicators.length; i++) {\n          if (Number.parseInt(indicators[i].getAttribute('data-bs-slide-to'), 10) === this._getItemIndex(element)) {\n            indicators[i].classList.add(CLASS_NAME_ACTIVE$2);\n            indicators[i].setAttribute('aria-current', 'true');\n            break;\n          }\n        }\n      }\n    }\n\n    _updateInterval() {\n      const element = this._activeElement || SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element);\n\n      if (!element) {\n        return;\n      }\n\n      const elementInterval = Number.parseInt(element.getAttribute('data-bs-interval'), 10);\n\n      if (elementInterval) {\n        this._config.defaultInterval = this._config.defaultInterval || this._config.interval;\n        this._config.interval = elementInterval;\n      } else {\n        this._config.interval = this._config.defaultInterval || this._config.interval;\n      }\n    }\n\n    _slide(directionOrOrder, element) {\n      const order = this._directionToOrder(directionOrOrder);\n\n      const activeElement = SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element);\n\n      const activeElementIndex = this._getItemIndex(activeElement);\n\n      const nextElement = element || this._getItemByOrder(order, activeElement);\n\n      const nextElementIndex = this._getItemIndex(nextElement);\n\n      const isCycling = Boolean(this._interval);\n      const isNext = order === ORDER_NEXT;\n      const directionalClassName = isNext ? CLASS_NAME_START : CLASS_NAME_END;\n      const orderClassName = isNext ? CLASS_NAME_NEXT : CLASS_NAME_PREV;\n\n      const eventDirectionName = this._orderToDirection(order);\n\n      if (nextElement && nextElement.classList.contains(CLASS_NAME_ACTIVE$2)) {\n        this._isSliding = false;\n        return;\n      }\n\n      if (this._isSliding) {\n        return;\n      }\n\n      const slideEvent = this._triggerSlideEvent(nextElement, eventDirectionName);\n\n      if (slideEvent.defaultPrevented) {\n        return;\n      }\n\n      if (!activeElement || !nextElement) {\n        // Some weirdness is happening, so we bail\n        return;\n      }\n\n      this._isSliding = true;\n\n      if (isCycling) {\n        this.pause();\n      }\n\n      this._setActiveIndicatorElement(nextElement);\n\n      this._activeElement = nextElement;\n\n      const triggerSlidEvent = () => {\n        EventHandler.trigger(this._element, EVENT_SLID, {\n          relatedTarget: nextElement,\n          direction: eventDirectionName,\n          from: activeElementIndex,\n          to: nextElementIndex\n        });\n      };\n\n      if (this._element.classList.contains(CLASS_NAME_SLIDE)) {\n        nextElement.classList.add(orderClassName);\n        reflow(nextElement);\n        activeElement.classList.add(directionalClassName);\n        nextElement.classList.add(directionalClassName);\n\n        const completeCallBack = () => {\n          nextElement.classList.remove(directionalClassName, orderClassName);\n          nextElement.classList.add(CLASS_NAME_ACTIVE$2);\n          activeElement.classList.remove(CLASS_NAME_ACTIVE$2, orderClassName, directionalClassName);\n          this._isSliding = false;\n          setTimeout(triggerSlidEvent, 0);\n        };\n\n        this._queueCallback(completeCallBack, activeElement, true);\n      } else {\n        activeElement.classList.remove(CLASS_NAME_ACTIVE$2);\n        nextElement.classList.add(CLASS_NAME_ACTIVE$2);\n        this._isSliding = false;\n        triggerSlidEvent();\n      }\n\n      if (isCycling) {\n        this.cycle();\n      }\n    }\n\n    _directionToOrder(direction) {\n      if (![DIRECTION_RIGHT, DIRECTION_LEFT].includes(direction)) {\n        return direction;\n      }\n\n      if (isRTL()) {\n        return direction === DIRECTION_LEFT ? ORDER_PREV : ORDER_NEXT;\n      }\n\n      return direction === DIRECTION_LEFT ? ORDER_NEXT : ORDER_PREV;\n    }\n\n    _orderToDirection(order) {\n      if (![ORDER_NEXT, ORDER_PREV].includes(order)) {\n        return order;\n      }\n\n      if (isRTL()) {\n        return order === ORDER_PREV ? DIRECTION_LEFT : DIRECTION_RIGHT;\n      }\n\n      return order === ORDER_PREV ? DIRECTION_RIGHT : DIRECTION_LEFT;\n    } // Static\n\n\n    static carouselInterface(element, config) {\n      const data = Carousel.getOrCreateInstance(element, config);\n      let {\n        _config\n      } = data;\n\n      if (typeof config === 'object') {\n        _config = { ..._config,\n          ...config\n        };\n      }\n\n      const action = typeof config === 'string' ? config : _config.slide;\n\n      if (typeof config === 'number') {\n        data.to(config);\n      } else if (typeof action === 'string') {\n        if (typeof data[action] === 'undefined') {\n          throw new TypeError(`No method named \"${action}\"`);\n        }\n\n        data[action]();\n      } else if (_config.interval && _config.ride) {\n        data.pause();\n        data.cycle();\n      }\n    }\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        Carousel.carouselInterface(this, config);\n      });\n    }\n\n    static dataApiClickHandler(event) {\n      const target = getElementFromSelector(this);\n\n      if (!target || !target.classList.contains(CLASS_NAME_CAROUSEL)) {\n        return;\n      }\n\n      const config = { ...Manipulator.getDataAttributes(target),\n        ...Manipulator.getDataAttributes(this)\n      };\n      const slideIndex = this.getAttribute('data-bs-slide-to');\n\n      if (slideIndex) {\n        config.interval = false;\n      }\n\n      Carousel.carouselInterface(target, config);\n\n      if (slideIndex) {\n        Carousel.getInstance(target).to(slideIndex);\n      }\n\n      event.preventDefault();\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(document, EVENT_CLICK_DATA_API$5, SELECTOR_DATA_SLIDE, Carousel.dataApiClickHandler);\n  EventHandler.on(window, EVENT_LOAD_DATA_API$2, () => {\n    const carousels = SelectorEngine.find(SELECTOR_DATA_RIDE);\n\n    for (let i = 0, len = carousels.length; i < len; i++) {\n      Carousel.carouselInterface(carousels[i], Carousel.getInstance(carousels[i]));\n    }\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Carousel to jQuery only if jQuery is present\n   */\n\n  defineJQueryPlugin(Carousel);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): collapse.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$9 = 'collapse';\n  const DATA_KEY$8 = 'bs.collapse';\n  const EVENT_KEY$8 = `.${DATA_KEY$8}`;\n  const DATA_API_KEY$5 = '.data-api';\n  const Default$8 = {\n    toggle: true,\n    parent: ''\n  };\n  const DefaultType$8 = {\n    toggle: 'boolean',\n    parent: '(string|element)'\n  };\n  const EVENT_SHOW$5 = `show${EVENT_KEY$8}`;\n  const EVENT_SHOWN$5 = `shown${EVENT_KEY$8}`;\n  const EVENT_HIDE$5 = `hide${EVENT_KEY$8}`;\n  const EVENT_HIDDEN$5 = `hidden${EVENT_KEY$8}`;\n  const EVENT_CLICK_DATA_API$4 = `click${EVENT_KEY$8}${DATA_API_KEY$5}`;\n  const CLASS_NAME_SHOW$8 = 'show';\n  const CLASS_NAME_COLLAPSE = 'collapse';\n  const CLASS_NAME_COLLAPSING = 'collapsing';\n  const CLASS_NAME_COLLAPSED = 'collapsed';\n  const WIDTH = 'width';\n  const HEIGHT = 'height';\n  const SELECTOR_ACTIVES = '.show, .collapsing';\n  const SELECTOR_DATA_TOGGLE$4 = '[data-bs-toggle=\"collapse\"]';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Collapse extends BaseComponent {\n    constructor(element, config) {\n      super(element);\n      this._isTransitioning = false;\n      this._config = this._getConfig(config);\n      this._triggerArray = SelectorEngine.find(`${SELECTOR_DATA_TOGGLE$4}[href=\"#${this._element.id}\"],` + `${SELECTOR_DATA_TOGGLE$4}[data-bs-target=\"#${this._element.id}\"]`);\n      const toggleList = SelectorEngine.find(SELECTOR_DATA_TOGGLE$4);\n\n      for (let i = 0, len = toggleList.length; i < len; i++) {\n        const elem = toggleList[i];\n        const selector = getSelectorFromElement(elem);\n        const filterElement = SelectorEngine.find(selector).filter(foundElem => foundElem === this._element);\n\n        if (selector !== null && filterElement.length) {\n          this._selector = selector;\n\n          this._triggerArray.push(elem);\n        }\n      }\n\n      this._parent = this._config.parent ? this._getParent() : null;\n\n      if (!this._config.parent) {\n        this._addAriaAndCollapsedClass(this._element, this._triggerArray);\n      }\n\n      if (this._config.toggle) {\n        this.toggle();\n      }\n    } // Getters\n\n\n    static get Default() {\n      return Default$8;\n    }\n\n    static get NAME() {\n      return NAME$9;\n    } // Public\n\n\n    toggle() {\n      if (this._element.classList.contains(CLASS_NAME_SHOW$8)) {\n        this.hide();\n      } else {\n        this.show();\n      }\n    }\n\n    show() {\n      if (this._isTransitioning || this._element.classList.contains(CLASS_NAME_SHOW$8)) {\n        return;\n      }\n\n      let actives;\n      let activesData;\n\n      if (this._parent) {\n        actives = SelectorEngine.find(SELECTOR_ACTIVES, this._parent).filter(elem => {\n          if (typeof this._config.parent === 'string') {\n            return elem.getAttribute('data-bs-parent') === this._config.parent;\n          }\n\n          return elem.classList.contains(CLASS_NAME_COLLAPSE);\n        });\n\n        if (actives.length === 0) {\n          actives = null;\n        }\n      }\n\n      const container = SelectorEngine.findOne(this._selector);\n\n      if (actives) {\n        const tempActiveData = actives.find(elem => container !== elem);\n        activesData = tempActiveData ? Collapse.getInstance(tempActiveData) : null;\n\n        if (activesData && activesData._isTransitioning) {\n          return;\n        }\n      }\n\n      const startEvent = EventHandler.trigger(this._element, EVENT_SHOW$5);\n\n      if (startEvent.defaultPrevented) {\n        return;\n      }\n\n      if (actives) {\n        actives.forEach(elemActive => {\n          if (container !== elemActive) {\n            Collapse.collapseInterface(elemActive, 'hide');\n          }\n\n          if (!activesData) {\n            Data.set(elemActive, DATA_KEY$8, null);\n          }\n        });\n      }\n\n      const dimension = this._getDimension();\n\n      this._element.classList.remove(CLASS_NAME_COLLAPSE);\n\n      this._element.classList.add(CLASS_NAME_COLLAPSING);\n\n      this._element.style[dimension] = 0;\n\n      if (this._triggerArray.length) {\n        this._triggerArray.forEach(element => {\n          element.classList.remove(CLASS_NAME_COLLAPSED);\n          element.setAttribute('aria-expanded', true);\n        });\n      }\n\n      this.setTransitioning(true);\n\n      const complete = () => {\n        this._element.classList.remove(CLASS_NAME_COLLAPSING);\n\n        this._element.classList.add(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$8);\n\n        this._element.style[dimension] = '';\n        this.setTransitioning(false);\n        EventHandler.trigger(this._element, EVENT_SHOWN$5);\n      };\n\n      const capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1);\n      const scrollSize = `scroll${capitalizedDimension}`;\n\n      this._queueCallback(complete, this._element, true);\n\n      this._element.style[dimension] = `${this._element[scrollSize]}px`;\n    }\n\n    hide() {\n      if (this._isTransitioning || !this._element.classList.contains(CLASS_NAME_SHOW$8)) {\n        return;\n      }\n\n      const startEvent = EventHandler.trigger(this._element, EVENT_HIDE$5);\n\n      if (startEvent.defaultPrevented) {\n        return;\n      }\n\n      const dimension = this._getDimension();\n\n      this._element.style[dimension] = `${this._element.getBoundingClientRect()[dimension]}px`;\n      reflow(this._element);\n\n      this._element.classList.add(CLASS_NAME_COLLAPSING);\n\n      this._element.classList.remove(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$8);\n\n      const triggerArrayLength = this._triggerArray.length;\n\n      if (triggerArrayLength > 0) {\n        for (let i = 0; i < triggerArrayLength; i++) {\n          const trigger = this._triggerArray[i];\n          const elem = getElementFromSelector(trigger);\n\n          if (elem && !elem.classList.contains(CLASS_NAME_SHOW$8)) {\n            trigger.classList.add(CLASS_NAME_COLLAPSED);\n            trigger.setAttribute('aria-expanded', false);\n          }\n        }\n      }\n\n      this.setTransitioning(true);\n\n      const complete = () => {\n        this.setTransitioning(false);\n\n        this._element.classList.remove(CLASS_NAME_COLLAPSING);\n\n        this._element.classList.add(CLASS_NAME_COLLAPSE);\n\n        EventHandler.trigger(this._element, EVENT_HIDDEN$5);\n      };\n\n      this._element.style[dimension] = '';\n\n      this._queueCallback(complete, this._element, true);\n    }\n\n    setTransitioning(isTransitioning) {\n      this._isTransitioning = isTransitioning;\n    } // Private\n\n\n    _getConfig(config) {\n      config = { ...Default$8,\n        ...config\n      };\n      config.toggle = Boolean(config.toggle); // Coerce string values\n\n      typeCheckConfig(NAME$9, config, DefaultType$8);\n      return config;\n    }\n\n    _getDimension() {\n      return this._element.classList.contains(WIDTH) ? WIDTH : HEIGHT;\n    }\n\n    _getParent() {\n      let {\n        parent\n      } = this._config;\n      parent = getElement(parent);\n      const selector = `${SELECTOR_DATA_TOGGLE$4}[data-bs-parent=\"${parent}\"]`;\n      SelectorEngine.find(selector, parent).forEach(element => {\n        const selected = getElementFromSelector(element);\n\n        this._addAriaAndCollapsedClass(selected, [element]);\n      });\n      return parent;\n    }\n\n    _addAriaAndCollapsedClass(element, triggerArray) {\n      if (!element || !triggerArray.length) {\n        return;\n      }\n\n      const isOpen = element.classList.contains(CLASS_NAME_SHOW$8);\n      triggerArray.forEach(elem => {\n        if (isOpen) {\n          elem.classList.remove(CLASS_NAME_COLLAPSED);\n        } else {\n          elem.classList.add(CLASS_NAME_COLLAPSED);\n        }\n\n        elem.setAttribute('aria-expanded', isOpen);\n      });\n    } // Static\n\n\n    static collapseInterface(element, config) {\n      let data = Collapse.getInstance(element);\n      const _config = { ...Default$8,\n        ...Manipulator.getDataAttributes(element),\n        ...(typeof config === 'object' && config ? config : {})\n      };\n\n      if (!data && _config.toggle && typeof config === 'string' && /show|hide/.test(config)) {\n        _config.toggle = false;\n      }\n\n      if (!data) {\n        data = new Collapse(element, _config);\n      }\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config]();\n      }\n    }\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        Collapse.collapseInterface(this, config);\n      });\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(document, EVENT_CLICK_DATA_API$4, SELECTOR_DATA_TOGGLE$4, function (event) {\n    // preventDefault only for <a> elements (which change the URL) not inside the collapsible element\n    if (event.target.tagName === 'A' || event.delegateTarget && event.delegateTarget.tagName === 'A') {\n      event.preventDefault();\n    }\n\n    const triggerData = Manipulator.getDataAttributes(this);\n    const selector = getSelectorFromElement(this);\n    const selectorElements = SelectorEngine.find(selector);\n    selectorElements.forEach(element => {\n      const data = Collapse.getInstance(element);\n      let config;\n\n      if (data) {\n        // update parent attribute\n        if (data._parent === null && typeof triggerData.parent === 'string') {\n          data._config.parent = triggerData.parent;\n          data._parent = data._getParent();\n        }\n\n        config = 'toggle';\n      } else {\n        config = triggerData;\n      }\n\n      Collapse.collapseInterface(element, config);\n    });\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Collapse to jQuery only if jQuery is present\n   */\n\n  defineJQueryPlugin(Collapse);\n\n  var top = 'top';\n  var bottom = 'bottom';\n  var right = 'right';\n  var left = 'left';\n  var auto = 'auto';\n  var basePlacements = [top, bottom, right, left];\n  var start = 'start';\n  var end = 'end';\n  var clippingParents = 'clippingParents';\n  var viewport = 'viewport';\n  var popper = 'popper';\n  var reference = 'reference';\n  var variationPlacements = /*#__PURE__*/basePlacements.reduce(function (acc, placement) {\n    return acc.concat([placement + \"-\" + start, placement + \"-\" + end]);\n  }, []);\n  var placements = /*#__PURE__*/[].concat(basePlacements, [auto]).reduce(function (acc, placement) {\n    return acc.concat([placement, placement + \"-\" + start, placement + \"-\" + end]);\n  }, []); // modifiers that need to read the DOM\n\n  var beforeRead = 'beforeRead';\n  var read = 'read';\n  var afterRead = 'afterRead'; // pure-logic modifiers\n\n  var beforeMain = 'beforeMain';\n  var main = 'main';\n  var afterMain = 'afterMain'; // modifier with the purpose to write to the DOM (or write into a framework state)\n\n  var beforeWrite = 'beforeWrite';\n  var write = 'write';\n  var afterWrite = 'afterWrite';\n  var modifierPhases = [beforeRead, read, afterRead, beforeMain, main, afterMain, beforeWrite, write, afterWrite];\n\n  function getNodeName(element) {\n    return element ? (element.nodeName || '').toLowerCase() : null;\n  }\n\n  function getWindow(node) {\n    if (node == null) {\n      return window;\n    }\n\n    if (node.toString() !== '[object Window]') {\n      var ownerDocument = node.ownerDocument;\n      return ownerDocument ? ownerDocument.defaultView || window : window;\n    }\n\n    return node;\n  }\n\n  function isElement(node) {\n    var OwnElement = getWindow(node).Element;\n    return node instanceof OwnElement || node instanceof Element;\n  }\n\n  function isHTMLElement(node) {\n    var OwnElement = getWindow(node).HTMLElement;\n    return node instanceof OwnElement || node instanceof HTMLElement;\n  }\n\n  function isShadowRoot(node) {\n    // IE 11 has no ShadowRoot\n    if (typeof ShadowRoot === 'undefined') {\n      return false;\n    }\n\n    var OwnElement = getWindow(node).ShadowRoot;\n    return node instanceof OwnElement || node instanceof ShadowRoot;\n  }\n\n  // and applies them to the HTMLElements such as popper and arrow\n\n  function applyStyles(_ref) {\n    var state = _ref.state;\n    Object.keys(state.elements).forEach(function (name) {\n      var style = state.styles[name] || {};\n      var attributes = state.attributes[name] || {};\n      var element = state.elements[name]; // arrow is optional + virtual elements\n\n      if (!isHTMLElement(element) || !getNodeName(element)) {\n        return;\n      } // Flow doesn't support to extend this property, but it's the most\n      // effective way to apply styles to an HTMLElement\n      // $FlowFixMe[cannot-write]\n\n\n      Object.assign(element.style, style);\n      Object.keys(attributes).forEach(function (name) {\n        var value = attributes[name];\n\n        if (value === false) {\n          element.removeAttribute(name);\n        } else {\n          element.setAttribute(name, value === true ? '' : value);\n        }\n      });\n    });\n  }\n\n  function effect$2(_ref2) {\n    var state = _ref2.state;\n    var initialStyles = {\n      popper: {\n        position: state.options.strategy,\n        left: '0',\n        top: '0',\n        margin: '0'\n      },\n      arrow: {\n        position: 'absolute'\n      },\n      reference: {}\n    };\n    Object.assign(state.elements.popper.style, initialStyles.popper);\n    state.styles = initialStyles;\n\n    if (state.elements.arrow) {\n      Object.assign(state.elements.arrow.style, initialStyles.arrow);\n    }\n\n    return function () {\n      Object.keys(state.elements).forEach(function (name) {\n        var element = state.elements[name];\n        var attributes = state.attributes[name] || {};\n        var styleProperties = Object.keys(state.styles.hasOwnProperty(name) ? state.styles[name] : initialStyles[name]); // Set all values to an empty string to unset them\n\n        var style = styleProperties.reduce(function (style, property) {\n          style[property] = '';\n          return style;\n        }, {}); // arrow is optional + virtual elements\n\n        if (!isHTMLElement(element) || !getNodeName(element)) {\n          return;\n        }\n\n        Object.assign(element.style, style);\n        Object.keys(attributes).forEach(function (attribute) {\n          element.removeAttribute(attribute);\n        });\n      });\n    };\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  var applyStyles$1 = {\n    name: 'applyStyles',\n    enabled: true,\n    phase: 'write',\n    fn: applyStyles,\n    effect: effect$2,\n    requires: ['computeStyles']\n  };\n\n  function getBasePlacement(placement) {\n    return placement.split('-')[0];\n  }\n\n  function getBoundingClientRect(element) {\n    var rect = element.getBoundingClientRect();\n    return {\n      width: rect.width,\n      height: rect.height,\n      top: rect.top,\n      right: rect.right,\n      bottom: rect.bottom,\n      left: rect.left,\n      x: rect.left,\n      y: rect.top\n    };\n  }\n\n  // means it doesn't take into account transforms.\n\n  function getLayoutRect(element) {\n    var clientRect = getBoundingClientRect(element); // Use the clientRect sizes if it's not been transformed.\n    // Fixes https://github.com/popperjs/popper-core/issues/1223\n\n    var width = element.offsetWidth;\n    var height = element.offsetHeight;\n\n    if (Math.abs(clientRect.width - width) <= 1) {\n      width = clientRect.width;\n    }\n\n    if (Math.abs(clientRect.height - height) <= 1) {\n      height = clientRect.height;\n    }\n\n    return {\n      x: element.offsetLeft,\n      y: element.offsetTop,\n      width: width,\n      height: height\n    };\n  }\n\n  function contains(parent, child) {\n    var rootNode = child.getRootNode && child.getRootNode(); // First, attempt with faster native method\n\n    if (parent.contains(child)) {\n      return true;\n    } // then fallback to custom implementation with Shadow DOM support\n    else if (rootNode && isShadowRoot(rootNode)) {\n        var next = child;\n\n        do {\n          if (next && parent.isSameNode(next)) {\n            return true;\n          } // $FlowFixMe[prop-missing]: need a better way to handle this...\n\n\n          next = next.parentNode || next.host;\n        } while (next);\n      } // Give up, the result is false\n\n\n    return false;\n  }\n\n  function getComputedStyle$1(element) {\n    return getWindow(element).getComputedStyle(element);\n  }\n\n  function isTableElement(element) {\n    return ['table', 'td', 'th'].indexOf(getNodeName(element)) >= 0;\n  }\n\n  function getDocumentElement(element) {\n    // $FlowFixMe[incompatible-return]: assume body is always available\n    return ((isElement(element) ? element.ownerDocument : // $FlowFixMe[prop-missing]\n    element.document) || window.document).documentElement;\n  }\n\n  function getParentNode(element) {\n    if (getNodeName(element) === 'html') {\n      return element;\n    }\n\n    return (// this is a quicker (but less type safe) way to save quite some bytes from the bundle\n      // $FlowFixMe[incompatible-return]\n      // $FlowFixMe[prop-missing]\n      element.assignedSlot || // step into the shadow DOM of the parent of a slotted node\n      element.parentNode || ( // DOM Element detected\n      isShadowRoot(element) ? element.host : null) || // ShadowRoot detected\n      // $FlowFixMe[incompatible-call]: HTMLElement is a Node\n      getDocumentElement(element) // fallback\n\n    );\n  }\n\n  function getTrueOffsetParent(element) {\n    if (!isHTMLElement(element) || // https://github.com/popperjs/popper-core/issues/837\n    getComputedStyle$1(element).position === 'fixed') {\n      return null;\n    }\n\n    return element.offsetParent;\n  } // `.offsetParent` reports `null` for fixed elements, while absolute elements\n  // return the containing block\n\n\n  function getContainingBlock(element) {\n    var isFirefox = navigator.userAgent.toLowerCase().indexOf('firefox') !== -1;\n    var isIE = navigator.userAgent.indexOf('Trident') !== -1;\n\n    if (isIE && isHTMLElement(element)) {\n      // In IE 9, 10 and 11 fixed elements containing block is always established by the viewport\n      var elementCss = getComputedStyle$1(element);\n\n      if (elementCss.position === 'fixed') {\n        return null;\n      }\n    }\n\n    var currentNode = getParentNode(element);\n\n    while (isHTMLElement(currentNode) && ['html', 'body'].indexOf(getNodeName(currentNode)) < 0) {\n      var css = getComputedStyle$1(currentNode); // This is non-exhaustive but covers the most common CSS properties that\n      // create a containing block.\n      // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n\n      if (css.transform !== 'none' || css.perspective !== 'none' || css.contain === 'paint' || ['transform', 'perspective'].indexOf(css.willChange) !== -1 || isFirefox && css.willChange === 'filter' || isFirefox && css.filter && css.filter !== 'none') {\n        return currentNode;\n      } else {\n        currentNode = currentNode.parentNode;\n      }\n    }\n\n    return null;\n  } // Gets the closest ancestor positioned element. Handles some edge cases,\n  // such as table ancestors and cross browser bugs.\n\n\n  function getOffsetParent(element) {\n    var window = getWindow(element);\n    var offsetParent = getTrueOffsetParent(element);\n\n    while (offsetParent && isTableElement(offsetParent) && getComputedStyle$1(offsetParent).position === 'static') {\n      offsetParent = getTrueOffsetParent(offsetParent);\n    }\n\n    if (offsetParent && (getNodeName(offsetParent) === 'html' || getNodeName(offsetParent) === 'body' && getComputedStyle$1(offsetParent).position === 'static')) {\n      return window;\n    }\n\n    return offsetParent || getContainingBlock(element) || window;\n  }\n\n  function getMainAxisFromPlacement(placement) {\n    return ['top', 'bottom'].indexOf(placement) >= 0 ? 'x' : 'y';\n  }\n\n  var max = Math.max;\n  var min = Math.min;\n  var round = Math.round;\n\n  function within(min$1, value, max$1) {\n    return max(min$1, min(value, max$1));\n  }\n\n  function getFreshSideObject() {\n    return {\n      top: 0,\n      right: 0,\n      bottom: 0,\n      left: 0\n    };\n  }\n\n  function mergePaddingObject(paddingObject) {\n    return Object.assign({}, getFreshSideObject(), paddingObject);\n  }\n\n  function expandToHashMap(value, keys) {\n    return keys.reduce(function (hashMap, key) {\n      hashMap[key] = value;\n      return hashMap;\n    }, {});\n  }\n\n  var toPaddingObject = function toPaddingObject(padding, state) {\n    padding = typeof padding === 'function' ? padding(Object.assign({}, state.rects, {\n      placement: state.placement\n    })) : padding;\n    return mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));\n  };\n\n  function arrow(_ref) {\n    var _state$modifiersData$;\n\n    var state = _ref.state,\n        name = _ref.name,\n        options = _ref.options;\n    var arrowElement = state.elements.arrow;\n    var popperOffsets = state.modifiersData.popperOffsets;\n    var basePlacement = getBasePlacement(state.placement);\n    var axis = getMainAxisFromPlacement(basePlacement);\n    var isVertical = [left, right].indexOf(basePlacement) >= 0;\n    var len = isVertical ? 'height' : 'width';\n\n    if (!arrowElement || !popperOffsets) {\n      return;\n    }\n\n    var paddingObject = toPaddingObject(options.padding, state);\n    var arrowRect = getLayoutRect(arrowElement);\n    var minProp = axis === 'y' ? top : left;\n    var maxProp = axis === 'y' ? bottom : right;\n    var endDiff = state.rects.reference[len] + state.rects.reference[axis] - popperOffsets[axis] - state.rects.popper[len];\n    var startDiff = popperOffsets[axis] - state.rects.reference[axis];\n    var arrowOffsetParent = getOffsetParent(arrowElement);\n    var clientSize = arrowOffsetParent ? axis === 'y' ? arrowOffsetParent.clientHeight || 0 : arrowOffsetParent.clientWidth || 0 : 0;\n    var centerToReference = endDiff / 2 - startDiff / 2; // Make sure the arrow doesn't overflow the popper if the center point is\n    // outside of the popper bounds\n\n    var min = paddingObject[minProp];\n    var max = clientSize - arrowRect[len] - paddingObject[maxProp];\n    var center = clientSize / 2 - arrowRect[len] / 2 + centerToReference;\n    var offset = within(min, center, max); // Prevents breaking syntax highlighting...\n\n    var axisProp = axis;\n    state.modifiersData[name] = (_state$modifiersData$ = {}, _state$modifiersData$[axisProp] = offset, _state$modifiersData$.centerOffset = offset - center, _state$modifiersData$);\n  }\n\n  function effect$1(_ref2) {\n    var state = _ref2.state,\n        options = _ref2.options;\n    var _options$element = options.element,\n        arrowElement = _options$element === void 0 ? '[data-popper-arrow]' : _options$element;\n\n    if (arrowElement == null) {\n      return;\n    } // CSS selector\n\n\n    if (typeof arrowElement === 'string') {\n      arrowElement = state.elements.popper.querySelector(arrowElement);\n\n      if (!arrowElement) {\n        return;\n      }\n    }\n\n    if (!contains(state.elements.popper, arrowElement)) {\n\n      return;\n    }\n\n    state.elements.arrow = arrowElement;\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  var arrow$1 = {\n    name: 'arrow',\n    enabled: true,\n    phase: 'main',\n    fn: arrow,\n    effect: effect$1,\n    requires: ['popperOffsets'],\n    requiresIfExists: ['preventOverflow']\n  };\n\n  var unsetSides = {\n    top: 'auto',\n    right: 'auto',\n    bottom: 'auto',\n    left: 'auto'\n  }; // Round the offsets to the nearest suitable subpixel based on the DPR.\n  // Zooming can change the DPR, but it seems to report a value that will\n  // cleanly divide the values into the appropriate subpixels.\n\n  function roundOffsetsByDPR(_ref) {\n    var x = _ref.x,\n        y = _ref.y;\n    var win = window;\n    var dpr = win.devicePixelRatio || 1;\n    return {\n      x: round(round(x * dpr) / dpr) || 0,\n      y: round(round(y * dpr) / dpr) || 0\n    };\n  }\n\n  function mapToStyles(_ref2) {\n    var _Object$assign2;\n\n    var popper = _ref2.popper,\n        popperRect = _ref2.popperRect,\n        placement = _ref2.placement,\n        offsets = _ref2.offsets,\n        position = _ref2.position,\n        gpuAcceleration = _ref2.gpuAcceleration,\n        adaptive = _ref2.adaptive,\n        roundOffsets = _ref2.roundOffsets;\n\n    var _ref3 = roundOffsets === true ? roundOffsetsByDPR(offsets) : typeof roundOffsets === 'function' ? roundOffsets(offsets) : offsets,\n        _ref3$x = _ref3.x,\n        x = _ref3$x === void 0 ? 0 : _ref3$x,\n        _ref3$y = _ref3.y,\n        y = _ref3$y === void 0 ? 0 : _ref3$y;\n\n    var hasX = offsets.hasOwnProperty('x');\n    var hasY = offsets.hasOwnProperty('y');\n    var sideX = left;\n    var sideY = top;\n    var win = window;\n\n    if (adaptive) {\n      var offsetParent = getOffsetParent(popper);\n      var heightProp = 'clientHeight';\n      var widthProp = 'clientWidth';\n\n      if (offsetParent === getWindow(popper)) {\n        offsetParent = getDocumentElement(popper);\n\n        if (getComputedStyle$1(offsetParent).position !== 'static') {\n          heightProp = 'scrollHeight';\n          widthProp = 'scrollWidth';\n        }\n      } // $FlowFixMe[incompatible-cast]: force type refinement, we compare offsetParent with window above, but Flow doesn't detect it\n\n\n      offsetParent = offsetParent;\n\n      if (placement === top) {\n        sideY = bottom; // $FlowFixMe[prop-missing]\n\n        y -= offsetParent[heightProp] - popperRect.height;\n        y *= gpuAcceleration ? 1 : -1;\n      }\n\n      if (placement === left) {\n        sideX = right; // $FlowFixMe[prop-missing]\n\n        x -= offsetParent[widthProp] - popperRect.width;\n        x *= gpuAcceleration ? 1 : -1;\n      }\n    }\n\n    var commonStyles = Object.assign({\n      position: position\n    }, adaptive && unsetSides);\n\n    if (gpuAcceleration) {\n      var _Object$assign;\n\n      return Object.assign({}, commonStyles, (_Object$assign = {}, _Object$assign[sideY] = hasY ? '0' : '', _Object$assign[sideX] = hasX ? '0' : '', _Object$assign.transform = (win.devicePixelRatio || 1) < 2 ? \"translate(\" + x + \"px, \" + y + \"px)\" : \"translate3d(\" + x + \"px, \" + y + \"px, 0)\", _Object$assign));\n    }\n\n    return Object.assign({}, commonStyles, (_Object$assign2 = {}, _Object$assign2[sideY] = hasY ? y + \"px\" : '', _Object$assign2[sideX] = hasX ? x + \"px\" : '', _Object$assign2.transform = '', _Object$assign2));\n  }\n\n  function computeStyles(_ref4) {\n    var state = _ref4.state,\n        options = _ref4.options;\n    var _options$gpuAccelerat = options.gpuAcceleration,\n        gpuAcceleration = _options$gpuAccelerat === void 0 ? true : _options$gpuAccelerat,\n        _options$adaptive = options.adaptive,\n        adaptive = _options$adaptive === void 0 ? true : _options$adaptive,\n        _options$roundOffsets = options.roundOffsets,\n        roundOffsets = _options$roundOffsets === void 0 ? true : _options$roundOffsets;\n\n    var commonStyles = {\n      placement: getBasePlacement(state.placement),\n      popper: state.elements.popper,\n      popperRect: state.rects.popper,\n      gpuAcceleration: gpuAcceleration\n    };\n\n    if (state.modifiersData.popperOffsets != null) {\n      state.styles.popper = Object.assign({}, state.styles.popper, mapToStyles(Object.assign({}, commonStyles, {\n        offsets: state.modifiersData.popperOffsets,\n        position: state.options.strategy,\n        adaptive: adaptive,\n        roundOffsets: roundOffsets\n      })));\n    }\n\n    if (state.modifiersData.arrow != null) {\n      state.styles.arrow = Object.assign({}, state.styles.arrow, mapToStyles(Object.assign({}, commonStyles, {\n        offsets: state.modifiersData.arrow,\n        position: 'absolute',\n        adaptive: false,\n        roundOffsets: roundOffsets\n      })));\n    }\n\n    state.attributes.popper = Object.assign({}, state.attributes.popper, {\n      'data-popper-placement': state.placement\n    });\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  var computeStyles$1 = {\n    name: 'computeStyles',\n    enabled: true,\n    phase: 'beforeWrite',\n    fn: computeStyles,\n    data: {}\n  };\n\n  var passive = {\n    passive: true\n  };\n\n  function effect(_ref) {\n    var state = _ref.state,\n        instance = _ref.instance,\n        options = _ref.options;\n    var _options$scroll = options.scroll,\n        scroll = _options$scroll === void 0 ? true : _options$scroll,\n        _options$resize = options.resize,\n        resize = _options$resize === void 0 ? true : _options$resize;\n    var window = getWindow(state.elements.popper);\n    var scrollParents = [].concat(state.scrollParents.reference, state.scrollParents.popper);\n\n    if (scroll) {\n      scrollParents.forEach(function (scrollParent) {\n        scrollParent.addEventListener('scroll', instance.update, passive);\n      });\n    }\n\n    if (resize) {\n      window.addEventListener('resize', instance.update, passive);\n    }\n\n    return function () {\n      if (scroll) {\n        scrollParents.forEach(function (scrollParent) {\n          scrollParent.removeEventListener('scroll', instance.update, passive);\n        });\n      }\n\n      if (resize) {\n        window.removeEventListener('resize', instance.update, passive);\n      }\n    };\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  var eventListeners = {\n    name: 'eventListeners',\n    enabled: true,\n    phase: 'write',\n    fn: function fn() {},\n    effect: effect,\n    data: {}\n  };\n\n  var hash$1 = {\n    left: 'right',\n    right: 'left',\n    bottom: 'top',\n    top: 'bottom'\n  };\n  function getOppositePlacement(placement) {\n    return placement.replace(/left|right|bottom|top/g, function (matched) {\n      return hash$1[matched];\n    });\n  }\n\n  var hash = {\n    start: 'end',\n    end: 'start'\n  };\n  function getOppositeVariationPlacement(placement) {\n    return placement.replace(/start|end/g, function (matched) {\n      return hash[matched];\n    });\n  }\n\n  function getWindowScroll(node) {\n    var win = getWindow(node);\n    var scrollLeft = win.pageXOffset;\n    var scrollTop = win.pageYOffset;\n    return {\n      scrollLeft: scrollLeft,\n      scrollTop: scrollTop\n    };\n  }\n\n  function getWindowScrollBarX(element) {\n    // If <html> has a CSS width greater than the viewport, then this will be\n    // incorrect for RTL.\n    // Popper 1 is broken in this case and never had a bug report so let's assume\n    // it's not an issue. I don't think anyone ever specifies width on <html>\n    // anyway.\n    // Browsers where the left scrollbar doesn't cause an issue report `0` for\n    // this (e.g. Edge 2019, IE11, Safari)\n    return getBoundingClientRect(getDocumentElement(element)).left + getWindowScroll(element).scrollLeft;\n  }\n\n  function getViewportRect(element) {\n    var win = getWindow(element);\n    var html = getDocumentElement(element);\n    var visualViewport = win.visualViewport;\n    var width = html.clientWidth;\n    var height = html.clientHeight;\n    var x = 0;\n    var y = 0; // NB: This isn't supported on iOS <= 12. If the keyboard is open, the popper\n    // can be obscured underneath it.\n    // Also, `html.clientHeight` adds the bottom bar height in Safari iOS, even\n    // if it isn't open, so if this isn't available, the popper will be detected\n    // to overflow the bottom of the screen too early.\n\n    if (visualViewport) {\n      width = visualViewport.width;\n      height = visualViewport.height; // Uses Layout Viewport (like Chrome; Safari does not currently)\n      // In Chrome, it returns a value very close to 0 (+/-) but contains rounding\n      // errors due to floating point numbers, so we need to check precision.\n      // Safari returns a number <= 0, usually < -1 when pinch-zoomed\n      // Feature detection fails in mobile emulation mode in Chrome.\n      // Math.abs(win.innerWidth / visualViewport.scale - visualViewport.width) <\n      // 0.001\n      // Fallback here: \"Not Safari\" userAgent\n\n      if (!/^((?!chrome|android).)*safari/i.test(navigator.userAgent)) {\n        x = visualViewport.offsetLeft;\n        y = visualViewport.offsetTop;\n      }\n    }\n\n    return {\n      width: width,\n      height: height,\n      x: x + getWindowScrollBarX(element),\n      y: y\n    };\n  }\n\n  // of the `<html>` and `<body>` rect bounds if horizontally scrollable\n\n  function getDocumentRect(element) {\n    var _element$ownerDocumen;\n\n    var html = getDocumentElement(element);\n    var winScroll = getWindowScroll(element);\n    var body = (_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body;\n    var width = max(html.scrollWidth, html.clientWidth, body ? body.scrollWidth : 0, body ? body.clientWidth : 0);\n    var height = max(html.scrollHeight, html.clientHeight, body ? body.scrollHeight : 0, body ? body.clientHeight : 0);\n    var x = -winScroll.scrollLeft + getWindowScrollBarX(element);\n    var y = -winScroll.scrollTop;\n\n    if (getComputedStyle$1(body || html).direction === 'rtl') {\n      x += max(html.clientWidth, body ? body.clientWidth : 0) - width;\n    }\n\n    return {\n      width: width,\n      height: height,\n      x: x,\n      y: y\n    };\n  }\n\n  function isScrollParent(element) {\n    // Firefox wants us to check `-x` and `-y` variations as well\n    var _getComputedStyle = getComputedStyle$1(element),\n        overflow = _getComputedStyle.overflow,\n        overflowX = _getComputedStyle.overflowX,\n        overflowY = _getComputedStyle.overflowY;\n\n    return /auto|scroll|overlay|hidden/.test(overflow + overflowY + overflowX);\n  }\n\n  function getScrollParent(node) {\n    if (['html', 'body', '#document'].indexOf(getNodeName(node)) >= 0) {\n      // $FlowFixMe[incompatible-return]: assume body is always available\n      return node.ownerDocument.body;\n    }\n\n    if (isHTMLElement(node) && isScrollParent(node)) {\n      return node;\n    }\n\n    return getScrollParent(getParentNode(node));\n  }\n\n  /*\n  given a DOM element, return the list of all scroll parents, up the list of ancesors\n  until we get to the top window object. This list is what we attach scroll listeners\n  to, because if any of these parent elements scroll, we'll need to re-calculate the\n  reference element's position.\n  */\n\n  function listScrollParents(element, list) {\n    var _element$ownerDocumen;\n\n    if (list === void 0) {\n      list = [];\n    }\n\n    var scrollParent = getScrollParent(element);\n    var isBody = scrollParent === ((_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body);\n    var win = getWindow(scrollParent);\n    var target = isBody ? [win].concat(win.visualViewport || [], isScrollParent(scrollParent) ? scrollParent : []) : scrollParent;\n    var updatedList = list.concat(target);\n    return isBody ? updatedList : // $FlowFixMe[incompatible-call]: isBody tells us target will be an HTMLElement here\n    updatedList.concat(listScrollParents(getParentNode(target)));\n  }\n\n  function rectToClientRect(rect) {\n    return Object.assign({}, rect, {\n      left: rect.x,\n      top: rect.y,\n      right: rect.x + rect.width,\n      bottom: rect.y + rect.height\n    });\n  }\n\n  function getInnerBoundingClientRect(element) {\n    var rect = getBoundingClientRect(element);\n    rect.top = rect.top + element.clientTop;\n    rect.left = rect.left + element.clientLeft;\n    rect.bottom = rect.top + element.clientHeight;\n    rect.right = rect.left + element.clientWidth;\n    rect.width = element.clientWidth;\n    rect.height = element.clientHeight;\n    rect.x = rect.left;\n    rect.y = rect.top;\n    return rect;\n  }\n\n  function getClientRectFromMixedType(element, clippingParent) {\n    return clippingParent === viewport ? rectToClientRect(getViewportRect(element)) : isHTMLElement(clippingParent) ? getInnerBoundingClientRect(clippingParent) : rectToClientRect(getDocumentRect(getDocumentElement(element)));\n  } // A \"clipping parent\" is an overflowable container with the characteristic of\n  // clipping (or hiding) overflowing elements with a position different from\n  // `initial`\n\n\n  function getClippingParents(element) {\n    var clippingParents = listScrollParents(getParentNode(element));\n    var canEscapeClipping = ['absolute', 'fixed'].indexOf(getComputedStyle$1(element).position) >= 0;\n    var clipperElement = canEscapeClipping && isHTMLElement(element) ? getOffsetParent(element) : element;\n\n    if (!isElement(clipperElement)) {\n      return [];\n    } // $FlowFixMe[incompatible-return]: https://github.com/facebook/flow/issues/1414\n\n\n    return clippingParents.filter(function (clippingParent) {\n      return isElement(clippingParent) && contains(clippingParent, clipperElement) && getNodeName(clippingParent) !== 'body';\n    });\n  } // Gets the maximum area that the element is visible in due to any number of\n  // clipping parents\n\n\n  function getClippingRect(element, boundary, rootBoundary) {\n    var mainClippingParents = boundary === 'clippingParents' ? getClippingParents(element) : [].concat(boundary);\n    var clippingParents = [].concat(mainClippingParents, [rootBoundary]);\n    var firstClippingParent = clippingParents[0];\n    var clippingRect = clippingParents.reduce(function (accRect, clippingParent) {\n      var rect = getClientRectFromMixedType(element, clippingParent);\n      accRect.top = max(rect.top, accRect.top);\n      accRect.right = min(rect.right, accRect.right);\n      accRect.bottom = min(rect.bottom, accRect.bottom);\n      accRect.left = max(rect.left, accRect.left);\n      return accRect;\n    }, getClientRectFromMixedType(element, firstClippingParent));\n    clippingRect.width = clippingRect.right - clippingRect.left;\n    clippingRect.height = clippingRect.bottom - clippingRect.top;\n    clippingRect.x = clippingRect.left;\n    clippingRect.y = clippingRect.top;\n    return clippingRect;\n  }\n\n  function getVariation(placement) {\n    return placement.split('-')[1];\n  }\n\n  function computeOffsets(_ref) {\n    var reference = _ref.reference,\n        element = _ref.element,\n        placement = _ref.placement;\n    var basePlacement = placement ? getBasePlacement(placement) : null;\n    var variation = placement ? getVariation(placement) : null;\n    var commonX = reference.x + reference.width / 2 - element.width / 2;\n    var commonY = reference.y + reference.height / 2 - element.height / 2;\n    var offsets;\n\n    switch (basePlacement) {\n      case top:\n        offsets = {\n          x: commonX,\n          y: reference.y - element.height\n        };\n        break;\n\n      case bottom:\n        offsets = {\n          x: commonX,\n          y: reference.y + reference.height\n        };\n        break;\n\n      case right:\n        offsets = {\n          x: reference.x + reference.width,\n          y: commonY\n        };\n        break;\n\n      case left:\n        offsets = {\n          x: reference.x - element.width,\n          y: commonY\n        };\n        break;\n\n      default:\n        offsets = {\n          x: reference.x,\n          y: reference.y\n        };\n    }\n\n    var mainAxis = basePlacement ? getMainAxisFromPlacement(basePlacement) : null;\n\n    if (mainAxis != null) {\n      var len = mainAxis === 'y' ? 'height' : 'width';\n\n      switch (variation) {\n        case start:\n          offsets[mainAxis] = offsets[mainAxis] - (reference[len] / 2 - element[len] / 2);\n          break;\n\n        case end:\n          offsets[mainAxis] = offsets[mainAxis] + (reference[len] / 2 - element[len] / 2);\n          break;\n      }\n    }\n\n    return offsets;\n  }\n\n  function detectOverflow(state, options) {\n    if (options === void 0) {\n      options = {};\n    }\n\n    var _options = options,\n        _options$placement = _options.placement,\n        placement = _options$placement === void 0 ? state.placement : _options$placement,\n        _options$boundary = _options.boundary,\n        boundary = _options$boundary === void 0 ? clippingParents : _options$boundary,\n        _options$rootBoundary = _options.rootBoundary,\n        rootBoundary = _options$rootBoundary === void 0 ? viewport : _options$rootBoundary,\n        _options$elementConte = _options.elementContext,\n        elementContext = _options$elementConte === void 0 ? popper : _options$elementConte,\n        _options$altBoundary = _options.altBoundary,\n        altBoundary = _options$altBoundary === void 0 ? false : _options$altBoundary,\n        _options$padding = _options.padding,\n        padding = _options$padding === void 0 ? 0 : _options$padding;\n    var paddingObject = mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));\n    var altContext = elementContext === popper ? reference : popper;\n    var referenceElement = state.elements.reference;\n    var popperRect = state.rects.popper;\n    var element = state.elements[altBoundary ? altContext : elementContext];\n    var clippingClientRect = getClippingRect(isElement(element) ? element : element.contextElement || getDocumentElement(state.elements.popper), boundary, rootBoundary);\n    var referenceClientRect = getBoundingClientRect(referenceElement);\n    var popperOffsets = computeOffsets({\n      reference: referenceClientRect,\n      element: popperRect,\n      strategy: 'absolute',\n      placement: placement\n    });\n    var popperClientRect = rectToClientRect(Object.assign({}, popperRect, popperOffsets));\n    var elementClientRect = elementContext === popper ? popperClientRect : referenceClientRect; // positive = overflowing the clipping rect\n    // 0 or negative = within the clipping rect\n\n    var overflowOffsets = {\n      top: clippingClientRect.top - elementClientRect.top + paddingObject.top,\n      bottom: elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom,\n      left: clippingClientRect.left - elementClientRect.left + paddingObject.left,\n      right: elementClientRect.right - clippingClientRect.right + paddingObject.right\n    };\n    var offsetData = state.modifiersData.offset; // Offsets can be applied only to the popper element\n\n    if (elementContext === popper && offsetData) {\n      var offset = offsetData[placement];\n      Object.keys(overflowOffsets).forEach(function (key) {\n        var multiply = [right, bottom].indexOf(key) >= 0 ? 1 : -1;\n        var axis = [top, bottom].indexOf(key) >= 0 ? 'y' : 'x';\n        overflowOffsets[key] += offset[axis] * multiply;\n      });\n    }\n\n    return overflowOffsets;\n  }\n\n  function computeAutoPlacement(state, options) {\n    if (options === void 0) {\n      options = {};\n    }\n\n    var _options = options,\n        placement = _options.placement,\n        boundary = _options.boundary,\n        rootBoundary = _options.rootBoundary,\n        padding = _options.padding,\n        flipVariations = _options.flipVariations,\n        _options$allowedAutoP = _options.allowedAutoPlacements,\n        allowedAutoPlacements = _options$allowedAutoP === void 0 ? placements : _options$allowedAutoP;\n    var variation = getVariation(placement);\n    var placements$1 = variation ? flipVariations ? variationPlacements : variationPlacements.filter(function (placement) {\n      return getVariation(placement) === variation;\n    }) : basePlacements;\n    var allowedPlacements = placements$1.filter(function (placement) {\n      return allowedAutoPlacements.indexOf(placement) >= 0;\n    });\n\n    if (allowedPlacements.length === 0) {\n      allowedPlacements = placements$1;\n    } // $FlowFixMe[incompatible-type]: Flow seems to have problems with two array unions...\n\n\n    var overflows = allowedPlacements.reduce(function (acc, placement) {\n      acc[placement] = detectOverflow(state, {\n        placement: placement,\n        boundary: boundary,\n        rootBoundary: rootBoundary,\n        padding: padding\n      })[getBasePlacement(placement)];\n      return acc;\n    }, {});\n    return Object.keys(overflows).sort(function (a, b) {\n      return overflows[a] - overflows[b];\n    });\n  }\n\n  function getExpandedFallbackPlacements(placement) {\n    if (getBasePlacement(placement) === auto) {\n      return [];\n    }\n\n    var oppositePlacement = getOppositePlacement(placement);\n    return [getOppositeVariationPlacement(placement), oppositePlacement, getOppositeVariationPlacement(oppositePlacement)];\n  }\n\n  function flip(_ref) {\n    var state = _ref.state,\n        options = _ref.options,\n        name = _ref.name;\n\n    if (state.modifiersData[name]._skip) {\n      return;\n    }\n\n    var _options$mainAxis = options.mainAxis,\n        checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\n        _options$altAxis = options.altAxis,\n        checkAltAxis = _options$altAxis === void 0 ? true : _options$altAxis,\n        specifiedFallbackPlacements = options.fallbackPlacements,\n        padding = options.padding,\n        boundary = options.boundary,\n        rootBoundary = options.rootBoundary,\n        altBoundary = options.altBoundary,\n        _options$flipVariatio = options.flipVariations,\n        flipVariations = _options$flipVariatio === void 0 ? true : _options$flipVariatio,\n        allowedAutoPlacements = options.allowedAutoPlacements;\n    var preferredPlacement = state.options.placement;\n    var basePlacement = getBasePlacement(preferredPlacement);\n    var isBasePlacement = basePlacement === preferredPlacement;\n    var fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipVariations ? [getOppositePlacement(preferredPlacement)] : getExpandedFallbackPlacements(preferredPlacement));\n    var placements = [preferredPlacement].concat(fallbackPlacements).reduce(function (acc, placement) {\n      return acc.concat(getBasePlacement(placement) === auto ? computeAutoPlacement(state, {\n        placement: placement,\n        boundary: boundary,\n        rootBoundary: rootBoundary,\n        padding: padding,\n        flipVariations: flipVariations,\n        allowedAutoPlacements: allowedAutoPlacements\n      }) : placement);\n    }, []);\n    var referenceRect = state.rects.reference;\n    var popperRect = state.rects.popper;\n    var checksMap = new Map();\n    var makeFallbackChecks = true;\n    var firstFittingPlacement = placements[0];\n\n    for (var i = 0; i < placements.length; i++) {\n      var placement = placements[i];\n\n      var _basePlacement = getBasePlacement(placement);\n\n      var isStartVariation = getVariation(placement) === start;\n      var isVertical = [top, bottom].indexOf(_basePlacement) >= 0;\n      var len = isVertical ? 'width' : 'height';\n      var overflow = detectOverflow(state, {\n        placement: placement,\n        boundary: boundary,\n        rootBoundary: rootBoundary,\n        altBoundary: altBoundary,\n        padding: padding\n      });\n      var mainVariationSide = isVertical ? isStartVariation ? right : left : isStartVariation ? bottom : top;\n\n      if (referenceRect[len] > popperRect[len]) {\n        mainVariationSide = getOppositePlacement(mainVariationSide);\n      }\n\n      var altVariationSide = getOppositePlacement(mainVariationSide);\n      var checks = [];\n\n      if (checkMainAxis) {\n        checks.push(overflow[_basePlacement] <= 0);\n      }\n\n      if (checkAltAxis) {\n        checks.push(overflow[mainVariationSide] <= 0, overflow[altVariationSide] <= 0);\n      }\n\n      if (checks.every(function (check) {\n        return check;\n      })) {\n        firstFittingPlacement = placement;\n        makeFallbackChecks = false;\n        break;\n      }\n\n      checksMap.set(placement, checks);\n    }\n\n    if (makeFallbackChecks) {\n      // `2` may be desired in some cases – research later\n      var numberOfChecks = flipVariations ? 3 : 1;\n\n      var _loop = function _loop(_i) {\n        var fittingPlacement = placements.find(function (placement) {\n          var checks = checksMap.get(placement);\n\n          if (checks) {\n            return checks.slice(0, _i).every(function (check) {\n              return check;\n            });\n          }\n        });\n\n        if (fittingPlacement) {\n          firstFittingPlacement = fittingPlacement;\n          return \"break\";\n        }\n      };\n\n      for (var _i = numberOfChecks; _i > 0; _i--) {\n        var _ret = _loop(_i);\n\n        if (_ret === \"break\") break;\n      }\n    }\n\n    if (state.placement !== firstFittingPlacement) {\n      state.modifiersData[name]._skip = true;\n      state.placement = firstFittingPlacement;\n      state.reset = true;\n    }\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  var flip$1 = {\n    name: 'flip',\n    enabled: true,\n    phase: 'main',\n    fn: flip,\n    requiresIfExists: ['offset'],\n    data: {\n      _skip: false\n    }\n  };\n\n  function getSideOffsets(overflow, rect, preventedOffsets) {\n    if (preventedOffsets === void 0) {\n      preventedOffsets = {\n        x: 0,\n        y: 0\n      };\n    }\n\n    return {\n      top: overflow.top - rect.height - preventedOffsets.y,\n      right: overflow.right - rect.width + preventedOffsets.x,\n      bottom: overflow.bottom - rect.height + preventedOffsets.y,\n      left: overflow.left - rect.width - preventedOffsets.x\n    };\n  }\n\n  function isAnySideFullyClipped(overflow) {\n    return [top, right, bottom, left].some(function (side) {\n      return overflow[side] >= 0;\n    });\n  }\n\n  function hide(_ref) {\n    var state = _ref.state,\n        name = _ref.name;\n    var referenceRect = state.rects.reference;\n    var popperRect = state.rects.popper;\n    var preventedOffsets = state.modifiersData.preventOverflow;\n    var referenceOverflow = detectOverflow(state, {\n      elementContext: 'reference'\n    });\n    var popperAltOverflow = detectOverflow(state, {\n      altBoundary: true\n    });\n    var referenceClippingOffsets = getSideOffsets(referenceOverflow, referenceRect);\n    var popperEscapeOffsets = getSideOffsets(popperAltOverflow, popperRect, preventedOffsets);\n    var isReferenceHidden = isAnySideFullyClipped(referenceClippingOffsets);\n    var hasPopperEscaped = isAnySideFullyClipped(popperEscapeOffsets);\n    state.modifiersData[name] = {\n      referenceClippingOffsets: referenceClippingOffsets,\n      popperEscapeOffsets: popperEscapeOffsets,\n      isReferenceHidden: isReferenceHidden,\n      hasPopperEscaped: hasPopperEscaped\n    };\n    state.attributes.popper = Object.assign({}, state.attributes.popper, {\n      'data-popper-reference-hidden': isReferenceHidden,\n      'data-popper-escaped': hasPopperEscaped\n    });\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  var hide$1 = {\n    name: 'hide',\n    enabled: true,\n    phase: 'main',\n    requiresIfExists: ['preventOverflow'],\n    fn: hide\n  };\n\n  function distanceAndSkiddingToXY(placement, rects, offset) {\n    var basePlacement = getBasePlacement(placement);\n    var invertDistance = [left, top].indexOf(basePlacement) >= 0 ? -1 : 1;\n\n    var _ref = typeof offset === 'function' ? offset(Object.assign({}, rects, {\n      placement: placement\n    })) : offset,\n        skidding = _ref[0],\n        distance = _ref[1];\n\n    skidding = skidding || 0;\n    distance = (distance || 0) * invertDistance;\n    return [left, right].indexOf(basePlacement) >= 0 ? {\n      x: distance,\n      y: skidding\n    } : {\n      x: skidding,\n      y: distance\n    };\n  }\n\n  function offset(_ref2) {\n    var state = _ref2.state,\n        options = _ref2.options,\n        name = _ref2.name;\n    var _options$offset = options.offset,\n        offset = _options$offset === void 0 ? [0, 0] : _options$offset;\n    var data = placements.reduce(function (acc, placement) {\n      acc[placement] = distanceAndSkiddingToXY(placement, state.rects, offset);\n      return acc;\n    }, {});\n    var _data$state$placement = data[state.placement],\n        x = _data$state$placement.x,\n        y = _data$state$placement.y;\n\n    if (state.modifiersData.popperOffsets != null) {\n      state.modifiersData.popperOffsets.x += x;\n      state.modifiersData.popperOffsets.y += y;\n    }\n\n    state.modifiersData[name] = data;\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  var offset$1 = {\n    name: 'offset',\n    enabled: true,\n    phase: 'main',\n    requires: ['popperOffsets'],\n    fn: offset\n  };\n\n  function popperOffsets(_ref) {\n    var state = _ref.state,\n        name = _ref.name;\n    // Offsets are the actual position the popper needs to have to be\n    // properly positioned near its reference element\n    // This is the most basic placement, and will be adjusted by\n    // the modifiers in the next step\n    state.modifiersData[name] = computeOffsets({\n      reference: state.rects.reference,\n      element: state.rects.popper,\n      strategy: 'absolute',\n      placement: state.placement\n    });\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  var popperOffsets$1 = {\n    name: 'popperOffsets',\n    enabled: true,\n    phase: 'read',\n    fn: popperOffsets,\n    data: {}\n  };\n\n  function getAltAxis(axis) {\n    return axis === 'x' ? 'y' : 'x';\n  }\n\n  function preventOverflow(_ref) {\n    var state = _ref.state,\n        options = _ref.options,\n        name = _ref.name;\n    var _options$mainAxis = options.mainAxis,\n        checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\n        _options$altAxis = options.altAxis,\n        checkAltAxis = _options$altAxis === void 0 ? false : _options$altAxis,\n        boundary = options.boundary,\n        rootBoundary = options.rootBoundary,\n        altBoundary = options.altBoundary,\n        padding = options.padding,\n        _options$tether = options.tether,\n        tether = _options$tether === void 0 ? true : _options$tether,\n        _options$tetherOffset = options.tetherOffset,\n        tetherOffset = _options$tetherOffset === void 0 ? 0 : _options$tetherOffset;\n    var overflow = detectOverflow(state, {\n      boundary: boundary,\n      rootBoundary: rootBoundary,\n      padding: padding,\n      altBoundary: altBoundary\n    });\n    var basePlacement = getBasePlacement(state.placement);\n    var variation = getVariation(state.placement);\n    var isBasePlacement = !variation;\n    var mainAxis = getMainAxisFromPlacement(basePlacement);\n    var altAxis = getAltAxis(mainAxis);\n    var popperOffsets = state.modifiersData.popperOffsets;\n    var referenceRect = state.rects.reference;\n    var popperRect = state.rects.popper;\n    var tetherOffsetValue = typeof tetherOffset === 'function' ? tetherOffset(Object.assign({}, state.rects, {\n      placement: state.placement\n    })) : tetherOffset;\n    var data = {\n      x: 0,\n      y: 0\n    };\n\n    if (!popperOffsets) {\n      return;\n    }\n\n    if (checkMainAxis || checkAltAxis) {\n      var mainSide = mainAxis === 'y' ? top : left;\n      var altSide = mainAxis === 'y' ? bottom : right;\n      var len = mainAxis === 'y' ? 'height' : 'width';\n      var offset = popperOffsets[mainAxis];\n      var min$1 = popperOffsets[mainAxis] + overflow[mainSide];\n      var max$1 = popperOffsets[mainAxis] - overflow[altSide];\n      var additive = tether ? -popperRect[len] / 2 : 0;\n      var minLen = variation === start ? referenceRect[len] : popperRect[len];\n      var maxLen = variation === start ? -popperRect[len] : -referenceRect[len]; // We need to include the arrow in the calculation so the arrow doesn't go\n      // outside the reference bounds\n\n      var arrowElement = state.elements.arrow;\n      var arrowRect = tether && arrowElement ? getLayoutRect(arrowElement) : {\n        width: 0,\n        height: 0\n      };\n      var arrowPaddingObject = state.modifiersData['arrow#persistent'] ? state.modifiersData['arrow#persistent'].padding : getFreshSideObject();\n      var arrowPaddingMin = arrowPaddingObject[mainSide];\n      var arrowPaddingMax = arrowPaddingObject[altSide]; // If the reference length is smaller than the arrow length, we don't want\n      // to include its full size in the calculation. If the reference is small\n      // and near the edge of a boundary, the popper can overflow even if the\n      // reference is not overflowing as well (e.g. virtual elements with no\n      // width or height)\n\n      var arrowLen = within(0, referenceRect[len], arrowRect[len]);\n      var minOffset = isBasePlacement ? referenceRect[len] / 2 - additive - arrowLen - arrowPaddingMin - tetherOffsetValue : minLen - arrowLen - arrowPaddingMin - tetherOffsetValue;\n      var maxOffset = isBasePlacement ? -referenceRect[len] / 2 + additive + arrowLen + arrowPaddingMax + tetherOffsetValue : maxLen + arrowLen + arrowPaddingMax + tetherOffsetValue;\n      var arrowOffsetParent = state.elements.arrow && getOffsetParent(state.elements.arrow);\n      var clientOffset = arrowOffsetParent ? mainAxis === 'y' ? arrowOffsetParent.clientTop || 0 : arrowOffsetParent.clientLeft || 0 : 0;\n      var offsetModifierValue = state.modifiersData.offset ? state.modifiersData.offset[state.placement][mainAxis] : 0;\n      var tetherMin = popperOffsets[mainAxis] + minOffset - offsetModifierValue - clientOffset;\n      var tetherMax = popperOffsets[mainAxis] + maxOffset - offsetModifierValue;\n\n      if (checkMainAxis) {\n        var preventedOffset = within(tether ? min(min$1, tetherMin) : min$1, offset, tether ? max(max$1, tetherMax) : max$1);\n        popperOffsets[mainAxis] = preventedOffset;\n        data[mainAxis] = preventedOffset - offset;\n      }\n\n      if (checkAltAxis) {\n        var _mainSide = mainAxis === 'x' ? top : left;\n\n        var _altSide = mainAxis === 'x' ? bottom : right;\n\n        var _offset = popperOffsets[altAxis];\n\n        var _min = _offset + overflow[_mainSide];\n\n        var _max = _offset - overflow[_altSide];\n\n        var _preventedOffset = within(tether ? min(_min, tetherMin) : _min, _offset, tether ? max(_max, tetherMax) : _max);\n\n        popperOffsets[altAxis] = _preventedOffset;\n        data[altAxis] = _preventedOffset - _offset;\n      }\n    }\n\n    state.modifiersData[name] = data;\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  var preventOverflow$1 = {\n    name: 'preventOverflow',\n    enabled: true,\n    phase: 'main',\n    fn: preventOverflow,\n    requiresIfExists: ['offset']\n  };\n\n  function getHTMLElementScroll(element) {\n    return {\n      scrollLeft: element.scrollLeft,\n      scrollTop: element.scrollTop\n    };\n  }\n\n  function getNodeScroll(node) {\n    if (node === getWindow(node) || !isHTMLElement(node)) {\n      return getWindowScroll(node);\n    } else {\n      return getHTMLElementScroll(node);\n    }\n  }\n\n  // Composite means it takes into account transforms as well as layout.\n\n  function getCompositeRect(elementOrVirtualElement, offsetParent, isFixed) {\n    if (isFixed === void 0) {\n      isFixed = false;\n    }\n\n    var documentElement = getDocumentElement(offsetParent);\n    var rect = getBoundingClientRect(elementOrVirtualElement);\n    var isOffsetParentAnElement = isHTMLElement(offsetParent);\n    var scroll = {\n      scrollLeft: 0,\n      scrollTop: 0\n    };\n    var offsets = {\n      x: 0,\n      y: 0\n    };\n\n    if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {\n      if (getNodeName(offsetParent) !== 'body' || // https://github.com/popperjs/popper-core/issues/1078\n      isScrollParent(documentElement)) {\n        scroll = getNodeScroll(offsetParent);\n      }\n\n      if (isHTMLElement(offsetParent)) {\n        offsets = getBoundingClientRect(offsetParent);\n        offsets.x += offsetParent.clientLeft;\n        offsets.y += offsetParent.clientTop;\n      } else if (documentElement) {\n        offsets.x = getWindowScrollBarX(documentElement);\n      }\n    }\n\n    return {\n      x: rect.left + scroll.scrollLeft - offsets.x,\n      y: rect.top + scroll.scrollTop - offsets.y,\n      width: rect.width,\n      height: rect.height\n    };\n  }\n\n  function order(modifiers) {\n    var map = new Map();\n    var visited = new Set();\n    var result = [];\n    modifiers.forEach(function (modifier) {\n      map.set(modifier.name, modifier);\n    }); // On visiting object, check for its dependencies and visit them recursively\n\n    function sort(modifier) {\n      visited.add(modifier.name);\n      var requires = [].concat(modifier.requires || [], modifier.requiresIfExists || []);\n      requires.forEach(function (dep) {\n        if (!visited.has(dep)) {\n          var depModifier = map.get(dep);\n\n          if (depModifier) {\n            sort(depModifier);\n          }\n        }\n      });\n      result.push(modifier);\n    }\n\n    modifiers.forEach(function (modifier) {\n      if (!visited.has(modifier.name)) {\n        // check for visited object\n        sort(modifier);\n      }\n    });\n    return result;\n  }\n\n  function orderModifiers(modifiers) {\n    // order based on dependencies\n    var orderedModifiers = order(modifiers); // order based on phase\n\n    return modifierPhases.reduce(function (acc, phase) {\n      return acc.concat(orderedModifiers.filter(function (modifier) {\n        return modifier.phase === phase;\n      }));\n    }, []);\n  }\n\n  function debounce(fn) {\n    var pending;\n    return function () {\n      if (!pending) {\n        pending = new Promise(function (resolve) {\n          Promise.resolve().then(function () {\n            pending = undefined;\n            resolve(fn());\n          });\n        });\n      }\n\n      return pending;\n    };\n  }\n\n  function mergeByName(modifiers) {\n    var merged = modifiers.reduce(function (merged, current) {\n      var existing = merged[current.name];\n      merged[current.name] = existing ? Object.assign({}, existing, current, {\n        options: Object.assign({}, existing.options, current.options),\n        data: Object.assign({}, existing.data, current.data)\n      }) : current;\n      return merged;\n    }, {}); // IE11 does not support Object.values\n\n    return Object.keys(merged).map(function (key) {\n      return merged[key];\n    });\n  }\n\n  var DEFAULT_OPTIONS = {\n    placement: 'bottom',\n    modifiers: [],\n    strategy: 'absolute'\n  };\n\n  function areValidElements() {\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    return !args.some(function (element) {\n      return !(element && typeof element.getBoundingClientRect === 'function');\n    });\n  }\n\n  function popperGenerator(generatorOptions) {\n    if (generatorOptions === void 0) {\n      generatorOptions = {};\n    }\n\n    var _generatorOptions = generatorOptions,\n        _generatorOptions$def = _generatorOptions.defaultModifiers,\n        defaultModifiers = _generatorOptions$def === void 0 ? [] : _generatorOptions$def,\n        _generatorOptions$def2 = _generatorOptions.defaultOptions,\n        defaultOptions = _generatorOptions$def2 === void 0 ? DEFAULT_OPTIONS : _generatorOptions$def2;\n    return function createPopper(reference, popper, options) {\n      if (options === void 0) {\n        options = defaultOptions;\n      }\n\n      var state = {\n        placement: 'bottom',\n        orderedModifiers: [],\n        options: Object.assign({}, DEFAULT_OPTIONS, defaultOptions),\n        modifiersData: {},\n        elements: {\n          reference: reference,\n          popper: popper\n        },\n        attributes: {},\n        styles: {}\n      };\n      var effectCleanupFns = [];\n      var isDestroyed = false;\n      var instance = {\n        state: state,\n        setOptions: function setOptions(options) {\n          cleanupModifierEffects();\n          state.options = Object.assign({}, defaultOptions, state.options, options);\n          state.scrollParents = {\n            reference: isElement(reference) ? listScrollParents(reference) : reference.contextElement ? listScrollParents(reference.contextElement) : [],\n            popper: listScrollParents(popper)\n          }; // Orders the modifiers based on their dependencies and `phase`\n          // properties\n\n          var orderedModifiers = orderModifiers(mergeByName([].concat(defaultModifiers, state.options.modifiers))); // Strip out disabled modifiers\n\n          state.orderedModifiers = orderedModifiers.filter(function (m) {\n            return m.enabled;\n          }); // Validate the provided modifiers so that the consumer will get warned\n\n          runModifierEffects();\n          return instance.update();\n        },\n        // Sync update – it will always be executed, even if not necessary. This\n        // is useful for low frequency updates where sync behavior simplifies the\n        // logic.\n        // For high frequency updates (e.g. `resize` and `scroll` events), always\n        // prefer the async Popper#update method\n        forceUpdate: function forceUpdate() {\n          if (isDestroyed) {\n            return;\n          }\n\n          var _state$elements = state.elements,\n              reference = _state$elements.reference,\n              popper = _state$elements.popper; // Don't proceed if `reference` or `popper` are not valid elements\n          // anymore\n\n          if (!areValidElements(reference, popper)) {\n\n            return;\n          } // Store the reference and popper rects to be read by modifiers\n\n\n          state.rects = {\n            reference: getCompositeRect(reference, getOffsetParent(popper), state.options.strategy === 'fixed'),\n            popper: getLayoutRect(popper)\n          }; // Modifiers have the ability to reset the current update cycle. The\n          // most common use case for this is the `flip` modifier changing the\n          // placement, which then needs to re-run all the modifiers, because the\n          // logic was previously ran for the previous placement and is therefore\n          // stale/incorrect\n\n          state.reset = false;\n          state.placement = state.options.placement; // On each update cycle, the `modifiersData` property for each modifier\n          // is filled with the initial data specified by the modifier. This means\n          // it doesn't persist and is fresh on each update.\n          // To ensure persistent data, use `${name}#persistent`\n\n          state.orderedModifiers.forEach(function (modifier) {\n            return state.modifiersData[modifier.name] = Object.assign({}, modifier.data);\n          });\n\n          for (var index = 0; index < state.orderedModifiers.length; index++) {\n\n            if (state.reset === true) {\n              state.reset = false;\n              index = -1;\n              continue;\n            }\n\n            var _state$orderedModifie = state.orderedModifiers[index],\n                fn = _state$orderedModifie.fn,\n                _state$orderedModifie2 = _state$orderedModifie.options,\n                _options = _state$orderedModifie2 === void 0 ? {} : _state$orderedModifie2,\n                name = _state$orderedModifie.name;\n\n            if (typeof fn === 'function') {\n              state = fn({\n                state: state,\n                options: _options,\n                name: name,\n                instance: instance\n              }) || state;\n            }\n          }\n        },\n        // Async and optimistically optimized update – it will not be executed if\n        // not necessary (debounced to run at most once-per-tick)\n        update: debounce(function () {\n          return new Promise(function (resolve) {\n            instance.forceUpdate();\n            resolve(state);\n          });\n        }),\n        destroy: function destroy() {\n          cleanupModifierEffects();\n          isDestroyed = true;\n        }\n      };\n\n      if (!areValidElements(reference, popper)) {\n\n        return instance;\n      }\n\n      instance.setOptions(options).then(function (state) {\n        if (!isDestroyed && options.onFirstUpdate) {\n          options.onFirstUpdate(state);\n        }\n      }); // Modifiers have the ability to execute arbitrary code before the first\n      // update cycle runs. They will be executed in the same order as the update\n      // cycle. This is useful when a modifier adds some persistent data that\n      // other modifiers need to use, but the modifier is run after the dependent\n      // one.\n\n      function runModifierEffects() {\n        state.orderedModifiers.forEach(function (_ref3) {\n          var name = _ref3.name,\n              _ref3$options = _ref3.options,\n              options = _ref3$options === void 0 ? {} : _ref3$options,\n              effect = _ref3.effect;\n\n          if (typeof effect === 'function') {\n            var cleanupFn = effect({\n              state: state,\n              name: name,\n              instance: instance,\n              options: options\n            });\n\n            var noopFn = function noopFn() {};\n\n            effectCleanupFns.push(cleanupFn || noopFn);\n          }\n        });\n      }\n\n      function cleanupModifierEffects() {\n        effectCleanupFns.forEach(function (fn) {\n          return fn();\n        });\n        effectCleanupFns = [];\n      }\n\n      return instance;\n    };\n  }\n  var createPopper$2 = /*#__PURE__*/popperGenerator(); // eslint-disable-next-line import/no-unused-modules\n\n  var defaultModifiers$1 = [eventListeners, popperOffsets$1, computeStyles$1, applyStyles$1];\n  var createPopper$1 = /*#__PURE__*/popperGenerator({\n    defaultModifiers: defaultModifiers$1\n  }); // eslint-disable-next-line import/no-unused-modules\n\n  var defaultModifiers = [eventListeners, popperOffsets$1, computeStyles$1, applyStyles$1, offset$1, flip$1, preventOverflow$1, arrow$1, hide$1];\n  var createPopper = /*#__PURE__*/popperGenerator({\n    defaultModifiers: defaultModifiers\n  }); // eslint-disable-next-line import/no-unused-modules\n\n  var Popper = /*#__PURE__*/Object.freeze({\n    __proto__: null,\n    popperGenerator: popperGenerator,\n    detectOverflow: detectOverflow,\n    createPopperBase: createPopper$2,\n    createPopper: createPopper,\n    createPopperLite: createPopper$1,\n    top: top,\n    bottom: bottom,\n    right: right,\n    left: left,\n    auto: auto,\n    basePlacements: basePlacements,\n    start: start,\n    end: end,\n    clippingParents: clippingParents,\n    viewport: viewport,\n    popper: popper,\n    reference: reference,\n    variationPlacements: variationPlacements,\n    placements: placements,\n    beforeRead: beforeRead,\n    read: read,\n    afterRead: afterRead,\n    beforeMain: beforeMain,\n    main: main,\n    afterMain: afterMain,\n    beforeWrite: beforeWrite,\n    write: write,\n    afterWrite: afterWrite,\n    modifierPhases: modifierPhases,\n    applyStyles: applyStyles$1,\n    arrow: arrow$1,\n    computeStyles: computeStyles$1,\n    eventListeners: eventListeners,\n    flip: flip$1,\n    hide: hide$1,\n    offset: offset$1,\n    popperOffsets: popperOffsets$1,\n    preventOverflow: preventOverflow$1\n  });\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): dropdown.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$8 = 'dropdown';\n  const DATA_KEY$7 = 'bs.dropdown';\n  const EVENT_KEY$7 = `.${DATA_KEY$7}`;\n  const DATA_API_KEY$4 = '.data-api';\n  const ESCAPE_KEY$2 = 'Escape';\n  const SPACE_KEY = 'Space';\n  const TAB_KEY = 'Tab';\n  const ARROW_UP_KEY = 'ArrowUp';\n  const ARROW_DOWN_KEY = 'ArrowDown';\n  const RIGHT_MOUSE_BUTTON = 2; // MouseEvent.button value for the secondary button, usually the right button\n\n  const REGEXP_KEYDOWN = new RegExp(`${ARROW_UP_KEY}|${ARROW_DOWN_KEY}|${ESCAPE_KEY$2}`);\n  const EVENT_HIDE$4 = `hide${EVENT_KEY$7}`;\n  const EVENT_HIDDEN$4 = `hidden${EVENT_KEY$7}`;\n  const EVENT_SHOW$4 = `show${EVENT_KEY$7}`;\n  const EVENT_SHOWN$4 = `shown${EVENT_KEY$7}`;\n  const EVENT_CLICK = `click${EVENT_KEY$7}`;\n  const EVENT_CLICK_DATA_API$3 = `click${EVENT_KEY$7}${DATA_API_KEY$4}`;\n  const EVENT_KEYDOWN_DATA_API = `keydown${EVENT_KEY$7}${DATA_API_KEY$4}`;\n  const EVENT_KEYUP_DATA_API = `keyup${EVENT_KEY$7}${DATA_API_KEY$4}`;\n  const CLASS_NAME_SHOW$7 = 'show';\n  const CLASS_NAME_DROPUP = 'dropup';\n  const CLASS_NAME_DROPEND = 'dropend';\n  const CLASS_NAME_DROPSTART = 'dropstart';\n  const CLASS_NAME_NAVBAR = 'navbar';\n  const SELECTOR_DATA_TOGGLE$3 = '[data-bs-toggle=\"dropdown\"]';\n  const SELECTOR_MENU = '.dropdown-menu';\n  const SELECTOR_NAVBAR_NAV = '.navbar-nav';\n  const SELECTOR_VISIBLE_ITEMS = '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)';\n  const PLACEMENT_TOP = isRTL() ? 'top-end' : 'top-start';\n  const PLACEMENT_TOPEND = isRTL() ? 'top-start' : 'top-end';\n  const PLACEMENT_BOTTOM = isRTL() ? 'bottom-end' : 'bottom-start';\n  const PLACEMENT_BOTTOMEND = isRTL() ? 'bottom-start' : 'bottom-end';\n  const PLACEMENT_RIGHT = isRTL() ? 'left-start' : 'right-start';\n  const PLACEMENT_LEFT = isRTL() ? 'right-start' : 'left-start';\n  const Default$7 = {\n    offset: [0, 2],\n    boundary: 'clippingParents',\n    reference: 'toggle',\n    display: 'dynamic',\n    popperConfig: null,\n    autoClose: true\n  };\n  const DefaultType$7 = {\n    offset: '(array|string|function)',\n    boundary: '(string|element)',\n    reference: '(string|element|object)',\n    display: 'string',\n    popperConfig: '(null|object|function)',\n    autoClose: '(boolean|string)'\n  };\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Dropdown extends BaseComponent {\n    constructor(element, config) {\n      super(element);\n      this._popper = null;\n      this._config = this._getConfig(config);\n      this._menu = this._getMenuElement();\n      this._inNavbar = this._detectNavbar();\n\n      this._addEventListeners();\n    } // Getters\n\n\n    static get Default() {\n      return Default$7;\n    }\n\n    static get DefaultType() {\n      return DefaultType$7;\n    }\n\n    static get NAME() {\n      return NAME$8;\n    } // Public\n\n\n    toggle() {\n      if (isDisabled(this._element)) {\n        return;\n      }\n\n      const isActive = this._element.classList.contains(CLASS_NAME_SHOW$7);\n\n      if (isActive) {\n        this.hide();\n        return;\n      }\n\n      this.show();\n    }\n\n    show() {\n      if (isDisabled(this._element) || this._menu.classList.contains(CLASS_NAME_SHOW$7)) {\n        return;\n      }\n\n      const parent = Dropdown.getParentFromElement(this._element);\n      const relatedTarget = {\n        relatedTarget: this._element\n      };\n      const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$4, relatedTarget);\n\n      if (showEvent.defaultPrevented) {\n        return;\n      } // Totally disable Popper for Dropdowns in Navbar\n\n\n      if (this._inNavbar) {\n        Manipulator.setDataAttribute(this._menu, 'popper', 'none');\n      } else {\n        if (typeof Popper === 'undefined') {\n          throw new TypeError('Bootstrap\\'s dropdowns require Popper (https://popper.js.org)');\n        }\n\n        let referenceElement = this._element;\n\n        if (this._config.reference === 'parent') {\n          referenceElement = parent;\n        } else if (isElement$1(this._config.reference)) {\n          referenceElement = getElement(this._config.reference);\n        } else if (typeof this._config.reference === 'object') {\n          referenceElement = this._config.reference;\n        }\n\n        const popperConfig = this._getPopperConfig();\n\n        const isDisplayStatic = popperConfig.modifiers.find(modifier => modifier.name === 'applyStyles' && modifier.enabled === false);\n        this._popper = createPopper(referenceElement, this._menu, popperConfig);\n\n        if (isDisplayStatic) {\n          Manipulator.setDataAttribute(this._menu, 'popper', 'static');\n        }\n      } // If this is a touch-enabled device we add extra\n      // empty mouseover listeners to the body's immediate children;\n      // only needed because of broken event delegation on iOS\n      // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n\n\n      if ('ontouchstart' in document.documentElement && !parent.closest(SELECTOR_NAVBAR_NAV)) {\n        [].concat(...document.body.children).forEach(elem => EventHandler.on(elem, 'mouseover', noop));\n      }\n\n      this._element.focus();\n\n      this._element.setAttribute('aria-expanded', true);\n\n      this._menu.classList.toggle(CLASS_NAME_SHOW$7);\n\n      this._element.classList.toggle(CLASS_NAME_SHOW$7);\n\n      EventHandler.trigger(this._element, EVENT_SHOWN$4, relatedTarget);\n    }\n\n    hide() {\n      if (isDisabled(this._element) || !this._menu.classList.contains(CLASS_NAME_SHOW$7)) {\n        return;\n      }\n\n      const relatedTarget = {\n        relatedTarget: this._element\n      };\n\n      this._completeHide(relatedTarget);\n    }\n\n    dispose() {\n      if (this._popper) {\n        this._popper.destroy();\n      }\n\n      super.dispose();\n    }\n\n    update() {\n      this._inNavbar = this._detectNavbar();\n\n      if (this._popper) {\n        this._popper.update();\n      }\n    } // Private\n\n\n    _addEventListeners() {\n      EventHandler.on(this._element, EVENT_CLICK, event => {\n        event.preventDefault();\n        this.toggle();\n      });\n    }\n\n    _completeHide(relatedTarget) {\n      const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$4, relatedTarget);\n\n      if (hideEvent.defaultPrevented) {\n        return;\n      } // If this is a touch-enabled device we remove the extra\n      // empty mouseover listeners we added for iOS support\n\n\n      if ('ontouchstart' in document.documentElement) {\n        [].concat(...document.body.children).forEach(elem => EventHandler.off(elem, 'mouseover', noop));\n      }\n\n      if (this._popper) {\n        this._popper.destroy();\n      }\n\n      this._menu.classList.remove(CLASS_NAME_SHOW$7);\n\n      this._element.classList.remove(CLASS_NAME_SHOW$7);\n\n      this._element.setAttribute('aria-expanded', 'false');\n\n      Manipulator.removeDataAttribute(this._menu, 'popper');\n      EventHandler.trigger(this._element, EVENT_HIDDEN$4, relatedTarget);\n    }\n\n    _getConfig(config) {\n      config = { ...this.constructor.Default,\n        ...Manipulator.getDataAttributes(this._element),\n        ...config\n      };\n      typeCheckConfig(NAME$8, config, this.constructor.DefaultType);\n\n      if (typeof config.reference === 'object' && !isElement$1(config.reference) && typeof config.reference.getBoundingClientRect !== 'function') {\n        // Popper virtual elements require a getBoundingClientRect method\n        throw new TypeError(`${NAME$8.toUpperCase()}: Option \"reference\" provided type \"object\" without a required \"getBoundingClientRect\" method.`);\n      }\n\n      return config;\n    }\n\n    _getMenuElement() {\n      return SelectorEngine.next(this._element, SELECTOR_MENU)[0];\n    }\n\n    _getPlacement() {\n      const parentDropdown = this._element.parentNode;\n\n      if (parentDropdown.classList.contains(CLASS_NAME_DROPEND)) {\n        return PLACEMENT_RIGHT;\n      }\n\n      if (parentDropdown.classList.contains(CLASS_NAME_DROPSTART)) {\n        return PLACEMENT_LEFT;\n      } // We need to trim the value because custom properties can also include spaces\n\n\n      const isEnd = getComputedStyle(this._menu).getPropertyValue('--bs-position').trim() === 'end';\n\n      if (parentDropdown.classList.contains(CLASS_NAME_DROPUP)) {\n        return isEnd ? PLACEMENT_TOPEND : PLACEMENT_TOP;\n      }\n\n      return isEnd ? PLACEMENT_BOTTOMEND : PLACEMENT_BOTTOM;\n    }\n\n    _detectNavbar() {\n      return this._element.closest(`.${CLASS_NAME_NAVBAR}`) !== null;\n    }\n\n    _getOffset() {\n      const {\n        offset\n      } = this._config;\n\n      if (typeof offset === 'string') {\n        return offset.split(',').map(val => Number.parseInt(val, 10));\n      }\n\n      if (typeof offset === 'function') {\n        return popperData => offset(popperData, this._element);\n      }\n\n      return offset;\n    }\n\n    _getPopperConfig() {\n      const defaultBsPopperConfig = {\n        placement: this._getPlacement(),\n        modifiers: [{\n          name: 'preventOverflow',\n          options: {\n            boundary: this._config.boundary\n          }\n        }, {\n          name: 'offset',\n          options: {\n            offset: this._getOffset()\n          }\n        }]\n      }; // Disable Popper if we have a static display\n\n      if (this._config.display === 'static') {\n        defaultBsPopperConfig.modifiers = [{\n          name: 'applyStyles',\n          enabled: false\n        }];\n      }\n\n      return { ...defaultBsPopperConfig,\n        ...(typeof this._config.popperConfig === 'function' ? this._config.popperConfig(defaultBsPopperConfig) : this._config.popperConfig)\n      };\n    }\n\n    _selectMenuItem({\n      key,\n      target\n    }) {\n      const items = SelectorEngine.find(SELECTOR_VISIBLE_ITEMS, this._menu).filter(isVisible);\n\n      if (!items.length) {\n        return;\n      } // if target isn't included in items (e.g. when expanding the dropdown)\n      // allow cycling to get the last item in case key equals ARROW_UP_KEY\n\n\n      getNextActiveElement(items, target, key === ARROW_DOWN_KEY, !items.includes(target)).focus();\n    } // Static\n\n\n    static dropdownInterface(element, config) {\n      const data = Dropdown.getOrCreateInstance(element, config);\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config]();\n      }\n    }\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        Dropdown.dropdownInterface(this, config);\n      });\n    }\n\n    static clearMenus(event) {\n      if (event && (event.button === RIGHT_MOUSE_BUTTON || event.type === 'keyup' && event.key !== TAB_KEY)) {\n        return;\n      }\n\n      const toggles = SelectorEngine.find(SELECTOR_DATA_TOGGLE$3);\n\n      for (let i = 0, len = toggles.length; i < len; i++) {\n        const context = Dropdown.getInstance(toggles[i]);\n\n        if (!context || context._config.autoClose === false) {\n          continue;\n        }\n\n        if (!context._element.classList.contains(CLASS_NAME_SHOW$7)) {\n          continue;\n        }\n\n        const relatedTarget = {\n          relatedTarget: context._element\n        };\n\n        if (event) {\n          const composedPath = event.composedPath();\n          const isMenuTarget = composedPath.includes(context._menu);\n\n          if (composedPath.includes(context._element) || context._config.autoClose === 'inside' && !isMenuTarget || context._config.autoClose === 'outside' && isMenuTarget) {\n            continue;\n          } // Tab navigation through the dropdown menu or events from contained inputs shouldn't close the menu\n\n\n          if (context._menu.contains(event.target) && (event.type === 'keyup' && event.key === TAB_KEY || /input|select|option|textarea|form/i.test(event.target.tagName))) {\n            continue;\n          }\n\n          if (event.type === 'click') {\n            relatedTarget.clickEvent = event;\n          }\n        }\n\n        context._completeHide(relatedTarget);\n      }\n    }\n\n    static getParentFromElement(element) {\n      return getElementFromSelector(element) || element.parentNode;\n    }\n\n    static dataApiKeydownHandler(event) {\n      // If not input/textarea:\n      //  - And not a key in REGEXP_KEYDOWN => not a dropdown command\n      // If input/textarea:\n      //  - If space key => not a dropdown command\n      //  - If key is other than escape\n      //    - If key is not up or down => not a dropdown command\n      //    - If trigger inside the menu => not a dropdown command\n      if (/input|textarea/i.test(event.target.tagName) ? event.key === SPACE_KEY || event.key !== ESCAPE_KEY$2 && (event.key !== ARROW_DOWN_KEY && event.key !== ARROW_UP_KEY || event.target.closest(SELECTOR_MENU)) : !REGEXP_KEYDOWN.test(event.key)) {\n        return;\n      }\n\n      const isActive = this.classList.contains(CLASS_NAME_SHOW$7);\n\n      if (!isActive && event.key === ESCAPE_KEY$2) {\n        return;\n      }\n\n      event.preventDefault();\n      event.stopPropagation();\n\n      if (isDisabled(this)) {\n        return;\n      }\n\n      const getToggleButton = () => this.matches(SELECTOR_DATA_TOGGLE$3) ? this : SelectorEngine.prev(this, SELECTOR_DATA_TOGGLE$3)[0];\n\n      if (event.key === ESCAPE_KEY$2) {\n        getToggleButton().focus();\n        Dropdown.clearMenus();\n        return;\n      }\n\n      if (event.key === ARROW_UP_KEY || event.key === ARROW_DOWN_KEY) {\n        if (!isActive) {\n          getToggleButton().click();\n        }\n\n        Dropdown.getInstance(getToggleButton())._selectMenuItem(event);\n\n        return;\n      }\n\n      if (!isActive || event.key === SPACE_KEY) {\n        Dropdown.clearMenus();\n      }\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_DATA_TOGGLE$3, Dropdown.dataApiKeydownHandler);\n  EventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown.dataApiKeydownHandler);\n  EventHandler.on(document, EVENT_CLICK_DATA_API$3, Dropdown.clearMenus);\n  EventHandler.on(document, EVENT_KEYUP_DATA_API, Dropdown.clearMenus);\n  EventHandler.on(document, EVENT_CLICK_DATA_API$3, SELECTOR_DATA_TOGGLE$3, function (event) {\n    event.preventDefault();\n    Dropdown.dropdownInterface(this);\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Dropdown to jQuery only if jQuery is present\n   */\n\n  defineJQueryPlugin(Dropdown);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): util/scrollBar.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  const SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top';\n  const SELECTOR_STICKY_CONTENT = '.sticky-top';\n\n  class ScrollBarHelper {\n    constructor() {\n      this._element = document.body;\n    }\n\n    getWidth() {\n      // https://developer.mozilla.org/en-US/docs/Web/API/Window/innerWidth#usage_notes\n      const documentWidth = document.documentElement.clientWidth;\n      return Math.abs(window.innerWidth - documentWidth);\n    }\n\n    hide() {\n      const width = this.getWidth();\n\n      this._disableOverFlow(); // give padding to element to balance the hidden scrollbar width\n\n\n      this._setElementAttributes(this._element, 'paddingRight', calculatedValue => calculatedValue + width); // trick: We adjust positive paddingRight and negative marginRight to sticky-top elements to keep showing fullwidth\n\n\n      this._setElementAttributes(SELECTOR_FIXED_CONTENT, 'paddingRight', calculatedValue => calculatedValue + width);\n\n      this._setElementAttributes(SELECTOR_STICKY_CONTENT, 'marginRight', calculatedValue => calculatedValue - width);\n    }\n\n    _disableOverFlow() {\n      this._saveInitialAttribute(this._element, 'overflow');\n\n      this._element.style.overflow = 'hidden';\n    }\n\n    _setElementAttributes(selector, styleProp, callback) {\n      const scrollbarWidth = this.getWidth();\n\n      const manipulationCallBack = element => {\n        if (element !== this._element && window.innerWidth > element.clientWidth + scrollbarWidth) {\n          return;\n        }\n\n        this._saveInitialAttribute(element, styleProp);\n\n        const calculatedValue = window.getComputedStyle(element)[styleProp];\n        element.style[styleProp] = `${callback(Number.parseFloat(calculatedValue))}px`;\n      };\n\n      this._applyManipulationCallback(selector, manipulationCallBack);\n    }\n\n    reset() {\n      this._resetElementAttributes(this._element, 'overflow');\n\n      this._resetElementAttributes(this._element, 'paddingRight');\n\n      this._resetElementAttributes(SELECTOR_FIXED_CONTENT, 'paddingRight');\n\n      this._resetElementAttributes(SELECTOR_STICKY_CONTENT, 'marginRight');\n    }\n\n    _saveInitialAttribute(element, styleProp) {\n      const actualValue = element.style[styleProp];\n\n      if (actualValue) {\n        Manipulator.setDataAttribute(element, styleProp, actualValue);\n      }\n    }\n\n    _resetElementAttributes(selector, styleProp) {\n      const manipulationCallBack = element => {\n        const value = Manipulator.getDataAttribute(element, styleProp);\n\n        if (typeof value === 'undefined') {\n          element.style.removeProperty(styleProp);\n        } else {\n          Manipulator.removeDataAttribute(element, styleProp);\n          element.style[styleProp] = value;\n        }\n      };\n\n      this._applyManipulationCallback(selector, manipulationCallBack);\n    }\n\n    _applyManipulationCallback(selector, callBack) {\n      if (isElement$1(selector)) {\n        callBack(selector);\n      } else {\n        SelectorEngine.find(selector, this._element).forEach(callBack);\n      }\n    }\n\n    isOverflowing() {\n      return this.getWidth() > 0;\n    }\n\n  }\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): util/backdrop.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  const Default$6 = {\n    isVisible: true,\n    // if false, we use the backdrop helper without adding any element to the dom\n    isAnimated: false,\n    rootElement: 'body',\n    // give the choice to place backdrop under different elements\n    clickCallback: null\n  };\n  const DefaultType$6 = {\n    isVisible: 'boolean',\n    isAnimated: 'boolean',\n    rootElement: '(element|string)',\n    clickCallback: '(function|null)'\n  };\n  const NAME$7 = 'backdrop';\n  const CLASS_NAME_BACKDROP = 'modal-backdrop';\n  const CLASS_NAME_FADE$5 = 'fade';\n  const CLASS_NAME_SHOW$6 = 'show';\n  const EVENT_MOUSEDOWN = `mousedown.bs.${NAME$7}`;\n\n  class Backdrop {\n    constructor(config) {\n      this._config = this._getConfig(config);\n      this._isAppended = false;\n      this._element = null;\n    }\n\n    show(callback) {\n      if (!this._config.isVisible) {\n        execute(callback);\n        return;\n      }\n\n      this._append();\n\n      if (this._config.isAnimated) {\n        reflow(this._getElement());\n      }\n\n      this._getElement().classList.add(CLASS_NAME_SHOW$6);\n\n      this._emulateAnimation(() => {\n        execute(callback);\n      });\n    }\n\n    hide(callback) {\n      if (!this._config.isVisible) {\n        execute(callback);\n        return;\n      }\n\n      this._getElement().classList.remove(CLASS_NAME_SHOW$6);\n\n      this._emulateAnimation(() => {\n        this.dispose();\n        execute(callback);\n      });\n    } // Private\n\n\n    _getElement() {\n      if (!this._element) {\n        const backdrop = document.createElement('div');\n        backdrop.className = CLASS_NAME_BACKDROP;\n\n        if (this._config.isAnimated) {\n          backdrop.classList.add(CLASS_NAME_FADE$5);\n        }\n\n        this._element = backdrop;\n      }\n\n      return this._element;\n    }\n\n    _getConfig(config) {\n      config = { ...Default$6,\n        ...(typeof config === 'object' ? config : {})\n      }; // use getElement() with the default \"body\" to get a fresh Element on each instantiation\n\n      config.rootElement = getElement(config.rootElement);\n      typeCheckConfig(NAME$7, config, DefaultType$6);\n      return config;\n    }\n\n    _append() {\n      if (this._isAppended) {\n        return;\n      }\n\n      this._config.rootElement.appendChild(this._getElement());\n\n      EventHandler.on(this._getElement(), EVENT_MOUSEDOWN, () => {\n        execute(this._config.clickCallback);\n      });\n      this._isAppended = true;\n    }\n\n    dispose() {\n      if (!this._isAppended) {\n        return;\n      }\n\n      EventHandler.off(this._element, EVENT_MOUSEDOWN);\n\n      this._element.remove();\n\n      this._isAppended = false;\n    }\n\n    _emulateAnimation(callback) {\n      executeAfterTransition(callback, this._getElement(), this._config.isAnimated);\n    }\n\n  }\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): modal.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$6 = 'modal';\n  const DATA_KEY$6 = 'bs.modal';\n  const EVENT_KEY$6 = `.${DATA_KEY$6}`;\n  const DATA_API_KEY$3 = '.data-api';\n  const ESCAPE_KEY$1 = 'Escape';\n  const Default$5 = {\n    backdrop: true,\n    keyboard: true,\n    focus: true\n  };\n  const DefaultType$5 = {\n    backdrop: '(boolean|string)',\n    keyboard: 'boolean',\n    focus: 'boolean'\n  };\n  const EVENT_HIDE$3 = `hide${EVENT_KEY$6}`;\n  const EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY$6}`;\n  const EVENT_HIDDEN$3 = `hidden${EVENT_KEY$6}`;\n  const EVENT_SHOW$3 = `show${EVENT_KEY$6}`;\n  const EVENT_SHOWN$3 = `shown${EVENT_KEY$6}`;\n  const EVENT_FOCUSIN$2 = `focusin${EVENT_KEY$6}`;\n  const EVENT_RESIZE = `resize${EVENT_KEY$6}`;\n  const EVENT_CLICK_DISMISS$2 = `click.dismiss${EVENT_KEY$6}`;\n  const EVENT_KEYDOWN_DISMISS$1 = `keydown.dismiss${EVENT_KEY$6}`;\n  const EVENT_MOUSEUP_DISMISS = `mouseup.dismiss${EVENT_KEY$6}`;\n  const EVENT_MOUSEDOWN_DISMISS = `mousedown.dismiss${EVENT_KEY$6}`;\n  const EVENT_CLICK_DATA_API$2 = `click${EVENT_KEY$6}${DATA_API_KEY$3}`;\n  const CLASS_NAME_OPEN = 'modal-open';\n  const CLASS_NAME_FADE$4 = 'fade';\n  const CLASS_NAME_SHOW$5 = 'show';\n  const CLASS_NAME_STATIC = 'modal-static';\n  const SELECTOR_DIALOG = '.modal-dialog';\n  const SELECTOR_MODAL_BODY = '.modal-body';\n  const SELECTOR_DATA_TOGGLE$2 = '[data-bs-toggle=\"modal\"]';\n  const SELECTOR_DATA_DISMISS$2 = '[data-bs-dismiss=\"modal\"]';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Modal extends BaseComponent {\n    constructor(element, config) {\n      super(element);\n      this._config = this._getConfig(config);\n      this._dialog = SelectorEngine.findOne(SELECTOR_DIALOG, this._element);\n      this._backdrop = this._initializeBackDrop();\n      this._isShown = false;\n      this._ignoreBackdropClick = false;\n      this._isTransitioning = false;\n      this._scrollBar = new ScrollBarHelper();\n    } // Getters\n\n\n    static get Default() {\n      return Default$5;\n    }\n\n    static get NAME() {\n      return NAME$6;\n    } // Public\n\n\n    toggle(relatedTarget) {\n      return this._isShown ? this.hide() : this.show(relatedTarget);\n    }\n\n    show(relatedTarget) {\n      if (this._isShown || this._isTransitioning) {\n        return;\n      }\n\n      const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$3, {\n        relatedTarget\n      });\n\n      if (showEvent.defaultPrevented) {\n        return;\n      }\n\n      this._isShown = true;\n\n      if (this._isAnimated()) {\n        this._isTransitioning = true;\n      }\n\n      this._scrollBar.hide();\n\n      document.body.classList.add(CLASS_NAME_OPEN);\n\n      this._adjustDialog();\n\n      this._setEscapeEvent();\n\n      this._setResizeEvent();\n\n      EventHandler.on(this._element, EVENT_CLICK_DISMISS$2, SELECTOR_DATA_DISMISS$2, event => this.hide(event));\n      EventHandler.on(this._dialog, EVENT_MOUSEDOWN_DISMISS, () => {\n        EventHandler.one(this._element, EVENT_MOUSEUP_DISMISS, event => {\n          if (event.target === this._element) {\n            this._ignoreBackdropClick = true;\n          }\n        });\n      });\n\n      this._showBackdrop(() => this._showElement(relatedTarget));\n    }\n\n    hide(event) {\n      if (event && ['A', 'AREA'].includes(event.target.tagName)) {\n        event.preventDefault();\n      }\n\n      if (!this._isShown || this._isTransitioning) {\n        return;\n      }\n\n      const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$3);\n\n      if (hideEvent.defaultPrevented) {\n        return;\n      }\n\n      this._isShown = false;\n\n      const isAnimated = this._isAnimated();\n\n      if (isAnimated) {\n        this._isTransitioning = true;\n      }\n\n      this._setEscapeEvent();\n\n      this._setResizeEvent();\n\n      EventHandler.off(document, EVENT_FOCUSIN$2);\n\n      this._element.classList.remove(CLASS_NAME_SHOW$5);\n\n      EventHandler.off(this._element, EVENT_CLICK_DISMISS$2);\n      EventHandler.off(this._dialog, EVENT_MOUSEDOWN_DISMISS);\n\n      this._queueCallback(() => this._hideModal(), this._element, isAnimated);\n    }\n\n    dispose() {\n      [window, this._dialog].forEach(htmlElement => EventHandler.off(htmlElement, EVENT_KEY$6));\n\n      this._backdrop.dispose();\n\n      super.dispose();\n      /**\n       * `document` has 2 events `EVENT_FOCUSIN` and `EVENT_CLICK_DATA_API`\n       * Do not move `document` in `htmlElements` array\n       * It will remove `EVENT_CLICK_DATA_API` event that should remain\n       */\n\n      EventHandler.off(document, EVENT_FOCUSIN$2);\n    }\n\n    handleUpdate() {\n      this._adjustDialog();\n    } // Private\n\n\n    _initializeBackDrop() {\n      return new Backdrop({\n        isVisible: Boolean(this._config.backdrop),\n        // 'static' option will be translated to true, and booleans will keep their value\n        isAnimated: this._isAnimated()\n      });\n    }\n\n    _getConfig(config) {\n      config = { ...Default$5,\n        ...Manipulator.getDataAttributes(this._element),\n        ...(typeof config === 'object' ? config : {})\n      };\n      typeCheckConfig(NAME$6, config, DefaultType$5);\n      return config;\n    }\n\n    _showElement(relatedTarget) {\n      const isAnimated = this._isAnimated();\n\n      const modalBody = SelectorEngine.findOne(SELECTOR_MODAL_BODY, this._dialog);\n\n      if (!this._element.parentNode || this._element.parentNode.nodeType !== Node.ELEMENT_NODE) {\n        // Don't move modal's DOM position\n        document.body.appendChild(this._element);\n      }\n\n      this._element.style.display = 'block';\n\n      this._element.removeAttribute('aria-hidden');\n\n      this._element.setAttribute('aria-modal', true);\n\n      this._element.setAttribute('role', 'dialog');\n\n      this._element.scrollTop = 0;\n\n      if (modalBody) {\n        modalBody.scrollTop = 0;\n      }\n\n      if (isAnimated) {\n        reflow(this._element);\n      }\n\n      this._element.classList.add(CLASS_NAME_SHOW$5);\n\n      if (this._config.focus) {\n        this._enforceFocus();\n      }\n\n      const transitionComplete = () => {\n        if (this._config.focus) {\n          this._element.focus();\n        }\n\n        this._isTransitioning = false;\n        EventHandler.trigger(this._element, EVENT_SHOWN$3, {\n          relatedTarget\n        });\n      };\n\n      this._queueCallback(transitionComplete, this._dialog, isAnimated);\n    }\n\n    _enforceFocus() {\n      EventHandler.off(document, EVENT_FOCUSIN$2); // guard against infinite focus loop\n\n      EventHandler.on(document, EVENT_FOCUSIN$2, event => {\n        if (document !== event.target && this._element !== event.target && !this._element.contains(event.target)) {\n          this._element.focus();\n        }\n      });\n    }\n\n    _setEscapeEvent() {\n      if (this._isShown) {\n        EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS$1, event => {\n          if (this._config.keyboard && event.key === ESCAPE_KEY$1) {\n            event.preventDefault();\n            this.hide();\n          } else if (!this._config.keyboard && event.key === ESCAPE_KEY$1) {\n            this._triggerBackdropTransition();\n          }\n        });\n      } else {\n        EventHandler.off(this._element, EVENT_KEYDOWN_DISMISS$1);\n      }\n    }\n\n    _setResizeEvent() {\n      if (this._isShown) {\n        EventHandler.on(window, EVENT_RESIZE, () => this._adjustDialog());\n      } else {\n        EventHandler.off(window, EVENT_RESIZE);\n      }\n    }\n\n    _hideModal() {\n      this._element.style.display = 'none';\n\n      this._element.setAttribute('aria-hidden', true);\n\n      this._element.removeAttribute('aria-modal');\n\n      this._element.removeAttribute('role');\n\n      this._isTransitioning = false;\n\n      this._backdrop.hide(() => {\n        document.body.classList.remove(CLASS_NAME_OPEN);\n\n        this._resetAdjustments();\n\n        this._scrollBar.reset();\n\n        EventHandler.trigger(this._element, EVENT_HIDDEN$3);\n      });\n    }\n\n    _showBackdrop(callback) {\n      EventHandler.on(this._element, EVENT_CLICK_DISMISS$2, event => {\n        if (this._ignoreBackdropClick) {\n          this._ignoreBackdropClick = false;\n          return;\n        }\n\n        if (event.target !== event.currentTarget) {\n          return;\n        }\n\n        if (this._config.backdrop === true) {\n          this.hide();\n        } else if (this._config.backdrop === 'static') {\n          this._triggerBackdropTransition();\n        }\n      });\n\n      this._backdrop.show(callback);\n    }\n\n    _isAnimated() {\n      return this._element.classList.contains(CLASS_NAME_FADE$4);\n    }\n\n    _triggerBackdropTransition() {\n      const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED);\n\n      if (hideEvent.defaultPrevented) {\n        return;\n      }\n\n      const {\n        classList,\n        scrollHeight,\n        style\n      } = this._element;\n      const isModalOverflowing = scrollHeight > document.documentElement.clientHeight; // return if the following background transition hasn't yet completed\n\n      if (!isModalOverflowing && style.overflowY === 'hidden' || classList.contains(CLASS_NAME_STATIC)) {\n        return;\n      }\n\n      if (!isModalOverflowing) {\n        style.overflowY = 'hidden';\n      }\n\n      classList.add(CLASS_NAME_STATIC);\n\n      this._queueCallback(() => {\n        classList.remove(CLASS_NAME_STATIC);\n\n        if (!isModalOverflowing) {\n          this._queueCallback(() => {\n            style.overflowY = '';\n          }, this._dialog);\n        }\n      }, this._dialog);\n\n      this._element.focus();\n    } // ----------------------------------------------------------------------\n    // the following methods are used to handle overflowing modals\n    // ----------------------------------------------------------------------\n\n\n    _adjustDialog() {\n      const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;\n\n      const scrollbarWidth = this._scrollBar.getWidth();\n\n      const isBodyOverflowing = scrollbarWidth > 0;\n\n      if (!isBodyOverflowing && isModalOverflowing && !isRTL() || isBodyOverflowing && !isModalOverflowing && isRTL()) {\n        this._element.style.paddingLeft = `${scrollbarWidth}px`;\n      }\n\n      if (isBodyOverflowing && !isModalOverflowing && !isRTL() || !isBodyOverflowing && isModalOverflowing && isRTL()) {\n        this._element.style.paddingRight = `${scrollbarWidth}px`;\n      }\n    }\n\n    _resetAdjustments() {\n      this._element.style.paddingLeft = '';\n      this._element.style.paddingRight = '';\n    } // Static\n\n\n    static jQueryInterface(config, relatedTarget) {\n      return this.each(function () {\n        const data = Modal.getOrCreateInstance(this, config);\n\n        if (typeof config !== 'string') {\n          return;\n        }\n\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config](relatedTarget);\n      });\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(document, EVENT_CLICK_DATA_API$2, SELECTOR_DATA_TOGGLE$2, function (event) {\n    const target = getElementFromSelector(this);\n\n    if (['A', 'AREA'].includes(this.tagName)) {\n      event.preventDefault();\n    }\n\n    EventHandler.one(target, EVENT_SHOW$3, showEvent => {\n      if (showEvent.defaultPrevented) {\n        // only register focus restorer if modal will actually get shown\n        return;\n      }\n\n      EventHandler.one(target, EVENT_HIDDEN$3, () => {\n        if (isVisible(this)) {\n          this.focus();\n        }\n      });\n    });\n    const data = Modal.getOrCreateInstance(target);\n    data.toggle(this);\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Modal to jQuery only if jQuery is present\n   */\n\n  defineJQueryPlugin(Modal);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): offcanvas.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$5 = 'offcanvas';\n  const DATA_KEY$5 = 'bs.offcanvas';\n  const EVENT_KEY$5 = `.${DATA_KEY$5}`;\n  const DATA_API_KEY$2 = '.data-api';\n  const EVENT_LOAD_DATA_API$1 = `load${EVENT_KEY$5}${DATA_API_KEY$2}`;\n  const ESCAPE_KEY = 'Escape';\n  const Default$4 = {\n    backdrop: true,\n    keyboard: true,\n    scroll: false\n  };\n  const DefaultType$4 = {\n    backdrop: 'boolean',\n    keyboard: 'boolean',\n    scroll: 'boolean'\n  };\n  const CLASS_NAME_SHOW$4 = 'show';\n  const OPEN_SELECTOR = '.offcanvas.show';\n  const EVENT_SHOW$2 = `show${EVENT_KEY$5}`;\n  const EVENT_SHOWN$2 = `shown${EVENT_KEY$5}`;\n  const EVENT_HIDE$2 = `hide${EVENT_KEY$5}`;\n  const EVENT_HIDDEN$2 = `hidden${EVENT_KEY$5}`;\n  const EVENT_FOCUSIN$1 = `focusin${EVENT_KEY$5}`;\n  const EVENT_CLICK_DATA_API$1 = `click${EVENT_KEY$5}${DATA_API_KEY$2}`;\n  const EVENT_CLICK_DISMISS$1 = `click.dismiss${EVENT_KEY$5}`;\n  const EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY$5}`;\n  const SELECTOR_DATA_DISMISS$1 = '[data-bs-dismiss=\"offcanvas\"]';\n  const SELECTOR_DATA_TOGGLE$1 = '[data-bs-toggle=\"offcanvas\"]';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Offcanvas extends BaseComponent {\n    constructor(element, config) {\n      super(element);\n      this._config = this._getConfig(config);\n      this._isShown = false;\n      this._backdrop = this._initializeBackDrop();\n\n      this._addEventListeners();\n    } // Getters\n\n\n    static get NAME() {\n      return NAME$5;\n    }\n\n    static get Default() {\n      return Default$4;\n    } // Public\n\n\n    toggle(relatedTarget) {\n      return this._isShown ? this.hide() : this.show(relatedTarget);\n    }\n\n    show(relatedTarget) {\n      if (this._isShown) {\n        return;\n      }\n\n      const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$2, {\n        relatedTarget\n      });\n\n      if (showEvent.defaultPrevented) {\n        return;\n      }\n\n      this._isShown = true;\n      this._element.style.visibility = 'visible';\n\n      this._backdrop.show();\n\n      if (!this._config.scroll) {\n        new ScrollBarHelper().hide();\n\n        this._enforceFocusOnElement(this._element);\n      }\n\n      this._element.removeAttribute('aria-hidden');\n\n      this._element.setAttribute('aria-modal', true);\n\n      this._element.setAttribute('role', 'dialog');\n\n      this._element.classList.add(CLASS_NAME_SHOW$4);\n\n      const completeCallBack = () => {\n        EventHandler.trigger(this._element, EVENT_SHOWN$2, {\n          relatedTarget\n        });\n      };\n\n      this._queueCallback(completeCallBack, this._element, true);\n    }\n\n    hide() {\n      if (!this._isShown) {\n        return;\n      }\n\n      const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$2);\n\n      if (hideEvent.defaultPrevented) {\n        return;\n      }\n\n      EventHandler.off(document, EVENT_FOCUSIN$1);\n\n      this._element.blur();\n\n      this._isShown = false;\n\n      this._element.classList.remove(CLASS_NAME_SHOW$4);\n\n      this._backdrop.hide();\n\n      const completeCallback = () => {\n        this._element.setAttribute('aria-hidden', true);\n\n        this._element.removeAttribute('aria-modal');\n\n        this._element.removeAttribute('role');\n\n        this._element.style.visibility = 'hidden';\n\n        if (!this._config.scroll) {\n          new ScrollBarHelper().reset();\n        }\n\n        EventHandler.trigger(this._element, EVENT_HIDDEN$2);\n      };\n\n      this._queueCallback(completeCallback, this._element, true);\n    }\n\n    dispose() {\n      this._backdrop.dispose();\n\n      super.dispose();\n      EventHandler.off(document, EVENT_FOCUSIN$1);\n    } // Private\n\n\n    _getConfig(config) {\n      config = { ...Default$4,\n        ...Manipulator.getDataAttributes(this._element),\n        ...(typeof config === 'object' ? config : {})\n      };\n      typeCheckConfig(NAME$5, config, DefaultType$4);\n      return config;\n    }\n\n    _initializeBackDrop() {\n      return new Backdrop({\n        isVisible: this._config.backdrop,\n        isAnimated: true,\n        rootElement: this._element.parentNode,\n        clickCallback: () => this.hide()\n      });\n    }\n\n    _enforceFocusOnElement(element) {\n      EventHandler.off(document, EVENT_FOCUSIN$1); // guard against infinite focus loop\n\n      EventHandler.on(document, EVENT_FOCUSIN$1, event => {\n        if (document !== event.target && element !== event.target && !element.contains(event.target)) {\n          element.focus();\n        }\n      });\n      element.focus();\n    }\n\n    _addEventListeners() {\n      EventHandler.on(this._element, EVENT_CLICK_DISMISS$1, SELECTOR_DATA_DISMISS$1, () => this.hide());\n      EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS, event => {\n        if (this._config.keyboard && event.key === ESCAPE_KEY) {\n          this.hide();\n        }\n      });\n    } // Static\n\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = Offcanvas.getOrCreateInstance(this, config);\n\n        if (typeof config !== 'string') {\n          return;\n        }\n\n        if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config](this);\n      });\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(document, EVENT_CLICK_DATA_API$1, SELECTOR_DATA_TOGGLE$1, function (event) {\n    const target = getElementFromSelector(this);\n\n    if (['A', 'AREA'].includes(this.tagName)) {\n      event.preventDefault();\n    }\n\n    if (isDisabled(this)) {\n      return;\n    }\n\n    EventHandler.one(target, EVENT_HIDDEN$2, () => {\n      // focus on trigger when it is closed\n      if (isVisible(this)) {\n        this.focus();\n      }\n    }); // avoid conflict when clicking a toggler of an offcanvas, while another is open\n\n    const allReadyOpen = SelectorEngine.findOne(OPEN_SELECTOR);\n\n    if (allReadyOpen && allReadyOpen !== target) {\n      Offcanvas.getInstance(allReadyOpen).hide();\n    }\n\n    const data = Offcanvas.getOrCreateInstance(target);\n    data.toggle(this);\n  });\n  EventHandler.on(window, EVENT_LOAD_DATA_API$1, () => SelectorEngine.find(OPEN_SELECTOR).forEach(el => Offcanvas.getOrCreateInstance(el).show()));\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   */\n\n  defineJQueryPlugin(Offcanvas);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): util/sanitizer.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  const uriAttrs = new Set(['background', 'cite', 'href', 'itemtype', 'longdesc', 'poster', 'src', 'xlink:href']);\n  const ARIA_ATTRIBUTE_PATTERN = /^aria-[\\w-]*$/i;\n  /**\n   * A pattern that recognizes a commonly useful subset of URLs that are safe.\n   *\n   * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts\n   */\n\n  const SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file):|[^#&/:?]*(?:[#/?]|$))/i;\n  /**\n   * A pattern that matches safe data URLs. Only matches image, video and audio types.\n   *\n   * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts\n   */\n\n  const DATA_URL_PATTERN = /^data:(?:image\\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\\/(?:mpeg|mp4|ogg|webm)|audio\\/(?:mp3|oga|ogg|opus));base64,[\\d+/a-z]+=*$/i;\n\n  const allowedAttribute = (attr, allowedAttributeList) => {\n    const attrName = attr.nodeName.toLowerCase();\n\n    if (allowedAttributeList.includes(attrName)) {\n      if (uriAttrs.has(attrName)) {\n        return Boolean(SAFE_URL_PATTERN.test(attr.nodeValue) || DATA_URL_PATTERN.test(attr.nodeValue));\n      }\n\n      return true;\n    }\n\n    const regExp = allowedAttributeList.filter(attrRegex => attrRegex instanceof RegExp); // Check if a regular expression validates the attribute.\n\n    for (let i = 0, len = regExp.length; i < len; i++) {\n      if (regExp[i].test(attrName)) {\n        return true;\n      }\n    }\n\n    return false;\n  };\n\n  const DefaultAllowlist = {\n    // Global attributes allowed on any supplied element below.\n    '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],\n    a: ['target', 'href', 'title', 'rel'],\n    area: [],\n    b: [],\n    br: [],\n    col: [],\n    code: [],\n    div: [],\n    em: [],\n    hr: [],\n    h1: [],\n    h2: [],\n    h3: [],\n    h4: [],\n    h5: [],\n    h6: [],\n    i: [],\n    img: ['src', 'srcset', 'alt', 'title', 'width', 'height'],\n    li: [],\n    ol: [],\n    p: [],\n    pre: [],\n    s: [],\n    small: [],\n    span: [],\n    sub: [],\n    sup: [],\n    strong: [],\n    u: [],\n    ul: []\n  };\n  function sanitizeHtml(unsafeHtml, allowList, sanitizeFn) {\n    if (!unsafeHtml.length) {\n      return unsafeHtml;\n    }\n\n    if (sanitizeFn && typeof sanitizeFn === 'function') {\n      return sanitizeFn(unsafeHtml);\n    }\n\n    const domParser = new window.DOMParser();\n    const createdDocument = domParser.parseFromString(unsafeHtml, 'text/html');\n    const allowlistKeys = Object.keys(allowList);\n    const elements = [].concat(...createdDocument.body.querySelectorAll('*'));\n\n    for (let i = 0, len = elements.length; i < len; i++) {\n      const el = elements[i];\n      const elName = el.nodeName.toLowerCase();\n\n      if (!allowlistKeys.includes(elName)) {\n        el.remove();\n        continue;\n      }\n\n      const attributeList = [].concat(...el.attributes);\n      const allowedAttributes = [].concat(allowList['*'] || [], allowList[elName] || []);\n      attributeList.forEach(attr => {\n        if (!allowedAttribute(attr, allowedAttributes)) {\n          el.removeAttribute(attr.nodeName);\n        }\n      });\n    }\n\n    return createdDocument.body.innerHTML;\n  }\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): tooltip.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$4 = 'tooltip';\n  const DATA_KEY$4 = 'bs.tooltip';\n  const EVENT_KEY$4 = `.${DATA_KEY$4}`;\n  const CLASS_PREFIX$1 = 'bs-tooltip';\n  const BSCLS_PREFIX_REGEX$1 = new RegExp(`(^|\\\\s)${CLASS_PREFIX$1}\\\\S+`, 'g');\n  const DISALLOWED_ATTRIBUTES = new Set(['sanitize', 'allowList', 'sanitizeFn']);\n  const DefaultType$3 = {\n    animation: 'boolean',\n    template: 'string',\n    title: '(string|element|function)',\n    trigger: 'string',\n    delay: '(number|object)',\n    html: 'boolean',\n    selector: '(string|boolean)',\n    placement: '(string|function)',\n    offset: '(array|string|function)',\n    container: '(string|element|boolean)',\n    fallbackPlacements: 'array',\n    boundary: '(string|element)',\n    customClass: '(string|function)',\n    sanitize: 'boolean',\n    sanitizeFn: '(null|function)',\n    allowList: 'object',\n    popperConfig: '(null|object|function)'\n  };\n  const AttachmentMap = {\n    AUTO: 'auto',\n    TOP: 'top',\n    RIGHT: isRTL() ? 'left' : 'right',\n    BOTTOM: 'bottom',\n    LEFT: isRTL() ? 'right' : 'left'\n  };\n  const Default$3 = {\n    animation: true,\n    template: '<div class=\"tooltip\" role=\"tooltip\">' + '<div class=\"tooltip-arrow\"></div>' + '<div class=\"tooltip-inner\"></div>' + '</div>',\n    trigger: 'hover focus',\n    title: '',\n    delay: 0,\n    html: false,\n    selector: false,\n    placement: 'top',\n    offset: [0, 0],\n    container: false,\n    fallbackPlacements: ['top', 'right', 'bottom', 'left'],\n    boundary: 'clippingParents',\n    customClass: '',\n    sanitize: true,\n    sanitizeFn: null,\n    allowList: DefaultAllowlist,\n    popperConfig: null\n  };\n  const Event$2 = {\n    HIDE: `hide${EVENT_KEY$4}`,\n    HIDDEN: `hidden${EVENT_KEY$4}`,\n    SHOW: `show${EVENT_KEY$4}`,\n    SHOWN: `shown${EVENT_KEY$4}`,\n    INSERTED: `inserted${EVENT_KEY$4}`,\n    CLICK: `click${EVENT_KEY$4}`,\n    FOCUSIN: `focusin${EVENT_KEY$4}`,\n    FOCUSOUT: `focusout${EVENT_KEY$4}`,\n    MOUSEENTER: `mouseenter${EVENT_KEY$4}`,\n    MOUSELEAVE: `mouseleave${EVENT_KEY$4}`\n  };\n  const CLASS_NAME_FADE$3 = 'fade';\n  const CLASS_NAME_MODAL = 'modal';\n  const CLASS_NAME_SHOW$3 = 'show';\n  const HOVER_STATE_SHOW = 'show';\n  const HOVER_STATE_OUT = 'out';\n  const SELECTOR_TOOLTIP_INNER = '.tooltip-inner';\n  const TRIGGER_HOVER = 'hover';\n  const TRIGGER_FOCUS = 'focus';\n  const TRIGGER_CLICK = 'click';\n  const TRIGGER_MANUAL = 'manual';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Tooltip extends BaseComponent {\n    constructor(element, config) {\n      if (typeof Popper === 'undefined') {\n        throw new TypeError('Bootstrap\\'s tooltips require Popper (https://popper.js.org)');\n      }\n\n      super(element); // private\n\n      this._isEnabled = true;\n      this._timeout = 0;\n      this._hoverState = '';\n      this._activeTrigger = {};\n      this._popper = null; // Protected\n\n      this._config = this._getConfig(config);\n      this.tip = null;\n\n      this._setListeners();\n    } // Getters\n\n\n    static get Default() {\n      return Default$3;\n    }\n\n    static get NAME() {\n      return NAME$4;\n    }\n\n    static get Event() {\n      return Event$2;\n    }\n\n    static get DefaultType() {\n      return DefaultType$3;\n    } // Public\n\n\n    enable() {\n      this._isEnabled = true;\n    }\n\n    disable() {\n      this._isEnabled = false;\n    }\n\n    toggleEnabled() {\n      this._isEnabled = !this._isEnabled;\n    }\n\n    toggle(event) {\n      if (!this._isEnabled) {\n        return;\n      }\n\n      if (event) {\n        const context = this._initializeOnDelegatedTarget(event);\n\n        context._activeTrigger.click = !context._activeTrigger.click;\n\n        if (context._isWithActiveTrigger()) {\n          context._enter(null, context);\n        } else {\n          context._leave(null, context);\n        }\n      } else {\n        if (this.getTipElement().classList.contains(CLASS_NAME_SHOW$3)) {\n          this._leave(null, this);\n\n          return;\n        }\n\n        this._enter(null, this);\n      }\n    }\n\n    dispose() {\n      clearTimeout(this._timeout);\n      EventHandler.off(this._element.closest(`.${CLASS_NAME_MODAL}`), 'hide.bs.modal', this._hideModalHandler);\n\n      if (this.tip) {\n        this.tip.remove();\n      }\n\n      if (this._popper) {\n        this._popper.destroy();\n      }\n\n      super.dispose();\n    }\n\n    show() {\n      if (this._element.style.display === 'none') {\n        throw new Error('Please use show on visible elements');\n      }\n\n      if (!(this.isWithContent() && this._isEnabled)) {\n        return;\n      }\n\n      const showEvent = EventHandler.trigger(this._element, this.constructor.Event.SHOW);\n      const shadowRoot = findShadowRoot(this._element);\n      const isInTheDom = shadowRoot === null ? this._element.ownerDocument.documentElement.contains(this._element) : shadowRoot.contains(this._element);\n\n      if (showEvent.defaultPrevented || !isInTheDom) {\n        return;\n      }\n\n      const tip = this.getTipElement();\n      const tipId = getUID(this.constructor.NAME);\n      tip.setAttribute('id', tipId);\n\n      this._element.setAttribute('aria-describedby', tipId);\n\n      this.setContent();\n\n      if (this._config.animation) {\n        tip.classList.add(CLASS_NAME_FADE$3);\n      }\n\n      const placement = typeof this._config.placement === 'function' ? this._config.placement.call(this, tip, this._element) : this._config.placement;\n\n      const attachment = this._getAttachment(placement);\n\n      this._addAttachmentClass(attachment);\n\n      const {\n        container\n      } = this._config;\n      Data.set(tip, this.constructor.DATA_KEY, this);\n\n      if (!this._element.ownerDocument.documentElement.contains(this.tip)) {\n        container.appendChild(tip);\n        EventHandler.trigger(this._element, this.constructor.Event.INSERTED);\n      }\n\n      if (this._popper) {\n        this._popper.update();\n      } else {\n        this._popper = createPopper(this._element, tip, this._getPopperConfig(attachment));\n      }\n\n      tip.classList.add(CLASS_NAME_SHOW$3);\n      const customClass = typeof this._config.customClass === 'function' ? this._config.customClass() : this._config.customClass;\n\n      if (customClass) {\n        tip.classList.add(...customClass.split(' '));\n      } // If this is a touch-enabled device we add extra\n      // empty mouseover listeners to the body's immediate children;\n      // only needed because of broken event delegation on iOS\n      // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n\n\n      if ('ontouchstart' in document.documentElement) {\n        [].concat(...document.body.children).forEach(element => {\n          EventHandler.on(element, 'mouseover', noop);\n        });\n      }\n\n      const complete = () => {\n        const prevHoverState = this._hoverState;\n        this._hoverState = null;\n        EventHandler.trigger(this._element, this.constructor.Event.SHOWN);\n\n        if (prevHoverState === HOVER_STATE_OUT) {\n          this._leave(null, this);\n        }\n      };\n\n      const isAnimated = this.tip.classList.contains(CLASS_NAME_FADE$3);\n\n      this._queueCallback(complete, this.tip, isAnimated);\n    }\n\n    hide() {\n      if (!this._popper) {\n        return;\n      }\n\n      const tip = this.getTipElement();\n\n      const complete = () => {\n        if (this._isWithActiveTrigger()) {\n          return;\n        }\n\n        if (this._hoverState !== HOVER_STATE_SHOW) {\n          tip.remove();\n        }\n\n        this._cleanTipClass();\n\n        this._element.removeAttribute('aria-describedby');\n\n        EventHandler.trigger(this._element, this.constructor.Event.HIDDEN);\n\n        if (this._popper) {\n          this._popper.destroy();\n\n          this._popper = null;\n        }\n      };\n\n      const hideEvent = EventHandler.trigger(this._element, this.constructor.Event.HIDE);\n\n      if (hideEvent.defaultPrevented) {\n        return;\n      }\n\n      tip.classList.remove(CLASS_NAME_SHOW$3); // If this is a touch-enabled device we remove the extra\n      // empty mouseover listeners we added for iOS support\n\n      if ('ontouchstart' in document.documentElement) {\n        [].concat(...document.body.children).forEach(element => EventHandler.off(element, 'mouseover', noop));\n      }\n\n      this._activeTrigger[TRIGGER_CLICK] = false;\n      this._activeTrigger[TRIGGER_FOCUS] = false;\n      this._activeTrigger[TRIGGER_HOVER] = false;\n      const isAnimated = this.tip.classList.contains(CLASS_NAME_FADE$3);\n\n      this._queueCallback(complete, this.tip, isAnimated);\n\n      this._hoverState = '';\n    }\n\n    update() {\n      if (this._popper !== null) {\n        this._popper.update();\n      }\n    } // Protected\n\n\n    isWithContent() {\n      return Boolean(this.getTitle());\n    }\n\n    getTipElement() {\n      if (this.tip) {\n        return this.tip;\n      }\n\n      const element = document.createElement('div');\n      element.innerHTML = this._config.template;\n      this.tip = element.children[0];\n      return this.tip;\n    }\n\n    setContent() {\n      const tip = this.getTipElement();\n      this.setElementContent(SelectorEngine.findOne(SELECTOR_TOOLTIP_INNER, tip), this.getTitle());\n      tip.classList.remove(CLASS_NAME_FADE$3, CLASS_NAME_SHOW$3);\n    }\n\n    setElementContent(element, content) {\n      if (element === null) {\n        return;\n      }\n\n      if (isElement$1(content)) {\n        content = getElement(content); // content is a DOM node or a jQuery\n\n        if (this._config.html) {\n          if (content.parentNode !== element) {\n            element.innerHTML = '';\n            element.appendChild(content);\n          }\n        } else {\n          element.textContent = content.textContent;\n        }\n\n        return;\n      }\n\n      if (this._config.html) {\n        if (this._config.sanitize) {\n          content = sanitizeHtml(content, this._config.allowList, this._config.sanitizeFn);\n        }\n\n        element.innerHTML = content;\n      } else {\n        element.textContent = content;\n      }\n    }\n\n    getTitle() {\n      let title = this._element.getAttribute('data-bs-original-title');\n\n      if (!title) {\n        title = typeof this._config.title === 'function' ? this._config.title.call(this._element) : this._config.title;\n      }\n\n      return title;\n    }\n\n    updateAttachment(attachment) {\n      if (attachment === 'right') {\n        return 'end';\n      }\n\n      if (attachment === 'left') {\n        return 'start';\n      }\n\n      return attachment;\n    } // Private\n\n\n    _initializeOnDelegatedTarget(event, context) {\n      const dataKey = this.constructor.DATA_KEY;\n      context = context || Data.get(event.delegateTarget, dataKey);\n\n      if (!context) {\n        context = new this.constructor(event.delegateTarget, this._getDelegateConfig());\n        Data.set(event.delegateTarget, dataKey, context);\n      }\n\n      return context;\n    }\n\n    _getOffset() {\n      const {\n        offset\n      } = this._config;\n\n      if (typeof offset === 'string') {\n        return offset.split(',').map(val => Number.parseInt(val, 10));\n      }\n\n      if (typeof offset === 'function') {\n        return popperData => offset(popperData, this._element);\n      }\n\n      return offset;\n    }\n\n    _getPopperConfig(attachment) {\n      const defaultBsPopperConfig = {\n        placement: attachment,\n        modifiers: [{\n          name: 'flip',\n          options: {\n            fallbackPlacements: this._config.fallbackPlacements\n          }\n        }, {\n          name: 'offset',\n          options: {\n            offset: this._getOffset()\n          }\n        }, {\n          name: 'preventOverflow',\n          options: {\n            boundary: this._config.boundary\n          }\n        }, {\n          name: 'arrow',\n          options: {\n            element: `.${this.constructor.NAME}-arrow`\n          }\n        }, {\n          name: 'onChange',\n          enabled: true,\n          phase: 'afterWrite',\n          fn: data => this._handlePopperPlacementChange(data)\n        }],\n        onFirstUpdate: data => {\n          if (data.options.placement !== data.placement) {\n            this._handlePopperPlacementChange(data);\n          }\n        }\n      };\n      return { ...defaultBsPopperConfig,\n        ...(typeof this._config.popperConfig === 'function' ? this._config.popperConfig(defaultBsPopperConfig) : this._config.popperConfig)\n      };\n    }\n\n    _addAttachmentClass(attachment) {\n      this.getTipElement().classList.add(`${CLASS_PREFIX$1}-${this.updateAttachment(attachment)}`);\n    }\n\n    _getAttachment(placement) {\n      return AttachmentMap[placement.toUpperCase()];\n    }\n\n    _setListeners() {\n      const triggers = this._config.trigger.split(' ');\n\n      triggers.forEach(trigger => {\n        if (trigger === 'click') {\n          EventHandler.on(this._element, this.constructor.Event.CLICK, this._config.selector, event => this.toggle(event));\n        } else if (trigger !== TRIGGER_MANUAL) {\n          const eventIn = trigger === TRIGGER_HOVER ? this.constructor.Event.MOUSEENTER : this.constructor.Event.FOCUSIN;\n          const eventOut = trigger === TRIGGER_HOVER ? this.constructor.Event.MOUSELEAVE : this.constructor.Event.FOCUSOUT;\n          EventHandler.on(this._element, eventIn, this._config.selector, event => this._enter(event));\n          EventHandler.on(this._element, eventOut, this._config.selector, event => this._leave(event));\n        }\n      });\n\n      this._hideModalHandler = () => {\n        if (this._element) {\n          this.hide();\n        }\n      };\n\n      EventHandler.on(this._element.closest(`.${CLASS_NAME_MODAL}`), 'hide.bs.modal', this._hideModalHandler);\n\n      if (this._config.selector) {\n        this._config = { ...this._config,\n          trigger: 'manual',\n          selector: ''\n        };\n      } else {\n        this._fixTitle();\n      }\n    }\n\n    _fixTitle() {\n      const title = this._element.getAttribute('title');\n\n      const originalTitleType = typeof this._element.getAttribute('data-bs-original-title');\n\n      if (title || originalTitleType !== 'string') {\n        this._element.setAttribute('data-bs-original-title', title || '');\n\n        if (title && !this._element.getAttribute('aria-label') && !this._element.textContent) {\n          this._element.setAttribute('aria-label', title);\n        }\n\n        this._element.setAttribute('title', '');\n      }\n    }\n\n    _enter(event, context) {\n      context = this._initializeOnDelegatedTarget(event, context);\n\n      if (event) {\n        context._activeTrigger[event.type === 'focusin' ? TRIGGER_FOCUS : TRIGGER_HOVER] = true;\n      }\n\n      if (context.getTipElement().classList.contains(CLASS_NAME_SHOW$3) || context._hoverState === HOVER_STATE_SHOW) {\n        context._hoverState = HOVER_STATE_SHOW;\n        return;\n      }\n\n      clearTimeout(context._timeout);\n      context._hoverState = HOVER_STATE_SHOW;\n\n      if (!context._config.delay || !context._config.delay.show) {\n        context.show();\n        return;\n      }\n\n      context._timeout = setTimeout(() => {\n        if (context._hoverState === HOVER_STATE_SHOW) {\n          context.show();\n        }\n      }, context._config.delay.show);\n    }\n\n    _leave(event, context) {\n      context = this._initializeOnDelegatedTarget(event, context);\n\n      if (event) {\n        context._activeTrigger[event.type === 'focusout' ? TRIGGER_FOCUS : TRIGGER_HOVER] = context._element.contains(event.relatedTarget);\n      }\n\n      if (context._isWithActiveTrigger()) {\n        return;\n      }\n\n      clearTimeout(context._timeout);\n      context._hoverState = HOVER_STATE_OUT;\n\n      if (!context._config.delay || !context._config.delay.hide) {\n        context.hide();\n        return;\n      }\n\n      context._timeout = setTimeout(() => {\n        if (context._hoverState === HOVER_STATE_OUT) {\n          context.hide();\n        }\n      }, context._config.delay.hide);\n    }\n\n    _isWithActiveTrigger() {\n      for (const trigger in this._activeTrigger) {\n        if (this._activeTrigger[trigger]) {\n          return true;\n        }\n      }\n\n      return false;\n    }\n\n    _getConfig(config) {\n      const dataAttributes = Manipulator.getDataAttributes(this._element);\n      Object.keys(dataAttributes).forEach(dataAttr => {\n        if (DISALLOWED_ATTRIBUTES.has(dataAttr)) {\n          delete dataAttributes[dataAttr];\n        }\n      });\n      config = { ...this.constructor.Default,\n        ...dataAttributes,\n        ...(typeof config === 'object' && config ? config : {})\n      };\n      config.container = config.container === false ? document.body : getElement(config.container);\n\n      if (typeof config.delay === 'number') {\n        config.delay = {\n          show: config.delay,\n          hide: config.delay\n        };\n      }\n\n      if (typeof config.title === 'number') {\n        config.title = config.title.toString();\n      }\n\n      if (typeof config.content === 'number') {\n        config.content = config.content.toString();\n      }\n\n      typeCheckConfig(NAME$4, config, this.constructor.DefaultType);\n\n      if (config.sanitize) {\n        config.template = sanitizeHtml(config.template, config.allowList, config.sanitizeFn);\n      }\n\n      return config;\n    }\n\n    _getDelegateConfig() {\n      const config = {};\n\n      if (this._config) {\n        for (const key in this._config) {\n          if (this.constructor.Default[key] !== this._config[key]) {\n            config[key] = this._config[key];\n          }\n        }\n      }\n\n      return config;\n    }\n\n    _cleanTipClass() {\n      const tip = this.getTipElement();\n      const tabClass = tip.getAttribute('class').match(BSCLS_PREFIX_REGEX$1);\n\n      if (tabClass !== null && tabClass.length > 0) {\n        tabClass.map(token => token.trim()).forEach(tClass => tip.classList.remove(tClass));\n      }\n    }\n\n    _handlePopperPlacementChange(popperData) {\n      const {\n        state\n      } = popperData;\n\n      if (!state) {\n        return;\n      }\n\n      this.tip = state.elements.popper;\n\n      this._cleanTipClass();\n\n      this._addAttachmentClass(this._getAttachment(state.placement));\n    } // Static\n\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = Tooltip.getOrCreateInstance(this, config);\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(`No method named \"${config}\"`);\n          }\n\n          data[config]();\n        }\n      });\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Tooltip to jQuery only if jQuery is present\n   */\n\n\n  defineJQueryPlugin(Tooltip);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): popover.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$3 = 'popover';\n  const DATA_KEY$3 = 'bs.popover';\n  const EVENT_KEY$3 = `.${DATA_KEY$3}`;\n  const CLASS_PREFIX = 'bs-popover';\n  const BSCLS_PREFIX_REGEX = new RegExp(`(^|\\\\s)${CLASS_PREFIX}\\\\S+`, 'g');\n  const Default$2 = { ...Tooltip.Default,\n    placement: 'right',\n    offset: [0, 8],\n    trigger: 'click',\n    content: '',\n    template: '<div class=\"popover\" role=\"tooltip\">' + '<div class=\"popover-arrow\"></div>' + '<h3 class=\"popover-header\"></h3>' + '<div class=\"popover-body\"></div>' + '</div>'\n  };\n  const DefaultType$2 = { ...Tooltip.DefaultType,\n    content: '(string|element|function)'\n  };\n  const Event$1 = {\n    HIDE: `hide${EVENT_KEY$3}`,\n    HIDDEN: `hidden${EVENT_KEY$3}`,\n    SHOW: `show${EVENT_KEY$3}`,\n    SHOWN: `shown${EVENT_KEY$3}`,\n    INSERTED: `inserted${EVENT_KEY$3}`,\n    CLICK: `click${EVENT_KEY$3}`,\n    FOCUSIN: `focusin${EVENT_KEY$3}`,\n    FOCUSOUT: `focusout${EVENT_KEY$3}`,\n    MOUSEENTER: `mouseenter${EVENT_KEY$3}`,\n    MOUSELEAVE: `mouseleave${EVENT_KEY$3}`\n  };\n  const CLASS_NAME_FADE$2 = 'fade';\n  const CLASS_NAME_SHOW$2 = 'show';\n  const SELECTOR_TITLE = '.popover-header';\n  const SELECTOR_CONTENT = '.popover-body';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Popover extends Tooltip {\n    // Getters\n    static get Default() {\n      return Default$2;\n    }\n\n    static get NAME() {\n      return NAME$3;\n    }\n\n    static get Event() {\n      return Event$1;\n    }\n\n    static get DefaultType() {\n      return DefaultType$2;\n    } // Overrides\n\n\n    isWithContent() {\n      return this.getTitle() || this._getContent();\n    }\n\n    getTipElement() {\n      if (this.tip) {\n        return this.tip;\n      }\n\n      this.tip = super.getTipElement();\n\n      if (!this.getTitle()) {\n        SelectorEngine.findOne(SELECTOR_TITLE, this.tip).remove();\n      }\n\n      if (!this._getContent()) {\n        SelectorEngine.findOne(SELECTOR_CONTENT, this.tip).remove();\n      }\n\n      return this.tip;\n    }\n\n    setContent() {\n      const tip = this.getTipElement(); // we use append for html objects to maintain js events\n\n      this.setElementContent(SelectorEngine.findOne(SELECTOR_TITLE, tip), this.getTitle());\n\n      let content = this._getContent();\n\n      if (typeof content === 'function') {\n        content = content.call(this._element);\n      }\n\n      this.setElementContent(SelectorEngine.findOne(SELECTOR_CONTENT, tip), content);\n      tip.classList.remove(CLASS_NAME_FADE$2, CLASS_NAME_SHOW$2);\n    } // Private\n\n\n    _addAttachmentClass(attachment) {\n      this.getTipElement().classList.add(`${CLASS_PREFIX}-${this.updateAttachment(attachment)}`);\n    }\n\n    _getContent() {\n      return this._element.getAttribute('data-bs-content') || this._config.content;\n    }\n\n    _cleanTipClass() {\n      const tip = this.getTipElement();\n      const tabClass = tip.getAttribute('class').match(BSCLS_PREFIX_REGEX);\n\n      if (tabClass !== null && tabClass.length > 0) {\n        tabClass.map(token => token.trim()).forEach(tClass => tip.classList.remove(tClass));\n      }\n    } // Static\n\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = Popover.getOrCreateInstance(this, config);\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(`No method named \"${config}\"`);\n          }\n\n          data[config]();\n        }\n      });\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Popover to jQuery only if jQuery is present\n   */\n\n\n  defineJQueryPlugin(Popover);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): scrollspy.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$2 = 'scrollspy';\n  const DATA_KEY$2 = 'bs.scrollspy';\n  const EVENT_KEY$2 = `.${DATA_KEY$2}`;\n  const DATA_API_KEY$1 = '.data-api';\n  const Default$1 = {\n    offset: 10,\n    method: 'auto',\n    target: ''\n  };\n  const DefaultType$1 = {\n    offset: 'number',\n    method: 'string',\n    target: '(string|element)'\n  };\n  const EVENT_ACTIVATE = `activate${EVENT_KEY$2}`;\n  const EVENT_SCROLL = `scroll${EVENT_KEY$2}`;\n  const EVENT_LOAD_DATA_API = `load${EVENT_KEY$2}${DATA_API_KEY$1}`;\n  const CLASS_NAME_DROPDOWN_ITEM = 'dropdown-item';\n  const CLASS_NAME_ACTIVE$1 = 'active';\n  const SELECTOR_DATA_SPY = '[data-bs-spy=\"scroll\"]';\n  const SELECTOR_NAV_LIST_GROUP$1 = '.nav, .list-group';\n  const SELECTOR_NAV_LINKS = '.nav-link';\n  const SELECTOR_NAV_ITEMS = '.nav-item';\n  const SELECTOR_LIST_ITEMS = '.list-group-item';\n  const SELECTOR_DROPDOWN$1 = '.dropdown';\n  const SELECTOR_DROPDOWN_TOGGLE$1 = '.dropdown-toggle';\n  const METHOD_OFFSET = 'offset';\n  const METHOD_POSITION = 'position';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class ScrollSpy extends BaseComponent {\n    constructor(element, config) {\n      super(element);\n      this._scrollElement = this._element.tagName === 'BODY' ? window : this._element;\n      this._config = this._getConfig(config);\n      this._selector = `${this._config.target} ${SELECTOR_NAV_LINKS}, ${this._config.target} ${SELECTOR_LIST_ITEMS}, ${this._config.target} .${CLASS_NAME_DROPDOWN_ITEM}`;\n      this._offsets = [];\n      this._targets = [];\n      this._activeTarget = null;\n      this._scrollHeight = 0;\n      EventHandler.on(this._scrollElement, EVENT_SCROLL, () => this._process());\n      this.refresh();\n\n      this._process();\n    } // Getters\n\n\n    static get Default() {\n      return Default$1;\n    }\n\n    static get NAME() {\n      return NAME$2;\n    } // Public\n\n\n    refresh() {\n      const autoMethod = this._scrollElement === this._scrollElement.window ? METHOD_OFFSET : METHOD_POSITION;\n      const offsetMethod = this._config.method === 'auto' ? autoMethod : this._config.method;\n      const offsetBase = offsetMethod === METHOD_POSITION ? this._getScrollTop() : 0;\n      this._offsets = [];\n      this._targets = [];\n      this._scrollHeight = this._getScrollHeight();\n      const targets = SelectorEngine.find(this._selector);\n      targets.map(element => {\n        const targetSelector = getSelectorFromElement(element);\n        const target = targetSelector ? SelectorEngine.findOne(targetSelector) : null;\n\n        if (target) {\n          const targetBCR = target.getBoundingClientRect();\n\n          if (targetBCR.width || targetBCR.height) {\n            return [Manipulator[offsetMethod](target).top + offsetBase, targetSelector];\n          }\n        }\n\n        return null;\n      }).filter(item => item).sort((a, b) => a[0] - b[0]).forEach(item => {\n        this._offsets.push(item[0]);\n\n        this._targets.push(item[1]);\n      });\n    }\n\n    dispose() {\n      EventHandler.off(this._scrollElement, EVENT_KEY$2);\n      super.dispose();\n    } // Private\n\n\n    _getConfig(config) {\n      config = { ...Default$1,\n        ...Manipulator.getDataAttributes(this._element),\n        ...(typeof config === 'object' && config ? config : {})\n      };\n\n      if (typeof config.target !== 'string' && isElement$1(config.target)) {\n        let {\n          id\n        } = config.target;\n\n        if (!id) {\n          id = getUID(NAME$2);\n          config.target.id = id;\n        }\n\n        config.target = `#${id}`;\n      }\n\n      typeCheckConfig(NAME$2, config, DefaultType$1);\n      return config;\n    }\n\n    _getScrollTop() {\n      return this._scrollElement === window ? this._scrollElement.pageYOffset : this._scrollElement.scrollTop;\n    }\n\n    _getScrollHeight() {\n      return this._scrollElement.scrollHeight || Math.max(document.body.scrollHeight, document.documentElement.scrollHeight);\n    }\n\n    _getOffsetHeight() {\n      return this._scrollElement === window ? window.innerHeight : this._scrollElement.getBoundingClientRect().height;\n    }\n\n    _process() {\n      const scrollTop = this._getScrollTop() + this._config.offset;\n\n      const scrollHeight = this._getScrollHeight();\n\n      const maxScroll = this._config.offset + scrollHeight - this._getOffsetHeight();\n\n      if (this._scrollHeight !== scrollHeight) {\n        this.refresh();\n      }\n\n      if (scrollTop >= maxScroll) {\n        const target = this._targets[this._targets.length - 1];\n\n        if (this._activeTarget !== target) {\n          this._activate(target);\n        }\n\n        return;\n      }\n\n      if (this._activeTarget && scrollTop < this._offsets[0] && this._offsets[0] > 0) {\n        this._activeTarget = null;\n\n        this._clear();\n\n        return;\n      }\n\n      for (let i = this._offsets.length; i--;) {\n        const isActiveTarget = this._activeTarget !== this._targets[i] && scrollTop >= this._offsets[i] && (typeof this._offsets[i + 1] === 'undefined' || scrollTop < this._offsets[i + 1]);\n\n        if (isActiveTarget) {\n          this._activate(this._targets[i]);\n        }\n      }\n    }\n\n    _activate(target) {\n      this._activeTarget = target;\n\n      this._clear();\n\n      const queries = this._selector.split(',').map(selector => `${selector}[data-bs-target=\"${target}\"],${selector}[href=\"${target}\"]`);\n\n      const link = SelectorEngine.findOne(queries.join(','));\n\n      if (link.classList.contains(CLASS_NAME_DROPDOWN_ITEM)) {\n        SelectorEngine.findOne(SELECTOR_DROPDOWN_TOGGLE$1, link.closest(SELECTOR_DROPDOWN$1)).classList.add(CLASS_NAME_ACTIVE$1);\n        link.classList.add(CLASS_NAME_ACTIVE$1);\n      } else {\n        // Set triggered link as active\n        link.classList.add(CLASS_NAME_ACTIVE$1);\n        SelectorEngine.parents(link, SELECTOR_NAV_LIST_GROUP$1).forEach(listGroup => {\n          // Set triggered links parents as active\n          // With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor\n          SelectorEngine.prev(listGroup, `${SELECTOR_NAV_LINKS}, ${SELECTOR_LIST_ITEMS}`).forEach(item => item.classList.add(CLASS_NAME_ACTIVE$1)); // Handle special case when .nav-link is inside .nav-item\n\n          SelectorEngine.prev(listGroup, SELECTOR_NAV_ITEMS).forEach(navItem => {\n            SelectorEngine.children(navItem, SELECTOR_NAV_LINKS).forEach(item => item.classList.add(CLASS_NAME_ACTIVE$1));\n          });\n        });\n      }\n\n      EventHandler.trigger(this._scrollElement, EVENT_ACTIVATE, {\n        relatedTarget: target\n      });\n    }\n\n    _clear() {\n      SelectorEngine.find(this._selector).filter(node => node.classList.contains(CLASS_NAME_ACTIVE$1)).forEach(node => node.classList.remove(CLASS_NAME_ACTIVE$1));\n    } // Static\n\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = ScrollSpy.getOrCreateInstance(this, config);\n\n        if (typeof config !== 'string') {\n          return;\n        }\n\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config]();\n      });\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n    SelectorEngine.find(SELECTOR_DATA_SPY).forEach(spy => new ScrollSpy(spy));\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .ScrollSpy to jQuery only if jQuery is present\n   */\n\n  defineJQueryPlugin(ScrollSpy);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): tab.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$1 = 'tab';\n  const DATA_KEY$1 = 'bs.tab';\n  const EVENT_KEY$1 = `.${DATA_KEY$1}`;\n  const DATA_API_KEY = '.data-api';\n  const EVENT_HIDE$1 = `hide${EVENT_KEY$1}`;\n  const EVENT_HIDDEN$1 = `hidden${EVENT_KEY$1}`;\n  const EVENT_SHOW$1 = `show${EVENT_KEY$1}`;\n  const EVENT_SHOWN$1 = `shown${EVENT_KEY$1}`;\n  const EVENT_CLICK_DATA_API = `click${EVENT_KEY$1}${DATA_API_KEY}`;\n  const CLASS_NAME_DROPDOWN_MENU = 'dropdown-menu';\n  const CLASS_NAME_ACTIVE = 'active';\n  const CLASS_NAME_FADE$1 = 'fade';\n  const CLASS_NAME_SHOW$1 = 'show';\n  const SELECTOR_DROPDOWN = '.dropdown';\n  const SELECTOR_NAV_LIST_GROUP = '.nav, .list-group';\n  const SELECTOR_ACTIVE = '.active';\n  const SELECTOR_ACTIVE_UL = ':scope > li > .active';\n  const SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"tab\"], [data-bs-toggle=\"pill\"], [data-bs-toggle=\"list\"]';\n  const SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle';\n  const SELECTOR_DROPDOWN_ACTIVE_CHILD = ':scope > .dropdown-menu .active';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Tab extends BaseComponent {\n    // Getters\n    static get NAME() {\n      return NAME$1;\n    } // Public\n\n\n    show() {\n      if (this._element.parentNode && this._element.parentNode.nodeType === Node.ELEMENT_NODE && this._element.classList.contains(CLASS_NAME_ACTIVE)) {\n        return;\n      }\n\n      let previous;\n      const target = getElementFromSelector(this._element);\n\n      const listElement = this._element.closest(SELECTOR_NAV_LIST_GROUP);\n\n      if (listElement) {\n        const itemSelector = listElement.nodeName === 'UL' || listElement.nodeName === 'OL' ? SELECTOR_ACTIVE_UL : SELECTOR_ACTIVE;\n        previous = SelectorEngine.find(itemSelector, listElement);\n        previous = previous[previous.length - 1];\n      }\n\n      const hideEvent = previous ? EventHandler.trigger(previous, EVENT_HIDE$1, {\n        relatedTarget: this._element\n      }) : null;\n      const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$1, {\n        relatedTarget: previous\n      });\n\n      if (showEvent.defaultPrevented || hideEvent !== null && hideEvent.defaultPrevented) {\n        return;\n      }\n\n      this._activate(this._element, listElement);\n\n      const complete = () => {\n        EventHandler.trigger(previous, EVENT_HIDDEN$1, {\n          relatedTarget: this._element\n        });\n        EventHandler.trigger(this._element, EVENT_SHOWN$1, {\n          relatedTarget: previous\n        });\n      };\n\n      if (target) {\n        this._activate(target, target.parentNode, complete);\n      } else {\n        complete();\n      }\n    } // Private\n\n\n    _activate(element, container, callback) {\n      const activeElements = container && (container.nodeName === 'UL' || container.nodeName === 'OL') ? SelectorEngine.find(SELECTOR_ACTIVE_UL, container) : SelectorEngine.children(container, SELECTOR_ACTIVE);\n      const active = activeElements[0];\n      const isTransitioning = callback && active && active.classList.contains(CLASS_NAME_FADE$1);\n\n      const complete = () => this._transitionComplete(element, active, callback);\n\n      if (active && isTransitioning) {\n        active.classList.remove(CLASS_NAME_SHOW$1);\n\n        this._queueCallback(complete, element, true);\n      } else {\n        complete();\n      }\n    }\n\n    _transitionComplete(element, active, callback) {\n      if (active) {\n        active.classList.remove(CLASS_NAME_ACTIVE);\n        const dropdownChild = SelectorEngine.findOne(SELECTOR_DROPDOWN_ACTIVE_CHILD, active.parentNode);\n\n        if (dropdownChild) {\n          dropdownChild.classList.remove(CLASS_NAME_ACTIVE);\n        }\n\n        if (active.getAttribute('role') === 'tab') {\n          active.setAttribute('aria-selected', false);\n        }\n      }\n\n      element.classList.add(CLASS_NAME_ACTIVE);\n\n      if (element.getAttribute('role') === 'tab') {\n        element.setAttribute('aria-selected', true);\n      }\n\n      reflow(element);\n\n      if (element.classList.contains(CLASS_NAME_FADE$1)) {\n        element.classList.add(CLASS_NAME_SHOW$1);\n      }\n\n      let parent = element.parentNode;\n\n      if (parent && parent.nodeName === 'LI') {\n        parent = parent.parentNode;\n      }\n\n      if (parent && parent.classList.contains(CLASS_NAME_DROPDOWN_MENU)) {\n        const dropdownElement = element.closest(SELECTOR_DROPDOWN);\n\n        if (dropdownElement) {\n          SelectorEngine.find(SELECTOR_DROPDOWN_TOGGLE, dropdownElement).forEach(dropdown => dropdown.classList.add(CLASS_NAME_ACTIVE));\n        }\n\n        element.setAttribute('aria-expanded', true);\n      }\n\n      if (callback) {\n        callback();\n      }\n    } // Static\n\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = Tab.getOrCreateInstance(this);\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(`No method named \"${config}\"`);\n          }\n\n          data[config]();\n        }\n      });\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n    if (['A', 'AREA'].includes(this.tagName)) {\n      event.preventDefault();\n    }\n\n    if (isDisabled(this)) {\n      return;\n    }\n\n    const data = Tab.getOrCreateInstance(this);\n    data.show();\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Tab to jQuery only if jQuery is present\n   */\n\n  defineJQueryPlugin(Tab);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): toast.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME = 'toast';\n  const DATA_KEY = 'bs.toast';\n  const EVENT_KEY = `.${DATA_KEY}`;\n  const EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY}`;\n  const EVENT_MOUSEOVER = `mouseover${EVENT_KEY}`;\n  const EVENT_MOUSEOUT = `mouseout${EVENT_KEY}`;\n  const EVENT_FOCUSIN = `focusin${EVENT_KEY}`;\n  const EVENT_FOCUSOUT = `focusout${EVENT_KEY}`;\n  const EVENT_HIDE = `hide${EVENT_KEY}`;\n  const EVENT_HIDDEN = `hidden${EVENT_KEY}`;\n  const EVENT_SHOW = `show${EVENT_KEY}`;\n  const EVENT_SHOWN = `shown${EVENT_KEY}`;\n  const CLASS_NAME_FADE = 'fade';\n  const CLASS_NAME_HIDE = 'hide';\n  const CLASS_NAME_SHOW = 'show';\n  const CLASS_NAME_SHOWING = 'showing';\n  const DefaultType = {\n    animation: 'boolean',\n    autohide: 'boolean',\n    delay: 'number'\n  };\n  const Default = {\n    animation: true,\n    autohide: true,\n    delay: 5000\n  };\n  const SELECTOR_DATA_DISMISS = '[data-bs-dismiss=\"toast\"]';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Toast extends BaseComponent {\n    constructor(element, config) {\n      super(element);\n      this._config = this._getConfig(config);\n      this._timeout = null;\n      this._hasMouseInteraction = false;\n      this._hasKeyboardInteraction = false;\n\n      this._setListeners();\n    } // Getters\n\n\n    static get DefaultType() {\n      return DefaultType;\n    }\n\n    static get Default() {\n      return Default;\n    }\n\n    static get NAME() {\n      return NAME;\n    } // Public\n\n\n    show() {\n      const showEvent = EventHandler.trigger(this._element, EVENT_SHOW);\n\n      if (showEvent.defaultPrevented) {\n        return;\n      }\n\n      this._clearTimeout();\n\n      if (this._config.animation) {\n        this._element.classList.add(CLASS_NAME_FADE);\n      }\n\n      const complete = () => {\n        this._element.classList.remove(CLASS_NAME_SHOWING);\n\n        this._element.classList.add(CLASS_NAME_SHOW);\n\n        EventHandler.trigger(this._element, EVENT_SHOWN);\n\n        this._maybeScheduleHide();\n      };\n\n      this._element.classList.remove(CLASS_NAME_HIDE);\n\n      reflow(this._element);\n\n      this._element.classList.add(CLASS_NAME_SHOWING);\n\n      this._queueCallback(complete, this._element, this._config.animation);\n    }\n\n    hide() {\n      if (!this._element.classList.contains(CLASS_NAME_SHOW)) {\n        return;\n      }\n\n      const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE);\n\n      if (hideEvent.defaultPrevented) {\n        return;\n      }\n\n      const complete = () => {\n        this._element.classList.add(CLASS_NAME_HIDE);\n\n        EventHandler.trigger(this._element, EVENT_HIDDEN);\n      };\n\n      this._element.classList.remove(CLASS_NAME_SHOW);\n\n      this._queueCallback(complete, this._element, this._config.animation);\n    }\n\n    dispose() {\n      this._clearTimeout();\n\n      if (this._element.classList.contains(CLASS_NAME_SHOW)) {\n        this._element.classList.remove(CLASS_NAME_SHOW);\n      }\n\n      super.dispose();\n    } // Private\n\n\n    _getConfig(config) {\n      config = { ...Default,\n        ...Manipulator.getDataAttributes(this._element),\n        ...(typeof config === 'object' && config ? config : {})\n      };\n      typeCheckConfig(NAME, config, this.constructor.DefaultType);\n      return config;\n    }\n\n    _maybeScheduleHide() {\n      if (!this._config.autohide) {\n        return;\n      }\n\n      if (this._hasMouseInteraction || this._hasKeyboardInteraction) {\n        return;\n      }\n\n      this._timeout = setTimeout(() => {\n        this.hide();\n      }, this._config.delay);\n    }\n\n    _onInteraction(event, isInteracting) {\n      switch (event.type) {\n        case 'mouseover':\n        case 'mouseout':\n          this._hasMouseInteraction = isInteracting;\n          break;\n\n        case 'focusin':\n        case 'focusout':\n          this._hasKeyboardInteraction = isInteracting;\n          break;\n      }\n\n      if (isInteracting) {\n        this._clearTimeout();\n\n        return;\n      }\n\n      const nextElement = event.relatedTarget;\n\n      if (this._element === nextElement || this._element.contains(nextElement)) {\n        return;\n      }\n\n      this._maybeScheduleHide();\n    }\n\n    _setListeners() {\n      EventHandler.on(this._element, EVENT_CLICK_DISMISS, SELECTOR_DATA_DISMISS, () => this.hide());\n      EventHandler.on(this._element, EVENT_MOUSEOVER, event => this._onInteraction(event, true));\n      EventHandler.on(this._element, EVENT_MOUSEOUT, event => this._onInteraction(event, false));\n      EventHandler.on(this._element, EVENT_FOCUSIN, event => this._onInteraction(event, true));\n      EventHandler.on(this._element, EVENT_FOCUSOUT, event => this._onInteraction(event, false));\n    }\n\n    _clearTimeout() {\n      clearTimeout(this._timeout);\n      this._timeout = null;\n    } // Static\n\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = Toast.getOrCreateInstance(this, config);\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(`No method named \"${config}\"`);\n          }\n\n          data[config](this);\n        }\n      });\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Toast to jQuery only if jQuery is present\n   */\n\n\n  defineJQueryPlugin(Toast);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): index.umd.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  var index_umd = {\n    Alert,\n    Button,\n    Carousel,\n    Collapse,\n    Dropdown,\n    Modal,\n    Offcanvas,\n    Popover,\n    ScrollSpy,\n    Tab,\n    Toast,\n    Tooltip\n  };\n\n  return index_umd;\n\n})));\n//# sourceMappingURL=bootstrap.bundle.js.map\n"
  },
  {
    "path": "src/sourceDev.WebApp/SharedThemes/cerulean/wwwroot/js/bootstrap.esm.js",
    "content": "/*!\n  * Bootstrap v5.0.2 (https://getbootstrap.com/)\n  * Copyright 2011-2021 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)\n  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n  */\nimport * as Popper from '@popperjs/core';\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): dom/selector-engine.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\nconst NODE_TEXT = 3;\nconst SelectorEngine = {\n  find(selector, element = document.documentElement) {\n    return [].concat(...Element.prototype.querySelectorAll.call(element, selector));\n  },\n\n  findOne(selector, element = document.documentElement) {\n    return Element.prototype.querySelector.call(element, selector);\n  },\n\n  children(element, selector) {\n    return [].concat(...element.children).filter(child => child.matches(selector));\n  },\n\n  parents(element, selector) {\n    const parents = [];\n    let ancestor = element.parentNode;\n\n    while (ancestor && ancestor.nodeType === Node.ELEMENT_NODE && ancestor.nodeType !== NODE_TEXT) {\n      if (ancestor.matches(selector)) {\n        parents.push(ancestor);\n      }\n\n      ancestor = ancestor.parentNode;\n    }\n\n    return parents;\n  },\n\n  prev(element, selector) {\n    let previous = element.previousElementSibling;\n\n    while (previous) {\n      if (previous.matches(selector)) {\n        return [previous];\n      }\n\n      previous = previous.previousElementSibling;\n    }\n\n    return [];\n  },\n\n  next(element, selector) {\n    let next = element.nextElementSibling;\n\n    while (next) {\n      if (next.matches(selector)) {\n        return [next];\n      }\n\n      next = next.nextElementSibling;\n    }\n\n    return [];\n  }\n\n};\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): util/index.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst MAX_UID = 1000000;\nconst MILLISECONDS_MULTIPLIER = 1000;\nconst TRANSITION_END = 'transitionend'; // Shoutout AngusCroll (https://goo.gl/pxwQGp)\n\nconst toType = obj => {\n  if (obj === null || obj === undefined) {\n    return `${obj}`;\n  }\n\n  return {}.toString.call(obj).match(/\\s([a-z]+)/i)[1].toLowerCase();\n};\n/**\n * --------------------------------------------------------------------------\n * Public Util Api\n * --------------------------------------------------------------------------\n */\n\n\nconst getUID = prefix => {\n  do {\n    prefix += Math.floor(Math.random() * MAX_UID);\n  } while (document.getElementById(prefix));\n\n  return prefix;\n};\n\nconst getSelector = element => {\n  let selector = element.getAttribute('data-bs-target');\n\n  if (!selector || selector === '#') {\n    let hrefAttr = element.getAttribute('href'); // The only valid content that could double as a selector are IDs or classes,\n    // so everything starting with `#` or `.`. If a \"real\" URL is used as the selector,\n    // `document.querySelector` will rightfully complain it is invalid.\n    // See https://github.com/twbs/bootstrap/issues/32273\n\n    if (!hrefAttr || !hrefAttr.includes('#') && !hrefAttr.startsWith('.')) {\n      return null;\n    } // Just in case some CMS puts out a full URL with the anchor appended\n\n\n    if (hrefAttr.includes('#') && !hrefAttr.startsWith('#')) {\n      hrefAttr = `#${hrefAttr.split('#')[1]}`;\n    }\n\n    selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : null;\n  }\n\n  return selector;\n};\n\nconst getSelectorFromElement = element => {\n  const selector = getSelector(element);\n\n  if (selector) {\n    return document.querySelector(selector) ? selector : null;\n  }\n\n  return null;\n};\n\nconst getElementFromSelector = element => {\n  const selector = getSelector(element);\n  return selector ? document.querySelector(selector) : null;\n};\n\nconst getTransitionDurationFromElement = element => {\n  if (!element) {\n    return 0;\n  } // Get transition-duration of the element\n\n\n  let {\n    transitionDuration,\n    transitionDelay\n  } = window.getComputedStyle(element);\n  const floatTransitionDuration = Number.parseFloat(transitionDuration);\n  const floatTransitionDelay = Number.parseFloat(transitionDelay); // Return 0 if element or transition duration is not found\n\n  if (!floatTransitionDuration && !floatTransitionDelay) {\n    return 0;\n  } // If multiple durations are defined, take the first\n\n\n  transitionDuration = transitionDuration.split(',')[0];\n  transitionDelay = transitionDelay.split(',')[0];\n  return (Number.parseFloat(transitionDuration) + Number.parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER;\n};\n\nconst triggerTransitionEnd = element => {\n  element.dispatchEvent(new Event(TRANSITION_END));\n};\n\nconst isElement = obj => {\n  if (!obj || typeof obj !== 'object') {\n    return false;\n  }\n\n  if (typeof obj.jquery !== 'undefined') {\n    obj = obj[0];\n  }\n\n  return typeof obj.nodeType !== 'undefined';\n};\n\nconst getElement = obj => {\n  if (isElement(obj)) {\n    // it's a jQuery object or a node element\n    return obj.jquery ? obj[0] : obj;\n  }\n\n  if (typeof obj === 'string' && obj.length > 0) {\n    return SelectorEngine.findOne(obj);\n  }\n\n  return null;\n};\n\nconst typeCheckConfig = (componentName, config, configTypes) => {\n  Object.keys(configTypes).forEach(property => {\n    const expectedTypes = configTypes[property];\n    const value = config[property];\n    const valueType = value && isElement(value) ? 'element' : toType(value);\n\n    if (!new RegExp(expectedTypes).test(valueType)) {\n      throw new TypeError(`${componentName.toUpperCase()}: Option \"${property}\" provided type \"${valueType}\" but expected type \"${expectedTypes}\".`);\n    }\n  });\n};\n\nconst isVisible = element => {\n  if (!isElement(element) || element.getClientRects().length === 0) {\n    return false;\n  }\n\n  return getComputedStyle(element).getPropertyValue('visibility') === 'visible';\n};\n\nconst isDisabled = element => {\n  if (!element || element.nodeType !== Node.ELEMENT_NODE) {\n    return true;\n  }\n\n  if (element.classList.contains('disabled')) {\n    return true;\n  }\n\n  if (typeof element.disabled !== 'undefined') {\n    return element.disabled;\n  }\n\n  return element.hasAttribute('disabled') && element.getAttribute('disabled') !== 'false';\n};\n\nconst findShadowRoot = element => {\n  if (!document.documentElement.attachShadow) {\n    return null;\n  } // Can find the shadow root otherwise it'll return the document\n\n\n  if (typeof element.getRootNode === 'function') {\n    const root = element.getRootNode();\n    return root instanceof ShadowRoot ? root : null;\n  }\n\n  if (element instanceof ShadowRoot) {\n    return element;\n  } // when we don't find a shadow root\n\n\n  if (!element.parentNode) {\n    return null;\n  }\n\n  return findShadowRoot(element.parentNode);\n};\n\nconst noop = () => {};\n\nconst reflow = element => element.offsetHeight;\n\nconst getjQuery = () => {\n  const {\n    jQuery\n  } = window;\n\n  if (jQuery && !document.body.hasAttribute('data-bs-no-jquery')) {\n    return jQuery;\n  }\n\n  return null;\n};\n\nconst DOMContentLoadedCallbacks = [];\n\nconst onDOMContentLoaded = callback => {\n  if (document.readyState === 'loading') {\n    // add listener on the first call when the document is in loading state\n    if (!DOMContentLoadedCallbacks.length) {\n      document.addEventListener('DOMContentLoaded', () => {\n        DOMContentLoadedCallbacks.forEach(callback => callback());\n      });\n    }\n\n    DOMContentLoadedCallbacks.push(callback);\n  } else {\n    callback();\n  }\n};\n\nconst isRTL = () => document.documentElement.dir === 'rtl';\n\nconst defineJQueryPlugin = plugin => {\n  onDOMContentLoaded(() => {\n    const $ = getjQuery();\n    /* istanbul ignore if */\n\n    if ($) {\n      const name = plugin.NAME;\n      const JQUERY_NO_CONFLICT = $.fn[name];\n      $.fn[name] = plugin.jQueryInterface;\n      $.fn[name].Constructor = plugin;\n\n      $.fn[name].noConflict = () => {\n        $.fn[name] = JQUERY_NO_CONFLICT;\n        return plugin.jQueryInterface;\n      };\n    }\n  });\n};\n\nconst execute = callback => {\n  if (typeof callback === 'function') {\n    callback();\n  }\n};\n\nconst executeAfterTransition = (callback, transitionElement, waitForTransition = true) => {\n  if (!waitForTransition) {\n    execute(callback);\n    return;\n  }\n\n  const durationPadding = 5;\n  const emulatedDuration = getTransitionDurationFromElement(transitionElement) + durationPadding;\n  let called = false;\n\n  const handler = ({\n    target\n  }) => {\n    if (target !== transitionElement) {\n      return;\n    }\n\n    called = true;\n    transitionElement.removeEventListener(TRANSITION_END, handler);\n    execute(callback);\n  };\n\n  transitionElement.addEventListener(TRANSITION_END, handler);\n  setTimeout(() => {\n    if (!called) {\n      triggerTransitionEnd(transitionElement);\n    }\n  }, emulatedDuration);\n};\n/**\n * Return the previous/next element of a list.\n *\n * @param {array} list    The list of elements\n * @param activeElement   The active element\n * @param shouldGetNext   Choose to get next or previous element\n * @param isCycleAllowed\n * @return {Element|elem} The proper element\n */\n\n\nconst getNextActiveElement = (list, activeElement, shouldGetNext, isCycleAllowed) => {\n  let index = list.indexOf(activeElement); // if the element does not exist in the list return an element depending on the direction and if cycle is allowed\n\n  if (index === -1) {\n    return list[!shouldGetNext && isCycleAllowed ? list.length - 1 : 0];\n  }\n\n  const listLength = list.length;\n  index += shouldGetNext ? 1 : -1;\n\n  if (isCycleAllowed) {\n    index = (index + listLength) % listLength;\n  }\n\n  return list[Math.max(0, Math.min(index, listLength - 1))];\n};\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): dom/event-handler.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst namespaceRegex = /[^.]*(?=\\..*)\\.|.*/;\nconst stripNameRegex = /\\..*/;\nconst stripUidRegex = /::\\d+$/;\nconst eventRegistry = {}; // Events storage\n\nlet uidEvent = 1;\nconst customEvents = {\n  mouseenter: 'mouseover',\n  mouseleave: 'mouseout'\n};\nconst customEventsRegex = /^(mouseenter|mouseleave)/i;\nconst nativeEvents = new Set(['click', 'dblclick', 'mouseup', 'mousedown', 'contextmenu', 'mousewheel', 'DOMMouseScroll', 'mouseover', 'mouseout', 'mousemove', 'selectstart', 'selectend', 'keydown', 'keypress', 'keyup', 'orientationchange', 'touchstart', 'touchmove', 'touchend', 'touchcancel', 'pointerdown', 'pointermove', 'pointerup', 'pointerleave', 'pointercancel', 'gesturestart', 'gesturechange', 'gestureend', 'focus', 'blur', 'change', 'reset', 'select', 'submit', 'focusin', 'focusout', 'load', 'unload', 'beforeunload', 'resize', 'move', 'DOMContentLoaded', 'readystatechange', 'error', 'abort', 'scroll']);\n/**\n * ------------------------------------------------------------------------\n * Private methods\n * ------------------------------------------------------------------------\n */\n\nfunction getUidEvent(element, uid) {\n  return uid && `${uid}::${uidEvent++}` || element.uidEvent || uidEvent++;\n}\n\nfunction getEvent(element) {\n  const uid = getUidEvent(element);\n  element.uidEvent = uid;\n  eventRegistry[uid] = eventRegistry[uid] || {};\n  return eventRegistry[uid];\n}\n\nfunction bootstrapHandler(element, fn) {\n  return function handler(event) {\n    event.delegateTarget = element;\n\n    if (handler.oneOff) {\n      EventHandler.off(element, event.type, fn);\n    }\n\n    return fn.apply(element, [event]);\n  };\n}\n\nfunction bootstrapDelegationHandler(element, selector, fn) {\n  return function handler(event) {\n    const domElements = element.querySelectorAll(selector);\n\n    for (let {\n      target\n    } = event; target && target !== this; target = target.parentNode) {\n      for (let i = domElements.length; i--;) {\n        if (domElements[i] === target) {\n          event.delegateTarget = target;\n\n          if (handler.oneOff) {\n            // eslint-disable-next-line unicorn/consistent-destructuring\n            EventHandler.off(element, event.type, selector, fn);\n          }\n\n          return fn.apply(target, [event]);\n        }\n      }\n    } // To please ESLint\n\n\n    return null;\n  };\n}\n\nfunction findHandler(events, handler, delegationSelector = null) {\n  const uidEventList = Object.keys(events);\n\n  for (let i = 0, len = uidEventList.length; i < len; i++) {\n    const event = events[uidEventList[i]];\n\n    if (event.originalHandler === handler && event.delegationSelector === delegationSelector) {\n      return event;\n    }\n  }\n\n  return null;\n}\n\nfunction normalizeParams(originalTypeEvent, handler, delegationFn) {\n  const delegation = typeof handler === 'string';\n  const originalHandler = delegation ? delegationFn : handler;\n  let typeEvent = getTypeEvent(originalTypeEvent);\n  const isNative = nativeEvents.has(typeEvent);\n\n  if (!isNative) {\n    typeEvent = originalTypeEvent;\n  }\n\n  return [delegation, originalHandler, typeEvent];\n}\n\nfunction addHandler(element, originalTypeEvent, handler, delegationFn, oneOff) {\n  if (typeof originalTypeEvent !== 'string' || !element) {\n    return;\n  }\n\n  if (!handler) {\n    handler = delegationFn;\n    delegationFn = null;\n  } // in case of mouseenter or mouseleave wrap the handler within a function that checks for its DOM position\n  // this prevents the handler from being dispatched the same way as mouseover or mouseout does\n\n\n  if (customEventsRegex.test(originalTypeEvent)) {\n    const wrapFn = fn => {\n      return function (event) {\n        if (!event.relatedTarget || event.relatedTarget !== event.delegateTarget && !event.delegateTarget.contains(event.relatedTarget)) {\n          return fn.call(this, event);\n        }\n      };\n    };\n\n    if (delegationFn) {\n      delegationFn = wrapFn(delegationFn);\n    } else {\n      handler = wrapFn(handler);\n    }\n  }\n\n  const [delegation, originalHandler, typeEvent] = normalizeParams(originalTypeEvent, handler, delegationFn);\n  const events = getEvent(element);\n  const handlers = events[typeEvent] || (events[typeEvent] = {});\n  const previousFn = findHandler(handlers, originalHandler, delegation ? handler : null);\n\n  if (previousFn) {\n    previousFn.oneOff = previousFn.oneOff && oneOff;\n    return;\n  }\n\n  const uid = getUidEvent(originalHandler, originalTypeEvent.replace(namespaceRegex, ''));\n  const fn = delegation ? bootstrapDelegationHandler(element, handler, delegationFn) : bootstrapHandler(element, handler);\n  fn.delegationSelector = delegation ? handler : null;\n  fn.originalHandler = originalHandler;\n  fn.oneOff = oneOff;\n  fn.uidEvent = uid;\n  handlers[uid] = fn;\n  element.addEventListener(typeEvent, fn, delegation);\n}\n\nfunction removeHandler(element, events, typeEvent, handler, delegationSelector) {\n  const fn = findHandler(events[typeEvent], handler, delegationSelector);\n\n  if (!fn) {\n    return;\n  }\n\n  element.removeEventListener(typeEvent, fn, Boolean(delegationSelector));\n  delete events[typeEvent][fn.uidEvent];\n}\n\nfunction removeNamespacedHandlers(element, events, typeEvent, namespace) {\n  const storeElementEvent = events[typeEvent] || {};\n  Object.keys(storeElementEvent).forEach(handlerKey => {\n    if (handlerKey.includes(namespace)) {\n      const event = storeElementEvent[handlerKey];\n      removeHandler(element, events, typeEvent, event.originalHandler, event.delegationSelector);\n    }\n  });\n}\n\nfunction getTypeEvent(event) {\n  // allow to get the native events from namespaced events ('click.bs.button' --> 'click')\n  event = event.replace(stripNameRegex, '');\n  return customEvents[event] || event;\n}\n\nconst EventHandler = {\n  on(element, event, handler, delegationFn) {\n    addHandler(element, event, handler, delegationFn, false);\n  },\n\n  one(element, event, handler, delegationFn) {\n    addHandler(element, event, handler, delegationFn, true);\n  },\n\n  off(element, originalTypeEvent, handler, delegationFn) {\n    if (typeof originalTypeEvent !== 'string' || !element) {\n      return;\n    }\n\n    const [delegation, originalHandler, typeEvent] = normalizeParams(originalTypeEvent, handler, delegationFn);\n    const inNamespace = typeEvent !== originalTypeEvent;\n    const events = getEvent(element);\n    const isNamespace = originalTypeEvent.startsWith('.');\n\n    if (typeof originalHandler !== 'undefined') {\n      // Simplest case: handler is passed, remove that listener ONLY.\n      if (!events || !events[typeEvent]) {\n        return;\n      }\n\n      removeHandler(element, events, typeEvent, originalHandler, delegation ? handler : null);\n      return;\n    }\n\n    if (isNamespace) {\n      Object.keys(events).forEach(elementEvent => {\n        removeNamespacedHandlers(element, events, elementEvent, originalTypeEvent.slice(1));\n      });\n    }\n\n    const storeElementEvent = events[typeEvent] || {};\n    Object.keys(storeElementEvent).forEach(keyHandlers => {\n      const handlerKey = keyHandlers.replace(stripUidRegex, '');\n\n      if (!inNamespace || originalTypeEvent.includes(handlerKey)) {\n        const event = storeElementEvent[keyHandlers];\n        removeHandler(element, events, typeEvent, event.originalHandler, event.delegationSelector);\n      }\n    });\n  },\n\n  trigger(element, event, args) {\n    if (typeof event !== 'string' || !element) {\n      return null;\n    }\n\n    const $ = getjQuery();\n    const typeEvent = getTypeEvent(event);\n    const inNamespace = event !== typeEvent;\n    const isNative = nativeEvents.has(typeEvent);\n    let jQueryEvent;\n    let bubbles = true;\n    let nativeDispatch = true;\n    let defaultPrevented = false;\n    let evt = null;\n\n    if (inNamespace && $) {\n      jQueryEvent = $.Event(event, args);\n      $(element).trigger(jQueryEvent);\n      bubbles = !jQueryEvent.isPropagationStopped();\n      nativeDispatch = !jQueryEvent.isImmediatePropagationStopped();\n      defaultPrevented = jQueryEvent.isDefaultPrevented();\n    }\n\n    if (isNative) {\n      evt = document.createEvent('HTMLEvents');\n      evt.initEvent(typeEvent, bubbles, true);\n    } else {\n      evt = new CustomEvent(event, {\n        bubbles,\n        cancelable: true\n      });\n    } // merge custom information in our event\n\n\n    if (typeof args !== 'undefined') {\n      Object.keys(args).forEach(key => {\n        Object.defineProperty(evt, key, {\n          get() {\n            return args[key];\n          }\n\n        });\n      });\n    }\n\n    if (defaultPrevented) {\n      evt.preventDefault();\n    }\n\n    if (nativeDispatch) {\n      element.dispatchEvent(evt);\n    }\n\n    if (evt.defaultPrevented && typeof jQueryEvent !== 'undefined') {\n      jQueryEvent.preventDefault();\n    }\n\n    return evt;\n  }\n\n};\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): dom/data.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\nconst elementMap = new Map();\nvar Data = {\n  set(element, key, instance) {\n    if (!elementMap.has(element)) {\n      elementMap.set(element, new Map());\n    }\n\n    const instanceMap = elementMap.get(element); // make it clear we only want one instance per element\n    // can be removed later when multiple key/instances are fine to be used\n\n    if (!instanceMap.has(key) && instanceMap.size !== 0) {\n      // eslint-disable-next-line no-console\n      console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(instanceMap.keys())[0]}.`);\n      return;\n    }\n\n    instanceMap.set(key, instance);\n  },\n\n  get(element, key) {\n    if (elementMap.has(element)) {\n      return elementMap.get(element).get(key) || null;\n    }\n\n    return null;\n  },\n\n  remove(element, key) {\n    if (!elementMap.has(element)) {\n      return;\n    }\n\n    const instanceMap = elementMap.get(element);\n    instanceMap.delete(key); // free up element references if there are no instances left for an element\n\n    if (instanceMap.size === 0) {\n      elementMap.delete(element);\n    }\n  }\n\n};\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): base-component.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst VERSION = '5.0.2';\n\nclass BaseComponent {\n  constructor(element) {\n    element = getElement(element);\n\n    if (!element) {\n      return;\n    }\n\n    this._element = element;\n    Data.set(this._element, this.constructor.DATA_KEY, this);\n  }\n\n  dispose() {\n    Data.remove(this._element, this.constructor.DATA_KEY);\n    EventHandler.off(this._element, this.constructor.EVENT_KEY);\n    Object.getOwnPropertyNames(this).forEach(propertyName => {\n      this[propertyName] = null;\n    });\n  }\n\n  _queueCallback(callback, element, isAnimated = true) {\n    executeAfterTransition(callback, element, isAnimated);\n  }\n  /** Static */\n\n\n  static getInstance(element) {\n    return Data.get(element, this.DATA_KEY);\n  }\n\n  static getOrCreateInstance(element, config = {}) {\n    return this.getInstance(element) || new this(element, typeof config === 'object' ? config : null);\n  }\n\n  static get VERSION() {\n    return VERSION;\n  }\n\n  static get NAME() {\n    throw new Error('You have to implement the static method \"NAME\", for each component!');\n  }\n\n  static get DATA_KEY() {\n    return `bs.${this.NAME}`;\n  }\n\n  static get EVENT_KEY() {\n    return `.${this.DATA_KEY}`;\n  }\n\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): alert.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$c = 'alert';\nconst DATA_KEY$b = 'bs.alert';\nconst EVENT_KEY$b = `.${DATA_KEY$b}`;\nconst DATA_API_KEY$8 = '.data-api';\nconst SELECTOR_DISMISS = '[data-bs-dismiss=\"alert\"]';\nconst EVENT_CLOSE = `close${EVENT_KEY$b}`;\nconst EVENT_CLOSED = `closed${EVENT_KEY$b}`;\nconst EVENT_CLICK_DATA_API$7 = `click${EVENT_KEY$b}${DATA_API_KEY$8}`;\nconst CLASS_NAME_ALERT = 'alert';\nconst CLASS_NAME_FADE$6 = 'fade';\nconst CLASS_NAME_SHOW$9 = 'show';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Alert extends BaseComponent {\n  // Getters\n  static get NAME() {\n    return NAME$c;\n  } // Public\n\n\n  close(element) {\n    const rootElement = element ? this._getRootElement(element) : this._element;\n\n    const customEvent = this._triggerCloseEvent(rootElement);\n\n    if (customEvent === null || customEvent.defaultPrevented) {\n      return;\n    }\n\n    this._removeElement(rootElement);\n  } // Private\n\n\n  _getRootElement(element) {\n    return getElementFromSelector(element) || element.closest(`.${CLASS_NAME_ALERT}`);\n  }\n\n  _triggerCloseEvent(element) {\n    return EventHandler.trigger(element, EVENT_CLOSE);\n  }\n\n  _removeElement(element) {\n    element.classList.remove(CLASS_NAME_SHOW$9);\n    const isAnimated = element.classList.contains(CLASS_NAME_FADE$6);\n\n    this._queueCallback(() => this._destroyElement(element), element, isAnimated);\n  }\n\n  _destroyElement(element) {\n    element.remove();\n    EventHandler.trigger(element, EVENT_CLOSED);\n  } // Static\n\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Alert.getOrCreateInstance(this);\n\n      if (config === 'close') {\n        data[config](this);\n      }\n    });\n  }\n\n  static handleDismiss(alertInstance) {\n    return function (event) {\n      if (event) {\n        event.preventDefault();\n      }\n\n      alertInstance.close(this);\n    };\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$7, SELECTOR_DISMISS, Alert.handleDismiss(new Alert()));\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Alert to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Alert);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): button.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$b = 'button';\nconst DATA_KEY$a = 'bs.button';\nconst EVENT_KEY$a = `.${DATA_KEY$a}`;\nconst DATA_API_KEY$7 = '.data-api';\nconst CLASS_NAME_ACTIVE$3 = 'active';\nconst SELECTOR_DATA_TOGGLE$5 = '[data-bs-toggle=\"button\"]';\nconst EVENT_CLICK_DATA_API$6 = `click${EVENT_KEY$a}${DATA_API_KEY$7}`;\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Button extends BaseComponent {\n  // Getters\n  static get NAME() {\n    return NAME$b;\n  } // Public\n\n\n  toggle() {\n    // Toggle class and sync the `aria-pressed` attribute with the return value of the `.toggle()` method\n    this._element.setAttribute('aria-pressed', this._element.classList.toggle(CLASS_NAME_ACTIVE$3));\n  } // Static\n\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Button.getOrCreateInstance(this);\n\n      if (config === 'toggle') {\n        data[config]();\n      }\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$6, SELECTOR_DATA_TOGGLE$5, event => {\n  event.preventDefault();\n  const button = event.target.closest(SELECTOR_DATA_TOGGLE$5);\n  const data = Button.getOrCreateInstance(button);\n  data.toggle();\n});\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Button to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Button);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): dom/manipulator.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\nfunction normalizeData(val) {\n  if (val === 'true') {\n    return true;\n  }\n\n  if (val === 'false') {\n    return false;\n  }\n\n  if (val === Number(val).toString()) {\n    return Number(val);\n  }\n\n  if (val === '' || val === 'null') {\n    return null;\n  }\n\n  return val;\n}\n\nfunction normalizeDataKey(key) {\n  return key.replace(/[A-Z]/g, chr => `-${chr.toLowerCase()}`);\n}\n\nconst Manipulator = {\n  setDataAttribute(element, key, value) {\n    element.setAttribute(`data-bs-${normalizeDataKey(key)}`, value);\n  },\n\n  removeDataAttribute(element, key) {\n    element.removeAttribute(`data-bs-${normalizeDataKey(key)}`);\n  },\n\n  getDataAttributes(element) {\n    if (!element) {\n      return {};\n    }\n\n    const attributes = {};\n    Object.keys(element.dataset).filter(key => key.startsWith('bs')).forEach(key => {\n      let pureKey = key.replace(/^bs/, '');\n      pureKey = pureKey.charAt(0).toLowerCase() + pureKey.slice(1, pureKey.length);\n      attributes[pureKey] = normalizeData(element.dataset[key]);\n    });\n    return attributes;\n  },\n\n  getDataAttribute(element, key) {\n    return normalizeData(element.getAttribute(`data-bs-${normalizeDataKey(key)}`));\n  },\n\n  offset(element) {\n    const rect = element.getBoundingClientRect();\n    return {\n      top: rect.top + document.body.scrollTop,\n      left: rect.left + document.body.scrollLeft\n    };\n  },\n\n  position(element) {\n    return {\n      top: element.offsetTop,\n      left: element.offsetLeft\n    };\n  }\n\n};\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): carousel.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$a = 'carousel';\nconst DATA_KEY$9 = 'bs.carousel';\nconst EVENT_KEY$9 = `.${DATA_KEY$9}`;\nconst DATA_API_KEY$6 = '.data-api';\nconst ARROW_LEFT_KEY = 'ArrowLeft';\nconst ARROW_RIGHT_KEY = 'ArrowRight';\nconst TOUCHEVENT_COMPAT_WAIT = 500; // Time for mouse compat events to fire after touch\n\nconst SWIPE_THRESHOLD = 40;\nconst Default$9 = {\n  interval: 5000,\n  keyboard: true,\n  slide: false,\n  pause: 'hover',\n  wrap: true,\n  touch: true\n};\nconst DefaultType$9 = {\n  interval: '(number|boolean)',\n  keyboard: 'boolean',\n  slide: '(boolean|string)',\n  pause: '(string|boolean)',\n  wrap: 'boolean',\n  touch: 'boolean'\n};\nconst ORDER_NEXT = 'next';\nconst ORDER_PREV = 'prev';\nconst DIRECTION_LEFT = 'left';\nconst DIRECTION_RIGHT = 'right';\nconst KEY_TO_DIRECTION = {\n  [ARROW_LEFT_KEY]: DIRECTION_RIGHT,\n  [ARROW_RIGHT_KEY]: DIRECTION_LEFT\n};\nconst EVENT_SLIDE = `slide${EVENT_KEY$9}`;\nconst EVENT_SLID = `slid${EVENT_KEY$9}`;\nconst EVENT_KEYDOWN = `keydown${EVENT_KEY$9}`;\nconst EVENT_MOUSEENTER = `mouseenter${EVENT_KEY$9}`;\nconst EVENT_MOUSELEAVE = `mouseleave${EVENT_KEY$9}`;\nconst EVENT_TOUCHSTART = `touchstart${EVENT_KEY$9}`;\nconst EVENT_TOUCHMOVE = `touchmove${EVENT_KEY$9}`;\nconst EVENT_TOUCHEND = `touchend${EVENT_KEY$9}`;\nconst EVENT_POINTERDOWN = `pointerdown${EVENT_KEY$9}`;\nconst EVENT_POINTERUP = `pointerup${EVENT_KEY$9}`;\nconst EVENT_DRAG_START = `dragstart${EVENT_KEY$9}`;\nconst EVENT_LOAD_DATA_API$2 = `load${EVENT_KEY$9}${DATA_API_KEY$6}`;\nconst EVENT_CLICK_DATA_API$5 = `click${EVENT_KEY$9}${DATA_API_KEY$6}`;\nconst CLASS_NAME_CAROUSEL = 'carousel';\nconst CLASS_NAME_ACTIVE$2 = 'active';\nconst CLASS_NAME_SLIDE = 'slide';\nconst CLASS_NAME_END = 'carousel-item-end';\nconst CLASS_NAME_START = 'carousel-item-start';\nconst CLASS_NAME_NEXT = 'carousel-item-next';\nconst CLASS_NAME_PREV = 'carousel-item-prev';\nconst CLASS_NAME_POINTER_EVENT = 'pointer-event';\nconst SELECTOR_ACTIVE$1 = '.active';\nconst SELECTOR_ACTIVE_ITEM = '.active.carousel-item';\nconst SELECTOR_ITEM = '.carousel-item';\nconst SELECTOR_ITEM_IMG = '.carousel-item img';\nconst SELECTOR_NEXT_PREV = '.carousel-item-next, .carousel-item-prev';\nconst SELECTOR_INDICATORS = '.carousel-indicators';\nconst SELECTOR_INDICATOR = '[data-bs-target]';\nconst SELECTOR_DATA_SLIDE = '[data-bs-slide], [data-bs-slide-to]';\nconst SELECTOR_DATA_RIDE = '[data-bs-ride=\"carousel\"]';\nconst POINTER_TYPE_TOUCH = 'touch';\nconst POINTER_TYPE_PEN = 'pen';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Carousel extends BaseComponent {\n  constructor(element, config) {\n    super(element);\n    this._items = null;\n    this._interval = null;\n    this._activeElement = null;\n    this._isPaused = false;\n    this._isSliding = false;\n    this.touchTimeout = null;\n    this.touchStartX = 0;\n    this.touchDeltaX = 0;\n    this._config = this._getConfig(config);\n    this._indicatorsElement = SelectorEngine.findOne(SELECTOR_INDICATORS, this._element);\n    this._touchSupported = 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0;\n    this._pointerEvent = Boolean(window.PointerEvent);\n\n    this._addEventListeners();\n  } // Getters\n\n\n  static get Default() {\n    return Default$9;\n  }\n\n  static get NAME() {\n    return NAME$a;\n  } // Public\n\n\n  next() {\n    this._slide(ORDER_NEXT);\n  }\n\n  nextWhenVisible() {\n    // Don't call next when the page isn't visible\n    // or the carousel or its parent isn't visible\n    if (!document.hidden && isVisible(this._element)) {\n      this.next();\n    }\n  }\n\n  prev() {\n    this._slide(ORDER_PREV);\n  }\n\n  pause(event) {\n    if (!event) {\n      this._isPaused = true;\n    }\n\n    if (SelectorEngine.findOne(SELECTOR_NEXT_PREV, this._element)) {\n      triggerTransitionEnd(this._element);\n      this.cycle(true);\n    }\n\n    clearInterval(this._interval);\n    this._interval = null;\n  }\n\n  cycle(event) {\n    if (!event) {\n      this._isPaused = false;\n    }\n\n    if (this._interval) {\n      clearInterval(this._interval);\n      this._interval = null;\n    }\n\n    if (this._config && this._config.interval && !this._isPaused) {\n      this._updateInterval();\n\n      this._interval = setInterval((document.visibilityState ? this.nextWhenVisible : this.next).bind(this), this._config.interval);\n    }\n  }\n\n  to(index) {\n    this._activeElement = SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element);\n\n    const activeIndex = this._getItemIndex(this._activeElement);\n\n    if (index > this._items.length - 1 || index < 0) {\n      return;\n    }\n\n    if (this._isSliding) {\n      EventHandler.one(this._element, EVENT_SLID, () => this.to(index));\n      return;\n    }\n\n    if (activeIndex === index) {\n      this.pause();\n      this.cycle();\n      return;\n    }\n\n    const order = index > activeIndex ? ORDER_NEXT : ORDER_PREV;\n\n    this._slide(order, this._items[index]);\n  } // Private\n\n\n  _getConfig(config) {\n    config = { ...Default$9,\n      ...Manipulator.getDataAttributes(this._element),\n      ...(typeof config === 'object' ? config : {})\n    };\n    typeCheckConfig(NAME$a, config, DefaultType$9);\n    return config;\n  }\n\n  _handleSwipe() {\n    const absDeltax = Math.abs(this.touchDeltaX);\n\n    if (absDeltax <= SWIPE_THRESHOLD) {\n      return;\n    }\n\n    const direction = absDeltax / this.touchDeltaX;\n    this.touchDeltaX = 0;\n\n    if (!direction) {\n      return;\n    }\n\n    this._slide(direction > 0 ? DIRECTION_RIGHT : DIRECTION_LEFT);\n  }\n\n  _addEventListeners() {\n    if (this._config.keyboard) {\n      EventHandler.on(this._element, EVENT_KEYDOWN, event => this._keydown(event));\n    }\n\n    if (this._config.pause === 'hover') {\n      EventHandler.on(this._element, EVENT_MOUSEENTER, event => this.pause(event));\n      EventHandler.on(this._element, EVENT_MOUSELEAVE, event => this.cycle(event));\n    }\n\n    if (this._config.touch && this._touchSupported) {\n      this._addTouchEventListeners();\n    }\n  }\n\n  _addTouchEventListeners() {\n    const start = event => {\n      if (this._pointerEvent && (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH)) {\n        this.touchStartX = event.clientX;\n      } else if (!this._pointerEvent) {\n        this.touchStartX = event.touches[0].clientX;\n      }\n    };\n\n    const move = event => {\n      // ensure swiping with one touch and not pinching\n      this.touchDeltaX = event.touches && event.touches.length > 1 ? 0 : event.touches[0].clientX - this.touchStartX;\n    };\n\n    const end = event => {\n      if (this._pointerEvent && (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH)) {\n        this.touchDeltaX = event.clientX - this.touchStartX;\n      }\n\n      this._handleSwipe();\n\n      if (this._config.pause === 'hover') {\n        // If it's a touch-enabled device, mouseenter/leave are fired as\n        // part of the mouse compatibility events on first tap - the carousel\n        // would stop cycling until user tapped out of it;\n        // here, we listen for touchend, explicitly pause the carousel\n        // (as if it's the second time we tap on it, mouseenter compat event\n        // is NOT fired) and after a timeout (to allow for mouse compatibility\n        // events to fire) we explicitly restart cycling\n        this.pause();\n\n        if (this.touchTimeout) {\n          clearTimeout(this.touchTimeout);\n        }\n\n        this.touchTimeout = setTimeout(event => this.cycle(event), TOUCHEVENT_COMPAT_WAIT + this._config.interval);\n      }\n    };\n\n    SelectorEngine.find(SELECTOR_ITEM_IMG, this._element).forEach(itemImg => {\n      EventHandler.on(itemImg, EVENT_DRAG_START, e => e.preventDefault());\n    });\n\n    if (this._pointerEvent) {\n      EventHandler.on(this._element, EVENT_POINTERDOWN, event => start(event));\n      EventHandler.on(this._element, EVENT_POINTERUP, event => end(event));\n\n      this._element.classList.add(CLASS_NAME_POINTER_EVENT);\n    } else {\n      EventHandler.on(this._element, EVENT_TOUCHSTART, event => start(event));\n      EventHandler.on(this._element, EVENT_TOUCHMOVE, event => move(event));\n      EventHandler.on(this._element, EVENT_TOUCHEND, event => end(event));\n    }\n  }\n\n  _keydown(event) {\n    if (/input|textarea/i.test(event.target.tagName)) {\n      return;\n    }\n\n    const direction = KEY_TO_DIRECTION[event.key];\n\n    if (direction) {\n      event.preventDefault();\n\n      this._slide(direction);\n    }\n  }\n\n  _getItemIndex(element) {\n    this._items = element && element.parentNode ? SelectorEngine.find(SELECTOR_ITEM, element.parentNode) : [];\n    return this._items.indexOf(element);\n  }\n\n  _getItemByOrder(order, activeElement) {\n    const isNext = order === ORDER_NEXT;\n    return getNextActiveElement(this._items, activeElement, isNext, this._config.wrap);\n  }\n\n  _triggerSlideEvent(relatedTarget, eventDirectionName) {\n    const targetIndex = this._getItemIndex(relatedTarget);\n\n    const fromIndex = this._getItemIndex(SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element));\n\n    return EventHandler.trigger(this._element, EVENT_SLIDE, {\n      relatedTarget,\n      direction: eventDirectionName,\n      from: fromIndex,\n      to: targetIndex\n    });\n  }\n\n  _setActiveIndicatorElement(element) {\n    if (this._indicatorsElement) {\n      const activeIndicator = SelectorEngine.findOne(SELECTOR_ACTIVE$1, this._indicatorsElement);\n      activeIndicator.classList.remove(CLASS_NAME_ACTIVE$2);\n      activeIndicator.removeAttribute('aria-current');\n      const indicators = SelectorEngine.find(SELECTOR_INDICATOR, this._indicatorsElement);\n\n      for (let i = 0; i < indicators.length; i++) {\n        if (Number.parseInt(indicators[i].getAttribute('data-bs-slide-to'), 10) === this._getItemIndex(element)) {\n          indicators[i].classList.add(CLASS_NAME_ACTIVE$2);\n          indicators[i].setAttribute('aria-current', 'true');\n          break;\n        }\n      }\n    }\n  }\n\n  _updateInterval() {\n    const element = this._activeElement || SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element);\n\n    if (!element) {\n      return;\n    }\n\n    const elementInterval = Number.parseInt(element.getAttribute('data-bs-interval'), 10);\n\n    if (elementInterval) {\n      this._config.defaultInterval = this._config.defaultInterval || this._config.interval;\n      this._config.interval = elementInterval;\n    } else {\n      this._config.interval = this._config.defaultInterval || this._config.interval;\n    }\n  }\n\n  _slide(directionOrOrder, element) {\n    const order = this._directionToOrder(directionOrOrder);\n\n    const activeElement = SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element);\n\n    const activeElementIndex = this._getItemIndex(activeElement);\n\n    const nextElement = element || this._getItemByOrder(order, activeElement);\n\n    const nextElementIndex = this._getItemIndex(nextElement);\n\n    const isCycling = Boolean(this._interval);\n    const isNext = order === ORDER_NEXT;\n    const directionalClassName = isNext ? CLASS_NAME_START : CLASS_NAME_END;\n    const orderClassName = isNext ? CLASS_NAME_NEXT : CLASS_NAME_PREV;\n\n    const eventDirectionName = this._orderToDirection(order);\n\n    if (nextElement && nextElement.classList.contains(CLASS_NAME_ACTIVE$2)) {\n      this._isSliding = false;\n      return;\n    }\n\n    if (this._isSliding) {\n      return;\n    }\n\n    const slideEvent = this._triggerSlideEvent(nextElement, eventDirectionName);\n\n    if (slideEvent.defaultPrevented) {\n      return;\n    }\n\n    if (!activeElement || !nextElement) {\n      // Some weirdness is happening, so we bail\n      return;\n    }\n\n    this._isSliding = true;\n\n    if (isCycling) {\n      this.pause();\n    }\n\n    this._setActiveIndicatorElement(nextElement);\n\n    this._activeElement = nextElement;\n\n    const triggerSlidEvent = () => {\n      EventHandler.trigger(this._element, EVENT_SLID, {\n        relatedTarget: nextElement,\n        direction: eventDirectionName,\n        from: activeElementIndex,\n        to: nextElementIndex\n      });\n    };\n\n    if (this._element.classList.contains(CLASS_NAME_SLIDE)) {\n      nextElement.classList.add(orderClassName);\n      reflow(nextElement);\n      activeElement.classList.add(directionalClassName);\n      nextElement.classList.add(directionalClassName);\n\n      const completeCallBack = () => {\n        nextElement.classList.remove(directionalClassName, orderClassName);\n        nextElement.classList.add(CLASS_NAME_ACTIVE$2);\n        activeElement.classList.remove(CLASS_NAME_ACTIVE$2, orderClassName, directionalClassName);\n        this._isSliding = false;\n        setTimeout(triggerSlidEvent, 0);\n      };\n\n      this._queueCallback(completeCallBack, activeElement, true);\n    } else {\n      activeElement.classList.remove(CLASS_NAME_ACTIVE$2);\n      nextElement.classList.add(CLASS_NAME_ACTIVE$2);\n      this._isSliding = false;\n      triggerSlidEvent();\n    }\n\n    if (isCycling) {\n      this.cycle();\n    }\n  }\n\n  _directionToOrder(direction) {\n    if (![DIRECTION_RIGHT, DIRECTION_LEFT].includes(direction)) {\n      return direction;\n    }\n\n    if (isRTL()) {\n      return direction === DIRECTION_LEFT ? ORDER_PREV : ORDER_NEXT;\n    }\n\n    return direction === DIRECTION_LEFT ? ORDER_NEXT : ORDER_PREV;\n  }\n\n  _orderToDirection(order) {\n    if (![ORDER_NEXT, ORDER_PREV].includes(order)) {\n      return order;\n    }\n\n    if (isRTL()) {\n      return order === ORDER_PREV ? DIRECTION_LEFT : DIRECTION_RIGHT;\n    }\n\n    return order === ORDER_PREV ? DIRECTION_RIGHT : DIRECTION_LEFT;\n  } // Static\n\n\n  static carouselInterface(element, config) {\n    const data = Carousel.getOrCreateInstance(element, config);\n    let {\n      _config\n    } = data;\n\n    if (typeof config === 'object') {\n      _config = { ..._config,\n        ...config\n      };\n    }\n\n    const action = typeof config === 'string' ? config : _config.slide;\n\n    if (typeof config === 'number') {\n      data.to(config);\n    } else if (typeof action === 'string') {\n      if (typeof data[action] === 'undefined') {\n        throw new TypeError(`No method named \"${action}\"`);\n      }\n\n      data[action]();\n    } else if (_config.interval && _config.ride) {\n      data.pause();\n      data.cycle();\n    }\n  }\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      Carousel.carouselInterface(this, config);\n    });\n  }\n\n  static dataApiClickHandler(event) {\n    const target = getElementFromSelector(this);\n\n    if (!target || !target.classList.contains(CLASS_NAME_CAROUSEL)) {\n      return;\n    }\n\n    const config = { ...Manipulator.getDataAttributes(target),\n      ...Manipulator.getDataAttributes(this)\n    };\n    const slideIndex = this.getAttribute('data-bs-slide-to');\n\n    if (slideIndex) {\n      config.interval = false;\n    }\n\n    Carousel.carouselInterface(target, config);\n\n    if (slideIndex) {\n      Carousel.getInstance(target).to(slideIndex);\n    }\n\n    event.preventDefault();\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$5, SELECTOR_DATA_SLIDE, Carousel.dataApiClickHandler);\nEventHandler.on(window, EVENT_LOAD_DATA_API$2, () => {\n  const carousels = SelectorEngine.find(SELECTOR_DATA_RIDE);\n\n  for (let i = 0, len = carousels.length; i < len; i++) {\n    Carousel.carouselInterface(carousels[i], Carousel.getInstance(carousels[i]));\n  }\n});\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Carousel to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Carousel);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): collapse.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$9 = 'collapse';\nconst DATA_KEY$8 = 'bs.collapse';\nconst EVENT_KEY$8 = `.${DATA_KEY$8}`;\nconst DATA_API_KEY$5 = '.data-api';\nconst Default$8 = {\n  toggle: true,\n  parent: ''\n};\nconst DefaultType$8 = {\n  toggle: 'boolean',\n  parent: '(string|element)'\n};\nconst EVENT_SHOW$5 = `show${EVENT_KEY$8}`;\nconst EVENT_SHOWN$5 = `shown${EVENT_KEY$8}`;\nconst EVENT_HIDE$5 = `hide${EVENT_KEY$8}`;\nconst EVENT_HIDDEN$5 = `hidden${EVENT_KEY$8}`;\nconst EVENT_CLICK_DATA_API$4 = `click${EVENT_KEY$8}${DATA_API_KEY$5}`;\nconst CLASS_NAME_SHOW$8 = 'show';\nconst CLASS_NAME_COLLAPSE = 'collapse';\nconst CLASS_NAME_COLLAPSING = 'collapsing';\nconst CLASS_NAME_COLLAPSED = 'collapsed';\nconst WIDTH = 'width';\nconst HEIGHT = 'height';\nconst SELECTOR_ACTIVES = '.show, .collapsing';\nconst SELECTOR_DATA_TOGGLE$4 = '[data-bs-toggle=\"collapse\"]';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Collapse extends BaseComponent {\n  constructor(element, config) {\n    super(element);\n    this._isTransitioning = false;\n    this._config = this._getConfig(config);\n    this._triggerArray = SelectorEngine.find(`${SELECTOR_DATA_TOGGLE$4}[href=\"#${this._element.id}\"],` + `${SELECTOR_DATA_TOGGLE$4}[data-bs-target=\"#${this._element.id}\"]`);\n    const toggleList = SelectorEngine.find(SELECTOR_DATA_TOGGLE$4);\n\n    for (let i = 0, len = toggleList.length; i < len; i++) {\n      const elem = toggleList[i];\n      const selector = getSelectorFromElement(elem);\n      const filterElement = SelectorEngine.find(selector).filter(foundElem => foundElem === this._element);\n\n      if (selector !== null && filterElement.length) {\n        this._selector = selector;\n\n        this._triggerArray.push(elem);\n      }\n    }\n\n    this._parent = this._config.parent ? this._getParent() : null;\n\n    if (!this._config.parent) {\n      this._addAriaAndCollapsedClass(this._element, this._triggerArray);\n    }\n\n    if (this._config.toggle) {\n      this.toggle();\n    }\n  } // Getters\n\n\n  static get Default() {\n    return Default$8;\n  }\n\n  static get NAME() {\n    return NAME$9;\n  } // Public\n\n\n  toggle() {\n    if (this._element.classList.contains(CLASS_NAME_SHOW$8)) {\n      this.hide();\n    } else {\n      this.show();\n    }\n  }\n\n  show() {\n    if (this._isTransitioning || this._element.classList.contains(CLASS_NAME_SHOW$8)) {\n      return;\n    }\n\n    let actives;\n    let activesData;\n\n    if (this._parent) {\n      actives = SelectorEngine.find(SELECTOR_ACTIVES, this._parent).filter(elem => {\n        if (typeof this._config.parent === 'string') {\n          return elem.getAttribute('data-bs-parent') === this._config.parent;\n        }\n\n        return elem.classList.contains(CLASS_NAME_COLLAPSE);\n      });\n\n      if (actives.length === 0) {\n        actives = null;\n      }\n    }\n\n    const container = SelectorEngine.findOne(this._selector);\n\n    if (actives) {\n      const tempActiveData = actives.find(elem => container !== elem);\n      activesData = tempActiveData ? Collapse.getInstance(tempActiveData) : null;\n\n      if (activesData && activesData._isTransitioning) {\n        return;\n      }\n    }\n\n    const startEvent = EventHandler.trigger(this._element, EVENT_SHOW$5);\n\n    if (startEvent.defaultPrevented) {\n      return;\n    }\n\n    if (actives) {\n      actives.forEach(elemActive => {\n        if (container !== elemActive) {\n          Collapse.collapseInterface(elemActive, 'hide');\n        }\n\n        if (!activesData) {\n          Data.set(elemActive, DATA_KEY$8, null);\n        }\n      });\n    }\n\n    const dimension = this._getDimension();\n\n    this._element.classList.remove(CLASS_NAME_COLLAPSE);\n\n    this._element.classList.add(CLASS_NAME_COLLAPSING);\n\n    this._element.style[dimension] = 0;\n\n    if (this._triggerArray.length) {\n      this._triggerArray.forEach(element => {\n        element.classList.remove(CLASS_NAME_COLLAPSED);\n        element.setAttribute('aria-expanded', true);\n      });\n    }\n\n    this.setTransitioning(true);\n\n    const complete = () => {\n      this._element.classList.remove(CLASS_NAME_COLLAPSING);\n\n      this._element.classList.add(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$8);\n\n      this._element.style[dimension] = '';\n      this.setTransitioning(false);\n      EventHandler.trigger(this._element, EVENT_SHOWN$5);\n    };\n\n    const capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1);\n    const scrollSize = `scroll${capitalizedDimension}`;\n\n    this._queueCallback(complete, this._element, true);\n\n    this._element.style[dimension] = `${this._element[scrollSize]}px`;\n  }\n\n  hide() {\n    if (this._isTransitioning || !this._element.classList.contains(CLASS_NAME_SHOW$8)) {\n      return;\n    }\n\n    const startEvent = EventHandler.trigger(this._element, EVENT_HIDE$5);\n\n    if (startEvent.defaultPrevented) {\n      return;\n    }\n\n    const dimension = this._getDimension();\n\n    this._element.style[dimension] = `${this._element.getBoundingClientRect()[dimension]}px`;\n    reflow(this._element);\n\n    this._element.classList.add(CLASS_NAME_COLLAPSING);\n\n    this._element.classList.remove(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$8);\n\n    const triggerArrayLength = this._triggerArray.length;\n\n    if (triggerArrayLength > 0) {\n      for (let i = 0; i < triggerArrayLength; i++) {\n        const trigger = this._triggerArray[i];\n        const elem = getElementFromSelector(trigger);\n\n        if (elem && !elem.classList.contains(CLASS_NAME_SHOW$8)) {\n          trigger.classList.add(CLASS_NAME_COLLAPSED);\n          trigger.setAttribute('aria-expanded', false);\n        }\n      }\n    }\n\n    this.setTransitioning(true);\n\n    const complete = () => {\n      this.setTransitioning(false);\n\n      this._element.classList.remove(CLASS_NAME_COLLAPSING);\n\n      this._element.classList.add(CLASS_NAME_COLLAPSE);\n\n      EventHandler.trigger(this._element, EVENT_HIDDEN$5);\n    };\n\n    this._element.style[dimension] = '';\n\n    this._queueCallback(complete, this._element, true);\n  }\n\n  setTransitioning(isTransitioning) {\n    this._isTransitioning = isTransitioning;\n  } // Private\n\n\n  _getConfig(config) {\n    config = { ...Default$8,\n      ...config\n    };\n    config.toggle = Boolean(config.toggle); // Coerce string values\n\n    typeCheckConfig(NAME$9, config, DefaultType$8);\n    return config;\n  }\n\n  _getDimension() {\n    return this._element.classList.contains(WIDTH) ? WIDTH : HEIGHT;\n  }\n\n  _getParent() {\n    let {\n      parent\n    } = this._config;\n    parent = getElement(parent);\n    const selector = `${SELECTOR_DATA_TOGGLE$4}[data-bs-parent=\"${parent}\"]`;\n    SelectorEngine.find(selector, parent).forEach(element => {\n      const selected = getElementFromSelector(element);\n\n      this._addAriaAndCollapsedClass(selected, [element]);\n    });\n    return parent;\n  }\n\n  _addAriaAndCollapsedClass(element, triggerArray) {\n    if (!element || !triggerArray.length) {\n      return;\n    }\n\n    const isOpen = element.classList.contains(CLASS_NAME_SHOW$8);\n    triggerArray.forEach(elem => {\n      if (isOpen) {\n        elem.classList.remove(CLASS_NAME_COLLAPSED);\n      } else {\n        elem.classList.add(CLASS_NAME_COLLAPSED);\n      }\n\n      elem.setAttribute('aria-expanded', isOpen);\n    });\n  } // Static\n\n\n  static collapseInterface(element, config) {\n    let data = Collapse.getInstance(element);\n    const _config = { ...Default$8,\n      ...Manipulator.getDataAttributes(element),\n      ...(typeof config === 'object' && config ? config : {})\n    };\n\n    if (!data && _config.toggle && typeof config === 'string' && /show|hide/.test(config)) {\n      _config.toggle = false;\n    }\n\n    if (!data) {\n      data = new Collapse(element, _config);\n    }\n\n    if (typeof config === 'string') {\n      if (typeof data[config] === 'undefined') {\n        throw new TypeError(`No method named \"${config}\"`);\n      }\n\n      data[config]();\n    }\n  }\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      Collapse.collapseInterface(this, config);\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$4, SELECTOR_DATA_TOGGLE$4, function (event) {\n  // preventDefault only for <a> elements (which change the URL) not inside the collapsible element\n  if (event.target.tagName === 'A' || event.delegateTarget && event.delegateTarget.tagName === 'A') {\n    event.preventDefault();\n  }\n\n  const triggerData = Manipulator.getDataAttributes(this);\n  const selector = getSelectorFromElement(this);\n  const selectorElements = SelectorEngine.find(selector);\n  selectorElements.forEach(element => {\n    const data = Collapse.getInstance(element);\n    let config;\n\n    if (data) {\n      // update parent attribute\n      if (data._parent === null && typeof triggerData.parent === 'string') {\n        data._config.parent = triggerData.parent;\n        data._parent = data._getParent();\n      }\n\n      config = 'toggle';\n    } else {\n      config = triggerData;\n    }\n\n    Collapse.collapseInterface(element, config);\n  });\n});\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Collapse to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Collapse);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): dropdown.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$8 = 'dropdown';\nconst DATA_KEY$7 = 'bs.dropdown';\nconst EVENT_KEY$7 = `.${DATA_KEY$7}`;\nconst DATA_API_KEY$4 = '.data-api';\nconst ESCAPE_KEY$2 = 'Escape';\nconst SPACE_KEY = 'Space';\nconst TAB_KEY = 'Tab';\nconst ARROW_UP_KEY = 'ArrowUp';\nconst ARROW_DOWN_KEY = 'ArrowDown';\nconst RIGHT_MOUSE_BUTTON = 2; // MouseEvent.button value for the secondary button, usually the right button\n\nconst REGEXP_KEYDOWN = new RegExp(`${ARROW_UP_KEY}|${ARROW_DOWN_KEY}|${ESCAPE_KEY$2}`);\nconst EVENT_HIDE$4 = `hide${EVENT_KEY$7}`;\nconst EVENT_HIDDEN$4 = `hidden${EVENT_KEY$7}`;\nconst EVENT_SHOW$4 = `show${EVENT_KEY$7}`;\nconst EVENT_SHOWN$4 = `shown${EVENT_KEY$7}`;\nconst EVENT_CLICK = `click${EVENT_KEY$7}`;\nconst EVENT_CLICK_DATA_API$3 = `click${EVENT_KEY$7}${DATA_API_KEY$4}`;\nconst EVENT_KEYDOWN_DATA_API = `keydown${EVENT_KEY$7}${DATA_API_KEY$4}`;\nconst EVENT_KEYUP_DATA_API = `keyup${EVENT_KEY$7}${DATA_API_KEY$4}`;\nconst CLASS_NAME_SHOW$7 = 'show';\nconst CLASS_NAME_DROPUP = 'dropup';\nconst CLASS_NAME_DROPEND = 'dropend';\nconst CLASS_NAME_DROPSTART = 'dropstart';\nconst CLASS_NAME_NAVBAR = 'navbar';\nconst SELECTOR_DATA_TOGGLE$3 = '[data-bs-toggle=\"dropdown\"]';\nconst SELECTOR_MENU = '.dropdown-menu';\nconst SELECTOR_NAVBAR_NAV = '.navbar-nav';\nconst SELECTOR_VISIBLE_ITEMS = '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)';\nconst PLACEMENT_TOP = isRTL() ? 'top-end' : 'top-start';\nconst PLACEMENT_TOPEND = isRTL() ? 'top-start' : 'top-end';\nconst PLACEMENT_BOTTOM = isRTL() ? 'bottom-end' : 'bottom-start';\nconst PLACEMENT_BOTTOMEND = isRTL() ? 'bottom-start' : 'bottom-end';\nconst PLACEMENT_RIGHT = isRTL() ? 'left-start' : 'right-start';\nconst PLACEMENT_LEFT = isRTL() ? 'right-start' : 'left-start';\nconst Default$7 = {\n  offset: [0, 2],\n  boundary: 'clippingParents',\n  reference: 'toggle',\n  display: 'dynamic',\n  popperConfig: null,\n  autoClose: true\n};\nconst DefaultType$7 = {\n  offset: '(array|string|function)',\n  boundary: '(string|element)',\n  reference: '(string|element|object)',\n  display: 'string',\n  popperConfig: '(null|object|function)',\n  autoClose: '(boolean|string)'\n};\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Dropdown extends BaseComponent {\n  constructor(element, config) {\n    super(element);\n    this._popper = null;\n    this._config = this._getConfig(config);\n    this._menu = this._getMenuElement();\n    this._inNavbar = this._detectNavbar();\n\n    this._addEventListeners();\n  } // Getters\n\n\n  static get Default() {\n    return Default$7;\n  }\n\n  static get DefaultType() {\n    return DefaultType$7;\n  }\n\n  static get NAME() {\n    return NAME$8;\n  } // Public\n\n\n  toggle() {\n    if (isDisabled(this._element)) {\n      return;\n    }\n\n    const isActive = this._element.classList.contains(CLASS_NAME_SHOW$7);\n\n    if (isActive) {\n      this.hide();\n      return;\n    }\n\n    this.show();\n  }\n\n  show() {\n    if (isDisabled(this._element) || this._menu.classList.contains(CLASS_NAME_SHOW$7)) {\n      return;\n    }\n\n    const parent = Dropdown.getParentFromElement(this._element);\n    const relatedTarget = {\n      relatedTarget: this._element\n    };\n    const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$4, relatedTarget);\n\n    if (showEvent.defaultPrevented) {\n      return;\n    } // Totally disable Popper for Dropdowns in Navbar\n\n\n    if (this._inNavbar) {\n      Manipulator.setDataAttribute(this._menu, 'popper', 'none');\n    } else {\n      if (typeof Popper === 'undefined') {\n        throw new TypeError('Bootstrap\\'s dropdowns require Popper (https://popper.js.org)');\n      }\n\n      let referenceElement = this._element;\n\n      if (this._config.reference === 'parent') {\n        referenceElement = parent;\n      } else if (isElement(this._config.reference)) {\n        referenceElement = getElement(this._config.reference);\n      } else if (typeof this._config.reference === 'object') {\n        referenceElement = this._config.reference;\n      }\n\n      const popperConfig = this._getPopperConfig();\n\n      const isDisplayStatic = popperConfig.modifiers.find(modifier => modifier.name === 'applyStyles' && modifier.enabled === false);\n      this._popper = Popper.createPopper(referenceElement, this._menu, popperConfig);\n\n      if (isDisplayStatic) {\n        Manipulator.setDataAttribute(this._menu, 'popper', 'static');\n      }\n    } // If this is a touch-enabled device we add extra\n    // empty mouseover listeners to the body's immediate children;\n    // only needed because of broken event delegation on iOS\n    // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n\n\n    if ('ontouchstart' in document.documentElement && !parent.closest(SELECTOR_NAVBAR_NAV)) {\n      [].concat(...document.body.children).forEach(elem => EventHandler.on(elem, 'mouseover', noop));\n    }\n\n    this._element.focus();\n\n    this._element.setAttribute('aria-expanded', true);\n\n    this._menu.classList.toggle(CLASS_NAME_SHOW$7);\n\n    this._element.classList.toggle(CLASS_NAME_SHOW$7);\n\n    EventHandler.trigger(this._element, EVENT_SHOWN$4, relatedTarget);\n  }\n\n  hide() {\n    if (isDisabled(this._element) || !this._menu.classList.contains(CLASS_NAME_SHOW$7)) {\n      return;\n    }\n\n    const relatedTarget = {\n      relatedTarget: this._element\n    };\n\n    this._completeHide(relatedTarget);\n  }\n\n  dispose() {\n    if (this._popper) {\n      this._popper.destroy();\n    }\n\n    super.dispose();\n  }\n\n  update() {\n    this._inNavbar = this._detectNavbar();\n\n    if (this._popper) {\n      this._popper.update();\n    }\n  } // Private\n\n\n  _addEventListeners() {\n    EventHandler.on(this._element, EVENT_CLICK, event => {\n      event.preventDefault();\n      this.toggle();\n    });\n  }\n\n  _completeHide(relatedTarget) {\n    const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$4, relatedTarget);\n\n    if (hideEvent.defaultPrevented) {\n      return;\n    } // If this is a touch-enabled device we remove the extra\n    // empty mouseover listeners we added for iOS support\n\n\n    if ('ontouchstart' in document.documentElement) {\n      [].concat(...document.body.children).forEach(elem => EventHandler.off(elem, 'mouseover', noop));\n    }\n\n    if (this._popper) {\n      this._popper.destroy();\n    }\n\n    this._menu.classList.remove(CLASS_NAME_SHOW$7);\n\n    this._element.classList.remove(CLASS_NAME_SHOW$7);\n\n    this._element.setAttribute('aria-expanded', 'false');\n\n    Manipulator.removeDataAttribute(this._menu, 'popper');\n    EventHandler.trigger(this._element, EVENT_HIDDEN$4, relatedTarget);\n  }\n\n  _getConfig(config) {\n    config = { ...this.constructor.Default,\n      ...Manipulator.getDataAttributes(this._element),\n      ...config\n    };\n    typeCheckConfig(NAME$8, config, this.constructor.DefaultType);\n\n    if (typeof config.reference === 'object' && !isElement(config.reference) && typeof config.reference.getBoundingClientRect !== 'function') {\n      // Popper virtual elements require a getBoundingClientRect method\n      throw new TypeError(`${NAME$8.toUpperCase()}: Option \"reference\" provided type \"object\" without a required \"getBoundingClientRect\" method.`);\n    }\n\n    return config;\n  }\n\n  _getMenuElement() {\n    return SelectorEngine.next(this._element, SELECTOR_MENU)[0];\n  }\n\n  _getPlacement() {\n    const parentDropdown = this._element.parentNode;\n\n    if (parentDropdown.classList.contains(CLASS_NAME_DROPEND)) {\n      return PLACEMENT_RIGHT;\n    }\n\n    if (parentDropdown.classList.contains(CLASS_NAME_DROPSTART)) {\n      return PLACEMENT_LEFT;\n    } // We need to trim the value because custom properties can also include spaces\n\n\n    const isEnd = getComputedStyle(this._menu).getPropertyValue('--bs-position').trim() === 'end';\n\n    if (parentDropdown.classList.contains(CLASS_NAME_DROPUP)) {\n      return isEnd ? PLACEMENT_TOPEND : PLACEMENT_TOP;\n    }\n\n    return isEnd ? PLACEMENT_BOTTOMEND : PLACEMENT_BOTTOM;\n  }\n\n  _detectNavbar() {\n    return this._element.closest(`.${CLASS_NAME_NAVBAR}`) !== null;\n  }\n\n  _getOffset() {\n    const {\n      offset\n    } = this._config;\n\n    if (typeof offset === 'string') {\n      return offset.split(',').map(val => Number.parseInt(val, 10));\n    }\n\n    if (typeof offset === 'function') {\n      return popperData => offset(popperData, this._element);\n    }\n\n    return offset;\n  }\n\n  _getPopperConfig() {\n    const defaultBsPopperConfig = {\n      placement: this._getPlacement(),\n      modifiers: [{\n        name: 'preventOverflow',\n        options: {\n          boundary: this._config.boundary\n        }\n      }, {\n        name: 'offset',\n        options: {\n          offset: this._getOffset()\n        }\n      }]\n    }; // Disable Popper if we have a static display\n\n    if (this._config.display === 'static') {\n      defaultBsPopperConfig.modifiers = [{\n        name: 'applyStyles',\n        enabled: false\n      }];\n    }\n\n    return { ...defaultBsPopperConfig,\n      ...(typeof this._config.popperConfig === 'function' ? this._config.popperConfig(defaultBsPopperConfig) : this._config.popperConfig)\n    };\n  }\n\n  _selectMenuItem({\n    key,\n    target\n  }) {\n    const items = SelectorEngine.find(SELECTOR_VISIBLE_ITEMS, this._menu).filter(isVisible);\n\n    if (!items.length) {\n      return;\n    } // if target isn't included in items (e.g. when expanding the dropdown)\n    // allow cycling to get the last item in case key equals ARROW_UP_KEY\n\n\n    getNextActiveElement(items, target, key === ARROW_DOWN_KEY, !items.includes(target)).focus();\n  } // Static\n\n\n  static dropdownInterface(element, config) {\n    const data = Dropdown.getOrCreateInstance(element, config);\n\n    if (typeof config === 'string') {\n      if (typeof data[config] === 'undefined') {\n        throw new TypeError(`No method named \"${config}\"`);\n      }\n\n      data[config]();\n    }\n  }\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      Dropdown.dropdownInterface(this, config);\n    });\n  }\n\n  static clearMenus(event) {\n    if (event && (event.button === RIGHT_MOUSE_BUTTON || event.type === 'keyup' && event.key !== TAB_KEY)) {\n      return;\n    }\n\n    const toggles = SelectorEngine.find(SELECTOR_DATA_TOGGLE$3);\n\n    for (let i = 0, len = toggles.length; i < len; i++) {\n      const context = Dropdown.getInstance(toggles[i]);\n\n      if (!context || context._config.autoClose === false) {\n        continue;\n      }\n\n      if (!context._element.classList.contains(CLASS_NAME_SHOW$7)) {\n        continue;\n      }\n\n      const relatedTarget = {\n        relatedTarget: context._element\n      };\n\n      if (event) {\n        const composedPath = event.composedPath();\n        const isMenuTarget = composedPath.includes(context._menu);\n\n        if (composedPath.includes(context._element) || context._config.autoClose === 'inside' && !isMenuTarget || context._config.autoClose === 'outside' && isMenuTarget) {\n          continue;\n        } // Tab navigation through the dropdown menu or events from contained inputs shouldn't close the menu\n\n\n        if (context._menu.contains(event.target) && (event.type === 'keyup' && event.key === TAB_KEY || /input|select|option|textarea|form/i.test(event.target.tagName))) {\n          continue;\n        }\n\n        if (event.type === 'click') {\n          relatedTarget.clickEvent = event;\n        }\n      }\n\n      context._completeHide(relatedTarget);\n    }\n  }\n\n  static getParentFromElement(element) {\n    return getElementFromSelector(element) || element.parentNode;\n  }\n\n  static dataApiKeydownHandler(event) {\n    // If not input/textarea:\n    //  - And not a key in REGEXP_KEYDOWN => not a dropdown command\n    // If input/textarea:\n    //  - If space key => not a dropdown command\n    //  - If key is other than escape\n    //    - If key is not up or down => not a dropdown command\n    //    - If trigger inside the menu => not a dropdown command\n    if (/input|textarea/i.test(event.target.tagName) ? event.key === SPACE_KEY || event.key !== ESCAPE_KEY$2 && (event.key !== ARROW_DOWN_KEY && event.key !== ARROW_UP_KEY || event.target.closest(SELECTOR_MENU)) : !REGEXP_KEYDOWN.test(event.key)) {\n      return;\n    }\n\n    const isActive = this.classList.contains(CLASS_NAME_SHOW$7);\n\n    if (!isActive && event.key === ESCAPE_KEY$2) {\n      return;\n    }\n\n    event.preventDefault();\n    event.stopPropagation();\n\n    if (isDisabled(this)) {\n      return;\n    }\n\n    const getToggleButton = () => this.matches(SELECTOR_DATA_TOGGLE$3) ? this : SelectorEngine.prev(this, SELECTOR_DATA_TOGGLE$3)[0];\n\n    if (event.key === ESCAPE_KEY$2) {\n      getToggleButton().focus();\n      Dropdown.clearMenus();\n      return;\n    }\n\n    if (event.key === ARROW_UP_KEY || event.key === ARROW_DOWN_KEY) {\n      if (!isActive) {\n        getToggleButton().click();\n      }\n\n      Dropdown.getInstance(getToggleButton())._selectMenuItem(event);\n\n      return;\n    }\n\n    if (!isActive || event.key === SPACE_KEY) {\n      Dropdown.clearMenus();\n    }\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_DATA_TOGGLE$3, Dropdown.dataApiKeydownHandler);\nEventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown.dataApiKeydownHandler);\nEventHandler.on(document, EVENT_CLICK_DATA_API$3, Dropdown.clearMenus);\nEventHandler.on(document, EVENT_KEYUP_DATA_API, Dropdown.clearMenus);\nEventHandler.on(document, EVENT_CLICK_DATA_API$3, SELECTOR_DATA_TOGGLE$3, function (event) {\n  event.preventDefault();\n  Dropdown.dropdownInterface(this);\n});\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Dropdown to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Dropdown);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): util/scrollBar.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\nconst SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top';\nconst SELECTOR_STICKY_CONTENT = '.sticky-top';\n\nclass ScrollBarHelper {\n  constructor() {\n    this._element = document.body;\n  }\n\n  getWidth() {\n    // https://developer.mozilla.org/en-US/docs/Web/API/Window/innerWidth#usage_notes\n    const documentWidth = document.documentElement.clientWidth;\n    return Math.abs(window.innerWidth - documentWidth);\n  }\n\n  hide() {\n    const width = this.getWidth();\n\n    this._disableOverFlow(); // give padding to element to balance the hidden scrollbar width\n\n\n    this._setElementAttributes(this._element, 'paddingRight', calculatedValue => calculatedValue + width); // trick: We adjust positive paddingRight and negative marginRight to sticky-top elements to keep showing fullwidth\n\n\n    this._setElementAttributes(SELECTOR_FIXED_CONTENT, 'paddingRight', calculatedValue => calculatedValue + width);\n\n    this._setElementAttributes(SELECTOR_STICKY_CONTENT, 'marginRight', calculatedValue => calculatedValue - width);\n  }\n\n  _disableOverFlow() {\n    this._saveInitialAttribute(this._element, 'overflow');\n\n    this._element.style.overflow = 'hidden';\n  }\n\n  _setElementAttributes(selector, styleProp, callback) {\n    const scrollbarWidth = this.getWidth();\n\n    const manipulationCallBack = element => {\n      if (element !== this._element && window.innerWidth > element.clientWidth + scrollbarWidth) {\n        return;\n      }\n\n      this._saveInitialAttribute(element, styleProp);\n\n      const calculatedValue = window.getComputedStyle(element)[styleProp];\n      element.style[styleProp] = `${callback(Number.parseFloat(calculatedValue))}px`;\n    };\n\n    this._applyManipulationCallback(selector, manipulationCallBack);\n  }\n\n  reset() {\n    this._resetElementAttributes(this._element, 'overflow');\n\n    this._resetElementAttributes(this._element, 'paddingRight');\n\n    this._resetElementAttributes(SELECTOR_FIXED_CONTENT, 'paddingRight');\n\n    this._resetElementAttributes(SELECTOR_STICKY_CONTENT, 'marginRight');\n  }\n\n  _saveInitialAttribute(element, styleProp) {\n    const actualValue = element.style[styleProp];\n\n    if (actualValue) {\n      Manipulator.setDataAttribute(element, styleProp, actualValue);\n    }\n  }\n\n  _resetElementAttributes(selector, styleProp) {\n    const manipulationCallBack = element => {\n      const value = Manipulator.getDataAttribute(element, styleProp);\n\n      if (typeof value === 'undefined') {\n        element.style.removeProperty(styleProp);\n      } else {\n        Manipulator.removeDataAttribute(element, styleProp);\n        element.style[styleProp] = value;\n      }\n    };\n\n    this._applyManipulationCallback(selector, manipulationCallBack);\n  }\n\n  _applyManipulationCallback(selector, callBack) {\n    if (isElement(selector)) {\n      callBack(selector);\n    } else {\n      SelectorEngine.find(selector, this._element).forEach(callBack);\n    }\n  }\n\n  isOverflowing() {\n    return this.getWidth() > 0;\n  }\n\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): util/backdrop.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\nconst Default$6 = {\n  isVisible: true,\n  // if false, we use the backdrop helper without adding any element to the dom\n  isAnimated: false,\n  rootElement: 'body',\n  // give the choice to place backdrop under different elements\n  clickCallback: null\n};\nconst DefaultType$6 = {\n  isVisible: 'boolean',\n  isAnimated: 'boolean',\n  rootElement: '(element|string)',\n  clickCallback: '(function|null)'\n};\nconst NAME$7 = 'backdrop';\nconst CLASS_NAME_BACKDROP = 'modal-backdrop';\nconst CLASS_NAME_FADE$5 = 'fade';\nconst CLASS_NAME_SHOW$6 = 'show';\nconst EVENT_MOUSEDOWN = `mousedown.bs.${NAME$7}`;\n\nclass Backdrop {\n  constructor(config) {\n    this._config = this._getConfig(config);\n    this._isAppended = false;\n    this._element = null;\n  }\n\n  show(callback) {\n    if (!this._config.isVisible) {\n      execute(callback);\n      return;\n    }\n\n    this._append();\n\n    if (this._config.isAnimated) {\n      reflow(this._getElement());\n    }\n\n    this._getElement().classList.add(CLASS_NAME_SHOW$6);\n\n    this._emulateAnimation(() => {\n      execute(callback);\n    });\n  }\n\n  hide(callback) {\n    if (!this._config.isVisible) {\n      execute(callback);\n      return;\n    }\n\n    this._getElement().classList.remove(CLASS_NAME_SHOW$6);\n\n    this._emulateAnimation(() => {\n      this.dispose();\n      execute(callback);\n    });\n  } // Private\n\n\n  _getElement() {\n    if (!this._element) {\n      const backdrop = document.createElement('div');\n      backdrop.className = CLASS_NAME_BACKDROP;\n\n      if (this._config.isAnimated) {\n        backdrop.classList.add(CLASS_NAME_FADE$5);\n      }\n\n      this._element = backdrop;\n    }\n\n    return this._element;\n  }\n\n  _getConfig(config) {\n    config = { ...Default$6,\n      ...(typeof config === 'object' ? config : {})\n    }; // use getElement() with the default \"body\" to get a fresh Element on each instantiation\n\n    config.rootElement = getElement(config.rootElement);\n    typeCheckConfig(NAME$7, config, DefaultType$6);\n    return config;\n  }\n\n  _append() {\n    if (this._isAppended) {\n      return;\n    }\n\n    this._config.rootElement.appendChild(this._getElement());\n\n    EventHandler.on(this._getElement(), EVENT_MOUSEDOWN, () => {\n      execute(this._config.clickCallback);\n    });\n    this._isAppended = true;\n  }\n\n  dispose() {\n    if (!this._isAppended) {\n      return;\n    }\n\n    EventHandler.off(this._element, EVENT_MOUSEDOWN);\n\n    this._element.remove();\n\n    this._isAppended = false;\n  }\n\n  _emulateAnimation(callback) {\n    executeAfterTransition(callback, this._getElement(), this._config.isAnimated);\n  }\n\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): modal.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$6 = 'modal';\nconst DATA_KEY$6 = 'bs.modal';\nconst EVENT_KEY$6 = `.${DATA_KEY$6}`;\nconst DATA_API_KEY$3 = '.data-api';\nconst ESCAPE_KEY$1 = 'Escape';\nconst Default$5 = {\n  backdrop: true,\n  keyboard: true,\n  focus: true\n};\nconst DefaultType$5 = {\n  backdrop: '(boolean|string)',\n  keyboard: 'boolean',\n  focus: 'boolean'\n};\nconst EVENT_HIDE$3 = `hide${EVENT_KEY$6}`;\nconst EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY$6}`;\nconst EVENT_HIDDEN$3 = `hidden${EVENT_KEY$6}`;\nconst EVENT_SHOW$3 = `show${EVENT_KEY$6}`;\nconst EVENT_SHOWN$3 = `shown${EVENT_KEY$6}`;\nconst EVENT_FOCUSIN$2 = `focusin${EVENT_KEY$6}`;\nconst EVENT_RESIZE = `resize${EVENT_KEY$6}`;\nconst EVENT_CLICK_DISMISS$2 = `click.dismiss${EVENT_KEY$6}`;\nconst EVENT_KEYDOWN_DISMISS$1 = `keydown.dismiss${EVENT_KEY$6}`;\nconst EVENT_MOUSEUP_DISMISS = `mouseup.dismiss${EVENT_KEY$6}`;\nconst EVENT_MOUSEDOWN_DISMISS = `mousedown.dismiss${EVENT_KEY$6}`;\nconst EVENT_CLICK_DATA_API$2 = `click${EVENT_KEY$6}${DATA_API_KEY$3}`;\nconst CLASS_NAME_OPEN = 'modal-open';\nconst CLASS_NAME_FADE$4 = 'fade';\nconst CLASS_NAME_SHOW$5 = 'show';\nconst CLASS_NAME_STATIC = 'modal-static';\nconst SELECTOR_DIALOG = '.modal-dialog';\nconst SELECTOR_MODAL_BODY = '.modal-body';\nconst SELECTOR_DATA_TOGGLE$2 = '[data-bs-toggle=\"modal\"]';\nconst SELECTOR_DATA_DISMISS$2 = '[data-bs-dismiss=\"modal\"]';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Modal extends BaseComponent {\n  constructor(element, config) {\n    super(element);\n    this._config = this._getConfig(config);\n    this._dialog = SelectorEngine.findOne(SELECTOR_DIALOG, this._element);\n    this._backdrop = this._initializeBackDrop();\n    this._isShown = false;\n    this._ignoreBackdropClick = false;\n    this._isTransitioning = false;\n    this._scrollBar = new ScrollBarHelper();\n  } // Getters\n\n\n  static get Default() {\n    return Default$5;\n  }\n\n  static get NAME() {\n    return NAME$6;\n  } // Public\n\n\n  toggle(relatedTarget) {\n    return this._isShown ? this.hide() : this.show(relatedTarget);\n  }\n\n  show(relatedTarget) {\n    if (this._isShown || this._isTransitioning) {\n      return;\n    }\n\n    const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$3, {\n      relatedTarget\n    });\n\n    if (showEvent.defaultPrevented) {\n      return;\n    }\n\n    this._isShown = true;\n\n    if (this._isAnimated()) {\n      this._isTransitioning = true;\n    }\n\n    this._scrollBar.hide();\n\n    document.body.classList.add(CLASS_NAME_OPEN);\n\n    this._adjustDialog();\n\n    this._setEscapeEvent();\n\n    this._setResizeEvent();\n\n    EventHandler.on(this._element, EVENT_CLICK_DISMISS$2, SELECTOR_DATA_DISMISS$2, event => this.hide(event));\n    EventHandler.on(this._dialog, EVENT_MOUSEDOWN_DISMISS, () => {\n      EventHandler.one(this._element, EVENT_MOUSEUP_DISMISS, event => {\n        if (event.target === this._element) {\n          this._ignoreBackdropClick = true;\n        }\n      });\n    });\n\n    this._showBackdrop(() => this._showElement(relatedTarget));\n  }\n\n  hide(event) {\n    if (event && ['A', 'AREA'].includes(event.target.tagName)) {\n      event.preventDefault();\n    }\n\n    if (!this._isShown || this._isTransitioning) {\n      return;\n    }\n\n    const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$3);\n\n    if (hideEvent.defaultPrevented) {\n      return;\n    }\n\n    this._isShown = false;\n\n    const isAnimated = this._isAnimated();\n\n    if (isAnimated) {\n      this._isTransitioning = true;\n    }\n\n    this._setEscapeEvent();\n\n    this._setResizeEvent();\n\n    EventHandler.off(document, EVENT_FOCUSIN$2);\n\n    this._element.classList.remove(CLASS_NAME_SHOW$5);\n\n    EventHandler.off(this._element, EVENT_CLICK_DISMISS$2);\n    EventHandler.off(this._dialog, EVENT_MOUSEDOWN_DISMISS);\n\n    this._queueCallback(() => this._hideModal(), this._element, isAnimated);\n  }\n\n  dispose() {\n    [window, this._dialog].forEach(htmlElement => EventHandler.off(htmlElement, EVENT_KEY$6));\n\n    this._backdrop.dispose();\n\n    super.dispose();\n    /**\n     * `document` has 2 events `EVENT_FOCUSIN` and `EVENT_CLICK_DATA_API`\n     * Do not move `document` in `htmlElements` array\n     * It will remove `EVENT_CLICK_DATA_API` event that should remain\n     */\n\n    EventHandler.off(document, EVENT_FOCUSIN$2);\n  }\n\n  handleUpdate() {\n    this._adjustDialog();\n  } // Private\n\n\n  _initializeBackDrop() {\n    return new Backdrop({\n      isVisible: Boolean(this._config.backdrop),\n      // 'static' option will be translated to true, and booleans will keep their value\n      isAnimated: this._isAnimated()\n    });\n  }\n\n  _getConfig(config) {\n    config = { ...Default$5,\n      ...Manipulator.getDataAttributes(this._element),\n      ...(typeof config === 'object' ? config : {})\n    };\n    typeCheckConfig(NAME$6, config, DefaultType$5);\n    return config;\n  }\n\n  _showElement(relatedTarget) {\n    const isAnimated = this._isAnimated();\n\n    const modalBody = SelectorEngine.findOne(SELECTOR_MODAL_BODY, this._dialog);\n\n    if (!this._element.parentNode || this._element.parentNode.nodeType !== Node.ELEMENT_NODE) {\n      // Don't move modal's DOM position\n      document.body.appendChild(this._element);\n    }\n\n    this._element.style.display = 'block';\n\n    this._element.removeAttribute('aria-hidden');\n\n    this._element.setAttribute('aria-modal', true);\n\n    this._element.setAttribute('role', 'dialog');\n\n    this._element.scrollTop = 0;\n\n    if (modalBody) {\n      modalBody.scrollTop = 0;\n    }\n\n    if (isAnimated) {\n      reflow(this._element);\n    }\n\n    this._element.classList.add(CLASS_NAME_SHOW$5);\n\n    if (this._config.focus) {\n      this._enforceFocus();\n    }\n\n    const transitionComplete = () => {\n      if (this._config.focus) {\n        this._element.focus();\n      }\n\n      this._isTransitioning = false;\n      EventHandler.trigger(this._element, EVENT_SHOWN$3, {\n        relatedTarget\n      });\n    };\n\n    this._queueCallback(transitionComplete, this._dialog, isAnimated);\n  }\n\n  _enforceFocus() {\n    EventHandler.off(document, EVENT_FOCUSIN$2); // guard against infinite focus loop\n\n    EventHandler.on(document, EVENT_FOCUSIN$2, event => {\n      if (document !== event.target && this._element !== event.target && !this._element.contains(event.target)) {\n        this._element.focus();\n      }\n    });\n  }\n\n  _setEscapeEvent() {\n    if (this._isShown) {\n      EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS$1, event => {\n        if (this._config.keyboard && event.key === ESCAPE_KEY$1) {\n          event.preventDefault();\n          this.hide();\n        } else if (!this._config.keyboard && event.key === ESCAPE_KEY$1) {\n          this._triggerBackdropTransition();\n        }\n      });\n    } else {\n      EventHandler.off(this._element, EVENT_KEYDOWN_DISMISS$1);\n    }\n  }\n\n  _setResizeEvent() {\n    if (this._isShown) {\n      EventHandler.on(window, EVENT_RESIZE, () => this._adjustDialog());\n    } else {\n      EventHandler.off(window, EVENT_RESIZE);\n    }\n  }\n\n  _hideModal() {\n    this._element.style.display = 'none';\n\n    this._element.setAttribute('aria-hidden', true);\n\n    this._element.removeAttribute('aria-modal');\n\n    this._element.removeAttribute('role');\n\n    this._isTransitioning = false;\n\n    this._backdrop.hide(() => {\n      document.body.classList.remove(CLASS_NAME_OPEN);\n\n      this._resetAdjustments();\n\n      this._scrollBar.reset();\n\n      EventHandler.trigger(this._element, EVENT_HIDDEN$3);\n    });\n  }\n\n  _showBackdrop(callback) {\n    EventHandler.on(this._element, EVENT_CLICK_DISMISS$2, event => {\n      if (this._ignoreBackdropClick) {\n        this._ignoreBackdropClick = false;\n        return;\n      }\n\n      if (event.target !== event.currentTarget) {\n        return;\n      }\n\n      if (this._config.backdrop === true) {\n        this.hide();\n      } else if (this._config.backdrop === 'static') {\n        this._triggerBackdropTransition();\n      }\n    });\n\n    this._backdrop.show(callback);\n  }\n\n  _isAnimated() {\n    return this._element.classList.contains(CLASS_NAME_FADE$4);\n  }\n\n  _triggerBackdropTransition() {\n    const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED);\n\n    if (hideEvent.defaultPrevented) {\n      return;\n    }\n\n    const {\n      classList,\n      scrollHeight,\n      style\n    } = this._element;\n    const isModalOverflowing = scrollHeight > document.documentElement.clientHeight; // return if the following background transition hasn't yet completed\n\n    if (!isModalOverflowing && style.overflowY === 'hidden' || classList.contains(CLASS_NAME_STATIC)) {\n      return;\n    }\n\n    if (!isModalOverflowing) {\n      style.overflowY = 'hidden';\n    }\n\n    classList.add(CLASS_NAME_STATIC);\n\n    this._queueCallback(() => {\n      classList.remove(CLASS_NAME_STATIC);\n\n      if (!isModalOverflowing) {\n        this._queueCallback(() => {\n          style.overflowY = '';\n        }, this._dialog);\n      }\n    }, this._dialog);\n\n    this._element.focus();\n  } // ----------------------------------------------------------------------\n  // the following methods are used to handle overflowing modals\n  // ----------------------------------------------------------------------\n\n\n  _adjustDialog() {\n    const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;\n\n    const scrollbarWidth = this._scrollBar.getWidth();\n\n    const isBodyOverflowing = scrollbarWidth > 0;\n\n    if (!isBodyOverflowing && isModalOverflowing && !isRTL() || isBodyOverflowing && !isModalOverflowing && isRTL()) {\n      this._element.style.paddingLeft = `${scrollbarWidth}px`;\n    }\n\n    if (isBodyOverflowing && !isModalOverflowing && !isRTL() || !isBodyOverflowing && isModalOverflowing && isRTL()) {\n      this._element.style.paddingRight = `${scrollbarWidth}px`;\n    }\n  }\n\n  _resetAdjustments() {\n    this._element.style.paddingLeft = '';\n    this._element.style.paddingRight = '';\n  } // Static\n\n\n  static jQueryInterface(config, relatedTarget) {\n    return this.each(function () {\n      const data = Modal.getOrCreateInstance(this, config);\n\n      if (typeof config !== 'string') {\n        return;\n      }\n\n      if (typeof data[config] === 'undefined') {\n        throw new TypeError(`No method named \"${config}\"`);\n      }\n\n      data[config](relatedTarget);\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$2, SELECTOR_DATA_TOGGLE$2, function (event) {\n  const target = getElementFromSelector(this);\n\n  if (['A', 'AREA'].includes(this.tagName)) {\n    event.preventDefault();\n  }\n\n  EventHandler.one(target, EVENT_SHOW$3, showEvent => {\n    if (showEvent.defaultPrevented) {\n      // only register focus restorer if modal will actually get shown\n      return;\n    }\n\n    EventHandler.one(target, EVENT_HIDDEN$3, () => {\n      if (isVisible(this)) {\n        this.focus();\n      }\n    });\n  });\n  const data = Modal.getOrCreateInstance(target);\n  data.toggle(this);\n});\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Modal to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Modal);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): offcanvas.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$5 = 'offcanvas';\nconst DATA_KEY$5 = 'bs.offcanvas';\nconst EVENT_KEY$5 = `.${DATA_KEY$5}`;\nconst DATA_API_KEY$2 = '.data-api';\nconst EVENT_LOAD_DATA_API$1 = `load${EVENT_KEY$5}${DATA_API_KEY$2}`;\nconst ESCAPE_KEY = 'Escape';\nconst Default$4 = {\n  backdrop: true,\n  keyboard: true,\n  scroll: false\n};\nconst DefaultType$4 = {\n  backdrop: 'boolean',\n  keyboard: 'boolean',\n  scroll: 'boolean'\n};\nconst CLASS_NAME_SHOW$4 = 'show';\nconst OPEN_SELECTOR = '.offcanvas.show';\nconst EVENT_SHOW$2 = `show${EVENT_KEY$5}`;\nconst EVENT_SHOWN$2 = `shown${EVENT_KEY$5}`;\nconst EVENT_HIDE$2 = `hide${EVENT_KEY$5}`;\nconst EVENT_HIDDEN$2 = `hidden${EVENT_KEY$5}`;\nconst EVENT_FOCUSIN$1 = `focusin${EVENT_KEY$5}`;\nconst EVENT_CLICK_DATA_API$1 = `click${EVENT_KEY$5}${DATA_API_KEY$2}`;\nconst EVENT_CLICK_DISMISS$1 = `click.dismiss${EVENT_KEY$5}`;\nconst EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY$5}`;\nconst SELECTOR_DATA_DISMISS$1 = '[data-bs-dismiss=\"offcanvas\"]';\nconst SELECTOR_DATA_TOGGLE$1 = '[data-bs-toggle=\"offcanvas\"]';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Offcanvas extends BaseComponent {\n  constructor(element, config) {\n    super(element);\n    this._config = this._getConfig(config);\n    this._isShown = false;\n    this._backdrop = this._initializeBackDrop();\n\n    this._addEventListeners();\n  } // Getters\n\n\n  static get NAME() {\n    return NAME$5;\n  }\n\n  static get Default() {\n    return Default$4;\n  } // Public\n\n\n  toggle(relatedTarget) {\n    return this._isShown ? this.hide() : this.show(relatedTarget);\n  }\n\n  show(relatedTarget) {\n    if (this._isShown) {\n      return;\n    }\n\n    const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$2, {\n      relatedTarget\n    });\n\n    if (showEvent.defaultPrevented) {\n      return;\n    }\n\n    this._isShown = true;\n    this._element.style.visibility = 'visible';\n\n    this._backdrop.show();\n\n    if (!this._config.scroll) {\n      new ScrollBarHelper().hide();\n\n      this._enforceFocusOnElement(this._element);\n    }\n\n    this._element.removeAttribute('aria-hidden');\n\n    this._element.setAttribute('aria-modal', true);\n\n    this._element.setAttribute('role', 'dialog');\n\n    this._element.classList.add(CLASS_NAME_SHOW$4);\n\n    const completeCallBack = () => {\n      EventHandler.trigger(this._element, EVENT_SHOWN$2, {\n        relatedTarget\n      });\n    };\n\n    this._queueCallback(completeCallBack, this._element, true);\n  }\n\n  hide() {\n    if (!this._isShown) {\n      return;\n    }\n\n    const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$2);\n\n    if (hideEvent.defaultPrevented) {\n      return;\n    }\n\n    EventHandler.off(document, EVENT_FOCUSIN$1);\n\n    this._element.blur();\n\n    this._isShown = false;\n\n    this._element.classList.remove(CLASS_NAME_SHOW$4);\n\n    this._backdrop.hide();\n\n    const completeCallback = () => {\n      this._element.setAttribute('aria-hidden', true);\n\n      this._element.removeAttribute('aria-modal');\n\n      this._element.removeAttribute('role');\n\n      this._element.style.visibility = 'hidden';\n\n      if (!this._config.scroll) {\n        new ScrollBarHelper().reset();\n      }\n\n      EventHandler.trigger(this._element, EVENT_HIDDEN$2);\n    };\n\n    this._queueCallback(completeCallback, this._element, true);\n  }\n\n  dispose() {\n    this._backdrop.dispose();\n\n    super.dispose();\n    EventHandler.off(document, EVENT_FOCUSIN$1);\n  } // Private\n\n\n  _getConfig(config) {\n    config = { ...Default$4,\n      ...Manipulator.getDataAttributes(this._element),\n      ...(typeof config === 'object' ? config : {})\n    };\n    typeCheckConfig(NAME$5, config, DefaultType$4);\n    return config;\n  }\n\n  _initializeBackDrop() {\n    return new Backdrop({\n      isVisible: this._config.backdrop,\n      isAnimated: true,\n      rootElement: this._element.parentNode,\n      clickCallback: () => this.hide()\n    });\n  }\n\n  _enforceFocusOnElement(element) {\n    EventHandler.off(document, EVENT_FOCUSIN$1); // guard against infinite focus loop\n\n    EventHandler.on(document, EVENT_FOCUSIN$1, event => {\n      if (document !== event.target && element !== event.target && !element.contains(event.target)) {\n        element.focus();\n      }\n    });\n    element.focus();\n  }\n\n  _addEventListeners() {\n    EventHandler.on(this._element, EVENT_CLICK_DISMISS$1, SELECTOR_DATA_DISMISS$1, () => this.hide());\n    EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS, event => {\n      if (this._config.keyboard && event.key === ESCAPE_KEY) {\n        this.hide();\n      }\n    });\n  } // Static\n\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Offcanvas.getOrCreateInstance(this, config);\n\n      if (typeof config !== 'string') {\n        return;\n      }\n\n      if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n        throw new TypeError(`No method named \"${config}\"`);\n      }\n\n      data[config](this);\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$1, SELECTOR_DATA_TOGGLE$1, function (event) {\n  const target = getElementFromSelector(this);\n\n  if (['A', 'AREA'].includes(this.tagName)) {\n    event.preventDefault();\n  }\n\n  if (isDisabled(this)) {\n    return;\n  }\n\n  EventHandler.one(target, EVENT_HIDDEN$2, () => {\n    // focus on trigger when it is closed\n    if (isVisible(this)) {\n      this.focus();\n    }\n  }); // avoid conflict when clicking a toggler of an offcanvas, while another is open\n\n  const allReadyOpen = SelectorEngine.findOne(OPEN_SELECTOR);\n\n  if (allReadyOpen && allReadyOpen !== target) {\n    Offcanvas.getInstance(allReadyOpen).hide();\n  }\n\n  const data = Offcanvas.getOrCreateInstance(target);\n  data.toggle(this);\n});\nEventHandler.on(window, EVENT_LOAD_DATA_API$1, () => SelectorEngine.find(OPEN_SELECTOR).forEach(el => Offcanvas.getOrCreateInstance(el).show()));\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\ndefineJQueryPlugin(Offcanvas);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): util/sanitizer.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\nconst uriAttrs = new Set(['background', 'cite', 'href', 'itemtype', 'longdesc', 'poster', 'src', 'xlink:href']);\nconst ARIA_ATTRIBUTE_PATTERN = /^aria-[\\w-]*$/i;\n/**\n * A pattern that recognizes a commonly useful subset of URLs that are safe.\n *\n * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts\n */\n\nconst SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file):|[^#&/:?]*(?:[#/?]|$))/i;\n/**\n * A pattern that matches safe data URLs. Only matches image, video and audio types.\n *\n * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts\n */\n\nconst DATA_URL_PATTERN = /^data:(?:image\\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\\/(?:mpeg|mp4|ogg|webm)|audio\\/(?:mp3|oga|ogg|opus));base64,[\\d+/a-z]+=*$/i;\n\nconst allowedAttribute = (attr, allowedAttributeList) => {\n  const attrName = attr.nodeName.toLowerCase();\n\n  if (allowedAttributeList.includes(attrName)) {\n    if (uriAttrs.has(attrName)) {\n      return Boolean(SAFE_URL_PATTERN.test(attr.nodeValue) || DATA_URL_PATTERN.test(attr.nodeValue));\n    }\n\n    return true;\n  }\n\n  const regExp = allowedAttributeList.filter(attrRegex => attrRegex instanceof RegExp); // Check if a regular expression validates the attribute.\n\n  for (let i = 0, len = regExp.length; i < len; i++) {\n    if (regExp[i].test(attrName)) {\n      return true;\n    }\n  }\n\n  return false;\n};\n\nconst DefaultAllowlist = {\n  // Global attributes allowed on any supplied element below.\n  '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],\n  a: ['target', 'href', 'title', 'rel'],\n  area: [],\n  b: [],\n  br: [],\n  col: [],\n  code: [],\n  div: [],\n  em: [],\n  hr: [],\n  h1: [],\n  h2: [],\n  h3: [],\n  h4: [],\n  h5: [],\n  h6: [],\n  i: [],\n  img: ['src', 'srcset', 'alt', 'title', 'width', 'height'],\n  li: [],\n  ol: [],\n  p: [],\n  pre: [],\n  s: [],\n  small: [],\n  span: [],\n  sub: [],\n  sup: [],\n  strong: [],\n  u: [],\n  ul: []\n};\nfunction sanitizeHtml(unsafeHtml, allowList, sanitizeFn) {\n  if (!unsafeHtml.length) {\n    return unsafeHtml;\n  }\n\n  if (sanitizeFn && typeof sanitizeFn === 'function') {\n    return sanitizeFn(unsafeHtml);\n  }\n\n  const domParser = new window.DOMParser();\n  const createdDocument = domParser.parseFromString(unsafeHtml, 'text/html');\n  const allowlistKeys = Object.keys(allowList);\n  const elements = [].concat(...createdDocument.body.querySelectorAll('*'));\n\n  for (let i = 0, len = elements.length; i < len; i++) {\n    const el = elements[i];\n    const elName = el.nodeName.toLowerCase();\n\n    if (!allowlistKeys.includes(elName)) {\n      el.remove();\n      continue;\n    }\n\n    const attributeList = [].concat(...el.attributes);\n    const allowedAttributes = [].concat(allowList['*'] || [], allowList[elName] || []);\n    attributeList.forEach(attr => {\n      if (!allowedAttribute(attr, allowedAttributes)) {\n        el.removeAttribute(attr.nodeName);\n      }\n    });\n  }\n\n  return createdDocument.body.innerHTML;\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): tooltip.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$4 = 'tooltip';\nconst DATA_KEY$4 = 'bs.tooltip';\nconst EVENT_KEY$4 = `.${DATA_KEY$4}`;\nconst CLASS_PREFIX$1 = 'bs-tooltip';\nconst BSCLS_PREFIX_REGEX$1 = new RegExp(`(^|\\\\s)${CLASS_PREFIX$1}\\\\S+`, 'g');\nconst DISALLOWED_ATTRIBUTES = new Set(['sanitize', 'allowList', 'sanitizeFn']);\nconst DefaultType$3 = {\n  animation: 'boolean',\n  template: 'string',\n  title: '(string|element|function)',\n  trigger: 'string',\n  delay: '(number|object)',\n  html: 'boolean',\n  selector: '(string|boolean)',\n  placement: '(string|function)',\n  offset: '(array|string|function)',\n  container: '(string|element|boolean)',\n  fallbackPlacements: 'array',\n  boundary: '(string|element)',\n  customClass: '(string|function)',\n  sanitize: 'boolean',\n  sanitizeFn: '(null|function)',\n  allowList: 'object',\n  popperConfig: '(null|object|function)'\n};\nconst AttachmentMap = {\n  AUTO: 'auto',\n  TOP: 'top',\n  RIGHT: isRTL() ? 'left' : 'right',\n  BOTTOM: 'bottom',\n  LEFT: isRTL() ? 'right' : 'left'\n};\nconst Default$3 = {\n  animation: true,\n  template: '<div class=\"tooltip\" role=\"tooltip\">' + '<div class=\"tooltip-arrow\"></div>' + '<div class=\"tooltip-inner\"></div>' + '</div>',\n  trigger: 'hover focus',\n  title: '',\n  delay: 0,\n  html: false,\n  selector: false,\n  placement: 'top',\n  offset: [0, 0],\n  container: false,\n  fallbackPlacements: ['top', 'right', 'bottom', 'left'],\n  boundary: 'clippingParents',\n  customClass: '',\n  sanitize: true,\n  sanitizeFn: null,\n  allowList: DefaultAllowlist,\n  popperConfig: null\n};\nconst Event$2 = {\n  HIDE: `hide${EVENT_KEY$4}`,\n  HIDDEN: `hidden${EVENT_KEY$4}`,\n  SHOW: `show${EVENT_KEY$4}`,\n  SHOWN: `shown${EVENT_KEY$4}`,\n  INSERTED: `inserted${EVENT_KEY$4}`,\n  CLICK: `click${EVENT_KEY$4}`,\n  FOCUSIN: `focusin${EVENT_KEY$4}`,\n  FOCUSOUT: `focusout${EVENT_KEY$4}`,\n  MOUSEENTER: `mouseenter${EVENT_KEY$4}`,\n  MOUSELEAVE: `mouseleave${EVENT_KEY$4}`\n};\nconst CLASS_NAME_FADE$3 = 'fade';\nconst CLASS_NAME_MODAL = 'modal';\nconst CLASS_NAME_SHOW$3 = 'show';\nconst HOVER_STATE_SHOW = 'show';\nconst HOVER_STATE_OUT = 'out';\nconst SELECTOR_TOOLTIP_INNER = '.tooltip-inner';\nconst TRIGGER_HOVER = 'hover';\nconst TRIGGER_FOCUS = 'focus';\nconst TRIGGER_CLICK = 'click';\nconst TRIGGER_MANUAL = 'manual';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Tooltip extends BaseComponent {\n  constructor(element, config) {\n    if (typeof Popper === 'undefined') {\n      throw new TypeError('Bootstrap\\'s tooltips require Popper (https://popper.js.org)');\n    }\n\n    super(element); // private\n\n    this._isEnabled = true;\n    this._timeout = 0;\n    this._hoverState = '';\n    this._activeTrigger = {};\n    this._popper = null; // Protected\n\n    this._config = this._getConfig(config);\n    this.tip = null;\n\n    this._setListeners();\n  } // Getters\n\n\n  static get Default() {\n    return Default$3;\n  }\n\n  static get NAME() {\n    return NAME$4;\n  }\n\n  static get Event() {\n    return Event$2;\n  }\n\n  static get DefaultType() {\n    return DefaultType$3;\n  } // Public\n\n\n  enable() {\n    this._isEnabled = true;\n  }\n\n  disable() {\n    this._isEnabled = false;\n  }\n\n  toggleEnabled() {\n    this._isEnabled = !this._isEnabled;\n  }\n\n  toggle(event) {\n    if (!this._isEnabled) {\n      return;\n    }\n\n    if (event) {\n      const context = this._initializeOnDelegatedTarget(event);\n\n      context._activeTrigger.click = !context._activeTrigger.click;\n\n      if (context._isWithActiveTrigger()) {\n        context._enter(null, context);\n      } else {\n        context._leave(null, context);\n      }\n    } else {\n      if (this.getTipElement().classList.contains(CLASS_NAME_SHOW$3)) {\n        this._leave(null, this);\n\n        return;\n      }\n\n      this._enter(null, this);\n    }\n  }\n\n  dispose() {\n    clearTimeout(this._timeout);\n    EventHandler.off(this._element.closest(`.${CLASS_NAME_MODAL}`), 'hide.bs.modal', this._hideModalHandler);\n\n    if (this.tip) {\n      this.tip.remove();\n    }\n\n    if (this._popper) {\n      this._popper.destroy();\n    }\n\n    super.dispose();\n  }\n\n  show() {\n    if (this._element.style.display === 'none') {\n      throw new Error('Please use show on visible elements');\n    }\n\n    if (!(this.isWithContent() && this._isEnabled)) {\n      return;\n    }\n\n    const showEvent = EventHandler.trigger(this._element, this.constructor.Event.SHOW);\n    const shadowRoot = findShadowRoot(this._element);\n    const isInTheDom = shadowRoot === null ? this._element.ownerDocument.documentElement.contains(this._element) : shadowRoot.contains(this._element);\n\n    if (showEvent.defaultPrevented || !isInTheDom) {\n      return;\n    }\n\n    const tip = this.getTipElement();\n    const tipId = getUID(this.constructor.NAME);\n    tip.setAttribute('id', tipId);\n\n    this._element.setAttribute('aria-describedby', tipId);\n\n    this.setContent();\n\n    if (this._config.animation) {\n      tip.classList.add(CLASS_NAME_FADE$3);\n    }\n\n    const placement = typeof this._config.placement === 'function' ? this._config.placement.call(this, tip, this._element) : this._config.placement;\n\n    const attachment = this._getAttachment(placement);\n\n    this._addAttachmentClass(attachment);\n\n    const {\n      container\n    } = this._config;\n    Data.set(tip, this.constructor.DATA_KEY, this);\n\n    if (!this._element.ownerDocument.documentElement.contains(this.tip)) {\n      container.appendChild(tip);\n      EventHandler.trigger(this._element, this.constructor.Event.INSERTED);\n    }\n\n    if (this._popper) {\n      this._popper.update();\n    } else {\n      this._popper = Popper.createPopper(this._element, tip, this._getPopperConfig(attachment));\n    }\n\n    tip.classList.add(CLASS_NAME_SHOW$3);\n    const customClass = typeof this._config.customClass === 'function' ? this._config.customClass() : this._config.customClass;\n\n    if (customClass) {\n      tip.classList.add(...customClass.split(' '));\n    } // If this is a touch-enabled device we add extra\n    // empty mouseover listeners to the body's immediate children;\n    // only needed because of broken event delegation on iOS\n    // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n\n\n    if ('ontouchstart' in document.documentElement) {\n      [].concat(...document.body.children).forEach(element => {\n        EventHandler.on(element, 'mouseover', noop);\n      });\n    }\n\n    const complete = () => {\n      const prevHoverState = this._hoverState;\n      this._hoverState = null;\n      EventHandler.trigger(this._element, this.constructor.Event.SHOWN);\n\n      if (prevHoverState === HOVER_STATE_OUT) {\n        this._leave(null, this);\n      }\n    };\n\n    const isAnimated = this.tip.classList.contains(CLASS_NAME_FADE$3);\n\n    this._queueCallback(complete, this.tip, isAnimated);\n  }\n\n  hide() {\n    if (!this._popper) {\n      return;\n    }\n\n    const tip = this.getTipElement();\n\n    const complete = () => {\n      if (this._isWithActiveTrigger()) {\n        return;\n      }\n\n      if (this._hoverState !== HOVER_STATE_SHOW) {\n        tip.remove();\n      }\n\n      this._cleanTipClass();\n\n      this._element.removeAttribute('aria-describedby');\n\n      EventHandler.trigger(this._element, this.constructor.Event.HIDDEN);\n\n      if (this._popper) {\n        this._popper.destroy();\n\n        this._popper = null;\n      }\n    };\n\n    const hideEvent = EventHandler.trigger(this._element, this.constructor.Event.HIDE);\n\n    if (hideEvent.defaultPrevented) {\n      return;\n    }\n\n    tip.classList.remove(CLASS_NAME_SHOW$3); // If this is a touch-enabled device we remove the extra\n    // empty mouseover listeners we added for iOS support\n\n    if ('ontouchstart' in document.documentElement) {\n      [].concat(...document.body.children).forEach(element => EventHandler.off(element, 'mouseover', noop));\n    }\n\n    this._activeTrigger[TRIGGER_CLICK] = false;\n    this._activeTrigger[TRIGGER_FOCUS] = false;\n    this._activeTrigger[TRIGGER_HOVER] = false;\n    const isAnimated = this.tip.classList.contains(CLASS_NAME_FADE$3);\n\n    this._queueCallback(complete, this.tip, isAnimated);\n\n    this._hoverState = '';\n  }\n\n  update() {\n    if (this._popper !== null) {\n      this._popper.update();\n    }\n  } // Protected\n\n\n  isWithContent() {\n    return Boolean(this.getTitle());\n  }\n\n  getTipElement() {\n    if (this.tip) {\n      return this.tip;\n    }\n\n    const element = document.createElement('div');\n    element.innerHTML = this._config.template;\n    this.tip = element.children[0];\n    return this.tip;\n  }\n\n  setContent() {\n    const tip = this.getTipElement();\n    this.setElementContent(SelectorEngine.findOne(SELECTOR_TOOLTIP_INNER, tip), this.getTitle());\n    tip.classList.remove(CLASS_NAME_FADE$3, CLASS_NAME_SHOW$3);\n  }\n\n  setElementContent(element, content) {\n    if (element === null) {\n      return;\n    }\n\n    if (isElement(content)) {\n      content = getElement(content); // content is a DOM node or a jQuery\n\n      if (this._config.html) {\n        if (content.parentNode !== element) {\n          element.innerHTML = '';\n          element.appendChild(content);\n        }\n      } else {\n        element.textContent = content.textContent;\n      }\n\n      return;\n    }\n\n    if (this._config.html) {\n      if (this._config.sanitize) {\n        content = sanitizeHtml(content, this._config.allowList, this._config.sanitizeFn);\n      }\n\n      element.innerHTML = content;\n    } else {\n      element.textContent = content;\n    }\n  }\n\n  getTitle() {\n    let title = this._element.getAttribute('data-bs-original-title');\n\n    if (!title) {\n      title = typeof this._config.title === 'function' ? this._config.title.call(this._element) : this._config.title;\n    }\n\n    return title;\n  }\n\n  updateAttachment(attachment) {\n    if (attachment === 'right') {\n      return 'end';\n    }\n\n    if (attachment === 'left') {\n      return 'start';\n    }\n\n    return attachment;\n  } // Private\n\n\n  _initializeOnDelegatedTarget(event, context) {\n    const dataKey = this.constructor.DATA_KEY;\n    context = context || Data.get(event.delegateTarget, dataKey);\n\n    if (!context) {\n      context = new this.constructor(event.delegateTarget, this._getDelegateConfig());\n      Data.set(event.delegateTarget, dataKey, context);\n    }\n\n    return context;\n  }\n\n  _getOffset() {\n    const {\n      offset\n    } = this._config;\n\n    if (typeof offset === 'string') {\n      return offset.split(',').map(val => Number.parseInt(val, 10));\n    }\n\n    if (typeof offset === 'function') {\n      return popperData => offset(popperData, this._element);\n    }\n\n    return offset;\n  }\n\n  _getPopperConfig(attachment) {\n    const defaultBsPopperConfig = {\n      placement: attachment,\n      modifiers: [{\n        name: 'flip',\n        options: {\n          fallbackPlacements: this._config.fallbackPlacements\n        }\n      }, {\n        name: 'offset',\n        options: {\n          offset: this._getOffset()\n        }\n      }, {\n        name: 'preventOverflow',\n        options: {\n          boundary: this._config.boundary\n        }\n      }, {\n        name: 'arrow',\n        options: {\n          element: `.${this.constructor.NAME}-arrow`\n        }\n      }, {\n        name: 'onChange',\n        enabled: true,\n        phase: 'afterWrite',\n        fn: data => this._handlePopperPlacementChange(data)\n      }],\n      onFirstUpdate: data => {\n        if (data.options.placement !== data.placement) {\n          this._handlePopperPlacementChange(data);\n        }\n      }\n    };\n    return { ...defaultBsPopperConfig,\n      ...(typeof this._config.popperConfig === 'function' ? this._config.popperConfig(defaultBsPopperConfig) : this._config.popperConfig)\n    };\n  }\n\n  _addAttachmentClass(attachment) {\n    this.getTipElement().classList.add(`${CLASS_PREFIX$1}-${this.updateAttachment(attachment)}`);\n  }\n\n  _getAttachment(placement) {\n    return AttachmentMap[placement.toUpperCase()];\n  }\n\n  _setListeners() {\n    const triggers = this._config.trigger.split(' ');\n\n    triggers.forEach(trigger => {\n      if (trigger === 'click') {\n        EventHandler.on(this._element, this.constructor.Event.CLICK, this._config.selector, event => this.toggle(event));\n      } else if (trigger !== TRIGGER_MANUAL) {\n        const eventIn = trigger === TRIGGER_HOVER ? this.constructor.Event.MOUSEENTER : this.constructor.Event.FOCUSIN;\n        const eventOut = trigger === TRIGGER_HOVER ? this.constructor.Event.MOUSELEAVE : this.constructor.Event.FOCUSOUT;\n        EventHandler.on(this._element, eventIn, this._config.selector, event => this._enter(event));\n        EventHandler.on(this._element, eventOut, this._config.selector, event => this._leave(event));\n      }\n    });\n\n    this._hideModalHandler = () => {\n      if (this._element) {\n        this.hide();\n      }\n    };\n\n    EventHandler.on(this._element.closest(`.${CLASS_NAME_MODAL}`), 'hide.bs.modal', this._hideModalHandler);\n\n    if (this._config.selector) {\n      this._config = { ...this._config,\n        trigger: 'manual',\n        selector: ''\n      };\n    } else {\n      this._fixTitle();\n    }\n  }\n\n  _fixTitle() {\n    const title = this._element.getAttribute('title');\n\n    const originalTitleType = typeof this._element.getAttribute('data-bs-original-title');\n\n    if (title || originalTitleType !== 'string') {\n      this._element.setAttribute('data-bs-original-title', title || '');\n\n      if (title && !this._element.getAttribute('aria-label') && !this._element.textContent) {\n        this._element.setAttribute('aria-label', title);\n      }\n\n      this._element.setAttribute('title', '');\n    }\n  }\n\n  _enter(event, context) {\n    context = this._initializeOnDelegatedTarget(event, context);\n\n    if (event) {\n      context._activeTrigger[event.type === 'focusin' ? TRIGGER_FOCUS : TRIGGER_HOVER] = true;\n    }\n\n    if (context.getTipElement().classList.contains(CLASS_NAME_SHOW$3) || context._hoverState === HOVER_STATE_SHOW) {\n      context._hoverState = HOVER_STATE_SHOW;\n      return;\n    }\n\n    clearTimeout(context._timeout);\n    context._hoverState = HOVER_STATE_SHOW;\n\n    if (!context._config.delay || !context._config.delay.show) {\n      context.show();\n      return;\n    }\n\n    context._timeout = setTimeout(() => {\n      if (context._hoverState === HOVER_STATE_SHOW) {\n        context.show();\n      }\n    }, context._config.delay.show);\n  }\n\n  _leave(event, context) {\n    context = this._initializeOnDelegatedTarget(event, context);\n\n    if (event) {\n      context._activeTrigger[event.type === 'focusout' ? TRIGGER_FOCUS : TRIGGER_HOVER] = context._element.contains(event.relatedTarget);\n    }\n\n    if (context._isWithActiveTrigger()) {\n      return;\n    }\n\n    clearTimeout(context._timeout);\n    context._hoverState = HOVER_STATE_OUT;\n\n    if (!context._config.delay || !context._config.delay.hide) {\n      context.hide();\n      return;\n    }\n\n    context._timeout = setTimeout(() => {\n      if (context._hoverState === HOVER_STATE_OUT) {\n        context.hide();\n      }\n    }, context._config.delay.hide);\n  }\n\n  _isWithActiveTrigger() {\n    for (const trigger in this._activeTrigger) {\n      if (this._activeTrigger[trigger]) {\n        return true;\n      }\n    }\n\n    return false;\n  }\n\n  _getConfig(config) {\n    const dataAttributes = Manipulator.getDataAttributes(this._element);\n    Object.keys(dataAttributes).forEach(dataAttr => {\n      if (DISALLOWED_ATTRIBUTES.has(dataAttr)) {\n        delete dataAttributes[dataAttr];\n      }\n    });\n    config = { ...this.constructor.Default,\n      ...dataAttributes,\n      ...(typeof config === 'object' && config ? config : {})\n    };\n    config.container = config.container === false ? document.body : getElement(config.container);\n\n    if (typeof config.delay === 'number') {\n      config.delay = {\n        show: config.delay,\n        hide: config.delay\n      };\n    }\n\n    if (typeof config.title === 'number') {\n      config.title = config.title.toString();\n    }\n\n    if (typeof config.content === 'number') {\n      config.content = config.content.toString();\n    }\n\n    typeCheckConfig(NAME$4, config, this.constructor.DefaultType);\n\n    if (config.sanitize) {\n      config.template = sanitizeHtml(config.template, config.allowList, config.sanitizeFn);\n    }\n\n    return config;\n  }\n\n  _getDelegateConfig() {\n    const config = {};\n\n    if (this._config) {\n      for (const key in this._config) {\n        if (this.constructor.Default[key] !== this._config[key]) {\n          config[key] = this._config[key];\n        }\n      }\n    }\n\n    return config;\n  }\n\n  _cleanTipClass() {\n    const tip = this.getTipElement();\n    const tabClass = tip.getAttribute('class').match(BSCLS_PREFIX_REGEX$1);\n\n    if (tabClass !== null && tabClass.length > 0) {\n      tabClass.map(token => token.trim()).forEach(tClass => tip.classList.remove(tClass));\n    }\n  }\n\n  _handlePopperPlacementChange(popperData) {\n    const {\n      state\n    } = popperData;\n\n    if (!state) {\n      return;\n    }\n\n    this.tip = state.elements.popper;\n\n    this._cleanTipClass();\n\n    this._addAttachmentClass(this._getAttachment(state.placement));\n  } // Static\n\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Tooltip.getOrCreateInstance(this, config);\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config]();\n      }\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Tooltip to jQuery only if jQuery is present\n */\n\n\ndefineJQueryPlugin(Tooltip);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): popover.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$3 = 'popover';\nconst DATA_KEY$3 = 'bs.popover';\nconst EVENT_KEY$3 = `.${DATA_KEY$3}`;\nconst CLASS_PREFIX = 'bs-popover';\nconst BSCLS_PREFIX_REGEX = new RegExp(`(^|\\\\s)${CLASS_PREFIX}\\\\S+`, 'g');\nconst Default$2 = { ...Tooltip.Default,\n  placement: 'right',\n  offset: [0, 8],\n  trigger: 'click',\n  content: '',\n  template: '<div class=\"popover\" role=\"tooltip\">' + '<div class=\"popover-arrow\"></div>' + '<h3 class=\"popover-header\"></h3>' + '<div class=\"popover-body\"></div>' + '</div>'\n};\nconst DefaultType$2 = { ...Tooltip.DefaultType,\n  content: '(string|element|function)'\n};\nconst Event$1 = {\n  HIDE: `hide${EVENT_KEY$3}`,\n  HIDDEN: `hidden${EVENT_KEY$3}`,\n  SHOW: `show${EVENT_KEY$3}`,\n  SHOWN: `shown${EVENT_KEY$3}`,\n  INSERTED: `inserted${EVENT_KEY$3}`,\n  CLICK: `click${EVENT_KEY$3}`,\n  FOCUSIN: `focusin${EVENT_KEY$3}`,\n  FOCUSOUT: `focusout${EVENT_KEY$3}`,\n  MOUSEENTER: `mouseenter${EVENT_KEY$3}`,\n  MOUSELEAVE: `mouseleave${EVENT_KEY$3}`\n};\nconst CLASS_NAME_FADE$2 = 'fade';\nconst CLASS_NAME_SHOW$2 = 'show';\nconst SELECTOR_TITLE = '.popover-header';\nconst SELECTOR_CONTENT = '.popover-body';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Popover extends Tooltip {\n  // Getters\n  static get Default() {\n    return Default$2;\n  }\n\n  static get NAME() {\n    return NAME$3;\n  }\n\n  static get Event() {\n    return Event$1;\n  }\n\n  static get DefaultType() {\n    return DefaultType$2;\n  } // Overrides\n\n\n  isWithContent() {\n    return this.getTitle() || this._getContent();\n  }\n\n  getTipElement() {\n    if (this.tip) {\n      return this.tip;\n    }\n\n    this.tip = super.getTipElement();\n\n    if (!this.getTitle()) {\n      SelectorEngine.findOne(SELECTOR_TITLE, this.tip).remove();\n    }\n\n    if (!this._getContent()) {\n      SelectorEngine.findOne(SELECTOR_CONTENT, this.tip).remove();\n    }\n\n    return this.tip;\n  }\n\n  setContent() {\n    const tip = this.getTipElement(); // we use append for html objects to maintain js events\n\n    this.setElementContent(SelectorEngine.findOne(SELECTOR_TITLE, tip), this.getTitle());\n\n    let content = this._getContent();\n\n    if (typeof content === 'function') {\n      content = content.call(this._element);\n    }\n\n    this.setElementContent(SelectorEngine.findOne(SELECTOR_CONTENT, tip), content);\n    tip.classList.remove(CLASS_NAME_FADE$2, CLASS_NAME_SHOW$2);\n  } // Private\n\n\n  _addAttachmentClass(attachment) {\n    this.getTipElement().classList.add(`${CLASS_PREFIX}-${this.updateAttachment(attachment)}`);\n  }\n\n  _getContent() {\n    return this._element.getAttribute('data-bs-content') || this._config.content;\n  }\n\n  _cleanTipClass() {\n    const tip = this.getTipElement();\n    const tabClass = tip.getAttribute('class').match(BSCLS_PREFIX_REGEX);\n\n    if (tabClass !== null && tabClass.length > 0) {\n      tabClass.map(token => token.trim()).forEach(tClass => tip.classList.remove(tClass));\n    }\n  } // Static\n\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Popover.getOrCreateInstance(this, config);\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config]();\n      }\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Popover to jQuery only if jQuery is present\n */\n\n\ndefineJQueryPlugin(Popover);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): scrollspy.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$2 = 'scrollspy';\nconst DATA_KEY$2 = 'bs.scrollspy';\nconst EVENT_KEY$2 = `.${DATA_KEY$2}`;\nconst DATA_API_KEY$1 = '.data-api';\nconst Default$1 = {\n  offset: 10,\n  method: 'auto',\n  target: ''\n};\nconst DefaultType$1 = {\n  offset: 'number',\n  method: 'string',\n  target: '(string|element)'\n};\nconst EVENT_ACTIVATE = `activate${EVENT_KEY$2}`;\nconst EVENT_SCROLL = `scroll${EVENT_KEY$2}`;\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY$2}${DATA_API_KEY$1}`;\nconst CLASS_NAME_DROPDOWN_ITEM = 'dropdown-item';\nconst CLASS_NAME_ACTIVE$1 = 'active';\nconst SELECTOR_DATA_SPY = '[data-bs-spy=\"scroll\"]';\nconst SELECTOR_NAV_LIST_GROUP$1 = '.nav, .list-group';\nconst SELECTOR_NAV_LINKS = '.nav-link';\nconst SELECTOR_NAV_ITEMS = '.nav-item';\nconst SELECTOR_LIST_ITEMS = '.list-group-item';\nconst SELECTOR_DROPDOWN$1 = '.dropdown';\nconst SELECTOR_DROPDOWN_TOGGLE$1 = '.dropdown-toggle';\nconst METHOD_OFFSET = 'offset';\nconst METHOD_POSITION = 'position';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass ScrollSpy extends BaseComponent {\n  constructor(element, config) {\n    super(element);\n    this._scrollElement = this._element.tagName === 'BODY' ? window : this._element;\n    this._config = this._getConfig(config);\n    this._selector = `${this._config.target} ${SELECTOR_NAV_LINKS}, ${this._config.target} ${SELECTOR_LIST_ITEMS}, ${this._config.target} .${CLASS_NAME_DROPDOWN_ITEM}`;\n    this._offsets = [];\n    this._targets = [];\n    this._activeTarget = null;\n    this._scrollHeight = 0;\n    EventHandler.on(this._scrollElement, EVENT_SCROLL, () => this._process());\n    this.refresh();\n\n    this._process();\n  } // Getters\n\n\n  static get Default() {\n    return Default$1;\n  }\n\n  static get NAME() {\n    return NAME$2;\n  } // Public\n\n\n  refresh() {\n    const autoMethod = this._scrollElement === this._scrollElement.window ? METHOD_OFFSET : METHOD_POSITION;\n    const offsetMethod = this._config.method === 'auto' ? autoMethod : this._config.method;\n    const offsetBase = offsetMethod === METHOD_POSITION ? this._getScrollTop() : 0;\n    this._offsets = [];\n    this._targets = [];\n    this._scrollHeight = this._getScrollHeight();\n    const targets = SelectorEngine.find(this._selector);\n    targets.map(element => {\n      const targetSelector = getSelectorFromElement(element);\n      const target = targetSelector ? SelectorEngine.findOne(targetSelector) : null;\n\n      if (target) {\n        const targetBCR = target.getBoundingClientRect();\n\n        if (targetBCR.width || targetBCR.height) {\n          return [Manipulator[offsetMethod](target).top + offsetBase, targetSelector];\n        }\n      }\n\n      return null;\n    }).filter(item => item).sort((a, b) => a[0] - b[0]).forEach(item => {\n      this._offsets.push(item[0]);\n\n      this._targets.push(item[1]);\n    });\n  }\n\n  dispose() {\n    EventHandler.off(this._scrollElement, EVENT_KEY$2);\n    super.dispose();\n  } // Private\n\n\n  _getConfig(config) {\n    config = { ...Default$1,\n      ...Manipulator.getDataAttributes(this._element),\n      ...(typeof config === 'object' && config ? config : {})\n    };\n\n    if (typeof config.target !== 'string' && isElement(config.target)) {\n      let {\n        id\n      } = config.target;\n\n      if (!id) {\n        id = getUID(NAME$2);\n        config.target.id = id;\n      }\n\n      config.target = `#${id}`;\n    }\n\n    typeCheckConfig(NAME$2, config, DefaultType$1);\n    return config;\n  }\n\n  _getScrollTop() {\n    return this._scrollElement === window ? this._scrollElement.pageYOffset : this._scrollElement.scrollTop;\n  }\n\n  _getScrollHeight() {\n    return this._scrollElement.scrollHeight || Math.max(document.body.scrollHeight, document.documentElement.scrollHeight);\n  }\n\n  _getOffsetHeight() {\n    return this._scrollElement === window ? window.innerHeight : this._scrollElement.getBoundingClientRect().height;\n  }\n\n  _process() {\n    const scrollTop = this._getScrollTop() + this._config.offset;\n\n    const scrollHeight = this._getScrollHeight();\n\n    const maxScroll = this._config.offset + scrollHeight - this._getOffsetHeight();\n\n    if (this._scrollHeight !== scrollHeight) {\n      this.refresh();\n    }\n\n    if (scrollTop >= maxScroll) {\n      const target = this._targets[this._targets.length - 1];\n\n      if (this._activeTarget !== target) {\n        this._activate(target);\n      }\n\n      return;\n    }\n\n    if (this._activeTarget && scrollTop < this._offsets[0] && this._offsets[0] > 0) {\n      this._activeTarget = null;\n\n      this._clear();\n\n      return;\n    }\n\n    for (let i = this._offsets.length; i--;) {\n      const isActiveTarget = this._activeTarget !== this._targets[i] && scrollTop >= this._offsets[i] && (typeof this._offsets[i + 1] === 'undefined' || scrollTop < this._offsets[i + 1]);\n\n      if (isActiveTarget) {\n        this._activate(this._targets[i]);\n      }\n    }\n  }\n\n  _activate(target) {\n    this._activeTarget = target;\n\n    this._clear();\n\n    const queries = this._selector.split(',').map(selector => `${selector}[data-bs-target=\"${target}\"],${selector}[href=\"${target}\"]`);\n\n    const link = SelectorEngine.findOne(queries.join(','));\n\n    if (link.classList.contains(CLASS_NAME_DROPDOWN_ITEM)) {\n      SelectorEngine.findOne(SELECTOR_DROPDOWN_TOGGLE$1, link.closest(SELECTOR_DROPDOWN$1)).classList.add(CLASS_NAME_ACTIVE$1);\n      link.classList.add(CLASS_NAME_ACTIVE$1);\n    } else {\n      // Set triggered link as active\n      link.classList.add(CLASS_NAME_ACTIVE$1);\n      SelectorEngine.parents(link, SELECTOR_NAV_LIST_GROUP$1).forEach(listGroup => {\n        // Set triggered links parents as active\n        // With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor\n        SelectorEngine.prev(listGroup, `${SELECTOR_NAV_LINKS}, ${SELECTOR_LIST_ITEMS}`).forEach(item => item.classList.add(CLASS_NAME_ACTIVE$1)); // Handle special case when .nav-link is inside .nav-item\n\n        SelectorEngine.prev(listGroup, SELECTOR_NAV_ITEMS).forEach(navItem => {\n          SelectorEngine.children(navItem, SELECTOR_NAV_LINKS).forEach(item => item.classList.add(CLASS_NAME_ACTIVE$1));\n        });\n      });\n    }\n\n    EventHandler.trigger(this._scrollElement, EVENT_ACTIVATE, {\n      relatedTarget: target\n    });\n  }\n\n  _clear() {\n    SelectorEngine.find(this._selector).filter(node => node.classList.contains(CLASS_NAME_ACTIVE$1)).forEach(node => node.classList.remove(CLASS_NAME_ACTIVE$1));\n  } // Static\n\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = ScrollSpy.getOrCreateInstance(this, config);\n\n      if (typeof config !== 'string') {\n        return;\n      }\n\n      if (typeof data[config] === 'undefined') {\n        throw new TypeError(`No method named \"${config}\"`);\n      }\n\n      data[config]();\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n  SelectorEngine.find(SELECTOR_DATA_SPY).forEach(spy => new ScrollSpy(spy));\n});\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .ScrollSpy to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(ScrollSpy);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): tab.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$1 = 'tab';\nconst DATA_KEY$1 = 'bs.tab';\nconst EVENT_KEY$1 = `.${DATA_KEY$1}`;\nconst DATA_API_KEY = '.data-api';\nconst EVENT_HIDE$1 = `hide${EVENT_KEY$1}`;\nconst EVENT_HIDDEN$1 = `hidden${EVENT_KEY$1}`;\nconst EVENT_SHOW$1 = `show${EVENT_KEY$1}`;\nconst EVENT_SHOWN$1 = `shown${EVENT_KEY$1}`;\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY$1}${DATA_API_KEY}`;\nconst CLASS_NAME_DROPDOWN_MENU = 'dropdown-menu';\nconst CLASS_NAME_ACTIVE = 'active';\nconst CLASS_NAME_FADE$1 = 'fade';\nconst CLASS_NAME_SHOW$1 = 'show';\nconst SELECTOR_DROPDOWN = '.dropdown';\nconst SELECTOR_NAV_LIST_GROUP = '.nav, .list-group';\nconst SELECTOR_ACTIVE = '.active';\nconst SELECTOR_ACTIVE_UL = ':scope > li > .active';\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"tab\"], [data-bs-toggle=\"pill\"], [data-bs-toggle=\"list\"]';\nconst SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle';\nconst SELECTOR_DROPDOWN_ACTIVE_CHILD = ':scope > .dropdown-menu .active';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Tab extends BaseComponent {\n  // Getters\n  static get NAME() {\n    return NAME$1;\n  } // Public\n\n\n  show() {\n    if (this._element.parentNode && this._element.parentNode.nodeType === Node.ELEMENT_NODE && this._element.classList.contains(CLASS_NAME_ACTIVE)) {\n      return;\n    }\n\n    let previous;\n    const target = getElementFromSelector(this._element);\n\n    const listElement = this._element.closest(SELECTOR_NAV_LIST_GROUP);\n\n    if (listElement) {\n      const itemSelector = listElement.nodeName === 'UL' || listElement.nodeName === 'OL' ? SELECTOR_ACTIVE_UL : SELECTOR_ACTIVE;\n      previous = SelectorEngine.find(itemSelector, listElement);\n      previous = previous[previous.length - 1];\n    }\n\n    const hideEvent = previous ? EventHandler.trigger(previous, EVENT_HIDE$1, {\n      relatedTarget: this._element\n    }) : null;\n    const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$1, {\n      relatedTarget: previous\n    });\n\n    if (showEvent.defaultPrevented || hideEvent !== null && hideEvent.defaultPrevented) {\n      return;\n    }\n\n    this._activate(this._element, listElement);\n\n    const complete = () => {\n      EventHandler.trigger(previous, EVENT_HIDDEN$1, {\n        relatedTarget: this._element\n      });\n      EventHandler.trigger(this._element, EVENT_SHOWN$1, {\n        relatedTarget: previous\n      });\n    };\n\n    if (target) {\n      this._activate(target, target.parentNode, complete);\n    } else {\n      complete();\n    }\n  } // Private\n\n\n  _activate(element, container, callback) {\n    const activeElements = container && (container.nodeName === 'UL' || container.nodeName === 'OL') ? SelectorEngine.find(SELECTOR_ACTIVE_UL, container) : SelectorEngine.children(container, SELECTOR_ACTIVE);\n    const active = activeElements[0];\n    const isTransitioning = callback && active && active.classList.contains(CLASS_NAME_FADE$1);\n\n    const complete = () => this._transitionComplete(element, active, callback);\n\n    if (active && isTransitioning) {\n      active.classList.remove(CLASS_NAME_SHOW$1);\n\n      this._queueCallback(complete, element, true);\n    } else {\n      complete();\n    }\n  }\n\n  _transitionComplete(element, active, callback) {\n    if (active) {\n      active.classList.remove(CLASS_NAME_ACTIVE);\n      const dropdownChild = SelectorEngine.findOne(SELECTOR_DROPDOWN_ACTIVE_CHILD, active.parentNode);\n\n      if (dropdownChild) {\n        dropdownChild.classList.remove(CLASS_NAME_ACTIVE);\n      }\n\n      if (active.getAttribute('role') === 'tab') {\n        active.setAttribute('aria-selected', false);\n      }\n    }\n\n    element.classList.add(CLASS_NAME_ACTIVE);\n\n    if (element.getAttribute('role') === 'tab') {\n      element.setAttribute('aria-selected', true);\n    }\n\n    reflow(element);\n\n    if (element.classList.contains(CLASS_NAME_FADE$1)) {\n      element.classList.add(CLASS_NAME_SHOW$1);\n    }\n\n    let parent = element.parentNode;\n\n    if (parent && parent.nodeName === 'LI') {\n      parent = parent.parentNode;\n    }\n\n    if (parent && parent.classList.contains(CLASS_NAME_DROPDOWN_MENU)) {\n      const dropdownElement = element.closest(SELECTOR_DROPDOWN);\n\n      if (dropdownElement) {\n        SelectorEngine.find(SELECTOR_DROPDOWN_TOGGLE, dropdownElement).forEach(dropdown => dropdown.classList.add(CLASS_NAME_ACTIVE));\n      }\n\n      element.setAttribute('aria-expanded', true);\n    }\n\n    if (callback) {\n      callback();\n    }\n  } // Static\n\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Tab.getOrCreateInstance(this);\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config]();\n      }\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n  if (['A', 'AREA'].includes(this.tagName)) {\n    event.preventDefault();\n  }\n\n  if (isDisabled(this)) {\n    return;\n  }\n\n  const data = Tab.getOrCreateInstance(this);\n  data.show();\n});\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Tab to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Tab);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): toast.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'toast';\nconst DATA_KEY = 'bs.toast';\nconst EVENT_KEY = `.${DATA_KEY}`;\nconst EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY}`;\nconst EVENT_MOUSEOVER = `mouseover${EVENT_KEY}`;\nconst EVENT_MOUSEOUT = `mouseout${EVENT_KEY}`;\nconst EVENT_FOCUSIN = `focusin${EVENT_KEY}`;\nconst EVENT_FOCUSOUT = `focusout${EVENT_KEY}`;\nconst EVENT_HIDE = `hide${EVENT_KEY}`;\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`;\nconst EVENT_SHOW = `show${EVENT_KEY}`;\nconst EVENT_SHOWN = `shown${EVENT_KEY}`;\nconst CLASS_NAME_FADE = 'fade';\nconst CLASS_NAME_HIDE = 'hide';\nconst CLASS_NAME_SHOW = 'show';\nconst CLASS_NAME_SHOWING = 'showing';\nconst DefaultType = {\n  animation: 'boolean',\n  autohide: 'boolean',\n  delay: 'number'\n};\nconst Default = {\n  animation: true,\n  autohide: true,\n  delay: 5000\n};\nconst SELECTOR_DATA_DISMISS = '[data-bs-dismiss=\"toast\"]';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Toast extends BaseComponent {\n  constructor(element, config) {\n    super(element);\n    this._config = this._getConfig(config);\n    this._timeout = null;\n    this._hasMouseInteraction = false;\n    this._hasKeyboardInteraction = false;\n\n    this._setListeners();\n  } // Getters\n\n\n  static get DefaultType() {\n    return DefaultType;\n  }\n\n  static get Default() {\n    return Default;\n  }\n\n  static get NAME() {\n    return NAME;\n  } // Public\n\n\n  show() {\n    const showEvent = EventHandler.trigger(this._element, EVENT_SHOW);\n\n    if (showEvent.defaultPrevented) {\n      return;\n    }\n\n    this._clearTimeout();\n\n    if (this._config.animation) {\n      this._element.classList.add(CLASS_NAME_FADE);\n    }\n\n    const complete = () => {\n      this._element.classList.remove(CLASS_NAME_SHOWING);\n\n      this._element.classList.add(CLASS_NAME_SHOW);\n\n      EventHandler.trigger(this._element, EVENT_SHOWN);\n\n      this._maybeScheduleHide();\n    };\n\n    this._element.classList.remove(CLASS_NAME_HIDE);\n\n    reflow(this._element);\n\n    this._element.classList.add(CLASS_NAME_SHOWING);\n\n    this._queueCallback(complete, this._element, this._config.animation);\n  }\n\n  hide() {\n    if (!this._element.classList.contains(CLASS_NAME_SHOW)) {\n      return;\n    }\n\n    const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE);\n\n    if (hideEvent.defaultPrevented) {\n      return;\n    }\n\n    const complete = () => {\n      this._element.classList.add(CLASS_NAME_HIDE);\n\n      EventHandler.trigger(this._element, EVENT_HIDDEN);\n    };\n\n    this._element.classList.remove(CLASS_NAME_SHOW);\n\n    this._queueCallback(complete, this._element, this._config.animation);\n  }\n\n  dispose() {\n    this._clearTimeout();\n\n    if (this._element.classList.contains(CLASS_NAME_SHOW)) {\n      this._element.classList.remove(CLASS_NAME_SHOW);\n    }\n\n    super.dispose();\n  } // Private\n\n\n  _getConfig(config) {\n    config = { ...Default,\n      ...Manipulator.getDataAttributes(this._element),\n      ...(typeof config === 'object' && config ? config : {})\n    };\n    typeCheckConfig(NAME, config, this.constructor.DefaultType);\n    return config;\n  }\n\n  _maybeScheduleHide() {\n    if (!this._config.autohide) {\n      return;\n    }\n\n    if (this._hasMouseInteraction || this._hasKeyboardInteraction) {\n      return;\n    }\n\n    this._timeout = setTimeout(() => {\n      this.hide();\n    }, this._config.delay);\n  }\n\n  _onInteraction(event, isInteracting) {\n    switch (event.type) {\n      case 'mouseover':\n      case 'mouseout':\n        this._hasMouseInteraction = isInteracting;\n        break;\n\n      case 'focusin':\n      case 'focusout':\n        this._hasKeyboardInteraction = isInteracting;\n        break;\n    }\n\n    if (isInteracting) {\n      this._clearTimeout();\n\n      return;\n    }\n\n    const nextElement = event.relatedTarget;\n\n    if (this._element === nextElement || this._element.contains(nextElement)) {\n      return;\n    }\n\n    this._maybeScheduleHide();\n  }\n\n  _setListeners() {\n    EventHandler.on(this._element, EVENT_CLICK_DISMISS, SELECTOR_DATA_DISMISS, () => this.hide());\n    EventHandler.on(this._element, EVENT_MOUSEOVER, event => this._onInteraction(event, true));\n    EventHandler.on(this._element, EVENT_MOUSEOUT, event => this._onInteraction(event, false));\n    EventHandler.on(this._element, EVENT_FOCUSIN, event => this._onInteraction(event, true));\n    EventHandler.on(this._element, EVENT_FOCUSOUT, event => this._onInteraction(event, false));\n  }\n\n  _clearTimeout() {\n    clearTimeout(this._timeout);\n    this._timeout = null;\n  } // Static\n\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Toast.getOrCreateInstance(this, config);\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config](this);\n      }\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Toast to jQuery only if jQuery is present\n */\n\n\ndefineJQueryPlugin(Toast);\n\nexport { Alert, Button, Carousel, Collapse, Dropdown, Modal, Offcanvas, Popover, ScrollSpy, Tab, Toast, Tooltip };\n//# sourceMappingURL=bootstrap.esm.js.map\n"
  },
  {
    "path": "src/sourceDev.WebApp/SharedThemes/cerulean/wwwroot/js/jquery.js",
    "content": "/*!\n * jQuery JavaScript Library v3.7.0\n * https://jquery.com/\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license\n * https://jquery.org/license\n *\n * Date: 2023-05-11T18:29Z\n */\n(function (global, factory) {\n\n\t\"use strict\";\n\n\tif (typeof module === \"object\" && typeof module.exports === \"object\") {\n\n\t\t// For CommonJS and CommonJS-like environments where a proper `window`\n\t\t// is present, execute the factory and get jQuery.\n\t\t// For environments that do not have a `window` with a `document`\n\t\t// (such as Node.js), expose a factory as module.exports.\n\t\t// This accentuates the need for the creation of a real `window`.\n\t\t// e.g. var jQuery = require(\"jquery\")(window);\n\t\t// See ticket trac-14549 for more info.\n\t\tmodule.exports = global.document ?\n\t\t\tfactory(global, true) :\n\t\t\tfunction (w) {\n\t\t\t\tif (!w.document) {\n\t\t\t\t\tthrow new Error(\"jQuery requires a window with a document\");\n\t\t\t\t}\n\t\t\t\treturn factory(w);\n\t\t\t};\n\t} else {\n\t\tfactory(global);\n\t}\n\n\t// Pass this if window is not defined yet\n})(typeof window !== \"undefined\" ? window : this, function (window, noGlobal) {\n\n\t// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1\n\t// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode\n\t// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common\n\t// enough that all such attempts are guarded in a try block.\n\t\"use strict\";\n\n\tvar arr = [];\n\n\tvar getProto = Object.getPrototypeOf;\n\n\tvar slice = arr.slice;\n\n\tvar flat = arr.flat ? function (array) {\n\t\treturn arr.flat.call(array);\n\t} : function (array) {\n\t\treturn arr.concat.apply([], array);\n\t};\n\n\n\tvar push = arr.push;\n\n\tvar indexOf = arr.indexOf;\n\n\tvar class2type = {};\n\n\tvar toString = class2type.toString;\n\n\tvar hasOwn = class2type.hasOwnProperty;\n\n\tvar fnToString = hasOwn.toString;\n\n\tvar ObjectFunctionString = fnToString.call(Object);\n\n\tvar support = {};\n\n\tvar isFunction = function isFunction(obj) {\n\n\t\t// Support: Chrome <=57, Firefox <=52\n\t\t// In some browsers, typeof returns \"function\" for HTML <object> elements\n\t\t// (i.e., `typeof document.createElement( \"object\" ) === \"function\"`).\n\t\t// We don't want to classify *any* DOM node as a function.\n\t\t// Support: QtWeb <=3.8.5, WebKit <=534.34, wkhtmltopdf tool <=0.12.5\n\t\t// Plus for old WebKit, typeof returns \"function\" for HTML collections\n\t\t// (e.g., `typeof document.getElementsByTagName(\"div\") === \"function\"`). (gh-4756)\n\t\treturn typeof obj === \"function\" && typeof obj.nodeType !== \"number\" &&\n\t\t\ttypeof obj.item !== \"function\";\n\t};\n\n\n\tvar isWindow = function isWindow(obj) {\n\t\treturn obj != null && obj === obj.window;\n\t};\n\n\n\tvar document = window.document;\n\n\n\n\tvar preservedScriptAttributes = {\n\t\ttype: true,\n\t\tsrc: true,\n\t\tnonce: true,\n\t\tnoModule: true\n\t};\n\n\tfunction DOMEval(code, node, doc) {\n\t\tdoc = doc || document;\n\n\t\tvar i, val,\n\t\t\tscript = doc.createElement(\"script\");\n\n\t\tscript.text = code;\n\t\tif (node) {\n\t\t\tfor (i in preservedScriptAttributes) {\n\n\t\t\t\t// Support: Firefox 64+, Edge 18+\n\t\t\t\t// Some browsers don't support the \"nonce\" property on scripts.\n\t\t\t\t// On the other hand, just using `getAttribute` is not enough as\n\t\t\t\t// the `nonce` attribute is reset to an empty string whenever it\n\t\t\t\t// becomes browsing-context connected.\n\t\t\t\t// See https://github.com/whatwg/html/issues/2369\n\t\t\t\t// See https://html.spec.whatwg.org/#nonce-attributes\n\t\t\t\t// The `node.getAttribute` check was added for the sake of\n\t\t\t\t// `jQuery.globalEval` so that it can fake a nonce-containing node\n\t\t\t\t// via an object.\n\t\t\t\tval = node[i] || node.getAttribute && node.getAttribute(i);\n\t\t\t\tif (val) {\n\t\t\t\t\tscript.setAttribute(i, val);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tdoc.head.appendChild(script).parentNode.removeChild(script);\n\t}\n\n\n\tfunction toType(obj) {\n\t\tif (obj == null) {\n\t\t\treturn obj + \"\";\n\t\t}\n\n\t\t// Support: Android <=2.3 only (functionish RegExp)\n\t\treturn typeof obj === \"object\" || typeof obj === \"function\" ?\n\t\t\tclass2type[toString.call(obj)] || \"object\" :\n\t\t\ttypeof obj;\n\t}\n\t/* global Symbol */\n\t// Defining this global in .eslintrc.json would create a danger of using the global\n\t// unguarded in another place, it seems safer to define global only for this module\n\n\n\n\tvar version = \"3.7.0\",\n\n\t\trhtmlSuffix = /HTML$/i,\n\n\t\t// Define a local copy of jQuery\n\t\tjQuery = function (selector, context) {\n\n\t\t\t// The jQuery object is actually just the init constructor 'enhanced'\n\t\t\t// Need init if jQuery is called (just allow error to be thrown if not included)\n\t\t\treturn new jQuery.fn.init(selector, context);\n\t\t};\n\n\tjQuery.fn = jQuery.prototype = {\n\n\t\t// The current version of jQuery being used\n\t\tjquery: version,\n\n\t\tconstructor: jQuery,\n\n\t\t// The default length of a jQuery object is 0\n\t\tlength: 0,\n\n\t\ttoArray: function () {\n\t\t\treturn slice.call(this);\n\t\t},\n\n\t\t// Get the Nth element in the matched element set OR\n\t\t// Get the whole matched element set as a clean array\n\t\tget: function (num) {\n\n\t\t\t// Return all the elements in a clean array\n\t\t\tif (num == null) {\n\t\t\t\treturn slice.call(this);\n\t\t\t}\n\n\t\t\t// Return just the one element from the set\n\t\t\treturn num < 0 ? this[num + this.length] : this[num];\n\t\t},\n\n\t\t// Take an array of elements and push it onto the stack\n\t\t// (returning the new matched element set)\n\t\tpushStack: function (elems) {\n\n\t\t\t// Build a new jQuery matched element set\n\t\t\tvar ret = jQuery.merge(this.constructor(), elems);\n\n\t\t\t// Add the old object onto the stack (as a reference)\n\t\t\tret.prevObject = this;\n\n\t\t\t// Return the newly-formed element set\n\t\t\treturn ret;\n\t\t},\n\n\t\t// Execute a callback for every element in the matched set.\n\t\teach: function (callback) {\n\t\t\treturn jQuery.each(this, callback);\n\t\t},\n\n\t\tmap: function (callback) {\n\t\t\treturn this.pushStack(jQuery.map(this, function (elem, i) {\n\t\t\t\treturn callback.call(elem, i, elem);\n\t\t\t}));\n\t\t},\n\n\t\tslice: function () {\n\t\t\treturn this.pushStack(slice.apply(this, arguments));\n\t\t},\n\n\t\tfirst: function () {\n\t\t\treturn this.eq(0);\n\t\t},\n\n\t\tlast: function () {\n\t\t\treturn this.eq(-1);\n\t\t},\n\n\t\teven: function () {\n\t\t\treturn this.pushStack(jQuery.grep(this, function (_elem, i) {\n\t\t\t\treturn (i + 1) % 2;\n\t\t\t}));\n\t\t},\n\n\t\todd: function () {\n\t\t\treturn this.pushStack(jQuery.grep(this, function (_elem, i) {\n\t\t\t\treturn i % 2;\n\t\t\t}));\n\t\t},\n\n\t\teq: function (i) {\n\t\t\tvar len = this.length,\n\t\t\t\tj = +i + (i < 0 ? len : 0);\n\t\t\treturn this.pushStack(j >= 0 && j < len ? [this[j]] : []);\n\t\t},\n\n\t\tend: function () {\n\t\t\treturn this.prevObject || this.constructor();\n\t\t},\n\n\t\t// For internal use only.\n\t\t// Behaves like an Array's method, not like a jQuery method.\n\t\tpush: push,\n\t\tsort: arr.sort,\n\t\tsplice: arr.splice\n\t};\n\n\tjQuery.extend = jQuery.fn.extend = function () {\n\t\tvar options, name, src, copy, copyIsArray, clone,\n\t\t\ttarget = arguments[0] || {},\n\t\t\ti = 1,\n\t\t\tlength = arguments.length,\n\t\t\tdeep = false;\n\n\t\t// Handle a deep copy situation\n\t\tif (typeof target === \"boolean\") {\n\t\t\tdeep = target;\n\n\t\t\t// Skip the boolean and the target\n\t\t\ttarget = arguments[i] || {};\n\t\t\ti++;\n\t\t}\n\n\t\t// Handle case when target is a string or something (possible in deep copy)\n\t\tif (typeof target !== \"object\" && !isFunction(target)) {\n\t\t\ttarget = {};\n\t\t}\n\n\t\t// Extend jQuery itself if only one argument is passed\n\t\tif (i === length) {\n\t\t\ttarget = this;\n\t\t\ti--;\n\t\t}\n\n\t\tfor (; i < length; i++) {\n\n\t\t\t// Only deal with non-null/undefined values\n\t\t\tif ((options = arguments[i]) != null) {\n\n\t\t\t\t// Extend the base object\n\t\t\t\tfor (name in options) {\n\t\t\t\t\tcopy = options[name];\n\n\t\t\t\t\t// Prevent Object.prototype pollution\n\t\t\t\t\t// Prevent never-ending loop\n\t\t\t\t\tif (name === \"__proto__\" || target === copy) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\t\tif (deep && copy && (jQuery.isPlainObject(copy) ||\n\t\t\t\t\t\t(copyIsArray = Array.isArray(copy)))) {\n\t\t\t\t\t\tsrc = target[name];\n\n\t\t\t\t\t\t// Ensure proper type for the source value\n\t\t\t\t\t\tif (copyIsArray && !Array.isArray(src)) {\n\t\t\t\t\t\t\tclone = [];\n\t\t\t\t\t\t} else if (!copyIsArray && !jQuery.isPlainObject(src)) {\n\t\t\t\t\t\t\tclone = {};\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tclone = src;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcopyIsArray = false;\n\n\t\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\t\ttarget[name] = jQuery.extend(deep, clone, copy);\n\n\t\t\t\t\t\t// Don't bring in undefined values\n\t\t\t\t\t} else if (copy !== undefined) {\n\t\t\t\t\t\ttarget[name] = copy;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Return the modified object\n\t\treturn target;\n\t};\n\n\tjQuery.extend({\n\n\t\t// Unique for each copy of jQuery on the page\n\t\texpando: \"jQuery\" + (version + Math.random()).replace(/\\D/g, \"\"),\n\n\t\t// Assume jQuery is ready without the ready module\n\t\tisReady: true,\n\n\t\terror: function (msg) {\n\t\t\tthrow new Error(msg);\n\t\t},\n\n\t\tnoop: function () { },\n\n\t\tisPlainObject: function (obj) {\n\t\t\tvar proto, Ctor;\n\n\t\t\t// Detect obvious negatives\n\t\t\t// Use toString instead of jQuery.type to catch host objects\n\t\t\tif (!obj || toString.call(obj) !== \"[object Object]\") {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tproto = getProto(obj);\n\n\t\t\t// Objects with no prototype (e.g., `Object.create( null )`) are plain\n\t\t\tif (!proto) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\t// Objects with prototype are plain iff they were constructed by a global Object function\n\t\t\tCtor = hasOwn.call(proto, \"constructor\") && proto.constructor;\n\t\t\treturn typeof Ctor === \"function\" && fnToString.call(Ctor) === ObjectFunctionString;\n\t\t},\n\n\t\tisEmptyObject: function (obj) {\n\t\t\tvar name;\n\n\t\t\tfor (name in obj) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\n\t\t// Evaluates a script in a provided context; falls back to the global one\n\t\t// if not specified.\n\t\tglobalEval: function (code, options, doc) {\n\t\t\tDOMEval(code, { nonce: options && options.nonce }, doc);\n\t\t},\n\n\t\teach: function (obj, callback) {\n\t\t\tvar length, i = 0;\n\n\t\t\tif (isArrayLike(obj)) {\n\t\t\t\tlength = obj.length;\n\t\t\t\tfor (; i < length; i++) {\n\t\t\t\t\tif (callback.call(obj[i], i, obj[i]) === false) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor (i in obj) {\n\t\t\t\t\tif (callback.call(obj[i], i, obj[i]) === false) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn obj;\n\t\t},\n\n\n\t\t// Retrieve the text value of an array of DOM nodes\n\t\ttext: function (elem) {\n\t\t\tvar node,\n\t\t\t\tret = \"\",\n\t\t\t\ti = 0,\n\t\t\t\tnodeType = elem.nodeType;\n\n\t\t\tif (!nodeType) {\n\n\t\t\t\t// If no nodeType, this is expected to be an array\n\t\t\t\twhile ((node = elem[i++])) {\n\n\t\t\t\t\t// Do not traverse comment nodes\n\t\t\t\t\tret += jQuery.text(node);\n\t\t\t\t}\n\t\t\t} else if (nodeType === 1 || nodeType === 9 || nodeType === 11) {\n\t\t\t\treturn elem.textContent;\n\t\t\t} else if (nodeType === 3 || nodeType === 4) {\n\t\t\t\treturn elem.nodeValue;\n\t\t\t}\n\n\t\t\t// Do not include comment or processing instruction nodes\n\n\t\t\treturn ret;\n\t\t},\n\n\t\t// results is for internal usage only\n\t\tmakeArray: function (arr, results) {\n\t\t\tvar ret = results || [];\n\n\t\t\tif (arr != null) {\n\t\t\t\tif (isArrayLike(Object(arr))) {\n\t\t\t\t\tjQuery.merge(ret,\n\t\t\t\t\t\ttypeof arr === \"string\" ?\n\t\t\t\t\t\t\t[arr] : arr\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\tpush.call(ret, arr);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn ret;\n\t\t},\n\n\t\tinArray: function (elem, arr, i) {\n\t\t\treturn arr == null ? -1 : indexOf.call(arr, elem, i);\n\t\t},\n\n\t\tisXMLDoc: function (elem) {\n\t\t\tvar namespace = elem && elem.namespaceURI,\n\t\t\t\tdocElem = elem && (elem.ownerDocument || elem).documentElement;\n\n\t\t\t// Assume HTML when documentElement doesn't yet exist, such as inside\n\t\t\t// document fragments.\n\t\t\treturn !rhtmlSuffix.test(namespace || docElem && docElem.nodeName || \"HTML\");\n\t\t},\n\n\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\tmerge: function (first, second) {\n\t\t\tvar len = +second.length,\n\t\t\t\tj = 0,\n\t\t\t\ti = first.length;\n\n\t\t\tfor (; j < len; j++) {\n\t\t\t\tfirst[i++] = second[j];\n\t\t\t}\n\n\t\t\tfirst.length = i;\n\n\t\t\treturn first;\n\t\t},\n\n\t\tgrep: function (elems, callback, invert) {\n\t\t\tvar callbackInverse,\n\t\t\t\tmatches = [],\n\t\t\t\ti = 0,\n\t\t\t\tlength = elems.length,\n\t\t\t\tcallbackExpect = !invert;\n\n\t\t\t// Go through the array, only saving the items\n\t\t\t// that pass the validator function\n\t\t\tfor (; i < length; i++) {\n\t\t\t\tcallbackInverse = !callback(elems[i], i);\n\t\t\t\tif (callbackInverse !== callbackExpect) {\n\t\t\t\t\tmatches.push(elems[i]);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn matches;\n\t\t},\n\n\t\t// arg is for internal usage only\n\t\tmap: function (elems, callback, arg) {\n\t\t\tvar length, value,\n\t\t\t\ti = 0,\n\t\t\t\tret = [];\n\n\t\t\t// Go through the array, translating each of the items to their new values\n\t\t\tif (isArrayLike(elems)) {\n\t\t\t\tlength = elems.length;\n\t\t\t\tfor (; i < length; i++) {\n\t\t\t\t\tvalue = callback(elems[i], i, arg);\n\n\t\t\t\t\tif (value != null) {\n\t\t\t\t\t\tret.push(value);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Go through every key on the object,\n\t\t\t} else {\n\t\t\t\tfor (i in elems) {\n\t\t\t\t\tvalue = callback(elems[i], i, arg);\n\n\t\t\t\t\tif (value != null) {\n\t\t\t\t\t\tret.push(value);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Flatten any nested arrays\n\t\t\treturn flat(ret);\n\t\t},\n\n\t\t// A global GUID counter for objects\n\t\tguid: 1,\n\n\t\t// jQuery.support is not used in Core but other projects attach their\n\t\t// properties to it so it needs to exist.\n\t\tsupport: support\n\t});\n\n\tif (typeof Symbol === \"function\") {\n\t\tjQuery.fn[Symbol.iterator] = arr[Symbol.iterator];\n\t}\n\n\t// Populate the class2type map\n\tjQuery.each(\"Boolean Number String Function Array Date RegExp Object Error Symbol\".split(\" \"),\n\t\tfunction (_i, name) {\n\t\t\tclass2type[\"[object \" + name + \"]\"] = name.toLowerCase();\n\t\t});\n\n\tfunction isArrayLike(obj) {\n\n\t\t// Support: real iOS 8.2 only (not reproducible in simulator)\n\t\t// `in` check used to prevent JIT error (gh-2145)\n\t\t// hasOwn isn't used here due to false negatives\n\t\t// regarding Nodelist length in IE\n\t\tvar length = !!obj && \"length\" in obj && obj.length,\n\t\t\ttype = toType(obj);\n\n\t\tif (isFunction(obj) || isWindow(obj)) {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn type === \"array\" || length === 0 ||\n\t\t\ttypeof length === \"number\" && length > 0 && (length - 1) in obj;\n\t}\n\n\n\tfunction nodeName(elem, name) {\n\n\t\treturn elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();\n\n\t}\n\tvar pop = arr.pop;\n\n\n\tvar sort = arr.sort;\n\n\n\tvar splice = arr.splice;\n\n\n\tvar whitespace = \"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\";\n\n\n\tvar rtrimCSS = new RegExp(\n\t\t\"^\" + whitespace + \"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\" + whitespace + \"+$\",\n\t\t\"g\"\n\t);\n\n\n\n\n\t// Note: an element does not contain itself\n\tjQuery.contains = function (a, b) {\n\t\tvar bup = b && b.parentNode;\n\n\t\treturn a === bup || !!(bup && bup.nodeType === 1 && (\n\n\t\t\t// Support: IE 9 - 11+\n\t\t\t// IE doesn't have `contains` on SVG.\n\t\t\ta.contains ?\n\t\t\t\ta.contains(bup) :\n\t\t\t\ta.compareDocumentPosition && a.compareDocumentPosition(bup) & 16\n\t\t));\n\t};\n\n\n\n\n\t// CSS string/identifier serialization\n\t// https://drafts.csswg.org/cssom/#common-serializing-idioms\n\tvar rcssescape = /([\\0-\\x1f\\x7f]|^-?\\d)|^-$|[^\\x80-\\uFFFF\\w-]/g;\n\n\tfunction fcssescape(ch, asCodePoint) {\n\t\tif (asCodePoint) {\n\n\t\t\t// U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER\n\t\t\tif (ch === \"\\0\") {\n\t\t\t\treturn \"\\uFFFD\";\n\t\t\t}\n\n\t\t\t// Control characters and (dependent upon position) numbers get escaped as code points\n\t\t\treturn ch.slice(0, -1) + \"\\\\\" + ch.charCodeAt(ch.length - 1).toString(16) + \" \";\n\t\t}\n\n\t\t// Other potentially-special ASCII characters get backslash-escaped\n\t\treturn \"\\\\\" + ch;\n\t}\n\n\tjQuery.escapeSelector = function (sel) {\n\t\treturn (sel + \"\").replace(rcssescape, fcssescape);\n\t};\n\n\n\n\n\tvar preferredDoc = document,\n\t\tpushNative = push;\n\n\t(function () {\n\n\t\tvar i,\n\t\t\tExpr,\n\t\t\toutermostContext,\n\t\t\tsortInput,\n\t\t\thasDuplicate,\n\t\t\tpush = pushNative,\n\n\t\t\t// Local document vars\n\t\t\tdocument,\n\t\t\tdocumentElement,\n\t\t\tdocumentIsHTML,\n\t\t\trbuggyQSA,\n\t\t\tmatches,\n\n\t\t\t// Instance-specific data\n\t\t\texpando = jQuery.expando,\n\t\t\tdirruns = 0,\n\t\t\tdone = 0,\n\t\t\tclassCache = createCache(),\n\t\t\ttokenCache = createCache(),\n\t\t\tcompilerCache = createCache(),\n\t\t\tnonnativeSelectorCache = createCache(),\n\t\t\tsortOrder = function (a, b) {\n\t\t\t\tif (a === b) {\n\t\t\t\t\thasDuplicate = true;\n\t\t\t\t}\n\t\t\t\treturn 0;\n\t\t\t},\n\n\t\t\tbooleans = \"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|\" +\n\t\t\t\t\"loop|multiple|open|readonly|required|scoped\",\n\n\t\t\t// Regular expressions\n\n\t\t\t// https://www.w3.org/TR/css-syntax-3/#ident-token-diagram\n\t\t\tidentifier = \"(?:\\\\\\\\[\\\\da-fA-F]{1,6}\" + whitespace +\n\t\t\t\t\"?|\\\\\\\\[^\\\\r\\\\n\\\\f]|[\\\\w-]|[^\\0-\\\\x7f])+\",\n\n\t\t\t// Attribute selectors: https://www.w3.org/TR/selectors/#attribute-selectors\n\t\t\tattributes = \"\\\\[\" + whitespace + \"*(\" + identifier + \")(?:\" + whitespace +\n\n\t\t\t\t// Operator (capture 2)\n\t\t\t\t\"*([*^$|!~]?=)\" + whitespace +\n\n\t\t\t\t// \"Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]\"\n\t\t\t\t\"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\" + identifier + \"))|)\" +\n\t\t\t\twhitespace + \"*\\\\]\",\n\n\t\t\tpseudos = \":(\" + identifier + \")(?:\\\\((\" +\n\n\t\t\t\t// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:\n\t\t\t\t// 1. quoted (capture 3; capture 4 or capture 5)\n\t\t\t\t\"('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|\" +\n\n\t\t\t\t// 2. simple (capture 6)\n\t\t\t\t\"((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\" + attributes + \")*)|\" +\n\n\t\t\t\t// 3. anything else (capture 2)\n\t\t\t\t\".*\" +\n\t\t\t\t\")\\\\)|)\",\n\n\t\t\t// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter\n\t\t\trwhitespace = new RegExp(whitespace + \"+\", \"g\"),\n\n\t\t\trcomma = new RegExp(\"^\" + whitespace + \"*,\" + whitespace + \"*\"),\n\t\t\trleadingCombinator = new RegExp(\"^\" + whitespace + \"*([>+~]|\" + whitespace + \")\" +\n\t\t\t\twhitespace + \"*\"),\n\t\t\trdescend = new RegExp(whitespace + \"|>\"),\n\n\t\t\trpseudo = new RegExp(pseudos),\n\t\t\tridentifier = new RegExp(\"^\" + identifier + \"$\"),\n\n\t\t\tmatchExpr = {\n\t\t\t\tID: new RegExp(\"^#(\" + identifier + \")\"),\n\t\t\t\tCLASS: new RegExp(\"^\\\\.(\" + identifier + \")\"),\n\t\t\t\tTAG: new RegExp(\"^(\" + identifier + \"|[*])\"),\n\t\t\t\tATTR: new RegExp(\"^\" + attributes),\n\t\t\t\tPSEUDO: new RegExp(\"^\" + pseudos),\n\t\t\t\tCHILD: new RegExp(\n\t\t\t\t\t\"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\" +\n\t\t\t\t\twhitespace + \"*(even|odd|(([+-]|)(\\\\d*)n|)\" + whitespace + \"*(?:([+-]|)\" +\n\t\t\t\t\twhitespace + \"*(\\\\d+)|))\" + whitespace + \"*\\\\)|)\", \"i\"),\n\t\t\t\tbool: new RegExp(\"^(?:\" + booleans + \")$\", \"i\"),\n\n\t\t\t\t// For use in libraries implementing .is()\n\t\t\t\t// We use this for POS matching in `select`\n\t\t\t\tneedsContext: new RegExp(\"^\" + whitespace +\n\t\t\t\t\t\"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\" + whitespace +\n\t\t\t\t\t\"*((?:-\\\\d)?\\\\d*)\" + whitespace + \"*\\\\)|)(?=[^-]|$)\", \"i\")\n\t\t\t},\n\n\t\t\trinputs = /^(?:input|select|textarea|button)$/i,\n\t\t\trheader = /^h\\d$/i,\n\n\t\t\t// Easily-parseable/retrievable ID or TAG or CLASS selectors\n\t\t\trquickExpr = /^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,\n\n\t\t\trsibling = /[+~]/,\n\n\t\t\t// CSS escapes\n\t\t\t// https://www.w3.org/TR/CSS21/syndata.html#escaped-characters\n\t\t\trunescape = new RegExp(\"\\\\\\\\[\\\\da-fA-F]{1,6}\" + whitespace +\n\t\t\t\t\"?|\\\\\\\\([^\\\\r\\\\n\\\\f])\", \"g\"),\n\t\t\tfunescape = function (escape, nonHex) {\n\t\t\t\tvar high = \"0x\" + escape.slice(1) - 0x10000;\n\n\t\t\t\tif (nonHex) {\n\n\t\t\t\t\t// Strip the backslash prefix from a non-hex escape sequence\n\t\t\t\t\treturn nonHex;\n\t\t\t\t}\n\n\t\t\t\t// Replace a hexadecimal escape sequence with the encoded Unicode code point\n\t\t\t\t// Support: IE <=11+\n\t\t\t\t// For values outside the Basic Multilingual Plane (BMP), manually construct a\n\t\t\t\t// surrogate pair\n\t\t\t\treturn high < 0 ?\n\t\t\t\t\tString.fromCharCode(high + 0x10000) :\n\t\t\t\t\tString.fromCharCode(high >> 10 | 0xD800, high & 0x3FF | 0xDC00);\n\t\t\t},\n\n\t\t\t// Used for iframes; see `setDocument`.\n\t\t\t// Support: IE 9 - 11+, Edge 12 - 18+\n\t\t\t// Removing the function wrapper causes a \"Permission Denied\"\n\t\t\t// error in IE/Edge.\n\t\t\tunloadHandler = function () {\n\t\t\t\tsetDocument();\n\t\t\t},\n\n\t\t\tinDisabledFieldset = addCombinator(\n\t\t\t\tfunction (elem) {\n\t\t\t\t\treturn elem.disabled === true && nodeName(elem, \"fieldset\");\n\t\t\t\t},\n\t\t\t\t{ dir: \"parentNode\", next: \"legend\" }\n\t\t\t);\n\n\t\t// Support: IE <=9 only\n\t\t// Accessing document.activeElement can throw unexpectedly\n\t\t// https://bugs.jquery.com/ticket/13393\n\t\tfunction safeActiveElement() {\n\t\t\ttry {\n\t\t\t\treturn document.activeElement;\n\t\t\t} catch (err) { }\n\t\t}\n\n\t\t// Optimize for push.apply( _, NodeList )\n\t\ttry {\n\t\t\tpush.apply(\n\t\t\t\t(arr = slice.call(preferredDoc.childNodes)),\n\t\t\t\tpreferredDoc.childNodes\n\t\t\t);\n\n\t\t\t// Support: Android <=4.0\n\t\t\t// Detect silently failing push.apply\n\t\t\t// eslint-disable-next-line no-unused-expressions\n\t\t\tarr[preferredDoc.childNodes.length].nodeType;\n\t\t} catch (e) {\n\t\t\tpush = {\n\t\t\t\tapply: function (target, els) {\n\t\t\t\t\tpushNative.apply(target, slice.call(els));\n\t\t\t\t},\n\t\t\t\tcall: function (target) {\n\t\t\t\t\tpushNative.apply(target, slice.call(arguments, 1));\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\n\t\tfunction find(selector, context, results, seed) {\n\t\t\tvar m, i, elem, nid, match, groups, newSelector,\n\t\t\t\tnewContext = context && context.ownerDocument,\n\n\t\t\t\t// nodeType defaults to 9, since context defaults to document\n\t\t\t\tnodeType = context ? context.nodeType : 9;\n\n\t\t\tresults = results || [];\n\n\t\t\t// Return early from calls with invalid selector or context\n\t\t\tif (typeof selector !== \"string\" || !selector ||\n\t\t\t\tnodeType !== 1 && nodeType !== 9 && nodeType !== 11) {\n\n\t\t\t\treturn results;\n\t\t\t}\n\n\t\t\t// Try to shortcut find operations (as opposed to filters) in HTML documents\n\t\t\tif (!seed) {\n\t\t\t\tsetDocument(context);\n\t\t\t\tcontext = context || document;\n\n\t\t\t\tif (documentIsHTML) {\n\n\t\t\t\t\t// If the selector is sufficiently simple, try using a \"get*By*\" DOM method\n\t\t\t\t\t// (excepting DocumentFragment context, where the methods don't exist)\n\t\t\t\t\tif (nodeType !== 11 && (match = rquickExpr.exec(selector))) {\n\n\t\t\t\t\t\t// ID selector\n\t\t\t\t\t\tif ((m = match[1])) {\n\n\t\t\t\t\t\t\t// Document context\n\t\t\t\t\t\t\tif (nodeType === 9) {\n\t\t\t\t\t\t\t\tif ((elem = context.getElementById(m))) {\n\n\t\t\t\t\t\t\t\t\t// Support: IE 9 only\n\t\t\t\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\t\t\t\tif (elem.id === m) {\n\t\t\t\t\t\t\t\t\t\tpush.call(results, elem);\n\t\t\t\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t// Element context\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t// Support: IE 9 only\n\t\t\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\t\t\tif (newContext && (elem = newContext.getElementById(m)) &&\n\t\t\t\t\t\t\t\t\tfind.contains(context, elem) &&\n\t\t\t\t\t\t\t\t\telem.id === m) {\n\n\t\t\t\t\t\t\t\t\tpush.call(results, elem);\n\t\t\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Type selector\n\t\t\t\t\t\t} else if (match[2]) {\n\t\t\t\t\t\t\tpush.apply(results, context.getElementsByTagName(selector));\n\t\t\t\t\t\t\treturn results;\n\n\t\t\t\t\t\t\t// Class selector\n\t\t\t\t\t\t} else if ((m = match[3]) && context.getElementsByClassName) {\n\t\t\t\t\t\t\tpush.apply(results, context.getElementsByClassName(m));\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Take advantage of querySelectorAll\n\t\t\t\t\tif (!nonnativeSelectorCache[selector + \" \"] &&\n\t\t\t\t\t\t(!rbuggyQSA || !rbuggyQSA.test(selector))) {\n\n\t\t\t\t\t\tnewSelector = selector;\n\t\t\t\t\t\tnewContext = context;\n\n\t\t\t\t\t\t// qSA considers elements outside a scoping root when evaluating child or\n\t\t\t\t\t\t// descendant combinators, which is not what we want.\n\t\t\t\t\t\t// In such cases, we work around the behavior by prefixing every selector in the\n\t\t\t\t\t\t// list with an ID selector referencing the scope context.\n\t\t\t\t\t\t// The technique has to be used as well when a leading combinator is used\n\t\t\t\t\t\t// as such selectors are not recognized by querySelectorAll.\n\t\t\t\t\t\t// Thanks to Andrew Dupont for this technique.\n\t\t\t\t\t\tif (nodeType === 1 &&\n\t\t\t\t\t\t\t(rdescend.test(selector) || rleadingCombinator.test(selector))) {\n\n\t\t\t\t\t\t\t// Expand context for sibling selectors\n\t\t\t\t\t\t\tnewContext = rsibling.test(selector) && testContext(context.parentNode) ||\n\t\t\t\t\t\t\t\tcontext;\n\n\t\t\t\t\t\t\t// We can use :scope instead of the ID hack if the browser\n\t\t\t\t\t\t\t// supports it & if we're not changing the context.\n\t\t\t\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when\n\t\t\t\t\t\t\t// strict-comparing two documents; shallow comparisons work.\n\t\t\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\t\t\tif (newContext != context || !support.scope) {\n\n\t\t\t\t\t\t\t\t// Capture the context ID, setting it first if necessary\n\t\t\t\t\t\t\t\tif ((nid = context.getAttribute(\"id\"))) {\n\t\t\t\t\t\t\t\t\tnid = jQuery.escapeSelector(nid);\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tcontext.setAttribute(\"id\", (nid = expando));\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Prefix every selector in the list\n\t\t\t\t\t\t\tgroups = tokenize(selector);\n\t\t\t\t\t\t\ti = groups.length;\n\t\t\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\t\t\tgroups[i] = (nid ? \"#\" + nid : \":scope\") + \" \" +\n\t\t\t\t\t\t\t\t\ttoSelector(groups[i]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tnewSelector = groups.join(\",\");\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tpush.apply(results,\n\t\t\t\t\t\t\t\tnewContext.querySelectorAll(newSelector)\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t} catch (qsaError) {\n\t\t\t\t\t\t\tnonnativeSelectorCache(selector, true);\n\t\t\t\t\t\t} finally {\n\t\t\t\t\t\t\tif (nid === expando) {\n\t\t\t\t\t\t\t\tcontext.removeAttribute(\"id\");\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// All others\n\t\t\treturn select(selector.replace(rtrimCSS, \"$1\"), context, results, seed);\n\t\t}\n\n\t\t/**\n\t\t * Create key-value caches of limited size\n\t\t * @returns {function(string, object)} Returns the Object data after storing it on itself with\n\t\t *\tproperty name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)\n\t\t *\tdeleting the oldest entry\n\t\t */\n\t\tfunction createCache() {\n\t\t\tvar keys = [];\n\n\t\t\tfunction cache(key, value) {\n\n\t\t\t\t// Use (key + \" \") to avoid collision with native prototype properties\n\t\t\t\t// (see https://github.com/jquery/sizzle/issues/157)\n\t\t\t\tif (keys.push(key + \" \") > Expr.cacheLength) {\n\n\t\t\t\t\t// Only keep the most recent entries\n\t\t\t\t\tdelete cache[keys.shift()];\n\t\t\t\t}\n\t\t\t\treturn (cache[key + \" \"] = value);\n\t\t\t}\n\t\t\treturn cache;\n\t\t}\n\n\t\t/**\n\t\t * Mark a function for special use by jQuery selector module\n\t\t * @param {Function} fn The function to mark\n\t\t */\n\t\tfunction markFunction(fn) {\n\t\t\tfn[expando] = true;\n\t\t\treturn fn;\n\t\t}\n\n\t\t/**\n\t\t * Support testing using an element\n\t\t * @param {Function} fn Passed the created element and returns a boolean result\n\t\t */\n\t\tfunction assert(fn) {\n\t\t\tvar el = document.createElement(\"fieldset\");\n\n\t\t\ttry {\n\t\t\t\treturn !!fn(el);\n\t\t\t} catch (e) {\n\t\t\t\treturn false;\n\t\t\t} finally {\n\n\t\t\t\t// Remove from its parent by default\n\t\t\t\tif (el.parentNode) {\n\t\t\t\t\tel.parentNode.removeChild(el);\n\t\t\t\t}\n\n\t\t\t\t// release memory in IE\n\t\t\t\tel = null;\n\t\t\t}\n\t\t}\n\n\t\t/**\n\t\t * Returns a function to use in pseudos for input types\n\t\t * @param {String} type\n\t\t */\n\t\tfunction createInputPseudo(type) {\n\t\t\treturn function (elem) {\n\t\t\t\treturn nodeName(elem, \"input\") && elem.type === type;\n\t\t\t};\n\t\t}\n\n\t\t/**\n\t\t * Returns a function to use in pseudos for buttons\n\t\t * @param {String} type\n\t\t */\n\t\tfunction createButtonPseudo(type) {\n\t\t\treturn function (elem) {\n\t\t\t\treturn (nodeName(elem, \"input\") || nodeName(elem, \"button\")) &&\n\t\t\t\t\telem.type === type;\n\t\t\t};\n\t\t}\n\n\t\t/**\n\t\t * Returns a function to use in pseudos for :enabled/:disabled\n\t\t * @param {Boolean} disabled true for :disabled; false for :enabled\n\t\t */\n\t\tfunction createDisabledPseudo(disabled) {\n\n\t\t\t// Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable\n\t\t\treturn function (elem) {\n\n\t\t\t\t// Only certain elements can match :enabled or :disabled\n\t\t\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled\n\t\t\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled\n\t\t\t\tif (\"form\" in elem) {\n\n\t\t\t\t\t// Check for inherited disabledness on relevant non-disabled elements:\n\t\t\t\t\t// * listed form-associated elements in a disabled fieldset\n\t\t\t\t\t//   https://html.spec.whatwg.org/multipage/forms.html#category-listed\n\t\t\t\t\t//   https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled\n\t\t\t\t\t// * option elements in a disabled optgroup\n\t\t\t\t\t//   https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled\n\t\t\t\t\t// All such elements have a \"form\" property.\n\t\t\t\t\tif (elem.parentNode && elem.disabled === false) {\n\n\t\t\t\t\t\t// Option elements defer to a parent optgroup if present\n\t\t\t\t\t\tif (\"label\" in elem) {\n\t\t\t\t\t\t\tif (\"label\" in elem.parentNode) {\n\t\t\t\t\t\t\t\treturn elem.parentNode.disabled === disabled;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\treturn elem.disabled === disabled;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Support: IE 6 - 11+\n\t\t\t\t\t\t// Use the isDisabled shortcut property to check for disabled fieldset ancestors\n\t\t\t\t\t\treturn elem.isDisabled === disabled ||\n\n\t\t\t\t\t\t\t// Where there is no isDisabled, check manually\n\t\t\t\t\t\t\telem.isDisabled !== !disabled &&\n\t\t\t\t\t\t\tinDisabledFieldset(elem) === disabled;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn elem.disabled === disabled;\n\n\t\t\t\t\t// Try to winnow out elements that can't be disabled before trusting the disabled property.\n\t\t\t\t\t// Some victims get caught in our net (label, legend, menu, track), but it shouldn't\n\t\t\t\t\t// even exist on them, let alone have a boolean value.\n\t\t\t\t} else if (\"label\" in elem) {\n\t\t\t\t\treturn elem.disabled === disabled;\n\t\t\t\t}\n\n\t\t\t\t// Remaining elements are neither :enabled nor :disabled\n\t\t\t\treturn false;\n\t\t\t};\n\t\t}\n\n\t\t/**\n\t\t * Returns a function to use in pseudos for positionals\n\t\t * @param {Function} fn\n\t\t */\n\t\tfunction createPositionalPseudo(fn) {\n\t\t\treturn markFunction(function (argument) {\n\t\t\t\targument = +argument;\n\t\t\t\treturn markFunction(function (seed, matches) {\n\t\t\t\t\tvar j,\n\t\t\t\t\t\tmatchIndexes = fn([], seed.length, argument),\n\t\t\t\t\t\ti = matchIndexes.length;\n\n\t\t\t\t\t// Match elements found at the specified indexes\n\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\tif (seed[(j = matchIndexes[i])]) {\n\t\t\t\t\t\t\tseed[j] = !(matches[j] = seed[j]);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\n\t\t/**\n\t\t * Checks a node for validity as a jQuery selector context\n\t\t * @param {Element|Object=} context\n\t\t * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value\n\t\t */\n\t\tfunction testContext(context) {\n\t\t\treturn context && typeof context.getElementsByTagName !== \"undefined\" && context;\n\t\t}\n\n\t\t/**\n\t\t * Sets document-related variables once based on the current document\n\t\t * @param {Element|Object} [node] An element or document object to use to set the document\n\t\t * @returns {Object} Returns the current document\n\t\t */\n\t\tfunction setDocument(node) {\n\t\t\tvar subWindow,\n\t\t\t\tdoc = node ? node.ownerDocument || node : preferredDoc;\n\n\t\t\t// Return early if doc is invalid or already selected\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tif (doc == document || doc.nodeType !== 9 || !doc.documentElement) {\n\t\t\t\treturn document;\n\t\t\t}\n\n\t\t\t// Update global variables\n\t\t\tdocument = doc;\n\t\t\tdocumentElement = document.documentElement;\n\t\t\tdocumentIsHTML = !jQuery.isXMLDoc(document);\n\n\t\t\t// Support: iOS 7 only, IE 9 - 11+\n\t\t\t// Older browsers didn't support unprefixed `matches`.\n\t\t\tmatches = documentElement.matches ||\n\t\t\t\tdocumentElement.webkitMatchesSelector ||\n\t\t\t\tdocumentElement.msMatchesSelector;\n\n\t\t\t// Support: IE 9 - 11+, Edge 12 - 18+\n\t\t\t// Accessing iframe documents after unload throws \"permission denied\" errors (see trac-13936)\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tif (preferredDoc != document &&\n\t\t\t\t(subWindow = document.defaultView) && subWindow.top !== subWindow) {\n\n\t\t\t\t// Support: IE 9 - 11+, Edge 12 - 18+\n\t\t\t\tsubWindow.addEventListener(\"unload\", unloadHandler);\n\t\t\t}\n\n\t\t\t// Support: IE <10\n\t\t\t// Check if getElementById returns elements by name\n\t\t\t// The broken getElementById methods don't pick up programmatically-set names,\n\t\t\t// so use a roundabout getElementsByName test\n\t\t\tsupport.getById = assert(function (el) {\n\t\t\t\tdocumentElement.appendChild(el).id = jQuery.expando;\n\t\t\t\treturn !document.getElementsByName ||\n\t\t\t\t\t!document.getElementsByName(jQuery.expando).length;\n\t\t\t});\n\n\t\t\t// Support: IE 9 only\n\t\t\t// Check to see if it's possible to do matchesSelector\n\t\t\t// on a disconnected node.\n\t\t\tsupport.disconnectedMatch = assert(function (el) {\n\t\t\t\treturn matches.call(el, \"*\");\n\t\t\t});\n\n\t\t\t// Support: IE 9 - 11+, Edge 12 - 18+\n\t\t\t// IE/Edge don't support the :scope pseudo-class.\n\t\t\tsupport.scope = assert(function () {\n\t\t\t\treturn document.querySelectorAll(\":scope\");\n\t\t\t});\n\n\t\t\t// Support: Chrome 105 - 111 only, Safari 15.4 - 16.3 only\n\t\t\t// Make sure the `:has()` argument is parsed unforgivingly.\n\t\t\t// We include `*` in the test to detect buggy implementations that are\n\t\t\t// _selectively_ forgiving (specifically when the list includes at least\n\t\t\t// one valid selector).\n\t\t\t// Note that we treat complete lack of support for `:has()` as if it were\n\t\t\t// spec-compliant support, which is fine because use of `:has()` in such\n\t\t\t// environments will fail in the qSA path and fall back to jQuery traversal\n\t\t\t// anyway.\n\t\t\tsupport.cssHas = assert(function () {\n\t\t\t\ttry {\n\t\t\t\t\tdocument.querySelector(\":has(*,:jqfake)\");\n\t\t\t\t\treturn false;\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t// ID filter and find\n\t\t\tif (support.getById) {\n\t\t\t\tExpr.filter.ID = function (id) {\n\t\t\t\t\tvar attrId = id.replace(runescape, funescape);\n\t\t\t\t\treturn function (elem) {\n\t\t\t\t\t\treturn elem.getAttribute(\"id\") === attrId;\n\t\t\t\t\t};\n\t\t\t\t};\n\t\t\t\tExpr.find.ID = function (id, context) {\n\t\t\t\t\tif (typeof context.getElementById !== \"undefined\" && documentIsHTML) {\n\t\t\t\t\t\tvar elem = context.getElementById(id);\n\t\t\t\t\t\treturn elem ? [elem] : [];\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t} else {\n\t\t\t\tExpr.filter.ID = function (id) {\n\t\t\t\t\tvar attrId = id.replace(runescape, funescape);\n\t\t\t\t\treturn function (elem) {\n\t\t\t\t\t\tvar node = typeof elem.getAttributeNode !== \"undefined\" &&\n\t\t\t\t\t\t\telem.getAttributeNode(\"id\");\n\t\t\t\t\t\treturn node && node.value === attrId;\n\t\t\t\t\t};\n\t\t\t\t};\n\n\t\t\t\t// Support: IE 6 - 7 only\n\t\t\t\t// getElementById is not reliable as a find shortcut\n\t\t\t\tExpr.find.ID = function (id, context) {\n\t\t\t\t\tif (typeof context.getElementById !== \"undefined\" && documentIsHTML) {\n\t\t\t\t\t\tvar node, i, elems,\n\t\t\t\t\t\t\telem = context.getElementById(id);\n\n\t\t\t\t\t\tif (elem) {\n\n\t\t\t\t\t\t\t// Verify the id attribute\n\t\t\t\t\t\t\tnode = elem.getAttributeNode(\"id\");\n\t\t\t\t\t\t\tif (node && node.value === id) {\n\t\t\t\t\t\t\t\treturn [elem];\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Fall back on getElementsByName\n\t\t\t\t\t\t\telems = context.getElementsByName(id);\n\t\t\t\t\t\t\ti = 0;\n\t\t\t\t\t\t\twhile ((elem = elems[i++])) {\n\t\t\t\t\t\t\t\tnode = elem.getAttributeNode(\"id\");\n\t\t\t\t\t\t\t\tif (node && node.value === id) {\n\t\t\t\t\t\t\t\t\treturn [elem];\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn [];\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\n\t\t\t// Tag\n\t\t\tExpr.find.TAG = function (tag, context) {\n\t\t\t\tif (typeof context.getElementsByTagName !== \"undefined\") {\n\t\t\t\t\treturn context.getElementsByTagName(tag);\n\n\t\t\t\t\t// DocumentFragment nodes don't have gEBTN\n\t\t\t\t} else {\n\t\t\t\t\treturn context.querySelectorAll(tag);\n\t\t\t\t}\n\t\t\t};\n\n\t\t\t// Class\n\t\t\tExpr.find.CLASS = function (className, context) {\n\t\t\t\tif (typeof context.getElementsByClassName !== \"undefined\" && documentIsHTML) {\n\t\t\t\t\treturn context.getElementsByClassName(className);\n\t\t\t\t}\n\t\t\t};\n\n\t\t\t/* QSA/matchesSelector\n\t\t\t---------------------------------------------------------------------- */\n\n\t\t\t// QSA and matchesSelector support\n\n\t\t\trbuggyQSA = [];\n\n\t\t\t// Build QSA regex\n\t\t\t// Regex strategy adopted from Diego Perini\n\t\t\tassert(function (el) {\n\n\t\t\t\tvar input;\n\n\t\t\t\tdocumentElement.appendChild(el).innerHTML =\n\t\t\t\t\t\"<a id='\" + expando + \"' href='' disabled='disabled'></a>\" +\n\t\t\t\t\t\"<select id='\" + expando + \"-\\r\\\\' disabled='disabled'>\" +\n\t\t\t\t\t\"<option selected=''></option></select>\";\n\n\t\t\t\t// Support: iOS <=7 - 8 only\n\t\t\t\t// Boolean attributes and \"value\" are not treated correctly in some XML documents\n\t\t\t\tif (!el.querySelectorAll(\"[selected]\").length) {\n\t\t\t\t\trbuggyQSA.push(\"\\\\[\" + whitespace + \"*(?:value|\" + booleans + \")\");\n\t\t\t\t}\n\n\t\t\t\t// Support: iOS <=7 - 8 only\n\t\t\t\tif (!el.querySelectorAll(\"[id~=\" + expando + \"-]\").length) {\n\t\t\t\t\trbuggyQSA.push(\"~=\");\n\t\t\t\t}\n\n\t\t\t\t// Support: iOS 8 only\n\t\t\t\t// https://bugs.webkit.org/show_bug.cgi?id=136851\n\t\t\t\t// In-page `selector#id sibling-combinator selector` fails\n\t\t\t\tif (!el.querySelectorAll(\"a#\" + expando + \"+*\").length) {\n\t\t\t\t\trbuggyQSA.push(\".#.+[+~]\");\n\t\t\t\t}\n\n\t\t\t\t// Support: Chrome <=105+, Firefox <=104+, Safari <=15.4+\n\t\t\t\t// In some of the document kinds, these selectors wouldn't work natively.\n\t\t\t\t// This is probably OK but for backwards compatibility we want to maintain\n\t\t\t\t// handling them through jQuery traversal in jQuery 3.x.\n\t\t\t\tif (!el.querySelectorAll(\":checked\").length) {\n\t\t\t\t\trbuggyQSA.push(\":checked\");\n\t\t\t\t}\n\n\t\t\t\t// Support: Windows 8 Native Apps\n\t\t\t\t// The type and name attributes are restricted during .innerHTML assignment\n\t\t\t\tinput = document.createElement(\"input\");\n\t\t\t\tinput.setAttribute(\"type\", \"hidden\");\n\t\t\t\tel.appendChild(input).setAttribute(\"name\", \"D\");\n\n\t\t\t\t// Support: IE 9 - 11+\n\t\t\t\t// IE's :disabled selector does not pick up the children of disabled fieldsets\n\t\t\t\t// Support: Chrome <=105+, Firefox <=104+, Safari <=15.4+\n\t\t\t\t// In some of the document kinds, these selectors wouldn't work natively.\n\t\t\t\t// This is probably OK but for backwards compatibility we want to maintain\n\t\t\t\t// handling them through jQuery traversal in jQuery 3.x.\n\t\t\t\tdocumentElement.appendChild(el).disabled = true;\n\t\t\t\tif (el.querySelectorAll(\":disabled\").length !== 2) {\n\t\t\t\t\trbuggyQSA.push(\":enabled\", \":disabled\");\n\t\t\t\t}\n\n\t\t\t\t// Support: IE 11+, Edge 15 - 18+\n\t\t\t\t// IE 11/Edge don't find elements on a `[name='']` query in some cases.\n\t\t\t\t// Adding a temporary attribute to the document before the selection works\n\t\t\t\t// around the issue.\n\t\t\t\t// Interestingly, IE 10 & older don't seem to have the issue.\n\t\t\t\tinput = document.createElement(\"input\");\n\t\t\t\tinput.setAttribute(\"name\", \"\");\n\t\t\t\tel.appendChild(input);\n\t\t\t\tif (!el.querySelectorAll(\"[name='']\").length) {\n\t\t\t\t\trbuggyQSA.push(\"\\\\[\" + whitespace + \"*name\" + whitespace + \"*=\" +\n\t\t\t\t\t\twhitespace + \"*(?:''|\\\"\\\")\");\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tif (!support.cssHas) {\n\n\t\t\t\t// Support: Chrome 105 - 110+, Safari 15.4 - 16.3+\n\t\t\t\t// Our regular `try-catch` mechanism fails to detect natively-unsupported\n\t\t\t\t// pseudo-classes inside `:has()` (such as `:has(:contains(\"Foo\"))`)\n\t\t\t\t// in browsers that parse the `:has()` argument as a forgiving selector list.\n\t\t\t\t// https://drafts.csswg.org/selectors/#relational now requires the argument\n\t\t\t\t// to be parsed unforgivingly, but browsers have not yet fully adjusted.\n\t\t\t\trbuggyQSA.push(\":has\");\n\t\t\t}\n\n\t\t\trbuggyQSA = rbuggyQSA.length && new RegExp(rbuggyQSA.join(\"|\"));\n\n\t\t\t/* Sorting\n\t\t\t---------------------------------------------------------------------- */\n\n\t\t\t// Document order sorting\n\t\t\tsortOrder = function (a, b) {\n\n\t\t\t\t// Flag for duplicate removal\n\t\t\t\tif (a === b) {\n\t\t\t\t\thasDuplicate = true;\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\n\t\t\t\t// Sort on method existence if only one input has compareDocumentPosition\n\t\t\t\tvar compare = !a.compareDocumentPosition - !b.compareDocumentPosition;\n\t\t\t\tif (compare) {\n\t\t\t\t\treturn compare;\n\t\t\t\t}\n\n\t\t\t\t// Calculate position if both inputs belong to the same document\n\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\tcompare = (a.ownerDocument || a) == (b.ownerDocument || b) ?\n\t\t\t\t\ta.compareDocumentPosition(b) :\n\n\t\t\t\t\t// Otherwise we know they are disconnected\n\t\t\t\t\t1;\n\n\t\t\t\t// Disconnected nodes\n\t\t\t\tif (compare & 1 ||\n\t\t\t\t\t(!support.sortDetached && b.compareDocumentPosition(a) === compare)) {\n\n\t\t\t\t\t// Choose the first element that is related to our preferred document\n\t\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\tif (a === document || a.ownerDocument == preferredDoc &&\n\t\t\t\t\t\tfind.contains(preferredDoc, a)) {\n\t\t\t\t\t\treturn -1;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\tif (b === document || b.ownerDocument == preferredDoc &&\n\t\t\t\t\t\tfind.contains(preferredDoc, b)) {\n\t\t\t\t\t\treturn 1;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Maintain original order\n\t\t\t\t\treturn sortInput ?\n\t\t\t\t\t\t(indexOf.call(sortInput, a) - indexOf.call(sortInput, b)) :\n\t\t\t\t\t\t0;\n\t\t\t\t}\n\n\t\t\t\treturn compare & 4 ? -1 : 1;\n\t\t\t};\n\n\t\t\treturn document;\n\t\t}\n\n\t\tfind.matches = function (expr, elements) {\n\t\t\treturn find(expr, null, null, elements);\n\t\t};\n\n\t\tfind.matchesSelector = function (elem, expr) {\n\t\t\tsetDocument(elem);\n\n\t\t\tif (documentIsHTML &&\n\t\t\t\t!nonnativeSelectorCache[expr + \" \"] &&\n\t\t\t\t(!rbuggyQSA || !rbuggyQSA.test(expr))) {\n\n\t\t\t\ttry {\n\t\t\t\t\tvar ret = matches.call(elem, expr);\n\n\t\t\t\t\t// IE 9's matchesSelector returns false on disconnected nodes\n\t\t\t\t\tif (ret || support.disconnectedMatch ||\n\n\t\t\t\t\t\t// As well, disconnected nodes are said to be in a document\n\t\t\t\t\t\t// fragment in IE 9\n\t\t\t\t\t\telem.document && elem.document.nodeType !== 11) {\n\t\t\t\t\t\treturn ret;\n\t\t\t\t\t}\n\t\t\t\t} catch (e) {\n\t\t\t\t\tnonnativeSelectorCache(expr, true);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn find(expr, document, null, [elem]).length > 0;\n\t\t};\n\n\t\tfind.contains = function (context, elem) {\n\n\t\t\t// Set document vars if needed\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tif ((context.ownerDocument || context) != document) {\n\t\t\t\tsetDocument(context);\n\t\t\t}\n\t\t\treturn jQuery.contains(context, elem);\n\t\t};\n\n\n\t\tfind.attr = function (elem, name) {\n\n\t\t\t// Set document vars if needed\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tif ((elem.ownerDocument || elem) != document) {\n\t\t\t\tsetDocument(elem);\n\t\t\t}\n\n\t\t\tvar fn = Expr.attrHandle[name.toLowerCase()],\n\n\t\t\t\t// Don't get fooled by Object.prototype properties (see trac-13807)\n\t\t\t\tval = fn && hasOwn.call(Expr.attrHandle, name.toLowerCase()) ?\n\t\t\t\t\tfn(elem, name, !documentIsHTML) :\n\t\t\t\t\tundefined;\n\n\t\t\tif (val !== undefined) {\n\t\t\t\treturn val;\n\t\t\t}\n\n\t\t\treturn elem.getAttribute(name);\n\t\t};\n\n\t\tfind.error = function (msg) {\n\t\t\tthrow new Error(\"Syntax error, unrecognized expression: \" + msg);\n\t\t};\n\n\t\t/**\n\t\t * Document sorting and removing duplicates\n\t\t * @param {ArrayLike} results\n\t\t */\n\t\tjQuery.uniqueSort = function (results) {\n\t\t\tvar elem,\n\t\t\t\tduplicates = [],\n\t\t\t\tj = 0,\n\t\t\t\ti = 0;\n\n\t\t\t// Unless we *know* we can detect duplicates, assume their presence\n\t\t\t//\n\t\t\t// Support: Android <=4.0+\n\t\t\t// Testing for detecting duplicates is unpredictable so instead assume we can't\n\t\t\t// depend on duplicate detection in all browsers without a stable sort.\n\t\t\thasDuplicate = !support.sortStable;\n\t\t\tsortInput = !support.sortStable && slice.call(results, 0);\n\t\t\tsort.call(results, sortOrder);\n\n\t\t\tif (hasDuplicate) {\n\t\t\t\twhile ((elem = results[i++])) {\n\t\t\t\t\tif (elem === results[i]) {\n\t\t\t\t\t\tj = duplicates.push(i);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\twhile (j--) {\n\t\t\t\t\tsplice.call(results, duplicates[j], 1);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Clear input after sorting to release objects\n\t\t\t// See https://github.com/jquery/sizzle/pull/225\n\t\t\tsortInput = null;\n\n\t\t\treturn results;\n\t\t};\n\n\t\tjQuery.fn.uniqueSort = function () {\n\t\t\treturn this.pushStack(jQuery.uniqueSort(slice.apply(this)));\n\t\t};\n\n\t\tExpr = jQuery.expr = {\n\n\t\t\t// Can be adjusted by the user\n\t\t\tcacheLength: 50,\n\n\t\t\tcreatePseudo: markFunction,\n\n\t\t\tmatch: matchExpr,\n\n\t\t\tattrHandle: {},\n\n\t\t\tfind: {},\n\n\t\t\trelative: {\n\t\t\t\t\">\": { dir: \"parentNode\", first: true },\n\t\t\t\t\" \": { dir: \"parentNode\" },\n\t\t\t\t\"+\": { dir: \"previousSibling\", first: true },\n\t\t\t\t\"~\": { dir: \"previousSibling\" }\n\t\t\t},\n\n\t\t\tpreFilter: {\n\t\t\t\tATTR: function (match) {\n\t\t\t\t\tmatch[1] = match[1].replace(runescape, funescape);\n\n\t\t\t\t\t// Move the given value to match[3] whether quoted or unquoted\n\t\t\t\t\tmatch[3] = (match[3] || match[4] || match[5] || \"\")\n\t\t\t\t\t\t.replace(runescape, funescape);\n\n\t\t\t\t\tif (match[2] === \"~=\") {\n\t\t\t\t\t\tmatch[3] = \" \" + match[3] + \" \";\n\t\t\t\t\t}\n\n\t\t\t\t\treturn match.slice(0, 4);\n\t\t\t\t},\n\n\t\t\t\tCHILD: function (match) {\n\n\t\t\t\t\t/* matches from matchExpr[\"CHILD\"]\n\t\t\t\t\t\t1 type (only|nth|...)\n\t\t\t\t\t\t2 what (child|of-type)\n\t\t\t\t\t\t3 argument (even|odd|\\d*|\\d*n([+-]\\d+)?|...)\n\t\t\t\t\t\t4 xn-component of xn+y argument ([+-]?\\d*n|)\n\t\t\t\t\t\t5 sign of xn-component\n\t\t\t\t\t\t6 x of xn-component\n\t\t\t\t\t\t7 sign of y-component\n\t\t\t\t\t\t8 y of y-component\n\t\t\t\t\t*/\n\t\t\t\t\tmatch[1] = match[1].toLowerCase();\n\n\t\t\t\t\tif (match[1].slice(0, 3) === \"nth\") {\n\n\t\t\t\t\t\t// nth-* requires argument\n\t\t\t\t\t\tif (!match[3]) {\n\t\t\t\t\t\t\tfind.error(match[0]);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// numeric x and y parameters for Expr.filter.CHILD\n\t\t\t\t\t\t// remember that false/true cast respectively to 0/1\n\t\t\t\t\t\tmatch[4] = +(match[4] ?\n\t\t\t\t\t\t\tmatch[5] + (match[6] || 1) :\n\t\t\t\t\t\t\t2 * (match[3] === \"even\" || match[3] === \"odd\")\n\t\t\t\t\t\t);\n\t\t\t\t\t\tmatch[5] = +((match[7] + match[8]) || match[3] === \"odd\");\n\n\t\t\t\t\t\t// other types prohibit arguments\n\t\t\t\t\t} else if (match[3]) {\n\t\t\t\t\t\tfind.error(match[0]);\n\t\t\t\t\t}\n\n\t\t\t\t\treturn match;\n\t\t\t\t},\n\n\t\t\t\tPSEUDO: function (match) {\n\t\t\t\t\tvar excess,\n\t\t\t\t\t\tunquoted = !match[6] && match[2];\n\n\t\t\t\t\tif (matchExpr.CHILD.test(match[0])) {\n\t\t\t\t\t\treturn null;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Accept quoted arguments as-is\n\t\t\t\t\tif (match[3]) {\n\t\t\t\t\t\tmatch[2] = match[4] || match[5] || \"\";\n\n\t\t\t\t\t\t// Strip excess characters from unquoted arguments\n\t\t\t\t\t} else if (unquoted && rpseudo.test(unquoted) &&\n\n\t\t\t\t\t\t// Get excess from tokenize (recursively)\n\t\t\t\t\t\t(excess = tokenize(unquoted, true)) &&\n\n\t\t\t\t\t\t// advance to the next closing parenthesis\n\t\t\t\t\t\t(excess = unquoted.indexOf(\")\", unquoted.length - excess) - unquoted.length)) {\n\n\t\t\t\t\t\t// excess is a negative index\n\t\t\t\t\t\tmatch[0] = match[0].slice(0, excess);\n\t\t\t\t\t\tmatch[2] = unquoted.slice(0, excess);\n\t\t\t\t\t}\n\n\t\t\t\t\t// Return only captures needed by the pseudo filter method (type and argument)\n\t\t\t\t\treturn match.slice(0, 3);\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tfilter: {\n\n\t\t\t\tTAG: function (nodeNameSelector) {\n\t\t\t\t\tvar expectedNodeName = nodeNameSelector.replace(runescape, funescape).toLowerCase();\n\t\t\t\t\treturn nodeNameSelector === \"*\" ?\n\t\t\t\t\t\tfunction () {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t} :\n\t\t\t\t\t\tfunction (elem) {\n\t\t\t\t\t\t\treturn nodeName(elem, expectedNodeName);\n\t\t\t\t\t\t};\n\t\t\t\t},\n\n\t\t\t\tCLASS: function (className) {\n\t\t\t\t\tvar pattern = classCache[className + \" \"];\n\n\t\t\t\t\treturn pattern ||\n\t\t\t\t\t\t(pattern = new RegExp(\"(^|\" + whitespace + \")\" + className +\n\t\t\t\t\t\t\t\"(\" + whitespace + \"|$)\")) &&\n\t\t\t\t\t\tclassCache(className, function (elem) {\n\t\t\t\t\t\t\treturn pattern.test(\n\t\t\t\t\t\t\t\ttypeof elem.className === \"string\" && elem.className ||\n\t\t\t\t\t\t\t\ttypeof elem.getAttribute !== \"undefined\" &&\n\t\t\t\t\t\t\t\telem.getAttribute(\"class\") ||\n\t\t\t\t\t\t\t\t\"\"\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t});\n\t\t\t\t},\n\n\t\t\t\tATTR: function (name, operator, check) {\n\t\t\t\t\treturn function (elem) {\n\t\t\t\t\t\tvar result = find.attr(elem, name);\n\n\t\t\t\t\t\tif (result == null) {\n\t\t\t\t\t\t\treturn operator === \"!=\";\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!operator) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tresult += \"\";\n\n\t\t\t\t\t\tif (operator === \"=\") {\n\t\t\t\t\t\t\treturn result === check;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (operator === \"!=\") {\n\t\t\t\t\t\t\treturn result !== check;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (operator === \"^=\") {\n\t\t\t\t\t\t\treturn check && result.indexOf(check) === 0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (operator === \"*=\") {\n\t\t\t\t\t\t\treturn check && result.indexOf(check) > -1;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (operator === \"$=\") {\n\t\t\t\t\t\t\treturn check && result.slice(-check.length) === check;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (operator === \"~=\") {\n\t\t\t\t\t\t\treturn (\" \" + result.replace(rwhitespace, \" \") + \" \")\n\t\t\t\t\t\t\t\t.indexOf(check) > -1;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (operator === \"|=\") {\n\t\t\t\t\t\t\treturn result === check || result.slice(0, check.length + 1) === check + \"-\";\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t};\n\t\t\t\t},\n\n\t\t\t\tCHILD: function (type, what, _argument, first, last) {\n\t\t\t\t\tvar simple = type.slice(0, 3) !== \"nth\",\n\t\t\t\t\t\tforward = type.slice(-4) !== \"last\",\n\t\t\t\t\t\tofType = what === \"of-type\";\n\n\t\t\t\t\treturn first === 1 && last === 0 ?\n\n\t\t\t\t\t\t// Shortcut for :nth-*(n)\n\t\t\t\t\t\tfunction (elem) {\n\t\t\t\t\t\t\treturn !!elem.parentNode;\n\t\t\t\t\t\t} :\n\n\t\t\t\t\t\tfunction (elem, _context, xml) {\n\t\t\t\t\t\t\tvar cache, outerCache, node, nodeIndex, start,\n\t\t\t\t\t\t\t\tdir = simple !== forward ? \"nextSibling\" : \"previousSibling\",\n\t\t\t\t\t\t\t\tparent = elem.parentNode,\n\t\t\t\t\t\t\t\tname = ofType && elem.nodeName.toLowerCase(),\n\t\t\t\t\t\t\t\tuseCache = !xml && !ofType,\n\t\t\t\t\t\t\t\tdiff = false;\n\n\t\t\t\t\t\t\tif (parent) {\n\n\t\t\t\t\t\t\t\t// :(first|last|only)-(child|of-type)\n\t\t\t\t\t\t\t\tif (simple) {\n\t\t\t\t\t\t\t\t\twhile (dir) {\n\t\t\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\t\t\twhile ((node = node[dir])) {\n\t\t\t\t\t\t\t\t\t\t\tif (ofType ?\n\t\t\t\t\t\t\t\t\t\t\t\tnodeName(node, name) :\n\t\t\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1) {\n\n\t\t\t\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t// Reverse direction for :only-* (if we haven't yet done so)\n\t\t\t\t\t\t\t\t\t\tstart = dir = type === \"only\" && !start && \"nextSibling\";\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tstart = [forward ? parent.firstChild : parent.lastChild];\n\n\t\t\t\t\t\t\t\t// non-xml :nth-child(...) stores cache data on `parent`\n\t\t\t\t\t\t\t\tif (forward && useCache) {\n\n\t\t\t\t\t\t\t\t\t// Seek `elem` from a previously-cached index\n\t\t\t\t\t\t\t\t\touterCache = parent[expando] || (parent[expando] = {});\n\t\t\t\t\t\t\t\t\tcache = outerCache[type] || [];\n\t\t\t\t\t\t\t\t\tnodeIndex = cache[0] === dirruns && cache[1];\n\t\t\t\t\t\t\t\t\tdiff = nodeIndex && cache[2];\n\t\t\t\t\t\t\t\t\tnode = nodeIndex && parent.childNodes[nodeIndex];\n\n\t\t\t\t\t\t\t\t\twhile ((node = ++nodeIndex && node && node[dir] ||\n\n\t\t\t\t\t\t\t\t\t\t// Fallback to seeking `elem` from the start\n\t\t\t\t\t\t\t\t\t\t(diff = nodeIndex = 0) || start.pop())) {\n\n\t\t\t\t\t\t\t\t\t\t// When found, cache indexes on `parent` and break\n\t\t\t\t\t\t\t\t\t\tif (node.nodeType === 1 && ++diff && node === elem) {\n\t\t\t\t\t\t\t\t\t\t\touterCache[type] = [dirruns, nodeIndex, diff];\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t// Use previously-cached element index if available\n\t\t\t\t\t\t\t\t\tif (useCache) {\n\t\t\t\t\t\t\t\t\t\touterCache = elem[expando] || (elem[expando] = {});\n\t\t\t\t\t\t\t\t\t\tcache = outerCache[type] || [];\n\t\t\t\t\t\t\t\t\t\tnodeIndex = cache[0] === dirruns && cache[1];\n\t\t\t\t\t\t\t\t\t\tdiff = nodeIndex;\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// xml :nth-child(...)\n\t\t\t\t\t\t\t\t\t// or :nth-last-child(...) or :nth(-last)?-of-type(...)\n\t\t\t\t\t\t\t\t\tif (diff === false) {\n\n\t\t\t\t\t\t\t\t\t\t// Use the same loop as above to seek `elem` from the start\n\t\t\t\t\t\t\t\t\t\twhile ((node = ++nodeIndex && node && node[dir] ||\n\t\t\t\t\t\t\t\t\t\t\t(diff = nodeIndex = 0) || start.pop())) {\n\n\t\t\t\t\t\t\t\t\t\t\tif ((ofType ?\n\t\t\t\t\t\t\t\t\t\t\t\tnodeName(node, name) :\n\t\t\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1) &&\n\t\t\t\t\t\t\t\t\t\t\t\t++diff) {\n\n\t\t\t\t\t\t\t\t\t\t\t\t// Cache the index of each encountered element\n\t\t\t\t\t\t\t\t\t\t\t\tif (useCache) {\n\t\t\t\t\t\t\t\t\t\t\t\t\touterCache = node[expando] ||\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t(node[expando] = {});\n\t\t\t\t\t\t\t\t\t\t\t\t\touterCache[type] = [dirruns, diff];\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\tif (node === elem) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t// Incorporate the offset, then check against cycle size\n\t\t\t\t\t\t\t\tdiff -= last;\n\t\t\t\t\t\t\t\treturn diff === first || (diff % first === 0 && diff / first >= 0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\t\t\t\t},\n\n\t\t\t\tPSEUDO: function (pseudo, argument) {\n\n\t\t\t\t\t// pseudo-class names are case-insensitive\n\t\t\t\t\t// https://www.w3.org/TR/selectors/#pseudo-classes\n\t\t\t\t\t// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters\n\t\t\t\t\t// Remember that setFilters inherits from pseudos\n\t\t\t\t\tvar args,\n\t\t\t\t\t\tfn = Expr.pseudos[pseudo] || Expr.setFilters[pseudo.toLowerCase()] ||\n\t\t\t\t\t\t\tfind.error(\"unsupported pseudo: \" + pseudo);\n\n\t\t\t\t\t// The user may use createPseudo to indicate that\n\t\t\t\t\t// arguments are needed to create the filter function\n\t\t\t\t\t// just as jQuery does\n\t\t\t\t\tif (fn[expando]) {\n\t\t\t\t\t\treturn fn(argument);\n\t\t\t\t\t}\n\n\t\t\t\t\t// But maintain support for old signatures\n\t\t\t\t\tif (fn.length > 1) {\n\t\t\t\t\t\targs = [pseudo, pseudo, \"\", argument];\n\t\t\t\t\t\treturn Expr.setFilters.hasOwnProperty(pseudo.toLowerCase()) ?\n\t\t\t\t\t\t\tmarkFunction(function (seed, matches) {\n\t\t\t\t\t\t\t\tvar idx,\n\t\t\t\t\t\t\t\t\tmatched = fn(seed, argument),\n\t\t\t\t\t\t\t\t\ti = matched.length;\n\t\t\t\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\t\t\t\tidx = indexOf.call(seed, matched[i]);\n\t\t\t\t\t\t\t\t\tseed[idx] = !(matches[idx] = matched[i]);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}) :\n\t\t\t\t\t\t\tfunction (elem) {\n\t\t\t\t\t\t\t\treturn fn(elem, 0, args);\n\t\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\treturn fn;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tpseudos: {\n\n\t\t\t\t// Potentially complex pseudos\n\t\t\t\tnot: markFunction(function (selector) {\n\n\t\t\t\t\t// Trim the selector passed to compile\n\t\t\t\t\t// to avoid treating leading and trailing\n\t\t\t\t\t// spaces as combinators\n\t\t\t\t\tvar input = [],\n\t\t\t\t\t\tresults = [],\n\t\t\t\t\t\tmatcher = compile(selector.replace(rtrimCSS, \"$1\"));\n\n\t\t\t\t\treturn matcher[expando] ?\n\t\t\t\t\t\tmarkFunction(function (seed, matches, _context, xml) {\n\t\t\t\t\t\t\tvar elem,\n\t\t\t\t\t\t\t\tunmatched = matcher(seed, null, xml, []),\n\t\t\t\t\t\t\t\ti = seed.length;\n\n\t\t\t\t\t\t\t// Match elements unmatched by `matcher`\n\t\t\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\t\t\tif ((elem = unmatched[i])) {\n\t\t\t\t\t\t\t\t\tseed[i] = !(matches[i] = elem);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}) :\n\t\t\t\t\t\tfunction (elem, _context, xml) {\n\t\t\t\t\t\t\tinput[0] = elem;\n\t\t\t\t\t\t\tmatcher(input, null, xml, results);\n\n\t\t\t\t\t\t\t// Don't keep the element\n\t\t\t\t\t\t\t// (see https://github.com/jquery/sizzle/issues/299)\n\t\t\t\t\t\t\tinput[0] = null;\n\t\t\t\t\t\t\treturn !results.pop();\n\t\t\t\t\t\t};\n\t\t\t\t}),\n\n\t\t\t\thas: markFunction(function (selector) {\n\t\t\t\t\treturn function (elem) {\n\t\t\t\t\t\treturn find(selector, elem).length > 0;\n\t\t\t\t\t};\n\t\t\t\t}),\n\n\t\t\t\tcontains: markFunction(function (text) {\n\t\t\t\t\ttext = text.replace(runescape, funescape);\n\t\t\t\t\treturn function (elem) {\n\t\t\t\t\t\treturn (elem.textContent || jQuery.text(elem)).indexOf(text) > -1;\n\t\t\t\t\t};\n\t\t\t\t}),\n\n\t\t\t\t// \"Whether an element is represented by a :lang() selector\n\t\t\t\t// is based solely on the element's language value\n\t\t\t\t// being equal to the identifier C,\n\t\t\t\t// or beginning with the identifier C immediately followed by \"-\".\n\t\t\t\t// The matching of C against the element's language value is performed case-insensitively.\n\t\t\t\t// The identifier C does not have to be a valid language name.\"\n\t\t\t\t// https://www.w3.org/TR/selectors/#lang-pseudo\n\t\t\t\tlang: markFunction(function (lang) {\n\n\t\t\t\t\t// lang value must be a valid identifier\n\t\t\t\t\tif (!ridentifier.test(lang || \"\")) {\n\t\t\t\t\t\tfind.error(\"unsupported lang: \" + lang);\n\t\t\t\t\t}\n\t\t\t\t\tlang = lang.replace(runescape, funescape).toLowerCase();\n\t\t\t\t\treturn function (elem) {\n\t\t\t\t\t\tvar elemLang;\n\t\t\t\t\t\tdo {\n\t\t\t\t\t\t\tif ((elemLang = documentIsHTML ?\n\t\t\t\t\t\t\t\telem.lang :\n\t\t\t\t\t\t\t\telem.getAttribute(\"xml:lang\") || elem.getAttribute(\"lang\"))) {\n\n\t\t\t\t\t\t\t\telemLang = elemLang.toLowerCase();\n\t\t\t\t\t\t\t\treturn elemLang === lang || elemLang.indexOf(lang + \"-\") === 0;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} while ((elem = elem.parentNode) && elem.nodeType === 1);\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t};\n\t\t\t\t}),\n\n\t\t\t\t// Miscellaneous\n\t\t\t\ttarget: function (elem) {\n\t\t\t\t\tvar hash = window.location && window.location.hash;\n\t\t\t\t\treturn hash && hash.slice(1) === elem.id;\n\t\t\t\t},\n\n\t\t\t\troot: function (elem) {\n\t\t\t\t\treturn elem === documentElement;\n\t\t\t\t},\n\n\t\t\t\tfocus: function (elem) {\n\t\t\t\t\treturn elem === safeActiveElement() &&\n\t\t\t\t\t\tdocument.hasFocus() &&\n\t\t\t\t\t\t!!(elem.type || elem.href || ~elem.tabIndex);\n\t\t\t\t},\n\n\t\t\t\t// Boolean properties\n\t\t\t\tenabled: createDisabledPseudo(false),\n\t\t\t\tdisabled: createDisabledPseudo(true),\n\n\t\t\t\tchecked: function (elem) {\n\n\t\t\t\t\t// In CSS3, :checked should return both checked and selected elements\n\t\t\t\t\t// https://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\t\t\treturn (nodeName(elem, \"input\") && !!elem.checked) ||\n\t\t\t\t\t\t(nodeName(elem, \"option\") && !!elem.selected);\n\t\t\t\t},\n\n\t\t\t\tselected: function (elem) {\n\n\t\t\t\t\t// Support: IE <=11+\n\t\t\t\t\t// Accessing the selectedIndex property\n\t\t\t\t\t// forces the browser to treat the default option as\n\t\t\t\t\t// selected when in an optgroup.\n\t\t\t\t\tif (elem.parentNode) {\n\t\t\t\t\t\t// eslint-disable-next-line no-unused-expressions\n\t\t\t\t\t\telem.parentNode.selectedIndex;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn elem.selected === true;\n\t\t\t\t},\n\n\t\t\t\t// Contents\n\t\t\t\tempty: function (elem) {\n\n\t\t\t\t\t// https://www.w3.org/TR/selectors/#empty-pseudo\n\t\t\t\t\t// :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),\n\t\t\t\t\t//   but not by others (comment: 8; processing instruction: 7; etc.)\n\t\t\t\t\t// nodeType < 6 works because attributes (2) do not appear as children\n\t\t\t\t\tfor (elem = elem.firstChild; elem; elem = elem.nextSibling) {\n\t\t\t\t\t\tif (elem.nodeType < 6) {\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn true;\n\t\t\t\t},\n\n\t\t\t\tparent: function (elem) {\n\t\t\t\t\treturn !Expr.pseudos.empty(elem);\n\t\t\t\t},\n\n\t\t\t\t// Element/input types\n\t\t\t\theader: function (elem) {\n\t\t\t\t\treturn rheader.test(elem.nodeName);\n\t\t\t\t},\n\n\t\t\t\tinput: function (elem) {\n\t\t\t\t\treturn rinputs.test(elem.nodeName);\n\t\t\t\t},\n\n\t\t\t\tbutton: function (elem) {\n\t\t\t\t\treturn nodeName(elem, \"input\") && elem.type === \"button\" ||\n\t\t\t\t\t\tnodeName(elem, \"button\");\n\t\t\t\t},\n\n\t\t\t\ttext: function (elem) {\n\t\t\t\t\tvar attr;\n\t\t\t\t\treturn nodeName(elem, \"input\") && elem.type === \"text\" &&\n\n\t\t\t\t\t\t// Support: IE <10 only\n\t\t\t\t\t\t// New HTML5 attribute values (e.g., \"search\") appear\n\t\t\t\t\t\t// with elem.type === \"text\"\n\t\t\t\t\t\t((attr = elem.getAttribute(\"type\")) == null ||\n\t\t\t\t\t\t\tattr.toLowerCase() === \"text\");\n\t\t\t\t},\n\n\t\t\t\t// Position-in-collection\n\t\t\t\tfirst: createPositionalPseudo(function () {\n\t\t\t\t\treturn [0];\n\t\t\t\t}),\n\n\t\t\t\tlast: createPositionalPseudo(function (_matchIndexes, length) {\n\t\t\t\t\treturn [length - 1];\n\t\t\t\t}),\n\n\t\t\t\teq: createPositionalPseudo(function (_matchIndexes, length, argument) {\n\t\t\t\t\treturn [argument < 0 ? argument + length : argument];\n\t\t\t\t}),\n\n\t\t\t\teven: createPositionalPseudo(function (matchIndexes, length) {\n\t\t\t\t\tvar i = 0;\n\t\t\t\t\tfor (; i < length; i += 2) {\n\t\t\t\t\t\tmatchIndexes.push(i);\n\t\t\t\t\t}\n\t\t\t\t\treturn matchIndexes;\n\t\t\t\t}),\n\n\t\t\t\todd: createPositionalPseudo(function (matchIndexes, length) {\n\t\t\t\t\tvar i = 1;\n\t\t\t\t\tfor (; i < length; i += 2) {\n\t\t\t\t\t\tmatchIndexes.push(i);\n\t\t\t\t\t}\n\t\t\t\t\treturn matchIndexes;\n\t\t\t\t}),\n\n\t\t\t\tlt: createPositionalPseudo(function (matchIndexes, length, argument) {\n\t\t\t\t\tvar i;\n\n\t\t\t\t\tif (argument < 0) {\n\t\t\t\t\t\ti = argument + length;\n\t\t\t\t\t} else if (argument > length) {\n\t\t\t\t\t\ti = length;\n\t\t\t\t\t} else {\n\t\t\t\t\t\ti = argument;\n\t\t\t\t\t}\n\n\t\t\t\t\tfor (; --i >= 0;) {\n\t\t\t\t\t\tmatchIndexes.push(i);\n\t\t\t\t\t}\n\t\t\t\t\treturn matchIndexes;\n\t\t\t\t}),\n\n\t\t\t\tgt: createPositionalPseudo(function (matchIndexes, length, argument) {\n\t\t\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\t\t\tfor (; ++i < length;) {\n\t\t\t\t\t\tmatchIndexes.push(i);\n\t\t\t\t\t}\n\t\t\t\t\treturn matchIndexes;\n\t\t\t\t})\n\t\t\t}\n\t\t};\n\n\t\tExpr.pseudos.nth = Expr.pseudos.eq;\n\n\t\t// Add button/input type pseudos\n\t\tfor (i in { radio: true, checkbox: true, file: true, password: true, image: true }) {\n\t\t\tExpr.pseudos[i] = createInputPseudo(i);\n\t\t}\n\t\tfor (i in { submit: true, reset: true }) {\n\t\t\tExpr.pseudos[i] = createButtonPseudo(i);\n\t\t}\n\n\t\t// Easy API for creating new setFilters\n\t\tfunction setFilters() { }\n\t\tsetFilters.prototype = Expr.filters = Expr.pseudos;\n\t\tExpr.setFilters = new setFilters();\n\n\t\tfunction tokenize(selector, parseOnly) {\n\t\t\tvar matched, match, tokens, type,\n\t\t\t\tsoFar, groups, preFilters,\n\t\t\t\tcached = tokenCache[selector + \" \"];\n\n\t\t\tif (cached) {\n\t\t\t\treturn parseOnly ? 0 : cached.slice(0);\n\t\t\t}\n\n\t\t\tsoFar = selector;\n\t\t\tgroups = [];\n\t\t\tpreFilters = Expr.preFilter;\n\n\t\t\twhile (soFar) {\n\n\t\t\t\t// Comma and first run\n\t\t\t\tif (!matched || (match = rcomma.exec(soFar))) {\n\t\t\t\t\tif (match) {\n\n\t\t\t\t\t\t// Don't consume trailing commas as valid\n\t\t\t\t\t\tsoFar = soFar.slice(match[0].length) || soFar;\n\t\t\t\t\t}\n\t\t\t\t\tgroups.push((tokens = []));\n\t\t\t\t}\n\n\t\t\t\tmatched = false;\n\n\t\t\t\t// Combinators\n\t\t\t\tif ((match = rleadingCombinator.exec(soFar))) {\n\t\t\t\t\tmatched = match.shift();\n\t\t\t\t\ttokens.push({\n\t\t\t\t\t\tvalue: matched,\n\n\t\t\t\t\t\t// Cast descendant combinators to space\n\t\t\t\t\t\ttype: match[0].replace(rtrimCSS, \" \")\n\t\t\t\t\t});\n\t\t\t\t\tsoFar = soFar.slice(matched.length);\n\t\t\t\t}\n\n\t\t\t\t// Filters\n\t\t\t\tfor (type in Expr.filter) {\n\t\t\t\t\tif ((match = matchExpr[type].exec(soFar)) && (!preFilters[type] ||\n\t\t\t\t\t\t(match = preFilters[type](match)))) {\n\t\t\t\t\t\tmatched = match.shift();\n\t\t\t\t\t\ttokens.push({\n\t\t\t\t\t\t\tvalue: matched,\n\t\t\t\t\t\t\ttype: type,\n\t\t\t\t\t\t\tmatches: match\n\t\t\t\t\t\t});\n\t\t\t\t\t\tsoFar = soFar.slice(matched.length);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (!matched) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Return the length of the invalid excess\n\t\t\t// if we're just parsing\n\t\t\t// Otherwise, throw an error or return tokens\n\t\t\tif (parseOnly) {\n\t\t\t\treturn soFar.length;\n\t\t\t}\n\n\t\t\treturn soFar ?\n\t\t\t\tfind.error(selector) :\n\n\t\t\t\t// Cache the tokens\n\t\t\t\ttokenCache(selector, groups).slice(0);\n\t\t}\n\n\t\tfunction toSelector(tokens) {\n\t\t\tvar i = 0,\n\t\t\t\tlen = tokens.length,\n\t\t\t\tselector = \"\";\n\t\t\tfor (; i < len; i++) {\n\t\t\t\tselector += tokens[i].value;\n\t\t\t}\n\t\t\treturn selector;\n\t\t}\n\n\t\tfunction addCombinator(matcher, combinator, base) {\n\t\t\tvar dir = combinator.dir,\n\t\t\t\tskip = combinator.next,\n\t\t\t\tkey = skip || dir,\n\t\t\t\tcheckNonElements = base && key === \"parentNode\",\n\t\t\t\tdoneName = done++;\n\n\t\t\treturn combinator.first ?\n\n\t\t\t\t// Check against closest ancestor/preceding element\n\t\t\t\tfunction (elem, context, xml) {\n\t\t\t\t\twhile ((elem = elem[dir])) {\n\t\t\t\t\t\tif (elem.nodeType === 1 || checkNonElements) {\n\t\t\t\t\t\t\treturn matcher(elem, context, xml);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn false;\n\t\t\t\t} :\n\n\t\t\t\t// Check against all ancestor/preceding elements\n\t\t\t\tfunction (elem, context, xml) {\n\t\t\t\t\tvar oldCache, outerCache,\n\t\t\t\t\t\tnewCache = [dirruns, doneName];\n\n\t\t\t\t\t// We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching\n\t\t\t\t\tif (xml) {\n\t\t\t\t\t\twhile ((elem = elem[dir])) {\n\t\t\t\t\t\t\tif (elem.nodeType === 1 || checkNonElements) {\n\t\t\t\t\t\t\t\tif (matcher(elem, context, xml)) {\n\t\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\twhile ((elem = elem[dir])) {\n\t\t\t\t\t\t\tif (elem.nodeType === 1 || checkNonElements) {\n\t\t\t\t\t\t\t\touterCache = elem[expando] || (elem[expando] = {});\n\n\t\t\t\t\t\t\t\tif (skip && nodeName(elem, skip)) {\n\t\t\t\t\t\t\t\t\telem = elem[dir] || elem;\n\t\t\t\t\t\t\t\t} else if ((oldCache = outerCache[key]) &&\n\t\t\t\t\t\t\t\t\toldCache[0] === dirruns && oldCache[1] === doneName) {\n\n\t\t\t\t\t\t\t\t\t// Assign to newCache so results back-propagate to previous elements\n\t\t\t\t\t\t\t\t\treturn (newCache[2] = oldCache[2]);\n\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t// Reuse newcache so results back-propagate to previous elements\n\t\t\t\t\t\t\t\t\touterCache[key] = newCache;\n\n\t\t\t\t\t\t\t\t\t// A match means we're done; a fail means we have to keep checking\n\t\t\t\t\t\t\t\t\tif ((newCache[2] = matcher(elem, context, xml))) {\n\t\t\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn false;\n\t\t\t\t};\n\t\t}\n\n\t\tfunction elementMatcher(matchers) {\n\t\t\treturn matchers.length > 1 ?\n\t\t\t\tfunction (elem, context, xml) {\n\t\t\t\t\tvar i = matchers.length;\n\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\tif (!matchers[i](elem, context, xml)) {\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn true;\n\t\t\t\t} :\n\t\t\t\tmatchers[0];\n\t\t}\n\n\t\tfunction multipleContexts(selector, contexts, results) {\n\t\t\tvar i = 0,\n\t\t\t\tlen = contexts.length;\n\t\t\tfor (; i < len; i++) {\n\t\t\t\tfind(selector, contexts[i], results);\n\t\t\t}\n\t\t\treturn results;\n\t\t}\n\n\t\tfunction condense(unmatched, map, filter, context, xml) {\n\t\t\tvar elem,\n\t\t\t\tnewUnmatched = [],\n\t\t\t\ti = 0,\n\t\t\t\tlen = unmatched.length,\n\t\t\t\tmapped = map != null;\n\n\t\t\tfor (; i < len; i++) {\n\t\t\t\tif ((elem = unmatched[i])) {\n\t\t\t\t\tif (!filter || filter(elem, context, xml)) {\n\t\t\t\t\t\tnewUnmatched.push(elem);\n\t\t\t\t\t\tif (mapped) {\n\t\t\t\t\t\t\tmap.push(i);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn newUnmatched;\n\t\t}\n\n\t\tfunction setMatcher(preFilter, selector, matcher, postFilter, postFinder, postSelector) {\n\t\t\tif (postFilter && !postFilter[expando]) {\n\t\t\t\tpostFilter = setMatcher(postFilter);\n\t\t\t}\n\t\t\tif (postFinder && !postFinder[expando]) {\n\t\t\t\tpostFinder = setMatcher(postFinder, postSelector);\n\t\t\t}\n\t\t\treturn markFunction(function (seed, results, context, xml) {\n\t\t\t\tvar temp, i, elem, matcherOut,\n\t\t\t\t\tpreMap = [],\n\t\t\t\t\tpostMap = [],\n\t\t\t\t\tpreexisting = results.length,\n\n\t\t\t\t\t// Get initial elements from seed or context\n\t\t\t\t\telems = seed ||\n\t\t\t\t\t\tmultipleContexts(selector || \"*\",\n\t\t\t\t\t\t\tcontext.nodeType ? [context] : context, []),\n\n\t\t\t\t\t// Prefilter to get matcher input, preserving a map for seed-results synchronization\n\t\t\t\t\tmatcherIn = preFilter && (seed || !selector) ?\n\t\t\t\t\t\tcondense(elems, preMap, preFilter, context, xml) :\n\t\t\t\t\t\telems;\n\n\t\t\t\tif (matcher) {\n\n\t\t\t\t\t// If we have a postFinder, or filtered seed, or non-seed postFilter\n\t\t\t\t\t// or preexisting results,\n\t\t\t\t\tmatcherOut = postFinder || (seed ? preFilter : preexisting || postFilter) ?\n\n\t\t\t\t\t\t// ...intermediate processing is necessary\n\t\t\t\t\t\t[] :\n\n\t\t\t\t\t\t// ...otherwise use results directly\n\t\t\t\t\t\tresults;\n\n\t\t\t\t\t// Find primary matches\n\t\t\t\t\tmatcher(matcherIn, matcherOut, context, xml);\n\t\t\t\t} else {\n\t\t\t\t\tmatcherOut = matcherIn;\n\t\t\t\t}\n\n\t\t\t\t// Apply postFilter\n\t\t\t\tif (postFilter) {\n\t\t\t\t\ttemp = condense(matcherOut, postMap);\n\t\t\t\t\tpostFilter(temp, [], context, xml);\n\n\t\t\t\t\t// Un-match failing elements by moving them back to matcherIn\n\t\t\t\t\ti = temp.length;\n\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\tif ((elem = temp[i])) {\n\t\t\t\t\t\t\tmatcherOut[postMap[i]] = !(matcherIn[postMap[i]] = elem);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (seed) {\n\t\t\t\t\tif (postFinder || preFilter) {\n\t\t\t\t\t\tif (postFinder) {\n\n\t\t\t\t\t\t\t// Get the final matcherOut by condensing this intermediate into postFinder contexts\n\t\t\t\t\t\t\ttemp = [];\n\t\t\t\t\t\t\ti = matcherOut.length;\n\t\t\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\t\t\tif ((elem = matcherOut[i])) {\n\n\t\t\t\t\t\t\t\t\t// Restore matcherIn since elem is not yet a final match\n\t\t\t\t\t\t\t\t\ttemp.push((matcherIn[i] = elem));\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tpostFinder(null, (matcherOut = []), temp, xml);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Move matched elements from seed to results to keep them synchronized\n\t\t\t\t\t\ti = matcherOut.length;\n\t\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\t\tif ((elem = matcherOut[i]) &&\n\t\t\t\t\t\t\t\t(temp = postFinder ? indexOf.call(seed, elem) : preMap[i]) > -1) {\n\n\t\t\t\t\t\t\t\tseed[temp] = !(results[temp] = elem);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Add elements to results, through postFinder if defined\n\t\t\t\t} else {\n\t\t\t\t\tmatcherOut = condense(\n\t\t\t\t\t\tmatcherOut === results ?\n\t\t\t\t\t\t\tmatcherOut.splice(preexisting, matcherOut.length) :\n\t\t\t\t\t\t\tmatcherOut\n\t\t\t\t\t);\n\t\t\t\t\tif (postFinder) {\n\t\t\t\t\t\tpostFinder(null, results, matcherOut, xml);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tpush.apply(results, matcherOut);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tfunction matcherFromTokens(tokens) {\n\t\t\tvar checkContext, matcher, j,\n\t\t\t\tlen = tokens.length,\n\t\t\t\tleadingRelative = Expr.relative[tokens[0].type],\n\t\t\t\timplicitRelative = leadingRelative || Expr.relative[\" \"],\n\t\t\t\ti = leadingRelative ? 1 : 0,\n\n\t\t\t\t// The foundational matcher ensures that elements are reachable from top-level context(s)\n\t\t\t\tmatchContext = addCombinator(function (elem) {\n\t\t\t\t\treturn elem === checkContext;\n\t\t\t\t}, implicitRelative, true),\n\t\t\t\tmatchAnyContext = addCombinator(function (elem) {\n\t\t\t\t\treturn indexOf.call(checkContext, elem) > -1;\n\t\t\t\t}, implicitRelative, true),\n\t\t\t\tmatchers = [function (elem, context, xml) {\n\n\t\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\tvar ret = (!leadingRelative && (xml || context != outermostContext)) || (\n\t\t\t\t\t\t(checkContext = context).nodeType ?\n\t\t\t\t\t\t\tmatchContext(elem, context, xml) :\n\t\t\t\t\t\t\tmatchAnyContext(elem, context, xml));\n\n\t\t\t\t\t// Avoid hanging onto element\n\t\t\t\t\t// (see https://github.com/jquery/sizzle/issues/299)\n\t\t\t\t\tcheckContext = null;\n\t\t\t\t\treturn ret;\n\t\t\t\t}];\n\n\t\t\tfor (; i < len; i++) {\n\t\t\t\tif ((matcher = Expr.relative[tokens[i].type])) {\n\t\t\t\t\tmatchers = [addCombinator(elementMatcher(matchers), matcher)];\n\t\t\t\t} else {\n\t\t\t\t\tmatcher = Expr.filter[tokens[i].type].apply(null, tokens[i].matches);\n\n\t\t\t\t\t// Return special upon seeing a positional matcher\n\t\t\t\t\tif (matcher[expando]) {\n\n\t\t\t\t\t\t// Find the next relative operator (if any) for proper handling\n\t\t\t\t\t\tj = ++i;\n\t\t\t\t\t\tfor (; j < len; j++) {\n\t\t\t\t\t\t\tif (Expr.relative[tokens[j].type]) {\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn setMatcher(\n\t\t\t\t\t\t\ti > 1 && elementMatcher(matchers),\n\t\t\t\t\t\t\ti > 1 && toSelector(\n\n\t\t\t\t\t\t\t\t// If the preceding token was a descendant combinator, insert an implicit any-element `*`\n\t\t\t\t\t\t\t\ttokens.slice(0, i - 1)\n\t\t\t\t\t\t\t\t\t.concat({ value: tokens[i - 2].type === \" \" ? \"*\" : \"\" })\n\t\t\t\t\t\t\t).replace(rtrimCSS, \"$1\"),\n\t\t\t\t\t\t\tmatcher,\n\t\t\t\t\t\t\ti < j && matcherFromTokens(tokens.slice(i, j)),\n\t\t\t\t\t\t\tj < len && matcherFromTokens((tokens = tokens.slice(j))),\n\t\t\t\t\t\t\tj < len && toSelector(tokens)\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\tmatchers.push(matcher);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn elementMatcher(matchers);\n\t\t}\n\n\t\tfunction matcherFromGroupMatchers(elementMatchers, setMatchers) {\n\t\t\tvar bySet = setMatchers.length > 0,\n\t\t\t\tbyElement = elementMatchers.length > 0,\n\t\t\t\tsuperMatcher = function (seed, context, xml, results, outermost) {\n\t\t\t\t\tvar elem, j, matcher,\n\t\t\t\t\t\tmatchedCount = 0,\n\t\t\t\t\t\ti = \"0\",\n\t\t\t\t\t\tunmatched = seed && [],\n\t\t\t\t\t\tsetMatched = [],\n\t\t\t\t\t\tcontextBackup = outermostContext,\n\n\t\t\t\t\t\t// We must always have either seed elements or outermost context\n\t\t\t\t\t\telems = seed || byElement && Expr.find.TAG(\"*\", outermost),\n\n\t\t\t\t\t\t// Use integer dirruns iff this is the outermost matcher\n\t\t\t\t\t\tdirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1),\n\t\t\t\t\t\tlen = elems.length;\n\n\t\t\t\t\tif (outermost) {\n\n\t\t\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\t\toutermostContext = context == document || context || outermost;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Add elements passing elementMatchers directly to results\n\t\t\t\t\t// Support: iOS <=7 - 9 only\n\t\t\t\t\t// Tolerate NodeList properties (IE: \"length\"; Safari: <number>) matching\n\t\t\t\t\t// elements by id. (see trac-14142)\n\t\t\t\t\tfor (; i !== len && (elem = elems[i]) != null; i++) {\n\t\t\t\t\t\tif (byElement && elem) {\n\t\t\t\t\t\t\tj = 0;\n\n\t\t\t\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\t\t\tif (!context && elem.ownerDocument != document) {\n\t\t\t\t\t\t\t\tsetDocument(elem);\n\t\t\t\t\t\t\t\txml = !documentIsHTML;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\twhile ((matcher = elementMatchers[j++])) {\n\t\t\t\t\t\t\t\tif (matcher(elem, context || document, xml)) {\n\t\t\t\t\t\t\t\t\tpush.call(results, elem);\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (outermost) {\n\t\t\t\t\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Track unmatched elements for set filters\n\t\t\t\t\t\tif (bySet) {\n\n\t\t\t\t\t\t\t// They will have gone through all possible matchers\n\t\t\t\t\t\t\tif ((elem = !matcher && elem)) {\n\t\t\t\t\t\t\t\tmatchedCount--;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Lengthen the array for every element, matched or not\n\t\t\t\t\t\t\tif (seed) {\n\t\t\t\t\t\t\t\tunmatched.push(elem);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// `i` is now the count of elements visited above, and adding it to `matchedCount`\n\t\t\t\t\t// makes the latter nonnegative.\n\t\t\t\t\tmatchedCount += i;\n\n\t\t\t\t\t// Apply set filters to unmatched elements\n\t\t\t\t\t// NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`\n\t\t\t\t\t// equals `i`), unless we didn't visit _any_ elements in the above loop because we have\n\t\t\t\t\t// no element matchers and no seed.\n\t\t\t\t\t// Incrementing an initially-string \"0\" `i` allows `i` to remain a string only in that\n\t\t\t\t\t// case, which will result in a \"00\" `matchedCount` that differs from `i` but is also\n\t\t\t\t\t// numerically zero.\n\t\t\t\t\tif (bySet && i !== matchedCount) {\n\t\t\t\t\t\tj = 0;\n\t\t\t\t\t\twhile ((matcher = setMatchers[j++])) {\n\t\t\t\t\t\t\tmatcher(unmatched, setMatched, context, xml);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (seed) {\n\n\t\t\t\t\t\t\t// Reintegrate element matches to eliminate the need for sorting\n\t\t\t\t\t\t\tif (matchedCount > 0) {\n\t\t\t\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\t\t\t\tif (!(unmatched[i] || setMatched[i])) {\n\t\t\t\t\t\t\t\t\t\tsetMatched[i] = pop.call(results);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Discard index placeholder values to get only actual matches\n\t\t\t\t\t\t\tsetMatched = condense(setMatched);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Add matches to results\n\t\t\t\t\t\tpush.apply(results, setMatched);\n\n\t\t\t\t\t\t// Seedless set matches succeeding multiple successful matchers stipulate sorting\n\t\t\t\t\t\tif (outermost && !seed && setMatched.length > 0 &&\n\t\t\t\t\t\t\t(matchedCount + setMatchers.length) > 1) {\n\n\t\t\t\t\t\t\tjQuery.uniqueSort(results);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Override manipulation of globals by nested matchers\n\t\t\t\t\tif (outermost) {\n\t\t\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\t\t\toutermostContext = contextBackup;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn unmatched;\n\t\t\t\t};\n\n\t\t\treturn bySet ?\n\t\t\t\tmarkFunction(superMatcher) :\n\t\t\t\tsuperMatcher;\n\t\t}\n\n\t\tfunction compile(selector, match /* Internal Use Only */) {\n\t\t\tvar i,\n\t\t\t\tsetMatchers = [],\n\t\t\t\telementMatchers = [],\n\t\t\t\tcached = compilerCache[selector + \" \"];\n\n\t\t\tif (!cached) {\n\n\t\t\t\t// Generate a function of recursive functions that can be used to check each element\n\t\t\t\tif (!match) {\n\t\t\t\t\tmatch = tokenize(selector);\n\t\t\t\t}\n\t\t\t\ti = match.length;\n\t\t\t\twhile (i--) {\n\t\t\t\t\tcached = matcherFromTokens(match[i]);\n\t\t\t\t\tif (cached[expando]) {\n\t\t\t\t\t\tsetMatchers.push(cached);\n\t\t\t\t\t} else {\n\t\t\t\t\t\telementMatchers.push(cached);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Cache the compiled function\n\t\t\t\tcached = compilerCache(selector,\n\t\t\t\t\tmatcherFromGroupMatchers(elementMatchers, setMatchers));\n\n\t\t\t\t// Save selector and tokenization\n\t\t\t\tcached.selector = selector;\n\t\t\t}\n\t\t\treturn cached;\n\t\t}\n\n\t\t/**\n\t\t * A low-level selection function that works with jQuery's compiled\n\t\t *  selector functions\n\t\t * @param {String|Function} selector A selector or a pre-compiled\n\t\t *  selector function built with jQuery selector compile\n\t\t * @param {Element} context\n\t\t * @param {Array} [results]\n\t\t * @param {Array} [seed] A set of elements to match against\n\t\t */\n\t\tfunction select(selector, context, results, seed) {\n\t\t\tvar i, tokens, token, type, find,\n\t\t\t\tcompiled = typeof selector === \"function\" && selector,\n\t\t\t\tmatch = !seed && tokenize((selector = compiled.selector || selector));\n\n\t\t\tresults = results || [];\n\n\t\t\t// Try to minimize operations if there is only one selector in the list and no seed\n\t\t\t// (the latter of which guarantees us context)\n\t\t\tif (match.length === 1) {\n\n\t\t\t\t// Reduce context if the leading compound selector is an ID\n\t\t\t\ttokens = match[0] = match[0].slice(0);\n\t\t\t\tif (tokens.length > 2 && (token = tokens[0]).type === \"ID\" &&\n\t\t\t\t\tcontext.nodeType === 9 && documentIsHTML && Expr.relative[tokens[1].type]) {\n\n\t\t\t\t\tcontext = (Expr.find.ID(\n\t\t\t\t\t\ttoken.matches[0].replace(runescape, funescape),\n\t\t\t\t\t\tcontext\n\t\t\t\t\t) || [])[0];\n\t\t\t\t\tif (!context) {\n\t\t\t\t\t\treturn results;\n\n\t\t\t\t\t\t// Precompiled matchers will still verify ancestry, so step up a level\n\t\t\t\t\t} else if (compiled) {\n\t\t\t\t\t\tcontext = context.parentNode;\n\t\t\t\t\t}\n\n\t\t\t\t\tselector = selector.slice(tokens.shift().value.length);\n\t\t\t\t}\n\n\t\t\t\t// Fetch a seed set for right-to-left matching\n\t\t\t\ti = matchExpr.needsContext.test(selector) ? 0 : tokens.length;\n\t\t\t\twhile (i--) {\n\t\t\t\t\ttoken = tokens[i];\n\n\t\t\t\t\t// Abort if we hit a combinator\n\t\t\t\t\tif (Expr.relative[(type = token.type)]) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tif ((find = Expr.find[type])) {\n\n\t\t\t\t\t\t// Search, expanding context for leading sibling combinators\n\t\t\t\t\t\tif ((seed = find(\n\t\t\t\t\t\t\ttoken.matches[0].replace(runescape, funescape),\n\t\t\t\t\t\t\trsibling.test(tokens[0].type) &&\n\t\t\t\t\t\t\ttestContext(context.parentNode) || context\n\t\t\t\t\t\t))) {\n\n\t\t\t\t\t\t\t// If seed is empty or no tokens remain, we can return early\n\t\t\t\t\t\t\ttokens.splice(i, 1);\n\t\t\t\t\t\t\tselector = seed.length && toSelector(tokens);\n\t\t\t\t\t\t\tif (!selector) {\n\t\t\t\t\t\t\t\tpush.apply(results, seed);\n\t\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Compile and execute a filtering function if one is not provided\n\t\t\t// Provide `match` to avoid retokenization if we modified the selector above\n\t\t\t(compiled || compile(selector, match))(\n\t\t\t\tseed,\n\t\t\t\tcontext,\n\t\t\t\t!documentIsHTML,\n\t\t\t\tresults,\n\t\t\t\t!context || rsibling.test(selector) && testContext(context.parentNode) || context\n\t\t\t);\n\t\t\treturn results;\n\t\t}\n\n\t\t// One-time assignments\n\n\t\t// Support: Android <=4.0 - 4.1+\n\t\t// Sort stability\n\t\tsupport.sortStable = expando.split(\"\").sort(sortOrder).join(\"\") === expando;\n\n\t\t// Initialize against the default document\n\t\tsetDocument();\n\n\t\t// Support: Android <=4.0 - 4.1+\n\t\t// Detached nodes confoundingly follow *each other*\n\t\tsupport.sortDetached = assert(function (el) {\n\n\t\t\t// Should return 1, but returns 4 (following)\n\t\t\treturn el.compareDocumentPosition(document.createElement(\"fieldset\")) & 1;\n\t\t});\n\n\t\tjQuery.find = find;\n\n\t\t// Deprecated\n\t\tjQuery.expr[\":\"] = jQuery.expr.pseudos;\n\t\tjQuery.unique = jQuery.uniqueSort;\n\n\t\t// These have always been private, but they used to be documented\n\t\t// as part of Sizzle so let's maintain them in the 3.x line\n\t\t// for backwards compatibility purposes.\n\t\tfind.compile = compile;\n\t\tfind.select = select;\n\t\tfind.setDocument = setDocument;\n\n\t\tfind.escape = jQuery.escapeSelector;\n\t\tfind.getText = jQuery.text;\n\t\tfind.isXML = jQuery.isXMLDoc;\n\t\tfind.selectors = jQuery.expr;\n\t\tfind.support = jQuery.support;\n\t\tfind.uniqueSort = jQuery.uniqueSort;\n\n\t\t/* eslint-enable */\n\n\t})();\n\n\n\tvar dir = function (elem, dir, until) {\n\t\tvar matched = [],\n\t\t\ttruncate = until !== undefined;\n\n\t\twhile ((elem = elem[dir]) && elem.nodeType !== 9) {\n\t\t\tif (elem.nodeType === 1) {\n\t\t\t\tif (truncate && jQuery(elem).is(until)) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tmatched.push(elem);\n\t\t\t}\n\t\t}\n\t\treturn matched;\n\t};\n\n\n\tvar siblings = function (n, elem) {\n\t\tvar matched = [];\n\n\t\tfor (; n; n = n.nextSibling) {\n\t\t\tif (n.nodeType === 1 && n !== elem) {\n\t\t\t\tmatched.push(n);\n\t\t\t}\n\t\t}\n\n\t\treturn matched;\n\t};\n\n\n\tvar rneedsContext = jQuery.expr.match.needsContext;\n\n\tvar rsingleTag = (/^<([a-z][^\\/\\0>:\\x20\\t\\r\\n\\f]*)[\\x20\\t\\r\\n\\f]*\\/?>(?:<\\/\\1>|)$/i);\n\n\n\n\t// Implement the identical functionality for filter and not\n\tfunction winnow(elements, qualifier, not) {\n\t\tif (isFunction(qualifier)) {\n\t\t\treturn jQuery.grep(elements, function (elem, i) {\n\t\t\t\treturn !!qualifier.call(elem, i, elem) !== not;\n\t\t\t});\n\t\t}\n\n\t\t// Single element\n\t\tif (qualifier.nodeType) {\n\t\t\treturn jQuery.grep(elements, function (elem) {\n\t\t\t\treturn (elem === qualifier) !== not;\n\t\t\t});\n\t\t}\n\n\t\t// Arraylike of elements (jQuery, arguments, Array)\n\t\tif (typeof qualifier !== \"string\") {\n\t\t\treturn jQuery.grep(elements, function (elem) {\n\t\t\t\treturn (indexOf.call(qualifier, elem) > -1) !== not;\n\t\t\t});\n\t\t}\n\n\t\t// Filtered directly for both simple and complex selectors\n\t\treturn jQuery.filter(qualifier, elements, not);\n\t}\n\n\tjQuery.filter = function (expr, elems, not) {\n\t\tvar elem = elems[0];\n\n\t\tif (not) {\n\t\t\texpr = \":not(\" + expr + \")\";\n\t\t}\n\n\t\tif (elems.length === 1 && elem.nodeType === 1) {\n\t\t\treturn jQuery.find.matchesSelector(elem, expr) ? [elem] : [];\n\t\t}\n\n\t\treturn jQuery.find.matches(expr, jQuery.grep(elems, function (elem) {\n\t\t\treturn elem.nodeType === 1;\n\t\t}));\n\t};\n\n\tjQuery.fn.extend({\n\t\tfind: function (selector) {\n\t\t\tvar i, ret,\n\t\t\t\tlen = this.length,\n\t\t\t\tself = this;\n\n\t\t\tif (typeof selector !== \"string\") {\n\t\t\t\treturn this.pushStack(jQuery(selector).filter(function () {\n\t\t\t\t\tfor (i = 0; i < len; i++) {\n\t\t\t\t\t\tif (jQuery.contains(self[i], this)) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}));\n\t\t\t}\n\n\t\t\tret = this.pushStack([]);\n\n\t\t\tfor (i = 0; i < len; i++) {\n\t\t\t\tjQuery.find(selector, self[i], ret);\n\t\t\t}\n\n\t\t\treturn len > 1 ? jQuery.uniqueSort(ret) : ret;\n\t\t},\n\t\tfilter: function (selector) {\n\t\t\treturn this.pushStack(winnow(this, selector || [], false));\n\t\t},\n\t\tnot: function (selector) {\n\t\t\treturn this.pushStack(winnow(this, selector || [], true));\n\t\t},\n\t\tis: function (selector) {\n\t\t\treturn !!winnow(\n\t\t\t\tthis,\n\n\t\t\t\t// If this is a positional/relative selector, check membership in the returned set\n\t\t\t\t// so $(\"p:first\").is(\"p:last\") won't return true for a doc with two \"p\".\n\t\t\t\ttypeof selector === \"string\" && rneedsContext.test(selector) ?\n\t\t\t\t\tjQuery(selector) :\n\t\t\t\t\tselector || [],\n\t\t\t\tfalse\n\t\t\t).length;\n\t\t}\n\t});\n\n\n\t// Initialize a jQuery object\n\n\n\t// A central reference to the root jQuery(document)\n\tvar rootjQuery,\n\n\t\t// A simple way to check for HTML strings\n\t\t// Prioritize #id over <tag> to avoid XSS via location.hash (trac-9521)\n\t\t// Strict HTML recognition (trac-11290: must start with <)\n\t\t// Shortcut simple #id case for speed\n\t\trquickExpr = /^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]+))$/,\n\n\t\tinit = jQuery.fn.init = function (selector, context, root) {\n\t\t\tvar match, elem;\n\n\t\t\t// HANDLE: $(\"\"), $(null), $(undefined), $(false)\n\t\t\tif (!selector) {\n\t\t\t\treturn this;\n\t\t\t}\n\n\t\t\t// Method init() accepts an alternate rootjQuery\n\t\t\t// so migrate can support jQuery.sub (gh-2101)\n\t\t\troot = root || rootjQuery;\n\n\t\t\t// Handle HTML strings\n\t\t\tif (typeof selector === \"string\") {\n\t\t\t\tif (selector[0] === \"<\" &&\n\t\t\t\t\tselector[selector.length - 1] === \">\" &&\n\t\t\t\t\tselector.length >= 3) {\n\n\t\t\t\t\t// Assume that strings that start and end with <> are HTML and skip the regex check\n\t\t\t\t\tmatch = [null, selector, null];\n\n\t\t\t\t} else {\n\t\t\t\t\tmatch = rquickExpr.exec(selector);\n\t\t\t\t}\n\n\t\t\t\t// Match html or make sure no context is specified for #id\n\t\t\t\tif (match && (match[1] || !context)) {\n\n\t\t\t\t\t// HANDLE: $(html) -> $(array)\n\t\t\t\t\tif (match[1]) {\n\t\t\t\t\t\tcontext = context instanceof jQuery ? context[0] : context;\n\n\t\t\t\t\t\t// Option to run scripts is true for back-compat\n\t\t\t\t\t\t// Intentionally let the error be thrown if parseHTML is not present\n\t\t\t\t\t\tjQuery.merge(this, jQuery.parseHTML(\n\t\t\t\t\t\t\tmatch[1],\n\t\t\t\t\t\t\tcontext && context.nodeType ? context.ownerDocument || context : document,\n\t\t\t\t\t\t\ttrue\n\t\t\t\t\t\t));\n\n\t\t\t\t\t\t// HANDLE: $(html, props)\n\t\t\t\t\t\tif (rsingleTag.test(match[1]) && jQuery.isPlainObject(context)) {\n\t\t\t\t\t\t\tfor (match in context) {\n\n\t\t\t\t\t\t\t\t// Properties of context are called as methods if possible\n\t\t\t\t\t\t\t\tif (isFunction(this[match])) {\n\t\t\t\t\t\t\t\t\tthis[match](context[match]);\n\n\t\t\t\t\t\t\t\t\t// ...and otherwise set as attributes\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tthis.attr(match, context[match]);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn this;\n\n\t\t\t\t\t\t// HANDLE: $(#id)\n\t\t\t\t\t} else {\n\t\t\t\t\t\telem = document.getElementById(match[2]);\n\n\t\t\t\t\t\tif (elem) {\n\n\t\t\t\t\t\t\t// Inject the element directly into the jQuery object\n\t\t\t\t\t\t\tthis[0] = elem;\n\t\t\t\t\t\t\tthis.length = 1;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn this;\n\t\t\t\t\t}\n\n\t\t\t\t\t// HANDLE: $(expr, $(...))\n\t\t\t\t} else if (!context || context.jquery) {\n\t\t\t\t\treturn (context || root).find(selector);\n\n\t\t\t\t\t// HANDLE: $(expr, context)\n\t\t\t\t\t// (which is just equivalent to: $(context).find(expr)\n\t\t\t\t} else {\n\t\t\t\t\treturn this.constructor(context).find(selector);\n\t\t\t\t}\n\n\t\t\t\t// HANDLE: $(DOMElement)\n\t\t\t} else if (selector.nodeType) {\n\t\t\t\tthis[0] = selector;\n\t\t\t\tthis.length = 1;\n\t\t\t\treturn this;\n\n\t\t\t\t// HANDLE: $(function)\n\t\t\t\t// Shortcut for document ready\n\t\t\t} else if (isFunction(selector)) {\n\t\t\t\treturn root.ready !== undefined ?\n\t\t\t\t\troot.ready(selector) :\n\n\t\t\t\t\t// Execute immediately if ready is not present\n\t\t\t\t\tselector(jQuery);\n\t\t\t}\n\n\t\t\treturn jQuery.makeArray(selector, this);\n\t\t};\n\n\t// Give the init function the jQuery prototype for later instantiation\n\tinit.prototype = jQuery.fn;\n\n\t// Initialize central reference\n\trootjQuery = jQuery(document);\n\n\n\tvar rparentsprev = /^(?:parents|prev(?:Until|All))/,\n\n\t\t// Methods guaranteed to produce a unique set when starting from a unique set\n\t\tguaranteedUnique = {\n\t\t\tchildren: true,\n\t\t\tcontents: true,\n\t\t\tnext: true,\n\t\t\tprev: true\n\t\t};\n\n\tjQuery.fn.extend({\n\t\thas: function (target) {\n\t\t\tvar targets = jQuery(target, this),\n\t\t\t\tl = targets.length;\n\n\t\t\treturn this.filter(function () {\n\t\t\t\tvar i = 0;\n\t\t\t\tfor (; i < l; i++) {\n\t\t\t\t\tif (jQuery.contains(this, targets[i])) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\tclosest: function (selectors, context) {\n\t\t\tvar cur,\n\t\t\t\ti = 0,\n\t\t\t\tl = this.length,\n\t\t\t\tmatched = [],\n\t\t\t\ttargets = typeof selectors !== \"string\" && jQuery(selectors);\n\n\t\t\t// Positional selectors never match, since there's no _selection_ context\n\t\t\tif (!rneedsContext.test(selectors)) {\n\t\t\t\tfor (; i < l; i++) {\n\t\t\t\t\tfor (cur = this[i]; cur && cur !== context; cur = cur.parentNode) {\n\n\t\t\t\t\t\t// Always skip document fragments\n\t\t\t\t\t\tif (cur.nodeType < 11 && (targets ?\n\t\t\t\t\t\t\ttargets.index(cur) > -1 :\n\n\t\t\t\t\t\t\t// Don't pass non-elements to jQuery#find\n\t\t\t\t\t\t\tcur.nodeType === 1 &&\n\t\t\t\t\t\t\tjQuery.find.matchesSelector(cur, selectors))) {\n\n\t\t\t\t\t\t\tmatched.push(cur);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn this.pushStack(matched.length > 1 ? jQuery.uniqueSort(matched) : matched);\n\t\t},\n\n\t\t// Determine the position of an element within the set\n\t\tindex: function (elem) {\n\n\t\t\t// No argument, return index in parent\n\t\t\tif (!elem) {\n\t\t\t\treturn (this[0] && this[0].parentNode) ? this.first().prevAll().length : -1;\n\t\t\t}\n\n\t\t\t// Index in selector\n\t\t\tif (typeof elem === \"string\") {\n\t\t\t\treturn indexOf.call(jQuery(elem), this[0]);\n\t\t\t}\n\n\t\t\t// Locate the position of the desired element\n\t\t\treturn indexOf.call(this,\n\n\t\t\t\t// If it receives a jQuery object, the first element is used\n\t\t\t\telem.jquery ? elem[0] : elem\n\t\t\t);\n\t\t},\n\n\t\tadd: function (selector, context) {\n\t\t\treturn this.pushStack(\n\t\t\t\tjQuery.uniqueSort(\n\t\t\t\t\tjQuery.merge(this.get(), jQuery(selector, context))\n\t\t\t\t)\n\t\t\t);\n\t\t},\n\n\t\taddBack: function (selector) {\n\t\t\treturn this.add(selector == null ?\n\t\t\t\tthis.prevObject : this.prevObject.filter(selector)\n\t\t\t);\n\t\t}\n\t});\n\n\tfunction sibling(cur, dir) {\n\t\twhile ((cur = cur[dir]) && cur.nodeType !== 1) { }\n\t\treturn cur;\n\t}\n\n\tjQuery.each({\n\t\tparent: function (elem) {\n\t\t\tvar parent = elem.parentNode;\n\t\t\treturn parent && parent.nodeType !== 11 ? parent : null;\n\t\t},\n\t\tparents: function (elem) {\n\t\t\treturn dir(elem, \"parentNode\");\n\t\t},\n\t\tparentsUntil: function (elem, _i, until) {\n\t\t\treturn dir(elem, \"parentNode\", until);\n\t\t},\n\t\tnext: function (elem) {\n\t\t\treturn sibling(elem, \"nextSibling\");\n\t\t},\n\t\tprev: function (elem) {\n\t\t\treturn sibling(elem, \"previousSibling\");\n\t\t},\n\t\tnextAll: function (elem) {\n\t\t\treturn dir(elem, \"nextSibling\");\n\t\t},\n\t\tprevAll: function (elem) {\n\t\t\treturn dir(elem, \"previousSibling\");\n\t\t},\n\t\tnextUntil: function (elem, _i, until) {\n\t\t\treturn dir(elem, \"nextSibling\", until);\n\t\t},\n\t\tprevUntil: function (elem, _i, until) {\n\t\t\treturn dir(elem, \"previousSibling\", until);\n\t\t},\n\t\tsiblings: function (elem) {\n\t\t\treturn siblings((elem.parentNode || {}).firstChild, elem);\n\t\t},\n\t\tchildren: function (elem) {\n\t\t\treturn siblings(elem.firstChild);\n\t\t},\n\t\tcontents: function (elem) {\n\t\t\tif (elem.contentDocument != null &&\n\n\t\t\t\t// Support: IE 11+\n\t\t\t\t// <object> elements with no `data` attribute has an object\n\t\t\t\t// `contentDocument` with a `null` prototype.\n\t\t\t\tgetProto(elem.contentDocument)) {\n\n\t\t\t\treturn elem.contentDocument;\n\t\t\t}\n\n\t\t\t// Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only\n\t\t\t// Treat the template element as a regular one in browsers that\n\t\t\t// don't support it.\n\t\t\tif (nodeName(elem, \"template\")) {\n\t\t\t\telem = elem.content || elem;\n\t\t\t}\n\n\t\t\treturn jQuery.merge([], elem.childNodes);\n\t\t}\n\t}, function (name, fn) {\n\t\tjQuery.fn[name] = function (until, selector) {\n\t\t\tvar matched = jQuery.map(this, fn, until);\n\n\t\t\tif (name.slice(-5) !== \"Until\") {\n\t\t\t\tselector = until;\n\t\t\t}\n\n\t\t\tif (selector && typeof selector === \"string\") {\n\t\t\t\tmatched = jQuery.filter(selector, matched);\n\t\t\t}\n\n\t\t\tif (this.length > 1) {\n\n\t\t\t\t// Remove duplicates\n\t\t\t\tif (!guaranteedUnique[name]) {\n\t\t\t\t\tjQuery.uniqueSort(matched);\n\t\t\t\t}\n\n\t\t\t\t// Reverse order for parents* and prev-derivatives\n\t\t\t\tif (rparentsprev.test(name)) {\n\t\t\t\t\tmatched.reverse();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn this.pushStack(matched);\n\t\t};\n\t});\n\tvar rnothtmlwhite = (/[^\\x20\\t\\r\\n\\f]+/g);\n\n\n\n\t// Convert String-formatted options into Object-formatted ones\n\tfunction createOptions(options) {\n\t\tvar object = {};\n\t\tjQuery.each(options.match(rnothtmlwhite) || [], function (_, flag) {\n\t\t\tobject[flag] = true;\n\t\t});\n\t\treturn object;\n\t}\n\n\t/*\n\t * Create a callback list using the following parameters:\n\t *\n\t *\toptions: an optional list of space-separated options that will change how\n\t *\t\t\tthe callback list behaves or a more traditional option object\n\t *\n\t * By default a callback list will act like an event callback list and can be\n\t * \"fired\" multiple times.\n\t *\n\t * Possible options:\n\t *\n\t *\tonce:\t\t\twill ensure the callback list can only be fired once (like a Deferred)\n\t *\n\t *\tmemory:\t\t\twill keep track of previous values and will call any callback added\n\t *\t\t\t\t\tafter the list has been fired right away with the latest \"memorized\"\n\t *\t\t\t\t\tvalues (like a Deferred)\n\t *\n\t *\tunique:\t\t\twill ensure a callback can only be added once (no duplicate in the list)\n\t *\n\t *\tstopOnFalse:\tinterrupt callings when a callback returns false\n\t *\n\t */\n\tjQuery.Callbacks = function (options) {\n\n\t\t// Convert options from String-formatted to Object-formatted if needed\n\t\t// (we check in cache first)\n\t\toptions = typeof options === \"string\" ?\n\t\t\tcreateOptions(options) :\n\t\t\tjQuery.extend({}, options);\n\n\t\tvar // Flag to know if list is currently firing\n\t\t\tfiring,\n\n\t\t\t// Last fire value for non-forgettable lists\n\t\t\tmemory,\n\n\t\t\t// Flag to know if list was already fired\n\t\t\tfired,\n\n\t\t\t// Flag to prevent firing\n\t\t\tlocked,\n\n\t\t\t// Actual callback list\n\t\t\tlist = [],\n\n\t\t\t// Queue of execution data for repeatable lists\n\t\t\tqueue = [],\n\n\t\t\t// Index of currently firing callback (modified by add/remove as needed)\n\t\t\tfiringIndex = -1,\n\n\t\t\t// Fire callbacks\n\t\t\tfire = function () {\n\n\t\t\t\t// Enforce single-firing\n\t\t\t\tlocked = locked || options.once;\n\n\t\t\t\t// Execute callbacks for all pending executions,\n\t\t\t\t// respecting firingIndex overrides and runtime changes\n\t\t\t\tfired = firing = true;\n\t\t\t\tfor (; queue.length; firingIndex = -1) {\n\t\t\t\t\tmemory = queue.shift();\n\t\t\t\t\twhile (++firingIndex < list.length) {\n\n\t\t\t\t\t\t// Run callback and check for early termination\n\t\t\t\t\t\tif (list[firingIndex].apply(memory[0], memory[1]) === false &&\n\t\t\t\t\t\t\toptions.stopOnFalse) {\n\n\t\t\t\t\t\t\t// Jump to end and forget the data so .add doesn't re-fire\n\t\t\t\t\t\t\tfiringIndex = list.length;\n\t\t\t\t\t\t\tmemory = false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Forget the data if we're done with it\n\t\t\t\tif (!options.memory) {\n\t\t\t\t\tmemory = false;\n\t\t\t\t}\n\n\t\t\t\tfiring = false;\n\n\t\t\t\t// Clean up if we're done firing for good\n\t\t\t\tif (locked) {\n\n\t\t\t\t\t// Keep an empty list if we have data for future add calls\n\t\t\t\t\tif (memory) {\n\t\t\t\t\t\tlist = [];\n\n\t\t\t\t\t\t// Otherwise, this object is spent\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlist = \"\";\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// Actual Callbacks object\n\t\t\tself = {\n\n\t\t\t\t// Add a callback or a collection of callbacks to the list\n\t\t\t\tadd: function () {\n\t\t\t\t\tif (list) {\n\n\t\t\t\t\t\t// If we have memory from a past run, we should fire after adding\n\t\t\t\t\t\tif (memory && !firing) {\n\t\t\t\t\t\t\tfiringIndex = list.length - 1;\n\t\t\t\t\t\t\tqueue.push(memory);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t(function add(args) {\n\t\t\t\t\t\t\tjQuery.each(args, function (_, arg) {\n\t\t\t\t\t\t\t\tif (isFunction(arg)) {\n\t\t\t\t\t\t\t\t\tif (!options.unique || !self.has(arg)) {\n\t\t\t\t\t\t\t\t\t\tlist.push(arg);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} else if (arg && arg.length && toType(arg) !== \"string\") {\n\n\t\t\t\t\t\t\t\t\t// Inspect recursively\n\t\t\t\t\t\t\t\t\tadd(arg);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t})(arguments);\n\n\t\t\t\t\t\tif (memory && !firing) {\n\t\t\t\t\t\t\tfire();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Remove a callback from the list\n\t\t\t\tremove: function () {\n\t\t\t\t\tjQuery.each(arguments, function (_, arg) {\n\t\t\t\t\t\tvar index;\n\t\t\t\t\t\twhile ((index = jQuery.inArray(arg, list, index)) > -1) {\n\t\t\t\t\t\t\tlist.splice(index, 1);\n\n\t\t\t\t\t\t\t// Handle firing indexes\n\t\t\t\t\t\t\tif (index <= firingIndex) {\n\t\t\t\t\t\t\t\tfiringIndex--;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Check if a given callback is in the list.\n\t\t\t\t// If no argument is given, return whether or not list has callbacks attached.\n\t\t\t\thas: function (fn) {\n\t\t\t\t\treturn fn ?\n\t\t\t\t\t\tjQuery.inArray(fn, list) > -1 :\n\t\t\t\t\t\tlist.length > 0;\n\t\t\t\t},\n\n\t\t\t\t// Remove all callbacks from the list\n\t\t\t\tempty: function () {\n\t\t\t\t\tif (list) {\n\t\t\t\t\t\tlist = [];\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Disable .fire and .add\n\t\t\t\t// Abort any current/pending executions\n\t\t\t\t// Clear all callbacks and values\n\t\t\t\tdisable: function () {\n\t\t\t\t\tlocked = queue = [];\n\t\t\t\t\tlist = memory = \"\";\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\t\t\t\tdisabled: function () {\n\t\t\t\t\treturn !list;\n\t\t\t\t},\n\n\t\t\t\t// Disable .fire\n\t\t\t\t// Also disable .add unless we have memory (since it would have no effect)\n\t\t\t\t// Abort any pending executions\n\t\t\t\tlock: function () {\n\t\t\t\t\tlocked = queue = [];\n\t\t\t\t\tif (!memory && !firing) {\n\t\t\t\t\t\tlist = memory = \"\";\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\t\t\t\tlocked: function () {\n\t\t\t\t\treturn !!locked;\n\t\t\t\t},\n\n\t\t\t\t// Call all callbacks with the given context and arguments\n\t\t\t\tfireWith: function (context, args) {\n\t\t\t\t\tif (!locked) {\n\t\t\t\t\t\targs = args || [];\n\t\t\t\t\t\targs = [context, args.slice ? args.slice() : args];\n\t\t\t\t\t\tqueue.push(args);\n\t\t\t\t\t\tif (!firing) {\n\t\t\t\t\t\t\tfire();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Call all the callbacks with the given arguments\n\t\t\t\tfire: function () {\n\t\t\t\t\tself.fireWith(this, arguments);\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// To know if the callbacks have already been called at least once\n\t\t\t\tfired: function () {\n\t\t\t\t\treturn !!fired;\n\t\t\t\t}\n\t\t\t};\n\n\t\treturn self;\n\t};\n\n\n\tfunction Identity(v) {\n\t\treturn v;\n\t}\n\tfunction Thrower(ex) {\n\t\tthrow ex;\n\t}\n\n\tfunction adoptValue(value, resolve, reject, noValue) {\n\t\tvar method;\n\n\t\ttry {\n\n\t\t\t// Check for promise aspect first to privilege synchronous behavior\n\t\t\tif (value && isFunction((method = value.promise))) {\n\t\t\t\tmethod.call(value).done(resolve).fail(reject);\n\n\t\t\t\t// Other thenables\n\t\t\t} else if (value && isFunction((method = value.then))) {\n\t\t\t\tmethod.call(value, resolve, reject);\n\n\t\t\t\t// Other non-thenables\n\t\t\t} else {\n\n\t\t\t\t// Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer:\n\t\t\t\t// * false: [ value ].slice( 0 ) => resolve( value )\n\t\t\t\t// * true: [ value ].slice( 1 ) => resolve()\n\t\t\t\tresolve.apply(undefined, [value].slice(noValue));\n\t\t\t}\n\n\t\t\t// For Promises/A+, convert exceptions into rejections\n\t\t\t// Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in\n\t\t\t// Deferred#then to conditionally suppress rejection.\n\t\t} catch (value) {\n\n\t\t\t// Support: Android 4.0 only\n\t\t\t// Strict mode functions invoked without .call/.apply get global-object context\n\t\t\treject.apply(undefined, [value]);\n\t\t}\n\t}\n\n\tjQuery.extend({\n\n\t\tDeferred: function (func) {\n\t\t\tvar tuples = [\n\n\t\t\t\t// action, add listener, callbacks,\n\t\t\t\t// ... .then handlers, argument index, [final state]\n\t\t\t\t[\"notify\", \"progress\", jQuery.Callbacks(\"memory\"),\n\t\t\t\t\tjQuery.Callbacks(\"memory\"), 2],\n\t\t\t\t[\"resolve\", \"done\", jQuery.Callbacks(\"once memory\"),\n\t\t\t\t\tjQuery.Callbacks(\"once memory\"), 0, \"resolved\"],\n\t\t\t\t[\"reject\", \"fail\", jQuery.Callbacks(\"once memory\"),\n\t\t\t\t\tjQuery.Callbacks(\"once memory\"), 1, \"rejected\"]\n\t\t\t],\n\t\t\t\tstate = \"pending\",\n\t\t\t\tpromise = {\n\t\t\t\t\tstate: function () {\n\t\t\t\t\t\treturn state;\n\t\t\t\t\t},\n\t\t\t\t\talways: function () {\n\t\t\t\t\t\tdeferred.done(arguments).fail(arguments);\n\t\t\t\t\t\treturn this;\n\t\t\t\t\t},\n\t\t\t\t\t\"catch\": function (fn) {\n\t\t\t\t\t\treturn promise.then(null, fn);\n\t\t\t\t\t},\n\n\t\t\t\t\t// Keep pipe for back-compat\n\t\t\t\t\tpipe: function ( /* fnDone, fnFail, fnProgress */) {\n\t\t\t\t\t\tvar fns = arguments;\n\n\t\t\t\t\t\treturn jQuery.Deferred(function (newDefer) {\n\t\t\t\t\t\t\tjQuery.each(tuples, function (_i, tuple) {\n\n\t\t\t\t\t\t\t\t// Map tuples (progress, done, fail) to arguments (done, fail, progress)\n\t\t\t\t\t\t\t\tvar fn = isFunction(fns[tuple[4]]) && fns[tuple[4]];\n\n\t\t\t\t\t\t\t\t// deferred.progress(function() { bind to newDefer or newDefer.notify })\n\t\t\t\t\t\t\t\t// deferred.done(function() { bind to newDefer or newDefer.resolve })\n\t\t\t\t\t\t\t\t// deferred.fail(function() { bind to newDefer or newDefer.reject })\n\t\t\t\t\t\t\t\tdeferred[tuple[1]](function () {\n\t\t\t\t\t\t\t\t\tvar returned = fn && fn.apply(this, arguments);\n\t\t\t\t\t\t\t\t\tif (returned && isFunction(returned.promise)) {\n\t\t\t\t\t\t\t\t\t\treturned.promise()\n\t\t\t\t\t\t\t\t\t\t\t.progress(newDefer.notify)\n\t\t\t\t\t\t\t\t\t\t\t.done(newDefer.resolve)\n\t\t\t\t\t\t\t\t\t\t\t.fail(newDefer.reject);\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tnewDefer[tuple[0] + \"With\"](\n\t\t\t\t\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\t\t\t\t\tfn ? [returned] : arguments\n\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tfns = null;\n\t\t\t\t\t\t}).promise();\n\t\t\t\t\t},\n\t\t\t\t\tthen: function (onFulfilled, onRejected, onProgress) {\n\t\t\t\t\t\tvar maxDepth = 0;\n\t\t\t\t\t\tfunction resolve(depth, deferred, handler, special) {\n\t\t\t\t\t\t\treturn function () {\n\t\t\t\t\t\t\t\tvar that = this,\n\t\t\t\t\t\t\t\t\targs = arguments,\n\t\t\t\t\t\t\t\t\tmightThrow = function () {\n\t\t\t\t\t\t\t\t\t\tvar returned, then;\n\n\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.3\n\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-59\n\t\t\t\t\t\t\t\t\t\t// Ignore double-resolution attempts\n\t\t\t\t\t\t\t\t\t\tif (depth < maxDepth) {\n\t\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\treturned = handler.apply(that, args);\n\n\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.1\n\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-48\n\t\t\t\t\t\t\t\t\t\tif (returned === deferred.promise()) {\n\t\t\t\t\t\t\t\t\t\t\tthrow new TypeError(\"Thenable self-resolution\");\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ sections 2.3.3.1, 3.5\n\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-54\n\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-75\n\t\t\t\t\t\t\t\t\t\t// Retrieve `then` only once\n\t\t\t\t\t\t\t\t\t\tthen = returned &&\n\n\t\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.4\n\t\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-64\n\t\t\t\t\t\t\t\t\t\t\t// Only check objects and functions for thenability\n\t\t\t\t\t\t\t\t\t\t\t(typeof returned === \"object\" ||\n\t\t\t\t\t\t\t\t\t\t\t\ttypeof returned === \"function\") &&\n\t\t\t\t\t\t\t\t\t\t\treturned.then;\n\n\t\t\t\t\t\t\t\t\t\t// Handle a returned thenable\n\t\t\t\t\t\t\t\t\t\tif (isFunction(then)) {\n\n\t\t\t\t\t\t\t\t\t\t\t// Special processors (notify) just wait for resolution\n\t\t\t\t\t\t\t\t\t\t\tif (special) {\n\t\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\t\tresolve(maxDepth, deferred, Identity, special),\n\t\t\t\t\t\t\t\t\t\t\t\t\tresolve(maxDepth, deferred, Thrower, special)\n\t\t\t\t\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t\t\t\t\t// Normal processors (resolve) also hook into progress\n\t\t\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t\t\t// ...and disregard older resolution values\n\t\t\t\t\t\t\t\t\t\t\t\tmaxDepth++;\n\n\t\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\t\tresolve(maxDepth, deferred, Identity, special),\n\t\t\t\t\t\t\t\t\t\t\t\t\tresolve(maxDepth, deferred, Thrower, special),\n\t\t\t\t\t\t\t\t\t\t\t\t\tresolve(maxDepth, deferred, Identity,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tdeferred.notifyWith)\n\t\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t// Handle all other returned values\n\t\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\t\tif (handler !== Identity) {\n\t\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\t\targs = [returned];\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t// Process the value(s)\n\t\t\t\t\t\t\t\t\t\t\t// Default process is resolve\n\t\t\t\t\t\t\t\t\t\t\t(special || deferred.resolveWith)(that, args);\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\n\t\t\t\t\t\t\t\t\t// Only normal processors (resolve) catch and reject exceptions\n\t\t\t\t\t\t\t\t\tprocess = special ?\n\t\t\t\t\t\t\t\t\t\tmightThrow :\n\t\t\t\t\t\t\t\t\t\tfunction () {\n\t\t\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\t\t\tmightThrow();\n\t\t\t\t\t\t\t\t\t\t\t} catch (e) {\n\n\t\t\t\t\t\t\t\t\t\t\t\tif (jQuery.Deferred.exceptionHook) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tjQuery.Deferred.exceptionHook(e,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tprocess.error);\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.4.1\n\t\t\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-61\n\t\t\t\t\t\t\t\t\t\t\t\t// Ignore post-resolution exceptions\n\t\t\t\t\t\t\t\t\t\t\t\tif (depth + 1 >= maxDepth) {\n\n\t\t\t\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\t\t\t\tif (handler !== Thrower) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\targs = [e];\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\t\tdeferred.rejectWith(that, args);\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.1\n\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-57\n\t\t\t\t\t\t\t\t// Re-resolve promises immediately to dodge false rejection from\n\t\t\t\t\t\t\t\t// subsequent errors\n\t\t\t\t\t\t\t\tif (depth) {\n\t\t\t\t\t\t\t\t\tprocess();\n\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t// Call an optional hook to record the error, in case of exception\n\t\t\t\t\t\t\t\t\t// since it's otherwise lost when execution goes async\n\t\t\t\t\t\t\t\t\tif (jQuery.Deferred.getErrorHook) {\n\t\t\t\t\t\t\t\t\t\tprocess.error = jQuery.Deferred.getErrorHook();\n\n\t\t\t\t\t\t\t\t\t\t// The deprecated alias of the above. While the name suggests\n\t\t\t\t\t\t\t\t\t\t// returning the stack, not an error instance, jQuery just passes\n\t\t\t\t\t\t\t\t\t\t// it directly to `console.warn` so both will work; an instance\n\t\t\t\t\t\t\t\t\t\t// just better cooperates with source maps.\n\t\t\t\t\t\t\t\t\t} else if (jQuery.Deferred.getStackHook) {\n\t\t\t\t\t\t\t\t\t\tprocess.error = jQuery.Deferred.getStackHook();\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\twindow.setTimeout(process);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn jQuery.Deferred(function (newDefer) {\n\n\t\t\t\t\t\t\t// progress_handlers.add( ... )\n\t\t\t\t\t\t\ttuples[0][3].add(\n\t\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\t\tisFunction(onProgress) ?\n\t\t\t\t\t\t\t\t\t\tonProgress :\n\t\t\t\t\t\t\t\t\t\tIdentity,\n\t\t\t\t\t\t\t\t\tnewDefer.notifyWith\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t// fulfilled_handlers.add( ... )\n\t\t\t\t\t\t\ttuples[1][3].add(\n\t\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\t\tisFunction(onFulfilled) ?\n\t\t\t\t\t\t\t\t\t\tonFulfilled :\n\t\t\t\t\t\t\t\t\t\tIdentity\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t// rejected_handlers.add( ... )\n\t\t\t\t\t\t\ttuples[2][3].add(\n\t\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\t\tisFunction(onRejected) ?\n\t\t\t\t\t\t\t\t\t\tonRejected :\n\t\t\t\t\t\t\t\t\t\tThrower\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}).promise();\n\t\t\t\t\t},\n\n\t\t\t\t\t// Get a promise for this deferred\n\t\t\t\t\t// If obj is provided, the promise aspect is added to the object\n\t\t\t\t\tpromise: function (obj) {\n\t\t\t\t\t\treturn obj != null ? jQuery.extend(obj, promise) : promise;\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tdeferred = {};\n\n\t\t\t// Add list-specific methods\n\t\t\tjQuery.each(tuples, function (i, tuple) {\n\t\t\t\tvar list = tuple[2],\n\t\t\t\t\tstateString = tuple[5];\n\n\t\t\t\t// promise.progress = list.add\n\t\t\t\t// promise.done = list.add\n\t\t\t\t// promise.fail = list.add\n\t\t\t\tpromise[tuple[1]] = list.add;\n\n\t\t\t\t// Handle state\n\t\t\t\tif (stateString) {\n\t\t\t\t\tlist.add(\n\t\t\t\t\t\tfunction () {\n\n\t\t\t\t\t\t\t// state = \"resolved\" (i.e., fulfilled)\n\t\t\t\t\t\t\t// state = \"rejected\"\n\t\t\t\t\t\t\tstate = stateString;\n\t\t\t\t\t\t},\n\n\t\t\t\t\t\t// rejected_callbacks.disable\n\t\t\t\t\t\t// fulfilled_callbacks.disable\n\t\t\t\t\t\ttuples[3 - i][2].disable,\n\n\t\t\t\t\t\t// rejected_handlers.disable\n\t\t\t\t\t\t// fulfilled_handlers.disable\n\t\t\t\t\t\ttuples[3 - i][3].disable,\n\n\t\t\t\t\t\t// progress_callbacks.lock\n\t\t\t\t\t\ttuples[0][2].lock,\n\n\t\t\t\t\t\t// progress_handlers.lock\n\t\t\t\t\t\ttuples[0][3].lock\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\t// progress_handlers.fire\n\t\t\t\t// fulfilled_handlers.fire\n\t\t\t\t// rejected_handlers.fire\n\t\t\t\tlist.add(tuple[3].fire);\n\n\t\t\t\t// deferred.notify = function() { deferred.notifyWith(...) }\n\t\t\t\t// deferred.resolve = function() { deferred.resolveWith(...) }\n\t\t\t\t// deferred.reject = function() { deferred.rejectWith(...) }\n\t\t\t\tdeferred[tuple[0]] = function () {\n\t\t\t\t\tdeferred[tuple[0] + \"With\"](this === deferred ? undefined : this, arguments);\n\t\t\t\t\treturn this;\n\t\t\t\t};\n\n\t\t\t\t// deferred.notifyWith = list.fireWith\n\t\t\t\t// deferred.resolveWith = list.fireWith\n\t\t\t\t// deferred.rejectWith = list.fireWith\n\t\t\t\tdeferred[tuple[0] + \"With\"] = list.fireWith;\n\t\t\t});\n\n\t\t\t// Make the deferred a promise\n\t\t\tpromise.promise(deferred);\n\n\t\t\t// Call given func if any\n\t\t\tif (func) {\n\t\t\t\tfunc.call(deferred, deferred);\n\t\t\t}\n\n\t\t\t// All done!\n\t\t\treturn deferred;\n\t\t},\n\n\t\t// Deferred helper\n\t\twhen: function (singleValue) {\n\t\t\tvar\n\n\t\t\t\t// count of uncompleted subordinates\n\t\t\t\tremaining = arguments.length,\n\n\t\t\t\t// count of unprocessed arguments\n\t\t\t\ti = remaining,\n\n\t\t\t\t// subordinate fulfillment data\n\t\t\t\tresolveContexts = Array(i),\n\t\t\t\tresolveValues = slice.call(arguments),\n\n\t\t\t\t// the primary Deferred\n\t\t\t\tprimary = jQuery.Deferred(),\n\n\t\t\t\t// subordinate callback factory\n\t\t\t\tupdateFunc = function (i) {\n\t\t\t\t\treturn function (value) {\n\t\t\t\t\t\tresolveContexts[i] = this;\n\t\t\t\t\t\tresolveValues[i] = arguments.length > 1 ? slice.call(arguments) : value;\n\t\t\t\t\t\tif (!(--remaining)) {\n\t\t\t\t\t\t\tprimary.resolveWith(resolveContexts, resolveValues);\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t};\n\n\t\t\t// Single- and empty arguments are adopted like Promise.resolve\n\t\t\tif (remaining <= 1) {\n\t\t\t\tadoptValue(singleValue, primary.done(updateFunc(i)).resolve, primary.reject,\n\t\t\t\t\t!remaining);\n\n\t\t\t\t// Use .then() to unwrap secondary thenables (cf. gh-3000)\n\t\t\t\tif (primary.state() === \"pending\" ||\n\t\t\t\t\tisFunction(resolveValues[i] && resolveValues[i].then)) {\n\n\t\t\t\t\treturn primary.then();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Multiple arguments are aggregated like Promise.all array elements\n\t\t\twhile (i--) {\n\t\t\t\tadoptValue(resolveValues[i], updateFunc(i), primary.reject);\n\t\t\t}\n\n\t\t\treturn primary.promise();\n\t\t}\n\t});\n\n\n\t// These usually indicate a programmer mistake during development,\n\t// warn about them ASAP rather than swallowing them by default.\n\tvar rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;\n\n\t// If `jQuery.Deferred.getErrorHook` is defined, `asyncError` is an error\n\t// captured before the async barrier to get the original error cause\n\t// which may otherwise be hidden.\n\tjQuery.Deferred.exceptionHook = function (error, asyncError) {\n\n\t\t// Support: IE 8 - 9 only\n\t\t// Console exists when dev tools are open, which can happen at any time\n\t\tif (window.console && window.console.warn && error && rerrorNames.test(error.name)) {\n\t\t\twindow.console.warn(\"jQuery.Deferred exception: \" + error.message,\n\t\t\t\terror.stack, asyncError);\n\t\t}\n\t};\n\n\n\n\n\tjQuery.readyException = function (error) {\n\t\twindow.setTimeout(function () {\n\t\t\tthrow error;\n\t\t});\n\t};\n\n\n\n\n\t// The deferred used on DOM ready\n\tvar readyList = jQuery.Deferred();\n\n\tjQuery.fn.ready = function (fn) {\n\n\t\treadyList\n\t\t\t.then(fn)\n\n\t\t\t// Wrap jQuery.readyException in a function so that the lookup\n\t\t\t// happens at the time of error handling instead of callback\n\t\t\t// registration.\n\t\t\t.catch(function (error) {\n\t\t\t\tjQuery.readyException(error);\n\t\t\t});\n\n\t\treturn this;\n\t};\n\n\tjQuery.extend({\n\n\t\t// Is the DOM ready to be used? Set to true once it occurs.\n\t\tisReady: false,\n\n\t\t// A counter to track how many items to wait for before\n\t\t// the ready event fires. See trac-6781\n\t\treadyWait: 1,\n\n\t\t// Handle when the DOM is ready\n\t\tready: function (wait) {\n\n\t\t\t// Abort if there are pending holds or we're already ready\n\t\t\tif (wait === true ? --jQuery.readyWait : jQuery.isReady) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Remember that the DOM is ready\n\t\t\tjQuery.isReady = true;\n\n\t\t\t// If a normal DOM Ready event fired, decrement, and wait if need be\n\t\t\tif (wait !== true && --jQuery.readyWait > 0) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If there are functions bound, to execute\n\t\t\treadyList.resolveWith(document, [jQuery]);\n\t\t}\n\t});\n\n\tjQuery.ready.then = readyList.then;\n\n\t// The ready event handler and self cleanup method\n\tfunction completed() {\n\t\tdocument.removeEventListener(\"DOMContentLoaded\", completed);\n\t\twindow.removeEventListener(\"load\", completed);\n\t\tjQuery.ready();\n\t}\n\n\t// Catch cases where $(document).ready() is called\n\t// after the browser event has already occurred.\n\t// Support: IE <=9 - 10 only\n\t// Older IE sometimes signals \"interactive\" too soon\n\tif (document.readyState === \"complete\" ||\n\t\t(document.readyState !== \"loading\" && !document.documentElement.doScroll)) {\n\n\t\t// Handle it asynchronously to allow scripts the opportunity to delay ready\n\t\twindow.setTimeout(jQuery.ready);\n\n\t} else {\n\n\t\t// Use the handy event callback\n\t\tdocument.addEventListener(\"DOMContentLoaded\", completed);\n\n\t\t// A fallback to window.onload, that will always work\n\t\twindow.addEventListener(\"load\", completed);\n\t}\n\n\n\n\n\t// Multifunctional method to get and set values of a collection\n\t// The value/s can optionally be executed if it's a function\n\tvar access = function (elems, fn, key, value, chainable, emptyGet, raw) {\n\t\tvar i = 0,\n\t\t\tlen = elems.length,\n\t\t\tbulk = key == null;\n\n\t\t// Sets many values\n\t\tif (toType(key) === \"object\") {\n\t\t\tchainable = true;\n\t\t\tfor (i in key) {\n\t\t\t\taccess(elems, fn, i, key[i], true, emptyGet, raw);\n\t\t\t}\n\n\t\t\t// Sets one value\n\t\t} else if (value !== undefined) {\n\t\t\tchainable = true;\n\n\t\t\tif (!isFunction(value)) {\n\t\t\t\traw = true;\n\t\t\t}\n\n\t\t\tif (bulk) {\n\n\t\t\t\t// Bulk operations run against the entire set\n\t\t\t\tif (raw) {\n\t\t\t\t\tfn.call(elems, value);\n\t\t\t\t\tfn = null;\n\n\t\t\t\t\t// ...except when executing function values\n\t\t\t\t} else {\n\t\t\t\t\tbulk = fn;\n\t\t\t\t\tfn = function (elem, _key, value) {\n\t\t\t\t\t\treturn bulk.call(jQuery(elem), value);\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (fn) {\n\t\t\t\tfor (; i < len; i++) {\n\t\t\t\t\tfn(\n\t\t\t\t\t\telems[i], key, raw ?\n\t\t\t\t\t\tvalue :\n\t\t\t\t\t\tvalue.call(elems[i], i, fn(elems[i], key))\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (chainable) {\n\t\t\treturn elems;\n\t\t}\n\n\t\t// Gets\n\t\tif (bulk) {\n\t\t\treturn fn.call(elems);\n\t\t}\n\n\t\treturn len ? fn(elems[0], key) : emptyGet;\n\t};\n\n\n\t// Matches dashed string for camelizing\n\tvar rmsPrefix = /^-ms-/,\n\t\trdashAlpha = /-([a-z])/g;\n\n\t// Used by camelCase as callback to replace()\n\tfunction fcamelCase(_all, letter) {\n\t\treturn letter.toUpperCase();\n\t}\n\n\t// Convert dashed to camelCase; used by the css and data modules\n\t// Support: IE <=9 - 11, Edge 12 - 15\n\t// Microsoft forgot to hump their vendor prefix (trac-9572)\n\tfunction camelCase(string) {\n\t\treturn string.replace(rmsPrefix, \"ms-\").replace(rdashAlpha, fcamelCase);\n\t}\n\tvar acceptData = function (owner) {\n\n\t\t// Accepts only:\n\t\t//  - Node\n\t\t//    - Node.ELEMENT_NODE\n\t\t//    - Node.DOCUMENT_NODE\n\t\t//  - Object\n\t\t//    - Any\n\t\treturn owner.nodeType === 1 || owner.nodeType === 9 || !(+owner.nodeType);\n\t};\n\n\n\n\n\tfunction Data() {\n\t\tthis.expando = jQuery.expando + Data.uid++;\n\t}\n\n\tData.uid = 1;\n\n\tData.prototype = {\n\n\t\tcache: function (owner) {\n\n\t\t\t// Check if the owner object already has a cache\n\t\t\tvar value = owner[this.expando];\n\n\t\t\t// If not, create one\n\t\t\tif (!value) {\n\t\t\t\tvalue = {};\n\n\t\t\t\t// We can accept data for non-element nodes in modern browsers,\n\t\t\t\t// but we should not, see trac-8335.\n\t\t\t\t// Always return an empty object.\n\t\t\t\tif (acceptData(owner)) {\n\n\t\t\t\t\t// If it is a node unlikely to be stringify-ed or looped over\n\t\t\t\t\t// use plain assignment\n\t\t\t\t\tif (owner.nodeType) {\n\t\t\t\t\t\towner[this.expando] = value;\n\n\t\t\t\t\t\t// Otherwise secure it in a non-enumerable property\n\t\t\t\t\t\t// configurable must be true to allow the property to be\n\t\t\t\t\t\t// deleted when data is removed\n\t\t\t\t\t} else {\n\t\t\t\t\t\tObject.defineProperty(owner, this.expando, {\n\t\t\t\t\t\t\tvalue: value,\n\t\t\t\t\t\t\tconfigurable: true\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn value;\n\t\t},\n\t\tset: function (owner, data, value) {\n\t\t\tvar prop,\n\t\t\t\tcache = this.cache(owner);\n\n\t\t\t// Handle: [ owner, key, value ] args\n\t\t\t// Always use camelCase key (gh-2257)\n\t\t\tif (typeof data === \"string\") {\n\t\t\t\tcache[camelCase(data)] = value;\n\n\t\t\t\t// Handle: [ owner, { properties } ] args\n\t\t\t} else {\n\n\t\t\t\t// Copy the properties one-by-one to the cache object\n\t\t\t\tfor (prop in data) {\n\t\t\t\t\tcache[camelCase(prop)] = data[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn cache;\n\t\t},\n\t\tget: function (owner, key) {\n\t\t\treturn key === undefined ?\n\t\t\t\tthis.cache(owner) :\n\n\t\t\t\t// Always use camelCase key (gh-2257)\n\t\t\t\towner[this.expando] && owner[this.expando][camelCase(key)];\n\t\t},\n\t\taccess: function (owner, key, value) {\n\n\t\t\t// In cases where either:\n\t\t\t//\n\t\t\t//   1. No key was specified\n\t\t\t//   2. A string key was specified, but no value provided\n\t\t\t//\n\t\t\t// Take the \"read\" path and allow the get method to determine\n\t\t\t// which value to return, respectively either:\n\t\t\t//\n\t\t\t//   1. The entire cache object\n\t\t\t//   2. The data stored at the key\n\t\t\t//\n\t\t\tif (key === undefined ||\n\t\t\t\t((key && typeof key === \"string\") && value === undefined)) {\n\n\t\t\t\treturn this.get(owner, key);\n\t\t\t}\n\n\t\t\t// When the key is not a string, or both a key and value\n\t\t\t// are specified, set or extend (existing objects) with either:\n\t\t\t//\n\t\t\t//   1. An object of properties\n\t\t\t//   2. A key and value\n\t\t\t//\n\t\t\tthis.set(owner, key, value);\n\n\t\t\t// Since the \"set\" path can have two possible entry points\n\t\t\t// return the expected data based on which path was taken[*]\n\t\t\treturn value !== undefined ? value : key;\n\t\t},\n\t\tremove: function (owner, key) {\n\t\t\tvar i,\n\t\t\t\tcache = owner[this.expando];\n\n\t\t\tif (cache === undefined) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (key !== undefined) {\n\n\t\t\t\t// Support array or space separated string of keys\n\t\t\t\tif (Array.isArray(key)) {\n\n\t\t\t\t\t// If key is an array of keys...\n\t\t\t\t\t// We always set camelCase keys, so remove that.\n\t\t\t\t\tkey = key.map(camelCase);\n\t\t\t\t} else {\n\t\t\t\t\tkey = camelCase(key);\n\n\t\t\t\t\t// If a key with the spaces exists, use it.\n\t\t\t\t\t// Otherwise, create an array by matching non-whitespace\n\t\t\t\t\tkey = key in cache ?\n\t\t\t\t\t\t[key] :\n\t\t\t\t\t\t(key.match(rnothtmlwhite) || []);\n\t\t\t\t}\n\n\t\t\t\ti = key.length;\n\n\t\t\t\twhile (i--) {\n\t\t\t\t\tdelete cache[key[i]];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove the expando if there's no more data\n\t\t\tif (key === undefined || jQuery.isEmptyObject(cache)) {\n\n\t\t\t\t// Support: Chrome <=35 - 45\n\t\t\t\t// Webkit & Blink performance suffers when deleting properties\n\t\t\t\t// from DOM nodes, so set to undefined instead\n\t\t\t\t// https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted)\n\t\t\t\tif (owner.nodeType) {\n\t\t\t\t\towner[this.expando] = undefined;\n\t\t\t\t} else {\n\t\t\t\t\tdelete owner[this.expando];\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\thasData: function (owner) {\n\t\t\tvar cache = owner[this.expando];\n\t\t\treturn cache !== undefined && !jQuery.isEmptyObject(cache);\n\t\t}\n\t};\n\tvar dataPriv = new Data();\n\n\tvar dataUser = new Data();\n\n\n\n\t//\tImplementation Summary\n\t//\n\t//\t1. Enforce API surface and semantic compatibility with 1.9.x branch\n\t//\t2. Improve the module's maintainability by reducing the storage\n\t//\t\tpaths to a single mechanism.\n\t//\t3. Use the same single mechanism to support \"private\" and \"user\" data.\n\t//\t4. _Never_ expose \"private\" data to user code (TODO: Drop _data, _removeData)\n\t//\t5. Avoid exposing implementation details on user objects (eg. expando properties)\n\t//\t6. Provide a clear path for implementation upgrade to WeakMap in 2014\n\n\tvar rbrace = /^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,\n\t\trmultiDash = /[A-Z]/g;\n\n\tfunction getData(data) {\n\t\tif (data === \"true\") {\n\t\t\treturn true;\n\t\t}\n\n\t\tif (data === \"false\") {\n\t\t\treturn false;\n\t\t}\n\n\t\tif (data === \"null\") {\n\t\t\treturn null;\n\t\t}\n\n\t\t// Only convert to a number if it doesn't change the string\n\t\tif (data === +data + \"\") {\n\t\t\treturn +data;\n\t\t}\n\n\t\tif (rbrace.test(data)) {\n\t\t\treturn JSON.parse(data);\n\t\t}\n\n\t\treturn data;\n\t}\n\n\tfunction dataAttr(elem, key, data) {\n\t\tvar name;\n\n\t\t// If nothing was found internally, try to fetch any\n\t\t// data from the HTML5 data-* attribute\n\t\tif (data === undefined && elem.nodeType === 1) {\n\t\t\tname = \"data-\" + key.replace(rmultiDash, \"-$&\").toLowerCase();\n\t\t\tdata = elem.getAttribute(name);\n\n\t\t\tif (typeof data === \"string\") {\n\t\t\t\ttry {\n\t\t\t\t\tdata = getData(data);\n\t\t\t\t} catch (e) { }\n\n\t\t\t\t// Make sure we set the data so it isn't changed later\n\t\t\t\tdataUser.set(elem, key, data);\n\t\t\t} else {\n\t\t\t\tdata = undefined;\n\t\t\t}\n\t\t}\n\t\treturn data;\n\t}\n\n\tjQuery.extend({\n\t\thasData: function (elem) {\n\t\t\treturn dataUser.hasData(elem) || dataPriv.hasData(elem);\n\t\t},\n\n\t\tdata: function (elem, name, data) {\n\t\t\treturn dataUser.access(elem, name, data);\n\t\t},\n\n\t\tremoveData: function (elem, name) {\n\t\t\tdataUser.remove(elem, name);\n\t\t},\n\n\t\t// TODO: Now that all calls to _data and _removeData have been replaced\n\t\t// with direct calls to dataPriv methods, these can be deprecated.\n\t\t_data: function (elem, name, data) {\n\t\t\treturn dataPriv.access(elem, name, data);\n\t\t},\n\n\t\t_removeData: function (elem, name) {\n\t\t\tdataPriv.remove(elem, name);\n\t\t}\n\t});\n\n\tjQuery.fn.extend({\n\t\tdata: function (key, value) {\n\t\t\tvar i, name, data,\n\t\t\t\telem = this[0],\n\t\t\t\tattrs = elem && elem.attributes;\n\n\t\t\t// Gets all values\n\t\t\tif (key === undefined) {\n\t\t\t\tif (this.length) {\n\t\t\t\t\tdata = dataUser.get(elem);\n\n\t\t\t\t\tif (elem.nodeType === 1 && !dataPriv.get(elem, \"hasDataAttrs\")) {\n\t\t\t\t\t\ti = attrs.length;\n\t\t\t\t\t\twhile (i--) {\n\n\t\t\t\t\t\t\t// Support: IE 11 only\n\t\t\t\t\t\t\t// The attrs elements can be null (trac-14894)\n\t\t\t\t\t\t\tif (attrs[i]) {\n\t\t\t\t\t\t\t\tname = attrs[i].name;\n\t\t\t\t\t\t\t\tif (name.indexOf(\"data-\") === 0) {\n\t\t\t\t\t\t\t\t\tname = camelCase(name.slice(5));\n\t\t\t\t\t\t\t\t\tdataAttr(elem, name, data[name]);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdataPriv.set(elem, \"hasDataAttrs\", true);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn data;\n\t\t\t}\n\n\t\t\t// Sets multiple values\n\t\t\tif (typeof key === \"object\") {\n\t\t\t\treturn this.each(function () {\n\t\t\t\t\tdataUser.set(this, key);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn access(this, function (value) {\n\t\t\t\tvar data;\n\n\t\t\t\t// The calling jQuery object (element matches) is not empty\n\t\t\t\t// (and therefore has an element appears at this[ 0 ]) and the\n\t\t\t\t// `value` parameter was not undefined. An empty jQuery object\n\t\t\t\t// will result in `undefined` for elem = this[ 0 ] which will\n\t\t\t\t// throw an exception if an attempt to read a data cache is made.\n\t\t\t\tif (elem && value === undefined) {\n\n\t\t\t\t\t// Attempt to get data from the cache\n\t\t\t\t\t// The key will always be camelCased in Data\n\t\t\t\t\tdata = dataUser.get(elem, key);\n\t\t\t\t\tif (data !== undefined) {\n\t\t\t\t\t\treturn data;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Attempt to \"discover\" the data in\n\t\t\t\t\t// HTML5 custom data-* attrs\n\t\t\t\t\tdata = dataAttr(elem, key);\n\t\t\t\t\tif (data !== undefined) {\n\t\t\t\t\t\treturn data;\n\t\t\t\t\t}\n\n\t\t\t\t\t// We tried really hard, but the data doesn't exist.\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Set the data...\n\t\t\t\tthis.each(function () {\n\n\t\t\t\t\t// We always store the camelCased key\n\t\t\t\t\tdataUser.set(this, key, value);\n\t\t\t\t});\n\t\t\t}, null, value, arguments.length > 1, null, true);\n\t\t},\n\n\t\tremoveData: function (key) {\n\t\t\treturn this.each(function () {\n\t\t\t\tdataUser.remove(this, key);\n\t\t\t});\n\t\t}\n\t});\n\n\n\tjQuery.extend({\n\t\tqueue: function (elem, type, data) {\n\t\t\tvar queue;\n\n\t\t\tif (elem) {\n\t\t\t\ttype = (type || \"fx\") + \"queue\";\n\t\t\t\tqueue = dataPriv.get(elem, type);\n\n\t\t\t\t// Speed up dequeue by getting out quickly if this is just a lookup\n\t\t\t\tif (data) {\n\t\t\t\t\tif (!queue || Array.isArray(data)) {\n\t\t\t\t\t\tqueue = dataPriv.access(elem, type, jQuery.makeArray(data));\n\t\t\t\t\t} else {\n\t\t\t\t\t\tqueue.push(data);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn queue || [];\n\t\t\t}\n\t\t},\n\n\t\tdequeue: function (elem, type) {\n\t\t\ttype = type || \"fx\";\n\n\t\t\tvar queue = jQuery.queue(elem, type),\n\t\t\t\tstartLength = queue.length,\n\t\t\t\tfn = queue.shift(),\n\t\t\t\thooks = jQuery._queueHooks(elem, type),\n\t\t\t\tnext = function () {\n\t\t\t\t\tjQuery.dequeue(elem, type);\n\t\t\t\t};\n\n\t\t\t// If the fx queue is dequeued, always remove the progress sentinel\n\t\t\tif (fn === \"inprogress\") {\n\t\t\t\tfn = queue.shift();\n\t\t\t\tstartLength--;\n\t\t\t}\n\n\t\t\tif (fn) {\n\n\t\t\t\t// Add a progress sentinel to prevent the fx queue from being\n\t\t\t\t// automatically dequeued\n\t\t\t\tif (type === \"fx\") {\n\t\t\t\t\tqueue.unshift(\"inprogress\");\n\t\t\t\t}\n\n\t\t\t\t// Clear up the last queue stop function\n\t\t\t\tdelete hooks.stop;\n\t\t\t\tfn.call(elem, next, hooks);\n\t\t\t}\n\n\t\t\tif (!startLength && hooks) {\n\t\t\t\thooks.empty.fire();\n\t\t\t}\n\t\t},\n\n\t\t// Not public - generate a queueHooks object, or return the current one\n\t\t_queueHooks: function (elem, type) {\n\t\t\tvar key = type + \"queueHooks\";\n\t\t\treturn dataPriv.get(elem, key) || dataPriv.access(elem, key, {\n\t\t\t\tempty: jQuery.Callbacks(\"once memory\").add(function () {\n\t\t\t\t\tdataPriv.remove(elem, [type + \"queue\", key]);\n\t\t\t\t})\n\t\t\t});\n\t\t}\n\t});\n\n\tjQuery.fn.extend({\n\t\tqueue: function (type, data) {\n\t\t\tvar setter = 2;\n\n\t\t\tif (typeof type !== \"string\") {\n\t\t\t\tdata = type;\n\t\t\t\ttype = \"fx\";\n\t\t\t\tsetter--;\n\t\t\t}\n\n\t\t\tif (arguments.length < setter) {\n\t\t\t\treturn jQuery.queue(this[0], type);\n\t\t\t}\n\n\t\t\treturn data === undefined ?\n\t\t\t\tthis :\n\t\t\t\tthis.each(function () {\n\t\t\t\t\tvar queue = jQuery.queue(this, type, data);\n\n\t\t\t\t\t// Ensure a hooks for this queue\n\t\t\t\t\tjQuery._queueHooks(this, type);\n\n\t\t\t\t\tif (type === \"fx\" && queue[0] !== \"inprogress\") {\n\t\t\t\t\t\tjQuery.dequeue(this, type);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t},\n\t\tdequeue: function (type) {\n\t\t\treturn this.each(function () {\n\t\t\t\tjQuery.dequeue(this, type);\n\t\t\t});\n\t\t},\n\t\tclearQueue: function (type) {\n\t\t\treturn this.queue(type || \"fx\", []);\n\t\t},\n\n\t\t// Get a promise resolved when queues of a certain type\n\t\t// are emptied (fx is the type by default)\n\t\tpromise: function (type, obj) {\n\t\t\tvar tmp,\n\t\t\t\tcount = 1,\n\t\t\t\tdefer = jQuery.Deferred(),\n\t\t\t\telements = this,\n\t\t\t\ti = this.length,\n\t\t\t\tresolve = function () {\n\t\t\t\t\tif (!(--count)) {\n\t\t\t\t\t\tdefer.resolveWith(elements, [elements]);\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\tif (typeof type !== \"string\") {\n\t\t\t\tobj = type;\n\t\t\t\ttype = undefined;\n\t\t\t}\n\t\t\ttype = type || \"fx\";\n\n\t\t\twhile (i--) {\n\t\t\t\ttmp = dataPriv.get(elements[i], type + \"queueHooks\");\n\t\t\t\tif (tmp && tmp.empty) {\n\t\t\t\t\tcount++;\n\t\t\t\t\ttmp.empty.add(resolve);\n\t\t\t\t}\n\t\t\t}\n\t\t\tresolve();\n\t\t\treturn defer.promise(obj);\n\t\t}\n\t});\n\tvar pnum = (/[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/).source;\n\n\tvar rcssNum = new RegExp(\"^(?:([+-])=|)(\" + pnum + \")([a-z%]*)$\", \"i\");\n\n\n\tvar cssExpand = [\"Top\", \"Right\", \"Bottom\", \"Left\"];\n\n\tvar documentElement = document.documentElement;\n\n\n\n\tvar isAttached = function (elem) {\n\t\treturn jQuery.contains(elem.ownerDocument, elem);\n\t},\n\t\tcomposed = { composed: true };\n\n\t// Support: IE 9 - 11+, Edge 12 - 18+, iOS 10.0 - 10.2 only\n\t// Check attachment across shadow DOM boundaries when possible (gh-3504)\n\t// Support: iOS 10.0-10.2 only\n\t// Early iOS 10 versions support `attachShadow` but not `getRootNode`,\n\t// leading to errors. We need to check for `getRootNode`.\n\tif (documentElement.getRootNode) {\n\t\tisAttached = function (elem) {\n\t\t\treturn jQuery.contains(elem.ownerDocument, elem) ||\n\t\t\t\telem.getRootNode(composed) === elem.ownerDocument;\n\t\t};\n\t}\n\tvar isHiddenWithinTree = function (elem, el) {\n\n\t\t// isHiddenWithinTree might be called from jQuery#filter function;\n\t\t// in that case, element will be second argument\n\t\telem = el || elem;\n\n\t\t// Inline style trumps all\n\t\treturn elem.style.display === \"none\" ||\n\t\t\telem.style.display === \"\" &&\n\n\t\t\t// Otherwise, check computed style\n\t\t\t// Support: Firefox <=43 - 45\n\t\t\t// Disconnected elements can have computed display: none, so first confirm that elem is\n\t\t\t// in the document.\n\t\t\tisAttached(elem) &&\n\n\t\t\tjQuery.css(elem, \"display\") === \"none\";\n\t};\n\n\n\n\tfunction adjustCSS(elem, prop, valueParts, tween) {\n\t\tvar adjusted, scale,\n\t\t\tmaxIterations = 20,\n\t\t\tcurrentValue = tween ?\n\t\t\t\tfunction () {\n\t\t\t\t\treturn tween.cur();\n\t\t\t\t} :\n\t\t\t\tfunction () {\n\t\t\t\t\treturn jQuery.css(elem, prop, \"\");\n\t\t\t\t},\n\t\t\tinitial = currentValue(),\n\t\t\tunit = valueParts && valueParts[3] || (jQuery.cssNumber[prop] ? \"\" : \"px\"),\n\n\t\t\t// Starting value computation is required for potential unit mismatches\n\t\t\tinitialInUnit = elem.nodeType &&\n\t\t\t\t(jQuery.cssNumber[prop] || unit !== \"px\" && +initial) &&\n\t\t\t\trcssNum.exec(jQuery.css(elem, prop));\n\n\t\tif (initialInUnit && initialInUnit[3] !== unit) {\n\n\t\t\t// Support: Firefox <=54\n\t\t\t// Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144)\n\t\t\tinitial = initial / 2;\n\n\t\t\t// Trust units reported by jQuery.css\n\t\t\tunit = unit || initialInUnit[3];\n\n\t\t\t// Iteratively approximate from a nonzero starting point\n\t\t\tinitialInUnit = +initial || 1;\n\n\t\t\twhile (maxIterations--) {\n\n\t\t\t\t// Evaluate and update our best guess (doubling guesses that zero out).\n\t\t\t\t// Finish if the scale equals or crosses 1 (making the old*new product non-positive).\n\t\t\t\tjQuery.style(elem, prop, initialInUnit + unit);\n\t\t\t\tif ((1 - scale) * (1 - (scale = currentValue() / initial || 0.5)) <= 0) {\n\t\t\t\t\tmaxIterations = 0;\n\t\t\t\t}\n\t\t\t\tinitialInUnit = initialInUnit / scale;\n\n\t\t\t}\n\n\t\t\tinitialInUnit = initialInUnit * 2;\n\t\t\tjQuery.style(elem, prop, initialInUnit + unit);\n\n\t\t\t// Make sure we update the tween properties later on\n\t\t\tvalueParts = valueParts || [];\n\t\t}\n\n\t\tif (valueParts) {\n\t\t\tinitialInUnit = +initialInUnit || +initial || 0;\n\n\t\t\t// Apply relative offset (+=/-=) if specified\n\t\t\tadjusted = valueParts[1] ?\n\t\t\t\tinitialInUnit + (valueParts[1] + 1) * valueParts[2] :\n\t\t\t\t+valueParts[2];\n\t\t\tif (tween) {\n\t\t\t\ttween.unit = unit;\n\t\t\t\ttween.start = initialInUnit;\n\t\t\t\ttween.end = adjusted;\n\t\t\t}\n\t\t}\n\t\treturn adjusted;\n\t}\n\n\n\tvar defaultDisplayMap = {};\n\n\tfunction getDefaultDisplay(elem) {\n\t\tvar temp,\n\t\t\tdoc = elem.ownerDocument,\n\t\t\tnodeName = elem.nodeName,\n\t\t\tdisplay = defaultDisplayMap[nodeName];\n\n\t\tif (display) {\n\t\t\treturn display;\n\t\t}\n\n\t\ttemp = doc.body.appendChild(doc.createElement(nodeName));\n\t\tdisplay = jQuery.css(temp, \"display\");\n\n\t\ttemp.parentNode.removeChild(temp);\n\n\t\tif (display === \"none\") {\n\t\t\tdisplay = \"block\";\n\t\t}\n\t\tdefaultDisplayMap[nodeName] = display;\n\n\t\treturn display;\n\t}\n\n\tfunction showHide(elements, show) {\n\t\tvar display, elem,\n\t\t\tvalues = [],\n\t\t\tindex = 0,\n\t\t\tlength = elements.length;\n\n\t\t// Determine new display value for elements that need to change\n\t\tfor (; index < length; index++) {\n\t\t\telem = elements[index];\n\t\t\tif (!elem.style) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tdisplay = elem.style.display;\n\t\t\tif (show) {\n\n\t\t\t\t// Since we force visibility upon cascade-hidden elements, an immediate (and slow)\n\t\t\t\t// check is required in this first loop unless we have a nonempty display value (either\n\t\t\t\t// inline or about-to-be-restored)\n\t\t\t\tif (display === \"none\") {\n\t\t\t\t\tvalues[index] = dataPriv.get(elem, \"display\") || null;\n\t\t\t\t\tif (!values[index]) {\n\t\t\t\t\t\telem.style.display = \"\";\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (elem.style.display === \"\" && isHiddenWithinTree(elem)) {\n\t\t\t\t\tvalues[index] = getDefaultDisplay(elem);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (display !== \"none\") {\n\t\t\t\t\tvalues[index] = \"none\";\n\n\t\t\t\t\t// Remember what we're overwriting\n\t\t\t\t\tdataPriv.set(elem, \"display\", display);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Set the display of the elements in a second loop to avoid constant reflow\n\t\tfor (index = 0; index < length; index++) {\n\t\t\tif (values[index] != null) {\n\t\t\t\telements[index].style.display = values[index];\n\t\t\t}\n\t\t}\n\n\t\treturn elements;\n\t}\n\n\tjQuery.fn.extend({\n\t\tshow: function () {\n\t\t\treturn showHide(this, true);\n\t\t},\n\t\thide: function () {\n\t\t\treturn showHide(this);\n\t\t},\n\t\ttoggle: function (state) {\n\t\t\tif (typeof state === \"boolean\") {\n\t\t\t\treturn state ? this.show() : this.hide();\n\t\t\t}\n\n\t\t\treturn this.each(function () {\n\t\t\t\tif (isHiddenWithinTree(this)) {\n\t\t\t\t\tjQuery(this).show();\n\t\t\t\t} else {\n\t\t\t\t\tjQuery(this).hide();\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t});\n\tvar rcheckableType = (/^(?:checkbox|radio)$/i);\n\n\tvar rtagName = (/<([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]*)/i);\n\n\tvar rscriptType = (/^$|^module$|\\/(?:java|ecma)script/i);\n\n\n\n\t(function () {\n\t\tvar fragment = document.createDocumentFragment(),\n\t\t\tdiv = fragment.appendChild(document.createElement(\"div\")),\n\t\t\tinput = document.createElement(\"input\");\n\n\t\t// Support: Android 4.0 - 4.3 only\n\t\t// Check state lost if the name is set (trac-11217)\n\t\t// Support: Windows Web Apps (WWA)\n\t\t// `name` and `type` must use .setAttribute for WWA (trac-14901)\n\t\tinput.setAttribute(\"type\", \"radio\");\n\t\tinput.setAttribute(\"checked\", \"checked\");\n\t\tinput.setAttribute(\"name\", \"t\");\n\n\t\tdiv.appendChild(input);\n\n\t\t// Support: Android <=4.1 only\n\t\t// Older WebKit doesn't clone checked state correctly in fragments\n\t\tsupport.checkClone = div.cloneNode(true).cloneNode(true).lastChild.checked;\n\n\t\t// Support: IE <=11 only\n\t\t// Make sure textarea (and checkbox) defaultValue is properly cloned\n\t\tdiv.innerHTML = \"<textarea>x</textarea>\";\n\t\tsupport.noCloneChecked = !!div.cloneNode(true).lastChild.defaultValue;\n\n\t\t// Support: IE <=9 only\n\t\t// IE <=9 replaces <option> tags with their contents when inserted outside of\n\t\t// the select element.\n\t\tdiv.innerHTML = \"<option></option>\";\n\t\tsupport.option = !!div.lastChild;\n\t})();\n\n\n\t// We have to close these tags to support XHTML (trac-13200)\n\tvar wrapMap = {\n\n\t\t// XHTML parsers do not magically insert elements in the\n\t\t// same way that tag soup parsers do. So we cannot shorten\n\t\t// this by omitting <tbody> or other required elements.\n\t\tthead: [1, \"<table>\", \"</table>\"],\n\t\tcol: [2, \"<table><colgroup>\", \"</colgroup></table>\"],\n\t\ttr: [2, \"<table><tbody>\", \"</tbody></table>\"],\n\t\ttd: [3, \"<table><tbody><tr>\", \"</tr></tbody></table>\"],\n\n\t\t_default: [0, \"\", \"\"]\n\t};\n\n\twrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;\n\twrapMap.th = wrapMap.td;\n\n\t// Support: IE <=9 only\n\tif (!support.option) {\n\t\twrapMap.optgroup = wrapMap.option = [1, \"<select multiple='multiple'>\", \"</select>\"];\n\t}\n\n\n\tfunction getAll(context, tag) {\n\n\t\t// Support: IE <=9 - 11 only\n\t\t// Use typeof to avoid zero-argument method invocation on host objects (trac-15151)\n\t\tvar ret;\n\n\t\tif (typeof context.getElementsByTagName !== \"undefined\") {\n\t\t\tret = context.getElementsByTagName(tag || \"*\");\n\n\t\t} else if (typeof context.querySelectorAll !== \"undefined\") {\n\t\t\tret = context.querySelectorAll(tag || \"*\");\n\n\t\t} else {\n\t\t\tret = [];\n\t\t}\n\n\t\tif (tag === undefined || tag && nodeName(context, tag)) {\n\t\t\treturn jQuery.merge([context], ret);\n\t\t}\n\n\t\treturn ret;\n\t}\n\n\n\t// Mark scripts as having already been evaluated\n\tfunction setGlobalEval(elems, refElements) {\n\t\tvar i = 0,\n\t\t\tl = elems.length;\n\n\t\tfor (; i < l; i++) {\n\t\t\tdataPriv.set(\n\t\t\t\telems[i],\n\t\t\t\t\"globalEval\",\n\t\t\t\t!refElements || dataPriv.get(refElements[i], \"globalEval\")\n\t\t\t);\n\t\t}\n\t}\n\n\n\tvar rhtml = /<|&#?\\w+;/;\n\n\tfunction buildFragment(elems, context, scripts, selection, ignored) {\n\t\tvar elem, tmp, tag, wrap, attached, j,\n\t\t\tfragment = context.createDocumentFragment(),\n\t\t\tnodes = [],\n\t\t\ti = 0,\n\t\t\tl = elems.length;\n\n\t\tfor (; i < l; i++) {\n\t\t\telem = elems[i];\n\n\t\t\tif (elem || elem === 0) {\n\n\t\t\t\t// Add nodes directly\n\t\t\t\tif (toType(elem) === \"object\") {\n\n\t\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\t\tjQuery.merge(nodes, elem.nodeType ? [elem] : elem);\n\n\t\t\t\t\t// Convert non-html into a text node\n\t\t\t\t} else if (!rhtml.test(elem)) {\n\t\t\t\t\tnodes.push(context.createTextNode(elem));\n\n\t\t\t\t\t// Convert html into DOM nodes\n\t\t\t\t} else {\n\t\t\t\t\ttmp = tmp || fragment.appendChild(context.createElement(\"div\"));\n\n\t\t\t\t\t// Deserialize a standard representation\n\t\t\t\t\ttag = (rtagName.exec(elem) || [\"\", \"\"])[1].toLowerCase();\n\t\t\t\t\twrap = wrapMap[tag] || wrapMap._default;\n\t\t\t\t\ttmp.innerHTML = wrap[1] + jQuery.htmlPrefilter(elem) + wrap[2];\n\n\t\t\t\t\t// Descend through wrappers to the right content\n\t\t\t\t\tj = wrap[0];\n\t\t\t\t\twhile (j--) {\n\t\t\t\t\t\ttmp = tmp.lastChild;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\t\tjQuery.merge(nodes, tmp.childNodes);\n\n\t\t\t\t\t// Remember the top-level container\n\t\t\t\t\ttmp = fragment.firstChild;\n\n\t\t\t\t\t// Ensure the created nodes are orphaned (trac-12392)\n\t\t\t\t\ttmp.textContent = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Remove wrapper from fragment\n\t\tfragment.textContent = \"\";\n\n\t\ti = 0;\n\t\twhile ((elem = nodes[i++])) {\n\n\t\t\t// Skip elements already in the context collection (trac-4087)\n\t\t\tif (selection && jQuery.inArray(elem, selection) > -1) {\n\t\t\t\tif (ignored) {\n\t\t\t\t\tignored.push(elem);\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tattached = isAttached(elem);\n\n\t\t\t// Append to fragment\n\t\t\ttmp = getAll(fragment.appendChild(elem), \"script\");\n\n\t\t\t// Preserve script evaluation history\n\t\t\tif (attached) {\n\t\t\t\tsetGlobalEval(tmp);\n\t\t\t}\n\n\t\t\t// Capture executables\n\t\t\tif (scripts) {\n\t\t\t\tj = 0;\n\t\t\t\twhile ((elem = tmp[j++])) {\n\t\t\t\t\tif (rscriptType.test(elem.type || \"\")) {\n\t\t\t\t\t\tscripts.push(elem);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn fragment;\n\t}\n\n\n\tvar rtypenamespace = /^([^.]*)(?:\\.(.+)|)/;\n\n\tfunction returnTrue() {\n\t\treturn true;\n\t}\n\n\tfunction returnFalse() {\n\t\treturn false;\n\t}\n\n\tfunction on(elem, types, selector, data, fn, one) {\n\t\tvar origFn, type;\n\n\t\t// Types can be a map of types/handlers\n\t\tif (typeof types === \"object\") {\n\n\t\t\t// ( types-Object, selector, data )\n\t\t\tif (typeof selector !== \"string\") {\n\n\t\t\t\t// ( types-Object, data )\n\t\t\t\tdata = data || selector;\n\t\t\t\tselector = undefined;\n\t\t\t}\n\t\t\tfor (type in types) {\n\t\t\t\ton(elem, type, selector, data, types[type], one);\n\t\t\t}\n\t\t\treturn elem;\n\t\t}\n\n\t\tif (data == null && fn == null) {\n\n\t\t\t// ( types, fn )\n\t\t\tfn = selector;\n\t\t\tdata = selector = undefined;\n\t\t} else if (fn == null) {\n\t\t\tif (typeof selector === \"string\") {\n\n\t\t\t\t// ( types, selector, fn )\n\t\t\t\tfn = data;\n\t\t\t\tdata = undefined;\n\t\t\t} else {\n\n\t\t\t\t// ( types, data, fn )\n\t\t\t\tfn = data;\n\t\t\t\tdata = selector;\n\t\t\t\tselector = undefined;\n\t\t\t}\n\t\t}\n\t\tif (fn === false) {\n\t\t\tfn = returnFalse;\n\t\t} else if (!fn) {\n\t\t\treturn elem;\n\t\t}\n\n\t\tif (one === 1) {\n\t\t\torigFn = fn;\n\t\t\tfn = function (event) {\n\n\t\t\t\t// Can use an empty set, since event contains the info\n\t\t\t\tjQuery().off(event);\n\t\t\t\treturn origFn.apply(this, arguments);\n\t\t\t};\n\n\t\t\t// Use same guid so caller can remove using origFn\n\t\t\tfn.guid = origFn.guid || (origFn.guid = jQuery.guid++);\n\t\t}\n\t\treturn elem.each(function () {\n\t\t\tjQuery.event.add(this, types, fn, data, selector);\n\t\t});\n\t}\n\n\t/*\n\t * Helper functions for managing events -- not part of the public interface.\n\t * Props to Dean Edwards' addEvent library for many of the ideas.\n\t */\n\tjQuery.event = {\n\n\t\tglobal: {},\n\n\t\tadd: function (elem, types, handler, data, selector) {\n\n\t\t\tvar handleObjIn, eventHandle, tmp,\n\t\t\t\tevents, t, handleObj,\n\t\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\t\telemData = dataPriv.get(elem);\n\n\t\t\t// Only attach events to objects that accept data\n\t\t\tif (!acceptData(elem)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Caller can pass in an object of custom data in lieu of the handler\n\t\t\tif (handler.handler) {\n\t\t\t\thandleObjIn = handler;\n\t\t\t\thandler = handleObjIn.handler;\n\t\t\t\tselector = handleObjIn.selector;\n\t\t\t}\n\n\t\t\t// Ensure that invalid selectors throw exceptions at attach time\n\t\t\t// Evaluate against documentElement in case elem is a non-element node (e.g., document)\n\t\t\tif (selector) {\n\t\t\t\tjQuery.find.matchesSelector(documentElement, selector);\n\t\t\t}\n\n\t\t\t// Make sure that the handler has a unique ID, used to find/remove it later\n\t\t\tif (!handler.guid) {\n\t\t\t\thandler.guid = jQuery.guid++;\n\t\t\t}\n\n\t\t\t// Init the element's event structure and main handler, if this is the first\n\t\t\tif (!(events = elemData.events)) {\n\t\t\t\tevents = elemData.events = Object.create(null);\n\t\t\t}\n\t\t\tif (!(eventHandle = elemData.handle)) {\n\t\t\t\teventHandle = elemData.handle = function (e) {\n\n\t\t\t\t\t// Discard the second event of a jQuery.event.trigger() and\n\t\t\t\t\t// when an event is called after a page has unloaded\n\t\t\t\t\treturn typeof jQuery !== \"undefined\" && jQuery.event.triggered !== e.type ?\n\t\t\t\t\t\tjQuery.event.dispatch.apply(elem, arguments) : undefined;\n\t\t\t\t};\n\t\t\t}\n\n\t\t\t// Handle multiple events separated by a space\n\t\t\ttypes = (types || \"\").match(rnothtmlwhite) || [\"\"];\n\t\t\tt = types.length;\n\t\t\twhile (t--) {\n\t\t\t\ttmp = rtypenamespace.exec(types[t]) || [];\n\t\t\t\ttype = origType = tmp[1];\n\t\t\t\tnamespaces = (tmp[2] || \"\").split(\".\").sort();\n\n\t\t\t\t// There *must* be a type, no attaching namespace-only handlers\n\t\t\t\tif (!type) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// If event changes its type, use the special event handlers for the changed type\n\t\t\t\tspecial = jQuery.event.special[type] || {};\n\n\t\t\t\t// If selector defined, determine special event api type, otherwise given type\n\t\t\t\ttype = (selector ? special.delegateType : special.bindType) || type;\n\n\t\t\t\t// Update special based on newly reset type\n\t\t\t\tspecial = jQuery.event.special[type] || {};\n\n\t\t\t\t// handleObj is passed to all event handlers\n\t\t\t\thandleObj = jQuery.extend({\n\t\t\t\t\ttype: type,\n\t\t\t\t\torigType: origType,\n\t\t\t\t\tdata: data,\n\t\t\t\t\thandler: handler,\n\t\t\t\t\tguid: handler.guid,\n\t\t\t\t\tselector: selector,\n\t\t\t\t\tneedsContext: selector && jQuery.expr.match.needsContext.test(selector),\n\t\t\t\t\tnamespace: namespaces.join(\".\")\n\t\t\t\t}, handleObjIn);\n\n\t\t\t\t// Init the event handler queue if we're the first\n\t\t\t\tif (!(handlers = events[type])) {\n\t\t\t\t\thandlers = events[type] = [];\n\t\t\t\t\thandlers.delegateCount = 0;\n\n\t\t\t\t\t// Only use addEventListener if the special events handler returns false\n\t\t\t\t\tif (!special.setup ||\n\t\t\t\t\t\tspecial.setup.call(elem, data, namespaces, eventHandle) === false) {\n\n\t\t\t\t\t\tif (elem.addEventListener) {\n\t\t\t\t\t\t\telem.addEventListener(type, eventHandle);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (special.add) {\n\t\t\t\t\tspecial.add.call(elem, handleObj);\n\n\t\t\t\t\tif (!handleObj.handler.guid) {\n\t\t\t\t\t\thandleObj.handler.guid = handler.guid;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Add to the element's handler list, delegates in front\n\t\t\t\tif (selector) {\n\t\t\t\t\thandlers.splice(handlers.delegateCount++, 0, handleObj);\n\t\t\t\t} else {\n\t\t\t\t\thandlers.push(handleObj);\n\t\t\t\t}\n\n\t\t\t\t// Keep track of which events have ever been used, for event optimization\n\t\t\t\tjQuery.event.global[type] = true;\n\t\t\t}\n\n\t\t},\n\n\t\t// Detach an event or set of events from an element\n\t\tremove: function (elem, types, handler, selector, mappedTypes) {\n\n\t\t\tvar j, origCount, tmp,\n\t\t\t\tevents, t, handleObj,\n\t\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\t\telemData = dataPriv.hasData(elem) && dataPriv.get(elem);\n\n\t\t\tif (!elemData || !(events = elemData.events)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Once for each type.namespace in types; type may be omitted\n\t\t\ttypes = (types || \"\").match(rnothtmlwhite) || [\"\"];\n\t\t\tt = types.length;\n\t\t\twhile (t--) {\n\t\t\t\ttmp = rtypenamespace.exec(types[t]) || [];\n\t\t\t\ttype = origType = tmp[1];\n\t\t\t\tnamespaces = (tmp[2] || \"\").split(\".\").sort();\n\n\t\t\t\t// Unbind all events (on this namespace, if provided) for the element\n\t\t\t\tif (!type) {\n\t\t\t\t\tfor (type in events) {\n\t\t\t\t\t\tjQuery.event.remove(elem, type + types[t], handler, selector, true);\n\t\t\t\t\t}\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tspecial = jQuery.event.special[type] || {};\n\t\t\t\ttype = (selector ? special.delegateType : special.bindType) || type;\n\t\t\t\thandlers = events[type] || [];\n\t\t\t\ttmp = tmp[2] &&\n\t\t\t\t\tnew RegExp(\"(^|\\\\.)\" + namespaces.join(\"\\\\.(?:.*\\\\.|)\") + \"(\\\\.|$)\");\n\n\t\t\t\t// Remove matching events\n\t\t\t\torigCount = j = handlers.length;\n\t\t\t\twhile (j--) {\n\t\t\t\t\thandleObj = handlers[j];\n\n\t\t\t\t\tif ((mappedTypes || origType === handleObj.origType) &&\n\t\t\t\t\t\t(!handler || handler.guid === handleObj.guid) &&\n\t\t\t\t\t\t(!tmp || tmp.test(handleObj.namespace)) &&\n\t\t\t\t\t\t(!selector || selector === handleObj.selector ||\n\t\t\t\t\t\t\tselector === \"**\" && handleObj.selector)) {\n\t\t\t\t\t\thandlers.splice(j, 1);\n\n\t\t\t\t\t\tif (handleObj.selector) {\n\t\t\t\t\t\t\thandlers.delegateCount--;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (special.remove) {\n\t\t\t\t\t\t\tspecial.remove.call(elem, handleObj);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Remove generic event handler if we removed something and no more handlers exist\n\t\t\t\t// (avoids potential for endless recursion during removal of special event handlers)\n\t\t\t\tif (origCount && !handlers.length) {\n\t\t\t\t\tif (!special.teardown ||\n\t\t\t\t\t\tspecial.teardown.call(elem, namespaces, elemData.handle) === false) {\n\n\t\t\t\t\t\tjQuery.removeEvent(elem, type, elemData.handle);\n\t\t\t\t\t}\n\n\t\t\t\t\tdelete events[type];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove data and the expando if it's no longer used\n\t\t\tif (jQuery.isEmptyObject(events)) {\n\t\t\t\tdataPriv.remove(elem, \"handle events\");\n\t\t\t}\n\t\t},\n\n\t\tdispatch: function (nativeEvent) {\n\n\t\t\tvar i, j, ret, matched, handleObj, handlerQueue,\n\t\t\t\targs = new Array(arguments.length),\n\n\t\t\t\t// Make a writable jQuery.Event from the native event object\n\t\t\t\tevent = jQuery.event.fix(nativeEvent),\n\n\t\t\t\thandlers = (\n\t\t\t\t\tdataPriv.get(this, \"events\") || Object.create(null)\n\t\t\t\t)[event.type] || [],\n\t\t\t\tspecial = jQuery.event.special[event.type] || {};\n\n\t\t\t// Use the fix-ed jQuery.Event rather than the (read-only) native event\n\t\t\targs[0] = event;\n\n\t\t\tfor (i = 1; i < arguments.length; i++) {\n\t\t\t\targs[i] = arguments[i];\n\t\t\t}\n\n\t\t\tevent.delegateTarget = this;\n\n\t\t\t// Call the preDispatch hook for the mapped type, and let it bail if desired\n\t\t\tif (special.preDispatch && special.preDispatch.call(this, event) === false) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Determine handlers\n\t\t\thandlerQueue = jQuery.event.handlers.call(this, event, handlers);\n\n\t\t\t// Run delegates first; they may want to stop propagation beneath us\n\t\t\ti = 0;\n\t\t\twhile ((matched = handlerQueue[i++]) && !event.isPropagationStopped()) {\n\t\t\t\tevent.currentTarget = matched.elem;\n\n\t\t\t\tj = 0;\n\t\t\t\twhile ((handleObj = matched.handlers[j++]) &&\n\t\t\t\t\t!event.isImmediatePropagationStopped()) {\n\n\t\t\t\t\t// If the event is namespaced, then each handler is only invoked if it is\n\t\t\t\t\t// specially universal or its namespaces are a superset of the event's.\n\t\t\t\t\tif (!event.rnamespace || handleObj.namespace === false ||\n\t\t\t\t\t\tevent.rnamespace.test(handleObj.namespace)) {\n\n\t\t\t\t\t\tevent.handleObj = handleObj;\n\t\t\t\t\t\tevent.data = handleObj.data;\n\n\t\t\t\t\t\tret = ((jQuery.event.special[handleObj.origType] || {}).handle ||\n\t\t\t\t\t\t\thandleObj.handler).apply(matched.elem, args);\n\n\t\t\t\t\t\tif (ret !== undefined) {\n\t\t\t\t\t\t\tif ((event.result = ret) === false) {\n\t\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Call the postDispatch hook for the mapped type\n\t\t\tif (special.postDispatch) {\n\t\t\t\tspecial.postDispatch.call(this, event);\n\t\t\t}\n\n\t\t\treturn event.result;\n\t\t},\n\n\t\thandlers: function (event, handlers) {\n\t\t\tvar i, handleObj, sel, matchedHandlers, matchedSelectors,\n\t\t\t\thandlerQueue = [],\n\t\t\t\tdelegateCount = handlers.delegateCount,\n\t\t\t\tcur = event.target;\n\n\t\t\t// Find delegate handlers\n\t\t\tif (delegateCount &&\n\n\t\t\t\t// Support: IE <=9\n\t\t\t\t// Black-hole SVG <use> instance trees (trac-13180)\n\t\t\t\tcur.nodeType &&\n\n\t\t\t\t// Support: Firefox <=42\n\t\t\t\t// Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861)\n\t\t\t\t// https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click\n\t\t\t\t// Support: IE 11 only\n\t\t\t\t// ...but not arrow key \"clicks\" of radio inputs, which can have `button` -1 (gh-2343)\n\t\t\t\t!(event.type === \"click\" && event.button >= 1)) {\n\n\t\t\t\tfor (; cur !== this; cur = cur.parentNode || this) {\n\n\t\t\t\t\t// Don't check non-elements (trac-13208)\n\t\t\t\t\t// Don't process clicks on disabled elements (trac-6911, trac-8165, trac-11382, trac-11764)\n\t\t\t\t\tif (cur.nodeType === 1 && !(event.type === \"click\" && cur.disabled === true)) {\n\t\t\t\t\t\tmatchedHandlers = [];\n\t\t\t\t\t\tmatchedSelectors = {};\n\t\t\t\t\t\tfor (i = 0; i < delegateCount; i++) {\n\t\t\t\t\t\t\thandleObj = handlers[i];\n\n\t\t\t\t\t\t\t// Don't conflict with Object.prototype properties (trac-13203)\n\t\t\t\t\t\t\tsel = handleObj.selector + \" \";\n\n\t\t\t\t\t\t\tif (matchedSelectors[sel] === undefined) {\n\t\t\t\t\t\t\t\tmatchedSelectors[sel] = handleObj.needsContext ?\n\t\t\t\t\t\t\t\t\tjQuery(sel, this).index(cur) > -1 :\n\t\t\t\t\t\t\t\t\tjQuery.find(sel, this, null, [cur]).length;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (matchedSelectors[sel]) {\n\t\t\t\t\t\t\t\tmatchedHandlers.push(handleObj);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (matchedHandlers.length) {\n\t\t\t\t\t\t\thandlerQueue.push({ elem: cur, handlers: matchedHandlers });\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Add the remaining (directly-bound) handlers\n\t\t\tcur = this;\n\t\t\tif (delegateCount < handlers.length) {\n\t\t\t\thandlerQueue.push({ elem: cur, handlers: handlers.slice(delegateCount) });\n\t\t\t}\n\n\t\t\treturn handlerQueue;\n\t\t},\n\n\t\taddProp: function (name, hook) {\n\t\t\tObject.defineProperty(jQuery.Event.prototype, name, {\n\t\t\t\tenumerable: true,\n\t\t\t\tconfigurable: true,\n\n\t\t\t\tget: isFunction(hook) ?\n\t\t\t\t\tfunction () {\n\t\t\t\t\t\tif (this.originalEvent) {\n\t\t\t\t\t\t\treturn hook(this.originalEvent);\n\t\t\t\t\t\t}\n\t\t\t\t\t} :\n\t\t\t\t\tfunction () {\n\t\t\t\t\t\tif (this.originalEvent) {\n\t\t\t\t\t\t\treturn this.originalEvent[name];\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\n\t\t\t\tset: function (value) {\n\t\t\t\t\tObject.defineProperty(this, name, {\n\t\t\t\t\t\tenumerable: true,\n\t\t\t\t\t\tconfigurable: true,\n\t\t\t\t\t\twritable: true,\n\t\t\t\t\t\tvalue: value\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\tfix: function (originalEvent) {\n\t\t\treturn originalEvent[jQuery.expando] ?\n\t\t\t\toriginalEvent :\n\t\t\t\tnew jQuery.Event(originalEvent);\n\t\t},\n\n\t\tspecial: {\n\t\t\tload: {\n\n\t\t\t\t// Prevent triggered image.load events from bubbling to window.load\n\t\t\t\tnoBubble: true\n\t\t\t},\n\t\t\tclick: {\n\n\t\t\t\t// Utilize native event to ensure correct state for checkable inputs\n\t\t\t\tsetup: function (data) {\n\n\t\t\t\t\t// For mutual compressibility with _default, replace `this` access with a local var.\n\t\t\t\t\t// `|| data` is dead code meant only to preserve the variable through minification.\n\t\t\t\t\tvar el = this || data;\n\n\t\t\t\t\t// Claim the first handler\n\t\t\t\t\tif (rcheckableType.test(el.type) &&\n\t\t\t\t\t\tel.click && nodeName(el, \"input\")) {\n\n\t\t\t\t\t\t// dataPriv.set( el, \"click\", ... )\n\t\t\t\t\t\tleverageNative(el, \"click\", true);\n\t\t\t\t\t}\n\n\t\t\t\t\t// Return false to allow normal processing in the caller\n\t\t\t\t\treturn false;\n\t\t\t\t},\n\t\t\t\ttrigger: function (data) {\n\n\t\t\t\t\t// For mutual compressibility with _default, replace `this` access with a local var.\n\t\t\t\t\t// `|| data` is dead code meant only to preserve the variable through minification.\n\t\t\t\t\tvar el = this || data;\n\n\t\t\t\t\t// Force setup before triggering a click\n\t\t\t\t\tif (rcheckableType.test(el.type) &&\n\t\t\t\t\t\tel.click && nodeName(el, \"input\")) {\n\n\t\t\t\t\t\tleverageNative(el, \"click\");\n\t\t\t\t\t}\n\n\t\t\t\t\t// Return non-false to allow normal event-path propagation\n\t\t\t\t\treturn true;\n\t\t\t\t},\n\n\t\t\t\t// For cross-browser consistency, suppress native .click() on links\n\t\t\t\t// Also prevent it if we're currently inside a leveraged native-event stack\n\t\t\t\t_default: function (event) {\n\t\t\t\t\tvar target = event.target;\n\t\t\t\t\treturn rcheckableType.test(target.type) &&\n\t\t\t\t\t\ttarget.click && nodeName(target, \"input\") &&\n\t\t\t\t\t\tdataPriv.get(target, \"click\") ||\n\t\t\t\t\t\tnodeName(target, \"a\");\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tbeforeunload: {\n\t\t\t\tpostDispatch: function (event) {\n\n\t\t\t\t\t// Support: Firefox 20+\n\t\t\t\t\t// Firefox doesn't alert if the returnValue field is not set.\n\t\t\t\t\tif (event.result !== undefined && event.originalEvent) {\n\t\t\t\t\t\tevent.originalEvent.returnValue = event.result;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t// Ensure the presence of an event listener that handles manually-triggered\n\t// synthetic events by interrupting progress until reinvoked in response to\n\t// *native* events that it fires directly, ensuring that state changes have\n\t// already occurred before other listeners are invoked.\n\tfunction leverageNative(el, type, isSetup) {\n\n\t\t// Missing `isSetup` indicates a trigger call, which must force setup through jQuery.event.add\n\t\tif (!isSetup) {\n\t\t\tif (dataPriv.get(el, type) === undefined) {\n\t\t\t\tjQuery.event.add(el, type, returnTrue);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\t// Register the controller as a special universal handler for all event namespaces\n\t\tdataPriv.set(el, type, false);\n\t\tjQuery.event.add(el, type, {\n\t\t\tnamespace: false,\n\t\t\thandler: function (event) {\n\t\t\t\tvar result,\n\t\t\t\t\tsaved = dataPriv.get(this, type);\n\n\t\t\t\tif ((event.isTrigger & 1) && this[type]) {\n\n\t\t\t\t\t// Interrupt processing of the outer synthetic .trigger()ed event\n\t\t\t\t\tif (!saved) {\n\n\t\t\t\t\t\t// Store arguments for use when handling the inner native event\n\t\t\t\t\t\t// There will always be at least one argument (an event object), so this array\n\t\t\t\t\t\t// will not be confused with a leftover capture object.\n\t\t\t\t\t\tsaved = slice.call(arguments);\n\t\t\t\t\t\tdataPriv.set(this, type, saved);\n\n\t\t\t\t\t\t// Trigger the native event and capture its result\n\t\t\t\t\t\tthis[type]();\n\t\t\t\t\t\tresult = dataPriv.get(this, type);\n\t\t\t\t\t\tdataPriv.set(this, type, false);\n\n\t\t\t\t\t\tif (saved !== result) {\n\n\t\t\t\t\t\t\t// Cancel the outer synthetic event\n\t\t\t\t\t\t\tevent.stopImmediatePropagation();\n\t\t\t\t\t\t\tevent.preventDefault();\n\n\t\t\t\t\t\t\treturn result;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// If this is an inner synthetic event for an event with a bubbling surrogate\n\t\t\t\t\t\t// (focus or blur), assume that the surrogate already propagated from triggering\n\t\t\t\t\t\t// the native event and prevent that from happening again here.\n\t\t\t\t\t\t// This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the\n\t\t\t\t\t\t// bubbling surrogate propagates *after* the non-bubbling base), but that seems\n\t\t\t\t\t\t// less bad than duplication.\n\t\t\t\t\t} else if ((jQuery.event.special[type] || {}).delegateType) {\n\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t}\n\n\t\t\t\t\t// If this is a native event triggered above, everything is now in order\n\t\t\t\t\t// Fire an inner synthetic event with the original arguments\n\t\t\t\t} else if (saved) {\n\n\t\t\t\t\t// ...and capture the result\n\t\t\t\t\tdataPriv.set(this, type, jQuery.event.trigger(\n\t\t\t\t\t\tsaved[0],\n\t\t\t\t\t\tsaved.slice(1),\n\t\t\t\t\t\tthis\n\t\t\t\t\t));\n\n\t\t\t\t\t// Abort handling of the native event by all jQuery handlers while allowing\n\t\t\t\t\t// native handlers on the same element to run. On target, this is achieved\n\t\t\t\t\t// by stopping immediate propagation just on the jQuery event. However,\n\t\t\t\t\t// the native event is re-wrapped by a jQuery one on each level of the\n\t\t\t\t\t// propagation so the only way to stop it for jQuery is to stop it for\n\t\t\t\t\t// everyone via native `stopPropagation()`. This is not a problem for\n\t\t\t\t\t// focus/blur which don't bubble, but it does also stop click on checkboxes\n\t\t\t\t\t// and radios. We accept this limitation.\n\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\tevent.isImmediatePropagationStopped = returnTrue;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\tjQuery.removeEvent = function (elem, type, handle) {\n\n\t\t// This \"if\" is needed for plain objects\n\t\tif (elem.removeEventListener) {\n\t\t\telem.removeEventListener(type, handle);\n\t\t}\n\t};\n\n\tjQuery.Event = function (src, props) {\n\n\t\t// Allow instantiation without the 'new' keyword\n\t\tif (!(this instanceof jQuery.Event)) {\n\t\t\treturn new jQuery.Event(src, props);\n\t\t}\n\n\t\t// Event object\n\t\tif (src && src.type) {\n\t\t\tthis.originalEvent = src;\n\t\t\tthis.type = src.type;\n\n\t\t\t// Events bubbling up the document may have been marked as prevented\n\t\t\t// by a handler lower down the tree; reflect the correct value.\n\t\t\tthis.isDefaultPrevented = src.defaultPrevented ||\n\t\t\t\tsrc.defaultPrevented === undefined &&\n\n\t\t\t\t// Support: Android <=2.3 only\n\t\t\t\tsrc.returnValue === false ?\n\t\t\t\treturnTrue :\n\t\t\t\treturnFalse;\n\n\t\t\t// Create target properties\n\t\t\t// Support: Safari <=6 - 7 only\n\t\t\t// Target should not be a text node (trac-504, trac-13143)\n\t\t\tthis.target = (src.target && src.target.nodeType === 3) ?\n\t\t\t\tsrc.target.parentNode :\n\t\t\t\tsrc.target;\n\n\t\t\tthis.currentTarget = src.currentTarget;\n\t\t\tthis.relatedTarget = src.relatedTarget;\n\n\t\t\t// Event type\n\t\t} else {\n\t\t\tthis.type = src;\n\t\t}\n\n\t\t// Put explicitly provided properties onto the event object\n\t\tif (props) {\n\t\t\tjQuery.extend(this, props);\n\t\t}\n\n\t\t// Create a timestamp if incoming event doesn't have one\n\t\tthis.timeStamp = src && src.timeStamp || Date.now();\n\n\t\t// Mark it as fixed\n\t\tthis[jQuery.expando] = true;\n\t};\n\n\t// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding\n\t// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html\n\tjQuery.Event.prototype = {\n\t\tconstructor: jQuery.Event,\n\t\tisDefaultPrevented: returnFalse,\n\t\tisPropagationStopped: returnFalse,\n\t\tisImmediatePropagationStopped: returnFalse,\n\t\tisSimulated: false,\n\n\t\tpreventDefault: function () {\n\t\t\tvar e = this.originalEvent;\n\n\t\t\tthis.isDefaultPrevented = returnTrue;\n\n\t\t\tif (e && !this.isSimulated) {\n\t\t\t\te.preventDefault();\n\t\t\t}\n\t\t},\n\t\tstopPropagation: function () {\n\t\t\tvar e = this.originalEvent;\n\n\t\t\tthis.isPropagationStopped = returnTrue;\n\n\t\t\tif (e && !this.isSimulated) {\n\t\t\t\te.stopPropagation();\n\t\t\t}\n\t\t},\n\t\tstopImmediatePropagation: function () {\n\t\t\tvar e = this.originalEvent;\n\n\t\t\tthis.isImmediatePropagationStopped = returnTrue;\n\n\t\t\tif (e && !this.isSimulated) {\n\t\t\t\te.stopImmediatePropagation();\n\t\t\t}\n\n\t\t\tthis.stopPropagation();\n\t\t}\n\t};\n\n\t// Includes all common event props including KeyEvent and MouseEvent specific props\n\tjQuery.each({\n\t\taltKey: true,\n\t\tbubbles: true,\n\t\tcancelable: true,\n\t\tchangedTouches: true,\n\t\tctrlKey: true,\n\t\tdetail: true,\n\t\teventPhase: true,\n\t\tmetaKey: true,\n\t\tpageX: true,\n\t\tpageY: true,\n\t\tshiftKey: true,\n\t\tview: true,\n\t\t\"char\": true,\n\t\tcode: true,\n\t\tcharCode: true,\n\t\tkey: true,\n\t\tkeyCode: true,\n\t\tbutton: true,\n\t\tbuttons: true,\n\t\tclientX: true,\n\t\tclientY: true,\n\t\toffsetX: true,\n\t\toffsetY: true,\n\t\tpointerId: true,\n\t\tpointerType: true,\n\t\tscreenX: true,\n\t\tscreenY: true,\n\t\ttargetTouches: true,\n\t\ttoElement: true,\n\t\ttouches: true,\n\t\twhich: true\n\t}, jQuery.event.addProp);\n\n\tjQuery.each({ focus: \"focusin\", blur: \"focusout\" }, function (type, delegateType) {\n\n\t\tfunction focusMappedHandler(nativeEvent) {\n\t\t\tif (document.documentMode) {\n\n\t\t\t\t// Support: IE 11+\n\t\t\t\t// Attach a single focusin/focusout handler on the document while someone wants\n\t\t\t\t// focus/blur. This is because the former are synchronous in IE while the latter\n\t\t\t\t// are async. In other browsers, all those handlers are invoked synchronously.\n\n\t\t\t\t// `handle` from private data would already wrap the event, but we need\n\t\t\t\t// to change the `type` here.\n\t\t\t\tvar handle = dataPriv.get(this, \"handle\"),\n\t\t\t\t\tevent = jQuery.event.fix(nativeEvent);\n\t\t\t\tevent.type = nativeEvent.type === \"focusin\" ? \"focus\" : \"blur\";\n\t\t\t\tevent.isSimulated = true;\n\n\t\t\t\t// First, handle focusin/focusout\n\t\t\t\thandle(nativeEvent);\n\n\t\t\t\t// ...then, handle focus/blur\n\t\t\t\t//\n\t\t\t\t// focus/blur don't bubble while focusin/focusout do; simulate the former by only\n\t\t\t\t// invoking the handler at the lower level.\n\t\t\t\tif (event.target === event.currentTarget) {\n\n\t\t\t\t\t// The setup part calls `leverageNative`, which, in turn, calls\n\t\t\t\t\t// `jQuery.event.add`, so event handle will already have been set\n\t\t\t\t\t// by this point.\n\t\t\t\t\thandle(event);\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\t// For non-IE browsers, attach a single capturing handler on the document\n\t\t\t\t// while someone wants focusin/focusout.\n\t\t\t\tjQuery.event.simulate(delegateType, nativeEvent.target,\n\t\t\t\t\tjQuery.event.fix(nativeEvent));\n\t\t\t}\n\t\t}\n\n\t\tjQuery.event.special[type] = {\n\n\t\t\t// Utilize native event if possible so blur/focus sequence is correct\n\t\t\tsetup: function () {\n\n\t\t\t\tvar attaches;\n\n\t\t\t\t// Claim the first handler\n\t\t\t\t// dataPriv.set( this, \"focus\", ... )\n\t\t\t\t// dataPriv.set( this, \"blur\", ... )\n\t\t\t\tleverageNative(this, type, true);\n\n\t\t\t\tif (document.documentMode) {\n\n\t\t\t\t\t// Support: IE 9 - 11+\n\t\t\t\t\t// We use the same native handler for focusin & focus (and focusout & blur)\n\t\t\t\t\t// so we need to coordinate setup & teardown parts between those events.\n\t\t\t\t\t// Use `delegateType` as the key as `type` is already used by `leverageNative`.\n\t\t\t\t\tattaches = dataPriv.get(this, delegateType);\n\t\t\t\t\tif (!attaches) {\n\t\t\t\t\t\tthis.addEventListener(delegateType, focusMappedHandler);\n\t\t\t\t\t}\n\t\t\t\t\tdataPriv.set(this, delegateType, (attaches || 0) + 1);\n\t\t\t\t} else {\n\n\t\t\t\t\t// Return false to allow normal processing in the caller\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\t\t\ttrigger: function () {\n\n\t\t\t\t// Force setup before trigger\n\t\t\t\tleverageNative(this, type);\n\n\t\t\t\t// Return non-false to allow normal event-path propagation\n\t\t\t\treturn true;\n\t\t\t},\n\n\t\t\tteardown: function () {\n\t\t\t\tvar attaches;\n\n\t\t\t\tif (document.documentMode) {\n\t\t\t\t\tattaches = dataPriv.get(this, delegateType) - 1;\n\t\t\t\t\tif (!attaches) {\n\t\t\t\t\t\tthis.removeEventListener(delegateType, focusMappedHandler);\n\t\t\t\t\t\tdataPriv.remove(this, delegateType);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdataPriv.set(this, delegateType, attaches);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\n\t\t\t\t\t// Return false to indicate standard teardown should be applied\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// Suppress native focus or blur if we're currently inside\n\t\t\t// a leveraged native-event stack\n\t\t\t_default: function (event) {\n\t\t\t\treturn dataPriv.get(event.target, type);\n\t\t\t},\n\n\t\t\tdelegateType: delegateType\n\t\t};\n\n\t\t// Support: Firefox <=44\n\t\t// Firefox doesn't have focus(in | out) events\n\t\t// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787\n\t\t//\n\t\t// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1\n\t\t// focus(in | out) events fire after focus & blur events,\n\t\t// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order\n\t\t// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857\n\t\t//\n\t\t// Support: IE 9 - 11+\n\t\t// To preserve relative focusin/focus & focusout/blur event order guaranteed on the 3.x branch,\n\t\t// attach a single handler for both events in IE.\n\t\tjQuery.event.special[delegateType] = {\n\t\t\tsetup: function () {\n\n\t\t\t\t// Handle: regular nodes (via `this.ownerDocument`), window\n\t\t\t\t// (via `this.document`) & document (via `this`).\n\t\t\t\tvar doc = this.ownerDocument || this.document || this,\n\t\t\t\t\tdataHolder = document.documentMode ? this : doc,\n\t\t\t\t\tattaches = dataPriv.get(dataHolder, delegateType);\n\n\t\t\t\t// Support: IE 9 - 11+\n\t\t\t\t// We use the same native handler for focusin & focus (and focusout & blur)\n\t\t\t\t// so we need to coordinate setup & teardown parts between those events.\n\t\t\t\t// Use `delegateType` as the key as `type` is already used by `leverageNative`.\n\t\t\t\tif (!attaches) {\n\t\t\t\t\tif (document.documentMode) {\n\t\t\t\t\t\tthis.addEventListener(delegateType, focusMappedHandler);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdoc.addEventListener(type, focusMappedHandler, true);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tdataPriv.set(dataHolder, delegateType, (attaches || 0) + 1);\n\t\t\t},\n\t\t\tteardown: function () {\n\t\t\t\tvar doc = this.ownerDocument || this.document || this,\n\t\t\t\t\tdataHolder = document.documentMode ? this : doc,\n\t\t\t\t\tattaches = dataPriv.get(dataHolder, delegateType) - 1;\n\n\t\t\t\tif (!attaches) {\n\t\t\t\t\tif (document.documentMode) {\n\t\t\t\t\t\tthis.removeEventListener(delegateType, focusMappedHandler);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdoc.removeEventListener(type, focusMappedHandler, true);\n\t\t\t\t\t}\n\t\t\t\t\tdataPriv.remove(dataHolder, delegateType);\n\t\t\t\t} else {\n\t\t\t\t\tdataPriv.set(dataHolder, delegateType, attaches);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t});\n\n\t// Create mouseenter/leave events using mouseover/out and event-time checks\n\t// so that event delegation works in jQuery.\n\t// Do the same for pointerenter/pointerleave and pointerover/pointerout\n\t//\n\t// Support: Safari 7 only\n\t// Safari sends mouseenter too often; see:\n\t// https://bugs.chromium.org/p/chromium/issues/detail?id=470258\n\t// for the description of the bug (it existed in older Chrome versions as well).\n\tjQuery.each({\n\t\tmouseenter: \"mouseover\",\n\t\tmouseleave: \"mouseout\",\n\t\tpointerenter: \"pointerover\",\n\t\tpointerleave: \"pointerout\"\n\t}, function (orig, fix) {\n\t\tjQuery.event.special[orig] = {\n\t\t\tdelegateType: fix,\n\t\t\tbindType: fix,\n\n\t\t\thandle: function (event) {\n\t\t\t\tvar ret,\n\t\t\t\t\ttarget = this,\n\t\t\t\t\trelated = event.relatedTarget,\n\t\t\t\t\thandleObj = event.handleObj;\n\n\t\t\t\t// For mouseenter/leave call the handler if related is outside the target.\n\t\t\t\t// NB: No relatedTarget if the mouse left/entered the browser window\n\t\t\t\tif (!related || (related !== target && !jQuery.contains(target, related))) {\n\t\t\t\t\tevent.type = handleObj.origType;\n\t\t\t\t\tret = handleObj.handler.apply(this, arguments);\n\t\t\t\t\tevent.type = fix;\n\t\t\t\t}\n\t\t\t\treturn ret;\n\t\t\t}\n\t\t};\n\t});\n\n\tjQuery.fn.extend({\n\n\t\ton: function (types, selector, data, fn) {\n\t\t\treturn on(this, types, selector, data, fn);\n\t\t},\n\t\tone: function (types, selector, data, fn) {\n\t\t\treturn on(this, types, selector, data, fn, 1);\n\t\t},\n\t\toff: function (types, selector, fn) {\n\t\t\tvar handleObj, type;\n\t\t\tif (types && types.preventDefault && types.handleObj) {\n\n\t\t\t\t// ( event )  dispatched jQuery.Event\n\t\t\t\thandleObj = types.handleObj;\n\t\t\t\tjQuery(types.delegateTarget).off(\n\t\t\t\t\thandleObj.namespace ?\n\t\t\t\t\t\thandleObj.origType + \".\" + handleObj.namespace :\n\t\t\t\t\t\thandleObj.origType,\n\t\t\t\t\thandleObj.selector,\n\t\t\t\t\thandleObj.handler\n\t\t\t\t);\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\tif (typeof types === \"object\") {\n\n\t\t\t\t// ( types-object [, selector] )\n\t\t\t\tfor (type in types) {\n\t\t\t\t\tthis.off(type, selector, types[type]);\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\tif (selector === false || typeof selector === \"function\") {\n\n\t\t\t\t// ( types [, fn] )\n\t\t\t\tfn = selector;\n\t\t\t\tselector = undefined;\n\t\t\t}\n\t\t\tif (fn === false) {\n\t\t\t\tfn = returnFalse;\n\t\t\t}\n\t\t\treturn this.each(function () {\n\t\t\t\tjQuery.event.remove(this, types, fn, selector);\n\t\t\t});\n\t\t}\n\t});\n\n\n\tvar\n\n\t\t// Support: IE <=10 - 11, Edge 12 - 13 only\n\t\t// In IE/Edge using regex groups here causes severe slowdowns.\n\t\t// See https://connect.microsoft.com/IE/feedback/details/1736512/\n\t\trnoInnerhtml = /<script|<style|<link/i,\n\n\t\t// checked=\"checked\" or checked\n\t\trchecked = /checked\\s*(?:[^=]|=\\s*.checked.)/i,\n\n\t\trcleanScript = /^\\s*<!\\[CDATA\\[|\\]\\]>\\s*$/g;\n\n\t// Prefer a tbody over its parent table for containing new rows\n\tfunction manipulationTarget(elem, content) {\n\t\tif (nodeName(elem, \"table\") &&\n\t\t\tnodeName(content.nodeType !== 11 ? content : content.firstChild, \"tr\")) {\n\n\t\t\treturn jQuery(elem).children(\"tbody\")[0] || elem;\n\t\t}\n\n\t\treturn elem;\n\t}\n\n\t// Replace/restore the type attribute of script elements for safe DOM manipulation\n\tfunction disableScript(elem) {\n\t\telem.type = (elem.getAttribute(\"type\") !== null) + \"/\" + elem.type;\n\t\treturn elem;\n\t}\n\tfunction restoreScript(elem) {\n\t\tif ((elem.type || \"\").slice(0, 5) === \"true/\") {\n\t\t\telem.type = elem.type.slice(5);\n\t\t} else {\n\t\t\telem.removeAttribute(\"type\");\n\t\t}\n\n\t\treturn elem;\n\t}\n\n\tfunction cloneCopyEvent(src, dest) {\n\t\tvar i, l, type, pdataOld, udataOld, udataCur, events;\n\n\t\tif (dest.nodeType !== 1) {\n\t\t\treturn;\n\t\t}\n\n\t\t// 1. Copy private data: events, handlers, etc.\n\t\tif (dataPriv.hasData(src)) {\n\t\t\tpdataOld = dataPriv.get(src);\n\t\t\tevents = pdataOld.events;\n\n\t\t\tif (events) {\n\t\t\t\tdataPriv.remove(dest, \"handle events\");\n\n\t\t\t\tfor (type in events) {\n\t\t\t\t\tfor (i = 0, l = events[type].length; i < l; i++) {\n\t\t\t\t\t\tjQuery.event.add(dest, type, events[type][i]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// 2. Copy user data\n\t\tif (dataUser.hasData(src)) {\n\t\t\tudataOld = dataUser.access(src);\n\t\t\tudataCur = jQuery.extend({}, udataOld);\n\n\t\t\tdataUser.set(dest, udataCur);\n\t\t}\n\t}\n\n\t// Fix IE bugs, see support tests\n\tfunction fixInput(src, dest) {\n\t\tvar nodeName = dest.nodeName.toLowerCase();\n\n\t\t// Fails to persist the checked state of a cloned checkbox or radio button.\n\t\tif (nodeName === \"input\" && rcheckableType.test(src.type)) {\n\t\t\tdest.checked = src.checked;\n\n\t\t\t// Fails to return the selected option to the default selected state when cloning options\n\t\t} else if (nodeName === \"input\" || nodeName === \"textarea\") {\n\t\t\tdest.defaultValue = src.defaultValue;\n\t\t}\n\t}\n\n\tfunction domManip(collection, args, callback, ignored) {\n\n\t\t// Flatten any nested arrays\n\t\targs = flat(args);\n\n\t\tvar fragment, first, scripts, hasScripts, node, doc,\n\t\t\ti = 0,\n\t\t\tl = collection.length,\n\t\t\tiNoClone = l - 1,\n\t\t\tvalue = args[0],\n\t\t\tvalueIsFunction = isFunction(value);\n\n\t\t// We can't cloneNode fragments that contain checked, in WebKit\n\t\tif (valueIsFunction ||\n\t\t\t(l > 1 && typeof value === \"string\" &&\n\t\t\t\t!support.checkClone && rchecked.test(value))) {\n\t\t\treturn collection.each(function (index) {\n\t\t\t\tvar self = collection.eq(index);\n\t\t\t\tif (valueIsFunction) {\n\t\t\t\t\targs[0] = value.call(this, index, self.html());\n\t\t\t\t}\n\t\t\t\tdomManip(self, args, callback, ignored);\n\t\t\t});\n\t\t}\n\n\t\tif (l) {\n\t\t\tfragment = buildFragment(args, collection[0].ownerDocument, false, collection, ignored);\n\t\t\tfirst = fragment.firstChild;\n\n\t\t\tif (fragment.childNodes.length === 1) {\n\t\t\t\tfragment = first;\n\t\t\t}\n\n\t\t\t// Require either new content or an interest in ignored elements to invoke the callback\n\t\t\tif (first || ignored) {\n\t\t\t\tscripts = jQuery.map(getAll(fragment, \"script\"), disableScript);\n\t\t\t\thasScripts = scripts.length;\n\n\t\t\t\t// Use the original fragment for the last item\n\t\t\t\t// instead of the first because it can end up\n\t\t\t\t// being emptied incorrectly in certain situations (trac-8070).\n\t\t\t\tfor (; i < l; i++) {\n\t\t\t\t\tnode = fragment;\n\n\t\t\t\t\tif (i !== iNoClone) {\n\t\t\t\t\t\tnode = jQuery.clone(node, true, true);\n\n\t\t\t\t\t\t// Keep references to cloned scripts for later restoration\n\t\t\t\t\t\tif (hasScripts) {\n\n\t\t\t\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\t\t\t\tjQuery.merge(scripts, getAll(node, \"script\"));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tcallback.call(collection[i], node, i);\n\t\t\t\t}\n\n\t\t\t\tif (hasScripts) {\n\t\t\t\t\tdoc = scripts[scripts.length - 1].ownerDocument;\n\n\t\t\t\t\t// Reenable scripts\n\t\t\t\t\tjQuery.map(scripts, restoreScript);\n\n\t\t\t\t\t// Evaluate executable scripts on first document insertion\n\t\t\t\t\tfor (i = 0; i < hasScripts; i++) {\n\t\t\t\t\t\tnode = scripts[i];\n\t\t\t\t\t\tif (rscriptType.test(node.type || \"\") &&\n\t\t\t\t\t\t\t!dataPriv.access(node, \"globalEval\") &&\n\t\t\t\t\t\t\tjQuery.contains(doc, node)) {\n\n\t\t\t\t\t\t\tif (node.src && (node.type || \"\").toLowerCase() !== \"module\") {\n\n\t\t\t\t\t\t\t\t// Optional AJAX dependency, but won't run scripts if not present\n\t\t\t\t\t\t\t\tif (jQuery._evalUrl && !node.noModule) {\n\t\t\t\t\t\t\t\t\tjQuery._evalUrl(node.src, {\n\t\t\t\t\t\t\t\t\t\tnonce: node.nonce || node.getAttribute(\"nonce\")\n\t\t\t\t\t\t\t\t\t}, doc);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t// Unwrap a CDATA section containing script contents. This shouldn't be\n\t\t\t\t\t\t\t\t// needed as in XML documents they're already not visible when\n\t\t\t\t\t\t\t\t// inspecting element contents and in HTML documents they have no\n\t\t\t\t\t\t\t\t// meaning but we're preserving that logic for backwards compatibility.\n\t\t\t\t\t\t\t\t// This will be removed completely in 4.0. See gh-4904.\n\t\t\t\t\t\t\t\tDOMEval(node.textContent.replace(rcleanScript, \"\"), node, doc);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn collection;\n\t}\n\n\tfunction remove(elem, selector, keepData) {\n\t\tvar node,\n\t\t\tnodes = selector ? jQuery.filter(selector, elem) : elem,\n\t\t\ti = 0;\n\n\t\tfor (; (node = nodes[i]) != null; i++) {\n\t\t\tif (!keepData && node.nodeType === 1) {\n\t\t\t\tjQuery.cleanData(getAll(node));\n\t\t\t}\n\n\t\t\tif (node.parentNode) {\n\t\t\t\tif (keepData && isAttached(node)) {\n\t\t\t\t\tsetGlobalEval(getAll(node, \"script\"));\n\t\t\t\t}\n\t\t\t\tnode.parentNode.removeChild(node);\n\t\t\t}\n\t\t}\n\n\t\treturn elem;\n\t}\n\n\tjQuery.extend({\n\t\thtmlPrefilter: function (html) {\n\t\t\treturn html;\n\t\t},\n\n\t\tclone: function (elem, dataAndEvents, deepDataAndEvents) {\n\t\t\tvar i, l, srcElements, destElements,\n\t\t\t\tclone = elem.cloneNode(true),\n\t\t\t\tinPage = isAttached(elem);\n\n\t\t\t// Fix IE cloning issues\n\t\t\tif (!support.noCloneChecked && (elem.nodeType === 1 || elem.nodeType === 11) &&\n\t\t\t\t!jQuery.isXMLDoc(elem)) {\n\n\t\t\t\t// We eschew jQuery#find here for performance reasons:\n\t\t\t\t// https://jsperf.com/getall-vs-sizzle/2\n\t\t\t\tdestElements = getAll(clone);\n\t\t\t\tsrcElements = getAll(elem);\n\n\t\t\t\tfor (i = 0, l = srcElements.length; i < l; i++) {\n\t\t\t\t\tfixInput(srcElements[i], destElements[i]);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Copy the events from the original to the clone\n\t\t\tif (dataAndEvents) {\n\t\t\t\tif (deepDataAndEvents) {\n\t\t\t\t\tsrcElements = srcElements || getAll(elem);\n\t\t\t\t\tdestElements = destElements || getAll(clone);\n\n\t\t\t\t\tfor (i = 0, l = srcElements.length; i < l; i++) {\n\t\t\t\t\t\tcloneCopyEvent(srcElements[i], destElements[i]);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tcloneCopyEvent(elem, clone);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Preserve script evaluation history\n\t\t\tdestElements = getAll(clone, \"script\");\n\t\t\tif (destElements.length > 0) {\n\t\t\t\tsetGlobalEval(destElements, !inPage && getAll(elem, \"script\"));\n\t\t\t}\n\n\t\t\t// Return the cloned set\n\t\t\treturn clone;\n\t\t},\n\n\t\tcleanData: function (elems) {\n\t\t\tvar data, elem, type,\n\t\t\t\tspecial = jQuery.event.special,\n\t\t\t\ti = 0;\n\n\t\t\tfor (; (elem = elems[i]) !== undefined; i++) {\n\t\t\t\tif (acceptData(elem)) {\n\t\t\t\t\tif ((data = elem[dataPriv.expando])) {\n\t\t\t\t\t\tif (data.events) {\n\t\t\t\t\t\t\tfor (type in data.events) {\n\t\t\t\t\t\t\t\tif (special[type]) {\n\t\t\t\t\t\t\t\t\tjQuery.event.remove(elem, type);\n\n\t\t\t\t\t\t\t\t\t// This is a shortcut to avoid jQuery.event.remove's overhead\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tjQuery.removeEvent(elem, type, data.handle);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\t\telem[dataPriv.expando] = undefined;\n\t\t\t\t\t}\n\t\t\t\t\tif (elem[dataUser.expando]) {\n\n\t\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\t\telem[dataUser.expando] = undefined;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\n\tjQuery.fn.extend({\n\t\tdetach: function (selector) {\n\t\t\treturn remove(this, selector, true);\n\t\t},\n\n\t\tremove: function (selector) {\n\t\t\treturn remove(this, selector);\n\t\t},\n\n\t\ttext: function (value) {\n\t\t\treturn access(this, function (value) {\n\t\t\t\treturn value === undefined ?\n\t\t\t\t\tjQuery.text(this) :\n\t\t\t\t\tthis.empty().each(function () {\n\t\t\t\t\t\tif (this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9) {\n\t\t\t\t\t\t\tthis.textContent = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t}, null, value, arguments.length);\n\t\t},\n\n\t\tappend: function () {\n\t\t\treturn domManip(this, arguments, function (elem) {\n\t\t\t\tif (this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9) {\n\t\t\t\t\tvar target = manipulationTarget(this, elem);\n\t\t\t\t\ttarget.appendChild(elem);\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\tprepend: function () {\n\t\t\treturn domManip(this, arguments, function (elem) {\n\t\t\t\tif (this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9) {\n\t\t\t\t\tvar target = manipulationTarget(this, elem);\n\t\t\t\t\ttarget.insertBefore(elem, target.firstChild);\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\tbefore: function () {\n\t\t\treturn domManip(this, arguments, function (elem) {\n\t\t\t\tif (this.parentNode) {\n\t\t\t\t\tthis.parentNode.insertBefore(elem, this);\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\tafter: function () {\n\t\t\treturn domManip(this, arguments, function (elem) {\n\t\t\t\tif (this.parentNode) {\n\t\t\t\t\tthis.parentNode.insertBefore(elem, this.nextSibling);\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\tempty: function () {\n\t\t\tvar elem,\n\t\t\t\ti = 0;\n\n\t\t\tfor (; (elem = this[i]) != null; i++) {\n\t\t\t\tif (elem.nodeType === 1) {\n\n\t\t\t\t\t// Prevent memory leaks\n\t\t\t\t\tjQuery.cleanData(getAll(elem, false));\n\n\t\t\t\t\t// Remove any remaining nodes\n\t\t\t\t\telem.textContent = \"\";\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn this;\n\t\t},\n\n\t\tclone: function (dataAndEvents, deepDataAndEvents) {\n\t\t\tdataAndEvents = dataAndEvents == null ? false : dataAndEvents;\n\t\t\tdeepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;\n\n\t\t\treturn this.map(function () {\n\t\t\t\treturn jQuery.clone(this, dataAndEvents, deepDataAndEvents);\n\t\t\t});\n\t\t},\n\n\t\thtml: function (value) {\n\t\t\treturn access(this, function (value) {\n\t\t\t\tvar elem = this[0] || {},\n\t\t\t\t\ti = 0,\n\t\t\t\t\tl = this.length;\n\n\t\t\t\tif (value === undefined && elem.nodeType === 1) {\n\t\t\t\t\treturn elem.innerHTML;\n\t\t\t\t}\n\n\t\t\t\t// See if we can take a shortcut and just use innerHTML\n\t\t\t\tif (typeof value === \"string\" && !rnoInnerhtml.test(value) &&\n\t\t\t\t\t!wrapMap[(rtagName.exec(value) || [\"\", \"\"])[1].toLowerCase()]) {\n\n\t\t\t\t\tvalue = jQuery.htmlPrefilter(value);\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tfor (; i < l; i++) {\n\t\t\t\t\t\t\telem = this[i] || {};\n\n\t\t\t\t\t\t\t// Remove element nodes and prevent memory leaks\n\t\t\t\t\t\t\tif (elem.nodeType === 1) {\n\t\t\t\t\t\t\t\tjQuery.cleanData(getAll(elem, false));\n\t\t\t\t\t\t\t\telem.innerHTML = value;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\telem = 0;\n\n\t\t\t\t\t\t// If using innerHTML throws an exception, use the fallback method\n\t\t\t\t\t} catch (e) { }\n\t\t\t\t}\n\n\t\t\t\tif (elem) {\n\t\t\t\t\tthis.empty().append(value);\n\t\t\t\t}\n\t\t\t}, null, value, arguments.length);\n\t\t},\n\n\t\treplaceWith: function () {\n\t\t\tvar ignored = [];\n\n\t\t\t// Make the changes, replacing each non-ignored context element with the new content\n\t\t\treturn domManip(this, arguments, function (elem) {\n\t\t\t\tvar parent = this.parentNode;\n\n\t\t\t\tif (jQuery.inArray(this, ignored) < 0) {\n\t\t\t\t\tjQuery.cleanData(getAll(this));\n\t\t\t\t\tif (parent) {\n\t\t\t\t\t\tparent.replaceChild(elem, this);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Force callback invocation\n\t\t\t}, ignored);\n\t\t}\n\t});\n\n\tjQuery.each({\n\t\tappendTo: \"append\",\n\t\tprependTo: \"prepend\",\n\t\tinsertBefore: \"before\",\n\t\tinsertAfter: \"after\",\n\t\treplaceAll: \"replaceWith\"\n\t}, function (name, original) {\n\t\tjQuery.fn[name] = function (selector) {\n\t\t\tvar elems,\n\t\t\t\tret = [],\n\t\t\t\tinsert = jQuery(selector),\n\t\t\t\tlast = insert.length - 1,\n\t\t\t\ti = 0;\n\n\t\t\tfor (; i <= last; i++) {\n\t\t\t\telems = i === last ? this : this.clone(true);\n\t\t\t\tjQuery(insert[i])[original](elems);\n\n\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t// .get() because push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\tpush.apply(ret, elems.get());\n\t\t\t}\n\n\t\t\treturn this.pushStack(ret);\n\t\t};\n\t});\n\tvar rnumnonpx = new RegExp(\"^(\" + pnum + \")(?!px)[a-z%]+$\", \"i\");\n\n\tvar rcustomProp = /^--/;\n\n\n\tvar getStyles = function (elem) {\n\n\t\t// Support: IE <=11 only, Firefox <=30 (trac-15098, trac-14150)\n\t\t// IE throws on elements created in popups\n\t\t// FF meanwhile throws on frame elements through \"defaultView.getComputedStyle\"\n\t\tvar view = elem.ownerDocument.defaultView;\n\n\t\tif (!view || !view.opener) {\n\t\t\tview = window;\n\t\t}\n\n\t\treturn view.getComputedStyle(elem);\n\t};\n\n\tvar swap = function (elem, options, callback) {\n\t\tvar ret, name,\n\t\t\told = {};\n\n\t\t// Remember the old values, and insert the new ones\n\t\tfor (name in options) {\n\t\t\told[name] = elem.style[name];\n\t\t\telem.style[name] = options[name];\n\t\t}\n\n\t\tret = callback.call(elem);\n\n\t\t// Revert the old values\n\t\tfor (name in options) {\n\t\t\telem.style[name] = old[name];\n\t\t}\n\n\t\treturn ret;\n\t};\n\n\n\tvar rboxStyle = new RegExp(cssExpand.join(\"|\"), \"i\");\n\n\n\n\t(function () {\n\n\t\t// Executing both pixelPosition & boxSizingReliable tests require only one layout\n\t\t// so they're executed at the same time to save the second computation.\n\t\tfunction computeStyleTests() {\n\n\t\t\t// This is a singleton, we need to execute it only once\n\t\t\tif (!div) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tcontainer.style.cssText = \"position:absolute;left:-11111px;width:60px;\" +\n\t\t\t\t\"margin-top:1px;padding:0;border:0\";\n\t\t\tdiv.style.cssText =\n\t\t\t\t\"position:relative;display:block;box-sizing:border-box;overflow:scroll;\" +\n\t\t\t\t\"margin:auto;border:1px;padding:1px;\" +\n\t\t\t\t\"width:60%;top:1%\";\n\t\t\tdocumentElement.appendChild(container).appendChild(div);\n\n\t\t\tvar divStyle = window.getComputedStyle(div);\n\t\t\tpixelPositionVal = divStyle.top !== \"1%\";\n\n\t\t\t// Support: Android 4.0 - 4.3 only, Firefox <=3 - 44\n\t\t\treliableMarginLeftVal = roundPixelMeasures(divStyle.marginLeft) === 12;\n\n\t\t\t// Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3\n\t\t\t// Some styles come back with percentage values, even though they shouldn't\n\t\t\tdiv.style.right = \"60%\";\n\t\t\tpixelBoxStylesVal = roundPixelMeasures(divStyle.right) === 36;\n\n\t\t\t// Support: IE 9 - 11 only\n\t\t\t// Detect misreporting of content dimensions for box-sizing:border-box elements\n\t\t\tboxSizingReliableVal = roundPixelMeasures(divStyle.width) === 36;\n\n\t\t\t// Support: IE 9 only\n\t\t\t// Detect overflow:scroll screwiness (gh-3699)\n\t\t\t// Support: Chrome <=64\n\t\t\t// Don't get tricked when zoom affects offsetWidth (gh-4029)\n\t\t\tdiv.style.position = \"absolute\";\n\t\t\tscrollboxSizeVal = roundPixelMeasures(div.offsetWidth / 3) === 12;\n\n\t\t\tdocumentElement.removeChild(container);\n\n\t\t\t// Nullify the div so it wouldn't be stored in the memory and\n\t\t\t// it will also be a sign that checks already performed\n\t\t\tdiv = null;\n\t\t}\n\n\t\tfunction roundPixelMeasures(measure) {\n\t\t\treturn Math.round(parseFloat(measure));\n\t\t}\n\n\t\tvar pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal,\n\t\t\treliableTrDimensionsVal, reliableMarginLeftVal,\n\t\t\tcontainer = document.createElement(\"div\"),\n\t\t\tdiv = document.createElement(\"div\");\n\n\t\t// Finish early in limited (non-browser) environments\n\t\tif (!div.style) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Support: IE <=9 - 11 only\n\t\t// Style of cloned element affects source element cloned (trac-8908)\n\t\tdiv.style.backgroundClip = \"content-box\";\n\t\tdiv.cloneNode(true).style.backgroundClip = \"\";\n\t\tsupport.clearCloneStyle = div.style.backgroundClip === \"content-box\";\n\n\t\tjQuery.extend(support, {\n\t\t\tboxSizingReliable: function () {\n\t\t\t\tcomputeStyleTests();\n\t\t\t\treturn boxSizingReliableVal;\n\t\t\t},\n\t\t\tpixelBoxStyles: function () {\n\t\t\t\tcomputeStyleTests();\n\t\t\t\treturn pixelBoxStylesVal;\n\t\t\t},\n\t\t\tpixelPosition: function () {\n\t\t\t\tcomputeStyleTests();\n\t\t\t\treturn pixelPositionVal;\n\t\t\t},\n\t\t\treliableMarginLeft: function () {\n\t\t\t\tcomputeStyleTests();\n\t\t\t\treturn reliableMarginLeftVal;\n\t\t\t},\n\t\t\tscrollboxSize: function () {\n\t\t\t\tcomputeStyleTests();\n\t\t\t\treturn scrollboxSizeVal;\n\t\t\t},\n\n\t\t\t// Support: IE 9 - 11+, Edge 15 - 18+\n\t\t\t// IE/Edge misreport `getComputedStyle` of table rows with width/height\n\t\t\t// set in CSS while `offset*` properties report correct values.\n\t\t\t// Behavior in IE 9 is more subtle than in newer versions & it passes\n\t\t\t// some versions of this test; make sure not to make it pass there!\n\t\t\t//\n\t\t\t// Support: Firefox 70+\n\t\t\t// Only Firefox includes border widths\n\t\t\t// in computed dimensions. (gh-4529)\n\t\t\treliableTrDimensions: function () {\n\t\t\t\tvar table, tr, trChild, trStyle;\n\t\t\t\tif (reliableTrDimensionsVal == null) {\n\t\t\t\t\ttable = document.createElement(\"table\");\n\t\t\t\t\ttr = document.createElement(\"tr\");\n\t\t\t\t\ttrChild = document.createElement(\"div\");\n\n\t\t\t\t\ttable.style.cssText = \"position:absolute;left:-11111px;border-collapse:separate\";\n\t\t\t\t\ttr.style.cssText = \"border:1px solid\";\n\n\t\t\t\t\t// Support: Chrome 86+\n\t\t\t\t\t// Height set through cssText does not get applied.\n\t\t\t\t\t// Computed height then comes back as 0.\n\t\t\t\t\ttr.style.height = \"1px\";\n\t\t\t\t\ttrChild.style.height = \"9px\";\n\n\t\t\t\t\t// Support: Android 8 Chrome 86+\n\t\t\t\t\t// In our bodyBackground.html iframe,\n\t\t\t\t\t// display for all div elements is set to \"inline\",\n\t\t\t\t\t// which causes a problem only in Android 8 Chrome 86.\n\t\t\t\t\t// Ensuring the div is display: block\n\t\t\t\t\t// gets around this issue.\n\t\t\t\t\ttrChild.style.display = \"block\";\n\n\t\t\t\t\tdocumentElement\n\t\t\t\t\t\t.appendChild(table)\n\t\t\t\t\t\t.appendChild(tr)\n\t\t\t\t\t\t.appendChild(trChild);\n\n\t\t\t\t\ttrStyle = window.getComputedStyle(tr);\n\t\t\t\t\treliableTrDimensionsVal = (parseInt(trStyle.height, 10) +\n\t\t\t\t\t\tparseInt(trStyle.borderTopWidth, 10) +\n\t\t\t\t\t\tparseInt(trStyle.borderBottomWidth, 10)) === tr.offsetHeight;\n\n\t\t\t\t\tdocumentElement.removeChild(table);\n\t\t\t\t}\n\t\t\t\treturn reliableTrDimensionsVal;\n\t\t\t}\n\t\t});\n\t})();\n\n\n\tfunction curCSS(elem, name, computed) {\n\t\tvar width, minWidth, maxWidth, ret,\n\t\t\tisCustomProp = rcustomProp.test(name),\n\n\t\t\t// Support: Firefox 51+\n\t\t\t// Retrieving style before computed somehow\n\t\t\t// fixes an issue with getting wrong values\n\t\t\t// on detached elements\n\t\t\tstyle = elem.style;\n\n\t\tcomputed = computed || getStyles(elem);\n\n\t\t// getPropertyValue is needed for:\n\t\t//   .css('filter') (IE 9 only, trac-12537)\n\t\t//   .css('--customProperty) (gh-3144)\n\t\tif (computed) {\n\n\t\t\t// Support: IE <=9 - 11+\n\t\t\t// IE only supports `\"float\"` in `getPropertyValue`; in computed styles\n\t\t\t// it's only available as `\"cssFloat\"`. We no longer modify properties\n\t\t\t// sent to `.css()` apart from camelCasing, so we need to check both.\n\t\t\t// Normally, this would create difference in behavior: if\n\t\t\t// `getPropertyValue` returns an empty string, the value returned\n\t\t\t// by `.css()` would be `undefined`. This is usually the case for\n\t\t\t// disconnected elements. However, in IE even disconnected elements\n\t\t\t// with no styles return `\"none\"` for `getPropertyValue( \"float\" )`\n\t\t\tret = computed.getPropertyValue(name) || computed[name];\n\n\t\t\tif (isCustomProp && ret) {\n\n\t\t\t\t// Support: Firefox 105+, Chrome <=105+\n\t\t\t\t// Spec requires trimming whitespace for custom properties (gh-4926).\n\t\t\t\t// Firefox only trims leading whitespace. Chrome just collapses\n\t\t\t\t// both leading & trailing whitespace to a single space.\n\t\t\t\t//\n\t\t\t\t// Fall back to `undefined` if empty string returned.\n\t\t\t\t// This collapses a missing definition with property defined\n\t\t\t\t// and set to an empty string but there's no standard API\n\t\t\t\t// allowing us to differentiate them without a performance penalty\n\t\t\t\t// and returning `undefined` aligns with older jQuery.\n\t\t\t\t//\n\t\t\t\t// rtrimCSS treats U+000D CARRIAGE RETURN and U+000C FORM FEED\n\t\t\t\t// as whitespace while CSS does not, but this is not a problem\n\t\t\t\t// because CSS preprocessing replaces them with U+000A LINE FEED\n\t\t\t\t// (which *is* CSS whitespace)\n\t\t\t\t// https://www.w3.org/TR/css-syntax-3/#input-preprocessing\n\t\t\t\tret = ret.replace(rtrimCSS, \"$1\") || undefined;\n\t\t\t}\n\n\t\t\tif (ret === \"\" && !isAttached(elem)) {\n\t\t\t\tret = jQuery.style(elem, name);\n\t\t\t}\n\n\t\t\t// A tribute to the \"awesome hack by Dean Edwards\"\n\t\t\t// Android Browser returns percentage for some values,\n\t\t\t// but width seems to be reliably pixels.\n\t\t\t// This is against the CSSOM draft spec:\n\t\t\t// https://drafts.csswg.org/cssom/#resolved-values\n\t\t\tif (!support.pixelBoxStyles() && rnumnonpx.test(ret) && rboxStyle.test(name)) {\n\n\t\t\t\t// Remember the original values\n\t\t\t\twidth = style.width;\n\t\t\t\tminWidth = style.minWidth;\n\t\t\t\tmaxWidth = style.maxWidth;\n\n\t\t\t\t// Put in the new values to get a computed value out\n\t\t\t\tstyle.minWidth = style.maxWidth = style.width = ret;\n\t\t\t\tret = computed.width;\n\n\t\t\t\t// Revert the changed values\n\t\t\t\tstyle.width = width;\n\t\t\t\tstyle.minWidth = minWidth;\n\t\t\t\tstyle.maxWidth = maxWidth;\n\t\t\t}\n\t\t}\n\n\t\treturn ret !== undefined ?\n\n\t\t\t// Support: IE <=9 - 11 only\n\t\t\t// IE returns zIndex value as an integer.\n\t\t\tret + \"\" :\n\t\t\tret;\n\t}\n\n\n\tfunction addGetHookIf(conditionFn, hookFn) {\n\n\t\t// Define the hook, we'll check on the first run if it's really needed.\n\t\treturn {\n\t\t\tget: function () {\n\t\t\t\tif (conditionFn()) {\n\n\t\t\t\t\t// Hook not needed (or it's not possible to use it due\n\t\t\t\t\t// to missing dependency), remove it.\n\t\t\t\t\tdelete this.get;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Hook needed; redefine it so that the support test is not executed again.\n\t\t\t\treturn (this.get = hookFn).apply(this, arguments);\n\t\t\t}\n\t\t};\n\t}\n\n\n\tvar cssPrefixes = [\"Webkit\", \"Moz\", \"ms\"],\n\t\temptyStyle = document.createElement(\"div\").style,\n\t\tvendorProps = {};\n\n\t// Return a vendor-prefixed property or undefined\n\tfunction vendorPropName(name) {\n\n\t\t// Check for vendor prefixed names\n\t\tvar capName = name[0].toUpperCase() + name.slice(1),\n\t\t\ti = cssPrefixes.length;\n\n\t\twhile (i--) {\n\t\t\tname = cssPrefixes[i] + capName;\n\t\t\tif (name in emptyStyle) {\n\t\t\t\treturn name;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return a potentially-mapped jQuery.cssProps or vendor prefixed property\n\tfunction finalPropName(name) {\n\t\tvar final = jQuery.cssProps[name] || vendorProps[name];\n\n\t\tif (final) {\n\t\t\treturn final;\n\t\t}\n\t\tif (name in emptyStyle) {\n\t\t\treturn name;\n\t\t}\n\t\treturn vendorProps[name] = vendorPropName(name) || name;\n\t}\n\n\n\tvar\n\n\t\t// Swappable if display is none or starts with table\n\t\t// except \"table\", \"table-cell\", or \"table-caption\"\n\t\t// See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display\n\t\trdisplayswap = /^(none|table(?!-c[ea]).+)/,\n\t\tcssShow = { position: \"absolute\", visibility: \"hidden\", display: \"block\" },\n\t\tcssNormalTransform = {\n\t\t\tletterSpacing: \"0\",\n\t\t\tfontWeight: \"400\"\n\t\t};\n\n\tfunction setPositiveNumber(_elem, value, subtract) {\n\n\t\t// Any relative (+/-) values have already been\n\t\t// normalized at this point\n\t\tvar matches = rcssNum.exec(value);\n\t\treturn matches ?\n\n\t\t\t// Guard against undefined \"subtract\", e.g., when used as in cssHooks\n\t\t\tMath.max(0, matches[2] - (subtract || 0)) + (matches[3] || \"px\") :\n\t\t\tvalue;\n\t}\n\n\tfunction boxModelAdjustment(elem, dimension, box, isBorderBox, styles, computedVal) {\n\t\tvar i = dimension === \"width\" ? 1 : 0,\n\t\t\textra = 0,\n\t\t\tdelta = 0,\n\t\t\tmarginDelta = 0;\n\n\t\t// Adjustment may not be necessary\n\t\tif (box === (isBorderBox ? \"border\" : \"content\")) {\n\t\t\treturn 0;\n\t\t}\n\n\t\tfor (; i < 4; i += 2) {\n\n\t\t\t// Both box models exclude margin\n\t\t\t// Count margin delta separately to only add it after scroll gutter adjustment.\n\t\t\t// This is needed to make negative margins work with `outerHeight( true )` (gh-3982).\n\t\t\tif (box === \"margin\") {\n\t\t\t\tmarginDelta += jQuery.css(elem, box + cssExpand[i], true, styles);\n\t\t\t}\n\n\t\t\t// If we get here with a content-box, we're seeking \"padding\" or \"border\" or \"margin\"\n\t\t\tif (!isBorderBox) {\n\n\t\t\t\t// Add padding\n\t\t\t\tdelta += jQuery.css(elem, \"padding\" + cssExpand[i], true, styles);\n\n\t\t\t\t// For \"border\" or \"margin\", add border\n\t\t\t\tif (box !== \"padding\") {\n\t\t\t\t\tdelta += jQuery.css(elem, \"border\" + cssExpand[i] + \"Width\", true, styles);\n\n\t\t\t\t\t// But still keep track of it otherwise\n\t\t\t\t} else {\n\t\t\t\t\textra += jQuery.css(elem, \"border\" + cssExpand[i] + \"Width\", true, styles);\n\t\t\t\t}\n\n\t\t\t\t// If we get here with a border-box (content + padding + border), we're seeking \"content\" or\n\t\t\t\t// \"padding\" or \"margin\"\n\t\t\t} else {\n\n\t\t\t\t// For \"content\", subtract padding\n\t\t\t\tif (box === \"content\") {\n\t\t\t\t\tdelta -= jQuery.css(elem, \"padding\" + cssExpand[i], true, styles);\n\t\t\t\t}\n\n\t\t\t\t// For \"content\" or \"padding\", subtract border\n\t\t\t\tif (box !== \"margin\") {\n\t\t\t\t\tdelta -= jQuery.css(elem, \"border\" + cssExpand[i] + \"Width\", true, styles);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Account for positive content-box scroll gutter when requested by providing computedVal\n\t\tif (!isBorderBox && computedVal >= 0) {\n\n\t\t\t// offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border\n\t\t\t// Assuming integer scroll gutter, subtract the rest and round down\n\t\t\tdelta += Math.max(0, Math.ceil(\n\t\t\t\telem[\"offset\" + dimension[0].toUpperCase() + dimension.slice(1)] -\n\t\t\t\tcomputedVal -\n\t\t\t\tdelta -\n\t\t\t\textra -\n\t\t\t\t0.5\n\n\t\t\t\t// If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter\n\t\t\t\t// Use an explicit zero to avoid NaN (gh-3964)\n\t\t\t)) || 0;\n\t\t}\n\n\t\treturn delta + marginDelta;\n\t}\n\n\tfunction getWidthOrHeight(elem, dimension, extra) {\n\n\t\t// Start with computed style\n\t\tvar styles = getStyles(elem),\n\n\t\t\t// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322).\n\t\t\t// Fake content-box until we know it's needed to know the true value.\n\t\t\tboxSizingNeeded = !support.boxSizingReliable() || extra,\n\t\t\tisBorderBox = boxSizingNeeded &&\n\t\t\t\tjQuery.css(elem, \"boxSizing\", false, styles) === \"border-box\",\n\t\t\tvalueIsBorderBox = isBorderBox,\n\n\t\t\tval = curCSS(elem, dimension, styles),\n\t\t\toffsetProp = \"offset\" + dimension[0].toUpperCase() + dimension.slice(1);\n\n\t\t// Support: Firefox <=54\n\t\t// Return a confounding non-pixel value or feign ignorance, as appropriate.\n\t\tif (rnumnonpx.test(val)) {\n\t\t\tif (!extra) {\n\t\t\t\treturn val;\n\t\t\t}\n\t\t\tval = \"auto\";\n\t\t}\n\n\n\t\t// Support: IE 9 - 11 only\n\t\t// Use offsetWidth/offsetHeight for when box sizing is unreliable.\n\t\t// In those cases, the computed value can be trusted to be border-box.\n\t\tif ((!support.boxSizingReliable() && isBorderBox ||\n\n\t\t\t// Support: IE 10 - 11+, Edge 15 - 18+\n\t\t\t// IE/Edge misreport `getComputedStyle` of table rows with width/height\n\t\t\t// set in CSS while `offset*` properties report correct values.\n\t\t\t// Interestingly, in some cases IE 9 doesn't suffer from this issue.\n\t\t\t!support.reliableTrDimensions() && nodeName(elem, \"tr\") ||\n\n\t\t\t// Fall back to offsetWidth/offsetHeight when value is \"auto\"\n\t\t\t// This happens for inline elements with no explicit setting (gh-3571)\n\t\t\tval === \"auto\" ||\n\n\t\t\t// Support: Android <=4.1 - 4.3 only\n\t\t\t// Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602)\n\t\t\t!parseFloat(val) && jQuery.css(elem, \"display\", false, styles) === \"inline\") &&\n\n\t\t\t// Make sure the element is visible & connected\n\t\t\telem.getClientRects().length) {\n\n\t\t\tisBorderBox = jQuery.css(elem, \"boxSizing\", false, styles) === \"border-box\";\n\n\t\t\t// Where available, offsetWidth/offsetHeight approximate border box dimensions.\n\t\t\t// Where not available (e.g., SVG), assume unreliable box-sizing and interpret the\n\t\t\t// retrieved value as a content box dimension.\n\t\t\tvalueIsBorderBox = offsetProp in elem;\n\t\t\tif (valueIsBorderBox) {\n\t\t\t\tval = elem[offsetProp];\n\t\t\t}\n\t\t}\n\n\t\t// Normalize \"\" and auto\n\t\tval = parseFloat(val) || 0;\n\n\t\t// Adjust for the element's box model\n\t\treturn (val +\n\t\t\tboxModelAdjustment(\n\t\t\t\telem,\n\t\t\t\tdimension,\n\t\t\t\textra || (isBorderBox ? \"border\" : \"content\"),\n\t\t\t\tvalueIsBorderBox,\n\t\t\t\tstyles,\n\n\t\t\t\t// Provide the current computed size to request scroll gutter calculation (gh-3589)\n\t\t\t\tval\n\t\t\t)\n\t\t) + \"px\";\n\t}\n\n\tjQuery.extend({\n\n\t\t// Add in style property hooks for overriding the default\n\t\t// behavior of getting and setting a style property\n\t\tcssHooks: {\n\t\t\topacity: {\n\t\t\t\tget: function (elem, computed) {\n\t\t\t\t\tif (computed) {\n\n\t\t\t\t\t\t// We should always get a number back from opacity\n\t\t\t\t\t\tvar ret = curCSS(elem, \"opacity\");\n\t\t\t\t\t\treturn ret === \"\" ? \"1\" : ret;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t// Don't automatically add \"px\" to these possibly-unitless properties\n\t\tcssNumber: {\n\t\t\tanimationIterationCount: true,\n\t\t\taspectRatio: true,\n\t\t\tborderImageSlice: true,\n\t\t\tcolumnCount: true,\n\t\t\tflexGrow: true,\n\t\t\tflexShrink: true,\n\t\t\tfontWeight: true,\n\t\t\tgridArea: true,\n\t\t\tgridColumn: true,\n\t\t\tgridColumnEnd: true,\n\t\t\tgridColumnStart: true,\n\t\t\tgridRow: true,\n\t\t\tgridRowEnd: true,\n\t\t\tgridRowStart: true,\n\t\t\tlineHeight: true,\n\t\t\topacity: true,\n\t\t\torder: true,\n\t\t\torphans: true,\n\t\t\tscale: true,\n\t\t\twidows: true,\n\t\t\tzIndex: true,\n\t\t\tzoom: true,\n\n\t\t\t// SVG-related\n\t\t\tfillOpacity: true,\n\t\t\tfloodOpacity: true,\n\t\t\tstopOpacity: true,\n\t\t\tstrokeMiterlimit: true,\n\t\t\tstrokeOpacity: true\n\t\t},\n\n\t\t// Add in properties whose names you wish to fix before\n\t\t// setting or getting the value\n\t\tcssProps: {},\n\n\t\t// Get and set the style property on a DOM Node\n\t\tstyle: function (elem, name, value, extra) {\n\n\t\t\t// Don't set styles on text and comment nodes\n\t\t\tif (!elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Make sure that we're working with the right name\n\t\t\tvar ret, type, hooks,\n\t\t\t\torigName = camelCase(name),\n\t\t\t\tisCustomProp = rcustomProp.test(name),\n\t\t\t\tstyle = elem.style;\n\n\t\t\t// Make sure that we're working with the right name. We don't\n\t\t\t// want to query the value if it is a CSS custom property\n\t\t\t// since they are user-defined.\n\t\t\tif (!isCustomProp) {\n\t\t\t\tname = finalPropName(origName);\n\t\t\t}\n\n\t\t\t// Gets hook for the prefixed version, then unprefixed version\n\t\t\thooks = jQuery.cssHooks[name] || jQuery.cssHooks[origName];\n\n\t\t\t// Check if we're setting a value\n\t\t\tif (value !== undefined) {\n\t\t\t\ttype = typeof value;\n\n\t\t\t\t// Convert \"+=\" or \"-=\" to relative numbers (trac-7345)\n\t\t\t\tif (type === \"string\" && (ret = rcssNum.exec(value)) && ret[1]) {\n\t\t\t\t\tvalue = adjustCSS(elem, name, ret);\n\n\t\t\t\t\t// Fixes bug trac-9237\n\t\t\t\t\ttype = \"number\";\n\t\t\t\t}\n\n\t\t\t\t// Make sure that null and NaN values aren't set (trac-7116)\n\t\t\t\tif (value == null || value !== value) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// If a number was passed in, add the unit (except for certain CSS properties)\n\t\t\t\t// The isCustomProp check can be removed in jQuery 4.0 when we only auto-append\n\t\t\t\t// \"px\" to a few hardcoded values.\n\t\t\t\tif (type === \"number\" && !isCustomProp) {\n\t\t\t\t\tvalue += ret && ret[3] || (jQuery.cssNumber[origName] ? \"\" : \"px\");\n\t\t\t\t}\n\n\t\t\t\t// background-* props affect original clone's values\n\t\t\t\tif (!support.clearCloneStyle && value === \"\" && name.indexOf(\"background\") === 0) {\n\t\t\t\t\tstyle[name] = \"inherit\";\n\t\t\t\t}\n\n\t\t\t\t// If a hook was provided, use that value, otherwise just set the specified value\n\t\t\t\tif (!hooks || !(\"set\" in hooks) ||\n\t\t\t\t\t(value = hooks.set(elem, value, extra)) !== undefined) {\n\n\t\t\t\t\tif (isCustomProp) {\n\t\t\t\t\t\tstyle.setProperty(name, value);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tstyle[name] = value;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\t// If a hook was provided get the non-computed value from there\n\t\t\t\tif (hooks && \"get\" in hooks &&\n\t\t\t\t\t(ret = hooks.get(elem, false, extra)) !== undefined) {\n\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\n\t\t\t\t// Otherwise just get the value from the style object\n\t\t\t\treturn style[name];\n\t\t\t}\n\t\t},\n\n\t\tcss: function (elem, name, extra, styles) {\n\t\t\tvar val, num, hooks,\n\t\t\t\torigName = camelCase(name),\n\t\t\t\tisCustomProp = rcustomProp.test(name);\n\n\t\t\t// Make sure that we're working with the right name. We don't\n\t\t\t// want to modify the value if it is a CSS custom property\n\t\t\t// since they are user-defined.\n\t\t\tif (!isCustomProp) {\n\t\t\t\tname = finalPropName(origName);\n\t\t\t}\n\n\t\t\t// Try prefixed name followed by the unprefixed name\n\t\t\thooks = jQuery.cssHooks[name] || jQuery.cssHooks[origName];\n\n\t\t\t// If a hook was provided get the computed value from there\n\t\t\tif (hooks && \"get\" in hooks) {\n\t\t\t\tval = hooks.get(elem, true, extra);\n\t\t\t}\n\n\t\t\t// Otherwise, if a way to get the computed value exists, use that\n\t\t\tif (val === undefined) {\n\t\t\t\tval = curCSS(elem, name, styles);\n\t\t\t}\n\n\t\t\t// Convert \"normal\" to computed value\n\t\t\tif (val === \"normal\" && name in cssNormalTransform) {\n\t\t\t\tval = cssNormalTransform[name];\n\t\t\t}\n\n\t\t\t// Make numeric if forced or a qualifier was provided and val looks numeric\n\t\t\tif (extra === \"\" || extra) {\n\t\t\t\tnum = parseFloat(val);\n\t\t\t\treturn extra === true || isFinite(num) ? num || 0 : val;\n\t\t\t}\n\n\t\t\treturn val;\n\t\t}\n\t});\n\n\tjQuery.each([\"height\", \"width\"], function (_i, dimension) {\n\t\tjQuery.cssHooks[dimension] = {\n\t\t\tget: function (elem, computed, extra) {\n\t\t\t\tif (computed) {\n\n\t\t\t\t\t// Certain elements can have dimension info if we invisibly show them\n\t\t\t\t\t// but it must have a current display style that would benefit\n\t\t\t\t\treturn rdisplayswap.test(jQuery.css(elem, \"display\")) &&\n\n\t\t\t\t\t\t// Support: Safari 8+\n\t\t\t\t\t\t// Table columns in Safari have non-zero offsetWidth & zero\n\t\t\t\t\t\t// getBoundingClientRect().width unless display is changed.\n\t\t\t\t\t\t// Support: IE <=11 only\n\t\t\t\t\t\t// Running getBoundingClientRect on a disconnected node\n\t\t\t\t\t\t// in IE throws an error.\n\t\t\t\t\t\t(!elem.getClientRects().length || !elem.getBoundingClientRect().width) ?\n\t\t\t\t\t\tswap(elem, cssShow, function () {\n\t\t\t\t\t\t\treturn getWidthOrHeight(elem, dimension, extra);\n\t\t\t\t\t\t}) :\n\t\t\t\t\t\tgetWidthOrHeight(elem, dimension, extra);\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tset: function (elem, value, extra) {\n\t\t\t\tvar matches,\n\t\t\t\t\tstyles = getStyles(elem),\n\n\t\t\t\t\t// Only read styles.position if the test has a chance to fail\n\t\t\t\t\t// to avoid forcing a reflow.\n\t\t\t\t\tscrollboxSizeBuggy = !support.scrollboxSize() &&\n\t\t\t\t\t\tstyles.position === \"absolute\",\n\n\t\t\t\t\t// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991)\n\t\t\t\t\tboxSizingNeeded = scrollboxSizeBuggy || extra,\n\t\t\t\t\tisBorderBox = boxSizingNeeded &&\n\t\t\t\t\t\tjQuery.css(elem, \"boxSizing\", false, styles) === \"border-box\",\n\t\t\t\t\tsubtract = extra ?\n\t\t\t\t\t\tboxModelAdjustment(\n\t\t\t\t\t\t\telem,\n\t\t\t\t\t\t\tdimension,\n\t\t\t\t\t\t\textra,\n\t\t\t\t\t\t\tisBorderBox,\n\t\t\t\t\t\t\tstyles\n\t\t\t\t\t\t) :\n\t\t\t\t\t\t0;\n\n\t\t\t\t// Account for unreliable border-box dimensions by comparing offset* to computed and\n\t\t\t\t// faking a content-box to get border and padding (gh-3699)\n\t\t\t\tif (isBorderBox && scrollboxSizeBuggy) {\n\t\t\t\t\tsubtract -= Math.ceil(\n\t\t\t\t\t\telem[\"offset\" + dimension[0].toUpperCase() + dimension.slice(1)] -\n\t\t\t\t\t\tparseFloat(styles[dimension]) -\n\t\t\t\t\t\tboxModelAdjustment(elem, dimension, \"border\", false, styles) -\n\t\t\t\t\t\t0.5\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\t// Convert to pixels if value adjustment is needed\n\t\t\t\tif (subtract && (matches = rcssNum.exec(value)) &&\n\t\t\t\t\t(matches[3] || \"px\") !== \"px\") {\n\n\t\t\t\t\telem.style[dimension] = value;\n\t\t\t\t\tvalue = jQuery.css(elem, dimension);\n\t\t\t\t}\n\n\t\t\t\treturn setPositiveNumber(elem, value, subtract);\n\t\t\t}\n\t\t};\n\t});\n\n\tjQuery.cssHooks.marginLeft = addGetHookIf(support.reliableMarginLeft,\n\t\tfunction (elem, computed) {\n\t\t\tif (computed) {\n\t\t\t\treturn (parseFloat(curCSS(elem, \"marginLeft\")) ||\n\t\t\t\t\telem.getBoundingClientRect().left -\n\t\t\t\t\tswap(elem, { marginLeft: 0 }, function () {\n\t\t\t\t\t\treturn elem.getBoundingClientRect().left;\n\t\t\t\t\t})\n\t\t\t\t) + \"px\";\n\t\t\t}\n\t\t}\n\t);\n\n\t// These hooks are used by animate to expand properties\n\tjQuery.each({\n\t\tmargin: \"\",\n\t\tpadding: \"\",\n\t\tborder: \"Width\"\n\t}, function (prefix, suffix) {\n\t\tjQuery.cssHooks[prefix + suffix] = {\n\t\t\texpand: function (value) {\n\t\t\t\tvar i = 0,\n\t\t\t\t\texpanded = {},\n\n\t\t\t\t\t// Assumes a single number if not a string\n\t\t\t\t\tparts = typeof value === \"string\" ? value.split(\" \") : [value];\n\n\t\t\t\tfor (; i < 4; i++) {\n\t\t\t\t\texpanded[prefix + cssExpand[i] + suffix] =\n\t\t\t\t\t\tparts[i] || parts[i - 2] || parts[0];\n\t\t\t\t}\n\n\t\t\t\treturn expanded;\n\t\t\t}\n\t\t};\n\n\t\tif (prefix !== \"margin\") {\n\t\t\tjQuery.cssHooks[prefix + suffix].set = setPositiveNumber;\n\t\t}\n\t});\n\n\tjQuery.fn.extend({\n\t\tcss: function (name, value) {\n\t\t\treturn access(this, function (elem, name, value) {\n\t\t\t\tvar styles, len,\n\t\t\t\t\tmap = {},\n\t\t\t\t\ti = 0;\n\n\t\t\t\tif (Array.isArray(name)) {\n\t\t\t\t\tstyles = getStyles(elem);\n\t\t\t\t\tlen = name.length;\n\n\t\t\t\t\tfor (; i < len; i++) {\n\t\t\t\t\t\tmap[name[i]] = jQuery.css(elem, name[i], false, styles);\n\t\t\t\t\t}\n\n\t\t\t\t\treturn map;\n\t\t\t\t}\n\n\t\t\t\treturn value !== undefined ?\n\t\t\t\t\tjQuery.style(elem, name, value) :\n\t\t\t\t\tjQuery.css(elem, name);\n\t\t\t}, name, value, arguments.length > 1);\n\t\t}\n\t});\n\n\n\tfunction Tween(elem, options, prop, end, easing) {\n\t\treturn new Tween.prototype.init(elem, options, prop, end, easing);\n\t}\n\tjQuery.Tween = Tween;\n\n\tTween.prototype = {\n\t\tconstructor: Tween,\n\t\tinit: function (elem, options, prop, end, easing, unit) {\n\t\t\tthis.elem = elem;\n\t\t\tthis.prop = prop;\n\t\t\tthis.easing = easing || jQuery.easing._default;\n\t\t\tthis.options = options;\n\t\t\tthis.start = this.now = this.cur();\n\t\t\tthis.end = end;\n\t\t\tthis.unit = unit || (jQuery.cssNumber[prop] ? \"\" : \"px\");\n\t\t},\n\t\tcur: function () {\n\t\t\tvar hooks = Tween.propHooks[this.prop];\n\n\t\t\treturn hooks && hooks.get ?\n\t\t\t\thooks.get(this) :\n\t\t\t\tTween.propHooks._default.get(this);\n\t\t},\n\t\trun: function (percent) {\n\t\t\tvar eased,\n\t\t\t\thooks = Tween.propHooks[this.prop];\n\n\t\t\tif (this.options.duration) {\n\t\t\t\tthis.pos = eased = jQuery.easing[this.easing](\n\t\t\t\t\tpercent, this.options.duration * percent, 0, 1, this.options.duration\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tthis.pos = eased = percent;\n\t\t\t}\n\t\t\tthis.now = (this.end - this.start) * eased + this.start;\n\n\t\t\tif (this.options.step) {\n\t\t\t\tthis.options.step.call(this.elem, this.now, this);\n\t\t\t}\n\n\t\t\tif (hooks && hooks.set) {\n\t\t\t\thooks.set(this);\n\t\t\t} else {\n\t\t\t\tTween.propHooks._default.set(this);\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t};\n\n\tTween.prototype.init.prototype = Tween.prototype;\n\n\tTween.propHooks = {\n\t\t_default: {\n\t\t\tget: function (tween) {\n\t\t\t\tvar result;\n\n\t\t\t\t// Use a property on the element directly when it is not a DOM element,\n\t\t\t\t// or when there is no matching style property that exists.\n\t\t\t\tif (tween.elem.nodeType !== 1 ||\n\t\t\t\t\ttween.elem[tween.prop] != null && tween.elem.style[tween.prop] == null) {\n\t\t\t\t\treturn tween.elem[tween.prop];\n\t\t\t\t}\n\n\t\t\t\t// Passing an empty string as a 3rd parameter to .css will automatically\n\t\t\t\t// attempt a parseFloat and fallback to a string if the parse fails.\n\t\t\t\t// Simple values such as \"10px\" are parsed to Float;\n\t\t\t\t// complex values such as \"rotate(1rad)\" are returned as-is.\n\t\t\t\tresult = jQuery.css(tween.elem, tween.prop, \"\");\n\n\t\t\t\t// Empty strings, null, undefined and \"auto\" are converted to 0.\n\t\t\t\treturn !result || result === \"auto\" ? 0 : result;\n\t\t\t},\n\t\t\tset: function (tween) {\n\n\t\t\t\t// Use step hook for back compat.\n\t\t\t\t// Use cssHook if its there.\n\t\t\t\t// Use .style if available and use plain properties where available.\n\t\t\t\tif (jQuery.fx.step[tween.prop]) {\n\t\t\t\t\tjQuery.fx.step[tween.prop](tween);\n\t\t\t\t} else if (tween.elem.nodeType === 1 && (\n\t\t\t\t\tjQuery.cssHooks[tween.prop] ||\n\t\t\t\t\ttween.elem.style[finalPropName(tween.prop)] != null)) {\n\t\t\t\t\tjQuery.style(tween.elem, tween.prop, tween.now + tween.unit);\n\t\t\t\t} else {\n\t\t\t\t\ttween.elem[tween.prop] = tween.now;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t// Support: IE <=9 only\n\t// Panic based approach to setting things on disconnected nodes\n\tTween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {\n\t\tset: function (tween) {\n\t\t\tif (tween.elem.nodeType && tween.elem.parentNode) {\n\t\t\t\ttween.elem[tween.prop] = tween.now;\n\t\t\t}\n\t\t}\n\t};\n\n\tjQuery.easing = {\n\t\tlinear: function (p) {\n\t\t\treturn p;\n\t\t},\n\t\tswing: function (p) {\n\t\t\treturn 0.5 - Math.cos(p * Math.PI) / 2;\n\t\t},\n\t\t_default: \"swing\"\n\t};\n\n\tjQuery.fx = Tween.prototype.init;\n\n\t// Back compat <1.8 extension point\n\tjQuery.fx.step = {};\n\n\n\n\n\tvar\n\t\tfxNow, inProgress,\n\t\trfxtypes = /^(?:toggle|show|hide)$/,\n\t\trrun = /queueHooks$/;\n\n\tfunction schedule() {\n\t\tif (inProgress) {\n\t\t\tif (document.hidden === false && window.requestAnimationFrame) {\n\t\t\t\twindow.requestAnimationFrame(schedule);\n\t\t\t} else {\n\t\t\t\twindow.setTimeout(schedule, jQuery.fx.interval);\n\t\t\t}\n\n\t\t\tjQuery.fx.tick();\n\t\t}\n\t}\n\n\t// Animations created synchronously will run synchronously\n\tfunction createFxNow() {\n\t\twindow.setTimeout(function () {\n\t\t\tfxNow = undefined;\n\t\t});\n\t\treturn (fxNow = Date.now());\n\t}\n\n\t// Generate parameters to create a standard animation\n\tfunction genFx(type, includeWidth) {\n\t\tvar which,\n\t\t\ti = 0,\n\t\t\tattrs = { height: type };\n\n\t\t// If we include width, step value is 1 to do all cssExpand values,\n\t\t// otherwise step value is 2 to skip over Left and Right\n\t\tincludeWidth = includeWidth ? 1 : 0;\n\t\tfor (; i < 4; i += 2 - includeWidth) {\n\t\t\twhich = cssExpand[i];\n\t\t\tattrs[\"margin\" + which] = attrs[\"padding\" + which] = type;\n\t\t}\n\n\t\tif (includeWidth) {\n\t\t\tattrs.opacity = attrs.width = type;\n\t\t}\n\n\t\treturn attrs;\n\t}\n\n\tfunction createTween(value, prop, animation) {\n\t\tvar tween,\n\t\t\tcollection = (Animation.tweeners[prop] || []).concat(Animation.tweeners[\"*\"]),\n\t\t\tindex = 0,\n\t\t\tlength = collection.length;\n\t\tfor (; index < length; index++) {\n\t\t\tif ((tween = collection[index].call(animation, prop, value))) {\n\n\t\t\t\t// We're done with this property\n\t\t\t\treturn tween;\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction defaultPrefilter(elem, props, opts) {\n\t\tvar prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display,\n\t\t\tisBox = \"width\" in props || \"height\" in props,\n\t\t\tanim = this,\n\t\t\torig = {},\n\t\t\tstyle = elem.style,\n\t\t\thidden = elem.nodeType && isHiddenWithinTree(elem),\n\t\t\tdataShow = dataPriv.get(elem, \"fxshow\");\n\n\t\t// Queue-skipping animations hijack the fx hooks\n\t\tif (!opts.queue) {\n\t\t\thooks = jQuery._queueHooks(elem, \"fx\");\n\t\t\tif (hooks.unqueued == null) {\n\t\t\t\thooks.unqueued = 0;\n\t\t\t\toldfire = hooks.empty.fire;\n\t\t\t\thooks.empty.fire = function () {\n\t\t\t\t\tif (!hooks.unqueued) {\n\t\t\t\t\t\toldfire();\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t\thooks.unqueued++;\n\n\t\t\tanim.always(function () {\n\n\t\t\t\t// Ensure the complete handler is called before this completes\n\t\t\t\tanim.always(function () {\n\t\t\t\t\thooks.unqueued--;\n\t\t\t\t\tif (!jQuery.queue(elem, \"fx\").length) {\n\t\t\t\t\t\thooks.empty.fire();\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\n\t\t// Detect show/hide animations\n\t\tfor (prop in props) {\n\t\t\tvalue = props[prop];\n\t\t\tif (rfxtypes.test(value)) {\n\t\t\t\tdelete props[prop];\n\t\t\t\ttoggle = toggle || value === \"toggle\";\n\t\t\t\tif (value === (hidden ? \"hide\" : \"show\")) {\n\n\t\t\t\t\t// Pretend to be hidden if this is a \"show\" and\n\t\t\t\t\t// there is still data from a stopped show/hide\n\t\t\t\t\tif (value === \"show\" && dataShow && dataShow[prop] !== undefined) {\n\t\t\t\t\t\thidden = true;\n\n\t\t\t\t\t\t// Ignore all other no-op show/hide data\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\torig[prop] = dataShow && dataShow[prop] || jQuery.style(elem, prop);\n\t\t\t}\n\t\t}\n\n\t\t// Bail out if this is a no-op like .hide().hide()\n\t\tpropTween = !jQuery.isEmptyObject(props);\n\t\tif (!propTween && jQuery.isEmptyObject(orig)) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Restrict \"overflow\" and \"display\" styles during box animations\n\t\tif (isBox && elem.nodeType === 1) {\n\n\t\t\t// Support: IE <=9 - 11, Edge 12 - 15\n\t\t\t// Record all 3 overflow attributes because IE does not infer the shorthand\n\t\t\t// from identically-valued overflowX and overflowY and Edge just mirrors\n\t\t\t// the overflowX value there.\n\t\t\topts.overflow = [style.overflow, style.overflowX, style.overflowY];\n\n\t\t\t// Identify a display type, preferring old show/hide data over the CSS cascade\n\t\t\trestoreDisplay = dataShow && dataShow.display;\n\t\t\tif (restoreDisplay == null) {\n\t\t\t\trestoreDisplay = dataPriv.get(elem, \"display\");\n\t\t\t}\n\t\t\tdisplay = jQuery.css(elem, \"display\");\n\t\t\tif (display === \"none\") {\n\t\t\t\tif (restoreDisplay) {\n\t\t\t\t\tdisplay = restoreDisplay;\n\t\t\t\t} else {\n\n\t\t\t\t\t// Get nonempty value(s) by temporarily forcing visibility\n\t\t\t\t\tshowHide([elem], true);\n\t\t\t\t\trestoreDisplay = elem.style.display || restoreDisplay;\n\t\t\t\t\tdisplay = jQuery.css(elem, \"display\");\n\t\t\t\t\tshowHide([elem]);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Animate inline elements as inline-block\n\t\t\tif (display === \"inline\" || display === \"inline-block\" && restoreDisplay != null) {\n\t\t\t\tif (jQuery.css(elem, \"float\") === \"none\") {\n\n\t\t\t\t\t// Restore the original display value at the end of pure show/hide animations\n\t\t\t\t\tif (!propTween) {\n\t\t\t\t\t\tanim.done(function () {\n\t\t\t\t\t\t\tstyle.display = restoreDisplay;\n\t\t\t\t\t\t});\n\t\t\t\t\t\tif (restoreDisplay == null) {\n\t\t\t\t\t\t\tdisplay = style.display;\n\t\t\t\t\t\t\trestoreDisplay = display === \"none\" ? \"\" : display;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tstyle.display = \"inline-block\";\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (opts.overflow) {\n\t\t\tstyle.overflow = \"hidden\";\n\t\t\tanim.always(function () {\n\t\t\t\tstyle.overflow = opts.overflow[0];\n\t\t\t\tstyle.overflowX = opts.overflow[1];\n\t\t\t\tstyle.overflowY = opts.overflow[2];\n\t\t\t});\n\t\t}\n\n\t\t// Implement show/hide animations\n\t\tpropTween = false;\n\t\tfor (prop in orig) {\n\n\t\t\t// General show/hide setup for this element animation\n\t\t\tif (!propTween) {\n\t\t\t\tif (dataShow) {\n\t\t\t\t\tif (\"hidden\" in dataShow) {\n\t\t\t\t\t\thidden = dataShow.hidden;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tdataShow = dataPriv.access(elem, \"fxshow\", { display: restoreDisplay });\n\t\t\t\t}\n\n\t\t\t\t// Store hidden/visible for toggle so `.stop().toggle()` \"reverses\"\n\t\t\t\tif (toggle) {\n\t\t\t\t\tdataShow.hidden = !hidden;\n\t\t\t\t}\n\n\t\t\t\t// Show elements before animating them\n\t\t\t\tif (hidden) {\n\t\t\t\t\tshowHide([elem], true);\n\t\t\t\t}\n\n\t\t\t\t/* eslint-disable no-loop-func */\n\n\t\t\t\tanim.done(function () {\n\n\t\t\t\t\t/* eslint-enable no-loop-func */\n\n\t\t\t\t\t// The final step of a \"hide\" animation is actually hiding the element\n\t\t\t\t\tif (!hidden) {\n\t\t\t\t\t\tshowHide([elem]);\n\t\t\t\t\t}\n\t\t\t\t\tdataPriv.remove(elem, \"fxshow\");\n\t\t\t\t\tfor (prop in orig) {\n\t\t\t\t\t\tjQuery.style(elem, prop, orig[prop]);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// Per-property setup\n\t\t\tpropTween = createTween(hidden ? dataShow[prop] : 0, prop, anim);\n\t\t\tif (!(prop in dataShow)) {\n\t\t\t\tdataShow[prop] = propTween.start;\n\t\t\t\tif (hidden) {\n\t\t\t\t\tpropTween.end = propTween.start;\n\t\t\t\t\tpropTween.start = 0;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction propFilter(props, specialEasing) {\n\t\tvar index, name, easing, value, hooks;\n\n\t\t// camelCase, specialEasing and expand cssHook pass\n\t\tfor (index in props) {\n\t\t\tname = camelCase(index);\n\t\t\teasing = specialEasing[name];\n\t\t\tvalue = props[index];\n\t\t\tif (Array.isArray(value)) {\n\t\t\t\teasing = value[1];\n\t\t\t\tvalue = props[index] = value[0];\n\t\t\t}\n\n\t\t\tif (index !== name) {\n\t\t\t\tprops[name] = value;\n\t\t\t\tdelete props[index];\n\t\t\t}\n\n\t\t\thooks = jQuery.cssHooks[name];\n\t\t\tif (hooks && \"expand\" in hooks) {\n\t\t\t\tvalue = hooks.expand(value);\n\t\t\t\tdelete props[name];\n\n\t\t\t\t// Not quite $.extend, this won't overwrite existing keys.\n\t\t\t\t// Reusing 'index' because we have the correct \"name\"\n\t\t\t\tfor (index in value) {\n\t\t\t\t\tif (!(index in props)) {\n\t\t\t\t\t\tprops[index] = value[index];\n\t\t\t\t\t\tspecialEasing[index] = easing;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tspecialEasing[name] = easing;\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction Animation(elem, properties, options) {\n\t\tvar result,\n\t\t\tstopped,\n\t\t\tindex = 0,\n\t\t\tlength = Animation.prefilters.length,\n\t\t\tdeferred = jQuery.Deferred().always(function () {\n\n\t\t\t\t// Don't match elem in the :animated selector\n\t\t\t\tdelete tick.elem;\n\t\t\t}),\n\t\t\ttick = function () {\n\t\t\t\tif (stopped) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tvar currentTime = fxNow || createFxNow(),\n\t\t\t\t\tremaining = Math.max(0, animation.startTime + animation.duration - currentTime),\n\n\t\t\t\t\t// Support: Android 2.3 only\n\t\t\t\t\t// Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (trac-12497)\n\t\t\t\t\ttemp = remaining / animation.duration || 0,\n\t\t\t\t\tpercent = 1 - temp,\n\t\t\t\t\tindex = 0,\n\t\t\t\t\tlength = animation.tweens.length;\n\n\t\t\t\tfor (; index < length; index++) {\n\t\t\t\t\tanimation.tweens[index].run(percent);\n\t\t\t\t}\n\n\t\t\t\tdeferred.notifyWith(elem, [animation, percent, remaining]);\n\n\t\t\t\t// If there's more to do, yield\n\t\t\t\tif (percent < 1 && length) {\n\t\t\t\t\treturn remaining;\n\t\t\t\t}\n\n\t\t\t\t// If this was an empty animation, synthesize a final progress notification\n\t\t\t\tif (!length) {\n\t\t\t\t\tdeferred.notifyWith(elem, [animation, 1, 0]);\n\t\t\t\t}\n\n\t\t\t\t// Resolve the animation and report its conclusion\n\t\t\t\tdeferred.resolveWith(elem, [animation]);\n\t\t\t\treturn false;\n\t\t\t},\n\t\t\tanimation = deferred.promise({\n\t\t\t\telem: elem,\n\t\t\t\tprops: jQuery.extend({}, properties),\n\t\t\t\topts: jQuery.extend(true, {\n\t\t\t\t\tspecialEasing: {},\n\t\t\t\t\teasing: jQuery.easing._default\n\t\t\t\t}, options),\n\t\t\t\toriginalProperties: properties,\n\t\t\t\toriginalOptions: options,\n\t\t\t\tstartTime: fxNow || createFxNow(),\n\t\t\t\tduration: options.duration,\n\t\t\t\ttweens: [],\n\t\t\t\tcreateTween: function (prop, end) {\n\t\t\t\t\tvar tween = jQuery.Tween(elem, animation.opts, prop, end,\n\t\t\t\t\t\tanimation.opts.specialEasing[prop] || animation.opts.easing);\n\t\t\t\t\tanimation.tweens.push(tween);\n\t\t\t\t\treturn tween;\n\t\t\t\t},\n\t\t\t\tstop: function (gotoEnd) {\n\t\t\t\t\tvar index = 0,\n\n\t\t\t\t\t\t// If we are going to the end, we want to run all the tweens\n\t\t\t\t\t\t// otherwise we skip this part\n\t\t\t\t\t\tlength = gotoEnd ? animation.tweens.length : 0;\n\t\t\t\t\tif (stopped) {\n\t\t\t\t\t\treturn this;\n\t\t\t\t\t}\n\t\t\t\t\tstopped = true;\n\t\t\t\t\tfor (; index < length; index++) {\n\t\t\t\t\t\tanimation.tweens[index].run(1);\n\t\t\t\t\t}\n\n\t\t\t\t\t// Resolve when we played the last frame; otherwise, reject\n\t\t\t\t\tif (gotoEnd) {\n\t\t\t\t\t\tdeferred.notifyWith(elem, [animation, 1, 0]);\n\t\t\t\t\t\tdeferred.resolveWith(elem, [animation, gotoEnd]);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdeferred.rejectWith(elem, [animation, gotoEnd]);\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t}),\n\t\t\tprops = animation.props;\n\n\t\tpropFilter(props, animation.opts.specialEasing);\n\n\t\tfor (; index < length; index++) {\n\t\t\tresult = Animation.prefilters[index].call(animation, elem, props, animation.opts);\n\t\t\tif (result) {\n\t\t\t\tif (isFunction(result.stop)) {\n\t\t\t\t\tjQuery._queueHooks(animation.elem, animation.opts.queue).stop =\n\t\t\t\t\t\tresult.stop.bind(result);\n\t\t\t\t}\n\t\t\t\treturn result;\n\t\t\t}\n\t\t}\n\n\t\tjQuery.map(props, createTween, animation);\n\n\t\tif (isFunction(animation.opts.start)) {\n\t\t\tanimation.opts.start.call(elem, animation);\n\t\t}\n\n\t\t// Attach callbacks from options\n\t\tanimation\n\t\t\t.progress(animation.opts.progress)\n\t\t\t.done(animation.opts.done, animation.opts.complete)\n\t\t\t.fail(animation.opts.fail)\n\t\t\t.always(animation.opts.always);\n\n\t\tjQuery.fx.timer(\n\t\t\tjQuery.extend(tick, {\n\t\t\t\telem: elem,\n\t\t\t\tanim: animation,\n\t\t\t\tqueue: animation.opts.queue\n\t\t\t})\n\t\t);\n\n\t\treturn animation;\n\t}\n\n\tjQuery.Animation = jQuery.extend(Animation, {\n\n\t\ttweeners: {\n\t\t\t\"*\": [function (prop, value) {\n\t\t\t\tvar tween = this.createTween(prop, value);\n\t\t\t\tadjustCSS(tween.elem, prop, rcssNum.exec(value), tween);\n\t\t\t\treturn tween;\n\t\t\t}]\n\t\t},\n\n\t\ttweener: function (props, callback) {\n\t\t\tif (isFunction(props)) {\n\t\t\t\tcallback = props;\n\t\t\t\tprops = [\"*\"];\n\t\t\t} else {\n\t\t\t\tprops = props.match(rnothtmlwhite);\n\t\t\t}\n\n\t\t\tvar prop,\n\t\t\t\tindex = 0,\n\t\t\t\tlength = props.length;\n\n\t\t\tfor (; index < length; index++) {\n\t\t\t\tprop = props[index];\n\t\t\t\tAnimation.tweeners[prop] = Animation.tweeners[prop] || [];\n\t\t\t\tAnimation.tweeners[prop].unshift(callback);\n\t\t\t}\n\t\t},\n\n\t\tprefilters: [defaultPrefilter],\n\n\t\tprefilter: function (callback, prepend) {\n\t\t\tif (prepend) {\n\t\t\t\tAnimation.prefilters.unshift(callback);\n\t\t\t} else {\n\t\t\t\tAnimation.prefilters.push(callback);\n\t\t\t}\n\t\t}\n\t});\n\n\tjQuery.speed = function (speed, easing, fn) {\n\t\tvar opt = speed && typeof speed === \"object\" ? jQuery.extend({}, speed) : {\n\t\t\tcomplete: fn || !fn && easing ||\n\t\t\t\tisFunction(speed) && speed,\n\t\t\tduration: speed,\n\t\t\teasing: fn && easing || easing && !isFunction(easing) && easing\n\t\t};\n\n\t\t// Go to the end state if fx are off\n\t\tif (jQuery.fx.off) {\n\t\t\topt.duration = 0;\n\n\t\t} else {\n\t\t\tif (typeof opt.duration !== \"number\") {\n\t\t\t\tif (opt.duration in jQuery.fx.speeds) {\n\t\t\t\t\topt.duration = jQuery.fx.speeds[opt.duration];\n\n\t\t\t\t} else {\n\t\t\t\t\topt.duration = jQuery.fx.speeds._default;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Normalize opt.queue - true/undefined/null -> \"fx\"\n\t\tif (opt.queue == null || opt.queue === true) {\n\t\t\topt.queue = \"fx\";\n\t\t}\n\n\t\t// Queueing\n\t\topt.old = opt.complete;\n\n\t\topt.complete = function () {\n\t\t\tif (isFunction(opt.old)) {\n\t\t\t\topt.old.call(this);\n\t\t\t}\n\n\t\t\tif (opt.queue) {\n\t\t\t\tjQuery.dequeue(this, opt.queue);\n\t\t\t}\n\t\t};\n\n\t\treturn opt;\n\t};\n\n\tjQuery.fn.extend({\n\t\tfadeTo: function (speed, to, easing, callback) {\n\n\t\t\t// Show any hidden elements after setting opacity to 0\n\t\t\treturn this.filter(isHiddenWithinTree).css(\"opacity\", 0).show()\n\n\t\t\t\t// Animate to the value specified\n\t\t\t\t.end().animate({ opacity: to }, speed, easing, callback);\n\t\t},\n\t\tanimate: function (prop, speed, easing, callback) {\n\t\t\tvar empty = jQuery.isEmptyObject(prop),\n\t\t\t\toptall = jQuery.speed(speed, easing, callback),\n\t\t\t\tdoAnimation = function () {\n\n\t\t\t\t\t// Operate on a copy of prop so per-property easing won't be lost\n\t\t\t\t\tvar anim = Animation(this, jQuery.extend({}, prop), optall);\n\n\t\t\t\t\t// Empty animations, or finishing resolves immediately\n\t\t\t\t\tif (empty || dataPriv.get(this, \"finish\")) {\n\t\t\t\t\t\tanim.stop(true);\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\tdoAnimation.finish = doAnimation;\n\n\t\t\treturn empty || optall.queue === false ?\n\t\t\t\tthis.each(doAnimation) :\n\t\t\t\tthis.queue(optall.queue, doAnimation);\n\t\t},\n\t\tstop: function (type, clearQueue, gotoEnd) {\n\t\t\tvar stopQueue = function (hooks) {\n\t\t\t\tvar stop = hooks.stop;\n\t\t\t\tdelete hooks.stop;\n\t\t\t\tstop(gotoEnd);\n\t\t\t};\n\n\t\t\tif (typeof type !== \"string\") {\n\t\t\t\tgotoEnd = clearQueue;\n\t\t\t\tclearQueue = type;\n\t\t\t\ttype = undefined;\n\t\t\t}\n\t\t\tif (clearQueue) {\n\t\t\t\tthis.queue(type || \"fx\", []);\n\t\t\t}\n\n\t\t\treturn this.each(function () {\n\t\t\t\tvar dequeue = true,\n\t\t\t\t\tindex = type != null && type + \"queueHooks\",\n\t\t\t\t\ttimers = jQuery.timers,\n\t\t\t\t\tdata = dataPriv.get(this);\n\n\t\t\t\tif (index) {\n\t\t\t\t\tif (data[index] && data[index].stop) {\n\t\t\t\t\t\tstopQueue(data[index]);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tfor (index in data) {\n\t\t\t\t\t\tif (data[index] && data[index].stop && rrun.test(index)) {\n\t\t\t\t\t\t\tstopQueue(data[index]);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tfor (index = timers.length; index--;) {\n\t\t\t\t\tif (timers[index].elem === this &&\n\t\t\t\t\t\t(type == null || timers[index].queue === type)) {\n\n\t\t\t\t\t\ttimers[index].anim.stop(gotoEnd);\n\t\t\t\t\t\tdequeue = false;\n\t\t\t\t\t\ttimers.splice(index, 1);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Start the next in the queue if the last step wasn't forced.\n\t\t\t\t// Timers currently will call their complete callbacks, which\n\t\t\t\t// will dequeue but only if they were gotoEnd.\n\t\t\t\tif (dequeue || !gotoEnd) {\n\t\t\t\t\tjQuery.dequeue(this, type);\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\t\tfinish: function (type) {\n\t\t\tif (type !== false) {\n\t\t\t\ttype = type || \"fx\";\n\t\t\t}\n\t\t\treturn this.each(function () {\n\t\t\t\tvar index,\n\t\t\t\t\tdata = dataPriv.get(this),\n\t\t\t\t\tqueue = data[type + \"queue\"],\n\t\t\t\t\thooks = data[type + \"queueHooks\"],\n\t\t\t\t\ttimers = jQuery.timers,\n\t\t\t\t\tlength = queue ? queue.length : 0;\n\n\t\t\t\t// Enable finishing flag on private data\n\t\t\t\tdata.finish = true;\n\n\t\t\t\t// Empty the queue first\n\t\t\t\tjQuery.queue(this, type, []);\n\n\t\t\t\tif (hooks && hooks.stop) {\n\t\t\t\t\thooks.stop.call(this, true);\n\t\t\t\t}\n\n\t\t\t\t// Look for any active animations, and finish them\n\t\t\t\tfor (index = timers.length; index--;) {\n\t\t\t\t\tif (timers[index].elem === this && timers[index].queue === type) {\n\t\t\t\t\t\ttimers[index].anim.stop(true);\n\t\t\t\t\t\ttimers.splice(index, 1);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Look for any animations in the old queue and finish them\n\t\t\t\tfor (index = 0; index < length; index++) {\n\t\t\t\t\tif (queue[index] && queue[index].finish) {\n\t\t\t\t\t\tqueue[index].finish.call(this);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Turn off finishing flag\n\t\t\t\tdelete data.finish;\n\t\t\t});\n\t\t}\n\t});\n\n\tjQuery.each([\"toggle\", \"show\", \"hide\"], function (_i, name) {\n\t\tvar cssFn = jQuery.fn[name];\n\t\tjQuery.fn[name] = function (speed, easing, callback) {\n\t\t\treturn speed == null || typeof speed === \"boolean\" ?\n\t\t\t\tcssFn.apply(this, arguments) :\n\t\t\t\tthis.animate(genFx(name, true), speed, easing, callback);\n\t\t};\n\t});\n\n\t// Generate shortcuts for custom animations\n\tjQuery.each({\n\t\tslideDown: genFx(\"show\"),\n\t\tslideUp: genFx(\"hide\"),\n\t\tslideToggle: genFx(\"toggle\"),\n\t\tfadeIn: { opacity: \"show\" },\n\t\tfadeOut: { opacity: \"hide\" },\n\t\tfadeToggle: { opacity: \"toggle\" }\n\t}, function (name, props) {\n\t\tjQuery.fn[name] = function (speed, easing, callback) {\n\t\t\treturn this.animate(props, speed, easing, callback);\n\t\t};\n\t});\n\n\tjQuery.timers = [];\n\tjQuery.fx.tick = function () {\n\t\tvar timer,\n\t\t\ti = 0,\n\t\t\ttimers = jQuery.timers;\n\n\t\tfxNow = Date.now();\n\n\t\tfor (; i < timers.length; i++) {\n\t\t\ttimer = timers[i];\n\n\t\t\t// Run the timer and safely remove it when done (allowing for external removal)\n\t\t\tif (!timer() && timers[i] === timer) {\n\t\t\t\ttimers.splice(i--, 1);\n\t\t\t}\n\t\t}\n\n\t\tif (!timers.length) {\n\t\t\tjQuery.fx.stop();\n\t\t}\n\t\tfxNow = undefined;\n\t};\n\n\tjQuery.fx.timer = function (timer) {\n\t\tjQuery.timers.push(timer);\n\t\tjQuery.fx.start();\n\t};\n\n\tjQuery.fx.interval = 13;\n\tjQuery.fx.start = function () {\n\t\tif (inProgress) {\n\t\t\treturn;\n\t\t}\n\n\t\tinProgress = true;\n\t\tschedule();\n\t};\n\n\tjQuery.fx.stop = function () {\n\t\tinProgress = null;\n\t};\n\n\tjQuery.fx.speeds = {\n\t\tslow: 600,\n\t\tfast: 200,\n\n\t\t// Default speed\n\t\t_default: 400\n\t};\n\n\n\t// Based off of the plugin by Clint Helfers, with permission.\n\tjQuery.fn.delay = function (time, type) {\n\t\ttime = jQuery.fx ? jQuery.fx.speeds[time] || time : time;\n\t\ttype = type || \"fx\";\n\n\t\treturn this.queue(type, function (next, hooks) {\n\t\t\tvar timeout = window.setTimeout(next, time);\n\t\t\thooks.stop = function () {\n\t\t\t\twindow.clearTimeout(timeout);\n\t\t\t};\n\t\t});\n\t};\n\n\n\t(function () {\n\t\tvar input = document.createElement(\"input\"),\n\t\t\tselect = document.createElement(\"select\"),\n\t\t\topt = select.appendChild(document.createElement(\"option\"));\n\n\t\tinput.type = \"checkbox\";\n\n\t\t// Support: Android <=4.3 only\n\t\t// Default value for a checkbox should be \"on\"\n\t\tsupport.checkOn = input.value !== \"\";\n\n\t\t// Support: IE <=11 only\n\t\t// Must access selectedIndex to make default options select\n\t\tsupport.optSelected = opt.selected;\n\n\t\t// Support: IE <=11 only\n\t\t// An input loses its value after becoming a radio\n\t\tinput = document.createElement(\"input\");\n\t\tinput.value = \"t\";\n\t\tinput.type = \"radio\";\n\t\tsupport.radioValue = input.value === \"t\";\n\t})();\n\n\n\tvar boolHook,\n\t\tattrHandle = jQuery.expr.attrHandle;\n\n\tjQuery.fn.extend({\n\t\tattr: function (name, value) {\n\t\t\treturn access(this, jQuery.attr, name, value, arguments.length > 1);\n\t\t},\n\n\t\tremoveAttr: function (name) {\n\t\t\treturn this.each(function () {\n\t\t\t\tjQuery.removeAttr(this, name);\n\t\t\t});\n\t\t}\n\t});\n\n\tjQuery.extend({\n\t\tattr: function (elem, name, value) {\n\t\t\tvar ret, hooks,\n\t\t\t\tnType = elem.nodeType;\n\n\t\t\t// Don't get/set attributes on text, comment and attribute nodes\n\t\t\tif (nType === 3 || nType === 8 || nType === 2) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Fallback to prop when attributes are not supported\n\t\t\tif (typeof elem.getAttribute === \"undefined\") {\n\t\t\t\treturn jQuery.prop(elem, name, value);\n\t\t\t}\n\n\t\t\t// Attribute hooks are determined by the lowercase version\n\t\t\t// Grab necessary hook if one is defined\n\t\t\tif (nType !== 1 || !jQuery.isXMLDoc(elem)) {\n\t\t\t\thooks = jQuery.attrHooks[name.toLowerCase()] ||\n\t\t\t\t\t(jQuery.expr.match.bool.test(name) ? boolHook : undefined);\n\t\t\t}\n\n\t\t\tif (value !== undefined) {\n\t\t\t\tif (value === null) {\n\t\t\t\t\tjQuery.removeAttr(elem, name);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (hooks && \"set\" in hooks &&\n\t\t\t\t\t(ret = hooks.set(elem, value, name)) !== undefined) {\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\n\t\t\t\telem.setAttribute(name, value + \"\");\n\t\t\t\treturn value;\n\t\t\t}\n\n\t\t\tif (hooks && \"get\" in hooks && (ret = hooks.get(elem, name)) !== null) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\tret = jQuery.find.attr(elem, name);\n\n\t\t\t// Non-existent attributes return null, we normalize to undefined\n\t\t\treturn ret == null ? undefined : ret;\n\t\t},\n\n\t\tattrHooks: {\n\t\t\ttype: {\n\t\t\t\tset: function (elem, value) {\n\t\t\t\t\tif (!support.radioValue && value === \"radio\" &&\n\t\t\t\t\t\tnodeName(elem, \"input\")) {\n\t\t\t\t\t\tvar val = elem.value;\n\t\t\t\t\t\telem.setAttribute(\"type\", value);\n\t\t\t\t\t\tif (val) {\n\t\t\t\t\t\t\telem.value = val;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn value;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tremoveAttr: function (elem, value) {\n\t\t\tvar name,\n\t\t\t\ti = 0,\n\n\t\t\t\t// Attribute names can contain non-HTML whitespace characters\n\t\t\t\t// https://html.spec.whatwg.org/multipage/syntax.html#attributes-2\n\t\t\t\tattrNames = value && value.match(rnothtmlwhite);\n\n\t\t\tif (attrNames && elem.nodeType === 1) {\n\t\t\t\twhile ((name = attrNames[i++])) {\n\t\t\t\t\telem.removeAttribute(name);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\n\t// Hooks for boolean attributes\n\tboolHook = {\n\t\tset: function (elem, value, name) {\n\t\t\tif (value === false) {\n\n\t\t\t\t// Remove boolean attributes when set to false\n\t\t\t\tjQuery.removeAttr(elem, name);\n\t\t\t} else {\n\t\t\t\telem.setAttribute(name, name);\n\t\t\t}\n\t\t\treturn name;\n\t\t}\n\t};\n\n\tjQuery.each(jQuery.expr.match.bool.source.match(/\\w+/g), function (_i, name) {\n\t\tvar getter = attrHandle[name] || jQuery.find.attr;\n\n\t\tattrHandle[name] = function (elem, name, isXML) {\n\t\t\tvar ret, handle,\n\t\t\t\tlowercaseName = name.toLowerCase();\n\n\t\t\tif (!isXML) {\n\n\t\t\t\t// Avoid an infinite loop by temporarily removing this function from the getter\n\t\t\t\thandle = attrHandle[lowercaseName];\n\t\t\t\tattrHandle[lowercaseName] = ret;\n\t\t\t\tret = getter(elem, name, isXML) != null ?\n\t\t\t\t\tlowercaseName :\n\t\t\t\t\tnull;\n\t\t\t\tattrHandle[lowercaseName] = handle;\n\t\t\t}\n\t\t\treturn ret;\n\t\t};\n\t});\n\n\n\n\n\tvar rfocusable = /^(?:input|select|textarea|button)$/i,\n\t\trclickable = /^(?:a|area)$/i;\n\n\tjQuery.fn.extend({\n\t\tprop: function (name, value) {\n\t\t\treturn access(this, jQuery.prop, name, value, arguments.length > 1);\n\t\t},\n\n\t\tremoveProp: function (name) {\n\t\t\treturn this.each(function () {\n\t\t\t\tdelete this[jQuery.propFix[name] || name];\n\t\t\t});\n\t\t}\n\t});\n\n\tjQuery.extend({\n\t\tprop: function (elem, name, value) {\n\t\t\tvar ret, hooks,\n\t\t\t\tnType = elem.nodeType;\n\n\t\t\t// Don't get/set properties on text, comment and attribute nodes\n\t\t\tif (nType === 3 || nType === 8 || nType === 2) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (nType !== 1 || !jQuery.isXMLDoc(elem)) {\n\n\t\t\t\t// Fix name and attach hooks\n\t\t\t\tname = jQuery.propFix[name] || name;\n\t\t\t\thooks = jQuery.propHooks[name];\n\t\t\t}\n\n\t\t\tif (value !== undefined) {\n\t\t\t\tif (hooks && \"set\" in hooks &&\n\t\t\t\t\t(ret = hooks.set(elem, value, name)) !== undefined) {\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\n\t\t\t\treturn (elem[name] = value);\n\t\t\t}\n\n\t\t\tif (hooks && \"get\" in hooks && (ret = hooks.get(elem, name)) !== null) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\treturn elem[name];\n\t\t},\n\n\t\tpropHooks: {\n\t\t\ttabIndex: {\n\t\t\t\tget: function (elem) {\n\n\t\t\t\t\t// Support: IE <=9 - 11 only\n\t\t\t\t\t// elem.tabIndex doesn't always return the\n\t\t\t\t\t// correct value when it hasn't been explicitly set\n\t\t\t\t\t// Use proper attribute retrieval (trac-12072)\n\t\t\t\t\tvar tabindex = jQuery.find.attr(elem, \"tabindex\");\n\n\t\t\t\t\tif (tabindex) {\n\t\t\t\t\t\treturn parseInt(tabindex, 10);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (\n\t\t\t\t\t\trfocusable.test(elem.nodeName) ||\n\t\t\t\t\t\trclickable.test(elem.nodeName) &&\n\t\t\t\t\t\telem.href\n\t\t\t\t\t) {\n\t\t\t\t\t\treturn 0;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn -1;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tpropFix: {\n\t\t\t\"for\": \"htmlFor\",\n\t\t\t\"class\": \"className\"\n\t\t}\n\t});\n\n\t// Support: IE <=11 only\n\t// Accessing the selectedIndex property\n\t// forces the browser to respect setting selected\n\t// on the option\n\t// The getter ensures a default option is selected\n\t// when in an optgroup\n\t// eslint rule \"no-unused-expressions\" is disabled for this code\n\t// since it considers such accessions noop\n\tif (!support.optSelected) {\n\t\tjQuery.propHooks.selected = {\n\t\t\tget: function (elem) {\n\n\t\t\t\t/* eslint no-unused-expressions: \"off\" */\n\n\t\t\t\tvar parent = elem.parentNode;\n\t\t\t\tif (parent && parent.parentNode) {\n\t\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t\t}\n\t\t\t\treturn null;\n\t\t\t},\n\t\t\tset: function (elem) {\n\n\t\t\t\t/* eslint no-unused-expressions: \"off\" */\n\n\t\t\t\tvar parent = elem.parentNode;\n\t\t\t\tif (parent) {\n\t\t\t\t\tparent.selectedIndex;\n\n\t\t\t\t\tif (parent.parentNode) {\n\t\t\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n\n\tjQuery.each([\n\t\t\"tabIndex\",\n\t\t\"readOnly\",\n\t\t\"maxLength\",\n\t\t\"cellSpacing\",\n\t\t\"cellPadding\",\n\t\t\"rowSpan\",\n\t\t\"colSpan\",\n\t\t\"useMap\",\n\t\t\"frameBorder\",\n\t\t\"contentEditable\"\n\t], function () {\n\t\tjQuery.propFix[this.toLowerCase()] = this;\n\t});\n\n\n\n\n\t// Strip and collapse whitespace according to HTML spec\n\t// https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace\n\tfunction stripAndCollapse(value) {\n\t\tvar tokens = value.match(rnothtmlwhite) || [];\n\t\treturn tokens.join(\" \");\n\t}\n\n\n\tfunction getClass(elem) {\n\t\treturn elem.getAttribute && elem.getAttribute(\"class\") || \"\";\n\t}\n\n\tfunction classesToArray(value) {\n\t\tif (Array.isArray(value)) {\n\t\t\treturn value;\n\t\t}\n\t\tif (typeof value === \"string\") {\n\t\t\treturn value.match(rnothtmlwhite) || [];\n\t\t}\n\t\treturn [];\n\t}\n\n\tjQuery.fn.extend({\n\t\taddClass: function (value) {\n\t\t\tvar classNames, cur, curValue, className, i, finalValue;\n\n\t\t\tif (isFunction(value)) {\n\t\t\t\treturn this.each(function (j) {\n\t\t\t\t\tjQuery(this).addClass(value.call(this, j, getClass(this)));\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tclassNames = classesToArray(value);\n\n\t\t\tif (classNames.length) {\n\t\t\t\treturn this.each(function () {\n\t\t\t\t\tcurValue = getClass(this);\n\t\t\t\t\tcur = this.nodeType === 1 && (\" \" + stripAndCollapse(curValue) + \" \");\n\n\t\t\t\t\tif (cur) {\n\t\t\t\t\t\tfor (i = 0; i < classNames.length; i++) {\n\t\t\t\t\t\t\tclassName = classNames[i];\n\t\t\t\t\t\t\tif (cur.indexOf(\" \" + className + \" \") < 0) {\n\t\t\t\t\t\t\t\tcur += className + \" \";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\t\tfinalValue = stripAndCollapse(cur);\n\t\t\t\t\t\tif (curValue !== finalValue) {\n\t\t\t\t\t\t\tthis.setAttribute(\"class\", finalValue);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn this;\n\t\t},\n\n\t\tremoveClass: function (value) {\n\t\t\tvar classNames, cur, curValue, className, i, finalValue;\n\n\t\t\tif (isFunction(value)) {\n\t\t\t\treturn this.each(function (j) {\n\t\t\t\t\tjQuery(this).removeClass(value.call(this, j, getClass(this)));\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (!arguments.length) {\n\t\t\t\treturn this.attr(\"class\", \"\");\n\t\t\t}\n\n\t\t\tclassNames = classesToArray(value);\n\n\t\t\tif (classNames.length) {\n\t\t\t\treturn this.each(function () {\n\t\t\t\t\tcurValue = getClass(this);\n\n\t\t\t\t\t// This expression is here for better compressibility (see addClass)\n\t\t\t\t\tcur = this.nodeType === 1 && (\" \" + stripAndCollapse(curValue) + \" \");\n\n\t\t\t\t\tif (cur) {\n\t\t\t\t\t\tfor (i = 0; i < classNames.length; i++) {\n\t\t\t\t\t\t\tclassName = classNames[i];\n\n\t\t\t\t\t\t\t// Remove *all* instances\n\t\t\t\t\t\t\twhile (cur.indexOf(\" \" + className + \" \") > -1) {\n\t\t\t\t\t\t\t\tcur = cur.replace(\" \" + className + \" \", \" \");\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\t\tfinalValue = stripAndCollapse(cur);\n\t\t\t\t\t\tif (curValue !== finalValue) {\n\t\t\t\t\t\t\tthis.setAttribute(\"class\", finalValue);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn this;\n\t\t},\n\n\t\ttoggleClass: function (value, stateVal) {\n\t\t\tvar classNames, className, i, self,\n\t\t\t\ttype = typeof value,\n\t\t\t\tisValidValue = type === \"string\" || Array.isArray(value);\n\n\t\t\tif (isFunction(value)) {\n\t\t\t\treturn this.each(function (i) {\n\t\t\t\t\tjQuery(this).toggleClass(\n\t\t\t\t\t\tvalue.call(this, i, getClass(this), stateVal),\n\t\t\t\t\t\tstateVal\n\t\t\t\t\t);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (typeof stateVal === \"boolean\" && isValidValue) {\n\t\t\t\treturn stateVal ? this.addClass(value) : this.removeClass(value);\n\t\t\t}\n\n\t\t\tclassNames = classesToArray(value);\n\n\t\t\treturn this.each(function () {\n\t\t\t\tif (isValidValue) {\n\n\t\t\t\t\t// Toggle individual class names\n\t\t\t\t\tself = jQuery(this);\n\n\t\t\t\t\tfor (i = 0; i < classNames.length; i++) {\n\t\t\t\t\t\tclassName = classNames[i];\n\n\t\t\t\t\t\t// Check each className given, space separated list\n\t\t\t\t\t\tif (self.hasClass(className)) {\n\t\t\t\t\t\t\tself.removeClass(className);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tself.addClass(className);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Toggle whole class name\n\t\t\t\t} else if (value === undefined || type === \"boolean\") {\n\t\t\t\t\tclassName = getClass(this);\n\t\t\t\t\tif (className) {\n\n\t\t\t\t\t\t// Store className if set\n\t\t\t\t\t\tdataPriv.set(this, \"__className__\", className);\n\t\t\t\t\t}\n\n\t\t\t\t\t// If the element has a class name or if we're passed `false`,\n\t\t\t\t\t// then remove the whole classname (if there was one, the above saved it).\n\t\t\t\t\t// Otherwise bring back whatever was previously saved (if anything),\n\t\t\t\t\t// falling back to the empty string if nothing was stored.\n\t\t\t\t\tif (this.setAttribute) {\n\t\t\t\t\t\tthis.setAttribute(\"class\",\n\t\t\t\t\t\t\tclassName || value === false ?\n\t\t\t\t\t\t\t\t\"\" :\n\t\t\t\t\t\t\t\tdataPriv.get(this, \"__className__\") || \"\"\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\thasClass: function (selector) {\n\t\t\tvar className, elem,\n\t\t\t\ti = 0;\n\n\t\t\tclassName = \" \" + selector + \" \";\n\t\t\twhile ((elem = this[i++])) {\n\t\t\t\tif (elem.nodeType === 1 &&\n\t\t\t\t\t(\" \" + stripAndCollapse(getClass(elem)) + \" \").indexOf(className) > -1) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn false;\n\t\t}\n\t});\n\n\n\n\n\tvar rreturn = /\\r/g;\n\n\tjQuery.fn.extend({\n\t\tval: function (value) {\n\t\t\tvar hooks, ret, valueIsFunction,\n\t\t\t\telem = this[0];\n\n\t\t\tif (!arguments.length) {\n\t\t\t\tif (elem) {\n\t\t\t\t\thooks = jQuery.valHooks[elem.type] ||\n\t\t\t\t\t\tjQuery.valHooks[elem.nodeName.toLowerCase()];\n\n\t\t\t\t\tif (hooks &&\n\t\t\t\t\t\t\"get\" in hooks &&\n\t\t\t\t\t\t(ret = hooks.get(elem, \"value\")) !== undefined\n\t\t\t\t\t) {\n\t\t\t\t\t\treturn ret;\n\t\t\t\t\t}\n\n\t\t\t\t\tret = elem.value;\n\n\t\t\t\t\t// Handle most common string cases\n\t\t\t\t\tif (typeof ret === \"string\") {\n\t\t\t\t\t\treturn ret.replace(rreturn, \"\");\n\t\t\t\t\t}\n\n\t\t\t\t\t// Handle cases where value is null/undef or number\n\t\t\t\t\treturn ret == null ? \"\" : ret;\n\t\t\t\t}\n\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvalueIsFunction = isFunction(value);\n\n\t\t\treturn this.each(function (i) {\n\t\t\t\tvar val;\n\n\t\t\t\tif (this.nodeType !== 1) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (valueIsFunction) {\n\t\t\t\t\tval = value.call(this, i, jQuery(this).val());\n\t\t\t\t} else {\n\t\t\t\t\tval = value;\n\t\t\t\t}\n\n\t\t\t\t// Treat null/undefined as \"\"; convert numbers to string\n\t\t\t\tif (val == null) {\n\t\t\t\t\tval = \"\";\n\n\t\t\t\t} else if (typeof val === \"number\") {\n\t\t\t\t\tval += \"\";\n\n\t\t\t\t} else if (Array.isArray(val)) {\n\t\t\t\t\tval = jQuery.map(val, function (value) {\n\t\t\t\t\t\treturn value == null ? \"\" : value + \"\";\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\thooks = jQuery.valHooks[this.type] || jQuery.valHooks[this.nodeName.toLowerCase()];\n\n\t\t\t\t// If set returns undefined, fall back to normal setting\n\t\t\t\tif (!hooks || !(\"set\" in hooks) || hooks.set(this, val, \"value\") === undefined) {\n\t\t\t\t\tthis.value = val;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t});\n\n\tjQuery.extend({\n\t\tvalHooks: {\n\t\t\toption: {\n\t\t\t\tget: function (elem) {\n\n\t\t\t\t\tvar val = jQuery.find.attr(elem, \"value\");\n\t\t\t\t\treturn val != null ?\n\t\t\t\t\t\tval :\n\n\t\t\t\t\t\t// Support: IE <=10 - 11 only\n\t\t\t\t\t\t// option.text throws exceptions (trac-14686, trac-14858)\n\t\t\t\t\t\t// Strip and collapse whitespace\n\t\t\t\t\t\t// https://html.spec.whatwg.org/#strip-and-collapse-whitespace\n\t\t\t\t\t\tstripAndCollapse(jQuery.text(elem));\n\t\t\t\t}\n\t\t\t},\n\t\t\tselect: {\n\t\t\t\tget: function (elem) {\n\t\t\t\t\tvar value, option, i,\n\t\t\t\t\t\toptions = elem.options,\n\t\t\t\t\t\tindex = elem.selectedIndex,\n\t\t\t\t\t\tone = elem.type === \"select-one\",\n\t\t\t\t\t\tvalues = one ? null : [],\n\t\t\t\t\t\tmax = one ? index + 1 : options.length;\n\n\t\t\t\t\tif (index < 0) {\n\t\t\t\t\t\ti = max;\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\ti = one ? index : 0;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Loop through all the selected options\n\t\t\t\t\tfor (; i < max; i++) {\n\t\t\t\t\t\toption = options[i];\n\n\t\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t\t// IE8-9 doesn't update selected after form reset (trac-2551)\n\t\t\t\t\t\tif ((option.selected || i === index) &&\n\n\t\t\t\t\t\t\t// Don't return options that are disabled or in a disabled optgroup\n\t\t\t\t\t\t\t!option.disabled &&\n\t\t\t\t\t\t\t(!option.parentNode.disabled ||\n\t\t\t\t\t\t\t\t!nodeName(option.parentNode, \"optgroup\"))) {\n\n\t\t\t\t\t\t\t// Get the specific value for the option\n\t\t\t\t\t\t\tvalue = jQuery(option).val();\n\n\t\t\t\t\t\t\t// We don't need an array for one selects\n\t\t\t\t\t\t\tif (one) {\n\t\t\t\t\t\t\t\treturn value;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Multi-Selects return an array\n\t\t\t\t\t\t\tvalues.push(value);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn values;\n\t\t\t\t},\n\n\t\t\t\tset: function (elem, value) {\n\t\t\t\t\tvar optionSet, option,\n\t\t\t\t\t\toptions = elem.options,\n\t\t\t\t\t\tvalues = jQuery.makeArray(value),\n\t\t\t\t\t\ti = options.length;\n\n\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\toption = options[i];\n\n\t\t\t\t\t\t/* eslint-disable no-cond-assign */\n\n\t\t\t\t\t\tif (option.selected =\n\t\t\t\t\t\t\tjQuery.inArray(jQuery.valHooks.option.get(option), values) > -1\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\toptionSet = true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t/* eslint-enable no-cond-assign */\n\t\t\t\t\t}\n\n\t\t\t\t\t// Force browsers to behave consistently when non-matching value is set\n\t\t\t\t\tif (!optionSet) {\n\t\t\t\t\t\telem.selectedIndex = -1;\n\t\t\t\t\t}\n\t\t\t\t\treturn values;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\n\t// Radios and checkboxes getter/setter\n\tjQuery.each([\"radio\", \"checkbox\"], function () {\n\t\tjQuery.valHooks[this] = {\n\t\t\tset: function (elem, value) {\n\t\t\t\tif (Array.isArray(value)) {\n\t\t\t\t\treturn (elem.checked = jQuery.inArray(jQuery(elem).val(), value) > -1);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\tif (!support.checkOn) {\n\t\t\tjQuery.valHooks[this].get = function (elem) {\n\t\t\t\treturn elem.getAttribute(\"value\") === null ? \"on\" : elem.value;\n\t\t\t};\n\t\t}\n\t});\n\n\n\n\n\t// Return jQuery for attributes-only inclusion\n\tvar location = window.location;\n\n\tvar nonce = { guid: Date.now() };\n\n\tvar rquery = (/\\?/);\n\n\n\n\t// Cross-browser xml parsing\n\tjQuery.parseXML = function (data) {\n\t\tvar xml, parserErrorElem;\n\t\tif (!data || typeof data !== \"string\") {\n\t\t\treturn null;\n\t\t}\n\n\t\t// Support: IE 9 - 11 only\n\t\t// IE throws on parseFromString with invalid input.\n\t\ttry {\n\t\t\txml = (new window.DOMParser()).parseFromString(data, \"text/xml\");\n\t\t} catch (e) { }\n\n\t\tparserErrorElem = xml && xml.getElementsByTagName(\"parsererror\")[0];\n\t\tif (!xml || parserErrorElem) {\n\t\t\tjQuery.error(\"Invalid XML: \" + (\n\t\t\t\tparserErrorElem ?\n\t\t\t\t\tjQuery.map(parserErrorElem.childNodes, function (el) {\n\t\t\t\t\t\treturn el.textContent;\n\t\t\t\t\t}).join(\"\\n\") :\n\t\t\t\t\tdata\n\t\t\t));\n\t\t}\n\t\treturn xml;\n\t};\n\n\n\tvar rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,\n\t\tstopPropagationCallback = function (e) {\n\t\t\te.stopPropagation();\n\t\t};\n\n\tjQuery.extend(jQuery.event, {\n\n\t\ttrigger: function (event, data, elem, onlyHandlers) {\n\n\t\t\tvar i, cur, tmp, bubbleType, ontype, handle, special, lastElement,\n\t\t\t\teventPath = [elem || document],\n\t\t\t\ttype = hasOwn.call(event, \"type\") ? event.type : event,\n\t\t\t\tnamespaces = hasOwn.call(event, \"namespace\") ? event.namespace.split(\".\") : [];\n\n\t\t\tcur = lastElement = tmp = elem = elem || document;\n\n\t\t\t// Don't do events on text and comment nodes\n\t\t\tif (elem.nodeType === 3 || elem.nodeType === 8) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// focus/blur morphs to focusin/out; ensure we're not firing them right now\n\t\t\tif (rfocusMorph.test(type + jQuery.event.triggered)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (type.indexOf(\".\") > -1) {\n\n\t\t\t\t// Namespaced trigger; create a regexp to match event type in handle()\n\t\t\t\tnamespaces = type.split(\".\");\n\t\t\t\ttype = namespaces.shift();\n\t\t\t\tnamespaces.sort();\n\t\t\t}\n\t\t\tontype = type.indexOf(\":\") < 0 && \"on\" + type;\n\n\t\t\t// Caller can pass in a jQuery.Event object, Object, or just an event type string\n\t\t\tevent = event[jQuery.expando] ?\n\t\t\t\tevent :\n\t\t\t\tnew jQuery.Event(type, typeof event === \"object\" && event);\n\n\t\t\t// Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)\n\t\t\tevent.isTrigger = onlyHandlers ? 2 : 3;\n\t\t\tevent.namespace = namespaces.join(\".\");\n\t\t\tevent.rnamespace = event.namespace ?\n\t\t\t\tnew RegExp(\"(^|\\\\.)\" + namespaces.join(\"\\\\.(?:.*\\\\.|)\") + \"(\\\\.|$)\") :\n\t\t\t\tnull;\n\n\t\t\t// Clean up the event in case it is being reused\n\t\t\tevent.result = undefined;\n\t\t\tif (!event.target) {\n\t\t\t\tevent.target = elem;\n\t\t\t}\n\n\t\t\t// Clone any incoming data and prepend the event, creating the handler arg list\n\t\t\tdata = data == null ?\n\t\t\t\t[event] :\n\t\t\t\tjQuery.makeArray(data, [event]);\n\n\t\t\t// Allow special events to draw outside the lines\n\t\t\tspecial = jQuery.event.special[type] || {};\n\t\t\tif (!onlyHandlers && special.trigger && special.trigger.apply(elem, data) === false) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Determine event propagation path in advance, per W3C events spec (trac-9951)\n\t\t\t// Bubble up to document, then to window; watch for a global ownerDocument var (trac-9724)\n\t\t\tif (!onlyHandlers && !special.noBubble && !isWindow(elem)) {\n\n\t\t\t\tbubbleType = special.delegateType || type;\n\t\t\t\tif (!rfocusMorph.test(bubbleType + type)) {\n\t\t\t\t\tcur = cur.parentNode;\n\t\t\t\t}\n\t\t\t\tfor (; cur; cur = cur.parentNode) {\n\t\t\t\t\teventPath.push(cur);\n\t\t\t\t\ttmp = cur;\n\t\t\t\t}\n\n\t\t\t\t// Only add window if we got to document (e.g., not plain obj or detached DOM)\n\t\t\t\tif (tmp === (elem.ownerDocument || document)) {\n\t\t\t\t\teventPath.push(tmp.defaultView || tmp.parentWindow || window);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Fire handlers on the event path\n\t\t\ti = 0;\n\t\t\twhile ((cur = eventPath[i++]) && !event.isPropagationStopped()) {\n\t\t\t\tlastElement = cur;\n\t\t\t\tevent.type = i > 1 ?\n\t\t\t\t\tbubbleType :\n\t\t\t\t\tspecial.bindType || type;\n\n\t\t\t\t// jQuery handler\n\t\t\t\thandle = (dataPriv.get(cur, \"events\") || Object.create(null))[event.type] &&\n\t\t\t\t\tdataPriv.get(cur, \"handle\");\n\t\t\t\tif (handle) {\n\t\t\t\t\thandle.apply(cur, data);\n\t\t\t\t}\n\n\t\t\t\t// Native handler\n\t\t\t\thandle = ontype && cur[ontype];\n\t\t\t\tif (handle && handle.apply && acceptData(cur)) {\n\t\t\t\t\tevent.result = handle.apply(cur, data);\n\t\t\t\t\tif (event.result === false) {\n\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tevent.type = type;\n\n\t\t\t// If nobody prevented the default action, do it now\n\t\t\tif (!onlyHandlers && !event.isDefaultPrevented()) {\n\n\t\t\t\tif ((!special._default ||\n\t\t\t\t\tspecial._default.apply(eventPath.pop(), data) === false) &&\n\t\t\t\t\tacceptData(elem)) {\n\n\t\t\t\t\t// Call a native DOM method on the target with the same name as the event.\n\t\t\t\t\t// Don't do default actions on window, that's where global variables be (trac-6170)\n\t\t\t\t\tif (ontype && isFunction(elem[type]) && !isWindow(elem)) {\n\n\t\t\t\t\t\t// Don't re-trigger an onFOO event when we call its FOO() method\n\t\t\t\t\t\ttmp = elem[ontype];\n\n\t\t\t\t\t\tif (tmp) {\n\t\t\t\t\t\t\telem[ontype] = null;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Prevent re-triggering of the same event, since we already bubbled it above\n\t\t\t\t\t\tjQuery.event.triggered = type;\n\n\t\t\t\t\t\tif (event.isPropagationStopped()) {\n\t\t\t\t\t\t\tlastElement.addEventListener(type, stopPropagationCallback);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\telem[type]();\n\n\t\t\t\t\t\tif (event.isPropagationStopped()) {\n\t\t\t\t\t\t\tlastElement.removeEventListener(type, stopPropagationCallback);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tjQuery.event.triggered = undefined;\n\n\t\t\t\t\t\tif (tmp) {\n\t\t\t\t\t\t\telem[ontype] = tmp;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn event.result;\n\t\t},\n\n\t\t// Piggyback on a donor event to simulate a different one\n\t\t// Used only for `focus(in | out)` events\n\t\tsimulate: function (type, elem, event) {\n\t\t\tvar e = jQuery.extend(\n\t\t\t\tnew jQuery.Event(),\n\t\t\t\tevent,\n\t\t\t\t{\n\t\t\t\t\ttype: type,\n\t\t\t\t\tisSimulated: true\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tjQuery.event.trigger(e, null, elem);\n\t\t}\n\n\t});\n\n\tjQuery.fn.extend({\n\n\t\ttrigger: function (type, data) {\n\t\t\treturn this.each(function () {\n\t\t\t\tjQuery.event.trigger(type, data, this);\n\t\t\t});\n\t\t},\n\t\ttriggerHandler: function (type, data) {\n\t\t\tvar elem = this[0];\n\t\t\tif (elem) {\n\t\t\t\treturn jQuery.event.trigger(type, data, elem, true);\n\t\t\t}\n\t\t}\n\t});\n\n\n\tvar\n\t\trbracket = /\\[\\]$/,\n\t\trCRLF = /\\r?\\n/g,\n\t\trsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,\n\t\trsubmittable = /^(?:input|select|textarea|keygen)/i;\n\n\tfunction buildParams(prefix, obj, traditional, add) {\n\t\tvar name;\n\n\t\tif (Array.isArray(obj)) {\n\n\t\t\t// Serialize array item.\n\t\t\tjQuery.each(obj, function (i, v) {\n\t\t\t\tif (traditional || rbracket.test(prefix)) {\n\n\t\t\t\t\t// Treat each array item as a scalar.\n\t\t\t\t\tadd(prefix, v);\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// Item is non-scalar (array or object), encode its numeric index.\n\t\t\t\t\tbuildParams(\n\t\t\t\t\t\tprefix + \"[\" + (typeof v === \"object\" && v != null ? i : \"\") + \"]\",\n\t\t\t\t\t\tv,\n\t\t\t\t\t\ttraditional,\n\t\t\t\t\t\tadd\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t});\n\n\t\t} else if (!traditional && toType(obj) === \"object\") {\n\n\t\t\t// Serialize object item.\n\t\t\tfor (name in obj) {\n\t\t\t\tbuildParams(prefix + \"[\" + name + \"]\", obj[name], traditional, add);\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// Serialize scalar item.\n\t\t\tadd(prefix, obj);\n\t\t}\n\t}\n\n\t// Serialize an array of form elements or a set of\n\t// key/values into a query string\n\tjQuery.param = function (a, traditional) {\n\t\tvar prefix,\n\t\t\ts = [],\n\t\t\tadd = function (key, valueOrFunction) {\n\n\t\t\t\t// If value is a function, invoke it and use its return value\n\t\t\t\tvar value = isFunction(valueOrFunction) ?\n\t\t\t\t\tvalueOrFunction() :\n\t\t\t\t\tvalueOrFunction;\n\n\t\t\t\ts[s.length] = encodeURIComponent(key) + \"=\" +\n\t\t\t\t\tencodeURIComponent(value == null ? \"\" : value);\n\t\t\t};\n\n\t\tif (a == null) {\n\t\t\treturn \"\";\n\t\t}\n\n\t\t// If an array was passed in, assume that it is an array of form elements.\n\t\tif (Array.isArray(a) || (a.jquery && !jQuery.isPlainObject(a))) {\n\n\t\t\t// Serialize the form elements\n\t\t\tjQuery.each(a, function () {\n\t\t\t\tadd(this.name, this.value);\n\t\t\t});\n\n\t\t} else {\n\n\t\t\t// If traditional, encode the \"old\" way (the way 1.3.2 or older\n\t\t\t// did it), otherwise encode params recursively.\n\t\t\tfor (prefix in a) {\n\t\t\t\tbuildParams(prefix, a[prefix], traditional, add);\n\t\t\t}\n\t\t}\n\n\t\t// Return the resulting serialization\n\t\treturn s.join(\"&\");\n\t};\n\n\tjQuery.fn.extend({\n\t\tserialize: function () {\n\t\t\treturn jQuery.param(this.serializeArray());\n\t\t},\n\t\tserializeArray: function () {\n\t\t\treturn this.map(function () {\n\n\t\t\t\t// Can add propHook for \"elements\" to filter or add form elements\n\t\t\t\tvar elements = jQuery.prop(this, \"elements\");\n\t\t\t\treturn elements ? jQuery.makeArray(elements) : this;\n\t\t\t}).filter(function () {\n\t\t\t\tvar type = this.type;\n\n\t\t\t\t// Use .is( \":disabled\" ) so that fieldset[disabled] works\n\t\t\t\treturn this.name && !jQuery(this).is(\":disabled\") &&\n\t\t\t\t\trsubmittable.test(this.nodeName) && !rsubmitterTypes.test(type) &&\n\t\t\t\t\t(this.checked || !rcheckableType.test(type));\n\t\t\t}).map(function (_i, elem) {\n\t\t\t\tvar val = jQuery(this).val();\n\n\t\t\t\tif (val == null) {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\n\t\t\t\tif (Array.isArray(val)) {\n\t\t\t\t\treturn jQuery.map(val, function (val) {\n\t\t\t\t\t\treturn { name: elem.name, value: val.replace(rCRLF, \"\\r\\n\") };\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\treturn { name: elem.name, value: val.replace(rCRLF, \"\\r\\n\") };\n\t\t\t}).get();\n\t\t}\n\t});\n\n\n\tvar\n\t\tr20 = /%20/g,\n\t\trhash = /#.*$/,\n\t\trantiCache = /([?&])_=[^&]*/,\n\t\trheaders = /^(.*?):[ \\t]*([^\\r\\n]*)$/mg,\n\n\t\t// trac-7653, trac-8125, trac-8152: local protocol detection\n\t\trlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,\n\t\trnoContent = /^(?:GET|HEAD)$/,\n\t\trprotocol = /^\\/\\//,\n\n\t\t/* Prefilters\n\t\t * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)\n\t\t * 2) These are called:\n\t\t *    - BEFORE asking for a transport\n\t\t *    - AFTER param serialization (s.data is a string if s.processData is true)\n\t\t * 3) key is the dataType\n\t\t * 4) the catchall symbol \"*\" can be used\n\t\t * 5) execution will start with transport dataType and THEN continue down to \"*\" if needed\n\t\t */\n\t\tprefilters = {},\n\n\t\t/* Transports bindings\n\t\t * 1) key is the dataType\n\t\t * 2) the catchall symbol \"*\" can be used\n\t\t * 3) selection will start with transport dataType and THEN go to \"*\" if needed\n\t\t */\n\t\ttransports = {},\n\n\t\t// Avoid comment-prolog char sequence (trac-10098); must appease lint and evade compression\n\t\tallTypes = \"*/\".concat(\"*\"),\n\n\t\t// Anchor tag for parsing the document origin\n\t\toriginAnchor = document.createElement(\"a\");\n\n\toriginAnchor.href = location.href;\n\n\t// Base \"constructor\" for jQuery.ajaxPrefilter and jQuery.ajaxTransport\n\tfunction addToPrefiltersOrTransports(structure) {\n\n\t\t// dataTypeExpression is optional and defaults to \"*\"\n\t\treturn function (dataTypeExpression, func) {\n\n\t\t\tif (typeof dataTypeExpression !== \"string\") {\n\t\t\t\tfunc = dataTypeExpression;\n\t\t\t\tdataTypeExpression = \"*\";\n\t\t\t}\n\n\t\t\tvar dataType,\n\t\t\t\ti = 0,\n\t\t\t\tdataTypes = dataTypeExpression.toLowerCase().match(rnothtmlwhite) || [];\n\n\t\t\tif (isFunction(func)) {\n\n\t\t\t\t// For each dataType in the dataTypeExpression\n\t\t\t\twhile ((dataType = dataTypes[i++])) {\n\n\t\t\t\t\t// Prepend if requested\n\t\t\t\t\tif (dataType[0] === \"+\") {\n\t\t\t\t\t\tdataType = dataType.slice(1) || \"*\";\n\t\t\t\t\t\t(structure[dataType] = structure[dataType] || []).unshift(func);\n\n\t\t\t\t\t\t// Otherwise append\n\t\t\t\t\t} else {\n\t\t\t\t\t\t(structure[dataType] = structure[dataType] || []).push(func);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n\n\t// Base inspection function for prefilters and transports\n\tfunction inspectPrefiltersOrTransports(structure, options, originalOptions, jqXHR) {\n\n\t\tvar inspected = {},\n\t\t\tseekingTransport = (structure === transports);\n\n\t\tfunction inspect(dataType) {\n\t\t\tvar selected;\n\t\t\tinspected[dataType] = true;\n\t\t\tjQuery.each(structure[dataType] || [], function (_, prefilterOrFactory) {\n\t\t\t\tvar dataTypeOrTransport = prefilterOrFactory(options, originalOptions, jqXHR);\n\t\t\t\tif (typeof dataTypeOrTransport === \"string\" &&\n\t\t\t\t\t!seekingTransport && !inspected[dataTypeOrTransport]) {\n\n\t\t\t\t\toptions.dataTypes.unshift(dataTypeOrTransport);\n\t\t\t\t\tinspect(dataTypeOrTransport);\n\t\t\t\t\treturn false;\n\t\t\t\t} else if (seekingTransport) {\n\t\t\t\t\treturn !(selected = dataTypeOrTransport);\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn selected;\n\t\t}\n\n\t\treturn inspect(options.dataTypes[0]) || !inspected[\"*\"] && inspect(\"*\");\n\t}\n\n\t// A special extend for ajax options\n\t// that takes \"flat\" options (not to be deep extended)\n\t// Fixes trac-9887\n\tfunction ajaxExtend(target, src) {\n\t\tvar key, deep,\n\t\t\tflatOptions = jQuery.ajaxSettings.flatOptions || {};\n\n\t\tfor (key in src) {\n\t\t\tif (src[key] !== undefined) {\n\t\t\t\t(flatOptions[key] ? target : (deep || (deep = {})))[key] = src[key];\n\t\t\t}\n\t\t}\n\t\tif (deep) {\n\t\t\tjQuery.extend(true, target, deep);\n\t\t}\n\n\t\treturn target;\n\t}\n\n\t/* Handles responses to an ajax request:\n\t * - finds the right dataType (mediates between content-type and expected dataType)\n\t * - returns the corresponding response\n\t */\n\tfunction ajaxHandleResponses(s, jqXHR, responses) {\n\n\t\tvar ct, type, finalDataType, firstDataType,\n\t\t\tcontents = s.contents,\n\t\t\tdataTypes = s.dataTypes;\n\n\t\t// Remove auto dataType and get content-type in the process\n\t\twhile (dataTypes[0] === \"*\") {\n\t\t\tdataTypes.shift();\n\t\t\tif (ct === undefined) {\n\t\t\t\tct = s.mimeType || jqXHR.getResponseHeader(\"Content-Type\");\n\t\t\t}\n\t\t}\n\n\t\t// Check if we're dealing with a known content-type\n\t\tif (ct) {\n\t\t\tfor (type in contents) {\n\t\t\t\tif (contents[type] && contents[type].test(ct)) {\n\t\t\t\t\tdataTypes.unshift(type);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Check to see if we have a response for the expected dataType\n\t\tif (dataTypes[0] in responses) {\n\t\t\tfinalDataType = dataTypes[0];\n\t\t} else {\n\n\t\t\t// Try convertible dataTypes\n\t\t\tfor (type in responses) {\n\t\t\t\tif (!dataTypes[0] || s.converters[type + \" \" + dataTypes[0]]) {\n\t\t\t\t\tfinalDataType = type;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (!firstDataType) {\n\t\t\t\t\tfirstDataType = type;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Or just use first one\n\t\t\tfinalDataType = finalDataType || firstDataType;\n\t\t}\n\n\t\t// If we found a dataType\n\t\t// We add the dataType to the list if needed\n\t\t// and return the corresponding response\n\t\tif (finalDataType) {\n\t\t\tif (finalDataType !== dataTypes[0]) {\n\t\t\t\tdataTypes.unshift(finalDataType);\n\t\t\t}\n\t\t\treturn responses[finalDataType];\n\t\t}\n\t}\n\n\t/* Chain conversions given the request and the original response\n\t * Also sets the responseXXX fields on the jqXHR instance\n\t */\n\tfunction ajaxConvert(s, response, jqXHR, isSuccess) {\n\t\tvar conv2, current, conv, tmp, prev,\n\t\t\tconverters = {},\n\n\t\t\t// Work with a copy of dataTypes in case we need to modify it for conversion\n\t\t\tdataTypes = s.dataTypes.slice();\n\n\t\t// Create converters map with lowercased keys\n\t\tif (dataTypes[1]) {\n\t\t\tfor (conv in s.converters) {\n\t\t\t\tconverters[conv.toLowerCase()] = s.converters[conv];\n\t\t\t}\n\t\t}\n\n\t\tcurrent = dataTypes.shift();\n\n\t\t// Convert to each sequential dataType\n\t\twhile (current) {\n\n\t\t\tif (s.responseFields[current]) {\n\t\t\t\tjqXHR[s.responseFields[current]] = response;\n\t\t\t}\n\n\t\t\t// Apply the dataFilter if provided\n\t\t\tif (!prev && isSuccess && s.dataFilter) {\n\t\t\t\tresponse = s.dataFilter(response, s.dataType);\n\t\t\t}\n\n\t\t\tprev = current;\n\t\t\tcurrent = dataTypes.shift();\n\n\t\t\tif (current) {\n\n\t\t\t\t// There's only work to do if current dataType is non-auto\n\t\t\t\tif (current === \"*\") {\n\n\t\t\t\t\tcurrent = prev;\n\n\t\t\t\t\t// Convert response if prev dataType is non-auto and differs from current\n\t\t\t\t} else if (prev !== \"*\" && prev !== current) {\n\n\t\t\t\t\t// Seek a direct converter\n\t\t\t\t\tconv = converters[prev + \" \" + current] || converters[\"* \" + current];\n\n\t\t\t\t\t// If none found, seek a pair\n\t\t\t\t\tif (!conv) {\n\t\t\t\t\t\tfor (conv2 in converters) {\n\n\t\t\t\t\t\t\t// If conv2 outputs current\n\t\t\t\t\t\t\ttmp = conv2.split(\" \");\n\t\t\t\t\t\t\tif (tmp[1] === current) {\n\n\t\t\t\t\t\t\t\t// If prev can be converted to accepted input\n\t\t\t\t\t\t\t\tconv = converters[prev + \" \" + tmp[0]] ||\n\t\t\t\t\t\t\t\t\tconverters[\"* \" + tmp[0]];\n\t\t\t\t\t\t\t\tif (conv) {\n\n\t\t\t\t\t\t\t\t\t// Condense equivalence converters\n\t\t\t\t\t\t\t\t\tif (conv === true) {\n\t\t\t\t\t\t\t\t\t\tconv = converters[conv2];\n\n\t\t\t\t\t\t\t\t\t\t// Otherwise, insert the intermediate dataType\n\t\t\t\t\t\t\t\t\t} else if (converters[conv2] !== true) {\n\t\t\t\t\t\t\t\t\t\tcurrent = tmp[0];\n\t\t\t\t\t\t\t\t\t\tdataTypes.unshift(tmp[1]);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Apply converter (if not an equivalence)\n\t\t\t\t\tif (conv !== true) {\n\n\t\t\t\t\t\t// Unless errors are allowed to bubble, catch and return them\n\t\t\t\t\t\tif (conv && s.throws) {\n\t\t\t\t\t\t\tresponse = conv(response);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\tresponse = conv(response);\n\t\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\tstate: \"parsererror\",\n\t\t\t\t\t\t\t\t\terror: conv ? e : \"No conversion from \" + prev + \" to \" + current\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn { state: \"success\", data: response };\n\t}\n\n\tjQuery.extend({\n\n\t\t// Counter for holding the number of active queries\n\t\tactive: 0,\n\n\t\t// Last-Modified header cache for next request\n\t\tlastModified: {},\n\t\tetag: {},\n\n\t\tajaxSettings: {\n\t\t\turl: location.href,\n\t\t\ttype: \"GET\",\n\t\t\tisLocal: rlocalProtocol.test(location.protocol),\n\t\t\tglobal: true,\n\t\t\tprocessData: true,\n\t\t\tasync: true,\n\t\t\tcontentType: \"application/x-www-form-urlencoded; charset=UTF-8\",\n\n\t\t\t/*\n\t\t\ttimeout: 0,\n\t\t\tdata: null,\n\t\t\tdataType: null,\n\t\t\tusername: null,\n\t\t\tpassword: null,\n\t\t\tcache: null,\n\t\t\tthrows: false,\n\t\t\ttraditional: false,\n\t\t\theaders: {},\n\t\t\t*/\n\n\t\t\taccepts: {\n\t\t\t\t\"*\": allTypes,\n\t\t\t\ttext: \"text/plain\",\n\t\t\t\thtml: \"text/html\",\n\t\t\t\txml: \"application/xml, text/xml\",\n\t\t\t\tjson: \"application/json, text/javascript\"\n\t\t\t},\n\n\t\t\tcontents: {\n\t\t\t\txml: /\\bxml\\b/,\n\t\t\t\thtml: /\\bhtml/,\n\t\t\t\tjson: /\\bjson\\b/\n\t\t\t},\n\n\t\t\tresponseFields: {\n\t\t\t\txml: \"responseXML\",\n\t\t\t\ttext: \"responseText\",\n\t\t\t\tjson: \"responseJSON\"\n\t\t\t},\n\n\t\t\t// Data converters\n\t\t\t// Keys separate source (or catchall \"*\") and destination types with a single space\n\t\t\tconverters: {\n\n\t\t\t\t// Convert anything to text\n\t\t\t\t\"* text\": String,\n\n\t\t\t\t// Text to html (true = no transformation)\n\t\t\t\t\"text html\": true,\n\n\t\t\t\t// Evaluate text as a json expression\n\t\t\t\t\"text json\": JSON.parse,\n\n\t\t\t\t// Parse text as xml\n\t\t\t\t\"text xml\": jQuery.parseXML\n\t\t\t},\n\n\t\t\t// For options that shouldn't be deep extended:\n\t\t\t// you can add your own custom options here if\n\t\t\t// and when you create one that shouldn't be\n\t\t\t// deep extended (see ajaxExtend)\n\t\t\tflatOptions: {\n\t\t\t\turl: true,\n\t\t\t\tcontext: true\n\t\t\t}\n\t\t},\n\n\t\t// Creates a full fledged settings object into target\n\t\t// with both ajaxSettings and settings fields.\n\t\t// If target is omitted, writes into ajaxSettings.\n\t\tajaxSetup: function (target, settings) {\n\t\t\treturn settings ?\n\n\t\t\t\t// Building a settings object\n\t\t\t\tajaxExtend(ajaxExtend(target, jQuery.ajaxSettings), settings) :\n\n\t\t\t\t// Extending ajaxSettings\n\t\t\t\tajaxExtend(jQuery.ajaxSettings, target);\n\t\t},\n\n\t\tajaxPrefilter: addToPrefiltersOrTransports(prefilters),\n\t\tajaxTransport: addToPrefiltersOrTransports(transports),\n\n\t\t// Main method\n\t\tajax: function (url, options) {\n\n\t\t\t// If url is an object, simulate pre-1.5 signature\n\t\t\tif (typeof url === \"object\") {\n\t\t\t\toptions = url;\n\t\t\t\turl = undefined;\n\t\t\t}\n\n\t\t\t// Force options to be an object\n\t\t\toptions = options || {};\n\n\t\t\tvar transport,\n\n\t\t\t\t// URL without anti-cache param\n\t\t\t\tcacheURL,\n\n\t\t\t\t// Response headers\n\t\t\t\tresponseHeadersString,\n\t\t\t\tresponseHeaders,\n\n\t\t\t\t// timeout handle\n\t\t\t\ttimeoutTimer,\n\n\t\t\t\t// Url cleanup var\n\t\t\t\turlAnchor,\n\n\t\t\t\t// Request state (becomes false upon send and true upon completion)\n\t\t\t\tcompleted,\n\n\t\t\t\t// To know if global events are to be dispatched\n\t\t\t\tfireGlobals,\n\n\t\t\t\t// Loop variable\n\t\t\t\ti,\n\n\t\t\t\t// uncached part of the url\n\t\t\t\tuncached,\n\n\t\t\t\t// Create the final options object\n\t\t\t\ts = jQuery.ajaxSetup({}, options),\n\n\t\t\t\t// Callbacks context\n\t\t\t\tcallbackContext = s.context || s,\n\n\t\t\t\t// Context for global events is callbackContext if it is a DOM node or jQuery collection\n\t\t\t\tglobalEventContext = s.context &&\n\t\t\t\t\t(callbackContext.nodeType || callbackContext.jquery) ?\n\t\t\t\t\tjQuery(callbackContext) :\n\t\t\t\t\tjQuery.event,\n\n\t\t\t\t// Deferreds\n\t\t\t\tdeferred = jQuery.Deferred(),\n\t\t\t\tcompleteDeferred = jQuery.Callbacks(\"once memory\"),\n\n\t\t\t\t// Status-dependent callbacks\n\t\t\t\tstatusCode = s.statusCode || {},\n\n\t\t\t\t// Headers (they are sent all at once)\n\t\t\t\trequestHeaders = {},\n\t\t\t\trequestHeadersNames = {},\n\n\t\t\t\t// Default abort message\n\t\t\t\tstrAbort = \"canceled\",\n\n\t\t\t\t// Fake xhr\n\t\t\t\tjqXHR = {\n\t\t\t\t\treadyState: 0,\n\n\t\t\t\t\t// Builds headers hashtable if needed\n\t\t\t\t\tgetResponseHeader: function (key) {\n\t\t\t\t\t\tvar match;\n\t\t\t\t\t\tif (completed) {\n\t\t\t\t\t\t\tif (!responseHeaders) {\n\t\t\t\t\t\t\t\tresponseHeaders = {};\n\t\t\t\t\t\t\t\twhile ((match = rheaders.exec(responseHeadersString))) {\n\t\t\t\t\t\t\t\t\tresponseHeaders[match[1].toLowerCase() + \" \"] =\n\t\t\t\t\t\t\t\t\t\t(responseHeaders[match[1].toLowerCase() + \" \"] || [])\n\t\t\t\t\t\t\t\t\t\t\t.concat(match[2]);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tmatch = responseHeaders[key.toLowerCase() + \" \"];\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn match == null ? null : match.join(\", \");\n\t\t\t\t\t},\n\n\t\t\t\t\t// Raw string\n\t\t\t\t\tgetAllResponseHeaders: function () {\n\t\t\t\t\t\treturn completed ? responseHeadersString : null;\n\t\t\t\t\t},\n\n\t\t\t\t\t// Caches the header\n\t\t\t\t\tsetRequestHeader: function (name, value) {\n\t\t\t\t\t\tif (completed == null) {\n\t\t\t\t\t\t\tname = requestHeadersNames[name.toLowerCase()] =\n\t\t\t\t\t\t\t\trequestHeadersNames[name.toLowerCase()] || name;\n\t\t\t\t\t\t\trequestHeaders[name] = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn this;\n\t\t\t\t\t},\n\n\t\t\t\t\t// Overrides response content-type header\n\t\t\t\t\toverrideMimeType: function (type) {\n\t\t\t\t\t\tif (completed == null) {\n\t\t\t\t\t\t\ts.mimeType = type;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn this;\n\t\t\t\t\t},\n\n\t\t\t\t\t// Status-dependent callbacks\n\t\t\t\t\tstatusCode: function (map) {\n\t\t\t\t\t\tvar code;\n\t\t\t\t\t\tif (map) {\n\t\t\t\t\t\t\tif (completed) {\n\n\t\t\t\t\t\t\t\t// Execute the appropriate callbacks\n\t\t\t\t\t\t\t\tjqXHR.always(map[jqXHR.status]);\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t// Lazy-add the new callbacks in a way that preserves old ones\n\t\t\t\t\t\t\t\tfor (code in map) {\n\t\t\t\t\t\t\t\t\tstatusCode[code] = [statusCode[code], map[code]];\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn this;\n\t\t\t\t\t},\n\n\t\t\t\t\t// Cancel the request\n\t\t\t\t\tabort: function (statusText) {\n\t\t\t\t\t\tvar finalText = statusText || strAbort;\n\t\t\t\t\t\tif (transport) {\n\t\t\t\t\t\t\ttransport.abort(finalText);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdone(0, finalText);\n\t\t\t\t\t\treturn this;\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t// Attach deferreds\n\t\t\tdeferred.promise(jqXHR);\n\n\t\t\t// Add protocol if not provided (prefilters might expect it)\n\t\t\t// Handle falsy url in the settings object (trac-10093: consistency with old signature)\n\t\t\t// We also use the url parameter if available\n\t\t\ts.url = ((url || s.url || location.href) + \"\")\n\t\t\t\t.replace(rprotocol, location.protocol + \"//\");\n\n\t\t\t// Alias method option to type as per ticket trac-12004\n\t\t\ts.type = options.method || options.type || s.method || s.type;\n\n\t\t\t// Extract dataTypes list\n\t\t\ts.dataTypes = (s.dataType || \"*\").toLowerCase().match(rnothtmlwhite) || [\"\"];\n\n\t\t\t// A cross-domain request is in order when the origin doesn't match the current origin.\n\t\t\tif (s.crossDomain == null) {\n\t\t\t\turlAnchor = document.createElement(\"a\");\n\n\t\t\t\t// Support: IE <=8 - 11, Edge 12 - 15\n\t\t\t\t// IE throws exception on accessing the href property if url is malformed,\n\t\t\t\t// e.g. http://example.com:80x/\n\t\t\t\ttry {\n\t\t\t\t\turlAnchor.href = s.url;\n\n\t\t\t\t\t// Support: IE <=8 - 11 only\n\t\t\t\t\t// Anchor's host property isn't correctly set when s.url is relative\n\t\t\t\t\turlAnchor.href = urlAnchor.href;\n\t\t\t\t\ts.crossDomain = originAnchor.protocol + \"//\" + originAnchor.host !==\n\t\t\t\t\t\turlAnchor.protocol + \"//\" + urlAnchor.host;\n\t\t\t\t} catch (e) {\n\n\t\t\t\t\t// If there is an error parsing the URL, assume it is crossDomain,\n\t\t\t\t\t// it can be rejected by the transport if it is invalid\n\t\t\t\t\ts.crossDomain = true;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Convert data if not already a string\n\t\t\tif (s.data && s.processData && typeof s.data !== \"string\") {\n\t\t\t\ts.data = jQuery.param(s.data, s.traditional);\n\t\t\t}\n\n\t\t\t// Apply prefilters\n\t\t\tinspectPrefiltersOrTransports(prefilters, s, options, jqXHR);\n\n\t\t\t// If request was aborted inside a prefilter, stop there\n\t\t\tif (completed) {\n\t\t\t\treturn jqXHR;\n\t\t\t}\n\n\t\t\t// We can fire global events as of now if asked to\n\t\t\t// Don't fire events if jQuery.event is undefined in an AMD-usage scenario (trac-15118)\n\t\t\tfireGlobals = jQuery.event && s.global;\n\n\t\t\t// Watch for a new set of requests\n\t\t\tif (fireGlobals && jQuery.active++ === 0) {\n\t\t\t\tjQuery.event.trigger(\"ajaxStart\");\n\t\t\t}\n\n\t\t\t// Uppercase the type\n\t\t\ts.type = s.type.toUpperCase();\n\n\t\t\t// Determine if request has content\n\t\t\ts.hasContent = !rnoContent.test(s.type);\n\n\t\t\t// Save the URL in case we're toying with the If-Modified-Since\n\t\t\t// and/or If-None-Match header later on\n\t\t\t// Remove hash to simplify url manipulation\n\t\t\tcacheURL = s.url.replace(rhash, \"\");\n\n\t\t\t// More options handling for requests with no content\n\t\t\tif (!s.hasContent) {\n\n\t\t\t\t// Remember the hash so we can put it back\n\t\t\t\tuncached = s.url.slice(cacheURL.length);\n\n\t\t\t\t// If data is available and should be processed, append data to url\n\t\t\t\tif (s.data && (s.processData || typeof s.data === \"string\")) {\n\t\t\t\t\tcacheURL += (rquery.test(cacheURL) ? \"&\" : \"?\") + s.data;\n\n\t\t\t\t\t// trac-9682: remove data so that it's not used in an eventual retry\n\t\t\t\t\tdelete s.data;\n\t\t\t\t}\n\n\t\t\t\t// Add or update anti-cache param if needed\n\t\t\t\tif (s.cache === false) {\n\t\t\t\t\tcacheURL = cacheURL.replace(rantiCache, \"$1\");\n\t\t\t\t\tuncached = (rquery.test(cacheURL) ? \"&\" : \"?\") + \"_=\" + (nonce.guid++) +\n\t\t\t\t\t\tuncached;\n\t\t\t\t}\n\n\t\t\t\t// Put hash and anti-cache on the URL that will be requested (gh-1732)\n\t\t\t\ts.url = cacheURL + uncached;\n\n\t\t\t\t// Change '%20' to '+' if this is encoded form body content (gh-2658)\n\t\t\t} else if (s.data && s.processData &&\n\t\t\t\t(s.contentType || \"\").indexOf(\"application/x-www-form-urlencoded\") === 0) {\n\t\t\t\ts.data = s.data.replace(r20, \"+\");\n\t\t\t}\n\n\t\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\t\tif (s.ifModified) {\n\t\t\t\tif (jQuery.lastModified[cacheURL]) {\n\t\t\t\t\tjqXHR.setRequestHeader(\"If-Modified-Since\", jQuery.lastModified[cacheURL]);\n\t\t\t\t}\n\t\t\t\tif (jQuery.etag[cacheURL]) {\n\t\t\t\t\tjqXHR.setRequestHeader(\"If-None-Match\", jQuery.etag[cacheURL]);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Set the correct header, if data is being sent\n\t\t\tif (s.data && s.hasContent && s.contentType !== false || options.contentType) {\n\t\t\t\tjqXHR.setRequestHeader(\"Content-Type\", s.contentType);\n\t\t\t}\n\n\t\t\t// Set the Accepts header for the server, depending on the dataType\n\t\t\tjqXHR.setRequestHeader(\n\t\t\t\t\"Accept\",\n\t\t\t\ts.dataTypes[0] && s.accepts[s.dataTypes[0]] ?\n\t\t\t\t\ts.accepts[s.dataTypes[0]] +\n\t\t\t\t\t(s.dataTypes[0] !== \"*\" ? \", \" + allTypes + \"; q=0.01\" : \"\") :\n\t\t\t\t\ts.accepts[\"*\"]\n\t\t\t);\n\n\t\t\t// Check for headers option\n\t\t\tfor (i in s.headers) {\n\t\t\t\tjqXHR.setRequestHeader(i, s.headers[i]);\n\t\t\t}\n\n\t\t\t// Allow custom headers/mimetypes and early abort\n\t\t\tif (s.beforeSend &&\n\t\t\t\t(s.beforeSend.call(callbackContext, jqXHR, s) === false || completed)) {\n\n\t\t\t\t// Abort if not done already and return\n\t\t\t\treturn jqXHR.abort();\n\t\t\t}\n\n\t\t\t// Aborting is no longer a cancellation\n\t\t\tstrAbort = \"abort\";\n\n\t\t\t// Install callbacks on deferreds\n\t\t\tcompleteDeferred.add(s.complete);\n\t\t\tjqXHR.done(s.success);\n\t\t\tjqXHR.fail(s.error);\n\n\t\t\t// Get transport\n\t\t\ttransport = inspectPrefiltersOrTransports(transports, s, options, jqXHR);\n\n\t\t\t// If no transport, we auto-abort\n\t\t\tif (!transport) {\n\t\t\t\tdone(-1, \"No Transport\");\n\t\t\t} else {\n\t\t\t\tjqXHR.readyState = 1;\n\n\t\t\t\t// Send global event\n\t\t\t\tif (fireGlobals) {\n\t\t\t\t\tglobalEventContext.trigger(\"ajaxSend\", [jqXHR, s]);\n\t\t\t\t}\n\n\t\t\t\t// If request was aborted inside ajaxSend, stop there\n\t\t\t\tif (completed) {\n\t\t\t\t\treturn jqXHR;\n\t\t\t\t}\n\n\t\t\t\t// Timeout\n\t\t\t\tif (s.async && s.timeout > 0) {\n\t\t\t\t\ttimeoutTimer = window.setTimeout(function () {\n\t\t\t\t\t\tjqXHR.abort(\"timeout\");\n\t\t\t\t\t}, s.timeout);\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tcompleted = false;\n\t\t\t\t\ttransport.send(requestHeaders, done);\n\t\t\t\t} catch (e) {\n\n\t\t\t\t\t// Rethrow post-completion exceptions\n\t\t\t\t\tif (completed) {\n\t\t\t\t\t\tthrow e;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Propagate others as results\n\t\t\t\t\tdone(-1, e);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Callback for when everything is done\n\t\t\tfunction done(status, nativeStatusText, responses, headers) {\n\t\t\t\tvar isSuccess, success, error, response, modified,\n\t\t\t\t\tstatusText = nativeStatusText;\n\n\t\t\t\t// Ignore repeat invocations\n\t\t\t\tif (completed) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tcompleted = true;\n\n\t\t\t\t// Clear timeout if it exists\n\t\t\t\tif (timeoutTimer) {\n\t\t\t\t\twindow.clearTimeout(timeoutTimer);\n\t\t\t\t}\n\n\t\t\t\t// Dereference transport for early garbage collection\n\t\t\t\t// (no matter how long the jqXHR object will be used)\n\t\t\t\ttransport = undefined;\n\n\t\t\t\t// Cache response headers\n\t\t\t\tresponseHeadersString = headers || \"\";\n\n\t\t\t\t// Set readyState\n\t\t\t\tjqXHR.readyState = status > 0 ? 4 : 0;\n\n\t\t\t\t// Determine if successful\n\t\t\t\tisSuccess = status >= 200 && status < 300 || status === 304;\n\n\t\t\t\t// Get response data\n\t\t\t\tif (responses) {\n\t\t\t\t\tresponse = ajaxHandleResponses(s, jqXHR, responses);\n\t\t\t\t}\n\n\t\t\t\t// Use a noop converter for missing script but not if jsonp\n\t\t\t\tif (!isSuccess &&\n\t\t\t\t\tjQuery.inArray(\"script\", s.dataTypes) > -1 &&\n\t\t\t\t\tjQuery.inArray(\"json\", s.dataTypes) < 0) {\n\t\t\t\t\ts.converters[\"text script\"] = function () { };\n\t\t\t\t}\n\n\t\t\t\t// Convert no matter what (that way responseXXX fields are always set)\n\t\t\t\tresponse = ajaxConvert(s, response, jqXHR, isSuccess);\n\n\t\t\t\t// If successful, handle type chaining\n\t\t\t\tif (isSuccess) {\n\n\t\t\t\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\t\t\t\tif (s.ifModified) {\n\t\t\t\t\t\tmodified = jqXHR.getResponseHeader(\"Last-Modified\");\n\t\t\t\t\t\tif (modified) {\n\t\t\t\t\t\t\tjQuery.lastModified[cacheURL] = modified;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmodified = jqXHR.getResponseHeader(\"etag\");\n\t\t\t\t\t\tif (modified) {\n\t\t\t\t\t\t\tjQuery.etag[cacheURL] = modified;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// if no content\n\t\t\t\t\tif (status === 204 || s.type === \"HEAD\") {\n\t\t\t\t\t\tstatusText = \"nocontent\";\n\n\t\t\t\t\t\t// if not modified\n\t\t\t\t\t} else if (status === 304) {\n\t\t\t\t\t\tstatusText = \"notmodified\";\n\n\t\t\t\t\t\t// If we have data, let's convert it\n\t\t\t\t\t} else {\n\t\t\t\t\t\tstatusText = response.state;\n\t\t\t\t\t\tsuccess = response.data;\n\t\t\t\t\t\terror = response.error;\n\t\t\t\t\t\tisSuccess = !error;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\n\t\t\t\t\t// Extract error from statusText and normalize for non-aborts\n\t\t\t\t\terror = statusText;\n\t\t\t\t\tif (status || !statusText) {\n\t\t\t\t\t\tstatusText = \"error\";\n\t\t\t\t\t\tif (status < 0) {\n\t\t\t\t\t\t\tstatus = 0;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Set data for the fake xhr object\n\t\t\t\tjqXHR.status = status;\n\t\t\t\tjqXHR.statusText = (nativeStatusText || statusText) + \"\";\n\n\t\t\t\t// Success/Error\n\t\t\t\tif (isSuccess) {\n\t\t\t\t\tdeferred.resolveWith(callbackContext, [success, statusText, jqXHR]);\n\t\t\t\t} else {\n\t\t\t\t\tdeferred.rejectWith(callbackContext, [jqXHR, statusText, error]);\n\t\t\t\t}\n\n\t\t\t\t// Status-dependent callbacks\n\t\t\t\tjqXHR.statusCode(statusCode);\n\t\t\t\tstatusCode = undefined;\n\n\t\t\t\tif (fireGlobals) {\n\t\t\t\t\tglobalEventContext.trigger(isSuccess ? \"ajaxSuccess\" : \"ajaxError\",\n\t\t\t\t\t\t[jqXHR, s, isSuccess ? success : error]);\n\t\t\t\t}\n\n\t\t\t\t// Complete\n\t\t\t\tcompleteDeferred.fireWith(callbackContext, [jqXHR, statusText]);\n\n\t\t\t\tif (fireGlobals) {\n\t\t\t\t\tglobalEventContext.trigger(\"ajaxComplete\", [jqXHR, s]);\n\n\t\t\t\t\t// Handle the global AJAX counter\n\t\t\t\t\tif (!(--jQuery.active)) {\n\t\t\t\t\t\tjQuery.event.trigger(\"ajaxStop\");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn jqXHR;\n\t\t},\n\n\t\tgetJSON: function (url, data, callback) {\n\t\t\treturn jQuery.get(url, data, callback, \"json\");\n\t\t},\n\n\t\tgetScript: function (url, callback) {\n\t\t\treturn jQuery.get(url, undefined, callback, \"script\");\n\t\t}\n\t});\n\n\tjQuery.each([\"get\", \"post\"], function (_i, method) {\n\t\tjQuery[method] = function (url, data, callback, type) {\n\n\t\t\t// Shift arguments if data argument was omitted\n\t\t\tif (isFunction(data)) {\n\t\t\t\ttype = type || callback;\n\t\t\t\tcallback = data;\n\t\t\t\tdata = undefined;\n\t\t\t}\n\n\t\t\t// The url can be an options object (which then must have .url)\n\t\t\treturn jQuery.ajax(jQuery.extend({\n\t\t\t\turl: url,\n\t\t\t\ttype: method,\n\t\t\t\tdataType: type,\n\t\t\t\tdata: data,\n\t\t\t\tsuccess: callback\n\t\t\t}, jQuery.isPlainObject(url) && url));\n\t\t};\n\t});\n\n\tjQuery.ajaxPrefilter(function (s) {\n\t\tvar i;\n\t\tfor (i in s.headers) {\n\t\t\tif (i.toLowerCase() === \"content-type\") {\n\t\t\t\ts.contentType = s.headers[i] || \"\";\n\t\t\t}\n\t\t}\n\t});\n\n\n\tjQuery._evalUrl = function (url, options, doc) {\n\t\treturn jQuery.ajax({\n\t\t\turl: url,\n\n\t\t\t// Make this explicit, since user can override this through ajaxSetup (trac-11264)\n\t\t\ttype: \"GET\",\n\t\t\tdataType: \"script\",\n\t\t\tcache: true,\n\t\t\tasync: false,\n\t\t\tglobal: false,\n\n\t\t\t// Only evaluate the response if it is successful (gh-4126)\n\t\t\t// dataFilter is not invoked for failure responses, so using it instead\n\t\t\t// of the default converter is kludgy but it works.\n\t\t\tconverters: {\n\t\t\t\t\"text script\": function () { }\n\t\t\t},\n\t\t\tdataFilter: function (response) {\n\t\t\t\tjQuery.globalEval(response, options, doc);\n\t\t\t}\n\t\t});\n\t};\n\n\n\tjQuery.fn.extend({\n\t\twrapAll: function (html) {\n\t\t\tvar wrap;\n\n\t\t\tif (this[0]) {\n\t\t\t\tif (isFunction(html)) {\n\t\t\t\t\thtml = html.call(this[0]);\n\t\t\t\t}\n\n\t\t\t\t// The elements to wrap the target around\n\t\t\t\twrap = jQuery(html, this[0].ownerDocument).eq(0).clone(true);\n\n\t\t\t\tif (this[0].parentNode) {\n\t\t\t\t\twrap.insertBefore(this[0]);\n\t\t\t\t}\n\n\t\t\t\twrap.map(function () {\n\t\t\t\t\tvar elem = this;\n\n\t\t\t\t\twhile (elem.firstElementChild) {\n\t\t\t\t\t\telem = elem.firstElementChild;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn elem;\n\t\t\t\t}).append(this);\n\t\t\t}\n\n\t\t\treturn this;\n\t\t},\n\n\t\twrapInner: function (html) {\n\t\t\tif (isFunction(html)) {\n\t\t\t\treturn this.each(function (i) {\n\t\t\t\t\tjQuery(this).wrapInner(html.call(this, i));\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn this.each(function () {\n\t\t\t\tvar self = jQuery(this),\n\t\t\t\t\tcontents = self.contents();\n\n\t\t\t\tif (contents.length) {\n\t\t\t\t\tcontents.wrapAll(html);\n\n\t\t\t\t} else {\n\t\t\t\t\tself.append(html);\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\twrap: function (html) {\n\t\t\tvar htmlIsFunction = isFunction(html);\n\n\t\t\treturn this.each(function (i) {\n\t\t\t\tjQuery(this).wrapAll(htmlIsFunction ? html.call(this, i) : html);\n\t\t\t});\n\t\t},\n\n\t\tunwrap: function (selector) {\n\t\t\tthis.parent(selector).not(\"body\").each(function () {\n\t\t\t\tjQuery(this).replaceWith(this.childNodes);\n\t\t\t});\n\t\t\treturn this;\n\t\t}\n\t});\n\n\n\tjQuery.expr.pseudos.hidden = function (elem) {\n\t\treturn !jQuery.expr.pseudos.visible(elem);\n\t};\n\tjQuery.expr.pseudos.visible = function (elem) {\n\t\treturn !!(elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length);\n\t};\n\n\n\n\n\tjQuery.ajaxSettings.xhr = function () {\n\t\ttry {\n\t\t\treturn new window.XMLHttpRequest();\n\t\t} catch (e) { }\n\t};\n\n\tvar xhrSuccessStatus = {\n\n\t\t// File protocol always yields status code 0, assume 200\n\t\t0: 200,\n\n\t\t// Support: IE <=9 only\n\t\t// trac-1450: sometimes IE returns 1223 when it should be 204\n\t\t1223: 204\n\t},\n\t\txhrSupported = jQuery.ajaxSettings.xhr();\n\n\tsupport.cors = !!xhrSupported && (\"withCredentials\" in xhrSupported);\n\tsupport.ajax = xhrSupported = !!xhrSupported;\n\n\tjQuery.ajaxTransport(function (options) {\n\t\tvar callback, errorCallback;\n\n\t\t// Cross domain only allowed if supported through XMLHttpRequest\n\t\tif (support.cors || xhrSupported && !options.crossDomain) {\n\t\t\treturn {\n\t\t\t\tsend: function (headers, complete) {\n\t\t\t\t\tvar i,\n\t\t\t\t\t\txhr = options.xhr();\n\n\t\t\t\t\txhr.open(\n\t\t\t\t\t\toptions.type,\n\t\t\t\t\t\toptions.url,\n\t\t\t\t\t\toptions.async,\n\t\t\t\t\t\toptions.username,\n\t\t\t\t\t\toptions.password\n\t\t\t\t\t);\n\n\t\t\t\t\t// Apply custom fields if provided\n\t\t\t\t\tif (options.xhrFields) {\n\t\t\t\t\t\tfor (i in options.xhrFields) {\n\t\t\t\t\t\t\txhr[i] = options.xhrFields[i];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Override mime type if needed\n\t\t\t\t\tif (options.mimeType && xhr.overrideMimeType) {\n\t\t\t\t\t\txhr.overrideMimeType(options.mimeType);\n\t\t\t\t\t}\n\n\t\t\t\t\t// X-Requested-With header\n\t\t\t\t\t// For cross-domain requests, seeing as conditions for a preflight are\n\t\t\t\t\t// akin to a jigsaw puzzle, we simply never set it to be sure.\n\t\t\t\t\t// (it can always be set on a per-request basis or even using ajaxSetup)\n\t\t\t\t\t// For same-domain requests, won't change header if already provided.\n\t\t\t\t\tif (!options.crossDomain && !headers[\"X-Requested-With\"]) {\n\t\t\t\t\t\theaders[\"X-Requested-With\"] = \"XMLHttpRequest\";\n\t\t\t\t\t}\n\n\t\t\t\t\t// Set headers\n\t\t\t\t\tfor (i in headers) {\n\t\t\t\t\t\txhr.setRequestHeader(i, headers[i]);\n\t\t\t\t\t}\n\n\t\t\t\t\t// Callback\n\t\t\t\t\tcallback = function (type) {\n\t\t\t\t\t\treturn function () {\n\t\t\t\t\t\t\tif (callback) {\n\t\t\t\t\t\t\t\tcallback = errorCallback = xhr.onload =\n\t\t\t\t\t\t\t\t\txhr.onerror = xhr.onabort = xhr.ontimeout =\n\t\t\t\t\t\t\t\t\txhr.onreadystatechange = null;\n\n\t\t\t\t\t\t\t\tif (type === \"abort\") {\n\t\t\t\t\t\t\t\t\txhr.abort();\n\t\t\t\t\t\t\t\t} else if (type === \"error\") {\n\n\t\t\t\t\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t\t\t\t\t// On a manual native abort, IE9 throws\n\t\t\t\t\t\t\t\t\t// errors on any property access that is not readyState\n\t\t\t\t\t\t\t\t\tif (typeof xhr.status !== \"number\") {\n\t\t\t\t\t\t\t\t\t\tcomplete(0, \"error\");\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tcomplete(\n\n\t\t\t\t\t\t\t\t\t\t\t// File: protocol always yields status 0; see trac-8605, trac-14207\n\t\t\t\t\t\t\t\t\t\t\txhr.status,\n\t\t\t\t\t\t\t\t\t\t\txhr.statusText\n\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tcomplete(\n\t\t\t\t\t\t\t\t\t\txhrSuccessStatus[xhr.status] || xhr.status,\n\t\t\t\t\t\t\t\t\t\txhr.statusText,\n\n\t\t\t\t\t\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t\t\t\t\t\t// IE9 has no XHR2 but throws on binary (trac-11426)\n\t\t\t\t\t\t\t\t\t\t// For XHR2 non-text, let the caller handle it (gh-2498)\n\t\t\t\t\t\t\t\t\t\t(xhr.responseType || \"text\") !== \"text\" ||\n\t\t\t\t\t\t\t\t\t\t\ttypeof xhr.responseText !== \"string\" ?\n\t\t\t\t\t\t\t\t\t\t\t{ binary: xhr.response } :\n\t\t\t\t\t\t\t\t\t\t\t{ text: xhr.responseText },\n\t\t\t\t\t\t\t\t\t\txhr.getAllResponseHeaders()\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\t\t\t\t\t};\n\n\t\t\t\t\t// Listen to events\n\t\t\t\t\txhr.onload = callback();\n\t\t\t\t\terrorCallback = xhr.onerror = xhr.ontimeout = callback(\"error\");\n\n\t\t\t\t\t// Support: IE 9 only\n\t\t\t\t\t// Use onreadystatechange to replace onabort\n\t\t\t\t\t// to handle uncaught aborts\n\t\t\t\t\tif (xhr.onabort !== undefined) {\n\t\t\t\t\t\txhr.onabort = errorCallback;\n\t\t\t\t\t} else {\n\t\t\t\t\t\txhr.onreadystatechange = function () {\n\n\t\t\t\t\t\t\t// Check readyState before timeout as it changes\n\t\t\t\t\t\t\tif (xhr.readyState === 4) {\n\n\t\t\t\t\t\t\t\t// Allow onerror to be called first,\n\t\t\t\t\t\t\t\t// but that will not handle a native abort\n\t\t\t\t\t\t\t\t// Also, save errorCallback to a variable\n\t\t\t\t\t\t\t\t// as xhr.onerror cannot be accessed\n\t\t\t\t\t\t\t\twindow.setTimeout(function () {\n\t\t\t\t\t\t\t\t\tif (callback) {\n\t\t\t\t\t\t\t\t\t\terrorCallback();\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\t// Create the abort callback\n\t\t\t\t\tcallback = callback(\"abort\");\n\n\t\t\t\t\ttry {\n\n\t\t\t\t\t\t// Do send the request (this may raise an exception)\n\t\t\t\t\t\txhr.send(options.hasContent && options.data || null);\n\t\t\t\t\t} catch (e) {\n\n\t\t\t\t\t\t// trac-14683: Only rethrow if this hasn't been notified as an error yet\n\t\t\t\t\t\tif (callback) {\n\t\t\t\t\t\t\tthrow e;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\t\tabort: function () {\n\t\t\t\t\tif (callback) {\n\t\t\t\t\t\tcallback();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t});\n\n\n\n\n\t// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432)\n\tjQuery.ajaxPrefilter(function (s) {\n\t\tif (s.crossDomain) {\n\t\t\ts.contents.script = false;\n\t\t}\n\t});\n\n\t// Install script dataType\n\tjQuery.ajaxSetup({\n\t\taccepts: {\n\t\t\tscript: \"text/javascript, application/javascript, \" +\n\t\t\t\t\"application/ecmascript, application/x-ecmascript\"\n\t\t},\n\t\tcontents: {\n\t\t\tscript: /\\b(?:java|ecma)script\\b/\n\t\t},\n\t\tconverters: {\n\t\t\t\"text script\": function (text) {\n\t\t\t\tjQuery.globalEval(text);\n\t\t\t\treturn text;\n\t\t\t}\n\t\t}\n\t});\n\n\t// Handle cache's special case and crossDomain\n\tjQuery.ajaxPrefilter(\"script\", function (s) {\n\t\tif (s.cache === undefined) {\n\t\t\ts.cache = false;\n\t\t}\n\t\tif (s.crossDomain) {\n\t\t\ts.type = \"GET\";\n\t\t}\n\t});\n\n\t// Bind script tag hack transport\n\tjQuery.ajaxTransport(\"script\", function (s) {\n\n\t\t// This transport only deals with cross domain or forced-by-attrs requests\n\t\tif (s.crossDomain || s.scriptAttrs) {\n\t\t\tvar script, callback;\n\t\t\treturn {\n\t\t\t\tsend: function (_, complete) {\n\t\t\t\t\tscript = jQuery(\"<script>\")\n\t\t\t\t\t\t.attr(s.scriptAttrs || {})\n\t\t\t\t\t\t.prop({ charset: s.scriptCharset, src: s.url })\n\t\t\t\t\t\t.on(\"load error\", callback = function (evt) {\n\t\t\t\t\t\t\tscript.remove();\n\t\t\t\t\t\t\tcallback = null;\n\t\t\t\t\t\t\tif (evt) {\n\t\t\t\t\t\t\t\tcomplete(evt.type === \"error\" ? 404 : 200, evt.type);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\n\t\t\t\t\t// Use native DOM manipulation to avoid our domManip AJAX trickery\n\t\t\t\t\tdocument.head.appendChild(script[0]);\n\t\t\t\t},\n\t\t\t\tabort: function () {\n\t\t\t\t\tif (callback) {\n\t\t\t\t\t\tcallback();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t});\n\n\n\n\n\tvar oldCallbacks = [],\n\t\trjsonp = /(=)\\?(?=&|$)|\\?\\?/;\n\n\t// Default jsonp settings\n\tjQuery.ajaxSetup({\n\t\tjsonp: \"callback\",\n\t\tjsonpCallback: function () {\n\t\t\tvar callback = oldCallbacks.pop() || (jQuery.expando + \"_\" + (nonce.guid++));\n\t\t\tthis[callback] = true;\n\t\t\treturn callback;\n\t\t}\n\t});\n\n\t// Detect, normalize options and install callbacks for jsonp requests\n\tjQuery.ajaxPrefilter(\"json jsonp\", function (s, originalSettings, jqXHR) {\n\n\t\tvar callbackName, overwritten, responseContainer,\n\t\t\tjsonProp = s.jsonp !== false && (rjsonp.test(s.url) ?\n\t\t\t\t\"url\" :\n\t\t\t\ttypeof s.data === \"string\" &&\n\t\t\t\t(s.contentType || \"\")\n\t\t\t\t\t.indexOf(\"application/x-www-form-urlencoded\") === 0 &&\n\t\t\t\trjsonp.test(s.data) && \"data\"\n\t\t\t);\n\n\t\t// Handle iff the expected data type is \"jsonp\" or we have a parameter to set\n\t\tif (jsonProp || s.dataTypes[0] === \"jsonp\") {\n\n\t\t\t// Get callback name, remembering preexisting value associated with it\n\t\t\tcallbackName = s.jsonpCallback = isFunction(s.jsonpCallback) ?\n\t\t\t\ts.jsonpCallback() :\n\t\t\t\ts.jsonpCallback;\n\n\t\t\t// Insert callback into url or form data\n\t\t\tif (jsonProp) {\n\t\t\t\ts[jsonProp] = s[jsonProp].replace(rjsonp, \"$1\" + callbackName);\n\t\t\t} else if (s.jsonp !== false) {\n\t\t\t\ts.url += (rquery.test(s.url) ? \"&\" : \"?\") + s.jsonp + \"=\" + callbackName;\n\t\t\t}\n\n\t\t\t// Use data converter to retrieve json after script execution\n\t\t\ts.converters[\"script json\"] = function () {\n\t\t\t\tif (!responseContainer) {\n\t\t\t\t\tjQuery.error(callbackName + \" was not called\");\n\t\t\t\t}\n\t\t\t\treturn responseContainer[0];\n\t\t\t};\n\n\t\t\t// Force json dataType\n\t\t\ts.dataTypes[0] = \"json\";\n\n\t\t\t// Install callback\n\t\t\toverwritten = window[callbackName];\n\t\t\twindow[callbackName] = function () {\n\t\t\t\tresponseContainer = arguments;\n\t\t\t};\n\n\t\t\t// Clean-up function (fires after converters)\n\t\t\tjqXHR.always(function () {\n\n\t\t\t\t// If previous value didn't exist - remove it\n\t\t\t\tif (overwritten === undefined) {\n\t\t\t\t\tjQuery(window).removeProp(callbackName);\n\n\t\t\t\t\t// Otherwise restore preexisting value\n\t\t\t\t} else {\n\t\t\t\t\twindow[callbackName] = overwritten;\n\t\t\t\t}\n\n\t\t\t\t// Save back as free\n\t\t\t\tif (s[callbackName]) {\n\n\t\t\t\t\t// Make sure that re-using the options doesn't screw things around\n\t\t\t\t\ts.jsonpCallback = originalSettings.jsonpCallback;\n\n\t\t\t\t\t// Save the callback name for future use\n\t\t\t\t\toldCallbacks.push(callbackName);\n\t\t\t\t}\n\n\t\t\t\t// Call if it was a function and we have a response\n\t\t\t\tif (responseContainer && isFunction(overwritten)) {\n\t\t\t\t\toverwritten(responseContainer[0]);\n\t\t\t\t}\n\n\t\t\t\tresponseContainer = overwritten = undefined;\n\t\t\t});\n\n\t\t\t// Delegate to script\n\t\t\treturn \"script\";\n\t\t}\n\t});\n\n\n\n\n\t// Support: Safari 8 only\n\t// In Safari 8 documents created via document.implementation.createHTMLDocument\n\t// collapse sibling forms: the second one becomes a child of the first one.\n\t// Because of that, this security measure has to be disabled in Safari 8.\n\t// https://bugs.webkit.org/show_bug.cgi?id=137337\n\tsupport.createHTMLDocument = (function () {\n\t\tvar body = document.implementation.createHTMLDocument(\"\").body;\n\t\tbody.innerHTML = \"<form></form><form></form>\";\n\t\treturn body.childNodes.length === 2;\n\t})();\n\n\n\t// Argument \"data\" should be string of html\n\t// context (optional): If specified, the fragment will be created in this context,\n\t// defaults to document\n\t// keepScripts (optional): If true, will include scripts passed in the html string\n\tjQuery.parseHTML = function (data, context, keepScripts) {\n\t\tif (typeof data !== \"string\") {\n\t\t\treturn [];\n\t\t}\n\t\tif (typeof context === \"boolean\") {\n\t\t\tkeepScripts = context;\n\t\t\tcontext = false;\n\t\t}\n\n\t\tvar base, parsed, scripts;\n\n\t\tif (!context) {\n\n\t\t\t// Stop scripts or inline event handlers from being executed immediately\n\t\t\t// by using document.implementation\n\t\t\tif (support.createHTMLDocument) {\n\t\t\t\tcontext = document.implementation.createHTMLDocument(\"\");\n\n\t\t\t\t// Set the base href for the created document\n\t\t\t\t// so any parsed elements with URLs\n\t\t\t\t// are based on the document's URL (gh-2965)\n\t\t\t\tbase = context.createElement(\"base\");\n\t\t\t\tbase.href = document.location.href;\n\t\t\t\tcontext.head.appendChild(base);\n\t\t\t} else {\n\t\t\t\tcontext = document;\n\t\t\t}\n\t\t}\n\n\t\tparsed = rsingleTag.exec(data);\n\t\tscripts = !keepScripts && [];\n\n\t\t// Single tag\n\t\tif (parsed) {\n\t\t\treturn [context.createElement(parsed[1])];\n\t\t}\n\n\t\tparsed = buildFragment([data], context, scripts);\n\n\t\tif (scripts && scripts.length) {\n\t\t\tjQuery(scripts).remove();\n\t\t}\n\n\t\treturn jQuery.merge([], parsed.childNodes);\n\t};\n\n\n\t/**\n\t * Load a url into a page\n\t */\n\tjQuery.fn.load = function (url, params, callback) {\n\t\tvar selector, type, response,\n\t\t\tself = this,\n\t\t\toff = url.indexOf(\" \");\n\n\t\tif (off > -1) {\n\t\t\tselector = stripAndCollapse(url.slice(off));\n\t\t\turl = url.slice(0, off);\n\t\t}\n\n\t\t// If it's a function\n\t\tif (isFunction(params)) {\n\n\t\t\t// We assume that it's the callback\n\t\t\tcallback = params;\n\t\t\tparams = undefined;\n\n\t\t\t// Otherwise, build a param string\n\t\t} else if (params && typeof params === \"object\") {\n\t\t\ttype = \"POST\";\n\t\t}\n\n\t\t// If we have elements to modify, make the request\n\t\tif (self.length > 0) {\n\t\t\tjQuery.ajax({\n\t\t\t\turl: url,\n\n\t\t\t\t// If \"type\" variable is undefined, then \"GET\" method will be used.\n\t\t\t\t// Make value of this field explicit since\n\t\t\t\t// user can override it through ajaxSetup method\n\t\t\t\ttype: type || \"GET\",\n\t\t\t\tdataType: \"html\",\n\t\t\t\tdata: params\n\t\t\t}).done(function (responseText) {\n\n\t\t\t\t// Save response for use in complete callback\n\t\t\t\tresponse = arguments;\n\n\t\t\t\tself.html(selector ?\n\n\t\t\t\t\t// If a selector was specified, locate the right elements in a dummy div\n\t\t\t\t\t// Exclude scripts to avoid IE 'Permission Denied' errors\n\t\t\t\t\tjQuery(\"<div>\").append(jQuery.parseHTML(responseText)).find(selector) :\n\n\t\t\t\t\t// Otherwise use the full result\n\t\t\t\t\tresponseText);\n\n\t\t\t\t// If the request succeeds, this function gets \"data\", \"status\", \"jqXHR\"\n\t\t\t\t// but they are ignored because response was set above.\n\t\t\t\t// If it fails, this function gets \"jqXHR\", \"status\", \"error\"\n\t\t\t}).always(callback && function (jqXHR, status) {\n\t\t\t\tself.each(function () {\n\t\t\t\t\tcallback.apply(this, response || [jqXHR.responseText, status, jqXHR]);\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\n\t\treturn this;\n\t};\n\n\n\n\n\tjQuery.expr.pseudos.animated = function (elem) {\n\t\treturn jQuery.grep(jQuery.timers, function (fn) {\n\t\t\treturn elem === fn.elem;\n\t\t}).length;\n\t};\n\n\n\n\n\tjQuery.offset = {\n\t\tsetOffset: function (elem, options, i) {\n\t\t\tvar curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition,\n\t\t\t\tposition = jQuery.css(elem, \"position\"),\n\t\t\t\tcurElem = jQuery(elem),\n\t\t\t\tprops = {};\n\n\t\t\t// Set position first, in-case top/left are set even on static elem\n\t\t\tif (position === \"static\") {\n\t\t\t\telem.style.position = \"relative\";\n\t\t\t}\n\n\t\t\tcurOffset = curElem.offset();\n\t\t\tcurCSSTop = jQuery.css(elem, \"top\");\n\t\t\tcurCSSLeft = jQuery.css(elem, \"left\");\n\t\t\tcalculatePosition = (position === \"absolute\" || position === \"fixed\") &&\n\t\t\t\t(curCSSTop + curCSSLeft).indexOf(\"auto\") > -1;\n\n\t\t\t// Need to be able to calculate position if either\n\t\t\t// top or left is auto and position is either absolute or fixed\n\t\t\tif (calculatePosition) {\n\t\t\t\tcurPosition = curElem.position();\n\t\t\t\tcurTop = curPosition.top;\n\t\t\t\tcurLeft = curPosition.left;\n\n\t\t\t} else {\n\t\t\t\tcurTop = parseFloat(curCSSTop) || 0;\n\t\t\t\tcurLeft = parseFloat(curCSSLeft) || 0;\n\t\t\t}\n\n\t\t\tif (isFunction(options)) {\n\n\t\t\t\t// Use jQuery.extend here to allow modification of coordinates argument (gh-1848)\n\t\t\t\toptions = options.call(elem, i, jQuery.extend({}, curOffset));\n\t\t\t}\n\n\t\t\tif (options.top != null) {\n\t\t\t\tprops.top = (options.top - curOffset.top) + curTop;\n\t\t\t}\n\t\t\tif (options.left != null) {\n\t\t\t\tprops.left = (options.left - curOffset.left) + curLeft;\n\t\t\t}\n\n\t\t\tif (\"using\" in options) {\n\t\t\t\toptions.using.call(elem, props);\n\n\t\t\t} else {\n\t\t\t\tcurElem.css(props);\n\t\t\t}\n\t\t}\n\t};\n\n\tjQuery.fn.extend({\n\n\t\t// offset() relates an element's border box to the document origin\n\t\toffset: function (options) {\n\n\t\t\t// Preserve chaining for setter\n\t\t\tif (arguments.length) {\n\t\t\t\treturn options === undefined ?\n\t\t\t\t\tthis :\n\t\t\t\t\tthis.each(function (i) {\n\t\t\t\t\t\tjQuery.offset.setOffset(this, options, i);\n\t\t\t\t\t});\n\t\t\t}\n\n\t\t\tvar rect, win,\n\t\t\t\telem = this[0];\n\n\t\t\tif (!elem) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Return zeros for disconnected and hidden (display: none) elements (gh-2310)\n\t\t\t// Support: IE <=11 only\n\t\t\t// Running getBoundingClientRect on a\n\t\t\t// disconnected node in IE throws an error\n\t\t\tif (!elem.getClientRects().length) {\n\t\t\t\treturn { top: 0, left: 0 };\n\t\t\t}\n\n\t\t\t// Get document-relative position by adding viewport scroll to viewport-relative gBCR\n\t\t\trect = elem.getBoundingClientRect();\n\t\t\twin = elem.ownerDocument.defaultView;\n\t\t\treturn {\n\t\t\t\ttop: rect.top + win.pageYOffset,\n\t\t\t\tleft: rect.left + win.pageXOffset\n\t\t\t};\n\t\t},\n\n\t\t// position() relates an element's margin box to its offset parent's padding box\n\t\t// This corresponds to the behavior of CSS absolute positioning\n\t\tposition: function () {\n\t\t\tif (!this[0]) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar offsetParent, offset, doc,\n\t\t\t\telem = this[0],\n\t\t\t\tparentOffset = { top: 0, left: 0 };\n\n\t\t\t// position:fixed elements are offset from the viewport, which itself always has zero offset\n\t\t\tif (jQuery.css(elem, \"position\") === \"fixed\") {\n\n\t\t\t\t// Assume position:fixed implies availability of getBoundingClientRect\n\t\t\t\toffset = elem.getBoundingClientRect();\n\n\t\t\t} else {\n\t\t\t\toffset = this.offset();\n\n\t\t\t\t// Account for the *real* offset parent, which can be the document or its root element\n\t\t\t\t// when a statically positioned element is identified\n\t\t\t\tdoc = elem.ownerDocument;\n\t\t\t\toffsetParent = elem.offsetParent || doc.documentElement;\n\t\t\t\twhile (offsetParent &&\n\t\t\t\t\t(offsetParent === doc.body || offsetParent === doc.documentElement) &&\n\t\t\t\t\tjQuery.css(offsetParent, \"position\") === \"static\") {\n\n\t\t\t\t\toffsetParent = offsetParent.parentNode;\n\t\t\t\t}\n\t\t\t\tif (offsetParent && offsetParent !== elem && offsetParent.nodeType === 1) {\n\n\t\t\t\t\t// Incorporate borders into its offset, since they are outside its content origin\n\t\t\t\t\tparentOffset = jQuery(offsetParent).offset();\n\t\t\t\t\tparentOffset.top += jQuery.css(offsetParent, \"borderTopWidth\", true);\n\t\t\t\t\tparentOffset.left += jQuery.css(offsetParent, \"borderLeftWidth\", true);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Subtract parent offsets and element margins\n\t\t\treturn {\n\t\t\t\ttop: offset.top - parentOffset.top - jQuery.css(elem, \"marginTop\", true),\n\t\t\t\tleft: offset.left - parentOffset.left - jQuery.css(elem, \"marginLeft\", true)\n\t\t\t};\n\t\t},\n\n\t\t// This method will return documentElement in the following cases:\n\t\t// 1) For the element inside the iframe without offsetParent, this method will return\n\t\t//    documentElement of the parent window\n\t\t// 2) For the hidden or detached element\n\t\t// 3) For body or html element, i.e. in case of the html node - it will return itself\n\t\t//\n\t\t// but those exceptions were never presented as a real life use-cases\n\t\t// and might be considered as more preferable results.\n\t\t//\n\t\t// This logic, however, is not guaranteed and can change at any point in the future\n\t\toffsetParent: function () {\n\t\t\treturn this.map(function () {\n\t\t\t\tvar offsetParent = this.offsetParent;\n\n\t\t\t\twhile (offsetParent && jQuery.css(offsetParent, \"position\") === \"static\") {\n\t\t\t\t\toffsetParent = offsetParent.offsetParent;\n\t\t\t\t}\n\n\t\t\t\treturn offsetParent || documentElement;\n\t\t\t});\n\t\t}\n\t});\n\n\t// Create scrollLeft and scrollTop methods\n\tjQuery.each({ scrollLeft: \"pageXOffset\", scrollTop: \"pageYOffset\" }, function (method, prop) {\n\t\tvar top = \"pageYOffset\" === prop;\n\n\t\tjQuery.fn[method] = function (val) {\n\t\t\treturn access(this, function (elem, method, val) {\n\n\t\t\t\t// Coalesce documents and windows\n\t\t\t\tvar win;\n\t\t\t\tif (isWindow(elem)) {\n\t\t\t\t\twin = elem;\n\t\t\t\t} else if (elem.nodeType === 9) {\n\t\t\t\t\twin = elem.defaultView;\n\t\t\t\t}\n\n\t\t\t\tif (val === undefined) {\n\t\t\t\t\treturn win ? win[prop] : elem[method];\n\t\t\t\t}\n\n\t\t\t\tif (win) {\n\t\t\t\t\twin.scrollTo(\n\t\t\t\t\t\t!top ? val : win.pageXOffset,\n\t\t\t\t\t\ttop ? val : win.pageYOffset\n\t\t\t\t\t);\n\n\t\t\t\t} else {\n\t\t\t\t\telem[method] = val;\n\t\t\t\t}\n\t\t\t}, method, val, arguments.length);\n\t\t};\n\t});\n\n\t// Support: Safari <=7 - 9.1, Chrome <=37 - 49\n\t// Add the top/left cssHooks using jQuery.fn.position\n\t// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084\n\t// Blink bug: https://bugs.chromium.org/p/chromium/issues/detail?id=589347\n\t// getComputedStyle returns percent when specified for top/left/bottom/right;\n\t// rather than make the css module depend on the offset module, just check for it here\n\tjQuery.each([\"top\", \"left\"], function (_i, prop) {\n\t\tjQuery.cssHooks[prop] = addGetHookIf(support.pixelPosition,\n\t\t\tfunction (elem, computed) {\n\t\t\t\tif (computed) {\n\t\t\t\t\tcomputed = curCSS(elem, prop);\n\n\t\t\t\t\t// If curCSS returns percentage, fallback to offset\n\t\t\t\t\treturn rnumnonpx.test(computed) ?\n\t\t\t\t\t\tjQuery(elem).position()[prop] + \"px\" :\n\t\t\t\t\t\tcomputed;\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\t});\n\n\n\t// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods\n\tjQuery.each({ Height: \"height\", Width: \"width\" }, function (name, type) {\n\t\tjQuery.each({\n\t\t\tpadding: \"inner\" + name,\n\t\t\tcontent: type,\n\t\t\t\"\": \"outer\" + name\n\t\t}, function (defaultExtra, funcName) {\n\n\t\t\t// Margin is only for outerHeight, outerWidth\n\t\t\tjQuery.fn[funcName] = function (margin, value) {\n\t\t\t\tvar chainable = arguments.length && (defaultExtra || typeof margin !== \"boolean\"),\n\t\t\t\t\textra = defaultExtra || (margin === true || value === true ? \"margin\" : \"border\");\n\n\t\t\t\treturn access(this, function (elem, type, value) {\n\t\t\t\t\tvar doc;\n\n\t\t\t\t\tif (isWindow(elem)) {\n\n\t\t\t\t\t\t// $( window ).outerWidth/Height return w/h including scrollbars (gh-1729)\n\t\t\t\t\t\treturn funcName.indexOf(\"outer\") === 0 ?\n\t\t\t\t\t\t\telem[\"inner\" + name] :\n\t\t\t\t\t\t\telem.document.documentElement[\"client\" + name];\n\t\t\t\t\t}\n\n\t\t\t\t\t// Get document width or height\n\t\t\t\t\tif (elem.nodeType === 9) {\n\t\t\t\t\t\tdoc = elem.documentElement;\n\n\t\t\t\t\t\t// Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height],\n\t\t\t\t\t\t// whichever is greatest\n\t\t\t\t\t\treturn Math.max(\n\t\t\t\t\t\t\telem.body[\"scroll\" + name], doc[\"scroll\" + name],\n\t\t\t\t\t\t\telem.body[\"offset\" + name], doc[\"offset\" + name],\n\t\t\t\t\t\t\tdoc[\"client\" + name]\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\n\t\t\t\t\treturn value === undefined ?\n\n\t\t\t\t\t\t// Get width or height on the element, requesting but not forcing parseFloat\n\t\t\t\t\t\tjQuery.css(elem, type, extra) :\n\n\t\t\t\t\t\t// Set width or height on the element\n\t\t\t\t\t\tjQuery.style(elem, type, value, extra);\n\t\t\t\t}, type, chainable ? margin : undefined, chainable);\n\t\t\t};\n\t\t});\n\t});\n\n\n\tjQuery.each([\n\t\t\"ajaxStart\",\n\t\t\"ajaxStop\",\n\t\t\"ajaxComplete\",\n\t\t\"ajaxError\",\n\t\t\"ajaxSuccess\",\n\t\t\"ajaxSend\"\n\t], function (_i, type) {\n\t\tjQuery.fn[type] = function (fn) {\n\t\t\treturn this.on(type, fn);\n\t\t};\n\t});\n\n\n\n\n\tjQuery.fn.extend({\n\n\t\tbind: function (types, data, fn) {\n\t\t\treturn this.on(types, null, data, fn);\n\t\t},\n\t\tunbind: function (types, fn) {\n\t\t\treturn this.off(types, null, fn);\n\t\t},\n\n\t\tdelegate: function (selector, types, data, fn) {\n\t\t\treturn this.on(types, selector, data, fn);\n\t\t},\n\t\tundelegate: function (selector, types, fn) {\n\n\t\t\t// ( namespace ) or ( selector, types [, fn] )\n\t\t\treturn arguments.length === 1 ?\n\t\t\t\tthis.off(selector, \"**\") :\n\t\t\t\tthis.off(types, selector || \"**\", fn);\n\t\t},\n\n\t\thover: function (fnOver, fnOut) {\n\t\t\treturn this.mouseenter(fnOver).mouseleave(fnOut || fnOver);\n\t\t}\n\t});\n\n\tjQuery.each(\n\t\t(\"blur focus focusin focusout resize scroll click dblclick \" +\n\t\t\t\"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave \" +\n\t\t\t\"change select submit keydown keypress keyup contextmenu\").split(\" \"),\n\t\tfunction (_i, name) {\n\n\t\t\t// Handle event binding\n\t\t\tjQuery.fn[name] = function (data, fn) {\n\t\t\t\treturn arguments.length > 0 ?\n\t\t\t\t\tthis.on(name, null, data, fn) :\n\t\t\t\t\tthis.trigger(name);\n\t\t\t};\n\t\t}\n\t);\n\n\n\n\n\t// Support: Android <=4.0 only\n\t// Make sure we trim BOM and NBSP\n\t// Require that the \"whitespace run\" starts from a non-whitespace\n\t// to avoid O(N^2) behavior when the engine would try matching \"\\s+$\" at each space position.\n\tvar rtrim = /^[\\s\\uFEFF\\xA0]+|([^\\s\\uFEFF\\xA0])[\\s\\uFEFF\\xA0]+$/g;\n\n\t// Bind a function to a context, optionally partially applying any\n\t// arguments.\n\t// jQuery.proxy is deprecated to promote standards (specifically Function#bind)\n\t// However, it is not slated for removal any time soon\n\tjQuery.proxy = function (fn, context) {\n\t\tvar tmp, args, proxy;\n\n\t\tif (typeof context === \"string\") {\n\t\t\ttmp = fn[context];\n\t\t\tcontext = fn;\n\t\t\tfn = tmp;\n\t\t}\n\n\t\t// Quick check to determine if target is callable, in the spec\n\t\t// this throws a TypeError, but we will just return undefined.\n\t\tif (!isFunction(fn)) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\t// Simulated bind\n\t\targs = slice.call(arguments, 2);\n\t\tproxy = function () {\n\t\t\treturn fn.apply(context || this, args.concat(slice.call(arguments)));\n\t\t};\n\n\t\t// Set the guid of unique handler to the same of original handler, so it can be removed\n\t\tproxy.guid = fn.guid = fn.guid || jQuery.guid++;\n\n\t\treturn proxy;\n\t};\n\n\tjQuery.holdReady = function (hold) {\n\t\tif (hold) {\n\t\t\tjQuery.readyWait++;\n\t\t} else {\n\t\t\tjQuery.ready(true);\n\t\t}\n\t};\n\tjQuery.isArray = Array.isArray;\n\tjQuery.parseJSON = JSON.parse;\n\tjQuery.nodeName = nodeName;\n\tjQuery.isFunction = isFunction;\n\tjQuery.isWindow = isWindow;\n\tjQuery.camelCase = camelCase;\n\tjQuery.type = toType;\n\n\tjQuery.now = Date.now;\n\n\tjQuery.isNumeric = function (obj) {\n\n\t\t// As of jQuery 3.0, isNumeric is limited to\n\t\t// strings and numbers (primitives or objects)\n\t\t// that can be coerced to finite numbers (gh-2662)\n\t\tvar type = jQuery.type(obj);\n\t\treturn (type === \"number\" || type === \"string\") &&\n\n\t\t\t// parseFloat NaNs numeric-cast false positives (\"\")\n\t\t\t// ...but misinterprets leading-number strings, particularly hex literals (\"0x...\")\n\t\t\t// subtraction forces infinities to NaN\n\t\t\t!isNaN(obj - parseFloat(obj));\n\t};\n\n\tjQuery.trim = function (text) {\n\t\treturn text == null ?\n\t\t\t\"\" :\n\t\t\t(text + \"\").replace(rtrim, \"$1\");\n\t};\n\n\n\n\t// Register as a named AMD module, since jQuery can be concatenated with other\n\t// files that may use define, but not via a proper concatenation script that\n\t// understands anonymous AMD modules. A named AMD is safest and most robust\n\t// way to register. Lowercase jquery is used because AMD module names are\n\t// derived from file names, and jQuery is normally delivered in a lowercase\n\t// file name. Do this after creating the global so that if an AMD module wants\n\t// to call noConflict to hide this version of jQuery, it will work.\n\n\t// Note that for maximum portability, libraries that are not jQuery should\n\t// declare themselves as anonymous modules, and avoid setting a global if an\n\t// AMD loader is present. jQuery is a special case. For more information, see\n\t// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon\n\n\tif (typeof define === \"function\" && define.amd) {\n\t\tdefine(\"jquery\", [], function () {\n\t\t\treturn jQuery;\n\t\t});\n\t}\n\n\n\n\n\tvar\n\n\t\t// Map over jQuery in case of overwrite\n\t\t_jQuery = window.jQuery,\n\n\t\t// Map over the $ in case of overwrite\n\t\t_$ = window.$;\n\n\tjQuery.noConflict = function (deep) {\n\t\tif (window.$ === jQuery) {\n\t\t\twindow.$ = _$;\n\t\t}\n\n\t\tif (deep && window.jQuery === jQuery) {\n\t\t\twindow.jQuery = _jQuery;\n\t\t}\n\n\t\treturn jQuery;\n\t};\n\n\t// Expose jQuery and $ identifiers, even in AMD\n\t// (trac-7102#comment:10, https://github.com/jquery/jquery/pull/557)\n\t// and CommonJS for browser emulators (trac-13566)\n\tif (typeof noGlobal === \"undefined\") {\n\t\twindow.jQuery = window.$ = jQuery;\n\t}\n\n\n\n\n\treturn jQuery;\n});"
  },
  {
    "path": "src/sourceDev.WebApp/SharedThemes/cosmo/Shared/_Layout.cshtml",
    "content": "﻿@inject ISiteContextResolver siteResolver\n@inject ICoreThemeHelper themeHelper\n@{\n    var themeSettings = themeHelper.GetThemeSettings();\n    @*\n        These settings can be set by a main view to show additional columns.\n        Views that push content into the optional sections SideNav, AsidePrimary, and AsideSecondary\n        are obligated to set the needed viewtate property to true to show the section,\n        otherwise an error will occur.\n        The sideNav column also supports a toggle so it can be hidden and toggled visible even though it renders.\n    *@\n    bool sideNavVisible = true.Equals(ViewData[\"SideNavVisible\"]);\n    string sideNavToggleClass = ViewData[\"SideNavToggle\"]?.ToString() ?? \"collapse\";\n    bool asidePrimaryVisible = true.Equals(ViewData[\"AsidePrimaryVisible\"]);\n    bool asideSecondaryVisible = true.Equals(ViewData[\"AsideSecondaryVisible\"]);\n    var Tenant = await siteResolver.ResolveSite(Context.Request.Host.Host, Context.Request.Path);\n    var siteRoot = \"\";\n    if (!string.IsNullOrWhiteSpace(Tenant.SiteFolderName)) { siteRoot = \"/\" + Tenant.SiteFolderName; }\n    \n}\n<!DOCTYPE html>\n<html lang=\"@CultureInfo.CurrentUICulture.Name\">\n<head>\n    <meta charset=\"utf-8\" />\n    <title>@ViewData[\"Title\"] - @(Tenant?.SiteName ?? \"Sample\")</title>\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1, shrink-to-fit=no\">\n    @RenderSection(\"Meta\", required: false)\n    <environment names=\"Development\">\n        <link rel=\"stylesheet\" href=\"~/css/bootstrap.css\" cs-resolve-theme-resource=\"true\" cs-shared-theme=\"true\" cs-tenant=\"@Tenant\" />\n        <link rel=\"stylesheet\" href=\"~/css/fontawesome-all.min.css\" cs-resolve-theme-resource=\"true\" cs-shared-theme=\"true\" cs-tenant=\"@Tenant\" />\n        <link rel=\"stylesheet\" href=\"~/css/site.css\" cs-resolve-theme-resource=\"true\" cs-shared-theme=\"true\" cs-tenant=\"@Tenant\" asp-append-version=\"true\" />\n    </environment>\n    <environment names=\"Staging,Production\">\n        <link rel=\"stylesheet\" href=\"~/css/bootstrap.min.css\" cs-resolve-theme-resource=\"true\" cs-shared-theme=\"true\" cs-tenant=\"@Tenant\" />\n        <link rel=\"stylesheet\" href=\"~/css/fontawesome-all.min.css\" cs-resolve-theme-resource=\"true\" cs-shared-theme=\"true\" cs-tenant=\"@Tenant\" />\n        <link rel=\"stylesheet\" href=\"~/css/site.min.css\" cs-resolve-theme-resource=\"true\" cs-shared-theme=\"true\" cs-tenant=\"@Tenant\" asp-append-version=\"true\" />\n    </environment>\n    @RenderSection(\"Styles\", required: false)    \n    \n    <google-analytics profile-id=\"@Tenant.GoogleAnalyticsProfileId\" user-id=\"@User.GetUserId()\"></google-analytics>\n    <base href=\"@Context.Request.Path\" />\n</head>\n<body class=\"d-flex flex-column @ViewData[\"BodyClass\"]\">\n    <header>\n        <a id=\"skippy\" class=\"visually-hidden visually-hidden-focusable\" href=\"#content\">\n            <div class=\"container\">\n                <span class=\"skiplink-text\">Skip to main content</span>\n            </div>\n        </a>\n        <div class=\"fixed-top container-fluid brand-header bg-white\">\n            <div class=\"d-flex align-items-center bg-white\">\n                @if (!string.IsNullOrWhiteSpace(Tenant.LogoUrl))\n                {\n                    <div>\n                         <partial name=\"SiteLogoPartial\" model=\"@Tenant\" />\n                    </div>\n                }\n                @if (Tenant.ShowSiteNameLink)\n                {\n                    <div class=\"align-self-center pt-4 pt-sm-0\">\n                         <partial name=\"SiteTitlePartial\" model=\"@Tenant\" />\n                    </div>\n                }\n                @if (!string.IsNullOrWhiteSpace(Tenant.HeaderContent))\n                {\n                    <div class=\"flex-fill align-self-center pt-3 d-none d-sm-block\">\n                        <partial name=\"SiteHeaderPartial\" />\n                    </div>\n                }\n            </div>\n        </div>\n        <nav class=\"navbar navbar-expand-md navbar-dark fixed-top bg-dark pt-0 pb-0\">\n            <button class=\"navbar-toggler\" type=\"button\" data-bs-toggle=\"collapse\" data-bs-target=\"#navbarNavDropdown\" aria-controls=\"navbarNavDropdown\" aria-expanded=\"false\" aria-label=\"Toggle navigation\">\n                <span class=\"navbar-toggler-icon\"></span>\n            </button>\n\n            <div class=\"collapse navbar-collapse bg-dark\" id=\"navbarNavDropdown\">\n                @await Component.InvokeAsync(\"Navigation\", new { viewName = \"Bootstrap5TopNavWithDropdowns\", filterName = NamedNavigationFilters.TopNav, startingNodeKey = \"\" })\n                <partial name=\"_LoginPartialWithDropdowns\" />\n            </div>\n        </nav>\n    </header>\n    <div id=\"wrapper\" class=\"container-fluid cs-container flex-fill\">\n        @await Component.InvokeAsync(\"Navigation\", new { viewName = \"Bootstrap5Breadcrumbs\", filterName = NamedNavigationFilters.Breadcrumbs, startingNodeKey = \"\" })\n        <div class=\"row\">\n            <main id=\"content\" class=\"col order-3\">\n                <partial name=\"AlertsPartial\" />\n                <partial name=\"_CookieConsentPartial\" />\n                <partial name=\"_AutoLogoutWarningPartial\" />\n                @RenderBody()\n            </main>\n            @if (sideNavVisible)\n            {\n                <nav id=\"sidenavmenu\" class=\" col col-3 order-1 @sideNavToggleClass\">\n                    @RenderSection(\"SideNav\", required: false)\n                </nav>\n\n            }\n            @if (asideSecondaryVisible)\n            {\n                <aside id=\"asideSecondary\" class=\"col col-1 order-2\">\n                    @RenderSection(\"AsideSecondary\", required: false)\n                </aside>\n\n            }\n            @if (asidePrimaryVisible)\n            {\n                <aside id=\"asidePrimary\" class=\"col-12 col-md-3 col-sm-12  col-sm-12 order-4\">\n                    @RenderSection(\"AsidePrimary\", required: false)\n                </aside>\n\n            }\n        </div>\n    </div>\n    <footer class=\"sticky-bottom border pt-2 h-100\">\n        <div class=\"w-100 text-center\">\n            <partial name=\"SiteFooterPartial\" />\n        </div>\n        <div class=\"d-flex flex-wrap flex-grow justify-content-center\">\n            <div class=\"p-2\">\n            <ul class=\"list-unstyled d-flex flex-wrap\">\n                @if (Tenant != null && !string.IsNullOrWhiteSpace(Tenant.PrivacyPolicy))\n                {\n                    <li class=\"ps-2 me-2\">\n                        <a asp-controller=\"Privacy\" asp-action=\"Index\">Privacy Policy</a>\n                    </li>\n                }\n                <li class=\"border-left ps-2 me-2\">\n                    @* you are free to remove the powered by cloudscribe link but we appreciate it if you choose to keep it! *@\n                    <a class=\"text-nowrap\" target=\"_blank\" href=\"https://www.cloudscribe.com/?utm_source=@Context.Request.Host.Value&amp;utm_medium=referral&amp;utm_campaign=poweredbycloudscribe\">Powered by cloudscribe</a>\n                </li>\n            </ul>\n        </div>\n        <div class=\"ps-sm-2  text-center w-100\"><span class=\"text-nowrap\">Copyright &copy; @DateTime.Now.Year</span><span class=\"d-none d-sm-inline\"> - </span><span> @(Tenant?.SiteName ?? \"Sample\")</span></div>\n        <partial name=\"_CookieConsentRevokePartial\" />\n        </div>   \n    </footer>\n    @RenderSection(\"Toolbar\", required: false)\n    <environment names=\"Development\">\n        <script src=\"~/js/jquery.js\" cs-resolve-theme-resource=\"true\" cs-shared-theme=\"true\" cs-tenant=\"@Tenant\"></script>\n        <script src=\"~/js/bootstrap.bundle.js\" cs-resolve-theme-resource=\"true\" cs-shared-theme=\"true\" cs-tenant=\"@Tenant\"></script>\n        <script src=\"~/cr/js/bs4.smartmenus.min.js\"></script>\n    </environment>\n    <environment names=\"Staging,Production\">\n        <script src=\"~/js/jquery.min.js\" cs-resolve-theme-resource=\"true\" cs-shared-theme=\"true\" cs-tenant=\"@Tenant\"></script>\n        <script src=\"~/js/bootstrap.bundle.min.js\" cs-resolve-theme-resource=\"true\" cs-shared-theme=\"true\" cs-tenant=\"@Tenant\"></script>\n        <script src=\"~/cr/js/bs4.smartmenus.min.js\"></script>\n    </environment>\n    @RenderSection(\"Bottom\", required: false)\n    @RenderSection(\"Scripts\", required: false)     \n    @Html.RenderResources(\"js\") @*render any js resources declared via helpers in partial views etc*@\n    <add-this profile-id=\"@Tenant.AddThisDotComUsername\" async></add-this>\n</body>\n</html>\n"
  },
  {
    "path": "src/sourceDev.WebApp/SharedThemes/cosmo/wwwroot/css/_bootswatch.scss",
    "content": "// Cosmo 5.1.3\n// Bootswatch\n\n\n// Variables\n\n$web-font-path: \"https://fonts.googleapis.com/css2?family=Source+Sans+Pro:wght@300;400;700&display=swap\" !default;\n@if $web-font-path {\n  @import url($web-font-path);\n}\n\n// Typography\n\nbody {\n  -webkit-font-smoothing: antialiased;\n}\n\n// Indicators\n\n.badge {\n  &.bg-light {\n    color: $dark;\n  }\n}\n\n// Progress bars\n\n.progress {\n  @include box-shadow(none);\n\n  .progress-bar {\n    font-size: 8px;\n    line-height: 8px;\n  }\n}\n"
  },
  {
    "path": "src/sourceDev.WebApp/SharedThemes/cosmo/wwwroot/css/_variables.scss",
    "content": "// Cosmo 5.1.3\n// Bootswatch\n\n$theme: \"cosmo\" !default;\n\n//\n// Color system\n//\n\n$white:    #fff !default;\n$gray-100: #f8f9fa !default;\n$gray-200: #e9ecef !default;\n$gray-300: #dee2e6 !default;\n$gray-400: #ced4da !default;\n$gray-500: #adb5bd !default;\n$gray-600: #868e96 !default;\n$gray-700: #495057 !default;\n$gray-800: #373a3c !default;\n$gray-900: #212529 !default;\n$black:    #000 !default;\n\n$blue:    #2780e3 !default;\n$indigo:  #6610f2 !default;\n$purple:  #613d7c !default;\n$pink:    #e83e8c !default;\n$red:     #ff0039 !default;\n$orange:  #f0ad4e !default;\n$yellow:  #ff7518 !default;\n$green:   #3fb618 !default;\n$teal:    #20c997 !default;\n$cyan:    #9954bb !default;\n\n$primary:       $blue !default;\n$secondary:     $gray-800 !default;\n$success:       $green !default;\n$info:          $cyan !default;\n$warning:       $yellow !default;\n$danger:        $red !default;\n$light:         $gray-100 !default;\n$dark:          $gray-800 !default;\n\n$min-contrast-ratio:   2.6 !default;\n\n// Options\n\n$enable-rounded: false !default;\n\n// Body\n\n$body-color:    $gray-800 !default;\n\n// Fonts\n\n// stylelint-disable-next-line value-keyword-case\n$font-family-sans-serif:    \"Source Sans Pro\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\" !default;\n$headings-font-weight:      400 !default;\n\n// Navbar\n\n$navbar-dark-hover-color:       rgba($white, 1) !default;\n$navbar-light-hover-color:      rgba($black, .9) !default;\n\n// Alerts\n\n$alert-border-width:            0 !default;\n\n// Progress bars\n\n$progress-height:               .5rem !default;\n"
  },
  {
    "path": "src/sourceDev.WebApp/SharedThemes/cosmo/wwwroot/css/bootstrap.css",
    "content": "/*!\n * Bootswatch v5.1.3\n * Homepage: https://bootswatch.com\n * Copyright 2012-2021 Thomas Park\n * Licensed under MIT\n * Based on Bootstrap\n*/\n/*!\n * Bootstrap v5.1.3 (https://getbootstrap.com/)\n * Copyright 2011-2021 The Bootstrap Authors\n * Copyright 2011-2021 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n@import url(\"https://fonts.googleapis.com/css2?family=Source+Sans+Pro:wght@300;400;700&display=swap\");\n:root {\n  --bs-blue: #2780e3;\n  --bs-indigo: #6610f2;\n  --bs-purple: #613d7c;\n  --bs-pink: #e83e8c;\n  --bs-red: #ff0039;\n  --bs-orange: #f0ad4e;\n  --bs-yellow: #ff7518;\n  --bs-green: #3fb618;\n  --bs-teal: #20c997;\n  --bs-cyan: #9954bb;\n  --bs-white: #fff;\n  --bs-gray: #868e96;\n  --bs-gray-dark: #373a3c;\n  --bs-gray-100: #f8f9fa;\n  --bs-gray-200: #e9ecef;\n  --bs-gray-300: #dee2e6;\n  --bs-gray-400: #ced4da;\n  --bs-gray-500: #adb5bd;\n  --bs-gray-600: #868e96;\n  --bs-gray-700: #495057;\n  --bs-gray-800: #373a3c;\n  --bs-gray-900: #212529;\n  --bs-primary: #2780e3;\n  --bs-secondary: #373a3c;\n  --bs-success: #3fb618;\n  --bs-info: #9954bb;\n  --bs-warning: #ff7518;\n  --bs-danger: #ff0039;\n  --bs-light: #f8f9fa;\n  --bs-dark: #373a3c;\n  --bs-primary-rgb: 39, 128, 227;\n  --bs-secondary-rgb: 55, 58, 60;\n  --bs-success-rgb: 63, 182, 24;\n  --bs-info-rgb: 153, 84, 187;\n  --bs-warning-rgb: 255, 117, 24;\n  --bs-danger-rgb: 255, 0, 57;\n  --bs-light-rgb: 248, 249, 250;\n  --bs-dark-rgb: 55, 58, 60;\n  --bs-white-rgb: 255, 255, 255;\n  --bs-black-rgb: 0, 0, 0;\n  --bs-body-color-rgb: 55, 58, 60;\n  --bs-body-bg-rgb: 255, 255, 255;\n  --bs-font-sans-serif: \"Source Sans Pro\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\";\n  --bs-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n  --bs-gradient: linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));\n  --bs-body-font-family: var(--bs-font-sans-serif);\n  --bs-body-font-size: 1rem;\n  --bs-body-font-weight: 400;\n  --bs-body-line-height: 1.5;\n  --bs-body-color: #373a3c;\n  --bs-body-bg: #fff;\n}\n\n*,\n*::before,\n*::after {\n  box-sizing: border-box;\n}\n\n@media (prefers-reduced-motion: no-preference) {\n  :root {\n    scroll-behavior: smooth;\n  }\n}\n\nbody {\n  margin: 0;\n  font-family: var(--bs-body-font-family);\n  font-size: var(--bs-body-font-size);\n  font-weight: var(--bs-body-font-weight);\n  line-height: var(--bs-body-line-height);\n  color: var(--bs-body-color);\n  text-align: var(--bs-body-text-align);\n  background-color: var(--bs-body-bg);\n  -webkit-text-size-adjust: 100%;\n  -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\n\nhr {\n  margin: 1rem 0;\n  color: inherit;\n  background-color: currentColor;\n  border: 0;\n  opacity: 0.25;\n}\n\nhr:not([size]) {\n  height: 1px;\n}\n\nh1, .h1, h2, .h2, h3, .h3, h4, .h4, h5, .h5, h6, .h6 {\n  margin-top: 0;\n  margin-bottom: 0.5rem;\n  font-weight: 400;\n  line-height: 1.2;\n}\n\nh1, .h1 {\n  font-size: calc(1.375rem + 1.5vw);\n}\n\n@media (min-width: 1200px) {\n  h1, .h1 {\n    font-size: 2.5rem;\n  }\n}\n\nh2, .h2 {\n  font-size: calc(1.325rem + 0.9vw);\n}\n\n@media (min-width: 1200px) {\n  h2, .h2 {\n    font-size: 2rem;\n  }\n}\n\nh3, .h3 {\n  font-size: calc(1.3rem + 0.6vw);\n}\n\n@media (min-width: 1200px) {\n  h3, .h3 {\n    font-size: 1.75rem;\n  }\n}\n\nh4, .h4 {\n  font-size: calc(1.275rem + 0.3vw);\n}\n\n@media (min-width: 1200px) {\n  h4, .h4 {\n    font-size: 1.5rem;\n  }\n}\n\nh5, .h5 {\n  font-size: 1.25rem;\n}\n\nh6, .h6 {\n  font-size: 1rem;\n}\n\np {\n  margin-top: 0;\n  margin-bottom: 1rem;\n}\n\nabbr[title],\nabbr[data-bs-original-title] {\n  -webkit-text-decoration: underline dotted;\n  text-decoration: underline dotted;\n  cursor: help;\n  -webkit-text-decoration-skip-ink: none;\n  text-decoration-skip-ink: none;\n}\n\naddress {\n  margin-bottom: 1rem;\n  font-style: normal;\n  line-height: inherit;\n}\n\nol,\nul {\n  padding-left: 2rem;\n}\n\nol,\nul,\ndl {\n  margin-top: 0;\n  margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n  margin-bottom: 0;\n}\n\ndt {\n  font-weight: 700;\n}\n\ndd {\n  margin-bottom: .5rem;\n  margin-left: 0;\n}\n\nblockquote {\n  margin: 0 0 1rem;\n}\n\nb,\nstrong {\n  font-weight: bolder;\n}\n\nsmall, .small {\n  font-size: 0.875em;\n}\n\nmark, .mark {\n  padding: 0.2em;\n  background-color: #fcf8e3;\n}\n\nsub,\nsup {\n  position: relative;\n  font-size: 0.75em;\n  line-height: 0;\n  vertical-align: baseline;\n}\n\nsub {\n  bottom: -.25em;\n}\n\nsup {\n  top: -.5em;\n}\n\na {\n  color: #2780e3;\n  text-decoration: underline;\n}\n\na:hover {\n  color: #1f66b6;\n}\n\na:not([href]):not([class]), a:not([href]):not([class]):hover {\n  color: inherit;\n  text-decoration: none;\n}\n\npre,\ncode,\nkbd,\nsamp {\n  font-family: var(--bs-font-monospace);\n  font-size: 1em;\n  direction: ltr /* rtl:ignore */;\n  unicode-bidi: bidi-override;\n}\n\npre {\n  display: block;\n  margin-top: 0;\n  margin-bottom: 1rem;\n  overflow: auto;\n  font-size: 0.875em;\n}\n\npre code {\n  font-size: inherit;\n  color: inherit;\n  word-break: normal;\n}\n\ncode {\n  font-size: 0.875em;\n  color: #e83e8c;\n  word-wrap: break-word;\n}\n\na > code {\n  color: inherit;\n}\n\nkbd {\n  padding: 0.2rem 0.4rem;\n  font-size: 0.875em;\n  color: #fff;\n  background-color: #212529;\n}\n\nkbd kbd {\n  padding: 0;\n  font-size: 1em;\n  font-weight: 700;\n}\n\nfigure {\n  margin: 0 0 1rem;\n}\n\nimg,\nsvg {\n  vertical-align: middle;\n}\n\ntable {\n  caption-side: bottom;\n  border-collapse: collapse;\n}\n\ncaption {\n  padding-top: 0.5rem;\n  padding-bottom: 0.5rem;\n  color: #868e96;\n  text-align: left;\n}\n\nth {\n  text-align: inherit;\n  text-align: -webkit-match-parent;\n}\n\nthead,\ntbody,\ntfoot,\ntr,\ntd,\nth {\n  border-color: inherit;\n  border-style: solid;\n  border-width: 0;\n}\n\nlabel {\n  display: inline-block;\n}\n\nbutton {\n  border-radius: 0;\n}\n\nbutton:focus:not(:focus-visible) {\n  outline: 0;\n}\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n  margin: 0;\n  font-family: inherit;\n  font-size: inherit;\n  line-height: inherit;\n}\n\nbutton,\nselect {\n  text-transform: none;\n}\n\n[role=\"button\"] {\n  cursor: pointer;\n}\n\nselect {\n  word-wrap: normal;\n}\n\nselect:disabled {\n  opacity: 1;\n}\n\n[list]::-webkit-calendar-picker-indicator {\n  display: none;\n}\n\nbutton,\n[type=\"button\"],\n[type=\"reset\"],\n[type=\"submit\"] {\n  -webkit-appearance: button;\n}\n\nbutton:not(:disabled),\n[type=\"button\"]:not(:disabled),\n[type=\"reset\"]:not(:disabled),\n[type=\"submit\"]:not(:disabled) {\n  cursor: pointer;\n}\n\n::-moz-focus-inner {\n  padding: 0;\n  border-style: none;\n}\n\ntextarea {\n  resize: vertical;\n}\n\nfieldset {\n  min-width: 0;\n  padding: 0;\n  margin: 0;\n  border: 0;\n}\n\nlegend {\n  float: left;\n  width: 100%;\n  padding: 0;\n  margin-bottom: 0.5rem;\n  font-size: calc(1.275rem + 0.3vw);\n  line-height: inherit;\n}\n\n@media (min-width: 1200px) {\n  legend {\n    font-size: 1.5rem;\n  }\n}\n\nlegend + * {\n  clear: left;\n}\n\n::-webkit-datetime-edit-fields-wrapper,\n::-webkit-datetime-edit-text,\n::-webkit-datetime-edit-minute,\n::-webkit-datetime-edit-hour-field,\n::-webkit-datetime-edit-day-field,\n::-webkit-datetime-edit-month-field,\n::-webkit-datetime-edit-year-field {\n  padding: 0;\n}\n\n::-webkit-inner-spin-button {\n  height: auto;\n}\n\n[type=\"search\"] {\n  outline-offset: -2px;\n  -webkit-appearance: textfield;\n}\n\n/* rtl:raw:\n[type=\"tel\"],\n[type=\"url\"],\n[type=\"email\"],\n[type=\"number\"] {\n  direction: ltr;\n}\n*/\n::-webkit-search-decoration {\n  -webkit-appearance: none;\n}\n\n::-webkit-color-swatch-wrapper {\n  padding: 0;\n}\n\n::file-selector-button {\n  font: inherit;\n}\n\n::-webkit-file-upload-button {\n  font: inherit;\n  -webkit-appearance: button;\n}\n\noutput {\n  display: inline-block;\n}\n\niframe {\n  border: 0;\n}\n\nsummary {\n  display: list-item;\n  cursor: pointer;\n}\n\nprogress {\n  vertical-align: baseline;\n}\n\n[hidden] {\n  display: none !important;\n}\n\n.lead {\n  font-size: 1.25rem;\n  font-weight: 300;\n}\n\n.display-1 {\n  font-size: calc(1.625rem + 4.5vw);\n  font-weight: 300;\n  line-height: 1.2;\n}\n\n@media (min-width: 1200px) {\n  .display-1 {\n    font-size: 5rem;\n  }\n}\n\n.display-2 {\n  font-size: calc(1.575rem + 3.9vw);\n  font-weight: 300;\n  line-height: 1.2;\n}\n\n@media (min-width: 1200px) {\n  .display-2 {\n    font-size: 4.5rem;\n  }\n}\n\n.display-3 {\n  font-size: calc(1.525rem + 3.3vw);\n  font-weight: 300;\n  line-height: 1.2;\n}\n\n@media (min-width: 1200px) {\n  .display-3 {\n    font-size: 4rem;\n  }\n}\n\n.display-4 {\n  font-size: calc(1.475rem + 2.7vw);\n  font-weight: 300;\n  line-height: 1.2;\n}\n\n@media (min-width: 1200px) {\n  .display-4 {\n    font-size: 3.5rem;\n  }\n}\n\n.display-5 {\n  font-size: calc(1.425rem + 2.1vw);\n  font-weight: 300;\n  line-height: 1.2;\n}\n\n@media (min-width: 1200px) {\n  .display-5 {\n    font-size: 3rem;\n  }\n}\n\n.display-6 {\n  font-size: calc(1.375rem + 1.5vw);\n  font-weight: 300;\n  line-height: 1.2;\n}\n\n@media (min-width: 1200px) {\n  .display-6 {\n    font-size: 2.5rem;\n  }\n}\n\n.list-unstyled {\n  padding-left: 0;\n  list-style: none;\n}\n\n.list-inline {\n  padding-left: 0;\n  list-style: none;\n}\n\n.list-inline-item {\n  display: inline-block;\n}\n\n.list-inline-item:not(:last-child) {\n  margin-right: 0.5rem;\n}\n\n.initialism {\n  font-size: 0.875em;\n  text-transform: uppercase;\n}\n\n.blockquote {\n  margin-bottom: 1rem;\n  font-size: 1.25rem;\n}\n\n.blockquote > :last-child {\n  margin-bottom: 0;\n}\n\n.blockquote-footer {\n  margin-top: -1rem;\n  margin-bottom: 1rem;\n  font-size: 0.875em;\n  color: #868e96;\n}\n\n.blockquote-footer::before {\n  content: \"\\2014\\00A0\";\n}\n\n.img-fluid {\n  max-width: 100%;\n  height: auto;\n}\n\n.img-thumbnail {\n  padding: 0.25rem;\n  background-color: #fff;\n  border: 1px solid #dee2e6;\n  max-width: 100%;\n  height: auto;\n}\n\n.figure {\n  display: inline-block;\n}\n\n.figure-img {\n  margin-bottom: 0.5rem;\n  line-height: 1;\n}\n\n.figure-caption {\n  font-size: 0.875em;\n  color: #868e96;\n}\n\n.container,\n.container-fluid,\n.container-sm,\n.container-md,\n.container-lg,\n.container-xl,\n.container-xxl {\n  width: 100%;\n  padding-right: var(--bs-gutter-x, 0.75rem);\n  padding-left: var(--bs-gutter-x, 0.75rem);\n  margin-right: auto;\n  margin-left: auto;\n}\n\n@media (min-width: 576px) {\n  .container, .container-sm {\n    max-width: 540px;\n  }\n}\n\n@media (min-width: 768px) {\n  .container, .container-sm, .container-md {\n    max-width: 720px;\n  }\n}\n\n@media (min-width: 992px) {\n  .container, .container-sm, .container-md, .container-lg {\n    max-width: 960px;\n  }\n}\n\n@media (min-width: 1200px) {\n  .container, .container-sm, .container-md, .container-lg, .container-xl {\n    max-width: 1140px;\n  }\n}\n\n@media (min-width: 1400px) {\n  .container, .container-sm, .container-md, .container-lg, .container-xl, .container-xxl {\n    max-width: 1320px;\n  }\n}\n\n.row {\n  --bs-gutter-x: 1.5rem;\n  --bs-gutter-y: 0;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n  flex-wrap: wrap;\n  margin-top: calc(-1 * var(--bs-gutter-y));\n  margin-right: calc(-.5 * var(--bs-gutter-x));\n  margin-left: calc(-.5 * var(--bs-gutter-x));\n}\n\n.row > * {\n  -ms-flex-negative: 0;\n  flex-shrink: 0;\n  width: 100%;\n  max-width: 100%;\n  padding-right: calc(var(--bs-gutter-x) * .5);\n  padding-left: calc(var(--bs-gutter-x) * .5);\n  margin-top: var(--bs-gutter-y);\n}\n\n.col {\n  -ms-flex: 1 0 0%;\n  flex: 1 0 0%;\n}\n\n.row-cols-auto > * {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: auto;\n}\n\n.row-cols-1 > * {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 100%;\n}\n\n.row-cols-2 > * {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 50%;\n}\n\n.row-cols-3 > * {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 33.333333%;\n}\n\n.row-cols-4 > * {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 25%;\n}\n\n.row-cols-5 > * {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 20%;\n}\n\n.row-cols-6 > * {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 16.666667%;\n}\n\n.col-auto {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: auto;\n}\n\n.col-1 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 8.333333%;\n}\n\n.col-2 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 16.666667%;\n}\n\n.col-3 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 25%;\n}\n\n.col-4 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 33.333333%;\n}\n\n.col-5 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 41.666667%;\n}\n\n.col-6 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 50%;\n}\n\n.col-7 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 58.333333%;\n}\n\n.col-8 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 66.666667%;\n}\n\n.col-9 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 75%;\n}\n\n.col-10 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 83.333333%;\n}\n\n.col-11 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 91.666667%;\n}\n\n.col-12 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 100%;\n}\n\n.offset-1 {\n  margin-left: 8.333333%;\n}\n\n.offset-2 {\n  margin-left: 16.666667%;\n}\n\n.offset-3 {\n  margin-left: 25%;\n}\n\n.offset-4 {\n  margin-left: 33.333333%;\n}\n\n.offset-5 {\n  margin-left: 41.666667%;\n}\n\n.offset-6 {\n  margin-left: 50%;\n}\n\n.offset-7 {\n  margin-left: 58.333333%;\n}\n\n.offset-8 {\n  margin-left: 66.666667%;\n}\n\n.offset-9 {\n  margin-left: 75%;\n}\n\n.offset-10 {\n  margin-left: 83.333333%;\n}\n\n.offset-11 {\n  margin-left: 91.666667%;\n}\n\n.g-0,\n.gx-0 {\n  --bs-gutter-x: 0;\n}\n\n.g-0,\n.gy-0 {\n  --bs-gutter-y: 0;\n}\n\n.g-1,\n.gx-1 {\n  --bs-gutter-x: 0.25rem;\n}\n\n.g-1,\n.gy-1 {\n  --bs-gutter-y: 0.25rem;\n}\n\n.g-2,\n.gx-2 {\n  --bs-gutter-x: 0.5rem;\n}\n\n.g-2,\n.gy-2 {\n  --bs-gutter-y: 0.5rem;\n}\n\n.g-3,\n.gx-3 {\n  --bs-gutter-x: 1rem;\n}\n\n.g-3,\n.gy-3 {\n  --bs-gutter-y: 1rem;\n}\n\n.g-4,\n.gx-4 {\n  --bs-gutter-x: 1.5rem;\n}\n\n.g-4,\n.gy-4 {\n  --bs-gutter-y: 1.5rem;\n}\n\n.g-5,\n.gx-5 {\n  --bs-gutter-x: 3rem;\n}\n\n.g-5,\n.gy-5 {\n  --bs-gutter-y: 3rem;\n}\n\n@media (min-width: 576px) {\n  .col-sm {\n    -ms-flex: 1 0 0%;\n    flex: 1 0 0%;\n  }\n  .row-cols-sm-auto > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .row-cols-sm-1 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .row-cols-sm-2 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .row-cols-sm-3 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 33.333333%;\n  }\n  .row-cols-sm-4 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .row-cols-sm-5 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 20%;\n  }\n  .row-cols-sm-6 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 16.666667%;\n  }\n  .col-sm-auto {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .col-sm-1 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 8.333333%;\n  }\n  .col-sm-2 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 16.666667%;\n  }\n  .col-sm-3 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .col-sm-4 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 33.333333%;\n  }\n  .col-sm-5 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 41.666667%;\n  }\n  .col-sm-6 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .col-sm-7 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 58.333333%;\n  }\n  .col-sm-8 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 66.666667%;\n  }\n  .col-sm-9 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 75%;\n  }\n  .col-sm-10 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 83.333333%;\n  }\n  .col-sm-11 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 91.666667%;\n  }\n  .col-sm-12 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .offset-sm-0 {\n    margin-left: 0;\n  }\n  .offset-sm-1 {\n    margin-left: 8.333333%;\n  }\n  .offset-sm-2 {\n    margin-left: 16.666667%;\n  }\n  .offset-sm-3 {\n    margin-left: 25%;\n  }\n  .offset-sm-4 {\n    margin-left: 33.333333%;\n  }\n  .offset-sm-5 {\n    margin-left: 41.666667%;\n  }\n  .offset-sm-6 {\n    margin-left: 50%;\n  }\n  .offset-sm-7 {\n    margin-left: 58.333333%;\n  }\n  .offset-sm-8 {\n    margin-left: 66.666667%;\n  }\n  .offset-sm-9 {\n    margin-left: 75%;\n  }\n  .offset-sm-10 {\n    margin-left: 83.333333%;\n  }\n  .offset-sm-11 {\n    margin-left: 91.666667%;\n  }\n  .g-sm-0,\n  .gx-sm-0 {\n    --bs-gutter-x: 0;\n  }\n  .g-sm-0,\n  .gy-sm-0 {\n    --bs-gutter-y: 0;\n  }\n  .g-sm-1,\n  .gx-sm-1 {\n    --bs-gutter-x: 0.25rem;\n  }\n  .g-sm-1,\n  .gy-sm-1 {\n    --bs-gutter-y: 0.25rem;\n  }\n  .g-sm-2,\n  .gx-sm-2 {\n    --bs-gutter-x: 0.5rem;\n  }\n  .g-sm-2,\n  .gy-sm-2 {\n    --bs-gutter-y: 0.5rem;\n  }\n  .g-sm-3,\n  .gx-sm-3 {\n    --bs-gutter-x: 1rem;\n  }\n  .g-sm-3,\n  .gy-sm-3 {\n    --bs-gutter-y: 1rem;\n  }\n  .g-sm-4,\n  .gx-sm-4 {\n    --bs-gutter-x: 1.5rem;\n  }\n  .g-sm-4,\n  .gy-sm-4 {\n    --bs-gutter-y: 1.5rem;\n  }\n  .g-sm-5,\n  .gx-sm-5 {\n    --bs-gutter-x: 3rem;\n  }\n  .g-sm-5,\n  .gy-sm-5 {\n    --bs-gutter-y: 3rem;\n  }\n}\n\n@media (min-width: 768px) {\n  .col-md {\n    -ms-flex: 1 0 0%;\n    flex: 1 0 0%;\n  }\n  .row-cols-md-auto > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .row-cols-md-1 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .row-cols-md-2 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .row-cols-md-3 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 33.333333%;\n  }\n  .row-cols-md-4 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .row-cols-md-5 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 20%;\n  }\n  .row-cols-md-6 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 16.666667%;\n  }\n  .col-md-auto {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .col-md-1 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 8.333333%;\n  }\n  .col-md-2 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 16.666667%;\n  }\n  .col-md-3 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .col-md-4 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 33.333333%;\n  }\n  .col-md-5 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 41.666667%;\n  }\n  .col-md-6 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .col-md-7 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 58.333333%;\n  }\n  .col-md-8 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 66.666667%;\n  }\n  .col-md-9 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 75%;\n  }\n  .col-md-10 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 83.333333%;\n  }\n  .col-md-11 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 91.666667%;\n  }\n  .col-md-12 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .offset-md-0 {\n    margin-left: 0;\n  }\n  .offset-md-1 {\n    margin-left: 8.333333%;\n  }\n  .offset-md-2 {\n    margin-left: 16.666667%;\n  }\n  .offset-md-3 {\n    margin-left: 25%;\n  }\n  .offset-md-4 {\n    margin-left: 33.333333%;\n  }\n  .offset-md-5 {\n    margin-left: 41.666667%;\n  }\n  .offset-md-6 {\n    margin-left: 50%;\n  }\n  .offset-md-7 {\n    margin-left: 58.333333%;\n  }\n  .offset-md-8 {\n    margin-left: 66.666667%;\n  }\n  .offset-md-9 {\n    margin-left: 75%;\n  }\n  .offset-md-10 {\n    margin-left: 83.333333%;\n  }\n  .offset-md-11 {\n    margin-left: 91.666667%;\n  }\n  .g-md-0,\n  .gx-md-0 {\n    --bs-gutter-x: 0;\n  }\n  .g-md-0,\n  .gy-md-0 {\n    --bs-gutter-y: 0;\n  }\n  .g-md-1,\n  .gx-md-1 {\n    --bs-gutter-x: 0.25rem;\n  }\n  .g-md-1,\n  .gy-md-1 {\n    --bs-gutter-y: 0.25rem;\n  }\n  .g-md-2,\n  .gx-md-2 {\n    --bs-gutter-x: 0.5rem;\n  }\n  .g-md-2,\n  .gy-md-2 {\n    --bs-gutter-y: 0.5rem;\n  }\n  .g-md-3,\n  .gx-md-3 {\n    --bs-gutter-x: 1rem;\n  }\n  .g-md-3,\n  .gy-md-3 {\n    --bs-gutter-y: 1rem;\n  }\n  .g-md-4,\n  .gx-md-4 {\n    --bs-gutter-x: 1.5rem;\n  }\n  .g-md-4,\n  .gy-md-4 {\n    --bs-gutter-y: 1.5rem;\n  }\n  .g-md-5,\n  .gx-md-5 {\n    --bs-gutter-x: 3rem;\n  }\n  .g-md-5,\n  .gy-md-5 {\n    --bs-gutter-y: 3rem;\n  }\n}\n\n@media (min-width: 992px) {\n  .col-lg {\n    -ms-flex: 1 0 0%;\n    flex: 1 0 0%;\n  }\n  .row-cols-lg-auto > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .row-cols-lg-1 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .row-cols-lg-2 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .row-cols-lg-3 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 33.333333%;\n  }\n  .row-cols-lg-4 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .row-cols-lg-5 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 20%;\n  }\n  .row-cols-lg-6 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 16.666667%;\n  }\n  .col-lg-auto {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .col-lg-1 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 8.333333%;\n  }\n  .col-lg-2 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 16.666667%;\n  }\n  .col-lg-3 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .col-lg-4 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 33.333333%;\n  }\n  .col-lg-5 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 41.666667%;\n  }\n  .col-lg-6 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .col-lg-7 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 58.333333%;\n  }\n  .col-lg-8 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 66.666667%;\n  }\n  .col-lg-9 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 75%;\n  }\n  .col-lg-10 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 83.333333%;\n  }\n  .col-lg-11 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 91.666667%;\n  }\n  .col-lg-12 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .offset-lg-0 {\n    margin-left: 0;\n  }\n  .offset-lg-1 {\n    margin-left: 8.333333%;\n  }\n  .offset-lg-2 {\n    margin-left: 16.666667%;\n  }\n  .offset-lg-3 {\n    margin-left: 25%;\n  }\n  .offset-lg-4 {\n    margin-left: 33.333333%;\n  }\n  .offset-lg-5 {\n    margin-left: 41.666667%;\n  }\n  .offset-lg-6 {\n    margin-left: 50%;\n  }\n  .offset-lg-7 {\n    margin-left: 58.333333%;\n  }\n  .offset-lg-8 {\n    margin-left: 66.666667%;\n  }\n  .offset-lg-9 {\n    margin-left: 75%;\n  }\n  .offset-lg-10 {\n    margin-left: 83.333333%;\n  }\n  .offset-lg-11 {\n    margin-left: 91.666667%;\n  }\n  .g-lg-0,\n  .gx-lg-0 {\n    --bs-gutter-x: 0;\n  }\n  .g-lg-0,\n  .gy-lg-0 {\n    --bs-gutter-y: 0;\n  }\n  .g-lg-1,\n  .gx-lg-1 {\n    --bs-gutter-x: 0.25rem;\n  }\n  .g-lg-1,\n  .gy-lg-1 {\n    --bs-gutter-y: 0.25rem;\n  }\n  .g-lg-2,\n  .gx-lg-2 {\n    --bs-gutter-x: 0.5rem;\n  }\n  .g-lg-2,\n  .gy-lg-2 {\n    --bs-gutter-y: 0.5rem;\n  }\n  .g-lg-3,\n  .gx-lg-3 {\n    --bs-gutter-x: 1rem;\n  }\n  .g-lg-3,\n  .gy-lg-3 {\n    --bs-gutter-y: 1rem;\n  }\n  .g-lg-4,\n  .gx-lg-4 {\n    --bs-gutter-x: 1.5rem;\n  }\n  .g-lg-4,\n  .gy-lg-4 {\n    --bs-gutter-y: 1.5rem;\n  }\n  .g-lg-5,\n  .gx-lg-5 {\n    --bs-gutter-x: 3rem;\n  }\n  .g-lg-5,\n  .gy-lg-5 {\n    --bs-gutter-y: 3rem;\n  }\n}\n\n@media (min-width: 1200px) {\n  .col-xl {\n    -ms-flex: 1 0 0%;\n    flex: 1 0 0%;\n  }\n  .row-cols-xl-auto > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .row-cols-xl-1 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .row-cols-xl-2 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .row-cols-xl-3 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 33.333333%;\n  }\n  .row-cols-xl-4 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .row-cols-xl-5 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 20%;\n  }\n  .row-cols-xl-6 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 16.666667%;\n  }\n  .col-xl-auto {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .col-xl-1 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 8.333333%;\n  }\n  .col-xl-2 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 16.666667%;\n  }\n  .col-xl-3 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .col-xl-4 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 33.333333%;\n  }\n  .col-xl-5 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 41.666667%;\n  }\n  .col-xl-6 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .col-xl-7 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 58.333333%;\n  }\n  .col-xl-8 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 66.666667%;\n  }\n  .col-xl-9 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 75%;\n  }\n  .col-xl-10 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 83.333333%;\n  }\n  .col-xl-11 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 91.666667%;\n  }\n  .col-xl-12 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .offset-xl-0 {\n    margin-left: 0;\n  }\n  .offset-xl-1 {\n    margin-left: 8.333333%;\n  }\n  .offset-xl-2 {\n    margin-left: 16.666667%;\n  }\n  .offset-xl-3 {\n    margin-left: 25%;\n  }\n  .offset-xl-4 {\n    margin-left: 33.333333%;\n  }\n  .offset-xl-5 {\n    margin-left: 41.666667%;\n  }\n  .offset-xl-6 {\n    margin-left: 50%;\n  }\n  .offset-xl-7 {\n    margin-left: 58.333333%;\n  }\n  .offset-xl-8 {\n    margin-left: 66.666667%;\n  }\n  .offset-xl-9 {\n    margin-left: 75%;\n  }\n  .offset-xl-10 {\n    margin-left: 83.333333%;\n  }\n  .offset-xl-11 {\n    margin-left: 91.666667%;\n  }\n  .g-xl-0,\n  .gx-xl-0 {\n    --bs-gutter-x: 0;\n  }\n  .g-xl-0,\n  .gy-xl-0 {\n    --bs-gutter-y: 0;\n  }\n  .g-xl-1,\n  .gx-xl-1 {\n    --bs-gutter-x: 0.25rem;\n  }\n  .g-xl-1,\n  .gy-xl-1 {\n    --bs-gutter-y: 0.25rem;\n  }\n  .g-xl-2,\n  .gx-xl-2 {\n    --bs-gutter-x: 0.5rem;\n  }\n  .g-xl-2,\n  .gy-xl-2 {\n    --bs-gutter-y: 0.5rem;\n  }\n  .g-xl-3,\n  .gx-xl-3 {\n    --bs-gutter-x: 1rem;\n  }\n  .g-xl-3,\n  .gy-xl-3 {\n    --bs-gutter-y: 1rem;\n  }\n  .g-xl-4,\n  .gx-xl-4 {\n    --bs-gutter-x: 1.5rem;\n  }\n  .g-xl-4,\n  .gy-xl-4 {\n    --bs-gutter-y: 1.5rem;\n  }\n  .g-xl-5,\n  .gx-xl-5 {\n    --bs-gutter-x: 3rem;\n  }\n  .g-xl-5,\n  .gy-xl-5 {\n    --bs-gutter-y: 3rem;\n  }\n}\n\n@media (min-width: 1400px) {\n  .col-xxl {\n    -ms-flex: 1 0 0%;\n    flex: 1 0 0%;\n  }\n  .row-cols-xxl-auto > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .row-cols-xxl-1 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .row-cols-xxl-2 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .row-cols-xxl-3 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 33.333333%;\n  }\n  .row-cols-xxl-4 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .row-cols-xxl-5 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 20%;\n  }\n  .row-cols-xxl-6 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 16.666667%;\n  }\n  .col-xxl-auto {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .col-xxl-1 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 8.333333%;\n  }\n  .col-xxl-2 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 16.666667%;\n  }\n  .col-xxl-3 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .col-xxl-4 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 33.333333%;\n  }\n  .col-xxl-5 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 41.666667%;\n  }\n  .col-xxl-6 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .col-xxl-7 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 58.333333%;\n  }\n  .col-xxl-8 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 66.666667%;\n  }\n  .col-xxl-9 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 75%;\n  }\n  .col-xxl-10 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 83.333333%;\n  }\n  .col-xxl-11 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 91.666667%;\n  }\n  .col-xxl-12 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .offset-xxl-0 {\n    margin-left: 0;\n  }\n  .offset-xxl-1 {\n    margin-left: 8.333333%;\n  }\n  .offset-xxl-2 {\n    margin-left: 16.666667%;\n  }\n  .offset-xxl-3 {\n    margin-left: 25%;\n  }\n  .offset-xxl-4 {\n    margin-left: 33.333333%;\n  }\n  .offset-xxl-5 {\n    margin-left: 41.666667%;\n  }\n  .offset-xxl-6 {\n    margin-left: 50%;\n  }\n  .offset-xxl-7 {\n    margin-left: 58.333333%;\n  }\n  .offset-xxl-8 {\n    margin-left: 66.666667%;\n  }\n  .offset-xxl-9 {\n    margin-left: 75%;\n  }\n  .offset-xxl-10 {\n    margin-left: 83.333333%;\n  }\n  .offset-xxl-11 {\n    margin-left: 91.666667%;\n  }\n  .g-xxl-0,\n  .gx-xxl-0 {\n    --bs-gutter-x: 0;\n  }\n  .g-xxl-0,\n  .gy-xxl-0 {\n    --bs-gutter-y: 0;\n  }\n  .g-xxl-1,\n  .gx-xxl-1 {\n    --bs-gutter-x: 0.25rem;\n  }\n  .g-xxl-1,\n  .gy-xxl-1 {\n    --bs-gutter-y: 0.25rem;\n  }\n  .g-xxl-2,\n  .gx-xxl-2 {\n    --bs-gutter-x: 0.5rem;\n  }\n  .g-xxl-2,\n  .gy-xxl-2 {\n    --bs-gutter-y: 0.5rem;\n  }\n  .g-xxl-3,\n  .gx-xxl-3 {\n    --bs-gutter-x: 1rem;\n  }\n  .g-xxl-3,\n  .gy-xxl-3 {\n    --bs-gutter-y: 1rem;\n  }\n  .g-xxl-4,\n  .gx-xxl-4 {\n    --bs-gutter-x: 1.5rem;\n  }\n  .g-xxl-4,\n  .gy-xxl-4 {\n    --bs-gutter-y: 1.5rem;\n  }\n  .g-xxl-5,\n  .gx-xxl-5 {\n    --bs-gutter-x: 3rem;\n  }\n  .g-xxl-5,\n  .gy-xxl-5 {\n    --bs-gutter-y: 3rem;\n  }\n}\n\n.table {\n  --bs-table-bg: transparent;\n  --bs-table-accent-bg: transparent;\n  --bs-table-striped-color: #373a3c;\n  --bs-table-striped-bg: rgba(0, 0, 0, 0.05);\n  --bs-table-active-color: #373a3c;\n  --bs-table-active-bg: rgba(0, 0, 0, 0.1);\n  --bs-table-hover-color: #373a3c;\n  --bs-table-hover-bg: rgba(0, 0, 0, 0.075);\n  width: 100%;\n  margin-bottom: 1rem;\n  color: #373a3c;\n  vertical-align: top;\n  border-color: #dee2e6;\n}\n\n.table > :not(caption) > * > * {\n  padding: 0.5rem 0.5rem;\n  background-color: var(--bs-table-bg);\n  border-bottom-width: 1px;\n  box-shadow: inset 0 0 0 9999px var(--bs-table-accent-bg);\n}\n\n.table > tbody {\n  vertical-align: inherit;\n}\n\n.table > thead {\n  vertical-align: bottom;\n}\n\n.table > :not(:first-child) {\n  border-top: 2px solid currentColor;\n}\n\n.caption-top {\n  caption-side: top;\n}\n\n.table-sm > :not(caption) > * > * {\n  padding: 0.25rem 0.25rem;\n}\n\n.table-bordered > :not(caption) > * {\n  border-width: 1px 0;\n}\n\n.table-bordered > :not(caption) > * > * {\n  border-width: 0 1px;\n}\n\n.table-borderless > :not(caption) > * > * {\n  border-bottom-width: 0;\n}\n\n.table-borderless > :not(:first-child) {\n  border-top-width: 0;\n}\n\n.table-striped > tbody > tr:nth-of-type(odd) > * {\n  --bs-table-accent-bg: var(--bs-table-striped-bg);\n  color: var(--bs-table-striped-color);\n}\n\n.table-active {\n  --bs-table-accent-bg: var(--bs-table-active-bg);\n  color: var(--bs-table-active-color);\n}\n\n.table-hover > tbody > tr:hover > * {\n  --bs-table-accent-bg: var(--bs-table-hover-bg);\n  color: var(--bs-table-hover-color);\n}\n\n.table-primary {\n  --bs-table-bg: #d4e6f9;\n  --bs-table-striped-bg: #c9dbed;\n  --bs-table-striped-color: #000;\n  --bs-table-active-bg: #bfcfe0;\n  --bs-table-active-color: #000;\n  --bs-table-hover-bg: #c4d5e6;\n  --bs-table-hover-color: #000;\n  color: #000;\n  border-color: #bfcfe0;\n}\n\n.table-secondary {\n  --bs-table-bg: #d7d8d8;\n  --bs-table-striped-bg: #cccdcd;\n  --bs-table-striped-color: #000;\n  --bs-table-active-bg: #c2c2c2;\n  --bs-table-active-color: #000;\n  --bs-table-hover-bg: #c7c8c8;\n  --bs-table-hover-color: #000;\n  color: #000;\n  border-color: #c2c2c2;\n}\n\n.table-success {\n  --bs-table-bg: #d9f0d1;\n  --bs-table-striped-bg: #cee4c7;\n  --bs-table-striped-color: #000;\n  --bs-table-active-bg: #c3d8bc;\n  --bs-table-active-color: #000;\n  --bs-table-hover-bg: #c9dec1;\n  --bs-table-hover-color: #000;\n  color: #000;\n  border-color: #c3d8bc;\n}\n\n.table-info {\n  --bs-table-bg: #ebddf1;\n  --bs-table-striped-bg: #dfd2e5;\n  --bs-table-striped-color: #000;\n  --bs-table-active-bg: #d4c7d9;\n  --bs-table-active-color: #000;\n  --bs-table-hover-bg: #d9ccdf;\n  --bs-table-hover-color: #000;\n  color: #000;\n  border-color: #d4c7d9;\n}\n\n.table-warning {\n  --bs-table-bg: #ffe3d1;\n  --bs-table-striped-bg: #f2d8c7;\n  --bs-table-striped-color: #000;\n  --bs-table-active-bg: #e6ccbc;\n  --bs-table-active-color: #000;\n  --bs-table-hover-bg: #ecd2c1;\n  --bs-table-hover-color: #000;\n  color: #000;\n  border-color: #e6ccbc;\n}\n\n.table-danger {\n  --bs-table-bg: #ffccd7;\n  --bs-table-striped-bg: #f2c2cc;\n  --bs-table-striped-color: #000;\n  --bs-table-active-bg: #e6b8c2;\n  --bs-table-active-color: #000;\n  --bs-table-hover-bg: #ecbdc7;\n  --bs-table-hover-color: #000;\n  color: #000;\n  border-color: #e6b8c2;\n}\n\n.table-light {\n  --bs-table-bg: #f8f9fa;\n  --bs-table-striped-bg: #ecedee;\n  --bs-table-striped-color: #000;\n  --bs-table-active-bg: #dfe0e1;\n  --bs-table-active-color: #000;\n  --bs-table-hover-bg: #e5e6e7;\n  --bs-table-hover-color: #000;\n  color: #000;\n  border-color: #dfe0e1;\n}\n\n.table-dark {\n  --bs-table-bg: #373a3c;\n  --bs-table-striped-bg: #414446;\n  --bs-table-striped-color: #fff;\n  --bs-table-active-bg: #4b4e50;\n  --bs-table-active-color: #fff;\n  --bs-table-hover-bg: #46494b;\n  --bs-table-hover-color: #fff;\n  color: #fff;\n  border-color: #4b4e50;\n}\n\n.table-responsive {\n  overflow-x: auto;\n  -webkit-overflow-scrolling: touch;\n}\n\n@media (max-width: 575.98px) {\n  .table-responsive-sm {\n    overflow-x: auto;\n    -webkit-overflow-scrolling: touch;\n  }\n}\n\n@media (max-width: 767.98px) {\n  .table-responsive-md {\n    overflow-x: auto;\n    -webkit-overflow-scrolling: touch;\n  }\n}\n\n@media (max-width: 991.98px) {\n  .table-responsive-lg {\n    overflow-x: auto;\n    -webkit-overflow-scrolling: touch;\n  }\n}\n\n@media (max-width: 1199.98px) {\n  .table-responsive-xl {\n    overflow-x: auto;\n    -webkit-overflow-scrolling: touch;\n  }\n}\n\n@media (max-width: 1399.98px) {\n  .table-responsive-xxl {\n    overflow-x: auto;\n    -webkit-overflow-scrolling: touch;\n  }\n}\n\n.form-label {\n  margin-bottom: 0.5rem;\n}\n\n.col-form-label {\n  padding-top: calc(0.375rem + 1px);\n  padding-bottom: calc(0.375rem + 1px);\n  margin-bottom: 0;\n  font-size: inherit;\n  line-height: 1.5;\n}\n\n.col-form-label-lg {\n  padding-top: calc(0.5rem + 1px);\n  padding-bottom: calc(0.5rem + 1px);\n  font-size: 1.25rem;\n}\n\n.col-form-label-sm {\n  padding-top: calc(0.25rem + 1px);\n  padding-bottom: calc(0.25rem + 1px);\n  font-size: 0.875rem;\n}\n\n.form-text {\n  margin-top: 0.25rem;\n  font-size: 0.875em;\n  color: #868e96;\n}\n\n.form-control {\n  display: block;\n  width: 100%;\n  padding: 0.375rem 0.75rem;\n  font-size: 1rem;\n  font-weight: 400;\n  line-height: 1.5;\n  color: #373a3c;\n  background-color: #fff;\n  background-clip: padding-box;\n  border: 1px solid #ced4da;\n  -webkit-appearance: none;\n  -moz-appearance: none;\n  appearance: none;\n  border-radius: 0;\n  transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .form-control {\n    transition: none;\n  }\n}\n\n.form-control[type=\"file\"] {\n  overflow: hidden;\n}\n\n.form-control[type=\"file\"]:not(:disabled):not([readonly]) {\n  cursor: pointer;\n}\n\n.form-control:focus {\n  color: #373a3c;\n  background-color: #fff;\n  border-color: #93c0f1;\n  outline: 0;\n  box-shadow: 0 0 0 0.25rem rgba(39, 128, 227, 0.25);\n}\n\n.form-control::-webkit-date-and-time-value {\n  height: 1.5em;\n}\n\n.form-control::-webkit-input-placeholder {\n  color: #868e96;\n  opacity: 1;\n}\n\n.form-control::-moz-placeholder {\n  color: #868e96;\n  opacity: 1;\n}\n\n.form-control:-ms-input-placeholder {\n  color: #868e96;\n  opacity: 1;\n}\n\n.form-control::-ms-input-placeholder {\n  color: #868e96;\n  opacity: 1;\n}\n\n.form-control::placeholder {\n  color: #868e96;\n  opacity: 1;\n}\n\n.form-control:disabled, .form-control[readonly] {\n  background-color: #e9ecef;\n  opacity: 1;\n}\n\n.form-control::file-selector-button {\n  padding: 0.375rem 0.75rem;\n  margin: -0.375rem -0.75rem;\n  -webkit-margin-end: 0.75rem;\n  -moz-margin-end: 0.75rem;\n  margin-inline-end: 0.75rem;\n  color: #373a3c;\n  background-color: #e9ecef;\n  pointer-events: none;\n  border-color: inherit;\n  border-style: solid;\n  border-width: 0;\n  border-inline-end-width: 1px;\n  border-radius: 0;\n  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .form-control::file-selector-button {\n    transition: none;\n  }\n}\n\n.form-control:hover:not(:disabled):not([readonly])::file-selector-button {\n  background-color: #dde0e3;\n}\n\n.form-control::-webkit-file-upload-button {\n  padding: 0.375rem 0.75rem;\n  margin: -0.375rem -0.75rem;\n  -webkit-margin-end: 0.75rem;\n  margin-inline-end: 0.75rem;\n  color: #373a3c;\n  background-color: #e9ecef;\n  pointer-events: none;\n  border-color: inherit;\n  border-style: solid;\n  border-width: 0;\n  border-inline-end-width: 1px;\n  border-radius: 0;\n  -webkit-transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .form-control::-webkit-file-upload-button {\n    -webkit-transition: none;\n    transition: none;\n  }\n}\n\n.form-control:hover:not(:disabled):not([readonly])::-webkit-file-upload-button {\n  background-color: #dde0e3;\n}\n\n.form-control-plaintext {\n  display: block;\n  width: 100%;\n  padding: 0.375rem 0;\n  margin-bottom: 0;\n  line-height: 1.5;\n  color: #373a3c;\n  background-color: transparent;\n  border: solid transparent;\n  border-width: 1px 0;\n}\n\n.form-control-plaintext.form-control-sm, .form-control-plaintext.form-control-lg {\n  padding-right: 0;\n  padding-left: 0;\n}\n\n.form-control-sm {\n  min-height: calc(1.5em + 0.5rem + 2px);\n  padding: 0.25rem 0.5rem;\n  font-size: 0.875rem;\n}\n\n.form-control-sm::file-selector-button {\n  padding: 0.25rem 0.5rem;\n  margin: -0.25rem -0.5rem;\n  -webkit-margin-end: 0.5rem;\n  -moz-margin-end: 0.5rem;\n  margin-inline-end: 0.5rem;\n}\n\n.form-control-sm::-webkit-file-upload-button {\n  padding: 0.25rem 0.5rem;\n  margin: -0.25rem -0.5rem;\n  -webkit-margin-end: 0.5rem;\n  margin-inline-end: 0.5rem;\n}\n\n.form-control-lg {\n  min-height: calc(1.5em + 1rem + 2px);\n  padding: 0.5rem 1rem;\n  font-size: 1.25rem;\n}\n\n.form-control-lg::file-selector-button {\n  padding: 0.5rem 1rem;\n  margin: -0.5rem -1rem;\n  -webkit-margin-end: 1rem;\n  -moz-margin-end: 1rem;\n  margin-inline-end: 1rem;\n}\n\n.form-control-lg::-webkit-file-upload-button {\n  padding: 0.5rem 1rem;\n  margin: -0.5rem -1rem;\n  -webkit-margin-end: 1rem;\n  margin-inline-end: 1rem;\n}\n\ntextarea.form-control {\n  min-height: calc(1.5em + 0.75rem + 2px);\n}\n\ntextarea.form-control-sm {\n  min-height: calc(1.5em + 0.5rem + 2px);\n}\n\ntextarea.form-control-lg {\n  min-height: calc(1.5em + 1rem + 2px);\n}\n\n.form-control-color {\n  width: 3rem;\n  height: auto;\n  padding: 0.375rem;\n}\n\n.form-control-color:not(:disabled):not([readonly]) {\n  cursor: pointer;\n}\n\n.form-control-color::-moz-color-swatch {\n  height: 1.5em;\n}\n\n.form-control-color::-webkit-color-swatch {\n  height: 1.5em;\n}\n\n.form-select {\n  display: block;\n  width: 100%;\n  padding: 0.375rem 2.25rem 0.375rem 0.75rem;\n  -moz-padding-start: calc(0.75rem - 3px);\n  font-size: 1rem;\n  font-weight: 400;\n  line-height: 1.5;\n  color: #373a3c;\n  background-color: #fff;\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23373a3c' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e\");\n  background-repeat: no-repeat;\n  background-position: right 0.75rem center;\n  background-size: 16px 12px;\n  border: 1px solid #ced4da;\n  border-radius: 0;\n  transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n  -webkit-appearance: none;\n  -moz-appearance: none;\n  appearance: none;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .form-select {\n    transition: none;\n  }\n}\n\n.form-select:focus {\n  border-color: #93c0f1;\n  outline: 0;\n  box-shadow: 0 0 0 0.25rem rgba(39, 128, 227, 0.25);\n}\n\n.form-select[multiple], .form-select[size]:not([size=\"1\"]) {\n  padding-right: 0.75rem;\n  background-image: none;\n}\n\n.form-select:disabled {\n  background-color: #e9ecef;\n}\n\n.form-select:-moz-focusring {\n  color: transparent;\n  text-shadow: 0 0 0 #373a3c;\n}\n\n.form-select-sm {\n  padding-top: 0.25rem;\n  padding-bottom: 0.25rem;\n  padding-left: 0.5rem;\n  font-size: 0.875rem;\n}\n\n.form-select-lg {\n  padding-top: 0.5rem;\n  padding-bottom: 0.5rem;\n  padding-left: 1rem;\n  font-size: 1.25rem;\n}\n\n.form-check {\n  display: block;\n  min-height: 1.5rem;\n  padding-left: 1.5em;\n  margin-bottom: 0.125rem;\n}\n\n.form-check .form-check-input {\n  float: left;\n  margin-left: -1.5em;\n}\n\n.form-check-input {\n  width: 1em;\n  height: 1em;\n  margin-top: 0.25em;\n  vertical-align: top;\n  background-color: #fff;\n  background-repeat: no-repeat;\n  background-position: center;\n  background-size: contain;\n  border: 1px solid rgba(0, 0, 0, 0.25);\n  -webkit-appearance: none;\n  -moz-appearance: none;\n  appearance: none;\n  -webkit-print-color-adjust: exact;\n  color-adjust: exact;\n}\n\n.form-check-input[type=\"radio\"] {\n  border-radius: 50%;\n}\n\n.form-check-input:active {\n  -webkit-filter: brightness(90%);\n  filter: brightness(90%);\n}\n\n.form-check-input:focus {\n  border-color: #93c0f1;\n  outline: 0;\n  box-shadow: 0 0 0 0.25rem rgba(39, 128, 227, 0.25);\n}\n\n.form-check-input:checked {\n  background-color: #2780e3;\n  border-color: #2780e3;\n}\n\n.form-check-input:checked[type=\"checkbox\"] {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10l3 3l6-6'/%3e%3c/svg%3e\");\n}\n\n.form-check-input:checked[type=\"radio\"] {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='2' fill='%23fff'/%3e%3c/svg%3e\");\n}\n\n.form-check-input[type=\"checkbox\"]:indeterminate {\n  background-color: #2780e3;\n  border-color: #2780e3;\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10h8'/%3e%3c/svg%3e\");\n}\n\n.form-check-input:disabled {\n  pointer-events: none;\n  -webkit-filter: none;\n  filter: none;\n  opacity: 0.5;\n}\n\n.form-check-input[disabled] ~ .form-check-label, .form-check-input:disabled ~ .form-check-label {\n  opacity: 0.5;\n}\n\n.form-switch {\n  padding-left: 2.5em;\n}\n\n.form-switch .form-check-input {\n  width: 2em;\n  margin-left: -2.5em;\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%280, 0, 0, 0.25%29'/%3e%3c/svg%3e\");\n  background-position: left center;\n  transition: background-position 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .form-switch .form-check-input {\n    transition: none;\n  }\n}\n\n.form-switch .form-check-input:focus {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%2393c0f1'/%3e%3c/svg%3e\");\n}\n\n.form-switch .form-check-input:checked {\n  background-position: right center;\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e\");\n}\n\n.form-check-inline {\n  display: inline-block;\n  margin-right: 1rem;\n}\n\n.btn-check {\n  position: absolute;\n  clip: rect(0, 0, 0, 0);\n  pointer-events: none;\n}\n\n.btn-check[disabled] + .btn, .btn-check:disabled + .btn {\n  pointer-events: none;\n  -webkit-filter: none;\n  filter: none;\n  opacity: 0.65;\n}\n\n.form-range {\n  width: 100%;\n  height: 1.5rem;\n  padding: 0;\n  background-color: transparent;\n  -webkit-appearance: none;\n  -moz-appearance: none;\n  appearance: none;\n}\n\n.form-range:focus {\n  outline: 0;\n}\n\n.form-range:focus::-webkit-slider-thumb {\n  box-shadow: 0 0 0 1px #fff, 0 0 0 0.25rem rgba(39, 128, 227, 0.25);\n}\n\n.form-range:focus::-moz-range-thumb {\n  box-shadow: 0 0 0 1px #fff, 0 0 0 0.25rem rgba(39, 128, 227, 0.25);\n}\n\n.form-range::-moz-focus-outer {\n  border: 0;\n}\n\n.form-range::-webkit-slider-thumb {\n  width: 1rem;\n  height: 1rem;\n  margin-top: -0.25rem;\n  background-color: #2780e3;\n  border: 0;\n  -webkit-transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n  transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n  -webkit-appearance: none;\n  appearance: none;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .form-range::-webkit-slider-thumb {\n    -webkit-transition: none;\n    transition: none;\n  }\n}\n\n.form-range::-webkit-slider-thumb:active {\n  background-color: #bed9f7;\n}\n\n.form-range::-webkit-slider-runnable-track {\n  width: 100%;\n  height: 0.5rem;\n  color: transparent;\n  cursor: pointer;\n  background-color: #dee2e6;\n  border-color: transparent;\n}\n\n.form-range::-moz-range-thumb {\n  width: 1rem;\n  height: 1rem;\n  background-color: #2780e3;\n  border: 0;\n  -moz-transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n  transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n  -moz-appearance: none;\n  appearance: none;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .form-range::-moz-range-thumb {\n    -moz-transition: none;\n    transition: none;\n  }\n}\n\n.form-range::-moz-range-thumb:active {\n  background-color: #bed9f7;\n}\n\n.form-range::-moz-range-track {\n  width: 100%;\n  height: 0.5rem;\n  color: transparent;\n  cursor: pointer;\n  background-color: #dee2e6;\n  border-color: transparent;\n}\n\n.form-range:disabled {\n  pointer-events: none;\n}\n\n.form-range:disabled::-webkit-slider-thumb {\n  background-color: #adb5bd;\n}\n\n.form-range:disabled::-moz-range-thumb {\n  background-color: #adb5bd;\n}\n\n.form-floating {\n  position: relative;\n}\n\n.form-floating > .form-control,\n.form-floating > .form-select {\n  height: calc(3.5rem + 2px);\n  line-height: 1.25;\n}\n\n.form-floating > label {\n  position: absolute;\n  top: 0;\n  left: 0;\n  height: 100%;\n  padding: 1rem 0.75rem;\n  pointer-events: none;\n  border: 1px solid transparent;\n  -webkit-transform-origin: 0 0;\n  transform-origin: 0 0;\n  transition: opacity 0.1s ease-in-out, -webkit-transform 0.1s ease-in-out;\n  transition: opacity 0.1s ease-in-out, transform 0.1s ease-in-out;\n  transition: opacity 0.1s ease-in-out, transform 0.1s ease-in-out, -webkit-transform 0.1s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .form-floating > label {\n    transition: none;\n  }\n}\n\n.form-floating > .form-control {\n  padding: 1rem 0.75rem;\n}\n\n.form-floating > .form-control::-webkit-input-placeholder {\n  color: transparent;\n}\n\n.form-floating > .form-control::-moz-placeholder {\n  color: transparent;\n}\n\n.form-floating > .form-control:-ms-input-placeholder {\n  color: transparent;\n}\n\n.form-floating > .form-control::-ms-input-placeholder {\n  color: transparent;\n}\n\n.form-floating > .form-control::placeholder {\n  color: transparent;\n}\n\n.form-floating > .form-control:not(:-moz-placeholder-shown) {\n  padding-top: 1.625rem;\n  padding-bottom: 0.625rem;\n}\n\n.form-floating > .form-control:not(:-ms-input-placeholder) {\n  padding-top: 1.625rem;\n  padding-bottom: 0.625rem;\n}\n\n.form-floating > .form-control:focus, .form-floating > .form-control:not(:placeholder-shown) {\n  padding-top: 1.625rem;\n  padding-bottom: 0.625rem;\n}\n\n.form-floating > .form-control:-webkit-autofill {\n  padding-top: 1.625rem;\n  padding-bottom: 0.625rem;\n}\n\n.form-floating > .form-select {\n  padding-top: 1.625rem;\n  padding-bottom: 0.625rem;\n}\n\n.form-floating > .form-control:not(:-moz-placeholder-shown) ~ label {\n  opacity: 0.65;\n  transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);\n}\n\n.form-floating > .form-control:not(:-ms-input-placeholder) ~ label {\n  opacity: 0.65;\n  transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);\n}\n\n.form-floating > .form-control:focus ~ label,\n.form-floating > .form-control:not(:placeholder-shown) ~ label,\n.form-floating > .form-select ~ label {\n  opacity: 0.65;\n  -webkit-transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);\n  transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);\n}\n\n.form-floating > .form-control:-webkit-autofill ~ label {\n  opacity: 0.65;\n  -webkit-transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);\n  transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);\n}\n\n.input-group {\n  position: relative;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n  flex-wrap: wrap;\n  -ms-flex-align: stretch;\n  align-items: stretch;\n  width: 100%;\n}\n\n.input-group > .form-control,\n.input-group > .form-select {\n  position: relative;\n  -ms-flex: 1 1 auto;\n  flex: 1 1 auto;\n  width: 1%;\n  min-width: 0;\n}\n\n.input-group > .form-control:focus,\n.input-group > .form-select:focus {\n  z-index: 3;\n}\n\n.input-group .btn {\n  position: relative;\n  z-index: 2;\n}\n\n.input-group .btn:focus {\n  z-index: 3;\n}\n\n.input-group-text {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-align: center;\n  align-items: center;\n  padding: 0.375rem 0.75rem;\n  font-size: 1rem;\n  font-weight: 400;\n  line-height: 1.5;\n  color: #373a3c;\n  text-align: center;\n  white-space: nowrap;\n  background-color: #e9ecef;\n  border: 1px solid #ced4da;\n}\n\n.input-group-lg > .form-control,\n.input-group-lg > .form-select,\n.input-group-lg > .input-group-text,\n.input-group-lg > .btn {\n  padding: 0.5rem 1rem;\n  font-size: 1.25rem;\n}\n\n.input-group-sm > .form-control,\n.input-group-sm > .form-select,\n.input-group-sm > .input-group-text,\n.input-group-sm > .btn {\n  padding: 0.25rem 0.5rem;\n  font-size: 0.875rem;\n}\n\n.input-group-lg > .form-select,\n.input-group-sm > .form-select {\n  padding-right: 3rem;\n}\n\n.input-group > :not(:first-child):not(.dropdown-menu):not(.valid-tooltip):not(.valid-feedback):not(.invalid-tooltip):not(.invalid-feedback) {\n  margin-left: -1px;\n}\n\n.valid-feedback {\n  display: none;\n  width: 100%;\n  margin-top: 0.25rem;\n  font-size: 0.875em;\n  color: #3fb618;\n}\n\n.valid-tooltip {\n  position: absolute;\n  top: 100%;\n  z-index: 5;\n  display: none;\n  max-width: 100%;\n  padding: 0.25rem 0.5rem;\n  margin-top: .1rem;\n  font-size: 0.875rem;\n  color: #fff;\n  background-color: rgba(63, 182, 24, 0.9);\n}\n\n.was-validated :valid ~ .valid-feedback,\n.was-validated :valid ~ .valid-tooltip,\n.is-valid ~ .valid-feedback,\n.is-valid ~ .valid-tooltip {\n  display: block;\n}\n\n.was-validated .form-control:valid, .form-control.is-valid {\n  border-color: #3fb618;\n  padding-right: calc(1.5em + 0.75rem);\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%233fb618' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e\");\n  background-repeat: no-repeat;\n  background-position: right calc(0.375em + 0.1875rem) center;\n  background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n\n.was-validated .form-control:valid:focus, .form-control.is-valid:focus {\n  border-color: #3fb618;\n  box-shadow: 0 0 0 0.25rem rgba(63, 182, 24, 0.25);\n}\n\n.was-validated textarea.form-control:valid, textarea.form-control.is-valid {\n  padding-right: calc(1.5em + 0.75rem);\n  background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem);\n}\n\n.was-validated .form-select:valid, .form-select.is-valid {\n  border-color: #3fb618;\n}\n\n.was-validated .form-select:valid:not([multiple]):not([size]), .was-validated .form-select:valid:not([multiple])[size=\"1\"], .form-select.is-valid:not([multiple]):not([size]), .form-select.is-valid:not([multiple])[size=\"1\"] {\n  padding-right: 4.125rem;\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23373a3c' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e\"), url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%233fb618' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e\");\n  background-position: right 0.75rem center, center right 2.25rem;\n  background-size: 16px 12px, calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n\n.was-validated .form-select:valid:focus, .form-select.is-valid:focus {\n  border-color: #3fb618;\n  box-shadow: 0 0 0 0.25rem rgba(63, 182, 24, 0.25);\n}\n\n.was-validated .form-check-input:valid, .form-check-input.is-valid {\n  border-color: #3fb618;\n}\n\n.was-validated .form-check-input:valid:checked, .form-check-input.is-valid:checked {\n  background-color: #3fb618;\n}\n\n.was-validated .form-check-input:valid:focus, .form-check-input.is-valid:focus {\n  box-shadow: 0 0 0 0.25rem rgba(63, 182, 24, 0.25);\n}\n\n.was-validated .form-check-input:valid ~ .form-check-label, .form-check-input.is-valid ~ .form-check-label {\n  color: #3fb618;\n}\n\n.form-check-inline .form-check-input ~ .valid-feedback {\n  margin-left: .5em;\n}\n\n.was-validated .input-group .form-control:valid, .input-group .form-control.is-valid, .was-validated\n.input-group .form-select:valid,\n.input-group .form-select.is-valid {\n  z-index: 1;\n}\n\n.was-validated .input-group .form-control:valid:focus, .input-group .form-control.is-valid:focus, .was-validated\n.input-group .form-select:valid:focus,\n.input-group .form-select.is-valid:focus {\n  z-index: 3;\n}\n\n.invalid-feedback {\n  display: none;\n  width: 100%;\n  margin-top: 0.25rem;\n  font-size: 0.875em;\n  color: #ff0039;\n}\n\n.invalid-tooltip {\n  position: absolute;\n  top: 100%;\n  z-index: 5;\n  display: none;\n  max-width: 100%;\n  padding: 0.25rem 0.5rem;\n  margin-top: .1rem;\n  font-size: 0.875rem;\n  color: #fff;\n  background-color: rgba(255, 0, 57, 0.9);\n}\n\n.was-validated :invalid ~ .invalid-feedback,\n.was-validated :invalid ~ .invalid-tooltip,\n.is-invalid ~ .invalid-feedback,\n.is-invalid ~ .invalid-tooltip {\n  display: block;\n}\n\n.was-validated .form-control:invalid, .form-control.is-invalid {\n  border-color: #ff0039;\n  padding-right: calc(1.5em + 0.75rem);\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23ff0039'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23ff0039' stroke='none'/%3e%3c/svg%3e\");\n  background-repeat: no-repeat;\n  background-position: right calc(0.375em + 0.1875rem) center;\n  background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n\n.was-validated .form-control:invalid:focus, .form-control.is-invalid:focus {\n  border-color: #ff0039;\n  box-shadow: 0 0 0 0.25rem rgba(255, 0, 57, 0.25);\n}\n\n.was-validated textarea.form-control:invalid, textarea.form-control.is-invalid {\n  padding-right: calc(1.5em + 0.75rem);\n  background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem);\n}\n\n.was-validated .form-select:invalid, .form-select.is-invalid {\n  border-color: #ff0039;\n}\n\n.was-validated .form-select:invalid:not([multiple]):not([size]), .was-validated .form-select:invalid:not([multiple])[size=\"1\"], .form-select.is-invalid:not([multiple]):not([size]), .form-select.is-invalid:not([multiple])[size=\"1\"] {\n  padding-right: 4.125rem;\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23373a3c' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e\"), url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23ff0039'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23ff0039' stroke='none'/%3e%3c/svg%3e\");\n  background-position: right 0.75rem center, center right 2.25rem;\n  background-size: 16px 12px, calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n\n.was-validated .form-select:invalid:focus, .form-select.is-invalid:focus {\n  border-color: #ff0039;\n  box-shadow: 0 0 0 0.25rem rgba(255, 0, 57, 0.25);\n}\n\n.was-validated .form-check-input:invalid, .form-check-input.is-invalid {\n  border-color: #ff0039;\n}\n\n.was-validated .form-check-input:invalid:checked, .form-check-input.is-invalid:checked {\n  background-color: #ff0039;\n}\n\n.was-validated .form-check-input:invalid:focus, .form-check-input.is-invalid:focus {\n  box-shadow: 0 0 0 0.25rem rgba(255, 0, 57, 0.25);\n}\n\n.was-validated .form-check-input:invalid ~ .form-check-label, .form-check-input.is-invalid ~ .form-check-label {\n  color: #ff0039;\n}\n\n.form-check-inline .form-check-input ~ .invalid-feedback {\n  margin-left: .5em;\n}\n\n.was-validated .input-group .form-control:invalid, .input-group .form-control.is-invalid, .was-validated\n.input-group .form-select:invalid,\n.input-group .form-select.is-invalid {\n  z-index: 2;\n}\n\n.was-validated .input-group .form-control:invalid:focus, .input-group .form-control.is-invalid:focus, .was-validated\n.input-group .form-select:invalid:focus,\n.input-group .form-select.is-invalid:focus {\n  z-index: 3;\n}\n\n.btn {\n  display: inline-block;\n  font-weight: 400;\n  line-height: 1.5;\n  color: #373a3c;\n  text-align: center;\n  text-decoration: none;\n  vertical-align: middle;\n  cursor: pointer;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  user-select: none;\n  background-color: transparent;\n  border: 1px solid transparent;\n  padding: 0.375rem 0.75rem;\n  font-size: 1rem;\n  border-radius: 0;\n  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .btn {\n    transition: none;\n  }\n}\n\n.btn:hover {\n  color: #373a3c;\n}\n\n.btn-check:focus + .btn, .btn:focus {\n  outline: 0;\n  box-shadow: 0 0 0 0.25rem rgba(39, 128, 227, 0.25);\n}\n\n.btn:disabled, .btn.disabled,\nfieldset:disabled .btn {\n  pointer-events: none;\n  opacity: 0.65;\n}\n\n.btn-primary {\n  color: #fff;\n  background-color: #2780e3;\n  border-color: #2780e3;\n}\n\n.btn-primary:hover {\n  color: #fff;\n  background-color: #216dc1;\n  border-color: #1f66b6;\n}\n\n.btn-check:focus + .btn-primary, .btn-primary:focus {\n  color: #fff;\n  background-color: #216dc1;\n  border-color: #1f66b6;\n  box-shadow: 0 0 0 0.25rem rgba(71, 147, 231, 0.5);\n}\n\n.btn-check:checked + .btn-primary,\n.btn-check:active + .btn-primary, .btn-primary:active, .btn-primary.active,\n.show > .btn-primary.dropdown-toggle {\n  color: #fff;\n  background-color: #1f66b6;\n  border-color: #1d60aa;\n}\n\n.btn-check:checked + .btn-primary:focus,\n.btn-check:active + .btn-primary:focus, .btn-primary:active:focus, .btn-primary.active:focus,\n.show > .btn-primary.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.25rem rgba(71, 147, 231, 0.5);\n}\n\n.btn-primary:disabled, .btn-primary.disabled {\n  color: #fff;\n  background-color: #2780e3;\n  border-color: #2780e3;\n}\n\n.btn-secondary {\n  color: #fff;\n  background-color: #373a3c;\n  border-color: #373a3c;\n}\n\n.btn-secondary:hover {\n  color: #fff;\n  background-color: #2f3133;\n  border-color: #2c2e30;\n}\n\n.btn-check:focus + .btn-secondary, .btn-secondary:focus {\n  color: #fff;\n  background-color: #2f3133;\n  border-color: #2c2e30;\n  box-shadow: 0 0 0 0.25rem rgba(85, 88, 89, 0.5);\n}\n\n.btn-check:checked + .btn-secondary,\n.btn-check:active + .btn-secondary, .btn-secondary:active, .btn-secondary.active,\n.show > .btn-secondary.dropdown-toggle {\n  color: #fff;\n  background-color: #2c2e30;\n  border-color: #292c2d;\n}\n\n.btn-check:checked + .btn-secondary:focus,\n.btn-check:active + .btn-secondary:focus, .btn-secondary:active:focus, .btn-secondary.active:focus,\n.show > .btn-secondary.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.25rem rgba(85, 88, 89, 0.5);\n}\n\n.btn-secondary:disabled, .btn-secondary.disabled {\n  color: #fff;\n  background-color: #373a3c;\n  border-color: #373a3c;\n}\n\n.btn-success {\n  color: #fff;\n  background-color: #3fb618;\n  border-color: #3fb618;\n}\n\n.btn-success:hover {\n  color: #fff;\n  background-color: #369b14;\n  border-color: #329213;\n}\n\n.btn-check:focus + .btn-success, .btn-success:focus {\n  color: #fff;\n  background-color: #369b14;\n  border-color: #329213;\n  box-shadow: 0 0 0 0.25rem rgba(92, 193, 59, 0.5);\n}\n\n.btn-check:checked + .btn-success,\n.btn-check:active + .btn-success, .btn-success:active, .btn-success.active,\n.show > .btn-success.dropdown-toggle {\n  color: #fff;\n  background-color: #329213;\n  border-color: #2f8912;\n}\n\n.btn-check:checked + .btn-success:focus,\n.btn-check:active + .btn-success:focus, .btn-success:active:focus, .btn-success.active:focus,\n.show > .btn-success.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.25rem rgba(92, 193, 59, 0.5);\n}\n\n.btn-success:disabled, .btn-success.disabled {\n  color: #fff;\n  background-color: #3fb618;\n  border-color: #3fb618;\n}\n\n.btn-info {\n  color: #fff;\n  background-color: #9954bb;\n  border-color: #9954bb;\n}\n\n.btn-info:hover {\n  color: #fff;\n  background-color: #82479f;\n  border-color: #7a4396;\n}\n\n.btn-check:focus + .btn-info, .btn-info:focus {\n  color: #fff;\n  background-color: #82479f;\n  border-color: #7a4396;\n  box-shadow: 0 0 0 0.25rem rgba(168, 110, 197, 0.5);\n}\n\n.btn-check:checked + .btn-info,\n.btn-check:active + .btn-info, .btn-info:active, .btn-info.active,\n.show > .btn-info.dropdown-toggle {\n  color: #fff;\n  background-color: #7a4396;\n  border-color: #733f8c;\n}\n\n.btn-check:checked + .btn-info:focus,\n.btn-check:active + .btn-info:focus, .btn-info:active:focus, .btn-info.active:focus,\n.show > .btn-info.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.25rem rgba(168, 110, 197, 0.5);\n}\n\n.btn-info:disabled, .btn-info.disabled {\n  color: #fff;\n  background-color: #9954bb;\n  border-color: #9954bb;\n}\n\n.btn-warning {\n  color: #fff;\n  background-color: #ff7518;\n  border-color: #ff7518;\n}\n\n.btn-warning:hover {\n  color: #fff;\n  background-color: #d96314;\n  border-color: #cc5e13;\n}\n\n.btn-check:focus + .btn-warning, .btn-warning:focus {\n  color: #fff;\n  background-color: #d96314;\n  border-color: #cc5e13;\n  box-shadow: 0 0 0 0.25rem rgba(255, 138, 59, 0.5);\n}\n\n.btn-check:checked + .btn-warning,\n.btn-check:active + .btn-warning, .btn-warning:active, .btn-warning.active,\n.show > .btn-warning.dropdown-toggle {\n  color: #fff;\n  background-color: #cc5e13;\n  border-color: #bf5812;\n}\n\n.btn-check:checked + .btn-warning:focus,\n.btn-check:active + .btn-warning:focus, .btn-warning:active:focus, .btn-warning.active:focus,\n.show > .btn-warning.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.25rem rgba(255, 138, 59, 0.5);\n}\n\n.btn-warning:disabled, .btn-warning.disabled {\n  color: #fff;\n  background-color: #ff7518;\n  border-color: #ff7518;\n}\n\n.btn-danger {\n  color: #fff;\n  background-color: #ff0039;\n  border-color: #ff0039;\n}\n\n.btn-danger:hover {\n  color: #fff;\n  background-color: #d90030;\n  border-color: #cc002e;\n}\n\n.btn-check:focus + .btn-danger, .btn-danger:focus {\n  color: #fff;\n  background-color: #d90030;\n  border-color: #cc002e;\n  box-shadow: 0 0 0 0.25rem rgba(255, 38, 87, 0.5);\n}\n\n.btn-check:checked + .btn-danger,\n.btn-check:active + .btn-danger, .btn-danger:active, .btn-danger.active,\n.show > .btn-danger.dropdown-toggle {\n  color: #fff;\n  background-color: #cc002e;\n  border-color: #bf002b;\n}\n\n.btn-check:checked + .btn-danger:focus,\n.btn-check:active + .btn-danger:focus, .btn-danger:active:focus, .btn-danger.active:focus,\n.show > .btn-danger.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.25rem rgba(255, 38, 87, 0.5);\n}\n\n.btn-danger:disabled, .btn-danger.disabled {\n  color: #fff;\n  background-color: #ff0039;\n  border-color: #ff0039;\n}\n\n.btn-light {\n  color: #000;\n  background-color: #f8f9fa;\n  border-color: #f8f9fa;\n}\n\n.btn-light:hover {\n  color: #000;\n  background-color: #f9fafb;\n  border-color: #f9fafb;\n}\n\n.btn-check:focus + .btn-light, .btn-light:focus {\n  color: #000;\n  background-color: #f9fafb;\n  border-color: #f9fafb;\n  box-shadow: 0 0 0 0.25rem rgba(211, 212, 213, 0.5);\n}\n\n.btn-check:checked + .btn-light,\n.btn-check:active + .btn-light, .btn-light:active, .btn-light.active,\n.show > .btn-light.dropdown-toggle {\n  color: #000;\n  background-color: #f9fafb;\n  border-color: #f9fafb;\n}\n\n.btn-check:checked + .btn-light:focus,\n.btn-check:active + .btn-light:focus, .btn-light:active:focus, .btn-light.active:focus,\n.show > .btn-light.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.25rem rgba(211, 212, 213, 0.5);\n}\n\n.btn-light:disabled, .btn-light.disabled {\n  color: #000;\n  background-color: #f8f9fa;\n  border-color: #f8f9fa;\n}\n\n.btn-dark {\n  color: #fff;\n  background-color: #373a3c;\n  border-color: #373a3c;\n}\n\n.btn-dark:hover {\n  color: #fff;\n  background-color: #2f3133;\n  border-color: #2c2e30;\n}\n\n.btn-check:focus + .btn-dark, .btn-dark:focus {\n  color: #fff;\n  background-color: #2f3133;\n  border-color: #2c2e30;\n  box-shadow: 0 0 0 0.25rem rgba(85, 88, 89, 0.5);\n}\n\n.btn-check:checked + .btn-dark,\n.btn-check:active + .btn-dark, .btn-dark:active, .btn-dark.active,\n.show > .btn-dark.dropdown-toggle {\n  color: #fff;\n  background-color: #2c2e30;\n  border-color: #292c2d;\n}\n\n.btn-check:checked + .btn-dark:focus,\n.btn-check:active + .btn-dark:focus, .btn-dark:active:focus, .btn-dark.active:focus,\n.show > .btn-dark.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.25rem rgba(85, 88, 89, 0.5);\n}\n\n.btn-dark:disabled, .btn-dark.disabled {\n  color: #fff;\n  background-color: #373a3c;\n  border-color: #373a3c;\n}\n\n.btn-outline-primary {\n  color: #2780e3;\n  border-color: #2780e3;\n}\n\n.btn-outline-primary:hover {\n  color: #fff;\n  background-color: #2780e3;\n  border-color: #2780e3;\n}\n\n.btn-check:focus + .btn-outline-primary, .btn-outline-primary:focus {\n  box-shadow: 0 0 0 0.25rem rgba(39, 128, 227, 0.5);\n}\n\n.btn-check:checked + .btn-outline-primary,\n.btn-check:active + .btn-outline-primary, .btn-outline-primary:active, .btn-outline-primary.active, .btn-outline-primary.dropdown-toggle.show {\n  color: #fff;\n  background-color: #2780e3;\n  border-color: #2780e3;\n}\n\n.btn-check:checked + .btn-outline-primary:focus,\n.btn-check:active + .btn-outline-primary:focus, .btn-outline-primary:active:focus, .btn-outline-primary.active:focus, .btn-outline-primary.dropdown-toggle.show:focus {\n  box-shadow: 0 0 0 0.25rem rgba(39, 128, 227, 0.5);\n}\n\n.btn-outline-primary:disabled, .btn-outline-primary.disabled {\n  color: #2780e3;\n  background-color: transparent;\n}\n\n.btn-outline-secondary {\n  color: #373a3c;\n  border-color: #373a3c;\n}\n\n.btn-outline-secondary:hover {\n  color: #fff;\n  background-color: #373a3c;\n  border-color: #373a3c;\n}\n\n.btn-check:focus + .btn-outline-secondary, .btn-outline-secondary:focus {\n  box-shadow: 0 0 0 0.25rem rgba(55, 58, 60, 0.5);\n}\n\n.btn-check:checked + .btn-outline-secondary,\n.btn-check:active + .btn-outline-secondary, .btn-outline-secondary:active, .btn-outline-secondary.active, .btn-outline-secondary.dropdown-toggle.show {\n  color: #fff;\n  background-color: #373a3c;\n  border-color: #373a3c;\n}\n\n.btn-check:checked + .btn-outline-secondary:focus,\n.btn-check:active + .btn-outline-secondary:focus, .btn-outline-secondary:active:focus, .btn-outline-secondary.active:focus, .btn-outline-secondary.dropdown-toggle.show:focus {\n  box-shadow: 0 0 0 0.25rem rgba(55, 58, 60, 0.5);\n}\n\n.btn-outline-secondary:disabled, .btn-outline-secondary.disabled {\n  color: #373a3c;\n  background-color: transparent;\n}\n\n.btn-outline-success {\n  color: #3fb618;\n  border-color: #3fb618;\n}\n\n.btn-outline-success:hover {\n  color: #fff;\n  background-color: #3fb618;\n  border-color: #3fb618;\n}\n\n.btn-check:focus + .btn-outline-success, .btn-outline-success:focus {\n  box-shadow: 0 0 0 0.25rem rgba(63, 182, 24, 0.5);\n}\n\n.btn-check:checked + .btn-outline-success,\n.btn-check:active + .btn-outline-success, .btn-outline-success:active, .btn-outline-success.active, .btn-outline-success.dropdown-toggle.show {\n  color: #fff;\n  background-color: #3fb618;\n  border-color: #3fb618;\n}\n\n.btn-check:checked + .btn-outline-success:focus,\n.btn-check:active + .btn-outline-success:focus, .btn-outline-success:active:focus, .btn-outline-success.active:focus, .btn-outline-success.dropdown-toggle.show:focus {\n  box-shadow: 0 0 0 0.25rem rgba(63, 182, 24, 0.5);\n}\n\n.btn-outline-success:disabled, .btn-outline-success.disabled {\n  color: #3fb618;\n  background-color: transparent;\n}\n\n.btn-outline-info {\n  color: #9954bb;\n  border-color: #9954bb;\n}\n\n.btn-outline-info:hover {\n  color: #fff;\n  background-color: #9954bb;\n  border-color: #9954bb;\n}\n\n.btn-check:focus + .btn-outline-info, .btn-outline-info:focus {\n  box-shadow: 0 0 0 0.25rem rgba(153, 84, 187, 0.5);\n}\n\n.btn-check:checked + .btn-outline-info,\n.btn-check:active + .btn-outline-info, .btn-outline-info:active, .btn-outline-info.active, .btn-outline-info.dropdown-toggle.show {\n  color: #fff;\n  background-color: #9954bb;\n  border-color: #9954bb;\n}\n\n.btn-check:checked + .btn-outline-info:focus,\n.btn-check:active + .btn-outline-info:focus, .btn-outline-info:active:focus, .btn-outline-info.active:focus, .btn-outline-info.dropdown-toggle.show:focus {\n  box-shadow: 0 0 0 0.25rem rgba(153, 84, 187, 0.5);\n}\n\n.btn-outline-info:disabled, .btn-outline-info.disabled {\n  color: #9954bb;\n  background-color: transparent;\n}\n\n.btn-outline-warning {\n  color: #ff7518;\n  border-color: #ff7518;\n}\n\n.btn-outline-warning:hover {\n  color: #fff;\n  background-color: #ff7518;\n  border-color: #ff7518;\n}\n\n.btn-check:focus + .btn-outline-warning, .btn-outline-warning:focus {\n  box-shadow: 0 0 0 0.25rem rgba(255, 117, 24, 0.5);\n}\n\n.btn-check:checked + .btn-outline-warning,\n.btn-check:active + .btn-outline-warning, .btn-outline-warning:active, .btn-outline-warning.active, .btn-outline-warning.dropdown-toggle.show {\n  color: #fff;\n  background-color: #ff7518;\n  border-color: #ff7518;\n}\n\n.btn-check:checked + .btn-outline-warning:focus,\n.btn-check:active + .btn-outline-warning:focus, .btn-outline-warning:active:focus, .btn-outline-warning.active:focus, .btn-outline-warning.dropdown-toggle.show:focus {\n  box-shadow: 0 0 0 0.25rem rgba(255, 117, 24, 0.5);\n}\n\n.btn-outline-warning:disabled, .btn-outline-warning.disabled {\n  color: #ff7518;\n  background-color: transparent;\n}\n\n.btn-outline-danger {\n  color: #ff0039;\n  border-color: #ff0039;\n}\n\n.btn-outline-danger:hover {\n  color: #fff;\n  background-color: #ff0039;\n  border-color: #ff0039;\n}\n\n.btn-check:focus + .btn-outline-danger, .btn-outline-danger:focus {\n  box-shadow: 0 0 0 0.25rem rgba(255, 0, 57, 0.5);\n}\n\n.btn-check:checked + .btn-outline-danger,\n.btn-check:active + .btn-outline-danger, .btn-outline-danger:active, .btn-outline-danger.active, .btn-outline-danger.dropdown-toggle.show {\n  color: #fff;\n  background-color: #ff0039;\n  border-color: #ff0039;\n}\n\n.btn-check:checked + .btn-outline-danger:focus,\n.btn-check:active + .btn-outline-danger:focus, .btn-outline-danger:active:focus, .btn-outline-danger.active:focus, .btn-outline-danger.dropdown-toggle.show:focus {\n  box-shadow: 0 0 0 0.25rem rgba(255, 0, 57, 0.5);\n}\n\n.btn-outline-danger:disabled, .btn-outline-danger.disabled {\n  color: #ff0039;\n  background-color: transparent;\n}\n\n.btn-outline-light {\n  color: #f8f9fa;\n  border-color: #f8f9fa;\n}\n\n.btn-outline-light:hover {\n  color: #000;\n  background-color: #f8f9fa;\n  border-color: #f8f9fa;\n}\n\n.btn-check:focus + .btn-outline-light, .btn-outline-light:focus {\n  box-shadow: 0 0 0 0.25rem rgba(248, 249, 250, 0.5);\n}\n\n.btn-check:checked + .btn-outline-light,\n.btn-check:active + .btn-outline-light, .btn-outline-light:active, .btn-outline-light.active, .btn-outline-light.dropdown-toggle.show {\n  color: #000;\n  background-color: #f8f9fa;\n  border-color: #f8f9fa;\n}\n\n.btn-check:checked + .btn-outline-light:focus,\n.btn-check:active + .btn-outline-light:focus, .btn-outline-light:active:focus, .btn-outline-light.active:focus, .btn-outline-light.dropdown-toggle.show:focus {\n  box-shadow: 0 0 0 0.25rem rgba(248, 249, 250, 0.5);\n}\n\n.btn-outline-light:disabled, .btn-outline-light.disabled {\n  color: #f8f9fa;\n  background-color: transparent;\n}\n\n.btn-outline-dark {\n  color: #373a3c;\n  border-color: #373a3c;\n}\n\n.btn-outline-dark:hover {\n  color: #fff;\n  background-color: #373a3c;\n  border-color: #373a3c;\n}\n\n.btn-check:focus + .btn-outline-dark, .btn-outline-dark:focus {\n  box-shadow: 0 0 0 0.25rem rgba(55, 58, 60, 0.5);\n}\n\n.btn-check:checked + .btn-outline-dark,\n.btn-check:active + .btn-outline-dark, .btn-outline-dark:active, .btn-outline-dark.active, .btn-outline-dark.dropdown-toggle.show {\n  color: #fff;\n  background-color: #373a3c;\n  border-color: #373a3c;\n}\n\n.btn-check:checked + .btn-outline-dark:focus,\n.btn-check:active + .btn-outline-dark:focus, .btn-outline-dark:active:focus, .btn-outline-dark.active:focus, .btn-outline-dark.dropdown-toggle.show:focus {\n  box-shadow: 0 0 0 0.25rem rgba(55, 58, 60, 0.5);\n}\n\n.btn-outline-dark:disabled, .btn-outline-dark.disabled {\n  color: #373a3c;\n  background-color: transparent;\n}\n\n.btn-link {\n  font-weight: 400;\n  color: #2780e3;\n  text-decoration: underline;\n}\n\n.btn-link:hover {\n  color: #1f66b6;\n}\n\n.btn-link:disabled, .btn-link.disabled {\n  color: #868e96;\n}\n\n.btn-lg, .btn-group-lg > .btn {\n  padding: 0.5rem 1rem;\n  font-size: 1.25rem;\n  border-radius: 0;\n}\n\n.btn-sm, .btn-group-sm > .btn {\n  padding: 0.25rem 0.5rem;\n  font-size: 0.875rem;\n  border-radius: 0;\n}\n\n.fade {\n  transition: opacity 0.15s linear;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .fade {\n    transition: none;\n  }\n}\n\n.fade:not(.show) {\n  opacity: 0;\n}\n\n.collapse:not(.show) {\n  display: none;\n}\n\n.collapsing {\n  height: 0;\n  overflow: hidden;\n  transition: height 0.35s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .collapsing {\n    transition: none;\n  }\n}\n\n.collapsing.collapse-horizontal {\n  width: 0;\n  height: auto;\n  transition: width 0.35s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .collapsing.collapse-horizontal {\n    transition: none;\n  }\n}\n\n.dropup,\n.dropend,\n.dropdown,\n.dropstart {\n  position: relative;\n}\n\n.dropdown-toggle {\n  white-space: nowrap;\n}\n\n.dropdown-toggle::after {\n  display: inline-block;\n  margin-left: 0.255em;\n  vertical-align: 0.255em;\n  content: \"\";\n  border-top: 0.3em solid;\n  border-right: 0.3em solid transparent;\n  border-bottom: 0;\n  border-left: 0.3em solid transparent;\n}\n\n.dropdown-toggle:empty::after {\n  margin-left: 0;\n}\n\n.dropdown-menu {\n  position: absolute;\n  z-index: 1000;\n  display: none;\n  min-width: 10rem;\n  padding: 0.5rem 0;\n  margin: 0;\n  font-size: 1rem;\n  color: #373a3c;\n  text-align: left;\n  list-style: none;\n  background-color: #fff;\n  background-clip: padding-box;\n  border: 1px solid rgba(0, 0, 0, 0.15);\n}\n\n.dropdown-menu[data-bs-popper] {\n  top: 100%;\n  left: 0;\n  margin-top: 0.125rem;\n}\n\n.dropdown-menu-start {\n  --bs-position: start;\n}\n\n.dropdown-menu-start[data-bs-popper] {\n  right: auto;\n  left: 0;\n}\n\n.dropdown-menu-end {\n  --bs-position: end;\n}\n\n.dropdown-menu-end[data-bs-popper] {\n  right: 0;\n  left: auto;\n}\n\n@media (min-width: 576px) {\n  .dropdown-menu-sm-start {\n    --bs-position: start;\n  }\n  .dropdown-menu-sm-start[data-bs-popper] {\n    right: auto;\n    left: 0;\n  }\n  .dropdown-menu-sm-end {\n    --bs-position: end;\n  }\n  .dropdown-menu-sm-end[data-bs-popper] {\n    right: 0;\n    left: auto;\n  }\n}\n\n@media (min-width: 768px) {\n  .dropdown-menu-md-start {\n    --bs-position: start;\n  }\n  .dropdown-menu-md-start[data-bs-popper] {\n    right: auto;\n    left: 0;\n  }\n  .dropdown-menu-md-end {\n    --bs-position: end;\n  }\n  .dropdown-menu-md-end[data-bs-popper] {\n    right: 0;\n    left: auto;\n  }\n}\n\n@media (min-width: 992px) {\n  .dropdown-menu-lg-start {\n    --bs-position: start;\n  }\n  .dropdown-menu-lg-start[data-bs-popper] {\n    right: auto;\n    left: 0;\n  }\n  .dropdown-menu-lg-end {\n    --bs-position: end;\n  }\n  .dropdown-menu-lg-end[data-bs-popper] {\n    right: 0;\n    left: auto;\n  }\n}\n\n@media (min-width: 1200px) {\n  .dropdown-menu-xl-start {\n    --bs-position: start;\n  }\n  .dropdown-menu-xl-start[data-bs-popper] {\n    right: auto;\n    left: 0;\n  }\n  .dropdown-menu-xl-end {\n    --bs-position: end;\n  }\n  .dropdown-menu-xl-end[data-bs-popper] {\n    right: 0;\n    left: auto;\n  }\n}\n\n@media (min-width: 1400px) {\n  .dropdown-menu-xxl-start {\n    --bs-position: start;\n  }\n  .dropdown-menu-xxl-start[data-bs-popper] {\n    right: auto;\n    left: 0;\n  }\n  .dropdown-menu-xxl-end {\n    --bs-position: end;\n  }\n  .dropdown-menu-xxl-end[data-bs-popper] {\n    right: 0;\n    left: auto;\n  }\n}\n\n.dropup .dropdown-menu[data-bs-popper] {\n  top: auto;\n  bottom: 100%;\n  margin-top: 0;\n  margin-bottom: 0.125rem;\n}\n\n.dropup .dropdown-toggle::after {\n  display: inline-block;\n  margin-left: 0.255em;\n  vertical-align: 0.255em;\n  content: \"\";\n  border-top: 0;\n  border-right: 0.3em solid transparent;\n  border-bottom: 0.3em solid;\n  border-left: 0.3em solid transparent;\n}\n\n.dropup .dropdown-toggle:empty::after {\n  margin-left: 0;\n}\n\n.dropend .dropdown-menu[data-bs-popper] {\n  top: 0;\n  right: auto;\n  left: 100%;\n  margin-top: 0;\n  margin-left: 0.125rem;\n}\n\n.dropend .dropdown-toggle::after {\n  display: inline-block;\n  margin-left: 0.255em;\n  vertical-align: 0.255em;\n  content: \"\";\n  border-top: 0.3em solid transparent;\n  border-right: 0;\n  border-bottom: 0.3em solid transparent;\n  border-left: 0.3em solid;\n}\n\n.dropend .dropdown-toggle:empty::after {\n  margin-left: 0;\n}\n\n.dropend .dropdown-toggle::after {\n  vertical-align: 0;\n}\n\n.dropstart .dropdown-menu[data-bs-popper] {\n  top: 0;\n  right: 100%;\n  left: auto;\n  margin-top: 0;\n  margin-right: 0.125rem;\n}\n\n.dropstart .dropdown-toggle::after {\n  display: inline-block;\n  margin-left: 0.255em;\n  vertical-align: 0.255em;\n  content: \"\";\n}\n\n.dropstart .dropdown-toggle::after {\n  display: none;\n}\n\n.dropstart .dropdown-toggle::before {\n  display: inline-block;\n  margin-right: 0.255em;\n  vertical-align: 0.255em;\n  content: \"\";\n  border-top: 0.3em solid transparent;\n  border-right: 0.3em solid;\n  border-bottom: 0.3em solid transparent;\n}\n\n.dropstart .dropdown-toggle:empty::after {\n  margin-left: 0;\n}\n\n.dropstart .dropdown-toggle::before {\n  vertical-align: 0;\n}\n\n.dropdown-divider {\n  height: 0;\n  margin: 0.5rem 0;\n  overflow: hidden;\n  border-top: 1px solid rgba(0, 0, 0, 0.15);\n}\n\n.dropdown-item {\n  display: block;\n  width: 100%;\n  padding: 0.25rem 1rem;\n  clear: both;\n  font-weight: 400;\n  color: #212529;\n  text-align: inherit;\n  text-decoration: none;\n  white-space: nowrap;\n  background-color: transparent;\n  border: 0;\n}\n\n.dropdown-item:hover, .dropdown-item:focus {\n  color: #1e2125;\n  background-color: #e9ecef;\n}\n\n.dropdown-item.active, .dropdown-item:active {\n  color: #fff;\n  text-decoration: none;\n  background-color: #2780e3;\n}\n\n.dropdown-item.disabled, .dropdown-item:disabled {\n  color: #adb5bd;\n  pointer-events: none;\n  background-color: transparent;\n}\n\n.dropdown-menu.show {\n  display: block;\n}\n\n.dropdown-header {\n  display: block;\n  padding: 0.5rem 1rem;\n  margin-bottom: 0;\n  font-size: 0.875rem;\n  color: #868e96;\n  white-space: nowrap;\n}\n\n.dropdown-item-text {\n  display: block;\n  padding: 0.25rem 1rem;\n  color: #212529;\n}\n\n.dropdown-menu-dark {\n  color: #dee2e6;\n  background-color: #373a3c;\n  border-color: rgba(0, 0, 0, 0.15);\n}\n\n.dropdown-menu-dark .dropdown-item {\n  color: #dee2e6;\n}\n\n.dropdown-menu-dark .dropdown-item:hover, .dropdown-menu-dark .dropdown-item:focus {\n  color: #fff;\n  background-color: rgba(255, 255, 255, 0.15);\n}\n\n.dropdown-menu-dark .dropdown-item.active, .dropdown-menu-dark .dropdown-item:active {\n  color: #fff;\n  background-color: #2780e3;\n}\n\n.dropdown-menu-dark .dropdown-item.disabled, .dropdown-menu-dark .dropdown-item:disabled {\n  color: #adb5bd;\n}\n\n.dropdown-menu-dark .dropdown-divider {\n  border-color: rgba(0, 0, 0, 0.15);\n}\n\n.dropdown-menu-dark .dropdown-item-text {\n  color: #dee2e6;\n}\n\n.dropdown-menu-dark .dropdown-header {\n  color: #adb5bd;\n}\n\n.btn-group,\n.btn-group-vertical {\n  position: relative;\n  display: -ms-inline-flexbox;\n  display: inline-flex;\n  vertical-align: middle;\n}\n\n.btn-group > .btn,\n.btn-group-vertical > .btn {\n  position: relative;\n  -ms-flex: 1 1 auto;\n  flex: 1 1 auto;\n}\n\n.btn-group > .btn-check:checked + .btn,\n.btn-group > .btn-check:focus + .btn,\n.btn-group > .btn:hover,\n.btn-group > .btn:focus,\n.btn-group > .btn:active,\n.btn-group > .btn.active,\n.btn-group-vertical > .btn-check:checked + .btn,\n.btn-group-vertical > .btn-check:focus + .btn,\n.btn-group-vertical > .btn:hover,\n.btn-group-vertical > .btn:focus,\n.btn-group-vertical > .btn:active,\n.btn-group-vertical > .btn.active {\n  z-index: 1;\n}\n\n.btn-toolbar {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n  flex-wrap: wrap;\n  -ms-flex-pack: start;\n  justify-content: flex-start;\n}\n\n.btn-toolbar .input-group {\n  width: auto;\n}\n\n.btn-group > .btn:not(:first-child),\n.btn-group > .btn-group:not(:first-child) {\n  margin-left: -1px;\n}\n\n.dropdown-toggle-split {\n  padding-right: 0.5625rem;\n  padding-left: 0.5625rem;\n}\n\n.dropdown-toggle-split::after,\n.dropup .dropdown-toggle-split::after,\n.dropend .dropdown-toggle-split::after {\n  margin-left: 0;\n}\n\n.dropstart .dropdown-toggle-split::before {\n  margin-right: 0;\n}\n\n.btn-sm + .dropdown-toggle-split, .btn-group-sm > .btn + .dropdown-toggle-split {\n  padding-right: 0.375rem;\n  padding-left: 0.375rem;\n}\n\n.btn-lg + .dropdown-toggle-split, .btn-group-lg > .btn + .dropdown-toggle-split {\n  padding-right: 0.75rem;\n  padding-left: 0.75rem;\n}\n\n.btn-group-vertical {\n  -ms-flex-direction: column;\n  flex-direction: column;\n  -ms-flex-align: start;\n  align-items: flex-start;\n  -ms-flex-pack: center;\n  justify-content: center;\n}\n\n.btn-group-vertical > .btn,\n.btn-group-vertical > .btn-group {\n  width: 100%;\n}\n\n.btn-group-vertical > .btn:not(:first-child),\n.btn-group-vertical > .btn-group:not(:first-child) {\n  margin-top: -1px;\n}\n\n.nav {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n  flex-wrap: wrap;\n  padding-left: 0;\n  margin-bottom: 0;\n  list-style: none;\n}\n\n.nav-link {\n  display: block;\n  padding: 0.5rem 1rem;\n  color: #2780e3;\n  text-decoration: none;\n  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .nav-link {\n    transition: none;\n  }\n}\n\n.nav-link:hover, .nav-link:focus {\n  color: #1f66b6;\n}\n\n.nav-link.disabled {\n  color: #868e96;\n  pointer-events: none;\n  cursor: default;\n}\n\n.nav-tabs {\n  border-bottom: 1px solid #dee2e6;\n}\n\n.nav-tabs .nav-link {\n  margin-bottom: -1px;\n  background: none;\n  border: 1px solid transparent;\n}\n\n.nav-tabs .nav-link:hover, .nav-tabs .nav-link:focus {\n  border-color: #e9ecef #e9ecef #dee2e6;\n  isolation: isolate;\n}\n\n.nav-tabs .nav-link.disabled {\n  color: #868e96;\n  background-color: transparent;\n  border-color: transparent;\n}\n\n.nav-tabs .nav-link.active,\n.nav-tabs .nav-item.show .nav-link {\n  color: #495057;\n  background-color: #fff;\n  border-color: #dee2e6 #dee2e6 #fff;\n}\n\n.nav-tabs .dropdown-menu {\n  margin-top: -1px;\n}\n\n.nav-pills .nav-link {\n  background: none;\n  border: 0;\n}\n\n.nav-pills .nav-link.active,\n.nav-pills .show > .nav-link {\n  color: #fff;\n  background-color: #2780e3;\n}\n\n.nav-fill > .nav-link,\n.nav-fill .nav-item {\n  -ms-flex: 1 1 auto;\n  flex: 1 1 auto;\n  text-align: center;\n}\n\n.nav-justified > .nav-link,\n.nav-justified .nav-item {\n  -ms-flex-preferred-size: 0;\n  flex-basis: 0;\n  -ms-flex-positive: 1;\n  flex-grow: 1;\n  text-align: center;\n}\n\n.nav-fill .nav-item .nav-link,\n.nav-justified .nav-item .nav-link {\n  width: 100%;\n}\n\n.tab-content > .tab-pane {\n  display: none;\n}\n\n.tab-content > .active {\n  display: block;\n}\n\n.navbar {\n  position: relative;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n  flex-wrap: wrap;\n  -ms-flex-align: center;\n  align-items: center;\n  -ms-flex-pack: justify;\n  justify-content: space-between;\n  padding-top: 0.5rem;\n  padding-bottom: 0.5rem;\n}\n\n.navbar > .container,\n.navbar > .container-fluid, .navbar > .container-sm, .navbar > .container-md, .navbar > .container-lg, .navbar > .container-xl, .navbar > .container-xxl {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: inherit;\n  flex-wrap: inherit;\n  -ms-flex-align: center;\n  align-items: center;\n  -ms-flex-pack: justify;\n  justify-content: space-between;\n}\n\n.navbar-brand {\n  padding-top: 0.3125rem;\n  padding-bottom: 0.3125rem;\n  margin-right: 1rem;\n  font-size: 1.25rem;\n  text-decoration: none;\n  white-space: nowrap;\n}\n\n.navbar-nav {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  padding-left: 0;\n  margin-bottom: 0;\n  list-style: none;\n}\n\n.navbar-nav .nav-link {\n  padding-right: 0;\n  padding-left: 0;\n}\n\n.navbar-nav .dropdown-menu {\n  position: static;\n}\n\n.navbar-text {\n  padding-top: 0.5rem;\n  padding-bottom: 0.5rem;\n}\n\n.navbar-collapse {\n  -ms-flex-preferred-size: 100%;\n  flex-basis: 100%;\n  -ms-flex-positive: 1;\n  flex-grow: 1;\n  -ms-flex-align: center;\n  align-items: center;\n}\n\n.navbar-toggler {\n  padding: 0.25rem 0.75rem;\n  font-size: 1.25rem;\n  line-height: 1;\n  background-color: transparent;\n  border: 1px solid transparent;\n  transition: box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .navbar-toggler {\n    transition: none;\n  }\n}\n\n.navbar-toggler:hover {\n  text-decoration: none;\n}\n\n.navbar-toggler:focus {\n  text-decoration: none;\n  outline: 0;\n  box-shadow: 0 0 0 0.25rem;\n}\n\n.navbar-toggler-icon {\n  display: inline-block;\n  width: 1.5em;\n  height: 1.5em;\n  vertical-align: middle;\n  background-repeat: no-repeat;\n  background-position: center;\n  background-size: 100%;\n}\n\n.navbar-nav-scroll {\n  max-height: var(--bs-scroll-height, 75vh);\n  overflow-y: auto;\n}\n\n@media (min-width: 576px) {\n  .navbar-expand-sm {\n    -ms-flex-wrap: nowrap;\n    flex-wrap: nowrap;\n    -ms-flex-pack: start;\n    justify-content: flex-start;\n  }\n  .navbar-expand-sm .navbar-nav {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .navbar-expand-sm .navbar-nav .dropdown-menu {\n    position: absolute;\n  }\n  .navbar-expand-sm .navbar-nav .nav-link {\n    padding-right: 0.5rem;\n    padding-left: 0.5rem;\n  }\n  .navbar-expand-sm .navbar-nav-scroll {\n    overflow: visible;\n  }\n  .navbar-expand-sm .navbar-collapse {\n    display: -ms-flexbox !important;\n    display: flex !important;\n    -ms-flex-preferred-size: auto;\n    flex-basis: auto;\n  }\n  .navbar-expand-sm .navbar-toggler {\n    display: none;\n  }\n  .navbar-expand-sm .offcanvas-header {\n    display: none;\n  }\n  .navbar-expand-sm .offcanvas {\n    position: inherit;\n    bottom: 0;\n    z-index: 1000;\n    -ms-flex-positive: 1;\n    flex-grow: 1;\n    visibility: visible !important;\n    background-color: transparent;\n    border-right: 0;\n    border-left: 0;\n    transition: none;\n    -webkit-transform: none;\n    transform: none;\n  }\n  .navbar-expand-sm .offcanvas-top,\n  .navbar-expand-sm .offcanvas-bottom {\n    height: auto;\n    border-top: 0;\n    border-bottom: 0;\n  }\n  .navbar-expand-sm .offcanvas-body {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-positive: 0;\n    flex-grow: 0;\n    padding: 0;\n    overflow-y: visible;\n  }\n}\n\n@media (min-width: 768px) {\n  .navbar-expand-md {\n    -ms-flex-wrap: nowrap;\n    flex-wrap: nowrap;\n    -ms-flex-pack: start;\n    justify-content: flex-start;\n  }\n  .navbar-expand-md .navbar-nav {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .navbar-expand-md .navbar-nav .dropdown-menu {\n    position: absolute;\n  }\n  .navbar-expand-md .navbar-nav .nav-link {\n    padding-right: 0.5rem;\n    padding-left: 0.5rem;\n  }\n  .navbar-expand-md .navbar-nav-scroll {\n    overflow: visible;\n  }\n  .navbar-expand-md .navbar-collapse {\n    display: -ms-flexbox !important;\n    display: flex !important;\n    -ms-flex-preferred-size: auto;\n    flex-basis: auto;\n  }\n  .navbar-expand-md .navbar-toggler {\n    display: none;\n  }\n  .navbar-expand-md .offcanvas-header {\n    display: none;\n  }\n  .navbar-expand-md .offcanvas {\n    position: inherit;\n    bottom: 0;\n    z-index: 1000;\n    -ms-flex-positive: 1;\n    flex-grow: 1;\n    visibility: visible !important;\n    background-color: transparent;\n    border-right: 0;\n    border-left: 0;\n    transition: none;\n    -webkit-transform: none;\n    transform: none;\n  }\n  .navbar-expand-md .offcanvas-top,\n  .navbar-expand-md .offcanvas-bottom {\n    height: auto;\n    border-top: 0;\n    border-bottom: 0;\n  }\n  .navbar-expand-md .offcanvas-body {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-positive: 0;\n    flex-grow: 0;\n    padding: 0;\n    overflow-y: visible;\n  }\n}\n\n@media (min-width: 992px) {\n  .navbar-expand-lg {\n    -ms-flex-wrap: nowrap;\n    flex-wrap: nowrap;\n    -ms-flex-pack: start;\n    justify-content: flex-start;\n  }\n  .navbar-expand-lg .navbar-nav {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .navbar-expand-lg .navbar-nav .dropdown-menu {\n    position: absolute;\n  }\n  .navbar-expand-lg .navbar-nav .nav-link {\n    padding-right: 0.5rem;\n    padding-left: 0.5rem;\n  }\n  .navbar-expand-lg .navbar-nav-scroll {\n    overflow: visible;\n  }\n  .navbar-expand-lg .navbar-collapse {\n    display: -ms-flexbox !important;\n    display: flex !important;\n    -ms-flex-preferred-size: auto;\n    flex-basis: auto;\n  }\n  .navbar-expand-lg .navbar-toggler {\n    display: none;\n  }\n  .navbar-expand-lg .offcanvas-header {\n    display: none;\n  }\n  .navbar-expand-lg .offcanvas {\n    position: inherit;\n    bottom: 0;\n    z-index: 1000;\n    -ms-flex-positive: 1;\n    flex-grow: 1;\n    visibility: visible !important;\n    background-color: transparent;\n    border-right: 0;\n    border-left: 0;\n    transition: none;\n    -webkit-transform: none;\n    transform: none;\n  }\n  .navbar-expand-lg .offcanvas-top,\n  .navbar-expand-lg .offcanvas-bottom {\n    height: auto;\n    border-top: 0;\n    border-bottom: 0;\n  }\n  .navbar-expand-lg .offcanvas-body {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-positive: 0;\n    flex-grow: 0;\n    padding: 0;\n    overflow-y: visible;\n  }\n}\n\n@media (min-width: 1200px) {\n  .navbar-expand-xl {\n    -ms-flex-wrap: nowrap;\n    flex-wrap: nowrap;\n    -ms-flex-pack: start;\n    justify-content: flex-start;\n  }\n  .navbar-expand-xl .navbar-nav {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .navbar-expand-xl .navbar-nav .dropdown-menu {\n    position: absolute;\n  }\n  .navbar-expand-xl .navbar-nav .nav-link {\n    padding-right: 0.5rem;\n    padding-left: 0.5rem;\n  }\n  .navbar-expand-xl .navbar-nav-scroll {\n    overflow: visible;\n  }\n  .navbar-expand-xl .navbar-collapse {\n    display: -ms-flexbox !important;\n    display: flex !important;\n    -ms-flex-preferred-size: auto;\n    flex-basis: auto;\n  }\n  .navbar-expand-xl .navbar-toggler {\n    display: none;\n  }\n  .navbar-expand-xl .offcanvas-header {\n    display: none;\n  }\n  .navbar-expand-xl .offcanvas {\n    position: inherit;\n    bottom: 0;\n    z-index: 1000;\n    -ms-flex-positive: 1;\n    flex-grow: 1;\n    visibility: visible !important;\n    background-color: transparent;\n    border-right: 0;\n    border-left: 0;\n    transition: none;\n    -webkit-transform: none;\n    transform: none;\n  }\n  .navbar-expand-xl .offcanvas-top,\n  .navbar-expand-xl .offcanvas-bottom {\n    height: auto;\n    border-top: 0;\n    border-bottom: 0;\n  }\n  .navbar-expand-xl .offcanvas-body {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-positive: 0;\n    flex-grow: 0;\n    padding: 0;\n    overflow-y: visible;\n  }\n}\n\n@media (min-width: 1400px) {\n  .navbar-expand-xxl {\n    -ms-flex-wrap: nowrap;\n    flex-wrap: nowrap;\n    -ms-flex-pack: start;\n    justify-content: flex-start;\n  }\n  .navbar-expand-xxl .navbar-nav {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .navbar-expand-xxl .navbar-nav .dropdown-menu {\n    position: absolute;\n  }\n  .navbar-expand-xxl .navbar-nav .nav-link {\n    padding-right: 0.5rem;\n    padding-left: 0.5rem;\n  }\n  .navbar-expand-xxl .navbar-nav-scroll {\n    overflow: visible;\n  }\n  .navbar-expand-xxl .navbar-collapse {\n    display: -ms-flexbox !important;\n    display: flex !important;\n    -ms-flex-preferred-size: auto;\n    flex-basis: auto;\n  }\n  .navbar-expand-xxl .navbar-toggler {\n    display: none;\n  }\n  .navbar-expand-xxl .offcanvas-header {\n    display: none;\n  }\n  .navbar-expand-xxl .offcanvas {\n    position: inherit;\n    bottom: 0;\n    z-index: 1000;\n    -ms-flex-positive: 1;\n    flex-grow: 1;\n    visibility: visible !important;\n    background-color: transparent;\n    border-right: 0;\n    border-left: 0;\n    transition: none;\n    -webkit-transform: none;\n    transform: none;\n  }\n  .navbar-expand-xxl .offcanvas-top,\n  .navbar-expand-xxl .offcanvas-bottom {\n    height: auto;\n    border-top: 0;\n    border-bottom: 0;\n  }\n  .navbar-expand-xxl .offcanvas-body {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-positive: 0;\n    flex-grow: 0;\n    padding: 0;\n    overflow-y: visible;\n  }\n}\n\n.navbar-expand {\n  -ms-flex-wrap: nowrap;\n  flex-wrap: nowrap;\n  -ms-flex-pack: start;\n  justify-content: flex-start;\n}\n\n.navbar-expand .navbar-nav {\n  -ms-flex-direction: row;\n  flex-direction: row;\n}\n\n.navbar-expand .navbar-nav .dropdown-menu {\n  position: absolute;\n}\n\n.navbar-expand .navbar-nav .nav-link {\n  padding-right: 0.5rem;\n  padding-left: 0.5rem;\n}\n\n.navbar-expand .navbar-nav-scroll {\n  overflow: visible;\n}\n\n.navbar-expand .navbar-collapse {\n  display: -ms-flexbox !important;\n  display: flex !important;\n  -ms-flex-preferred-size: auto;\n  flex-basis: auto;\n}\n\n.navbar-expand .navbar-toggler {\n  display: none;\n}\n\n.navbar-expand .offcanvas-header {\n  display: none;\n}\n\n.navbar-expand .offcanvas {\n  position: inherit;\n  bottom: 0;\n  z-index: 1000;\n  -ms-flex-positive: 1;\n  flex-grow: 1;\n  visibility: visible !important;\n  background-color: transparent;\n  border-right: 0;\n  border-left: 0;\n  transition: none;\n  -webkit-transform: none;\n  transform: none;\n}\n\n.navbar-expand .offcanvas-top,\n.navbar-expand .offcanvas-bottom {\n  height: auto;\n  border-top: 0;\n  border-bottom: 0;\n}\n\n.navbar-expand .offcanvas-body {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-positive: 0;\n  flex-grow: 0;\n  padding: 0;\n  overflow-y: visible;\n}\n\n.navbar-light .navbar-brand {\n  color: rgba(0, 0, 0, 0.9);\n}\n\n.navbar-light .navbar-brand:hover, .navbar-light .navbar-brand:focus {\n  color: rgba(0, 0, 0, 0.9);\n}\n\n.navbar-light .navbar-nav .nav-link {\n  color: rgba(0, 0, 0, 0.55);\n}\n\n.navbar-light .navbar-nav .nav-link:hover, .navbar-light .navbar-nav .nav-link:focus {\n  color: rgba(0, 0, 0, 0.9);\n}\n\n.navbar-light .navbar-nav .nav-link.disabled {\n  color: rgba(0, 0, 0, 0.3);\n}\n\n.navbar-light .navbar-nav .show > .nav-link,\n.navbar-light .navbar-nav .nav-link.active {\n  color: rgba(0, 0, 0, 0.9);\n}\n\n.navbar-light .navbar-toggler {\n  color: rgba(0, 0, 0, 0.55);\n  border-color: rgba(0, 0, 0, 0.1);\n}\n\n.navbar-light .navbar-toggler-icon {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%280, 0, 0, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e\");\n}\n\n.navbar-light .navbar-text {\n  color: rgba(0, 0, 0, 0.55);\n}\n\n.navbar-light .navbar-text a,\n.navbar-light .navbar-text a:hover,\n.navbar-light .navbar-text a:focus {\n  color: rgba(0, 0, 0, 0.9);\n}\n\n.navbar-dark .navbar-brand {\n  color: #fff;\n}\n\n.navbar-dark .navbar-brand:hover, .navbar-dark .navbar-brand:focus {\n  color: #fff;\n}\n\n.navbar-dark .navbar-nav .nav-link {\n  color: rgba(255, 255, 255, 0.55);\n}\n\n.navbar-dark .navbar-nav .nav-link:hover, .navbar-dark .navbar-nav .nav-link:focus {\n  color: white;\n}\n\n.navbar-dark .navbar-nav .nav-link.disabled {\n  color: rgba(255, 255, 255, 0.25);\n}\n\n.navbar-dark .navbar-nav .show > .nav-link,\n.navbar-dark .navbar-nav .nav-link.active {\n  color: #fff;\n}\n\n.navbar-dark .navbar-toggler {\n  color: rgba(255, 255, 255, 0.55);\n  border-color: rgba(255, 255, 255, 0.1);\n}\n\n.navbar-dark .navbar-toggler-icon {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e\");\n}\n\n.navbar-dark .navbar-text {\n  color: rgba(255, 255, 255, 0.55);\n}\n\n.navbar-dark .navbar-text a,\n.navbar-dark .navbar-text a:hover,\n.navbar-dark .navbar-text a:focus {\n  color: #fff;\n}\n\n.card {\n  position: relative;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  min-width: 0;\n  word-wrap: break-word;\n  background-color: #fff;\n  background-clip: border-box;\n  border: 1px solid rgba(0, 0, 0, 0.125);\n}\n\n.card > hr {\n  margin-right: 0;\n  margin-left: 0;\n}\n\n.card > .list-group {\n  border-top: inherit;\n  border-bottom: inherit;\n}\n\n.card > .list-group:first-child {\n  border-top-width: 0;\n}\n\n.card > .list-group:last-child {\n  border-bottom-width: 0;\n}\n\n.card > .card-header + .list-group,\n.card > .list-group + .card-footer {\n  border-top: 0;\n}\n\n.card-body {\n  -ms-flex: 1 1 auto;\n  flex: 1 1 auto;\n  padding: 1rem 1rem;\n}\n\n.card-title {\n  margin-bottom: 0.5rem;\n}\n\n.card-subtitle {\n  margin-top: -0.25rem;\n  margin-bottom: 0;\n}\n\n.card-text:last-child {\n  margin-bottom: 0;\n}\n\n.card-link + .card-link {\n  margin-left: 1rem;\n}\n\n.card-header {\n  padding: 0.5rem 1rem;\n  margin-bottom: 0;\n  background-color: rgba(0, 0, 0, 0.03);\n  border-bottom: 1px solid rgba(0, 0, 0, 0.125);\n}\n\n.card-footer {\n  padding: 0.5rem 1rem;\n  background-color: rgba(0, 0, 0, 0.03);\n  border-top: 1px solid rgba(0, 0, 0, 0.125);\n}\n\n.card-header-tabs {\n  margin-right: -0.5rem;\n  margin-bottom: -0.5rem;\n  margin-left: -0.5rem;\n  border-bottom: 0;\n}\n\n.card-header-pills {\n  margin-right: -0.5rem;\n  margin-left: -0.5rem;\n}\n\n.card-img-overlay {\n  position: absolute;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  padding: 1rem;\n}\n\n.card-img,\n.card-img-top,\n.card-img-bottom {\n  width: 100%;\n}\n\n.card-group > .card {\n  margin-bottom: 0.75rem;\n}\n\n@media (min-width: 576px) {\n  .card-group {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-flow: row wrap;\n    flex-flow: row wrap;\n  }\n  .card-group > .card {\n    -ms-flex: 1 0 0%;\n    flex: 1 0 0%;\n    margin-bottom: 0;\n  }\n  .card-group > .card + .card {\n    margin-left: 0;\n    border-left: 0;\n  }\n}\n\n.accordion-button {\n  position: relative;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-align: center;\n  align-items: center;\n  width: 100%;\n  padding: 1rem 1.25rem;\n  font-size: 1rem;\n  color: #373a3c;\n  text-align: left;\n  background-color: #fff;\n  border: 0;\n  overflow-anchor: none;\n  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, border-radius 0.15s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .accordion-button {\n    transition: none;\n  }\n}\n\n.accordion-button:not(.collapsed) {\n  color: #2373cc;\n  background-color: #e9f2fc;\n  box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.125);\n}\n\n.accordion-button:not(.collapsed)::after {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%232373cc'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e\");\n  -webkit-transform: rotate(-180deg);\n  transform: rotate(-180deg);\n}\n\n.accordion-button::after {\n  -ms-flex-negative: 0;\n  flex-shrink: 0;\n  width: 1.25rem;\n  height: 1.25rem;\n  margin-left: auto;\n  content: \"\";\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23373a3c'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e\");\n  background-repeat: no-repeat;\n  background-size: 1.25rem;\n  transition: -webkit-transform 0.2s ease-in-out;\n  transition: transform 0.2s ease-in-out;\n  transition: transform 0.2s ease-in-out, -webkit-transform 0.2s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .accordion-button::after {\n    transition: none;\n  }\n}\n\n.accordion-button:hover {\n  z-index: 2;\n}\n\n.accordion-button:focus {\n  z-index: 3;\n  border-color: #93c0f1;\n  outline: 0;\n  box-shadow: 0 0 0 0.25rem rgba(39, 128, 227, 0.25);\n}\n\n.accordion-header {\n  margin-bottom: 0;\n}\n\n.accordion-item {\n  background-color: #fff;\n  border: 1px solid rgba(0, 0, 0, 0.125);\n}\n\n.accordion-item:not(:first-of-type) {\n  border-top: 0;\n}\n\n.accordion-body {\n  padding: 1rem 1.25rem;\n}\n\n.accordion-flush .accordion-collapse {\n  border-width: 0;\n}\n\n.accordion-flush .accordion-item {\n  border-right: 0;\n  border-left: 0;\n}\n\n.accordion-flush .accordion-item:first-child {\n  border-top: 0;\n}\n\n.accordion-flush .accordion-item:last-child {\n  border-bottom: 0;\n}\n\n.breadcrumb {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n  flex-wrap: wrap;\n  padding: 0 0;\n  margin-bottom: 1rem;\n  list-style: none;\n}\n\n.breadcrumb-item + .breadcrumb-item {\n  padding-left: 0.5rem;\n}\n\n.breadcrumb-item + .breadcrumb-item::before {\n  float: left;\n  padding-right: 0.5rem;\n  color: #868e96;\n  content: var(--bs-breadcrumb-divider, \"/\") /* rtl: var(--bs-breadcrumb-divider, \"/\") */;\n}\n\n.breadcrumb-item.active {\n  color: #868e96;\n}\n\n.pagination {\n  display: -ms-flexbox;\n  display: flex;\n  padding-left: 0;\n  list-style: none;\n}\n\n.page-link {\n  position: relative;\n  display: block;\n  color: #2780e3;\n  text-decoration: none;\n  background-color: #fff;\n  border: 1px solid #dee2e6;\n  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .page-link {\n    transition: none;\n  }\n}\n\n.page-link:hover {\n  z-index: 2;\n  color: #1f66b6;\n  background-color: #e9ecef;\n  border-color: #dee2e6;\n}\n\n.page-link:focus {\n  z-index: 3;\n  color: #1f66b6;\n  background-color: #e9ecef;\n  outline: 0;\n  box-shadow: 0 0 0 0.25rem rgba(39, 128, 227, 0.25);\n}\n\n.page-item:not(:first-child) .page-link {\n  margin-left: -1px;\n}\n\n.page-item.active .page-link {\n  z-index: 3;\n  color: #fff;\n  background-color: #2780e3;\n  border-color: #2780e3;\n}\n\n.page-item.disabled .page-link {\n  color: #868e96;\n  pointer-events: none;\n  background-color: #fff;\n  border-color: #dee2e6;\n}\n\n.page-link {\n  padding: 0.375rem 0.75rem;\n}\n\n.pagination-lg .page-link {\n  padding: 0.75rem 1.5rem;\n  font-size: 1.25rem;\n}\n\n.pagination-sm .page-link {\n  padding: 0.25rem 0.5rem;\n  font-size: 0.875rem;\n}\n\n.badge {\n  display: inline-block;\n  padding: 0.35em 0.65em;\n  font-size: 0.75em;\n  font-weight: 700;\n  line-height: 1;\n  color: #fff;\n  text-align: center;\n  white-space: nowrap;\n  vertical-align: baseline;\n}\n\n.badge:empty {\n  display: none;\n}\n\n.btn .badge {\n  position: relative;\n  top: -1px;\n}\n\n.alert {\n  position: relative;\n  padding: 1rem 1rem;\n  margin-bottom: 1rem;\n  border: 0 solid transparent;\n}\n\n.alert-heading {\n  color: inherit;\n}\n\n.alert-link {\n  font-weight: 700;\n}\n\n.alert-dismissible {\n  padding-right: 3rem;\n}\n\n.alert-dismissible .btn-close {\n  position: absolute;\n  top: 0;\n  right: 0;\n  z-index: 2;\n  padding: 1.25rem 1rem;\n}\n\n.alert-primary {\n  color: #174d88;\n  background-color: #d4e6f9;\n  border-color: #bed9f7;\n}\n\n.alert-primary .alert-link {\n  color: #123e6d;\n}\n\n.alert-secondary {\n  color: #212324;\n  background-color: #d7d8d8;\n  border-color: #c3c4c5;\n}\n\n.alert-secondary .alert-link {\n  color: #1a1c1d;\n}\n\n.alert-success {\n  color: #266d0e;\n  background-color: #d9f0d1;\n  border-color: #c5e9ba;\n}\n\n.alert-success .alert-link {\n  color: #1e570b;\n}\n\n.alert-info {\n  color: #5c3270;\n  background-color: #ebddf1;\n  border-color: #e0cceb;\n}\n\n.alert-info .alert-link {\n  color: #4a285a;\n}\n\n.alert-warning {\n  color: #99460e;\n  background-color: #ffe3d1;\n  border-color: #ffd6ba;\n}\n\n.alert-warning .alert-link {\n  color: #7a380b;\n}\n\n.alert-danger {\n  color: #990022;\n  background-color: #ffccd7;\n  border-color: #ffb3c4;\n}\n\n.alert-danger .alert-link {\n  color: #7a001b;\n}\n\n.alert-light {\n  color: #959596;\n  background-color: #fefefe;\n  border-color: #fdfdfe;\n}\n\n.alert-light .alert-link {\n  color: #777778;\n}\n\n.alert-dark {\n  color: #212324;\n  background-color: #d7d8d8;\n  border-color: #c3c4c5;\n}\n\n.alert-dark .alert-link {\n  color: #1a1c1d;\n}\n\n@-webkit-keyframes progress-bar-stripes {\n  0% {\n    background-position-x: 0.5rem;\n  }\n}\n\n@keyframes progress-bar-stripes {\n  0% {\n    background-position-x: 0.5rem;\n  }\n}\n\n.progress {\n  display: -ms-flexbox;\n  display: flex;\n  height: 0.5rem;\n  overflow: hidden;\n  font-size: 0.75rem;\n  background-color: #e9ecef;\n}\n\n.progress-bar {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  -ms-flex-pack: center;\n  justify-content: center;\n  overflow: hidden;\n  color: #fff;\n  text-align: center;\n  white-space: nowrap;\n  background-color: #2780e3;\n  transition: width 0.6s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .progress-bar {\n    transition: none;\n  }\n}\n\n.progress-bar-striped {\n  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-size: 0.5rem 0.5rem;\n}\n\n.progress-bar-animated {\n  -webkit-animation: 1s linear infinite progress-bar-stripes;\n  animation: 1s linear infinite progress-bar-stripes;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .progress-bar-animated {\n    -webkit-animation: none;\n    animation: none;\n  }\n}\n\n.list-group {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  padding-left: 0;\n  margin-bottom: 0;\n}\n\n.list-group-numbered {\n  list-style-type: none;\n  counter-reset: section;\n}\n\n.list-group-numbered > li::before {\n  content: counters(section, \".\") \". \";\n  counter-increment: section;\n}\n\n.list-group-item-action {\n  width: 100%;\n  color: #495057;\n  text-align: inherit;\n}\n\n.list-group-item-action:hover, .list-group-item-action:focus {\n  z-index: 1;\n  color: #495057;\n  text-decoration: none;\n  background-color: #f8f9fa;\n}\n\n.list-group-item-action:active {\n  color: #373a3c;\n  background-color: #e9ecef;\n}\n\n.list-group-item {\n  position: relative;\n  display: block;\n  padding: 0.5rem 1rem;\n  color: #212529;\n  text-decoration: none;\n  background-color: #fff;\n  border: 1px solid rgba(0, 0, 0, 0.125);\n}\n\n.list-group-item.disabled, .list-group-item:disabled {\n  color: #868e96;\n  pointer-events: none;\n  background-color: #fff;\n}\n\n.list-group-item.active {\n  z-index: 2;\n  color: #fff;\n  background-color: #2780e3;\n  border-color: #2780e3;\n}\n\n.list-group-item + .list-group-item {\n  border-top-width: 0;\n}\n\n.list-group-item + .list-group-item.active {\n  margin-top: -1px;\n  border-top-width: 1px;\n}\n\n.list-group-horizontal {\n  -ms-flex-direction: row;\n  flex-direction: row;\n}\n\n.list-group-horizontal > .list-group-item.active {\n  margin-top: 0;\n}\n\n.list-group-horizontal > .list-group-item + .list-group-item {\n  border-top-width: 1px;\n  border-left-width: 0;\n}\n\n.list-group-horizontal > .list-group-item + .list-group-item.active {\n  margin-left: -1px;\n  border-left-width: 1px;\n}\n\n@media (min-width: 576px) {\n  .list-group-horizontal-sm {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .list-group-horizontal-sm > .list-group-item.active {\n    margin-top: 0;\n  }\n  .list-group-horizontal-sm > .list-group-item + .list-group-item {\n    border-top-width: 1px;\n    border-left-width: 0;\n  }\n  .list-group-horizontal-sm > .list-group-item + .list-group-item.active {\n    margin-left: -1px;\n    border-left-width: 1px;\n  }\n}\n\n@media (min-width: 768px) {\n  .list-group-horizontal-md {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .list-group-horizontal-md > .list-group-item.active {\n    margin-top: 0;\n  }\n  .list-group-horizontal-md > .list-group-item + .list-group-item {\n    border-top-width: 1px;\n    border-left-width: 0;\n  }\n  .list-group-horizontal-md > .list-group-item + .list-group-item.active {\n    margin-left: -1px;\n    border-left-width: 1px;\n  }\n}\n\n@media (min-width: 992px) {\n  .list-group-horizontal-lg {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .list-group-horizontal-lg > .list-group-item.active {\n    margin-top: 0;\n  }\n  .list-group-horizontal-lg > .list-group-item + .list-group-item {\n    border-top-width: 1px;\n    border-left-width: 0;\n  }\n  .list-group-horizontal-lg > .list-group-item + .list-group-item.active {\n    margin-left: -1px;\n    border-left-width: 1px;\n  }\n}\n\n@media (min-width: 1200px) {\n  .list-group-horizontal-xl {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .list-group-horizontal-xl > .list-group-item.active {\n    margin-top: 0;\n  }\n  .list-group-horizontal-xl > .list-group-item + .list-group-item {\n    border-top-width: 1px;\n    border-left-width: 0;\n  }\n  .list-group-horizontal-xl > .list-group-item + .list-group-item.active {\n    margin-left: -1px;\n    border-left-width: 1px;\n  }\n}\n\n@media (min-width: 1400px) {\n  .list-group-horizontal-xxl {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .list-group-horizontal-xxl > .list-group-item.active {\n    margin-top: 0;\n  }\n  .list-group-horizontal-xxl > .list-group-item + .list-group-item {\n    border-top-width: 1px;\n    border-left-width: 0;\n  }\n  .list-group-horizontal-xxl > .list-group-item + .list-group-item.active {\n    margin-left: -1px;\n    border-left-width: 1px;\n  }\n}\n\n.list-group-flush > .list-group-item {\n  border-width: 0 0 1px;\n}\n\n.list-group-flush > .list-group-item:last-child {\n  border-bottom-width: 0;\n}\n\n.list-group-item-primary {\n  color: #174d88;\n  background-color: #d4e6f9;\n}\n\n.list-group-item-primary.list-group-item-action:hover, .list-group-item-primary.list-group-item-action:focus {\n  color: #174d88;\n  background-color: #bfcfe0;\n}\n\n.list-group-item-primary.list-group-item-action.active {\n  color: #fff;\n  background-color: #174d88;\n  border-color: #174d88;\n}\n\n.list-group-item-secondary {\n  color: #212324;\n  background-color: #d7d8d8;\n}\n\n.list-group-item-secondary.list-group-item-action:hover, .list-group-item-secondary.list-group-item-action:focus {\n  color: #212324;\n  background-color: #c2c2c2;\n}\n\n.list-group-item-secondary.list-group-item-action.active {\n  color: #fff;\n  background-color: #212324;\n  border-color: #212324;\n}\n\n.list-group-item-success {\n  color: #266d0e;\n  background-color: #d9f0d1;\n}\n\n.list-group-item-success.list-group-item-action:hover, .list-group-item-success.list-group-item-action:focus {\n  color: #266d0e;\n  background-color: #c3d8bc;\n}\n\n.list-group-item-success.list-group-item-action.active {\n  color: #fff;\n  background-color: #266d0e;\n  border-color: #266d0e;\n}\n\n.list-group-item-info {\n  color: #5c3270;\n  background-color: #ebddf1;\n}\n\n.list-group-item-info.list-group-item-action:hover, .list-group-item-info.list-group-item-action:focus {\n  color: #5c3270;\n  background-color: #d4c7d9;\n}\n\n.list-group-item-info.list-group-item-action.active {\n  color: #fff;\n  background-color: #5c3270;\n  border-color: #5c3270;\n}\n\n.list-group-item-warning {\n  color: #99460e;\n  background-color: #ffe3d1;\n}\n\n.list-group-item-warning.list-group-item-action:hover, .list-group-item-warning.list-group-item-action:focus {\n  color: #99460e;\n  background-color: #e6ccbc;\n}\n\n.list-group-item-warning.list-group-item-action.active {\n  color: #fff;\n  background-color: #99460e;\n  border-color: #99460e;\n}\n\n.list-group-item-danger {\n  color: #990022;\n  background-color: #ffccd7;\n}\n\n.list-group-item-danger.list-group-item-action:hover, .list-group-item-danger.list-group-item-action:focus {\n  color: #990022;\n  background-color: #e6b8c2;\n}\n\n.list-group-item-danger.list-group-item-action.active {\n  color: #fff;\n  background-color: #990022;\n  border-color: #990022;\n}\n\n.list-group-item-light {\n  color: #959596;\n  background-color: #fefefe;\n}\n\n.list-group-item-light.list-group-item-action:hover, .list-group-item-light.list-group-item-action:focus {\n  color: #959596;\n  background-color: #e5e5e5;\n}\n\n.list-group-item-light.list-group-item-action.active {\n  color: #fff;\n  background-color: #959596;\n  border-color: #959596;\n}\n\n.list-group-item-dark {\n  color: #212324;\n  background-color: #d7d8d8;\n}\n\n.list-group-item-dark.list-group-item-action:hover, .list-group-item-dark.list-group-item-action:focus {\n  color: #212324;\n  background-color: #c2c2c2;\n}\n\n.list-group-item-dark.list-group-item-action.active {\n  color: #fff;\n  background-color: #212324;\n  border-color: #212324;\n}\n\n.btn-close {\n  box-sizing: content-box;\n  width: 1em;\n  height: 1em;\n  padding: 0.25em 0.25em;\n  color: #000;\n  background: transparent url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23000'%3e%3cpath d='M.293.293a1 1 0 011.414 0L8 6.586 14.293.293a1 1 0 111.414 1.414L9.414 8l6.293 6.293a1 1 0 01-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 01-1.414-1.414L6.586 8 .293 1.707a1 1 0 010-1.414z'/%3e%3c/svg%3e\") center/1em auto no-repeat;\n  border: 0;\n  opacity: 0.5;\n}\n\n.btn-close:hover {\n  color: #000;\n  text-decoration: none;\n  opacity: 0.75;\n}\n\n.btn-close:focus {\n  outline: 0;\n  box-shadow: 0 0 0 0.25rem rgba(39, 128, 227, 0.25);\n  opacity: 1;\n}\n\n.btn-close:disabled, .btn-close.disabled {\n  pointer-events: none;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  user-select: none;\n  opacity: 0.25;\n}\n\n.btn-close-white {\n  -webkit-filter: invert(1) grayscale(100%) brightness(200%);\n  filter: invert(1) grayscale(100%) brightness(200%);\n}\n\n.toast {\n  width: 350px;\n  max-width: 100%;\n  font-size: 0.875rem;\n  pointer-events: auto;\n  background-color: rgba(255, 255, 255, 0.85);\n  background-clip: padding-box;\n  border: 1px solid rgba(0, 0, 0, 0.1);\n  box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15);\n}\n\n.toast.showing {\n  opacity: 0;\n}\n\n.toast:not(.show) {\n  display: none;\n}\n\n.toast-container {\n  width: -webkit-max-content;\n  width: -moz-max-content;\n  width: max-content;\n  max-width: 100%;\n  pointer-events: none;\n}\n\n.toast-container > :not(:last-child) {\n  margin-bottom: 0.75rem;\n}\n\n.toast-header {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-align: center;\n  align-items: center;\n  padding: 0.5rem 0.75rem;\n  color: #868e96;\n  background-color: rgba(255, 255, 255, 0.85);\n  background-clip: padding-box;\n  border-bottom: 1px solid rgba(0, 0, 0, 0.05);\n}\n\n.toast-header .btn-close {\n  margin-right: -0.375rem;\n  margin-left: 0.75rem;\n}\n\n.toast-body {\n  padding: 0.75rem;\n  word-wrap: break-word;\n}\n\n.modal {\n  position: fixed;\n  top: 0;\n  left: 0;\n  z-index: 1055;\n  display: none;\n  width: 100%;\n  height: 100%;\n  overflow-x: hidden;\n  overflow-y: auto;\n  outline: 0;\n}\n\n.modal-dialog {\n  position: relative;\n  width: auto;\n  margin: 0.5rem;\n  pointer-events: none;\n}\n\n.modal.fade .modal-dialog {\n  transition: -webkit-transform 0.3s ease-out;\n  transition: transform 0.3s ease-out;\n  transition: transform 0.3s ease-out, -webkit-transform 0.3s ease-out;\n  -webkit-transform: translate(0, -50px);\n  transform: translate(0, -50px);\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .modal.fade .modal-dialog {\n    transition: none;\n  }\n}\n\n.modal.show .modal-dialog {\n  -webkit-transform: none;\n  transform: none;\n}\n\n.modal.modal-static .modal-dialog {\n  -webkit-transform: scale(1.02);\n  transform: scale(1.02);\n}\n\n.modal-dialog-scrollable {\n  height: calc(100% - 1rem);\n}\n\n.modal-dialog-scrollable .modal-content {\n  max-height: 100%;\n  overflow: hidden;\n}\n\n.modal-dialog-scrollable .modal-body {\n  overflow-y: auto;\n}\n\n.modal-dialog-centered {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-align: center;\n  align-items: center;\n  min-height: calc(100% - 1rem);\n}\n\n.modal-content {\n  position: relative;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  width: 100%;\n  pointer-events: auto;\n  background-color: #fff;\n  background-clip: padding-box;\n  border: 1px solid rgba(0, 0, 0, 0.2);\n  outline: 0;\n}\n\n.modal-backdrop {\n  position: fixed;\n  top: 0;\n  left: 0;\n  z-index: 1050;\n  width: 100vw;\n  height: 100vh;\n  background-color: #000;\n}\n\n.modal-backdrop.fade {\n  opacity: 0;\n}\n\n.modal-backdrop.show {\n  opacity: 0.5;\n}\n\n.modal-header {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-negative: 0;\n  flex-shrink: 0;\n  -ms-flex-align: center;\n  align-items: center;\n  -ms-flex-pack: justify;\n  justify-content: space-between;\n  padding: 1rem 1rem;\n  border-bottom: 1px solid #dee2e6;\n}\n\n.modal-header .btn-close {\n  padding: 0.5rem 0.5rem;\n  margin: -0.5rem -0.5rem -0.5rem auto;\n}\n\n.modal-title {\n  margin-bottom: 0;\n  line-height: 1.5;\n}\n\n.modal-body {\n  position: relative;\n  -ms-flex: 1 1 auto;\n  flex: 1 1 auto;\n  padding: 1rem;\n}\n\n.modal-footer {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n  flex-wrap: wrap;\n  -ms-flex-negative: 0;\n  flex-shrink: 0;\n  -ms-flex-align: center;\n  align-items: center;\n  -ms-flex-pack: end;\n  justify-content: flex-end;\n  padding: 0.75rem;\n  border-top: 1px solid #dee2e6;\n}\n\n.modal-footer > * {\n  margin: 0.25rem;\n}\n\n@media (min-width: 576px) {\n  .modal-dialog {\n    max-width: 500px;\n    margin: 1.75rem auto;\n  }\n  .modal-dialog-scrollable {\n    height: calc(100% - 3.5rem);\n  }\n  .modal-dialog-centered {\n    min-height: calc(100% - 3.5rem);\n  }\n  .modal-sm {\n    max-width: 300px;\n  }\n}\n\n@media (min-width: 992px) {\n  .modal-lg,\n  .modal-xl {\n    max-width: 800px;\n  }\n}\n\n@media (min-width: 1200px) {\n  .modal-xl {\n    max-width: 1140px;\n  }\n}\n\n.modal-fullscreen {\n  width: 100vw;\n  max-width: none;\n  height: 100%;\n  margin: 0;\n}\n\n.modal-fullscreen .modal-content {\n  height: 100%;\n  border: 0;\n}\n\n.modal-fullscreen .modal-body {\n  overflow-y: auto;\n}\n\n@media (max-width: 575.98px) {\n  .modal-fullscreen-sm-down {\n    width: 100vw;\n    max-width: none;\n    height: 100%;\n    margin: 0;\n  }\n  .modal-fullscreen-sm-down .modal-content {\n    height: 100%;\n    border: 0;\n  }\n  .modal-fullscreen-sm-down .modal-body {\n    overflow-y: auto;\n  }\n}\n\n@media (max-width: 767.98px) {\n  .modal-fullscreen-md-down {\n    width: 100vw;\n    max-width: none;\n    height: 100%;\n    margin: 0;\n  }\n  .modal-fullscreen-md-down .modal-content {\n    height: 100%;\n    border: 0;\n  }\n  .modal-fullscreen-md-down .modal-body {\n    overflow-y: auto;\n  }\n}\n\n@media (max-width: 991.98px) {\n  .modal-fullscreen-lg-down {\n    width: 100vw;\n    max-width: none;\n    height: 100%;\n    margin: 0;\n  }\n  .modal-fullscreen-lg-down .modal-content {\n    height: 100%;\n    border: 0;\n  }\n  .modal-fullscreen-lg-down .modal-body {\n    overflow-y: auto;\n  }\n}\n\n@media (max-width: 1199.98px) {\n  .modal-fullscreen-xl-down {\n    width: 100vw;\n    max-width: none;\n    height: 100%;\n    margin: 0;\n  }\n  .modal-fullscreen-xl-down .modal-content {\n    height: 100%;\n    border: 0;\n  }\n  .modal-fullscreen-xl-down .modal-body {\n    overflow-y: auto;\n  }\n}\n\n@media (max-width: 1399.98px) {\n  .modal-fullscreen-xxl-down {\n    width: 100vw;\n    max-width: none;\n    height: 100%;\n    margin: 0;\n  }\n  .modal-fullscreen-xxl-down .modal-content {\n    height: 100%;\n    border: 0;\n  }\n  .modal-fullscreen-xxl-down .modal-body {\n    overflow-y: auto;\n  }\n}\n\n.tooltip {\n  position: absolute;\n  z-index: 1080;\n  display: block;\n  margin: 0;\n  font-family: var(--bs-font-sans-serif);\n  font-style: normal;\n  font-weight: 400;\n  line-height: 1.5;\n  text-align: left;\n  text-align: start;\n  text-decoration: none;\n  text-shadow: none;\n  text-transform: none;\n  letter-spacing: normal;\n  word-break: normal;\n  word-spacing: normal;\n  white-space: normal;\n  line-break: auto;\n  font-size: 0.875rem;\n  word-wrap: break-word;\n  opacity: 0;\n}\n\n.tooltip.show {\n  opacity: 0.9;\n}\n\n.tooltip .tooltip-arrow {\n  position: absolute;\n  display: block;\n  width: 0.8rem;\n  height: 0.4rem;\n}\n\n.tooltip .tooltip-arrow::before {\n  position: absolute;\n  content: \"\";\n  border-color: transparent;\n  border-style: solid;\n}\n\n.bs-tooltip-top, .bs-tooltip-auto[data-popper-placement^=\"top\"] {\n  padding: 0.4rem 0;\n}\n\n.bs-tooltip-top .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=\"top\"] .tooltip-arrow {\n  bottom: 0;\n}\n\n.bs-tooltip-top .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=\"top\"] .tooltip-arrow::before {\n  top: -1px;\n  border-width: 0.4rem 0.4rem 0;\n  border-top-color: #000;\n}\n\n.bs-tooltip-end, .bs-tooltip-auto[data-popper-placement^=\"right\"] {\n  padding: 0 0.4rem;\n}\n\n.bs-tooltip-end .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=\"right\"] .tooltip-arrow {\n  left: 0;\n  width: 0.4rem;\n  height: 0.8rem;\n}\n\n.bs-tooltip-end .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=\"right\"] .tooltip-arrow::before {\n  right: -1px;\n  border-width: 0.4rem 0.4rem 0.4rem 0;\n  border-right-color: #000;\n}\n\n.bs-tooltip-bottom, .bs-tooltip-auto[data-popper-placement^=\"bottom\"] {\n  padding: 0.4rem 0;\n}\n\n.bs-tooltip-bottom .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=\"bottom\"] .tooltip-arrow {\n  top: 0;\n}\n\n.bs-tooltip-bottom .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=\"bottom\"] .tooltip-arrow::before {\n  bottom: -1px;\n  border-width: 0 0.4rem 0.4rem;\n  border-bottom-color: #000;\n}\n\n.bs-tooltip-start, .bs-tooltip-auto[data-popper-placement^=\"left\"] {\n  padding: 0 0.4rem;\n}\n\n.bs-tooltip-start .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=\"left\"] .tooltip-arrow {\n  right: 0;\n  width: 0.4rem;\n  height: 0.8rem;\n}\n\n.bs-tooltip-start .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=\"left\"] .tooltip-arrow::before {\n  left: -1px;\n  border-width: 0.4rem 0 0.4rem 0.4rem;\n  border-left-color: #000;\n}\n\n.tooltip-inner {\n  max-width: 200px;\n  padding: 0.25rem 0.5rem;\n  color: #fff;\n  text-align: center;\n  background-color: #000;\n}\n\n.popover {\n  position: absolute;\n  top: 0;\n  left: 0 /* rtl:ignore */;\n  z-index: 1070;\n  display: block;\n  max-width: 276px;\n  font-family: var(--bs-font-sans-serif);\n  font-style: normal;\n  font-weight: 400;\n  line-height: 1.5;\n  text-align: left;\n  text-align: start;\n  text-decoration: none;\n  text-shadow: none;\n  text-transform: none;\n  letter-spacing: normal;\n  word-break: normal;\n  word-spacing: normal;\n  white-space: normal;\n  line-break: auto;\n  font-size: 0.875rem;\n  word-wrap: break-word;\n  background-color: #fff;\n  background-clip: padding-box;\n  border: 1px solid rgba(0, 0, 0, 0.2);\n}\n\n.popover .popover-arrow {\n  position: absolute;\n  display: block;\n  width: 1rem;\n  height: 0.5rem;\n}\n\n.popover .popover-arrow::before, .popover .popover-arrow::after {\n  position: absolute;\n  display: block;\n  content: \"\";\n  border-color: transparent;\n  border-style: solid;\n}\n\n.bs-popover-top > .popover-arrow, .bs-popover-auto[data-popper-placement^=\"top\"] > .popover-arrow {\n  bottom: calc(-0.5rem - 1px);\n}\n\n.bs-popover-top > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=\"top\"] > .popover-arrow::before {\n  bottom: 0;\n  border-width: 0.5rem 0.5rem 0;\n  border-top-color: rgba(0, 0, 0, 0.25);\n}\n\n.bs-popover-top > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=\"top\"] > .popover-arrow::after {\n  bottom: 1px;\n  border-width: 0.5rem 0.5rem 0;\n  border-top-color: #fff;\n}\n\n.bs-popover-end > .popover-arrow, .bs-popover-auto[data-popper-placement^=\"right\"] > .popover-arrow {\n  left: calc(-0.5rem - 1px);\n  width: 0.5rem;\n  height: 1rem;\n}\n\n.bs-popover-end > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=\"right\"] > .popover-arrow::before {\n  left: 0;\n  border-width: 0.5rem 0.5rem 0.5rem 0;\n  border-right-color: rgba(0, 0, 0, 0.25);\n}\n\n.bs-popover-end > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=\"right\"] > .popover-arrow::after {\n  left: 1px;\n  border-width: 0.5rem 0.5rem 0.5rem 0;\n  border-right-color: #fff;\n}\n\n.bs-popover-bottom > .popover-arrow, .bs-popover-auto[data-popper-placement^=\"bottom\"] > .popover-arrow {\n  top: calc(-0.5rem - 1px);\n}\n\n.bs-popover-bottom > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=\"bottom\"] > .popover-arrow::before {\n  top: 0;\n  border-width: 0 0.5rem 0.5rem 0.5rem;\n  border-bottom-color: rgba(0, 0, 0, 0.25);\n}\n\n.bs-popover-bottom > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=\"bottom\"] > .popover-arrow::after {\n  top: 1px;\n  border-width: 0 0.5rem 0.5rem 0.5rem;\n  border-bottom-color: #fff;\n}\n\n.bs-popover-bottom .popover-header::before, .bs-popover-auto[data-popper-placement^=\"bottom\"] .popover-header::before {\n  position: absolute;\n  top: 0;\n  left: 50%;\n  display: block;\n  width: 1rem;\n  margin-left: -0.5rem;\n  content: \"\";\n  border-bottom: 1px solid #f0f0f0;\n}\n\n.bs-popover-start > .popover-arrow, .bs-popover-auto[data-popper-placement^=\"left\"] > .popover-arrow {\n  right: calc(-0.5rem - 1px);\n  width: 0.5rem;\n  height: 1rem;\n}\n\n.bs-popover-start > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=\"left\"] > .popover-arrow::before {\n  right: 0;\n  border-width: 0.5rem 0 0.5rem 0.5rem;\n  border-left-color: rgba(0, 0, 0, 0.25);\n}\n\n.bs-popover-start > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=\"left\"] > .popover-arrow::after {\n  right: 1px;\n  border-width: 0.5rem 0 0.5rem 0.5rem;\n  border-left-color: #fff;\n}\n\n.popover-header {\n  padding: 0.5rem 1rem;\n  margin-bottom: 0;\n  font-size: 1rem;\n  background-color: #f0f0f0;\n  border-bottom: 1px solid rgba(0, 0, 0, 0.2);\n}\n\n.popover-header:empty {\n  display: none;\n}\n\n.popover-body {\n  padding: 1rem 1rem;\n  color: #373a3c;\n}\n\n.carousel {\n  position: relative;\n}\n\n.carousel.pointer-event {\n  -ms-touch-action: pan-y;\n  touch-action: pan-y;\n}\n\n.carousel-inner {\n  position: relative;\n  width: 100%;\n  overflow: hidden;\n}\n\n.carousel-inner::after {\n  display: block;\n  clear: both;\n  content: \"\";\n}\n\n.carousel-item {\n  position: relative;\n  display: none;\n  float: left;\n  width: 100%;\n  margin-right: -100%;\n  -webkit-backface-visibility: hidden;\n  backface-visibility: hidden;\n  transition: -webkit-transform 0.6s ease-in-out;\n  transition: transform 0.6s ease-in-out;\n  transition: transform 0.6s ease-in-out, -webkit-transform 0.6s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .carousel-item {\n    transition: none;\n  }\n}\n\n.carousel-item.active,\n.carousel-item-next,\n.carousel-item-prev {\n  display: block;\n}\n\n/* rtl:begin:ignore */\n.carousel-item-next:not(.carousel-item-start),\n.active.carousel-item-end {\n  -webkit-transform: translateX(100%);\n  transform: translateX(100%);\n}\n\n.carousel-item-prev:not(.carousel-item-end),\n.active.carousel-item-start {\n  -webkit-transform: translateX(-100%);\n  transform: translateX(-100%);\n}\n\n/* rtl:end:ignore */\n.carousel-fade .carousel-item {\n  opacity: 0;\n  transition-property: opacity;\n  -webkit-transform: none;\n  transform: none;\n}\n\n.carousel-fade .carousel-item.active,\n.carousel-fade .carousel-item-next.carousel-item-start,\n.carousel-fade .carousel-item-prev.carousel-item-end {\n  z-index: 1;\n  opacity: 1;\n}\n\n.carousel-fade .active.carousel-item-start,\n.carousel-fade .active.carousel-item-end {\n  z-index: 0;\n  opacity: 0;\n  transition: opacity 0s 0.6s;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .carousel-fade .active.carousel-item-start,\n  .carousel-fade .active.carousel-item-end {\n    transition: none;\n  }\n}\n\n.carousel-control-prev,\n.carousel-control-next {\n  position: absolute;\n  top: 0;\n  bottom: 0;\n  z-index: 1;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-align: center;\n  align-items: center;\n  -ms-flex-pack: center;\n  justify-content: center;\n  width: 15%;\n  padding: 0;\n  color: #fff;\n  text-align: center;\n  background: none;\n  border: 0;\n  opacity: 0.5;\n  transition: opacity 0.15s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .carousel-control-prev,\n  .carousel-control-next {\n    transition: none;\n  }\n}\n\n.carousel-control-prev:hover, .carousel-control-prev:focus,\n.carousel-control-next:hover,\n.carousel-control-next:focus {\n  color: #fff;\n  text-decoration: none;\n  outline: 0;\n  opacity: 0.9;\n}\n\n.carousel-control-prev {\n  left: 0;\n}\n\n.carousel-control-next {\n  right: 0;\n}\n\n.carousel-control-prev-icon,\n.carousel-control-next-icon {\n  display: inline-block;\n  width: 2rem;\n  height: 2rem;\n  background-repeat: no-repeat;\n  background-position: 50%;\n  background-size: 100% 100%;\n}\n\n/* rtl:options: {\n  \"autoRename\": true,\n  \"stringMap\":[ {\n    \"name\"    : \"prev-next\",\n    \"search\"  : \"prev\",\n    \"replace\" : \"next\"\n  } ]\n} */\n.carousel-control-prev-icon {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0z'/%3e%3c/svg%3e\");\n}\n\n.carousel-control-next-icon {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e\");\n}\n\n.carousel-indicators {\n  position: absolute;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 2;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-pack: center;\n  justify-content: center;\n  padding: 0;\n  margin-right: 15%;\n  margin-bottom: 1rem;\n  margin-left: 15%;\n  list-style: none;\n}\n\n.carousel-indicators [data-bs-target] {\n  box-sizing: content-box;\n  -ms-flex: 0 1 auto;\n  flex: 0 1 auto;\n  width: 30px;\n  height: 3px;\n  padding: 0;\n  margin-right: 3px;\n  margin-left: 3px;\n  text-indent: -999px;\n  cursor: pointer;\n  background-color: #fff;\n  background-clip: padding-box;\n  border: 0;\n  border-top: 10px solid transparent;\n  border-bottom: 10px solid transparent;\n  opacity: 0.5;\n  transition: opacity 0.6s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .carousel-indicators [data-bs-target] {\n    transition: none;\n  }\n}\n\n.carousel-indicators .active {\n  opacity: 1;\n}\n\n.carousel-caption {\n  position: absolute;\n  right: 15%;\n  bottom: 1.25rem;\n  left: 15%;\n  padding-top: 1.25rem;\n  padding-bottom: 1.25rem;\n  color: #fff;\n  text-align: center;\n}\n\n.carousel-dark .carousel-control-prev-icon,\n.carousel-dark .carousel-control-next-icon {\n  -webkit-filter: invert(1) grayscale(100);\n  filter: invert(1) grayscale(100);\n}\n\n.carousel-dark .carousel-indicators [data-bs-target] {\n  background-color: #000;\n}\n\n.carousel-dark .carousel-caption {\n  color: #000;\n}\n\n@-webkit-keyframes spinner-border {\n  to {\n    -webkit-transform: rotate(360deg) /* rtl:ignore */;\n    transform: rotate(360deg) /* rtl:ignore */;\n  }\n}\n\n@keyframes spinner-border {\n  to {\n    -webkit-transform: rotate(360deg) /* rtl:ignore */;\n    transform: rotate(360deg) /* rtl:ignore */;\n  }\n}\n\n.spinner-border {\n  display: inline-block;\n  width: 2rem;\n  height: 2rem;\n  vertical-align: -0.125em;\n  border: 0.25em solid currentColor;\n  border-right-color: transparent;\n  border-radius: 50%;\n  -webkit-animation: 0.75s linear infinite spinner-border;\n  animation: 0.75s linear infinite spinner-border;\n}\n\n.spinner-border-sm {\n  width: 1rem;\n  height: 1rem;\n  border-width: 0.2em;\n}\n\n@-webkit-keyframes spinner-grow {\n  0% {\n    -webkit-transform: scale(0);\n    transform: scale(0);\n  }\n  50% {\n    opacity: 1;\n    -webkit-transform: none;\n    transform: none;\n  }\n}\n\n@keyframes spinner-grow {\n  0% {\n    -webkit-transform: scale(0);\n    transform: scale(0);\n  }\n  50% {\n    opacity: 1;\n    -webkit-transform: none;\n    transform: none;\n  }\n}\n\n.spinner-grow {\n  display: inline-block;\n  width: 2rem;\n  height: 2rem;\n  vertical-align: -0.125em;\n  background-color: currentColor;\n  border-radius: 50%;\n  opacity: 0;\n  -webkit-animation: 0.75s linear infinite spinner-grow;\n  animation: 0.75s linear infinite spinner-grow;\n}\n\n.spinner-grow-sm {\n  width: 1rem;\n  height: 1rem;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .spinner-border,\n  .spinner-grow {\n    -webkit-animation-duration: 1.5s;\n    animation-duration: 1.5s;\n  }\n}\n\n.offcanvas {\n  position: fixed;\n  bottom: 0;\n  z-index: 1045;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  max-width: 100%;\n  visibility: hidden;\n  background-color: #fff;\n  background-clip: padding-box;\n  outline: 0;\n  transition: -webkit-transform 0.3s ease-in-out;\n  transition: transform 0.3s ease-in-out;\n  transition: transform 0.3s ease-in-out, -webkit-transform 0.3s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .offcanvas {\n    transition: none;\n  }\n}\n\n.offcanvas-backdrop {\n  position: fixed;\n  top: 0;\n  left: 0;\n  z-index: 1040;\n  width: 100vw;\n  height: 100vh;\n  background-color: #000;\n}\n\n.offcanvas-backdrop.fade {\n  opacity: 0;\n}\n\n.offcanvas-backdrop.show {\n  opacity: 0.5;\n}\n\n.offcanvas-header {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-align: center;\n  align-items: center;\n  -ms-flex-pack: justify;\n  justify-content: space-between;\n  padding: 1rem 1rem;\n}\n\n.offcanvas-header .btn-close {\n  padding: 0.5rem 0.5rem;\n  margin-top: -0.5rem;\n  margin-right: -0.5rem;\n  margin-bottom: -0.5rem;\n}\n\n.offcanvas-title {\n  margin-bottom: 0;\n  line-height: 1.5;\n}\n\n.offcanvas-body {\n  -ms-flex-positive: 1;\n  flex-grow: 1;\n  padding: 1rem 1rem;\n  overflow-y: auto;\n}\n\n.offcanvas-start {\n  top: 0;\n  left: 0;\n  width: 400px;\n  border-right: 1px solid rgba(0, 0, 0, 0.2);\n  -webkit-transform: translateX(-100%);\n  transform: translateX(-100%);\n}\n\n.offcanvas-end {\n  top: 0;\n  right: 0;\n  width: 400px;\n  border-left: 1px solid rgba(0, 0, 0, 0.2);\n  -webkit-transform: translateX(100%);\n  transform: translateX(100%);\n}\n\n.offcanvas-top {\n  top: 0;\n  right: 0;\n  left: 0;\n  height: 30vh;\n  max-height: 100%;\n  border-bottom: 1px solid rgba(0, 0, 0, 0.2);\n  -webkit-transform: translateY(-100%);\n  transform: translateY(-100%);\n}\n\n.offcanvas-bottom {\n  right: 0;\n  left: 0;\n  height: 30vh;\n  max-height: 100%;\n  border-top: 1px solid rgba(0, 0, 0, 0.2);\n  -webkit-transform: translateY(100%);\n  transform: translateY(100%);\n}\n\n.offcanvas.show {\n  -webkit-transform: none;\n  transform: none;\n}\n\n.placeholder {\n  display: inline-block;\n  min-height: 1em;\n  vertical-align: middle;\n  cursor: wait;\n  background-color: currentColor;\n  opacity: 0.5;\n}\n\n.placeholder.btn::before {\n  display: inline-block;\n  content: \"\";\n}\n\n.placeholder-xs {\n  min-height: .6em;\n}\n\n.placeholder-sm {\n  min-height: .8em;\n}\n\n.placeholder-lg {\n  min-height: 1.2em;\n}\n\n.placeholder-glow .placeholder {\n  -webkit-animation: placeholder-glow 2s ease-in-out infinite;\n  animation: placeholder-glow 2s ease-in-out infinite;\n}\n\n@-webkit-keyframes placeholder-glow {\n  50% {\n    opacity: 0.2;\n  }\n}\n\n@keyframes placeholder-glow {\n  50% {\n    opacity: 0.2;\n  }\n}\n\n.placeholder-wave {\n  -webkit-mask-image: linear-gradient(130deg, #000 55%, rgba(0, 0, 0, 0.8) 75%, #000 95%);\n  mask-image: linear-gradient(130deg, #000 55%, rgba(0, 0, 0, 0.8) 75%, #000 95%);\n  -webkit-mask-size: 200% 100%;\n  mask-size: 200% 100%;\n  -webkit-animation: placeholder-wave 2s linear infinite;\n  animation: placeholder-wave 2s linear infinite;\n}\n\n@-webkit-keyframes placeholder-wave {\n  100% {\n    -webkit-mask-position: -200% 0%;\n    mask-position: -200% 0%;\n  }\n}\n\n@keyframes placeholder-wave {\n  100% {\n    -webkit-mask-position: -200% 0%;\n    mask-position: -200% 0%;\n  }\n}\n\n.clearfix::after {\n  display: block;\n  clear: both;\n  content: \"\";\n}\n\n.link-primary {\n  color: #2780e3;\n}\n\n.link-primary:hover, .link-primary:focus {\n  color: #1f66b6;\n}\n\n.link-secondary {\n  color: #373a3c;\n}\n\n.link-secondary:hover, .link-secondary:focus {\n  color: #2c2e30;\n}\n\n.link-success {\n  color: #3fb618;\n}\n\n.link-success:hover, .link-success:focus {\n  color: #329213;\n}\n\n.link-info {\n  color: #9954bb;\n}\n\n.link-info:hover, .link-info:focus {\n  color: #7a4396;\n}\n\n.link-warning {\n  color: #ff7518;\n}\n\n.link-warning:hover, .link-warning:focus {\n  color: #cc5e13;\n}\n\n.link-danger {\n  color: #ff0039;\n}\n\n.link-danger:hover, .link-danger:focus {\n  color: #cc002e;\n}\n\n.link-light {\n  color: #f8f9fa;\n}\n\n.link-light:hover, .link-light:focus {\n  color: #f9fafb;\n}\n\n.link-dark {\n  color: #373a3c;\n}\n\n.link-dark:hover, .link-dark:focus {\n  color: #2c2e30;\n}\n\n.ratio {\n  position: relative;\n  width: 100%;\n}\n\n.ratio::before {\n  display: block;\n  padding-top: var(--bs-aspect-ratio);\n  content: \"\";\n}\n\n.ratio > * {\n  position: absolute;\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n}\n\n.ratio-1x1 {\n  --bs-aspect-ratio: 100%;\n}\n\n.ratio-4x3 {\n  --bs-aspect-ratio: calc(3 / 4 * 100%);\n}\n\n.ratio-16x9 {\n  --bs-aspect-ratio: calc(9 / 16 * 100%);\n}\n\n.ratio-21x9 {\n  --bs-aspect-ratio: calc(9 / 21 * 100%);\n}\n\n.fixed-top {\n  position: fixed;\n  top: 0;\n  right: 0;\n  left: 0;\n  z-index: 1030;\n}\n\n.fixed-bottom {\n  position: fixed;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 1030;\n}\n\n.sticky-top {\n  position: -webkit-sticky;\n  position: sticky;\n  top: 0;\n  z-index: 1020;\n}\n\n@media (min-width: 576px) {\n  .sticky-sm-top {\n    position: -webkit-sticky;\n    position: sticky;\n    top: 0;\n    z-index: 1020;\n  }\n}\n\n@media (min-width: 768px) {\n  .sticky-md-top {\n    position: -webkit-sticky;\n    position: sticky;\n    top: 0;\n    z-index: 1020;\n  }\n}\n\n@media (min-width: 992px) {\n  .sticky-lg-top {\n    position: -webkit-sticky;\n    position: sticky;\n    top: 0;\n    z-index: 1020;\n  }\n}\n\n@media (min-width: 1200px) {\n  .sticky-xl-top {\n    position: -webkit-sticky;\n    position: sticky;\n    top: 0;\n    z-index: 1020;\n  }\n}\n\n@media (min-width: 1400px) {\n  .sticky-xxl-top {\n    position: -webkit-sticky;\n    position: sticky;\n    top: 0;\n    z-index: 1020;\n  }\n}\n\n.hstack {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-direction: row;\n  flex-direction: row;\n  -ms-flex-align: center;\n  align-items: center;\n  -ms-flex-item-align: stretch;\n  align-self: stretch;\n}\n\n.vstack {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex: 1 1 auto;\n  flex: 1 1 auto;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  -ms-flex-item-align: stretch;\n  align-self: stretch;\n}\n\n.visually-hidden,\n.visually-hidden-focusable:not(:focus):not(:focus-within) {\n  position: absolute !important;\n  width: 1px !important;\n  height: 1px !important;\n  padding: 0 !important;\n  margin: -1px !important;\n  overflow: hidden !important;\n  clip: rect(0, 0, 0, 0) !important;\n  white-space: nowrap !important;\n  border: 0 !important;\n}\n\n.stretched-link::after {\n  position: absolute;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 1;\n  content: \"\";\n}\n\n.text-truncate {\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n}\n\n.vr {\n  display: inline-block;\n  -ms-flex-item-align: stretch;\n  align-self: stretch;\n  width: 1px;\n  min-height: 1em;\n  background-color: currentColor;\n  opacity: 0.25;\n}\n\n.align-baseline {\n  vertical-align: baseline !important;\n}\n\n.align-top {\n  vertical-align: top !important;\n}\n\n.align-middle {\n  vertical-align: middle !important;\n}\n\n.align-bottom {\n  vertical-align: bottom !important;\n}\n\n.align-text-bottom {\n  vertical-align: text-bottom !important;\n}\n\n.align-text-top {\n  vertical-align: text-top !important;\n}\n\n.float-start {\n  float: left !important;\n}\n\n.float-end {\n  float: right !important;\n}\n\n.float-none {\n  float: none !important;\n}\n\n.opacity-0 {\n  opacity: 0 !important;\n}\n\n.opacity-25 {\n  opacity: 0.25 !important;\n}\n\n.opacity-50 {\n  opacity: 0.5 !important;\n}\n\n.opacity-75 {\n  opacity: 0.75 !important;\n}\n\n.opacity-100 {\n  opacity: 1 !important;\n}\n\n.overflow-auto {\n  overflow: auto !important;\n}\n\n.overflow-hidden {\n  overflow: hidden !important;\n}\n\n.overflow-visible {\n  overflow: visible !important;\n}\n\n.overflow-scroll {\n  overflow: scroll !important;\n}\n\n.d-inline {\n  display: inline !important;\n}\n\n.d-inline-block {\n  display: inline-block !important;\n}\n\n.d-block {\n  display: block !important;\n}\n\n.d-grid {\n  display: grid !important;\n}\n\n.d-table {\n  display: table !important;\n}\n\n.d-table-row {\n  display: table-row !important;\n}\n\n.d-table-cell {\n  display: table-cell !important;\n}\n\n.d-flex {\n  display: -ms-flexbox !important;\n  display: flex !important;\n}\n\n.d-inline-flex {\n  display: -ms-inline-flexbox !important;\n  display: inline-flex !important;\n}\n\n.d-none {\n  display: none !important;\n}\n\n.shadow {\n  box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15) !important;\n}\n\n.shadow-sm {\n  box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075) !important;\n}\n\n.shadow-lg {\n  box-shadow: 0 1rem 3rem rgba(0, 0, 0, 0.175) !important;\n}\n\n.shadow-none {\n  box-shadow: none !important;\n}\n\n.position-static {\n  position: static !important;\n}\n\n.position-relative {\n  position: relative !important;\n}\n\n.position-absolute {\n  position: absolute !important;\n}\n\n.position-fixed {\n  position: fixed !important;\n}\n\n.position-sticky {\n  position: -webkit-sticky !important;\n  position: sticky !important;\n}\n\n.top-0 {\n  top: 0 !important;\n}\n\n.top-50 {\n  top: 50% !important;\n}\n\n.top-100 {\n  top: 100% !important;\n}\n\n.bottom-0 {\n  bottom: 0 !important;\n}\n\n.bottom-50 {\n  bottom: 50% !important;\n}\n\n.bottom-100 {\n  bottom: 100% !important;\n}\n\n.start-0 {\n  left: 0 !important;\n}\n\n.start-50 {\n  left: 50% !important;\n}\n\n.start-100 {\n  left: 100% !important;\n}\n\n.end-0 {\n  right: 0 !important;\n}\n\n.end-50 {\n  right: 50% !important;\n}\n\n.end-100 {\n  right: 100% !important;\n}\n\n.translate-middle {\n  -webkit-transform: translate(-50%, -50%) !important;\n  transform: translate(-50%, -50%) !important;\n}\n\n.translate-middle-x {\n  -webkit-transform: translateX(-50%) !important;\n  transform: translateX(-50%) !important;\n}\n\n.translate-middle-y {\n  -webkit-transform: translateY(-50%) !important;\n  transform: translateY(-50%) !important;\n}\n\n.border {\n  border: 1px solid #dee2e6 !important;\n}\n\n.border-0 {\n  border: 0 !important;\n}\n\n.border-top {\n  border-top: 1px solid #dee2e6 !important;\n}\n\n.border-top-0 {\n  border-top: 0 !important;\n}\n\n.border-end {\n  border-right: 1px solid #dee2e6 !important;\n}\n\n.border-end-0 {\n  border-right: 0 !important;\n}\n\n.border-bottom {\n  border-bottom: 1px solid #dee2e6 !important;\n}\n\n.border-bottom-0 {\n  border-bottom: 0 !important;\n}\n\n.border-start {\n  border-left: 1px solid #dee2e6 !important;\n}\n\n.border-start-0 {\n  border-left: 0 !important;\n}\n\n.border-primary {\n  border-color: #2780e3 !important;\n}\n\n.border-secondary {\n  border-color: #373a3c !important;\n}\n\n.border-success {\n  border-color: #3fb618 !important;\n}\n\n.border-info {\n  border-color: #9954bb !important;\n}\n\n.border-warning {\n  border-color: #ff7518 !important;\n}\n\n.border-danger {\n  border-color: #ff0039 !important;\n}\n\n.border-light {\n  border-color: #f8f9fa !important;\n}\n\n.border-dark {\n  border-color: #373a3c !important;\n}\n\n.border-white {\n  border-color: #fff !important;\n}\n\n.border-1 {\n  border-width: 1px !important;\n}\n\n.border-2 {\n  border-width: 2px !important;\n}\n\n.border-3 {\n  border-width: 3px !important;\n}\n\n.border-4 {\n  border-width: 4px !important;\n}\n\n.border-5 {\n  border-width: 5px !important;\n}\n\n.w-25 {\n  width: 25% !important;\n}\n\n.w-50 {\n  width: 50% !important;\n}\n\n.w-75 {\n  width: 75% !important;\n}\n\n.w-100 {\n  width: 100% !important;\n}\n\n.w-auto {\n  width: auto !important;\n}\n\n.mw-100 {\n  max-width: 100% !important;\n}\n\n.vw-100 {\n  width: 100vw !important;\n}\n\n.min-vw-100 {\n  min-width: 100vw !important;\n}\n\n.h-25 {\n  height: 25% !important;\n}\n\n.h-50 {\n  height: 50% !important;\n}\n\n.h-75 {\n  height: 75% !important;\n}\n\n.h-100 {\n  height: 100% !important;\n}\n\n.h-auto {\n  height: auto !important;\n}\n\n.mh-100 {\n  max-height: 100% !important;\n}\n\n.vh-100 {\n  height: 100vh !important;\n}\n\n.min-vh-100 {\n  min-height: 100vh !important;\n}\n\n.flex-fill {\n  -ms-flex: 1 1 auto !important;\n  flex: 1 1 auto !important;\n}\n\n.flex-row {\n  -ms-flex-direction: row !important;\n  flex-direction: row !important;\n}\n\n.flex-column {\n  -ms-flex-direction: column !important;\n  flex-direction: column !important;\n}\n\n.flex-row-reverse {\n  -ms-flex-direction: row-reverse !important;\n  flex-direction: row-reverse !important;\n}\n\n.flex-column-reverse {\n  -ms-flex-direction: column-reverse !important;\n  flex-direction: column-reverse !important;\n}\n\n.flex-grow-0 {\n  -ms-flex-positive: 0 !important;\n  flex-grow: 0 !important;\n}\n\n.flex-grow-1 {\n  -ms-flex-positive: 1 !important;\n  flex-grow: 1 !important;\n}\n\n.flex-shrink-0 {\n  -ms-flex-negative: 0 !important;\n  flex-shrink: 0 !important;\n}\n\n.flex-shrink-1 {\n  -ms-flex-negative: 1 !important;\n  flex-shrink: 1 !important;\n}\n\n.flex-wrap {\n  -ms-flex-wrap: wrap !important;\n  flex-wrap: wrap !important;\n}\n\n.flex-nowrap {\n  -ms-flex-wrap: nowrap !important;\n  flex-wrap: nowrap !important;\n}\n\n.flex-wrap-reverse {\n  -ms-flex-wrap: wrap-reverse !important;\n  flex-wrap: wrap-reverse !important;\n}\n\n.gap-0 {\n  gap: 0 !important;\n}\n\n.gap-1 {\n  gap: 0.25rem !important;\n}\n\n.gap-2 {\n  gap: 0.5rem !important;\n}\n\n.gap-3 {\n  gap: 1rem !important;\n}\n\n.gap-4 {\n  gap: 1.5rem !important;\n}\n\n.gap-5 {\n  gap: 3rem !important;\n}\n\n.justify-content-start {\n  -ms-flex-pack: start !important;\n  justify-content: flex-start !important;\n}\n\n.justify-content-end {\n  -ms-flex-pack: end !important;\n  justify-content: flex-end !important;\n}\n\n.justify-content-center {\n  -ms-flex-pack: center !important;\n  justify-content: center !important;\n}\n\n.justify-content-between {\n  -ms-flex-pack: justify !important;\n  justify-content: space-between !important;\n}\n\n.justify-content-around {\n  -ms-flex-pack: distribute !important;\n  justify-content: space-around !important;\n}\n\n.justify-content-evenly {\n  -ms-flex-pack: space-evenly !important;\n  justify-content: space-evenly !important;\n}\n\n.align-items-start {\n  -ms-flex-align: start !important;\n  align-items: flex-start !important;\n}\n\n.align-items-end {\n  -ms-flex-align: end !important;\n  align-items: flex-end !important;\n}\n\n.align-items-center {\n  -ms-flex-align: center !important;\n  align-items: center !important;\n}\n\n.align-items-baseline {\n  -ms-flex-align: baseline !important;\n  align-items: baseline !important;\n}\n\n.align-items-stretch {\n  -ms-flex-align: stretch !important;\n  align-items: stretch !important;\n}\n\n.align-content-start {\n  -ms-flex-line-pack: start !important;\n  align-content: flex-start !important;\n}\n\n.align-content-end {\n  -ms-flex-line-pack: end !important;\n  align-content: flex-end !important;\n}\n\n.align-content-center {\n  -ms-flex-line-pack: center !important;\n  align-content: center !important;\n}\n\n.align-content-between {\n  -ms-flex-line-pack: justify !important;\n  align-content: space-between !important;\n}\n\n.align-content-around {\n  -ms-flex-line-pack: distribute !important;\n  align-content: space-around !important;\n}\n\n.align-content-stretch {\n  -ms-flex-line-pack: stretch !important;\n  align-content: stretch !important;\n}\n\n.align-self-auto {\n  -ms-flex-item-align: auto !important;\n  align-self: auto !important;\n}\n\n.align-self-start {\n  -ms-flex-item-align: start !important;\n  align-self: flex-start !important;\n}\n\n.align-self-end {\n  -ms-flex-item-align: end !important;\n  align-self: flex-end !important;\n}\n\n.align-self-center {\n  -ms-flex-item-align: center !important;\n  align-self: center !important;\n}\n\n.align-self-baseline {\n  -ms-flex-item-align: baseline !important;\n  align-self: baseline !important;\n}\n\n.align-self-stretch {\n  -ms-flex-item-align: stretch !important;\n  align-self: stretch !important;\n}\n\n.order-first {\n  -ms-flex-order: -1 !important;\n  order: -1 !important;\n}\n\n.order-0 {\n  -ms-flex-order: 0 !important;\n  order: 0 !important;\n}\n\n.order-1 {\n  -ms-flex-order: 1 !important;\n  order: 1 !important;\n}\n\n.order-2 {\n  -ms-flex-order: 2 !important;\n  order: 2 !important;\n}\n\n.order-3 {\n  -ms-flex-order: 3 !important;\n  order: 3 !important;\n}\n\n.order-4 {\n  -ms-flex-order: 4 !important;\n  order: 4 !important;\n}\n\n.order-5 {\n  -ms-flex-order: 5 !important;\n  order: 5 !important;\n}\n\n.order-last {\n  -ms-flex-order: 6 !important;\n  order: 6 !important;\n}\n\n.m-0 {\n  margin: 0 !important;\n}\n\n.m-1 {\n  margin: 0.25rem !important;\n}\n\n.m-2 {\n  margin: 0.5rem !important;\n}\n\n.m-3 {\n  margin: 1rem !important;\n}\n\n.m-4 {\n  margin: 1.5rem !important;\n}\n\n.m-5 {\n  margin: 3rem !important;\n}\n\n.m-auto {\n  margin: auto !important;\n}\n\n.mx-0 {\n  margin-right: 0 !important;\n  margin-left: 0 !important;\n}\n\n.mx-1 {\n  margin-right: 0.25rem !important;\n  margin-left: 0.25rem !important;\n}\n\n.mx-2 {\n  margin-right: 0.5rem !important;\n  margin-left: 0.5rem !important;\n}\n\n.mx-3 {\n  margin-right: 1rem !important;\n  margin-left: 1rem !important;\n}\n\n.mx-4 {\n  margin-right: 1.5rem !important;\n  margin-left: 1.5rem !important;\n}\n\n.mx-5 {\n  margin-right: 3rem !important;\n  margin-left: 3rem !important;\n}\n\n.mx-auto {\n  margin-right: auto !important;\n  margin-left: auto !important;\n}\n\n.my-0 {\n  margin-top: 0 !important;\n  margin-bottom: 0 !important;\n}\n\n.my-1 {\n  margin-top: 0.25rem !important;\n  margin-bottom: 0.25rem !important;\n}\n\n.my-2 {\n  margin-top: 0.5rem !important;\n  margin-bottom: 0.5rem !important;\n}\n\n.my-3 {\n  margin-top: 1rem !important;\n  margin-bottom: 1rem !important;\n}\n\n.my-4 {\n  margin-top: 1.5rem !important;\n  margin-bottom: 1.5rem !important;\n}\n\n.my-5 {\n  margin-top: 3rem !important;\n  margin-bottom: 3rem !important;\n}\n\n.my-auto {\n  margin-top: auto !important;\n  margin-bottom: auto !important;\n}\n\n.mt-0 {\n  margin-top: 0 !important;\n}\n\n.mt-1 {\n  margin-top: 0.25rem !important;\n}\n\n.mt-2 {\n  margin-top: 0.5rem !important;\n}\n\n.mt-3 {\n  margin-top: 1rem !important;\n}\n\n.mt-4 {\n  margin-top: 1.5rem !important;\n}\n\n.mt-5 {\n  margin-top: 3rem !important;\n}\n\n.mt-auto {\n  margin-top: auto !important;\n}\n\n.me-0 {\n  margin-right: 0 !important;\n}\n\n.me-1 {\n  margin-right: 0.25rem !important;\n}\n\n.me-2 {\n  margin-right: 0.5rem !important;\n}\n\n.me-3 {\n  margin-right: 1rem !important;\n}\n\n.me-4 {\n  margin-right: 1.5rem !important;\n}\n\n.me-5 {\n  margin-right: 3rem !important;\n}\n\n.me-auto {\n  margin-right: auto !important;\n}\n\n.mb-0 {\n  margin-bottom: 0 !important;\n}\n\n.mb-1 {\n  margin-bottom: 0.25rem !important;\n}\n\n.mb-2 {\n  margin-bottom: 0.5rem !important;\n}\n\n.mb-3 {\n  margin-bottom: 1rem !important;\n}\n\n.mb-4 {\n  margin-bottom: 1.5rem !important;\n}\n\n.mb-5 {\n  margin-bottom: 3rem !important;\n}\n\n.mb-auto {\n  margin-bottom: auto !important;\n}\n\n.ms-0 {\n  margin-left: 0 !important;\n}\n\n.ms-1 {\n  margin-left: 0.25rem !important;\n}\n\n.ms-2 {\n  margin-left: 0.5rem !important;\n}\n\n.ms-3 {\n  margin-left: 1rem !important;\n}\n\n.ms-4 {\n  margin-left: 1.5rem !important;\n}\n\n.ms-5 {\n  margin-left: 3rem !important;\n}\n\n.ms-auto {\n  margin-left: auto !important;\n}\n\n.p-0 {\n  padding: 0 !important;\n}\n\n.p-1 {\n  padding: 0.25rem !important;\n}\n\n.p-2 {\n  padding: 0.5rem !important;\n}\n\n.p-3 {\n  padding: 1rem !important;\n}\n\n.p-4 {\n  padding: 1.5rem !important;\n}\n\n.p-5 {\n  padding: 3rem !important;\n}\n\n.px-0 {\n  padding-right: 0 !important;\n  padding-left: 0 !important;\n}\n\n.px-1 {\n  padding-right: 0.25rem !important;\n  padding-left: 0.25rem !important;\n}\n\n.px-2 {\n  padding-right: 0.5rem !important;\n  padding-left: 0.5rem !important;\n}\n\n.px-3 {\n  padding-right: 1rem !important;\n  padding-left: 1rem !important;\n}\n\n.px-4 {\n  padding-right: 1.5rem !important;\n  padding-left: 1.5rem !important;\n}\n\n.px-5 {\n  padding-right: 3rem !important;\n  padding-left: 3rem !important;\n}\n\n.py-0 {\n  padding-top: 0 !important;\n  padding-bottom: 0 !important;\n}\n\n.py-1 {\n  padding-top: 0.25rem !important;\n  padding-bottom: 0.25rem !important;\n}\n\n.py-2 {\n  padding-top: 0.5rem !important;\n  padding-bottom: 0.5rem !important;\n}\n\n.py-3 {\n  padding-top: 1rem !important;\n  padding-bottom: 1rem !important;\n}\n\n.py-4 {\n  padding-top: 1.5rem !important;\n  padding-bottom: 1.5rem !important;\n}\n\n.py-5 {\n  padding-top: 3rem !important;\n  padding-bottom: 3rem !important;\n}\n\n.pt-0 {\n  padding-top: 0 !important;\n}\n\n.pt-1 {\n  padding-top: 0.25rem !important;\n}\n\n.pt-2 {\n  padding-top: 0.5rem !important;\n}\n\n.pt-3 {\n  padding-top: 1rem !important;\n}\n\n.pt-4 {\n  padding-top: 1.5rem !important;\n}\n\n.pt-5 {\n  padding-top: 3rem !important;\n}\n\n.pe-0 {\n  padding-right: 0 !important;\n}\n\n.pe-1 {\n  padding-right: 0.25rem !important;\n}\n\n.pe-2 {\n  padding-right: 0.5rem !important;\n}\n\n.pe-3 {\n  padding-right: 1rem !important;\n}\n\n.pe-4 {\n  padding-right: 1.5rem !important;\n}\n\n.pe-5 {\n  padding-right: 3rem !important;\n}\n\n.pb-0 {\n  padding-bottom: 0 !important;\n}\n\n.pb-1 {\n  padding-bottom: 0.25rem !important;\n}\n\n.pb-2 {\n  padding-bottom: 0.5rem !important;\n}\n\n.pb-3 {\n  padding-bottom: 1rem !important;\n}\n\n.pb-4 {\n  padding-bottom: 1.5rem !important;\n}\n\n.pb-5 {\n  padding-bottom: 3rem !important;\n}\n\n.ps-0 {\n  padding-left: 0 !important;\n}\n\n.ps-1 {\n  padding-left: 0.25rem !important;\n}\n\n.ps-2 {\n  padding-left: 0.5rem !important;\n}\n\n.ps-3 {\n  padding-left: 1rem !important;\n}\n\n.ps-4 {\n  padding-left: 1.5rem !important;\n}\n\n.ps-5 {\n  padding-left: 3rem !important;\n}\n\n.font-monospace {\n  font-family: var(--bs-font-monospace) !important;\n}\n\n.fs-1 {\n  font-size: calc(1.375rem + 1.5vw) !important;\n}\n\n.fs-2 {\n  font-size: calc(1.325rem + 0.9vw) !important;\n}\n\n.fs-3 {\n  font-size: calc(1.3rem + 0.6vw) !important;\n}\n\n.fs-4 {\n  font-size: calc(1.275rem + 0.3vw) !important;\n}\n\n.fs-5 {\n  font-size: 1.25rem !important;\n}\n\n.fs-6 {\n  font-size: 1rem !important;\n}\n\n.fst-italic {\n  font-style: italic !important;\n}\n\n.fst-normal {\n  font-style: normal !important;\n}\n\n.fw-light {\n  font-weight: 300 !important;\n}\n\n.fw-lighter {\n  font-weight: lighter !important;\n}\n\n.fw-normal {\n  font-weight: 400 !important;\n}\n\n.fw-bold {\n  font-weight: 700 !important;\n}\n\n.fw-bolder {\n  font-weight: bolder !important;\n}\n\n.lh-1 {\n  line-height: 1 !important;\n}\n\n.lh-sm {\n  line-height: 1.25 !important;\n}\n\n.lh-base {\n  line-height: 1.5 !important;\n}\n\n.lh-lg {\n  line-height: 2 !important;\n}\n\n.text-start {\n  text-align: left !important;\n}\n\n.text-end {\n  text-align: right !important;\n}\n\n.text-center {\n  text-align: center !important;\n}\n\n.text-decoration-none {\n  text-decoration: none !important;\n}\n\n.text-decoration-underline {\n  text-decoration: underline !important;\n}\n\n.text-decoration-line-through {\n  text-decoration: line-through !important;\n}\n\n.text-lowercase {\n  text-transform: lowercase !important;\n}\n\n.text-uppercase {\n  text-transform: uppercase !important;\n}\n\n.text-capitalize {\n  text-transform: capitalize !important;\n}\n\n.text-wrap {\n  white-space: normal !important;\n}\n\n.text-nowrap {\n  white-space: nowrap !important;\n}\n\n/* rtl:begin:remove */\n.text-break {\n  word-wrap: break-word !important;\n  word-break: break-word !important;\n}\n\n/* rtl:end:remove */\n.text-primary {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-primary-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-secondary {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-secondary-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-success {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-success-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-info {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-info-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-warning {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-warning-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-danger {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-danger-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-light {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-light-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-dark {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-dark-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-black {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-black-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-white {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-white-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-body {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-body-color-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-muted {\n  --bs-text-opacity: 1;\n  color: #868e96 !important;\n}\n\n.text-black-50 {\n  --bs-text-opacity: 1;\n  color: rgba(0, 0, 0, 0.5) !important;\n}\n\n.text-white-50 {\n  --bs-text-opacity: 1;\n  color: rgba(255, 255, 255, 0.5) !important;\n}\n\n.text-reset {\n  --bs-text-opacity: 1;\n  color: inherit !important;\n}\n\n.text-opacity-25 {\n  --bs-text-opacity: 0.25;\n}\n\n.text-opacity-50 {\n  --bs-text-opacity: 0.5;\n}\n\n.text-opacity-75 {\n  --bs-text-opacity: 0.75;\n}\n\n.text-opacity-100 {\n  --bs-text-opacity: 1;\n}\n\n.bg-primary {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-primary-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-secondary {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-secondary-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-success {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-success-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-info {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-info-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-warning {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-warning-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-danger {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-danger-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-light {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-light-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-dark {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-dark-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-black {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-black-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-white {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-white-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-body {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-body-bg-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-transparent {\n  --bs-bg-opacity: 1;\n  background-color: transparent !important;\n}\n\n.bg-opacity-10 {\n  --bs-bg-opacity: 0.1;\n}\n\n.bg-opacity-25 {\n  --bs-bg-opacity: 0.25;\n}\n\n.bg-opacity-50 {\n  --bs-bg-opacity: 0.5;\n}\n\n.bg-opacity-75 {\n  --bs-bg-opacity: 0.75;\n}\n\n.bg-opacity-100 {\n  --bs-bg-opacity: 1;\n}\n\n.bg-gradient {\n  background-image: var(--bs-gradient) !important;\n}\n\n.user-select-all {\n  -webkit-user-select: all !important;\n  -moz-user-select: all !important;\n  user-select: all !important;\n}\n\n.user-select-auto {\n  -webkit-user-select: auto !important;\n  -moz-user-select: auto !important;\n  -ms-user-select: auto !important;\n  user-select: auto !important;\n}\n\n.user-select-none {\n  -webkit-user-select: none !important;\n  -moz-user-select: none !important;\n  -ms-user-select: none !important;\n  user-select: none !important;\n}\n\n.pe-none {\n  pointer-events: none !important;\n}\n\n.pe-auto {\n  pointer-events: auto !important;\n}\n\n.rounded {\n  border-radius: 0.25rem !important;\n}\n\n.rounded-0 {\n  border-radius: 0 !important;\n}\n\n.rounded-1 {\n  border-radius: 0.2rem !important;\n}\n\n.rounded-2 {\n  border-radius: 0.25rem !important;\n}\n\n.rounded-3 {\n  border-radius: 0.3rem !important;\n}\n\n.rounded-circle {\n  border-radius: 50% !important;\n}\n\n.rounded-pill {\n  border-radius: 50rem !important;\n}\n\n.rounded-top {\n  border-top-left-radius: 0.25rem !important;\n  border-top-right-radius: 0.25rem !important;\n}\n\n.rounded-end {\n  border-top-right-radius: 0.25rem !important;\n  border-bottom-right-radius: 0.25rem !important;\n}\n\n.rounded-bottom {\n  border-bottom-right-radius: 0.25rem !important;\n  border-bottom-left-radius: 0.25rem !important;\n}\n\n.rounded-start {\n  border-bottom-left-radius: 0.25rem !important;\n  border-top-left-radius: 0.25rem !important;\n}\n\n.visible {\n  visibility: visible !important;\n}\n\n.invisible {\n  visibility: hidden !important;\n}\n\n@media (min-width: 576px) {\n  .float-sm-start {\n    float: left !important;\n  }\n  .float-sm-end {\n    float: right !important;\n  }\n  .float-sm-none {\n    float: none !important;\n  }\n  .d-sm-inline {\n    display: inline !important;\n  }\n  .d-sm-inline-block {\n    display: inline-block !important;\n  }\n  .d-sm-block {\n    display: block !important;\n  }\n  .d-sm-grid {\n    display: grid !important;\n  }\n  .d-sm-table {\n    display: table !important;\n  }\n  .d-sm-table-row {\n    display: table-row !important;\n  }\n  .d-sm-table-cell {\n    display: table-cell !important;\n  }\n  .d-sm-flex {\n    display: -ms-flexbox !important;\n    display: flex !important;\n  }\n  .d-sm-inline-flex {\n    display: -ms-inline-flexbox !important;\n    display: inline-flex !important;\n  }\n  .d-sm-none {\n    display: none !important;\n  }\n  .flex-sm-fill {\n    -ms-flex: 1 1 auto !important;\n    flex: 1 1 auto !important;\n  }\n  .flex-sm-row {\n    -ms-flex-direction: row !important;\n    flex-direction: row !important;\n  }\n  .flex-sm-column {\n    -ms-flex-direction: column !important;\n    flex-direction: column !important;\n  }\n  .flex-sm-row-reverse {\n    -ms-flex-direction: row-reverse !important;\n    flex-direction: row-reverse !important;\n  }\n  .flex-sm-column-reverse {\n    -ms-flex-direction: column-reverse !important;\n    flex-direction: column-reverse !important;\n  }\n  .flex-sm-grow-0 {\n    -ms-flex-positive: 0 !important;\n    flex-grow: 0 !important;\n  }\n  .flex-sm-grow-1 {\n    -ms-flex-positive: 1 !important;\n    flex-grow: 1 !important;\n  }\n  .flex-sm-shrink-0 {\n    -ms-flex-negative: 0 !important;\n    flex-shrink: 0 !important;\n  }\n  .flex-sm-shrink-1 {\n    -ms-flex-negative: 1 !important;\n    flex-shrink: 1 !important;\n  }\n  .flex-sm-wrap {\n    -ms-flex-wrap: wrap !important;\n    flex-wrap: wrap !important;\n  }\n  .flex-sm-nowrap {\n    -ms-flex-wrap: nowrap !important;\n    flex-wrap: nowrap !important;\n  }\n  .flex-sm-wrap-reverse {\n    -ms-flex-wrap: wrap-reverse !important;\n    flex-wrap: wrap-reverse !important;\n  }\n  .gap-sm-0 {\n    gap: 0 !important;\n  }\n  .gap-sm-1 {\n    gap: 0.25rem !important;\n  }\n  .gap-sm-2 {\n    gap: 0.5rem !important;\n  }\n  .gap-sm-3 {\n    gap: 1rem !important;\n  }\n  .gap-sm-4 {\n    gap: 1.5rem !important;\n  }\n  .gap-sm-5 {\n    gap: 3rem !important;\n  }\n  .justify-content-sm-start {\n    -ms-flex-pack: start !important;\n    justify-content: flex-start !important;\n  }\n  .justify-content-sm-end {\n    -ms-flex-pack: end !important;\n    justify-content: flex-end !important;\n  }\n  .justify-content-sm-center {\n    -ms-flex-pack: center !important;\n    justify-content: center !important;\n  }\n  .justify-content-sm-between {\n    -ms-flex-pack: justify !important;\n    justify-content: space-between !important;\n  }\n  .justify-content-sm-around {\n    -ms-flex-pack: distribute !important;\n    justify-content: space-around !important;\n  }\n  .justify-content-sm-evenly {\n    -ms-flex-pack: space-evenly !important;\n    justify-content: space-evenly !important;\n  }\n  .align-items-sm-start {\n    -ms-flex-align: start !important;\n    align-items: flex-start !important;\n  }\n  .align-items-sm-end {\n    -ms-flex-align: end !important;\n    align-items: flex-end !important;\n  }\n  .align-items-sm-center {\n    -ms-flex-align: center !important;\n    align-items: center !important;\n  }\n  .align-items-sm-baseline {\n    -ms-flex-align: baseline !important;\n    align-items: baseline !important;\n  }\n  .align-items-sm-stretch {\n    -ms-flex-align: stretch !important;\n    align-items: stretch !important;\n  }\n  .align-content-sm-start {\n    -ms-flex-line-pack: start !important;\n    align-content: flex-start !important;\n  }\n  .align-content-sm-end {\n    -ms-flex-line-pack: end !important;\n    align-content: flex-end !important;\n  }\n  .align-content-sm-center {\n    -ms-flex-line-pack: center !important;\n    align-content: center !important;\n  }\n  .align-content-sm-between {\n    -ms-flex-line-pack: justify !important;\n    align-content: space-between !important;\n  }\n  .align-content-sm-around {\n    -ms-flex-line-pack: distribute !important;\n    align-content: space-around !important;\n  }\n  .align-content-sm-stretch {\n    -ms-flex-line-pack: stretch !important;\n    align-content: stretch !important;\n  }\n  .align-self-sm-auto {\n    -ms-flex-item-align: auto !important;\n    align-self: auto !important;\n  }\n  .align-self-sm-start {\n    -ms-flex-item-align: start !important;\n    align-self: flex-start !important;\n  }\n  .align-self-sm-end {\n    -ms-flex-item-align: end !important;\n    align-self: flex-end !important;\n  }\n  .align-self-sm-center {\n    -ms-flex-item-align: center !important;\n    align-self: center !important;\n  }\n  .align-self-sm-baseline {\n    -ms-flex-item-align: baseline !important;\n    align-self: baseline !important;\n  }\n  .align-self-sm-stretch {\n    -ms-flex-item-align: stretch !important;\n    align-self: stretch !important;\n  }\n  .order-sm-first {\n    -ms-flex-order: -1 !important;\n    order: -1 !important;\n  }\n  .order-sm-0 {\n    -ms-flex-order: 0 !important;\n    order: 0 !important;\n  }\n  .order-sm-1 {\n    -ms-flex-order: 1 !important;\n    order: 1 !important;\n  }\n  .order-sm-2 {\n    -ms-flex-order: 2 !important;\n    order: 2 !important;\n  }\n  .order-sm-3 {\n    -ms-flex-order: 3 !important;\n    order: 3 !important;\n  }\n  .order-sm-4 {\n    -ms-flex-order: 4 !important;\n    order: 4 !important;\n  }\n  .order-sm-5 {\n    -ms-flex-order: 5 !important;\n    order: 5 !important;\n  }\n  .order-sm-last {\n    -ms-flex-order: 6 !important;\n    order: 6 !important;\n  }\n  .m-sm-0 {\n    margin: 0 !important;\n  }\n  .m-sm-1 {\n    margin: 0.25rem !important;\n  }\n  .m-sm-2 {\n    margin: 0.5rem !important;\n  }\n  .m-sm-3 {\n    margin: 1rem !important;\n  }\n  .m-sm-4 {\n    margin: 1.5rem !important;\n  }\n  .m-sm-5 {\n    margin: 3rem !important;\n  }\n  .m-sm-auto {\n    margin: auto !important;\n  }\n  .mx-sm-0 {\n    margin-right: 0 !important;\n    margin-left: 0 !important;\n  }\n  .mx-sm-1 {\n    margin-right: 0.25rem !important;\n    margin-left: 0.25rem !important;\n  }\n  .mx-sm-2 {\n    margin-right: 0.5rem !important;\n    margin-left: 0.5rem !important;\n  }\n  .mx-sm-3 {\n    margin-right: 1rem !important;\n    margin-left: 1rem !important;\n  }\n  .mx-sm-4 {\n    margin-right: 1.5rem !important;\n    margin-left: 1.5rem !important;\n  }\n  .mx-sm-5 {\n    margin-right: 3rem !important;\n    margin-left: 3rem !important;\n  }\n  .mx-sm-auto {\n    margin-right: auto !important;\n    margin-left: auto !important;\n  }\n  .my-sm-0 {\n    margin-top: 0 !important;\n    margin-bottom: 0 !important;\n  }\n  .my-sm-1 {\n    margin-top: 0.25rem !important;\n    margin-bottom: 0.25rem !important;\n  }\n  .my-sm-2 {\n    margin-top: 0.5rem !important;\n    margin-bottom: 0.5rem !important;\n  }\n  .my-sm-3 {\n    margin-top: 1rem !important;\n    margin-bottom: 1rem !important;\n  }\n  .my-sm-4 {\n    margin-top: 1.5rem !important;\n    margin-bottom: 1.5rem !important;\n  }\n  .my-sm-5 {\n    margin-top: 3rem !important;\n    margin-bottom: 3rem !important;\n  }\n  .my-sm-auto {\n    margin-top: auto !important;\n    margin-bottom: auto !important;\n  }\n  .mt-sm-0 {\n    margin-top: 0 !important;\n  }\n  .mt-sm-1 {\n    margin-top: 0.25rem !important;\n  }\n  .mt-sm-2 {\n    margin-top: 0.5rem !important;\n  }\n  .mt-sm-3 {\n    margin-top: 1rem !important;\n  }\n  .mt-sm-4 {\n    margin-top: 1.5rem !important;\n  }\n  .mt-sm-5 {\n    margin-top: 3rem !important;\n  }\n  .mt-sm-auto {\n    margin-top: auto !important;\n  }\n  .me-sm-0 {\n    margin-right: 0 !important;\n  }\n  .me-sm-1 {\n    margin-right: 0.25rem !important;\n  }\n  .me-sm-2 {\n    margin-right: 0.5rem !important;\n  }\n  .me-sm-3 {\n    margin-right: 1rem !important;\n  }\n  .me-sm-4 {\n    margin-right: 1.5rem !important;\n  }\n  .me-sm-5 {\n    margin-right: 3rem !important;\n  }\n  .me-sm-auto {\n    margin-right: auto !important;\n  }\n  .mb-sm-0 {\n    margin-bottom: 0 !important;\n  }\n  .mb-sm-1 {\n    margin-bottom: 0.25rem !important;\n  }\n  .mb-sm-2 {\n    margin-bottom: 0.5rem !important;\n  }\n  .mb-sm-3 {\n    margin-bottom: 1rem !important;\n  }\n  .mb-sm-4 {\n    margin-bottom: 1.5rem !important;\n  }\n  .mb-sm-5 {\n    margin-bottom: 3rem !important;\n  }\n  .mb-sm-auto {\n    margin-bottom: auto !important;\n  }\n  .ms-sm-0 {\n    margin-left: 0 !important;\n  }\n  .ms-sm-1 {\n    margin-left: 0.25rem !important;\n  }\n  .ms-sm-2 {\n    margin-left: 0.5rem !important;\n  }\n  .ms-sm-3 {\n    margin-left: 1rem !important;\n  }\n  .ms-sm-4 {\n    margin-left: 1.5rem !important;\n  }\n  .ms-sm-5 {\n    margin-left: 3rem !important;\n  }\n  .ms-sm-auto {\n    margin-left: auto !important;\n  }\n  .p-sm-0 {\n    padding: 0 !important;\n  }\n  .p-sm-1 {\n    padding: 0.25rem !important;\n  }\n  .p-sm-2 {\n    padding: 0.5rem !important;\n  }\n  .p-sm-3 {\n    padding: 1rem !important;\n  }\n  .p-sm-4 {\n    padding: 1.5rem !important;\n  }\n  .p-sm-5 {\n    padding: 3rem !important;\n  }\n  .px-sm-0 {\n    padding-right: 0 !important;\n    padding-left: 0 !important;\n  }\n  .px-sm-1 {\n    padding-right: 0.25rem !important;\n    padding-left: 0.25rem !important;\n  }\n  .px-sm-2 {\n    padding-right: 0.5rem !important;\n    padding-left: 0.5rem !important;\n  }\n  .px-sm-3 {\n    padding-right: 1rem !important;\n    padding-left: 1rem !important;\n  }\n  .px-sm-4 {\n    padding-right: 1.5rem !important;\n    padding-left: 1.5rem !important;\n  }\n  .px-sm-5 {\n    padding-right: 3rem !important;\n    padding-left: 3rem !important;\n  }\n  .py-sm-0 {\n    padding-top: 0 !important;\n    padding-bottom: 0 !important;\n  }\n  .py-sm-1 {\n    padding-top: 0.25rem !important;\n    padding-bottom: 0.25rem !important;\n  }\n  .py-sm-2 {\n    padding-top: 0.5rem !important;\n    padding-bottom: 0.5rem !important;\n  }\n  .py-sm-3 {\n    padding-top: 1rem !important;\n    padding-bottom: 1rem !important;\n  }\n  .py-sm-4 {\n    padding-top: 1.5rem !important;\n    padding-bottom: 1.5rem !important;\n  }\n  .py-sm-5 {\n    padding-top: 3rem !important;\n    padding-bottom: 3rem !important;\n  }\n  .pt-sm-0 {\n    padding-top: 0 !important;\n  }\n  .pt-sm-1 {\n    padding-top: 0.25rem !important;\n  }\n  .pt-sm-2 {\n    padding-top: 0.5rem !important;\n  }\n  .pt-sm-3 {\n    padding-top: 1rem !important;\n  }\n  .pt-sm-4 {\n    padding-top: 1.5rem !important;\n  }\n  .pt-sm-5 {\n    padding-top: 3rem !important;\n  }\n  .pe-sm-0 {\n    padding-right: 0 !important;\n  }\n  .pe-sm-1 {\n    padding-right: 0.25rem !important;\n  }\n  .pe-sm-2 {\n    padding-right: 0.5rem !important;\n  }\n  .pe-sm-3 {\n    padding-right: 1rem !important;\n  }\n  .pe-sm-4 {\n    padding-right: 1.5rem !important;\n  }\n  .pe-sm-5 {\n    padding-right: 3rem !important;\n  }\n  .pb-sm-0 {\n    padding-bottom: 0 !important;\n  }\n  .pb-sm-1 {\n    padding-bottom: 0.25rem !important;\n  }\n  .pb-sm-2 {\n    padding-bottom: 0.5rem !important;\n  }\n  .pb-sm-3 {\n    padding-bottom: 1rem !important;\n  }\n  .pb-sm-4 {\n    padding-bottom: 1.5rem !important;\n  }\n  .pb-sm-5 {\n    padding-bottom: 3rem !important;\n  }\n  .ps-sm-0 {\n    padding-left: 0 !important;\n  }\n  .ps-sm-1 {\n    padding-left: 0.25rem !important;\n  }\n  .ps-sm-2 {\n    padding-left: 0.5rem !important;\n  }\n  .ps-sm-3 {\n    padding-left: 1rem !important;\n  }\n  .ps-sm-4 {\n    padding-left: 1.5rem !important;\n  }\n  .ps-sm-5 {\n    padding-left: 3rem !important;\n  }\n  .text-sm-start {\n    text-align: left !important;\n  }\n  .text-sm-end {\n    text-align: right !important;\n  }\n  .text-sm-center {\n    text-align: center !important;\n  }\n}\n\n@media (min-width: 768px) {\n  .float-md-start {\n    float: left !important;\n  }\n  .float-md-end {\n    float: right !important;\n  }\n  .float-md-none {\n    float: none !important;\n  }\n  .d-md-inline {\n    display: inline !important;\n  }\n  .d-md-inline-block {\n    display: inline-block !important;\n  }\n  .d-md-block {\n    display: block !important;\n  }\n  .d-md-grid {\n    display: grid !important;\n  }\n  .d-md-table {\n    display: table !important;\n  }\n  .d-md-table-row {\n    display: table-row !important;\n  }\n  .d-md-table-cell {\n    display: table-cell !important;\n  }\n  .d-md-flex {\n    display: -ms-flexbox !important;\n    display: flex !important;\n  }\n  .d-md-inline-flex {\n    display: -ms-inline-flexbox !important;\n    display: inline-flex !important;\n  }\n  .d-md-none {\n    display: none !important;\n  }\n  .flex-md-fill {\n    -ms-flex: 1 1 auto !important;\n    flex: 1 1 auto !important;\n  }\n  .flex-md-row {\n    -ms-flex-direction: row !important;\n    flex-direction: row !important;\n  }\n  .flex-md-column {\n    -ms-flex-direction: column !important;\n    flex-direction: column !important;\n  }\n  .flex-md-row-reverse {\n    -ms-flex-direction: row-reverse !important;\n    flex-direction: row-reverse !important;\n  }\n  .flex-md-column-reverse {\n    -ms-flex-direction: column-reverse !important;\n    flex-direction: column-reverse !important;\n  }\n  .flex-md-grow-0 {\n    -ms-flex-positive: 0 !important;\n    flex-grow: 0 !important;\n  }\n  .flex-md-grow-1 {\n    -ms-flex-positive: 1 !important;\n    flex-grow: 1 !important;\n  }\n  .flex-md-shrink-0 {\n    -ms-flex-negative: 0 !important;\n    flex-shrink: 0 !important;\n  }\n  .flex-md-shrink-1 {\n    -ms-flex-negative: 1 !important;\n    flex-shrink: 1 !important;\n  }\n  .flex-md-wrap {\n    -ms-flex-wrap: wrap !important;\n    flex-wrap: wrap !important;\n  }\n  .flex-md-nowrap {\n    -ms-flex-wrap: nowrap !important;\n    flex-wrap: nowrap !important;\n  }\n  .flex-md-wrap-reverse {\n    -ms-flex-wrap: wrap-reverse !important;\n    flex-wrap: wrap-reverse !important;\n  }\n  .gap-md-0 {\n    gap: 0 !important;\n  }\n  .gap-md-1 {\n    gap: 0.25rem !important;\n  }\n  .gap-md-2 {\n    gap: 0.5rem !important;\n  }\n  .gap-md-3 {\n    gap: 1rem !important;\n  }\n  .gap-md-4 {\n    gap: 1.5rem !important;\n  }\n  .gap-md-5 {\n    gap: 3rem !important;\n  }\n  .justify-content-md-start {\n    -ms-flex-pack: start !important;\n    justify-content: flex-start !important;\n  }\n  .justify-content-md-end {\n    -ms-flex-pack: end !important;\n    justify-content: flex-end !important;\n  }\n  .justify-content-md-center {\n    -ms-flex-pack: center !important;\n    justify-content: center !important;\n  }\n  .justify-content-md-between {\n    -ms-flex-pack: justify !important;\n    justify-content: space-between !important;\n  }\n  .justify-content-md-around {\n    -ms-flex-pack: distribute !important;\n    justify-content: space-around !important;\n  }\n  .justify-content-md-evenly {\n    -ms-flex-pack: space-evenly !important;\n    justify-content: space-evenly !important;\n  }\n  .align-items-md-start {\n    -ms-flex-align: start !important;\n    align-items: flex-start !important;\n  }\n  .align-items-md-end {\n    -ms-flex-align: end !important;\n    align-items: flex-end !important;\n  }\n  .align-items-md-center {\n    -ms-flex-align: center !important;\n    align-items: center !important;\n  }\n  .align-items-md-baseline {\n    -ms-flex-align: baseline !important;\n    align-items: baseline !important;\n  }\n  .align-items-md-stretch {\n    -ms-flex-align: stretch !important;\n    align-items: stretch !important;\n  }\n  .align-content-md-start {\n    -ms-flex-line-pack: start !important;\n    align-content: flex-start !important;\n  }\n  .align-content-md-end {\n    -ms-flex-line-pack: end !important;\n    align-content: flex-end !important;\n  }\n  .align-content-md-center {\n    -ms-flex-line-pack: center !important;\n    align-content: center !important;\n  }\n  .align-content-md-between {\n    -ms-flex-line-pack: justify !important;\n    align-content: space-between !important;\n  }\n  .align-content-md-around {\n    -ms-flex-line-pack: distribute !important;\n    align-content: space-around !important;\n  }\n  .align-content-md-stretch {\n    -ms-flex-line-pack: stretch !important;\n    align-content: stretch !important;\n  }\n  .align-self-md-auto {\n    -ms-flex-item-align: auto !important;\n    align-self: auto !important;\n  }\n  .align-self-md-start {\n    -ms-flex-item-align: start !important;\n    align-self: flex-start !important;\n  }\n  .align-self-md-end {\n    -ms-flex-item-align: end !important;\n    align-self: flex-end !important;\n  }\n  .align-self-md-center {\n    -ms-flex-item-align: center !important;\n    align-self: center !important;\n  }\n  .align-self-md-baseline {\n    -ms-flex-item-align: baseline !important;\n    align-self: baseline !important;\n  }\n  .align-self-md-stretch {\n    -ms-flex-item-align: stretch !important;\n    align-self: stretch !important;\n  }\n  .order-md-first {\n    -ms-flex-order: -1 !important;\n    order: -1 !important;\n  }\n  .order-md-0 {\n    -ms-flex-order: 0 !important;\n    order: 0 !important;\n  }\n  .order-md-1 {\n    -ms-flex-order: 1 !important;\n    order: 1 !important;\n  }\n  .order-md-2 {\n    -ms-flex-order: 2 !important;\n    order: 2 !important;\n  }\n  .order-md-3 {\n    -ms-flex-order: 3 !important;\n    order: 3 !important;\n  }\n  .order-md-4 {\n    -ms-flex-order: 4 !important;\n    order: 4 !important;\n  }\n  .order-md-5 {\n    -ms-flex-order: 5 !important;\n    order: 5 !important;\n  }\n  .order-md-last {\n    -ms-flex-order: 6 !important;\n    order: 6 !important;\n  }\n  .m-md-0 {\n    margin: 0 !important;\n  }\n  .m-md-1 {\n    margin: 0.25rem !important;\n  }\n  .m-md-2 {\n    margin: 0.5rem !important;\n  }\n  .m-md-3 {\n    margin: 1rem !important;\n  }\n  .m-md-4 {\n    margin: 1.5rem !important;\n  }\n  .m-md-5 {\n    margin: 3rem !important;\n  }\n  .m-md-auto {\n    margin: auto !important;\n  }\n  .mx-md-0 {\n    margin-right: 0 !important;\n    margin-left: 0 !important;\n  }\n  .mx-md-1 {\n    margin-right: 0.25rem !important;\n    margin-left: 0.25rem !important;\n  }\n  .mx-md-2 {\n    margin-right: 0.5rem !important;\n    margin-left: 0.5rem !important;\n  }\n  .mx-md-3 {\n    margin-right: 1rem !important;\n    margin-left: 1rem !important;\n  }\n  .mx-md-4 {\n    margin-right: 1.5rem !important;\n    margin-left: 1.5rem !important;\n  }\n  .mx-md-5 {\n    margin-right: 3rem !important;\n    margin-left: 3rem !important;\n  }\n  .mx-md-auto {\n    margin-right: auto !important;\n    margin-left: auto !important;\n  }\n  .my-md-0 {\n    margin-top: 0 !important;\n    margin-bottom: 0 !important;\n  }\n  .my-md-1 {\n    margin-top: 0.25rem !important;\n    margin-bottom: 0.25rem !important;\n  }\n  .my-md-2 {\n    margin-top: 0.5rem !important;\n    margin-bottom: 0.5rem !important;\n  }\n  .my-md-3 {\n    margin-top: 1rem !important;\n    margin-bottom: 1rem !important;\n  }\n  .my-md-4 {\n    margin-top: 1.5rem !important;\n    margin-bottom: 1.5rem !important;\n  }\n  .my-md-5 {\n    margin-top: 3rem !important;\n    margin-bottom: 3rem !important;\n  }\n  .my-md-auto {\n    margin-top: auto !important;\n    margin-bottom: auto !important;\n  }\n  .mt-md-0 {\n    margin-top: 0 !important;\n  }\n  .mt-md-1 {\n    margin-top: 0.25rem !important;\n  }\n  .mt-md-2 {\n    margin-top: 0.5rem !important;\n  }\n  .mt-md-3 {\n    margin-top: 1rem !important;\n  }\n  .mt-md-4 {\n    margin-top: 1.5rem !important;\n  }\n  .mt-md-5 {\n    margin-top: 3rem !important;\n  }\n  .mt-md-auto {\n    margin-top: auto !important;\n  }\n  .me-md-0 {\n    margin-right: 0 !important;\n  }\n  .me-md-1 {\n    margin-right: 0.25rem !important;\n  }\n  .me-md-2 {\n    margin-right: 0.5rem !important;\n  }\n  .me-md-3 {\n    margin-right: 1rem !important;\n  }\n  .me-md-4 {\n    margin-right: 1.5rem !important;\n  }\n  .me-md-5 {\n    margin-right: 3rem !important;\n  }\n  .me-md-auto {\n    margin-right: auto !important;\n  }\n  .mb-md-0 {\n    margin-bottom: 0 !important;\n  }\n  .mb-md-1 {\n    margin-bottom: 0.25rem !important;\n  }\n  .mb-md-2 {\n    margin-bottom: 0.5rem !important;\n  }\n  .mb-md-3 {\n    margin-bottom: 1rem !important;\n  }\n  .mb-md-4 {\n    margin-bottom: 1.5rem !important;\n  }\n  .mb-md-5 {\n    margin-bottom: 3rem !important;\n  }\n  .mb-md-auto {\n    margin-bottom: auto !important;\n  }\n  .ms-md-0 {\n    margin-left: 0 !important;\n  }\n  .ms-md-1 {\n    margin-left: 0.25rem !important;\n  }\n  .ms-md-2 {\n    margin-left: 0.5rem !important;\n  }\n  .ms-md-3 {\n    margin-left: 1rem !important;\n  }\n  .ms-md-4 {\n    margin-left: 1.5rem !important;\n  }\n  .ms-md-5 {\n    margin-left: 3rem !important;\n  }\n  .ms-md-auto {\n    margin-left: auto !important;\n  }\n  .p-md-0 {\n    padding: 0 !important;\n  }\n  .p-md-1 {\n    padding: 0.25rem !important;\n  }\n  .p-md-2 {\n    padding: 0.5rem !important;\n  }\n  .p-md-3 {\n    padding: 1rem !important;\n  }\n  .p-md-4 {\n    padding: 1.5rem !important;\n  }\n  .p-md-5 {\n    padding: 3rem !important;\n  }\n  .px-md-0 {\n    padding-right: 0 !important;\n    padding-left: 0 !important;\n  }\n  .px-md-1 {\n    padding-right: 0.25rem !important;\n    padding-left: 0.25rem !important;\n  }\n  .px-md-2 {\n    padding-right: 0.5rem !important;\n    padding-left: 0.5rem !important;\n  }\n  .px-md-3 {\n    padding-right: 1rem !important;\n    padding-left: 1rem !important;\n  }\n  .px-md-4 {\n    padding-right: 1.5rem !important;\n    padding-left: 1.5rem !important;\n  }\n  .px-md-5 {\n    padding-right: 3rem !important;\n    padding-left: 3rem !important;\n  }\n  .py-md-0 {\n    padding-top: 0 !important;\n    padding-bottom: 0 !important;\n  }\n  .py-md-1 {\n    padding-top: 0.25rem !important;\n    padding-bottom: 0.25rem !important;\n  }\n  .py-md-2 {\n    padding-top: 0.5rem !important;\n    padding-bottom: 0.5rem !important;\n  }\n  .py-md-3 {\n    padding-top: 1rem !important;\n    padding-bottom: 1rem !important;\n  }\n  .py-md-4 {\n    padding-top: 1.5rem !important;\n    padding-bottom: 1.5rem !important;\n  }\n  .py-md-5 {\n    padding-top: 3rem !important;\n    padding-bottom: 3rem !important;\n  }\n  .pt-md-0 {\n    padding-top: 0 !important;\n  }\n  .pt-md-1 {\n    padding-top: 0.25rem !important;\n  }\n  .pt-md-2 {\n    padding-top: 0.5rem !important;\n  }\n  .pt-md-3 {\n    padding-top: 1rem !important;\n  }\n  .pt-md-4 {\n    padding-top: 1.5rem !important;\n  }\n  .pt-md-5 {\n    padding-top: 3rem !important;\n  }\n  .pe-md-0 {\n    padding-right: 0 !important;\n  }\n  .pe-md-1 {\n    padding-right: 0.25rem !important;\n  }\n  .pe-md-2 {\n    padding-right: 0.5rem !important;\n  }\n  .pe-md-3 {\n    padding-right: 1rem !important;\n  }\n  .pe-md-4 {\n    padding-right: 1.5rem !important;\n  }\n  .pe-md-5 {\n    padding-right: 3rem !important;\n  }\n  .pb-md-0 {\n    padding-bottom: 0 !important;\n  }\n  .pb-md-1 {\n    padding-bottom: 0.25rem !important;\n  }\n  .pb-md-2 {\n    padding-bottom: 0.5rem !important;\n  }\n  .pb-md-3 {\n    padding-bottom: 1rem !important;\n  }\n  .pb-md-4 {\n    padding-bottom: 1.5rem !important;\n  }\n  .pb-md-5 {\n    padding-bottom: 3rem !important;\n  }\n  .ps-md-0 {\n    padding-left: 0 !important;\n  }\n  .ps-md-1 {\n    padding-left: 0.25rem !important;\n  }\n  .ps-md-2 {\n    padding-left: 0.5rem !important;\n  }\n  .ps-md-3 {\n    padding-left: 1rem !important;\n  }\n  .ps-md-4 {\n    padding-left: 1.5rem !important;\n  }\n  .ps-md-5 {\n    padding-left: 3rem !important;\n  }\n  .text-md-start {\n    text-align: left !important;\n  }\n  .text-md-end {\n    text-align: right !important;\n  }\n  .text-md-center {\n    text-align: center !important;\n  }\n}\n\n@media (min-width: 992px) {\n  .float-lg-start {\n    float: left !important;\n  }\n  .float-lg-end {\n    float: right !important;\n  }\n  .float-lg-none {\n    float: none !important;\n  }\n  .d-lg-inline {\n    display: inline !important;\n  }\n  .d-lg-inline-block {\n    display: inline-block !important;\n  }\n  .d-lg-block {\n    display: block !important;\n  }\n  .d-lg-grid {\n    display: grid !important;\n  }\n  .d-lg-table {\n    display: table !important;\n  }\n  .d-lg-table-row {\n    display: table-row !important;\n  }\n  .d-lg-table-cell {\n    display: table-cell !important;\n  }\n  .d-lg-flex {\n    display: -ms-flexbox !important;\n    display: flex !important;\n  }\n  .d-lg-inline-flex {\n    display: -ms-inline-flexbox !important;\n    display: inline-flex !important;\n  }\n  .d-lg-none {\n    display: none !important;\n  }\n  .flex-lg-fill {\n    -ms-flex: 1 1 auto !important;\n    flex: 1 1 auto !important;\n  }\n  .flex-lg-row {\n    -ms-flex-direction: row !important;\n    flex-direction: row !important;\n  }\n  .flex-lg-column {\n    -ms-flex-direction: column !important;\n    flex-direction: column !important;\n  }\n  .flex-lg-row-reverse {\n    -ms-flex-direction: row-reverse !important;\n    flex-direction: row-reverse !important;\n  }\n  .flex-lg-column-reverse {\n    -ms-flex-direction: column-reverse !important;\n    flex-direction: column-reverse !important;\n  }\n  .flex-lg-grow-0 {\n    -ms-flex-positive: 0 !important;\n    flex-grow: 0 !important;\n  }\n  .flex-lg-grow-1 {\n    -ms-flex-positive: 1 !important;\n    flex-grow: 1 !important;\n  }\n  .flex-lg-shrink-0 {\n    -ms-flex-negative: 0 !important;\n    flex-shrink: 0 !important;\n  }\n  .flex-lg-shrink-1 {\n    -ms-flex-negative: 1 !important;\n    flex-shrink: 1 !important;\n  }\n  .flex-lg-wrap {\n    -ms-flex-wrap: wrap !important;\n    flex-wrap: wrap !important;\n  }\n  .flex-lg-nowrap {\n    -ms-flex-wrap: nowrap !important;\n    flex-wrap: nowrap !important;\n  }\n  .flex-lg-wrap-reverse {\n    -ms-flex-wrap: wrap-reverse !important;\n    flex-wrap: wrap-reverse !important;\n  }\n  .gap-lg-0 {\n    gap: 0 !important;\n  }\n  .gap-lg-1 {\n    gap: 0.25rem !important;\n  }\n  .gap-lg-2 {\n    gap: 0.5rem !important;\n  }\n  .gap-lg-3 {\n    gap: 1rem !important;\n  }\n  .gap-lg-4 {\n    gap: 1.5rem !important;\n  }\n  .gap-lg-5 {\n    gap: 3rem !important;\n  }\n  .justify-content-lg-start {\n    -ms-flex-pack: start !important;\n    justify-content: flex-start !important;\n  }\n  .justify-content-lg-end {\n    -ms-flex-pack: end !important;\n    justify-content: flex-end !important;\n  }\n  .justify-content-lg-center {\n    -ms-flex-pack: center !important;\n    justify-content: center !important;\n  }\n  .justify-content-lg-between {\n    -ms-flex-pack: justify !important;\n    justify-content: space-between !important;\n  }\n  .justify-content-lg-around {\n    -ms-flex-pack: distribute !important;\n    justify-content: space-around !important;\n  }\n  .justify-content-lg-evenly {\n    -ms-flex-pack: space-evenly !important;\n    justify-content: space-evenly !important;\n  }\n  .align-items-lg-start {\n    -ms-flex-align: start !important;\n    align-items: flex-start !important;\n  }\n  .align-items-lg-end {\n    -ms-flex-align: end !important;\n    align-items: flex-end !important;\n  }\n  .align-items-lg-center {\n    -ms-flex-align: center !important;\n    align-items: center !important;\n  }\n  .align-items-lg-baseline {\n    -ms-flex-align: baseline !important;\n    align-items: baseline !important;\n  }\n  .align-items-lg-stretch {\n    -ms-flex-align: stretch !important;\n    align-items: stretch !important;\n  }\n  .align-content-lg-start {\n    -ms-flex-line-pack: start !important;\n    align-content: flex-start !important;\n  }\n  .align-content-lg-end {\n    -ms-flex-line-pack: end !important;\n    align-content: flex-end !important;\n  }\n  .align-content-lg-center {\n    -ms-flex-line-pack: center !important;\n    align-content: center !important;\n  }\n  .align-content-lg-between {\n    -ms-flex-line-pack: justify !important;\n    align-content: space-between !important;\n  }\n  .align-content-lg-around {\n    -ms-flex-line-pack: distribute !important;\n    align-content: space-around !important;\n  }\n  .align-content-lg-stretch {\n    -ms-flex-line-pack: stretch !important;\n    align-content: stretch !important;\n  }\n  .align-self-lg-auto {\n    -ms-flex-item-align: auto !important;\n    align-self: auto !important;\n  }\n  .align-self-lg-start {\n    -ms-flex-item-align: start !important;\n    align-self: flex-start !important;\n  }\n  .align-self-lg-end {\n    -ms-flex-item-align: end !important;\n    align-self: flex-end !important;\n  }\n  .align-self-lg-center {\n    -ms-flex-item-align: center !important;\n    align-self: center !important;\n  }\n  .align-self-lg-baseline {\n    -ms-flex-item-align: baseline !important;\n    align-self: baseline !important;\n  }\n  .align-self-lg-stretch {\n    -ms-flex-item-align: stretch !important;\n    align-self: stretch !important;\n  }\n  .order-lg-first {\n    -ms-flex-order: -1 !important;\n    order: -1 !important;\n  }\n  .order-lg-0 {\n    -ms-flex-order: 0 !important;\n    order: 0 !important;\n  }\n  .order-lg-1 {\n    -ms-flex-order: 1 !important;\n    order: 1 !important;\n  }\n  .order-lg-2 {\n    -ms-flex-order: 2 !important;\n    order: 2 !important;\n  }\n  .order-lg-3 {\n    -ms-flex-order: 3 !important;\n    order: 3 !important;\n  }\n  .order-lg-4 {\n    -ms-flex-order: 4 !important;\n    order: 4 !important;\n  }\n  .order-lg-5 {\n    -ms-flex-order: 5 !important;\n    order: 5 !important;\n  }\n  .order-lg-last {\n    -ms-flex-order: 6 !important;\n    order: 6 !important;\n  }\n  .m-lg-0 {\n    margin: 0 !important;\n  }\n  .m-lg-1 {\n    margin: 0.25rem !important;\n  }\n  .m-lg-2 {\n    margin: 0.5rem !important;\n  }\n  .m-lg-3 {\n    margin: 1rem !important;\n  }\n  .m-lg-4 {\n    margin: 1.5rem !important;\n  }\n  .m-lg-5 {\n    margin: 3rem !important;\n  }\n  .m-lg-auto {\n    margin: auto !important;\n  }\n  .mx-lg-0 {\n    margin-right: 0 !important;\n    margin-left: 0 !important;\n  }\n  .mx-lg-1 {\n    margin-right: 0.25rem !important;\n    margin-left: 0.25rem !important;\n  }\n  .mx-lg-2 {\n    margin-right: 0.5rem !important;\n    margin-left: 0.5rem !important;\n  }\n  .mx-lg-3 {\n    margin-right: 1rem !important;\n    margin-left: 1rem !important;\n  }\n  .mx-lg-4 {\n    margin-right: 1.5rem !important;\n    margin-left: 1.5rem !important;\n  }\n  .mx-lg-5 {\n    margin-right: 3rem !important;\n    margin-left: 3rem !important;\n  }\n  .mx-lg-auto {\n    margin-right: auto !important;\n    margin-left: auto !important;\n  }\n  .my-lg-0 {\n    margin-top: 0 !important;\n    margin-bottom: 0 !important;\n  }\n  .my-lg-1 {\n    margin-top: 0.25rem !important;\n    margin-bottom: 0.25rem !important;\n  }\n  .my-lg-2 {\n    margin-top: 0.5rem !important;\n    margin-bottom: 0.5rem !important;\n  }\n  .my-lg-3 {\n    margin-top: 1rem !important;\n    margin-bottom: 1rem !important;\n  }\n  .my-lg-4 {\n    margin-top: 1.5rem !important;\n    margin-bottom: 1.5rem !important;\n  }\n  .my-lg-5 {\n    margin-top: 3rem !important;\n    margin-bottom: 3rem !important;\n  }\n  .my-lg-auto {\n    margin-top: auto !important;\n    margin-bottom: auto !important;\n  }\n  .mt-lg-0 {\n    margin-top: 0 !important;\n  }\n  .mt-lg-1 {\n    margin-top: 0.25rem !important;\n  }\n  .mt-lg-2 {\n    margin-top: 0.5rem !important;\n  }\n  .mt-lg-3 {\n    margin-top: 1rem !important;\n  }\n  .mt-lg-4 {\n    margin-top: 1.5rem !important;\n  }\n  .mt-lg-5 {\n    margin-top: 3rem !important;\n  }\n  .mt-lg-auto {\n    margin-top: auto !important;\n  }\n  .me-lg-0 {\n    margin-right: 0 !important;\n  }\n  .me-lg-1 {\n    margin-right: 0.25rem !important;\n  }\n  .me-lg-2 {\n    margin-right: 0.5rem !important;\n  }\n  .me-lg-3 {\n    margin-right: 1rem !important;\n  }\n  .me-lg-4 {\n    margin-right: 1.5rem !important;\n  }\n  .me-lg-5 {\n    margin-right: 3rem !important;\n  }\n  .me-lg-auto {\n    margin-right: auto !important;\n  }\n  .mb-lg-0 {\n    margin-bottom: 0 !important;\n  }\n  .mb-lg-1 {\n    margin-bottom: 0.25rem !important;\n  }\n  .mb-lg-2 {\n    margin-bottom: 0.5rem !important;\n  }\n  .mb-lg-3 {\n    margin-bottom: 1rem !important;\n  }\n  .mb-lg-4 {\n    margin-bottom: 1.5rem !important;\n  }\n  .mb-lg-5 {\n    margin-bottom: 3rem !important;\n  }\n  .mb-lg-auto {\n    margin-bottom: auto !important;\n  }\n  .ms-lg-0 {\n    margin-left: 0 !important;\n  }\n  .ms-lg-1 {\n    margin-left: 0.25rem !important;\n  }\n  .ms-lg-2 {\n    margin-left: 0.5rem !important;\n  }\n  .ms-lg-3 {\n    margin-left: 1rem !important;\n  }\n  .ms-lg-4 {\n    margin-left: 1.5rem !important;\n  }\n  .ms-lg-5 {\n    margin-left: 3rem !important;\n  }\n  .ms-lg-auto {\n    margin-left: auto !important;\n  }\n  .p-lg-0 {\n    padding: 0 !important;\n  }\n  .p-lg-1 {\n    padding: 0.25rem !important;\n  }\n  .p-lg-2 {\n    padding: 0.5rem !important;\n  }\n  .p-lg-3 {\n    padding: 1rem !important;\n  }\n  .p-lg-4 {\n    padding: 1.5rem !important;\n  }\n  .p-lg-5 {\n    padding: 3rem !important;\n  }\n  .px-lg-0 {\n    padding-right: 0 !important;\n    padding-left: 0 !important;\n  }\n  .px-lg-1 {\n    padding-right: 0.25rem !important;\n    padding-left: 0.25rem !important;\n  }\n  .px-lg-2 {\n    padding-right: 0.5rem !important;\n    padding-left: 0.5rem !important;\n  }\n  .px-lg-3 {\n    padding-right: 1rem !important;\n    padding-left: 1rem !important;\n  }\n  .px-lg-4 {\n    padding-right: 1.5rem !important;\n    padding-left: 1.5rem !important;\n  }\n  .px-lg-5 {\n    padding-right: 3rem !important;\n    padding-left: 3rem !important;\n  }\n  .py-lg-0 {\n    padding-top: 0 !important;\n    padding-bottom: 0 !important;\n  }\n  .py-lg-1 {\n    padding-top: 0.25rem !important;\n    padding-bottom: 0.25rem !important;\n  }\n  .py-lg-2 {\n    padding-top: 0.5rem !important;\n    padding-bottom: 0.5rem !important;\n  }\n  .py-lg-3 {\n    padding-top: 1rem !important;\n    padding-bottom: 1rem !important;\n  }\n  .py-lg-4 {\n    padding-top: 1.5rem !important;\n    padding-bottom: 1.5rem !important;\n  }\n  .py-lg-5 {\n    padding-top: 3rem !important;\n    padding-bottom: 3rem !important;\n  }\n  .pt-lg-0 {\n    padding-top: 0 !important;\n  }\n  .pt-lg-1 {\n    padding-top: 0.25rem !important;\n  }\n  .pt-lg-2 {\n    padding-top: 0.5rem !important;\n  }\n  .pt-lg-3 {\n    padding-top: 1rem !important;\n  }\n  .pt-lg-4 {\n    padding-top: 1.5rem !important;\n  }\n  .pt-lg-5 {\n    padding-top: 3rem !important;\n  }\n  .pe-lg-0 {\n    padding-right: 0 !important;\n  }\n  .pe-lg-1 {\n    padding-right: 0.25rem !important;\n  }\n  .pe-lg-2 {\n    padding-right: 0.5rem !important;\n  }\n  .pe-lg-3 {\n    padding-right: 1rem !important;\n  }\n  .pe-lg-4 {\n    padding-right: 1.5rem !important;\n  }\n  .pe-lg-5 {\n    padding-right: 3rem !important;\n  }\n  .pb-lg-0 {\n    padding-bottom: 0 !important;\n  }\n  .pb-lg-1 {\n    padding-bottom: 0.25rem !important;\n  }\n  .pb-lg-2 {\n    padding-bottom: 0.5rem !important;\n  }\n  .pb-lg-3 {\n    padding-bottom: 1rem !important;\n  }\n  .pb-lg-4 {\n    padding-bottom: 1.5rem !important;\n  }\n  .pb-lg-5 {\n    padding-bottom: 3rem !important;\n  }\n  .ps-lg-0 {\n    padding-left: 0 !important;\n  }\n  .ps-lg-1 {\n    padding-left: 0.25rem !important;\n  }\n  .ps-lg-2 {\n    padding-left: 0.5rem !important;\n  }\n  .ps-lg-3 {\n    padding-left: 1rem !important;\n  }\n  .ps-lg-4 {\n    padding-left: 1.5rem !important;\n  }\n  .ps-lg-5 {\n    padding-left: 3rem !important;\n  }\n  .text-lg-start {\n    text-align: left !important;\n  }\n  .text-lg-end {\n    text-align: right !important;\n  }\n  .text-lg-center {\n    text-align: center !important;\n  }\n}\n\n@media (min-width: 1200px) {\n  .float-xl-start {\n    float: left !important;\n  }\n  .float-xl-end {\n    float: right !important;\n  }\n  .float-xl-none {\n    float: none !important;\n  }\n  .d-xl-inline {\n    display: inline !important;\n  }\n  .d-xl-inline-block {\n    display: inline-block !important;\n  }\n  .d-xl-block {\n    display: block !important;\n  }\n  .d-xl-grid {\n    display: grid !important;\n  }\n  .d-xl-table {\n    display: table !important;\n  }\n  .d-xl-table-row {\n    display: table-row !important;\n  }\n  .d-xl-table-cell {\n    display: table-cell !important;\n  }\n  .d-xl-flex {\n    display: -ms-flexbox !important;\n    display: flex !important;\n  }\n  .d-xl-inline-flex {\n    display: -ms-inline-flexbox !important;\n    display: inline-flex !important;\n  }\n  .d-xl-none {\n    display: none !important;\n  }\n  .flex-xl-fill {\n    -ms-flex: 1 1 auto !important;\n    flex: 1 1 auto !important;\n  }\n  .flex-xl-row {\n    -ms-flex-direction: row !important;\n    flex-direction: row !important;\n  }\n  .flex-xl-column {\n    -ms-flex-direction: column !important;\n    flex-direction: column !important;\n  }\n  .flex-xl-row-reverse {\n    -ms-flex-direction: row-reverse !important;\n    flex-direction: row-reverse !important;\n  }\n  .flex-xl-column-reverse {\n    -ms-flex-direction: column-reverse !important;\n    flex-direction: column-reverse !important;\n  }\n  .flex-xl-grow-0 {\n    -ms-flex-positive: 0 !important;\n    flex-grow: 0 !important;\n  }\n  .flex-xl-grow-1 {\n    -ms-flex-positive: 1 !important;\n    flex-grow: 1 !important;\n  }\n  .flex-xl-shrink-0 {\n    -ms-flex-negative: 0 !important;\n    flex-shrink: 0 !important;\n  }\n  .flex-xl-shrink-1 {\n    -ms-flex-negative: 1 !important;\n    flex-shrink: 1 !important;\n  }\n  .flex-xl-wrap {\n    -ms-flex-wrap: wrap !important;\n    flex-wrap: wrap !important;\n  }\n  .flex-xl-nowrap {\n    -ms-flex-wrap: nowrap !important;\n    flex-wrap: nowrap !important;\n  }\n  .flex-xl-wrap-reverse {\n    -ms-flex-wrap: wrap-reverse !important;\n    flex-wrap: wrap-reverse !important;\n  }\n  .gap-xl-0 {\n    gap: 0 !important;\n  }\n  .gap-xl-1 {\n    gap: 0.25rem !important;\n  }\n  .gap-xl-2 {\n    gap: 0.5rem !important;\n  }\n  .gap-xl-3 {\n    gap: 1rem !important;\n  }\n  .gap-xl-4 {\n    gap: 1.5rem !important;\n  }\n  .gap-xl-5 {\n    gap: 3rem !important;\n  }\n  .justify-content-xl-start {\n    -ms-flex-pack: start !important;\n    justify-content: flex-start !important;\n  }\n  .justify-content-xl-end {\n    -ms-flex-pack: end !important;\n    justify-content: flex-end !important;\n  }\n  .justify-content-xl-center {\n    -ms-flex-pack: center !important;\n    justify-content: center !important;\n  }\n  .justify-content-xl-between {\n    -ms-flex-pack: justify !important;\n    justify-content: space-between !important;\n  }\n  .justify-content-xl-around {\n    -ms-flex-pack: distribute !important;\n    justify-content: space-around !important;\n  }\n  .justify-content-xl-evenly {\n    -ms-flex-pack: space-evenly !important;\n    justify-content: space-evenly !important;\n  }\n  .align-items-xl-start {\n    -ms-flex-align: start !important;\n    align-items: flex-start !important;\n  }\n  .align-items-xl-end {\n    -ms-flex-align: end !important;\n    align-items: flex-end !important;\n  }\n  .align-items-xl-center {\n    -ms-flex-align: center !important;\n    align-items: center !important;\n  }\n  .align-items-xl-baseline {\n    -ms-flex-align: baseline !important;\n    align-items: baseline !important;\n  }\n  .align-items-xl-stretch {\n    -ms-flex-align: stretch !important;\n    align-items: stretch !important;\n  }\n  .align-content-xl-start {\n    -ms-flex-line-pack: start !important;\n    align-content: flex-start !important;\n  }\n  .align-content-xl-end {\n    -ms-flex-line-pack: end !important;\n    align-content: flex-end !important;\n  }\n  .align-content-xl-center {\n    -ms-flex-line-pack: center !important;\n    align-content: center !important;\n  }\n  .align-content-xl-between {\n    -ms-flex-line-pack: justify !important;\n    align-content: space-between !important;\n  }\n  .align-content-xl-around {\n    -ms-flex-line-pack: distribute !important;\n    align-content: space-around !important;\n  }\n  .align-content-xl-stretch {\n    -ms-flex-line-pack: stretch !important;\n    align-content: stretch !important;\n  }\n  .align-self-xl-auto {\n    -ms-flex-item-align: auto !important;\n    align-self: auto !important;\n  }\n  .align-self-xl-start {\n    -ms-flex-item-align: start !important;\n    align-self: flex-start !important;\n  }\n  .align-self-xl-end {\n    -ms-flex-item-align: end !important;\n    align-self: flex-end !important;\n  }\n  .align-self-xl-center {\n    -ms-flex-item-align: center !important;\n    align-self: center !important;\n  }\n  .align-self-xl-baseline {\n    -ms-flex-item-align: baseline !important;\n    align-self: baseline !important;\n  }\n  .align-self-xl-stretch {\n    -ms-flex-item-align: stretch !important;\n    align-self: stretch !important;\n  }\n  .order-xl-first {\n    -ms-flex-order: -1 !important;\n    order: -1 !important;\n  }\n  .order-xl-0 {\n    -ms-flex-order: 0 !important;\n    order: 0 !important;\n  }\n  .order-xl-1 {\n    -ms-flex-order: 1 !important;\n    order: 1 !important;\n  }\n  .order-xl-2 {\n    -ms-flex-order: 2 !important;\n    order: 2 !important;\n  }\n  .order-xl-3 {\n    -ms-flex-order: 3 !important;\n    order: 3 !important;\n  }\n  .order-xl-4 {\n    -ms-flex-order: 4 !important;\n    order: 4 !important;\n  }\n  .order-xl-5 {\n    -ms-flex-order: 5 !important;\n    order: 5 !important;\n  }\n  .order-xl-last {\n    -ms-flex-order: 6 !important;\n    order: 6 !important;\n  }\n  .m-xl-0 {\n    margin: 0 !important;\n  }\n  .m-xl-1 {\n    margin: 0.25rem !important;\n  }\n  .m-xl-2 {\n    margin: 0.5rem !important;\n  }\n  .m-xl-3 {\n    margin: 1rem !important;\n  }\n  .m-xl-4 {\n    margin: 1.5rem !important;\n  }\n  .m-xl-5 {\n    margin: 3rem !important;\n  }\n  .m-xl-auto {\n    margin: auto !important;\n  }\n  .mx-xl-0 {\n    margin-right: 0 !important;\n    margin-left: 0 !important;\n  }\n  .mx-xl-1 {\n    margin-right: 0.25rem !important;\n    margin-left: 0.25rem !important;\n  }\n  .mx-xl-2 {\n    margin-right: 0.5rem !important;\n    margin-left: 0.5rem !important;\n  }\n  .mx-xl-3 {\n    margin-right: 1rem !important;\n    margin-left: 1rem !important;\n  }\n  .mx-xl-4 {\n    margin-right: 1.5rem !important;\n    margin-left: 1.5rem !important;\n  }\n  .mx-xl-5 {\n    margin-right: 3rem !important;\n    margin-left: 3rem !important;\n  }\n  .mx-xl-auto {\n    margin-right: auto !important;\n    margin-left: auto !important;\n  }\n  .my-xl-0 {\n    margin-top: 0 !important;\n    margin-bottom: 0 !important;\n  }\n  .my-xl-1 {\n    margin-top: 0.25rem !important;\n    margin-bottom: 0.25rem !important;\n  }\n  .my-xl-2 {\n    margin-top: 0.5rem !important;\n    margin-bottom: 0.5rem !important;\n  }\n  .my-xl-3 {\n    margin-top: 1rem !important;\n    margin-bottom: 1rem !important;\n  }\n  .my-xl-4 {\n    margin-top: 1.5rem !important;\n    margin-bottom: 1.5rem !important;\n  }\n  .my-xl-5 {\n    margin-top: 3rem !important;\n    margin-bottom: 3rem !important;\n  }\n  .my-xl-auto {\n    margin-top: auto !important;\n    margin-bottom: auto !important;\n  }\n  .mt-xl-0 {\n    margin-top: 0 !important;\n  }\n  .mt-xl-1 {\n    margin-top: 0.25rem !important;\n  }\n  .mt-xl-2 {\n    margin-top: 0.5rem !important;\n  }\n  .mt-xl-3 {\n    margin-top: 1rem !important;\n  }\n  .mt-xl-4 {\n    margin-top: 1.5rem !important;\n  }\n  .mt-xl-5 {\n    margin-top: 3rem !important;\n  }\n  .mt-xl-auto {\n    margin-top: auto !important;\n  }\n  .me-xl-0 {\n    margin-right: 0 !important;\n  }\n  .me-xl-1 {\n    margin-right: 0.25rem !important;\n  }\n  .me-xl-2 {\n    margin-right: 0.5rem !important;\n  }\n  .me-xl-3 {\n    margin-right: 1rem !important;\n  }\n  .me-xl-4 {\n    margin-right: 1.5rem !important;\n  }\n  .me-xl-5 {\n    margin-right: 3rem !important;\n  }\n  .me-xl-auto {\n    margin-right: auto !important;\n  }\n  .mb-xl-0 {\n    margin-bottom: 0 !important;\n  }\n  .mb-xl-1 {\n    margin-bottom: 0.25rem !important;\n  }\n  .mb-xl-2 {\n    margin-bottom: 0.5rem !important;\n  }\n  .mb-xl-3 {\n    margin-bottom: 1rem !important;\n  }\n  .mb-xl-4 {\n    margin-bottom: 1.5rem !important;\n  }\n  .mb-xl-5 {\n    margin-bottom: 3rem !important;\n  }\n  .mb-xl-auto {\n    margin-bottom: auto !important;\n  }\n  .ms-xl-0 {\n    margin-left: 0 !important;\n  }\n  .ms-xl-1 {\n    margin-left: 0.25rem !important;\n  }\n  .ms-xl-2 {\n    margin-left: 0.5rem !important;\n  }\n  .ms-xl-3 {\n    margin-left: 1rem !important;\n  }\n  .ms-xl-4 {\n    margin-left: 1.5rem !important;\n  }\n  .ms-xl-5 {\n    margin-left: 3rem !important;\n  }\n  .ms-xl-auto {\n    margin-left: auto !important;\n  }\n  .p-xl-0 {\n    padding: 0 !important;\n  }\n  .p-xl-1 {\n    padding: 0.25rem !important;\n  }\n  .p-xl-2 {\n    padding: 0.5rem !important;\n  }\n  .p-xl-3 {\n    padding: 1rem !important;\n  }\n  .p-xl-4 {\n    padding: 1.5rem !important;\n  }\n  .p-xl-5 {\n    padding: 3rem !important;\n  }\n  .px-xl-0 {\n    padding-right: 0 !important;\n    padding-left: 0 !important;\n  }\n  .px-xl-1 {\n    padding-right: 0.25rem !important;\n    padding-left: 0.25rem !important;\n  }\n  .px-xl-2 {\n    padding-right: 0.5rem !important;\n    padding-left: 0.5rem !important;\n  }\n  .px-xl-3 {\n    padding-right: 1rem !important;\n    padding-left: 1rem !important;\n  }\n  .px-xl-4 {\n    padding-right: 1.5rem !important;\n    padding-left: 1.5rem !important;\n  }\n  .px-xl-5 {\n    padding-right: 3rem !important;\n    padding-left: 3rem !important;\n  }\n  .py-xl-0 {\n    padding-top: 0 !important;\n    padding-bottom: 0 !important;\n  }\n  .py-xl-1 {\n    padding-top: 0.25rem !important;\n    padding-bottom: 0.25rem !important;\n  }\n  .py-xl-2 {\n    padding-top: 0.5rem !important;\n    padding-bottom: 0.5rem !important;\n  }\n  .py-xl-3 {\n    padding-top: 1rem !important;\n    padding-bottom: 1rem !important;\n  }\n  .py-xl-4 {\n    padding-top: 1.5rem !important;\n    padding-bottom: 1.5rem !important;\n  }\n  .py-xl-5 {\n    padding-top: 3rem !important;\n    padding-bottom: 3rem !important;\n  }\n  .pt-xl-0 {\n    padding-top: 0 !important;\n  }\n  .pt-xl-1 {\n    padding-top: 0.25rem !important;\n  }\n  .pt-xl-2 {\n    padding-top: 0.5rem !important;\n  }\n  .pt-xl-3 {\n    padding-top: 1rem !important;\n  }\n  .pt-xl-4 {\n    padding-top: 1.5rem !important;\n  }\n  .pt-xl-5 {\n    padding-top: 3rem !important;\n  }\n  .pe-xl-0 {\n    padding-right: 0 !important;\n  }\n  .pe-xl-1 {\n    padding-right: 0.25rem !important;\n  }\n  .pe-xl-2 {\n    padding-right: 0.5rem !important;\n  }\n  .pe-xl-3 {\n    padding-right: 1rem !important;\n  }\n  .pe-xl-4 {\n    padding-right: 1.5rem !important;\n  }\n  .pe-xl-5 {\n    padding-right: 3rem !important;\n  }\n  .pb-xl-0 {\n    padding-bottom: 0 !important;\n  }\n  .pb-xl-1 {\n    padding-bottom: 0.25rem !important;\n  }\n  .pb-xl-2 {\n    padding-bottom: 0.5rem !important;\n  }\n  .pb-xl-3 {\n    padding-bottom: 1rem !important;\n  }\n  .pb-xl-4 {\n    padding-bottom: 1.5rem !important;\n  }\n  .pb-xl-5 {\n    padding-bottom: 3rem !important;\n  }\n  .ps-xl-0 {\n    padding-left: 0 !important;\n  }\n  .ps-xl-1 {\n    padding-left: 0.25rem !important;\n  }\n  .ps-xl-2 {\n    padding-left: 0.5rem !important;\n  }\n  .ps-xl-3 {\n    padding-left: 1rem !important;\n  }\n  .ps-xl-4 {\n    padding-left: 1.5rem !important;\n  }\n  .ps-xl-5 {\n    padding-left: 3rem !important;\n  }\n  .text-xl-start {\n    text-align: left !important;\n  }\n  .text-xl-end {\n    text-align: right !important;\n  }\n  .text-xl-center {\n    text-align: center !important;\n  }\n}\n\n@media (min-width: 1400px) {\n  .float-xxl-start {\n    float: left !important;\n  }\n  .float-xxl-end {\n    float: right !important;\n  }\n  .float-xxl-none {\n    float: none !important;\n  }\n  .d-xxl-inline {\n    display: inline !important;\n  }\n  .d-xxl-inline-block {\n    display: inline-block !important;\n  }\n  .d-xxl-block {\n    display: block !important;\n  }\n  .d-xxl-grid {\n    display: grid !important;\n  }\n  .d-xxl-table {\n    display: table !important;\n  }\n  .d-xxl-table-row {\n    display: table-row !important;\n  }\n  .d-xxl-table-cell {\n    display: table-cell !important;\n  }\n  .d-xxl-flex {\n    display: -ms-flexbox !important;\n    display: flex !important;\n  }\n  .d-xxl-inline-flex {\n    display: -ms-inline-flexbox !important;\n    display: inline-flex !important;\n  }\n  .d-xxl-none {\n    display: none !important;\n  }\n  .flex-xxl-fill {\n    -ms-flex: 1 1 auto !important;\n    flex: 1 1 auto !important;\n  }\n  .flex-xxl-row {\n    -ms-flex-direction: row !important;\n    flex-direction: row !important;\n  }\n  .flex-xxl-column {\n    -ms-flex-direction: column !important;\n    flex-direction: column !important;\n  }\n  .flex-xxl-row-reverse {\n    -ms-flex-direction: row-reverse !important;\n    flex-direction: row-reverse !important;\n  }\n  .flex-xxl-column-reverse {\n    -ms-flex-direction: column-reverse !important;\n    flex-direction: column-reverse !important;\n  }\n  .flex-xxl-grow-0 {\n    -ms-flex-positive: 0 !important;\n    flex-grow: 0 !important;\n  }\n  .flex-xxl-grow-1 {\n    -ms-flex-positive: 1 !important;\n    flex-grow: 1 !important;\n  }\n  .flex-xxl-shrink-0 {\n    -ms-flex-negative: 0 !important;\n    flex-shrink: 0 !important;\n  }\n  .flex-xxl-shrink-1 {\n    -ms-flex-negative: 1 !important;\n    flex-shrink: 1 !important;\n  }\n  .flex-xxl-wrap {\n    -ms-flex-wrap: wrap !important;\n    flex-wrap: wrap !important;\n  }\n  .flex-xxl-nowrap {\n    -ms-flex-wrap: nowrap !important;\n    flex-wrap: nowrap !important;\n  }\n  .flex-xxl-wrap-reverse {\n    -ms-flex-wrap: wrap-reverse !important;\n    flex-wrap: wrap-reverse !important;\n  }\n  .gap-xxl-0 {\n    gap: 0 !important;\n  }\n  .gap-xxl-1 {\n    gap: 0.25rem !important;\n  }\n  .gap-xxl-2 {\n    gap: 0.5rem !important;\n  }\n  .gap-xxl-3 {\n    gap: 1rem !important;\n  }\n  .gap-xxl-4 {\n    gap: 1.5rem !important;\n  }\n  .gap-xxl-5 {\n    gap: 3rem !important;\n  }\n  .justify-content-xxl-start {\n    -ms-flex-pack: start !important;\n    justify-content: flex-start !important;\n  }\n  .justify-content-xxl-end {\n    -ms-flex-pack: end !important;\n    justify-content: flex-end !important;\n  }\n  .justify-content-xxl-center {\n    -ms-flex-pack: center !important;\n    justify-content: center !important;\n  }\n  .justify-content-xxl-between {\n    -ms-flex-pack: justify !important;\n    justify-content: space-between !important;\n  }\n  .justify-content-xxl-around {\n    -ms-flex-pack: distribute !important;\n    justify-content: space-around !important;\n  }\n  .justify-content-xxl-evenly {\n    -ms-flex-pack: space-evenly !important;\n    justify-content: space-evenly !important;\n  }\n  .align-items-xxl-start {\n    -ms-flex-align: start !important;\n    align-items: flex-start !important;\n  }\n  .align-items-xxl-end {\n    -ms-flex-align: end !important;\n    align-items: flex-end !important;\n  }\n  .align-items-xxl-center {\n    -ms-flex-align: center !important;\n    align-items: center !important;\n  }\n  .align-items-xxl-baseline {\n    -ms-flex-align: baseline !important;\n    align-items: baseline !important;\n  }\n  .align-items-xxl-stretch {\n    -ms-flex-align: stretch !important;\n    align-items: stretch !important;\n  }\n  .align-content-xxl-start {\n    -ms-flex-line-pack: start !important;\n    align-content: flex-start !important;\n  }\n  .align-content-xxl-end {\n    -ms-flex-line-pack: end !important;\n    align-content: flex-end !important;\n  }\n  .align-content-xxl-center {\n    -ms-flex-line-pack: center !important;\n    align-content: center !important;\n  }\n  .align-content-xxl-between {\n    -ms-flex-line-pack: justify !important;\n    align-content: space-between !important;\n  }\n  .align-content-xxl-around {\n    -ms-flex-line-pack: distribute !important;\n    align-content: space-around !important;\n  }\n  .align-content-xxl-stretch {\n    -ms-flex-line-pack: stretch !important;\n    align-content: stretch !important;\n  }\n  .align-self-xxl-auto {\n    -ms-flex-item-align: auto !important;\n    align-self: auto !important;\n  }\n  .align-self-xxl-start {\n    -ms-flex-item-align: start !important;\n    align-self: flex-start !important;\n  }\n  .align-self-xxl-end {\n    -ms-flex-item-align: end !important;\n    align-self: flex-end !important;\n  }\n  .align-self-xxl-center {\n    -ms-flex-item-align: center !important;\n    align-self: center !important;\n  }\n  .align-self-xxl-baseline {\n    -ms-flex-item-align: baseline !important;\n    align-self: baseline !important;\n  }\n  .align-self-xxl-stretch {\n    -ms-flex-item-align: stretch !important;\n    align-self: stretch !important;\n  }\n  .order-xxl-first {\n    -ms-flex-order: -1 !important;\n    order: -1 !important;\n  }\n  .order-xxl-0 {\n    -ms-flex-order: 0 !important;\n    order: 0 !important;\n  }\n  .order-xxl-1 {\n    -ms-flex-order: 1 !important;\n    order: 1 !important;\n  }\n  .order-xxl-2 {\n    -ms-flex-order: 2 !important;\n    order: 2 !important;\n  }\n  .order-xxl-3 {\n    -ms-flex-order: 3 !important;\n    order: 3 !important;\n  }\n  .order-xxl-4 {\n    -ms-flex-order: 4 !important;\n    order: 4 !important;\n  }\n  .order-xxl-5 {\n    -ms-flex-order: 5 !important;\n    order: 5 !important;\n  }\n  .order-xxl-last {\n    -ms-flex-order: 6 !important;\n    order: 6 !important;\n  }\n  .m-xxl-0 {\n    margin: 0 !important;\n  }\n  .m-xxl-1 {\n    margin: 0.25rem !important;\n  }\n  .m-xxl-2 {\n    margin: 0.5rem !important;\n  }\n  .m-xxl-3 {\n    margin: 1rem !important;\n  }\n  .m-xxl-4 {\n    margin: 1.5rem !important;\n  }\n  .m-xxl-5 {\n    margin: 3rem !important;\n  }\n  .m-xxl-auto {\n    margin: auto !important;\n  }\n  .mx-xxl-0 {\n    margin-right: 0 !important;\n    margin-left: 0 !important;\n  }\n  .mx-xxl-1 {\n    margin-right: 0.25rem !important;\n    margin-left: 0.25rem !important;\n  }\n  .mx-xxl-2 {\n    margin-right: 0.5rem !important;\n    margin-left: 0.5rem !important;\n  }\n  .mx-xxl-3 {\n    margin-right: 1rem !important;\n    margin-left: 1rem !important;\n  }\n  .mx-xxl-4 {\n    margin-right: 1.5rem !important;\n    margin-left: 1.5rem !important;\n  }\n  .mx-xxl-5 {\n    margin-right: 3rem !important;\n    margin-left: 3rem !important;\n  }\n  .mx-xxl-auto {\n    margin-right: auto !important;\n    margin-left: auto !important;\n  }\n  .my-xxl-0 {\n    margin-top: 0 !important;\n    margin-bottom: 0 !important;\n  }\n  .my-xxl-1 {\n    margin-top: 0.25rem !important;\n    margin-bottom: 0.25rem !important;\n  }\n  .my-xxl-2 {\n    margin-top: 0.5rem !important;\n    margin-bottom: 0.5rem !important;\n  }\n  .my-xxl-3 {\n    margin-top: 1rem !important;\n    margin-bottom: 1rem !important;\n  }\n  .my-xxl-4 {\n    margin-top: 1.5rem !important;\n    margin-bottom: 1.5rem !important;\n  }\n  .my-xxl-5 {\n    margin-top: 3rem !important;\n    margin-bottom: 3rem !important;\n  }\n  .my-xxl-auto {\n    margin-top: auto !important;\n    margin-bottom: auto !important;\n  }\n  .mt-xxl-0 {\n    margin-top: 0 !important;\n  }\n  .mt-xxl-1 {\n    margin-top: 0.25rem !important;\n  }\n  .mt-xxl-2 {\n    margin-top: 0.5rem !important;\n  }\n  .mt-xxl-3 {\n    margin-top: 1rem !important;\n  }\n  .mt-xxl-4 {\n    margin-top: 1.5rem !important;\n  }\n  .mt-xxl-5 {\n    margin-top: 3rem !important;\n  }\n  .mt-xxl-auto {\n    margin-top: auto !important;\n  }\n  .me-xxl-0 {\n    margin-right: 0 !important;\n  }\n  .me-xxl-1 {\n    margin-right: 0.25rem !important;\n  }\n  .me-xxl-2 {\n    margin-right: 0.5rem !important;\n  }\n  .me-xxl-3 {\n    margin-right: 1rem !important;\n  }\n  .me-xxl-4 {\n    margin-right: 1.5rem !important;\n  }\n  .me-xxl-5 {\n    margin-right: 3rem !important;\n  }\n  .me-xxl-auto {\n    margin-right: auto !important;\n  }\n  .mb-xxl-0 {\n    margin-bottom: 0 !important;\n  }\n  .mb-xxl-1 {\n    margin-bottom: 0.25rem !important;\n  }\n  .mb-xxl-2 {\n    margin-bottom: 0.5rem !important;\n  }\n  .mb-xxl-3 {\n    margin-bottom: 1rem !important;\n  }\n  .mb-xxl-4 {\n    margin-bottom: 1.5rem !important;\n  }\n  .mb-xxl-5 {\n    margin-bottom: 3rem !important;\n  }\n  .mb-xxl-auto {\n    margin-bottom: auto !important;\n  }\n  .ms-xxl-0 {\n    margin-left: 0 !important;\n  }\n  .ms-xxl-1 {\n    margin-left: 0.25rem !important;\n  }\n  .ms-xxl-2 {\n    margin-left: 0.5rem !important;\n  }\n  .ms-xxl-3 {\n    margin-left: 1rem !important;\n  }\n  .ms-xxl-4 {\n    margin-left: 1.5rem !important;\n  }\n  .ms-xxl-5 {\n    margin-left: 3rem !important;\n  }\n  .ms-xxl-auto {\n    margin-left: auto !important;\n  }\n  .p-xxl-0 {\n    padding: 0 !important;\n  }\n  .p-xxl-1 {\n    padding: 0.25rem !important;\n  }\n  .p-xxl-2 {\n    padding: 0.5rem !important;\n  }\n  .p-xxl-3 {\n    padding: 1rem !important;\n  }\n  .p-xxl-4 {\n    padding: 1.5rem !important;\n  }\n  .p-xxl-5 {\n    padding: 3rem !important;\n  }\n  .px-xxl-0 {\n    padding-right: 0 !important;\n    padding-left: 0 !important;\n  }\n  .px-xxl-1 {\n    padding-right: 0.25rem !important;\n    padding-left: 0.25rem !important;\n  }\n  .px-xxl-2 {\n    padding-right: 0.5rem !important;\n    padding-left: 0.5rem !important;\n  }\n  .px-xxl-3 {\n    padding-right: 1rem !important;\n    padding-left: 1rem !important;\n  }\n  .px-xxl-4 {\n    padding-right: 1.5rem !important;\n    padding-left: 1.5rem !important;\n  }\n  .px-xxl-5 {\n    padding-right: 3rem !important;\n    padding-left: 3rem !important;\n  }\n  .py-xxl-0 {\n    padding-top: 0 !important;\n    padding-bottom: 0 !important;\n  }\n  .py-xxl-1 {\n    padding-top: 0.25rem !important;\n    padding-bottom: 0.25rem !important;\n  }\n  .py-xxl-2 {\n    padding-top: 0.5rem !important;\n    padding-bottom: 0.5rem !important;\n  }\n  .py-xxl-3 {\n    padding-top: 1rem !important;\n    padding-bottom: 1rem !important;\n  }\n  .py-xxl-4 {\n    padding-top: 1.5rem !important;\n    padding-bottom: 1.5rem !important;\n  }\n  .py-xxl-5 {\n    padding-top: 3rem !important;\n    padding-bottom: 3rem !important;\n  }\n  .pt-xxl-0 {\n    padding-top: 0 !important;\n  }\n  .pt-xxl-1 {\n    padding-top: 0.25rem !important;\n  }\n  .pt-xxl-2 {\n    padding-top: 0.5rem !important;\n  }\n  .pt-xxl-3 {\n    padding-top: 1rem !important;\n  }\n  .pt-xxl-4 {\n    padding-top: 1.5rem !important;\n  }\n  .pt-xxl-5 {\n    padding-top: 3rem !important;\n  }\n  .pe-xxl-0 {\n    padding-right: 0 !important;\n  }\n  .pe-xxl-1 {\n    padding-right: 0.25rem !important;\n  }\n  .pe-xxl-2 {\n    padding-right: 0.5rem !important;\n  }\n  .pe-xxl-3 {\n    padding-right: 1rem !important;\n  }\n  .pe-xxl-4 {\n    padding-right: 1.5rem !important;\n  }\n  .pe-xxl-5 {\n    padding-right: 3rem !important;\n  }\n  .pb-xxl-0 {\n    padding-bottom: 0 !important;\n  }\n  .pb-xxl-1 {\n    padding-bottom: 0.25rem !important;\n  }\n  .pb-xxl-2 {\n    padding-bottom: 0.5rem !important;\n  }\n  .pb-xxl-3 {\n    padding-bottom: 1rem !important;\n  }\n  .pb-xxl-4 {\n    padding-bottom: 1.5rem !important;\n  }\n  .pb-xxl-5 {\n    padding-bottom: 3rem !important;\n  }\n  .ps-xxl-0 {\n    padding-left: 0 !important;\n  }\n  .ps-xxl-1 {\n    padding-left: 0.25rem !important;\n  }\n  .ps-xxl-2 {\n    padding-left: 0.5rem !important;\n  }\n  .ps-xxl-3 {\n    padding-left: 1rem !important;\n  }\n  .ps-xxl-4 {\n    padding-left: 1.5rem !important;\n  }\n  .ps-xxl-5 {\n    padding-left: 3rem !important;\n  }\n  .text-xxl-start {\n    text-align: left !important;\n  }\n  .text-xxl-end {\n    text-align: right !important;\n  }\n  .text-xxl-center {\n    text-align: center !important;\n  }\n}\n\n@media (min-width: 1200px) {\n  .fs-1 {\n    font-size: 2.5rem !important;\n  }\n  .fs-2 {\n    font-size: 2rem !important;\n  }\n  .fs-3 {\n    font-size: 1.75rem !important;\n  }\n  .fs-4 {\n    font-size: 1.5rem !important;\n  }\n}\n\n@media print {\n  .d-print-inline {\n    display: inline !important;\n  }\n  .d-print-inline-block {\n    display: inline-block !important;\n  }\n  .d-print-block {\n    display: block !important;\n  }\n  .d-print-grid {\n    display: grid !important;\n  }\n  .d-print-table {\n    display: table !important;\n  }\n  .d-print-table-row {\n    display: table-row !important;\n  }\n  .d-print-table-cell {\n    display: table-cell !important;\n  }\n  .d-print-flex {\n    display: -ms-flexbox !important;\n    display: flex !important;\n  }\n  .d-print-inline-flex {\n    display: -ms-inline-flexbox !important;\n    display: inline-flex !important;\n  }\n  .d-print-none {\n    display: none !important;\n  }\n}\n\nbody {\n  -webkit-font-smoothing: antialiased;\n}\n\n.badge.bg-light {\n  color: #373a3c;\n}\n\n.progress .progress-bar {\n  font-size: 8px;\n  line-height: 8px;\n}\n"
  },
  {
    "path": "src/sourceDev.WebApp/SharedThemes/cosmo/wwwroot/css/fontawesome-all.css",
    "content": "/*!\n * Font Awesome Free 5.0.8 by @fontawesome - https://fontawesome.com\n * License - https://fontawesome.com/license (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)\n */\n.fa,\n.fas,\n.far,\n.fal,\n.fab {\n  -moz-osx-font-smoothing: grayscale;\n  -webkit-font-smoothing: antialiased;\n  display: inline-block;\n  font-style: normal;\n  font-variant: normal;\n  text-rendering: auto;\n  line-height: 1; }\n\n.fa-lg {\n  font-size: 1.33333em;\n  line-height: 0.75em;\n  vertical-align: -.0667em; }\n\n.fa-xs {\n  font-size: .75em; }\n\n.fa-sm {\n  font-size: .875em; }\n\n.fa-1x {\n  font-size: 1em; }\n\n.fa-2x {\n  font-size: 2em; }\n\n.fa-3x {\n  font-size: 3em; }\n\n.fa-4x {\n  font-size: 4em; }\n\n.fa-5x {\n  font-size: 5em; }\n\n.fa-6x {\n  font-size: 6em; }\n\n.fa-7x {\n  font-size: 7em; }\n\n.fa-8x {\n  font-size: 8em; }\n\n.fa-9x {\n  font-size: 9em; }\n\n.fa-10x {\n  font-size: 10em; }\n\n.fa-fw {\n  text-align: center;\n  width: 1.25em; }\n\n.fa-ul {\n  list-style-type: none;\n  margin-left: 2.5em;\n  padding-left: 0; }\n  .fa-ul > li {\n    position: relative; }\n\n.fa-li {\n  left: -2em;\n  position: absolute;\n  text-align: center;\n  width: 2em;\n  line-height: inherit; }\n\n.fa-border {\n  border: solid 0.08em #eee;\n  border-radius: .1em;\n  padding: .2em .25em .15em; }\n\n.fa-pull-left {\n  float: left; }\n\n.fa-pull-right {\n  float: right; }\n\n.fa.fa-pull-left,\n.fas.fa-pull-left,\n.far.fa-pull-left,\n.fal.fa-pull-left,\n.fab.fa-pull-left {\n  margin-right: .3em; }\n\n.fa.fa-pull-right,\n.fas.fa-pull-right,\n.far.fa-pull-right,\n.fal.fa-pull-right,\n.fab.fa-pull-right {\n  margin-left: .3em; }\n\n.fa-spin {\n  -webkit-animation: fa-spin 2s infinite linear;\n          animation: fa-spin 2s infinite linear; }\n\n.fa-pulse {\n  -webkit-animation: fa-spin 1s infinite steps(8);\n          animation: fa-spin 1s infinite steps(8); }\n\n@-webkit-keyframes fa-spin {\n  0% {\n    -webkit-transform: rotate(0deg);\n            transform: rotate(0deg); }\n  100% {\n    -webkit-transform: rotate(360deg);\n            transform: rotate(360deg); } }\n\n@keyframes fa-spin {\n  0% {\n    -webkit-transform: rotate(0deg);\n            transform: rotate(0deg); }\n  100% {\n    -webkit-transform: rotate(360deg);\n            transform: rotate(360deg); } }\n\n.fa-rotate-90 {\n  -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)\";\n  -webkit-transform: rotate(90deg);\n          transform: rotate(90deg); }\n\n.fa-rotate-180 {\n  -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)\";\n  -webkit-transform: rotate(180deg);\n          transform: rotate(180deg); }\n\n.fa-rotate-270 {\n  -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)\";\n  -webkit-transform: rotate(270deg);\n          transform: rotate(270deg); }\n\n.fa-flip-horizontal {\n  -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)\";\n  -webkit-transform: scale(-1, 1);\n          transform: scale(-1, 1); }\n\n.fa-flip-vertical {\n  -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)\";\n  -webkit-transform: scale(1, -1);\n          transform: scale(1, -1); }\n\n.fa-flip-horizontal.fa-flip-vertical {\n  -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)\";\n  -webkit-transform: scale(-1, -1);\n          transform: scale(-1, -1); }\n\n:root .fa-rotate-90,\n:root .fa-rotate-180,\n:root .fa-rotate-270,\n:root .fa-flip-horizontal,\n:root .fa-flip-vertical {\n  -webkit-filter: none;\n          filter: none; }\n\n.fa-stack {\n  display: inline-block;\n  height: 2em;\n  line-height: 2em;\n  position: relative;\n  vertical-align: middle;\n  width: 2em; }\n\n.fa-stack-1x,\n.fa-stack-2x {\n  left: 0;\n  position: absolute;\n  text-align: center;\n  width: 100%; }\n\n.fa-stack-1x {\n  line-height: inherit; }\n\n.fa-stack-2x {\n  font-size: 2em; }\n\n.fa-inverse {\n  color: #fff; }\n\n/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen\nreaders do not read off random characters that represent icons */\n.fa-500px:before {\n  content: \"\\f26e\"; }\n\n.fa-accessible-icon:before {\n  content: \"\\f368\"; }\n\n.fa-accusoft:before {\n  content: \"\\f369\"; }\n\n.fa-address-book:before {\n  content: \"\\f2b9\"; }\n\n.fa-address-card:before {\n  content: \"\\f2bb\"; }\n\n.fa-adjust:before {\n  content: \"\\f042\"; }\n\n.fa-adn:before {\n  content: \"\\f170\"; }\n\n.fa-adversal:before {\n  content: \"\\f36a\"; }\n\n.fa-affiliatetheme:before {\n  content: \"\\f36b\"; }\n\n.fa-algolia:before {\n  content: \"\\f36c\"; }\n\n.fa-align-center:before {\n  content: \"\\f037\"; }\n\n.fa-align-justify:before {\n  content: \"\\f039\"; }\n\n.fa-align-left:before {\n  content: \"\\f036\"; }\n\n.fa-align-right:before {\n  content: \"\\f038\"; }\n\n.fa-amazon:before {\n  content: \"\\f270\"; }\n\n.fa-amazon-pay:before {\n  content: \"\\f42c\"; }\n\n.fa-ambulance:before {\n  content: \"\\f0f9\"; }\n\n.fa-american-sign-language-interpreting:before {\n  content: \"\\f2a3\"; }\n\n.fa-amilia:before {\n  content: \"\\f36d\"; }\n\n.fa-anchor:before {\n  content: \"\\f13d\"; }\n\n.fa-android:before {\n  content: \"\\f17b\"; }\n\n.fa-angellist:before {\n  content: \"\\f209\"; }\n\n.fa-angle-double-down:before {\n  content: \"\\f103\"; }\n\n.fa-angle-double-left:before {\n  content: \"\\f100\"; }\n\n.fa-angle-double-right:before {\n  content: \"\\f101\"; }\n\n.fa-angle-double-up:before {\n  content: \"\\f102\"; }\n\n.fa-angle-down:before {\n  content: \"\\f107\"; }\n\n.fa-angle-left:before {\n  content: \"\\f104\"; }\n\n.fa-angle-right:before {\n  content: \"\\f105\"; }\n\n.fa-angle-up:before {\n  content: \"\\f106\"; }\n\n.fa-angrycreative:before {\n  content: \"\\f36e\"; }\n\n.fa-angular:before {\n  content: \"\\f420\"; }\n\n.fa-app-store:before {\n  content: \"\\f36f\"; }\n\n.fa-app-store-ios:before {\n  content: \"\\f370\"; }\n\n.fa-apper:before {\n  content: \"\\f371\"; }\n\n.fa-apple:before {\n  content: \"\\f179\"; }\n\n.fa-apple-pay:before {\n  content: \"\\f415\"; }\n\n.fa-archive:before {\n  content: \"\\f187\"; }\n\n.fa-arrow-alt-circle-down:before {\n  content: \"\\f358\"; }\n\n.fa-arrow-alt-circle-left:before {\n  content: \"\\f359\"; }\n\n.fa-arrow-alt-circle-right:before {\n  content: \"\\f35a\"; }\n\n.fa-arrow-alt-circle-up:before {\n  content: \"\\f35b\"; }\n\n.fa-arrow-circle-down:before {\n  content: \"\\f0ab\"; }\n\n.fa-arrow-circle-left:before {\n  content: \"\\f0a8\"; }\n\n.fa-arrow-circle-right:before {\n  content: \"\\f0a9\"; }\n\n.fa-arrow-circle-up:before {\n  content: \"\\f0aa\"; }\n\n.fa-arrow-down:before {\n  content: \"\\f063\"; }\n\n.fa-arrow-left:before {\n  content: \"\\f060\"; }\n\n.fa-arrow-right:before {\n  content: \"\\f061\"; }\n\n.fa-arrow-up:before {\n  content: \"\\f062\"; }\n\n.fa-arrows-alt:before {\n  content: \"\\f0b2\"; }\n\n.fa-arrows-alt-h:before {\n  content: \"\\f337\"; }\n\n.fa-arrows-alt-v:before {\n  content: \"\\f338\"; }\n\n.fa-assistive-listening-systems:before {\n  content: \"\\f2a2\"; }\n\n.fa-asterisk:before {\n  content: \"\\f069\"; }\n\n.fa-asymmetrik:before {\n  content: \"\\f372\"; }\n\n.fa-at:before {\n  content: \"\\f1fa\"; }\n\n.fa-audible:before {\n  content: \"\\f373\"; }\n\n.fa-audio-description:before {\n  content: \"\\f29e\"; }\n\n.fa-autoprefixer:before {\n  content: \"\\f41c\"; }\n\n.fa-avianex:before {\n  content: \"\\f374\"; }\n\n.fa-aviato:before {\n  content: \"\\f421\"; }\n\n.fa-aws:before {\n  content: \"\\f375\"; }\n\n.fa-backward:before {\n  content: \"\\f04a\"; }\n\n.fa-balance-scale:before {\n  content: \"\\f24e\"; }\n\n.fa-ban:before {\n  content: \"\\f05e\"; }\n\n.fa-band-aid:before {\n  content: \"\\f462\"; }\n\n.fa-bandcamp:before {\n  content: \"\\f2d5\"; }\n\n.fa-barcode:before {\n  content: \"\\f02a\"; }\n\n.fa-bars:before {\n  content: \"\\f0c9\"; }\n\n.fa-baseball-ball:before {\n  content: \"\\f433\"; }\n\n.fa-basketball-ball:before {\n  content: \"\\f434\"; }\n\n.fa-bath:before {\n  content: \"\\f2cd\"; }\n\n.fa-battery-empty:before {\n  content: \"\\f244\"; }\n\n.fa-battery-full:before {\n  content: \"\\f240\"; }\n\n.fa-battery-half:before {\n  content: \"\\f242\"; }\n\n.fa-battery-quarter:before {\n  content: \"\\f243\"; }\n\n.fa-battery-three-quarters:before {\n  content: \"\\f241\"; }\n\n.fa-bed:before {\n  content: \"\\f236\"; }\n\n.fa-beer:before {\n  content: \"\\f0fc\"; }\n\n.fa-behance:before {\n  content: \"\\f1b4\"; }\n\n.fa-behance-square:before {\n  content: \"\\f1b5\"; }\n\n.fa-bell:before {\n  content: \"\\f0f3\"; }\n\n.fa-bell-slash:before {\n  content: \"\\f1f6\"; }\n\n.fa-bicycle:before {\n  content: \"\\f206\"; }\n\n.fa-bimobject:before {\n  content: \"\\f378\"; }\n\n.fa-binoculars:before {\n  content: \"\\f1e5\"; }\n\n.fa-birthday-cake:before {\n  content: \"\\f1fd\"; }\n\n.fa-bitbucket:before {\n  content: \"\\f171\"; }\n\n.fa-bitcoin:before {\n  content: \"\\f379\"; }\n\n.fa-bity:before {\n  content: \"\\f37a\"; }\n\n.fa-black-tie:before {\n  content: \"\\f27e\"; }\n\n.fa-blackberry:before {\n  content: \"\\f37b\"; }\n\n.fa-blind:before {\n  content: \"\\f29d\"; }\n\n.fa-blogger:before {\n  content: \"\\f37c\"; }\n\n.fa-blogger-b:before {\n  content: \"\\f37d\"; }\n\n.fa-bluetooth:before {\n  content: \"\\f293\"; }\n\n.fa-bluetooth-b:before {\n  content: \"\\f294\"; }\n\n.fa-bold:before {\n  content: \"\\f032\"; }\n\n.fa-bolt:before {\n  content: \"\\f0e7\"; }\n\n.fa-bomb:before {\n  content: \"\\f1e2\"; }\n\n.fa-book:before {\n  content: \"\\f02d\"; }\n\n.fa-bookmark:before {\n  content: \"\\f02e\"; }\n\n.fa-bowling-ball:before {\n  content: \"\\f436\"; }\n\n.fa-box:before {\n  content: \"\\f466\"; }\n\n.fa-boxes:before {\n  content: \"\\f468\"; }\n\n.fa-braille:before {\n  content: \"\\f2a1\"; }\n\n.fa-briefcase:before {\n  content: \"\\f0b1\"; }\n\n.fa-btc:before {\n  content: \"\\f15a\"; }\n\n.fa-bug:before {\n  content: \"\\f188\"; }\n\n.fa-building:before {\n  content: \"\\f1ad\"; }\n\n.fa-bullhorn:before {\n  content: \"\\f0a1\"; }\n\n.fa-bullseye:before {\n  content: \"\\f140\"; }\n\n.fa-buromobelexperte:before {\n  content: \"\\f37f\"; }\n\n.fa-bus:before {\n  content: \"\\f207\"; }\n\n.fa-buysellads:before {\n  content: \"\\f20d\"; }\n\n.fa-calculator:before {\n  content: \"\\f1ec\"; }\n\n.fa-calendar:before {\n  content: \"\\f133\"; }\n\n.fa-calendar-alt:before {\n  content: \"\\f073\"; }\n\n.fa-calendar-check:before {\n  content: \"\\f274\"; }\n\n.fa-calendar-minus:before {\n  content: \"\\f272\"; }\n\n.fa-calendar-plus:before {\n  content: \"\\f271\"; }\n\n.fa-calendar-times:before {\n  content: \"\\f273\"; }\n\n.fa-camera:before {\n  content: \"\\f030\"; }\n\n.fa-camera-retro:before {\n  content: \"\\f083\"; }\n\n.fa-car:before {\n  content: \"\\f1b9\"; }\n\n.fa-caret-down:before {\n  content: \"\\f0d7\"; }\n\n.fa-caret-left:before {\n  content: \"\\f0d9\"; }\n\n.fa-caret-right:before {\n  content: \"\\f0da\"; }\n\n.fa-caret-square-down:before {\n  content: \"\\f150\"; }\n\n.fa-caret-square-left:before {\n  content: \"\\f191\"; }\n\n.fa-caret-square-right:before {\n  content: \"\\f152\"; }\n\n.fa-caret-square-up:before {\n  content: \"\\f151\"; }\n\n.fa-caret-up:before {\n  content: \"\\f0d8\"; }\n\n.fa-cart-arrow-down:before {\n  content: \"\\f218\"; }\n\n.fa-cart-plus:before {\n  content: \"\\f217\"; }\n\n.fa-cc-amazon-pay:before {\n  content: \"\\f42d\"; }\n\n.fa-cc-amex:before {\n  content: \"\\f1f3\"; }\n\n.fa-cc-apple-pay:before {\n  content: \"\\f416\"; }\n\n.fa-cc-diners-club:before {\n  content: \"\\f24c\"; }\n\n.fa-cc-discover:before {\n  content: \"\\f1f2\"; }\n\n.fa-cc-jcb:before {\n  content: \"\\f24b\"; }\n\n.fa-cc-mastercard:before {\n  content: \"\\f1f1\"; }\n\n.fa-cc-paypal:before {\n  content: \"\\f1f4\"; }\n\n.fa-cc-stripe:before {\n  content: \"\\f1f5\"; }\n\n.fa-cc-visa:before {\n  content: \"\\f1f0\"; }\n\n.fa-centercode:before {\n  content: \"\\f380\"; }\n\n.fa-certificate:before {\n  content: \"\\f0a3\"; }\n\n.fa-chart-area:before {\n  content: \"\\f1fe\"; }\n\n.fa-chart-bar:before {\n  content: \"\\f080\"; }\n\n.fa-chart-line:before {\n  content: \"\\f201\"; }\n\n.fa-chart-pie:before {\n  content: \"\\f200\"; }\n\n.fa-check:before {\n  content: \"\\f00c\"; }\n\n.fa-check-circle:before {\n  content: \"\\f058\"; }\n\n.fa-check-square:before {\n  content: \"\\f14a\"; }\n\n.fa-chess:before {\n  content: \"\\f439\"; }\n\n.fa-chess-bishop:before {\n  content: \"\\f43a\"; }\n\n.fa-chess-board:before {\n  content: \"\\f43c\"; }\n\n.fa-chess-king:before {\n  content: \"\\f43f\"; }\n\n.fa-chess-knight:before {\n  content: \"\\f441\"; }\n\n.fa-chess-pawn:before {\n  content: \"\\f443\"; }\n\n.fa-chess-queen:before {\n  content: \"\\f445\"; }\n\n.fa-chess-rook:before {\n  content: \"\\f447\"; }\n\n.fa-chevron-circle-down:before {\n  content: \"\\f13a\"; }\n\n.fa-chevron-circle-left:before {\n  content: \"\\f137\"; }\n\n.fa-chevron-circle-right:before {\n  content: \"\\f138\"; }\n\n.fa-chevron-circle-up:before {\n  content: \"\\f139\"; }\n\n.fa-chevron-down:before {\n  content: \"\\f078\"; }\n\n.fa-chevron-left:before {\n  content: \"\\f053\"; }\n\n.fa-chevron-right:before {\n  content: \"\\f054\"; }\n\n.fa-chevron-up:before {\n  content: \"\\f077\"; }\n\n.fa-child:before {\n  content: \"\\f1ae\"; }\n\n.fa-chrome:before {\n  content: \"\\f268\"; }\n\n.fa-circle:before {\n  content: \"\\f111\"; }\n\n.fa-circle-notch:before {\n  content: \"\\f1ce\"; }\n\n.fa-clipboard:before {\n  content: \"\\f328\"; }\n\n.fa-clipboard-check:before {\n  content: \"\\f46c\"; }\n\n.fa-clipboard-list:before {\n  content: \"\\f46d\"; }\n\n.fa-clock:before {\n  content: \"\\f017\"; }\n\n.fa-clone:before {\n  content: \"\\f24d\"; }\n\n.fa-closed-captioning:before {\n  content: \"\\f20a\"; }\n\n.fa-cloud:before {\n  content: \"\\f0c2\"; }\n\n.fa-cloud-download-alt:before {\n  content: \"\\f381\"; }\n\n.fa-cloud-upload-alt:before {\n  content: \"\\f382\"; }\n\n.fa-cloudscale:before {\n  content: \"\\f383\"; }\n\n.fa-cloudsmith:before {\n  content: \"\\f384\"; }\n\n.fa-cloudversify:before {\n  content: \"\\f385\"; }\n\n.fa-code:before {\n  content: \"\\f121\"; }\n\n.fa-code-branch:before {\n  content: \"\\f126\"; }\n\n.fa-codepen:before {\n  content: \"\\f1cb\"; }\n\n.fa-codiepie:before {\n  content: \"\\f284\"; }\n\n.fa-coffee:before {\n  content: \"\\f0f4\"; }\n\n.fa-cog:before {\n  content: \"\\f013\"; }\n\n.fa-cogs:before {\n  content: \"\\f085\"; }\n\n.fa-columns:before {\n  content: \"\\f0db\"; }\n\n.fa-comment:before {\n  content: \"\\f075\"; }\n\n.fa-comment-alt:before {\n  content: \"\\f27a\"; }\n\n.fa-comments:before {\n  content: \"\\f086\"; }\n\n.fa-compass:before {\n  content: \"\\f14e\"; }\n\n.fa-compress:before {\n  content: \"\\f066\"; }\n\n.fa-connectdevelop:before {\n  content: \"\\f20e\"; }\n\n.fa-contao:before {\n  content: \"\\f26d\"; }\n\n.fa-copy:before {\n  content: \"\\f0c5\"; }\n\n.fa-copyright:before {\n  content: \"\\f1f9\"; }\n\n.fa-cpanel:before {\n  content: \"\\f388\"; }\n\n.fa-creative-commons:before {\n  content: \"\\f25e\"; }\n\n.fa-credit-card:before {\n  content: \"\\f09d\"; }\n\n.fa-crop:before {\n  content: \"\\f125\"; }\n\n.fa-crosshairs:before {\n  content: \"\\f05b\"; }\n\n.fa-css3:before {\n  content: \"\\f13c\"; }\n\n.fa-css3-alt:before {\n  content: \"\\f38b\"; }\n\n.fa-cube:before {\n  content: \"\\f1b2\"; }\n\n.fa-cubes:before {\n  content: \"\\f1b3\"; }\n\n.fa-cut:before {\n  content: \"\\f0c4\"; }\n\n.fa-cuttlefish:before {\n  content: \"\\f38c\"; }\n\n.fa-d-and-d:before {\n  content: \"\\f38d\"; }\n\n.fa-dashcube:before {\n  content: \"\\f210\"; }\n\n.fa-database:before {\n  content: \"\\f1c0\"; }\n\n.fa-deaf:before {\n  content: \"\\f2a4\"; }\n\n.fa-delicious:before {\n  content: \"\\f1a5\"; }\n\n.fa-deploydog:before {\n  content: \"\\f38e\"; }\n\n.fa-deskpro:before {\n  content: \"\\f38f\"; }\n\n.fa-desktop:before {\n  content: \"\\f108\"; }\n\n.fa-deviantart:before {\n  content: \"\\f1bd\"; }\n\n.fa-digg:before {\n  content: \"\\f1a6\"; }\n\n.fa-digital-ocean:before {\n  content: \"\\f391\"; }\n\n.fa-discord:before {\n  content: \"\\f392\"; }\n\n.fa-discourse:before {\n  content: \"\\f393\"; }\n\n.fa-dna:before {\n  content: \"\\f471\"; }\n\n.fa-dochub:before {\n  content: \"\\f394\"; }\n\n.fa-docker:before {\n  content: \"\\f395\"; }\n\n.fa-dollar-sign:before {\n  content: \"\\f155\"; }\n\n.fa-dolly:before {\n  content: \"\\f472\"; }\n\n.fa-dolly-flatbed:before {\n  content: \"\\f474\"; }\n\n.fa-dot-circle:before {\n  content: \"\\f192\"; }\n\n.fa-download:before {\n  content: \"\\f019\"; }\n\n.fa-draft2digital:before {\n  content: \"\\f396\"; }\n\n.fa-dribbble:before {\n  content: \"\\f17d\"; }\n\n.fa-dribbble-square:before {\n  content: \"\\f397\"; }\n\n.fa-dropbox:before {\n  content: \"\\f16b\"; }\n\n.fa-drupal:before {\n  content: \"\\f1a9\"; }\n\n.fa-dyalog:before {\n  content: \"\\f399\"; }\n\n.fa-earlybirds:before {\n  content: \"\\f39a\"; }\n\n.fa-edge:before {\n  content: \"\\f282\"; }\n\n.fa-edit:before {\n  content: \"\\f044\"; }\n\n.fa-eject:before {\n  content: \"\\f052\"; }\n\n.fa-elementor:before {\n  content: \"\\f430\"; }\n\n.fa-ellipsis-h:before {\n  content: \"\\f141\"; }\n\n.fa-ellipsis-v:before {\n  content: \"\\f142\"; }\n\n.fa-ember:before {\n  content: \"\\f423\"; }\n\n.fa-empire:before {\n  content: \"\\f1d1\"; }\n\n.fa-envelope:before {\n  content: \"\\f0e0\"; }\n\n.fa-envelope-open:before {\n  content: \"\\f2b6\"; }\n\n.fa-envelope-square:before {\n  content: \"\\f199\"; }\n\n.fa-envira:before {\n  content: \"\\f299\"; }\n\n.fa-eraser:before {\n  content: \"\\f12d\"; }\n\n.fa-erlang:before {\n  content: \"\\f39d\"; }\n\n.fa-ethereum:before {\n  content: \"\\f42e\"; }\n\n.fa-etsy:before {\n  content: \"\\f2d7\"; }\n\n.fa-euro-sign:before {\n  content: \"\\f153\"; }\n\n.fa-exchange-alt:before {\n  content: \"\\f362\"; }\n\n.fa-exclamation:before {\n  content: \"\\f12a\"; }\n\n.fa-exclamation-circle:before {\n  content: \"\\f06a\"; }\n\n.fa-exclamation-triangle:before {\n  content: \"\\f071\"; }\n\n.fa-expand:before {\n  content: \"\\f065\"; }\n\n.fa-expand-arrows-alt:before {\n  content: \"\\f31e\"; }\n\n.fa-expeditedssl:before {\n  content: \"\\f23e\"; }\n\n.fa-external-link-alt:before {\n  content: \"\\f35d\"; }\n\n.fa-external-link-square-alt:before {\n  content: \"\\f360\"; }\n\n.fa-eye:before {\n  content: \"\\f06e\"; }\n\n.fa-eye-dropper:before {\n  content: \"\\f1fb\"; }\n\n.fa-eye-slash:before {\n  content: \"\\f070\"; }\n\n.fa-facebook:before {\n  content: \"\\f09a\"; }\n\n.fa-facebook-f:before {\n  content: \"\\f39e\"; }\n\n.fa-facebook-messenger:before {\n  content: \"\\f39f\"; }\n\n.fa-facebook-square:before {\n  content: \"\\f082\"; }\n\n.fa-fast-backward:before {\n  content: \"\\f049\"; }\n\n.fa-fast-forward:before {\n  content: \"\\f050\"; }\n\n.fa-fax:before {\n  content: \"\\f1ac\"; }\n\n.fa-female:before {\n  content: \"\\f182\"; }\n\n.fa-fighter-jet:before {\n  content: \"\\f0fb\"; }\n\n.fa-file:before {\n  content: \"\\f15b\"; }\n\n.fa-file-alt:before {\n  content: \"\\f15c\"; }\n\n.fa-file-archive:before {\n  content: \"\\f1c6\"; }\n\n.fa-file-audio:before {\n  content: \"\\f1c7\"; }\n\n.fa-file-code:before {\n  content: \"\\f1c9\"; }\n\n.fa-file-excel:before {\n  content: \"\\f1c3\"; }\n\n.fa-file-image:before {\n  content: \"\\f1c5\"; }\n\n.fa-file-pdf:before {\n  content: \"\\f1c1\"; }\n\n.fa-file-powerpoint:before {\n  content: \"\\f1c4\"; }\n\n.fa-file-video:before {\n  content: \"\\f1c8\"; }\n\n.fa-file-word:before {\n  content: \"\\f1c2\"; }\n\n.fa-film:before {\n  content: \"\\f008\"; }\n\n.fa-filter:before {\n  content: \"\\f0b0\"; }\n\n.fa-fire:before {\n  content: \"\\f06d\"; }\n\n.fa-fire-extinguisher:before {\n  content: \"\\f134\"; }\n\n.fa-firefox:before {\n  content: \"\\f269\"; }\n\n.fa-first-aid:before {\n  content: \"\\f479\"; }\n\n.fa-first-order:before {\n  content: \"\\f2b0\"; }\n\n.fa-firstdraft:before {\n  content: \"\\f3a1\"; }\n\n.fa-flag:before {\n  content: \"\\f024\"; }\n\n.fa-flag-checkered:before {\n  content: \"\\f11e\"; }\n\n.fa-flask:before {\n  content: \"\\f0c3\"; }\n\n.fa-flickr:before {\n  content: \"\\f16e\"; }\n\n.fa-flipboard:before {\n  content: \"\\f44d\"; }\n\n.fa-fly:before {\n  content: \"\\f417\"; }\n\n.fa-folder:before {\n  content: \"\\f07b\"; }\n\n.fa-folder-open:before {\n  content: \"\\f07c\"; }\n\n.fa-font:before {\n  content: \"\\f031\"; }\n\n.fa-font-awesome:before {\n  content: \"\\f2b4\"; }\n\n.fa-font-awesome-alt:before {\n  content: \"\\f35c\"; }\n\n.fa-font-awesome-flag:before {\n  content: \"\\f425\"; }\n\n.fa-fonticons:before {\n  content: \"\\f280\"; }\n\n.fa-fonticons-fi:before {\n  content: \"\\f3a2\"; }\n\n.fa-football-ball:before {\n  content: \"\\f44e\"; }\n\n.fa-fort-awesome:before {\n  content: \"\\f286\"; }\n\n.fa-fort-awesome-alt:before {\n  content: \"\\f3a3\"; }\n\n.fa-forumbee:before {\n  content: \"\\f211\"; }\n\n.fa-forward:before {\n  content: \"\\f04e\"; }\n\n.fa-foursquare:before {\n  content: \"\\f180\"; }\n\n.fa-free-code-camp:before {\n  content: \"\\f2c5\"; }\n\n.fa-freebsd:before {\n  content: \"\\f3a4\"; }\n\n.fa-frown:before {\n  content: \"\\f119\"; }\n\n.fa-futbol:before {\n  content: \"\\f1e3\"; }\n\n.fa-gamepad:before {\n  content: \"\\f11b\"; }\n\n.fa-gavel:before {\n  content: \"\\f0e3\"; }\n\n.fa-gem:before {\n  content: \"\\f3a5\"; }\n\n.fa-genderless:before {\n  content: \"\\f22d\"; }\n\n.fa-get-pocket:before {\n  content: \"\\f265\"; }\n\n.fa-gg:before {\n  content: \"\\f260\"; }\n\n.fa-gg-circle:before {\n  content: \"\\f261\"; }\n\n.fa-gift:before {\n  content: \"\\f06b\"; }\n\n.fa-git:before {\n  content: \"\\f1d3\"; }\n\n.fa-git-square:before {\n  content: \"\\f1d2\"; }\n\n.fa-github:before {\n  content: \"\\f09b\"; }\n\n.fa-github-alt:before {\n  content: \"\\f113\"; }\n\n.fa-github-square:before {\n  content: \"\\f092\"; }\n\n.fa-gitkraken:before {\n  content: \"\\f3a6\"; }\n\n.fa-gitlab:before {\n  content: \"\\f296\"; }\n\n.fa-gitter:before {\n  content: \"\\f426\"; }\n\n.fa-glass-martini:before {\n  content: \"\\f000\"; }\n\n.fa-glide:before {\n  content: \"\\f2a5\"; }\n\n.fa-glide-g:before {\n  content: \"\\f2a6\"; }\n\n.fa-globe:before {\n  content: \"\\f0ac\"; }\n\n.fa-gofore:before {\n  content: \"\\f3a7\"; }\n\n.fa-golf-ball:before {\n  content: \"\\f450\"; }\n\n.fa-goodreads:before {\n  content: \"\\f3a8\"; }\n\n.fa-goodreads-g:before {\n  content: \"\\f3a9\"; }\n\n.fa-google:before {\n  content: \"\\f1a0\"; }\n\n.fa-google-drive:before {\n  content: \"\\f3aa\"; }\n\n.fa-google-play:before {\n  content: \"\\f3ab\"; }\n\n.fa-google-plus:before {\n  content: \"\\f2b3\"; }\n\n.fa-google-plus-g:before {\n  content: \"\\f0d5\"; }\n\n.fa-google-plus-square:before {\n  content: \"\\f0d4\"; }\n\n.fa-google-wallet:before {\n  content: \"\\f1ee\"; }\n\n.fa-graduation-cap:before {\n  content: \"\\f19d\"; }\n\n.fa-gratipay:before {\n  content: \"\\f184\"; }\n\n.fa-grav:before {\n  content: \"\\f2d6\"; }\n\n.fa-gripfire:before {\n  content: \"\\f3ac\"; }\n\n.fa-grunt:before {\n  content: \"\\f3ad\"; }\n\n.fa-gulp:before {\n  content: \"\\f3ae\"; }\n\n.fa-h-square:before {\n  content: \"\\f0fd\"; }\n\n.fa-hacker-news:before {\n  content: \"\\f1d4\"; }\n\n.fa-hacker-news-square:before {\n  content: \"\\f3af\"; }\n\n.fa-hand-lizard:before {\n  content: \"\\f258\"; }\n\n.fa-hand-paper:before {\n  content: \"\\f256\"; }\n\n.fa-hand-peace:before {\n  content: \"\\f25b\"; }\n\n.fa-hand-point-down:before {\n  content: \"\\f0a7\"; }\n\n.fa-hand-point-left:before {\n  content: \"\\f0a5\"; }\n\n.fa-hand-point-right:before {\n  content: \"\\f0a4\"; }\n\n.fa-hand-point-up:before {\n  content: \"\\f0a6\"; }\n\n.fa-hand-pointer:before {\n  content: \"\\f25a\"; }\n\n.fa-hand-rock:before {\n  content: \"\\f255\"; }\n\n.fa-hand-scissors:before {\n  content: \"\\f257\"; }\n\n.fa-hand-spock:before {\n  content: \"\\f259\"; }\n\n.fa-handshake:before {\n  content: \"\\f2b5\"; }\n\n.fa-hashtag:before {\n  content: \"\\f292\"; }\n\n.fa-hdd:before {\n  content: \"\\f0a0\"; }\n\n.fa-heading:before {\n  content: \"\\f1dc\"; }\n\n.fa-headphones:before {\n  content: \"\\f025\"; }\n\n.fa-heart:before {\n  content: \"\\f004\"; }\n\n.fa-heartbeat:before {\n  content: \"\\f21e\"; }\n\n.fa-hips:before {\n  content: \"\\f452\"; }\n\n.fa-hire-a-helper:before {\n  content: \"\\f3b0\"; }\n\n.fa-history:before {\n  content: \"\\f1da\"; }\n\n.fa-hockey-puck:before {\n  content: \"\\f453\"; }\n\n.fa-home:before {\n  content: \"\\f015\"; }\n\n.fa-hooli:before {\n  content: \"\\f427\"; }\n\n.fa-hospital:before {\n  content: \"\\f0f8\"; }\n\n.fa-hospital-symbol:before {\n  content: \"\\f47e\"; }\n\n.fa-hotjar:before {\n  content: \"\\f3b1\"; }\n\n.fa-hourglass:before {\n  content: \"\\f254\"; }\n\n.fa-hourglass-end:before {\n  content: \"\\f253\"; }\n\n.fa-hourglass-half:before {\n  content: \"\\f252\"; }\n\n.fa-hourglass-start:before {\n  content: \"\\f251\"; }\n\n.fa-houzz:before {\n  content: \"\\f27c\"; }\n\n.fa-html5:before {\n  content: \"\\f13b\"; }\n\n.fa-hubspot:before {\n  content: \"\\f3b2\"; }\n\n.fa-i-cursor:before {\n  content: \"\\f246\"; }\n\n.fa-id-badge:before {\n  content: \"\\f2c1\"; }\n\n.fa-id-card:before {\n  content: \"\\f2c2\"; }\n\n.fa-image:before {\n  content: \"\\f03e\"; }\n\n.fa-images:before {\n  content: \"\\f302\"; }\n\n.fa-imdb:before {\n  content: \"\\f2d8\"; }\n\n.fa-inbox:before {\n  content: \"\\f01c\"; }\n\n.fa-indent:before {\n  content: \"\\f03c\"; }\n\n.fa-industry:before {\n  content: \"\\f275\"; }\n\n.fa-info:before {\n  content: \"\\f129\"; }\n\n.fa-info-circle:before {\n  content: \"\\f05a\"; }\n\n.fa-instagram:before {\n  content: \"\\f16d\"; }\n\n.fa-internet-explorer:before {\n  content: \"\\f26b\"; }\n\n.fa-ioxhost:before {\n  content: \"\\f208\"; }\n\n.fa-italic:before {\n  content: \"\\f033\"; }\n\n.fa-itunes:before {\n  content: \"\\f3b4\"; }\n\n.fa-itunes-note:before {\n  content: \"\\f3b5\"; }\n\n.fa-jenkins:before {\n  content: \"\\f3b6\"; }\n\n.fa-joget:before {\n  content: \"\\f3b7\"; }\n\n.fa-joomla:before {\n  content: \"\\f1aa\"; }\n\n.fa-js:before {\n  content: \"\\f3b8\"; }\n\n.fa-js-square:before {\n  content: \"\\f3b9\"; }\n\n.fa-jsfiddle:before {\n  content: \"\\f1cc\"; }\n\n.fa-key:before {\n  content: \"\\f084\"; }\n\n.fa-keyboard:before {\n  content: \"\\f11c\"; }\n\n.fa-keycdn:before {\n  content: \"\\f3ba\"; }\n\n.fa-kickstarter:before {\n  content: \"\\f3bb\"; }\n\n.fa-kickstarter-k:before {\n  content: \"\\f3bc\"; }\n\n.fa-korvue:before {\n  content: \"\\f42f\"; }\n\n.fa-language:before {\n  content: \"\\f1ab\"; }\n\n.fa-laptop:before {\n  content: \"\\f109\"; }\n\n.fa-laravel:before {\n  content: \"\\f3bd\"; }\n\n.fa-lastfm:before {\n  content: \"\\f202\"; }\n\n.fa-lastfm-square:before {\n  content: \"\\f203\"; }\n\n.fa-leaf:before {\n  content: \"\\f06c\"; }\n\n.fa-leanpub:before {\n  content: \"\\f212\"; }\n\n.fa-lemon:before {\n  content: \"\\f094\"; }\n\n.fa-less:before {\n  content: \"\\f41d\"; }\n\n.fa-level-down-alt:before {\n  content: \"\\f3be\"; }\n\n.fa-level-up-alt:before {\n  content: \"\\f3bf\"; }\n\n.fa-life-ring:before {\n  content: \"\\f1cd\"; }\n\n.fa-lightbulb:before {\n  content: \"\\f0eb\"; }\n\n.fa-line:before {\n  content: \"\\f3c0\"; }\n\n.fa-link:before {\n  content: \"\\f0c1\"; }\n\n.fa-linkedin:before {\n  content: \"\\f08c\"; }\n\n.fa-linkedin-in:before {\n  content: \"\\f0e1\"; }\n\n.fa-linode:before {\n  content: \"\\f2b8\"; }\n\n.fa-linux:before {\n  content: \"\\f17c\"; }\n\n.fa-lira-sign:before {\n  content: \"\\f195\"; }\n\n.fa-list:before {\n  content: \"\\f03a\"; }\n\n.fa-list-alt:before {\n  content: \"\\f022\"; }\n\n.fa-list-ol:before {\n  content: \"\\f0cb\"; }\n\n.fa-list-ul:before {\n  content: \"\\f0ca\"; }\n\n.fa-location-arrow:before {\n  content: \"\\f124\"; }\n\n.fa-lock:before {\n  content: \"\\f023\"; }\n\n.fa-lock-open:before {\n  content: \"\\f3c1\"; }\n\n.fa-long-arrow-alt-down:before {\n  content: \"\\f309\"; }\n\n.fa-long-arrow-alt-left:before {\n  content: \"\\f30a\"; }\n\n.fa-long-arrow-alt-right:before {\n  content: \"\\f30b\"; }\n\n.fa-long-arrow-alt-up:before {\n  content: \"\\f30c\"; }\n\n.fa-low-vision:before {\n  content: \"\\f2a8\"; }\n\n.fa-lyft:before {\n  content: \"\\f3c3\"; }\n\n.fa-magento:before {\n  content: \"\\f3c4\"; }\n\n.fa-magic:before {\n  content: \"\\f0d0\"; }\n\n.fa-magnet:before {\n  content: \"\\f076\"; }\n\n.fa-male:before {\n  content: \"\\f183\"; }\n\n.fa-map:before {\n  content: \"\\f279\"; }\n\n.fa-map-marker:before {\n  content: \"\\f041\"; }\n\n.fa-map-marker-alt:before {\n  content: \"\\f3c5\"; }\n\n.fa-map-pin:before {\n  content: \"\\f276\"; }\n\n.fa-map-signs:before {\n  content: \"\\f277\"; }\n\n.fa-mars:before {\n  content: \"\\f222\"; }\n\n.fa-mars-double:before {\n  content: \"\\f227\"; }\n\n.fa-mars-stroke:before {\n  content: \"\\f229\"; }\n\n.fa-mars-stroke-h:before {\n  content: \"\\f22b\"; }\n\n.fa-mars-stroke-v:before {\n  content: \"\\f22a\"; }\n\n.fa-maxcdn:before {\n  content: \"\\f136\"; }\n\n.fa-medapps:before {\n  content: \"\\f3c6\"; }\n\n.fa-medium:before {\n  content: \"\\f23a\"; }\n\n.fa-medium-m:before {\n  content: \"\\f3c7\"; }\n\n.fa-medkit:before {\n  content: \"\\f0fa\"; }\n\n.fa-medrt:before {\n  content: \"\\f3c8\"; }\n\n.fa-meetup:before {\n  content: \"\\f2e0\"; }\n\n.fa-meh:before {\n  content: \"\\f11a\"; }\n\n.fa-mercury:before {\n  content: \"\\f223\"; }\n\n.fa-microchip:before {\n  content: \"\\f2db\"; }\n\n.fa-microphone:before {\n  content: \"\\f130\"; }\n\n.fa-microphone-slash:before {\n  content: \"\\f131\"; }\n\n.fa-microsoft:before {\n  content: \"\\f3ca\"; }\n\n.fa-minus:before {\n  content: \"\\f068\"; }\n\n.fa-minus-circle:before {\n  content: \"\\f056\"; }\n\n.fa-minus-square:before {\n  content: \"\\f146\"; }\n\n.fa-mix:before {\n  content: \"\\f3cb\"; }\n\n.fa-mixcloud:before {\n  content: \"\\f289\"; }\n\n.fa-mizuni:before {\n  content: \"\\f3cc\"; }\n\n.fa-mobile:before {\n  content: \"\\f10b\"; }\n\n.fa-mobile-alt:before {\n  content: \"\\f3cd\"; }\n\n.fa-modx:before {\n  content: \"\\f285\"; }\n\n.fa-monero:before {\n  content: \"\\f3d0\"; }\n\n.fa-money-bill-alt:before {\n  content: \"\\f3d1\"; }\n\n.fa-moon:before {\n  content: \"\\f186\"; }\n\n.fa-motorcycle:before {\n  content: \"\\f21c\"; }\n\n.fa-mouse-pointer:before {\n  content: \"\\f245\"; }\n\n.fa-music:before {\n  content: \"\\f001\"; }\n\n.fa-napster:before {\n  content: \"\\f3d2\"; }\n\n.fa-neuter:before {\n  content: \"\\f22c\"; }\n\n.fa-newspaper:before {\n  content: \"\\f1ea\"; }\n\n.fa-nintendo-switch:before {\n  content: \"\\f418\"; }\n\n.fa-node:before {\n  content: \"\\f419\"; }\n\n.fa-node-js:before {\n  content: \"\\f3d3\"; }\n\n.fa-npm:before {\n  content: \"\\f3d4\"; }\n\n.fa-ns8:before {\n  content: \"\\f3d5\"; }\n\n.fa-nutritionix:before {\n  content: \"\\f3d6\"; }\n\n.fa-object-group:before {\n  content: \"\\f247\"; }\n\n.fa-object-ungroup:before {\n  content: \"\\f248\"; }\n\n.fa-odnoklassniki:before {\n  content: \"\\f263\"; }\n\n.fa-odnoklassniki-square:before {\n  content: \"\\f264\"; }\n\n.fa-opencart:before {\n  content: \"\\f23d\"; }\n\n.fa-openid:before {\n  content: \"\\f19b\"; }\n\n.fa-opera:before {\n  content: \"\\f26a\"; }\n\n.fa-optin-monster:before {\n  content: \"\\f23c\"; }\n\n.fa-osi:before {\n  content: \"\\f41a\"; }\n\n.fa-outdent:before {\n  content: \"\\f03b\"; }\n\n.fa-page4:before {\n  content: \"\\f3d7\"; }\n\n.fa-pagelines:before {\n  content: \"\\f18c\"; }\n\n.fa-paint-brush:before {\n  content: \"\\f1fc\"; }\n\n.fa-palfed:before {\n  content: \"\\f3d8\"; }\n\n.fa-pallet:before {\n  content: \"\\f482\"; }\n\n.fa-paper-plane:before {\n  content: \"\\f1d8\"; }\n\n.fa-paperclip:before {\n  content: \"\\f0c6\"; }\n\n.fa-paragraph:before {\n  content: \"\\f1dd\"; }\n\n.fa-paste:before {\n  content: \"\\f0ea\"; }\n\n.fa-patreon:before {\n  content: \"\\f3d9\"; }\n\n.fa-pause:before {\n  content: \"\\f04c\"; }\n\n.fa-pause-circle:before {\n  content: \"\\f28b\"; }\n\n.fa-paw:before {\n  content: \"\\f1b0\"; }\n\n.fa-paypal:before {\n  content: \"\\f1ed\"; }\n\n.fa-pen-square:before {\n  content: \"\\f14b\"; }\n\n.fa-pencil-alt:before {\n  content: \"\\f303\"; }\n\n.fa-percent:before {\n  content: \"\\f295\"; }\n\n.fa-periscope:before {\n  content: \"\\f3da\"; }\n\n.fa-phabricator:before {\n  content: \"\\f3db\"; }\n\n.fa-phoenix-framework:before {\n  content: \"\\f3dc\"; }\n\n.fa-phone:before {\n  content: \"\\f095\"; }\n\n.fa-phone-square:before {\n  content: \"\\f098\"; }\n\n.fa-phone-volume:before {\n  content: \"\\f2a0\"; }\n\n.fa-php:before {\n  content: \"\\f457\"; }\n\n.fa-pied-piper:before {\n  content: \"\\f2ae\"; }\n\n.fa-pied-piper-alt:before {\n  content: \"\\f1a8\"; }\n\n.fa-pied-piper-pp:before {\n  content: \"\\f1a7\"; }\n\n.fa-pills:before {\n  content: \"\\f484\"; }\n\n.fa-pinterest:before {\n  content: \"\\f0d2\"; }\n\n.fa-pinterest-p:before {\n  content: \"\\f231\"; }\n\n.fa-pinterest-square:before {\n  content: \"\\f0d3\"; }\n\n.fa-plane:before {\n  content: \"\\f072\"; }\n\n.fa-play:before {\n  content: \"\\f04b\"; }\n\n.fa-play-circle:before {\n  content: \"\\f144\"; }\n\n.fa-playstation:before {\n  content: \"\\f3df\"; }\n\n.fa-plug:before {\n  content: \"\\f1e6\"; }\n\n.fa-plus:before {\n  content: \"\\f067\"; }\n\n.fa-plus-circle:before {\n  content: \"\\f055\"; }\n\n.fa-plus-square:before {\n  content: \"\\f0fe\"; }\n\n.fa-podcast:before {\n  content: \"\\f2ce\"; }\n\n.fa-pound-sign:before {\n  content: \"\\f154\"; }\n\n.fa-power-off:before {\n  content: \"\\f011\"; }\n\n.fa-print:before {\n  content: \"\\f02f\"; }\n\n.fa-product-hunt:before {\n  content: \"\\f288\"; }\n\n.fa-pushed:before {\n  content: \"\\f3e1\"; }\n\n.fa-puzzle-piece:before {\n  content: \"\\f12e\"; }\n\n.fa-python:before {\n  content: \"\\f3e2\"; }\n\n.fa-qq:before {\n  content: \"\\f1d6\"; }\n\n.fa-qrcode:before {\n  content: \"\\f029\"; }\n\n.fa-question:before {\n  content: \"\\f128\"; }\n\n.fa-question-circle:before {\n  content: \"\\f059\"; }\n\n.fa-quidditch:before {\n  content: \"\\f458\"; }\n\n.fa-quinscape:before {\n  content: \"\\f459\"; }\n\n.fa-quora:before {\n  content: \"\\f2c4\"; }\n\n.fa-quote-left:before {\n  content: \"\\f10d\"; }\n\n.fa-quote-right:before {\n  content: \"\\f10e\"; }\n\n.fa-random:before {\n  content: \"\\f074\"; }\n\n.fa-ravelry:before {\n  content: \"\\f2d9\"; }\n\n.fa-react:before {\n  content: \"\\f41b\"; }\n\n.fa-rebel:before {\n  content: \"\\f1d0\"; }\n\n.fa-recycle:before {\n  content: \"\\f1b8\"; }\n\n.fa-red-river:before {\n  content: \"\\f3e3\"; }\n\n.fa-reddit:before {\n  content: \"\\f1a1\"; }\n\n.fa-reddit-alien:before {\n  content: \"\\f281\"; }\n\n.fa-reddit-square:before {\n  content: \"\\f1a2\"; }\n\n.fa-redo:before {\n  content: \"\\f01e\"; }\n\n.fa-redo-alt:before {\n  content: \"\\f2f9\"; }\n\n.fa-registered:before {\n  content: \"\\f25d\"; }\n\n.fa-rendact:before {\n  content: \"\\f3e4\"; }\n\n.fa-renren:before {\n  content: \"\\f18b\"; }\n\n.fa-reply:before {\n  content: \"\\f3e5\"; }\n\n.fa-reply-all:before {\n  content: \"\\f122\"; }\n\n.fa-replyd:before {\n  content: \"\\f3e6\"; }\n\n.fa-resolving:before {\n  content: \"\\f3e7\"; }\n\n.fa-retweet:before {\n  content: \"\\f079\"; }\n\n.fa-road:before {\n  content: \"\\f018\"; }\n\n.fa-rocket:before {\n  content: \"\\f135\"; }\n\n.fa-rocketchat:before {\n  content: \"\\f3e8\"; }\n\n.fa-rockrms:before {\n  content: \"\\f3e9\"; }\n\n.fa-rss:before {\n  content: \"\\f09e\"; }\n\n.fa-rss-square:before {\n  content: \"\\f143\"; }\n\n.fa-ruble-sign:before {\n  content: \"\\f158\"; }\n\n.fa-rupee-sign:before {\n  content: \"\\f156\"; }\n\n.fa-safari:before {\n  content: \"\\f267\"; }\n\n.fa-sass:before {\n  content: \"\\f41e\"; }\n\n.fa-save:before {\n  content: \"\\f0c7\"; }\n\n.fa-schlix:before {\n  content: \"\\f3ea\"; }\n\n.fa-scribd:before {\n  content: \"\\f28a\"; }\n\n.fa-search:before {\n  content: \"\\f002\"; }\n\n.fa-search-minus:before {\n  content: \"\\f010\"; }\n\n.fa-search-plus:before {\n  content: \"\\f00e\"; }\n\n.fa-searchengin:before {\n  content: \"\\f3eb\"; }\n\n.fa-sellcast:before {\n  content: \"\\f2da\"; }\n\n.fa-sellsy:before {\n  content: \"\\f213\"; }\n\n.fa-server:before {\n  content: \"\\f233\"; }\n\n.fa-servicestack:before {\n  content: \"\\f3ec\"; }\n\n.fa-share:before {\n  content: \"\\f064\"; }\n\n.fa-share-alt:before {\n  content: \"\\f1e0\"; }\n\n.fa-share-alt-square:before {\n  content: \"\\f1e1\"; }\n\n.fa-share-square:before {\n  content: \"\\f14d\"; }\n\n.fa-shekel-sign:before {\n  content: \"\\f20b\"; }\n\n.fa-shield-alt:before {\n  content: \"\\f3ed\"; }\n\n.fa-ship:before {\n  content: \"\\f21a\"; }\n\n.fa-shipping-fast:before {\n  content: \"\\f48b\"; }\n\n.fa-shirtsinbulk:before {\n  content: \"\\f214\"; }\n\n.fa-shopping-bag:before {\n  content: \"\\f290\"; }\n\n.fa-shopping-basket:before {\n  content: \"\\f291\"; }\n\n.fa-shopping-cart:before {\n  content: \"\\f07a\"; }\n\n.fa-shower:before {\n  content: \"\\f2cc\"; }\n\n.fa-sign-in-alt:before {\n  content: \"\\f2f6\"; }\n\n.fa-sign-language:before {\n  content: \"\\f2a7\"; }\n\n.fa-sign-out-alt:before {\n  content: \"\\f2f5\"; }\n\n.fa-signal:before {\n  content: \"\\f012\"; }\n\n.fa-simplybuilt:before {\n  content: \"\\f215\"; }\n\n.fa-sistrix:before {\n  content: \"\\f3ee\"; }\n\n.fa-sitemap:before {\n  content: \"\\f0e8\"; }\n\n.fa-skyatlas:before {\n  content: \"\\f216\"; }\n\n.fa-skype:before {\n  content: \"\\f17e\"; }\n\n.fa-slack:before {\n  content: \"\\f198\"; }\n\n.fa-slack-hash:before {\n  content: \"\\f3ef\"; }\n\n.fa-sliders-h:before {\n  content: \"\\f1de\"; }\n\n.fa-slideshare:before {\n  content: \"\\f1e7\"; }\n\n.fa-smile:before {\n  content: \"\\f118\"; }\n\n.fa-snapchat:before {\n  content: \"\\f2ab\"; }\n\n.fa-snapchat-ghost:before {\n  content: \"\\f2ac\"; }\n\n.fa-snapchat-square:before {\n  content: \"\\f2ad\"; }\n\n.fa-snowflake:before {\n  content: \"\\f2dc\"; }\n\n.fa-sort:before {\n  content: \"\\f0dc\"; }\n\n.fa-sort-alpha-down:before {\n  content: \"\\f15d\"; }\n\n.fa-sort-alpha-up:before {\n  content: \"\\f15e\"; }\n\n.fa-sort-amount-down:before {\n  content: \"\\f160\"; }\n\n.fa-sort-amount-up:before {\n  content: \"\\f161\"; }\n\n.fa-sort-down:before {\n  content: \"\\f0dd\"; }\n\n.fa-sort-numeric-down:before {\n  content: \"\\f162\"; }\n\n.fa-sort-numeric-up:before {\n  content: \"\\f163\"; }\n\n.fa-sort-up:before {\n  content: \"\\f0de\"; }\n\n.fa-soundcloud:before {\n  content: \"\\f1be\"; }\n\n.fa-space-shuttle:before {\n  content: \"\\f197\"; }\n\n.fa-speakap:before {\n  content: \"\\f3f3\"; }\n\n.fa-spinner:before {\n  content: \"\\f110\"; }\n\n.fa-spotify:before {\n  content: \"\\f1bc\"; }\n\n.fa-square:before {\n  content: \"\\f0c8\"; }\n\n.fa-square-full:before {\n  content: \"\\f45c\"; }\n\n.fa-stack-exchange:before {\n  content: \"\\f18d\"; }\n\n.fa-stack-overflow:before {\n  content: \"\\f16c\"; }\n\n.fa-star:before {\n  content: \"\\f005\"; }\n\n.fa-star-half:before {\n  content: \"\\f089\"; }\n\n.fa-staylinked:before {\n  content: \"\\f3f5\"; }\n\n.fa-steam:before {\n  content: \"\\f1b6\"; }\n\n.fa-steam-square:before {\n  content: \"\\f1b7\"; }\n\n.fa-steam-symbol:before {\n  content: \"\\f3f6\"; }\n\n.fa-step-backward:before {\n  content: \"\\f048\"; }\n\n.fa-step-forward:before {\n  content: \"\\f051\"; }\n\n.fa-stethoscope:before {\n  content: \"\\f0f1\"; }\n\n.fa-sticker-mule:before {\n  content: \"\\f3f7\"; }\n\n.fa-sticky-note:before {\n  content: \"\\f249\"; }\n\n.fa-stop:before {\n  content: \"\\f04d\"; }\n\n.fa-stop-circle:before {\n  content: \"\\f28d\"; }\n\n.fa-stopwatch:before {\n  content: \"\\f2f2\"; }\n\n.fa-strava:before {\n  content: \"\\f428\"; }\n\n.fa-street-view:before {\n  content: \"\\f21d\"; }\n\n.fa-strikethrough:before {\n  content: \"\\f0cc\"; }\n\n.fa-stripe:before {\n  content: \"\\f429\"; }\n\n.fa-stripe-s:before {\n  content: \"\\f42a\"; }\n\n.fa-studiovinari:before {\n  content: \"\\f3f8\"; }\n\n.fa-stumbleupon:before {\n  content: \"\\f1a4\"; }\n\n.fa-stumbleupon-circle:before {\n  content: \"\\f1a3\"; }\n\n.fa-subscript:before {\n  content: \"\\f12c\"; }\n\n.fa-subway:before {\n  content: \"\\f239\"; }\n\n.fa-suitcase:before {\n  content: \"\\f0f2\"; }\n\n.fa-sun:before {\n  content: \"\\f185\"; }\n\n.fa-superpowers:before {\n  content: \"\\f2dd\"; }\n\n.fa-superscript:before {\n  content: \"\\f12b\"; }\n\n.fa-supple:before {\n  content: \"\\f3f9\"; }\n\n.fa-sync:before {\n  content: \"\\f021\"; }\n\n.fa-sync-alt:before {\n  content: \"\\f2f1\"; }\n\n.fa-syringe:before {\n  content: \"\\f48e\"; }\n\n.fa-table:before {\n  content: \"\\f0ce\"; }\n\n.fa-table-tennis:before {\n  content: \"\\f45d\"; }\n\n.fa-tablet:before {\n  content: \"\\f10a\"; }\n\n.fa-tablet-alt:before {\n  content: \"\\f3fa\"; }\n\n.fa-tachometer-alt:before {\n  content: \"\\f3fd\"; }\n\n.fa-tag:before {\n  content: \"\\f02b\"; }\n\n.fa-tags:before {\n  content: \"\\f02c\"; }\n\n.fa-tasks:before {\n  content: \"\\f0ae\"; }\n\n.fa-taxi:before {\n  content: \"\\f1ba\"; }\n\n.fa-telegram:before {\n  content: \"\\f2c6\"; }\n\n.fa-telegram-plane:before {\n  content: \"\\f3fe\"; }\n\n.fa-tencent-weibo:before {\n  content: \"\\f1d5\"; }\n\n.fa-terminal:before {\n  content: \"\\f120\"; }\n\n.fa-text-height:before {\n  content: \"\\f034\"; }\n\n.fa-text-width:before {\n  content: \"\\f035\"; }\n\n.fa-th:before {\n  content: \"\\f00a\"; }\n\n.fa-th-large:before {\n  content: \"\\f009\"; }\n\n.fa-th-list:before {\n  content: \"\\f00b\"; }\n\n.fa-themeisle:before {\n  content: \"\\f2b2\"; }\n\n.fa-thermometer:before {\n  content: \"\\f491\"; }\n\n.fa-thermometer-empty:before {\n  content: \"\\f2cb\"; }\n\n.fa-thermometer-full:before {\n  content: \"\\f2c7\"; }\n\n.fa-thermometer-half:before {\n  content: \"\\f2c9\"; }\n\n.fa-thermometer-quarter:before {\n  content: \"\\f2ca\"; }\n\n.fa-thermometer-three-quarters:before {\n  content: \"\\f2c8\"; }\n\n.fa-thumbs-down:before {\n  content: \"\\f165\"; }\n\n.fa-thumbs-up:before {\n  content: \"\\f164\"; }\n\n.fa-thumbtack:before {\n  content: \"\\f08d\"; }\n\n.fa-ticket-alt:before {\n  content: \"\\f3ff\"; }\n\n.fa-times:before {\n  content: \"\\f00d\"; }\n\n.fa-times-circle:before {\n  content: \"\\f057\"; }\n\n.fa-tint:before {\n  content: \"\\f043\"; }\n\n.fa-toggle-off:before {\n  content: \"\\f204\"; }\n\n.fa-toggle-on:before {\n  content: \"\\f205\"; }\n\n.fa-trademark:before {\n  content: \"\\f25c\"; }\n\n.fa-train:before {\n  content: \"\\f238\"; }\n\n.fa-transgender:before {\n  content: \"\\f224\"; }\n\n.fa-transgender-alt:before {\n  content: \"\\f225\"; }\n\n.fa-trash:before {\n  content: \"\\f1f8\"; }\n\n.fa-trash-alt:before {\n  content: \"\\f2ed\"; }\n\n.fa-tree:before {\n  content: \"\\f1bb\"; }\n\n.fa-trello:before {\n  content: \"\\f181\"; }\n\n.fa-tripadvisor:before {\n  content: \"\\f262\"; }\n\n.fa-trophy:before {\n  content: \"\\f091\"; }\n\n.fa-truck:before {\n  content: \"\\f0d1\"; }\n\n.fa-tty:before {\n  content: \"\\f1e4\"; }\n\n.fa-tumblr:before {\n  content: \"\\f173\"; }\n\n.fa-tumblr-square:before {\n  content: \"\\f174\"; }\n\n.fa-tv:before {\n  content: \"\\f26c\"; }\n\n.fa-twitch:before {\n  content: \"\\f1e8\"; }\n\n.fa-twitter:before {\n  content: \"\\f099\"; }\n\n.fa-twitter-square:before {\n  content: \"\\f081\"; }\n\n.fa-typo3:before {\n  content: \"\\f42b\"; }\n\n.fa-uber:before {\n  content: \"\\f402\"; }\n\n.fa-uikit:before {\n  content: \"\\f403\"; }\n\n.fa-umbrella:before {\n  content: \"\\f0e9\"; }\n\n.fa-underline:before {\n  content: \"\\f0cd\"; }\n\n.fa-undo:before {\n  content: \"\\f0e2\"; }\n\n.fa-undo-alt:before {\n  content: \"\\f2ea\"; }\n\n.fa-uniregistry:before {\n  content: \"\\f404\"; }\n\n.fa-universal-access:before {\n  content: \"\\f29a\"; }\n\n.fa-university:before {\n  content: \"\\f19c\"; }\n\n.fa-unlink:before {\n  content: \"\\f127\"; }\n\n.fa-unlock:before {\n  content: \"\\f09c\"; }\n\n.fa-unlock-alt:before {\n  content: \"\\f13e\"; }\n\n.fa-untappd:before {\n  content: \"\\f405\"; }\n\n.fa-upload:before {\n  content: \"\\f093\"; }\n\n.fa-usb:before {\n  content: \"\\f287\"; }\n\n.fa-user:before {\n  content: \"\\f007\"; }\n\n.fa-user-circle:before {\n  content: \"\\f2bd\"; }\n\n.fa-user-md:before {\n  content: \"\\f0f0\"; }\n\n.fa-user-plus:before {\n  content: \"\\f234\"; }\n\n.fa-user-secret:before {\n  content: \"\\f21b\"; }\n\n.fa-user-times:before {\n  content: \"\\f235\"; }\n\n.fa-users:before {\n  content: \"\\f0c0\"; }\n\n.fa-ussunnah:before {\n  content: \"\\f407\"; }\n\n.fa-utensil-spoon:before {\n  content: \"\\f2e5\"; }\n\n.fa-utensils:before {\n  content: \"\\f2e7\"; }\n\n.fa-vaadin:before {\n  content: \"\\f408\"; }\n\n.fa-venus:before {\n  content: \"\\f221\"; }\n\n.fa-venus-double:before {\n  content: \"\\f226\"; }\n\n.fa-venus-mars:before {\n  content: \"\\f228\"; }\n\n.fa-viacoin:before {\n  content: \"\\f237\"; }\n\n.fa-viadeo:before {\n  content: \"\\f2a9\"; }\n\n.fa-viadeo-square:before {\n  content: \"\\f2aa\"; }\n\n.fa-viber:before {\n  content: \"\\f409\"; }\n\n.fa-video:before {\n  content: \"\\f03d\"; }\n\n.fa-vimeo:before {\n  content: \"\\f40a\"; }\n\n.fa-vimeo-square:before {\n  content: \"\\f194\"; }\n\n.fa-vimeo-v:before {\n  content: \"\\f27d\"; }\n\n.fa-vine:before {\n  content: \"\\f1ca\"; }\n\n.fa-vk:before {\n  content: \"\\f189\"; }\n\n.fa-vnv:before {\n  content: \"\\f40b\"; }\n\n.fa-volleyball-ball:before {\n  content: \"\\f45f\"; }\n\n.fa-volume-down:before {\n  content: \"\\f027\"; }\n\n.fa-volume-off:before {\n  content: \"\\f026\"; }\n\n.fa-volume-up:before {\n  content: \"\\f028\"; }\n\n.fa-vuejs:before {\n  content: \"\\f41f\"; }\n\n.fa-warehouse:before {\n  content: \"\\f494\"; }\n\n.fa-weibo:before {\n  content: \"\\f18a\"; }\n\n.fa-weight:before {\n  content: \"\\f496\"; }\n\n.fa-weixin:before {\n  content: \"\\f1d7\"; }\n\n.fa-whatsapp:before {\n  content: \"\\f232\"; }\n\n.fa-whatsapp-square:before {\n  content: \"\\f40c\"; }\n\n.fa-wheelchair:before {\n  content: \"\\f193\"; }\n\n.fa-whmcs:before {\n  content: \"\\f40d\"; }\n\n.fa-wifi:before {\n  content: \"\\f1eb\"; }\n\n.fa-wikipedia-w:before {\n  content: \"\\f266\"; }\n\n.fa-window-close:before {\n  content: \"\\f410\"; }\n\n.fa-window-maximize:before {\n  content: \"\\f2d0\"; }\n\n.fa-window-minimize:before {\n  content: \"\\f2d1\"; }\n\n.fa-window-restore:before {\n  content: \"\\f2d2\"; }\n\n.fa-windows:before {\n  content: \"\\f17a\"; }\n\n.fa-won-sign:before {\n  content: \"\\f159\"; }\n\n.fa-wordpress:before {\n  content: \"\\f19a\"; }\n\n.fa-wordpress-simple:before {\n  content: \"\\f411\"; }\n\n.fa-wpbeginner:before {\n  content: \"\\f297\"; }\n\n.fa-wpexplorer:before {\n  content: \"\\f2de\"; }\n\n.fa-wpforms:before {\n  content: \"\\f298\"; }\n\n.fa-wrench:before {\n  content: \"\\f0ad\"; }\n\n.fa-xbox:before {\n  content: \"\\f412\"; }\n\n.fa-xing:before {\n  content: \"\\f168\"; }\n\n.fa-xing-square:before {\n  content: \"\\f169\"; }\n\n.fa-y-combinator:before {\n  content: \"\\f23b\"; }\n\n.fa-yahoo:before {\n  content: \"\\f19e\"; }\n\n.fa-yandex:before {\n  content: \"\\f413\"; }\n\n.fa-yandex-international:before {\n  content: \"\\f414\"; }\n\n.fa-yelp:before {\n  content: \"\\f1e9\"; }\n\n.fa-yen-sign:before {\n  content: \"\\f157\"; }\n\n.fa-yoast:before {\n  content: \"\\f2b1\"; }\n\n.fa-youtube:before {\n  content: \"\\f167\"; }\n\n.fa-youtube-square:before {\n  content: \"\\f431\"; }\n\n.sr-only {\n  border: 0;\n  clip: rect(0, 0, 0, 0);\n  height: 1px;\n  margin: -1px;\n  overflow: hidden;\n  padding: 0;\n  position: absolute;\n  width: 1px; }\n\n.sr-only-focusable:active, .sr-only-focusable:focus {\n  clip: auto;\n  height: auto;\n  margin: 0;\n  overflow: visible;\n  position: static;\n  width: auto; }\n@font-face {\n  font-family: 'Font Awesome 5 Brands';\n  font-style: normal;\n  font-weight: normal;\n  src: url(\"../webfonts/fa-brands-400.eot\");\n  src: url(\"../webfonts/fa-brands-400.eot?#iefix\") format(\"embedded-opentype\"), url(\"../webfonts/fa-brands-400.woff2\") format(\"woff2\"), url(\"../webfonts/fa-brands-400.woff\") format(\"woff\"), url(\"../webfonts/fa-brands-400.ttf\") format(\"truetype\"), url(\"../webfonts/fa-brands-400.svg#fontawesome\") format(\"svg\"); }\n\n.fab {\n  font-family: 'Font Awesome 5 Brands'; }\n@font-face {\n  font-family: 'Font Awesome 5 Free';\n  font-style: normal;\n  font-weight: 400;\n  src: url(\"../webfonts/fa-regular-400.eot\");\n  src: url(\"../webfonts/fa-regular-400.eot?#iefix\") format(\"embedded-opentype\"), url(\"../webfonts/fa-regular-400.woff2\") format(\"woff2\"), url(\"../webfonts/fa-regular-400.woff\") format(\"woff\"), url(\"../webfonts/fa-regular-400.ttf\") format(\"truetype\"), url(\"../webfonts/fa-regular-400.svg#fontawesome\") format(\"svg\"); }\n\n.far {\n  font-family: 'Font Awesome 5 Free';\n  font-weight: 400; }\n@font-face {\n  font-family: 'Font Awesome 5 Free';\n  font-style: normal;\n  font-weight: 900;\n  src: url(\"../webfonts/fa-solid-900.eot\");\n  src: url(\"../webfonts/fa-solid-900.eot?#iefix\") format(\"embedded-opentype\"), url(\"../webfonts/fa-solid-900.woff2\") format(\"woff2\"), url(\"../webfonts/fa-solid-900.woff\") format(\"woff\"), url(\"../webfonts/fa-solid-900.ttf\") format(\"truetype\"), url(\"../webfonts/fa-solid-900.svg#fontawesome\") format(\"svg\"); }\n\n.fa,\n.fas {\n  font-family: 'Font Awesome 5 Free';\n  font-weight: 900; }\n"
  },
  {
    "path": "src/sourceDev.WebApp/SharedThemes/cosmo/wwwroot/css/site.css",
    "content": "﻿html {\n    position: relative;\n    min-height: 100%;\n}\n\nbody {\n    min-height: 100vh;\n    padding-top: 142px;\n}\n\n#newPostLink {\n    position: absolute;\n    top: 170px;\n    right: 0px;\n}\n\n#editPostLink {\n    position: absolute;\n    top: 200px;\n    right: 0px;\n}\n\n#unpublishPostLink {\n    position: absolute;\n    top: 230px !important;\n    right: 0px !important;\n}\n\n#pageManagerLink {\n    position: absolute;\n    top: 170px;\n    right: 0px;\n}\n\n#newPageLink {\n    position: absolute;\n    top: 200px;\n    right: 0px;\n}\n\n#editPageLink {\n    position: absolute;\n    top: 230px;\n    right: 0px\n}\n\n#unpublishPageLink {\n    position: absolute;\n    top: 260px !important;\n    right: 0px !important\n}\n\n#sidenavtoggle {\n    position: absolute;\n    top: 220px;\n    right: 5px;\n}\n\n\n@media screen and (max-width: 812px) {\n    #sidenavtoggle,\n    #sidenavmenu {\n        display: none;\n    }\n}\n\n.flex-fill {\n    flex: 1 1 auto !important;\n}\n\n\n.carousel-caption p {\n    font-size: 20px;\n    line-height: 1.4;\n}\n\n@media screen and (max-width: 768px) {\n    .carousel-caption {\n        display: none\n    }\n}\n\n\n\n\nimg, video, iframe {\n    max-width: 100%;\n}\n\ntd img, video, iframe {\n    max-width: none;\n}\n\n\n\n.table td, .table th {\n    vertical-align: inherit;\n}\n\n/******** jquery smartmenu bootstrap 4 ******/\n/* Carets in collapsible mode (make them look like +/- buttons) */\n.navbar-nav.sm-collapsible .sub-arrow {\n    position: absolute;\n    top: 50%;\n    right: 0;\n    margin: -0.7em 0.5em 0 0;\n    border: 1px solid rgba(0, 0, 0, .1);\n    border-radius: .25rem;\n    padding: 0;\n    width: 2em;\n    height: 1.4em;\n    font-size: 1.25rem;\n    line-height: 1.2em;\n    text-align: center;\n}\n\n    .navbar-nav.sm-collapsible .sub-arrow::before {\n        content: '+';\n    }\n\n.navbar-nav.sm-collapsible .show > a > .sub-arrow::before {\n    content: '-';\n}\n\n.navbar-dark .navbar-nav.sm-collapsible .nav-link .sub-arrow {\n    border-color: rgba(255, 255, 255, .1);\n}\n/* make sure there's room for the carets */\n.navbar-nav.sm-collapsible .has-submenu {\n    padding-right: 3em;\n}\n/* keep the carets properly positioned */\n.navbar-nav.sm-collapsible .nav-link,\n.navbar-nav.sm-collapsible .dropdown-item {\n    position: relative;\n}\n\n\n/* Nav carets in expanded mode */\n.navbar-nav:not(.sm-collapsible) .nav-link .sub-arrow {\n    display: inline-block;\n    width: 0;\n    height: 0;\n    margin-left: .255em;\n    vertical-align: .255em;\n    border-top: .3em solid;\n    border-right: .3em solid transparent;\n    border-left: .3em solid transparent;\n}\n/* point the arrows up for .fixed-bottom navbars */\n.fixed-bottom .navbar-nav:not(.sm-collapsible) .nav-link .sub-arrow,\n.fixed-bottom .navbar-nav:not(.sm-collapsible):not([data-sm-skip]) .dropdown-toggle::after {\n    border-top: 0;\n    border-bottom: .3em solid;\n}\n\n\n/* Dropdown carets in expanded mode */\n.navbar-nav:not(.sm-collapsible) .dropdown-item .sub-arrow,\n.navbar-nav:not(.sm-collapsible):not([data-sm-skip]) .dropdown-menu .dropdown-toggle::after {\n    position: absolute;\n    top: 50%;\n    right: 0;\n    width: 0;\n    height: 0;\n    margin-top: -.3em;\n    margin-right: 1em;\n    border-top: .3em solid transparent;\n    border-bottom: .3em solid transparent;\n    border-left: .3em solid;\n}\n/* make sure there's room for the carets */\n.navbar-nav:not(.sm-collapsible) .dropdown-item.has-submenu {\n    padding-right: 2em;\n}\n\n\n/* Scrolling arrows for tall menus */\n.navbar-nav .scroll-up,\n.navbar-nav .scroll-down {\n    position: absolute;\n    display: none;\n    visibility: hidden;\n    height: 20px;\n    overflow: hidden;\n    text-align: center;\n}\n\n.navbar-nav .scroll-up-arrow,\n.navbar-nav .scroll-down-arrow {\n    position: absolute;\n    top: -2px;\n    left: 50%;\n    margin-left: -8px;\n    width: 0;\n    height: 0;\n    overflow: hidden;\n    border-top: 7px solid transparent;\n    border-right: 7px solid transparent;\n    border-bottom: 7px solid;\n    border-left: 7px solid transparent;\n}\n\n.navbar-nav .scroll-down-arrow {\n    top: 6px;\n    border-top: 7px solid;\n    border-right: 7px solid transparent;\n    border-bottom: 7px solid transparent;\n    border-left: 7px solid transparent;\n}\n\n\n/* Add some spacing for 2+ level sub menus in collapsible mode */\n.navbar-nav.sm-collapsible .dropdown-menu .dropdown-menu {\n    margin: .5em;\n}\n\n\n/* Fix SmartMenus sub menus auto width (subMenusMinWidth/subMenusMaxWidth options) */\n.navbar-nav:not([data-sm-skip]) .dropdown-item {\n    white-space: normal;\n}\n\n.navbar-nav:not(.sm-collapsible) .sm-nowrap > li > .dropdown-item {\n    white-space: nowrap;\n}\n/******** end jquery smart menu bootstrap-4 *****************/\n\n.brand-header {\n    height: 100px;\n}\n\nheader .navbar {\n    top: 100px;\n}\n\n"
  },
  {
    "path": "src/sourceDev.WebApp/SharedThemes/cosmo/wwwroot/js/bootstrap.bundle.js",
    "content": "/*!\n  * Bootstrap v5.0.2 (https://getbootstrap.com/)\n  * Copyright 2011-2021 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)\n  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n  */\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n  typeof define === 'function' && define.amd ? define(factory) :\n  (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.bootstrap = factory());\n}(this, (function () { 'use strict';\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): dom/selector-engine.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n  const NODE_TEXT = 3;\n  const SelectorEngine = {\n    find(selector, element = document.documentElement) {\n      return [].concat(...Element.prototype.querySelectorAll.call(element, selector));\n    },\n\n    findOne(selector, element = document.documentElement) {\n      return Element.prototype.querySelector.call(element, selector);\n    },\n\n    children(element, selector) {\n      return [].concat(...element.children).filter(child => child.matches(selector));\n    },\n\n    parents(element, selector) {\n      const parents = [];\n      let ancestor = element.parentNode;\n\n      while (ancestor && ancestor.nodeType === Node.ELEMENT_NODE && ancestor.nodeType !== NODE_TEXT) {\n        if (ancestor.matches(selector)) {\n          parents.push(ancestor);\n        }\n\n        ancestor = ancestor.parentNode;\n      }\n\n      return parents;\n    },\n\n    prev(element, selector) {\n      let previous = element.previousElementSibling;\n\n      while (previous) {\n        if (previous.matches(selector)) {\n          return [previous];\n        }\n\n        previous = previous.previousElementSibling;\n      }\n\n      return [];\n    },\n\n    next(element, selector) {\n      let next = element.nextElementSibling;\n\n      while (next) {\n        if (next.matches(selector)) {\n          return [next];\n        }\n\n        next = next.nextElementSibling;\n      }\n\n      return [];\n    }\n\n  };\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): util/index.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n\n  const MAX_UID = 1000000;\n  const MILLISECONDS_MULTIPLIER = 1000;\n  const TRANSITION_END = 'transitionend'; // Shoutout AngusCroll (https://goo.gl/pxwQGp)\n\n  const toType = obj => {\n    if (obj === null || obj === undefined) {\n      return `${obj}`;\n    }\n\n    return {}.toString.call(obj).match(/\\s([a-z]+)/i)[1].toLowerCase();\n  };\n  /**\n   * --------------------------------------------------------------------------\n   * Public Util Api\n   * --------------------------------------------------------------------------\n   */\n\n\n  const getUID = prefix => {\n    do {\n      prefix += Math.floor(Math.random() * MAX_UID);\n    } while (document.getElementById(prefix));\n\n    return prefix;\n  };\n\n  const getSelector = element => {\n    let selector = element.getAttribute('data-bs-target');\n\n    if (!selector || selector === '#') {\n      let hrefAttr = element.getAttribute('href'); // The only valid content that could double as a selector are IDs or classes,\n      // so everything starting with `#` or `.`. If a \"real\" URL is used as the selector,\n      // `document.querySelector` will rightfully complain it is invalid.\n      // See https://github.com/twbs/bootstrap/issues/32273\n\n      if (!hrefAttr || !hrefAttr.includes('#') && !hrefAttr.startsWith('.')) {\n        return null;\n      } // Just in case some CMS puts out a full URL with the anchor appended\n\n\n      if (hrefAttr.includes('#') && !hrefAttr.startsWith('#')) {\n        hrefAttr = `#${hrefAttr.split('#')[1]}`;\n      }\n\n      selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : null;\n    }\n\n    return selector;\n  };\n\n  const getSelectorFromElement = element => {\n    const selector = getSelector(element);\n\n    if (selector) {\n      return document.querySelector(selector) ? selector : null;\n    }\n\n    return null;\n  };\n\n  const getElementFromSelector = element => {\n    const selector = getSelector(element);\n    return selector ? document.querySelector(selector) : null;\n  };\n\n  const getTransitionDurationFromElement = element => {\n    if (!element) {\n      return 0;\n    } // Get transition-duration of the element\n\n\n    let {\n      transitionDuration,\n      transitionDelay\n    } = window.getComputedStyle(element);\n    const floatTransitionDuration = Number.parseFloat(transitionDuration);\n    const floatTransitionDelay = Number.parseFloat(transitionDelay); // Return 0 if element or transition duration is not found\n\n    if (!floatTransitionDuration && !floatTransitionDelay) {\n      return 0;\n    } // If multiple durations are defined, take the first\n\n\n    transitionDuration = transitionDuration.split(',')[0];\n    transitionDelay = transitionDelay.split(',')[0];\n    return (Number.parseFloat(transitionDuration) + Number.parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER;\n  };\n\n  const triggerTransitionEnd = element => {\n    element.dispatchEvent(new Event(TRANSITION_END));\n  };\n\n  const isElement$1 = obj => {\n    if (!obj || typeof obj !== 'object') {\n      return false;\n    }\n\n    if (typeof obj.jquery !== 'undefined') {\n      obj = obj[0];\n    }\n\n    return typeof obj.nodeType !== 'undefined';\n  };\n\n  const getElement = obj => {\n    if (isElement$1(obj)) {\n      // it's a jQuery object or a node element\n      return obj.jquery ? obj[0] : obj;\n    }\n\n    if (typeof obj === 'string' && obj.length > 0) {\n      return SelectorEngine.findOne(obj);\n    }\n\n    return null;\n  };\n\n  const typeCheckConfig = (componentName, config, configTypes) => {\n    Object.keys(configTypes).forEach(property => {\n      const expectedTypes = configTypes[property];\n      const value = config[property];\n      const valueType = value && isElement$1(value) ? 'element' : toType(value);\n\n      if (!new RegExp(expectedTypes).test(valueType)) {\n        throw new TypeError(`${componentName.toUpperCase()}: Option \"${property}\" provided type \"${valueType}\" but expected type \"${expectedTypes}\".`);\n      }\n    });\n  };\n\n  const isVisible = element => {\n    if (!isElement$1(element) || element.getClientRects().length === 0) {\n      return false;\n    }\n\n    return getComputedStyle(element).getPropertyValue('visibility') === 'visible';\n  };\n\n  const isDisabled = element => {\n    if (!element || element.nodeType !== Node.ELEMENT_NODE) {\n      return true;\n    }\n\n    if (element.classList.contains('disabled')) {\n      return true;\n    }\n\n    if (typeof element.disabled !== 'undefined') {\n      return element.disabled;\n    }\n\n    return element.hasAttribute('disabled') && element.getAttribute('disabled') !== 'false';\n  };\n\n  const findShadowRoot = element => {\n    if (!document.documentElement.attachShadow) {\n      return null;\n    } // Can find the shadow root otherwise it'll return the document\n\n\n    if (typeof element.getRootNode === 'function') {\n      const root = element.getRootNode();\n      return root instanceof ShadowRoot ? root : null;\n    }\n\n    if (element instanceof ShadowRoot) {\n      return element;\n    } // when we don't find a shadow root\n\n\n    if (!element.parentNode) {\n      return null;\n    }\n\n    return findShadowRoot(element.parentNode);\n  };\n\n  const noop = () => {};\n\n  const reflow = element => element.offsetHeight;\n\n  const getjQuery = () => {\n    const {\n      jQuery\n    } = window;\n\n    if (jQuery && !document.body.hasAttribute('data-bs-no-jquery')) {\n      return jQuery;\n    }\n\n    return null;\n  };\n\n  const DOMContentLoadedCallbacks = [];\n\n  const onDOMContentLoaded = callback => {\n    if (document.readyState === 'loading') {\n      // add listener on the first call when the document is in loading state\n      if (!DOMContentLoadedCallbacks.length) {\n        document.addEventListener('DOMContentLoaded', () => {\n          DOMContentLoadedCallbacks.forEach(callback => callback());\n        });\n      }\n\n      DOMContentLoadedCallbacks.push(callback);\n    } else {\n      callback();\n    }\n  };\n\n  const isRTL = () => document.documentElement.dir === 'rtl';\n\n  const defineJQueryPlugin = plugin => {\n    onDOMContentLoaded(() => {\n      const $ = getjQuery();\n      /* istanbul ignore if */\n\n      if ($) {\n        const name = plugin.NAME;\n        const JQUERY_NO_CONFLICT = $.fn[name];\n        $.fn[name] = plugin.jQueryInterface;\n        $.fn[name].Constructor = plugin;\n\n        $.fn[name].noConflict = () => {\n          $.fn[name] = JQUERY_NO_CONFLICT;\n          return plugin.jQueryInterface;\n        };\n      }\n    });\n  };\n\n  const execute = callback => {\n    if (typeof callback === 'function') {\n      callback();\n    }\n  };\n\n  const executeAfterTransition = (callback, transitionElement, waitForTransition = true) => {\n    if (!waitForTransition) {\n      execute(callback);\n      return;\n    }\n\n    const durationPadding = 5;\n    const emulatedDuration = getTransitionDurationFromElement(transitionElement) + durationPadding;\n    let called = false;\n\n    const handler = ({\n      target\n    }) => {\n      if (target !== transitionElement) {\n        return;\n      }\n\n      called = true;\n      transitionElement.removeEventListener(TRANSITION_END, handler);\n      execute(callback);\n    };\n\n    transitionElement.addEventListener(TRANSITION_END, handler);\n    setTimeout(() => {\n      if (!called) {\n        triggerTransitionEnd(transitionElement);\n      }\n    }, emulatedDuration);\n  };\n  /**\n   * Return the previous/next element of a list.\n   *\n   * @param {array} list    The list of elements\n   * @param activeElement   The active element\n   * @param shouldGetNext   Choose to get next or previous element\n   * @param isCycleAllowed\n   * @return {Element|elem} The proper element\n   */\n\n\n  const getNextActiveElement = (list, activeElement, shouldGetNext, isCycleAllowed) => {\n    let index = list.indexOf(activeElement); // if the element does not exist in the list return an element depending on the direction and if cycle is allowed\n\n    if (index === -1) {\n      return list[!shouldGetNext && isCycleAllowed ? list.length - 1 : 0];\n    }\n\n    const listLength = list.length;\n    index += shouldGetNext ? 1 : -1;\n\n    if (isCycleAllowed) {\n      index = (index + listLength) % listLength;\n    }\n\n    return list[Math.max(0, Math.min(index, listLength - 1))];\n  };\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): dom/event-handler.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const namespaceRegex = /[^.]*(?=\\..*)\\.|.*/;\n  const stripNameRegex = /\\..*/;\n  const stripUidRegex = /::\\d+$/;\n  const eventRegistry = {}; // Events storage\n\n  let uidEvent = 1;\n  const customEvents = {\n    mouseenter: 'mouseover',\n    mouseleave: 'mouseout'\n  };\n  const customEventsRegex = /^(mouseenter|mouseleave)/i;\n  const nativeEvents = new Set(['click', 'dblclick', 'mouseup', 'mousedown', 'contextmenu', 'mousewheel', 'DOMMouseScroll', 'mouseover', 'mouseout', 'mousemove', 'selectstart', 'selectend', 'keydown', 'keypress', 'keyup', 'orientationchange', 'touchstart', 'touchmove', 'touchend', 'touchcancel', 'pointerdown', 'pointermove', 'pointerup', 'pointerleave', 'pointercancel', 'gesturestart', 'gesturechange', 'gestureend', 'focus', 'blur', 'change', 'reset', 'select', 'submit', 'focusin', 'focusout', 'load', 'unload', 'beforeunload', 'resize', 'move', 'DOMContentLoaded', 'readystatechange', 'error', 'abort', 'scroll']);\n  /**\n   * ------------------------------------------------------------------------\n   * Private methods\n   * ------------------------------------------------------------------------\n   */\n\n  function getUidEvent(element, uid) {\n    return uid && `${uid}::${uidEvent++}` || element.uidEvent || uidEvent++;\n  }\n\n  function getEvent(element) {\n    const uid = getUidEvent(element);\n    element.uidEvent = uid;\n    eventRegistry[uid] = eventRegistry[uid] || {};\n    return eventRegistry[uid];\n  }\n\n  function bootstrapHandler(element, fn) {\n    return function handler(event) {\n      event.delegateTarget = element;\n\n      if (handler.oneOff) {\n        EventHandler.off(element, event.type, fn);\n      }\n\n      return fn.apply(element, [event]);\n    };\n  }\n\n  function bootstrapDelegationHandler(element, selector, fn) {\n    return function handler(event) {\n      const domElements = element.querySelectorAll(selector);\n\n      for (let {\n        target\n      } = event; target && target !== this; target = target.parentNode) {\n        for (let i = domElements.length; i--;) {\n          if (domElements[i] === target) {\n            event.delegateTarget = target;\n\n            if (handler.oneOff) {\n              // eslint-disable-next-line unicorn/consistent-destructuring\n              EventHandler.off(element, event.type, selector, fn);\n            }\n\n            return fn.apply(target, [event]);\n          }\n        }\n      } // To please ESLint\n\n\n      return null;\n    };\n  }\n\n  function findHandler(events, handler, delegationSelector = null) {\n    const uidEventList = Object.keys(events);\n\n    for (let i = 0, len = uidEventList.length; i < len; i++) {\n      const event = events[uidEventList[i]];\n\n      if (event.originalHandler === handler && event.delegationSelector === delegationSelector) {\n        return event;\n      }\n    }\n\n    return null;\n  }\n\n  function normalizeParams(originalTypeEvent, handler, delegationFn) {\n    const delegation = typeof handler === 'string';\n    const originalHandler = delegation ? delegationFn : handler;\n    let typeEvent = getTypeEvent(originalTypeEvent);\n    const isNative = nativeEvents.has(typeEvent);\n\n    if (!isNative) {\n      typeEvent = originalTypeEvent;\n    }\n\n    return [delegation, originalHandler, typeEvent];\n  }\n\n  function addHandler(element, originalTypeEvent, handler, delegationFn, oneOff) {\n    if (typeof originalTypeEvent !== 'string' || !element) {\n      return;\n    }\n\n    if (!handler) {\n      handler = delegationFn;\n      delegationFn = null;\n    } // in case of mouseenter or mouseleave wrap the handler within a function that checks for its DOM position\n    // this prevents the handler from being dispatched the same way as mouseover or mouseout does\n\n\n    if (customEventsRegex.test(originalTypeEvent)) {\n      const wrapFn = fn => {\n        return function (event) {\n          if (!event.relatedTarget || event.relatedTarget !== event.delegateTarget && !event.delegateTarget.contains(event.relatedTarget)) {\n            return fn.call(this, event);\n          }\n        };\n      };\n\n      if (delegationFn) {\n        delegationFn = wrapFn(delegationFn);\n      } else {\n        handler = wrapFn(handler);\n      }\n    }\n\n    const [delegation, originalHandler, typeEvent] = normalizeParams(originalTypeEvent, handler, delegationFn);\n    const events = getEvent(element);\n    const handlers = events[typeEvent] || (events[typeEvent] = {});\n    const previousFn = findHandler(handlers, originalHandler, delegation ? handler : null);\n\n    if (previousFn) {\n      previousFn.oneOff = previousFn.oneOff && oneOff;\n      return;\n    }\n\n    const uid = getUidEvent(originalHandler, originalTypeEvent.replace(namespaceRegex, ''));\n    const fn = delegation ? bootstrapDelegationHandler(element, handler, delegationFn) : bootstrapHandler(element, handler);\n    fn.delegationSelector = delegation ? handler : null;\n    fn.originalHandler = originalHandler;\n    fn.oneOff = oneOff;\n    fn.uidEvent = uid;\n    handlers[uid] = fn;\n    element.addEventListener(typeEvent, fn, delegation);\n  }\n\n  function removeHandler(element, events, typeEvent, handler, delegationSelector) {\n    const fn = findHandler(events[typeEvent], handler, delegationSelector);\n\n    if (!fn) {\n      return;\n    }\n\n    element.removeEventListener(typeEvent, fn, Boolean(delegationSelector));\n    delete events[typeEvent][fn.uidEvent];\n  }\n\n  function removeNamespacedHandlers(element, events, typeEvent, namespace) {\n    const storeElementEvent = events[typeEvent] || {};\n    Object.keys(storeElementEvent).forEach(handlerKey => {\n      if (handlerKey.includes(namespace)) {\n        const event = storeElementEvent[handlerKey];\n        removeHandler(element, events, typeEvent, event.originalHandler, event.delegationSelector);\n      }\n    });\n  }\n\n  function getTypeEvent(event) {\n    // allow to get the native events from namespaced events ('click.bs.button' --> 'click')\n    event = event.replace(stripNameRegex, '');\n    return customEvents[event] || event;\n  }\n\n  const EventHandler = {\n    on(element, event, handler, delegationFn) {\n      addHandler(element, event, handler, delegationFn, false);\n    },\n\n    one(element, event, handler, delegationFn) {\n      addHandler(element, event, handler, delegationFn, true);\n    },\n\n    off(element, originalTypeEvent, handler, delegationFn) {\n      if (typeof originalTypeEvent !== 'string' || !element) {\n        return;\n      }\n\n      const [delegation, originalHandler, typeEvent] = normalizeParams(originalTypeEvent, handler, delegationFn);\n      const inNamespace = typeEvent !== originalTypeEvent;\n      const events = getEvent(element);\n      const isNamespace = originalTypeEvent.startsWith('.');\n\n      if (typeof originalHandler !== 'undefined') {\n        // Simplest case: handler is passed, remove that listener ONLY.\n        if (!events || !events[typeEvent]) {\n          return;\n        }\n\n        removeHandler(element, events, typeEvent, originalHandler, delegation ? handler : null);\n        return;\n      }\n\n      if (isNamespace) {\n        Object.keys(events).forEach(elementEvent => {\n          removeNamespacedHandlers(element, events, elementEvent, originalTypeEvent.slice(1));\n        });\n      }\n\n      const storeElementEvent = events[typeEvent] || {};\n      Object.keys(storeElementEvent).forEach(keyHandlers => {\n        const handlerKey = keyHandlers.replace(stripUidRegex, '');\n\n        if (!inNamespace || originalTypeEvent.includes(handlerKey)) {\n          const event = storeElementEvent[keyHandlers];\n          removeHandler(element, events, typeEvent, event.originalHandler, event.delegationSelector);\n        }\n      });\n    },\n\n    trigger(element, event, args) {\n      if (typeof event !== 'string' || !element) {\n        return null;\n      }\n\n      const $ = getjQuery();\n      const typeEvent = getTypeEvent(event);\n      const inNamespace = event !== typeEvent;\n      const isNative = nativeEvents.has(typeEvent);\n      let jQueryEvent;\n      let bubbles = true;\n      let nativeDispatch = true;\n      let defaultPrevented = false;\n      let evt = null;\n\n      if (inNamespace && $) {\n        jQueryEvent = $.Event(event, args);\n        $(element).trigger(jQueryEvent);\n        bubbles = !jQueryEvent.isPropagationStopped();\n        nativeDispatch = !jQueryEvent.isImmediatePropagationStopped();\n        defaultPrevented = jQueryEvent.isDefaultPrevented();\n      }\n\n      if (isNative) {\n        evt = document.createEvent('HTMLEvents');\n        evt.initEvent(typeEvent, bubbles, true);\n      } else {\n        evt = new CustomEvent(event, {\n          bubbles,\n          cancelable: true\n        });\n      } // merge custom information in our event\n\n\n      if (typeof args !== 'undefined') {\n        Object.keys(args).forEach(key => {\n          Object.defineProperty(evt, key, {\n            get() {\n              return args[key];\n            }\n\n          });\n        });\n      }\n\n      if (defaultPrevented) {\n        evt.preventDefault();\n      }\n\n      if (nativeDispatch) {\n        element.dispatchEvent(evt);\n      }\n\n      if (evt.defaultPrevented && typeof jQueryEvent !== 'undefined') {\n        jQueryEvent.preventDefault();\n      }\n\n      return evt;\n    }\n\n  };\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): dom/data.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n  const elementMap = new Map();\n  var Data = {\n    set(element, key, instance) {\n      if (!elementMap.has(element)) {\n        elementMap.set(element, new Map());\n      }\n\n      const instanceMap = elementMap.get(element); // make it clear we only want one instance per element\n      // can be removed later when multiple key/instances are fine to be used\n\n      if (!instanceMap.has(key) && instanceMap.size !== 0) {\n        // eslint-disable-next-line no-console\n        console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(instanceMap.keys())[0]}.`);\n        return;\n      }\n\n      instanceMap.set(key, instance);\n    },\n\n    get(element, key) {\n      if (elementMap.has(element)) {\n        return elementMap.get(element).get(key) || null;\n      }\n\n      return null;\n    },\n\n    remove(element, key) {\n      if (!elementMap.has(element)) {\n        return;\n      }\n\n      const instanceMap = elementMap.get(element);\n      instanceMap.delete(key); // free up element references if there are no instances left for an element\n\n      if (instanceMap.size === 0) {\n        elementMap.delete(element);\n      }\n    }\n\n  };\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): base-component.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const VERSION = '5.0.2';\n\n  class BaseComponent {\n    constructor(element) {\n      element = getElement(element);\n\n      if (!element) {\n        return;\n      }\n\n      this._element = element;\n      Data.set(this._element, this.constructor.DATA_KEY, this);\n    }\n\n    dispose() {\n      Data.remove(this._element, this.constructor.DATA_KEY);\n      EventHandler.off(this._element, this.constructor.EVENT_KEY);\n      Object.getOwnPropertyNames(this).forEach(propertyName => {\n        this[propertyName] = null;\n      });\n    }\n\n    _queueCallback(callback, element, isAnimated = true) {\n      executeAfterTransition(callback, element, isAnimated);\n    }\n    /** Static */\n\n\n    static getInstance(element) {\n      return Data.get(element, this.DATA_KEY);\n    }\n\n    static getOrCreateInstance(element, config = {}) {\n      return this.getInstance(element) || new this(element, typeof config === 'object' ? config : null);\n    }\n\n    static get VERSION() {\n      return VERSION;\n    }\n\n    static get NAME() {\n      throw new Error('You have to implement the static method \"NAME\", for each component!');\n    }\n\n    static get DATA_KEY() {\n      return `bs.${this.NAME}`;\n    }\n\n    static get EVENT_KEY() {\n      return `.${this.DATA_KEY}`;\n    }\n\n  }\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): alert.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$c = 'alert';\n  const DATA_KEY$b = 'bs.alert';\n  const EVENT_KEY$b = `.${DATA_KEY$b}`;\n  const DATA_API_KEY$8 = '.data-api';\n  const SELECTOR_DISMISS = '[data-bs-dismiss=\"alert\"]';\n  const EVENT_CLOSE = `close${EVENT_KEY$b}`;\n  const EVENT_CLOSED = `closed${EVENT_KEY$b}`;\n  const EVENT_CLICK_DATA_API$7 = `click${EVENT_KEY$b}${DATA_API_KEY$8}`;\n  const CLASS_NAME_ALERT = 'alert';\n  const CLASS_NAME_FADE$6 = 'fade';\n  const CLASS_NAME_SHOW$9 = 'show';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Alert extends BaseComponent {\n    // Getters\n    static get NAME() {\n      return NAME$c;\n    } // Public\n\n\n    close(element) {\n      const rootElement = element ? this._getRootElement(element) : this._element;\n\n      const customEvent = this._triggerCloseEvent(rootElement);\n\n      if (customEvent === null || customEvent.defaultPrevented) {\n        return;\n      }\n\n      this._removeElement(rootElement);\n    } // Private\n\n\n    _getRootElement(element) {\n      return getElementFromSelector(element) || element.closest(`.${CLASS_NAME_ALERT}`);\n    }\n\n    _triggerCloseEvent(element) {\n      return EventHandler.trigger(element, EVENT_CLOSE);\n    }\n\n    _removeElement(element) {\n      element.classList.remove(CLASS_NAME_SHOW$9);\n      const isAnimated = element.classList.contains(CLASS_NAME_FADE$6);\n\n      this._queueCallback(() => this._destroyElement(element), element, isAnimated);\n    }\n\n    _destroyElement(element) {\n      element.remove();\n      EventHandler.trigger(element, EVENT_CLOSED);\n    } // Static\n\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = Alert.getOrCreateInstance(this);\n\n        if (config === 'close') {\n          data[config](this);\n        }\n      });\n    }\n\n    static handleDismiss(alertInstance) {\n      return function (event) {\n        if (event) {\n          event.preventDefault();\n        }\n\n        alertInstance.close(this);\n      };\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(document, EVENT_CLICK_DATA_API$7, SELECTOR_DISMISS, Alert.handleDismiss(new Alert()));\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Alert to jQuery only if jQuery is present\n   */\n\n  defineJQueryPlugin(Alert);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): button.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$b = 'button';\n  const DATA_KEY$a = 'bs.button';\n  const EVENT_KEY$a = `.${DATA_KEY$a}`;\n  const DATA_API_KEY$7 = '.data-api';\n  const CLASS_NAME_ACTIVE$3 = 'active';\n  const SELECTOR_DATA_TOGGLE$5 = '[data-bs-toggle=\"button\"]';\n  const EVENT_CLICK_DATA_API$6 = `click${EVENT_KEY$a}${DATA_API_KEY$7}`;\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Button extends BaseComponent {\n    // Getters\n    static get NAME() {\n      return NAME$b;\n    } // Public\n\n\n    toggle() {\n      // Toggle class and sync the `aria-pressed` attribute with the return value of the `.toggle()` method\n      this._element.setAttribute('aria-pressed', this._element.classList.toggle(CLASS_NAME_ACTIVE$3));\n    } // Static\n\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = Button.getOrCreateInstance(this);\n\n        if (config === 'toggle') {\n          data[config]();\n        }\n      });\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(document, EVENT_CLICK_DATA_API$6, SELECTOR_DATA_TOGGLE$5, event => {\n    event.preventDefault();\n    const button = event.target.closest(SELECTOR_DATA_TOGGLE$5);\n    const data = Button.getOrCreateInstance(button);\n    data.toggle();\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Button to jQuery only if jQuery is present\n   */\n\n  defineJQueryPlugin(Button);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): dom/manipulator.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  function normalizeData(val) {\n    if (val === 'true') {\n      return true;\n    }\n\n    if (val === 'false') {\n      return false;\n    }\n\n    if (val === Number(val).toString()) {\n      return Number(val);\n    }\n\n    if (val === '' || val === 'null') {\n      return null;\n    }\n\n    return val;\n  }\n\n  function normalizeDataKey(key) {\n    return key.replace(/[A-Z]/g, chr => `-${chr.toLowerCase()}`);\n  }\n\n  const Manipulator = {\n    setDataAttribute(element, key, value) {\n      element.setAttribute(`data-bs-${normalizeDataKey(key)}`, value);\n    },\n\n    removeDataAttribute(element, key) {\n      element.removeAttribute(`data-bs-${normalizeDataKey(key)}`);\n    },\n\n    getDataAttributes(element) {\n      if (!element) {\n        return {};\n      }\n\n      const attributes = {};\n      Object.keys(element.dataset).filter(key => key.startsWith('bs')).forEach(key => {\n        let pureKey = key.replace(/^bs/, '');\n        pureKey = pureKey.charAt(0).toLowerCase() + pureKey.slice(1, pureKey.length);\n        attributes[pureKey] = normalizeData(element.dataset[key]);\n      });\n      return attributes;\n    },\n\n    getDataAttribute(element, key) {\n      return normalizeData(element.getAttribute(`data-bs-${normalizeDataKey(key)}`));\n    },\n\n    offset(element) {\n      const rect = element.getBoundingClientRect();\n      return {\n        top: rect.top + document.body.scrollTop,\n        left: rect.left + document.body.scrollLeft\n      };\n    },\n\n    position(element) {\n      return {\n        top: element.offsetTop,\n        left: element.offsetLeft\n      };\n    }\n\n  };\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): carousel.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$a = 'carousel';\n  const DATA_KEY$9 = 'bs.carousel';\n  const EVENT_KEY$9 = `.${DATA_KEY$9}`;\n  const DATA_API_KEY$6 = '.data-api';\n  const ARROW_LEFT_KEY = 'ArrowLeft';\n  const ARROW_RIGHT_KEY = 'ArrowRight';\n  const TOUCHEVENT_COMPAT_WAIT = 500; // Time for mouse compat events to fire after touch\n\n  const SWIPE_THRESHOLD = 40;\n  const Default$9 = {\n    interval: 5000,\n    keyboard: true,\n    slide: false,\n    pause: 'hover',\n    wrap: true,\n    touch: true\n  };\n  const DefaultType$9 = {\n    interval: '(number|boolean)',\n    keyboard: 'boolean',\n    slide: '(boolean|string)',\n    pause: '(string|boolean)',\n    wrap: 'boolean',\n    touch: 'boolean'\n  };\n  const ORDER_NEXT = 'next';\n  const ORDER_PREV = 'prev';\n  const DIRECTION_LEFT = 'left';\n  const DIRECTION_RIGHT = 'right';\n  const KEY_TO_DIRECTION = {\n    [ARROW_LEFT_KEY]: DIRECTION_RIGHT,\n    [ARROW_RIGHT_KEY]: DIRECTION_LEFT\n  };\n  const EVENT_SLIDE = `slide${EVENT_KEY$9}`;\n  const EVENT_SLID = `slid${EVENT_KEY$9}`;\n  const EVENT_KEYDOWN = `keydown${EVENT_KEY$9}`;\n  const EVENT_MOUSEENTER = `mouseenter${EVENT_KEY$9}`;\n  const EVENT_MOUSELEAVE = `mouseleave${EVENT_KEY$9}`;\n  const EVENT_TOUCHSTART = `touchstart${EVENT_KEY$9}`;\n  const EVENT_TOUCHMOVE = `touchmove${EVENT_KEY$9}`;\n  const EVENT_TOUCHEND = `touchend${EVENT_KEY$9}`;\n  const EVENT_POINTERDOWN = `pointerdown${EVENT_KEY$9}`;\n  const EVENT_POINTERUP = `pointerup${EVENT_KEY$9}`;\n  const EVENT_DRAG_START = `dragstart${EVENT_KEY$9}`;\n  const EVENT_LOAD_DATA_API$2 = `load${EVENT_KEY$9}${DATA_API_KEY$6}`;\n  const EVENT_CLICK_DATA_API$5 = `click${EVENT_KEY$9}${DATA_API_KEY$6}`;\n  const CLASS_NAME_CAROUSEL = 'carousel';\n  const CLASS_NAME_ACTIVE$2 = 'active';\n  const CLASS_NAME_SLIDE = 'slide';\n  const CLASS_NAME_END = 'carousel-item-end';\n  const CLASS_NAME_START = 'carousel-item-start';\n  const CLASS_NAME_NEXT = 'carousel-item-next';\n  const CLASS_NAME_PREV = 'carousel-item-prev';\n  const CLASS_NAME_POINTER_EVENT = 'pointer-event';\n  const SELECTOR_ACTIVE$1 = '.active';\n  const SELECTOR_ACTIVE_ITEM = '.active.carousel-item';\n  const SELECTOR_ITEM = '.carousel-item';\n  const SELECTOR_ITEM_IMG = '.carousel-item img';\n  const SELECTOR_NEXT_PREV = '.carousel-item-next, .carousel-item-prev';\n  const SELECTOR_INDICATORS = '.carousel-indicators';\n  const SELECTOR_INDICATOR = '[data-bs-target]';\n  const SELECTOR_DATA_SLIDE = '[data-bs-slide], [data-bs-slide-to]';\n  const SELECTOR_DATA_RIDE = '[data-bs-ride=\"carousel\"]';\n  const POINTER_TYPE_TOUCH = 'touch';\n  const POINTER_TYPE_PEN = 'pen';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Carousel extends BaseComponent {\n    constructor(element, config) {\n      super(element);\n      this._items = null;\n      this._interval = null;\n      this._activeElement = null;\n      this._isPaused = false;\n      this._isSliding = false;\n      this.touchTimeout = null;\n      this.touchStartX = 0;\n      this.touchDeltaX = 0;\n      this._config = this._getConfig(config);\n      this._indicatorsElement = SelectorEngine.findOne(SELECTOR_INDICATORS, this._element);\n      this._touchSupported = 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0;\n      this._pointerEvent = Boolean(window.PointerEvent);\n\n      this._addEventListeners();\n    } // Getters\n\n\n    static get Default() {\n      return Default$9;\n    }\n\n    static get NAME() {\n      return NAME$a;\n    } // Public\n\n\n    next() {\n      this._slide(ORDER_NEXT);\n    }\n\n    nextWhenVisible() {\n      // Don't call next when the page isn't visible\n      // or the carousel or its parent isn't visible\n      if (!document.hidden && isVisible(this._element)) {\n        this.next();\n      }\n    }\n\n    prev() {\n      this._slide(ORDER_PREV);\n    }\n\n    pause(event) {\n      if (!event) {\n        this._isPaused = true;\n      }\n\n      if (SelectorEngine.findOne(SELECTOR_NEXT_PREV, this._element)) {\n        triggerTransitionEnd(this._element);\n        this.cycle(true);\n      }\n\n      clearInterval(this._interval);\n      this._interval = null;\n    }\n\n    cycle(event) {\n      if (!event) {\n        this._isPaused = false;\n      }\n\n      if (this._interval) {\n        clearInterval(this._interval);\n        this._interval = null;\n      }\n\n      if (this._config && this._config.interval && !this._isPaused) {\n        this._updateInterval();\n\n        this._interval = setInterval((document.visibilityState ? this.nextWhenVisible : this.next).bind(this), this._config.interval);\n      }\n    }\n\n    to(index) {\n      this._activeElement = SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element);\n\n      const activeIndex = this._getItemIndex(this._activeElement);\n\n      if (index > this._items.length - 1 || index < 0) {\n        return;\n      }\n\n      if (this._isSliding) {\n        EventHandler.one(this._element, EVENT_SLID, () => this.to(index));\n        return;\n      }\n\n      if (activeIndex === index) {\n        this.pause();\n        this.cycle();\n        return;\n      }\n\n      const order = index > activeIndex ? ORDER_NEXT : ORDER_PREV;\n\n      this._slide(order, this._items[index]);\n    } // Private\n\n\n    _getConfig(config) {\n      config = { ...Default$9,\n        ...Manipulator.getDataAttributes(this._element),\n        ...(typeof config === 'object' ? config : {})\n      };\n      typeCheckConfig(NAME$a, config, DefaultType$9);\n      return config;\n    }\n\n    _handleSwipe() {\n      const absDeltax = Math.abs(this.touchDeltaX);\n\n      if (absDeltax <= SWIPE_THRESHOLD) {\n        return;\n      }\n\n      const direction = absDeltax / this.touchDeltaX;\n      this.touchDeltaX = 0;\n\n      if (!direction) {\n        return;\n      }\n\n      this._slide(direction > 0 ? DIRECTION_RIGHT : DIRECTION_LEFT);\n    }\n\n    _addEventListeners() {\n      if (this._config.keyboard) {\n        EventHandler.on(this._element, EVENT_KEYDOWN, event => this._keydown(event));\n      }\n\n      if (this._config.pause === 'hover') {\n        EventHandler.on(this._element, EVENT_MOUSEENTER, event => this.pause(event));\n        EventHandler.on(this._element, EVENT_MOUSELEAVE, event => this.cycle(event));\n      }\n\n      if (this._config.touch && this._touchSupported) {\n        this._addTouchEventListeners();\n      }\n    }\n\n    _addTouchEventListeners() {\n      const start = event => {\n        if (this._pointerEvent && (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH)) {\n          this.touchStartX = event.clientX;\n        } else if (!this._pointerEvent) {\n          this.touchStartX = event.touches[0].clientX;\n        }\n      };\n\n      const move = event => {\n        // ensure swiping with one touch and not pinching\n        this.touchDeltaX = event.touches && event.touches.length > 1 ? 0 : event.touches[0].clientX - this.touchStartX;\n      };\n\n      const end = event => {\n        if (this._pointerEvent && (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH)) {\n          this.touchDeltaX = event.clientX - this.touchStartX;\n        }\n\n        this._handleSwipe();\n\n        if (this._config.pause === 'hover') {\n          // If it's a touch-enabled device, mouseenter/leave are fired as\n          // part of the mouse compatibility events on first tap - the carousel\n          // would stop cycling until user tapped out of it;\n          // here, we listen for touchend, explicitly pause the carousel\n          // (as if it's the second time we tap on it, mouseenter compat event\n          // is NOT fired) and after a timeout (to allow for mouse compatibility\n          // events to fire) we explicitly restart cycling\n          this.pause();\n\n          if (this.touchTimeout) {\n            clearTimeout(this.touchTimeout);\n          }\n\n          this.touchTimeout = setTimeout(event => this.cycle(event), TOUCHEVENT_COMPAT_WAIT + this._config.interval);\n        }\n      };\n\n      SelectorEngine.find(SELECTOR_ITEM_IMG, this._element).forEach(itemImg => {\n        EventHandler.on(itemImg, EVENT_DRAG_START, e => e.preventDefault());\n      });\n\n      if (this._pointerEvent) {\n        EventHandler.on(this._element, EVENT_POINTERDOWN, event => start(event));\n        EventHandler.on(this._element, EVENT_POINTERUP, event => end(event));\n\n        this._element.classList.add(CLASS_NAME_POINTER_EVENT);\n      } else {\n        EventHandler.on(this._element, EVENT_TOUCHSTART, event => start(event));\n        EventHandler.on(this._element, EVENT_TOUCHMOVE, event => move(event));\n        EventHandler.on(this._element, EVENT_TOUCHEND, event => end(event));\n      }\n    }\n\n    _keydown(event) {\n      if (/input|textarea/i.test(event.target.tagName)) {\n        return;\n      }\n\n      const direction = KEY_TO_DIRECTION[event.key];\n\n      if (direction) {\n        event.preventDefault();\n\n        this._slide(direction);\n      }\n    }\n\n    _getItemIndex(element) {\n      this._items = element && element.parentNode ? SelectorEngine.find(SELECTOR_ITEM, element.parentNode) : [];\n      return this._items.indexOf(element);\n    }\n\n    _getItemByOrder(order, activeElement) {\n      const isNext = order === ORDER_NEXT;\n      return getNextActiveElement(this._items, activeElement, isNext, this._config.wrap);\n    }\n\n    _triggerSlideEvent(relatedTarget, eventDirectionName) {\n      const targetIndex = this._getItemIndex(relatedTarget);\n\n      const fromIndex = this._getItemIndex(SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element));\n\n      return EventHandler.trigger(this._element, EVENT_SLIDE, {\n        relatedTarget,\n        direction: eventDirectionName,\n        from: fromIndex,\n        to: targetIndex\n      });\n    }\n\n    _setActiveIndicatorElement(element) {\n      if (this._indicatorsElement) {\n        const activeIndicator = SelectorEngine.findOne(SELECTOR_ACTIVE$1, this._indicatorsElement);\n        activeIndicator.classList.remove(CLASS_NAME_ACTIVE$2);\n        activeIndicator.removeAttribute('aria-current');\n        const indicators = SelectorEngine.find(SELECTOR_INDICATOR, this._indicatorsElement);\n\n        for (let i = 0; i < indicators.length; i++) {\n          if (Number.parseInt(indicators[i].getAttribute('data-bs-slide-to'), 10) === this._getItemIndex(element)) {\n            indicators[i].classList.add(CLASS_NAME_ACTIVE$2);\n            indicators[i].setAttribute('aria-current', 'true');\n            break;\n          }\n        }\n      }\n    }\n\n    _updateInterval() {\n      const element = this._activeElement || SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element);\n\n      if (!element) {\n        return;\n      }\n\n      const elementInterval = Number.parseInt(element.getAttribute('data-bs-interval'), 10);\n\n      if (elementInterval) {\n        this._config.defaultInterval = this._config.defaultInterval || this._config.interval;\n        this._config.interval = elementInterval;\n      } else {\n        this._config.interval = this._config.defaultInterval || this._config.interval;\n      }\n    }\n\n    _slide(directionOrOrder, element) {\n      const order = this._directionToOrder(directionOrOrder);\n\n      const activeElement = SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element);\n\n      const activeElementIndex = this._getItemIndex(activeElement);\n\n      const nextElement = element || this._getItemByOrder(order, activeElement);\n\n      const nextElementIndex = this._getItemIndex(nextElement);\n\n      const isCycling = Boolean(this._interval);\n      const isNext = order === ORDER_NEXT;\n      const directionalClassName = isNext ? CLASS_NAME_START : CLASS_NAME_END;\n      const orderClassName = isNext ? CLASS_NAME_NEXT : CLASS_NAME_PREV;\n\n      const eventDirectionName = this._orderToDirection(order);\n\n      if (nextElement && nextElement.classList.contains(CLASS_NAME_ACTIVE$2)) {\n        this._isSliding = false;\n        return;\n      }\n\n      if (this._isSliding) {\n        return;\n      }\n\n      const slideEvent = this._triggerSlideEvent(nextElement, eventDirectionName);\n\n      if (slideEvent.defaultPrevented) {\n        return;\n      }\n\n      if (!activeElement || !nextElement) {\n        // Some weirdness is happening, so we bail\n        return;\n      }\n\n      this._isSliding = true;\n\n      if (isCycling) {\n        this.pause();\n      }\n\n      this._setActiveIndicatorElement(nextElement);\n\n      this._activeElement = nextElement;\n\n      const triggerSlidEvent = () => {\n        EventHandler.trigger(this._element, EVENT_SLID, {\n          relatedTarget: nextElement,\n          direction: eventDirectionName,\n          from: activeElementIndex,\n          to: nextElementIndex\n        });\n      };\n\n      if (this._element.classList.contains(CLASS_NAME_SLIDE)) {\n        nextElement.classList.add(orderClassName);\n        reflow(nextElement);\n        activeElement.classList.add(directionalClassName);\n        nextElement.classList.add(directionalClassName);\n\n        const completeCallBack = () => {\n          nextElement.classList.remove(directionalClassName, orderClassName);\n          nextElement.classList.add(CLASS_NAME_ACTIVE$2);\n          activeElement.classList.remove(CLASS_NAME_ACTIVE$2, orderClassName, directionalClassName);\n          this._isSliding = false;\n          setTimeout(triggerSlidEvent, 0);\n        };\n\n        this._queueCallback(completeCallBack, activeElement, true);\n      } else {\n        activeElement.classList.remove(CLASS_NAME_ACTIVE$2);\n        nextElement.classList.add(CLASS_NAME_ACTIVE$2);\n        this._isSliding = false;\n        triggerSlidEvent();\n      }\n\n      if (isCycling) {\n        this.cycle();\n      }\n    }\n\n    _directionToOrder(direction) {\n      if (![DIRECTION_RIGHT, DIRECTION_LEFT].includes(direction)) {\n        return direction;\n      }\n\n      if (isRTL()) {\n        return direction === DIRECTION_LEFT ? ORDER_PREV : ORDER_NEXT;\n      }\n\n      return direction === DIRECTION_LEFT ? ORDER_NEXT : ORDER_PREV;\n    }\n\n    _orderToDirection(order) {\n      if (![ORDER_NEXT, ORDER_PREV].includes(order)) {\n        return order;\n      }\n\n      if (isRTL()) {\n        return order === ORDER_PREV ? DIRECTION_LEFT : DIRECTION_RIGHT;\n      }\n\n      return order === ORDER_PREV ? DIRECTION_RIGHT : DIRECTION_LEFT;\n    } // Static\n\n\n    static carouselInterface(element, config) {\n      const data = Carousel.getOrCreateInstance(element, config);\n      let {\n        _config\n      } = data;\n\n      if (typeof config === 'object') {\n        _config = { ..._config,\n          ...config\n        };\n      }\n\n      const action = typeof config === 'string' ? config : _config.slide;\n\n      if (typeof config === 'number') {\n        data.to(config);\n      } else if (typeof action === 'string') {\n        if (typeof data[action] === 'undefined') {\n          throw new TypeError(`No method named \"${action}\"`);\n        }\n\n        data[action]();\n      } else if (_config.interval && _config.ride) {\n        data.pause();\n        data.cycle();\n      }\n    }\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        Carousel.carouselInterface(this, config);\n      });\n    }\n\n    static dataApiClickHandler(event) {\n      const target = getElementFromSelector(this);\n\n      if (!target || !target.classList.contains(CLASS_NAME_CAROUSEL)) {\n        return;\n      }\n\n      const config = { ...Manipulator.getDataAttributes(target),\n        ...Manipulator.getDataAttributes(this)\n      };\n      const slideIndex = this.getAttribute('data-bs-slide-to');\n\n      if (slideIndex) {\n        config.interval = false;\n      }\n\n      Carousel.carouselInterface(target, config);\n\n      if (slideIndex) {\n        Carousel.getInstance(target).to(slideIndex);\n      }\n\n      event.preventDefault();\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(document, EVENT_CLICK_DATA_API$5, SELECTOR_DATA_SLIDE, Carousel.dataApiClickHandler);\n  EventHandler.on(window, EVENT_LOAD_DATA_API$2, () => {\n    const carousels = SelectorEngine.find(SELECTOR_DATA_RIDE);\n\n    for (let i = 0, len = carousels.length; i < len; i++) {\n      Carousel.carouselInterface(carousels[i], Carousel.getInstance(carousels[i]));\n    }\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Carousel to jQuery only if jQuery is present\n   */\n\n  defineJQueryPlugin(Carousel);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): collapse.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$9 = 'collapse';\n  const DATA_KEY$8 = 'bs.collapse';\n  const EVENT_KEY$8 = `.${DATA_KEY$8}`;\n  const DATA_API_KEY$5 = '.data-api';\n  const Default$8 = {\n    toggle: true,\n    parent: ''\n  };\n  const DefaultType$8 = {\n    toggle: 'boolean',\n    parent: '(string|element)'\n  };\n  const EVENT_SHOW$5 = `show${EVENT_KEY$8}`;\n  const EVENT_SHOWN$5 = `shown${EVENT_KEY$8}`;\n  const EVENT_HIDE$5 = `hide${EVENT_KEY$8}`;\n  const EVENT_HIDDEN$5 = `hidden${EVENT_KEY$8}`;\n  const EVENT_CLICK_DATA_API$4 = `click${EVENT_KEY$8}${DATA_API_KEY$5}`;\n  const CLASS_NAME_SHOW$8 = 'show';\n  const CLASS_NAME_COLLAPSE = 'collapse';\n  const CLASS_NAME_COLLAPSING = 'collapsing';\n  const CLASS_NAME_COLLAPSED = 'collapsed';\n  const WIDTH = 'width';\n  const HEIGHT = 'height';\n  const SELECTOR_ACTIVES = '.show, .collapsing';\n  const SELECTOR_DATA_TOGGLE$4 = '[data-bs-toggle=\"collapse\"]';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Collapse extends BaseComponent {\n    constructor(element, config) {\n      super(element);\n      this._isTransitioning = false;\n      this._config = this._getConfig(config);\n      this._triggerArray = SelectorEngine.find(`${SELECTOR_DATA_TOGGLE$4}[href=\"#${this._element.id}\"],` + `${SELECTOR_DATA_TOGGLE$4}[data-bs-target=\"#${this._element.id}\"]`);\n      const toggleList = SelectorEngine.find(SELECTOR_DATA_TOGGLE$4);\n\n      for (let i = 0, len = toggleList.length; i < len; i++) {\n        const elem = toggleList[i];\n        const selector = getSelectorFromElement(elem);\n        const filterElement = SelectorEngine.find(selector).filter(foundElem => foundElem === this._element);\n\n        if (selector !== null && filterElement.length) {\n          this._selector = selector;\n\n          this._triggerArray.push(elem);\n        }\n      }\n\n      this._parent = this._config.parent ? this._getParent() : null;\n\n      if (!this._config.parent) {\n        this._addAriaAndCollapsedClass(this._element, this._triggerArray);\n      }\n\n      if (this._config.toggle) {\n        this.toggle();\n      }\n    } // Getters\n\n\n    static get Default() {\n      return Default$8;\n    }\n\n    static get NAME() {\n      return NAME$9;\n    } // Public\n\n\n    toggle() {\n      if (this._element.classList.contains(CLASS_NAME_SHOW$8)) {\n        this.hide();\n      } else {\n        this.show();\n      }\n    }\n\n    show() {\n      if (this._isTransitioning || this._element.classList.contains(CLASS_NAME_SHOW$8)) {\n        return;\n      }\n\n      let actives;\n      let activesData;\n\n      if (this._parent) {\n        actives = SelectorEngine.find(SELECTOR_ACTIVES, this._parent).filter(elem => {\n          if (typeof this._config.parent === 'string') {\n            return elem.getAttribute('data-bs-parent') === this._config.parent;\n          }\n\n          return elem.classList.contains(CLASS_NAME_COLLAPSE);\n        });\n\n        if (actives.length === 0) {\n          actives = null;\n        }\n      }\n\n      const container = SelectorEngine.findOne(this._selector);\n\n      if (actives) {\n        const tempActiveData = actives.find(elem => container !== elem);\n        activesData = tempActiveData ? Collapse.getInstance(tempActiveData) : null;\n\n        if (activesData && activesData._isTransitioning) {\n          return;\n        }\n      }\n\n      const startEvent = EventHandler.trigger(this._element, EVENT_SHOW$5);\n\n      if (startEvent.defaultPrevented) {\n        return;\n      }\n\n      if (actives) {\n        actives.forEach(elemActive => {\n          if (container !== elemActive) {\n            Collapse.collapseInterface(elemActive, 'hide');\n          }\n\n          if (!activesData) {\n            Data.set(elemActive, DATA_KEY$8, null);\n          }\n        });\n      }\n\n      const dimension = this._getDimension();\n\n      this._element.classList.remove(CLASS_NAME_COLLAPSE);\n\n      this._element.classList.add(CLASS_NAME_COLLAPSING);\n\n      this._element.style[dimension] = 0;\n\n      if (this._triggerArray.length) {\n        this._triggerArray.forEach(element => {\n          element.classList.remove(CLASS_NAME_COLLAPSED);\n          element.setAttribute('aria-expanded', true);\n        });\n      }\n\n      this.setTransitioning(true);\n\n      const complete = () => {\n        this._element.classList.remove(CLASS_NAME_COLLAPSING);\n\n        this._element.classList.add(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$8);\n\n        this._element.style[dimension] = '';\n        this.setTransitioning(false);\n        EventHandler.trigger(this._element, EVENT_SHOWN$5);\n      };\n\n      const capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1);\n      const scrollSize = `scroll${capitalizedDimension}`;\n\n      this._queueCallback(complete, this._element, true);\n\n      this._element.style[dimension] = `${this._element[scrollSize]}px`;\n    }\n\n    hide() {\n      if (this._isTransitioning || !this._element.classList.contains(CLASS_NAME_SHOW$8)) {\n        return;\n      }\n\n      const startEvent = EventHandler.trigger(this._element, EVENT_HIDE$5);\n\n      if (startEvent.defaultPrevented) {\n        return;\n      }\n\n      const dimension = this._getDimension();\n\n      this._element.style[dimension] = `${this._element.getBoundingClientRect()[dimension]}px`;\n      reflow(this._element);\n\n      this._element.classList.add(CLASS_NAME_COLLAPSING);\n\n      this._element.classList.remove(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$8);\n\n      const triggerArrayLength = this._triggerArray.length;\n\n      if (triggerArrayLength > 0) {\n        for (let i = 0; i < triggerArrayLength; i++) {\n          const trigger = this._triggerArray[i];\n          const elem = getElementFromSelector(trigger);\n\n          if (elem && !elem.classList.contains(CLASS_NAME_SHOW$8)) {\n            trigger.classList.add(CLASS_NAME_COLLAPSED);\n            trigger.setAttribute('aria-expanded', false);\n          }\n        }\n      }\n\n      this.setTransitioning(true);\n\n      const complete = () => {\n        this.setTransitioning(false);\n\n        this._element.classList.remove(CLASS_NAME_COLLAPSING);\n\n        this._element.classList.add(CLASS_NAME_COLLAPSE);\n\n        EventHandler.trigger(this._element, EVENT_HIDDEN$5);\n      };\n\n      this._element.style[dimension] = '';\n\n      this._queueCallback(complete, this._element, true);\n    }\n\n    setTransitioning(isTransitioning) {\n      this._isTransitioning = isTransitioning;\n    } // Private\n\n\n    _getConfig(config) {\n      config = { ...Default$8,\n        ...config\n      };\n      config.toggle = Boolean(config.toggle); // Coerce string values\n\n      typeCheckConfig(NAME$9, config, DefaultType$8);\n      return config;\n    }\n\n    _getDimension() {\n      return this._element.classList.contains(WIDTH) ? WIDTH : HEIGHT;\n    }\n\n    _getParent() {\n      let {\n        parent\n      } = this._config;\n      parent = getElement(parent);\n      const selector = `${SELECTOR_DATA_TOGGLE$4}[data-bs-parent=\"${parent}\"]`;\n      SelectorEngine.find(selector, parent).forEach(element => {\n        const selected = getElementFromSelector(element);\n\n        this._addAriaAndCollapsedClass(selected, [element]);\n      });\n      return parent;\n    }\n\n    _addAriaAndCollapsedClass(element, triggerArray) {\n      if (!element || !triggerArray.length) {\n        return;\n      }\n\n      const isOpen = element.classList.contains(CLASS_NAME_SHOW$8);\n      triggerArray.forEach(elem => {\n        if (isOpen) {\n          elem.classList.remove(CLASS_NAME_COLLAPSED);\n        } else {\n          elem.classList.add(CLASS_NAME_COLLAPSED);\n        }\n\n        elem.setAttribute('aria-expanded', isOpen);\n      });\n    } // Static\n\n\n    static collapseInterface(element, config) {\n      let data = Collapse.getInstance(element);\n      const _config = { ...Default$8,\n        ...Manipulator.getDataAttributes(element),\n        ...(typeof config === 'object' && config ? config : {})\n      };\n\n      if (!data && _config.toggle && typeof config === 'string' && /show|hide/.test(config)) {\n        _config.toggle = false;\n      }\n\n      if (!data) {\n        data = new Collapse(element, _config);\n      }\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config]();\n      }\n    }\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        Collapse.collapseInterface(this, config);\n      });\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(document, EVENT_CLICK_DATA_API$4, SELECTOR_DATA_TOGGLE$4, function (event) {\n    // preventDefault only for <a> elements (which change the URL) not inside the collapsible element\n    if (event.target.tagName === 'A' || event.delegateTarget && event.delegateTarget.tagName === 'A') {\n      event.preventDefault();\n    }\n\n    const triggerData = Manipulator.getDataAttributes(this);\n    const selector = getSelectorFromElement(this);\n    const selectorElements = SelectorEngine.find(selector);\n    selectorElements.forEach(element => {\n      const data = Collapse.getInstance(element);\n      let config;\n\n      if (data) {\n        // update parent attribute\n        if (data._parent === null && typeof triggerData.parent === 'string') {\n          data._config.parent = triggerData.parent;\n          data._parent = data._getParent();\n        }\n\n        config = 'toggle';\n      } else {\n        config = triggerData;\n      }\n\n      Collapse.collapseInterface(element, config);\n    });\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Collapse to jQuery only if jQuery is present\n   */\n\n  defineJQueryPlugin(Collapse);\n\n  var top = 'top';\n  var bottom = 'bottom';\n  var right = 'right';\n  var left = 'left';\n  var auto = 'auto';\n  var basePlacements = [top, bottom, right, left];\n  var start = 'start';\n  var end = 'end';\n  var clippingParents = 'clippingParents';\n  var viewport = 'viewport';\n  var popper = 'popper';\n  var reference = 'reference';\n  var variationPlacements = /*#__PURE__*/basePlacements.reduce(function (acc, placement) {\n    return acc.concat([placement + \"-\" + start, placement + \"-\" + end]);\n  }, []);\n  var placements = /*#__PURE__*/[].concat(basePlacements, [auto]).reduce(function (acc, placement) {\n    return acc.concat([placement, placement + \"-\" + start, placement + \"-\" + end]);\n  }, []); // modifiers that need to read the DOM\n\n  var beforeRead = 'beforeRead';\n  var read = 'read';\n  var afterRead = 'afterRead'; // pure-logic modifiers\n\n  var beforeMain = 'beforeMain';\n  var main = 'main';\n  var afterMain = 'afterMain'; // modifier with the purpose to write to the DOM (or write into a framework state)\n\n  var beforeWrite = 'beforeWrite';\n  var write = 'write';\n  var afterWrite = 'afterWrite';\n  var modifierPhases = [beforeRead, read, afterRead, beforeMain, main, afterMain, beforeWrite, write, afterWrite];\n\n  function getNodeName(element) {\n    return element ? (element.nodeName || '').toLowerCase() : null;\n  }\n\n  function getWindow(node) {\n    if (node == null) {\n      return window;\n    }\n\n    if (node.toString() !== '[object Window]') {\n      var ownerDocument = node.ownerDocument;\n      return ownerDocument ? ownerDocument.defaultView || window : window;\n    }\n\n    return node;\n  }\n\n  function isElement(node) {\n    var OwnElement = getWindow(node).Element;\n    return node instanceof OwnElement || node instanceof Element;\n  }\n\n  function isHTMLElement(node) {\n    var OwnElement = getWindow(node).HTMLElement;\n    return node instanceof OwnElement || node instanceof HTMLElement;\n  }\n\n  function isShadowRoot(node) {\n    // IE 11 has no ShadowRoot\n    if (typeof ShadowRoot === 'undefined') {\n      return false;\n    }\n\n    var OwnElement = getWindow(node).ShadowRoot;\n    return node instanceof OwnElement || node instanceof ShadowRoot;\n  }\n\n  // and applies them to the HTMLElements such as popper and arrow\n\n  function applyStyles(_ref) {\n    var state = _ref.state;\n    Object.keys(state.elements).forEach(function (name) {\n      var style = state.styles[name] || {};\n      var attributes = state.attributes[name] || {};\n      var element = state.elements[name]; // arrow is optional + virtual elements\n\n      if (!isHTMLElement(element) || !getNodeName(element)) {\n        return;\n      } // Flow doesn't support to extend this property, but it's the most\n      // effective way to apply styles to an HTMLElement\n      // $FlowFixMe[cannot-write]\n\n\n      Object.assign(element.style, style);\n      Object.keys(attributes).forEach(function (name) {\n        var value = attributes[name];\n\n        if (value === false) {\n          element.removeAttribute(name);\n        } else {\n          element.setAttribute(name, value === true ? '' : value);\n        }\n      });\n    });\n  }\n\n  function effect$2(_ref2) {\n    var state = _ref2.state;\n    var initialStyles = {\n      popper: {\n        position: state.options.strategy,\n        left: '0',\n        top: '0',\n        margin: '0'\n      },\n      arrow: {\n        position: 'absolute'\n      },\n      reference: {}\n    };\n    Object.assign(state.elements.popper.style, initialStyles.popper);\n    state.styles = initialStyles;\n\n    if (state.elements.arrow) {\n      Object.assign(state.elements.arrow.style, initialStyles.arrow);\n    }\n\n    return function () {\n      Object.keys(state.elements).forEach(function (name) {\n        var element = state.elements[name];\n        var attributes = state.attributes[name] || {};\n        var styleProperties = Object.keys(state.styles.hasOwnProperty(name) ? state.styles[name] : initialStyles[name]); // Set all values to an empty string to unset them\n\n        var style = styleProperties.reduce(function (style, property) {\n          style[property] = '';\n          return style;\n        }, {}); // arrow is optional + virtual elements\n\n        if (!isHTMLElement(element) || !getNodeName(element)) {\n          return;\n        }\n\n        Object.assign(element.style, style);\n        Object.keys(attributes).forEach(function (attribute) {\n          element.removeAttribute(attribute);\n        });\n      });\n    };\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  var applyStyles$1 = {\n    name: 'applyStyles',\n    enabled: true,\n    phase: 'write',\n    fn: applyStyles,\n    effect: effect$2,\n    requires: ['computeStyles']\n  };\n\n  function getBasePlacement(placement) {\n    return placement.split('-')[0];\n  }\n\n  function getBoundingClientRect(element) {\n    var rect = element.getBoundingClientRect();\n    return {\n      width: rect.width,\n      height: rect.height,\n      top: rect.top,\n      right: rect.right,\n      bottom: rect.bottom,\n      left: rect.left,\n      x: rect.left,\n      y: rect.top\n    };\n  }\n\n  // means it doesn't take into account transforms.\n\n  function getLayoutRect(element) {\n    var clientRect = getBoundingClientRect(element); // Use the clientRect sizes if it's not been transformed.\n    // Fixes https://github.com/popperjs/popper-core/issues/1223\n\n    var width = element.offsetWidth;\n    var height = element.offsetHeight;\n\n    if (Math.abs(clientRect.width - width) <= 1) {\n      width = clientRect.width;\n    }\n\n    if (Math.abs(clientRect.height - height) <= 1) {\n      height = clientRect.height;\n    }\n\n    return {\n      x: element.offsetLeft,\n      y: element.offsetTop,\n      width: width,\n      height: height\n    };\n  }\n\n  function contains(parent, child) {\n    var rootNode = child.getRootNode && child.getRootNode(); // First, attempt with faster native method\n\n    if (parent.contains(child)) {\n      return true;\n    } // then fallback to custom implementation with Shadow DOM support\n    else if (rootNode && isShadowRoot(rootNode)) {\n        var next = child;\n\n        do {\n          if (next && parent.isSameNode(next)) {\n            return true;\n          } // $FlowFixMe[prop-missing]: need a better way to handle this...\n\n\n          next = next.parentNode || next.host;\n        } while (next);\n      } // Give up, the result is false\n\n\n    return false;\n  }\n\n  function getComputedStyle$1(element) {\n    return getWindow(element).getComputedStyle(element);\n  }\n\n  function isTableElement(element) {\n    return ['table', 'td', 'th'].indexOf(getNodeName(element)) >= 0;\n  }\n\n  function getDocumentElement(element) {\n    // $FlowFixMe[incompatible-return]: assume body is always available\n    return ((isElement(element) ? element.ownerDocument : // $FlowFixMe[prop-missing]\n    element.document) || window.document).documentElement;\n  }\n\n  function getParentNode(element) {\n    if (getNodeName(element) === 'html') {\n      return element;\n    }\n\n    return (// this is a quicker (but less type safe) way to save quite some bytes from the bundle\n      // $FlowFixMe[incompatible-return]\n      // $FlowFixMe[prop-missing]\n      element.assignedSlot || // step into the shadow DOM of the parent of a slotted node\n      element.parentNode || ( // DOM Element detected\n      isShadowRoot(element) ? element.host : null) || // ShadowRoot detected\n      // $FlowFixMe[incompatible-call]: HTMLElement is a Node\n      getDocumentElement(element) // fallback\n\n    );\n  }\n\n  function getTrueOffsetParent(element) {\n    if (!isHTMLElement(element) || // https://github.com/popperjs/popper-core/issues/837\n    getComputedStyle$1(element).position === 'fixed') {\n      return null;\n    }\n\n    return element.offsetParent;\n  } // `.offsetParent` reports `null` for fixed elements, while absolute elements\n  // return the containing block\n\n\n  function getContainingBlock(element) {\n    var isFirefox = navigator.userAgent.toLowerCase().indexOf('firefox') !== -1;\n    var isIE = navigator.userAgent.indexOf('Trident') !== -1;\n\n    if (isIE && isHTMLElement(element)) {\n      // In IE 9, 10 and 11 fixed elements containing block is always established by the viewport\n      var elementCss = getComputedStyle$1(element);\n\n      if (elementCss.position === 'fixed') {\n        return null;\n      }\n    }\n\n    var currentNode = getParentNode(element);\n\n    while (isHTMLElement(currentNode) && ['html', 'body'].indexOf(getNodeName(currentNode)) < 0) {\n      var css = getComputedStyle$1(currentNode); // This is non-exhaustive but covers the most common CSS properties that\n      // create a containing block.\n      // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n\n      if (css.transform !== 'none' || css.perspective !== 'none' || css.contain === 'paint' || ['transform', 'perspective'].indexOf(css.willChange) !== -1 || isFirefox && css.willChange === 'filter' || isFirefox && css.filter && css.filter !== 'none') {\n        return currentNode;\n      } else {\n        currentNode = currentNode.parentNode;\n      }\n    }\n\n    return null;\n  } // Gets the closest ancestor positioned element. Handles some edge cases,\n  // such as table ancestors and cross browser bugs.\n\n\n  function getOffsetParent(element) {\n    var window = getWindow(element);\n    var offsetParent = getTrueOffsetParent(element);\n\n    while (offsetParent && isTableElement(offsetParent) && getComputedStyle$1(offsetParent).position === 'static') {\n      offsetParent = getTrueOffsetParent(offsetParent);\n    }\n\n    if (offsetParent && (getNodeName(offsetParent) === 'html' || getNodeName(offsetParent) === 'body' && getComputedStyle$1(offsetParent).position === 'static')) {\n      return window;\n    }\n\n    return offsetParent || getContainingBlock(element) || window;\n  }\n\n  function getMainAxisFromPlacement(placement) {\n    return ['top', 'bottom'].indexOf(placement) >= 0 ? 'x' : 'y';\n  }\n\n  var max = Math.max;\n  var min = Math.min;\n  var round = Math.round;\n\n  function within(min$1, value, max$1) {\n    return max(min$1, min(value, max$1));\n  }\n\n  function getFreshSideObject() {\n    return {\n      top: 0,\n      right: 0,\n      bottom: 0,\n      left: 0\n    };\n  }\n\n  function mergePaddingObject(paddingObject) {\n    return Object.assign({}, getFreshSideObject(), paddingObject);\n  }\n\n  function expandToHashMap(value, keys) {\n    return keys.reduce(function (hashMap, key) {\n      hashMap[key] = value;\n      return hashMap;\n    }, {});\n  }\n\n  var toPaddingObject = function toPaddingObject(padding, state) {\n    padding = typeof padding === 'function' ? padding(Object.assign({}, state.rects, {\n      placement: state.placement\n    })) : padding;\n    return mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));\n  };\n\n  function arrow(_ref) {\n    var _state$modifiersData$;\n\n    var state = _ref.state,\n        name = _ref.name,\n        options = _ref.options;\n    var arrowElement = state.elements.arrow;\n    var popperOffsets = state.modifiersData.popperOffsets;\n    var basePlacement = getBasePlacement(state.placement);\n    var axis = getMainAxisFromPlacement(basePlacement);\n    var isVertical = [left, right].indexOf(basePlacement) >= 0;\n    var len = isVertical ? 'height' : 'width';\n\n    if (!arrowElement || !popperOffsets) {\n      return;\n    }\n\n    var paddingObject = toPaddingObject(options.padding, state);\n    var arrowRect = getLayoutRect(arrowElement);\n    var minProp = axis === 'y' ? top : left;\n    var maxProp = axis === 'y' ? bottom : right;\n    var endDiff = state.rects.reference[len] + state.rects.reference[axis] - popperOffsets[axis] - state.rects.popper[len];\n    var startDiff = popperOffsets[axis] - state.rects.reference[axis];\n    var arrowOffsetParent = getOffsetParent(arrowElement);\n    var clientSize = arrowOffsetParent ? axis === 'y' ? arrowOffsetParent.clientHeight || 0 : arrowOffsetParent.clientWidth || 0 : 0;\n    var centerToReference = endDiff / 2 - startDiff / 2; // Make sure the arrow doesn't overflow the popper if the center point is\n    // outside of the popper bounds\n\n    var min = paddingObject[minProp];\n    var max = clientSize - arrowRect[len] - paddingObject[maxProp];\n    var center = clientSize / 2 - arrowRect[len] / 2 + centerToReference;\n    var offset = within(min, center, max); // Prevents breaking syntax highlighting...\n\n    var axisProp = axis;\n    state.modifiersData[name] = (_state$modifiersData$ = {}, _state$modifiersData$[axisProp] = offset, _state$modifiersData$.centerOffset = offset - center, _state$modifiersData$);\n  }\n\n  function effect$1(_ref2) {\n    var state = _ref2.state,\n        options = _ref2.options;\n    var _options$element = options.element,\n        arrowElement = _options$element === void 0 ? '[data-popper-arrow]' : _options$element;\n\n    if (arrowElement == null) {\n      return;\n    } // CSS selector\n\n\n    if (typeof arrowElement === 'string') {\n      arrowElement = state.elements.popper.querySelector(arrowElement);\n\n      if (!arrowElement) {\n        return;\n      }\n    }\n\n    if (!contains(state.elements.popper, arrowElement)) {\n\n      return;\n    }\n\n    state.elements.arrow = arrowElement;\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  var arrow$1 = {\n    name: 'arrow',\n    enabled: true,\n    phase: 'main',\n    fn: arrow,\n    effect: effect$1,\n    requires: ['popperOffsets'],\n    requiresIfExists: ['preventOverflow']\n  };\n\n  var unsetSides = {\n    top: 'auto',\n    right: 'auto',\n    bottom: 'auto',\n    left: 'auto'\n  }; // Round the offsets to the nearest suitable subpixel based on the DPR.\n  // Zooming can change the DPR, but it seems to report a value that will\n  // cleanly divide the values into the appropriate subpixels.\n\n  function roundOffsetsByDPR(_ref) {\n    var x = _ref.x,\n        y = _ref.y;\n    var win = window;\n    var dpr = win.devicePixelRatio || 1;\n    return {\n      x: round(round(x * dpr) / dpr) || 0,\n      y: round(round(y * dpr) / dpr) || 0\n    };\n  }\n\n  function mapToStyles(_ref2) {\n    var _Object$assign2;\n\n    var popper = _ref2.popper,\n        popperRect = _ref2.popperRect,\n        placement = _ref2.placement,\n        offsets = _ref2.offsets,\n        position = _ref2.position,\n        gpuAcceleration = _ref2.gpuAcceleration,\n        adaptive = _ref2.adaptive,\n        roundOffsets = _ref2.roundOffsets;\n\n    var _ref3 = roundOffsets === true ? roundOffsetsByDPR(offsets) : typeof roundOffsets === 'function' ? roundOffsets(offsets) : offsets,\n        _ref3$x = _ref3.x,\n        x = _ref3$x === void 0 ? 0 : _ref3$x,\n        _ref3$y = _ref3.y,\n        y = _ref3$y === void 0 ? 0 : _ref3$y;\n\n    var hasX = offsets.hasOwnProperty('x');\n    var hasY = offsets.hasOwnProperty('y');\n    var sideX = left;\n    var sideY = top;\n    var win = window;\n\n    if (adaptive) {\n      var offsetParent = getOffsetParent(popper);\n      var heightProp = 'clientHeight';\n      var widthProp = 'clientWidth';\n\n      if (offsetParent === getWindow(popper)) {\n        offsetParent = getDocumentElement(popper);\n\n        if (getComputedStyle$1(offsetParent).position !== 'static') {\n          heightProp = 'scrollHeight';\n          widthProp = 'scrollWidth';\n        }\n      } // $FlowFixMe[incompatible-cast]: force type refinement, we compare offsetParent with window above, but Flow doesn't detect it\n\n\n      offsetParent = offsetParent;\n\n      if (placement === top) {\n        sideY = bottom; // $FlowFixMe[prop-missing]\n\n        y -= offsetParent[heightProp] - popperRect.height;\n        y *= gpuAcceleration ? 1 : -1;\n      }\n\n      if (placement === left) {\n        sideX = right; // $FlowFixMe[prop-missing]\n\n        x -= offsetParent[widthProp] - popperRect.width;\n        x *= gpuAcceleration ? 1 : -1;\n      }\n    }\n\n    var commonStyles = Object.assign({\n      position: position\n    }, adaptive && unsetSides);\n\n    if (gpuAcceleration) {\n      var _Object$assign;\n\n      return Object.assign({}, commonStyles, (_Object$assign = {}, _Object$assign[sideY] = hasY ? '0' : '', _Object$assign[sideX] = hasX ? '0' : '', _Object$assign.transform = (win.devicePixelRatio || 1) < 2 ? \"translate(\" + x + \"px, \" + y + \"px)\" : \"translate3d(\" + x + \"px, \" + y + \"px, 0)\", _Object$assign));\n    }\n\n    return Object.assign({}, commonStyles, (_Object$assign2 = {}, _Object$assign2[sideY] = hasY ? y + \"px\" : '', _Object$assign2[sideX] = hasX ? x + \"px\" : '', _Object$assign2.transform = '', _Object$assign2));\n  }\n\n  function computeStyles(_ref4) {\n    var state = _ref4.state,\n        options = _ref4.options;\n    var _options$gpuAccelerat = options.gpuAcceleration,\n        gpuAcceleration = _options$gpuAccelerat === void 0 ? true : _options$gpuAccelerat,\n        _options$adaptive = options.adaptive,\n        adaptive = _options$adaptive === void 0 ? true : _options$adaptive,\n        _options$roundOffsets = options.roundOffsets,\n        roundOffsets = _options$roundOffsets === void 0 ? true : _options$roundOffsets;\n\n    var commonStyles = {\n      placement: getBasePlacement(state.placement),\n      popper: state.elements.popper,\n      popperRect: state.rects.popper,\n      gpuAcceleration: gpuAcceleration\n    };\n\n    if (state.modifiersData.popperOffsets != null) {\n      state.styles.popper = Object.assign({}, state.styles.popper, mapToStyles(Object.assign({}, commonStyles, {\n        offsets: state.modifiersData.popperOffsets,\n        position: state.options.strategy,\n        adaptive: adaptive,\n        roundOffsets: roundOffsets\n      })));\n    }\n\n    if (state.modifiersData.arrow != null) {\n      state.styles.arrow = Object.assign({}, state.styles.arrow, mapToStyles(Object.assign({}, commonStyles, {\n        offsets: state.modifiersData.arrow,\n        position: 'absolute',\n        adaptive: false,\n        roundOffsets: roundOffsets\n      })));\n    }\n\n    state.attributes.popper = Object.assign({}, state.attributes.popper, {\n      'data-popper-placement': state.placement\n    });\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  var computeStyles$1 = {\n    name: 'computeStyles',\n    enabled: true,\n    phase: 'beforeWrite',\n    fn: computeStyles,\n    data: {}\n  };\n\n  var passive = {\n    passive: true\n  };\n\n  function effect(_ref) {\n    var state = _ref.state,\n        instance = _ref.instance,\n        options = _ref.options;\n    var _options$scroll = options.scroll,\n        scroll = _options$scroll === void 0 ? true : _options$scroll,\n        _options$resize = options.resize,\n        resize = _options$resize === void 0 ? true : _options$resize;\n    var window = getWindow(state.elements.popper);\n    var scrollParents = [].concat(state.scrollParents.reference, state.scrollParents.popper);\n\n    if (scroll) {\n      scrollParents.forEach(function (scrollParent) {\n        scrollParent.addEventListener('scroll', instance.update, passive);\n      });\n    }\n\n    if (resize) {\n      window.addEventListener('resize', instance.update, passive);\n    }\n\n    return function () {\n      if (scroll) {\n        scrollParents.forEach(function (scrollParent) {\n          scrollParent.removeEventListener('scroll', instance.update, passive);\n        });\n      }\n\n      if (resize) {\n        window.removeEventListener('resize', instance.update, passive);\n      }\n    };\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  var eventListeners = {\n    name: 'eventListeners',\n    enabled: true,\n    phase: 'write',\n    fn: function fn() {},\n    effect: effect,\n    data: {}\n  };\n\n  var hash$1 = {\n    left: 'right',\n    right: 'left',\n    bottom: 'top',\n    top: 'bottom'\n  };\n  function getOppositePlacement(placement) {\n    return placement.replace(/left|right|bottom|top/g, function (matched) {\n      return hash$1[matched];\n    });\n  }\n\n  var hash = {\n    start: 'end',\n    end: 'start'\n  };\n  function getOppositeVariationPlacement(placement) {\n    return placement.replace(/start|end/g, function (matched) {\n      return hash[matched];\n    });\n  }\n\n  function getWindowScroll(node) {\n    var win = getWindow(node);\n    var scrollLeft = win.pageXOffset;\n    var scrollTop = win.pageYOffset;\n    return {\n      scrollLeft: scrollLeft,\n      scrollTop: scrollTop\n    };\n  }\n\n  function getWindowScrollBarX(element) {\n    // If <html> has a CSS width greater than the viewport, then this will be\n    // incorrect for RTL.\n    // Popper 1 is broken in this case and never had a bug report so let's assume\n    // it's not an issue. I don't think anyone ever specifies width on <html>\n    // anyway.\n    // Browsers where the left scrollbar doesn't cause an issue report `0` for\n    // this (e.g. Edge 2019, IE11, Safari)\n    return getBoundingClientRect(getDocumentElement(element)).left + getWindowScroll(element).scrollLeft;\n  }\n\n  function getViewportRect(element) {\n    var win = getWindow(element);\n    var html = getDocumentElement(element);\n    var visualViewport = win.visualViewport;\n    var width = html.clientWidth;\n    var height = html.clientHeight;\n    var x = 0;\n    var y = 0; // NB: This isn't supported on iOS <= 12. If the keyboard is open, the popper\n    // can be obscured underneath it.\n    // Also, `html.clientHeight` adds the bottom bar height in Safari iOS, even\n    // if it isn't open, so if this isn't available, the popper will be detected\n    // to overflow the bottom of the screen too early.\n\n    if (visualViewport) {\n      width = visualViewport.width;\n      height = visualViewport.height; // Uses Layout Viewport (like Chrome; Safari does not currently)\n      // In Chrome, it returns a value very close to 0 (+/-) but contains rounding\n      // errors due to floating point numbers, so we need to check precision.\n      // Safari returns a number <= 0, usually < -1 when pinch-zoomed\n      // Feature detection fails in mobile emulation mode in Chrome.\n      // Math.abs(win.innerWidth / visualViewport.scale - visualViewport.width) <\n      // 0.001\n      // Fallback here: \"Not Safari\" userAgent\n\n      if (!/^((?!chrome|android).)*safari/i.test(navigator.userAgent)) {\n        x = visualViewport.offsetLeft;\n        y = visualViewport.offsetTop;\n      }\n    }\n\n    return {\n      width: width,\n      height: height,\n      x: x + getWindowScrollBarX(element),\n      y: y\n    };\n  }\n\n  // of the `<html>` and `<body>` rect bounds if horizontally scrollable\n\n  function getDocumentRect(element) {\n    var _element$ownerDocumen;\n\n    var html = getDocumentElement(element);\n    var winScroll = getWindowScroll(element);\n    var body = (_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body;\n    var width = max(html.scrollWidth, html.clientWidth, body ? body.scrollWidth : 0, body ? body.clientWidth : 0);\n    var height = max(html.scrollHeight, html.clientHeight, body ? body.scrollHeight : 0, body ? body.clientHeight : 0);\n    var x = -winScroll.scrollLeft + getWindowScrollBarX(element);\n    var y = -winScroll.scrollTop;\n\n    if (getComputedStyle$1(body || html).direction === 'rtl') {\n      x += max(html.clientWidth, body ? body.clientWidth : 0) - width;\n    }\n\n    return {\n      width: width,\n      height: height,\n      x: x,\n      y: y\n    };\n  }\n\n  function isScrollParent(element) {\n    // Firefox wants us to check `-x` and `-y` variations as well\n    var _getComputedStyle = getComputedStyle$1(element),\n        overflow = _getComputedStyle.overflow,\n        overflowX = _getComputedStyle.overflowX,\n        overflowY = _getComputedStyle.overflowY;\n\n    return /auto|scroll|overlay|hidden/.test(overflow + overflowY + overflowX);\n  }\n\n  function getScrollParent(node) {\n    if (['html', 'body', '#document'].indexOf(getNodeName(node)) >= 0) {\n      // $FlowFixMe[incompatible-return]: assume body is always available\n      return node.ownerDocument.body;\n    }\n\n    if (isHTMLElement(node) && isScrollParent(node)) {\n      return node;\n    }\n\n    return getScrollParent(getParentNode(node));\n  }\n\n  /*\n  given a DOM element, return the list of all scroll parents, up the list of ancesors\n  until we get to the top window object. This list is what we attach scroll listeners\n  to, because if any of these parent elements scroll, we'll need to re-calculate the\n  reference element's position.\n  */\n\n  function listScrollParents(element, list) {\n    var _element$ownerDocumen;\n\n    if (list === void 0) {\n      list = [];\n    }\n\n    var scrollParent = getScrollParent(element);\n    var isBody = scrollParent === ((_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body);\n    var win = getWindow(scrollParent);\n    var target = isBody ? [win].concat(win.visualViewport || [], isScrollParent(scrollParent) ? scrollParent : []) : scrollParent;\n    var updatedList = list.concat(target);\n    return isBody ? updatedList : // $FlowFixMe[incompatible-call]: isBody tells us target will be an HTMLElement here\n    updatedList.concat(listScrollParents(getParentNode(target)));\n  }\n\n  function rectToClientRect(rect) {\n    return Object.assign({}, rect, {\n      left: rect.x,\n      top: rect.y,\n      right: rect.x + rect.width,\n      bottom: rect.y + rect.height\n    });\n  }\n\n  function getInnerBoundingClientRect(element) {\n    var rect = getBoundingClientRect(element);\n    rect.top = rect.top + element.clientTop;\n    rect.left = rect.left + element.clientLeft;\n    rect.bottom = rect.top + element.clientHeight;\n    rect.right = rect.left + element.clientWidth;\n    rect.width = element.clientWidth;\n    rect.height = element.clientHeight;\n    rect.x = rect.left;\n    rect.y = rect.top;\n    return rect;\n  }\n\n  function getClientRectFromMixedType(element, clippingParent) {\n    return clippingParent === viewport ? rectToClientRect(getViewportRect(element)) : isHTMLElement(clippingParent) ? getInnerBoundingClientRect(clippingParent) : rectToClientRect(getDocumentRect(getDocumentElement(element)));\n  } // A \"clipping parent\" is an overflowable container with the characteristic of\n  // clipping (or hiding) overflowing elements with a position different from\n  // `initial`\n\n\n  function getClippingParents(element) {\n    var clippingParents = listScrollParents(getParentNode(element));\n    var canEscapeClipping = ['absolute', 'fixed'].indexOf(getComputedStyle$1(element).position) >= 0;\n    var clipperElement = canEscapeClipping && isHTMLElement(element) ? getOffsetParent(element) : element;\n\n    if (!isElement(clipperElement)) {\n      return [];\n    } // $FlowFixMe[incompatible-return]: https://github.com/facebook/flow/issues/1414\n\n\n    return clippingParents.filter(function (clippingParent) {\n      return isElement(clippingParent) && contains(clippingParent, clipperElement) && getNodeName(clippingParent) !== 'body';\n    });\n  } // Gets the maximum area that the element is visible in due to any number of\n  // clipping parents\n\n\n  function getClippingRect(element, boundary, rootBoundary) {\n    var mainClippingParents = boundary === 'clippingParents' ? getClippingParents(element) : [].concat(boundary);\n    var clippingParents = [].concat(mainClippingParents, [rootBoundary]);\n    var firstClippingParent = clippingParents[0];\n    var clippingRect = clippingParents.reduce(function (accRect, clippingParent) {\n      var rect = getClientRectFromMixedType(element, clippingParent);\n      accRect.top = max(rect.top, accRect.top);\n      accRect.right = min(rect.right, accRect.right);\n      accRect.bottom = min(rect.bottom, accRect.bottom);\n      accRect.left = max(rect.left, accRect.left);\n      return accRect;\n    }, getClientRectFromMixedType(element, firstClippingParent));\n    clippingRect.width = clippingRect.right - clippingRect.left;\n    clippingRect.height = clippingRect.bottom - clippingRect.top;\n    clippingRect.x = clippingRect.left;\n    clippingRect.y = clippingRect.top;\n    return clippingRect;\n  }\n\n  function getVariation(placement) {\n    return placement.split('-')[1];\n  }\n\n  function computeOffsets(_ref) {\n    var reference = _ref.reference,\n        element = _ref.element,\n        placement = _ref.placement;\n    var basePlacement = placement ? getBasePlacement(placement) : null;\n    var variation = placement ? getVariation(placement) : null;\n    var commonX = reference.x + reference.width / 2 - element.width / 2;\n    var commonY = reference.y + reference.height / 2 - element.height / 2;\n    var offsets;\n\n    switch (basePlacement) {\n      case top:\n        offsets = {\n          x: commonX,\n          y: reference.y - element.height\n        };\n        break;\n\n      case bottom:\n        offsets = {\n          x: commonX,\n          y: reference.y + reference.height\n        };\n        break;\n\n      case right:\n        offsets = {\n          x: reference.x + reference.width,\n          y: commonY\n        };\n        break;\n\n      case left:\n        offsets = {\n          x: reference.x - element.width,\n          y: commonY\n        };\n        break;\n\n      default:\n        offsets = {\n          x: reference.x,\n          y: reference.y\n        };\n    }\n\n    var mainAxis = basePlacement ? getMainAxisFromPlacement(basePlacement) : null;\n\n    if (mainAxis != null) {\n      var len = mainAxis === 'y' ? 'height' : 'width';\n\n      switch (variation) {\n        case start:\n          offsets[mainAxis] = offsets[mainAxis] - (reference[len] / 2 - element[len] / 2);\n          break;\n\n        case end:\n          offsets[mainAxis] = offsets[mainAxis] + (reference[len] / 2 - element[len] / 2);\n          break;\n      }\n    }\n\n    return offsets;\n  }\n\n  function detectOverflow(state, options) {\n    if (options === void 0) {\n      options = {};\n    }\n\n    var _options = options,\n        _options$placement = _options.placement,\n        placement = _options$placement === void 0 ? state.placement : _options$placement,\n        _options$boundary = _options.boundary,\n        boundary = _options$boundary === void 0 ? clippingParents : _options$boundary,\n        _options$rootBoundary = _options.rootBoundary,\n        rootBoundary = _options$rootBoundary === void 0 ? viewport : _options$rootBoundary,\n        _options$elementConte = _options.elementContext,\n        elementContext = _options$elementConte === void 0 ? popper : _options$elementConte,\n        _options$altBoundary = _options.altBoundary,\n        altBoundary = _options$altBoundary === void 0 ? false : _options$altBoundary,\n        _options$padding = _options.padding,\n        padding = _options$padding === void 0 ? 0 : _options$padding;\n    var paddingObject = mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));\n    var altContext = elementContext === popper ? reference : popper;\n    var referenceElement = state.elements.reference;\n    var popperRect = state.rects.popper;\n    var element = state.elements[altBoundary ? altContext : elementContext];\n    var clippingClientRect = getClippingRect(isElement(element) ? element : element.contextElement || getDocumentElement(state.elements.popper), boundary, rootBoundary);\n    var referenceClientRect = getBoundingClientRect(referenceElement);\n    var popperOffsets = computeOffsets({\n      reference: referenceClientRect,\n      element: popperRect,\n      strategy: 'absolute',\n      placement: placement\n    });\n    var popperClientRect = rectToClientRect(Object.assign({}, popperRect, popperOffsets));\n    var elementClientRect = elementContext === popper ? popperClientRect : referenceClientRect; // positive = overflowing the clipping rect\n    // 0 or negative = within the clipping rect\n\n    var overflowOffsets = {\n      top: clippingClientRect.top - elementClientRect.top + paddingObject.top,\n      bottom: elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom,\n      left: clippingClientRect.left - elementClientRect.left + paddingObject.left,\n      right: elementClientRect.right - clippingClientRect.right + paddingObject.right\n    };\n    var offsetData = state.modifiersData.offset; // Offsets can be applied only to the popper element\n\n    if (elementContext === popper && offsetData) {\n      var offset = offsetData[placement];\n      Object.keys(overflowOffsets).forEach(function (key) {\n        var multiply = [right, bottom].indexOf(key) >= 0 ? 1 : -1;\n        var axis = [top, bottom].indexOf(key) >= 0 ? 'y' : 'x';\n        overflowOffsets[key] += offset[axis] * multiply;\n      });\n    }\n\n    return overflowOffsets;\n  }\n\n  function computeAutoPlacement(state, options) {\n    if (options === void 0) {\n      options = {};\n    }\n\n    var _options = options,\n        placement = _options.placement,\n        boundary = _options.boundary,\n        rootBoundary = _options.rootBoundary,\n        padding = _options.padding,\n        flipVariations = _options.flipVariations,\n        _options$allowedAutoP = _options.allowedAutoPlacements,\n        allowedAutoPlacements = _options$allowedAutoP === void 0 ? placements : _options$allowedAutoP;\n    var variation = getVariation(placement);\n    var placements$1 = variation ? flipVariations ? variationPlacements : variationPlacements.filter(function (placement) {\n      return getVariation(placement) === variation;\n    }) : basePlacements;\n    var allowedPlacements = placements$1.filter(function (placement) {\n      return allowedAutoPlacements.indexOf(placement) >= 0;\n    });\n\n    if (allowedPlacements.length === 0) {\n      allowedPlacements = placements$1;\n    } // $FlowFixMe[incompatible-type]: Flow seems to have problems with two array unions...\n\n\n    var overflows = allowedPlacements.reduce(function (acc, placement) {\n      acc[placement] = detectOverflow(state, {\n        placement: placement,\n        boundary: boundary,\n        rootBoundary: rootBoundary,\n        padding: padding\n      })[getBasePlacement(placement)];\n      return acc;\n    }, {});\n    return Object.keys(overflows).sort(function (a, b) {\n      return overflows[a] - overflows[b];\n    });\n  }\n\n  function getExpandedFallbackPlacements(placement) {\n    if (getBasePlacement(placement) === auto) {\n      return [];\n    }\n\n    var oppositePlacement = getOppositePlacement(placement);\n    return [getOppositeVariationPlacement(placement), oppositePlacement, getOppositeVariationPlacement(oppositePlacement)];\n  }\n\n  function flip(_ref) {\n    var state = _ref.state,\n        options = _ref.options,\n        name = _ref.name;\n\n    if (state.modifiersData[name]._skip) {\n      return;\n    }\n\n    var _options$mainAxis = options.mainAxis,\n        checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\n        _options$altAxis = options.altAxis,\n        checkAltAxis = _options$altAxis === void 0 ? true : _options$altAxis,\n        specifiedFallbackPlacements = options.fallbackPlacements,\n        padding = options.padding,\n        boundary = options.boundary,\n        rootBoundary = options.rootBoundary,\n        altBoundary = options.altBoundary,\n        _options$flipVariatio = options.flipVariations,\n        flipVariations = _options$flipVariatio === void 0 ? true : _options$flipVariatio,\n        allowedAutoPlacements = options.allowedAutoPlacements;\n    var preferredPlacement = state.options.placement;\n    var basePlacement = getBasePlacement(preferredPlacement);\n    var isBasePlacement = basePlacement === preferredPlacement;\n    var fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipVariations ? [getOppositePlacement(preferredPlacement)] : getExpandedFallbackPlacements(preferredPlacement));\n    var placements = [preferredPlacement].concat(fallbackPlacements).reduce(function (acc, placement) {\n      return acc.concat(getBasePlacement(placement) === auto ? computeAutoPlacement(state, {\n        placement: placement,\n        boundary: boundary,\n        rootBoundary: rootBoundary,\n        padding: padding,\n        flipVariations: flipVariations,\n        allowedAutoPlacements: allowedAutoPlacements\n      }) : placement);\n    }, []);\n    var referenceRect = state.rects.reference;\n    var popperRect = state.rects.popper;\n    var checksMap = new Map();\n    var makeFallbackChecks = true;\n    var firstFittingPlacement = placements[0];\n\n    for (var i = 0; i < placements.length; i++) {\n      var placement = placements[i];\n\n      var _basePlacement = getBasePlacement(placement);\n\n      var isStartVariation = getVariation(placement) === start;\n      var isVertical = [top, bottom].indexOf(_basePlacement) >= 0;\n      var len = isVertical ? 'width' : 'height';\n      var overflow = detectOverflow(state, {\n        placement: placement,\n        boundary: boundary,\n        rootBoundary: rootBoundary,\n        altBoundary: altBoundary,\n        padding: padding\n      });\n      var mainVariationSide = isVertical ? isStartVariation ? right : left : isStartVariation ? bottom : top;\n\n      if (referenceRect[len] > popperRect[len]) {\n        mainVariationSide = getOppositePlacement(mainVariationSide);\n      }\n\n      var altVariationSide = getOppositePlacement(mainVariationSide);\n      var checks = [];\n\n      if (checkMainAxis) {\n        checks.push(overflow[_basePlacement] <= 0);\n      }\n\n      if (checkAltAxis) {\n        checks.push(overflow[mainVariationSide] <= 0, overflow[altVariationSide] <= 0);\n      }\n\n      if (checks.every(function (check) {\n        return check;\n      })) {\n        firstFittingPlacement = placement;\n        makeFallbackChecks = false;\n        break;\n      }\n\n      checksMap.set(placement, checks);\n    }\n\n    if (makeFallbackChecks) {\n      // `2` may be desired in some cases – research later\n      var numberOfChecks = flipVariations ? 3 : 1;\n\n      var _loop = function _loop(_i) {\n        var fittingPlacement = placements.find(function (placement) {\n          var checks = checksMap.get(placement);\n\n          if (checks) {\n            return checks.slice(0, _i).every(function (check) {\n              return check;\n            });\n          }\n        });\n\n        if (fittingPlacement) {\n          firstFittingPlacement = fittingPlacement;\n          return \"break\";\n        }\n      };\n\n      for (var _i = numberOfChecks; _i > 0; _i--) {\n        var _ret = _loop(_i);\n\n        if (_ret === \"break\") break;\n      }\n    }\n\n    if (state.placement !== firstFittingPlacement) {\n      state.modifiersData[name]._skip = true;\n      state.placement = firstFittingPlacement;\n      state.reset = true;\n    }\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  var flip$1 = {\n    name: 'flip',\n    enabled: true,\n    phase: 'main',\n    fn: flip,\n    requiresIfExists: ['offset'],\n    data: {\n      _skip: false\n    }\n  };\n\n  function getSideOffsets(overflow, rect, preventedOffsets) {\n    if (preventedOffsets === void 0) {\n      preventedOffsets = {\n        x: 0,\n        y: 0\n      };\n    }\n\n    return {\n      top: overflow.top - rect.height - preventedOffsets.y,\n      right: overflow.right - rect.width + preventedOffsets.x,\n      bottom: overflow.bottom - rect.height + preventedOffsets.y,\n      left: overflow.left - rect.width - preventedOffsets.x\n    };\n  }\n\n  function isAnySideFullyClipped(overflow) {\n    return [top, right, bottom, left].some(function (side) {\n      return overflow[side] >= 0;\n    });\n  }\n\n  function hide(_ref) {\n    var state = _ref.state,\n        name = _ref.name;\n    var referenceRect = state.rects.reference;\n    var popperRect = state.rects.popper;\n    var preventedOffsets = state.modifiersData.preventOverflow;\n    var referenceOverflow = detectOverflow(state, {\n      elementContext: 'reference'\n    });\n    var popperAltOverflow = detectOverflow(state, {\n      altBoundary: true\n    });\n    var referenceClippingOffsets = getSideOffsets(referenceOverflow, referenceRect);\n    var popperEscapeOffsets = getSideOffsets(popperAltOverflow, popperRect, preventedOffsets);\n    var isReferenceHidden = isAnySideFullyClipped(referenceClippingOffsets);\n    var hasPopperEscaped = isAnySideFullyClipped(popperEscapeOffsets);\n    state.modifiersData[name] = {\n      referenceClippingOffsets: referenceClippingOffsets,\n      popperEscapeOffsets: popperEscapeOffsets,\n      isReferenceHidden: isReferenceHidden,\n      hasPopperEscaped: hasPopperEscaped\n    };\n    state.attributes.popper = Object.assign({}, state.attributes.popper, {\n      'data-popper-reference-hidden': isReferenceHidden,\n      'data-popper-escaped': hasPopperEscaped\n    });\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  var hide$1 = {\n    name: 'hide',\n    enabled: true,\n    phase: 'main',\n    requiresIfExists: ['preventOverflow'],\n    fn: hide\n  };\n\n  function distanceAndSkiddingToXY(placement, rects, offset) {\n    var basePlacement = getBasePlacement(placement);\n    var invertDistance = [left, top].indexOf(basePlacement) >= 0 ? -1 : 1;\n\n    var _ref = typeof offset === 'function' ? offset(Object.assign({}, rects, {\n      placement: placement\n    })) : offset,\n        skidding = _ref[0],\n        distance = _ref[1];\n\n    skidding = skidding || 0;\n    distance = (distance || 0) * invertDistance;\n    return [left, right].indexOf(basePlacement) >= 0 ? {\n      x: distance,\n      y: skidding\n    } : {\n      x: skidding,\n      y: distance\n    };\n  }\n\n  function offset(_ref2) {\n    var state = _ref2.state,\n        options = _ref2.options,\n        name = _ref2.name;\n    var _options$offset = options.offset,\n        offset = _options$offset === void 0 ? [0, 0] : _options$offset;\n    var data = placements.reduce(function (acc, placement) {\n      acc[placement] = distanceAndSkiddingToXY(placement, state.rects, offset);\n      return acc;\n    }, {});\n    var _data$state$placement = data[state.placement],\n        x = _data$state$placement.x,\n        y = _data$state$placement.y;\n\n    if (state.modifiersData.popperOffsets != null) {\n      state.modifiersData.popperOffsets.x += x;\n      state.modifiersData.popperOffsets.y += y;\n    }\n\n    state.modifiersData[name] = data;\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  var offset$1 = {\n    name: 'offset',\n    enabled: true,\n    phase: 'main',\n    requires: ['popperOffsets'],\n    fn: offset\n  };\n\n  function popperOffsets(_ref) {\n    var state = _ref.state,\n        name = _ref.name;\n    // Offsets are the actual position the popper needs to have to be\n    // properly positioned near its reference element\n    // This is the most basic placement, and will be adjusted by\n    // the modifiers in the next step\n    state.modifiersData[name] = computeOffsets({\n      reference: state.rects.reference,\n      element: state.rects.popper,\n      strategy: 'absolute',\n      placement: state.placement\n    });\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  var popperOffsets$1 = {\n    name: 'popperOffsets',\n    enabled: true,\n    phase: 'read',\n    fn: popperOffsets,\n    data: {}\n  };\n\n  function getAltAxis(axis) {\n    return axis === 'x' ? 'y' : 'x';\n  }\n\n  function preventOverflow(_ref) {\n    var state = _ref.state,\n        options = _ref.options,\n        name = _ref.name;\n    var _options$mainAxis = options.mainAxis,\n        checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\n        _options$altAxis = options.altAxis,\n        checkAltAxis = _options$altAxis === void 0 ? false : _options$altAxis,\n        boundary = options.boundary,\n        rootBoundary = options.rootBoundary,\n        altBoundary = options.altBoundary,\n        padding = options.padding,\n        _options$tether = options.tether,\n        tether = _options$tether === void 0 ? true : _options$tether,\n        _options$tetherOffset = options.tetherOffset,\n        tetherOffset = _options$tetherOffset === void 0 ? 0 : _options$tetherOffset;\n    var overflow = detectOverflow(state, {\n      boundary: boundary,\n      rootBoundary: rootBoundary,\n      padding: padding,\n      altBoundary: altBoundary\n    });\n    var basePlacement = getBasePlacement(state.placement);\n    var variation = getVariation(state.placement);\n    var isBasePlacement = !variation;\n    var mainAxis = getMainAxisFromPlacement(basePlacement);\n    var altAxis = getAltAxis(mainAxis);\n    var popperOffsets = state.modifiersData.popperOffsets;\n    var referenceRect = state.rects.reference;\n    var popperRect = state.rects.popper;\n    var tetherOffsetValue = typeof tetherOffset === 'function' ? tetherOffset(Object.assign({}, state.rects, {\n      placement: state.placement\n    })) : tetherOffset;\n    var data = {\n      x: 0,\n      y: 0\n    };\n\n    if (!popperOffsets) {\n      return;\n    }\n\n    if (checkMainAxis || checkAltAxis) {\n      var mainSide = mainAxis === 'y' ? top : left;\n      var altSide = mainAxis === 'y' ? bottom : right;\n      var len = mainAxis === 'y' ? 'height' : 'width';\n      var offset = popperOffsets[mainAxis];\n      var min$1 = popperOffsets[mainAxis] + overflow[mainSide];\n      var max$1 = popperOffsets[mainAxis] - overflow[altSide];\n      var additive = tether ? -popperRect[len] / 2 : 0;\n      var minLen = variation === start ? referenceRect[len] : popperRect[len];\n      var maxLen = variation === start ? -popperRect[len] : -referenceRect[len]; // We need to include the arrow in the calculation so the arrow doesn't go\n      // outside the reference bounds\n\n      var arrowElement = state.elements.arrow;\n      var arrowRect = tether && arrowElement ? getLayoutRect(arrowElement) : {\n        width: 0,\n        height: 0\n      };\n      var arrowPaddingObject = state.modifiersData['arrow#persistent'] ? state.modifiersData['arrow#persistent'].padding : getFreshSideObject();\n      var arrowPaddingMin = arrowPaddingObject[mainSide];\n      var arrowPaddingMax = arrowPaddingObject[altSide]; // If the reference length is smaller than the arrow length, we don't want\n      // to include its full size in the calculation. If the reference is small\n      // and near the edge of a boundary, the popper can overflow even if the\n      // reference is not overflowing as well (e.g. virtual elements with no\n      // width or height)\n\n      var arrowLen = within(0, referenceRect[len], arrowRect[len]);\n      var minOffset = isBasePlacement ? referenceRect[len] / 2 - additive - arrowLen - arrowPaddingMin - tetherOffsetValue : minLen - arrowLen - arrowPaddingMin - tetherOffsetValue;\n      var maxOffset = isBasePlacement ? -referenceRect[len] / 2 + additive + arrowLen + arrowPaddingMax + tetherOffsetValue : maxLen + arrowLen + arrowPaddingMax + tetherOffsetValue;\n      var arrowOffsetParent = state.elements.arrow && getOffsetParent(state.elements.arrow);\n      var clientOffset = arrowOffsetParent ? mainAxis === 'y' ? arrowOffsetParent.clientTop || 0 : arrowOffsetParent.clientLeft || 0 : 0;\n      var offsetModifierValue = state.modifiersData.offset ? state.modifiersData.offset[state.placement][mainAxis] : 0;\n      var tetherMin = popperOffsets[mainAxis] + minOffset - offsetModifierValue - clientOffset;\n      var tetherMax = popperOffsets[mainAxis] + maxOffset - offsetModifierValue;\n\n      if (checkMainAxis) {\n        var preventedOffset = within(tether ? min(min$1, tetherMin) : min$1, offset, tether ? max(max$1, tetherMax) : max$1);\n        popperOffsets[mainAxis] = preventedOffset;\n        data[mainAxis] = preventedOffset - offset;\n      }\n\n      if (checkAltAxis) {\n        var _mainSide = mainAxis === 'x' ? top : left;\n\n        var _altSide = mainAxis === 'x' ? bottom : right;\n\n        var _offset = popperOffsets[altAxis];\n\n        var _min = _offset + overflow[_mainSide];\n\n        var _max = _offset - overflow[_altSide];\n\n        var _preventedOffset = within(tether ? min(_min, tetherMin) : _min, _offset, tether ? max(_max, tetherMax) : _max);\n\n        popperOffsets[altAxis] = _preventedOffset;\n        data[altAxis] = _preventedOffset - _offset;\n      }\n    }\n\n    state.modifiersData[name] = data;\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  var preventOverflow$1 = {\n    name: 'preventOverflow',\n    enabled: true,\n    phase: 'main',\n    fn: preventOverflow,\n    requiresIfExists: ['offset']\n  };\n\n  function getHTMLElementScroll(element) {\n    return {\n      scrollLeft: element.scrollLeft,\n      scrollTop: element.scrollTop\n    };\n  }\n\n  function getNodeScroll(node) {\n    if (node === getWindow(node) || !isHTMLElement(node)) {\n      return getWindowScroll(node);\n    } else {\n      return getHTMLElementScroll(node);\n    }\n  }\n\n  // Composite means it takes into account transforms as well as layout.\n\n  function getCompositeRect(elementOrVirtualElement, offsetParent, isFixed) {\n    if (isFixed === void 0) {\n      isFixed = false;\n    }\n\n    var documentElement = getDocumentElement(offsetParent);\n    var rect = getBoundingClientRect(elementOrVirtualElement);\n    var isOffsetParentAnElement = isHTMLElement(offsetParent);\n    var scroll = {\n      scrollLeft: 0,\n      scrollTop: 0\n    };\n    var offsets = {\n      x: 0,\n      y: 0\n    };\n\n    if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {\n      if (getNodeName(offsetParent) !== 'body' || // https://github.com/popperjs/popper-core/issues/1078\n      isScrollParent(documentElement)) {\n        scroll = getNodeScroll(offsetParent);\n      }\n\n      if (isHTMLElement(offsetParent)) {\n        offsets = getBoundingClientRect(offsetParent);\n        offsets.x += offsetParent.clientLeft;\n        offsets.y += offsetParent.clientTop;\n      } else if (documentElement) {\n        offsets.x = getWindowScrollBarX(documentElement);\n      }\n    }\n\n    return {\n      x: rect.left + scroll.scrollLeft - offsets.x,\n      y: rect.top + scroll.scrollTop - offsets.y,\n      width: rect.width,\n      height: rect.height\n    };\n  }\n\n  function order(modifiers) {\n    var map = new Map();\n    var visited = new Set();\n    var result = [];\n    modifiers.forEach(function (modifier) {\n      map.set(modifier.name, modifier);\n    }); // On visiting object, check for its dependencies and visit them recursively\n\n    function sort(modifier) {\n      visited.add(modifier.name);\n      var requires = [].concat(modifier.requires || [], modifier.requiresIfExists || []);\n      requires.forEach(function (dep) {\n        if (!visited.has(dep)) {\n          var depModifier = map.get(dep);\n\n          if (depModifier) {\n            sort(depModifier);\n          }\n        }\n      });\n      result.push(modifier);\n    }\n\n    modifiers.forEach(function (modifier) {\n      if (!visited.has(modifier.name)) {\n        // check for visited object\n        sort(modifier);\n      }\n    });\n    return result;\n  }\n\n  function orderModifiers(modifiers) {\n    // order based on dependencies\n    var orderedModifiers = order(modifiers); // order based on phase\n\n    return modifierPhases.reduce(function (acc, phase) {\n      return acc.concat(orderedModifiers.filter(function (modifier) {\n        return modifier.phase === phase;\n      }));\n    }, []);\n  }\n\n  function debounce(fn) {\n    var pending;\n    return function () {\n      if (!pending) {\n        pending = new Promise(function (resolve) {\n          Promise.resolve().then(function () {\n            pending = undefined;\n            resolve(fn());\n          });\n        });\n      }\n\n      return pending;\n    };\n  }\n\n  function mergeByName(modifiers) {\n    var merged = modifiers.reduce(function (merged, current) {\n      var existing = merged[current.name];\n      merged[current.name] = existing ? Object.assign({}, existing, current, {\n        options: Object.assign({}, existing.options, current.options),\n        data: Object.assign({}, existing.data, current.data)\n      }) : current;\n      return merged;\n    }, {}); // IE11 does not support Object.values\n\n    return Object.keys(merged).map(function (key) {\n      return merged[key];\n    });\n  }\n\n  var DEFAULT_OPTIONS = {\n    placement: 'bottom',\n    modifiers: [],\n    strategy: 'absolute'\n  };\n\n  function areValidElements() {\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    return !args.some(function (element) {\n      return !(element && typeof element.getBoundingClientRect === 'function');\n    });\n  }\n\n  function popperGenerator(generatorOptions) {\n    if (generatorOptions === void 0) {\n      generatorOptions = {};\n    }\n\n    var _generatorOptions = generatorOptions,\n        _generatorOptions$def = _generatorOptions.defaultModifiers,\n        defaultModifiers = _generatorOptions$def === void 0 ? [] : _generatorOptions$def,\n        _generatorOptions$def2 = _generatorOptions.defaultOptions,\n        defaultOptions = _generatorOptions$def2 === void 0 ? DEFAULT_OPTIONS : _generatorOptions$def2;\n    return function createPopper(reference, popper, options) {\n      if (options === void 0) {\n        options = defaultOptions;\n      }\n\n      var state = {\n        placement: 'bottom',\n        orderedModifiers: [],\n        options: Object.assign({}, DEFAULT_OPTIONS, defaultOptions),\n        modifiersData: {},\n        elements: {\n          reference: reference,\n          popper: popper\n        },\n        attributes: {},\n        styles: {}\n      };\n      var effectCleanupFns = [];\n      var isDestroyed = false;\n      var instance = {\n        state: state,\n        setOptions: function setOptions(options) {\n          cleanupModifierEffects();\n          state.options = Object.assign({}, defaultOptions, state.options, options);\n          state.scrollParents = {\n            reference: isElement(reference) ? listScrollParents(reference) : reference.contextElement ? listScrollParents(reference.contextElement) : [],\n            popper: listScrollParents(popper)\n          }; // Orders the modifiers based on their dependencies and `phase`\n          // properties\n\n          var orderedModifiers = orderModifiers(mergeByName([].concat(defaultModifiers, state.options.modifiers))); // Strip out disabled modifiers\n\n          state.orderedModifiers = orderedModifiers.filter(function (m) {\n            return m.enabled;\n          }); // Validate the provided modifiers so that the consumer will get warned\n\n          runModifierEffects();\n          return instance.update();\n        },\n        // Sync update – it will always be executed, even if not necessary. This\n        // is useful for low frequency updates where sync behavior simplifies the\n        // logic.\n        // For high frequency updates (e.g. `resize` and `scroll` events), always\n        // prefer the async Popper#update method\n        forceUpdate: function forceUpdate() {\n          if (isDestroyed) {\n            return;\n          }\n\n          var _state$elements = state.elements,\n              reference = _state$elements.reference,\n              popper = _state$elements.popper; // Don't proceed if `reference` or `popper` are not valid elements\n          // anymore\n\n          if (!areValidElements(reference, popper)) {\n\n            return;\n          } // Store the reference and popper rects to be read by modifiers\n\n\n          state.rects = {\n            reference: getCompositeRect(reference, getOffsetParent(popper), state.options.strategy === 'fixed'),\n            popper: getLayoutRect(popper)\n          }; // Modifiers have the ability to reset the current update cycle. The\n          // most common use case for this is the `flip` modifier changing the\n          // placement, which then needs to re-run all the modifiers, because the\n          // logic was previously ran for the previous placement and is therefore\n          // stale/incorrect\n\n          state.reset = false;\n          state.placement = state.options.placement; // On each update cycle, the `modifiersData` property for each modifier\n          // is filled with the initial data specified by the modifier. This means\n          // it doesn't persist and is fresh on each update.\n          // To ensure persistent data, use `${name}#persistent`\n\n          state.orderedModifiers.forEach(function (modifier) {\n            return state.modifiersData[modifier.name] = Object.assign({}, modifier.data);\n          });\n\n          for (var index = 0; index < state.orderedModifiers.length; index++) {\n\n            if (state.reset === true) {\n              state.reset = false;\n              index = -1;\n              continue;\n            }\n\n            var _state$orderedModifie = state.orderedModifiers[index],\n                fn = _state$orderedModifie.fn,\n                _state$orderedModifie2 = _state$orderedModifie.options,\n                _options = _state$orderedModifie2 === void 0 ? {} : _state$orderedModifie2,\n                name = _state$orderedModifie.name;\n\n            if (typeof fn === 'function') {\n              state = fn({\n                state: state,\n                options: _options,\n                name: name,\n                instance: instance\n              }) || state;\n            }\n          }\n        },\n        // Async and optimistically optimized update – it will not be executed if\n        // not necessary (debounced to run at most once-per-tick)\n        update: debounce(function () {\n          return new Promise(function (resolve) {\n            instance.forceUpdate();\n            resolve(state);\n          });\n        }),\n        destroy: function destroy() {\n          cleanupModifierEffects();\n          isDestroyed = true;\n        }\n      };\n\n      if (!areValidElements(reference, popper)) {\n\n        return instance;\n      }\n\n      instance.setOptions(options).then(function (state) {\n        if (!isDestroyed && options.onFirstUpdate) {\n          options.onFirstUpdate(state);\n        }\n      }); // Modifiers have the ability to execute arbitrary code before the first\n      // update cycle runs. They will be executed in the same order as the update\n      // cycle. This is useful when a modifier adds some persistent data that\n      // other modifiers need to use, but the modifier is run after the dependent\n      // one.\n\n      function runModifierEffects() {\n        state.orderedModifiers.forEach(function (_ref3) {\n          var name = _ref3.name,\n              _ref3$options = _ref3.options,\n              options = _ref3$options === void 0 ? {} : _ref3$options,\n              effect = _ref3.effect;\n\n          if (typeof effect === 'function') {\n            var cleanupFn = effect({\n              state: state,\n              name: name,\n              instance: instance,\n              options: options\n            });\n\n            var noopFn = function noopFn() {};\n\n            effectCleanupFns.push(cleanupFn || noopFn);\n          }\n        });\n      }\n\n      function cleanupModifierEffects() {\n        effectCleanupFns.forEach(function (fn) {\n          return fn();\n        });\n        effectCleanupFns = [];\n      }\n\n      return instance;\n    };\n  }\n  var createPopper$2 = /*#__PURE__*/popperGenerator(); // eslint-disable-next-line import/no-unused-modules\n\n  var defaultModifiers$1 = [eventListeners, popperOffsets$1, computeStyles$1, applyStyles$1];\n  var createPopper$1 = /*#__PURE__*/popperGenerator({\n    defaultModifiers: defaultModifiers$1\n  }); // eslint-disable-next-line import/no-unused-modules\n\n  var defaultModifiers = [eventListeners, popperOffsets$1, computeStyles$1, applyStyles$1, offset$1, flip$1, preventOverflow$1, arrow$1, hide$1];\n  var createPopper = /*#__PURE__*/popperGenerator({\n    defaultModifiers: defaultModifiers\n  }); // eslint-disable-next-line import/no-unused-modules\n\n  var Popper = /*#__PURE__*/Object.freeze({\n    __proto__: null,\n    popperGenerator: popperGenerator,\n    detectOverflow: detectOverflow,\n    createPopperBase: createPopper$2,\n    createPopper: createPopper,\n    createPopperLite: createPopper$1,\n    top: top,\n    bottom: bottom,\n    right: right,\n    left: left,\n    auto: auto,\n    basePlacements: basePlacements,\n    start: start,\n    end: end,\n    clippingParents: clippingParents,\n    viewport: viewport,\n    popper: popper,\n    reference: reference,\n    variationPlacements: variationPlacements,\n    placements: placements,\n    beforeRead: beforeRead,\n    read: read,\n    afterRead: afterRead,\n    beforeMain: beforeMain,\n    main: main,\n    afterMain: afterMain,\n    beforeWrite: beforeWrite,\n    write: write,\n    afterWrite: afterWrite,\n    modifierPhases: modifierPhases,\n    applyStyles: applyStyles$1,\n    arrow: arrow$1,\n    computeStyles: computeStyles$1,\n    eventListeners: eventListeners,\n    flip: flip$1,\n    hide: hide$1,\n    offset: offset$1,\n    popperOffsets: popperOffsets$1,\n    preventOverflow: preventOverflow$1\n  });\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): dropdown.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$8 = 'dropdown';\n  const DATA_KEY$7 = 'bs.dropdown';\n  const EVENT_KEY$7 = `.${DATA_KEY$7}`;\n  const DATA_API_KEY$4 = '.data-api';\n  const ESCAPE_KEY$2 = 'Escape';\n  const SPACE_KEY = 'Space';\n  const TAB_KEY = 'Tab';\n  const ARROW_UP_KEY = 'ArrowUp';\n  const ARROW_DOWN_KEY = 'ArrowDown';\n  const RIGHT_MOUSE_BUTTON = 2; // MouseEvent.button value for the secondary button, usually the right button\n\n  const REGEXP_KEYDOWN = new RegExp(`${ARROW_UP_KEY}|${ARROW_DOWN_KEY}|${ESCAPE_KEY$2}`);\n  const EVENT_HIDE$4 = `hide${EVENT_KEY$7}`;\n  const EVENT_HIDDEN$4 = `hidden${EVENT_KEY$7}`;\n  const EVENT_SHOW$4 = `show${EVENT_KEY$7}`;\n  const EVENT_SHOWN$4 = `shown${EVENT_KEY$7}`;\n  const EVENT_CLICK = `click${EVENT_KEY$7}`;\n  const EVENT_CLICK_DATA_API$3 = `click${EVENT_KEY$7}${DATA_API_KEY$4}`;\n  const EVENT_KEYDOWN_DATA_API = `keydown${EVENT_KEY$7}${DATA_API_KEY$4}`;\n  const EVENT_KEYUP_DATA_API = `keyup${EVENT_KEY$7}${DATA_API_KEY$4}`;\n  const CLASS_NAME_SHOW$7 = 'show';\n  const CLASS_NAME_DROPUP = 'dropup';\n  const CLASS_NAME_DROPEND = 'dropend';\n  const CLASS_NAME_DROPSTART = 'dropstart';\n  const CLASS_NAME_NAVBAR = 'navbar';\n  const SELECTOR_DATA_TOGGLE$3 = '[data-bs-toggle=\"dropdown\"]';\n  const SELECTOR_MENU = '.dropdown-menu';\n  const SELECTOR_NAVBAR_NAV = '.navbar-nav';\n  const SELECTOR_VISIBLE_ITEMS = '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)';\n  const PLACEMENT_TOP = isRTL() ? 'top-end' : 'top-start';\n  const PLACEMENT_TOPEND = isRTL() ? 'top-start' : 'top-end';\n  const PLACEMENT_BOTTOM = isRTL() ? 'bottom-end' : 'bottom-start';\n  const PLACEMENT_BOTTOMEND = isRTL() ? 'bottom-start' : 'bottom-end';\n  const PLACEMENT_RIGHT = isRTL() ? 'left-start' : 'right-start';\n  const PLACEMENT_LEFT = isRTL() ? 'right-start' : 'left-start';\n  const Default$7 = {\n    offset: [0, 2],\n    boundary: 'clippingParents',\n    reference: 'toggle',\n    display: 'dynamic',\n    popperConfig: null,\n    autoClose: true\n  };\n  const DefaultType$7 = {\n    offset: '(array|string|function)',\n    boundary: '(string|element)',\n    reference: '(string|element|object)',\n    display: 'string',\n    popperConfig: '(null|object|function)',\n    autoClose: '(boolean|string)'\n  };\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Dropdown extends BaseComponent {\n    constructor(element, config) {\n      super(element);\n      this._popper = null;\n      this._config = this._getConfig(config);\n      this._menu = this._getMenuElement();\n      this._inNavbar = this._detectNavbar();\n\n      this._addEventListeners();\n    } // Getters\n\n\n    static get Default() {\n      return Default$7;\n    }\n\n    static get DefaultType() {\n      return DefaultType$7;\n    }\n\n    static get NAME() {\n      return NAME$8;\n    } // Public\n\n\n    toggle() {\n      if (isDisabled(this._element)) {\n        return;\n      }\n\n      const isActive = this._element.classList.contains(CLASS_NAME_SHOW$7);\n\n      if (isActive) {\n        this.hide();\n        return;\n      }\n\n      this.show();\n    }\n\n    show() {\n      if (isDisabled(this._element) || this._menu.classList.contains(CLASS_NAME_SHOW$7)) {\n        return;\n      }\n\n      const parent = Dropdown.getParentFromElement(this._element);\n      const relatedTarget = {\n        relatedTarget: this._element\n      };\n      const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$4, relatedTarget);\n\n      if (showEvent.defaultPrevented) {\n        return;\n      } // Totally disable Popper for Dropdowns in Navbar\n\n\n      if (this._inNavbar) {\n        Manipulator.setDataAttribute(this._menu, 'popper', 'none');\n      } else {\n        if (typeof Popper === 'undefined') {\n          throw new TypeError('Bootstrap\\'s dropdowns require Popper (https://popper.js.org)');\n        }\n\n        let referenceElement = this._element;\n\n        if (this._config.reference === 'parent') {\n          referenceElement = parent;\n        } else if (isElement$1(this._config.reference)) {\n          referenceElement = getElement(this._config.reference);\n        } else if (typeof this._config.reference === 'object') {\n          referenceElement = this._config.reference;\n        }\n\n        const popperConfig = this._getPopperConfig();\n\n        const isDisplayStatic = popperConfig.modifiers.find(modifier => modifier.name === 'applyStyles' && modifier.enabled === false);\n        this._popper = createPopper(referenceElement, this._menu, popperConfig);\n\n        if (isDisplayStatic) {\n          Manipulator.setDataAttribute(this._menu, 'popper', 'static');\n        }\n      } // If this is a touch-enabled device we add extra\n      // empty mouseover listeners to the body's immediate children;\n      // only needed because of broken event delegation on iOS\n      // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n\n\n      if ('ontouchstart' in document.documentElement && !parent.closest(SELECTOR_NAVBAR_NAV)) {\n        [].concat(...document.body.children).forEach(elem => EventHandler.on(elem, 'mouseover', noop));\n      }\n\n      this._element.focus();\n\n      this._element.setAttribute('aria-expanded', true);\n\n      this._menu.classList.toggle(CLASS_NAME_SHOW$7);\n\n      this._element.classList.toggle(CLASS_NAME_SHOW$7);\n\n      EventHandler.trigger(this._element, EVENT_SHOWN$4, relatedTarget);\n    }\n\n    hide() {\n      if (isDisabled(this._element) || !this._menu.classList.contains(CLASS_NAME_SHOW$7)) {\n        return;\n      }\n\n      const relatedTarget = {\n        relatedTarget: this._element\n      };\n\n      this._completeHide(relatedTarget);\n    }\n\n    dispose() {\n      if (this._popper) {\n        this._popper.destroy();\n      }\n\n      super.dispose();\n    }\n\n    update() {\n      this._inNavbar = this._detectNavbar();\n\n      if (this._popper) {\n        this._popper.update();\n      }\n    } // Private\n\n\n    _addEventListeners() {\n      EventHandler.on(this._element, EVENT_CLICK, event => {\n        event.preventDefault();\n        this.toggle();\n      });\n    }\n\n    _completeHide(relatedTarget) {\n      const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$4, relatedTarget);\n\n      if (hideEvent.defaultPrevented) {\n        return;\n      } // If this is a touch-enabled device we remove the extra\n      // empty mouseover listeners we added for iOS support\n\n\n      if ('ontouchstart' in document.documentElement) {\n        [].concat(...document.body.children).forEach(elem => EventHandler.off(elem, 'mouseover', noop));\n      }\n\n      if (this._popper) {\n        this._popper.destroy();\n      }\n\n      this._menu.classList.remove(CLASS_NAME_SHOW$7);\n\n      this._element.classList.remove(CLASS_NAME_SHOW$7);\n\n      this._element.setAttribute('aria-expanded', 'false');\n\n      Manipulator.removeDataAttribute(this._menu, 'popper');\n      EventHandler.trigger(this._element, EVENT_HIDDEN$4, relatedTarget);\n    }\n\n    _getConfig(config) {\n      config = { ...this.constructor.Default,\n        ...Manipulator.getDataAttributes(this._element),\n        ...config\n      };\n      typeCheckConfig(NAME$8, config, this.constructor.DefaultType);\n\n      if (typeof config.reference === 'object' && !isElement$1(config.reference) && typeof config.reference.getBoundingClientRect !== 'function') {\n        // Popper virtual elements require a getBoundingClientRect method\n        throw new TypeError(`${NAME$8.toUpperCase()}: Option \"reference\" provided type \"object\" without a required \"getBoundingClientRect\" method.`);\n      }\n\n      return config;\n    }\n\n    _getMenuElement() {\n      return SelectorEngine.next(this._element, SELECTOR_MENU)[0];\n    }\n\n    _getPlacement() {\n      const parentDropdown = this._element.parentNode;\n\n      if (parentDropdown.classList.contains(CLASS_NAME_DROPEND)) {\n        return PLACEMENT_RIGHT;\n      }\n\n      if (parentDropdown.classList.contains(CLASS_NAME_DROPSTART)) {\n        return PLACEMENT_LEFT;\n      } // We need to trim the value because custom properties can also include spaces\n\n\n      const isEnd = getComputedStyle(this._menu).getPropertyValue('--bs-position').trim() === 'end';\n\n      if (parentDropdown.classList.contains(CLASS_NAME_DROPUP)) {\n        return isEnd ? PLACEMENT_TOPEND : PLACEMENT_TOP;\n      }\n\n      return isEnd ? PLACEMENT_BOTTOMEND : PLACEMENT_BOTTOM;\n    }\n\n    _detectNavbar() {\n      return this._element.closest(`.${CLASS_NAME_NAVBAR}`) !== null;\n    }\n\n    _getOffset() {\n      const {\n        offset\n      } = this._config;\n\n      if (typeof offset === 'string') {\n        return offset.split(',').map(val => Number.parseInt(val, 10));\n      }\n\n      if (typeof offset === 'function') {\n        return popperData => offset(popperData, this._element);\n      }\n\n      return offset;\n    }\n\n    _getPopperConfig() {\n      const defaultBsPopperConfig = {\n        placement: this._getPlacement(),\n        modifiers: [{\n          name: 'preventOverflow',\n          options: {\n            boundary: this._config.boundary\n          }\n        }, {\n          name: 'offset',\n          options: {\n            offset: this._getOffset()\n          }\n        }]\n      }; // Disable Popper if we have a static display\n\n      if (this._config.display === 'static') {\n        defaultBsPopperConfig.modifiers = [{\n          name: 'applyStyles',\n          enabled: false\n        }];\n      }\n\n      return { ...defaultBsPopperConfig,\n        ...(typeof this._config.popperConfig === 'function' ? this._config.popperConfig(defaultBsPopperConfig) : this._config.popperConfig)\n      };\n    }\n\n    _selectMenuItem({\n      key,\n      target\n    }) {\n      const items = SelectorEngine.find(SELECTOR_VISIBLE_ITEMS, this._menu).filter(isVisible);\n\n      if (!items.length) {\n        return;\n      } // if target isn't included in items (e.g. when expanding the dropdown)\n      // allow cycling to get the last item in case key equals ARROW_UP_KEY\n\n\n      getNextActiveElement(items, target, key === ARROW_DOWN_KEY, !items.includes(target)).focus();\n    } // Static\n\n\n    static dropdownInterface(element, config) {\n      const data = Dropdown.getOrCreateInstance(element, config);\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config]();\n      }\n    }\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        Dropdown.dropdownInterface(this, config);\n      });\n    }\n\n    static clearMenus(event) {\n      if (event && (event.button === RIGHT_MOUSE_BUTTON || event.type === 'keyup' && event.key !== TAB_KEY)) {\n        return;\n      }\n\n      const toggles = SelectorEngine.find(SELECTOR_DATA_TOGGLE$3);\n\n      for (let i = 0, len = toggles.length; i < len; i++) {\n        const context = Dropdown.getInstance(toggles[i]);\n\n        if (!context || context._config.autoClose === false) {\n          continue;\n        }\n\n        if (!context._element.classList.contains(CLASS_NAME_SHOW$7)) {\n          continue;\n        }\n\n        const relatedTarget = {\n          relatedTarget: context._element\n        };\n\n        if (event) {\n          const composedPath = event.composedPath();\n          const isMenuTarget = composedPath.includes(context._menu);\n\n          if (composedPath.includes(context._element) || context._config.autoClose === 'inside' && !isMenuTarget || context._config.autoClose === 'outside' && isMenuTarget) {\n            continue;\n          } // Tab navigation through the dropdown menu or events from contained inputs shouldn't close the menu\n\n\n          if (context._menu.contains(event.target) && (event.type === 'keyup' && event.key === TAB_KEY || /input|select|option|textarea|form/i.test(event.target.tagName))) {\n            continue;\n          }\n\n          if (event.type === 'click') {\n            relatedTarget.clickEvent = event;\n          }\n        }\n\n        context._completeHide(relatedTarget);\n      }\n    }\n\n    static getParentFromElement(element) {\n      return getElementFromSelector(element) || element.parentNode;\n    }\n\n    static dataApiKeydownHandler(event) {\n      // If not input/textarea:\n      //  - And not a key in REGEXP_KEYDOWN => not a dropdown command\n      // If input/textarea:\n      //  - If space key => not a dropdown command\n      //  - If key is other than escape\n      //    - If key is not up or down => not a dropdown command\n      //    - If trigger inside the menu => not a dropdown command\n      if (/input|textarea/i.test(event.target.tagName) ? event.key === SPACE_KEY || event.key !== ESCAPE_KEY$2 && (event.key !== ARROW_DOWN_KEY && event.key !== ARROW_UP_KEY || event.target.closest(SELECTOR_MENU)) : !REGEXP_KEYDOWN.test(event.key)) {\n        return;\n      }\n\n      const isActive = this.classList.contains(CLASS_NAME_SHOW$7);\n\n      if (!isActive && event.key === ESCAPE_KEY$2) {\n        return;\n      }\n\n      event.preventDefault();\n      event.stopPropagation();\n\n      if (isDisabled(this)) {\n        return;\n      }\n\n      const getToggleButton = () => this.matches(SELECTOR_DATA_TOGGLE$3) ? this : SelectorEngine.prev(this, SELECTOR_DATA_TOGGLE$3)[0];\n\n      if (event.key === ESCAPE_KEY$2) {\n        getToggleButton().focus();\n        Dropdown.clearMenus();\n        return;\n      }\n\n      if (event.key === ARROW_UP_KEY || event.key === ARROW_DOWN_KEY) {\n        if (!isActive) {\n          getToggleButton().click();\n        }\n\n        Dropdown.getInstance(getToggleButton())._selectMenuItem(event);\n\n        return;\n      }\n\n      if (!isActive || event.key === SPACE_KEY) {\n        Dropdown.clearMenus();\n      }\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_DATA_TOGGLE$3, Dropdown.dataApiKeydownHandler);\n  EventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown.dataApiKeydownHandler);\n  EventHandler.on(document, EVENT_CLICK_DATA_API$3, Dropdown.clearMenus);\n  EventHandler.on(document, EVENT_KEYUP_DATA_API, Dropdown.clearMenus);\n  EventHandler.on(document, EVENT_CLICK_DATA_API$3, SELECTOR_DATA_TOGGLE$3, function (event) {\n    event.preventDefault();\n    Dropdown.dropdownInterface(this);\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Dropdown to jQuery only if jQuery is present\n   */\n\n  defineJQueryPlugin(Dropdown);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): util/scrollBar.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  const SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top';\n  const SELECTOR_STICKY_CONTENT = '.sticky-top';\n\n  class ScrollBarHelper {\n    constructor() {\n      this._element = document.body;\n    }\n\n    getWidth() {\n      // https://developer.mozilla.org/en-US/docs/Web/API/Window/innerWidth#usage_notes\n      const documentWidth = document.documentElement.clientWidth;\n      return Math.abs(window.innerWidth - documentWidth);\n    }\n\n    hide() {\n      const width = this.getWidth();\n\n      this._disableOverFlow(); // give padding to element to balance the hidden scrollbar width\n\n\n      this._setElementAttributes(this._element, 'paddingRight', calculatedValue => calculatedValue + width); // trick: We adjust positive paddingRight and negative marginRight to sticky-top elements to keep showing fullwidth\n\n\n      this._setElementAttributes(SELECTOR_FIXED_CONTENT, 'paddingRight', calculatedValue => calculatedValue + width);\n\n      this._setElementAttributes(SELECTOR_STICKY_CONTENT, 'marginRight', calculatedValue => calculatedValue - width);\n    }\n\n    _disableOverFlow() {\n      this._saveInitialAttribute(this._element, 'overflow');\n\n      this._element.style.overflow = 'hidden';\n    }\n\n    _setElementAttributes(selector, styleProp, callback) {\n      const scrollbarWidth = this.getWidth();\n\n      const manipulationCallBack = element => {\n        if (element !== this._element && window.innerWidth > element.clientWidth + scrollbarWidth) {\n          return;\n        }\n\n        this._saveInitialAttribute(element, styleProp);\n\n        const calculatedValue = window.getComputedStyle(element)[styleProp];\n        element.style[styleProp] = `${callback(Number.parseFloat(calculatedValue))}px`;\n      };\n\n      this._applyManipulationCallback(selector, manipulationCallBack);\n    }\n\n    reset() {\n      this._resetElementAttributes(this._element, 'overflow');\n\n      this._resetElementAttributes(this._element, 'paddingRight');\n\n      this._resetElementAttributes(SELECTOR_FIXED_CONTENT, 'paddingRight');\n\n      this._resetElementAttributes(SELECTOR_STICKY_CONTENT, 'marginRight');\n    }\n\n    _saveInitialAttribute(element, styleProp) {\n      const actualValue = element.style[styleProp];\n\n      if (actualValue) {\n        Manipulator.setDataAttribute(element, styleProp, actualValue);\n      }\n    }\n\n    _resetElementAttributes(selector, styleProp) {\n      const manipulationCallBack = element => {\n        const value = Manipulator.getDataAttribute(element, styleProp);\n\n        if (typeof value === 'undefined') {\n          element.style.removeProperty(styleProp);\n        } else {\n          Manipulator.removeDataAttribute(element, styleProp);\n          element.style[styleProp] = value;\n        }\n      };\n\n      this._applyManipulationCallback(selector, manipulationCallBack);\n    }\n\n    _applyManipulationCallback(selector, callBack) {\n      if (isElement$1(selector)) {\n        callBack(selector);\n      } else {\n        SelectorEngine.find(selector, this._element).forEach(callBack);\n      }\n    }\n\n    isOverflowing() {\n      return this.getWidth() > 0;\n    }\n\n  }\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): util/backdrop.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  const Default$6 = {\n    isVisible: true,\n    // if false, we use the backdrop helper without adding any element to the dom\n    isAnimated: false,\n    rootElement: 'body',\n    // give the choice to place backdrop under different elements\n    clickCallback: null\n  };\n  const DefaultType$6 = {\n    isVisible: 'boolean',\n    isAnimated: 'boolean',\n    rootElement: '(element|string)',\n    clickCallback: '(function|null)'\n  };\n  const NAME$7 = 'backdrop';\n  const CLASS_NAME_BACKDROP = 'modal-backdrop';\n  const CLASS_NAME_FADE$5 = 'fade';\n  const CLASS_NAME_SHOW$6 = 'show';\n  const EVENT_MOUSEDOWN = `mousedown.bs.${NAME$7}`;\n\n  class Backdrop {\n    constructor(config) {\n      this._config = this._getConfig(config);\n      this._isAppended = false;\n      this._element = null;\n    }\n\n    show(callback) {\n      if (!this._config.isVisible) {\n        execute(callback);\n        return;\n      }\n\n      this._append();\n\n      if (this._config.isAnimated) {\n        reflow(this._getElement());\n      }\n\n      this._getElement().classList.add(CLASS_NAME_SHOW$6);\n\n      this._emulateAnimation(() => {\n        execute(callback);\n      });\n    }\n\n    hide(callback) {\n      if (!this._config.isVisible) {\n        execute(callback);\n        return;\n      }\n\n      this._getElement().classList.remove(CLASS_NAME_SHOW$6);\n\n      this._emulateAnimation(() => {\n        this.dispose();\n        execute(callback);\n      });\n    } // Private\n\n\n    _getElement() {\n      if (!this._element) {\n        const backdrop = document.createElement('div');\n        backdrop.className = CLASS_NAME_BACKDROP;\n\n        if (this._config.isAnimated) {\n          backdrop.classList.add(CLASS_NAME_FADE$5);\n        }\n\n        this._element = backdrop;\n      }\n\n      return this._element;\n    }\n\n    _getConfig(config) {\n      config = { ...Default$6,\n        ...(typeof config === 'object' ? config : {})\n      }; // use getElement() with the default \"body\" to get a fresh Element on each instantiation\n\n      config.rootElement = getElement(config.rootElement);\n      typeCheckConfig(NAME$7, config, DefaultType$6);\n      return config;\n    }\n\n    _append() {\n      if (this._isAppended) {\n        return;\n      }\n\n      this._config.rootElement.appendChild(this._getElement());\n\n      EventHandler.on(this._getElement(), EVENT_MOUSEDOWN, () => {\n        execute(this._config.clickCallback);\n      });\n      this._isAppended = true;\n    }\n\n    dispose() {\n      if (!this._isAppended) {\n        return;\n      }\n\n      EventHandler.off(this._element, EVENT_MOUSEDOWN);\n\n      this._element.remove();\n\n      this._isAppended = false;\n    }\n\n    _emulateAnimation(callback) {\n      executeAfterTransition(callback, this._getElement(), this._config.isAnimated);\n    }\n\n  }\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): modal.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$6 = 'modal';\n  const DATA_KEY$6 = 'bs.modal';\n  const EVENT_KEY$6 = `.${DATA_KEY$6}`;\n  const DATA_API_KEY$3 = '.data-api';\n  const ESCAPE_KEY$1 = 'Escape';\n  const Default$5 = {\n    backdrop: true,\n    keyboard: true,\n    focus: true\n  };\n  const DefaultType$5 = {\n    backdrop: '(boolean|string)',\n    keyboard: 'boolean',\n    focus: 'boolean'\n  };\n  const EVENT_HIDE$3 = `hide${EVENT_KEY$6}`;\n  const EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY$6}`;\n  const EVENT_HIDDEN$3 = `hidden${EVENT_KEY$6}`;\n  const EVENT_SHOW$3 = `show${EVENT_KEY$6}`;\n  const EVENT_SHOWN$3 = `shown${EVENT_KEY$6}`;\n  const EVENT_FOCUSIN$2 = `focusin${EVENT_KEY$6}`;\n  const EVENT_RESIZE = `resize${EVENT_KEY$6}`;\n  const EVENT_CLICK_DISMISS$2 = `click.dismiss${EVENT_KEY$6}`;\n  const EVENT_KEYDOWN_DISMISS$1 = `keydown.dismiss${EVENT_KEY$6}`;\n  const EVENT_MOUSEUP_DISMISS = `mouseup.dismiss${EVENT_KEY$6}`;\n  const EVENT_MOUSEDOWN_DISMISS = `mousedown.dismiss${EVENT_KEY$6}`;\n  const EVENT_CLICK_DATA_API$2 = `click${EVENT_KEY$6}${DATA_API_KEY$3}`;\n  const CLASS_NAME_OPEN = 'modal-open';\n  const CLASS_NAME_FADE$4 = 'fade';\n  const CLASS_NAME_SHOW$5 = 'show';\n  const CLASS_NAME_STATIC = 'modal-static';\n  const SELECTOR_DIALOG = '.modal-dialog';\n  const SELECTOR_MODAL_BODY = '.modal-body';\n  const SELECTOR_DATA_TOGGLE$2 = '[data-bs-toggle=\"modal\"]';\n  const SELECTOR_DATA_DISMISS$2 = '[data-bs-dismiss=\"modal\"]';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Modal extends BaseComponent {\n    constructor(element, config) {\n      super(element);\n      this._config = this._getConfig(config);\n      this._dialog = SelectorEngine.findOne(SELECTOR_DIALOG, this._element);\n      this._backdrop = this._initializeBackDrop();\n      this._isShown = false;\n      this._ignoreBackdropClick = false;\n      this._isTransitioning = false;\n      this._scrollBar = new ScrollBarHelper();\n    } // Getters\n\n\n    static get Default() {\n      return Default$5;\n    }\n\n    static get NAME() {\n      return NAME$6;\n    } // Public\n\n\n    toggle(relatedTarget) {\n      return this._isShown ? this.hide() : this.show(relatedTarget);\n    }\n\n    show(relatedTarget) {\n      if (this._isShown || this._isTransitioning) {\n        return;\n      }\n\n      const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$3, {\n        relatedTarget\n      });\n\n      if (showEvent.defaultPrevented) {\n        return;\n      }\n\n      this._isShown = true;\n\n      if (this._isAnimated()) {\n        this._isTransitioning = true;\n      }\n\n      this._scrollBar.hide();\n\n      document.body.classList.add(CLASS_NAME_OPEN);\n\n      this._adjustDialog();\n\n      this._setEscapeEvent();\n\n      this._setResizeEvent();\n\n      EventHandler.on(this._element, EVENT_CLICK_DISMISS$2, SELECTOR_DATA_DISMISS$2, event => this.hide(event));\n      EventHandler.on(this._dialog, EVENT_MOUSEDOWN_DISMISS, () => {\n        EventHandler.one(this._element, EVENT_MOUSEUP_DISMISS, event => {\n          if (event.target === this._element) {\n            this._ignoreBackdropClick = true;\n          }\n        });\n      });\n\n      this._showBackdrop(() => this._showElement(relatedTarget));\n    }\n\n    hide(event) {\n      if (event && ['A', 'AREA'].includes(event.target.tagName)) {\n        event.preventDefault();\n      }\n\n      if (!this._isShown || this._isTransitioning) {\n        return;\n      }\n\n      const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$3);\n\n      if (hideEvent.defaultPrevented) {\n        return;\n      }\n\n      this._isShown = false;\n\n      const isAnimated = this._isAnimated();\n\n      if (isAnimated) {\n        this._isTransitioning = true;\n      }\n\n      this._setEscapeEvent();\n\n      this._setResizeEvent();\n\n      EventHandler.off(document, EVENT_FOCUSIN$2);\n\n      this._element.classList.remove(CLASS_NAME_SHOW$5);\n\n      EventHandler.off(this._element, EVENT_CLICK_DISMISS$2);\n      EventHandler.off(this._dialog, EVENT_MOUSEDOWN_DISMISS);\n\n      this._queueCallback(() => this._hideModal(), this._element, isAnimated);\n    }\n\n    dispose() {\n      [window, this._dialog].forEach(htmlElement => EventHandler.off(htmlElement, EVENT_KEY$6));\n\n      this._backdrop.dispose();\n\n      super.dispose();\n      /**\n       * `document` has 2 events `EVENT_FOCUSIN` and `EVENT_CLICK_DATA_API`\n       * Do not move `document` in `htmlElements` array\n       * It will remove `EVENT_CLICK_DATA_API` event that should remain\n       */\n\n      EventHandler.off(document, EVENT_FOCUSIN$2);\n    }\n\n    handleUpdate() {\n      this._adjustDialog();\n    } // Private\n\n\n    _initializeBackDrop() {\n      return new Backdrop({\n        isVisible: Boolean(this._config.backdrop),\n        // 'static' option will be translated to true, and booleans will keep their value\n        isAnimated: this._isAnimated()\n      });\n    }\n\n    _getConfig(config) {\n      config = { ...Default$5,\n        ...Manipulator.getDataAttributes(this._element),\n        ...(typeof config === 'object' ? config : {})\n      };\n      typeCheckConfig(NAME$6, config, DefaultType$5);\n      return config;\n    }\n\n    _showElement(relatedTarget) {\n      const isAnimated = this._isAnimated();\n\n      const modalBody = SelectorEngine.findOne(SELECTOR_MODAL_BODY, this._dialog);\n\n      if (!this._element.parentNode || this._element.parentNode.nodeType !== Node.ELEMENT_NODE) {\n        // Don't move modal's DOM position\n        document.body.appendChild(this._element);\n      }\n\n      this._element.style.display = 'block';\n\n      this._element.removeAttribute('aria-hidden');\n\n      this._element.setAttribute('aria-modal', true);\n\n      this._element.setAttribute('role', 'dialog');\n\n      this._element.scrollTop = 0;\n\n      if (modalBody) {\n        modalBody.scrollTop = 0;\n      }\n\n      if (isAnimated) {\n        reflow(this._element);\n      }\n\n      this._element.classList.add(CLASS_NAME_SHOW$5);\n\n      if (this._config.focus) {\n        this._enforceFocus();\n      }\n\n      const transitionComplete = () => {\n        if (this._config.focus) {\n          this._element.focus();\n        }\n\n        this._isTransitioning = false;\n        EventHandler.trigger(this._element, EVENT_SHOWN$3, {\n          relatedTarget\n        });\n      };\n\n      this._queueCallback(transitionComplete, this._dialog, isAnimated);\n    }\n\n    _enforceFocus() {\n      EventHandler.off(document, EVENT_FOCUSIN$2); // guard against infinite focus loop\n\n      EventHandler.on(document, EVENT_FOCUSIN$2, event => {\n        if (document !== event.target && this._element !== event.target && !this._element.contains(event.target)) {\n          this._element.focus();\n        }\n      });\n    }\n\n    _setEscapeEvent() {\n      if (this._isShown) {\n        EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS$1, event => {\n          if (this._config.keyboard && event.key === ESCAPE_KEY$1) {\n            event.preventDefault();\n            this.hide();\n          } else if (!this._config.keyboard && event.key === ESCAPE_KEY$1) {\n            this._triggerBackdropTransition();\n          }\n        });\n      } else {\n        EventHandler.off(this._element, EVENT_KEYDOWN_DISMISS$1);\n      }\n    }\n\n    _setResizeEvent() {\n      if (this._isShown) {\n        EventHandler.on(window, EVENT_RESIZE, () => this._adjustDialog());\n      } else {\n        EventHandler.off(window, EVENT_RESIZE);\n      }\n    }\n\n    _hideModal() {\n      this._element.style.display = 'none';\n\n      this._element.setAttribute('aria-hidden', true);\n\n      this._element.removeAttribute('aria-modal');\n\n      this._element.removeAttribute('role');\n\n      this._isTransitioning = false;\n\n      this._backdrop.hide(() => {\n        document.body.classList.remove(CLASS_NAME_OPEN);\n\n        this._resetAdjustments();\n\n        this._scrollBar.reset();\n\n        EventHandler.trigger(this._element, EVENT_HIDDEN$3);\n      });\n    }\n\n    _showBackdrop(callback) {\n      EventHandler.on(this._element, EVENT_CLICK_DISMISS$2, event => {\n        if (this._ignoreBackdropClick) {\n          this._ignoreBackdropClick = false;\n          return;\n        }\n\n        if (event.target !== event.currentTarget) {\n          return;\n        }\n\n        if (this._config.backdrop === true) {\n          this.hide();\n        } else if (this._config.backdrop === 'static') {\n          this._triggerBackdropTransition();\n        }\n      });\n\n      this._backdrop.show(callback);\n    }\n\n    _isAnimated() {\n      return this._element.classList.contains(CLASS_NAME_FADE$4);\n    }\n\n    _triggerBackdropTransition() {\n      const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED);\n\n      if (hideEvent.defaultPrevented) {\n        return;\n      }\n\n      const {\n        classList,\n        scrollHeight,\n        style\n      } = this._element;\n      const isModalOverflowing = scrollHeight > document.documentElement.clientHeight; // return if the following background transition hasn't yet completed\n\n      if (!isModalOverflowing && style.overflowY === 'hidden' || classList.contains(CLASS_NAME_STATIC)) {\n        return;\n      }\n\n      if (!isModalOverflowing) {\n        style.overflowY = 'hidden';\n      }\n\n      classList.add(CLASS_NAME_STATIC);\n\n      this._queueCallback(() => {\n        classList.remove(CLASS_NAME_STATIC);\n\n        if (!isModalOverflowing) {\n          this._queueCallback(() => {\n            style.overflowY = '';\n          }, this._dialog);\n        }\n      }, this._dialog);\n\n      this._element.focus();\n    } // ----------------------------------------------------------------------\n    // the following methods are used to handle overflowing modals\n    // ----------------------------------------------------------------------\n\n\n    _adjustDialog() {\n      const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;\n\n      const scrollbarWidth = this._scrollBar.getWidth();\n\n      const isBodyOverflowing = scrollbarWidth > 0;\n\n      if (!isBodyOverflowing && isModalOverflowing && !isRTL() || isBodyOverflowing && !isModalOverflowing && isRTL()) {\n        this._element.style.paddingLeft = `${scrollbarWidth}px`;\n      }\n\n      if (isBodyOverflowing && !isModalOverflowing && !isRTL() || !isBodyOverflowing && isModalOverflowing && isRTL()) {\n        this._element.style.paddingRight = `${scrollbarWidth}px`;\n      }\n    }\n\n    _resetAdjustments() {\n      this._element.style.paddingLeft = '';\n      this._element.style.paddingRight = '';\n    } // Static\n\n\n    static jQueryInterface(config, relatedTarget) {\n      return this.each(function () {\n        const data = Modal.getOrCreateInstance(this, config);\n\n        if (typeof config !== 'string') {\n          return;\n        }\n\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config](relatedTarget);\n      });\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(document, EVENT_CLICK_DATA_API$2, SELECTOR_DATA_TOGGLE$2, function (event) {\n    const target = getElementFromSelector(this);\n\n    if (['A', 'AREA'].includes(this.tagName)) {\n      event.preventDefault();\n    }\n\n    EventHandler.one(target, EVENT_SHOW$3, showEvent => {\n      if (showEvent.defaultPrevented) {\n        // only register focus restorer if modal will actually get shown\n        return;\n      }\n\n      EventHandler.one(target, EVENT_HIDDEN$3, () => {\n        if (isVisible(this)) {\n          this.focus();\n        }\n      });\n    });\n    const data = Modal.getOrCreateInstance(target);\n    data.toggle(this);\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Modal to jQuery only if jQuery is present\n   */\n\n  defineJQueryPlugin(Modal);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): offcanvas.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$5 = 'offcanvas';\n  const DATA_KEY$5 = 'bs.offcanvas';\n  const EVENT_KEY$5 = `.${DATA_KEY$5}`;\n  const DATA_API_KEY$2 = '.data-api';\n  const EVENT_LOAD_DATA_API$1 = `load${EVENT_KEY$5}${DATA_API_KEY$2}`;\n  const ESCAPE_KEY = 'Escape';\n  const Default$4 = {\n    backdrop: true,\n    keyboard: true,\n    scroll: false\n  };\n  const DefaultType$4 = {\n    backdrop: 'boolean',\n    keyboard: 'boolean',\n    scroll: 'boolean'\n  };\n  const CLASS_NAME_SHOW$4 = 'show';\n  const OPEN_SELECTOR = '.offcanvas.show';\n  const EVENT_SHOW$2 = `show${EVENT_KEY$5}`;\n  const EVENT_SHOWN$2 = `shown${EVENT_KEY$5}`;\n  const EVENT_HIDE$2 = `hide${EVENT_KEY$5}`;\n  const EVENT_HIDDEN$2 = `hidden${EVENT_KEY$5}`;\n  const EVENT_FOCUSIN$1 = `focusin${EVENT_KEY$5}`;\n  const EVENT_CLICK_DATA_API$1 = `click${EVENT_KEY$5}${DATA_API_KEY$2}`;\n  const EVENT_CLICK_DISMISS$1 = `click.dismiss${EVENT_KEY$5}`;\n  const EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY$5}`;\n  const SELECTOR_DATA_DISMISS$1 = '[data-bs-dismiss=\"offcanvas\"]';\n  const SELECTOR_DATA_TOGGLE$1 = '[data-bs-toggle=\"offcanvas\"]';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Offcanvas extends BaseComponent {\n    constructor(element, config) {\n      super(element);\n      this._config = this._getConfig(config);\n      this._isShown = false;\n      this._backdrop = this._initializeBackDrop();\n\n      this._addEventListeners();\n    } // Getters\n\n\n    static get NAME() {\n      return NAME$5;\n    }\n\n    static get Default() {\n      return Default$4;\n    } // Public\n\n\n    toggle(relatedTarget) {\n      return this._isShown ? this.hide() : this.show(relatedTarget);\n    }\n\n    show(relatedTarget) {\n      if (this._isShown) {\n        return;\n      }\n\n      const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$2, {\n        relatedTarget\n      });\n\n      if (showEvent.defaultPrevented) {\n        return;\n      }\n\n      this._isShown = true;\n      this._element.style.visibility = 'visible';\n\n      this._backdrop.show();\n\n      if (!this._config.scroll) {\n        new ScrollBarHelper().hide();\n\n        this._enforceFocusOnElement(this._element);\n      }\n\n      this._element.removeAttribute('aria-hidden');\n\n      this._element.setAttribute('aria-modal', true);\n\n      this._element.setAttribute('role', 'dialog');\n\n      this._element.classList.add(CLASS_NAME_SHOW$4);\n\n      const completeCallBack = () => {\n        EventHandler.trigger(this._element, EVENT_SHOWN$2, {\n          relatedTarget\n        });\n      };\n\n      this._queueCallback(completeCallBack, this._element, true);\n    }\n\n    hide() {\n      if (!this._isShown) {\n        return;\n      }\n\n      const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$2);\n\n      if (hideEvent.defaultPrevented) {\n        return;\n      }\n\n      EventHandler.off(document, EVENT_FOCUSIN$1);\n\n      this._element.blur();\n\n      this._isShown = false;\n\n      this._element.classList.remove(CLASS_NAME_SHOW$4);\n\n      this._backdrop.hide();\n\n      const completeCallback = () => {\n        this._element.setAttribute('aria-hidden', true);\n\n        this._element.removeAttribute('aria-modal');\n\n        this._element.removeAttribute('role');\n\n        this._element.style.visibility = 'hidden';\n\n        if (!this._config.scroll) {\n          new ScrollBarHelper().reset();\n        }\n\n        EventHandler.trigger(this._element, EVENT_HIDDEN$2);\n      };\n\n      this._queueCallback(completeCallback, this._element, true);\n    }\n\n    dispose() {\n      this._backdrop.dispose();\n\n      super.dispose();\n      EventHandler.off(document, EVENT_FOCUSIN$1);\n    } // Private\n\n\n    _getConfig(config) {\n      config = { ...Default$4,\n        ...Manipulator.getDataAttributes(this._element),\n        ...(typeof config === 'object' ? config : {})\n      };\n      typeCheckConfig(NAME$5, config, DefaultType$4);\n      return config;\n    }\n\n    _initializeBackDrop() {\n      return new Backdrop({\n        isVisible: this._config.backdrop,\n        isAnimated: true,\n        rootElement: this._element.parentNode,\n        clickCallback: () => this.hide()\n      });\n    }\n\n    _enforceFocusOnElement(element) {\n      EventHandler.off(document, EVENT_FOCUSIN$1); // guard against infinite focus loop\n\n      EventHandler.on(document, EVENT_FOCUSIN$1, event => {\n        if (document !== event.target && element !== event.target && !element.contains(event.target)) {\n          element.focus();\n        }\n      });\n      element.focus();\n    }\n\n    _addEventListeners() {\n      EventHandler.on(this._element, EVENT_CLICK_DISMISS$1, SELECTOR_DATA_DISMISS$1, () => this.hide());\n      EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS, event => {\n        if (this._config.keyboard && event.key === ESCAPE_KEY) {\n          this.hide();\n        }\n      });\n    } // Static\n\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = Offcanvas.getOrCreateInstance(this, config);\n\n        if (typeof config !== 'string') {\n          return;\n        }\n\n        if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config](this);\n      });\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(document, EVENT_CLICK_DATA_API$1, SELECTOR_DATA_TOGGLE$1, function (event) {\n    const target = getElementFromSelector(this);\n\n    if (['A', 'AREA'].includes(this.tagName)) {\n      event.preventDefault();\n    }\n\n    if (isDisabled(this)) {\n      return;\n    }\n\n    EventHandler.one(target, EVENT_HIDDEN$2, () => {\n      // focus on trigger when it is closed\n      if (isVisible(this)) {\n        this.focus();\n      }\n    }); // avoid conflict when clicking a toggler of an offcanvas, while another is open\n\n    const allReadyOpen = SelectorEngine.findOne(OPEN_SELECTOR);\n\n    if (allReadyOpen && allReadyOpen !== target) {\n      Offcanvas.getInstance(allReadyOpen).hide();\n    }\n\n    const data = Offcanvas.getOrCreateInstance(target);\n    data.toggle(this);\n  });\n  EventHandler.on(window, EVENT_LOAD_DATA_API$1, () => SelectorEngine.find(OPEN_SELECTOR).forEach(el => Offcanvas.getOrCreateInstance(el).show()));\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   */\n\n  defineJQueryPlugin(Offcanvas);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): util/sanitizer.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  const uriAttrs = new Set(['background', 'cite', 'href', 'itemtype', 'longdesc', 'poster', 'src', 'xlink:href']);\n  const ARIA_ATTRIBUTE_PATTERN = /^aria-[\\w-]*$/i;\n  /**\n   * A pattern that recognizes a commonly useful subset of URLs that are safe.\n   *\n   * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts\n   */\n\n  const SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file):|[^#&/:?]*(?:[#/?]|$))/i;\n  /**\n   * A pattern that matches safe data URLs. Only matches image, video and audio types.\n   *\n   * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts\n   */\n\n  const DATA_URL_PATTERN = /^data:(?:image\\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\\/(?:mpeg|mp4|ogg|webm)|audio\\/(?:mp3|oga|ogg|opus));base64,[\\d+/a-z]+=*$/i;\n\n  const allowedAttribute = (attr, allowedAttributeList) => {\n    const attrName = attr.nodeName.toLowerCase();\n\n    if (allowedAttributeList.includes(attrName)) {\n      if (uriAttrs.has(attrName)) {\n        return Boolean(SAFE_URL_PATTERN.test(attr.nodeValue) || DATA_URL_PATTERN.test(attr.nodeValue));\n      }\n\n      return true;\n    }\n\n    const regExp = allowedAttributeList.filter(attrRegex => attrRegex instanceof RegExp); // Check if a regular expression validates the attribute.\n\n    for (let i = 0, len = regExp.length; i < len; i++) {\n      if (regExp[i].test(attrName)) {\n        return true;\n      }\n    }\n\n    return false;\n  };\n\n  const DefaultAllowlist = {\n    // Global attributes allowed on any supplied element below.\n    '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],\n    a: ['target', 'href', 'title', 'rel'],\n    area: [],\n    b: [],\n    br: [],\n    col: [],\n    code: [],\n    div: [],\n    em: [],\n    hr: [],\n    h1: [],\n    h2: [],\n    h3: [],\n    h4: [],\n    h5: [],\n    h6: [],\n    i: [],\n    img: ['src', 'srcset', 'alt', 'title', 'width', 'height'],\n    li: [],\n    ol: [],\n    p: [],\n    pre: [],\n    s: [],\n    small: [],\n    span: [],\n    sub: [],\n    sup: [],\n    strong: [],\n    u: [],\n    ul: []\n  };\n  function sanitizeHtml(unsafeHtml, allowList, sanitizeFn) {\n    if (!unsafeHtml.length) {\n      return unsafeHtml;\n    }\n\n    if (sanitizeFn && typeof sanitizeFn === 'function') {\n      return sanitizeFn(unsafeHtml);\n    }\n\n    const domParser = new window.DOMParser();\n    const createdDocument = domParser.parseFromString(unsafeHtml, 'text/html');\n    const allowlistKeys = Object.keys(allowList);\n    const elements = [].concat(...createdDocument.body.querySelectorAll('*'));\n\n    for (let i = 0, len = elements.length; i < len; i++) {\n      const el = elements[i];\n      const elName = el.nodeName.toLowerCase();\n\n      if (!allowlistKeys.includes(elName)) {\n        el.remove();\n        continue;\n      }\n\n      const attributeList = [].concat(...el.attributes);\n      const allowedAttributes = [].concat(allowList['*'] || [], allowList[elName] || []);\n      attributeList.forEach(attr => {\n        if (!allowedAttribute(attr, allowedAttributes)) {\n          el.removeAttribute(attr.nodeName);\n        }\n      });\n    }\n\n    return createdDocument.body.innerHTML;\n  }\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): tooltip.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$4 = 'tooltip';\n  const DATA_KEY$4 = 'bs.tooltip';\n  const EVENT_KEY$4 = `.${DATA_KEY$4}`;\n  const CLASS_PREFIX$1 = 'bs-tooltip';\n  const BSCLS_PREFIX_REGEX$1 = new RegExp(`(^|\\\\s)${CLASS_PREFIX$1}\\\\S+`, 'g');\n  const DISALLOWED_ATTRIBUTES = new Set(['sanitize', 'allowList', 'sanitizeFn']);\n  const DefaultType$3 = {\n    animation: 'boolean',\n    template: 'string',\n    title: '(string|element|function)',\n    trigger: 'string',\n    delay: '(number|object)',\n    html: 'boolean',\n    selector: '(string|boolean)',\n    placement: '(string|function)',\n    offset: '(array|string|function)',\n    container: '(string|element|boolean)',\n    fallbackPlacements: 'array',\n    boundary: '(string|element)',\n    customClass: '(string|function)',\n    sanitize: 'boolean',\n    sanitizeFn: '(null|function)',\n    allowList: 'object',\n    popperConfig: '(null|object|function)'\n  };\n  const AttachmentMap = {\n    AUTO: 'auto',\n    TOP: 'top',\n    RIGHT: isRTL() ? 'left' : 'right',\n    BOTTOM: 'bottom',\n    LEFT: isRTL() ? 'right' : 'left'\n  };\n  const Default$3 = {\n    animation: true,\n    template: '<div class=\"tooltip\" role=\"tooltip\">' + '<div class=\"tooltip-arrow\"></div>' + '<div class=\"tooltip-inner\"></div>' + '</div>',\n    trigger: 'hover focus',\n    title: '',\n    delay: 0,\n    html: false,\n    selector: false,\n    placement: 'top',\n    offset: [0, 0],\n    container: false,\n    fallbackPlacements: ['top', 'right', 'bottom', 'left'],\n    boundary: 'clippingParents',\n    customClass: '',\n    sanitize: true,\n    sanitizeFn: null,\n    allowList: DefaultAllowlist,\n    popperConfig: null\n  };\n  const Event$2 = {\n    HIDE: `hide${EVENT_KEY$4}`,\n    HIDDEN: `hidden${EVENT_KEY$4}`,\n    SHOW: `show${EVENT_KEY$4}`,\n    SHOWN: `shown${EVENT_KEY$4}`,\n    INSERTED: `inserted${EVENT_KEY$4}`,\n    CLICK: `click${EVENT_KEY$4}`,\n    FOCUSIN: `focusin${EVENT_KEY$4}`,\n    FOCUSOUT: `focusout${EVENT_KEY$4}`,\n    MOUSEENTER: `mouseenter${EVENT_KEY$4}`,\n    MOUSELEAVE: `mouseleave${EVENT_KEY$4}`\n  };\n  const CLASS_NAME_FADE$3 = 'fade';\n  const CLASS_NAME_MODAL = 'modal';\n  const CLASS_NAME_SHOW$3 = 'show';\n  const HOVER_STATE_SHOW = 'show';\n  const HOVER_STATE_OUT = 'out';\n  const SELECTOR_TOOLTIP_INNER = '.tooltip-inner';\n  const TRIGGER_HOVER = 'hover';\n  const TRIGGER_FOCUS = 'focus';\n  const TRIGGER_CLICK = 'click';\n  const TRIGGER_MANUAL = 'manual';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Tooltip extends BaseComponent {\n    constructor(element, config) {\n      if (typeof Popper === 'undefined') {\n        throw new TypeError('Bootstrap\\'s tooltips require Popper (https://popper.js.org)');\n      }\n\n      super(element); // private\n\n      this._isEnabled = true;\n      this._timeout = 0;\n      this._hoverState = '';\n      this._activeTrigger = {};\n      this._popper = null; // Protected\n\n      this._config = this._getConfig(config);\n      this.tip = null;\n\n      this._setListeners();\n    } // Getters\n\n\n    static get Default() {\n      return Default$3;\n    }\n\n    static get NAME() {\n      return NAME$4;\n    }\n\n    static get Event() {\n      return Event$2;\n    }\n\n    static get DefaultType() {\n      return DefaultType$3;\n    } // Public\n\n\n    enable() {\n      this._isEnabled = true;\n    }\n\n    disable() {\n      this._isEnabled = false;\n    }\n\n    toggleEnabled() {\n      this._isEnabled = !this._isEnabled;\n    }\n\n    toggle(event) {\n      if (!this._isEnabled) {\n        return;\n      }\n\n      if (event) {\n        const context = this._initializeOnDelegatedTarget(event);\n\n        context._activeTrigger.click = !context._activeTrigger.click;\n\n        if (context._isWithActiveTrigger()) {\n          context._enter(null, context);\n        } else {\n          context._leave(null, context);\n        }\n      } else {\n        if (this.getTipElement().classList.contains(CLASS_NAME_SHOW$3)) {\n          this._leave(null, this);\n\n          return;\n        }\n\n        this._enter(null, this);\n      }\n    }\n\n    dispose() {\n      clearTimeout(this._timeout);\n      EventHandler.off(this._element.closest(`.${CLASS_NAME_MODAL}`), 'hide.bs.modal', this._hideModalHandler);\n\n      if (this.tip) {\n        this.tip.remove();\n      }\n\n      if (this._popper) {\n        this._popper.destroy();\n      }\n\n      super.dispose();\n    }\n\n    show() {\n      if (this._element.style.display === 'none') {\n        throw new Error('Please use show on visible elements');\n      }\n\n      if (!(this.isWithContent() && this._isEnabled)) {\n        return;\n      }\n\n      const showEvent = EventHandler.trigger(this._element, this.constructor.Event.SHOW);\n      const shadowRoot = findShadowRoot(this._element);\n      const isInTheDom = shadowRoot === null ? this._element.ownerDocument.documentElement.contains(this._element) : shadowRoot.contains(this._element);\n\n      if (showEvent.defaultPrevented || !isInTheDom) {\n        return;\n      }\n\n      const tip = this.getTipElement();\n      const tipId = getUID(this.constructor.NAME);\n      tip.setAttribute('id', tipId);\n\n      this._element.setAttribute('aria-describedby', tipId);\n\n      this.setContent();\n\n      if (this._config.animation) {\n        tip.classList.add(CLASS_NAME_FADE$3);\n      }\n\n      const placement = typeof this._config.placement === 'function' ? this._config.placement.call(this, tip, this._element) : this._config.placement;\n\n      const attachment = this._getAttachment(placement);\n\n      this._addAttachmentClass(attachment);\n\n      const {\n        container\n      } = this._config;\n      Data.set(tip, this.constructor.DATA_KEY, this);\n\n      if (!this._element.ownerDocument.documentElement.contains(this.tip)) {\n        container.appendChild(tip);\n        EventHandler.trigger(this._element, this.constructor.Event.INSERTED);\n      }\n\n      if (this._popper) {\n        this._popper.update();\n      } else {\n        this._popper = createPopper(this._element, tip, this._getPopperConfig(attachment));\n      }\n\n      tip.classList.add(CLASS_NAME_SHOW$3);\n      const customClass = typeof this._config.customClass === 'function' ? this._config.customClass() : this._config.customClass;\n\n      if (customClass) {\n        tip.classList.add(...customClass.split(' '));\n      } // If this is a touch-enabled device we add extra\n      // empty mouseover listeners to the body's immediate children;\n      // only needed because of broken event delegation on iOS\n      // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n\n\n      if ('ontouchstart' in document.documentElement) {\n        [].concat(...document.body.children).forEach(element => {\n          EventHandler.on(element, 'mouseover', noop);\n        });\n      }\n\n      const complete = () => {\n        const prevHoverState = this._hoverState;\n        this._hoverState = null;\n        EventHandler.trigger(this._element, this.constructor.Event.SHOWN);\n\n        if (prevHoverState === HOVER_STATE_OUT) {\n          this._leave(null, this);\n        }\n      };\n\n      const isAnimated = this.tip.classList.contains(CLASS_NAME_FADE$3);\n\n      this._queueCallback(complete, this.tip, isAnimated);\n    }\n\n    hide() {\n      if (!this._popper) {\n        return;\n      }\n\n      const tip = this.getTipElement();\n\n      const complete = () => {\n        if (this._isWithActiveTrigger()) {\n          return;\n        }\n\n        if (this._hoverState !== HOVER_STATE_SHOW) {\n          tip.remove();\n        }\n\n        this._cleanTipClass();\n\n        this._element.removeAttribute('aria-describedby');\n\n        EventHandler.trigger(this._element, this.constructor.Event.HIDDEN);\n\n        if (this._popper) {\n          this._popper.destroy();\n\n          this._popper = null;\n        }\n      };\n\n      const hideEvent = EventHandler.trigger(this._element, this.constructor.Event.HIDE);\n\n      if (hideEvent.defaultPrevented) {\n        return;\n      }\n\n      tip.classList.remove(CLASS_NAME_SHOW$3); // If this is a touch-enabled device we remove the extra\n      // empty mouseover listeners we added for iOS support\n\n      if ('ontouchstart' in document.documentElement) {\n        [].concat(...document.body.children).forEach(element => EventHandler.off(element, 'mouseover', noop));\n      }\n\n      this._activeTrigger[TRIGGER_CLICK] = false;\n      this._activeTrigger[TRIGGER_FOCUS] = false;\n      this._activeTrigger[TRIGGER_HOVER] = false;\n      const isAnimated = this.tip.classList.contains(CLASS_NAME_FADE$3);\n\n      this._queueCallback(complete, this.tip, isAnimated);\n\n      this._hoverState = '';\n    }\n\n    update() {\n      if (this._popper !== null) {\n        this._popper.update();\n      }\n    } // Protected\n\n\n    isWithContent() {\n      return Boolean(this.getTitle());\n    }\n\n    getTipElement() {\n      if (this.tip) {\n        return this.tip;\n      }\n\n      const element = document.createElement('div');\n      element.innerHTML = this._config.template;\n      this.tip = element.children[0];\n      return this.tip;\n    }\n\n    setContent() {\n      const tip = this.getTipElement();\n      this.setElementContent(SelectorEngine.findOne(SELECTOR_TOOLTIP_INNER, tip), this.getTitle());\n      tip.classList.remove(CLASS_NAME_FADE$3, CLASS_NAME_SHOW$3);\n    }\n\n    setElementContent(element, content) {\n      if (element === null) {\n        return;\n      }\n\n      if (isElement$1(content)) {\n        content = getElement(content); // content is a DOM node or a jQuery\n\n        if (this._config.html) {\n          if (content.parentNode !== element) {\n            element.innerHTML = '';\n            element.appendChild(content);\n          }\n        } else {\n          element.textContent = content.textContent;\n        }\n\n        return;\n      }\n\n      if (this._config.html) {\n        if (this._config.sanitize) {\n          content = sanitizeHtml(content, this._config.allowList, this._config.sanitizeFn);\n        }\n\n        element.innerHTML = content;\n      } else {\n        element.textContent = content;\n      }\n    }\n\n    getTitle() {\n      let title = this._element.getAttribute('data-bs-original-title');\n\n      if (!title) {\n        title = typeof this._config.title === 'function' ? this._config.title.call(this._element) : this._config.title;\n      }\n\n      return title;\n    }\n\n    updateAttachment(attachment) {\n      if (attachment === 'right') {\n        return 'end';\n      }\n\n      if (attachment === 'left') {\n        return 'start';\n      }\n\n      return attachment;\n    } // Private\n\n\n    _initializeOnDelegatedTarget(event, context) {\n      const dataKey = this.constructor.DATA_KEY;\n      context = context || Data.get(event.delegateTarget, dataKey);\n\n      if (!context) {\n        context = new this.constructor(event.delegateTarget, this._getDelegateConfig());\n        Data.set(event.delegateTarget, dataKey, context);\n      }\n\n      return context;\n    }\n\n    _getOffset() {\n      const {\n        offset\n      } = this._config;\n\n      if (typeof offset === 'string') {\n        return offset.split(',').map(val => Number.parseInt(val, 10));\n      }\n\n      if (typeof offset === 'function') {\n        return popperData => offset(popperData, this._element);\n      }\n\n      return offset;\n    }\n\n    _getPopperConfig(attachment) {\n      const defaultBsPopperConfig = {\n        placement: attachment,\n        modifiers: [{\n          name: 'flip',\n          options: {\n            fallbackPlacements: this._config.fallbackPlacements\n          }\n        }, {\n          name: 'offset',\n          options: {\n            offset: this._getOffset()\n          }\n        }, {\n          name: 'preventOverflow',\n          options: {\n            boundary: this._config.boundary\n          }\n        }, {\n          name: 'arrow',\n          options: {\n            element: `.${this.constructor.NAME}-arrow`\n          }\n        }, {\n          name: 'onChange',\n          enabled: true,\n          phase: 'afterWrite',\n          fn: data => this._handlePopperPlacementChange(data)\n        }],\n        onFirstUpdate: data => {\n          if (data.options.placement !== data.placement) {\n            this._handlePopperPlacementChange(data);\n          }\n        }\n      };\n      return { ...defaultBsPopperConfig,\n        ...(typeof this._config.popperConfig === 'function' ? this._config.popperConfig(defaultBsPopperConfig) : this._config.popperConfig)\n      };\n    }\n\n    _addAttachmentClass(attachment) {\n      this.getTipElement().classList.add(`${CLASS_PREFIX$1}-${this.updateAttachment(attachment)}`);\n    }\n\n    _getAttachment(placement) {\n      return AttachmentMap[placement.toUpperCase()];\n    }\n\n    _setListeners() {\n      const triggers = this._config.trigger.split(' ');\n\n      triggers.forEach(trigger => {\n        if (trigger === 'click') {\n          EventHandler.on(this._element, this.constructor.Event.CLICK, this._config.selector, event => this.toggle(event));\n        } else if (trigger !== TRIGGER_MANUAL) {\n          const eventIn = trigger === TRIGGER_HOVER ? this.constructor.Event.MOUSEENTER : this.constructor.Event.FOCUSIN;\n          const eventOut = trigger === TRIGGER_HOVER ? this.constructor.Event.MOUSELEAVE : this.constructor.Event.FOCUSOUT;\n          EventHandler.on(this._element, eventIn, this._config.selector, event => this._enter(event));\n          EventHandler.on(this._element, eventOut, this._config.selector, event => this._leave(event));\n        }\n      });\n\n      this._hideModalHandler = () => {\n        if (this._element) {\n          this.hide();\n        }\n      };\n\n      EventHandler.on(this._element.closest(`.${CLASS_NAME_MODAL}`), 'hide.bs.modal', this._hideModalHandler);\n\n      if (this._config.selector) {\n        this._config = { ...this._config,\n          trigger: 'manual',\n          selector: ''\n        };\n      } else {\n        this._fixTitle();\n      }\n    }\n\n    _fixTitle() {\n      const title = this._element.getAttribute('title');\n\n      const originalTitleType = typeof this._element.getAttribute('data-bs-original-title');\n\n      if (title || originalTitleType !== 'string') {\n        this._element.setAttribute('data-bs-original-title', title || '');\n\n        if (title && !this._element.getAttribute('aria-label') && !this._element.textContent) {\n          this._element.setAttribute('aria-label', title);\n        }\n\n        this._element.setAttribute('title', '');\n      }\n    }\n\n    _enter(event, context) {\n      context = this._initializeOnDelegatedTarget(event, context);\n\n      if (event) {\n        context._activeTrigger[event.type === 'focusin' ? TRIGGER_FOCUS : TRIGGER_HOVER] = true;\n      }\n\n      if (context.getTipElement().classList.contains(CLASS_NAME_SHOW$3) || context._hoverState === HOVER_STATE_SHOW) {\n        context._hoverState = HOVER_STATE_SHOW;\n        return;\n      }\n\n      clearTimeout(context._timeout);\n      context._hoverState = HOVER_STATE_SHOW;\n\n      if (!context._config.delay || !context._config.delay.show) {\n        context.show();\n        return;\n      }\n\n      context._timeout = setTimeout(() => {\n        if (context._hoverState === HOVER_STATE_SHOW) {\n          context.show();\n        }\n      }, context._config.delay.show);\n    }\n\n    _leave(event, context) {\n      context = this._initializeOnDelegatedTarget(event, context);\n\n      if (event) {\n        context._activeTrigger[event.type === 'focusout' ? TRIGGER_FOCUS : TRIGGER_HOVER] = context._element.contains(event.relatedTarget);\n      }\n\n      if (context._isWithActiveTrigger()) {\n        return;\n      }\n\n      clearTimeout(context._timeout);\n      context._hoverState = HOVER_STATE_OUT;\n\n      if (!context._config.delay || !context._config.delay.hide) {\n        context.hide();\n        return;\n      }\n\n      context._timeout = setTimeout(() => {\n        if (context._hoverState === HOVER_STATE_OUT) {\n          context.hide();\n        }\n      }, context._config.delay.hide);\n    }\n\n    _isWithActiveTrigger() {\n      for (const trigger in this._activeTrigger) {\n        if (this._activeTrigger[trigger]) {\n          return true;\n        }\n      }\n\n      return false;\n    }\n\n    _getConfig(config) {\n      const dataAttributes = Manipulator.getDataAttributes(this._element);\n      Object.keys(dataAttributes).forEach(dataAttr => {\n        if (DISALLOWED_ATTRIBUTES.has(dataAttr)) {\n          delete dataAttributes[dataAttr];\n        }\n      });\n      config = { ...this.constructor.Default,\n        ...dataAttributes,\n        ...(typeof config === 'object' && config ? config : {})\n      };\n      config.container = config.container === false ? document.body : getElement(config.container);\n\n      if (typeof config.delay === 'number') {\n        config.delay = {\n          show: config.delay,\n          hide: config.delay\n        };\n      }\n\n      if (typeof config.title === 'number') {\n        config.title = config.title.toString();\n      }\n\n      if (typeof config.content === 'number') {\n        config.content = config.content.toString();\n      }\n\n      typeCheckConfig(NAME$4, config, this.constructor.DefaultType);\n\n      if (config.sanitize) {\n        config.template = sanitizeHtml(config.template, config.allowList, config.sanitizeFn);\n      }\n\n      return config;\n    }\n\n    _getDelegateConfig() {\n      const config = {};\n\n      if (this._config) {\n        for (const key in this._config) {\n          if (this.constructor.Default[key] !== this._config[key]) {\n            config[key] = this._config[key];\n          }\n        }\n      }\n\n      return config;\n    }\n\n    _cleanTipClass() {\n      const tip = this.getTipElement();\n      const tabClass = tip.getAttribute('class').match(BSCLS_PREFIX_REGEX$1);\n\n      if (tabClass !== null && tabClass.length > 0) {\n        tabClass.map(token => token.trim()).forEach(tClass => tip.classList.remove(tClass));\n      }\n    }\n\n    _handlePopperPlacementChange(popperData) {\n      const {\n        state\n      } = popperData;\n\n      if (!state) {\n        return;\n      }\n\n      this.tip = state.elements.popper;\n\n      this._cleanTipClass();\n\n      this._addAttachmentClass(this._getAttachment(state.placement));\n    } // Static\n\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = Tooltip.getOrCreateInstance(this, config);\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(`No method named \"${config}\"`);\n          }\n\n          data[config]();\n        }\n      });\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Tooltip to jQuery only if jQuery is present\n   */\n\n\n  defineJQueryPlugin(Tooltip);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): popover.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$3 = 'popover';\n  const DATA_KEY$3 = 'bs.popover';\n  const EVENT_KEY$3 = `.${DATA_KEY$3}`;\n  const CLASS_PREFIX = 'bs-popover';\n  const BSCLS_PREFIX_REGEX = new RegExp(`(^|\\\\s)${CLASS_PREFIX}\\\\S+`, 'g');\n  const Default$2 = { ...Tooltip.Default,\n    placement: 'right',\n    offset: [0, 8],\n    trigger: 'click',\n    content: '',\n    template: '<div class=\"popover\" role=\"tooltip\">' + '<div class=\"popover-arrow\"></div>' + '<h3 class=\"popover-header\"></h3>' + '<div class=\"popover-body\"></div>' + '</div>'\n  };\n  const DefaultType$2 = { ...Tooltip.DefaultType,\n    content: '(string|element|function)'\n  };\n  const Event$1 = {\n    HIDE: `hide${EVENT_KEY$3}`,\n    HIDDEN: `hidden${EVENT_KEY$3}`,\n    SHOW: `show${EVENT_KEY$3}`,\n    SHOWN: `shown${EVENT_KEY$3}`,\n    INSERTED: `inserted${EVENT_KEY$3}`,\n    CLICK: `click${EVENT_KEY$3}`,\n    FOCUSIN: `focusin${EVENT_KEY$3}`,\n    FOCUSOUT: `focusout${EVENT_KEY$3}`,\n    MOUSEENTER: `mouseenter${EVENT_KEY$3}`,\n    MOUSELEAVE: `mouseleave${EVENT_KEY$3}`\n  };\n  const CLASS_NAME_FADE$2 = 'fade';\n  const CLASS_NAME_SHOW$2 = 'show';\n  const SELECTOR_TITLE = '.popover-header';\n  const SELECTOR_CONTENT = '.popover-body';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Popover extends Tooltip {\n    // Getters\n    static get Default() {\n      return Default$2;\n    }\n\n    static get NAME() {\n      return NAME$3;\n    }\n\n    static get Event() {\n      return Event$1;\n    }\n\n    static get DefaultType() {\n      return DefaultType$2;\n    } // Overrides\n\n\n    isWithContent() {\n      return this.getTitle() || this._getContent();\n    }\n\n    getTipElement() {\n      if (this.tip) {\n        return this.tip;\n      }\n\n      this.tip = super.getTipElement();\n\n      if (!this.getTitle()) {\n        SelectorEngine.findOne(SELECTOR_TITLE, this.tip).remove();\n      }\n\n      if (!this._getContent()) {\n        SelectorEngine.findOne(SELECTOR_CONTENT, this.tip).remove();\n      }\n\n      return this.tip;\n    }\n\n    setContent() {\n      const tip = this.getTipElement(); // we use append for html objects to maintain js events\n\n      this.setElementContent(SelectorEngine.findOne(SELECTOR_TITLE, tip), this.getTitle());\n\n      let content = this._getContent();\n\n      if (typeof content === 'function') {\n        content = content.call(this._element);\n      }\n\n      this.setElementContent(SelectorEngine.findOne(SELECTOR_CONTENT, tip), content);\n      tip.classList.remove(CLASS_NAME_FADE$2, CLASS_NAME_SHOW$2);\n    } // Private\n\n\n    _addAttachmentClass(attachment) {\n      this.getTipElement().classList.add(`${CLASS_PREFIX}-${this.updateAttachment(attachment)}`);\n    }\n\n    _getContent() {\n      return this._element.getAttribute('data-bs-content') || this._config.content;\n    }\n\n    _cleanTipClass() {\n      const tip = this.getTipElement();\n      const tabClass = tip.getAttribute('class').match(BSCLS_PREFIX_REGEX);\n\n      if (tabClass !== null && tabClass.length > 0) {\n        tabClass.map(token => token.trim()).forEach(tClass => tip.classList.remove(tClass));\n      }\n    } // Static\n\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = Popover.getOrCreateInstance(this, config);\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(`No method named \"${config}\"`);\n          }\n\n          data[config]();\n        }\n      });\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Popover to jQuery only if jQuery is present\n   */\n\n\n  defineJQueryPlugin(Popover);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): scrollspy.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$2 = 'scrollspy';\n  const DATA_KEY$2 = 'bs.scrollspy';\n  const EVENT_KEY$2 = `.${DATA_KEY$2}`;\n  const DATA_API_KEY$1 = '.data-api';\n  const Default$1 = {\n    offset: 10,\n    method: 'auto',\n    target: ''\n  };\n  const DefaultType$1 = {\n    offset: 'number',\n    method: 'string',\n    target: '(string|element)'\n  };\n  const EVENT_ACTIVATE = `activate${EVENT_KEY$2}`;\n  const EVENT_SCROLL = `scroll${EVENT_KEY$2}`;\n  const EVENT_LOAD_DATA_API = `load${EVENT_KEY$2}${DATA_API_KEY$1}`;\n  const CLASS_NAME_DROPDOWN_ITEM = 'dropdown-item';\n  const CLASS_NAME_ACTIVE$1 = 'active';\n  const SELECTOR_DATA_SPY = '[data-bs-spy=\"scroll\"]';\n  const SELECTOR_NAV_LIST_GROUP$1 = '.nav, .list-group';\n  const SELECTOR_NAV_LINKS = '.nav-link';\n  const SELECTOR_NAV_ITEMS = '.nav-item';\n  const SELECTOR_LIST_ITEMS = '.list-group-item';\n  const SELECTOR_DROPDOWN$1 = '.dropdown';\n  const SELECTOR_DROPDOWN_TOGGLE$1 = '.dropdown-toggle';\n  const METHOD_OFFSET = 'offset';\n  const METHOD_POSITION = 'position';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class ScrollSpy extends BaseComponent {\n    constructor(element, config) {\n      super(element);\n      this._scrollElement = this._element.tagName === 'BODY' ? window : this._element;\n      this._config = this._getConfig(config);\n      this._selector = `${this._config.target} ${SELECTOR_NAV_LINKS}, ${this._config.target} ${SELECTOR_LIST_ITEMS}, ${this._config.target} .${CLASS_NAME_DROPDOWN_ITEM}`;\n      this._offsets = [];\n      this._targets = [];\n      this._activeTarget = null;\n      this._scrollHeight = 0;\n      EventHandler.on(this._scrollElement, EVENT_SCROLL, () => this._process());\n      this.refresh();\n\n      this._process();\n    } // Getters\n\n\n    static get Default() {\n      return Default$1;\n    }\n\n    static get NAME() {\n      return NAME$2;\n    } // Public\n\n\n    refresh() {\n      const autoMethod = this._scrollElement === this._scrollElement.window ? METHOD_OFFSET : METHOD_POSITION;\n      const offsetMethod = this._config.method === 'auto' ? autoMethod : this._config.method;\n      const offsetBase = offsetMethod === METHOD_POSITION ? this._getScrollTop() : 0;\n      this._offsets = [];\n      this._targets = [];\n      this._scrollHeight = this._getScrollHeight();\n      const targets = SelectorEngine.find(this._selector);\n      targets.map(element => {\n        const targetSelector = getSelectorFromElement(element);\n        const target = targetSelector ? SelectorEngine.findOne(targetSelector) : null;\n\n        if (target) {\n          const targetBCR = target.getBoundingClientRect();\n\n          if (targetBCR.width || targetBCR.height) {\n            return [Manipulator[offsetMethod](target).top + offsetBase, targetSelector];\n          }\n        }\n\n        return null;\n      }).filter(item => item).sort((a, b) => a[0] - b[0]).forEach(item => {\n        this._offsets.push(item[0]);\n\n        this._targets.push(item[1]);\n      });\n    }\n\n    dispose() {\n      EventHandler.off(this._scrollElement, EVENT_KEY$2);\n      super.dispose();\n    } // Private\n\n\n    _getConfig(config) {\n      config = { ...Default$1,\n        ...Manipulator.getDataAttributes(this._element),\n        ...(typeof config === 'object' && config ? config : {})\n      };\n\n      if (typeof config.target !== 'string' && isElement$1(config.target)) {\n        let {\n          id\n        } = config.target;\n\n        if (!id) {\n          id = getUID(NAME$2);\n          config.target.id = id;\n        }\n\n        config.target = `#${id}`;\n      }\n\n      typeCheckConfig(NAME$2, config, DefaultType$1);\n      return config;\n    }\n\n    _getScrollTop() {\n      return this._scrollElement === window ? this._scrollElement.pageYOffset : this._scrollElement.scrollTop;\n    }\n\n    _getScrollHeight() {\n      return this._scrollElement.scrollHeight || Math.max(document.body.scrollHeight, document.documentElement.scrollHeight);\n    }\n\n    _getOffsetHeight() {\n      return this._scrollElement === window ? window.innerHeight : this._scrollElement.getBoundingClientRect().height;\n    }\n\n    _process() {\n      const scrollTop = this._getScrollTop() + this._config.offset;\n\n      const scrollHeight = this._getScrollHeight();\n\n      const maxScroll = this._config.offset + scrollHeight - this._getOffsetHeight();\n\n      if (this._scrollHeight !== scrollHeight) {\n        this.refresh();\n      }\n\n      if (scrollTop >= maxScroll) {\n        const target = this._targets[this._targets.length - 1];\n\n        if (this._activeTarget !== target) {\n          this._activate(target);\n        }\n\n        return;\n      }\n\n      if (this._activeTarget && scrollTop < this._offsets[0] && this._offsets[0] > 0) {\n        this._activeTarget = null;\n\n        this._clear();\n\n        return;\n      }\n\n      for (let i = this._offsets.length; i--;) {\n        const isActiveTarget = this._activeTarget !== this._targets[i] && scrollTop >= this._offsets[i] && (typeof this._offsets[i + 1] === 'undefined' || scrollTop < this._offsets[i + 1]);\n\n        if (isActiveTarget) {\n          this._activate(this._targets[i]);\n        }\n      }\n    }\n\n    _activate(target) {\n      this._activeTarget = target;\n\n      this._clear();\n\n      const queries = this._selector.split(',').map(selector => `${selector}[data-bs-target=\"${target}\"],${selector}[href=\"${target}\"]`);\n\n      const link = SelectorEngine.findOne(queries.join(','));\n\n      if (link.classList.contains(CLASS_NAME_DROPDOWN_ITEM)) {\n        SelectorEngine.findOne(SELECTOR_DROPDOWN_TOGGLE$1, link.closest(SELECTOR_DROPDOWN$1)).classList.add(CLASS_NAME_ACTIVE$1);\n        link.classList.add(CLASS_NAME_ACTIVE$1);\n      } else {\n        // Set triggered link as active\n        link.classList.add(CLASS_NAME_ACTIVE$1);\n        SelectorEngine.parents(link, SELECTOR_NAV_LIST_GROUP$1).forEach(listGroup => {\n          // Set triggered links parents as active\n          // With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor\n          SelectorEngine.prev(listGroup, `${SELECTOR_NAV_LINKS}, ${SELECTOR_LIST_ITEMS}`).forEach(item => item.classList.add(CLASS_NAME_ACTIVE$1)); // Handle special case when .nav-link is inside .nav-item\n\n          SelectorEngine.prev(listGroup, SELECTOR_NAV_ITEMS).forEach(navItem => {\n            SelectorEngine.children(navItem, SELECTOR_NAV_LINKS).forEach(item => item.classList.add(CLASS_NAME_ACTIVE$1));\n          });\n        });\n      }\n\n      EventHandler.trigger(this._scrollElement, EVENT_ACTIVATE, {\n        relatedTarget: target\n      });\n    }\n\n    _clear() {\n      SelectorEngine.find(this._selector).filter(node => node.classList.contains(CLASS_NAME_ACTIVE$1)).forEach(node => node.classList.remove(CLASS_NAME_ACTIVE$1));\n    } // Static\n\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = ScrollSpy.getOrCreateInstance(this, config);\n\n        if (typeof config !== 'string') {\n          return;\n        }\n\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config]();\n      });\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n    SelectorEngine.find(SELECTOR_DATA_SPY).forEach(spy => new ScrollSpy(spy));\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .ScrollSpy to jQuery only if jQuery is present\n   */\n\n  defineJQueryPlugin(ScrollSpy);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): tab.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$1 = 'tab';\n  const DATA_KEY$1 = 'bs.tab';\n  const EVENT_KEY$1 = `.${DATA_KEY$1}`;\n  const DATA_API_KEY = '.data-api';\n  const EVENT_HIDE$1 = `hide${EVENT_KEY$1}`;\n  const EVENT_HIDDEN$1 = `hidden${EVENT_KEY$1}`;\n  const EVENT_SHOW$1 = `show${EVENT_KEY$1}`;\n  const EVENT_SHOWN$1 = `shown${EVENT_KEY$1}`;\n  const EVENT_CLICK_DATA_API = `click${EVENT_KEY$1}${DATA_API_KEY}`;\n  const CLASS_NAME_DROPDOWN_MENU = 'dropdown-menu';\n  const CLASS_NAME_ACTIVE = 'active';\n  const CLASS_NAME_FADE$1 = 'fade';\n  const CLASS_NAME_SHOW$1 = 'show';\n  const SELECTOR_DROPDOWN = '.dropdown';\n  const SELECTOR_NAV_LIST_GROUP = '.nav, .list-group';\n  const SELECTOR_ACTIVE = '.active';\n  const SELECTOR_ACTIVE_UL = ':scope > li > .active';\n  const SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"tab\"], [data-bs-toggle=\"pill\"], [data-bs-toggle=\"list\"]';\n  const SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle';\n  const SELECTOR_DROPDOWN_ACTIVE_CHILD = ':scope > .dropdown-menu .active';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Tab extends BaseComponent {\n    // Getters\n    static get NAME() {\n      return NAME$1;\n    } // Public\n\n\n    show() {\n      if (this._element.parentNode && this._element.parentNode.nodeType === Node.ELEMENT_NODE && this._element.classList.contains(CLASS_NAME_ACTIVE)) {\n        return;\n      }\n\n      let previous;\n      const target = getElementFromSelector(this._element);\n\n      const listElement = this._element.closest(SELECTOR_NAV_LIST_GROUP);\n\n      if (listElement) {\n        const itemSelector = listElement.nodeName === 'UL' || listElement.nodeName === 'OL' ? SELECTOR_ACTIVE_UL : SELECTOR_ACTIVE;\n        previous = SelectorEngine.find(itemSelector, listElement);\n        previous = previous[previous.length - 1];\n      }\n\n      const hideEvent = previous ? EventHandler.trigger(previous, EVENT_HIDE$1, {\n        relatedTarget: this._element\n      }) : null;\n      const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$1, {\n        relatedTarget: previous\n      });\n\n      if (showEvent.defaultPrevented || hideEvent !== null && hideEvent.defaultPrevented) {\n        return;\n      }\n\n      this._activate(this._element, listElement);\n\n      const complete = () => {\n        EventHandler.trigger(previous, EVENT_HIDDEN$1, {\n          relatedTarget: this._element\n        });\n        EventHandler.trigger(this._element, EVENT_SHOWN$1, {\n          relatedTarget: previous\n        });\n      };\n\n      if (target) {\n        this._activate(target, target.parentNode, complete);\n      } else {\n        complete();\n      }\n    } // Private\n\n\n    _activate(element, container, callback) {\n      const activeElements = container && (container.nodeName === 'UL' || container.nodeName === 'OL') ? SelectorEngine.find(SELECTOR_ACTIVE_UL, container) : SelectorEngine.children(container, SELECTOR_ACTIVE);\n      const active = activeElements[0];\n      const isTransitioning = callback && active && active.classList.contains(CLASS_NAME_FADE$1);\n\n      const complete = () => this._transitionComplete(element, active, callback);\n\n      if (active && isTransitioning) {\n        active.classList.remove(CLASS_NAME_SHOW$1);\n\n        this._queueCallback(complete, element, true);\n      } else {\n        complete();\n      }\n    }\n\n    _transitionComplete(element, active, callback) {\n      if (active) {\n        active.classList.remove(CLASS_NAME_ACTIVE);\n        const dropdownChild = SelectorEngine.findOne(SELECTOR_DROPDOWN_ACTIVE_CHILD, active.parentNode);\n\n        if (dropdownChild) {\n          dropdownChild.classList.remove(CLASS_NAME_ACTIVE);\n        }\n\n        if (active.getAttribute('role') === 'tab') {\n          active.setAttribute('aria-selected', false);\n        }\n      }\n\n      element.classList.add(CLASS_NAME_ACTIVE);\n\n      if (element.getAttribute('role') === 'tab') {\n        element.setAttribute('aria-selected', true);\n      }\n\n      reflow(element);\n\n      if (element.classList.contains(CLASS_NAME_FADE$1)) {\n        element.classList.add(CLASS_NAME_SHOW$1);\n      }\n\n      let parent = element.parentNode;\n\n      if (parent && parent.nodeName === 'LI') {\n        parent = parent.parentNode;\n      }\n\n      if (parent && parent.classList.contains(CLASS_NAME_DROPDOWN_MENU)) {\n        const dropdownElement = element.closest(SELECTOR_DROPDOWN);\n\n        if (dropdownElement) {\n          SelectorEngine.find(SELECTOR_DROPDOWN_TOGGLE, dropdownElement).forEach(dropdown => dropdown.classList.add(CLASS_NAME_ACTIVE));\n        }\n\n        element.setAttribute('aria-expanded', true);\n      }\n\n      if (callback) {\n        callback();\n      }\n    } // Static\n\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = Tab.getOrCreateInstance(this);\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(`No method named \"${config}\"`);\n          }\n\n          data[config]();\n        }\n      });\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n    if (['A', 'AREA'].includes(this.tagName)) {\n      event.preventDefault();\n    }\n\n    if (isDisabled(this)) {\n      return;\n    }\n\n    const data = Tab.getOrCreateInstance(this);\n    data.show();\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Tab to jQuery only if jQuery is present\n   */\n\n  defineJQueryPlugin(Tab);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): toast.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME = 'toast';\n  const DATA_KEY = 'bs.toast';\n  const EVENT_KEY = `.${DATA_KEY}`;\n  const EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY}`;\n  const EVENT_MOUSEOVER = `mouseover${EVENT_KEY}`;\n  const EVENT_MOUSEOUT = `mouseout${EVENT_KEY}`;\n  const EVENT_FOCUSIN = `focusin${EVENT_KEY}`;\n  const EVENT_FOCUSOUT = `focusout${EVENT_KEY}`;\n  const EVENT_HIDE = `hide${EVENT_KEY}`;\n  const EVENT_HIDDEN = `hidden${EVENT_KEY}`;\n  const EVENT_SHOW = `show${EVENT_KEY}`;\n  const EVENT_SHOWN = `shown${EVENT_KEY}`;\n  const CLASS_NAME_FADE = 'fade';\n  const CLASS_NAME_HIDE = 'hide';\n  const CLASS_NAME_SHOW = 'show';\n  const CLASS_NAME_SHOWING = 'showing';\n  const DefaultType = {\n    animation: 'boolean',\n    autohide: 'boolean',\n    delay: 'number'\n  };\n  const Default = {\n    animation: true,\n    autohide: true,\n    delay: 5000\n  };\n  const SELECTOR_DATA_DISMISS = '[data-bs-dismiss=\"toast\"]';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Toast extends BaseComponent {\n    constructor(element, config) {\n      super(element);\n      this._config = this._getConfig(config);\n      this._timeout = null;\n      this._hasMouseInteraction = false;\n      this._hasKeyboardInteraction = false;\n\n      this._setListeners();\n    } // Getters\n\n\n    static get DefaultType() {\n      return DefaultType;\n    }\n\n    static get Default() {\n      return Default;\n    }\n\n    static get NAME() {\n      return NAME;\n    } // Public\n\n\n    show() {\n      const showEvent = EventHandler.trigger(this._element, EVENT_SHOW);\n\n      if (showEvent.defaultPrevented) {\n        return;\n      }\n\n      this._clearTimeout();\n\n      if (this._config.animation) {\n        this._element.classList.add(CLASS_NAME_FADE);\n      }\n\n      const complete = () => {\n        this._element.classList.remove(CLASS_NAME_SHOWING);\n\n        this._element.classList.add(CLASS_NAME_SHOW);\n\n        EventHandler.trigger(this._element, EVENT_SHOWN);\n\n        this._maybeScheduleHide();\n      };\n\n      this._element.classList.remove(CLASS_NAME_HIDE);\n\n      reflow(this._element);\n\n      this._element.classList.add(CLASS_NAME_SHOWING);\n\n      this._queueCallback(complete, this._element, this._config.animation);\n    }\n\n    hide() {\n      if (!this._element.classList.contains(CLASS_NAME_SHOW)) {\n        return;\n      }\n\n      const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE);\n\n      if (hideEvent.defaultPrevented) {\n        return;\n      }\n\n      const complete = () => {\n        this._element.classList.add(CLASS_NAME_HIDE);\n\n        EventHandler.trigger(this._element, EVENT_HIDDEN);\n      };\n\n      this._element.classList.remove(CLASS_NAME_SHOW);\n\n      this._queueCallback(complete, this._element, this._config.animation);\n    }\n\n    dispose() {\n      this._clearTimeout();\n\n      if (this._element.classList.contains(CLASS_NAME_SHOW)) {\n        this._element.classList.remove(CLASS_NAME_SHOW);\n      }\n\n      super.dispose();\n    } // Private\n\n\n    _getConfig(config) {\n      config = { ...Default,\n        ...Manipulator.getDataAttributes(this._element),\n        ...(typeof config === 'object' && config ? config : {})\n      };\n      typeCheckConfig(NAME, config, this.constructor.DefaultType);\n      return config;\n    }\n\n    _maybeScheduleHide() {\n      if (!this._config.autohide) {\n        return;\n      }\n\n      if (this._hasMouseInteraction || this._hasKeyboardInteraction) {\n        return;\n      }\n\n      this._timeout = setTimeout(() => {\n        this.hide();\n      }, this._config.delay);\n    }\n\n    _onInteraction(event, isInteracting) {\n      switch (event.type) {\n        case 'mouseover':\n        case 'mouseout':\n          this._hasMouseInteraction = isInteracting;\n          break;\n\n        case 'focusin':\n        case 'focusout':\n          this._hasKeyboardInteraction = isInteracting;\n          break;\n      }\n\n      if (isInteracting) {\n        this._clearTimeout();\n\n        return;\n      }\n\n      const nextElement = event.relatedTarget;\n\n      if (this._element === nextElement || this._element.contains(nextElement)) {\n        return;\n      }\n\n      this._maybeScheduleHide();\n    }\n\n    _setListeners() {\n      EventHandler.on(this._element, EVENT_CLICK_DISMISS, SELECTOR_DATA_DISMISS, () => this.hide());\n      EventHandler.on(this._element, EVENT_MOUSEOVER, event => this._onInteraction(event, true));\n      EventHandler.on(this._element, EVENT_MOUSEOUT, event => this._onInteraction(event, false));\n      EventHandler.on(this._element, EVENT_FOCUSIN, event => this._onInteraction(event, true));\n      EventHandler.on(this._element, EVENT_FOCUSOUT, event => this._onInteraction(event, false));\n    }\n\n    _clearTimeout() {\n      clearTimeout(this._timeout);\n      this._timeout = null;\n    } // Static\n\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = Toast.getOrCreateInstance(this, config);\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(`No method named \"${config}\"`);\n          }\n\n          data[config](this);\n        }\n      });\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Toast to jQuery only if jQuery is present\n   */\n\n\n  defineJQueryPlugin(Toast);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): index.umd.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  var index_umd = {\n    Alert,\n    Button,\n    Carousel,\n    Collapse,\n    Dropdown,\n    Modal,\n    Offcanvas,\n    Popover,\n    ScrollSpy,\n    Tab,\n    Toast,\n    Tooltip\n  };\n\n  return index_umd;\n\n})));\n//# sourceMappingURL=bootstrap.bundle.js.map\n"
  },
  {
    "path": "src/sourceDev.WebApp/SharedThemes/cosmo/wwwroot/js/bootstrap.esm.js",
    "content": "/*!\n  * Bootstrap v5.0.2 (https://getbootstrap.com/)\n  * Copyright 2011-2021 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)\n  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n  */\nimport * as Popper from '@popperjs/core';\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): dom/selector-engine.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\nconst NODE_TEXT = 3;\nconst SelectorEngine = {\n  find(selector, element = document.documentElement) {\n    return [].concat(...Element.prototype.querySelectorAll.call(element, selector));\n  },\n\n  findOne(selector, element = document.documentElement) {\n    return Element.prototype.querySelector.call(element, selector);\n  },\n\n  children(element, selector) {\n    return [].concat(...element.children).filter(child => child.matches(selector));\n  },\n\n  parents(element, selector) {\n    const parents = [];\n    let ancestor = element.parentNode;\n\n    while (ancestor && ancestor.nodeType === Node.ELEMENT_NODE && ancestor.nodeType !== NODE_TEXT) {\n      if (ancestor.matches(selector)) {\n        parents.push(ancestor);\n      }\n\n      ancestor = ancestor.parentNode;\n    }\n\n    return parents;\n  },\n\n  prev(element, selector) {\n    let previous = element.previousElementSibling;\n\n    while (previous) {\n      if (previous.matches(selector)) {\n        return [previous];\n      }\n\n      previous = previous.previousElementSibling;\n    }\n\n    return [];\n  },\n\n  next(element, selector) {\n    let next = element.nextElementSibling;\n\n    while (next) {\n      if (next.matches(selector)) {\n        return [next];\n      }\n\n      next = next.nextElementSibling;\n    }\n\n    return [];\n  }\n\n};\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): util/index.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst MAX_UID = 1000000;\nconst MILLISECONDS_MULTIPLIER = 1000;\nconst TRANSITION_END = 'transitionend'; // Shoutout AngusCroll (https://goo.gl/pxwQGp)\n\nconst toType = obj => {\n  if (obj === null || obj === undefined) {\n    return `${obj}`;\n  }\n\n  return {}.toString.call(obj).match(/\\s([a-z]+)/i)[1].toLowerCase();\n};\n/**\n * --------------------------------------------------------------------------\n * Public Util Api\n * --------------------------------------------------------------------------\n */\n\n\nconst getUID = prefix => {\n  do {\n    prefix += Math.floor(Math.random() * MAX_UID);\n  } while (document.getElementById(prefix));\n\n  return prefix;\n};\n\nconst getSelector = element => {\n  let selector = element.getAttribute('data-bs-target');\n\n  if (!selector || selector === '#') {\n    let hrefAttr = element.getAttribute('href'); // The only valid content that could double as a selector are IDs or classes,\n    // so everything starting with `#` or `.`. If a \"real\" URL is used as the selector,\n    // `document.querySelector` will rightfully complain it is invalid.\n    // See https://github.com/twbs/bootstrap/issues/32273\n\n    if (!hrefAttr || !hrefAttr.includes('#') && !hrefAttr.startsWith('.')) {\n      return null;\n    } // Just in case some CMS puts out a full URL with the anchor appended\n\n\n    if (hrefAttr.includes('#') && !hrefAttr.startsWith('#')) {\n      hrefAttr = `#${hrefAttr.split('#')[1]}`;\n    }\n\n    selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : null;\n  }\n\n  return selector;\n};\n\nconst getSelectorFromElement = element => {\n  const selector = getSelector(element);\n\n  if (selector) {\n    return document.querySelector(selector) ? selector : null;\n  }\n\n  return null;\n};\n\nconst getElementFromSelector = element => {\n  const selector = getSelector(element);\n  return selector ? document.querySelector(selector) : null;\n};\n\nconst getTransitionDurationFromElement = element => {\n  if (!element) {\n    return 0;\n  } // Get transition-duration of the element\n\n\n  let {\n    transitionDuration,\n    transitionDelay\n  } = window.getComputedStyle(element);\n  const floatTransitionDuration = Number.parseFloat(transitionDuration);\n  const floatTransitionDelay = Number.parseFloat(transitionDelay); // Return 0 if element or transition duration is not found\n\n  if (!floatTransitionDuration && !floatTransitionDelay) {\n    return 0;\n  } // If multiple durations are defined, take the first\n\n\n  transitionDuration = transitionDuration.split(',')[0];\n  transitionDelay = transitionDelay.split(',')[0];\n  return (Number.parseFloat(transitionDuration) + Number.parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER;\n};\n\nconst triggerTransitionEnd = element => {\n  element.dispatchEvent(new Event(TRANSITION_END));\n};\n\nconst isElement = obj => {\n  if (!obj || typeof obj !== 'object') {\n    return false;\n  }\n\n  if (typeof obj.jquery !== 'undefined') {\n    obj = obj[0];\n  }\n\n  return typeof obj.nodeType !== 'undefined';\n};\n\nconst getElement = obj => {\n  if (isElement(obj)) {\n    // it's a jQuery object or a node element\n    return obj.jquery ? obj[0] : obj;\n  }\n\n  if (typeof obj === 'string' && obj.length > 0) {\n    return SelectorEngine.findOne(obj);\n  }\n\n  return null;\n};\n\nconst typeCheckConfig = (componentName, config, configTypes) => {\n  Object.keys(configTypes).forEach(property => {\n    const expectedTypes = configTypes[property];\n    const value = config[property];\n    const valueType = value && isElement(value) ? 'element' : toType(value);\n\n    if (!new RegExp(expectedTypes).test(valueType)) {\n      throw new TypeError(`${componentName.toUpperCase()}: Option \"${property}\" provided type \"${valueType}\" but expected type \"${expectedTypes}\".`);\n    }\n  });\n};\n\nconst isVisible = element => {\n  if (!isElement(element) || element.getClientRects().length === 0) {\n    return false;\n  }\n\n  return getComputedStyle(element).getPropertyValue('visibility') === 'visible';\n};\n\nconst isDisabled = element => {\n  if (!element || element.nodeType !== Node.ELEMENT_NODE) {\n    return true;\n  }\n\n  if (element.classList.contains('disabled')) {\n    return true;\n  }\n\n  if (typeof element.disabled !== 'undefined') {\n    return element.disabled;\n  }\n\n  return element.hasAttribute('disabled') && element.getAttribute('disabled') !== 'false';\n};\n\nconst findShadowRoot = element => {\n  if (!document.documentElement.attachShadow) {\n    return null;\n  } // Can find the shadow root otherwise it'll return the document\n\n\n  if (typeof element.getRootNode === 'function') {\n    const root = element.getRootNode();\n    return root instanceof ShadowRoot ? root : null;\n  }\n\n  if (element instanceof ShadowRoot) {\n    return element;\n  } // when we don't find a shadow root\n\n\n  if (!element.parentNode) {\n    return null;\n  }\n\n  return findShadowRoot(element.parentNode);\n};\n\nconst noop = () => {};\n\nconst reflow = element => element.offsetHeight;\n\nconst getjQuery = () => {\n  const {\n    jQuery\n  } = window;\n\n  if (jQuery && !document.body.hasAttribute('data-bs-no-jquery')) {\n    return jQuery;\n  }\n\n  return null;\n};\n\nconst DOMContentLoadedCallbacks = [];\n\nconst onDOMContentLoaded = callback => {\n  if (document.readyState === 'loading') {\n    // add listener on the first call when the document is in loading state\n    if (!DOMContentLoadedCallbacks.length) {\n      document.addEventListener('DOMContentLoaded', () => {\n        DOMContentLoadedCallbacks.forEach(callback => callback());\n      });\n    }\n\n    DOMContentLoadedCallbacks.push(callback);\n  } else {\n    callback();\n  }\n};\n\nconst isRTL = () => document.documentElement.dir === 'rtl';\n\nconst defineJQueryPlugin = plugin => {\n  onDOMContentLoaded(() => {\n    const $ = getjQuery();\n    /* istanbul ignore if */\n\n    if ($) {\n      const name = plugin.NAME;\n      const JQUERY_NO_CONFLICT = $.fn[name];\n      $.fn[name] = plugin.jQueryInterface;\n      $.fn[name].Constructor = plugin;\n\n      $.fn[name].noConflict = () => {\n        $.fn[name] = JQUERY_NO_CONFLICT;\n        return plugin.jQueryInterface;\n      };\n    }\n  });\n};\n\nconst execute = callback => {\n  if (typeof callback === 'function') {\n    callback();\n  }\n};\n\nconst executeAfterTransition = (callback, transitionElement, waitForTransition = true) => {\n  if (!waitForTransition) {\n    execute(callback);\n    return;\n  }\n\n  const durationPadding = 5;\n  const emulatedDuration = getTransitionDurationFromElement(transitionElement) + durationPadding;\n  let called = false;\n\n  const handler = ({\n    target\n  }) => {\n    if (target !== transitionElement) {\n      return;\n    }\n\n    called = true;\n    transitionElement.removeEventListener(TRANSITION_END, handler);\n    execute(callback);\n  };\n\n  transitionElement.addEventListener(TRANSITION_END, handler);\n  setTimeout(() => {\n    if (!called) {\n      triggerTransitionEnd(transitionElement);\n    }\n  }, emulatedDuration);\n};\n/**\n * Return the previous/next element of a list.\n *\n * @param {array} list    The list of elements\n * @param activeElement   The active element\n * @param shouldGetNext   Choose to get next or previous element\n * @param isCycleAllowed\n * @return {Element|elem} The proper element\n */\n\n\nconst getNextActiveElement = (list, activeElement, shouldGetNext, isCycleAllowed) => {\n  let index = list.indexOf(activeElement); // if the element does not exist in the list return an element depending on the direction and if cycle is allowed\n\n  if (index === -1) {\n    return list[!shouldGetNext && isCycleAllowed ? list.length - 1 : 0];\n  }\n\n  const listLength = list.length;\n  index += shouldGetNext ? 1 : -1;\n\n  if (isCycleAllowed) {\n    index = (index + listLength) % listLength;\n  }\n\n  return list[Math.max(0, Math.min(index, listLength - 1))];\n};\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): dom/event-handler.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst namespaceRegex = /[^.]*(?=\\..*)\\.|.*/;\nconst stripNameRegex = /\\..*/;\nconst stripUidRegex = /::\\d+$/;\nconst eventRegistry = {}; // Events storage\n\nlet uidEvent = 1;\nconst customEvents = {\n  mouseenter: 'mouseover',\n  mouseleave: 'mouseout'\n};\nconst customEventsRegex = /^(mouseenter|mouseleave)/i;\nconst nativeEvents = new Set(['click', 'dblclick', 'mouseup', 'mousedown', 'contextmenu', 'mousewheel', 'DOMMouseScroll', 'mouseover', 'mouseout', 'mousemove', 'selectstart', 'selectend', 'keydown', 'keypress', 'keyup', 'orientationchange', 'touchstart', 'touchmove', 'touchend', 'touchcancel', 'pointerdown', 'pointermove', 'pointerup', 'pointerleave', 'pointercancel', 'gesturestart', 'gesturechange', 'gestureend', 'focus', 'blur', 'change', 'reset', 'select', 'submit', 'focusin', 'focusout', 'load', 'unload', 'beforeunload', 'resize', 'move', 'DOMContentLoaded', 'readystatechange', 'error', 'abort', 'scroll']);\n/**\n * ------------------------------------------------------------------------\n * Private methods\n * ------------------------------------------------------------------------\n */\n\nfunction getUidEvent(element, uid) {\n  return uid && `${uid}::${uidEvent++}` || element.uidEvent || uidEvent++;\n}\n\nfunction getEvent(element) {\n  const uid = getUidEvent(element);\n  element.uidEvent = uid;\n  eventRegistry[uid] = eventRegistry[uid] || {};\n  return eventRegistry[uid];\n}\n\nfunction bootstrapHandler(element, fn) {\n  return function handler(event) {\n    event.delegateTarget = element;\n\n    if (handler.oneOff) {\n      EventHandler.off(element, event.type, fn);\n    }\n\n    return fn.apply(element, [event]);\n  };\n}\n\nfunction bootstrapDelegationHandler(element, selector, fn) {\n  return function handler(event) {\n    const domElements = element.querySelectorAll(selector);\n\n    for (let {\n      target\n    } = event; target && target !== this; target = target.parentNode) {\n      for (let i = domElements.length; i--;) {\n        if (domElements[i] === target) {\n          event.delegateTarget = target;\n\n          if (handler.oneOff) {\n            // eslint-disable-next-line unicorn/consistent-destructuring\n            EventHandler.off(element, event.type, selector, fn);\n          }\n\n          return fn.apply(target, [event]);\n        }\n      }\n    } // To please ESLint\n\n\n    return null;\n  };\n}\n\nfunction findHandler(events, handler, delegationSelector = null) {\n  const uidEventList = Object.keys(events);\n\n  for (let i = 0, len = uidEventList.length; i < len; i++) {\n    const event = events[uidEventList[i]];\n\n    if (event.originalHandler === handler && event.delegationSelector === delegationSelector) {\n      return event;\n    }\n  }\n\n  return null;\n}\n\nfunction normalizeParams(originalTypeEvent, handler, delegationFn) {\n  const delegation = typeof handler === 'string';\n  const originalHandler = delegation ? delegationFn : handler;\n  let typeEvent = getTypeEvent(originalTypeEvent);\n  const isNative = nativeEvents.has(typeEvent);\n\n  if (!isNative) {\n    typeEvent = originalTypeEvent;\n  }\n\n  return [delegation, originalHandler, typeEvent];\n}\n\nfunction addHandler(element, originalTypeEvent, handler, delegationFn, oneOff) {\n  if (typeof originalTypeEvent !== 'string' || !element) {\n    return;\n  }\n\n  if (!handler) {\n    handler = delegationFn;\n    delegationFn = null;\n  } // in case of mouseenter or mouseleave wrap the handler within a function that checks for its DOM position\n  // this prevents the handler from being dispatched the same way as mouseover or mouseout does\n\n\n  if (customEventsRegex.test(originalTypeEvent)) {\n    const wrapFn = fn => {\n      return function (event) {\n        if (!event.relatedTarget || event.relatedTarget !== event.delegateTarget && !event.delegateTarget.contains(event.relatedTarget)) {\n          return fn.call(this, event);\n        }\n      };\n    };\n\n    if (delegationFn) {\n      delegationFn = wrapFn(delegationFn);\n    } else {\n      handler = wrapFn(handler);\n    }\n  }\n\n  const [delegation, originalHandler, typeEvent] = normalizeParams(originalTypeEvent, handler, delegationFn);\n  const events = getEvent(element);\n  const handlers = events[typeEvent] || (events[typeEvent] = {});\n  const previousFn = findHandler(handlers, originalHandler, delegation ? handler : null);\n\n  if (previousFn) {\n    previousFn.oneOff = previousFn.oneOff && oneOff;\n    return;\n  }\n\n  const uid = getUidEvent(originalHandler, originalTypeEvent.replace(namespaceRegex, ''));\n  const fn = delegation ? bootstrapDelegationHandler(element, handler, delegationFn) : bootstrapHandler(element, handler);\n  fn.delegationSelector = delegation ? handler : null;\n  fn.originalHandler = originalHandler;\n  fn.oneOff = oneOff;\n  fn.uidEvent = uid;\n  handlers[uid] = fn;\n  element.addEventListener(typeEvent, fn, delegation);\n}\n\nfunction removeHandler(element, events, typeEvent, handler, delegationSelector) {\n  const fn = findHandler(events[typeEvent], handler, delegationSelector);\n\n  if (!fn) {\n    return;\n  }\n\n  element.removeEventListener(typeEvent, fn, Boolean(delegationSelector));\n  delete events[typeEvent][fn.uidEvent];\n}\n\nfunction removeNamespacedHandlers(element, events, typeEvent, namespace) {\n  const storeElementEvent = events[typeEvent] || {};\n  Object.keys(storeElementEvent).forEach(handlerKey => {\n    if (handlerKey.includes(namespace)) {\n      const event = storeElementEvent[handlerKey];\n      removeHandler(element, events, typeEvent, event.originalHandler, event.delegationSelector);\n    }\n  });\n}\n\nfunction getTypeEvent(event) {\n  // allow to get the native events from namespaced events ('click.bs.button' --> 'click')\n  event = event.replace(stripNameRegex, '');\n  return customEvents[event] || event;\n}\n\nconst EventHandler = {\n  on(element, event, handler, delegationFn) {\n    addHandler(element, event, handler, delegationFn, false);\n  },\n\n  one(element, event, handler, delegationFn) {\n    addHandler(element, event, handler, delegationFn, true);\n  },\n\n  off(element, originalTypeEvent, handler, delegationFn) {\n    if (typeof originalTypeEvent !== 'string' || !element) {\n      return;\n    }\n\n    const [delegation, originalHandler, typeEvent] = normalizeParams(originalTypeEvent, handler, delegationFn);\n    const inNamespace = typeEvent !== originalTypeEvent;\n    const events = getEvent(element);\n    const isNamespace = originalTypeEvent.startsWith('.');\n\n    if (typeof originalHandler !== 'undefined') {\n      // Simplest case: handler is passed, remove that listener ONLY.\n      if (!events || !events[typeEvent]) {\n        return;\n      }\n\n      removeHandler(element, events, typeEvent, originalHandler, delegation ? handler : null);\n      return;\n    }\n\n    if (isNamespace) {\n      Object.keys(events).forEach(elementEvent => {\n        removeNamespacedHandlers(element, events, elementEvent, originalTypeEvent.slice(1));\n      });\n    }\n\n    const storeElementEvent = events[typeEvent] || {};\n    Object.keys(storeElementEvent).forEach(keyHandlers => {\n      const handlerKey = keyHandlers.replace(stripUidRegex, '');\n\n      if (!inNamespace || originalTypeEvent.includes(handlerKey)) {\n        const event = storeElementEvent[keyHandlers];\n        removeHandler(element, events, typeEvent, event.originalHandler, event.delegationSelector);\n      }\n    });\n  },\n\n  trigger(element, event, args) {\n    if (typeof event !== 'string' || !element) {\n      return null;\n    }\n\n    const $ = getjQuery();\n    const typeEvent = getTypeEvent(event);\n    const inNamespace = event !== typeEvent;\n    const isNative = nativeEvents.has(typeEvent);\n    let jQueryEvent;\n    let bubbles = true;\n    let nativeDispatch = true;\n    let defaultPrevented = false;\n    let evt = null;\n\n    if (inNamespace && $) {\n      jQueryEvent = $.Event(event, args);\n      $(element).trigger(jQueryEvent);\n      bubbles = !jQueryEvent.isPropagationStopped();\n      nativeDispatch = !jQueryEvent.isImmediatePropagationStopped();\n      defaultPrevented = jQueryEvent.isDefaultPrevented();\n    }\n\n    if (isNative) {\n      evt = document.createEvent('HTMLEvents');\n      evt.initEvent(typeEvent, bubbles, true);\n    } else {\n      evt = new CustomEvent(event, {\n        bubbles,\n        cancelable: true\n      });\n    } // merge custom information in our event\n\n\n    if (typeof args !== 'undefined') {\n      Object.keys(args).forEach(key => {\n        Object.defineProperty(evt, key, {\n          get() {\n            return args[key];\n          }\n\n        });\n      });\n    }\n\n    if (defaultPrevented) {\n      evt.preventDefault();\n    }\n\n    if (nativeDispatch) {\n      element.dispatchEvent(evt);\n    }\n\n    if (evt.defaultPrevented && typeof jQueryEvent !== 'undefined') {\n      jQueryEvent.preventDefault();\n    }\n\n    return evt;\n  }\n\n};\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): dom/data.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\nconst elementMap = new Map();\nvar Data = {\n  set(element, key, instance) {\n    if (!elementMap.has(element)) {\n      elementMap.set(element, new Map());\n    }\n\n    const instanceMap = elementMap.get(element); // make it clear we only want one instance per element\n    // can be removed later when multiple key/instances are fine to be used\n\n    if (!instanceMap.has(key) && instanceMap.size !== 0) {\n      // eslint-disable-next-line no-console\n      console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(instanceMap.keys())[0]}.`);\n      return;\n    }\n\n    instanceMap.set(key, instance);\n  },\n\n  get(element, key) {\n    if (elementMap.has(element)) {\n      return elementMap.get(element).get(key) || null;\n    }\n\n    return null;\n  },\n\n  remove(element, key) {\n    if (!elementMap.has(element)) {\n      return;\n    }\n\n    const instanceMap = elementMap.get(element);\n    instanceMap.delete(key); // free up element references if there are no instances left for an element\n\n    if (instanceMap.size === 0) {\n      elementMap.delete(element);\n    }\n  }\n\n};\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): base-component.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst VERSION = '5.0.2';\n\nclass BaseComponent {\n  constructor(element) {\n    element = getElement(element);\n\n    if (!element) {\n      return;\n    }\n\n    this._element = element;\n    Data.set(this._element, this.constructor.DATA_KEY, this);\n  }\n\n  dispose() {\n    Data.remove(this._element, this.constructor.DATA_KEY);\n    EventHandler.off(this._element, this.constructor.EVENT_KEY);\n    Object.getOwnPropertyNames(this).forEach(propertyName => {\n      this[propertyName] = null;\n    });\n  }\n\n  _queueCallback(callback, element, isAnimated = true) {\n    executeAfterTransition(callback, element, isAnimated);\n  }\n  /** Static */\n\n\n  static getInstance(element) {\n    return Data.get(element, this.DATA_KEY);\n  }\n\n  static getOrCreateInstance(element, config = {}) {\n    return this.getInstance(element) || new this(element, typeof config === 'object' ? config : null);\n  }\n\n  static get VERSION() {\n    return VERSION;\n  }\n\n  static get NAME() {\n    throw new Error('You have to implement the static method \"NAME\", for each component!');\n  }\n\n  static get DATA_KEY() {\n    return `bs.${this.NAME}`;\n  }\n\n  static get EVENT_KEY() {\n    return `.${this.DATA_KEY}`;\n  }\n\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): alert.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$c = 'alert';\nconst DATA_KEY$b = 'bs.alert';\nconst EVENT_KEY$b = `.${DATA_KEY$b}`;\nconst DATA_API_KEY$8 = '.data-api';\nconst SELECTOR_DISMISS = '[data-bs-dismiss=\"alert\"]';\nconst EVENT_CLOSE = `close${EVENT_KEY$b}`;\nconst EVENT_CLOSED = `closed${EVENT_KEY$b}`;\nconst EVENT_CLICK_DATA_API$7 = `click${EVENT_KEY$b}${DATA_API_KEY$8}`;\nconst CLASS_NAME_ALERT = 'alert';\nconst CLASS_NAME_FADE$6 = 'fade';\nconst CLASS_NAME_SHOW$9 = 'show';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Alert extends BaseComponent {\n  // Getters\n  static get NAME() {\n    return NAME$c;\n  } // Public\n\n\n  close(element) {\n    const rootElement = element ? this._getRootElement(element) : this._element;\n\n    const customEvent = this._triggerCloseEvent(rootElement);\n\n    if (customEvent === null || customEvent.defaultPrevented) {\n      return;\n    }\n\n    this._removeElement(rootElement);\n  } // Private\n\n\n  _getRootElement(element) {\n    return getElementFromSelector(element) || element.closest(`.${CLASS_NAME_ALERT}`);\n  }\n\n  _triggerCloseEvent(element) {\n    return EventHandler.trigger(element, EVENT_CLOSE);\n  }\n\n  _removeElement(element) {\n    element.classList.remove(CLASS_NAME_SHOW$9);\n    const isAnimated = element.classList.contains(CLASS_NAME_FADE$6);\n\n    this._queueCallback(() => this._destroyElement(element), element, isAnimated);\n  }\n\n  _destroyElement(element) {\n    element.remove();\n    EventHandler.trigger(element, EVENT_CLOSED);\n  } // Static\n\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Alert.getOrCreateInstance(this);\n\n      if (config === 'close') {\n        data[config](this);\n      }\n    });\n  }\n\n  static handleDismiss(alertInstance) {\n    return function (event) {\n      if (event) {\n        event.preventDefault();\n      }\n\n      alertInstance.close(this);\n    };\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$7, SELECTOR_DISMISS, Alert.handleDismiss(new Alert()));\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Alert to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Alert);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): button.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$b = 'button';\nconst DATA_KEY$a = 'bs.button';\nconst EVENT_KEY$a = `.${DATA_KEY$a}`;\nconst DATA_API_KEY$7 = '.data-api';\nconst CLASS_NAME_ACTIVE$3 = 'active';\nconst SELECTOR_DATA_TOGGLE$5 = '[data-bs-toggle=\"button\"]';\nconst EVENT_CLICK_DATA_API$6 = `click${EVENT_KEY$a}${DATA_API_KEY$7}`;\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Button extends BaseComponent {\n  // Getters\n  static get NAME() {\n    return NAME$b;\n  } // Public\n\n\n  toggle() {\n    // Toggle class and sync the `aria-pressed` attribute with the return value of the `.toggle()` method\n    this._element.setAttribute('aria-pressed', this._element.classList.toggle(CLASS_NAME_ACTIVE$3));\n  } // Static\n\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Button.getOrCreateInstance(this);\n\n      if (config === 'toggle') {\n        data[config]();\n      }\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$6, SELECTOR_DATA_TOGGLE$5, event => {\n  event.preventDefault();\n  const button = event.target.closest(SELECTOR_DATA_TOGGLE$5);\n  const data = Button.getOrCreateInstance(button);\n  data.toggle();\n});\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Button to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Button);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): dom/manipulator.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\nfunction normalizeData(val) {\n  if (val === 'true') {\n    return true;\n  }\n\n  if (val === 'false') {\n    return false;\n  }\n\n  if (val === Number(val).toString()) {\n    return Number(val);\n  }\n\n  if (val === '' || val === 'null') {\n    return null;\n  }\n\n  return val;\n}\n\nfunction normalizeDataKey(key) {\n  return key.replace(/[A-Z]/g, chr => `-${chr.toLowerCase()}`);\n}\n\nconst Manipulator = {\n  setDataAttribute(element, key, value) {\n    element.setAttribute(`data-bs-${normalizeDataKey(key)}`, value);\n  },\n\n  removeDataAttribute(element, key) {\n    element.removeAttribute(`data-bs-${normalizeDataKey(key)}`);\n  },\n\n  getDataAttributes(element) {\n    if (!element) {\n      return {};\n    }\n\n    const attributes = {};\n    Object.keys(element.dataset).filter(key => key.startsWith('bs')).forEach(key => {\n      let pureKey = key.replace(/^bs/, '');\n      pureKey = pureKey.charAt(0).toLowerCase() + pureKey.slice(1, pureKey.length);\n      attributes[pureKey] = normalizeData(element.dataset[key]);\n    });\n    return attributes;\n  },\n\n  getDataAttribute(element, key) {\n    return normalizeData(element.getAttribute(`data-bs-${normalizeDataKey(key)}`));\n  },\n\n  offset(element) {\n    const rect = element.getBoundingClientRect();\n    return {\n      top: rect.top + document.body.scrollTop,\n      left: rect.left + document.body.scrollLeft\n    };\n  },\n\n  position(element) {\n    return {\n      top: element.offsetTop,\n      left: element.offsetLeft\n    };\n  }\n\n};\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): carousel.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$a = 'carousel';\nconst DATA_KEY$9 = 'bs.carousel';\nconst EVENT_KEY$9 = `.${DATA_KEY$9}`;\nconst DATA_API_KEY$6 = '.data-api';\nconst ARROW_LEFT_KEY = 'ArrowLeft';\nconst ARROW_RIGHT_KEY = 'ArrowRight';\nconst TOUCHEVENT_COMPAT_WAIT = 500; // Time for mouse compat events to fire after touch\n\nconst SWIPE_THRESHOLD = 40;\nconst Default$9 = {\n  interval: 5000,\n  keyboard: true,\n  slide: false,\n  pause: 'hover',\n  wrap: true,\n  touch: true\n};\nconst DefaultType$9 = {\n  interval: '(number|boolean)',\n  keyboard: 'boolean',\n  slide: '(boolean|string)',\n  pause: '(string|boolean)',\n  wrap: 'boolean',\n  touch: 'boolean'\n};\nconst ORDER_NEXT = 'next';\nconst ORDER_PREV = 'prev';\nconst DIRECTION_LEFT = 'left';\nconst DIRECTION_RIGHT = 'right';\nconst KEY_TO_DIRECTION = {\n  [ARROW_LEFT_KEY]: DIRECTION_RIGHT,\n  [ARROW_RIGHT_KEY]: DIRECTION_LEFT\n};\nconst EVENT_SLIDE = `slide${EVENT_KEY$9}`;\nconst EVENT_SLID = `slid${EVENT_KEY$9}`;\nconst EVENT_KEYDOWN = `keydown${EVENT_KEY$9}`;\nconst EVENT_MOUSEENTER = `mouseenter${EVENT_KEY$9}`;\nconst EVENT_MOUSELEAVE = `mouseleave${EVENT_KEY$9}`;\nconst EVENT_TOUCHSTART = `touchstart${EVENT_KEY$9}`;\nconst EVENT_TOUCHMOVE = `touchmove${EVENT_KEY$9}`;\nconst EVENT_TOUCHEND = `touchend${EVENT_KEY$9}`;\nconst EVENT_POINTERDOWN = `pointerdown${EVENT_KEY$9}`;\nconst EVENT_POINTERUP = `pointerup${EVENT_KEY$9}`;\nconst EVENT_DRAG_START = `dragstart${EVENT_KEY$9}`;\nconst EVENT_LOAD_DATA_API$2 = `load${EVENT_KEY$9}${DATA_API_KEY$6}`;\nconst EVENT_CLICK_DATA_API$5 = `click${EVENT_KEY$9}${DATA_API_KEY$6}`;\nconst CLASS_NAME_CAROUSEL = 'carousel';\nconst CLASS_NAME_ACTIVE$2 = 'active';\nconst CLASS_NAME_SLIDE = 'slide';\nconst CLASS_NAME_END = 'carousel-item-end';\nconst CLASS_NAME_START = 'carousel-item-start';\nconst CLASS_NAME_NEXT = 'carousel-item-next';\nconst CLASS_NAME_PREV = 'carousel-item-prev';\nconst CLASS_NAME_POINTER_EVENT = 'pointer-event';\nconst SELECTOR_ACTIVE$1 = '.active';\nconst SELECTOR_ACTIVE_ITEM = '.active.carousel-item';\nconst SELECTOR_ITEM = '.carousel-item';\nconst SELECTOR_ITEM_IMG = '.carousel-item img';\nconst SELECTOR_NEXT_PREV = '.carousel-item-next, .carousel-item-prev';\nconst SELECTOR_INDICATORS = '.carousel-indicators';\nconst SELECTOR_INDICATOR = '[data-bs-target]';\nconst SELECTOR_DATA_SLIDE = '[data-bs-slide], [data-bs-slide-to]';\nconst SELECTOR_DATA_RIDE = '[data-bs-ride=\"carousel\"]';\nconst POINTER_TYPE_TOUCH = 'touch';\nconst POINTER_TYPE_PEN = 'pen';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Carousel extends BaseComponent {\n  constructor(element, config) {\n    super(element);\n    this._items = null;\n    this._interval = null;\n    this._activeElement = null;\n    this._isPaused = false;\n    this._isSliding = false;\n    this.touchTimeout = null;\n    this.touchStartX = 0;\n    this.touchDeltaX = 0;\n    this._config = this._getConfig(config);\n    this._indicatorsElement = SelectorEngine.findOne(SELECTOR_INDICATORS, this._element);\n    this._touchSupported = 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0;\n    this._pointerEvent = Boolean(window.PointerEvent);\n\n    this._addEventListeners();\n  } // Getters\n\n\n  static get Default() {\n    return Default$9;\n  }\n\n  static get NAME() {\n    return NAME$a;\n  } // Public\n\n\n  next() {\n    this._slide(ORDER_NEXT);\n  }\n\n  nextWhenVisible() {\n    // Don't call next when the page isn't visible\n    // or the carousel or its parent isn't visible\n    if (!document.hidden && isVisible(this._element)) {\n      this.next();\n    }\n  }\n\n  prev() {\n    this._slide(ORDER_PREV);\n  }\n\n  pause(event) {\n    if (!event) {\n      this._isPaused = true;\n    }\n\n    if (SelectorEngine.findOne(SELECTOR_NEXT_PREV, this._element)) {\n      triggerTransitionEnd(this._element);\n      this.cycle(true);\n    }\n\n    clearInterval(this._interval);\n    this._interval = null;\n  }\n\n  cycle(event) {\n    if (!event) {\n      this._isPaused = false;\n    }\n\n    if (this._interval) {\n      clearInterval(this._interval);\n      this._interval = null;\n    }\n\n    if (this._config && this._config.interval && !this._isPaused) {\n      this._updateInterval();\n\n      this._interval = setInterval((document.visibilityState ? this.nextWhenVisible : this.next).bind(this), this._config.interval);\n    }\n  }\n\n  to(index) {\n    this._activeElement = SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element);\n\n    const activeIndex = this._getItemIndex(this._activeElement);\n\n    if (index > this._items.length - 1 || index < 0) {\n      return;\n    }\n\n    if (this._isSliding) {\n      EventHandler.one(this._element, EVENT_SLID, () => this.to(index));\n      return;\n    }\n\n    if (activeIndex === index) {\n      this.pause();\n      this.cycle();\n      return;\n    }\n\n    const order = index > activeIndex ? ORDER_NEXT : ORDER_PREV;\n\n    this._slide(order, this._items[index]);\n  } // Private\n\n\n  _getConfig(config) {\n    config = { ...Default$9,\n      ...Manipulator.getDataAttributes(this._element),\n      ...(typeof config === 'object' ? config : {})\n    };\n    typeCheckConfig(NAME$a, config, DefaultType$9);\n    return config;\n  }\n\n  _handleSwipe() {\n    const absDeltax = Math.abs(this.touchDeltaX);\n\n    if (absDeltax <= SWIPE_THRESHOLD) {\n      return;\n    }\n\n    const direction = absDeltax / this.touchDeltaX;\n    this.touchDeltaX = 0;\n\n    if (!direction) {\n      return;\n    }\n\n    this._slide(direction > 0 ? DIRECTION_RIGHT : DIRECTION_LEFT);\n  }\n\n  _addEventListeners() {\n    if (this._config.keyboard) {\n      EventHandler.on(this._element, EVENT_KEYDOWN, event => this._keydown(event));\n    }\n\n    if (this._config.pause === 'hover') {\n      EventHandler.on(this._element, EVENT_MOUSEENTER, event => this.pause(event));\n      EventHandler.on(this._element, EVENT_MOUSELEAVE, event => this.cycle(event));\n    }\n\n    if (this._config.touch && this._touchSupported) {\n      this._addTouchEventListeners();\n    }\n  }\n\n  _addTouchEventListeners() {\n    const start = event => {\n      if (this._pointerEvent && (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH)) {\n        this.touchStartX = event.clientX;\n      } else if (!this._pointerEvent) {\n        this.touchStartX = event.touches[0].clientX;\n      }\n    };\n\n    const move = event => {\n      // ensure swiping with one touch and not pinching\n      this.touchDeltaX = event.touches && event.touches.length > 1 ? 0 : event.touches[0].clientX - this.touchStartX;\n    };\n\n    const end = event => {\n      if (this._pointerEvent && (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH)) {\n        this.touchDeltaX = event.clientX - this.touchStartX;\n      }\n\n      this._handleSwipe();\n\n      if (this._config.pause === 'hover') {\n        // If it's a touch-enabled device, mouseenter/leave are fired as\n        // part of the mouse compatibility events on first tap - the carousel\n        // would stop cycling until user tapped out of it;\n        // here, we listen for touchend, explicitly pause the carousel\n        // (as if it's the second time we tap on it, mouseenter compat event\n        // is NOT fired) and after a timeout (to allow for mouse compatibility\n        // events to fire) we explicitly restart cycling\n        this.pause();\n\n        if (this.touchTimeout) {\n          clearTimeout(this.touchTimeout);\n        }\n\n        this.touchTimeout = setTimeout(event => this.cycle(event), TOUCHEVENT_COMPAT_WAIT + this._config.interval);\n      }\n    };\n\n    SelectorEngine.find(SELECTOR_ITEM_IMG, this._element).forEach(itemImg => {\n      EventHandler.on(itemImg, EVENT_DRAG_START, e => e.preventDefault());\n    });\n\n    if (this._pointerEvent) {\n      EventHandler.on(this._element, EVENT_POINTERDOWN, event => start(event));\n      EventHandler.on(this._element, EVENT_POINTERUP, event => end(event));\n\n      this._element.classList.add(CLASS_NAME_POINTER_EVENT);\n    } else {\n      EventHandler.on(this._element, EVENT_TOUCHSTART, event => start(event));\n      EventHandler.on(this._element, EVENT_TOUCHMOVE, event => move(event));\n      EventHandler.on(this._element, EVENT_TOUCHEND, event => end(event));\n    }\n  }\n\n  _keydown(event) {\n    if (/input|textarea/i.test(event.target.tagName)) {\n      return;\n    }\n\n    const direction = KEY_TO_DIRECTION[event.key];\n\n    if (direction) {\n      event.preventDefault();\n\n      this._slide(direction);\n    }\n  }\n\n  _getItemIndex(element) {\n    this._items = element && element.parentNode ? SelectorEngine.find(SELECTOR_ITEM, element.parentNode) : [];\n    return this._items.indexOf(element);\n  }\n\n  _getItemByOrder(order, activeElement) {\n    const isNext = order === ORDER_NEXT;\n    return getNextActiveElement(this._items, activeElement, isNext, this._config.wrap);\n  }\n\n  _triggerSlideEvent(relatedTarget, eventDirectionName) {\n    const targetIndex = this._getItemIndex(relatedTarget);\n\n    const fromIndex = this._getItemIndex(SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element));\n\n    return EventHandler.trigger(this._element, EVENT_SLIDE, {\n      relatedTarget,\n      direction: eventDirectionName,\n      from: fromIndex,\n      to: targetIndex\n    });\n  }\n\n  _setActiveIndicatorElement(element) {\n    if (this._indicatorsElement) {\n      const activeIndicator = SelectorEngine.findOne(SELECTOR_ACTIVE$1, this._indicatorsElement);\n      activeIndicator.classList.remove(CLASS_NAME_ACTIVE$2);\n      activeIndicator.removeAttribute('aria-current');\n      const indicators = SelectorEngine.find(SELECTOR_INDICATOR, this._indicatorsElement);\n\n      for (let i = 0; i < indicators.length; i++) {\n        if (Number.parseInt(indicators[i].getAttribute('data-bs-slide-to'), 10) === this._getItemIndex(element)) {\n          indicators[i].classList.add(CLASS_NAME_ACTIVE$2);\n          indicators[i].setAttribute('aria-current', 'true');\n          break;\n        }\n      }\n    }\n  }\n\n  _updateInterval() {\n    const element = this._activeElement || SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element);\n\n    if (!element) {\n      return;\n    }\n\n    const elementInterval = Number.parseInt(element.getAttribute('data-bs-interval'), 10);\n\n    if (elementInterval) {\n      this._config.defaultInterval = this._config.defaultInterval || this._config.interval;\n      this._config.interval = elementInterval;\n    } else {\n      this._config.interval = this._config.defaultInterval || this._config.interval;\n    }\n  }\n\n  _slide(directionOrOrder, element) {\n    const order = this._directionToOrder(directionOrOrder);\n\n    const activeElement = SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element);\n\n    const activeElementIndex = this._getItemIndex(activeElement);\n\n    const nextElement = element || this._getItemByOrder(order, activeElement);\n\n    const nextElementIndex = this._getItemIndex(nextElement);\n\n    const isCycling = Boolean(this._interval);\n    const isNext = order === ORDER_NEXT;\n    const directionalClassName = isNext ? CLASS_NAME_START : CLASS_NAME_END;\n    const orderClassName = isNext ? CLASS_NAME_NEXT : CLASS_NAME_PREV;\n\n    const eventDirectionName = this._orderToDirection(order);\n\n    if (nextElement && nextElement.classList.contains(CLASS_NAME_ACTIVE$2)) {\n      this._isSliding = false;\n      return;\n    }\n\n    if (this._isSliding) {\n      return;\n    }\n\n    const slideEvent = this._triggerSlideEvent(nextElement, eventDirectionName);\n\n    if (slideEvent.defaultPrevented) {\n      return;\n    }\n\n    if (!activeElement || !nextElement) {\n      // Some weirdness is happening, so we bail\n      return;\n    }\n\n    this._isSliding = true;\n\n    if (isCycling) {\n      this.pause();\n    }\n\n    this._setActiveIndicatorElement(nextElement);\n\n    this._activeElement = nextElement;\n\n    const triggerSlidEvent = () => {\n      EventHandler.trigger(this._element, EVENT_SLID, {\n        relatedTarget: nextElement,\n        direction: eventDirectionName,\n        from: activeElementIndex,\n        to: nextElementIndex\n      });\n    };\n\n    if (this._element.classList.contains(CLASS_NAME_SLIDE)) {\n      nextElement.classList.add(orderClassName);\n      reflow(nextElement);\n      activeElement.classList.add(directionalClassName);\n      nextElement.classList.add(directionalClassName);\n\n      const completeCallBack = () => {\n        nextElement.classList.remove(directionalClassName, orderClassName);\n        nextElement.classList.add(CLASS_NAME_ACTIVE$2);\n        activeElement.classList.remove(CLASS_NAME_ACTIVE$2, orderClassName, directionalClassName);\n        this._isSliding = false;\n        setTimeout(triggerSlidEvent, 0);\n      };\n\n      this._queueCallback(completeCallBack, activeElement, true);\n    } else {\n      activeElement.classList.remove(CLASS_NAME_ACTIVE$2);\n      nextElement.classList.add(CLASS_NAME_ACTIVE$2);\n      this._isSliding = false;\n      triggerSlidEvent();\n    }\n\n    if (isCycling) {\n      this.cycle();\n    }\n  }\n\n  _directionToOrder(direction) {\n    if (![DIRECTION_RIGHT, DIRECTION_LEFT].includes(direction)) {\n      return direction;\n    }\n\n    if (isRTL()) {\n      return direction === DIRECTION_LEFT ? ORDER_PREV : ORDER_NEXT;\n    }\n\n    return direction === DIRECTION_LEFT ? ORDER_NEXT : ORDER_PREV;\n  }\n\n  _orderToDirection(order) {\n    if (![ORDER_NEXT, ORDER_PREV].includes(order)) {\n      return order;\n    }\n\n    if (isRTL()) {\n      return order === ORDER_PREV ? DIRECTION_LEFT : DIRECTION_RIGHT;\n    }\n\n    return order === ORDER_PREV ? DIRECTION_RIGHT : DIRECTION_LEFT;\n  } // Static\n\n\n  static carouselInterface(element, config) {\n    const data = Carousel.getOrCreateInstance(element, config);\n    let {\n      _config\n    } = data;\n\n    if (typeof config === 'object') {\n      _config = { ..._config,\n        ...config\n      };\n    }\n\n    const action = typeof config === 'string' ? config : _config.slide;\n\n    if (typeof config === 'number') {\n      data.to(config);\n    } else if (typeof action === 'string') {\n      if (typeof data[action] === 'undefined') {\n        throw new TypeError(`No method named \"${action}\"`);\n      }\n\n      data[action]();\n    } else if (_config.interval && _config.ride) {\n      data.pause();\n      data.cycle();\n    }\n  }\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      Carousel.carouselInterface(this, config);\n    });\n  }\n\n  static dataApiClickHandler(event) {\n    const target = getElementFromSelector(this);\n\n    if (!target || !target.classList.contains(CLASS_NAME_CAROUSEL)) {\n      return;\n    }\n\n    const config = { ...Manipulator.getDataAttributes(target),\n      ...Manipulator.getDataAttributes(this)\n    };\n    const slideIndex = this.getAttribute('data-bs-slide-to');\n\n    if (slideIndex) {\n      config.interval = false;\n    }\n\n    Carousel.carouselInterface(target, config);\n\n    if (slideIndex) {\n      Carousel.getInstance(target).to(slideIndex);\n    }\n\n    event.preventDefault();\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$5, SELECTOR_DATA_SLIDE, Carousel.dataApiClickHandler);\nEventHandler.on(window, EVENT_LOAD_DATA_API$2, () => {\n  const carousels = SelectorEngine.find(SELECTOR_DATA_RIDE);\n\n  for (let i = 0, len = carousels.length; i < len; i++) {\n    Carousel.carouselInterface(carousels[i], Carousel.getInstance(carousels[i]));\n  }\n});\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Carousel to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Carousel);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): collapse.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$9 = 'collapse';\nconst DATA_KEY$8 = 'bs.collapse';\nconst EVENT_KEY$8 = `.${DATA_KEY$8}`;\nconst DATA_API_KEY$5 = '.data-api';\nconst Default$8 = {\n  toggle: true,\n  parent: ''\n};\nconst DefaultType$8 = {\n  toggle: 'boolean',\n  parent: '(string|element)'\n};\nconst EVENT_SHOW$5 = `show${EVENT_KEY$8}`;\nconst EVENT_SHOWN$5 = `shown${EVENT_KEY$8}`;\nconst EVENT_HIDE$5 = `hide${EVENT_KEY$8}`;\nconst EVENT_HIDDEN$5 = `hidden${EVENT_KEY$8}`;\nconst EVENT_CLICK_DATA_API$4 = `click${EVENT_KEY$8}${DATA_API_KEY$5}`;\nconst CLASS_NAME_SHOW$8 = 'show';\nconst CLASS_NAME_COLLAPSE = 'collapse';\nconst CLASS_NAME_COLLAPSING = 'collapsing';\nconst CLASS_NAME_COLLAPSED = 'collapsed';\nconst WIDTH = 'width';\nconst HEIGHT = 'height';\nconst SELECTOR_ACTIVES = '.show, .collapsing';\nconst SELECTOR_DATA_TOGGLE$4 = '[data-bs-toggle=\"collapse\"]';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Collapse extends BaseComponent {\n  constructor(element, config) {\n    super(element);\n    this._isTransitioning = false;\n    this._config = this._getConfig(config);\n    this._triggerArray = SelectorEngine.find(`${SELECTOR_DATA_TOGGLE$4}[href=\"#${this._element.id}\"],` + `${SELECTOR_DATA_TOGGLE$4}[data-bs-target=\"#${this._element.id}\"]`);\n    const toggleList = SelectorEngine.find(SELECTOR_DATA_TOGGLE$4);\n\n    for (let i = 0, len = toggleList.length; i < len; i++) {\n      const elem = toggleList[i];\n      const selector = getSelectorFromElement(elem);\n      const filterElement = SelectorEngine.find(selector).filter(foundElem => foundElem === this._element);\n\n      if (selector !== null && filterElement.length) {\n        this._selector = selector;\n\n        this._triggerArray.push(elem);\n      }\n    }\n\n    this._parent = this._config.parent ? this._getParent() : null;\n\n    if (!this._config.parent) {\n      this._addAriaAndCollapsedClass(this._element, this._triggerArray);\n    }\n\n    if (this._config.toggle) {\n      this.toggle();\n    }\n  } // Getters\n\n\n  static get Default() {\n    return Default$8;\n  }\n\n  static get NAME() {\n    return NAME$9;\n  } // Public\n\n\n  toggle() {\n    if (this._element.classList.contains(CLASS_NAME_SHOW$8)) {\n      this.hide();\n    } else {\n      this.show();\n    }\n  }\n\n  show() {\n    if (this._isTransitioning || this._element.classList.contains(CLASS_NAME_SHOW$8)) {\n      return;\n    }\n\n    let actives;\n    let activesData;\n\n    if (this._parent) {\n      actives = SelectorEngine.find(SELECTOR_ACTIVES, this._parent).filter(elem => {\n        if (typeof this._config.parent === 'string') {\n          return elem.getAttribute('data-bs-parent') === this._config.parent;\n        }\n\n        return elem.classList.contains(CLASS_NAME_COLLAPSE);\n      });\n\n      if (actives.length === 0) {\n        actives = null;\n      }\n    }\n\n    const container = SelectorEngine.findOne(this._selector);\n\n    if (actives) {\n      const tempActiveData = actives.find(elem => container !== elem);\n      activesData = tempActiveData ? Collapse.getInstance(tempActiveData) : null;\n\n      if (activesData && activesData._isTransitioning) {\n        return;\n      }\n    }\n\n    const startEvent = EventHandler.trigger(this._element, EVENT_SHOW$5);\n\n    if (startEvent.defaultPrevented) {\n      return;\n    }\n\n    if (actives) {\n      actives.forEach(elemActive => {\n        if (container !== elemActive) {\n          Collapse.collapseInterface(elemActive, 'hide');\n        }\n\n        if (!activesData) {\n          Data.set(elemActive, DATA_KEY$8, null);\n        }\n      });\n    }\n\n    const dimension = this._getDimension();\n\n    this._element.classList.remove(CLASS_NAME_COLLAPSE);\n\n    this._element.classList.add(CLASS_NAME_COLLAPSING);\n\n    this._element.style[dimension] = 0;\n\n    if (this._triggerArray.length) {\n      this._triggerArray.forEach(element => {\n        element.classList.remove(CLASS_NAME_COLLAPSED);\n        element.setAttribute('aria-expanded', true);\n      });\n    }\n\n    this.setTransitioning(true);\n\n    const complete = () => {\n      this._element.classList.remove(CLASS_NAME_COLLAPSING);\n\n      this._element.classList.add(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$8);\n\n      this._element.style[dimension] = '';\n      this.setTransitioning(false);\n      EventHandler.trigger(this._element, EVENT_SHOWN$5);\n    };\n\n    const capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1);\n    const scrollSize = `scroll${capitalizedDimension}`;\n\n    this._queueCallback(complete, this._element, true);\n\n    this._element.style[dimension] = `${this._element[scrollSize]}px`;\n  }\n\n  hide() {\n    if (this._isTransitioning || !this._element.classList.contains(CLASS_NAME_SHOW$8)) {\n      return;\n    }\n\n    const startEvent = EventHandler.trigger(this._element, EVENT_HIDE$5);\n\n    if (startEvent.defaultPrevented) {\n      return;\n    }\n\n    const dimension = this._getDimension();\n\n    this._element.style[dimension] = `${this._element.getBoundingClientRect()[dimension]}px`;\n    reflow(this._element);\n\n    this._element.classList.add(CLASS_NAME_COLLAPSING);\n\n    this._element.classList.remove(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$8);\n\n    const triggerArrayLength = this._triggerArray.length;\n\n    if (triggerArrayLength > 0) {\n      for (let i = 0; i < triggerArrayLength; i++) {\n        const trigger = this._triggerArray[i];\n        const elem = getElementFromSelector(trigger);\n\n        if (elem && !elem.classList.contains(CLASS_NAME_SHOW$8)) {\n          trigger.classList.add(CLASS_NAME_COLLAPSED);\n          trigger.setAttribute('aria-expanded', false);\n        }\n      }\n    }\n\n    this.setTransitioning(true);\n\n    const complete = () => {\n      this.setTransitioning(false);\n\n      this._element.classList.remove(CLASS_NAME_COLLAPSING);\n\n      this._element.classList.add(CLASS_NAME_COLLAPSE);\n\n      EventHandler.trigger(this._element, EVENT_HIDDEN$5);\n    };\n\n    this._element.style[dimension] = '';\n\n    this._queueCallback(complete, this._element, true);\n  }\n\n  setTransitioning(isTransitioning) {\n    this._isTransitioning = isTransitioning;\n  } // Private\n\n\n  _getConfig(config) {\n    config = { ...Default$8,\n      ...config\n    };\n    config.toggle = Boolean(config.toggle); // Coerce string values\n\n    typeCheckConfig(NAME$9, config, DefaultType$8);\n    return config;\n  }\n\n  _getDimension() {\n    return this._element.classList.contains(WIDTH) ? WIDTH : HEIGHT;\n  }\n\n  _getParent() {\n    let {\n      parent\n    } = this._config;\n    parent = getElement(parent);\n    const selector = `${SELECTOR_DATA_TOGGLE$4}[data-bs-parent=\"${parent}\"]`;\n    SelectorEngine.find(selector, parent).forEach(element => {\n      const selected = getElementFromSelector(element);\n\n      this._addAriaAndCollapsedClass(selected, [element]);\n    });\n    return parent;\n  }\n\n  _addAriaAndCollapsedClass(element, triggerArray) {\n    if (!element || !triggerArray.length) {\n      return;\n    }\n\n    const isOpen = element.classList.contains(CLASS_NAME_SHOW$8);\n    triggerArray.forEach(elem => {\n      if (isOpen) {\n        elem.classList.remove(CLASS_NAME_COLLAPSED);\n      } else {\n        elem.classList.add(CLASS_NAME_COLLAPSED);\n      }\n\n      elem.setAttribute('aria-expanded', isOpen);\n    });\n  } // Static\n\n\n  static collapseInterface(element, config) {\n    let data = Collapse.getInstance(element);\n    const _config = { ...Default$8,\n      ...Manipulator.getDataAttributes(element),\n      ...(typeof config === 'object' && config ? config : {})\n    };\n\n    if (!data && _config.toggle && typeof config === 'string' && /show|hide/.test(config)) {\n      _config.toggle = false;\n    }\n\n    if (!data) {\n      data = new Collapse(element, _config);\n    }\n\n    if (typeof config === 'string') {\n      if (typeof data[config] === 'undefined') {\n        throw new TypeError(`No method named \"${config}\"`);\n      }\n\n      data[config]();\n    }\n  }\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      Collapse.collapseInterface(this, config);\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$4, SELECTOR_DATA_TOGGLE$4, function (event) {\n  // preventDefault only for <a> elements (which change the URL) not inside the collapsible element\n  if (event.target.tagName === 'A' || event.delegateTarget && event.delegateTarget.tagName === 'A') {\n    event.preventDefault();\n  }\n\n  const triggerData = Manipulator.getDataAttributes(this);\n  const selector = getSelectorFromElement(this);\n  const selectorElements = SelectorEngine.find(selector);\n  selectorElements.forEach(element => {\n    const data = Collapse.getInstance(element);\n    let config;\n\n    if (data) {\n      // update parent attribute\n      if (data._parent === null && typeof triggerData.parent === 'string') {\n        data._config.parent = triggerData.parent;\n        data._parent = data._getParent();\n      }\n\n      config = 'toggle';\n    } else {\n      config = triggerData;\n    }\n\n    Collapse.collapseInterface(element, config);\n  });\n});\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Collapse to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Collapse);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): dropdown.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$8 = 'dropdown';\nconst DATA_KEY$7 = 'bs.dropdown';\nconst EVENT_KEY$7 = `.${DATA_KEY$7}`;\nconst DATA_API_KEY$4 = '.data-api';\nconst ESCAPE_KEY$2 = 'Escape';\nconst SPACE_KEY = 'Space';\nconst TAB_KEY = 'Tab';\nconst ARROW_UP_KEY = 'ArrowUp';\nconst ARROW_DOWN_KEY = 'ArrowDown';\nconst RIGHT_MOUSE_BUTTON = 2; // MouseEvent.button value for the secondary button, usually the right button\n\nconst REGEXP_KEYDOWN = new RegExp(`${ARROW_UP_KEY}|${ARROW_DOWN_KEY}|${ESCAPE_KEY$2}`);\nconst EVENT_HIDE$4 = `hide${EVENT_KEY$7}`;\nconst EVENT_HIDDEN$4 = `hidden${EVENT_KEY$7}`;\nconst EVENT_SHOW$4 = `show${EVENT_KEY$7}`;\nconst EVENT_SHOWN$4 = `shown${EVENT_KEY$7}`;\nconst EVENT_CLICK = `click${EVENT_KEY$7}`;\nconst EVENT_CLICK_DATA_API$3 = `click${EVENT_KEY$7}${DATA_API_KEY$4}`;\nconst EVENT_KEYDOWN_DATA_API = `keydown${EVENT_KEY$7}${DATA_API_KEY$4}`;\nconst EVENT_KEYUP_DATA_API = `keyup${EVENT_KEY$7}${DATA_API_KEY$4}`;\nconst CLASS_NAME_SHOW$7 = 'show';\nconst CLASS_NAME_DROPUP = 'dropup';\nconst CLASS_NAME_DROPEND = 'dropend';\nconst CLASS_NAME_DROPSTART = 'dropstart';\nconst CLASS_NAME_NAVBAR = 'navbar';\nconst SELECTOR_DATA_TOGGLE$3 = '[data-bs-toggle=\"dropdown\"]';\nconst SELECTOR_MENU = '.dropdown-menu';\nconst SELECTOR_NAVBAR_NAV = '.navbar-nav';\nconst SELECTOR_VISIBLE_ITEMS = '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)';\nconst PLACEMENT_TOP = isRTL() ? 'top-end' : 'top-start';\nconst PLACEMENT_TOPEND = isRTL() ? 'top-start' : 'top-end';\nconst PLACEMENT_BOTTOM = isRTL() ? 'bottom-end' : 'bottom-start';\nconst PLACEMENT_BOTTOMEND = isRTL() ? 'bottom-start' : 'bottom-end';\nconst PLACEMENT_RIGHT = isRTL() ? 'left-start' : 'right-start';\nconst PLACEMENT_LEFT = isRTL() ? 'right-start' : 'left-start';\nconst Default$7 = {\n  offset: [0, 2],\n  boundary: 'clippingParents',\n  reference: 'toggle',\n  display: 'dynamic',\n  popperConfig: null,\n  autoClose: true\n};\nconst DefaultType$7 = {\n  offset: '(array|string|function)',\n  boundary: '(string|element)',\n  reference: '(string|element|object)',\n  display: 'string',\n  popperConfig: '(null|object|function)',\n  autoClose: '(boolean|string)'\n};\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Dropdown extends BaseComponent {\n  constructor(element, config) {\n    super(element);\n    this._popper = null;\n    this._config = this._getConfig(config);\n    this._menu = this._getMenuElement();\n    this._inNavbar = this._detectNavbar();\n\n    this._addEventListeners();\n  } // Getters\n\n\n  static get Default() {\n    return Default$7;\n  }\n\n  static get DefaultType() {\n    return DefaultType$7;\n  }\n\n  static get NAME() {\n    return NAME$8;\n  } // Public\n\n\n  toggle() {\n    if (isDisabled(this._element)) {\n      return;\n    }\n\n    const isActive = this._element.classList.contains(CLASS_NAME_SHOW$7);\n\n    if (isActive) {\n      this.hide();\n      return;\n    }\n\n    this.show();\n  }\n\n  show() {\n    if (isDisabled(this._element) || this._menu.classList.contains(CLASS_NAME_SHOW$7)) {\n      return;\n    }\n\n    const parent = Dropdown.getParentFromElement(this._element);\n    const relatedTarget = {\n      relatedTarget: this._element\n    };\n    const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$4, relatedTarget);\n\n    if (showEvent.defaultPrevented) {\n      return;\n    } // Totally disable Popper for Dropdowns in Navbar\n\n\n    if (this._inNavbar) {\n      Manipulator.setDataAttribute(this._menu, 'popper', 'none');\n    } else {\n      if (typeof Popper === 'undefined') {\n        throw new TypeError('Bootstrap\\'s dropdowns require Popper (https://popper.js.org)');\n      }\n\n      let referenceElement = this._element;\n\n      if (this._config.reference === 'parent') {\n        referenceElement = parent;\n      } else if (isElement(this._config.reference)) {\n        referenceElement = getElement(this._config.reference);\n      } else if (typeof this._config.reference === 'object') {\n        referenceElement = this._config.reference;\n      }\n\n      const popperConfig = this._getPopperConfig();\n\n      const isDisplayStatic = popperConfig.modifiers.find(modifier => modifier.name === 'applyStyles' && modifier.enabled === false);\n      this._popper = Popper.createPopper(referenceElement, this._menu, popperConfig);\n\n      if (isDisplayStatic) {\n        Manipulator.setDataAttribute(this._menu, 'popper', 'static');\n      }\n    } // If this is a touch-enabled device we add extra\n    // empty mouseover listeners to the body's immediate children;\n    // only needed because of broken event delegation on iOS\n    // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n\n\n    if ('ontouchstart' in document.documentElement && !parent.closest(SELECTOR_NAVBAR_NAV)) {\n      [].concat(...document.body.children).forEach(elem => EventHandler.on(elem, 'mouseover', noop));\n    }\n\n    this._element.focus();\n\n    this._element.setAttribute('aria-expanded', true);\n\n    this._menu.classList.toggle(CLASS_NAME_SHOW$7);\n\n    this._element.classList.toggle(CLASS_NAME_SHOW$7);\n\n    EventHandler.trigger(this._element, EVENT_SHOWN$4, relatedTarget);\n  }\n\n  hide() {\n    if (isDisabled(this._element) || !this._menu.classList.contains(CLASS_NAME_SHOW$7)) {\n      return;\n    }\n\n    const relatedTarget = {\n      relatedTarget: this._element\n    };\n\n    this._completeHide(relatedTarget);\n  }\n\n  dispose() {\n    if (this._popper) {\n      this._popper.destroy();\n    }\n\n    super.dispose();\n  }\n\n  update() {\n    this._inNavbar = this._detectNavbar();\n\n    if (this._popper) {\n      this._popper.update();\n    }\n  } // Private\n\n\n  _addEventListeners() {\n    EventHandler.on(this._element, EVENT_CLICK, event => {\n      event.preventDefault();\n      this.toggle();\n    });\n  }\n\n  _completeHide(relatedTarget) {\n    const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$4, relatedTarget);\n\n    if (hideEvent.defaultPrevented) {\n      return;\n    } // If this is a touch-enabled device we remove the extra\n    // empty mouseover listeners we added for iOS support\n\n\n    if ('ontouchstart' in document.documentElement) {\n      [].concat(...document.body.children).forEach(elem => EventHandler.off(elem, 'mouseover', noop));\n    }\n\n    if (this._popper) {\n      this._popper.destroy();\n    }\n\n    this._menu.classList.remove(CLASS_NAME_SHOW$7);\n\n    this._element.classList.remove(CLASS_NAME_SHOW$7);\n\n    this._element.setAttribute('aria-expanded', 'false');\n\n    Manipulator.removeDataAttribute(this._menu, 'popper');\n    EventHandler.trigger(this._element, EVENT_HIDDEN$4, relatedTarget);\n  }\n\n  _getConfig(config) {\n    config = { ...this.constructor.Default,\n      ...Manipulator.getDataAttributes(this._element),\n      ...config\n    };\n    typeCheckConfig(NAME$8, config, this.constructor.DefaultType);\n\n    if (typeof config.reference === 'object' && !isElement(config.reference) && typeof config.reference.getBoundingClientRect !== 'function') {\n      // Popper virtual elements require a getBoundingClientRect method\n      throw new TypeError(`${NAME$8.toUpperCase()}: Option \"reference\" provided type \"object\" without a required \"getBoundingClientRect\" method.`);\n    }\n\n    return config;\n  }\n\n  _getMenuElement() {\n    return SelectorEngine.next(this._element, SELECTOR_MENU)[0];\n  }\n\n  _getPlacement() {\n    const parentDropdown = this._element.parentNode;\n\n    if (parentDropdown.classList.contains(CLASS_NAME_DROPEND)) {\n      return PLACEMENT_RIGHT;\n    }\n\n    if (parentDropdown.classList.contains(CLASS_NAME_DROPSTART)) {\n      return PLACEMENT_LEFT;\n    } // We need to trim the value because custom properties can also include spaces\n\n\n    const isEnd = getComputedStyle(this._menu).getPropertyValue('--bs-position').trim() === 'end';\n\n    if (parentDropdown.classList.contains(CLASS_NAME_DROPUP)) {\n      return isEnd ? PLACEMENT_TOPEND : PLACEMENT_TOP;\n    }\n\n    return isEnd ? PLACEMENT_BOTTOMEND : PLACEMENT_BOTTOM;\n  }\n\n  _detectNavbar() {\n    return this._element.closest(`.${CLASS_NAME_NAVBAR}`) !== null;\n  }\n\n  _getOffset() {\n    const {\n      offset\n    } = this._config;\n\n    if (typeof offset === 'string') {\n      return offset.split(',').map(val => Number.parseInt(val, 10));\n    }\n\n    if (typeof offset === 'function') {\n      return popperData => offset(popperData, this._element);\n    }\n\n    return offset;\n  }\n\n  _getPopperConfig() {\n    const defaultBsPopperConfig = {\n      placement: this._getPlacement(),\n      modifiers: [{\n        name: 'preventOverflow',\n        options: {\n          boundary: this._config.boundary\n        }\n      }, {\n        name: 'offset',\n        options: {\n          offset: this._getOffset()\n        }\n      }]\n    }; // Disable Popper if we have a static display\n\n    if (this._config.display === 'static') {\n      defaultBsPopperConfig.modifiers = [{\n        name: 'applyStyles',\n        enabled: false\n      }];\n    }\n\n    return { ...defaultBsPopperConfig,\n      ...(typeof this._config.popperConfig === 'function' ? this._config.popperConfig(defaultBsPopperConfig) : this._config.popperConfig)\n    };\n  }\n\n  _selectMenuItem({\n    key,\n    target\n  }) {\n    const items = SelectorEngine.find(SELECTOR_VISIBLE_ITEMS, this._menu).filter(isVisible);\n\n    if (!items.length) {\n      return;\n    } // if target isn't included in items (e.g. when expanding the dropdown)\n    // allow cycling to get the last item in case key equals ARROW_UP_KEY\n\n\n    getNextActiveElement(items, target, key === ARROW_DOWN_KEY, !items.includes(target)).focus();\n  } // Static\n\n\n  static dropdownInterface(element, config) {\n    const data = Dropdown.getOrCreateInstance(element, config);\n\n    if (typeof config === 'string') {\n      if (typeof data[config] === 'undefined') {\n        throw new TypeError(`No method named \"${config}\"`);\n      }\n\n      data[config]();\n    }\n  }\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      Dropdown.dropdownInterface(this, config);\n    });\n  }\n\n  static clearMenus(event) {\n    if (event && (event.button === RIGHT_MOUSE_BUTTON || event.type === 'keyup' && event.key !== TAB_KEY)) {\n      return;\n    }\n\n    const toggles = SelectorEngine.find(SELECTOR_DATA_TOGGLE$3);\n\n    for (let i = 0, len = toggles.length; i < len; i++) {\n      const context = Dropdown.getInstance(toggles[i]);\n\n      if (!context || context._config.autoClose === false) {\n        continue;\n      }\n\n      if (!context._element.classList.contains(CLASS_NAME_SHOW$7)) {\n        continue;\n      }\n\n      const relatedTarget = {\n        relatedTarget: context._element\n      };\n\n      if (event) {\n        const composedPath = event.composedPath();\n        const isMenuTarget = composedPath.includes(context._menu);\n\n        if (composedPath.includes(context._element) || context._config.autoClose === 'inside' && !isMenuTarget || context._config.autoClose === 'outside' && isMenuTarget) {\n          continue;\n        } // Tab navigation through the dropdown menu or events from contained inputs shouldn't close the menu\n\n\n        if (context._menu.contains(event.target) && (event.type === 'keyup' && event.key === TAB_KEY || /input|select|option|textarea|form/i.test(event.target.tagName))) {\n          continue;\n        }\n\n        if (event.type === 'click') {\n          relatedTarget.clickEvent = event;\n        }\n      }\n\n      context._completeHide(relatedTarget);\n    }\n  }\n\n  static getParentFromElement(element) {\n    return getElementFromSelector(element) || element.parentNode;\n  }\n\n  static dataApiKeydownHandler(event) {\n    // If not input/textarea:\n    //  - And not a key in REGEXP_KEYDOWN => not a dropdown command\n    // If input/textarea:\n    //  - If space key => not a dropdown command\n    //  - If key is other than escape\n    //    - If key is not up or down => not a dropdown command\n    //    - If trigger inside the menu => not a dropdown command\n    if (/input|textarea/i.test(event.target.tagName) ? event.key === SPACE_KEY || event.key !== ESCAPE_KEY$2 && (event.key !== ARROW_DOWN_KEY && event.key !== ARROW_UP_KEY || event.target.closest(SELECTOR_MENU)) : !REGEXP_KEYDOWN.test(event.key)) {\n      return;\n    }\n\n    const isActive = this.classList.contains(CLASS_NAME_SHOW$7);\n\n    if (!isActive && event.key === ESCAPE_KEY$2) {\n      return;\n    }\n\n    event.preventDefault();\n    event.stopPropagation();\n\n    if (isDisabled(this)) {\n      return;\n    }\n\n    const getToggleButton = () => this.matches(SELECTOR_DATA_TOGGLE$3) ? this : SelectorEngine.prev(this, SELECTOR_DATA_TOGGLE$3)[0];\n\n    if (event.key === ESCAPE_KEY$2) {\n      getToggleButton().focus();\n      Dropdown.clearMenus();\n      return;\n    }\n\n    if (event.key === ARROW_UP_KEY || event.key === ARROW_DOWN_KEY) {\n      if (!isActive) {\n        getToggleButton().click();\n      }\n\n      Dropdown.getInstance(getToggleButton())._selectMenuItem(event);\n\n      return;\n    }\n\n    if (!isActive || event.key === SPACE_KEY) {\n      Dropdown.clearMenus();\n    }\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_DATA_TOGGLE$3, Dropdown.dataApiKeydownHandler);\nEventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown.dataApiKeydownHandler);\nEventHandler.on(document, EVENT_CLICK_DATA_API$3, Dropdown.clearMenus);\nEventHandler.on(document, EVENT_KEYUP_DATA_API, Dropdown.clearMenus);\nEventHandler.on(document, EVENT_CLICK_DATA_API$3, SELECTOR_DATA_TOGGLE$3, function (event) {\n  event.preventDefault();\n  Dropdown.dropdownInterface(this);\n});\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Dropdown to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Dropdown);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): util/scrollBar.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\nconst SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top';\nconst SELECTOR_STICKY_CONTENT = '.sticky-top';\n\nclass ScrollBarHelper {\n  constructor() {\n    this._element = document.body;\n  }\n\n  getWidth() {\n    // https://developer.mozilla.org/en-US/docs/Web/API/Window/innerWidth#usage_notes\n    const documentWidth = document.documentElement.clientWidth;\n    return Math.abs(window.innerWidth - documentWidth);\n  }\n\n  hide() {\n    const width = this.getWidth();\n\n    this._disableOverFlow(); // give padding to element to balance the hidden scrollbar width\n\n\n    this._setElementAttributes(this._element, 'paddingRight', calculatedValue => calculatedValue + width); // trick: We adjust positive paddingRight and negative marginRight to sticky-top elements to keep showing fullwidth\n\n\n    this._setElementAttributes(SELECTOR_FIXED_CONTENT, 'paddingRight', calculatedValue => calculatedValue + width);\n\n    this._setElementAttributes(SELECTOR_STICKY_CONTENT, 'marginRight', calculatedValue => calculatedValue - width);\n  }\n\n  _disableOverFlow() {\n    this._saveInitialAttribute(this._element, 'overflow');\n\n    this._element.style.overflow = 'hidden';\n  }\n\n  _setElementAttributes(selector, styleProp, callback) {\n    const scrollbarWidth = this.getWidth();\n\n    const manipulationCallBack = element => {\n      if (element !== this._element && window.innerWidth > element.clientWidth + scrollbarWidth) {\n        return;\n      }\n\n      this._saveInitialAttribute(element, styleProp);\n\n      const calculatedValue = window.getComputedStyle(element)[styleProp];\n      element.style[styleProp] = `${callback(Number.parseFloat(calculatedValue))}px`;\n    };\n\n    this._applyManipulationCallback(selector, manipulationCallBack);\n  }\n\n  reset() {\n    this._resetElementAttributes(this._element, 'overflow');\n\n    this._resetElementAttributes(this._element, 'paddingRight');\n\n    this._resetElementAttributes(SELECTOR_FIXED_CONTENT, 'paddingRight');\n\n    this._resetElementAttributes(SELECTOR_STICKY_CONTENT, 'marginRight');\n  }\n\n  _saveInitialAttribute(element, styleProp) {\n    const actualValue = element.style[styleProp];\n\n    if (actualValue) {\n      Manipulator.setDataAttribute(element, styleProp, actualValue);\n    }\n  }\n\n  _resetElementAttributes(selector, styleProp) {\n    const manipulationCallBack = element => {\n      const value = Manipulator.getDataAttribute(element, styleProp);\n\n      if (typeof value === 'undefined') {\n        element.style.removeProperty(styleProp);\n      } else {\n        Manipulator.removeDataAttribute(element, styleProp);\n        element.style[styleProp] = value;\n      }\n    };\n\n    this._applyManipulationCallback(selector, manipulationCallBack);\n  }\n\n  _applyManipulationCallback(selector, callBack) {\n    if (isElement(selector)) {\n      callBack(selector);\n    } else {\n      SelectorEngine.find(selector, this._element).forEach(callBack);\n    }\n  }\n\n  isOverflowing() {\n    return this.getWidth() > 0;\n  }\n\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): util/backdrop.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\nconst Default$6 = {\n  isVisible: true,\n  // if false, we use the backdrop helper without adding any element to the dom\n  isAnimated: false,\n  rootElement: 'body',\n  // give the choice to place backdrop under different elements\n  clickCallback: null\n};\nconst DefaultType$6 = {\n  isVisible: 'boolean',\n  isAnimated: 'boolean',\n  rootElement: '(element|string)',\n  clickCallback: '(function|null)'\n};\nconst NAME$7 = 'backdrop';\nconst CLASS_NAME_BACKDROP = 'modal-backdrop';\nconst CLASS_NAME_FADE$5 = 'fade';\nconst CLASS_NAME_SHOW$6 = 'show';\nconst EVENT_MOUSEDOWN = `mousedown.bs.${NAME$7}`;\n\nclass Backdrop {\n  constructor(config) {\n    this._config = this._getConfig(config);\n    this._isAppended = false;\n    this._element = null;\n  }\n\n  show(callback) {\n    if (!this._config.isVisible) {\n      execute(callback);\n      return;\n    }\n\n    this._append();\n\n    if (this._config.isAnimated) {\n      reflow(this._getElement());\n    }\n\n    this._getElement().classList.add(CLASS_NAME_SHOW$6);\n\n    this._emulateAnimation(() => {\n      execute(callback);\n    });\n  }\n\n  hide(callback) {\n    if (!this._config.isVisible) {\n      execute(callback);\n      return;\n    }\n\n    this._getElement().classList.remove(CLASS_NAME_SHOW$6);\n\n    this._emulateAnimation(() => {\n      this.dispose();\n      execute(callback);\n    });\n  } // Private\n\n\n  _getElement() {\n    if (!this._element) {\n      const backdrop = document.createElement('div');\n      backdrop.className = CLASS_NAME_BACKDROP;\n\n      if (this._config.isAnimated) {\n        backdrop.classList.add(CLASS_NAME_FADE$5);\n      }\n\n      this._element = backdrop;\n    }\n\n    return this._element;\n  }\n\n  _getConfig(config) {\n    config = { ...Default$6,\n      ...(typeof config === 'object' ? config : {})\n    }; // use getElement() with the default \"body\" to get a fresh Element on each instantiation\n\n    config.rootElement = getElement(config.rootElement);\n    typeCheckConfig(NAME$7, config, DefaultType$6);\n    return config;\n  }\n\n  _append() {\n    if (this._isAppended) {\n      return;\n    }\n\n    this._config.rootElement.appendChild(this._getElement());\n\n    EventHandler.on(this._getElement(), EVENT_MOUSEDOWN, () => {\n      execute(this._config.clickCallback);\n    });\n    this._isAppended = true;\n  }\n\n  dispose() {\n    if (!this._isAppended) {\n      return;\n    }\n\n    EventHandler.off(this._element, EVENT_MOUSEDOWN);\n\n    this._element.remove();\n\n    this._isAppended = false;\n  }\n\n  _emulateAnimation(callback) {\n    executeAfterTransition(callback, this._getElement(), this._config.isAnimated);\n  }\n\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): modal.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$6 = 'modal';\nconst DATA_KEY$6 = 'bs.modal';\nconst EVENT_KEY$6 = `.${DATA_KEY$6}`;\nconst DATA_API_KEY$3 = '.data-api';\nconst ESCAPE_KEY$1 = 'Escape';\nconst Default$5 = {\n  backdrop: true,\n  keyboard: true,\n  focus: true\n};\nconst DefaultType$5 = {\n  backdrop: '(boolean|string)',\n  keyboard: 'boolean',\n  focus: 'boolean'\n};\nconst EVENT_HIDE$3 = `hide${EVENT_KEY$6}`;\nconst EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY$6}`;\nconst EVENT_HIDDEN$3 = `hidden${EVENT_KEY$6}`;\nconst EVENT_SHOW$3 = `show${EVENT_KEY$6}`;\nconst EVENT_SHOWN$3 = `shown${EVENT_KEY$6}`;\nconst EVENT_FOCUSIN$2 = `focusin${EVENT_KEY$6}`;\nconst EVENT_RESIZE = `resize${EVENT_KEY$6}`;\nconst EVENT_CLICK_DISMISS$2 = `click.dismiss${EVENT_KEY$6}`;\nconst EVENT_KEYDOWN_DISMISS$1 = `keydown.dismiss${EVENT_KEY$6}`;\nconst EVENT_MOUSEUP_DISMISS = `mouseup.dismiss${EVENT_KEY$6}`;\nconst EVENT_MOUSEDOWN_DISMISS = `mousedown.dismiss${EVENT_KEY$6}`;\nconst EVENT_CLICK_DATA_API$2 = `click${EVENT_KEY$6}${DATA_API_KEY$3}`;\nconst CLASS_NAME_OPEN = 'modal-open';\nconst CLASS_NAME_FADE$4 = 'fade';\nconst CLASS_NAME_SHOW$5 = 'show';\nconst CLASS_NAME_STATIC = 'modal-static';\nconst SELECTOR_DIALOG = '.modal-dialog';\nconst SELECTOR_MODAL_BODY = '.modal-body';\nconst SELECTOR_DATA_TOGGLE$2 = '[data-bs-toggle=\"modal\"]';\nconst SELECTOR_DATA_DISMISS$2 = '[data-bs-dismiss=\"modal\"]';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Modal extends BaseComponent {\n  constructor(element, config) {\n    super(element);\n    this._config = this._getConfig(config);\n    this._dialog = SelectorEngine.findOne(SELECTOR_DIALOG, this._element);\n    this._backdrop = this._initializeBackDrop();\n    this._isShown = false;\n    this._ignoreBackdropClick = false;\n    this._isTransitioning = false;\n    this._scrollBar = new ScrollBarHelper();\n  } // Getters\n\n\n  static get Default() {\n    return Default$5;\n  }\n\n  static get NAME() {\n    return NAME$6;\n  } // Public\n\n\n  toggle(relatedTarget) {\n    return this._isShown ? this.hide() : this.show(relatedTarget);\n  }\n\n  show(relatedTarget) {\n    if (this._isShown || this._isTransitioning) {\n      return;\n    }\n\n    const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$3, {\n      relatedTarget\n    });\n\n    if (showEvent.defaultPrevented) {\n      return;\n    }\n\n    this._isShown = true;\n\n    if (this._isAnimated()) {\n      this._isTransitioning = true;\n    }\n\n    this._scrollBar.hide();\n\n    document.body.classList.add(CLASS_NAME_OPEN);\n\n    this._adjustDialog();\n\n    this._setEscapeEvent();\n\n    this._setResizeEvent();\n\n    EventHandler.on(this._element, EVENT_CLICK_DISMISS$2, SELECTOR_DATA_DISMISS$2, event => this.hide(event));\n    EventHandler.on(this._dialog, EVENT_MOUSEDOWN_DISMISS, () => {\n      EventHandler.one(this._element, EVENT_MOUSEUP_DISMISS, event => {\n        if (event.target === this._element) {\n          this._ignoreBackdropClick = true;\n        }\n      });\n    });\n\n    this._showBackdrop(() => this._showElement(relatedTarget));\n  }\n\n  hide(event) {\n    if (event && ['A', 'AREA'].includes(event.target.tagName)) {\n      event.preventDefault();\n    }\n\n    if (!this._isShown || this._isTransitioning) {\n      return;\n    }\n\n    const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$3);\n\n    if (hideEvent.defaultPrevented) {\n      return;\n    }\n\n    this._isShown = false;\n\n    const isAnimated = this._isAnimated();\n\n    if (isAnimated) {\n      this._isTransitioning = true;\n    }\n\n    this._setEscapeEvent();\n\n    this._setResizeEvent();\n\n    EventHandler.off(document, EVENT_FOCUSIN$2);\n\n    this._element.classList.remove(CLASS_NAME_SHOW$5);\n\n    EventHandler.off(this._element, EVENT_CLICK_DISMISS$2);\n    EventHandler.off(this._dialog, EVENT_MOUSEDOWN_DISMISS);\n\n    this._queueCallback(() => this._hideModal(), this._element, isAnimated);\n  }\n\n  dispose() {\n    [window, this._dialog].forEach(htmlElement => EventHandler.off(htmlElement, EVENT_KEY$6));\n\n    this._backdrop.dispose();\n\n    super.dispose();\n    /**\n     * `document` has 2 events `EVENT_FOCUSIN` and `EVENT_CLICK_DATA_API`\n     * Do not move `document` in `htmlElements` array\n     * It will remove `EVENT_CLICK_DATA_API` event that should remain\n     */\n\n    EventHandler.off(document, EVENT_FOCUSIN$2);\n  }\n\n  handleUpdate() {\n    this._adjustDialog();\n  } // Private\n\n\n  _initializeBackDrop() {\n    return new Backdrop({\n      isVisible: Boolean(this._config.backdrop),\n      // 'static' option will be translated to true, and booleans will keep their value\n      isAnimated: this._isAnimated()\n    });\n  }\n\n  _getConfig(config) {\n    config = { ...Default$5,\n      ...Manipulator.getDataAttributes(this._element),\n      ...(typeof config === 'object' ? config : {})\n    };\n    typeCheckConfig(NAME$6, config, DefaultType$5);\n    return config;\n  }\n\n  _showElement(relatedTarget) {\n    const isAnimated = this._isAnimated();\n\n    const modalBody = SelectorEngine.findOne(SELECTOR_MODAL_BODY, this._dialog);\n\n    if (!this._element.parentNode || this._element.parentNode.nodeType !== Node.ELEMENT_NODE) {\n      // Don't move modal's DOM position\n      document.body.appendChild(this._element);\n    }\n\n    this._element.style.display = 'block';\n\n    this._element.removeAttribute('aria-hidden');\n\n    this._element.setAttribute('aria-modal', true);\n\n    this._element.setAttribute('role', 'dialog');\n\n    this._element.scrollTop = 0;\n\n    if (modalBody) {\n      modalBody.scrollTop = 0;\n    }\n\n    if (isAnimated) {\n      reflow(this._element);\n    }\n\n    this._element.classList.add(CLASS_NAME_SHOW$5);\n\n    if (this._config.focus) {\n      this._enforceFocus();\n    }\n\n    const transitionComplete = () => {\n      if (this._config.focus) {\n        this._element.focus();\n      }\n\n      this._isTransitioning = false;\n      EventHandler.trigger(this._element, EVENT_SHOWN$3, {\n        relatedTarget\n      });\n    };\n\n    this._queueCallback(transitionComplete, this._dialog, isAnimated);\n  }\n\n  _enforceFocus() {\n    EventHandler.off(document, EVENT_FOCUSIN$2); // guard against infinite focus loop\n\n    EventHandler.on(document, EVENT_FOCUSIN$2, event => {\n      if (document !== event.target && this._element !== event.target && !this._element.contains(event.target)) {\n        this._element.focus();\n      }\n    });\n  }\n\n  _setEscapeEvent() {\n    if (this._isShown) {\n      EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS$1, event => {\n        if (this._config.keyboard && event.key === ESCAPE_KEY$1) {\n          event.preventDefault();\n          this.hide();\n        } else if (!this._config.keyboard && event.key === ESCAPE_KEY$1) {\n          this._triggerBackdropTransition();\n        }\n      });\n    } else {\n      EventHandler.off(this._element, EVENT_KEYDOWN_DISMISS$1);\n    }\n  }\n\n  _setResizeEvent() {\n    if (this._isShown) {\n      EventHandler.on(window, EVENT_RESIZE, () => this._adjustDialog());\n    } else {\n      EventHandler.off(window, EVENT_RESIZE);\n    }\n  }\n\n  _hideModal() {\n    this._element.style.display = 'none';\n\n    this._element.setAttribute('aria-hidden', true);\n\n    this._element.removeAttribute('aria-modal');\n\n    this._element.removeAttribute('role');\n\n    this._isTransitioning = false;\n\n    this._backdrop.hide(() => {\n      document.body.classList.remove(CLASS_NAME_OPEN);\n\n      this._resetAdjustments();\n\n      this._scrollBar.reset();\n\n      EventHandler.trigger(this._element, EVENT_HIDDEN$3);\n    });\n  }\n\n  _showBackdrop(callback) {\n    EventHandler.on(this._element, EVENT_CLICK_DISMISS$2, event => {\n      if (this._ignoreBackdropClick) {\n        this._ignoreBackdropClick = false;\n        return;\n      }\n\n      if (event.target !== event.currentTarget) {\n        return;\n      }\n\n      if (this._config.backdrop === true) {\n        this.hide();\n      } else if (this._config.backdrop === 'static') {\n        this._triggerBackdropTransition();\n      }\n    });\n\n    this._backdrop.show(callback);\n  }\n\n  _isAnimated() {\n    return this._element.classList.contains(CLASS_NAME_FADE$4);\n  }\n\n  _triggerBackdropTransition() {\n    const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED);\n\n    if (hideEvent.defaultPrevented) {\n      return;\n    }\n\n    const {\n      classList,\n      scrollHeight,\n      style\n    } = this._element;\n    const isModalOverflowing = scrollHeight > document.documentElement.clientHeight; // return if the following background transition hasn't yet completed\n\n    if (!isModalOverflowing && style.overflowY === 'hidden' || classList.contains(CLASS_NAME_STATIC)) {\n      return;\n    }\n\n    if (!isModalOverflowing) {\n      style.overflowY = 'hidden';\n    }\n\n    classList.add(CLASS_NAME_STATIC);\n\n    this._queueCallback(() => {\n      classList.remove(CLASS_NAME_STATIC);\n\n      if (!isModalOverflowing) {\n        this._queueCallback(() => {\n          style.overflowY = '';\n        }, this._dialog);\n      }\n    }, this._dialog);\n\n    this._element.focus();\n  } // ----------------------------------------------------------------------\n  // the following methods are used to handle overflowing modals\n  // ----------------------------------------------------------------------\n\n\n  _adjustDialog() {\n    const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;\n\n    const scrollbarWidth = this._scrollBar.getWidth();\n\n    const isBodyOverflowing = scrollbarWidth > 0;\n\n    if (!isBodyOverflowing && isModalOverflowing && !isRTL() || isBodyOverflowing && !isModalOverflowing && isRTL()) {\n      this._element.style.paddingLeft = `${scrollbarWidth}px`;\n    }\n\n    if (isBodyOverflowing && !isModalOverflowing && !isRTL() || !isBodyOverflowing && isModalOverflowing && isRTL()) {\n      this._element.style.paddingRight = `${scrollbarWidth}px`;\n    }\n  }\n\n  _resetAdjustments() {\n    this._element.style.paddingLeft = '';\n    this._element.style.paddingRight = '';\n  } // Static\n\n\n  static jQueryInterface(config, relatedTarget) {\n    return this.each(function () {\n      const data = Modal.getOrCreateInstance(this, config);\n\n      if (typeof config !== 'string') {\n        return;\n      }\n\n      if (typeof data[config] === 'undefined') {\n        throw new TypeError(`No method named \"${config}\"`);\n      }\n\n      data[config](relatedTarget);\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$2, SELECTOR_DATA_TOGGLE$2, function (event) {\n  const target = getElementFromSelector(this);\n\n  if (['A', 'AREA'].includes(this.tagName)) {\n    event.preventDefault();\n  }\n\n  EventHandler.one(target, EVENT_SHOW$3, showEvent => {\n    if (showEvent.defaultPrevented) {\n      // only register focus restorer if modal will actually get shown\n      return;\n    }\n\n    EventHandler.one(target, EVENT_HIDDEN$3, () => {\n      if (isVisible(this)) {\n        this.focus();\n      }\n    });\n  });\n  const data = Modal.getOrCreateInstance(target);\n  data.toggle(this);\n});\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Modal to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Modal);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): offcanvas.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$5 = 'offcanvas';\nconst DATA_KEY$5 = 'bs.offcanvas';\nconst EVENT_KEY$5 = `.${DATA_KEY$5}`;\nconst DATA_API_KEY$2 = '.data-api';\nconst EVENT_LOAD_DATA_API$1 = `load${EVENT_KEY$5}${DATA_API_KEY$2}`;\nconst ESCAPE_KEY = 'Escape';\nconst Default$4 = {\n  backdrop: true,\n  keyboard: true,\n  scroll: false\n};\nconst DefaultType$4 = {\n  backdrop: 'boolean',\n  keyboard: 'boolean',\n  scroll: 'boolean'\n};\nconst CLASS_NAME_SHOW$4 = 'show';\nconst OPEN_SELECTOR = '.offcanvas.show';\nconst EVENT_SHOW$2 = `show${EVENT_KEY$5}`;\nconst EVENT_SHOWN$2 = `shown${EVENT_KEY$5}`;\nconst EVENT_HIDE$2 = `hide${EVENT_KEY$5}`;\nconst EVENT_HIDDEN$2 = `hidden${EVENT_KEY$5}`;\nconst EVENT_FOCUSIN$1 = `focusin${EVENT_KEY$5}`;\nconst EVENT_CLICK_DATA_API$1 = `click${EVENT_KEY$5}${DATA_API_KEY$2}`;\nconst EVENT_CLICK_DISMISS$1 = `click.dismiss${EVENT_KEY$5}`;\nconst EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY$5}`;\nconst SELECTOR_DATA_DISMISS$1 = '[data-bs-dismiss=\"offcanvas\"]';\nconst SELECTOR_DATA_TOGGLE$1 = '[data-bs-toggle=\"offcanvas\"]';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Offcanvas extends BaseComponent {\n  constructor(element, config) {\n    super(element);\n    this._config = this._getConfig(config);\n    this._isShown = false;\n    this._backdrop = this._initializeBackDrop();\n\n    this._addEventListeners();\n  } // Getters\n\n\n  static get NAME() {\n    return NAME$5;\n  }\n\n  static get Default() {\n    return Default$4;\n  } // Public\n\n\n  toggle(relatedTarget) {\n    return this._isShown ? this.hide() : this.show(relatedTarget);\n  }\n\n  show(relatedTarget) {\n    if (this._isShown) {\n      return;\n    }\n\n    const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$2, {\n      relatedTarget\n    });\n\n    if (showEvent.defaultPrevented) {\n      return;\n    }\n\n    this._isShown = true;\n    this._element.style.visibility = 'visible';\n\n    this._backdrop.show();\n\n    if (!this._config.scroll) {\n      new ScrollBarHelper().hide();\n\n      this._enforceFocusOnElement(this._element);\n    }\n\n    this._element.removeAttribute('aria-hidden');\n\n    this._element.setAttribute('aria-modal', true);\n\n    this._element.setAttribute('role', 'dialog');\n\n    this._element.classList.add(CLASS_NAME_SHOW$4);\n\n    const completeCallBack = () => {\n      EventHandler.trigger(this._element, EVENT_SHOWN$2, {\n        relatedTarget\n      });\n    };\n\n    this._queueCallback(completeCallBack, this._element, true);\n  }\n\n  hide() {\n    if (!this._isShown) {\n      return;\n    }\n\n    const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$2);\n\n    if (hideEvent.defaultPrevented) {\n      return;\n    }\n\n    EventHandler.off(document, EVENT_FOCUSIN$1);\n\n    this._element.blur();\n\n    this._isShown = false;\n\n    this._element.classList.remove(CLASS_NAME_SHOW$4);\n\n    this._backdrop.hide();\n\n    const completeCallback = () => {\n      this._element.setAttribute('aria-hidden', true);\n\n      this._element.removeAttribute('aria-modal');\n\n      this._element.removeAttribute('role');\n\n      this._element.style.visibility = 'hidden';\n\n      if (!this._config.scroll) {\n        new ScrollBarHelper().reset();\n      }\n\n      EventHandler.trigger(this._element, EVENT_HIDDEN$2);\n    };\n\n    this._queueCallback(completeCallback, this._element, true);\n  }\n\n  dispose() {\n    this._backdrop.dispose();\n\n    super.dispose();\n    EventHandler.off(document, EVENT_FOCUSIN$1);\n  } // Private\n\n\n  _getConfig(config) {\n    config = { ...Default$4,\n      ...Manipulator.getDataAttributes(this._element),\n      ...(typeof config === 'object' ? config : {})\n    };\n    typeCheckConfig(NAME$5, config, DefaultType$4);\n    return config;\n  }\n\n  _initializeBackDrop() {\n    return new Backdrop({\n      isVisible: this._config.backdrop,\n      isAnimated: true,\n      rootElement: this._element.parentNode,\n      clickCallback: () => this.hide()\n    });\n  }\n\n  _enforceFocusOnElement(element) {\n    EventHandler.off(document, EVENT_FOCUSIN$1); // guard against infinite focus loop\n\n    EventHandler.on(document, EVENT_FOCUSIN$1, event => {\n      if (document !== event.target && element !== event.target && !element.contains(event.target)) {\n        element.focus();\n      }\n    });\n    element.focus();\n  }\n\n  _addEventListeners() {\n    EventHandler.on(this._element, EVENT_CLICK_DISMISS$1, SELECTOR_DATA_DISMISS$1, () => this.hide());\n    EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS, event => {\n      if (this._config.keyboard && event.key === ESCAPE_KEY) {\n        this.hide();\n      }\n    });\n  } // Static\n\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Offcanvas.getOrCreateInstance(this, config);\n\n      if (typeof config !== 'string') {\n        return;\n      }\n\n      if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n        throw new TypeError(`No method named \"${config}\"`);\n      }\n\n      data[config](this);\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$1, SELECTOR_DATA_TOGGLE$1, function (event) {\n  const target = getElementFromSelector(this);\n\n  if (['A', 'AREA'].includes(this.tagName)) {\n    event.preventDefault();\n  }\n\n  if (isDisabled(this)) {\n    return;\n  }\n\n  EventHandler.one(target, EVENT_HIDDEN$2, () => {\n    // focus on trigger when it is closed\n    if (isVisible(this)) {\n      this.focus();\n    }\n  }); // avoid conflict when clicking a toggler of an offcanvas, while another is open\n\n  const allReadyOpen = SelectorEngine.findOne(OPEN_SELECTOR);\n\n  if (allReadyOpen && allReadyOpen !== target) {\n    Offcanvas.getInstance(allReadyOpen).hide();\n  }\n\n  const data = Offcanvas.getOrCreateInstance(target);\n  data.toggle(this);\n});\nEventHandler.on(window, EVENT_LOAD_DATA_API$1, () => SelectorEngine.find(OPEN_SELECTOR).forEach(el => Offcanvas.getOrCreateInstance(el).show()));\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\ndefineJQueryPlugin(Offcanvas);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): util/sanitizer.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\nconst uriAttrs = new Set(['background', 'cite', 'href', 'itemtype', 'longdesc', 'poster', 'src', 'xlink:href']);\nconst ARIA_ATTRIBUTE_PATTERN = /^aria-[\\w-]*$/i;\n/**\n * A pattern that recognizes a commonly useful subset of URLs that are safe.\n *\n * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts\n */\n\nconst SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file):|[^#&/:?]*(?:[#/?]|$))/i;\n/**\n * A pattern that matches safe data URLs. Only matches image, video and audio types.\n *\n * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts\n */\n\nconst DATA_URL_PATTERN = /^data:(?:image\\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\\/(?:mpeg|mp4|ogg|webm)|audio\\/(?:mp3|oga|ogg|opus));base64,[\\d+/a-z]+=*$/i;\n\nconst allowedAttribute = (attr, allowedAttributeList) => {\n  const attrName = attr.nodeName.toLowerCase();\n\n  if (allowedAttributeList.includes(attrName)) {\n    if (uriAttrs.has(attrName)) {\n      return Boolean(SAFE_URL_PATTERN.test(attr.nodeValue) || DATA_URL_PATTERN.test(attr.nodeValue));\n    }\n\n    return true;\n  }\n\n  const regExp = allowedAttributeList.filter(attrRegex => attrRegex instanceof RegExp); // Check if a regular expression validates the attribute.\n\n  for (let i = 0, len = regExp.length; i < len; i++) {\n    if (regExp[i].test(attrName)) {\n      return true;\n    }\n  }\n\n  return false;\n};\n\nconst DefaultAllowlist = {\n  // Global attributes allowed on any supplied element below.\n  '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],\n  a: ['target', 'href', 'title', 'rel'],\n  area: [],\n  b: [],\n  br: [],\n  col: [],\n  code: [],\n  div: [],\n  em: [],\n  hr: [],\n  h1: [],\n  h2: [],\n  h3: [],\n  h4: [],\n  h5: [],\n  h6: [],\n  i: [],\n  img: ['src', 'srcset', 'alt', 'title', 'width', 'height'],\n  li: [],\n  ol: [],\n  p: [],\n  pre: [],\n  s: [],\n  small: [],\n  span: [],\n  sub: [],\n  sup: [],\n  strong: [],\n  u: [],\n  ul: []\n};\nfunction sanitizeHtml(unsafeHtml, allowList, sanitizeFn) {\n  if (!unsafeHtml.length) {\n    return unsafeHtml;\n  }\n\n  if (sanitizeFn && typeof sanitizeFn === 'function') {\n    return sanitizeFn(unsafeHtml);\n  }\n\n  const domParser = new window.DOMParser();\n  const createdDocument = domParser.parseFromString(unsafeHtml, 'text/html');\n  const allowlistKeys = Object.keys(allowList);\n  const elements = [].concat(...createdDocument.body.querySelectorAll('*'));\n\n  for (let i = 0, len = elements.length; i < len; i++) {\n    const el = elements[i];\n    const elName = el.nodeName.toLowerCase();\n\n    if (!allowlistKeys.includes(elName)) {\n      el.remove();\n      continue;\n    }\n\n    const attributeList = [].concat(...el.attributes);\n    const allowedAttributes = [].concat(allowList['*'] || [], allowList[elName] || []);\n    attributeList.forEach(attr => {\n      if (!allowedAttribute(attr, allowedAttributes)) {\n        el.removeAttribute(attr.nodeName);\n      }\n    });\n  }\n\n  return createdDocument.body.innerHTML;\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): tooltip.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$4 = 'tooltip';\nconst DATA_KEY$4 = 'bs.tooltip';\nconst EVENT_KEY$4 = `.${DATA_KEY$4}`;\nconst CLASS_PREFIX$1 = 'bs-tooltip';\nconst BSCLS_PREFIX_REGEX$1 = new RegExp(`(^|\\\\s)${CLASS_PREFIX$1}\\\\S+`, 'g');\nconst DISALLOWED_ATTRIBUTES = new Set(['sanitize', 'allowList', 'sanitizeFn']);\nconst DefaultType$3 = {\n  animation: 'boolean',\n  template: 'string',\n  title: '(string|element|function)',\n  trigger: 'string',\n  delay: '(number|object)',\n  html: 'boolean',\n  selector: '(string|boolean)',\n  placement: '(string|function)',\n  offset: '(array|string|function)',\n  container: '(string|element|boolean)',\n  fallbackPlacements: 'array',\n  boundary: '(string|element)',\n  customClass: '(string|function)',\n  sanitize: 'boolean',\n  sanitizeFn: '(null|function)',\n  allowList: 'object',\n  popperConfig: '(null|object|function)'\n};\nconst AttachmentMap = {\n  AUTO: 'auto',\n  TOP: 'top',\n  RIGHT: isRTL() ? 'left' : 'right',\n  BOTTOM: 'bottom',\n  LEFT: isRTL() ? 'right' : 'left'\n};\nconst Default$3 = {\n  animation: true,\n  template: '<div class=\"tooltip\" role=\"tooltip\">' + '<div class=\"tooltip-arrow\"></div>' + '<div class=\"tooltip-inner\"></div>' + '</div>',\n  trigger: 'hover focus',\n  title: '',\n  delay: 0,\n  html: false,\n  selector: false,\n  placement: 'top',\n  offset: [0, 0],\n  container: false,\n  fallbackPlacements: ['top', 'right', 'bottom', 'left'],\n  boundary: 'clippingParents',\n  customClass: '',\n  sanitize: true,\n  sanitizeFn: null,\n  allowList: DefaultAllowlist,\n  popperConfig: null\n};\nconst Event$2 = {\n  HIDE: `hide${EVENT_KEY$4}`,\n  HIDDEN: `hidden${EVENT_KEY$4}`,\n  SHOW: `show${EVENT_KEY$4}`,\n  SHOWN: `shown${EVENT_KEY$4}`,\n  INSERTED: `inserted${EVENT_KEY$4}`,\n  CLICK: `click${EVENT_KEY$4}`,\n  FOCUSIN: `focusin${EVENT_KEY$4}`,\n  FOCUSOUT: `focusout${EVENT_KEY$4}`,\n  MOUSEENTER: `mouseenter${EVENT_KEY$4}`,\n  MOUSELEAVE: `mouseleave${EVENT_KEY$4}`\n};\nconst CLASS_NAME_FADE$3 = 'fade';\nconst CLASS_NAME_MODAL = 'modal';\nconst CLASS_NAME_SHOW$3 = 'show';\nconst HOVER_STATE_SHOW = 'show';\nconst HOVER_STATE_OUT = 'out';\nconst SELECTOR_TOOLTIP_INNER = '.tooltip-inner';\nconst TRIGGER_HOVER = 'hover';\nconst TRIGGER_FOCUS = 'focus';\nconst TRIGGER_CLICK = 'click';\nconst TRIGGER_MANUAL = 'manual';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Tooltip extends BaseComponent {\n  constructor(element, config) {\n    if (typeof Popper === 'undefined') {\n      throw new TypeError('Bootstrap\\'s tooltips require Popper (https://popper.js.org)');\n    }\n\n    super(element); // private\n\n    this._isEnabled = true;\n    this._timeout = 0;\n    this._hoverState = '';\n    this._activeTrigger = {};\n    this._popper = null; // Protected\n\n    this._config = this._getConfig(config);\n    this.tip = null;\n\n    this._setListeners();\n  } // Getters\n\n\n  static get Default() {\n    return Default$3;\n  }\n\n  static get NAME() {\n    return NAME$4;\n  }\n\n  static get Event() {\n    return Event$2;\n  }\n\n  static get DefaultType() {\n    return DefaultType$3;\n  } // Public\n\n\n  enable() {\n    this._isEnabled = true;\n  }\n\n  disable() {\n    this._isEnabled = false;\n  }\n\n  toggleEnabled() {\n    this._isEnabled = !this._isEnabled;\n  }\n\n  toggle(event) {\n    if (!this._isEnabled) {\n      return;\n    }\n\n    if (event) {\n      const context = this._initializeOnDelegatedTarget(event);\n\n      context._activeTrigger.click = !context._activeTrigger.click;\n\n      if (context._isWithActiveTrigger()) {\n        context._enter(null, context);\n      } else {\n        context._leave(null, context);\n      }\n    } else {\n      if (this.getTipElement().classList.contains(CLASS_NAME_SHOW$3)) {\n        this._leave(null, this);\n\n        return;\n      }\n\n      this._enter(null, this);\n    }\n  }\n\n  dispose() {\n    clearTimeout(this._timeout);\n    EventHandler.off(this._element.closest(`.${CLASS_NAME_MODAL}`), 'hide.bs.modal', this._hideModalHandler);\n\n    if (this.tip) {\n      this.tip.remove();\n    }\n\n    if (this._popper) {\n      this._popper.destroy();\n    }\n\n    super.dispose();\n  }\n\n  show() {\n    if (this._element.style.display === 'none') {\n      throw new Error('Please use show on visible elements');\n    }\n\n    if (!(this.isWithContent() && this._isEnabled)) {\n      return;\n    }\n\n    const showEvent = EventHandler.trigger(this._element, this.constructor.Event.SHOW);\n    const shadowRoot = findShadowRoot(this._element);\n    const isInTheDom = shadowRoot === null ? this._element.ownerDocument.documentElement.contains(this._element) : shadowRoot.contains(this._element);\n\n    if (showEvent.defaultPrevented || !isInTheDom) {\n      return;\n    }\n\n    const tip = this.getTipElement();\n    const tipId = getUID(this.constructor.NAME);\n    tip.setAttribute('id', tipId);\n\n    this._element.setAttribute('aria-describedby', tipId);\n\n    this.setContent();\n\n    if (this._config.animation) {\n      tip.classList.add(CLASS_NAME_FADE$3);\n    }\n\n    const placement = typeof this._config.placement === 'function' ? this._config.placement.call(this, tip, this._element) : this._config.placement;\n\n    const attachment = this._getAttachment(placement);\n\n    this._addAttachmentClass(attachment);\n\n    const {\n      container\n    } = this._config;\n    Data.set(tip, this.constructor.DATA_KEY, this);\n\n    if (!this._element.ownerDocument.documentElement.contains(this.tip)) {\n      container.appendChild(tip);\n      EventHandler.trigger(this._element, this.constructor.Event.INSERTED);\n    }\n\n    if (this._popper) {\n      this._popper.update();\n    } else {\n      this._popper = Popper.createPopper(this._element, tip, this._getPopperConfig(attachment));\n    }\n\n    tip.classList.add(CLASS_NAME_SHOW$3);\n    const customClass = typeof this._config.customClass === 'function' ? this._config.customClass() : this._config.customClass;\n\n    if (customClass) {\n      tip.classList.add(...customClass.split(' '));\n    } // If this is a touch-enabled device we add extra\n    // empty mouseover listeners to the body's immediate children;\n    // only needed because of broken event delegation on iOS\n    // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n\n\n    if ('ontouchstart' in document.documentElement) {\n      [].concat(...document.body.children).forEach(element => {\n        EventHandler.on(element, 'mouseover', noop);\n      });\n    }\n\n    const complete = () => {\n      const prevHoverState = this._hoverState;\n      this._hoverState = null;\n      EventHandler.trigger(this._element, this.constructor.Event.SHOWN);\n\n      if (prevHoverState === HOVER_STATE_OUT) {\n        this._leave(null, this);\n      }\n    };\n\n    const isAnimated = this.tip.classList.contains(CLASS_NAME_FADE$3);\n\n    this._queueCallback(complete, this.tip, isAnimated);\n  }\n\n  hide() {\n    if (!this._popper) {\n      return;\n    }\n\n    const tip = this.getTipElement();\n\n    const complete = () => {\n      if (this._isWithActiveTrigger()) {\n        return;\n      }\n\n      if (this._hoverState !== HOVER_STATE_SHOW) {\n        tip.remove();\n      }\n\n      this._cleanTipClass();\n\n      this._element.removeAttribute('aria-describedby');\n\n      EventHandler.trigger(this._element, this.constructor.Event.HIDDEN);\n\n      if (this._popper) {\n        this._popper.destroy();\n\n        this._popper = null;\n      }\n    };\n\n    const hideEvent = EventHandler.trigger(this._element, this.constructor.Event.HIDE);\n\n    if (hideEvent.defaultPrevented) {\n      return;\n    }\n\n    tip.classList.remove(CLASS_NAME_SHOW$3); // If this is a touch-enabled device we remove the extra\n    // empty mouseover listeners we added for iOS support\n\n    if ('ontouchstart' in document.documentElement) {\n      [].concat(...document.body.children).forEach(element => EventHandler.off(element, 'mouseover', noop));\n    }\n\n    this._activeTrigger[TRIGGER_CLICK] = false;\n    this._activeTrigger[TRIGGER_FOCUS] = false;\n    this._activeTrigger[TRIGGER_HOVER] = false;\n    const isAnimated = this.tip.classList.contains(CLASS_NAME_FADE$3);\n\n    this._queueCallback(complete, this.tip, isAnimated);\n\n    this._hoverState = '';\n  }\n\n  update() {\n    if (this._popper !== null) {\n      this._popper.update();\n    }\n  } // Protected\n\n\n  isWithContent() {\n    return Boolean(this.getTitle());\n  }\n\n  getTipElement() {\n    if (this.tip) {\n      return this.tip;\n    }\n\n    const element = document.createElement('div');\n    element.innerHTML = this._config.template;\n    this.tip = element.children[0];\n    return this.tip;\n  }\n\n  setContent() {\n    const tip = this.getTipElement();\n    this.setElementContent(SelectorEngine.findOne(SELECTOR_TOOLTIP_INNER, tip), this.getTitle());\n    tip.classList.remove(CLASS_NAME_FADE$3, CLASS_NAME_SHOW$3);\n  }\n\n  setElementContent(element, content) {\n    if (element === null) {\n      return;\n    }\n\n    if (isElement(content)) {\n      content = getElement(content); // content is a DOM node or a jQuery\n\n      if (this._config.html) {\n        if (content.parentNode !== element) {\n          element.innerHTML = '';\n          element.appendChild(content);\n        }\n      } else {\n        element.textContent = content.textContent;\n      }\n\n      return;\n    }\n\n    if (this._config.html) {\n      if (this._config.sanitize) {\n        content = sanitizeHtml(content, this._config.allowList, this._config.sanitizeFn);\n      }\n\n      element.innerHTML = content;\n    } else {\n      element.textContent = content;\n    }\n  }\n\n  getTitle() {\n    let title = this._element.getAttribute('data-bs-original-title');\n\n    if (!title) {\n      title = typeof this._config.title === 'function' ? this._config.title.call(this._element) : this._config.title;\n    }\n\n    return title;\n  }\n\n  updateAttachment(attachment) {\n    if (attachment === 'right') {\n      return 'end';\n    }\n\n    if (attachment === 'left') {\n      return 'start';\n    }\n\n    return attachment;\n  } // Private\n\n\n  _initializeOnDelegatedTarget(event, context) {\n    const dataKey = this.constructor.DATA_KEY;\n    context = context || Data.get(event.delegateTarget, dataKey);\n\n    if (!context) {\n      context = new this.constructor(event.delegateTarget, this._getDelegateConfig());\n      Data.set(event.delegateTarget, dataKey, context);\n    }\n\n    return context;\n  }\n\n  _getOffset() {\n    const {\n      offset\n    } = this._config;\n\n    if (typeof offset === 'string') {\n      return offset.split(',').map(val => Number.parseInt(val, 10));\n    }\n\n    if (typeof offset === 'function') {\n      return popperData => offset(popperData, this._element);\n    }\n\n    return offset;\n  }\n\n  _getPopperConfig(attachment) {\n    const defaultBsPopperConfig = {\n      placement: attachment,\n      modifiers: [{\n        name: 'flip',\n        options: {\n          fallbackPlacements: this._config.fallbackPlacements\n        }\n      }, {\n        name: 'offset',\n        options: {\n          offset: this._getOffset()\n        }\n      }, {\n        name: 'preventOverflow',\n        options: {\n          boundary: this._config.boundary\n        }\n      }, {\n        name: 'arrow',\n        options: {\n          element: `.${this.constructor.NAME}-arrow`\n        }\n      }, {\n        name: 'onChange',\n        enabled: true,\n        phase: 'afterWrite',\n        fn: data => this._handlePopperPlacementChange(data)\n      }],\n      onFirstUpdate: data => {\n        if (data.options.placement !== data.placement) {\n          this._handlePopperPlacementChange(data);\n        }\n      }\n    };\n    return { ...defaultBsPopperConfig,\n      ...(typeof this._config.popperConfig === 'function' ? this._config.popperConfig(defaultBsPopperConfig) : this._config.popperConfig)\n    };\n  }\n\n  _addAttachmentClass(attachment) {\n    this.getTipElement().classList.add(`${CLASS_PREFIX$1}-${this.updateAttachment(attachment)}`);\n  }\n\n  _getAttachment(placement) {\n    return AttachmentMap[placement.toUpperCase()];\n  }\n\n  _setListeners() {\n    const triggers = this._config.trigger.split(' ');\n\n    triggers.forEach(trigger => {\n      if (trigger === 'click') {\n        EventHandler.on(this._element, this.constructor.Event.CLICK, this._config.selector, event => this.toggle(event));\n      } else if (trigger !== TRIGGER_MANUAL) {\n        const eventIn = trigger === TRIGGER_HOVER ? this.constructor.Event.MOUSEENTER : this.constructor.Event.FOCUSIN;\n        const eventOut = trigger === TRIGGER_HOVER ? this.constructor.Event.MOUSELEAVE : this.constructor.Event.FOCUSOUT;\n        EventHandler.on(this._element, eventIn, this._config.selector, event => this._enter(event));\n        EventHandler.on(this._element, eventOut, this._config.selector, event => this._leave(event));\n      }\n    });\n\n    this._hideModalHandler = () => {\n      if (this._element) {\n        this.hide();\n      }\n    };\n\n    EventHandler.on(this._element.closest(`.${CLASS_NAME_MODAL}`), 'hide.bs.modal', this._hideModalHandler);\n\n    if (this._config.selector) {\n      this._config = { ...this._config,\n        trigger: 'manual',\n        selector: ''\n      };\n    } else {\n      this._fixTitle();\n    }\n  }\n\n  _fixTitle() {\n    const title = this._element.getAttribute('title');\n\n    const originalTitleType = typeof this._element.getAttribute('data-bs-original-title');\n\n    if (title || originalTitleType !== 'string') {\n      this._element.setAttribute('data-bs-original-title', title || '');\n\n      if (title && !this._element.getAttribute('aria-label') && !this._element.textContent) {\n        this._element.setAttribute('aria-label', title);\n      }\n\n      this._element.setAttribute('title', '');\n    }\n  }\n\n  _enter(event, context) {\n    context = this._initializeOnDelegatedTarget(event, context);\n\n    if (event) {\n      context._activeTrigger[event.type === 'focusin' ? TRIGGER_FOCUS : TRIGGER_HOVER] = true;\n    }\n\n    if (context.getTipElement().classList.contains(CLASS_NAME_SHOW$3) || context._hoverState === HOVER_STATE_SHOW) {\n      context._hoverState = HOVER_STATE_SHOW;\n      return;\n    }\n\n    clearTimeout(context._timeout);\n    context._hoverState = HOVER_STATE_SHOW;\n\n    if (!context._config.delay || !context._config.delay.show) {\n      context.show();\n      return;\n    }\n\n    context._timeout = setTimeout(() => {\n      if (context._hoverState === HOVER_STATE_SHOW) {\n        context.show();\n      }\n    }, context._config.delay.show);\n  }\n\n  _leave(event, context) {\n    context = this._initializeOnDelegatedTarget(event, context);\n\n    if (event) {\n      context._activeTrigger[event.type === 'focusout' ? TRIGGER_FOCUS : TRIGGER_HOVER] = context._element.contains(event.relatedTarget);\n    }\n\n    if (context._isWithActiveTrigger()) {\n      return;\n    }\n\n    clearTimeout(context._timeout);\n    context._hoverState = HOVER_STATE_OUT;\n\n    if (!context._config.delay || !context._config.delay.hide) {\n      context.hide();\n      return;\n    }\n\n    context._timeout = setTimeout(() => {\n      if (context._hoverState === HOVER_STATE_OUT) {\n        context.hide();\n      }\n    }, context._config.delay.hide);\n  }\n\n  _isWithActiveTrigger() {\n    for (const trigger in this._activeTrigger) {\n      if (this._activeTrigger[trigger]) {\n        return true;\n      }\n    }\n\n    return false;\n  }\n\n  _getConfig(config) {\n    const dataAttributes = Manipulator.getDataAttributes(this._element);\n    Object.keys(dataAttributes).forEach(dataAttr => {\n      if (DISALLOWED_ATTRIBUTES.has(dataAttr)) {\n        delete dataAttributes[dataAttr];\n      }\n    });\n    config = { ...this.constructor.Default,\n      ...dataAttributes,\n      ...(typeof config === 'object' && config ? config : {})\n    };\n    config.container = config.container === false ? document.body : getElement(config.container);\n\n    if (typeof config.delay === 'number') {\n      config.delay = {\n        show: config.delay,\n        hide: config.delay\n      };\n    }\n\n    if (typeof config.title === 'number') {\n      config.title = config.title.toString();\n    }\n\n    if (typeof config.content === 'number') {\n      config.content = config.content.toString();\n    }\n\n    typeCheckConfig(NAME$4, config, this.constructor.DefaultType);\n\n    if (config.sanitize) {\n      config.template = sanitizeHtml(config.template, config.allowList, config.sanitizeFn);\n    }\n\n    return config;\n  }\n\n  _getDelegateConfig() {\n    const config = {};\n\n    if (this._config) {\n      for (const key in this._config) {\n        if (this.constructor.Default[key] !== this._config[key]) {\n          config[key] = this._config[key];\n        }\n      }\n    }\n\n    return config;\n  }\n\n  _cleanTipClass() {\n    const tip = this.getTipElement();\n    const tabClass = tip.getAttribute('class').match(BSCLS_PREFIX_REGEX$1);\n\n    if (tabClass !== null && tabClass.length > 0) {\n      tabClass.map(token => token.trim()).forEach(tClass => tip.classList.remove(tClass));\n    }\n  }\n\n  _handlePopperPlacementChange(popperData) {\n    const {\n      state\n    } = popperData;\n\n    if (!state) {\n      return;\n    }\n\n    this.tip = state.elements.popper;\n\n    this._cleanTipClass();\n\n    this._addAttachmentClass(this._getAttachment(state.placement));\n  } // Static\n\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Tooltip.getOrCreateInstance(this, config);\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config]();\n      }\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Tooltip to jQuery only if jQuery is present\n */\n\n\ndefineJQueryPlugin(Tooltip);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): popover.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$3 = 'popover';\nconst DATA_KEY$3 = 'bs.popover';\nconst EVENT_KEY$3 = `.${DATA_KEY$3}`;\nconst CLASS_PREFIX = 'bs-popover';\nconst BSCLS_PREFIX_REGEX = new RegExp(`(^|\\\\s)${CLASS_PREFIX}\\\\S+`, 'g');\nconst Default$2 = { ...Tooltip.Default,\n  placement: 'right',\n  offset: [0, 8],\n  trigger: 'click',\n  content: '',\n  template: '<div class=\"popover\" role=\"tooltip\">' + '<div class=\"popover-arrow\"></div>' + '<h3 class=\"popover-header\"></h3>' + '<div class=\"popover-body\"></div>' + '</div>'\n};\nconst DefaultType$2 = { ...Tooltip.DefaultType,\n  content: '(string|element|function)'\n};\nconst Event$1 = {\n  HIDE: `hide${EVENT_KEY$3}`,\n  HIDDEN: `hidden${EVENT_KEY$3}`,\n  SHOW: `show${EVENT_KEY$3}`,\n  SHOWN: `shown${EVENT_KEY$3}`,\n  INSERTED: `inserted${EVENT_KEY$3}`,\n  CLICK: `click${EVENT_KEY$3}`,\n  FOCUSIN: `focusin${EVENT_KEY$3}`,\n  FOCUSOUT: `focusout${EVENT_KEY$3}`,\n  MOUSEENTER: `mouseenter${EVENT_KEY$3}`,\n  MOUSELEAVE: `mouseleave${EVENT_KEY$3}`\n};\nconst CLASS_NAME_FADE$2 = 'fade';\nconst CLASS_NAME_SHOW$2 = 'show';\nconst SELECTOR_TITLE = '.popover-header';\nconst SELECTOR_CONTENT = '.popover-body';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Popover extends Tooltip {\n  // Getters\n  static get Default() {\n    return Default$2;\n  }\n\n  static get NAME() {\n    return NAME$3;\n  }\n\n  static get Event() {\n    return Event$1;\n  }\n\n  static get DefaultType() {\n    return DefaultType$2;\n  } // Overrides\n\n\n  isWithContent() {\n    return this.getTitle() || this._getContent();\n  }\n\n  getTipElement() {\n    if (this.tip) {\n      return this.tip;\n    }\n\n    this.tip = super.getTipElement();\n\n    if (!this.getTitle()) {\n      SelectorEngine.findOne(SELECTOR_TITLE, this.tip).remove();\n    }\n\n    if (!this._getContent()) {\n      SelectorEngine.findOne(SELECTOR_CONTENT, this.tip).remove();\n    }\n\n    return this.tip;\n  }\n\n  setContent() {\n    const tip = this.getTipElement(); // we use append for html objects to maintain js events\n\n    this.setElementContent(SelectorEngine.findOne(SELECTOR_TITLE, tip), this.getTitle());\n\n    let content = this._getContent();\n\n    if (typeof content === 'function') {\n      content = content.call(this._element);\n    }\n\n    this.setElementContent(SelectorEngine.findOne(SELECTOR_CONTENT, tip), content);\n    tip.classList.remove(CLASS_NAME_FADE$2, CLASS_NAME_SHOW$2);\n  } // Private\n\n\n  _addAttachmentClass(attachment) {\n    this.getTipElement().classList.add(`${CLASS_PREFIX}-${this.updateAttachment(attachment)}`);\n  }\n\n  _getContent() {\n    return this._element.getAttribute('data-bs-content') || this._config.content;\n  }\n\n  _cleanTipClass() {\n    const tip = this.getTipElement();\n    const tabClass = tip.getAttribute('class').match(BSCLS_PREFIX_REGEX);\n\n    if (tabClass !== null && tabClass.length > 0) {\n      tabClass.map(token => token.trim()).forEach(tClass => tip.classList.remove(tClass));\n    }\n  } // Static\n\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Popover.getOrCreateInstance(this, config);\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config]();\n      }\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Popover to jQuery only if jQuery is present\n */\n\n\ndefineJQueryPlugin(Popover);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): scrollspy.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$2 = 'scrollspy';\nconst DATA_KEY$2 = 'bs.scrollspy';\nconst EVENT_KEY$2 = `.${DATA_KEY$2}`;\nconst DATA_API_KEY$1 = '.data-api';\nconst Default$1 = {\n  offset: 10,\n  method: 'auto',\n  target: ''\n};\nconst DefaultType$1 = {\n  offset: 'number',\n  method: 'string',\n  target: '(string|element)'\n};\nconst EVENT_ACTIVATE = `activate${EVENT_KEY$2}`;\nconst EVENT_SCROLL = `scroll${EVENT_KEY$2}`;\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY$2}${DATA_API_KEY$1}`;\nconst CLASS_NAME_DROPDOWN_ITEM = 'dropdown-item';\nconst CLASS_NAME_ACTIVE$1 = 'active';\nconst SELECTOR_DATA_SPY = '[data-bs-spy=\"scroll\"]';\nconst SELECTOR_NAV_LIST_GROUP$1 = '.nav, .list-group';\nconst SELECTOR_NAV_LINKS = '.nav-link';\nconst SELECTOR_NAV_ITEMS = '.nav-item';\nconst SELECTOR_LIST_ITEMS = '.list-group-item';\nconst SELECTOR_DROPDOWN$1 = '.dropdown';\nconst SELECTOR_DROPDOWN_TOGGLE$1 = '.dropdown-toggle';\nconst METHOD_OFFSET = 'offset';\nconst METHOD_POSITION = 'position';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass ScrollSpy extends BaseComponent {\n  constructor(element, config) {\n    super(element);\n    this._scrollElement = this._element.tagName === 'BODY' ? window : this._element;\n    this._config = this._getConfig(config);\n    this._selector = `${this._config.target} ${SELECTOR_NAV_LINKS}, ${this._config.target} ${SELECTOR_LIST_ITEMS}, ${this._config.target} .${CLASS_NAME_DROPDOWN_ITEM}`;\n    this._offsets = [];\n    this._targets = [];\n    this._activeTarget = null;\n    this._scrollHeight = 0;\n    EventHandler.on(this._scrollElement, EVENT_SCROLL, () => this._process());\n    this.refresh();\n\n    this._process();\n  } // Getters\n\n\n  static get Default() {\n    return Default$1;\n  }\n\n  static get NAME() {\n    return NAME$2;\n  } // Public\n\n\n  refresh() {\n    const autoMethod = this._scrollElement === this._scrollElement.window ? METHOD_OFFSET : METHOD_POSITION;\n    const offsetMethod = this._config.method === 'auto' ? autoMethod : this._config.method;\n    const offsetBase = offsetMethod === METHOD_POSITION ? this._getScrollTop() : 0;\n    this._offsets = [];\n    this._targets = [];\n    this._scrollHeight = this._getScrollHeight();\n    const targets = SelectorEngine.find(this._selector);\n    targets.map(element => {\n      const targetSelector = getSelectorFromElement(element);\n      const target = targetSelector ? SelectorEngine.findOne(targetSelector) : null;\n\n      if (target) {\n        const targetBCR = target.getBoundingClientRect();\n\n        if (targetBCR.width || targetBCR.height) {\n          return [Manipulator[offsetMethod](target).top + offsetBase, targetSelector];\n        }\n      }\n\n      return null;\n    }).filter(item => item).sort((a, b) => a[0] - b[0]).forEach(item => {\n      this._offsets.push(item[0]);\n\n      this._targets.push(item[1]);\n    });\n  }\n\n  dispose() {\n    EventHandler.off(this._scrollElement, EVENT_KEY$2);\n    super.dispose();\n  } // Private\n\n\n  _getConfig(config) {\n    config = { ...Default$1,\n      ...Manipulator.getDataAttributes(this._element),\n      ...(typeof config === 'object' && config ? config : {})\n    };\n\n    if (typeof config.target !== 'string' && isElement(config.target)) {\n      let {\n        id\n      } = config.target;\n\n      if (!id) {\n        id = getUID(NAME$2);\n        config.target.id = id;\n      }\n\n      config.target = `#${id}`;\n    }\n\n    typeCheckConfig(NAME$2, config, DefaultType$1);\n    return config;\n  }\n\n  _getScrollTop() {\n    return this._scrollElement === window ? this._scrollElement.pageYOffset : this._scrollElement.scrollTop;\n  }\n\n  _getScrollHeight() {\n    return this._scrollElement.scrollHeight || Math.max(document.body.scrollHeight, document.documentElement.scrollHeight);\n  }\n\n  _getOffsetHeight() {\n    return this._scrollElement === window ? window.innerHeight : this._scrollElement.getBoundingClientRect().height;\n  }\n\n  _process() {\n    const scrollTop = this._getScrollTop() + this._config.offset;\n\n    const scrollHeight = this._getScrollHeight();\n\n    const maxScroll = this._config.offset + scrollHeight - this._getOffsetHeight();\n\n    if (this._scrollHeight !== scrollHeight) {\n      this.refresh();\n    }\n\n    if (scrollTop >= maxScroll) {\n      const target = this._targets[this._targets.length - 1];\n\n      if (this._activeTarget !== target) {\n        this._activate(target);\n      }\n\n      return;\n    }\n\n    if (this._activeTarget && scrollTop < this._offsets[0] && this._offsets[0] > 0) {\n      this._activeTarget = null;\n\n      this._clear();\n\n      return;\n    }\n\n    for (let i = this._offsets.length; i--;) {\n      const isActiveTarget = this._activeTarget !== this._targets[i] && scrollTop >= this._offsets[i] && (typeof this._offsets[i + 1] === 'undefined' || scrollTop < this._offsets[i + 1]);\n\n      if (isActiveTarget) {\n        this._activate(this._targets[i]);\n      }\n    }\n  }\n\n  _activate(target) {\n    this._activeTarget = target;\n\n    this._clear();\n\n    const queries = this._selector.split(',').map(selector => `${selector}[data-bs-target=\"${target}\"],${selector}[href=\"${target}\"]`);\n\n    const link = SelectorEngine.findOne(queries.join(','));\n\n    if (link.classList.contains(CLASS_NAME_DROPDOWN_ITEM)) {\n      SelectorEngine.findOne(SELECTOR_DROPDOWN_TOGGLE$1, link.closest(SELECTOR_DROPDOWN$1)).classList.add(CLASS_NAME_ACTIVE$1);\n      link.classList.add(CLASS_NAME_ACTIVE$1);\n    } else {\n      // Set triggered link as active\n      link.classList.add(CLASS_NAME_ACTIVE$1);\n      SelectorEngine.parents(link, SELECTOR_NAV_LIST_GROUP$1).forEach(listGroup => {\n        // Set triggered links parents as active\n        // With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor\n        SelectorEngine.prev(listGroup, `${SELECTOR_NAV_LINKS}, ${SELECTOR_LIST_ITEMS}`).forEach(item => item.classList.add(CLASS_NAME_ACTIVE$1)); // Handle special case when .nav-link is inside .nav-item\n\n        SelectorEngine.prev(listGroup, SELECTOR_NAV_ITEMS).forEach(navItem => {\n          SelectorEngine.children(navItem, SELECTOR_NAV_LINKS).forEach(item => item.classList.add(CLASS_NAME_ACTIVE$1));\n        });\n      });\n    }\n\n    EventHandler.trigger(this._scrollElement, EVENT_ACTIVATE, {\n      relatedTarget: target\n    });\n  }\n\n  _clear() {\n    SelectorEngine.find(this._selector).filter(node => node.classList.contains(CLASS_NAME_ACTIVE$1)).forEach(node => node.classList.remove(CLASS_NAME_ACTIVE$1));\n  } // Static\n\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = ScrollSpy.getOrCreateInstance(this, config);\n\n      if (typeof config !== 'string') {\n        return;\n      }\n\n      if (typeof data[config] === 'undefined') {\n        throw new TypeError(`No method named \"${config}\"`);\n      }\n\n      data[config]();\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n  SelectorEngine.find(SELECTOR_DATA_SPY).forEach(spy => new ScrollSpy(spy));\n});\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .ScrollSpy to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(ScrollSpy);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): tab.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$1 = 'tab';\nconst DATA_KEY$1 = 'bs.tab';\nconst EVENT_KEY$1 = `.${DATA_KEY$1}`;\nconst DATA_API_KEY = '.data-api';\nconst EVENT_HIDE$1 = `hide${EVENT_KEY$1}`;\nconst EVENT_HIDDEN$1 = `hidden${EVENT_KEY$1}`;\nconst EVENT_SHOW$1 = `show${EVENT_KEY$1}`;\nconst EVENT_SHOWN$1 = `shown${EVENT_KEY$1}`;\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY$1}${DATA_API_KEY}`;\nconst CLASS_NAME_DROPDOWN_MENU = 'dropdown-menu';\nconst CLASS_NAME_ACTIVE = 'active';\nconst CLASS_NAME_FADE$1 = 'fade';\nconst CLASS_NAME_SHOW$1 = 'show';\nconst SELECTOR_DROPDOWN = '.dropdown';\nconst SELECTOR_NAV_LIST_GROUP = '.nav, .list-group';\nconst SELECTOR_ACTIVE = '.active';\nconst SELECTOR_ACTIVE_UL = ':scope > li > .active';\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"tab\"], [data-bs-toggle=\"pill\"], [data-bs-toggle=\"list\"]';\nconst SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle';\nconst SELECTOR_DROPDOWN_ACTIVE_CHILD = ':scope > .dropdown-menu .active';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Tab extends BaseComponent {\n  // Getters\n  static get NAME() {\n    return NAME$1;\n  } // Public\n\n\n  show() {\n    if (this._element.parentNode && this._element.parentNode.nodeType === Node.ELEMENT_NODE && this._element.classList.contains(CLASS_NAME_ACTIVE)) {\n      return;\n    }\n\n    let previous;\n    const target = getElementFromSelector(this._element);\n\n    const listElement = this._element.closest(SELECTOR_NAV_LIST_GROUP);\n\n    if (listElement) {\n      const itemSelector = listElement.nodeName === 'UL' || listElement.nodeName === 'OL' ? SELECTOR_ACTIVE_UL : SELECTOR_ACTIVE;\n      previous = SelectorEngine.find(itemSelector, listElement);\n      previous = previous[previous.length - 1];\n    }\n\n    const hideEvent = previous ? EventHandler.trigger(previous, EVENT_HIDE$1, {\n      relatedTarget: this._element\n    }) : null;\n    const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$1, {\n      relatedTarget: previous\n    });\n\n    if (showEvent.defaultPrevented || hideEvent !== null && hideEvent.defaultPrevented) {\n      return;\n    }\n\n    this._activate(this._element, listElement);\n\n    const complete = () => {\n      EventHandler.trigger(previous, EVENT_HIDDEN$1, {\n        relatedTarget: this._element\n      });\n      EventHandler.trigger(this._element, EVENT_SHOWN$1, {\n        relatedTarget: previous\n      });\n    };\n\n    if (target) {\n      this._activate(target, target.parentNode, complete);\n    } else {\n      complete();\n    }\n  } // Private\n\n\n  _activate(element, container, callback) {\n    const activeElements = container && (container.nodeName === 'UL' || container.nodeName === 'OL') ? SelectorEngine.find(SELECTOR_ACTIVE_UL, container) : SelectorEngine.children(container, SELECTOR_ACTIVE);\n    const active = activeElements[0];\n    const isTransitioning = callback && active && active.classList.contains(CLASS_NAME_FADE$1);\n\n    const complete = () => this._transitionComplete(element, active, callback);\n\n    if (active && isTransitioning) {\n      active.classList.remove(CLASS_NAME_SHOW$1);\n\n      this._queueCallback(complete, element, true);\n    } else {\n      complete();\n    }\n  }\n\n  _transitionComplete(element, active, callback) {\n    if (active) {\n      active.classList.remove(CLASS_NAME_ACTIVE);\n      const dropdownChild = SelectorEngine.findOne(SELECTOR_DROPDOWN_ACTIVE_CHILD, active.parentNode);\n\n      if (dropdownChild) {\n        dropdownChild.classList.remove(CLASS_NAME_ACTIVE);\n      }\n\n      if (active.getAttribute('role') === 'tab') {\n        active.setAttribute('aria-selected', false);\n      }\n    }\n\n    element.classList.add(CLASS_NAME_ACTIVE);\n\n    if (element.getAttribute('role') === 'tab') {\n      element.setAttribute('aria-selected', true);\n    }\n\n    reflow(element);\n\n    if (element.classList.contains(CLASS_NAME_FADE$1)) {\n      element.classList.add(CLASS_NAME_SHOW$1);\n    }\n\n    let parent = element.parentNode;\n\n    if (parent && parent.nodeName === 'LI') {\n      parent = parent.parentNode;\n    }\n\n    if (parent && parent.classList.contains(CLASS_NAME_DROPDOWN_MENU)) {\n      const dropdownElement = element.closest(SELECTOR_DROPDOWN);\n\n      if (dropdownElement) {\n        SelectorEngine.find(SELECTOR_DROPDOWN_TOGGLE, dropdownElement).forEach(dropdown => dropdown.classList.add(CLASS_NAME_ACTIVE));\n      }\n\n      element.setAttribute('aria-expanded', true);\n    }\n\n    if (callback) {\n      callback();\n    }\n  } // Static\n\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Tab.getOrCreateInstance(this);\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config]();\n      }\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n  if (['A', 'AREA'].includes(this.tagName)) {\n    event.preventDefault();\n  }\n\n  if (isDisabled(this)) {\n    return;\n  }\n\n  const data = Tab.getOrCreateInstance(this);\n  data.show();\n});\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Tab to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Tab);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): toast.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'toast';\nconst DATA_KEY = 'bs.toast';\nconst EVENT_KEY = `.${DATA_KEY}`;\nconst EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY}`;\nconst EVENT_MOUSEOVER = `mouseover${EVENT_KEY}`;\nconst EVENT_MOUSEOUT = `mouseout${EVENT_KEY}`;\nconst EVENT_FOCUSIN = `focusin${EVENT_KEY}`;\nconst EVENT_FOCUSOUT = `focusout${EVENT_KEY}`;\nconst EVENT_HIDE = `hide${EVENT_KEY}`;\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`;\nconst EVENT_SHOW = `show${EVENT_KEY}`;\nconst EVENT_SHOWN = `shown${EVENT_KEY}`;\nconst CLASS_NAME_FADE = 'fade';\nconst CLASS_NAME_HIDE = 'hide';\nconst CLASS_NAME_SHOW = 'show';\nconst CLASS_NAME_SHOWING = 'showing';\nconst DefaultType = {\n  animation: 'boolean',\n  autohide: 'boolean',\n  delay: 'number'\n};\nconst Default = {\n  animation: true,\n  autohide: true,\n  delay: 5000\n};\nconst SELECTOR_DATA_DISMISS = '[data-bs-dismiss=\"toast\"]';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Toast extends BaseComponent {\n  constructor(element, config) {\n    super(element);\n    this._config = this._getConfig(config);\n    this._timeout = null;\n    this._hasMouseInteraction = false;\n    this._hasKeyboardInteraction = false;\n\n    this._setListeners();\n  } // Getters\n\n\n  static get DefaultType() {\n    return DefaultType;\n  }\n\n  static get Default() {\n    return Default;\n  }\n\n  static get NAME() {\n    return NAME;\n  } // Public\n\n\n  show() {\n    const showEvent = EventHandler.trigger(this._element, EVENT_SHOW);\n\n    if (showEvent.defaultPrevented) {\n      return;\n    }\n\n    this._clearTimeout();\n\n    if (this._config.animation) {\n      this._element.classList.add(CLASS_NAME_FADE);\n    }\n\n    const complete = () => {\n      this._element.classList.remove(CLASS_NAME_SHOWING);\n\n      this._element.classList.add(CLASS_NAME_SHOW);\n\n      EventHandler.trigger(this._element, EVENT_SHOWN);\n\n      this._maybeScheduleHide();\n    };\n\n    this._element.classList.remove(CLASS_NAME_HIDE);\n\n    reflow(this._element);\n\n    this._element.classList.add(CLASS_NAME_SHOWING);\n\n    this._queueCallback(complete, this._element, this._config.animation);\n  }\n\n  hide() {\n    if (!this._element.classList.contains(CLASS_NAME_SHOW)) {\n      return;\n    }\n\n    const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE);\n\n    if (hideEvent.defaultPrevented) {\n      return;\n    }\n\n    const complete = () => {\n      this._element.classList.add(CLASS_NAME_HIDE);\n\n      EventHandler.trigger(this._element, EVENT_HIDDEN);\n    };\n\n    this._element.classList.remove(CLASS_NAME_SHOW);\n\n    this._queueCallback(complete, this._element, this._config.animation);\n  }\n\n  dispose() {\n    this._clearTimeout();\n\n    if (this._element.classList.contains(CLASS_NAME_SHOW)) {\n      this._element.classList.remove(CLASS_NAME_SHOW);\n    }\n\n    super.dispose();\n  } // Private\n\n\n  _getConfig(config) {\n    config = { ...Default,\n      ...Manipulator.getDataAttributes(this._element),\n      ...(typeof config === 'object' && config ? config : {})\n    };\n    typeCheckConfig(NAME, config, this.constructor.DefaultType);\n    return config;\n  }\n\n  _maybeScheduleHide() {\n    if (!this._config.autohide) {\n      return;\n    }\n\n    if (this._hasMouseInteraction || this._hasKeyboardInteraction) {\n      return;\n    }\n\n    this._timeout = setTimeout(() => {\n      this.hide();\n    }, this._config.delay);\n  }\n\n  _onInteraction(event, isInteracting) {\n    switch (event.type) {\n      case 'mouseover':\n      case 'mouseout':\n        this._hasMouseInteraction = isInteracting;\n        break;\n\n      case 'focusin':\n      case 'focusout':\n        this._hasKeyboardInteraction = isInteracting;\n        break;\n    }\n\n    if (isInteracting) {\n      this._clearTimeout();\n\n      return;\n    }\n\n    const nextElement = event.relatedTarget;\n\n    if (this._element === nextElement || this._element.contains(nextElement)) {\n      return;\n    }\n\n    this._maybeScheduleHide();\n  }\n\n  _setListeners() {\n    EventHandler.on(this._element, EVENT_CLICK_DISMISS, SELECTOR_DATA_DISMISS, () => this.hide());\n    EventHandler.on(this._element, EVENT_MOUSEOVER, event => this._onInteraction(event, true));\n    EventHandler.on(this._element, EVENT_MOUSEOUT, event => this._onInteraction(event, false));\n    EventHandler.on(this._element, EVENT_FOCUSIN, event => this._onInteraction(event, true));\n    EventHandler.on(this._element, EVENT_FOCUSOUT, event => this._onInteraction(event, false));\n  }\n\n  _clearTimeout() {\n    clearTimeout(this._timeout);\n    this._timeout = null;\n  } // Static\n\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Toast.getOrCreateInstance(this, config);\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config](this);\n      }\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Toast to jQuery only if jQuery is present\n */\n\n\ndefineJQueryPlugin(Toast);\n\nexport { Alert, Button, Carousel, Collapse, Dropdown, Modal, Offcanvas, Popover, ScrollSpy, Tab, Toast, Tooltip };\n//# sourceMappingURL=bootstrap.esm.js.map\n"
  },
  {
    "path": "src/sourceDev.WebApp/SharedThemes/cosmo/wwwroot/js/jquery.js",
    "content": "/*!\n * jQuery JavaScript Library v3.7.0\n * https://jquery.com/\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license\n * https://jquery.org/license\n *\n * Date: 2023-05-11T18:29Z\n */\n(function (global, factory) {\n\n\t\"use strict\";\n\n\tif (typeof module === \"object\" && typeof module.exports === \"object\") {\n\n\t\t// For CommonJS and CommonJS-like environments where a proper `window`\n\t\t// is present, execute the factory and get jQuery.\n\t\t// For environments that do not have a `window` with a `document`\n\t\t// (such as Node.js), expose a factory as module.exports.\n\t\t// This accentuates the need for the creation of a real `window`.\n\t\t// e.g. var jQuery = require(\"jquery\")(window);\n\t\t// See ticket trac-14549 for more info.\n\t\tmodule.exports = global.document ?\n\t\t\tfactory(global, true) :\n\t\t\tfunction (w) {\n\t\t\t\tif (!w.document) {\n\t\t\t\t\tthrow new Error(\"jQuery requires a window with a document\");\n\t\t\t\t}\n\t\t\t\treturn factory(w);\n\t\t\t};\n\t} else {\n\t\tfactory(global);\n\t}\n\n\t// Pass this if window is not defined yet\n})(typeof window !== \"undefined\" ? window : this, function (window, noGlobal) {\n\n\t// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1\n\t// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode\n\t// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common\n\t// enough that all such attempts are guarded in a try block.\n\t\"use strict\";\n\n\tvar arr = [];\n\n\tvar getProto = Object.getPrototypeOf;\n\n\tvar slice = arr.slice;\n\n\tvar flat = arr.flat ? function (array) {\n\t\treturn arr.flat.call(array);\n\t} : function (array) {\n\t\treturn arr.concat.apply([], array);\n\t};\n\n\n\tvar push = arr.push;\n\n\tvar indexOf = arr.indexOf;\n\n\tvar class2type = {};\n\n\tvar toString = class2type.toString;\n\n\tvar hasOwn = class2type.hasOwnProperty;\n\n\tvar fnToString = hasOwn.toString;\n\n\tvar ObjectFunctionString = fnToString.call(Object);\n\n\tvar support = {};\n\n\tvar isFunction = function isFunction(obj) {\n\n\t\t// Support: Chrome <=57, Firefox <=52\n\t\t// In some browsers, typeof returns \"function\" for HTML <object> elements\n\t\t// (i.e., `typeof document.createElement( \"object\" ) === \"function\"`).\n\t\t// We don't want to classify *any* DOM node as a function.\n\t\t// Support: QtWeb <=3.8.5, WebKit <=534.34, wkhtmltopdf tool <=0.12.5\n\t\t// Plus for old WebKit, typeof returns \"function\" for HTML collections\n\t\t// (e.g., `typeof document.getElementsByTagName(\"div\") === \"function\"`). (gh-4756)\n\t\treturn typeof obj === \"function\" && typeof obj.nodeType !== \"number\" &&\n\t\t\ttypeof obj.item !== \"function\";\n\t};\n\n\n\tvar isWindow = function isWindow(obj) {\n\t\treturn obj != null && obj === obj.window;\n\t};\n\n\n\tvar document = window.document;\n\n\n\n\tvar preservedScriptAttributes = {\n\t\ttype: true,\n\t\tsrc: true,\n\t\tnonce: true,\n\t\tnoModule: true\n\t};\n\n\tfunction DOMEval(code, node, doc) {\n\t\tdoc = doc || document;\n\n\t\tvar i, val,\n\t\t\tscript = doc.createElement(\"script\");\n\n\t\tscript.text = code;\n\t\tif (node) {\n\t\t\tfor (i in preservedScriptAttributes) {\n\n\t\t\t\t// Support: Firefox 64+, Edge 18+\n\t\t\t\t// Some browsers don't support the \"nonce\" property on scripts.\n\t\t\t\t// On the other hand, just using `getAttribute` is not enough as\n\t\t\t\t// the `nonce` attribute is reset to an empty string whenever it\n\t\t\t\t// becomes browsing-context connected.\n\t\t\t\t// See https://github.com/whatwg/html/issues/2369\n\t\t\t\t// See https://html.spec.whatwg.org/#nonce-attributes\n\t\t\t\t// The `node.getAttribute` check was added for the sake of\n\t\t\t\t// `jQuery.globalEval` so that it can fake a nonce-containing node\n\t\t\t\t// via an object.\n\t\t\t\tval = node[i] || node.getAttribute && node.getAttribute(i);\n\t\t\t\tif (val) {\n\t\t\t\t\tscript.setAttribute(i, val);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tdoc.head.appendChild(script).parentNode.removeChild(script);\n\t}\n\n\n\tfunction toType(obj) {\n\t\tif (obj == null) {\n\t\t\treturn obj + \"\";\n\t\t}\n\n\t\t// Support: Android <=2.3 only (functionish RegExp)\n\t\treturn typeof obj === \"object\" || typeof obj === \"function\" ?\n\t\t\tclass2type[toString.call(obj)] || \"object\" :\n\t\t\ttypeof obj;\n\t}\n\t/* global Symbol */\n\t// Defining this global in .eslintrc.json would create a danger of using the global\n\t// unguarded in another place, it seems safer to define global only for this module\n\n\n\n\tvar version = \"3.7.0\",\n\n\t\trhtmlSuffix = /HTML$/i,\n\n\t\t// Define a local copy of jQuery\n\t\tjQuery = function (selector, context) {\n\n\t\t\t// The jQuery object is actually just the init constructor 'enhanced'\n\t\t\t// Need init if jQuery is called (just allow error to be thrown if not included)\n\t\t\treturn new jQuery.fn.init(selector, context);\n\t\t};\n\n\tjQuery.fn = jQuery.prototype = {\n\n\t\t// The current version of jQuery being used\n\t\tjquery: version,\n\n\t\tconstructor: jQuery,\n\n\t\t// The default length of a jQuery object is 0\n\t\tlength: 0,\n\n\t\ttoArray: function () {\n\t\t\treturn slice.call(this);\n\t\t},\n\n\t\t// Get the Nth element in the matched element set OR\n\t\t// Get the whole matched element set as a clean array\n\t\tget: function (num) {\n\n\t\t\t// Return all the elements in a clean array\n\t\t\tif (num == null) {\n\t\t\t\treturn slice.call(this);\n\t\t\t}\n\n\t\t\t// Return just the one element from the set\n\t\t\treturn num < 0 ? this[num + this.length] : this[num];\n\t\t},\n\n\t\t// Take an array of elements and push it onto the stack\n\t\t// (returning the new matched element set)\n\t\tpushStack: function (elems) {\n\n\t\t\t// Build a new jQuery matched element set\n\t\t\tvar ret = jQuery.merge(this.constructor(), elems);\n\n\t\t\t// Add the old object onto the stack (as a reference)\n\t\t\tret.prevObject = this;\n\n\t\t\t// Return the newly-formed element set\n\t\t\treturn ret;\n\t\t},\n\n\t\t// Execute a callback for every element in the matched set.\n\t\teach: function (callback) {\n\t\t\treturn jQuery.each(this, callback);\n\t\t},\n\n\t\tmap: function (callback) {\n\t\t\treturn this.pushStack(jQuery.map(this, function (elem, i) {\n\t\t\t\treturn callback.call(elem, i, elem);\n\t\t\t}));\n\t\t},\n\n\t\tslice: function () {\n\t\t\treturn this.pushStack(slice.apply(this, arguments));\n\t\t},\n\n\t\tfirst: function () {\n\t\t\treturn this.eq(0);\n\t\t},\n\n\t\tlast: function () {\n\t\t\treturn this.eq(-1);\n\t\t},\n\n\t\teven: function () {\n\t\t\treturn this.pushStack(jQuery.grep(this, function (_elem, i) {\n\t\t\t\treturn (i + 1) % 2;\n\t\t\t}));\n\t\t},\n\n\t\todd: function () {\n\t\t\treturn this.pushStack(jQuery.grep(this, function (_elem, i) {\n\t\t\t\treturn i % 2;\n\t\t\t}));\n\t\t},\n\n\t\teq: function (i) {\n\t\t\tvar len = this.length,\n\t\t\t\tj = +i + (i < 0 ? len : 0);\n\t\t\treturn this.pushStack(j >= 0 && j < len ? [this[j]] : []);\n\t\t},\n\n\t\tend: function () {\n\t\t\treturn this.prevObject || this.constructor();\n\t\t},\n\n\t\t// For internal use only.\n\t\t// Behaves like an Array's method, not like a jQuery method.\n\t\tpush: push,\n\t\tsort: arr.sort,\n\t\tsplice: arr.splice\n\t};\n\n\tjQuery.extend = jQuery.fn.extend = function () {\n\t\tvar options, name, src, copy, copyIsArray, clone,\n\t\t\ttarget = arguments[0] || {},\n\t\t\ti = 1,\n\t\t\tlength = arguments.length,\n\t\t\tdeep = false;\n\n\t\t// Handle a deep copy situation\n\t\tif (typeof target === \"boolean\") {\n\t\t\tdeep = target;\n\n\t\t\t// Skip the boolean and the target\n\t\t\ttarget = arguments[i] || {};\n\t\t\ti++;\n\t\t}\n\n\t\t// Handle case when target is a string or something (possible in deep copy)\n\t\tif (typeof target !== \"object\" && !isFunction(target)) {\n\t\t\ttarget = {};\n\t\t}\n\n\t\t// Extend jQuery itself if only one argument is passed\n\t\tif (i === length) {\n\t\t\ttarget = this;\n\t\t\ti--;\n\t\t}\n\n\t\tfor (; i < length; i++) {\n\n\t\t\t// Only deal with non-null/undefined values\n\t\t\tif ((options = arguments[i]) != null) {\n\n\t\t\t\t// Extend the base object\n\t\t\t\tfor (name in options) {\n\t\t\t\t\tcopy = options[name];\n\n\t\t\t\t\t// Prevent Object.prototype pollution\n\t\t\t\t\t// Prevent never-ending loop\n\t\t\t\t\tif (name === \"__proto__\" || target === copy) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\t\tif (deep && copy && (jQuery.isPlainObject(copy) ||\n\t\t\t\t\t\t(copyIsArray = Array.isArray(copy)))) {\n\t\t\t\t\t\tsrc = target[name];\n\n\t\t\t\t\t\t// Ensure proper type for the source value\n\t\t\t\t\t\tif (copyIsArray && !Array.isArray(src)) {\n\t\t\t\t\t\t\tclone = [];\n\t\t\t\t\t\t} else if (!copyIsArray && !jQuery.isPlainObject(src)) {\n\t\t\t\t\t\t\tclone = {};\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tclone = src;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcopyIsArray = false;\n\n\t\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\t\ttarget[name] = jQuery.extend(deep, clone, copy);\n\n\t\t\t\t\t\t// Don't bring in undefined values\n\t\t\t\t\t} else if (copy !== undefined) {\n\t\t\t\t\t\ttarget[name] = copy;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Return the modified object\n\t\treturn target;\n\t};\n\n\tjQuery.extend({\n\n\t\t// Unique for each copy of jQuery on the page\n\t\texpando: \"jQuery\" + (version + Math.random()).replace(/\\D/g, \"\"),\n\n\t\t// Assume jQuery is ready without the ready module\n\t\tisReady: true,\n\n\t\terror: function (msg) {\n\t\t\tthrow new Error(msg);\n\t\t},\n\n\t\tnoop: function () { },\n\n\t\tisPlainObject: function (obj) {\n\t\t\tvar proto, Ctor;\n\n\t\t\t// Detect obvious negatives\n\t\t\t// Use toString instead of jQuery.type to catch host objects\n\t\t\tif (!obj || toString.call(obj) !== \"[object Object]\") {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tproto = getProto(obj);\n\n\t\t\t// Objects with no prototype (e.g., `Object.create( null )`) are plain\n\t\t\tif (!proto) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\t// Objects with prototype are plain iff they were constructed by a global Object function\n\t\t\tCtor = hasOwn.call(proto, \"constructor\") && proto.constructor;\n\t\t\treturn typeof Ctor === \"function\" && fnToString.call(Ctor) === ObjectFunctionString;\n\t\t},\n\n\t\tisEmptyObject: function (obj) {\n\t\t\tvar name;\n\n\t\t\tfor (name in obj) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\n\t\t// Evaluates a script in a provided context; falls back to the global one\n\t\t// if not specified.\n\t\tglobalEval: function (code, options, doc) {\n\t\t\tDOMEval(code, { nonce: options && options.nonce }, doc);\n\t\t},\n\n\t\teach: function (obj, callback) {\n\t\t\tvar length, i = 0;\n\n\t\t\tif (isArrayLike(obj)) {\n\t\t\t\tlength = obj.length;\n\t\t\t\tfor (; i < length; i++) {\n\t\t\t\t\tif (callback.call(obj[i], i, obj[i]) === false) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor (i in obj) {\n\t\t\t\t\tif (callback.call(obj[i], i, obj[i]) === false) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn obj;\n\t\t},\n\n\n\t\t// Retrieve the text value of an array of DOM nodes\n\t\ttext: function (elem) {\n\t\t\tvar node,\n\t\t\t\tret = \"\",\n\t\t\t\ti = 0,\n\t\t\t\tnodeType = elem.nodeType;\n\n\t\t\tif (!nodeType) {\n\n\t\t\t\t// If no nodeType, this is expected to be an array\n\t\t\t\twhile ((node = elem[i++])) {\n\n\t\t\t\t\t// Do not traverse comment nodes\n\t\t\t\t\tret += jQuery.text(node);\n\t\t\t\t}\n\t\t\t} else if (nodeType === 1 || nodeType === 9 || nodeType === 11) {\n\t\t\t\treturn elem.textContent;\n\t\t\t} else if (nodeType === 3 || nodeType === 4) {\n\t\t\t\treturn elem.nodeValue;\n\t\t\t}\n\n\t\t\t// Do not include comment or processing instruction nodes\n\n\t\t\treturn ret;\n\t\t},\n\n\t\t// results is for internal usage only\n\t\tmakeArray: function (arr, results) {\n\t\t\tvar ret = results || [];\n\n\t\t\tif (arr != null) {\n\t\t\t\tif (isArrayLike(Object(arr))) {\n\t\t\t\t\tjQuery.merge(ret,\n\t\t\t\t\t\ttypeof arr === \"string\" ?\n\t\t\t\t\t\t\t[arr] : arr\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\tpush.call(ret, arr);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn ret;\n\t\t},\n\n\t\tinArray: function (elem, arr, i) {\n\t\t\treturn arr == null ? -1 : indexOf.call(arr, elem, i);\n\t\t},\n\n\t\tisXMLDoc: function (elem) {\n\t\t\tvar namespace = elem && elem.namespaceURI,\n\t\t\t\tdocElem = elem && (elem.ownerDocument || elem).documentElement;\n\n\t\t\t// Assume HTML when documentElement doesn't yet exist, such as inside\n\t\t\t// document fragments.\n\t\t\treturn !rhtmlSuffix.test(namespace || docElem && docElem.nodeName || \"HTML\");\n\t\t},\n\n\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\tmerge: function (first, second) {\n\t\t\tvar len = +second.length,\n\t\t\t\tj = 0,\n\t\t\t\ti = first.length;\n\n\t\t\tfor (; j < len; j++) {\n\t\t\t\tfirst[i++] = second[j];\n\t\t\t}\n\n\t\t\tfirst.length = i;\n\n\t\t\treturn first;\n\t\t},\n\n\t\tgrep: function (elems, callback, invert) {\n\t\t\tvar callbackInverse,\n\t\t\t\tmatches = [],\n\t\t\t\ti = 0,\n\t\t\t\tlength = elems.length,\n\t\t\t\tcallbackExpect = !invert;\n\n\t\t\t// Go through the array, only saving the items\n\t\t\t// that pass the validator function\n\t\t\tfor (; i < length; i++) {\n\t\t\t\tcallbackInverse = !callback(elems[i], i);\n\t\t\t\tif (callbackInverse !== callbackExpect) {\n\t\t\t\t\tmatches.push(elems[i]);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn matches;\n\t\t},\n\n\t\t// arg is for internal usage only\n\t\tmap: function (elems, callback, arg) {\n\t\t\tvar length, value,\n\t\t\t\ti = 0,\n\t\t\t\tret = [];\n\n\t\t\t// Go through the array, translating each of the items to their new values\n\t\t\tif (isArrayLike(elems)) {\n\t\t\t\tlength = elems.length;\n\t\t\t\tfor (; i < length; i++) {\n\t\t\t\t\tvalue = callback(elems[i], i, arg);\n\n\t\t\t\t\tif (value != null) {\n\t\t\t\t\t\tret.push(value);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Go through every key on the object,\n\t\t\t} else {\n\t\t\t\tfor (i in elems) {\n\t\t\t\t\tvalue = callback(elems[i], i, arg);\n\n\t\t\t\t\tif (value != null) {\n\t\t\t\t\t\tret.push(value);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Flatten any nested arrays\n\t\t\treturn flat(ret);\n\t\t},\n\n\t\t// A global GUID counter for objects\n\t\tguid: 1,\n\n\t\t// jQuery.support is not used in Core but other projects attach their\n\t\t// properties to it so it needs to exist.\n\t\tsupport: support\n\t});\n\n\tif (typeof Symbol === \"function\") {\n\t\tjQuery.fn[Symbol.iterator] = arr[Symbol.iterator];\n\t}\n\n\t// Populate the class2type map\n\tjQuery.each(\"Boolean Number String Function Array Date RegExp Object Error Symbol\".split(\" \"),\n\t\tfunction (_i, name) {\n\t\t\tclass2type[\"[object \" + name + \"]\"] = name.toLowerCase();\n\t\t});\n\n\tfunction isArrayLike(obj) {\n\n\t\t// Support: real iOS 8.2 only (not reproducible in simulator)\n\t\t// `in` check used to prevent JIT error (gh-2145)\n\t\t// hasOwn isn't used here due to false negatives\n\t\t// regarding Nodelist length in IE\n\t\tvar length = !!obj && \"length\" in obj && obj.length,\n\t\t\ttype = toType(obj);\n\n\t\tif (isFunction(obj) || isWindow(obj)) {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn type === \"array\" || length === 0 ||\n\t\t\ttypeof length === \"number\" && length > 0 && (length - 1) in obj;\n\t}\n\n\n\tfunction nodeName(elem, name) {\n\n\t\treturn elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();\n\n\t}\n\tvar pop = arr.pop;\n\n\n\tvar sort = arr.sort;\n\n\n\tvar splice = arr.splice;\n\n\n\tvar whitespace = \"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\";\n\n\n\tvar rtrimCSS = new RegExp(\n\t\t\"^\" + whitespace + \"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\" + whitespace + \"+$\",\n\t\t\"g\"\n\t);\n\n\n\n\n\t// Note: an element does not contain itself\n\tjQuery.contains = function (a, b) {\n\t\tvar bup = b && b.parentNode;\n\n\t\treturn a === bup || !!(bup && bup.nodeType === 1 && (\n\n\t\t\t// Support: IE 9 - 11+\n\t\t\t// IE doesn't have `contains` on SVG.\n\t\t\ta.contains ?\n\t\t\t\ta.contains(bup) :\n\t\t\t\ta.compareDocumentPosition && a.compareDocumentPosition(bup) & 16\n\t\t));\n\t};\n\n\n\n\n\t// CSS string/identifier serialization\n\t// https://drafts.csswg.org/cssom/#common-serializing-idioms\n\tvar rcssescape = /([\\0-\\x1f\\x7f]|^-?\\d)|^-$|[^\\x80-\\uFFFF\\w-]/g;\n\n\tfunction fcssescape(ch, asCodePoint) {\n\t\tif (asCodePoint) {\n\n\t\t\t// U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER\n\t\t\tif (ch === \"\\0\") {\n\t\t\t\treturn \"\\uFFFD\";\n\t\t\t}\n\n\t\t\t// Control characters and (dependent upon position) numbers get escaped as code points\n\t\t\treturn ch.slice(0, -1) + \"\\\\\" + ch.charCodeAt(ch.length - 1).toString(16) + \" \";\n\t\t}\n\n\t\t// Other potentially-special ASCII characters get backslash-escaped\n\t\treturn \"\\\\\" + ch;\n\t}\n\n\tjQuery.escapeSelector = function (sel) {\n\t\treturn (sel + \"\").replace(rcssescape, fcssescape);\n\t};\n\n\n\n\n\tvar preferredDoc = document,\n\t\tpushNative = push;\n\n\t(function () {\n\n\t\tvar i,\n\t\t\tExpr,\n\t\t\toutermostContext,\n\t\t\tsortInput,\n\t\t\thasDuplicate,\n\t\t\tpush = pushNative,\n\n\t\t\t// Local document vars\n\t\t\tdocument,\n\t\t\tdocumentElement,\n\t\t\tdocumentIsHTML,\n\t\t\trbuggyQSA,\n\t\t\tmatches,\n\n\t\t\t// Instance-specific data\n\t\t\texpando = jQuery.expando,\n\t\t\tdirruns = 0,\n\t\t\tdone = 0,\n\t\t\tclassCache = createCache(),\n\t\t\ttokenCache = createCache(),\n\t\t\tcompilerCache = createCache(),\n\t\t\tnonnativeSelectorCache = createCache(),\n\t\t\tsortOrder = function (a, b) {\n\t\t\t\tif (a === b) {\n\t\t\t\t\thasDuplicate = true;\n\t\t\t\t}\n\t\t\t\treturn 0;\n\t\t\t},\n\n\t\t\tbooleans = \"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|\" +\n\t\t\t\t\"loop|multiple|open|readonly|required|scoped\",\n\n\t\t\t// Regular expressions\n\n\t\t\t// https://www.w3.org/TR/css-syntax-3/#ident-token-diagram\n\t\t\tidentifier = \"(?:\\\\\\\\[\\\\da-fA-F]{1,6}\" + whitespace +\n\t\t\t\t\"?|\\\\\\\\[^\\\\r\\\\n\\\\f]|[\\\\w-]|[^\\0-\\\\x7f])+\",\n\n\t\t\t// Attribute selectors: https://www.w3.org/TR/selectors/#attribute-selectors\n\t\t\tattributes = \"\\\\[\" + whitespace + \"*(\" + identifier + \")(?:\" + whitespace +\n\n\t\t\t\t// Operator (capture 2)\n\t\t\t\t\"*([*^$|!~]?=)\" + whitespace +\n\n\t\t\t\t// \"Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]\"\n\t\t\t\t\"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\" + identifier + \"))|)\" +\n\t\t\t\twhitespace + \"*\\\\]\",\n\n\t\t\tpseudos = \":(\" + identifier + \")(?:\\\\((\" +\n\n\t\t\t\t// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:\n\t\t\t\t// 1. quoted (capture 3; capture 4 or capture 5)\n\t\t\t\t\"('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|\" +\n\n\t\t\t\t// 2. simple (capture 6)\n\t\t\t\t\"((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\" + attributes + \")*)|\" +\n\n\t\t\t\t// 3. anything else (capture 2)\n\t\t\t\t\".*\" +\n\t\t\t\t\")\\\\)|)\",\n\n\t\t\t// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter\n\t\t\trwhitespace = new RegExp(whitespace + \"+\", \"g\"),\n\n\t\t\trcomma = new RegExp(\"^\" + whitespace + \"*,\" + whitespace + \"*\"),\n\t\t\trleadingCombinator = new RegExp(\"^\" + whitespace + \"*([>+~]|\" + whitespace + \")\" +\n\t\t\t\twhitespace + \"*\"),\n\t\t\trdescend = new RegExp(whitespace + \"|>\"),\n\n\t\t\trpseudo = new RegExp(pseudos),\n\t\t\tridentifier = new RegExp(\"^\" + identifier + \"$\"),\n\n\t\t\tmatchExpr = {\n\t\t\t\tID: new RegExp(\"^#(\" + identifier + \")\"),\n\t\t\t\tCLASS: new RegExp(\"^\\\\.(\" + identifier + \")\"),\n\t\t\t\tTAG: new RegExp(\"^(\" + identifier + \"|[*])\"),\n\t\t\t\tATTR: new RegExp(\"^\" + attributes),\n\t\t\t\tPSEUDO: new RegExp(\"^\" + pseudos),\n\t\t\t\tCHILD: new RegExp(\n\t\t\t\t\t\"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\" +\n\t\t\t\t\twhitespace + \"*(even|odd|(([+-]|)(\\\\d*)n|)\" + whitespace + \"*(?:([+-]|)\" +\n\t\t\t\t\twhitespace + \"*(\\\\d+)|))\" + whitespace + \"*\\\\)|)\", \"i\"),\n\t\t\t\tbool: new RegExp(\"^(?:\" + booleans + \")$\", \"i\"),\n\n\t\t\t\t// For use in libraries implementing .is()\n\t\t\t\t// We use this for POS matching in `select`\n\t\t\t\tneedsContext: new RegExp(\"^\" + whitespace +\n\t\t\t\t\t\"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\" + whitespace +\n\t\t\t\t\t\"*((?:-\\\\d)?\\\\d*)\" + whitespace + \"*\\\\)|)(?=[^-]|$)\", \"i\")\n\t\t\t},\n\n\t\t\trinputs = /^(?:input|select|textarea|button)$/i,\n\t\t\trheader = /^h\\d$/i,\n\n\t\t\t// Easily-parseable/retrievable ID or TAG or CLASS selectors\n\t\t\trquickExpr = /^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,\n\n\t\t\trsibling = /[+~]/,\n\n\t\t\t// CSS escapes\n\t\t\t// https://www.w3.org/TR/CSS21/syndata.html#escaped-characters\n\t\t\trunescape = new RegExp(\"\\\\\\\\[\\\\da-fA-F]{1,6}\" + whitespace +\n\t\t\t\t\"?|\\\\\\\\([^\\\\r\\\\n\\\\f])\", \"g\"),\n\t\t\tfunescape = function (escape, nonHex) {\n\t\t\t\tvar high = \"0x\" + escape.slice(1) - 0x10000;\n\n\t\t\t\tif (nonHex) {\n\n\t\t\t\t\t// Strip the backslash prefix from a non-hex escape sequence\n\t\t\t\t\treturn nonHex;\n\t\t\t\t}\n\n\t\t\t\t// Replace a hexadecimal escape sequence with the encoded Unicode code point\n\t\t\t\t// Support: IE <=11+\n\t\t\t\t// For values outside the Basic Multilingual Plane (BMP), manually construct a\n\t\t\t\t// surrogate pair\n\t\t\t\treturn high < 0 ?\n\t\t\t\t\tString.fromCharCode(high + 0x10000) :\n\t\t\t\t\tString.fromCharCode(high >> 10 | 0xD800, high & 0x3FF | 0xDC00);\n\t\t\t},\n\n\t\t\t// Used for iframes; see `setDocument`.\n\t\t\t// Support: IE 9 - 11+, Edge 12 - 18+\n\t\t\t// Removing the function wrapper causes a \"Permission Denied\"\n\t\t\t// error in IE/Edge.\n\t\t\tunloadHandler = function () {\n\t\t\t\tsetDocument();\n\t\t\t},\n\n\t\t\tinDisabledFieldset = addCombinator(\n\t\t\t\tfunction (elem) {\n\t\t\t\t\treturn elem.disabled === true && nodeName(elem, \"fieldset\");\n\t\t\t\t},\n\t\t\t\t{ dir: \"parentNode\", next: \"legend\" }\n\t\t\t);\n\n\t\t// Support: IE <=9 only\n\t\t// Accessing document.activeElement can throw unexpectedly\n\t\t// https://bugs.jquery.com/ticket/13393\n\t\tfunction safeActiveElement() {\n\t\t\ttry {\n\t\t\t\treturn document.activeElement;\n\t\t\t} catch (err) { }\n\t\t}\n\n\t\t// Optimize for push.apply( _, NodeList )\n\t\ttry {\n\t\t\tpush.apply(\n\t\t\t\t(arr = slice.call(preferredDoc.childNodes)),\n\t\t\t\tpreferredDoc.childNodes\n\t\t\t);\n\n\t\t\t// Support: Android <=4.0\n\t\t\t// Detect silently failing push.apply\n\t\t\t// eslint-disable-next-line no-unused-expressions\n\t\t\tarr[preferredDoc.childNodes.length].nodeType;\n\t\t} catch (e) {\n\t\t\tpush = {\n\t\t\t\tapply: function (target, els) {\n\t\t\t\t\tpushNative.apply(target, slice.call(els));\n\t\t\t\t},\n\t\t\t\tcall: function (target) {\n\t\t\t\t\tpushNative.apply(target, slice.call(arguments, 1));\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\n\t\tfunction find(selector, context, results, seed) {\n\t\t\tvar m, i, elem, nid, match, groups, newSelector,\n\t\t\t\tnewContext = context && context.ownerDocument,\n\n\t\t\t\t// nodeType defaults to 9, since context defaults to document\n\t\t\t\tnodeType = context ? context.nodeType : 9;\n\n\t\t\tresults = results || [];\n\n\t\t\t// Return early from calls with invalid selector or context\n\t\t\tif (typeof selector !== \"string\" || !selector ||\n\t\t\t\tnodeType !== 1 && nodeType !== 9 && nodeType !== 11) {\n\n\t\t\t\treturn results;\n\t\t\t}\n\n\t\t\t// Try to shortcut find operations (as opposed to filters) in HTML documents\n\t\t\tif (!seed) {\n\t\t\t\tsetDocument(context);\n\t\t\t\tcontext = context || document;\n\n\t\t\t\tif (documentIsHTML) {\n\n\t\t\t\t\t// If the selector is sufficiently simple, try using a \"get*By*\" DOM method\n\t\t\t\t\t// (excepting DocumentFragment context, where the methods don't exist)\n\t\t\t\t\tif (nodeType !== 11 && (match = rquickExpr.exec(selector))) {\n\n\t\t\t\t\t\t// ID selector\n\t\t\t\t\t\tif ((m = match[1])) {\n\n\t\t\t\t\t\t\t// Document context\n\t\t\t\t\t\t\tif (nodeType === 9) {\n\t\t\t\t\t\t\t\tif ((elem = context.getElementById(m))) {\n\n\t\t\t\t\t\t\t\t\t// Support: IE 9 only\n\t\t\t\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\t\t\t\tif (elem.id === m) {\n\t\t\t\t\t\t\t\t\t\tpush.call(results, elem);\n\t\t\t\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t// Element context\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t// Support: IE 9 only\n\t\t\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\t\t\tif (newContext && (elem = newContext.getElementById(m)) &&\n\t\t\t\t\t\t\t\t\tfind.contains(context, elem) &&\n\t\t\t\t\t\t\t\t\telem.id === m) {\n\n\t\t\t\t\t\t\t\t\tpush.call(results, elem);\n\t\t\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Type selector\n\t\t\t\t\t\t} else if (match[2]) {\n\t\t\t\t\t\t\tpush.apply(results, context.getElementsByTagName(selector));\n\t\t\t\t\t\t\treturn results;\n\n\t\t\t\t\t\t\t// Class selector\n\t\t\t\t\t\t} else if ((m = match[3]) && context.getElementsByClassName) {\n\t\t\t\t\t\t\tpush.apply(results, context.getElementsByClassName(m));\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Take advantage of querySelectorAll\n\t\t\t\t\tif (!nonnativeSelectorCache[selector + \" \"] &&\n\t\t\t\t\t\t(!rbuggyQSA || !rbuggyQSA.test(selector))) {\n\n\t\t\t\t\t\tnewSelector = selector;\n\t\t\t\t\t\tnewContext = context;\n\n\t\t\t\t\t\t// qSA considers elements outside a scoping root when evaluating child or\n\t\t\t\t\t\t// descendant combinators, which is not what we want.\n\t\t\t\t\t\t// In such cases, we work around the behavior by prefixing every selector in the\n\t\t\t\t\t\t// list with an ID selector referencing the scope context.\n\t\t\t\t\t\t// The technique has to be used as well when a leading combinator is used\n\t\t\t\t\t\t// as such selectors are not recognized by querySelectorAll.\n\t\t\t\t\t\t// Thanks to Andrew Dupont for this technique.\n\t\t\t\t\t\tif (nodeType === 1 &&\n\t\t\t\t\t\t\t(rdescend.test(selector) || rleadingCombinator.test(selector))) {\n\n\t\t\t\t\t\t\t// Expand context for sibling selectors\n\t\t\t\t\t\t\tnewContext = rsibling.test(selector) && testContext(context.parentNode) ||\n\t\t\t\t\t\t\t\tcontext;\n\n\t\t\t\t\t\t\t// We can use :scope instead of the ID hack if the browser\n\t\t\t\t\t\t\t// supports it & if we're not changing the context.\n\t\t\t\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when\n\t\t\t\t\t\t\t// strict-comparing two documents; shallow comparisons work.\n\t\t\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\t\t\tif (newContext != context || !support.scope) {\n\n\t\t\t\t\t\t\t\t// Capture the context ID, setting it first if necessary\n\t\t\t\t\t\t\t\tif ((nid = context.getAttribute(\"id\"))) {\n\t\t\t\t\t\t\t\t\tnid = jQuery.escapeSelector(nid);\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tcontext.setAttribute(\"id\", (nid = expando));\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Prefix every selector in the list\n\t\t\t\t\t\t\tgroups = tokenize(selector);\n\t\t\t\t\t\t\ti = groups.length;\n\t\t\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\t\t\tgroups[i] = (nid ? \"#\" + nid : \":scope\") + \" \" +\n\t\t\t\t\t\t\t\t\ttoSelector(groups[i]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tnewSelector = groups.join(\",\");\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tpush.apply(results,\n\t\t\t\t\t\t\t\tnewContext.querySelectorAll(newSelector)\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t} catch (qsaError) {\n\t\t\t\t\t\t\tnonnativeSelectorCache(selector, true);\n\t\t\t\t\t\t} finally {\n\t\t\t\t\t\t\tif (nid === expando) {\n\t\t\t\t\t\t\t\tcontext.removeAttribute(\"id\");\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// All others\n\t\t\treturn select(selector.replace(rtrimCSS, \"$1\"), context, results, seed);\n\t\t}\n\n\t\t/**\n\t\t * Create key-value caches of limited size\n\t\t * @returns {function(string, object)} Returns the Object data after storing it on itself with\n\t\t *\tproperty name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)\n\t\t *\tdeleting the oldest entry\n\t\t */\n\t\tfunction createCache() {\n\t\t\tvar keys = [];\n\n\t\t\tfunction cache(key, value) {\n\n\t\t\t\t// Use (key + \" \") to avoid collision with native prototype properties\n\t\t\t\t// (see https://github.com/jquery/sizzle/issues/157)\n\t\t\t\tif (keys.push(key + \" \") > Expr.cacheLength) {\n\n\t\t\t\t\t// Only keep the most recent entries\n\t\t\t\t\tdelete cache[keys.shift()];\n\t\t\t\t}\n\t\t\t\treturn (cache[key + \" \"] = value);\n\t\t\t}\n\t\t\treturn cache;\n\t\t}\n\n\t\t/**\n\t\t * Mark a function for special use by jQuery selector module\n\t\t * @param {Function} fn The function to mark\n\t\t */\n\t\tfunction markFunction(fn) {\n\t\t\tfn[expando] = true;\n\t\t\treturn fn;\n\t\t}\n\n\t\t/**\n\t\t * Support testing using an element\n\t\t * @param {Function} fn Passed the created element and returns a boolean result\n\t\t */\n\t\tfunction assert(fn) {\n\t\t\tvar el = document.createElement(\"fieldset\");\n\n\t\t\ttry {\n\t\t\t\treturn !!fn(el);\n\t\t\t} catch (e) {\n\t\t\t\treturn false;\n\t\t\t} finally {\n\n\t\t\t\t// Remove from its parent by default\n\t\t\t\tif (el.parentNode) {\n\t\t\t\t\tel.parentNode.removeChild(el);\n\t\t\t\t}\n\n\t\t\t\t// release memory in IE\n\t\t\t\tel = null;\n\t\t\t}\n\t\t}\n\n\t\t/**\n\t\t * Returns a function to use in pseudos for input types\n\t\t * @param {String} type\n\t\t */\n\t\tfunction createInputPseudo(type) {\n\t\t\treturn function (elem) {\n\t\t\t\treturn nodeName(elem, \"input\") && elem.type === type;\n\t\t\t};\n\t\t}\n\n\t\t/**\n\t\t * Returns a function to use in pseudos for buttons\n\t\t * @param {String} type\n\t\t */\n\t\tfunction createButtonPseudo(type) {\n\t\t\treturn function (elem) {\n\t\t\t\treturn (nodeName(elem, \"input\") || nodeName(elem, \"button\")) &&\n\t\t\t\t\telem.type === type;\n\t\t\t};\n\t\t}\n\n\t\t/**\n\t\t * Returns a function to use in pseudos for :enabled/:disabled\n\t\t * @param {Boolean} disabled true for :disabled; false for :enabled\n\t\t */\n\t\tfunction createDisabledPseudo(disabled) {\n\n\t\t\t// Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable\n\t\t\treturn function (elem) {\n\n\t\t\t\t// Only certain elements can match :enabled or :disabled\n\t\t\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled\n\t\t\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled\n\t\t\t\tif (\"form\" in elem) {\n\n\t\t\t\t\t// Check for inherited disabledness on relevant non-disabled elements:\n\t\t\t\t\t// * listed form-associated elements in a disabled fieldset\n\t\t\t\t\t//   https://html.spec.whatwg.org/multipage/forms.html#category-listed\n\t\t\t\t\t//   https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled\n\t\t\t\t\t// * option elements in a disabled optgroup\n\t\t\t\t\t//   https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled\n\t\t\t\t\t// All such elements have a \"form\" property.\n\t\t\t\t\tif (elem.parentNode && elem.disabled === false) {\n\n\t\t\t\t\t\t// Option elements defer to a parent optgroup if present\n\t\t\t\t\t\tif (\"label\" in elem) {\n\t\t\t\t\t\t\tif (\"label\" in elem.parentNode) {\n\t\t\t\t\t\t\t\treturn elem.parentNode.disabled === disabled;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\treturn elem.disabled === disabled;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Support: IE 6 - 11+\n\t\t\t\t\t\t// Use the isDisabled shortcut property to check for disabled fieldset ancestors\n\t\t\t\t\t\treturn elem.isDisabled === disabled ||\n\n\t\t\t\t\t\t\t// Where there is no isDisabled, check manually\n\t\t\t\t\t\t\telem.isDisabled !== !disabled &&\n\t\t\t\t\t\t\tinDisabledFieldset(elem) === disabled;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn elem.disabled === disabled;\n\n\t\t\t\t\t// Try to winnow out elements that can't be disabled before trusting the disabled property.\n\t\t\t\t\t// Some victims get caught in our net (label, legend, menu, track), but it shouldn't\n\t\t\t\t\t// even exist on them, let alone have a boolean value.\n\t\t\t\t} else if (\"label\" in elem) {\n\t\t\t\t\treturn elem.disabled === disabled;\n\t\t\t\t}\n\n\t\t\t\t// Remaining elements are neither :enabled nor :disabled\n\t\t\t\treturn false;\n\t\t\t};\n\t\t}\n\n\t\t/**\n\t\t * Returns a function to use in pseudos for positionals\n\t\t * @param {Function} fn\n\t\t */\n\t\tfunction createPositionalPseudo(fn) {\n\t\t\treturn markFunction(function (argument) {\n\t\t\t\targument = +argument;\n\t\t\t\treturn markFunction(function (seed, matches) {\n\t\t\t\t\tvar j,\n\t\t\t\t\t\tmatchIndexes = fn([], seed.length, argument),\n\t\t\t\t\t\ti = matchIndexes.length;\n\n\t\t\t\t\t// Match elements found at the specified indexes\n\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\tif (seed[(j = matchIndexes[i])]) {\n\t\t\t\t\t\t\tseed[j] = !(matches[j] = seed[j]);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\n\t\t/**\n\t\t * Checks a node for validity as a jQuery selector context\n\t\t * @param {Element|Object=} context\n\t\t * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value\n\t\t */\n\t\tfunction testContext(context) {\n\t\t\treturn context && typeof context.getElementsByTagName !== \"undefined\" && context;\n\t\t}\n\n\t\t/**\n\t\t * Sets document-related variables once based on the current document\n\t\t * @param {Element|Object} [node] An element or document object to use to set the document\n\t\t * @returns {Object} Returns the current document\n\t\t */\n\t\tfunction setDocument(node) {\n\t\t\tvar subWindow,\n\t\t\t\tdoc = node ? node.ownerDocument || node : preferredDoc;\n\n\t\t\t// Return early if doc is invalid or already selected\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tif (doc == document || doc.nodeType !== 9 || !doc.documentElement) {\n\t\t\t\treturn document;\n\t\t\t}\n\n\t\t\t// Update global variables\n\t\t\tdocument = doc;\n\t\t\tdocumentElement = document.documentElement;\n\t\t\tdocumentIsHTML = !jQuery.isXMLDoc(document);\n\n\t\t\t// Support: iOS 7 only, IE 9 - 11+\n\t\t\t// Older browsers didn't support unprefixed `matches`.\n\t\t\tmatches = documentElement.matches ||\n\t\t\t\tdocumentElement.webkitMatchesSelector ||\n\t\t\t\tdocumentElement.msMatchesSelector;\n\n\t\t\t// Support: IE 9 - 11+, Edge 12 - 18+\n\t\t\t// Accessing iframe documents after unload throws \"permission denied\" errors (see trac-13936)\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tif (preferredDoc != document &&\n\t\t\t\t(subWindow = document.defaultView) && subWindow.top !== subWindow) {\n\n\t\t\t\t// Support: IE 9 - 11+, Edge 12 - 18+\n\t\t\t\tsubWindow.addEventListener(\"unload\", unloadHandler);\n\t\t\t}\n\n\t\t\t// Support: IE <10\n\t\t\t// Check if getElementById returns elements by name\n\t\t\t// The broken getElementById methods don't pick up programmatically-set names,\n\t\t\t// so use a roundabout getElementsByName test\n\t\t\tsupport.getById = assert(function (el) {\n\t\t\t\tdocumentElement.appendChild(el).id = jQuery.expando;\n\t\t\t\treturn !document.getElementsByName ||\n\t\t\t\t\t!document.getElementsByName(jQuery.expando).length;\n\t\t\t});\n\n\t\t\t// Support: IE 9 only\n\t\t\t// Check to see if it's possible to do matchesSelector\n\t\t\t// on a disconnected node.\n\t\t\tsupport.disconnectedMatch = assert(function (el) {\n\t\t\t\treturn matches.call(el, \"*\");\n\t\t\t});\n\n\t\t\t// Support: IE 9 - 11+, Edge 12 - 18+\n\t\t\t// IE/Edge don't support the :scope pseudo-class.\n\t\t\tsupport.scope = assert(function () {\n\t\t\t\treturn document.querySelectorAll(\":scope\");\n\t\t\t});\n\n\t\t\t// Support: Chrome 105 - 111 only, Safari 15.4 - 16.3 only\n\t\t\t// Make sure the `:has()` argument is parsed unforgivingly.\n\t\t\t// We include `*` in the test to detect buggy implementations that are\n\t\t\t// _selectively_ forgiving (specifically when the list includes at least\n\t\t\t// one valid selector).\n\t\t\t// Note that we treat complete lack of support for `:has()` as if it were\n\t\t\t// spec-compliant support, which is fine because use of `:has()` in such\n\t\t\t// environments will fail in the qSA path and fall back to jQuery traversal\n\t\t\t// anyway.\n\t\t\tsupport.cssHas = assert(function () {\n\t\t\t\ttry {\n\t\t\t\t\tdocument.querySelector(\":has(*,:jqfake)\");\n\t\t\t\t\treturn false;\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t// ID filter and find\n\t\t\tif (support.getById) {\n\t\t\t\tExpr.filter.ID = function (id) {\n\t\t\t\t\tvar attrId = id.replace(runescape, funescape);\n\t\t\t\t\treturn function (elem) {\n\t\t\t\t\t\treturn elem.getAttribute(\"id\") === attrId;\n\t\t\t\t\t};\n\t\t\t\t};\n\t\t\t\tExpr.find.ID = function (id, context) {\n\t\t\t\t\tif (typeof context.getElementById !== \"undefined\" && documentIsHTML) {\n\t\t\t\t\t\tvar elem = context.getElementById(id);\n\t\t\t\t\t\treturn elem ? [elem] : [];\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t} else {\n\t\t\t\tExpr.filter.ID = function (id) {\n\t\t\t\t\tvar attrId = id.replace(runescape, funescape);\n\t\t\t\t\treturn function (elem) {\n\t\t\t\t\t\tvar node = typeof elem.getAttributeNode !== \"undefined\" &&\n\t\t\t\t\t\t\telem.getAttributeNode(\"id\");\n\t\t\t\t\t\treturn node && node.value === attrId;\n\t\t\t\t\t};\n\t\t\t\t};\n\n\t\t\t\t// Support: IE 6 - 7 only\n\t\t\t\t// getElementById is not reliable as a find shortcut\n\t\t\t\tExpr.find.ID = function (id, context) {\n\t\t\t\t\tif (typeof context.getElementById !== \"undefined\" && documentIsHTML) {\n\t\t\t\t\t\tvar node, i, elems,\n\t\t\t\t\t\t\telem = context.getElementById(id);\n\n\t\t\t\t\t\tif (elem) {\n\n\t\t\t\t\t\t\t// Verify the id attribute\n\t\t\t\t\t\t\tnode = elem.getAttributeNode(\"id\");\n\t\t\t\t\t\t\tif (node && node.value === id) {\n\t\t\t\t\t\t\t\treturn [elem];\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Fall back on getElementsByName\n\t\t\t\t\t\t\telems = context.getElementsByName(id);\n\t\t\t\t\t\t\ti = 0;\n\t\t\t\t\t\t\twhile ((elem = elems[i++])) {\n\t\t\t\t\t\t\t\tnode = elem.getAttributeNode(\"id\");\n\t\t\t\t\t\t\t\tif (node && node.value === id) {\n\t\t\t\t\t\t\t\t\treturn [elem];\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn [];\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\n\t\t\t// Tag\n\t\t\tExpr.find.TAG = function (tag, context) {\n\t\t\t\tif (typeof context.getElementsByTagName !== \"undefined\") {\n\t\t\t\t\treturn context.getElementsByTagName(tag);\n\n\t\t\t\t\t// DocumentFragment nodes don't have gEBTN\n\t\t\t\t} else {\n\t\t\t\t\treturn context.querySelectorAll(tag);\n\t\t\t\t}\n\t\t\t};\n\n\t\t\t// Class\n\t\t\tExpr.find.CLASS = function (className, context) {\n\t\t\t\tif (typeof context.getElementsByClassName !== \"undefined\" && documentIsHTML) {\n\t\t\t\t\treturn context.getElementsByClassName(className);\n\t\t\t\t}\n\t\t\t};\n\n\t\t\t/* QSA/matchesSelector\n\t\t\t---------------------------------------------------------------------- */\n\n\t\t\t// QSA and matchesSelector support\n\n\t\t\trbuggyQSA = [];\n\n\t\t\t// Build QSA regex\n\t\t\t// Regex strategy adopted from Diego Perini\n\t\t\tassert(function (el) {\n\n\t\t\t\tvar input;\n\n\t\t\t\tdocumentElement.appendChild(el).innerHTML =\n\t\t\t\t\t\"<a id='\" + expando + \"' href='' disabled='disabled'></a>\" +\n\t\t\t\t\t\"<select id='\" + expando + \"-\\r\\\\' disabled='disabled'>\" +\n\t\t\t\t\t\"<option selected=''></option></select>\";\n\n\t\t\t\t// Support: iOS <=7 - 8 only\n\t\t\t\t// Boolean attributes and \"value\" are not treated correctly in some XML documents\n\t\t\t\tif (!el.querySelectorAll(\"[selected]\").length) {\n\t\t\t\t\trbuggyQSA.push(\"\\\\[\" + whitespace + \"*(?:value|\" + booleans + \")\");\n\t\t\t\t}\n\n\t\t\t\t// Support: iOS <=7 - 8 only\n\t\t\t\tif (!el.querySelectorAll(\"[id~=\" + expando + \"-]\").length) {\n\t\t\t\t\trbuggyQSA.push(\"~=\");\n\t\t\t\t}\n\n\t\t\t\t// Support: iOS 8 only\n\t\t\t\t// https://bugs.webkit.org/show_bug.cgi?id=136851\n\t\t\t\t// In-page `selector#id sibling-combinator selector` fails\n\t\t\t\tif (!el.querySelectorAll(\"a#\" + expando + \"+*\").length) {\n\t\t\t\t\trbuggyQSA.push(\".#.+[+~]\");\n\t\t\t\t}\n\n\t\t\t\t// Support: Chrome <=105+, Firefox <=104+, Safari <=15.4+\n\t\t\t\t// In some of the document kinds, these selectors wouldn't work natively.\n\t\t\t\t// This is probably OK but for backwards compatibility we want to maintain\n\t\t\t\t// handling them through jQuery traversal in jQuery 3.x.\n\t\t\t\tif (!el.querySelectorAll(\":checked\").length) {\n\t\t\t\t\trbuggyQSA.push(\":checked\");\n\t\t\t\t}\n\n\t\t\t\t// Support: Windows 8 Native Apps\n\t\t\t\t// The type and name attributes are restricted during .innerHTML assignment\n\t\t\t\tinput = document.createElement(\"input\");\n\t\t\t\tinput.setAttribute(\"type\", \"hidden\");\n\t\t\t\tel.appendChild(input).setAttribute(\"name\", \"D\");\n\n\t\t\t\t// Support: IE 9 - 11+\n\t\t\t\t// IE's :disabled selector does not pick up the children of disabled fieldsets\n\t\t\t\t// Support: Chrome <=105+, Firefox <=104+, Safari <=15.4+\n\t\t\t\t// In some of the document kinds, these selectors wouldn't work natively.\n\t\t\t\t// This is probably OK but for backwards compatibility we want to maintain\n\t\t\t\t// handling them through jQuery traversal in jQuery 3.x.\n\t\t\t\tdocumentElement.appendChild(el).disabled = true;\n\t\t\t\tif (el.querySelectorAll(\":disabled\").length !== 2) {\n\t\t\t\t\trbuggyQSA.push(\":enabled\", \":disabled\");\n\t\t\t\t}\n\n\t\t\t\t// Support: IE 11+, Edge 15 - 18+\n\t\t\t\t// IE 11/Edge don't find elements on a `[name='']` query in some cases.\n\t\t\t\t// Adding a temporary attribute to the document before the selection works\n\t\t\t\t// around the issue.\n\t\t\t\t// Interestingly, IE 10 & older don't seem to have the issue.\n\t\t\t\tinput = document.createElement(\"input\");\n\t\t\t\tinput.setAttribute(\"name\", \"\");\n\t\t\t\tel.appendChild(input);\n\t\t\t\tif (!el.querySelectorAll(\"[name='']\").length) {\n\t\t\t\t\trbuggyQSA.push(\"\\\\[\" + whitespace + \"*name\" + whitespace + \"*=\" +\n\t\t\t\t\t\twhitespace + \"*(?:''|\\\"\\\")\");\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tif (!support.cssHas) {\n\n\t\t\t\t// Support: Chrome 105 - 110+, Safari 15.4 - 16.3+\n\t\t\t\t// Our regular `try-catch` mechanism fails to detect natively-unsupported\n\t\t\t\t// pseudo-classes inside `:has()` (such as `:has(:contains(\"Foo\"))`)\n\t\t\t\t// in browsers that parse the `:has()` argument as a forgiving selector list.\n\t\t\t\t// https://drafts.csswg.org/selectors/#relational now requires the argument\n\t\t\t\t// to be parsed unforgivingly, but browsers have not yet fully adjusted.\n\t\t\t\trbuggyQSA.push(\":has\");\n\t\t\t}\n\n\t\t\trbuggyQSA = rbuggyQSA.length && new RegExp(rbuggyQSA.join(\"|\"));\n\n\t\t\t/* Sorting\n\t\t\t---------------------------------------------------------------------- */\n\n\t\t\t// Document order sorting\n\t\t\tsortOrder = function (a, b) {\n\n\t\t\t\t// Flag for duplicate removal\n\t\t\t\tif (a === b) {\n\t\t\t\t\thasDuplicate = true;\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\n\t\t\t\t// Sort on method existence if only one input has compareDocumentPosition\n\t\t\t\tvar compare = !a.compareDocumentPosition - !b.compareDocumentPosition;\n\t\t\t\tif (compare) {\n\t\t\t\t\treturn compare;\n\t\t\t\t}\n\n\t\t\t\t// Calculate position if both inputs belong to the same document\n\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\tcompare = (a.ownerDocument || a) == (b.ownerDocument || b) ?\n\t\t\t\t\ta.compareDocumentPosition(b) :\n\n\t\t\t\t\t// Otherwise we know they are disconnected\n\t\t\t\t\t1;\n\n\t\t\t\t// Disconnected nodes\n\t\t\t\tif (compare & 1 ||\n\t\t\t\t\t(!support.sortDetached && b.compareDocumentPosition(a) === compare)) {\n\n\t\t\t\t\t// Choose the first element that is related to our preferred document\n\t\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\tif (a === document || a.ownerDocument == preferredDoc &&\n\t\t\t\t\t\tfind.contains(preferredDoc, a)) {\n\t\t\t\t\t\treturn -1;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\tif (b === document || b.ownerDocument == preferredDoc &&\n\t\t\t\t\t\tfind.contains(preferredDoc, b)) {\n\t\t\t\t\t\treturn 1;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Maintain original order\n\t\t\t\t\treturn sortInput ?\n\t\t\t\t\t\t(indexOf.call(sortInput, a) - indexOf.call(sortInput, b)) :\n\t\t\t\t\t\t0;\n\t\t\t\t}\n\n\t\t\t\treturn compare & 4 ? -1 : 1;\n\t\t\t};\n\n\t\t\treturn document;\n\t\t}\n\n\t\tfind.matches = function (expr, elements) {\n\t\t\treturn find(expr, null, null, elements);\n\t\t};\n\n\t\tfind.matchesSelector = function (elem, expr) {\n\t\t\tsetDocument(elem);\n\n\t\t\tif (documentIsHTML &&\n\t\t\t\t!nonnativeSelectorCache[expr + \" \"] &&\n\t\t\t\t(!rbuggyQSA || !rbuggyQSA.test(expr))) {\n\n\t\t\t\ttry {\n\t\t\t\t\tvar ret = matches.call(elem, expr);\n\n\t\t\t\t\t// IE 9's matchesSelector returns false on disconnected nodes\n\t\t\t\t\tif (ret || support.disconnectedMatch ||\n\n\t\t\t\t\t\t// As well, disconnected nodes are said to be in a document\n\t\t\t\t\t\t// fragment in IE 9\n\t\t\t\t\t\telem.document && elem.document.nodeType !== 11) {\n\t\t\t\t\t\treturn ret;\n\t\t\t\t\t}\n\t\t\t\t} catch (e) {\n\t\t\t\t\tnonnativeSelectorCache(expr, true);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn find(expr, document, null, [elem]).length > 0;\n\t\t};\n\n\t\tfind.contains = function (context, elem) {\n\n\t\t\t// Set document vars if needed\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tif ((context.ownerDocument || context) != document) {\n\t\t\t\tsetDocument(context);\n\t\t\t}\n\t\t\treturn jQuery.contains(context, elem);\n\t\t};\n\n\n\t\tfind.attr = function (elem, name) {\n\n\t\t\t// Set document vars if needed\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tif ((elem.ownerDocument || elem) != document) {\n\t\t\t\tsetDocument(elem);\n\t\t\t}\n\n\t\t\tvar fn = Expr.attrHandle[name.toLowerCase()],\n\n\t\t\t\t// Don't get fooled by Object.prototype properties (see trac-13807)\n\t\t\t\tval = fn && hasOwn.call(Expr.attrHandle, name.toLowerCase()) ?\n\t\t\t\t\tfn(elem, name, !documentIsHTML) :\n\t\t\t\t\tundefined;\n\n\t\t\tif (val !== undefined) {\n\t\t\t\treturn val;\n\t\t\t}\n\n\t\t\treturn elem.getAttribute(name);\n\t\t};\n\n\t\tfind.error = function (msg) {\n\t\t\tthrow new Error(\"Syntax error, unrecognized expression: \" + msg);\n\t\t};\n\n\t\t/**\n\t\t * Document sorting and removing duplicates\n\t\t * @param {ArrayLike} results\n\t\t */\n\t\tjQuery.uniqueSort = function (results) {\n\t\t\tvar elem,\n\t\t\t\tduplicates = [],\n\t\t\t\tj = 0,\n\t\t\t\ti = 0;\n\n\t\t\t// Unless we *know* we can detect duplicates, assume their presence\n\t\t\t//\n\t\t\t// Support: Android <=4.0+\n\t\t\t// Testing for detecting duplicates is unpredictable so instead assume we can't\n\t\t\t// depend on duplicate detection in all browsers without a stable sort.\n\t\t\thasDuplicate = !support.sortStable;\n\t\t\tsortInput = !support.sortStable && slice.call(results, 0);\n\t\t\tsort.call(results, sortOrder);\n\n\t\t\tif (hasDuplicate) {\n\t\t\t\twhile ((elem = results[i++])) {\n\t\t\t\t\tif (elem === results[i]) {\n\t\t\t\t\t\tj = duplicates.push(i);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\twhile (j--) {\n\t\t\t\t\tsplice.call(results, duplicates[j], 1);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Clear input after sorting to release objects\n\t\t\t// See https://github.com/jquery/sizzle/pull/225\n\t\t\tsortInput = null;\n\n\t\t\treturn results;\n\t\t};\n\n\t\tjQuery.fn.uniqueSort = function () {\n\t\t\treturn this.pushStack(jQuery.uniqueSort(slice.apply(this)));\n\t\t};\n\n\t\tExpr = jQuery.expr = {\n\n\t\t\t// Can be adjusted by the user\n\t\t\tcacheLength: 50,\n\n\t\t\tcreatePseudo: markFunction,\n\n\t\t\tmatch: matchExpr,\n\n\t\t\tattrHandle: {},\n\n\t\t\tfind: {},\n\n\t\t\trelative: {\n\t\t\t\t\">\": { dir: \"parentNode\", first: true },\n\t\t\t\t\" \": { dir: \"parentNode\" },\n\t\t\t\t\"+\": { dir: \"previousSibling\", first: true },\n\t\t\t\t\"~\": { dir: \"previousSibling\" }\n\t\t\t},\n\n\t\t\tpreFilter: {\n\t\t\t\tATTR: function (match) {\n\t\t\t\t\tmatch[1] = match[1].replace(runescape, funescape);\n\n\t\t\t\t\t// Move the given value to match[3] whether quoted or unquoted\n\t\t\t\t\tmatch[3] = (match[3] || match[4] || match[5] || \"\")\n\t\t\t\t\t\t.replace(runescape, funescape);\n\n\t\t\t\t\tif (match[2] === \"~=\") {\n\t\t\t\t\t\tmatch[3] = \" \" + match[3] + \" \";\n\t\t\t\t\t}\n\n\t\t\t\t\treturn match.slice(0, 4);\n\t\t\t\t},\n\n\t\t\t\tCHILD: function (match) {\n\n\t\t\t\t\t/* matches from matchExpr[\"CHILD\"]\n\t\t\t\t\t\t1 type (only|nth|...)\n\t\t\t\t\t\t2 what (child|of-type)\n\t\t\t\t\t\t3 argument (even|odd|\\d*|\\d*n([+-]\\d+)?|...)\n\t\t\t\t\t\t4 xn-component of xn+y argument ([+-]?\\d*n|)\n\t\t\t\t\t\t5 sign of xn-component\n\t\t\t\t\t\t6 x of xn-component\n\t\t\t\t\t\t7 sign of y-component\n\t\t\t\t\t\t8 y of y-component\n\t\t\t\t\t*/\n\t\t\t\t\tmatch[1] = match[1].toLowerCase();\n\n\t\t\t\t\tif (match[1].slice(0, 3) === \"nth\") {\n\n\t\t\t\t\t\t// nth-* requires argument\n\t\t\t\t\t\tif (!match[3]) {\n\t\t\t\t\t\t\tfind.error(match[0]);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// numeric x and y parameters for Expr.filter.CHILD\n\t\t\t\t\t\t// remember that false/true cast respectively to 0/1\n\t\t\t\t\t\tmatch[4] = +(match[4] ?\n\t\t\t\t\t\t\tmatch[5] + (match[6] || 1) :\n\t\t\t\t\t\t\t2 * (match[3] === \"even\" || match[3] === \"odd\")\n\t\t\t\t\t\t);\n\t\t\t\t\t\tmatch[5] = +((match[7] + match[8]) || match[3] === \"odd\");\n\n\t\t\t\t\t\t// other types prohibit arguments\n\t\t\t\t\t} else if (match[3]) {\n\t\t\t\t\t\tfind.error(match[0]);\n\t\t\t\t\t}\n\n\t\t\t\t\treturn match;\n\t\t\t\t},\n\n\t\t\t\tPSEUDO: function (match) {\n\t\t\t\t\tvar excess,\n\t\t\t\t\t\tunquoted = !match[6] && match[2];\n\n\t\t\t\t\tif (matchExpr.CHILD.test(match[0])) {\n\t\t\t\t\t\treturn null;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Accept quoted arguments as-is\n\t\t\t\t\tif (match[3]) {\n\t\t\t\t\t\tmatch[2] = match[4] || match[5] || \"\";\n\n\t\t\t\t\t\t// Strip excess characters from unquoted arguments\n\t\t\t\t\t} else if (unquoted && rpseudo.test(unquoted) &&\n\n\t\t\t\t\t\t// Get excess from tokenize (recursively)\n\t\t\t\t\t\t(excess = tokenize(unquoted, true)) &&\n\n\t\t\t\t\t\t// advance to the next closing parenthesis\n\t\t\t\t\t\t(excess = unquoted.indexOf(\")\", unquoted.length - excess) - unquoted.length)) {\n\n\t\t\t\t\t\t// excess is a negative index\n\t\t\t\t\t\tmatch[0] = match[0].slice(0, excess);\n\t\t\t\t\t\tmatch[2] = unquoted.slice(0, excess);\n\t\t\t\t\t}\n\n\t\t\t\t\t// Return only captures needed by the pseudo filter method (type and argument)\n\t\t\t\t\treturn match.slice(0, 3);\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tfilter: {\n\n\t\t\t\tTAG: function (nodeNameSelector) {\n\t\t\t\t\tvar expectedNodeName = nodeNameSelector.replace(runescape, funescape).toLowerCase();\n\t\t\t\t\treturn nodeNameSelector === \"*\" ?\n\t\t\t\t\t\tfunction () {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t} :\n\t\t\t\t\t\tfunction (elem) {\n\t\t\t\t\t\t\treturn nodeName(elem, expectedNodeName);\n\t\t\t\t\t\t};\n\t\t\t\t},\n\n\t\t\t\tCLASS: function (className) {\n\t\t\t\t\tvar pattern = classCache[className + \" \"];\n\n\t\t\t\t\treturn pattern ||\n\t\t\t\t\t\t(pattern = new RegExp(\"(^|\" + whitespace + \")\" + className +\n\t\t\t\t\t\t\t\"(\" + whitespace + \"|$)\")) &&\n\t\t\t\t\t\tclassCache(className, function (elem) {\n\t\t\t\t\t\t\treturn pattern.test(\n\t\t\t\t\t\t\t\ttypeof elem.className === \"string\" && elem.className ||\n\t\t\t\t\t\t\t\ttypeof elem.getAttribute !== \"undefined\" &&\n\t\t\t\t\t\t\t\telem.getAttribute(\"class\") ||\n\t\t\t\t\t\t\t\t\"\"\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t});\n\t\t\t\t},\n\n\t\t\t\tATTR: function (name, operator, check) {\n\t\t\t\t\treturn function (elem) {\n\t\t\t\t\t\tvar result = find.attr(elem, name);\n\n\t\t\t\t\t\tif (result == null) {\n\t\t\t\t\t\t\treturn operator === \"!=\";\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!operator) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tresult += \"\";\n\n\t\t\t\t\t\tif (operator === \"=\") {\n\t\t\t\t\t\t\treturn result === check;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (operator === \"!=\") {\n\t\t\t\t\t\t\treturn result !== check;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (operator === \"^=\") {\n\t\t\t\t\t\t\treturn check && result.indexOf(check) === 0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (operator === \"*=\") {\n\t\t\t\t\t\t\treturn check && result.indexOf(check) > -1;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (operator === \"$=\") {\n\t\t\t\t\t\t\treturn check && result.slice(-check.length) === check;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (operator === \"~=\") {\n\t\t\t\t\t\t\treturn (\" \" + result.replace(rwhitespace, \" \") + \" \")\n\t\t\t\t\t\t\t\t.indexOf(check) > -1;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (operator === \"|=\") {\n\t\t\t\t\t\t\treturn result === check || result.slice(0, check.length + 1) === check + \"-\";\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t};\n\t\t\t\t},\n\n\t\t\t\tCHILD: function (type, what, _argument, first, last) {\n\t\t\t\t\tvar simple = type.slice(0, 3) !== \"nth\",\n\t\t\t\t\t\tforward = type.slice(-4) !== \"last\",\n\t\t\t\t\t\tofType = what === \"of-type\";\n\n\t\t\t\t\treturn first === 1 && last === 0 ?\n\n\t\t\t\t\t\t// Shortcut for :nth-*(n)\n\t\t\t\t\t\tfunction (elem) {\n\t\t\t\t\t\t\treturn !!elem.parentNode;\n\t\t\t\t\t\t} :\n\n\t\t\t\t\t\tfunction (elem, _context, xml) {\n\t\t\t\t\t\t\tvar cache, outerCache, node, nodeIndex, start,\n\t\t\t\t\t\t\t\tdir = simple !== forward ? \"nextSibling\" : \"previousSibling\",\n\t\t\t\t\t\t\t\tparent = elem.parentNode,\n\t\t\t\t\t\t\t\tname = ofType && elem.nodeName.toLowerCase(),\n\t\t\t\t\t\t\t\tuseCache = !xml && !ofType,\n\t\t\t\t\t\t\t\tdiff = false;\n\n\t\t\t\t\t\t\tif (parent) {\n\n\t\t\t\t\t\t\t\t// :(first|last|only)-(child|of-type)\n\t\t\t\t\t\t\t\tif (simple) {\n\t\t\t\t\t\t\t\t\twhile (dir) {\n\t\t\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\t\t\twhile ((node = node[dir])) {\n\t\t\t\t\t\t\t\t\t\t\tif (ofType ?\n\t\t\t\t\t\t\t\t\t\t\t\tnodeName(node, name) :\n\t\t\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1) {\n\n\t\t\t\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t// Reverse direction for :only-* (if we haven't yet done so)\n\t\t\t\t\t\t\t\t\t\tstart = dir = type === \"only\" && !start && \"nextSibling\";\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tstart = [forward ? parent.firstChild : parent.lastChild];\n\n\t\t\t\t\t\t\t\t// non-xml :nth-child(...) stores cache data on `parent`\n\t\t\t\t\t\t\t\tif (forward && useCache) {\n\n\t\t\t\t\t\t\t\t\t// Seek `elem` from a previously-cached index\n\t\t\t\t\t\t\t\t\touterCache = parent[expando] || (parent[expando] = {});\n\t\t\t\t\t\t\t\t\tcache = outerCache[type] || [];\n\t\t\t\t\t\t\t\t\tnodeIndex = cache[0] === dirruns && cache[1];\n\t\t\t\t\t\t\t\t\tdiff = nodeIndex && cache[2];\n\t\t\t\t\t\t\t\t\tnode = nodeIndex && parent.childNodes[nodeIndex];\n\n\t\t\t\t\t\t\t\t\twhile ((node = ++nodeIndex && node && node[dir] ||\n\n\t\t\t\t\t\t\t\t\t\t// Fallback to seeking `elem` from the start\n\t\t\t\t\t\t\t\t\t\t(diff = nodeIndex = 0) || start.pop())) {\n\n\t\t\t\t\t\t\t\t\t\t// When found, cache indexes on `parent` and break\n\t\t\t\t\t\t\t\t\t\tif (node.nodeType === 1 && ++diff && node === elem) {\n\t\t\t\t\t\t\t\t\t\t\touterCache[type] = [dirruns, nodeIndex, diff];\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t// Use previously-cached element index if available\n\t\t\t\t\t\t\t\t\tif (useCache) {\n\t\t\t\t\t\t\t\t\t\touterCache = elem[expando] || (elem[expando] = {});\n\t\t\t\t\t\t\t\t\t\tcache = outerCache[type] || [];\n\t\t\t\t\t\t\t\t\t\tnodeIndex = cache[0] === dirruns && cache[1];\n\t\t\t\t\t\t\t\t\t\tdiff = nodeIndex;\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// xml :nth-child(...)\n\t\t\t\t\t\t\t\t\t// or :nth-last-child(...) or :nth(-last)?-of-type(...)\n\t\t\t\t\t\t\t\t\tif (diff === false) {\n\n\t\t\t\t\t\t\t\t\t\t// Use the same loop as above to seek `elem` from the start\n\t\t\t\t\t\t\t\t\t\twhile ((node = ++nodeIndex && node && node[dir] ||\n\t\t\t\t\t\t\t\t\t\t\t(diff = nodeIndex = 0) || start.pop())) {\n\n\t\t\t\t\t\t\t\t\t\t\tif ((ofType ?\n\t\t\t\t\t\t\t\t\t\t\t\tnodeName(node, name) :\n\t\t\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1) &&\n\t\t\t\t\t\t\t\t\t\t\t\t++diff) {\n\n\t\t\t\t\t\t\t\t\t\t\t\t// Cache the index of each encountered element\n\t\t\t\t\t\t\t\t\t\t\t\tif (useCache) {\n\t\t\t\t\t\t\t\t\t\t\t\t\touterCache = node[expando] ||\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t(node[expando] = {});\n\t\t\t\t\t\t\t\t\t\t\t\t\touterCache[type] = [dirruns, diff];\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\tif (node === elem) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t// Incorporate the offset, then check against cycle size\n\t\t\t\t\t\t\t\tdiff -= last;\n\t\t\t\t\t\t\t\treturn diff === first || (diff % first === 0 && diff / first >= 0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\t\t\t\t},\n\n\t\t\t\tPSEUDO: function (pseudo, argument) {\n\n\t\t\t\t\t// pseudo-class names are case-insensitive\n\t\t\t\t\t// https://www.w3.org/TR/selectors/#pseudo-classes\n\t\t\t\t\t// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters\n\t\t\t\t\t// Remember that setFilters inherits from pseudos\n\t\t\t\t\tvar args,\n\t\t\t\t\t\tfn = Expr.pseudos[pseudo] || Expr.setFilters[pseudo.toLowerCase()] ||\n\t\t\t\t\t\t\tfind.error(\"unsupported pseudo: \" + pseudo);\n\n\t\t\t\t\t// The user may use createPseudo to indicate that\n\t\t\t\t\t// arguments are needed to create the filter function\n\t\t\t\t\t// just as jQuery does\n\t\t\t\t\tif (fn[expando]) {\n\t\t\t\t\t\treturn fn(argument);\n\t\t\t\t\t}\n\n\t\t\t\t\t// But maintain support for old signatures\n\t\t\t\t\tif (fn.length > 1) {\n\t\t\t\t\t\targs = [pseudo, pseudo, \"\", argument];\n\t\t\t\t\t\treturn Expr.setFilters.hasOwnProperty(pseudo.toLowerCase()) ?\n\t\t\t\t\t\t\tmarkFunction(function (seed, matches) {\n\t\t\t\t\t\t\t\tvar idx,\n\t\t\t\t\t\t\t\t\tmatched = fn(seed, argument),\n\t\t\t\t\t\t\t\t\ti = matched.length;\n\t\t\t\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\t\t\t\tidx = indexOf.call(seed, matched[i]);\n\t\t\t\t\t\t\t\t\tseed[idx] = !(matches[idx] = matched[i]);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}) :\n\t\t\t\t\t\t\tfunction (elem) {\n\t\t\t\t\t\t\t\treturn fn(elem, 0, args);\n\t\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\treturn fn;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tpseudos: {\n\n\t\t\t\t// Potentially complex pseudos\n\t\t\t\tnot: markFunction(function (selector) {\n\n\t\t\t\t\t// Trim the selector passed to compile\n\t\t\t\t\t// to avoid treating leading and trailing\n\t\t\t\t\t// spaces as combinators\n\t\t\t\t\tvar input = [],\n\t\t\t\t\t\tresults = [],\n\t\t\t\t\t\tmatcher = compile(selector.replace(rtrimCSS, \"$1\"));\n\n\t\t\t\t\treturn matcher[expando] ?\n\t\t\t\t\t\tmarkFunction(function (seed, matches, _context, xml) {\n\t\t\t\t\t\t\tvar elem,\n\t\t\t\t\t\t\t\tunmatched = matcher(seed, null, xml, []),\n\t\t\t\t\t\t\t\ti = seed.length;\n\n\t\t\t\t\t\t\t// Match elements unmatched by `matcher`\n\t\t\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\t\t\tif ((elem = unmatched[i])) {\n\t\t\t\t\t\t\t\t\tseed[i] = !(matches[i] = elem);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}) :\n\t\t\t\t\t\tfunction (elem, _context, xml) {\n\t\t\t\t\t\t\tinput[0] = elem;\n\t\t\t\t\t\t\tmatcher(input, null, xml, results);\n\n\t\t\t\t\t\t\t// Don't keep the element\n\t\t\t\t\t\t\t// (see https://github.com/jquery/sizzle/issues/299)\n\t\t\t\t\t\t\tinput[0] = null;\n\t\t\t\t\t\t\treturn !results.pop();\n\t\t\t\t\t\t};\n\t\t\t\t}),\n\n\t\t\t\thas: markFunction(function (selector) {\n\t\t\t\t\treturn function (elem) {\n\t\t\t\t\t\treturn find(selector, elem).length > 0;\n\t\t\t\t\t};\n\t\t\t\t}),\n\n\t\t\t\tcontains: markFunction(function (text) {\n\t\t\t\t\ttext = text.replace(runescape, funescape);\n\t\t\t\t\treturn function (elem) {\n\t\t\t\t\t\treturn (elem.textContent || jQuery.text(elem)).indexOf(text) > -1;\n\t\t\t\t\t};\n\t\t\t\t}),\n\n\t\t\t\t// \"Whether an element is represented by a :lang() selector\n\t\t\t\t// is based solely on the element's language value\n\t\t\t\t// being equal to the identifier C,\n\t\t\t\t// or beginning with the identifier C immediately followed by \"-\".\n\t\t\t\t// The matching of C against the element's language value is performed case-insensitively.\n\t\t\t\t// The identifier C does not have to be a valid language name.\"\n\t\t\t\t// https://www.w3.org/TR/selectors/#lang-pseudo\n\t\t\t\tlang: markFunction(function (lang) {\n\n\t\t\t\t\t// lang value must be a valid identifier\n\t\t\t\t\tif (!ridentifier.test(lang || \"\")) {\n\t\t\t\t\t\tfind.error(\"unsupported lang: \" + lang);\n\t\t\t\t\t}\n\t\t\t\t\tlang = lang.replace(runescape, funescape).toLowerCase();\n\t\t\t\t\treturn function (elem) {\n\t\t\t\t\t\tvar elemLang;\n\t\t\t\t\t\tdo {\n\t\t\t\t\t\t\tif ((elemLang = documentIsHTML ?\n\t\t\t\t\t\t\t\telem.lang :\n\t\t\t\t\t\t\t\telem.getAttribute(\"xml:lang\") || elem.getAttribute(\"lang\"))) {\n\n\t\t\t\t\t\t\t\telemLang = elemLang.toLowerCase();\n\t\t\t\t\t\t\t\treturn elemLang === lang || elemLang.indexOf(lang + \"-\") === 0;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} while ((elem = elem.parentNode) && elem.nodeType === 1);\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t};\n\t\t\t\t}),\n\n\t\t\t\t// Miscellaneous\n\t\t\t\ttarget: function (elem) {\n\t\t\t\t\tvar hash = window.location && window.location.hash;\n\t\t\t\t\treturn hash && hash.slice(1) === elem.id;\n\t\t\t\t},\n\n\t\t\t\troot: function (elem) {\n\t\t\t\t\treturn elem === documentElement;\n\t\t\t\t},\n\n\t\t\t\tfocus: function (elem) {\n\t\t\t\t\treturn elem === safeActiveElement() &&\n\t\t\t\t\t\tdocument.hasFocus() &&\n\t\t\t\t\t\t!!(elem.type || elem.href || ~elem.tabIndex);\n\t\t\t\t},\n\n\t\t\t\t// Boolean properties\n\t\t\t\tenabled: createDisabledPseudo(false),\n\t\t\t\tdisabled: createDisabledPseudo(true),\n\n\t\t\t\tchecked: function (elem) {\n\n\t\t\t\t\t// In CSS3, :checked should return both checked and selected elements\n\t\t\t\t\t// https://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\t\t\treturn (nodeName(elem, \"input\") && !!elem.checked) ||\n\t\t\t\t\t\t(nodeName(elem, \"option\") && !!elem.selected);\n\t\t\t\t},\n\n\t\t\t\tselected: function (elem) {\n\n\t\t\t\t\t// Support: IE <=11+\n\t\t\t\t\t// Accessing the selectedIndex property\n\t\t\t\t\t// forces the browser to treat the default option as\n\t\t\t\t\t// selected when in an optgroup.\n\t\t\t\t\tif (elem.parentNode) {\n\t\t\t\t\t\t// eslint-disable-next-line no-unused-expressions\n\t\t\t\t\t\telem.parentNode.selectedIndex;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn elem.selected === true;\n\t\t\t\t},\n\n\t\t\t\t// Contents\n\t\t\t\tempty: function (elem) {\n\n\t\t\t\t\t// https://www.w3.org/TR/selectors/#empty-pseudo\n\t\t\t\t\t// :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),\n\t\t\t\t\t//   but not by others (comment: 8; processing instruction: 7; etc.)\n\t\t\t\t\t// nodeType < 6 works because attributes (2) do not appear as children\n\t\t\t\t\tfor (elem = elem.firstChild; elem; elem = elem.nextSibling) {\n\t\t\t\t\t\tif (elem.nodeType < 6) {\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn true;\n\t\t\t\t},\n\n\t\t\t\tparent: function (elem) {\n\t\t\t\t\treturn !Expr.pseudos.empty(elem);\n\t\t\t\t},\n\n\t\t\t\t// Element/input types\n\t\t\t\theader: function (elem) {\n\t\t\t\t\treturn rheader.test(elem.nodeName);\n\t\t\t\t},\n\n\t\t\t\tinput: function (elem) {\n\t\t\t\t\treturn rinputs.test(elem.nodeName);\n\t\t\t\t},\n\n\t\t\t\tbutton: function (elem) {\n\t\t\t\t\treturn nodeName(elem, \"input\") && elem.type === \"button\" ||\n\t\t\t\t\t\tnodeName(elem, \"button\");\n\t\t\t\t},\n\n\t\t\t\ttext: function (elem) {\n\t\t\t\t\tvar attr;\n\t\t\t\t\treturn nodeName(elem, \"input\") && elem.type === \"text\" &&\n\n\t\t\t\t\t\t// Support: IE <10 only\n\t\t\t\t\t\t// New HTML5 attribute values (e.g., \"search\") appear\n\t\t\t\t\t\t// with elem.type === \"text\"\n\t\t\t\t\t\t((attr = elem.getAttribute(\"type\")) == null ||\n\t\t\t\t\t\t\tattr.toLowerCase() === \"text\");\n\t\t\t\t},\n\n\t\t\t\t// Position-in-collection\n\t\t\t\tfirst: createPositionalPseudo(function () {\n\t\t\t\t\treturn [0];\n\t\t\t\t}),\n\n\t\t\t\tlast: createPositionalPseudo(function (_matchIndexes, length) {\n\t\t\t\t\treturn [length - 1];\n\t\t\t\t}),\n\n\t\t\t\teq: createPositionalPseudo(function (_matchIndexes, length, argument) {\n\t\t\t\t\treturn [argument < 0 ? argument + length : argument];\n\t\t\t\t}),\n\n\t\t\t\teven: createPositionalPseudo(function (matchIndexes, length) {\n\t\t\t\t\tvar i = 0;\n\t\t\t\t\tfor (; i < length; i += 2) {\n\t\t\t\t\t\tmatchIndexes.push(i);\n\t\t\t\t\t}\n\t\t\t\t\treturn matchIndexes;\n\t\t\t\t}),\n\n\t\t\t\todd: createPositionalPseudo(function (matchIndexes, length) {\n\t\t\t\t\tvar i = 1;\n\t\t\t\t\tfor (; i < length; i += 2) {\n\t\t\t\t\t\tmatchIndexes.push(i);\n\t\t\t\t\t}\n\t\t\t\t\treturn matchIndexes;\n\t\t\t\t}),\n\n\t\t\t\tlt: createPositionalPseudo(function (matchIndexes, length, argument) {\n\t\t\t\t\tvar i;\n\n\t\t\t\t\tif (argument < 0) {\n\t\t\t\t\t\ti = argument + length;\n\t\t\t\t\t} else if (argument > length) {\n\t\t\t\t\t\ti = length;\n\t\t\t\t\t} else {\n\t\t\t\t\t\ti = argument;\n\t\t\t\t\t}\n\n\t\t\t\t\tfor (; --i >= 0;) {\n\t\t\t\t\t\tmatchIndexes.push(i);\n\t\t\t\t\t}\n\t\t\t\t\treturn matchIndexes;\n\t\t\t\t}),\n\n\t\t\t\tgt: createPositionalPseudo(function (matchIndexes, length, argument) {\n\t\t\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\t\t\tfor (; ++i < length;) {\n\t\t\t\t\t\tmatchIndexes.push(i);\n\t\t\t\t\t}\n\t\t\t\t\treturn matchIndexes;\n\t\t\t\t})\n\t\t\t}\n\t\t};\n\n\t\tExpr.pseudos.nth = Expr.pseudos.eq;\n\n\t\t// Add button/input type pseudos\n\t\tfor (i in { radio: true, checkbox: true, file: true, password: true, image: true }) {\n\t\t\tExpr.pseudos[i] = createInputPseudo(i);\n\t\t}\n\t\tfor (i in { submit: true, reset: true }) {\n\t\t\tExpr.pseudos[i] = createButtonPseudo(i);\n\t\t}\n\n\t\t// Easy API for creating new setFilters\n\t\tfunction setFilters() { }\n\t\tsetFilters.prototype = Expr.filters = Expr.pseudos;\n\t\tExpr.setFilters = new setFilters();\n\n\t\tfunction tokenize(selector, parseOnly) {\n\t\t\tvar matched, match, tokens, type,\n\t\t\t\tsoFar, groups, preFilters,\n\t\t\t\tcached = tokenCache[selector + \" \"];\n\n\t\t\tif (cached) {\n\t\t\t\treturn parseOnly ? 0 : cached.slice(0);\n\t\t\t}\n\n\t\t\tsoFar = selector;\n\t\t\tgroups = [];\n\t\t\tpreFilters = Expr.preFilter;\n\n\t\t\twhile (soFar) {\n\n\t\t\t\t// Comma and first run\n\t\t\t\tif (!matched || (match = rcomma.exec(soFar))) {\n\t\t\t\t\tif (match) {\n\n\t\t\t\t\t\t// Don't consume trailing commas as valid\n\t\t\t\t\t\tsoFar = soFar.slice(match[0].length) || soFar;\n\t\t\t\t\t}\n\t\t\t\t\tgroups.push((tokens = []));\n\t\t\t\t}\n\n\t\t\t\tmatched = false;\n\n\t\t\t\t// Combinators\n\t\t\t\tif ((match = rleadingCombinator.exec(soFar))) {\n\t\t\t\t\tmatched = match.shift();\n\t\t\t\t\ttokens.push({\n\t\t\t\t\t\tvalue: matched,\n\n\t\t\t\t\t\t// Cast descendant combinators to space\n\t\t\t\t\t\ttype: match[0].replace(rtrimCSS, \" \")\n\t\t\t\t\t});\n\t\t\t\t\tsoFar = soFar.slice(matched.length);\n\t\t\t\t}\n\n\t\t\t\t// Filters\n\t\t\t\tfor (type in Expr.filter) {\n\t\t\t\t\tif ((match = matchExpr[type].exec(soFar)) && (!preFilters[type] ||\n\t\t\t\t\t\t(match = preFilters[type](match)))) {\n\t\t\t\t\t\tmatched = match.shift();\n\t\t\t\t\t\ttokens.push({\n\t\t\t\t\t\t\tvalue: matched,\n\t\t\t\t\t\t\ttype: type,\n\t\t\t\t\t\t\tmatches: match\n\t\t\t\t\t\t});\n\t\t\t\t\t\tsoFar = soFar.slice(matched.length);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (!matched) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Return the length of the invalid excess\n\t\t\t// if we're just parsing\n\t\t\t// Otherwise, throw an error or return tokens\n\t\t\tif (parseOnly) {\n\t\t\t\treturn soFar.length;\n\t\t\t}\n\n\t\t\treturn soFar ?\n\t\t\t\tfind.error(selector) :\n\n\t\t\t\t// Cache the tokens\n\t\t\t\ttokenCache(selector, groups).slice(0);\n\t\t}\n\n\t\tfunction toSelector(tokens) {\n\t\t\tvar i = 0,\n\t\t\t\tlen = tokens.length,\n\t\t\t\tselector = \"\";\n\t\t\tfor (; i < len; i++) {\n\t\t\t\tselector += tokens[i].value;\n\t\t\t}\n\t\t\treturn selector;\n\t\t}\n\n\t\tfunction addCombinator(matcher, combinator, base) {\n\t\t\tvar dir = combinator.dir,\n\t\t\t\tskip = combinator.next,\n\t\t\t\tkey = skip || dir,\n\t\t\t\tcheckNonElements = base && key === \"parentNode\",\n\t\t\t\tdoneName = done++;\n\n\t\t\treturn combinator.first ?\n\n\t\t\t\t// Check against closest ancestor/preceding element\n\t\t\t\tfunction (elem, context, xml) {\n\t\t\t\t\twhile ((elem = elem[dir])) {\n\t\t\t\t\t\tif (elem.nodeType === 1 || checkNonElements) {\n\t\t\t\t\t\t\treturn matcher(elem, context, xml);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn false;\n\t\t\t\t} :\n\n\t\t\t\t// Check against all ancestor/preceding elements\n\t\t\t\tfunction (elem, context, xml) {\n\t\t\t\t\tvar oldCache, outerCache,\n\t\t\t\t\t\tnewCache = [dirruns, doneName];\n\n\t\t\t\t\t// We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching\n\t\t\t\t\tif (xml) {\n\t\t\t\t\t\twhile ((elem = elem[dir])) {\n\t\t\t\t\t\t\tif (elem.nodeType === 1 || checkNonElements) {\n\t\t\t\t\t\t\t\tif (matcher(elem, context, xml)) {\n\t\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\twhile ((elem = elem[dir])) {\n\t\t\t\t\t\t\tif (elem.nodeType === 1 || checkNonElements) {\n\t\t\t\t\t\t\t\touterCache = elem[expando] || (elem[expando] = {});\n\n\t\t\t\t\t\t\t\tif (skip && nodeName(elem, skip)) {\n\t\t\t\t\t\t\t\t\telem = elem[dir] || elem;\n\t\t\t\t\t\t\t\t} else if ((oldCache = outerCache[key]) &&\n\t\t\t\t\t\t\t\t\toldCache[0] === dirruns && oldCache[1] === doneName) {\n\n\t\t\t\t\t\t\t\t\t// Assign to newCache so results back-propagate to previous elements\n\t\t\t\t\t\t\t\t\treturn (newCache[2] = oldCache[2]);\n\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t// Reuse newcache so results back-propagate to previous elements\n\t\t\t\t\t\t\t\t\touterCache[key] = newCache;\n\n\t\t\t\t\t\t\t\t\t// A match means we're done; a fail means we have to keep checking\n\t\t\t\t\t\t\t\t\tif ((newCache[2] = matcher(elem, context, xml))) {\n\t\t\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn false;\n\t\t\t\t};\n\t\t}\n\n\t\tfunction elementMatcher(matchers) {\n\t\t\treturn matchers.length > 1 ?\n\t\t\t\tfunction (elem, context, xml) {\n\t\t\t\t\tvar i = matchers.length;\n\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\tif (!matchers[i](elem, context, xml)) {\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn true;\n\t\t\t\t} :\n\t\t\t\tmatchers[0];\n\t\t}\n\n\t\tfunction multipleContexts(selector, contexts, results) {\n\t\t\tvar i = 0,\n\t\t\t\tlen = contexts.length;\n\t\t\tfor (; i < len; i++) {\n\t\t\t\tfind(selector, contexts[i], results);\n\t\t\t}\n\t\t\treturn results;\n\t\t}\n\n\t\tfunction condense(unmatched, map, filter, context, xml) {\n\t\t\tvar elem,\n\t\t\t\tnewUnmatched = [],\n\t\t\t\ti = 0,\n\t\t\t\tlen = unmatched.length,\n\t\t\t\tmapped = map != null;\n\n\t\t\tfor (; i < len; i++) {\n\t\t\t\tif ((elem = unmatched[i])) {\n\t\t\t\t\tif (!filter || filter(elem, context, xml)) {\n\t\t\t\t\t\tnewUnmatched.push(elem);\n\t\t\t\t\t\tif (mapped) {\n\t\t\t\t\t\t\tmap.push(i);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn newUnmatched;\n\t\t}\n\n\t\tfunction setMatcher(preFilter, selector, matcher, postFilter, postFinder, postSelector) {\n\t\t\tif (postFilter && !postFilter[expando]) {\n\t\t\t\tpostFilter = setMatcher(postFilter);\n\t\t\t}\n\t\t\tif (postFinder && !postFinder[expando]) {\n\t\t\t\tpostFinder = setMatcher(postFinder, postSelector);\n\t\t\t}\n\t\t\treturn markFunction(function (seed, results, context, xml) {\n\t\t\t\tvar temp, i, elem, matcherOut,\n\t\t\t\t\tpreMap = [],\n\t\t\t\t\tpostMap = [],\n\t\t\t\t\tpreexisting = results.length,\n\n\t\t\t\t\t// Get initial elements from seed or context\n\t\t\t\t\telems = seed ||\n\t\t\t\t\t\tmultipleContexts(selector || \"*\",\n\t\t\t\t\t\t\tcontext.nodeType ? [context] : context, []),\n\n\t\t\t\t\t// Prefilter to get matcher input, preserving a map for seed-results synchronization\n\t\t\t\t\tmatcherIn = preFilter && (seed || !selector) ?\n\t\t\t\t\t\tcondense(elems, preMap, preFilter, context, xml) :\n\t\t\t\t\t\telems;\n\n\t\t\t\tif (matcher) {\n\n\t\t\t\t\t// If we have a postFinder, or filtered seed, or non-seed postFilter\n\t\t\t\t\t// or preexisting results,\n\t\t\t\t\tmatcherOut = postFinder || (seed ? preFilter : preexisting || postFilter) ?\n\n\t\t\t\t\t\t// ...intermediate processing is necessary\n\t\t\t\t\t\t[] :\n\n\t\t\t\t\t\t// ...otherwise use results directly\n\t\t\t\t\t\tresults;\n\n\t\t\t\t\t// Find primary matches\n\t\t\t\t\tmatcher(matcherIn, matcherOut, context, xml);\n\t\t\t\t} else {\n\t\t\t\t\tmatcherOut = matcherIn;\n\t\t\t\t}\n\n\t\t\t\t// Apply postFilter\n\t\t\t\tif (postFilter) {\n\t\t\t\t\ttemp = condense(matcherOut, postMap);\n\t\t\t\t\tpostFilter(temp, [], context, xml);\n\n\t\t\t\t\t// Un-match failing elements by moving them back to matcherIn\n\t\t\t\t\ti = temp.length;\n\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\tif ((elem = temp[i])) {\n\t\t\t\t\t\t\tmatcherOut[postMap[i]] = !(matcherIn[postMap[i]] = elem);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (seed) {\n\t\t\t\t\tif (postFinder || preFilter) {\n\t\t\t\t\t\tif (postFinder) {\n\n\t\t\t\t\t\t\t// Get the final matcherOut by condensing this intermediate into postFinder contexts\n\t\t\t\t\t\t\ttemp = [];\n\t\t\t\t\t\t\ti = matcherOut.length;\n\t\t\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\t\t\tif ((elem = matcherOut[i])) {\n\n\t\t\t\t\t\t\t\t\t// Restore matcherIn since elem is not yet a final match\n\t\t\t\t\t\t\t\t\ttemp.push((matcherIn[i] = elem));\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tpostFinder(null, (matcherOut = []), temp, xml);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Move matched elements from seed to results to keep them synchronized\n\t\t\t\t\t\ti = matcherOut.length;\n\t\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\t\tif ((elem = matcherOut[i]) &&\n\t\t\t\t\t\t\t\t(temp = postFinder ? indexOf.call(seed, elem) : preMap[i]) > -1) {\n\n\t\t\t\t\t\t\t\tseed[temp] = !(results[temp] = elem);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Add elements to results, through postFinder if defined\n\t\t\t\t} else {\n\t\t\t\t\tmatcherOut = condense(\n\t\t\t\t\t\tmatcherOut === results ?\n\t\t\t\t\t\t\tmatcherOut.splice(preexisting, matcherOut.length) :\n\t\t\t\t\t\t\tmatcherOut\n\t\t\t\t\t);\n\t\t\t\t\tif (postFinder) {\n\t\t\t\t\t\tpostFinder(null, results, matcherOut, xml);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tpush.apply(results, matcherOut);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tfunction matcherFromTokens(tokens) {\n\t\t\tvar checkContext, matcher, j,\n\t\t\t\tlen = tokens.length,\n\t\t\t\tleadingRelative = Expr.relative[tokens[0].type],\n\t\t\t\timplicitRelative = leadingRelative || Expr.relative[\" \"],\n\t\t\t\ti = leadingRelative ? 1 : 0,\n\n\t\t\t\t// The foundational matcher ensures that elements are reachable from top-level context(s)\n\t\t\t\tmatchContext = addCombinator(function (elem) {\n\t\t\t\t\treturn elem === checkContext;\n\t\t\t\t}, implicitRelative, true),\n\t\t\t\tmatchAnyContext = addCombinator(function (elem) {\n\t\t\t\t\treturn indexOf.call(checkContext, elem) > -1;\n\t\t\t\t}, implicitRelative, true),\n\t\t\t\tmatchers = [function (elem, context, xml) {\n\n\t\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\tvar ret = (!leadingRelative && (xml || context != outermostContext)) || (\n\t\t\t\t\t\t(checkContext = context).nodeType ?\n\t\t\t\t\t\t\tmatchContext(elem, context, xml) :\n\t\t\t\t\t\t\tmatchAnyContext(elem, context, xml));\n\n\t\t\t\t\t// Avoid hanging onto element\n\t\t\t\t\t// (see https://github.com/jquery/sizzle/issues/299)\n\t\t\t\t\tcheckContext = null;\n\t\t\t\t\treturn ret;\n\t\t\t\t}];\n\n\t\t\tfor (; i < len; i++) {\n\t\t\t\tif ((matcher = Expr.relative[tokens[i].type])) {\n\t\t\t\t\tmatchers = [addCombinator(elementMatcher(matchers), matcher)];\n\t\t\t\t} else {\n\t\t\t\t\tmatcher = Expr.filter[tokens[i].type].apply(null, tokens[i].matches);\n\n\t\t\t\t\t// Return special upon seeing a positional matcher\n\t\t\t\t\tif (matcher[expando]) {\n\n\t\t\t\t\t\t// Find the next relative operator (if any) for proper handling\n\t\t\t\t\t\tj = ++i;\n\t\t\t\t\t\tfor (; j < len; j++) {\n\t\t\t\t\t\t\tif (Expr.relative[tokens[j].type]) {\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn setMatcher(\n\t\t\t\t\t\t\ti > 1 && elementMatcher(matchers),\n\t\t\t\t\t\t\ti > 1 && toSelector(\n\n\t\t\t\t\t\t\t\t// If the preceding token was a descendant combinator, insert an implicit any-element `*`\n\t\t\t\t\t\t\t\ttokens.slice(0, i - 1)\n\t\t\t\t\t\t\t\t\t.concat({ value: tokens[i - 2].type === \" \" ? \"*\" : \"\" })\n\t\t\t\t\t\t\t).replace(rtrimCSS, \"$1\"),\n\t\t\t\t\t\t\tmatcher,\n\t\t\t\t\t\t\ti < j && matcherFromTokens(tokens.slice(i, j)),\n\t\t\t\t\t\t\tj < len && matcherFromTokens((tokens = tokens.slice(j))),\n\t\t\t\t\t\t\tj < len && toSelector(tokens)\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\tmatchers.push(matcher);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn elementMatcher(matchers);\n\t\t}\n\n\t\tfunction matcherFromGroupMatchers(elementMatchers, setMatchers) {\n\t\t\tvar bySet = setMatchers.length > 0,\n\t\t\t\tbyElement = elementMatchers.length > 0,\n\t\t\t\tsuperMatcher = function (seed, context, xml, results, outermost) {\n\t\t\t\t\tvar elem, j, matcher,\n\t\t\t\t\t\tmatchedCount = 0,\n\t\t\t\t\t\ti = \"0\",\n\t\t\t\t\t\tunmatched = seed && [],\n\t\t\t\t\t\tsetMatched = [],\n\t\t\t\t\t\tcontextBackup = outermostContext,\n\n\t\t\t\t\t\t// We must always have either seed elements or outermost context\n\t\t\t\t\t\telems = seed || byElement && Expr.find.TAG(\"*\", outermost),\n\n\t\t\t\t\t\t// Use integer dirruns iff this is the outermost matcher\n\t\t\t\t\t\tdirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1),\n\t\t\t\t\t\tlen = elems.length;\n\n\t\t\t\t\tif (outermost) {\n\n\t\t\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\t\toutermostContext = context == document || context || outermost;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Add elements passing elementMatchers directly to results\n\t\t\t\t\t// Support: iOS <=7 - 9 only\n\t\t\t\t\t// Tolerate NodeList properties (IE: \"length\"; Safari: <number>) matching\n\t\t\t\t\t// elements by id. (see trac-14142)\n\t\t\t\t\tfor (; i !== len && (elem = elems[i]) != null; i++) {\n\t\t\t\t\t\tif (byElement && elem) {\n\t\t\t\t\t\t\tj = 0;\n\n\t\t\t\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\t\t\tif (!context && elem.ownerDocument != document) {\n\t\t\t\t\t\t\t\tsetDocument(elem);\n\t\t\t\t\t\t\t\txml = !documentIsHTML;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\twhile ((matcher = elementMatchers[j++])) {\n\t\t\t\t\t\t\t\tif (matcher(elem, context || document, xml)) {\n\t\t\t\t\t\t\t\t\tpush.call(results, elem);\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (outermost) {\n\t\t\t\t\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Track unmatched elements for set filters\n\t\t\t\t\t\tif (bySet) {\n\n\t\t\t\t\t\t\t// They will have gone through all possible matchers\n\t\t\t\t\t\t\tif ((elem = !matcher && elem)) {\n\t\t\t\t\t\t\t\tmatchedCount--;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Lengthen the array for every element, matched or not\n\t\t\t\t\t\t\tif (seed) {\n\t\t\t\t\t\t\t\tunmatched.push(elem);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// `i` is now the count of elements visited above, and adding it to `matchedCount`\n\t\t\t\t\t// makes the latter nonnegative.\n\t\t\t\t\tmatchedCount += i;\n\n\t\t\t\t\t// Apply set filters to unmatched elements\n\t\t\t\t\t// NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`\n\t\t\t\t\t// equals `i`), unless we didn't visit _any_ elements in the above loop because we have\n\t\t\t\t\t// no element matchers and no seed.\n\t\t\t\t\t// Incrementing an initially-string \"0\" `i` allows `i` to remain a string only in that\n\t\t\t\t\t// case, which will result in a \"00\" `matchedCount` that differs from `i` but is also\n\t\t\t\t\t// numerically zero.\n\t\t\t\t\tif (bySet && i !== matchedCount) {\n\t\t\t\t\t\tj = 0;\n\t\t\t\t\t\twhile ((matcher = setMatchers[j++])) {\n\t\t\t\t\t\t\tmatcher(unmatched, setMatched, context, xml);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (seed) {\n\n\t\t\t\t\t\t\t// Reintegrate element matches to eliminate the need for sorting\n\t\t\t\t\t\t\tif (matchedCount > 0) {\n\t\t\t\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\t\t\t\tif (!(unmatched[i] || setMatched[i])) {\n\t\t\t\t\t\t\t\t\t\tsetMatched[i] = pop.call(results);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Discard index placeholder values to get only actual matches\n\t\t\t\t\t\t\tsetMatched = condense(setMatched);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Add matches to results\n\t\t\t\t\t\tpush.apply(results, setMatched);\n\n\t\t\t\t\t\t// Seedless set matches succeeding multiple successful matchers stipulate sorting\n\t\t\t\t\t\tif (outermost && !seed && setMatched.length > 0 &&\n\t\t\t\t\t\t\t(matchedCount + setMatchers.length) > 1) {\n\n\t\t\t\t\t\t\tjQuery.uniqueSort(results);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Override manipulation of globals by nested matchers\n\t\t\t\t\tif (outermost) {\n\t\t\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\t\t\toutermostContext = contextBackup;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn unmatched;\n\t\t\t\t};\n\n\t\t\treturn bySet ?\n\t\t\t\tmarkFunction(superMatcher) :\n\t\t\t\tsuperMatcher;\n\t\t}\n\n\t\tfunction compile(selector, match /* Internal Use Only */) {\n\t\t\tvar i,\n\t\t\t\tsetMatchers = [],\n\t\t\t\telementMatchers = [],\n\t\t\t\tcached = compilerCache[selector + \" \"];\n\n\t\t\tif (!cached) {\n\n\t\t\t\t// Generate a function of recursive functions that can be used to check each element\n\t\t\t\tif (!match) {\n\t\t\t\t\tmatch = tokenize(selector);\n\t\t\t\t}\n\t\t\t\ti = match.length;\n\t\t\t\twhile (i--) {\n\t\t\t\t\tcached = matcherFromTokens(match[i]);\n\t\t\t\t\tif (cached[expando]) {\n\t\t\t\t\t\tsetMatchers.push(cached);\n\t\t\t\t\t} else {\n\t\t\t\t\t\telementMatchers.push(cached);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Cache the compiled function\n\t\t\t\tcached = compilerCache(selector,\n\t\t\t\t\tmatcherFromGroupMatchers(elementMatchers, setMatchers));\n\n\t\t\t\t// Save selector and tokenization\n\t\t\t\tcached.selector = selector;\n\t\t\t}\n\t\t\treturn cached;\n\t\t}\n\n\t\t/**\n\t\t * A low-level selection function that works with jQuery's compiled\n\t\t *  selector functions\n\t\t * @param {String|Function} selector A selector or a pre-compiled\n\t\t *  selector function built with jQuery selector compile\n\t\t * @param {Element} context\n\t\t * @param {Array} [results]\n\t\t * @param {Array} [seed] A set of elements to match against\n\t\t */\n\t\tfunction select(selector, context, results, seed) {\n\t\t\tvar i, tokens, token, type, find,\n\t\t\t\tcompiled = typeof selector === \"function\" && selector,\n\t\t\t\tmatch = !seed && tokenize((selector = compiled.selector || selector));\n\n\t\t\tresults = results || [];\n\n\t\t\t// Try to minimize operations if there is only one selector in the list and no seed\n\t\t\t// (the latter of which guarantees us context)\n\t\t\tif (match.length === 1) {\n\n\t\t\t\t// Reduce context if the leading compound selector is an ID\n\t\t\t\ttokens = match[0] = match[0].slice(0);\n\t\t\t\tif (tokens.length > 2 && (token = tokens[0]).type === \"ID\" &&\n\t\t\t\t\tcontext.nodeType === 9 && documentIsHTML && Expr.relative[tokens[1].type]) {\n\n\t\t\t\t\tcontext = (Expr.find.ID(\n\t\t\t\t\t\ttoken.matches[0].replace(runescape, funescape),\n\t\t\t\t\t\tcontext\n\t\t\t\t\t) || [])[0];\n\t\t\t\t\tif (!context) {\n\t\t\t\t\t\treturn results;\n\n\t\t\t\t\t\t// Precompiled matchers will still verify ancestry, so step up a level\n\t\t\t\t\t} else if (compiled) {\n\t\t\t\t\t\tcontext = context.parentNode;\n\t\t\t\t\t}\n\n\t\t\t\t\tselector = selector.slice(tokens.shift().value.length);\n\t\t\t\t}\n\n\t\t\t\t// Fetch a seed set for right-to-left matching\n\t\t\t\ti = matchExpr.needsContext.test(selector) ? 0 : tokens.length;\n\t\t\t\twhile (i--) {\n\t\t\t\t\ttoken = tokens[i];\n\n\t\t\t\t\t// Abort if we hit a combinator\n\t\t\t\t\tif (Expr.relative[(type = token.type)]) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tif ((find = Expr.find[type])) {\n\n\t\t\t\t\t\t// Search, expanding context for leading sibling combinators\n\t\t\t\t\t\tif ((seed = find(\n\t\t\t\t\t\t\ttoken.matches[0].replace(runescape, funescape),\n\t\t\t\t\t\t\trsibling.test(tokens[0].type) &&\n\t\t\t\t\t\t\ttestContext(context.parentNode) || context\n\t\t\t\t\t\t))) {\n\n\t\t\t\t\t\t\t// If seed is empty or no tokens remain, we can return early\n\t\t\t\t\t\t\ttokens.splice(i, 1);\n\t\t\t\t\t\t\tselector = seed.length && toSelector(tokens);\n\t\t\t\t\t\t\tif (!selector) {\n\t\t\t\t\t\t\t\tpush.apply(results, seed);\n\t\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Compile and execute a filtering function if one is not provided\n\t\t\t// Provide `match` to avoid retokenization if we modified the selector above\n\t\t\t(compiled || compile(selector, match))(\n\t\t\t\tseed,\n\t\t\t\tcontext,\n\t\t\t\t!documentIsHTML,\n\t\t\t\tresults,\n\t\t\t\t!context || rsibling.test(selector) && testContext(context.parentNode) || context\n\t\t\t);\n\t\t\treturn results;\n\t\t}\n\n\t\t// One-time assignments\n\n\t\t// Support: Android <=4.0 - 4.1+\n\t\t// Sort stability\n\t\tsupport.sortStable = expando.split(\"\").sort(sortOrder).join(\"\") === expando;\n\n\t\t// Initialize against the default document\n\t\tsetDocument();\n\n\t\t// Support: Android <=4.0 - 4.1+\n\t\t// Detached nodes confoundingly follow *each other*\n\t\tsupport.sortDetached = assert(function (el) {\n\n\t\t\t// Should return 1, but returns 4 (following)\n\t\t\treturn el.compareDocumentPosition(document.createElement(\"fieldset\")) & 1;\n\t\t});\n\n\t\tjQuery.find = find;\n\n\t\t// Deprecated\n\t\tjQuery.expr[\":\"] = jQuery.expr.pseudos;\n\t\tjQuery.unique = jQuery.uniqueSort;\n\n\t\t// These have always been private, but they used to be documented\n\t\t// as part of Sizzle so let's maintain them in the 3.x line\n\t\t// for backwards compatibility purposes.\n\t\tfind.compile = compile;\n\t\tfind.select = select;\n\t\tfind.setDocument = setDocument;\n\n\t\tfind.escape = jQuery.escapeSelector;\n\t\tfind.getText = jQuery.text;\n\t\tfind.isXML = jQuery.isXMLDoc;\n\t\tfind.selectors = jQuery.expr;\n\t\tfind.support = jQuery.support;\n\t\tfind.uniqueSort = jQuery.uniqueSort;\n\n\t\t/* eslint-enable */\n\n\t})();\n\n\n\tvar dir = function (elem, dir, until) {\n\t\tvar matched = [],\n\t\t\ttruncate = until !== undefined;\n\n\t\twhile ((elem = elem[dir]) && elem.nodeType !== 9) {\n\t\t\tif (elem.nodeType === 1) {\n\t\t\t\tif (truncate && jQuery(elem).is(until)) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tmatched.push(elem);\n\t\t\t}\n\t\t}\n\t\treturn matched;\n\t};\n\n\n\tvar siblings = function (n, elem) {\n\t\tvar matched = [];\n\n\t\tfor (; n; n = n.nextSibling) {\n\t\t\tif (n.nodeType === 1 && n !== elem) {\n\t\t\t\tmatched.push(n);\n\t\t\t}\n\t\t}\n\n\t\treturn matched;\n\t};\n\n\n\tvar rneedsContext = jQuery.expr.match.needsContext;\n\n\tvar rsingleTag = (/^<([a-z][^\\/\\0>:\\x20\\t\\r\\n\\f]*)[\\x20\\t\\r\\n\\f]*\\/?>(?:<\\/\\1>|)$/i);\n\n\n\n\t// Implement the identical functionality for filter and not\n\tfunction winnow(elements, qualifier, not) {\n\t\tif (isFunction(qualifier)) {\n\t\t\treturn jQuery.grep(elements, function (elem, i) {\n\t\t\t\treturn !!qualifier.call(elem, i, elem) !== not;\n\t\t\t});\n\t\t}\n\n\t\t// Single element\n\t\tif (qualifier.nodeType) {\n\t\t\treturn jQuery.grep(elements, function (elem) {\n\t\t\t\treturn (elem === qualifier) !== not;\n\t\t\t});\n\t\t}\n\n\t\t// Arraylike of elements (jQuery, arguments, Array)\n\t\tif (typeof qualifier !== \"string\") {\n\t\t\treturn jQuery.grep(elements, function (elem) {\n\t\t\t\treturn (indexOf.call(qualifier, elem) > -1) !== not;\n\t\t\t});\n\t\t}\n\n\t\t// Filtered directly for both simple and complex selectors\n\t\treturn jQuery.filter(qualifier, elements, not);\n\t}\n\n\tjQuery.filter = function (expr, elems, not) {\n\t\tvar elem = elems[0];\n\n\t\tif (not) {\n\t\t\texpr = \":not(\" + expr + \")\";\n\t\t}\n\n\t\tif (elems.length === 1 && elem.nodeType === 1) {\n\t\t\treturn jQuery.find.matchesSelector(elem, expr) ? [elem] : [];\n\t\t}\n\n\t\treturn jQuery.find.matches(expr, jQuery.grep(elems, function (elem) {\n\t\t\treturn elem.nodeType === 1;\n\t\t}));\n\t};\n\n\tjQuery.fn.extend({\n\t\tfind: function (selector) {\n\t\t\tvar i, ret,\n\t\t\t\tlen = this.length,\n\t\t\t\tself = this;\n\n\t\t\tif (typeof selector !== \"string\") {\n\t\t\t\treturn this.pushStack(jQuery(selector).filter(function () {\n\t\t\t\t\tfor (i = 0; i < len; i++) {\n\t\t\t\t\t\tif (jQuery.contains(self[i], this)) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}));\n\t\t\t}\n\n\t\t\tret = this.pushStack([]);\n\n\t\t\tfor (i = 0; i < len; i++) {\n\t\t\t\tjQuery.find(selector, self[i], ret);\n\t\t\t}\n\n\t\t\treturn len > 1 ? jQuery.uniqueSort(ret) : ret;\n\t\t},\n\t\tfilter: function (selector) {\n\t\t\treturn this.pushStack(winnow(this, selector || [], false));\n\t\t},\n\t\tnot: function (selector) {\n\t\t\treturn this.pushStack(winnow(this, selector || [], true));\n\t\t},\n\t\tis: function (selector) {\n\t\t\treturn !!winnow(\n\t\t\t\tthis,\n\n\t\t\t\t// If this is a positional/relative selector, check membership in the returned set\n\t\t\t\t// so $(\"p:first\").is(\"p:last\") won't return true for a doc with two \"p\".\n\t\t\t\ttypeof selector === \"string\" && rneedsContext.test(selector) ?\n\t\t\t\t\tjQuery(selector) :\n\t\t\t\t\tselector || [],\n\t\t\t\tfalse\n\t\t\t).length;\n\t\t}\n\t});\n\n\n\t// Initialize a jQuery object\n\n\n\t// A central reference to the root jQuery(document)\n\tvar rootjQuery,\n\n\t\t// A simple way to check for HTML strings\n\t\t// Prioritize #id over <tag> to avoid XSS via location.hash (trac-9521)\n\t\t// Strict HTML recognition (trac-11290: must start with <)\n\t\t// Shortcut simple #id case for speed\n\t\trquickExpr = /^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]+))$/,\n\n\t\tinit = jQuery.fn.init = function (selector, context, root) {\n\t\t\tvar match, elem;\n\n\t\t\t// HANDLE: $(\"\"), $(null), $(undefined), $(false)\n\t\t\tif (!selector) {\n\t\t\t\treturn this;\n\t\t\t}\n\n\t\t\t// Method init() accepts an alternate rootjQuery\n\t\t\t// so migrate can support jQuery.sub (gh-2101)\n\t\t\troot = root || rootjQuery;\n\n\t\t\t// Handle HTML strings\n\t\t\tif (typeof selector === \"string\") {\n\t\t\t\tif (selector[0] === \"<\" &&\n\t\t\t\t\tselector[selector.length - 1] === \">\" &&\n\t\t\t\t\tselector.length >= 3) {\n\n\t\t\t\t\t// Assume that strings that start and end with <> are HTML and skip the regex check\n\t\t\t\t\tmatch = [null, selector, null];\n\n\t\t\t\t} else {\n\t\t\t\t\tmatch = rquickExpr.exec(selector);\n\t\t\t\t}\n\n\t\t\t\t// Match html or make sure no context is specified for #id\n\t\t\t\tif (match && (match[1] || !context)) {\n\n\t\t\t\t\t// HANDLE: $(html) -> $(array)\n\t\t\t\t\tif (match[1]) {\n\t\t\t\t\t\tcontext = context instanceof jQuery ? context[0] : context;\n\n\t\t\t\t\t\t// Option to run scripts is true for back-compat\n\t\t\t\t\t\t// Intentionally let the error be thrown if parseHTML is not present\n\t\t\t\t\t\tjQuery.merge(this, jQuery.parseHTML(\n\t\t\t\t\t\t\tmatch[1],\n\t\t\t\t\t\t\tcontext && context.nodeType ? context.ownerDocument || context : document,\n\t\t\t\t\t\t\ttrue\n\t\t\t\t\t\t));\n\n\t\t\t\t\t\t// HANDLE: $(html, props)\n\t\t\t\t\t\tif (rsingleTag.test(match[1]) && jQuery.isPlainObject(context)) {\n\t\t\t\t\t\t\tfor (match in context) {\n\n\t\t\t\t\t\t\t\t// Properties of context are called as methods if possible\n\t\t\t\t\t\t\t\tif (isFunction(this[match])) {\n\t\t\t\t\t\t\t\t\tthis[match](context[match]);\n\n\t\t\t\t\t\t\t\t\t// ...and otherwise set as attributes\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tthis.attr(match, context[match]);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn this;\n\n\t\t\t\t\t\t// HANDLE: $(#id)\n\t\t\t\t\t} else {\n\t\t\t\t\t\telem = document.getElementById(match[2]);\n\n\t\t\t\t\t\tif (elem) {\n\n\t\t\t\t\t\t\t// Inject the element directly into the jQuery object\n\t\t\t\t\t\t\tthis[0] = elem;\n\t\t\t\t\t\t\tthis.length = 1;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn this;\n\t\t\t\t\t}\n\n\t\t\t\t\t// HANDLE: $(expr, $(...))\n\t\t\t\t} else if (!context || context.jquery) {\n\t\t\t\t\treturn (context || root).find(selector);\n\n\t\t\t\t\t// HANDLE: $(expr, context)\n\t\t\t\t\t// (which is just equivalent to: $(context).find(expr)\n\t\t\t\t} else {\n\t\t\t\t\treturn this.constructor(context).find(selector);\n\t\t\t\t}\n\n\t\t\t\t// HANDLE: $(DOMElement)\n\t\t\t} else if (selector.nodeType) {\n\t\t\t\tthis[0] = selector;\n\t\t\t\tthis.length = 1;\n\t\t\t\treturn this;\n\n\t\t\t\t// HANDLE: $(function)\n\t\t\t\t// Shortcut for document ready\n\t\t\t} else if (isFunction(selector)) {\n\t\t\t\treturn root.ready !== undefined ?\n\t\t\t\t\troot.ready(selector) :\n\n\t\t\t\t\t// Execute immediately if ready is not present\n\t\t\t\t\tselector(jQuery);\n\t\t\t}\n\n\t\t\treturn jQuery.makeArray(selector, this);\n\t\t};\n\n\t// Give the init function the jQuery prototype for later instantiation\n\tinit.prototype = jQuery.fn;\n\n\t// Initialize central reference\n\trootjQuery = jQuery(document);\n\n\n\tvar rparentsprev = /^(?:parents|prev(?:Until|All))/,\n\n\t\t// Methods guaranteed to produce a unique set when starting from a unique set\n\t\tguaranteedUnique = {\n\t\t\tchildren: true,\n\t\t\tcontents: true,\n\t\t\tnext: true,\n\t\t\tprev: true\n\t\t};\n\n\tjQuery.fn.extend({\n\t\thas: function (target) {\n\t\t\tvar targets = jQuery(target, this),\n\t\t\t\tl = targets.length;\n\n\t\t\treturn this.filter(function () {\n\t\t\t\tvar i = 0;\n\t\t\t\tfor (; i < l; i++) {\n\t\t\t\t\tif (jQuery.contains(this, targets[i])) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\tclosest: function (selectors, context) {\n\t\t\tvar cur,\n\t\t\t\ti = 0,\n\t\t\t\tl = this.length,\n\t\t\t\tmatched = [],\n\t\t\t\ttargets = typeof selectors !== \"string\" && jQuery(selectors);\n\n\t\t\t// Positional selectors never match, since there's no _selection_ context\n\t\t\tif (!rneedsContext.test(selectors)) {\n\t\t\t\tfor (; i < l; i++) {\n\t\t\t\t\tfor (cur = this[i]; cur && cur !== context; cur = cur.parentNode) {\n\n\t\t\t\t\t\t// Always skip document fragments\n\t\t\t\t\t\tif (cur.nodeType < 11 && (targets ?\n\t\t\t\t\t\t\ttargets.index(cur) > -1 :\n\n\t\t\t\t\t\t\t// Don't pass non-elements to jQuery#find\n\t\t\t\t\t\t\tcur.nodeType === 1 &&\n\t\t\t\t\t\t\tjQuery.find.matchesSelector(cur, selectors))) {\n\n\t\t\t\t\t\t\tmatched.push(cur);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn this.pushStack(matched.length > 1 ? jQuery.uniqueSort(matched) : matched);\n\t\t},\n\n\t\t// Determine the position of an element within the set\n\t\tindex: function (elem) {\n\n\t\t\t// No argument, return index in parent\n\t\t\tif (!elem) {\n\t\t\t\treturn (this[0] && this[0].parentNode) ? this.first().prevAll().length : -1;\n\t\t\t}\n\n\t\t\t// Index in selector\n\t\t\tif (typeof elem === \"string\") {\n\t\t\t\treturn indexOf.call(jQuery(elem), this[0]);\n\t\t\t}\n\n\t\t\t// Locate the position of the desired element\n\t\t\treturn indexOf.call(this,\n\n\t\t\t\t// If it receives a jQuery object, the first element is used\n\t\t\t\telem.jquery ? elem[0] : elem\n\t\t\t);\n\t\t},\n\n\t\tadd: function (selector, context) {\n\t\t\treturn this.pushStack(\n\t\t\t\tjQuery.uniqueSort(\n\t\t\t\t\tjQuery.merge(this.get(), jQuery(selector, context))\n\t\t\t\t)\n\t\t\t);\n\t\t},\n\n\t\taddBack: function (selector) {\n\t\t\treturn this.add(selector == null ?\n\t\t\t\tthis.prevObject : this.prevObject.filter(selector)\n\t\t\t);\n\t\t}\n\t});\n\n\tfunction sibling(cur, dir) {\n\t\twhile ((cur = cur[dir]) && cur.nodeType !== 1) { }\n\t\treturn cur;\n\t}\n\n\tjQuery.each({\n\t\tparent: function (elem) {\n\t\t\tvar parent = elem.parentNode;\n\t\t\treturn parent && parent.nodeType !== 11 ? parent : null;\n\t\t},\n\t\tparents: function (elem) {\n\t\t\treturn dir(elem, \"parentNode\");\n\t\t},\n\t\tparentsUntil: function (elem, _i, until) {\n\t\t\treturn dir(elem, \"parentNode\", until);\n\t\t},\n\t\tnext: function (elem) {\n\t\t\treturn sibling(elem, \"nextSibling\");\n\t\t},\n\t\tprev: function (elem) {\n\t\t\treturn sibling(elem, \"previousSibling\");\n\t\t},\n\t\tnextAll: function (elem) {\n\t\t\treturn dir(elem, \"nextSibling\");\n\t\t},\n\t\tprevAll: function (elem) {\n\t\t\treturn dir(elem, \"previousSibling\");\n\t\t},\n\t\tnextUntil: function (elem, _i, until) {\n\t\t\treturn dir(elem, \"nextSibling\", until);\n\t\t},\n\t\tprevUntil: function (elem, _i, until) {\n\t\t\treturn dir(elem, \"previousSibling\", until);\n\t\t},\n\t\tsiblings: function (elem) {\n\t\t\treturn siblings((elem.parentNode || {}).firstChild, elem);\n\t\t},\n\t\tchildren: function (elem) {\n\t\t\treturn siblings(elem.firstChild);\n\t\t},\n\t\tcontents: function (elem) {\n\t\t\tif (elem.contentDocument != null &&\n\n\t\t\t\t// Support: IE 11+\n\t\t\t\t// <object> elements with no `data` attribute has an object\n\t\t\t\t// `contentDocument` with a `null` prototype.\n\t\t\t\tgetProto(elem.contentDocument)) {\n\n\t\t\t\treturn elem.contentDocument;\n\t\t\t}\n\n\t\t\t// Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only\n\t\t\t// Treat the template element as a regular one in browsers that\n\t\t\t// don't support it.\n\t\t\tif (nodeName(elem, \"template\")) {\n\t\t\t\telem = elem.content || elem;\n\t\t\t}\n\n\t\t\treturn jQuery.merge([], elem.childNodes);\n\t\t}\n\t}, function (name, fn) {\n\t\tjQuery.fn[name] = function (until, selector) {\n\t\t\tvar matched = jQuery.map(this, fn, until);\n\n\t\t\tif (name.slice(-5) !== \"Until\") {\n\t\t\t\tselector = until;\n\t\t\t}\n\n\t\t\tif (selector && typeof selector === \"string\") {\n\t\t\t\tmatched = jQuery.filter(selector, matched);\n\t\t\t}\n\n\t\t\tif (this.length > 1) {\n\n\t\t\t\t// Remove duplicates\n\t\t\t\tif (!guaranteedUnique[name]) {\n\t\t\t\t\tjQuery.uniqueSort(matched);\n\t\t\t\t}\n\n\t\t\t\t// Reverse order for parents* and prev-derivatives\n\t\t\t\tif (rparentsprev.test(name)) {\n\t\t\t\t\tmatched.reverse();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn this.pushStack(matched);\n\t\t};\n\t});\n\tvar rnothtmlwhite = (/[^\\x20\\t\\r\\n\\f]+/g);\n\n\n\n\t// Convert String-formatted options into Object-formatted ones\n\tfunction createOptions(options) {\n\t\tvar object = {};\n\t\tjQuery.each(options.match(rnothtmlwhite) || [], function (_, flag) {\n\t\t\tobject[flag] = true;\n\t\t});\n\t\treturn object;\n\t}\n\n\t/*\n\t * Create a callback list using the following parameters:\n\t *\n\t *\toptions: an optional list of space-separated options that will change how\n\t *\t\t\tthe callback list behaves or a more traditional option object\n\t *\n\t * By default a callback list will act like an event callback list and can be\n\t * \"fired\" multiple times.\n\t *\n\t * Possible options:\n\t *\n\t *\tonce:\t\t\twill ensure the callback list can only be fired once (like a Deferred)\n\t *\n\t *\tmemory:\t\t\twill keep track of previous values and will call any callback added\n\t *\t\t\t\t\tafter the list has been fired right away with the latest \"memorized\"\n\t *\t\t\t\t\tvalues (like a Deferred)\n\t *\n\t *\tunique:\t\t\twill ensure a callback can only be added once (no duplicate in the list)\n\t *\n\t *\tstopOnFalse:\tinterrupt callings when a callback returns false\n\t *\n\t */\n\tjQuery.Callbacks = function (options) {\n\n\t\t// Convert options from String-formatted to Object-formatted if needed\n\t\t// (we check in cache first)\n\t\toptions = typeof options === \"string\" ?\n\t\t\tcreateOptions(options) :\n\t\t\tjQuery.extend({}, options);\n\n\t\tvar // Flag to know if list is currently firing\n\t\t\tfiring,\n\n\t\t\t// Last fire value for non-forgettable lists\n\t\t\tmemory,\n\n\t\t\t// Flag to know if list was already fired\n\t\t\tfired,\n\n\t\t\t// Flag to prevent firing\n\t\t\tlocked,\n\n\t\t\t// Actual callback list\n\t\t\tlist = [],\n\n\t\t\t// Queue of execution data for repeatable lists\n\t\t\tqueue = [],\n\n\t\t\t// Index of currently firing callback (modified by add/remove as needed)\n\t\t\tfiringIndex = -1,\n\n\t\t\t// Fire callbacks\n\t\t\tfire = function () {\n\n\t\t\t\t// Enforce single-firing\n\t\t\t\tlocked = locked || options.once;\n\n\t\t\t\t// Execute callbacks for all pending executions,\n\t\t\t\t// respecting firingIndex overrides and runtime changes\n\t\t\t\tfired = firing = true;\n\t\t\t\tfor (; queue.length; firingIndex = -1) {\n\t\t\t\t\tmemory = queue.shift();\n\t\t\t\t\twhile (++firingIndex < list.length) {\n\n\t\t\t\t\t\t// Run callback and check for early termination\n\t\t\t\t\t\tif (list[firingIndex].apply(memory[0], memory[1]) === false &&\n\t\t\t\t\t\t\toptions.stopOnFalse) {\n\n\t\t\t\t\t\t\t// Jump to end and forget the data so .add doesn't re-fire\n\t\t\t\t\t\t\tfiringIndex = list.length;\n\t\t\t\t\t\t\tmemory = false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Forget the data if we're done with it\n\t\t\t\tif (!options.memory) {\n\t\t\t\t\tmemory = false;\n\t\t\t\t}\n\n\t\t\t\tfiring = false;\n\n\t\t\t\t// Clean up if we're done firing for good\n\t\t\t\tif (locked) {\n\n\t\t\t\t\t// Keep an empty list if we have data for future add calls\n\t\t\t\t\tif (memory) {\n\t\t\t\t\t\tlist = [];\n\n\t\t\t\t\t\t// Otherwise, this object is spent\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlist = \"\";\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// Actual Callbacks object\n\t\t\tself = {\n\n\t\t\t\t// Add a callback or a collection of callbacks to the list\n\t\t\t\tadd: function () {\n\t\t\t\t\tif (list) {\n\n\t\t\t\t\t\t// If we have memory from a past run, we should fire after adding\n\t\t\t\t\t\tif (memory && !firing) {\n\t\t\t\t\t\t\tfiringIndex = list.length - 1;\n\t\t\t\t\t\t\tqueue.push(memory);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t(function add(args) {\n\t\t\t\t\t\t\tjQuery.each(args, function (_, arg) {\n\t\t\t\t\t\t\t\tif (isFunction(arg)) {\n\t\t\t\t\t\t\t\t\tif (!options.unique || !self.has(arg)) {\n\t\t\t\t\t\t\t\t\t\tlist.push(arg);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} else if (arg && arg.length && toType(arg) !== \"string\") {\n\n\t\t\t\t\t\t\t\t\t// Inspect recursively\n\t\t\t\t\t\t\t\t\tadd(arg);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t})(arguments);\n\n\t\t\t\t\t\tif (memory && !firing) {\n\t\t\t\t\t\t\tfire();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Remove a callback from the list\n\t\t\t\tremove: function () {\n\t\t\t\t\tjQuery.each(arguments, function (_, arg) {\n\t\t\t\t\t\tvar index;\n\t\t\t\t\t\twhile ((index = jQuery.inArray(arg, list, index)) > -1) {\n\t\t\t\t\t\t\tlist.splice(index, 1);\n\n\t\t\t\t\t\t\t// Handle firing indexes\n\t\t\t\t\t\t\tif (index <= firingIndex) {\n\t\t\t\t\t\t\t\tfiringIndex--;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Check if a given callback is in the list.\n\t\t\t\t// If no argument is given, return whether or not list has callbacks attached.\n\t\t\t\thas: function (fn) {\n\t\t\t\t\treturn fn ?\n\t\t\t\t\t\tjQuery.inArray(fn, list) > -1 :\n\t\t\t\t\t\tlist.length > 0;\n\t\t\t\t},\n\n\t\t\t\t// Remove all callbacks from the list\n\t\t\t\tempty: function () {\n\t\t\t\t\tif (list) {\n\t\t\t\t\t\tlist = [];\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Disable .fire and .add\n\t\t\t\t// Abort any current/pending executions\n\t\t\t\t// Clear all callbacks and values\n\t\t\t\tdisable: function () {\n\t\t\t\t\tlocked = queue = [];\n\t\t\t\t\tlist = memory = \"\";\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\t\t\t\tdisabled: function () {\n\t\t\t\t\treturn !list;\n\t\t\t\t},\n\n\t\t\t\t// Disable .fire\n\t\t\t\t// Also disable .add unless we have memory (since it would have no effect)\n\t\t\t\t// Abort any pending executions\n\t\t\t\tlock: function () {\n\t\t\t\t\tlocked = queue = [];\n\t\t\t\t\tif (!memory && !firing) {\n\t\t\t\t\t\tlist = memory = \"\";\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\t\t\t\tlocked: function () {\n\t\t\t\t\treturn !!locked;\n\t\t\t\t},\n\n\t\t\t\t// Call all callbacks with the given context and arguments\n\t\t\t\tfireWith: function (context, args) {\n\t\t\t\t\tif (!locked) {\n\t\t\t\t\t\targs = args || [];\n\t\t\t\t\t\targs = [context, args.slice ? args.slice() : args];\n\t\t\t\t\t\tqueue.push(args);\n\t\t\t\t\t\tif (!firing) {\n\t\t\t\t\t\t\tfire();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Call all the callbacks with the given arguments\n\t\t\t\tfire: function () {\n\t\t\t\t\tself.fireWith(this, arguments);\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// To know if the callbacks have already been called at least once\n\t\t\t\tfired: function () {\n\t\t\t\t\treturn !!fired;\n\t\t\t\t}\n\t\t\t};\n\n\t\treturn self;\n\t};\n\n\n\tfunction Identity(v) {\n\t\treturn v;\n\t}\n\tfunction Thrower(ex) {\n\t\tthrow ex;\n\t}\n\n\tfunction adoptValue(value, resolve, reject, noValue) {\n\t\tvar method;\n\n\t\ttry {\n\n\t\t\t// Check for promise aspect first to privilege synchronous behavior\n\t\t\tif (value && isFunction((method = value.promise))) {\n\t\t\t\tmethod.call(value).done(resolve).fail(reject);\n\n\t\t\t\t// Other thenables\n\t\t\t} else if (value && isFunction((method = value.then))) {\n\t\t\t\tmethod.call(value, resolve, reject);\n\n\t\t\t\t// Other non-thenables\n\t\t\t} else {\n\n\t\t\t\t// Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer:\n\t\t\t\t// * false: [ value ].slice( 0 ) => resolve( value )\n\t\t\t\t// * true: [ value ].slice( 1 ) => resolve()\n\t\t\t\tresolve.apply(undefined, [value].slice(noValue));\n\t\t\t}\n\n\t\t\t// For Promises/A+, convert exceptions into rejections\n\t\t\t// Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in\n\t\t\t// Deferred#then to conditionally suppress rejection.\n\t\t} catch (value) {\n\n\t\t\t// Support: Android 4.0 only\n\t\t\t// Strict mode functions invoked without .call/.apply get global-object context\n\t\t\treject.apply(undefined, [value]);\n\t\t}\n\t}\n\n\tjQuery.extend({\n\n\t\tDeferred: function (func) {\n\t\t\tvar tuples = [\n\n\t\t\t\t// action, add listener, callbacks,\n\t\t\t\t// ... .then handlers, argument index, [final state]\n\t\t\t\t[\"notify\", \"progress\", jQuery.Callbacks(\"memory\"),\n\t\t\t\t\tjQuery.Callbacks(\"memory\"), 2],\n\t\t\t\t[\"resolve\", \"done\", jQuery.Callbacks(\"once memory\"),\n\t\t\t\t\tjQuery.Callbacks(\"once memory\"), 0, \"resolved\"],\n\t\t\t\t[\"reject\", \"fail\", jQuery.Callbacks(\"once memory\"),\n\t\t\t\t\tjQuery.Callbacks(\"once memory\"), 1, \"rejected\"]\n\t\t\t],\n\t\t\t\tstate = \"pending\",\n\t\t\t\tpromise = {\n\t\t\t\t\tstate: function () {\n\t\t\t\t\t\treturn state;\n\t\t\t\t\t},\n\t\t\t\t\talways: function () {\n\t\t\t\t\t\tdeferred.done(arguments).fail(arguments);\n\t\t\t\t\t\treturn this;\n\t\t\t\t\t},\n\t\t\t\t\t\"catch\": function (fn) {\n\t\t\t\t\t\treturn promise.then(null, fn);\n\t\t\t\t\t},\n\n\t\t\t\t\t// Keep pipe for back-compat\n\t\t\t\t\tpipe: function ( /* fnDone, fnFail, fnProgress */) {\n\t\t\t\t\t\tvar fns = arguments;\n\n\t\t\t\t\t\treturn jQuery.Deferred(function (newDefer) {\n\t\t\t\t\t\t\tjQuery.each(tuples, function (_i, tuple) {\n\n\t\t\t\t\t\t\t\t// Map tuples (progress, done, fail) to arguments (done, fail, progress)\n\t\t\t\t\t\t\t\tvar fn = isFunction(fns[tuple[4]]) && fns[tuple[4]];\n\n\t\t\t\t\t\t\t\t// deferred.progress(function() { bind to newDefer or newDefer.notify })\n\t\t\t\t\t\t\t\t// deferred.done(function() { bind to newDefer or newDefer.resolve })\n\t\t\t\t\t\t\t\t// deferred.fail(function() { bind to newDefer or newDefer.reject })\n\t\t\t\t\t\t\t\tdeferred[tuple[1]](function () {\n\t\t\t\t\t\t\t\t\tvar returned = fn && fn.apply(this, arguments);\n\t\t\t\t\t\t\t\t\tif (returned && isFunction(returned.promise)) {\n\t\t\t\t\t\t\t\t\t\treturned.promise()\n\t\t\t\t\t\t\t\t\t\t\t.progress(newDefer.notify)\n\t\t\t\t\t\t\t\t\t\t\t.done(newDefer.resolve)\n\t\t\t\t\t\t\t\t\t\t\t.fail(newDefer.reject);\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tnewDefer[tuple[0] + \"With\"](\n\t\t\t\t\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\t\t\t\t\tfn ? [returned] : arguments\n\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tfns = null;\n\t\t\t\t\t\t}).promise();\n\t\t\t\t\t},\n\t\t\t\t\tthen: function (onFulfilled, onRejected, onProgress) {\n\t\t\t\t\t\tvar maxDepth = 0;\n\t\t\t\t\t\tfunction resolve(depth, deferred, handler, special) {\n\t\t\t\t\t\t\treturn function () {\n\t\t\t\t\t\t\t\tvar that = this,\n\t\t\t\t\t\t\t\t\targs = arguments,\n\t\t\t\t\t\t\t\t\tmightThrow = function () {\n\t\t\t\t\t\t\t\t\t\tvar returned, then;\n\n\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.3\n\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-59\n\t\t\t\t\t\t\t\t\t\t// Ignore double-resolution attempts\n\t\t\t\t\t\t\t\t\t\tif (depth < maxDepth) {\n\t\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\treturned = handler.apply(that, args);\n\n\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.1\n\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-48\n\t\t\t\t\t\t\t\t\t\tif (returned === deferred.promise()) {\n\t\t\t\t\t\t\t\t\t\t\tthrow new TypeError(\"Thenable self-resolution\");\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ sections 2.3.3.1, 3.5\n\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-54\n\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-75\n\t\t\t\t\t\t\t\t\t\t// Retrieve `then` only once\n\t\t\t\t\t\t\t\t\t\tthen = returned &&\n\n\t\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.4\n\t\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-64\n\t\t\t\t\t\t\t\t\t\t\t// Only check objects and functions for thenability\n\t\t\t\t\t\t\t\t\t\t\t(typeof returned === \"object\" ||\n\t\t\t\t\t\t\t\t\t\t\t\ttypeof returned === \"function\") &&\n\t\t\t\t\t\t\t\t\t\t\treturned.then;\n\n\t\t\t\t\t\t\t\t\t\t// Handle a returned thenable\n\t\t\t\t\t\t\t\t\t\tif (isFunction(then)) {\n\n\t\t\t\t\t\t\t\t\t\t\t// Special processors (notify) just wait for resolution\n\t\t\t\t\t\t\t\t\t\t\tif (special) {\n\t\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\t\tresolve(maxDepth, deferred, Identity, special),\n\t\t\t\t\t\t\t\t\t\t\t\t\tresolve(maxDepth, deferred, Thrower, special)\n\t\t\t\t\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t\t\t\t\t// Normal processors (resolve) also hook into progress\n\t\t\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t\t\t// ...and disregard older resolution values\n\t\t\t\t\t\t\t\t\t\t\t\tmaxDepth++;\n\n\t\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\t\tresolve(maxDepth, deferred, Identity, special),\n\t\t\t\t\t\t\t\t\t\t\t\t\tresolve(maxDepth, deferred, Thrower, special),\n\t\t\t\t\t\t\t\t\t\t\t\t\tresolve(maxDepth, deferred, Identity,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tdeferred.notifyWith)\n\t\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t// Handle all other returned values\n\t\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\t\tif (handler !== Identity) {\n\t\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\t\targs = [returned];\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t// Process the value(s)\n\t\t\t\t\t\t\t\t\t\t\t// Default process is resolve\n\t\t\t\t\t\t\t\t\t\t\t(special || deferred.resolveWith)(that, args);\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\n\t\t\t\t\t\t\t\t\t// Only normal processors (resolve) catch and reject exceptions\n\t\t\t\t\t\t\t\t\tprocess = special ?\n\t\t\t\t\t\t\t\t\t\tmightThrow :\n\t\t\t\t\t\t\t\t\t\tfunction () {\n\t\t\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\t\t\tmightThrow();\n\t\t\t\t\t\t\t\t\t\t\t} catch (e) {\n\n\t\t\t\t\t\t\t\t\t\t\t\tif (jQuery.Deferred.exceptionHook) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tjQuery.Deferred.exceptionHook(e,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tprocess.error);\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.4.1\n\t\t\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-61\n\t\t\t\t\t\t\t\t\t\t\t\t// Ignore post-resolution exceptions\n\t\t\t\t\t\t\t\t\t\t\t\tif (depth + 1 >= maxDepth) {\n\n\t\t\t\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\t\t\t\tif (handler !== Thrower) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\targs = [e];\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\t\tdeferred.rejectWith(that, args);\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.1\n\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-57\n\t\t\t\t\t\t\t\t// Re-resolve promises immediately to dodge false rejection from\n\t\t\t\t\t\t\t\t// subsequent errors\n\t\t\t\t\t\t\t\tif (depth) {\n\t\t\t\t\t\t\t\t\tprocess();\n\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t// Call an optional hook to record the error, in case of exception\n\t\t\t\t\t\t\t\t\t// since it's otherwise lost when execution goes async\n\t\t\t\t\t\t\t\t\tif (jQuery.Deferred.getErrorHook) {\n\t\t\t\t\t\t\t\t\t\tprocess.error = jQuery.Deferred.getErrorHook();\n\n\t\t\t\t\t\t\t\t\t\t// The deprecated alias of the above. While the name suggests\n\t\t\t\t\t\t\t\t\t\t// returning the stack, not an error instance, jQuery just passes\n\t\t\t\t\t\t\t\t\t\t// it directly to `console.warn` so both will work; an instance\n\t\t\t\t\t\t\t\t\t\t// just better cooperates with source maps.\n\t\t\t\t\t\t\t\t\t} else if (jQuery.Deferred.getStackHook) {\n\t\t\t\t\t\t\t\t\t\tprocess.error = jQuery.Deferred.getStackHook();\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\twindow.setTimeout(process);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn jQuery.Deferred(function (newDefer) {\n\n\t\t\t\t\t\t\t// progress_handlers.add( ... )\n\t\t\t\t\t\t\ttuples[0][3].add(\n\t\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\t\tisFunction(onProgress) ?\n\t\t\t\t\t\t\t\t\t\tonProgress :\n\t\t\t\t\t\t\t\t\t\tIdentity,\n\t\t\t\t\t\t\t\t\tnewDefer.notifyWith\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t// fulfilled_handlers.add( ... )\n\t\t\t\t\t\t\ttuples[1][3].add(\n\t\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\t\tisFunction(onFulfilled) ?\n\t\t\t\t\t\t\t\t\t\tonFulfilled :\n\t\t\t\t\t\t\t\t\t\tIdentity\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t// rejected_handlers.add( ... )\n\t\t\t\t\t\t\ttuples[2][3].add(\n\t\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\t\tisFunction(onRejected) ?\n\t\t\t\t\t\t\t\t\t\tonRejected :\n\t\t\t\t\t\t\t\t\t\tThrower\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}).promise();\n\t\t\t\t\t},\n\n\t\t\t\t\t// Get a promise for this deferred\n\t\t\t\t\t// If obj is provided, the promise aspect is added to the object\n\t\t\t\t\tpromise: function (obj) {\n\t\t\t\t\t\treturn obj != null ? jQuery.extend(obj, promise) : promise;\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tdeferred = {};\n\n\t\t\t// Add list-specific methods\n\t\t\tjQuery.each(tuples, function (i, tuple) {\n\t\t\t\tvar list = tuple[2],\n\t\t\t\t\tstateString = tuple[5];\n\n\t\t\t\t// promise.progress = list.add\n\t\t\t\t// promise.done = list.add\n\t\t\t\t// promise.fail = list.add\n\t\t\t\tpromise[tuple[1]] = list.add;\n\n\t\t\t\t// Handle state\n\t\t\t\tif (stateString) {\n\t\t\t\t\tlist.add(\n\t\t\t\t\t\tfunction () {\n\n\t\t\t\t\t\t\t// state = \"resolved\" (i.e., fulfilled)\n\t\t\t\t\t\t\t// state = \"rejected\"\n\t\t\t\t\t\t\tstate = stateString;\n\t\t\t\t\t\t},\n\n\t\t\t\t\t\t// rejected_callbacks.disable\n\t\t\t\t\t\t// fulfilled_callbacks.disable\n\t\t\t\t\t\ttuples[3 - i][2].disable,\n\n\t\t\t\t\t\t// rejected_handlers.disable\n\t\t\t\t\t\t// fulfilled_handlers.disable\n\t\t\t\t\t\ttuples[3 - i][3].disable,\n\n\t\t\t\t\t\t// progress_callbacks.lock\n\t\t\t\t\t\ttuples[0][2].lock,\n\n\t\t\t\t\t\t// progress_handlers.lock\n\t\t\t\t\t\ttuples[0][3].lock\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\t// progress_handlers.fire\n\t\t\t\t// fulfilled_handlers.fire\n\t\t\t\t// rejected_handlers.fire\n\t\t\t\tlist.add(tuple[3].fire);\n\n\t\t\t\t// deferred.notify = function() { deferred.notifyWith(...) }\n\t\t\t\t// deferred.resolve = function() { deferred.resolveWith(...) }\n\t\t\t\t// deferred.reject = function() { deferred.rejectWith(...) }\n\t\t\t\tdeferred[tuple[0]] = function () {\n\t\t\t\t\tdeferred[tuple[0] + \"With\"](this === deferred ? undefined : this, arguments);\n\t\t\t\t\treturn this;\n\t\t\t\t};\n\n\t\t\t\t// deferred.notifyWith = list.fireWith\n\t\t\t\t// deferred.resolveWith = list.fireWith\n\t\t\t\t// deferred.rejectWith = list.fireWith\n\t\t\t\tdeferred[tuple[0] + \"With\"] = list.fireWith;\n\t\t\t});\n\n\t\t\t// Make the deferred a promise\n\t\t\tpromise.promise(deferred);\n\n\t\t\t// Call given func if any\n\t\t\tif (func) {\n\t\t\t\tfunc.call(deferred, deferred);\n\t\t\t}\n\n\t\t\t// All done!\n\t\t\treturn deferred;\n\t\t},\n\n\t\t// Deferred helper\n\t\twhen: function (singleValue) {\n\t\t\tvar\n\n\t\t\t\t// count of uncompleted subordinates\n\t\t\t\tremaining = arguments.length,\n\n\t\t\t\t// count of unprocessed arguments\n\t\t\t\ti = remaining,\n\n\t\t\t\t// subordinate fulfillment data\n\t\t\t\tresolveContexts = Array(i),\n\t\t\t\tresolveValues = slice.call(arguments),\n\n\t\t\t\t// the primary Deferred\n\t\t\t\tprimary = jQuery.Deferred(),\n\n\t\t\t\t// subordinate callback factory\n\t\t\t\tupdateFunc = function (i) {\n\t\t\t\t\treturn function (value) {\n\t\t\t\t\t\tresolveContexts[i] = this;\n\t\t\t\t\t\tresolveValues[i] = arguments.length > 1 ? slice.call(arguments) : value;\n\t\t\t\t\t\tif (!(--remaining)) {\n\t\t\t\t\t\t\tprimary.resolveWith(resolveContexts, resolveValues);\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t};\n\n\t\t\t// Single- and empty arguments are adopted like Promise.resolve\n\t\t\tif (remaining <= 1) {\n\t\t\t\tadoptValue(singleValue, primary.done(updateFunc(i)).resolve, primary.reject,\n\t\t\t\t\t!remaining);\n\n\t\t\t\t// Use .then() to unwrap secondary thenables (cf. gh-3000)\n\t\t\t\tif (primary.state() === \"pending\" ||\n\t\t\t\t\tisFunction(resolveValues[i] && resolveValues[i].then)) {\n\n\t\t\t\t\treturn primary.then();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Multiple arguments are aggregated like Promise.all array elements\n\t\t\twhile (i--) {\n\t\t\t\tadoptValue(resolveValues[i], updateFunc(i), primary.reject);\n\t\t\t}\n\n\t\t\treturn primary.promise();\n\t\t}\n\t});\n\n\n\t// These usually indicate a programmer mistake during development,\n\t// warn about them ASAP rather than swallowing them by default.\n\tvar rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;\n\n\t// If `jQuery.Deferred.getErrorHook` is defined, `asyncError` is an error\n\t// captured before the async barrier to get the original error cause\n\t// which may otherwise be hidden.\n\tjQuery.Deferred.exceptionHook = function (error, asyncError) {\n\n\t\t// Support: IE 8 - 9 only\n\t\t// Console exists when dev tools are open, which can happen at any time\n\t\tif (window.console && window.console.warn && error && rerrorNames.test(error.name)) {\n\t\t\twindow.console.warn(\"jQuery.Deferred exception: \" + error.message,\n\t\t\t\terror.stack, asyncError);\n\t\t}\n\t};\n\n\n\n\n\tjQuery.readyException = function (error) {\n\t\twindow.setTimeout(function () {\n\t\t\tthrow error;\n\t\t});\n\t};\n\n\n\n\n\t// The deferred used on DOM ready\n\tvar readyList = jQuery.Deferred();\n\n\tjQuery.fn.ready = function (fn) {\n\n\t\treadyList\n\t\t\t.then(fn)\n\n\t\t\t// Wrap jQuery.readyException in a function so that the lookup\n\t\t\t// happens at the time of error handling instead of callback\n\t\t\t// registration.\n\t\t\t.catch(function (error) {\n\t\t\t\tjQuery.readyException(error);\n\t\t\t});\n\n\t\treturn this;\n\t};\n\n\tjQuery.extend({\n\n\t\t// Is the DOM ready to be used? Set to true once it occurs.\n\t\tisReady: false,\n\n\t\t// A counter to track how many items to wait for before\n\t\t// the ready event fires. See trac-6781\n\t\treadyWait: 1,\n\n\t\t// Handle when the DOM is ready\n\t\tready: function (wait) {\n\n\t\t\t// Abort if there are pending holds or we're already ready\n\t\t\tif (wait === true ? --jQuery.readyWait : jQuery.isReady) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Remember that the DOM is ready\n\t\t\tjQuery.isReady = true;\n\n\t\t\t// If a normal DOM Ready event fired, decrement, and wait if need be\n\t\t\tif (wait !== true && --jQuery.readyWait > 0) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If there are functions bound, to execute\n\t\t\treadyList.resolveWith(document, [jQuery]);\n\t\t}\n\t});\n\n\tjQuery.ready.then = readyList.then;\n\n\t// The ready event handler and self cleanup method\n\tfunction completed() {\n\t\tdocument.removeEventListener(\"DOMContentLoaded\", completed);\n\t\twindow.removeEventListener(\"load\", completed);\n\t\tjQuery.ready();\n\t}\n\n\t// Catch cases where $(document).ready() is called\n\t// after the browser event has already occurred.\n\t// Support: IE <=9 - 10 only\n\t// Older IE sometimes signals \"interactive\" too soon\n\tif (document.readyState === \"complete\" ||\n\t\t(document.readyState !== \"loading\" && !document.documentElement.doScroll)) {\n\n\t\t// Handle it asynchronously to allow scripts the opportunity to delay ready\n\t\twindow.setTimeout(jQuery.ready);\n\n\t} else {\n\n\t\t// Use the handy event callback\n\t\tdocument.addEventListener(\"DOMContentLoaded\", completed);\n\n\t\t// A fallback to window.onload, that will always work\n\t\twindow.addEventListener(\"load\", completed);\n\t}\n\n\n\n\n\t// Multifunctional method to get and set values of a collection\n\t// The value/s can optionally be executed if it's a function\n\tvar access = function (elems, fn, key, value, chainable, emptyGet, raw) {\n\t\tvar i = 0,\n\t\t\tlen = elems.length,\n\t\t\tbulk = key == null;\n\n\t\t// Sets many values\n\t\tif (toType(key) === \"object\") {\n\t\t\tchainable = true;\n\t\t\tfor (i in key) {\n\t\t\t\taccess(elems, fn, i, key[i], true, emptyGet, raw);\n\t\t\t}\n\n\t\t\t// Sets one value\n\t\t} else if (value !== undefined) {\n\t\t\tchainable = true;\n\n\t\t\tif (!isFunction(value)) {\n\t\t\t\traw = true;\n\t\t\t}\n\n\t\t\tif (bulk) {\n\n\t\t\t\t// Bulk operations run against the entire set\n\t\t\t\tif (raw) {\n\t\t\t\t\tfn.call(elems, value);\n\t\t\t\t\tfn = null;\n\n\t\t\t\t\t// ...except when executing function values\n\t\t\t\t} else {\n\t\t\t\t\tbulk = fn;\n\t\t\t\t\tfn = function (elem, _key, value) {\n\t\t\t\t\t\treturn bulk.call(jQuery(elem), value);\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (fn) {\n\t\t\t\tfor (; i < len; i++) {\n\t\t\t\t\tfn(\n\t\t\t\t\t\telems[i], key, raw ?\n\t\t\t\t\t\tvalue :\n\t\t\t\t\t\tvalue.call(elems[i], i, fn(elems[i], key))\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (chainable) {\n\t\t\treturn elems;\n\t\t}\n\n\t\t// Gets\n\t\tif (bulk) {\n\t\t\treturn fn.call(elems);\n\t\t}\n\n\t\treturn len ? fn(elems[0], key) : emptyGet;\n\t};\n\n\n\t// Matches dashed string for camelizing\n\tvar rmsPrefix = /^-ms-/,\n\t\trdashAlpha = /-([a-z])/g;\n\n\t// Used by camelCase as callback to replace()\n\tfunction fcamelCase(_all, letter) {\n\t\treturn letter.toUpperCase();\n\t}\n\n\t// Convert dashed to camelCase; used by the css and data modules\n\t// Support: IE <=9 - 11, Edge 12 - 15\n\t// Microsoft forgot to hump their vendor prefix (trac-9572)\n\tfunction camelCase(string) {\n\t\treturn string.replace(rmsPrefix, \"ms-\").replace(rdashAlpha, fcamelCase);\n\t}\n\tvar acceptData = function (owner) {\n\n\t\t// Accepts only:\n\t\t//  - Node\n\t\t//    - Node.ELEMENT_NODE\n\t\t//    - Node.DOCUMENT_NODE\n\t\t//  - Object\n\t\t//    - Any\n\t\treturn owner.nodeType === 1 || owner.nodeType === 9 || !(+owner.nodeType);\n\t};\n\n\n\n\n\tfunction Data() {\n\t\tthis.expando = jQuery.expando + Data.uid++;\n\t}\n\n\tData.uid = 1;\n\n\tData.prototype = {\n\n\t\tcache: function (owner) {\n\n\t\t\t// Check if the owner object already has a cache\n\t\t\tvar value = owner[this.expando];\n\n\t\t\t// If not, create one\n\t\t\tif (!value) {\n\t\t\t\tvalue = {};\n\n\t\t\t\t// We can accept data for non-element nodes in modern browsers,\n\t\t\t\t// but we should not, see trac-8335.\n\t\t\t\t// Always return an empty object.\n\t\t\t\tif (acceptData(owner)) {\n\n\t\t\t\t\t// If it is a node unlikely to be stringify-ed or looped over\n\t\t\t\t\t// use plain assignment\n\t\t\t\t\tif (owner.nodeType) {\n\t\t\t\t\t\towner[this.expando] = value;\n\n\t\t\t\t\t\t// Otherwise secure it in a non-enumerable property\n\t\t\t\t\t\t// configurable must be true to allow the property to be\n\t\t\t\t\t\t// deleted when data is removed\n\t\t\t\t\t} else {\n\t\t\t\t\t\tObject.defineProperty(owner, this.expando, {\n\t\t\t\t\t\t\tvalue: value,\n\t\t\t\t\t\t\tconfigurable: true\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn value;\n\t\t},\n\t\tset: function (owner, data, value) {\n\t\t\tvar prop,\n\t\t\t\tcache = this.cache(owner);\n\n\t\t\t// Handle: [ owner, key, value ] args\n\t\t\t// Always use camelCase key (gh-2257)\n\t\t\tif (typeof data === \"string\") {\n\t\t\t\tcache[camelCase(data)] = value;\n\n\t\t\t\t// Handle: [ owner, { properties } ] args\n\t\t\t} else {\n\n\t\t\t\t// Copy the properties one-by-one to the cache object\n\t\t\t\tfor (prop in data) {\n\t\t\t\t\tcache[camelCase(prop)] = data[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn cache;\n\t\t},\n\t\tget: function (owner, key) {\n\t\t\treturn key === undefined ?\n\t\t\t\tthis.cache(owner) :\n\n\t\t\t\t// Always use camelCase key (gh-2257)\n\t\t\t\towner[this.expando] && owner[this.expando][camelCase(key)];\n\t\t},\n\t\taccess: function (owner, key, value) {\n\n\t\t\t// In cases where either:\n\t\t\t//\n\t\t\t//   1. No key was specified\n\t\t\t//   2. A string key was specified, but no value provided\n\t\t\t//\n\t\t\t// Take the \"read\" path and allow the get method to determine\n\t\t\t// which value to return, respectively either:\n\t\t\t//\n\t\t\t//   1. The entire cache object\n\t\t\t//   2. The data stored at the key\n\t\t\t//\n\t\t\tif (key === undefined ||\n\t\t\t\t((key && typeof key === \"string\") && value === undefined)) {\n\n\t\t\t\treturn this.get(owner, key);\n\t\t\t}\n\n\t\t\t// When the key is not a string, or both a key and value\n\t\t\t// are specified, set or extend (existing objects) with either:\n\t\t\t//\n\t\t\t//   1. An object of properties\n\t\t\t//   2. A key and value\n\t\t\t//\n\t\t\tthis.set(owner, key, value);\n\n\t\t\t// Since the \"set\" path can have two possible entry points\n\t\t\t// return the expected data based on which path was taken[*]\n\t\t\treturn value !== undefined ? value : key;\n\t\t},\n\t\tremove: function (owner, key) {\n\t\t\tvar i,\n\t\t\t\tcache = owner[this.expando];\n\n\t\t\tif (cache === undefined) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (key !== undefined) {\n\n\t\t\t\t// Support array or space separated string of keys\n\t\t\t\tif (Array.isArray(key)) {\n\n\t\t\t\t\t// If key is an array of keys...\n\t\t\t\t\t// We always set camelCase keys, so remove that.\n\t\t\t\t\tkey = key.map(camelCase);\n\t\t\t\t} else {\n\t\t\t\t\tkey = camelCase(key);\n\n\t\t\t\t\t// If a key with the spaces exists, use it.\n\t\t\t\t\t// Otherwise, create an array by matching non-whitespace\n\t\t\t\t\tkey = key in cache ?\n\t\t\t\t\t\t[key] :\n\t\t\t\t\t\t(key.match(rnothtmlwhite) || []);\n\t\t\t\t}\n\n\t\t\t\ti = key.length;\n\n\t\t\t\twhile (i--) {\n\t\t\t\t\tdelete cache[key[i]];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove the expando if there's no more data\n\t\t\tif (key === undefined || jQuery.isEmptyObject(cache)) {\n\n\t\t\t\t// Support: Chrome <=35 - 45\n\t\t\t\t// Webkit & Blink performance suffers when deleting properties\n\t\t\t\t// from DOM nodes, so set to undefined instead\n\t\t\t\t// https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted)\n\t\t\t\tif (owner.nodeType) {\n\t\t\t\t\towner[this.expando] = undefined;\n\t\t\t\t} else {\n\t\t\t\t\tdelete owner[this.expando];\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\thasData: function (owner) {\n\t\t\tvar cache = owner[this.expando];\n\t\t\treturn cache !== undefined && !jQuery.isEmptyObject(cache);\n\t\t}\n\t};\n\tvar dataPriv = new Data();\n\n\tvar dataUser = new Data();\n\n\n\n\t//\tImplementation Summary\n\t//\n\t//\t1. Enforce API surface and semantic compatibility with 1.9.x branch\n\t//\t2. Improve the module's maintainability by reducing the storage\n\t//\t\tpaths to a single mechanism.\n\t//\t3. Use the same single mechanism to support \"private\" and \"user\" data.\n\t//\t4. _Never_ expose \"private\" data to user code (TODO: Drop _data, _removeData)\n\t//\t5. Avoid exposing implementation details on user objects (eg. expando properties)\n\t//\t6. Provide a clear path for implementation upgrade to WeakMap in 2014\n\n\tvar rbrace = /^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,\n\t\trmultiDash = /[A-Z]/g;\n\n\tfunction getData(data) {\n\t\tif (data === \"true\") {\n\t\t\treturn true;\n\t\t}\n\n\t\tif (data === \"false\") {\n\t\t\treturn false;\n\t\t}\n\n\t\tif (data === \"null\") {\n\t\t\treturn null;\n\t\t}\n\n\t\t// Only convert to a number if it doesn't change the string\n\t\tif (data === +data + \"\") {\n\t\t\treturn +data;\n\t\t}\n\n\t\tif (rbrace.test(data)) {\n\t\t\treturn JSON.parse(data);\n\t\t}\n\n\t\treturn data;\n\t}\n\n\tfunction dataAttr(elem, key, data) {\n\t\tvar name;\n\n\t\t// If nothing was found internally, try to fetch any\n\t\t// data from the HTML5 data-* attribute\n\t\tif (data === undefined && elem.nodeType === 1) {\n\t\t\tname = \"data-\" + key.replace(rmultiDash, \"-$&\").toLowerCase();\n\t\t\tdata = elem.getAttribute(name);\n\n\t\t\tif (typeof data === \"string\") {\n\t\t\t\ttry {\n\t\t\t\t\tdata = getData(data);\n\t\t\t\t} catch (e) { }\n\n\t\t\t\t// Make sure we set the data so it isn't changed later\n\t\t\t\tdataUser.set(elem, key, data);\n\t\t\t} else {\n\t\t\t\tdata = undefined;\n\t\t\t}\n\t\t}\n\t\treturn data;\n\t}\n\n\tjQuery.extend({\n\t\thasData: function (elem) {\n\t\t\treturn dataUser.hasData(elem) || dataPriv.hasData(elem);\n\t\t},\n\n\t\tdata: function (elem, name, data) {\n\t\t\treturn dataUser.access(elem, name, data);\n\t\t},\n\n\t\tremoveData: function (elem, name) {\n\t\t\tdataUser.remove(elem, name);\n\t\t},\n\n\t\t// TODO: Now that all calls to _data and _removeData have been replaced\n\t\t// with direct calls to dataPriv methods, these can be deprecated.\n\t\t_data: function (elem, name, data) {\n\t\t\treturn dataPriv.access(elem, name, data);\n\t\t},\n\n\t\t_removeData: function (elem, name) {\n\t\t\tdataPriv.remove(elem, name);\n\t\t}\n\t});\n\n\tjQuery.fn.extend({\n\t\tdata: function (key, value) {\n\t\t\tvar i, name, data,\n\t\t\t\telem = this[0],\n\t\t\t\tattrs = elem && elem.attributes;\n\n\t\t\t// Gets all values\n\t\t\tif (key === undefined) {\n\t\t\t\tif (this.length) {\n\t\t\t\t\tdata = dataUser.get(elem);\n\n\t\t\t\t\tif (elem.nodeType === 1 && !dataPriv.get(elem, \"hasDataAttrs\")) {\n\t\t\t\t\t\ti = attrs.length;\n\t\t\t\t\t\twhile (i--) {\n\n\t\t\t\t\t\t\t// Support: IE 11 only\n\t\t\t\t\t\t\t// The attrs elements can be null (trac-14894)\n\t\t\t\t\t\t\tif (attrs[i]) {\n\t\t\t\t\t\t\t\tname = attrs[i].name;\n\t\t\t\t\t\t\t\tif (name.indexOf(\"data-\") === 0) {\n\t\t\t\t\t\t\t\t\tname = camelCase(name.slice(5));\n\t\t\t\t\t\t\t\t\tdataAttr(elem, name, data[name]);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdataPriv.set(elem, \"hasDataAttrs\", true);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn data;\n\t\t\t}\n\n\t\t\t// Sets multiple values\n\t\t\tif (typeof key === \"object\") {\n\t\t\t\treturn this.each(function () {\n\t\t\t\t\tdataUser.set(this, key);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn access(this, function (value) {\n\t\t\t\tvar data;\n\n\t\t\t\t// The calling jQuery object (element matches) is not empty\n\t\t\t\t// (and therefore has an element appears at this[ 0 ]) and the\n\t\t\t\t// `value` parameter was not undefined. An empty jQuery object\n\t\t\t\t// will result in `undefined` for elem = this[ 0 ] which will\n\t\t\t\t// throw an exception if an attempt to read a data cache is made.\n\t\t\t\tif (elem && value === undefined) {\n\n\t\t\t\t\t// Attempt to get data from the cache\n\t\t\t\t\t// The key will always be camelCased in Data\n\t\t\t\t\tdata = dataUser.get(elem, key);\n\t\t\t\t\tif (data !== undefined) {\n\t\t\t\t\t\treturn data;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Attempt to \"discover\" the data in\n\t\t\t\t\t// HTML5 custom data-* attrs\n\t\t\t\t\tdata = dataAttr(elem, key);\n\t\t\t\t\tif (data !== undefined) {\n\t\t\t\t\t\treturn data;\n\t\t\t\t\t}\n\n\t\t\t\t\t// We tried really hard, but the data doesn't exist.\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Set the data...\n\t\t\t\tthis.each(function () {\n\n\t\t\t\t\t// We always store the camelCased key\n\t\t\t\t\tdataUser.set(this, key, value);\n\t\t\t\t});\n\t\t\t}, null, value, arguments.length > 1, null, true);\n\t\t},\n\n\t\tremoveData: function (key) {\n\t\t\treturn this.each(function () {\n\t\t\t\tdataUser.remove(this, key);\n\t\t\t});\n\t\t}\n\t});\n\n\n\tjQuery.extend({\n\t\tqueue: function (elem, type, data) {\n\t\t\tvar queue;\n\n\t\t\tif (elem) {\n\t\t\t\ttype = (type || \"fx\") + \"queue\";\n\t\t\t\tqueue = dataPriv.get(elem, type);\n\n\t\t\t\t// Speed up dequeue by getting out quickly if this is just a lookup\n\t\t\t\tif (data) {\n\t\t\t\t\tif (!queue || Array.isArray(data)) {\n\t\t\t\t\t\tqueue = dataPriv.access(elem, type, jQuery.makeArray(data));\n\t\t\t\t\t} else {\n\t\t\t\t\t\tqueue.push(data);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn queue || [];\n\t\t\t}\n\t\t},\n\n\t\tdequeue: function (elem, type) {\n\t\t\ttype = type || \"fx\";\n\n\t\t\tvar queue = jQuery.queue(elem, type),\n\t\t\t\tstartLength = queue.length,\n\t\t\t\tfn = queue.shift(),\n\t\t\t\thooks = jQuery._queueHooks(elem, type),\n\t\t\t\tnext = function () {\n\t\t\t\t\tjQuery.dequeue(elem, type);\n\t\t\t\t};\n\n\t\t\t// If the fx queue is dequeued, always remove the progress sentinel\n\t\t\tif (fn === \"inprogress\") {\n\t\t\t\tfn = queue.shift();\n\t\t\t\tstartLength--;\n\t\t\t}\n\n\t\t\tif (fn) {\n\n\t\t\t\t// Add a progress sentinel to prevent the fx queue from being\n\t\t\t\t// automatically dequeued\n\t\t\t\tif (type === \"fx\") {\n\t\t\t\t\tqueue.unshift(\"inprogress\");\n\t\t\t\t}\n\n\t\t\t\t// Clear up the last queue stop function\n\t\t\t\tdelete hooks.stop;\n\t\t\t\tfn.call(elem, next, hooks);\n\t\t\t}\n\n\t\t\tif (!startLength && hooks) {\n\t\t\t\thooks.empty.fire();\n\t\t\t}\n\t\t},\n\n\t\t// Not public - generate a queueHooks object, or return the current one\n\t\t_queueHooks: function (elem, type) {\n\t\t\tvar key = type + \"queueHooks\";\n\t\t\treturn dataPriv.get(elem, key) || dataPriv.access(elem, key, {\n\t\t\t\tempty: jQuery.Callbacks(\"once memory\").add(function () {\n\t\t\t\t\tdataPriv.remove(elem, [type + \"queue\", key]);\n\t\t\t\t})\n\t\t\t});\n\t\t}\n\t});\n\n\tjQuery.fn.extend({\n\t\tqueue: function (type, data) {\n\t\t\tvar setter = 2;\n\n\t\t\tif (typeof type !== \"string\") {\n\t\t\t\tdata = type;\n\t\t\t\ttype = \"fx\";\n\t\t\t\tsetter--;\n\t\t\t}\n\n\t\t\tif (arguments.length < setter) {\n\t\t\t\treturn jQuery.queue(this[0], type);\n\t\t\t}\n\n\t\t\treturn data === undefined ?\n\t\t\t\tthis :\n\t\t\t\tthis.each(function () {\n\t\t\t\t\tvar queue = jQuery.queue(this, type, data);\n\n\t\t\t\t\t// Ensure a hooks for this queue\n\t\t\t\t\tjQuery._queueHooks(this, type);\n\n\t\t\t\t\tif (type === \"fx\" && queue[0] !== \"inprogress\") {\n\t\t\t\t\t\tjQuery.dequeue(this, type);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t},\n\t\tdequeue: function (type) {\n\t\t\treturn this.each(function () {\n\t\t\t\tjQuery.dequeue(this, type);\n\t\t\t});\n\t\t},\n\t\tclearQueue: function (type) {\n\t\t\treturn this.queue(type || \"fx\", []);\n\t\t},\n\n\t\t// Get a promise resolved when queues of a certain type\n\t\t// are emptied (fx is the type by default)\n\t\tpromise: function (type, obj) {\n\t\t\tvar tmp,\n\t\t\t\tcount = 1,\n\t\t\t\tdefer = jQuery.Deferred(),\n\t\t\t\telements = this,\n\t\t\t\ti = this.length,\n\t\t\t\tresolve = function () {\n\t\t\t\t\tif (!(--count)) {\n\t\t\t\t\t\tdefer.resolveWith(elements, [elements]);\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\tif (typeof type !== \"string\") {\n\t\t\t\tobj = type;\n\t\t\t\ttype = undefined;\n\t\t\t}\n\t\t\ttype = type || \"fx\";\n\n\t\t\twhile (i--) {\n\t\t\t\ttmp = dataPriv.get(elements[i], type + \"queueHooks\");\n\t\t\t\tif (tmp && tmp.empty) {\n\t\t\t\t\tcount++;\n\t\t\t\t\ttmp.empty.add(resolve);\n\t\t\t\t}\n\t\t\t}\n\t\t\tresolve();\n\t\t\treturn defer.promise(obj);\n\t\t}\n\t});\n\tvar pnum = (/[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/).source;\n\n\tvar rcssNum = new RegExp(\"^(?:([+-])=|)(\" + pnum + \")([a-z%]*)$\", \"i\");\n\n\n\tvar cssExpand = [\"Top\", \"Right\", \"Bottom\", \"Left\"];\n\n\tvar documentElement = document.documentElement;\n\n\n\n\tvar isAttached = function (elem) {\n\t\treturn jQuery.contains(elem.ownerDocument, elem);\n\t},\n\t\tcomposed = { composed: true };\n\n\t// Support: IE 9 - 11+, Edge 12 - 18+, iOS 10.0 - 10.2 only\n\t// Check attachment across shadow DOM boundaries when possible (gh-3504)\n\t// Support: iOS 10.0-10.2 only\n\t// Early iOS 10 versions support `attachShadow` but not `getRootNode`,\n\t// leading to errors. We need to check for `getRootNode`.\n\tif (documentElement.getRootNode) {\n\t\tisAttached = function (elem) {\n\t\t\treturn jQuery.contains(elem.ownerDocument, elem) ||\n\t\t\t\telem.getRootNode(composed) === elem.ownerDocument;\n\t\t};\n\t}\n\tvar isHiddenWithinTree = function (elem, el) {\n\n\t\t// isHiddenWithinTree might be called from jQuery#filter function;\n\t\t// in that case, element will be second argument\n\t\telem = el || elem;\n\n\t\t// Inline style trumps all\n\t\treturn elem.style.display === \"none\" ||\n\t\t\telem.style.display === \"\" &&\n\n\t\t\t// Otherwise, check computed style\n\t\t\t// Support: Firefox <=43 - 45\n\t\t\t// Disconnected elements can have computed display: none, so first confirm that elem is\n\t\t\t// in the document.\n\t\t\tisAttached(elem) &&\n\n\t\t\tjQuery.css(elem, \"display\") === \"none\";\n\t};\n\n\n\n\tfunction adjustCSS(elem, prop, valueParts, tween) {\n\t\tvar adjusted, scale,\n\t\t\tmaxIterations = 20,\n\t\t\tcurrentValue = tween ?\n\t\t\t\tfunction () {\n\t\t\t\t\treturn tween.cur();\n\t\t\t\t} :\n\t\t\t\tfunction () {\n\t\t\t\t\treturn jQuery.css(elem, prop, \"\");\n\t\t\t\t},\n\t\t\tinitial = currentValue(),\n\t\t\tunit = valueParts && valueParts[3] || (jQuery.cssNumber[prop] ? \"\" : \"px\"),\n\n\t\t\t// Starting value computation is required for potential unit mismatches\n\t\t\tinitialInUnit = elem.nodeType &&\n\t\t\t\t(jQuery.cssNumber[prop] || unit !== \"px\" && +initial) &&\n\t\t\t\trcssNum.exec(jQuery.css(elem, prop));\n\n\t\tif (initialInUnit && initialInUnit[3] !== unit) {\n\n\t\t\t// Support: Firefox <=54\n\t\t\t// Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144)\n\t\t\tinitial = initial / 2;\n\n\t\t\t// Trust units reported by jQuery.css\n\t\t\tunit = unit || initialInUnit[3];\n\n\t\t\t// Iteratively approximate from a nonzero starting point\n\t\t\tinitialInUnit = +initial || 1;\n\n\t\t\twhile (maxIterations--) {\n\n\t\t\t\t// Evaluate and update our best guess (doubling guesses that zero out).\n\t\t\t\t// Finish if the scale equals or crosses 1 (making the old*new product non-positive).\n\t\t\t\tjQuery.style(elem, prop, initialInUnit + unit);\n\t\t\t\tif ((1 - scale) * (1 - (scale = currentValue() / initial || 0.5)) <= 0) {\n\t\t\t\t\tmaxIterations = 0;\n\t\t\t\t}\n\t\t\t\tinitialInUnit = initialInUnit / scale;\n\n\t\t\t}\n\n\t\t\tinitialInUnit = initialInUnit * 2;\n\t\t\tjQuery.style(elem, prop, initialInUnit + unit);\n\n\t\t\t// Make sure we update the tween properties later on\n\t\t\tvalueParts = valueParts || [];\n\t\t}\n\n\t\tif (valueParts) {\n\t\t\tinitialInUnit = +initialInUnit || +initial || 0;\n\n\t\t\t// Apply relative offset (+=/-=) if specified\n\t\t\tadjusted = valueParts[1] ?\n\t\t\t\tinitialInUnit + (valueParts[1] + 1) * valueParts[2] :\n\t\t\t\t+valueParts[2];\n\t\t\tif (tween) {\n\t\t\t\ttween.unit = unit;\n\t\t\t\ttween.start = initialInUnit;\n\t\t\t\ttween.end = adjusted;\n\t\t\t}\n\t\t}\n\t\treturn adjusted;\n\t}\n\n\n\tvar defaultDisplayMap = {};\n\n\tfunction getDefaultDisplay(elem) {\n\t\tvar temp,\n\t\t\tdoc = elem.ownerDocument,\n\t\t\tnodeName = elem.nodeName,\n\t\t\tdisplay = defaultDisplayMap[nodeName];\n\n\t\tif (display) {\n\t\t\treturn display;\n\t\t}\n\n\t\ttemp = doc.body.appendChild(doc.createElement(nodeName));\n\t\tdisplay = jQuery.css(temp, \"display\");\n\n\t\ttemp.parentNode.removeChild(temp);\n\n\t\tif (display === \"none\") {\n\t\t\tdisplay = \"block\";\n\t\t}\n\t\tdefaultDisplayMap[nodeName] = display;\n\n\t\treturn display;\n\t}\n\n\tfunction showHide(elements, show) {\n\t\tvar display, elem,\n\t\t\tvalues = [],\n\t\t\tindex = 0,\n\t\t\tlength = elements.length;\n\n\t\t// Determine new display value for elements that need to change\n\t\tfor (; index < length; index++) {\n\t\t\telem = elements[index];\n\t\t\tif (!elem.style) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tdisplay = elem.style.display;\n\t\t\tif (show) {\n\n\t\t\t\t// Since we force visibility upon cascade-hidden elements, an immediate (and slow)\n\t\t\t\t// check is required in this first loop unless we have a nonempty display value (either\n\t\t\t\t// inline or about-to-be-restored)\n\t\t\t\tif (display === \"none\") {\n\t\t\t\t\tvalues[index] = dataPriv.get(elem, \"display\") || null;\n\t\t\t\t\tif (!values[index]) {\n\t\t\t\t\t\telem.style.display = \"\";\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (elem.style.display === \"\" && isHiddenWithinTree(elem)) {\n\t\t\t\t\tvalues[index] = getDefaultDisplay(elem);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (display !== \"none\") {\n\t\t\t\t\tvalues[index] = \"none\";\n\n\t\t\t\t\t// Remember what we're overwriting\n\t\t\t\t\tdataPriv.set(elem, \"display\", display);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Set the display of the elements in a second loop to avoid constant reflow\n\t\tfor (index = 0; index < length; index++) {\n\t\t\tif (values[index] != null) {\n\t\t\t\telements[index].style.display = values[index];\n\t\t\t}\n\t\t}\n\n\t\treturn elements;\n\t}\n\n\tjQuery.fn.extend({\n\t\tshow: function () {\n\t\t\treturn showHide(this, true);\n\t\t},\n\t\thide: function () {\n\t\t\treturn showHide(this);\n\t\t},\n\t\ttoggle: function (state) {\n\t\t\tif (typeof state === \"boolean\") {\n\t\t\t\treturn state ? this.show() : this.hide();\n\t\t\t}\n\n\t\t\treturn this.each(function () {\n\t\t\t\tif (isHiddenWithinTree(this)) {\n\t\t\t\t\tjQuery(this).show();\n\t\t\t\t} else {\n\t\t\t\t\tjQuery(this).hide();\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t});\n\tvar rcheckableType = (/^(?:checkbox|radio)$/i);\n\n\tvar rtagName = (/<([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]*)/i);\n\n\tvar rscriptType = (/^$|^module$|\\/(?:java|ecma)script/i);\n\n\n\n\t(function () {\n\t\tvar fragment = document.createDocumentFragment(),\n\t\t\tdiv = fragment.appendChild(document.createElement(\"div\")),\n\t\t\tinput = document.createElement(\"input\");\n\n\t\t// Support: Android 4.0 - 4.3 only\n\t\t// Check state lost if the name is set (trac-11217)\n\t\t// Support: Windows Web Apps (WWA)\n\t\t// `name` and `type` must use .setAttribute for WWA (trac-14901)\n\t\tinput.setAttribute(\"type\", \"radio\");\n\t\tinput.setAttribute(\"checked\", \"checked\");\n\t\tinput.setAttribute(\"name\", \"t\");\n\n\t\tdiv.appendChild(input);\n\n\t\t// Support: Android <=4.1 only\n\t\t// Older WebKit doesn't clone checked state correctly in fragments\n\t\tsupport.checkClone = div.cloneNode(true).cloneNode(true).lastChild.checked;\n\n\t\t// Support: IE <=11 only\n\t\t// Make sure textarea (and checkbox) defaultValue is properly cloned\n\t\tdiv.innerHTML = \"<textarea>x</textarea>\";\n\t\tsupport.noCloneChecked = !!div.cloneNode(true).lastChild.defaultValue;\n\n\t\t// Support: IE <=9 only\n\t\t// IE <=9 replaces <option> tags with their contents when inserted outside of\n\t\t// the select element.\n\t\tdiv.innerHTML = \"<option></option>\";\n\t\tsupport.option = !!div.lastChild;\n\t})();\n\n\n\t// We have to close these tags to support XHTML (trac-13200)\n\tvar wrapMap = {\n\n\t\t// XHTML parsers do not magically insert elements in the\n\t\t// same way that tag soup parsers do. So we cannot shorten\n\t\t// this by omitting <tbody> or other required elements.\n\t\tthead: [1, \"<table>\", \"</table>\"],\n\t\tcol: [2, \"<table><colgroup>\", \"</colgroup></table>\"],\n\t\ttr: [2, \"<table><tbody>\", \"</tbody></table>\"],\n\t\ttd: [3, \"<table><tbody><tr>\", \"</tr></tbody></table>\"],\n\n\t\t_default: [0, \"\", \"\"]\n\t};\n\n\twrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;\n\twrapMap.th = wrapMap.td;\n\n\t// Support: IE <=9 only\n\tif (!support.option) {\n\t\twrapMap.optgroup = wrapMap.option = [1, \"<select multiple='multiple'>\", \"</select>\"];\n\t}\n\n\n\tfunction getAll(context, tag) {\n\n\t\t// Support: IE <=9 - 11 only\n\t\t// Use typeof to avoid zero-argument method invocation on host objects (trac-15151)\n\t\tvar ret;\n\n\t\tif (typeof context.getElementsByTagName !== \"undefined\") {\n\t\t\tret = context.getElementsByTagName(tag || \"*\");\n\n\t\t} else if (typeof context.querySelectorAll !== \"undefined\") {\n\t\t\tret = context.querySelectorAll(tag || \"*\");\n\n\t\t} else {\n\t\t\tret = [];\n\t\t}\n\n\t\tif (tag === undefined || tag && nodeName(context, tag)) {\n\t\t\treturn jQuery.merge([context], ret);\n\t\t}\n\n\t\treturn ret;\n\t}\n\n\n\t// Mark scripts as having already been evaluated\n\tfunction setGlobalEval(elems, refElements) {\n\t\tvar i = 0,\n\t\t\tl = elems.length;\n\n\t\tfor (; i < l; i++) {\n\t\t\tdataPriv.set(\n\t\t\t\telems[i],\n\t\t\t\t\"globalEval\",\n\t\t\t\t!refElements || dataPriv.get(refElements[i], \"globalEval\")\n\t\t\t);\n\t\t}\n\t}\n\n\n\tvar rhtml = /<|&#?\\w+;/;\n\n\tfunction buildFragment(elems, context, scripts, selection, ignored) {\n\t\tvar elem, tmp, tag, wrap, attached, j,\n\t\t\tfragment = context.createDocumentFragment(),\n\t\t\tnodes = [],\n\t\t\ti = 0,\n\t\t\tl = elems.length;\n\n\t\tfor (; i < l; i++) {\n\t\t\telem = elems[i];\n\n\t\t\tif (elem || elem === 0) {\n\n\t\t\t\t// Add nodes directly\n\t\t\t\tif (toType(elem) === \"object\") {\n\n\t\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\t\tjQuery.merge(nodes, elem.nodeType ? [elem] : elem);\n\n\t\t\t\t\t// Convert non-html into a text node\n\t\t\t\t} else if (!rhtml.test(elem)) {\n\t\t\t\t\tnodes.push(context.createTextNode(elem));\n\n\t\t\t\t\t// Convert html into DOM nodes\n\t\t\t\t} else {\n\t\t\t\t\ttmp = tmp || fragment.appendChild(context.createElement(\"div\"));\n\n\t\t\t\t\t// Deserialize a standard representation\n\t\t\t\t\ttag = (rtagName.exec(elem) || [\"\", \"\"])[1].toLowerCase();\n\t\t\t\t\twrap = wrapMap[tag] || wrapMap._default;\n\t\t\t\t\ttmp.innerHTML = wrap[1] + jQuery.htmlPrefilter(elem) + wrap[2];\n\n\t\t\t\t\t// Descend through wrappers to the right content\n\t\t\t\t\tj = wrap[0];\n\t\t\t\t\twhile (j--) {\n\t\t\t\t\t\ttmp = tmp.lastChild;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\t\tjQuery.merge(nodes, tmp.childNodes);\n\n\t\t\t\t\t// Remember the top-level container\n\t\t\t\t\ttmp = fragment.firstChild;\n\n\t\t\t\t\t// Ensure the created nodes are orphaned (trac-12392)\n\t\t\t\t\ttmp.textContent = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Remove wrapper from fragment\n\t\tfragment.textContent = \"\";\n\n\t\ti = 0;\n\t\twhile ((elem = nodes[i++])) {\n\n\t\t\t// Skip elements already in the context collection (trac-4087)\n\t\t\tif (selection && jQuery.inArray(elem, selection) > -1) {\n\t\t\t\tif (ignored) {\n\t\t\t\t\tignored.push(elem);\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tattached = isAttached(elem);\n\n\t\t\t// Append to fragment\n\t\t\ttmp = getAll(fragment.appendChild(elem), \"script\");\n\n\t\t\t// Preserve script evaluation history\n\t\t\tif (attached) {\n\t\t\t\tsetGlobalEval(tmp);\n\t\t\t}\n\n\t\t\t// Capture executables\n\t\t\tif (scripts) {\n\t\t\t\tj = 0;\n\t\t\t\twhile ((elem = tmp[j++])) {\n\t\t\t\t\tif (rscriptType.test(elem.type || \"\")) {\n\t\t\t\t\t\tscripts.push(elem);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn fragment;\n\t}\n\n\n\tvar rtypenamespace = /^([^.]*)(?:\\.(.+)|)/;\n\n\tfunction returnTrue() {\n\t\treturn true;\n\t}\n\n\tfunction returnFalse() {\n\t\treturn false;\n\t}\n\n\tfunction on(elem, types, selector, data, fn, one) {\n\t\tvar origFn, type;\n\n\t\t// Types can be a map of types/handlers\n\t\tif (typeof types === \"object\") {\n\n\t\t\t// ( types-Object, selector, data )\n\t\t\tif (typeof selector !== \"string\") {\n\n\t\t\t\t// ( types-Object, data )\n\t\t\t\tdata = data || selector;\n\t\t\t\tselector = undefined;\n\t\t\t}\n\t\t\tfor (type in types) {\n\t\t\t\ton(elem, type, selector, data, types[type], one);\n\t\t\t}\n\t\t\treturn elem;\n\t\t}\n\n\t\tif (data == null && fn == null) {\n\n\t\t\t// ( types, fn )\n\t\t\tfn = selector;\n\t\t\tdata = selector = undefined;\n\t\t} else if (fn == null) {\n\t\t\tif (typeof selector === \"string\") {\n\n\t\t\t\t// ( types, selector, fn )\n\t\t\t\tfn = data;\n\t\t\t\tdata = undefined;\n\t\t\t} else {\n\n\t\t\t\t// ( types, data, fn )\n\t\t\t\tfn = data;\n\t\t\t\tdata = selector;\n\t\t\t\tselector = undefined;\n\t\t\t}\n\t\t}\n\t\tif (fn === false) {\n\t\t\tfn = returnFalse;\n\t\t} else if (!fn) {\n\t\t\treturn elem;\n\t\t}\n\n\t\tif (one === 1) {\n\t\t\torigFn = fn;\n\t\t\tfn = function (event) {\n\n\t\t\t\t// Can use an empty set, since event contains the info\n\t\t\t\tjQuery().off(event);\n\t\t\t\treturn origFn.apply(this, arguments);\n\t\t\t};\n\n\t\t\t// Use same guid so caller can remove using origFn\n\t\t\tfn.guid = origFn.guid || (origFn.guid = jQuery.guid++);\n\t\t}\n\t\treturn elem.each(function () {\n\t\t\tjQuery.event.add(this, types, fn, data, selector);\n\t\t});\n\t}\n\n\t/*\n\t * Helper functions for managing events -- not part of the public interface.\n\t * Props to Dean Edwards' addEvent library for many of the ideas.\n\t */\n\tjQuery.event = {\n\n\t\tglobal: {},\n\n\t\tadd: function (elem, types, handler, data, selector) {\n\n\t\t\tvar handleObjIn, eventHandle, tmp,\n\t\t\t\tevents, t, handleObj,\n\t\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\t\telemData = dataPriv.get(elem);\n\n\t\t\t// Only attach events to objects that accept data\n\t\t\tif (!acceptData(elem)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Caller can pass in an object of custom data in lieu of the handler\n\t\t\tif (handler.handler) {\n\t\t\t\thandleObjIn = handler;\n\t\t\t\thandler = handleObjIn.handler;\n\t\t\t\tselector = handleObjIn.selector;\n\t\t\t}\n\n\t\t\t// Ensure that invalid selectors throw exceptions at attach time\n\t\t\t// Evaluate against documentElement in case elem is a non-element node (e.g., document)\n\t\t\tif (selector) {\n\t\t\t\tjQuery.find.matchesSelector(documentElement, selector);\n\t\t\t}\n\n\t\t\t// Make sure that the handler has a unique ID, used to find/remove it later\n\t\t\tif (!handler.guid) {\n\t\t\t\thandler.guid = jQuery.guid++;\n\t\t\t}\n\n\t\t\t// Init the element's event structure and main handler, if this is the first\n\t\t\tif (!(events = elemData.events)) {\n\t\t\t\tevents = elemData.events = Object.create(null);\n\t\t\t}\n\t\t\tif (!(eventHandle = elemData.handle)) {\n\t\t\t\teventHandle = elemData.handle = function (e) {\n\n\t\t\t\t\t// Discard the second event of a jQuery.event.trigger() and\n\t\t\t\t\t// when an event is called after a page has unloaded\n\t\t\t\t\treturn typeof jQuery !== \"undefined\" && jQuery.event.triggered !== e.type ?\n\t\t\t\t\t\tjQuery.event.dispatch.apply(elem, arguments) : undefined;\n\t\t\t\t};\n\t\t\t}\n\n\t\t\t// Handle multiple events separated by a space\n\t\t\ttypes = (types || \"\").match(rnothtmlwhite) || [\"\"];\n\t\t\tt = types.length;\n\t\t\twhile (t--) {\n\t\t\t\ttmp = rtypenamespace.exec(types[t]) || [];\n\t\t\t\ttype = origType = tmp[1];\n\t\t\t\tnamespaces = (tmp[2] || \"\").split(\".\").sort();\n\n\t\t\t\t// There *must* be a type, no attaching namespace-only handlers\n\t\t\t\tif (!type) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// If event changes its type, use the special event handlers for the changed type\n\t\t\t\tspecial = jQuery.event.special[type] || {};\n\n\t\t\t\t// If selector defined, determine special event api type, otherwise given type\n\t\t\t\ttype = (selector ? special.delegateType : special.bindType) || type;\n\n\t\t\t\t// Update special based on newly reset type\n\t\t\t\tspecial = jQuery.event.special[type] || {};\n\n\t\t\t\t// handleObj is passed to all event handlers\n\t\t\t\thandleObj = jQuery.extend({\n\t\t\t\t\ttype: type,\n\t\t\t\t\torigType: origType,\n\t\t\t\t\tdata: data,\n\t\t\t\t\thandler: handler,\n\t\t\t\t\tguid: handler.guid,\n\t\t\t\t\tselector: selector,\n\t\t\t\t\tneedsContext: selector && jQuery.expr.match.needsContext.test(selector),\n\t\t\t\t\tnamespace: namespaces.join(\".\")\n\t\t\t\t}, handleObjIn);\n\n\t\t\t\t// Init the event handler queue if we're the first\n\t\t\t\tif (!(handlers = events[type])) {\n\t\t\t\t\thandlers = events[type] = [];\n\t\t\t\t\thandlers.delegateCount = 0;\n\n\t\t\t\t\t// Only use addEventListener if the special events handler returns false\n\t\t\t\t\tif (!special.setup ||\n\t\t\t\t\t\tspecial.setup.call(elem, data, namespaces, eventHandle) === false) {\n\n\t\t\t\t\t\tif (elem.addEventListener) {\n\t\t\t\t\t\t\telem.addEventListener(type, eventHandle);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (special.add) {\n\t\t\t\t\tspecial.add.call(elem, handleObj);\n\n\t\t\t\t\tif (!handleObj.handler.guid) {\n\t\t\t\t\t\thandleObj.handler.guid = handler.guid;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Add to the element's handler list, delegates in front\n\t\t\t\tif (selector) {\n\t\t\t\t\thandlers.splice(handlers.delegateCount++, 0, handleObj);\n\t\t\t\t} else {\n\t\t\t\t\thandlers.push(handleObj);\n\t\t\t\t}\n\n\t\t\t\t// Keep track of which events have ever been used, for event optimization\n\t\t\t\tjQuery.event.global[type] = true;\n\t\t\t}\n\n\t\t},\n\n\t\t// Detach an event or set of events from an element\n\t\tremove: function (elem, types, handler, selector, mappedTypes) {\n\n\t\t\tvar j, origCount, tmp,\n\t\t\t\tevents, t, handleObj,\n\t\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\t\telemData = dataPriv.hasData(elem) && dataPriv.get(elem);\n\n\t\t\tif (!elemData || !(events = elemData.events)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Once for each type.namespace in types; type may be omitted\n\t\t\ttypes = (types || \"\").match(rnothtmlwhite) || [\"\"];\n\t\t\tt = types.length;\n\t\t\twhile (t--) {\n\t\t\t\ttmp = rtypenamespace.exec(types[t]) || [];\n\t\t\t\ttype = origType = tmp[1];\n\t\t\t\tnamespaces = (tmp[2] || \"\").split(\".\").sort();\n\n\t\t\t\t// Unbind all events (on this namespace, if provided) for the element\n\t\t\t\tif (!type) {\n\t\t\t\t\tfor (type in events) {\n\t\t\t\t\t\tjQuery.event.remove(elem, type + types[t], handler, selector, true);\n\t\t\t\t\t}\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tspecial = jQuery.event.special[type] || {};\n\t\t\t\ttype = (selector ? special.delegateType : special.bindType) || type;\n\t\t\t\thandlers = events[type] || [];\n\t\t\t\ttmp = tmp[2] &&\n\t\t\t\t\tnew RegExp(\"(^|\\\\.)\" + namespaces.join(\"\\\\.(?:.*\\\\.|)\") + \"(\\\\.|$)\");\n\n\t\t\t\t// Remove matching events\n\t\t\t\torigCount = j = handlers.length;\n\t\t\t\twhile (j--) {\n\t\t\t\t\thandleObj = handlers[j];\n\n\t\t\t\t\tif ((mappedTypes || origType === handleObj.origType) &&\n\t\t\t\t\t\t(!handler || handler.guid === handleObj.guid) &&\n\t\t\t\t\t\t(!tmp || tmp.test(handleObj.namespace)) &&\n\t\t\t\t\t\t(!selector || selector === handleObj.selector ||\n\t\t\t\t\t\t\tselector === \"**\" && handleObj.selector)) {\n\t\t\t\t\t\thandlers.splice(j, 1);\n\n\t\t\t\t\t\tif (handleObj.selector) {\n\t\t\t\t\t\t\thandlers.delegateCount--;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (special.remove) {\n\t\t\t\t\t\t\tspecial.remove.call(elem, handleObj);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Remove generic event handler if we removed something and no more handlers exist\n\t\t\t\t// (avoids potential for endless recursion during removal of special event handlers)\n\t\t\t\tif (origCount && !handlers.length) {\n\t\t\t\t\tif (!special.teardown ||\n\t\t\t\t\t\tspecial.teardown.call(elem, namespaces, elemData.handle) === false) {\n\n\t\t\t\t\t\tjQuery.removeEvent(elem, type, elemData.handle);\n\t\t\t\t\t}\n\n\t\t\t\t\tdelete events[type];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove data and the expando if it's no longer used\n\t\t\tif (jQuery.isEmptyObject(events)) {\n\t\t\t\tdataPriv.remove(elem, \"handle events\");\n\t\t\t}\n\t\t},\n\n\t\tdispatch: function (nativeEvent) {\n\n\t\t\tvar i, j, ret, matched, handleObj, handlerQueue,\n\t\t\t\targs = new Array(arguments.length),\n\n\t\t\t\t// Make a writable jQuery.Event from the native event object\n\t\t\t\tevent = jQuery.event.fix(nativeEvent),\n\n\t\t\t\thandlers = (\n\t\t\t\t\tdataPriv.get(this, \"events\") || Object.create(null)\n\t\t\t\t)[event.type] || [],\n\t\t\t\tspecial = jQuery.event.special[event.type] || {};\n\n\t\t\t// Use the fix-ed jQuery.Event rather than the (read-only) native event\n\t\t\targs[0] = event;\n\n\t\t\tfor (i = 1; i < arguments.length; i++) {\n\t\t\t\targs[i] = arguments[i];\n\t\t\t}\n\n\t\t\tevent.delegateTarget = this;\n\n\t\t\t// Call the preDispatch hook for the mapped type, and let it bail if desired\n\t\t\tif (special.preDispatch && special.preDispatch.call(this, event) === false) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Determine handlers\n\t\t\thandlerQueue = jQuery.event.handlers.call(this, event, handlers);\n\n\t\t\t// Run delegates first; they may want to stop propagation beneath us\n\t\t\ti = 0;\n\t\t\twhile ((matched = handlerQueue[i++]) && !event.isPropagationStopped()) {\n\t\t\t\tevent.currentTarget = matched.elem;\n\n\t\t\t\tj = 0;\n\t\t\t\twhile ((handleObj = matched.handlers[j++]) &&\n\t\t\t\t\t!event.isImmediatePropagationStopped()) {\n\n\t\t\t\t\t// If the event is namespaced, then each handler is only invoked if it is\n\t\t\t\t\t// specially universal or its namespaces are a superset of the event's.\n\t\t\t\t\tif (!event.rnamespace || handleObj.namespace === false ||\n\t\t\t\t\t\tevent.rnamespace.test(handleObj.namespace)) {\n\n\t\t\t\t\t\tevent.handleObj = handleObj;\n\t\t\t\t\t\tevent.data = handleObj.data;\n\n\t\t\t\t\t\tret = ((jQuery.event.special[handleObj.origType] || {}).handle ||\n\t\t\t\t\t\t\thandleObj.handler).apply(matched.elem, args);\n\n\t\t\t\t\t\tif (ret !== undefined) {\n\t\t\t\t\t\t\tif ((event.result = ret) === false) {\n\t\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Call the postDispatch hook for the mapped type\n\t\t\tif (special.postDispatch) {\n\t\t\t\tspecial.postDispatch.call(this, event);\n\t\t\t}\n\n\t\t\treturn event.result;\n\t\t},\n\n\t\thandlers: function (event, handlers) {\n\t\t\tvar i, handleObj, sel, matchedHandlers, matchedSelectors,\n\t\t\t\thandlerQueue = [],\n\t\t\t\tdelegateCount = handlers.delegateCount,\n\t\t\t\tcur = event.target;\n\n\t\t\t// Find delegate handlers\n\t\t\tif (delegateCount &&\n\n\t\t\t\t// Support: IE <=9\n\t\t\t\t// Black-hole SVG <use> instance trees (trac-13180)\n\t\t\t\tcur.nodeType &&\n\n\t\t\t\t// Support: Firefox <=42\n\t\t\t\t// Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861)\n\t\t\t\t// https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click\n\t\t\t\t// Support: IE 11 only\n\t\t\t\t// ...but not arrow key \"clicks\" of radio inputs, which can have `button` -1 (gh-2343)\n\t\t\t\t!(event.type === \"click\" && event.button >= 1)) {\n\n\t\t\t\tfor (; cur !== this; cur = cur.parentNode || this) {\n\n\t\t\t\t\t// Don't check non-elements (trac-13208)\n\t\t\t\t\t// Don't process clicks on disabled elements (trac-6911, trac-8165, trac-11382, trac-11764)\n\t\t\t\t\tif (cur.nodeType === 1 && !(event.type === \"click\" && cur.disabled === true)) {\n\t\t\t\t\t\tmatchedHandlers = [];\n\t\t\t\t\t\tmatchedSelectors = {};\n\t\t\t\t\t\tfor (i = 0; i < delegateCount; i++) {\n\t\t\t\t\t\t\thandleObj = handlers[i];\n\n\t\t\t\t\t\t\t// Don't conflict with Object.prototype properties (trac-13203)\n\t\t\t\t\t\t\tsel = handleObj.selector + \" \";\n\n\t\t\t\t\t\t\tif (matchedSelectors[sel] === undefined) {\n\t\t\t\t\t\t\t\tmatchedSelectors[sel] = handleObj.needsContext ?\n\t\t\t\t\t\t\t\t\tjQuery(sel, this).index(cur) > -1 :\n\t\t\t\t\t\t\t\t\tjQuery.find(sel, this, null, [cur]).length;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (matchedSelectors[sel]) {\n\t\t\t\t\t\t\t\tmatchedHandlers.push(handleObj);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (matchedHandlers.length) {\n\t\t\t\t\t\t\thandlerQueue.push({ elem: cur, handlers: matchedHandlers });\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Add the remaining (directly-bound) handlers\n\t\t\tcur = this;\n\t\t\tif (delegateCount < handlers.length) {\n\t\t\t\thandlerQueue.push({ elem: cur, handlers: handlers.slice(delegateCount) });\n\t\t\t}\n\n\t\t\treturn handlerQueue;\n\t\t},\n\n\t\taddProp: function (name, hook) {\n\t\t\tObject.defineProperty(jQuery.Event.prototype, name, {\n\t\t\t\tenumerable: true,\n\t\t\t\tconfigurable: true,\n\n\t\t\t\tget: isFunction(hook) ?\n\t\t\t\t\tfunction () {\n\t\t\t\t\t\tif (this.originalEvent) {\n\t\t\t\t\t\t\treturn hook(this.originalEvent);\n\t\t\t\t\t\t}\n\t\t\t\t\t} :\n\t\t\t\t\tfunction () {\n\t\t\t\t\t\tif (this.originalEvent) {\n\t\t\t\t\t\t\treturn this.originalEvent[name];\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\n\t\t\t\tset: function (value) {\n\t\t\t\t\tObject.defineProperty(this, name, {\n\t\t\t\t\t\tenumerable: true,\n\t\t\t\t\t\tconfigurable: true,\n\t\t\t\t\t\twritable: true,\n\t\t\t\t\t\tvalue: value\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\tfix: function (originalEvent) {\n\t\t\treturn originalEvent[jQuery.expando] ?\n\t\t\t\toriginalEvent :\n\t\t\t\tnew jQuery.Event(originalEvent);\n\t\t},\n\n\t\tspecial: {\n\t\t\tload: {\n\n\t\t\t\t// Prevent triggered image.load events from bubbling to window.load\n\t\t\t\tnoBubble: true\n\t\t\t},\n\t\t\tclick: {\n\n\t\t\t\t// Utilize native event to ensure correct state for checkable inputs\n\t\t\t\tsetup: function (data) {\n\n\t\t\t\t\t// For mutual compressibility with _default, replace `this` access with a local var.\n\t\t\t\t\t// `|| data` is dead code meant only to preserve the variable through minification.\n\t\t\t\t\tvar el = this || data;\n\n\t\t\t\t\t// Claim the first handler\n\t\t\t\t\tif (rcheckableType.test(el.type) &&\n\t\t\t\t\t\tel.click && nodeName(el, \"input\")) {\n\n\t\t\t\t\t\t// dataPriv.set( el, \"click\", ... )\n\t\t\t\t\t\tleverageNative(el, \"click\", true);\n\t\t\t\t\t}\n\n\t\t\t\t\t// Return false to allow normal processing in the caller\n\t\t\t\t\treturn false;\n\t\t\t\t},\n\t\t\t\ttrigger: function (data) {\n\n\t\t\t\t\t// For mutual compressibility with _default, replace `this` access with a local var.\n\t\t\t\t\t// `|| data` is dead code meant only to preserve the variable through minification.\n\t\t\t\t\tvar el = this || data;\n\n\t\t\t\t\t// Force setup before triggering a click\n\t\t\t\t\tif (rcheckableType.test(el.type) &&\n\t\t\t\t\t\tel.click && nodeName(el, \"input\")) {\n\n\t\t\t\t\t\tleverageNative(el, \"click\");\n\t\t\t\t\t}\n\n\t\t\t\t\t// Return non-false to allow normal event-path propagation\n\t\t\t\t\treturn true;\n\t\t\t\t},\n\n\t\t\t\t// For cross-browser consistency, suppress native .click() on links\n\t\t\t\t// Also prevent it if we're currently inside a leveraged native-event stack\n\t\t\t\t_default: function (event) {\n\t\t\t\t\tvar target = event.target;\n\t\t\t\t\treturn rcheckableType.test(target.type) &&\n\t\t\t\t\t\ttarget.click && nodeName(target, \"input\") &&\n\t\t\t\t\t\tdataPriv.get(target, \"click\") ||\n\t\t\t\t\t\tnodeName(target, \"a\");\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tbeforeunload: {\n\t\t\t\tpostDispatch: function (event) {\n\n\t\t\t\t\t// Support: Firefox 20+\n\t\t\t\t\t// Firefox doesn't alert if the returnValue field is not set.\n\t\t\t\t\tif (event.result !== undefined && event.originalEvent) {\n\t\t\t\t\t\tevent.originalEvent.returnValue = event.result;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t// Ensure the presence of an event listener that handles manually-triggered\n\t// synthetic events by interrupting progress until reinvoked in response to\n\t// *native* events that it fires directly, ensuring that state changes have\n\t// already occurred before other listeners are invoked.\n\tfunction leverageNative(el, type, isSetup) {\n\n\t\t// Missing `isSetup` indicates a trigger call, which must force setup through jQuery.event.add\n\t\tif (!isSetup) {\n\t\t\tif (dataPriv.get(el, type) === undefined) {\n\t\t\t\tjQuery.event.add(el, type, returnTrue);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\t// Register the controller as a special universal handler for all event namespaces\n\t\tdataPriv.set(el, type, false);\n\t\tjQuery.event.add(el, type, {\n\t\t\tnamespace: false,\n\t\t\thandler: function (event) {\n\t\t\t\tvar result,\n\t\t\t\t\tsaved = dataPriv.get(this, type);\n\n\t\t\t\tif ((event.isTrigger & 1) && this[type]) {\n\n\t\t\t\t\t// Interrupt processing of the outer synthetic .trigger()ed event\n\t\t\t\t\tif (!saved) {\n\n\t\t\t\t\t\t// Store arguments for use when handling the inner native event\n\t\t\t\t\t\t// There will always be at least one argument (an event object), so this array\n\t\t\t\t\t\t// will not be confused with a leftover capture object.\n\t\t\t\t\t\tsaved = slice.call(arguments);\n\t\t\t\t\t\tdataPriv.set(this, type, saved);\n\n\t\t\t\t\t\t// Trigger the native event and capture its result\n\t\t\t\t\t\tthis[type]();\n\t\t\t\t\t\tresult = dataPriv.get(this, type);\n\t\t\t\t\t\tdataPriv.set(this, type, false);\n\n\t\t\t\t\t\tif (saved !== result) {\n\n\t\t\t\t\t\t\t// Cancel the outer synthetic event\n\t\t\t\t\t\t\tevent.stopImmediatePropagation();\n\t\t\t\t\t\t\tevent.preventDefault();\n\n\t\t\t\t\t\t\treturn result;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// If this is an inner synthetic event for an event with a bubbling surrogate\n\t\t\t\t\t\t// (focus or blur), assume that the surrogate already propagated from triggering\n\t\t\t\t\t\t// the native event and prevent that from happening again here.\n\t\t\t\t\t\t// This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the\n\t\t\t\t\t\t// bubbling surrogate propagates *after* the non-bubbling base), but that seems\n\t\t\t\t\t\t// less bad than duplication.\n\t\t\t\t\t} else if ((jQuery.event.special[type] || {}).delegateType) {\n\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t}\n\n\t\t\t\t\t// If this is a native event triggered above, everything is now in order\n\t\t\t\t\t// Fire an inner synthetic event with the original arguments\n\t\t\t\t} else if (saved) {\n\n\t\t\t\t\t// ...and capture the result\n\t\t\t\t\tdataPriv.set(this, type, jQuery.event.trigger(\n\t\t\t\t\t\tsaved[0],\n\t\t\t\t\t\tsaved.slice(1),\n\t\t\t\t\t\tthis\n\t\t\t\t\t));\n\n\t\t\t\t\t// Abort handling of the native event by all jQuery handlers while allowing\n\t\t\t\t\t// native handlers on the same element to run. On target, this is achieved\n\t\t\t\t\t// by stopping immediate propagation just on the jQuery event. However,\n\t\t\t\t\t// the native event is re-wrapped by a jQuery one on each level of the\n\t\t\t\t\t// propagation so the only way to stop it for jQuery is to stop it for\n\t\t\t\t\t// everyone via native `stopPropagation()`. This is not a problem for\n\t\t\t\t\t// focus/blur which don't bubble, but it does also stop click on checkboxes\n\t\t\t\t\t// and radios. We accept this limitation.\n\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\tevent.isImmediatePropagationStopped = returnTrue;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\tjQuery.removeEvent = function (elem, type, handle) {\n\n\t\t// This \"if\" is needed for plain objects\n\t\tif (elem.removeEventListener) {\n\t\t\telem.removeEventListener(type, handle);\n\t\t}\n\t};\n\n\tjQuery.Event = function (src, props) {\n\n\t\t// Allow instantiation without the 'new' keyword\n\t\tif (!(this instanceof jQuery.Event)) {\n\t\t\treturn new jQuery.Event(src, props);\n\t\t}\n\n\t\t// Event object\n\t\tif (src && src.type) {\n\t\t\tthis.originalEvent = src;\n\t\t\tthis.type = src.type;\n\n\t\t\t// Events bubbling up the document may have been marked as prevented\n\t\t\t// by a handler lower down the tree; reflect the correct value.\n\t\t\tthis.isDefaultPrevented = src.defaultPrevented ||\n\t\t\t\tsrc.defaultPrevented === undefined &&\n\n\t\t\t\t// Support: Android <=2.3 only\n\t\t\t\tsrc.returnValue === false ?\n\t\t\t\treturnTrue :\n\t\t\t\treturnFalse;\n\n\t\t\t// Create target properties\n\t\t\t// Support: Safari <=6 - 7 only\n\t\t\t// Target should not be a text node (trac-504, trac-13143)\n\t\t\tthis.target = (src.target && src.target.nodeType === 3) ?\n\t\t\t\tsrc.target.parentNode :\n\t\t\t\tsrc.target;\n\n\t\t\tthis.currentTarget = src.currentTarget;\n\t\t\tthis.relatedTarget = src.relatedTarget;\n\n\t\t\t// Event type\n\t\t} else {\n\t\t\tthis.type = src;\n\t\t}\n\n\t\t// Put explicitly provided properties onto the event object\n\t\tif (props) {\n\t\t\tjQuery.extend(this, props);\n\t\t}\n\n\t\t// Create a timestamp if incoming event doesn't have one\n\t\tthis.timeStamp = src && src.timeStamp || Date.now();\n\n\t\t// Mark it as fixed\n\t\tthis[jQuery.expando] = true;\n\t};\n\n\t// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding\n\t// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html\n\tjQuery.Event.prototype = {\n\t\tconstructor: jQuery.Event,\n\t\tisDefaultPrevented: returnFalse,\n\t\tisPropagationStopped: returnFalse,\n\t\tisImmediatePropagationStopped: returnFalse,\n\t\tisSimulated: false,\n\n\t\tpreventDefault: function () {\n\t\t\tvar e = this.originalEvent;\n\n\t\t\tthis.isDefaultPrevented = returnTrue;\n\n\t\t\tif (e && !this.isSimulated) {\n\t\t\t\te.preventDefault();\n\t\t\t}\n\t\t},\n\t\tstopPropagation: function () {\n\t\t\tvar e = this.originalEvent;\n\n\t\t\tthis.isPropagationStopped = returnTrue;\n\n\t\t\tif (e && !this.isSimulated) {\n\t\t\t\te.stopPropagation();\n\t\t\t}\n\t\t},\n\t\tstopImmediatePropagation: function () {\n\t\t\tvar e = this.originalEvent;\n\n\t\t\tthis.isImmediatePropagationStopped = returnTrue;\n\n\t\t\tif (e && !this.isSimulated) {\n\t\t\t\te.stopImmediatePropagation();\n\t\t\t}\n\n\t\t\tthis.stopPropagation();\n\t\t}\n\t};\n\n\t// Includes all common event props including KeyEvent and MouseEvent specific props\n\tjQuery.each({\n\t\taltKey: true,\n\t\tbubbles: true,\n\t\tcancelable: true,\n\t\tchangedTouches: true,\n\t\tctrlKey: true,\n\t\tdetail: true,\n\t\teventPhase: true,\n\t\tmetaKey: true,\n\t\tpageX: true,\n\t\tpageY: true,\n\t\tshiftKey: true,\n\t\tview: true,\n\t\t\"char\": true,\n\t\tcode: true,\n\t\tcharCode: true,\n\t\tkey: true,\n\t\tkeyCode: true,\n\t\tbutton: true,\n\t\tbuttons: true,\n\t\tclientX: true,\n\t\tclientY: true,\n\t\toffsetX: true,\n\t\toffsetY: true,\n\t\tpointerId: true,\n\t\tpointerType: true,\n\t\tscreenX: true,\n\t\tscreenY: true,\n\t\ttargetTouches: true,\n\t\ttoElement: true,\n\t\ttouches: true,\n\t\twhich: true\n\t}, jQuery.event.addProp);\n\n\tjQuery.each({ focus: \"focusin\", blur: \"focusout\" }, function (type, delegateType) {\n\n\t\tfunction focusMappedHandler(nativeEvent) {\n\t\t\tif (document.documentMode) {\n\n\t\t\t\t// Support: IE 11+\n\t\t\t\t// Attach a single focusin/focusout handler on the document while someone wants\n\t\t\t\t// focus/blur. This is because the former are synchronous in IE while the latter\n\t\t\t\t// are async. In other browsers, all those handlers are invoked synchronously.\n\n\t\t\t\t// `handle` from private data would already wrap the event, but we need\n\t\t\t\t// to change the `type` here.\n\t\t\t\tvar handle = dataPriv.get(this, \"handle\"),\n\t\t\t\t\tevent = jQuery.event.fix(nativeEvent);\n\t\t\t\tevent.type = nativeEvent.type === \"focusin\" ? \"focus\" : \"blur\";\n\t\t\t\tevent.isSimulated = true;\n\n\t\t\t\t// First, handle focusin/focusout\n\t\t\t\thandle(nativeEvent);\n\n\t\t\t\t// ...then, handle focus/blur\n\t\t\t\t//\n\t\t\t\t// focus/blur don't bubble while focusin/focusout do; simulate the former by only\n\t\t\t\t// invoking the handler at the lower level.\n\t\t\t\tif (event.target === event.currentTarget) {\n\n\t\t\t\t\t// The setup part calls `leverageNative`, which, in turn, calls\n\t\t\t\t\t// `jQuery.event.add`, so event handle will already have been set\n\t\t\t\t\t// by this point.\n\t\t\t\t\thandle(event);\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\t// For non-IE browsers, attach a single capturing handler on the document\n\t\t\t\t// while someone wants focusin/focusout.\n\t\t\t\tjQuery.event.simulate(delegateType, nativeEvent.target,\n\t\t\t\t\tjQuery.event.fix(nativeEvent));\n\t\t\t}\n\t\t}\n\n\t\tjQuery.event.special[type] = {\n\n\t\t\t// Utilize native event if possible so blur/focus sequence is correct\n\t\t\tsetup: function () {\n\n\t\t\t\tvar attaches;\n\n\t\t\t\t// Claim the first handler\n\t\t\t\t// dataPriv.set( this, \"focus\", ... )\n\t\t\t\t// dataPriv.set( this, \"blur\", ... )\n\t\t\t\tleverageNative(this, type, true);\n\n\t\t\t\tif (document.documentMode) {\n\n\t\t\t\t\t// Support: IE 9 - 11+\n\t\t\t\t\t// We use the same native handler for focusin & focus (and focusout & blur)\n\t\t\t\t\t// so we need to coordinate setup & teardown parts between those events.\n\t\t\t\t\t// Use `delegateType` as the key as `type` is already used by `leverageNative`.\n\t\t\t\t\tattaches = dataPriv.get(this, delegateType);\n\t\t\t\t\tif (!attaches) {\n\t\t\t\t\t\tthis.addEventListener(delegateType, focusMappedHandler);\n\t\t\t\t\t}\n\t\t\t\t\tdataPriv.set(this, delegateType, (attaches || 0) + 1);\n\t\t\t\t} else {\n\n\t\t\t\t\t// Return false to allow normal processing in the caller\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\t\t\ttrigger: function () {\n\n\t\t\t\t// Force setup before trigger\n\t\t\t\tleverageNative(this, type);\n\n\t\t\t\t// Return non-false to allow normal event-path propagation\n\t\t\t\treturn true;\n\t\t\t},\n\n\t\t\tteardown: function () {\n\t\t\t\tvar attaches;\n\n\t\t\t\tif (document.documentMode) {\n\t\t\t\t\tattaches = dataPriv.get(this, delegateType) - 1;\n\t\t\t\t\tif (!attaches) {\n\t\t\t\t\t\tthis.removeEventListener(delegateType, focusMappedHandler);\n\t\t\t\t\t\tdataPriv.remove(this, delegateType);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdataPriv.set(this, delegateType, attaches);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\n\t\t\t\t\t// Return false to indicate standard teardown should be applied\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// Suppress native focus or blur if we're currently inside\n\t\t\t// a leveraged native-event stack\n\t\t\t_default: function (event) {\n\t\t\t\treturn dataPriv.get(event.target, type);\n\t\t\t},\n\n\t\t\tdelegateType: delegateType\n\t\t};\n\n\t\t// Support: Firefox <=44\n\t\t// Firefox doesn't have focus(in | out) events\n\t\t// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787\n\t\t//\n\t\t// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1\n\t\t// focus(in | out) events fire after focus & blur events,\n\t\t// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order\n\t\t// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857\n\t\t//\n\t\t// Support: IE 9 - 11+\n\t\t// To preserve relative focusin/focus & focusout/blur event order guaranteed on the 3.x branch,\n\t\t// attach a single handler for both events in IE.\n\t\tjQuery.event.special[delegateType] = {\n\t\t\tsetup: function () {\n\n\t\t\t\t// Handle: regular nodes (via `this.ownerDocument`), window\n\t\t\t\t// (via `this.document`) & document (via `this`).\n\t\t\t\tvar doc = this.ownerDocument || this.document || this,\n\t\t\t\t\tdataHolder = document.documentMode ? this : doc,\n\t\t\t\t\tattaches = dataPriv.get(dataHolder, delegateType);\n\n\t\t\t\t// Support: IE 9 - 11+\n\t\t\t\t// We use the same native handler for focusin & focus (and focusout & blur)\n\t\t\t\t// so we need to coordinate setup & teardown parts between those events.\n\t\t\t\t// Use `delegateType` as the key as `type` is already used by `leverageNative`.\n\t\t\t\tif (!attaches) {\n\t\t\t\t\tif (document.documentMode) {\n\t\t\t\t\t\tthis.addEventListener(delegateType, focusMappedHandler);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdoc.addEventListener(type, focusMappedHandler, true);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tdataPriv.set(dataHolder, delegateType, (attaches || 0) + 1);\n\t\t\t},\n\t\t\tteardown: function () {\n\t\t\t\tvar doc = this.ownerDocument || this.document || this,\n\t\t\t\t\tdataHolder = document.documentMode ? this : doc,\n\t\t\t\t\tattaches = dataPriv.get(dataHolder, delegateType) - 1;\n\n\t\t\t\tif (!attaches) {\n\t\t\t\t\tif (document.documentMode) {\n\t\t\t\t\t\tthis.removeEventListener(delegateType, focusMappedHandler);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdoc.removeEventListener(type, focusMappedHandler, true);\n\t\t\t\t\t}\n\t\t\t\t\tdataPriv.remove(dataHolder, delegateType);\n\t\t\t\t} else {\n\t\t\t\t\tdataPriv.set(dataHolder, delegateType, attaches);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t});\n\n\t// Create mouseenter/leave events using mouseover/out and event-time checks\n\t// so that event delegation works in jQuery.\n\t// Do the same for pointerenter/pointerleave and pointerover/pointerout\n\t//\n\t// Support: Safari 7 only\n\t// Safari sends mouseenter too often; see:\n\t// https://bugs.chromium.org/p/chromium/issues/detail?id=470258\n\t// for the description of the bug (it existed in older Chrome versions as well).\n\tjQuery.each({\n\t\tmouseenter: \"mouseover\",\n\t\tmouseleave: \"mouseout\",\n\t\tpointerenter: \"pointerover\",\n\t\tpointerleave: \"pointerout\"\n\t}, function (orig, fix) {\n\t\tjQuery.event.special[orig] = {\n\t\t\tdelegateType: fix,\n\t\t\tbindType: fix,\n\n\t\t\thandle: function (event) {\n\t\t\t\tvar ret,\n\t\t\t\t\ttarget = this,\n\t\t\t\t\trelated = event.relatedTarget,\n\t\t\t\t\thandleObj = event.handleObj;\n\n\t\t\t\t// For mouseenter/leave call the handler if related is outside the target.\n\t\t\t\t// NB: No relatedTarget if the mouse left/entered the browser window\n\t\t\t\tif (!related || (related !== target && !jQuery.contains(target, related))) {\n\t\t\t\t\tevent.type = handleObj.origType;\n\t\t\t\t\tret = handleObj.handler.apply(this, arguments);\n\t\t\t\t\tevent.type = fix;\n\t\t\t\t}\n\t\t\t\treturn ret;\n\t\t\t}\n\t\t};\n\t});\n\n\tjQuery.fn.extend({\n\n\t\ton: function (types, selector, data, fn) {\n\t\t\treturn on(this, types, selector, data, fn);\n\t\t},\n\t\tone: function (types, selector, data, fn) {\n\t\t\treturn on(this, types, selector, data, fn, 1);\n\t\t},\n\t\toff: function (types, selector, fn) {\n\t\t\tvar handleObj, type;\n\t\t\tif (types && types.preventDefault && types.handleObj) {\n\n\t\t\t\t// ( event )  dispatched jQuery.Event\n\t\t\t\thandleObj = types.handleObj;\n\t\t\t\tjQuery(types.delegateTarget).off(\n\t\t\t\t\thandleObj.namespace ?\n\t\t\t\t\t\thandleObj.origType + \".\" + handleObj.namespace :\n\t\t\t\t\t\thandleObj.origType,\n\t\t\t\t\thandleObj.selector,\n\t\t\t\t\thandleObj.handler\n\t\t\t\t);\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\tif (typeof types === \"object\") {\n\n\t\t\t\t// ( types-object [, selector] )\n\t\t\t\tfor (type in types) {\n\t\t\t\t\tthis.off(type, selector, types[type]);\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\tif (selector === false || typeof selector === \"function\") {\n\n\t\t\t\t// ( types [, fn] )\n\t\t\t\tfn = selector;\n\t\t\t\tselector = undefined;\n\t\t\t}\n\t\t\tif (fn === false) {\n\t\t\t\tfn = returnFalse;\n\t\t\t}\n\t\t\treturn this.each(function () {\n\t\t\t\tjQuery.event.remove(this, types, fn, selector);\n\t\t\t});\n\t\t}\n\t});\n\n\n\tvar\n\n\t\t// Support: IE <=10 - 11, Edge 12 - 13 only\n\t\t// In IE/Edge using regex groups here causes severe slowdowns.\n\t\t// See https://connect.microsoft.com/IE/feedback/details/1736512/\n\t\trnoInnerhtml = /<script|<style|<link/i,\n\n\t\t// checked=\"checked\" or checked\n\t\trchecked = /checked\\s*(?:[^=]|=\\s*.checked.)/i,\n\n\t\trcleanScript = /^\\s*<!\\[CDATA\\[|\\]\\]>\\s*$/g;\n\n\t// Prefer a tbody over its parent table for containing new rows\n\tfunction manipulationTarget(elem, content) {\n\t\tif (nodeName(elem, \"table\") &&\n\t\t\tnodeName(content.nodeType !== 11 ? content : content.firstChild, \"tr\")) {\n\n\t\t\treturn jQuery(elem).children(\"tbody\")[0] || elem;\n\t\t}\n\n\t\treturn elem;\n\t}\n\n\t// Replace/restore the type attribute of script elements for safe DOM manipulation\n\tfunction disableScript(elem) {\n\t\telem.type = (elem.getAttribute(\"type\") !== null) + \"/\" + elem.type;\n\t\treturn elem;\n\t}\n\tfunction restoreScript(elem) {\n\t\tif ((elem.type || \"\").slice(0, 5) === \"true/\") {\n\t\t\telem.type = elem.type.slice(5);\n\t\t} else {\n\t\t\telem.removeAttribute(\"type\");\n\t\t}\n\n\t\treturn elem;\n\t}\n\n\tfunction cloneCopyEvent(src, dest) {\n\t\tvar i, l, type, pdataOld, udataOld, udataCur, events;\n\n\t\tif (dest.nodeType !== 1) {\n\t\t\treturn;\n\t\t}\n\n\t\t// 1. Copy private data: events, handlers, etc.\n\t\tif (dataPriv.hasData(src)) {\n\t\t\tpdataOld = dataPriv.get(src);\n\t\t\tevents = pdataOld.events;\n\n\t\t\tif (events) {\n\t\t\t\tdataPriv.remove(dest, \"handle events\");\n\n\t\t\t\tfor (type in events) {\n\t\t\t\t\tfor (i = 0, l = events[type].length; i < l; i++) {\n\t\t\t\t\t\tjQuery.event.add(dest, type, events[type][i]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// 2. Copy user data\n\t\tif (dataUser.hasData(src)) {\n\t\t\tudataOld = dataUser.access(src);\n\t\t\tudataCur = jQuery.extend({}, udataOld);\n\n\t\t\tdataUser.set(dest, udataCur);\n\t\t}\n\t}\n\n\t// Fix IE bugs, see support tests\n\tfunction fixInput(src, dest) {\n\t\tvar nodeName = dest.nodeName.toLowerCase();\n\n\t\t// Fails to persist the checked state of a cloned checkbox or radio button.\n\t\tif (nodeName === \"input\" && rcheckableType.test(src.type)) {\n\t\t\tdest.checked = src.checked;\n\n\t\t\t// Fails to return the selected option to the default selected state when cloning options\n\t\t} else if (nodeName === \"input\" || nodeName === \"textarea\") {\n\t\t\tdest.defaultValue = src.defaultValue;\n\t\t}\n\t}\n\n\tfunction domManip(collection, args, callback, ignored) {\n\n\t\t// Flatten any nested arrays\n\t\targs = flat(args);\n\n\t\tvar fragment, first, scripts, hasScripts, node, doc,\n\t\t\ti = 0,\n\t\t\tl = collection.length,\n\t\t\tiNoClone = l - 1,\n\t\t\tvalue = args[0],\n\t\t\tvalueIsFunction = isFunction(value);\n\n\t\t// We can't cloneNode fragments that contain checked, in WebKit\n\t\tif (valueIsFunction ||\n\t\t\t(l > 1 && typeof value === \"string\" &&\n\t\t\t\t!support.checkClone && rchecked.test(value))) {\n\t\t\treturn collection.each(function (index) {\n\t\t\t\tvar self = collection.eq(index);\n\t\t\t\tif (valueIsFunction) {\n\t\t\t\t\targs[0] = value.call(this, index, self.html());\n\t\t\t\t}\n\t\t\t\tdomManip(self, args, callback, ignored);\n\t\t\t});\n\t\t}\n\n\t\tif (l) {\n\t\t\tfragment = buildFragment(args, collection[0].ownerDocument, false, collection, ignored);\n\t\t\tfirst = fragment.firstChild;\n\n\t\t\tif (fragment.childNodes.length === 1) {\n\t\t\t\tfragment = first;\n\t\t\t}\n\n\t\t\t// Require either new content or an interest in ignored elements to invoke the callback\n\t\t\tif (first || ignored) {\n\t\t\t\tscripts = jQuery.map(getAll(fragment, \"script\"), disableScript);\n\t\t\t\thasScripts = scripts.length;\n\n\t\t\t\t// Use the original fragment for the last item\n\t\t\t\t// instead of the first because it can end up\n\t\t\t\t// being emptied incorrectly in certain situations (trac-8070).\n\t\t\t\tfor (; i < l; i++) {\n\t\t\t\t\tnode = fragment;\n\n\t\t\t\t\tif (i !== iNoClone) {\n\t\t\t\t\t\tnode = jQuery.clone(node, true, true);\n\n\t\t\t\t\t\t// Keep references to cloned scripts for later restoration\n\t\t\t\t\t\tif (hasScripts) {\n\n\t\t\t\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\t\t\t\tjQuery.merge(scripts, getAll(node, \"script\"));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tcallback.call(collection[i], node, i);\n\t\t\t\t}\n\n\t\t\t\tif (hasScripts) {\n\t\t\t\t\tdoc = scripts[scripts.length - 1].ownerDocument;\n\n\t\t\t\t\t// Reenable scripts\n\t\t\t\t\tjQuery.map(scripts, restoreScript);\n\n\t\t\t\t\t// Evaluate executable scripts on first document insertion\n\t\t\t\t\tfor (i = 0; i < hasScripts; i++) {\n\t\t\t\t\t\tnode = scripts[i];\n\t\t\t\t\t\tif (rscriptType.test(node.type || \"\") &&\n\t\t\t\t\t\t\t!dataPriv.access(node, \"globalEval\") &&\n\t\t\t\t\t\t\tjQuery.contains(doc, node)) {\n\n\t\t\t\t\t\t\tif (node.src && (node.type || \"\").toLowerCase() !== \"module\") {\n\n\t\t\t\t\t\t\t\t// Optional AJAX dependency, but won't run scripts if not present\n\t\t\t\t\t\t\t\tif (jQuery._evalUrl && !node.noModule) {\n\t\t\t\t\t\t\t\t\tjQuery._evalUrl(node.src, {\n\t\t\t\t\t\t\t\t\t\tnonce: node.nonce || node.getAttribute(\"nonce\")\n\t\t\t\t\t\t\t\t\t}, doc);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t// Unwrap a CDATA section containing script contents. This shouldn't be\n\t\t\t\t\t\t\t\t// needed as in XML documents they're already not visible when\n\t\t\t\t\t\t\t\t// inspecting element contents and in HTML documents they have no\n\t\t\t\t\t\t\t\t// meaning but we're preserving that logic for backwards compatibility.\n\t\t\t\t\t\t\t\t// This will be removed completely in 4.0. See gh-4904.\n\t\t\t\t\t\t\t\tDOMEval(node.textContent.replace(rcleanScript, \"\"), node, doc);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn collection;\n\t}\n\n\tfunction remove(elem, selector, keepData) {\n\t\tvar node,\n\t\t\tnodes = selector ? jQuery.filter(selector, elem) : elem,\n\t\t\ti = 0;\n\n\t\tfor (; (node = nodes[i]) != null; i++) {\n\t\t\tif (!keepData && node.nodeType === 1) {\n\t\t\t\tjQuery.cleanData(getAll(node));\n\t\t\t}\n\n\t\t\tif (node.parentNode) {\n\t\t\t\tif (keepData && isAttached(node)) {\n\t\t\t\t\tsetGlobalEval(getAll(node, \"script\"));\n\t\t\t\t}\n\t\t\t\tnode.parentNode.removeChild(node);\n\t\t\t}\n\t\t}\n\n\t\treturn elem;\n\t}\n\n\tjQuery.extend({\n\t\thtmlPrefilter: function (html) {\n\t\t\treturn html;\n\t\t},\n\n\t\tclone: function (elem, dataAndEvents, deepDataAndEvents) {\n\t\t\tvar i, l, srcElements, destElements,\n\t\t\t\tclone = elem.cloneNode(true),\n\t\t\t\tinPage = isAttached(elem);\n\n\t\t\t// Fix IE cloning issues\n\t\t\tif (!support.noCloneChecked && (elem.nodeType === 1 || elem.nodeType === 11) &&\n\t\t\t\t!jQuery.isXMLDoc(elem)) {\n\n\t\t\t\t// We eschew jQuery#find here for performance reasons:\n\t\t\t\t// https://jsperf.com/getall-vs-sizzle/2\n\t\t\t\tdestElements = getAll(clone);\n\t\t\t\tsrcElements = getAll(elem);\n\n\t\t\t\tfor (i = 0, l = srcElements.length; i < l; i++) {\n\t\t\t\t\tfixInput(srcElements[i], destElements[i]);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Copy the events from the original to the clone\n\t\t\tif (dataAndEvents) {\n\t\t\t\tif (deepDataAndEvents) {\n\t\t\t\t\tsrcElements = srcElements || getAll(elem);\n\t\t\t\t\tdestElements = destElements || getAll(clone);\n\n\t\t\t\t\tfor (i = 0, l = srcElements.length; i < l; i++) {\n\t\t\t\t\t\tcloneCopyEvent(srcElements[i], destElements[i]);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tcloneCopyEvent(elem, clone);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Preserve script evaluation history\n\t\t\tdestElements = getAll(clone, \"script\");\n\t\t\tif (destElements.length > 0) {\n\t\t\t\tsetGlobalEval(destElements, !inPage && getAll(elem, \"script\"));\n\t\t\t}\n\n\t\t\t// Return the cloned set\n\t\t\treturn clone;\n\t\t},\n\n\t\tcleanData: function (elems) {\n\t\t\tvar data, elem, type,\n\t\t\t\tspecial = jQuery.event.special,\n\t\t\t\ti = 0;\n\n\t\t\tfor (; (elem = elems[i]) !== undefined; i++) {\n\t\t\t\tif (acceptData(elem)) {\n\t\t\t\t\tif ((data = elem[dataPriv.expando])) {\n\t\t\t\t\t\tif (data.events) {\n\t\t\t\t\t\t\tfor (type in data.events) {\n\t\t\t\t\t\t\t\tif (special[type]) {\n\t\t\t\t\t\t\t\t\tjQuery.event.remove(elem, type);\n\n\t\t\t\t\t\t\t\t\t// This is a shortcut to avoid jQuery.event.remove's overhead\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tjQuery.removeEvent(elem, type, data.handle);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\t\telem[dataPriv.expando] = undefined;\n\t\t\t\t\t}\n\t\t\t\t\tif (elem[dataUser.expando]) {\n\n\t\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\t\telem[dataUser.expando] = undefined;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\n\tjQuery.fn.extend({\n\t\tdetach: function (selector) {\n\t\t\treturn remove(this, selector, true);\n\t\t},\n\n\t\tremove: function (selector) {\n\t\t\treturn remove(this, selector);\n\t\t},\n\n\t\ttext: function (value) {\n\t\t\treturn access(this, function (value) {\n\t\t\t\treturn value === undefined ?\n\t\t\t\t\tjQuery.text(this) :\n\t\t\t\t\tthis.empty().each(function () {\n\t\t\t\t\t\tif (this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9) {\n\t\t\t\t\t\t\tthis.textContent = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t}, null, value, arguments.length);\n\t\t},\n\n\t\tappend: function () {\n\t\t\treturn domManip(this, arguments, function (elem) {\n\t\t\t\tif (this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9) {\n\t\t\t\t\tvar target = manipulationTarget(this, elem);\n\t\t\t\t\ttarget.appendChild(elem);\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\tprepend: function () {\n\t\t\treturn domManip(this, arguments, function (elem) {\n\t\t\t\tif (this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9) {\n\t\t\t\t\tvar target = manipulationTarget(this, elem);\n\t\t\t\t\ttarget.insertBefore(elem, target.firstChild);\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\tbefore: function () {\n\t\t\treturn domManip(this, arguments, function (elem) {\n\t\t\t\tif (this.parentNode) {\n\t\t\t\t\tthis.parentNode.insertBefore(elem, this);\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\tafter: function () {\n\t\t\treturn domManip(this, arguments, function (elem) {\n\t\t\t\tif (this.parentNode) {\n\t\t\t\t\tthis.parentNode.insertBefore(elem, this.nextSibling);\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\tempty: function () {\n\t\t\tvar elem,\n\t\t\t\ti = 0;\n\n\t\t\tfor (; (elem = this[i]) != null; i++) {\n\t\t\t\tif (elem.nodeType === 1) {\n\n\t\t\t\t\t// Prevent memory leaks\n\t\t\t\t\tjQuery.cleanData(getAll(elem, false));\n\n\t\t\t\t\t// Remove any remaining nodes\n\t\t\t\t\telem.textContent = \"\";\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn this;\n\t\t},\n\n\t\tclone: function (dataAndEvents, deepDataAndEvents) {\n\t\t\tdataAndEvents = dataAndEvents == null ? false : dataAndEvents;\n\t\t\tdeepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;\n\n\t\t\treturn this.map(function () {\n\t\t\t\treturn jQuery.clone(this, dataAndEvents, deepDataAndEvents);\n\t\t\t});\n\t\t},\n\n\t\thtml: function (value) {\n\t\t\treturn access(this, function (value) {\n\t\t\t\tvar elem = this[0] || {},\n\t\t\t\t\ti = 0,\n\t\t\t\t\tl = this.length;\n\n\t\t\t\tif (value === undefined && elem.nodeType === 1) {\n\t\t\t\t\treturn elem.innerHTML;\n\t\t\t\t}\n\n\t\t\t\t// See if we can take a shortcut and just use innerHTML\n\t\t\t\tif (typeof value === \"string\" && !rnoInnerhtml.test(value) &&\n\t\t\t\t\t!wrapMap[(rtagName.exec(value) || [\"\", \"\"])[1].toLowerCase()]) {\n\n\t\t\t\t\tvalue = jQuery.htmlPrefilter(value);\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tfor (; i < l; i++) {\n\t\t\t\t\t\t\telem = this[i] || {};\n\n\t\t\t\t\t\t\t// Remove element nodes and prevent memory leaks\n\t\t\t\t\t\t\tif (elem.nodeType === 1) {\n\t\t\t\t\t\t\t\tjQuery.cleanData(getAll(elem, false));\n\t\t\t\t\t\t\t\telem.innerHTML = value;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\telem = 0;\n\n\t\t\t\t\t\t// If using innerHTML throws an exception, use the fallback method\n\t\t\t\t\t} catch (e) { }\n\t\t\t\t}\n\n\t\t\t\tif (elem) {\n\t\t\t\t\tthis.empty().append(value);\n\t\t\t\t}\n\t\t\t}, null, value, arguments.length);\n\t\t},\n\n\t\treplaceWith: function () {\n\t\t\tvar ignored = [];\n\n\t\t\t// Make the changes, replacing each non-ignored context element with the new content\n\t\t\treturn domManip(this, arguments, function (elem) {\n\t\t\t\tvar parent = this.parentNode;\n\n\t\t\t\tif (jQuery.inArray(this, ignored) < 0) {\n\t\t\t\t\tjQuery.cleanData(getAll(this));\n\t\t\t\t\tif (parent) {\n\t\t\t\t\t\tparent.replaceChild(elem, this);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Force callback invocation\n\t\t\t}, ignored);\n\t\t}\n\t});\n\n\tjQuery.each({\n\t\tappendTo: \"append\",\n\t\tprependTo: \"prepend\",\n\t\tinsertBefore: \"before\",\n\t\tinsertAfter: \"after\",\n\t\treplaceAll: \"replaceWith\"\n\t}, function (name, original) {\n\t\tjQuery.fn[name] = function (selector) {\n\t\t\tvar elems,\n\t\t\t\tret = [],\n\t\t\t\tinsert = jQuery(selector),\n\t\t\t\tlast = insert.length - 1,\n\t\t\t\ti = 0;\n\n\t\t\tfor (; i <= last; i++) {\n\t\t\t\telems = i === last ? this : this.clone(true);\n\t\t\t\tjQuery(insert[i])[original](elems);\n\n\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t// .get() because push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\tpush.apply(ret, elems.get());\n\t\t\t}\n\n\t\t\treturn this.pushStack(ret);\n\t\t};\n\t});\n\tvar rnumnonpx = new RegExp(\"^(\" + pnum + \")(?!px)[a-z%]+$\", \"i\");\n\n\tvar rcustomProp = /^--/;\n\n\n\tvar getStyles = function (elem) {\n\n\t\t// Support: IE <=11 only, Firefox <=30 (trac-15098, trac-14150)\n\t\t// IE throws on elements created in popups\n\t\t// FF meanwhile throws on frame elements through \"defaultView.getComputedStyle\"\n\t\tvar view = elem.ownerDocument.defaultView;\n\n\t\tif (!view || !view.opener) {\n\t\t\tview = window;\n\t\t}\n\n\t\treturn view.getComputedStyle(elem);\n\t};\n\n\tvar swap = function (elem, options, callback) {\n\t\tvar ret, name,\n\t\t\told = {};\n\n\t\t// Remember the old values, and insert the new ones\n\t\tfor (name in options) {\n\t\t\told[name] = elem.style[name];\n\t\t\telem.style[name] = options[name];\n\t\t}\n\n\t\tret = callback.call(elem);\n\n\t\t// Revert the old values\n\t\tfor (name in options) {\n\t\t\telem.style[name] = old[name];\n\t\t}\n\n\t\treturn ret;\n\t};\n\n\n\tvar rboxStyle = new RegExp(cssExpand.join(\"|\"), \"i\");\n\n\n\n\t(function () {\n\n\t\t// Executing both pixelPosition & boxSizingReliable tests require only one layout\n\t\t// so they're executed at the same time to save the second computation.\n\t\tfunction computeStyleTests() {\n\n\t\t\t// This is a singleton, we need to execute it only once\n\t\t\tif (!div) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tcontainer.style.cssText = \"position:absolute;left:-11111px;width:60px;\" +\n\t\t\t\t\"margin-top:1px;padding:0;border:0\";\n\t\t\tdiv.style.cssText =\n\t\t\t\t\"position:relative;display:block;box-sizing:border-box;overflow:scroll;\" +\n\t\t\t\t\"margin:auto;border:1px;padding:1px;\" +\n\t\t\t\t\"width:60%;top:1%\";\n\t\t\tdocumentElement.appendChild(container).appendChild(div);\n\n\t\t\tvar divStyle = window.getComputedStyle(div);\n\t\t\tpixelPositionVal = divStyle.top !== \"1%\";\n\n\t\t\t// Support: Android 4.0 - 4.3 only, Firefox <=3 - 44\n\t\t\treliableMarginLeftVal = roundPixelMeasures(divStyle.marginLeft) === 12;\n\n\t\t\t// Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3\n\t\t\t// Some styles come back with percentage values, even though they shouldn't\n\t\t\tdiv.style.right = \"60%\";\n\t\t\tpixelBoxStylesVal = roundPixelMeasures(divStyle.right) === 36;\n\n\t\t\t// Support: IE 9 - 11 only\n\t\t\t// Detect misreporting of content dimensions for box-sizing:border-box elements\n\t\t\tboxSizingReliableVal = roundPixelMeasures(divStyle.width) === 36;\n\n\t\t\t// Support: IE 9 only\n\t\t\t// Detect overflow:scroll screwiness (gh-3699)\n\t\t\t// Support: Chrome <=64\n\t\t\t// Don't get tricked when zoom affects offsetWidth (gh-4029)\n\t\t\tdiv.style.position = \"absolute\";\n\t\t\tscrollboxSizeVal = roundPixelMeasures(div.offsetWidth / 3) === 12;\n\n\t\t\tdocumentElement.removeChild(container);\n\n\t\t\t// Nullify the div so it wouldn't be stored in the memory and\n\t\t\t// it will also be a sign that checks already performed\n\t\t\tdiv = null;\n\t\t}\n\n\t\tfunction roundPixelMeasures(measure) {\n\t\t\treturn Math.round(parseFloat(measure));\n\t\t}\n\n\t\tvar pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal,\n\t\t\treliableTrDimensionsVal, reliableMarginLeftVal,\n\t\t\tcontainer = document.createElement(\"div\"),\n\t\t\tdiv = document.createElement(\"div\");\n\n\t\t// Finish early in limited (non-browser) environments\n\t\tif (!div.style) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Support: IE <=9 - 11 only\n\t\t// Style of cloned element affects source element cloned (trac-8908)\n\t\tdiv.style.backgroundClip = \"content-box\";\n\t\tdiv.cloneNode(true).style.backgroundClip = \"\";\n\t\tsupport.clearCloneStyle = div.style.backgroundClip === \"content-box\";\n\n\t\tjQuery.extend(support, {\n\t\t\tboxSizingReliable: function () {\n\t\t\t\tcomputeStyleTests();\n\t\t\t\treturn boxSizingReliableVal;\n\t\t\t},\n\t\t\tpixelBoxStyles: function () {\n\t\t\t\tcomputeStyleTests();\n\t\t\t\treturn pixelBoxStylesVal;\n\t\t\t},\n\t\t\tpixelPosition: function () {\n\t\t\t\tcomputeStyleTests();\n\t\t\t\treturn pixelPositionVal;\n\t\t\t},\n\t\t\treliableMarginLeft: function () {\n\t\t\t\tcomputeStyleTests();\n\t\t\t\treturn reliableMarginLeftVal;\n\t\t\t},\n\t\t\tscrollboxSize: function () {\n\t\t\t\tcomputeStyleTests();\n\t\t\t\treturn scrollboxSizeVal;\n\t\t\t},\n\n\t\t\t// Support: IE 9 - 11+, Edge 15 - 18+\n\t\t\t// IE/Edge misreport `getComputedStyle` of table rows with width/height\n\t\t\t// set in CSS while `offset*` properties report correct values.\n\t\t\t// Behavior in IE 9 is more subtle than in newer versions & it passes\n\t\t\t// some versions of this test; make sure not to make it pass there!\n\t\t\t//\n\t\t\t// Support: Firefox 70+\n\t\t\t// Only Firefox includes border widths\n\t\t\t// in computed dimensions. (gh-4529)\n\t\t\treliableTrDimensions: function () {\n\t\t\t\tvar table, tr, trChild, trStyle;\n\t\t\t\tif (reliableTrDimensionsVal == null) {\n\t\t\t\t\ttable = document.createElement(\"table\");\n\t\t\t\t\ttr = document.createElement(\"tr\");\n\t\t\t\t\ttrChild = document.createElement(\"div\");\n\n\t\t\t\t\ttable.style.cssText = \"position:absolute;left:-11111px;border-collapse:separate\";\n\t\t\t\t\ttr.style.cssText = \"border:1px solid\";\n\n\t\t\t\t\t// Support: Chrome 86+\n\t\t\t\t\t// Height set through cssText does not get applied.\n\t\t\t\t\t// Computed height then comes back as 0.\n\t\t\t\t\ttr.style.height = \"1px\";\n\t\t\t\t\ttrChild.style.height = \"9px\";\n\n\t\t\t\t\t// Support: Android 8 Chrome 86+\n\t\t\t\t\t// In our bodyBackground.html iframe,\n\t\t\t\t\t// display for all div elements is set to \"inline\",\n\t\t\t\t\t// which causes a problem only in Android 8 Chrome 86.\n\t\t\t\t\t// Ensuring the div is display: block\n\t\t\t\t\t// gets around this issue.\n\t\t\t\t\ttrChild.style.display = \"block\";\n\n\t\t\t\t\tdocumentElement\n\t\t\t\t\t\t.appendChild(table)\n\t\t\t\t\t\t.appendChild(tr)\n\t\t\t\t\t\t.appendChild(trChild);\n\n\t\t\t\t\ttrStyle = window.getComputedStyle(tr);\n\t\t\t\t\treliableTrDimensionsVal = (parseInt(trStyle.height, 10) +\n\t\t\t\t\t\tparseInt(trStyle.borderTopWidth, 10) +\n\t\t\t\t\t\tparseInt(trStyle.borderBottomWidth, 10)) === tr.offsetHeight;\n\n\t\t\t\t\tdocumentElement.removeChild(table);\n\t\t\t\t}\n\t\t\t\treturn reliableTrDimensionsVal;\n\t\t\t}\n\t\t});\n\t})();\n\n\n\tfunction curCSS(elem, name, computed) {\n\t\tvar width, minWidth, maxWidth, ret,\n\t\t\tisCustomProp = rcustomProp.test(name),\n\n\t\t\t// Support: Firefox 51+\n\t\t\t// Retrieving style before computed somehow\n\t\t\t// fixes an issue with getting wrong values\n\t\t\t// on detached elements\n\t\t\tstyle = elem.style;\n\n\t\tcomputed = computed || getStyles(elem);\n\n\t\t// getPropertyValue is needed for:\n\t\t//   .css('filter') (IE 9 only, trac-12537)\n\t\t//   .css('--customProperty) (gh-3144)\n\t\tif (computed) {\n\n\t\t\t// Support: IE <=9 - 11+\n\t\t\t// IE only supports `\"float\"` in `getPropertyValue`; in computed styles\n\t\t\t// it's only available as `\"cssFloat\"`. We no longer modify properties\n\t\t\t// sent to `.css()` apart from camelCasing, so we need to check both.\n\t\t\t// Normally, this would create difference in behavior: if\n\t\t\t// `getPropertyValue` returns an empty string, the value returned\n\t\t\t// by `.css()` would be `undefined`. This is usually the case for\n\t\t\t// disconnected elements. However, in IE even disconnected elements\n\t\t\t// with no styles return `\"none\"` for `getPropertyValue( \"float\" )`\n\t\t\tret = computed.getPropertyValue(name) || computed[name];\n\n\t\t\tif (isCustomProp && ret) {\n\n\t\t\t\t// Support: Firefox 105+, Chrome <=105+\n\t\t\t\t// Spec requires trimming whitespace for custom properties (gh-4926).\n\t\t\t\t// Firefox only trims leading whitespace. Chrome just collapses\n\t\t\t\t// both leading & trailing whitespace to a single space.\n\t\t\t\t//\n\t\t\t\t// Fall back to `undefined` if empty string returned.\n\t\t\t\t// This collapses a missing definition with property defined\n\t\t\t\t// and set to an empty string but there's no standard API\n\t\t\t\t// allowing us to differentiate them without a performance penalty\n\t\t\t\t// and returning `undefined` aligns with older jQuery.\n\t\t\t\t//\n\t\t\t\t// rtrimCSS treats U+000D CARRIAGE RETURN and U+000C FORM FEED\n\t\t\t\t// as whitespace while CSS does not, but this is not a problem\n\t\t\t\t// because CSS preprocessing replaces them with U+000A LINE FEED\n\t\t\t\t// (which *is* CSS whitespace)\n\t\t\t\t// https://www.w3.org/TR/css-syntax-3/#input-preprocessing\n\t\t\t\tret = ret.replace(rtrimCSS, \"$1\") || undefined;\n\t\t\t}\n\n\t\t\tif (ret === \"\" && !isAttached(elem)) {\n\t\t\t\tret = jQuery.style(elem, name);\n\t\t\t}\n\n\t\t\t// A tribute to the \"awesome hack by Dean Edwards\"\n\t\t\t// Android Browser returns percentage for some values,\n\t\t\t// but width seems to be reliably pixels.\n\t\t\t// This is against the CSSOM draft spec:\n\t\t\t// https://drafts.csswg.org/cssom/#resolved-values\n\t\t\tif (!support.pixelBoxStyles() && rnumnonpx.test(ret) && rboxStyle.test(name)) {\n\n\t\t\t\t// Remember the original values\n\t\t\t\twidth = style.width;\n\t\t\t\tminWidth = style.minWidth;\n\t\t\t\tmaxWidth = style.maxWidth;\n\n\t\t\t\t// Put in the new values to get a computed value out\n\t\t\t\tstyle.minWidth = style.maxWidth = style.width = ret;\n\t\t\t\tret = computed.width;\n\n\t\t\t\t// Revert the changed values\n\t\t\t\tstyle.width = width;\n\t\t\t\tstyle.minWidth = minWidth;\n\t\t\t\tstyle.maxWidth = maxWidth;\n\t\t\t}\n\t\t}\n\n\t\treturn ret !== undefined ?\n\n\t\t\t// Support: IE <=9 - 11 only\n\t\t\t// IE returns zIndex value as an integer.\n\t\t\tret + \"\" :\n\t\t\tret;\n\t}\n\n\n\tfunction addGetHookIf(conditionFn, hookFn) {\n\n\t\t// Define the hook, we'll check on the first run if it's really needed.\n\t\treturn {\n\t\t\tget: function () {\n\t\t\t\tif (conditionFn()) {\n\n\t\t\t\t\t// Hook not needed (or it's not possible to use it due\n\t\t\t\t\t// to missing dependency), remove it.\n\t\t\t\t\tdelete this.get;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Hook needed; redefine it so that the support test is not executed again.\n\t\t\t\treturn (this.get = hookFn).apply(this, arguments);\n\t\t\t}\n\t\t};\n\t}\n\n\n\tvar cssPrefixes = [\"Webkit\", \"Moz\", \"ms\"],\n\t\temptyStyle = document.createElement(\"div\").style,\n\t\tvendorProps = {};\n\n\t// Return a vendor-prefixed property or undefined\n\tfunction vendorPropName(name) {\n\n\t\t// Check for vendor prefixed names\n\t\tvar capName = name[0].toUpperCase() + name.slice(1),\n\t\t\ti = cssPrefixes.length;\n\n\t\twhile (i--) {\n\t\t\tname = cssPrefixes[i] + capName;\n\t\t\tif (name in emptyStyle) {\n\t\t\t\treturn name;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return a potentially-mapped jQuery.cssProps or vendor prefixed property\n\tfunction finalPropName(name) {\n\t\tvar final = jQuery.cssProps[name] || vendorProps[name];\n\n\t\tif (final) {\n\t\t\treturn final;\n\t\t}\n\t\tif (name in emptyStyle) {\n\t\t\treturn name;\n\t\t}\n\t\treturn vendorProps[name] = vendorPropName(name) || name;\n\t}\n\n\n\tvar\n\n\t\t// Swappable if display is none or starts with table\n\t\t// except \"table\", \"table-cell\", or \"table-caption\"\n\t\t// See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display\n\t\trdisplayswap = /^(none|table(?!-c[ea]).+)/,\n\t\tcssShow = { position: \"absolute\", visibility: \"hidden\", display: \"block\" },\n\t\tcssNormalTransform = {\n\t\t\tletterSpacing: \"0\",\n\t\t\tfontWeight: \"400\"\n\t\t};\n\n\tfunction setPositiveNumber(_elem, value, subtract) {\n\n\t\t// Any relative (+/-) values have already been\n\t\t// normalized at this point\n\t\tvar matches = rcssNum.exec(value);\n\t\treturn matches ?\n\n\t\t\t// Guard against undefined \"subtract\", e.g., when used as in cssHooks\n\t\t\tMath.max(0, matches[2] - (subtract || 0)) + (matches[3] || \"px\") :\n\t\t\tvalue;\n\t}\n\n\tfunction boxModelAdjustment(elem, dimension, box, isBorderBox, styles, computedVal) {\n\t\tvar i = dimension === \"width\" ? 1 : 0,\n\t\t\textra = 0,\n\t\t\tdelta = 0,\n\t\t\tmarginDelta = 0;\n\n\t\t// Adjustment may not be necessary\n\t\tif (box === (isBorderBox ? \"border\" : \"content\")) {\n\t\t\treturn 0;\n\t\t}\n\n\t\tfor (; i < 4; i += 2) {\n\n\t\t\t// Both box models exclude margin\n\t\t\t// Count margin delta separately to only add it after scroll gutter adjustment.\n\t\t\t// This is needed to make negative margins work with `outerHeight( true )` (gh-3982).\n\t\t\tif (box === \"margin\") {\n\t\t\t\tmarginDelta += jQuery.css(elem, box + cssExpand[i], true, styles);\n\t\t\t}\n\n\t\t\t// If we get here with a content-box, we're seeking \"padding\" or \"border\" or \"margin\"\n\t\t\tif (!isBorderBox) {\n\n\t\t\t\t// Add padding\n\t\t\t\tdelta += jQuery.css(elem, \"padding\" + cssExpand[i], true, styles);\n\n\t\t\t\t// For \"border\" or \"margin\", add border\n\t\t\t\tif (box !== \"padding\") {\n\t\t\t\t\tdelta += jQuery.css(elem, \"border\" + cssExpand[i] + \"Width\", true, styles);\n\n\t\t\t\t\t// But still keep track of it otherwise\n\t\t\t\t} else {\n\t\t\t\t\textra += jQuery.css(elem, \"border\" + cssExpand[i] + \"Width\", true, styles);\n\t\t\t\t}\n\n\t\t\t\t// If we get here with a border-box (content + padding + border), we're seeking \"content\" or\n\t\t\t\t// \"padding\" or \"margin\"\n\t\t\t} else {\n\n\t\t\t\t// For \"content\", subtract padding\n\t\t\t\tif (box === \"content\") {\n\t\t\t\t\tdelta -= jQuery.css(elem, \"padding\" + cssExpand[i], true, styles);\n\t\t\t\t}\n\n\t\t\t\t// For \"content\" or \"padding\", subtract border\n\t\t\t\tif (box !== \"margin\") {\n\t\t\t\t\tdelta -= jQuery.css(elem, \"border\" + cssExpand[i] + \"Width\", true, styles);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Account for positive content-box scroll gutter when requested by providing computedVal\n\t\tif (!isBorderBox && computedVal >= 0) {\n\n\t\t\t// offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border\n\t\t\t// Assuming integer scroll gutter, subtract the rest and round down\n\t\t\tdelta += Math.max(0, Math.ceil(\n\t\t\t\telem[\"offset\" + dimension[0].toUpperCase() + dimension.slice(1)] -\n\t\t\t\tcomputedVal -\n\t\t\t\tdelta -\n\t\t\t\textra -\n\t\t\t\t0.5\n\n\t\t\t\t// If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter\n\t\t\t\t// Use an explicit zero to avoid NaN (gh-3964)\n\t\t\t)) || 0;\n\t\t}\n\n\t\treturn delta + marginDelta;\n\t}\n\n\tfunction getWidthOrHeight(elem, dimension, extra) {\n\n\t\t// Start with computed style\n\t\tvar styles = getStyles(elem),\n\n\t\t\t// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322).\n\t\t\t// Fake content-box until we know it's needed to know the true value.\n\t\t\tboxSizingNeeded = !support.boxSizingReliable() || extra,\n\t\t\tisBorderBox = boxSizingNeeded &&\n\t\t\t\tjQuery.css(elem, \"boxSizing\", false, styles) === \"border-box\",\n\t\t\tvalueIsBorderBox = isBorderBox,\n\n\t\t\tval = curCSS(elem, dimension, styles),\n\t\t\toffsetProp = \"offset\" + dimension[0].toUpperCase() + dimension.slice(1);\n\n\t\t// Support: Firefox <=54\n\t\t// Return a confounding non-pixel value or feign ignorance, as appropriate.\n\t\tif (rnumnonpx.test(val)) {\n\t\t\tif (!extra) {\n\t\t\t\treturn val;\n\t\t\t}\n\t\t\tval = \"auto\";\n\t\t}\n\n\n\t\t// Support: IE 9 - 11 only\n\t\t// Use offsetWidth/offsetHeight for when box sizing is unreliable.\n\t\t// In those cases, the computed value can be trusted to be border-box.\n\t\tif ((!support.boxSizingReliable() && isBorderBox ||\n\n\t\t\t// Support: IE 10 - 11+, Edge 15 - 18+\n\t\t\t// IE/Edge misreport `getComputedStyle` of table rows with width/height\n\t\t\t// set in CSS while `offset*` properties report correct values.\n\t\t\t// Interestingly, in some cases IE 9 doesn't suffer from this issue.\n\t\t\t!support.reliableTrDimensions() && nodeName(elem, \"tr\") ||\n\n\t\t\t// Fall back to offsetWidth/offsetHeight when value is \"auto\"\n\t\t\t// This happens for inline elements with no explicit setting (gh-3571)\n\t\t\tval === \"auto\" ||\n\n\t\t\t// Support: Android <=4.1 - 4.3 only\n\t\t\t// Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602)\n\t\t\t!parseFloat(val) && jQuery.css(elem, \"display\", false, styles) === \"inline\") &&\n\n\t\t\t// Make sure the element is visible & connected\n\t\t\telem.getClientRects().length) {\n\n\t\t\tisBorderBox = jQuery.css(elem, \"boxSizing\", false, styles) === \"border-box\";\n\n\t\t\t// Where available, offsetWidth/offsetHeight approximate border box dimensions.\n\t\t\t// Where not available (e.g., SVG), assume unreliable box-sizing and interpret the\n\t\t\t// retrieved value as a content box dimension.\n\t\t\tvalueIsBorderBox = offsetProp in elem;\n\t\t\tif (valueIsBorderBox) {\n\t\t\t\tval = elem[offsetProp];\n\t\t\t}\n\t\t}\n\n\t\t// Normalize \"\" and auto\n\t\tval = parseFloat(val) || 0;\n\n\t\t// Adjust for the element's box model\n\t\treturn (val +\n\t\t\tboxModelAdjustment(\n\t\t\t\telem,\n\t\t\t\tdimension,\n\t\t\t\textra || (isBorderBox ? \"border\" : \"content\"),\n\t\t\t\tvalueIsBorderBox,\n\t\t\t\tstyles,\n\n\t\t\t\t// Provide the current computed size to request scroll gutter calculation (gh-3589)\n\t\t\t\tval\n\t\t\t)\n\t\t) + \"px\";\n\t}\n\n\tjQuery.extend({\n\n\t\t// Add in style property hooks for overriding the default\n\t\t// behavior of getting and setting a style property\n\t\tcssHooks: {\n\t\t\topacity: {\n\t\t\t\tget: function (elem, computed) {\n\t\t\t\t\tif (computed) {\n\n\t\t\t\t\t\t// We should always get a number back from opacity\n\t\t\t\t\t\tvar ret = curCSS(elem, \"opacity\");\n\t\t\t\t\t\treturn ret === \"\" ? \"1\" : ret;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t// Don't automatically add \"px\" to these possibly-unitless properties\n\t\tcssNumber: {\n\t\t\tanimationIterationCount: true,\n\t\t\taspectRatio: true,\n\t\t\tborderImageSlice: true,\n\t\t\tcolumnCount: true,\n\t\t\tflexGrow: true,\n\t\t\tflexShrink: true,\n\t\t\tfontWeight: true,\n\t\t\tgridArea: true,\n\t\t\tgridColumn: true,\n\t\t\tgridColumnEnd: true,\n\t\t\tgridColumnStart: true,\n\t\t\tgridRow: true,\n\t\t\tgridRowEnd: true,\n\t\t\tgridRowStart: true,\n\t\t\tlineHeight: true,\n\t\t\topacity: true,\n\t\t\torder: true,\n\t\t\torphans: true,\n\t\t\tscale: true,\n\t\t\twidows: true,\n\t\t\tzIndex: true,\n\t\t\tzoom: true,\n\n\t\t\t// SVG-related\n\t\t\tfillOpacity: true,\n\t\t\tfloodOpacity: true,\n\t\t\tstopOpacity: true,\n\t\t\tstrokeMiterlimit: true,\n\t\t\tstrokeOpacity: true\n\t\t},\n\n\t\t// Add in properties whose names you wish to fix before\n\t\t// setting or getting the value\n\t\tcssProps: {},\n\n\t\t// Get and set the style property on a DOM Node\n\t\tstyle: function (elem, name, value, extra) {\n\n\t\t\t// Don't set styles on text and comment nodes\n\t\t\tif (!elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Make sure that we're working with the right name\n\t\t\tvar ret, type, hooks,\n\t\t\t\torigName = camelCase(name),\n\t\t\t\tisCustomProp = rcustomProp.test(name),\n\t\t\t\tstyle = elem.style;\n\n\t\t\t// Make sure that we're working with the right name. We don't\n\t\t\t// want to query the value if it is a CSS custom property\n\t\t\t// since they are user-defined.\n\t\t\tif (!isCustomProp) {\n\t\t\t\tname = finalPropName(origName);\n\t\t\t}\n\n\t\t\t// Gets hook for the prefixed version, then unprefixed version\n\t\t\thooks = jQuery.cssHooks[name] || jQuery.cssHooks[origName];\n\n\t\t\t// Check if we're setting a value\n\t\t\tif (value !== undefined) {\n\t\t\t\ttype = typeof value;\n\n\t\t\t\t// Convert \"+=\" or \"-=\" to relative numbers (trac-7345)\n\t\t\t\tif (type === \"string\" && (ret = rcssNum.exec(value)) && ret[1]) {\n\t\t\t\t\tvalue = adjustCSS(elem, name, ret);\n\n\t\t\t\t\t// Fixes bug trac-9237\n\t\t\t\t\ttype = \"number\";\n\t\t\t\t}\n\n\t\t\t\t// Make sure that null and NaN values aren't set (trac-7116)\n\t\t\t\tif (value == null || value !== value) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// If a number was passed in, add the unit (except for certain CSS properties)\n\t\t\t\t// The isCustomProp check can be removed in jQuery 4.0 when we only auto-append\n\t\t\t\t// \"px\" to a few hardcoded values.\n\t\t\t\tif (type === \"number\" && !isCustomProp) {\n\t\t\t\t\tvalue += ret && ret[3] || (jQuery.cssNumber[origName] ? \"\" : \"px\");\n\t\t\t\t}\n\n\t\t\t\t// background-* props affect original clone's values\n\t\t\t\tif (!support.clearCloneStyle && value === \"\" && name.indexOf(\"background\") === 0) {\n\t\t\t\t\tstyle[name] = \"inherit\";\n\t\t\t\t}\n\n\t\t\t\t// If a hook was provided, use that value, otherwise just set the specified value\n\t\t\t\tif (!hooks || !(\"set\" in hooks) ||\n\t\t\t\t\t(value = hooks.set(elem, value, extra)) !== undefined) {\n\n\t\t\t\t\tif (isCustomProp) {\n\t\t\t\t\t\tstyle.setProperty(name, value);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tstyle[name] = value;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\t// If a hook was provided get the non-computed value from there\n\t\t\t\tif (hooks && \"get\" in hooks &&\n\t\t\t\t\t(ret = hooks.get(elem, false, extra)) !== undefined) {\n\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\n\t\t\t\t// Otherwise just get the value from the style object\n\t\t\t\treturn style[name];\n\t\t\t}\n\t\t},\n\n\t\tcss: function (elem, name, extra, styles) {\n\t\t\tvar val, num, hooks,\n\t\t\t\torigName = camelCase(name),\n\t\t\t\tisCustomProp = rcustomProp.test(name);\n\n\t\t\t// Make sure that we're working with the right name. We don't\n\t\t\t// want to modify the value if it is a CSS custom property\n\t\t\t// since they are user-defined.\n\t\t\tif (!isCustomProp) {\n\t\t\t\tname = finalPropName(origName);\n\t\t\t}\n\n\t\t\t// Try prefixed name followed by the unprefixed name\n\t\t\thooks = jQuery.cssHooks[name] || jQuery.cssHooks[origName];\n\n\t\t\t// If a hook was provided get the computed value from there\n\t\t\tif (hooks && \"get\" in hooks) {\n\t\t\t\tval = hooks.get(elem, true, extra);\n\t\t\t}\n\n\t\t\t// Otherwise, if a way to get the computed value exists, use that\n\t\t\tif (val === undefined) {\n\t\t\t\tval = curCSS(elem, name, styles);\n\t\t\t}\n\n\t\t\t// Convert \"normal\" to computed value\n\t\t\tif (val === \"normal\" && name in cssNormalTransform) {\n\t\t\t\tval = cssNormalTransform[name];\n\t\t\t}\n\n\t\t\t// Make numeric if forced or a qualifier was provided and val looks numeric\n\t\t\tif (extra === \"\" || extra) {\n\t\t\t\tnum = parseFloat(val);\n\t\t\t\treturn extra === true || isFinite(num) ? num || 0 : val;\n\t\t\t}\n\n\t\t\treturn val;\n\t\t}\n\t});\n\n\tjQuery.each([\"height\", \"width\"], function (_i, dimension) {\n\t\tjQuery.cssHooks[dimension] = {\n\t\t\tget: function (elem, computed, extra) {\n\t\t\t\tif (computed) {\n\n\t\t\t\t\t// Certain elements can have dimension info if we invisibly show them\n\t\t\t\t\t// but it must have a current display style that would benefit\n\t\t\t\t\treturn rdisplayswap.test(jQuery.css(elem, \"display\")) &&\n\n\t\t\t\t\t\t// Support: Safari 8+\n\t\t\t\t\t\t// Table columns in Safari have non-zero offsetWidth & zero\n\t\t\t\t\t\t// getBoundingClientRect().width unless display is changed.\n\t\t\t\t\t\t// Support: IE <=11 only\n\t\t\t\t\t\t// Running getBoundingClientRect on a disconnected node\n\t\t\t\t\t\t// in IE throws an error.\n\t\t\t\t\t\t(!elem.getClientRects().length || !elem.getBoundingClientRect().width) ?\n\t\t\t\t\t\tswap(elem, cssShow, function () {\n\t\t\t\t\t\t\treturn getWidthOrHeight(elem, dimension, extra);\n\t\t\t\t\t\t}) :\n\t\t\t\t\t\tgetWidthOrHeight(elem, dimension, extra);\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tset: function (elem, value, extra) {\n\t\t\t\tvar matches,\n\t\t\t\t\tstyles = getStyles(elem),\n\n\t\t\t\t\t// Only read styles.position if the test has a chance to fail\n\t\t\t\t\t// to avoid forcing a reflow.\n\t\t\t\t\tscrollboxSizeBuggy = !support.scrollboxSize() &&\n\t\t\t\t\t\tstyles.position === \"absolute\",\n\n\t\t\t\t\t// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991)\n\t\t\t\t\tboxSizingNeeded = scrollboxSizeBuggy || extra,\n\t\t\t\t\tisBorderBox = boxSizingNeeded &&\n\t\t\t\t\t\tjQuery.css(elem, \"boxSizing\", false, styles) === \"border-box\",\n\t\t\t\t\tsubtract = extra ?\n\t\t\t\t\t\tboxModelAdjustment(\n\t\t\t\t\t\t\telem,\n\t\t\t\t\t\t\tdimension,\n\t\t\t\t\t\t\textra,\n\t\t\t\t\t\t\tisBorderBox,\n\t\t\t\t\t\t\tstyles\n\t\t\t\t\t\t) :\n\t\t\t\t\t\t0;\n\n\t\t\t\t// Account for unreliable border-box dimensions by comparing offset* to computed and\n\t\t\t\t// faking a content-box to get border and padding (gh-3699)\n\t\t\t\tif (isBorderBox && scrollboxSizeBuggy) {\n\t\t\t\t\tsubtract -= Math.ceil(\n\t\t\t\t\t\telem[\"offset\" + dimension[0].toUpperCase() + dimension.slice(1)] -\n\t\t\t\t\t\tparseFloat(styles[dimension]) -\n\t\t\t\t\t\tboxModelAdjustment(elem, dimension, \"border\", false, styles) -\n\t\t\t\t\t\t0.5\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\t// Convert to pixels if value adjustment is needed\n\t\t\t\tif (subtract && (matches = rcssNum.exec(value)) &&\n\t\t\t\t\t(matches[3] || \"px\") !== \"px\") {\n\n\t\t\t\t\telem.style[dimension] = value;\n\t\t\t\t\tvalue = jQuery.css(elem, dimension);\n\t\t\t\t}\n\n\t\t\t\treturn setPositiveNumber(elem, value, subtract);\n\t\t\t}\n\t\t};\n\t});\n\n\tjQuery.cssHooks.marginLeft = addGetHookIf(support.reliableMarginLeft,\n\t\tfunction (elem, computed) {\n\t\t\tif (computed) {\n\t\t\t\treturn (parseFloat(curCSS(elem, \"marginLeft\")) ||\n\t\t\t\t\telem.getBoundingClientRect().left -\n\t\t\t\t\tswap(elem, { marginLeft: 0 }, function () {\n\t\t\t\t\t\treturn elem.getBoundingClientRect().left;\n\t\t\t\t\t})\n\t\t\t\t) + \"px\";\n\t\t\t}\n\t\t}\n\t);\n\n\t// These hooks are used by animate to expand properties\n\tjQuery.each({\n\t\tmargin: \"\",\n\t\tpadding: \"\",\n\t\tborder: \"Width\"\n\t}, function (prefix, suffix) {\n\t\tjQuery.cssHooks[prefix + suffix] = {\n\t\t\texpand: function (value) {\n\t\t\t\tvar i = 0,\n\t\t\t\t\texpanded = {},\n\n\t\t\t\t\t// Assumes a single number if not a string\n\t\t\t\t\tparts = typeof value === \"string\" ? value.split(\" \") : [value];\n\n\t\t\t\tfor (; i < 4; i++) {\n\t\t\t\t\texpanded[prefix + cssExpand[i] + suffix] =\n\t\t\t\t\t\tparts[i] || parts[i - 2] || parts[0];\n\t\t\t\t}\n\n\t\t\t\treturn expanded;\n\t\t\t}\n\t\t};\n\n\t\tif (prefix !== \"margin\") {\n\t\t\tjQuery.cssHooks[prefix + suffix].set = setPositiveNumber;\n\t\t}\n\t});\n\n\tjQuery.fn.extend({\n\t\tcss: function (name, value) {\n\t\t\treturn access(this, function (elem, name, value) {\n\t\t\t\tvar styles, len,\n\t\t\t\t\tmap = {},\n\t\t\t\t\ti = 0;\n\n\t\t\t\tif (Array.isArray(name)) {\n\t\t\t\t\tstyles = getStyles(elem);\n\t\t\t\t\tlen = name.length;\n\n\t\t\t\t\tfor (; i < len; i++) {\n\t\t\t\t\t\tmap[name[i]] = jQuery.css(elem, name[i], false, styles);\n\t\t\t\t\t}\n\n\t\t\t\t\treturn map;\n\t\t\t\t}\n\n\t\t\t\treturn value !== undefined ?\n\t\t\t\t\tjQuery.style(elem, name, value) :\n\t\t\t\t\tjQuery.css(elem, name);\n\t\t\t}, name, value, arguments.length > 1);\n\t\t}\n\t});\n\n\n\tfunction Tween(elem, options, prop, end, easing) {\n\t\treturn new Tween.prototype.init(elem, options, prop, end, easing);\n\t}\n\tjQuery.Tween = Tween;\n\n\tTween.prototype = {\n\t\tconstructor: Tween,\n\t\tinit: function (elem, options, prop, end, easing, unit) {\n\t\t\tthis.elem = elem;\n\t\t\tthis.prop = prop;\n\t\t\tthis.easing = easing || jQuery.easing._default;\n\t\t\tthis.options = options;\n\t\t\tthis.start = this.now = this.cur();\n\t\t\tthis.end = end;\n\t\t\tthis.unit = unit || (jQuery.cssNumber[prop] ? \"\" : \"px\");\n\t\t},\n\t\tcur: function () {\n\t\t\tvar hooks = Tween.propHooks[this.prop];\n\n\t\t\treturn hooks && hooks.get ?\n\t\t\t\thooks.get(this) :\n\t\t\t\tTween.propHooks._default.get(this);\n\t\t},\n\t\trun: function (percent) {\n\t\t\tvar eased,\n\t\t\t\thooks = Tween.propHooks[this.prop];\n\n\t\t\tif (this.options.duration) {\n\t\t\t\tthis.pos = eased = jQuery.easing[this.easing](\n\t\t\t\t\tpercent, this.options.duration * percent, 0, 1, this.options.duration\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tthis.pos = eased = percent;\n\t\t\t}\n\t\t\tthis.now = (this.end - this.start) * eased + this.start;\n\n\t\t\tif (this.options.step) {\n\t\t\t\tthis.options.step.call(this.elem, this.now, this);\n\t\t\t}\n\n\t\t\tif (hooks && hooks.set) {\n\t\t\t\thooks.set(this);\n\t\t\t} else {\n\t\t\t\tTween.propHooks._default.set(this);\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t};\n\n\tTween.prototype.init.prototype = Tween.prototype;\n\n\tTween.propHooks = {\n\t\t_default: {\n\t\t\tget: function (tween) {\n\t\t\t\tvar result;\n\n\t\t\t\t// Use a property on the element directly when it is not a DOM element,\n\t\t\t\t// or when there is no matching style property that exists.\n\t\t\t\tif (tween.elem.nodeType !== 1 ||\n\t\t\t\t\ttween.elem[tween.prop] != null && tween.elem.style[tween.prop] == null) {\n\t\t\t\t\treturn tween.elem[tween.prop];\n\t\t\t\t}\n\n\t\t\t\t// Passing an empty string as a 3rd parameter to .css will automatically\n\t\t\t\t// attempt a parseFloat and fallback to a string if the parse fails.\n\t\t\t\t// Simple values such as \"10px\" are parsed to Float;\n\t\t\t\t// complex values such as \"rotate(1rad)\" are returned as-is.\n\t\t\t\tresult = jQuery.css(tween.elem, tween.prop, \"\");\n\n\t\t\t\t// Empty strings, null, undefined and \"auto\" are converted to 0.\n\t\t\t\treturn !result || result === \"auto\" ? 0 : result;\n\t\t\t},\n\t\t\tset: function (tween) {\n\n\t\t\t\t// Use step hook for back compat.\n\t\t\t\t// Use cssHook if its there.\n\t\t\t\t// Use .style if available and use plain properties where available.\n\t\t\t\tif (jQuery.fx.step[tween.prop]) {\n\t\t\t\t\tjQuery.fx.step[tween.prop](tween);\n\t\t\t\t} else if (tween.elem.nodeType === 1 && (\n\t\t\t\t\tjQuery.cssHooks[tween.prop] ||\n\t\t\t\t\ttween.elem.style[finalPropName(tween.prop)] != null)) {\n\t\t\t\t\tjQuery.style(tween.elem, tween.prop, tween.now + tween.unit);\n\t\t\t\t} else {\n\t\t\t\t\ttween.elem[tween.prop] = tween.now;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t// Support: IE <=9 only\n\t// Panic based approach to setting things on disconnected nodes\n\tTween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {\n\t\tset: function (tween) {\n\t\t\tif (tween.elem.nodeType && tween.elem.parentNode) {\n\t\t\t\ttween.elem[tween.prop] = tween.now;\n\t\t\t}\n\t\t}\n\t};\n\n\tjQuery.easing = {\n\t\tlinear: function (p) {\n\t\t\treturn p;\n\t\t},\n\t\tswing: function (p) {\n\t\t\treturn 0.5 - Math.cos(p * Math.PI) / 2;\n\t\t},\n\t\t_default: \"swing\"\n\t};\n\n\tjQuery.fx = Tween.prototype.init;\n\n\t// Back compat <1.8 extension point\n\tjQuery.fx.step = {};\n\n\n\n\n\tvar\n\t\tfxNow, inProgress,\n\t\trfxtypes = /^(?:toggle|show|hide)$/,\n\t\trrun = /queueHooks$/;\n\n\tfunction schedule() {\n\t\tif (inProgress) {\n\t\t\tif (document.hidden === false && window.requestAnimationFrame) {\n\t\t\t\twindow.requestAnimationFrame(schedule);\n\t\t\t} else {\n\t\t\t\twindow.setTimeout(schedule, jQuery.fx.interval);\n\t\t\t}\n\n\t\t\tjQuery.fx.tick();\n\t\t}\n\t}\n\n\t// Animations created synchronously will run synchronously\n\tfunction createFxNow() {\n\t\twindow.setTimeout(function () {\n\t\t\tfxNow = undefined;\n\t\t});\n\t\treturn (fxNow = Date.now());\n\t}\n\n\t// Generate parameters to create a standard animation\n\tfunction genFx(type, includeWidth) {\n\t\tvar which,\n\t\t\ti = 0,\n\t\t\tattrs = { height: type };\n\n\t\t// If we include width, step value is 1 to do all cssExpand values,\n\t\t// otherwise step value is 2 to skip over Left and Right\n\t\tincludeWidth = includeWidth ? 1 : 0;\n\t\tfor (; i < 4; i += 2 - includeWidth) {\n\t\t\twhich = cssExpand[i];\n\t\t\tattrs[\"margin\" + which] = attrs[\"padding\" + which] = type;\n\t\t}\n\n\t\tif (includeWidth) {\n\t\t\tattrs.opacity = attrs.width = type;\n\t\t}\n\n\t\treturn attrs;\n\t}\n\n\tfunction createTween(value, prop, animation) {\n\t\tvar tween,\n\t\t\tcollection = (Animation.tweeners[prop] || []).concat(Animation.tweeners[\"*\"]),\n\t\t\tindex = 0,\n\t\t\tlength = collection.length;\n\t\tfor (; index < length; index++) {\n\t\t\tif ((tween = collection[index].call(animation, prop, value))) {\n\n\t\t\t\t// We're done with this property\n\t\t\t\treturn tween;\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction defaultPrefilter(elem, props, opts) {\n\t\tvar prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display,\n\t\t\tisBox = \"width\" in props || \"height\" in props,\n\t\t\tanim = this,\n\t\t\torig = {},\n\t\t\tstyle = elem.style,\n\t\t\thidden = elem.nodeType && isHiddenWithinTree(elem),\n\t\t\tdataShow = dataPriv.get(elem, \"fxshow\");\n\n\t\t// Queue-skipping animations hijack the fx hooks\n\t\tif (!opts.queue) {\n\t\t\thooks = jQuery._queueHooks(elem, \"fx\");\n\t\t\tif (hooks.unqueued == null) {\n\t\t\t\thooks.unqueued = 0;\n\t\t\t\toldfire = hooks.empty.fire;\n\t\t\t\thooks.empty.fire = function () {\n\t\t\t\t\tif (!hooks.unqueued) {\n\t\t\t\t\t\toldfire();\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t\thooks.unqueued++;\n\n\t\t\tanim.always(function () {\n\n\t\t\t\t// Ensure the complete handler is called before this completes\n\t\t\t\tanim.always(function () {\n\t\t\t\t\thooks.unqueued--;\n\t\t\t\t\tif (!jQuery.queue(elem, \"fx\").length) {\n\t\t\t\t\t\thooks.empty.fire();\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\n\t\t// Detect show/hide animations\n\t\tfor (prop in props) {\n\t\t\tvalue = props[prop];\n\t\t\tif (rfxtypes.test(value)) {\n\t\t\t\tdelete props[prop];\n\t\t\t\ttoggle = toggle || value === \"toggle\";\n\t\t\t\tif (value === (hidden ? \"hide\" : \"show\")) {\n\n\t\t\t\t\t// Pretend to be hidden if this is a \"show\" and\n\t\t\t\t\t// there is still data from a stopped show/hide\n\t\t\t\t\tif (value === \"show\" && dataShow && dataShow[prop] !== undefined) {\n\t\t\t\t\t\thidden = true;\n\n\t\t\t\t\t\t// Ignore all other no-op show/hide data\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\torig[prop] = dataShow && dataShow[prop] || jQuery.style(elem, prop);\n\t\t\t}\n\t\t}\n\n\t\t// Bail out if this is a no-op like .hide().hide()\n\t\tpropTween = !jQuery.isEmptyObject(props);\n\t\tif (!propTween && jQuery.isEmptyObject(orig)) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Restrict \"overflow\" and \"display\" styles during box animations\n\t\tif (isBox && elem.nodeType === 1) {\n\n\t\t\t// Support: IE <=9 - 11, Edge 12 - 15\n\t\t\t// Record all 3 overflow attributes because IE does not infer the shorthand\n\t\t\t// from identically-valued overflowX and overflowY and Edge just mirrors\n\t\t\t// the overflowX value there.\n\t\t\topts.overflow = [style.overflow, style.overflowX, style.overflowY];\n\n\t\t\t// Identify a display type, preferring old show/hide data over the CSS cascade\n\t\t\trestoreDisplay = dataShow && dataShow.display;\n\t\t\tif (restoreDisplay == null) {\n\t\t\t\trestoreDisplay = dataPriv.get(elem, \"display\");\n\t\t\t}\n\t\t\tdisplay = jQuery.css(elem, \"display\");\n\t\t\tif (display === \"none\") {\n\t\t\t\tif (restoreDisplay) {\n\t\t\t\t\tdisplay = restoreDisplay;\n\t\t\t\t} else {\n\n\t\t\t\t\t// Get nonempty value(s) by temporarily forcing visibility\n\t\t\t\t\tshowHide([elem], true);\n\t\t\t\t\trestoreDisplay = elem.style.display || restoreDisplay;\n\t\t\t\t\tdisplay = jQuery.css(elem, \"display\");\n\t\t\t\t\tshowHide([elem]);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Animate inline elements as inline-block\n\t\t\tif (display === \"inline\" || display === \"inline-block\" && restoreDisplay != null) {\n\t\t\t\tif (jQuery.css(elem, \"float\") === \"none\") {\n\n\t\t\t\t\t// Restore the original display value at the end of pure show/hide animations\n\t\t\t\t\tif (!propTween) {\n\t\t\t\t\t\tanim.done(function () {\n\t\t\t\t\t\t\tstyle.display = restoreDisplay;\n\t\t\t\t\t\t});\n\t\t\t\t\t\tif (restoreDisplay == null) {\n\t\t\t\t\t\t\tdisplay = style.display;\n\t\t\t\t\t\t\trestoreDisplay = display === \"none\" ? \"\" : display;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tstyle.display = \"inline-block\";\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (opts.overflow) {\n\t\t\tstyle.overflow = \"hidden\";\n\t\t\tanim.always(function () {\n\t\t\t\tstyle.overflow = opts.overflow[0];\n\t\t\t\tstyle.overflowX = opts.overflow[1];\n\t\t\t\tstyle.overflowY = opts.overflow[2];\n\t\t\t});\n\t\t}\n\n\t\t// Implement show/hide animations\n\t\tpropTween = false;\n\t\tfor (prop in orig) {\n\n\t\t\t// General show/hide setup for this element animation\n\t\t\tif (!propTween) {\n\t\t\t\tif (dataShow) {\n\t\t\t\t\tif (\"hidden\" in dataShow) {\n\t\t\t\t\t\thidden = dataShow.hidden;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tdataShow = dataPriv.access(elem, \"fxshow\", { display: restoreDisplay });\n\t\t\t\t}\n\n\t\t\t\t// Store hidden/visible for toggle so `.stop().toggle()` \"reverses\"\n\t\t\t\tif (toggle) {\n\t\t\t\t\tdataShow.hidden = !hidden;\n\t\t\t\t}\n\n\t\t\t\t// Show elements before animating them\n\t\t\t\tif (hidden) {\n\t\t\t\t\tshowHide([elem], true);\n\t\t\t\t}\n\n\t\t\t\t/* eslint-disable no-loop-func */\n\n\t\t\t\tanim.done(function () {\n\n\t\t\t\t\t/* eslint-enable no-loop-func */\n\n\t\t\t\t\t// The final step of a \"hide\" animation is actually hiding the element\n\t\t\t\t\tif (!hidden) {\n\t\t\t\t\t\tshowHide([elem]);\n\t\t\t\t\t}\n\t\t\t\t\tdataPriv.remove(elem, \"fxshow\");\n\t\t\t\t\tfor (prop in orig) {\n\t\t\t\t\t\tjQuery.style(elem, prop, orig[prop]);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// Per-property setup\n\t\t\tpropTween = createTween(hidden ? dataShow[prop] : 0, prop, anim);\n\t\t\tif (!(prop in dataShow)) {\n\t\t\t\tdataShow[prop] = propTween.start;\n\t\t\t\tif (hidden) {\n\t\t\t\t\tpropTween.end = propTween.start;\n\t\t\t\t\tpropTween.start = 0;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction propFilter(props, specialEasing) {\n\t\tvar index, name, easing, value, hooks;\n\n\t\t// camelCase, specialEasing and expand cssHook pass\n\t\tfor (index in props) {\n\t\t\tname = camelCase(index);\n\t\t\teasing = specialEasing[name];\n\t\t\tvalue = props[index];\n\t\t\tif (Array.isArray(value)) {\n\t\t\t\teasing = value[1];\n\t\t\t\tvalue = props[index] = value[0];\n\t\t\t}\n\n\t\t\tif (index !== name) {\n\t\t\t\tprops[name] = value;\n\t\t\t\tdelete props[index];\n\t\t\t}\n\n\t\t\thooks = jQuery.cssHooks[name];\n\t\t\tif (hooks && \"expand\" in hooks) {\n\t\t\t\tvalue = hooks.expand(value);\n\t\t\t\tdelete props[name];\n\n\t\t\t\t// Not quite $.extend, this won't overwrite existing keys.\n\t\t\t\t// Reusing 'index' because we have the correct \"name\"\n\t\t\t\tfor (index in value) {\n\t\t\t\t\tif (!(index in props)) {\n\t\t\t\t\t\tprops[index] = value[index];\n\t\t\t\t\t\tspecialEasing[index] = easing;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tspecialEasing[name] = easing;\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction Animation(elem, properties, options) {\n\t\tvar result,\n\t\t\tstopped,\n\t\t\tindex = 0,\n\t\t\tlength = Animation.prefilters.length,\n\t\t\tdeferred = jQuery.Deferred().always(function () {\n\n\t\t\t\t// Don't match elem in the :animated selector\n\t\t\t\tdelete tick.elem;\n\t\t\t}),\n\t\t\ttick = function () {\n\t\t\t\tif (stopped) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tvar currentTime = fxNow || createFxNow(),\n\t\t\t\t\tremaining = Math.max(0, animation.startTime + animation.duration - currentTime),\n\n\t\t\t\t\t// Support: Android 2.3 only\n\t\t\t\t\t// Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (trac-12497)\n\t\t\t\t\ttemp = remaining / animation.duration || 0,\n\t\t\t\t\tpercent = 1 - temp,\n\t\t\t\t\tindex = 0,\n\t\t\t\t\tlength = animation.tweens.length;\n\n\t\t\t\tfor (; index < length; index++) {\n\t\t\t\t\tanimation.tweens[index].run(percent);\n\t\t\t\t}\n\n\t\t\t\tdeferred.notifyWith(elem, [animation, percent, remaining]);\n\n\t\t\t\t// If there's more to do, yield\n\t\t\t\tif (percent < 1 && length) {\n\t\t\t\t\treturn remaining;\n\t\t\t\t}\n\n\t\t\t\t// If this was an empty animation, synthesize a final progress notification\n\t\t\t\tif (!length) {\n\t\t\t\t\tdeferred.notifyWith(elem, [animation, 1, 0]);\n\t\t\t\t}\n\n\t\t\t\t// Resolve the animation and report its conclusion\n\t\t\t\tdeferred.resolveWith(elem, [animation]);\n\t\t\t\treturn false;\n\t\t\t},\n\t\t\tanimation = deferred.promise({\n\t\t\t\telem: elem,\n\t\t\t\tprops: jQuery.extend({}, properties),\n\t\t\t\topts: jQuery.extend(true, {\n\t\t\t\t\tspecialEasing: {},\n\t\t\t\t\teasing: jQuery.easing._default\n\t\t\t\t}, options),\n\t\t\t\toriginalProperties: properties,\n\t\t\t\toriginalOptions: options,\n\t\t\t\tstartTime: fxNow || createFxNow(),\n\t\t\t\tduration: options.duration,\n\t\t\t\ttweens: [],\n\t\t\t\tcreateTween: function (prop, end) {\n\t\t\t\t\tvar tween = jQuery.Tween(elem, animation.opts, prop, end,\n\t\t\t\t\t\tanimation.opts.specialEasing[prop] || animation.opts.easing);\n\t\t\t\t\tanimation.tweens.push(tween);\n\t\t\t\t\treturn tween;\n\t\t\t\t},\n\t\t\t\tstop: function (gotoEnd) {\n\t\t\t\t\tvar index = 0,\n\n\t\t\t\t\t\t// If we are going to the end, we want to run all the tweens\n\t\t\t\t\t\t// otherwise we skip this part\n\t\t\t\t\t\tlength = gotoEnd ? animation.tweens.length : 0;\n\t\t\t\t\tif (stopped) {\n\t\t\t\t\t\treturn this;\n\t\t\t\t\t}\n\t\t\t\t\tstopped = true;\n\t\t\t\t\tfor (; index < length; index++) {\n\t\t\t\t\t\tanimation.tweens[index].run(1);\n\t\t\t\t\t}\n\n\t\t\t\t\t// Resolve when we played the last frame; otherwise, reject\n\t\t\t\t\tif (gotoEnd) {\n\t\t\t\t\t\tdeferred.notifyWith(elem, [animation, 1, 0]);\n\t\t\t\t\t\tdeferred.resolveWith(elem, [animation, gotoEnd]);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdeferred.rejectWith(elem, [animation, gotoEnd]);\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t}),\n\t\t\tprops = animation.props;\n\n\t\tpropFilter(props, animation.opts.specialEasing);\n\n\t\tfor (; index < length; index++) {\n\t\t\tresult = Animation.prefilters[index].call(animation, elem, props, animation.opts);\n\t\t\tif (result) {\n\t\t\t\tif (isFunction(result.stop)) {\n\t\t\t\t\tjQuery._queueHooks(animation.elem, animation.opts.queue).stop =\n\t\t\t\t\t\tresult.stop.bind(result);\n\t\t\t\t}\n\t\t\t\treturn result;\n\t\t\t}\n\t\t}\n\n\t\tjQuery.map(props, createTween, animation);\n\n\t\tif (isFunction(animation.opts.start)) {\n\t\t\tanimation.opts.start.call(elem, animation);\n\t\t}\n\n\t\t// Attach callbacks from options\n\t\tanimation\n\t\t\t.progress(animation.opts.progress)\n\t\t\t.done(animation.opts.done, animation.opts.complete)\n\t\t\t.fail(animation.opts.fail)\n\t\t\t.always(animation.opts.always);\n\n\t\tjQuery.fx.timer(\n\t\t\tjQuery.extend(tick, {\n\t\t\t\telem: elem,\n\t\t\t\tanim: animation,\n\t\t\t\tqueue: animation.opts.queue\n\t\t\t})\n\t\t);\n\n\t\treturn animation;\n\t}\n\n\tjQuery.Animation = jQuery.extend(Animation, {\n\n\t\ttweeners: {\n\t\t\t\"*\": [function (prop, value) {\n\t\t\t\tvar tween = this.createTween(prop, value);\n\t\t\t\tadjustCSS(tween.elem, prop, rcssNum.exec(value), tween);\n\t\t\t\treturn tween;\n\t\t\t}]\n\t\t},\n\n\t\ttweener: function (props, callback) {\n\t\t\tif (isFunction(props)) {\n\t\t\t\tcallback = props;\n\t\t\t\tprops = [\"*\"];\n\t\t\t} else {\n\t\t\t\tprops = props.match(rnothtmlwhite);\n\t\t\t}\n\n\t\t\tvar prop,\n\t\t\t\tindex = 0,\n\t\t\t\tlength = props.length;\n\n\t\t\tfor (; index < length; index++) {\n\t\t\t\tprop = props[index];\n\t\t\t\tAnimation.tweeners[prop] = Animation.tweeners[prop] || [];\n\t\t\t\tAnimation.tweeners[prop].unshift(callback);\n\t\t\t}\n\t\t},\n\n\t\tprefilters: [defaultPrefilter],\n\n\t\tprefilter: function (callback, prepend) {\n\t\t\tif (prepend) {\n\t\t\t\tAnimation.prefilters.unshift(callback);\n\t\t\t} else {\n\t\t\t\tAnimation.prefilters.push(callback);\n\t\t\t}\n\t\t}\n\t});\n\n\tjQuery.speed = function (speed, easing, fn) {\n\t\tvar opt = speed && typeof speed === \"object\" ? jQuery.extend({}, speed) : {\n\t\t\tcomplete: fn || !fn && easing ||\n\t\t\t\tisFunction(speed) && speed,\n\t\t\tduration: speed,\n\t\t\teasing: fn && easing || easing && !isFunction(easing) && easing\n\t\t};\n\n\t\t// Go to the end state if fx are off\n\t\tif (jQuery.fx.off) {\n\t\t\topt.duration = 0;\n\n\t\t} else {\n\t\t\tif (typeof opt.duration !== \"number\") {\n\t\t\t\tif (opt.duration in jQuery.fx.speeds) {\n\t\t\t\t\topt.duration = jQuery.fx.speeds[opt.duration];\n\n\t\t\t\t} else {\n\t\t\t\t\topt.duration = jQuery.fx.speeds._default;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Normalize opt.queue - true/undefined/null -> \"fx\"\n\t\tif (opt.queue == null || opt.queue === true) {\n\t\t\topt.queue = \"fx\";\n\t\t}\n\n\t\t// Queueing\n\t\topt.old = opt.complete;\n\n\t\topt.complete = function () {\n\t\t\tif (isFunction(opt.old)) {\n\t\t\t\topt.old.call(this);\n\t\t\t}\n\n\t\t\tif (opt.queue) {\n\t\t\t\tjQuery.dequeue(this, opt.queue);\n\t\t\t}\n\t\t};\n\n\t\treturn opt;\n\t};\n\n\tjQuery.fn.extend({\n\t\tfadeTo: function (speed, to, easing, callback) {\n\n\t\t\t// Show any hidden elements after setting opacity to 0\n\t\t\treturn this.filter(isHiddenWithinTree).css(\"opacity\", 0).show()\n\n\t\t\t\t// Animate to the value specified\n\t\t\t\t.end().animate({ opacity: to }, speed, easing, callback);\n\t\t},\n\t\tanimate: function (prop, speed, easing, callback) {\n\t\t\tvar empty = jQuery.isEmptyObject(prop),\n\t\t\t\toptall = jQuery.speed(speed, easing, callback),\n\t\t\t\tdoAnimation = function () {\n\n\t\t\t\t\t// Operate on a copy of prop so per-property easing won't be lost\n\t\t\t\t\tvar anim = Animation(this, jQuery.extend({}, prop), optall);\n\n\t\t\t\t\t// Empty animations, or finishing resolves immediately\n\t\t\t\t\tif (empty || dataPriv.get(this, \"finish\")) {\n\t\t\t\t\t\tanim.stop(true);\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\tdoAnimation.finish = doAnimation;\n\n\t\t\treturn empty || optall.queue === false ?\n\t\t\t\tthis.each(doAnimation) :\n\t\t\t\tthis.queue(optall.queue, doAnimation);\n\t\t},\n\t\tstop: function (type, clearQueue, gotoEnd) {\n\t\t\tvar stopQueue = function (hooks) {\n\t\t\t\tvar stop = hooks.stop;\n\t\t\t\tdelete hooks.stop;\n\t\t\t\tstop(gotoEnd);\n\t\t\t};\n\n\t\t\tif (typeof type !== \"string\") {\n\t\t\t\tgotoEnd = clearQueue;\n\t\t\t\tclearQueue = type;\n\t\t\t\ttype = undefined;\n\t\t\t}\n\t\t\tif (clearQueue) {\n\t\t\t\tthis.queue(type || \"fx\", []);\n\t\t\t}\n\n\t\t\treturn this.each(function () {\n\t\t\t\tvar dequeue = true,\n\t\t\t\t\tindex = type != null && type + \"queueHooks\",\n\t\t\t\t\ttimers = jQuery.timers,\n\t\t\t\t\tdata = dataPriv.get(this);\n\n\t\t\t\tif (index) {\n\t\t\t\t\tif (data[index] && data[index].stop) {\n\t\t\t\t\t\tstopQueue(data[index]);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tfor (index in data) {\n\t\t\t\t\t\tif (data[index] && data[index].stop && rrun.test(index)) {\n\t\t\t\t\t\t\tstopQueue(data[index]);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tfor (index = timers.length; index--;) {\n\t\t\t\t\tif (timers[index].elem === this &&\n\t\t\t\t\t\t(type == null || timers[index].queue === type)) {\n\n\t\t\t\t\t\ttimers[index].anim.stop(gotoEnd);\n\t\t\t\t\t\tdequeue = false;\n\t\t\t\t\t\ttimers.splice(index, 1);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Start the next in the queue if the last step wasn't forced.\n\t\t\t\t// Timers currently will call their complete callbacks, which\n\t\t\t\t// will dequeue but only if they were gotoEnd.\n\t\t\t\tif (dequeue || !gotoEnd) {\n\t\t\t\t\tjQuery.dequeue(this, type);\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\t\tfinish: function (type) {\n\t\t\tif (type !== false) {\n\t\t\t\ttype = type || \"fx\";\n\t\t\t}\n\t\t\treturn this.each(function () {\n\t\t\t\tvar index,\n\t\t\t\t\tdata = dataPriv.get(this),\n\t\t\t\t\tqueue = data[type + \"queue\"],\n\t\t\t\t\thooks = data[type + \"queueHooks\"],\n\t\t\t\t\ttimers = jQuery.timers,\n\t\t\t\t\tlength = queue ? queue.length : 0;\n\n\t\t\t\t// Enable finishing flag on private data\n\t\t\t\tdata.finish = true;\n\n\t\t\t\t// Empty the queue first\n\t\t\t\tjQuery.queue(this, type, []);\n\n\t\t\t\tif (hooks && hooks.stop) {\n\t\t\t\t\thooks.stop.call(this, true);\n\t\t\t\t}\n\n\t\t\t\t// Look for any active animations, and finish them\n\t\t\t\tfor (index = timers.length; index--;) {\n\t\t\t\t\tif (timers[index].elem === this && timers[index].queue === type) {\n\t\t\t\t\t\ttimers[index].anim.stop(true);\n\t\t\t\t\t\ttimers.splice(index, 1);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Look for any animations in the old queue and finish them\n\t\t\t\tfor (index = 0; index < length; index++) {\n\t\t\t\t\tif (queue[index] && queue[index].finish) {\n\t\t\t\t\t\tqueue[index].finish.call(this);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Turn off finishing flag\n\t\t\t\tdelete data.finish;\n\t\t\t});\n\t\t}\n\t});\n\n\tjQuery.each([\"toggle\", \"show\", \"hide\"], function (_i, name) {\n\t\tvar cssFn = jQuery.fn[name];\n\t\tjQuery.fn[name] = function (speed, easing, callback) {\n\t\t\treturn speed == null || typeof speed === \"boolean\" ?\n\t\t\t\tcssFn.apply(this, arguments) :\n\t\t\t\tthis.animate(genFx(name, true), speed, easing, callback);\n\t\t};\n\t});\n\n\t// Generate shortcuts for custom animations\n\tjQuery.each({\n\t\tslideDown: genFx(\"show\"),\n\t\tslideUp: genFx(\"hide\"),\n\t\tslideToggle: genFx(\"toggle\"),\n\t\tfadeIn: { opacity: \"show\" },\n\t\tfadeOut: { opacity: \"hide\" },\n\t\tfadeToggle: { opacity: \"toggle\" }\n\t}, function (name, props) {\n\t\tjQuery.fn[name] = function (speed, easing, callback) {\n\t\t\treturn this.animate(props, speed, easing, callback);\n\t\t};\n\t});\n\n\tjQuery.timers = [];\n\tjQuery.fx.tick = function () {\n\t\tvar timer,\n\t\t\ti = 0,\n\t\t\ttimers = jQuery.timers;\n\n\t\tfxNow = Date.now();\n\n\t\tfor (; i < timers.length; i++) {\n\t\t\ttimer = timers[i];\n\n\t\t\t// Run the timer and safely remove it when done (allowing for external removal)\n\t\t\tif (!timer() && timers[i] === timer) {\n\t\t\t\ttimers.splice(i--, 1);\n\t\t\t}\n\t\t}\n\n\t\tif (!timers.length) {\n\t\t\tjQuery.fx.stop();\n\t\t}\n\t\tfxNow = undefined;\n\t};\n\n\tjQuery.fx.timer = function (timer) {\n\t\tjQuery.timers.push(timer);\n\t\tjQuery.fx.start();\n\t};\n\n\tjQuery.fx.interval = 13;\n\tjQuery.fx.start = function () {\n\t\tif (inProgress) {\n\t\t\treturn;\n\t\t}\n\n\t\tinProgress = true;\n\t\tschedule();\n\t};\n\n\tjQuery.fx.stop = function () {\n\t\tinProgress = null;\n\t};\n\n\tjQuery.fx.speeds = {\n\t\tslow: 600,\n\t\tfast: 200,\n\n\t\t// Default speed\n\t\t_default: 400\n\t};\n\n\n\t// Based off of the plugin by Clint Helfers, with permission.\n\tjQuery.fn.delay = function (time, type) {\n\t\ttime = jQuery.fx ? jQuery.fx.speeds[time] || time : time;\n\t\ttype = type || \"fx\";\n\n\t\treturn this.queue(type, function (next, hooks) {\n\t\t\tvar timeout = window.setTimeout(next, time);\n\t\t\thooks.stop = function () {\n\t\t\t\twindow.clearTimeout(timeout);\n\t\t\t};\n\t\t});\n\t};\n\n\n\t(function () {\n\t\tvar input = document.createElement(\"input\"),\n\t\t\tselect = document.createElement(\"select\"),\n\t\t\topt = select.appendChild(document.createElement(\"option\"));\n\n\t\tinput.type = \"checkbox\";\n\n\t\t// Support: Android <=4.3 only\n\t\t// Default value for a checkbox should be \"on\"\n\t\tsupport.checkOn = input.value !== \"\";\n\n\t\t// Support: IE <=11 only\n\t\t// Must access selectedIndex to make default options select\n\t\tsupport.optSelected = opt.selected;\n\n\t\t// Support: IE <=11 only\n\t\t// An input loses its value after becoming a radio\n\t\tinput = document.createElement(\"input\");\n\t\tinput.value = \"t\";\n\t\tinput.type = \"radio\";\n\t\tsupport.radioValue = input.value === \"t\";\n\t})();\n\n\n\tvar boolHook,\n\t\tattrHandle = jQuery.expr.attrHandle;\n\n\tjQuery.fn.extend({\n\t\tattr: function (name, value) {\n\t\t\treturn access(this, jQuery.attr, name, value, arguments.length > 1);\n\t\t},\n\n\t\tremoveAttr: function (name) {\n\t\t\treturn this.each(function () {\n\t\t\t\tjQuery.removeAttr(this, name);\n\t\t\t});\n\t\t}\n\t});\n\n\tjQuery.extend({\n\t\tattr: function (elem, name, value) {\n\t\t\tvar ret, hooks,\n\t\t\t\tnType = elem.nodeType;\n\n\t\t\t// Don't get/set attributes on text, comment and attribute nodes\n\t\t\tif (nType === 3 || nType === 8 || nType === 2) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Fallback to prop when attributes are not supported\n\t\t\tif (typeof elem.getAttribute === \"undefined\") {\n\t\t\t\treturn jQuery.prop(elem, name, value);\n\t\t\t}\n\n\t\t\t// Attribute hooks are determined by the lowercase version\n\t\t\t// Grab necessary hook if one is defined\n\t\t\tif (nType !== 1 || !jQuery.isXMLDoc(elem)) {\n\t\t\t\thooks = jQuery.attrHooks[name.toLowerCase()] ||\n\t\t\t\t\t(jQuery.expr.match.bool.test(name) ? boolHook : undefined);\n\t\t\t}\n\n\t\t\tif (value !== undefined) {\n\t\t\t\tif (value === null) {\n\t\t\t\t\tjQuery.removeAttr(elem, name);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (hooks && \"set\" in hooks &&\n\t\t\t\t\t(ret = hooks.set(elem, value, name)) !== undefined) {\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\n\t\t\t\telem.setAttribute(name, value + \"\");\n\t\t\t\treturn value;\n\t\t\t}\n\n\t\t\tif (hooks && \"get\" in hooks && (ret = hooks.get(elem, name)) !== null) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\tret = jQuery.find.attr(elem, name);\n\n\t\t\t// Non-existent attributes return null, we normalize to undefined\n\t\t\treturn ret == null ? undefined : ret;\n\t\t},\n\n\t\tattrHooks: {\n\t\t\ttype: {\n\t\t\t\tset: function (elem, value) {\n\t\t\t\t\tif (!support.radioValue && value === \"radio\" &&\n\t\t\t\t\t\tnodeName(elem, \"input\")) {\n\t\t\t\t\t\tvar val = elem.value;\n\t\t\t\t\t\telem.setAttribute(\"type\", value);\n\t\t\t\t\t\tif (val) {\n\t\t\t\t\t\t\telem.value = val;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn value;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tremoveAttr: function (elem, value) {\n\t\t\tvar name,\n\t\t\t\ti = 0,\n\n\t\t\t\t// Attribute names can contain non-HTML whitespace characters\n\t\t\t\t// https://html.spec.whatwg.org/multipage/syntax.html#attributes-2\n\t\t\t\tattrNames = value && value.match(rnothtmlwhite);\n\n\t\t\tif (attrNames && elem.nodeType === 1) {\n\t\t\t\twhile ((name = attrNames[i++])) {\n\t\t\t\t\telem.removeAttribute(name);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\n\t// Hooks for boolean attributes\n\tboolHook = {\n\t\tset: function (elem, value, name) {\n\t\t\tif (value === false) {\n\n\t\t\t\t// Remove boolean attributes when set to false\n\t\t\t\tjQuery.removeAttr(elem, name);\n\t\t\t} else {\n\t\t\t\telem.setAttribute(name, name);\n\t\t\t}\n\t\t\treturn name;\n\t\t}\n\t};\n\n\tjQuery.each(jQuery.expr.match.bool.source.match(/\\w+/g), function (_i, name) {\n\t\tvar getter = attrHandle[name] || jQuery.find.attr;\n\n\t\tattrHandle[name] = function (elem, name, isXML) {\n\t\t\tvar ret, handle,\n\t\t\t\tlowercaseName = name.toLowerCase();\n\n\t\t\tif (!isXML) {\n\n\t\t\t\t// Avoid an infinite loop by temporarily removing this function from the getter\n\t\t\t\thandle = attrHandle[lowercaseName];\n\t\t\t\tattrHandle[lowercaseName] = ret;\n\t\t\t\tret = getter(elem, name, isXML) != null ?\n\t\t\t\t\tlowercaseName :\n\t\t\t\t\tnull;\n\t\t\t\tattrHandle[lowercaseName] = handle;\n\t\t\t}\n\t\t\treturn ret;\n\t\t};\n\t});\n\n\n\n\n\tvar rfocusable = /^(?:input|select|textarea|button)$/i,\n\t\trclickable = /^(?:a|area)$/i;\n\n\tjQuery.fn.extend({\n\t\tprop: function (name, value) {\n\t\t\treturn access(this, jQuery.prop, name, value, arguments.length > 1);\n\t\t},\n\n\t\tremoveProp: function (name) {\n\t\t\treturn this.each(function () {\n\t\t\t\tdelete this[jQuery.propFix[name] || name];\n\t\t\t});\n\t\t}\n\t});\n\n\tjQuery.extend({\n\t\tprop: function (elem, name, value) {\n\t\t\tvar ret, hooks,\n\t\t\t\tnType = elem.nodeType;\n\n\t\t\t// Don't get/set properties on text, comment and attribute nodes\n\t\t\tif (nType === 3 || nType === 8 || nType === 2) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (nType !== 1 || !jQuery.isXMLDoc(elem)) {\n\n\t\t\t\t// Fix name and attach hooks\n\t\t\t\tname = jQuery.propFix[name] || name;\n\t\t\t\thooks = jQuery.propHooks[name];\n\t\t\t}\n\n\t\t\tif (value !== undefined) {\n\t\t\t\tif (hooks && \"set\" in hooks &&\n\t\t\t\t\t(ret = hooks.set(elem, value, name)) !== undefined) {\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\n\t\t\t\treturn (elem[name] = value);\n\t\t\t}\n\n\t\t\tif (hooks && \"get\" in hooks && (ret = hooks.get(elem, name)) !== null) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\treturn elem[name];\n\t\t},\n\n\t\tpropHooks: {\n\t\t\ttabIndex: {\n\t\t\t\tget: function (elem) {\n\n\t\t\t\t\t// Support: IE <=9 - 11 only\n\t\t\t\t\t// elem.tabIndex doesn't always return the\n\t\t\t\t\t// correct value when it hasn't been explicitly set\n\t\t\t\t\t// Use proper attribute retrieval (trac-12072)\n\t\t\t\t\tvar tabindex = jQuery.find.attr(elem, \"tabindex\");\n\n\t\t\t\t\tif (tabindex) {\n\t\t\t\t\t\treturn parseInt(tabindex, 10);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (\n\t\t\t\t\t\trfocusable.test(elem.nodeName) ||\n\t\t\t\t\t\trclickable.test(elem.nodeName) &&\n\t\t\t\t\t\telem.href\n\t\t\t\t\t) {\n\t\t\t\t\t\treturn 0;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn -1;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tpropFix: {\n\t\t\t\"for\": \"htmlFor\",\n\t\t\t\"class\": \"className\"\n\t\t}\n\t});\n\n\t// Support: IE <=11 only\n\t// Accessing the selectedIndex property\n\t// forces the browser to respect setting selected\n\t// on the option\n\t// The getter ensures a default option is selected\n\t// when in an optgroup\n\t// eslint rule \"no-unused-expressions\" is disabled for this code\n\t// since it considers such accessions noop\n\tif (!support.optSelected) {\n\t\tjQuery.propHooks.selected = {\n\t\t\tget: function (elem) {\n\n\t\t\t\t/* eslint no-unused-expressions: \"off\" */\n\n\t\t\t\tvar parent = elem.parentNode;\n\t\t\t\tif (parent && parent.parentNode) {\n\t\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t\t}\n\t\t\t\treturn null;\n\t\t\t},\n\t\t\tset: function (elem) {\n\n\t\t\t\t/* eslint no-unused-expressions: \"off\" */\n\n\t\t\t\tvar parent = elem.parentNode;\n\t\t\t\tif (parent) {\n\t\t\t\t\tparent.selectedIndex;\n\n\t\t\t\t\tif (parent.parentNode) {\n\t\t\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n\n\tjQuery.each([\n\t\t\"tabIndex\",\n\t\t\"readOnly\",\n\t\t\"maxLength\",\n\t\t\"cellSpacing\",\n\t\t\"cellPadding\",\n\t\t\"rowSpan\",\n\t\t\"colSpan\",\n\t\t\"useMap\",\n\t\t\"frameBorder\",\n\t\t\"contentEditable\"\n\t], function () {\n\t\tjQuery.propFix[this.toLowerCase()] = this;\n\t});\n\n\n\n\n\t// Strip and collapse whitespace according to HTML spec\n\t// https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace\n\tfunction stripAndCollapse(value) {\n\t\tvar tokens = value.match(rnothtmlwhite) || [];\n\t\treturn tokens.join(\" \");\n\t}\n\n\n\tfunction getClass(elem) {\n\t\treturn elem.getAttribute && elem.getAttribute(\"class\") || \"\";\n\t}\n\n\tfunction classesToArray(value) {\n\t\tif (Array.isArray(value)) {\n\t\t\treturn value;\n\t\t}\n\t\tif (typeof value === \"string\") {\n\t\t\treturn value.match(rnothtmlwhite) || [];\n\t\t}\n\t\treturn [];\n\t}\n\n\tjQuery.fn.extend({\n\t\taddClass: function (value) {\n\t\t\tvar classNames, cur, curValue, className, i, finalValue;\n\n\t\t\tif (isFunction(value)) {\n\t\t\t\treturn this.each(function (j) {\n\t\t\t\t\tjQuery(this).addClass(value.call(this, j, getClass(this)));\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tclassNames = classesToArray(value);\n\n\t\t\tif (classNames.length) {\n\t\t\t\treturn this.each(function () {\n\t\t\t\t\tcurValue = getClass(this);\n\t\t\t\t\tcur = this.nodeType === 1 && (\" \" + stripAndCollapse(curValue) + \" \");\n\n\t\t\t\t\tif (cur) {\n\t\t\t\t\t\tfor (i = 0; i < classNames.length; i++) {\n\t\t\t\t\t\t\tclassName = classNames[i];\n\t\t\t\t\t\t\tif (cur.indexOf(\" \" + className + \" \") < 0) {\n\t\t\t\t\t\t\t\tcur += className + \" \";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\t\tfinalValue = stripAndCollapse(cur);\n\t\t\t\t\t\tif (curValue !== finalValue) {\n\t\t\t\t\t\t\tthis.setAttribute(\"class\", finalValue);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn this;\n\t\t},\n\n\t\tremoveClass: function (value) {\n\t\t\tvar classNames, cur, curValue, className, i, finalValue;\n\n\t\t\tif (isFunction(value)) {\n\t\t\t\treturn this.each(function (j) {\n\t\t\t\t\tjQuery(this).removeClass(value.call(this, j, getClass(this)));\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (!arguments.length) {\n\t\t\t\treturn this.attr(\"class\", \"\");\n\t\t\t}\n\n\t\t\tclassNames = classesToArray(value);\n\n\t\t\tif (classNames.length) {\n\t\t\t\treturn this.each(function () {\n\t\t\t\t\tcurValue = getClass(this);\n\n\t\t\t\t\t// This expression is here for better compressibility (see addClass)\n\t\t\t\t\tcur = this.nodeType === 1 && (\" \" + stripAndCollapse(curValue) + \" \");\n\n\t\t\t\t\tif (cur) {\n\t\t\t\t\t\tfor (i = 0; i < classNames.length; i++) {\n\t\t\t\t\t\t\tclassName = classNames[i];\n\n\t\t\t\t\t\t\t// Remove *all* instances\n\t\t\t\t\t\t\twhile (cur.indexOf(\" \" + className + \" \") > -1) {\n\t\t\t\t\t\t\t\tcur = cur.replace(\" \" + className + \" \", \" \");\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\t\tfinalValue = stripAndCollapse(cur);\n\t\t\t\t\t\tif (curValue !== finalValue) {\n\t\t\t\t\t\t\tthis.setAttribute(\"class\", finalValue);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn this;\n\t\t},\n\n\t\ttoggleClass: function (value, stateVal) {\n\t\t\tvar classNames, className, i, self,\n\t\t\t\ttype = typeof value,\n\t\t\t\tisValidValue = type === \"string\" || Array.isArray(value);\n\n\t\t\tif (isFunction(value)) {\n\t\t\t\treturn this.each(function (i) {\n\t\t\t\t\tjQuery(this).toggleClass(\n\t\t\t\t\t\tvalue.call(this, i, getClass(this), stateVal),\n\t\t\t\t\t\tstateVal\n\t\t\t\t\t);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (typeof stateVal === \"boolean\" && isValidValue) {\n\t\t\t\treturn stateVal ? this.addClass(value) : this.removeClass(value);\n\t\t\t}\n\n\t\t\tclassNames = classesToArray(value);\n\n\t\t\treturn this.each(function () {\n\t\t\t\tif (isValidValue) {\n\n\t\t\t\t\t// Toggle individual class names\n\t\t\t\t\tself = jQuery(this);\n\n\t\t\t\t\tfor (i = 0; i < classNames.length; i++) {\n\t\t\t\t\t\tclassName = classNames[i];\n\n\t\t\t\t\t\t// Check each className given, space separated list\n\t\t\t\t\t\tif (self.hasClass(className)) {\n\t\t\t\t\t\t\tself.removeClass(className);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tself.addClass(className);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Toggle whole class name\n\t\t\t\t} else if (value === undefined || type === \"boolean\") {\n\t\t\t\t\tclassName = getClass(this);\n\t\t\t\t\tif (className) {\n\n\t\t\t\t\t\t// Store className if set\n\t\t\t\t\t\tdataPriv.set(this, \"__className__\", className);\n\t\t\t\t\t}\n\n\t\t\t\t\t// If the element has a class name or if we're passed `false`,\n\t\t\t\t\t// then remove the whole classname (if there was one, the above saved it).\n\t\t\t\t\t// Otherwise bring back whatever was previously saved (if anything),\n\t\t\t\t\t// falling back to the empty string if nothing was stored.\n\t\t\t\t\tif (this.setAttribute) {\n\t\t\t\t\t\tthis.setAttribute(\"class\",\n\t\t\t\t\t\t\tclassName || value === false ?\n\t\t\t\t\t\t\t\t\"\" :\n\t\t\t\t\t\t\t\tdataPriv.get(this, \"__className__\") || \"\"\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\thasClass: function (selector) {\n\t\t\tvar className, elem,\n\t\t\t\ti = 0;\n\n\t\t\tclassName = \" \" + selector + \" \";\n\t\t\twhile ((elem = this[i++])) {\n\t\t\t\tif (elem.nodeType === 1 &&\n\t\t\t\t\t(\" \" + stripAndCollapse(getClass(elem)) + \" \").indexOf(className) > -1) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn false;\n\t\t}\n\t});\n\n\n\n\n\tvar rreturn = /\\r/g;\n\n\tjQuery.fn.extend({\n\t\tval: function (value) {\n\t\t\tvar hooks, ret, valueIsFunction,\n\t\t\t\telem = this[0];\n\n\t\t\tif (!arguments.length) {\n\t\t\t\tif (elem) {\n\t\t\t\t\thooks = jQuery.valHooks[elem.type] ||\n\t\t\t\t\t\tjQuery.valHooks[elem.nodeName.toLowerCase()];\n\n\t\t\t\t\tif (hooks &&\n\t\t\t\t\t\t\"get\" in hooks &&\n\t\t\t\t\t\t(ret = hooks.get(elem, \"value\")) !== undefined\n\t\t\t\t\t) {\n\t\t\t\t\t\treturn ret;\n\t\t\t\t\t}\n\n\t\t\t\t\tret = elem.value;\n\n\t\t\t\t\t// Handle most common string cases\n\t\t\t\t\tif (typeof ret === \"string\") {\n\t\t\t\t\t\treturn ret.replace(rreturn, \"\");\n\t\t\t\t\t}\n\n\t\t\t\t\t// Handle cases where value is null/undef or number\n\t\t\t\t\treturn ret == null ? \"\" : ret;\n\t\t\t\t}\n\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvalueIsFunction = isFunction(value);\n\n\t\t\treturn this.each(function (i) {\n\t\t\t\tvar val;\n\n\t\t\t\tif (this.nodeType !== 1) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (valueIsFunction) {\n\t\t\t\t\tval = value.call(this, i, jQuery(this).val());\n\t\t\t\t} else {\n\t\t\t\t\tval = value;\n\t\t\t\t}\n\n\t\t\t\t// Treat null/undefined as \"\"; convert numbers to string\n\t\t\t\tif (val == null) {\n\t\t\t\t\tval = \"\";\n\n\t\t\t\t} else if (typeof val === \"number\") {\n\t\t\t\t\tval += \"\";\n\n\t\t\t\t} else if (Array.isArray(val)) {\n\t\t\t\t\tval = jQuery.map(val, function (value) {\n\t\t\t\t\t\treturn value == null ? \"\" : value + \"\";\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\thooks = jQuery.valHooks[this.type] || jQuery.valHooks[this.nodeName.toLowerCase()];\n\n\t\t\t\t// If set returns undefined, fall back to normal setting\n\t\t\t\tif (!hooks || !(\"set\" in hooks) || hooks.set(this, val, \"value\") === undefined) {\n\t\t\t\t\tthis.value = val;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t});\n\n\tjQuery.extend({\n\t\tvalHooks: {\n\t\t\toption: {\n\t\t\t\tget: function (elem) {\n\n\t\t\t\t\tvar val = jQuery.find.attr(elem, \"value\");\n\t\t\t\t\treturn val != null ?\n\t\t\t\t\t\tval :\n\n\t\t\t\t\t\t// Support: IE <=10 - 11 only\n\t\t\t\t\t\t// option.text throws exceptions (trac-14686, trac-14858)\n\t\t\t\t\t\t// Strip and collapse whitespace\n\t\t\t\t\t\t// https://html.spec.whatwg.org/#strip-and-collapse-whitespace\n\t\t\t\t\t\tstripAndCollapse(jQuery.text(elem));\n\t\t\t\t}\n\t\t\t},\n\t\t\tselect: {\n\t\t\t\tget: function (elem) {\n\t\t\t\t\tvar value, option, i,\n\t\t\t\t\t\toptions = elem.options,\n\t\t\t\t\t\tindex = elem.selectedIndex,\n\t\t\t\t\t\tone = elem.type === \"select-one\",\n\t\t\t\t\t\tvalues = one ? null : [],\n\t\t\t\t\t\tmax = one ? index + 1 : options.length;\n\n\t\t\t\t\tif (index < 0) {\n\t\t\t\t\t\ti = max;\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\ti = one ? index : 0;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Loop through all the selected options\n\t\t\t\t\tfor (; i < max; i++) {\n\t\t\t\t\t\toption = options[i];\n\n\t\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t\t// IE8-9 doesn't update selected after form reset (trac-2551)\n\t\t\t\t\t\tif ((option.selected || i === index) &&\n\n\t\t\t\t\t\t\t// Don't return options that are disabled or in a disabled optgroup\n\t\t\t\t\t\t\t!option.disabled &&\n\t\t\t\t\t\t\t(!option.parentNode.disabled ||\n\t\t\t\t\t\t\t\t!nodeName(option.parentNode, \"optgroup\"))) {\n\n\t\t\t\t\t\t\t// Get the specific value for the option\n\t\t\t\t\t\t\tvalue = jQuery(option).val();\n\n\t\t\t\t\t\t\t// We don't need an array for one selects\n\t\t\t\t\t\t\tif (one) {\n\t\t\t\t\t\t\t\treturn value;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Multi-Selects return an array\n\t\t\t\t\t\t\tvalues.push(value);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn values;\n\t\t\t\t},\n\n\t\t\t\tset: function (elem, value) {\n\t\t\t\t\tvar optionSet, option,\n\t\t\t\t\t\toptions = elem.options,\n\t\t\t\t\t\tvalues = jQuery.makeArray(value),\n\t\t\t\t\t\ti = options.length;\n\n\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\toption = options[i];\n\n\t\t\t\t\t\t/* eslint-disable no-cond-assign */\n\n\t\t\t\t\t\tif (option.selected =\n\t\t\t\t\t\t\tjQuery.inArray(jQuery.valHooks.option.get(option), values) > -1\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\toptionSet = true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t/* eslint-enable no-cond-assign */\n\t\t\t\t\t}\n\n\t\t\t\t\t// Force browsers to behave consistently when non-matching value is set\n\t\t\t\t\tif (!optionSet) {\n\t\t\t\t\t\telem.selectedIndex = -1;\n\t\t\t\t\t}\n\t\t\t\t\treturn values;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\n\t// Radios and checkboxes getter/setter\n\tjQuery.each([\"radio\", \"checkbox\"], function () {\n\t\tjQuery.valHooks[this] = {\n\t\t\tset: function (elem, value) {\n\t\t\t\tif (Array.isArray(value)) {\n\t\t\t\t\treturn (elem.checked = jQuery.inArray(jQuery(elem).val(), value) > -1);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\tif (!support.checkOn) {\n\t\t\tjQuery.valHooks[this].get = function (elem) {\n\t\t\t\treturn elem.getAttribute(\"value\") === null ? \"on\" : elem.value;\n\t\t\t};\n\t\t}\n\t});\n\n\n\n\n\t// Return jQuery for attributes-only inclusion\n\tvar location = window.location;\n\n\tvar nonce = { guid: Date.now() };\n\n\tvar rquery = (/\\?/);\n\n\n\n\t// Cross-browser xml parsing\n\tjQuery.parseXML = function (data) {\n\t\tvar xml, parserErrorElem;\n\t\tif (!data || typeof data !== \"string\") {\n\t\t\treturn null;\n\t\t}\n\n\t\t// Support: IE 9 - 11 only\n\t\t// IE throws on parseFromString with invalid input.\n\t\ttry {\n\t\t\txml = (new window.DOMParser()).parseFromString(data, \"text/xml\");\n\t\t} catch (e) { }\n\n\t\tparserErrorElem = xml && xml.getElementsByTagName(\"parsererror\")[0];\n\t\tif (!xml || parserErrorElem) {\n\t\t\tjQuery.error(\"Invalid XML: \" + (\n\t\t\t\tparserErrorElem ?\n\t\t\t\t\tjQuery.map(parserErrorElem.childNodes, function (el) {\n\t\t\t\t\t\treturn el.textContent;\n\t\t\t\t\t}).join(\"\\n\") :\n\t\t\t\t\tdata\n\t\t\t));\n\t\t}\n\t\treturn xml;\n\t};\n\n\n\tvar rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,\n\t\tstopPropagationCallback = function (e) {\n\t\t\te.stopPropagation();\n\t\t};\n\n\tjQuery.extend(jQuery.event, {\n\n\t\ttrigger: function (event, data, elem, onlyHandlers) {\n\n\t\t\tvar i, cur, tmp, bubbleType, ontype, handle, special, lastElement,\n\t\t\t\teventPath = [elem || document],\n\t\t\t\ttype = hasOwn.call(event, \"type\") ? event.type : event,\n\t\t\t\tnamespaces = hasOwn.call(event, \"namespace\") ? event.namespace.split(\".\") : [];\n\n\t\t\tcur = lastElement = tmp = elem = elem || document;\n\n\t\t\t// Don't do events on text and comment nodes\n\t\t\tif (elem.nodeType === 3 || elem.nodeType === 8) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// focus/blur morphs to focusin/out; ensure we're not firing them right now\n\t\t\tif (rfocusMorph.test(type + jQuery.event.triggered)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (type.indexOf(\".\") > -1) {\n\n\t\t\t\t// Namespaced trigger; create a regexp to match event type in handle()\n\t\t\t\tnamespaces = type.split(\".\");\n\t\t\t\ttype = namespaces.shift();\n\t\t\t\tnamespaces.sort();\n\t\t\t}\n\t\t\tontype = type.indexOf(\":\") < 0 && \"on\" + type;\n\n\t\t\t// Caller can pass in a jQuery.Event object, Object, or just an event type string\n\t\t\tevent = event[jQuery.expando] ?\n\t\t\t\tevent :\n\t\t\t\tnew jQuery.Event(type, typeof event === \"object\" && event);\n\n\t\t\t// Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)\n\t\t\tevent.isTrigger = onlyHandlers ? 2 : 3;\n\t\t\tevent.namespace = namespaces.join(\".\");\n\t\t\tevent.rnamespace = event.namespace ?\n\t\t\t\tnew RegExp(\"(^|\\\\.)\" + namespaces.join(\"\\\\.(?:.*\\\\.|)\") + \"(\\\\.|$)\") :\n\t\t\t\tnull;\n\n\t\t\t// Clean up the event in case it is being reused\n\t\t\tevent.result = undefined;\n\t\t\tif (!event.target) {\n\t\t\t\tevent.target = elem;\n\t\t\t}\n\n\t\t\t// Clone any incoming data and prepend the event, creating the handler arg list\n\t\t\tdata = data == null ?\n\t\t\t\t[event] :\n\t\t\t\tjQuery.makeArray(data, [event]);\n\n\t\t\t// Allow special events to draw outside the lines\n\t\t\tspecial = jQuery.event.special[type] || {};\n\t\t\tif (!onlyHandlers && special.trigger && special.trigger.apply(elem, data) === false) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Determine event propagation path in advance, per W3C events spec (trac-9951)\n\t\t\t// Bubble up to document, then to window; watch for a global ownerDocument var (trac-9724)\n\t\t\tif (!onlyHandlers && !special.noBubble && !isWindow(elem)) {\n\n\t\t\t\tbubbleType = special.delegateType || type;\n\t\t\t\tif (!rfocusMorph.test(bubbleType + type)) {\n\t\t\t\t\tcur = cur.parentNode;\n\t\t\t\t}\n\t\t\t\tfor (; cur; cur = cur.parentNode) {\n\t\t\t\t\teventPath.push(cur);\n\t\t\t\t\ttmp = cur;\n\t\t\t\t}\n\n\t\t\t\t// Only add window if we got to document (e.g., not plain obj or detached DOM)\n\t\t\t\tif (tmp === (elem.ownerDocument || document)) {\n\t\t\t\t\teventPath.push(tmp.defaultView || tmp.parentWindow || window);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Fire handlers on the event path\n\t\t\ti = 0;\n\t\t\twhile ((cur = eventPath[i++]) && !event.isPropagationStopped()) {\n\t\t\t\tlastElement = cur;\n\t\t\t\tevent.type = i > 1 ?\n\t\t\t\t\tbubbleType :\n\t\t\t\t\tspecial.bindType || type;\n\n\t\t\t\t// jQuery handler\n\t\t\t\thandle = (dataPriv.get(cur, \"events\") || Object.create(null))[event.type] &&\n\t\t\t\t\tdataPriv.get(cur, \"handle\");\n\t\t\t\tif (handle) {\n\t\t\t\t\thandle.apply(cur, data);\n\t\t\t\t}\n\n\t\t\t\t// Native handler\n\t\t\t\thandle = ontype && cur[ontype];\n\t\t\t\tif (handle && handle.apply && acceptData(cur)) {\n\t\t\t\t\tevent.result = handle.apply(cur, data);\n\t\t\t\t\tif (event.result === false) {\n\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tevent.type = type;\n\n\t\t\t// If nobody prevented the default action, do it now\n\t\t\tif (!onlyHandlers && !event.isDefaultPrevented()) {\n\n\t\t\t\tif ((!special._default ||\n\t\t\t\t\tspecial._default.apply(eventPath.pop(), data) === false) &&\n\t\t\t\t\tacceptData(elem)) {\n\n\t\t\t\t\t// Call a native DOM method on the target with the same name as the event.\n\t\t\t\t\t// Don't do default actions on window, that's where global variables be (trac-6170)\n\t\t\t\t\tif (ontype && isFunction(elem[type]) && !isWindow(elem)) {\n\n\t\t\t\t\t\t// Don't re-trigger an onFOO event when we call its FOO() method\n\t\t\t\t\t\ttmp = elem[ontype];\n\n\t\t\t\t\t\tif (tmp) {\n\t\t\t\t\t\t\telem[ontype] = null;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Prevent re-triggering of the same event, since we already bubbled it above\n\t\t\t\t\t\tjQuery.event.triggered = type;\n\n\t\t\t\t\t\tif (event.isPropagationStopped()) {\n\t\t\t\t\t\t\tlastElement.addEventListener(type, stopPropagationCallback);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\telem[type]();\n\n\t\t\t\t\t\tif (event.isPropagationStopped()) {\n\t\t\t\t\t\t\tlastElement.removeEventListener(type, stopPropagationCallback);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tjQuery.event.triggered = undefined;\n\n\t\t\t\t\t\tif (tmp) {\n\t\t\t\t\t\t\telem[ontype] = tmp;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn event.result;\n\t\t},\n\n\t\t// Piggyback on a donor event to simulate a different one\n\t\t// Used only for `focus(in | out)` events\n\t\tsimulate: function (type, elem, event) {\n\t\t\tvar e = jQuery.extend(\n\t\t\t\tnew jQuery.Event(),\n\t\t\t\tevent,\n\t\t\t\t{\n\t\t\t\t\ttype: type,\n\t\t\t\t\tisSimulated: true\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tjQuery.event.trigger(e, null, elem);\n\t\t}\n\n\t});\n\n\tjQuery.fn.extend({\n\n\t\ttrigger: function (type, data) {\n\t\t\treturn this.each(function () {\n\t\t\t\tjQuery.event.trigger(type, data, this);\n\t\t\t});\n\t\t},\n\t\ttriggerHandler: function (type, data) {\n\t\t\tvar elem = this[0];\n\t\t\tif (elem) {\n\t\t\t\treturn jQuery.event.trigger(type, data, elem, true);\n\t\t\t}\n\t\t}\n\t});\n\n\n\tvar\n\t\trbracket = /\\[\\]$/,\n\t\trCRLF = /\\r?\\n/g,\n\t\trsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,\n\t\trsubmittable = /^(?:input|select|textarea|keygen)/i;\n\n\tfunction buildParams(prefix, obj, traditional, add) {\n\t\tvar name;\n\n\t\tif (Array.isArray(obj)) {\n\n\t\t\t// Serialize array item.\n\t\t\tjQuery.each(obj, function (i, v) {\n\t\t\t\tif (traditional || rbracket.test(prefix)) {\n\n\t\t\t\t\t// Treat each array item as a scalar.\n\t\t\t\t\tadd(prefix, v);\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// Item is non-scalar (array or object), encode its numeric index.\n\t\t\t\t\tbuildParams(\n\t\t\t\t\t\tprefix + \"[\" + (typeof v === \"object\" && v != null ? i : \"\") + \"]\",\n\t\t\t\t\t\tv,\n\t\t\t\t\t\ttraditional,\n\t\t\t\t\t\tadd\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t});\n\n\t\t} else if (!traditional && toType(obj) === \"object\") {\n\n\t\t\t// Serialize object item.\n\t\t\tfor (name in obj) {\n\t\t\t\tbuildParams(prefix + \"[\" + name + \"]\", obj[name], traditional, add);\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// Serialize scalar item.\n\t\t\tadd(prefix, obj);\n\t\t}\n\t}\n\n\t// Serialize an array of form elements or a set of\n\t// key/values into a query string\n\tjQuery.param = function (a, traditional) {\n\t\tvar prefix,\n\t\t\ts = [],\n\t\t\tadd = function (key, valueOrFunction) {\n\n\t\t\t\t// If value is a function, invoke it and use its return value\n\t\t\t\tvar value = isFunction(valueOrFunction) ?\n\t\t\t\t\tvalueOrFunction() :\n\t\t\t\t\tvalueOrFunction;\n\n\t\t\t\ts[s.length] = encodeURIComponent(key) + \"=\" +\n\t\t\t\t\tencodeURIComponent(value == null ? \"\" : value);\n\t\t\t};\n\n\t\tif (a == null) {\n\t\t\treturn \"\";\n\t\t}\n\n\t\t// If an array was passed in, assume that it is an array of form elements.\n\t\tif (Array.isArray(a) || (a.jquery && !jQuery.isPlainObject(a))) {\n\n\t\t\t// Serialize the form elements\n\t\t\tjQuery.each(a, function () {\n\t\t\t\tadd(this.name, this.value);\n\t\t\t});\n\n\t\t} else {\n\n\t\t\t// If traditional, encode the \"old\" way (the way 1.3.2 or older\n\t\t\t// did it), otherwise encode params recursively.\n\t\t\tfor (prefix in a) {\n\t\t\t\tbuildParams(prefix, a[prefix], traditional, add);\n\t\t\t}\n\t\t}\n\n\t\t// Return the resulting serialization\n\t\treturn s.join(\"&\");\n\t};\n\n\tjQuery.fn.extend({\n\t\tserialize: function () {\n\t\t\treturn jQuery.param(this.serializeArray());\n\t\t},\n\t\tserializeArray: function () {\n\t\t\treturn this.map(function () {\n\n\t\t\t\t// Can add propHook for \"elements\" to filter or add form elements\n\t\t\t\tvar elements = jQuery.prop(this, \"elements\");\n\t\t\t\treturn elements ? jQuery.makeArray(elements) : this;\n\t\t\t}).filter(function () {\n\t\t\t\tvar type = this.type;\n\n\t\t\t\t// Use .is( \":disabled\" ) so that fieldset[disabled] works\n\t\t\t\treturn this.name && !jQuery(this).is(\":disabled\") &&\n\t\t\t\t\trsubmittable.test(this.nodeName) && !rsubmitterTypes.test(type) &&\n\t\t\t\t\t(this.checked || !rcheckableType.test(type));\n\t\t\t}).map(function (_i, elem) {\n\t\t\t\tvar val = jQuery(this).val();\n\n\t\t\t\tif (val == null) {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\n\t\t\t\tif (Array.isArray(val)) {\n\t\t\t\t\treturn jQuery.map(val, function (val) {\n\t\t\t\t\t\treturn { name: elem.name, value: val.replace(rCRLF, \"\\r\\n\") };\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\treturn { name: elem.name, value: val.replace(rCRLF, \"\\r\\n\") };\n\t\t\t}).get();\n\t\t}\n\t});\n\n\n\tvar\n\t\tr20 = /%20/g,\n\t\trhash = /#.*$/,\n\t\trantiCache = /([?&])_=[^&]*/,\n\t\trheaders = /^(.*?):[ \\t]*([^\\r\\n]*)$/mg,\n\n\t\t// trac-7653, trac-8125, trac-8152: local protocol detection\n\t\trlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,\n\t\trnoContent = /^(?:GET|HEAD)$/,\n\t\trprotocol = /^\\/\\//,\n\n\t\t/* Prefilters\n\t\t * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)\n\t\t * 2) These are called:\n\t\t *    - BEFORE asking for a transport\n\t\t *    - AFTER param serialization (s.data is a string if s.processData is true)\n\t\t * 3) key is the dataType\n\t\t * 4) the catchall symbol \"*\" can be used\n\t\t * 5) execution will start with transport dataType and THEN continue down to \"*\" if needed\n\t\t */\n\t\tprefilters = {},\n\n\t\t/* Transports bindings\n\t\t * 1) key is the dataType\n\t\t * 2) the catchall symbol \"*\" can be used\n\t\t * 3) selection will start with transport dataType and THEN go to \"*\" if needed\n\t\t */\n\t\ttransports = {},\n\n\t\t// Avoid comment-prolog char sequence (trac-10098); must appease lint and evade compression\n\t\tallTypes = \"*/\".concat(\"*\"),\n\n\t\t// Anchor tag for parsing the document origin\n\t\toriginAnchor = document.createElement(\"a\");\n\n\toriginAnchor.href = location.href;\n\n\t// Base \"constructor\" for jQuery.ajaxPrefilter and jQuery.ajaxTransport\n\tfunction addToPrefiltersOrTransports(structure) {\n\n\t\t// dataTypeExpression is optional and defaults to \"*\"\n\t\treturn function (dataTypeExpression, func) {\n\n\t\t\tif (typeof dataTypeExpression !== \"string\") {\n\t\t\t\tfunc = dataTypeExpression;\n\t\t\t\tdataTypeExpression = \"*\";\n\t\t\t}\n\n\t\t\tvar dataType,\n\t\t\t\ti = 0,\n\t\t\t\tdataTypes = dataTypeExpression.toLowerCase().match(rnothtmlwhite) || [];\n\n\t\t\tif (isFunction(func)) {\n\n\t\t\t\t// For each dataType in the dataTypeExpression\n\t\t\t\twhile ((dataType = dataTypes[i++])) {\n\n\t\t\t\t\t// Prepend if requested\n\t\t\t\t\tif (dataType[0] === \"+\") {\n\t\t\t\t\t\tdataType = dataType.slice(1) || \"*\";\n\t\t\t\t\t\t(structure[dataType] = structure[dataType] || []).unshift(func);\n\n\t\t\t\t\t\t// Otherwise append\n\t\t\t\t\t} else {\n\t\t\t\t\t\t(structure[dataType] = structure[dataType] || []).push(func);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n\n\t// Base inspection function for prefilters and transports\n\tfunction inspectPrefiltersOrTransports(structure, options, originalOptions, jqXHR) {\n\n\t\tvar inspected = {},\n\t\t\tseekingTransport = (structure === transports);\n\n\t\tfunction inspect(dataType) {\n\t\t\tvar selected;\n\t\t\tinspected[dataType] = true;\n\t\t\tjQuery.each(structure[dataType] || [], function (_, prefilterOrFactory) {\n\t\t\t\tvar dataTypeOrTransport = prefilterOrFactory(options, originalOptions, jqXHR);\n\t\t\t\tif (typeof dataTypeOrTransport === \"string\" &&\n\t\t\t\t\t!seekingTransport && !inspected[dataTypeOrTransport]) {\n\n\t\t\t\t\toptions.dataTypes.unshift(dataTypeOrTransport);\n\t\t\t\t\tinspect(dataTypeOrTransport);\n\t\t\t\t\treturn false;\n\t\t\t\t} else if (seekingTransport) {\n\t\t\t\t\treturn !(selected = dataTypeOrTransport);\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn selected;\n\t\t}\n\n\t\treturn inspect(options.dataTypes[0]) || !inspected[\"*\"] && inspect(\"*\");\n\t}\n\n\t// A special extend for ajax options\n\t// that takes \"flat\" options (not to be deep extended)\n\t// Fixes trac-9887\n\tfunction ajaxExtend(target, src) {\n\t\tvar key, deep,\n\t\t\tflatOptions = jQuery.ajaxSettings.flatOptions || {};\n\n\t\tfor (key in src) {\n\t\t\tif (src[key] !== undefined) {\n\t\t\t\t(flatOptions[key] ? target : (deep || (deep = {})))[key] = src[key];\n\t\t\t}\n\t\t}\n\t\tif (deep) {\n\t\t\tjQuery.extend(true, target, deep);\n\t\t}\n\n\t\treturn target;\n\t}\n\n\t/* Handles responses to an ajax request:\n\t * - finds the right dataType (mediates between content-type and expected dataType)\n\t * - returns the corresponding response\n\t */\n\tfunction ajaxHandleResponses(s, jqXHR, responses) {\n\n\t\tvar ct, type, finalDataType, firstDataType,\n\t\t\tcontents = s.contents,\n\t\t\tdataTypes = s.dataTypes;\n\n\t\t// Remove auto dataType and get content-type in the process\n\t\twhile (dataTypes[0] === \"*\") {\n\t\t\tdataTypes.shift();\n\t\t\tif (ct === undefined) {\n\t\t\t\tct = s.mimeType || jqXHR.getResponseHeader(\"Content-Type\");\n\t\t\t}\n\t\t}\n\n\t\t// Check if we're dealing with a known content-type\n\t\tif (ct) {\n\t\t\tfor (type in contents) {\n\t\t\t\tif (contents[type] && contents[type].test(ct)) {\n\t\t\t\t\tdataTypes.unshift(type);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Check to see if we have a response for the expected dataType\n\t\tif (dataTypes[0] in responses) {\n\t\t\tfinalDataType = dataTypes[0];\n\t\t} else {\n\n\t\t\t// Try convertible dataTypes\n\t\t\tfor (type in responses) {\n\t\t\t\tif (!dataTypes[0] || s.converters[type + \" \" + dataTypes[0]]) {\n\t\t\t\t\tfinalDataType = type;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (!firstDataType) {\n\t\t\t\t\tfirstDataType = type;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Or just use first one\n\t\t\tfinalDataType = finalDataType || firstDataType;\n\t\t}\n\n\t\t// If we found a dataType\n\t\t// We add the dataType to the list if needed\n\t\t// and return the corresponding response\n\t\tif (finalDataType) {\n\t\t\tif (finalDataType !== dataTypes[0]) {\n\t\t\t\tdataTypes.unshift(finalDataType);\n\t\t\t}\n\t\t\treturn responses[finalDataType];\n\t\t}\n\t}\n\n\t/* Chain conversions given the request and the original response\n\t * Also sets the responseXXX fields on the jqXHR instance\n\t */\n\tfunction ajaxConvert(s, response, jqXHR, isSuccess) {\n\t\tvar conv2, current, conv, tmp, prev,\n\t\t\tconverters = {},\n\n\t\t\t// Work with a copy of dataTypes in case we need to modify it for conversion\n\t\t\tdataTypes = s.dataTypes.slice();\n\n\t\t// Create converters map with lowercased keys\n\t\tif (dataTypes[1]) {\n\t\t\tfor (conv in s.converters) {\n\t\t\t\tconverters[conv.toLowerCase()] = s.converters[conv];\n\t\t\t}\n\t\t}\n\n\t\tcurrent = dataTypes.shift();\n\n\t\t// Convert to each sequential dataType\n\t\twhile (current) {\n\n\t\t\tif (s.responseFields[current]) {\n\t\t\t\tjqXHR[s.responseFields[current]] = response;\n\t\t\t}\n\n\t\t\t// Apply the dataFilter if provided\n\t\t\tif (!prev && isSuccess && s.dataFilter) {\n\t\t\t\tresponse = s.dataFilter(response, s.dataType);\n\t\t\t}\n\n\t\t\tprev = current;\n\t\t\tcurrent = dataTypes.shift();\n\n\t\t\tif (current) {\n\n\t\t\t\t// There's only work to do if current dataType is non-auto\n\t\t\t\tif (current === \"*\") {\n\n\t\t\t\t\tcurrent = prev;\n\n\t\t\t\t\t// Convert response if prev dataType is non-auto and differs from current\n\t\t\t\t} else if (prev !== \"*\" && prev !== current) {\n\n\t\t\t\t\t// Seek a direct converter\n\t\t\t\t\tconv = converters[prev + \" \" + current] || converters[\"* \" + current];\n\n\t\t\t\t\t// If none found, seek a pair\n\t\t\t\t\tif (!conv) {\n\t\t\t\t\t\tfor (conv2 in converters) {\n\n\t\t\t\t\t\t\t// If conv2 outputs current\n\t\t\t\t\t\t\ttmp = conv2.split(\" \");\n\t\t\t\t\t\t\tif (tmp[1] === current) {\n\n\t\t\t\t\t\t\t\t// If prev can be converted to accepted input\n\t\t\t\t\t\t\t\tconv = converters[prev + \" \" + tmp[0]] ||\n\t\t\t\t\t\t\t\t\tconverters[\"* \" + tmp[0]];\n\t\t\t\t\t\t\t\tif (conv) {\n\n\t\t\t\t\t\t\t\t\t// Condense equivalence converters\n\t\t\t\t\t\t\t\t\tif (conv === true) {\n\t\t\t\t\t\t\t\t\t\tconv = converters[conv2];\n\n\t\t\t\t\t\t\t\t\t\t// Otherwise, insert the intermediate dataType\n\t\t\t\t\t\t\t\t\t} else if (converters[conv2] !== true) {\n\t\t\t\t\t\t\t\t\t\tcurrent = tmp[0];\n\t\t\t\t\t\t\t\t\t\tdataTypes.unshift(tmp[1]);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Apply converter (if not an equivalence)\n\t\t\t\t\tif (conv !== true) {\n\n\t\t\t\t\t\t// Unless errors are allowed to bubble, catch and return them\n\t\t\t\t\t\tif (conv && s.throws) {\n\t\t\t\t\t\t\tresponse = conv(response);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\tresponse = conv(response);\n\t\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\tstate: \"parsererror\",\n\t\t\t\t\t\t\t\t\terror: conv ? e : \"No conversion from \" + prev + \" to \" + current\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn { state: \"success\", data: response };\n\t}\n\n\tjQuery.extend({\n\n\t\t// Counter for holding the number of active queries\n\t\tactive: 0,\n\n\t\t// Last-Modified header cache for next request\n\t\tlastModified: {},\n\t\tetag: {},\n\n\t\tajaxSettings: {\n\t\t\turl: location.href,\n\t\t\ttype: \"GET\",\n\t\t\tisLocal: rlocalProtocol.test(location.protocol),\n\t\t\tglobal: true,\n\t\t\tprocessData: true,\n\t\t\tasync: true,\n\t\t\tcontentType: \"application/x-www-form-urlencoded; charset=UTF-8\",\n\n\t\t\t/*\n\t\t\ttimeout: 0,\n\t\t\tdata: null,\n\t\t\tdataType: null,\n\t\t\tusername: null,\n\t\t\tpassword: null,\n\t\t\tcache: null,\n\t\t\tthrows: false,\n\t\t\ttraditional: false,\n\t\t\theaders: {},\n\t\t\t*/\n\n\t\t\taccepts: {\n\t\t\t\t\"*\": allTypes,\n\t\t\t\ttext: \"text/plain\",\n\t\t\t\thtml: \"text/html\",\n\t\t\t\txml: \"application/xml, text/xml\",\n\t\t\t\tjson: \"application/json, text/javascript\"\n\t\t\t},\n\n\t\t\tcontents: {\n\t\t\t\txml: /\\bxml\\b/,\n\t\t\t\thtml: /\\bhtml/,\n\t\t\t\tjson: /\\bjson\\b/\n\t\t\t},\n\n\t\t\tresponseFields: {\n\t\t\t\txml: \"responseXML\",\n\t\t\t\ttext: \"responseText\",\n\t\t\t\tjson: \"responseJSON\"\n\t\t\t},\n\n\t\t\t// Data converters\n\t\t\t// Keys separate source (or catchall \"*\") and destination types with a single space\n\t\t\tconverters: {\n\n\t\t\t\t// Convert anything to text\n\t\t\t\t\"* text\": String,\n\n\t\t\t\t// Text to html (true = no transformation)\n\t\t\t\t\"text html\": true,\n\n\t\t\t\t// Evaluate text as a json expression\n\t\t\t\t\"text json\": JSON.parse,\n\n\t\t\t\t// Parse text as xml\n\t\t\t\t\"text xml\": jQuery.parseXML\n\t\t\t},\n\n\t\t\t// For options that shouldn't be deep extended:\n\t\t\t// you can add your own custom options here if\n\t\t\t// and when you create one that shouldn't be\n\t\t\t// deep extended (see ajaxExtend)\n\t\t\tflatOptions: {\n\t\t\t\turl: true,\n\t\t\t\tcontext: true\n\t\t\t}\n\t\t},\n\n\t\t// Creates a full fledged settings object into target\n\t\t// with both ajaxSettings and settings fields.\n\t\t// If target is omitted, writes into ajaxSettings.\n\t\tajaxSetup: function (target, settings) {\n\t\t\treturn settings ?\n\n\t\t\t\t// Building a settings object\n\t\t\t\tajaxExtend(ajaxExtend(target, jQuery.ajaxSettings), settings) :\n\n\t\t\t\t// Extending ajaxSettings\n\t\t\t\tajaxExtend(jQuery.ajaxSettings, target);\n\t\t},\n\n\t\tajaxPrefilter: addToPrefiltersOrTransports(prefilters),\n\t\tajaxTransport: addToPrefiltersOrTransports(transports),\n\n\t\t// Main method\n\t\tajax: function (url, options) {\n\n\t\t\t// If url is an object, simulate pre-1.5 signature\n\t\t\tif (typeof url === \"object\") {\n\t\t\t\toptions = url;\n\t\t\t\turl = undefined;\n\t\t\t}\n\n\t\t\t// Force options to be an object\n\t\t\toptions = options || {};\n\n\t\t\tvar transport,\n\n\t\t\t\t// URL without anti-cache param\n\t\t\t\tcacheURL,\n\n\t\t\t\t// Response headers\n\t\t\t\tresponseHeadersString,\n\t\t\t\tresponseHeaders,\n\n\t\t\t\t// timeout handle\n\t\t\t\ttimeoutTimer,\n\n\t\t\t\t// Url cleanup var\n\t\t\t\turlAnchor,\n\n\t\t\t\t// Request state (becomes false upon send and true upon completion)\n\t\t\t\tcompleted,\n\n\t\t\t\t// To know if global events are to be dispatched\n\t\t\t\tfireGlobals,\n\n\t\t\t\t// Loop variable\n\t\t\t\ti,\n\n\t\t\t\t// uncached part of the url\n\t\t\t\tuncached,\n\n\t\t\t\t// Create the final options object\n\t\t\t\ts = jQuery.ajaxSetup({}, options),\n\n\t\t\t\t// Callbacks context\n\t\t\t\tcallbackContext = s.context || s,\n\n\t\t\t\t// Context for global events is callbackContext if it is a DOM node or jQuery collection\n\t\t\t\tglobalEventContext = s.context &&\n\t\t\t\t\t(callbackContext.nodeType || callbackContext.jquery) ?\n\t\t\t\t\tjQuery(callbackContext) :\n\t\t\t\t\tjQuery.event,\n\n\t\t\t\t// Deferreds\n\t\t\t\tdeferred = jQuery.Deferred(),\n\t\t\t\tcompleteDeferred = jQuery.Callbacks(\"once memory\"),\n\n\t\t\t\t// Status-dependent callbacks\n\t\t\t\tstatusCode = s.statusCode || {},\n\n\t\t\t\t// Headers (they are sent all at once)\n\t\t\t\trequestHeaders = {},\n\t\t\t\trequestHeadersNames = {},\n\n\t\t\t\t// Default abort message\n\t\t\t\tstrAbort = \"canceled\",\n\n\t\t\t\t// Fake xhr\n\t\t\t\tjqXHR = {\n\t\t\t\t\treadyState: 0,\n\n\t\t\t\t\t// Builds headers hashtable if needed\n\t\t\t\t\tgetResponseHeader: function (key) {\n\t\t\t\t\t\tvar match;\n\t\t\t\t\t\tif (completed) {\n\t\t\t\t\t\t\tif (!responseHeaders) {\n\t\t\t\t\t\t\t\tresponseHeaders = {};\n\t\t\t\t\t\t\t\twhile ((match = rheaders.exec(responseHeadersString))) {\n\t\t\t\t\t\t\t\t\tresponseHeaders[match[1].toLowerCase() + \" \"] =\n\t\t\t\t\t\t\t\t\t\t(responseHeaders[match[1].toLowerCase() + \" \"] || [])\n\t\t\t\t\t\t\t\t\t\t\t.concat(match[2]);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tmatch = responseHeaders[key.toLowerCase() + \" \"];\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn match == null ? null : match.join(\", \");\n\t\t\t\t\t},\n\n\t\t\t\t\t// Raw string\n\t\t\t\t\tgetAllResponseHeaders: function () {\n\t\t\t\t\t\treturn completed ? responseHeadersString : null;\n\t\t\t\t\t},\n\n\t\t\t\t\t// Caches the header\n\t\t\t\t\tsetRequestHeader: function (name, value) {\n\t\t\t\t\t\tif (completed == null) {\n\t\t\t\t\t\t\tname = requestHeadersNames[name.toLowerCase()] =\n\t\t\t\t\t\t\t\trequestHeadersNames[name.toLowerCase()] || name;\n\t\t\t\t\t\t\trequestHeaders[name] = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn this;\n\t\t\t\t\t},\n\n\t\t\t\t\t// Overrides response content-type header\n\t\t\t\t\toverrideMimeType: function (type) {\n\t\t\t\t\t\tif (completed == null) {\n\t\t\t\t\t\t\ts.mimeType = type;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn this;\n\t\t\t\t\t},\n\n\t\t\t\t\t// Status-dependent callbacks\n\t\t\t\t\tstatusCode: function (map) {\n\t\t\t\t\t\tvar code;\n\t\t\t\t\t\tif (map) {\n\t\t\t\t\t\t\tif (completed) {\n\n\t\t\t\t\t\t\t\t// Execute the appropriate callbacks\n\t\t\t\t\t\t\t\tjqXHR.always(map[jqXHR.status]);\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t// Lazy-add the new callbacks in a way that preserves old ones\n\t\t\t\t\t\t\t\tfor (code in map) {\n\t\t\t\t\t\t\t\t\tstatusCode[code] = [statusCode[code], map[code]];\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn this;\n\t\t\t\t\t},\n\n\t\t\t\t\t// Cancel the request\n\t\t\t\t\tabort: function (statusText) {\n\t\t\t\t\t\tvar finalText = statusText || strAbort;\n\t\t\t\t\t\tif (transport) {\n\t\t\t\t\t\t\ttransport.abort(finalText);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdone(0, finalText);\n\t\t\t\t\t\treturn this;\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t// Attach deferreds\n\t\t\tdeferred.promise(jqXHR);\n\n\t\t\t// Add protocol if not provided (prefilters might expect it)\n\t\t\t// Handle falsy url in the settings object (trac-10093: consistency with old signature)\n\t\t\t// We also use the url parameter if available\n\t\t\ts.url = ((url || s.url || location.href) + \"\")\n\t\t\t\t.replace(rprotocol, location.protocol + \"//\");\n\n\t\t\t// Alias method option to type as per ticket trac-12004\n\t\t\ts.type = options.method || options.type || s.method || s.type;\n\n\t\t\t// Extract dataTypes list\n\t\t\ts.dataTypes = (s.dataType || \"*\").toLowerCase().match(rnothtmlwhite) || [\"\"];\n\n\t\t\t// A cross-domain request is in order when the origin doesn't match the current origin.\n\t\t\tif (s.crossDomain == null) {\n\t\t\t\turlAnchor = document.createElement(\"a\");\n\n\t\t\t\t// Support: IE <=8 - 11, Edge 12 - 15\n\t\t\t\t// IE throws exception on accessing the href property if url is malformed,\n\t\t\t\t// e.g. http://example.com:80x/\n\t\t\t\ttry {\n\t\t\t\t\turlAnchor.href = s.url;\n\n\t\t\t\t\t// Support: IE <=8 - 11 only\n\t\t\t\t\t// Anchor's host property isn't correctly set when s.url is relative\n\t\t\t\t\turlAnchor.href = urlAnchor.href;\n\t\t\t\t\ts.crossDomain = originAnchor.protocol + \"//\" + originAnchor.host !==\n\t\t\t\t\t\turlAnchor.protocol + \"//\" + urlAnchor.host;\n\t\t\t\t} catch (e) {\n\n\t\t\t\t\t// If there is an error parsing the URL, assume it is crossDomain,\n\t\t\t\t\t// it can be rejected by the transport if it is invalid\n\t\t\t\t\ts.crossDomain = true;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Convert data if not already a string\n\t\t\tif (s.data && s.processData && typeof s.data !== \"string\") {\n\t\t\t\ts.data = jQuery.param(s.data, s.traditional);\n\t\t\t}\n\n\t\t\t// Apply prefilters\n\t\t\tinspectPrefiltersOrTransports(prefilters, s, options, jqXHR);\n\n\t\t\t// If request was aborted inside a prefilter, stop there\n\t\t\tif (completed) {\n\t\t\t\treturn jqXHR;\n\t\t\t}\n\n\t\t\t// We can fire global events as of now if asked to\n\t\t\t// Don't fire events if jQuery.event is undefined in an AMD-usage scenario (trac-15118)\n\t\t\tfireGlobals = jQuery.event && s.global;\n\n\t\t\t// Watch for a new set of requests\n\t\t\tif (fireGlobals && jQuery.active++ === 0) {\n\t\t\t\tjQuery.event.trigger(\"ajaxStart\");\n\t\t\t}\n\n\t\t\t// Uppercase the type\n\t\t\ts.type = s.type.toUpperCase();\n\n\t\t\t// Determine if request has content\n\t\t\ts.hasContent = !rnoContent.test(s.type);\n\n\t\t\t// Save the URL in case we're toying with the If-Modified-Since\n\t\t\t// and/or If-None-Match header later on\n\t\t\t// Remove hash to simplify url manipulation\n\t\t\tcacheURL = s.url.replace(rhash, \"\");\n\n\t\t\t// More options handling for requests with no content\n\t\t\tif (!s.hasContent) {\n\n\t\t\t\t// Remember the hash so we can put it back\n\t\t\t\tuncached = s.url.slice(cacheURL.length);\n\n\t\t\t\t// If data is available and should be processed, append data to url\n\t\t\t\tif (s.data && (s.processData || typeof s.data === \"string\")) {\n\t\t\t\t\tcacheURL += (rquery.test(cacheURL) ? \"&\" : \"?\") + s.data;\n\n\t\t\t\t\t// trac-9682: remove data so that it's not used in an eventual retry\n\t\t\t\t\tdelete s.data;\n\t\t\t\t}\n\n\t\t\t\t// Add or update anti-cache param if needed\n\t\t\t\tif (s.cache === false) {\n\t\t\t\t\tcacheURL = cacheURL.replace(rantiCache, \"$1\");\n\t\t\t\t\tuncached = (rquery.test(cacheURL) ? \"&\" : \"?\") + \"_=\" + (nonce.guid++) +\n\t\t\t\t\t\tuncached;\n\t\t\t\t}\n\n\t\t\t\t// Put hash and anti-cache on the URL that will be requested (gh-1732)\n\t\t\t\ts.url = cacheURL + uncached;\n\n\t\t\t\t// Change '%20' to '+' if this is encoded form body content (gh-2658)\n\t\t\t} else if (s.data && s.processData &&\n\t\t\t\t(s.contentType || \"\").indexOf(\"application/x-www-form-urlencoded\") === 0) {\n\t\t\t\ts.data = s.data.replace(r20, \"+\");\n\t\t\t}\n\n\t\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\t\tif (s.ifModified) {\n\t\t\t\tif (jQuery.lastModified[cacheURL]) {\n\t\t\t\t\tjqXHR.setRequestHeader(\"If-Modified-Since\", jQuery.lastModified[cacheURL]);\n\t\t\t\t}\n\t\t\t\tif (jQuery.etag[cacheURL]) {\n\t\t\t\t\tjqXHR.setRequestHeader(\"If-None-Match\", jQuery.etag[cacheURL]);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Set the correct header, if data is being sent\n\t\t\tif (s.data && s.hasContent && s.contentType !== false || options.contentType) {\n\t\t\t\tjqXHR.setRequestHeader(\"Content-Type\", s.contentType);\n\t\t\t}\n\n\t\t\t// Set the Accepts header for the server, depending on the dataType\n\t\t\tjqXHR.setRequestHeader(\n\t\t\t\t\"Accept\",\n\t\t\t\ts.dataTypes[0] && s.accepts[s.dataTypes[0]] ?\n\t\t\t\t\ts.accepts[s.dataTypes[0]] +\n\t\t\t\t\t(s.dataTypes[0] !== \"*\" ? \", \" + allTypes + \"; q=0.01\" : \"\") :\n\t\t\t\t\ts.accepts[\"*\"]\n\t\t\t);\n\n\t\t\t// Check for headers option\n\t\t\tfor (i in s.headers) {\n\t\t\t\tjqXHR.setRequestHeader(i, s.headers[i]);\n\t\t\t}\n\n\t\t\t// Allow custom headers/mimetypes and early abort\n\t\t\tif (s.beforeSend &&\n\t\t\t\t(s.beforeSend.call(callbackContext, jqXHR, s) === false || completed)) {\n\n\t\t\t\t// Abort if not done already and return\n\t\t\t\treturn jqXHR.abort();\n\t\t\t}\n\n\t\t\t// Aborting is no longer a cancellation\n\t\t\tstrAbort = \"abort\";\n\n\t\t\t// Install callbacks on deferreds\n\t\t\tcompleteDeferred.add(s.complete);\n\t\t\tjqXHR.done(s.success);\n\t\t\tjqXHR.fail(s.error);\n\n\t\t\t// Get transport\n\t\t\ttransport = inspectPrefiltersOrTransports(transports, s, options, jqXHR);\n\n\t\t\t// If no transport, we auto-abort\n\t\t\tif (!transport) {\n\t\t\t\tdone(-1, \"No Transport\");\n\t\t\t} else {\n\t\t\t\tjqXHR.readyState = 1;\n\n\t\t\t\t// Send global event\n\t\t\t\tif (fireGlobals) {\n\t\t\t\t\tglobalEventContext.trigger(\"ajaxSend\", [jqXHR, s]);\n\t\t\t\t}\n\n\t\t\t\t// If request was aborted inside ajaxSend, stop there\n\t\t\t\tif (completed) {\n\t\t\t\t\treturn jqXHR;\n\t\t\t\t}\n\n\t\t\t\t// Timeout\n\t\t\t\tif (s.async && s.timeout > 0) {\n\t\t\t\t\ttimeoutTimer = window.setTimeout(function () {\n\t\t\t\t\t\tjqXHR.abort(\"timeout\");\n\t\t\t\t\t}, s.timeout);\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tcompleted = false;\n\t\t\t\t\ttransport.send(requestHeaders, done);\n\t\t\t\t} catch (e) {\n\n\t\t\t\t\t// Rethrow post-completion exceptions\n\t\t\t\t\tif (completed) {\n\t\t\t\t\t\tthrow e;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Propagate others as results\n\t\t\t\t\tdone(-1, e);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Callback for when everything is done\n\t\t\tfunction done(status, nativeStatusText, responses, headers) {\n\t\t\t\tvar isSuccess, success, error, response, modified,\n\t\t\t\t\tstatusText = nativeStatusText;\n\n\t\t\t\t// Ignore repeat invocations\n\t\t\t\tif (completed) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tcompleted = true;\n\n\t\t\t\t// Clear timeout if it exists\n\t\t\t\tif (timeoutTimer) {\n\t\t\t\t\twindow.clearTimeout(timeoutTimer);\n\t\t\t\t}\n\n\t\t\t\t// Dereference transport for early garbage collection\n\t\t\t\t// (no matter how long the jqXHR object will be used)\n\t\t\t\ttransport = undefined;\n\n\t\t\t\t// Cache response headers\n\t\t\t\tresponseHeadersString = headers || \"\";\n\n\t\t\t\t// Set readyState\n\t\t\t\tjqXHR.readyState = status > 0 ? 4 : 0;\n\n\t\t\t\t// Determine if successful\n\t\t\t\tisSuccess = status >= 200 && status < 300 || status === 304;\n\n\t\t\t\t// Get response data\n\t\t\t\tif (responses) {\n\t\t\t\t\tresponse = ajaxHandleResponses(s, jqXHR, responses);\n\t\t\t\t}\n\n\t\t\t\t// Use a noop converter for missing script but not if jsonp\n\t\t\t\tif (!isSuccess &&\n\t\t\t\t\tjQuery.inArray(\"script\", s.dataTypes) > -1 &&\n\t\t\t\t\tjQuery.inArray(\"json\", s.dataTypes) < 0) {\n\t\t\t\t\ts.converters[\"text script\"] = function () { };\n\t\t\t\t}\n\n\t\t\t\t// Convert no matter what (that way responseXXX fields are always set)\n\t\t\t\tresponse = ajaxConvert(s, response, jqXHR, isSuccess);\n\n\t\t\t\t// If successful, handle type chaining\n\t\t\t\tif (isSuccess) {\n\n\t\t\t\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\t\t\t\tif (s.ifModified) {\n\t\t\t\t\t\tmodified = jqXHR.getResponseHeader(\"Last-Modified\");\n\t\t\t\t\t\tif (modified) {\n\t\t\t\t\t\t\tjQuery.lastModified[cacheURL] = modified;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmodified = jqXHR.getResponseHeader(\"etag\");\n\t\t\t\t\t\tif (modified) {\n\t\t\t\t\t\t\tjQuery.etag[cacheURL] = modified;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// if no content\n\t\t\t\t\tif (status === 204 || s.type === \"HEAD\") {\n\t\t\t\t\t\tstatusText = \"nocontent\";\n\n\t\t\t\t\t\t// if not modified\n\t\t\t\t\t} else if (status === 304) {\n\t\t\t\t\t\tstatusText = \"notmodified\";\n\n\t\t\t\t\t\t// If we have data, let's convert it\n\t\t\t\t\t} else {\n\t\t\t\t\t\tstatusText = response.state;\n\t\t\t\t\t\tsuccess = response.data;\n\t\t\t\t\t\terror = response.error;\n\t\t\t\t\t\tisSuccess = !error;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\n\t\t\t\t\t// Extract error from statusText and normalize for non-aborts\n\t\t\t\t\terror = statusText;\n\t\t\t\t\tif (status || !statusText) {\n\t\t\t\t\t\tstatusText = \"error\";\n\t\t\t\t\t\tif (status < 0) {\n\t\t\t\t\t\t\tstatus = 0;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Set data for the fake xhr object\n\t\t\t\tjqXHR.status = status;\n\t\t\t\tjqXHR.statusText = (nativeStatusText || statusText) + \"\";\n\n\t\t\t\t// Success/Error\n\t\t\t\tif (isSuccess) {\n\t\t\t\t\tdeferred.resolveWith(callbackContext, [success, statusText, jqXHR]);\n\t\t\t\t} else {\n\t\t\t\t\tdeferred.rejectWith(callbackContext, [jqXHR, statusText, error]);\n\t\t\t\t}\n\n\t\t\t\t// Status-dependent callbacks\n\t\t\t\tjqXHR.statusCode(statusCode);\n\t\t\t\tstatusCode = undefined;\n\n\t\t\t\tif (fireGlobals) {\n\t\t\t\t\tglobalEventContext.trigger(isSuccess ? \"ajaxSuccess\" : \"ajaxError\",\n\t\t\t\t\t\t[jqXHR, s, isSuccess ? success : error]);\n\t\t\t\t}\n\n\t\t\t\t// Complete\n\t\t\t\tcompleteDeferred.fireWith(callbackContext, [jqXHR, statusText]);\n\n\t\t\t\tif (fireGlobals) {\n\t\t\t\t\tglobalEventContext.trigger(\"ajaxComplete\", [jqXHR, s]);\n\n\t\t\t\t\t// Handle the global AJAX counter\n\t\t\t\t\tif (!(--jQuery.active)) {\n\t\t\t\t\t\tjQuery.event.trigger(\"ajaxStop\");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn jqXHR;\n\t\t},\n\n\t\tgetJSON: function (url, data, callback) {\n\t\t\treturn jQuery.get(url, data, callback, \"json\");\n\t\t},\n\n\t\tgetScript: function (url, callback) {\n\t\t\treturn jQuery.get(url, undefined, callback, \"script\");\n\t\t}\n\t});\n\n\tjQuery.each([\"get\", \"post\"], function (_i, method) {\n\t\tjQuery[method] = function (url, data, callback, type) {\n\n\t\t\t// Shift arguments if data argument was omitted\n\t\t\tif (isFunction(data)) {\n\t\t\t\ttype = type || callback;\n\t\t\t\tcallback = data;\n\t\t\t\tdata = undefined;\n\t\t\t}\n\n\t\t\t// The url can be an options object (which then must have .url)\n\t\t\treturn jQuery.ajax(jQuery.extend({\n\t\t\t\turl: url,\n\t\t\t\ttype: method,\n\t\t\t\tdataType: type,\n\t\t\t\tdata: data,\n\t\t\t\tsuccess: callback\n\t\t\t}, jQuery.isPlainObject(url) && url));\n\t\t};\n\t});\n\n\tjQuery.ajaxPrefilter(function (s) {\n\t\tvar i;\n\t\tfor (i in s.headers) {\n\t\t\tif (i.toLowerCase() === \"content-type\") {\n\t\t\t\ts.contentType = s.headers[i] || \"\";\n\t\t\t}\n\t\t}\n\t});\n\n\n\tjQuery._evalUrl = function (url, options, doc) {\n\t\treturn jQuery.ajax({\n\t\t\turl: url,\n\n\t\t\t// Make this explicit, since user can override this through ajaxSetup (trac-11264)\n\t\t\ttype: \"GET\",\n\t\t\tdataType: \"script\",\n\t\t\tcache: true,\n\t\t\tasync: false,\n\t\t\tglobal: false,\n\n\t\t\t// Only evaluate the response if it is successful (gh-4126)\n\t\t\t// dataFilter is not invoked for failure responses, so using it instead\n\t\t\t// of the default converter is kludgy but it works.\n\t\t\tconverters: {\n\t\t\t\t\"text script\": function () { }\n\t\t\t},\n\t\t\tdataFilter: function (response) {\n\t\t\t\tjQuery.globalEval(response, options, doc);\n\t\t\t}\n\t\t});\n\t};\n\n\n\tjQuery.fn.extend({\n\t\twrapAll: function (html) {\n\t\t\tvar wrap;\n\n\t\t\tif (this[0]) {\n\t\t\t\tif (isFunction(html)) {\n\t\t\t\t\thtml = html.call(this[0]);\n\t\t\t\t}\n\n\t\t\t\t// The elements to wrap the target around\n\t\t\t\twrap = jQuery(html, this[0].ownerDocument).eq(0).clone(true);\n\n\t\t\t\tif (this[0].parentNode) {\n\t\t\t\t\twrap.insertBefore(this[0]);\n\t\t\t\t}\n\n\t\t\t\twrap.map(function () {\n\t\t\t\t\tvar elem = this;\n\n\t\t\t\t\twhile (elem.firstElementChild) {\n\t\t\t\t\t\telem = elem.firstElementChild;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn elem;\n\t\t\t\t}).append(this);\n\t\t\t}\n\n\t\t\treturn this;\n\t\t},\n\n\t\twrapInner: function (html) {\n\t\t\tif (isFunction(html)) {\n\t\t\t\treturn this.each(function (i) {\n\t\t\t\t\tjQuery(this).wrapInner(html.call(this, i));\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn this.each(function () {\n\t\t\t\tvar self = jQuery(this),\n\t\t\t\t\tcontents = self.contents();\n\n\t\t\t\tif (contents.length) {\n\t\t\t\t\tcontents.wrapAll(html);\n\n\t\t\t\t} else {\n\t\t\t\t\tself.append(html);\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\twrap: function (html) {\n\t\t\tvar htmlIsFunction = isFunction(html);\n\n\t\t\treturn this.each(function (i) {\n\t\t\t\tjQuery(this).wrapAll(htmlIsFunction ? html.call(this, i) : html);\n\t\t\t});\n\t\t},\n\n\t\tunwrap: function (selector) {\n\t\t\tthis.parent(selector).not(\"body\").each(function () {\n\t\t\t\tjQuery(this).replaceWith(this.childNodes);\n\t\t\t});\n\t\t\treturn this;\n\t\t}\n\t});\n\n\n\tjQuery.expr.pseudos.hidden = function (elem) {\n\t\treturn !jQuery.expr.pseudos.visible(elem);\n\t};\n\tjQuery.expr.pseudos.visible = function (elem) {\n\t\treturn !!(elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length);\n\t};\n\n\n\n\n\tjQuery.ajaxSettings.xhr = function () {\n\t\ttry {\n\t\t\treturn new window.XMLHttpRequest();\n\t\t} catch (e) { }\n\t};\n\n\tvar xhrSuccessStatus = {\n\n\t\t// File protocol always yields status code 0, assume 200\n\t\t0: 200,\n\n\t\t// Support: IE <=9 only\n\t\t// trac-1450: sometimes IE returns 1223 when it should be 204\n\t\t1223: 204\n\t},\n\t\txhrSupported = jQuery.ajaxSettings.xhr();\n\n\tsupport.cors = !!xhrSupported && (\"withCredentials\" in xhrSupported);\n\tsupport.ajax = xhrSupported = !!xhrSupported;\n\n\tjQuery.ajaxTransport(function (options) {\n\t\tvar callback, errorCallback;\n\n\t\t// Cross domain only allowed if supported through XMLHttpRequest\n\t\tif (support.cors || xhrSupported && !options.crossDomain) {\n\t\t\treturn {\n\t\t\t\tsend: function (headers, complete) {\n\t\t\t\t\tvar i,\n\t\t\t\t\t\txhr = options.xhr();\n\n\t\t\t\t\txhr.open(\n\t\t\t\t\t\toptions.type,\n\t\t\t\t\t\toptions.url,\n\t\t\t\t\t\toptions.async,\n\t\t\t\t\t\toptions.username,\n\t\t\t\t\t\toptions.password\n\t\t\t\t\t);\n\n\t\t\t\t\t// Apply custom fields if provided\n\t\t\t\t\tif (options.xhrFields) {\n\t\t\t\t\t\tfor (i in options.xhrFields) {\n\t\t\t\t\t\t\txhr[i] = options.xhrFields[i];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Override mime type if needed\n\t\t\t\t\tif (options.mimeType && xhr.overrideMimeType) {\n\t\t\t\t\t\txhr.overrideMimeType(options.mimeType);\n\t\t\t\t\t}\n\n\t\t\t\t\t// X-Requested-With header\n\t\t\t\t\t// For cross-domain requests, seeing as conditions for a preflight are\n\t\t\t\t\t// akin to a jigsaw puzzle, we simply never set it to be sure.\n\t\t\t\t\t// (it can always be set on a per-request basis or even using ajaxSetup)\n\t\t\t\t\t// For same-domain requests, won't change header if already provided.\n\t\t\t\t\tif (!options.crossDomain && !headers[\"X-Requested-With\"]) {\n\t\t\t\t\t\theaders[\"X-Requested-With\"] = \"XMLHttpRequest\";\n\t\t\t\t\t}\n\n\t\t\t\t\t// Set headers\n\t\t\t\t\tfor (i in headers) {\n\t\t\t\t\t\txhr.setRequestHeader(i, headers[i]);\n\t\t\t\t\t}\n\n\t\t\t\t\t// Callback\n\t\t\t\t\tcallback = function (type) {\n\t\t\t\t\t\treturn function () {\n\t\t\t\t\t\t\tif (callback) {\n\t\t\t\t\t\t\t\tcallback = errorCallback = xhr.onload =\n\t\t\t\t\t\t\t\t\txhr.onerror = xhr.onabort = xhr.ontimeout =\n\t\t\t\t\t\t\t\t\txhr.onreadystatechange = null;\n\n\t\t\t\t\t\t\t\tif (type === \"abort\") {\n\t\t\t\t\t\t\t\t\txhr.abort();\n\t\t\t\t\t\t\t\t} else if (type === \"error\") {\n\n\t\t\t\t\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t\t\t\t\t// On a manual native abort, IE9 throws\n\t\t\t\t\t\t\t\t\t// errors on any property access that is not readyState\n\t\t\t\t\t\t\t\t\tif (typeof xhr.status !== \"number\") {\n\t\t\t\t\t\t\t\t\t\tcomplete(0, \"error\");\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tcomplete(\n\n\t\t\t\t\t\t\t\t\t\t\t// File: protocol always yields status 0; see trac-8605, trac-14207\n\t\t\t\t\t\t\t\t\t\t\txhr.status,\n\t\t\t\t\t\t\t\t\t\t\txhr.statusText\n\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tcomplete(\n\t\t\t\t\t\t\t\t\t\txhrSuccessStatus[xhr.status] || xhr.status,\n\t\t\t\t\t\t\t\t\t\txhr.statusText,\n\n\t\t\t\t\t\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t\t\t\t\t\t// IE9 has no XHR2 but throws on binary (trac-11426)\n\t\t\t\t\t\t\t\t\t\t// For XHR2 non-text, let the caller handle it (gh-2498)\n\t\t\t\t\t\t\t\t\t\t(xhr.responseType || \"text\") !== \"text\" ||\n\t\t\t\t\t\t\t\t\t\t\ttypeof xhr.responseText !== \"string\" ?\n\t\t\t\t\t\t\t\t\t\t\t{ binary: xhr.response } :\n\t\t\t\t\t\t\t\t\t\t\t{ text: xhr.responseText },\n\t\t\t\t\t\t\t\t\t\txhr.getAllResponseHeaders()\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\t\t\t\t\t};\n\n\t\t\t\t\t// Listen to events\n\t\t\t\t\txhr.onload = callback();\n\t\t\t\t\terrorCallback = xhr.onerror = xhr.ontimeout = callback(\"error\");\n\n\t\t\t\t\t// Support: IE 9 only\n\t\t\t\t\t// Use onreadystatechange to replace onabort\n\t\t\t\t\t// to handle uncaught aborts\n\t\t\t\t\tif (xhr.onabort !== undefined) {\n\t\t\t\t\t\txhr.onabort = errorCallback;\n\t\t\t\t\t} else {\n\t\t\t\t\t\txhr.onreadystatechange = function () {\n\n\t\t\t\t\t\t\t// Check readyState before timeout as it changes\n\t\t\t\t\t\t\tif (xhr.readyState === 4) {\n\n\t\t\t\t\t\t\t\t// Allow onerror to be called first,\n\t\t\t\t\t\t\t\t// but that will not handle a native abort\n\t\t\t\t\t\t\t\t// Also, save errorCallback to a variable\n\t\t\t\t\t\t\t\t// as xhr.onerror cannot be accessed\n\t\t\t\t\t\t\t\twindow.setTimeout(function () {\n\t\t\t\t\t\t\t\t\tif (callback) {\n\t\t\t\t\t\t\t\t\t\terrorCallback();\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\t// Create the abort callback\n\t\t\t\t\tcallback = callback(\"abort\");\n\n\t\t\t\t\ttry {\n\n\t\t\t\t\t\t// Do send the request (this may raise an exception)\n\t\t\t\t\t\txhr.send(options.hasContent && options.data || null);\n\t\t\t\t\t} catch (e) {\n\n\t\t\t\t\t\t// trac-14683: Only rethrow if this hasn't been notified as an error yet\n\t\t\t\t\t\tif (callback) {\n\t\t\t\t\t\t\tthrow e;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\t\tabort: function () {\n\t\t\t\t\tif (callback) {\n\t\t\t\t\t\tcallback();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t});\n\n\n\n\n\t// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432)\n\tjQuery.ajaxPrefilter(function (s) {\n\t\tif (s.crossDomain) {\n\t\t\ts.contents.script = false;\n\t\t}\n\t});\n\n\t// Install script dataType\n\tjQuery.ajaxSetup({\n\t\taccepts: {\n\t\t\tscript: \"text/javascript, application/javascript, \" +\n\t\t\t\t\"application/ecmascript, application/x-ecmascript\"\n\t\t},\n\t\tcontents: {\n\t\t\tscript: /\\b(?:java|ecma)script\\b/\n\t\t},\n\t\tconverters: {\n\t\t\t\"text script\": function (text) {\n\t\t\t\tjQuery.globalEval(text);\n\t\t\t\treturn text;\n\t\t\t}\n\t\t}\n\t});\n\n\t// Handle cache's special case and crossDomain\n\tjQuery.ajaxPrefilter(\"script\", function (s) {\n\t\tif (s.cache === undefined) {\n\t\t\ts.cache = false;\n\t\t}\n\t\tif (s.crossDomain) {\n\t\t\ts.type = \"GET\";\n\t\t}\n\t});\n\n\t// Bind script tag hack transport\n\tjQuery.ajaxTransport(\"script\", function (s) {\n\n\t\t// This transport only deals with cross domain or forced-by-attrs requests\n\t\tif (s.crossDomain || s.scriptAttrs) {\n\t\t\tvar script, callback;\n\t\t\treturn {\n\t\t\t\tsend: function (_, complete) {\n\t\t\t\t\tscript = jQuery(\"<script>\")\n\t\t\t\t\t\t.attr(s.scriptAttrs || {})\n\t\t\t\t\t\t.prop({ charset: s.scriptCharset, src: s.url })\n\t\t\t\t\t\t.on(\"load error\", callback = function (evt) {\n\t\t\t\t\t\t\tscript.remove();\n\t\t\t\t\t\t\tcallback = null;\n\t\t\t\t\t\t\tif (evt) {\n\t\t\t\t\t\t\t\tcomplete(evt.type === \"error\" ? 404 : 200, evt.type);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\n\t\t\t\t\t// Use native DOM manipulation to avoid our domManip AJAX trickery\n\t\t\t\t\tdocument.head.appendChild(script[0]);\n\t\t\t\t},\n\t\t\t\tabort: function () {\n\t\t\t\t\tif (callback) {\n\t\t\t\t\t\tcallback();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t});\n\n\n\n\n\tvar oldCallbacks = [],\n\t\trjsonp = /(=)\\?(?=&|$)|\\?\\?/;\n\n\t// Default jsonp settings\n\tjQuery.ajaxSetup({\n\t\tjsonp: \"callback\",\n\t\tjsonpCallback: function () {\n\t\t\tvar callback = oldCallbacks.pop() || (jQuery.expando + \"_\" + (nonce.guid++));\n\t\t\tthis[callback] = true;\n\t\t\treturn callback;\n\t\t}\n\t});\n\n\t// Detect, normalize options and install callbacks for jsonp requests\n\tjQuery.ajaxPrefilter(\"json jsonp\", function (s, originalSettings, jqXHR) {\n\n\t\tvar callbackName, overwritten, responseContainer,\n\t\t\tjsonProp = s.jsonp !== false && (rjsonp.test(s.url) ?\n\t\t\t\t\"url\" :\n\t\t\t\ttypeof s.data === \"string\" &&\n\t\t\t\t(s.contentType || \"\")\n\t\t\t\t\t.indexOf(\"application/x-www-form-urlencoded\") === 0 &&\n\t\t\t\trjsonp.test(s.data) && \"data\"\n\t\t\t);\n\n\t\t// Handle iff the expected data type is \"jsonp\" or we have a parameter to set\n\t\tif (jsonProp || s.dataTypes[0] === \"jsonp\") {\n\n\t\t\t// Get callback name, remembering preexisting value associated with it\n\t\t\tcallbackName = s.jsonpCallback = isFunction(s.jsonpCallback) ?\n\t\t\t\ts.jsonpCallback() :\n\t\t\t\ts.jsonpCallback;\n\n\t\t\t// Insert callback into url or form data\n\t\t\tif (jsonProp) {\n\t\t\t\ts[jsonProp] = s[jsonProp].replace(rjsonp, \"$1\" + callbackName);\n\t\t\t} else if (s.jsonp !== false) {\n\t\t\t\ts.url += (rquery.test(s.url) ? \"&\" : \"?\") + s.jsonp + \"=\" + callbackName;\n\t\t\t}\n\n\t\t\t// Use data converter to retrieve json after script execution\n\t\t\ts.converters[\"script json\"] = function () {\n\t\t\t\tif (!responseContainer) {\n\t\t\t\t\tjQuery.error(callbackName + \" was not called\");\n\t\t\t\t}\n\t\t\t\treturn responseContainer[0];\n\t\t\t};\n\n\t\t\t// Force json dataType\n\t\t\ts.dataTypes[0] = \"json\";\n\n\t\t\t// Install callback\n\t\t\toverwritten = window[callbackName];\n\t\t\twindow[callbackName] = function () {\n\t\t\t\tresponseContainer = arguments;\n\t\t\t};\n\n\t\t\t// Clean-up function (fires after converters)\n\t\t\tjqXHR.always(function () {\n\n\t\t\t\t// If previous value didn't exist - remove it\n\t\t\t\tif (overwritten === undefined) {\n\t\t\t\t\tjQuery(window).removeProp(callbackName);\n\n\t\t\t\t\t// Otherwise restore preexisting value\n\t\t\t\t} else {\n\t\t\t\t\twindow[callbackName] = overwritten;\n\t\t\t\t}\n\n\t\t\t\t// Save back as free\n\t\t\t\tif (s[callbackName]) {\n\n\t\t\t\t\t// Make sure that re-using the options doesn't screw things around\n\t\t\t\t\ts.jsonpCallback = originalSettings.jsonpCallback;\n\n\t\t\t\t\t// Save the callback name for future use\n\t\t\t\t\toldCallbacks.push(callbackName);\n\t\t\t\t}\n\n\t\t\t\t// Call if it was a function and we have a response\n\t\t\t\tif (responseContainer && isFunction(overwritten)) {\n\t\t\t\t\toverwritten(responseContainer[0]);\n\t\t\t\t}\n\n\t\t\t\tresponseContainer = overwritten = undefined;\n\t\t\t});\n\n\t\t\t// Delegate to script\n\t\t\treturn \"script\";\n\t\t}\n\t});\n\n\n\n\n\t// Support: Safari 8 only\n\t// In Safari 8 documents created via document.implementation.createHTMLDocument\n\t// collapse sibling forms: the second one becomes a child of the first one.\n\t// Because of that, this security measure has to be disabled in Safari 8.\n\t// https://bugs.webkit.org/show_bug.cgi?id=137337\n\tsupport.createHTMLDocument = (function () {\n\t\tvar body = document.implementation.createHTMLDocument(\"\").body;\n\t\tbody.innerHTML = \"<form></form><form></form>\";\n\t\treturn body.childNodes.length === 2;\n\t})();\n\n\n\t// Argument \"data\" should be string of html\n\t// context (optional): If specified, the fragment will be created in this context,\n\t// defaults to document\n\t// keepScripts (optional): If true, will include scripts passed in the html string\n\tjQuery.parseHTML = function (data, context, keepScripts) {\n\t\tif (typeof data !== \"string\") {\n\t\t\treturn [];\n\t\t}\n\t\tif (typeof context === \"boolean\") {\n\t\t\tkeepScripts = context;\n\t\t\tcontext = false;\n\t\t}\n\n\t\tvar base, parsed, scripts;\n\n\t\tif (!context) {\n\n\t\t\t// Stop scripts or inline event handlers from being executed immediately\n\t\t\t// by using document.implementation\n\t\t\tif (support.createHTMLDocument) {\n\t\t\t\tcontext = document.implementation.createHTMLDocument(\"\");\n\n\t\t\t\t// Set the base href for the created document\n\t\t\t\t// so any parsed elements with URLs\n\t\t\t\t// are based on the document's URL (gh-2965)\n\t\t\t\tbase = context.createElement(\"base\");\n\t\t\t\tbase.href = document.location.href;\n\t\t\t\tcontext.head.appendChild(base);\n\t\t\t} else {\n\t\t\t\tcontext = document;\n\t\t\t}\n\t\t}\n\n\t\tparsed = rsingleTag.exec(data);\n\t\tscripts = !keepScripts && [];\n\n\t\t// Single tag\n\t\tif (parsed) {\n\t\t\treturn [context.createElement(parsed[1])];\n\t\t}\n\n\t\tparsed = buildFragment([data], context, scripts);\n\n\t\tif (scripts && scripts.length) {\n\t\t\tjQuery(scripts).remove();\n\t\t}\n\n\t\treturn jQuery.merge([], parsed.childNodes);\n\t};\n\n\n\t/**\n\t * Load a url into a page\n\t */\n\tjQuery.fn.load = function (url, params, callback) {\n\t\tvar selector, type, response,\n\t\t\tself = this,\n\t\t\toff = url.indexOf(\" \");\n\n\t\tif (off > -1) {\n\t\t\tselector = stripAndCollapse(url.slice(off));\n\t\t\turl = url.slice(0, off);\n\t\t}\n\n\t\t// If it's a function\n\t\tif (isFunction(params)) {\n\n\t\t\t// We assume that it's the callback\n\t\t\tcallback = params;\n\t\t\tparams = undefined;\n\n\t\t\t// Otherwise, build a param string\n\t\t} else if (params && typeof params === \"object\") {\n\t\t\ttype = \"POST\";\n\t\t}\n\n\t\t// If we have elements to modify, make the request\n\t\tif (self.length > 0) {\n\t\t\tjQuery.ajax({\n\t\t\t\turl: url,\n\n\t\t\t\t// If \"type\" variable is undefined, then \"GET\" method will be used.\n\t\t\t\t// Make value of this field explicit since\n\t\t\t\t// user can override it through ajaxSetup method\n\t\t\t\ttype: type || \"GET\",\n\t\t\t\tdataType: \"html\",\n\t\t\t\tdata: params\n\t\t\t}).done(function (responseText) {\n\n\t\t\t\t// Save response for use in complete callback\n\t\t\t\tresponse = arguments;\n\n\t\t\t\tself.html(selector ?\n\n\t\t\t\t\t// If a selector was specified, locate the right elements in a dummy div\n\t\t\t\t\t// Exclude scripts to avoid IE 'Permission Denied' errors\n\t\t\t\t\tjQuery(\"<div>\").append(jQuery.parseHTML(responseText)).find(selector) :\n\n\t\t\t\t\t// Otherwise use the full result\n\t\t\t\t\tresponseText);\n\n\t\t\t\t// If the request succeeds, this function gets \"data\", \"status\", \"jqXHR\"\n\t\t\t\t// but they are ignored because response was set above.\n\t\t\t\t// If it fails, this function gets \"jqXHR\", \"status\", \"error\"\n\t\t\t}).always(callback && function (jqXHR, status) {\n\t\t\t\tself.each(function () {\n\t\t\t\t\tcallback.apply(this, response || [jqXHR.responseText, status, jqXHR]);\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\n\t\treturn this;\n\t};\n\n\n\n\n\tjQuery.expr.pseudos.animated = function (elem) {\n\t\treturn jQuery.grep(jQuery.timers, function (fn) {\n\t\t\treturn elem === fn.elem;\n\t\t}).length;\n\t};\n\n\n\n\n\tjQuery.offset = {\n\t\tsetOffset: function (elem, options, i) {\n\t\t\tvar curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition,\n\t\t\t\tposition = jQuery.css(elem, \"position\"),\n\t\t\t\tcurElem = jQuery(elem),\n\t\t\t\tprops = {};\n\n\t\t\t// Set position first, in-case top/left are set even on static elem\n\t\t\tif (position === \"static\") {\n\t\t\t\telem.style.position = \"relative\";\n\t\t\t}\n\n\t\t\tcurOffset = curElem.offset();\n\t\t\tcurCSSTop = jQuery.css(elem, \"top\");\n\t\t\tcurCSSLeft = jQuery.css(elem, \"left\");\n\t\t\tcalculatePosition = (position === \"absolute\" || position === \"fixed\") &&\n\t\t\t\t(curCSSTop + curCSSLeft).indexOf(\"auto\") > -1;\n\n\t\t\t// Need to be able to calculate position if either\n\t\t\t// top or left is auto and position is either absolute or fixed\n\t\t\tif (calculatePosition) {\n\t\t\t\tcurPosition = curElem.position();\n\t\t\t\tcurTop = curPosition.top;\n\t\t\t\tcurLeft = curPosition.left;\n\n\t\t\t} else {\n\t\t\t\tcurTop = parseFloat(curCSSTop) || 0;\n\t\t\t\tcurLeft = parseFloat(curCSSLeft) || 0;\n\t\t\t}\n\n\t\t\tif (isFunction(options)) {\n\n\t\t\t\t// Use jQuery.extend here to allow modification of coordinates argument (gh-1848)\n\t\t\t\toptions = options.call(elem, i, jQuery.extend({}, curOffset));\n\t\t\t}\n\n\t\t\tif (options.top != null) {\n\t\t\t\tprops.top = (options.top - curOffset.top) + curTop;\n\t\t\t}\n\t\t\tif (options.left != null) {\n\t\t\t\tprops.left = (options.left - curOffset.left) + curLeft;\n\t\t\t}\n\n\t\t\tif (\"using\" in options) {\n\t\t\t\toptions.using.call(elem, props);\n\n\t\t\t} else {\n\t\t\t\tcurElem.css(props);\n\t\t\t}\n\t\t}\n\t};\n\n\tjQuery.fn.extend({\n\n\t\t// offset() relates an element's border box to the document origin\n\t\toffset: function (options) {\n\n\t\t\t// Preserve chaining for setter\n\t\t\tif (arguments.length) {\n\t\t\t\treturn options === undefined ?\n\t\t\t\t\tthis :\n\t\t\t\t\tthis.each(function (i) {\n\t\t\t\t\t\tjQuery.offset.setOffset(this, options, i);\n\t\t\t\t\t});\n\t\t\t}\n\n\t\t\tvar rect, win,\n\t\t\t\telem = this[0];\n\n\t\t\tif (!elem) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Return zeros for disconnected and hidden (display: none) elements (gh-2310)\n\t\t\t// Support: IE <=11 only\n\t\t\t// Running getBoundingClientRect on a\n\t\t\t// disconnected node in IE throws an error\n\t\t\tif (!elem.getClientRects().length) {\n\t\t\t\treturn { top: 0, left: 0 };\n\t\t\t}\n\n\t\t\t// Get document-relative position by adding viewport scroll to viewport-relative gBCR\n\t\t\trect = elem.getBoundingClientRect();\n\t\t\twin = elem.ownerDocument.defaultView;\n\t\t\treturn {\n\t\t\t\ttop: rect.top + win.pageYOffset,\n\t\t\t\tleft: rect.left + win.pageXOffset\n\t\t\t};\n\t\t},\n\n\t\t// position() relates an element's margin box to its offset parent's padding box\n\t\t// This corresponds to the behavior of CSS absolute positioning\n\t\tposition: function () {\n\t\t\tif (!this[0]) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar offsetParent, offset, doc,\n\t\t\t\telem = this[0],\n\t\t\t\tparentOffset = { top: 0, left: 0 };\n\n\t\t\t// position:fixed elements are offset from the viewport, which itself always has zero offset\n\t\t\tif (jQuery.css(elem, \"position\") === \"fixed\") {\n\n\t\t\t\t// Assume position:fixed implies availability of getBoundingClientRect\n\t\t\t\toffset = elem.getBoundingClientRect();\n\n\t\t\t} else {\n\t\t\t\toffset = this.offset();\n\n\t\t\t\t// Account for the *real* offset parent, which can be the document or its root element\n\t\t\t\t// when a statically positioned element is identified\n\t\t\t\tdoc = elem.ownerDocument;\n\t\t\t\toffsetParent = elem.offsetParent || doc.documentElement;\n\t\t\t\twhile (offsetParent &&\n\t\t\t\t\t(offsetParent === doc.body || offsetParent === doc.documentElement) &&\n\t\t\t\t\tjQuery.css(offsetParent, \"position\") === \"static\") {\n\n\t\t\t\t\toffsetParent = offsetParent.parentNode;\n\t\t\t\t}\n\t\t\t\tif (offsetParent && offsetParent !== elem && offsetParent.nodeType === 1) {\n\n\t\t\t\t\t// Incorporate borders into its offset, since they are outside its content origin\n\t\t\t\t\tparentOffset = jQuery(offsetParent).offset();\n\t\t\t\t\tparentOffset.top += jQuery.css(offsetParent, \"borderTopWidth\", true);\n\t\t\t\t\tparentOffset.left += jQuery.css(offsetParent, \"borderLeftWidth\", true);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Subtract parent offsets and element margins\n\t\t\treturn {\n\t\t\t\ttop: offset.top - parentOffset.top - jQuery.css(elem, \"marginTop\", true),\n\t\t\t\tleft: offset.left - parentOffset.left - jQuery.css(elem, \"marginLeft\", true)\n\t\t\t};\n\t\t},\n\n\t\t// This method will return documentElement in the following cases:\n\t\t// 1) For the element inside the iframe without offsetParent, this method will return\n\t\t//    documentElement of the parent window\n\t\t// 2) For the hidden or detached element\n\t\t// 3) For body or html element, i.e. in case of the html node - it will return itself\n\t\t//\n\t\t// but those exceptions were never presented as a real life use-cases\n\t\t// and might be considered as more preferable results.\n\t\t//\n\t\t// This logic, however, is not guaranteed and can change at any point in the future\n\t\toffsetParent: function () {\n\t\t\treturn this.map(function () {\n\t\t\t\tvar offsetParent = this.offsetParent;\n\n\t\t\t\twhile (offsetParent && jQuery.css(offsetParent, \"position\") === \"static\") {\n\t\t\t\t\toffsetParent = offsetParent.offsetParent;\n\t\t\t\t}\n\n\t\t\t\treturn offsetParent || documentElement;\n\t\t\t});\n\t\t}\n\t});\n\n\t// Create scrollLeft and scrollTop methods\n\tjQuery.each({ scrollLeft: \"pageXOffset\", scrollTop: \"pageYOffset\" }, function (method, prop) {\n\t\tvar top = \"pageYOffset\" === prop;\n\n\t\tjQuery.fn[method] = function (val) {\n\t\t\treturn access(this, function (elem, method, val) {\n\n\t\t\t\t// Coalesce documents and windows\n\t\t\t\tvar win;\n\t\t\t\tif (isWindow(elem)) {\n\t\t\t\t\twin = elem;\n\t\t\t\t} else if (elem.nodeType === 9) {\n\t\t\t\t\twin = elem.defaultView;\n\t\t\t\t}\n\n\t\t\t\tif (val === undefined) {\n\t\t\t\t\treturn win ? win[prop] : elem[method];\n\t\t\t\t}\n\n\t\t\t\tif (win) {\n\t\t\t\t\twin.scrollTo(\n\t\t\t\t\t\t!top ? val : win.pageXOffset,\n\t\t\t\t\t\ttop ? val : win.pageYOffset\n\t\t\t\t\t);\n\n\t\t\t\t} else {\n\t\t\t\t\telem[method] = val;\n\t\t\t\t}\n\t\t\t}, method, val, arguments.length);\n\t\t};\n\t});\n\n\t// Support: Safari <=7 - 9.1, Chrome <=37 - 49\n\t// Add the top/left cssHooks using jQuery.fn.position\n\t// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084\n\t// Blink bug: https://bugs.chromium.org/p/chromium/issues/detail?id=589347\n\t// getComputedStyle returns percent when specified for top/left/bottom/right;\n\t// rather than make the css module depend on the offset module, just check for it here\n\tjQuery.each([\"top\", \"left\"], function (_i, prop) {\n\t\tjQuery.cssHooks[prop] = addGetHookIf(support.pixelPosition,\n\t\t\tfunction (elem, computed) {\n\t\t\t\tif (computed) {\n\t\t\t\t\tcomputed = curCSS(elem, prop);\n\n\t\t\t\t\t// If curCSS returns percentage, fallback to offset\n\t\t\t\t\treturn rnumnonpx.test(computed) ?\n\t\t\t\t\t\tjQuery(elem).position()[prop] + \"px\" :\n\t\t\t\t\t\tcomputed;\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\t});\n\n\n\t// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods\n\tjQuery.each({ Height: \"height\", Width: \"width\" }, function (name, type) {\n\t\tjQuery.each({\n\t\t\tpadding: \"inner\" + name,\n\t\t\tcontent: type,\n\t\t\t\"\": \"outer\" + name\n\t\t}, function (defaultExtra, funcName) {\n\n\t\t\t// Margin is only for outerHeight, outerWidth\n\t\t\tjQuery.fn[funcName] = function (margin, value) {\n\t\t\t\tvar chainable = arguments.length && (defaultExtra || typeof margin !== \"boolean\"),\n\t\t\t\t\textra = defaultExtra || (margin === true || value === true ? \"margin\" : \"border\");\n\n\t\t\t\treturn access(this, function (elem, type, value) {\n\t\t\t\t\tvar doc;\n\n\t\t\t\t\tif (isWindow(elem)) {\n\n\t\t\t\t\t\t// $( window ).outerWidth/Height return w/h including scrollbars (gh-1729)\n\t\t\t\t\t\treturn funcName.indexOf(\"outer\") === 0 ?\n\t\t\t\t\t\t\telem[\"inner\" + name] :\n\t\t\t\t\t\t\telem.document.documentElement[\"client\" + name];\n\t\t\t\t\t}\n\n\t\t\t\t\t// Get document width or height\n\t\t\t\t\tif (elem.nodeType === 9) {\n\t\t\t\t\t\tdoc = elem.documentElement;\n\n\t\t\t\t\t\t// Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height],\n\t\t\t\t\t\t// whichever is greatest\n\t\t\t\t\t\treturn Math.max(\n\t\t\t\t\t\t\telem.body[\"scroll\" + name], doc[\"scroll\" + name],\n\t\t\t\t\t\t\telem.body[\"offset\" + name], doc[\"offset\" + name],\n\t\t\t\t\t\t\tdoc[\"client\" + name]\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\n\t\t\t\t\treturn value === undefined ?\n\n\t\t\t\t\t\t// Get width or height on the element, requesting but not forcing parseFloat\n\t\t\t\t\t\tjQuery.css(elem, type, extra) :\n\n\t\t\t\t\t\t// Set width or height on the element\n\t\t\t\t\t\tjQuery.style(elem, type, value, extra);\n\t\t\t\t}, type, chainable ? margin : undefined, chainable);\n\t\t\t};\n\t\t});\n\t});\n\n\n\tjQuery.each([\n\t\t\"ajaxStart\",\n\t\t\"ajaxStop\",\n\t\t\"ajaxComplete\",\n\t\t\"ajaxError\",\n\t\t\"ajaxSuccess\",\n\t\t\"ajaxSend\"\n\t], function (_i, type) {\n\t\tjQuery.fn[type] = function (fn) {\n\t\t\treturn this.on(type, fn);\n\t\t};\n\t});\n\n\n\n\n\tjQuery.fn.extend({\n\n\t\tbind: function (types, data, fn) {\n\t\t\treturn this.on(types, null, data, fn);\n\t\t},\n\t\tunbind: function (types, fn) {\n\t\t\treturn this.off(types, null, fn);\n\t\t},\n\n\t\tdelegate: function (selector, types, data, fn) {\n\t\t\treturn this.on(types, selector, data, fn);\n\t\t},\n\t\tundelegate: function (selector, types, fn) {\n\n\t\t\t// ( namespace ) or ( selector, types [, fn] )\n\t\t\treturn arguments.length === 1 ?\n\t\t\t\tthis.off(selector, \"**\") :\n\t\t\t\tthis.off(types, selector || \"**\", fn);\n\t\t},\n\n\t\thover: function (fnOver, fnOut) {\n\t\t\treturn this.mouseenter(fnOver).mouseleave(fnOut || fnOver);\n\t\t}\n\t});\n\n\tjQuery.each(\n\t\t(\"blur focus focusin focusout resize scroll click dblclick \" +\n\t\t\t\"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave \" +\n\t\t\t\"change select submit keydown keypress keyup contextmenu\").split(\" \"),\n\t\tfunction (_i, name) {\n\n\t\t\t// Handle event binding\n\t\t\tjQuery.fn[name] = function (data, fn) {\n\t\t\t\treturn arguments.length > 0 ?\n\t\t\t\t\tthis.on(name, null, data, fn) :\n\t\t\t\t\tthis.trigger(name);\n\t\t\t};\n\t\t}\n\t);\n\n\n\n\n\t// Support: Android <=4.0 only\n\t// Make sure we trim BOM and NBSP\n\t// Require that the \"whitespace run\" starts from a non-whitespace\n\t// to avoid O(N^2) behavior when the engine would try matching \"\\s+$\" at each space position.\n\tvar rtrim = /^[\\s\\uFEFF\\xA0]+|([^\\s\\uFEFF\\xA0])[\\s\\uFEFF\\xA0]+$/g;\n\n\t// Bind a function to a context, optionally partially applying any\n\t// arguments.\n\t// jQuery.proxy is deprecated to promote standards (specifically Function#bind)\n\t// However, it is not slated for removal any time soon\n\tjQuery.proxy = function (fn, context) {\n\t\tvar tmp, args, proxy;\n\n\t\tif (typeof context === \"string\") {\n\t\t\ttmp = fn[context];\n\t\t\tcontext = fn;\n\t\t\tfn = tmp;\n\t\t}\n\n\t\t// Quick check to determine if target is callable, in the spec\n\t\t// this throws a TypeError, but we will just return undefined.\n\t\tif (!isFunction(fn)) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\t// Simulated bind\n\t\targs = slice.call(arguments, 2);\n\t\tproxy = function () {\n\t\t\treturn fn.apply(context || this, args.concat(slice.call(arguments)));\n\t\t};\n\n\t\t// Set the guid of unique handler to the same of original handler, so it can be removed\n\t\tproxy.guid = fn.guid = fn.guid || jQuery.guid++;\n\n\t\treturn proxy;\n\t};\n\n\tjQuery.holdReady = function (hold) {\n\t\tif (hold) {\n\t\t\tjQuery.readyWait++;\n\t\t} else {\n\t\t\tjQuery.ready(true);\n\t\t}\n\t};\n\tjQuery.isArray = Array.isArray;\n\tjQuery.parseJSON = JSON.parse;\n\tjQuery.nodeName = nodeName;\n\tjQuery.isFunction = isFunction;\n\tjQuery.isWindow = isWindow;\n\tjQuery.camelCase = camelCase;\n\tjQuery.type = toType;\n\n\tjQuery.now = Date.now;\n\n\tjQuery.isNumeric = function (obj) {\n\n\t\t// As of jQuery 3.0, isNumeric is limited to\n\t\t// strings and numbers (primitives or objects)\n\t\t// that can be coerced to finite numbers (gh-2662)\n\t\tvar type = jQuery.type(obj);\n\t\treturn (type === \"number\" || type === \"string\") &&\n\n\t\t\t// parseFloat NaNs numeric-cast false positives (\"\")\n\t\t\t// ...but misinterprets leading-number strings, particularly hex literals (\"0x...\")\n\t\t\t// subtraction forces infinities to NaN\n\t\t\t!isNaN(obj - parseFloat(obj));\n\t};\n\n\tjQuery.trim = function (text) {\n\t\treturn text == null ?\n\t\t\t\"\" :\n\t\t\t(text + \"\").replace(rtrim, \"$1\");\n\t};\n\n\n\n\t// Register as a named AMD module, since jQuery can be concatenated with other\n\t// files that may use define, but not via a proper concatenation script that\n\t// understands anonymous AMD modules. A named AMD is safest and most robust\n\t// way to register. Lowercase jquery is used because AMD module names are\n\t// derived from file names, and jQuery is normally delivered in a lowercase\n\t// file name. Do this after creating the global so that if an AMD module wants\n\t// to call noConflict to hide this version of jQuery, it will work.\n\n\t// Note that for maximum portability, libraries that are not jQuery should\n\t// declare themselves as anonymous modules, and avoid setting a global if an\n\t// AMD loader is present. jQuery is a special case. For more information, see\n\t// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon\n\n\tif (typeof define === \"function\" && define.amd) {\n\t\tdefine(\"jquery\", [], function () {\n\t\t\treturn jQuery;\n\t\t});\n\t}\n\n\n\n\n\tvar\n\n\t\t// Map over jQuery in case of overwrite\n\t\t_jQuery = window.jQuery,\n\n\t\t// Map over the $ in case of overwrite\n\t\t_$ = window.$;\n\n\tjQuery.noConflict = function (deep) {\n\t\tif (window.$ === jQuery) {\n\t\t\twindow.$ = _$;\n\t\t}\n\n\t\tif (deep && window.jQuery === jQuery) {\n\t\t\twindow.jQuery = _jQuery;\n\t\t}\n\n\t\treturn jQuery;\n\t};\n\n\t// Expose jQuery and $ identifiers, even in AMD\n\t// (trac-7102#comment:10, https://github.com/jquery/jquery/pull/557)\n\t// and CommonJS for browser emulators (trac-13566)\n\tif (typeof noGlobal === \"undefined\") {\n\t\twindow.jQuery = window.$ = jQuery;\n\t}\n\n\n\n\n\treturn jQuery;\n});"
  },
  {
    "path": "src/sourceDev.WebApp/SharedThemes/cyborg/Shared/_Layout.cshtml",
    "content": "﻿@inject ISiteContextResolver siteResolver\n@inject ICoreThemeHelper themeHelper\n@{\n    var themeSettings = themeHelper.GetThemeSettings();\n    @*\n        These settings can be set by a main view to show additional columns.\n        Views that push content into the optional sections SideNav, AsidePrimary, and AsideSecondary\n        are obligated to set the needed viewtate property to true to show the section,\n        otherwise an error will occur.\n        The sideNav column also supports a toggle so it can be hidden and toggled visible even though it renders.\n    *@\n    bool sideNavVisible = true.Equals(ViewData[\"SideNavVisible\"]);\n    string sideNavToggleClass = ViewData[\"SideNavToggle\"]?.ToString() ?? \"collapse\";\n    bool asidePrimaryVisible = true.Equals(ViewData[\"AsidePrimaryVisible\"]);\n    bool asideSecondaryVisible = true.Equals(ViewData[\"AsideSecondaryVisible\"]);\n    var Tenant = await siteResolver.ResolveSite(Context.Request.Host.Host, Context.Request.Path);\n    var siteRoot = \"\";\n    if (!string.IsNullOrWhiteSpace(Tenant.SiteFolderName)) { siteRoot = \"/\" + Tenant.SiteFolderName; }\n    \n}\n<!DOCTYPE html>\n<html lang=\"@CultureInfo.CurrentUICulture.Name\">\n<head>\n    <meta charset=\"utf-8\" />\n    <title>@ViewData[\"Title\"] - @(Tenant?.SiteName ?? \"Sample\")</title>\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1, shrink-to-fit=no\">\n    @RenderSection(\"Meta\", required: false)\n    <environment names=\"Development\">\n        <link rel=\"stylesheet\" href=\"~/css/bootstrap.css\" cs-resolve-theme-resource=\"true\" cs-shared-theme=\"true\" cs-tenant=\"@Tenant\" />\n        <link rel=\"stylesheet\" href=\"~/css/fontawesome-all.min.css\" cs-resolve-theme-resource=\"true\" cs-shared-theme=\"true\" cs-tenant=\"@Tenant\" />\n        <link rel=\"stylesheet\" href=\"~/css/site.css\" cs-resolve-theme-resource=\"true\" cs-shared-theme=\"true\" cs-tenant=\"@Tenant\" asp-append-version=\"true\" />\n    </environment>\n    <environment names=\"Staging,Production\">\n        <link rel=\"stylesheet\" href=\"~/css/bootstrap.min.css\" cs-resolve-theme-resource=\"true\" cs-shared-theme=\"true\" cs-tenant=\"@Tenant\" />\n        <link rel=\"stylesheet\" href=\"~/css/fontawesome-all.min.css\" cs-resolve-theme-resource=\"true\" cs-shared-theme=\"true\" cs-tenant=\"@Tenant\" />\n        <link rel=\"stylesheet\" href=\"~/css/site.min.css\" cs-resolve-theme-resource=\"true\" cs-shared-theme=\"true\" cs-tenant=\"@Tenant\" asp-append-version=\"true\" />\n    </environment>\n    @RenderSection(\"Styles\", required: false)    \n    \n    <google-analytics profile-id=\"@Tenant.GoogleAnalyticsProfileId\" user-id=\"@User.GetUserId()\"></google-analytics>\n    <base href=\"@Context.Request.Path\" />\n</head>\n<body class=\"d-flex flex-column @ViewData[\"BodyClass\"]\">\n    <header class=\"bg-light\">\n        <a id=\"skippy\" class=\"visually-hidden visually-hidden-focusable\" href=\"#content\">\n            <div class=\"container\">\n                <span class=\"skiplink-text\">Skip to main content</span>\n            </div>\n        </a>\n        <div class=\"fixed-top brand-header bg-light\">\n            <div class=\"d-flex align-items-center bg-dark\">\n                @if (!string.IsNullOrWhiteSpace(Tenant.LogoUrl))\n                {\n                    <div>\n                         <partial name=\"SiteLogoPartial\" model=\"@Tenant\" />\n                    </div>\n                }\n                @if (Tenant.ShowSiteNameLink)\n                {\n                    <div class=\"align-self-center pt-4 pt-sm-0\">\n                         <partial name=\"SiteTitlePartial\" model=\"@Tenant\" />\n                    </div>\n                }\n                @if (!string.IsNullOrWhiteSpace(Tenant.HeaderContent))\n                {\n                    <div class=\"flex-fill align-self-center pt-3 d-none d-sm-block\">\n                        <partial name=\"SiteHeaderPartial\" />\n                    </div>\n                }\n            </div>\n        </div>\n        <nav class=\"navbar navbar-expand-md fixed-top navbar-dark bg-primary\">\n            <button class=\"navbar-toggler navbar-dark\" type=\"button\" data-bs-toggle=\"collapse\" data-bs-target=\"#navbarNavDropdown\" aria-controls=\"navbarNavDropdown\" aria-expanded=\"false\" aria-label=\"Toggle navigation\">\n                <span class=\"navbar-toggler-icon\"></span>\n            </button>\n            <div class=\"collapse navbar-collapse bg-primary ps-2\" id=\"navbarNavDropdown\"> \n                @await Component.InvokeAsync(\"Navigation\", new { viewName = \"Bootstrap5TopNavWithDropdowns\", filterName = NamedNavigationFilters.TopNav, startingNodeKey = \"\" })\n                <partial name=\"_LoginPartialWithDropdowns\" />\n            </div>\n        </nav>\n    </header>\n    <div id=\"wrapper\" class=\"container-fluid cs-container flex-fill\">\n        @await Component.InvokeAsync(\"Navigation\", new { viewName = \"Bootstrap5Breadcrumbs\", filterName = NamedNavigationFilters.Breadcrumbs, startingNodeKey = \"\" })\n        <div class=\"row\">\n            <main id=\"content\" class=\"col order-3\">\n                <partial name=\"AlertsPartial\" />\n                <partial name=\"_CookieConsentPartial\" />\n                <partial name=\"_AutoLogoutWarningPartial\" />\n                @RenderBody()\n            </main>\n            @if (sideNavVisible)\n            {\n                <nav id=\"sidenavmenu\" class=\" col col-3 order-1 @sideNavToggleClass\">\n                    @RenderSection(\"SideNav\", required: false)\n                </nav>\n\n            }\n            @if (asideSecondaryVisible)\n            {\n                <aside id=\"asideSecondary\" class=\"col col-1 order-2\">\n                    @RenderSection(\"AsideSecondary\", required: false)\n                </aside>\n\n            }\n            @if (asidePrimaryVisible)\n            {\n                <aside id=\"asidePrimary\" class=\"col-12 col-md-3 col-sm-12  col-sm-12 order-4\">\n                    @RenderSection(\"AsidePrimary\", required: false)\n                </aside>\n\n            }\n        </div>\n    </div>\n    <footer class=\"sticky-bottom pt-2 h-100\">\n        <div class=\"w-100 text-center\">\n            <partial name=\"SiteFooterPartial\" />\n        </div>\n        <div class=\"d-flex flex-wrap flex-grow justify-content-center\">\n            <div class=\"p-2\">\n            <ul class=\"list-unstyled d-flex flex-wrap\">\n                @if (Tenant != null && !string.IsNullOrWhiteSpace(Tenant.PrivacyPolicy))\n                {\n                    <li class=\"border-left ps-2 me-2\">\n                        <a asp-controller=\"Privacy\" asp-action=\"Index\">Privacy Policy</a>\n                    </li>\n                }\n                <li class=\"border-left ps-2 me-2\">\n                    @* you are free to remove the powered by cloudscribe link but we appreciate it if you choose to keep it! *@\n                    <a class=\"text-nowrap\" target=\"_blank\" href=\"https://www.cloudscribe.com/?utm_source=@Context.Request.Host.Value&amp;utm_medium=referral&amp;utm_campaign=poweredbycloudscribe\">Powered by cloudscribe</a>\n                </li>\n            </ul>\n        </div>\n        <div class=\"ps-sm-2  text-center w-100\"><span class=\"text-nowrap\">Copyright &copy; @DateTime.Now.Year</span><span class=\"d-none d-sm-inline\"> - </span><span> @(Tenant?.SiteName ?? \"Sample\")</span></div>\n        <partial name=\"_CookieConsentRevokePartial\" />\n        </div>     \n    </footer>\n    @RenderSection(\"Toolbar\", required: false)\n    <environment names=\"Development\">\n        <script src=\"~/js/jquery.js\" cs-resolve-theme-resource=\"true\" cs-shared-theme=\"true\" cs-tenant=\"@Tenant\"></script>\n        <script src=\"~/js/bootstrap.bundle.js\" cs-resolve-theme-resource=\"true\" cs-shared-theme=\"true\" cs-tenant=\"@Tenant\"></script>\n        <script src=\"~/cr/js/bs4.smartmenus.min.js\"></script>\n    </environment>\n    <environment names=\"Staging,Production\">\n        <script src=\"~/js/jquery.min.js\" cs-resolve-theme-resource=\"true\" cs-shared-theme=\"true\" cs-tenant=\"@Tenant\"></script>\n        <script src=\"~/js/bootstrap.bundle.min.js\" cs-resolve-theme-resource=\"true\" cs-shared-theme=\"true\" cs-tenant=\"@Tenant\"></script>\n        <script src=\"~/cr/js/bs4.smartmenus.min.js\"></script>\n    </environment>\n    @RenderSection(\"Bottom\", required: false)\n    @RenderSection(\"Scripts\", required: false)     \n    @Html.RenderResources(\"js\") @*render any js resources declared via helpers in partial views etc*@\n    <add-this profile-id=\"@Tenant.AddThisDotComUsername\" async></add-this>\n</body>\n</html>\n"
  },
  {
    "path": "src/sourceDev.WebApp/SharedThemes/cyborg/wwwroot/css/_bootswatch.scss",
    "content": "// Cyborg 5.1.3\n// Bootswatch\n\n\n// Variables\n\n$web-font-path: \"https://fonts.googleapis.com/css2?family=Roboto:wght@400;700&display=swap\" !default;\n@if $web-font-path {\n  @import url($web-font-path);\n}\n\n// Navbar\n\n.navbar {\n  &.bg-primary {\n    border: 1px solid $gray-700;\n  }\n\n  &.bg-dark {\n    background-color: $body-bg !important;\n    border: 1px solid $gray-700;\n  }\n\n  &.bg-light {\n    background-color: $gray-500 !important;\n  }\n\n  &.fixed-top {\n    border-width: 0 0 1px;\n  }\n\n  &.fixed-bottom {\n    border-width: 1px 0 0;\n  }\n}\n\n// Buttons\n\n.btn {\n  @each $color, $value in $theme-colors {\n    &-#{$color} {\n      @if $enable-gradients {\n        background: $value linear-gradient(180deg, mix($white, $value, 15%), $value) repeat-x;\n      } @else {\n        background-color: $value;\n      }\n    }\n  }\n}\n\n// Forms\n\nlegend {\n  color: $white;\n}\n\n.form-control {\n  background-clip: border-box;\n\n  &:disabled,\n  &[readonly] {\n    border-color: transparent;\n  }\n}\n\n// Navs\n\n.nav-tabs,\n.nav-pills {\n  .nav-link {\n    color: $white;\n\n    &:hover {\n      background-color: $gray-700;\n    }\n\n    &.disabled,\n    &.disabled:hover {\n      background-color: transparent;\n      color: $nav-link-disabled-color;\n    }\n\n    &.active {\n      background-color: $primary;\n    }\n  }\n}\n\n.breadcrumb {\n  a {\n    color: $white;\n  }\n}\n\n.pagination {\n  a:hover {\n    text-decoration: none;\n  }\n}\n\n// Indicators\n\n.alert {\n  border: none;\n  color: $white;\n\n  a,\n  .alert-link {\n    color: $white;\n    text-decoration: underline;\n  }\n\n  @each $color, $value in $theme-colors {\n    &-#{$color} {\n      @if $enable-gradients {\n        background: $value linear-gradient(180deg, mix($white, $value, 15%), $value) repeat-x;\n      } @else {\n        background-color: $value;\n      }\n    }\n  }\n}\n\n.badge {\n  &.bg-dark {\n    color: $gray-900;\n  }\n}\n\n// Containers\n\n.list-group-item-action {\n\n  &:hover {\n    border-color: $primary;\n  }\n}\n\n.popover {\n  &-title {\n    border-bottom: none;\n  }\n}\n"
  },
  {
    "path": "src/sourceDev.WebApp/SharedThemes/cyborg/wwwroot/css/_variables.scss",
    "content": "// Cyborg 5.1.3\n// Bootswatch\n\n$theme: \"cyborg\" !default;\n\n//\n// Color system\n//\n\n$white:    #fff !default;\n$gray-100: #f8f9fa !default;\n$gray-200: #e9ecef !default;\n$gray-300: #dee2e6 !default;\n$gray-400: #adafae !default;\n$gray-500: #888 !default;\n$gray-600: #555 !default;\n$gray-700: #282828 !default;\n$gray-800: #222 !default;\n$gray-900: #212529 !default;\n$black:    #000 !default;\n\n$blue:    #2a9fd6 !default;\n$indigo:  #6610f2 !default;\n$purple:  #6f42c1 !default;\n$pink:    #e83e8c !default;\n$red:     #c00 !default;\n$orange:  #fd7e14 !default;\n$yellow:  #f80 !default;\n$green:   #77b300 !default;\n$teal:    #20c997 !default;\n$cyan:    #93c !default;\n\n$primary:       $blue !default;\n$secondary:     $gray-600 !default;\n$success:       $green !default;\n$info:          $cyan !default;\n$warning:       $yellow !default;\n$danger:        $red !default;\n$light:         $gray-800 !default;\n$dark:          $gray-400 !default;\n\n$min-contrast-ratio:   2.25 !default;\n\n\n// Body\n\n$body-bg:       #060606 !default;\n$body-color:    $gray-400 !default;\n\n// Fonts\n\n// stylelint-disable-next-line value-keyword-case\n$font-family-sans-serif:  Roboto, -apple-system, BlinkMacSystemFont, \"Segoe UI\", \"Helvetica Neue\", Arial, sans-serif !default;\n$h1-font-size:            4rem !default;\n$h2-font-size:            3rem !default;\n$h3-font-size:            2.5rem !default;\n$h4-font-size:            2rem !default;\n$h5-font-size:            1.5rem !default;\n$headings-color:          $white !default;\n\n// Tables\n\n$table-color:                   $white !default;\n$table-accent-bg:               rgba($white, .05) !default;\n$table-hover-bg:                rgba($white, .075) !default;\n$table-border-color:            $gray-700 !default;\n$table-dark-bg:                 $gray-500 !default;\n$table-dark-border-color:       darken($gray-500, 7.5%) !default;\n\n$table-bg-scale:              0 !default;\n\n// Buttons\n\n$input-btn-padding-x:       1rem !default;\n\n// Forms\n\n$input-bg:                          $white !default;\n$input-disabled-bg:                 $gray-400 !default;\n\n$input-color:                       $gray-900 !default;\n$input-border-color:                $white !default;\n$input-border-width:                0 !default;\n\n$input-group-addon-color:           $white !default;\n$input-group-addon-bg:              $gray-700 !default;\n$input-group-addon-border-color:    transparent !default;\n\n$form-check-input-bg:                     $white !default;\n$form-check-input-border:                 none !default;\n\n$form-file-button-color:          $white !default;\n\n// Dropdowns\n\n$dropdown-bg:                    $gray-700 !default;\n$dropdown-divider-bg:            $gray-800 !default;\n$dropdown-link-color:            $white !default;\n$dropdown-link-hover-color:      $white !default;\n$dropdown-link-hover-bg:         $primary !default;\n\n// Navs\n\n$nav-tabs-border-color:                       $table-border-color !default;\n$nav-tabs-link-hover-border-color:            $nav-tabs-border-color !default;\n$nav-tabs-link-active-color:                  $white !default;\n$nav-tabs-link-active-bg:                     $nav-tabs-border-color !default;\n$nav-tabs-link-active-border-color:           $nav-tabs-border-color !default;\n\n// Navbar\n\n$navbar-dark-hover-color:           $white !default;\n\n// Pagination\n\n$pagination-color:                     $white !default;\n$pagination-bg:                        $gray-700 !default;\n$pagination-border-color:              transparent !default;\n$pagination-hover-color:               $white !default;\n$pagination-hover-bg:                  $primary !default;\n$pagination-hover-border-color:        $pagination-border-color !default;\n$pagination-disabled-bg:               $pagination-bg !default;\n$pagination-disabled-border-color:     $pagination-border-color !default;\n\n// Cards\n\n$card-bg:                           $gray-700 !default;\n\n// Tooltips\n\n$tooltip-bg:                        $gray-700 !default;\n$tooltip-opacity:                   1 !default;\n\n// Popovers\n\n$popover-bg:                        $gray-700 !default;\n\n// Toasts\n\n$toast-color:                       $white !default;\n$toast-background-color:            $gray-800 !default;\n$toast-border-color:                $gray-700 !default;\n$toast-header-color:                $body-color !default;\n$toast-header-background-color:     $toast-background-color !default;\n$toast-header-border-color:         $toast-border-color !default;\n\n// Modals\n\n$modal-content-bg:                  $gray-800 !default;\n$modal-header-border-color:         $gray-700 !default;\n\n// Progress bars\n\n$progress-bg:                       $gray-700 !default;\n\n// List group\n\n$list-group-color:                  $white !default;\n$list-group-bg:                     $gray-800 !default;\n$list-group-border-color:           $gray-700 !default;\n$list-group-hover-bg:               $primary !default;\n$list-group-disabled-bg:            $gray-700 !default;\n$list-group-action-color:           $white !default;\n$list-group-action-active-bg:       $primary !default;\n\n// Breadcrumbs\n\n$breadcrumb-padding-y:              .375rem !default;\n$breadcrumb-padding-x:              .75rem !default;\n$breadcrumb-bg:                     $gray-700 !default;\n$breadcrumb-border-radius:          .25rem !default;\n\n// Close\n\n$btn-close-color:            $white !default;\n$btn-close-opacity:          .6 !default;\n$btn-close-hover-opacity:    1 !default;\n\n// Code\n\n$pre-color:                         inherit !default;\n"
  },
  {
    "path": "src/sourceDev.WebApp/SharedThemes/cyborg/wwwroot/css/bootstrap.css",
    "content": "/*!\n * Bootswatch v5.1.3\n * Homepage: https://bootswatch.com\n * Copyright 2012-2021 Thomas Park\n * Licensed under MIT\n * Based on Bootstrap\n*/\n/*!\n * Bootstrap v5.1.3 (https://getbootstrap.com/)\n * Copyright 2011-2021 The Bootstrap Authors\n * Copyright 2011-2021 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n@import url(\"https://fonts.googleapis.com/css2?family=Roboto:wght@400;700&display=swap\");\n:root {\n  --bs-blue: #2a9fd6;\n  --bs-indigo: #6610f2;\n  --bs-purple: #6f42c1;\n  --bs-pink: #e83e8c;\n  --bs-red: #c00;\n  --bs-orange: #fd7e14;\n  --bs-yellow: #f80;\n  --bs-green: #77b300;\n  --bs-teal: #20c997;\n  --bs-cyan: #93c;\n  --bs-white: #fff;\n  --bs-gray: #555;\n  --bs-gray-dark: #222;\n  --bs-gray-100: #f8f9fa;\n  --bs-gray-200: #e9ecef;\n  --bs-gray-300: #dee2e6;\n  --bs-gray-400: #adafae;\n  --bs-gray-500: #888;\n  --bs-gray-600: #555;\n  --bs-gray-700: #282828;\n  --bs-gray-800: #222;\n  --bs-gray-900: #212529;\n  --bs-primary: #2a9fd6;\n  --bs-secondary: #555;\n  --bs-success: #77b300;\n  --bs-info: #93c;\n  --bs-warning: #f80;\n  --bs-danger: #c00;\n  --bs-light: #222;\n  --bs-dark: #adafae;\n  --bs-primary-rgb: 42, 159, 214;\n  --bs-secondary-rgb: 85, 85, 85;\n  --bs-success-rgb: 119, 179, 0;\n  --bs-info-rgb: 153, 51, 204;\n  --bs-warning-rgb: 255, 136, 0;\n  --bs-danger-rgb: 204, 0, 0;\n  --bs-light-rgb: 34, 34, 34;\n  --bs-dark-rgb: 173, 175, 174;\n  --bs-white-rgb: 255, 255, 255;\n  --bs-black-rgb: 0, 0, 0;\n  --bs-body-color-rgb: 173, 175, 174;\n  --bs-body-bg-rgb: 6, 6, 6;\n  --bs-font-sans-serif: Roboto, -apple-system, BlinkMacSystemFont, \"Segoe UI\", \"Helvetica Neue\", Arial, sans-serif;\n  --bs-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n  --bs-gradient: linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));\n  --bs-body-font-family: var(--bs-font-sans-serif);\n  --bs-body-font-size: 1rem;\n  --bs-body-font-weight: 400;\n  --bs-body-line-height: 1.5;\n  --bs-body-color: #adafae;\n  --bs-body-bg: #060606;\n}\n\n*,\n*::before,\n*::after {\n  box-sizing: border-box;\n}\n\n@media (prefers-reduced-motion: no-preference) {\n  :root {\n    scroll-behavior: smooth;\n  }\n}\n\nbody {\n  margin: 0;\n  font-family: var(--bs-body-font-family);\n  font-size: var(--bs-body-font-size);\n  font-weight: var(--bs-body-font-weight);\n  line-height: var(--bs-body-line-height);\n  color: var(--bs-body-color);\n  text-align: var(--bs-body-text-align);\n  background-color: var(--bs-body-bg);\n  -webkit-text-size-adjust: 100%;\n  -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\n\nhr {\n  margin: 1rem 0;\n  color: inherit;\n  background-color: currentColor;\n  border: 0;\n  opacity: 0.25;\n}\n\nhr:not([size]) {\n  height: 1px;\n}\n\nh1, .h1, h2, .h2, h3, .h3, h4, .h4, h5, .h5, h6, .h6 {\n  margin-top: 0;\n  margin-bottom: 0.5rem;\n  font-weight: 500;\n  line-height: 1.2;\n  color: #fff;\n}\n\nh1, .h1 {\n  font-size: calc(1.525rem + 3.3vw);\n}\n\n@media (min-width: 1200px) {\n  h1, .h1 {\n    font-size: 4rem;\n  }\n}\n\nh2, .h2 {\n  font-size: calc(1.425rem + 2.1vw);\n}\n\n@media (min-width: 1200px) {\n  h2, .h2 {\n    font-size: 3rem;\n  }\n}\n\nh3, .h3 {\n  font-size: calc(1.375rem + 1.5vw);\n}\n\n@media (min-width: 1200px) {\n  h3, .h3 {\n    font-size: 2.5rem;\n  }\n}\n\nh4, .h4 {\n  font-size: calc(1.325rem + 0.9vw);\n}\n\n@media (min-width: 1200px) {\n  h4, .h4 {\n    font-size: 2rem;\n  }\n}\n\nh5, .h5 {\n  font-size: calc(1.275rem + 0.3vw);\n}\n\n@media (min-width: 1200px) {\n  h5, .h5 {\n    font-size: 1.5rem;\n  }\n}\n\nh6, .h6 {\n  font-size: 1rem;\n}\n\np {\n  margin-top: 0;\n  margin-bottom: 1rem;\n}\n\nabbr[title],\nabbr[data-bs-original-title] {\n  -webkit-text-decoration: underline dotted;\n  text-decoration: underline dotted;\n  cursor: help;\n  -webkit-text-decoration-skip-ink: none;\n  text-decoration-skip-ink: none;\n}\n\naddress {\n  margin-bottom: 1rem;\n  font-style: normal;\n  line-height: inherit;\n}\n\nol,\nul {\n  padding-left: 2rem;\n}\n\nol,\nul,\ndl {\n  margin-top: 0;\n  margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n  margin-bottom: 0;\n}\n\ndt {\n  font-weight: 700;\n}\n\ndd {\n  margin-bottom: .5rem;\n  margin-left: 0;\n}\n\nblockquote {\n  margin: 0 0 1rem;\n}\n\nb,\nstrong {\n  font-weight: bolder;\n}\n\nsmall, .small {\n  font-size: 0.875em;\n}\n\nmark, .mark {\n  padding: 0.2em;\n  background-color: #fcf8e3;\n}\n\nsub,\nsup {\n  position: relative;\n  font-size: 0.75em;\n  line-height: 0;\n  vertical-align: baseline;\n}\n\nsub {\n  bottom: -.25em;\n}\n\nsup {\n  top: -.5em;\n}\n\na {\n  color: #2a9fd6;\n  text-decoration: underline;\n}\n\na:hover {\n  color: #227fab;\n}\n\na:not([href]):not([class]), a:not([href]):not([class]):hover {\n  color: inherit;\n  text-decoration: none;\n}\n\npre,\ncode,\nkbd,\nsamp {\n  font-family: var(--bs-font-monospace);\n  font-size: 1em;\n  direction: ltr /* rtl:ignore */;\n  unicode-bidi: bidi-override;\n}\n\npre {\n  display: block;\n  margin-top: 0;\n  margin-bottom: 1rem;\n  overflow: auto;\n  font-size: 0.875em;\n  color: inherit;\n}\n\npre code {\n  font-size: inherit;\n  color: inherit;\n  word-break: normal;\n}\n\ncode {\n  font-size: 0.875em;\n  color: #e83e8c;\n  word-wrap: break-word;\n}\n\na > code {\n  color: inherit;\n}\n\nkbd {\n  padding: 0.2rem 0.4rem;\n  font-size: 0.875em;\n  color: #fff;\n  background-color: #212529;\n  border-radius: 0.2rem;\n}\n\nkbd kbd {\n  padding: 0;\n  font-size: 1em;\n  font-weight: 700;\n}\n\nfigure {\n  margin: 0 0 1rem;\n}\n\nimg,\nsvg {\n  vertical-align: middle;\n}\n\ntable {\n  caption-side: bottom;\n  border-collapse: collapse;\n}\n\ncaption {\n  padding-top: 0.5rem;\n  padding-bottom: 0.5rem;\n  color: #555;\n  text-align: left;\n}\n\nth {\n  text-align: inherit;\n  text-align: -webkit-match-parent;\n}\n\nthead,\ntbody,\ntfoot,\ntr,\ntd,\nth {\n  border-color: inherit;\n  border-style: solid;\n  border-width: 0;\n}\n\nlabel {\n  display: inline-block;\n}\n\nbutton {\n  border-radius: 0;\n}\n\nbutton:focus:not(:focus-visible) {\n  outline: 0;\n}\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n  margin: 0;\n  font-family: inherit;\n  font-size: inherit;\n  line-height: inherit;\n}\n\nbutton,\nselect {\n  text-transform: none;\n}\n\n[role=\"button\"] {\n  cursor: pointer;\n}\n\nselect {\n  word-wrap: normal;\n}\n\nselect:disabled {\n  opacity: 1;\n}\n\n[list]::-webkit-calendar-picker-indicator {\n  display: none;\n}\n\nbutton,\n[type=\"button\"],\n[type=\"reset\"],\n[type=\"submit\"] {\n  -webkit-appearance: button;\n}\n\nbutton:not(:disabled),\n[type=\"button\"]:not(:disabled),\n[type=\"reset\"]:not(:disabled),\n[type=\"submit\"]:not(:disabled) {\n  cursor: pointer;\n}\n\n::-moz-focus-inner {\n  padding: 0;\n  border-style: none;\n}\n\ntextarea {\n  resize: vertical;\n}\n\nfieldset {\n  min-width: 0;\n  padding: 0;\n  margin: 0;\n  border: 0;\n}\n\nlegend {\n  float: left;\n  width: 100%;\n  padding: 0;\n  margin-bottom: 0.5rem;\n  font-size: calc(1.275rem + 0.3vw);\n  line-height: inherit;\n}\n\n@media (min-width: 1200px) {\n  legend {\n    font-size: 1.5rem;\n  }\n}\n\nlegend + * {\n  clear: left;\n}\n\n::-webkit-datetime-edit-fields-wrapper,\n::-webkit-datetime-edit-text,\n::-webkit-datetime-edit-minute,\n::-webkit-datetime-edit-hour-field,\n::-webkit-datetime-edit-day-field,\n::-webkit-datetime-edit-month-field,\n::-webkit-datetime-edit-year-field {\n  padding: 0;\n}\n\n::-webkit-inner-spin-button {\n  height: auto;\n}\n\n[type=\"search\"] {\n  outline-offset: -2px;\n  -webkit-appearance: textfield;\n}\n\n/* rtl:raw:\n[type=\"tel\"],\n[type=\"url\"],\n[type=\"email\"],\n[type=\"number\"] {\n  direction: ltr;\n}\n*/\n::-webkit-search-decoration {\n  -webkit-appearance: none;\n}\n\n::-webkit-color-swatch-wrapper {\n  padding: 0;\n}\n\n::file-selector-button {\n  font: inherit;\n}\n\n::-webkit-file-upload-button {\n  font: inherit;\n  -webkit-appearance: button;\n}\n\noutput {\n  display: inline-block;\n}\n\niframe {\n  border: 0;\n}\n\nsummary {\n  display: list-item;\n  cursor: pointer;\n}\n\nprogress {\n  vertical-align: baseline;\n}\n\n[hidden] {\n  display: none !important;\n}\n\n.lead {\n  font-size: 1.25rem;\n  font-weight: 300;\n}\n\n.display-1 {\n  font-size: calc(1.625rem + 4.5vw);\n  font-weight: 300;\n  line-height: 1.2;\n}\n\n@media (min-width: 1200px) {\n  .display-1 {\n    font-size: 5rem;\n  }\n}\n\n.display-2 {\n  font-size: calc(1.575rem + 3.9vw);\n  font-weight: 300;\n  line-height: 1.2;\n}\n\n@media (min-width: 1200px) {\n  .display-2 {\n    font-size: 4.5rem;\n  }\n}\n\n.display-3 {\n  font-size: calc(1.525rem + 3.3vw);\n  font-weight: 300;\n  line-height: 1.2;\n}\n\n@media (min-width: 1200px) {\n  .display-3 {\n    font-size: 4rem;\n  }\n}\n\n.display-4 {\n  font-size: calc(1.475rem + 2.7vw);\n  font-weight: 300;\n  line-height: 1.2;\n}\n\n@media (min-width: 1200px) {\n  .display-4 {\n    font-size: 3.5rem;\n  }\n}\n\n.display-5 {\n  font-size: calc(1.425rem + 2.1vw);\n  font-weight: 300;\n  line-height: 1.2;\n}\n\n@media (min-width: 1200px) {\n  .display-5 {\n    font-size: 3rem;\n  }\n}\n\n.display-6 {\n  font-size: calc(1.375rem + 1.5vw);\n  font-weight: 300;\n  line-height: 1.2;\n}\n\n@media (min-width: 1200px) {\n  .display-6 {\n    font-size: 2.5rem;\n  }\n}\n\n.list-unstyled {\n  padding-left: 0;\n  list-style: none;\n}\n\n.list-inline {\n  padding-left: 0;\n  list-style: none;\n}\n\n.list-inline-item {\n  display: inline-block;\n}\n\n.list-inline-item:not(:last-child) {\n  margin-right: 0.5rem;\n}\n\n.initialism {\n  font-size: 0.875em;\n  text-transform: uppercase;\n}\n\n.blockquote {\n  margin-bottom: 1rem;\n  font-size: 1.25rem;\n}\n\n.blockquote > :last-child {\n  margin-bottom: 0;\n}\n\n.blockquote-footer {\n  margin-top: -1rem;\n  margin-bottom: 1rem;\n  font-size: 0.875em;\n  color: #555;\n}\n\n.blockquote-footer::before {\n  content: \"\\2014\\00A0\";\n}\n\n.img-fluid {\n  max-width: 100%;\n  height: auto;\n}\n\n.img-thumbnail {\n  padding: 0.25rem;\n  background-color: #060606;\n  border: 1px solid #dee2e6;\n  border-radius: 0.25rem;\n  max-width: 100%;\n  height: auto;\n}\n\n.figure {\n  display: inline-block;\n}\n\n.figure-img {\n  margin-bottom: 0.5rem;\n  line-height: 1;\n}\n\n.figure-caption {\n  font-size: 0.875em;\n  color: #555;\n}\n\n.container,\n.container-fluid,\n.container-sm,\n.container-md,\n.container-lg,\n.container-xl,\n.container-xxl {\n  width: 100%;\n  padding-right: var(--bs-gutter-x, 0.75rem);\n  padding-left: var(--bs-gutter-x, 0.75rem);\n  margin-right: auto;\n  margin-left: auto;\n}\n\n@media (min-width: 576px) {\n  .container, .container-sm {\n    max-width: 540px;\n  }\n}\n\n@media (min-width: 768px) {\n  .container, .container-sm, .container-md {\n    max-width: 720px;\n  }\n}\n\n@media (min-width: 992px) {\n  .container, .container-sm, .container-md, .container-lg {\n    max-width: 960px;\n  }\n}\n\n@media (min-width: 1200px) {\n  .container, .container-sm, .container-md, .container-lg, .container-xl {\n    max-width: 1140px;\n  }\n}\n\n@media (min-width: 1400px) {\n  .container, .container-sm, .container-md, .container-lg, .container-xl, .container-xxl {\n    max-width: 1320px;\n  }\n}\n\n.row {\n  --bs-gutter-x: 1.5rem;\n  --bs-gutter-y: 0;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n  flex-wrap: wrap;\n  margin-top: calc(-1 * var(--bs-gutter-y));\n  margin-right: calc(-.5 * var(--bs-gutter-x));\n  margin-left: calc(-.5 * var(--bs-gutter-x));\n}\n\n.row > * {\n  -ms-flex-negative: 0;\n  flex-shrink: 0;\n  width: 100%;\n  max-width: 100%;\n  padding-right: calc(var(--bs-gutter-x) * .5);\n  padding-left: calc(var(--bs-gutter-x) * .5);\n  margin-top: var(--bs-gutter-y);\n}\n\n.col {\n  -ms-flex: 1 0 0%;\n  flex: 1 0 0%;\n}\n\n.row-cols-auto > * {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: auto;\n}\n\n.row-cols-1 > * {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 100%;\n}\n\n.row-cols-2 > * {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 50%;\n}\n\n.row-cols-3 > * {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 33.333333%;\n}\n\n.row-cols-4 > * {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 25%;\n}\n\n.row-cols-5 > * {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 20%;\n}\n\n.row-cols-6 > * {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 16.666667%;\n}\n\n.col-auto {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: auto;\n}\n\n.col-1 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 8.333333%;\n}\n\n.col-2 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 16.666667%;\n}\n\n.col-3 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 25%;\n}\n\n.col-4 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 33.333333%;\n}\n\n.col-5 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 41.666667%;\n}\n\n.col-6 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 50%;\n}\n\n.col-7 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 58.333333%;\n}\n\n.col-8 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 66.666667%;\n}\n\n.col-9 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 75%;\n}\n\n.col-10 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 83.333333%;\n}\n\n.col-11 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 91.666667%;\n}\n\n.col-12 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 100%;\n}\n\n.offset-1 {\n  margin-left: 8.333333%;\n}\n\n.offset-2 {\n  margin-left: 16.666667%;\n}\n\n.offset-3 {\n  margin-left: 25%;\n}\n\n.offset-4 {\n  margin-left: 33.333333%;\n}\n\n.offset-5 {\n  margin-left: 41.666667%;\n}\n\n.offset-6 {\n  margin-left: 50%;\n}\n\n.offset-7 {\n  margin-left: 58.333333%;\n}\n\n.offset-8 {\n  margin-left: 66.666667%;\n}\n\n.offset-9 {\n  margin-left: 75%;\n}\n\n.offset-10 {\n  margin-left: 83.333333%;\n}\n\n.offset-11 {\n  margin-left: 91.666667%;\n}\n\n.g-0,\n.gx-0 {\n  --bs-gutter-x: 0;\n}\n\n.g-0,\n.gy-0 {\n  --bs-gutter-y: 0;\n}\n\n.g-1,\n.gx-1 {\n  --bs-gutter-x: 0.25rem;\n}\n\n.g-1,\n.gy-1 {\n  --bs-gutter-y: 0.25rem;\n}\n\n.g-2,\n.gx-2 {\n  --bs-gutter-x: 0.5rem;\n}\n\n.g-2,\n.gy-2 {\n  --bs-gutter-y: 0.5rem;\n}\n\n.g-3,\n.gx-3 {\n  --bs-gutter-x: 1rem;\n}\n\n.g-3,\n.gy-3 {\n  --bs-gutter-y: 1rem;\n}\n\n.g-4,\n.gx-4 {\n  --bs-gutter-x: 1.5rem;\n}\n\n.g-4,\n.gy-4 {\n  --bs-gutter-y: 1.5rem;\n}\n\n.g-5,\n.gx-5 {\n  --bs-gutter-x: 3rem;\n}\n\n.g-5,\n.gy-5 {\n  --bs-gutter-y: 3rem;\n}\n\n@media (min-width: 576px) {\n  .col-sm {\n    -ms-flex: 1 0 0%;\n    flex: 1 0 0%;\n  }\n  .row-cols-sm-auto > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .row-cols-sm-1 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .row-cols-sm-2 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .row-cols-sm-3 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 33.333333%;\n  }\n  .row-cols-sm-4 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .row-cols-sm-5 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 20%;\n  }\n  .row-cols-sm-6 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 16.666667%;\n  }\n  .col-sm-auto {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .col-sm-1 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 8.333333%;\n  }\n  .col-sm-2 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 16.666667%;\n  }\n  .col-sm-3 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .col-sm-4 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 33.333333%;\n  }\n  .col-sm-5 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 41.666667%;\n  }\n  .col-sm-6 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .col-sm-7 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 58.333333%;\n  }\n  .col-sm-8 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 66.666667%;\n  }\n  .col-sm-9 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 75%;\n  }\n  .col-sm-10 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 83.333333%;\n  }\n  .col-sm-11 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 91.666667%;\n  }\n  .col-sm-12 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .offset-sm-0 {\n    margin-left: 0;\n  }\n  .offset-sm-1 {\n    margin-left: 8.333333%;\n  }\n  .offset-sm-2 {\n    margin-left: 16.666667%;\n  }\n  .offset-sm-3 {\n    margin-left: 25%;\n  }\n  .offset-sm-4 {\n    margin-left: 33.333333%;\n  }\n  .offset-sm-5 {\n    margin-left: 41.666667%;\n  }\n  .offset-sm-6 {\n    margin-left: 50%;\n  }\n  .offset-sm-7 {\n    margin-left: 58.333333%;\n  }\n  .offset-sm-8 {\n    margin-left: 66.666667%;\n  }\n  .offset-sm-9 {\n    margin-left: 75%;\n  }\n  .offset-sm-10 {\n    margin-left: 83.333333%;\n  }\n  .offset-sm-11 {\n    margin-left: 91.666667%;\n  }\n  .g-sm-0,\n  .gx-sm-0 {\n    --bs-gutter-x: 0;\n  }\n  .g-sm-0,\n  .gy-sm-0 {\n    --bs-gutter-y: 0;\n  }\n  .g-sm-1,\n  .gx-sm-1 {\n    --bs-gutter-x: 0.25rem;\n  }\n  .g-sm-1,\n  .gy-sm-1 {\n    --bs-gutter-y: 0.25rem;\n  }\n  .g-sm-2,\n  .gx-sm-2 {\n    --bs-gutter-x: 0.5rem;\n  }\n  .g-sm-2,\n  .gy-sm-2 {\n    --bs-gutter-y: 0.5rem;\n  }\n  .g-sm-3,\n  .gx-sm-3 {\n    --bs-gutter-x: 1rem;\n  }\n  .g-sm-3,\n  .gy-sm-3 {\n    --bs-gutter-y: 1rem;\n  }\n  .g-sm-4,\n  .gx-sm-4 {\n    --bs-gutter-x: 1.5rem;\n  }\n  .g-sm-4,\n  .gy-sm-4 {\n    --bs-gutter-y: 1.5rem;\n  }\n  .g-sm-5,\n  .gx-sm-5 {\n    --bs-gutter-x: 3rem;\n  }\n  .g-sm-5,\n  .gy-sm-5 {\n    --bs-gutter-y: 3rem;\n  }\n}\n\n@media (min-width: 768px) {\n  .col-md {\n    -ms-flex: 1 0 0%;\n    flex: 1 0 0%;\n  }\n  .row-cols-md-auto > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .row-cols-md-1 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .row-cols-md-2 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .row-cols-md-3 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 33.333333%;\n  }\n  .row-cols-md-4 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .row-cols-md-5 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 20%;\n  }\n  .row-cols-md-6 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 16.666667%;\n  }\n  .col-md-auto {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .col-md-1 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 8.333333%;\n  }\n  .col-md-2 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 16.666667%;\n  }\n  .col-md-3 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .col-md-4 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 33.333333%;\n  }\n  .col-md-5 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 41.666667%;\n  }\n  .col-md-6 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .col-md-7 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 58.333333%;\n  }\n  .col-md-8 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 66.666667%;\n  }\n  .col-md-9 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 75%;\n  }\n  .col-md-10 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 83.333333%;\n  }\n  .col-md-11 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 91.666667%;\n  }\n  .col-md-12 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .offset-md-0 {\n    margin-left: 0;\n  }\n  .offset-md-1 {\n    margin-left: 8.333333%;\n  }\n  .offset-md-2 {\n    margin-left: 16.666667%;\n  }\n  .offset-md-3 {\n    margin-left: 25%;\n  }\n  .offset-md-4 {\n    margin-left: 33.333333%;\n  }\n  .offset-md-5 {\n    margin-left: 41.666667%;\n  }\n  .offset-md-6 {\n    margin-left: 50%;\n  }\n  .offset-md-7 {\n    margin-left: 58.333333%;\n  }\n  .offset-md-8 {\n    margin-left: 66.666667%;\n  }\n  .offset-md-9 {\n    margin-left: 75%;\n  }\n  .offset-md-10 {\n    margin-left: 83.333333%;\n  }\n  .offset-md-11 {\n    margin-left: 91.666667%;\n  }\n  .g-md-0,\n  .gx-md-0 {\n    --bs-gutter-x: 0;\n  }\n  .g-md-0,\n  .gy-md-0 {\n    --bs-gutter-y: 0;\n  }\n  .g-md-1,\n  .gx-md-1 {\n    --bs-gutter-x: 0.25rem;\n  }\n  .g-md-1,\n  .gy-md-1 {\n    --bs-gutter-y: 0.25rem;\n  }\n  .g-md-2,\n  .gx-md-2 {\n    --bs-gutter-x: 0.5rem;\n  }\n  .g-md-2,\n  .gy-md-2 {\n    --bs-gutter-y: 0.5rem;\n  }\n  .g-md-3,\n  .gx-md-3 {\n    --bs-gutter-x: 1rem;\n  }\n  .g-md-3,\n  .gy-md-3 {\n    --bs-gutter-y: 1rem;\n  }\n  .g-md-4,\n  .gx-md-4 {\n    --bs-gutter-x: 1.5rem;\n  }\n  .g-md-4,\n  .gy-md-4 {\n    --bs-gutter-y: 1.5rem;\n  }\n  .g-md-5,\n  .gx-md-5 {\n    --bs-gutter-x: 3rem;\n  }\n  .g-md-5,\n  .gy-md-5 {\n    --bs-gutter-y: 3rem;\n  }\n}\n\n@media (min-width: 992px) {\n  .col-lg {\n    -ms-flex: 1 0 0%;\n    flex: 1 0 0%;\n  }\n  .row-cols-lg-auto > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .row-cols-lg-1 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .row-cols-lg-2 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .row-cols-lg-3 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 33.333333%;\n  }\n  .row-cols-lg-4 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .row-cols-lg-5 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 20%;\n  }\n  .row-cols-lg-6 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 16.666667%;\n  }\n  .col-lg-auto {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .col-lg-1 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 8.333333%;\n  }\n  .col-lg-2 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 16.666667%;\n  }\n  .col-lg-3 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .col-lg-4 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 33.333333%;\n  }\n  .col-lg-5 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 41.666667%;\n  }\n  .col-lg-6 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .col-lg-7 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 58.333333%;\n  }\n  .col-lg-8 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 66.666667%;\n  }\n  .col-lg-9 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 75%;\n  }\n  .col-lg-10 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 83.333333%;\n  }\n  .col-lg-11 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 91.666667%;\n  }\n  .col-lg-12 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .offset-lg-0 {\n    margin-left: 0;\n  }\n  .offset-lg-1 {\n    margin-left: 8.333333%;\n  }\n  .offset-lg-2 {\n    margin-left: 16.666667%;\n  }\n  .offset-lg-3 {\n    margin-left: 25%;\n  }\n  .offset-lg-4 {\n    margin-left: 33.333333%;\n  }\n  .offset-lg-5 {\n    margin-left: 41.666667%;\n  }\n  .offset-lg-6 {\n    margin-left: 50%;\n  }\n  .offset-lg-7 {\n    margin-left: 58.333333%;\n  }\n  .offset-lg-8 {\n    margin-left: 66.666667%;\n  }\n  .offset-lg-9 {\n    margin-left: 75%;\n  }\n  .offset-lg-10 {\n    margin-left: 83.333333%;\n  }\n  .offset-lg-11 {\n    margin-left: 91.666667%;\n  }\n  .g-lg-0,\n  .gx-lg-0 {\n    --bs-gutter-x: 0;\n  }\n  .g-lg-0,\n  .gy-lg-0 {\n    --bs-gutter-y: 0;\n  }\n  .g-lg-1,\n  .gx-lg-1 {\n    --bs-gutter-x: 0.25rem;\n  }\n  .g-lg-1,\n  .gy-lg-1 {\n    --bs-gutter-y: 0.25rem;\n  }\n  .g-lg-2,\n  .gx-lg-2 {\n    --bs-gutter-x: 0.5rem;\n  }\n  .g-lg-2,\n  .gy-lg-2 {\n    --bs-gutter-y: 0.5rem;\n  }\n  .g-lg-3,\n  .gx-lg-3 {\n    --bs-gutter-x: 1rem;\n  }\n  .g-lg-3,\n  .gy-lg-3 {\n    --bs-gutter-y: 1rem;\n  }\n  .g-lg-4,\n  .gx-lg-4 {\n    --bs-gutter-x: 1.5rem;\n  }\n  .g-lg-4,\n  .gy-lg-4 {\n    --bs-gutter-y: 1.5rem;\n  }\n  .g-lg-5,\n  .gx-lg-5 {\n    --bs-gutter-x: 3rem;\n  }\n  .g-lg-5,\n  .gy-lg-5 {\n    --bs-gutter-y: 3rem;\n  }\n}\n\n@media (min-width: 1200px) {\n  .col-xl {\n    -ms-flex: 1 0 0%;\n    flex: 1 0 0%;\n  }\n  .row-cols-xl-auto > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .row-cols-xl-1 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .row-cols-xl-2 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .row-cols-xl-3 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 33.333333%;\n  }\n  .row-cols-xl-4 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .row-cols-xl-5 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 20%;\n  }\n  .row-cols-xl-6 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 16.666667%;\n  }\n  .col-xl-auto {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .col-xl-1 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 8.333333%;\n  }\n  .col-xl-2 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 16.666667%;\n  }\n  .col-xl-3 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .col-xl-4 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 33.333333%;\n  }\n  .col-xl-5 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 41.666667%;\n  }\n  .col-xl-6 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .col-xl-7 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 58.333333%;\n  }\n  .col-xl-8 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 66.666667%;\n  }\n  .col-xl-9 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 75%;\n  }\n  .col-xl-10 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 83.333333%;\n  }\n  .col-xl-11 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 91.666667%;\n  }\n  .col-xl-12 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .offset-xl-0 {\n    margin-left: 0;\n  }\n  .offset-xl-1 {\n    margin-left: 8.333333%;\n  }\n  .offset-xl-2 {\n    margin-left: 16.666667%;\n  }\n  .offset-xl-3 {\n    margin-left: 25%;\n  }\n  .offset-xl-4 {\n    margin-left: 33.333333%;\n  }\n  .offset-xl-5 {\n    margin-left: 41.666667%;\n  }\n  .offset-xl-6 {\n    margin-left: 50%;\n  }\n  .offset-xl-7 {\n    margin-left: 58.333333%;\n  }\n  .offset-xl-8 {\n    margin-left: 66.666667%;\n  }\n  .offset-xl-9 {\n    margin-left: 75%;\n  }\n  .offset-xl-10 {\n    margin-left: 83.333333%;\n  }\n  .offset-xl-11 {\n    margin-left: 91.666667%;\n  }\n  .g-xl-0,\n  .gx-xl-0 {\n    --bs-gutter-x: 0;\n  }\n  .g-xl-0,\n  .gy-xl-0 {\n    --bs-gutter-y: 0;\n  }\n  .g-xl-1,\n  .gx-xl-1 {\n    --bs-gutter-x: 0.25rem;\n  }\n  .g-xl-1,\n  .gy-xl-1 {\n    --bs-gutter-y: 0.25rem;\n  }\n  .g-xl-2,\n  .gx-xl-2 {\n    --bs-gutter-x: 0.5rem;\n  }\n  .g-xl-2,\n  .gy-xl-2 {\n    --bs-gutter-y: 0.5rem;\n  }\n  .g-xl-3,\n  .gx-xl-3 {\n    --bs-gutter-x: 1rem;\n  }\n  .g-xl-3,\n  .gy-xl-3 {\n    --bs-gutter-y: 1rem;\n  }\n  .g-xl-4,\n  .gx-xl-4 {\n    --bs-gutter-x: 1.5rem;\n  }\n  .g-xl-4,\n  .gy-xl-4 {\n    --bs-gutter-y: 1.5rem;\n  }\n  .g-xl-5,\n  .gx-xl-5 {\n    --bs-gutter-x: 3rem;\n  }\n  .g-xl-5,\n  .gy-xl-5 {\n    --bs-gutter-y: 3rem;\n  }\n}\n\n@media (min-width: 1400px) {\n  .col-xxl {\n    -ms-flex: 1 0 0%;\n    flex: 1 0 0%;\n  }\n  .row-cols-xxl-auto > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .row-cols-xxl-1 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .row-cols-xxl-2 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .row-cols-xxl-3 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 33.333333%;\n  }\n  .row-cols-xxl-4 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .row-cols-xxl-5 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 20%;\n  }\n  .row-cols-xxl-6 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 16.666667%;\n  }\n  .col-xxl-auto {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .col-xxl-1 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 8.333333%;\n  }\n  .col-xxl-2 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 16.666667%;\n  }\n  .col-xxl-3 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .col-xxl-4 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 33.333333%;\n  }\n  .col-xxl-5 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 41.666667%;\n  }\n  .col-xxl-6 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .col-xxl-7 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 58.333333%;\n  }\n  .col-xxl-8 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 66.666667%;\n  }\n  .col-xxl-9 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 75%;\n  }\n  .col-xxl-10 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 83.333333%;\n  }\n  .col-xxl-11 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 91.666667%;\n  }\n  .col-xxl-12 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .offset-xxl-0 {\n    margin-left: 0;\n  }\n  .offset-xxl-1 {\n    margin-left: 8.333333%;\n  }\n  .offset-xxl-2 {\n    margin-left: 16.666667%;\n  }\n  .offset-xxl-3 {\n    margin-left: 25%;\n  }\n  .offset-xxl-4 {\n    margin-left: 33.333333%;\n  }\n  .offset-xxl-5 {\n    margin-left: 41.666667%;\n  }\n  .offset-xxl-6 {\n    margin-left: 50%;\n  }\n  .offset-xxl-7 {\n    margin-left: 58.333333%;\n  }\n  .offset-xxl-8 {\n    margin-left: 66.666667%;\n  }\n  .offset-xxl-9 {\n    margin-left: 75%;\n  }\n  .offset-xxl-10 {\n    margin-left: 83.333333%;\n  }\n  .offset-xxl-11 {\n    margin-left: 91.666667%;\n  }\n  .g-xxl-0,\n  .gx-xxl-0 {\n    --bs-gutter-x: 0;\n  }\n  .g-xxl-0,\n  .gy-xxl-0 {\n    --bs-gutter-y: 0;\n  }\n  .g-xxl-1,\n  .gx-xxl-1 {\n    --bs-gutter-x: 0.25rem;\n  }\n  .g-xxl-1,\n  .gy-xxl-1 {\n    --bs-gutter-y: 0.25rem;\n  }\n  .g-xxl-2,\n  .gx-xxl-2 {\n    --bs-gutter-x: 0.5rem;\n  }\n  .g-xxl-2,\n  .gy-xxl-2 {\n    --bs-gutter-y: 0.5rem;\n  }\n  .g-xxl-3,\n  .gx-xxl-3 {\n    --bs-gutter-x: 1rem;\n  }\n  .g-xxl-3,\n  .gy-xxl-3 {\n    --bs-gutter-y: 1rem;\n  }\n  .g-xxl-4,\n  .gx-xxl-4 {\n    --bs-gutter-x: 1.5rem;\n  }\n  .g-xxl-4,\n  .gy-xxl-4 {\n    --bs-gutter-y: 1.5rem;\n  }\n  .g-xxl-5,\n  .gx-xxl-5 {\n    --bs-gutter-x: 3rem;\n  }\n  .g-xxl-5,\n  .gy-xxl-5 {\n    --bs-gutter-y: 3rem;\n  }\n}\n\n.table {\n  --bs-table-bg: transparent;\n  --bs-table-accent-bg: rgba(255, 255, 255, 0.05);\n  --bs-table-striped-color: #fff;\n  --bs-table-striped-bg: rgba(0, 0, 0, 0.05);\n  --bs-table-active-color: #fff;\n  --bs-table-active-bg: rgba(0, 0, 0, 0.1);\n  --bs-table-hover-color: #fff;\n  --bs-table-hover-bg: rgba(255, 255, 255, 0.075);\n  width: 100%;\n  margin-bottom: 1rem;\n  color: #fff;\n  vertical-align: top;\n  border-color: #282828;\n}\n\n.table > :not(caption) > * > * {\n  padding: 0.5rem 0.5rem;\n  background-color: var(--bs-table-bg);\n  border-bottom-width: 1px;\n  box-shadow: inset 0 0 0 9999px var(--bs-table-accent-bg);\n}\n\n.table > tbody {\n  vertical-align: inherit;\n}\n\n.table > thead {\n  vertical-align: bottom;\n}\n\n.table > :not(:first-child) {\n  border-top: 2px solid currentColor;\n}\n\n.caption-top {\n  caption-side: top;\n}\n\n.table-sm > :not(caption) > * > * {\n  padding: 0.25rem 0.25rem;\n}\n\n.table-bordered > :not(caption) > * {\n  border-width: 1px 0;\n}\n\n.table-bordered > :not(caption) > * > * {\n  border-width: 0 1px;\n}\n\n.table-borderless > :not(caption) > * > * {\n  border-bottom-width: 0;\n}\n\n.table-borderless > :not(:first-child) {\n  border-top-width: 0;\n}\n\n.table-striped > tbody > tr:nth-of-type(odd) > * {\n  --bs-table-accent-bg: var(--bs-table-striped-bg);\n  color: var(--bs-table-striped-color);\n}\n\n.table-active {\n  --bs-table-accent-bg: var(--bs-table-active-bg);\n  color: var(--bs-table-active-color);\n}\n\n.table-hover > tbody > tr:hover > * {\n  --bs-table-accent-bg: var(--bs-table-hover-bg);\n  color: var(--bs-table-hover-color);\n}\n\n.table-primary {\n  --bs-table-bg: #2a9fd6;\n  --bs-table-striped-bg: #35a4d8;\n  --bs-table-striped-color: #fff;\n  --bs-table-active-bg: #3fa9da;\n  --bs-table-active-color: #fff;\n  --bs-table-hover-bg: #3aa6d9;\n  --bs-table-hover-color: #fff;\n  color: #fff;\n  border-color: #3fa9da;\n}\n\n.table-secondary {\n  --bs-table-bg: #555555;\n  --bs-table-striped-bg: #5e5e5e;\n  --bs-table-striped-color: #fff;\n  --bs-table-active-bg: #666666;\n  --bs-table-active-color: #fff;\n  --bs-table-hover-bg: #626262;\n  --bs-table-hover-color: #fff;\n  color: #fff;\n  border-color: #666666;\n}\n\n.table-success {\n  --bs-table-bg: #77b300;\n  --bs-table-striped-bg: #7eb70d;\n  --bs-table-striped-color: #fff;\n  --bs-table-active-bg: #85bb1a;\n  --bs-table-active-color: #fff;\n  --bs-table-hover-bg: #81b913;\n  --bs-table-hover-color: #fff;\n  color: #fff;\n  border-color: #85bb1a;\n}\n\n.table-info {\n  --bs-table-bg: #9933cc;\n  --bs-table-striped-bg: #9e3dcf;\n  --bs-table-striped-color: #fff;\n  --bs-table-active-bg: #a347d1;\n  --bs-table-active-color: #fff;\n  --bs-table-hover-bg: #a142d0;\n  --bs-table-hover-color: #fff;\n  color: #fff;\n  border-color: #a347d1;\n}\n\n.table-warning {\n  --bs-table-bg: #ff8800;\n  --bs-table-striped-bg: #ff8e0d;\n  --bs-table-striped-color: #fff;\n  --bs-table-active-bg: #ff941a;\n  --bs-table-active-color: #000;\n  --bs-table-hover-bg: #ff9113;\n  --bs-table-hover-color: #fff;\n  color: #fff;\n  border-color: #ff941a;\n}\n\n.table-danger {\n  --bs-table-bg: #cc0000;\n  --bs-table-striped-bg: #cf0d0d;\n  --bs-table-striped-color: #fff;\n  --bs-table-active-bg: #d11a1a;\n  --bs-table-active-color: #fff;\n  --bs-table-hover-bg: #d01313;\n  --bs-table-hover-color: #fff;\n  color: #fff;\n  border-color: #d11a1a;\n}\n\n.table-light {\n  --bs-table-bg: #222;\n  --bs-table-striped-bg: #2d2d2d;\n  --bs-table-striped-color: #fff;\n  --bs-table-active-bg: #383838;\n  --bs-table-active-color: #fff;\n  --bs-table-hover-bg: #333333;\n  --bs-table-hover-color: #fff;\n  color: #fff;\n  border-color: #383838;\n}\n\n.table-dark {\n  --bs-table-bg: #adafae;\n  --bs-table-striped-bg: #a4a6a5;\n  --bs-table-striped-color: #fff;\n  --bs-table-active-bg: #9c9e9d;\n  --bs-table-active-color: #fff;\n  --bs-table-hover-bg: #a0a2a1;\n  --bs-table-hover-color: #fff;\n  color: #000;\n  border-color: #9c9e9d;\n}\n\n.table-responsive {\n  overflow-x: auto;\n  -webkit-overflow-scrolling: touch;\n}\n\n@media (max-width: 575.98px) {\n  .table-responsive-sm {\n    overflow-x: auto;\n    -webkit-overflow-scrolling: touch;\n  }\n}\n\n@media (max-width: 767.98px) {\n  .table-responsive-md {\n    overflow-x: auto;\n    -webkit-overflow-scrolling: touch;\n  }\n}\n\n@media (max-width: 991.98px) {\n  .table-responsive-lg {\n    overflow-x: auto;\n    -webkit-overflow-scrolling: touch;\n  }\n}\n\n@media (max-width: 1199.98px) {\n  .table-responsive-xl {\n    overflow-x: auto;\n    -webkit-overflow-scrolling: touch;\n  }\n}\n\n@media (max-width: 1399.98px) {\n  .table-responsive-xxl {\n    overflow-x: auto;\n    -webkit-overflow-scrolling: touch;\n  }\n}\n\n.form-label {\n  margin-bottom: 0.5rem;\n}\n\n.col-form-label {\n  padding-top: 0.375rem;\n  padding-bottom: 0.375rem;\n  margin-bottom: 0;\n  font-size: inherit;\n  line-height: 1.5;\n}\n\n.col-form-label-lg {\n  padding-top: 0.5rem;\n  padding-bottom: 0.5rem;\n  font-size: 1.25rem;\n}\n\n.col-form-label-sm {\n  padding-top: 0.25rem;\n  padding-bottom: 0.25rem;\n  font-size: 0.875rem;\n}\n\n.form-text {\n  margin-top: 0.25rem;\n  font-size: 0.875em;\n  color: #555;\n}\n\n.form-control {\n  display: block;\n  width: 100%;\n  padding: 0.375rem 1rem;\n  font-size: 1rem;\n  font-weight: 400;\n  line-height: 1.5;\n  color: #212529;\n  background-color: #fff;\n  background-clip: padding-box;\n  border: 0 solid #fff;\n  -webkit-appearance: none;\n  -moz-appearance: none;\n  appearance: none;\n  border-radius: 0.25rem;\n  transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .form-control {\n    transition: none;\n  }\n}\n\n.form-control[type=\"file\"] {\n  overflow: hidden;\n}\n\n.form-control[type=\"file\"]:not(:disabled):not([readonly]) {\n  cursor: pointer;\n}\n\n.form-control:focus {\n  color: #212529;\n  background-color: #fff;\n  border-color: #95cfeb;\n  outline: 0;\n  box-shadow: 0 0 0 0.25rem rgba(42, 159, 214, 0.25);\n}\n\n.form-control::-webkit-date-and-time-value {\n  height: 1.5em;\n}\n\n.form-control::-webkit-input-placeholder {\n  color: #555;\n  opacity: 1;\n}\n\n.form-control::-moz-placeholder {\n  color: #555;\n  opacity: 1;\n}\n\n.form-control:-ms-input-placeholder {\n  color: #555;\n  opacity: 1;\n}\n\n.form-control::-ms-input-placeholder {\n  color: #555;\n  opacity: 1;\n}\n\n.form-control::placeholder {\n  color: #555;\n  opacity: 1;\n}\n\n.form-control:disabled, .form-control[readonly] {\n  background-color: #adafae;\n  opacity: 1;\n}\n\n.form-control::file-selector-button {\n  padding: 0.375rem 1rem;\n  margin: -0.375rem -1rem;\n  -webkit-margin-end: 1rem;\n  -moz-margin-end: 1rem;\n  margin-inline-end: 1rem;\n  color: #fff;\n  background-color: #282828;\n  pointer-events: none;\n  border-color: inherit;\n  border-style: solid;\n  border-width: 0;\n  border-inline-end-width: 0;\n  border-radius: 0;\n  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .form-control::file-selector-button {\n    transition: none;\n  }\n}\n\n.form-control:hover:not(:disabled):not([readonly])::file-selector-button {\n  background-color: #262626;\n}\n\n.form-control::-webkit-file-upload-button {\n  padding: 0.375rem 1rem;\n  margin: -0.375rem -1rem;\n  -webkit-margin-end: 1rem;\n  margin-inline-end: 1rem;\n  color: #fff;\n  background-color: #282828;\n  pointer-events: none;\n  border-color: inherit;\n  border-style: solid;\n  border-width: 0;\n  border-inline-end-width: 0;\n  border-radius: 0;\n  -webkit-transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .form-control::-webkit-file-upload-button {\n    -webkit-transition: none;\n    transition: none;\n  }\n}\n\n.form-control:hover:not(:disabled):not([readonly])::-webkit-file-upload-button {\n  background-color: #262626;\n}\n\n.form-control-plaintext {\n  display: block;\n  width: 100%;\n  padding: 0.375rem 0;\n  margin-bottom: 0;\n  line-height: 1.5;\n  color: #adafae;\n  background-color: transparent;\n  border: solid transparent;\n  border-width: 0 0;\n}\n\n.form-control-plaintext.form-control-sm, .form-control-plaintext.form-control-lg {\n  padding-right: 0;\n  padding-left: 0;\n}\n\n.form-control-sm {\n  min-height: calc(1.5em + 0.5rem);\n  padding: 0.25rem 0.5rem;\n  font-size: 0.875rem;\n  border-radius: 0.2rem;\n}\n\n.form-control-sm::file-selector-button {\n  padding: 0.25rem 0.5rem;\n  margin: -0.25rem -0.5rem;\n  -webkit-margin-end: 0.5rem;\n  -moz-margin-end: 0.5rem;\n  margin-inline-end: 0.5rem;\n}\n\n.form-control-sm::-webkit-file-upload-button {\n  padding: 0.25rem 0.5rem;\n  margin: -0.25rem -0.5rem;\n  -webkit-margin-end: 0.5rem;\n  margin-inline-end: 0.5rem;\n}\n\n.form-control-lg {\n  min-height: calc(1.5em + 1rem);\n  padding: 0.5rem 1rem;\n  font-size: 1.25rem;\n  border-radius: 0.3rem;\n}\n\n.form-control-lg::file-selector-button {\n  padding: 0.5rem 1rem;\n  margin: -0.5rem -1rem;\n  -webkit-margin-end: 1rem;\n  -moz-margin-end: 1rem;\n  margin-inline-end: 1rem;\n}\n\n.form-control-lg::-webkit-file-upload-button {\n  padding: 0.5rem 1rem;\n  margin: -0.5rem -1rem;\n  -webkit-margin-end: 1rem;\n  margin-inline-end: 1rem;\n}\n\ntextarea.form-control {\n  min-height: calc(1.5em + 0.75rem);\n}\n\ntextarea.form-control-sm {\n  min-height: calc(1.5em + 0.5rem);\n}\n\ntextarea.form-control-lg {\n  min-height: calc(1.5em + 1rem);\n}\n\n.form-control-color {\n  width: 3rem;\n  height: auto;\n  padding: 0.375rem;\n}\n\n.form-control-color:not(:disabled):not([readonly]) {\n  cursor: pointer;\n}\n\n.form-control-color::-moz-color-swatch {\n  height: 1.5em;\n  border-radius: 0.25rem;\n}\n\n.form-control-color::-webkit-color-swatch {\n  height: 1.5em;\n  border-radius: 0.25rem;\n}\n\n.form-select {\n  display: block;\n  width: 100%;\n  padding: 0.375rem 3rem 0.375rem 1rem;\n  -moz-padding-start: calc(1rem - 3px);\n  font-size: 1rem;\n  font-weight: 400;\n  line-height: 1.5;\n  color: #212529;\n  background-color: #fff;\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23222' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e\");\n  background-repeat: no-repeat;\n  background-position: right 1rem center;\n  background-size: 16px 12px;\n  border: 0 solid #fff;\n  border-radius: 0.25rem;\n  transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n  -webkit-appearance: none;\n  -moz-appearance: none;\n  appearance: none;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .form-select {\n    transition: none;\n  }\n}\n\n.form-select:focus {\n  border-color: #95cfeb;\n  outline: 0;\n  box-shadow: 0 0 0 0.25rem rgba(42, 159, 214, 0.25);\n}\n\n.form-select[multiple], .form-select[size]:not([size=\"1\"]) {\n  padding-right: 1rem;\n  background-image: none;\n}\n\n.form-select:disabled {\n  background-color: #e9ecef;\n}\n\n.form-select:-moz-focusring {\n  color: transparent;\n  text-shadow: 0 0 0 #212529;\n}\n\n.form-select-sm {\n  padding-top: 0.25rem;\n  padding-bottom: 0.25rem;\n  padding-left: 0.5rem;\n  font-size: 0.875rem;\n  border-radius: 0.2rem;\n}\n\n.form-select-lg {\n  padding-top: 0.5rem;\n  padding-bottom: 0.5rem;\n  padding-left: 1rem;\n  font-size: 1.25rem;\n  border-radius: 0.3rem;\n}\n\n.form-check {\n  display: block;\n  min-height: 1.5rem;\n  padding-left: 1.5em;\n  margin-bottom: 0.125rem;\n}\n\n.form-check .form-check-input {\n  float: left;\n  margin-left: -1.5em;\n}\n\n.form-check-input {\n  width: 1em;\n  height: 1em;\n  margin-top: 0.25em;\n  vertical-align: top;\n  background-color: #fff;\n  background-repeat: no-repeat;\n  background-position: center;\n  background-size: contain;\n  border: none;\n  -webkit-appearance: none;\n  -moz-appearance: none;\n  appearance: none;\n  -webkit-print-color-adjust: exact;\n  color-adjust: exact;\n}\n\n.form-check-input[type=\"checkbox\"] {\n  border-radius: 0.25em;\n}\n\n.form-check-input[type=\"radio\"] {\n  border-radius: 50%;\n}\n\n.form-check-input:active {\n  -webkit-filter: brightness(90%);\n  filter: brightness(90%);\n}\n\n.form-check-input:focus {\n  border-color: #95cfeb;\n  outline: 0;\n  box-shadow: 0 0 0 0.25rem rgba(42, 159, 214, 0.25);\n}\n\n.form-check-input:checked {\n  background-color: #2a9fd6;\n  border-color: #2a9fd6;\n}\n\n.form-check-input:checked[type=\"checkbox\"] {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10l3 3l6-6'/%3e%3c/svg%3e\");\n}\n\n.form-check-input:checked[type=\"radio\"] {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='2' fill='%23fff'/%3e%3c/svg%3e\");\n}\n\n.form-check-input[type=\"checkbox\"]:indeterminate {\n  background-color: #2a9fd6;\n  border-color: #2a9fd6;\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10h8'/%3e%3c/svg%3e\");\n}\n\n.form-check-input:disabled {\n  pointer-events: none;\n  -webkit-filter: none;\n  filter: none;\n  opacity: 0.5;\n}\n\n.form-check-input[disabled] ~ .form-check-label, .form-check-input:disabled ~ .form-check-label {\n  opacity: 0.5;\n}\n\n.form-switch {\n  padding-left: 2.5em;\n}\n\n.form-switch .form-check-input {\n  width: 2em;\n  margin-left: -2.5em;\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%280, 0, 0, 0.25%29'/%3e%3c/svg%3e\");\n  background-position: left center;\n  border-radius: 2em;\n  transition: background-position 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .form-switch .form-check-input {\n    transition: none;\n  }\n}\n\n.form-switch .form-check-input:focus {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%2395cfeb'/%3e%3c/svg%3e\");\n}\n\n.form-switch .form-check-input:checked {\n  background-position: right center;\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e\");\n}\n\n.form-check-inline {\n  display: inline-block;\n  margin-right: 1rem;\n}\n\n.btn-check {\n  position: absolute;\n  clip: rect(0, 0, 0, 0);\n  pointer-events: none;\n}\n\n.btn-check[disabled] + .btn, .btn-check:disabled + .btn {\n  pointer-events: none;\n  -webkit-filter: none;\n  filter: none;\n  opacity: 0.65;\n}\n\n.form-range {\n  width: 100%;\n  height: 1.5rem;\n  padding: 0;\n  background-color: transparent;\n  -webkit-appearance: none;\n  -moz-appearance: none;\n  appearance: none;\n}\n\n.form-range:focus {\n  outline: 0;\n}\n\n.form-range:focus::-webkit-slider-thumb {\n  box-shadow: 0 0 0 1px #060606, 0 0 0 0.25rem rgba(42, 159, 214, 0.25);\n}\n\n.form-range:focus::-moz-range-thumb {\n  box-shadow: 0 0 0 1px #060606, 0 0 0 0.25rem rgba(42, 159, 214, 0.25);\n}\n\n.form-range::-moz-focus-outer {\n  border: 0;\n}\n\n.form-range::-webkit-slider-thumb {\n  width: 1rem;\n  height: 1rem;\n  margin-top: -0.25rem;\n  background-color: #2a9fd6;\n  border: 0;\n  border-radius: 1rem;\n  -webkit-transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n  transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n  -webkit-appearance: none;\n  appearance: none;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .form-range::-webkit-slider-thumb {\n    -webkit-transition: none;\n    transition: none;\n  }\n}\n\n.form-range::-webkit-slider-thumb:active {\n  background-color: #bfe2f3;\n}\n\n.form-range::-webkit-slider-runnable-track {\n  width: 100%;\n  height: 0.5rem;\n  color: transparent;\n  cursor: pointer;\n  background-color: #dee2e6;\n  border-color: transparent;\n  border-radius: 1rem;\n}\n\n.form-range::-moz-range-thumb {\n  width: 1rem;\n  height: 1rem;\n  background-color: #2a9fd6;\n  border: 0;\n  border-radius: 1rem;\n  -moz-transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n  transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n  -moz-appearance: none;\n  appearance: none;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .form-range::-moz-range-thumb {\n    -moz-transition: none;\n    transition: none;\n  }\n}\n\n.form-range::-moz-range-thumb:active {\n  background-color: #bfe2f3;\n}\n\n.form-range::-moz-range-track {\n  width: 100%;\n  height: 0.5rem;\n  color: transparent;\n  cursor: pointer;\n  background-color: #dee2e6;\n  border-color: transparent;\n  border-radius: 1rem;\n}\n\n.form-range:disabled {\n  pointer-events: none;\n}\n\n.form-range:disabled::-webkit-slider-thumb {\n  background-color: #888;\n}\n\n.form-range:disabled::-moz-range-thumb {\n  background-color: #888;\n}\n\n.form-floating {\n  position: relative;\n}\n\n.form-floating > .form-control,\n.form-floating > .form-select {\n  height: 3.5rem;\n  line-height: 1.25;\n}\n\n.form-floating > label {\n  position: absolute;\n  top: 0;\n  left: 0;\n  height: 100%;\n  padding: 1rem 1rem;\n  pointer-events: none;\n  border: 0 solid transparent;\n  -webkit-transform-origin: 0 0;\n  transform-origin: 0 0;\n  transition: opacity 0.1s ease-in-out, -webkit-transform 0.1s ease-in-out;\n  transition: opacity 0.1s ease-in-out, transform 0.1s ease-in-out;\n  transition: opacity 0.1s ease-in-out, transform 0.1s ease-in-out, -webkit-transform 0.1s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .form-floating > label {\n    transition: none;\n  }\n}\n\n.form-floating > .form-control {\n  padding: 1rem 1rem;\n}\n\n.form-floating > .form-control::-webkit-input-placeholder {\n  color: transparent;\n}\n\n.form-floating > .form-control::-moz-placeholder {\n  color: transparent;\n}\n\n.form-floating > .form-control:-ms-input-placeholder {\n  color: transparent;\n}\n\n.form-floating > .form-control::-ms-input-placeholder {\n  color: transparent;\n}\n\n.form-floating > .form-control::placeholder {\n  color: transparent;\n}\n\n.form-floating > .form-control:not(:-moz-placeholder-shown) {\n  padding-top: 1.625rem;\n  padding-bottom: 0.625rem;\n}\n\n.form-floating > .form-control:not(:-ms-input-placeholder) {\n  padding-top: 1.625rem;\n  padding-bottom: 0.625rem;\n}\n\n.form-floating > .form-control:focus, .form-floating > .form-control:not(:placeholder-shown) {\n  padding-top: 1.625rem;\n  padding-bottom: 0.625rem;\n}\n\n.form-floating > .form-control:-webkit-autofill {\n  padding-top: 1.625rem;\n  padding-bottom: 0.625rem;\n}\n\n.form-floating > .form-select {\n  padding-top: 1.625rem;\n  padding-bottom: 0.625rem;\n}\n\n.form-floating > .form-control:not(:-moz-placeholder-shown) ~ label {\n  opacity: 0.65;\n  transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);\n}\n\n.form-floating > .form-control:not(:-ms-input-placeholder) ~ label {\n  opacity: 0.65;\n  transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);\n}\n\n.form-floating > .form-control:focus ~ label,\n.form-floating > .form-control:not(:placeholder-shown) ~ label,\n.form-floating > .form-select ~ label {\n  opacity: 0.65;\n  -webkit-transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);\n  transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);\n}\n\n.form-floating > .form-control:-webkit-autofill ~ label {\n  opacity: 0.65;\n  -webkit-transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);\n  transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);\n}\n\n.input-group {\n  position: relative;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n  flex-wrap: wrap;\n  -ms-flex-align: stretch;\n  align-items: stretch;\n  width: 100%;\n}\n\n.input-group > .form-control,\n.input-group > .form-select {\n  position: relative;\n  -ms-flex: 1 1 auto;\n  flex: 1 1 auto;\n  width: 1%;\n  min-width: 0;\n}\n\n.input-group > .form-control:focus,\n.input-group > .form-select:focus {\n  z-index: 3;\n}\n\n.input-group .btn {\n  position: relative;\n  z-index: 2;\n}\n\n.input-group .btn:focus {\n  z-index: 3;\n}\n\n.input-group-text {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-align: center;\n  align-items: center;\n  padding: 0.375rem 1rem;\n  font-size: 1rem;\n  font-weight: 400;\n  line-height: 1.5;\n  color: #fff;\n  text-align: center;\n  white-space: nowrap;\n  background-color: #282828;\n  border: 0 solid transparent;\n  border-radius: 0.25rem;\n}\n\n.input-group-lg > .form-control,\n.input-group-lg > .form-select,\n.input-group-lg > .input-group-text,\n.input-group-lg > .btn {\n  padding: 0.5rem 1rem;\n  font-size: 1.25rem;\n  border-radius: 0.3rem;\n}\n\n.input-group-sm > .form-control,\n.input-group-sm > .form-select,\n.input-group-sm > .input-group-text,\n.input-group-sm > .btn {\n  padding: 0.25rem 0.5rem;\n  font-size: 0.875rem;\n  border-radius: 0.2rem;\n}\n\n.input-group-lg > .form-select,\n.input-group-sm > .form-select {\n  padding-right: 4rem;\n}\n\n.input-group:not(.has-validation) > :not(:last-child):not(.dropdown-toggle):not(.dropdown-menu),\n.input-group:not(.has-validation) > .dropdown-toggle:nth-last-child(n + 3) {\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n}\n\n.input-group.has-validation > :nth-last-child(n + 3):not(.dropdown-toggle):not(.dropdown-menu),\n.input-group.has-validation > .dropdown-toggle:nth-last-child(n + 4) {\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n}\n\n.input-group > :not(:first-child):not(.dropdown-menu):not(.valid-tooltip):not(.valid-feedback):not(.invalid-tooltip):not(.invalid-feedback) {\n  margin-left: 0;\n  border-top-left-radius: 0;\n  border-bottom-left-radius: 0;\n}\n\n.valid-feedback {\n  display: none;\n  width: 100%;\n  margin-top: 0.25rem;\n  font-size: 0.875em;\n  color: #77b300;\n}\n\n.valid-tooltip {\n  position: absolute;\n  top: 100%;\n  z-index: 5;\n  display: none;\n  max-width: 100%;\n  padding: 0.25rem 0.5rem;\n  margin-top: .1rem;\n  font-size: 0.875rem;\n  color: #fff;\n  background-color: #77b300;\n  border-radius: 0.25rem;\n}\n\n.was-validated :valid ~ .valid-feedback,\n.was-validated :valid ~ .valid-tooltip,\n.is-valid ~ .valid-feedback,\n.is-valid ~ .valid-tooltip {\n  display: block;\n}\n\n.was-validated .form-control:valid, .form-control.is-valid {\n  border-color: #77b300;\n  padding-right: calc(1.5em + 0.75rem);\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%2377b300' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e\");\n  background-repeat: no-repeat;\n  background-position: right calc(0.375em + 0.1875rem) center;\n  background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n\n.was-validated .form-control:valid:focus, .form-control.is-valid:focus {\n  border-color: #77b300;\n  box-shadow: 0 0 0 0.25rem rgba(119, 179, 0, 0.25);\n}\n\n.was-validated textarea.form-control:valid, textarea.form-control.is-valid {\n  padding-right: calc(1.5em + 0.75rem);\n  background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem);\n}\n\n.was-validated .form-select:valid, .form-select.is-valid {\n  border-color: #77b300;\n}\n\n.was-validated .form-select:valid:not([multiple]):not([size]), .was-validated .form-select:valid:not([multiple])[size=\"1\"], .form-select.is-valid:not([multiple]):not([size]), .form-select.is-valid:not([multiple])[size=\"1\"] {\n  padding-right: 5.5rem;\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23222' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e\"), url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%2377b300' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e\");\n  background-position: right 1rem center, center right 3rem;\n  background-size: 16px 12px, calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n\n.was-validated .form-select:valid:focus, .form-select.is-valid:focus {\n  border-color: #77b300;\n  box-shadow: 0 0 0 0.25rem rgba(119, 179, 0, 0.25);\n}\n\n.was-validated .form-check-input:valid, .form-check-input.is-valid {\n  border-color: #77b300;\n}\n\n.was-validated .form-check-input:valid:checked, .form-check-input.is-valid:checked {\n  background-color: #77b300;\n}\n\n.was-validated .form-check-input:valid:focus, .form-check-input.is-valid:focus {\n  box-shadow: 0 0 0 0.25rem rgba(119, 179, 0, 0.25);\n}\n\n.was-validated .form-check-input:valid ~ .form-check-label, .form-check-input.is-valid ~ .form-check-label {\n  color: #77b300;\n}\n\n.form-check-inline .form-check-input ~ .valid-feedback {\n  margin-left: .5em;\n}\n\n.was-validated .input-group .form-control:valid, .input-group .form-control.is-valid, .was-validated\n.input-group .form-select:valid,\n.input-group .form-select.is-valid {\n  z-index: 1;\n}\n\n.was-validated .input-group .form-control:valid:focus, .input-group .form-control.is-valid:focus, .was-validated\n.input-group .form-select:valid:focus,\n.input-group .form-select.is-valid:focus {\n  z-index: 3;\n}\n\n.invalid-feedback {\n  display: none;\n  width: 100%;\n  margin-top: 0.25rem;\n  font-size: 0.875em;\n  color: #c00;\n}\n\n.invalid-tooltip {\n  position: absolute;\n  top: 100%;\n  z-index: 5;\n  display: none;\n  max-width: 100%;\n  padding: 0.25rem 0.5rem;\n  margin-top: .1rem;\n  font-size: 0.875rem;\n  color: #fff;\n  background-color: #cc0000;\n  border-radius: 0.25rem;\n}\n\n.was-validated :invalid ~ .invalid-feedback,\n.was-validated :invalid ~ .invalid-tooltip,\n.is-invalid ~ .invalid-feedback,\n.is-invalid ~ .invalid-tooltip {\n  display: block;\n}\n\n.was-validated .form-control:invalid, .form-control.is-invalid {\n  border-color: #c00;\n  padding-right: calc(1.5em + 0.75rem);\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23c00'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23c00' stroke='none'/%3e%3c/svg%3e\");\n  background-repeat: no-repeat;\n  background-position: right calc(0.375em + 0.1875rem) center;\n  background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n\n.was-validated .form-control:invalid:focus, .form-control.is-invalid:focus {\n  border-color: #c00;\n  box-shadow: 0 0 0 0.25rem rgba(204, 0, 0, 0.25);\n}\n\n.was-validated textarea.form-control:invalid, textarea.form-control.is-invalid {\n  padding-right: calc(1.5em + 0.75rem);\n  background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem);\n}\n\n.was-validated .form-select:invalid, .form-select.is-invalid {\n  border-color: #c00;\n}\n\n.was-validated .form-select:invalid:not([multiple]):not([size]), .was-validated .form-select:invalid:not([multiple])[size=\"1\"], .form-select.is-invalid:not([multiple]):not([size]), .form-select.is-invalid:not([multiple])[size=\"1\"] {\n  padding-right: 5.5rem;\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23222' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e\"), url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23c00'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23c00' stroke='none'/%3e%3c/svg%3e\");\n  background-position: right 1rem center, center right 3rem;\n  background-size: 16px 12px, calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n\n.was-validated .form-select:invalid:focus, .form-select.is-invalid:focus {\n  border-color: #c00;\n  box-shadow: 0 0 0 0.25rem rgba(204, 0, 0, 0.25);\n}\n\n.was-validated .form-check-input:invalid, .form-check-input.is-invalid {\n  border-color: #c00;\n}\n\n.was-validated .form-check-input:invalid:checked, .form-check-input.is-invalid:checked {\n  background-color: #c00;\n}\n\n.was-validated .form-check-input:invalid:focus, .form-check-input.is-invalid:focus {\n  box-shadow: 0 0 0 0.25rem rgba(204, 0, 0, 0.25);\n}\n\n.was-validated .form-check-input:invalid ~ .form-check-label, .form-check-input.is-invalid ~ .form-check-label {\n  color: #c00;\n}\n\n.form-check-inline .form-check-input ~ .invalid-feedback {\n  margin-left: .5em;\n}\n\n.was-validated .input-group .form-control:invalid, .input-group .form-control.is-invalid, .was-validated\n.input-group .form-select:invalid,\n.input-group .form-select.is-invalid {\n  z-index: 2;\n}\n\n.was-validated .input-group .form-control:invalid:focus, .input-group .form-control.is-invalid:focus, .was-validated\n.input-group .form-select:invalid:focus,\n.input-group .form-select.is-invalid:focus {\n  z-index: 3;\n}\n\n.btn {\n  display: inline-block;\n  font-weight: 400;\n  line-height: 1.5;\n  color: #adafae;\n  text-align: center;\n  text-decoration: none;\n  vertical-align: middle;\n  cursor: pointer;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  user-select: none;\n  background-color: transparent;\n  border: 1px solid transparent;\n  padding: 0.375rem 1rem;\n  font-size: 1rem;\n  border-radius: 0.25rem;\n  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .btn {\n    transition: none;\n  }\n}\n\n.btn:hover {\n  color: #adafae;\n}\n\n.btn-check:focus + .btn, .btn:focus {\n  outline: 0;\n  box-shadow: 0 0 0 0.25rem rgba(42, 159, 214, 0.25);\n}\n\n.btn:disabled, .btn.disabled,\nfieldset:disabled .btn {\n  pointer-events: none;\n  opacity: 0.65;\n}\n\n.btn-primary {\n  color: #fff;\n  background-color: #2a9fd6;\n  border-color: #2a9fd6;\n}\n\n.btn-primary:hover {\n  color: #fff;\n  background-color: #2487b6;\n  border-color: #227fab;\n}\n\n.btn-check:focus + .btn-primary, .btn-primary:focus {\n  color: #fff;\n  background-color: #2487b6;\n  border-color: #227fab;\n  box-shadow: 0 0 0 0.25rem rgba(74, 173, 220, 0.5);\n}\n\n.btn-check:checked + .btn-primary,\n.btn-check:active + .btn-primary, .btn-primary:active, .btn-primary.active,\n.show > .btn-primary.dropdown-toggle {\n  color: #fff;\n  background-color: #227fab;\n  border-color: #2077a1;\n}\n\n.btn-check:checked + .btn-primary:focus,\n.btn-check:active + .btn-primary:focus, .btn-primary:active:focus, .btn-primary.active:focus,\n.show > .btn-primary.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.25rem rgba(74, 173, 220, 0.5);\n}\n\n.btn-primary:disabled, .btn-primary.disabled {\n  color: #fff;\n  background-color: #2a9fd6;\n  border-color: #2a9fd6;\n}\n\n.btn-secondary {\n  color: #fff;\n  background-color: #555;\n  border-color: #555;\n}\n\n.btn-secondary:hover {\n  color: #fff;\n  background-color: #484848;\n  border-color: #444444;\n}\n\n.btn-check:focus + .btn-secondary, .btn-secondary:focus {\n  color: #fff;\n  background-color: #484848;\n  border-color: #444444;\n  box-shadow: 0 0 0 0.25rem rgba(111, 111, 111, 0.5);\n}\n\n.btn-check:checked + .btn-secondary,\n.btn-check:active + .btn-secondary, .btn-secondary:active, .btn-secondary.active,\n.show > .btn-secondary.dropdown-toggle {\n  color: #fff;\n  background-color: #444444;\n  border-color: #404040;\n}\n\n.btn-check:checked + .btn-secondary:focus,\n.btn-check:active + .btn-secondary:focus, .btn-secondary:active:focus, .btn-secondary.active:focus,\n.show > .btn-secondary.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.25rem rgba(111, 111, 111, 0.5);\n}\n\n.btn-secondary:disabled, .btn-secondary.disabled {\n  color: #fff;\n  background-color: #555;\n  border-color: #555;\n}\n\n.btn-success {\n  color: #fff;\n  background-color: #77b300;\n  border-color: #77b300;\n}\n\n.btn-success:hover {\n  color: #fff;\n  background-color: #659800;\n  border-color: #5f8f00;\n}\n\n.btn-check:focus + .btn-success, .btn-success:focus {\n  color: #fff;\n  background-color: #659800;\n  border-color: #5f8f00;\n  box-shadow: 0 0 0 0.25rem rgba(139, 190, 38, 0.5);\n}\n\n.btn-check:checked + .btn-success,\n.btn-check:active + .btn-success, .btn-success:active, .btn-success.active,\n.show > .btn-success.dropdown-toggle {\n  color: #fff;\n  background-color: #5f8f00;\n  border-color: #598600;\n}\n\n.btn-check:checked + .btn-success:focus,\n.btn-check:active + .btn-success:focus, .btn-success:active:focus, .btn-success.active:focus,\n.show > .btn-success.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.25rem rgba(139, 190, 38, 0.5);\n}\n\n.btn-success:disabled, .btn-success.disabled {\n  color: #fff;\n  background-color: #77b300;\n  border-color: #77b300;\n}\n\n.btn-info {\n  color: #fff;\n  background-color: #93c;\n  border-color: #93c;\n}\n\n.btn-info:hover {\n  color: #fff;\n  background-color: #822bad;\n  border-color: #7a29a3;\n}\n\n.btn-check:focus + .btn-info, .btn-info:focus {\n  color: #fff;\n  background-color: #822bad;\n  border-color: #7a29a3;\n  box-shadow: 0 0 0 0.25rem rgba(168, 82, 212, 0.5);\n}\n\n.btn-check:checked + .btn-info,\n.btn-check:active + .btn-info, .btn-info:active, .btn-info.active,\n.show > .btn-info.dropdown-toggle {\n  color: #fff;\n  background-color: #7a29a3;\n  border-color: #732699;\n}\n\n.btn-check:checked + .btn-info:focus,\n.btn-check:active + .btn-info:focus, .btn-info:active:focus, .btn-info.active:focus,\n.show > .btn-info.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.25rem rgba(168, 82, 212, 0.5);\n}\n\n.btn-info:disabled, .btn-info.disabled {\n  color: #fff;\n  background-color: #93c;\n  border-color: #93c;\n}\n\n.btn-warning {\n  color: #fff;\n  background-color: #f80;\n  border-color: #f80;\n}\n\n.btn-warning:hover {\n  color: #fff;\n  background-color: #d97400;\n  border-color: #cc6d00;\n}\n\n.btn-check:focus + .btn-warning, .btn-warning:focus {\n  color: #fff;\n  background-color: #d97400;\n  border-color: #cc6d00;\n  box-shadow: 0 0 0 0.25rem rgba(255, 154, 38, 0.5);\n}\n\n.btn-check:checked + .btn-warning,\n.btn-check:active + .btn-warning, .btn-warning:active, .btn-warning.active,\n.show > .btn-warning.dropdown-toggle {\n  color: #fff;\n  background-color: #cc6d00;\n  border-color: #bf6600;\n}\n\n.btn-check:checked + .btn-warning:focus,\n.btn-check:active + .btn-warning:focus, .btn-warning:active:focus, .btn-warning.active:focus,\n.show > .btn-warning.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.25rem rgba(255, 154, 38, 0.5);\n}\n\n.btn-warning:disabled, .btn-warning.disabled {\n  color: #fff;\n  background-color: #f80;\n  border-color: #f80;\n}\n\n.btn-danger {\n  color: #fff;\n  background-color: #c00;\n  border-color: #c00;\n}\n\n.btn-danger:hover {\n  color: #fff;\n  background-color: #ad0000;\n  border-color: #a30000;\n}\n\n.btn-check:focus + .btn-danger, .btn-danger:focus {\n  color: #fff;\n  background-color: #ad0000;\n  border-color: #a30000;\n  box-shadow: 0 0 0 0.25rem rgba(212, 38, 38, 0.5);\n}\n\n.btn-check:checked + .btn-danger,\n.btn-check:active + .btn-danger, .btn-danger:active, .btn-danger.active,\n.show > .btn-danger.dropdown-toggle {\n  color: #fff;\n  background-color: #a30000;\n  border-color: #990000;\n}\n\n.btn-check:checked + .btn-danger:focus,\n.btn-check:active + .btn-danger:focus, .btn-danger:active:focus, .btn-danger.active:focus,\n.show > .btn-danger.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.25rem rgba(212, 38, 38, 0.5);\n}\n\n.btn-danger:disabled, .btn-danger.disabled {\n  color: #fff;\n  background-color: #c00;\n  border-color: #c00;\n}\n\n.btn-light {\n  color: #fff;\n  background-color: #222;\n  border-color: #222;\n}\n\n.btn-light:hover {\n  color: #fff;\n  background-color: #1d1d1d;\n  border-color: #1b1b1b;\n}\n\n.btn-check:focus + .btn-light, .btn-light:focus {\n  color: #fff;\n  background-color: #1d1d1d;\n  border-color: #1b1b1b;\n  box-shadow: 0 0 0 0.25rem rgba(67, 67, 67, 0.5);\n}\n\n.btn-check:checked + .btn-light,\n.btn-check:active + .btn-light, .btn-light:active, .btn-light.active,\n.show > .btn-light.dropdown-toggle {\n  color: #fff;\n  background-color: #1b1b1b;\n  border-color: #1a1a1a;\n}\n\n.btn-check:checked + .btn-light:focus,\n.btn-check:active + .btn-light:focus, .btn-light:active:focus, .btn-light.active:focus,\n.show > .btn-light.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.25rem rgba(67, 67, 67, 0.5);\n}\n\n.btn-light:disabled, .btn-light.disabled {\n  color: #fff;\n  background-color: #222;\n  border-color: #222;\n}\n\n.btn-dark {\n  color: #000;\n  background-color: #adafae;\n  border-color: #adafae;\n}\n\n.btn-dark:hover {\n  color: #000;\n  background-color: #b9bbba;\n  border-color: #b5b7b6;\n}\n\n.btn-check:focus + .btn-dark, .btn-dark:focus {\n  color: #000;\n  background-color: #b9bbba;\n  border-color: #b5b7b6;\n  box-shadow: 0 0 0 0.25rem rgba(147, 149, 148, 0.5);\n}\n\n.btn-check:checked + .btn-dark,\n.btn-check:active + .btn-dark, .btn-dark:active, .btn-dark.active,\n.show > .btn-dark.dropdown-toggle {\n  color: #000;\n  background-color: #bdbfbe;\n  border-color: #b5b7b6;\n}\n\n.btn-check:checked + .btn-dark:focus,\n.btn-check:active + .btn-dark:focus, .btn-dark:active:focus, .btn-dark.active:focus,\n.show > .btn-dark.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.25rem rgba(147, 149, 148, 0.5);\n}\n\n.btn-dark:disabled, .btn-dark.disabled {\n  color: #000;\n  background-color: #adafae;\n  border-color: #adafae;\n}\n\n.btn-outline-primary {\n  color: #2a9fd6;\n  border-color: #2a9fd6;\n}\n\n.btn-outline-primary:hover {\n  color: #fff;\n  background-color: #2a9fd6;\n  border-color: #2a9fd6;\n}\n\n.btn-check:focus + .btn-outline-primary, .btn-outline-primary:focus {\n  box-shadow: 0 0 0 0.25rem rgba(42, 159, 214, 0.5);\n}\n\n.btn-check:checked + .btn-outline-primary,\n.btn-check:active + .btn-outline-primary, .btn-outline-primary:active, .btn-outline-primary.active, .btn-outline-primary.dropdown-toggle.show {\n  color: #fff;\n  background-color: #2a9fd6;\n  border-color: #2a9fd6;\n}\n\n.btn-check:checked + .btn-outline-primary:focus,\n.btn-check:active + .btn-outline-primary:focus, .btn-outline-primary:active:focus, .btn-outline-primary.active:focus, .btn-outline-primary.dropdown-toggle.show:focus {\n  box-shadow: 0 0 0 0.25rem rgba(42, 159, 214, 0.5);\n}\n\n.btn-outline-primary:disabled, .btn-outline-primary.disabled {\n  color: #2a9fd6;\n  background-color: transparent;\n}\n\n.btn-outline-secondary {\n  color: #555;\n  border-color: #555;\n}\n\n.btn-outline-secondary:hover {\n  color: #fff;\n  background-color: #555;\n  border-color: #555;\n}\n\n.btn-check:focus + .btn-outline-secondary, .btn-outline-secondary:focus {\n  box-shadow: 0 0 0 0.25rem rgba(85, 85, 85, 0.5);\n}\n\n.btn-check:checked + .btn-outline-secondary,\n.btn-check:active + .btn-outline-secondary, .btn-outline-secondary:active, .btn-outline-secondary.active, .btn-outline-secondary.dropdown-toggle.show {\n  color: #fff;\n  background-color: #555;\n  border-color: #555;\n}\n\n.btn-check:checked + .btn-outline-secondary:focus,\n.btn-check:active + .btn-outline-secondary:focus, .btn-outline-secondary:active:focus, .btn-outline-secondary.active:focus, .btn-outline-secondary.dropdown-toggle.show:focus {\n  box-shadow: 0 0 0 0.25rem rgba(85, 85, 85, 0.5);\n}\n\n.btn-outline-secondary:disabled, .btn-outline-secondary.disabled {\n  color: #555;\n  background-color: transparent;\n}\n\n.btn-outline-success {\n  color: #77b300;\n  border-color: #77b300;\n}\n\n.btn-outline-success:hover {\n  color: #fff;\n  background-color: #77b300;\n  border-color: #77b300;\n}\n\n.btn-check:focus + .btn-outline-success, .btn-outline-success:focus {\n  box-shadow: 0 0 0 0.25rem rgba(119, 179, 0, 0.5);\n}\n\n.btn-check:checked + .btn-outline-success,\n.btn-check:active + .btn-outline-success, .btn-outline-success:active, .btn-outline-success.active, .btn-outline-success.dropdown-toggle.show {\n  color: #fff;\n  background-color: #77b300;\n  border-color: #77b300;\n}\n\n.btn-check:checked + .btn-outline-success:focus,\n.btn-check:active + .btn-outline-success:focus, .btn-outline-success:active:focus, .btn-outline-success.active:focus, .btn-outline-success.dropdown-toggle.show:focus {\n  box-shadow: 0 0 0 0.25rem rgba(119, 179, 0, 0.5);\n}\n\n.btn-outline-success:disabled, .btn-outline-success.disabled {\n  color: #77b300;\n  background-color: transparent;\n}\n\n.btn-outline-info {\n  color: #93c;\n  border-color: #93c;\n}\n\n.btn-outline-info:hover {\n  color: #fff;\n  background-color: #93c;\n  border-color: #93c;\n}\n\n.btn-check:focus + .btn-outline-info, .btn-outline-info:focus {\n  box-shadow: 0 0 0 0.25rem rgba(153, 51, 204, 0.5);\n}\n\n.btn-check:checked + .btn-outline-info,\n.btn-check:active + .btn-outline-info, .btn-outline-info:active, .btn-outline-info.active, .btn-outline-info.dropdown-toggle.show {\n  color: #fff;\n  background-color: #93c;\n  border-color: #93c;\n}\n\n.btn-check:checked + .btn-outline-info:focus,\n.btn-check:active + .btn-outline-info:focus, .btn-outline-info:active:focus, .btn-outline-info.active:focus, .btn-outline-info.dropdown-toggle.show:focus {\n  box-shadow: 0 0 0 0.25rem rgba(153, 51, 204, 0.5);\n}\n\n.btn-outline-info:disabled, .btn-outline-info.disabled {\n  color: #93c;\n  background-color: transparent;\n}\n\n.btn-outline-warning {\n  color: #f80;\n  border-color: #f80;\n}\n\n.btn-outline-warning:hover {\n  color: #fff;\n  background-color: #f80;\n  border-color: #f80;\n}\n\n.btn-check:focus + .btn-outline-warning, .btn-outline-warning:focus {\n  box-shadow: 0 0 0 0.25rem rgba(255, 136, 0, 0.5);\n}\n\n.btn-check:checked + .btn-outline-warning,\n.btn-check:active + .btn-outline-warning, .btn-outline-warning:active, .btn-outline-warning.active, .btn-outline-warning.dropdown-toggle.show {\n  color: #fff;\n  background-color: #f80;\n  border-color: #f80;\n}\n\n.btn-check:checked + .btn-outline-warning:focus,\n.btn-check:active + .btn-outline-warning:focus, .btn-outline-warning:active:focus, .btn-outline-warning.active:focus, .btn-outline-warning.dropdown-toggle.show:focus {\n  box-shadow: 0 0 0 0.25rem rgba(255, 136, 0, 0.5);\n}\n\n.btn-outline-warning:disabled, .btn-outline-warning.disabled {\n  color: #f80;\n  background-color: transparent;\n}\n\n.btn-outline-danger {\n  color: #c00;\n  border-color: #c00;\n}\n\n.btn-outline-danger:hover {\n  color: #fff;\n  background-color: #c00;\n  border-color: #c00;\n}\n\n.btn-check:focus + .btn-outline-danger, .btn-outline-danger:focus {\n  box-shadow: 0 0 0 0.25rem rgba(204, 0, 0, 0.5);\n}\n\n.btn-check:checked + .btn-outline-danger,\n.btn-check:active + .btn-outline-danger, .btn-outline-danger:active, .btn-outline-danger.active, .btn-outline-danger.dropdown-toggle.show {\n  color: #fff;\n  background-color: #c00;\n  border-color: #c00;\n}\n\n.btn-check:checked + .btn-outline-danger:focus,\n.btn-check:active + .btn-outline-danger:focus, .btn-outline-danger:active:focus, .btn-outline-danger.active:focus, .btn-outline-danger.dropdown-toggle.show:focus {\n  box-shadow: 0 0 0 0.25rem rgba(204, 0, 0, 0.5);\n}\n\n.btn-outline-danger:disabled, .btn-outline-danger.disabled {\n  color: #c00;\n  background-color: transparent;\n}\n\n.btn-outline-light {\n  color: #222;\n  border-color: #222;\n}\n\n.btn-outline-light:hover {\n  color: #fff;\n  background-color: #222;\n  border-color: #222;\n}\n\n.btn-check:focus + .btn-outline-light, .btn-outline-light:focus {\n  box-shadow: 0 0 0 0.25rem rgba(34, 34, 34, 0.5);\n}\n\n.btn-check:checked + .btn-outline-light,\n.btn-check:active + .btn-outline-light, .btn-outline-light:active, .btn-outline-light.active, .btn-outline-light.dropdown-toggle.show {\n  color: #fff;\n  background-color: #222;\n  border-color: #222;\n}\n\n.btn-check:checked + .btn-outline-light:focus,\n.btn-check:active + .btn-outline-light:focus, .btn-outline-light:active:focus, .btn-outline-light.active:focus, .btn-outline-light.dropdown-toggle.show:focus {\n  box-shadow: 0 0 0 0.25rem rgba(34, 34, 34, 0.5);\n}\n\n.btn-outline-light:disabled, .btn-outline-light.disabled {\n  color: #222;\n  background-color: transparent;\n}\n\n.btn-outline-dark {\n  color: #adafae;\n  border-color: #adafae;\n}\n\n.btn-outline-dark:hover {\n  color: #000;\n  background-color: #adafae;\n  border-color: #adafae;\n}\n\n.btn-check:focus + .btn-outline-dark, .btn-outline-dark:focus {\n  box-shadow: 0 0 0 0.25rem rgba(173, 175, 174, 0.5);\n}\n\n.btn-check:checked + .btn-outline-dark,\n.btn-check:active + .btn-outline-dark, .btn-outline-dark:active, .btn-outline-dark.active, .btn-outline-dark.dropdown-toggle.show {\n  color: #000;\n  background-color: #adafae;\n  border-color: #adafae;\n}\n\n.btn-check:checked + .btn-outline-dark:focus,\n.btn-check:active + .btn-outline-dark:focus, .btn-outline-dark:active:focus, .btn-outline-dark.active:focus, .btn-outline-dark.dropdown-toggle.show:focus {\n  box-shadow: 0 0 0 0.25rem rgba(173, 175, 174, 0.5);\n}\n\n.btn-outline-dark:disabled, .btn-outline-dark.disabled {\n  color: #adafae;\n  background-color: transparent;\n}\n\n.btn-link {\n  font-weight: 400;\n  color: #2a9fd6;\n  text-decoration: underline;\n}\n\n.btn-link:hover {\n  color: #227fab;\n}\n\n.btn-link:disabled, .btn-link.disabled {\n  color: #555;\n}\n\n.btn-lg, .btn-group-lg > .btn {\n  padding: 0.5rem 1rem;\n  font-size: 1.25rem;\n  border-radius: 0.3rem;\n}\n\n.btn-sm, .btn-group-sm > .btn {\n  padding: 0.25rem 0.5rem;\n  font-size: 0.875rem;\n  border-radius: 0.2rem;\n}\n\n.fade {\n  transition: opacity 0.15s linear;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .fade {\n    transition: none;\n  }\n}\n\n.fade:not(.show) {\n  opacity: 0;\n}\n\n.collapse:not(.show) {\n  display: none;\n}\n\n.collapsing {\n  height: 0;\n  overflow: hidden;\n  transition: height 0.35s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .collapsing {\n    transition: none;\n  }\n}\n\n.collapsing.collapse-horizontal {\n  width: 0;\n  height: auto;\n  transition: width 0.35s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .collapsing.collapse-horizontal {\n    transition: none;\n  }\n}\n\n.dropup,\n.dropend,\n.dropdown,\n.dropstart {\n  position: relative;\n}\n\n.dropdown-toggle {\n  white-space: nowrap;\n}\n\n.dropdown-toggle::after {\n  display: inline-block;\n  margin-left: 0.255em;\n  vertical-align: 0.255em;\n  content: \"\";\n  border-top: 0.3em solid;\n  border-right: 0.3em solid transparent;\n  border-bottom: 0;\n  border-left: 0.3em solid transparent;\n}\n\n.dropdown-toggle:empty::after {\n  margin-left: 0;\n}\n\n.dropdown-menu {\n  position: absolute;\n  z-index: 1000;\n  display: none;\n  min-width: 10rem;\n  padding: 0.5rem 0;\n  margin: 0;\n  font-size: 1rem;\n  color: #adafae;\n  text-align: left;\n  list-style: none;\n  background-color: #282828;\n  background-clip: padding-box;\n  border: 1px solid rgba(0, 0, 0, 0.15);\n  border-radius: 0.25rem;\n}\n\n.dropdown-menu[data-bs-popper] {\n  top: 100%;\n  left: 0;\n  margin-top: 0.125rem;\n}\n\n.dropdown-menu-start {\n  --bs-position: start;\n}\n\n.dropdown-menu-start[data-bs-popper] {\n  right: auto;\n  left: 0;\n}\n\n.dropdown-menu-end {\n  --bs-position: end;\n}\n\n.dropdown-menu-end[data-bs-popper] {\n  right: 0;\n  left: auto;\n}\n\n@media (min-width: 576px) {\n  .dropdown-menu-sm-start {\n    --bs-position: start;\n  }\n  .dropdown-menu-sm-start[data-bs-popper] {\n    right: auto;\n    left: 0;\n  }\n  .dropdown-menu-sm-end {\n    --bs-position: end;\n  }\n  .dropdown-menu-sm-end[data-bs-popper] {\n    right: 0;\n    left: auto;\n  }\n}\n\n@media (min-width: 768px) {\n  .dropdown-menu-md-start {\n    --bs-position: start;\n  }\n  .dropdown-menu-md-start[data-bs-popper] {\n    right: auto;\n    left: 0;\n  }\n  .dropdown-menu-md-end {\n    --bs-position: end;\n  }\n  .dropdown-menu-md-end[data-bs-popper] {\n    right: 0;\n    left: auto;\n  }\n}\n\n@media (min-width: 992px) {\n  .dropdown-menu-lg-start {\n    --bs-position: start;\n  }\n  .dropdown-menu-lg-start[data-bs-popper] {\n    right: auto;\n    left: 0;\n  }\n  .dropdown-menu-lg-end {\n    --bs-position: end;\n  }\n  .dropdown-menu-lg-end[data-bs-popper] {\n    right: 0;\n    left: auto;\n  }\n}\n\n@media (min-width: 1200px) {\n  .dropdown-menu-xl-start {\n    --bs-position: start;\n  }\n  .dropdown-menu-xl-start[data-bs-popper] {\n    right: auto;\n    left: 0;\n  }\n  .dropdown-menu-xl-end {\n    --bs-position: end;\n  }\n  .dropdown-menu-xl-end[data-bs-popper] {\n    right: 0;\n    left: auto;\n  }\n}\n\n@media (min-width: 1400px) {\n  .dropdown-menu-xxl-start {\n    --bs-position: start;\n  }\n  .dropdown-menu-xxl-start[data-bs-popper] {\n    right: auto;\n    left: 0;\n  }\n  .dropdown-menu-xxl-end {\n    --bs-position: end;\n  }\n  .dropdown-menu-xxl-end[data-bs-popper] {\n    right: 0;\n    left: auto;\n  }\n}\n\n.dropup .dropdown-menu[data-bs-popper] {\n  top: auto;\n  bottom: 100%;\n  margin-top: 0;\n  margin-bottom: 0.125rem;\n}\n\n.dropup .dropdown-toggle::after {\n  display: inline-block;\n  margin-left: 0.255em;\n  vertical-align: 0.255em;\n  content: \"\";\n  border-top: 0;\n  border-right: 0.3em solid transparent;\n  border-bottom: 0.3em solid;\n  border-left: 0.3em solid transparent;\n}\n\n.dropup .dropdown-toggle:empty::after {\n  margin-left: 0;\n}\n\n.dropend .dropdown-menu[data-bs-popper] {\n  top: 0;\n  right: auto;\n  left: 100%;\n  margin-top: 0;\n  margin-left: 0.125rem;\n}\n\n.dropend .dropdown-toggle::after {\n  display: inline-block;\n  margin-left: 0.255em;\n  vertical-align: 0.255em;\n  content: \"\";\n  border-top: 0.3em solid transparent;\n  border-right: 0;\n  border-bottom: 0.3em solid transparent;\n  border-left: 0.3em solid;\n}\n\n.dropend .dropdown-toggle:empty::after {\n  margin-left: 0;\n}\n\n.dropend .dropdown-toggle::after {\n  vertical-align: 0;\n}\n\n.dropstart .dropdown-menu[data-bs-popper] {\n  top: 0;\n  right: 100%;\n  left: auto;\n  margin-top: 0;\n  margin-right: 0.125rem;\n}\n\n.dropstart .dropdown-toggle::after {\n  display: inline-block;\n  margin-left: 0.255em;\n  vertical-align: 0.255em;\n  content: \"\";\n}\n\n.dropstart .dropdown-toggle::after {\n  display: none;\n}\n\n.dropstart .dropdown-toggle::before {\n  display: inline-block;\n  margin-right: 0.255em;\n  vertical-align: 0.255em;\n  content: \"\";\n  border-top: 0.3em solid transparent;\n  border-right: 0.3em solid;\n  border-bottom: 0.3em solid transparent;\n}\n\n.dropstart .dropdown-toggle:empty::after {\n  margin-left: 0;\n}\n\n.dropstart .dropdown-toggle::before {\n  vertical-align: 0;\n}\n\n.dropdown-divider {\n  height: 0;\n  margin: 0.5rem 0;\n  overflow: hidden;\n  border-top: 1px solid #222;\n}\n\n.dropdown-item {\n  display: block;\n  width: 100%;\n  padding: 0.25rem 1rem;\n  clear: both;\n  font-weight: 400;\n  color: #fff;\n  text-align: inherit;\n  text-decoration: none;\n  white-space: nowrap;\n  background-color: transparent;\n  border: 0;\n}\n\n.dropdown-item:hover, .dropdown-item:focus {\n  color: #fff;\n  background-color: #2a9fd6;\n}\n\n.dropdown-item.active, .dropdown-item:active {\n  color: #fff;\n  text-decoration: none;\n  background-color: #2a9fd6;\n}\n\n.dropdown-item.disabled, .dropdown-item:disabled {\n  color: #888;\n  pointer-events: none;\n  background-color: transparent;\n}\n\n.dropdown-menu.show {\n  display: block;\n}\n\n.dropdown-header {\n  display: block;\n  padding: 0.5rem 1rem;\n  margin-bottom: 0;\n  font-size: 0.875rem;\n  color: #555;\n  white-space: nowrap;\n}\n\n.dropdown-item-text {\n  display: block;\n  padding: 0.25rem 1rem;\n  color: #fff;\n}\n\n.dropdown-menu-dark {\n  color: #dee2e6;\n  background-color: #222;\n  border-color: rgba(0, 0, 0, 0.15);\n}\n\n.dropdown-menu-dark .dropdown-item {\n  color: #dee2e6;\n}\n\n.dropdown-menu-dark .dropdown-item:hover, .dropdown-menu-dark .dropdown-item:focus {\n  color: #fff;\n  background-color: rgba(255, 255, 255, 0.15);\n}\n\n.dropdown-menu-dark .dropdown-item.active, .dropdown-menu-dark .dropdown-item:active {\n  color: #fff;\n  background-color: #2a9fd6;\n}\n\n.dropdown-menu-dark .dropdown-item.disabled, .dropdown-menu-dark .dropdown-item:disabled {\n  color: #888;\n}\n\n.dropdown-menu-dark .dropdown-divider {\n  border-color: #222;\n}\n\n.dropdown-menu-dark .dropdown-item-text {\n  color: #dee2e6;\n}\n\n.dropdown-menu-dark .dropdown-header {\n  color: #888;\n}\n\n.btn-group,\n.btn-group-vertical {\n  position: relative;\n  display: -ms-inline-flexbox;\n  display: inline-flex;\n  vertical-align: middle;\n}\n\n.btn-group > .btn,\n.btn-group-vertical > .btn {\n  position: relative;\n  -ms-flex: 1 1 auto;\n  flex: 1 1 auto;\n}\n\n.btn-group > .btn-check:checked + .btn,\n.btn-group > .btn-check:focus + .btn,\n.btn-group > .btn:hover,\n.btn-group > .btn:focus,\n.btn-group > .btn:active,\n.btn-group > .btn.active,\n.btn-group-vertical > .btn-check:checked + .btn,\n.btn-group-vertical > .btn-check:focus + .btn,\n.btn-group-vertical > .btn:hover,\n.btn-group-vertical > .btn:focus,\n.btn-group-vertical > .btn:active,\n.btn-group-vertical > .btn.active {\n  z-index: 1;\n}\n\n.btn-toolbar {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n  flex-wrap: wrap;\n  -ms-flex-pack: start;\n  justify-content: flex-start;\n}\n\n.btn-toolbar .input-group {\n  width: auto;\n}\n\n.btn-group > .btn:not(:first-child),\n.btn-group > .btn-group:not(:first-child) {\n  margin-left: -1px;\n}\n\n.btn-group > .btn:not(:last-child):not(.dropdown-toggle),\n.btn-group > .btn-group:not(:last-child) > .btn {\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n}\n\n.btn-group > .btn:nth-child(n + 3),\n.btn-group > :not(.btn-check) + .btn,\n.btn-group > .btn-group:not(:first-child) > .btn {\n  border-top-left-radius: 0;\n  border-bottom-left-radius: 0;\n}\n\n.dropdown-toggle-split {\n  padding-right: 0.75rem;\n  padding-left: 0.75rem;\n}\n\n.dropdown-toggle-split::after,\n.dropup .dropdown-toggle-split::after,\n.dropend .dropdown-toggle-split::after {\n  margin-left: 0;\n}\n\n.dropstart .dropdown-toggle-split::before {\n  margin-right: 0;\n}\n\n.btn-sm + .dropdown-toggle-split, .btn-group-sm > .btn + .dropdown-toggle-split {\n  padding-right: 0.375rem;\n  padding-left: 0.375rem;\n}\n\n.btn-lg + .dropdown-toggle-split, .btn-group-lg > .btn + .dropdown-toggle-split {\n  padding-right: 0.75rem;\n  padding-left: 0.75rem;\n}\n\n.btn-group-vertical {\n  -ms-flex-direction: column;\n  flex-direction: column;\n  -ms-flex-align: start;\n  align-items: flex-start;\n  -ms-flex-pack: center;\n  justify-content: center;\n}\n\n.btn-group-vertical > .btn,\n.btn-group-vertical > .btn-group {\n  width: 100%;\n}\n\n.btn-group-vertical > .btn:not(:first-child),\n.btn-group-vertical > .btn-group:not(:first-child) {\n  margin-top: -1px;\n}\n\n.btn-group-vertical > .btn:not(:last-child):not(.dropdown-toggle),\n.btn-group-vertical > .btn-group:not(:last-child) > .btn {\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 0;\n}\n\n.btn-group-vertical > .btn ~ .btn,\n.btn-group-vertical > .btn-group:not(:first-child) > .btn {\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n}\n\n.nav {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n  flex-wrap: wrap;\n  padding-left: 0;\n  margin-bottom: 0;\n  list-style: none;\n}\n\n.nav-link {\n  display: block;\n  padding: 0.5rem 1rem;\n  color: #2a9fd6;\n  text-decoration: none;\n  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .nav-link {\n    transition: none;\n  }\n}\n\n.nav-link:hover, .nav-link:focus {\n  color: #227fab;\n}\n\n.nav-link.disabled {\n  color: #555;\n  pointer-events: none;\n  cursor: default;\n}\n\n.nav-tabs {\n  border-bottom: 1px solid #282828;\n}\n\n.nav-tabs .nav-link {\n  margin-bottom: -1px;\n  background: none;\n  border: 1px solid transparent;\n  border-top-left-radius: 0.25rem;\n  border-top-right-radius: 0.25rem;\n}\n\n.nav-tabs .nav-link:hover, .nav-tabs .nav-link:focus {\n  border-color: #282828;\n  isolation: isolate;\n}\n\n.nav-tabs .nav-link.disabled {\n  color: #555;\n  background-color: transparent;\n  border-color: transparent;\n}\n\n.nav-tabs .nav-link.active,\n.nav-tabs .nav-item.show .nav-link {\n  color: #fff;\n  background-color: #282828;\n  border-color: #282828;\n}\n\n.nav-tabs .dropdown-menu {\n  margin-top: -1px;\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n}\n\n.nav-pills .nav-link {\n  background: none;\n  border: 0;\n  border-radius: 0.25rem;\n}\n\n.nav-pills .nav-link.active,\n.nav-pills .show > .nav-link {\n  color: #fff;\n  background-color: #2a9fd6;\n}\n\n.nav-fill > .nav-link,\n.nav-fill .nav-item {\n  -ms-flex: 1 1 auto;\n  flex: 1 1 auto;\n  text-align: center;\n}\n\n.nav-justified > .nav-link,\n.nav-justified .nav-item {\n  -ms-flex-preferred-size: 0;\n  flex-basis: 0;\n  -ms-flex-positive: 1;\n  flex-grow: 1;\n  text-align: center;\n}\n\n.nav-fill .nav-item .nav-link,\n.nav-justified .nav-item .nav-link {\n  width: 100%;\n}\n\n.tab-content > .tab-pane {\n  display: none;\n}\n\n.tab-content > .active {\n  display: block;\n}\n\n.navbar {\n  position: relative;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n  flex-wrap: wrap;\n  -ms-flex-align: center;\n  align-items: center;\n  -ms-flex-pack: justify;\n  justify-content: space-between;\n  padding-top: 0.5rem;\n  padding-bottom: 0.5rem;\n}\n\n.navbar > .container,\n.navbar > .container-fluid, .navbar > .container-sm, .navbar > .container-md, .navbar > .container-lg, .navbar > .container-xl, .navbar > .container-xxl {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: inherit;\n  flex-wrap: inherit;\n  -ms-flex-align: center;\n  align-items: center;\n  -ms-flex-pack: justify;\n  justify-content: space-between;\n}\n\n.navbar-brand {\n  padding-top: 0.3125rem;\n  padding-bottom: 0.3125rem;\n  margin-right: 1rem;\n  font-size: 1.25rem;\n  text-decoration: none;\n  white-space: nowrap;\n}\n\n.navbar-nav {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  padding-left: 0;\n  margin-bottom: 0;\n  list-style: none;\n}\n\n.navbar-nav .nav-link {\n  padding-right: 0;\n  padding-left: 0;\n}\n\n.navbar-nav .dropdown-menu {\n  position: static;\n}\n\n.navbar-text {\n  padding-top: 0.5rem;\n  padding-bottom: 0.5rem;\n}\n\n.navbar-collapse {\n  -ms-flex-preferred-size: 100%;\n  flex-basis: 100%;\n  -ms-flex-positive: 1;\n  flex-grow: 1;\n  -ms-flex-align: center;\n  align-items: center;\n}\n\n.navbar-toggler {\n  padding: 0.25rem 0.75rem;\n  font-size: 1.25rem;\n  line-height: 1;\n  background-color: transparent;\n  border: 1px solid transparent;\n  border-radius: 0.25rem;\n  transition: box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .navbar-toggler {\n    transition: none;\n  }\n}\n\n.navbar-toggler:hover {\n  text-decoration: none;\n}\n\n.navbar-toggler:focus {\n  text-decoration: none;\n  outline: 0;\n  box-shadow: 0 0 0 0.25rem;\n}\n\n.navbar-toggler-icon {\n  display: inline-block;\n  width: 1.5em;\n  height: 1.5em;\n  vertical-align: middle;\n  background-repeat: no-repeat;\n  background-position: center;\n  background-size: 100%;\n}\n\n.navbar-nav-scroll {\n  max-height: var(--bs-scroll-height, 75vh);\n  overflow-y: auto;\n}\n\n@media (min-width: 576px) {\n  .navbar-expand-sm {\n    -ms-flex-wrap: nowrap;\n    flex-wrap: nowrap;\n    -ms-flex-pack: start;\n    justify-content: flex-start;\n  }\n  .navbar-expand-sm .navbar-nav {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .navbar-expand-sm .navbar-nav .dropdown-menu {\n    position: absolute;\n  }\n  .navbar-expand-sm .navbar-nav .nav-link {\n    padding-right: 0.5rem;\n    padding-left: 0.5rem;\n  }\n  .navbar-expand-sm .navbar-nav-scroll {\n    overflow: visible;\n  }\n  .navbar-expand-sm .navbar-collapse {\n    display: -ms-flexbox !important;\n    display: flex !important;\n    -ms-flex-preferred-size: auto;\n    flex-basis: auto;\n  }\n  .navbar-expand-sm .navbar-toggler {\n    display: none;\n  }\n  .navbar-expand-sm .offcanvas-header {\n    display: none;\n  }\n  .navbar-expand-sm .offcanvas {\n    position: inherit;\n    bottom: 0;\n    z-index: 1000;\n    -ms-flex-positive: 1;\n    flex-grow: 1;\n    visibility: visible !important;\n    background-color: transparent;\n    border-right: 0;\n    border-left: 0;\n    transition: none;\n    -webkit-transform: none;\n    transform: none;\n  }\n  .navbar-expand-sm .offcanvas-top,\n  .navbar-expand-sm .offcanvas-bottom {\n    height: auto;\n    border-top: 0;\n    border-bottom: 0;\n  }\n  .navbar-expand-sm .offcanvas-body {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-positive: 0;\n    flex-grow: 0;\n    padding: 0;\n    overflow-y: visible;\n  }\n}\n\n@media (min-width: 768px) {\n  .navbar-expand-md {\n    -ms-flex-wrap: nowrap;\n    flex-wrap: nowrap;\n    -ms-flex-pack: start;\n    justify-content: flex-start;\n  }\n  .navbar-expand-md .navbar-nav {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .navbar-expand-md .navbar-nav .dropdown-menu {\n    position: absolute;\n  }\n  .navbar-expand-md .navbar-nav .nav-link {\n    padding-right: 0.5rem;\n    padding-left: 0.5rem;\n  }\n  .navbar-expand-md .navbar-nav-scroll {\n    overflow: visible;\n  }\n  .navbar-expand-md .navbar-collapse {\n    display: -ms-flexbox !important;\n    display: flex !important;\n    -ms-flex-preferred-size: auto;\n    flex-basis: auto;\n  }\n  .navbar-expand-md .navbar-toggler {\n    display: none;\n  }\n  .navbar-expand-md .offcanvas-header {\n    display: none;\n  }\n  .navbar-expand-md .offcanvas {\n    position: inherit;\n    bottom: 0;\n    z-index: 1000;\n    -ms-flex-positive: 1;\n    flex-grow: 1;\n    visibility: visible !important;\n    background-color: transparent;\n    border-right: 0;\n    border-left: 0;\n    transition: none;\n    -webkit-transform: none;\n    transform: none;\n  }\n  .navbar-expand-md .offcanvas-top,\n  .navbar-expand-md .offcanvas-bottom {\n    height: auto;\n    border-top: 0;\n    border-bottom: 0;\n  }\n  .navbar-expand-md .offcanvas-body {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-positive: 0;\n    flex-grow: 0;\n    padding: 0;\n    overflow-y: visible;\n  }\n}\n\n@media (min-width: 992px) {\n  .navbar-expand-lg {\n    -ms-flex-wrap: nowrap;\n    flex-wrap: nowrap;\n    -ms-flex-pack: start;\n    justify-content: flex-start;\n  }\n  .navbar-expand-lg .navbar-nav {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .navbar-expand-lg .navbar-nav .dropdown-menu {\n    position: absolute;\n  }\n  .navbar-expand-lg .navbar-nav .nav-link {\n    padding-right: 0.5rem;\n    padding-left: 0.5rem;\n  }\n  .navbar-expand-lg .navbar-nav-scroll {\n    overflow: visible;\n  }\n  .navbar-expand-lg .navbar-collapse {\n    display: -ms-flexbox !important;\n    display: flex !important;\n    -ms-flex-preferred-size: auto;\n    flex-basis: auto;\n  }\n  .navbar-expand-lg .navbar-toggler {\n    display: none;\n  }\n  .navbar-expand-lg .offcanvas-header {\n    display: none;\n  }\n  .navbar-expand-lg .offcanvas {\n    position: inherit;\n    bottom: 0;\n    z-index: 1000;\n    -ms-flex-positive: 1;\n    flex-grow: 1;\n    visibility: visible !important;\n    background-color: transparent;\n    border-right: 0;\n    border-left: 0;\n    transition: none;\n    -webkit-transform: none;\n    transform: none;\n  }\n  .navbar-expand-lg .offcanvas-top,\n  .navbar-expand-lg .offcanvas-bottom {\n    height: auto;\n    border-top: 0;\n    border-bottom: 0;\n  }\n  .navbar-expand-lg .offcanvas-body {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-positive: 0;\n    flex-grow: 0;\n    padding: 0;\n    overflow-y: visible;\n  }\n}\n\n@media (min-width: 1200px) {\n  .navbar-expand-xl {\n    -ms-flex-wrap: nowrap;\n    flex-wrap: nowrap;\n    -ms-flex-pack: start;\n    justify-content: flex-start;\n  }\n  .navbar-expand-xl .navbar-nav {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .navbar-expand-xl .navbar-nav .dropdown-menu {\n    position: absolute;\n  }\n  .navbar-expand-xl .navbar-nav .nav-link {\n    padding-right: 0.5rem;\n    padding-left: 0.5rem;\n  }\n  .navbar-expand-xl .navbar-nav-scroll {\n    overflow: visible;\n  }\n  .navbar-expand-xl .navbar-collapse {\n    display: -ms-flexbox !important;\n    display: flex !important;\n    -ms-flex-preferred-size: auto;\n    flex-basis: auto;\n  }\n  .navbar-expand-xl .navbar-toggler {\n    display: none;\n  }\n  .navbar-expand-xl .offcanvas-header {\n    display: none;\n  }\n  .navbar-expand-xl .offcanvas {\n    position: inherit;\n    bottom: 0;\n    z-index: 1000;\n    -ms-flex-positive: 1;\n    flex-grow: 1;\n    visibility: visible !important;\n    background-color: transparent;\n    border-right: 0;\n    border-left: 0;\n    transition: none;\n    -webkit-transform: none;\n    transform: none;\n  }\n  .navbar-expand-xl .offcanvas-top,\n  .navbar-expand-xl .offcanvas-bottom {\n    height: auto;\n    border-top: 0;\n    border-bottom: 0;\n  }\n  .navbar-expand-xl .offcanvas-body {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-positive: 0;\n    flex-grow: 0;\n    padding: 0;\n    overflow-y: visible;\n  }\n}\n\n@media (min-width: 1400px) {\n  .navbar-expand-xxl {\n    -ms-flex-wrap: nowrap;\n    flex-wrap: nowrap;\n    -ms-flex-pack: start;\n    justify-content: flex-start;\n  }\n  .navbar-expand-xxl .navbar-nav {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .navbar-expand-xxl .navbar-nav .dropdown-menu {\n    position: absolute;\n  }\n  .navbar-expand-xxl .navbar-nav .nav-link {\n    padding-right: 0.5rem;\n    padding-left: 0.5rem;\n  }\n  .navbar-expand-xxl .navbar-nav-scroll {\n    overflow: visible;\n  }\n  .navbar-expand-xxl .navbar-collapse {\n    display: -ms-flexbox !important;\n    display: flex !important;\n    -ms-flex-preferred-size: auto;\n    flex-basis: auto;\n  }\n  .navbar-expand-xxl .navbar-toggler {\n    display: none;\n  }\n  .navbar-expand-xxl .offcanvas-header {\n    display: none;\n  }\n  .navbar-expand-xxl .offcanvas {\n    position: inherit;\n    bottom: 0;\n    z-index: 1000;\n    -ms-flex-positive: 1;\n    flex-grow: 1;\n    visibility: visible !important;\n    background-color: transparent;\n    border-right: 0;\n    border-left: 0;\n    transition: none;\n    -webkit-transform: none;\n    transform: none;\n  }\n  .navbar-expand-xxl .offcanvas-top,\n  .navbar-expand-xxl .offcanvas-bottom {\n    height: auto;\n    border-top: 0;\n    border-bottom: 0;\n  }\n  .navbar-expand-xxl .offcanvas-body {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-positive: 0;\n    flex-grow: 0;\n    padding: 0;\n    overflow-y: visible;\n  }\n}\n\n.navbar-expand {\n  -ms-flex-wrap: nowrap;\n  flex-wrap: nowrap;\n  -ms-flex-pack: start;\n  justify-content: flex-start;\n}\n\n.navbar-expand .navbar-nav {\n  -ms-flex-direction: row;\n  flex-direction: row;\n}\n\n.navbar-expand .navbar-nav .dropdown-menu {\n  position: absolute;\n}\n\n.navbar-expand .navbar-nav .nav-link {\n  padding-right: 0.5rem;\n  padding-left: 0.5rem;\n}\n\n.navbar-expand .navbar-nav-scroll {\n  overflow: visible;\n}\n\n.navbar-expand .navbar-collapse {\n  display: -ms-flexbox !important;\n  display: flex !important;\n  -ms-flex-preferred-size: auto;\n  flex-basis: auto;\n}\n\n.navbar-expand .navbar-toggler {\n  display: none;\n}\n\n.navbar-expand .offcanvas-header {\n  display: none;\n}\n\n.navbar-expand .offcanvas {\n  position: inherit;\n  bottom: 0;\n  z-index: 1000;\n  -ms-flex-positive: 1;\n  flex-grow: 1;\n  visibility: visible !important;\n  background-color: transparent;\n  border-right: 0;\n  border-left: 0;\n  transition: none;\n  -webkit-transform: none;\n  transform: none;\n}\n\n.navbar-expand .offcanvas-top,\n.navbar-expand .offcanvas-bottom {\n  height: auto;\n  border-top: 0;\n  border-bottom: 0;\n}\n\n.navbar-expand .offcanvas-body {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-positive: 0;\n  flex-grow: 0;\n  padding: 0;\n  overflow-y: visible;\n}\n\n.navbar-light .navbar-brand {\n  color: rgba(0, 0, 0, 0.9);\n}\n\n.navbar-light .navbar-brand:hover, .navbar-light .navbar-brand:focus {\n  color: rgba(0, 0, 0, 0.9);\n}\n\n.navbar-light .navbar-nav .nav-link {\n  color: rgba(0, 0, 0, 0.55);\n}\n\n.navbar-light .navbar-nav .nav-link:hover, .navbar-light .navbar-nav .nav-link:focus {\n  color: rgba(0, 0, 0, 0.7);\n}\n\n.navbar-light .navbar-nav .nav-link.disabled {\n  color: rgba(0, 0, 0, 0.3);\n}\n\n.navbar-light .navbar-nav .show > .nav-link,\n.navbar-light .navbar-nav .nav-link.active {\n  color: rgba(0, 0, 0, 0.9);\n}\n\n.navbar-light .navbar-toggler {\n  color: rgba(0, 0, 0, 0.55);\n  border-color: rgba(0, 0, 0, 0.1);\n}\n\n.navbar-light .navbar-toggler-icon {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%280, 0, 0, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e\");\n}\n\n.navbar-light .navbar-text {\n  color: rgba(0, 0, 0, 0.55);\n}\n\n.navbar-light .navbar-text a,\n.navbar-light .navbar-text a:hover,\n.navbar-light .navbar-text a:focus {\n  color: rgba(0, 0, 0, 0.9);\n}\n\n.navbar-dark .navbar-brand {\n  color: #fff;\n}\n\n.navbar-dark .navbar-brand:hover, .navbar-dark .navbar-brand:focus {\n  color: #fff;\n}\n\n.navbar-dark .navbar-nav .nav-link {\n  color: rgba(255, 255, 255, 0.55);\n}\n\n.navbar-dark .navbar-nav .nav-link:hover, .navbar-dark .navbar-nav .nav-link:focus {\n  color: #fff;\n}\n\n.navbar-dark .navbar-nav .nav-link.disabled {\n  color: rgba(255, 255, 255, 0.25);\n}\n\n.navbar-dark .navbar-nav .show > .nav-link,\n.navbar-dark .navbar-nav .nav-link.active {\n  color: #fff;\n}\n\n.navbar-dark .navbar-toggler {\n  color: rgba(255, 255, 255, 0.55);\n  border-color: rgba(255, 255, 255, 0.1);\n}\n\n.navbar-dark .navbar-toggler-icon {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e\");\n}\n\n.navbar-dark .navbar-text {\n  color: rgba(255, 255, 255, 0.55);\n}\n\n.navbar-dark .navbar-text a,\n.navbar-dark .navbar-text a:hover,\n.navbar-dark .navbar-text a:focus {\n  color: #fff;\n}\n\n.card {\n  position: relative;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  min-width: 0;\n  word-wrap: break-word;\n  background-color: #282828;\n  background-clip: border-box;\n  border: 1px solid rgba(0, 0, 0, 0.125);\n  border-radius: 0.25rem;\n}\n\n.card > hr {\n  margin-right: 0;\n  margin-left: 0;\n}\n\n.card > .list-group {\n  border-top: inherit;\n  border-bottom: inherit;\n}\n\n.card > .list-group:first-child {\n  border-top-width: 0;\n  border-top-left-radius: calc(0.25rem - 1px);\n  border-top-right-radius: calc(0.25rem - 1px);\n}\n\n.card > .list-group:last-child {\n  border-bottom-width: 0;\n  border-bottom-right-radius: calc(0.25rem - 1px);\n  border-bottom-left-radius: calc(0.25rem - 1px);\n}\n\n.card > .card-header + .list-group,\n.card > .list-group + .card-footer {\n  border-top: 0;\n}\n\n.card-body {\n  -ms-flex: 1 1 auto;\n  flex: 1 1 auto;\n  padding: 1rem 1rem;\n}\n\n.card-title {\n  margin-bottom: 0.5rem;\n}\n\n.card-subtitle {\n  margin-top: -0.25rem;\n  margin-bottom: 0;\n}\n\n.card-text:last-child {\n  margin-bottom: 0;\n}\n\n.card-link + .card-link {\n  margin-left: 1rem;\n}\n\n.card-header {\n  padding: 0.5rem 1rem;\n  margin-bottom: 0;\n  background-color: rgba(0, 0, 0, 0.03);\n  border-bottom: 1px solid rgba(0, 0, 0, 0.125);\n}\n\n.card-header:first-child {\n  border-radius: calc(0.25rem - 1px) calc(0.25rem - 1px) 0 0;\n}\n\n.card-footer {\n  padding: 0.5rem 1rem;\n  background-color: rgba(0, 0, 0, 0.03);\n  border-top: 1px solid rgba(0, 0, 0, 0.125);\n}\n\n.card-footer:last-child {\n  border-radius: 0 0 calc(0.25rem - 1px) calc(0.25rem - 1px);\n}\n\n.card-header-tabs {\n  margin-right: -0.5rem;\n  margin-bottom: -0.5rem;\n  margin-left: -0.5rem;\n  border-bottom: 0;\n}\n\n.card-header-pills {\n  margin-right: -0.5rem;\n  margin-left: -0.5rem;\n}\n\n.card-img-overlay {\n  position: absolute;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  padding: 1rem;\n  border-radius: calc(0.25rem - 1px);\n}\n\n.card-img,\n.card-img-top,\n.card-img-bottom {\n  width: 100%;\n}\n\n.card-img,\n.card-img-top {\n  border-top-left-radius: calc(0.25rem - 1px);\n  border-top-right-radius: calc(0.25rem - 1px);\n}\n\n.card-img,\n.card-img-bottom {\n  border-bottom-right-radius: calc(0.25rem - 1px);\n  border-bottom-left-radius: calc(0.25rem - 1px);\n}\n\n.card-group > .card {\n  margin-bottom: 0.75rem;\n}\n\n@media (min-width: 576px) {\n  .card-group {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-flow: row wrap;\n    flex-flow: row wrap;\n  }\n  .card-group > .card {\n    -ms-flex: 1 0 0%;\n    flex: 1 0 0%;\n    margin-bottom: 0;\n  }\n  .card-group > .card + .card {\n    margin-left: 0;\n    border-left: 0;\n  }\n  .card-group > .card:not(:last-child) {\n    border-top-right-radius: 0;\n    border-bottom-right-radius: 0;\n  }\n  .card-group > .card:not(:last-child) .card-img-top,\n  .card-group > .card:not(:last-child) .card-header {\n    border-top-right-radius: 0;\n  }\n  .card-group > .card:not(:last-child) .card-img-bottom,\n  .card-group > .card:not(:last-child) .card-footer {\n    border-bottom-right-radius: 0;\n  }\n  .card-group > .card:not(:first-child) {\n    border-top-left-radius: 0;\n    border-bottom-left-radius: 0;\n  }\n  .card-group > .card:not(:first-child) .card-img-top,\n  .card-group > .card:not(:first-child) .card-header {\n    border-top-left-radius: 0;\n  }\n  .card-group > .card:not(:first-child) .card-img-bottom,\n  .card-group > .card:not(:first-child) .card-footer {\n    border-bottom-left-radius: 0;\n  }\n}\n\n.accordion-button {\n  position: relative;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-align: center;\n  align-items: center;\n  width: 100%;\n  padding: 1rem 1.25rem;\n  font-size: 1rem;\n  color: #adafae;\n  text-align: left;\n  background-color: #060606;\n  border: 0;\n  border-radius: 0;\n  overflow-anchor: none;\n  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, border-radius 0.15s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .accordion-button {\n    transition: none;\n  }\n}\n\n.accordion-button:not(.collapsed) {\n  color: #268fc1;\n  background-color: #eaf5fb;\n  box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.125);\n}\n\n.accordion-button:not(.collapsed)::after {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23268fc1'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e\");\n  -webkit-transform: rotate(-180deg);\n  transform: rotate(-180deg);\n}\n\n.accordion-button::after {\n  -ms-flex-negative: 0;\n  flex-shrink: 0;\n  width: 1.25rem;\n  height: 1.25rem;\n  margin-left: auto;\n  content: \"\";\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23adafae'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e\");\n  background-repeat: no-repeat;\n  background-size: 1.25rem;\n  transition: -webkit-transform 0.2s ease-in-out;\n  transition: transform 0.2s ease-in-out;\n  transition: transform 0.2s ease-in-out, -webkit-transform 0.2s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .accordion-button::after {\n    transition: none;\n  }\n}\n\n.accordion-button:hover {\n  z-index: 2;\n}\n\n.accordion-button:focus {\n  z-index: 3;\n  border-color: #95cfeb;\n  outline: 0;\n  box-shadow: 0 0 0 0.25rem rgba(42, 159, 214, 0.25);\n}\n\n.accordion-header {\n  margin-bottom: 0;\n}\n\n.accordion-item {\n  background-color: #060606;\n  border: 1px solid rgba(0, 0, 0, 0.125);\n}\n\n.accordion-item:first-of-type {\n  border-top-left-radius: 0.25rem;\n  border-top-right-radius: 0.25rem;\n}\n\n.accordion-item:first-of-type .accordion-button {\n  border-top-left-radius: calc(0.25rem - 1px);\n  border-top-right-radius: calc(0.25rem - 1px);\n}\n\n.accordion-item:not(:first-of-type) {\n  border-top: 0;\n}\n\n.accordion-item:last-of-type {\n  border-bottom-right-radius: 0.25rem;\n  border-bottom-left-radius: 0.25rem;\n}\n\n.accordion-item:last-of-type .accordion-button.collapsed {\n  border-bottom-right-radius: calc(0.25rem - 1px);\n  border-bottom-left-radius: calc(0.25rem - 1px);\n}\n\n.accordion-item:last-of-type .accordion-collapse {\n  border-bottom-right-radius: 0.25rem;\n  border-bottom-left-radius: 0.25rem;\n}\n\n.accordion-body {\n  padding: 1rem 1.25rem;\n}\n\n.accordion-flush .accordion-collapse {\n  border-width: 0;\n}\n\n.accordion-flush .accordion-item {\n  border-right: 0;\n  border-left: 0;\n  border-radius: 0;\n}\n\n.accordion-flush .accordion-item:first-child {\n  border-top: 0;\n}\n\n.accordion-flush .accordion-item:last-child {\n  border-bottom: 0;\n}\n\n.accordion-flush .accordion-item .accordion-button {\n  border-radius: 0;\n}\n\n.breadcrumb {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n  flex-wrap: wrap;\n  padding: 0.375rem 0.75rem;\n  margin-bottom: 1rem;\n  list-style: none;\n  background-color: #282828;\n  border-radius: 0.25rem;\n}\n\n.breadcrumb-item + .breadcrumb-item {\n  padding-left: 0.5rem;\n}\n\n.breadcrumb-item + .breadcrumb-item::before {\n  float: left;\n  padding-right: 0.5rem;\n  color: #555;\n  content: var(--bs-breadcrumb-divider, \"/\") /* rtl: var(--bs-breadcrumb-divider, \"/\") */;\n}\n\n.breadcrumb-item.active {\n  color: #555;\n}\n\n.pagination {\n  display: -ms-flexbox;\n  display: flex;\n  padding-left: 0;\n  list-style: none;\n}\n\n.page-link {\n  position: relative;\n  display: block;\n  color: #fff;\n  text-decoration: none;\n  background-color: #282828;\n  border: 1px solid transparent;\n  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .page-link {\n    transition: none;\n  }\n}\n\n.page-link:hover {\n  z-index: 2;\n  color: #fff;\n  background-color: #2a9fd6;\n  border-color: transparent;\n}\n\n.page-link:focus {\n  z-index: 3;\n  color: #227fab;\n  background-color: #e9ecef;\n  outline: 0;\n  box-shadow: 0 0 0 0.25rem rgba(42, 159, 214, 0.25);\n}\n\n.page-item:not(:first-child) .page-link {\n  margin-left: -1px;\n}\n\n.page-item.active .page-link {\n  z-index: 3;\n  color: #fff;\n  background-color: #2a9fd6;\n  border-color: #2a9fd6;\n}\n\n.page-item.disabled .page-link {\n  color: #555;\n  pointer-events: none;\n  background-color: #282828;\n  border-color: transparent;\n}\n\n.page-link {\n  padding: 0.375rem 0.75rem;\n}\n\n.page-item:first-child .page-link {\n  border-top-left-radius: 0.25rem;\n  border-bottom-left-radius: 0.25rem;\n}\n\n.page-item:last-child .page-link {\n  border-top-right-radius: 0.25rem;\n  border-bottom-right-radius: 0.25rem;\n}\n\n.pagination-lg .page-link {\n  padding: 0.75rem 1.5rem;\n  font-size: 1.25rem;\n}\n\n.pagination-lg .page-item:first-child .page-link {\n  border-top-left-radius: 0.3rem;\n  border-bottom-left-radius: 0.3rem;\n}\n\n.pagination-lg .page-item:last-child .page-link {\n  border-top-right-radius: 0.3rem;\n  border-bottom-right-radius: 0.3rem;\n}\n\n.pagination-sm .page-link {\n  padding: 0.25rem 0.5rem;\n  font-size: 0.875rem;\n}\n\n.pagination-sm .page-item:first-child .page-link {\n  border-top-left-radius: 0.2rem;\n  border-bottom-left-radius: 0.2rem;\n}\n\n.pagination-sm .page-item:last-child .page-link {\n  border-top-right-radius: 0.2rem;\n  border-bottom-right-radius: 0.2rem;\n}\n\n.badge {\n  display: inline-block;\n  padding: 0.35em 0.65em;\n  font-size: 0.75em;\n  font-weight: 700;\n  line-height: 1;\n  color: #fff;\n  text-align: center;\n  white-space: nowrap;\n  vertical-align: baseline;\n  border-radius: 0.25rem;\n}\n\n.badge:empty {\n  display: none;\n}\n\n.btn .badge {\n  position: relative;\n  top: -1px;\n}\n\n.alert {\n  position: relative;\n  padding: 1rem 1rem;\n  margin-bottom: 1rem;\n  border: 1px solid transparent;\n  border-radius: 0.25rem;\n}\n\n.alert-heading {\n  color: inherit;\n}\n\n.alert-link {\n  font-weight: 700;\n}\n\n.alert-dismissible {\n  padding-right: 3rem;\n}\n\n.alert-dismissible .btn-close {\n  position: absolute;\n  top: 0;\n  right: 0;\n  z-index: 2;\n  padding: 1.25rem 1rem;\n}\n\n.alert-primary {\n  color: #195f80;\n  background-color: #d4ecf7;\n  border-color: #bfe2f3;\n}\n\n.alert-primary .alert-link {\n  color: #144c66;\n}\n\n.alert-secondary {\n  color: #333333;\n  background-color: #dddddd;\n  border-color: #cccccc;\n}\n\n.alert-secondary .alert-link {\n  color: #292929;\n}\n\n.alert-success {\n  color: #476b00;\n  background-color: #e4f0cc;\n  border-color: #d6e8b3;\n}\n\n.alert-success .alert-link {\n  color: #395600;\n}\n\n.alert-info {\n  color: #5c1f7a;\n  background-color: #ebd6f5;\n  border-color: #e0c2f0;\n}\n\n.alert-info .alert-link {\n  color: #4a1962;\n}\n\n.alert-warning {\n  color: #995200;\n  background-color: #ffe7cc;\n  border-color: #ffdbb3;\n}\n\n.alert-warning .alert-link {\n  color: #7a4200;\n}\n\n.alert-danger {\n  color: #7a0000;\n  background-color: #f5cccc;\n  border-color: #f0b3b3;\n}\n\n.alert-danger .alert-link {\n  color: #620000;\n}\n\n.alert-light {\n  color: #141414;\n  background-color: lightgray;\n  border-color: #bdbdbd;\n}\n\n.alert-light .alert-link {\n  color: #101010;\n}\n\n.alert-dark {\n  color: #686968;\n  background-color: #efefef;\n  border-color: #e6e7e7;\n}\n\n.alert-dark .alert-link {\n  color: #535453;\n}\n\n@-webkit-keyframes progress-bar-stripes {\n  0% {\n    background-position-x: 1rem;\n  }\n}\n\n@keyframes progress-bar-stripes {\n  0% {\n    background-position-x: 1rem;\n  }\n}\n\n.progress {\n  display: -ms-flexbox;\n  display: flex;\n  height: 1rem;\n  overflow: hidden;\n  font-size: 0.75rem;\n  background-color: #282828;\n  border-radius: 0.25rem;\n}\n\n.progress-bar {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  -ms-flex-pack: center;\n  justify-content: center;\n  overflow: hidden;\n  color: #fff;\n  text-align: center;\n  white-space: nowrap;\n  background-color: #2a9fd6;\n  transition: width 0.6s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .progress-bar {\n    transition: none;\n  }\n}\n\n.progress-bar-striped {\n  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-size: 1rem 1rem;\n}\n\n.progress-bar-animated {\n  -webkit-animation: 1s linear infinite progress-bar-stripes;\n  animation: 1s linear infinite progress-bar-stripes;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .progress-bar-animated {\n    -webkit-animation: none;\n    animation: none;\n  }\n}\n\n.list-group {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  padding-left: 0;\n  margin-bottom: 0;\n  border-radius: 0.25rem;\n}\n\n.list-group-numbered {\n  list-style-type: none;\n  counter-reset: section;\n}\n\n.list-group-numbered > li::before {\n  content: counters(section, \".\") \". \";\n  counter-increment: section;\n}\n\n.list-group-item-action {\n  width: 100%;\n  color: #fff;\n  text-align: inherit;\n}\n\n.list-group-item-action:hover, .list-group-item-action:focus {\n  z-index: 1;\n  color: #fff;\n  text-decoration: none;\n  background-color: #2a9fd6;\n}\n\n.list-group-item-action:active {\n  color: #adafae;\n  background-color: #2a9fd6;\n}\n\n.list-group-item {\n  position: relative;\n  display: block;\n  padding: 0.5rem 1rem;\n  color: #fff;\n  text-decoration: none;\n  background-color: #222;\n  border: 1px solid #282828;\n}\n\n.list-group-item:first-child {\n  border-top-left-radius: inherit;\n  border-top-right-radius: inherit;\n}\n\n.list-group-item:last-child {\n  border-bottom-right-radius: inherit;\n  border-bottom-left-radius: inherit;\n}\n\n.list-group-item.disabled, .list-group-item:disabled {\n  color: #555;\n  pointer-events: none;\n  background-color: #282828;\n}\n\n.list-group-item.active {\n  z-index: 2;\n  color: #fff;\n  background-color: #2a9fd6;\n  border-color: #2a9fd6;\n}\n\n.list-group-item + .list-group-item {\n  border-top-width: 0;\n}\n\n.list-group-item + .list-group-item.active {\n  margin-top: -1px;\n  border-top-width: 1px;\n}\n\n.list-group-horizontal {\n  -ms-flex-direction: row;\n  flex-direction: row;\n}\n\n.list-group-horizontal > .list-group-item:first-child {\n  border-bottom-left-radius: 0.25rem;\n  border-top-right-radius: 0;\n}\n\n.list-group-horizontal > .list-group-item:last-child {\n  border-top-right-radius: 0.25rem;\n  border-bottom-left-radius: 0;\n}\n\n.list-group-horizontal > .list-group-item.active {\n  margin-top: 0;\n}\n\n.list-group-horizontal > .list-group-item + .list-group-item {\n  border-top-width: 1px;\n  border-left-width: 0;\n}\n\n.list-group-horizontal > .list-group-item + .list-group-item.active {\n  margin-left: -1px;\n  border-left-width: 1px;\n}\n\n@media (min-width: 576px) {\n  .list-group-horizontal-sm {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .list-group-horizontal-sm > .list-group-item:first-child {\n    border-bottom-left-radius: 0.25rem;\n    border-top-right-radius: 0;\n  }\n  .list-group-horizontal-sm > .list-group-item:last-child {\n    border-top-right-radius: 0.25rem;\n    border-bottom-left-radius: 0;\n  }\n  .list-group-horizontal-sm > .list-group-item.active {\n    margin-top: 0;\n  }\n  .list-group-horizontal-sm > .list-group-item + .list-group-item {\n    border-top-width: 1px;\n    border-left-width: 0;\n  }\n  .list-group-horizontal-sm > .list-group-item + .list-group-item.active {\n    margin-left: -1px;\n    border-left-width: 1px;\n  }\n}\n\n@media (min-width: 768px) {\n  .list-group-horizontal-md {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .list-group-horizontal-md > .list-group-item:first-child {\n    border-bottom-left-radius: 0.25rem;\n    border-top-right-radius: 0;\n  }\n  .list-group-horizontal-md > .list-group-item:last-child {\n    border-top-right-radius: 0.25rem;\n    border-bottom-left-radius: 0;\n  }\n  .list-group-horizontal-md > .list-group-item.active {\n    margin-top: 0;\n  }\n  .list-group-horizontal-md > .list-group-item + .list-group-item {\n    border-top-width: 1px;\n    border-left-width: 0;\n  }\n  .list-group-horizontal-md > .list-group-item + .list-group-item.active {\n    margin-left: -1px;\n    border-left-width: 1px;\n  }\n}\n\n@media (min-width: 992px) {\n  .list-group-horizontal-lg {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .list-group-horizontal-lg > .list-group-item:first-child {\n    border-bottom-left-radius: 0.25rem;\n    border-top-right-radius: 0;\n  }\n  .list-group-horizontal-lg > .list-group-item:last-child {\n    border-top-right-radius: 0.25rem;\n    border-bottom-left-radius: 0;\n  }\n  .list-group-horizontal-lg > .list-group-item.active {\n    margin-top: 0;\n  }\n  .list-group-horizontal-lg > .list-group-item + .list-group-item {\n    border-top-width: 1px;\n    border-left-width: 0;\n  }\n  .list-group-horizontal-lg > .list-group-item + .list-group-item.active {\n    margin-left: -1px;\n    border-left-width: 1px;\n  }\n}\n\n@media (min-width: 1200px) {\n  .list-group-horizontal-xl {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .list-group-horizontal-xl > .list-group-item:first-child {\n    border-bottom-left-radius: 0.25rem;\n    border-top-right-radius: 0;\n  }\n  .list-group-horizontal-xl > .list-group-item:last-child {\n    border-top-right-radius: 0.25rem;\n    border-bottom-left-radius: 0;\n  }\n  .list-group-horizontal-xl > .list-group-item.active {\n    margin-top: 0;\n  }\n  .list-group-horizontal-xl > .list-group-item + .list-group-item {\n    border-top-width: 1px;\n    border-left-width: 0;\n  }\n  .list-group-horizontal-xl > .list-group-item + .list-group-item.active {\n    margin-left: -1px;\n    border-left-width: 1px;\n  }\n}\n\n@media (min-width: 1400px) {\n  .list-group-horizontal-xxl {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .list-group-horizontal-xxl > .list-group-item:first-child {\n    border-bottom-left-radius: 0.25rem;\n    border-top-right-radius: 0;\n  }\n  .list-group-horizontal-xxl > .list-group-item:last-child {\n    border-top-right-radius: 0.25rem;\n    border-bottom-left-radius: 0;\n  }\n  .list-group-horizontal-xxl > .list-group-item.active {\n    margin-top: 0;\n  }\n  .list-group-horizontal-xxl > .list-group-item + .list-group-item {\n    border-top-width: 1px;\n    border-left-width: 0;\n  }\n  .list-group-horizontal-xxl > .list-group-item + .list-group-item.active {\n    margin-left: -1px;\n    border-left-width: 1px;\n  }\n}\n\n.list-group-flush {\n  border-radius: 0;\n}\n\n.list-group-flush > .list-group-item {\n  border-width: 0 0 1px;\n}\n\n.list-group-flush > .list-group-item:last-child {\n  border-bottom-width: 0;\n}\n\n.list-group-item-primary {\n  color: #195f80;\n  background-color: #d4ecf7;\n}\n\n.list-group-item-primary.list-group-item-action:hover, .list-group-item-primary.list-group-item-action:focus {\n  color: #195f80;\n  background-color: #bfd4de;\n}\n\n.list-group-item-primary.list-group-item-action.active {\n  color: #fff;\n  background-color: #195f80;\n  border-color: #195f80;\n}\n\n.list-group-item-secondary {\n  color: #333333;\n  background-color: #dddddd;\n}\n\n.list-group-item-secondary.list-group-item-action:hover, .list-group-item-secondary.list-group-item-action:focus {\n  color: #333333;\n  background-color: #c7c7c7;\n}\n\n.list-group-item-secondary.list-group-item-action.active {\n  color: #fff;\n  background-color: #333333;\n  border-color: #333333;\n}\n\n.list-group-item-success {\n  color: #476b00;\n  background-color: #e4f0cc;\n}\n\n.list-group-item-success.list-group-item-action:hover, .list-group-item-success.list-group-item-action:focus {\n  color: #476b00;\n  background-color: #cdd8b8;\n}\n\n.list-group-item-success.list-group-item-action.active {\n  color: #fff;\n  background-color: #476b00;\n  border-color: #476b00;\n}\n\n.list-group-item-info {\n  color: #5c1f7a;\n  background-color: #ebd6f5;\n}\n\n.list-group-item-info.list-group-item-action:hover, .list-group-item-info.list-group-item-action:focus {\n  color: #5c1f7a;\n  background-color: #d4c1dd;\n}\n\n.list-group-item-info.list-group-item-action.active {\n  color: #fff;\n  background-color: #5c1f7a;\n  border-color: #5c1f7a;\n}\n\n.list-group-item-warning {\n  color: #995200;\n  background-color: #ffe7cc;\n}\n\n.list-group-item-warning.list-group-item-action:hover, .list-group-item-warning.list-group-item-action:focus {\n  color: #995200;\n  background-color: #e6d0b8;\n}\n\n.list-group-item-warning.list-group-item-action.active {\n  color: #fff;\n  background-color: #995200;\n  border-color: #995200;\n}\n\n.list-group-item-danger {\n  color: #7a0000;\n  background-color: #f5cccc;\n}\n\n.list-group-item-danger.list-group-item-action:hover, .list-group-item-danger.list-group-item-action:focus {\n  color: #7a0000;\n  background-color: #ddb8b8;\n}\n\n.list-group-item-danger.list-group-item-action.active {\n  color: #fff;\n  background-color: #7a0000;\n  border-color: #7a0000;\n}\n\n.list-group-item-light {\n  color: #141414;\n  background-color: lightgray;\n}\n\n.list-group-item-light.list-group-item-action:hover, .list-group-item-light.list-group-item-action:focus {\n  color: #141414;\n  background-color: #bebebe;\n}\n\n.list-group-item-light.list-group-item-action.active {\n  color: #fff;\n  background-color: #141414;\n  border-color: #141414;\n}\n\n.list-group-item-dark {\n  color: #686968;\n  background-color: #efefef;\n}\n\n.list-group-item-dark.list-group-item-action:hover, .list-group-item-dark.list-group-item-action:focus {\n  color: #686968;\n  background-color: #d7d7d7;\n}\n\n.list-group-item-dark.list-group-item-action.active {\n  color: #fff;\n  background-color: #686968;\n  border-color: #686968;\n}\n\n.btn-close {\n  box-sizing: content-box;\n  width: 1em;\n  height: 1em;\n  padding: 0.25em 0.25em;\n  color: #fff;\n  background: transparent url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M.293.293a1 1 0 011.414 0L8 6.586 14.293.293a1 1 0 111.414 1.414L9.414 8l6.293 6.293a1 1 0 01-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 01-1.414-1.414L6.586 8 .293 1.707a1 1 0 010-1.414z'/%3e%3c/svg%3e\") center/1em auto no-repeat;\n  border: 0;\n  border-radius: 0.25rem;\n  opacity: 0.6;\n}\n\n.btn-close:hover {\n  color: #fff;\n  text-decoration: none;\n  opacity: 1;\n}\n\n.btn-close:focus {\n  outline: 0;\n  box-shadow: 0 0 0 0.25rem rgba(42, 159, 214, 0.25);\n  opacity: 1;\n}\n\n.btn-close:disabled, .btn-close.disabled {\n  pointer-events: none;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  user-select: none;\n  opacity: 0.25;\n}\n\n.btn-close-white {\n  -webkit-filter: invert(1) grayscale(100%) brightness(200%);\n  filter: invert(1) grayscale(100%) brightness(200%);\n}\n\n.toast {\n  width: 350px;\n  max-width: 100%;\n  font-size: 0.875rem;\n  color: #fff;\n  pointer-events: auto;\n  background-color: #222;\n  background-clip: padding-box;\n  border: 1px solid #282828;\n  box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15);\n  border-radius: 0.25rem;\n}\n\n.toast.showing {\n  opacity: 0;\n}\n\n.toast:not(.show) {\n  display: none;\n}\n\n.toast-container {\n  width: -webkit-max-content;\n  width: -moz-max-content;\n  width: max-content;\n  max-width: 100%;\n  pointer-events: none;\n}\n\n.toast-container > :not(:last-child) {\n  margin-bottom: 0.75rem;\n}\n\n.toast-header {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-align: center;\n  align-items: center;\n  padding: 0.5rem 0.75rem;\n  color: #adafae;\n  background-color: #222;\n  background-clip: padding-box;\n  border-bottom: 1px solid #282828;\n  border-top-left-radius: calc(0.25rem - 1px);\n  border-top-right-radius: calc(0.25rem - 1px);\n}\n\n.toast-header .btn-close {\n  margin-right: -0.375rem;\n  margin-left: 0.75rem;\n}\n\n.toast-body {\n  padding: 0.75rem;\n  word-wrap: break-word;\n}\n\n.modal {\n  position: fixed;\n  top: 0;\n  left: 0;\n  z-index: 1055;\n  display: none;\n  width: 100%;\n  height: 100%;\n  overflow-x: hidden;\n  overflow-y: auto;\n  outline: 0;\n}\n\n.modal-dialog {\n  position: relative;\n  width: auto;\n  margin: 0.5rem;\n  pointer-events: none;\n}\n\n.modal.fade .modal-dialog {\n  transition: -webkit-transform 0.3s ease-out;\n  transition: transform 0.3s ease-out;\n  transition: transform 0.3s ease-out, -webkit-transform 0.3s ease-out;\n  -webkit-transform: translate(0, -50px);\n  transform: translate(0, -50px);\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .modal.fade .modal-dialog {\n    transition: none;\n  }\n}\n\n.modal.show .modal-dialog {\n  -webkit-transform: none;\n  transform: none;\n}\n\n.modal.modal-static .modal-dialog {\n  -webkit-transform: scale(1.02);\n  transform: scale(1.02);\n}\n\n.modal-dialog-scrollable {\n  height: calc(100% - 1rem);\n}\n\n.modal-dialog-scrollable .modal-content {\n  max-height: 100%;\n  overflow: hidden;\n}\n\n.modal-dialog-scrollable .modal-body {\n  overflow-y: auto;\n}\n\n.modal-dialog-centered {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-align: center;\n  align-items: center;\n  min-height: calc(100% - 1rem);\n}\n\n.modal-content {\n  position: relative;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  width: 100%;\n  pointer-events: auto;\n  background-color: #222;\n  background-clip: padding-box;\n  border: 1px solid rgba(0, 0, 0, 0.2);\n  border-radius: 0.3rem;\n  outline: 0;\n}\n\n.modal-backdrop {\n  position: fixed;\n  top: 0;\n  left: 0;\n  z-index: 1050;\n  width: 100vw;\n  height: 100vh;\n  background-color: #000;\n}\n\n.modal-backdrop.fade {\n  opacity: 0;\n}\n\n.modal-backdrop.show {\n  opacity: 0.5;\n}\n\n.modal-header {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-negative: 0;\n  flex-shrink: 0;\n  -ms-flex-align: center;\n  align-items: center;\n  -ms-flex-pack: justify;\n  justify-content: space-between;\n  padding: 1rem 1rem;\n  border-bottom: 1px solid #282828;\n  border-top-left-radius: calc(0.3rem - 1px);\n  border-top-right-radius: calc(0.3rem - 1px);\n}\n\n.modal-header .btn-close {\n  padding: 0.5rem 0.5rem;\n  margin: -0.5rem -0.5rem -0.5rem auto;\n}\n\n.modal-title {\n  margin-bottom: 0;\n  line-height: 1.5;\n}\n\n.modal-body {\n  position: relative;\n  -ms-flex: 1 1 auto;\n  flex: 1 1 auto;\n  padding: 1rem;\n}\n\n.modal-footer {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n  flex-wrap: wrap;\n  -ms-flex-negative: 0;\n  flex-shrink: 0;\n  -ms-flex-align: center;\n  align-items: center;\n  -ms-flex-pack: end;\n  justify-content: flex-end;\n  padding: 0.75rem;\n  border-top: 1px solid #282828;\n  border-bottom-right-radius: calc(0.3rem - 1px);\n  border-bottom-left-radius: calc(0.3rem - 1px);\n}\n\n.modal-footer > * {\n  margin: 0.25rem;\n}\n\n@media (min-width: 576px) {\n  .modal-dialog {\n    max-width: 500px;\n    margin: 1.75rem auto;\n  }\n  .modal-dialog-scrollable {\n    height: calc(100% - 3.5rem);\n  }\n  .modal-dialog-centered {\n    min-height: calc(100% - 3.5rem);\n  }\n  .modal-sm {\n    max-width: 300px;\n  }\n}\n\n@media (min-width: 992px) {\n  .modal-lg,\n  .modal-xl {\n    max-width: 800px;\n  }\n}\n\n@media (min-width: 1200px) {\n  .modal-xl {\n    max-width: 1140px;\n  }\n}\n\n.modal-fullscreen {\n  width: 100vw;\n  max-width: none;\n  height: 100%;\n  margin: 0;\n}\n\n.modal-fullscreen .modal-content {\n  height: 100%;\n  border: 0;\n  border-radius: 0;\n}\n\n.modal-fullscreen .modal-header {\n  border-radius: 0;\n}\n\n.modal-fullscreen .modal-body {\n  overflow-y: auto;\n}\n\n.modal-fullscreen .modal-footer {\n  border-radius: 0;\n}\n\n@media (max-width: 575.98px) {\n  .modal-fullscreen-sm-down {\n    width: 100vw;\n    max-width: none;\n    height: 100%;\n    margin: 0;\n  }\n  .modal-fullscreen-sm-down .modal-content {\n    height: 100%;\n    border: 0;\n    border-radius: 0;\n  }\n  .modal-fullscreen-sm-down .modal-header {\n    border-radius: 0;\n  }\n  .modal-fullscreen-sm-down .modal-body {\n    overflow-y: auto;\n  }\n  .modal-fullscreen-sm-down .modal-footer {\n    border-radius: 0;\n  }\n}\n\n@media (max-width: 767.98px) {\n  .modal-fullscreen-md-down {\n    width: 100vw;\n    max-width: none;\n    height: 100%;\n    margin: 0;\n  }\n  .modal-fullscreen-md-down .modal-content {\n    height: 100%;\n    border: 0;\n    border-radius: 0;\n  }\n  .modal-fullscreen-md-down .modal-header {\n    border-radius: 0;\n  }\n  .modal-fullscreen-md-down .modal-body {\n    overflow-y: auto;\n  }\n  .modal-fullscreen-md-down .modal-footer {\n    border-radius: 0;\n  }\n}\n\n@media (max-width: 991.98px) {\n  .modal-fullscreen-lg-down {\n    width: 100vw;\n    max-width: none;\n    height: 100%;\n    margin: 0;\n  }\n  .modal-fullscreen-lg-down .modal-content {\n    height: 100%;\n    border: 0;\n    border-radius: 0;\n  }\n  .modal-fullscreen-lg-down .modal-header {\n    border-radius: 0;\n  }\n  .modal-fullscreen-lg-down .modal-body {\n    overflow-y: auto;\n  }\n  .modal-fullscreen-lg-down .modal-footer {\n    border-radius: 0;\n  }\n}\n\n@media (max-width: 1199.98px) {\n  .modal-fullscreen-xl-down {\n    width: 100vw;\n    max-width: none;\n    height: 100%;\n    margin: 0;\n  }\n  .modal-fullscreen-xl-down .modal-content {\n    height: 100%;\n    border: 0;\n    border-radius: 0;\n  }\n  .modal-fullscreen-xl-down .modal-header {\n    border-radius: 0;\n  }\n  .modal-fullscreen-xl-down .modal-body {\n    overflow-y: auto;\n  }\n  .modal-fullscreen-xl-down .modal-footer {\n    border-radius: 0;\n  }\n}\n\n@media (max-width: 1399.98px) {\n  .modal-fullscreen-xxl-down {\n    width: 100vw;\n    max-width: none;\n    height: 100%;\n    margin: 0;\n  }\n  .modal-fullscreen-xxl-down .modal-content {\n    height: 100%;\n    border: 0;\n    border-radius: 0;\n  }\n  .modal-fullscreen-xxl-down .modal-header {\n    border-radius: 0;\n  }\n  .modal-fullscreen-xxl-down .modal-body {\n    overflow-y: auto;\n  }\n  .modal-fullscreen-xxl-down .modal-footer {\n    border-radius: 0;\n  }\n}\n\n.tooltip {\n  position: absolute;\n  z-index: 1080;\n  display: block;\n  margin: 0;\n  font-family: var(--bs-font-sans-serif);\n  font-style: normal;\n  font-weight: 400;\n  line-height: 1.5;\n  text-align: left;\n  text-align: start;\n  text-decoration: none;\n  text-shadow: none;\n  text-transform: none;\n  letter-spacing: normal;\n  word-break: normal;\n  word-spacing: normal;\n  white-space: normal;\n  line-break: auto;\n  font-size: 0.875rem;\n  word-wrap: break-word;\n  opacity: 0;\n}\n\n.tooltip.show {\n  opacity: 1;\n}\n\n.tooltip .tooltip-arrow {\n  position: absolute;\n  display: block;\n  width: 0.8rem;\n  height: 0.4rem;\n}\n\n.tooltip .tooltip-arrow::before {\n  position: absolute;\n  content: \"\";\n  border-color: transparent;\n  border-style: solid;\n}\n\n.bs-tooltip-top, .bs-tooltip-auto[data-popper-placement^=\"top\"] {\n  padding: 0.4rem 0;\n}\n\n.bs-tooltip-top .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=\"top\"] .tooltip-arrow {\n  bottom: 0;\n}\n\n.bs-tooltip-top .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=\"top\"] .tooltip-arrow::before {\n  top: -1px;\n  border-width: 0.4rem 0.4rem 0;\n  border-top-color: #282828;\n}\n\n.bs-tooltip-end, .bs-tooltip-auto[data-popper-placement^=\"right\"] {\n  padding: 0 0.4rem;\n}\n\n.bs-tooltip-end .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=\"right\"] .tooltip-arrow {\n  left: 0;\n  width: 0.4rem;\n  height: 0.8rem;\n}\n\n.bs-tooltip-end .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=\"right\"] .tooltip-arrow::before {\n  right: -1px;\n  border-width: 0.4rem 0.4rem 0.4rem 0;\n  border-right-color: #282828;\n}\n\n.bs-tooltip-bottom, .bs-tooltip-auto[data-popper-placement^=\"bottom\"] {\n  padding: 0.4rem 0;\n}\n\n.bs-tooltip-bottom .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=\"bottom\"] .tooltip-arrow {\n  top: 0;\n}\n\n.bs-tooltip-bottom .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=\"bottom\"] .tooltip-arrow::before {\n  bottom: -1px;\n  border-width: 0 0.4rem 0.4rem;\n  border-bottom-color: #282828;\n}\n\n.bs-tooltip-start, .bs-tooltip-auto[data-popper-placement^=\"left\"] {\n  padding: 0 0.4rem;\n}\n\n.bs-tooltip-start .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=\"left\"] .tooltip-arrow {\n  right: 0;\n  width: 0.4rem;\n  height: 0.8rem;\n}\n\n.bs-tooltip-start .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=\"left\"] .tooltip-arrow::before {\n  left: -1px;\n  border-width: 0.4rem 0 0.4rem 0.4rem;\n  border-left-color: #282828;\n}\n\n.tooltip-inner {\n  max-width: 200px;\n  padding: 0.25rem 0.5rem;\n  color: #fff;\n  text-align: center;\n  background-color: #282828;\n  border-radius: 0.25rem;\n}\n\n.popover {\n  position: absolute;\n  top: 0;\n  left: 0 /* rtl:ignore */;\n  z-index: 1070;\n  display: block;\n  max-width: 276px;\n  font-family: var(--bs-font-sans-serif);\n  font-style: normal;\n  font-weight: 400;\n  line-height: 1.5;\n  text-align: left;\n  text-align: start;\n  text-decoration: none;\n  text-shadow: none;\n  text-transform: none;\n  letter-spacing: normal;\n  word-break: normal;\n  word-spacing: normal;\n  white-space: normal;\n  line-break: auto;\n  font-size: 0.875rem;\n  word-wrap: break-word;\n  background-color: #282828;\n  background-clip: padding-box;\n  border: 1px solid rgba(0, 0, 0, 0.2);\n  border-radius: 0.3rem;\n}\n\n.popover .popover-arrow {\n  position: absolute;\n  display: block;\n  width: 1rem;\n  height: 0.5rem;\n}\n\n.popover .popover-arrow::before, .popover .popover-arrow::after {\n  position: absolute;\n  display: block;\n  content: \"\";\n  border-color: transparent;\n  border-style: solid;\n}\n\n.bs-popover-top > .popover-arrow, .bs-popover-auto[data-popper-placement^=\"top\"] > .popover-arrow {\n  bottom: calc(-0.5rem - 1px);\n}\n\n.bs-popover-top > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=\"top\"] > .popover-arrow::before {\n  bottom: 0;\n  border-width: 0.5rem 0.5rem 0;\n  border-top-color: rgba(0, 0, 0, 0.25);\n}\n\n.bs-popover-top > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=\"top\"] > .popover-arrow::after {\n  bottom: 1px;\n  border-width: 0.5rem 0.5rem 0;\n  border-top-color: #282828;\n}\n\n.bs-popover-end > .popover-arrow, .bs-popover-auto[data-popper-placement^=\"right\"] > .popover-arrow {\n  left: calc(-0.5rem - 1px);\n  width: 0.5rem;\n  height: 1rem;\n}\n\n.bs-popover-end > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=\"right\"] > .popover-arrow::before {\n  left: 0;\n  border-width: 0.5rem 0.5rem 0.5rem 0;\n  border-right-color: rgba(0, 0, 0, 0.25);\n}\n\n.bs-popover-end > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=\"right\"] > .popover-arrow::after {\n  left: 1px;\n  border-width: 0.5rem 0.5rem 0.5rem 0;\n  border-right-color: #282828;\n}\n\n.bs-popover-bottom > .popover-arrow, .bs-popover-auto[data-popper-placement^=\"bottom\"] > .popover-arrow {\n  top: calc(-0.5rem - 1px);\n}\n\n.bs-popover-bottom > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=\"bottom\"] > .popover-arrow::before {\n  top: 0;\n  border-width: 0 0.5rem 0.5rem 0.5rem;\n  border-bottom-color: rgba(0, 0, 0, 0.25);\n}\n\n.bs-popover-bottom > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=\"bottom\"] > .popover-arrow::after {\n  top: 1px;\n  border-width: 0 0.5rem 0.5rem 0.5rem;\n  border-bottom-color: #282828;\n}\n\n.bs-popover-bottom .popover-header::before, .bs-popover-auto[data-popper-placement^=\"bottom\"] .popover-header::before {\n  position: absolute;\n  top: 0;\n  left: 50%;\n  display: block;\n  width: 1rem;\n  margin-left: -0.5rem;\n  content: \"\";\n  border-bottom: 1px solid #262626;\n}\n\n.bs-popover-start > .popover-arrow, .bs-popover-auto[data-popper-placement^=\"left\"] > .popover-arrow {\n  right: calc(-0.5rem - 1px);\n  width: 0.5rem;\n  height: 1rem;\n}\n\n.bs-popover-start > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=\"left\"] > .popover-arrow::before {\n  right: 0;\n  border-width: 0.5rem 0 0.5rem 0.5rem;\n  border-left-color: rgba(0, 0, 0, 0.25);\n}\n\n.bs-popover-start > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=\"left\"] > .popover-arrow::after {\n  right: 1px;\n  border-width: 0.5rem 0 0.5rem 0.5rem;\n  border-left-color: #282828;\n}\n\n.popover-header {\n  padding: 0.5rem 1rem;\n  margin-bottom: 0;\n  font-size: 1rem;\n  color: #fff;\n  background-color: #262626;\n  border-bottom: 1px solid rgba(0, 0, 0, 0.2);\n  border-top-left-radius: calc(0.3rem - 1px);\n  border-top-right-radius: calc(0.3rem - 1px);\n}\n\n.popover-header:empty {\n  display: none;\n}\n\n.popover-body {\n  padding: 1rem 1rem;\n  color: #adafae;\n}\n\n.carousel {\n  position: relative;\n}\n\n.carousel.pointer-event {\n  -ms-touch-action: pan-y;\n  touch-action: pan-y;\n}\n\n.carousel-inner {\n  position: relative;\n  width: 100%;\n  overflow: hidden;\n}\n\n.carousel-inner::after {\n  display: block;\n  clear: both;\n  content: \"\";\n}\n\n.carousel-item {\n  position: relative;\n  display: none;\n  float: left;\n  width: 100%;\n  margin-right: -100%;\n  -webkit-backface-visibility: hidden;\n  backface-visibility: hidden;\n  transition: -webkit-transform 0.6s ease-in-out;\n  transition: transform 0.6s ease-in-out;\n  transition: transform 0.6s ease-in-out, -webkit-transform 0.6s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .carousel-item {\n    transition: none;\n  }\n}\n\n.carousel-item.active,\n.carousel-item-next,\n.carousel-item-prev {\n  display: block;\n}\n\n/* rtl:begin:ignore */\n.carousel-item-next:not(.carousel-item-start),\n.active.carousel-item-end {\n  -webkit-transform: translateX(100%);\n  transform: translateX(100%);\n}\n\n.carousel-item-prev:not(.carousel-item-end),\n.active.carousel-item-start {\n  -webkit-transform: translateX(-100%);\n  transform: translateX(-100%);\n}\n\n/* rtl:end:ignore */\n.carousel-fade .carousel-item {\n  opacity: 0;\n  transition-property: opacity;\n  -webkit-transform: none;\n  transform: none;\n}\n\n.carousel-fade .carousel-item.active,\n.carousel-fade .carousel-item-next.carousel-item-start,\n.carousel-fade .carousel-item-prev.carousel-item-end {\n  z-index: 1;\n  opacity: 1;\n}\n\n.carousel-fade .active.carousel-item-start,\n.carousel-fade .active.carousel-item-end {\n  z-index: 0;\n  opacity: 0;\n  transition: opacity 0s 0.6s;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .carousel-fade .active.carousel-item-start,\n  .carousel-fade .active.carousel-item-end {\n    transition: none;\n  }\n}\n\n.carousel-control-prev,\n.carousel-control-next {\n  position: absolute;\n  top: 0;\n  bottom: 0;\n  z-index: 1;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-align: center;\n  align-items: center;\n  -ms-flex-pack: center;\n  justify-content: center;\n  width: 15%;\n  padding: 0;\n  color: #fff;\n  text-align: center;\n  background: none;\n  border: 0;\n  opacity: 0.5;\n  transition: opacity 0.15s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .carousel-control-prev,\n  .carousel-control-next {\n    transition: none;\n  }\n}\n\n.carousel-control-prev:hover, .carousel-control-prev:focus,\n.carousel-control-next:hover,\n.carousel-control-next:focus {\n  color: #fff;\n  text-decoration: none;\n  outline: 0;\n  opacity: 0.9;\n}\n\n.carousel-control-prev {\n  left: 0;\n}\n\n.carousel-control-next {\n  right: 0;\n}\n\n.carousel-control-prev-icon,\n.carousel-control-next-icon {\n  display: inline-block;\n  width: 2rem;\n  height: 2rem;\n  background-repeat: no-repeat;\n  background-position: 50%;\n  background-size: 100% 100%;\n}\n\n/* rtl:options: {\n  \"autoRename\": true,\n  \"stringMap\":[ {\n    \"name\"    : \"prev-next\",\n    \"search\"  : \"prev\",\n    \"replace\" : \"next\"\n  } ]\n} */\n.carousel-control-prev-icon {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0z'/%3e%3c/svg%3e\");\n}\n\n.carousel-control-next-icon {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e\");\n}\n\n.carousel-indicators {\n  position: absolute;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 2;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-pack: center;\n  justify-content: center;\n  padding: 0;\n  margin-right: 15%;\n  margin-bottom: 1rem;\n  margin-left: 15%;\n  list-style: none;\n}\n\n.carousel-indicators [data-bs-target] {\n  box-sizing: content-box;\n  -ms-flex: 0 1 auto;\n  flex: 0 1 auto;\n  width: 30px;\n  height: 3px;\n  padding: 0;\n  margin-right: 3px;\n  margin-left: 3px;\n  text-indent: -999px;\n  cursor: pointer;\n  background-color: #fff;\n  background-clip: padding-box;\n  border: 0;\n  border-top: 10px solid transparent;\n  border-bottom: 10px solid transparent;\n  opacity: 0.5;\n  transition: opacity 0.6s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .carousel-indicators [data-bs-target] {\n    transition: none;\n  }\n}\n\n.carousel-indicators .active {\n  opacity: 1;\n}\n\n.carousel-caption {\n  position: absolute;\n  right: 15%;\n  bottom: 1.25rem;\n  left: 15%;\n  padding-top: 1.25rem;\n  padding-bottom: 1.25rem;\n  color: #fff;\n  text-align: center;\n}\n\n.carousel-dark .carousel-control-prev-icon,\n.carousel-dark .carousel-control-next-icon {\n  -webkit-filter: invert(1) grayscale(100);\n  filter: invert(1) grayscale(100);\n}\n\n.carousel-dark .carousel-indicators [data-bs-target] {\n  background-color: #000;\n}\n\n.carousel-dark .carousel-caption {\n  color: #000;\n}\n\n@-webkit-keyframes spinner-border {\n  to {\n    -webkit-transform: rotate(360deg) /* rtl:ignore */;\n    transform: rotate(360deg) /* rtl:ignore */;\n  }\n}\n\n@keyframes spinner-border {\n  to {\n    -webkit-transform: rotate(360deg) /* rtl:ignore */;\n    transform: rotate(360deg) /* rtl:ignore */;\n  }\n}\n\n.spinner-border {\n  display: inline-block;\n  width: 2rem;\n  height: 2rem;\n  vertical-align: -0.125em;\n  border: 0.25em solid currentColor;\n  border-right-color: transparent;\n  border-radius: 50%;\n  -webkit-animation: 0.75s linear infinite spinner-border;\n  animation: 0.75s linear infinite spinner-border;\n}\n\n.spinner-border-sm {\n  width: 1rem;\n  height: 1rem;\n  border-width: 0.2em;\n}\n\n@-webkit-keyframes spinner-grow {\n  0% {\n    -webkit-transform: scale(0);\n    transform: scale(0);\n  }\n  50% {\n    opacity: 1;\n    -webkit-transform: none;\n    transform: none;\n  }\n}\n\n@keyframes spinner-grow {\n  0% {\n    -webkit-transform: scale(0);\n    transform: scale(0);\n  }\n  50% {\n    opacity: 1;\n    -webkit-transform: none;\n    transform: none;\n  }\n}\n\n.spinner-grow {\n  display: inline-block;\n  width: 2rem;\n  height: 2rem;\n  vertical-align: -0.125em;\n  background-color: currentColor;\n  border-radius: 50%;\n  opacity: 0;\n  -webkit-animation: 0.75s linear infinite spinner-grow;\n  animation: 0.75s linear infinite spinner-grow;\n}\n\n.spinner-grow-sm {\n  width: 1rem;\n  height: 1rem;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .spinner-border,\n  .spinner-grow {\n    -webkit-animation-duration: 1.5s;\n    animation-duration: 1.5s;\n  }\n}\n\n.offcanvas {\n  position: fixed;\n  bottom: 0;\n  z-index: 1045;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  max-width: 100%;\n  visibility: hidden;\n  background-color: #222;\n  background-clip: padding-box;\n  outline: 0;\n  transition: -webkit-transform 0.3s ease-in-out;\n  transition: transform 0.3s ease-in-out;\n  transition: transform 0.3s ease-in-out, -webkit-transform 0.3s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .offcanvas {\n    transition: none;\n  }\n}\n\n.offcanvas-backdrop {\n  position: fixed;\n  top: 0;\n  left: 0;\n  z-index: 1040;\n  width: 100vw;\n  height: 100vh;\n  background-color: #000;\n}\n\n.offcanvas-backdrop.fade {\n  opacity: 0;\n}\n\n.offcanvas-backdrop.show {\n  opacity: 0.5;\n}\n\n.offcanvas-header {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-align: center;\n  align-items: center;\n  -ms-flex-pack: justify;\n  justify-content: space-between;\n  padding: 1rem 1rem;\n}\n\n.offcanvas-header .btn-close {\n  padding: 0.5rem 0.5rem;\n  margin-top: -0.5rem;\n  margin-right: -0.5rem;\n  margin-bottom: -0.5rem;\n}\n\n.offcanvas-title {\n  margin-bottom: 0;\n  line-height: 1.5;\n}\n\n.offcanvas-body {\n  -ms-flex-positive: 1;\n  flex-grow: 1;\n  padding: 1rem 1rem;\n  overflow-y: auto;\n}\n\n.offcanvas-start {\n  top: 0;\n  left: 0;\n  width: 400px;\n  border-right: 1px solid rgba(0, 0, 0, 0.2);\n  -webkit-transform: translateX(-100%);\n  transform: translateX(-100%);\n}\n\n.offcanvas-end {\n  top: 0;\n  right: 0;\n  width: 400px;\n  border-left: 1px solid rgba(0, 0, 0, 0.2);\n  -webkit-transform: translateX(100%);\n  transform: translateX(100%);\n}\n\n.offcanvas-top {\n  top: 0;\n  right: 0;\n  left: 0;\n  height: 30vh;\n  max-height: 100%;\n  border-bottom: 1px solid rgba(0, 0, 0, 0.2);\n  -webkit-transform: translateY(-100%);\n  transform: translateY(-100%);\n}\n\n.offcanvas-bottom {\n  right: 0;\n  left: 0;\n  height: 30vh;\n  max-height: 100%;\n  border-top: 1px solid rgba(0, 0, 0, 0.2);\n  -webkit-transform: translateY(100%);\n  transform: translateY(100%);\n}\n\n.offcanvas.show {\n  -webkit-transform: none;\n  transform: none;\n}\n\n.placeholder {\n  display: inline-block;\n  min-height: 1em;\n  vertical-align: middle;\n  cursor: wait;\n  background-color: currentColor;\n  opacity: 0.5;\n}\n\n.placeholder.btn::before {\n  display: inline-block;\n  content: \"\";\n}\n\n.placeholder-xs {\n  min-height: .6em;\n}\n\n.placeholder-sm {\n  min-height: .8em;\n}\n\n.placeholder-lg {\n  min-height: 1.2em;\n}\n\n.placeholder-glow .placeholder {\n  -webkit-animation: placeholder-glow 2s ease-in-out infinite;\n  animation: placeholder-glow 2s ease-in-out infinite;\n}\n\n@-webkit-keyframes placeholder-glow {\n  50% {\n    opacity: 0.2;\n  }\n}\n\n@keyframes placeholder-glow {\n  50% {\n    opacity: 0.2;\n  }\n}\n\n.placeholder-wave {\n  -webkit-mask-image: linear-gradient(130deg, #000 55%, rgba(0, 0, 0, 0.8) 75%, #000 95%);\n  mask-image: linear-gradient(130deg, #000 55%, rgba(0, 0, 0, 0.8) 75%, #000 95%);\n  -webkit-mask-size: 200% 100%;\n  mask-size: 200% 100%;\n  -webkit-animation: placeholder-wave 2s linear infinite;\n  animation: placeholder-wave 2s linear infinite;\n}\n\n@-webkit-keyframes placeholder-wave {\n  100% {\n    -webkit-mask-position: -200% 0%;\n    mask-position: -200% 0%;\n  }\n}\n\n@keyframes placeholder-wave {\n  100% {\n    -webkit-mask-position: -200% 0%;\n    mask-position: -200% 0%;\n  }\n}\n\n.clearfix::after {\n  display: block;\n  clear: both;\n  content: \"\";\n}\n\n.link-primary {\n  color: #2a9fd6;\n}\n\n.link-primary:hover, .link-primary:focus {\n  color: #227fab;\n}\n\n.link-secondary {\n  color: #555;\n}\n\n.link-secondary:hover, .link-secondary:focus {\n  color: #444444;\n}\n\n.link-success {\n  color: #77b300;\n}\n\n.link-success:hover, .link-success:focus {\n  color: #5f8f00;\n}\n\n.link-info {\n  color: #93c;\n}\n\n.link-info:hover, .link-info:focus {\n  color: #7a29a3;\n}\n\n.link-warning {\n  color: #f80;\n}\n\n.link-warning:hover, .link-warning:focus {\n  color: #cc6d00;\n}\n\n.link-danger {\n  color: #c00;\n}\n\n.link-danger:hover, .link-danger:focus {\n  color: #a30000;\n}\n\n.link-light {\n  color: #222;\n}\n\n.link-light:hover, .link-light:focus {\n  color: #1b1b1b;\n}\n\n.link-dark {\n  color: #adafae;\n}\n\n.link-dark:hover, .link-dark:focus {\n  color: #bdbfbe;\n}\n\n.ratio {\n  position: relative;\n  width: 100%;\n}\n\n.ratio::before {\n  display: block;\n  padding-top: var(--bs-aspect-ratio);\n  content: \"\";\n}\n\n.ratio > * {\n  position: absolute;\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n}\n\n.ratio-1x1 {\n  --bs-aspect-ratio: 100%;\n}\n\n.ratio-4x3 {\n  --bs-aspect-ratio: calc(3 / 4 * 100%);\n}\n\n.ratio-16x9 {\n  --bs-aspect-ratio: calc(9 / 16 * 100%);\n}\n\n.ratio-21x9 {\n  --bs-aspect-ratio: calc(9 / 21 * 100%);\n}\n\n.fixed-top {\n  position: fixed;\n  top: 0;\n  right: 0;\n  left: 0;\n  z-index: 1030;\n}\n\n.fixed-bottom {\n  position: fixed;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 1030;\n}\n\n.sticky-top {\n  position: -webkit-sticky;\n  position: sticky;\n  top: 0;\n  z-index: 1020;\n}\n\n@media (min-width: 576px) {\n  .sticky-sm-top {\n    position: -webkit-sticky;\n    position: sticky;\n    top: 0;\n    z-index: 1020;\n  }\n}\n\n@media (min-width: 768px) {\n  .sticky-md-top {\n    position: -webkit-sticky;\n    position: sticky;\n    top: 0;\n    z-index: 1020;\n  }\n}\n\n@media (min-width: 992px) {\n  .sticky-lg-top {\n    position: -webkit-sticky;\n    position: sticky;\n    top: 0;\n    z-index: 1020;\n  }\n}\n\n@media (min-width: 1200px) {\n  .sticky-xl-top {\n    position: -webkit-sticky;\n    position: sticky;\n    top: 0;\n    z-index: 1020;\n  }\n}\n\n@media (min-width: 1400px) {\n  .sticky-xxl-top {\n    position: -webkit-sticky;\n    position: sticky;\n    top: 0;\n    z-index: 1020;\n  }\n}\n\n.hstack {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-direction: row;\n  flex-direction: row;\n  -ms-flex-align: center;\n  align-items: center;\n  -ms-flex-item-align: stretch;\n  align-self: stretch;\n}\n\n.vstack {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex: 1 1 auto;\n  flex: 1 1 auto;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  -ms-flex-item-align: stretch;\n  align-self: stretch;\n}\n\n.visually-hidden,\n.visually-hidden-focusable:not(:focus):not(:focus-within) {\n  position: absolute !important;\n  width: 1px !important;\n  height: 1px !important;\n  padding: 0 !important;\n  margin: -1px !important;\n  overflow: hidden !important;\n  clip: rect(0, 0, 0, 0) !important;\n  white-space: nowrap !important;\n  border: 0 !important;\n}\n\n.stretched-link::after {\n  position: absolute;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 1;\n  content: \"\";\n}\n\n.text-truncate {\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n}\n\n.vr {\n  display: inline-block;\n  -ms-flex-item-align: stretch;\n  align-self: stretch;\n  width: 1px;\n  min-height: 1em;\n  background-color: currentColor;\n  opacity: 0.25;\n}\n\n.align-baseline {\n  vertical-align: baseline !important;\n}\n\n.align-top {\n  vertical-align: top !important;\n}\n\n.align-middle {\n  vertical-align: middle !important;\n}\n\n.align-bottom {\n  vertical-align: bottom !important;\n}\n\n.align-text-bottom {\n  vertical-align: text-bottom !important;\n}\n\n.align-text-top {\n  vertical-align: text-top !important;\n}\n\n.float-start {\n  float: left !important;\n}\n\n.float-end {\n  float: right !important;\n}\n\n.float-none {\n  float: none !important;\n}\n\n.opacity-0 {\n  opacity: 0 !important;\n}\n\n.opacity-25 {\n  opacity: 0.25 !important;\n}\n\n.opacity-50 {\n  opacity: 0.5 !important;\n}\n\n.opacity-75 {\n  opacity: 0.75 !important;\n}\n\n.opacity-100 {\n  opacity: 1 !important;\n}\n\n.overflow-auto {\n  overflow: auto !important;\n}\n\n.overflow-hidden {\n  overflow: hidden !important;\n}\n\n.overflow-visible {\n  overflow: visible !important;\n}\n\n.overflow-scroll {\n  overflow: scroll !important;\n}\n\n.d-inline {\n  display: inline !important;\n}\n\n.d-inline-block {\n  display: inline-block !important;\n}\n\n.d-block {\n  display: block !important;\n}\n\n.d-grid {\n  display: grid !important;\n}\n\n.d-table {\n  display: table !important;\n}\n\n.d-table-row {\n  display: table-row !important;\n}\n\n.d-table-cell {\n  display: table-cell !important;\n}\n\n.d-flex {\n  display: -ms-flexbox !important;\n  display: flex !important;\n}\n\n.d-inline-flex {\n  display: -ms-inline-flexbox !important;\n  display: inline-flex !important;\n}\n\n.d-none {\n  display: none !important;\n}\n\n.shadow {\n  box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15) !important;\n}\n\n.shadow-sm {\n  box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075) !important;\n}\n\n.shadow-lg {\n  box-shadow: 0 1rem 3rem rgba(0, 0, 0, 0.175) !important;\n}\n\n.shadow-none {\n  box-shadow: none !important;\n}\n\n.position-static {\n  position: static !important;\n}\n\n.position-relative {\n  position: relative !important;\n}\n\n.position-absolute {\n  position: absolute !important;\n}\n\n.position-fixed {\n  position: fixed !important;\n}\n\n.position-sticky {\n  position: -webkit-sticky !important;\n  position: sticky !important;\n}\n\n.top-0 {\n  top: 0 !important;\n}\n\n.top-50 {\n  top: 50% !important;\n}\n\n.top-100 {\n  top: 100% !important;\n}\n\n.bottom-0 {\n  bottom: 0 !important;\n}\n\n.bottom-50 {\n  bottom: 50% !important;\n}\n\n.bottom-100 {\n  bottom: 100% !important;\n}\n\n.start-0 {\n  left: 0 !important;\n}\n\n.start-50 {\n  left: 50% !important;\n}\n\n.start-100 {\n  left: 100% !important;\n}\n\n.end-0 {\n  right: 0 !important;\n}\n\n.end-50 {\n  right: 50% !important;\n}\n\n.end-100 {\n  right: 100% !important;\n}\n\n.translate-middle {\n  -webkit-transform: translate(-50%, -50%) !important;\n  transform: translate(-50%, -50%) !important;\n}\n\n.translate-middle-x {\n  -webkit-transform: translateX(-50%) !important;\n  transform: translateX(-50%) !important;\n}\n\n.translate-middle-y {\n  -webkit-transform: translateY(-50%) !important;\n  transform: translateY(-50%) !important;\n}\n\n.border {\n  border: 1px solid #dee2e6 !important;\n}\n\n.border-0 {\n  border: 0 !important;\n}\n\n.border-top {\n  border-top: 1px solid #dee2e6 !important;\n}\n\n.border-top-0 {\n  border-top: 0 !important;\n}\n\n.border-end {\n  border-right: 1px solid #dee2e6 !important;\n}\n\n.border-end-0 {\n  border-right: 0 !important;\n}\n\n.border-bottom {\n  border-bottom: 1px solid #dee2e6 !important;\n}\n\n.border-bottom-0 {\n  border-bottom: 0 !important;\n}\n\n.border-start {\n  border-left: 1px solid #dee2e6 !important;\n}\n\n.border-start-0 {\n  border-left: 0 !important;\n}\n\n.border-primary {\n  border-color: #2a9fd6 !important;\n}\n\n.border-secondary {\n  border-color: #555 !important;\n}\n\n.border-success {\n  border-color: #77b300 !important;\n}\n\n.border-info {\n  border-color: #93c !important;\n}\n\n.border-warning {\n  border-color: #f80 !important;\n}\n\n.border-danger {\n  border-color: #c00 !important;\n}\n\n.border-light {\n  border-color: #222 !important;\n}\n\n.border-dark {\n  border-color: #adafae !important;\n}\n\n.border-white {\n  border-color: #fff !important;\n}\n\n.border-1 {\n  border-width: 1px !important;\n}\n\n.border-2 {\n  border-width: 2px !important;\n}\n\n.border-3 {\n  border-width: 3px !important;\n}\n\n.border-4 {\n  border-width: 4px !important;\n}\n\n.border-5 {\n  border-width: 5px !important;\n}\n\n.w-25 {\n  width: 25% !important;\n}\n\n.w-50 {\n  width: 50% !important;\n}\n\n.w-75 {\n  width: 75% !important;\n}\n\n.w-100 {\n  width: 100% !important;\n}\n\n.w-auto {\n  width: auto !important;\n}\n\n.mw-100 {\n  max-width: 100% !important;\n}\n\n.vw-100 {\n  width: 100vw !important;\n}\n\n.min-vw-100 {\n  min-width: 100vw !important;\n}\n\n.h-25 {\n  height: 25% !important;\n}\n\n.h-50 {\n  height: 50% !important;\n}\n\n.h-75 {\n  height: 75% !important;\n}\n\n.h-100 {\n  height: 100% !important;\n}\n\n.h-auto {\n  height: auto !important;\n}\n\n.mh-100 {\n  max-height: 100% !important;\n}\n\n.vh-100 {\n  height: 100vh !important;\n}\n\n.min-vh-100 {\n  min-height: 100vh !important;\n}\n\n.flex-fill {\n  -ms-flex: 1 1 auto !important;\n  flex: 1 1 auto !important;\n}\n\n.flex-row {\n  -ms-flex-direction: row !important;\n  flex-direction: row !important;\n}\n\n.flex-column {\n  -ms-flex-direction: column !important;\n  flex-direction: column !important;\n}\n\n.flex-row-reverse {\n  -ms-flex-direction: row-reverse !important;\n  flex-direction: row-reverse !important;\n}\n\n.flex-column-reverse {\n  -ms-flex-direction: column-reverse !important;\n  flex-direction: column-reverse !important;\n}\n\n.flex-grow-0 {\n  -ms-flex-positive: 0 !important;\n  flex-grow: 0 !important;\n}\n\n.flex-grow-1 {\n  -ms-flex-positive: 1 !important;\n  flex-grow: 1 !important;\n}\n\n.flex-shrink-0 {\n  -ms-flex-negative: 0 !important;\n  flex-shrink: 0 !important;\n}\n\n.flex-shrink-1 {\n  -ms-flex-negative: 1 !important;\n  flex-shrink: 1 !important;\n}\n\n.flex-wrap {\n  -ms-flex-wrap: wrap !important;\n  flex-wrap: wrap !important;\n}\n\n.flex-nowrap {\n  -ms-flex-wrap: nowrap !important;\n  flex-wrap: nowrap !important;\n}\n\n.flex-wrap-reverse {\n  -ms-flex-wrap: wrap-reverse !important;\n  flex-wrap: wrap-reverse !important;\n}\n\n.gap-0 {\n  gap: 0 !important;\n}\n\n.gap-1 {\n  gap: 0.25rem !important;\n}\n\n.gap-2 {\n  gap: 0.5rem !important;\n}\n\n.gap-3 {\n  gap: 1rem !important;\n}\n\n.gap-4 {\n  gap: 1.5rem !important;\n}\n\n.gap-5 {\n  gap: 3rem !important;\n}\n\n.justify-content-start {\n  -ms-flex-pack: start !important;\n  justify-content: flex-start !important;\n}\n\n.justify-content-end {\n  -ms-flex-pack: end !important;\n  justify-content: flex-end !important;\n}\n\n.justify-content-center {\n  -ms-flex-pack: center !important;\n  justify-content: center !important;\n}\n\n.justify-content-between {\n  -ms-flex-pack: justify !important;\n  justify-content: space-between !important;\n}\n\n.justify-content-around {\n  -ms-flex-pack: distribute !important;\n  justify-content: space-around !important;\n}\n\n.justify-content-evenly {\n  -ms-flex-pack: space-evenly !important;\n  justify-content: space-evenly !important;\n}\n\n.align-items-start {\n  -ms-flex-align: start !important;\n  align-items: flex-start !important;\n}\n\n.align-items-end {\n  -ms-flex-align: end !important;\n  align-items: flex-end !important;\n}\n\n.align-items-center {\n  -ms-flex-align: center !important;\n  align-items: center !important;\n}\n\n.align-items-baseline {\n  -ms-flex-align: baseline !important;\n  align-items: baseline !important;\n}\n\n.align-items-stretch {\n  -ms-flex-align: stretch !important;\n  align-items: stretch !important;\n}\n\n.align-content-start {\n  -ms-flex-line-pack: start !important;\n  align-content: flex-start !important;\n}\n\n.align-content-end {\n  -ms-flex-line-pack: end !important;\n  align-content: flex-end !important;\n}\n\n.align-content-center {\n  -ms-flex-line-pack: center !important;\n  align-content: center !important;\n}\n\n.align-content-between {\n  -ms-flex-line-pack: justify !important;\n  align-content: space-between !important;\n}\n\n.align-content-around {\n  -ms-flex-line-pack: distribute !important;\n  align-content: space-around !important;\n}\n\n.align-content-stretch {\n  -ms-flex-line-pack: stretch !important;\n  align-content: stretch !important;\n}\n\n.align-self-auto {\n  -ms-flex-item-align: auto !important;\n  align-self: auto !important;\n}\n\n.align-self-start {\n  -ms-flex-item-align: start !important;\n  align-self: flex-start !important;\n}\n\n.align-self-end {\n  -ms-flex-item-align: end !important;\n  align-self: flex-end !important;\n}\n\n.align-self-center {\n  -ms-flex-item-align: center !important;\n  align-self: center !important;\n}\n\n.align-self-baseline {\n  -ms-flex-item-align: baseline !important;\n  align-self: baseline !important;\n}\n\n.align-self-stretch {\n  -ms-flex-item-align: stretch !important;\n  align-self: stretch !important;\n}\n\n.order-first {\n  -ms-flex-order: -1 !important;\n  order: -1 !important;\n}\n\n.order-0 {\n  -ms-flex-order: 0 !important;\n  order: 0 !important;\n}\n\n.order-1 {\n  -ms-flex-order: 1 !important;\n  order: 1 !important;\n}\n\n.order-2 {\n  -ms-flex-order: 2 !important;\n  order: 2 !important;\n}\n\n.order-3 {\n  -ms-flex-order: 3 !important;\n  order: 3 !important;\n}\n\n.order-4 {\n  -ms-flex-order: 4 !important;\n  order: 4 !important;\n}\n\n.order-5 {\n  -ms-flex-order: 5 !important;\n  order: 5 !important;\n}\n\n.order-last {\n  -ms-flex-order: 6 !important;\n  order: 6 !important;\n}\n\n.m-0 {\n  margin: 0 !important;\n}\n\n.m-1 {\n  margin: 0.25rem !important;\n}\n\n.m-2 {\n  margin: 0.5rem !important;\n}\n\n.m-3 {\n  margin: 1rem !important;\n}\n\n.m-4 {\n  margin: 1.5rem !important;\n}\n\n.m-5 {\n  margin: 3rem !important;\n}\n\n.m-auto {\n  margin: auto !important;\n}\n\n.mx-0 {\n  margin-right: 0 !important;\n  margin-left: 0 !important;\n}\n\n.mx-1 {\n  margin-right: 0.25rem !important;\n  margin-left: 0.25rem !important;\n}\n\n.mx-2 {\n  margin-right: 0.5rem !important;\n  margin-left: 0.5rem !important;\n}\n\n.mx-3 {\n  margin-right: 1rem !important;\n  margin-left: 1rem !important;\n}\n\n.mx-4 {\n  margin-right: 1.5rem !important;\n  margin-left: 1.5rem !important;\n}\n\n.mx-5 {\n  margin-right: 3rem !important;\n  margin-left: 3rem !important;\n}\n\n.mx-auto {\n  margin-right: auto !important;\n  margin-left: auto !important;\n}\n\n.my-0 {\n  margin-top: 0 !important;\n  margin-bottom: 0 !important;\n}\n\n.my-1 {\n  margin-top: 0.25rem !important;\n  margin-bottom: 0.25rem !important;\n}\n\n.my-2 {\n  margin-top: 0.5rem !important;\n  margin-bottom: 0.5rem !important;\n}\n\n.my-3 {\n  margin-top: 1rem !important;\n  margin-bottom: 1rem !important;\n}\n\n.my-4 {\n  margin-top: 1.5rem !important;\n  margin-bottom: 1.5rem !important;\n}\n\n.my-5 {\n  margin-top: 3rem !important;\n  margin-bottom: 3rem !important;\n}\n\n.my-auto {\n  margin-top: auto !important;\n  margin-bottom: auto !important;\n}\n\n.mt-0 {\n  margin-top: 0 !important;\n}\n\n.mt-1 {\n  margin-top: 0.25rem !important;\n}\n\n.mt-2 {\n  margin-top: 0.5rem !important;\n}\n\n.mt-3 {\n  margin-top: 1rem !important;\n}\n\n.mt-4 {\n  margin-top: 1.5rem !important;\n}\n\n.mt-5 {\n  margin-top: 3rem !important;\n}\n\n.mt-auto {\n  margin-top: auto !important;\n}\n\n.me-0 {\n  margin-right: 0 !important;\n}\n\n.me-1 {\n  margin-right: 0.25rem !important;\n}\n\n.me-2 {\n  margin-right: 0.5rem !important;\n}\n\n.me-3 {\n  margin-right: 1rem !important;\n}\n\n.me-4 {\n  margin-right: 1.5rem !important;\n}\n\n.me-5 {\n  margin-right: 3rem !important;\n}\n\n.me-auto {\n  margin-right: auto !important;\n}\n\n.mb-0 {\n  margin-bottom: 0 !important;\n}\n\n.mb-1 {\n  margin-bottom: 0.25rem !important;\n}\n\n.mb-2 {\n  margin-bottom: 0.5rem !important;\n}\n\n.mb-3 {\n  margin-bottom: 1rem !important;\n}\n\n.mb-4 {\n  margin-bottom: 1.5rem !important;\n}\n\n.mb-5 {\n  margin-bottom: 3rem !important;\n}\n\n.mb-auto {\n  margin-bottom: auto !important;\n}\n\n.ms-0 {\n  margin-left: 0 !important;\n}\n\n.ms-1 {\n  margin-left: 0.25rem !important;\n}\n\n.ms-2 {\n  margin-left: 0.5rem !important;\n}\n\n.ms-3 {\n  margin-left: 1rem !important;\n}\n\n.ms-4 {\n  margin-left: 1.5rem !important;\n}\n\n.ms-5 {\n  margin-left: 3rem !important;\n}\n\n.ms-auto {\n  margin-left: auto !important;\n}\n\n.p-0 {\n  padding: 0 !important;\n}\n\n.p-1 {\n  padding: 0.25rem !important;\n}\n\n.p-2 {\n  padding: 0.5rem !important;\n}\n\n.p-3 {\n  padding: 1rem !important;\n}\n\n.p-4 {\n  padding: 1.5rem !important;\n}\n\n.p-5 {\n  padding: 3rem !important;\n}\n\n.px-0 {\n  padding-right: 0 !important;\n  padding-left: 0 !important;\n}\n\n.px-1 {\n  padding-right: 0.25rem !important;\n  padding-left: 0.25rem !important;\n}\n\n.px-2 {\n  padding-right: 0.5rem !important;\n  padding-left: 0.5rem !important;\n}\n\n.px-3 {\n  padding-right: 1rem !important;\n  padding-left: 1rem !important;\n}\n\n.px-4 {\n  padding-right: 1.5rem !important;\n  padding-left: 1.5rem !important;\n}\n\n.px-5 {\n  padding-right: 3rem !important;\n  padding-left: 3rem !important;\n}\n\n.py-0 {\n  padding-top: 0 !important;\n  padding-bottom: 0 !important;\n}\n\n.py-1 {\n  padding-top: 0.25rem !important;\n  padding-bottom: 0.25rem !important;\n}\n\n.py-2 {\n  padding-top: 0.5rem !important;\n  padding-bottom: 0.5rem !important;\n}\n\n.py-3 {\n  padding-top: 1rem !important;\n  padding-bottom: 1rem !important;\n}\n\n.py-4 {\n  padding-top: 1.5rem !important;\n  padding-bottom: 1.5rem !important;\n}\n\n.py-5 {\n  padding-top: 3rem !important;\n  padding-bottom: 3rem !important;\n}\n\n.pt-0 {\n  padding-top: 0 !important;\n}\n\n.pt-1 {\n  padding-top: 0.25rem !important;\n}\n\n.pt-2 {\n  padding-top: 0.5rem !important;\n}\n\n.pt-3 {\n  padding-top: 1rem !important;\n}\n\n.pt-4 {\n  padding-top: 1.5rem !important;\n}\n\n.pt-5 {\n  padding-top: 3rem !important;\n}\n\n.pe-0 {\n  padding-right: 0 !important;\n}\n\n.pe-1 {\n  padding-right: 0.25rem !important;\n}\n\n.pe-2 {\n  padding-right: 0.5rem !important;\n}\n\n.pe-3 {\n  padding-right: 1rem !important;\n}\n\n.pe-4 {\n  padding-right: 1.5rem !important;\n}\n\n.pe-5 {\n  padding-right: 3rem !important;\n}\n\n.pb-0 {\n  padding-bottom: 0 !important;\n}\n\n.pb-1 {\n  padding-bottom: 0.25rem !important;\n}\n\n.pb-2 {\n  padding-bottom: 0.5rem !important;\n}\n\n.pb-3 {\n  padding-bottom: 1rem !important;\n}\n\n.pb-4 {\n  padding-bottom: 1.5rem !important;\n}\n\n.pb-5 {\n  padding-bottom: 3rem !important;\n}\n\n.ps-0 {\n  padding-left: 0 !important;\n}\n\n.ps-1 {\n  padding-left: 0.25rem !important;\n}\n\n.ps-2 {\n  padding-left: 0.5rem !important;\n}\n\n.ps-3 {\n  padding-left: 1rem !important;\n}\n\n.ps-4 {\n  padding-left: 1.5rem !important;\n}\n\n.ps-5 {\n  padding-left: 3rem !important;\n}\n\n.font-monospace {\n  font-family: var(--bs-font-monospace) !important;\n}\n\n.fs-1 {\n  font-size: calc(1.525rem + 3.3vw) !important;\n}\n\n.fs-2 {\n  font-size: calc(1.425rem + 2.1vw) !important;\n}\n\n.fs-3 {\n  font-size: calc(1.375rem + 1.5vw) !important;\n}\n\n.fs-4 {\n  font-size: calc(1.325rem + 0.9vw) !important;\n}\n\n.fs-5 {\n  font-size: calc(1.275rem + 0.3vw) !important;\n}\n\n.fs-6 {\n  font-size: 1rem !important;\n}\n\n.fst-italic {\n  font-style: italic !important;\n}\n\n.fst-normal {\n  font-style: normal !important;\n}\n\n.fw-light {\n  font-weight: 300 !important;\n}\n\n.fw-lighter {\n  font-weight: lighter !important;\n}\n\n.fw-normal {\n  font-weight: 400 !important;\n}\n\n.fw-bold {\n  font-weight: 700 !important;\n}\n\n.fw-bolder {\n  font-weight: bolder !important;\n}\n\n.lh-1 {\n  line-height: 1 !important;\n}\n\n.lh-sm {\n  line-height: 1.25 !important;\n}\n\n.lh-base {\n  line-height: 1.5 !important;\n}\n\n.lh-lg {\n  line-height: 2 !important;\n}\n\n.text-start {\n  text-align: left !important;\n}\n\n.text-end {\n  text-align: right !important;\n}\n\n.text-center {\n  text-align: center !important;\n}\n\n.text-decoration-none {\n  text-decoration: none !important;\n}\n\n.text-decoration-underline {\n  text-decoration: underline !important;\n}\n\n.text-decoration-line-through {\n  text-decoration: line-through !important;\n}\n\n.text-lowercase {\n  text-transform: lowercase !important;\n}\n\n.text-uppercase {\n  text-transform: uppercase !important;\n}\n\n.text-capitalize {\n  text-transform: capitalize !important;\n}\n\n.text-wrap {\n  white-space: normal !important;\n}\n\n.text-nowrap {\n  white-space: nowrap !important;\n}\n\n/* rtl:begin:remove */\n.text-break {\n  word-wrap: break-word !important;\n  word-break: break-word !important;\n}\n\n/* rtl:end:remove */\n.text-primary {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-primary-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-secondary {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-secondary-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-success {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-success-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-info {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-info-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-warning {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-warning-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-danger {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-danger-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-light {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-light-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-dark {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-dark-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-black {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-black-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-white {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-white-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-body {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-body-color-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-muted {\n  --bs-text-opacity: 1;\n  color: #555 !important;\n}\n\n.text-black-50 {\n  --bs-text-opacity: 1;\n  color: rgba(0, 0, 0, 0.5) !important;\n}\n\n.text-white-50 {\n  --bs-text-opacity: 1;\n  color: rgba(255, 255, 255, 0.5) !important;\n}\n\n.text-reset {\n  --bs-text-opacity: 1;\n  color: inherit !important;\n}\n\n.text-opacity-25 {\n  --bs-text-opacity: 0.25;\n}\n\n.text-opacity-50 {\n  --bs-text-opacity: 0.5;\n}\n\n.text-opacity-75 {\n  --bs-text-opacity: 0.75;\n}\n\n.text-opacity-100 {\n  --bs-text-opacity: 1;\n}\n\n.bg-primary {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-primary-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-secondary {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-secondary-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-success {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-success-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-info {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-info-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-warning {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-warning-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-danger {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-danger-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-light {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-light-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-dark {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-dark-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-black {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-black-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-white {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-white-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-body {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-body-bg-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-transparent {\n  --bs-bg-opacity: 1;\n  background-color: transparent !important;\n}\n\n.bg-opacity-10 {\n  --bs-bg-opacity: 0.1;\n}\n\n.bg-opacity-25 {\n  --bs-bg-opacity: 0.25;\n}\n\n.bg-opacity-50 {\n  --bs-bg-opacity: 0.5;\n}\n\n.bg-opacity-75 {\n  --bs-bg-opacity: 0.75;\n}\n\n.bg-opacity-100 {\n  --bs-bg-opacity: 1;\n}\n\n.bg-gradient {\n  background-image: var(--bs-gradient) !important;\n}\n\n.user-select-all {\n  -webkit-user-select: all !important;\n  -moz-user-select: all !important;\n  user-select: all !important;\n}\n\n.user-select-auto {\n  -webkit-user-select: auto !important;\n  -moz-user-select: auto !important;\n  -ms-user-select: auto !important;\n  user-select: auto !important;\n}\n\n.user-select-none {\n  -webkit-user-select: none !important;\n  -moz-user-select: none !important;\n  -ms-user-select: none !important;\n  user-select: none !important;\n}\n\n.pe-none {\n  pointer-events: none !important;\n}\n\n.pe-auto {\n  pointer-events: auto !important;\n}\n\n.rounded {\n  border-radius: 0.25rem !important;\n}\n\n.rounded-0 {\n  border-radius: 0 !important;\n}\n\n.rounded-1 {\n  border-radius: 0.2rem !important;\n}\n\n.rounded-2 {\n  border-radius: 0.25rem !important;\n}\n\n.rounded-3 {\n  border-radius: 0.3rem !important;\n}\n\n.rounded-circle {\n  border-radius: 50% !important;\n}\n\n.rounded-pill {\n  border-radius: 50rem !important;\n}\n\n.rounded-top {\n  border-top-left-radius: 0.25rem !important;\n  border-top-right-radius: 0.25rem !important;\n}\n\n.rounded-end {\n  border-top-right-radius: 0.25rem !important;\n  border-bottom-right-radius: 0.25rem !important;\n}\n\n.rounded-bottom {\n  border-bottom-right-radius: 0.25rem !important;\n  border-bottom-left-radius: 0.25rem !important;\n}\n\n.rounded-start {\n  border-bottom-left-radius: 0.25rem !important;\n  border-top-left-radius: 0.25rem !important;\n}\n\n.visible {\n  visibility: visible !important;\n}\n\n.invisible {\n  visibility: hidden !important;\n}\n\n@media (min-width: 576px) {\n  .float-sm-start {\n    float: left !important;\n  }\n  .float-sm-end {\n    float: right !important;\n  }\n  .float-sm-none {\n    float: none !important;\n  }\n  .d-sm-inline {\n    display: inline !important;\n  }\n  .d-sm-inline-block {\n    display: inline-block !important;\n  }\n  .d-sm-block {\n    display: block !important;\n  }\n  .d-sm-grid {\n    display: grid !important;\n  }\n  .d-sm-table {\n    display: table !important;\n  }\n  .d-sm-table-row {\n    display: table-row !important;\n  }\n  .d-sm-table-cell {\n    display: table-cell !important;\n  }\n  .d-sm-flex {\n    display: -ms-flexbox !important;\n    display: flex !important;\n  }\n  .d-sm-inline-flex {\n    display: -ms-inline-flexbox !important;\n    display: inline-flex !important;\n  }\n  .d-sm-none {\n    display: none !important;\n  }\n  .flex-sm-fill {\n    -ms-flex: 1 1 auto !important;\n    flex: 1 1 auto !important;\n  }\n  .flex-sm-row {\n    -ms-flex-direction: row !important;\n    flex-direction: row !important;\n  }\n  .flex-sm-column {\n    -ms-flex-direction: column !important;\n    flex-direction: column !important;\n  }\n  .flex-sm-row-reverse {\n    -ms-flex-direction: row-reverse !important;\n    flex-direction: row-reverse !important;\n  }\n  .flex-sm-column-reverse {\n    -ms-flex-direction: column-reverse !important;\n    flex-direction: column-reverse !important;\n  }\n  .flex-sm-grow-0 {\n    -ms-flex-positive: 0 !important;\n    flex-grow: 0 !important;\n  }\n  .flex-sm-grow-1 {\n    -ms-flex-positive: 1 !important;\n    flex-grow: 1 !important;\n  }\n  .flex-sm-shrink-0 {\n    -ms-flex-negative: 0 !important;\n    flex-shrink: 0 !important;\n  }\n  .flex-sm-shrink-1 {\n    -ms-flex-negative: 1 !important;\n    flex-shrink: 1 !important;\n  }\n  .flex-sm-wrap {\n    -ms-flex-wrap: wrap !important;\n    flex-wrap: wrap !important;\n  }\n  .flex-sm-nowrap {\n    -ms-flex-wrap: nowrap !important;\n    flex-wrap: nowrap !important;\n  }\n  .flex-sm-wrap-reverse {\n    -ms-flex-wrap: wrap-reverse !important;\n    flex-wrap: wrap-reverse !important;\n  }\n  .gap-sm-0 {\n    gap: 0 !important;\n  }\n  .gap-sm-1 {\n    gap: 0.25rem !important;\n  }\n  .gap-sm-2 {\n    gap: 0.5rem !important;\n  }\n  .gap-sm-3 {\n    gap: 1rem !important;\n  }\n  .gap-sm-4 {\n    gap: 1.5rem !important;\n  }\n  .gap-sm-5 {\n    gap: 3rem !important;\n  }\n  .justify-content-sm-start {\n    -ms-flex-pack: start !important;\n    justify-content: flex-start !important;\n  }\n  .justify-content-sm-end {\n    -ms-flex-pack: end !important;\n    justify-content: flex-end !important;\n  }\n  .justify-content-sm-center {\n    -ms-flex-pack: center !important;\n    justify-content: center !important;\n  }\n  .justify-content-sm-between {\n    -ms-flex-pack: justify !important;\n    justify-content: space-between !important;\n  }\n  .justify-content-sm-around {\n    -ms-flex-pack: distribute !important;\n    justify-content: space-around !important;\n  }\n  .justify-content-sm-evenly {\n    -ms-flex-pack: space-evenly !important;\n    justify-content: space-evenly !important;\n  }\n  .align-items-sm-start {\n    -ms-flex-align: start !important;\n    align-items: flex-start !important;\n  }\n  .align-items-sm-end {\n    -ms-flex-align: end !important;\n    align-items: flex-end !important;\n  }\n  .align-items-sm-center {\n    -ms-flex-align: center !important;\n    align-items: center !important;\n  }\n  .align-items-sm-baseline {\n    -ms-flex-align: baseline !important;\n    align-items: baseline !important;\n  }\n  .align-items-sm-stretch {\n    -ms-flex-align: stretch !important;\n    align-items: stretch !important;\n  }\n  .align-content-sm-start {\n    -ms-flex-line-pack: start !important;\n    align-content: flex-start !important;\n  }\n  .align-content-sm-end {\n    -ms-flex-line-pack: end !important;\n    align-content: flex-end !important;\n  }\n  .align-content-sm-center {\n    -ms-flex-line-pack: center !important;\n    align-content: center !important;\n  }\n  .align-content-sm-between {\n    -ms-flex-line-pack: justify !important;\n    align-content: space-between !important;\n  }\n  .align-content-sm-around {\n    -ms-flex-line-pack: distribute !important;\n    align-content: space-around !important;\n  }\n  .align-content-sm-stretch {\n    -ms-flex-line-pack: stretch !important;\n    align-content: stretch !important;\n  }\n  .align-self-sm-auto {\n    -ms-flex-item-align: auto !important;\n    align-self: auto !important;\n  }\n  .align-self-sm-start {\n    -ms-flex-item-align: start !important;\n    align-self: flex-start !important;\n  }\n  .align-self-sm-end {\n    -ms-flex-item-align: end !important;\n    align-self: flex-end !important;\n  }\n  .align-self-sm-center {\n    -ms-flex-item-align: center !important;\n    align-self: center !important;\n  }\n  .align-self-sm-baseline {\n    -ms-flex-item-align: baseline !important;\n    align-self: baseline !important;\n  }\n  .align-self-sm-stretch {\n    -ms-flex-item-align: stretch !important;\n    align-self: stretch !important;\n  }\n  .order-sm-first {\n    -ms-flex-order: -1 !important;\n    order: -1 !important;\n  }\n  .order-sm-0 {\n    -ms-flex-order: 0 !important;\n    order: 0 !important;\n  }\n  .order-sm-1 {\n    -ms-flex-order: 1 !important;\n    order: 1 !important;\n  }\n  .order-sm-2 {\n    -ms-flex-order: 2 !important;\n    order: 2 !important;\n  }\n  .order-sm-3 {\n    -ms-flex-order: 3 !important;\n    order: 3 !important;\n  }\n  .order-sm-4 {\n    -ms-flex-order: 4 !important;\n    order: 4 !important;\n  }\n  .order-sm-5 {\n    -ms-flex-order: 5 !important;\n    order: 5 !important;\n  }\n  .order-sm-last {\n    -ms-flex-order: 6 !important;\n    order: 6 !important;\n  }\n  .m-sm-0 {\n    margin: 0 !important;\n  }\n  .m-sm-1 {\n    margin: 0.25rem !important;\n  }\n  .m-sm-2 {\n    margin: 0.5rem !important;\n  }\n  .m-sm-3 {\n    margin: 1rem !important;\n  }\n  .m-sm-4 {\n    margin: 1.5rem !important;\n  }\n  .m-sm-5 {\n    margin: 3rem !important;\n  }\n  .m-sm-auto {\n    margin: auto !important;\n  }\n  .mx-sm-0 {\n    margin-right: 0 !important;\n    margin-left: 0 !important;\n  }\n  .mx-sm-1 {\n    margin-right: 0.25rem !important;\n    margin-left: 0.25rem !important;\n  }\n  .mx-sm-2 {\n    margin-right: 0.5rem !important;\n    margin-left: 0.5rem !important;\n  }\n  .mx-sm-3 {\n    margin-right: 1rem !important;\n    margin-left: 1rem !important;\n  }\n  .mx-sm-4 {\n    margin-right: 1.5rem !important;\n    margin-left: 1.5rem !important;\n  }\n  .mx-sm-5 {\n    margin-right: 3rem !important;\n    margin-left: 3rem !important;\n  }\n  .mx-sm-auto {\n    margin-right: auto !important;\n    margin-left: auto !important;\n  }\n  .my-sm-0 {\n    margin-top: 0 !important;\n    margin-bottom: 0 !important;\n  }\n  .my-sm-1 {\n    margin-top: 0.25rem !important;\n    margin-bottom: 0.25rem !important;\n  }\n  .my-sm-2 {\n    margin-top: 0.5rem !important;\n    margin-bottom: 0.5rem !important;\n  }\n  .my-sm-3 {\n    margin-top: 1rem !important;\n    margin-bottom: 1rem !important;\n  }\n  .my-sm-4 {\n    margin-top: 1.5rem !important;\n    margin-bottom: 1.5rem !important;\n  }\n  .my-sm-5 {\n    margin-top: 3rem !important;\n    margin-bottom: 3rem !important;\n  }\n  .my-sm-auto {\n    margin-top: auto !important;\n    margin-bottom: auto !important;\n  }\n  .mt-sm-0 {\n    margin-top: 0 !important;\n  }\n  .mt-sm-1 {\n    margin-top: 0.25rem !important;\n  }\n  .mt-sm-2 {\n    margin-top: 0.5rem !important;\n  }\n  .mt-sm-3 {\n    margin-top: 1rem !important;\n  }\n  .mt-sm-4 {\n    margin-top: 1.5rem !important;\n  }\n  .mt-sm-5 {\n    margin-top: 3rem !important;\n  }\n  .mt-sm-auto {\n    margin-top: auto !important;\n  }\n  .me-sm-0 {\n    margin-right: 0 !important;\n  }\n  .me-sm-1 {\n    margin-right: 0.25rem !important;\n  }\n  .me-sm-2 {\n    margin-right: 0.5rem !important;\n  }\n  .me-sm-3 {\n    margin-right: 1rem !important;\n  }\n  .me-sm-4 {\n    margin-right: 1.5rem !important;\n  }\n  .me-sm-5 {\n    margin-right: 3rem !important;\n  }\n  .me-sm-auto {\n    margin-right: auto !important;\n  }\n  .mb-sm-0 {\n    margin-bottom: 0 !important;\n  }\n  .mb-sm-1 {\n    margin-bottom: 0.25rem !important;\n  }\n  .mb-sm-2 {\n    margin-bottom: 0.5rem !important;\n  }\n  .mb-sm-3 {\n    margin-bottom: 1rem !important;\n  }\n  .mb-sm-4 {\n    margin-bottom: 1.5rem !important;\n  }\n  .mb-sm-5 {\n    margin-bottom: 3rem !important;\n  }\n  .mb-sm-auto {\n    margin-bottom: auto !important;\n  }\n  .ms-sm-0 {\n    margin-left: 0 !important;\n  }\n  .ms-sm-1 {\n    margin-left: 0.25rem !important;\n  }\n  .ms-sm-2 {\n    margin-left: 0.5rem !important;\n  }\n  .ms-sm-3 {\n    margin-left: 1rem !important;\n  }\n  .ms-sm-4 {\n    margin-left: 1.5rem !important;\n  }\n  .ms-sm-5 {\n    margin-left: 3rem !important;\n  }\n  .ms-sm-auto {\n    margin-left: auto !important;\n  }\n  .p-sm-0 {\n    padding: 0 !important;\n  }\n  .p-sm-1 {\n    padding: 0.25rem !important;\n  }\n  .p-sm-2 {\n    padding: 0.5rem !important;\n  }\n  .p-sm-3 {\n    padding: 1rem !important;\n  }\n  .p-sm-4 {\n    padding: 1.5rem !important;\n  }\n  .p-sm-5 {\n    padding: 3rem !important;\n  }\n  .px-sm-0 {\n    padding-right: 0 !important;\n    padding-left: 0 !important;\n  }\n  .px-sm-1 {\n    padding-right: 0.25rem !important;\n    padding-left: 0.25rem !important;\n  }\n  .px-sm-2 {\n    padding-right: 0.5rem !important;\n    padding-left: 0.5rem !important;\n  }\n  .px-sm-3 {\n    padding-right: 1rem !important;\n    padding-left: 1rem !important;\n  }\n  .px-sm-4 {\n    padding-right: 1.5rem !important;\n    padding-left: 1.5rem !important;\n  }\n  .px-sm-5 {\n    padding-right: 3rem !important;\n    padding-left: 3rem !important;\n  }\n  .py-sm-0 {\n    padding-top: 0 !important;\n    padding-bottom: 0 !important;\n  }\n  .py-sm-1 {\n    padding-top: 0.25rem !important;\n    padding-bottom: 0.25rem !important;\n  }\n  .py-sm-2 {\n    padding-top: 0.5rem !important;\n    padding-bottom: 0.5rem !important;\n  }\n  .py-sm-3 {\n    padding-top: 1rem !important;\n    padding-bottom: 1rem !important;\n  }\n  .py-sm-4 {\n    padding-top: 1.5rem !important;\n    padding-bottom: 1.5rem !important;\n  }\n  .py-sm-5 {\n    padding-top: 3rem !important;\n    padding-bottom: 3rem !important;\n  }\n  .pt-sm-0 {\n    padding-top: 0 !important;\n  }\n  .pt-sm-1 {\n    padding-top: 0.25rem !important;\n  }\n  .pt-sm-2 {\n    padding-top: 0.5rem !important;\n  }\n  .pt-sm-3 {\n    padding-top: 1rem !important;\n  }\n  .pt-sm-4 {\n    padding-top: 1.5rem !important;\n  }\n  .pt-sm-5 {\n    padding-top: 3rem !important;\n  }\n  .pe-sm-0 {\n    padding-right: 0 !important;\n  }\n  .pe-sm-1 {\n    padding-right: 0.25rem !important;\n  }\n  .pe-sm-2 {\n    padding-right: 0.5rem !important;\n  }\n  .pe-sm-3 {\n    padding-right: 1rem !important;\n  }\n  .pe-sm-4 {\n    padding-right: 1.5rem !important;\n  }\n  .pe-sm-5 {\n    padding-right: 3rem !important;\n  }\n  .pb-sm-0 {\n    padding-bottom: 0 !important;\n  }\n  .pb-sm-1 {\n    padding-bottom: 0.25rem !important;\n  }\n  .pb-sm-2 {\n    padding-bottom: 0.5rem !important;\n  }\n  .pb-sm-3 {\n    padding-bottom: 1rem !important;\n  }\n  .pb-sm-4 {\n    padding-bottom: 1.5rem !important;\n  }\n  .pb-sm-5 {\n    padding-bottom: 3rem !important;\n  }\n  .ps-sm-0 {\n    padding-left: 0 !important;\n  }\n  .ps-sm-1 {\n    padding-left: 0.25rem !important;\n  }\n  .ps-sm-2 {\n    padding-left: 0.5rem !important;\n  }\n  .ps-sm-3 {\n    padding-left: 1rem !important;\n  }\n  .ps-sm-4 {\n    padding-left: 1.5rem !important;\n  }\n  .ps-sm-5 {\n    padding-left: 3rem !important;\n  }\n  .text-sm-start {\n    text-align: left !important;\n  }\n  .text-sm-end {\n    text-align: right !important;\n  }\n  .text-sm-center {\n    text-align: center !important;\n  }\n}\n\n@media (min-width: 768px) {\n  .float-md-start {\n    float: left !important;\n  }\n  .float-md-end {\n    float: right !important;\n  }\n  .float-md-none {\n    float: none !important;\n  }\n  .d-md-inline {\n    display: inline !important;\n  }\n  .d-md-inline-block {\n    display: inline-block !important;\n  }\n  .d-md-block {\n    display: block !important;\n  }\n  .d-md-grid {\n    display: grid !important;\n  }\n  .d-md-table {\n    display: table !important;\n  }\n  .d-md-table-row {\n    display: table-row !important;\n  }\n  .d-md-table-cell {\n    display: table-cell !important;\n  }\n  .d-md-flex {\n    display: -ms-flexbox !important;\n    display: flex !important;\n  }\n  .d-md-inline-flex {\n    display: -ms-inline-flexbox !important;\n    display: inline-flex !important;\n  }\n  .d-md-none {\n    display: none !important;\n  }\n  .flex-md-fill {\n    -ms-flex: 1 1 auto !important;\n    flex: 1 1 auto !important;\n  }\n  .flex-md-row {\n    -ms-flex-direction: row !important;\n    flex-direction: row !important;\n  }\n  .flex-md-column {\n    -ms-flex-direction: column !important;\n    flex-direction: column !important;\n  }\n  .flex-md-row-reverse {\n    -ms-flex-direction: row-reverse !important;\n    flex-direction: row-reverse !important;\n  }\n  .flex-md-column-reverse {\n    -ms-flex-direction: column-reverse !important;\n    flex-direction: column-reverse !important;\n  }\n  .flex-md-grow-0 {\n    -ms-flex-positive: 0 !important;\n    flex-grow: 0 !important;\n  }\n  .flex-md-grow-1 {\n    -ms-flex-positive: 1 !important;\n    flex-grow: 1 !important;\n  }\n  .flex-md-shrink-0 {\n    -ms-flex-negative: 0 !important;\n    flex-shrink: 0 !important;\n  }\n  .flex-md-shrink-1 {\n    -ms-flex-negative: 1 !important;\n    flex-shrink: 1 !important;\n  }\n  .flex-md-wrap {\n    -ms-flex-wrap: wrap !important;\n    flex-wrap: wrap !important;\n  }\n  .flex-md-nowrap {\n    -ms-flex-wrap: nowrap !important;\n    flex-wrap: nowrap !important;\n  }\n  .flex-md-wrap-reverse {\n    -ms-flex-wrap: wrap-reverse !important;\n    flex-wrap: wrap-reverse !important;\n  }\n  .gap-md-0 {\n    gap: 0 !important;\n  }\n  .gap-md-1 {\n    gap: 0.25rem !important;\n  }\n  .gap-md-2 {\n    gap: 0.5rem !important;\n  }\n  .gap-md-3 {\n    gap: 1rem !important;\n  }\n  .gap-md-4 {\n    gap: 1.5rem !important;\n  }\n  .gap-md-5 {\n    gap: 3rem !important;\n  }\n  .justify-content-md-start {\n    -ms-flex-pack: start !important;\n    justify-content: flex-start !important;\n  }\n  .justify-content-md-end {\n    -ms-flex-pack: end !important;\n    justify-content: flex-end !important;\n  }\n  .justify-content-md-center {\n    -ms-flex-pack: center !important;\n    justify-content: center !important;\n  }\n  .justify-content-md-between {\n    -ms-flex-pack: justify !important;\n    justify-content: space-between !important;\n  }\n  .justify-content-md-around {\n    -ms-flex-pack: distribute !important;\n    justify-content: space-around !important;\n  }\n  .justify-content-md-evenly {\n    -ms-flex-pack: space-evenly !important;\n    justify-content: space-evenly !important;\n  }\n  .align-items-md-start {\n    -ms-flex-align: start !important;\n    align-items: flex-start !important;\n  }\n  .align-items-md-end {\n    -ms-flex-align: end !important;\n    align-items: flex-end !important;\n  }\n  .align-items-md-center {\n    -ms-flex-align: center !important;\n    align-items: center !important;\n  }\n  .align-items-md-baseline {\n    -ms-flex-align: baseline !important;\n    align-items: baseline !important;\n  }\n  .align-items-md-stretch {\n    -ms-flex-align: stretch !important;\n    align-items: stretch !important;\n  }\n  .align-content-md-start {\n    -ms-flex-line-pack: start !important;\n    align-content: flex-start !important;\n  }\n  .align-content-md-end {\n    -ms-flex-line-pack: end !important;\n    align-content: flex-end !important;\n  }\n  .align-content-md-center {\n    -ms-flex-line-pack: center !important;\n    align-content: center !important;\n  }\n  .align-content-md-between {\n    -ms-flex-line-pack: justify !important;\n    align-content: space-between !important;\n  }\n  .align-content-md-around {\n    -ms-flex-line-pack: distribute !important;\n    align-content: space-around !important;\n  }\n  .align-content-md-stretch {\n    -ms-flex-line-pack: stretch !important;\n    align-content: stretch !important;\n  }\n  .align-self-md-auto {\n    -ms-flex-item-align: auto !important;\n    align-self: auto !important;\n  }\n  .align-self-md-start {\n    -ms-flex-item-align: start !important;\n    align-self: flex-start !important;\n  }\n  .align-self-md-end {\n    -ms-flex-item-align: end !important;\n    align-self: flex-end !important;\n  }\n  .align-self-md-center {\n    -ms-flex-item-align: center !important;\n    align-self: center !important;\n  }\n  .align-self-md-baseline {\n    -ms-flex-item-align: baseline !important;\n    align-self: baseline !important;\n  }\n  .align-self-md-stretch {\n    -ms-flex-item-align: stretch !important;\n    align-self: stretch !important;\n  }\n  .order-md-first {\n    -ms-flex-order: -1 !important;\n    order: -1 !important;\n  }\n  .order-md-0 {\n    -ms-flex-order: 0 !important;\n    order: 0 !important;\n  }\n  .order-md-1 {\n    -ms-flex-order: 1 !important;\n    order: 1 !important;\n  }\n  .order-md-2 {\n    -ms-flex-order: 2 !important;\n    order: 2 !important;\n  }\n  .order-md-3 {\n    -ms-flex-order: 3 !important;\n    order: 3 !important;\n  }\n  .order-md-4 {\n    -ms-flex-order: 4 !important;\n    order: 4 !important;\n  }\n  .order-md-5 {\n    -ms-flex-order: 5 !important;\n    order: 5 !important;\n  }\n  .order-md-last {\n    -ms-flex-order: 6 !important;\n    order: 6 !important;\n  }\n  .m-md-0 {\n    margin: 0 !important;\n  }\n  .m-md-1 {\n    margin: 0.25rem !important;\n  }\n  .m-md-2 {\n    margin: 0.5rem !important;\n  }\n  .m-md-3 {\n    margin: 1rem !important;\n  }\n  .m-md-4 {\n    margin: 1.5rem !important;\n  }\n  .m-md-5 {\n    margin: 3rem !important;\n  }\n  .m-md-auto {\n    margin: auto !important;\n  }\n  .mx-md-0 {\n    margin-right: 0 !important;\n    margin-left: 0 !important;\n  }\n  .mx-md-1 {\n    margin-right: 0.25rem !important;\n    margin-left: 0.25rem !important;\n  }\n  .mx-md-2 {\n    margin-right: 0.5rem !important;\n    margin-left: 0.5rem !important;\n  }\n  .mx-md-3 {\n    margin-right: 1rem !important;\n    margin-left: 1rem !important;\n  }\n  .mx-md-4 {\n    margin-right: 1.5rem !important;\n    margin-left: 1.5rem !important;\n  }\n  .mx-md-5 {\n    margin-right: 3rem !important;\n    margin-left: 3rem !important;\n  }\n  .mx-md-auto {\n    margin-right: auto !important;\n    margin-left: auto !important;\n  }\n  .my-md-0 {\n    margin-top: 0 !important;\n    margin-bottom: 0 !important;\n  }\n  .my-md-1 {\n    margin-top: 0.25rem !important;\n    margin-bottom: 0.25rem !important;\n  }\n  .my-md-2 {\n    margin-top: 0.5rem !important;\n    margin-bottom: 0.5rem !important;\n  }\n  .my-md-3 {\n    margin-top: 1rem !important;\n    margin-bottom: 1rem !important;\n  }\n  .my-md-4 {\n    margin-top: 1.5rem !important;\n    margin-bottom: 1.5rem !important;\n  }\n  .my-md-5 {\n    margin-top: 3rem !important;\n    margin-bottom: 3rem !important;\n  }\n  .my-md-auto {\n    margin-top: auto !important;\n    margin-bottom: auto !important;\n  }\n  .mt-md-0 {\n    margin-top: 0 !important;\n  }\n  .mt-md-1 {\n    margin-top: 0.25rem !important;\n  }\n  .mt-md-2 {\n    margin-top: 0.5rem !important;\n  }\n  .mt-md-3 {\n    margin-top: 1rem !important;\n  }\n  .mt-md-4 {\n    margin-top: 1.5rem !important;\n  }\n  .mt-md-5 {\n    margin-top: 3rem !important;\n  }\n  .mt-md-auto {\n    margin-top: auto !important;\n  }\n  .me-md-0 {\n    margin-right: 0 !important;\n  }\n  .me-md-1 {\n    margin-right: 0.25rem !important;\n  }\n  .me-md-2 {\n    margin-right: 0.5rem !important;\n  }\n  .me-md-3 {\n    margin-right: 1rem !important;\n  }\n  .me-md-4 {\n    margin-right: 1.5rem !important;\n  }\n  .me-md-5 {\n    margin-right: 3rem !important;\n  }\n  .me-md-auto {\n    margin-right: auto !important;\n  }\n  .mb-md-0 {\n    margin-bottom: 0 !important;\n  }\n  .mb-md-1 {\n    margin-bottom: 0.25rem !important;\n  }\n  .mb-md-2 {\n    margin-bottom: 0.5rem !important;\n  }\n  .mb-md-3 {\n    margin-bottom: 1rem !important;\n  }\n  .mb-md-4 {\n    margin-bottom: 1.5rem !important;\n  }\n  .mb-md-5 {\n    margin-bottom: 3rem !important;\n  }\n  .mb-md-auto {\n    margin-bottom: auto !important;\n  }\n  .ms-md-0 {\n    margin-left: 0 !important;\n  }\n  .ms-md-1 {\n    margin-left: 0.25rem !important;\n  }\n  .ms-md-2 {\n    margin-left: 0.5rem !important;\n  }\n  .ms-md-3 {\n    margin-left: 1rem !important;\n  }\n  .ms-md-4 {\n    margin-left: 1.5rem !important;\n  }\n  .ms-md-5 {\n    margin-left: 3rem !important;\n  }\n  .ms-md-auto {\n    margin-left: auto !important;\n  }\n  .p-md-0 {\n    padding: 0 !important;\n  }\n  .p-md-1 {\n    padding: 0.25rem !important;\n  }\n  .p-md-2 {\n    padding: 0.5rem !important;\n  }\n  .p-md-3 {\n    padding: 1rem !important;\n  }\n  .p-md-4 {\n    padding: 1.5rem !important;\n  }\n  .p-md-5 {\n    padding: 3rem !important;\n  }\n  .px-md-0 {\n    padding-right: 0 !important;\n    padding-left: 0 !important;\n  }\n  .px-md-1 {\n    padding-right: 0.25rem !important;\n    padding-left: 0.25rem !important;\n  }\n  .px-md-2 {\n    padding-right: 0.5rem !important;\n    padding-left: 0.5rem !important;\n  }\n  .px-md-3 {\n    padding-right: 1rem !important;\n    padding-left: 1rem !important;\n  }\n  .px-md-4 {\n    padding-right: 1.5rem !important;\n    padding-left: 1.5rem !important;\n  }\n  .px-md-5 {\n    padding-right: 3rem !important;\n    padding-left: 3rem !important;\n  }\n  .py-md-0 {\n    padding-top: 0 !important;\n    padding-bottom: 0 !important;\n  }\n  .py-md-1 {\n    padding-top: 0.25rem !important;\n    padding-bottom: 0.25rem !important;\n  }\n  .py-md-2 {\n    padding-top: 0.5rem !important;\n    padding-bottom: 0.5rem !important;\n  }\n  .py-md-3 {\n    padding-top: 1rem !important;\n    padding-bottom: 1rem !important;\n  }\n  .py-md-4 {\n    padding-top: 1.5rem !important;\n    padding-bottom: 1.5rem !important;\n  }\n  .py-md-5 {\n    padding-top: 3rem !important;\n    padding-bottom: 3rem !important;\n  }\n  .pt-md-0 {\n    padding-top: 0 !important;\n  }\n  .pt-md-1 {\n    padding-top: 0.25rem !important;\n  }\n  .pt-md-2 {\n    padding-top: 0.5rem !important;\n  }\n  .pt-md-3 {\n    padding-top: 1rem !important;\n  }\n  .pt-md-4 {\n    padding-top: 1.5rem !important;\n  }\n  .pt-md-5 {\n    padding-top: 3rem !important;\n  }\n  .pe-md-0 {\n    padding-right: 0 !important;\n  }\n  .pe-md-1 {\n    padding-right: 0.25rem !important;\n  }\n  .pe-md-2 {\n    padding-right: 0.5rem !important;\n  }\n  .pe-md-3 {\n    padding-right: 1rem !important;\n  }\n  .pe-md-4 {\n    padding-right: 1.5rem !important;\n  }\n  .pe-md-5 {\n    padding-right: 3rem !important;\n  }\n  .pb-md-0 {\n    padding-bottom: 0 !important;\n  }\n  .pb-md-1 {\n    padding-bottom: 0.25rem !important;\n  }\n  .pb-md-2 {\n    padding-bottom: 0.5rem !important;\n  }\n  .pb-md-3 {\n    padding-bottom: 1rem !important;\n  }\n  .pb-md-4 {\n    padding-bottom: 1.5rem !important;\n  }\n  .pb-md-5 {\n    padding-bottom: 3rem !important;\n  }\n  .ps-md-0 {\n    padding-left: 0 !important;\n  }\n  .ps-md-1 {\n    padding-left: 0.25rem !important;\n  }\n  .ps-md-2 {\n    padding-left: 0.5rem !important;\n  }\n  .ps-md-3 {\n    padding-left: 1rem !important;\n  }\n  .ps-md-4 {\n    padding-left: 1.5rem !important;\n  }\n  .ps-md-5 {\n    padding-left: 3rem !important;\n  }\n  .text-md-start {\n    text-align: left !important;\n  }\n  .text-md-end {\n    text-align: right !important;\n  }\n  .text-md-center {\n    text-align: center !important;\n  }\n}\n\n@media (min-width: 992px) {\n  .float-lg-start {\n    float: left !important;\n  }\n  .float-lg-end {\n    float: right !important;\n  }\n  .float-lg-none {\n    float: none !important;\n  }\n  .d-lg-inline {\n    display: inline !important;\n  }\n  .d-lg-inline-block {\n    display: inline-block !important;\n  }\n  .d-lg-block {\n    display: block !important;\n  }\n  .d-lg-grid {\n    display: grid !important;\n  }\n  .d-lg-table {\n    display: table !important;\n  }\n  .d-lg-table-row {\n    display: table-row !important;\n  }\n  .d-lg-table-cell {\n    display: table-cell !important;\n  }\n  .d-lg-flex {\n    display: -ms-flexbox !important;\n    display: flex !important;\n  }\n  .d-lg-inline-flex {\n    display: -ms-inline-flexbox !important;\n    display: inline-flex !important;\n  }\n  .d-lg-none {\n    display: none !important;\n  }\n  .flex-lg-fill {\n    -ms-flex: 1 1 auto !important;\n    flex: 1 1 auto !important;\n  }\n  .flex-lg-row {\n    -ms-flex-direction: row !important;\n    flex-direction: row !important;\n  }\n  .flex-lg-column {\n    -ms-flex-direction: column !important;\n    flex-direction: column !important;\n  }\n  .flex-lg-row-reverse {\n    -ms-flex-direction: row-reverse !important;\n    flex-direction: row-reverse !important;\n  }\n  .flex-lg-column-reverse {\n    -ms-flex-direction: column-reverse !important;\n    flex-direction: column-reverse !important;\n  }\n  .flex-lg-grow-0 {\n    -ms-flex-positive: 0 !important;\n    flex-grow: 0 !important;\n  }\n  .flex-lg-grow-1 {\n    -ms-flex-positive: 1 !important;\n    flex-grow: 1 !important;\n  }\n  .flex-lg-shrink-0 {\n    -ms-flex-negative: 0 !important;\n    flex-shrink: 0 !important;\n  }\n  .flex-lg-shrink-1 {\n    -ms-flex-negative: 1 !important;\n    flex-shrink: 1 !important;\n  }\n  .flex-lg-wrap {\n    -ms-flex-wrap: wrap !important;\n    flex-wrap: wrap !important;\n  }\n  .flex-lg-nowrap {\n    -ms-flex-wrap: nowrap !important;\n    flex-wrap: nowrap !important;\n  }\n  .flex-lg-wrap-reverse {\n    -ms-flex-wrap: wrap-reverse !important;\n    flex-wrap: wrap-reverse !important;\n  }\n  .gap-lg-0 {\n    gap: 0 !important;\n  }\n  .gap-lg-1 {\n    gap: 0.25rem !important;\n  }\n  .gap-lg-2 {\n    gap: 0.5rem !important;\n  }\n  .gap-lg-3 {\n    gap: 1rem !important;\n  }\n  .gap-lg-4 {\n    gap: 1.5rem !important;\n  }\n  .gap-lg-5 {\n    gap: 3rem !important;\n  }\n  .justify-content-lg-start {\n    -ms-flex-pack: start !important;\n    justify-content: flex-start !important;\n  }\n  .justify-content-lg-end {\n    -ms-flex-pack: end !important;\n    justify-content: flex-end !important;\n  }\n  .justify-content-lg-center {\n    -ms-flex-pack: center !important;\n    justify-content: center !important;\n  }\n  .justify-content-lg-between {\n    -ms-flex-pack: justify !important;\n    justify-content: space-between !important;\n  }\n  .justify-content-lg-around {\n    -ms-flex-pack: distribute !important;\n    justify-content: space-around !important;\n  }\n  .justify-content-lg-evenly {\n    -ms-flex-pack: space-evenly !important;\n    justify-content: space-evenly !important;\n  }\n  .align-items-lg-start {\n    -ms-flex-align: start !important;\n    align-items: flex-start !important;\n  }\n  .align-items-lg-end {\n    -ms-flex-align: end !important;\n    align-items: flex-end !important;\n  }\n  .align-items-lg-center {\n    -ms-flex-align: center !important;\n    align-items: center !important;\n  }\n  .align-items-lg-baseline {\n    -ms-flex-align: baseline !important;\n    align-items: baseline !important;\n  }\n  .align-items-lg-stretch {\n    -ms-flex-align: stretch !important;\n    align-items: stretch !important;\n  }\n  .align-content-lg-start {\n    -ms-flex-line-pack: start !important;\n    align-content: flex-start !important;\n  }\n  .align-content-lg-end {\n    -ms-flex-line-pack: end !important;\n    align-content: flex-end !important;\n  }\n  .align-content-lg-center {\n    -ms-flex-line-pack: center !important;\n    align-content: center !important;\n  }\n  .align-content-lg-between {\n    -ms-flex-line-pack: justify !important;\n    align-content: space-between !important;\n  }\n  .align-content-lg-around {\n    -ms-flex-line-pack: distribute !important;\n    align-content: space-around !important;\n  }\n  .align-content-lg-stretch {\n    -ms-flex-line-pack: stretch !important;\n    align-content: stretch !important;\n  }\n  .align-self-lg-auto {\n    -ms-flex-item-align: auto !important;\n    align-self: auto !important;\n  }\n  .align-self-lg-start {\n    -ms-flex-item-align: start !important;\n    align-self: flex-start !important;\n  }\n  .align-self-lg-end {\n    -ms-flex-item-align: end !important;\n    align-self: flex-end !important;\n  }\n  .align-self-lg-center {\n    -ms-flex-item-align: center !important;\n    align-self: center !important;\n  }\n  .align-self-lg-baseline {\n    -ms-flex-item-align: baseline !important;\n    align-self: baseline !important;\n  }\n  .align-self-lg-stretch {\n    -ms-flex-item-align: stretch !important;\n    align-self: stretch !important;\n  }\n  .order-lg-first {\n    -ms-flex-order: -1 !important;\n    order: -1 !important;\n  }\n  .order-lg-0 {\n    -ms-flex-order: 0 !important;\n    order: 0 !important;\n  }\n  .order-lg-1 {\n    -ms-flex-order: 1 !important;\n    order: 1 !important;\n  }\n  .order-lg-2 {\n    -ms-flex-order: 2 !important;\n    order: 2 !important;\n  }\n  .order-lg-3 {\n    -ms-flex-order: 3 !important;\n    order: 3 !important;\n  }\n  .order-lg-4 {\n    -ms-flex-order: 4 !important;\n    order: 4 !important;\n  }\n  .order-lg-5 {\n    -ms-flex-order: 5 !important;\n    order: 5 !important;\n  }\n  .order-lg-last {\n    -ms-flex-order: 6 !important;\n    order: 6 !important;\n  }\n  .m-lg-0 {\n    margin: 0 !important;\n  }\n  .m-lg-1 {\n    margin: 0.25rem !important;\n  }\n  .m-lg-2 {\n    margin: 0.5rem !important;\n  }\n  .m-lg-3 {\n    margin: 1rem !important;\n  }\n  .m-lg-4 {\n    margin: 1.5rem !important;\n  }\n  .m-lg-5 {\n    margin: 3rem !important;\n  }\n  .m-lg-auto {\n    margin: auto !important;\n  }\n  .mx-lg-0 {\n    margin-right: 0 !important;\n    margin-left: 0 !important;\n  }\n  .mx-lg-1 {\n    margin-right: 0.25rem !important;\n    margin-left: 0.25rem !important;\n  }\n  .mx-lg-2 {\n    margin-right: 0.5rem !important;\n    margin-left: 0.5rem !important;\n  }\n  .mx-lg-3 {\n    margin-right: 1rem !important;\n    margin-left: 1rem !important;\n  }\n  .mx-lg-4 {\n    margin-right: 1.5rem !important;\n    margin-left: 1.5rem !important;\n  }\n  .mx-lg-5 {\n    margin-right: 3rem !important;\n    margin-left: 3rem !important;\n  }\n  .mx-lg-auto {\n    margin-right: auto !important;\n    margin-left: auto !important;\n  }\n  .my-lg-0 {\n    margin-top: 0 !important;\n    margin-bottom: 0 !important;\n  }\n  .my-lg-1 {\n    margin-top: 0.25rem !important;\n    margin-bottom: 0.25rem !important;\n  }\n  .my-lg-2 {\n    margin-top: 0.5rem !important;\n    margin-bottom: 0.5rem !important;\n  }\n  .my-lg-3 {\n    margin-top: 1rem !important;\n    margin-bottom: 1rem !important;\n  }\n  .my-lg-4 {\n    margin-top: 1.5rem !important;\n    margin-bottom: 1.5rem !important;\n  }\n  .my-lg-5 {\n    margin-top: 3rem !important;\n    margin-bottom: 3rem !important;\n  }\n  .my-lg-auto {\n    margin-top: auto !important;\n    margin-bottom: auto !important;\n  }\n  .mt-lg-0 {\n    margin-top: 0 !important;\n  }\n  .mt-lg-1 {\n    margin-top: 0.25rem !important;\n  }\n  .mt-lg-2 {\n    margin-top: 0.5rem !important;\n  }\n  .mt-lg-3 {\n    margin-top: 1rem !important;\n  }\n  .mt-lg-4 {\n    margin-top: 1.5rem !important;\n  }\n  .mt-lg-5 {\n    margin-top: 3rem !important;\n  }\n  .mt-lg-auto {\n    margin-top: auto !important;\n  }\n  .me-lg-0 {\n    margin-right: 0 !important;\n  }\n  .me-lg-1 {\n    margin-right: 0.25rem !important;\n  }\n  .me-lg-2 {\n    margin-right: 0.5rem !important;\n  }\n  .me-lg-3 {\n    margin-right: 1rem !important;\n  }\n  .me-lg-4 {\n    margin-right: 1.5rem !important;\n  }\n  .me-lg-5 {\n    margin-right: 3rem !important;\n  }\n  .me-lg-auto {\n    margin-right: auto !important;\n  }\n  .mb-lg-0 {\n    margin-bottom: 0 !important;\n  }\n  .mb-lg-1 {\n    margin-bottom: 0.25rem !important;\n  }\n  .mb-lg-2 {\n    margin-bottom: 0.5rem !important;\n  }\n  .mb-lg-3 {\n    margin-bottom: 1rem !important;\n  }\n  .mb-lg-4 {\n    margin-bottom: 1.5rem !important;\n  }\n  .mb-lg-5 {\n    margin-bottom: 3rem !important;\n  }\n  .mb-lg-auto {\n    margin-bottom: auto !important;\n  }\n  .ms-lg-0 {\n    margin-left: 0 !important;\n  }\n  .ms-lg-1 {\n    margin-left: 0.25rem !important;\n  }\n  .ms-lg-2 {\n    margin-left: 0.5rem !important;\n  }\n  .ms-lg-3 {\n    margin-left: 1rem !important;\n  }\n  .ms-lg-4 {\n    margin-left: 1.5rem !important;\n  }\n  .ms-lg-5 {\n    margin-left: 3rem !important;\n  }\n  .ms-lg-auto {\n    margin-left: auto !important;\n  }\n  .p-lg-0 {\n    padding: 0 !important;\n  }\n  .p-lg-1 {\n    padding: 0.25rem !important;\n  }\n  .p-lg-2 {\n    padding: 0.5rem !important;\n  }\n  .p-lg-3 {\n    padding: 1rem !important;\n  }\n  .p-lg-4 {\n    padding: 1.5rem !important;\n  }\n  .p-lg-5 {\n    padding: 3rem !important;\n  }\n  .px-lg-0 {\n    padding-right: 0 !important;\n    padding-left: 0 !important;\n  }\n  .px-lg-1 {\n    padding-right: 0.25rem !important;\n    padding-left: 0.25rem !important;\n  }\n  .px-lg-2 {\n    padding-right: 0.5rem !important;\n    padding-left: 0.5rem !important;\n  }\n  .px-lg-3 {\n    padding-right: 1rem !important;\n    padding-left: 1rem !important;\n  }\n  .px-lg-4 {\n    padding-right: 1.5rem !important;\n    padding-left: 1.5rem !important;\n  }\n  .px-lg-5 {\n    padding-right: 3rem !important;\n    padding-left: 3rem !important;\n  }\n  .py-lg-0 {\n    padding-top: 0 !important;\n    padding-bottom: 0 !important;\n  }\n  .py-lg-1 {\n    padding-top: 0.25rem !important;\n    padding-bottom: 0.25rem !important;\n  }\n  .py-lg-2 {\n    padding-top: 0.5rem !important;\n    padding-bottom: 0.5rem !important;\n  }\n  .py-lg-3 {\n    padding-top: 1rem !important;\n    padding-bottom: 1rem !important;\n  }\n  .py-lg-4 {\n    padding-top: 1.5rem !important;\n    padding-bottom: 1.5rem !important;\n  }\n  .py-lg-5 {\n    padding-top: 3rem !important;\n    padding-bottom: 3rem !important;\n  }\n  .pt-lg-0 {\n    padding-top: 0 !important;\n  }\n  .pt-lg-1 {\n    padding-top: 0.25rem !important;\n  }\n  .pt-lg-2 {\n    padding-top: 0.5rem !important;\n  }\n  .pt-lg-3 {\n    padding-top: 1rem !important;\n  }\n  .pt-lg-4 {\n    padding-top: 1.5rem !important;\n  }\n  .pt-lg-5 {\n    padding-top: 3rem !important;\n  }\n  .pe-lg-0 {\n    padding-right: 0 !important;\n  }\n  .pe-lg-1 {\n    padding-right: 0.25rem !important;\n  }\n  .pe-lg-2 {\n    padding-right: 0.5rem !important;\n  }\n  .pe-lg-3 {\n    padding-right: 1rem !important;\n  }\n  .pe-lg-4 {\n    padding-right: 1.5rem !important;\n  }\n  .pe-lg-5 {\n    padding-right: 3rem !important;\n  }\n  .pb-lg-0 {\n    padding-bottom: 0 !important;\n  }\n  .pb-lg-1 {\n    padding-bottom: 0.25rem !important;\n  }\n  .pb-lg-2 {\n    padding-bottom: 0.5rem !important;\n  }\n  .pb-lg-3 {\n    padding-bottom: 1rem !important;\n  }\n  .pb-lg-4 {\n    padding-bottom: 1.5rem !important;\n  }\n  .pb-lg-5 {\n    padding-bottom: 3rem !important;\n  }\n  .ps-lg-0 {\n    padding-left: 0 !important;\n  }\n  .ps-lg-1 {\n    padding-left: 0.25rem !important;\n  }\n  .ps-lg-2 {\n    padding-left: 0.5rem !important;\n  }\n  .ps-lg-3 {\n    padding-left: 1rem !important;\n  }\n  .ps-lg-4 {\n    padding-left: 1.5rem !important;\n  }\n  .ps-lg-5 {\n    padding-left: 3rem !important;\n  }\n  .text-lg-start {\n    text-align: left !important;\n  }\n  .text-lg-end {\n    text-align: right !important;\n  }\n  .text-lg-center {\n    text-align: center !important;\n  }\n}\n\n@media (min-width: 1200px) {\n  .float-xl-start {\n    float: left !important;\n  }\n  .float-xl-end {\n    float: right !important;\n  }\n  .float-xl-none {\n    float: none !important;\n  }\n  .d-xl-inline {\n    display: inline !important;\n  }\n  .d-xl-inline-block {\n    display: inline-block !important;\n  }\n  .d-xl-block {\n    display: block !important;\n  }\n  .d-xl-grid {\n    display: grid !important;\n  }\n  .d-xl-table {\n    display: table !important;\n  }\n  .d-xl-table-row {\n    display: table-row !important;\n  }\n  .d-xl-table-cell {\n    display: table-cell !important;\n  }\n  .d-xl-flex {\n    display: -ms-flexbox !important;\n    display: flex !important;\n  }\n  .d-xl-inline-flex {\n    display: -ms-inline-flexbox !important;\n    display: inline-flex !important;\n  }\n  .d-xl-none {\n    display: none !important;\n  }\n  .flex-xl-fill {\n    -ms-flex: 1 1 auto !important;\n    flex: 1 1 auto !important;\n  }\n  .flex-xl-row {\n    -ms-flex-direction: row !important;\n    flex-direction: row !important;\n  }\n  .flex-xl-column {\n    -ms-flex-direction: column !important;\n    flex-direction: column !important;\n  }\n  .flex-xl-row-reverse {\n    -ms-flex-direction: row-reverse !important;\n    flex-direction: row-reverse !important;\n  }\n  .flex-xl-column-reverse {\n    -ms-flex-direction: column-reverse !important;\n    flex-direction: column-reverse !important;\n  }\n  .flex-xl-grow-0 {\n    -ms-flex-positive: 0 !important;\n    flex-grow: 0 !important;\n  }\n  .flex-xl-grow-1 {\n    -ms-flex-positive: 1 !important;\n    flex-grow: 1 !important;\n  }\n  .flex-xl-shrink-0 {\n    -ms-flex-negative: 0 !important;\n    flex-shrink: 0 !important;\n  }\n  .flex-xl-shrink-1 {\n    -ms-flex-negative: 1 !important;\n    flex-shrink: 1 !important;\n  }\n  .flex-xl-wrap {\n    -ms-flex-wrap: wrap !important;\n    flex-wrap: wrap !important;\n  }\n  .flex-xl-nowrap {\n    -ms-flex-wrap: nowrap !important;\n    flex-wrap: nowrap !important;\n  }\n  .flex-xl-wrap-reverse {\n    -ms-flex-wrap: wrap-reverse !important;\n    flex-wrap: wrap-reverse !important;\n  }\n  .gap-xl-0 {\n    gap: 0 !important;\n  }\n  .gap-xl-1 {\n    gap: 0.25rem !important;\n  }\n  .gap-xl-2 {\n    gap: 0.5rem !important;\n  }\n  .gap-xl-3 {\n    gap: 1rem !important;\n  }\n  .gap-xl-4 {\n    gap: 1.5rem !important;\n  }\n  .gap-xl-5 {\n    gap: 3rem !important;\n  }\n  .justify-content-xl-start {\n    -ms-flex-pack: start !important;\n    justify-content: flex-start !important;\n  }\n  .justify-content-xl-end {\n    -ms-flex-pack: end !important;\n    justify-content: flex-end !important;\n  }\n  .justify-content-xl-center {\n    -ms-flex-pack: center !important;\n    justify-content: center !important;\n  }\n  .justify-content-xl-between {\n    -ms-flex-pack: justify !important;\n    justify-content: space-between !important;\n  }\n  .justify-content-xl-around {\n    -ms-flex-pack: distribute !important;\n    justify-content: space-around !important;\n  }\n  .justify-content-xl-evenly {\n    -ms-flex-pack: space-evenly !important;\n    justify-content: space-evenly !important;\n  }\n  .align-items-xl-start {\n    -ms-flex-align: start !important;\n    align-items: flex-start !important;\n  }\n  .align-items-xl-end {\n    -ms-flex-align: end !important;\n    align-items: flex-end !important;\n  }\n  .align-items-xl-center {\n    -ms-flex-align: center !important;\n    align-items: center !important;\n  }\n  .align-items-xl-baseline {\n    -ms-flex-align: baseline !important;\n    align-items: baseline !important;\n  }\n  .align-items-xl-stretch {\n    -ms-flex-align: stretch !important;\n    align-items: stretch !important;\n  }\n  .align-content-xl-start {\n    -ms-flex-line-pack: start !important;\n    align-content: flex-start !important;\n  }\n  .align-content-xl-end {\n    -ms-flex-line-pack: end !important;\n    align-content: flex-end !important;\n  }\n  .align-content-xl-center {\n    -ms-flex-line-pack: center !important;\n    align-content: center !important;\n  }\n  .align-content-xl-between {\n    -ms-flex-line-pack: justify !important;\n    align-content: space-between !important;\n  }\n  .align-content-xl-around {\n    -ms-flex-line-pack: distribute !important;\n    align-content: space-around !important;\n  }\n  .align-content-xl-stretch {\n    -ms-flex-line-pack: stretch !important;\n    align-content: stretch !important;\n  }\n  .align-self-xl-auto {\n    -ms-flex-item-align: auto !important;\n    align-self: auto !important;\n  }\n  .align-self-xl-start {\n    -ms-flex-item-align: start !important;\n    align-self: flex-start !important;\n  }\n  .align-self-xl-end {\n    -ms-flex-item-align: end !important;\n    align-self: flex-end !important;\n  }\n  .align-self-xl-center {\n    -ms-flex-item-align: center !important;\n    align-self: center !important;\n  }\n  .align-self-xl-baseline {\n    -ms-flex-item-align: baseline !important;\n    align-self: baseline !important;\n  }\n  .align-self-xl-stretch {\n    -ms-flex-item-align: stretch !important;\n    align-self: stretch !important;\n  }\n  .order-xl-first {\n    -ms-flex-order: -1 !important;\n    order: -1 !important;\n  }\n  .order-xl-0 {\n    -ms-flex-order: 0 !important;\n    order: 0 !important;\n  }\n  .order-xl-1 {\n    -ms-flex-order: 1 !important;\n    order: 1 !important;\n  }\n  .order-xl-2 {\n    -ms-flex-order: 2 !important;\n    order: 2 !important;\n  }\n  .order-xl-3 {\n    -ms-flex-order: 3 !important;\n    order: 3 !important;\n  }\n  .order-xl-4 {\n    -ms-flex-order: 4 !important;\n    order: 4 !important;\n  }\n  .order-xl-5 {\n    -ms-flex-order: 5 !important;\n    order: 5 !important;\n  }\n  .order-xl-last {\n    -ms-flex-order: 6 !important;\n    order: 6 !important;\n  }\n  .m-xl-0 {\n    margin: 0 !important;\n  }\n  .m-xl-1 {\n    margin: 0.25rem !important;\n  }\n  .m-xl-2 {\n    margin: 0.5rem !important;\n  }\n  .m-xl-3 {\n    margin: 1rem !important;\n  }\n  .m-xl-4 {\n    margin: 1.5rem !important;\n  }\n  .m-xl-5 {\n    margin: 3rem !important;\n  }\n  .m-xl-auto {\n    margin: auto !important;\n  }\n  .mx-xl-0 {\n    margin-right: 0 !important;\n    margin-left: 0 !important;\n  }\n  .mx-xl-1 {\n    margin-right: 0.25rem !important;\n    margin-left: 0.25rem !important;\n  }\n  .mx-xl-2 {\n    margin-right: 0.5rem !important;\n    margin-left: 0.5rem !important;\n  }\n  .mx-xl-3 {\n    margin-right: 1rem !important;\n    margin-left: 1rem !important;\n  }\n  .mx-xl-4 {\n    margin-right: 1.5rem !important;\n    margin-left: 1.5rem !important;\n  }\n  .mx-xl-5 {\n    margin-right: 3rem !important;\n    margin-left: 3rem !important;\n  }\n  .mx-xl-auto {\n    margin-right: auto !important;\n    margin-left: auto !important;\n  }\n  .my-xl-0 {\n    margin-top: 0 !important;\n    margin-bottom: 0 !important;\n  }\n  .my-xl-1 {\n    margin-top: 0.25rem !important;\n    margin-bottom: 0.25rem !important;\n  }\n  .my-xl-2 {\n    margin-top: 0.5rem !important;\n    margin-bottom: 0.5rem !important;\n  }\n  .my-xl-3 {\n    margin-top: 1rem !important;\n    margin-bottom: 1rem !important;\n  }\n  .my-xl-4 {\n    margin-top: 1.5rem !important;\n    margin-bottom: 1.5rem !important;\n  }\n  .my-xl-5 {\n    margin-top: 3rem !important;\n    margin-bottom: 3rem !important;\n  }\n  .my-xl-auto {\n    margin-top: auto !important;\n    margin-bottom: auto !important;\n  }\n  .mt-xl-0 {\n    margin-top: 0 !important;\n  }\n  .mt-xl-1 {\n    margin-top: 0.25rem !important;\n  }\n  .mt-xl-2 {\n    margin-top: 0.5rem !important;\n  }\n  .mt-xl-3 {\n    margin-top: 1rem !important;\n  }\n  .mt-xl-4 {\n    margin-top: 1.5rem !important;\n  }\n  .mt-xl-5 {\n    margin-top: 3rem !important;\n  }\n  .mt-xl-auto {\n    margin-top: auto !important;\n  }\n  .me-xl-0 {\n    margin-right: 0 !important;\n  }\n  .me-xl-1 {\n    margin-right: 0.25rem !important;\n  }\n  .me-xl-2 {\n    margin-right: 0.5rem !important;\n  }\n  .me-xl-3 {\n    margin-right: 1rem !important;\n  }\n  .me-xl-4 {\n    margin-right: 1.5rem !important;\n  }\n  .me-xl-5 {\n    margin-right: 3rem !important;\n  }\n  .me-xl-auto {\n    margin-right: auto !important;\n  }\n  .mb-xl-0 {\n    margin-bottom: 0 !important;\n  }\n  .mb-xl-1 {\n    margin-bottom: 0.25rem !important;\n  }\n  .mb-xl-2 {\n    margin-bottom: 0.5rem !important;\n  }\n  .mb-xl-3 {\n    margin-bottom: 1rem !important;\n  }\n  .mb-xl-4 {\n    margin-bottom: 1.5rem !important;\n  }\n  .mb-xl-5 {\n    margin-bottom: 3rem !important;\n  }\n  .mb-xl-auto {\n    margin-bottom: auto !important;\n  }\n  .ms-xl-0 {\n    margin-left: 0 !important;\n  }\n  .ms-xl-1 {\n    margin-left: 0.25rem !important;\n  }\n  .ms-xl-2 {\n    margin-left: 0.5rem !important;\n  }\n  .ms-xl-3 {\n    margin-left: 1rem !important;\n  }\n  .ms-xl-4 {\n    margin-left: 1.5rem !important;\n  }\n  .ms-xl-5 {\n    margin-left: 3rem !important;\n  }\n  .ms-xl-auto {\n    margin-left: auto !important;\n  }\n  .p-xl-0 {\n    padding: 0 !important;\n  }\n  .p-xl-1 {\n    padding: 0.25rem !important;\n  }\n  .p-xl-2 {\n    padding: 0.5rem !important;\n  }\n  .p-xl-3 {\n    padding: 1rem !important;\n  }\n  .p-xl-4 {\n    padding: 1.5rem !important;\n  }\n  .p-xl-5 {\n    padding: 3rem !important;\n  }\n  .px-xl-0 {\n    padding-right: 0 !important;\n    padding-left: 0 !important;\n  }\n  .px-xl-1 {\n    padding-right: 0.25rem !important;\n    padding-left: 0.25rem !important;\n  }\n  .px-xl-2 {\n    padding-right: 0.5rem !important;\n    padding-left: 0.5rem !important;\n  }\n  .px-xl-3 {\n    padding-right: 1rem !important;\n    padding-left: 1rem !important;\n  }\n  .px-xl-4 {\n    padding-right: 1.5rem !important;\n    padding-left: 1.5rem !important;\n  }\n  .px-xl-5 {\n    padding-right: 3rem !important;\n    padding-left: 3rem !important;\n  }\n  .py-xl-0 {\n    padding-top: 0 !important;\n    padding-bottom: 0 !important;\n  }\n  .py-xl-1 {\n    padding-top: 0.25rem !important;\n    padding-bottom: 0.25rem !important;\n  }\n  .py-xl-2 {\n    padding-top: 0.5rem !important;\n    padding-bottom: 0.5rem !important;\n  }\n  .py-xl-3 {\n    padding-top: 1rem !important;\n    padding-bottom: 1rem !important;\n  }\n  .py-xl-4 {\n    padding-top: 1.5rem !important;\n    padding-bottom: 1.5rem !important;\n  }\n  .py-xl-5 {\n    padding-top: 3rem !important;\n    padding-bottom: 3rem !important;\n  }\n  .pt-xl-0 {\n    padding-top: 0 !important;\n  }\n  .pt-xl-1 {\n    padding-top: 0.25rem !important;\n  }\n  .pt-xl-2 {\n    padding-top: 0.5rem !important;\n  }\n  .pt-xl-3 {\n    padding-top: 1rem !important;\n  }\n  .pt-xl-4 {\n    padding-top: 1.5rem !important;\n  }\n  .pt-xl-5 {\n    padding-top: 3rem !important;\n  }\n  .pe-xl-0 {\n    padding-right: 0 !important;\n  }\n  .pe-xl-1 {\n    padding-right: 0.25rem !important;\n  }\n  .pe-xl-2 {\n    padding-right: 0.5rem !important;\n  }\n  .pe-xl-3 {\n    padding-right: 1rem !important;\n  }\n  .pe-xl-4 {\n    padding-right: 1.5rem !important;\n  }\n  .pe-xl-5 {\n    padding-right: 3rem !important;\n  }\n  .pb-xl-0 {\n    padding-bottom: 0 !important;\n  }\n  .pb-xl-1 {\n    padding-bottom: 0.25rem !important;\n  }\n  .pb-xl-2 {\n    padding-bottom: 0.5rem !important;\n  }\n  .pb-xl-3 {\n    padding-bottom: 1rem !important;\n  }\n  .pb-xl-4 {\n    padding-bottom: 1.5rem !important;\n  }\n  .pb-xl-5 {\n    padding-bottom: 3rem !important;\n  }\n  .ps-xl-0 {\n    padding-left: 0 !important;\n  }\n  .ps-xl-1 {\n    padding-left: 0.25rem !important;\n  }\n  .ps-xl-2 {\n    padding-left: 0.5rem !important;\n  }\n  .ps-xl-3 {\n    padding-left: 1rem !important;\n  }\n  .ps-xl-4 {\n    padding-left: 1.5rem !important;\n  }\n  .ps-xl-5 {\n    padding-left: 3rem !important;\n  }\n  .text-xl-start {\n    text-align: left !important;\n  }\n  .text-xl-end {\n    text-align: right !important;\n  }\n  .text-xl-center {\n    text-align: center !important;\n  }\n}\n\n@media (min-width: 1400px) {\n  .float-xxl-start {\n    float: left !important;\n  }\n  .float-xxl-end {\n    float: right !important;\n  }\n  .float-xxl-none {\n    float: none !important;\n  }\n  .d-xxl-inline {\n    display: inline !important;\n  }\n  .d-xxl-inline-block {\n    display: inline-block !important;\n  }\n  .d-xxl-block {\n    display: block !important;\n  }\n  .d-xxl-grid {\n    display: grid !important;\n  }\n  .d-xxl-table {\n    display: table !important;\n  }\n  .d-xxl-table-row {\n    display: table-row !important;\n  }\n  .d-xxl-table-cell {\n    display: table-cell !important;\n  }\n  .d-xxl-flex {\n    display: -ms-flexbox !important;\n    display: flex !important;\n  }\n  .d-xxl-inline-flex {\n    display: -ms-inline-flexbox !important;\n    display: inline-flex !important;\n  }\n  .d-xxl-none {\n    display: none !important;\n  }\n  .flex-xxl-fill {\n    -ms-flex: 1 1 auto !important;\n    flex: 1 1 auto !important;\n  }\n  .flex-xxl-row {\n    -ms-flex-direction: row !important;\n    flex-direction: row !important;\n  }\n  .flex-xxl-column {\n    -ms-flex-direction: column !important;\n    flex-direction: column !important;\n  }\n  .flex-xxl-row-reverse {\n    -ms-flex-direction: row-reverse !important;\n    flex-direction: row-reverse !important;\n  }\n  .flex-xxl-column-reverse {\n    -ms-flex-direction: column-reverse !important;\n    flex-direction: column-reverse !important;\n  }\n  .flex-xxl-grow-0 {\n    -ms-flex-positive: 0 !important;\n    flex-grow: 0 !important;\n  }\n  .flex-xxl-grow-1 {\n    -ms-flex-positive: 1 !important;\n    flex-grow: 1 !important;\n  }\n  .flex-xxl-shrink-0 {\n    -ms-flex-negative: 0 !important;\n    flex-shrink: 0 !important;\n  }\n  .flex-xxl-shrink-1 {\n    -ms-flex-negative: 1 !important;\n    flex-shrink: 1 !important;\n  }\n  .flex-xxl-wrap {\n    -ms-flex-wrap: wrap !important;\n    flex-wrap: wrap !important;\n  }\n  .flex-xxl-nowrap {\n    -ms-flex-wrap: nowrap !important;\n    flex-wrap: nowrap !important;\n  }\n  .flex-xxl-wrap-reverse {\n    -ms-flex-wrap: wrap-reverse !important;\n    flex-wrap: wrap-reverse !important;\n  }\n  .gap-xxl-0 {\n    gap: 0 !important;\n  }\n  .gap-xxl-1 {\n    gap: 0.25rem !important;\n  }\n  .gap-xxl-2 {\n    gap: 0.5rem !important;\n  }\n  .gap-xxl-3 {\n    gap: 1rem !important;\n  }\n  .gap-xxl-4 {\n    gap: 1.5rem !important;\n  }\n  .gap-xxl-5 {\n    gap: 3rem !important;\n  }\n  .justify-content-xxl-start {\n    -ms-flex-pack: start !important;\n    justify-content: flex-start !important;\n  }\n  .justify-content-xxl-end {\n    -ms-flex-pack: end !important;\n    justify-content: flex-end !important;\n  }\n  .justify-content-xxl-center {\n    -ms-flex-pack: center !important;\n    justify-content: center !important;\n  }\n  .justify-content-xxl-between {\n    -ms-flex-pack: justify !important;\n    justify-content: space-between !important;\n  }\n  .justify-content-xxl-around {\n    -ms-flex-pack: distribute !important;\n    justify-content: space-around !important;\n  }\n  .justify-content-xxl-evenly {\n    -ms-flex-pack: space-evenly !important;\n    justify-content: space-evenly !important;\n  }\n  .align-items-xxl-start {\n    -ms-flex-align: start !important;\n    align-items: flex-start !important;\n  }\n  .align-items-xxl-end {\n    -ms-flex-align: end !important;\n    align-items: flex-end !important;\n  }\n  .align-items-xxl-center {\n    -ms-flex-align: center !important;\n    align-items: center !important;\n  }\n  .align-items-xxl-baseline {\n    -ms-flex-align: baseline !important;\n    align-items: baseline !important;\n  }\n  .align-items-xxl-stretch {\n    -ms-flex-align: stretch !important;\n    align-items: stretch !important;\n  }\n  .align-content-xxl-start {\n    -ms-flex-line-pack: start !important;\n    align-content: flex-start !important;\n  }\n  .align-content-xxl-end {\n    -ms-flex-line-pack: end !important;\n    align-content: flex-end !important;\n  }\n  .align-content-xxl-center {\n    -ms-flex-line-pack: center !important;\n    align-content: center !important;\n  }\n  .align-content-xxl-between {\n    -ms-flex-line-pack: justify !important;\n    align-content: space-between !important;\n  }\n  .align-content-xxl-around {\n    -ms-flex-line-pack: distribute !important;\n    align-content: space-around !important;\n  }\n  .align-content-xxl-stretch {\n    -ms-flex-line-pack: stretch !important;\n    align-content: stretch !important;\n  }\n  .align-self-xxl-auto {\n    -ms-flex-item-align: auto !important;\n    align-self: auto !important;\n  }\n  .align-self-xxl-start {\n    -ms-flex-item-align: start !important;\n    align-self: flex-start !important;\n  }\n  .align-self-xxl-end {\n    -ms-flex-item-align: end !important;\n    align-self: flex-end !important;\n  }\n  .align-self-xxl-center {\n    -ms-flex-item-align: center !important;\n    align-self: center !important;\n  }\n  .align-self-xxl-baseline {\n    -ms-flex-item-align: baseline !important;\n    align-self: baseline !important;\n  }\n  .align-self-xxl-stretch {\n    -ms-flex-item-align: stretch !important;\n    align-self: stretch !important;\n  }\n  .order-xxl-first {\n    -ms-flex-order: -1 !important;\n    order: -1 !important;\n  }\n  .order-xxl-0 {\n    -ms-flex-order: 0 !important;\n    order: 0 !important;\n  }\n  .order-xxl-1 {\n    -ms-flex-order: 1 !important;\n    order: 1 !important;\n  }\n  .order-xxl-2 {\n    -ms-flex-order: 2 !important;\n    order: 2 !important;\n  }\n  .order-xxl-3 {\n    -ms-flex-order: 3 !important;\n    order: 3 !important;\n  }\n  .order-xxl-4 {\n    -ms-flex-order: 4 !important;\n    order: 4 !important;\n  }\n  .order-xxl-5 {\n    -ms-flex-order: 5 !important;\n    order: 5 !important;\n  }\n  .order-xxl-last {\n    -ms-flex-order: 6 !important;\n    order: 6 !important;\n  }\n  .m-xxl-0 {\n    margin: 0 !important;\n  }\n  .m-xxl-1 {\n    margin: 0.25rem !important;\n  }\n  .m-xxl-2 {\n    margin: 0.5rem !important;\n  }\n  .m-xxl-3 {\n    margin: 1rem !important;\n  }\n  .m-xxl-4 {\n    margin: 1.5rem !important;\n  }\n  .m-xxl-5 {\n    margin: 3rem !important;\n  }\n  .m-xxl-auto {\n    margin: auto !important;\n  }\n  .mx-xxl-0 {\n    margin-right: 0 !important;\n    margin-left: 0 !important;\n  }\n  .mx-xxl-1 {\n    margin-right: 0.25rem !important;\n    margin-left: 0.25rem !important;\n  }\n  .mx-xxl-2 {\n    margin-right: 0.5rem !important;\n    margin-left: 0.5rem !important;\n  }\n  .mx-xxl-3 {\n    margin-right: 1rem !important;\n    margin-left: 1rem !important;\n  }\n  .mx-xxl-4 {\n    margin-right: 1.5rem !important;\n    margin-left: 1.5rem !important;\n  }\n  .mx-xxl-5 {\n    margin-right: 3rem !important;\n    margin-left: 3rem !important;\n  }\n  .mx-xxl-auto {\n    margin-right: auto !important;\n    margin-left: auto !important;\n  }\n  .my-xxl-0 {\n    margin-top: 0 !important;\n    margin-bottom: 0 !important;\n  }\n  .my-xxl-1 {\n    margin-top: 0.25rem !important;\n    margin-bottom: 0.25rem !important;\n  }\n  .my-xxl-2 {\n    margin-top: 0.5rem !important;\n    margin-bottom: 0.5rem !important;\n  }\n  .my-xxl-3 {\n    margin-top: 1rem !important;\n    margin-bottom: 1rem !important;\n  }\n  .my-xxl-4 {\n    margin-top: 1.5rem !important;\n    margin-bottom: 1.5rem !important;\n  }\n  .my-xxl-5 {\n    margin-top: 3rem !important;\n    margin-bottom: 3rem !important;\n  }\n  .my-xxl-auto {\n    margin-top: auto !important;\n    margin-bottom: auto !important;\n  }\n  .mt-xxl-0 {\n    margin-top: 0 !important;\n  }\n  .mt-xxl-1 {\n    margin-top: 0.25rem !important;\n  }\n  .mt-xxl-2 {\n    margin-top: 0.5rem !important;\n  }\n  .mt-xxl-3 {\n    margin-top: 1rem !important;\n  }\n  .mt-xxl-4 {\n    margin-top: 1.5rem !important;\n  }\n  .mt-xxl-5 {\n    margin-top: 3rem !important;\n  }\n  .mt-xxl-auto {\n    margin-top: auto !important;\n  }\n  .me-xxl-0 {\n    margin-right: 0 !important;\n  }\n  .me-xxl-1 {\n    margin-right: 0.25rem !important;\n  }\n  .me-xxl-2 {\n    margin-right: 0.5rem !important;\n  }\n  .me-xxl-3 {\n    margin-right: 1rem !important;\n  }\n  .me-xxl-4 {\n    margin-right: 1.5rem !important;\n  }\n  .me-xxl-5 {\n    margin-right: 3rem !important;\n  }\n  .me-xxl-auto {\n    margin-right: auto !important;\n  }\n  .mb-xxl-0 {\n    margin-bottom: 0 !important;\n  }\n  .mb-xxl-1 {\n    margin-bottom: 0.25rem !important;\n  }\n  .mb-xxl-2 {\n    margin-bottom: 0.5rem !important;\n  }\n  .mb-xxl-3 {\n    margin-bottom: 1rem !important;\n  }\n  .mb-xxl-4 {\n    margin-bottom: 1.5rem !important;\n  }\n  .mb-xxl-5 {\n    margin-bottom: 3rem !important;\n  }\n  .mb-xxl-auto {\n    margin-bottom: auto !important;\n  }\n  .ms-xxl-0 {\n    margin-left: 0 !important;\n  }\n  .ms-xxl-1 {\n    margin-left: 0.25rem !important;\n  }\n  .ms-xxl-2 {\n    margin-left: 0.5rem !important;\n  }\n  .ms-xxl-3 {\n    margin-left: 1rem !important;\n  }\n  .ms-xxl-4 {\n    margin-left: 1.5rem !important;\n  }\n  .ms-xxl-5 {\n    margin-left: 3rem !important;\n  }\n  .ms-xxl-auto {\n    margin-left: auto !important;\n  }\n  .p-xxl-0 {\n    padding: 0 !important;\n  }\n  .p-xxl-1 {\n    padding: 0.25rem !important;\n  }\n  .p-xxl-2 {\n    padding: 0.5rem !important;\n  }\n  .p-xxl-3 {\n    padding: 1rem !important;\n  }\n  .p-xxl-4 {\n    padding: 1.5rem !important;\n  }\n  .p-xxl-5 {\n    padding: 3rem !important;\n  }\n  .px-xxl-0 {\n    padding-right: 0 !important;\n    padding-left: 0 !important;\n  }\n  .px-xxl-1 {\n    padding-right: 0.25rem !important;\n    padding-left: 0.25rem !important;\n  }\n  .px-xxl-2 {\n    padding-right: 0.5rem !important;\n    padding-left: 0.5rem !important;\n  }\n  .px-xxl-3 {\n    padding-right: 1rem !important;\n    padding-left: 1rem !important;\n  }\n  .px-xxl-4 {\n    padding-right: 1.5rem !important;\n    padding-left: 1.5rem !important;\n  }\n  .px-xxl-5 {\n    padding-right: 3rem !important;\n    padding-left: 3rem !important;\n  }\n  .py-xxl-0 {\n    padding-top: 0 !important;\n    padding-bottom: 0 !important;\n  }\n  .py-xxl-1 {\n    padding-top: 0.25rem !important;\n    padding-bottom: 0.25rem !important;\n  }\n  .py-xxl-2 {\n    padding-top: 0.5rem !important;\n    padding-bottom: 0.5rem !important;\n  }\n  .py-xxl-3 {\n    padding-top: 1rem !important;\n    padding-bottom: 1rem !important;\n  }\n  .py-xxl-4 {\n    padding-top: 1.5rem !important;\n    padding-bottom: 1.5rem !important;\n  }\n  .py-xxl-5 {\n    padding-top: 3rem !important;\n    padding-bottom: 3rem !important;\n  }\n  .pt-xxl-0 {\n    padding-top: 0 !important;\n  }\n  .pt-xxl-1 {\n    padding-top: 0.25rem !important;\n  }\n  .pt-xxl-2 {\n    padding-top: 0.5rem !important;\n  }\n  .pt-xxl-3 {\n    padding-top: 1rem !important;\n  }\n  .pt-xxl-4 {\n    padding-top: 1.5rem !important;\n  }\n  .pt-xxl-5 {\n    padding-top: 3rem !important;\n  }\n  .pe-xxl-0 {\n    padding-right: 0 !important;\n  }\n  .pe-xxl-1 {\n    padding-right: 0.25rem !important;\n  }\n  .pe-xxl-2 {\n    padding-right: 0.5rem !important;\n  }\n  .pe-xxl-3 {\n    padding-right: 1rem !important;\n  }\n  .pe-xxl-4 {\n    padding-right: 1.5rem !important;\n  }\n  .pe-xxl-5 {\n    padding-right: 3rem !important;\n  }\n  .pb-xxl-0 {\n    padding-bottom: 0 !important;\n  }\n  .pb-xxl-1 {\n    padding-bottom: 0.25rem !important;\n  }\n  .pb-xxl-2 {\n    padding-bottom: 0.5rem !important;\n  }\n  .pb-xxl-3 {\n    padding-bottom: 1rem !important;\n  }\n  .pb-xxl-4 {\n    padding-bottom: 1.5rem !important;\n  }\n  .pb-xxl-5 {\n    padding-bottom: 3rem !important;\n  }\n  .ps-xxl-0 {\n    padding-left: 0 !important;\n  }\n  .ps-xxl-1 {\n    padding-left: 0.25rem !important;\n  }\n  .ps-xxl-2 {\n    padding-left: 0.5rem !important;\n  }\n  .ps-xxl-3 {\n    padding-left: 1rem !important;\n  }\n  .ps-xxl-4 {\n    padding-left: 1.5rem !important;\n  }\n  .ps-xxl-5 {\n    padding-left: 3rem !important;\n  }\n  .text-xxl-start {\n    text-align: left !important;\n  }\n  .text-xxl-end {\n    text-align: right !important;\n  }\n  .text-xxl-center {\n    text-align: center !important;\n  }\n}\n\n@media (min-width: 1200px) {\n  .fs-1 {\n    font-size: 4rem !important;\n  }\n  .fs-2 {\n    font-size: 3rem !important;\n  }\n  .fs-3 {\n    font-size: 2.5rem !important;\n  }\n  .fs-4 {\n    font-size: 2rem !important;\n  }\n  .fs-5 {\n    font-size: 1.5rem !important;\n  }\n}\n\n@media print {\n  .d-print-inline {\n    display: inline !important;\n  }\n  .d-print-inline-block {\n    display: inline-block !important;\n  }\n  .d-print-block {\n    display: block !important;\n  }\n  .d-print-grid {\n    display: grid !important;\n  }\n  .d-print-table {\n    display: table !important;\n  }\n  .d-print-table-row {\n    display: table-row !important;\n  }\n  .d-print-table-cell {\n    display: table-cell !important;\n  }\n  .d-print-flex {\n    display: -ms-flexbox !important;\n    display: flex !important;\n  }\n  .d-print-inline-flex {\n    display: -ms-inline-flexbox !important;\n    display: inline-flex !important;\n  }\n  .d-print-none {\n    display: none !important;\n  }\n}\n\n.navbar.bg-primary {\n  border: 1px solid #282828;\n}\n\n.navbar.bg-dark {\n  background-color: #060606 !important;\n  border: 1px solid #282828;\n}\n\n.navbar.bg-light {\n  background-color: #888 !important;\n}\n\n.navbar.fixed-top {\n  border-width: 0 0 1px;\n}\n\n.navbar.fixed-bottom {\n  border-width: 1px 0 0;\n}\n\n.btn-primary {\n  background-color: #2a9fd6;\n}\n\n.btn-secondary {\n  background-color: #555;\n}\n\n.btn-success {\n  background-color: #77b300;\n}\n\n.btn-info {\n  background-color: #93c;\n}\n\n.btn-warning {\n  background-color: #f80;\n}\n\n.btn-danger {\n  background-color: #c00;\n}\n\n.btn-light {\n  background-color: #222;\n}\n\n.btn-dark {\n  background-color: #adafae;\n}\n\nlegend {\n  color: #fff;\n}\n\n.form-control {\n  background-clip: border-box;\n}\n\n.form-control:disabled, .form-control[readonly] {\n  border-color: transparent;\n}\n\n.nav-tabs .nav-link,\n.nav-pills .nav-link {\n  color: #fff;\n}\n\n.nav-tabs .nav-link:hover,\n.nav-pills .nav-link:hover {\n  background-color: #282828;\n}\n\n.nav-tabs .nav-link.disabled, .nav-tabs .nav-link.disabled:hover,\n.nav-pills .nav-link.disabled,\n.nav-pills .nav-link.disabled:hover {\n  background-color: transparent;\n  color: #555;\n}\n\n.nav-tabs .nav-link.active,\n.nav-pills .nav-link.active {\n  background-color: #2a9fd6;\n}\n\n.breadcrumb a {\n  color: #fff;\n}\n\n.pagination a:hover {\n  text-decoration: none;\n}\n\n.alert {\n  border: none;\n  color: #fff;\n}\n\n.alert a,\n.alert .alert-link {\n  color: #fff;\n  text-decoration: underline;\n}\n\n.alert-primary {\n  background-color: #2a9fd6;\n}\n\n.alert-secondary {\n  background-color: #555;\n}\n\n.alert-success {\n  background-color: #77b300;\n}\n\n.alert-info {\n  background-color: #93c;\n}\n\n.alert-warning {\n  background-color: #f80;\n}\n\n.alert-danger {\n  background-color: #c00;\n}\n\n.alert-light {\n  background-color: #222;\n}\n\n.alert-dark {\n  background-color: #adafae;\n}\n\n.badge.bg-dark {\n  color: #212529;\n}\n\n.list-group-item-action:hover {\n  border-color: #2a9fd6;\n}\n\n.popover-title {\n  border-bottom: none;\n}\n"
  },
  {
    "path": "src/sourceDev.WebApp/SharedThemes/cyborg/wwwroot/css/fontawesome-all.css",
    "content": "/*!\n * Font Awesome Free 5.0.8 by @fontawesome - https://fontawesome.com\n * License - https://fontawesome.com/license (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)\n */\n.fa,\n.fas,\n.far,\n.fal,\n.fab {\n  -moz-osx-font-smoothing: grayscale;\n  -webkit-font-smoothing: antialiased;\n  display: inline-block;\n  font-style: normal;\n  font-variant: normal;\n  text-rendering: auto;\n  line-height: 1; }\n\n.fa-lg {\n  font-size: 1.33333em;\n  line-height: 0.75em;\n  vertical-align: -.0667em; }\n\n.fa-xs {\n  font-size: .75em; }\n\n.fa-sm {\n  font-size: .875em; }\n\n.fa-1x {\n  font-size: 1em; }\n\n.fa-2x {\n  font-size: 2em; }\n\n.fa-3x {\n  font-size: 3em; }\n\n.fa-4x {\n  font-size: 4em; }\n\n.fa-5x {\n  font-size: 5em; }\n\n.fa-6x {\n  font-size: 6em; }\n\n.fa-7x {\n  font-size: 7em; }\n\n.fa-8x {\n  font-size: 8em; }\n\n.fa-9x {\n  font-size: 9em; }\n\n.fa-10x {\n  font-size: 10em; }\n\n.fa-fw {\n  text-align: center;\n  width: 1.25em; }\n\n.fa-ul {\n  list-style-type: none;\n  margin-left: 2.5em;\n  padding-left: 0; }\n  .fa-ul > li {\n    position: relative; }\n\n.fa-li {\n  left: -2em;\n  position: absolute;\n  text-align: center;\n  width: 2em;\n  line-height: inherit; }\n\n.fa-border {\n  border: solid 0.08em #eee;\n  border-radius: .1em;\n  padding: .2em .25em .15em; }\n\n.fa-pull-left {\n  float: left; }\n\n.fa-pull-right {\n  float: right; }\n\n.fa.fa-pull-left,\n.fas.fa-pull-left,\n.far.fa-pull-left,\n.fal.fa-pull-left,\n.fab.fa-pull-left {\n  margin-right: .3em; }\n\n.fa.fa-pull-right,\n.fas.fa-pull-right,\n.far.fa-pull-right,\n.fal.fa-pull-right,\n.fab.fa-pull-right {\n  margin-left: .3em; }\n\n.fa-spin {\n  -webkit-animation: fa-spin 2s infinite linear;\n          animation: fa-spin 2s infinite linear; }\n\n.fa-pulse {\n  -webkit-animation: fa-spin 1s infinite steps(8);\n          animation: fa-spin 1s infinite steps(8); }\n\n@-webkit-keyframes fa-spin {\n  0% {\n    -webkit-transform: rotate(0deg);\n            transform: rotate(0deg); }\n  100% {\n    -webkit-transform: rotate(360deg);\n            transform: rotate(360deg); } }\n\n@keyframes fa-spin {\n  0% {\n    -webkit-transform: rotate(0deg);\n            transform: rotate(0deg); }\n  100% {\n    -webkit-transform: rotate(360deg);\n            transform: rotate(360deg); } }\n\n.fa-rotate-90 {\n  -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)\";\n  -webkit-transform: rotate(90deg);\n          transform: rotate(90deg); }\n\n.fa-rotate-180 {\n  -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)\";\n  -webkit-transform: rotate(180deg);\n          transform: rotate(180deg); }\n\n.fa-rotate-270 {\n  -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)\";\n  -webkit-transform: rotate(270deg);\n          transform: rotate(270deg); }\n\n.fa-flip-horizontal {\n  -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)\";\n  -webkit-transform: scale(-1, 1);\n          transform: scale(-1, 1); }\n\n.fa-flip-vertical {\n  -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)\";\n  -webkit-transform: scale(1, -1);\n          transform: scale(1, -1); }\n\n.fa-flip-horizontal.fa-flip-vertical {\n  -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)\";\n  -webkit-transform: scale(-1, -1);\n          transform: scale(-1, -1); }\n\n:root .fa-rotate-90,\n:root .fa-rotate-180,\n:root .fa-rotate-270,\n:root .fa-flip-horizontal,\n:root .fa-flip-vertical {\n  -webkit-filter: none;\n          filter: none; }\n\n.fa-stack {\n  display: inline-block;\n  height: 2em;\n  line-height: 2em;\n  position: relative;\n  vertical-align: middle;\n  width: 2em; }\n\n.fa-stack-1x,\n.fa-stack-2x {\n  left: 0;\n  position: absolute;\n  text-align: center;\n  width: 100%; }\n\n.fa-stack-1x {\n  line-height: inherit; }\n\n.fa-stack-2x {\n  font-size: 2em; }\n\n.fa-inverse {\n  color: #fff; }\n\n/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen\nreaders do not read off random characters that represent icons */\n.fa-500px:before {\n  content: \"\\f26e\"; }\n\n.fa-accessible-icon:before {\n  content: \"\\f368\"; }\n\n.fa-accusoft:before {\n  content: \"\\f369\"; }\n\n.fa-address-book:before {\n  content: \"\\f2b9\"; }\n\n.fa-address-card:before {\n  content: \"\\f2bb\"; }\n\n.fa-adjust:before {\n  content: \"\\f042\"; }\n\n.fa-adn:before {\n  content: \"\\f170\"; }\n\n.fa-adversal:before {\n  content: \"\\f36a\"; }\n\n.fa-affiliatetheme:before {\n  content: \"\\f36b\"; }\n\n.fa-algolia:before {\n  content: \"\\f36c\"; }\n\n.fa-align-center:before {\n  content: \"\\f037\"; }\n\n.fa-align-justify:before {\n  content: \"\\f039\"; }\n\n.fa-align-left:before {\n  content: \"\\f036\"; }\n\n.fa-align-right:before {\n  content: \"\\f038\"; }\n\n.fa-amazon:before {\n  content: \"\\f270\"; }\n\n.fa-amazon-pay:before {\n  content: \"\\f42c\"; }\n\n.fa-ambulance:before {\n  content: \"\\f0f9\"; }\n\n.fa-american-sign-language-interpreting:before {\n  content: \"\\f2a3\"; }\n\n.fa-amilia:before {\n  content: \"\\f36d\"; }\n\n.fa-anchor:before {\n  content: \"\\f13d\"; }\n\n.fa-android:before {\n  content: \"\\f17b\"; }\n\n.fa-angellist:before {\n  content: \"\\f209\"; }\n\n.fa-angle-double-down:before {\n  content: \"\\f103\"; }\n\n.fa-angle-double-left:before {\n  content: \"\\f100\"; }\n\n.fa-angle-double-right:before {\n  content: \"\\f101\"; }\n\n.fa-angle-double-up:before {\n  content: \"\\f102\"; }\n\n.fa-angle-down:before {\n  content: \"\\f107\"; }\n\n.fa-angle-left:before {\n  content: \"\\f104\"; }\n\n.fa-angle-right:before {\n  content: \"\\f105\"; }\n\n.fa-angle-up:before {\n  content: \"\\f106\"; }\n\n.fa-angrycreative:before {\n  content: \"\\f36e\"; }\n\n.fa-angular:before {\n  content: \"\\f420\"; }\n\n.fa-app-store:before {\n  content: \"\\f36f\"; }\n\n.fa-app-store-ios:before {\n  content: \"\\f370\"; }\n\n.fa-apper:before {\n  content: \"\\f371\"; }\n\n.fa-apple:before {\n  content: \"\\f179\"; }\n\n.fa-apple-pay:before {\n  content: \"\\f415\"; }\n\n.fa-archive:before {\n  content: \"\\f187\"; }\n\n.fa-arrow-alt-circle-down:before {\n  content: \"\\f358\"; }\n\n.fa-arrow-alt-circle-left:before {\n  content: \"\\f359\"; }\n\n.fa-arrow-alt-circle-right:before {\n  content: \"\\f35a\"; }\n\n.fa-arrow-alt-circle-up:before {\n  content: \"\\f35b\"; }\n\n.fa-arrow-circle-down:before {\n  content: \"\\f0ab\"; }\n\n.fa-arrow-circle-left:before {\n  content: \"\\f0a8\"; }\n\n.fa-arrow-circle-right:before {\n  content: \"\\f0a9\"; }\n\n.fa-arrow-circle-up:before {\n  content: \"\\f0aa\"; }\n\n.fa-arrow-down:before {\n  content: \"\\f063\"; }\n\n.fa-arrow-left:before {\n  content: \"\\f060\"; }\n\n.fa-arrow-right:before {\n  content: \"\\f061\"; }\n\n.fa-arrow-up:before {\n  content: \"\\f062\"; }\n\n.fa-arrows-alt:before {\n  content: \"\\f0b2\"; }\n\n.fa-arrows-alt-h:before {\n  content: \"\\f337\"; }\n\n.fa-arrows-alt-v:before {\n  content: \"\\f338\"; }\n\n.fa-assistive-listening-systems:before {\n  content: \"\\f2a2\"; }\n\n.fa-asterisk:before {\n  content: \"\\f069\"; }\n\n.fa-asymmetrik:before {\n  content: \"\\f372\"; }\n\n.fa-at:before {\n  content: \"\\f1fa\"; }\n\n.fa-audible:before {\n  content: \"\\f373\"; }\n\n.fa-audio-description:before {\n  content: \"\\f29e\"; }\n\n.fa-autoprefixer:before {\n  content: \"\\f41c\"; }\n\n.fa-avianex:before {\n  content: \"\\f374\"; }\n\n.fa-aviato:before {\n  content: \"\\f421\"; }\n\n.fa-aws:before {\n  content: \"\\f375\"; }\n\n.fa-backward:before {\n  content: \"\\f04a\"; }\n\n.fa-balance-scale:before {\n  content: \"\\f24e\"; }\n\n.fa-ban:before {\n  content: \"\\f05e\"; }\n\n.fa-band-aid:before {\n  content: \"\\f462\"; }\n\n.fa-bandcamp:before {\n  content: \"\\f2d5\"; }\n\n.fa-barcode:before {\n  content: \"\\f02a\"; }\n\n.fa-bars:before {\n  content: \"\\f0c9\"; }\n\n.fa-baseball-ball:before {\n  content: \"\\f433\"; }\n\n.fa-basketball-ball:before {\n  content: \"\\f434\"; }\n\n.fa-bath:before {\n  content: \"\\f2cd\"; }\n\n.fa-battery-empty:before {\n  content: \"\\f244\"; }\n\n.fa-battery-full:before {\n  content: \"\\f240\"; }\n\n.fa-battery-half:before {\n  content: \"\\f242\"; }\n\n.fa-battery-quarter:before {\n  content: \"\\f243\"; }\n\n.fa-battery-three-quarters:before {\n  content: \"\\f241\"; }\n\n.fa-bed:before {\n  content: \"\\f236\"; }\n\n.fa-beer:before {\n  content: \"\\f0fc\"; }\n\n.fa-behance:before {\n  content: \"\\f1b4\"; }\n\n.fa-behance-square:before {\n  content: \"\\f1b5\"; }\n\n.fa-bell:before {\n  content: \"\\f0f3\"; }\n\n.fa-bell-slash:before {\n  content: \"\\f1f6\"; }\n\n.fa-bicycle:before {\n  content: \"\\f206\"; }\n\n.fa-bimobject:before {\n  content: \"\\f378\"; }\n\n.fa-binoculars:before {\n  content: \"\\f1e5\"; }\n\n.fa-birthday-cake:before {\n  content: \"\\f1fd\"; }\n\n.fa-bitbucket:before {\n  content: \"\\f171\"; }\n\n.fa-bitcoin:before {\n  content: \"\\f379\"; }\n\n.fa-bity:before {\n  content: \"\\f37a\"; }\n\n.fa-black-tie:before {\n  content: \"\\f27e\"; }\n\n.fa-blackberry:before {\n  content: \"\\f37b\"; }\n\n.fa-blind:before {\n  content: \"\\f29d\"; }\n\n.fa-blogger:before {\n  content: \"\\f37c\"; }\n\n.fa-blogger-b:before {\n  content: \"\\f37d\"; }\n\n.fa-bluetooth:before {\n  content: \"\\f293\"; }\n\n.fa-bluetooth-b:before {\n  content: \"\\f294\"; }\n\n.fa-bold:before {\n  content: \"\\f032\"; }\n\n.fa-bolt:before {\n  content: \"\\f0e7\"; }\n\n.fa-bomb:before {\n  content: \"\\f1e2\"; }\n\n.fa-book:before {\n  content: \"\\f02d\"; }\n\n.fa-bookmark:before {\n  content: \"\\f02e\"; }\n\n.fa-bowling-ball:before {\n  content: \"\\f436\"; }\n\n.fa-box:before {\n  content: \"\\f466\"; }\n\n.fa-boxes:before {\n  content: \"\\f468\"; }\n\n.fa-braille:before {\n  content: \"\\f2a1\"; }\n\n.fa-briefcase:before {\n  content: \"\\f0b1\"; }\n\n.fa-btc:before {\n  content: \"\\f15a\"; }\n\n.fa-bug:before {\n  content: \"\\f188\"; }\n\n.fa-building:before {\n  content: \"\\f1ad\"; }\n\n.fa-bullhorn:before {\n  content: \"\\f0a1\"; }\n\n.fa-bullseye:before {\n  content: \"\\f140\"; }\n\n.fa-buromobelexperte:before {\n  content: \"\\f37f\"; }\n\n.fa-bus:before {\n  content: \"\\f207\"; }\n\n.fa-buysellads:before {\n  content: \"\\f20d\"; }\n\n.fa-calculator:before {\n  content: \"\\f1ec\"; }\n\n.fa-calendar:before {\n  content: \"\\f133\"; }\n\n.fa-calendar-alt:before {\n  content: \"\\f073\"; }\n\n.fa-calendar-check:before {\n  content: \"\\f274\"; }\n\n.fa-calendar-minus:before {\n  content: \"\\f272\"; }\n\n.fa-calendar-plus:before {\n  content: \"\\f271\"; }\n\n.fa-calendar-times:before {\n  content: \"\\f273\"; }\n\n.fa-camera:before {\n  content: \"\\f030\"; }\n\n.fa-camera-retro:before {\n  content: \"\\f083\"; }\n\n.fa-car:before {\n  content: \"\\f1b9\"; }\n\n.fa-caret-down:before {\n  content: \"\\f0d7\"; }\n\n.fa-caret-left:before {\n  content: \"\\f0d9\"; }\n\n.fa-caret-right:before {\n  content: \"\\f0da\"; }\n\n.fa-caret-square-down:before {\n  content: \"\\f150\"; }\n\n.fa-caret-square-left:before {\n  content: \"\\f191\"; }\n\n.fa-caret-square-right:before {\n  content: \"\\f152\"; }\n\n.fa-caret-square-up:before {\n  content: \"\\f151\"; }\n\n.fa-caret-up:before {\n  content: \"\\f0d8\"; }\n\n.fa-cart-arrow-down:before {\n  content: \"\\f218\"; }\n\n.fa-cart-plus:before {\n  content: \"\\f217\"; }\n\n.fa-cc-amazon-pay:before {\n  content: \"\\f42d\"; }\n\n.fa-cc-amex:before {\n  content: \"\\f1f3\"; }\n\n.fa-cc-apple-pay:before {\n  content: \"\\f416\"; }\n\n.fa-cc-diners-club:before {\n  content: \"\\f24c\"; }\n\n.fa-cc-discover:before {\n  content: \"\\f1f2\"; }\n\n.fa-cc-jcb:before {\n  content: \"\\f24b\"; }\n\n.fa-cc-mastercard:before {\n  content: \"\\f1f1\"; }\n\n.fa-cc-paypal:before {\n  content: \"\\f1f4\"; }\n\n.fa-cc-stripe:before {\n  content: \"\\f1f5\"; }\n\n.fa-cc-visa:before {\n  content: \"\\f1f0\"; }\n\n.fa-centercode:before {\n  content: \"\\f380\"; }\n\n.fa-certificate:before {\n  content: \"\\f0a3\"; }\n\n.fa-chart-area:before {\n  content: \"\\f1fe\"; }\n\n.fa-chart-bar:before {\n  content: \"\\f080\"; }\n\n.fa-chart-line:before {\n  content: \"\\f201\"; }\n\n.fa-chart-pie:before {\n  content: \"\\f200\"; }\n\n.fa-check:before {\n  content: \"\\f00c\"; }\n\n.fa-check-circle:before {\n  content: \"\\f058\"; }\n\n.fa-check-square:before {\n  content: \"\\f14a\"; }\n\n.fa-chess:before {\n  content: \"\\f439\"; }\n\n.fa-chess-bishop:before {\n  content: \"\\f43a\"; }\n\n.fa-chess-board:before {\n  content: \"\\f43c\"; }\n\n.fa-chess-king:before {\n  content: \"\\f43f\"; }\n\n.fa-chess-knight:before {\n  content: \"\\f441\"; }\n\n.fa-chess-pawn:before {\n  content: \"\\f443\"; }\n\n.fa-chess-queen:before {\n  content: \"\\f445\"; }\n\n.fa-chess-rook:before {\n  content: \"\\f447\"; }\n\n.fa-chevron-circle-down:before {\n  content: \"\\f13a\"; }\n\n.fa-chevron-circle-left:before {\n  content: \"\\f137\"; }\n\n.fa-chevron-circle-right:before {\n  content: \"\\f138\"; }\n\n.fa-chevron-circle-up:before {\n  content: \"\\f139\"; }\n\n.fa-chevron-down:before {\n  content: \"\\f078\"; }\n\n.fa-chevron-left:before {\n  content: \"\\f053\"; }\n\n.fa-chevron-right:before {\n  content: \"\\f054\"; }\n\n.fa-chevron-up:before {\n  content: \"\\f077\"; }\n\n.fa-child:before {\n  content: \"\\f1ae\"; }\n\n.fa-chrome:before {\n  content: \"\\f268\"; }\n\n.fa-circle:before {\n  content: \"\\f111\"; }\n\n.fa-circle-notch:before {\n  content: \"\\f1ce\"; }\n\n.fa-clipboard:before {\n  content: \"\\f328\"; }\n\n.fa-clipboard-check:before {\n  content: \"\\f46c\"; }\n\n.fa-clipboard-list:before {\n  content: \"\\f46d\"; }\n\n.fa-clock:before {\n  content: \"\\f017\"; }\n\n.fa-clone:before {\n  content: \"\\f24d\"; }\n\n.fa-closed-captioning:before {\n  content: \"\\f20a\"; }\n\n.fa-cloud:before {\n  content: \"\\f0c2\"; }\n\n.fa-cloud-download-alt:before {\n  content: \"\\f381\"; }\n\n.fa-cloud-upload-alt:before {\n  content: \"\\f382\"; }\n\n.fa-cloudscale:before {\n  content: \"\\f383\"; }\n\n.fa-cloudsmith:before {\n  content: \"\\f384\"; }\n\n.fa-cloudversify:before {\n  content: \"\\f385\"; }\n\n.fa-code:before {\n  content: \"\\f121\"; }\n\n.fa-code-branch:before {\n  content: \"\\f126\"; }\n\n.fa-codepen:before {\n  content: \"\\f1cb\"; }\n\n.fa-codiepie:before {\n  content: \"\\f284\"; }\n\n.fa-coffee:before {\n  content: \"\\f0f4\"; }\n\n.fa-cog:before {\n  content: \"\\f013\"; }\n\n.fa-cogs:before {\n  content: \"\\f085\"; }\n\n.fa-columns:before {\n  content: \"\\f0db\"; }\n\n.fa-comment:before {\n  content: \"\\f075\"; }\n\n.fa-comment-alt:before {\n  content: \"\\f27a\"; }\n\n.fa-comments:before {\n  content: \"\\f086\"; }\n\n.fa-compass:before {\n  content: \"\\f14e\"; }\n\n.fa-compress:before {\n  content: \"\\f066\"; }\n\n.fa-connectdevelop:before {\n  content: \"\\f20e\"; }\n\n.fa-contao:before {\n  content: \"\\f26d\"; }\n\n.fa-copy:before {\n  content: \"\\f0c5\"; }\n\n.fa-copyright:before {\n  content: \"\\f1f9\"; }\n\n.fa-cpanel:before {\n  content: \"\\f388\"; }\n\n.fa-creative-commons:before {\n  content: \"\\f25e\"; }\n\n.fa-credit-card:before {\n  content: \"\\f09d\"; }\n\n.fa-crop:before {\n  content: \"\\f125\"; }\n\n.fa-crosshairs:before {\n  content: \"\\f05b\"; }\n\n.fa-css3:before {\n  content: \"\\f13c\"; }\n\n.fa-css3-alt:before {\n  content: \"\\f38b\"; }\n\n.fa-cube:before {\n  content: \"\\f1b2\"; }\n\n.fa-cubes:before {\n  content: \"\\f1b3\"; }\n\n.fa-cut:before {\n  content: \"\\f0c4\"; }\n\n.fa-cuttlefish:before {\n  content: \"\\f38c\"; }\n\n.fa-d-and-d:before {\n  content: \"\\f38d\"; }\n\n.fa-dashcube:before {\n  content: \"\\f210\"; }\n\n.fa-database:before {\n  content: \"\\f1c0\"; }\n\n.fa-deaf:before {\n  content: \"\\f2a4\"; }\n\n.fa-delicious:before {\n  content: \"\\f1a5\"; }\n\n.fa-deploydog:before {\n  content: \"\\f38e\"; }\n\n.fa-deskpro:before {\n  content: \"\\f38f\"; }\n\n.fa-desktop:before {\n  content: \"\\f108\"; }\n\n.fa-deviantart:before {\n  content: \"\\f1bd\"; }\n\n.fa-digg:before {\n  content: \"\\f1a6\"; }\n\n.fa-digital-ocean:before {\n  content: \"\\f391\"; }\n\n.fa-discord:before {\n  content: \"\\f392\"; }\n\n.fa-discourse:before {\n  content: \"\\f393\"; }\n\n.fa-dna:before {\n  content: \"\\f471\"; }\n\n.fa-dochub:before {\n  content: \"\\f394\"; }\n\n.fa-docker:before {\n  content: \"\\f395\"; }\n\n.fa-dollar-sign:before {\n  content: \"\\f155\"; }\n\n.fa-dolly:before {\n  content: \"\\f472\"; }\n\n.fa-dolly-flatbed:before {\n  content: \"\\f474\"; }\n\n.fa-dot-circle:before {\n  content: \"\\f192\"; }\n\n.fa-download:before {\n  content: \"\\f019\"; }\n\n.fa-draft2digital:before {\n  content: \"\\f396\"; }\n\n.fa-dribbble:before {\n  content: \"\\f17d\"; }\n\n.fa-dribbble-square:before {\n  content: \"\\f397\"; }\n\n.fa-dropbox:before {\n  content: \"\\f16b\"; }\n\n.fa-drupal:before {\n  content: \"\\f1a9\"; }\n\n.fa-dyalog:before {\n  content: \"\\f399\"; }\n\n.fa-earlybirds:before {\n  content: \"\\f39a\"; }\n\n.fa-edge:before {\n  content: \"\\f282\"; }\n\n.fa-edit:before {\n  content: \"\\f044\"; }\n\n.fa-eject:before {\n  content: \"\\f052\"; }\n\n.fa-elementor:before {\n  content: \"\\f430\"; }\n\n.fa-ellipsis-h:before {\n  content: \"\\f141\"; }\n\n.fa-ellipsis-v:before {\n  content: \"\\f142\"; }\n\n.fa-ember:before {\n  content: \"\\f423\"; }\n\n.fa-empire:before {\n  content: \"\\f1d1\"; }\n\n.fa-envelope:before {\n  content: \"\\f0e0\"; }\n\n.fa-envelope-open:before {\n  content: \"\\f2b6\"; }\n\n.fa-envelope-square:before {\n  content: \"\\f199\"; }\n\n.fa-envira:before {\n  content: \"\\f299\"; }\n\n.fa-eraser:before {\n  content: \"\\f12d\"; }\n\n.fa-erlang:before {\n  content: \"\\f39d\"; }\n\n.fa-ethereum:before {\n  content: \"\\f42e\"; }\n\n.fa-etsy:before {\n  content: \"\\f2d7\"; }\n\n.fa-euro-sign:before {\n  content: \"\\f153\"; }\n\n.fa-exchange-alt:before {\n  content: \"\\f362\"; }\n\n.fa-exclamation:before {\n  content: \"\\f12a\"; }\n\n.fa-exclamation-circle:before {\n  content: \"\\f06a\"; }\n\n.fa-exclamation-triangle:before {\n  content: \"\\f071\"; }\n\n.fa-expand:before {\n  content: \"\\f065\"; }\n\n.fa-expand-arrows-alt:before {\n  content: \"\\f31e\"; }\n\n.fa-expeditedssl:before {\n  content: \"\\f23e\"; }\n\n.fa-external-link-alt:before {\n  content: \"\\f35d\"; }\n\n.fa-external-link-square-alt:before {\n  content: \"\\f360\"; }\n\n.fa-eye:before {\n  content: \"\\f06e\"; }\n\n.fa-eye-dropper:before {\n  content: \"\\f1fb\"; }\n\n.fa-eye-slash:before {\n  content: \"\\f070\"; }\n\n.fa-facebook:before {\n  content: \"\\f09a\"; }\n\n.fa-facebook-f:before {\n  content: \"\\f39e\"; }\n\n.fa-facebook-messenger:before {\n  content: \"\\f39f\"; }\n\n.fa-facebook-square:before {\n  content: \"\\f082\"; }\n\n.fa-fast-backward:before {\n  content: \"\\f049\"; }\n\n.fa-fast-forward:before {\n  content: \"\\f050\"; }\n\n.fa-fax:before {\n  content: \"\\f1ac\"; }\n\n.fa-female:before {\n  content: \"\\f182\"; }\n\n.fa-fighter-jet:before {\n  content: \"\\f0fb\"; }\n\n.fa-file:before {\n  content: \"\\f15b\"; }\n\n.fa-file-alt:before {\n  content: \"\\f15c\"; }\n\n.fa-file-archive:before {\n  content: \"\\f1c6\"; }\n\n.fa-file-audio:before {\n  content: \"\\f1c7\"; }\n\n.fa-file-code:before {\n  content: \"\\f1c9\"; }\n\n.fa-file-excel:before {\n  content: \"\\f1c3\"; }\n\n.fa-file-image:before {\n  content: \"\\f1c5\"; }\n\n.fa-file-pdf:before {\n  content: \"\\f1c1\"; }\n\n.fa-file-powerpoint:before {\n  content: \"\\f1c4\"; }\n\n.fa-file-video:before {\n  content: \"\\f1c8\"; }\n\n.fa-file-word:before {\n  content: \"\\f1c2\"; }\n\n.fa-film:before {\n  content: \"\\f008\"; }\n\n.fa-filter:before {\n  content: \"\\f0b0\"; }\n\n.fa-fire:before {\n  content: \"\\f06d\"; }\n\n.fa-fire-extinguisher:before {\n  content: \"\\f134\"; }\n\n.fa-firefox:before {\n  content: \"\\f269\"; }\n\n.fa-first-aid:before {\n  content: \"\\f479\"; }\n\n.fa-first-order:before {\n  content: \"\\f2b0\"; }\n\n.fa-firstdraft:before {\n  content: \"\\f3a1\"; }\n\n.fa-flag:before {\n  content: \"\\f024\"; }\n\n.fa-flag-checkered:before {\n  content: \"\\f11e\"; }\n\n.fa-flask:before {\n  content: \"\\f0c3\"; }\n\n.fa-flickr:before {\n  content: \"\\f16e\"; }\n\n.fa-flipboard:before {\n  content: \"\\f44d\"; }\n\n.fa-fly:before {\n  content: \"\\f417\"; }\n\n.fa-folder:before {\n  content: \"\\f07b\"; }\n\n.fa-folder-open:before {\n  content: \"\\f07c\"; }\n\n.fa-font:before {\n  content: \"\\f031\"; }\n\n.fa-font-awesome:before {\n  content: \"\\f2b4\"; }\n\n.fa-font-awesome-alt:before {\n  content: \"\\f35c\"; }\n\n.fa-font-awesome-flag:before {\n  content: \"\\f425\"; }\n\n.fa-fonticons:before {\n  content: \"\\f280\"; }\n\n.fa-fonticons-fi:before {\n  content: \"\\f3a2\"; }\n\n.fa-football-ball:before {\n  content: \"\\f44e\"; }\n\n.fa-fort-awesome:before {\n  content: \"\\f286\"; }\n\n.fa-fort-awesome-alt:before {\n  content: \"\\f3a3\"; }\n\n.fa-forumbee:before {\n  content: \"\\f211\"; }\n\n.fa-forward:before {\n  content: \"\\f04e\"; }\n\n.fa-foursquare:before {\n  content: \"\\f180\"; }\n\n.fa-free-code-camp:before {\n  content: \"\\f2c5\"; }\n\n.fa-freebsd:before {\n  content: \"\\f3a4\"; }\n\n.fa-frown:before {\n  content: \"\\f119\"; }\n\n.fa-futbol:before {\n  content: \"\\f1e3\"; }\n\n.fa-gamepad:before {\n  content: \"\\f11b\"; }\n\n.fa-gavel:before {\n  content: \"\\f0e3\"; }\n\n.fa-gem:before {\n  content: \"\\f3a5\"; }\n\n.fa-genderless:before {\n  content: \"\\f22d\"; }\n\n.fa-get-pocket:before {\n  content: \"\\f265\"; }\n\n.fa-gg:before {\n  content: \"\\f260\"; }\n\n.fa-gg-circle:before {\n  content: \"\\f261\"; }\n\n.fa-gift:before {\n  content: \"\\f06b\"; }\n\n.fa-git:before {\n  content: \"\\f1d3\"; }\n\n.fa-git-square:before {\n  content: \"\\f1d2\"; }\n\n.fa-github:before {\n  content: \"\\f09b\"; }\n\n.fa-github-alt:before {\n  content: \"\\f113\"; }\n\n.fa-github-square:before {\n  content: \"\\f092\"; }\n\n.fa-gitkraken:before {\n  content: \"\\f3a6\"; }\n\n.fa-gitlab:before {\n  content: \"\\f296\"; }\n\n.fa-gitter:before {\n  content: \"\\f426\"; }\n\n.fa-glass-martini:before {\n  content: \"\\f000\"; }\n\n.fa-glide:before {\n  content: \"\\f2a5\"; }\n\n.fa-glide-g:before {\n  content: \"\\f2a6\"; }\n\n.fa-globe:before {\n  content: \"\\f0ac\"; }\n\n.fa-gofore:before {\n  content: \"\\f3a7\"; }\n\n.fa-golf-ball:before {\n  content: \"\\f450\"; }\n\n.fa-goodreads:before {\n  content: \"\\f3a8\"; }\n\n.fa-goodreads-g:before {\n  content: \"\\f3a9\"; }\n\n.fa-google:before {\n  content: \"\\f1a0\"; }\n\n.fa-google-drive:before {\n  content: \"\\f3aa\"; }\n\n.fa-google-play:before {\n  content: \"\\f3ab\"; }\n\n.fa-google-plus:before {\n  content: \"\\f2b3\"; }\n\n.fa-google-plus-g:before {\n  content: \"\\f0d5\"; }\n\n.fa-google-plus-square:before {\n  content: \"\\f0d4\"; }\n\n.fa-google-wallet:before {\n  content: \"\\f1ee\"; }\n\n.fa-graduation-cap:before {\n  content: \"\\f19d\"; }\n\n.fa-gratipay:before {\n  content: \"\\f184\"; }\n\n.fa-grav:before {\n  content: \"\\f2d6\"; }\n\n.fa-gripfire:before {\n  content: \"\\f3ac\"; }\n\n.fa-grunt:before {\n  content: \"\\f3ad\"; }\n\n.fa-gulp:before {\n  content: \"\\f3ae\"; }\n\n.fa-h-square:before {\n  content: \"\\f0fd\"; }\n\n.fa-hacker-news:before {\n  content: \"\\f1d4\"; }\n\n.fa-hacker-news-square:before {\n  content: \"\\f3af\"; }\n\n.fa-hand-lizard:before {\n  content: \"\\f258\"; }\n\n.fa-hand-paper:before {\n  content: \"\\f256\"; }\n\n.fa-hand-peace:before {\n  content: \"\\f25b\"; }\n\n.fa-hand-point-down:before {\n  content: \"\\f0a7\"; }\n\n.fa-hand-point-left:before {\n  content: \"\\f0a5\"; }\n\n.fa-hand-point-right:before {\n  content: \"\\f0a4\"; }\n\n.fa-hand-point-up:before {\n  content: \"\\f0a6\"; }\n\n.fa-hand-pointer:before {\n  content: \"\\f25a\"; }\n\n.fa-hand-rock:before {\n  content: \"\\f255\"; }\n\n.fa-hand-scissors:before {\n  content: \"\\f257\"; }\n\n.fa-hand-spock:before {\n  content: \"\\f259\"; }\n\n.fa-handshake:before {\n  content: \"\\f2b5\"; }\n\n.fa-hashtag:before {\n  content: \"\\f292\"; }\n\n.fa-hdd:before {\n  content: \"\\f0a0\"; }\n\n.fa-heading:before {\n  content: \"\\f1dc\"; }\n\n.fa-headphones:before {\n  content: \"\\f025\"; }\n\n.fa-heart:before {\n  content: \"\\f004\"; }\n\n.fa-heartbeat:before {\n  content: \"\\f21e\"; }\n\n.fa-hips:before {\n  content: \"\\f452\"; }\n\n.fa-hire-a-helper:before {\n  content: \"\\f3b0\"; }\n\n.fa-history:before {\n  content: \"\\f1da\"; }\n\n.fa-hockey-puck:before {\n  content: \"\\f453\"; }\n\n.fa-home:before {\n  content: \"\\f015\"; }\n\n.fa-hooli:before {\n  content: \"\\f427\"; }\n\n.fa-hospital:before {\n  content: \"\\f0f8\"; }\n\n.fa-hospital-symbol:before {\n  content: \"\\f47e\"; }\n\n.fa-hotjar:before {\n  content: \"\\f3b1\"; }\n\n.fa-hourglass:before {\n  content: \"\\f254\"; }\n\n.fa-hourglass-end:before {\n  content: \"\\f253\"; }\n\n.fa-hourglass-half:before {\n  content: \"\\f252\"; }\n\n.fa-hourglass-start:before {\n  content: \"\\f251\"; }\n\n.fa-houzz:before {\n  content: \"\\f27c\"; }\n\n.fa-html5:before {\n  content: \"\\f13b\"; }\n\n.fa-hubspot:before {\n  content: \"\\f3b2\"; }\n\n.fa-i-cursor:before {\n  content: \"\\f246\"; }\n\n.fa-id-badge:before {\n  content: \"\\f2c1\"; }\n\n.fa-id-card:before {\n  content: \"\\f2c2\"; }\n\n.fa-image:before {\n  content: \"\\f03e\"; }\n\n.fa-images:before {\n  content: \"\\f302\"; }\n\n.fa-imdb:before {\n  content: \"\\f2d8\"; }\n\n.fa-inbox:before {\n  content: \"\\f01c\"; }\n\n.fa-indent:before {\n  content: \"\\f03c\"; }\n\n.fa-industry:before {\n  content: \"\\f275\"; }\n\n.fa-info:before {\n  content: \"\\f129\"; }\n\n.fa-info-circle:before {\n  content: \"\\f05a\"; }\n\n.fa-instagram:before {\n  content: \"\\f16d\"; }\n\n.fa-internet-explorer:before {\n  content: \"\\f26b\"; }\n\n.fa-ioxhost:before {\n  content: \"\\f208\"; }\n\n.fa-italic:before {\n  content: \"\\f033\"; }\n\n.fa-itunes:before {\n  content: \"\\f3b4\"; }\n\n.fa-itunes-note:before {\n  content: \"\\f3b5\"; }\n\n.fa-jenkins:before {\n  content: \"\\f3b6\"; }\n\n.fa-joget:before {\n  content: \"\\f3b7\"; }\n\n.fa-joomla:before {\n  content: \"\\f1aa\"; }\n\n.fa-js:before {\n  content: \"\\f3b8\"; }\n\n.fa-js-square:before {\n  content: \"\\f3b9\"; }\n\n.fa-jsfiddle:before {\n  content: \"\\f1cc\"; }\n\n.fa-key:before {\n  content: \"\\f084\"; }\n\n.fa-keyboard:before {\n  content: \"\\f11c\"; }\n\n.fa-keycdn:before {\n  content: \"\\f3ba\"; }\n\n.fa-kickstarter:before {\n  content: \"\\f3bb\"; }\n\n.fa-kickstarter-k:before {\n  content: \"\\f3bc\"; }\n\n.fa-korvue:before {\n  content: \"\\f42f\"; }\n\n.fa-language:before {\n  content: \"\\f1ab\"; }\n\n.fa-laptop:before {\n  content: \"\\f109\"; }\n\n.fa-laravel:before {\n  content: \"\\f3bd\"; }\n\n.fa-lastfm:before {\n  content: \"\\f202\"; }\n\n.fa-lastfm-square:before {\n  content: \"\\f203\"; }\n\n.fa-leaf:before {\n  content: \"\\f06c\"; }\n\n.fa-leanpub:before {\n  content: \"\\f212\"; }\n\n.fa-lemon:before {\n  content: \"\\f094\"; }\n\n.fa-less:before {\n  content: \"\\f41d\"; }\n\n.fa-level-down-alt:before {\n  content: \"\\f3be\"; }\n\n.fa-level-up-alt:before {\n  content: \"\\f3bf\"; }\n\n.fa-life-ring:before {\n  content: \"\\f1cd\"; }\n\n.fa-lightbulb:before {\n  content: \"\\f0eb\"; }\n\n.fa-line:before {\n  content: \"\\f3c0\"; }\n\n.fa-link:before {\n  content: \"\\f0c1\"; }\n\n.fa-linkedin:before {\n  content: \"\\f08c\"; }\n\n.fa-linkedin-in:before {\n  content: \"\\f0e1\"; }\n\n.fa-linode:before {\n  content: \"\\f2b8\"; }\n\n.fa-linux:before {\n  content: \"\\f17c\"; }\n\n.fa-lira-sign:before {\n  content: \"\\f195\"; }\n\n.fa-list:before {\n  content: \"\\f03a\"; }\n\n.fa-list-alt:before {\n  content: \"\\f022\"; }\n\n.fa-list-ol:before {\n  content: \"\\f0cb\"; }\n\n.fa-list-ul:before {\n  content: \"\\f0ca\"; }\n\n.fa-location-arrow:before {\n  content: \"\\f124\"; }\n\n.fa-lock:before {\n  content: \"\\f023\"; }\n\n.fa-lock-open:before {\n  content: \"\\f3c1\"; }\n\n.fa-long-arrow-alt-down:before {\n  content: \"\\f309\"; }\n\n.fa-long-arrow-alt-left:before {\n  content: \"\\f30a\"; }\n\n.fa-long-arrow-alt-right:before {\n  content: \"\\f30b\"; }\n\n.fa-long-arrow-alt-up:before {\n  content: \"\\f30c\"; }\n\n.fa-low-vision:before {\n  content: \"\\f2a8\"; }\n\n.fa-lyft:before {\n  content: \"\\f3c3\"; }\n\n.fa-magento:before {\n  content: \"\\f3c4\"; }\n\n.fa-magic:before {\n  content: \"\\f0d0\"; }\n\n.fa-magnet:before {\n  content: \"\\f076\"; }\n\n.fa-male:before {\n  content: \"\\f183\"; }\n\n.fa-map:before {\n  content: \"\\f279\"; }\n\n.fa-map-marker:before {\n  content: \"\\f041\"; }\n\n.fa-map-marker-alt:before {\n  content: \"\\f3c5\"; }\n\n.fa-map-pin:before {\n  content: \"\\f276\"; }\n\n.fa-map-signs:before {\n  content: \"\\f277\"; }\n\n.fa-mars:before {\n  content: \"\\f222\"; }\n\n.fa-mars-double:before {\n  content: \"\\f227\"; }\n\n.fa-mars-stroke:before {\n  content: \"\\f229\"; }\n\n.fa-mars-stroke-h:before {\n  content: \"\\f22b\"; }\n\n.fa-mars-stroke-v:before {\n  content: \"\\f22a\"; }\n\n.fa-maxcdn:before {\n  content: \"\\f136\"; }\n\n.fa-medapps:before {\n  content: \"\\f3c6\"; }\n\n.fa-medium:before {\n  content: \"\\f23a\"; }\n\n.fa-medium-m:before {\n  content: \"\\f3c7\"; }\n\n.fa-medkit:before {\n  content: \"\\f0fa\"; }\n\n.fa-medrt:before {\n  content: \"\\f3c8\"; }\n\n.fa-meetup:before {\n  content: \"\\f2e0\"; }\n\n.fa-meh:before {\n  content: \"\\f11a\"; }\n\n.fa-mercury:before {\n  content: \"\\f223\"; }\n\n.fa-microchip:before {\n  content: \"\\f2db\"; }\n\n.fa-microphone:before {\n  content: \"\\f130\"; }\n\n.fa-microphone-slash:before {\n  content: \"\\f131\"; }\n\n.fa-microsoft:before {\n  content: \"\\f3ca\"; }\n\n.fa-minus:before {\n  content: \"\\f068\"; }\n\n.fa-minus-circle:before {\n  content: \"\\f056\"; }\n\n.fa-minus-square:before {\n  content: \"\\f146\"; }\n\n.fa-mix:before {\n  content: \"\\f3cb\"; }\n\n.fa-mixcloud:before {\n  content: \"\\f289\"; }\n\n.fa-mizuni:before {\n  content: \"\\f3cc\"; }\n\n.fa-mobile:before {\n  content: \"\\f10b\"; }\n\n.fa-mobile-alt:before {\n  content: \"\\f3cd\"; }\n\n.fa-modx:before {\n  content: \"\\f285\"; }\n\n.fa-monero:before {\n  content: \"\\f3d0\"; }\n\n.fa-money-bill-alt:before {\n  content: \"\\f3d1\"; }\n\n.fa-moon:before {\n  content: \"\\f186\"; }\n\n.fa-motorcycle:before {\n  content: \"\\f21c\"; }\n\n.fa-mouse-pointer:before {\n  content: \"\\f245\"; }\n\n.fa-music:before {\n  content: \"\\f001\"; }\n\n.fa-napster:before {\n  content: \"\\f3d2\"; }\n\n.fa-neuter:before {\n  content: \"\\f22c\"; }\n\n.fa-newspaper:before {\n  content: \"\\f1ea\"; }\n\n.fa-nintendo-switch:before {\n  content: \"\\f418\"; }\n\n.fa-node:before {\n  content: \"\\f419\"; }\n\n.fa-node-js:before {\n  content: \"\\f3d3\"; }\n\n.fa-npm:before {\n  content: \"\\f3d4\"; }\n\n.fa-ns8:before {\n  content: \"\\f3d5\"; }\n\n.fa-nutritionix:before {\n  content: \"\\f3d6\"; }\n\n.fa-object-group:before {\n  content: \"\\f247\"; }\n\n.fa-object-ungroup:before {\n  content: \"\\f248\"; }\n\n.fa-odnoklassniki:before {\n  content: \"\\f263\"; }\n\n.fa-odnoklassniki-square:before {\n  content: \"\\f264\"; }\n\n.fa-opencart:before {\n  content: \"\\f23d\"; }\n\n.fa-openid:before {\n  content: \"\\f19b\"; }\n\n.fa-opera:before {\n  content: \"\\f26a\"; }\n\n.fa-optin-monster:before {\n  content: \"\\f23c\"; }\n\n.fa-osi:before {\n  content: \"\\f41a\"; }\n\n.fa-outdent:before {\n  content: \"\\f03b\"; }\n\n.fa-page4:before {\n  content: \"\\f3d7\"; }\n\n.fa-pagelines:before {\n  content: \"\\f18c\"; }\n\n.fa-paint-brush:before {\n  content: \"\\f1fc\"; }\n\n.fa-palfed:before {\n  content: \"\\f3d8\"; }\n\n.fa-pallet:before {\n  content: \"\\f482\"; }\n\n.fa-paper-plane:before {\n  content: \"\\f1d8\"; }\n\n.fa-paperclip:before {\n  content: \"\\f0c6\"; }\n\n.fa-paragraph:before {\n  content: \"\\f1dd\"; }\n\n.fa-paste:before {\n  content: \"\\f0ea\"; }\n\n.fa-patreon:before {\n  content: \"\\f3d9\"; }\n\n.fa-pause:before {\n  content: \"\\f04c\"; }\n\n.fa-pause-circle:before {\n  content: \"\\f28b\"; }\n\n.fa-paw:before {\n  content: \"\\f1b0\"; }\n\n.fa-paypal:before {\n  content: \"\\f1ed\"; }\n\n.fa-pen-square:before {\n  content: \"\\f14b\"; }\n\n.fa-pencil-alt:before {\n  content: \"\\f303\"; }\n\n.fa-percent:before {\n  content: \"\\f295\"; }\n\n.fa-periscope:before {\n  content: \"\\f3da\"; }\n\n.fa-phabricator:before {\n  content: \"\\f3db\"; }\n\n.fa-phoenix-framework:before {\n  content: \"\\f3dc\"; }\n\n.fa-phone:before {\n  content: \"\\f095\"; }\n\n.fa-phone-square:before {\n  content: \"\\f098\"; }\n\n.fa-phone-volume:before {\n  content: \"\\f2a0\"; }\n\n.fa-php:before {\n  content: \"\\f457\"; }\n\n.fa-pied-piper:before {\n  content: \"\\f2ae\"; }\n\n.fa-pied-piper-alt:before {\n  content: \"\\f1a8\"; }\n\n.fa-pied-piper-pp:before {\n  content: \"\\f1a7\"; }\n\n.fa-pills:before {\n  content: \"\\f484\"; }\n\n.fa-pinterest:before {\n  content: \"\\f0d2\"; }\n\n.fa-pinterest-p:before {\n  content: \"\\f231\"; }\n\n.fa-pinterest-square:before {\n  content: \"\\f0d3\"; }\n\n.fa-plane:before {\n  content: \"\\f072\"; }\n\n.fa-play:before {\n  content: \"\\f04b\"; }\n\n.fa-play-circle:before {\n  content: \"\\f144\"; }\n\n.fa-playstation:before {\n  content: \"\\f3df\"; }\n\n.fa-plug:before {\n  content: \"\\f1e6\"; }\n\n.fa-plus:before {\n  content: \"\\f067\"; }\n\n.fa-plus-circle:before {\n  content: \"\\f055\"; }\n\n.fa-plus-square:before {\n  content: \"\\f0fe\"; }\n\n.fa-podcast:before {\n  content: \"\\f2ce\"; }\n\n.fa-pound-sign:before {\n  content: \"\\f154\"; }\n\n.fa-power-off:before {\n  content: \"\\f011\"; }\n\n.fa-print:before {\n  content: \"\\f02f\"; }\n\n.fa-product-hunt:before {\n  content: \"\\f288\"; }\n\n.fa-pushed:before {\n  content: \"\\f3e1\"; }\n\n.fa-puzzle-piece:before {\n  content: \"\\f12e\"; }\n\n.fa-python:before {\n  content: \"\\f3e2\"; }\n\n.fa-qq:before {\n  content: \"\\f1d6\"; }\n\n.fa-qrcode:before {\n  content: \"\\f029\"; }\n\n.fa-question:before {\n  content: \"\\f128\"; }\n\n.fa-question-circle:before {\n  content: \"\\f059\"; }\n\n.fa-quidditch:before {\n  content: \"\\f458\"; }\n\n.fa-quinscape:before {\n  content: \"\\f459\"; }\n\n.fa-quora:before {\n  content: \"\\f2c4\"; }\n\n.fa-quote-left:before {\n  content: \"\\f10d\"; }\n\n.fa-quote-right:before {\n  content: \"\\f10e\"; }\n\n.fa-random:before {\n  content: \"\\f074\"; }\n\n.fa-ravelry:before {\n  content: \"\\f2d9\"; }\n\n.fa-react:before {\n  content: \"\\f41b\"; }\n\n.fa-rebel:before {\n  content: \"\\f1d0\"; }\n\n.fa-recycle:before {\n  content: \"\\f1b8\"; }\n\n.fa-red-river:before {\n  content: \"\\f3e3\"; }\n\n.fa-reddit:before {\n  content: \"\\f1a1\"; }\n\n.fa-reddit-alien:before {\n  content: \"\\f281\"; }\n\n.fa-reddit-square:before {\n  content: \"\\f1a2\"; }\n\n.fa-redo:before {\n  content: \"\\f01e\"; }\n\n.fa-redo-alt:before {\n  content: \"\\f2f9\"; }\n\n.fa-registered:before {\n  content: \"\\f25d\"; }\n\n.fa-rendact:before {\n  content: \"\\f3e4\"; }\n\n.fa-renren:before {\n  content: \"\\f18b\"; }\n\n.fa-reply:before {\n  content: \"\\f3e5\"; }\n\n.fa-reply-all:before {\n  content: \"\\f122\"; }\n\n.fa-replyd:before {\n  content: \"\\f3e6\"; }\n\n.fa-resolving:before {\n  content: \"\\f3e7\"; }\n\n.fa-retweet:before {\n  content: \"\\f079\"; }\n\n.fa-road:before {\n  content: \"\\f018\"; }\n\n.fa-rocket:before {\n  content: \"\\f135\"; }\n\n.fa-rocketchat:before {\n  content: \"\\f3e8\"; }\n\n.fa-rockrms:before {\n  content: \"\\f3e9\"; }\n\n.fa-rss:before {\n  content: \"\\f09e\"; }\n\n.fa-rss-square:before {\n  content: \"\\f143\"; }\n\n.fa-ruble-sign:before {\n  content: \"\\f158\"; }\n\n.fa-rupee-sign:before {\n  content: \"\\f156\"; }\n\n.fa-safari:before {\n  content: \"\\f267\"; }\n\n.fa-sass:before {\n  content: \"\\f41e\"; }\n\n.fa-save:before {\n  content: \"\\f0c7\"; }\n\n.fa-schlix:before {\n  content: \"\\f3ea\"; }\n\n.fa-scribd:before {\n  content: \"\\f28a\"; }\n\n.fa-search:before {\n  content: \"\\f002\"; }\n\n.fa-search-minus:before {\n  content: \"\\f010\"; }\n\n.fa-search-plus:before {\n  content: \"\\f00e\"; }\n\n.fa-searchengin:before {\n  content: \"\\f3eb\"; }\n\n.fa-sellcast:before {\n  content: \"\\f2da\"; }\n\n.fa-sellsy:before {\n  content: \"\\f213\"; }\n\n.fa-server:before {\n  content: \"\\f233\"; }\n\n.fa-servicestack:before {\n  content: \"\\f3ec\"; }\n\n.fa-share:before {\n  content: \"\\f064\"; }\n\n.fa-share-alt:before {\n  content: \"\\f1e0\"; }\n\n.fa-share-alt-square:before {\n  content: \"\\f1e1\"; }\n\n.fa-share-square:before {\n  content: \"\\f14d\"; }\n\n.fa-shekel-sign:before {\n  content: \"\\f20b\"; }\n\n.fa-shield-alt:before {\n  content: \"\\f3ed\"; }\n\n.fa-ship:before {\n  content: \"\\f21a\"; }\n\n.fa-shipping-fast:before {\n  content: \"\\f48b\"; }\n\n.fa-shirtsinbulk:before {\n  content: \"\\f214\"; }\n\n.fa-shopping-bag:before {\n  content: \"\\f290\"; }\n\n.fa-shopping-basket:before {\n  content: \"\\f291\"; }\n\n.fa-shopping-cart:before {\n  content: \"\\f07a\"; }\n\n.fa-shower:before {\n  content: \"\\f2cc\"; }\n\n.fa-sign-in-alt:before {\n  content: \"\\f2f6\"; }\n\n.fa-sign-language:before {\n  content: \"\\f2a7\"; }\n\n.fa-sign-out-alt:before {\n  content: \"\\f2f5\"; }\n\n.fa-signal:before {\n  content: \"\\f012\"; }\n\n.fa-simplybuilt:before {\n  content: \"\\f215\"; }\n\n.fa-sistrix:before {\n  content: \"\\f3ee\"; }\n\n.fa-sitemap:before {\n  content: \"\\f0e8\"; }\n\n.fa-skyatlas:before {\n  content: \"\\f216\"; }\n\n.fa-skype:before {\n  content: \"\\f17e\"; }\n\n.fa-slack:before {\n  content: \"\\f198\"; }\n\n.fa-slack-hash:before {\n  content: \"\\f3ef\"; }\n\n.fa-sliders-h:before {\n  content: \"\\f1de\"; }\n\n.fa-slideshare:before {\n  content: \"\\f1e7\"; }\n\n.fa-smile:before {\n  content: \"\\f118\"; }\n\n.fa-snapchat:before {\n  content: \"\\f2ab\"; }\n\n.fa-snapchat-ghost:before {\n  content: \"\\f2ac\"; }\n\n.fa-snapchat-square:before {\n  content: \"\\f2ad\"; }\n\n.fa-snowflake:before {\n  content: \"\\f2dc\"; }\n\n.fa-sort:before {\n  content: \"\\f0dc\"; }\n\n.fa-sort-alpha-down:before {\n  content: \"\\f15d\"; }\n\n.fa-sort-alpha-up:before {\n  content: \"\\f15e\"; }\n\n.fa-sort-amount-down:before {\n  content: \"\\f160\"; }\n\n.fa-sort-amount-up:before {\n  content: \"\\f161\"; }\n\n.fa-sort-down:before {\n  content: \"\\f0dd\"; }\n\n.fa-sort-numeric-down:before {\n  content: \"\\f162\"; }\n\n.fa-sort-numeric-up:before {\n  content: \"\\f163\"; }\n\n.fa-sort-up:before {\n  content: \"\\f0de\"; }\n\n.fa-soundcloud:before {\n  content: \"\\f1be\"; }\n\n.fa-space-shuttle:before {\n  content: \"\\f197\"; }\n\n.fa-speakap:before {\n  content: \"\\f3f3\"; }\n\n.fa-spinner:before {\n  content: \"\\f110\"; }\n\n.fa-spotify:before {\n  content: \"\\f1bc\"; }\n\n.fa-square:before {\n  content: \"\\f0c8\"; }\n\n.fa-square-full:before {\n  content: \"\\f45c\"; }\n\n.fa-stack-exchange:before {\n  content: \"\\f18d\"; }\n\n.fa-stack-overflow:before {\n  content: \"\\f16c\"; }\n\n.fa-star:before {\n  content: \"\\f005\"; }\n\n.fa-star-half:before {\n  content: \"\\f089\"; }\n\n.fa-staylinked:before {\n  content: \"\\f3f5\"; }\n\n.fa-steam:before {\n  content: \"\\f1b6\"; }\n\n.fa-steam-square:before {\n  content: \"\\f1b7\"; }\n\n.fa-steam-symbol:before {\n  content: \"\\f3f6\"; }\n\n.fa-step-backward:before {\n  content: \"\\f048\"; }\n\n.fa-step-forward:before {\n  content: \"\\f051\"; }\n\n.fa-stethoscope:before {\n  content: \"\\f0f1\"; }\n\n.fa-sticker-mule:before {\n  content: \"\\f3f7\"; }\n\n.fa-sticky-note:before {\n  content: \"\\f249\"; }\n\n.fa-stop:before {\n  content: \"\\f04d\"; }\n\n.fa-stop-circle:before {\n  content: \"\\f28d\"; }\n\n.fa-stopwatch:before {\n  content: \"\\f2f2\"; }\n\n.fa-strava:before {\n  content: \"\\f428\"; }\n\n.fa-street-view:before {\n  content: \"\\f21d\"; }\n\n.fa-strikethrough:before {\n  content: \"\\f0cc\"; }\n\n.fa-stripe:before {\n  content: \"\\f429\"; }\n\n.fa-stripe-s:before {\n  content: \"\\f42a\"; }\n\n.fa-studiovinari:before {\n  content: \"\\f3f8\"; }\n\n.fa-stumbleupon:before {\n  content: \"\\f1a4\"; }\n\n.fa-stumbleupon-circle:before {\n  content: \"\\f1a3\"; }\n\n.fa-subscript:before {\n  content: \"\\f12c\"; }\n\n.fa-subway:before {\n  content: \"\\f239\"; }\n\n.fa-suitcase:before {\n  content: \"\\f0f2\"; }\n\n.fa-sun:before {\n  content: \"\\f185\"; }\n\n.fa-superpowers:before {\n  content: \"\\f2dd\"; }\n\n.fa-superscript:before {\n  content: \"\\f12b\"; }\n\n.fa-supple:before {\n  content: \"\\f3f9\"; }\n\n.fa-sync:before {\n  content: \"\\f021\"; }\n\n.fa-sync-alt:before {\n  content: \"\\f2f1\"; }\n\n.fa-syringe:before {\n  content: \"\\f48e\"; }\n\n.fa-table:before {\n  content: \"\\f0ce\"; }\n\n.fa-table-tennis:before {\n  content: \"\\f45d\"; }\n\n.fa-tablet:before {\n  content: \"\\f10a\"; }\n\n.fa-tablet-alt:before {\n  content: \"\\f3fa\"; }\n\n.fa-tachometer-alt:before {\n  content: \"\\f3fd\"; }\n\n.fa-tag:before {\n  content: \"\\f02b\"; }\n\n.fa-tags:before {\n  content: \"\\f02c\"; }\n\n.fa-tasks:before {\n  content: \"\\f0ae\"; }\n\n.fa-taxi:before {\n  content: \"\\f1ba\"; }\n\n.fa-telegram:before {\n  content: \"\\f2c6\"; }\n\n.fa-telegram-plane:before {\n  content: \"\\f3fe\"; }\n\n.fa-tencent-weibo:before {\n  content: \"\\f1d5\"; }\n\n.fa-terminal:before {\n  content: \"\\f120\"; }\n\n.fa-text-height:before {\n  content: \"\\f034\"; }\n\n.fa-text-width:before {\n  content: \"\\f035\"; }\n\n.fa-th:before {\n  content: \"\\f00a\"; }\n\n.fa-th-large:before {\n  content: \"\\f009\"; }\n\n.fa-th-list:before {\n  content: \"\\f00b\"; }\n\n.fa-themeisle:before {\n  content: \"\\f2b2\"; }\n\n.fa-thermometer:before {\n  content: \"\\f491\"; }\n\n.fa-thermometer-empty:before {\n  content: \"\\f2cb\"; }\n\n.fa-thermometer-full:before {\n  content: \"\\f2c7\"; }\n\n.fa-thermometer-half:before {\n  content: \"\\f2c9\"; }\n\n.fa-thermometer-quarter:before {\n  content: \"\\f2ca\"; }\n\n.fa-thermometer-three-quarters:before {\n  content: \"\\f2c8\"; }\n\n.fa-thumbs-down:before {\n  content: \"\\f165\"; }\n\n.fa-thumbs-up:before {\n  content: \"\\f164\"; }\n\n.fa-thumbtack:before {\n  content: \"\\f08d\"; }\n\n.fa-ticket-alt:before {\n  content: \"\\f3ff\"; }\n\n.fa-times:before {\n  content: \"\\f00d\"; }\n\n.fa-times-circle:before {\n  content: \"\\f057\"; }\n\n.fa-tint:before {\n  content: \"\\f043\"; }\n\n.fa-toggle-off:before {\n  content: \"\\f204\"; }\n\n.fa-toggle-on:before {\n  content: \"\\f205\"; }\n\n.fa-trademark:before {\n  content: \"\\f25c\"; }\n\n.fa-train:before {\n  content: \"\\f238\"; }\n\n.fa-transgender:before {\n  content: \"\\f224\"; }\n\n.fa-transgender-alt:before {\n  content: \"\\f225\"; }\n\n.fa-trash:before {\n  content: \"\\f1f8\"; }\n\n.fa-trash-alt:before {\n  content: \"\\f2ed\"; }\n\n.fa-tree:before {\n  content: \"\\f1bb\"; }\n\n.fa-trello:before {\n  content: \"\\f181\"; }\n\n.fa-tripadvisor:before {\n  content: \"\\f262\"; }\n\n.fa-trophy:before {\n  content: \"\\f091\"; }\n\n.fa-truck:before {\n  content: \"\\f0d1\"; }\n\n.fa-tty:before {\n  content: \"\\f1e4\"; }\n\n.fa-tumblr:before {\n  content: \"\\f173\"; }\n\n.fa-tumblr-square:before {\n  content: \"\\f174\"; }\n\n.fa-tv:before {\n  content: \"\\f26c\"; }\n\n.fa-twitch:before {\n  content: \"\\f1e8\"; }\n\n.fa-twitter:before {\n  content: \"\\f099\"; }\n\n.fa-twitter-square:before {\n  content: \"\\f081\"; }\n\n.fa-typo3:before {\n  content: \"\\f42b\"; }\n\n.fa-uber:before {\n  content: \"\\f402\"; }\n\n.fa-uikit:before {\n  content: \"\\f403\"; }\n\n.fa-umbrella:before {\n  content: \"\\f0e9\"; }\n\n.fa-underline:before {\n  content: \"\\f0cd\"; }\n\n.fa-undo:before {\n  content: \"\\f0e2\"; }\n\n.fa-undo-alt:before {\n  content: \"\\f2ea\"; }\n\n.fa-uniregistry:before {\n  content: \"\\f404\"; }\n\n.fa-universal-access:before {\n  content: \"\\f29a\"; }\n\n.fa-university:before {\n  content: \"\\f19c\"; }\n\n.fa-unlink:before {\n  content: \"\\f127\"; }\n\n.fa-unlock:before {\n  content: \"\\f09c\"; }\n\n.fa-unlock-alt:before {\n  content: \"\\f13e\"; }\n\n.fa-untappd:before {\n  content: \"\\f405\"; }\n\n.fa-upload:before {\n  content: \"\\f093\"; }\n\n.fa-usb:before {\n  content: \"\\f287\"; }\n\n.fa-user:before {\n  content: \"\\f007\"; }\n\n.fa-user-circle:before {\n  content: \"\\f2bd\"; }\n\n.fa-user-md:before {\n  content: \"\\f0f0\"; }\n\n.fa-user-plus:before {\n  content: \"\\f234\"; }\n\n.fa-user-secret:before {\n  content: \"\\f21b\"; }\n\n.fa-user-times:before {\n  content: \"\\f235\"; }\n\n.fa-users:before {\n  content: \"\\f0c0\"; }\n\n.fa-ussunnah:before {\n  content: \"\\f407\"; }\n\n.fa-utensil-spoon:before {\n  content: \"\\f2e5\"; }\n\n.fa-utensils:before {\n  content: \"\\f2e7\"; }\n\n.fa-vaadin:before {\n  content: \"\\f408\"; }\n\n.fa-venus:before {\n  content: \"\\f221\"; }\n\n.fa-venus-double:before {\n  content: \"\\f226\"; }\n\n.fa-venus-mars:before {\n  content: \"\\f228\"; }\n\n.fa-viacoin:before {\n  content: \"\\f237\"; }\n\n.fa-viadeo:before {\n  content: \"\\f2a9\"; }\n\n.fa-viadeo-square:before {\n  content: \"\\f2aa\"; }\n\n.fa-viber:before {\n  content: \"\\f409\"; }\n\n.fa-video:before {\n  content: \"\\f03d\"; }\n\n.fa-vimeo:before {\n  content: \"\\f40a\"; }\n\n.fa-vimeo-square:before {\n  content: \"\\f194\"; }\n\n.fa-vimeo-v:before {\n  content: \"\\f27d\"; }\n\n.fa-vine:before {\n  content: \"\\f1ca\"; }\n\n.fa-vk:before {\n  content: \"\\f189\"; }\n\n.fa-vnv:before {\n  content: \"\\f40b\"; }\n\n.fa-volleyball-ball:before {\n  content: \"\\f45f\"; }\n\n.fa-volume-down:before {\n  content: \"\\f027\"; }\n\n.fa-volume-off:before {\n  content: \"\\f026\"; }\n\n.fa-volume-up:before {\n  content: \"\\f028\"; }\n\n.fa-vuejs:before {\n  content: \"\\f41f\"; }\n\n.fa-warehouse:before {\n  content: \"\\f494\"; }\n\n.fa-weibo:before {\n  content: \"\\f18a\"; }\n\n.fa-weight:before {\n  content: \"\\f496\"; }\n\n.fa-weixin:before {\n  content: \"\\f1d7\"; }\n\n.fa-whatsapp:before {\n  content: \"\\f232\"; }\n\n.fa-whatsapp-square:before {\n  content: \"\\f40c\"; }\n\n.fa-wheelchair:before {\n  content: \"\\f193\"; }\n\n.fa-whmcs:before {\n  content: \"\\f40d\"; }\n\n.fa-wifi:before {\n  content: \"\\f1eb\"; }\n\n.fa-wikipedia-w:before {\n  content: \"\\f266\"; }\n\n.fa-window-close:before {\n  content: \"\\f410\"; }\n\n.fa-window-maximize:before {\n  content: \"\\f2d0\"; }\n\n.fa-window-minimize:before {\n  content: \"\\f2d1\"; }\n\n.fa-window-restore:before {\n  content: \"\\f2d2\"; }\n\n.fa-windows:before {\n  content: \"\\f17a\"; }\n\n.fa-won-sign:before {\n  content: \"\\f159\"; }\n\n.fa-wordpress:before {\n  content: \"\\f19a\"; }\n\n.fa-wordpress-simple:before {\n  content: \"\\f411\"; }\n\n.fa-wpbeginner:before {\n  content: \"\\f297\"; }\n\n.fa-wpexplorer:before {\n  content: \"\\f2de\"; }\n\n.fa-wpforms:before {\n  content: \"\\f298\"; }\n\n.fa-wrench:before {\n  content: \"\\f0ad\"; }\n\n.fa-xbox:before {\n  content: \"\\f412\"; }\n\n.fa-xing:before {\n  content: \"\\f168\"; }\n\n.fa-xing-square:before {\n  content: \"\\f169\"; }\n\n.fa-y-combinator:before {\n  content: \"\\f23b\"; }\n\n.fa-yahoo:before {\n  content: \"\\f19e\"; }\n\n.fa-yandex:before {\n  content: \"\\f413\"; }\n\n.fa-yandex-international:before {\n  content: \"\\f414\"; }\n\n.fa-yelp:before {\n  content: \"\\f1e9\"; }\n\n.fa-yen-sign:before {\n  content: \"\\f157\"; }\n\n.fa-yoast:before {\n  content: \"\\f2b1\"; }\n\n.fa-youtube:before {\n  content: \"\\f167\"; }\n\n.fa-youtube-square:before {\n  content: \"\\f431\"; }\n\n.sr-only {\n  border: 0;\n  clip: rect(0, 0, 0, 0);\n  height: 1px;\n  margin: -1px;\n  overflow: hidden;\n  padding: 0;\n  position: absolute;\n  width: 1px; }\n\n.sr-only-focusable:active, .sr-only-focusable:focus {\n  clip: auto;\n  height: auto;\n  margin: 0;\n  overflow: visible;\n  position: static;\n  width: auto; }\n@font-face {\n  font-family: 'Font Awesome 5 Brands';\n  font-style: normal;\n  font-weight: normal;\n  src: url(\"../webfonts/fa-brands-400.eot\");\n  src: url(\"../webfonts/fa-brands-400.eot?#iefix\") format(\"embedded-opentype\"), url(\"../webfonts/fa-brands-400.woff2\") format(\"woff2\"), url(\"../webfonts/fa-brands-400.woff\") format(\"woff\"), url(\"../webfonts/fa-brands-400.ttf\") format(\"truetype\"), url(\"../webfonts/fa-brands-400.svg#fontawesome\") format(\"svg\"); }\n\n.fab {\n  font-family: 'Font Awesome 5 Brands'; }\n@font-face {\n  font-family: 'Font Awesome 5 Free';\n  font-style: normal;\n  font-weight: 400;\n  src: url(\"../webfonts/fa-regular-400.eot\");\n  src: url(\"../webfonts/fa-regular-400.eot?#iefix\") format(\"embedded-opentype\"), url(\"../webfonts/fa-regular-400.woff2\") format(\"woff2\"), url(\"../webfonts/fa-regular-400.woff\") format(\"woff\"), url(\"../webfonts/fa-regular-400.ttf\") format(\"truetype\"), url(\"../webfonts/fa-regular-400.svg#fontawesome\") format(\"svg\"); }\n\n.far {\n  font-family: 'Font Awesome 5 Free';\n  font-weight: 400; }\n@font-face {\n  font-family: 'Font Awesome 5 Free';\n  font-style: normal;\n  font-weight: 900;\n  src: url(\"../webfonts/fa-solid-900.eot\");\n  src: url(\"../webfonts/fa-solid-900.eot?#iefix\") format(\"embedded-opentype\"), url(\"../webfonts/fa-solid-900.woff2\") format(\"woff2\"), url(\"../webfonts/fa-solid-900.woff\") format(\"woff\"), url(\"../webfonts/fa-solid-900.ttf\") format(\"truetype\"), url(\"../webfonts/fa-solid-900.svg#fontawesome\") format(\"svg\"); }\n\n.fa,\n.fas {\n  font-family: 'Font Awesome 5 Free';\n  font-weight: 900; }\n"
  },
  {
    "path": "src/sourceDev.WebApp/SharedThemes/cyborg/wwwroot/css/site.css",
    "content": "﻿html {\n    position: relative;\n    min-height: 100%;\n}\n\nbody {\n    min-height: 100vh;\n    padding-top: 158px;\n}\n\n#newPostLink {\n    position: absolute;\n    top: 170px;\n    right: 0px;\n}\n\n#editPostLink {\n    position: absolute;\n    top: 200px;\n    right: 0px;\n}\n\n#unpublishPostLink {\n    position: absolute;\n    top: 230px !important;\n    right: 0px !important;\n}\n\n#pageManagerLink {\n    position: absolute;\n    top: 170px;\n    right: 0px;\n}\n\n#newPageLink {\n    position: absolute;\n    top: 200px;\n    right: 0px;\n}\n\n#editPageLink {\n    position: absolute;\n    top: 230px;\n    right: 0px\n}\n\n#unpublishPageLink {\n    position: absolute;\n    top: 260px !important;\n    right: 0px !important\n}\n\n#sidenavtoggle {\n    position: absolute;\n    top: 220px;\n    right: 5px;\n}\n\n\n@media screen and (max-width: 812px) {\n    #sidenavtoggle,\n    #sidenavmenu {\n        display: none;\n    }\n}\n\n.flex-fill {\n    flex: 1 1 auto !important;\n}\n\n\n.carousel-caption p {\n    font-size: 20px;\n    line-height: 1.4;\n}\n\n@media screen and (max-width: 768px) {\n    .carousel-caption {\n        display: none\n    }\n}\n\n\n\n\nimg, video, iframe {\n    max-width: 100%;\n}\n\ntd img, video, iframe {\n    max-width: none;\n}\n\n\n\n.table td, .table th {\n    vertical-align: inherit;\n}\n\n/******** jquery smartmenu bootstrap 4 ******/\n/* Carets in collapsible mode (make them look like +/- buttons) */\n.navbar-nav.sm-collapsible .sub-arrow {\n    position: absolute;\n    top: 50%;\n    right: 0;\n    margin: -0.7em 0.5em 0 0;\n    border: 1px solid rgba(0, 0, 0, .1);\n    border-radius: .25rem;\n    padding: 0;\n    width: 2em;\n    height: 1.4em;\n    font-size: 1.25rem;\n    line-height: 1.2em;\n    text-align: center;\n}\n\n    .navbar-nav.sm-collapsible .sub-arrow::before {\n        content: '+';\n    }\n\n.navbar-nav.sm-collapsible .show > a > .sub-arrow::before {\n    content: '-';\n}\n\n.navbar-dark .navbar-nav.sm-collapsible .nav-link .sub-arrow {\n    border-color: rgba(255, 255, 255, .1);\n}\n/* make sure there's room for the carets */\n.navbar-nav.sm-collapsible .has-submenu {\n    padding-right: 3em;\n}\n/* keep the carets properly positioned */\n.navbar-nav.sm-collapsible .nav-link,\n.navbar-nav.sm-collapsible .dropdown-item {\n    position: relative;\n}\n\n\n/* Nav carets in expanded mode */\n.navbar-nav:not(.sm-collapsible) .nav-link .sub-arrow {\n    display: inline-block;\n    width: 0;\n    height: 0;\n    margin-left: .255em;\n    vertical-align: .255em;\n    border-top: .3em solid;\n    border-right: .3em solid transparent;\n    border-left: .3em solid transparent;\n}\n/* point the arrows up for .fixed-bottom navbars */\n.fixed-bottom .navbar-nav:not(.sm-collapsible) .nav-link .sub-arrow,\n.fixed-bottom .navbar-nav:not(.sm-collapsible):not([data-sm-skip]) .dropdown-toggle::after {\n    border-top: 0;\n    border-bottom: .3em solid;\n}\n\n\n/* Dropdown carets in expanded mode */\n.navbar-nav:not(.sm-collapsible) .dropdown-item .sub-arrow,\n.navbar-nav:not(.sm-collapsible):not([data-sm-skip]) .dropdown-menu .dropdown-toggle::after {\n    position: absolute;\n    top: 50%;\n    right: 0;\n    width: 0;\n    height: 0;\n    margin-top: -.3em;\n    margin-right: 1em;\n    border-top: .3em solid transparent;\n    border-bottom: .3em solid transparent;\n    border-left: .3em solid;\n}\n/* make sure there's room for the carets */\n.navbar-nav:not(.sm-collapsible) .dropdown-item.has-submenu {\n    padding-right: 2em;\n}\n\n\n/* Scrolling arrows for tall menus */\n.navbar-nav .scroll-up,\n.navbar-nav .scroll-down {\n    position: absolute;\n    display: none;\n    visibility: hidden;\n    height: 20px;\n    overflow: hidden;\n    text-align: center;\n}\n\n.navbar-nav .scroll-up-arrow,\n.navbar-nav .scroll-down-arrow {\n    position: absolute;\n    top: -2px;\n    left: 50%;\n    margin-left: -8px;\n    width: 0;\n    height: 0;\n    overflow: hidden;\n    border-top: 7px solid transparent;\n    border-right: 7px solid transparent;\n    border-bottom: 7px solid;\n    border-left: 7px solid transparent;\n}\n\n.navbar-nav .scroll-down-arrow {\n    top: 6px;\n    border-top: 7px solid;\n    border-right: 7px solid transparent;\n    border-bottom: 7px solid transparent;\n    border-left: 7px solid transparent;\n}\n\n\n/* Add some spacing for 2+ level sub menus in collapsible mode */\n.navbar-nav.sm-collapsible .dropdown-menu .dropdown-menu {\n    margin: .5em;\n}\n\n\n/* Fix SmartMenus sub menus auto width (subMenusMinWidth/subMenusMaxWidth options) */\n.navbar-nav:not([data-sm-skip]) .dropdown-item {\n    white-space: normal;\n}\n\n.navbar-nav:not(.sm-collapsible) .sm-nowrap > li > .dropdown-item {\n    white-space: nowrap;\n}\n/******** end jquery smart menu bootstrap-4 *****************/\n\n.brand-header {\n    height: 100px;\n}\n\nheader .navbar {\n    top: 100px;\n}\n"
  },
  {
    "path": "src/sourceDev.WebApp/SharedThemes/cyborg/wwwroot/js/bootstrap.bundle.js",
    "content": "/*!\n  * Bootstrap v5.0.2 (https://getbootstrap.com/)\n  * Copyright 2011-2021 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)\n  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n  */\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n  typeof define === 'function' && define.amd ? define(factory) :\n  (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.bootstrap = factory());\n}(this, (function () { 'use strict';\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): dom/selector-engine.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n  const NODE_TEXT = 3;\n  const SelectorEngine = {\n    find(selector, element = document.documentElement) {\n      return [].concat(...Element.prototype.querySelectorAll.call(element, selector));\n    },\n\n    findOne(selector, element = document.documentElement) {\n      return Element.prototype.querySelector.call(element, selector);\n    },\n\n    children(element, selector) {\n      return [].concat(...element.children).filter(child => child.matches(selector));\n    },\n\n    parents(element, selector) {\n      const parents = [];\n      let ancestor = element.parentNode;\n\n      while (ancestor && ancestor.nodeType === Node.ELEMENT_NODE && ancestor.nodeType !== NODE_TEXT) {\n        if (ancestor.matches(selector)) {\n          parents.push(ancestor);\n        }\n\n        ancestor = ancestor.parentNode;\n      }\n\n      return parents;\n    },\n\n    prev(element, selector) {\n      let previous = element.previousElementSibling;\n\n      while (previous) {\n        if (previous.matches(selector)) {\n          return [previous];\n        }\n\n        previous = previous.previousElementSibling;\n      }\n\n      return [];\n    },\n\n    next(element, selector) {\n      let next = element.nextElementSibling;\n\n      while (next) {\n        if (next.matches(selector)) {\n          return [next];\n        }\n\n        next = next.nextElementSibling;\n      }\n\n      return [];\n    }\n\n  };\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): util/index.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n\n  const MAX_UID = 1000000;\n  const MILLISECONDS_MULTIPLIER = 1000;\n  const TRANSITION_END = 'transitionend'; // Shoutout AngusCroll (https://goo.gl/pxwQGp)\n\n  const toType = obj => {\n    if (obj === null || obj === undefined) {\n      return `${obj}`;\n    }\n\n    return {}.toString.call(obj).match(/\\s([a-z]+)/i)[1].toLowerCase();\n  };\n  /**\n   * --------------------------------------------------------------------------\n   * Public Util Api\n   * --------------------------------------------------------------------------\n   */\n\n\n  const getUID = prefix => {\n    do {\n      prefix += Math.floor(Math.random() * MAX_UID);\n    } while (document.getElementById(prefix));\n\n    return prefix;\n  };\n\n  const getSelector = element => {\n    let selector = element.getAttribute('data-bs-target');\n\n    if (!selector || selector === '#') {\n      let hrefAttr = element.getAttribute('href'); // The only valid content that could double as a selector are IDs or classes,\n      // so everything starting with `#` or `.`. If a \"real\" URL is used as the selector,\n      // `document.querySelector` will rightfully complain it is invalid.\n      // See https://github.com/twbs/bootstrap/issues/32273\n\n      if (!hrefAttr || !hrefAttr.includes('#') && !hrefAttr.startsWith('.')) {\n        return null;\n      } // Just in case some CMS puts out a full URL with the anchor appended\n\n\n      if (hrefAttr.includes('#') && !hrefAttr.startsWith('#')) {\n        hrefAttr = `#${hrefAttr.split('#')[1]}`;\n      }\n\n      selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : null;\n    }\n\n    return selector;\n  };\n\n  const getSelectorFromElement = element => {\n    const selector = getSelector(element);\n\n    if (selector) {\n      return document.querySelector(selector) ? selector : null;\n    }\n\n    return null;\n  };\n\n  const getElementFromSelector = element => {\n    const selector = getSelector(element);\n    return selector ? document.querySelector(selector) : null;\n  };\n\n  const getTransitionDurationFromElement = element => {\n    if (!element) {\n      return 0;\n    } // Get transition-duration of the element\n\n\n    let {\n      transitionDuration,\n      transitionDelay\n    } = window.getComputedStyle(element);\n    const floatTransitionDuration = Number.parseFloat(transitionDuration);\n    const floatTransitionDelay = Number.parseFloat(transitionDelay); // Return 0 if element or transition duration is not found\n\n    if (!floatTransitionDuration && !floatTransitionDelay) {\n      return 0;\n    } // If multiple durations are defined, take the first\n\n\n    transitionDuration = transitionDuration.split(',')[0];\n    transitionDelay = transitionDelay.split(',')[0];\n    return (Number.parseFloat(transitionDuration) + Number.parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER;\n  };\n\n  const triggerTransitionEnd = element => {\n    element.dispatchEvent(new Event(TRANSITION_END));\n  };\n\n  const isElement$1 = obj => {\n    if (!obj || typeof obj !== 'object') {\n      return false;\n    }\n\n    if (typeof obj.jquery !== 'undefined') {\n      obj = obj[0];\n    }\n\n    return typeof obj.nodeType !== 'undefined';\n  };\n\n  const getElement = obj => {\n    if (isElement$1(obj)) {\n      // it's a jQuery object or a node element\n      return obj.jquery ? obj[0] : obj;\n    }\n\n    if (typeof obj === 'string' && obj.length > 0) {\n      return SelectorEngine.findOne(obj);\n    }\n\n    return null;\n  };\n\n  const typeCheckConfig = (componentName, config, configTypes) => {\n    Object.keys(configTypes).forEach(property => {\n      const expectedTypes = configTypes[property];\n      const value = config[property];\n      const valueType = value && isElement$1(value) ? 'element' : toType(value);\n\n      if (!new RegExp(expectedTypes).test(valueType)) {\n        throw new TypeError(`${componentName.toUpperCase()}: Option \"${property}\" provided type \"${valueType}\" but expected type \"${expectedTypes}\".`);\n      }\n    });\n  };\n\n  const isVisible = element => {\n    if (!isElement$1(element) || element.getClientRects().length === 0) {\n      return false;\n    }\n\n    return getComputedStyle(element).getPropertyValue('visibility') === 'visible';\n  };\n\n  const isDisabled = element => {\n    if (!element || element.nodeType !== Node.ELEMENT_NODE) {\n      return true;\n    }\n\n    if (element.classList.contains('disabled')) {\n      return true;\n    }\n\n    if (typeof element.disabled !== 'undefined') {\n      return element.disabled;\n    }\n\n    return element.hasAttribute('disabled') && element.getAttribute('disabled') !== 'false';\n  };\n\n  const findShadowRoot = element => {\n    if (!document.documentElement.attachShadow) {\n      return null;\n    } // Can find the shadow root otherwise it'll return the document\n\n\n    if (typeof element.getRootNode === 'function') {\n      const root = element.getRootNode();\n      return root instanceof ShadowRoot ? root : null;\n    }\n\n    if (element instanceof ShadowRoot) {\n      return element;\n    } // when we don't find a shadow root\n\n\n    if (!element.parentNode) {\n      return null;\n    }\n\n    return findShadowRoot(element.parentNode);\n  };\n\n  const noop = () => {};\n\n  const reflow = element => element.offsetHeight;\n\n  const getjQuery = () => {\n    const {\n      jQuery\n    } = window;\n\n    if (jQuery && !document.body.hasAttribute('data-bs-no-jquery')) {\n      return jQuery;\n    }\n\n    return null;\n  };\n\n  const DOMContentLoadedCallbacks = [];\n\n  const onDOMContentLoaded = callback => {\n    if (document.readyState === 'loading') {\n      // add listener on the first call when the document is in loading state\n      if (!DOMContentLoadedCallbacks.length) {\n        document.addEventListener('DOMContentLoaded', () => {\n          DOMContentLoadedCallbacks.forEach(callback => callback());\n        });\n      }\n\n      DOMContentLoadedCallbacks.push(callback);\n    } else {\n      callback();\n    }\n  };\n\n  const isRTL = () => document.documentElement.dir === 'rtl';\n\n  const defineJQueryPlugin = plugin => {\n    onDOMContentLoaded(() => {\n      const $ = getjQuery();\n      /* istanbul ignore if */\n\n      if ($) {\n        const name = plugin.NAME;\n        const JQUERY_NO_CONFLICT = $.fn[name];\n        $.fn[name] = plugin.jQueryInterface;\n        $.fn[name].Constructor = plugin;\n\n        $.fn[name].noConflict = () => {\n          $.fn[name] = JQUERY_NO_CONFLICT;\n          return plugin.jQueryInterface;\n        };\n      }\n    });\n  };\n\n  const execute = callback => {\n    if (typeof callback === 'function') {\n      callback();\n    }\n  };\n\n  const executeAfterTransition = (callback, transitionElement, waitForTransition = true) => {\n    if (!waitForTransition) {\n      execute(callback);\n      return;\n    }\n\n    const durationPadding = 5;\n    const emulatedDuration = getTransitionDurationFromElement(transitionElement) + durationPadding;\n    let called = false;\n\n    const handler = ({\n      target\n    }) => {\n      if (target !== transitionElement) {\n        return;\n      }\n\n      called = true;\n      transitionElement.removeEventListener(TRANSITION_END, handler);\n      execute(callback);\n    };\n\n    transitionElement.addEventListener(TRANSITION_END, handler);\n    setTimeout(() => {\n      if (!called) {\n        triggerTransitionEnd(transitionElement);\n      }\n    }, emulatedDuration);\n  };\n  /**\n   * Return the previous/next element of a list.\n   *\n   * @param {array} list    The list of elements\n   * @param activeElement   The active element\n   * @param shouldGetNext   Choose to get next or previous element\n   * @param isCycleAllowed\n   * @return {Element|elem} The proper element\n   */\n\n\n  const getNextActiveElement = (list, activeElement, shouldGetNext, isCycleAllowed) => {\n    let index = list.indexOf(activeElement); // if the element does not exist in the list return an element depending on the direction and if cycle is allowed\n\n    if (index === -1) {\n      return list[!shouldGetNext && isCycleAllowed ? list.length - 1 : 0];\n    }\n\n    const listLength = list.length;\n    index += shouldGetNext ? 1 : -1;\n\n    if (isCycleAllowed) {\n      index = (index + listLength) % listLength;\n    }\n\n    return list[Math.max(0, Math.min(index, listLength - 1))];\n  };\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): dom/event-handler.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const namespaceRegex = /[^.]*(?=\\..*)\\.|.*/;\n  const stripNameRegex = /\\..*/;\n  const stripUidRegex = /::\\d+$/;\n  const eventRegistry = {}; // Events storage\n\n  let uidEvent = 1;\n  const customEvents = {\n    mouseenter: 'mouseover',\n    mouseleave: 'mouseout'\n  };\n  const customEventsRegex = /^(mouseenter|mouseleave)/i;\n  const nativeEvents = new Set(['click', 'dblclick', 'mouseup', 'mousedown', 'contextmenu', 'mousewheel', 'DOMMouseScroll', 'mouseover', 'mouseout', 'mousemove', 'selectstart', 'selectend', 'keydown', 'keypress', 'keyup', 'orientationchange', 'touchstart', 'touchmove', 'touchend', 'touchcancel', 'pointerdown', 'pointermove', 'pointerup', 'pointerleave', 'pointercancel', 'gesturestart', 'gesturechange', 'gestureend', 'focus', 'blur', 'change', 'reset', 'select', 'submit', 'focusin', 'focusout', 'load', 'unload', 'beforeunload', 'resize', 'move', 'DOMContentLoaded', 'readystatechange', 'error', 'abort', 'scroll']);\n  /**\n   * ------------------------------------------------------------------------\n   * Private methods\n   * ------------------------------------------------------------------------\n   */\n\n  function getUidEvent(element, uid) {\n    return uid && `${uid}::${uidEvent++}` || element.uidEvent || uidEvent++;\n  }\n\n  function getEvent(element) {\n    const uid = getUidEvent(element);\n    element.uidEvent = uid;\n    eventRegistry[uid] = eventRegistry[uid] || {};\n    return eventRegistry[uid];\n  }\n\n  function bootstrapHandler(element, fn) {\n    return function handler(event) {\n      event.delegateTarget = element;\n\n      if (handler.oneOff) {\n        EventHandler.off(element, event.type, fn);\n      }\n\n      return fn.apply(element, [event]);\n    };\n  }\n\n  function bootstrapDelegationHandler(element, selector, fn) {\n    return function handler(event) {\n      const domElements = element.querySelectorAll(selector);\n\n      for (let {\n        target\n      } = event; target && target !== this; target = target.parentNode) {\n        for (let i = domElements.length; i--;) {\n          if (domElements[i] === target) {\n            event.delegateTarget = target;\n\n            if (handler.oneOff) {\n              // eslint-disable-next-line unicorn/consistent-destructuring\n              EventHandler.off(element, event.type, selector, fn);\n            }\n\n            return fn.apply(target, [event]);\n          }\n        }\n      } // To please ESLint\n\n\n      return null;\n    };\n  }\n\n  function findHandler(events, handler, delegationSelector = null) {\n    const uidEventList = Object.keys(events);\n\n    for (let i = 0, len = uidEventList.length; i < len; i++) {\n      const event = events[uidEventList[i]];\n\n      if (event.originalHandler === handler && event.delegationSelector === delegationSelector) {\n        return event;\n      }\n    }\n\n    return null;\n  }\n\n  function normalizeParams(originalTypeEvent, handler, delegationFn) {\n    const delegation = typeof handler === 'string';\n    const originalHandler = delegation ? delegationFn : handler;\n    let typeEvent = getTypeEvent(originalTypeEvent);\n    const isNative = nativeEvents.has(typeEvent);\n\n    if (!isNative) {\n      typeEvent = originalTypeEvent;\n    }\n\n    return [delegation, originalHandler, typeEvent];\n  }\n\n  function addHandler(element, originalTypeEvent, handler, delegationFn, oneOff) {\n    if (typeof originalTypeEvent !== 'string' || !element) {\n      return;\n    }\n\n    if (!handler) {\n      handler = delegationFn;\n      delegationFn = null;\n    } // in case of mouseenter or mouseleave wrap the handler within a function that checks for its DOM position\n    // this prevents the handler from being dispatched the same way as mouseover or mouseout does\n\n\n    if (customEventsRegex.test(originalTypeEvent)) {\n      const wrapFn = fn => {\n        return function (event) {\n          if (!event.relatedTarget || event.relatedTarget !== event.delegateTarget && !event.delegateTarget.contains(event.relatedTarget)) {\n            return fn.call(this, event);\n          }\n        };\n      };\n\n      if (delegationFn) {\n        delegationFn = wrapFn(delegationFn);\n      } else {\n        handler = wrapFn(handler);\n      }\n    }\n\n    const [delegation, originalHandler, typeEvent] = normalizeParams(originalTypeEvent, handler, delegationFn);\n    const events = getEvent(element);\n    const handlers = events[typeEvent] || (events[typeEvent] = {});\n    const previousFn = findHandler(handlers, originalHandler, delegation ? handler : null);\n\n    if (previousFn) {\n      previousFn.oneOff = previousFn.oneOff && oneOff;\n      return;\n    }\n\n    const uid = getUidEvent(originalHandler, originalTypeEvent.replace(namespaceRegex, ''));\n    const fn = delegation ? bootstrapDelegationHandler(element, handler, delegationFn) : bootstrapHandler(element, handler);\n    fn.delegationSelector = delegation ? handler : null;\n    fn.originalHandler = originalHandler;\n    fn.oneOff = oneOff;\n    fn.uidEvent = uid;\n    handlers[uid] = fn;\n    element.addEventListener(typeEvent, fn, delegation);\n  }\n\n  function removeHandler(element, events, typeEvent, handler, delegationSelector) {\n    const fn = findHandler(events[typeEvent], handler, delegationSelector);\n\n    if (!fn) {\n      return;\n    }\n\n    element.removeEventListener(typeEvent, fn, Boolean(delegationSelector));\n    delete events[typeEvent][fn.uidEvent];\n  }\n\n  function removeNamespacedHandlers(element, events, typeEvent, namespace) {\n    const storeElementEvent = events[typeEvent] || {};\n    Object.keys(storeElementEvent).forEach(handlerKey => {\n      if (handlerKey.includes(namespace)) {\n        const event = storeElementEvent[handlerKey];\n        removeHandler(element, events, typeEvent, event.originalHandler, event.delegationSelector);\n      }\n    });\n  }\n\n  function getTypeEvent(event) {\n    // allow to get the native events from namespaced events ('click.bs.button' --> 'click')\n    event = event.replace(stripNameRegex, '');\n    return customEvents[event] || event;\n  }\n\n  const EventHandler = {\n    on(element, event, handler, delegationFn) {\n      addHandler(element, event, handler, delegationFn, false);\n    },\n\n    one(element, event, handler, delegationFn) {\n      addHandler(element, event, handler, delegationFn, true);\n    },\n\n    off(element, originalTypeEvent, handler, delegationFn) {\n      if (typeof originalTypeEvent !== 'string' || !element) {\n        return;\n      }\n\n      const [delegation, originalHandler, typeEvent] = normalizeParams(originalTypeEvent, handler, delegationFn);\n      const inNamespace = typeEvent !== originalTypeEvent;\n      const events = getEvent(element);\n      const isNamespace = originalTypeEvent.startsWith('.');\n\n      if (typeof originalHandler !== 'undefined') {\n        // Simplest case: handler is passed, remove that listener ONLY.\n        if (!events || !events[typeEvent]) {\n          return;\n        }\n\n        removeHandler(element, events, typeEvent, originalHandler, delegation ? handler : null);\n        return;\n      }\n\n      if (isNamespace) {\n        Object.keys(events).forEach(elementEvent => {\n          removeNamespacedHandlers(element, events, elementEvent, originalTypeEvent.slice(1));\n        });\n      }\n\n      const storeElementEvent = events[typeEvent] || {};\n      Object.keys(storeElementEvent).forEach(keyHandlers => {\n        const handlerKey = keyHandlers.replace(stripUidRegex, '');\n\n        if (!inNamespace || originalTypeEvent.includes(handlerKey)) {\n          const event = storeElementEvent[keyHandlers];\n          removeHandler(element, events, typeEvent, event.originalHandler, event.delegationSelector);\n        }\n      });\n    },\n\n    trigger(element, event, args) {\n      if (typeof event !== 'string' || !element) {\n        return null;\n      }\n\n      const $ = getjQuery();\n      const typeEvent = getTypeEvent(event);\n      const inNamespace = event !== typeEvent;\n      const isNative = nativeEvents.has(typeEvent);\n      let jQueryEvent;\n      let bubbles = true;\n      let nativeDispatch = true;\n      let defaultPrevented = false;\n      let evt = null;\n\n      if (inNamespace && $) {\n        jQueryEvent = $.Event(event, args);\n        $(element).trigger(jQueryEvent);\n        bubbles = !jQueryEvent.isPropagationStopped();\n        nativeDispatch = !jQueryEvent.isImmediatePropagationStopped();\n        defaultPrevented = jQueryEvent.isDefaultPrevented();\n      }\n\n      if (isNative) {\n        evt = document.createEvent('HTMLEvents');\n        evt.initEvent(typeEvent, bubbles, true);\n      } else {\n        evt = new CustomEvent(event, {\n          bubbles,\n          cancelable: true\n        });\n      } // merge custom information in our event\n\n\n      if (typeof args !== 'undefined') {\n        Object.keys(args).forEach(key => {\n          Object.defineProperty(evt, key, {\n            get() {\n              return args[key];\n            }\n\n          });\n        });\n      }\n\n      if (defaultPrevented) {\n        evt.preventDefault();\n      }\n\n      if (nativeDispatch) {\n        element.dispatchEvent(evt);\n      }\n\n      if (evt.defaultPrevented && typeof jQueryEvent !== 'undefined') {\n        jQueryEvent.preventDefault();\n      }\n\n      return evt;\n    }\n\n  };\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): dom/data.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n  const elementMap = new Map();\n  var Data = {\n    set(element, key, instance) {\n      if (!elementMap.has(element)) {\n        elementMap.set(element, new Map());\n      }\n\n      const instanceMap = elementMap.get(element); // make it clear we only want one instance per element\n      // can be removed later when multiple key/instances are fine to be used\n\n      if (!instanceMap.has(key) && instanceMap.size !== 0) {\n        // eslint-disable-next-line no-console\n        console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(instanceMap.keys())[0]}.`);\n        return;\n      }\n\n      instanceMap.set(key, instance);\n    },\n\n    get(element, key) {\n      if (elementMap.has(element)) {\n        return elementMap.get(element).get(key) || null;\n      }\n\n      return null;\n    },\n\n    remove(element, key) {\n      if (!elementMap.has(element)) {\n        return;\n      }\n\n      const instanceMap = elementMap.get(element);\n      instanceMap.delete(key); // free up element references if there are no instances left for an element\n\n      if (instanceMap.size === 0) {\n        elementMap.delete(element);\n      }\n    }\n\n  };\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): base-component.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const VERSION = '5.0.2';\n\n  class BaseComponent {\n    constructor(element) {\n      element = getElement(element);\n\n      if (!element) {\n        return;\n      }\n\n      this._element = element;\n      Data.set(this._element, this.constructor.DATA_KEY, this);\n    }\n\n    dispose() {\n      Data.remove(this._element, this.constructor.DATA_KEY);\n      EventHandler.off(this._element, this.constructor.EVENT_KEY);\n      Object.getOwnPropertyNames(this).forEach(propertyName => {\n        this[propertyName] = null;\n      });\n    }\n\n    _queueCallback(callback, element, isAnimated = true) {\n      executeAfterTransition(callback, element, isAnimated);\n    }\n    /** Static */\n\n\n    static getInstance(element) {\n      return Data.get(element, this.DATA_KEY);\n    }\n\n    static getOrCreateInstance(element, config = {}) {\n      return this.getInstance(element) || new this(element, typeof config === 'object' ? config : null);\n    }\n\n    static get VERSION() {\n      return VERSION;\n    }\n\n    static get NAME() {\n      throw new Error('You have to implement the static method \"NAME\", for each component!');\n    }\n\n    static get DATA_KEY() {\n      return `bs.${this.NAME}`;\n    }\n\n    static get EVENT_KEY() {\n      return `.${this.DATA_KEY}`;\n    }\n\n  }\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): alert.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$c = 'alert';\n  const DATA_KEY$b = 'bs.alert';\n  const EVENT_KEY$b = `.${DATA_KEY$b}`;\n  const DATA_API_KEY$8 = '.data-api';\n  const SELECTOR_DISMISS = '[data-bs-dismiss=\"alert\"]';\n  const EVENT_CLOSE = `close${EVENT_KEY$b}`;\n  const EVENT_CLOSED = `closed${EVENT_KEY$b}`;\n  const EVENT_CLICK_DATA_API$7 = `click${EVENT_KEY$b}${DATA_API_KEY$8}`;\n  const CLASS_NAME_ALERT = 'alert';\n  const CLASS_NAME_FADE$6 = 'fade';\n  const CLASS_NAME_SHOW$9 = 'show';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Alert extends BaseComponent {\n    // Getters\n    static get NAME() {\n      return NAME$c;\n    } // Public\n\n\n    close(element) {\n      const rootElement = element ? this._getRootElement(element) : this._element;\n\n      const customEvent = this._triggerCloseEvent(rootElement);\n\n      if (customEvent === null || customEvent.defaultPrevented) {\n        return;\n      }\n\n      this._removeElement(rootElement);\n    } // Private\n\n\n    _getRootElement(element) {\n      return getElementFromSelector(element) || element.closest(`.${CLASS_NAME_ALERT}`);\n    }\n\n    _triggerCloseEvent(element) {\n      return EventHandler.trigger(element, EVENT_CLOSE);\n    }\n\n    _removeElement(element) {\n      element.classList.remove(CLASS_NAME_SHOW$9);\n      const isAnimated = element.classList.contains(CLASS_NAME_FADE$6);\n\n      this._queueCallback(() => this._destroyElement(element), element, isAnimated);\n    }\n\n    _destroyElement(element) {\n      element.remove();\n      EventHandler.trigger(element, EVENT_CLOSED);\n    } // Static\n\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = Alert.getOrCreateInstance(this);\n\n        if (config === 'close') {\n          data[config](this);\n        }\n      });\n    }\n\n    static handleDismiss(alertInstance) {\n      return function (event) {\n        if (event) {\n          event.preventDefault();\n        }\n\n        alertInstance.close(this);\n      };\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(document, EVENT_CLICK_DATA_API$7, SELECTOR_DISMISS, Alert.handleDismiss(new Alert()));\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Alert to jQuery only if jQuery is present\n   */\n\n  defineJQueryPlugin(Alert);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): button.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$b = 'button';\n  const DATA_KEY$a = 'bs.button';\n  const EVENT_KEY$a = `.${DATA_KEY$a}`;\n  const DATA_API_KEY$7 = '.data-api';\n  const CLASS_NAME_ACTIVE$3 = 'active';\n  const SELECTOR_DATA_TOGGLE$5 = '[data-bs-toggle=\"button\"]';\n  const EVENT_CLICK_DATA_API$6 = `click${EVENT_KEY$a}${DATA_API_KEY$7}`;\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Button extends BaseComponent {\n    // Getters\n    static get NAME() {\n      return NAME$b;\n    } // Public\n\n\n    toggle() {\n      // Toggle class and sync the `aria-pressed` attribute with the return value of the `.toggle()` method\n      this._element.setAttribute('aria-pressed', this._element.classList.toggle(CLASS_NAME_ACTIVE$3));\n    } // Static\n\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = Button.getOrCreateInstance(this);\n\n        if (config === 'toggle') {\n          data[config]();\n        }\n      });\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(document, EVENT_CLICK_DATA_API$6, SELECTOR_DATA_TOGGLE$5, event => {\n    event.preventDefault();\n    const button = event.target.closest(SELECTOR_DATA_TOGGLE$5);\n    const data = Button.getOrCreateInstance(button);\n    data.toggle();\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Button to jQuery only if jQuery is present\n   */\n\n  defineJQueryPlugin(Button);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): dom/manipulator.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  function normalizeData(val) {\n    if (val === 'true') {\n      return true;\n    }\n\n    if (val === 'false') {\n      return false;\n    }\n\n    if (val === Number(val).toString()) {\n      return Number(val);\n    }\n\n    if (val === '' || val === 'null') {\n      return null;\n    }\n\n    return val;\n  }\n\n  function normalizeDataKey(key) {\n    return key.replace(/[A-Z]/g, chr => `-${chr.toLowerCase()}`);\n  }\n\n  const Manipulator = {\n    setDataAttribute(element, key, value) {\n      element.setAttribute(`data-bs-${normalizeDataKey(key)}`, value);\n    },\n\n    removeDataAttribute(element, key) {\n      element.removeAttribute(`data-bs-${normalizeDataKey(key)}`);\n    },\n\n    getDataAttributes(element) {\n      if (!element) {\n        return {};\n      }\n\n      const attributes = {};\n      Object.keys(element.dataset).filter(key => key.startsWith('bs')).forEach(key => {\n        let pureKey = key.replace(/^bs/, '');\n        pureKey = pureKey.charAt(0).toLowerCase() + pureKey.slice(1, pureKey.length);\n        attributes[pureKey] = normalizeData(element.dataset[key]);\n      });\n      return attributes;\n    },\n\n    getDataAttribute(element, key) {\n      return normalizeData(element.getAttribute(`data-bs-${normalizeDataKey(key)}`));\n    },\n\n    offset(element) {\n      const rect = element.getBoundingClientRect();\n      return {\n        top: rect.top + document.body.scrollTop,\n        left: rect.left + document.body.scrollLeft\n      };\n    },\n\n    position(element) {\n      return {\n        top: element.offsetTop,\n        left: element.offsetLeft\n      };\n    }\n\n  };\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): carousel.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$a = 'carousel';\n  const DATA_KEY$9 = 'bs.carousel';\n  const EVENT_KEY$9 = `.${DATA_KEY$9}`;\n  const DATA_API_KEY$6 = '.data-api';\n  const ARROW_LEFT_KEY = 'ArrowLeft';\n  const ARROW_RIGHT_KEY = 'ArrowRight';\n  const TOUCHEVENT_COMPAT_WAIT = 500; // Time for mouse compat events to fire after touch\n\n  const SWIPE_THRESHOLD = 40;\n  const Default$9 = {\n    interval: 5000,\n    keyboard: true,\n    slide: false,\n    pause: 'hover',\n    wrap: true,\n    touch: true\n  };\n  const DefaultType$9 = {\n    interval: '(number|boolean)',\n    keyboard: 'boolean',\n    slide: '(boolean|string)',\n    pause: '(string|boolean)',\n    wrap: 'boolean',\n    touch: 'boolean'\n  };\n  const ORDER_NEXT = 'next';\n  const ORDER_PREV = 'prev';\n  const DIRECTION_LEFT = 'left';\n  const DIRECTION_RIGHT = 'right';\n  const KEY_TO_DIRECTION = {\n    [ARROW_LEFT_KEY]: DIRECTION_RIGHT,\n    [ARROW_RIGHT_KEY]: DIRECTION_LEFT\n  };\n  const EVENT_SLIDE = `slide${EVENT_KEY$9}`;\n  const EVENT_SLID = `slid${EVENT_KEY$9}`;\n  const EVENT_KEYDOWN = `keydown${EVENT_KEY$9}`;\n  const EVENT_MOUSEENTER = `mouseenter${EVENT_KEY$9}`;\n  const EVENT_MOUSELEAVE = `mouseleave${EVENT_KEY$9}`;\n  const EVENT_TOUCHSTART = `touchstart${EVENT_KEY$9}`;\n  const EVENT_TOUCHMOVE = `touchmove${EVENT_KEY$9}`;\n  const EVENT_TOUCHEND = `touchend${EVENT_KEY$9}`;\n  const EVENT_POINTERDOWN = `pointerdown${EVENT_KEY$9}`;\n  const EVENT_POINTERUP = `pointerup${EVENT_KEY$9}`;\n  const EVENT_DRAG_START = `dragstart${EVENT_KEY$9}`;\n  const EVENT_LOAD_DATA_API$2 = `load${EVENT_KEY$9}${DATA_API_KEY$6}`;\n  const EVENT_CLICK_DATA_API$5 = `click${EVENT_KEY$9}${DATA_API_KEY$6}`;\n  const CLASS_NAME_CAROUSEL = 'carousel';\n  const CLASS_NAME_ACTIVE$2 = 'active';\n  const CLASS_NAME_SLIDE = 'slide';\n  const CLASS_NAME_END = 'carousel-item-end';\n  const CLASS_NAME_START = 'carousel-item-start';\n  const CLASS_NAME_NEXT = 'carousel-item-next';\n  const CLASS_NAME_PREV = 'carousel-item-prev';\n  const CLASS_NAME_POINTER_EVENT = 'pointer-event';\n  const SELECTOR_ACTIVE$1 = '.active';\n  const SELECTOR_ACTIVE_ITEM = '.active.carousel-item';\n  const SELECTOR_ITEM = '.carousel-item';\n  const SELECTOR_ITEM_IMG = '.carousel-item img';\n  const SELECTOR_NEXT_PREV = '.carousel-item-next, .carousel-item-prev';\n  const SELECTOR_INDICATORS = '.carousel-indicators';\n  const SELECTOR_INDICATOR = '[data-bs-target]';\n  const SELECTOR_DATA_SLIDE = '[data-bs-slide], [data-bs-slide-to]';\n  const SELECTOR_DATA_RIDE = '[data-bs-ride=\"carousel\"]';\n  const POINTER_TYPE_TOUCH = 'touch';\n  const POINTER_TYPE_PEN = 'pen';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Carousel extends BaseComponent {\n    constructor(element, config) {\n      super(element);\n      this._items = null;\n      this._interval = null;\n      this._activeElement = null;\n      this._isPaused = false;\n      this._isSliding = false;\n      this.touchTimeout = null;\n      this.touchStartX = 0;\n      this.touchDeltaX = 0;\n      this._config = this._getConfig(config);\n      this._indicatorsElement = SelectorEngine.findOne(SELECTOR_INDICATORS, this._element);\n      this._touchSupported = 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0;\n      this._pointerEvent = Boolean(window.PointerEvent);\n\n      this._addEventListeners();\n    } // Getters\n\n\n    static get Default() {\n      return Default$9;\n    }\n\n    static get NAME() {\n      return NAME$a;\n    } // Public\n\n\n    next() {\n      this._slide(ORDER_NEXT);\n    }\n\n    nextWhenVisible() {\n      // Don't call next when the page isn't visible\n      // or the carousel or its parent isn't visible\n      if (!document.hidden && isVisible(this._element)) {\n        this.next();\n      }\n    }\n\n    prev() {\n      this._slide(ORDER_PREV);\n    }\n\n    pause(event) {\n      if (!event) {\n        this._isPaused = true;\n      }\n\n      if (SelectorEngine.findOne(SELECTOR_NEXT_PREV, this._element)) {\n        triggerTransitionEnd(this._element);\n        this.cycle(true);\n      }\n\n      clearInterval(this._interval);\n      this._interval = null;\n    }\n\n    cycle(event) {\n      if (!event) {\n        this._isPaused = false;\n      }\n\n      if (this._interval) {\n        clearInterval(this._interval);\n        this._interval = null;\n      }\n\n      if (this._config && this._config.interval && !this._isPaused) {\n        this._updateInterval();\n\n        this._interval = setInterval((document.visibilityState ? this.nextWhenVisible : this.next).bind(this), this._config.interval);\n      }\n    }\n\n    to(index) {\n      this._activeElement = SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element);\n\n      const activeIndex = this._getItemIndex(this._activeElement);\n\n      if (index > this._items.length - 1 || index < 0) {\n        return;\n      }\n\n      if (this._isSliding) {\n        EventHandler.one(this._element, EVENT_SLID, () => this.to(index));\n        return;\n      }\n\n      if (activeIndex === index) {\n        this.pause();\n        this.cycle();\n        return;\n      }\n\n      const order = index > activeIndex ? ORDER_NEXT : ORDER_PREV;\n\n      this._slide(order, this._items[index]);\n    } // Private\n\n\n    _getConfig(config) {\n      config = { ...Default$9,\n        ...Manipulator.getDataAttributes(this._element),\n        ...(typeof config === 'object' ? config : {})\n      };\n      typeCheckConfig(NAME$a, config, DefaultType$9);\n      return config;\n    }\n\n    _handleSwipe() {\n      const absDeltax = Math.abs(this.touchDeltaX);\n\n      if (absDeltax <= SWIPE_THRESHOLD) {\n        return;\n      }\n\n      const direction = absDeltax / this.touchDeltaX;\n      this.touchDeltaX = 0;\n\n      if (!direction) {\n        return;\n      }\n\n      this._slide(direction > 0 ? DIRECTION_RIGHT : DIRECTION_LEFT);\n    }\n\n    _addEventListeners() {\n      if (this._config.keyboard) {\n        EventHandler.on(this._element, EVENT_KEYDOWN, event => this._keydown(event));\n      }\n\n      if (this._config.pause === 'hover') {\n        EventHandler.on(this._element, EVENT_MOUSEENTER, event => this.pause(event));\n        EventHandler.on(this._element, EVENT_MOUSELEAVE, event => this.cycle(event));\n      }\n\n      if (this._config.touch && this._touchSupported) {\n        this._addTouchEventListeners();\n      }\n    }\n\n    _addTouchEventListeners() {\n      const start = event => {\n        if (this._pointerEvent && (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH)) {\n          this.touchStartX = event.clientX;\n        } else if (!this._pointerEvent) {\n          this.touchStartX = event.touches[0].clientX;\n        }\n      };\n\n      const move = event => {\n        // ensure swiping with one touch and not pinching\n        this.touchDeltaX = event.touches && event.touches.length > 1 ? 0 : event.touches[0].clientX - this.touchStartX;\n      };\n\n      const end = event => {\n        if (this._pointerEvent && (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH)) {\n          this.touchDeltaX = event.clientX - this.touchStartX;\n        }\n\n        this._handleSwipe();\n\n        if (this._config.pause === 'hover') {\n          // If it's a touch-enabled device, mouseenter/leave are fired as\n          // part of the mouse compatibility events on first tap - the carousel\n          // would stop cycling until user tapped out of it;\n          // here, we listen for touchend, explicitly pause the carousel\n          // (as if it's the second time we tap on it, mouseenter compat event\n          // is NOT fired) and after a timeout (to allow for mouse compatibility\n          // events to fire) we explicitly restart cycling\n          this.pause();\n\n          if (this.touchTimeout) {\n            clearTimeout(this.touchTimeout);\n          }\n\n          this.touchTimeout = setTimeout(event => this.cycle(event), TOUCHEVENT_COMPAT_WAIT + this._config.interval);\n        }\n      };\n\n      SelectorEngine.find(SELECTOR_ITEM_IMG, this._element).forEach(itemImg => {\n        EventHandler.on(itemImg, EVENT_DRAG_START, e => e.preventDefault());\n      });\n\n      if (this._pointerEvent) {\n        EventHandler.on(this._element, EVENT_POINTERDOWN, event => start(event));\n        EventHandler.on(this._element, EVENT_POINTERUP, event => end(event));\n\n        this._element.classList.add(CLASS_NAME_POINTER_EVENT);\n      } else {\n        EventHandler.on(this._element, EVENT_TOUCHSTART, event => start(event));\n        EventHandler.on(this._element, EVENT_TOUCHMOVE, event => move(event));\n        EventHandler.on(this._element, EVENT_TOUCHEND, event => end(event));\n      }\n    }\n\n    _keydown(event) {\n      if (/input|textarea/i.test(event.target.tagName)) {\n        return;\n      }\n\n      const direction = KEY_TO_DIRECTION[event.key];\n\n      if (direction) {\n        event.preventDefault();\n\n        this._slide(direction);\n      }\n    }\n\n    _getItemIndex(element) {\n      this._items = element && element.parentNode ? SelectorEngine.find(SELECTOR_ITEM, element.parentNode) : [];\n      return this._items.indexOf(element);\n    }\n\n    _getItemByOrder(order, activeElement) {\n      const isNext = order === ORDER_NEXT;\n      return getNextActiveElement(this._items, activeElement, isNext, this._config.wrap);\n    }\n\n    _triggerSlideEvent(relatedTarget, eventDirectionName) {\n      const targetIndex = this._getItemIndex(relatedTarget);\n\n      const fromIndex = this._getItemIndex(SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element));\n\n      return EventHandler.trigger(this._element, EVENT_SLIDE, {\n        relatedTarget,\n        direction: eventDirectionName,\n        from: fromIndex,\n        to: targetIndex\n      });\n    }\n\n    _setActiveIndicatorElement(element) {\n      if (this._indicatorsElement) {\n        const activeIndicator = SelectorEngine.findOne(SELECTOR_ACTIVE$1, this._indicatorsElement);\n        activeIndicator.classList.remove(CLASS_NAME_ACTIVE$2);\n        activeIndicator.removeAttribute('aria-current');\n        const indicators = SelectorEngine.find(SELECTOR_INDICATOR, this._indicatorsElement);\n\n        for (let i = 0; i < indicators.length; i++) {\n          if (Number.parseInt(indicators[i].getAttribute('data-bs-slide-to'), 10) === this._getItemIndex(element)) {\n            indicators[i].classList.add(CLASS_NAME_ACTIVE$2);\n            indicators[i].setAttribute('aria-current', 'true');\n            break;\n          }\n        }\n      }\n    }\n\n    _updateInterval() {\n      const element = this._activeElement || SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element);\n\n      if (!element) {\n        return;\n      }\n\n      const elementInterval = Number.parseInt(element.getAttribute('data-bs-interval'), 10);\n\n      if (elementInterval) {\n        this._config.defaultInterval = this._config.defaultInterval || this._config.interval;\n        this._config.interval = elementInterval;\n      } else {\n        this._config.interval = this._config.defaultInterval || this._config.interval;\n      }\n    }\n\n    _slide(directionOrOrder, element) {\n      const order = this._directionToOrder(directionOrOrder);\n\n      const activeElement = SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element);\n\n      const activeElementIndex = this._getItemIndex(activeElement);\n\n      const nextElement = element || this._getItemByOrder(order, activeElement);\n\n      const nextElementIndex = this._getItemIndex(nextElement);\n\n      const isCycling = Boolean(this._interval);\n      const isNext = order === ORDER_NEXT;\n      const directionalClassName = isNext ? CLASS_NAME_START : CLASS_NAME_END;\n      const orderClassName = isNext ? CLASS_NAME_NEXT : CLASS_NAME_PREV;\n\n      const eventDirectionName = this._orderToDirection(order);\n\n      if (nextElement && nextElement.classList.contains(CLASS_NAME_ACTIVE$2)) {\n        this._isSliding = false;\n        return;\n      }\n\n      if (this._isSliding) {\n        return;\n      }\n\n      const slideEvent = this._triggerSlideEvent(nextElement, eventDirectionName);\n\n      if (slideEvent.defaultPrevented) {\n        return;\n      }\n\n      if (!activeElement || !nextElement) {\n        // Some weirdness is happening, so we bail\n        return;\n      }\n\n      this._isSliding = true;\n\n      if (isCycling) {\n        this.pause();\n      }\n\n      this._setActiveIndicatorElement(nextElement);\n\n      this._activeElement = nextElement;\n\n      const triggerSlidEvent = () => {\n        EventHandler.trigger(this._element, EVENT_SLID, {\n          relatedTarget: nextElement,\n          direction: eventDirectionName,\n          from: activeElementIndex,\n          to: nextElementIndex\n        });\n      };\n\n      if (this._element.classList.contains(CLASS_NAME_SLIDE)) {\n        nextElement.classList.add(orderClassName);\n        reflow(nextElement);\n        activeElement.classList.add(directionalClassName);\n        nextElement.classList.add(directionalClassName);\n\n        const completeCallBack = () => {\n          nextElement.classList.remove(directionalClassName, orderClassName);\n          nextElement.classList.add(CLASS_NAME_ACTIVE$2);\n          activeElement.classList.remove(CLASS_NAME_ACTIVE$2, orderClassName, directionalClassName);\n          this._isSliding = false;\n          setTimeout(triggerSlidEvent, 0);\n        };\n\n        this._queueCallback(completeCallBack, activeElement, true);\n      } else {\n        activeElement.classList.remove(CLASS_NAME_ACTIVE$2);\n        nextElement.classList.add(CLASS_NAME_ACTIVE$2);\n        this._isSliding = false;\n        triggerSlidEvent();\n      }\n\n      if (isCycling) {\n        this.cycle();\n      }\n    }\n\n    _directionToOrder(direction) {\n      if (![DIRECTION_RIGHT, DIRECTION_LEFT].includes(direction)) {\n        return direction;\n      }\n\n      if (isRTL()) {\n        return direction === DIRECTION_LEFT ? ORDER_PREV : ORDER_NEXT;\n      }\n\n      return direction === DIRECTION_LEFT ? ORDER_NEXT : ORDER_PREV;\n    }\n\n    _orderToDirection(order) {\n      if (![ORDER_NEXT, ORDER_PREV].includes(order)) {\n        return order;\n      }\n\n      if (isRTL()) {\n        return order === ORDER_PREV ? DIRECTION_LEFT : DIRECTION_RIGHT;\n      }\n\n      return order === ORDER_PREV ? DIRECTION_RIGHT : DIRECTION_LEFT;\n    } // Static\n\n\n    static carouselInterface(element, config) {\n      const data = Carousel.getOrCreateInstance(element, config);\n      let {\n        _config\n      } = data;\n\n      if (typeof config === 'object') {\n        _config = { ..._config,\n          ...config\n        };\n      }\n\n      const action = typeof config === 'string' ? config : _config.slide;\n\n      if (typeof config === 'number') {\n        data.to(config);\n      } else if (typeof action === 'string') {\n        if (typeof data[action] === 'undefined') {\n          throw new TypeError(`No method named \"${action}\"`);\n        }\n\n        data[action]();\n      } else if (_config.interval && _config.ride) {\n        data.pause();\n        data.cycle();\n      }\n    }\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        Carousel.carouselInterface(this, config);\n      });\n    }\n\n    static dataApiClickHandler(event) {\n      const target = getElementFromSelector(this);\n\n      if (!target || !target.classList.contains(CLASS_NAME_CAROUSEL)) {\n        return;\n      }\n\n      const config = { ...Manipulator.getDataAttributes(target),\n        ...Manipulator.getDataAttributes(this)\n      };\n      const slideIndex = this.getAttribute('data-bs-slide-to');\n\n      if (slideIndex) {\n        config.interval = false;\n      }\n\n      Carousel.carouselInterface(target, config);\n\n      if (slideIndex) {\n        Carousel.getInstance(target).to(slideIndex);\n      }\n\n      event.preventDefault();\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(document, EVENT_CLICK_DATA_API$5, SELECTOR_DATA_SLIDE, Carousel.dataApiClickHandler);\n  EventHandler.on(window, EVENT_LOAD_DATA_API$2, () => {\n    const carousels = SelectorEngine.find(SELECTOR_DATA_RIDE);\n\n    for (let i = 0, len = carousels.length; i < len; i++) {\n      Carousel.carouselInterface(carousels[i], Carousel.getInstance(carousels[i]));\n    }\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Carousel to jQuery only if jQuery is present\n   */\n\n  defineJQueryPlugin(Carousel);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): collapse.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$9 = 'collapse';\n  const DATA_KEY$8 = 'bs.collapse';\n  const EVENT_KEY$8 = `.${DATA_KEY$8}`;\n  const DATA_API_KEY$5 = '.data-api';\n  const Default$8 = {\n    toggle: true,\n    parent: ''\n  };\n  const DefaultType$8 = {\n    toggle: 'boolean',\n    parent: '(string|element)'\n  };\n  const EVENT_SHOW$5 = `show${EVENT_KEY$8}`;\n  const EVENT_SHOWN$5 = `shown${EVENT_KEY$8}`;\n  const EVENT_HIDE$5 = `hide${EVENT_KEY$8}`;\n  const EVENT_HIDDEN$5 = `hidden${EVENT_KEY$8}`;\n  const EVENT_CLICK_DATA_API$4 = `click${EVENT_KEY$8}${DATA_API_KEY$5}`;\n  const CLASS_NAME_SHOW$8 = 'show';\n  const CLASS_NAME_COLLAPSE = 'collapse';\n  const CLASS_NAME_COLLAPSING = 'collapsing';\n  const CLASS_NAME_COLLAPSED = 'collapsed';\n  const WIDTH = 'width';\n  const HEIGHT = 'height';\n  const SELECTOR_ACTIVES = '.show, .collapsing';\n  const SELECTOR_DATA_TOGGLE$4 = '[data-bs-toggle=\"collapse\"]';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Collapse extends BaseComponent {\n    constructor(element, config) {\n      super(element);\n      this._isTransitioning = false;\n      this._config = this._getConfig(config);\n      this._triggerArray = SelectorEngine.find(`${SELECTOR_DATA_TOGGLE$4}[href=\"#${this._element.id}\"],` + `${SELECTOR_DATA_TOGGLE$4}[data-bs-target=\"#${this._element.id}\"]`);\n      const toggleList = SelectorEngine.find(SELECTOR_DATA_TOGGLE$4);\n\n      for (let i = 0, len = toggleList.length; i < len; i++) {\n        const elem = toggleList[i];\n        const selector = getSelectorFromElement(elem);\n        const filterElement = SelectorEngine.find(selector).filter(foundElem => foundElem === this._element);\n\n        if (selector !== null && filterElement.length) {\n          this._selector = selector;\n\n          this._triggerArray.push(elem);\n        }\n      }\n\n      this._parent = this._config.parent ? this._getParent() : null;\n\n      if (!this._config.parent) {\n        this._addAriaAndCollapsedClass(this._element, this._triggerArray);\n      }\n\n      if (this._config.toggle) {\n        this.toggle();\n      }\n    } // Getters\n\n\n    static get Default() {\n      return Default$8;\n    }\n\n    static get NAME() {\n      return NAME$9;\n    } // Public\n\n\n    toggle() {\n      if (this._element.classList.contains(CLASS_NAME_SHOW$8)) {\n        this.hide();\n      } else {\n        this.show();\n      }\n    }\n\n    show() {\n      if (this._isTransitioning || this._element.classList.contains(CLASS_NAME_SHOW$8)) {\n        return;\n      }\n\n      let actives;\n      let activesData;\n\n      if (this._parent) {\n        actives = SelectorEngine.find(SELECTOR_ACTIVES, this._parent).filter(elem => {\n          if (typeof this._config.parent === 'string') {\n            return elem.getAttribute('data-bs-parent') === this._config.parent;\n          }\n\n          return elem.classList.contains(CLASS_NAME_COLLAPSE);\n        });\n\n        if (actives.length === 0) {\n          actives = null;\n        }\n      }\n\n      const container = SelectorEngine.findOne(this._selector);\n\n      if (actives) {\n        const tempActiveData = actives.find(elem => container !== elem);\n        activesData = tempActiveData ? Collapse.getInstance(tempActiveData) : null;\n\n        if (activesData && activesData._isTransitioning) {\n          return;\n        }\n      }\n\n      const startEvent = EventHandler.trigger(this._element, EVENT_SHOW$5);\n\n      if (startEvent.defaultPrevented) {\n        return;\n      }\n\n      if (actives) {\n        actives.forEach(elemActive => {\n          if (container !== elemActive) {\n            Collapse.collapseInterface(elemActive, 'hide');\n          }\n\n          if (!activesData) {\n            Data.set(elemActive, DATA_KEY$8, null);\n          }\n        });\n      }\n\n      const dimension = this._getDimension();\n\n      this._element.classList.remove(CLASS_NAME_COLLAPSE);\n\n      this._element.classList.add(CLASS_NAME_COLLAPSING);\n\n      this._element.style[dimension] = 0;\n\n      if (this._triggerArray.length) {\n        this._triggerArray.forEach(element => {\n          element.classList.remove(CLASS_NAME_COLLAPSED);\n          element.setAttribute('aria-expanded', true);\n        });\n      }\n\n      this.setTransitioning(true);\n\n      const complete = () => {\n        this._element.classList.remove(CLASS_NAME_COLLAPSING);\n\n        this._element.classList.add(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$8);\n\n        this._element.style[dimension] = '';\n        this.setTransitioning(false);\n        EventHandler.trigger(this._element, EVENT_SHOWN$5);\n      };\n\n      const capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1);\n      const scrollSize = `scroll${capitalizedDimension}`;\n\n      this._queueCallback(complete, this._element, true);\n\n      this._element.style[dimension] = `${this._element[scrollSize]}px`;\n    }\n\n    hide() {\n      if (this._isTransitioning || !this._element.classList.contains(CLASS_NAME_SHOW$8)) {\n        return;\n      }\n\n      const startEvent = EventHandler.trigger(this._element, EVENT_HIDE$5);\n\n      if (startEvent.defaultPrevented) {\n        return;\n      }\n\n      const dimension = this._getDimension();\n\n      this._element.style[dimension] = `${this._element.getBoundingClientRect()[dimension]}px`;\n      reflow(this._element);\n\n      this._element.classList.add(CLASS_NAME_COLLAPSING);\n\n      this._element.classList.remove(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$8);\n\n      const triggerArrayLength = this._triggerArray.length;\n\n      if (triggerArrayLength > 0) {\n        for (let i = 0; i < triggerArrayLength; i++) {\n          const trigger = this._triggerArray[i];\n          const elem = getElementFromSelector(trigger);\n\n          if (elem && !elem.classList.contains(CLASS_NAME_SHOW$8)) {\n            trigger.classList.add(CLASS_NAME_COLLAPSED);\n            trigger.setAttribute('aria-expanded', false);\n          }\n        }\n      }\n\n      this.setTransitioning(true);\n\n      const complete = () => {\n        this.setTransitioning(false);\n\n        this._element.classList.remove(CLASS_NAME_COLLAPSING);\n\n        this._element.classList.add(CLASS_NAME_COLLAPSE);\n\n        EventHandler.trigger(this._element, EVENT_HIDDEN$5);\n      };\n\n      this._element.style[dimension] = '';\n\n      this._queueCallback(complete, this._element, true);\n    }\n\n    setTransitioning(isTransitioning) {\n      this._isTransitioning = isTransitioning;\n    } // Private\n\n\n    _getConfig(config) {\n      config = { ...Default$8,\n        ...config\n      };\n      config.toggle = Boolean(config.toggle); // Coerce string values\n\n      typeCheckConfig(NAME$9, config, DefaultType$8);\n      return config;\n    }\n\n    _getDimension() {\n      return this._element.classList.contains(WIDTH) ? WIDTH : HEIGHT;\n    }\n\n    _getParent() {\n      let {\n        parent\n      } = this._config;\n      parent = getElement(parent);\n      const selector = `${SELECTOR_DATA_TOGGLE$4}[data-bs-parent=\"${parent}\"]`;\n      SelectorEngine.find(selector, parent).forEach(element => {\n        const selected = getElementFromSelector(element);\n\n        this._addAriaAndCollapsedClass(selected, [element]);\n      });\n      return parent;\n    }\n\n    _addAriaAndCollapsedClass(element, triggerArray) {\n      if (!element || !triggerArray.length) {\n        return;\n      }\n\n      const isOpen = element.classList.contains(CLASS_NAME_SHOW$8);\n      triggerArray.forEach(elem => {\n        if (isOpen) {\n          elem.classList.remove(CLASS_NAME_COLLAPSED);\n        } else {\n          elem.classList.add(CLASS_NAME_COLLAPSED);\n        }\n\n        elem.setAttribute('aria-expanded', isOpen);\n      });\n    } // Static\n\n\n    static collapseInterface(element, config) {\n      let data = Collapse.getInstance(element);\n      const _config = { ...Default$8,\n        ...Manipulator.getDataAttributes(element),\n        ...(typeof config === 'object' && config ? config : {})\n      };\n\n      if (!data && _config.toggle && typeof config === 'string' && /show|hide/.test(config)) {\n        _config.toggle = false;\n      }\n\n      if (!data) {\n        data = new Collapse(element, _config);\n      }\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config]();\n      }\n    }\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        Collapse.collapseInterface(this, config);\n      });\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(document, EVENT_CLICK_DATA_API$4, SELECTOR_DATA_TOGGLE$4, function (event) {\n    // preventDefault only for <a> elements (which change the URL) not inside the collapsible element\n    if (event.target.tagName === 'A' || event.delegateTarget && event.delegateTarget.tagName === 'A') {\n      event.preventDefault();\n    }\n\n    const triggerData = Manipulator.getDataAttributes(this);\n    const selector = getSelectorFromElement(this);\n    const selectorElements = SelectorEngine.find(selector);\n    selectorElements.forEach(element => {\n      const data = Collapse.getInstance(element);\n      let config;\n\n      if (data) {\n        // update parent attribute\n        if (data._parent === null && typeof triggerData.parent === 'string') {\n          data._config.parent = triggerData.parent;\n          data._parent = data._getParent();\n        }\n\n        config = 'toggle';\n      } else {\n        config = triggerData;\n      }\n\n      Collapse.collapseInterface(element, config);\n    });\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Collapse to jQuery only if jQuery is present\n   */\n\n  defineJQueryPlugin(Collapse);\n\n  var top = 'top';\n  var bottom = 'bottom';\n  var right = 'right';\n  var left = 'left';\n  var auto = 'auto';\n  var basePlacements = [top, bottom, right, left];\n  var start = 'start';\n  var end = 'end';\n  var clippingParents = 'clippingParents';\n  var viewport = 'viewport';\n  var popper = 'popper';\n  var reference = 'reference';\n  var variationPlacements = /*#__PURE__*/basePlacements.reduce(function (acc, placement) {\n    return acc.concat([placement + \"-\" + start, placement + \"-\" + end]);\n  }, []);\n  var placements = /*#__PURE__*/[].concat(basePlacements, [auto]).reduce(function (acc, placement) {\n    return acc.concat([placement, placement + \"-\" + start, placement + \"-\" + end]);\n  }, []); // modifiers that need to read the DOM\n\n  var beforeRead = 'beforeRead';\n  var read = 'read';\n  var afterRead = 'afterRead'; // pure-logic modifiers\n\n  var beforeMain = 'beforeMain';\n  var main = 'main';\n  var afterMain = 'afterMain'; // modifier with the purpose to write to the DOM (or write into a framework state)\n\n  var beforeWrite = 'beforeWrite';\n  var write = 'write';\n  var afterWrite = 'afterWrite';\n  var modifierPhases = [beforeRead, read, afterRead, beforeMain, main, afterMain, beforeWrite, write, afterWrite];\n\n  function getNodeName(element) {\n    return element ? (element.nodeName || '').toLowerCase() : null;\n  }\n\n  function getWindow(node) {\n    if (node == null) {\n      return window;\n    }\n\n    if (node.toString() !== '[object Window]') {\n      var ownerDocument = node.ownerDocument;\n      return ownerDocument ? ownerDocument.defaultView || window : window;\n    }\n\n    return node;\n  }\n\n  function isElement(node) {\n    var OwnElement = getWindow(node).Element;\n    return node instanceof OwnElement || node instanceof Element;\n  }\n\n  function isHTMLElement(node) {\n    var OwnElement = getWindow(node).HTMLElement;\n    return node instanceof OwnElement || node instanceof HTMLElement;\n  }\n\n  function isShadowRoot(node) {\n    // IE 11 has no ShadowRoot\n    if (typeof ShadowRoot === 'undefined') {\n      return false;\n    }\n\n    var OwnElement = getWindow(node).ShadowRoot;\n    return node instanceof OwnElement || node instanceof ShadowRoot;\n  }\n\n  // and applies them to the HTMLElements such as popper and arrow\n\n  function applyStyles(_ref) {\n    var state = _ref.state;\n    Object.keys(state.elements).forEach(function (name) {\n      var style = state.styles[name] || {};\n      var attributes = state.attributes[name] || {};\n      var element = state.elements[name]; // arrow is optional + virtual elements\n\n      if (!isHTMLElement(element) || !getNodeName(element)) {\n        return;\n      } // Flow doesn't support to extend this property, but it's the most\n      // effective way to apply styles to an HTMLElement\n      // $FlowFixMe[cannot-write]\n\n\n      Object.assign(element.style, style);\n      Object.keys(attributes).forEach(function (name) {\n        var value = attributes[name];\n\n        if (value === false) {\n          element.removeAttribute(name);\n        } else {\n          element.setAttribute(name, value === true ? '' : value);\n        }\n      });\n    });\n  }\n\n  function effect$2(_ref2) {\n    var state = _ref2.state;\n    var initialStyles = {\n      popper: {\n        position: state.options.strategy,\n        left: '0',\n        top: '0',\n        margin: '0'\n      },\n      arrow: {\n        position: 'absolute'\n      },\n      reference: {}\n    };\n    Object.assign(state.elements.popper.style, initialStyles.popper);\n    state.styles = initialStyles;\n\n    if (state.elements.arrow) {\n      Object.assign(state.elements.arrow.style, initialStyles.arrow);\n    }\n\n    return function () {\n      Object.keys(state.elements).forEach(function (name) {\n        var element = state.elements[name];\n        var attributes = state.attributes[name] || {};\n        var styleProperties = Object.keys(state.styles.hasOwnProperty(name) ? state.styles[name] : initialStyles[name]); // Set all values to an empty string to unset them\n\n        var style = styleProperties.reduce(function (style, property) {\n          style[property] = '';\n          return style;\n        }, {}); // arrow is optional + virtual elements\n\n        if (!isHTMLElement(element) || !getNodeName(element)) {\n          return;\n        }\n\n        Object.assign(element.style, style);\n        Object.keys(attributes).forEach(function (attribute) {\n          element.removeAttribute(attribute);\n        });\n      });\n    };\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  var applyStyles$1 = {\n    name: 'applyStyles',\n    enabled: true,\n    phase: 'write',\n    fn: applyStyles,\n    effect: effect$2,\n    requires: ['computeStyles']\n  };\n\n  function getBasePlacement(placement) {\n    return placement.split('-')[0];\n  }\n\n  function getBoundingClientRect(element) {\n    var rect = element.getBoundingClientRect();\n    return {\n      width: rect.width,\n      height: rect.height,\n      top: rect.top,\n      right: rect.right,\n      bottom: rect.bottom,\n      left: rect.left,\n      x: rect.left,\n      y: rect.top\n    };\n  }\n\n  // means it doesn't take into account transforms.\n\n  function getLayoutRect(element) {\n    var clientRect = getBoundingClientRect(element); // Use the clientRect sizes if it's not been transformed.\n    // Fixes https://github.com/popperjs/popper-core/issues/1223\n\n    var width = element.offsetWidth;\n    var height = element.offsetHeight;\n\n    if (Math.abs(clientRect.width - width) <= 1) {\n      width = clientRect.width;\n    }\n\n    if (Math.abs(clientRect.height - height) <= 1) {\n      height = clientRect.height;\n    }\n\n    return {\n      x: element.offsetLeft,\n      y: element.offsetTop,\n      width: width,\n      height: height\n    };\n  }\n\n  function contains(parent, child) {\n    var rootNode = child.getRootNode && child.getRootNode(); // First, attempt with faster native method\n\n    if (parent.contains(child)) {\n      return true;\n    } // then fallback to custom implementation with Shadow DOM support\n    else if (rootNode && isShadowRoot(rootNode)) {\n        var next = child;\n\n        do {\n          if (next && parent.isSameNode(next)) {\n            return true;\n          } // $FlowFixMe[prop-missing]: need a better way to handle this...\n\n\n          next = next.parentNode || next.host;\n        } while (next);\n      } // Give up, the result is false\n\n\n    return false;\n  }\n\n  function getComputedStyle$1(element) {\n    return getWindow(element).getComputedStyle(element);\n  }\n\n  function isTableElement(element) {\n    return ['table', 'td', 'th'].indexOf(getNodeName(element)) >= 0;\n  }\n\n  function getDocumentElement(element) {\n    // $FlowFixMe[incompatible-return]: assume body is always available\n    return ((isElement(element) ? element.ownerDocument : // $FlowFixMe[prop-missing]\n    element.document) || window.document).documentElement;\n  }\n\n  function getParentNode(element) {\n    if (getNodeName(element) === 'html') {\n      return element;\n    }\n\n    return (// this is a quicker (but less type safe) way to save quite some bytes from the bundle\n      // $FlowFixMe[incompatible-return]\n      // $FlowFixMe[prop-missing]\n      element.assignedSlot || // step into the shadow DOM of the parent of a slotted node\n      element.parentNode || ( // DOM Element detected\n      isShadowRoot(element) ? element.host : null) || // ShadowRoot detected\n      // $FlowFixMe[incompatible-call]: HTMLElement is a Node\n      getDocumentElement(element) // fallback\n\n    );\n  }\n\n  function getTrueOffsetParent(element) {\n    if (!isHTMLElement(element) || // https://github.com/popperjs/popper-core/issues/837\n    getComputedStyle$1(element).position === 'fixed') {\n      return null;\n    }\n\n    return element.offsetParent;\n  } // `.offsetParent` reports `null` for fixed elements, while absolute elements\n  // return the containing block\n\n\n  function getContainingBlock(element) {\n    var isFirefox = navigator.userAgent.toLowerCase().indexOf('firefox') !== -1;\n    var isIE = navigator.userAgent.indexOf('Trident') !== -1;\n\n    if (isIE && isHTMLElement(element)) {\n      // In IE 9, 10 and 11 fixed elements containing block is always established by the viewport\n      var elementCss = getComputedStyle$1(element);\n\n      if (elementCss.position === 'fixed') {\n        return null;\n      }\n    }\n\n    var currentNode = getParentNode(element);\n\n    while (isHTMLElement(currentNode) && ['html', 'body'].indexOf(getNodeName(currentNode)) < 0) {\n      var css = getComputedStyle$1(currentNode); // This is non-exhaustive but covers the most common CSS properties that\n      // create a containing block.\n      // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n\n      if (css.transform !== 'none' || css.perspective !== 'none' || css.contain === 'paint' || ['transform', 'perspective'].indexOf(css.willChange) !== -1 || isFirefox && css.willChange === 'filter' || isFirefox && css.filter && css.filter !== 'none') {\n        return currentNode;\n      } else {\n        currentNode = currentNode.parentNode;\n      }\n    }\n\n    return null;\n  } // Gets the closest ancestor positioned element. Handles some edge cases,\n  // such as table ancestors and cross browser bugs.\n\n\n  function getOffsetParent(element) {\n    var window = getWindow(element);\n    var offsetParent = getTrueOffsetParent(element);\n\n    while (offsetParent && isTableElement(offsetParent) && getComputedStyle$1(offsetParent).position === 'static') {\n      offsetParent = getTrueOffsetParent(offsetParent);\n    }\n\n    if (offsetParent && (getNodeName(offsetParent) === 'html' || getNodeName(offsetParent) === 'body' && getComputedStyle$1(offsetParent).position === 'static')) {\n      return window;\n    }\n\n    return offsetParent || getContainingBlock(element) || window;\n  }\n\n  function getMainAxisFromPlacement(placement) {\n    return ['top', 'bottom'].indexOf(placement) >= 0 ? 'x' : 'y';\n  }\n\n  var max = Math.max;\n  var min = Math.min;\n  var round = Math.round;\n\n  function within(min$1, value, max$1) {\n    return max(min$1, min(value, max$1));\n  }\n\n  function getFreshSideObject() {\n    return {\n      top: 0,\n      right: 0,\n      bottom: 0,\n      left: 0\n    };\n  }\n\n  function mergePaddingObject(paddingObject) {\n    return Object.assign({}, getFreshSideObject(), paddingObject);\n  }\n\n  function expandToHashMap(value, keys) {\n    return keys.reduce(function (hashMap, key) {\n      hashMap[key] = value;\n      return hashMap;\n    }, {});\n  }\n\n  var toPaddingObject = function toPaddingObject(padding, state) {\n    padding = typeof padding === 'function' ? padding(Object.assign({}, state.rects, {\n      placement: state.placement\n    })) : padding;\n    return mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));\n  };\n\n  function arrow(_ref) {\n    var _state$modifiersData$;\n\n    var state = _ref.state,\n        name = _ref.name,\n        options = _ref.options;\n    var arrowElement = state.elements.arrow;\n    var popperOffsets = state.modifiersData.popperOffsets;\n    var basePlacement = getBasePlacement(state.placement);\n    var axis = getMainAxisFromPlacement(basePlacement);\n    var isVertical = [left, right].indexOf(basePlacement) >= 0;\n    var len = isVertical ? 'height' : 'width';\n\n    if (!arrowElement || !popperOffsets) {\n      return;\n    }\n\n    var paddingObject = toPaddingObject(options.padding, state);\n    var arrowRect = getLayoutRect(arrowElement);\n    var minProp = axis === 'y' ? top : left;\n    var maxProp = axis === 'y' ? bottom : right;\n    var endDiff = state.rects.reference[len] + state.rects.reference[axis] - popperOffsets[axis] - state.rects.popper[len];\n    var startDiff = popperOffsets[axis] - state.rects.reference[axis];\n    var arrowOffsetParent = getOffsetParent(arrowElement);\n    var clientSize = arrowOffsetParent ? axis === 'y' ? arrowOffsetParent.clientHeight || 0 : arrowOffsetParent.clientWidth || 0 : 0;\n    var centerToReference = endDiff / 2 - startDiff / 2; // Make sure the arrow doesn't overflow the popper if the center point is\n    // outside of the popper bounds\n\n    var min = paddingObject[minProp];\n    var max = clientSize - arrowRect[len] - paddingObject[maxProp];\n    var center = clientSize / 2 - arrowRect[len] / 2 + centerToReference;\n    var offset = within(min, center, max); // Prevents breaking syntax highlighting...\n\n    var axisProp = axis;\n    state.modifiersData[name] = (_state$modifiersData$ = {}, _state$modifiersData$[axisProp] = offset, _state$modifiersData$.centerOffset = offset - center, _state$modifiersData$);\n  }\n\n  function effect$1(_ref2) {\n    var state = _ref2.state,\n        options = _ref2.options;\n    var _options$element = options.element,\n        arrowElement = _options$element === void 0 ? '[data-popper-arrow]' : _options$element;\n\n    if (arrowElement == null) {\n      return;\n    } // CSS selector\n\n\n    if (typeof arrowElement === 'string') {\n      arrowElement = state.elements.popper.querySelector(arrowElement);\n\n      if (!arrowElement) {\n        return;\n      }\n    }\n\n    if (!contains(state.elements.popper, arrowElement)) {\n\n      return;\n    }\n\n    state.elements.arrow = arrowElement;\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  var arrow$1 = {\n    name: 'arrow',\n    enabled: true,\n    phase: 'main',\n    fn: arrow,\n    effect: effect$1,\n    requires: ['popperOffsets'],\n    requiresIfExists: ['preventOverflow']\n  };\n\n  var unsetSides = {\n    top: 'auto',\n    right: 'auto',\n    bottom: 'auto',\n    left: 'auto'\n  }; // Round the offsets to the nearest suitable subpixel based on the DPR.\n  // Zooming can change the DPR, but it seems to report a value that will\n  // cleanly divide the values into the appropriate subpixels.\n\n  function roundOffsetsByDPR(_ref) {\n    var x = _ref.x,\n        y = _ref.y;\n    var win = window;\n    var dpr = win.devicePixelRatio || 1;\n    return {\n      x: round(round(x * dpr) / dpr) || 0,\n      y: round(round(y * dpr) / dpr) || 0\n    };\n  }\n\n  function mapToStyles(_ref2) {\n    var _Object$assign2;\n\n    var popper = _ref2.popper,\n        popperRect = _ref2.popperRect,\n        placement = _ref2.placement,\n        offsets = _ref2.offsets,\n        position = _ref2.position,\n        gpuAcceleration = _ref2.gpuAcceleration,\n        adaptive = _ref2.adaptive,\n        roundOffsets = _ref2.roundOffsets;\n\n    var _ref3 = roundOffsets === true ? roundOffsetsByDPR(offsets) : typeof roundOffsets === 'function' ? roundOffsets(offsets) : offsets,\n        _ref3$x = _ref3.x,\n        x = _ref3$x === void 0 ? 0 : _ref3$x,\n        _ref3$y = _ref3.y,\n        y = _ref3$y === void 0 ? 0 : _ref3$y;\n\n    var hasX = offsets.hasOwnProperty('x');\n    var hasY = offsets.hasOwnProperty('y');\n    var sideX = left;\n    var sideY = top;\n    var win = window;\n\n    if (adaptive) {\n      var offsetParent = getOffsetParent(popper);\n      var heightProp = 'clientHeight';\n      var widthProp = 'clientWidth';\n\n      if (offsetParent === getWindow(popper)) {\n        offsetParent = getDocumentElement(popper);\n\n        if (getComputedStyle$1(offsetParent).position !== 'static') {\n          heightProp = 'scrollHeight';\n          widthProp = 'scrollWidth';\n        }\n      } // $FlowFixMe[incompatible-cast]: force type refinement, we compare offsetParent with window above, but Flow doesn't detect it\n\n\n      offsetParent = offsetParent;\n\n      if (placement === top) {\n        sideY = bottom; // $FlowFixMe[prop-missing]\n\n        y -= offsetParent[heightProp] - popperRect.height;\n        y *= gpuAcceleration ? 1 : -1;\n      }\n\n      if (placement === left) {\n        sideX = right; // $FlowFixMe[prop-missing]\n\n        x -= offsetParent[widthProp] - popperRect.width;\n        x *= gpuAcceleration ? 1 : -1;\n      }\n    }\n\n    var commonStyles = Object.assign({\n      position: position\n    }, adaptive && unsetSides);\n\n    if (gpuAcceleration) {\n      var _Object$assign;\n\n      return Object.assign({}, commonStyles, (_Object$assign = {}, _Object$assign[sideY] = hasY ? '0' : '', _Object$assign[sideX] = hasX ? '0' : '', _Object$assign.transform = (win.devicePixelRatio || 1) < 2 ? \"translate(\" + x + \"px, \" + y + \"px)\" : \"translate3d(\" + x + \"px, \" + y + \"px, 0)\", _Object$assign));\n    }\n\n    return Object.assign({}, commonStyles, (_Object$assign2 = {}, _Object$assign2[sideY] = hasY ? y + \"px\" : '', _Object$assign2[sideX] = hasX ? x + \"px\" : '', _Object$assign2.transform = '', _Object$assign2));\n  }\n\n  function computeStyles(_ref4) {\n    var state = _ref4.state,\n        options = _ref4.options;\n    var _options$gpuAccelerat = options.gpuAcceleration,\n        gpuAcceleration = _options$gpuAccelerat === void 0 ? true : _options$gpuAccelerat,\n        _options$adaptive = options.adaptive,\n        adaptive = _options$adaptive === void 0 ? true : _options$adaptive,\n        _options$roundOffsets = options.roundOffsets,\n        roundOffsets = _options$roundOffsets === void 0 ? true : _options$roundOffsets;\n\n    var commonStyles = {\n      placement: getBasePlacement(state.placement),\n      popper: state.elements.popper,\n      popperRect: state.rects.popper,\n      gpuAcceleration: gpuAcceleration\n    };\n\n    if (state.modifiersData.popperOffsets != null) {\n      state.styles.popper = Object.assign({}, state.styles.popper, mapToStyles(Object.assign({}, commonStyles, {\n        offsets: state.modifiersData.popperOffsets,\n        position: state.options.strategy,\n        adaptive: adaptive,\n        roundOffsets: roundOffsets\n      })));\n    }\n\n    if (state.modifiersData.arrow != null) {\n      state.styles.arrow = Object.assign({}, state.styles.arrow, mapToStyles(Object.assign({}, commonStyles, {\n        offsets: state.modifiersData.arrow,\n        position: 'absolute',\n        adaptive: false,\n        roundOffsets: roundOffsets\n      })));\n    }\n\n    state.attributes.popper = Object.assign({}, state.attributes.popper, {\n      'data-popper-placement': state.placement\n    });\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  var computeStyles$1 = {\n    name: 'computeStyles',\n    enabled: true,\n    phase: 'beforeWrite',\n    fn: computeStyles,\n    data: {}\n  };\n\n  var passive = {\n    passive: true\n  };\n\n  function effect(_ref) {\n    var state = _ref.state,\n        instance = _ref.instance,\n        options = _ref.options;\n    var _options$scroll = options.scroll,\n        scroll = _options$scroll === void 0 ? true : _options$scroll,\n        _options$resize = options.resize,\n        resize = _options$resize === void 0 ? true : _options$resize;\n    var window = getWindow(state.elements.popper);\n    var scrollParents = [].concat(state.scrollParents.reference, state.scrollParents.popper);\n\n    if (scroll) {\n      scrollParents.forEach(function (scrollParent) {\n        scrollParent.addEventListener('scroll', instance.update, passive);\n      });\n    }\n\n    if (resize) {\n      window.addEventListener('resize', instance.update, passive);\n    }\n\n    return function () {\n      if (scroll) {\n        scrollParents.forEach(function (scrollParent) {\n          scrollParent.removeEventListener('scroll', instance.update, passive);\n        });\n      }\n\n      if (resize) {\n        window.removeEventListener('resize', instance.update, passive);\n      }\n    };\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  var eventListeners = {\n    name: 'eventListeners',\n    enabled: true,\n    phase: 'write',\n    fn: function fn() {},\n    effect: effect,\n    data: {}\n  };\n\n  var hash$1 = {\n    left: 'right',\n    right: 'left',\n    bottom: 'top',\n    top: 'bottom'\n  };\n  function getOppositePlacement(placement) {\n    return placement.replace(/left|right|bottom|top/g, function (matched) {\n      return hash$1[matched];\n    });\n  }\n\n  var hash = {\n    start: 'end',\n    end: 'start'\n  };\n  function getOppositeVariationPlacement(placement) {\n    return placement.replace(/start|end/g, function (matched) {\n      return hash[matched];\n    });\n  }\n\n  function getWindowScroll(node) {\n    var win = getWindow(node);\n    var scrollLeft = win.pageXOffset;\n    var scrollTop = win.pageYOffset;\n    return {\n      scrollLeft: scrollLeft,\n      scrollTop: scrollTop\n    };\n  }\n\n  function getWindowScrollBarX(element) {\n    // If <html> has a CSS width greater than the viewport, then this will be\n    // incorrect for RTL.\n    // Popper 1 is broken in this case and never had a bug report so let's assume\n    // it's not an issue. I don't think anyone ever specifies width on <html>\n    // anyway.\n    // Browsers where the left scrollbar doesn't cause an issue report `0` for\n    // this (e.g. Edge 2019, IE11, Safari)\n    return getBoundingClientRect(getDocumentElement(element)).left + getWindowScroll(element).scrollLeft;\n  }\n\n  function getViewportRect(element) {\n    var win = getWindow(element);\n    var html = getDocumentElement(element);\n    var visualViewport = win.visualViewport;\n    var width = html.clientWidth;\n    var height = html.clientHeight;\n    var x = 0;\n    var y = 0; // NB: This isn't supported on iOS <= 12. If the keyboard is open, the popper\n    // can be obscured underneath it.\n    // Also, `html.clientHeight` adds the bottom bar height in Safari iOS, even\n    // if it isn't open, so if this isn't available, the popper will be detected\n    // to overflow the bottom of the screen too early.\n\n    if (visualViewport) {\n      width = visualViewport.width;\n      height = visualViewport.height; // Uses Layout Viewport (like Chrome; Safari does not currently)\n      // In Chrome, it returns a value very close to 0 (+/-) but contains rounding\n      // errors due to floating point numbers, so we need to check precision.\n      // Safari returns a number <= 0, usually < -1 when pinch-zoomed\n      // Feature detection fails in mobile emulation mode in Chrome.\n      // Math.abs(win.innerWidth / visualViewport.scale - visualViewport.width) <\n      // 0.001\n      // Fallback here: \"Not Safari\" userAgent\n\n      if (!/^((?!chrome|android).)*safari/i.test(navigator.userAgent)) {\n        x = visualViewport.offsetLeft;\n        y = visualViewport.offsetTop;\n      }\n    }\n\n    return {\n      width: width,\n      height: height,\n      x: x + getWindowScrollBarX(element),\n      y: y\n    };\n  }\n\n  // of the `<html>` and `<body>` rect bounds if horizontally scrollable\n\n  function getDocumentRect(element) {\n    var _element$ownerDocumen;\n\n    var html = getDocumentElement(element);\n    var winScroll = getWindowScroll(element);\n    var body = (_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body;\n    var width = max(html.scrollWidth, html.clientWidth, body ? body.scrollWidth : 0, body ? body.clientWidth : 0);\n    var height = max(html.scrollHeight, html.clientHeight, body ? body.scrollHeight : 0, body ? body.clientHeight : 0);\n    var x = -winScroll.scrollLeft + getWindowScrollBarX(element);\n    var y = -winScroll.scrollTop;\n\n    if (getComputedStyle$1(body || html).direction === 'rtl') {\n      x += max(html.clientWidth, body ? body.clientWidth : 0) - width;\n    }\n\n    return {\n      width: width,\n      height: height,\n      x: x,\n      y: y\n    };\n  }\n\n  function isScrollParent(element) {\n    // Firefox wants us to check `-x` and `-y` variations as well\n    var _getComputedStyle = getComputedStyle$1(element),\n        overflow = _getComputedStyle.overflow,\n        overflowX = _getComputedStyle.overflowX,\n        overflowY = _getComputedStyle.overflowY;\n\n    return /auto|scroll|overlay|hidden/.test(overflow + overflowY + overflowX);\n  }\n\n  function getScrollParent(node) {\n    if (['html', 'body', '#document'].indexOf(getNodeName(node)) >= 0) {\n      // $FlowFixMe[incompatible-return]: assume body is always available\n      return node.ownerDocument.body;\n    }\n\n    if (isHTMLElement(node) && isScrollParent(node)) {\n      return node;\n    }\n\n    return getScrollParent(getParentNode(node));\n  }\n\n  /*\n  given a DOM element, return the list of all scroll parents, up the list of ancesors\n  until we get to the top window object. This list is what we attach scroll listeners\n  to, because if any of these parent elements scroll, we'll need to re-calculate the\n  reference element's position.\n  */\n\n  function listScrollParents(element, list) {\n    var _element$ownerDocumen;\n\n    if (list === void 0) {\n      list = [];\n    }\n\n    var scrollParent = getScrollParent(element);\n    var isBody = scrollParent === ((_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body);\n    var win = getWindow(scrollParent);\n    var target = isBody ? [win].concat(win.visualViewport || [], isScrollParent(scrollParent) ? scrollParent : []) : scrollParent;\n    var updatedList = list.concat(target);\n    return isBody ? updatedList : // $FlowFixMe[incompatible-call]: isBody tells us target will be an HTMLElement here\n    updatedList.concat(listScrollParents(getParentNode(target)));\n  }\n\n  function rectToClientRect(rect) {\n    return Object.assign({}, rect, {\n      left: rect.x,\n      top: rect.y,\n      right: rect.x + rect.width,\n      bottom: rect.y + rect.height\n    });\n  }\n\n  function getInnerBoundingClientRect(element) {\n    var rect = getBoundingClientRect(element);\n    rect.top = rect.top + element.clientTop;\n    rect.left = rect.left + element.clientLeft;\n    rect.bottom = rect.top + element.clientHeight;\n    rect.right = rect.left + element.clientWidth;\n    rect.width = element.clientWidth;\n    rect.height = element.clientHeight;\n    rect.x = rect.left;\n    rect.y = rect.top;\n    return rect;\n  }\n\n  function getClientRectFromMixedType(element, clippingParent) {\n    return clippingParent === viewport ? rectToClientRect(getViewportRect(element)) : isHTMLElement(clippingParent) ? getInnerBoundingClientRect(clippingParent) : rectToClientRect(getDocumentRect(getDocumentElement(element)));\n  } // A \"clipping parent\" is an overflowable container with the characteristic of\n  // clipping (or hiding) overflowing elements with a position different from\n  // `initial`\n\n\n  function getClippingParents(element) {\n    var clippingParents = listScrollParents(getParentNode(element));\n    var canEscapeClipping = ['absolute', 'fixed'].indexOf(getComputedStyle$1(element).position) >= 0;\n    var clipperElement = canEscapeClipping && isHTMLElement(element) ? getOffsetParent(element) : element;\n\n    if (!isElement(clipperElement)) {\n      return [];\n    } // $FlowFixMe[incompatible-return]: https://github.com/facebook/flow/issues/1414\n\n\n    return clippingParents.filter(function (clippingParent) {\n      return isElement(clippingParent) && contains(clippingParent, clipperElement) && getNodeName(clippingParent) !== 'body';\n    });\n  } // Gets the maximum area that the element is visible in due to any number of\n  // clipping parents\n\n\n  function getClippingRect(element, boundary, rootBoundary) {\n    var mainClippingParents = boundary === 'clippingParents' ? getClippingParents(element) : [].concat(boundary);\n    var clippingParents = [].concat(mainClippingParents, [rootBoundary]);\n    var firstClippingParent = clippingParents[0];\n    var clippingRect = clippingParents.reduce(function (accRect, clippingParent) {\n      var rect = getClientRectFromMixedType(element, clippingParent);\n      accRect.top = max(rect.top, accRect.top);\n      accRect.right = min(rect.right, accRect.right);\n      accRect.bottom = min(rect.bottom, accRect.bottom);\n      accRect.left = max(rect.left, accRect.left);\n      return accRect;\n    }, getClientRectFromMixedType(element, firstClippingParent));\n    clippingRect.width = clippingRect.right - clippingRect.left;\n    clippingRect.height = clippingRect.bottom - clippingRect.top;\n    clippingRect.x = clippingRect.left;\n    clippingRect.y = clippingRect.top;\n    return clippingRect;\n  }\n\n  function getVariation(placement) {\n    return placement.split('-')[1];\n  }\n\n  function computeOffsets(_ref) {\n    var reference = _ref.reference,\n        element = _ref.element,\n        placement = _ref.placement;\n    var basePlacement = placement ? getBasePlacement(placement) : null;\n    var variation = placement ? getVariation(placement) : null;\n    var commonX = reference.x + reference.width / 2 - element.width / 2;\n    var commonY = reference.y + reference.height / 2 - element.height / 2;\n    var offsets;\n\n    switch (basePlacement) {\n      case top:\n        offsets = {\n          x: commonX,\n          y: reference.y - element.height\n        };\n        break;\n\n      case bottom:\n        offsets = {\n          x: commonX,\n          y: reference.y + reference.height\n        };\n        break;\n\n      case right:\n        offsets = {\n          x: reference.x + reference.width,\n          y: commonY\n        };\n        break;\n\n      case left:\n        offsets = {\n          x: reference.x - element.width,\n          y: commonY\n        };\n        break;\n\n      default:\n        offsets = {\n          x: reference.x,\n          y: reference.y\n        };\n    }\n\n    var mainAxis = basePlacement ? getMainAxisFromPlacement(basePlacement) : null;\n\n    if (mainAxis != null) {\n      var len = mainAxis === 'y' ? 'height' : 'width';\n\n      switch (variation) {\n        case start:\n          offsets[mainAxis] = offsets[mainAxis] - (reference[len] / 2 - element[len] / 2);\n          break;\n\n        case end:\n          offsets[mainAxis] = offsets[mainAxis] + (reference[len] / 2 - element[len] / 2);\n          break;\n      }\n    }\n\n    return offsets;\n  }\n\n  function detectOverflow(state, options) {\n    if (options === void 0) {\n      options = {};\n    }\n\n    var _options = options,\n        _options$placement = _options.placement,\n        placement = _options$placement === void 0 ? state.placement : _options$placement,\n        _options$boundary = _options.boundary,\n        boundary = _options$boundary === void 0 ? clippingParents : _options$boundary,\n        _options$rootBoundary = _options.rootBoundary,\n        rootBoundary = _options$rootBoundary === void 0 ? viewport : _options$rootBoundary,\n        _options$elementConte = _options.elementContext,\n        elementContext = _options$elementConte === void 0 ? popper : _options$elementConte,\n        _options$altBoundary = _options.altBoundary,\n        altBoundary = _options$altBoundary === void 0 ? false : _options$altBoundary,\n        _options$padding = _options.padding,\n        padding = _options$padding === void 0 ? 0 : _options$padding;\n    var paddingObject = mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));\n    var altContext = elementContext === popper ? reference : popper;\n    var referenceElement = state.elements.reference;\n    var popperRect = state.rects.popper;\n    var element = state.elements[altBoundary ? altContext : elementContext];\n    var clippingClientRect = getClippingRect(isElement(element) ? element : element.contextElement || getDocumentElement(state.elements.popper), boundary, rootBoundary);\n    var referenceClientRect = getBoundingClientRect(referenceElement);\n    var popperOffsets = computeOffsets({\n      reference: referenceClientRect,\n      element: popperRect,\n      strategy: 'absolute',\n      placement: placement\n    });\n    var popperClientRect = rectToClientRect(Object.assign({}, popperRect, popperOffsets));\n    var elementClientRect = elementContext === popper ? popperClientRect : referenceClientRect; // positive = overflowing the clipping rect\n    // 0 or negative = within the clipping rect\n\n    var overflowOffsets = {\n      top: clippingClientRect.top - elementClientRect.top + paddingObject.top,\n      bottom: elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom,\n      left: clippingClientRect.left - elementClientRect.left + paddingObject.left,\n      right: elementClientRect.right - clippingClientRect.right + paddingObject.right\n    };\n    var offsetData = state.modifiersData.offset; // Offsets can be applied only to the popper element\n\n    if (elementContext === popper && offsetData) {\n      var offset = offsetData[placement];\n      Object.keys(overflowOffsets).forEach(function (key) {\n        var multiply = [right, bottom].indexOf(key) >= 0 ? 1 : -1;\n        var axis = [top, bottom].indexOf(key) >= 0 ? 'y' : 'x';\n        overflowOffsets[key] += offset[axis] * multiply;\n      });\n    }\n\n    return overflowOffsets;\n  }\n\n  function computeAutoPlacement(state, options) {\n    if (options === void 0) {\n      options = {};\n    }\n\n    var _options = options,\n        placement = _options.placement,\n        boundary = _options.boundary,\n        rootBoundary = _options.rootBoundary,\n        padding = _options.padding,\n        flipVariations = _options.flipVariations,\n        _options$allowedAutoP = _options.allowedAutoPlacements,\n        allowedAutoPlacements = _options$allowedAutoP === void 0 ? placements : _options$allowedAutoP;\n    var variation = getVariation(placement);\n    var placements$1 = variation ? flipVariations ? variationPlacements : variationPlacements.filter(function (placement) {\n      return getVariation(placement) === variation;\n    }) : basePlacements;\n    var allowedPlacements = placements$1.filter(function (placement) {\n      return allowedAutoPlacements.indexOf(placement) >= 0;\n    });\n\n    if (allowedPlacements.length === 0) {\n      allowedPlacements = placements$1;\n    } // $FlowFixMe[incompatible-type]: Flow seems to have problems with two array unions...\n\n\n    var overflows = allowedPlacements.reduce(function (acc, placement) {\n      acc[placement] = detectOverflow(state, {\n        placement: placement,\n        boundary: boundary,\n        rootBoundary: rootBoundary,\n        padding: padding\n      })[getBasePlacement(placement)];\n      return acc;\n    }, {});\n    return Object.keys(overflows).sort(function (a, b) {\n      return overflows[a] - overflows[b];\n    });\n  }\n\n  function getExpandedFallbackPlacements(placement) {\n    if (getBasePlacement(placement) === auto) {\n      return [];\n    }\n\n    var oppositePlacement = getOppositePlacement(placement);\n    return [getOppositeVariationPlacement(placement), oppositePlacement, getOppositeVariationPlacement(oppositePlacement)];\n  }\n\n  function flip(_ref) {\n    var state = _ref.state,\n        options = _ref.options,\n        name = _ref.name;\n\n    if (state.modifiersData[name]._skip) {\n      return;\n    }\n\n    var _options$mainAxis = options.mainAxis,\n        checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\n        _options$altAxis = options.altAxis,\n        checkAltAxis = _options$altAxis === void 0 ? true : _options$altAxis,\n        specifiedFallbackPlacements = options.fallbackPlacements,\n        padding = options.padding,\n        boundary = options.boundary,\n        rootBoundary = options.rootBoundary,\n        altBoundary = options.altBoundary,\n        _options$flipVariatio = options.flipVariations,\n        flipVariations = _options$flipVariatio === void 0 ? true : _options$flipVariatio,\n        allowedAutoPlacements = options.allowedAutoPlacements;\n    var preferredPlacement = state.options.placement;\n    var basePlacement = getBasePlacement(preferredPlacement);\n    var isBasePlacement = basePlacement === preferredPlacement;\n    var fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipVariations ? [getOppositePlacement(preferredPlacement)] : getExpandedFallbackPlacements(preferredPlacement));\n    var placements = [preferredPlacement].concat(fallbackPlacements).reduce(function (acc, placement) {\n      return acc.concat(getBasePlacement(placement) === auto ? computeAutoPlacement(state, {\n        placement: placement,\n        boundary: boundary,\n        rootBoundary: rootBoundary,\n        padding: padding,\n        flipVariations: flipVariations,\n        allowedAutoPlacements: allowedAutoPlacements\n      }) : placement);\n    }, []);\n    var referenceRect = state.rects.reference;\n    var popperRect = state.rects.popper;\n    var checksMap = new Map();\n    var makeFallbackChecks = true;\n    var firstFittingPlacement = placements[0];\n\n    for (var i = 0; i < placements.length; i++) {\n      var placement = placements[i];\n\n      var _basePlacement = getBasePlacement(placement);\n\n      var isStartVariation = getVariation(placement) === start;\n      var isVertical = [top, bottom].indexOf(_basePlacement) >= 0;\n      var len = isVertical ? 'width' : 'height';\n      var overflow = detectOverflow(state, {\n        placement: placement,\n        boundary: boundary,\n        rootBoundary: rootBoundary,\n        altBoundary: altBoundary,\n        padding: padding\n      });\n      var mainVariationSide = isVertical ? isStartVariation ? right : left : isStartVariation ? bottom : top;\n\n      if (referenceRect[len] > popperRect[len]) {\n        mainVariationSide = getOppositePlacement(mainVariationSide);\n      }\n\n      var altVariationSide = getOppositePlacement(mainVariationSide);\n      var checks = [];\n\n      if (checkMainAxis) {\n        checks.push(overflow[_basePlacement] <= 0);\n      }\n\n      if (checkAltAxis) {\n        checks.push(overflow[mainVariationSide] <= 0, overflow[altVariationSide] <= 0);\n      }\n\n      if (checks.every(function (check) {\n        return check;\n      })) {\n        firstFittingPlacement = placement;\n        makeFallbackChecks = false;\n        break;\n      }\n\n      checksMap.set(placement, checks);\n    }\n\n    if (makeFallbackChecks) {\n      // `2` may be desired in some cases – research later\n      var numberOfChecks = flipVariations ? 3 : 1;\n\n      var _loop = function _loop(_i) {\n        var fittingPlacement = placements.find(function (placement) {\n          var checks = checksMap.get(placement);\n\n          if (checks) {\n            return checks.slice(0, _i).every(function (check) {\n              return check;\n            });\n          }\n        });\n\n        if (fittingPlacement) {\n          firstFittingPlacement = fittingPlacement;\n          return \"break\";\n        }\n      };\n\n      for (var _i = numberOfChecks; _i > 0; _i--) {\n        var _ret = _loop(_i);\n\n        if (_ret === \"break\") break;\n      }\n    }\n\n    if (state.placement !== firstFittingPlacement) {\n      state.modifiersData[name]._skip = true;\n      state.placement = firstFittingPlacement;\n      state.reset = true;\n    }\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  var flip$1 = {\n    name: 'flip',\n    enabled: true,\n    phase: 'main',\n    fn: flip,\n    requiresIfExists: ['offset'],\n    data: {\n      _skip: false\n    }\n  };\n\n  function getSideOffsets(overflow, rect, preventedOffsets) {\n    if (preventedOffsets === void 0) {\n      preventedOffsets = {\n        x: 0,\n        y: 0\n      };\n    }\n\n    return {\n      top: overflow.top - rect.height - preventedOffsets.y,\n      right: overflow.right - rect.width + preventedOffsets.x,\n      bottom: overflow.bottom - rect.height + preventedOffsets.y,\n      left: overflow.left - rect.width - preventedOffsets.x\n    };\n  }\n\n  function isAnySideFullyClipped(overflow) {\n    return [top, right, bottom, left].some(function (side) {\n      return overflow[side] >= 0;\n    });\n  }\n\n  function hide(_ref) {\n    var state = _ref.state,\n        name = _ref.name;\n    var referenceRect = state.rects.reference;\n    var popperRect = state.rects.popper;\n    var preventedOffsets = state.modifiersData.preventOverflow;\n    var referenceOverflow = detectOverflow(state, {\n      elementContext: 'reference'\n    });\n    var popperAltOverflow = detectOverflow(state, {\n      altBoundary: true\n    });\n    var referenceClippingOffsets = getSideOffsets(referenceOverflow, referenceRect);\n    var popperEscapeOffsets = getSideOffsets(popperAltOverflow, popperRect, preventedOffsets);\n    var isReferenceHidden = isAnySideFullyClipped(referenceClippingOffsets);\n    var hasPopperEscaped = isAnySideFullyClipped(popperEscapeOffsets);\n    state.modifiersData[name] = {\n      referenceClippingOffsets: referenceClippingOffsets,\n      popperEscapeOffsets: popperEscapeOffsets,\n      isReferenceHidden: isReferenceHidden,\n      hasPopperEscaped: hasPopperEscaped\n    };\n    state.attributes.popper = Object.assign({}, state.attributes.popper, {\n      'data-popper-reference-hidden': isReferenceHidden,\n      'data-popper-escaped': hasPopperEscaped\n    });\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  var hide$1 = {\n    name: 'hide',\n    enabled: true,\n    phase: 'main',\n    requiresIfExists: ['preventOverflow'],\n    fn: hide\n  };\n\n  function distanceAndSkiddingToXY(placement, rects, offset) {\n    var basePlacement = getBasePlacement(placement);\n    var invertDistance = [left, top].indexOf(basePlacement) >= 0 ? -1 : 1;\n\n    var _ref = typeof offset === 'function' ? offset(Object.assign({}, rects, {\n      placement: placement\n    })) : offset,\n        skidding = _ref[0],\n        distance = _ref[1];\n\n    skidding = skidding || 0;\n    distance = (distance || 0) * invertDistance;\n    return [left, right].indexOf(basePlacement) >= 0 ? {\n      x: distance,\n      y: skidding\n    } : {\n      x: skidding,\n      y: distance\n    };\n  }\n\n  function offset(_ref2) {\n    var state = _ref2.state,\n        options = _ref2.options,\n        name = _ref2.name;\n    var _options$offset = options.offset,\n        offset = _options$offset === void 0 ? [0, 0] : _options$offset;\n    var data = placements.reduce(function (acc, placement) {\n      acc[placement] = distanceAndSkiddingToXY(placement, state.rects, offset);\n      return acc;\n    }, {});\n    var _data$state$placement = data[state.placement],\n        x = _data$state$placement.x,\n        y = _data$state$placement.y;\n\n    if (state.modifiersData.popperOffsets != null) {\n      state.modifiersData.popperOffsets.x += x;\n      state.modifiersData.popperOffsets.y += y;\n    }\n\n    state.modifiersData[name] = data;\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  var offset$1 = {\n    name: 'offset',\n    enabled: true,\n    phase: 'main',\n    requires: ['popperOffsets'],\n    fn: offset\n  };\n\n  function popperOffsets(_ref) {\n    var state = _ref.state,\n        name = _ref.name;\n    // Offsets are the actual position the popper needs to have to be\n    // properly positioned near its reference element\n    // This is the most basic placement, and will be adjusted by\n    // the modifiers in the next step\n    state.modifiersData[name] = computeOffsets({\n      reference: state.rects.reference,\n      element: state.rects.popper,\n      strategy: 'absolute',\n      placement: state.placement\n    });\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  var popperOffsets$1 = {\n    name: 'popperOffsets',\n    enabled: true,\n    phase: 'read',\n    fn: popperOffsets,\n    data: {}\n  };\n\n  function getAltAxis(axis) {\n    return axis === 'x' ? 'y' : 'x';\n  }\n\n  function preventOverflow(_ref) {\n    var state = _ref.state,\n        options = _ref.options,\n        name = _ref.name;\n    var _options$mainAxis = options.mainAxis,\n        checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\n        _options$altAxis = options.altAxis,\n        checkAltAxis = _options$altAxis === void 0 ? false : _options$altAxis,\n        boundary = options.boundary,\n        rootBoundary = options.rootBoundary,\n        altBoundary = options.altBoundary,\n        padding = options.padding,\n        _options$tether = options.tether,\n        tether = _options$tether === void 0 ? true : _options$tether,\n        _options$tetherOffset = options.tetherOffset,\n        tetherOffset = _options$tetherOffset === void 0 ? 0 : _options$tetherOffset;\n    var overflow = detectOverflow(state, {\n      boundary: boundary,\n      rootBoundary: rootBoundary,\n      padding: padding,\n      altBoundary: altBoundary\n    });\n    var basePlacement = getBasePlacement(state.placement);\n    var variation = getVariation(state.placement);\n    var isBasePlacement = !variation;\n    var mainAxis = getMainAxisFromPlacement(basePlacement);\n    var altAxis = getAltAxis(mainAxis);\n    var popperOffsets = state.modifiersData.popperOffsets;\n    var referenceRect = state.rects.reference;\n    var popperRect = state.rects.popper;\n    var tetherOffsetValue = typeof tetherOffset === 'function' ? tetherOffset(Object.assign({}, state.rects, {\n      placement: state.placement\n    })) : tetherOffset;\n    var data = {\n      x: 0,\n      y: 0\n    };\n\n    if (!popperOffsets) {\n      return;\n    }\n\n    if (checkMainAxis || checkAltAxis) {\n      var mainSide = mainAxis === 'y' ? top : left;\n      var altSide = mainAxis === 'y' ? bottom : right;\n      var len = mainAxis === 'y' ? 'height' : 'width';\n      var offset = popperOffsets[mainAxis];\n      var min$1 = popperOffsets[mainAxis] + overflow[mainSide];\n      var max$1 = popperOffsets[mainAxis] - overflow[altSide];\n      var additive = tether ? -popperRect[len] / 2 : 0;\n      var minLen = variation === start ? referenceRect[len] : popperRect[len];\n      var maxLen = variation === start ? -popperRect[len] : -referenceRect[len]; // We need to include the arrow in the calculation so the arrow doesn't go\n      // outside the reference bounds\n\n      var arrowElement = state.elements.arrow;\n      var arrowRect = tether && arrowElement ? getLayoutRect(arrowElement) : {\n        width: 0,\n        height: 0\n      };\n      var arrowPaddingObject = state.modifiersData['arrow#persistent'] ? state.modifiersData['arrow#persistent'].padding : getFreshSideObject();\n      var arrowPaddingMin = arrowPaddingObject[mainSide];\n      var arrowPaddingMax = arrowPaddingObject[altSide]; // If the reference length is smaller than the arrow length, we don't want\n      // to include its full size in the calculation. If the reference is small\n      // and near the edge of a boundary, the popper can overflow even if the\n      // reference is not overflowing as well (e.g. virtual elements with no\n      // width or height)\n\n      var arrowLen = within(0, referenceRect[len], arrowRect[len]);\n      var minOffset = isBasePlacement ? referenceRect[len] / 2 - additive - arrowLen - arrowPaddingMin - tetherOffsetValue : minLen - arrowLen - arrowPaddingMin - tetherOffsetValue;\n      var maxOffset = isBasePlacement ? -referenceRect[len] / 2 + additive + arrowLen + arrowPaddingMax + tetherOffsetValue : maxLen + arrowLen + arrowPaddingMax + tetherOffsetValue;\n      var arrowOffsetParent = state.elements.arrow && getOffsetParent(state.elements.arrow);\n      var clientOffset = arrowOffsetParent ? mainAxis === 'y' ? arrowOffsetParent.clientTop || 0 : arrowOffsetParent.clientLeft || 0 : 0;\n      var offsetModifierValue = state.modifiersData.offset ? state.modifiersData.offset[state.placement][mainAxis] : 0;\n      var tetherMin = popperOffsets[mainAxis] + minOffset - offsetModifierValue - clientOffset;\n      var tetherMax = popperOffsets[mainAxis] + maxOffset - offsetModifierValue;\n\n      if (checkMainAxis) {\n        var preventedOffset = within(tether ? min(min$1, tetherMin) : min$1, offset, tether ? max(max$1, tetherMax) : max$1);\n        popperOffsets[mainAxis] = preventedOffset;\n        data[mainAxis] = preventedOffset - offset;\n      }\n\n      if (checkAltAxis) {\n        var _mainSide = mainAxis === 'x' ? top : left;\n\n        var _altSide = mainAxis === 'x' ? bottom : right;\n\n        var _offset = popperOffsets[altAxis];\n\n        var _min = _offset + overflow[_mainSide];\n\n        var _max = _offset - overflow[_altSide];\n\n        var _preventedOffset = within(tether ? min(_min, tetherMin) : _min, _offset, tether ? max(_max, tetherMax) : _max);\n\n        popperOffsets[altAxis] = _preventedOffset;\n        data[altAxis] = _preventedOffset - _offset;\n      }\n    }\n\n    state.modifiersData[name] = data;\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  var preventOverflow$1 = {\n    name: 'preventOverflow',\n    enabled: true,\n    phase: 'main',\n    fn: preventOverflow,\n    requiresIfExists: ['offset']\n  };\n\n  function getHTMLElementScroll(element) {\n    return {\n      scrollLeft: element.scrollLeft,\n      scrollTop: element.scrollTop\n    };\n  }\n\n  function getNodeScroll(node) {\n    if (node === getWindow(node) || !isHTMLElement(node)) {\n      return getWindowScroll(node);\n    } else {\n      return getHTMLElementScroll(node);\n    }\n  }\n\n  // Composite means it takes into account transforms as well as layout.\n\n  function getCompositeRect(elementOrVirtualElement, offsetParent, isFixed) {\n    if (isFixed === void 0) {\n      isFixed = false;\n    }\n\n    var documentElement = getDocumentElement(offsetParent);\n    var rect = getBoundingClientRect(elementOrVirtualElement);\n    var isOffsetParentAnElement = isHTMLElement(offsetParent);\n    var scroll = {\n      scrollLeft: 0,\n      scrollTop: 0\n    };\n    var offsets = {\n      x: 0,\n      y: 0\n    };\n\n    if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {\n      if (getNodeName(offsetParent) !== 'body' || // https://github.com/popperjs/popper-core/issues/1078\n      isScrollParent(documentElement)) {\n        scroll = getNodeScroll(offsetParent);\n      }\n\n      if (isHTMLElement(offsetParent)) {\n        offsets = getBoundingClientRect(offsetParent);\n        offsets.x += offsetParent.clientLeft;\n        offsets.y += offsetParent.clientTop;\n      } else if (documentElement) {\n        offsets.x = getWindowScrollBarX(documentElement);\n      }\n    }\n\n    return {\n      x: rect.left + scroll.scrollLeft - offsets.x,\n      y: rect.top + scroll.scrollTop - offsets.y,\n      width: rect.width,\n      height: rect.height\n    };\n  }\n\n  function order(modifiers) {\n    var map = new Map();\n    var visited = new Set();\n    var result = [];\n    modifiers.forEach(function (modifier) {\n      map.set(modifier.name, modifier);\n    }); // On visiting object, check for its dependencies and visit them recursively\n\n    function sort(modifier) {\n      visited.add(modifier.name);\n      var requires = [].concat(modifier.requires || [], modifier.requiresIfExists || []);\n      requires.forEach(function (dep) {\n        if (!visited.has(dep)) {\n          var depModifier = map.get(dep);\n\n          if (depModifier) {\n            sort(depModifier);\n          }\n        }\n      });\n      result.push(modifier);\n    }\n\n    modifiers.forEach(function (modifier) {\n      if (!visited.has(modifier.name)) {\n        // check for visited object\n        sort(modifier);\n      }\n    });\n    return result;\n  }\n\n  function orderModifiers(modifiers) {\n    // order based on dependencies\n    var orderedModifiers = order(modifiers); // order based on phase\n\n    return modifierPhases.reduce(function (acc, phase) {\n      return acc.concat(orderedModifiers.filter(function (modifier) {\n        return modifier.phase === phase;\n      }));\n    }, []);\n  }\n\n  function debounce(fn) {\n    var pending;\n    return function () {\n      if (!pending) {\n        pending = new Promise(function (resolve) {\n          Promise.resolve().then(function () {\n            pending = undefined;\n            resolve(fn());\n          });\n        });\n      }\n\n      return pending;\n    };\n  }\n\n  function mergeByName(modifiers) {\n    var merged = modifiers.reduce(function (merged, current) {\n      var existing = merged[current.name];\n      merged[current.name] = existing ? Object.assign({}, existing, current, {\n        options: Object.assign({}, existing.options, current.options),\n        data: Object.assign({}, existing.data, current.data)\n      }) : current;\n      return merged;\n    }, {}); // IE11 does not support Object.values\n\n    return Object.keys(merged).map(function (key) {\n      return merged[key];\n    });\n  }\n\n  var DEFAULT_OPTIONS = {\n    placement: 'bottom',\n    modifiers: [],\n    strategy: 'absolute'\n  };\n\n  function areValidElements() {\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    return !args.some(function (element) {\n      return !(element && typeof element.getBoundingClientRect === 'function');\n    });\n  }\n\n  function popperGenerator(generatorOptions) {\n    if (generatorOptions === void 0) {\n      generatorOptions = {};\n    }\n\n    var _generatorOptions = generatorOptions,\n        _generatorOptions$def = _generatorOptions.defaultModifiers,\n        defaultModifiers = _generatorOptions$def === void 0 ? [] : _generatorOptions$def,\n        _generatorOptions$def2 = _generatorOptions.defaultOptions,\n        defaultOptions = _generatorOptions$def2 === void 0 ? DEFAULT_OPTIONS : _generatorOptions$def2;\n    return function createPopper(reference, popper, options) {\n      if (options === void 0) {\n        options = defaultOptions;\n      }\n\n      var state = {\n        placement: 'bottom',\n        orderedModifiers: [],\n        options: Object.assign({}, DEFAULT_OPTIONS, defaultOptions),\n        modifiersData: {},\n        elements: {\n          reference: reference,\n          popper: popper\n        },\n        attributes: {},\n        styles: {}\n      };\n      var effectCleanupFns = [];\n      var isDestroyed = false;\n      var instance = {\n        state: state,\n        setOptions: function setOptions(options) {\n          cleanupModifierEffects();\n          state.options = Object.assign({}, defaultOptions, state.options, options);\n          state.scrollParents = {\n            reference: isElement(reference) ? listScrollParents(reference) : reference.contextElement ? listScrollParents(reference.contextElement) : [],\n            popper: listScrollParents(popper)\n          }; // Orders the modifiers based on their dependencies and `phase`\n          // properties\n\n          var orderedModifiers = orderModifiers(mergeByName([].concat(defaultModifiers, state.options.modifiers))); // Strip out disabled modifiers\n\n          state.orderedModifiers = orderedModifiers.filter(function (m) {\n            return m.enabled;\n          }); // Validate the provided modifiers so that the consumer will get warned\n\n          runModifierEffects();\n          return instance.update();\n        },\n        // Sync update – it will always be executed, even if not necessary. This\n        // is useful for low frequency updates where sync behavior simplifies the\n        // logic.\n        // For high frequency updates (e.g. `resize` and `scroll` events), always\n        // prefer the async Popper#update method\n        forceUpdate: function forceUpdate() {\n          if (isDestroyed) {\n            return;\n          }\n\n          var _state$elements = state.elements,\n              reference = _state$elements.reference,\n              popper = _state$elements.popper; // Don't proceed if `reference` or `popper` are not valid elements\n          // anymore\n\n          if (!areValidElements(reference, popper)) {\n\n            return;\n          } // Store the reference and popper rects to be read by modifiers\n\n\n          state.rects = {\n            reference: getCompositeRect(reference, getOffsetParent(popper), state.options.strategy === 'fixed'),\n            popper: getLayoutRect(popper)\n          }; // Modifiers have the ability to reset the current update cycle. The\n          // most common use case for this is the `flip` modifier changing the\n          // placement, which then needs to re-run all the modifiers, because the\n          // logic was previously ran for the previous placement and is therefore\n          // stale/incorrect\n\n          state.reset = false;\n          state.placement = state.options.placement; // On each update cycle, the `modifiersData` property for each modifier\n          // is filled with the initial data specified by the modifier. This means\n          // it doesn't persist and is fresh on each update.\n          // To ensure persistent data, use `${name}#persistent`\n\n          state.orderedModifiers.forEach(function (modifier) {\n            return state.modifiersData[modifier.name] = Object.assign({}, modifier.data);\n          });\n\n          for (var index = 0; index < state.orderedModifiers.length; index++) {\n\n            if (state.reset === true) {\n              state.reset = false;\n              index = -1;\n              continue;\n            }\n\n            var _state$orderedModifie = state.orderedModifiers[index],\n                fn = _state$orderedModifie.fn,\n                _state$orderedModifie2 = _state$orderedModifie.options,\n                _options = _state$orderedModifie2 === void 0 ? {} : _state$orderedModifie2,\n                name = _state$orderedModifie.name;\n\n            if (typeof fn === 'function') {\n              state = fn({\n                state: state,\n                options: _options,\n                name: name,\n                instance: instance\n              }) || state;\n            }\n          }\n        },\n        // Async and optimistically optimized update – it will not be executed if\n        // not necessary (debounced to run at most once-per-tick)\n        update: debounce(function () {\n          return new Promise(function (resolve) {\n            instance.forceUpdate();\n            resolve(state);\n          });\n        }),\n        destroy: function destroy() {\n          cleanupModifierEffects();\n          isDestroyed = true;\n        }\n      };\n\n      if (!areValidElements(reference, popper)) {\n\n        return instance;\n      }\n\n      instance.setOptions(options).then(function (state) {\n        if (!isDestroyed && options.onFirstUpdate) {\n          options.onFirstUpdate(state);\n        }\n      }); // Modifiers have the ability to execute arbitrary code before the first\n      // update cycle runs. They will be executed in the same order as the update\n      // cycle. This is useful when a modifier adds some persistent data that\n      // other modifiers need to use, but the modifier is run after the dependent\n      // one.\n\n      function runModifierEffects() {\n        state.orderedModifiers.forEach(function (_ref3) {\n          var name = _ref3.name,\n              _ref3$options = _ref3.options,\n              options = _ref3$options === void 0 ? {} : _ref3$options,\n              effect = _ref3.effect;\n\n          if (typeof effect === 'function') {\n            var cleanupFn = effect({\n              state: state,\n              name: name,\n              instance: instance,\n              options: options\n            });\n\n            var noopFn = function noopFn() {};\n\n            effectCleanupFns.push(cleanupFn || noopFn);\n          }\n        });\n      }\n\n      function cleanupModifierEffects() {\n        effectCleanupFns.forEach(function (fn) {\n          return fn();\n        });\n        effectCleanupFns = [];\n      }\n\n      return instance;\n    };\n  }\n  var createPopper$2 = /*#__PURE__*/popperGenerator(); // eslint-disable-next-line import/no-unused-modules\n\n  var defaultModifiers$1 = [eventListeners, popperOffsets$1, computeStyles$1, applyStyles$1];\n  var createPopper$1 = /*#__PURE__*/popperGenerator({\n    defaultModifiers: defaultModifiers$1\n  }); // eslint-disable-next-line import/no-unused-modules\n\n  var defaultModifiers = [eventListeners, popperOffsets$1, computeStyles$1, applyStyles$1, offset$1, flip$1, preventOverflow$1, arrow$1, hide$1];\n  var createPopper = /*#__PURE__*/popperGenerator({\n    defaultModifiers: defaultModifiers\n  }); // eslint-disable-next-line import/no-unused-modules\n\n  var Popper = /*#__PURE__*/Object.freeze({\n    __proto__: null,\n    popperGenerator: popperGenerator,\n    detectOverflow: detectOverflow,\n    createPopperBase: createPopper$2,\n    createPopper: createPopper,\n    createPopperLite: createPopper$1,\n    top: top,\n    bottom: bottom,\n    right: right,\n    left: left,\n    auto: auto,\n    basePlacements: basePlacements,\n    start: start,\n    end: end,\n    clippingParents: clippingParents,\n    viewport: viewport,\n    popper: popper,\n    reference: reference,\n    variationPlacements: variationPlacements,\n    placements: placements,\n    beforeRead: beforeRead,\n    read: read,\n    afterRead: afterRead,\n    beforeMain: beforeMain,\n    main: main,\n    afterMain: afterMain,\n    beforeWrite: beforeWrite,\n    write: write,\n    afterWrite: afterWrite,\n    modifierPhases: modifierPhases,\n    applyStyles: applyStyles$1,\n    arrow: arrow$1,\n    computeStyles: computeStyles$1,\n    eventListeners: eventListeners,\n    flip: flip$1,\n    hide: hide$1,\n    offset: offset$1,\n    popperOffsets: popperOffsets$1,\n    preventOverflow: preventOverflow$1\n  });\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): dropdown.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$8 = 'dropdown';\n  const DATA_KEY$7 = 'bs.dropdown';\n  const EVENT_KEY$7 = `.${DATA_KEY$7}`;\n  const DATA_API_KEY$4 = '.data-api';\n  const ESCAPE_KEY$2 = 'Escape';\n  const SPACE_KEY = 'Space';\n  const TAB_KEY = 'Tab';\n  const ARROW_UP_KEY = 'ArrowUp';\n  const ARROW_DOWN_KEY = 'ArrowDown';\n  const RIGHT_MOUSE_BUTTON = 2; // MouseEvent.button value for the secondary button, usually the right button\n\n  const REGEXP_KEYDOWN = new RegExp(`${ARROW_UP_KEY}|${ARROW_DOWN_KEY}|${ESCAPE_KEY$2}`);\n  const EVENT_HIDE$4 = `hide${EVENT_KEY$7}`;\n  const EVENT_HIDDEN$4 = `hidden${EVENT_KEY$7}`;\n  const EVENT_SHOW$4 = `show${EVENT_KEY$7}`;\n  const EVENT_SHOWN$4 = `shown${EVENT_KEY$7}`;\n  const EVENT_CLICK = `click${EVENT_KEY$7}`;\n  const EVENT_CLICK_DATA_API$3 = `click${EVENT_KEY$7}${DATA_API_KEY$4}`;\n  const EVENT_KEYDOWN_DATA_API = `keydown${EVENT_KEY$7}${DATA_API_KEY$4}`;\n  const EVENT_KEYUP_DATA_API = `keyup${EVENT_KEY$7}${DATA_API_KEY$4}`;\n  const CLASS_NAME_SHOW$7 = 'show';\n  const CLASS_NAME_DROPUP = 'dropup';\n  const CLASS_NAME_DROPEND = 'dropend';\n  const CLASS_NAME_DROPSTART = 'dropstart';\n  const CLASS_NAME_NAVBAR = 'navbar';\n  const SELECTOR_DATA_TOGGLE$3 = '[data-bs-toggle=\"dropdown\"]';\n  const SELECTOR_MENU = '.dropdown-menu';\n  const SELECTOR_NAVBAR_NAV = '.navbar-nav';\n  const SELECTOR_VISIBLE_ITEMS = '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)';\n  const PLACEMENT_TOP = isRTL() ? 'top-end' : 'top-start';\n  const PLACEMENT_TOPEND = isRTL() ? 'top-start' : 'top-end';\n  const PLACEMENT_BOTTOM = isRTL() ? 'bottom-end' : 'bottom-start';\n  const PLACEMENT_BOTTOMEND = isRTL() ? 'bottom-start' : 'bottom-end';\n  const PLACEMENT_RIGHT = isRTL() ? 'left-start' : 'right-start';\n  const PLACEMENT_LEFT = isRTL() ? 'right-start' : 'left-start';\n  const Default$7 = {\n    offset: [0, 2],\n    boundary: 'clippingParents',\n    reference: 'toggle',\n    display: 'dynamic',\n    popperConfig: null,\n    autoClose: true\n  };\n  const DefaultType$7 = {\n    offset: '(array|string|function)',\n    boundary: '(string|element)',\n    reference: '(string|element|object)',\n    display: 'string',\n    popperConfig: '(null|object|function)',\n    autoClose: '(boolean|string)'\n  };\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Dropdown extends BaseComponent {\n    constructor(element, config) {\n      super(element);\n      this._popper = null;\n      this._config = this._getConfig(config);\n      this._menu = this._getMenuElement();\n      this._inNavbar = this._detectNavbar();\n\n      this._addEventListeners();\n    } // Getters\n\n\n    static get Default() {\n      return Default$7;\n    }\n\n    static get DefaultType() {\n      return DefaultType$7;\n    }\n\n    static get NAME() {\n      return NAME$8;\n    } // Public\n\n\n    toggle() {\n      if (isDisabled(this._element)) {\n        return;\n      }\n\n      const isActive = this._element.classList.contains(CLASS_NAME_SHOW$7);\n\n      if (isActive) {\n        this.hide();\n        return;\n      }\n\n      this.show();\n    }\n\n    show() {\n      if (isDisabled(this._element) || this._menu.classList.contains(CLASS_NAME_SHOW$7)) {\n        return;\n      }\n\n      const parent = Dropdown.getParentFromElement(this._element);\n      const relatedTarget = {\n        relatedTarget: this._element\n      };\n      const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$4, relatedTarget);\n\n      if (showEvent.defaultPrevented) {\n        return;\n      } // Totally disable Popper for Dropdowns in Navbar\n\n\n      if (this._inNavbar) {\n        Manipulator.setDataAttribute(this._menu, 'popper', 'none');\n      } else {\n        if (typeof Popper === 'undefined') {\n          throw new TypeError('Bootstrap\\'s dropdowns require Popper (https://popper.js.org)');\n        }\n\n        let referenceElement = this._element;\n\n        if (this._config.reference === 'parent') {\n          referenceElement = parent;\n        } else if (isElement$1(this._config.reference)) {\n          referenceElement = getElement(this._config.reference);\n        } else if (typeof this._config.reference === 'object') {\n          referenceElement = this._config.reference;\n        }\n\n        const popperConfig = this._getPopperConfig();\n\n        const isDisplayStatic = popperConfig.modifiers.find(modifier => modifier.name === 'applyStyles' && modifier.enabled === false);\n        this._popper = createPopper(referenceElement, this._menu, popperConfig);\n\n        if (isDisplayStatic) {\n          Manipulator.setDataAttribute(this._menu, 'popper', 'static');\n        }\n      } // If this is a touch-enabled device we add extra\n      // empty mouseover listeners to the body's immediate children;\n      // only needed because of broken event delegation on iOS\n      // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n\n\n      if ('ontouchstart' in document.documentElement && !parent.closest(SELECTOR_NAVBAR_NAV)) {\n        [].concat(...document.body.children).forEach(elem => EventHandler.on(elem, 'mouseover', noop));\n      }\n\n      this._element.focus();\n\n      this._element.setAttribute('aria-expanded', true);\n\n      this._menu.classList.toggle(CLASS_NAME_SHOW$7);\n\n      this._element.classList.toggle(CLASS_NAME_SHOW$7);\n\n      EventHandler.trigger(this._element, EVENT_SHOWN$4, relatedTarget);\n    }\n\n    hide() {\n      if (isDisabled(this._element) || !this._menu.classList.contains(CLASS_NAME_SHOW$7)) {\n        return;\n      }\n\n      const relatedTarget = {\n        relatedTarget: this._element\n      };\n\n      this._completeHide(relatedTarget);\n    }\n\n    dispose() {\n      if (this._popper) {\n        this._popper.destroy();\n      }\n\n      super.dispose();\n    }\n\n    update() {\n      this._inNavbar = this._detectNavbar();\n\n      if (this._popper) {\n        this._popper.update();\n      }\n    } // Private\n\n\n    _addEventListeners() {\n      EventHandler.on(this._element, EVENT_CLICK, event => {\n        event.preventDefault();\n        this.toggle();\n      });\n    }\n\n    _completeHide(relatedTarget) {\n      const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$4, relatedTarget);\n\n      if (hideEvent.defaultPrevented) {\n        return;\n      } // If this is a touch-enabled device we remove the extra\n      // empty mouseover listeners we added for iOS support\n\n\n      if ('ontouchstart' in document.documentElement) {\n        [].concat(...document.body.children).forEach(elem => EventHandler.off(elem, 'mouseover', noop));\n      }\n\n      if (this._popper) {\n        this._popper.destroy();\n      }\n\n      this._menu.classList.remove(CLASS_NAME_SHOW$7);\n\n      this._element.classList.remove(CLASS_NAME_SHOW$7);\n\n      this._element.setAttribute('aria-expanded', 'false');\n\n      Manipulator.removeDataAttribute(this._menu, 'popper');\n      EventHandler.trigger(this._element, EVENT_HIDDEN$4, relatedTarget);\n    }\n\n    _getConfig(config) {\n      config = { ...this.constructor.Default,\n        ...Manipulator.getDataAttributes(this._element),\n        ...config\n      };\n      typeCheckConfig(NAME$8, config, this.constructor.DefaultType);\n\n      if (typeof config.reference === 'object' && !isElement$1(config.reference) && typeof config.reference.getBoundingClientRect !== 'function') {\n        // Popper virtual elements require a getBoundingClientRect method\n        throw new TypeError(`${NAME$8.toUpperCase()}: Option \"reference\" provided type \"object\" without a required \"getBoundingClientRect\" method.`);\n      }\n\n      return config;\n    }\n\n    _getMenuElement() {\n      return SelectorEngine.next(this._element, SELECTOR_MENU)[0];\n    }\n\n    _getPlacement() {\n      const parentDropdown = this._element.parentNode;\n\n      if (parentDropdown.classList.contains(CLASS_NAME_DROPEND)) {\n        return PLACEMENT_RIGHT;\n      }\n\n      if (parentDropdown.classList.contains(CLASS_NAME_DROPSTART)) {\n        return PLACEMENT_LEFT;\n      } // We need to trim the value because custom properties can also include spaces\n\n\n      const isEnd = getComputedStyle(this._menu).getPropertyValue('--bs-position').trim() === 'end';\n\n      if (parentDropdown.classList.contains(CLASS_NAME_DROPUP)) {\n        return isEnd ? PLACEMENT_TOPEND : PLACEMENT_TOP;\n      }\n\n      return isEnd ? PLACEMENT_BOTTOMEND : PLACEMENT_BOTTOM;\n    }\n\n    _detectNavbar() {\n      return this._element.closest(`.${CLASS_NAME_NAVBAR}`) !== null;\n    }\n\n    _getOffset() {\n      const {\n        offset\n      } = this._config;\n\n      if (typeof offset === 'string') {\n        return offset.split(',').map(val => Number.parseInt(val, 10));\n      }\n\n      if (typeof offset === 'function') {\n        return popperData => offset(popperData, this._element);\n      }\n\n      return offset;\n    }\n\n    _getPopperConfig() {\n      const defaultBsPopperConfig = {\n        placement: this._getPlacement(),\n        modifiers: [{\n          name: 'preventOverflow',\n          options: {\n            boundary: this._config.boundary\n          }\n        }, {\n          name: 'offset',\n          options: {\n            offset: this._getOffset()\n          }\n        }]\n      }; // Disable Popper if we have a static display\n\n      if (this._config.display === 'static') {\n        defaultBsPopperConfig.modifiers = [{\n          name: 'applyStyles',\n          enabled: false\n        }];\n      }\n\n      return { ...defaultBsPopperConfig,\n        ...(typeof this._config.popperConfig === 'function' ? this._config.popperConfig(defaultBsPopperConfig) : this._config.popperConfig)\n      };\n    }\n\n    _selectMenuItem({\n      key,\n      target\n    }) {\n      const items = SelectorEngine.find(SELECTOR_VISIBLE_ITEMS, this._menu).filter(isVisible);\n\n      if (!items.length) {\n        return;\n      } // if target isn't included in items (e.g. when expanding the dropdown)\n      // allow cycling to get the last item in case key equals ARROW_UP_KEY\n\n\n      getNextActiveElement(items, target, key === ARROW_DOWN_KEY, !items.includes(target)).focus();\n    } // Static\n\n\n    static dropdownInterface(element, config) {\n      const data = Dropdown.getOrCreateInstance(element, config);\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config]();\n      }\n    }\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        Dropdown.dropdownInterface(this, config);\n      });\n    }\n\n    static clearMenus(event) {\n      if (event && (event.button === RIGHT_MOUSE_BUTTON || event.type === 'keyup' && event.key !== TAB_KEY)) {\n        return;\n      }\n\n      const toggles = SelectorEngine.find(SELECTOR_DATA_TOGGLE$3);\n\n      for (let i = 0, len = toggles.length; i < len; i++) {\n        const context = Dropdown.getInstance(toggles[i]);\n\n        if (!context || context._config.autoClose === false) {\n          continue;\n        }\n\n        if (!context._element.classList.contains(CLASS_NAME_SHOW$7)) {\n          continue;\n        }\n\n        const relatedTarget = {\n          relatedTarget: context._element\n        };\n\n        if (event) {\n          const composedPath = event.composedPath();\n          const isMenuTarget = composedPath.includes(context._menu);\n\n          if (composedPath.includes(context._element) || context._config.autoClose === 'inside' && !isMenuTarget || context._config.autoClose === 'outside' && isMenuTarget) {\n            continue;\n          } // Tab navigation through the dropdown menu or events from contained inputs shouldn't close the menu\n\n\n          if (context._menu.contains(event.target) && (event.type === 'keyup' && event.key === TAB_KEY || /input|select|option|textarea|form/i.test(event.target.tagName))) {\n            continue;\n          }\n\n          if (event.type === 'click') {\n            relatedTarget.clickEvent = event;\n          }\n        }\n\n        context._completeHide(relatedTarget);\n      }\n    }\n\n    static getParentFromElement(element) {\n      return getElementFromSelector(element) || element.parentNode;\n    }\n\n    static dataApiKeydownHandler(event) {\n      // If not input/textarea:\n      //  - And not a key in REGEXP_KEYDOWN => not a dropdown command\n      // If input/textarea:\n      //  - If space key => not a dropdown command\n      //  - If key is other than escape\n      //    - If key is not up or down => not a dropdown command\n      //    - If trigger inside the menu => not a dropdown command\n      if (/input|textarea/i.test(event.target.tagName) ? event.key === SPACE_KEY || event.key !== ESCAPE_KEY$2 && (event.key !== ARROW_DOWN_KEY && event.key !== ARROW_UP_KEY || event.target.closest(SELECTOR_MENU)) : !REGEXP_KEYDOWN.test(event.key)) {\n        return;\n      }\n\n      const isActive = this.classList.contains(CLASS_NAME_SHOW$7);\n\n      if (!isActive && event.key === ESCAPE_KEY$2) {\n        return;\n      }\n\n      event.preventDefault();\n      event.stopPropagation();\n\n      if (isDisabled(this)) {\n        return;\n      }\n\n      const getToggleButton = () => this.matches(SELECTOR_DATA_TOGGLE$3) ? this : SelectorEngine.prev(this, SELECTOR_DATA_TOGGLE$3)[0];\n\n      if (event.key === ESCAPE_KEY$2) {\n        getToggleButton().focus();\n        Dropdown.clearMenus();\n        return;\n      }\n\n      if (event.key === ARROW_UP_KEY || event.key === ARROW_DOWN_KEY) {\n        if (!isActive) {\n          getToggleButton().click();\n        }\n\n        Dropdown.getInstance(getToggleButton())._selectMenuItem(event);\n\n        return;\n      }\n\n      if (!isActive || event.key === SPACE_KEY) {\n        Dropdown.clearMenus();\n      }\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_DATA_TOGGLE$3, Dropdown.dataApiKeydownHandler);\n  EventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown.dataApiKeydownHandler);\n  EventHandler.on(document, EVENT_CLICK_DATA_API$3, Dropdown.clearMenus);\n  EventHandler.on(document, EVENT_KEYUP_DATA_API, Dropdown.clearMenus);\n  EventHandler.on(document, EVENT_CLICK_DATA_API$3, SELECTOR_DATA_TOGGLE$3, function (event) {\n    event.preventDefault();\n    Dropdown.dropdownInterface(this);\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Dropdown to jQuery only if jQuery is present\n   */\n\n  defineJQueryPlugin(Dropdown);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): util/scrollBar.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  const SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top';\n  const SELECTOR_STICKY_CONTENT = '.sticky-top';\n\n  class ScrollBarHelper {\n    constructor() {\n      this._element = document.body;\n    }\n\n    getWidth() {\n      // https://developer.mozilla.org/en-US/docs/Web/API/Window/innerWidth#usage_notes\n      const documentWidth = document.documentElement.clientWidth;\n      return Math.abs(window.innerWidth - documentWidth);\n    }\n\n    hide() {\n      const width = this.getWidth();\n\n      this._disableOverFlow(); // give padding to element to balance the hidden scrollbar width\n\n\n      this._setElementAttributes(this._element, 'paddingRight', calculatedValue => calculatedValue + width); // trick: We adjust positive paddingRight and negative marginRight to sticky-top elements to keep showing fullwidth\n\n\n      this._setElementAttributes(SELECTOR_FIXED_CONTENT, 'paddingRight', calculatedValue => calculatedValue + width);\n\n      this._setElementAttributes(SELECTOR_STICKY_CONTENT, 'marginRight', calculatedValue => calculatedValue - width);\n    }\n\n    _disableOverFlow() {\n      this._saveInitialAttribute(this._element, 'overflow');\n\n      this._element.style.overflow = 'hidden';\n    }\n\n    _setElementAttributes(selector, styleProp, callback) {\n      const scrollbarWidth = this.getWidth();\n\n      const manipulationCallBack = element => {\n        if (element !== this._element && window.innerWidth > element.clientWidth + scrollbarWidth) {\n          return;\n        }\n\n        this._saveInitialAttribute(element, styleProp);\n\n        const calculatedValue = window.getComputedStyle(element)[styleProp];\n        element.style[styleProp] = `${callback(Number.parseFloat(calculatedValue))}px`;\n      };\n\n      this._applyManipulationCallback(selector, manipulationCallBack);\n    }\n\n    reset() {\n      this._resetElementAttributes(this._element, 'overflow');\n\n      this._resetElementAttributes(this._element, 'paddingRight');\n\n      this._resetElementAttributes(SELECTOR_FIXED_CONTENT, 'paddingRight');\n\n      this._resetElementAttributes(SELECTOR_STICKY_CONTENT, 'marginRight');\n    }\n\n    _saveInitialAttribute(element, styleProp) {\n      const actualValue = element.style[styleProp];\n\n      if (actualValue) {\n        Manipulator.setDataAttribute(element, styleProp, actualValue);\n      }\n    }\n\n    _resetElementAttributes(selector, styleProp) {\n      const manipulationCallBack = element => {\n        const value = Manipulator.getDataAttribute(element, styleProp);\n\n        if (typeof value === 'undefined') {\n          element.style.removeProperty(styleProp);\n        } else {\n          Manipulator.removeDataAttribute(element, styleProp);\n          element.style[styleProp] = value;\n        }\n      };\n\n      this._applyManipulationCallback(selector, manipulationCallBack);\n    }\n\n    _applyManipulationCallback(selector, callBack) {\n      if (isElement$1(selector)) {\n        callBack(selector);\n      } else {\n        SelectorEngine.find(selector, this._element).forEach(callBack);\n      }\n    }\n\n    isOverflowing() {\n      return this.getWidth() > 0;\n    }\n\n  }\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): util/backdrop.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  const Default$6 = {\n    isVisible: true,\n    // if false, we use the backdrop helper without adding any element to the dom\n    isAnimated: false,\n    rootElement: 'body',\n    // give the choice to place backdrop under different elements\n    clickCallback: null\n  };\n  const DefaultType$6 = {\n    isVisible: 'boolean',\n    isAnimated: 'boolean',\n    rootElement: '(element|string)',\n    clickCallback: '(function|null)'\n  };\n  const NAME$7 = 'backdrop';\n  const CLASS_NAME_BACKDROP = 'modal-backdrop';\n  const CLASS_NAME_FADE$5 = 'fade';\n  const CLASS_NAME_SHOW$6 = 'show';\n  const EVENT_MOUSEDOWN = `mousedown.bs.${NAME$7}`;\n\n  class Backdrop {\n    constructor(config) {\n      this._config = this._getConfig(config);\n      this._isAppended = false;\n      this._element = null;\n    }\n\n    show(callback) {\n      if (!this._config.isVisible) {\n        execute(callback);\n        return;\n      }\n\n      this._append();\n\n      if (this._config.isAnimated) {\n        reflow(this._getElement());\n      }\n\n      this._getElement().classList.add(CLASS_NAME_SHOW$6);\n\n      this._emulateAnimation(() => {\n        execute(callback);\n      });\n    }\n\n    hide(callback) {\n      if (!this._config.isVisible) {\n        execute(callback);\n        return;\n      }\n\n      this._getElement().classList.remove(CLASS_NAME_SHOW$6);\n\n      this._emulateAnimation(() => {\n        this.dispose();\n        execute(callback);\n      });\n    } // Private\n\n\n    _getElement() {\n      if (!this._element) {\n        const backdrop = document.createElement('div');\n        backdrop.className = CLASS_NAME_BACKDROP;\n\n        if (this._config.isAnimated) {\n          backdrop.classList.add(CLASS_NAME_FADE$5);\n        }\n\n        this._element = backdrop;\n      }\n\n      return this._element;\n    }\n\n    _getConfig(config) {\n      config = { ...Default$6,\n        ...(typeof config === 'object' ? config : {})\n      }; // use getElement() with the default \"body\" to get a fresh Element on each instantiation\n\n      config.rootElement = getElement(config.rootElement);\n      typeCheckConfig(NAME$7, config, DefaultType$6);\n      return config;\n    }\n\n    _append() {\n      if (this._isAppended) {\n        return;\n      }\n\n      this._config.rootElement.appendChild(this._getElement());\n\n      EventHandler.on(this._getElement(), EVENT_MOUSEDOWN, () => {\n        execute(this._config.clickCallback);\n      });\n      this._isAppended = true;\n    }\n\n    dispose() {\n      if (!this._isAppended) {\n        return;\n      }\n\n      EventHandler.off(this._element, EVENT_MOUSEDOWN);\n\n      this._element.remove();\n\n      this._isAppended = false;\n    }\n\n    _emulateAnimation(callback) {\n      executeAfterTransition(callback, this._getElement(), this._config.isAnimated);\n    }\n\n  }\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): modal.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$6 = 'modal';\n  const DATA_KEY$6 = 'bs.modal';\n  const EVENT_KEY$6 = `.${DATA_KEY$6}`;\n  const DATA_API_KEY$3 = '.data-api';\n  const ESCAPE_KEY$1 = 'Escape';\n  const Default$5 = {\n    backdrop: true,\n    keyboard: true,\n    focus: true\n  };\n  const DefaultType$5 = {\n    backdrop: '(boolean|string)',\n    keyboard: 'boolean',\n    focus: 'boolean'\n  };\n  const EVENT_HIDE$3 = `hide${EVENT_KEY$6}`;\n  const EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY$6}`;\n  const EVENT_HIDDEN$3 = `hidden${EVENT_KEY$6}`;\n  const EVENT_SHOW$3 = `show${EVENT_KEY$6}`;\n  const EVENT_SHOWN$3 = `shown${EVENT_KEY$6}`;\n  const EVENT_FOCUSIN$2 = `focusin${EVENT_KEY$6}`;\n  const EVENT_RESIZE = `resize${EVENT_KEY$6}`;\n  const EVENT_CLICK_DISMISS$2 = `click.dismiss${EVENT_KEY$6}`;\n  const EVENT_KEYDOWN_DISMISS$1 = `keydown.dismiss${EVENT_KEY$6}`;\n  const EVENT_MOUSEUP_DISMISS = `mouseup.dismiss${EVENT_KEY$6}`;\n  const EVENT_MOUSEDOWN_DISMISS = `mousedown.dismiss${EVENT_KEY$6}`;\n  const EVENT_CLICK_DATA_API$2 = `click${EVENT_KEY$6}${DATA_API_KEY$3}`;\n  const CLASS_NAME_OPEN = 'modal-open';\n  const CLASS_NAME_FADE$4 = 'fade';\n  const CLASS_NAME_SHOW$5 = 'show';\n  const CLASS_NAME_STATIC = 'modal-static';\n  const SELECTOR_DIALOG = '.modal-dialog';\n  const SELECTOR_MODAL_BODY = '.modal-body';\n  const SELECTOR_DATA_TOGGLE$2 = '[data-bs-toggle=\"modal\"]';\n  const SELECTOR_DATA_DISMISS$2 = '[data-bs-dismiss=\"modal\"]';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Modal extends BaseComponent {\n    constructor(element, config) {\n      super(element);\n      this._config = this._getConfig(config);\n      this._dialog = SelectorEngine.findOne(SELECTOR_DIALOG, this._element);\n      this._backdrop = this._initializeBackDrop();\n      this._isShown = false;\n      this._ignoreBackdropClick = false;\n      this._isTransitioning = false;\n      this._scrollBar = new ScrollBarHelper();\n    } // Getters\n\n\n    static get Default() {\n      return Default$5;\n    }\n\n    static get NAME() {\n      return NAME$6;\n    } // Public\n\n\n    toggle(relatedTarget) {\n      return this._isShown ? this.hide() : this.show(relatedTarget);\n    }\n\n    show(relatedTarget) {\n      if (this._isShown || this._isTransitioning) {\n        return;\n      }\n\n      const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$3, {\n        relatedTarget\n      });\n\n      if (showEvent.defaultPrevented) {\n        return;\n      }\n\n      this._isShown = true;\n\n      if (this._isAnimated()) {\n        this._isTransitioning = true;\n      }\n\n      this._scrollBar.hide();\n\n      document.body.classList.add(CLASS_NAME_OPEN);\n\n      this._adjustDialog();\n\n      this._setEscapeEvent();\n\n      this._setResizeEvent();\n\n      EventHandler.on(this._element, EVENT_CLICK_DISMISS$2, SELECTOR_DATA_DISMISS$2, event => this.hide(event));\n      EventHandler.on(this._dialog, EVENT_MOUSEDOWN_DISMISS, () => {\n        EventHandler.one(this._element, EVENT_MOUSEUP_DISMISS, event => {\n          if (event.target === this._element) {\n            this._ignoreBackdropClick = true;\n          }\n        });\n      });\n\n      this._showBackdrop(() => this._showElement(relatedTarget));\n    }\n\n    hide(event) {\n      if (event && ['A', 'AREA'].includes(event.target.tagName)) {\n        event.preventDefault();\n      }\n\n      if (!this._isShown || this._isTransitioning) {\n        return;\n      }\n\n      const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$3);\n\n      if (hideEvent.defaultPrevented) {\n        return;\n      }\n\n      this._isShown = false;\n\n      const isAnimated = this._isAnimated();\n\n      if (isAnimated) {\n        this._isTransitioning = true;\n      }\n\n      this._setEscapeEvent();\n\n      this._setResizeEvent();\n\n      EventHandler.off(document, EVENT_FOCUSIN$2);\n\n      this._element.classList.remove(CLASS_NAME_SHOW$5);\n\n      EventHandler.off(this._element, EVENT_CLICK_DISMISS$2);\n      EventHandler.off(this._dialog, EVENT_MOUSEDOWN_DISMISS);\n\n      this._queueCallback(() => this._hideModal(), this._element, isAnimated);\n    }\n\n    dispose() {\n      [window, this._dialog].forEach(htmlElement => EventHandler.off(htmlElement, EVENT_KEY$6));\n\n      this._backdrop.dispose();\n\n      super.dispose();\n      /**\n       * `document` has 2 events `EVENT_FOCUSIN` and `EVENT_CLICK_DATA_API`\n       * Do not move `document` in `htmlElements` array\n       * It will remove `EVENT_CLICK_DATA_API` event that should remain\n       */\n\n      EventHandler.off(document, EVENT_FOCUSIN$2);\n    }\n\n    handleUpdate() {\n      this._adjustDialog();\n    } // Private\n\n\n    _initializeBackDrop() {\n      return new Backdrop({\n        isVisible: Boolean(this._config.backdrop),\n        // 'static' option will be translated to true, and booleans will keep their value\n        isAnimated: this._isAnimated()\n      });\n    }\n\n    _getConfig(config) {\n      config = { ...Default$5,\n        ...Manipulator.getDataAttributes(this._element),\n        ...(typeof config === 'object' ? config : {})\n      };\n      typeCheckConfig(NAME$6, config, DefaultType$5);\n      return config;\n    }\n\n    _showElement(relatedTarget) {\n      const isAnimated = this._isAnimated();\n\n      const modalBody = SelectorEngine.findOne(SELECTOR_MODAL_BODY, this._dialog);\n\n      if (!this._element.parentNode || this._element.parentNode.nodeType !== Node.ELEMENT_NODE) {\n        // Don't move modal's DOM position\n        document.body.appendChild(this._element);\n      }\n\n      this._element.style.display = 'block';\n\n      this._element.removeAttribute('aria-hidden');\n\n      this._element.setAttribute('aria-modal', true);\n\n      this._element.setAttribute('role', 'dialog');\n\n      this._element.scrollTop = 0;\n\n      if (modalBody) {\n        modalBody.scrollTop = 0;\n      }\n\n      if (isAnimated) {\n        reflow(this._element);\n      }\n\n      this._element.classList.add(CLASS_NAME_SHOW$5);\n\n      if (this._config.focus) {\n        this._enforceFocus();\n      }\n\n      const transitionComplete = () => {\n        if (this._config.focus) {\n          this._element.focus();\n        }\n\n        this._isTransitioning = false;\n        EventHandler.trigger(this._element, EVENT_SHOWN$3, {\n          relatedTarget\n        });\n      };\n\n      this._queueCallback(transitionComplete, this._dialog, isAnimated);\n    }\n\n    _enforceFocus() {\n      EventHandler.off(document, EVENT_FOCUSIN$2); // guard against infinite focus loop\n\n      EventHandler.on(document, EVENT_FOCUSIN$2, event => {\n        if (document !== event.target && this._element !== event.target && !this._element.contains(event.target)) {\n          this._element.focus();\n        }\n      });\n    }\n\n    _setEscapeEvent() {\n      if (this._isShown) {\n        EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS$1, event => {\n          if (this._config.keyboard && event.key === ESCAPE_KEY$1) {\n            event.preventDefault();\n            this.hide();\n          } else if (!this._config.keyboard && event.key === ESCAPE_KEY$1) {\n            this._triggerBackdropTransition();\n          }\n        });\n      } else {\n        EventHandler.off(this._element, EVENT_KEYDOWN_DISMISS$1);\n      }\n    }\n\n    _setResizeEvent() {\n      if (this._isShown) {\n        EventHandler.on(window, EVENT_RESIZE, () => this._adjustDialog());\n      } else {\n        EventHandler.off(window, EVENT_RESIZE);\n      }\n    }\n\n    _hideModal() {\n      this._element.style.display = 'none';\n\n      this._element.setAttribute('aria-hidden', true);\n\n      this._element.removeAttribute('aria-modal');\n\n      this._element.removeAttribute('role');\n\n      this._isTransitioning = false;\n\n      this._backdrop.hide(() => {\n        document.body.classList.remove(CLASS_NAME_OPEN);\n\n        this._resetAdjustments();\n\n        this._scrollBar.reset();\n\n        EventHandler.trigger(this._element, EVENT_HIDDEN$3);\n      });\n    }\n\n    _showBackdrop(callback) {\n      EventHandler.on(this._element, EVENT_CLICK_DISMISS$2, event => {\n        if (this._ignoreBackdropClick) {\n          this._ignoreBackdropClick = false;\n          return;\n        }\n\n        if (event.target !== event.currentTarget) {\n          return;\n        }\n\n        if (this._config.backdrop === true) {\n          this.hide();\n        } else if (this._config.backdrop === 'static') {\n          this._triggerBackdropTransition();\n        }\n      });\n\n      this._backdrop.show(callback);\n    }\n\n    _isAnimated() {\n      return this._element.classList.contains(CLASS_NAME_FADE$4);\n    }\n\n    _triggerBackdropTransition() {\n      const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED);\n\n      if (hideEvent.defaultPrevented) {\n        return;\n      }\n\n      const {\n        classList,\n        scrollHeight,\n        style\n      } = this._element;\n      const isModalOverflowing = scrollHeight > document.documentElement.clientHeight; // return if the following background transition hasn't yet completed\n\n      if (!isModalOverflowing && style.overflowY === 'hidden' || classList.contains(CLASS_NAME_STATIC)) {\n        return;\n      }\n\n      if (!isModalOverflowing) {\n        style.overflowY = 'hidden';\n      }\n\n      classList.add(CLASS_NAME_STATIC);\n\n      this._queueCallback(() => {\n        classList.remove(CLASS_NAME_STATIC);\n\n        if (!isModalOverflowing) {\n          this._queueCallback(() => {\n            style.overflowY = '';\n          }, this._dialog);\n        }\n      }, this._dialog);\n\n      this._element.focus();\n    } // ----------------------------------------------------------------------\n    // the following methods are used to handle overflowing modals\n    // ----------------------------------------------------------------------\n\n\n    _adjustDialog() {\n      const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;\n\n      const scrollbarWidth = this._scrollBar.getWidth();\n\n      const isBodyOverflowing = scrollbarWidth > 0;\n\n      if (!isBodyOverflowing && isModalOverflowing && !isRTL() || isBodyOverflowing && !isModalOverflowing && isRTL()) {\n        this._element.style.paddingLeft = `${scrollbarWidth}px`;\n      }\n\n      if (isBodyOverflowing && !isModalOverflowing && !isRTL() || !isBodyOverflowing && isModalOverflowing && isRTL()) {\n        this._element.style.paddingRight = `${scrollbarWidth}px`;\n      }\n    }\n\n    _resetAdjustments() {\n      this._element.style.paddingLeft = '';\n      this._element.style.paddingRight = '';\n    } // Static\n\n\n    static jQueryInterface(config, relatedTarget) {\n      return this.each(function () {\n        const data = Modal.getOrCreateInstance(this, config);\n\n        if (typeof config !== 'string') {\n          return;\n        }\n\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config](relatedTarget);\n      });\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(document, EVENT_CLICK_DATA_API$2, SELECTOR_DATA_TOGGLE$2, function (event) {\n    const target = getElementFromSelector(this);\n\n    if (['A', 'AREA'].includes(this.tagName)) {\n      event.preventDefault();\n    }\n\n    EventHandler.one(target, EVENT_SHOW$3, showEvent => {\n      if (showEvent.defaultPrevented) {\n        // only register focus restorer if modal will actually get shown\n        return;\n      }\n\n      EventHandler.one(target, EVENT_HIDDEN$3, () => {\n        if (isVisible(this)) {\n          this.focus();\n        }\n      });\n    });\n    const data = Modal.getOrCreateInstance(target);\n    data.toggle(this);\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Modal to jQuery only if jQuery is present\n   */\n\n  defineJQueryPlugin(Modal);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): offcanvas.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$5 = 'offcanvas';\n  const DATA_KEY$5 = 'bs.offcanvas';\n  const EVENT_KEY$5 = `.${DATA_KEY$5}`;\n  const DATA_API_KEY$2 = '.data-api';\n  const EVENT_LOAD_DATA_API$1 = `load${EVENT_KEY$5}${DATA_API_KEY$2}`;\n  const ESCAPE_KEY = 'Escape';\n  const Default$4 = {\n    backdrop: true,\n    keyboard: true,\n    scroll: false\n  };\n  const DefaultType$4 = {\n    backdrop: 'boolean',\n    keyboard: 'boolean',\n    scroll: 'boolean'\n  };\n  const CLASS_NAME_SHOW$4 = 'show';\n  const OPEN_SELECTOR = '.offcanvas.show';\n  const EVENT_SHOW$2 = `show${EVENT_KEY$5}`;\n  const EVENT_SHOWN$2 = `shown${EVENT_KEY$5}`;\n  const EVENT_HIDE$2 = `hide${EVENT_KEY$5}`;\n  const EVENT_HIDDEN$2 = `hidden${EVENT_KEY$5}`;\n  const EVENT_FOCUSIN$1 = `focusin${EVENT_KEY$5}`;\n  const EVENT_CLICK_DATA_API$1 = `click${EVENT_KEY$5}${DATA_API_KEY$2}`;\n  const EVENT_CLICK_DISMISS$1 = `click.dismiss${EVENT_KEY$5}`;\n  const EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY$5}`;\n  const SELECTOR_DATA_DISMISS$1 = '[data-bs-dismiss=\"offcanvas\"]';\n  const SELECTOR_DATA_TOGGLE$1 = '[data-bs-toggle=\"offcanvas\"]';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Offcanvas extends BaseComponent {\n    constructor(element, config) {\n      super(element);\n      this._config = this._getConfig(config);\n      this._isShown = false;\n      this._backdrop = this._initializeBackDrop();\n\n      this._addEventListeners();\n    } // Getters\n\n\n    static get NAME() {\n      return NAME$5;\n    }\n\n    static get Default() {\n      return Default$4;\n    } // Public\n\n\n    toggle(relatedTarget) {\n      return this._isShown ? this.hide() : this.show(relatedTarget);\n    }\n\n    show(relatedTarget) {\n      if (this._isShown) {\n        return;\n      }\n\n      const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$2, {\n        relatedTarget\n      });\n\n      if (showEvent.defaultPrevented) {\n        return;\n      }\n\n      this._isShown = true;\n      this._element.style.visibility = 'visible';\n\n      this._backdrop.show();\n\n      if (!this._config.scroll) {\n        new ScrollBarHelper().hide();\n\n        this._enforceFocusOnElement(this._element);\n      }\n\n      this._element.removeAttribute('aria-hidden');\n\n      this._element.setAttribute('aria-modal', true);\n\n      this._element.setAttribute('role', 'dialog');\n\n      this._element.classList.add(CLASS_NAME_SHOW$4);\n\n      const completeCallBack = () => {\n        EventHandler.trigger(this._element, EVENT_SHOWN$2, {\n          relatedTarget\n        });\n      };\n\n      this._queueCallback(completeCallBack, this._element, true);\n    }\n\n    hide() {\n      if (!this._isShown) {\n        return;\n      }\n\n      const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$2);\n\n      if (hideEvent.defaultPrevented) {\n        return;\n      }\n\n      EventHandler.off(document, EVENT_FOCUSIN$1);\n\n      this._element.blur();\n\n      this._isShown = false;\n\n      this._element.classList.remove(CLASS_NAME_SHOW$4);\n\n      this._backdrop.hide();\n\n      const completeCallback = () => {\n        this._element.setAttribute('aria-hidden', true);\n\n        this._element.removeAttribute('aria-modal');\n\n        this._element.removeAttribute('role');\n\n        this._element.style.visibility = 'hidden';\n\n        if (!this._config.scroll) {\n          new ScrollBarHelper().reset();\n        }\n\n        EventHandler.trigger(this._element, EVENT_HIDDEN$2);\n      };\n\n      this._queueCallback(completeCallback, this._element, true);\n    }\n\n    dispose() {\n      this._backdrop.dispose();\n\n      super.dispose();\n      EventHandler.off(document, EVENT_FOCUSIN$1);\n    } // Private\n\n\n    _getConfig(config) {\n      config = { ...Default$4,\n        ...Manipulator.getDataAttributes(this._element),\n        ...(typeof config === 'object' ? config : {})\n      };\n      typeCheckConfig(NAME$5, config, DefaultType$4);\n      return config;\n    }\n\n    _initializeBackDrop() {\n      return new Backdrop({\n        isVisible: this._config.backdrop,\n        isAnimated: true,\n        rootElement: this._element.parentNode,\n        clickCallback: () => this.hide()\n      });\n    }\n\n    _enforceFocusOnElement(element) {\n      EventHandler.off(document, EVENT_FOCUSIN$1); // guard against infinite focus loop\n\n      EventHandler.on(document, EVENT_FOCUSIN$1, event => {\n        if (document !== event.target && element !== event.target && !element.contains(event.target)) {\n          element.focus();\n        }\n      });\n      element.focus();\n    }\n\n    _addEventListeners() {\n      EventHandler.on(this._element, EVENT_CLICK_DISMISS$1, SELECTOR_DATA_DISMISS$1, () => this.hide());\n      EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS, event => {\n        if (this._config.keyboard && event.key === ESCAPE_KEY) {\n          this.hide();\n        }\n      });\n    } // Static\n\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = Offcanvas.getOrCreateInstance(this, config);\n\n        if (typeof config !== 'string') {\n          return;\n        }\n\n        if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config](this);\n      });\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(document, EVENT_CLICK_DATA_API$1, SELECTOR_DATA_TOGGLE$1, function (event) {\n    const target = getElementFromSelector(this);\n\n    if (['A', 'AREA'].includes(this.tagName)) {\n      event.preventDefault();\n    }\n\n    if (isDisabled(this)) {\n      return;\n    }\n\n    EventHandler.one(target, EVENT_HIDDEN$2, () => {\n      // focus on trigger when it is closed\n      if (isVisible(this)) {\n        this.focus();\n      }\n    }); // avoid conflict when clicking a toggler of an offcanvas, while another is open\n\n    const allReadyOpen = SelectorEngine.findOne(OPEN_SELECTOR);\n\n    if (allReadyOpen && allReadyOpen !== target) {\n      Offcanvas.getInstance(allReadyOpen).hide();\n    }\n\n    const data = Offcanvas.getOrCreateInstance(target);\n    data.toggle(this);\n  });\n  EventHandler.on(window, EVENT_LOAD_DATA_API$1, () => SelectorEngine.find(OPEN_SELECTOR).forEach(el => Offcanvas.getOrCreateInstance(el).show()));\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   */\n\n  defineJQueryPlugin(Offcanvas);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): util/sanitizer.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  const uriAttrs = new Set(['background', 'cite', 'href', 'itemtype', 'longdesc', 'poster', 'src', 'xlink:href']);\n  const ARIA_ATTRIBUTE_PATTERN = /^aria-[\\w-]*$/i;\n  /**\n   * A pattern that recognizes a commonly useful subset of URLs that are safe.\n   *\n   * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts\n   */\n\n  const SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file):|[^#&/:?]*(?:[#/?]|$))/i;\n  /**\n   * A pattern that matches safe data URLs. Only matches image, video and audio types.\n   *\n   * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts\n   */\n\n  const DATA_URL_PATTERN = /^data:(?:image\\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\\/(?:mpeg|mp4|ogg|webm)|audio\\/(?:mp3|oga|ogg|opus));base64,[\\d+/a-z]+=*$/i;\n\n  const allowedAttribute = (attr, allowedAttributeList) => {\n    const attrName = attr.nodeName.toLowerCase();\n\n    if (allowedAttributeList.includes(attrName)) {\n      if (uriAttrs.has(attrName)) {\n        return Boolean(SAFE_URL_PATTERN.test(attr.nodeValue) || DATA_URL_PATTERN.test(attr.nodeValue));\n      }\n\n      return true;\n    }\n\n    const regExp = allowedAttributeList.filter(attrRegex => attrRegex instanceof RegExp); // Check if a regular expression validates the attribute.\n\n    for (let i = 0, len = regExp.length; i < len; i++) {\n      if (regExp[i].test(attrName)) {\n        return true;\n      }\n    }\n\n    return false;\n  };\n\n  const DefaultAllowlist = {\n    // Global attributes allowed on any supplied element below.\n    '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],\n    a: ['target', 'href', 'title', 'rel'],\n    area: [],\n    b: [],\n    br: [],\n    col: [],\n    code: [],\n    div: [],\n    em: [],\n    hr: [],\n    h1: [],\n    h2: [],\n    h3: [],\n    h4: [],\n    h5: [],\n    h6: [],\n    i: [],\n    img: ['src', 'srcset', 'alt', 'title', 'width', 'height'],\n    li: [],\n    ol: [],\n    p: [],\n    pre: [],\n    s: [],\n    small: [],\n    span: [],\n    sub: [],\n    sup: [],\n    strong: [],\n    u: [],\n    ul: []\n  };\n  function sanitizeHtml(unsafeHtml, allowList, sanitizeFn) {\n    if (!unsafeHtml.length) {\n      return unsafeHtml;\n    }\n\n    if (sanitizeFn && typeof sanitizeFn === 'function') {\n      return sanitizeFn(unsafeHtml);\n    }\n\n    const domParser = new window.DOMParser();\n    const createdDocument = domParser.parseFromString(unsafeHtml, 'text/html');\n    const allowlistKeys = Object.keys(allowList);\n    const elements = [].concat(...createdDocument.body.querySelectorAll('*'));\n\n    for (let i = 0, len = elements.length; i < len; i++) {\n      const el = elements[i];\n      const elName = el.nodeName.toLowerCase();\n\n      if (!allowlistKeys.includes(elName)) {\n        el.remove();\n        continue;\n      }\n\n      const attributeList = [].concat(...el.attributes);\n      const allowedAttributes = [].concat(allowList['*'] || [], allowList[elName] || []);\n      attributeList.forEach(attr => {\n        if (!allowedAttribute(attr, allowedAttributes)) {\n          el.removeAttribute(attr.nodeName);\n        }\n      });\n    }\n\n    return createdDocument.body.innerHTML;\n  }\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): tooltip.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$4 = 'tooltip';\n  const DATA_KEY$4 = 'bs.tooltip';\n  const EVENT_KEY$4 = `.${DATA_KEY$4}`;\n  const CLASS_PREFIX$1 = 'bs-tooltip';\n  const BSCLS_PREFIX_REGEX$1 = new RegExp(`(^|\\\\s)${CLASS_PREFIX$1}\\\\S+`, 'g');\n  const DISALLOWED_ATTRIBUTES = new Set(['sanitize', 'allowList', 'sanitizeFn']);\n  const DefaultType$3 = {\n    animation: 'boolean',\n    template: 'string',\n    title: '(string|element|function)',\n    trigger: 'string',\n    delay: '(number|object)',\n    html: 'boolean',\n    selector: '(string|boolean)',\n    placement: '(string|function)',\n    offset: '(array|string|function)',\n    container: '(string|element|boolean)',\n    fallbackPlacements: 'array',\n    boundary: '(string|element)',\n    customClass: '(string|function)',\n    sanitize: 'boolean',\n    sanitizeFn: '(null|function)',\n    allowList: 'object',\n    popperConfig: '(null|object|function)'\n  };\n  const AttachmentMap = {\n    AUTO: 'auto',\n    TOP: 'top',\n    RIGHT: isRTL() ? 'left' : 'right',\n    BOTTOM: 'bottom',\n    LEFT: isRTL() ? 'right' : 'left'\n  };\n  const Default$3 = {\n    animation: true,\n    template: '<div class=\"tooltip\" role=\"tooltip\">' + '<div class=\"tooltip-arrow\"></div>' + '<div class=\"tooltip-inner\"></div>' + '</div>',\n    trigger: 'hover focus',\n    title: '',\n    delay: 0,\n    html: false,\n    selector: false,\n    placement: 'top',\n    offset: [0, 0],\n    container: false,\n    fallbackPlacements: ['top', 'right', 'bottom', 'left'],\n    boundary: 'clippingParents',\n    customClass: '',\n    sanitize: true,\n    sanitizeFn: null,\n    allowList: DefaultAllowlist,\n    popperConfig: null\n  };\n  const Event$2 = {\n    HIDE: `hide${EVENT_KEY$4}`,\n    HIDDEN: `hidden${EVENT_KEY$4}`,\n    SHOW: `show${EVENT_KEY$4}`,\n    SHOWN: `shown${EVENT_KEY$4}`,\n    INSERTED: `inserted${EVENT_KEY$4}`,\n    CLICK: `click${EVENT_KEY$4}`,\n    FOCUSIN: `focusin${EVENT_KEY$4}`,\n    FOCUSOUT: `focusout${EVENT_KEY$4}`,\n    MOUSEENTER: `mouseenter${EVENT_KEY$4}`,\n    MOUSELEAVE: `mouseleave${EVENT_KEY$4}`\n  };\n  const CLASS_NAME_FADE$3 = 'fade';\n  const CLASS_NAME_MODAL = 'modal';\n  const CLASS_NAME_SHOW$3 = 'show';\n  const HOVER_STATE_SHOW = 'show';\n  const HOVER_STATE_OUT = 'out';\n  const SELECTOR_TOOLTIP_INNER = '.tooltip-inner';\n  const TRIGGER_HOVER = 'hover';\n  const TRIGGER_FOCUS = 'focus';\n  const TRIGGER_CLICK = 'click';\n  const TRIGGER_MANUAL = 'manual';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Tooltip extends BaseComponent {\n    constructor(element, config) {\n      if (typeof Popper === 'undefined') {\n        throw new TypeError('Bootstrap\\'s tooltips require Popper (https://popper.js.org)');\n      }\n\n      super(element); // private\n\n      this._isEnabled = true;\n      this._timeout = 0;\n      this._hoverState = '';\n      this._activeTrigger = {};\n      this._popper = null; // Protected\n\n      this._config = this._getConfig(config);\n      this.tip = null;\n\n      this._setListeners();\n    } // Getters\n\n\n    static get Default() {\n      return Default$3;\n    }\n\n    static get NAME() {\n      return NAME$4;\n    }\n\n    static get Event() {\n      return Event$2;\n    }\n\n    static get DefaultType() {\n      return DefaultType$3;\n    } // Public\n\n\n    enable() {\n      this._isEnabled = true;\n    }\n\n    disable() {\n      this._isEnabled = false;\n    }\n\n    toggleEnabled() {\n      this._isEnabled = !this._isEnabled;\n    }\n\n    toggle(event) {\n      if (!this._isEnabled) {\n        return;\n      }\n\n      if (event) {\n        const context = this._initializeOnDelegatedTarget(event);\n\n        context._activeTrigger.click = !context._activeTrigger.click;\n\n        if (context._isWithActiveTrigger()) {\n          context._enter(null, context);\n        } else {\n          context._leave(null, context);\n        }\n      } else {\n        if (this.getTipElement().classList.contains(CLASS_NAME_SHOW$3)) {\n          this._leave(null, this);\n\n          return;\n        }\n\n        this._enter(null, this);\n      }\n    }\n\n    dispose() {\n      clearTimeout(this._timeout);\n      EventHandler.off(this._element.closest(`.${CLASS_NAME_MODAL}`), 'hide.bs.modal', this._hideModalHandler);\n\n      if (this.tip) {\n        this.tip.remove();\n      }\n\n      if (this._popper) {\n        this._popper.destroy();\n      }\n\n      super.dispose();\n    }\n\n    show() {\n      if (this._element.style.display === 'none') {\n        throw new Error('Please use show on visible elements');\n      }\n\n      if (!(this.isWithContent() && this._isEnabled)) {\n        return;\n      }\n\n      const showEvent = EventHandler.trigger(this._element, this.constructor.Event.SHOW);\n      const shadowRoot = findShadowRoot(this._element);\n      const isInTheDom = shadowRoot === null ? this._element.ownerDocument.documentElement.contains(this._element) : shadowRoot.contains(this._element);\n\n      if (showEvent.defaultPrevented || !isInTheDom) {\n        return;\n      }\n\n      const tip = this.getTipElement();\n      const tipId = getUID(this.constructor.NAME);\n      tip.setAttribute('id', tipId);\n\n      this._element.setAttribute('aria-describedby', tipId);\n\n      this.setContent();\n\n      if (this._config.animation) {\n        tip.classList.add(CLASS_NAME_FADE$3);\n      }\n\n      const placement = typeof this._config.placement === 'function' ? this._config.placement.call(this, tip, this._element) : this._config.placement;\n\n      const attachment = this._getAttachment(placement);\n\n      this._addAttachmentClass(attachment);\n\n      const {\n        container\n      } = this._config;\n      Data.set(tip, this.constructor.DATA_KEY, this);\n\n      if (!this._element.ownerDocument.documentElement.contains(this.tip)) {\n        container.appendChild(tip);\n        EventHandler.trigger(this._element, this.constructor.Event.INSERTED);\n      }\n\n      if (this._popper) {\n        this._popper.update();\n      } else {\n        this._popper = createPopper(this._element, tip, this._getPopperConfig(attachment));\n      }\n\n      tip.classList.add(CLASS_NAME_SHOW$3);\n      const customClass = typeof this._config.customClass === 'function' ? this._config.customClass() : this._config.customClass;\n\n      if (customClass) {\n        tip.classList.add(...customClass.split(' '));\n      } // If this is a touch-enabled device we add extra\n      // empty mouseover listeners to the body's immediate children;\n      // only needed because of broken event delegation on iOS\n      // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n\n\n      if ('ontouchstart' in document.documentElement) {\n        [].concat(...document.body.children).forEach(element => {\n          EventHandler.on(element, 'mouseover', noop);\n        });\n      }\n\n      const complete = () => {\n        const prevHoverState = this._hoverState;\n        this._hoverState = null;\n        EventHandler.trigger(this._element, this.constructor.Event.SHOWN);\n\n        if (prevHoverState === HOVER_STATE_OUT) {\n          this._leave(null, this);\n        }\n      };\n\n      const isAnimated = this.tip.classList.contains(CLASS_NAME_FADE$3);\n\n      this._queueCallback(complete, this.tip, isAnimated);\n    }\n\n    hide() {\n      if (!this._popper) {\n        return;\n      }\n\n      const tip = this.getTipElement();\n\n      const complete = () => {\n        if (this._isWithActiveTrigger()) {\n          return;\n        }\n\n        if (this._hoverState !== HOVER_STATE_SHOW) {\n          tip.remove();\n        }\n\n        this._cleanTipClass();\n\n        this._element.removeAttribute('aria-describedby');\n\n        EventHandler.trigger(this._element, this.constructor.Event.HIDDEN);\n\n        if (this._popper) {\n          this._popper.destroy();\n\n          this._popper = null;\n        }\n      };\n\n      const hideEvent = EventHandler.trigger(this._element, this.constructor.Event.HIDE);\n\n      if (hideEvent.defaultPrevented) {\n        return;\n      }\n\n      tip.classList.remove(CLASS_NAME_SHOW$3); // If this is a touch-enabled device we remove the extra\n      // empty mouseover listeners we added for iOS support\n\n      if ('ontouchstart' in document.documentElement) {\n        [].concat(...document.body.children).forEach(element => EventHandler.off(element, 'mouseover', noop));\n      }\n\n      this._activeTrigger[TRIGGER_CLICK] = false;\n      this._activeTrigger[TRIGGER_FOCUS] = false;\n      this._activeTrigger[TRIGGER_HOVER] = false;\n      const isAnimated = this.tip.classList.contains(CLASS_NAME_FADE$3);\n\n      this._queueCallback(complete, this.tip, isAnimated);\n\n      this._hoverState = '';\n    }\n\n    update() {\n      if (this._popper !== null) {\n        this._popper.update();\n      }\n    } // Protected\n\n\n    isWithContent() {\n      return Boolean(this.getTitle());\n    }\n\n    getTipElement() {\n      if (this.tip) {\n        return this.tip;\n      }\n\n      const element = document.createElement('div');\n      element.innerHTML = this._config.template;\n      this.tip = element.children[0];\n      return this.tip;\n    }\n\n    setContent() {\n      const tip = this.getTipElement();\n      this.setElementContent(SelectorEngine.findOne(SELECTOR_TOOLTIP_INNER, tip), this.getTitle());\n      tip.classList.remove(CLASS_NAME_FADE$3, CLASS_NAME_SHOW$3);\n    }\n\n    setElementContent(element, content) {\n      if (element === null) {\n        return;\n      }\n\n      if (isElement$1(content)) {\n        content = getElement(content); // content is a DOM node or a jQuery\n\n        if (this._config.html) {\n          if (content.parentNode !== element) {\n            element.innerHTML = '';\n            element.appendChild(content);\n          }\n        } else {\n          element.textContent = content.textContent;\n        }\n\n        return;\n      }\n\n      if (this._config.html) {\n        if (this._config.sanitize) {\n          content = sanitizeHtml(content, this._config.allowList, this._config.sanitizeFn);\n        }\n\n        element.innerHTML = content;\n      } else {\n        element.textContent = content;\n      }\n    }\n\n    getTitle() {\n      let title = this._element.getAttribute('data-bs-original-title');\n\n      if (!title) {\n        title = typeof this._config.title === 'function' ? this._config.title.call(this._element) : this._config.title;\n      }\n\n      return title;\n    }\n\n    updateAttachment(attachment) {\n      if (attachment === 'right') {\n        return 'end';\n      }\n\n      if (attachment === 'left') {\n        return 'start';\n      }\n\n      return attachment;\n    } // Private\n\n\n    _initializeOnDelegatedTarget(event, context) {\n      const dataKey = this.constructor.DATA_KEY;\n      context = context || Data.get(event.delegateTarget, dataKey);\n\n      if (!context) {\n        context = new this.constructor(event.delegateTarget, this._getDelegateConfig());\n        Data.set(event.delegateTarget, dataKey, context);\n      }\n\n      return context;\n    }\n\n    _getOffset() {\n      const {\n        offset\n      } = this._config;\n\n      if (typeof offset === 'string') {\n        return offset.split(',').map(val => Number.parseInt(val, 10));\n      }\n\n      if (typeof offset === 'function') {\n        return popperData => offset(popperData, this._element);\n      }\n\n      return offset;\n    }\n\n    _getPopperConfig(attachment) {\n      const defaultBsPopperConfig = {\n        placement: attachment,\n        modifiers: [{\n          name: 'flip',\n          options: {\n            fallbackPlacements: this._config.fallbackPlacements\n          }\n        }, {\n          name: 'offset',\n          options: {\n            offset: this._getOffset()\n          }\n        }, {\n          name: 'preventOverflow',\n          options: {\n            boundary: this._config.boundary\n          }\n        }, {\n          name: 'arrow',\n          options: {\n            element: `.${this.constructor.NAME}-arrow`\n          }\n        }, {\n          name: 'onChange',\n          enabled: true,\n          phase: 'afterWrite',\n          fn: data => this._handlePopperPlacementChange(data)\n        }],\n        onFirstUpdate: data => {\n          if (data.options.placement !== data.placement) {\n            this._handlePopperPlacementChange(data);\n          }\n        }\n      };\n      return { ...defaultBsPopperConfig,\n        ...(typeof this._config.popperConfig === 'function' ? this._config.popperConfig(defaultBsPopperConfig) : this._config.popperConfig)\n      };\n    }\n\n    _addAttachmentClass(attachment) {\n      this.getTipElement().classList.add(`${CLASS_PREFIX$1}-${this.updateAttachment(attachment)}`);\n    }\n\n    _getAttachment(placement) {\n      return AttachmentMap[placement.toUpperCase()];\n    }\n\n    _setListeners() {\n      const triggers = this._config.trigger.split(' ');\n\n      triggers.forEach(trigger => {\n        if (trigger === 'click') {\n          EventHandler.on(this._element, this.constructor.Event.CLICK, this._config.selector, event => this.toggle(event));\n        } else if (trigger !== TRIGGER_MANUAL) {\n          const eventIn = trigger === TRIGGER_HOVER ? this.constructor.Event.MOUSEENTER : this.constructor.Event.FOCUSIN;\n          const eventOut = trigger === TRIGGER_HOVER ? this.constructor.Event.MOUSELEAVE : this.constructor.Event.FOCUSOUT;\n          EventHandler.on(this._element, eventIn, this._config.selector, event => this._enter(event));\n          EventHandler.on(this._element, eventOut, this._config.selector, event => this._leave(event));\n        }\n      });\n\n      this._hideModalHandler = () => {\n        if (this._element) {\n          this.hide();\n        }\n      };\n\n      EventHandler.on(this._element.closest(`.${CLASS_NAME_MODAL}`), 'hide.bs.modal', this._hideModalHandler);\n\n      if (this._config.selector) {\n        this._config = { ...this._config,\n          trigger: 'manual',\n          selector: ''\n        };\n      } else {\n        this._fixTitle();\n      }\n    }\n\n    _fixTitle() {\n      const title = this._element.getAttribute('title');\n\n      const originalTitleType = typeof this._element.getAttribute('data-bs-original-title');\n\n      if (title || originalTitleType !== 'string') {\n        this._element.setAttribute('data-bs-original-title', title || '');\n\n        if (title && !this._element.getAttribute('aria-label') && !this._element.textContent) {\n          this._element.setAttribute('aria-label', title);\n        }\n\n        this._element.setAttribute('title', '');\n      }\n    }\n\n    _enter(event, context) {\n      context = this._initializeOnDelegatedTarget(event, context);\n\n      if (event) {\n        context._activeTrigger[event.type === 'focusin' ? TRIGGER_FOCUS : TRIGGER_HOVER] = true;\n      }\n\n      if (context.getTipElement().classList.contains(CLASS_NAME_SHOW$3) || context._hoverState === HOVER_STATE_SHOW) {\n        context._hoverState = HOVER_STATE_SHOW;\n        return;\n      }\n\n      clearTimeout(context._timeout);\n      context._hoverState = HOVER_STATE_SHOW;\n\n      if (!context._config.delay || !context._config.delay.show) {\n        context.show();\n        return;\n      }\n\n      context._timeout = setTimeout(() => {\n        if (context._hoverState === HOVER_STATE_SHOW) {\n          context.show();\n        }\n      }, context._config.delay.show);\n    }\n\n    _leave(event, context) {\n      context = this._initializeOnDelegatedTarget(event, context);\n\n      if (event) {\n        context._activeTrigger[event.type === 'focusout' ? TRIGGER_FOCUS : TRIGGER_HOVER] = context._element.contains(event.relatedTarget);\n      }\n\n      if (context._isWithActiveTrigger()) {\n        return;\n      }\n\n      clearTimeout(context._timeout);\n      context._hoverState = HOVER_STATE_OUT;\n\n      if (!context._config.delay || !context._config.delay.hide) {\n        context.hide();\n        return;\n      }\n\n      context._timeout = setTimeout(() => {\n        if (context._hoverState === HOVER_STATE_OUT) {\n          context.hide();\n        }\n      }, context._config.delay.hide);\n    }\n\n    _isWithActiveTrigger() {\n      for (const trigger in this._activeTrigger) {\n        if (this._activeTrigger[trigger]) {\n          return true;\n        }\n      }\n\n      return false;\n    }\n\n    _getConfig(config) {\n      const dataAttributes = Manipulator.getDataAttributes(this._element);\n      Object.keys(dataAttributes).forEach(dataAttr => {\n        if (DISALLOWED_ATTRIBUTES.has(dataAttr)) {\n          delete dataAttributes[dataAttr];\n        }\n      });\n      config = { ...this.constructor.Default,\n        ...dataAttributes,\n        ...(typeof config === 'object' && config ? config : {})\n      };\n      config.container = config.container === false ? document.body : getElement(config.container);\n\n      if (typeof config.delay === 'number') {\n        config.delay = {\n          show: config.delay,\n          hide: config.delay\n        };\n      }\n\n      if (typeof config.title === 'number') {\n        config.title = config.title.toString();\n      }\n\n      if (typeof config.content === 'number') {\n        config.content = config.content.toString();\n      }\n\n      typeCheckConfig(NAME$4, config, this.constructor.DefaultType);\n\n      if (config.sanitize) {\n        config.template = sanitizeHtml(config.template, config.allowList, config.sanitizeFn);\n      }\n\n      return config;\n    }\n\n    _getDelegateConfig() {\n      const config = {};\n\n      if (this._config) {\n        for (const key in this._config) {\n          if (this.constructor.Default[key] !== this._config[key]) {\n            config[key] = this._config[key];\n          }\n        }\n      }\n\n      return config;\n    }\n\n    _cleanTipClass() {\n      const tip = this.getTipElement();\n      const tabClass = tip.getAttribute('class').match(BSCLS_PREFIX_REGEX$1);\n\n      if (tabClass !== null && tabClass.length > 0) {\n        tabClass.map(token => token.trim()).forEach(tClass => tip.classList.remove(tClass));\n      }\n    }\n\n    _handlePopperPlacementChange(popperData) {\n      const {\n        state\n      } = popperData;\n\n      if (!state) {\n        return;\n      }\n\n      this.tip = state.elements.popper;\n\n      this._cleanTipClass();\n\n      this._addAttachmentClass(this._getAttachment(state.placement));\n    } // Static\n\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = Tooltip.getOrCreateInstance(this, config);\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(`No method named \"${config}\"`);\n          }\n\n          data[config]();\n        }\n      });\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Tooltip to jQuery only if jQuery is present\n   */\n\n\n  defineJQueryPlugin(Tooltip);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): popover.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$3 = 'popover';\n  const DATA_KEY$3 = 'bs.popover';\n  const EVENT_KEY$3 = `.${DATA_KEY$3}`;\n  const CLASS_PREFIX = 'bs-popover';\n  const BSCLS_PREFIX_REGEX = new RegExp(`(^|\\\\s)${CLASS_PREFIX}\\\\S+`, 'g');\n  const Default$2 = { ...Tooltip.Default,\n    placement: 'right',\n    offset: [0, 8],\n    trigger: 'click',\n    content: '',\n    template: '<div class=\"popover\" role=\"tooltip\">' + '<div class=\"popover-arrow\"></div>' + '<h3 class=\"popover-header\"></h3>' + '<div class=\"popover-body\"></div>' + '</div>'\n  };\n  const DefaultType$2 = { ...Tooltip.DefaultType,\n    content: '(string|element|function)'\n  };\n  const Event$1 = {\n    HIDE: `hide${EVENT_KEY$3}`,\n    HIDDEN: `hidden${EVENT_KEY$3}`,\n    SHOW: `show${EVENT_KEY$3}`,\n    SHOWN: `shown${EVENT_KEY$3}`,\n    INSERTED: `inserted${EVENT_KEY$3}`,\n    CLICK: `click${EVENT_KEY$3}`,\n    FOCUSIN: `focusin${EVENT_KEY$3}`,\n    FOCUSOUT: `focusout${EVENT_KEY$3}`,\n    MOUSEENTER: `mouseenter${EVENT_KEY$3}`,\n    MOUSELEAVE: `mouseleave${EVENT_KEY$3}`\n  };\n  const CLASS_NAME_FADE$2 = 'fade';\n  const CLASS_NAME_SHOW$2 = 'show';\n  const SELECTOR_TITLE = '.popover-header';\n  const SELECTOR_CONTENT = '.popover-body';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Popover extends Tooltip {\n    // Getters\n    static get Default() {\n      return Default$2;\n    }\n\n    static get NAME() {\n      return NAME$3;\n    }\n\n    static get Event() {\n      return Event$1;\n    }\n\n    static get DefaultType() {\n      return DefaultType$2;\n    } // Overrides\n\n\n    isWithContent() {\n      return this.getTitle() || this._getContent();\n    }\n\n    getTipElement() {\n      if (this.tip) {\n        return this.tip;\n      }\n\n      this.tip = super.getTipElement();\n\n      if (!this.getTitle()) {\n        SelectorEngine.findOne(SELECTOR_TITLE, this.tip).remove();\n      }\n\n      if (!this._getContent()) {\n        SelectorEngine.findOne(SELECTOR_CONTENT, this.tip).remove();\n      }\n\n      return this.tip;\n    }\n\n    setContent() {\n      const tip = this.getTipElement(); // we use append for html objects to maintain js events\n\n      this.setElementContent(SelectorEngine.findOne(SELECTOR_TITLE, tip), this.getTitle());\n\n      let content = this._getContent();\n\n      if (typeof content === 'function') {\n        content = content.call(this._element);\n      }\n\n      this.setElementContent(SelectorEngine.findOne(SELECTOR_CONTENT, tip), content);\n      tip.classList.remove(CLASS_NAME_FADE$2, CLASS_NAME_SHOW$2);\n    } // Private\n\n\n    _addAttachmentClass(attachment) {\n      this.getTipElement().classList.add(`${CLASS_PREFIX}-${this.updateAttachment(attachment)}`);\n    }\n\n    _getContent() {\n      return this._element.getAttribute('data-bs-content') || this._config.content;\n    }\n\n    _cleanTipClass() {\n      const tip = this.getTipElement();\n      const tabClass = tip.getAttribute('class').match(BSCLS_PREFIX_REGEX);\n\n      if (tabClass !== null && tabClass.length > 0) {\n        tabClass.map(token => token.trim()).forEach(tClass => tip.classList.remove(tClass));\n      }\n    } // Static\n\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = Popover.getOrCreateInstance(this, config);\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(`No method named \"${config}\"`);\n          }\n\n          data[config]();\n        }\n      });\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Popover to jQuery only if jQuery is present\n   */\n\n\n  defineJQueryPlugin(Popover);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): scrollspy.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$2 = 'scrollspy';\n  const DATA_KEY$2 = 'bs.scrollspy';\n  const EVENT_KEY$2 = `.${DATA_KEY$2}`;\n  const DATA_API_KEY$1 = '.data-api';\n  const Default$1 = {\n    offset: 10,\n    method: 'auto',\n    target: ''\n  };\n  const DefaultType$1 = {\n    offset: 'number',\n    method: 'string',\n    target: '(string|element)'\n  };\n  const EVENT_ACTIVATE = `activate${EVENT_KEY$2}`;\n  const EVENT_SCROLL = `scroll${EVENT_KEY$2}`;\n  const EVENT_LOAD_DATA_API = `load${EVENT_KEY$2}${DATA_API_KEY$1}`;\n  const CLASS_NAME_DROPDOWN_ITEM = 'dropdown-item';\n  const CLASS_NAME_ACTIVE$1 = 'active';\n  const SELECTOR_DATA_SPY = '[data-bs-spy=\"scroll\"]';\n  const SELECTOR_NAV_LIST_GROUP$1 = '.nav, .list-group';\n  const SELECTOR_NAV_LINKS = '.nav-link';\n  const SELECTOR_NAV_ITEMS = '.nav-item';\n  const SELECTOR_LIST_ITEMS = '.list-group-item';\n  const SELECTOR_DROPDOWN$1 = '.dropdown';\n  const SELECTOR_DROPDOWN_TOGGLE$1 = '.dropdown-toggle';\n  const METHOD_OFFSET = 'offset';\n  const METHOD_POSITION = 'position';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class ScrollSpy extends BaseComponent {\n    constructor(element, config) {\n      super(element);\n      this._scrollElement = this._element.tagName === 'BODY' ? window : this._element;\n      this._config = this._getConfig(config);\n      this._selector = `${this._config.target} ${SELECTOR_NAV_LINKS}, ${this._config.target} ${SELECTOR_LIST_ITEMS}, ${this._config.target} .${CLASS_NAME_DROPDOWN_ITEM}`;\n      this._offsets = [];\n      this._targets = [];\n      this._activeTarget = null;\n      this._scrollHeight = 0;\n      EventHandler.on(this._scrollElement, EVENT_SCROLL, () => this._process());\n      this.refresh();\n\n      this._process();\n    } // Getters\n\n\n    static get Default() {\n      return Default$1;\n    }\n\n    static get NAME() {\n      return NAME$2;\n    } // Public\n\n\n    refresh() {\n      const autoMethod = this._scrollElement === this._scrollElement.window ? METHOD_OFFSET : METHOD_POSITION;\n      const offsetMethod = this._config.method === 'auto' ? autoMethod : this._config.method;\n      const offsetBase = offsetMethod === METHOD_POSITION ? this._getScrollTop() : 0;\n      this._offsets = [];\n      this._targets = [];\n      this._scrollHeight = this._getScrollHeight();\n      const targets = SelectorEngine.find(this._selector);\n      targets.map(element => {\n        const targetSelector = getSelectorFromElement(element);\n        const target = targetSelector ? SelectorEngine.findOne(targetSelector) : null;\n\n        if (target) {\n          const targetBCR = target.getBoundingClientRect();\n\n          if (targetBCR.width || targetBCR.height) {\n            return [Manipulator[offsetMethod](target).top + offsetBase, targetSelector];\n          }\n        }\n\n        return null;\n      }).filter(item => item).sort((a, b) => a[0] - b[0]).forEach(item => {\n        this._offsets.push(item[0]);\n\n        this._targets.push(item[1]);\n      });\n    }\n\n    dispose() {\n      EventHandler.off(this._scrollElement, EVENT_KEY$2);\n      super.dispose();\n    } // Private\n\n\n    _getConfig(config) {\n      config = { ...Default$1,\n        ...Manipulator.getDataAttributes(this._element),\n        ...(typeof config === 'object' && config ? config : {})\n      };\n\n      if (typeof config.target !== 'string' && isElement$1(config.target)) {\n        let {\n          id\n        } = config.target;\n\n        if (!id) {\n          id = getUID(NAME$2);\n          config.target.id = id;\n        }\n\n        config.target = `#${id}`;\n      }\n\n      typeCheckConfig(NAME$2, config, DefaultType$1);\n      return config;\n    }\n\n    _getScrollTop() {\n      return this._scrollElement === window ? this._scrollElement.pageYOffset : this._scrollElement.scrollTop;\n    }\n\n    _getScrollHeight() {\n      return this._scrollElement.scrollHeight || Math.max(document.body.scrollHeight, document.documentElement.scrollHeight);\n    }\n\n    _getOffsetHeight() {\n      return this._scrollElement === window ? window.innerHeight : this._scrollElement.getBoundingClientRect().height;\n    }\n\n    _process() {\n      const scrollTop = this._getScrollTop() + this._config.offset;\n\n      const scrollHeight = this._getScrollHeight();\n\n      const maxScroll = this._config.offset + scrollHeight - this._getOffsetHeight();\n\n      if (this._scrollHeight !== scrollHeight) {\n        this.refresh();\n      }\n\n      if (scrollTop >= maxScroll) {\n        const target = this._targets[this._targets.length - 1];\n\n        if (this._activeTarget !== target) {\n          this._activate(target);\n        }\n\n        return;\n      }\n\n      if (this._activeTarget && scrollTop < this._offsets[0] && this._offsets[0] > 0) {\n        this._activeTarget = null;\n\n        this._clear();\n\n        return;\n      }\n\n      for (let i = this._offsets.length; i--;) {\n        const isActiveTarget = this._activeTarget !== this._targets[i] && scrollTop >= this._offsets[i] && (typeof this._offsets[i + 1] === 'undefined' || scrollTop < this._offsets[i + 1]);\n\n        if (isActiveTarget) {\n          this._activate(this._targets[i]);\n        }\n      }\n    }\n\n    _activate(target) {\n      this._activeTarget = target;\n\n      this._clear();\n\n      const queries = this._selector.split(',').map(selector => `${selector}[data-bs-target=\"${target}\"],${selector}[href=\"${target}\"]`);\n\n      const link = SelectorEngine.findOne(queries.join(','));\n\n      if (link.classList.contains(CLASS_NAME_DROPDOWN_ITEM)) {\n        SelectorEngine.findOne(SELECTOR_DROPDOWN_TOGGLE$1, link.closest(SELECTOR_DROPDOWN$1)).classList.add(CLASS_NAME_ACTIVE$1);\n        link.classList.add(CLASS_NAME_ACTIVE$1);\n      } else {\n        // Set triggered link as active\n        link.classList.add(CLASS_NAME_ACTIVE$1);\n        SelectorEngine.parents(link, SELECTOR_NAV_LIST_GROUP$1).forEach(listGroup => {\n          // Set triggered links parents as active\n          // With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor\n          SelectorEngine.prev(listGroup, `${SELECTOR_NAV_LINKS}, ${SELECTOR_LIST_ITEMS}`).forEach(item => item.classList.add(CLASS_NAME_ACTIVE$1)); // Handle special case when .nav-link is inside .nav-item\n\n          SelectorEngine.prev(listGroup, SELECTOR_NAV_ITEMS).forEach(navItem => {\n            SelectorEngine.children(navItem, SELECTOR_NAV_LINKS).forEach(item => item.classList.add(CLASS_NAME_ACTIVE$1));\n          });\n        });\n      }\n\n      EventHandler.trigger(this._scrollElement, EVENT_ACTIVATE, {\n        relatedTarget: target\n      });\n    }\n\n    _clear() {\n      SelectorEngine.find(this._selector).filter(node => node.classList.contains(CLASS_NAME_ACTIVE$1)).forEach(node => node.classList.remove(CLASS_NAME_ACTIVE$1));\n    } // Static\n\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = ScrollSpy.getOrCreateInstance(this, config);\n\n        if (typeof config !== 'string') {\n          return;\n        }\n\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config]();\n      });\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n    SelectorEngine.find(SELECTOR_DATA_SPY).forEach(spy => new ScrollSpy(spy));\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .ScrollSpy to jQuery only if jQuery is present\n   */\n\n  defineJQueryPlugin(ScrollSpy);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): tab.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$1 = 'tab';\n  const DATA_KEY$1 = 'bs.tab';\n  const EVENT_KEY$1 = `.${DATA_KEY$1}`;\n  const DATA_API_KEY = '.data-api';\n  const EVENT_HIDE$1 = `hide${EVENT_KEY$1}`;\n  const EVENT_HIDDEN$1 = `hidden${EVENT_KEY$1}`;\n  const EVENT_SHOW$1 = `show${EVENT_KEY$1}`;\n  const EVENT_SHOWN$1 = `shown${EVENT_KEY$1}`;\n  const EVENT_CLICK_DATA_API = `click${EVENT_KEY$1}${DATA_API_KEY}`;\n  const CLASS_NAME_DROPDOWN_MENU = 'dropdown-menu';\n  const CLASS_NAME_ACTIVE = 'active';\n  const CLASS_NAME_FADE$1 = 'fade';\n  const CLASS_NAME_SHOW$1 = 'show';\n  const SELECTOR_DROPDOWN = '.dropdown';\n  const SELECTOR_NAV_LIST_GROUP = '.nav, .list-group';\n  const SELECTOR_ACTIVE = '.active';\n  const SELECTOR_ACTIVE_UL = ':scope > li > .active';\n  const SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"tab\"], [data-bs-toggle=\"pill\"], [data-bs-toggle=\"list\"]';\n  const SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle';\n  const SELECTOR_DROPDOWN_ACTIVE_CHILD = ':scope > .dropdown-menu .active';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Tab extends BaseComponent {\n    // Getters\n    static get NAME() {\n      return NAME$1;\n    } // Public\n\n\n    show() {\n      if (this._element.parentNode && this._element.parentNode.nodeType === Node.ELEMENT_NODE && this._element.classList.contains(CLASS_NAME_ACTIVE)) {\n        return;\n      }\n\n      let previous;\n      const target = getElementFromSelector(this._element);\n\n      const listElement = this._element.closest(SELECTOR_NAV_LIST_GROUP);\n\n      if (listElement) {\n        const itemSelector = listElement.nodeName === 'UL' || listElement.nodeName === 'OL' ? SELECTOR_ACTIVE_UL : SELECTOR_ACTIVE;\n        previous = SelectorEngine.find(itemSelector, listElement);\n        previous = previous[previous.length - 1];\n      }\n\n      const hideEvent = previous ? EventHandler.trigger(previous, EVENT_HIDE$1, {\n        relatedTarget: this._element\n      }) : null;\n      const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$1, {\n        relatedTarget: previous\n      });\n\n      if (showEvent.defaultPrevented || hideEvent !== null && hideEvent.defaultPrevented) {\n        return;\n      }\n\n      this._activate(this._element, listElement);\n\n      const complete = () => {\n        EventHandler.trigger(previous, EVENT_HIDDEN$1, {\n          relatedTarget: this._element\n        });\n        EventHandler.trigger(this._element, EVENT_SHOWN$1, {\n          relatedTarget: previous\n        });\n      };\n\n      if (target) {\n        this._activate(target, target.parentNode, complete);\n      } else {\n        complete();\n      }\n    } // Private\n\n\n    _activate(element, container, callback) {\n      const activeElements = container && (container.nodeName === 'UL' || container.nodeName === 'OL') ? SelectorEngine.find(SELECTOR_ACTIVE_UL, container) : SelectorEngine.children(container, SELECTOR_ACTIVE);\n      const active = activeElements[0];\n      const isTransitioning = callback && active && active.classList.contains(CLASS_NAME_FADE$1);\n\n      const complete = () => this._transitionComplete(element, active, callback);\n\n      if (active && isTransitioning) {\n        active.classList.remove(CLASS_NAME_SHOW$1);\n\n        this._queueCallback(complete, element, true);\n      } else {\n        complete();\n      }\n    }\n\n    _transitionComplete(element, active, callback) {\n      if (active) {\n        active.classList.remove(CLASS_NAME_ACTIVE);\n        const dropdownChild = SelectorEngine.findOne(SELECTOR_DROPDOWN_ACTIVE_CHILD, active.parentNode);\n\n        if (dropdownChild) {\n          dropdownChild.classList.remove(CLASS_NAME_ACTIVE);\n        }\n\n        if (active.getAttribute('role') === 'tab') {\n          active.setAttribute('aria-selected', false);\n        }\n      }\n\n      element.classList.add(CLASS_NAME_ACTIVE);\n\n      if (element.getAttribute('role') === 'tab') {\n        element.setAttribute('aria-selected', true);\n      }\n\n      reflow(element);\n\n      if (element.classList.contains(CLASS_NAME_FADE$1)) {\n        element.classList.add(CLASS_NAME_SHOW$1);\n      }\n\n      let parent = element.parentNode;\n\n      if (parent && parent.nodeName === 'LI') {\n        parent = parent.parentNode;\n      }\n\n      if (parent && parent.classList.contains(CLASS_NAME_DROPDOWN_MENU)) {\n        const dropdownElement = element.closest(SELECTOR_DROPDOWN);\n\n        if (dropdownElement) {\n          SelectorEngine.find(SELECTOR_DROPDOWN_TOGGLE, dropdownElement).forEach(dropdown => dropdown.classList.add(CLASS_NAME_ACTIVE));\n        }\n\n        element.setAttribute('aria-expanded', true);\n      }\n\n      if (callback) {\n        callback();\n      }\n    } // Static\n\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = Tab.getOrCreateInstance(this);\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(`No method named \"${config}\"`);\n          }\n\n          data[config]();\n        }\n      });\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n    if (['A', 'AREA'].includes(this.tagName)) {\n      event.preventDefault();\n    }\n\n    if (isDisabled(this)) {\n      return;\n    }\n\n    const data = Tab.getOrCreateInstance(this);\n    data.show();\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Tab to jQuery only if jQuery is present\n   */\n\n  defineJQueryPlugin(Tab);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): toast.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME = 'toast';\n  const DATA_KEY = 'bs.toast';\n  const EVENT_KEY = `.${DATA_KEY}`;\n  const EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY}`;\n  const EVENT_MOUSEOVER = `mouseover${EVENT_KEY}`;\n  const EVENT_MOUSEOUT = `mouseout${EVENT_KEY}`;\n  const EVENT_FOCUSIN = `focusin${EVENT_KEY}`;\n  const EVENT_FOCUSOUT = `focusout${EVENT_KEY}`;\n  const EVENT_HIDE = `hide${EVENT_KEY}`;\n  const EVENT_HIDDEN = `hidden${EVENT_KEY}`;\n  const EVENT_SHOW = `show${EVENT_KEY}`;\n  const EVENT_SHOWN = `shown${EVENT_KEY}`;\n  const CLASS_NAME_FADE = 'fade';\n  const CLASS_NAME_HIDE = 'hide';\n  const CLASS_NAME_SHOW = 'show';\n  const CLASS_NAME_SHOWING = 'showing';\n  const DefaultType = {\n    animation: 'boolean',\n    autohide: 'boolean',\n    delay: 'number'\n  };\n  const Default = {\n    animation: true,\n    autohide: true,\n    delay: 5000\n  };\n  const SELECTOR_DATA_DISMISS = '[data-bs-dismiss=\"toast\"]';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Toast extends BaseComponent {\n    constructor(element, config) {\n      super(element);\n      this._config = this._getConfig(config);\n      this._timeout = null;\n      this._hasMouseInteraction = false;\n      this._hasKeyboardInteraction = false;\n\n      this._setListeners();\n    } // Getters\n\n\n    static get DefaultType() {\n      return DefaultType;\n    }\n\n    static get Default() {\n      return Default;\n    }\n\n    static get NAME() {\n      return NAME;\n    } // Public\n\n\n    show() {\n      const showEvent = EventHandler.trigger(this._element, EVENT_SHOW);\n\n      if (showEvent.defaultPrevented) {\n        return;\n      }\n\n      this._clearTimeout();\n\n      if (this._config.animation) {\n        this._element.classList.add(CLASS_NAME_FADE);\n      }\n\n      const complete = () => {\n        this._element.classList.remove(CLASS_NAME_SHOWING);\n\n        this._element.classList.add(CLASS_NAME_SHOW);\n\n        EventHandler.trigger(this._element, EVENT_SHOWN);\n\n        this._maybeScheduleHide();\n      };\n\n      this._element.classList.remove(CLASS_NAME_HIDE);\n\n      reflow(this._element);\n\n      this._element.classList.add(CLASS_NAME_SHOWING);\n\n      this._queueCallback(complete, this._element, this._config.animation);\n    }\n\n    hide() {\n      if (!this._element.classList.contains(CLASS_NAME_SHOW)) {\n        return;\n      }\n\n      const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE);\n\n      if (hideEvent.defaultPrevented) {\n        return;\n      }\n\n      const complete = () => {\n        this._element.classList.add(CLASS_NAME_HIDE);\n\n        EventHandler.trigger(this._element, EVENT_HIDDEN);\n      };\n\n      this._element.classList.remove(CLASS_NAME_SHOW);\n\n      this._queueCallback(complete, this._element, this._config.animation);\n    }\n\n    dispose() {\n      this._clearTimeout();\n\n      if (this._element.classList.contains(CLASS_NAME_SHOW)) {\n        this._element.classList.remove(CLASS_NAME_SHOW);\n      }\n\n      super.dispose();\n    } // Private\n\n\n    _getConfig(config) {\n      config = { ...Default,\n        ...Manipulator.getDataAttributes(this._element),\n        ...(typeof config === 'object' && config ? config : {})\n      };\n      typeCheckConfig(NAME, config, this.constructor.DefaultType);\n      return config;\n    }\n\n    _maybeScheduleHide() {\n      if (!this._config.autohide) {\n        return;\n      }\n\n      if (this._hasMouseInteraction || this._hasKeyboardInteraction) {\n        return;\n      }\n\n      this._timeout = setTimeout(() => {\n        this.hide();\n      }, this._config.delay);\n    }\n\n    _onInteraction(event, isInteracting) {\n      switch (event.type) {\n        case 'mouseover':\n        case 'mouseout':\n          this._hasMouseInteraction = isInteracting;\n          break;\n\n        case 'focusin':\n        case 'focusout':\n          this._hasKeyboardInteraction = isInteracting;\n          break;\n      }\n\n      if (isInteracting) {\n        this._clearTimeout();\n\n        return;\n      }\n\n      const nextElement = event.relatedTarget;\n\n      if (this._element === nextElement || this._element.contains(nextElement)) {\n        return;\n      }\n\n      this._maybeScheduleHide();\n    }\n\n    _setListeners() {\n      EventHandler.on(this._element, EVENT_CLICK_DISMISS, SELECTOR_DATA_DISMISS, () => this.hide());\n      EventHandler.on(this._element, EVENT_MOUSEOVER, event => this._onInteraction(event, true));\n      EventHandler.on(this._element, EVENT_MOUSEOUT, event => this._onInteraction(event, false));\n      EventHandler.on(this._element, EVENT_FOCUSIN, event => this._onInteraction(event, true));\n      EventHandler.on(this._element, EVENT_FOCUSOUT, event => this._onInteraction(event, false));\n    }\n\n    _clearTimeout() {\n      clearTimeout(this._timeout);\n      this._timeout = null;\n    } // Static\n\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = Toast.getOrCreateInstance(this, config);\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(`No method named \"${config}\"`);\n          }\n\n          data[config](this);\n        }\n      });\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Toast to jQuery only if jQuery is present\n   */\n\n\n  defineJQueryPlugin(Toast);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): index.umd.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  var index_umd = {\n    Alert,\n    Button,\n    Carousel,\n    Collapse,\n    Dropdown,\n    Modal,\n    Offcanvas,\n    Popover,\n    ScrollSpy,\n    Tab,\n    Toast,\n    Tooltip\n  };\n\n  return index_umd;\n\n})));\n//# sourceMappingURL=bootstrap.bundle.js.map\n"
  },
  {
    "path": "src/sourceDev.WebApp/SharedThemes/cyborg/wwwroot/js/bootstrap.esm.js",
    "content": "/*!\n  * Bootstrap v5.0.2 (https://getbootstrap.com/)\n  * Copyright 2011-2021 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)\n  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n  */\nimport * as Popper from '@popperjs/core';\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): dom/selector-engine.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\nconst NODE_TEXT = 3;\nconst SelectorEngine = {\n  find(selector, element = document.documentElement) {\n    return [].concat(...Element.prototype.querySelectorAll.call(element, selector));\n  },\n\n  findOne(selector, element = document.documentElement) {\n    return Element.prototype.querySelector.call(element, selector);\n  },\n\n  children(element, selector) {\n    return [].concat(...element.children).filter(child => child.matches(selector));\n  },\n\n  parents(element, selector) {\n    const parents = [];\n    let ancestor = element.parentNode;\n\n    while (ancestor && ancestor.nodeType === Node.ELEMENT_NODE && ancestor.nodeType !== NODE_TEXT) {\n      if (ancestor.matches(selector)) {\n        parents.push(ancestor);\n      }\n\n      ancestor = ancestor.parentNode;\n    }\n\n    return parents;\n  },\n\n  prev(element, selector) {\n    let previous = element.previousElementSibling;\n\n    while (previous) {\n      if (previous.matches(selector)) {\n        return [previous];\n      }\n\n      previous = previous.previousElementSibling;\n    }\n\n    return [];\n  },\n\n  next(element, selector) {\n    let next = element.nextElementSibling;\n\n    while (next) {\n      if (next.matches(selector)) {\n        return [next];\n      }\n\n      next = next.nextElementSibling;\n    }\n\n    return [];\n  }\n\n};\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): util/index.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst MAX_UID = 1000000;\nconst MILLISECONDS_MULTIPLIER = 1000;\nconst TRANSITION_END = 'transitionend'; // Shoutout AngusCroll (https://goo.gl/pxwQGp)\n\nconst toType = obj => {\n  if (obj === null || obj === undefined) {\n    return `${obj}`;\n  }\n\n  return {}.toString.call(obj).match(/\\s([a-z]+)/i)[1].toLowerCase();\n};\n/**\n * --------------------------------------------------------------------------\n * Public Util Api\n * --------------------------------------------------------------------------\n */\n\n\nconst getUID = prefix => {\n  do {\n    prefix += Math.floor(Math.random() * MAX_UID);\n  } while (document.getElementById(prefix));\n\n  return prefix;\n};\n\nconst getSelector = element => {\n  let selector = element.getAttribute('data-bs-target');\n\n  if (!selector || selector === '#') {\n    let hrefAttr = element.getAttribute('href'); // The only valid content that could double as a selector are IDs or classes,\n    // so everything starting with `#` or `.`. If a \"real\" URL is used as the selector,\n    // `document.querySelector` will rightfully complain it is invalid.\n    // See https://github.com/twbs/bootstrap/issues/32273\n\n    if (!hrefAttr || !hrefAttr.includes('#') && !hrefAttr.startsWith('.')) {\n      return null;\n    } // Just in case some CMS puts out a full URL with the anchor appended\n\n\n    if (hrefAttr.includes('#') && !hrefAttr.startsWith('#')) {\n      hrefAttr = `#${hrefAttr.split('#')[1]}`;\n    }\n\n    selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : null;\n  }\n\n  return selector;\n};\n\nconst getSelectorFromElement = element => {\n  const selector = getSelector(element);\n\n  if (selector) {\n    return document.querySelector(selector) ? selector : null;\n  }\n\n  return null;\n};\n\nconst getElementFromSelector = element => {\n  const selector = getSelector(element);\n  return selector ? document.querySelector(selector) : null;\n};\n\nconst getTransitionDurationFromElement = element => {\n  if (!element) {\n    return 0;\n  } // Get transition-duration of the element\n\n\n  let {\n    transitionDuration,\n    transitionDelay\n  } = window.getComputedStyle(element);\n  const floatTransitionDuration = Number.parseFloat(transitionDuration);\n  const floatTransitionDelay = Number.parseFloat(transitionDelay); // Return 0 if element or transition duration is not found\n\n  if (!floatTransitionDuration && !floatTransitionDelay) {\n    return 0;\n  } // If multiple durations are defined, take the first\n\n\n  transitionDuration = transitionDuration.split(',')[0];\n  transitionDelay = transitionDelay.split(',')[0];\n  return (Number.parseFloat(transitionDuration) + Number.parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER;\n};\n\nconst triggerTransitionEnd = element => {\n  element.dispatchEvent(new Event(TRANSITION_END));\n};\n\nconst isElement = obj => {\n  if (!obj || typeof obj !== 'object') {\n    return false;\n  }\n\n  if (typeof obj.jquery !== 'undefined') {\n    obj = obj[0];\n  }\n\n  return typeof obj.nodeType !== 'undefined';\n};\n\nconst getElement = obj => {\n  if (isElement(obj)) {\n    // it's a jQuery object or a node element\n    return obj.jquery ? obj[0] : obj;\n  }\n\n  if (typeof obj === 'string' && obj.length > 0) {\n    return SelectorEngine.findOne(obj);\n  }\n\n  return null;\n};\n\nconst typeCheckConfig = (componentName, config, configTypes) => {\n  Object.keys(configTypes).forEach(property => {\n    const expectedTypes = configTypes[property];\n    const value = config[property];\n    const valueType = value && isElement(value) ? 'element' : toType(value);\n\n    if (!new RegExp(expectedTypes).test(valueType)) {\n      throw new TypeError(`${componentName.toUpperCase()}: Option \"${property}\" provided type \"${valueType}\" but expected type \"${expectedTypes}\".`);\n    }\n  });\n};\n\nconst isVisible = element => {\n  if (!isElement(element) || element.getClientRects().length === 0) {\n    return false;\n  }\n\n  return getComputedStyle(element).getPropertyValue('visibility') === 'visible';\n};\n\nconst isDisabled = element => {\n  if (!element || element.nodeType !== Node.ELEMENT_NODE) {\n    return true;\n  }\n\n  if (element.classList.contains('disabled')) {\n    return true;\n  }\n\n  if (typeof element.disabled !== 'undefined') {\n    return element.disabled;\n  }\n\n  return element.hasAttribute('disabled') && element.getAttribute('disabled') !== 'false';\n};\n\nconst findShadowRoot = element => {\n  if (!document.documentElement.attachShadow) {\n    return null;\n  } // Can find the shadow root otherwise it'll return the document\n\n\n  if (typeof element.getRootNode === 'function') {\n    const root = element.getRootNode();\n    return root instanceof ShadowRoot ? root : null;\n  }\n\n  if (element instanceof ShadowRoot) {\n    return element;\n  } // when we don't find a shadow root\n\n\n  if (!element.parentNode) {\n    return null;\n  }\n\n  return findShadowRoot(element.parentNode);\n};\n\nconst noop = () => {};\n\nconst reflow = element => element.offsetHeight;\n\nconst getjQuery = () => {\n  const {\n    jQuery\n  } = window;\n\n  if (jQuery && !document.body.hasAttribute('data-bs-no-jquery')) {\n    return jQuery;\n  }\n\n  return null;\n};\n\nconst DOMContentLoadedCallbacks = [];\n\nconst onDOMContentLoaded = callback => {\n  if (document.readyState === 'loading') {\n    // add listener on the first call when the document is in loading state\n    if (!DOMContentLoadedCallbacks.length) {\n      document.addEventListener('DOMContentLoaded', () => {\n        DOMContentLoadedCallbacks.forEach(callback => callback());\n      });\n    }\n\n    DOMContentLoadedCallbacks.push(callback);\n  } else {\n    callback();\n  }\n};\n\nconst isRTL = () => document.documentElement.dir === 'rtl';\n\nconst defineJQueryPlugin = plugin => {\n  onDOMContentLoaded(() => {\n    const $ = getjQuery();\n    /* istanbul ignore if */\n\n    if ($) {\n      const name = plugin.NAME;\n      const JQUERY_NO_CONFLICT = $.fn[name];\n      $.fn[name] = plugin.jQueryInterface;\n      $.fn[name].Constructor = plugin;\n\n      $.fn[name].noConflict = () => {\n        $.fn[name] = JQUERY_NO_CONFLICT;\n        return plugin.jQueryInterface;\n      };\n    }\n  });\n};\n\nconst execute = callback => {\n  if (typeof callback === 'function') {\n    callback();\n  }\n};\n\nconst executeAfterTransition = (callback, transitionElement, waitForTransition = true) => {\n  if (!waitForTransition) {\n    execute(callback);\n    return;\n  }\n\n  const durationPadding = 5;\n  const emulatedDuration = getTransitionDurationFromElement(transitionElement) + durationPadding;\n  let called = false;\n\n  const handler = ({\n    target\n  }) => {\n    if (target !== transitionElement) {\n      return;\n    }\n\n    called = true;\n    transitionElement.removeEventListener(TRANSITION_END, handler);\n    execute(callback);\n  };\n\n  transitionElement.addEventListener(TRANSITION_END, handler);\n  setTimeout(() => {\n    if (!called) {\n      triggerTransitionEnd(transitionElement);\n    }\n  }, emulatedDuration);\n};\n/**\n * Return the previous/next element of a list.\n *\n * @param {array} list    The list of elements\n * @param activeElement   The active element\n * @param shouldGetNext   Choose to get next or previous element\n * @param isCycleAllowed\n * @return {Element|elem} The proper element\n */\n\n\nconst getNextActiveElement = (list, activeElement, shouldGetNext, isCycleAllowed) => {\n  let index = list.indexOf(activeElement); // if the element does not exist in the list return an element depending on the direction and if cycle is allowed\n\n  if (index === -1) {\n    return list[!shouldGetNext && isCycleAllowed ? list.length - 1 : 0];\n  }\n\n  const listLength = list.length;\n  index += shouldGetNext ? 1 : -1;\n\n  if (isCycleAllowed) {\n    index = (index + listLength) % listLength;\n  }\n\n  return list[Math.max(0, Math.min(index, listLength - 1))];\n};\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): dom/event-handler.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst namespaceRegex = /[^.]*(?=\\..*)\\.|.*/;\nconst stripNameRegex = /\\..*/;\nconst stripUidRegex = /::\\d+$/;\nconst eventRegistry = {}; // Events storage\n\nlet uidEvent = 1;\nconst customEvents = {\n  mouseenter: 'mouseover',\n  mouseleave: 'mouseout'\n};\nconst customEventsRegex = /^(mouseenter|mouseleave)/i;\nconst nativeEvents = new Set(['click', 'dblclick', 'mouseup', 'mousedown', 'contextmenu', 'mousewheel', 'DOMMouseScroll', 'mouseover', 'mouseout', 'mousemove', 'selectstart', 'selectend', 'keydown', 'keypress', 'keyup', 'orientationchange', 'touchstart', 'touchmove', 'touchend', 'touchcancel', 'pointerdown', 'pointermove', 'pointerup', 'pointerleave', 'pointercancel', 'gesturestart', 'gesturechange', 'gestureend', 'focus', 'blur', 'change', 'reset', 'select', 'submit', 'focusin', 'focusout', 'load', 'unload', 'beforeunload', 'resize', 'move', 'DOMContentLoaded', 'readystatechange', 'error', 'abort', 'scroll']);\n/**\n * ------------------------------------------------------------------------\n * Private methods\n * ------------------------------------------------------------------------\n */\n\nfunction getUidEvent(element, uid) {\n  return uid && `${uid}::${uidEvent++}` || element.uidEvent || uidEvent++;\n}\n\nfunction getEvent(element) {\n  const uid = getUidEvent(element);\n  element.uidEvent = uid;\n  eventRegistry[uid] = eventRegistry[uid] || {};\n  return eventRegistry[uid];\n}\n\nfunction bootstrapHandler(element, fn) {\n  return function handler(event) {\n    event.delegateTarget = element;\n\n    if (handler.oneOff) {\n      EventHandler.off(element, event.type, fn);\n    }\n\n    return fn.apply(element, [event]);\n  };\n}\n\nfunction bootstrapDelegationHandler(element, selector, fn) {\n  return function handler(event) {\n    const domElements = element.querySelectorAll(selector);\n\n    for (let {\n      target\n    } = event; target && target !== this; target = target.parentNode) {\n      for (let i = domElements.length; i--;) {\n        if (domElements[i] === target) {\n          event.delegateTarget = target;\n\n          if (handler.oneOff) {\n            // eslint-disable-next-line unicorn/consistent-destructuring\n            EventHandler.off(element, event.type, selector, fn);\n          }\n\n          return fn.apply(target, [event]);\n        }\n      }\n    } // To please ESLint\n\n\n    return null;\n  };\n}\n\nfunction findHandler(events, handler, delegationSelector = null) {\n  const uidEventList = Object.keys(events);\n\n  for (let i = 0, len = uidEventList.length; i < len; i++) {\n    const event = events[uidEventList[i]];\n\n    if (event.originalHandler === handler && event.delegationSelector === delegationSelector) {\n      return event;\n    }\n  }\n\n  return null;\n}\n\nfunction normalizeParams(originalTypeEvent, handler, delegationFn) {\n  const delegation = typeof handler === 'string';\n  const originalHandler = delegation ? delegationFn : handler;\n  let typeEvent = getTypeEvent(originalTypeEvent);\n  const isNative = nativeEvents.has(typeEvent);\n\n  if (!isNative) {\n    typeEvent = originalTypeEvent;\n  }\n\n  return [delegation, originalHandler, typeEvent];\n}\n\nfunction addHandler(element, originalTypeEvent, handler, delegationFn, oneOff) {\n  if (typeof originalTypeEvent !== 'string' || !element) {\n    return;\n  }\n\n  if (!handler) {\n    handler = delegationFn;\n    delegationFn = null;\n  } // in case of mouseenter or mouseleave wrap the handler within a function that checks for its DOM position\n  // this prevents the handler from being dispatched the same way as mouseover or mouseout does\n\n\n  if (customEventsRegex.test(originalTypeEvent)) {\n    const wrapFn = fn => {\n      return function (event) {\n        if (!event.relatedTarget || event.relatedTarget !== event.delegateTarget && !event.delegateTarget.contains(event.relatedTarget)) {\n          return fn.call(this, event);\n        }\n      };\n    };\n\n    if (delegationFn) {\n      delegationFn = wrapFn(delegationFn);\n    } else {\n      handler = wrapFn(handler);\n    }\n  }\n\n  const [delegation, originalHandler, typeEvent] = normalizeParams(originalTypeEvent, handler, delegationFn);\n  const events = getEvent(element);\n  const handlers = events[typeEvent] || (events[typeEvent] = {});\n  const previousFn = findHandler(handlers, originalHandler, delegation ? handler : null);\n\n  if (previousFn) {\n    previousFn.oneOff = previousFn.oneOff && oneOff;\n    return;\n  }\n\n  const uid = getUidEvent(originalHandler, originalTypeEvent.replace(namespaceRegex, ''));\n  const fn = delegation ? bootstrapDelegationHandler(element, handler, delegationFn) : bootstrapHandler(element, handler);\n  fn.delegationSelector = delegation ? handler : null;\n  fn.originalHandler = originalHandler;\n  fn.oneOff = oneOff;\n  fn.uidEvent = uid;\n  handlers[uid] = fn;\n  element.addEventListener(typeEvent, fn, delegation);\n}\n\nfunction removeHandler(element, events, typeEvent, handler, delegationSelector) {\n  const fn = findHandler(events[typeEvent], handler, delegationSelector);\n\n  if (!fn) {\n    return;\n  }\n\n  element.removeEventListener(typeEvent, fn, Boolean(delegationSelector));\n  delete events[typeEvent][fn.uidEvent];\n}\n\nfunction removeNamespacedHandlers(element, events, typeEvent, namespace) {\n  const storeElementEvent = events[typeEvent] || {};\n  Object.keys(storeElementEvent).forEach(handlerKey => {\n    if (handlerKey.includes(namespace)) {\n      const event = storeElementEvent[handlerKey];\n      removeHandler(element, events, typeEvent, event.originalHandler, event.delegationSelector);\n    }\n  });\n}\n\nfunction getTypeEvent(event) {\n  // allow to get the native events from namespaced events ('click.bs.button' --> 'click')\n  event = event.replace(stripNameRegex, '');\n  return customEvents[event] || event;\n}\n\nconst EventHandler = {\n  on(element, event, handler, delegationFn) {\n    addHandler(element, event, handler, delegationFn, false);\n  },\n\n  one(element, event, handler, delegationFn) {\n    addHandler(element, event, handler, delegationFn, true);\n  },\n\n  off(element, originalTypeEvent, handler, delegationFn) {\n    if (typeof originalTypeEvent !== 'string' || !element) {\n      return;\n    }\n\n    const [delegation, originalHandler, typeEvent] = normalizeParams(originalTypeEvent, handler, delegationFn);\n    const inNamespace = typeEvent !== originalTypeEvent;\n    const events = getEvent(element);\n    const isNamespace = originalTypeEvent.startsWith('.');\n\n    if (typeof originalHandler !== 'undefined') {\n      // Simplest case: handler is passed, remove that listener ONLY.\n      if (!events || !events[typeEvent]) {\n        return;\n      }\n\n      removeHandler(element, events, typeEvent, originalHandler, delegation ? handler : null);\n      return;\n    }\n\n    if (isNamespace) {\n      Object.keys(events).forEach(elementEvent => {\n        removeNamespacedHandlers(element, events, elementEvent, originalTypeEvent.slice(1));\n      });\n    }\n\n    const storeElementEvent = events[typeEvent] || {};\n    Object.keys(storeElementEvent).forEach(keyHandlers => {\n      const handlerKey = keyHandlers.replace(stripUidRegex, '');\n\n      if (!inNamespace || originalTypeEvent.includes(handlerKey)) {\n        const event = storeElementEvent[keyHandlers];\n        removeHandler(element, events, typeEvent, event.originalHandler, event.delegationSelector);\n      }\n    });\n  },\n\n  trigger(element, event, args) {\n    if (typeof event !== 'string' || !element) {\n      return null;\n    }\n\n    const $ = getjQuery();\n    const typeEvent = getTypeEvent(event);\n    const inNamespace = event !== typeEvent;\n    const isNative = nativeEvents.has(typeEvent);\n    let jQueryEvent;\n    let bubbles = true;\n    let nativeDispatch = true;\n    let defaultPrevented = false;\n    let evt = null;\n\n    if (inNamespace && $) {\n      jQueryEvent = $.Event(event, args);\n      $(element).trigger(jQueryEvent);\n      bubbles = !jQueryEvent.isPropagationStopped();\n      nativeDispatch = !jQueryEvent.isImmediatePropagationStopped();\n      defaultPrevented = jQueryEvent.isDefaultPrevented();\n    }\n\n    if (isNative) {\n      evt = document.createEvent('HTMLEvents');\n      evt.initEvent(typeEvent, bubbles, true);\n    } else {\n      evt = new CustomEvent(event, {\n        bubbles,\n        cancelable: true\n      });\n    } // merge custom information in our event\n\n\n    if (typeof args !== 'undefined') {\n      Object.keys(args).forEach(key => {\n        Object.defineProperty(evt, key, {\n          get() {\n            return args[key];\n          }\n\n        });\n      });\n    }\n\n    if (defaultPrevented) {\n      evt.preventDefault();\n    }\n\n    if (nativeDispatch) {\n      element.dispatchEvent(evt);\n    }\n\n    if (evt.defaultPrevented && typeof jQueryEvent !== 'undefined') {\n      jQueryEvent.preventDefault();\n    }\n\n    return evt;\n  }\n\n};\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): dom/data.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\nconst elementMap = new Map();\nvar Data = {\n  set(element, key, instance) {\n    if (!elementMap.has(element)) {\n      elementMap.set(element, new Map());\n    }\n\n    const instanceMap = elementMap.get(element); // make it clear we only want one instance per element\n    // can be removed later when multiple key/instances are fine to be used\n\n    if (!instanceMap.has(key) && instanceMap.size !== 0) {\n      // eslint-disable-next-line no-console\n      console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(instanceMap.keys())[0]}.`);\n      return;\n    }\n\n    instanceMap.set(key, instance);\n  },\n\n  get(element, key) {\n    if (elementMap.has(element)) {\n      return elementMap.get(element).get(key) || null;\n    }\n\n    return null;\n  },\n\n  remove(element, key) {\n    if (!elementMap.has(element)) {\n      return;\n    }\n\n    const instanceMap = elementMap.get(element);\n    instanceMap.delete(key); // free up element references if there are no instances left for an element\n\n    if (instanceMap.size === 0) {\n      elementMap.delete(element);\n    }\n  }\n\n};\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): base-component.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst VERSION = '5.0.2';\n\nclass BaseComponent {\n  constructor(element) {\n    element = getElement(element);\n\n    if (!element) {\n      return;\n    }\n\n    this._element = element;\n    Data.set(this._element, this.constructor.DATA_KEY, this);\n  }\n\n  dispose() {\n    Data.remove(this._element, this.constructor.DATA_KEY);\n    EventHandler.off(this._element, this.constructor.EVENT_KEY);\n    Object.getOwnPropertyNames(this).forEach(propertyName => {\n      this[propertyName] = null;\n    });\n  }\n\n  _queueCallback(callback, element, isAnimated = true) {\n    executeAfterTransition(callback, element, isAnimated);\n  }\n  /** Static */\n\n\n  static getInstance(element) {\n    return Data.get(element, this.DATA_KEY);\n  }\n\n  static getOrCreateInstance(element, config = {}) {\n    return this.getInstance(element) || new this(element, typeof config === 'object' ? config : null);\n  }\n\n  static get VERSION() {\n    return VERSION;\n  }\n\n  static get NAME() {\n    throw new Error('You have to implement the static method \"NAME\", for each component!');\n  }\n\n  static get DATA_KEY() {\n    return `bs.${this.NAME}`;\n  }\n\n  static get EVENT_KEY() {\n    return `.${this.DATA_KEY}`;\n  }\n\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): alert.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$c = 'alert';\nconst DATA_KEY$b = 'bs.alert';\nconst EVENT_KEY$b = `.${DATA_KEY$b}`;\nconst DATA_API_KEY$8 = '.data-api';\nconst SELECTOR_DISMISS = '[data-bs-dismiss=\"alert\"]';\nconst EVENT_CLOSE = `close${EVENT_KEY$b}`;\nconst EVENT_CLOSED = `closed${EVENT_KEY$b}`;\nconst EVENT_CLICK_DATA_API$7 = `click${EVENT_KEY$b}${DATA_API_KEY$8}`;\nconst CLASS_NAME_ALERT = 'alert';\nconst CLASS_NAME_FADE$6 = 'fade';\nconst CLASS_NAME_SHOW$9 = 'show';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Alert extends BaseComponent {\n  // Getters\n  static get NAME() {\n    return NAME$c;\n  } // Public\n\n\n  close(element) {\n    const rootElement = element ? this._getRootElement(element) : this._element;\n\n    const customEvent = this._triggerCloseEvent(rootElement);\n\n    if (customEvent === null || customEvent.defaultPrevented) {\n      return;\n    }\n\n    this._removeElement(rootElement);\n  } // Private\n\n\n  _getRootElement(element) {\n    return getElementFromSelector(element) || element.closest(`.${CLASS_NAME_ALERT}`);\n  }\n\n  _triggerCloseEvent(element) {\n    return EventHandler.trigger(element, EVENT_CLOSE);\n  }\n\n  _removeElement(element) {\n    element.classList.remove(CLASS_NAME_SHOW$9);\n    const isAnimated = element.classList.contains(CLASS_NAME_FADE$6);\n\n    this._queueCallback(() => this._destroyElement(element), element, isAnimated);\n  }\n\n  _destroyElement(element) {\n    element.remove();\n    EventHandler.trigger(element, EVENT_CLOSED);\n  } // Static\n\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Alert.getOrCreateInstance(this);\n\n      if (config === 'close') {\n        data[config](this);\n      }\n    });\n  }\n\n  static handleDismiss(alertInstance) {\n    return function (event) {\n      if (event) {\n        event.preventDefault();\n      }\n\n      alertInstance.close(this);\n    };\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$7, SELECTOR_DISMISS, Alert.handleDismiss(new Alert()));\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Alert to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Alert);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): button.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$b = 'button';\nconst DATA_KEY$a = 'bs.button';\nconst EVENT_KEY$a = `.${DATA_KEY$a}`;\nconst DATA_API_KEY$7 = '.data-api';\nconst CLASS_NAME_ACTIVE$3 = 'active';\nconst SELECTOR_DATA_TOGGLE$5 = '[data-bs-toggle=\"button\"]';\nconst EVENT_CLICK_DATA_API$6 = `click${EVENT_KEY$a}${DATA_API_KEY$7}`;\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Button extends BaseComponent {\n  // Getters\n  static get NAME() {\n    return NAME$b;\n  } // Public\n\n\n  toggle() {\n    // Toggle class and sync the `aria-pressed` attribute with the return value of the `.toggle()` method\n    this._element.setAttribute('aria-pressed', this._element.classList.toggle(CLASS_NAME_ACTIVE$3));\n  } // Static\n\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Button.getOrCreateInstance(this);\n\n      if (config === 'toggle') {\n        data[config]();\n      }\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$6, SELECTOR_DATA_TOGGLE$5, event => {\n  event.preventDefault();\n  const button = event.target.closest(SELECTOR_DATA_TOGGLE$5);\n  const data = Button.getOrCreateInstance(button);\n  data.toggle();\n});\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Button to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Button);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): dom/manipulator.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\nfunction normalizeData(val) {\n  if (val === 'true') {\n    return true;\n  }\n\n  if (val === 'false') {\n    return false;\n  }\n\n  if (val === Number(val).toString()) {\n    return Number(val);\n  }\n\n  if (val === '' || val === 'null') {\n    return null;\n  }\n\n  return val;\n}\n\nfunction normalizeDataKey(key) {\n  return key.replace(/[A-Z]/g, chr => `-${chr.toLowerCase()}`);\n}\n\nconst Manipulator = {\n  setDataAttribute(element, key, value) {\n    element.setAttribute(`data-bs-${normalizeDataKey(key)}`, value);\n  },\n\n  removeDataAttribute(element, key) {\n    element.removeAttribute(`data-bs-${normalizeDataKey(key)}`);\n  },\n\n  getDataAttributes(element) {\n    if (!element) {\n      return {};\n    }\n\n    const attributes = {};\n    Object.keys(element.dataset).filter(key => key.startsWith('bs')).forEach(key => {\n      let pureKey = key.replace(/^bs/, '');\n      pureKey = pureKey.charAt(0).toLowerCase() + pureKey.slice(1, pureKey.length);\n      attributes[pureKey] = normalizeData(element.dataset[key]);\n    });\n    return attributes;\n  },\n\n  getDataAttribute(element, key) {\n    return normalizeData(element.getAttribute(`data-bs-${normalizeDataKey(key)}`));\n  },\n\n  offset(element) {\n    const rect = element.getBoundingClientRect();\n    return {\n      top: rect.top + document.body.scrollTop,\n      left: rect.left + document.body.scrollLeft\n    };\n  },\n\n  position(element) {\n    return {\n      top: element.offsetTop,\n      left: element.offsetLeft\n    };\n  }\n\n};\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): carousel.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$a = 'carousel';\nconst DATA_KEY$9 = 'bs.carousel';\nconst EVENT_KEY$9 = `.${DATA_KEY$9}`;\nconst DATA_API_KEY$6 = '.data-api';\nconst ARROW_LEFT_KEY = 'ArrowLeft';\nconst ARROW_RIGHT_KEY = 'ArrowRight';\nconst TOUCHEVENT_COMPAT_WAIT = 500; // Time for mouse compat events to fire after touch\n\nconst SWIPE_THRESHOLD = 40;\nconst Default$9 = {\n  interval: 5000,\n  keyboard: true,\n  slide: false,\n  pause: 'hover',\n  wrap: true,\n  touch: true\n};\nconst DefaultType$9 = {\n  interval: '(number|boolean)',\n  keyboard: 'boolean',\n  slide: '(boolean|string)',\n  pause: '(string|boolean)',\n  wrap: 'boolean',\n  touch: 'boolean'\n};\nconst ORDER_NEXT = 'next';\nconst ORDER_PREV = 'prev';\nconst DIRECTION_LEFT = 'left';\nconst DIRECTION_RIGHT = 'right';\nconst KEY_TO_DIRECTION = {\n  [ARROW_LEFT_KEY]: DIRECTION_RIGHT,\n  [ARROW_RIGHT_KEY]: DIRECTION_LEFT\n};\nconst EVENT_SLIDE = `slide${EVENT_KEY$9}`;\nconst EVENT_SLID = `slid${EVENT_KEY$9}`;\nconst EVENT_KEYDOWN = `keydown${EVENT_KEY$9}`;\nconst EVENT_MOUSEENTER = `mouseenter${EVENT_KEY$9}`;\nconst EVENT_MOUSELEAVE = `mouseleave${EVENT_KEY$9}`;\nconst EVENT_TOUCHSTART = `touchstart${EVENT_KEY$9}`;\nconst EVENT_TOUCHMOVE = `touchmove${EVENT_KEY$9}`;\nconst EVENT_TOUCHEND = `touchend${EVENT_KEY$9}`;\nconst EVENT_POINTERDOWN = `pointerdown${EVENT_KEY$9}`;\nconst EVENT_POINTERUP = `pointerup${EVENT_KEY$9}`;\nconst EVENT_DRAG_START = `dragstart${EVENT_KEY$9}`;\nconst EVENT_LOAD_DATA_API$2 = `load${EVENT_KEY$9}${DATA_API_KEY$6}`;\nconst EVENT_CLICK_DATA_API$5 = `click${EVENT_KEY$9}${DATA_API_KEY$6}`;\nconst CLASS_NAME_CAROUSEL = 'carousel';\nconst CLASS_NAME_ACTIVE$2 = 'active';\nconst CLASS_NAME_SLIDE = 'slide';\nconst CLASS_NAME_END = 'carousel-item-end';\nconst CLASS_NAME_START = 'carousel-item-start';\nconst CLASS_NAME_NEXT = 'carousel-item-next';\nconst CLASS_NAME_PREV = 'carousel-item-prev';\nconst CLASS_NAME_POINTER_EVENT = 'pointer-event';\nconst SELECTOR_ACTIVE$1 = '.active';\nconst SELECTOR_ACTIVE_ITEM = '.active.carousel-item';\nconst SELECTOR_ITEM = '.carousel-item';\nconst SELECTOR_ITEM_IMG = '.carousel-item img';\nconst SELECTOR_NEXT_PREV = '.carousel-item-next, .carousel-item-prev';\nconst SELECTOR_INDICATORS = '.carousel-indicators';\nconst SELECTOR_INDICATOR = '[data-bs-target]';\nconst SELECTOR_DATA_SLIDE = '[data-bs-slide], [data-bs-slide-to]';\nconst SELECTOR_DATA_RIDE = '[data-bs-ride=\"carousel\"]';\nconst POINTER_TYPE_TOUCH = 'touch';\nconst POINTER_TYPE_PEN = 'pen';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Carousel extends BaseComponent {\n  constructor(element, config) {\n    super(element);\n    this._items = null;\n    this._interval = null;\n    this._activeElement = null;\n    this._isPaused = false;\n    this._isSliding = false;\n    this.touchTimeout = null;\n    this.touchStartX = 0;\n    this.touchDeltaX = 0;\n    this._config = this._getConfig(config);\n    this._indicatorsElement = SelectorEngine.findOne(SELECTOR_INDICATORS, this._element);\n    this._touchSupported = 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0;\n    this._pointerEvent = Boolean(window.PointerEvent);\n\n    this._addEventListeners();\n  } // Getters\n\n\n  static get Default() {\n    return Default$9;\n  }\n\n  static get NAME() {\n    return NAME$a;\n  } // Public\n\n\n  next() {\n    this._slide(ORDER_NEXT);\n  }\n\n  nextWhenVisible() {\n    // Don't call next when the page isn't visible\n    // or the carousel or its parent isn't visible\n    if (!document.hidden && isVisible(this._element)) {\n      this.next();\n    }\n  }\n\n  prev() {\n    this._slide(ORDER_PREV);\n  }\n\n  pause(event) {\n    if (!event) {\n      this._isPaused = true;\n    }\n\n    if (SelectorEngine.findOne(SELECTOR_NEXT_PREV, this._element)) {\n      triggerTransitionEnd(this._element);\n      this.cycle(true);\n    }\n\n    clearInterval(this._interval);\n    this._interval = null;\n  }\n\n  cycle(event) {\n    if (!event) {\n      this._isPaused = false;\n    }\n\n    if (this._interval) {\n      clearInterval(this._interval);\n      this._interval = null;\n    }\n\n    if (this._config && this._config.interval && !this._isPaused) {\n      this._updateInterval();\n\n      this._interval = setInterval((document.visibilityState ? this.nextWhenVisible : this.next).bind(this), this._config.interval);\n    }\n  }\n\n  to(index) {\n    this._activeElement = SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element);\n\n    const activeIndex = this._getItemIndex(this._activeElement);\n\n    if (index > this._items.length - 1 || index < 0) {\n      return;\n    }\n\n    if (this._isSliding) {\n      EventHandler.one(this._element, EVENT_SLID, () => this.to(index));\n      return;\n    }\n\n    if (activeIndex === index) {\n      this.pause();\n      this.cycle();\n      return;\n    }\n\n    const order = index > activeIndex ? ORDER_NEXT : ORDER_PREV;\n\n    this._slide(order, this._items[index]);\n  } // Private\n\n\n  _getConfig(config) {\n    config = { ...Default$9,\n      ...Manipulator.getDataAttributes(this._element),\n      ...(typeof config === 'object' ? config : {})\n    };\n    typeCheckConfig(NAME$a, config, DefaultType$9);\n    return config;\n  }\n\n  _handleSwipe() {\n    const absDeltax = Math.abs(this.touchDeltaX);\n\n    if (absDeltax <= SWIPE_THRESHOLD) {\n      return;\n    }\n\n    const direction = absDeltax / this.touchDeltaX;\n    this.touchDeltaX = 0;\n\n    if (!direction) {\n      return;\n    }\n\n    this._slide(direction > 0 ? DIRECTION_RIGHT : DIRECTION_LEFT);\n  }\n\n  _addEventListeners() {\n    if (this._config.keyboard) {\n      EventHandler.on(this._element, EVENT_KEYDOWN, event => this._keydown(event));\n    }\n\n    if (this._config.pause === 'hover') {\n      EventHandler.on(this._element, EVENT_MOUSEENTER, event => this.pause(event));\n      EventHandler.on(this._element, EVENT_MOUSELEAVE, event => this.cycle(event));\n    }\n\n    if (this._config.touch && this._touchSupported) {\n      this._addTouchEventListeners();\n    }\n  }\n\n  _addTouchEventListeners() {\n    const start = event => {\n      if (this._pointerEvent && (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH)) {\n        this.touchStartX = event.clientX;\n      } else if (!this._pointerEvent) {\n        this.touchStartX = event.touches[0].clientX;\n      }\n    };\n\n    const move = event => {\n      // ensure swiping with one touch and not pinching\n      this.touchDeltaX = event.touches && event.touches.length > 1 ? 0 : event.touches[0].clientX - this.touchStartX;\n    };\n\n    const end = event => {\n      if (this._pointerEvent && (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH)) {\n        this.touchDeltaX = event.clientX - this.touchStartX;\n      }\n\n      this._handleSwipe();\n\n      if (this._config.pause === 'hover') {\n        // If it's a touch-enabled device, mouseenter/leave are fired as\n        // part of the mouse compatibility events on first tap - the carousel\n        // would stop cycling until user tapped out of it;\n        // here, we listen for touchend, explicitly pause the carousel\n        // (as if it's the second time we tap on it, mouseenter compat event\n        // is NOT fired) and after a timeout (to allow for mouse compatibility\n        // events to fire) we explicitly restart cycling\n        this.pause();\n\n        if (this.touchTimeout) {\n          clearTimeout(this.touchTimeout);\n        }\n\n        this.touchTimeout = setTimeout(event => this.cycle(event), TOUCHEVENT_COMPAT_WAIT + this._config.interval);\n      }\n    };\n\n    SelectorEngine.find(SELECTOR_ITEM_IMG, this._element).forEach(itemImg => {\n      EventHandler.on(itemImg, EVENT_DRAG_START, e => e.preventDefault());\n    });\n\n    if (this._pointerEvent) {\n      EventHandler.on(this._element, EVENT_POINTERDOWN, event => start(event));\n      EventHandler.on(this._element, EVENT_POINTERUP, event => end(event));\n\n      this._element.classList.add(CLASS_NAME_POINTER_EVENT);\n    } else {\n      EventHandler.on(this._element, EVENT_TOUCHSTART, event => start(event));\n      EventHandler.on(this._element, EVENT_TOUCHMOVE, event => move(event));\n      EventHandler.on(this._element, EVENT_TOUCHEND, event => end(event));\n    }\n  }\n\n  _keydown(event) {\n    if (/input|textarea/i.test(event.target.tagName)) {\n      return;\n    }\n\n    const direction = KEY_TO_DIRECTION[event.key];\n\n    if (direction) {\n      event.preventDefault();\n\n      this._slide(direction);\n    }\n  }\n\n  _getItemIndex(element) {\n    this._items = element && element.parentNode ? SelectorEngine.find(SELECTOR_ITEM, element.parentNode) : [];\n    return this._items.indexOf(element);\n  }\n\n  _getItemByOrder(order, activeElement) {\n    const isNext = order === ORDER_NEXT;\n    return getNextActiveElement(this._items, activeElement, isNext, this._config.wrap);\n  }\n\n  _triggerSlideEvent(relatedTarget, eventDirectionName) {\n    const targetIndex = this._getItemIndex(relatedTarget);\n\n    const fromIndex = this._getItemIndex(SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element));\n\n    return EventHandler.trigger(this._element, EVENT_SLIDE, {\n      relatedTarget,\n      direction: eventDirectionName,\n      from: fromIndex,\n      to: targetIndex\n    });\n  }\n\n  _setActiveIndicatorElement(element) {\n    if (this._indicatorsElement) {\n      const activeIndicator = SelectorEngine.findOne(SELECTOR_ACTIVE$1, this._indicatorsElement);\n      activeIndicator.classList.remove(CLASS_NAME_ACTIVE$2);\n      activeIndicator.removeAttribute('aria-current');\n      const indicators = SelectorEngine.find(SELECTOR_INDICATOR, this._indicatorsElement);\n\n      for (let i = 0; i < indicators.length; i++) {\n        if (Number.parseInt(indicators[i].getAttribute('data-bs-slide-to'), 10) === this._getItemIndex(element)) {\n          indicators[i].classList.add(CLASS_NAME_ACTIVE$2);\n          indicators[i].setAttribute('aria-current', 'true');\n          break;\n        }\n      }\n    }\n  }\n\n  _updateInterval() {\n    const element = this._activeElement || SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element);\n\n    if (!element) {\n      return;\n    }\n\n    const elementInterval = Number.parseInt(element.getAttribute('data-bs-interval'), 10);\n\n    if (elementInterval) {\n      this._config.defaultInterval = this._config.defaultInterval || this._config.interval;\n      this._config.interval = elementInterval;\n    } else {\n      this._config.interval = this._config.defaultInterval || this._config.interval;\n    }\n  }\n\n  _slide(directionOrOrder, element) {\n    const order = this._directionToOrder(directionOrOrder);\n\n    const activeElement = SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element);\n\n    const activeElementIndex = this._getItemIndex(activeElement);\n\n    const nextElement = element || this._getItemByOrder(order, activeElement);\n\n    const nextElementIndex = this._getItemIndex(nextElement);\n\n    const isCycling = Boolean(this._interval);\n    const isNext = order === ORDER_NEXT;\n    const directionalClassName = isNext ? CLASS_NAME_START : CLASS_NAME_END;\n    const orderClassName = isNext ? CLASS_NAME_NEXT : CLASS_NAME_PREV;\n\n    const eventDirectionName = this._orderToDirection(order);\n\n    if (nextElement && nextElement.classList.contains(CLASS_NAME_ACTIVE$2)) {\n      this._isSliding = false;\n      return;\n    }\n\n    if (this._isSliding) {\n      return;\n    }\n\n    const slideEvent = this._triggerSlideEvent(nextElement, eventDirectionName);\n\n    if (slideEvent.defaultPrevented) {\n      return;\n    }\n\n    if (!activeElement || !nextElement) {\n      // Some weirdness is happening, so we bail\n      return;\n    }\n\n    this._isSliding = true;\n\n    if (isCycling) {\n      this.pause();\n    }\n\n    this._setActiveIndicatorElement(nextElement);\n\n    this._activeElement = nextElement;\n\n    const triggerSlidEvent = () => {\n      EventHandler.trigger(this._element, EVENT_SLID, {\n        relatedTarget: nextElement,\n        direction: eventDirectionName,\n        from: activeElementIndex,\n        to: nextElementIndex\n      });\n    };\n\n    if (this._element.classList.contains(CLASS_NAME_SLIDE)) {\n      nextElement.classList.add(orderClassName);\n      reflow(nextElement);\n      activeElement.classList.add(directionalClassName);\n      nextElement.classList.add(directionalClassName);\n\n      const completeCallBack = () => {\n        nextElement.classList.remove(directionalClassName, orderClassName);\n        nextElement.classList.add(CLASS_NAME_ACTIVE$2);\n        activeElement.classList.remove(CLASS_NAME_ACTIVE$2, orderClassName, directionalClassName);\n        this._isSliding = false;\n        setTimeout(triggerSlidEvent, 0);\n      };\n\n      this._queueCallback(completeCallBack, activeElement, true);\n    } else {\n      activeElement.classList.remove(CLASS_NAME_ACTIVE$2);\n      nextElement.classList.add(CLASS_NAME_ACTIVE$2);\n      this._isSliding = false;\n      triggerSlidEvent();\n    }\n\n    if (isCycling) {\n      this.cycle();\n    }\n  }\n\n  _directionToOrder(direction) {\n    if (![DIRECTION_RIGHT, DIRECTION_LEFT].includes(direction)) {\n      return direction;\n    }\n\n    if (isRTL()) {\n      return direction === DIRECTION_LEFT ? ORDER_PREV : ORDER_NEXT;\n    }\n\n    return direction === DIRECTION_LEFT ? ORDER_NEXT : ORDER_PREV;\n  }\n\n  _orderToDirection(order) {\n    if (![ORDER_NEXT, ORDER_PREV].includes(order)) {\n      return order;\n    }\n\n    if (isRTL()) {\n      return order === ORDER_PREV ? DIRECTION_LEFT : DIRECTION_RIGHT;\n    }\n\n    return order === ORDER_PREV ? DIRECTION_RIGHT : DIRECTION_LEFT;\n  } // Static\n\n\n  static carouselInterface(element, config) {\n    const data = Carousel.getOrCreateInstance(element, config);\n    let {\n      _config\n    } = data;\n\n    if (typeof config === 'object') {\n      _config = { ..._config,\n        ...config\n      };\n    }\n\n    const action = typeof config === 'string' ? config : _config.slide;\n\n    if (typeof config === 'number') {\n      data.to(config);\n    } else if (typeof action === 'string') {\n      if (typeof data[action] === 'undefined') {\n        throw new TypeError(`No method named \"${action}\"`);\n      }\n\n      data[action]();\n    } else if (_config.interval && _config.ride) {\n      data.pause();\n      data.cycle();\n    }\n  }\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      Carousel.carouselInterface(this, config);\n    });\n  }\n\n  static dataApiClickHandler(event) {\n    const target = getElementFromSelector(this);\n\n    if (!target || !target.classList.contains(CLASS_NAME_CAROUSEL)) {\n      return;\n    }\n\n    const config = { ...Manipulator.getDataAttributes(target),\n      ...Manipulator.getDataAttributes(this)\n    };\n    const slideIndex = this.getAttribute('data-bs-slide-to');\n\n    if (slideIndex) {\n      config.interval = false;\n    }\n\n    Carousel.carouselInterface(target, config);\n\n    if (slideIndex) {\n      Carousel.getInstance(target).to(slideIndex);\n    }\n\n    event.preventDefault();\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$5, SELECTOR_DATA_SLIDE, Carousel.dataApiClickHandler);\nEventHandler.on(window, EVENT_LOAD_DATA_API$2, () => {\n  const carousels = SelectorEngine.find(SELECTOR_DATA_RIDE);\n\n  for (let i = 0, len = carousels.length; i < len; i++) {\n    Carousel.carouselInterface(carousels[i], Carousel.getInstance(carousels[i]));\n  }\n});\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Carousel to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Carousel);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): collapse.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$9 = 'collapse';\nconst DATA_KEY$8 = 'bs.collapse';\nconst EVENT_KEY$8 = `.${DATA_KEY$8}`;\nconst DATA_API_KEY$5 = '.data-api';\nconst Default$8 = {\n  toggle: true,\n  parent: ''\n};\nconst DefaultType$8 = {\n  toggle: 'boolean',\n  parent: '(string|element)'\n};\nconst EVENT_SHOW$5 = `show${EVENT_KEY$8}`;\nconst EVENT_SHOWN$5 = `shown${EVENT_KEY$8}`;\nconst EVENT_HIDE$5 = `hide${EVENT_KEY$8}`;\nconst EVENT_HIDDEN$5 = `hidden${EVENT_KEY$8}`;\nconst EVENT_CLICK_DATA_API$4 = `click${EVENT_KEY$8}${DATA_API_KEY$5}`;\nconst CLASS_NAME_SHOW$8 = 'show';\nconst CLASS_NAME_COLLAPSE = 'collapse';\nconst CLASS_NAME_COLLAPSING = 'collapsing';\nconst CLASS_NAME_COLLAPSED = 'collapsed';\nconst WIDTH = 'width';\nconst HEIGHT = 'height';\nconst SELECTOR_ACTIVES = '.show, .collapsing';\nconst SELECTOR_DATA_TOGGLE$4 = '[data-bs-toggle=\"collapse\"]';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Collapse extends BaseComponent {\n  constructor(element, config) {\n    super(element);\n    this._isTransitioning = false;\n    this._config = this._getConfig(config);\n    this._triggerArray = SelectorEngine.find(`${SELECTOR_DATA_TOGGLE$4}[href=\"#${this._element.id}\"],` + `${SELECTOR_DATA_TOGGLE$4}[data-bs-target=\"#${this._element.id}\"]`);\n    const toggleList = SelectorEngine.find(SELECTOR_DATA_TOGGLE$4);\n\n    for (let i = 0, len = toggleList.length; i < len; i++) {\n      const elem = toggleList[i];\n      const selector = getSelectorFromElement(elem);\n      const filterElement = SelectorEngine.find(selector).filter(foundElem => foundElem === this._element);\n\n      if (selector !== null && filterElement.length) {\n        this._selector = selector;\n\n        this._triggerArray.push(elem);\n      }\n    }\n\n    this._parent = this._config.parent ? this._getParent() : null;\n\n    if (!this._config.parent) {\n      this._addAriaAndCollapsedClass(this._element, this._triggerArray);\n    }\n\n    if (this._config.toggle) {\n      this.toggle();\n    }\n  } // Getters\n\n\n  static get Default() {\n    return Default$8;\n  }\n\n  static get NAME() {\n    return NAME$9;\n  } // Public\n\n\n  toggle() {\n    if (this._element.classList.contains(CLASS_NAME_SHOW$8)) {\n      this.hide();\n    } else {\n      this.show();\n    }\n  }\n\n  show() {\n    if (this._isTransitioning || this._element.classList.contains(CLASS_NAME_SHOW$8)) {\n      return;\n    }\n\n    let actives;\n    let activesData;\n\n    if (this._parent) {\n      actives = SelectorEngine.find(SELECTOR_ACTIVES, this._parent).filter(elem => {\n        if (typeof this._config.parent === 'string') {\n          return elem.getAttribute('data-bs-parent') === this._config.parent;\n        }\n\n        return elem.classList.contains(CLASS_NAME_COLLAPSE);\n      });\n\n      if (actives.length === 0) {\n        actives = null;\n      }\n    }\n\n    const container = SelectorEngine.findOne(this._selector);\n\n    if (actives) {\n      const tempActiveData = actives.find(elem => container !== elem);\n      activesData = tempActiveData ? Collapse.getInstance(tempActiveData) : null;\n\n      if (activesData && activesData._isTransitioning) {\n        return;\n      }\n    }\n\n    const startEvent = EventHandler.trigger(this._element, EVENT_SHOW$5);\n\n    if (startEvent.defaultPrevented) {\n      return;\n    }\n\n    if (actives) {\n      actives.forEach(elemActive => {\n        if (container !== elemActive) {\n          Collapse.collapseInterface(elemActive, 'hide');\n        }\n\n        if (!activesData) {\n          Data.set(elemActive, DATA_KEY$8, null);\n        }\n      });\n    }\n\n    const dimension = this._getDimension();\n\n    this._element.classList.remove(CLASS_NAME_COLLAPSE);\n\n    this._element.classList.add(CLASS_NAME_COLLAPSING);\n\n    this._element.style[dimension] = 0;\n\n    if (this._triggerArray.length) {\n      this._triggerArray.forEach(element => {\n        element.classList.remove(CLASS_NAME_COLLAPSED);\n        element.setAttribute('aria-expanded', true);\n      });\n    }\n\n    this.setTransitioning(true);\n\n    const complete = () => {\n      this._element.classList.remove(CLASS_NAME_COLLAPSING);\n\n      this._element.classList.add(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$8);\n\n      this._element.style[dimension] = '';\n      this.setTransitioning(false);\n      EventHandler.trigger(this._element, EVENT_SHOWN$5);\n    };\n\n    const capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1);\n    const scrollSize = `scroll${capitalizedDimension}`;\n\n    this._queueCallback(complete, this._element, true);\n\n    this._element.style[dimension] = `${this._element[scrollSize]}px`;\n  }\n\n  hide() {\n    if (this._isTransitioning || !this._element.classList.contains(CLASS_NAME_SHOW$8)) {\n      return;\n    }\n\n    const startEvent = EventHandler.trigger(this._element, EVENT_HIDE$5);\n\n    if (startEvent.defaultPrevented) {\n      return;\n    }\n\n    const dimension = this._getDimension();\n\n    this._element.style[dimension] = `${this._element.getBoundingClientRect()[dimension]}px`;\n    reflow(this._element);\n\n    this._element.classList.add(CLASS_NAME_COLLAPSING);\n\n    this._element.classList.remove(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$8);\n\n    const triggerArrayLength = this._triggerArray.length;\n\n    if (triggerArrayLength > 0) {\n      for (let i = 0; i < triggerArrayLength; i++) {\n        const trigger = this._triggerArray[i];\n        const elem = getElementFromSelector(trigger);\n\n        if (elem && !elem.classList.contains(CLASS_NAME_SHOW$8)) {\n          trigger.classList.add(CLASS_NAME_COLLAPSED);\n          trigger.setAttribute('aria-expanded', false);\n        }\n      }\n    }\n\n    this.setTransitioning(true);\n\n    const complete = () => {\n      this.setTransitioning(false);\n\n      this._element.classList.remove(CLASS_NAME_COLLAPSING);\n\n      this._element.classList.add(CLASS_NAME_COLLAPSE);\n\n      EventHandler.trigger(this._element, EVENT_HIDDEN$5);\n    };\n\n    this._element.style[dimension] = '';\n\n    this._queueCallback(complete, this._element, true);\n  }\n\n  setTransitioning(isTransitioning) {\n    this._isTransitioning = isTransitioning;\n  } // Private\n\n\n  _getConfig(config) {\n    config = { ...Default$8,\n      ...config\n    };\n    config.toggle = Boolean(config.toggle); // Coerce string values\n\n    typeCheckConfig(NAME$9, config, DefaultType$8);\n    return config;\n  }\n\n  _getDimension() {\n    return this._element.classList.contains(WIDTH) ? WIDTH : HEIGHT;\n  }\n\n  _getParent() {\n    let {\n      parent\n    } = this._config;\n    parent = getElement(parent);\n    const selector = `${SELECTOR_DATA_TOGGLE$4}[data-bs-parent=\"${parent}\"]`;\n    SelectorEngine.find(selector, parent).forEach(element => {\n      const selected = getElementFromSelector(element);\n\n      this._addAriaAndCollapsedClass(selected, [element]);\n    });\n    return parent;\n  }\n\n  _addAriaAndCollapsedClass(element, triggerArray) {\n    if (!element || !triggerArray.length) {\n      return;\n    }\n\n    const isOpen = element.classList.contains(CLASS_NAME_SHOW$8);\n    triggerArray.forEach(elem => {\n      if (isOpen) {\n        elem.classList.remove(CLASS_NAME_COLLAPSED);\n      } else {\n        elem.classList.add(CLASS_NAME_COLLAPSED);\n      }\n\n      elem.setAttribute('aria-expanded', isOpen);\n    });\n  } // Static\n\n\n  static collapseInterface(element, config) {\n    let data = Collapse.getInstance(element);\n    const _config = { ...Default$8,\n      ...Manipulator.getDataAttributes(element),\n      ...(typeof config === 'object' && config ? config : {})\n    };\n\n    if (!data && _config.toggle && typeof config === 'string' && /show|hide/.test(config)) {\n      _config.toggle = false;\n    }\n\n    if (!data) {\n      data = new Collapse(element, _config);\n    }\n\n    if (typeof config === 'string') {\n      if (typeof data[config] === 'undefined') {\n        throw new TypeError(`No method named \"${config}\"`);\n      }\n\n      data[config]();\n    }\n  }\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      Collapse.collapseInterface(this, config);\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$4, SELECTOR_DATA_TOGGLE$4, function (event) {\n  // preventDefault only for <a> elements (which change the URL) not inside the collapsible element\n  if (event.target.tagName === 'A' || event.delegateTarget && event.delegateTarget.tagName === 'A') {\n    event.preventDefault();\n  }\n\n  const triggerData = Manipulator.getDataAttributes(this);\n  const selector = getSelectorFromElement(this);\n  const selectorElements = SelectorEngine.find(selector);\n  selectorElements.forEach(element => {\n    const data = Collapse.getInstance(element);\n    let config;\n\n    if (data) {\n      // update parent attribute\n      if (data._parent === null && typeof triggerData.parent === 'string') {\n        data._config.parent = triggerData.parent;\n        data._parent = data._getParent();\n      }\n\n      config = 'toggle';\n    } else {\n      config = triggerData;\n    }\n\n    Collapse.collapseInterface(element, config);\n  });\n});\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Collapse to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Collapse);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): dropdown.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$8 = 'dropdown';\nconst DATA_KEY$7 = 'bs.dropdown';\nconst EVENT_KEY$7 = `.${DATA_KEY$7}`;\nconst DATA_API_KEY$4 = '.data-api';\nconst ESCAPE_KEY$2 = 'Escape';\nconst SPACE_KEY = 'Space';\nconst TAB_KEY = 'Tab';\nconst ARROW_UP_KEY = 'ArrowUp';\nconst ARROW_DOWN_KEY = 'ArrowDown';\nconst RIGHT_MOUSE_BUTTON = 2; // MouseEvent.button value for the secondary button, usually the right button\n\nconst REGEXP_KEYDOWN = new RegExp(`${ARROW_UP_KEY}|${ARROW_DOWN_KEY}|${ESCAPE_KEY$2}`);\nconst EVENT_HIDE$4 = `hide${EVENT_KEY$7}`;\nconst EVENT_HIDDEN$4 = `hidden${EVENT_KEY$7}`;\nconst EVENT_SHOW$4 = `show${EVENT_KEY$7}`;\nconst EVENT_SHOWN$4 = `shown${EVENT_KEY$7}`;\nconst EVENT_CLICK = `click${EVENT_KEY$7}`;\nconst EVENT_CLICK_DATA_API$3 = `click${EVENT_KEY$7}${DATA_API_KEY$4}`;\nconst EVENT_KEYDOWN_DATA_API = `keydown${EVENT_KEY$7}${DATA_API_KEY$4}`;\nconst EVENT_KEYUP_DATA_API = `keyup${EVENT_KEY$7}${DATA_API_KEY$4}`;\nconst CLASS_NAME_SHOW$7 = 'show';\nconst CLASS_NAME_DROPUP = 'dropup';\nconst CLASS_NAME_DROPEND = 'dropend';\nconst CLASS_NAME_DROPSTART = 'dropstart';\nconst CLASS_NAME_NAVBAR = 'navbar';\nconst SELECTOR_DATA_TOGGLE$3 = '[data-bs-toggle=\"dropdown\"]';\nconst SELECTOR_MENU = '.dropdown-menu';\nconst SELECTOR_NAVBAR_NAV = '.navbar-nav';\nconst SELECTOR_VISIBLE_ITEMS = '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)';\nconst PLACEMENT_TOP = isRTL() ? 'top-end' : 'top-start';\nconst PLACEMENT_TOPEND = isRTL() ? 'top-start' : 'top-end';\nconst PLACEMENT_BOTTOM = isRTL() ? 'bottom-end' : 'bottom-start';\nconst PLACEMENT_BOTTOMEND = isRTL() ? 'bottom-start' : 'bottom-end';\nconst PLACEMENT_RIGHT = isRTL() ? 'left-start' : 'right-start';\nconst PLACEMENT_LEFT = isRTL() ? 'right-start' : 'left-start';\nconst Default$7 = {\n  offset: [0, 2],\n  boundary: 'clippingParents',\n  reference: 'toggle',\n  display: 'dynamic',\n  popperConfig: null,\n  autoClose: true\n};\nconst DefaultType$7 = {\n  offset: '(array|string|function)',\n  boundary: '(string|element)',\n  reference: '(string|element|object)',\n  display: 'string',\n  popperConfig: '(null|object|function)',\n  autoClose: '(boolean|string)'\n};\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Dropdown extends BaseComponent {\n  constructor(element, config) {\n    super(element);\n    this._popper = null;\n    this._config = this._getConfig(config);\n    this._menu = this._getMenuElement();\n    this._inNavbar = this._detectNavbar();\n\n    this._addEventListeners();\n  } // Getters\n\n\n  static get Default() {\n    return Default$7;\n  }\n\n  static get DefaultType() {\n    return DefaultType$7;\n  }\n\n  static get NAME() {\n    return NAME$8;\n  } // Public\n\n\n  toggle() {\n    if (isDisabled(this._element)) {\n      return;\n    }\n\n    const isActive = this._element.classList.contains(CLASS_NAME_SHOW$7);\n\n    if (isActive) {\n      this.hide();\n      return;\n    }\n\n    this.show();\n  }\n\n  show() {\n    if (isDisabled(this._element) || this._menu.classList.contains(CLASS_NAME_SHOW$7)) {\n      return;\n    }\n\n    const parent = Dropdown.getParentFromElement(this._element);\n    const relatedTarget = {\n      relatedTarget: this._element\n    };\n    const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$4, relatedTarget);\n\n    if (showEvent.defaultPrevented) {\n      return;\n    } // Totally disable Popper for Dropdowns in Navbar\n\n\n    if (this._inNavbar) {\n      Manipulator.setDataAttribute(this._menu, 'popper', 'none');\n    } else {\n      if (typeof Popper === 'undefined') {\n        throw new TypeError('Bootstrap\\'s dropdowns require Popper (https://popper.js.org)');\n      }\n\n      let referenceElement = this._element;\n\n      if (this._config.reference === 'parent') {\n        referenceElement = parent;\n      } else if (isElement(this._config.reference)) {\n        referenceElement = getElement(this._config.reference);\n      } else if (typeof this._config.reference === 'object') {\n        referenceElement = this._config.reference;\n      }\n\n      const popperConfig = this._getPopperConfig();\n\n      const isDisplayStatic = popperConfig.modifiers.find(modifier => modifier.name === 'applyStyles' && modifier.enabled === false);\n      this._popper = Popper.createPopper(referenceElement, this._menu, popperConfig);\n\n      if (isDisplayStatic) {\n        Manipulator.setDataAttribute(this._menu, 'popper', 'static');\n      }\n    } // If this is a touch-enabled device we add extra\n    // empty mouseover listeners to the body's immediate children;\n    // only needed because of broken event delegation on iOS\n    // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n\n\n    if ('ontouchstart' in document.documentElement && !parent.closest(SELECTOR_NAVBAR_NAV)) {\n      [].concat(...document.body.children).forEach(elem => EventHandler.on(elem, 'mouseover', noop));\n    }\n\n    this._element.focus();\n\n    this._element.setAttribute('aria-expanded', true);\n\n    this._menu.classList.toggle(CLASS_NAME_SHOW$7);\n\n    this._element.classList.toggle(CLASS_NAME_SHOW$7);\n\n    EventHandler.trigger(this._element, EVENT_SHOWN$4, relatedTarget);\n  }\n\n  hide() {\n    if (isDisabled(this._element) || !this._menu.classList.contains(CLASS_NAME_SHOW$7)) {\n      return;\n    }\n\n    const relatedTarget = {\n      relatedTarget: this._element\n    };\n\n    this._completeHide(relatedTarget);\n  }\n\n  dispose() {\n    if (this._popper) {\n      this._popper.destroy();\n    }\n\n    super.dispose();\n  }\n\n  update() {\n    this._inNavbar = this._detectNavbar();\n\n    if (this._popper) {\n      this._popper.update();\n    }\n  } // Private\n\n\n  _addEventListeners() {\n    EventHandler.on(this._element, EVENT_CLICK, event => {\n      event.preventDefault();\n      this.toggle();\n    });\n  }\n\n  _completeHide(relatedTarget) {\n    const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$4, relatedTarget);\n\n    if (hideEvent.defaultPrevented) {\n      return;\n    } // If this is a touch-enabled device we remove the extra\n    // empty mouseover listeners we added for iOS support\n\n\n    if ('ontouchstart' in document.documentElement) {\n      [].concat(...document.body.children).forEach(elem => EventHandler.off(elem, 'mouseover', noop));\n    }\n\n    if (this._popper) {\n      this._popper.destroy();\n    }\n\n    this._menu.classList.remove(CLASS_NAME_SHOW$7);\n\n    this._element.classList.remove(CLASS_NAME_SHOW$7);\n\n    this._element.setAttribute('aria-expanded', 'false');\n\n    Manipulator.removeDataAttribute(this._menu, 'popper');\n    EventHandler.trigger(this._element, EVENT_HIDDEN$4, relatedTarget);\n  }\n\n  _getConfig(config) {\n    config = { ...this.constructor.Default,\n      ...Manipulator.getDataAttributes(this._element),\n      ...config\n    };\n    typeCheckConfig(NAME$8, config, this.constructor.DefaultType);\n\n    if (typeof config.reference === 'object' && !isElement(config.reference) && typeof config.reference.getBoundingClientRect !== 'function') {\n      // Popper virtual elements require a getBoundingClientRect method\n      throw new TypeError(`${NAME$8.toUpperCase()}: Option \"reference\" provided type \"object\" without a required \"getBoundingClientRect\" method.`);\n    }\n\n    return config;\n  }\n\n  _getMenuElement() {\n    return SelectorEngine.next(this._element, SELECTOR_MENU)[0];\n  }\n\n  _getPlacement() {\n    const parentDropdown = this._element.parentNode;\n\n    if (parentDropdown.classList.contains(CLASS_NAME_DROPEND)) {\n      return PLACEMENT_RIGHT;\n    }\n\n    if (parentDropdown.classList.contains(CLASS_NAME_DROPSTART)) {\n      return PLACEMENT_LEFT;\n    } // We need to trim the value because custom properties can also include spaces\n\n\n    const isEnd = getComputedStyle(this._menu).getPropertyValue('--bs-position').trim() === 'end';\n\n    if (parentDropdown.classList.contains(CLASS_NAME_DROPUP)) {\n      return isEnd ? PLACEMENT_TOPEND : PLACEMENT_TOP;\n    }\n\n    return isEnd ? PLACEMENT_BOTTOMEND : PLACEMENT_BOTTOM;\n  }\n\n  _detectNavbar() {\n    return this._element.closest(`.${CLASS_NAME_NAVBAR}`) !== null;\n  }\n\n  _getOffset() {\n    const {\n      offset\n    } = this._config;\n\n    if (typeof offset === 'string') {\n      return offset.split(',').map(val => Number.parseInt(val, 10));\n    }\n\n    if (typeof offset === 'function') {\n      return popperData => offset(popperData, this._element);\n    }\n\n    return offset;\n  }\n\n  _getPopperConfig() {\n    const defaultBsPopperConfig = {\n      placement: this._getPlacement(),\n      modifiers: [{\n        name: 'preventOverflow',\n        options: {\n          boundary: this._config.boundary\n        }\n      }, {\n        name: 'offset',\n        options: {\n          offset: this._getOffset()\n        }\n      }]\n    }; // Disable Popper if we have a static display\n\n    if (this._config.display === 'static') {\n      defaultBsPopperConfig.modifiers = [{\n        name: 'applyStyles',\n        enabled: false\n      }];\n    }\n\n    return { ...defaultBsPopperConfig,\n      ...(typeof this._config.popperConfig === 'function' ? this._config.popperConfig(defaultBsPopperConfig) : this._config.popperConfig)\n    };\n  }\n\n  _selectMenuItem({\n    key,\n    target\n  }) {\n    const items = SelectorEngine.find(SELECTOR_VISIBLE_ITEMS, this._menu).filter(isVisible);\n\n    if (!items.length) {\n      return;\n    } // if target isn't included in items (e.g. when expanding the dropdown)\n    // allow cycling to get the last item in case key equals ARROW_UP_KEY\n\n\n    getNextActiveElement(items, target, key === ARROW_DOWN_KEY, !items.includes(target)).focus();\n  } // Static\n\n\n  static dropdownInterface(element, config) {\n    const data = Dropdown.getOrCreateInstance(element, config);\n\n    if (typeof config === 'string') {\n      if (typeof data[config] === 'undefined') {\n        throw new TypeError(`No method named \"${config}\"`);\n      }\n\n      data[config]();\n    }\n  }\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      Dropdown.dropdownInterface(this, config);\n    });\n  }\n\n  static clearMenus(event) {\n    if (event && (event.button === RIGHT_MOUSE_BUTTON || event.type === 'keyup' && event.key !== TAB_KEY)) {\n      return;\n    }\n\n    const toggles = SelectorEngine.find(SELECTOR_DATA_TOGGLE$3);\n\n    for (let i = 0, len = toggles.length; i < len; i++) {\n      const context = Dropdown.getInstance(toggles[i]);\n\n      if (!context || context._config.autoClose === false) {\n        continue;\n      }\n\n      if (!context._element.classList.contains(CLASS_NAME_SHOW$7)) {\n        continue;\n      }\n\n      const relatedTarget = {\n        relatedTarget: context._element\n      };\n\n      if (event) {\n        const composedPath = event.composedPath();\n        const isMenuTarget = composedPath.includes(context._menu);\n\n        if (composedPath.includes(context._element) || context._config.autoClose === 'inside' && !isMenuTarget || context._config.autoClose === 'outside' && isMenuTarget) {\n          continue;\n        } // Tab navigation through the dropdown menu or events from contained inputs shouldn't close the menu\n\n\n        if (context._menu.contains(event.target) && (event.type === 'keyup' && event.key === TAB_KEY || /input|select|option|textarea|form/i.test(event.target.tagName))) {\n          continue;\n        }\n\n        if (event.type === 'click') {\n          relatedTarget.clickEvent = event;\n        }\n      }\n\n      context._completeHide(relatedTarget);\n    }\n  }\n\n  static getParentFromElement(element) {\n    return getElementFromSelector(element) || element.parentNode;\n  }\n\n  static dataApiKeydownHandler(event) {\n    // If not input/textarea:\n    //  - And not a key in REGEXP_KEYDOWN => not a dropdown command\n    // If input/textarea:\n    //  - If space key => not a dropdown command\n    //  - If key is other than escape\n    //    - If key is not up or down => not a dropdown command\n    //    - If trigger inside the menu => not a dropdown command\n    if (/input|textarea/i.test(event.target.tagName) ? event.key === SPACE_KEY || event.key !== ESCAPE_KEY$2 && (event.key !== ARROW_DOWN_KEY && event.key !== ARROW_UP_KEY || event.target.closest(SELECTOR_MENU)) : !REGEXP_KEYDOWN.test(event.key)) {\n      return;\n    }\n\n    const isActive = this.classList.contains(CLASS_NAME_SHOW$7);\n\n    if (!isActive && event.key === ESCAPE_KEY$2) {\n      return;\n    }\n\n    event.preventDefault();\n    event.stopPropagation();\n\n    if (isDisabled(this)) {\n      return;\n    }\n\n    const getToggleButton = () => this.matches(SELECTOR_DATA_TOGGLE$3) ? this : SelectorEngine.prev(this, SELECTOR_DATA_TOGGLE$3)[0];\n\n    if (event.key === ESCAPE_KEY$2) {\n      getToggleButton().focus();\n      Dropdown.clearMenus();\n      return;\n    }\n\n    if (event.key === ARROW_UP_KEY || event.key === ARROW_DOWN_KEY) {\n      if (!isActive) {\n        getToggleButton().click();\n      }\n\n      Dropdown.getInstance(getToggleButton())._selectMenuItem(event);\n\n      return;\n    }\n\n    if (!isActive || event.key === SPACE_KEY) {\n      Dropdown.clearMenus();\n    }\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_DATA_TOGGLE$3, Dropdown.dataApiKeydownHandler);\nEventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown.dataApiKeydownHandler);\nEventHandler.on(document, EVENT_CLICK_DATA_API$3, Dropdown.clearMenus);\nEventHandler.on(document, EVENT_KEYUP_DATA_API, Dropdown.clearMenus);\nEventHandler.on(document, EVENT_CLICK_DATA_API$3, SELECTOR_DATA_TOGGLE$3, function (event) {\n  event.preventDefault();\n  Dropdown.dropdownInterface(this);\n});\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Dropdown to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Dropdown);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): util/scrollBar.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\nconst SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top';\nconst SELECTOR_STICKY_CONTENT = '.sticky-top';\n\nclass ScrollBarHelper {\n  constructor() {\n    this._element = document.body;\n  }\n\n  getWidth() {\n    // https://developer.mozilla.org/en-US/docs/Web/API/Window/innerWidth#usage_notes\n    const documentWidth = document.documentElement.clientWidth;\n    return Math.abs(window.innerWidth - documentWidth);\n  }\n\n  hide() {\n    const width = this.getWidth();\n\n    this._disableOverFlow(); // give padding to element to balance the hidden scrollbar width\n\n\n    this._setElementAttributes(this._element, 'paddingRight', calculatedValue => calculatedValue + width); // trick: We adjust positive paddingRight and negative marginRight to sticky-top elements to keep showing fullwidth\n\n\n    this._setElementAttributes(SELECTOR_FIXED_CONTENT, 'paddingRight', calculatedValue => calculatedValue + width);\n\n    this._setElementAttributes(SELECTOR_STICKY_CONTENT, 'marginRight', calculatedValue => calculatedValue - width);\n  }\n\n  _disableOverFlow() {\n    this._saveInitialAttribute(this._element, 'overflow');\n\n    this._element.style.overflow = 'hidden';\n  }\n\n  _setElementAttributes(selector, styleProp, callback) {\n    const scrollbarWidth = this.getWidth();\n\n    const manipulationCallBack = element => {\n      if (element !== this._element && window.innerWidth > element.clientWidth + scrollbarWidth) {\n        return;\n      }\n\n      this._saveInitialAttribute(element, styleProp);\n\n      const calculatedValue = window.getComputedStyle(element)[styleProp];\n      element.style[styleProp] = `${callback(Number.parseFloat(calculatedValue))}px`;\n    };\n\n    this._applyManipulationCallback(selector, manipulationCallBack);\n  }\n\n  reset() {\n    this._resetElementAttributes(this._element, 'overflow');\n\n    this._resetElementAttributes(this._element, 'paddingRight');\n\n    this._resetElementAttributes(SELECTOR_FIXED_CONTENT, 'paddingRight');\n\n    this._resetElementAttributes(SELECTOR_STICKY_CONTENT, 'marginRight');\n  }\n\n  _saveInitialAttribute(element, styleProp) {\n    const actualValue = element.style[styleProp];\n\n    if (actualValue) {\n      Manipulator.setDataAttribute(element, styleProp, actualValue);\n    }\n  }\n\n  _resetElementAttributes(selector, styleProp) {\n    const manipulationCallBack = element => {\n      const value = Manipulator.getDataAttribute(element, styleProp);\n\n      if (typeof value === 'undefined') {\n        element.style.removeProperty(styleProp);\n      } else {\n        Manipulator.removeDataAttribute(element, styleProp);\n        element.style[styleProp] = value;\n      }\n    };\n\n    this._applyManipulationCallback(selector, manipulationCallBack);\n  }\n\n  _applyManipulationCallback(selector, callBack) {\n    if (isElement(selector)) {\n      callBack(selector);\n    } else {\n      SelectorEngine.find(selector, this._element).forEach(callBack);\n    }\n  }\n\n  isOverflowing() {\n    return this.getWidth() > 0;\n  }\n\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): util/backdrop.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\nconst Default$6 = {\n  isVisible: true,\n  // if false, we use the backdrop helper without adding any element to the dom\n  isAnimated: false,\n  rootElement: 'body',\n  // give the choice to place backdrop under different elements\n  clickCallback: null\n};\nconst DefaultType$6 = {\n  isVisible: 'boolean',\n  isAnimated: 'boolean',\n  rootElement: '(element|string)',\n  clickCallback: '(function|null)'\n};\nconst NAME$7 = 'backdrop';\nconst CLASS_NAME_BACKDROP = 'modal-backdrop';\nconst CLASS_NAME_FADE$5 = 'fade';\nconst CLASS_NAME_SHOW$6 = 'show';\nconst EVENT_MOUSEDOWN = `mousedown.bs.${NAME$7}`;\n\nclass Backdrop {\n  constructor(config) {\n    this._config = this._getConfig(config);\n    this._isAppended = false;\n    this._element = null;\n  }\n\n  show(callback) {\n    if (!this._config.isVisible) {\n      execute(callback);\n      return;\n    }\n\n    this._append();\n\n    if (this._config.isAnimated) {\n      reflow(this._getElement());\n    }\n\n    this._getElement().classList.add(CLASS_NAME_SHOW$6);\n\n    this._emulateAnimation(() => {\n      execute(callback);\n    });\n  }\n\n  hide(callback) {\n    if (!this._config.isVisible) {\n      execute(callback);\n      return;\n    }\n\n    this._getElement().classList.remove(CLASS_NAME_SHOW$6);\n\n    this._emulateAnimation(() => {\n      this.dispose();\n      execute(callback);\n    });\n  } // Private\n\n\n  _getElement() {\n    if (!this._element) {\n      const backdrop = document.createElement('div');\n      backdrop.className = CLASS_NAME_BACKDROP;\n\n      if (this._config.isAnimated) {\n        backdrop.classList.add(CLASS_NAME_FADE$5);\n      }\n\n      this._element = backdrop;\n    }\n\n    return this._element;\n  }\n\n  _getConfig(config) {\n    config = { ...Default$6,\n      ...(typeof config === 'object' ? config : {})\n    }; // use getElement() with the default \"body\" to get a fresh Element on each instantiation\n\n    config.rootElement = getElement(config.rootElement);\n    typeCheckConfig(NAME$7, config, DefaultType$6);\n    return config;\n  }\n\n  _append() {\n    if (this._isAppended) {\n      return;\n    }\n\n    this._config.rootElement.appendChild(this._getElement());\n\n    EventHandler.on(this._getElement(), EVENT_MOUSEDOWN, () => {\n      execute(this._config.clickCallback);\n    });\n    this._isAppended = true;\n  }\n\n  dispose() {\n    if (!this._isAppended) {\n      return;\n    }\n\n    EventHandler.off(this._element, EVENT_MOUSEDOWN);\n\n    this._element.remove();\n\n    this._isAppended = false;\n  }\n\n  _emulateAnimation(callback) {\n    executeAfterTransition(callback, this._getElement(), this._config.isAnimated);\n  }\n\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): modal.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$6 = 'modal';\nconst DATA_KEY$6 = 'bs.modal';\nconst EVENT_KEY$6 = `.${DATA_KEY$6}`;\nconst DATA_API_KEY$3 = '.data-api';\nconst ESCAPE_KEY$1 = 'Escape';\nconst Default$5 = {\n  backdrop: true,\n  keyboard: true,\n  focus: true\n};\nconst DefaultType$5 = {\n  backdrop: '(boolean|string)',\n  keyboard: 'boolean',\n  focus: 'boolean'\n};\nconst EVENT_HIDE$3 = `hide${EVENT_KEY$6}`;\nconst EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY$6}`;\nconst EVENT_HIDDEN$3 = `hidden${EVENT_KEY$6}`;\nconst EVENT_SHOW$3 = `show${EVENT_KEY$6}`;\nconst EVENT_SHOWN$3 = `shown${EVENT_KEY$6}`;\nconst EVENT_FOCUSIN$2 = `focusin${EVENT_KEY$6}`;\nconst EVENT_RESIZE = `resize${EVENT_KEY$6}`;\nconst EVENT_CLICK_DISMISS$2 = `click.dismiss${EVENT_KEY$6}`;\nconst EVENT_KEYDOWN_DISMISS$1 = `keydown.dismiss${EVENT_KEY$6}`;\nconst EVENT_MOUSEUP_DISMISS = `mouseup.dismiss${EVENT_KEY$6}`;\nconst EVENT_MOUSEDOWN_DISMISS = `mousedown.dismiss${EVENT_KEY$6}`;\nconst EVENT_CLICK_DATA_API$2 = `click${EVENT_KEY$6}${DATA_API_KEY$3}`;\nconst CLASS_NAME_OPEN = 'modal-open';\nconst CLASS_NAME_FADE$4 = 'fade';\nconst CLASS_NAME_SHOW$5 = 'show';\nconst CLASS_NAME_STATIC = 'modal-static';\nconst SELECTOR_DIALOG = '.modal-dialog';\nconst SELECTOR_MODAL_BODY = '.modal-body';\nconst SELECTOR_DATA_TOGGLE$2 = '[data-bs-toggle=\"modal\"]';\nconst SELECTOR_DATA_DISMISS$2 = '[data-bs-dismiss=\"modal\"]';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Modal extends BaseComponent {\n  constructor(element, config) {\n    super(element);\n    this._config = this._getConfig(config);\n    this._dialog = SelectorEngine.findOne(SELECTOR_DIALOG, this._element);\n    this._backdrop = this._initializeBackDrop();\n    this._isShown = false;\n    this._ignoreBackdropClick = false;\n    this._isTransitioning = false;\n    this._scrollBar = new ScrollBarHelper();\n  } // Getters\n\n\n  static get Default() {\n    return Default$5;\n  }\n\n  static get NAME() {\n    return NAME$6;\n  } // Public\n\n\n  toggle(relatedTarget) {\n    return this._isShown ? this.hide() : this.show(relatedTarget);\n  }\n\n  show(relatedTarget) {\n    if (this._isShown || this._isTransitioning) {\n      return;\n    }\n\n    const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$3, {\n      relatedTarget\n    });\n\n    if (showEvent.defaultPrevented) {\n      return;\n    }\n\n    this._isShown = true;\n\n    if (this._isAnimated()) {\n      this._isTransitioning = true;\n    }\n\n    this._scrollBar.hide();\n\n    document.body.classList.add(CLASS_NAME_OPEN);\n\n    this._adjustDialog();\n\n    this._setEscapeEvent();\n\n    this._setResizeEvent();\n\n    EventHandler.on(this._element, EVENT_CLICK_DISMISS$2, SELECTOR_DATA_DISMISS$2, event => this.hide(event));\n    EventHandler.on(this._dialog, EVENT_MOUSEDOWN_DISMISS, () => {\n      EventHandler.one(this._element, EVENT_MOUSEUP_DISMISS, event => {\n        if (event.target === this._element) {\n          this._ignoreBackdropClick = true;\n        }\n      });\n    });\n\n    this._showBackdrop(() => this._showElement(relatedTarget));\n  }\n\n  hide(event) {\n    if (event && ['A', 'AREA'].includes(event.target.tagName)) {\n      event.preventDefault();\n    }\n\n    if (!this._isShown || this._isTransitioning) {\n      return;\n    }\n\n    const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$3);\n\n    if (hideEvent.defaultPrevented) {\n      return;\n    }\n\n    this._isShown = false;\n\n    const isAnimated = this._isAnimated();\n\n    if (isAnimated) {\n      this._isTransitioning = true;\n    }\n\n    this._setEscapeEvent();\n\n    this._setResizeEvent();\n\n    EventHandler.off(document, EVENT_FOCUSIN$2);\n\n    this._element.classList.remove(CLASS_NAME_SHOW$5);\n\n    EventHandler.off(this._element, EVENT_CLICK_DISMISS$2);\n    EventHandler.off(this._dialog, EVENT_MOUSEDOWN_DISMISS);\n\n    this._queueCallback(() => this._hideModal(), this._element, isAnimated);\n  }\n\n  dispose() {\n    [window, this._dialog].forEach(htmlElement => EventHandler.off(htmlElement, EVENT_KEY$6));\n\n    this._backdrop.dispose();\n\n    super.dispose();\n    /**\n     * `document` has 2 events `EVENT_FOCUSIN` and `EVENT_CLICK_DATA_API`\n     * Do not move `document` in `htmlElements` array\n     * It will remove `EVENT_CLICK_DATA_API` event that should remain\n     */\n\n    EventHandler.off(document, EVENT_FOCUSIN$2);\n  }\n\n  handleUpdate() {\n    this._adjustDialog();\n  } // Private\n\n\n  _initializeBackDrop() {\n    return new Backdrop({\n      isVisible: Boolean(this._config.backdrop),\n      // 'static' option will be translated to true, and booleans will keep their value\n      isAnimated: this._isAnimated()\n    });\n  }\n\n  _getConfig(config) {\n    config = { ...Default$5,\n      ...Manipulator.getDataAttributes(this._element),\n      ...(typeof config === 'object' ? config : {})\n    };\n    typeCheckConfig(NAME$6, config, DefaultType$5);\n    return config;\n  }\n\n  _showElement(relatedTarget) {\n    const isAnimated = this._isAnimated();\n\n    const modalBody = SelectorEngine.findOne(SELECTOR_MODAL_BODY, this._dialog);\n\n    if (!this._element.parentNode || this._element.parentNode.nodeType !== Node.ELEMENT_NODE) {\n      // Don't move modal's DOM position\n      document.body.appendChild(this._element);\n    }\n\n    this._element.style.display = 'block';\n\n    this._element.removeAttribute('aria-hidden');\n\n    this._element.setAttribute('aria-modal', true);\n\n    this._element.setAttribute('role', 'dialog');\n\n    this._element.scrollTop = 0;\n\n    if (modalBody) {\n      modalBody.scrollTop = 0;\n    }\n\n    if (isAnimated) {\n      reflow(this._element);\n    }\n\n    this._element.classList.add(CLASS_NAME_SHOW$5);\n\n    if (this._config.focus) {\n      this._enforceFocus();\n    }\n\n    const transitionComplete = () => {\n      if (this._config.focus) {\n        this._element.focus();\n      }\n\n      this._isTransitioning = false;\n      EventHandler.trigger(this._element, EVENT_SHOWN$3, {\n        relatedTarget\n      });\n    };\n\n    this._queueCallback(transitionComplete, this._dialog, isAnimated);\n  }\n\n  _enforceFocus() {\n    EventHandler.off(document, EVENT_FOCUSIN$2); // guard against infinite focus loop\n\n    EventHandler.on(document, EVENT_FOCUSIN$2, event => {\n      if (document !== event.target && this._element !== event.target && !this._element.contains(event.target)) {\n        this._element.focus();\n      }\n    });\n  }\n\n  _setEscapeEvent() {\n    if (this._isShown) {\n      EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS$1, event => {\n        if (this._config.keyboard && event.key === ESCAPE_KEY$1) {\n          event.preventDefault();\n          this.hide();\n        } else if (!this._config.keyboard && event.key === ESCAPE_KEY$1) {\n          this._triggerBackdropTransition();\n        }\n      });\n    } else {\n      EventHandler.off(this._element, EVENT_KEYDOWN_DISMISS$1);\n    }\n  }\n\n  _setResizeEvent() {\n    if (this._isShown) {\n      EventHandler.on(window, EVENT_RESIZE, () => this._adjustDialog());\n    } else {\n      EventHandler.off(window, EVENT_RESIZE);\n    }\n  }\n\n  _hideModal() {\n    this._element.style.display = 'none';\n\n    this._element.setAttribute('aria-hidden', true);\n\n    this._element.removeAttribute('aria-modal');\n\n    this._element.removeAttribute('role');\n\n    this._isTransitioning = false;\n\n    this._backdrop.hide(() => {\n      document.body.classList.remove(CLASS_NAME_OPEN);\n\n      this._resetAdjustments();\n\n      this._scrollBar.reset();\n\n      EventHandler.trigger(this._element, EVENT_HIDDEN$3);\n    });\n  }\n\n  _showBackdrop(callback) {\n    EventHandler.on(this._element, EVENT_CLICK_DISMISS$2, event => {\n      if (this._ignoreBackdropClick) {\n        this._ignoreBackdropClick = false;\n        return;\n      }\n\n      if (event.target !== event.currentTarget) {\n        return;\n      }\n\n      if (this._config.backdrop === true) {\n        this.hide();\n      } else if (this._config.backdrop === 'static') {\n        this._triggerBackdropTransition();\n      }\n    });\n\n    this._backdrop.show(callback);\n  }\n\n  _isAnimated() {\n    return this._element.classList.contains(CLASS_NAME_FADE$4);\n  }\n\n  _triggerBackdropTransition() {\n    const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED);\n\n    if (hideEvent.defaultPrevented) {\n      return;\n    }\n\n    const {\n      classList,\n      scrollHeight,\n      style\n    } = this._element;\n    const isModalOverflowing = scrollHeight > document.documentElement.clientHeight; // return if the following background transition hasn't yet completed\n\n    if (!isModalOverflowing && style.overflowY === 'hidden' || classList.contains(CLASS_NAME_STATIC)) {\n      return;\n    }\n\n    if (!isModalOverflowing) {\n      style.overflowY = 'hidden';\n    }\n\n    classList.add(CLASS_NAME_STATIC);\n\n    this._queueCallback(() => {\n      classList.remove(CLASS_NAME_STATIC);\n\n      if (!isModalOverflowing) {\n        this._queueCallback(() => {\n          style.overflowY = '';\n        }, this._dialog);\n      }\n    }, this._dialog);\n\n    this._element.focus();\n  } // ----------------------------------------------------------------------\n  // the following methods are used to handle overflowing modals\n  // ----------------------------------------------------------------------\n\n\n  _adjustDialog() {\n    const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;\n\n    const scrollbarWidth = this._scrollBar.getWidth();\n\n    const isBodyOverflowing = scrollbarWidth > 0;\n\n    if (!isBodyOverflowing && isModalOverflowing && !isRTL() || isBodyOverflowing && !isModalOverflowing && isRTL()) {\n      this._element.style.paddingLeft = `${scrollbarWidth}px`;\n    }\n\n    if (isBodyOverflowing && !isModalOverflowing && !isRTL() || !isBodyOverflowing && isModalOverflowing && isRTL()) {\n      this._element.style.paddingRight = `${scrollbarWidth}px`;\n    }\n  }\n\n  _resetAdjustments() {\n    this._element.style.paddingLeft = '';\n    this._element.style.paddingRight = '';\n  } // Static\n\n\n  static jQueryInterface(config, relatedTarget) {\n    return this.each(function () {\n      const data = Modal.getOrCreateInstance(this, config);\n\n      if (typeof config !== 'string') {\n        return;\n      }\n\n      if (typeof data[config] === 'undefined') {\n        throw new TypeError(`No method named \"${config}\"`);\n      }\n\n      data[config](relatedTarget);\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$2, SELECTOR_DATA_TOGGLE$2, function (event) {\n  const target = getElementFromSelector(this);\n\n  if (['A', 'AREA'].includes(this.tagName)) {\n    event.preventDefault();\n  }\n\n  EventHandler.one(target, EVENT_SHOW$3, showEvent => {\n    if (showEvent.defaultPrevented) {\n      // only register focus restorer if modal will actually get shown\n      return;\n    }\n\n    EventHandler.one(target, EVENT_HIDDEN$3, () => {\n      if (isVisible(this)) {\n        this.focus();\n      }\n    });\n  });\n  const data = Modal.getOrCreateInstance(target);\n  data.toggle(this);\n});\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Modal to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Modal);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): offcanvas.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$5 = 'offcanvas';\nconst DATA_KEY$5 = 'bs.offcanvas';\nconst EVENT_KEY$5 = `.${DATA_KEY$5}`;\nconst DATA_API_KEY$2 = '.data-api';\nconst EVENT_LOAD_DATA_API$1 = `load${EVENT_KEY$5}${DATA_API_KEY$2}`;\nconst ESCAPE_KEY = 'Escape';\nconst Default$4 = {\n  backdrop: true,\n  keyboard: true,\n  scroll: false\n};\nconst DefaultType$4 = {\n  backdrop: 'boolean',\n  keyboard: 'boolean',\n  scroll: 'boolean'\n};\nconst CLASS_NAME_SHOW$4 = 'show';\nconst OPEN_SELECTOR = '.offcanvas.show';\nconst EVENT_SHOW$2 = `show${EVENT_KEY$5}`;\nconst EVENT_SHOWN$2 = `shown${EVENT_KEY$5}`;\nconst EVENT_HIDE$2 = `hide${EVENT_KEY$5}`;\nconst EVENT_HIDDEN$2 = `hidden${EVENT_KEY$5}`;\nconst EVENT_FOCUSIN$1 = `focusin${EVENT_KEY$5}`;\nconst EVENT_CLICK_DATA_API$1 = `click${EVENT_KEY$5}${DATA_API_KEY$2}`;\nconst EVENT_CLICK_DISMISS$1 = `click.dismiss${EVENT_KEY$5}`;\nconst EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY$5}`;\nconst SELECTOR_DATA_DISMISS$1 = '[data-bs-dismiss=\"offcanvas\"]';\nconst SELECTOR_DATA_TOGGLE$1 = '[data-bs-toggle=\"offcanvas\"]';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Offcanvas extends BaseComponent {\n  constructor(element, config) {\n    super(element);\n    this._config = this._getConfig(config);\n    this._isShown = false;\n    this._backdrop = this._initializeBackDrop();\n\n    this._addEventListeners();\n  } // Getters\n\n\n  static get NAME() {\n    return NAME$5;\n  }\n\n  static get Default() {\n    return Default$4;\n  } // Public\n\n\n  toggle(relatedTarget) {\n    return this._isShown ? this.hide() : this.show(relatedTarget);\n  }\n\n  show(relatedTarget) {\n    if (this._isShown) {\n      return;\n    }\n\n    const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$2, {\n      relatedTarget\n    });\n\n    if (showEvent.defaultPrevented) {\n      return;\n    }\n\n    this._isShown = true;\n    this._element.style.visibility = 'visible';\n\n    this._backdrop.show();\n\n    if (!this._config.scroll) {\n      new ScrollBarHelper().hide();\n\n      this._enforceFocusOnElement(this._element);\n    }\n\n    this._element.removeAttribute('aria-hidden');\n\n    this._element.setAttribute('aria-modal', true);\n\n    this._element.setAttribute('role', 'dialog');\n\n    this._element.classList.add(CLASS_NAME_SHOW$4);\n\n    const completeCallBack = () => {\n      EventHandler.trigger(this._element, EVENT_SHOWN$2, {\n        relatedTarget\n      });\n    };\n\n    this._queueCallback(completeCallBack, this._element, true);\n  }\n\n  hide() {\n    if (!this._isShown) {\n      return;\n    }\n\n    const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$2);\n\n    if (hideEvent.defaultPrevented) {\n      return;\n    }\n\n    EventHandler.off(document, EVENT_FOCUSIN$1);\n\n    this._element.blur();\n\n    this._isShown = false;\n\n    this._element.classList.remove(CLASS_NAME_SHOW$4);\n\n    this._backdrop.hide();\n\n    const completeCallback = () => {\n      this._element.setAttribute('aria-hidden', true);\n\n      this._element.removeAttribute('aria-modal');\n\n      this._element.removeAttribute('role');\n\n      this._element.style.visibility = 'hidden';\n\n      if (!this._config.scroll) {\n        new ScrollBarHelper().reset();\n      }\n\n      EventHandler.trigger(this._element, EVENT_HIDDEN$2);\n    };\n\n    this._queueCallback(completeCallback, this._element, true);\n  }\n\n  dispose() {\n    this._backdrop.dispose();\n\n    super.dispose();\n    EventHandler.off(document, EVENT_FOCUSIN$1);\n  } // Private\n\n\n  _getConfig(config) {\n    config = { ...Default$4,\n      ...Manipulator.getDataAttributes(this._element),\n      ...(typeof config === 'object' ? config : {})\n    };\n    typeCheckConfig(NAME$5, config, DefaultType$4);\n    return config;\n  }\n\n  _initializeBackDrop() {\n    return new Backdrop({\n      isVisible: this._config.backdrop,\n      isAnimated: true,\n      rootElement: this._element.parentNode,\n      clickCallback: () => this.hide()\n    });\n  }\n\n  _enforceFocusOnElement(element) {\n    EventHandler.off(document, EVENT_FOCUSIN$1); // guard against infinite focus loop\n\n    EventHandler.on(document, EVENT_FOCUSIN$1, event => {\n      if (document !== event.target && element !== event.target && !element.contains(event.target)) {\n        element.focus();\n      }\n    });\n    element.focus();\n  }\n\n  _addEventListeners() {\n    EventHandler.on(this._element, EVENT_CLICK_DISMISS$1, SELECTOR_DATA_DISMISS$1, () => this.hide());\n    EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS, event => {\n      if (this._config.keyboard && event.key === ESCAPE_KEY) {\n        this.hide();\n      }\n    });\n  } // Static\n\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Offcanvas.getOrCreateInstance(this, config);\n\n      if (typeof config !== 'string') {\n        return;\n      }\n\n      if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n        throw new TypeError(`No method named \"${config}\"`);\n      }\n\n      data[config](this);\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$1, SELECTOR_DATA_TOGGLE$1, function (event) {\n  const target = getElementFromSelector(this);\n\n  if (['A', 'AREA'].includes(this.tagName)) {\n    event.preventDefault();\n  }\n\n  if (isDisabled(this)) {\n    return;\n  }\n\n  EventHandler.one(target, EVENT_HIDDEN$2, () => {\n    // focus on trigger when it is closed\n    if (isVisible(this)) {\n      this.focus();\n    }\n  }); // avoid conflict when clicking a toggler of an offcanvas, while another is open\n\n  const allReadyOpen = SelectorEngine.findOne(OPEN_SELECTOR);\n\n  if (allReadyOpen && allReadyOpen !== target) {\n    Offcanvas.getInstance(allReadyOpen).hide();\n  }\n\n  const data = Offcanvas.getOrCreateInstance(target);\n  data.toggle(this);\n});\nEventHandler.on(window, EVENT_LOAD_DATA_API$1, () => SelectorEngine.find(OPEN_SELECTOR).forEach(el => Offcanvas.getOrCreateInstance(el).show()));\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\ndefineJQueryPlugin(Offcanvas);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): util/sanitizer.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\nconst uriAttrs = new Set(['background', 'cite', 'href', 'itemtype', 'longdesc', 'poster', 'src', 'xlink:href']);\nconst ARIA_ATTRIBUTE_PATTERN = /^aria-[\\w-]*$/i;\n/**\n * A pattern that recognizes a commonly useful subset of URLs that are safe.\n *\n * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts\n */\n\nconst SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file):|[^#&/:?]*(?:[#/?]|$))/i;\n/**\n * A pattern that matches safe data URLs. Only matches image, video and audio types.\n *\n * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts\n */\n\nconst DATA_URL_PATTERN = /^data:(?:image\\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\\/(?:mpeg|mp4|ogg|webm)|audio\\/(?:mp3|oga|ogg|opus));base64,[\\d+/a-z]+=*$/i;\n\nconst allowedAttribute = (attr, allowedAttributeList) => {\n  const attrName = attr.nodeName.toLowerCase();\n\n  if (allowedAttributeList.includes(attrName)) {\n    if (uriAttrs.has(attrName)) {\n      return Boolean(SAFE_URL_PATTERN.test(attr.nodeValue) || DATA_URL_PATTERN.test(attr.nodeValue));\n    }\n\n    return true;\n  }\n\n  const regExp = allowedAttributeList.filter(attrRegex => attrRegex instanceof RegExp); // Check if a regular expression validates the attribute.\n\n  for (let i = 0, len = regExp.length; i < len; i++) {\n    if (regExp[i].test(attrName)) {\n      return true;\n    }\n  }\n\n  return false;\n};\n\nconst DefaultAllowlist = {\n  // Global attributes allowed on any supplied element below.\n  '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],\n  a: ['target', 'href', 'title', 'rel'],\n  area: [],\n  b: [],\n  br: [],\n  col: [],\n  code: [],\n  div: [],\n  em: [],\n  hr: [],\n  h1: [],\n  h2: [],\n  h3: [],\n  h4: [],\n  h5: [],\n  h6: [],\n  i: [],\n  img: ['src', 'srcset', 'alt', 'title', 'width', 'height'],\n  li: [],\n  ol: [],\n  p: [],\n  pre: [],\n  s: [],\n  small: [],\n  span: [],\n  sub: [],\n  sup: [],\n  strong: [],\n  u: [],\n  ul: []\n};\nfunction sanitizeHtml(unsafeHtml, allowList, sanitizeFn) {\n  if (!unsafeHtml.length) {\n    return unsafeHtml;\n  }\n\n  if (sanitizeFn && typeof sanitizeFn === 'function') {\n    return sanitizeFn(unsafeHtml);\n  }\n\n  const domParser = new window.DOMParser();\n  const createdDocument = domParser.parseFromString(unsafeHtml, 'text/html');\n  const allowlistKeys = Object.keys(allowList);\n  const elements = [].concat(...createdDocument.body.querySelectorAll('*'));\n\n  for (let i = 0, len = elements.length; i < len; i++) {\n    const el = elements[i];\n    const elName = el.nodeName.toLowerCase();\n\n    if (!allowlistKeys.includes(elName)) {\n      el.remove();\n      continue;\n    }\n\n    const attributeList = [].concat(...el.attributes);\n    const allowedAttributes = [].concat(allowList['*'] || [], allowList[elName] || []);\n    attributeList.forEach(attr => {\n      if (!allowedAttribute(attr, allowedAttributes)) {\n        el.removeAttribute(attr.nodeName);\n      }\n    });\n  }\n\n  return createdDocument.body.innerHTML;\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): tooltip.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$4 = 'tooltip';\nconst DATA_KEY$4 = 'bs.tooltip';\nconst EVENT_KEY$4 = `.${DATA_KEY$4}`;\nconst CLASS_PREFIX$1 = 'bs-tooltip';\nconst BSCLS_PREFIX_REGEX$1 = new RegExp(`(^|\\\\s)${CLASS_PREFIX$1}\\\\S+`, 'g');\nconst DISALLOWED_ATTRIBUTES = new Set(['sanitize', 'allowList', 'sanitizeFn']);\nconst DefaultType$3 = {\n  animation: 'boolean',\n  template: 'string',\n  title: '(string|element|function)',\n  trigger: 'string',\n  delay: '(number|object)',\n  html: 'boolean',\n  selector: '(string|boolean)',\n  placement: '(string|function)',\n  offset: '(array|string|function)',\n  container: '(string|element|boolean)',\n  fallbackPlacements: 'array',\n  boundary: '(string|element)',\n  customClass: '(string|function)',\n  sanitize: 'boolean',\n  sanitizeFn: '(null|function)',\n  allowList: 'object',\n  popperConfig: '(null|object|function)'\n};\nconst AttachmentMap = {\n  AUTO: 'auto',\n  TOP: 'top',\n  RIGHT: isRTL() ? 'left' : 'right',\n  BOTTOM: 'bottom',\n  LEFT: isRTL() ? 'right' : 'left'\n};\nconst Default$3 = {\n  animation: true,\n  template: '<div class=\"tooltip\" role=\"tooltip\">' + '<div class=\"tooltip-arrow\"></div>' + '<div class=\"tooltip-inner\"></div>' + '</div>',\n  trigger: 'hover focus',\n  title: '',\n  delay: 0,\n  html: false,\n  selector: false,\n  placement: 'top',\n  offset: [0, 0],\n  container: false,\n  fallbackPlacements: ['top', 'right', 'bottom', 'left'],\n  boundary: 'clippingParents',\n  customClass: '',\n  sanitize: true,\n  sanitizeFn: null,\n  allowList: DefaultAllowlist,\n  popperConfig: null\n};\nconst Event$2 = {\n  HIDE: `hide${EVENT_KEY$4}`,\n  HIDDEN: `hidden${EVENT_KEY$4}`,\n  SHOW: `show${EVENT_KEY$4}`,\n  SHOWN: `shown${EVENT_KEY$4}`,\n  INSERTED: `inserted${EVENT_KEY$4}`,\n  CLICK: `click${EVENT_KEY$4}`,\n  FOCUSIN: `focusin${EVENT_KEY$4}`,\n  FOCUSOUT: `focusout${EVENT_KEY$4}`,\n  MOUSEENTER: `mouseenter${EVENT_KEY$4}`,\n  MOUSELEAVE: `mouseleave${EVENT_KEY$4}`\n};\nconst CLASS_NAME_FADE$3 = 'fade';\nconst CLASS_NAME_MODAL = 'modal';\nconst CLASS_NAME_SHOW$3 = 'show';\nconst HOVER_STATE_SHOW = 'show';\nconst HOVER_STATE_OUT = 'out';\nconst SELECTOR_TOOLTIP_INNER = '.tooltip-inner';\nconst TRIGGER_HOVER = 'hover';\nconst TRIGGER_FOCUS = 'focus';\nconst TRIGGER_CLICK = 'click';\nconst TRIGGER_MANUAL = 'manual';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Tooltip extends BaseComponent {\n  constructor(element, config) {\n    if (typeof Popper === 'undefined') {\n      throw new TypeError('Bootstrap\\'s tooltips require Popper (https://popper.js.org)');\n    }\n\n    super(element); // private\n\n    this._isEnabled = true;\n    this._timeout = 0;\n    this._hoverState = '';\n    this._activeTrigger = {};\n    this._popper = null; // Protected\n\n    this._config = this._getConfig(config);\n    this.tip = null;\n\n    this._setListeners();\n  } // Getters\n\n\n  static get Default() {\n    return Default$3;\n  }\n\n  static get NAME() {\n    return NAME$4;\n  }\n\n  static get Event() {\n    return Event$2;\n  }\n\n  static get DefaultType() {\n    return DefaultType$3;\n  } // Public\n\n\n  enable() {\n    this._isEnabled = true;\n  }\n\n  disable() {\n    this._isEnabled = false;\n  }\n\n  toggleEnabled() {\n    this._isEnabled = !this._isEnabled;\n  }\n\n  toggle(event) {\n    if (!this._isEnabled) {\n      return;\n    }\n\n    if (event) {\n      const context = this._initializeOnDelegatedTarget(event);\n\n      context._activeTrigger.click = !context._activeTrigger.click;\n\n      if (context._isWithActiveTrigger()) {\n        context._enter(null, context);\n      } else {\n        context._leave(null, context);\n      }\n    } else {\n      if (this.getTipElement().classList.contains(CLASS_NAME_SHOW$3)) {\n        this._leave(null, this);\n\n        return;\n      }\n\n      this._enter(null, this);\n    }\n  }\n\n  dispose() {\n    clearTimeout(this._timeout);\n    EventHandler.off(this._element.closest(`.${CLASS_NAME_MODAL}`), 'hide.bs.modal', this._hideModalHandler);\n\n    if (this.tip) {\n      this.tip.remove();\n    }\n\n    if (this._popper) {\n      this._popper.destroy();\n    }\n\n    super.dispose();\n  }\n\n  show() {\n    if (this._element.style.display === 'none') {\n      throw new Error('Please use show on visible elements');\n    }\n\n    if (!(this.isWithContent() && this._isEnabled)) {\n      return;\n    }\n\n    const showEvent = EventHandler.trigger(this._element, this.constructor.Event.SHOW);\n    const shadowRoot = findShadowRoot(this._element);\n    const isInTheDom = shadowRoot === null ? this._element.ownerDocument.documentElement.contains(this._element) : shadowRoot.contains(this._element);\n\n    if (showEvent.defaultPrevented || !isInTheDom) {\n      return;\n    }\n\n    const tip = this.getTipElement();\n    const tipId = getUID(this.constructor.NAME);\n    tip.setAttribute('id', tipId);\n\n    this._element.setAttribute('aria-describedby', tipId);\n\n    this.setContent();\n\n    if (this._config.animation) {\n      tip.classList.add(CLASS_NAME_FADE$3);\n    }\n\n    const placement = typeof this._config.placement === 'function' ? this._config.placement.call(this, tip, this._element) : this._config.placement;\n\n    const attachment = this._getAttachment(placement);\n\n    this._addAttachmentClass(attachment);\n\n    const {\n      container\n    } = this._config;\n    Data.set(tip, this.constructor.DATA_KEY, this);\n\n    if (!this._element.ownerDocument.documentElement.contains(this.tip)) {\n      container.appendChild(tip);\n      EventHandler.trigger(this._element, this.constructor.Event.INSERTED);\n    }\n\n    if (this._popper) {\n      this._popper.update();\n    } else {\n      this._popper = Popper.createPopper(this._element, tip, this._getPopperConfig(attachment));\n    }\n\n    tip.classList.add(CLASS_NAME_SHOW$3);\n    const customClass = typeof this._config.customClass === 'function' ? this._config.customClass() : this._config.customClass;\n\n    if (customClass) {\n      tip.classList.add(...customClass.split(' '));\n    } // If this is a touch-enabled device we add extra\n    // empty mouseover listeners to the body's immediate children;\n    // only needed because of broken event delegation on iOS\n    // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n\n\n    if ('ontouchstart' in document.documentElement) {\n      [].concat(...document.body.children).forEach(element => {\n        EventHandler.on(element, 'mouseover', noop);\n      });\n    }\n\n    const complete = () => {\n      const prevHoverState = this._hoverState;\n      this._hoverState = null;\n      EventHandler.trigger(this._element, this.constructor.Event.SHOWN);\n\n      if (prevHoverState === HOVER_STATE_OUT) {\n        this._leave(null, this);\n      }\n    };\n\n    const isAnimated = this.tip.classList.contains(CLASS_NAME_FADE$3);\n\n    this._queueCallback(complete, this.tip, isAnimated);\n  }\n\n  hide() {\n    if (!this._popper) {\n      return;\n    }\n\n    const tip = this.getTipElement();\n\n    const complete = () => {\n      if (this._isWithActiveTrigger()) {\n        return;\n      }\n\n      if (this._hoverState !== HOVER_STATE_SHOW) {\n        tip.remove();\n      }\n\n      this._cleanTipClass();\n\n      this._element.removeAttribute('aria-describedby');\n\n      EventHandler.trigger(this._element, this.constructor.Event.HIDDEN);\n\n      if (this._popper) {\n        this._popper.destroy();\n\n        this._popper = null;\n      }\n    };\n\n    const hideEvent = EventHandler.trigger(this._element, this.constructor.Event.HIDE);\n\n    if (hideEvent.defaultPrevented) {\n      return;\n    }\n\n    tip.classList.remove(CLASS_NAME_SHOW$3); // If this is a touch-enabled device we remove the extra\n    // empty mouseover listeners we added for iOS support\n\n    if ('ontouchstart' in document.documentElement) {\n      [].concat(...document.body.children).forEach(element => EventHandler.off(element, 'mouseover', noop));\n    }\n\n    this._activeTrigger[TRIGGER_CLICK] = false;\n    this._activeTrigger[TRIGGER_FOCUS] = false;\n    this._activeTrigger[TRIGGER_HOVER] = false;\n    const isAnimated = this.tip.classList.contains(CLASS_NAME_FADE$3);\n\n    this._queueCallback(complete, this.tip, isAnimated);\n\n    this._hoverState = '';\n  }\n\n  update() {\n    if (this._popper !== null) {\n      this._popper.update();\n    }\n  } // Protected\n\n\n  isWithContent() {\n    return Boolean(this.getTitle());\n  }\n\n  getTipElement() {\n    if (this.tip) {\n      return this.tip;\n    }\n\n    const element = document.createElement('div');\n    element.innerHTML = this._config.template;\n    this.tip = element.children[0];\n    return this.tip;\n  }\n\n  setContent() {\n    const tip = this.getTipElement();\n    this.setElementContent(SelectorEngine.findOne(SELECTOR_TOOLTIP_INNER, tip), this.getTitle());\n    tip.classList.remove(CLASS_NAME_FADE$3, CLASS_NAME_SHOW$3);\n  }\n\n  setElementContent(element, content) {\n    if (element === null) {\n      return;\n    }\n\n    if (isElement(content)) {\n      content = getElement(content); // content is a DOM node or a jQuery\n\n      if (this._config.html) {\n        if (content.parentNode !== element) {\n          element.innerHTML = '';\n          element.appendChild(content);\n        }\n      } else {\n        element.textContent = content.textContent;\n      }\n\n      return;\n    }\n\n    if (this._config.html) {\n      if (this._config.sanitize) {\n        content = sanitizeHtml(content, this._config.allowList, this._config.sanitizeFn);\n      }\n\n      element.innerHTML = content;\n    } else {\n      element.textContent = content;\n    }\n  }\n\n  getTitle() {\n    let title = this._element.getAttribute('data-bs-original-title');\n\n    if (!title) {\n      title = typeof this._config.title === 'function' ? this._config.title.call(this._element) : this._config.title;\n    }\n\n    return title;\n  }\n\n  updateAttachment(attachment) {\n    if (attachment === 'right') {\n      return 'end';\n    }\n\n    if (attachment === 'left') {\n      return 'start';\n    }\n\n    return attachment;\n  } // Private\n\n\n  _initializeOnDelegatedTarget(event, context) {\n    const dataKey = this.constructor.DATA_KEY;\n    context = context || Data.get(event.delegateTarget, dataKey);\n\n    if (!context) {\n      context = new this.constructor(event.delegateTarget, this._getDelegateConfig());\n      Data.set(event.delegateTarget, dataKey, context);\n    }\n\n    return context;\n  }\n\n  _getOffset() {\n    const {\n      offset\n    } = this._config;\n\n    if (typeof offset === 'string') {\n      return offset.split(',').map(val => Number.parseInt(val, 10));\n    }\n\n    if (typeof offset === 'function') {\n      return popperData => offset(popperData, this._element);\n    }\n\n    return offset;\n  }\n\n  _getPopperConfig(attachment) {\n    const defaultBsPopperConfig = {\n      placement: attachment,\n      modifiers: [{\n        name: 'flip',\n        options: {\n          fallbackPlacements: this._config.fallbackPlacements\n        }\n      }, {\n        name: 'offset',\n        options: {\n          offset: this._getOffset()\n        }\n      }, {\n        name: 'preventOverflow',\n        options: {\n          boundary: this._config.boundary\n        }\n      }, {\n        name: 'arrow',\n        options: {\n          element: `.${this.constructor.NAME}-arrow`\n        }\n      }, {\n        name: 'onChange',\n        enabled: true,\n        phase: 'afterWrite',\n        fn: data => this._handlePopperPlacementChange(data)\n      }],\n      onFirstUpdate: data => {\n        if (data.options.placement !== data.placement) {\n          this._handlePopperPlacementChange(data);\n        }\n      }\n    };\n    return { ...defaultBsPopperConfig,\n      ...(typeof this._config.popperConfig === 'function' ? this._config.popperConfig(defaultBsPopperConfig) : this._config.popperConfig)\n    };\n  }\n\n  _addAttachmentClass(attachment) {\n    this.getTipElement().classList.add(`${CLASS_PREFIX$1}-${this.updateAttachment(attachment)}`);\n  }\n\n  _getAttachment(placement) {\n    return AttachmentMap[placement.toUpperCase()];\n  }\n\n  _setListeners() {\n    const triggers = this._config.trigger.split(' ');\n\n    triggers.forEach(trigger => {\n      if (trigger === 'click') {\n        EventHandler.on(this._element, this.constructor.Event.CLICK, this._config.selector, event => this.toggle(event));\n      } else if (trigger !== TRIGGER_MANUAL) {\n        const eventIn = trigger === TRIGGER_HOVER ? this.constructor.Event.MOUSEENTER : this.constructor.Event.FOCUSIN;\n        const eventOut = trigger === TRIGGER_HOVER ? this.constructor.Event.MOUSELEAVE : this.constructor.Event.FOCUSOUT;\n        EventHandler.on(this._element, eventIn, this._config.selector, event => this._enter(event));\n        EventHandler.on(this._element, eventOut, this._config.selector, event => this._leave(event));\n      }\n    });\n\n    this._hideModalHandler = () => {\n      if (this._element) {\n        this.hide();\n      }\n    };\n\n    EventHandler.on(this._element.closest(`.${CLASS_NAME_MODAL}`), 'hide.bs.modal', this._hideModalHandler);\n\n    if (this._config.selector) {\n      this._config = { ...this._config,\n        trigger: 'manual',\n        selector: ''\n      };\n    } else {\n      this._fixTitle();\n    }\n  }\n\n  _fixTitle() {\n    const title = this._element.getAttribute('title');\n\n    const originalTitleType = typeof this._element.getAttribute('data-bs-original-title');\n\n    if (title || originalTitleType !== 'string') {\n      this._element.setAttribute('data-bs-original-title', title || '');\n\n      if (title && !this._element.getAttribute('aria-label') && !this._element.textContent) {\n        this._element.setAttribute('aria-label', title);\n      }\n\n      this._element.setAttribute('title', '');\n    }\n  }\n\n  _enter(event, context) {\n    context = this._initializeOnDelegatedTarget(event, context);\n\n    if (event) {\n      context._activeTrigger[event.type === 'focusin' ? TRIGGER_FOCUS : TRIGGER_HOVER] = true;\n    }\n\n    if (context.getTipElement().classList.contains(CLASS_NAME_SHOW$3) || context._hoverState === HOVER_STATE_SHOW) {\n      context._hoverState = HOVER_STATE_SHOW;\n      return;\n    }\n\n    clearTimeout(context._timeout);\n    context._hoverState = HOVER_STATE_SHOW;\n\n    if (!context._config.delay || !context._config.delay.show) {\n      context.show();\n      return;\n    }\n\n    context._timeout = setTimeout(() => {\n      if (context._hoverState === HOVER_STATE_SHOW) {\n        context.show();\n      }\n    }, context._config.delay.show);\n  }\n\n  _leave(event, context) {\n    context = this._initializeOnDelegatedTarget(event, context);\n\n    if (event) {\n      context._activeTrigger[event.type === 'focusout' ? TRIGGER_FOCUS : TRIGGER_HOVER] = context._element.contains(event.relatedTarget);\n    }\n\n    if (context._isWithActiveTrigger()) {\n      return;\n    }\n\n    clearTimeout(context._timeout);\n    context._hoverState = HOVER_STATE_OUT;\n\n    if (!context._config.delay || !context._config.delay.hide) {\n      context.hide();\n      return;\n    }\n\n    context._timeout = setTimeout(() => {\n      if (context._hoverState === HOVER_STATE_OUT) {\n        context.hide();\n      }\n    }, context._config.delay.hide);\n  }\n\n  _isWithActiveTrigger() {\n    for (const trigger in this._activeTrigger) {\n      if (this._activeTrigger[trigger]) {\n        return true;\n      }\n    }\n\n    return false;\n  }\n\n  _getConfig(config) {\n    const dataAttributes = Manipulator.getDataAttributes(this._element);\n    Object.keys(dataAttributes).forEach(dataAttr => {\n      if (DISALLOWED_ATTRIBUTES.has(dataAttr)) {\n        delete dataAttributes[dataAttr];\n      }\n    });\n    config = { ...this.constructor.Default,\n      ...dataAttributes,\n      ...(typeof config === 'object' && config ? config : {})\n    };\n    config.container = config.container === false ? document.body : getElement(config.container);\n\n    if (typeof config.delay === 'number') {\n      config.delay = {\n        show: config.delay,\n        hide: config.delay\n      };\n    }\n\n    if (typeof config.title === 'number') {\n      config.title = config.title.toString();\n    }\n\n    if (typeof config.content === 'number') {\n      config.content = config.content.toString();\n    }\n\n    typeCheckConfig(NAME$4, config, this.constructor.DefaultType);\n\n    if (config.sanitize) {\n      config.template = sanitizeHtml(config.template, config.allowList, config.sanitizeFn);\n    }\n\n    return config;\n  }\n\n  _getDelegateConfig() {\n    const config = {};\n\n    if (this._config) {\n      for (const key in this._config) {\n        if (this.constructor.Default[key] !== this._config[key]) {\n          config[key] = this._config[key];\n        }\n      }\n    }\n\n    return config;\n  }\n\n  _cleanTipClass() {\n    const tip = this.getTipElement();\n    const tabClass = tip.getAttribute('class').match(BSCLS_PREFIX_REGEX$1);\n\n    if (tabClass !== null && tabClass.length > 0) {\n      tabClass.map(token => token.trim()).forEach(tClass => tip.classList.remove(tClass));\n    }\n  }\n\n  _handlePopperPlacementChange(popperData) {\n    const {\n      state\n    } = popperData;\n\n    if (!state) {\n      return;\n    }\n\n    this.tip = state.elements.popper;\n\n    this._cleanTipClass();\n\n    this._addAttachmentClass(this._getAttachment(state.placement));\n  } // Static\n\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Tooltip.getOrCreateInstance(this, config);\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config]();\n      }\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Tooltip to jQuery only if jQuery is present\n */\n\n\ndefineJQueryPlugin(Tooltip);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): popover.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$3 = 'popover';\nconst DATA_KEY$3 = 'bs.popover';\nconst EVENT_KEY$3 = `.${DATA_KEY$3}`;\nconst CLASS_PREFIX = 'bs-popover';\nconst BSCLS_PREFIX_REGEX = new RegExp(`(^|\\\\s)${CLASS_PREFIX}\\\\S+`, 'g');\nconst Default$2 = { ...Tooltip.Default,\n  placement: 'right',\n  offset: [0, 8],\n  trigger: 'click',\n  content: '',\n  template: '<div class=\"popover\" role=\"tooltip\">' + '<div class=\"popover-arrow\"></div>' + '<h3 class=\"popover-header\"></h3>' + '<div class=\"popover-body\"></div>' + '</div>'\n};\nconst DefaultType$2 = { ...Tooltip.DefaultType,\n  content: '(string|element|function)'\n};\nconst Event$1 = {\n  HIDE: `hide${EVENT_KEY$3}`,\n  HIDDEN: `hidden${EVENT_KEY$3}`,\n  SHOW: `show${EVENT_KEY$3}`,\n  SHOWN: `shown${EVENT_KEY$3}`,\n  INSERTED: `inserted${EVENT_KEY$3}`,\n  CLICK: `click${EVENT_KEY$3}`,\n  FOCUSIN: `focusin${EVENT_KEY$3}`,\n  FOCUSOUT: `focusout${EVENT_KEY$3}`,\n  MOUSEENTER: `mouseenter${EVENT_KEY$3}`,\n  MOUSELEAVE: `mouseleave${EVENT_KEY$3}`\n};\nconst CLASS_NAME_FADE$2 = 'fade';\nconst CLASS_NAME_SHOW$2 = 'show';\nconst SELECTOR_TITLE = '.popover-header';\nconst SELECTOR_CONTENT = '.popover-body';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Popover extends Tooltip {\n  // Getters\n  static get Default() {\n    return Default$2;\n  }\n\n  static get NAME() {\n    return NAME$3;\n  }\n\n  static get Event() {\n    return Event$1;\n  }\n\n  static get DefaultType() {\n    return DefaultType$2;\n  } // Overrides\n\n\n  isWithContent() {\n    return this.getTitle() || this._getContent();\n  }\n\n  getTipElement() {\n    if (this.tip) {\n      return this.tip;\n    }\n\n    this.tip = super.getTipElement();\n\n    if (!this.getTitle()) {\n      SelectorEngine.findOne(SELECTOR_TITLE, this.tip).remove();\n    }\n\n    if (!this._getContent()) {\n      SelectorEngine.findOne(SELECTOR_CONTENT, this.tip).remove();\n    }\n\n    return this.tip;\n  }\n\n  setContent() {\n    const tip = this.getTipElement(); // we use append for html objects to maintain js events\n\n    this.setElementContent(SelectorEngine.findOne(SELECTOR_TITLE, tip), this.getTitle());\n\n    let content = this._getContent();\n\n    if (typeof content === 'function') {\n      content = content.call(this._element);\n    }\n\n    this.setElementContent(SelectorEngine.findOne(SELECTOR_CONTENT, tip), content);\n    tip.classList.remove(CLASS_NAME_FADE$2, CLASS_NAME_SHOW$2);\n  } // Private\n\n\n  _addAttachmentClass(attachment) {\n    this.getTipElement().classList.add(`${CLASS_PREFIX}-${this.updateAttachment(attachment)}`);\n  }\n\n  _getContent() {\n    return this._element.getAttribute('data-bs-content') || this._config.content;\n  }\n\n  _cleanTipClass() {\n    const tip = this.getTipElement();\n    const tabClass = tip.getAttribute('class').match(BSCLS_PREFIX_REGEX);\n\n    if (tabClass !== null && tabClass.length > 0) {\n      tabClass.map(token => token.trim()).forEach(tClass => tip.classList.remove(tClass));\n    }\n  } // Static\n\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Popover.getOrCreateInstance(this, config);\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config]();\n      }\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Popover to jQuery only if jQuery is present\n */\n\n\ndefineJQueryPlugin(Popover);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): scrollspy.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$2 = 'scrollspy';\nconst DATA_KEY$2 = 'bs.scrollspy';\nconst EVENT_KEY$2 = `.${DATA_KEY$2}`;\nconst DATA_API_KEY$1 = '.data-api';\nconst Default$1 = {\n  offset: 10,\n  method: 'auto',\n  target: ''\n};\nconst DefaultType$1 = {\n  offset: 'number',\n  method: 'string',\n  target: '(string|element)'\n};\nconst EVENT_ACTIVATE = `activate${EVENT_KEY$2}`;\nconst EVENT_SCROLL = `scroll${EVENT_KEY$2}`;\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY$2}${DATA_API_KEY$1}`;\nconst CLASS_NAME_DROPDOWN_ITEM = 'dropdown-item';\nconst CLASS_NAME_ACTIVE$1 = 'active';\nconst SELECTOR_DATA_SPY = '[data-bs-spy=\"scroll\"]';\nconst SELECTOR_NAV_LIST_GROUP$1 = '.nav, .list-group';\nconst SELECTOR_NAV_LINKS = '.nav-link';\nconst SELECTOR_NAV_ITEMS = '.nav-item';\nconst SELECTOR_LIST_ITEMS = '.list-group-item';\nconst SELECTOR_DROPDOWN$1 = '.dropdown';\nconst SELECTOR_DROPDOWN_TOGGLE$1 = '.dropdown-toggle';\nconst METHOD_OFFSET = 'offset';\nconst METHOD_POSITION = 'position';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass ScrollSpy extends BaseComponent {\n  constructor(element, config) {\n    super(element);\n    this._scrollElement = this._element.tagName === 'BODY' ? window : this._element;\n    this._config = this._getConfig(config);\n    this._selector = `${this._config.target} ${SELECTOR_NAV_LINKS}, ${this._config.target} ${SELECTOR_LIST_ITEMS}, ${this._config.target} .${CLASS_NAME_DROPDOWN_ITEM}`;\n    this._offsets = [];\n    this._targets = [];\n    this._activeTarget = null;\n    this._scrollHeight = 0;\n    EventHandler.on(this._scrollElement, EVENT_SCROLL, () => this._process());\n    this.refresh();\n\n    this._process();\n  } // Getters\n\n\n  static get Default() {\n    return Default$1;\n  }\n\n  static get NAME() {\n    return NAME$2;\n  } // Public\n\n\n  refresh() {\n    const autoMethod = this._scrollElement === this._scrollElement.window ? METHOD_OFFSET : METHOD_POSITION;\n    const offsetMethod = this._config.method === 'auto' ? autoMethod : this._config.method;\n    const offsetBase = offsetMethod === METHOD_POSITION ? this._getScrollTop() : 0;\n    this._offsets = [];\n    this._targets = [];\n    this._scrollHeight = this._getScrollHeight();\n    const targets = SelectorEngine.find(this._selector);\n    targets.map(element => {\n      const targetSelector = getSelectorFromElement(element);\n      const target = targetSelector ? SelectorEngine.findOne(targetSelector) : null;\n\n      if (target) {\n        const targetBCR = target.getBoundingClientRect();\n\n        if (targetBCR.width || targetBCR.height) {\n          return [Manipulator[offsetMethod](target).top + offsetBase, targetSelector];\n        }\n      }\n\n      return null;\n    }).filter(item => item).sort((a, b) => a[0] - b[0]).forEach(item => {\n      this._offsets.push(item[0]);\n\n      this._targets.push(item[1]);\n    });\n  }\n\n  dispose() {\n    EventHandler.off(this._scrollElement, EVENT_KEY$2);\n    super.dispose();\n  } // Private\n\n\n  _getConfig(config) {\n    config = { ...Default$1,\n      ...Manipulator.getDataAttributes(this._element),\n      ...(typeof config === 'object' && config ? config : {})\n    };\n\n    if (typeof config.target !== 'string' && isElement(config.target)) {\n      let {\n        id\n      } = config.target;\n\n      if (!id) {\n        id = getUID(NAME$2);\n        config.target.id = id;\n      }\n\n      config.target = `#${id}`;\n    }\n\n    typeCheckConfig(NAME$2, config, DefaultType$1);\n    return config;\n  }\n\n  _getScrollTop() {\n    return this._scrollElement === window ? this._scrollElement.pageYOffset : this._scrollElement.scrollTop;\n  }\n\n  _getScrollHeight() {\n    return this._scrollElement.scrollHeight || Math.max(document.body.scrollHeight, document.documentElement.scrollHeight);\n  }\n\n  _getOffsetHeight() {\n    return this._scrollElement === window ? window.innerHeight : this._scrollElement.getBoundingClientRect().height;\n  }\n\n  _process() {\n    const scrollTop = this._getScrollTop() + this._config.offset;\n\n    const scrollHeight = this._getScrollHeight();\n\n    const maxScroll = this._config.offset + scrollHeight - this._getOffsetHeight();\n\n    if (this._scrollHeight !== scrollHeight) {\n      this.refresh();\n    }\n\n    if (scrollTop >= maxScroll) {\n      const target = this._targets[this._targets.length - 1];\n\n      if (this._activeTarget !== target) {\n        this._activate(target);\n      }\n\n      return;\n    }\n\n    if (this._activeTarget && scrollTop < this._offsets[0] && this._offsets[0] > 0) {\n      this._activeTarget = null;\n\n      this._clear();\n\n      return;\n    }\n\n    for (let i = this._offsets.length; i--;) {\n      const isActiveTarget = this._activeTarget !== this._targets[i] && scrollTop >= this._offsets[i] && (typeof this._offsets[i + 1] === 'undefined' || scrollTop < this._offsets[i + 1]);\n\n      if (isActiveTarget) {\n        this._activate(this._targets[i]);\n      }\n    }\n  }\n\n  _activate(target) {\n    this._activeTarget = target;\n\n    this._clear();\n\n    const queries = this._selector.split(',').map(selector => `${selector}[data-bs-target=\"${target}\"],${selector}[href=\"${target}\"]`);\n\n    const link = SelectorEngine.findOne(queries.join(','));\n\n    if (link.classList.contains(CLASS_NAME_DROPDOWN_ITEM)) {\n      SelectorEngine.findOne(SELECTOR_DROPDOWN_TOGGLE$1, link.closest(SELECTOR_DROPDOWN$1)).classList.add(CLASS_NAME_ACTIVE$1);\n      link.classList.add(CLASS_NAME_ACTIVE$1);\n    } else {\n      // Set triggered link as active\n      link.classList.add(CLASS_NAME_ACTIVE$1);\n      SelectorEngine.parents(link, SELECTOR_NAV_LIST_GROUP$1).forEach(listGroup => {\n        // Set triggered links parents as active\n        // With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor\n        SelectorEngine.prev(listGroup, `${SELECTOR_NAV_LINKS}, ${SELECTOR_LIST_ITEMS}`).forEach(item => item.classList.add(CLASS_NAME_ACTIVE$1)); // Handle special case when .nav-link is inside .nav-item\n\n        SelectorEngine.prev(listGroup, SELECTOR_NAV_ITEMS).forEach(navItem => {\n          SelectorEngine.children(navItem, SELECTOR_NAV_LINKS).forEach(item => item.classList.add(CLASS_NAME_ACTIVE$1));\n        });\n      });\n    }\n\n    EventHandler.trigger(this._scrollElement, EVENT_ACTIVATE, {\n      relatedTarget: target\n    });\n  }\n\n  _clear() {\n    SelectorEngine.find(this._selector).filter(node => node.classList.contains(CLASS_NAME_ACTIVE$1)).forEach(node => node.classList.remove(CLASS_NAME_ACTIVE$1));\n  } // Static\n\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = ScrollSpy.getOrCreateInstance(this, config);\n\n      if (typeof config !== 'string') {\n        return;\n      }\n\n      if (typeof data[config] === 'undefined') {\n        throw new TypeError(`No method named \"${config}\"`);\n      }\n\n      data[config]();\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n  SelectorEngine.find(SELECTOR_DATA_SPY).forEach(spy => new ScrollSpy(spy));\n});\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .ScrollSpy to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(ScrollSpy);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): tab.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$1 = 'tab';\nconst DATA_KEY$1 = 'bs.tab';\nconst EVENT_KEY$1 = `.${DATA_KEY$1}`;\nconst DATA_API_KEY = '.data-api';\nconst EVENT_HIDE$1 = `hide${EVENT_KEY$1}`;\nconst EVENT_HIDDEN$1 = `hidden${EVENT_KEY$1}`;\nconst EVENT_SHOW$1 = `show${EVENT_KEY$1}`;\nconst EVENT_SHOWN$1 = `shown${EVENT_KEY$1}`;\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY$1}${DATA_API_KEY}`;\nconst CLASS_NAME_DROPDOWN_MENU = 'dropdown-menu';\nconst CLASS_NAME_ACTIVE = 'active';\nconst CLASS_NAME_FADE$1 = 'fade';\nconst CLASS_NAME_SHOW$1 = 'show';\nconst SELECTOR_DROPDOWN = '.dropdown';\nconst SELECTOR_NAV_LIST_GROUP = '.nav, .list-group';\nconst SELECTOR_ACTIVE = '.active';\nconst SELECTOR_ACTIVE_UL = ':scope > li > .active';\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"tab\"], [data-bs-toggle=\"pill\"], [data-bs-toggle=\"list\"]';\nconst SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle';\nconst SELECTOR_DROPDOWN_ACTIVE_CHILD = ':scope > .dropdown-menu .active';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Tab extends BaseComponent {\n  // Getters\n  static get NAME() {\n    return NAME$1;\n  } // Public\n\n\n  show() {\n    if (this._element.parentNode && this._element.parentNode.nodeType === Node.ELEMENT_NODE && this._element.classList.contains(CLASS_NAME_ACTIVE)) {\n      return;\n    }\n\n    let previous;\n    const target = getElementFromSelector(this._element);\n\n    const listElement = this._element.closest(SELECTOR_NAV_LIST_GROUP);\n\n    if (listElement) {\n      const itemSelector = listElement.nodeName === 'UL' || listElement.nodeName === 'OL' ? SELECTOR_ACTIVE_UL : SELECTOR_ACTIVE;\n      previous = SelectorEngine.find(itemSelector, listElement);\n      previous = previous[previous.length - 1];\n    }\n\n    const hideEvent = previous ? EventHandler.trigger(previous, EVENT_HIDE$1, {\n      relatedTarget: this._element\n    }) : null;\n    const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$1, {\n      relatedTarget: previous\n    });\n\n    if (showEvent.defaultPrevented || hideEvent !== null && hideEvent.defaultPrevented) {\n      return;\n    }\n\n    this._activate(this._element, listElement);\n\n    const complete = () => {\n      EventHandler.trigger(previous, EVENT_HIDDEN$1, {\n        relatedTarget: this._element\n      });\n      EventHandler.trigger(this._element, EVENT_SHOWN$1, {\n        relatedTarget: previous\n      });\n    };\n\n    if (target) {\n      this._activate(target, target.parentNode, complete);\n    } else {\n      complete();\n    }\n  } // Private\n\n\n  _activate(element, container, callback) {\n    const activeElements = container && (container.nodeName === 'UL' || container.nodeName === 'OL') ? SelectorEngine.find(SELECTOR_ACTIVE_UL, container) : SelectorEngine.children(container, SELECTOR_ACTIVE);\n    const active = activeElements[0];\n    const isTransitioning = callback && active && active.classList.contains(CLASS_NAME_FADE$1);\n\n    const complete = () => this._transitionComplete(element, active, callback);\n\n    if (active && isTransitioning) {\n      active.classList.remove(CLASS_NAME_SHOW$1);\n\n      this._queueCallback(complete, element, true);\n    } else {\n      complete();\n    }\n  }\n\n  _transitionComplete(element, active, callback) {\n    if (active) {\n      active.classList.remove(CLASS_NAME_ACTIVE);\n      const dropdownChild = SelectorEngine.findOne(SELECTOR_DROPDOWN_ACTIVE_CHILD, active.parentNode);\n\n      if (dropdownChild) {\n        dropdownChild.classList.remove(CLASS_NAME_ACTIVE);\n      }\n\n      if (active.getAttribute('role') === 'tab') {\n        active.setAttribute('aria-selected', false);\n      }\n    }\n\n    element.classList.add(CLASS_NAME_ACTIVE);\n\n    if (element.getAttribute('role') === 'tab') {\n      element.setAttribute('aria-selected', true);\n    }\n\n    reflow(element);\n\n    if (element.classList.contains(CLASS_NAME_FADE$1)) {\n      element.classList.add(CLASS_NAME_SHOW$1);\n    }\n\n    let parent = element.parentNode;\n\n    if (parent && parent.nodeName === 'LI') {\n      parent = parent.parentNode;\n    }\n\n    if (parent && parent.classList.contains(CLASS_NAME_DROPDOWN_MENU)) {\n      const dropdownElement = element.closest(SELECTOR_DROPDOWN);\n\n      if (dropdownElement) {\n        SelectorEngine.find(SELECTOR_DROPDOWN_TOGGLE, dropdownElement).forEach(dropdown => dropdown.classList.add(CLASS_NAME_ACTIVE));\n      }\n\n      element.setAttribute('aria-expanded', true);\n    }\n\n    if (callback) {\n      callback();\n    }\n  } // Static\n\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Tab.getOrCreateInstance(this);\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config]();\n      }\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n  if (['A', 'AREA'].includes(this.tagName)) {\n    event.preventDefault();\n  }\n\n  if (isDisabled(this)) {\n    return;\n  }\n\n  const data = Tab.getOrCreateInstance(this);\n  data.show();\n});\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Tab to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Tab);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): toast.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'toast';\nconst DATA_KEY = 'bs.toast';\nconst EVENT_KEY = `.${DATA_KEY}`;\nconst EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY}`;\nconst EVENT_MOUSEOVER = `mouseover${EVENT_KEY}`;\nconst EVENT_MOUSEOUT = `mouseout${EVENT_KEY}`;\nconst EVENT_FOCUSIN = `focusin${EVENT_KEY}`;\nconst EVENT_FOCUSOUT = `focusout${EVENT_KEY}`;\nconst EVENT_HIDE = `hide${EVENT_KEY}`;\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`;\nconst EVENT_SHOW = `show${EVENT_KEY}`;\nconst EVENT_SHOWN = `shown${EVENT_KEY}`;\nconst CLASS_NAME_FADE = 'fade';\nconst CLASS_NAME_HIDE = 'hide';\nconst CLASS_NAME_SHOW = 'show';\nconst CLASS_NAME_SHOWING = 'showing';\nconst DefaultType = {\n  animation: 'boolean',\n  autohide: 'boolean',\n  delay: 'number'\n};\nconst Default = {\n  animation: true,\n  autohide: true,\n  delay: 5000\n};\nconst SELECTOR_DATA_DISMISS = '[data-bs-dismiss=\"toast\"]';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Toast extends BaseComponent {\n  constructor(element, config) {\n    super(element);\n    this._config = this._getConfig(config);\n    this._timeout = null;\n    this._hasMouseInteraction = false;\n    this._hasKeyboardInteraction = false;\n\n    this._setListeners();\n  } // Getters\n\n\n  static get DefaultType() {\n    return DefaultType;\n  }\n\n  static get Default() {\n    return Default;\n  }\n\n  static get NAME() {\n    return NAME;\n  } // Public\n\n\n  show() {\n    const showEvent = EventHandler.trigger(this._element, EVENT_SHOW);\n\n    if (showEvent.defaultPrevented) {\n      return;\n    }\n\n    this._clearTimeout();\n\n    if (this._config.animation) {\n      this._element.classList.add(CLASS_NAME_FADE);\n    }\n\n    const complete = () => {\n      this._element.classList.remove(CLASS_NAME_SHOWING);\n\n      this._element.classList.add(CLASS_NAME_SHOW);\n\n      EventHandler.trigger(this._element, EVENT_SHOWN);\n\n      this._maybeScheduleHide();\n    };\n\n    this._element.classList.remove(CLASS_NAME_HIDE);\n\n    reflow(this._element);\n\n    this._element.classList.add(CLASS_NAME_SHOWING);\n\n    this._queueCallback(complete, this._element, this._config.animation);\n  }\n\n  hide() {\n    if (!this._element.classList.contains(CLASS_NAME_SHOW)) {\n      return;\n    }\n\n    const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE);\n\n    if (hideEvent.defaultPrevented) {\n      return;\n    }\n\n    const complete = () => {\n      this._element.classList.add(CLASS_NAME_HIDE);\n\n      EventHandler.trigger(this._element, EVENT_HIDDEN);\n    };\n\n    this._element.classList.remove(CLASS_NAME_SHOW);\n\n    this._queueCallback(complete, this._element, this._config.animation);\n  }\n\n  dispose() {\n    this._clearTimeout();\n\n    if (this._element.classList.contains(CLASS_NAME_SHOW)) {\n      this._element.classList.remove(CLASS_NAME_SHOW);\n    }\n\n    super.dispose();\n  } // Private\n\n\n  _getConfig(config) {\n    config = { ...Default,\n      ...Manipulator.getDataAttributes(this._element),\n      ...(typeof config === 'object' && config ? config : {})\n    };\n    typeCheckConfig(NAME, config, this.constructor.DefaultType);\n    return config;\n  }\n\n  _maybeScheduleHide() {\n    if (!this._config.autohide) {\n      return;\n    }\n\n    if (this._hasMouseInteraction || this._hasKeyboardInteraction) {\n      return;\n    }\n\n    this._timeout = setTimeout(() => {\n      this.hide();\n    }, this._config.delay);\n  }\n\n  _onInteraction(event, isInteracting) {\n    switch (event.type) {\n      case 'mouseover':\n      case 'mouseout':\n        this._hasMouseInteraction = isInteracting;\n        break;\n\n      case 'focusin':\n      case 'focusout':\n        this._hasKeyboardInteraction = isInteracting;\n        break;\n    }\n\n    if (isInteracting) {\n      this._clearTimeout();\n\n      return;\n    }\n\n    const nextElement = event.relatedTarget;\n\n    if (this._element === nextElement || this._element.contains(nextElement)) {\n      return;\n    }\n\n    this._maybeScheduleHide();\n  }\n\n  _setListeners() {\n    EventHandler.on(this._element, EVENT_CLICK_DISMISS, SELECTOR_DATA_DISMISS, () => this.hide());\n    EventHandler.on(this._element, EVENT_MOUSEOVER, event => this._onInteraction(event, true));\n    EventHandler.on(this._element, EVENT_MOUSEOUT, event => this._onInteraction(event, false));\n    EventHandler.on(this._element, EVENT_FOCUSIN, event => this._onInteraction(event, true));\n    EventHandler.on(this._element, EVENT_FOCUSOUT, event => this._onInteraction(event, false));\n  }\n\n  _clearTimeout() {\n    clearTimeout(this._timeout);\n    this._timeout = null;\n  } // Static\n\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Toast.getOrCreateInstance(this, config);\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config](this);\n      }\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Toast to jQuery only if jQuery is present\n */\n\n\ndefineJQueryPlugin(Toast);\n\nexport { Alert, Button, Carousel, Collapse, Dropdown, Modal, Offcanvas, Popover, ScrollSpy, Tab, Toast, Tooltip };\n//# sourceMappingURL=bootstrap.esm.js.map\n"
  },
  {
    "path": "src/sourceDev.WebApp/SharedThemes/cyborg/wwwroot/js/jquery.js",
    "content": "/*!\n * jQuery JavaScript Library v3.7.0\n * https://jquery.com/\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license\n * https://jquery.org/license\n *\n * Date: 2023-05-11T18:29Z\n */\n(function (global, factory) {\n\n\t\"use strict\";\n\n\tif (typeof module === \"object\" && typeof module.exports === \"object\") {\n\n\t\t// For CommonJS and CommonJS-like environments where a proper `window`\n\t\t// is present, execute the factory and get jQuery.\n\t\t// For environments that do not have a `window` with a `document`\n\t\t// (such as Node.js), expose a factory as module.exports.\n\t\t// This accentuates the need for the creation of a real `window`.\n\t\t// e.g. var jQuery = require(\"jquery\")(window);\n\t\t// See ticket trac-14549 for more info.\n\t\tmodule.exports = global.document ?\n\t\t\tfactory(global, true) :\n\t\t\tfunction (w) {\n\t\t\t\tif (!w.document) {\n\t\t\t\t\tthrow new Error(\"jQuery requires a window with a document\");\n\t\t\t\t}\n\t\t\t\treturn factory(w);\n\t\t\t};\n\t} else {\n\t\tfactory(global);\n\t}\n\n\t// Pass this if window is not defined yet\n})(typeof window !== \"undefined\" ? window : this, function (window, noGlobal) {\n\n\t// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1\n\t// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode\n\t// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common\n\t// enough that all such attempts are guarded in a try block.\n\t\"use strict\";\n\n\tvar arr = [];\n\n\tvar getProto = Object.getPrototypeOf;\n\n\tvar slice = arr.slice;\n\n\tvar flat = arr.flat ? function (array) {\n\t\treturn arr.flat.call(array);\n\t} : function (array) {\n\t\treturn arr.concat.apply([], array);\n\t};\n\n\n\tvar push = arr.push;\n\n\tvar indexOf = arr.indexOf;\n\n\tvar class2type = {};\n\n\tvar toString = class2type.toString;\n\n\tvar hasOwn = class2type.hasOwnProperty;\n\n\tvar fnToString = hasOwn.toString;\n\n\tvar ObjectFunctionString = fnToString.call(Object);\n\n\tvar support = {};\n\n\tvar isFunction = function isFunction(obj) {\n\n\t\t// Support: Chrome <=57, Firefox <=52\n\t\t// In some browsers, typeof returns \"function\" for HTML <object> elements\n\t\t// (i.e., `typeof document.createElement( \"object\" ) === \"function\"`).\n\t\t// We don't want to classify *any* DOM node as a function.\n\t\t// Support: QtWeb <=3.8.5, WebKit <=534.34, wkhtmltopdf tool <=0.12.5\n\t\t// Plus for old WebKit, typeof returns \"function\" for HTML collections\n\t\t// (e.g., `typeof document.getElementsByTagName(\"div\") === \"function\"`). (gh-4756)\n\t\treturn typeof obj === \"function\" && typeof obj.nodeType !== \"number\" &&\n\t\t\ttypeof obj.item !== \"function\";\n\t};\n\n\n\tvar isWindow = function isWindow(obj) {\n\t\treturn obj != null && obj === obj.window;\n\t};\n\n\n\tvar document = window.document;\n\n\n\n\tvar preservedScriptAttributes = {\n\t\ttype: true,\n\t\tsrc: true,\n\t\tnonce: true,\n\t\tnoModule: true\n\t};\n\n\tfunction DOMEval(code, node, doc) {\n\t\tdoc = doc || document;\n\n\t\tvar i, val,\n\t\t\tscript = doc.createElement(\"script\");\n\n\t\tscript.text = code;\n\t\tif (node) {\n\t\t\tfor (i in preservedScriptAttributes) {\n\n\t\t\t\t// Support: Firefox 64+, Edge 18+\n\t\t\t\t// Some browsers don't support the \"nonce\" property on scripts.\n\t\t\t\t// On the other hand, just using `getAttribute` is not enough as\n\t\t\t\t// the `nonce` attribute is reset to an empty string whenever it\n\t\t\t\t// becomes browsing-context connected.\n\t\t\t\t// See https://github.com/whatwg/html/issues/2369\n\t\t\t\t// See https://html.spec.whatwg.org/#nonce-attributes\n\t\t\t\t// The `node.getAttribute` check was added for the sake of\n\t\t\t\t// `jQuery.globalEval` so that it can fake a nonce-containing node\n\t\t\t\t// via an object.\n\t\t\t\tval = node[i] || node.getAttribute && node.getAttribute(i);\n\t\t\t\tif (val) {\n\t\t\t\t\tscript.setAttribute(i, val);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tdoc.head.appendChild(script).parentNode.removeChild(script);\n\t}\n\n\n\tfunction toType(obj) {\n\t\tif (obj == null) {\n\t\t\treturn obj + \"\";\n\t\t}\n\n\t\t// Support: Android <=2.3 only (functionish RegExp)\n\t\treturn typeof obj === \"object\" || typeof obj === \"function\" ?\n\t\t\tclass2type[toString.call(obj)] || \"object\" :\n\t\t\ttypeof obj;\n\t}\n\t/* global Symbol */\n\t// Defining this global in .eslintrc.json would create a danger of using the global\n\t// unguarded in another place, it seems safer to define global only for this module\n\n\n\n\tvar version = \"3.7.0\",\n\n\t\trhtmlSuffix = /HTML$/i,\n\n\t\t// Define a local copy of jQuery\n\t\tjQuery = function (selector, context) {\n\n\t\t\t// The jQuery object is actually just the init constructor 'enhanced'\n\t\t\t// Need init if jQuery is called (just allow error to be thrown if not included)\n\t\t\treturn new jQuery.fn.init(selector, context);\n\t\t};\n\n\tjQuery.fn = jQuery.prototype = {\n\n\t\t// The current version of jQuery being used\n\t\tjquery: version,\n\n\t\tconstructor: jQuery,\n\n\t\t// The default length of a jQuery object is 0\n\t\tlength: 0,\n\n\t\ttoArray: function () {\n\t\t\treturn slice.call(this);\n\t\t},\n\n\t\t// Get the Nth element in the matched element set OR\n\t\t// Get the whole matched element set as a clean array\n\t\tget: function (num) {\n\n\t\t\t// Return all the elements in a clean array\n\t\t\tif (num == null) {\n\t\t\t\treturn slice.call(this);\n\t\t\t}\n\n\t\t\t// Return just the one element from the set\n\t\t\treturn num < 0 ? this[num + this.length] : this[num];\n\t\t},\n\n\t\t// Take an array of elements and push it onto the stack\n\t\t// (returning the new matched element set)\n\t\tpushStack: function (elems) {\n\n\t\t\t// Build a new jQuery matched element set\n\t\t\tvar ret = jQuery.merge(this.constructor(), elems);\n\n\t\t\t// Add the old object onto the stack (as a reference)\n\t\t\tret.prevObject = this;\n\n\t\t\t// Return the newly-formed element set\n\t\t\treturn ret;\n\t\t},\n\n\t\t// Execute a callback for every element in the matched set.\n\t\teach: function (callback) {\n\t\t\treturn jQuery.each(this, callback);\n\t\t},\n\n\t\tmap: function (callback) {\n\t\t\treturn this.pushStack(jQuery.map(this, function (elem, i) {\n\t\t\t\treturn callback.call(elem, i, elem);\n\t\t\t}));\n\t\t},\n\n\t\tslice: function () {\n\t\t\treturn this.pushStack(slice.apply(this, arguments));\n\t\t},\n\n\t\tfirst: function () {\n\t\t\treturn this.eq(0);\n\t\t},\n\n\t\tlast: function () {\n\t\t\treturn this.eq(-1);\n\t\t},\n\n\t\teven: function () {\n\t\t\treturn this.pushStack(jQuery.grep(this, function (_elem, i) {\n\t\t\t\treturn (i + 1) % 2;\n\t\t\t}));\n\t\t},\n\n\t\todd: function () {\n\t\t\treturn this.pushStack(jQuery.grep(this, function (_elem, i) {\n\t\t\t\treturn i % 2;\n\t\t\t}));\n\t\t},\n\n\t\teq: function (i) {\n\t\t\tvar len = this.length,\n\t\t\t\tj = +i + (i < 0 ? len : 0);\n\t\t\treturn this.pushStack(j >= 0 && j < len ? [this[j]] : []);\n\t\t},\n\n\t\tend: function () {\n\t\t\treturn this.prevObject || this.constructor();\n\t\t},\n\n\t\t// For internal use only.\n\t\t// Behaves like an Array's method, not like a jQuery method.\n\t\tpush: push,\n\t\tsort: arr.sort,\n\t\tsplice: arr.splice\n\t};\n\n\tjQuery.extend = jQuery.fn.extend = function () {\n\t\tvar options, name, src, copy, copyIsArray, clone,\n\t\t\ttarget = arguments[0] || {},\n\t\t\ti = 1,\n\t\t\tlength = arguments.length,\n\t\t\tdeep = false;\n\n\t\t// Handle a deep copy situation\n\t\tif (typeof target === \"boolean\") {\n\t\t\tdeep = target;\n\n\t\t\t// Skip the boolean and the target\n\t\t\ttarget = arguments[i] || {};\n\t\t\ti++;\n\t\t}\n\n\t\t// Handle case when target is a string or something (possible in deep copy)\n\t\tif (typeof target !== \"object\" && !isFunction(target)) {\n\t\t\ttarget = {};\n\t\t}\n\n\t\t// Extend jQuery itself if only one argument is passed\n\t\tif (i === length) {\n\t\t\ttarget = this;\n\t\t\ti--;\n\t\t}\n\n\t\tfor (; i < length; i++) {\n\n\t\t\t// Only deal with non-null/undefined values\n\t\t\tif ((options = arguments[i]) != null) {\n\n\t\t\t\t// Extend the base object\n\t\t\t\tfor (name in options) {\n\t\t\t\t\tcopy = options[name];\n\n\t\t\t\t\t// Prevent Object.prototype pollution\n\t\t\t\t\t// Prevent never-ending loop\n\t\t\t\t\tif (name === \"__proto__\" || target === copy) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\t\tif (deep && copy && (jQuery.isPlainObject(copy) ||\n\t\t\t\t\t\t(copyIsArray = Array.isArray(copy)))) {\n\t\t\t\t\t\tsrc = target[name];\n\n\t\t\t\t\t\t// Ensure proper type for the source value\n\t\t\t\t\t\tif (copyIsArray && !Array.isArray(src)) {\n\t\t\t\t\t\t\tclone = [];\n\t\t\t\t\t\t} else if (!copyIsArray && !jQuery.isPlainObject(src)) {\n\t\t\t\t\t\t\tclone = {};\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tclone = src;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcopyIsArray = false;\n\n\t\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\t\ttarget[name] = jQuery.extend(deep, clone, copy);\n\n\t\t\t\t\t\t// Don't bring in undefined values\n\t\t\t\t\t} else if (copy !== undefined) {\n\t\t\t\t\t\ttarget[name] = copy;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Return the modified object\n\t\treturn target;\n\t};\n\n\tjQuery.extend({\n\n\t\t// Unique for each copy of jQuery on the page\n\t\texpando: \"jQuery\" + (version + Math.random()).replace(/\\D/g, \"\"),\n\n\t\t// Assume jQuery is ready without the ready module\n\t\tisReady: true,\n\n\t\terror: function (msg) {\n\t\t\tthrow new Error(msg);\n\t\t},\n\n\t\tnoop: function () { },\n\n\t\tisPlainObject: function (obj) {\n\t\t\tvar proto, Ctor;\n\n\t\t\t// Detect obvious negatives\n\t\t\t// Use toString instead of jQuery.type to catch host objects\n\t\t\tif (!obj || toString.call(obj) !== \"[object Object]\") {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tproto = getProto(obj);\n\n\t\t\t// Objects with no prototype (e.g., `Object.create( null )`) are plain\n\t\t\tif (!proto) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\t// Objects with prototype are plain iff they were constructed by a global Object function\n\t\t\tCtor = hasOwn.call(proto, \"constructor\") && proto.constructor;\n\t\t\treturn typeof Ctor === \"function\" && fnToString.call(Ctor) === ObjectFunctionString;\n\t\t},\n\n\t\tisEmptyObject: function (obj) {\n\t\t\tvar name;\n\n\t\t\tfor (name in obj) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\n\t\t// Evaluates a script in a provided context; falls back to the global one\n\t\t// if not specified.\n\t\tglobalEval: function (code, options, doc) {\n\t\t\tDOMEval(code, { nonce: options && options.nonce }, doc);\n\t\t},\n\n\t\teach: function (obj, callback) {\n\t\t\tvar length, i = 0;\n\n\t\t\tif (isArrayLike(obj)) {\n\t\t\t\tlength = obj.length;\n\t\t\t\tfor (; i < length; i++) {\n\t\t\t\t\tif (callback.call(obj[i], i, obj[i]) === false) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor (i in obj) {\n\t\t\t\t\tif (callback.call(obj[i], i, obj[i]) === false) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn obj;\n\t\t},\n\n\n\t\t// Retrieve the text value of an array of DOM nodes\n\t\ttext: function (elem) {\n\t\t\tvar node,\n\t\t\t\tret = \"\",\n\t\t\t\ti = 0,\n\t\t\t\tnodeType = elem.nodeType;\n\n\t\t\tif (!nodeType) {\n\n\t\t\t\t// If no nodeType, this is expected to be an array\n\t\t\t\twhile ((node = elem[i++])) {\n\n\t\t\t\t\t// Do not traverse comment nodes\n\t\t\t\t\tret += jQuery.text(node);\n\t\t\t\t}\n\t\t\t} else if (nodeType === 1 || nodeType === 9 || nodeType === 11) {\n\t\t\t\treturn elem.textContent;\n\t\t\t} else if (nodeType === 3 || nodeType === 4) {\n\t\t\t\treturn elem.nodeValue;\n\t\t\t}\n\n\t\t\t// Do not include comment or processing instruction nodes\n\n\t\t\treturn ret;\n\t\t},\n\n\t\t// results is for internal usage only\n\t\tmakeArray: function (arr, results) {\n\t\t\tvar ret = results || [];\n\n\t\t\tif (arr != null) {\n\t\t\t\tif (isArrayLike(Object(arr))) {\n\t\t\t\t\tjQuery.merge(ret,\n\t\t\t\t\t\ttypeof arr === \"string\" ?\n\t\t\t\t\t\t\t[arr] : arr\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\tpush.call(ret, arr);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn ret;\n\t\t},\n\n\t\tinArray: function (elem, arr, i) {\n\t\t\treturn arr == null ? -1 : indexOf.call(arr, elem, i);\n\t\t},\n\n\t\tisXMLDoc: function (elem) {\n\t\t\tvar namespace = elem && elem.namespaceURI,\n\t\t\t\tdocElem = elem && (elem.ownerDocument || elem).documentElement;\n\n\t\t\t// Assume HTML when documentElement doesn't yet exist, such as inside\n\t\t\t// document fragments.\n\t\t\treturn !rhtmlSuffix.test(namespace || docElem && docElem.nodeName || \"HTML\");\n\t\t},\n\n\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\tmerge: function (first, second) {\n\t\t\tvar len = +second.length,\n\t\t\t\tj = 0,\n\t\t\t\ti = first.length;\n\n\t\t\tfor (; j < len; j++) {\n\t\t\t\tfirst[i++] = second[j];\n\t\t\t}\n\n\t\t\tfirst.length = i;\n\n\t\t\treturn first;\n\t\t},\n\n\t\tgrep: function (elems, callback, invert) {\n\t\t\tvar callbackInverse,\n\t\t\t\tmatches = [],\n\t\t\t\ti = 0,\n\t\t\t\tlength = elems.length,\n\t\t\t\tcallbackExpect = !invert;\n\n\t\t\t// Go through the array, only saving the items\n\t\t\t// that pass the validator function\n\t\t\tfor (; i < length; i++) {\n\t\t\t\tcallbackInverse = !callback(elems[i], i);\n\t\t\t\tif (callbackInverse !== callbackExpect) {\n\t\t\t\t\tmatches.push(elems[i]);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn matches;\n\t\t},\n\n\t\t// arg is for internal usage only\n\t\tmap: function (elems, callback, arg) {\n\t\t\tvar length, value,\n\t\t\t\ti = 0,\n\t\t\t\tret = [];\n\n\t\t\t// Go through the array, translating each of the items to their new values\n\t\t\tif (isArrayLike(elems)) {\n\t\t\t\tlength = elems.length;\n\t\t\t\tfor (; i < length; i++) {\n\t\t\t\t\tvalue = callback(elems[i], i, arg);\n\n\t\t\t\t\tif (value != null) {\n\t\t\t\t\t\tret.push(value);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Go through every key on the object,\n\t\t\t} else {\n\t\t\t\tfor (i in elems) {\n\t\t\t\t\tvalue = callback(elems[i], i, arg);\n\n\t\t\t\t\tif (value != null) {\n\t\t\t\t\t\tret.push(value);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Flatten any nested arrays\n\t\t\treturn flat(ret);\n\t\t},\n\n\t\t// A global GUID counter for objects\n\t\tguid: 1,\n\n\t\t// jQuery.support is not used in Core but other projects attach their\n\t\t// properties to it so it needs to exist.\n\t\tsupport: support\n\t});\n\n\tif (typeof Symbol === \"function\") {\n\t\tjQuery.fn[Symbol.iterator] = arr[Symbol.iterator];\n\t}\n\n\t// Populate the class2type map\n\tjQuery.each(\"Boolean Number String Function Array Date RegExp Object Error Symbol\".split(\" \"),\n\t\tfunction (_i, name) {\n\t\t\tclass2type[\"[object \" + name + \"]\"] = name.toLowerCase();\n\t\t});\n\n\tfunction isArrayLike(obj) {\n\n\t\t// Support: real iOS 8.2 only (not reproducible in simulator)\n\t\t// `in` check used to prevent JIT error (gh-2145)\n\t\t// hasOwn isn't used here due to false negatives\n\t\t// regarding Nodelist length in IE\n\t\tvar length = !!obj && \"length\" in obj && obj.length,\n\t\t\ttype = toType(obj);\n\n\t\tif (isFunction(obj) || isWindow(obj)) {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn type === \"array\" || length === 0 ||\n\t\t\ttypeof length === \"number\" && length > 0 && (length - 1) in obj;\n\t}\n\n\n\tfunction nodeName(elem, name) {\n\n\t\treturn elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();\n\n\t}\n\tvar pop = arr.pop;\n\n\n\tvar sort = arr.sort;\n\n\n\tvar splice = arr.splice;\n\n\n\tvar whitespace = \"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\";\n\n\n\tvar rtrimCSS = new RegExp(\n\t\t\"^\" + whitespace + \"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\" + whitespace + \"+$\",\n\t\t\"g\"\n\t);\n\n\n\n\n\t// Note: an element does not contain itself\n\tjQuery.contains = function (a, b) {\n\t\tvar bup = b && b.parentNode;\n\n\t\treturn a === bup || !!(bup && bup.nodeType === 1 && (\n\n\t\t\t// Support: IE 9 - 11+\n\t\t\t// IE doesn't have `contains` on SVG.\n\t\t\ta.contains ?\n\t\t\t\ta.contains(bup) :\n\t\t\t\ta.compareDocumentPosition && a.compareDocumentPosition(bup) & 16\n\t\t));\n\t};\n\n\n\n\n\t// CSS string/identifier serialization\n\t// https://drafts.csswg.org/cssom/#common-serializing-idioms\n\tvar rcssescape = /([\\0-\\x1f\\x7f]|^-?\\d)|^-$|[^\\x80-\\uFFFF\\w-]/g;\n\n\tfunction fcssescape(ch, asCodePoint) {\n\t\tif (asCodePoint) {\n\n\t\t\t// U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER\n\t\t\tif (ch === \"\\0\") {\n\t\t\t\treturn \"\\uFFFD\";\n\t\t\t}\n\n\t\t\t// Control characters and (dependent upon position) numbers get escaped as code points\n\t\t\treturn ch.slice(0, -1) + \"\\\\\" + ch.charCodeAt(ch.length - 1).toString(16) + \" \";\n\t\t}\n\n\t\t// Other potentially-special ASCII characters get backslash-escaped\n\t\treturn \"\\\\\" + ch;\n\t}\n\n\tjQuery.escapeSelector = function (sel) {\n\t\treturn (sel + \"\").replace(rcssescape, fcssescape);\n\t};\n\n\n\n\n\tvar preferredDoc = document,\n\t\tpushNative = push;\n\n\t(function () {\n\n\t\tvar i,\n\t\t\tExpr,\n\t\t\toutermostContext,\n\t\t\tsortInput,\n\t\t\thasDuplicate,\n\t\t\tpush = pushNative,\n\n\t\t\t// Local document vars\n\t\t\tdocument,\n\t\t\tdocumentElement,\n\t\t\tdocumentIsHTML,\n\t\t\trbuggyQSA,\n\t\t\tmatches,\n\n\t\t\t// Instance-specific data\n\t\t\texpando = jQuery.expando,\n\t\t\tdirruns = 0,\n\t\t\tdone = 0,\n\t\t\tclassCache = createCache(),\n\t\t\ttokenCache = createCache(),\n\t\t\tcompilerCache = createCache(),\n\t\t\tnonnativeSelectorCache = createCache(),\n\t\t\tsortOrder = function (a, b) {\n\t\t\t\tif (a === b) {\n\t\t\t\t\thasDuplicate = true;\n\t\t\t\t}\n\t\t\t\treturn 0;\n\t\t\t},\n\n\t\t\tbooleans = \"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|\" +\n\t\t\t\t\"loop|multiple|open|readonly|required|scoped\",\n\n\t\t\t// Regular expressions\n\n\t\t\t// https://www.w3.org/TR/css-syntax-3/#ident-token-diagram\n\t\t\tidentifier = \"(?:\\\\\\\\[\\\\da-fA-F]{1,6}\" + whitespace +\n\t\t\t\t\"?|\\\\\\\\[^\\\\r\\\\n\\\\f]|[\\\\w-]|[^\\0-\\\\x7f])+\",\n\n\t\t\t// Attribute selectors: https://www.w3.org/TR/selectors/#attribute-selectors\n\t\t\tattributes = \"\\\\[\" + whitespace + \"*(\" + identifier + \")(?:\" + whitespace +\n\n\t\t\t\t// Operator (capture 2)\n\t\t\t\t\"*([*^$|!~]?=)\" + whitespace +\n\n\t\t\t\t// \"Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]\"\n\t\t\t\t\"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\" + identifier + \"))|)\" +\n\t\t\t\twhitespace + \"*\\\\]\",\n\n\t\t\tpseudos = \":(\" + identifier + \")(?:\\\\((\" +\n\n\t\t\t\t// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:\n\t\t\t\t// 1. quoted (capture 3; capture 4 or capture 5)\n\t\t\t\t\"('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|\" +\n\n\t\t\t\t// 2. simple (capture 6)\n\t\t\t\t\"((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\" + attributes + \")*)|\" +\n\n\t\t\t\t// 3. anything else (capture 2)\n\t\t\t\t\".*\" +\n\t\t\t\t\")\\\\)|)\",\n\n\t\t\t// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter\n\t\t\trwhitespace = new RegExp(whitespace + \"+\", \"g\"),\n\n\t\t\trcomma = new RegExp(\"^\" + whitespace + \"*,\" + whitespace + \"*\"),\n\t\t\trleadingCombinator = new RegExp(\"^\" + whitespace + \"*([>+~]|\" + whitespace + \")\" +\n\t\t\t\twhitespace + \"*\"),\n\t\t\trdescend = new RegExp(whitespace + \"|>\"),\n\n\t\t\trpseudo = new RegExp(pseudos),\n\t\t\tridentifier = new RegExp(\"^\" + identifier + \"$\"),\n\n\t\t\tmatchExpr = {\n\t\t\t\tID: new RegExp(\"^#(\" + identifier + \")\"),\n\t\t\t\tCLASS: new RegExp(\"^\\\\.(\" + identifier + \")\"),\n\t\t\t\tTAG: new RegExp(\"^(\" + identifier + \"|[*])\"),\n\t\t\t\tATTR: new RegExp(\"^\" + attributes),\n\t\t\t\tPSEUDO: new RegExp(\"^\" + pseudos),\n\t\t\t\tCHILD: new RegExp(\n\t\t\t\t\t\"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\" +\n\t\t\t\t\twhitespace + \"*(even|odd|(([+-]|)(\\\\d*)n|)\" + whitespace + \"*(?:([+-]|)\" +\n\t\t\t\t\twhitespace + \"*(\\\\d+)|))\" + whitespace + \"*\\\\)|)\", \"i\"),\n\t\t\t\tbool: new RegExp(\"^(?:\" + booleans + \")$\", \"i\"),\n\n\t\t\t\t// For use in libraries implementing .is()\n\t\t\t\t// We use this for POS matching in `select`\n\t\t\t\tneedsContext: new RegExp(\"^\" + whitespace +\n\t\t\t\t\t\"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\" + whitespace +\n\t\t\t\t\t\"*((?:-\\\\d)?\\\\d*)\" + whitespace + \"*\\\\)|)(?=[^-]|$)\", \"i\")\n\t\t\t},\n\n\t\t\trinputs = /^(?:input|select|textarea|button)$/i,\n\t\t\trheader = /^h\\d$/i,\n\n\t\t\t// Easily-parseable/retrievable ID or TAG or CLASS selectors\n\t\t\trquickExpr = /^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,\n\n\t\t\trsibling = /[+~]/,\n\n\t\t\t// CSS escapes\n\t\t\t// https://www.w3.org/TR/CSS21/syndata.html#escaped-characters\n\t\t\trunescape = new RegExp(\"\\\\\\\\[\\\\da-fA-F]{1,6}\" + whitespace +\n\t\t\t\t\"?|\\\\\\\\([^\\\\r\\\\n\\\\f])\", \"g\"),\n\t\t\tfunescape = function (escape, nonHex) {\n\t\t\t\tvar high = \"0x\" + escape.slice(1) - 0x10000;\n\n\t\t\t\tif (nonHex) {\n\n\t\t\t\t\t// Strip the backslash prefix from a non-hex escape sequence\n\t\t\t\t\treturn nonHex;\n\t\t\t\t}\n\n\t\t\t\t// Replace a hexadecimal escape sequence with the encoded Unicode code point\n\t\t\t\t// Support: IE <=11+\n\t\t\t\t// For values outside the Basic Multilingual Plane (BMP), manually construct a\n\t\t\t\t// surrogate pair\n\t\t\t\treturn high < 0 ?\n\t\t\t\t\tString.fromCharCode(high + 0x10000) :\n\t\t\t\t\tString.fromCharCode(high >> 10 | 0xD800, high & 0x3FF | 0xDC00);\n\t\t\t},\n\n\t\t\t// Used for iframes; see `setDocument`.\n\t\t\t// Support: IE 9 - 11+, Edge 12 - 18+\n\t\t\t// Removing the function wrapper causes a \"Permission Denied\"\n\t\t\t// error in IE/Edge.\n\t\t\tunloadHandler = function () {\n\t\t\t\tsetDocument();\n\t\t\t},\n\n\t\t\tinDisabledFieldset = addCombinator(\n\t\t\t\tfunction (elem) {\n\t\t\t\t\treturn elem.disabled === true && nodeName(elem, \"fieldset\");\n\t\t\t\t},\n\t\t\t\t{ dir: \"parentNode\", next: \"legend\" }\n\t\t\t);\n\n\t\t// Support: IE <=9 only\n\t\t// Accessing document.activeElement can throw unexpectedly\n\t\t// https://bugs.jquery.com/ticket/13393\n\t\tfunction safeActiveElement() {\n\t\t\ttry {\n\t\t\t\treturn document.activeElement;\n\t\t\t} catch (err) { }\n\t\t}\n\n\t\t// Optimize for push.apply( _, NodeList )\n\t\ttry {\n\t\t\tpush.apply(\n\t\t\t\t(arr = slice.call(preferredDoc.childNodes)),\n\t\t\t\tpreferredDoc.childNodes\n\t\t\t);\n\n\t\t\t// Support: Android <=4.0\n\t\t\t// Detect silently failing push.apply\n\t\t\t// eslint-disable-next-line no-unused-expressions\n\t\t\tarr[preferredDoc.childNodes.length].nodeType;\n\t\t} catch (e) {\n\t\t\tpush = {\n\t\t\t\tapply: function (target, els) {\n\t\t\t\t\tpushNative.apply(target, slice.call(els));\n\t\t\t\t},\n\t\t\t\tcall: function (target) {\n\t\t\t\t\tpushNative.apply(target, slice.call(arguments, 1));\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\n\t\tfunction find(selector, context, results, seed) {\n\t\t\tvar m, i, elem, nid, match, groups, newSelector,\n\t\t\t\tnewContext = context && context.ownerDocument,\n\n\t\t\t\t// nodeType defaults to 9, since context defaults to document\n\t\t\t\tnodeType = context ? context.nodeType : 9;\n\n\t\t\tresults = results || [];\n\n\t\t\t// Return early from calls with invalid selector or context\n\t\t\tif (typeof selector !== \"string\" || !selector ||\n\t\t\t\tnodeType !== 1 && nodeType !== 9 && nodeType !== 11) {\n\n\t\t\t\treturn results;\n\t\t\t}\n\n\t\t\t// Try to shortcut find operations (as opposed to filters) in HTML documents\n\t\t\tif (!seed) {\n\t\t\t\tsetDocument(context);\n\t\t\t\tcontext = context || document;\n\n\t\t\t\tif (documentIsHTML) {\n\n\t\t\t\t\t// If the selector is sufficiently simple, try using a \"get*By*\" DOM method\n\t\t\t\t\t// (excepting DocumentFragment context, where the methods don't exist)\n\t\t\t\t\tif (nodeType !== 11 && (match = rquickExpr.exec(selector))) {\n\n\t\t\t\t\t\t// ID selector\n\t\t\t\t\t\tif ((m = match[1])) {\n\n\t\t\t\t\t\t\t// Document context\n\t\t\t\t\t\t\tif (nodeType === 9) {\n\t\t\t\t\t\t\t\tif ((elem = context.getElementById(m))) {\n\n\t\t\t\t\t\t\t\t\t// Support: IE 9 only\n\t\t\t\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\t\t\t\tif (elem.id === m) {\n\t\t\t\t\t\t\t\t\t\tpush.call(results, elem);\n\t\t\t\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t// Element context\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t// Support: IE 9 only\n\t\t\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\t\t\tif (newContext && (elem = newContext.getElementById(m)) &&\n\t\t\t\t\t\t\t\t\tfind.contains(context, elem) &&\n\t\t\t\t\t\t\t\t\telem.id === m) {\n\n\t\t\t\t\t\t\t\t\tpush.call(results, elem);\n\t\t\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Type selector\n\t\t\t\t\t\t} else if (match[2]) {\n\t\t\t\t\t\t\tpush.apply(results, context.getElementsByTagName(selector));\n\t\t\t\t\t\t\treturn results;\n\n\t\t\t\t\t\t\t// Class selector\n\t\t\t\t\t\t} else if ((m = match[3]) && context.getElementsByClassName) {\n\t\t\t\t\t\t\tpush.apply(results, context.getElementsByClassName(m));\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Take advantage of querySelectorAll\n\t\t\t\t\tif (!nonnativeSelectorCache[selector + \" \"] &&\n\t\t\t\t\t\t(!rbuggyQSA || !rbuggyQSA.test(selector))) {\n\n\t\t\t\t\t\tnewSelector = selector;\n\t\t\t\t\t\tnewContext = context;\n\n\t\t\t\t\t\t// qSA considers elements outside a scoping root when evaluating child or\n\t\t\t\t\t\t// descendant combinators, which is not what we want.\n\t\t\t\t\t\t// In such cases, we work around the behavior by prefixing every selector in the\n\t\t\t\t\t\t// list with an ID selector referencing the scope context.\n\t\t\t\t\t\t// The technique has to be used as well when a leading combinator is used\n\t\t\t\t\t\t// as such selectors are not recognized by querySelectorAll.\n\t\t\t\t\t\t// Thanks to Andrew Dupont for this technique.\n\t\t\t\t\t\tif (nodeType === 1 &&\n\t\t\t\t\t\t\t(rdescend.test(selector) || rleadingCombinator.test(selector))) {\n\n\t\t\t\t\t\t\t// Expand context for sibling selectors\n\t\t\t\t\t\t\tnewContext = rsibling.test(selector) && testContext(context.parentNode) ||\n\t\t\t\t\t\t\t\tcontext;\n\n\t\t\t\t\t\t\t// We can use :scope instead of the ID hack if the browser\n\t\t\t\t\t\t\t// supports it & if we're not changing the context.\n\t\t\t\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when\n\t\t\t\t\t\t\t// strict-comparing two documents; shallow comparisons work.\n\t\t\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\t\t\tif (newContext != context || !support.scope) {\n\n\t\t\t\t\t\t\t\t// Capture the context ID, setting it first if necessary\n\t\t\t\t\t\t\t\tif ((nid = context.getAttribute(\"id\"))) {\n\t\t\t\t\t\t\t\t\tnid = jQuery.escapeSelector(nid);\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tcontext.setAttribute(\"id\", (nid = expando));\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Prefix every selector in the list\n\t\t\t\t\t\t\tgroups = tokenize(selector);\n\t\t\t\t\t\t\ti = groups.length;\n\t\t\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\t\t\tgroups[i] = (nid ? \"#\" + nid : \":scope\") + \" \" +\n\t\t\t\t\t\t\t\t\ttoSelector(groups[i]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tnewSelector = groups.join(\",\");\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tpush.apply(results,\n\t\t\t\t\t\t\t\tnewContext.querySelectorAll(newSelector)\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t} catch (qsaError) {\n\t\t\t\t\t\t\tnonnativeSelectorCache(selector, true);\n\t\t\t\t\t\t} finally {\n\t\t\t\t\t\t\tif (nid === expando) {\n\t\t\t\t\t\t\t\tcontext.removeAttribute(\"id\");\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// All others\n\t\t\treturn select(selector.replace(rtrimCSS, \"$1\"), context, results, seed);\n\t\t}\n\n\t\t/**\n\t\t * Create key-value caches of limited size\n\t\t * @returns {function(string, object)} Returns the Object data after storing it on itself with\n\t\t *\tproperty name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)\n\t\t *\tdeleting the oldest entry\n\t\t */\n\t\tfunction createCache() {\n\t\t\tvar keys = [];\n\n\t\t\tfunction cache(key, value) {\n\n\t\t\t\t// Use (key + \" \") to avoid collision with native prototype properties\n\t\t\t\t// (see https://github.com/jquery/sizzle/issues/157)\n\t\t\t\tif (keys.push(key + \" \") > Expr.cacheLength) {\n\n\t\t\t\t\t// Only keep the most recent entries\n\t\t\t\t\tdelete cache[keys.shift()];\n\t\t\t\t}\n\t\t\t\treturn (cache[key + \" \"] = value);\n\t\t\t}\n\t\t\treturn cache;\n\t\t}\n\n\t\t/**\n\t\t * Mark a function for special use by jQuery selector module\n\t\t * @param {Function} fn The function to mark\n\t\t */\n\t\tfunction markFunction(fn) {\n\t\t\tfn[expando] = true;\n\t\t\treturn fn;\n\t\t}\n\n\t\t/**\n\t\t * Support testing using an element\n\t\t * @param {Function} fn Passed the created element and returns a boolean result\n\t\t */\n\t\tfunction assert(fn) {\n\t\t\tvar el = document.createElement(\"fieldset\");\n\n\t\t\ttry {\n\t\t\t\treturn !!fn(el);\n\t\t\t} catch (e) {\n\t\t\t\treturn false;\n\t\t\t} finally {\n\n\t\t\t\t// Remove from its parent by default\n\t\t\t\tif (el.parentNode) {\n\t\t\t\t\tel.parentNode.removeChild(el);\n\t\t\t\t}\n\n\t\t\t\t// release memory in IE\n\t\t\t\tel = null;\n\t\t\t}\n\t\t}\n\n\t\t/**\n\t\t * Returns a function to use in pseudos for input types\n\t\t * @param {String} type\n\t\t */\n\t\tfunction createInputPseudo(type) {\n\t\t\treturn function (elem) {\n\t\t\t\treturn nodeName(elem, \"input\") && elem.type === type;\n\t\t\t};\n\t\t}\n\n\t\t/**\n\t\t * Returns a function to use in pseudos for buttons\n\t\t * @param {String} type\n\t\t */\n\t\tfunction createButtonPseudo(type) {\n\t\t\treturn function (elem) {\n\t\t\t\treturn (nodeName(elem, \"input\") || nodeName(elem, \"button\")) &&\n\t\t\t\t\telem.type === type;\n\t\t\t};\n\t\t}\n\n\t\t/**\n\t\t * Returns a function to use in pseudos for :enabled/:disabled\n\t\t * @param {Boolean} disabled true for :disabled; false for :enabled\n\t\t */\n\t\tfunction createDisabledPseudo(disabled) {\n\n\t\t\t// Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable\n\t\t\treturn function (elem) {\n\n\t\t\t\t// Only certain elements can match :enabled or :disabled\n\t\t\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled\n\t\t\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled\n\t\t\t\tif (\"form\" in elem) {\n\n\t\t\t\t\t// Check for inherited disabledness on relevant non-disabled elements:\n\t\t\t\t\t// * listed form-associated elements in a disabled fieldset\n\t\t\t\t\t//   https://html.spec.whatwg.org/multipage/forms.html#category-listed\n\t\t\t\t\t//   https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled\n\t\t\t\t\t// * option elements in a disabled optgroup\n\t\t\t\t\t//   https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled\n\t\t\t\t\t// All such elements have a \"form\" property.\n\t\t\t\t\tif (elem.parentNode && elem.disabled === false) {\n\n\t\t\t\t\t\t// Option elements defer to a parent optgroup if present\n\t\t\t\t\t\tif (\"label\" in elem) {\n\t\t\t\t\t\t\tif (\"label\" in elem.parentNode) {\n\t\t\t\t\t\t\t\treturn elem.parentNode.disabled === disabled;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\treturn elem.disabled === disabled;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Support: IE 6 - 11+\n\t\t\t\t\t\t// Use the isDisabled shortcut property to check for disabled fieldset ancestors\n\t\t\t\t\t\treturn elem.isDisabled === disabled ||\n\n\t\t\t\t\t\t\t// Where there is no isDisabled, check manually\n\t\t\t\t\t\t\telem.isDisabled !== !disabled &&\n\t\t\t\t\t\t\tinDisabledFieldset(elem) === disabled;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn elem.disabled === disabled;\n\n\t\t\t\t\t// Try to winnow out elements that can't be disabled before trusting the disabled property.\n\t\t\t\t\t// Some victims get caught in our net (label, legend, menu, track), but it shouldn't\n\t\t\t\t\t// even exist on them, let alone have a boolean value.\n\t\t\t\t} else if (\"label\" in elem) {\n\t\t\t\t\treturn elem.disabled === disabled;\n\t\t\t\t}\n\n\t\t\t\t// Remaining elements are neither :enabled nor :disabled\n\t\t\t\treturn false;\n\t\t\t};\n\t\t}\n\n\t\t/**\n\t\t * Returns a function to use in pseudos for positionals\n\t\t * @param {Function} fn\n\t\t */\n\t\tfunction createPositionalPseudo(fn) {\n\t\t\treturn markFunction(function (argument) {\n\t\t\t\targument = +argument;\n\t\t\t\treturn markFunction(function (seed, matches) {\n\t\t\t\t\tvar j,\n\t\t\t\t\t\tmatchIndexes = fn([], seed.length, argument),\n\t\t\t\t\t\ti = matchIndexes.length;\n\n\t\t\t\t\t// Match elements found at the specified indexes\n\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\tif (seed[(j = matchIndexes[i])]) {\n\t\t\t\t\t\t\tseed[j] = !(matches[j] = seed[j]);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\n\t\t/**\n\t\t * Checks a node for validity as a jQuery selector context\n\t\t * @param {Element|Object=} context\n\t\t * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value\n\t\t */\n\t\tfunction testContext(context) {\n\t\t\treturn context && typeof context.getElementsByTagName !== \"undefined\" && context;\n\t\t}\n\n\t\t/**\n\t\t * Sets document-related variables once based on the current document\n\t\t * @param {Element|Object} [node] An element or document object to use to set the document\n\t\t * @returns {Object} Returns the current document\n\t\t */\n\t\tfunction setDocument(node) {\n\t\t\tvar subWindow,\n\t\t\t\tdoc = node ? node.ownerDocument || node : preferredDoc;\n\n\t\t\t// Return early if doc is invalid or already selected\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tif (doc == document || doc.nodeType !== 9 || !doc.documentElement) {\n\t\t\t\treturn document;\n\t\t\t}\n\n\t\t\t// Update global variables\n\t\t\tdocument = doc;\n\t\t\tdocumentElement = document.documentElement;\n\t\t\tdocumentIsHTML = !jQuery.isXMLDoc(document);\n\n\t\t\t// Support: iOS 7 only, IE 9 - 11+\n\t\t\t// Older browsers didn't support unprefixed `matches`.\n\t\t\tmatches = documentElement.matches ||\n\t\t\t\tdocumentElement.webkitMatchesSelector ||\n\t\t\t\tdocumentElement.msMatchesSelector;\n\n\t\t\t// Support: IE 9 - 11+, Edge 12 - 18+\n\t\t\t// Accessing iframe documents after unload throws \"permission denied\" errors (see trac-13936)\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tif (preferredDoc != document &&\n\t\t\t\t(subWindow = document.defaultView) && subWindow.top !== subWindow) {\n\n\t\t\t\t// Support: IE 9 - 11+, Edge 12 - 18+\n\t\t\t\tsubWindow.addEventListener(\"unload\", unloadHandler);\n\t\t\t}\n\n\t\t\t// Support: IE <10\n\t\t\t// Check if getElementById returns elements by name\n\t\t\t// The broken getElementById methods don't pick up programmatically-set names,\n\t\t\t// so use a roundabout getElementsByName test\n\t\t\tsupport.getById = assert(function (el) {\n\t\t\t\tdocumentElement.appendChild(el).id = jQuery.expando;\n\t\t\t\treturn !document.getElementsByName ||\n\t\t\t\t\t!document.getElementsByName(jQuery.expando).length;\n\t\t\t});\n\n\t\t\t// Support: IE 9 only\n\t\t\t// Check to see if it's possible to do matchesSelector\n\t\t\t// on a disconnected node.\n\t\t\tsupport.disconnectedMatch = assert(function (el) {\n\t\t\t\treturn matches.call(el, \"*\");\n\t\t\t});\n\n\t\t\t// Support: IE 9 - 11+, Edge 12 - 18+\n\t\t\t// IE/Edge don't support the :scope pseudo-class.\n\t\t\tsupport.scope = assert(function () {\n\t\t\t\treturn document.querySelectorAll(\":scope\");\n\t\t\t});\n\n\t\t\t// Support: Chrome 105 - 111 only, Safari 15.4 - 16.3 only\n\t\t\t// Make sure the `:has()` argument is parsed unforgivingly.\n\t\t\t// We include `*` in the test to detect buggy implementations that are\n\t\t\t// _selectively_ forgiving (specifically when the list includes at least\n\t\t\t// one valid selector).\n\t\t\t// Note that we treat complete lack of support for `:has()` as if it were\n\t\t\t// spec-compliant support, which is fine because use of `:has()` in such\n\t\t\t// environments will fail in the qSA path and fall back to jQuery traversal\n\t\t\t// anyway.\n\t\t\tsupport.cssHas = assert(function () {\n\t\t\t\ttry {\n\t\t\t\t\tdocument.querySelector(\":has(*,:jqfake)\");\n\t\t\t\t\treturn false;\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t// ID filter and find\n\t\t\tif (support.getById) {\n\t\t\t\tExpr.filter.ID = function (id) {\n\t\t\t\t\tvar attrId = id.replace(runescape, funescape);\n\t\t\t\t\treturn function (elem) {\n\t\t\t\t\t\treturn elem.getAttribute(\"id\") === attrId;\n\t\t\t\t\t};\n\t\t\t\t};\n\t\t\t\tExpr.find.ID = function (id, context) {\n\t\t\t\t\tif (typeof context.getElementById !== \"undefined\" && documentIsHTML) {\n\t\t\t\t\t\tvar elem = context.getElementById(id);\n\t\t\t\t\t\treturn elem ? [elem] : [];\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t} else {\n\t\t\t\tExpr.filter.ID = function (id) {\n\t\t\t\t\tvar attrId = id.replace(runescape, funescape);\n\t\t\t\t\treturn function (elem) {\n\t\t\t\t\t\tvar node = typeof elem.getAttributeNode !== \"undefined\" &&\n\t\t\t\t\t\t\telem.getAttributeNode(\"id\");\n\t\t\t\t\t\treturn node && node.value === attrId;\n\t\t\t\t\t};\n\t\t\t\t};\n\n\t\t\t\t// Support: IE 6 - 7 only\n\t\t\t\t// getElementById is not reliable as a find shortcut\n\t\t\t\tExpr.find.ID = function (id, context) {\n\t\t\t\t\tif (typeof context.getElementById !== \"undefined\" && documentIsHTML) {\n\t\t\t\t\t\tvar node, i, elems,\n\t\t\t\t\t\t\telem = context.getElementById(id);\n\n\t\t\t\t\t\tif (elem) {\n\n\t\t\t\t\t\t\t// Verify the id attribute\n\t\t\t\t\t\t\tnode = elem.getAttributeNode(\"id\");\n\t\t\t\t\t\t\tif (node && node.value === id) {\n\t\t\t\t\t\t\t\treturn [elem];\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Fall back on getElementsByName\n\t\t\t\t\t\t\telems = context.getElementsByName(id);\n\t\t\t\t\t\t\ti = 0;\n\t\t\t\t\t\t\twhile ((elem = elems[i++])) {\n\t\t\t\t\t\t\t\tnode = elem.getAttributeNode(\"id\");\n\t\t\t\t\t\t\t\tif (node && node.value === id) {\n\t\t\t\t\t\t\t\t\treturn [elem];\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn [];\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\n\t\t\t// Tag\n\t\t\tExpr.find.TAG = function (tag, context) {\n\t\t\t\tif (typeof context.getElementsByTagName !== \"undefined\") {\n\t\t\t\t\treturn context.getElementsByTagName(tag);\n\n\t\t\t\t\t// DocumentFragment nodes don't have gEBTN\n\t\t\t\t} else {\n\t\t\t\t\treturn context.querySelectorAll(tag);\n\t\t\t\t}\n\t\t\t};\n\n\t\t\t// Class\n\t\t\tExpr.find.CLASS = function (className, context) {\n\t\t\t\tif (typeof context.getElementsByClassName !== \"undefined\" && documentIsHTML) {\n\t\t\t\t\treturn context.getElementsByClassName(className);\n\t\t\t\t}\n\t\t\t};\n\n\t\t\t/* QSA/matchesSelector\n\t\t\t---------------------------------------------------------------------- */\n\n\t\t\t// QSA and matchesSelector support\n\n\t\t\trbuggyQSA = [];\n\n\t\t\t// Build QSA regex\n\t\t\t// Regex strategy adopted from Diego Perini\n\t\t\tassert(function (el) {\n\n\t\t\t\tvar input;\n\n\t\t\t\tdocumentElement.appendChild(el).innerHTML =\n\t\t\t\t\t\"<a id='\" + expando + \"' href='' disabled='disabled'></a>\" +\n\t\t\t\t\t\"<select id='\" + expando + \"-\\r\\\\' disabled='disabled'>\" +\n\t\t\t\t\t\"<option selected=''></option></select>\";\n\n\t\t\t\t// Support: iOS <=7 - 8 only\n\t\t\t\t// Boolean attributes and \"value\" are not treated correctly in some XML documents\n\t\t\t\tif (!el.querySelectorAll(\"[selected]\").length) {\n\t\t\t\t\trbuggyQSA.push(\"\\\\[\" + whitespace + \"*(?:value|\" + booleans + \")\");\n\t\t\t\t}\n\n\t\t\t\t// Support: iOS <=7 - 8 only\n\t\t\t\tif (!el.querySelectorAll(\"[id~=\" + expando + \"-]\").length) {\n\t\t\t\t\trbuggyQSA.push(\"~=\");\n\t\t\t\t}\n\n\t\t\t\t// Support: iOS 8 only\n\t\t\t\t// https://bugs.webkit.org/show_bug.cgi?id=136851\n\t\t\t\t// In-page `selector#id sibling-combinator selector` fails\n\t\t\t\tif (!el.querySelectorAll(\"a#\" + expando + \"+*\").length) {\n\t\t\t\t\trbuggyQSA.push(\".#.+[+~]\");\n\t\t\t\t}\n\n\t\t\t\t// Support: Chrome <=105+, Firefox <=104+, Safari <=15.4+\n\t\t\t\t// In some of the document kinds, these selectors wouldn't work natively.\n\t\t\t\t// This is probably OK but for backwards compatibility we want to maintain\n\t\t\t\t// handling them through jQuery traversal in jQuery 3.x.\n\t\t\t\tif (!el.querySelectorAll(\":checked\").length) {\n\t\t\t\t\trbuggyQSA.push(\":checked\");\n\t\t\t\t}\n\n\t\t\t\t// Support: Windows 8 Native Apps\n\t\t\t\t// The type and name attributes are restricted during .innerHTML assignment\n\t\t\t\tinput = document.createElement(\"input\");\n\t\t\t\tinput.setAttribute(\"type\", \"hidden\");\n\t\t\t\tel.appendChild(input).setAttribute(\"name\", \"D\");\n\n\t\t\t\t// Support: IE 9 - 11+\n\t\t\t\t// IE's :disabled selector does not pick up the children of disabled fieldsets\n\t\t\t\t// Support: Chrome <=105+, Firefox <=104+, Safari <=15.4+\n\t\t\t\t// In some of the document kinds, these selectors wouldn't work natively.\n\t\t\t\t// This is probably OK but for backwards compatibility we want to maintain\n\t\t\t\t// handling them through jQuery traversal in jQuery 3.x.\n\t\t\t\tdocumentElement.appendChild(el).disabled = true;\n\t\t\t\tif (el.querySelectorAll(\":disabled\").length !== 2) {\n\t\t\t\t\trbuggyQSA.push(\":enabled\", \":disabled\");\n\t\t\t\t}\n\n\t\t\t\t// Support: IE 11+, Edge 15 - 18+\n\t\t\t\t// IE 11/Edge don't find elements on a `[name='']` query in some cases.\n\t\t\t\t// Adding a temporary attribute to the document before the selection works\n\t\t\t\t// around the issue.\n\t\t\t\t// Interestingly, IE 10 & older don't seem to have the issue.\n\t\t\t\tinput = document.createElement(\"input\");\n\t\t\t\tinput.setAttribute(\"name\", \"\");\n\t\t\t\tel.appendChild(input);\n\t\t\t\tif (!el.querySelectorAll(\"[name='']\").length) {\n\t\t\t\t\trbuggyQSA.push(\"\\\\[\" + whitespace + \"*name\" + whitespace + \"*=\" +\n\t\t\t\t\t\twhitespace + \"*(?:''|\\\"\\\")\");\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tif (!support.cssHas) {\n\n\t\t\t\t// Support: Chrome 105 - 110+, Safari 15.4 - 16.3+\n\t\t\t\t// Our regular `try-catch` mechanism fails to detect natively-unsupported\n\t\t\t\t// pseudo-classes inside `:has()` (such as `:has(:contains(\"Foo\"))`)\n\t\t\t\t// in browsers that parse the `:has()` argument as a forgiving selector list.\n\t\t\t\t// https://drafts.csswg.org/selectors/#relational now requires the argument\n\t\t\t\t// to be parsed unforgivingly, but browsers have not yet fully adjusted.\n\t\t\t\trbuggyQSA.push(\":has\");\n\t\t\t}\n\n\t\t\trbuggyQSA = rbuggyQSA.length && new RegExp(rbuggyQSA.join(\"|\"));\n\n\t\t\t/* Sorting\n\t\t\t---------------------------------------------------------------------- */\n\n\t\t\t// Document order sorting\n\t\t\tsortOrder = function (a, b) {\n\n\t\t\t\t// Flag for duplicate removal\n\t\t\t\tif (a === b) {\n\t\t\t\t\thasDuplicate = true;\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\n\t\t\t\t// Sort on method existence if only one input has compareDocumentPosition\n\t\t\t\tvar compare = !a.compareDocumentPosition - !b.compareDocumentPosition;\n\t\t\t\tif (compare) {\n\t\t\t\t\treturn compare;\n\t\t\t\t}\n\n\t\t\t\t// Calculate position if both inputs belong to the same document\n\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\tcompare = (a.ownerDocument || a) == (b.ownerDocument || b) ?\n\t\t\t\t\ta.compareDocumentPosition(b) :\n\n\t\t\t\t\t// Otherwise we know they are disconnected\n\t\t\t\t\t1;\n\n\t\t\t\t// Disconnected nodes\n\t\t\t\tif (compare & 1 ||\n\t\t\t\t\t(!support.sortDetached && b.compareDocumentPosition(a) === compare)) {\n\n\t\t\t\t\t// Choose the first element that is related to our preferred document\n\t\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\tif (a === document || a.ownerDocument == preferredDoc &&\n\t\t\t\t\t\tfind.contains(preferredDoc, a)) {\n\t\t\t\t\t\treturn -1;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\tif (b === document || b.ownerDocument == preferredDoc &&\n\t\t\t\t\t\tfind.contains(preferredDoc, b)) {\n\t\t\t\t\t\treturn 1;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Maintain original order\n\t\t\t\t\treturn sortInput ?\n\t\t\t\t\t\t(indexOf.call(sortInput, a) - indexOf.call(sortInput, b)) :\n\t\t\t\t\t\t0;\n\t\t\t\t}\n\n\t\t\t\treturn compare & 4 ? -1 : 1;\n\t\t\t};\n\n\t\t\treturn document;\n\t\t}\n\n\t\tfind.matches = function (expr, elements) {\n\t\t\treturn find(expr, null, null, elements);\n\t\t};\n\n\t\tfind.matchesSelector = function (elem, expr) {\n\t\t\tsetDocument(elem);\n\n\t\t\tif (documentIsHTML &&\n\t\t\t\t!nonnativeSelectorCache[expr + \" \"] &&\n\t\t\t\t(!rbuggyQSA || !rbuggyQSA.test(expr))) {\n\n\t\t\t\ttry {\n\t\t\t\t\tvar ret = matches.call(elem, expr);\n\n\t\t\t\t\t// IE 9's matchesSelector returns false on disconnected nodes\n\t\t\t\t\tif (ret || support.disconnectedMatch ||\n\n\t\t\t\t\t\t// As well, disconnected nodes are said to be in a document\n\t\t\t\t\t\t// fragment in IE 9\n\t\t\t\t\t\telem.document && elem.document.nodeType !== 11) {\n\t\t\t\t\t\treturn ret;\n\t\t\t\t\t}\n\t\t\t\t} catch (e) {\n\t\t\t\t\tnonnativeSelectorCache(expr, true);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn find(expr, document, null, [elem]).length > 0;\n\t\t};\n\n\t\tfind.contains = function (context, elem) {\n\n\t\t\t// Set document vars if needed\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tif ((context.ownerDocument || context) != document) {\n\t\t\t\tsetDocument(context);\n\t\t\t}\n\t\t\treturn jQuery.contains(context, elem);\n\t\t};\n\n\n\t\tfind.attr = function (elem, name) {\n\n\t\t\t// Set document vars if needed\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tif ((elem.ownerDocument || elem) != document) {\n\t\t\t\tsetDocument(elem);\n\t\t\t}\n\n\t\t\tvar fn = Expr.attrHandle[name.toLowerCase()],\n\n\t\t\t\t// Don't get fooled by Object.prototype properties (see trac-13807)\n\t\t\t\tval = fn && hasOwn.call(Expr.attrHandle, name.toLowerCase()) ?\n\t\t\t\t\tfn(elem, name, !documentIsHTML) :\n\t\t\t\t\tundefined;\n\n\t\t\tif (val !== undefined) {\n\t\t\t\treturn val;\n\t\t\t}\n\n\t\t\treturn elem.getAttribute(name);\n\t\t};\n\n\t\tfind.error = function (msg) {\n\t\t\tthrow new Error(\"Syntax error, unrecognized expression: \" + msg);\n\t\t};\n\n\t\t/**\n\t\t * Document sorting and removing duplicates\n\t\t * @param {ArrayLike} results\n\t\t */\n\t\tjQuery.uniqueSort = function (results) {\n\t\t\tvar elem,\n\t\t\t\tduplicates = [],\n\t\t\t\tj = 0,\n\t\t\t\ti = 0;\n\n\t\t\t// Unless we *know* we can detect duplicates, assume their presence\n\t\t\t//\n\t\t\t// Support: Android <=4.0+\n\t\t\t// Testing for detecting duplicates is unpredictable so instead assume we can't\n\t\t\t// depend on duplicate detection in all browsers without a stable sort.\n\t\t\thasDuplicate = !support.sortStable;\n\t\t\tsortInput = !support.sortStable && slice.call(results, 0);\n\t\t\tsort.call(results, sortOrder);\n\n\t\t\tif (hasDuplicate) {\n\t\t\t\twhile ((elem = results[i++])) {\n\t\t\t\t\tif (elem === results[i]) {\n\t\t\t\t\t\tj = duplicates.push(i);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\twhile (j--) {\n\t\t\t\t\tsplice.call(results, duplicates[j], 1);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Clear input after sorting to release objects\n\t\t\t// See https://github.com/jquery/sizzle/pull/225\n\t\t\tsortInput = null;\n\n\t\t\treturn results;\n\t\t};\n\n\t\tjQuery.fn.uniqueSort = function () {\n\t\t\treturn this.pushStack(jQuery.uniqueSort(slice.apply(this)));\n\t\t};\n\n\t\tExpr = jQuery.expr = {\n\n\t\t\t// Can be adjusted by the user\n\t\t\tcacheLength: 50,\n\n\t\t\tcreatePseudo: markFunction,\n\n\t\t\tmatch: matchExpr,\n\n\t\t\tattrHandle: {},\n\n\t\t\tfind: {},\n\n\t\t\trelative: {\n\t\t\t\t\">\": { dir: \"parentNode\", first: true },\n\t\t\t\t\" \": { dir: \"parentNode\" },\n\t\t\t\t\"+\": { dir: \"previousSibling\", first: true },\n\t\t\t\t\"~\": { dir: \"previousSibling\" }\n\t\t\t},\n\n\t\t\tpreFilter: {\n\t\t\t\tATTR: function (match) {\n\t\t\t\t\tmatch[1] = match[1].replace(runescape, funescape);\n\n\t\t\t\t\t// Move the given value to match[3] whether quoted or unquoted\n\t\t\t\t\tmatch[3] = (match[3] || match[4] || match[5] || \"\")\n\t\t\t\t\t\t.replace(runescape, funescape);\n\n\t\t\t\t\tif (match[2] === \"~=\") {\n\t\t\t\t\t\tmatch[3] = \" \" + match[3] + \" \";\n\t\t\t\t\t}\n\n\t\t\t\t\treturn match.slice(0, 4);\n\t\t\t\t},\n\n\t\t\t\tCHILD: function (match) {\n\n\t\t\t\t\t/* matches from matchExpr[\"CHILD\"]\n\t\t\t\t\t\t1 type (only|nth|...)\n\t\t\t\t\t\t2 what (child|of-type)\n\t\t\t\t\t\t3 argument (even|odd|\\d*|\\d*n([+-]\\d+)?|...)\n\t\t\t\t\t\t4 xn-component of xn+y argument ([+-]?\\d*n|)\n\t\t\t\t\t\t5 sign of xn-component\n\t\t\t\t\t\t6 x of xn-component\n\t\t\t\t\t\t7 sign of y-component\n\t\t\t\t\t\t8 y of y-component\n\t\t\t\t\t*/\n\t\t\t\t\tmatch[1] = match[1].toLowerCase();\n\n\t\t\t\t\tif (match[1].slice(0, 3) === \"nth\") {\n\n\t\t\t\t\t\t// nth-* requires argument\n\t\t\t\t\t\tif (!match[3]) {\n\t\t\t\t\t\t\tfind.error(match[0]);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// numeric x and y parameters for Expr.filter.CHILD\n\t\t\t\t\t\t// remember that false/true cast respectively to 0/1\n\t\t\t\t\t\tmatch[4] = +(match[4] ?\n\t\t\t\t\t\t\tmatch[5] + (match[6] || 1) :\n\t\t\t\t\t\t\t2 * (match[3] === \"even\" || match[3] === \"odd\")\n\t\t\t\t\t\t);\n\t\t\t\t\t\tmatch[5] = +((match[7] + match[8]) || match[3] === \"odd\");\n\n\t\t\t\t\t\t// other types prohibit arguments\n\t\t\t\t\t} else if (match[3]) {\n\t\t\t\t\t\tfind.error(match[0]);\n\t\t\t\t\t}\n\n\t\t\t\t\treturn match;\n\t\t\t\t},\n\n\t\t\t\tPSEUDO: function (match) {\n\t\t\t\t\tvar excess,\n\t\t\t\t\t\tunquoted = !match[6] && match[2];\n\n\t\t\t\t\tif (matchExpr.CHILD.test(match[0])) {\n\t\t\t\t\t\treturn null;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Accept quoted arguments as-is\n\t\t\t\t\tif (match[3]) {\n\t\t\t\t\t\tmatch[2] = match[4] || match[5] || \"\";\n\n\t\t\t\t\t\t// Strip excess characters from unquoted arguments\n\t\t\t\t\t} else if (unquoted && rpseudo.test(unquoted) &&\n\n\t\t\t\t\t\t// Get excess from tokenize (recursively)\n\t\t\t\t\t\t(excess = tokenize(unquoted, true)) &&\n\n\t\t\t\t\t\t// advance to the next closing parenthesis\n\t\t\t\t\t\t(excess = unquoted.indexOf(\")\", unquoted.length - excess) - unquoted.length)) {\n\n\t\t\t\t\t\t// excess is a negative index\n\t\t\t\t\t\tmatch[0] = match[0].slice(0, excess);\n\t\t\t\t\t\tmatch[2] = unquoted.slice(0, excess);\n\t\t\t\t\t}\n\n\t\t\t\t\t// Return only captures needed by the pseudo filter method (type and argument)\n\t\t\t\t\treturn match.slice(0, 3);\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tfilter: {\n\n\t\t\t\tTAG: function (nodeNameSelector) {\n\t\t\t\t\tvar expectedNodeName = nodeNameSelector.replace(runescape, funescape).toLowerCase();\n\t\t\t\t\treturn nodeNameSelector === \"*\" ?\n\t\t\t\t\t\tfunction () {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t} :\n\t\t\t\t\t\tfunction (elem) {\n\t\t\t\t\t\t\treturn nodeName(elem, expectedNodeName);\n\t\t\t\t\t\t};\n\t\t\t\t},\n\n\t\t\t\tCLASS: function (className) {\n\t\t\t\t\tvar pattern = classCache[className + \" \"];\n\n\t\t\t\t\treturn pattern ||\n\t\t\t\t\t\t(pattern = new RegExp(\"(^|\" + whitespace + \")\" + className +\n\t\t\t\t\t\t\t\"(\" + whitespace + \"|$)\")) &&\n\t\t\t\t\t\tclassCache(className, function (elem) {\n\t\t\t\t\t\t\treturn pattern.test(\n\t\t\t\t\t\t\t\ttypeof elem.className === \"string\" && elem.className ||\n\t\t\t\t\t\t\t\ttypeof elem.getAttribute !== \"undefined\" &&\n\t\t\t\t\t\t\t\telem.getAttribute(\"class\") ||\n\t\t\t\t\t\t\t\t\"\"\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t});\n\t\t\t\t},\n\n\t\t\t\tATTR: function (name, operator, check) {\n\t\t\t\t\treturn function (elem) {\n\t\t\t\t\t\tvar result = find.attr(elem, name);\n\n\t\t\t\t\t\tif (result == null) {\n\t\t\t\t\t\t\treturn operator === \"!=\";\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!operator) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tresult += \"\";\n\n\t\t\t\t\t\tif (operator === \"=\") {\n\t\t\t\t\t\t\treturn result === check;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (operator === \"!=\") {\n\t\t\t\t\t\t\treturn result !== check;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (operator === \"^=\") {\n\t\t\t\t\t\t\treturn check && result.indexOf(check) === 0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (operator === \"*=\") {\n\t\t\t\t\t\t\treturn check && result.indexOf(check) > -1;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (operator === \"$=\") {\n\t\t\t\t\t\t\treturn check && result.slice(-check.length) === check;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (operator === \"~=\") {\n\t\t\t\t\t\t\treturn (\" \" + result.replace(rwhitespace, \" \") + \" \")\n\t\t\t\t\t\t\t\t.indexOf(check) > -1;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (operator === \"|=\") {\n\t\t\t\t\t\t\treturn result === check || result.slice(0, check.length + 1) === check + \"-\";\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t};\n\t\t\t\t},\n\n\t\t\t\tCHILD: function (type, what, _argument, first, last) {\n\t\t\t\t\tvar simple = type.slice(0, 3) !== \"nth\",\n\t\t\t\t\t\tforward = type.slice(-4) !== \"last\",\n\t\t\t\t\t\tofType = what === \"of-type\";\n\n\t\t\t\t\treturn first === 1 && last === 0 ?\n\n\t\t\t\t\t\t// Shortcut for :nth-*(n)\n\t\t\t\t\t\tfunction (elem) {\n\t\t\t\t\t\t\treturn !!elem.parentNode;\n\t\t\t\t\t\t} :\n\n\t\t\t\t\t\tfunction (elem, _context, xml) {\n\t\t\t\t\t\t\tvar cache, outerCache, node, nodeIndex, start,\n\t\t\t\t\t\t\t\tdir = simple !== forward ? \"nextSibling\" : \"previousSibling\",\n\t\t\t\t\t\t\t\tparent = elem.parentNode,\n\t\t\t\t\t\t\t\tname = ofType && elem.nodeName.toLowerCase(),\n\t\t\t\t\t\t\t\tuseCache = !xml && !ofType,\n\t\t\t\t\t\t\t\tdiff = false;\n\n\t\t\t\t\t\t\tif (parent) {\n\n\t\t\t\t\t\t\t\t// :(first|last|only)-(child|of-type)\n\t\t\t\t\t\t\t\tif (simple) {\n\t\t\t\t\t\t\t\t\twhile (dir) {\n\t\t\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\t\t\twhile ((node = node[dir])) {\n\t\t\t\t\t\t\t\t\t\t\tif (ofType ?\n\t\t\t\t\t\t\t\t\t\t\t\tnodeName(node, name) :\n\t\t\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1) {\n\n\t\t\t\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t// Reverse direction for :only-* (if we haven't yet done so)\n\t\t\t\t\t\t\t\t\t\tstart = dir = type === \"only\" && !start && \"nextSibling\";\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tstart = [forward ? parent.firstChild : parent.lastChild];\n\n\t\t\t\t\t\t\t\t// non-xml :nth-child(...) stores cache data on `parent`\n\t\t\t\t\t\t\t\tif (forward && useCache) {\n\n\t\t\t\t\t\t\t\t\t// Seek `elem` from a previously-cached index\n\t\t\t\t\t\t\t\t\touterCache = parent[expando] || (parent[expando] = {});\n\t\t\t\t\t\t\t\t\tcache = outerCache[type] || [];\n\t\t\t\t\t\t\t\t\tnodeIndex = cache[0] === dirruns && cache[1];\n\t\t\t\t\t\t\t\t\tdiff = nodeIndex && cache[2];\n\t\t\t\t\t\t\t\t\tnode = nodeIndex && parent.childNodes[nodeIndex];\n\n\t\t\t\t\t\t\t\t\twhile ((node = ++nodeIndex && node && node[dir] ||\n\n\t\t\t\t\t\t\t\t\t\t// Fallback to seeking `elem` from the start\n\t\t\t\t\t\t\t\t\t\t(diff = nodeIndex = 0) || start.pop())) {\n\n\t\t\t\t\t\t\t\t\t\t// When found, cache indexes on `parent` and break\n\t\t\t\t\t\t\t\t\t\tif (node.nodeType === 1 && ++diff && node === elem) {\n\t\t\t\t\t\t\t\t\t\t\touterCache[type] = [dirruns, nodeIndex, diff];\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t// Use previously-cached element index if available\n\t\t\t\t\t\t\t\t\tif (useCache) {\n\t\t\t\t\t\t\t\t\t\touterCache = elem[expando] || (elem[expando] = {});\n\t\t\t\t\t\t\t\t\t\tcache = outerCache[type] || [];\n\t\t\t\t\t\t\t\t\t\tnodeIndex = cache[0] === dirruns && cache[1];\n\t\t\t\t\t\t\t\t\t\tdiff = nodeIndex;\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// xml :nth-child(...)\n\t\t\t\t\t\t\t\t\t// or :nth-last-child(...) or :nth(-last)?-of-type(...)\n\t\t\t\t\t\t\t\t\tif (diff === false) {\n\n\t\t\t\t\t\t\t\t\t\t// Use the same loop as above to seek `elem` from the start\n\t\t\t\t\t\t\t\t\t\twhile ((node = ++nodeIndex && node && node[dir] ||\n\t\t\t\t\t\t\t\t\t\t\t(diff = nodeIndex = 0) || start.pop())) {\n\n\t\t\t\t\t\t\t\t\t\t\tif ((ofType ?\n\t\t\t\t\t\t\t\t\t\t\t\tnodeName(node, name) :\n\t\t\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1) &&\n\t\t\t\t\t\t\t\t\t\t\t\t++diff) {\n\n\t\t\t\t\t\t\t\t\t\t\t\t// Cache the index of each encountered element\n\t\t\t\t\t\t\t\t\t\t\t\tif (useCache) {\n\t\t\t\t\t\t\t\t\t\t\t\t\touterCache = node[expando] ||\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t(node[expando] = {});\n\t\t\t\t\t\t\t\t\t\t\t\t\touterCache[type] = [dirruns, diff];\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\tif (node === elem) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t// Incorporate the offset, then check against cycle size\n\t\t\t\t\t\t\t\tdiff -= last;\n\t\t\t\t\t\t\t\treturn diff === first || (diff % first === 0 && diff / first >= 0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\t\t\t\t},\n\n\t\t\t\tPSEUDO: function (pseudo, argument) {\n\n\t\t\t\t\t// pseudo-class names are case-insensitive\n\t\t\t\t\t// https://www.w3.org/TR/selectors/#pseudo-classes\n\t\t\t\t\t// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters\n\t\t\t\t\t// Remember that setFilters inherits from pseudos\n\t\t\t\t\tvar args,\n\t\t\t\t\t\tfn = Expr.pseudos[pseudo] || Expr.setFilters[pseudo.toLowerCase()] ||\n\t\t\t\t\t\t\tfind.error(\"unsupported pseudo: \" + pseudo);\n\n\t\t\t\t\t// The user may use createPseudo to indicate that\n\t\t\t\t\t// arguments are needed to create the filter function\n\t\t\t\t\t// just as jQuery does\n\t\t\t\t\tif (fn[expando]) {\n\t\t\t\t\t\treturn fn(argument);\n\t\t\t\t\t}\n\n\t\t\t\t\t// But maintain support for old signatures\n\t\t\t\t\tif (fn.length > 1) {\n\t\t\t\t\t\targs = [pseudo, pseudo, \"\", argument];\n\t\t\t\t\t\treturn Expr.setFilters.hasOwnProperty(pseudo.toLowerCase()) ?\n\t\t\t\t\t\t\tmarkFunction(function (seed, matches) {\n\t\t\t\t\t\t\t\tvar idx,\n\t\t\t\t\t\t\t\t\tmatched = fn(seed, argument),\n\t\t\t\t\t\t\t\t\ti = matched.length;\n\t\t\t\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\t\t\t\tidx = indexOf.call(seed, matched[i]);\n\t\t\t\t\t\t\t\t\tseed[idx] = !(matches[idx] = matched[i]);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}) :\n\t\t\t\t\t\t\tfunction (elem) {\n\t\t\t\t\t\t\t\treturn fn(elem, 0, args);\n\t\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\treturn fn;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tpseudos: {\n\n\t\t\t\t// Potentially complex pseudos\n\t\t\t\tnot: markFunction(function (selector) {\n\n\t\t\t\t\t// Trim the selector passed to compile\n\t\t\t\t\t// to avoid treating leading and trailing\n\t\t\t\t\t// spaces as combinators\n\t\t\t\t\tvar input = [],\n\t\t\t\t\t\tresults = [],\n\t\t\t\t\t\tmatcher = compile(selector.replace(rtrimCSS, \"$1\"));\n\n\t\t\t\t\treturn matcher[expando] ?\n\t\t\t\t\t\tmarkFunction(function (seed, matches, _context, xml) {\n\t\t\t\t\t\t\tvar elem,\n\t\t\t\t\t\t\t\tunmatched = matcher(seed, null, xml, []),\n\t\t\t\t\t\t\t\ti = seed.length;\n\n\t\t\t\t\t\t\t// Match elements unmatched by `matcher`\n\t\t\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\t\t\tif ((elem = unmatched[i])) {\n\t\t\t\t\t\t\t\t\tseed[i] = !(matches[i] = elem);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}) :\n\t\t\t\t\t\tfunction (elem, _context, xml) {\n\t\t\t\t\t\t\tinput[0] = elem;\n\t\t\t\t\t\t\tmatcher(input, null, xml, results);\n\n\t\t\t\t\t\t\t// Don't keep the element\n\t\t\t\t\t\t\t// (see https://github.com/jquery/sizzle/issues/299)\n\t\t\t\t\t\t\tinput[0] = null;\n\t\t\t\t\t\t\treturn !results.pop();\n\t\t\t\t\t\t};\n\t\t\t\t}),\n\n\t\t\t\thas: markFunction(function (selector) {\n\t\t\t\t\treturn function (elem) {\n\t\t\t\t\t\treturn find(selector, elem).length > 0;\n\t\t\t\t\t};\n\t\t\t\t}),\n\n\t\t\t\tcontains: markFunction(function (text) {\n\t\t\t\t\ttext = text.replace(runescape, funescape);\n\t\t\t\t\treturn function (elem) {\n\t\t\t\t\t\treturn (elem.textContent || jQuery.text(elem)).indexOf(text) > -1;\n\t\t\t\t\t};\n\t\t\t\t}),\n\n\t\t\t\t// \"Whether an element is represented by a :lang() selector\n\t\t\t\t// is based solely on the element's language value\n\t\t\t\t// being equal to the identifier C,\n\t\t\t\t// or beginning with the identifier C immediately followed by \"-\".\n\t\t\t\t// The matching of C against the element's language value is performed case-insensitively.\n\t\t\t\t// The identifier C does not have to be a valid language name.\"\n\t\t\t\t// https://www.w3.org/TR/selectors/#lang-pseudo\n\t\t\t\tlang: markFunction(function (lang) {\n\n\t\t\t\t\t// lang value must be a valid identifier\n\t\t\t\t\tif (!ridentifier.test(lang || \"\")) {\n\t\t\t\t\t\tfind.error(\"unsupported lang: \" + lang);\n\t\t\t\t\t}\n\t\t\t\t\tlang = lang.replace(runescape, funescape).toLowerCase();\n\t\t\t\t\treturn function (elem) {\n\t\t\t\t\t\tvar elemLang;\n\t\t\t\t\t\tdo {\n\t\t\t\t\t\t\tif ((elemLang = documentIsHTML ?\n\t\t\t\t\t\t\t\telem.lang :\n\t\t\t\t\t\t\t\telem.getAttribute(\"xml:lang\") || elem.getAttribute(\"lang\"))) {\n\n\t\t\t\t\t\t\t\telemLang = elemLang.toLowerCase();\n\t\t\t\t\t\t\t\treturn elemLang === lang || elemLang.indexOf(lang + \"-\") === 0;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} while ((elem = elem.parentNode) && elem.nodeType === 1);\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t};\n\t\t\t\t}),\n\n\t\t\t\t// Miscellaneous\n\t\t\t\ttarget: function (elem) {\n\t\t\t\t\tvar hash = window.location && window.location.hash;\n\t\t\t\t\treturn hash && hash.slice(1) === elem.id;\n\t\t\t\t},\n\n\t\t\t\troot: function (elem) {\n\t\t\t\t\treturn elem === documentElement;\n\t\t\t\t},\n\n\t\t\t\tfocus: function (elem) {\n\t\t\t\t\treturn elem === safeActiveElement() &&\n\t\t\t\t\t\tdocument.hasFocus() &&\n\t\t\t\t\t\t!!(elem.type || elem.href || ~elem.tabIndex);\n\t\t\t\t},\n\n\t\t\t\t// Boolean properties\n\t\t\t\tenabled: createDisabledPseudo(false),\n\t\t\t\tdisabled: createDisabledPseudo(true),\n\n\t\t\t\tchecked: function (elem) {\n\n\t\t\t\t\t// In CSS3, :checked should return both checked and selected elements\n\t\t\t\t\t// https://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\t\t\treturn (nodeName(elem, \"input\") && !!elem.checked) ||\n\t\t\t\t\t\t(nodeName(elem, \"option\") && !!elem.selected);\n\t\t\t\t},\n\n\t\t\t\tselected: function (elem) {\n\n\t\t\t\t\t// Support: IE <=11+\n\t\t\t\t\t// Accessing the selectedIndex property\n\t\t\t\t\t// forces the browser to treat the default option as\n\t\t\t\t\t// selected when in an optgroup.\n\t\t\t\t\tif (elem.parentNode) {\n\t\t\t\t\t\t// eslint-disable-next-line no-unused-expressions\n\t\t\t\t\t\telem.parentNode.selectedIndex;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn elem.selected === true;\n\t\t\t\t},\n\n\t\t\t\t// Contents\n\t\t\t\tempty: function (elem) {\n\n\t\t\t\t\t// https://www.w3.org/TR/selectors/#empty-pseudo\n\t\t\t\t\t// :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),\n\t\t\t\t\t//   but not by others (comment: 8; processing instruction: 7; etc.)\n\t\t\t\t\t// nodeType < 6 works because attributes (2) do not appear as children\n\t\t\t\t\tfor (elem = elem.firstChild; elem; elem = elem.nextSibling) {\n\t\t\t\t\t\tif (elem.nodeType < 6) {\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn true;\n\t\t\t\t},\n\n\t\t\t\tparent: function (elem) {\n\t\t\t\t\treturn !Expr.pseudos.empty(elem);\n\t\t\t\t},\n\n\t\t\t\t// Element/input types\n\t\t\t\theader: function (elem) {\n\t\t\t\t\treturn rheader.test(elem.nodeName);\n\t\t\t\t},\n\n\t\t\t\tinput: function (elem) {\n\t\t\t\t\treturn rinputs.test(elem.nodeName);\n\t\t\t\t},\n\n\t\t\t\tbutton: function (elem) {\n\t\t\t\t\treturn nodeName(elem, \"input\") && elem.type === \"button\" ||\n\t\t\t\t\t\tnodeName(elem, \"button\");\n\t\t\t\t},\n\n\t\t\t\ttext: function (elem) {\n\t\t\t\t\tvar attr;\n\t\t\t\t\treturn nodeName(elem, \"input\") && elem.type === \"text\" &&\n\n\t\t\t\t\t\t// Support: IE <10 only\n\t\t\t\t\t\t// New HTML5 attribute values (e.g., \"search\") appear\n\t\t\t\t\t\t// with elem.type === \"text\"\n\t\t\t\t\t\t((attr = elem.getAttribute(\"type\")) == null ||\n\t\t\t\t\t\t\tattr.toLowerCase() === \"text\");\n\t\t\t\t},\n\n\t\t\t\t// Position-in-collection\n\t\t\t\tfirst: createPositionalPseudo(function () {\n\t\t\t\t\treturn [0];\n\t\t\t\t}),\n\n\t\t\t\tlast: createPositionalPseudo(function (_matchIndexes, length) {\n\t\t\t\t\treturn [length - 1];\n\t\t\t\t}),\n\n\t\t\t\teq: createPositionalPseudo(function (_matchIndexes, length, argument) {\n\t\t\t\t\treturn [argument < 0 ? argument + length : argument];\n\t\t\t\t}),\n\n\t\t\t\teven: createPositionalPseudo(function (matchIndexes, length) {\n\t\t\t\t\tvar i = 0;\n\t\t\t\t\tfor (; i < length; i += 2) {\n\t\t\t\t\t\tmatchIndexes.push(i);\n\t\t\t\t\t}\n\t\t\t\t\treturn matchIndexes;\n\t\t\t\t}),\n\n\t\t\t\todd: createPositionalPseudo(function (matchIndexes, length) {\n\t\t\t\t\tvar i = 1;\n\t\t\t\t\tfor (; i < length; i += 2) {\n\t\t\t\t\t\tmatchIndexes.push(i);\n\t\t\t\t\t}\n\t\t\t\t\treturn matchIndexes;\n\t\t\t\t}),\n\n\t\t\t\tlt: createPositionalPseudo(function (matchIndexes, length, argument) {\n\t\t\t\t\tvar i;\n\n\t\t\t\t\tif (argument < 0) {\n\t\t\t\t\t\ti = argument + length;\n\t\t\t\t\t} else if (argument > length) {\n\t\t\t\t\t\ti = length;\n\t\t\t\t\t} else {\n\t\t\t\t\t\ti = argument;\n\t\t\t\t\t}\n\n\t\t\t\t\tfor (; --i >= 0;) {\n\t\t\t\t\t\tmatchIndexes.push(i);\n\t\t\t\t\t}\n\t\t\t\t\treturn matchIndexes;\n\t\t\t\t}),\n\n\t\t\t\tgt: createPositionalPseudo(function (matchIndexes, length, argument) {\n\t\t\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\t\t\tfor (; ++i < length;) {\n\t\t\t\t\t\tmatchIndexes.push(i);\n\t\t\t\t\t}\n\t\t\t\t\treturn matchIndexes;\n\t\t\t\t})\n\t\t\t}\n\t\t};\n\n\t\tExpr.pseudos.nth = Expr.pseudos.eq;\n\n\t\t// Add button/input type pseudos\n\t\tfor (i in { radio: true, checkbox: true, file: true, password: true, image: true }) {\n\t\t\tExpr.pseudos[i] = createInputPseudo(i);\n\t\t}\n\t\tfor (i in { submit: true, reset: true }) {\n\t\t\tExpr.pseudos[i] = createButtonPseudo(i);\n\t\t}\n\n\t\t// Easy API for creating new setFilters\n\t\tfunction setFilters() { }\n\t\tsetFilters.prototype = Expr.filters = Expr.pseudos;\n\t\tExpr.setFilters = new setFilters();\n\n\t\tfunction tokenize(selector, parseOnly) {\n\t\t\tvar matched, match, tokens, type,\n\t\t\t\tsoFar, groups, preFilters,\n\t\t\t\tcached = tokenCache[selector + \" \"];\n\n\t\t\tif (cached) {\n\t\t\t\treturn parseOnly ? 0 : cached.slice(0);\n\t\t\t}\n\n\t\t\tsoFar = selector;\n\t\t\tgroups = [];\n\t\t\tpreFilters = Expr.preFilter;\n\n\t\t\twhile (soFar) {\n\n\t\t\t\t// Comma and first run\n\t\t\t\tif (!matched || (match = rcomma.exec(soFar))) {\n\t\t\t\t\tif (match) {\n\n\t\t\t\t\t\t// Don't consume trailing commas as valid\n\t\t\t\t\t\tsoFar = soFar.slice(match[0].length) || soFar;\n\t\t\t\t\t}\n\t\t\t\t\tgroups.push((tokens = []));\n\t\t\t\t}\n\n\t\t\t\tmatched = false;\n\n\t\t\t\t// Combinators\n\t\t\t\tif ((match = rleadingCombinator.exec(soFar))) {\n\t\t\t\t\tmatched = match.shift();\n\t\t\t\t\ttokens.push({\n\t\t\t\t\t\tvalue: matched,\n\n\t\t\t\t\t\t// Cast descendant combinators to space\n\t\t\t\t\t\ttype: match[0].replace(rtrimCSS, \" \")\n\t\t\t\t\t});\n\t\t\t\t\tsoFar = soFar.slice(matched.length);\n\t\t\t\t}\n\n\t\t\t\t// Filters\n\t\t\t\tfor (type in Expr.filter) {\n\t\t\t\t\tif ((match = matchExpr[type].exec(soFar)) && (!preFilters[type] ||\n\t\t\t\t\t\t(match = preFilters[type](match)))) {\n\t\t\t\t\t\tmatched = match.shift();\n\t\t\t\t\t\ttokens.push({\n\t\t\t\t\t\t\tvalue: matched,\n\t\t\t\t\t\t\ttype: type,\n\t\t\t\t\t\t\tmatches: match\n\t\t\t\t\t\t});\n\t\t\t\t\t\tsoFar = soFar.slice(matched.length);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (!matched) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Return the length of the invalid excess\n\t\t\t// if we're just parsing\n\t\t\t// Otherwise, throw an error or return tokens\n\t\t\tif (parseOnly) {\n\t\t\t\treturn soFar.length;\n\t\t\t}\n\n\t\t\treturn soFar ?\n\t\t\t\tfind.error(selector) :\n\n\t\t\t\t// Cache the tokens\n\t\t\t\ttokenCache(selector, groups).slice(0);\n\t\t}\n\n\t\tfunction toSelector(tokens) {\n\t\t\tvar i = 0,\n\t\t\t\tlen = tokens.length,\n\t\t\t\tselector = \"\";\n\t\t\tfor (; i < len; i++) {\n\t\t\t\tselector += tokens[i].value;\n\t\t\t}\n\t\t\treturn selector;\n\t\t}\n\n\t\tfunction addCombinator(matcher, combinator, base) {\n\t\t\tvar dir = combinator.dir,\n\t\t\t\tskip = combinator.next,\n\t\t\t\tkey = skip || dir,\n\t\t\t\tcheckNonElements = base && key === \"parentNode\",\n\t\t\t\tdoneName = done++;\n\n\t\t\treturn combinator.first ?\n\n\t\t\t\t// Check against closest ancestor/preceding element\n\t\t\t\tfunction (elem, context, xml) {\n\t\t\t\t\twhile ((elem = elem[dir])) {\n\t\t\t\t\t\tif (elem.nodeType === 1 || checkNonElements) {\n\t\t\t\t\t\t\treturn matcher(elem, context, xml);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn false;\n\t\t\t\t} :\n\n\t\t\t\t// Check against all ancestor/preceding elements\n\t\t\t\tfunction (elem, context, xml) {\n\t\t\t\t\tvar oldCache, outerCache,\n\t\t\t\t\t\tnewCache = [dirruns, doneName];\n\n\t\t\t\t\t// We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching\n\t\t\t\t\tif (xml) {\n\t\t\t\t\t\twhile ((elem = elem[dir])) {\n\t\t\t\t\t\t\tif (elem.nodeType === 1 || checkNonElements) {\n\t\t\t\t\t\t\t\tif (matcher(elem, context, xml)) {\n\t\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\twhile ((elem = elem[dir])) {\n\t\t\t\t\t\t\tif (elem.nodeType === 1 || checkNonElements) {\n\t\t\t\t\t\t\t\touterCache = elem[expando] || (elem[expando] = {});\n\n\t\t\t\t\t\t\t\tif (skip && nodeName(elem, skip)) {\n\t\t\t\t\t\t\t\t\telem = elem[dir] || elem;\n\t\t\t\t\t\t\t\t} else if ((oldCache = outerCache[key]) &&\n\t\t\t\t\t\t\t\t\toldCache[0] === dirruns && oldCache[1] === doneName) {\n\n\t\t\t\t\t\t\t\t\t// Assign to newCache so results back-propagate to previous elements\n\t\t\t\t\t\t\t\t\treturn (newCache[2] = oldCache[2]);\n\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t// Reuse newcache so results back-propagate to previous elements\n\t\t\t\t\t\t\t\t\touterCache[key] = newCache;\n\n\t\t\t\t\t\t\t\t\t// A match means we're done; a fail means we have to keep checking\n\t\t\t\t\t\t\t\t\tif ((newCache[2] = matcher(elem, context, xml))) {\n\t\t\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn false;\n\t\t\t\t};\n\t\t}\n\n\t\tfunction elementMatcher(matchers) {\n\t\t\treturn matchers.length > 1 ?\n\t\t\t\tfunction (elem, context, xml) {\n\t\t\t\t\tvar i = matchers.length;\n\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\tif (!matchers[i](elem, context, xml)) {\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn true;\n\t\t\t\t} :\n\t\t\t\tmatchers[0];\n\t\t}\n\n\t\tfunction multipleContexts(selector, contexts, results) {\n\t\t\tvar i = 0,\n\t\t\t\tlen = contexts.length;\n\t\t\tfor (; i < len; i++) {\n\t\t\t\tfind(selector, contexts[i], results);\n\t\t\t}\n\t\t\treturn results;\n\t\t}\n\n\t\tfunction condense(unmatched, map, filter, context, xml) {\n\t\t\tvar elem,\n\t\t\t\tnewUnmatched = [],\n\t\t\t\ti = 0,\n\t\t\t\tlen = unmatched.length,\n\t\t\t\tmapped = map != null;\n\n\t\t\tfor (; i < len; i++) {\n\t\t\t\tif ((elem = unmatched[i])) {\n\t\t\t\t\tif (!filter || filter(elem, context, xml)) {\n\t\t\t\t\t\tnewUnmatched.push(elem);\n\t\t\t\t\t\tif (mapped) {\n\t\t\t\t\t\t\tmap.push(i);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn newUnmatched;\n\t\t}\n\n\t\tfunction setMatcher(preFilter, selector, matcher, postFilter, postFinder, postSelector) {\n\t\t\tif (postFilter && !postFilter[expando]) {\n\t\t\t\tpostFilter = setMatcher(postFilter);\n\t\t\t}\n\t\t\tif (postFinder && !postFinder[expando]) {\n\t\t\t\tpostFinder = setMatcher(postFinder, postSelector);\n\t\t\t}\n\t\t\treturn markFunction(function (seed, results, context, xml) {\n\t\t\t\tvar temp, i, elem, matcherOut,\n\t\t\t\t\tpreMap = [],\n\t\t\t\t\tpostMap = [],\n\t\t\t\t\tpreexisting = results.length,\n\n\t\t\t\t\t// Get initial elements from seed or context\n\t\t\t\t\telems = seed ||\n\t\t\t\t\t\tmultipleContexts(selector || \"*\",\n\t\t\t\t\t\t\tcontext.nodeType ? [context] : context, []),\n\n\t\t\t\t\t// Prefilter to get matcher input, preserving a map for seed-results synchronization\n\t\t\t\t\tmatcherIn = preFilter && (seed || !selector) ?\n\t\t\t\t\t\tcondense(elems, preMap, preFilter, context, xml) :\n\t\t\t\t\t\telems;\n\n\t\t\t\tif (matcher) {\n\n\t\t\t\t\t// If we have a postFinder, or filtered seed, or non-seed postFilter\n\t\t\t\t\t// or preexisting results,\n\t\t\t\t\tmatcherOut = postFinder || (seed ? preFilter : preexisting || postFilter) ?\n\n\t\t\t\t\t\t// ...intermediate processing is necessary\n\t\t\t\t\t\t[] :\n\n\t\t\t\t\t\t// ...otherwise use results directly\n\t\t\t\t\t\tresults;\n\n\t\t\t\t\t// Find primary matches\n\t\t\t\t\tmatcher(matcherIn, matcherOut, context, xml);\n\t\t\t\t} else {\n\t\t\t\t\tmatcherOut = matcherIn;\n\t\t\t\t}\n\n\t\t\t\t// Apply postFilter\n\t\t\t\tif (postFilter) {\n\t\t\t\t\ttemp = condense(matcherOut, postMap);\n\t\t\t\t\tpostFilter(temp, [], context, xml);\n\n\t\t\t\t\t// Un-match failing elements by moving them back to matcherIn\n\t\t\t\t\ti = temp.length;\n\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\tif ((elem = temp[i])) {\n\t\t\t\t\t\t\tmatcherOut[postMap[i]] = !(matcherIn[postMap[i]] = elem);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (seed) {\n\t\t\t\t\tif (postFinder || preFilter) {\n\t\t\t\t\t\tif (postFinder) {\n\n\t\t\t\t\t\t\t// Get the final matcherOut by condensing this intermediate into postFinder contexts\n\t\t\t\t\t\t\ttemp = [];\n\t\t\t\t\t\t\ti = matcherOut.length;\n\t\t\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\t\t\tif ((elem = matcherOut[i])) {\n\n\t\t\t\t\t\t\t\t\t// Restore matcherIn since elem is not yet a final match\n\t\t\t\t\t\t\t\t\ttemp.push((matcherIn[i] = elem));\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tpostFinder(null, (matcherOut = []), temp, xml);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Move matched elements from seed to results to keep them synchronized\n\t\t\t\t\t\ti = matcherOut.length;\n\t\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\t\tif ((elem = matcherOut[i]) &&\n\t\t\t\t\t\t\t\t(temp = postFinder ? indexOf.call(seed, elem) : preMap[i]) > -1) {\n\n\t\t\t\t\t\t\t\tseed[temp] = !(results[temp] = elem);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Add elements to results, through postFinder if defined\n\t\t\t\t} else {\n\t\t\t\t\tmatcherOut = condense(\n\t\t\t\t\t\tmatcherOut === results ?\n\t\t\t\t\t\t\tmatcherOut.splice(preexisting, matcherOut.length) :\n\t\t\t\t\t\t\tmatcherOut\n\t\t\t\t\t);\n\t\t\t\t\tif (postFinder) {\n\t\t\t\t\t\tpostFinder(null, results, matcherOut, xml);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tpush.apply(results, matcherOut);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tfunction matcherFromTokens(tokens) {\n\t\t\tvar checkContext, matcher, j,\n\t\t\t\tlen = tokens.length,\n\t\t\t\tleadingRelative = Expr.relative[tokens[0].type],\n\t\t\t\timplicitRelative = leadingRelative || Expr.relative[\" \"],\n\t\t\t\ti = leadingRelative ? 1 : 0,\n\n\t\t\t\t// The foundational matcher ensures that elements are reachable from top-level context(s)\n\t\t\t\tmatchContext = addCombinator(function (elem) {\n\t\t\t\t\treturn elem === checkContext;\n\t\t\t\t}, implicitRelative, true),\n\t\t\t\tmatchAnyContext = addCombinator(function (elem) {\n\t\t\t\t\treturn indexOf.call(checkContext, elem) > -1;\n\t\t\t\t}, implicitRelative, true),\n\t\t\t\tmatchers = [function (elem, context, xml) {\n\n\t\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\tvar ret = (!leadingRelative && (xml || context != outermostContext)) || (\n\t\t\t\t\t\t(checkContext = context).nodeType ?\n\t\t\t\t\t\t\tmatchContext(elem, context, xml) :\n\t\t\t\t\t\t\tmatchAnyContext(elem, context, xml));\n\n\t\t\t\t\t// Avoid hanging onto element\n\t\t\t\t\t// (see https://github.com/jquery/sizzle/issues/299)\n\t\t\t\t\tcheckContext = null;\n\t\t\t\t\treturn ret;\n\t\t\t\t}];\n\n\t\t\tfor (; i < len; i++) {\n\t\t\t\tif ((matcher = Expr.relative[tokens[i].type])) {\n\t\t\t\t\tmatchers = [addCombinator(elementMatcher(matchers), matcher)];\n\t\t\t\t} else {\n\t\t\t\t\tmatcher = Expr.filter[tokens[i].type].apply(null, tokens[i].matches);\n\n\t\t\t\t\t// Return special upon seeing a positional matcher\n\t\t\t\t\tif (matcher[expando]) {\n\n\t\t\t\t\t\t// Find the next relative operator (if any) for proper handling\n\t\t\t\t\t\tj = ++i;\n\t\t\t\t\t\tfor (; j < len; j++) {\n\t\t\t\t\t\t\tif (Expr.relative[tokens[j].type]) {\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn setMatcher(\n\t\t\t\t\t\t\ti > 1 && elementMatcher(matchers),\n\t\t\t\t\t\t\ti > 1 && toSelector(\n\n\t\t\t\t\t\t\t\t// If the preceding token was a descendant combinator, insert an implicit any-element `*`\n\t\t\t\t\t\t\t\ttokens.slice(0, i - 1)\n\t\t\t\t\t\t\t\t\t.concat({ value: tokens[i - 2].type === \" \" ? \"*\" : \"\" })\n\t\t\t\t\t\t\t).replace(rtrimCSS, \"$1\"),\n\t\t\t\t\t\t\tmatcher,\n\t\t\t\t\t\t\ti < j && matcherFromTokens(tokens.slice(i, j)),\n\t\t\t\t\t\t\tj < len && matcherFromTokens((tokens = tokens.slice(j))),\n\t\t\t\t\t\t\tj < len && toSelector(tokens)\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\tmatchers.push(matcher);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn elementMatcher(matchers);\n\t\t}\n\n\t\tfunction matcherFromGroupMatchers(elementMatchers, setMatchers) {\n\t\t\tvar bySet = setMatchers.length > 0,\n\t\t\t\tbyElement = elementMatchers.length > 0,\n\t\t\t\tsuperMatcher = function (seed, context, xml, results, outermost) {\n\t\t\t\t\tvar elem, j, matcher,\n\t\t\t\t\t\tmatchedCount = 0,\n\t\t\t\t\t\ti = \"0\",\n\t\t\t\t\t\tunmatched = seed && [],\n\t\t\t\t\t\tsetMatched = [],\n\t\t\t\t\t\tcontextBackup = outermostContext,\n\n\t\t\t\t\t\t// We must always have either seed elements or outermost context\n\t\t\t\t\t\telems = seed || byElement && Expr.find.TAG(\"*\", outermost),\n\n\t\t\t\t\t\t// Use integer dirruns iff this is the outermost matcher\n\t\t\t\t\t\tdirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1),\n\t\t\t\t\t\tlen = elems.length;\n\n\t\t\t\t\tif (outermost) {\n\n\t\t\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\t\toutermostContext = context == document || context || outermost;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Add elements passing elementMatchers directly to results\n\t\t\t\t\t// Support: iOS <=7 - 9 only\n\t\t\t\t\t// Tolerate NodeList properties (IE: \"length\"; Safari: <number>) matching\n\t\t\t\t\t// elements by id. (see trac-14142)\n\t\t\t\t\tfor (; i !== len && (elem = elems[i]) != null; i++) {\n\t\t\t\t\t\tif (byElement && elem) {\n\t\t\t\t\t\t\tj = 0;\n\n\t\t\t\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\t\t\tif (!context && elem.ownerDocument != document) {\n\t\t\t\t\t\t\t\tsetDocument(elem);\n\t\t\t\t\t\t\t\txml = !documentIsHTML;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\twhile ((matcher = elementMatchers[j++])) {\n\t\t\t\t\t\t\t\tif (matcher(elem, context || document, xml)) {\n\t\t\t\t\t\t\t\t\tpush.call(results, elem);\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (outermost) {\n\t\t\t\t\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Track unmatched elements for set filters\n\t\t\t\t\t\tif (bySet) {\n\n\t\t\t\t\t\t\t// They will have gone through all possible matchers\n\t\t\t\t\t\t\tif ((elem = !matcher && elem)) {\n\t\t\t\t\t\t\t\tmatchedCount--;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Lengthen the array for every element, matched or not\n\t\t\t\t\t\t\tif (seed) {\n\t\t\t\t\t\t\t\tunmatched.push(elem);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// `i` is now the count of elements visited above, and adding it to `matchedCount`\n\t\t\t\t\t// makes the latter nonnegative.\n\t\t\t\t\tmatchedCount += i;\n\n\t\t\t\t\t// Apply set filters to unmatched elements\n\t\t\t\t\t// NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`\n\t\t\t\t\t// equals `i`), unless we didn't visit _any_ elements in the above loop because we have\n\t\t\t\t\t// no element matchers and no seed.\n\t\t\t\t\t// Incrementing an initially-string \"0\" `i` allows `i` to remain a string only in that\n\t\t\t\t\t// case, which will result in a \"00\" `matchedCount` that differs from `i` but is also\n\t\t\t\t\t// numerically zero.\n\t\t\t\t\tif (bySet && i !== matchedCount) {\n\t\t\t\t\t\tj = 0;\n\t\t\t\t\t\twhile ((matcher = setMatchers[j++])) {\n\t\t\t\t\t\t\tmatcher(unmatched, setMatched, context, xml);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (seed) {\n\n\t\t\t\t\t\t\t// Reintegrate element matches to eliminate the need for sorting\n\t\t\t\t\t\t\tif (matchedCount > 0) {\n\t\t\t\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\t\t\t\tif (!(unmatched[i] || setMatched[i])) {\n\t\t\t\t\t\t\t\t\t\tsetMatched[i] = pop.call(results);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Discard index placeholder values to get only actual matches\n\t\t\t\t\t\t\tsetMatched = condense(setMatched);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Add matches to results\n\t\t\t\t\t\tpush.apply(results, setMatched);\n\n\t\t\t\t\t\t// Seedless set matches succeeding multiple successful matchers stipulate sorting\n\t\t\t\t\t\tif (outermost && !seed && setMatched.length > 0 &&\n\t\t\t\t\t\t\t(matchedCount + setMatchers.length) > 1) {\n\n\t\t\t\t\t\t\tjQuery.uniqueSort(results);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Override manipulation of globals by nested matchers\n\t\t\t\t\tif (outermost) {\n\t\t\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\t\t\toutermostContext = contextBackup;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn unmatched;\n\t\t\t\t};\n\n\t\t\treturn bySet ?\n\t\t\t\tmarkFunction(superMatcher) :\n\t\t\t\tsuperMatcher;\n\t\t}\n\n\t\tfunction compile(selector, match /* Internal Use Only */) {\n\t\t\tvar i,\n\t\t\t\tsetMatchers = [],\n\t\t\t\telementMatchers = [],\n\t\t\t\tcached = compilerCache[selector + \" \"];\n\n\t\t\tif (!cached) {\n\n\t\t\t\t// Generate a function of recursive functions that can be used to check each element\n\t\t\t\tif (!match) {\n\t\t\t\t\tmatch = tokenize(selector);\n\t\t\t\t}\n\t\t\t\ti = match.length;\n\t\t\t\twhile (i--) {\n\t\t\t\t\tcached = matcherFromTokens(match[i]);\n\t\t\t\t\tif (cached[expando]) {\n\t\t\t\t\t\tsetMatchers.push(cached);\n\t\t\t\t\t} else {\n\t\t\t\t\t\telementMatchers.push(cached);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Cache the compiled function\n\t\t\t\tcached = compilerCache(selector,\n\t\t\t\t\tmatcherFromGroupMatchers(elementMatchers, setMatchers));\n\n\t\t\t\t// Save selector and tokenization\n\t\t\t\tcached.selector = selector;\n\t\t\t}\n\t\t\treturn cached;\n\t\t}\n\n\t\t/**\n\t\t * A low-level selection function that works with jQuery's compiled\n\t\t *  selector functions\n\t\t * @param {String|Function} selector A selector or a pre-compiled\n\t\t *  selector function built with jQuery selector compile\n\t\t * @param {Element} context\n\t\t * @param {Array} [results]\n\t\t * @param {Array} [seed] A set of elements to match against\n\t\t */\n\t\tfunction select(selector, context, results, seed) {\n\t\t\tvar i, tokens, token, type, find,\n\t\t\t\tcompiled = typeof selector === \"function\" && selector,\n\t\t\t\tmatch = !seed && tokenize((selector = compiled.selector || selector));\n\n\t\t\tresults = results || [];\n\n\t\t\t// Try to minimize operations if there is only one selector in the list and no seed\n\t\t\t// (the latter of which guarantees us context)\n\t\t\tif (match.length === 1) {\n\n\t\t\t\t// Reduce context if the leading compound selector is an ID\n\t\t\t\ttokens = match[0] = match[0].slice(0);\n\t\t\t\tif (tokens.length > 2 && (token = tokens[0]).type === \"ID\" &&\n\t\t\t\t\tcontext.nodeType === 9 && documentIsHTML && Expr.relative[tokens[1].type]) {\n\n\t\t\t\t\tcontext = (Expr.find.ID(\n\t\t\t\t\t\ttoken.matches[0].replace(runescape, funescape),\n\t\t\t\t\t\tcontext\n\t\t\t\t\t) || [])[0];\n\t\t\t\t\tif (!context) {\n\t\t\t\t\t\treturn results;\n\n\t\t\t\t\t\t// Precompiled matchers will still verify ancestry, so step up a level\n\t\t\t\t\t} else if (compiled) {\n\t\t\t\t\t\tcontext = context.parentNode;\n\t\t\t\t\t}\n\n\t\t\t\t\tselector = selector.slice(tokens.shift().value.length);\n\t\t\t\t}\n\n\t\t\t\t// Fetch a seed set for right-to-left matching\n\t\t\t\ti = matchExpr.needsContext.test(selector) ? 0 : tokens.length;\n\t\t\t\twhile (i--) {\n\t\t\t\t\ttoken = tokens[i];\n\n\t\t\t\t\t// Abort if we hit a combinator\n\t\t\t\t\tif (Expr.relative[(type = token.type)]) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tif ((find = Expr.find[type])) {\n\n\t\t\t\t\t\t// Search, expanding context for leading sibling combinators\n\t\t\t\t\t\tif ((seed = find(\n\t\t\t\t\t\t\ttoken.matches[0].replace(runescape, funescape),\n\t\t\t\t\t\t\trsibling.test(tokens[0].type) &&\n\t\t\t\t\t\t\ttestContext(context.parentNode) || context\n\t\t\t\t\t\t))) {\n\n\t\t\t\t\t\t\t// If seed is empty or no tokens remain, we can return early\n\t\t\t\t\t\t\ttokens.splice(i, 1);\n\t\t\t\t\t\t\tselector = seed.length && toSelector(tokens);\n\t\t\t\t\t\t\tif (!selector) {\n\t\t\t\t\t\t\t\tpush.apply(results, seed);\n\t\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Compile and execute a filtering function if one is not provided\n\t\t\t// Provide `match` to avoid retokenization if we modified the selector above\n\t\t\t(compiled || compile(selector, match))(\n\t\t\t\tseed,\n\t\t\t\tcontext,\n\t\t\t\t!documentIsHTML,\n\t\t\t\tresults,\n\t\t\t\t!context || rsibling.test(selector) && testContext(context.parentNode) || context\n\t\t\t);\n\t\t\treturn results;\n\t\t}\n\n\t\t// One-time assignments\n\n\t\t// Support: Android <=4.0 - 4.1+\n\t\t// Sort stability\n\t\tsupport.sortStable = expando.split(\"\").sort(sortOrder).join(\"\") === expando;\n\n\t\t// Initialize against the default document\n\t\tsetDocument();\n\n\t\t// Support: Android <=4.0 - 4.1+\n\t\t// Detached nodes confoundingly follow *each other*\n\t\tsupport.sortDetached = assert(function (el) {\n\n\t\t\t// Should return 1, but returns 4 (following)\n\t\t\treturn el.compareDocumentPosition(document.createElement(\"fieldset\")) & 1;\n\t\t});\n\n\t\tjQuery.find = find;\n\n\t\t// Deprecated\n\t\tjQuery.expr[\":\"] = jQuery.expr.pseudos;\n\t\tjQuery.unique = jQuery.uniqueSort;\n\n\t\t// These have always been private, but they used to be documented\n\t\t// as part of Sizzle so let's maintain them in the 3.x line\n\t\t// for backwards compatibility purposes.\n\t\tfind.compile = compile;\n\t\tfind.select = select;\n\t\tfind.setDocument = setDocument;\n\n\t\tfind.escape = jQuery.escapeSelector;\n\t\tfind.getText = jQuery.text;\n\t\tfind.isXML = jQuery.isXMLDoc;\n\t\tfind.selectors = jQuery.expr;\n\t\tfind.support = jQuery.support;\n\t\tfind.uniqueSort = jQuery.uniqueSort;\n\n\t\t/* eslint-enable */\n\n\t})();\n\n\n\tvar dir = function (elem, dir, until) {\n\t\tvar matched = [],\n\t\t\ttruncate = until !== undefined;\n\n\t\twhile ((elem = elem[dir]) && elem.nodeType !== 9) {\n\t\t\tif (elem.nodeType === 1) {\n\t\t\t\tif (truncate && jQuery(elem).is(until)) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tmatched.push(elem);\n\t\t\t}\n\t\t}\n\t\treturn matched;\n\t};\n\n\n\tvar siblings = function (n, elem) {\n\t\tvar matched = [];\n\n\t\tfor (; n; n = n.nextSibling) {\n\t\t\tif (n.nodeType === 1 && n !== elem) {\n\t\t\t\tmatched.push(n);\n\t\t\t}\n\t\t}\n\n\t\treturn matched;\n\t};\n\n\n\tvar rneedsContext = jQuery.expr.match.needsContext;\n\n\tvar rsingleTag = (/^<([a-z][^\\/\\0>:\\x20\\t\\r\\n\\f]*)[\\x20\\t\\r\\n\\f]*\\/?>(?:<\\/\\1>|)$/i);\n\n\n\n\t// Implement the identical functionality for filter and not\n\tfunction winnow(elements, qualifier, not) {\n\t\tif (isFunction(qualifier)) {\n\t\t\treturn jQuery.grep(elements, function (elem, i) {\n\t\t\t\treturn !!qualifier.call(elem, i, elem) !== not;\n\t\t\t});\n\t\t}\n\n\t\t// Single element\n\t\tif (qualifier.nodeType) {\n\t\t\treturn jQuery.grep(elements, function (elem) {\n\t\t\t\treturn (elem === qualifier) !== not;\n\t\t\t});\n\t\t}\n\n\t\t// Arraylike of elements (jQuery, arguments, Array)\n\t\tif (typeof qualifier !== \"string\") {\n\t\t\treturn jQuery.grep(elements, function (elem) {\n\t\t\t\treturn (indexOf.call(qualifier, elem) > -1) !== not;\n\t\t\t});\n\t\t}\n\n\t\t// Filtered directly for both simple and complex selectors\n\t\treturn jQuery.filter(qualifier, elements, not);\n\t}\n\n\tjQuery.filter = function (expr, elems, not) {\n\t\tvar elem = elems[0];\n\n\t\tif (not) {\n\t\t\texpr = \":not(\" + expr + \")\";\n\t\t}\n\n\t\tif (elems.length === 1 && elem.nodeType === 1) {\n\t\t\treturn jQuery.find.matchesSelector(elem, expr) ? [elem] : [];\n\t\t}\n\n\t\treturn jQuery.find.matches(expr, jQuery.grep(elems, function (elem) {\n\t\t\treturn elem.nodeType === 1;\n\t\t}));\n\t};\n\n\tjQuery.fn.extend({\n\t\tfind: function (selector) {\n\t\t\tvar i, ret,\n\t\t\t\tlen = this.length,\n\t\t\t\tself = this;\n\n\t\t\tif (typeof selector !== \"string\") {\n\t\t\t\treturn this.pushStack(jQuery(selector).filter(function () {\n\t\t\t\t\tfor (i = 0; i < len; i++) {\n\t\t\t\t\t\tif (jQuery.contains(self[i], this)) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}));\n\t\t\t}\n\n\t\t\tret = this.pushStack([]);\n\n\t\t\tfor (i = 0; i < len; i++) {\n\t\t\t\tjQuery.find(selector, self[i], ret);\n\t\t\t}\n\n\t\t\treturn len > 1 ? jQuery.uniqueSort(ret) : ret;\n\t\t},\n\t\tfilter: function (selector) {\n\t\t\treturn this.pushStack(winnow(this, selector || [], false));\n\t\t},\n\t\tnot: function (selector) {\n\t\t\treturn this.pushStack(winnow(this, selector || [], true));\n\t\t},\n\t\tis: function (selector) {\n\t\t\treturn !!winnow(\n\t\t\t\tthis,\n\n\t\t\t\t// If this is a positional/relative selector, check membership in the returned set\n\t\t\t\t// so $(\"p:first\").is(\"p:last\") won't return true for a doc with two \"p\".\n\t\t\t\ttypeof selector === \"string\" && rneedsContext.test(selector) ?\n\t\t\t\t\tjQuery(selector) :\n\t\t\t\t\tselector || [],\n\t\t\t\tfalse\n\t\t\t).length;\n\t\t}\n\t});\n\n\n\t// Initialize a jQuery object\n\n\n\t// A central reference to the root jQuery(document)\n\tvar rootjQuery,\n\n\t\t// A simple way to check for HTML strings\n\t\t// Prioritize #id over <tag> to avoid XSS via location.hash (trac-9521)\n\t\t// Strict HTML recognition (trac-11290: must start with <)\n\t\t// Shortcut simple #id case for speed\n\t\trquickExpr = /^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]+))$/,\n\n\t\tinit = jQuery.fn.init = function (selector, context, root) {\n\t\t\tvar match, elem;\n\n\t\t\t// HANDLE: $(\"\"), $(null), $(undefined), $(false)\n\t\t\tif (!selector) {\n\t\t\t\treturn this;\n\t\t\t}\n\n\t\t\t// Method init() accepts an alternate rootjQuery\n\t\t\t// so migrate can support jQuery.sub (gh-2101)\n\t\t\troot = root || rootjQuery;\n\n\t\t\t// Handle HTML strings\n\t\t\tif (typeof selector === \"string\") {\n\t\t\t\tif (selector[0] === \"<\" &&\n\t\t\t\t\tselector[selector.length - 1] === \">\" &&\n\t\t\t\t\tselector.length >= 3) {\n\n\t\t\t\t\t// Assume that strings that start and end with <> are HTML and skip the regex check\n\t\t\t\t\tmatch = [null, selector, null];\n\n\t\t\t\t} else {\n\t\t\t\t\tmatch = rquickExpr.exec(selector);\n\t\t\t\t}\n\n\t\t\t\t// Match html or make sure no context is specified for #id\n\t\t\t\tif (match && (match[1] || !context)) {\n\n\t\t\t\t\t// HANDLE: $(html) -> $(array)\n\t\t\t\t\tif (match[1]) {\n\t\t\t\t\t\tcontext = context instanceof jQuery ? context[0] : context;\n\n\t\t\t\t\t\t// Option to run scripts is true for back-compat\n\t\t\t\t\t\t// Intentionally let the error be thrown if parseHTML is not present\n\t\t\t\t\t\tjQuery.merge(this, jQuery.parseHTML(\n\t\t\t\t\t\t\tmatch[1],\n\t\t\t\t\t\t\tcontext && context.nodeType ? context.ownerDocument || context : document,\n\t\t\t\t\t\t\ttrue\n\t\t\t\t\t\t));\n\n\t\t\t\t\t\t// HANDLE: $(html, props)\n\t\t\t\t\t\tif (rsingleTag.test(match[1]) && jQuery.isPlainObject(context)) {\n\t\t\t\t\t\t\tfor (match in context) {\n\n\t\t\t\t\t\t\t\t// Properties of context are called as methods if possible\n\t\t\t\t\t\t\t\tif (isFunction(this[match])) {\n\t\t\t\t\t\t\t\t\tthis[match](context[match]);\n\n\t\t\t\t\t\t\t\t\t// ...and otherwise set as attributes\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tthis.attr(match, context[match]);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn this;\n\n\t\t\t\t\t\t// HANDLE: $(#id)\n\t\t\t\t\t} else {\n\t\t\t\t\t\telem = document.getElementById(match[2]);\n\n\t\t\t\t\t\tif (elem) {\n\n\t\t\t\t\t\t\t// Inject the element directly into the jQuery object\n\t\t\t\t\t\t\tthis[0] = elem;\n\t\t\t\t\t\t\tthis.length = 1;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn this;\n\t\t\t\t\t}\n\n\t\t\t\t\t// HANDLE: $(expr, $(...))\n\t\t\t\t} else if (!context || context.jquery) {\n\t\t\t\t\treturn (context || root).find(selector);\n\n\t\t\t\t\t// HANDLE: $(expr, context)\n\t\t\t\t\t// (which is just equivalent to: $(context).find(expr)\n\t\t\t\t} else {\n\t\t\t\t\treturn this.constructor(context).find(selector);\n\t\t\t\t}\n\n\t\t\t\t// HANDLE: $(DOMElement)\n\t\t\t} else if (selector.nodeType) {\n\t\t\t\tthis[0] = selector;\n\t\t\t\tthis.length = 1;\n\t\t\t\treturn this;\n\n\t\t\t\t// HANDLE: $(function)\n\t\t\t\t// Shortcut for document ready\n\t\t\t} else if (isFunction(selector)) {\n\t\t\t\treturn root.ready !== undefined ?\n\t\t\t\t\troot.ready(selector) :\n\n\t\t\t\t\t// Execute immediately if ready is not present\n\t\t\t\t\tselector(jQuery);\n\t\t\t}\n\n\t\t\treturn jQuery.makeArray(selector, this);\n\t\t};\n\n\t// Give the init function the jQuery prototype for later instantiation\n\tinit.prototype = jQuery.fn;\n\n\t// Initialize central reference\n\trootjQuery = jQuery(document);\n\n\n\tvar rparentsprev = /^(?:parents|prev(?:Until|All))/,\n\n\t\t// Methods guaranteed to produce a unique set when starting from a unique set\n\t\tguaranteedUnique = {\n\t\t\tchildren: true,\n\t\t\tcontents: true,\n\t\t\tnext: true,\n\t\t\tprev: true\n\t\t};\n\n\tjQuery.fn.extend({\n\t\thas: function (target) {\n\t\t\tvar targets = jQuery(target, this),\n\t\t\t\tl = targets.length;\n\n\t\t\treturn this.filter(function () {\n\t\t\t\tvar i = 0;\n\t\t\t\tfor (; i < l; i++) {\n\t\t\t\t\tif (jQuery.contains(this, targets[i])) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\tclosest: function (selectors, context) {\n\t\t\tvar cur,\n\t\t\t\ti = 0,\n\t\t\t\tl = this.length,\n\t\t\t\tmatched = [],\n\t\t\t\ttargets = typeof selectors !== \"string\" && jQuery(selectors);\n\n\t\t\t// Positional selectors never match, since there's no _selection_ context\n\t\t\tif (!rneedsContext.test(selectors)) {\n\t\t\t\tfor (; i < l; i++) {\n\t\t\t\t\tfor (cur = this[i]; cur && cur !== context; cur = cur.parentNode) {\n\n\t\t\t\t\t\t// Always skip document fragments\n\t\t\t\t\t\tif (cur.nodeType < 11 && (targets ?\n\t\t\t\t\t\t\ttargets.index(cur) > -1 :\n\n\t\t\t\t\t\t\t// Don't pass non-elements to jQuery#find\n\t\t\t\t\t\t\tcur.nodeType === 1 &&\n\t\t\t\t\t\t\tjQuery.find.matchesSelector(cur, selectors))) {\n\n\t\t\t\t\t\t\tmatched.push(cur);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn this.pushStack(matched.length > 1 ? jQuery.uniqueSort(matched) : matched);\n\t\t},\n\n\t\t// Determine the position of an element within the set\n\t\tindex: function (elem) {\n\n\t\t\t// No argument, return index in parent\n\t\t\tif (!elem) {\n\t\t\t\treturn (this[0] && this[0].parentNode) ? this.first().prevAll().length : -1;\n\t\t\t}\n\n\t\t\t// Index in selector\n\t\t\tif (typeof elem === \"string\") {\n\t\t\t\treturn indexOf.call(jQuery(elem), this[0]);\n\t\t\t}\n\n\t\t\t// Locate the position of the desired element\n\t\t\treturn indexOf.call(this,\n\n\t\t\t\t// If it receives a jQuery object, the first element is used\n\t\t\t\telem.jquery ? elem[0] : elem\n\t\t\t);\n\t\t},\n\n\t\tadd: function (selector, context) {\n\t\t\treturn this.pushStack(\n\t\t\t\tjQuery.uniqueSort(\n\t\t\t\t\tjQuery.merge(this.get(), jQuery(selector, context))\n\t\t\t\t)\n\t\t\t);\n\t\t},\n\n\t\taddBack: function (selector) {\n\t\t\treturn this.add(selector == null ?\n\t\t\t\tthis.prevObject : this.prevObject.filter(selector)\n\t\t\t);\n\t\t}\n\t});\n\n\tfunction sibling(cur, dir) {\n\t\twhile ((cur = cur[dir]) && cur.nodeType !== 1) { }\n\t\treturn cur;\n\t}\n\n\tjQuery.each({\n\t\tparent: function (elem) {\n\t\t\tvar parent = elem.parentNode;\n\t\t\treturn parent && parent.nodeType !== 11 ? parent : null;\n\t\t},\n\t\tparents: function (elem) {\n\t\t\treturn dir(elem, \"parentNode\");\n\t\t},\n\t\tparentsUntil: function (elem, _i, until) {\n\t\t\treturn dir(elem, \"parentNode\", until);\n\t\t},\n\t\tnext: function (elem) {\n\t\t\treturn sibling(elem, \"nextSibling\");\n\t\t},\n\t\tprev: function (elem) {\n\t\t\treturn sibling(elem, \"previousSibling\");\n\t\t},\n\t\tnextAll: function (elem) {\n\t\t\treturn dir(elem, \"nextSibling\");\n\t\t},\n\t\tprevAll: function (elem) {\n\t\t\treturn dir(elem, \"previousSibling\");\n\t\t},\n\t\tnextUntil: function (elem, _i, until) {\n\t\t\treturn dir(elem, \"nextSibling\", until);\n\t\t},\n\t\tprevUntil: function (elem, _i, until) {\n\t\t\treturn dir(elem, \"previousSibling\", until);\n\t\t},\n\t\tsiblings: function (elem) {\n\t\t\treturn siblings((elem.parentNode || {}).firstChild, elem);\n\t\t},\n\t\tchildren: function (elem) {\n\t\t\treturn siblings(elem.firstChild);\n\t\t},\n\t\tcontents: function (elem) {\n\t\t\tif (elem.contentDocument != null &&\n\n\t\t\t\t// Support: IE 11+\n\t\t\t\t// <object> elements with no `data` attribute has an object\n\t\t\t\t// `contentDocument` with a `null` prototype.\n\t\t\t\tgetProto(elem.contentDocument)) {\n\n\t\t\t\treturn elem.contentDocument;\n\t\t\t}\n\n\t\t\t// Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only\n\t\t\t// Treat the template element as a regular one in browsers that\n\t\t\t// don't support it.\n\t\t\tif (nodeName(elem, \"template\")) {\n\t\t\t\telem = elem.content || elem;\n\t\t\t}\n\n\t\t\treturn jQuery.merge([], elem.childNodes);\n\t\t}\n\t}, function (name, fn) {\n\t\tjQuery.fn[name] = function (until, selector) {\n\t\t\tvar matched = jQuery.map(this, fn, until);\n\n\t\t\tif (name.slice(-5) !== \"Until\") {\n\t\t\t\tselector = until;\n\t\t\t}\n\n\t\t\tif (selector && typeof selector === \"string\") {\n\t\t\t\tmatched = jQuery.filter(selector, matched);\n\t\t\t}\n\n\t\t\tif (this.length > 1) {\n\n\t\t\t\t// Remove duplicates\n\t\t\t\tif (!guaranteedUnique[name]) {\n\t\t\t\t\tjQuery.uniqueSort(matched);\n\t\t\t\t}\n\n\t\t\t\t// Reverse order for parents* and prev-derivatives\n\t\t\t\tif (rparentsprev.test(name)) {\n\t\t\t\t\tmatched.reverse();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn this.pushStack(matched);\n\t\t};\n\t});\n\tvar rnothtmlwhite = (/[^\\x20\\t\\r\\n\\f]+/g);\n\n\n\n\t// Convert String-formatted options into Object-formatted ones\n\tfunction createOptions(options) {\n\t\tvar object = {};\n\t\tjQuery.each(options.match(rnothtmlwhite) || [], function (_, flag) {\n\t\t\tobject[flag] = true;\n\t\t});\n\t\treturn object;\n\t}\n\n\t/*\n\t * Create a callback list using the following parameters:\n\t *\n\t *\toptions: an optional list of space-separated options that will change how\n\t *\t\t\tthe callback list behaves or a more traditional option object\n\t *\n\t * By default a callback list will act like an event callback list and can be\n\t * \"fired\" multiple times.\n\t *\n\t * Possible options:\n\t *\n\t *\tonce:\t\t\twill ensure the callback list can only be fired once (like a Deferred)\n\t *\n\t *\tmemory:\t\t\twill keep track of previous values and will call any callback added\n\t *\t\t\t\t\tafter the list has been fired right away with the latest \"memorized\"\n\t *\t\t\t\t\tvalues (like a Deferred)\n\t *\n\t *\tunique:\t\t\twill ensure a callback can only be added once (no duplicate in the list)\n\t *\n\t *\tstopOnFalse:\tinterrupt callings when a callback returns false\n\t *\n\t */\n\tjQuery.Callbacks = function (options) {\n\n\t\t// Convert options from String-formatted to Object-formatted if needed\n\t\t// (we check in cache first)\n\t\toptions = typeof options === \"string\" ?\n\t\t\tcreateOptions(options) :\n\t\t\tjQuery.extend({}, options);\n\n\t\tvar // Flag to know if list is currently firing\n\t\t\tfiring,\n\n\t\t\t// Last fire value for non-forgettable lists\n\t\t\tmemory,\n\n\t\t\t// Flag to know if list was already fired\n\t\t\tfired,\n\n\t\t\t// Flag to prevent firing\n\t\t\tlocked,\n\n\t\t\t// Actual callback list\n\t\t\tlist = [],\n\n\t\t\t// Queue of execution data for repeatable lists\n\t\t\tqueue = [],\n\n\t\t\t// Index of currently firing callback (modified by add/remove as needed)\n\t\t\tfiringIndex = -1,\n\n\t\t\t// Fire callbacks\n\t\t\tfire = function () {\n\n\t\t\t\t// Enforce single-firing\n\t\t\t\tlocked = locked || options.once;\n\n\t\t\t\t// Execute callbacks for all pending executions,\n\t\t\t\t// respecting firingIndex overrides and runtime changes\n\t\t\t\tfired = firing = true;\n\t\t\t\tfor (; queue.length; firingIndex = -1) {\n\t\t\t\t\tmemory = queue.shift();\n\t\t\t\t\twhile (++firingIndex < list.length) {\n\n\t\t\t\t\t\t// Run callback and check for early termination\n\t\t\t\t\t\tif (list[firingIndex].apply(memory[0], memory[1]) === false &&\n\t\t\t\t\t\t\toptions.stopOnFalse) {\n\n\t\t\t\t\t\t\t// Jump to end and forget the data so .add doesn't re-fire\n\t\t\t\t\t\t\tfiringIndex = list.length;\n\t\t\t\t\t\t\tmemory = false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Forget the data if we're done with it\n\t\t\t\tif (!options.memory) {\n\t\t\t\t\tmemory = false;\n\t\t\t\t}\n\n\t\t\t\tfiring = false;\n\n\t\t\t\t// Clean up if we're done firing for good\n\t\t\t\tif (locked) {\n\n\t\t\t\t\t// Keep an empty list if we have data for future add calls\n\t\t\t\t\tif (memory) {\n\t\t\t\t\t\tlist = [];\n\n\t\t\t\t\t\t// Otherwise, this object is spent\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlist = \"\";\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// Actual Callbacks object\n\t\t\tself = {\n\n\t\t\t\t// Add a callback or a collection of callbacks to the list\n\t\t\t\tadd: function () {\n\t\t\t\t\tif (list) {\n\n\t\t\t\t\t\t// If we have memory from a past run, we should fire after adding\n\t\t\t\t\t\tif (memory && !firing) {\n\t\t\t\t\t\t\tfiringIndex = list.length - 1;\n\t\t\t\t\t\t\tqueue.push(memory);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t(function add(args) {\n\t\t\t\t\t\t\tjQuery.each(args, function (_, arg) {\n\t\t\t\t\t\t\t\tif (isFunction(arg)) {\n\t\t\t\t\t\t\t\t\tif (!options.unique || !self.has(arg)) {\n\t\t\t\t\t\t\t\t\t\tlist.push(arg);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} else if (arg && arg.length && toType(arg) !== \"string\") {\n\n\t\t\t\t\t\t\t\t\t// Inspect recursively\n\t\t\t\t\t\t\t\t\tadd(arg);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t})(arguments);\n\n\t\t\t\t\t\tif (memory && !firing) {\n\t\t\t\t\t\t\tfire();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Remove a callback from the list\n\t\t\t\tremove: function () {\n\t\t\t\t\tjQuery.each(arguments, function (_, arg) {\n\t\t\t\t\t\tvar index;\n\t\t\t\t\t\twhile ((index = jQuery.inArray(arg, list, index)) > -1) {\n\t\t\t\t\t\t\tlist.splice(index, 1);\n\n\t\t\t\t\t\t\t// Handle firing indexes\n\t\t\t\t\t\t\tif (index <= firingIndex) {\n\t\t\t\t\t\t\t\tfiringIndex--;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Check if a given callback is in the list.\n\t\t\t\t// If no argument is given, return whether or not list has callbacks attached.\n\t\t\t\thas: function (fn) {\n\t\t\t\t\treturn fn ?\n\t\t\t\t\t\tjQuery.inArray(fn, list) > -1 :\n\t\t\t\t\t\tlist.length > 0;\n\t\t\t\t},\n\n\t\t\t\t// Remove all callbacks from the list\n\t\t\t\tempty: function () {\n\t\t\t\t\tif (list) {\n\t\t\t\t\t\tlist = [];\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Disable .fire and .add\n\t\t\t\t// Abort any current/pending executions\n\t\t\t\t// Clear all callbacks and values\n\t\t\t\tdisable: function () {\n\t\t\t\t\tlocked = queue = [];\n\t\t\t\t\tlist = memory = \"\";\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\t\t\t\tdisabled: function () {\n\t\t\t\t\treturn !list;\n\t\t\t\t},\n\n\t\t\t\t// Disable .fire\n\t\t\t\t// Also disable .add unless we have memory (since it would have no effect)\n\t\t\t\t// Abort any pending executions\n\t\t\t\tlock: function () {\n\t\t\t\t\tlocked = queue = [];\n\t\t\t\t\tif (!memory && !firing) {\n\t\t\t\t\t\tlist = memory = \"\";\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\t\t\t\tlocked: function () {\n\t\t\t\t\treturn !!locked;\n\t\t\t\t},\n\n\t\t\t\t// Call all callbacks with the given context and arguments\n\t\t\t\tfireWith: function (context, args) {\n\t\t\t\t\tif (!locked) {\n\t\t\t\t\t\targs = args || [];\n\t\t\t\t\t\targs = [context, args.slice ? args.slice() : args];\n\t\t\t\t\t\tqueue.push(args);\n\t\t\t\t\t\tif (!firing) {\n\t\t\t\t\t\t\tfire();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Call all the callbacks with the given arguments\n\t\t\t\tfire: function () {\n\t\t\t\t\tself.fireWith(this, arguments);\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// To know if the callbacks have already been called at least once\n\t\t\t\tfired: function () {\n\t\t\t\t\treturn !!fired;\n\t\t\t\t}\n\t\t\t};\n\n\t\treturn self;\n\t};\n\n\n\tfunction Identity(v) {\n\t\treturn v;\n\t}\n\tfunction Thrower(ex) {\n\t\tthrow ex;\n\t}\n\n\tfunction adoptValue(value, resolve, reject, noValue) {\n\t\tvar method;\n\n\t\ttry {\n\n\t\t\t// Check for promise aspect first to privilege synchronous behavior\n\t\t\tif (value && isFunction((method = value.promise))) {\n\t\t\t\tmethod.call(value).done(resolve).fail(reject);\n\n\t\t\t\t// Other thenables\n\t\t\t} else if (value && isFunction((method = value.then))) {\n\t\t\t\tmethod.call(value, resolve, reject);\n\n\t\t\t\t// Other non-thenables\n\t\t\t} else {\n\n\t\t\t\t// Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer:\n\t\t\t\t// * false: [ value ].slice( 0 ) => resolve( value )\n\t\t\t\t// * true: [ value ].slice( 1 ) => resolve()\n\t\t\t\tresolve.apply(undefined, [value].slice(noValue));\n\t\t\t}\n\n\t\t\t// For Promises/A+, convert exceptions into rejections\n\t\t\t// Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in\n\t\t\t// Deferred#then to conditionally suppress rejection.\n\t\t} catch (value) {\n\n\t\t\t// Support: Android 4.0 only\n\t\t\t// Strict mode functions invoked without .call/.apply get global-object context\n\t\t\treject.apply(undefined, [value]);\n\t\t}\n\t}\n\n\tjQuery.extend({\n\n\t\tDeferred: function (func) {\n\t\t\tvar tuples = [\n\n\t\t\t\t// action, add listener, callbacks,\n\t\t\t\t// ... .then handlers, argument index, [final state]\n\t\t\t\t[\"notify\", \"progress\", jQuery.Callbacks(\"memory\"),\n\t\t\t\t\tjQuery.Callbacks(\"memory\"), 2],\n\t\t\t\t[\"resolve\", \"done\", jQuery.Callbacks(\"once memory\"),\n\t\t\t\t\tjQuery.Callbacks(\"once memory\"), 0, \"resolved\"],\n\t\t\t\t[\"reject\", \"fail\", jQuery.Callbacks(\"once memory\"),\n\t\t\t\t\tjQuery.Callbacks(\"once memory\"), 1, \"rejected\"]\n\t\t\t],\n\t\t\t\tstate = \"pending\",\n\t\t\t\tpromise = {\n\t\t\t\t\tstate: function () {\n\t\t\t\t\t\treturn state;\n\t\t\t\t\t},\n\t\t\t\t\talways: function () {\n\t\t\t\t\t\tdeferred.done(arguments).fail(arguments);\n\t\t\t\t\t\treturn this;\n\t\t\t\t\t},\n\t\t\t\t\t\"catch\": function (fn) {\n\t\t\t\t\t\treturn promise.then(null, fn);\n\t\t\t\t\t},\n\n\t\t\t\t\t// Keep pipe for back-compat\n\t\t\t\t\tpipe: function ( /* fnDone, fnFail, fnProgress */) {\n\t\t\t\t\t\tvar fns = arguments;\n\n\t\t\t\t\t\treturn jQuery.Deferred(function (newDefer) {\n\t\t\t\t\t\t\tjQuery.each(tuples, function (_i, tuple) {\n\n\t\t\t\t\t\t\t\t// Map tuples (progress, done, fail) to arguments (done, fail, progress)\n\t\t\t\t\t\t\t\tvar fn = isFunction(fns[tuple[4]]) && fns[tuple[4]];\n\n\t\t\t\t\t\t\t\t// deferred.progress(function() { bind to newDefer or newDefer.notify })\n\t\t\t\t\t\t\t\t// deferred.done(function() { bind to newDefer or newDefer.resolve })\n\t\t\t\t\t\t\t\t// deferred.fail(function() { bind to newDefer or newDefer.reject })\n\t\t\t\t\t\t\t\tdeferred[tuple[1]](function () {\n\t\t\t\t\t\t\t\t\tvar returned = fn && fn.apply(this, arguments);\n\t\t\t\t\t\t\t\t\tif (returned && isFunction(returned.promise)) {\n\t\t\t\t\t\t\t\t\t\treturned.promise()\n\t\t\t\t\t\t\t\t\t\t\t.progress(newDefer.notify)\n\t\t\t\t\t\t\t\t\t\t\t.done(newDefer.resolve)\n\t\t\t\t\t\t\t\t\t\t\t.fail(newDefer.reject);\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tnewDefer[tuple[0] + \"With\"](\n\t\t\t\t\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\t\t\t\t\tfn ? [returned] : arguments\n\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tfns = null;\n\t\t\t\t\t\t}).promise();\n\t\t\t\t\t},\n\t\t\t\t\tthen: function (onFulfilled, onRejected, onProgress) {\n\t\t\t\t\t\tvar maxDepth = 0;\n\t\t\t\t\t\tfunction resolve(depth, deferred, handler, special) {\n\t\t\t\t\t\t\treturn function () {\n\t\t\t\t\t\t\t\tvar that = this,\n\t\t\t\t\t\t\t\t\targs = arguments,\n\t\t\t\t\t\t\t\t\tmightThrow = function () {\n\t\t\t\t\t\t\t\t\t\tvar returned, then;\n\n\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.3\n\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-59\n\t\t\t\t\t\t\t\t\t\t// Ignore double-resolution attempts\n\t\t\t\t\t\t\t\t\t\tif (depth < maxDepth) {\n\t\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\treturned = handler.apply(that, args);\n\n\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.1\n\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-48\n\t\t\t\t\t\t\t\t\t\tif (returned === deferred.promise()) {\n\t\t\t\t\t\t\t\t\t\t\tthrow new TypeError(\"Thenable self-resolution\");\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ sections 2.3.3.1, 3.5\n\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-54\n\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-75\n\t\t\t\t\t\t\t\t\t\t// Retrieve `then` only once\n\t\t\t\t\t\t\t\t\t\tthen = returned &&\n\n\t\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.4\n\t\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-64\n\t\t\t\t\t\t\t\t\t\t\t// Only check objects and functions for thenability\n\t\t\t\t\t\t\t\t\t\t\t(typeof returned === \"object\" ||\n\t\t\t\t\t\t\t\t\t\t\t\ttypeof returned === \"function\") &&\n\t\t\t\t\t\t\t\t\t\t\treturned.then;\n\n\t\t\t\t\t\t\t\t\t\t// Handle a returned thenable\n\t\t\t\t\t\t\t\t\t\tif (isFunction(then)) {\n\n\t\t\t\t\t\t\t\t\t\t\t// Special processors (notify) just wait for resolution\n\t\t\t\t\t\t\t\t\t\t\tif (special) {\n\t\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\t\tresolve(maxDepth, deferred, Identity, special),\n\t\t\t\t\t\t\t\t\t\t\t\t\tresolve(maxDepth, deferred, Thrower, special)\n\t\t\t\t\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t\t\t\t\t// Normal processors (resolve) also hook into progress\n\t\t\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t\t\t// ...and disregard older resolution values\n\t\t\t\t\t\t\t\t\t\t\t\tmaxDepth++;\n\n\t\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\t\tresolve(maxDepth, deferred, Identity, special),\n\t\t\t\t\t\t\t\t\t\t\t\t\tresolve(maxDepth, deferred, Thrower, special),\n\t\t\t\t\t\t\t\t\t\t\t\t\tresolve(maxDepth, deferred, Identity,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tdeferred.notifyWith)\n\t\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t// Handle all other returned values\n\t\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\t\tif (handler !== Identity) {\n\t\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\t\targs = [returned];\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t// Process the value(s)\n\t\t\t\t\t\t\t\t\t\t\t// Default process is resolve\n\t\t\t\t\t\t\t\t\t\t\t(special || deferred.resolveWith)(that, args);\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\n\t\t\t\t\t\t\t\t\t// Only normal processors (resolve) catch and reject exceptions\n\t\t\t\t\t\t\t\t\tprocess = special ?\n\t\t\t\t\t\t\t\t\t\tmightThrow :\n\t\t\t\t\t\t\t\t\t\tfunction () {\n\t\t\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\t\t\tmightThrow();\n\t\t\t\t\t\t\t\t\t\t\t} catch (e) {\n\n\t\t\t\t\t\t\t\t\t\t\t\tif (jQuery.Deferred.exceptionHook) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tjQuery.Deferred.exceptionHook(e,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tprocess.error);\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.4.1\n\t\t\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-61\n\t\t\t\t\t\t\t\t\t\t\t\t// Ignore post-resolution exceptions\n\t\t\t\t\t\t\t\t\t\t\t\tif (depth + 1 >= maxDepth) {\n\n\t\t\t\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\t\t\t\tif (handler !== Thrower) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\targs = [e];\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\t\tdeferred.rejectWith(that, args);\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.1\n\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-57\n\t\t\t\t\t\t\t\t// Re-resolve promises immediately to dodge false rejection from\n\t\t\t\t\t\t\t\t// subsequent errors\n\t\t\t\t\t\t\t\tif (depth) {\n\t\t\t\t\t\t\t\t\tprocess();\n\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t// Call an optional hook to record the error, in case of exception\n\t\t\t\t\t\t\t\t\t// since it's otherwise lost when execution goes async\n\t\t\t\t\t\t\t\t\tif (jQuery.Deferred.getErrorHook) {\n\t\t\t\t\t\t\t\t\t\tprocess.error = jQuery.Deferred.getErrorHook();\n\n\t\t\t\t\t\t\t\t\t\t// The deprecated alias of the above. While the name suggests\n\t\t\t\t\t\t\t\t\t\t// returning the stack, not an error instance, jQuery just passes\n\t\t\t\t\t\t\t\t\t\t// it directly to `console.warn` so both will work; an instance\n\t\t\t\t\t\t\t\t\t\t// just better cooperates with source maps.\n\t\t\t\t\t\t\t\t\t} else if (jQuery.Deferred.getStackHook) {\n\t\t\t\t\t\t\t\t\t\tprocess.error = jQuery.Deferred.getStackHook();\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\twindow.setTimeout(process);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn jQuery.Deferred(function (newDefer) {\n\n\t\t\t\t\t\t\t// progress_handlers.add( ... )\n\t\t\t\t\t\t\ttuples[0][3].add(\n\t\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\t\tisFunction(onProgress) ?\n\t\t\t\t\t\t\t\t\t\tonProgress :\n\t\t\t\t\t\t\t\t\t\tIdentity,\n\t\t\t\t\t\t\t\t\tnewDefer.notifyWith\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t// fulfilled_handlers.add( ... )\n\t\t\t\t\t\t\ttuples[1][3].add(\n\t\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\t\tisFunction(onFulfilled) ?\n\t\t\t\t\t\t\t\t\t\tonFulfilled :\n\t\t\t\t\t\t\t\t\t\tIdentity\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t// rejected_handlers.add( ... )\n\t\t\t\t\t\t\ttuples[2][3].add(\n\t\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\t\tisFunction(onRejected) ?\n\t\t\t\t\t\t\t\t\t\tonRejected :\n\t\t\t\t\t\t\t\t\t\tThrower\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}).promise();\n\t\t\t\t\t},\n\n\t\t\t\t\t// Get a promise for this deferred\n\t\t\t\t\t// If obj is provided, the promise aspect is added to the object\n\t\t\t\t\tpromise: function (obj) {\n\t\t\t\t\t\treturn obj != null ? jQuery.extend(obj, promise) : promise;\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tdeferred = {};\n\n\t\t\t// Add list-specific methods\n\t\t\tjQuery.each(tuples, function (i, tuple) {\n\t\t\t\tvar list = tuple[2],\n\t\t\t\t\tstateString = tuple[5];\n\n\t\t\t\t// promise.progress = list.add\n\t\t\t\t// promise.done = list.add\n\t\t\t\t// promise.fail = list.add\n\t\t\t\tpromise[tuple[1]] = list.add;\n\n\t\t\t\t// Handle state\n\t\t\t\tif (stateString) {\n\t\t\t\t\tlist.add(\n\t\t\t\t\t\tfunction () {\n\n\t\t\t\t\t\t\t// state = \"resolved\" (i.e., fulfilled)\n\t\t\t\t\t\t\t// state = \"rejected\"\n\t\t\t\t\t\t\tstate = stateString;\n\t\t\t\t\t\t},\n\n\t\t\t\t\t\t// rejected_callbacks.disable\n\t\t\t\t\t\t// fulfilled_callbacks.disable\n\t\t\t\t\t\ttuples[3 - i][2].disable,\n\n\t\t\t\t\t\t// rejected_handlers.disable\n\t\t\t\t\t\t// fulfilled_handlers.disable\n\t\t\t\t\t\ttuples[3 - i][3].disable,\n\n\t\t\t\t\t\t// progress_callbacks.lock\n\t\t\t\t\t\ttuples[0][2].lock,\n\n\t\t\t\t\t\t// progress_handlers.lock\n\t\t\t\t\t\ttuples[0][3].lock\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\t// progress_handlers.fire\n\t\t\t\t// fulfilled_handlers.fire\n\t\t\t\t// rejected_handlers.fire\n\t\t\t\tlist.add(tuple[3].fire);\n\n\t\t\t\t// deferred.notify = function() { deferred.notifyWith(...) }\n\t\t\t\t// deferred.resolve = function() { deferred.resolveWith(...) }\n\t\t\t\t// deferred.reject = function() { deferred.rejectWith(...) }\n\t\t\t\tdeferred[tuple[0]] = function () {\n\t\t\t\t\tdeferred[tuple[0] + \"With\"](this === deferred ? undefined : this, arguments);\n\t\t\t\t\treturn this;\n\t\t\t\t};\n\n\t\t\t\t// deferred.notifyWith = list.fireWith\n\t\t\t\t// deferred.resolveWith = list.fireWith\n\t\t\t\t// deferred.rejectWith = list.fireWith\n\t\t\t\tdeferred[tuple[0] + \"With\"] = list.fireWith;\n\t\t\t});\n\n\t\t\t// Make the deferred a promise\n\t\t\tpromise.promise(deferred);\n\n\t\t\t// Call given func if any\n\t\t\tif (func) {\n\t\t\t\tfunc.call(deferred, deferred);\n\t\t\t}\n\n\t\t\t// All done!\n\t\t\treturn deferred;\n\t\t},\n\n\t\t// Deferred helper\n\t\twhen: function (singleValue) {\n\t\t\tvar\n\n\t\t\t\t// count of uncompleted subordinates\n\t\t\t\tremaining = arguments.length,\n\n\t\t\t\t// count of unprocessed arguments\n\t\t\t\ti = remaining,\n\n\t\t\t\t// subordinate fulfillment data\n\t\t\t\tresolveContexts = Array(i),\n\t\t\t\tresolveValues = slice.call(arguments),\n\n\t\t\t\t// the primary Deferred\n\t\t\t\tprimary = jQuery.Deferred(),\n\n\t\t\t\t// subordinate callback factory\n\t\t\t\tupdateFunc = function (i) {\n\t\t\t\t\treturn function (value) {\n\t\t\t\t\t\tresolveContexts[i] = this;\n\t\t\t\t\t\tresolveValues[i] = arguments.length > 1 ? slice.call(arguments) : value;\n\t\t\t\t\t\tif (!(--remaining)) {\n\t\t\t\t\t\t\tprimary.resolveWith(resolveContexts, resolveValues);\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t};\n\n\t\t\t// Single- and empty arguments are adopted like Promise.resolve\n\t\t\tif (remaining <= 1) {\n\t\t\t\tadoptValue(singleValue, primary.done(updateFunc(i)).resolve, primary.reject,\n\t\t\t\t\t!remaining);\n\n\t\t\t\t// Use .then() to unwrap secondary thenables (cf. gh-3000)\n\t\t\t\tif (primary.state() === \"pending\" ||\n\t\t\t\t\tisFunction(resolveValues[i] && resolveValues[i].then)) {\n\n\t\t\t\t\treturn primary.then();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Multiple arguments are aggregated like Promise.all array elements\n\t\t\twhile (i--) {\n\t\t\t\tadoptValue(resolveValues[i], updateFunc(i), primary.reject);\n\t\t\t}\n\n\t\t\treturn primary.promise();\n\t\t}\n\t});\n\n\n\t// These usually indicate a programmer mistake during development,\n\t// warn about them ASAP rather than swallowing them by default.\n\tvar rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;\n\n\t// If `jQuery.Deferred.getErrorHook` is defined, `asyncError` is an error\n\t// captured before the async barrier to get the original error cause\n\t// which may otherwise be hidden.\n\tjQuery.Deferred.exceptionHook = function (error, asyncError) {\n\n\t\t// Support: IE 8 - 9 only\n\t\t// Console exists when dev tools are open, which can happen at any time\n\t\tif (window.console && window.console.warn && error && rerrorNames.test(error.name)) {\n\t\t\twindow.console.warn(\"jQuery.Deferred exception: \" + error.message,\n\t\t\t\terror.stack, asyncError);\n\t\t}\n\t};\n\n\n\n\n\tjQuery.readyException = function (error) {\n\t\twindow.setTimeout(function () {\n\t\t\tthrow error;\n\t\t});\n\t};\n\n\n\n\n\t// The deferred used on DOM ready\n\tvar readyList = jQuery.Deferred();\n\n\tjQuery.fn.ready = function (fn) {\n\n\t\treadyList\n\t\t\t.then(fn)\n\n\t\t\t// Wrap jQuery.readyException in a function so that the lookup\n\t\t\t// happens at the time of error handling instead of callback\n\t\t\t// registration.\n\t\t\t.catch(function (error) {\n\t\t\t\tjQuery.readyException(error);\n\t\t\t});\n\n\t\treturn this;\n\t};\n\n\tjQuery.extend({\n\n\t\t// Is the DOM ready to be used? Set to true once it occurs.\n\t\tisReady: false,\n\n\t\t// A counter to track how many items to wait for before\n\t\t// the ready event fires. See trac-6781\n\t\treadyWait: 1,\n\n\t\t// Handle when the DOM is ready\n\t\tready: function (wait) {\n\n\t\t\t// Abort if there are pending holds or we're already ready\n\t\t\tif (wait === true ? --jQuery.readyWait : jQuery.isReady) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Remember that the DOM is ready\n\t\t\tjQuery.isReady = true;\n\n\t\t\t// If a normal DOM Ready event fired, decrement, and wait if need be\n\t\t\tif (wait !== true && --jQuery.readyWait > 0) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If there are functions bound, to execute\n\t\t\treadyList.resolveWith(document, [jQuery]);\n\t\t}\n\t});\n\n\tjQuery.ready.then = readyList.then;\n\n\t// The ready event handler and self cleanup method\n\tfunction completed() {\n\t\tdocument.removeEventListener(\"DOMContentLoaded\", completed);\n\t\twindow.removeEventListener(\"load\", completed);\n\t\tjQuery.ready();\n\t}\n\n\t// Catch cases where $(document).ready() is called\n\t// after the browser event has already occurred.\n\t// Support: IE <=9 - 10 only\n\t// Older IE sometimes signals \"interactive\" too soon\n\tif (document.readyState === \"complete\" ||\n\t\t(document.readyState !== \"loading\" && !document.documentElement.doScroll)) {\n\n\t\t// Handle it asynchronously to allow scripts the opportunity to delay ready\n\t\twindow.setTimeout(jQuery.ready);\n\n\t} else {\n\n\t\t// Use the handy event callback\n\t\tdocument.addEventListener(\"DOMContentLoaded\", completed);\n\n\t\t// A fallback to window.onload, that will always work\n\t\twindow.addEventListener(\"load\", completed);\n\t}\n\n\n\n\n\t// Multifunctional method to get and set values of a collection\n\t// The value/s can optionally be executed if it's a function\n\tvar access = function (elems, fn, key, value, chainable, emptyGet, raw) {\n\t\tvar i = 0,\n\t\t\tlen = elems.length,\n\t\t\tbulk = key == null;\n\n\t\t// Sets many values\n\t\tif (toType(key) === \"object\") {\n\t\t\tchainable = true;\n\t\t\tfor (i in key) {\n\t\t\t\taccess(elems, fn, i, key[i], true, emptyGet, raw);\n\t\t\t}\n\n\t\t\t// Sets one value\n\t\t} else if (value !== undefined) {\n\t\t\tchainable = true;\n\n\t\t\tif (!isFunction(value)) {\n\t\t\t\traw = true;\n\t\t\t}\n\n\t\t\tif (bulk) {\n\n\t\t\t\t// Bulk operations run against the entire set\n\t\t\t\tif (raw) {\n\t\t\t\t\tfn.call(elems, value);\n\t\t\t\t\tfn = null;\n\n\t\t\t\t\t// ...except when executing function values\n\t\t\t\t} else {\n\t\t\t\t\tbulk = fn;\n\t\t\t\t\tfn = function (elem, _key, value) {\n\t\t\t\t\t\treturn bulk.call(jQuery(elem), value);\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (fn) {\n\t\t\t\tfor (; i < len; i++) {\n\t\t\t\t\tfn(\n\t\t\t\t\t\telems[i], key, raw ?\n\t\t\t\t\t\tvalue :\n\t\t\t\t\t\tvalue.call(elems[i], i, fn(elems[i], key))\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (chainable) {\n\t\t\treturn elems;\n\t\t}\n\n\t\t// Gets\n\t\tif (bulk) {\n\t\t\treturn fn.call(elems);\n\t\t}\n\n\t\treturn len ? fn(elems[0], key) : emptyGet;\n\t};\n\n\n\t// Matches dashed string for camelizing\n\tvar rmsPrefix = /^-ms-/,\n\t\trdashAlpha = /-([a-z])/g;\n\n\t// Used by camelCase as callback to replace()\n\tfunction fcamelCase(_all, letter) {\n\t\treturn letter.toUpperCase();\n\t}\n\n\t// Convert dashed to camelCase; used by the css and data modules\n\t// Support: IE <=9 - 11, Edge 12 - 15\n\t// Microsoft forgot to hump their vendor prefix (trac-9572)\n\tfunction camelCase(string) {\n\t\treturn string.replace(rmsPrefix, \"ms-\").replace(rdashAlpha, fcamelCase);\n\t}\n\tvar acceptData = function (owner) {\n\n\t\t// Accepts only:\n\t\t//  - Node\n\t\t//    - Node.ELEMENT_NODE\n\t\t//    - Node.DOCUMENT_NODE\n\t\t//  - Object\n\t\t//    - Any\n\t\treturn owner.nodeType === 1 || owner.nodeType === 9 || !(+owner.nodeType);\n\t};\n\n\n\n\n\tfunction Data() {\n\t\tthis.expando = jQuery.expando + Data.uid++;\n\t}\n\n\tData.uid = 1;\n\n\tData.prototype = {\n\n\t\tcache: function (owner) {\n\n\t\t\t// Check if the owner object already has a cache\n\t\t\tvar value = owner[this.expando];\n\n\t\t\t// If not, create one\n\t\t\tif (!value) {\n\t\t\t\tvalue = {};\n\n\t\t\t\t// We can accept data for non-element nodes in modern browsers,\n\t\t\t\t// but we should not, see trac-8335.\n\t\t\t\t// Always return an empty object.\n\t\t\t\tif (acceptData(owner)) {\n\n\t\t\t\t\t// If it is a node unlikely to be stringify-ed or looped over\n\t\t\t\t\t// use plain assignment\n\t\t\t\t\tif (owner.nodeType) {\n\t\t\t\t\t\towner[this.expando] = value;\n\n\t\t\t\t\t\t// Otherwise secure it in a non-enumerable property\n\t\t\t\t\t\t// configurable must be true to allow the property to be\n\t\t\t\t\t\t// deleted when data is removed\n\t\t\t\t\t} else {\n\t\t\t\t\t\tObject.defineProperty(owner, this.expando, {\n\t\t\t\t\t\t\tvalue: value,\n\t\t\t\t\t\t\tconfigurable: true\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn value;\n\t\t},\n\t\tset: function (owner, data, value) {\n\t\t\tvar prop,\n\t\t\t\tcache = this.cache(owner);\n\n\t\t\t// Handle: [ owner, key, value ] args\n\t\t\t// Always use camelCase key (gh-2257)\n\t\t\tif (typeof data === \"string\") {\n\t\t\t\tcache[camelCase(data)] = value;\n\n\t\t\t\t// Handle: [ owner, { properties } ] args\n\t\t\t} else {\n\n\t\t\t\t// Copy the properties one-by-one to the cache object\n\t\t\t\tfor (prop in data) {\n\t\t\t\t\tcache[camelCase(prop)] = data[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn cache;\n\t\t},\n\t\tget: function (owner, key) {\n\t\t\treturn key === undefined ?\n\t\t\t\tthis.cache(owner) :\n\n\t\t\t\t// Always use camelCase key (gh-2257)\n\t\t\t\towner[this.expando] && owner[this.expando][camelCase(key)];\n\t\t},\n\t\taccess: function (owner, key, value) {\n\n\t\t\t// In cases where either:\n\t\t\t//\n\t\t\t//   1. No key was specified\n\t\t\t//   2. A string key was specified, but no value provided\n\t\t\t//\n\t\t\t// Take the \"read\" path and allow the get method to determine\n\t\t\t// which value to return, respectively either:\n\t\t\t//\n\t\t\t//   1. The entire cache object\n\t\t\t//   2. The data stored at the key\n\t\t\t//\n\t\t\tif (key === undefined ||\n\t\t\t\t((key && typeof key === \"string\") && value === undefined)) {\n\n\t\t\t\treturn this.get(owner, key);\n\t\t\t}\n\n\t\t\t// When the key is not a string, or both a key and value\n\t\t\t// are specified, set or extend (existing objects) with either:\n\t\t\t//\n\t\t\t//   1. An object of properties\n\t\t\t//   2. A key and value\n\t\t\t//\n\t\t\tthis.set(owner, key, value);\n\n\t\t\t// Since the \"set\" path can have two possible entry points\n\t\t\t// return the expected data based on which path was taken[*]\n\t\t\treturn value !== undefined ? value : key;\n\t\t},\n\t\tremove: function (owner, key) {\n\t\t\tvar i,\n\t\t\t\tcache = owner[this.expando];\n\n\t\t\tif (cache === undefined) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (key !== undefined) {\n\n\t\t\t\t// Support array or space separated string of keys\n\t\t\t\tif (Array.isArray(key)) {\n\n\t\t\t\t\t// If key is an array of keys...\n\t\t\t\t\t// We always set camelCase keys, so remove that.\n\t\t\t\t\tkey = key.map(camelCase);\n\t\t\t\t} else {\n\t\t\t\t\tkey = camelCase(key);\n\n\t\t\t\t\t// If a key with the spaces exists, use it.\n\t\t\t\t\t// Otherwise, create an array by matching non-whitespace\n\t\t\t\t\tkey = key in cache ?\n\t\t\t\t\t\t[key] :\n\t\t\t\t\t\t(key.match(rnothtmlwhite) || []);\n\t\t\t\t}\n\n\t\t\t\ti = key.length;\n\n\t\t\t\twhile (i--) {\n\t\t\t\t\tdelete cache[key[i]];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove the expando if there's no more data\n\t\t\tif (key === undefined || jQuery.isEmptyObject(cache)) {\n\n\t\t\t\t// Support: Chrome <=35 - 45\n\t\t\t\t// Webkit & Blink performance suffers when deleting properties\n\t\t\t\t// from DOM nodes, so set to undefined instead\n\t\t\t\t// https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted)\n\t\t\t\tif (owner.nodeType) {\n\t\t\t\t\towner[this.expando] = undefined;\n\t\t\t\t} else {\n\t\t\t\t\tdelete owner[this.expando];\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\thasData: function (owner) {\n\t\t\tvar cache = owner[this.expando];\n\t\t\treturn cache !== undefined && !jQuery.isEmptyObject(cache);\n\t\t}\n\t};\n\tvar dataPriv = new Data();\n\n\tvar dataUser = new Data();\n\n\n\n\t//\tImplementation Summary\n\t//\n\t//\t1. Enforce API surface and semantic compatibility with 1.9.x branch\n\t//\t2. Improve the module's maintainability by reducing the storage\n\t//\t\tpaths to a single mechanism.\n\t//\t3. Use the same single mechanism to support \"private\" and \"user\" data.\n\t//\t4. _Never_ expose \"private\" data to user code (TODO: Drop _data, _removeData)\n\t//\t5. Avoid exposing implementation details on user objects (eg. expando properties)\n\t//\t6. Provide a clear path for implementation upgrade to WeakMap in 2014\n\n\tvar rbrace = /^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,\n\t\trmultiDash = /[A-Z]/g;\n\n\tfunction getData(data) {\n\t\tif (data === \"true\") {\n\t\t\treturn true;\n\t\t}\n\n\t\tif (data === \"false\") {\n\t\t\treturn false;\n\t\t}\n\n\t\tif (data === \"null\") {\n\t\t\treturn null;\n\t\t}\n\n\t\t// Only convert to a number if it doesn't change the string\n\t\tif (data === +data + \"\") {\n\t\t\treturn +data;\n\t\t}\n\n\t\tif (rbrace.test(data)) {\n\t\t\treturn JSON.parse(data);\n\t\t}\n\n\t\treturn data;\n\t}\n\n\tfunction dataAttr(elem, key, data) {\n\t\tvar name;\n\n\t\t// If nothing was found internally, try to fetch any\n\t\t// data from the HTML5 data-* attribute\n\t\tif (data === undefined && elem.nodeType === 1) {\n\t\t\tname = \"data-\" + key.replace(rmultiDash, \"-$&\").toLowerCase();\n\t\t\tdata = elem.getAttribute(name);\n\n\t\t\tif (typeof data === \"string\") {\n\t\t\t\ttry {\n\t\t\t\t\tdata = getData(data);\n\t\t\t\t} catch (e) { }\n\n\t\t\t\t// Make sure we set the data so it isn't changed later\n\t\t\t\tdataUser.set(elem, key, data);\n\t\t\t} else {\n\t\t\t\tdata = undefined;\n\t\t\t}\n\t\t}\n\t\treturn data;\n\t}\n\n\tjQuery.extend({\n\t\thasData: function (elem) {\n\t\t\treturn dataUser.hasData(elem) || dataPriv.hasData(elem);\n\t\t},\n\n\t\tdata: function (elem, name, data) {\n\t\t\treturn dataUser.access(elem, name, data);\n\t\t},\n\n\t\tremoveData: function (elem, name) {\n\t\t\tdataUser.remove(elem, name);\n\t\t},\n\n\t\t// TODO: Now that all calls to _data and _removeData have been replaced\n\t\t// with direct calls to dataPriv methods, these can be deprecated.\n\t\t_data: function (elem, name, data) {\n\t\t\treturn dataPriv.access(elem, name, data);\n\t\t},\n\n\t\t_removeData: function (elem, name) {\n\t\t\tdataPriv.remove(elem, name);\n\t\t}\n\t});\n\n\tjQuery.fn.extend({\n\t\tdata: function (key, value) {\n\t\t\tvar i, name, data,\n\t\t\t\telem = this[0],\n\t\t\t\tattrs = elem && elem.attributes;\n\n\t\t\t// Gets all values\n\t\t\tif (key === undefined) {\n\t\t\t\tif (this.length) {\n\t\t\t\t\tdata = dataUser.get(elem);\n\n\t\t\t\t\tif (elem.nodeType === 1 && !dataPriv.get(elem, \"hasDataAttrs\")) {\n\t\t\t\t\t\ti = attrs.length;\n\t\t\t\t\t\twhile (i--) {\n\n\t\t\t\t\t\t\t// Support: IE 11 only\n\t\t\t\t\t\t\t// The attrs elements can be null (trac-14894)\n\t\t\t\t\t\t\tif (attrs[i]) {\n\t\t\t\t\t\t\t\tname = attrs[i].name;\n\t\t\t\t\t\t\t\tif (name.indexOf(\"data-\") === 0) {\n\t\t\t\t\t\t\t\t\tname = camelCase(name.slice(5));\n\t\t\t\t\t\t\t\t\tdataAttr(elem, name, data[name]);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdataPriv.set(elem, \"hasDataAttrs\", true);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn data;\n\t\t\t}\n\n\t\t\t// Sets multiple values\n\t\t\tif (typeof key === \"object\") {\n\t\t\t\treturn this.each(function () {\n\t\t\t\t\tdataUser.set(this, key);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn access(this, function (value) {\n\t\t\t\tvar data;\n\n\t\t\t\t// The calling jQuery object (element matches) is not empty\n\t\t\t\t// (and therefore has an element appears at this[ 0 ]) and the\n\t\t\t\t// `value` parameter was not undefined. An empty jQuery object\n\t\t\t\t// will result in `undefined` for elem = this[ 0 ] which will\n\t\t\t\t// throw an exception if an attempt to read a data cache is made.\n\t\t\t\tif (elem && value === undefined) {\n\n\t\t\t\t\t// Attempt to get data from the cache\n\t\t\t\t\t// The key will always be camelCased in Data\n\t\t\t\t\tdata = dataUser.get(elem, key);\n\t\t\t\t\tif (data !== undefined) {\n\t\t\t\t\t\treturn data;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Attempt to \"discover\" the data in\n\t\t\t\t\t// HTML5 custom data-* attrs\n\t\t\t\t\tdata = dataAttr(elem, key);\n\t\t\t\t\tif (data !== undefined) {\n\t\t\t\t\t\treturn data;\n\t\t\t\t\t}\n\n\t\t\t\t\t// We tried really hard, but the data doesn't exist.\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Set the data...\n\t\t\t\tthis.each(function () {\n\n\t\t\t\t\t// We always store the camelCased key\n\t\t\t\t\tdataUser.set(this, key, value);\n\t\t\t\t});\n\t\t\t}, null, value, arguments.length > 1, null, true);\n\t\t},\n\n\t\tremoveData: function (key) {\n\t\t\treturn this.each(function () {\n\t\t\t\tdataUser.remove(this, key);\n\t\t\t});\n\t\t}\n\t});\n\n\n\tjQuery.extend({\n\t\tqueue: function (elem, type, data) {\n\t\t\tvar queue;\n\n\t\t\tif (elem) {\n\t\t\t\ttype = (type || \"fx\") + \"queue\";\n\t\t\t\tqueue = dataPriv.get(elem, type);\n\n\t\t\t\t// Speed up dequeue by getting out quickly if this is just a lookup\n\t\t\t\tif (data) {\n\t\t\t\t\tif (!queue || Array.isArray(data)) {\n\t\t\t\t\t\tqueue = dataPriv.access(elem, type, jQuery.makeArray(data));\n\t\t\t\t\t} else {\n\t\t\t\t\t\tqueue.push(data);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn queue || [];\n\t\t\t}\n\t\t},\n\n\t\tdequeue: function (elem, type) {\n\t\t\ttype = type || \"fx\";\n\n\t\t\tvar queue = jQuery.queue(elem, type),\n\t\t\t\tstartLength = queue.length,\n\t\t\t\tfn = queue.shift(),\n\t\t\t\thooks = jQuery._queueHooks(elem, type),\n\t\t\t\tnext = function () {\n\t\t\t\t\tjQuery.dequeue(elem, type);\n\t\t\t\t};\n\n\t\t\t// If the fx queue is dequeued, always remove the progress sentinel\n\t\t\tif (fn === \"inprogress\") {\n\t\t\t\tfn = queue.shift();\n\t\t\t\tstartLength--;\n\t\t\t}\n\n\t\t\tif (fn) {\n\n\t\t\t\t// Add a progress sentinel to prevent the fx queue from being\n\t\t\t\t// automatically dequeued\n\t\t\t\tif (type === \"fx\") {\n\t\t\t\t\tqueue.unshift(\"inprogress\");\n\t\t\t\t}\n\n\t\t\t\t// Clear up the last queue stop function\n\t\t\t\tdelete hooks.stop;\n\t\t\t\tfn.call(elem, next, hooks);\n\t\t\t}\n\n\t\t\tif (!startLength && hooks) {\n\t\t\t\thooks.empty.fire();\n\t\t\t}\n\t\t},\n\n\t\t// Not public - generate a queueHooks object, or return the current one\n\t\t_queueHooks: function (elem, type) {\n\t\t\tvar key = type + \"queueHooks\";\n\t\t\treturn dataPriv.get(elem, key) || dataPriv.access(elem, key, {\n\t\t\t\tempty: jQuery.Callbacks(\"once memory\").add(function () {\n\t\t\t\t\tdataPriv.remove(elem, [type + \"queue\", key]);\n\t\t\t\t})\n\t\t\t});\n\t\t}\n\t});\n\n\tjQuery.fn.extend({\n\t\tqueue: function (type, data) {\n\t\t\tvar setter = 2;\n\n\t\t\tif (typeof type !== \"string\") {\n\t\t\t\tdata = type;\n\t\t\t\ttype = \"fx\";\n\t\t\t\tsetter--;\n\t\t\t}\n\n\t\t\tif (arguments.length < setter) {\n\t\t\t\treturn jQuery.queue(this[0], type);\n\t\t\t}\n\n\t\t\treturn data === undefined ?\n\t\t\t\tthis :\n\t\t\t\tthis.each(function () {\n\t\t\t\t\tvar queue = jQuery.queue(this, type, data);\n\n\t\t\t\t\t// Ensure a hooks for this queue\n\t\t\t\t\tjQuery._queueHooks(this, type);\n\n\t\t\t\t\tif (type === \"fx\" && queue[0] !== \"inprogress\") {\n\t\t\t\t\t\tjQuery.dequeue(this, type);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t},\n\t\tdequeue: function (type) {\n\t\t\treturn this.each(function () {\n\t\t\t\tjQuery.dequeue(this, type);\n\t\t\t});\n\t\t},\n\t\tclearQueue: function (type) {\n\t\t\treturn this.queue(type || \"fx\", []);\n\t\t},\n\n\t\t// Get a promise resolved when queues of a certain type\n\t\t// are emptied (fx is the type by default)\n\t\tpromise: function (type, obj) {\n\t\t\tvar tmp,\n\t\t\t\tcount = 1,\n\t\t\t\tdefer = jQuery.Deferred(),\n\t\t\t\telements = this,\n\t\t\t\ti = this.length,\n\t\t\t\tresolve = function () {\n\t\t\t\t\tif (!(--count)) {\n\t\t\t\t\t\tdefer.resolveWith(elements, [elements]);\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\tif (typeof type !== \"string\") {\n\t\t\t\tobj = type;\n\t\t\t\ttype = undefined;\n\t\t\t}\n\t\t\ttype = type || \"fx\";\n\n\t\t\twhile (i--) {\n\t\t\t\ttmp = dataPriv.get(elements[i], type + \"queueHooks\");\n\t\t\t\tif (tmp && tmp.empty) {\n\t\t\t\t\tcount++;\n\t\t\t\t\ttmp.empty.add(resolve);\n\t\t\t\t}\n\t\t\t}\n\t\t\tresolve();\n\t\t\treturn defer.promise(obj);\n\t\t}\n\t});\n\tvar pnum = (/[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/).source;\n\n\tvar rcssNum = new RegExp(\"^(?:([+-])=|)(\" + pnum + \")([a-z%]*)$\", \"i\");\n\n\n\tvar cssExpand = [\"Top\", \"Right\", \"Bottom\", \"Left\"];\n\n\tvar documentElement = document.documentElement;\n\n\n\n\tvar isAttached = function (elem) {\n\t\treturn jQuery.contains(elem.ownerDocument, elem);\n\t},\n\t\tcomposed = { composed: true };\n\n\t// Support: IE 9 - 11+, Edge 12 - 18+, iOS 10.0 - 10.2 only\n\t// Check attachment across shadow DOM boundaries when possible (gh-3504)\n\t// Support: iOS 10.0-10.2 only\n\t// Early iOS 10 versions support `attachShadow` but not `getRootNode`,\n\t// leading to errors. We need to check for `getRootNode`.\n\tif (documentElement.getRootNode) {\n\t\tisAttached = function (elem) {\n\t\t\treturn jQuery.contains(elem.ownerDocument, elem) ||\n\t\t\t\telem.getRootNode(composed) === elem.ownerDocument;\n\t\t};\n\t}\n\tvar isHiddenWithinTree = function (elem, el) {\n\n\t\t// isHiddenWithinTree might be called from jQuery#filter function;\n\t\t// in that case, element will be second argument\n\t\telem = el || elem;\n\n\t\t// Inline style trumps all\n\t\treturn elem.style.display === \"none\" ||\n\t\t\telem.style.display === \"\" &&\n\n\t\t\t// Otherwise, check computed style\n\t\t\t// Support: Firefox <=43 - 45\n\t\t\t// Disconnected elements can have computed display: none, so first confirm that elem is\n\t\t\t// in the document.\n\t\t\tisAttached(elem) &&\n\n\t\t\tjQuery.css(elem, \"display\") === \"none\";\n\t};\n\n\n\n\tfunction adjustCSS(elem, prop, valueParts, tween) {\n\t\tvar adjusted, scale,\n\t\t\tmaxIterations = 20,\n\t\t\tcurrentValue = tween ?\n\t\t\t\tfunction () {\n\t\t\t\t\treturn tween.cur();\n\t\t\t\t} :\n\t\t\t\tfunction () {\n\t\t\t\t\treturn jQuery.css(elem, prop, \"\");\n\t\t\t\t},\n\t\t\tinitial = currentValue(),\n\t\t\tunit = valueParts && valueParts[3] || (jQuery.cssNumber[prop] ? \"\" : \"px\"),\n\n\t\t\t// Starting value computation is required for potential unit mismatches\n\t\t\tinitialInUnit = elem.nodeType &&\n\t\t\t\t(jQuery.cssNumber[prop] || unit !== \"px\" && +initial) &&\n\t\t\t\trcssNum.exec(jQuery.css(elem, prop));\n\n\t\tif (initialInUnit && initialInUnit[3] !== unit) {\n\n\t\t\t// Support: Firefox <=54\n\t\t\t// Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144)\n\t\t\tinitial = initial / 2;\n\n\t\t\t// Trust units reported by jQuery.css\n\t\t\tunit = unit || initialInUnit[3];\n\n\t\t\t// Iteratively approximate from a nonzero starting point\n\t\t\tinitialInUnit = +initial || 1;\n\n\t\t\twhile (maxIterations--) {\n\n\t\t\t\t// Evaluate and update our best guess (doubling guesses that zero out).\n\t\t\t\t// Finish if the scale equals or crosses 1 (making the old*new product non-positive).\n\t\t\t\tjQuery.style(elem, prop, initialInUnit + unit);\n\t\t\t\tif ((1 - scale) * (1 - (scale = currentValue() / initial || 0.5)) <= 0) {\n\t\t\t\t\tmaxIterations = 0;\n\t\t\t\t}\n\t\t\t\tinitialInUnit = initialInUnit / scale;\n\n\t\t\t}\n\n\t\t\tinitialInUnit = initialInUnit * 2;\n\t\t\tjQuery.style(elem, prop, initialInUnit + unit);\n\n\t\t\t// Make sure we update the tween properties later on\n\t\t\tvalueParts = valueParts || [];\n\t\t}\n\n\t\tif (valueParts) {\n\t\t\tinitialInUnit = +initialInUnit || +initial || 0;\n\n\t\t\t// Apply relative offset (+=/-=) if specified\n\t\t\tadjusted = valueParts[1] ?\n\t\t\t\tinitialInUnit + (valueParts[1] + 1) * valueParts[2] :\n\t\t\t\t+valueParts[2];\n\t\t\tif (tween) {\n\t\t\t\ttween.unit = unit;\n\t\t\t\ttween.start = initialInUnit;\n\t\t\t\ttween.end = adjusted;\n\t\t\t}\n\t\t}\n\t\treturn adjusted;\n\t}\n\n\n\tvar defaultDisplayMap = {};\n\n\tfunction getDefaultDisplay(elem) {\n\t\tvar temp,\n\t\t\tdoc = elem.ownerDocument,\n\t\t\tnodeName = elem.nodeName,\n\t\t\tdisplay = defaultDisplayMap[nodeName];\n\n\t\tif (display) {\n\t\t\treturn display;\n\t\t}\n\n\t\ttemp = doc.body.appendChild(doc.createElement(nodeName));\n\t\tdisplay = jQuery.css(temp, \"display\");\n\n\t\ttemp.parentNode.removeChild(temp);\n\n\t\tif (display === \"none\") {\n\t\t\tdisplay = \"block\";\n\t\t}\n\t\tdefaultDisplayMap[nodeName] = display;\n\n\t\treturn display;\n\t}\n\n\tfunction showHide(elements, show) {\n\t\tvar display, elem,\n\t\t\tvalues = [],\n\t\t\tindex = 0,\n\t\t\tlength = elements.length;\n\n\t\t// Determine new display value for elements that need to change\n\t\tfor (; index < length; index++) {\n\t\t\telem = elements[index];\n\t\t\tif (!elem.style) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tdisplay = elem.style.display;\n\t\t\tif (show) {\n\n\t\t\t\t// Since we force visibility upon cascade-hidden elements, an immediate (and slow)\n\t\t\t\t// check is required in this first loop unless we have a nonempty display value (either\n\t\t\t\t// inline or about-to-be-restored)\n\t\t\t\tif (display === \"none\") {\n\t\t\t\t\tvalues[index] = dataPriv.get(elem, \"display\") || null;\n\t\t\t\t\tif (!values[index]) {\n\t\t\t\t\t\telem.style.display = \"\";\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (elem.style.display === \"\" && isHiddenWithinTree(elem)) {\n\t\t\t\t\tvalues[index] = getDefaultDisplay(elem);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (display !== \"none\") {\n\t\t\t\t\tvalues[index] = \"none\";\n\n\t\t\t\t\t// Remember what we're overwriting\n\t\t\t\t\tdataPriv.set(elem, \"display\", display);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Set the display of the elements in a second loop to avoid constant reflow\n\t\tfor (index = 0; index < length; index++) {\n\t\t\tif (values[index] != null) {\n\t\t\t\telements[index].style.display = values[index];\n\t\t\t}\n\t\t}\n\n\t\treturn elements;\n\t}\n\n\tjQuery.fn.extend({\n\t\tshow: function () {\n\t\t\treturn showHide(this, true);\n\t\t},\n\t\thide: function () {\n\t\t\treturn showHide(this);\n\t\t},\n\t\ttoggle: function (state) {\n\t\t\tif (typeof state === \"boolean\") {\n\t\t\t\treturn state ? this.show() : this.hide();\n\t\t\t}\n\n\t\t\treturn this.each(function () {\n\t\t\t\tif (isHiddenWithinTree(this)) {\n\t\t\t\t\tjQuery(this).show();\n\t\t\t\t} else {\n\t\t\t\t\tjQuery(this).hide();\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t});\n\tvar rcheckableType = (/^(?:checkbox|radio)$/i);\n\n\tvar rtagName = (/<([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]*)/i);\n\n\tvar rscriptType = (/^$|^module$|\\/(?:java|ecma)script/i);\n\n\n\n\t(function () {\n\t\tvar fragment = document.createDocumentFragment(),\n\t\t\tdiv = fragment.appendChild(document.createElement(\"div\")),\n\t\t\tinput = document.createElement(\"input\");\n\n\t\t// Support: Android 4.0 - 4.3 only\n\t\t// Check state lost if the name is set (trac-11217)\n\t\t// Support: Windows Web Apps (WWA)\n\t\t// `name` and `type` must use .setAttribute for WWA (trac-14901)\n\t\tinput.setAttribute(\"type\", \"radio\");\n\t\tinput.setAttribute(\"checked\", \"checked\");\n\t\tinput.setAttribute(\"name\", \"t\");\n\n\t\tdiv.appendChild(input);\n\n\t\t// Support: Android <=4.1 only\n\t\t// Older WebKit doesn't clone checked state correctly in fragments\n\t\tsupport.checkClone = div.cloneNode(true).cloneNode(true).lastChild.checked;\n\n\t\t// Support: IE <=11 only\n\t\t// Make sure textarea (and checkbox) defaultValue is properly cloned\n\t\tdiv.innerHTML = \"<textarea>x</textarea>\";\n\t\tsupport.noCloneChecked = !!div.cloneNode(true).lastChild.defaultValue;\n\n\t\t// Support: IE <=9 only\n\t\t// IE <=9 replaces <option> tags with their contents when inserted outside of\n\t\t// the select element.\n\t\tdiv.innerHTML = \"<option></option>\";\n\t\tsupport.option = !!div.lastChild;\n\t})();\n\n\n\t// We have to close these tags to support XHTML (trac-13200)\n\tvar wrapMap = {\n\n\t\t// XHTML parsers do not magically insert elements in the\n\t\t// same way that tag soup parsers do. So we cannot shorten\n\t\t// this by omitting <tbody> or other required elements.\n\t\tthead: [1, \"<table>\", \"</table>\"],\n\t\tcol: [2, \"<table><colgroup>\", \"</colgroup></table>\"],\n\t\ttr: [2, \"<table><tbody>\", \"</tbody></table>\"],\n\t\ttd: [3, \"<table><tbody><tr>\", \"</tr></tbody></table>\"],\n\n\t\t_default: [0, \"\", \"\"]\n\t};\n\n\twrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;\n\twrapMap.th = wrapMap.td;\n\n\t// Support: IE <=9 only\n\tif (!support.option) {\n\t\twrapMap.optgroup = wrapMap.option = [1, \"<select multiple='multiple'>\", \"</select>\"];\n\t}\n\n\n\tfunction getAll(context, tag) {\n\n\t\t// Support: IE <=9 - 11 only\n\t\t// Use typeof to avoid zero-argument method invocation on host objects (trac-15151)\n\t\tvar ret;\n\n\t\tif (typeof context.getElementsByTagName !== \"undefined\") {\n\t\t\tret = context.getElementsByTagName(tag || \"*\");\n\n\t\t} else if (typeof context.querySelectorAll !== \"undefined\") {\n\t\t\tret = context.querySelectorAll(tag || \"*\");\n\n\t\t} else {\n\t\t\tret = [];\n\t\t}\n\n\t\tif (tag === undefined || tag && nodeName(context, tag)) {\n\t\t\treturn jQuery.merge([context], ret);\n\t\t}\n\n\t\treturn ret;\n\t}\n\n\n\t// Mark scripts as having already been evaluated\n\tfunction setGlobalEval(elems, refElements) {\n\t\tvar i = 0,\n\t\t\tl = elems.length;\n\n\t\tfor (; i < l; i++) {\n\t\t\tdataPriv.set(\n\t\t\t\telems[i],\n\t\t\t\t\"globalEval\",\n\t\t\t\t!refElements || dataPriv.get(refElements[i], \"globalEval\")\n\t\t\t);\n\t\t}\n\t}\n\n\n\tvar rhtml = /<|&#?\\w+;/;\n\n\tfunction buildFragment(elems, context, scripts, selection, ignored) {\n\t\tvar elem, tmp, tag, wrap, attached, j,\n\t\t\tfragment = context.createDocumentFragment(),\n\t\t\tnodes = [],\n\t\t\ti = 0,\n\t\t\tl = elems.length;\n\n\t\tfor (; i < l; i++) {\n\t\t\telem = elems[i];\n\n\t\t\tif (elem || elem === 0) {\n\n\t\t\t\t// Add nodes directly\n\t\t\t\tif (toType(elem) === \"object\") {\n\n\t\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\t\tjQuery.merge(nodes, elem.nodeType ? [elem] : elem);\n\n\t\t\t\t\t// Convert non-html into a text node\n\t\t\t\t} else if (!rhtml.test(elem)) {\n\t\t\t\t\tnodes.push(context.createTextNode(elem));\n\n\t\t\t\t\t// Convert html into DOM nodes\n\t\t\t\t} else {\n\t\t\t\t\ttmp = tmp || fragment.appendChild(context.createElement(\"div\"));\n\n\t\t\t\t\t// Deserialize a standard representation\n\t\t\t\t\ttag = (rtagName.exec(elem) || [\"\", \"\"])[1].toLowerCase();\n\t\t\t\t\twrap = wrapMap[tag] || wrapMap._default;\n\t\t\t\t\ttmp.innerHTML = wrap[1] + jQuery.htmlPrefilter(elem) + wrap[2];\n\n\t\t\t\t\t// Descend through wrappers to the right content\n\t\t\t\t\tj = wrap[0];\n\t\t\t\t\twhile (j--) {\n\t\t\t\t\t\ttmp = tmp.lastChild;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\t\tjQuery.merge(nodes, tmp.childNodes);\n\n\t\t\t\t\t// Remember the top-level container\n\t\t\t\t\ttmp = fragment.firstChild;\n\n\t\t\t\t\t// Ensure the created nodes are orphaned (trac-12392)\n\t\t\t\t\ttmp.textContent = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Remove wrapper from fragment\n\t\tfragment.textContent = \"\";\n\n\t\ti = 0;\n\t\twhile ((elem = nodes[i++])) {\n\n\t\t\t// Skip elements already in the context collection (trac-4087)\n\t\t\tif (selection && jQuery.inArray(elem, selection) > -1) {\n\t\t\t\tif (ignored) {\n\t\t\t\t\tignored.push(elem);\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tattached = isAttached(elem);\n\n\t\t\t// Append to fragment\n\t\t\ttmp = getAll(fragment.appendChild(elem), \"script\");\n\n\t\t\t// Preserve script evaluation history\n\t\t\tif (attached) {\n\t\t\t\tsetGlobalEval(tmp);\n\t\t\t}\n\n\t\t\t// Capture executables\n\t\t\tif (scripts) {\n\t\t\t\tj = 0;\n\t\t\t\twhile ((elem = tmp[j++])) {\n\t\t\t\t\tif (rscriptType.test(elem.type || \"\")) {\n\t\t\t\t\t\tscripts.push(elem);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn fragment;\n\t}\n\n\n\tvar rtypenamespace = /^([^.]*)(?:\\.(.+)|)/;\n\n\tfunction returnTrue() {\n\t\treturn true;\n\t}\n\n\tfunction returnFalse() {\n\t\treturn false;\n\t}\n\n\tfunction on(elem, types, selector, data, fn, one) {\n\t\tvar origFn, type;\n\n\t\t// Types can be a map of types/handlers\n\t\tif (typeof types === \"object\") {\n\n\t\t\t// ( types-Object, selector, data )\n\t\t\tif (typeof selector !== \"string\") {\n\n\t\t\t\t// ( types-Object, data )\n\t\t\t\tdata = data || selector;\n\t\t\t\tselector = undefined;\n\t\t\t}\n\t\t\tfor (type in types) {\n\t\t\t\ton(elem, type, selector, data, types[type], one);\n\t\t\t}\n\t\t\treturn elem;\n\t\t}\n\n\t\tif (data == null && fn == null) {\n\n\t\t\t// ( types, fn )\n\t\t\tfn = selector;\n\t\t\tdata = selector = undefined;\n\t\t} else if (fn == null) {\n\t\t\tif (typeof selector === \"string\") {\n\n\t\t\t\t// ( types, selector, fn )\n\t\t\t\tfn = data;\n\t\t\t\tdata = undefined;\n\t\t\t} else {\n\n\t\t\t\t// ( types, data, fn )\n\t\t\t\tfn = data;\n\t\t\t\tdata = selector;\n\t\t\t\tselector = undefined;\n\t\t\t}\n\t\t}\n\t\tif (fn === false) {\n\t\t\tfn = returnFalse;\n\t\t} else if (!fn) {\n\t\t\treturn elem;\n\t\t}\n\n\t\tif (one === 1) {\n\t\t\torigFn = fn;\n\t\t\tfn = function (event) {\n\n\t\t\t\t// Can use an empty set, since event contains the info\n\t\t\t\tjQuery().off(event);\n\t\t\t\treturn origFn.apply(this, arguments);\n\t\t\t};\n\n\t\t\t// Use same guid so caller can remove using origFn\n\t\t\tfn.guid = origFn.guid || (origFn.guid = jQuery.guid++);\n\t\t}\n\t\treturn elem.each(function () {\n\t\t\tjQuery.event.add(this, types, fn, data, selector);\n\t\t});\n\t}\n\n\t/*\n\t * Helper functions for managing events -- not part of the public interface.\n\t * Props to Dean Edwards' addEvent library for many of the ideas.\n\t */\n\tjQuery.event = {\n\n\t\tglobal: {},\n\n\t\tadd: function (elem, types, handler, data, selector) {\n\n\t\t\tvar handleObjIn, eventHandle, tmp,\n\t\t\t\tevents, t, handleObj,\n\t\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\t\telemData = dataPriv.get(elem);\n\n\t\t\t// Only attach events to objects that accept data\n\t\t\tif (!acceptData(elem)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Caller can pass in an object of custom data in lieu of the handler\n\t\t\tif (handler.handler) {\n\t\t\t\thandleObjIn = handler;\n\t\t\t\thandler = handleObjIn.handler;\n\t\t\t\tselector = handleObjIn.selector;\n\t\t\t}\n\n\t\t\t// Ensure that invalid selectors throw exceptions at attach time\n\t\t\t// Evaluate against documentElement in case elem is a non-element node (e.g., document)\n\t\t\tif (selector) {\n\t\t\t\tjQuery.find.matchesSelector(documentElement, selector);\n\t\t\t}\n\n\t\t\t// Make sure that the handler has a unique ID, used to find/remove it later\n\t\t\tif (!handler.guid) {\n\t\t\t\thandler.guid = jQuery.guid++;\n\t\t\t}\n\n\t\t\t// Init the element's event structure and main handler, if this is the first\n\t\t\tif (!(events = elemData.events)) {\n\t\t\t\tevents = elemData.events = Object.create(null);\n\t\t\t}\n\t\t\tif (!(eventHandle = elemData.handle)) {\n\t\t\t\teventHandle = elemData.handle = function (e) {\n\n\t\t\t\t\t// Discard the second event of a jQuery.event.trigger() and\n\t\t\t\t\t// when an event is called after a page has unloaded\n\t\t\t\t\treturn typeof jQuery !== \"undefined\" && jQuery.event.triggered !== e.type ?\n\t\t\t\t\t\tjQuery.event.dispatch.apply(elem, arguments) : undefined;\n\t\t\t\t};\n\t\t\t}\n\n\t\t\t// Handle multiple events separated by a space\n\t\t\ttypes = (types || \"\").match(rnothtmlwhite) || [\"\"];\n\t\t\tt = types.length;\n\t\t\twhile (t--) {\n\t\t\t\ttmp = rtypenamespace.exec(types[t]) || [];\n\t\t\t\ttype = origType = tmp[1];\n\t\t\t\tnamespaces = (tmp[2] || \"\").split(\".\").sort();\n\n\t\t\t\t// There *must* be a type, no attaching namespace-only handlers\n\t\t\t\tif (!type) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// If event changes its type, use the special event handlers for the changed type\n\t\t\t\tspecial = jQuery.event.special[type] || {};\n\n\t\t\t\t// If selector defined, determine special event api type, otherwise given type\n\t\t\t\ttype = (selector ? special.delegateType : special.bindType) || type;\n\n\t\t\t\t// Update special based on newly reset type\n\t\t\t\tspecial = jQuery.event.special[type] || {};\n\n\t\t\t\t// handleObj is passed to all event handlers\n\t\t\t\thandleObj = jQuery.extend({\n\t\t\t\t\ttype: type,\n\t\t\t\t\torigType: origType,\n\t\t\t\t\tdata: data,\n\t\t\t\t\thandler: handler,\n\t\t\t\t\tguid: handler.guid,\n\t\t\t\t\tselector: selector,\n\t\t\t\t\tneedsContext: selector && jQuery.expr.match.needsContext.test(selector),\n\t\t\t\t\tnamespace: namespaces.join(\".\")\n\t\t\t\t}, handleObjIn);\n\n\t\t\t\t// Init the event handler queue if we're the first\n\t\t\t\tif (!(handlers = events[type])) {\n\t\t\t\t\thandlers = events[type] = [];\n\t\t\t\t\thandlers.delegateCount = 0;\n\n\t\t\t\t\t// Only use addEventListener if the special events handler returns false\n\t\t\t\t\tif (!special.setup ||\n\t\t\t\t\t\tspecial.setup.call(elem, data, namespaces, eventHandle) === false) {\n\n\t\t\t\t\t\tif (elem.addEventListener) {\n\t\t\t\t\t\t\telem.addEventListener(type, eventHandle);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (special.add) {\n\t\t\t\t\tspecial.add.call(elem, handleObj);\n\n\t\t\t\t\tif (!handleObj.handler.guid) {\n\t\t\t\t\t\thandleObj.handler.guid = handler.guid;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Add to the element's handler list, delegates in front\n\t\t\t\tif (selector) {\n\t\t\t\t\thandlers.splice(handlers.delegateCount++, 0, handleObj);\n\t\t\t\t} else {\n\t\t\t\t\thandlers.push(handleObj);\n\t\t\t\t}\n\n\t\t\t\t// Keep track of which events have ever been used, for event optimization\n\t\t\t\tjQuery.event.global[type] = true;\n\t\t\t}\n\n\t\t},\n\n\t\t// Detach an event or set of events from an element\n\t\tremove: function (elem, types, handler, selector, mappedTypes) {\n\n\t\t\tvar j, origCount, tmp,\n\t\t\t\tevents, t, handleObj,\n\t\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\t\telemData = dataPriv.hasData(elem) && dataPriv.get(elem);\n\n\t\t\tif (!elemData || !(events = elemData.events)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Once for each type.namespace in types; type may be omitted\n\t\t\ttypes = (types || \"\").match(rnothtmlwhite) || [\"\"];\n\t\t\tt = types.length;\n\t\t\twhile (t--) {\n\t\t\t\ttmp = rtypenamespace.exec(types[t]) || [];\n\t\t\t\ttype = origType = tmp[1];\n\t\t\t\tnamespaces = (tmp[2] || \"\").split(\".\").sort();\n\n\t\t\t\t// Unbind all events (on this namespace, if provided) for the element\n\t\t\t\tif (!type) {\n\t\t\t\t\tfor (type in events) {\n\t\t\t\t\t\tjQuery.event.remove(elem, type + types[t], handler, selector, true);\n\t\t\t\t\t}\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tspecial = jQuery.event.special[type] || {};\n\t\t\t\ttype = (selector ? special.delegateType : special.bindType) || type;\n\t\t\t\thandlers = events[type] || [];\n\t\t\t\ttmp = tmp[2] &&\n\t\t\t\t\tnew RegExp(\"(^|\\\\.)\" + namespaces.join(\"\\\\.(?:.*\\\\.|)\") + \"(\\\\.|$)\");\n\n\t\t\t\t// Remove matching events\n\t\t\t\torigCount = j = handlers.length;\n\t\t\t\twhile (j--) {\n\t\t\t\t\thandleObj = handlers[j];\n\n\t\t\t\t\tif ((mappedTypes || origType === handleObj.origType) &&\n\t\t\t\t\t\t(!handler || handler.guid === handleObj.guid) &&\n\t\t\t\t\t\t(!tmp || tmp.test(handleObj.namespace)) &&\n\t\t\t\t\t\t(!selector || selector === handleObj.selector ||\n\t\t\t\t\t\t\tselector === \"**\" && handleObj.selector)) {\n\t\t\t\t\t\thandlers.splice(j, 1);\n\n\t\t\t\t\t\tif (handleObj.selector) {\n\t\t\t\t\t\t\thandlers.delegateCount--;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (special.remove) {\n\t\t\t\t\t\t\tspecial.remove.call(elem, handleObj);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Remove generic event handler if we removed something and no more handlers exist\n\t\t\t\t// (avoids potential for endless recursion during removal of special event handlers)\n\t\t\t\tif (origCount && !handlers.length) {\n\t\t\t\t\tif (!special.teardown ||\n\t\t\t\t\t\tspecial.teardown.call(elem, namespaces, elemData.handle) === false) {\n\n\t\t\t\t\t\tjQuery.removeEvent(elem, type, elemData.handle);\n\t\t\t\t\t}\n\n\t\t\t\t\tdelete events[type];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove data and the expando if it's no longer used\n\t\t\tif (jQuery.isEmptyObject(events)) {\n\t\t\t\tdataPriv.remove(elem, \"handle events\");\n\t\t\t}\n\t\t},\n\n\t\tdispatch: function (nativeEvent) {\n\n\t\t\tvar i, j, ret, matched, handleObj, handlerQueue,\n\t\t\t\targs = new Array(arguments.length),\n\n\t\t\t\t// Make a writable jQuery.Event from the native event object\n\t\t\t\tevent = jQuery.event.fix(nativeEvent),\n\n\t\t\t\thandlers = (\n\t\t\t\t\tdataPriv.get(this, \"events\") || Object.create(null)\n\t\t\t\t)[event.type] || [],\n\t\t\t\tspecial = jQuery.event.special[event.type] || {};\n\n\t\t\t// Use the fix-ed jQuery.Event rather than the (read-only) native event\n\t\t\targs[0] = event;\n\n\t\t\tfor (i = 1; i < arguments.length; i++) {\n\t\t\t\targs[i] = arguments[i];\n\t\t\t}\n\n\t\t\tevent.delegateTarget = this;\n\n\t\t\t// Call the preDispatch hook for the mapped type, and let it bail if desired\n\t\t\tif (special.preDispatch && special.preDispatch.call(this, event) === false) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Determine handlers\n\t\t\thandlerQueue = jQuery.event.handlers.call(this, event, handlers);\n\n\t\t\t// Run delegates first; they may want to stop propagation beneath us\n\t\t\ti = 0;\n\t\t\twhile ((matched = handlerQueue[i++]) && !event.isPropagationStopped()) {\n\t\t\t\tevent.currentTarget = matched.elem;\n\n\t\t\t\tj = 0;\n\t\t\t\twhile ((handleObj = matched.handlers[j++]) &&\n\t\t\t\t\t!event.isImmediatePropagationStopped()) {\n\n\t\t\t\t\t// If the event is namespaced, then each handler is only invoked if it is\n\t\t\t\t\t// specially universal or its namespaces are a superset of the event's.\n\t\t\t\t\tif (!event.rnamespace || handleObj.namespace === false ||\n\t\t\t\t\t\tevent.rnamespace.test(handleObj.namespace)) {\n\n\t\t\t\t\t\tevent.handleObj = handleObj;\n\t\t\t\t\t\tevent.data = handleObj.data;\n\n\t\t\t\t\t\tret = ((jQuery.event.special[handleObj.origType] || {}).handle ||\n\t\t\t\t\t\t\thandleObj.handler).apply(matched.elem, args);\n\n\t\t\t\t\t\tif (ret !== undefined) {\n\t\t\t\t\t\t\tif ((event.result = ret) === false) {\n\t\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Call the postDispatch hook for the mapped type\n\t\t\tif (special.postDispatch) {\n\t\t\t\tspecial.postDispatch.call(this, event);\n\t\t\t}\n\n\t\t\treturn event.result;\n\t\t},\n\n\t\thandlers: function (event, handlers) {\n\t\t\tvar i, handleObj, sel, matchedHandlers, matchedSelectors,\n\t\t\t\thandlerQueue = [],\n\t\t\t\tdelegateCount = handlers.delegateCount,\n\t\t\t\tcur = event.target;\n\n\t\t\t// Find delegate handlers\n\t\t\tif (delegateCount &&\n\n\t\t\t\t// Support: IE <=9\n\t\t\t\t// Black-hole SVG <use> instance trees (trac-13180)\n\t\t\t\tcur.nodeType &&\n\n\t\t\t\t// Support: Firefox <=42\n\t\t\t\t// Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861)\n\t\t\t\t// https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click\n\t\t\t\t// Support: IE 11 only\n\t\t\t\t// ...but not arrow key \"clicks\" of radio inputs, which can have `button` -1 (gh-2343)\n\t\t\t\t!(event.type === \"click\" && event.button >= 1)) {\n\n\t\t\t\tfor (; cur !== this; cur = cur.parentNode || this) {\n\n\t\t\t\t\t// Don't check non-elements (trac-13208)\n\t\t\t\t\t// Don't process clicks on disabled elements (trac-6911, trac-8165, trac-11382, trac-11764)\n\t\t\t\t\tif (cur.nodeType === 1 && !(event.type === \"click\" && cur.disabled === true)) {\n\t\t\t\t\t\tmatchedHandlers = [];\n\t\t\t\t\t\tmatchedSelectors = {};\n\t\t\t\t\t\tfor (i = 0; i < delegateCount; i++) {\n\t\t\t\t\t\t\thandleObj = handlers[i];\n\n\t\t\t\t\t\t\t// Don't conflict with Object.prototype properties (trac-13203)\n\t\t\t\t\t\t\tsel = handleObj.selector + \" \";\n\n\t\t\t\t\t\t\tif (matchedSelectors[sel] === undefined) {\n\t\t\t\t\t\t\t\tmatchedSelectors[sel] = handleObj.needsContext ?\n\t\t\t\t\t\t\t\t\tjQuery(sel, this).index(cur) > -1 :\n\t\t\t\t\t\t\t\t\tjQuery.find(sel, this, null, [cur]).length;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (matchedSelectors[sel]) {\n\t\t\t\t\t\t\t\tmatchedHandlers.push(handleObj);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (matchedHandlers.length) {\n\t\t\t\t\t\t\thandlerQueue.push({ elem: cur, handlers: matchedHandlers });\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Add the remaining (directly-bound) handlers\n\t\t\tcur = this;\n\t\t\tif (delegateCount < handlers.length) {\n\t\t\t\thandlerQueue.push({ elem: cur, handlers: handlers.slice(delegateCount) });\n\t\t\t}\n\n\t\t\treturn handlerQueue;\n\t\t},\n\n\t\taddProp: function (name, hook) {\n\t\t\tObject.defineProperty(jQuery.Event.prototype, name, {\n\t\t\t\tenumerable: true,\n\t\t\t\tconfigurable: true,\n\n\t\t\t\tget: isFunction(hook) ?\n\t\t\t\t\tfunction () {\n\t\t\t\t\t\tif (this.originalEvent) {\n\t\t\t\t\t\t\treturn hook(this.originalEvent);\n\t\t\t\t\t\t}\n\t\t\t\t\t} :\n\t\t\t\t\tfunction () {\n\t\t\t\t\t\tif (this.originalEvent) {\n\t\t\t\t\t\t\treturn this.originalEvent[name];\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\n\t\t\t\tset: function (value) {\n\t\t\t\t\tObject.defineProperty(this, name, {\n\t\t\t\t\t\tenumerable: true,\n\t\t\t\t\t\tconfigurable: true,\n\t\t\t\t\t\twritable: true,\n\t\t\t\t\t\tvalue: value\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\tfix: function (originalEvent) {\n\t\t\treturn originalEvent[jQuery.expando] ?\n\t\t\t\toriginalEvent :\n\t\t\t\tnew jQuery.Event(originalEvent);\n\t\t},\n\n\t\tspecial: {\n\t\t\tload: {\n\n\t\t\t\t// Prevent triggered image.load events from bubbling to window.load\n\t\t\t\tnoBubble: true\n\t\t\t},\n\t\t\tclick: {\n\n\t\t\t\t// Utilize native event to ensure correct state for checkable inputs\n\t\t\t\tsetup: function (data) {\n\n\t\t\t\t\t// For mutual compressibility with _default, replace `this` access with a local var.\n\t\t\t\t\t// `|| data` is dead code meant only to preserve the variable through minification.\n\t\t\t\t\tvar el = this || data;\n\n\t\t\t\t\t// Claim the first handler\n\t\t\t\t\tif (rcheckableType.test(el.type) &&\n\t\t\t\t\t\tel.click && nodeName(el, \"input\")) {\n\n\t\t\t\t\t\t// dataPriv.set( el, \"click\", ... )\n\t\t\t\t\t\tleverageNative(el, \"click\", true);\n\t\t\t\t\t}\n\n\t\t\t\t\t// Return false to allow normal processing in the caller\n\t\t\t\t\treturn false;\n\t\t\t\t},\n\t\t\t\ttrigger: function (data) {\n\n\t\t\t\t\t// For mutual compressibility with _default, replace `this` access with a local var.\n\t\t\t\t\t// `|| data` is dead code meant only to preserve the variable through minification.\n\t\t\t\t\tvar el = this || data;\n\n\t\t\t\t\t// Force setup before triggering a click\n\t\t\t\t\tif (rcheckableType.test(el.type) &&\n\t\t\t\t\t\tel.click && nodeName(el, \"input\")) {\n\n\t\t\t\t\t\tleverageNative(el, \"click\");\n\t\t\t\t\t}\n\n\t\t\t\t\t// Return non-false to allow normal event-path propagation\n\t\t\t\t\treturn true;\n\t\t\t\t},\n\n\t\t\t\t// For cross-browser consistency, suppress native .click() on links\n\t\t\t\t// Also prevent it if we're currently inside a leveraged native-event stack\n\t\t\t\t_default: function (event) {\n\t\t\t\t\tvar target = event.target;\n\t\t\t\t\treturn rcheckableType.test(target.type) &&\n\t\t\t\t\t\ttarget.click && nodeName(target, \"input\") &&\n\t\t\t\t\t\tdataPriv.get(target, \"click\") ||\n\t\t\t\t\t\tnodeName(target, \"a\");\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tbeforeunload: {\n\t\t\t\tpostDispatch: function (event) {\n\n\t\t\t\t\t// Support: Firefox 20+\n\t\t\t\t\t// Firefox doesn't alert if the returnValue field is not set.\n\t\t\t\t\tif (event.result !== undefined && event.originalEvent) {\n\t\t\t\t\t\tevent.originalEvent.returnValue = event.result;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t// Ensure the presence of an event listener that handles manually-triggered\n\t// synthetic events by interrupting progress until reinvoked in response to\n\t// *native* events that it fires directly, ensuring that state changes have\n\t// already occurred before other listeners are invoked.\n\tfunction leverageNative(el, type, isSetup) {\n\n\t\t// Missing `isSetup` indicates a trigger call, which must force setup through jQuery.event.add\n\t\tif (!isSetup) {\n\t\t\tif (dataPriv.get(el, type) === undefined) {\n\t\t\t\tjQuery.event.add(el, type, returnTrue);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\t// Register the controller as a special universal handler for all event namespaces\n\t\tdataPriv.set(el, type, false);\n\t\tjQuery.event.add(el, type, {\n\t\t\tnamespace: false,\n\t\t\thandler: function (event) {\n\t\t\t\tvar result,\n\t\t\t\t\tsaved = dataPriv.get(this, type);\n\n\t\t\t\tif ((event.isTrigger & 1) && this[type]) {\n\n\t\t\t\t\t// Interrupt processing of the outer synthetic .trigger()ed event\n\t\t\t\t\tif (!saved) {\n\n\t\t\t\t\t\t// Store arguments for use when handling the inner native event\n\t\t\t\t\t\t// There will always be at least one argument (an event object), so this array\n\t\t\t\t\t\t// will not be confused with a leftover capture object.\n\t\t\t\t\t\tsaved = slice.call(arguments);\n\t\t\t\t\t\tdataPriv.set(this, type, saved);\n\n\t\t\t\t\t\t// Trigger the native event and capture its result\n\t\t\t\t\t\tthis[type]();\n\t\t\t\t\t\tresult = dataPriv.get(this, type);\n\t\t\t\t\t\tdataPriv.set(this, type, false);\n\n\t\t\t\t\t\tif (saved !== result) {\n\n\t\t\t\t\t\t\t// Cancel the outer synthetic event\n\t\t\t\t\t\t\tevent.stopImmediatePropagation();\n\t\t\t\t\t\t\tevent.preventDefault();\n\n\t\t\t\t\t\t\treturn result;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// If this is an inner synthetic event for an event with a bubbling surrogate\n\t\t\t\t\t\t// (focus or blur), assume that the surrogate already propagated from triggering\n\t\t\t\t\t\t// the native event and prevent that from happening again here.\n\t\t\t\t\t\t// This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the\n\t\t\t\t\t\t// bubbling surrogate propagates *after* the non-bubbling base), but that seems\n\t\t\t\t\t\t// less bad than duplication.\n\t\t\t\t\t} else if ((jQuery.event.special[type] || {}).delegateType) {\n\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t}\n\n\t\t\t\t\t// If this is a native event triggered above, everything is now in order\n\t\t\t\t\t// Fire an inner synthetic event with the original arguments\n\t\t\t\t} else if (saved) {\n\n\t\t\t\t\t// ...and capture the result\n\t\t\t\t\tdataPriv.set(this, type, jQuery.event.trigger(\n\t\t\t\t\t\tsaved[0],\n\t\t\t\t\t\tsaved.slice(1),\n\t\t\t\t\t\tthis\n\t\t\t\t\t));\n\n\t\t\t\t\t// Abort handling of the native event by all jQuery handlers while allowing\n\t\t\t\t\t// native handlers on the same element to run. On target, this is achieved\n\t\t\t\t\t// by stopping immediate propagation just on the jQuery event. However,\n\t\t\t\t\t// the native event is re-wrapped by a jQuery one on each level of the\n\t\t\t\t\t// propagation so the only way to stop it for jQuery is to stop it for\n\t\t\t\t\t// everyone via native `stopPropagation()`. This is not a problem for\n\t\t\t\t\t// focus/blur which don't bubble, but it does also stop click on checkboxes\n\t\t\t\t\t// and radios. We accept this limitation.\n\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\tevent.isImmediatePropagationStopped = returnTrue;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\tjQuery.removeEvent = function (elem, type, handle) {\n\n\t\t// This \"if\" is needed for plain objects\n\t\tif (elem.removeEventListener) {\n\t\t\telem.removeEventListener(type, handle);\n\t\t}\n\t};\n\n\tjQuery.Event = function (src, props) {\n\n\t\t// Allow instantiation without the 'new' keyword\n\t\tif (!(this instanceof jQuery.Event)) {\n\t\t\treturn new jQuery.Event(src, props);\n\t\t}\n\n\t\t// Event object\n\t\tif (src && src.type) {\n\t\t\tthis.originalEvent = src;\n\t\t\tthis.type = src.type;\n\n\t\t\t// Events bubbling up the document may have been marked as prevented\n\t\t\t// by a handler lower down the tree; reflect the correct value.\n\t\t\tthis.isDefaultPrevented = src.defaultPrevented ||\n\t\t\t\tsrc.defaultPrevented === undefined &&\n\n\t\t\t\t// Support: Android <=2.3 only\n\t\t\t\tsrc.returnValue === false ?\n\t\t\t\treturnTrue :\n\t\t\t\treturnFalse;\n\n\t\t\t// Create target properties\n\t\t\t// Support: Safari <=6 - 7 only\n\t\t\t// Target should not be a text node (trac-504, trac-13143)\n\t\t\tthis.target = (src.target && src.target.nodeType === 3) ?\n\t\t\t\tsrc.target.parentNode :\n\t\t\t\tsrc.target;\n\n\t\t\tthis.currentTarget = src.currentTarget;\n\t\t\tthis.relatedTarget = src.relatedTarget;\n\n\t\t\t// Event type\n\t\t} else {\n\t\t\tthis.type = src;\n\t\t}\n\n\t\t// Put explicitly provided properties onto the event object\n\t\tif (props) {\n\t\t\tjQuery.extend(this, props);\n\t\t}\n\n\t\t// Create a timestamp if incoming event doesn't have one\n\t\tthis.timeStamp = src && src.timeStamp || Date.now();\n\n\t\t// Mark it as fixed\n\t\tthis[jQuery.expando] = true;\n\t};\n\n\t// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding\n\t// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html\n\tjQuery.Event.prototype = {\n\t\tconstructor: jQuery.Event,\n\t\tisDefaultPrevented: returnFalse,\n\t\tisPropagationStopped: returnFalse,\n\t\tisImmediatePropagationStopped: returnFalse,\n\t\tisSimulated: false,\n\n\t\tpreventDefault: function () {\n\t\t\tvar e = this.originalEvent;\n\n\t\t\tthis.isDefaultPrevented = returnTrue;\n\n\t\t\tif (e && !this.isSimulated) {\n\t\t\t\te.preventDefault();\n\t\t\t}\n\t\t},\n\t\tstopPropagation: function () {\n\t\t\tvar e = this.originalEvent;\n\n\t\t\tthis.isPropagationStopped = returnTrue;\n\n\t\t\tif (e && !this.isSimulated) {\n\t\t\t\te.stopPropagation();\n\t\t\t}\n\t\t},\n\t\tstopImmediatePropagation: function () {\n\t\t\tvar e = this.originalEvent;\n\n\t\t\tthis.isImmediatePropagationStopped = returnTrue;\n\n\t\t\tif (e && !this.isSimulated) {\n\t\t\t\te.stopImmediatePropagation();\n\t\t\t}\n\n\t\t\tthis.stopPropagation();\n\t\t}\n\t};\n\n\t// Includes all common event props including KeyEvent and MouseEvent specific props\n\tjQuery.each({\n\t\taltKey: true,\n\t\tbubbles: true,\n\t\tcancelable: true,\n\t\tchangedTouches: true,\n\t\tctrlKey: true,\n\t\tdetail: true,\n\t\teventPhase: true,\n\t\tmetaKey: true,\n\t\tpageX: true,\n\t\tpageY: true,\n\t\tshiftKey: true,\n\t\tview: true,\n\t\t\"char\": true,\n\t\tcode: true,\n\t\tcharCode: true,\n\t\tkey: true,\n\t\tkeyCode: true,\n\t\tbutton: true,\n\t\tbuttons: true,\n\t\tclientX: true,\n\t\tclientY: true,\n\t\toffsetX: true,\n\t\toffsetY: true,\n\t\tpointerId: true,\n\t\tpointerType: true,\n\t\tscreenX: true,\n\t\tscreenY: true,\n\t\ttargetTouches: true,\n\t\ttoElement: true,\n\t\ttouches: true,\n\t\twhich: true\n\t}, jQuery.event.addProp);\n\n\tjQuery.each({ focus: \"focusin\", blur: \"focusout\" }, function (type, delegateType) {\n\n\t\tfunction focusMappedHandler(nativeEvent) {\n\t\t\tif (document.documentMode) {\n\n\t\t\t\t// Support: IE 11+\n\t\t\t\t// Attach a single focusin/focusout handler on the document while someone wants\n\t\t\t\t// focus/blur. This is because the former are synchronous in IE while the latter\n\t\t\t\t// are async. In other browsers, all those handlers are invoked synchronously.\n\n\t\t\t\t// `handle` from private data would already wrap the event, but we need\n\t\t\t\t// to change the `type` here.\n\t\t\t\tvar handle = dataPriv.get(this, \"handle\"),\n\t\t\t\t\tevent = jQuery.event.fix(nativeEvent);\n\t\t\t\tevent.type = nativeEvent.type === \"focusin\" ? \"focus\" : \"blur\";\n\t\t\t\tevent.isSimulated = true;\n\n\t\t\t\t// First, handle focusin/focusout\n\t\t\t\thandle(nativeEvent);\n\n\t\t\t\t// ...then, handle focus/blur\n\t\t\t\t//\n\t\t\t\t// focus/blur don't bubble while focusin/focusout do; simulate the former by only\n\t\t\t\t// invoking the handler at the lower level.\n\t\t\t\tif (event.target === event.currentTarget) {\n\n\t\t\t\t\t// The setup part calls `leverageNative`, which, in turn, calls\n\t\t\t\t\t// `jQuery.event.add`, so event handle will already have been set\n\t\t\t\t\t// by this point.\n\t\t\t\t\thandle(event);\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\t// For non-IE browsers, attach a single capturing handler on the document\n\t\t\t\t// while someone wants focusin/focusout.\n\t\t\t\tjQuery.event.simulate(delegateType, nativeEvent.target,\n\t\t\t\t\tjQuery.event.fix(nativeEvent));\n\t\t\t}\n\t\t}\n\n\t\tjQuery.event.special[type] = {\n\n\t\t\t// Utilize native event if possible so blur/focus sequence is correct\n\t\t\tsetup: function () {\n\n\t\t\t\tvar attaches;\n\n\t\t\t\t// Claim the first handler\n\t\t\t\t// dataPriv.set( this, \"focus\", ... )\n\t\t\t\t// dataPriv.set( this, \"blur\", ... )\n\t\t\t\tleverageNative(this, type, true);\n\n\t\t\t\tif (document.documentMode) {\n\n\t\t\t\t\t// Support: IE 9 - 11+\n\t\t\t\t\t// We use the same native handler for focusin & focus (and focusout & blur)\n\t\t\t\t\t// so we need to coordinate setup & teardown parts between those events.\n\t\t\t\t\t// Use `delegateType` as the key as `type` is already used by `leverageNative`.\n\t\t\t\t\tattaches = dataPriv.get(this, delegateType);\n\t\t\t\t\tif (!attaches) {\n\t\t\t\t\t\tthis.addEventListener(delegateType, focusMappedHandler);\n\t\t\t\t\t}\n\t\t\t\t\tdataPriv.set(this, delegateType, (attaches || 0) + 1);\n\t\t\t\t} else {\n\n\t\t\t\t\t// Return false to allow normal processing in the caller\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\t\t\ttrigger: function () {\n\n\t\t\t\t// Force setup before trigger\n\t\t\t\tleverageNative(this, type);\n\n\t\t\t\t// Return non-false to allow normal event-path propagation\n\t\t\t\treturn true;\n\t\t\t},\n\n\t\t\tteardown: function () {\n\t\t\t\tvar attaches;\n\n\t\t\t\tif (document.documentMode) {\n\t\t\t\t\tattaches = dataPriv.get(this, delegateType) - 1;\n\t\t\t\t\tif (!attaches) {\n\t\t\t\t\t\tthis.removeEventListener(delegateType, focusMappedHandler);\n\t\t\t\t\t\tdataPriv.remove(this, delegateType);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdataPriv.set(this, delegateType, attaches);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\n\t\t\t\t\t// Return false to indicate standard teardown should be applied\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// Suppress native focus or blur if we're currently inside\n\t\t\t// a leveraged native-event stack\n\t\t\t_default: function (event) {\n\t\t\t\treturn dataPriv.get(event.target, type);\n\t\t\t},\n\n\t\t\tdelegateType: delegateType\n\t\t};\n\n\t\t// Support: Firefox <=44\n\t\t// Firefox doesn't have focus(in | out) events\n\t\t// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787\n\t\t//\n\t\t// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1\n\t\t// focus(in | out) events fire after focus & blur events,\n\t\t// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order\n\t\t// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857\n\t\t//\n\t\t// Support: IE 9 - 11+\n\t\t// To preserve relative focusin/focus & focusout/blur event order guaranteed on the 3.x branch,\n\t\t// attach a single handler for both events in IE.\n\t\tjQuery.event.special[delegateType] = {\n\t\t\tsetup: function () {\n\n\t\t\t\t// Handle: regular nodes (via `this.ownerDocument`), window\n\t\t\t\t// (via `this.document`) & document (via `this`).\n\t\t\t\tvar doc = this.ownerDocument || this.document || this,\n\t\t\t\t\tdataHolder = document.documentMode ? this : doc,\n\t\t\t\t\tattaches = dataPriv.get(dataHolder, delegateType);\n\n\t\t\t\t// Support: IE 9 - 11+\n\t\t\t\t// We use the same native handler for focusin & focus (and focusout & blur)\n\t\t\t\t// so we need to coordinate setup & teardown parts between those events.\n\t\t\t\t// Use `delegateType` as the key as `type` is already used by `leverageNative`.\n\t\t\t\tif (!attaches) {\n\t\t\t\t\tif (document.documentMode) {\n\t\t\t\t\t\tthis.addEventListener(delegateType, focusMappedHandler);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdoc.addEventListener(type, focusMappedHandler, true);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tdataPriv.set(dataHolder, delegateType, (attaches || 0) + 1);\n\t\t\t},\n\t\t\tteardown: function () {\n\t\t\t\tvar doc = this.ownerDocument || this.document || this,\n\t\t\t\t\tdataHolder = document.documentMode ? this : doc,\n\t\t\t\t\tattaches = dataPriv.get(dataHolder, delegateType) - 1;\n\n\t\t\t\tif (!attaches) {\n\t\t\t\t\tif (document.documentMode) {\n\t\t\t\t\t\tthis.removeEventListener(delegateType, focusMappedHandler);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdoc.removeEventListener(type, focusMappedHandler, true);\n\t\t\t\t\t}\n\t\t\t\t\tdataPriv.remove(dataHolder, delegateType);\n\t\t\t\t} else {\n\t\t\t\t\tdataPriv.set(dataHolder, delegateType, attaches);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t});\n\n\t// Create mouseenter/leave events using mouseover/out and event-time checks\n\t// so that event delegation works in jQuery.\n\t// Do the same for pointerenter/pointerleave and pointerover/pointerout\n\t//\n\t// Support: Safari 7 only\n\t// Safari sends mouseenter too often; see:\n\t// https://bugs.chromium.org/p/chromium/issues/detail?id=470258\n\t// for the description of the bug (it existed in older Chrome versions as well).\n\tjQuery.each({\n\t\tmouseenter: \"mouseover\",\n\t\tmouseleave: \"mouseout\",\n\t\tpointerenter: \"pointerover\",\n\t\tpointerleave: \"pointerout\"\n\t}, function (orig, fix) {\n\t\tjQuery.event.special[orig] = {\n\t\t\tdelegateType: fix,\n\t\t\tbindType: fix,\n\n\t\t\thandle: function (event) {\n\t\t\t\tvar ret,\n\t\t\t\t\ttarget = this,\n\t\t\t\t\trelated = event.relatedTarget,\n\t\t\t\t\thandleObj = event.handleObj;\n\n\t\t\t\t// For mouseenter/leave call the handler if related is outside the target.\n\t\t\t\t// NB: No relatedTarget if the mouse left/entered the browser window\n\t\t\t\tif (!related || (related !== target && !jQuery.contains(target, related))) {\n\t\t\t\t\tevent.type = handleObj.origType;\n\t\t\t\t\tret = handleObj.handler.apply(this, arguments);\n\t\t\t\t\tevent.type = fix;\n\t\t\t\t}\n\t\t\t\treturn ret;\n\t\t\t}\n\t\t};\n\t});\n\n\tjQuery.fn.extend({\n\n\t\ton: function (types, selector, data, fn) {\n\t\t\treturn on(this, types, selector, data, fn);\n\t\t},\n\t\tone: function (types, selector, data, fn) {\n\t\t\treturn on(this, types, selector, data, fn, 1);\n\t\t},\n\t\toff: function (types, selector, fn) {\n\t\t\tvar handleObj, type;\n\t\t\tif (types && types.preventDefault && types.handleObj) {\n\n\t\t\t\t// ( event )  dispatched jQuery.Event\n\t\t\t\thandleObj = types.handleObj;\n\t\t\t\tjQuery(types.delegateTarget).off(\n\t\t\t\t\thandleObj.namespace ?\n\t\t\t\t\t\thandleObj.origType + \".\" + handleObj.namespace :\n\t\t\t\t\t\thandleObj.origType,\n\t\t\t\t\thandleObj.selector,\n\t\t\t\t\thandleObj.handler\n\t\t\t\t);\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\tif (typeof types === \"object\") {\n\n\t\t\t\t// ( types-object [, selector] )\n\t\t\t\tfor (type in types) {\n\t\t\t\t\tthis.off(type, selector, types[type]);\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\tif (selector === false || typeof selector === \"function\") {\n\n\t\t\t\t// ( types [, fn] )\n\t\t\t\tfn = selector;\n\t\t\t\tselector = undefined;\n\t\t\t}\n\t\t\tif (fn === false) {\n\t\t\t\tfn = returnFalse;\n\t\t\t}\n\t\t\treturn this.each(function () {\n\t\t\t\tjQuery.event.remove(this, types, fn, selector);\n\t\t\t});\n\t\t}\n\t});\n\n\n\tvar\n\n\t\t// Support: IE <=10 - 11, Edge 12 - 13 only\n\t\t// In IE/Edge using regex groups here causes severe slowdowns.\n\t\t// See https://connect.microsoft.com/IE/feedback/details/1736512/\n\t\trnoInnerhtml = /<script|<style|<link/i,\n\n\t\t// checked=\"checked\" or checked\n\t\trchecked = /checked\\s*(?:[^=]|=\\s*.checked.)/i,\n\n\t\trcleanScript = /^\\s*<!\\[CDATA\\[|\\]\\]>\\s*$/g;\n\n\t// Prefer a tbody over its parent table for containing new rows\n\tfunction manipulationTarget(elem, content) {\n\t\tif (nodeName(elem, \"table\") &&\n\t\t\tnodeName(content.nodeType !== 11 ? content : content.firstChild, \"tr\")) {\n\n\t\t\treturn jQuery(elem).children(\"tbody\")[0] || elem;\n\t\t}\n\n\t\treturn elem;\n\t}\n\n\t// Replace/restore the type attribute of script elements for safe DOM manipulation\n\tfunction disableScript(elem) {\n\t\telem.type = (elem.getAttribute(\"type\") !== null) + \"/\" + elem.type;\n\t\treturn elem;\n\t}\n\tfunction restoreScript(elem) {\n\t\tif ((elem.type || \"\").slice(0, 5) === \"true/\") {\n\t\t\telem.type = elem.type.slice(5);\n\t\t} else {\n\t\t\telem.removeAttribute(\"type\");\n\t\t}\n\n\t\treturn elem;\n\t}\n\n\tfunction cloneCopyEvent(src, dest) {\n\t\tvar i, l, type, pdataOld, udataOld, udataCur, events;\n\n\t\tif (dest.nodeType !== 1) {\n\t\t\treturn;\n\t\t}\n\n\t\t// 1. Copy private data: events, handlers, etc.\n\t\tif (dataPriv.hasData(src)) {\n\t\t\tpdataOld = dataPriv.get(src);\n\t\t\tevents = pdataOld.events;\n\n\t\t\tif (events) {\n\t\t\t\tdataPriv.remove(dest, \"handle events\");\n\n\t\t\t\tfor (type in events) {\n\t\t\t\t\tfor (i = 0, l = events[type].length; i < l; i++) {\n\t\t\t\t\t\tjQuery.event.add(dest, type, events[type][i]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// 2. Copy user data\n\t\tif (dataUser.hasData(src)) {\n\t\t\tudataOld = dataUser.access(src);\n\t\t\tudataCur = jQuery.extend({}, udataOld);\n\n\t\t\tdataUser.set(dest, udataCur);\n\t\t}\n\t}\n\n\t// Fix IE bugs, see support tests\n\tfunction fixInput(src, dest) {\n\t\tvar nodeName = dest.nodeName.toLowerCase();\n\n\t\t// Fails to persist the checked state of a cloned checkbox or radio button.\n\t\tif (nodeName === \"input\" && rcheckableType.test(src.type)) {\n\t\t\tdest.checked = src.checked;\n\n\t\t\t// Fails to return the selected option to the default selected state when cloning options\n\t\t} else if (nodeName === \"input\" || nodeName === \"textarea\") {\n\t\t\tdest.defaultValue = src.defaultValue;\n\t\t}\n\t}\n\n\tfunction domManip(collection, args, callback, ignored) {\n\n\t\t// Flatten any nested arrays\n\t\targs = flat(args);\n\n\t\tvar fragment, first, scripts, hasScripts, node, doc,\n\t\t\ti = 0,\n\t\t\tl = collection.length,\n\t\t\tiNoClone = l - 1,\n\t\t\tvalue = args[0],\n\t\t\tvalueIsFunction = isFunction(value);\n\n\t\t// We can't cloneNode fragments that contain checked, in WebKit\n\t\tif (valueIsFunction ||\n\t\t\t(l > 1 && typeof value === \"string\" &&\n\t\t\t\t!support.checkClone && rchecked.test(value))) {\n\t\t\treturn collection.each(function (index) {\n\t\t\t\tvar self = collection.eq(index);\n\t\t\t\tif (valueIsFunction) {\n\t\t\t\t\targs[0] = value.call(this, index, self.html());\n\t\t\t\t}\n\t\t\t\tdomManip(self, args, callback, ignored);\n\t\t\t});\n\t\t}\n\n\t\tif (l) {\n\t\t\tfragment = buildFragment(args, collection[0].ownerDocument, false, collection, ignored);\n\t\t\tfirst = fragment.firstChild;\n\n\t\t\tif (fragment.childNodes.length === 1) {\n\t\t\t\tfragment = first;\n\t\t\t}\n\n\t\t\t// Require either new content or an interest in ignored elements to invoke the callback\n\t\t\tif (first || ignored) {\n\t\t\t\tscripts = jQuery.map(getAll(fragment, \"script\"), disableScript);\n\t\t\t\thasScripts = scripts.length;\n\n\t\t\t\t// Use the original fragment for the last item\n\t\t\t\t// instead of the first because it can end up\n\t\t\t\t// being emptied incorrectly in certain situations (trac-8070).\n\t\t\t\tfor (; i < l; i++) {\n\t\t\t\t\tnode = fragment;\n\n\t\t\t\t\tif (i !== iNoClone) {\n\t\t\t\t\t\tnode = jQuery.clone(node, true, true);\n\n\t\t\t\t\t\t// Keep references to cloned scripts for later restoration\n\t\t\t\t\t\tif (hasScripts) {\n\n\t\t\t\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\t\t\t\tjQuery.merge(scripts, getAll(node, \"script\"));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tcallback.call(collection[i], node, i);\n\t\t\t\t}\n\n\t\t\t\tif (hasScripts) {\n\t\t\t\t\tdoc = scripts[scripts.length - 1].ownerDocument;\n\n\t\t\t\t\t// Reenable scripts\n\t\t\t\t\tjQuery.map(scripts, restoreScript);\n\n\t\t\t\t\t// Evaluate executable scripts on first document insertion\n\t\t\t\t\tfor (i = 0; i < hasScripts; i++) {\n\t\t\t\t\t\tnode = scripts[i];\n\t\t\t\t\t\tif (rscriptType.test(node.type || \"\") &&\n\t\t\t\t\t\t\t!dataPriv.access(node, \"globalEval\") &&\n\t\t\t\t\t\t\tjQuery.contains(doc, node)) {\n\n\t\t\t\t\t\t\tif (node.src && (node.type || \"\").toLowerCase() !== \"module\") {\n\n\t\t\t\t\t\t\t\t// Optional AJAX dependency, but won't run scripts if not present\n\t\t\t\t\t\t\t\tif (jQuery._evalUrl && !node.noModule) {\n\t\t\t\t\t\t\t\t\tjQuery._evalUrl(node.src, {\n\t\t\t\t\t\t\t\t\t\tnonce: node.nonce || node.getAttribute(\"nonce\")\n\t\t\t\t\t\t\t\t\t}, doc);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t// Unwrap a CDATA section containing script contents. This shouldn't be\n\t\t\t\t\t\t\t\t// needed as in XML documents they're already not visible when\n\t\t\t\t\t\t\t\t// inspecting element contents and in HTML documents they have no\n\t\t\t\t\t\t\t\t// meaning but we're preserving that logic for backwards compatibility.\n\t\t\t\t\t\t\t\t// This will be removed completely in 4.0. See gh-4904.\n\t\t\t\t\t\t\t\tDOMEval(node.textContent.replace(rcleanScript, \"\"), node, doc);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn collection;\n\t}\n\n\tfunction remove(elem, selector, keepData) {\n\t\tvar node,\n\t\t\tnodes = selector ? jQuery.filter(selector, elem) : elem,\n\t\t\ti = 0;\n\n\t\tfor (; (node = nodes[i]) != null; i++) {\n\t\t\tif (!keepData && node.nodeType === 1) {\n\t\t\t\tjQuery.cleanData(getAll(node));\n\t\t\t}\n\n\t\t\tif (node.parentNode) {\n\t\t\t\tif (keepData && isAttached(node)) {\n\t\t\t\t\tsetGlobalEval(getAll(node, \"script\"));\n\t\t\t\t}\n\t\t\t\tnode.parentNode.removeChild(node);\n\t\t\t}\n\t\t}\n\n\t\treturn elem;\n\t}\n\n\tjQuery.extend({\n\t\thtmlPrefilter: function (html) {\n\t\t\treturn html;\n\t\t},\n\n\t\tclone: function (elem, dataAndEvents, deepDataAndEvents) {\n\t\t\tvar i, l, srcElements, destElements,\n\t\t\t\tclone = elem.cloneNode(true),\n\t\t\t\tinPage = isAttached(elem);\n\n\t\t\t// Fix IE cloning issues\n\t\t\tif (!support.noCloneChecked && (elem.nodeType === 1 || elem.nodeType === 11) &&\n\t\t\t\t!jQuery.isXMLDoc(elem)) {\n\n\t\t\t\t// We eschew jQuery#find here for performance reasons:\n\t\t\t\t// https://jsperf.com/getall-vs-sizzle/2\n\t\t\t\tdestElements = getAll(clone);\n\t\t\t\tsrcElements = getAll(elem);\n\n\t\t\t\tfor (i = 0, l = srcElements.length; i < l; i++) {\n\t\t\t\t\tfixInput(srcElements[i], destElements[i]);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Copy the events from the original to the clone\n\t\t\tif (dataAndEvents) {\n\t\t\t\tif (deepDataAndEvents) {\n\t\t\t\t\tsrcElements = srcElements || getAll(elem);\n\t\t\t\t\tdestElements = destElements || getAll(clone);\n\n\t\t\t\t\tfor (i = 0, l = srcElements.length; i < l; i++) {\n\t\t\t\t\t\tcloneCopyEvent(srcElements[i], destElements[i]);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tcloneCopyEvent(elem, clone);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Preserve script evaluation history\n\t\t\tdestElements = getAll(clone, \"script\");\n\t\t\tif (destElements.length > 0) {\n\t\t\t\tsetGlobalEval(destElements, !inPage && getAll(elem, \"script\"));\n\t\t\t}\n\n\t\t\t// Return the cloned set\n\t\t\treturn clone;\n\t\t},\n\n\t\tcleanData: function (elems) {\n\t\t\tvar data, elem, type,\n\t\t\t\tspecial = jQuery.event.special,\n\t\t\t\ti = 0;\n\n\t\t\tfor (; (elem = elems[i]) !== undefined; i++) {\n\t\t\t\tif (acceptData(elem)) {\n\t\t\t\t\tif ((data = elem[dataPriv.expando])) {\n\t\t\t\t\t\tif (data.events) {\n\t\t\t\t\t\t\tfor (type in data.events) {\n\t\t\t\t\t\t\t\tif (special[type]) {\n\t\t\t\t\t\t\t\t\tjQuery.event.remove(elem, type);\n\n\t\t\t\t\t\t\t\t\t// This is a shortcut to avoid jQuery.event.remove's overhead\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tjQuery.removeEvent(elem, type, data.handle);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\t\telem[dataPriv.expando] = undefined;\n\t\t\t\t\t}\n\t\t\t\t\tif (elem[dataUser.expando]) {\n\n\t\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\t\telem[dataUser.expando] = undefined;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\n\tjQuery.fn.extend({\n\t\tdetach: function (selector) {\n\t\t\treturn remove(this, selector, true);\n\t\t},\n\n\t\tremove: function (selector) {\n\t\t\treturn remove(this, selector);\n\t\t},\n\n\t\ttext: function (value) {\n\t\t\treturn access(this, function (value) {\n\t\t\t\treturn value === undefined ?\n\t\t\t\t\tjQuery.text(this) :\n\t\t\t\t\tthis.empty().each(function () {\n\t\t\t\t\t\tif (this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9) {\n\t\t\t\t\t\t\tthis.textContent = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t}, null, value, arguments.length);\n\t\t},\n\n\t\tappend: function () {\n\t\t\treturn domManip(this, arguments, function (elem) {\n\t\t\t\tif (this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9) {\n\t\t\t\t\tvar target = manipulationTarget(this, elem);\n\t\t\t\t\ttarget.appendChild(elem);\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\tprepend: function () {\n\t\t\treturn domManip(this, arguments, function (elem) {\n\t\t\t\tif (this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9) {\n\t\t\t\t\tvar target = manipulationTarget(this, elem);\n\t\t\t\t\ttarget.insertBefore(elem, target.firstChild);\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\tbefore: function () {\n\t\t\treturn domManip(this, arguments, function (elem) {\n\t\t\t\tif (this.parentNode) {\n\t\t\t\t\tthis.parentNode.insertBefore(elem, this);\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\tafter: function () {\n\t\t\treturn domManip(this, arguments, function (elem) {\n\t\t\t\tif (this.parentNode) {\n\t\t\t\t\tthis.parentNode.insertBefore(elem, this.nextSibling);\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\tempty: function () {\n\t\t\tvar elem,\n\t\t\t\ti = 0;\n\n\t\t\tfor (; (elem = this[i]) != null; i++) {\n\t\t\t\tif (elem.nodeType === 1) {\n\n\t\t\t\t\t// Prevent memory leaks\n\t\t\t\t\tjQuery.cleanData(getAll(elem, false));\n\n\t\t\t\t\t// Remove any remaining nodes\n\t\t\t\t\telem.textContent = \"\";\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn this;\n\t\t},\n\n\t\tclone: function (dataAndEvents, deepDataAndEvents) {\n\t\t\tdataAndEvents = dataAndEvents == null ? false : dataAndEvents;\n\t\t\tdeepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;\n\n\t\t\treturn this.map(function () {\n\t\t\t\treturn jQuery.clone(this, dataAndEvents, deepDataAndEvents);\n\t\t\t});\n\t\t},\n\n\t\thtml: function (value) {\n\t\t\treturn access(this, function (value) {\n\t\t\t\tvar elem = this[0] || {},\n\t\t\t\t\ti = 0,\n\t\t\t\t\tl = this.length;\n\n\t\t\t\tif (value === undefined && elem.nodeType === 1) {\n\t\t\t\t\treturn elem.innerHTML;\n\t\t\t\t}\n\n\t\t\t\t// See if we can take a shortcut and just use innerHTML\n\t\t\t\tif (typeof value === \"string\" && !rnoInnerhtml.test(value) &&\n\t\t\t\t\t!wrapMap[(rtagName.exec(value) || [\"\", \"\"])[1].toLowerCase()]) {\n\n\t\t\t\t\tvalue = jQuery.htmlPrefilter(value);\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tfor (; i < l; i++) {\n\t\t\t\t\t\t\telem = this[i] || {};\n\n\t\t\t\t\t\t\t// Remove element nodes and prevent memory leaks\n\t\t\t\t\t\t\tif (elem.nodeType === 1) {\n\t\t\t\t\t\t\t\tjQuery.cleanData(getAll(elem, false));\n\t\t\t\t\t\t\t\telem.innerHTML = value;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\telem = 0;\n\n\t\t\t\t\t\t// If using innerHTML throws an exception, use the fallback method\n\t\t\t\t\t} catch (e) { }\n\t\t\t\t}\n\n\t\t\t\tif (elem) {\n\t\t\t\t\tthis.empty().append(value);\n\t\t\t\t}\n\t\t\t}, null, value, arguments.length);\n\t\t},\n\n\t\treplaceWith: function () {\n\t\t\tvar ignored = [];\n\n\t\t\t// Make the changes, replacing each non-ignored context element with the new content\n\t\t\treturn domManip(this, arguments, function (elem) {\n\t\t\t\tvar parent = this.parentNode;\n\n\t\t\t\tif (jQuery.inArray(this, ignored) < 0) {\n\t\t\t\t\tjQuery.cleanData(getAll(this));\n\t\t\t\t\tif (parent) {\n\t\t\t\t\t\tparent.replaceChild(elem, this);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Force callback invocation\n\t\t\t}, ignored);\n\t\t}\n\t});\n\n\tjQuery.each({\n\t\tappendTo: \"append\",\n\t\tprependTo: \"prepend\",\n\t\tinsertBefore: \"before\",\n\t\tinsertAfter: \"after\",\n\t\treplaceAll: \"replaceWith\"\n\t}, function (name, original) {\n\t\tjQuery.fn[name] = function (selector) {\n\t\t\tvar elems,\n\t\t\t\tret = [],\n\t\t\t\tinsert = jQuery(selector),\n\t\t\t\tlast = insert.length - 1,\n\t\t\t\ti = 0;\n\n\t\t\tfor (; i <= last; i++) {\n\t\t\t\telems = i === last ? this : this.clone(true);\n\t\t\t\tjQuery(insert[i])[original](elems);\n\n\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t// .get() because push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\tpush.apply(ret, elems.get());\n\t\t\t}\n\n\t\t\treturn this.pushStack(ret);\n\t\t};\n\t});\n\tvar rnumnonpx = new RegExp(\"^(\" + pnum + \")(?!px)[a-z%]+$\", \"i\");\n\n\tvar rcustomProp = /^--/;\n\n\n\tvar getStyles = function (elem) {\n\n\t\t// Support: IE <=11 only, Firefox <=30 (trac-15098, trac-14150)\n\t\t// IE throws on elements created in popups\n\t\t// FF meanwhile throws on frame elements through \"defaultView.getComputedStyle\"\n\t\tvar view = elem.ownerDocument.defaultView;\n\n\t\tif (!view || !view.opener) {\n\t\t\tview = window;\n\t\t}\n\n\t\treturn view.getComputedStyle(elem);\n\t};\n\n\tvar swap = function (elem, options, callback) {\n\t\tvar ret, name,\n\t\t\told = {};\n\n\t\t// Remember the old values, and insert the new ones\n\t\tfor (name in options) {\n\t\t\told[name] = elem.style[name];\n\t\t\telem.style[name] = options[name];\n\t\t}\n\n\t\tret = callback.call(elem);\n\n\t\t// Revert the old values\n\t\tfor (name in options) {\n\t\t\telem.style[name] = old[name];\n\t\t}\n\n\t\treturn ret;\n\t};\n\n\n\tvar rboxStyle = new RegExp(cssExpand.join(\"|\"), \"i\");\n\n\n\n\t(function () {\n\n\t\t// Executing both pixelPosition & boxSizingReliable tests require only one layout\n\t\t// so they're executed at the same time to save the second computation.\n\t\tfunction computeStyleTests() {\n\n\t\t\t// This is a singleton, we need to execute it only once\n\t\t\tif (!div) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tcontainer.style.cssText = \"position:absolute;left:-11111px;width:60px;\" +\n\t\t\t\t\"margin-top:1px;padding:0;border:0\";\n\t\t\tdiv.style.cssText =\n\t\t\t\t\"position:relative;display:block;box-sizing:border-box;overflow:scroll;\" +\n\t\t\t\t\"margin:auto;border:1px;padding:1px;\" +\n\t\t\t\t\"width:60%;top:1%\";\n\t\t\tdocumentElement.appendChild(container).appendChild(div);\n\n\t\t\tvar divStyle = window.getComputedStyle(div);\n\t\t\tpixelPositionVal = divStyle.top !== \"1%\";\n\n\t\t\t// Support: Android 4.0 - 4.3 only, Firefox <=3 - 44\n\t\t\treliableMarginLeftVal = roundPixelMeasures(divStyle.marginLeft) === 12;\n\n\t\t\t// Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3\n\t\t\t// Some styles come back with percentage values, even though they shouldn't\n\t\t\tdiv.style.right = \"60%\";\n\t\t\tpixelBoxStylesVal = roundPixelMeasures(divStyle.right) === 36;\n\n\t\t\t// Support: IE 9 - 11 only\n\t\t\t// Detect misreporting of content dimensions for box-sizing:border-box elements\n\t\t\tboxSizingReliableVal = roundPixelMeasures(divStyle.width) === 36;\n\n\t\t\t// Support: IE 9 only\n\t\t\t// Detect overflow:scroll screwiness (gh-3699)\n\t\t\t// Support: Chrome <=64\n\t\t\t// Don't get tricked when zoom affects offsetWidth (gh-4029)\n\t\t\tdiv.style.position = \"absolute\";\n\t\t\tscrollboxSizeVal = roundPixelMeasures(div.offsetWidth / 3) === 12;\n\n\t\t\tdocumentElement.removeChild(container);\n\n\t\t\t// Nullify the div so it wouldn't be stored in the memory and\n\t\t\t// it will also be a sign that checks already performed\n\t\t\tdiv = null;\n\t\t}\n\n\t\tfunction roundPixelMeasures(measure) {\n\t\t\treturn Math.round(parseFloat(measure));\n\t\t}\n\n\t\tvar pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal,\n\t\t\treliableTrDimensionsVal, reliableMarginLeftVal,\n\t\t\tcontainer = document.createElement(\"div\"),\n\t\t\tdiv = document.createElement(\"div\");\n\n\t\t// Finish early in limited (non-browser) environments\n\t\tif (!div.style) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Support: IE <=9 - 11 only\n\t\t// Style of cloned element affects source element cloned (trac-8908)\n\t\tdiv.style.backgroundClip = \"content-box\";\n\t\tdiv.cloneNode(true).style.backgroundClip = \"\";\n\t\tsupport.clearCloneStyle = div.style.backgroundClip === \"content-box\";\n\n\t\tjQuery.extend(support, {\n\t\t\tboxSizingReliable: function () {\n\t\t\t\tcomputeStyleTests();\n\t\t\t\treturn boxSizingReliableVal;\n\t\t\t},\n\t\t\tpixelBoxStyles: function () {\n\t\t\t\tcomputeStyleTests();\n\t\t\t\treturn pixelBoxStylesVal;\n\t\t\t},\n\t\t\tpixelPosition: function () {\n\t\t\t\tcomputeStyleTests();\n\t\t\t\treturn pixelPositionVal;\n\t\t\t},\n\t\t\treliableMarginLeft: function () {\n\t\t\t\tcomputeStyleTests();\n\t\t\t\treturn reliableMarginLeftVal;\n\t\t\t},\n\t\t\tscrollboxSize: function () {\n\t\t\t\tcomputeStyleTests();\n\t\t\t\treturn scrollboxSizeVal;\n\t\t\t},\n\n\t\t\t// Support: IE 9 - 11+, Edge 15 - 18+\n\t\t\t// IE/Edge misreport `getComputedStyle` of table rows with width/height\n\t\t\t// set in CSS while `offset*` properties report correct values.\n\t\t\t// Behavior in IE 9 is more subtle than in newer versions & it passes\n\t\t\t// some versions of this test; make sure not to make it pass there!\n\t\t\t//\n\t\t\t// Support: Firefox 70+\n\t\t\t// Only Firefox includes border widths\n\t\t\t// in computed dimensions. (gh-4529)\n\t\t\treliableTrDimensions: function () {\n\t\t\t\tvar table, tr, trChild, trStyle;\n\t\t\t\tif (reliableTrDimensionsVal == null) {\n\t\t\t\t\ttable = document.createElement(\"table\");\n\t\t\t\t\ttr = document.createElement(\"tr\");\n\t\t\t\t\ttrChild = document.createElement(\"div\");\n\n\t\t\t\t\ttable.style.cssText = \"position:absolute;left:-11111px;border-collapse:separate\";\n\t\t\t\t\ttr.style.cssText = \"border:1px solid\";\n\n\t\t\t\t\t// Support: Chrome 86+\n\t\t\t\t\t// Height set through cssText does not get applied.\n\t\t\t\t\t// Computed height then comes back as 0.\n\t\t\t\t\ttr.style.height = \"1px\";\n\t\t\t\t\ttrChild.style.height = \"9px\";\n\n\t\t\t\t\t// Support: Android 8 Chrome 86+\n\t\t\t\t\t// In our bodyBackground.html iframe,\n\t\t\t\t\t// display for all div elements is set to \"inline\",\n\t\t\t\t\t// which causes a problem only in Android 8 Chrome 86.\n\t\t\t\t\t// Ensuring the div is display: block\n\t\t\t\t\t// gets around this issue.\n\t\t\t\t\ttrChild.style.display = \"block\";\n\n\t\t\t\t\tdocumentElement\n\t\t\t\t\t\t.appendChild(table)\n\t\t\t\t\t\t.appendChild(tr)\n\t\t\t\t\t\t.appendChild(trChild);\n\n\t\t\t\t\ttrStyle = window.getComputedStyle(tr);\n\t\t\t\t\treliableTrDimensionsVal = (parseInt(trStyle.height, 10) +\n\t\t\t\t\t\tparseInt(trStyle.borderTopWidth, 10) +\n\t\t\t\t\t\tparseInt(trStyle.borderBottomWidth, 10)) === tr.offsetHeight;\n\n\t\t\t\t\tdocumentElement.removeChild(table);\n\t\t\t\t}\n\t\t\t\treturn reliableTrDimensionsVal;\n\t\t\t}\n\t\t});\n\t})();\n\n\n\tfunction curCSS(elem, name, computed) {\n\t\tvar width, minWidth, maxWidth, ret,\n\t\t\tisCustomProp = rcustomProp.test(name),\n\n\t\t\t// Support: Firefox 51+\n\t\t\t// Retrieving style before computed somehow\n\t\t\t// fixes an issue with getting wrong values\n\t\t\t// on detached elements\n\t\t\tstyle = elem.style;\n\n\t\tcomputed = computed || getStyles(elem);\n\n\t\t// getPropertyValue is needed for:\n\t\t//   .css('filter') (IE 9 only, trac-12537)\n\t\t//   .css('--customProperty) (gh-3144)\n\t\tif (computed) {\n\n\t\t\t// Support: IE <=9 - 11+\n\t\t\t// IE only supports `\"float\"` in `getPropertyValue`; in computed styles\n\t\t\t// it's only available as `\"cssFloat\"`. We no longer modify properties\n\t\t\t// sent to `.css()` apart from camelCasing, so we need to check both.\n\t\t\t// Normally, this would create difference in behavior: if\n\t\t\t// `getPropertyValue` returns an empty string, the value returned\n\t\t\t// by `.css()` would be `undefined`. This is usually the case for\n\t\t\t// disconnected elements. However, in IE even disconnected elements\n\t\t\t// with no styles return `\"none\"` for `getPropertyValue( \"float\" )`\n\t\t\tret = computed.getPropertyValue(name) || computed[name];\n\n\t\t\tif (isCustomProp && ret) {\n\n\t\t\t\t// Support: Firefox 105+, Chrome <=105+\n\t\t\t\t// Spec requires trimming whitespace for custom properties (gh-4926).\n\t\t\t\t// Firefox only trims leading whitespace. Chrome just collapses\n\t\t\t\t// both leading & trailing whitespace to a single space.\n\t\t\t\t//\n\t\t\t\t// Fall back to `undefined` if empty string returned.\n\t\t\t\t// This collapses a missing definition with property defined\n\t\t\t\t// and set to an empty string but there's no standard API\n\t\t\t\t// allowing us to differentiate them without a performance penalty\n\t\t\t\t// and returning `undefined` aligns with older jQuery.\n\t\t\t\t//\n\t\t\t\t// rtrimCSS treats U+000D CARRIAGE RETURN and U+000C FORM FEED\n\t\t\t\t// as whitespace while CSS does not, but this is not a problem\n\t\t\t\t// because CSS preprocessing replaces them with U+000A LINE FEED\n\t\t\t\t// (which *is* CSS whitespace)\n\t\t\t\t// https://www.w3.org/TR/css-syntax-3/#input-preprocessing\n\t\t\t\tret = ret.replace(rtrimCSS, \"$1\") || undefined;\n\t\t\t}\n\n\t\t\tif (ret === \"\" && !isAttached(elem)) {\n\t\t\t\tret = jQuery.style(elem, name);\n\t\t\t}\n\n\t\t\t// A tribute to the \"awesome hack by Dean Edwards\"\n\t\t\t// Android Browser returns percentage for some values,\n\t\t\t// but width seems to be reliably pixels.\n\t\t\t// This is against the CSSOM draft spec:\n\t\t\t// https://drafts.csswg.org/cssom/#resolved-values\n\t\t\tif (!support.pixelBoxStyles() && rnumnonpx.test(ret) && rboxStyle.test(name)) {\n\n\t\t\t\t// Remember the original values\n\t\t\t\twidth = style.width;\n\t\t\t\tminWidth = style.minWidth;\n\t\t\t\tmaxWidth = style.maxWidth;\n\n\t\t\t\t// Put in the new values to get a computed value out\n\t\t\t\tstyle.minWidth = style.maxWidth = style.width = ret;\n\t\t\t\tret = computed.width;\n\n\t\t\t\t// Revert the changed values\n\t\t\t\tstyle.width = width;\n\t\t\t\tstyle.minWidth = minWidth;\n\t\t\t\tstyle.maxWidth = maxWidth;\n\t\t\t}\n\t\t}\n\n\t\treturn ret !== undefined ?\n\n\t\t\t// Support: IE <=9 - 11 only\n\t\t\t// IE returns zIndex value as an integer.\n\t\t\tret + \"\" :\n\t\t\tret;\n\t}\n\n\n\tfunction addGetHookIf(conditionFn, hookFn) {\n\n\t\t// Define the hook, we'll check on the first run if it's really needed.\n\t\treturn {\n\t\t\tget: function () {\n\t\t\t\tif (conditionFn()) {\n\n\t\t\t\t\t// Hook not needed (or it's not possible to use it due\n\t\t\t\t\t// to missing dependency), remove it.\n\t\t\t\t\tdelete this.get;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Hook needed; redefine it so that the support test is not executed again.\n\t\t\t\treturn (this.get = hookFn).apply(this, arguments);\n\t\t\t}\n\t\t};\n\t}\n\n\n\tvar cssPrefixes = [\"Webkit\", \"Moz\", \"ms\"],\n\t\temptyStyle = document.createElement(\"div\").style,\n\t\tvendorProps = {};\n\n\t// Return a vendor-prefixed property or undefined\n\tfunction vendorPropName(name) {\n\n\t\t// Check for vendor prefixed names\n\t\tvar capName = name[0].toUpperCase() + name.slice(1),\n\t\t\ti = cssPrefixes.length;\n\n\t\twhile (i--) {\n\t\t\tname = cssPrefixes[i] + capName;\n\t\t\tif (name in emptyStyle) {\n\t\t\t\treturn name;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return a potentially-mapped jQuery.cssProps or vendor prefixed property\n\tfunction finalPropName(name) {\n\t\tvar final = jQuery.cssProps[name] || vendorProps[name];\n\n\t\tif (final) {\n\t\t\treturn final;\n\t\t}\n\t\tif (name in emptyStyle) {\n\t\t\treturn name;\n\t\t}\n\t\treturn vendorProps[name] = vendorPropName(name) || name;\n\t}\n\n\n\tvar\n\n\t\t// Swappable if display is none or starts with table\n\t\t// except \"table\", \"table-cell\", or \"table-caption\"\n\t\t// See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display\n\t\trdisplayswap = /^(none|table(?!-c[ea]).+)/,\n\t\tcssShow = { position: \"absolute\", visibility: \"hidden\", display: \"block\" },\n\t\tcssNormalTransform = {\n\t\t\tletterSpacing: \"0\",\n\t\t\tfontWeight: \"400\"\n\t\t};\n\n\tfunction setPositiveNumber(_elem, value, subtract) {\n\n\t\t// Any relative (+/-) values have already been\n\t\t// normalized at this point\n\t\tvar matches = rcssNum.exec(value);\n\t\treturn matches ?\n\n\t\t\t// Guard against undefined \"subtract\", e.g., when used as in cssHooks\n\t\t\tMath.max(0, matches[2] - (subtract || 0)) + (matches[3] || \"px\") :\n\t\t\tvalue;\n\t}\n\n\tfunction boxModelAdjustment(elem, dimension, box, isBorderBox, styles, computedVal) {\n\t\tvar i = dimension === \"width\" ? 1 : 0,\n\t\t\textra = 0,\n\t\t\tdelta = 0,\n\t\t\tmarginDelta = 0;\n\n\t\t// Adjustment may not be necessary\n\t\tif (box === (isBorderBox ? \"border\" : \"content\")) {\n\t\t\treturn 0;\n\t\t}\n\n\t\tfor (; i < 4; i += 2) {\n\n\t\t\t// Both box models exclude margin\n\t\t\t// Count margin delta separately to only add it after scroll gutter adjustment.\n\t\t\t// This is needed to make negative margins work with `outerHeight( true )` (gh-3982).\n\t\t\tif (box === \"margin\") {\n\t\t\t\tmarginDelta += jQuery.css(elem, box + cssExpand[i], true, styles);\n\t\t\t}\n\n\t\t\t// If we get here with a content-box, we're seeking \"padding\" or \"border\" or \"margin\"\n\t\t\tif (!isBorderBox) {\n\n\t\t\t\t// Add padding\n\t\t\t\tdelta += jQuery.css(elem, \"padding\" + cssExpand[i], true, styles);\n\n\t\t\t\t// For \"border\" or \"margin\", add border\n\t\t\t\tif (box !== \"padding\") {\n\t\t\t\t\tdelta += jQuery.css(elem, \"border\" + cssExpand[i] + \"Width\", true, styles);\n\n\t\t\t\t\t// But still keep track of it otherwise\n\t\t\t\t} else {\n\t\t\t\t\textra += jQuery.css(elem, \"border\" + cssExpand[i] + \"Width\", true, styles);\n\t\t\t\t}\n\n\t\t\t\t// If we get here with a border-box (content + padding + border), we're seeking \"content\" or\n\t\t\t\t// \"padding\" or \"margin\"\n\t\t\t} else {\n\n\t\t\t\t// For \"content\", subtract padding\n\t\t\t\tif (box === \"content\") {\n\t\t\t\t\tdelta -= jQuery.css(elem, \"padding\" + cssExpand[i], true, styles);\n\t\t\t\t}\n\n\t\t\t\t// For \"content\" or \"padding\", subtract border\n\t\t\t\tif (box !== \"margin\") {\n\t\t\t\t\tdelta -= jQuery.css(elem, \"border\" + cssExpand[i] + \"Width\", true, styles);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Account for positive content-box scroll gutter when requested by providing computedVal\n\t\tif (!isBorderBox && computedVal >= 0) {\n\n\t\t\t// offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border\n\t\t\t// Assuming integer scroll gutter, subtract the rest and round down\n\t\t\tdelta += Math.max(0, Math.ceil(\n\t\t\t\telem[\"offset\" + dimension[0].toUpperCase() + dimension.slice(1)] -\n\t\t\t\tcomputedVal -\n\t\t\t\tdelta -\n\t\t\t\textra -\n\t\t\t\t0.5\n\n\t\t\t\t// If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter\n\t\t\t\t// Use an explicit zero to avoid NaN (gh-3964)\n\t\t\t)) || 0;\n\t\t}\n\n\t\treturn delta + marginDelta;\n\t}\n\n\tfunction getWidthOrHeight(elem, dimension, extra) {\n\n\t\t// Start with computed style\n\t\tvar styles = getStyles(elem),\n\n\t\t\t// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322).\n\t\t\t// Fake content-box until we know it's needed to know the true value.\n\t\t\tboxSizingNeeded = !support.boxSizingReliable() || extra,\n\t\t\tisBorderBox = boxSizingNeeded &&\n\t\t\t\tjQuery.css(elem, \"boxSizing\", false, styles) === \"border-box\",\n\t\t\tvalueIsBorderBox = isBorderBox,\n\n\t\t\tval = curCSS(elem, dimension, styles),\n\t\t\toffsetProp = \"offset\" + dimension[0].toUpperCase() + dimension.slice(1);\n\n\t\t// Support: Firefox <=54\n\t\t// Return a confounding non-pixel value or feign ignorance, as appropriate.\n\t\tif (rnumnonpx.test(val)) {\n\t\t\tif (!extra) {\n\t\t\t\treturn val;\n\t\t\t}\n\t\t\tval = \"auto\";\n\t\t}\n\n\n\t\t// Support: IE 9 - 11 only\n\t\t// Use offsetWidth/offsetHeight for when box sizing is unreliable.\n\t\t// In those cases, the computed value can be trusted to be border-box.\n\t\tif ((!support.boxSizingReliable() && isBorderBox ||\n\n\t\t\t// Support: IE 10 - 11+, Edge 15 - 18+\n\t\t\t// IE/Edge misreport `getComputedStyle` of table rows with width/height\n\t\t\t// set in CSS while `offset*` properties report correct values.\n\t\t\t// Interestingly, in some cases IE 9 doesn't suffer from this issue.\n\t\t\t!support.reliableTrDimensions() && nodeName(elem, \"tr\") ||\n\n\t\t\t// Fall back to offsetWidth/offsetHeight when value is \"auto\"\n\t\t\t// This happens for inline elements with no explicit setting (gh-3571)\n\t\t\tval === \"auto\" ||\n\n\t\t\t// Support: Android <=4.1 - 4.3 only\n\t\t\t// Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602)\n\t\t\t!parseFloat(val) && jQuery.css(elem, \"display\", false, styles) === \"inline\") &&\n\n\t\t\t// Make sure the element is visible & connected\n\t\t\telem.getClientRects().length) {\n\n\t\t\tisBorderBox = jQuery.css(elem, \"boxSizing\", false, styles) === \"border-box\";\n\n\t\t\t// Where available, offsetWidth/offsetHeight approximate border box dimensions.\n\t\t\t// Where not available (e.g., SVG), assume unreliable box-sizing and interpret the\n\t\t\t// retrieved value as a content box dimension.\n\t\t\tvalueIsBorderBox = offsetProp in elem;\n\t\t\tif (valueIsBorderBox) {\n\t\t\t\tval = elem[offsetProp];\n\t\t\t}\n\t\t}\n\n\t\t// Normalize \"\" and auto\n\t\tval = parseFloat(val) || 0;\n\n\t\t// Adjust for the element's box model\n\t\treturn (val +\n\t\t\tboxModelAdjustment(\n\t\t\t\telem,\n\t\t\t\tdimension,\n\t\t\t\textra || (isBorderBox ? \"border\" : \"content\"),\n\t\t\t\tvalueIsBorderBox,\n\t\t\t\tstyles,\n\n\t\t\t\t// Provide the current computed size to request scroll gutter calculation (gh-3589)\n\t\t\t\tval\n\t\t\t)\n\t\t) + \"px\";\n\t}\n\n\tjQuery.extend({\n\n\t\t// Add in style property hooks for overriding the default\n\t\t// behavior of getting and setting a style property\n\t\tcssHooks: {\n\t\t\topacity: {\n\t\t\t\tget: function (elem, computed) {\n\t\t\t\t\tif (computed) {\n\n\t\t\t\t\t\t// We should always get a number back from opacity\n\t\t\t\t\t\tvar ret = curCSS(elem, \"opacity\");\n\t\t\t\t\t\treturn ret === \"\" ? \"1\" : ret;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t// Don't automatically add \"px\" to these possibly-unitless properties\n\t\tcssNumber: {\n\t\t\tanimationIterationCount: true,\n\t\t\taspectRatio: true,\n\t\t\tborderImageSlice: true,\n\t\t\tcolumnCount: true,\n\t\t\tflexGrow: true,\n\t\t\tflexShrink: true,\n\t\t\tfontWeight: true,\n\t\t\tgridArea: true,\n\t\t\tgridColumn: true,\n\t\t\tgridColumnEnd: true,\n\t\t\tgridColumnStart: true,\n\t\t\tgridRow: true,\n\t\t\tgridRowEnd: true,\n\t\t\tgridRowStart: true,\n\t\t\tlineHeight: true,\n\t\t\topacity: true,\n\t\t\torder: true,\n\t\t\torphans: true,\n\t\t\tscale: true,\n\t\t\twidows: true,\n\t\t\tzIndex: true,\n\t\t\tzoom: true,\n\n\t\t\t// SVG-related\n\t\t\tfillOpacity: true,\n\t\t\tfloodOpacity: true,\n\t\t\tstopOpacity: true,\n\t\t\tstrokeMiterlimit: true,\n\t\t\tstrokeOpacity: true\n\t\t},\n\n\t\t// Add in properties whose names you wish to fix before\n\t\t// setting or getting the value\n\t\tcssProps: {},\n\n\t\t// Get and set the style property on a DOM Node\n\t\tstyle: function (elem, name, value, extra) {\n\n\t\t\t// Don't set styles on text and comment nodes\n\t\t\tif (!elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Make sure that we're working with the right name\n\t\t\tvar ret, type, hooks,\n\t\t\t\torigName = camelCase(name),\n\t\t\t\tisCustomProp = rcustomProp.test(name),\n\t\t\t\tstyle = elem.style;\n\n\t\t\t// Make sure that we're working with the right name. We don't\n\t\t\t// want to query the value if it is a CSS custom property\n\t\t\t// since they are user-defined.\n\t\t\tif (!isCustomProp) {\n\t\t\t\tname = finalPropName(origName);\n\t\t\t}\n\n\t\t\t// Gets hook for the prefixed version, then unprefixed version\n\t\t\thooks = jQuery.cssHooks[name] || jQuery.cssHooks[origName];\n\n\t\t\t// Check if we're setting a value\n\t\t\tif (value !== undefined) {\n\t\t\t\ttype = typeof value;\n\n\t\t\t\t// Convert \"+=\" or \"-=\" to relative numbers (trac-7345)\n\t\t\t\tif (type === \"string\" && (ret = rcssNum.exec(value)) && ret[1]) {\n\t\t\t\t\tvalue = adjustCSS(elem, name, ret);\n\n\t\t\t\t\t// Fixes bug trac-9237\n\t\t\t\t\ttype = \"number\";\n\t\t\t\t}\n\n\t\t\t\t// Make sure that null and NaN values aren't set (trac-7116)\n\t\t\t\tif (value == null || value !== value) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// If a number was passed in, add the unit (except for certain CSS properties)\n\t\t\t\t// The isCustomProp check can be removed in jQuery 4.0 when we only auto-append\n\t\t\t\t// \"px\" to a few hardcoded values.\n\t\t\t\tif (type === \"number\" && !isCustomProp) {\n\t\t\t\t\tvalue += ret && ret[3] || (jQuery.cssNumber[origName] ? \"\" : \"px\");\n\t\t\t\t}\n\n\t\t\t\t// background-* props affect original clone's values\n\t\t\t\tif (!support.clearCloneStyle && value === \"\" && name.indexOf(\"background\") === 0) {\n\t\t\t\t\tstyle[name] = \"inherit\";\n\t\t\t\t}\n\n\t\t\t\t// If a hook was provided, use that value, otherwise just set the specified value\n\t\t\t\tif (!hooks || !(\"set\" in hooks) ||\n\t\t\t\t\t(value = hooks.set(elem, value, extra)) !== undefined) {\n\n\t\t\t\t\tif (isCustomProp) {\n\t\t\t\t\t\tstyle.setProperty(name, value);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tstyle[name] = value;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\t// If a hook was provided get the non-computed value from there\n\t\t\t\tif (hooks && \"get\" in hooks &&\n\t\t\t\t\t(ret = hooks.get(elem, false, extra)) !== undefined) {\n\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\n\t\t\t\t// Otherwise just get the value from the style object\n\t\t\t\treturn style[name];\n\t\t\t}\n\t\t},\n\n\t\tcss: function (elem, name, extra, styles) {\n\t\t\tvar val, num, hooks,\n\t\t\t\torigName = camelCase(name),\n\t\t\t\tisCustomProp = rcustomProp.test(name);\n\n\t\t\t// Make sure that we're working with the right name. We don't\n\t\t\t// want to modify the value if it is a CSS custom property\n\t\t\t// since they are user-defined.\n\t\t\tif (!isCustomProp) {\n\t\t\t\tname = finalPropName(origName);\n\t\t\t}\n\n\t\t\t// Try prefixed name followed by the unprefixed name\n\t\t\thooks = jQuery.cssHooks[name] || jQuery.cssHooks[origName];\n\n\t\t\t// If a hook was provided get the computed value from there\n\t\t\tif (hooks && \"get\" in hooks) {\n\t\t\t\tval = hooks.get(elem, true, extra);\n\t\t\t}\n\n\t\t\t// Otherwise, if a way to get the computed value exists, use that\n\t\t\tif (val === undefined) {\n\t\t\t\tval = curCSS(elem, name, styles);\n\t\t\t}\n\n\t\t\t// Convert \"normal\" to computed value\n\t\t\tif (val === \"normal\" && name in cssNormalTransform) {\n\t\t\t\tval = cssNormalTransform[name];\n\t\t\t}\n\n\t\t\t// Make numeric if forced or a qualifier was provided and val looks numeric\n\t\t\tif (extra === \"\" || extra) {\n\t\t\t\tnum = parseFloat(val);\n\t\t\t\treturn extra === true || isFinite(num) ? num || 0 : val;\n\t\t\t}\n\n\t\t\treturn val;\n\t\t}\n\t});\n\n\tjQuery.each([\"height\", \"width\"], function (_i, dimension) {\n\t\tjQuery.cssHooks[dimension] = {\n\t\t\tget: function (elem, computed, extra) {\n\t\t\t\tif (computed) {\n\n\t\t\t\t\t// Certain elements can have dimension info if we invisibly show them\n\t\t\t\t\t// but it must have a current display style that would benefit\n\t\t\t\t\treturn rdisplayswap.test(jQuery.css(elem, \"display\")) &&\n\n\t\t\t\t\t\t// Support: Safari 8+\n\t\t\t\t\t\t// Table columns in Safari have non-zero offsetWidth & zero\n\t\t\t\t\t\t// getBoundingClientRect().width unless display is changed.\n\t\t\t\t\t\t// Support: IE <=11 only\n\t\t\t\t\t\t// Running getBoundingClientRect on a disconnected node\n\t\t\t\t\t\t// in IE throws an error.\n\t\t\t\t\t\t(!elem.getClientRects().length || !elem.getBoundingClientRect().width) ?\n\t\t\t\t\t\tswap(elem, cssShow, function () {\n\t\t\t\t\t\t\treturn getWidthOrHeight(elem, dimension, extra);\n\t\t\t\t\t\t}) :\n\t\t\t\t\t\tgetWidthOrHeight(elem, dimension, extra);\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tset: function (elem, value, extra) {\n\t\t\t\tvar matches,\n\t\t\t\t\tstyles = getStyles(elem),\n\n\t\t\t\t\t// Only read styles.position if the test has a chance to fail\n\t\t\t\t\t// to avoid forcing a reflow.\n\t\t\t\t\tscrollboxSizeBuggy = !support.scrollboxSize() &&\n\t\t\t\t\t\tstyles.position === \"absolute\",\n\n\t\t\t\t\t// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991)\n\t\t\t\t\tboxSizingNeeded = scrollboxSizeBuggy || extra,\n\t\t\t\t\tisBorderBox = boxSizingNeeded &&\n\t\t\t\t\t\tjQuery.css(elem, \"boxSizing\", false, styles) === \"border-box\",\n\t\t\t\t\tsubtract = extra ?\n\t\t\t\t\t\tboxModelAdjustment(\n\t\t\t\t\t\t\telem,\n\t\t\t\t\t\t\tdimension,\n\t\t\t\t\t\t\textra,\n\t\t\t\t\t\t\tisBorderBox,\n\t\t\t\t\t\t\tstyles\n\t\t\t\t\t\t) :\n\t\t\t\t\t\t0;\n\n\t\t\t\t// Account for unreliable border-box dimensions by comparing offset* to computed and\n\t\t\t\t// faking a content-box to get border and padding (gh-3699)\n\t\t\t\tif (isBorderBox && scrollboxSizeBuggy) {\n\t\t\t\t\tsubtract -= Math.ceil(\n\t\t\t\t\t\telem[\"offset\" + dimension[0].toUpperCase() + dimension.slice(1)] -\n\t\t\t\t\t\tparseFloat(styles[dimension]) -\n\t\t\t\t\t\tboxModelAdjustment(elem, dimension, \"border\", false, styles) -\n\t\t\t\t\t\t0.5\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\t// Convert to pixels if value adjustment is needed\n\t\t\t\tif (subtract && (matches = rcssNum.exec(value)) &&\n\t\t\t\t\t(matches[3] || \"px\") !== \"px\") {\n\n\t\t\t\t\telem.style[dimension] = value;\n\t\t\t\t\tvalue = jQuery.css(elem, dimension);\n\t\t\t\t}\n\n\t\t\t\treturn setPositiveNumber(elem, value, subtract);\n\t\t\t}\n\t\t};\n\t});\n\n\tjQuery.cssHooks.marginLeft = addGetHookIf(support.reliableMarginLeft,\n\t\tfunction (elem, computed) {\n\t\t\tif (computed) {\n\t\t\t\treturn (parseFloat(curCSS(elem, \"marginLeft\")) ||\n\t\t\t\t\telem.getBoundingClientRect().left -\n\t\t\t\t\tswap(elem, { marginLeft: 0 }, function () {\n\t\t\t\t\t\treturn elem.getBoundingClientRect().left;\n\t\t\t\t\t})\n\t\t\t\t) + \"px\";\n\t\t\t}\n\t\t}\n\t);\n\n\t// These hooks are used by animate to expand properties\n\tjQuery.each({\n\t\tmargin: \"\",\n\t\tpadding: \"\",\n\t\tborder: \"Width\"\n\t}, function (prefix, suffix) {\n\t\tjQuery.cssHooks[prefix + suffix] = {\n\t\t\texpand: function (value) {\n\t\t\t\tvar i = 0,\n\t\t\t\t\texpanded = {},\n\n\t\t\t\t\t// Assumes a single number if not a string\n\t\t\t\t\tparts = typeof value === \"string\" ? value.split(\" \") : [value];\n\n\t\t\t\tfor (; i < 4; i++) {\n\t\t\t\t\texpanded[prefix + cssExpand[i] + suffix] =\n\t\t\t\t\t\tparts[i] || parts[i - 2] || parts[0];\n\t\t\t\t}\n\n\t\t\t\treturn expanded;\n\t\t\t}\n\t\t};\n\n\t\tif (prefix !== \"margin\") {\n\t\t\tjQuery.cssHooks[prefix + suffix].set = setPositiveNumber;\n\t\t}\n\t});\n\n\tjQuery.fn.extend({\n\t\tcss: function (name, value) {\n\t\t\treturn access(this, function (elem, name, value) {\n\t\t\t\tvar styles, len,\n\t\t\t\t\tmap = {},\n\t\t\t\t\ti = 0;\n\n\t\t\t\tif (Array.isArray(name)) {\n\t\t\t\t\tstyles = getStyles(elem);\n\t\t\t\t\tlen = name.length;\n\n\t\t\t\t\tfor (; i < len; i++) {\n\t\t\t\t\t\tmap[name[i]] = jQuery.css(elem, name[i], false, styles);\n\t\t\t\t\t}\n\n\t\t\t\t\treturn map;\n\t\t\t\t}\n\n\t\t\t\treturn value !== undefined ?\n\t\t\t\t\tjQuery.style(elem, name, value) :\n\t\t\t\t\tjQuery.css(elem, name);\n\t\t\t}, name, value, arguments.length > 1);\n\t\t}\n\t});\n\n\n\tfunction Tween(elem, options, prop, end, easing) {\n\t\treturn new Tween.prototype.init(elem, options, prop, end, easing);\n\t}\n\tjQuery.Tween = Tween;\n\n\tTween.prototype = {\n\t\tconstructor: Tween,\n\t\tinit: function (elem, options, prop, end, easing, unit) {\n\t\t\tthis.elem = elem;\n\t\t\tthis.prop = prop;\n\t\t\tthis.easing = easing || jQuery.easing._default;\n\t\t\tthis.options = options;\n\t\t\tthis.start = this.now = this.cur();\n\t\t\tthis.end = end;\n\t\t\tthis.unit = unit || (jQuery.cssNumber[prop] ? \"\" : \"px\");\n\t\t},\n\t\tcur: function () {\n\t\t\tvar hooks = Tween.propHooks[this.prop];\n\n\t\t\treturn hooks && hooks.get ?\n\t\t\t\thooks.get(this) :\n\t\t\t\tTween.propHooks._default.get(this);\n\t\t},\n\t\trun: function (percent) {\n\t\t\tvar eased,\n\t\t\t\thooks = Tween.propHooks[this.prop];\n\n\t\t\tif (this.options.duration) {\n\t\t\t\tthis.pos = eased = jQuery.easing[this.easing](\n\t\t\t\t\tpercent, this.options.duration * percent, 0, 1, this.options.duration\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tthis.pos = eased = percent;\n\t\t\t}\n\t\t\tthis.now = (this.end - this.start) * eased + this.start;\n\n\t\t\tif (this.options.step) {\n\t\t\t\tthis.options.step.call(this.elem, this.now, this);\n\t\t\t}\n\n\t\t\tif (hooks && hooks.set) {\n\t\t\t\thooks.set(this);\n\t\t\t} else {\n\t\t\t\tTween.propHooks._default.set(this);\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t};\n\n\tTween.prototype.init.prototype = Tween.prototype;\n\n\tTween.propHooks = {\n\t\t_default: {\n\t\t\tget: function (tween) {\n\t\t\t\tvar result;\n\n\t\t\t\t// Use a property on the element directly when it is not a DOM element,\n\t\t\t\t// or when there is no matching style property that exists.\n\t\t\t\tif (tween.elem.nodeType !== 1 ||\n\t\t\t\t\ttween.elem[tween.prop] != null && tween.elem.style[tween.prop] == null) {\n\t\t\t\t\treturn tween.elem[tween.prop];\n\t\t\t\t}\n\n\t\t\t\t// Passing an empty string as a 3rd parameter to .css will automatically\n\t\t\t\t// attempt a parseFloat and fallback to a string if the parse fails.\n\t\t\t\t// Simple values such as \"10px\" are parsed to Float;\n\t\t\t\t// complex values such as \"rotate(1rad)\" are returned as-is.\n\t\t\t\tresult = jQuery.css(tween.elem, tween.prop, \"\");\n\n\t\t\t\t// Empty strings, null, undefined and \"auto\" are converted to 0.\n\t\t\t\treturn !result || result === \"auto\" ? 0 : result;\n\t\t\t},\n\t\t\tset: function (tween) {\n\n\t\t\t\t// Use step hook for back compat.\n\t\t\t\t// Use cssHook if its there.\n\t\t\t\t// Use .style if available and use plain properties where available.\n\t\t\t\tif (jQuery.fx.step[tween.prop]) {\n\t\t\t\t\tjQuery.fx.step[tween.prop](tween);\n\t\t\t\t} else if (tween.elem.nodeType === 1 && (\n\t\t\t\t\tjQuery.cssHooks[tween.prop] ||\n\t\t\t\t\ttween.elem.style[finalPropName(tween.prop)] != null)) {\n\t\t\t\t\tjQuery.style(tween.elem, tween.prop, tween.now + tween.unit);\n\t\t\t\t} else {\n\t\t\t\t\ttween.elem[tween.prop] = tween.now;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t// Support: IE <=9 only\n\t// Panic based approach to setting things on disconnected nodes\n\tTween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {\n\t\tset: function (tween) {\n\t\t\tif (tween.elem.nodeType && tween.elem.parentNode) {\n\t\t\t\ttween.elem[tween.prop] = tween.now;\n\t\t\t}\n\t\t}\n\t};\n\n\tjQuery.easing = {\n\t\tlinear: function (p) {\n\t\t\treturn p;\n\t\t},\n\t\tswing: function (p) {\n\t\t\treturn 0.5 - Math.cos(p * Math.PI) / 2;\n\t\t},\n\t\t_default: \"swing\"\n\t};\n\n\tjQuery.fx = Tween.prototype.init;\n\n\t// Back compat <1.8 extension point\n\tjQuery.fx.step = {};\n\n\n\n\n\tvar\n\t\tfxNow, inProgress,\n\t\trfxtypes = /^(?:toggle|show|hide)$/,\n\t\trrun = /queueHooks$/;\n\n\tfunction schedule() {\n\t\tif (inProgress) {\n\t\t\tif (document.hidden === false && window.requestAnimationFrame) {\n\t\t\t\twindow.requestAnimationFrame(schedule);\n\t\t\t} else {\n\t\t\t\twindow.setTimeout(schedule, jQuery.fx.interval);\n\t\t\t}\n\n\t\t\tjQuery.fx.tick();\n\t\t}\n\t}\n\n\t// Animations created synchronously will run synchronously\n\tfunction createFxNow() {\n\t\twindow.setTimeout(function () {\n\t\t\tfxNow = undefined;\n\t\t});\n\t\treturn (fxNow = Date.now());\n\t}\n\n\t// Generate parameters to create a standard animation\n\tfunction genFx(type, includeWidth) {\n\t\tvar which,\n\t\t\ti = 0,\n\t\t\tattrs = { height: type };\n\n\t\t// If we include width, step value is 1 to do all cssExpand values,\n\t\t// otherwise step value is 2 to skip over Left and Right\n\t\tincludeWidth = includeWidth ? 1 : 0;\n\t\tfor (; i < 4; i += 2 - includeWidth) {\n\t\t\twhich = cssExpand[i];\n\t\t\tattrs[\"margin\" + which] = attrs[\"padding\" + which] = type;\n\t\t}\n\n\t\tif (includeWidth) {\n\t\t\tattrs.opacity = attrs.width = type;\n\t\t}\n\n\t\treturn attrs;\n\t}\n\n\tfunction createTween(value, prop, animation) {\n\t\tvar tween,\n\t\t\tcollection = (Animation.tweeners[prop] || []).concat(Animation.tweeners[\"*\"]),\n\t\t\tindex = 0,\n\t\t\tlength = collection.length;\n\t\tfor (; index < length; index++) {\n\t\t\tif ((tween = collection[index].call(animation, prop, value))) {\n\n\t\t\t\t// We're done with this property\n\t\t\t\treturn tween;\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction defaultPrefilter(elem, props, opts) {\n\t\tvar prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display,\n\t\t\tisBox = \"width\" in props || \"height\" in props,\n\t\t\tanim = this,\n\t\t\torig = {},\n\t\t\tstyle = elem.style,\n\t\t\thidden = elem.nodeType && isHiddenWithinTree(elem),\n\t\t\tdataShow = dataPriv.get(elem, \"fxshow\");\n\n\t\t// Queue-skipping animations hijack the fx hooks\n\t\tif (!opts.queue) {\n\t\t\thooks = jQuery._queueHooks(elem, \"fx\");\n\t\t\tif (hooks.unqueued == null) {\n\t\t\t\thooks.unqueued = 0;\n\t\t\t\toldfire = hooks.empty.fire;\n\t\t\t\thooks.empty.fire = function () {\n\t\t\t\t\tif (!hooks.unqueued) {\n\t\t\t\t\t\toldfire();\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t\thooks.unqueued++;\n\n\t\t\tanim.always(function () {\n\n\t\t\t\t// Ensure the complete handler is called before this completes\n\t\t\t\tanim.always(function () {\n\t\t\t\t\thooks.unqueued--;\n\t\t\t\t\tif (!jQuery.queue(elem, \"fx\").length) {\n\t\t\t\t\t\thooks.empty.fire();\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\n\t\t// Detect show/hide animations\n\t\tfor (prop in props) {\n\t\t\tvalue = props[prop];\n\t\t\tif (rfxtypes.test(value)) {\n\t\t\t\tdelete props[prop];\n\t\t\t\ttoggle = toggle || value === \"toggle\";\n\t\t\t\tif (value === (hidden ? \"hide\" : \"show\")) {\n\n\t\t\t\t\t// Pretend to be hidden if this is a \"show\" and\n\t\t\t\t\t// there is still data from a stopped show/hide\n\t\t\t\t\tif (value === \"show\" && dataShow && dataShow[prop] !== undefined) {\n\t\t\t\t\t\thidden = true;\n\n\t\t\t\t\t\t// Ignore all other no-op show/hide data\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\torig[prop] = dataShow && dataShow[prop] || jQuery.style(elem, prop);\n\t\t\t}\n\t\t}\n\n\t\t// Bail out if this is a no-op like .hide().hide()\n\t\tpropTween = !jQuery.isEmptyObject(props);\n\t\tif (!propTween && jQuery.isEmptyObject(orig)) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Restrict \"overflow\" and \"display\" styles during box animations\n\t\tif (isBox && elem.nodeType === 1) {\n\n\t\t\t// Support: IE <=9 - 11, Edge 12 - 15\n\t\t\t// Record all 3 overflow attributes because IE does not infer the shorthand\n\t\t\t// from identically-valued overflowX and overflowY and Edge just mirrors\n\t\t\t// the overflowX value there.\n\t\t\topts.overflow = [style.overflow, style.overflowX, style.overflowY];\n\n\t\t\t// Identify a display type, preferring old show/hide data over the CSS cascade\n\t\t\trestoreDisplay = dataShow && dataShow.display;\n\t\t\tif (restoreDisplay == null) {\n\t\t\t\trestoreDisplay = dataPriv.get(elem, \"display\");\n\t\t\t}\n\t\t\tdisplay = jQuery.css(elem, \"display\");\n\t\t\tif (display === \"none\") {\n\t\t\t\tif (restoreDisplay) {\n\t\t\t\t\tdisplay = restoreDisplay;\n\t\t\t\t} else {\n\n\t\t\t\t\t// Get nonempty value(s) by temporarily forcing visibility\n\t\t\t\t\tshowHide([elem], true);\n\t\t\t\t\trestoreDisplay = elem.style.display || restoreDisplay;\n\t\t\t\t\tdisplay = jQuery.css(elem, \"display\");\n\t\t\t\t\tshowHide([elem]);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Animate inline elements as inline-block\n\t\t\tif (display === \"inline\" || display === \"inline-block\" && restoreDisplay != null) {\n\t\t\t\tif (jQuery.css(elem, \"float\") === \"none\") {\n\n\t\t\t\t\t// Restore the original display value at the end of pure show/hide animations\n\t\t\t\t\tif (!propTween) {\n\t\t\t\t\t\tanim.done(function () {\n\t\t\t\t\t\t\tstyle.display = restoreDisplay;\n\t\t\t\t\t\t});\n\t\t\t\t\t\tif (restoreDisplay == null) {\n\t\t\t\t\t\t\tdisplay = style.display;\n\t\t\t\t\t\t\trestoreDisplay = display === \"none\" ? \"\" : display;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tstyle.display = \"inline-block\";\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (opts.overflow) {\n\t\t\tstyle.overflow = \"hidden\";\n\t\t\tanim.always(function () {\n\t\t\t\tstyle.overflow = opts.overflow[0];\n\t\t\t\tstyle.overflowX = opts.overflow[1];\n\t\t\t\tstyle.overflowY = opts.overflow[2];\n\t\t\t});\n\t\t}\n\n\t\t// Implement show/hide animations\n\t\tpropTween = false;\n\t\tfor (prop in orig) {\n\n\t\t\t// General show/hide setup for this element animation\n\t\t\tif (!propTween) {\n\t\t\t\tif (dataShow) {\n\t\t\t\t\tif (\"hidden\" in dataShow) {\n\t\t\t\t\t\thidden = dataShow.hidden;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tdataShow = dataPriv.access(elem, \"fxshow\", { display: restoreDisplay });\n\t\t\t\t}\n\n\t\t\t\t// Store hidden/visible for toggle so `.stop().toggle()` \"reverses\"\n\t\t\t\tif (toggle) {\n\t\t\t\t\tdataShow.hidden = !hidden;\n\t\t\t\t}\n\n\t\t\t\t// Show elements before animating them\n\t\t\t\tif (hidden) {\n\t\t\t\t\tshowHide([elem], true);\n\t\t\t\t}\n\n\t\t\t\t/* eslint-disable no-loop-func */\n\n\t\t\t\tanim.done(function () {\n\n\t\t\t\t\t/* eslint-enable no-loop-func */\n\n\t\t\t\t\t// The final step of a \"hide\" animation is actually hiding the element\n\t\t\t\t\tif (!hidden) {\n\t\t\t\t\t\tshowHide([elem]);\n\t\t\t\t\t}\n\t\t\t\t\tdataPriv.remove(elem, \"fxshow\");\n\t\t\t\t\tfor (prop in orig) {\n\t\t\t\t\t\tjQuery.style(elem, prop, orig[prop]);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// Per-property setup\n\t\t\tpropTween = createTween(hidden ? dataShow[prop] : 0, prop, anim);\n\t\t\tif (!(prop in dataShow)) {\n\t\t\t\tdataShow[prop] = propTween.start;\n\t\t\t\tif (hidden) {\n\t\t\t\t\tpropTween.end = propTween.start;\n\t\t\t\t\tpropTween.start = 0;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction propFilter(props, specialEasing) {\n\t\tvar index, name, easing, value, hooks;\n\n\t\t// camelCase, specialEasing and expand cssHook pass\n\t\tfor (index in props) {\n\t\t\tname = camelCase(index);\n\t\t\teasing = specialEasing[name];\n\t\t\tvalue = props[index];\n\t\t\tif (Array.isArray(value)) {\n\t\t\t\teasing = value[1];\n\t\t\t\tvalue = props[index] = value[0];\n\t\t\t}\n\n\t\t\tif (index !== name) {\n\t\t\t\tprops[name] = value;\n\t\t\t\tdelete props[index];\n\t\t\t}\n\n\t\t\thooks = jQuery.cssHooks[name];\n\t\t\tif (hooks && \"expand\" in hooks) {\n\t\t\t\tvalue = hooks.expand(value);\n\t\t\t\tdelete props[name];\n\n\t\t\t\t// Not quite $.extend, this won't overwrite existing keys.\n\t\t\t\t// Reusing 'index' because we have the correct \"name\"\n\t\t\t\tfor (index in value) {\n\t\t\t\t\tif (!(index in props)) {\n\t\t\t\t\t\tprops[index] = value[index];\n\t\t\t\t\t\tspecialEasing[index] = easing;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tspecialEasing[name] = easing;\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction Animation(elem, properties, options) {\n\t\tvar result,\n\t\t\tstopped,\n\t\t\tindex = 0,\n\t\t\tlength = Animation.prefilters.length,\n\t\t\tdeferred = jQuery.Deferred().always(function () {\n\n\t\t\t\t// Don't match elem in the :animated selector\n\t\t\t\tdelete tick.elem;\n\t\t\t}),\n\t\t\ttick = function () {\n\t\t\t\tif (stopped) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tvar currentTime = fxNow || createFxNow(),\n\t\t\t\t\tremaining = Math.max(0, animation.startTime + animation.duration - currentTime),\n\n\t\t\t\t\t// Support: Android 2.3 only\n\t\t\t\t\t// Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (trac-12497)\n\t\t\t\t\ttemp = remaining / animation.duration || 0,\n\t\t\t\t\tpercent = 1 - temp,\n\t\t\t\t\tindex = 0,\n\t\t\t\t\tlength = animation.tweens.length;\n\n\t\t\t\tfor (; index < length; index++) {\n\t\t\t\t\tanimation.tweens[index].run(percent);\n\t\t\t\t}\n\n\t\t\t\tdeferred.notifyWith(elem, [animation, percent, remaining]);\n\n\t\t\t\t// If there's more to do, yield\n\t\t\t\tif (percent < 1 && length) {\n\t\t\t\t\treturn remaining;\n\t\t\t\t}\n\n\t\t\t\t// If this was an empty animation, synthesize a final progress notification\n\t\t\t\tif (!length) {\n\t\t\t\t\tdeferred.notifyWith(elem, [animation, 1, 0]);\n\t\t\t\t}\n\n\t\t\t\t// Resolve the animation and report its conclusion\n\t\t\t\tdeferred.resolveWith(elem, [animation]);\n\t\t\t\treturn false;\n\t\t\t},\n\t\t\tanimation = deferred.promise({\n\t\t\t\telem: elem,\n\t\t\t\tprops: jQuery.extend({}, properties),\n\t\t\t\topts: jQuery.extend(true, {\n\t\t\t\t\tspecialEasing: {},\n\t\t\t\t\teasing: jQuery.easing._default\n\t\t\t\t}, options),\n\t\t\t\toriginalProperties: properties,\n\t\t\t\toriginalOptions: options,\n\t\t\t\tstartTime: fxNow || createFxNow(),\n\t\t\t\tduration: options.duration,\n\t\t\t\ttweens: [],\n\t\t\t\tcreateTween: function (prop, end) {\n\t\t\t\t\tvar tween = jQuery.Tween(elem, animation.opts, prop, end,\n\t\t\t\t\t\tanimation.opts.specialEasing[prop] || animation.opts.easing);\n\t\t\t\t\tanimation.tweens.push(tween);\n\t\t\t\t\treturn tween;\n\t\t\t\t},\n\t\t\t\tstop: function (gotoEnd) {\n\t\t\t\t\tvar index = 0,\n\n\t\t\t\t\t\t// If we are going to the end, we want to run all the tweens\n\t\t\t\t\t\t// otherwise we skip this part\n\t\t\t\t\t\tlength = gotoEnd ? animation.tweens.length : 0;\n\t\t\t\t\tif (stopped) {\n\t\t\t\t\t\treturn this;\n\t\t\t\t\t}\n\t\t\t\t\tstopped = true;\n\t\t\t\t\tfor (; index < length; index++) {\n\t\t\t\t\t\tanimation.tweens[index].run(1);\n\t\t\t\t\t}\n\n\t\t\t\t\t// Resolve when we played the last frame; otherwise, reject\n\t\t\t\t\tif (gotoEnd) {\n\t\t\t\t\t\tdeferred.notifyWith(elem, [animation, 1, 0]);\n\t\t\t\t\t\tdeferred.resolveWith(elem, [animation, gotoEnd]);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdeferred.rejectWith(elem, [animation, gotoEnd]);\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t}),\n\t\t\tprops = animation.props;\n\n\t\tpropFilter(props, animation.opts.specialEasing);\n\n\t\tfor (; index < length; index++) {\n\t\t\tresult = Animation.prefilters[index].call(animation, elem, props, animation.opts);\n\t\t\tif (result) {\n\t\t\t\tif (isFunction(result.stop)) {\n\t\t\t\t\tjQuery._queueHooks(animation.elem, animation.opts.queue).stop =\n\t\t\t\t\t\tresult.stop.bind(result);\n\t\t\t\t}\n\t\t\t\treturn result;\n\t\t\t}\n\t\t}\n\n\t\tjQuery.map(props, createTween, animation);\n\n\t\tif (isFunction(animation.opts.start)) {\n\t\t\tanimation.opts.start.call(elem, animation);\n\t\t}\n\n\t\t// Attach callbacks from options\n\t\tanimation\n\t\t\t.progress(animation.opts.progress)\n\t\t\t.done(animation.opts.done, animation.opts.complete)\n\t\t\t.fail(animation.opts.fail)\n\t\t\t.always(animation.opts.always);\n\n\t\tjQuery.fx.timer(\n\t\t\tjQuery.extend(tick, {\n\t\t\t\telem: elem,\n\t\t\t\tanim: animation,\n\t\t\t\tqueue: animation.opts.queue\n\t\t\t})\n\t\t);\n\n\t\treturn animation;\n\t}\n\n\tjQuery.Animation = jQuery.extend(Animation, {\n\n\t\ttweeners: {\n\t\t\t\"*\": [function (prop, value) {\n\t\t\t\tvar tween = this.createTween(prop, value);\n\t\t\t\tadjustCSS(tween.elem, prop, rcssNum.exec(value), tween);\n\t\t\t\treturn tween;\n\t\t\t}]\n\t\t},\n\n\t\ttweener: function (props, callback) {\n\t\t\tif (isFunction(props)) {\n\t\t\t\tcallback = props;\n\t\t\t\tprops = [\"*\"];\n\t\t\t} else {\n\t\t\t\tprops = props.match(rnothtmlwhite);\n\t\t\t}\n\n\t\t\tvar prop,\n\t\t\t\tindex = 0,\n\t\t\t\tlength = props.length;\n\n\t\t\tfor (; index < length; index++) {\n\t\t\t\tprop = props[index];\n\t\t\t\tAnimation.tweeners[prop] = Animation.tweeners[prop] || [];\n\t\t\t\tAnimation.tweeners[prop].unshift(callback);\n\t\t\t}\n\t\t},\n\n\t\tprefilters: [defaultPrefilter],\n\n\t\tprefilter: function (callback, prepend) {\n\t\t\tif (prepend) {\n\t\t\t\tAnimation.prefilters.unshift(callback);\n\t\t\t} else {\n\t\t\t\tAnimation.prefilters.push(callback);\n\t\t\t}\n\t\t}\n\t});\n\n\tjQuery.speed = function (speed, easing, fn) {\n\t\tvar opt = speed && typeof speed === \"object\" ? jQuery.extend({}, speed) : {\n\t\t\tcomplete: fn || !fn && easing ||\n\t\t\t\tisFunction(speed) && speed,\n\t\t\tduration: speed,\n\t\t\teasing: fn && easing || easing && !isFunction(easing) && easing\n\t\t};\n\n\t\t// Go to the end state if fx are off\n\t\tif (jQuery.fx.off) {\n\t\t\topt.duration = 0;\n\n\t\t} else {\n\t\t\tif (typeof opt.duration !== \"number\") {\n\t\t\t\tif (opt.duration in jQuery.fx.speeds) {\n\t\t\t\t\topt.duration = jQuery.fx.speeds[opt.duration];\n\n\t\t\t\t} else {\n\t\t\t\t\topt.duration = jQuery.fx.speeds._default;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Normalize opt.queue - true/undefined/null -> \"fx\"\n\t\tif (opt.queue == null || opt.queue === true) {\n\t\t\topt.queue = \"fx\";\n\t\t}\n\n\t\t// Queueing\n\t\topt.old = opt.complete;\n\n\t\topt.complete = function () {\n\t\t\tif (isFunction(opt.old)) {\n\t\t\t\topt.old.call(this);\n\t\t\t}\n\n\t\t\tif (opt.queue) {\n\t\t\t\tjQuery.dequeue(this, opt.queue);\n\t\t\t}\n\t\t};\n\n\t\treturn opt;\n\t};\n\n\tjQuery.fn.extend({\n\t\tfadeTo: function (speed, to, easing, callback) {\n\n\t\t\t// Show any hidden elements after setting opacity to 0\n\t\t\treturn this.filter(isHiddenWithinTree).css(\"opacity\", 0).show()\n\n\t\t\t\t// Animate to the value specified\n\t\t\t\t.end().animate({ opacity: to }, speed, easing, callback);\n\t\t},\n\t\tanimate: function (prop, speed, easing, callback) {\n\t\t\tvar empty = jQuery.isEmptyObject(prop),\n\t\t\t\toptall = jQuery.speed(speed, easing, callback),\n\t\t\t\tdoAnimation = function () {\n\n\t\t\t\t\t// Operate on a copy of prop so per-property easing won't be lost\n\t\t\t\t\tvar anim = Animation(this, jQuery.extend({}, prop), optall);\n\n\t\t\t\t\t// Empty animations, or finishing resolves immediately\n\t\t\t\t\tif (empty || dataPriv.get(this, \"finish\")) {\n\t\t\t\t\t\tanim.stop(true);\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\tdoAnimation.finish = doAnimation;\n\n\t\t\treturn empty || optall.queue === false ?\n\t\t\t\tthis.each(doAnimation) :\n\t\t\t\tthis.queue(optall.queue, doAnimation);\n\t\t},\n\t\tstop: function (type, clearQueue, gotoEnd) {\n\t\t\tvar stopQueue = function (hooks) {\n\t\t\t\tvar stop = hooks.stop;\n\t\t\t\tdelete hooks.stop;\n\t\t\t\tstop(gotoEnd);\n\t\t\t};\n\n\t\t\tif (typeof type !== \"string\") {\n\t\t\t\tgotoEnd = clearQueue;\n\t\t\t\tclearQueue = type;\n\t\t\t\ttype = undefined;\n\t\t\t}\n\t\t\tif (clearQueue) {\n\t\t\t\tthis.queue(type || \"fx\", []);\n\t\t\t}\n\n\t\t\treturn this.each(function () {\n\t\t\t\tvar dequeue = true,\n\t\t\t\t\tindex = type != null && type + \"queueHooks\",\n\t\t\t\t\ttimers = jQuery.timers,\n\t\t\t\t\tdata = dataPriv.get(this);\n\n\t\t\t\tif (index) {\n\t\t\t\t\tif (data[index] && data[index].stop) {\n\t\t\t\t\t\tstopQueue(data[index]);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tfor (index in data) {\n\t\t\t\t\t\tif (data[index] && data[index].stop && rrun.test(index)) {\n\t\t\t\t\t\t\tstopQueue(data[index]);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tfor (index = timers.length; index--;) {\n\t\t\t\t\tif (timers[index].elem === this &&\n\t\t\t\t\t\t(type == null || timers[index].queue === type)) {\n\n\t\t\t\t\t\ttimers[index].anim.stop(gotoEnd);\n\t\t\t\t\t\tdequeue = false;\n\t\t\t\t\t\ttimers.splice(index, 1);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Start the next in the queue if the last step wasn't forced.\n\t\t\t\t// Timers currently will call their complete callbacks, which\n\t\t\t\t// will dequeue but only if they were gotoEnd.\n\t\t\t\tif (dequeue || !gotoEnd) {\n\t\t\t\t\tjQuery.dequeue(this, type);\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\t\tfinish: function (type) {\n\t\t\tif (type !== false) {\n\t\t\t\ttype = type || \"fx\";\n\t\t\t}\n\t\t\treturn this.each(function () {\n\t\t\t\tvar index,\n\t\t\t\t\tdata = dataPriv.get(this),\n\t\t\t\t\tqueue = data[type + \"queue\"],\n\t\t\t\t\thooks = data[type + \"queueHooks\"],\n\t\t\t\t\ttimers = jQuery.timers,\n\t\t\t\t\tlength = queue ? queue.length : 0;\n\n\t\t\t\t// Enable finishing flag on private data\n\t\t\t\tdata.finish = true;\n\n\t\t\t\t// Empty the queue first\n\t\t\t\tjQuery.queue(this, type, []);\n\n\t\t\t\tif (hooks && hooks.stop) {\n\t\t\t\t\thooks.stop.call(this, true);\n\t\t\t\t}\n\n\t\t\t\t// Look for any active animations, and finish them\n\t\t\t\tfor (index = timers.length; index--;) {\n\t\t\t\t\tif (timers[index].elem === this && timers[index].queue === type) {\n\t\t\t\t\t\ttimers[index].anim.stop(true);\n\t\t\t\t\t\ttimers.splice(index, 1);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Look for any animations in the old queue and finish them\n\t\t\t\tfor (index = 0; index < length; index++) {\n\t\t\t\t\tif (queue[index] && queue[index].finish) {\n\t\t\t\t\t\tqueue[index].finish.call(this);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Turn off finishing flag\n\t\t\t\tdelete data.finish;\n\t\t\t});\n\t\t}\n\t});\n\n\tjQuery.each([\"toggle\", \"show\", \"hide\"], function (_i, name) {\n\t\tvar cssFn = jQuery.fn[name];\n\t\tjQuery.fn[name] = function (speed, easing, callback) {\n\t\t\treturn speed == null || typeof speed === \"boolean\" ?\n\t\t\t\tcssFn.apply(this, arguments) :\n\t\t\t\tthis.animate(genFx(name, true), speed, easing, callback);\n\t\t};\n\t});\n\n\t// Generate shortcuts for custom animations\n\tjQuery.each({\n\t\tslideDown: genFx(\"show\"),\n\t\tslideUp: genFx(\"hide\"),\n\t\tslideToggle: genFx(\"toggle\"),\n\t\tfadeIn: { opacity: \"show\" },\n\t\tfadeOut: { opacity: \"hide\" },\n\t\tfadeToggle: { opacity: \"toggle\" }\n\t}, function (name, props) {\n\t\tjQuery.fn[name] = function (speed, easing, callback) {\n\t\t\treturn this.animate(props, speed, easing, callback);\n\t\t};\n\t});\n\n\tjQuery.timers = [];\n\tjQuery.fx.tick = function () {\n\t\tvar timer,\n\t\t\ti = 0,\n\t\t\ttimers = jQuery.timers;\n\n\t\tfxNow = Date.now();\n\n\t\tfor (; i < timers.length; i++) {\n\t\t\ttimer = timers[i];\n\n\t\t\t// Run the timer and safely remove it when done (allowing for external removal)\n\t\t\tif (!timer() && timers[i] === timer) {\n\t\t\t\ttimers.splice(i--, 1);\n\t\t\t}\n\t\t}\n\n\t\tif (!timers.length) {\n\t\t\tjQuery.fx.stop();\n\t\t}\n\t\tfxNow = undefined;\n\t};\n\n\tjQuery.fx.timer = function (timer) {\n\t\tjQuery.timers.push(timer);\n\t\tjQuery.fx.start();\n\t};\n\n\tjQuery.fx.interval = 13;\n\tjQuery.fx.start = function () {\n\t\tif (inProgress) {\n\t\t\treturn;\n\t\t}\n\n\t\tinProgress = true;\n\t\tschedule();\n\t};\n\n\tjQuery.fx.stop = function () {\n\t\tinProgress = null;\n\t};\n\n\tjQuery.fx.speeds = {\n\t\tslow: 600,\n\t\tfast: 200,\n\n\t\t// Default speed\n\t\t_default: 400\n\t};\n\n\n\t// Based off of the plugin by Clint Helfers, with permission.\n\tjQuery.fn.delay = function (time, type) {\n\t\ttime = jQuery.fx ? jQuery.fx.speeds[time] || time : time;\n\t\ttype = type || \"fx\";\n\n\t\treturn this.queue(type, function (next, hooks) {\n\t\t\tvar timeout = window.setTimeout(next, time);\n\t\t\thooks.stop = function () {\n\t\t\t\twindow.clearTimeout(timeout);\n\t\t\t};\n\t\t});\n\t};\n\n\n\t(function () {\n\t\tvar input = document.createElement(\"input\"),\n\t\t\tselect = document.createElement(\"select\"),\n\t\t\topt = select.appendChild(document.createElement(\"option\"));\n\n\t\tinput.type = \"checkbox\";\n\n\t\t// Support: Android <=4.3 only\n\t\t// Default value for a checkbox should be \"on\"\n\t\tsupport.checkOn = input.value !== \"\";\n\n\t\t// Support: IE <=11 only\n\t\t// Must access selectedIndex to make default options select\n\t\tsupport.optSelected = opt.selected;\n\n\t\t// Support: IE <=11 only\n\t\t// An input loses its value after becoming a radio\n\t\tinput = document.createElement(\"input\");\n\t\tinput.value = \"t\";\n\t\tinput.type = \"radio\";\n\t\tsupport.radioValue = input.value === \"t\";\n\t})();\n\n\n\tvar boolHook,\n\t\tattrHandle = jQuery.expr.attrHandle;\n\n\tjQuery.fn.extend({\n\t\tattr: function (name, value) {\n\t\t\treturn access(this, jQuery.attr, name, value, arguments.length > 1);\n\t\t},\n\n\t\tremoveAttr: function (name) {\n\t\t\treturn this.each(function () {\n\t\t\t\tjQuery.removeAttr(this, name);\n\t\t\t});\n\t\t}\n\t});\n\n\tjQuery.extend({\n\t\tattr: function (elem, name, value) {\n\t\t\tvar ret, hooks,\n\t\t\t\tnType = elem.nodeType;\n\n\t\t\t// Don't get/set attributes on text, comment and attribute nodes\n\t\t\tif (nType === 3 || nType === 8 || nType === 2) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Fallback to prop when attributes are not supported\n\t\t\tif (typeof elem.getAttribute === \"undefined\") {\n\t\t\t\treturn jQuery.prop(elem, name, value);\n\t\t\t}\n\n\t\t\t// Attribute hooks are determined by the lowercase version\n\t\t\t// Grab necessary hook if one is defined\n\t\t\tif (nType !== 1 || !jQuery.isXMLDoc(elem)) {\n\t\t\t\thooks = jQuery.attrHooks[name.toLowerCase()] ||\n\t\t\t\t\t(jQuery.expr.match.bool.test(name) ? boolHook : undefined);\n\t\t\t}\n\n\t\t\tif (value !== undefined) {\n\t\t\t\tif (value === null) {\n\t\t\t\t\tjQuery.removeAttr(elem, name);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (hooks && \"set\" in hooks &&\n\t\t\t\t\t(ret = hooks.set(elem, value, name)) !== undefined) {\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\n\t\t\t\telem.setAttribute(name, value + \"\");\n\t\t\t\treturn value;\n\t\t\t}\n\n\t\t\tif (hooks && \"get\" in hooks && (ret = hooks.get(elem, name)) !== null) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\tret = jQuery.find.attr(elem, name);\n\n\t\t\t// Non-existent attributes return null, we normalize to undefined\n\t\t\treturn ret == null ? undefined : ret;\n\t\t},\n\n\t\tattrHooks: {\n\t\t\ttype: {\n\t\t\t\tset: function (elem, value) {\n\t\t\t\t\tif (!support.radioValue && value === \"radio\" &&\n\t\t\t\t\t\tnodeName(elem, \"input\")) {\n\t\t\t\t\t\tvar val = elem.value;\n\t\t\t\t\t\telem.setAttribute(\"type\", value);\n\t\t\t\t\t\tif (val) {\n\t\t\t\t\t\t\telem.value = val;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn value;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tremoveAttr: function (elem, value) {\n\t\t\tvar name,\n\t\t\t\ti = 0,\n\n\t\t\t\t// Attribute names can contain non-HTML whitespace characters\n\t\t\t\t// https://html.spec.whatwg.org/multipage/syntax.html#attributes-2\n\t\t\t\tattrNames = value && value.match(rnothtmlwhite);\n\n\t\t\tif (attrNames && elem.nodeType === 1) {\n\t\t\t\twhile ((name = attrNames[i++])) {\n\t\t\t\t\telem.removeAttribute(name);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\n\t// Hooks for boolean attributes\n\tboolHook = {\n\t\tset: function (elem, value, name) {\n\t\t\tif (value === false) {\n\n\t\t\t\t// Remove boolean attributes when set to false\n\t\t\t\tjQuery.removeAttr(elem, name);\n\t\t\t} else {\n\t\t\t\telem.setAttribute(name, name);\n\t\t\t}\n\t\t\treturn name;\n\t\t}\n\t};\n\n\tjQuery.each(jQuery.expr.match.bool.source.match(/\\w+/g), function (_i, name) {\n\t\tvar getter = attrHandle[name] || jQuery.find.attr;\n\n\t\tattrHandle[name] = function (elem, name, isXML) {\n\t\t\tvar ret, handle,\n\t\t\t\tlowercaseName = name.toLowerCase();\n\n\t\t\tif (!isXML) {\n\n\t\t\t\t// Avoid an infinite loop by temporarily removing this function from the getter\n\t\t\t\thandle = attrHandle[lowercaseName];\n\t\t\t\tattrHandle[lowercaseName] = ret;\n\t\t\t\tret = getter(elem, name, isXML) != null ?\n\t\t\t\t\tlowercaseName :\n\t\t\t\t\tnull;\n\t\t\t\tattrHandle[lowercaseName] = handle;\n\t\t\t}\n\t\t\treturn ret;\n\t\t};\n\t});\n\n\n\n\n\tvar rfocusable = /^(?:input|select|textarea|button)$/i,\n\t\trclickable = /^(?:a|area)$/i;\n\n\tjQuery.fn.extend({\n\t\tprop: function (name, value) {\n\t\t\treturn access(this, jQuery.prop, name, value, arguments.length > 1);\n\t\t},\n\n\t\tremoveProp: function (name) {\n\t\t\treturn this.each(function () {\n\t\t\t\tdelete this[jQuery.propFix[name] || name];\n\t\t\t});\n\t\t}\n\t});\n\n\tjQuery.extend({\n\t\tprop: function (elem, name, value) {\n\t\t\tvar ret, hooks,\n\t\t\t\tnType = elem.nodeType;\n\n\t\t\t// Don't get/set properties on text, comment and attribute nodes\n\t\t\tif (nType === 3 || nType === 8 || nType === 2) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (nType !== 1 || !jQuery.isXMLDoc(elem)) {\n\n\t\t\t\t// Fix name and attach hooks\n\t\t\t\tname = jQuery.propFix[name] || name;\n\t\t\t\thooks = jQuery.propHooks[name];\n\t\t\t}\n\n\t\t\tif (value !== undefined) {\n\t\t\t\tif (hooks && \"set\" in hooks &&\n\t\t\t\t\t(ret = hooks.set(elem, value, name)) !== undefined) {\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\n\t\t\t\treturn (elem[name] = value);\n\t\t\t}\n\n\t\t\tif (hooks && \"get\" in hooks && (ret = hooks.get(elem, name)) !== null) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\treturn elem[name];\n\t\t},\n\n\t\tpropHooks: {\n\t\t\ttabIndex: {\n\t\t\t\tget: function (elem) {\n\n\t\t\t\t\t// Support: IE <=9 - 11 only\n\t\t\t\t\t// elem.tabIndex doesn't always return the\n\t\t\t\t\t// correct value when it hasn't been explicitly set\n\t\t\t\t\t// Use proper attribute retrieval (trac-12072)\n\t\t\t\t\tvar tabindex = jQuery.find.attr(elem, \"tabindex\");\n\n\t\t\t\t\tif (tabindex) {\n\t\t\t\t\t\treturn parseInt(tabindex, 10);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (\n\t\t\t\t\t\trfocusable.test(elem.nodeName) ||\n\t\t\t\t\t\trclickable.test(elem.nodeName) &&\n\t\t\t\t\t\telem.href\n\t\t\t\t\t) {\n\t\t\t\t\t\treturn 0;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn -1;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tpropFix: {\n\t\t\t\"for\": \"htmlFor\",\n\t\t\t\"class\": \"className\"\n\t\t}\n\t});\n\n\t// Support: IE <=11 only\n\t// Accessing the selectedIndex property\n\t// forces the browser to respect setting selected\n\t// on the option\n\t// The getter ensures a default option is selected\n\t// when in an optgroup\n\t// eslint rule \"no-unused-expressions\" is disabled for this code\n\t// since it considers such accessions noop\n\tif (!support.optSelected) {\n\t\tjQuery.propHooks.selected = {\n\t\t\tget: function (elem) {\n\n\t\t\t\t/* eslint no-unused-expressions: \"off\" */\n\n\t\t\t\tvar parent = elem.parentNode;\n\t\t\t\tif (parent && parent.parentNode) {\n\t\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t\t}\n\t\t\t\treturn null;\n\t\t\t},\n\t\t\tset: function (elem) {\n\n\t\t\t\t/* eslint no-unused-expressions: \"off\" */\n\n\t\t\t\tvar parent = elem.parentNode;\n\t\t\t\tif (parent) {\n\t\t\t\t\tparent.selectedIndex;\n\n\t\t\t\t\tif (parent.parentNode) {\n\t\t\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n\n\tjQuery.each([\n\t\t\"tabIndex\",\n\t\t\"readOnly\",\n\t\t\"maxLength\",\n\t\t\"cellSpacing\",\n\t\t\"cellPadding\",\n\t\t\"rowSpan\",\n\t\t\"colSpan\",\n\t\t\"useMap\",\n\t\t\"frameBorder\",\n\t\t\"contentEditable\"\n\t], function () {\n\t\tjQuery.propFix[this.toLowerCase()] = this;\n\t});\n\n\n\n\n\t// Strip and collapse whitespace according to HTML spec\n\t// https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace\n\tfunction stripAndCollapse(value) {\n\t\tvar tokens = value.match(rnothtmlwhite) || [];\n\t\treturn tokens.join(\" \");\n\t}\n\n\n\tfunction getClass(elem) {\n\t\treturn elem.getAttribute && elem.getAttribute(\"class\") || \"\";\n\t}\n\n\tfunction classesToArray(value) {\n\t\tif (Array.isArray(value)) {\n\t\t\treturn value;\n\t\t}\n\t\tif (typeof value === \"string\") {\n\t\t\treturn value.match(rnothtmlwhite) || [];\n\t\t}\n\t\treturn [];\n\t}\n\n\tjQuery.fn.extend({\n\t\taddClass: function (value) {\n\t\t\tvar classNames, cur, curValue, className, i, finalValue;\n\n\t\t\tif (isFunction(value)) {\n\t\t\t\treturn this.each(function (j) {\n\t\t\t\t\tjQuery(this).addClass(value.call(this, j, getClass(this)));\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tclassNames = classesToArray(value);\n\n\t\t\tif (classNames.length) {\n\t\t\t\treturn this.each(function () {\n\t\t\t\t\tcurValue = getClass(this);\n\t\t\t\t\tcur = this.nodeType === 1 && (\" \" + stripAndCollapse(curValue) + \" \");\n\n\t\t\t\t\tif (cur) {\n\t\t\t\t\t\tfor (i = 0; i < classNames.length; i++) {\n\t\t\t\t\t\t\tclassName = classNames[i];\n\t\t\t\t\t\t\tif (cur.indexOf(\" \" + className + \" \") < 0) {\n\t\t\t\t\t\t\t\tcur += className + \" \";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\t\tfinalValue = stripAndCollapse(cur);\n\t\t\t\t\t\tif (curValue !== finalValue) {\n\t\t\t\t\t\t\tthis.setAttribute(\"class\", finalValue);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn this;\n\t\t},\n\n\t\tremoveClass: function (value) {\n\t\t\tvar classNames, cur, curValue, className, i, finalValue;\n\n\t\t\tif (isFunction(value)) {\n\t\t\t\treturn this.each(function (j) {\n\t\t\t\t\tjQuery(this).removeClass(value.call(this, j, getClass(this)));\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (!arguments.length) {\n\t\t\t\treturn this.attr(\"class\", \"\");\n\t\t\t}\n\n\t\t\tclassNames = classesToArray(value);\n\n\t\t\tif (classNames.length) {\n\t\t\t\treturn this.each(function () {\n\t\t\t\t\tcurValue = getClass(this);\n\n\t\t\t\t\t// This expression is here for better compressibility (see addClass)\n\t\t\t\t\tcur = this.nodeType === 1 && (\" \" + stripAndCollapse(curValue) + \" \");\n\n\t\t\t\t\tif (cur) {\n\t\t\t\t\t\tfor (i = 0; i < classNames.length; i++) {\n\t\t\t\t\t\t\tclassName = classNames[i];\n\n\t\t\t\t\t\t\t// Remove *all* instances\n\t\t\t\t\t\t\twhile (cur.indexOf(\" \" + className + \" \") > -1) {\n\t\t\t\t\t\t\t\tcur = cur.replace(\" \" + className + \" \", \" \");\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\t\tfinalValue = stripAndCollapse(cur);\n\t\t\t\t\t\tif (curValue !== finalValue) {\n\t\t\t\t\t\t\tthis.setAttribute(\"class\", finalValue);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn this;\n\t\t},\n\n\t\ttoggleClass: function (value, stateVal) {\n\t\t\tvar classNames, className, i, self,\n\t\t\t\ttype = typeof value,\n\t\t\t\tisValidValue = type === \"string\" || Array.isArray(value);\n\n\t\t\tif (isFunction(value)) {\n\t\t\t\treturn this.each(function (i) {\n\t\t\t\t\tjQuery(this).toggleClass(\n\t\t\t\t\t\tvalue.call(this, i, getClass(this), stateVal),\n\t\t\t\t\t\tstateVal\n\t\t\t\t\t);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (typeof stateVal === \"boolean\" && isValidValue) {\n\t\t\t\treturn stateVal ? this.addClass(value) : this.removeClass(value);\n\t\t\t}\n\n\t\t\tclassNames = classesToArray(value);\n\n\t\t\treturn this.each(function () {\n\t\t\t\tif (isValidValue) {\n\n\t\t\t\t\t// Toggle individual class names\n\t\t\t\t\tself = jQuery(this);\n\n\t\t\t\t\tfor (i = 0; i < classNames.length; i++) {\n\t\t\t\t\t\tclassName = classNames[i];\n\n\t\t\t\t\t\t// Check each className given, space separated list\n\t\t\t\t\t\tif (self.hasClass(className)) {\n\t\t\t\t\t\t\tself.removeClass(className);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tself.addClass(className);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Toggle whole class name\n\t\t\t\t} else if (value === undefined || type === \"boolean\") {\n\t\t\t\t\tclassName = getClass(this);\n\t\t\t\t\tif (className) {\n\n\t\t\t\t\t\t// Store className if set\n\t\t\t\t\t\tdataPriv.set(this, \"__className__\", className);\n\t\t\t\t\t}\n\n\t\t\t\t\t// If the element has a class name or if we're passed `false`,\n\t\t\t\t\t// then remove the whole classname (if there was one, the above saved it).\n\t\t\t\t\t// Otherwise bring back whatever was previously saved (if anything),\n\t\t\t\t\t// falling back to the empty string if nothing was stored.\n\t\t\t\t\tif (this.setAttribute) {\n\t\t\t\t\t\tthis.setAttribute(\"class\",\n\t\t\t\t\t\t\tclassName || value === false ?\n\t\t\t\t\t\t\t\t\"\" :\n\t\t\t\t\t\t\t\tdataPriv.get(this, \"__className__\") || \"\"\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\thasClass: function (selector) {\n\t\t\tvar className, elem,\n\t\t\t\ti = 0;\n\n\t\t\tclassName = \" \" + selector + \" \";\n\t\t\twhile ((elem = this[i++])) {\n\t\t\t\tif (elem.nodeType === 1 &&\n\t\t\t\t\t(\" \" + stripAndCollapse(getClass(elem)) + \" \").indexOf(className) > -1) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn false;\n\t\t}\n\t});\n\n\n\n\n\tvar rreturn = /\\r/g;\n\n\tjQuery.fn.extend({\n\t\tval: function (value) {\n\t\t\tvar hooks, ret, valueIsFunction,\n\t\t\t\telem = this[0];\n\n\t\t\tif (!arguments.length) {\n\t\t\t\tif (elem) {\n\t\t\t\t\thooks = jQuery.valHooks[elem.type] ||\n\t\t\t\t\t\tjQuery.valHooks[elem.nodeName.toLowerCase()];\n\n\t\t\t\t\tif (hooks &&\n\t\t\t\t\t\t\"get\" in hooks &&\n\t\t\t\t\t\t(ret = hooks.get(elem, \"value\")) !== undefined\n\t\t\t\t\t) {\n\t\t\t\t\t\treturn ret;\n\t\t\t\t\t}\n\n\t\t\t\t\tret = elem.value;\n\n\t\t\t\t\t// Handle most common string cases\n\t\t\t\t\tif (typeof ret === \"string\") {\n\t\t\t\t\t\treturn ret.replace(rreturn, \"\");\n\t\t\t\t\t}\n\n\t\t\t\t\t// Handle cases where value is null/undef or number\n\t\t\t\t\treturn ret == null ? \"\" : ret;\n\t\t\t\t}\n\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvalueIsFunction = isFunction(value);\n\n\t\t\treturn this.each(function (i) {\n\t\t\t\tvar val;\n\n\t\t\t\tif (this.nodeType !== 1) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (valueIsFunction) {\n\t\t\t\t\tval = value.call(this, i, jQuery(this).val());\n\t\t\t\t} else {\n\t\t\t\t\tval = value;\n\t\t\t\t}\n\n\t\t\t\t// Treat null/undefined as \"\"; convert numbers to string\n\t\t\t\tif (val == null) {\n\t\t\t\t\tval = \"\";\n\n\t\t\t\t} else if (typeof val === \"number\") {\n\t\t\t\t\tval += \"\";\n\n\t\t\t\t} else if (Array.isArray(val)) {\n\t\t\t\t\tval = jQuery.map(val, function (value) {\n\t\t\t\t\t\treturn value == null ? \"\" : value + \"\";\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\thooks = jQuery.valHooks[this.type] || jQuery.valHooks[this.nodeName.toLowerCase()];\n\n\t\t\t\t// If set returns undefined, fall back to normal setting\n\t\t\t\tif (!hooks || !(\"set\" in hooks) || hooks.set(this, val, \"value\") === undefined) {\n\t\t\t\t\tthis.value = val;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t});\n\n\tjQuery.extend({\n\t\tvalHooks: {\n\t\t\toption: {\n\t\t\t\tget: function (elem) {\n\n\t\t\t\t\tvar val = jQuery.find.attr(elem, \"value\");\n\t\t\t\t\treturn val != null ?\n\t\t\t\t\t\tval :\n\n\t\t\t\t\t\t// Support: IE <=10 - 11 only\n\t\t\t\t\t\t// option.text throws exceptions (trac-14686, trac-14858)\n\t\t\t\t\t\t// Strip and collapse whitespace\n\t\t\t\t\t\t// https://html.spec.whatwg.org/#strip-and-collapse-whitespace\n\t\t\t\t\t\tstripAndCollapse(jQuery.text(elem));\n\t\t\t\t}\n\t\t\t},\n\t\t\tselect: {\n\t\t\t\tget: function (elem) {\n\t\t\t\t\tvar value, option, i,\n\t\t\t\t\t\toptions = elem.options,\n\t\t\t\t\t\tindex = elem.selectedIndex,\n\t\t\t\t\t\tone = elem.type === \"select-one\",\n\t\t\t\t\t\tvalues = one ? null : [],\n\t\t\t\t\t\tmax = one ? index + 1 : options.length;\n\n\t\t\t\t\tif (index < 0) {\n\t\t\t\t\t\ti = max;\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\ti = one ? index : 0;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Loop through all the selected options\n\t\t\t\t\tfor (; i < max; i++) {\n\t\t\t\t\t\toption = options[i];\n\n\t\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t\t// IE8-9 doesn't update selected after form reset (trac-2551)\n\t\t\t\t\t\tif ((option.selected || i === index) &&\n\n\t\t\t\t\t\t\t// Don't return options that are disabled or in a disabled optgroup\n\t\t\t\t\t\t\t!option.disabled &&\n\t\t\t\t\t\t\t(!option.parentNode.disabled ||\n\t\t\t\t\t\t\t\t!nodeName(option.parentNode, \"optgroup\"))) {\n\n\t\t\t\t\t\t\t// Get the specific value for the option\n\t\t\t\t\t\t\tvalue = jQuery(option).val();\n\n\t\t\t\t\t\t\t// We don't need an array for one selects\n\t\t\t\t\t\t\tif (one) {\n\t\t\t\t\t\t\t\treturn value;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Multi-Selects return an array\n\t\t\t\t\t\t\tvalues.push(value);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn values;\n\t\t\t\t},\n\n\t\t\t\tset: function (elem, value) {\n\t\t\t\t\tvar optionSet, option,\n\t\t\t\t\t\toptions = elem.options,\n\t\t\t\t\t\tvalues = jQuery.makeArray(value),\n\t\t\t\t\t\ti = options.length;\n\n\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\toption = options[i];\n\n\t\t\t\t\t\t/* eslint-disable no-cond-assign */\n\n\t\t\t\t\t\tif (option.selected =\n\t\t\t\t\t\t\tjQuery.inArray(jQuery.valHooks.option.get(option), values) > -1\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\toptionSet = true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t/* eslint-enable no-cond-assign */\n\t\t\t\t\t}\n\n\t\t\t\t\t// Force browsers to behave consistently when non-matching value is set\n\t\t\t\t\tif (!optionSet) {\n\t\t\t\t\t\telem.selectedIndex = -1;\n\t\t\t\t\t}\n\t\t\t\t\treturn values;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\n\t// Radios and checkboxes getter/setter\n\tjQuery.each([\"radio\", \"checkbox\"], function () {\n\t\tjQuery.valHooks[this] = {\n\t\t\tset: function (elem, value) {\n\t\t\t\tif (Array.isArray(value)) {\n\t\t\t\t\treturn (elem.checked = jQuery.inArray(jQuery(elem).val(), value) > -1);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\tif (!support.checkOn) {\n\t\t\tjQuery.valHooks[this].get = function (elem) {\n\t\t\t\treturn elem.getAttribute(\"value\") === null ? \"on\" : elem.value;\n\t\t\t};\n\t\t}\n\t});\n\n\n\n\n\t// Return jQuery for attributes-only inclusion\n\tvar location = window.location;\n\n\tvar nonce = { guid: Date.now() };\n\n\tvar rquery = (/\\?/);\n\n\n\n\t// Cross-browser xml parsing\n\tjQuery.parseXML = function (data) {\n\t\tvar xml, parserErrorElem;\n\t\tif (!data || typeof data !== \"string\") {\n\t\t\treturn null;\n\t\t}\n\n\t\t// Support: IE 9 - 11 only\n\t\t// IE throws on parseFromString with invalid input.\n\t\ttry {\n\t\t\txml = (new window.DOMParser()).parseFromString(data, \"text/xml\");\n\t\t} catch (e) { }\n\n\t\tparserErrorElem = xml && xml.getElementsByTagName(\"parsererror\")[0];\n\t\tif (!xml || parserErrorElem) {\n\t\t\tjQuery.error(\"Invalid XML: \" + (\n\t\t\t\tparserErrorElem ?\n\t\t\t\t\tjQuery.map(parserErrorElem.childNodes, function (el) {\n\t\t\t\t\t\treturn el.textContent;\n\t\t\t\t\t}).join(\"\\n\") :\n\t\t\t\t\tdata\n\t\t\t));\n\t\t}\n\t\treturn xml;\n\t};\n\n\n\tvar rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,\n\t\tstopPropagationCallback = function (e) {\n\t\t\te.stopPropagation();\n\t\t};\n\n\tjQuery.extend(jQuery.event, {\n\n\t\ttrigger: function (event, data, elem, onlyHandlers) {\n\n\t\t\tvar i, cur, tmp, bubbleType, ontype, handle, special, lastElement,\n\t\t\t\teventPath = [elem || document],\n\t\t\t\ttype = hasOwn.call(event, \"type\") ? event.type : event,\n\t\t\t\tnamespaces = hasOwn.call(event, \"namespace\") ? event.namespace.split(\".\") : [];\n\n\t\t\tcur = lastElement = tmp = elem = elem || document;\n\n\t\t\t// Don't do events on text and comment nodes\n\t\t\tif (elem.nodeType === 3 || elem.nodeType === 8) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// focus/blur morphs to focusin/out; ensure we're not firing them right now\n\t\t\tif (rfocusMorph.test(type + jQuery.event.triggered)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (type.indexOf(\".\") > -1) {\n\n\t\t\t\t// Namespaced trigger; create a regexp to match event type in handle()\n\t\t\t\tnamespaces = type.split(\".\");\n\t\t\t\ttype = namespaces.shift();\n\t\t\t\tnamespaces.sort();\n\t\t\t}\n\t\t\tontype = type.indexOf(\":\") < 0 && \"on\" + type;\n\n\t\t\t// Caller can pass in a jQuery.Event object, Object, or just an event type string\n\t\t\tevent = event[jQuery.expando] ?\n\t\t\t\tevent :\n\t\t\t\tnew jQuery.Event(type, typeof event === \"object\" && event);\n\n\t\t\t// Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)\n\t\t\tevent.isTrigger = onlyHandlers ? 2 : 3;\n\t\t\tevent.namespace = namespaces.join(\".\");\n\t\t\tevent.rnamespace = event.namespace ?\n\t\t\t\tnew RegExp(\"(^|\\\\.)\" + namespaces.join(\"\\\\.(?:.*\\\\.|)\") + \"(\\\\.|$)\") :\n\t\t\t\tnull;\n\n\t\t\t// Clean up the event in case it is being reused\n\t\t\tevent.result = undefined;\n\t\t\tif (!event.target) {\n\t\t\t\tevent.target = elem;\n\t\t\t}\n\n\t\t\t// Clone any incoming data and prepend the event, creating the handler arg list\n\t\t\tdata = data == null ?\n\t\t\t\t[event] :\n\t\t\t\tjQuery.makeArray(data, [event]);\n\n\t\t\t// Allow special events to draw outside the lines\n\t\t\tspecial = jQuery.event.special[type] || {};\n\t\t\tif (!onlyHandlers && special.trigger && special.trigger.apply(elem, data) === false) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Determine event propagation path in advance, per W3C events spec (trac-9951)\n\t\t\t// Bubble up to document, then to window; watch for a global ownerDocument var (trac-9724)\n\t\t\tif (!onlyHandlers && !special.noBubble && !isWindow(elem)) {\n\n\t\t\t\tbubbleType = special.delegateType || type;\n\t\t\t\tif (!rfocusMorph.test(bubbleType + type)) {\n\t\t\t\t\tcur = cur.parentNode;\n\t\t\t\t}\n\t\t\t\tfor (; cur; cur = cur.parentNode) {\n\t\t\t\t\teventPath.push(cur);\n\t\t\t\t\ttmp = cur;\n\t\t\t\t}\n\n\t\t\t\t// Only add window if we got to document (e.g., not plain obj or detached DOM)\n\t\t\t\tif (tmp === (elem.ownerDocument || document)) {\n\t\t\t\t\teventPath.push(tmp.defaultView || tmp.parentWindow || window);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Fire handlers on the event path\n\t\t\ti = 0;\n\t\t\twhile ((cur = eventPath[i++]) && !event.isPropagationStopped()) {\n\t\t\t\tlastElement = cur;\n\t\t\t\tevent.type = i > 1 ?\n\t\t\t\t\tbubbleType :\n\t\t\t\t\tspecial.bindType || type;\n\n\t\t\t\t// jQuery handler\n\t\t\t\thandle = (dataPriv.get(cur, \"events\") || Object.create(null))[event.type] &&\n\t\t\t\t\tdataPriv.get(cur, \"handle\");\n\t\t\t\tif (handle) {\n\t\t\t\t\thandle.apply(cur, data);\n\t\t\t\t}\n\n\t\t\t\t// Native handler\n\t\t\t\thandle = ontype && cur[ontype];\n\t\t\t\tif (handle && handle.apply && acceptData(cur)) {\n\t\t\t\t\tevent.result = handle.apply(cur, data);\n\t\t\t\t\tif (event.result === false) {\n\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tevent.type = type;\n\n\t\t\t// If nobody prevented the default action, do it now\n\t\t\tif (!onlyHandlers && !event.isDefaultPrevented()) {\n\n\t\t\t\tif ((!special._default ||\n\t\t\t\t\tspecial._default.apply(eventPath.pop(), data) === false) &&\n\t\t\t\t\tacceptData(elem)) {\n\n\t\t\t\t\t// Call a native DOM method on the target with the same name as the event.\n\t\t\t\t\t// Don't do default actions on window, that's where global variables be (trac-6170)\n\t\t\t\t\tif (ontype && isFunction(elem[type]) && !isWindow(elem)) {\n\n\t\t\t\t\t\t// Don't re-trigger an onFOO event when we call its FOO() method\n\t\t\t\t\t\ttmp = elem[ontype];\n\n\t\t\t\t\t\tif (tmp) {\n\t\t\t\t\t\t\telem[ontype] = null;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Prevent re-triggering of the same event, since we already bubbled it above\n\t\t\t\t\t\tjQuery.event.triggered = type;\n\n\t\t\t\t\t\tif (event.isPropagationStopped()) {\n\t\t\t\t\t\t\tlastElement.addEventListener(type, stopPropagationCallback);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\telem[type]();\n\n\t\t\t\t\t\tif (event.isPropagationStopped()) {\n\t\t\t\t\t\t\tlastElement.removeEventListener(type, stopPropagationCallback);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tjQuery.event.triggered = undefined;\n\n\t\t\t\t\t\tif (tmp) {\n\t\t\t\t\t\t\telem[ontype] = tmp;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn event.result;\n\t\t},\n\n\t\t// Piggyback on a donor event to simulate a different one\n\t\t// Used only for `focus(in | out)` events\n\t\tsimulate: function (type, elem, event) {\n\t\t\tvar e = jQuery.extend(\n\t\t\t\tnew jQuery.Event(),\n\t\t\t\tevent,\n\t\t\t\t{\n\t\t\t\t\ttype: type,\n\t\t\t\t\tisSimulated: true\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tjQuery.event.trigger(e, null, elem);\n\t\t}\n\n\t});\n\n\tjQuery.fn.extend({\n\n\t\ttrigger: function (type, data) {\n\t\t\treturn this.each(function () {\n\t\t\t\tjQuery.event.trigger(type, data, this);\n\t\t\t});\n\t\t},\n\t\ttriggerHandler: function (type, data) {\n\t\t\tvar elem = this[0];\n\t\t\tif (elem) {\n\t\t\t\treturn jQuery.event.trigger(type, data, elem, true);\n\t\t\t}\n\t\t}\n\t});\n\n\n\tvar\n\t\trbracket = /\\[\\]$/,\n\t\trCRLF = /\\r?\\n/g,\n\t\trsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,\n\t\trsubmittable = /^(?:input|select|textarea|keygen)/i;\n\n\tfunction buildParams(prefix, obj, traditional, add) {\n\t\tvar name;\n\n\t\tif (Array.isArray(obj)) {\n\n\t\t\t// Serialize array item.\n\t\t\tjQuery.each(obj, function (i, v) {\n\t\t\t\tif (traditional || rbracket.test(prefix)) {\n\n\t\t\t\t\t// Treat each array item as a scalar.\n\t\t\t\t\tadd(prefix, v);\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// Item is non-scalar (array or object), encode its numeric index.\n\t\t\t\t\tbuildParams(\n\t\t\t\t\t\tprefix + \"[\" + (typeof v === \"object\" && v != null ? i : \"\") + \"]\",\n\t\t\t\t\t\tv,\n\t\t\t\t\t\ttraditional,\n\t\t\t\t\t\tadd\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t});\n\n\t\t} else if (!traditional && toType(obj) === \"object\") {\n\n\t\t\t// Serialize object item.\n\t\t\tfor (name in obj) {\n\t\t\t\tbuildParams(prefix + \"[\" + name + \"]\", obj[name], traditional, add);\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// Serialize scalar item.\n\t\t\tadd(prefix, obj);\n\t\t}\n\t}\n\n\t// Serialize an array of form elements or a set of\n\t// key/values into a query string\n\tjQuery.param = function (a, traditional) {\n\t\tvar prefix,\n\t\t\ts = [],\n\t\t\tadd = function (key, valueOrFunction) {\n\n\t\t\t\t// If value is a function, invoke it and use its return value\n\t\t\t\tvar value = isFunction(valueOrFunction) ?\n\t\t\t\t\tvalueOrFunction() :\n\t\t\t\t\tvalueOrFunction;\n\n\t\t\t\ts[s.length] = encodeURIComponent(key) + \"=\" +\n\t\t\t\t\tencodeURIComponent(value == null ? \"\" : value);\n\t\t\t};\n\n\t\tif (a == null) {\n\t\t\treturn \"\";\n\t\t}\n\n\t\t// If an array was passed in, assume that it is an array of form elements.\n\t\tif (Array.isArray(a) || (a.jquery && !jQuery.isPlainObject(a))) {\n\n\t\t\t// Serialize the form elements\n\t\t\tjQuery.each(a, function () {\n\t\t\t\tadd(this.name, this.value);\n\t\t\t});\n\n\t\t} else {\n\n\t\t\t// If traditional, encode the \"old\" way (the way 1.3.2 or older\n\t\t\t// did it), otherwise encode params recursively.\n\t\t\tfor (prefix in a) {\n\t\t\t\tbuildParams(prefix, a[prefix], traditional, add);\n\t\t\t}\n\t\t}\n\n\t\t// Return the resulting serialization\n\t\treturn s.join(\"&\");\n\t};\n\n\tjQuery.fn.extend({\n\t\tserialize: function () {\n\t\t\treturn jQuery.param(this.serializeArray());\n\t\t},\n\t\tserializeArray: function () {\n\t\t\treturn this.map(function () {\n\n\t\t\t\t// Can add propHook for \"elements\" to filter or add form elements\n\t\t\t\tvar elements = jQuery.prop(this, \"elements\");\n\t\t\t\treturn elements ? jQuery.makeArray(elements) : this;\n\t\t\t}).filter(function () {\n\t\t\t\tvar type = this.type;\n\n\t\t\t\t// Use .is( \":disabled\" ) so that fieldset[disabled] works\n\t\t\t\treturn this.name && !jQuery(this).is(\":disabled\") &&\n\t\t\t\t\trsubmittable.test(this.nodeName) && !rsubmitterTypes.test(type) &&\n\t\t\t\t\t(this.checked || !rcheckableType.test(type));\n\t\t\t}).map(function (_i, elem) {\n\t\t\t\tvar val = jQuery(this).val();\n\n\t\t\t\tif (val == null) {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\n\t\t\t\tif (Array.isArray(val)) {\n\t\t\t\t\treturn jQuery.map(val, function (val) {\n\t\t\t\t\t\treturn { name: elem.name, value: val.replace(rCRLF, \"\\r\\n\") };\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\treturn { name: elem.name, value: val.replace(rCRLF, \"\\r\\n\") };\n\t\t\t}).get();\n\t\t}\n\t});\n\n\n\tvar\n\t\tr20 = /%20/g,\n\t\trhash = /#.*$/,\n\t\trantiCache = /([?&])_=[^&]*/,\n\t\trheaders = /^(.*?):[ \\t]*([^\\r\\n]*)$/mg,\n\n\t\t// trac-7653, trac-8125, trac-8152: local protocol detection\n\t\trlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,\n\t\trnoContent = /^(?:GET|HEAD)$/,\n\t\trprotocol = /^\\/\\//,\n\n\t\t/* Prefilters\n\t\t * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)\n\t\t * 2) These are called:\n\t\t *    - BEFORE asking for a transport\n\t\t *    - AFTER param serialization (s.data is a string if s.processData is true)\n\t\t * 3) key is the dataType\n\t\t * 4) the catchall symbol \"*\" can be used\n\t\t * 5) execution will start with transport dataType and THEN continue down to \"*\" if needed\n\t\t */\n\t\tprefilters = {},\n\n\t\t/* Transports bindings\n\t\t * 1) key is the dataType\n\t\t * 2) the catchall symbol \"*\" can be used\n\t\t * 3) selection will start with transport dataType and THEN go to \"*\" if needed\n\t\t */\n\t\ttransports = {},\n\n\t\t// Avoid comment-prolog char sequence (trac-10098); must appease lint and evade compression\n\t\tallTypes = \"*/\".concat(\"*\"),\n\n\t\t// Anchor tag for parsing the document origin\n\t\toriginAnchor = document.createElement(\"a\");\n\n\toriginAnchor.href = location.href;\n\n\t// Base \"constructor\" for jQuery.ajaxPrefilter and jQuery.ajaxTransport\n\tfunction addToPrefiltersOrTransports(structure) {\n\n\t\t// dataTypeExpression is optional and defaults to \"*\"\n\t\treturn function (dataTypeExpression, func) {\n\n\t\t\tif (typeof dataTypeExpression !== \"string\") {\n\t\t\t\tfunc = dataTypeExpression;\n\t\t\t\tdataTypeExpression = \"*\";\n\t\t\t}\n\n\t\t\tvar dataType,\n\t\t\t\ti = 0,\n\t\t\t\tdataTypes = dataTypeExpression.toLowerCase().match(rnothtmlwhite) || [];\n\n\t\t\tif (isFunction(func)) {\n\n\t\t\t\t// For each dataType in the dataTypeExpression\n\t\t\t\twhile ((dataType = dataTypes[i++])) {\n\n\t\t\t\t\t// Prepend if requested\n\t\t\t\t\tif (dataType[0] === \"+\") {\n\t\t\t\t\t\tdataType = dataType.slice(1) || \"*\";\n\t\t\t\t\t\t(structure[dataType] = structure[dataType] || []).unshift(func);\n\n\t\t\t\t\t\t// Otherwise append\n\t\t\t\t\t} else {\n\t\t\t\t\t\t(structure[dataType] = structure[dataType] || []).push(func);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n\n\t// Base inspection function for prefilters and transports\n\tfunction inspectPrefiltersOrTransports(structure, options, originalOptions, jqXHR) {\n\n\t\tvar inspected = {},\n\t\t\tseekingTransport = (structure === transports);\n\n\t\tfunction inspect(dataType) {\n\t\t\tvar selected;\n\t\t\tinspected[dataType] = true;\n\t\t\tjQuery.each(structure[dataType] || [], function (_, prefilterOrFactory) {\n\t\t\t\tvar dataTypeOrTransport = prefilterOrFactory(options, originalOptions, jqXHR);\n\t\t\t\tif (typeof dataTypeOrTransport === \"string\" &&\n\t\t\t\t\t!seekingTransport && !inspected[dataTypeOrTransport]) {\n\n\t\t\t\t\toptions.dataTypes.unshift(dataTypeOrTransport);\n\t\t\t\t\tinspect(dataTypeOrTransport);\n\t\t\t\t\treturn false;\n\t\t\t\t} else if (seekingTransport) {\n\t\t\t\t\treturn !(selected = dataTypeOrTransport);\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn selected;\n\t\t}\n\n\t\treturn inspect(options.dataTypes[0]) || !inspected[\"*\"] && inspect(\"*\");\n\t}\n\n\t// A special extend for ajax options\n\t// that takes \"flat\" options (not to be deep extended)\n\t// Fixes trac-9887\n\tfunction ajaxExtend(target, src) {\n\t\tvar key, deep,\n\t\t\tflatOptions = jQuery.ajaxSettings.flatOptions || {};\n\n\t\tfor (key in src) {\n\t\t\tif (src[key] !== undefined) {\n\t\t\t\t(flatOptions[key] ? target : (deep || (deep = {})))[key] = src[key];\n\t\t\t}\n\t\t}\n\t\tif (deep) {\n\t\t\tjQuery.extend(true, target, deep);\n\t\t}\n\n\t\treturn target;\n\t}\n\n\t/* Handles responses to an ajax request:\n\t * - finds the right dataType (mediates between content-type and expected dataType)\n\t * - returns the corresponding response\n\t */\n\tfunction ajaxHandleResponses(s, jqXHR, responses) {\n\n\t\tvar ct, type, finalDataType, firstDataType,\n\t\t\tcontents = s.contents,\n\t\t\tdataTypes = s.dataTypes;\n\n\t\t// Remove auto dataType and get content-type in the process\n\t\twhile (dataTypes[0] === \"*\") {\n\t\t\tdataTypes.shift();\n\t\t\tif (ct === undefined) {\n\t\t\t\tct = s.mimeType || jqXHR.getResponseHeader(\"Content-Type\");\n\t\t\t}\n\t\t}\n\n\t\t// Check if we're dealing with a known content-type\n\t\tif (ct) {\n\t\t\tfor (type in contents) {\n\t\t\t\tif (contents[type] && contents[type].test(ct)) {\n\t\t\t\t\tdataTypes.unshift(type);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Check to see if we have a response for the expected dataType\n\t\tif (dataTypes[0] in responses) {\n\t\t\tfinalDataType = dataTypes[0];\n\t\t} else {\n\n\t\t\t// Try convertible dataTypes\n\t\t\tfor (type in responses) {\n\t\t\t\tif (!dataTypes[0] || s.converters[type + \" \" + dataTypes[0]]) {\n\t\t\t\t\tfinalDataType = type;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (!firstDataType) {\n\t\t\t\t\tfirstDataType = type;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Or just use first one\n\t\t\tfinalDataType = finalDataType || firstDataType;\n\t\t}\n\n\t\t// If we found a dataType\n\t\t// We add the dataType to the list if needed\n\t\t// and return the corresponding response\n\t\tif (finalDataType) {\n\t\t\tif (finalDataType !== dataTypes[0]) {\n\t\t\t\tdataTypes.unshift(finalDataType);\n\t\t\t}\n\t\t\treturn responses[finalDataType];\n\t\t}\n\t}\n\n\t/* Chain conversions given the request and the original response\n\t * Also sets the responseXXX fields on the jqXHR instance\n\t */\n\tfunction ajaxConvert(s, response, jqXHR, isSuccess) {\n\t\tvar conv2, current, conv, tmp, prev,\n\t\t\tconverters = {},\n\n\t\t\t// Work with a copy of dataTypes in case we need to modify it for conversion\n\t\t\tdataTypes = s.dataTypes.slice();\n\n\t\t// Create converters map with lowercased keys\n\t\tif (dataTypes[1]) {\n\t\t\tfor (conv in s.converters) {\n\t\t\t\tconverters[conv.toLowerCase()] = s.converters[conv];\n\t\t\t}\n\t\t}\n\n\t\tcurrent = dataTypes.shift();\n\n\t\t// Convert to each sequential dataType\n\t\twhile (current) {\n\n\t\t\tif (s.responseFields[current]) {\n\t\t\t\tjqXHR[s.responseFields[current]] = response;\n\t\t\t}\n\n\t\t\t// Apply the dataFilter if provided\n\t\t\tif (!prev && isSuccess && s.dataFilter) {\n\t\t\t\tresponse = s.dataFilter(response, s.dataType);\n\t\t\t}\n\n\t\t\tprev = current;\n\t\t\tcurrent = dataTypes.shift();\n\n\t\t\tif (current) {\n\n\t\t\t\t// There's only work to do if current dataType is non-auto\n\t\t\t\tif (current === \"*\") {\n\n\t\t\t\t\tcurrent = prev;\n\n\t\t\t\t\t// Convert response if prev dataType is non-auto and differs from current\n\t\t\t\t} else if (prev !== \"*\" && prev !== current) {\n\n\t\t\t\t\t// Seek a direct converter\n\t\t\t\t\tconv = converters[prev + \" \" + current] || converters[\"* \" + current];\n\n\t\t\t\t\t// If none found, seek a pair\n\t\t\t\t\tif (!conv) {\n\t\t\t\t\t\tfor (conv2 in converters) {\n\n\t\t\t\t\t\t\t// If conv2 outputs current\n\t\t\t\t\t\t\ttmp = conv2.split(\" \");\n\t\t\t\t\t\t\tif (tmp[1] === current) {\n\n\t\t\t\t\t\t\t\t// If prev can be converted to accepted input\n\t\t\t\t\t\t\t\tconv = converters[prev + \" \" + tmp[0]] ||\n\t\t\t\t\t\t\t\t\tconverters[\"* \" + tmp[0]];\n\t\t\t\t\t\t\t\tif (conv) {\n\n\t\t\t\t\t\t\t\t\t// Condense equivalence converters\n\t\t\t\t\t\t\t\t\tif (conv === true) {\n\t\t\t\t\t\t\t\t\t\tconv = converters[conv2];\n\n\t\t\t\t\t\t\t\t\t\t// Otherwise, insert the intermediate dataType\n\t\t\t\t\t\t\t\t\t} else if (converters[conv2] !== true) {\n\t\t\t\t\t\t\t\t\t\tcurrent = tmp[0];\n\t\t\t\t\t\t\t\t\t\tdataTypes.unshift(tmp[1]);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Apply converter (if not an equivalence)\n\t\t\t\t\tif (conv !== true) {\n\n\t\t\t\t\t\t// Unless errors are allowed to bubble, catch and return them\n\t\t\t\t\t\tif (conv && s.throws) {\n\t\t\t\t\t\t\tresponse = conv(response);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\tresponse = conv(response);\n\t\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\tstate: \"parsererror\",\n\t\t\t\t\t\t\t\t\terror: conv ? e : \"No conversion from \" + prev + \" to \" + current\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn { state: \"success\", data: response };\n\t}\n\n\tjQuery.extend({\n\n\t\t// Counter for holding the number of active queries\n\t\tactive: 0,\n\n\t\t// Last-Modified header cache for next request\n\t\tlastModified: {},\n\t\tetag: {},\n\n\t\tajaxSettings: {\n\t\t\turl: location.href,\n\t\t\ttype: \"GET\",\n\t\t\tisLocal: rlocalProtocol.test(location.protocol),\n\t\t\tglobal: true,\n\t\t\tprocessData: true,\n\t\t\tasync: true,\n\t\t\tcontentType: \"application/x-www-form-urlencoded; charset=UTF-8\",\n\n\t\t\t/*\n\t\t\ttimeout: 0,\n\t\t\tdata: null,\n\t\t\tdataType: null,\n\t\t\tusername: null,\n\t\t\tpassword: null,\n\t\t\tcache: null,\n\t\t\tthrows: false,\n\t\t\ttraditional: false,\n\t\t\theaders: {},\n\t\t\t*/\n\n\t\t\taccepts: {\n\t\t\t\t\"*\": allTypes,\n\t\t\t\ttext: \"text/plain\",\n\t\t\t\thtml: \"text/html\",\n\t\t\t\txml: \"application/xml, text/xml\",\n\t\t\t\tjson: \"application/json, text/javascript\"\n\t\t\t},\n\n\t\t\tcontents: {\n\t\t\t\txml: /\\bxml\\b/,\n\t\t\t\thtml: /\\bhtml/,\n\t\t\t\tjson: /\\bjson\\b/\n\t\t\t},\n\n\t\t\tresponseFields: {\n\t\t\t\txml: \"responseXML\",\n\t\t\t\ttext: \"responseText\",\n\t\t\t\tjson: \"responseJSON\"\n\t\t\t},\n\n\t\t\t// Data converters\n\t\t\t// Keys separate source (or catchall \"*\") and destination types with a single space\n\t\t\tconverters: {\n\n\t\t\t\t// Convert anything to text\n\t\t\t\t\"* text\": String,\n\n\t\t\t\t// Text to html (true = no transformation)\n\t\t\t\t\"text html\": true,\n\n\t\t\t\t// Evaluate text as a json expression\n\t\t\t\t\"text json\": JSON.parse,\n\n\t\t\t\t// Parse text as xml\n\t\t\t\t\"text xml\": jQuery.parseXML\n\t\t\t},\n\n\t\t\t// For options that shouldn't be deep extended:\n\t\t\t// you can add your own custom options here if\n\t\t\t// and when you create one that shouldn't be\n\t\t\t// deep extended (see ajaxExtend)\n\t\t\tflatOptions: {\n\t\t\t\turl: true,\n\t\t\t\tcontext: true\n\t\t\t}\n\t\t},\n\n\t\t// Creates a full fledged settings object into target\n\t\t// with both ajaxSettings and settings fields.\n\t\t// If target is omitted, writes into ajaxSettings.\n\t\tajaxSetup: function (target, settings) {\n\t\t\treturn settings ?\n\n\t\t\t\t// Building a settings object\n\t\t\t\tajaxExtend(ajaxExtend(target, jQuery.ajaxSettings), settings) :\n\n\t\t\t\t// Extending ajaxSettings\n\t\t\t\tajaxExtend(jQuery.ajaxSettings, target);\n\t\t},\n\n\t\tajaxPrefilter: addToPrefiltersOrTransports(prefilters),\n\t\tajaxTransport: addToPrefiltersOrTransports(transports),\n\n\t\t// Main method\n\t\tajax: function (url, options) {\n\n\t\t\t// If url is an object, simulate pre-1.5 signature\n\t\t\tif (typeof url === \"object\") {\n\t\t\t\toptions = url;\n\t\t\t\turl = undefined;\n\t\t\t}\n\n\t\t\t// Force options to be an object\n\t\t\toptions = options || {};\n\n\t\t\tvar transport,\n\n\t\t\t\t// URL without anti-cache param\n\t\t\t\tcacheURL,\n\n\t\t\t\t// Response headers\n\t\t\t\tresponseHeadersString,\n\t\t\t\tresponseHeaders,\n\n\t\t\t\t// timeout handle\n\t\t\t\ttimeoutTimer,\n\n\t\t\t\t// Url cleanup var\n\t\t\t\turlAnchor,\n\n\t\t\t\t// Request state (becomes false upon send and true upon completion)\n\t\t\t\tcompleted,\n\n\t\t\t\t// To know if global events are to be dispatched\n\t\t\t\tfireGlobals,\n\n\t\t\t\t// Loop variable\n\t\t\t\ti,\n\n\t\t\t\t// uncached part of the url\n\t\t\t\tuncached,\n\n\t\t\t\t// Create the final options object\n\t\t\t\ts = jQuery.ajaxSetup({}, options),\n\n\t\t\t\t// Callbacks context\n\t\t\t\tcallbackContext = s.context || s,\n\n\t\t\t\t// Context for global events is callbackContext if it is a DOM node or jQuery collection\n\t\t\t\tglobalEventContext = s.context &&\n\t\t\t\t\t(callbackContext.nodeType || callbackContext.jquery) ?\n\t\t\t\t\tjQuery(callbackContext) :\n\t\t\t\t\tjQuery.event,\n\n\t\t\t\t// Deferreds\n\t\t\t\tdeferred = jQuery.Deferred(),\n\t\t\t\tcompleteDeferred = jQuery.Callbacks(\"once memory\"),\n\n\t\t\t\t// Status-dependent callbacks\n\t\t\t\tstatusCode = s.statusCode || {},\n\n\t\t\t\t// Headers (they are sent all at once)\n\t\t\t\trequestHeaders = {},\n\t\t\t\trequestHeadersNames = {},\n\n\t\t\t\t// Default abort message\n\t\t\t\tstrAbort = \"canceled\",\n\n\t\t\t\t// Fake xhr\n\t\t\t\tjqXHR = {\n\t\t\t\t\treadyState: 0,\n\n\t\t\t\t\t// Builds headers hashtable if needed\n\t\t\t\t\tgetResponseHeader: function (key) {\n\t\t\t\t\t\tvar match;\n\t\t\t\t\t\tif (completed) {\n\t\t\t\t\t\t\tif (!responseHeaders) {\n\t\t\t\t\t\t\t\tresponseHeaders = {};\n\t\t\t\t\t\t\t\twhile ((match = rheaders.exec(responseHeadersString))) {\n\t\t\t\t\t\t\t\t\tresponseHeaders[match[1].toLowerCase() + \" \"] =\n\t\t\t\t\t\t\t\t\t\t(responseHeaders[match[1].toLowerCase() + \" \"] || [])\n\t\t\t\t\t\t\t\t\t\t\t.concat(match[2]);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tmatch = responseHeaders[key.toLowerCase() + \" \"];\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn match == null ? null : match.join(\", \");\n\t\t\t\t\t},\n\n\t\t\t\t\t// Raw string\n\t\t\t\t\tgetAllResponseHeaders: function () {\n\t\t\t\t\t\treturn completed ? responseHeadersString : null;\n\t\t\t\t\t},\n\n\t\t\t\t\t// Caches the header\n\t\t\t\t\tsetRequestHeader: function (name, value) {\n\t\t\t\t\t\tif (completed == null) {\n\t\t\t\t\t\t\tname = requestHeadersNames[name.toLowerCase()] =\n\t\t\t\t\t\t\t\trequestHeadersNames[name.toLowerCase()] || name;\n\t\t\t\t\t\t\trequestHeaders[name] = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn this;\n\t\t\t\t\t},\n\n\t\t\t\t\t// Overrides response content-type header\n\t\t\t\t\toverrideMimeType: function (type) {\n\t\t\t\t\t\tif (completed == null) {\n\t\t\t\t\t\t\ts.mimeType = type;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn this;\n\t\t\t\t\t},\n\n\t\t\t\t\t// Status-dependent callbacks\n\t\t\t\t\tstatusCode: function (map) {\n\t\t\t\t\t\tvar code;\n\t\t\t\t\t\tif (map) {\n\t\t\t\t\t\t\tif (completed) {\n\n\t\t\t\t\t\t\t\t// Execute the appropriate callbacks\n\t\t\t\t\t\t\t\tjqXHR.always(map[jqXHR.status]);\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t// Lazy-add the new callbacks in a way that preserves old ones\n\t\t\t\t\t\t\t\tfor (code in map) {\n\t\t\t\t\t\t\t\t\tstatusCode[code] = [statusCode[code], map[code]];\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn this;\n\t\t\t\t\t},\n\n\t\t\t\t\t// Cancel the request\n\t\t\t\t\tabort: function (statusText) {\n\t\t\t\t\t\tvar finalText = statusText || strAbort;\n\t\t\t\t\t\tif (transport) {\n\t\t\t\t\t\t\ttransport.abort(finalText);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdone(0, finalText);\n\t\t\t\t\t\treturn this;\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t// Attach deferreds\n\t\t\tdeferred.promise(jqXHR);\n\n\t\t\t// Add protocol if not provided (prefilters might expect it)\n\t\t\t// Handle falsy url in the settings object (trac-10093: consistency with old signature)\n\t\t\t// We also use the url parameter if available\n\t\t\ts.url = ((url || s.url || location.href) + \"\")\n\t\t\t\t.replace(rprotocol, location.protocol + \"//\");\n\n\t\t\t// Alias method option to type as per ticket trac-12004\n\t\t\ts.type = options.method || options.type || s.method || s.type;\n\n\t\t\t// Extract dataTypes list\n\t\t\ts.dataTypes = (s.dataType || \"*\").toLowerCase().match(rnothtmlwhite) || [\"\"];\n\n\t\t\t// A cross-domain request is in order when the origin doesn't match the current origin.\n\t\t\tif (s.crossDomain == null) {\n\t\t\t\turlAnchor = document.createElement(\"a\");\n\n\t\t\t\t// Support: IE <=8 - 11, Edge 12 - 15\n\t\t\t\t// IE throws exception on accessing the href property if url is malformed,\n\t\t\t\t// e.g. http://example.com:80x/\n\t\t\t\ttry {\n\t\t\t\t\turlAnchor.href = s.url;\n\n\t\t\t\t\t// Support: IE <=8 - 11 only\n\t\t\t\t\t// Anchor's host property isn't correctly set when s.url is relative\n\t\t\t\t\turlAnchor.href = urlAnchor.href;\n\t\t\t\t\ts.crossDomain = originAnchor.protocol + \"//\" + originAnchor.host !==\n\t\t\t\t\t\turlAnchor.protocol + \"//\" + urlAnchor.host;\n\t\t\t\t} catch (e) {\n\n\t\t\t\t\t// If there is an error parsing the URL, assume it is crossDomain,\n\t\t\t\t\t// it can be rejected by the transport if it is invalid\n\t\t\t\t\ts.crossDomain = true;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Convert data if not already a string\n\t\t\tif (s.data && s.processData && typeof s.data !== \"string\") {\n\t\t\t\ts.data = jQuery.param(s.data, s.traditional);\n\t\t\t}\n\n\t\t\t// Apply prefilters\n\t\t\tinspectPrefiltersOrTransports(prefilters, s, options, jqXHR);\n\n\t\t\t// If request was aborted inside a prefilter, stop there\n\t\t\tif (completed) {\n\t\t\t\treturn jqXHR;\n\t\t\t}\n\n\t\t\t// We can fire global events as of now if asked to\n\t\t\t// Don't fire events if jQuery.event is undefined in an AMD-usage scenario (trac-15118)\n\t\t\tfireGlobals = jQuery.event && s.global;\n\n\t\t\t// Watch for a new set of requests\n\t\t\tif (fireGlobals && jQuery.active++ === 0) {\n\t\t\t\tjQuery.event.trigger(\"ajaxStart\");\n\t\t\t}\n\n\t\t\t// Uppercase the type\n\t\t\ts.type = s.type.toUpperCase();\n\n\t\t\t// Determine if request has content\n\t\t\ts.hasContent = !rnoContent.test(s.type);\n\n\t\t\t// Save the URL in case we're toying with the If-Modified-Since\n\t\t\t// and/or If-None-Match header later on\n\t\t\t// Remove hash to simplify url manipulation\n\t\t\tcacheURL = s.url.replace(rhash, \"\");\n\n\t\t\t// More options handling for requests with no content\n\t\t\tif (!s.hasContent) {\n\n\t\t\t\t// Remember the hash so we can put it back\n\t\t\t\tuncached = s.url.slice(cacheURL.length);\n\n\t\t\t\t// If data is available and should be processed, append data to url\n\t\t\t\tif (s.data && (s.processData || typeof s.data === \"string\")) {\n\t\t\t\t\tcacheURL += (rquery.test(cacheURL) ? \"&\" : \"?\") + s.data;\n\n\t\t\t\t\t// trac-9682: remove data so that it's not used in an eventual retry\n\t\t\t\t\tdelete s.data;\n\t\t\t\t}\n\n\t\t\t\t// Add or update anti-cache param if needed\n\t\t\t\tif (s.cache === false) {\n\t\t\t\t\tcacheURL = cacheURL.replace(rantiCache, \"$1\");\n\t\t\t\t\tuncached = (rquery.test(cacheURL) ? \"&\" : \"?\") + \"_=\" + (nonce.guid++) +\n\t\t\t\t\t\tuncached;\n\t\t\t\t}\n\n\t\t\t\t// Put hash and anti-cache on the URL that will be requested (gh-1732)\n\t\t\t\ts.url = cacheURL + uncached;\n\n\t\t\t\t// Change '%20' to '+' if this is encoded form body content (gh-2658)\n\t\t\t} else if (s.data && s.processData &&\n\t\t\t\t(s.contentType || \"\").indexOf(\"application/x-www-form-urlencoded\") === 0) {\n\t\t\t\ts.data = s.data.replace(r20, \"+\");\n\t\t\t}\n\n\t\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\t\tif (s.ifModified) {\n\t\t\t\tif (jQuery.lastModified[cacheURL]) {\n\t\t\t\t\tjqXHR.setRequestHeader(\"If-Modified-Since\", jQuery.lastModified[cacheURL]);\n\t\t\t\t}\n\t\t\t\tif (jQuery.etag[cacheURL]) {\n\t\t\t\t\tjqXHR.setRequestHeader(\"If-None-Match\", jQuery.etag[cacheURL]);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Set the correct header, if data is being sent\n\t\t\tif (s.data && s.hasContent && s.contentType !== false || options.contentType) {\n\t\t\t\tjqXHR.setRequestHeader(\"Content-Type\", s.contentType);\n\t\t\t}\n\n\t\t\t// Set the Accepts header for the server, depending on the dataType\n\t\t\tjqXHR.setRequestHeader(\n\t\t\t\t\"Accept\",\n\t\t\t\ts.dataTypes[0] && s.accepts[s.dataTypes[0]] ?\n\t\t\t\t\ts.accepts[s.dataTypes[0]] +\n\t\t\t\t\t(s.dataTypes[0] !== \"*\" ? \", \" + allTypes + \"; q=0.01\" : \"\") :\n\t\t\t\t\ts.accepts[\"*\"]\n\t\t\t);\n\n\t\t\t// Check for headers option\n\t\t\tfor (i in s.headers) {\n\t\t\t\tjqXHR.setRequestHeader(i, s.headers[i]);\n\t\t\t}\n\n\t\t\t// Allow custom headers/mimetypes and early abort\n\t\t\tif (s.beforeSend &&\n\t\t\t\t(s.beforeSend.call(callbackContext, jqXHR, s) === false || completed)) {\n\n\t\t\t\t// Abort if not done already and return\n\t\t\t\treturn jqXHR.abort();\n\t\t\t}\n\n\t\t\t// Aborting is no longer a cancellation\n\t\t\tstrAbort = \"abort\";\n\n\t\t\t// Install callbacks on deferreds\n\t\t\tcompleteDeferred.add(s.complete);\n\t\t\tjqXHR.done(s.success);\n\t\t\tjqXHR.fail(s.error);\n\n\t\t\t// Get transport\n\t\t\ttransport = inspectPrefiltersOrTransports(transports, s, options, jqXHR);\n\n\t\t\t// If no transport, we auto-abort\n\t\t\tif (!transport) {\n\t\t\t\tdone(-1, \"No Transport\");\n\t\t\t} else {\n\t\t\t\tjqXHR.readyState = 1;\n\n\t\t\t\t// Send global event\n\t\t\t\tif (fireGlobals) {\n\t\t\t\t\tglobalEventContext.trigger(\"ajaxSend\", [jqXHR, s]);\n\t\t\t\t}\n\n\t\t\t\t// If request was aborted inside ajaxSend, stop there\n\t\t\t\tif (completed) {\n\t\t\t\t\treturn jqXHR;\n\t\t\t\t}\n\n\t\t\t\t// Timeout\n\t\t\t\tif (s.async && s.timeout > 0) {\n\t\t\t\t\ttimeoutTimer = window.setTimeout(function () {\n\t\t\t\t\t\tjqXHR.abort(\"timeout\");\n\t\t\t\t\t}, s.timeout);\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tcompleted = false;\n\t\t\t\t\ttransport.send(requestHeaders, done);\n\t\t\t\t} catch (e) {\n\n\t\t\t\t\t// Rethrow post-completion exceptions\n\t\t\t\t\tif (completed) {\n\t\t\t\t\t\tthrow e;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Propagate others as results\n\t\t\t\t\tdone(-1, e);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Callback for when everything is done\n\t\t\tfunction done(status, nativeStatusText, responses, headers) {\n\t\t\t\tvar isSuccess, success, error, response, modified,\n\t\t\t\t\tstatusText = nativeStatusText;\n\n\t\t\t\t// Ignore repeat invocations\n\t\t\t\tif (completed) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tcompleted = true;\n\n\t\t\t\t// Clear timeout if it exists\n\t\t\t\tif (timeoutTimer) {\n\t\t\t\t\twindow.clearTimeout(timeoutTimer);\n\t\t\t\t}\n\n\t\t\t\t// Dereference transport for early garbage collection\n\t\t\t\t// (no matter how long the jqXHR object will be used)\n\t\t\t\ttransport = undefined;\n\n\t\t\t\t// Cache response headers\n\t\t\t\tresponseHeadersString = headers || \"\";\n\n\t\t\t\t// Set readyState\n\t\t\t\tjqXHR.readyState = status > 0 ? 4 : 0;\n\n\t\t\t\t// Determine if successful\n\t\t\t\tisSuccess = status >= 200 && status < 300 || status === 304;\n\n\t\t\t\t// Get response data\n\t\t\t\tif (responses) {\n\t\t\t\t\tresponse = ajaxHandleResponses(s, jqXHR, responses);\n\t\t\t\t}\n\n\t\t\t\t// Use a noop converter for missing script but not if jsonp\n\t\t\t\tif (!isSuccess &&\n\t\t\t\t\tjQuery.inArray(\"script\", s.dataTypes) > -1 &&\n\t\t\t\t\tjQuery.inArray(\"json\", s.dataTypes) < 0) {\n\t\t\t\t\ts.converters[\"text script\"] = function () { };\n\t\t\t\t}\n\n\t\t\t\t// Convert no matter what (that way responseXXX fields are always set)\n\t\t\t\tresponse = ajaxConvert(s, response, jqXHR, isSuccess);\n\n\t\t\t\t// If successful, handle type chaining\n\t\t\t\tif (isSuccess) {\n\n\t\t\t\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\t\t\t\tif (s.ifModified) {\n\t\t\t\t\t\tmodified = jqXHR.getResponseHeader(\"Last-Modified\");\n\t\t\t\t\t\tif (modified) {\n\t\t\t\t\t\t\tjQuery.lastModified[cacheURL] = modified;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmodified = jqXHR.getResponseHeader(\"etag\");\n\t\t\t\t\t\tif (modified) {\n\t\t\t\t\t\t\tjQuery.etag[cacheURL] = modified;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// if no content\n\t\t\t\t\tif (status === 204 || s.type === \"HEAD\") {\n\t\t\t\t\t\tstatusText = \"nocontent\";\n\n\t\t\t\t\t\t// if not modified\n\t\t\t\t\t} else if (status === 304) {\n\t\t\t\t\t\tstatusText = \"notmodified\";\n\n\t\t\t\t\t\t// If we have data, let's convert it\n\t\t\t\t\t} else {\n\t\t\t\t\t\tstatusText = response.state;\n\t\t\t\t\t\tsuccess = response.data;\n\t\t\t\t\t\terror = response.error;\n\t\t\t\t\t\tisSuccess = !error;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\n\t\t\t\t\t// Extract error from statusText and normalize for non-aborts\n\t\t\t\t\terror = statusText;\n\t\t\t\t\tif (status || !statusText) {\n\t\t\t\t\t\tstatusText = \"error\";\n\t\t\t\t\t\tif (status < 0) {\n\t\t\t\t\t\t\tstatus = 0;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Set data for the fake xhr object\n\t\t\t\tjqXHR.status = status;\n\t\t\t\tjqXHR.statusText = (nativeStatusText || statusText) + \"\";\n\n\t\t\t\t// Success/Error\n\t\t\t\tif (isSuccess) {\n\t\t\t\t\tdeferred.resolveWith(callbackContext, [success, statusText, jqXHR]);\n\t\t\t\t} else {\n\t\t\t\t\tdeferred.rejectWith(callbackContext, [jqXHR, statusText, error]);\n\t\t\t\t}\n\n\t\t\t\t// Status-dependent callbacks\n\t\t\t\tjqXHR.statusCode(statusCode);\n\t\t\t\tstatusCode = undefined;\n\n\t\t\t\tif (fireGlobals) {\n\t\t\t\t\tglobalEventContext.trigger(isSuccess ? \"ajaxSuccess\" : \"ajaxError\",\n\t\t\t\t\t\t[jqXHR, s, isSuccess ? success : error]);\n\t\t\t\t}\n\n\t\t\t\t// Complete\n\t\t\t\tcompleteDeferred.fireWith(callbackContext, [jqXHR, statusText]);\n\n\t\t\t\tif (fireGlobals) {\n\t\t\t\t\tglobalEventContext.trigger(\"ajaxComplete\", [jqXHR, s]);\n\n\t\t\t\t\t// Handle the global AJAX counter\n\t\t\t\t\tif (!(--jQuery.active)) {\n\t\t\t\t\t\tjQuery.event.trigger(\"ajaxStop\");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn jqXHR;\n\t\t},\n\n\t\tgetJSON: function (url, data, callback) {\n\t\t\treturn jQuery.get(url, data, callback, \"json\");\n\t\t},\n\n\t\tgetScript: function (url, callback) {\n\t\t\treturn jQuery.get(url, undefined, callback, \"script\");\n\t\t}\n\t});\n\n\tjQuery.each([\"get\", \"post\"], function (_i, method) {\n\t\tjQuery[method] = function (url, data, callback, type) {\n\n\t\t\t// Shift arguments if data argument was omitted\n\t\t\tif (isFunction(data)) {\n\t\t\t\ttype = type || callback;\n\t\t\t\tcallback = data;\n\t\t\t\tdata = undefined;\n\t\t\t}\n\n\t\t\t// The url can be an options object (which then must have .url)\n\t\t\treturn jQuery.ajax(jQuery.extend({\n\t\t\t\turl: url,\n\t\t\t\ttype: method,\n\t\t\t\tdataType: type,\n\t\t\t\tdata: data,\n\t\t\t\tsuccess: callback\n\t\t\t}, jQuery.isPlainObject(url) && url));\n\t\t};\n\t});\n\n\tjQuery.ajaxPrefilter(function (s) {\n\t\tvar i;\n\t\tfor (i in s.headers) {\n\t\t\tif (i.toLowerCase() === \"content-type\") {\n\t\t\t\ts.contentType = s.headers[i] || \"\";\n\t\t\t}\n\t\t}\n\t});\n\n\n\tjQuery._evalUrl = function (url, options, doc) {\n\t\treturn jQuery.ajax({\n\t\t\turl: url,\n\n\t\t\t// Make this explicit, since user can override this through ajaxSetup (trac-11264)\n\t\t\ttype: \"GET\",\n\t\t\tdataType: \"script\",\n\t\t\tcache: true,\n\t\t\tasync: false,\n\t\t\tglobal: false,\n\n\t\t\t// Only evaluate the response if it is successful (gh-4126)\n\t\t\t// dataFilter is not invoked for failure responses, so using it instead\n\t\t\t// of the default converter is kludgy but it works.\n\t\t\tconverters: {\n\t\t\t\t\"text script\": function () { }\n\t\t\t},\n\t\t\tdataFilter: function (response) {\n\t\t\t\tjQuery.globalEval(response, options, doc);\n\t\t\t}\n\t\t});\n\t};\n\n\n\tjQuery.fn.extend({\n\t\twrapAll: function (html) {\n\t\t\tvar wrap;\n\n\t\t\tif (this[0]) {\n\t\t\t\tif (isFunction(html)) {\n\t\t\t\t\thtml = html.call(this[0]);\n\t\t\t\t}\n\n\t\t\t\t// The elements to wrap the target around\n\t\t\t\twrap = jQuery(html, this[0].ownerDocument).eq(0).clone(true);\n\n\t\t\t\tif (this[0].parentNode) {\n\t\t\t\t\twrap.insertBefore(this[0]);\n\t\t\t\t}\n\n\t\t\t\twrap.map(function () {\n\t\t\t\t\tvar elem = this;\n\n\t\t\t\t\twhile (elem.firstElementChild) {\n\t\t\t\t\t\telem = elem.firstElementChild;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn elem;\n\t\t\t\t}).append(this);\n\t\t\t}\n\n\t\t\treturn this;\n\t\t},\n\n\t\twrapInner: function (html) {\n\t\t\tif (isFunction(html)) {\n\t\t\t\treturn this.each(function (i) {\n\t\t\t\t\tjQuery(this).wrapInner(html.call(this, i));\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn this.each(function () {\n\t\t\t\tvar self = jQuery(this),\n\t\t\t\t\tcontents = self.contents();\n\n\t\t\t\tif (contents.length) {\n\t\t\t\t\tcontents.wrapAll(html);\n\n\t\t\t\t} else {\n\t\t\t\t\tself.append(html);\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\twrap: function (html) {\n\t\t\tvar htmlIsFunction = isFunction(html);\n\n\t\t\treturn this.each(function (i) {\n\t\t\t\tjQuery(this).wrapAll(htmlIsFunction ? html.call(this, i) : html);\n\t\t\t});\n\t\t},\n\n\t\tunwrap: function (selector) {\n\t\t\tthis.parent(selector).not(\"body\").each(function () {\n\t\t\t\tjQuery(this).replaceWith(this.childNodes);\n\t\t\t});\n\t\t\treturn this;\n\t\t}\n\t});\n\n\n\tjQuery.expr.pseudos.hidden = function (elem) {\n\t\treturn !jQuery.expr.pseudos.visible(elem);\n\t};\n\tjQuery.expr.pseudos.visible = function (elem) {\n\t\treturn !!(elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length);\n\t};\n\n\n\n\n\tjQuery.ajaxSettings.xhr = function () {\n\t\ttry {\n\t\t\treturn new window.XMLHttpRequest();\n\t\t} catch (e) { }\n\t};\n\n\tvar xhrSuccessStatus = {\n\n\t\t// File protocol always yields status code 0, assume 200\n\t\t0: 200,\n\n\t\t// Support: IE <=9 only\n\t\t// trac-1450: sometimes IE returns 1223 when it should be 204\n\t\t1223: 204\n\t},\n\t\txhrSupported = jQuery.ajaxSettings.xhr();\n\n\tsupport.cors = !!xhrSupported && (\"withCredentials\" in xhrSupported);\n\tsupport.ajax = xhrSupported = !!xhrSupported;\n\n\tjQuery.ajaxTransport(function (options) {\n\t\tvar callback, errorCallback;\n\n\t\t// Cross domain only allowed if supported through XMLHttpRequest\n\t\tif (support.cors || xhrSupported && !options.crossDomain) {\n\t\t\treturn {\n\t\t\t\tsend: function (headers, complete) {\n\t\t\t\t\tvar i,\n\t\t\t\t\t\txhr = options.xhr();\n\n\t\t\t\t\txhr.open(\n\t\t\t\t\t\toptions.type,\n\t\t\t\t\t\toptions.url,\n\t\t\t\t\t\toptions.async,\n\t\t\t\t\t\toptions.username,\n\t\t\t\t\t\toptions.password\n\t\t\t\t\t);\n\n\t\t\t\t\t// Apply custom fields if provided\n\t\t\t\t\tif (options.xhrFields) {\n\t\t\t\t\t\tfor (i in options.xhrFields) {\n\t\t\t\t\t\t\txhr[i] = options.xhrFields[i];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Override mime type if needed\n\t\t\t\t\tif (options.mimeType && xhr.overrideMimeType) {\n\t\t\t\t\t\txhr.overrideMimeType(options.mimeType);\n\t\t\t\t\t}\n\n\t\t\t\t\t// X-Requested-With header\n\t\t\t\t\t// For cross-domain requests, seeing as conditions for a preflight are\n\t\t\t\t\t// akin to a jigsaw puzzle, we simply never set it to be sure.\n\t\t\t\t\t// (it can always be set on a per-request basis or even using ajaxSetup)\n\t\t\t\t\t// For same-domain requests, won't change header if already provided.\n\t\t\t\t\tif (!options.crossDomain && !headers[\"X-Requested-With\"]) {\n\t\t\t\t\t\theaders[\"X-Requested-With\"] = \"XMLHttpRequest\";\n\t\t\t\t\t}\n\n\t\t\t\t\t// Set headers\n\t\t\t\t\tfor (i in headers) {\n\t\t\t\t\t\txhr.setRequestHeader(i, headers[i]);\n\t\t\t\t\t}\n\n\t\t\t\t\t// Callback\n\t\t\t\t\tcallback = function (type) {\n\t\t\t\t\t\treturn function () {\n\t\t\t\t\t\t\tif (callback) {\n\t\t\t\t\t\t\t\tcallback = errorCallback = xhr.onload =\n\t\t\t\t\t\t\t\t\txhr.onerror = xhr.onabort = xhr.ontimeout =\n\t\t\t\t\t\t\t\t\txhr.onreadystatechange = null;\n\n\t\t\t\t\t\t\t\tif (type === \"abort\") {\n\t\t\t\t\t\t\t\t\txhr.abort();\n\t\t\t\t\t\t\t\t} else if (type === \"error\") {\n\n\t\t\t\t\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t\t\t\t\t// On a manual native abort, IE9 throws\n\t\t\t\t\t\t\t\t\t// errors on any property access that is not readyState\n\t\t\t\t\t\t\t\t\tif (typeof xhr.status !== \"number\") {\n\t\t\t\t\t\t\t\t\t\tcomplete(0, \"error\");\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tcomplete(\n\n\t\t\t\t\t\t\t\t\t\t\t// File: protocol always yields status 0; see trac-8605, trac-14207\n\t\t\t\t\t\t\t\t\t\t\txhr.status,\n\t\t\t\t\t\t\t\t\t\t\txhr.statusText\n\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tcomplete(\n\t\t\t\t\t\t\t\t\t\txhrSuccessStatus[xhr.status] || xhr.status,\n\t\t\t\t\t\t\t\t\t\txhr.statusText,\n\n\t\t\t\t\t\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t\t\t\t\t\t// IE9 has no XHR2 but throws on binary (trac-11426)\n\t\t\t\t\t\t\t\t\t\t// For XHR2 non-text, let the caller handle it (gh-2498)\n\t\t\t\t\t\t\t\t\t\t(xhr.responseType || \"text\") !== \"text\" ||\n\t\t\t\t\t\t\t\t\t\t\ttypeof xhr.responseText !== \"string\" ?\n\t\t\t\t\t\t\t\t\t\t\t{ binary: xhr.response } :\n\t\t\t\t\t\t\t\t\t\t\t{ text: xhr.responseText },\n\t\t\t\t\t\t\t\t\t\txhr.getAllResponseHeaders()\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\t\t\t\t\t};\n\n\t\t\t\t\t// Listen to events\n\t\t\t\t\txhr.onload = callback();\n\t\t\t\t\terrorCallback = xhr.onerror = xhr.ontimeout = callback(\"error\");\n\n\t\t\t\t\t// Support: IE 9 only\n\t\t\t\t\t// Use onreadystatechange to replace onabort\n\t\t\t\t\t// to handle uncaught aborts\n\t\t\t\t\tif (xhr.onabort !== undefined) {\n\t\t\t\t\t\txhr.onabort = errorCallback;\n\t\t\t\t\t} else {\n\t\t\t\t\t\txhr.onreadystatechange = function () {\n\n\t\t\t\t\t\t\t// Check readyState before timeout as it changes\n\t\t\t\t\t\t\tif (xhr.readyState === 4) {\n\n\t\t\t\t\t\t\t\t// Allow onerror to be called first,\n\t\t\t\t\t\t\t\t// but that will not handle a native abort\n\t\t\t\t\t\t\t\t// Also, save errorCallback to a variable\n\t\t\t\t\t\t\t\t// as xhr.onerror cannot be accessed\n\t\t\t\t\t\t\t\twindow.setTimeout(function () {\n\t\t\t\t\t\t\t\t\tif (callback) {\n\t\t\t\t\t\t\t\t\t\terrorCallback();\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\t// Create the abort callback\n\t\t\t\t\tcallback = callback(\"abort\");\n\n\t\t\t\t\ttry {\n\n\t\t\t\t\t\t// Do send the request (this may raise an exception)\n\t\t\t\t\t\txhr.send(options.hasContent && options.data || null);\n\t\t\t\t\t} catch (e) {\n\n\t\t\t\t\t\t// trac-14683: Only rethrow if this hasn't been notified as an error yet\n\t\t\t\t\t\tif (callback) {\n\t\t\t\t\t\t\tthrow e;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\t\tabort: function () {\n\t\t\t\t\tif (callback) {\n\t\t\t\t\t\tcallback();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t});\n\n\n\n\n\t// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432)\n\tjQuery.ajaxPrefilter(function (s) {\n\t\tif (s.crossDomain) {\n\t\t\ts.contents.script = false;\n\t\t}\n\t});\n\n\t// Install script dataType\n\tjQuery.ajaxSetup({\n\t\taccepts: {\n\t\t\tscript: \"text/javascript, application/javascript, \" +\n\t\t\t\t\"application/ecmascript, application/x-ecmascript\"\n\t\t},\n\t\tcontents: {\n\t\t\tscript: /\\b(?:java|ecma)script\\b/\n\t\t},\n\t\tconverters: {\n\t\t\t\"text script\": function (text) {\n\t\t\t\tjQuery.globalEval(text);\n\t\t\t\treturn text;\n\t\t\t}\n\t\t}\n\t});\n\n\t// Handle cache's special case and crossDomain\n\tjQuery.ajaxPrefilter(\"script\", function (s) {\n\t\tif (s.cache === undefined) {\n\t\t\ts.cache = false;\n\t\t}\n\t\tif (s.crossDomain) {\n\t\t\ts.type = \"GET\";\n\t\t}\n\t});\n\n\t// Bind script tag hack transport\n\tjQuery.ajaxTransport(\"script\", function (s) {\n\n\t\t// This transport only deals with cross domain or forced-by-attrs requests\n\t\tif (s.crossDomain || s.scriptAttrs) {\n\t\t\tvar script, callback;\n\t\t\treturn {\n\t\t\t\tsend: function (_, complete) {\n\t\t\t\t\tscript = jQuery(\"<script>\")\n\t\t\t\t\t\t.attr(s.scriptAttrs || {})\n\t\t\t\t\t\t.prop({ charset: s.scriptCharset, src: s.url })\n\t\t\t\t\t\t.on(\"load error\", callback = function (evt) {\n\t\t\t\t\t\t\tscript.remove();\n\t\t\t\t\t\t\tcallback = null;\n\t\t\t\t\t\t\tif (evt) {\n\t\t\t\t\t\t\t\tcomplete(evt.type === \"error\" ? 404 : 200, evt.type);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\n\t\t\t\t\t// Use native DOM manipulation to avoid our domManip AJAX trickery\n\t\t\t\t\tdocument.head.appendChild(script[0]);\n\t\t\t\t},\n\t\t\t\tabort: function () {\n\t\t\t\t\tif (callback) {\n\t\t\t\t\t\tcallback();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t});\n\n\n\n\n\tvar oldCallbacks = [],\n\t\trjsonp = /(=)\\?(?=&|$)|\\?\\?/;\n\n\t// Default jsonp settings\n\tjQuery.ajaxSetup({\n\t\tjsonp: \"callback\",\n\t\tjsonpCallback: function () {\n\t\t\tvar callback = oldCallbacks.pop() || (jQuery.expando + \"_\" + (nonce.guid++));\n\t\t\tthis[callback] = true;\n\t\t\treturn callback;\n\t\t}\n\t});\n\n\t// Detect, normalize options and install callbacks for jsonp requests\n\tjQuery.ajaxPrefilter(\"json jsonp\", function (s, originalSettings, jqXHR) {\n\n\t\tvar callbackName, overwritten, responseContainer,\n\t\t\tjsonProp = s.jsonp !== false && (rjsonp.test(s.url) ?\n\t\t\t\t\"url\" :\n\t\t\t\ttypeof s.data === \"string\" &&\n\t\t\t\t(s.contentType || \"\")\n\t\t\t\t\t.indexOf(\"application/x-www-form-urlencoded\") === 0 &&\n\t\t\t\trjsonp.test(s.data) && \"data\"\n\t\t\t);\n\n\t\t// Handle iff the expected data type is \"jsonp\" or we have a parameter to set\n\t\tif (jsonProp || s.dataTypes[0] === \"jsonp\") {\n\n\t\t\t// Get callback name, remembering preexisting value associated with it\n\t\t\tcallbackName = s.jsonpCallback = isFunction(s.jsonpCallback) ?\n\t\t\t\ts.jsonpCallback() :\n\t\t\t\ts.jsonpCallback;\n\n\t\t\t// Insert callback into url or form data\n\t\t\tif (jsonProp) {\n\t\t\t\ts[jsonProp] = s[jsonProp].replace(rjsonp, \"$1\" + callbackName);\n\t\t\t} else if (s.jsonp !== false) {\n\t\t\t\ts.url += (rquery.test(s.url) ? \"&\" : \"?\") + s.jsonp + \"=\" + callbackName;\n\t\t\t}\n\n\t\t\t// Use data converter to retrieve json after script execution\n\t\t\ts.converters[\"script json\"] = function () {\n\t\t\t\tif (!responseContainer) {\n\t\t\t\t\tjQuery.error(callbackName + \" was not called\");\n\t\t\t\t}\n\t\t\t\treturn responseContainer[0];\n\t\t\t};\n\n\t\t\t// Force json dataType\n\t\t\ts.dataTypes[0] = \"json\";\n\n\t\t\t// Install callback\n\t\t\toverwritten = window[callbackName];\n\t\t\twindow[callbackName] = function () {\n\t\t\t\tresponseContainer = arguments;\n\t\t\t};\n\n\t\t\t// Clean-up function (fires after converters)\n\t\t\tjqXHR.always(function () {\n\n\t\t\t\t// If previous value didn't exist - remove it\n\t\t\t\tif (overwritten === undefined) {\n\t\t\t\t\tjQuery(window).removeProp(callbackName);\n\n\t\t\t\t\t// Otherwise restore preexisting value\n\t\t\t\t} else {\n\t\t\t\t\twindow[callbackName] = overwritten;\n\t\t\t\t}\n\n\t\t\t\t// Save back as free\n\t\t\t\tif (s[callbackName]) {\n\n\t\t\t\t\t// Make sure that re-using the options doesn't screw things around\n\t\t\t\t\ts.jsonpCallback = originalSettings.jsonpCallback;\n\n\t\t\t\t\t// Save the callback name for future use\n\t\t\t\t\toldCallbacks.push(callbackName);\n\t\t\t\t}\n\n\t\t\t\t// Call if it was a function and we have a response\n\t\t\t\tif (responseContainer && isFunction(overwritten)) {\n\t\t\t\t\toverwritten(responseContainer[0]);\n\t\t\t\t}\n\n\t\t\t\tresponseContainer = overwritten = undefined;\n\t\t\t});\n\n\t\t\t// Delegate to script\n\t\t\treturn \"script\";\n\t\t}\n\t});\n\n\n\n\n\t// Support: Safari 8 only\n\t// In Safari 8 documents created via document.implementation.createHTMLDocument\n\t// collapse sibling forms: the second one becomes a child of the first one.\n\t// Because of that, this security measure has to be disabled in Safari 8.\n\t// https://bugs.webkit.org/show_bug.cgi?id=137337\n\tsupport.createHTMLDocument = (function () {\n\t\tvar body = document.implementation.createHTMLDocument(\"\").body;\n\t\tbody.innerHTML = \"<form></form><form></form>\";\n\t\treturn body.childNodes.length === 2;\n\t})();\n\n\n\t// Argument \"data\" should be string of html\n\t// context (optional): If specified, the fragment will be created in this context,\n\t// defaults to document\n\t// keepScripts (optional): If true, will include scripts passed in the html string\n\tjQuery.parseHTML = function (data, context, keepScripts) {\n\t\tif (typeof data !== \"string\") {\n\t\t\treturn [];\n\t\t}\n\t\tif (typeof context === \"boolean\") {\n\t\t\tkeepScripts = context;\n\t\t\tcontext = false;\n\t\t}\n\n\t\tvar base, parsed, scripts;\n\n\t\tif (!context) {\n\n\t\t\t// Stop scripts or inline event handlers from being executed immediately\n\t\t\t// by using document.implementation\n\t\t\tif (support.createHTMLDocument) {\n\t\t\t\tcontext = document.implementation.createHTMLDocument(\"\");\n\n\t\t\t\t// Set the base href for the created document\n\t\t\t\t// so any parsed elements with URLs\n\t\t\t\t// are based on the document's URL (gh-2965)\n\t\t\t\tbase = context.createElement(\"base\");\n\t\t\t\tbase.href = document.location.href;\n\t\t\t\tcontext.head.appendChild(base);\n\t\t\t} else {\n\t\t\t\tcontext = document;\n\t\t\t}\n\t\t}\n\n\t\tparsed = rsingleTag.exec(data);\n\t\tscripts = !keepScripts && [];\n\n\t\t// Single tag\n\t\tif (parsed) {\n\t\t\treturn [context.createElement(parsed[1])];\n\t\t}\n\n\t\tparsed = buildFragment([data], context, scripts);\n\n\t\tif (scripts && scripts.length) {\n\t\t\tjQuery(scripts).remove();\n\t\t}\n\n\t\treturn jQuery.merge([], parsed.childNodes);\n\t};\n\n\n\t/**\n\t * Load a url into a page\n\t */\n\tjQuery.fn.load = function (url, params, callback) {\n\t\tvar selector, type, response,\n\t\t\tself = this,\n\t\t\toff = url.indexOf(\" \");\n\n\t\tif (off > -1) {\n\t\t\tselector = stripAndCollapse(url.slice(off));\n\t\t\turl = url.slice(0, off);\n\t\t}\n\n\t\t// If it's a function\n\t\tif (isFunction(params)) {\n\n\t\t\t// We assume that it's the callback\n\t\t\tcallback = params;\n\t\t\tparams = undefined;\n\n\t\t\t// Otherwise, build a param string\n\t\t} else if (params && typeof params === \"object\") {\n\t\t\ttype = \"POST\";\n\t\t}\n\n\t\t// If we have elements to modify, make the request\n\t\tif (self.length > 0) {\n\t\t\tjQuery.ajax({\n\t\t\t\turl: url,\n\n\t\t\t\t// If \"type\" variable is undefined, then \"GET\" method will be used.\n\t\t\t\t// Make value of this field explicit since\n\t\t\t\t// user can override it through ajaxSetup method\n\t\t\t\ttype: type || \"GET\",\n\t\t\t\tdataType: \"html\",\n\t\t\t\tdata: params\n\t\t\t}).done(function (responseText) {\n\n\t\t\t\t// Save response for use in complete callback\n\t\t\t\tresponse = arguments;\n\n\t\t\t\tself.html(selector ?\n\n\t\t\t\t\t// If a selector was specified, locate the right elements in a dummy div\n\t\t\t\t\t// Exclude scripts to avoid IE 'Permission Denied' errors\n\t\t\t\t\tjQuery(\"<div>\").append(jQuery.parseHTML(responseText)).find(selector) :\n\n\t\t\t\t\t// Otherwise use the full result\n\t\t\t\t\tresponseText);\n\n\t\t\t\t// If the request succeeds, this function gets \"data\", \"status\", \"jqXHR\"\n\t\t\t\t// but they are ignored because response was set above.\n\t\t\t\t// If it fails, this function gets \"jqXHR\", \"status\", \"error\"\n\t\t\t}).always(callback && function (jqXHR, status) {\n\t\t\t\tself.each(function () {\n\t\t\t\t\tcallback.apply(this, response || [jqXHR.responseText, status, jqXHR]);\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\n\t\treturn this;\n\t};\n\n\n\n\n\tjQuery.expr.pseudos.animated = function (elem) {\n\t\treturn jQuery.grep(jQuery.timers, function (fn) {\n\t\t\treturn elem === fn.elem;\n\t\t}).length;\n\t};\n\n\n\n\n\tjQuery.offset = {\n\t\tsetOffset: function (elem, options, i) {\n\t\t\tvar curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition,\n\t\t\t\tposition = jQuery.css(elem, \"position\"),\n\t\t\t\tcurElem = jQuery(elem),\n\t\t\t\tprops = {};\n\n\t\t\t// Set position first, in-case top/left are set even on static elem\n\t\t\tif (position === \"static\") {\n\t\t\t\telem.style.position = \"relative\";\n\t\t\t}\n\n\t\t\tcurOffset = curElem.offset();\n\t\t\tcurCSSTop = jQuery.css(elem, \"top\");\n\t\t\tcurCSSLeft = jQuery.css(elem, \"left\");\n\t\t\tcalculatePosition = (position === \"absolute\" || position === \"fixed\") &&\n\t\t\t\t(curCSSTop + curCSSLeft).indexOf(\"auto\") > -1;\n\n\t\t\t// Need to be able to calculate position if either\n\t\t\t// top or left is auto and position is either absolute or fixed\n\t\t\tif (calculatePosition) {\n\t\t\t\tcurPosition = curElem.position();\n\t\t\t\tcurTop = curPosition.top;\n\t\t\t\tcurLeft = curPosition.left;\n\n\t\t\t} else {\n\t\t\t\tcurTop = parseFloat(curCSSTop) || 0;\n\t\t\t\tcurLeft = parseFloat(curCSSLeft) || 0;\n\t\t\t}\n\n\t\t\tif (isFunction(options)) {\n\n\t\t\t\t// Use jQuery.extend here to allow modification of coordinates argument (gh-1848)\n\t\t\t\toptions = options.call(elem, i, jQuery.extend({}, curOffset));\n\t\t\t}\n\n\t\t\tif (options.top != null) {\n\t\t\t\tprops.top = (options.top - curOffset.top) + curTop;\n\t\t\t}\n\t\t\tif (options.left != null) {\n\t\t\t\tprops.left = (options.left - curOffset.left) + curLeft;\n\t\t\t}\n\n\t\t\tif (\"using\" in options) {\n\t\t\t\toptions.using.call(elem, props);\n\n\t\t\t} else {\n\t\t\t\tcurElem.css(props);\n\t\t\t}\n\t\t}\n\t};\n\n\tjQuery.fn.extend({\n\n\t\t// offset() relates an element's border box to the document origin\n\t\toffset: function (options) {\n\n\t\t\t// Preserve chaining for setter\n\t\t\tif (arguments.length) {\n\t\t\t\treturn options === undefined ?\n\t\t\t\t\tthis :\n\t\t\t\t\tthis.each(function (i) {\n\t\t\t\t\t\tjQuery.offset.setOffset(this, options, i);\n\t\t\t\t\t});\n\t\t\t}\n\n\t\t\tvar rect, win,\n\t\t\t\telem = this[0];\n\n\t\t\tif (!elem) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Return zeros for disconnected and hidden (display: none) elements (gh-2310)\n\t\t\t// Support: IE <=11 only\n\t\t\t// Running getBoundingClientRect on a\n\t\t\t// disconnected node in IE throws an error\n\t\t\tif (!elem.getClientRects().length) {\n\t\t\t\treturn { top: 0, left: 0 };\n\t\t\t}\n\n\t\t\t// Get document-relative position by adding viewport scroll to viewport-relative gBCR\n\t\t\trect = elem.getBoundingClientRect();\n\t\t\twin = elem.ownerDocument.defaultView;\n\t\t\treturn {\n\t\t\t\ttop: rect.top + win.pageYOffset,\n\t\t\t\tleft: rect.left + win.pageXOffset\n\t\t\t};\n\t\t},\n\n\t\t// position() relates an element's margin box to its offset parent's padding box\n\t\t// This corresponds to the behavior of CSS absolute positioning\n\t\tposition: function () {\n\t\t\tif (!this[0]) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar offsetParent, offset, doc,\n\t\t\t\telem = this[0],\n\t\t\t\tparentOffset = { top: 0, left: 0 };\n\n\t\t\t// position:fixed elements are offset from the viewport, which itself always has zero offset\n\t\t\tif (jQuery.css(elem, \"position\") === \"fixed\") {\n\n\t\t\t\t// Assume position:fixed implies availability of getBoundingClientRect\n\t\t\t\toffset = elem.getBoundingClientRect();\n\n\t\t\t} else {\n\t\t\t\toffset = this.offset();\n\n\t\t\t\t// Account for the *real* offset parent, which can be the document or its root element\n\t\t\t\t// when a statically positioned element is identified\n\t\t\t\tdoc = elem.ownerDocument;\n\t\t\t\toffsetParent = elem.offsetParent || doc.documentElement;\n\t\t\t\twhile (offsetParent &&\n\t\t\t\t\t(offsetParent === doc.body || offsetParent === doc.documentElement) &&\n\t\t\t\t\tjQuery.css(offsetParent, \"position\") === \"static\") {\n\n\t\t\t\t\toffsetParent = offsetParent.parentNode;\n\t\t\t\t}\n\t\t\t\tif (offsetParent && offsetParent !== elem && offsetParent.nodeType === 1) {\n\n\t\t\t\t\t// Incorporate borders into its offset, since they are outside its content origin\n\t\t\t\t\tparentOffset = jQuery(offsetParent).offset();\n\t\t\t\t\tparentOffset.top += jQuery.css(offsetParent, \"borderTopWidth\", true);\n\t\t\t\t\tparentOffset.left += jQuery.css(offsetParent, \"borderLeftWidth\", true);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Subtract parent offsets and element margins\n\t\t\treturn {\n\t\t\t\ttop: offset.top - parentOffset.top - jQuery.css(elem, \"marginTop\", true),\n\t\t\t\tleft: offset.left - parentOffset.left - jQuery.css(elem, \"marginLeft\", true)\n\t\t\t};\n\t\t},\n\n\t\t// This method will return documentElement in the following cases:\n\t\t// 1) For the element inside the iframe without offsetParent, this method will return\n\t\t//    documentElement of the parent window\n\t\t// 2) For the hidden or detached element\n\t\t// 3) For body or html element, i.e. in case of the html node - it will return itself\n\t\t//\n\t\t// but those exceptions were never presented as a real life use-cases\n\t\t// and might be considered as more preferable results.\n\t\t//\n\t\t// This logic, however, is not guaranteed and can change at any point in the future\n\t\toffsetParent: function () {\n\t\t\treturn this.map(function () {\n\t\t\t\tvar offsetParent = this.offsetParent;\n\n\t\t\t\twhile (offsetParent && jQuery.css(offsetParent, \"position\") === \"static\") {\n\t\t\t\t\toffsetParent = offsetParent.offsetParent;\n\t\t\t\t}\n\n\t\t\t\treturn offsetParent || documentElement;\n\t\t\t});\n\t\t}\n\t});\n\n\t// Create scrollLeft and scrollTop methods\n\tjQuery.each({ scrollLeft: \"pageXOffset\", scrollTop: \"pageYOffset\" }, function (method, prop) {\n\t\tvar top = \"pageYOffset\" === prop;\n\n\t\tjQuery.fn[method] = function (val) {\n\t\t\treturn access(this, function (elem, method, val) {\n\n\t\t\t\t// Coalesce documents and windows\n\t\t\t\tvar win;\n\t\t\t\tif (isWindow(elem)) {\n\t\t\t\t\twin = elem;\n\t\t\t\t} else if (elem.nodeType === 9) {\n\t\t\t\t\twin = elem.defaultView;\n\t\t\t\t}\n\n\t\t\t\tif (val === undefined) {\n\t\t\t\t\treturn win ? win[prop] : elem[method];\n\t\t\t\t}\n\n\t\t\t\tif (win) {\n\t\t\t\t\twin.scrollTo(\n\t\t\t\t\t\t!top ? val : win.pageXOffset,\n\t\t\t\t\t\ttop ? val : win.pageYOffset\n\t\t\t\t\t);\n\n\t\t\t\t} else {\n\t\t\t\t\telem[method] = val;\n\t\t\t\t}\n\t\t\t}, method, val, arguments.length);\n\t\t};\n\t});\n\n\t// Support: Safari <=7 - 9.1, Chrome <=37 - 49\n\t// Add the top/left cssHooks using jQuery.fn.position\n\t// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084\n\t// Blink bug: https://bugs.chromium.org/p/chromium/issues/detail?id=589347\n\t// getComputedStyle returns percent when specified for top/left/bottom/right;\n\t// rather than make the css module depend on the offset module, just check for it here\n\tjQuery.each([\"top\", \"left\"], function (_i, prop) {\n\t\tjQuery.cssHooks[prop] = addGetHookIf(support.pixelPosition,\n\t\t\tfunction (elem, computed) {\n\t\t\t\tif (computed) {\n\t\t\t\t\tcomputed = curCSS(elem, prop);\n\n\t\t\t\t\t// If curCSS returns percentage, fallback to offset\n\t\t\t\t\treturn rnumnonpx.test(computed) ?\n\t\t\t\t\t\tjQuery(elem).position()[prop] + \"px\" :\n\t\t\t\t\t\tcomputed;\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\t});\n\n\n\t// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods\n\tjQuery.each({ Height: \"height\", Width: \"width\" }, function (name, type) {\n\t\tjQuery.each({\n\t\t\tpadding: \"inner\" + name,\n\t\t\tcontent: type,\n\t\t\t\"\": \"outer\" + name\n\t\t}, function (defaultExtra, funcName) {\n\n\t\t\t// Margin is only for outerHeight, outerWidth\n\t\t\tjQuery.fn[funcName] = function (margin, value) {\n\t\t\t\tvar chainable = arguments.length && (defaultExtra || typeof margin !== \"boolean\"),\n\t\t\t\t\textra = defaultExtra || (margin === true || value === true ? \"margin\" : \"border\");\n\n\t\t\t\treturn access(this, function (elem, type, value) {\n\t\t\t\t\tvar doc;\n\n\t\t\t\t\tif (isWindow(elem)) {\n\n\t\t\t\t\t\t// $( window ).outerWidth/Height return w/h including scrollbars (gh-1729)\n\t\t\t\t\t\treturn funcName.indexOf(\"outer\") === 0 ?\n\t\t\t\t\t\t\telem[\"inner\" + name] :\n\t\t\t\t\t\t\telem.document.documentElement[\"client\" + name];\n\t\t\t\t\t}\n\n\t\t\t\t\t// Get document width or height\n\t\t\t\t\tif (elem.nodeType === 9) {\n\t\t\t\t\t\tdoc = elem.documentElement;\n\n\t\t\t\t\t\t// Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height],\n\t\t\t\t\t\t// whichever is greatest\n\t\t\t\t\t\treturn Math.max(\n\t\t\t\t\t\t\telem.body[\"scroll\" + name], doc[\"scroll\" + name],\n\t\t\t\t\t\t\telem.body[\"offset\" + name], doc[\"offset\" + name],\n\t\t\t\t\t\t\tdoc[\"client\" + name]\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\n\t\t\t\t\treturn value === undefined ?\n\n\t\t\t\t\t\t// Get width or height on the element, requesting but not forcing parseFloat\n\t\t\t\t\t\tjQuery.css(elem, type, extra) :\n\n\t\t\t\t\t\t// Set width or height on the element\n\t\t\t\t\t\tjQuery.style(elem, type, value, extra);\n\t\t\t\t}, type, chainable ? margin : undefined, chainable);\n\t\t\t};\n\t\t});\n\t});\n\n\n\tjQuery.each([\n\t\t\"ajaxStart\",\n\t\t\"ajaxStop\",\n\t\t\"ajaxComplete\",\n\t\t\"ajaxError\",\n\t\t\"ajaxSuccess\",\n\t\t\"ajaxSend\"\n\t], function (_i, type) {\n\t\tjQuery.fn[type] = function (fn) {\n\t\t\treturn this.on(type, fn);\n\t\t};\n\t});\n\n\n\n\n\tjQuery.fn.extend({\n\n\t\tbind: function (types, data, fn) {\n\t\t\treturn this.on(types, null, data, fn);\n\t\t},\n\t\tunbind: function (types, fn) {\n\t\t\treturn this.off(types, null, fn);\n\t\t},\n\n\t\tdelegate: function (selector, types, data, fn) {\n\t\t\treturn this.on(types, selector, data, fn);\n\t\t},\n\t\tundelegate: function (selector, types, fn) {\n\n\t\t\t// ( namespace ) or ( selector, types [, fn] )\n\t\t\treturn arguments.length === 1 ?\n\t\t\t\tthis.off(selector, \"**\") :\n\t\t\t\tthis.off(types, selector || \"**\", fn);\n\t\t},\n\n\t\thover: function (fnOver, fnOut) {\n\t\t\treturn this.mouseenter(fnOver).mouseleave(fnOut || fnOver);\n\t\t}\n\t});\n\n\tjQuery.each(\n\t\t(\"blur focus focusin focusout resize scroll click dblclick \" +\n\t\t\t\"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave \" +\n\t\t\t\"change select submit keydown keypress keyup contextmenu\").split(\" \"),\n\t\tfunction (_i, name) {\n\n\t\t\t// Handle event binding\n\t\t\tjQuery.fn[name] = function (data, fn) {\n\t\t\t\treturn arguments.length > 0 ?\n\t\t\t\t\tthis.on(name, null, data, fn) :\n\t\t\t\t\tthis.trigger(name);\n\t\t\t};\n\t\t}\n\t);\n\n\n\n\n\t// Support: Android <=4.0 only\n\t// Make sure we trim BOM and NBSP\n\t// Require that the \"whitespace run\" starts from a non-whitespace\n\t// to avoid O(N^2) behavior when the engine would try matching \"\\s+$\" at each space position.\n\tvar rtrim = /^[\\s\\uFEFF\\xA0]+|([^\\s\\uFEFF\\xA0])[\\s\\uFEFF\\xA0]+$/g;\n\n\t// Bind a function to a context, optionally partially applying any\n\t// arguments.\n\t// jQuery.proxy is deprecated to promote standards (specifically Function#bind)\n\t// However, it is not slated for removal any time soon\n\tjQuery.proxy = function (fn, context) {\n\t\tvar tmp, args, proxy;\n\n\t\tif (typeof context === \"string\") {\n\t\t\ttmp = fn[context];\n\t\t\tcontext = fn;\n\t\t\tfn = tmp;\n\t\t}\n\n\t\t// Quick check to determine if target is callable, in the spec\n\t\t// this throws a TypeError, but we will just return undefined.\n\t\tif (!isFunction(fn)) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\t// Simulated bind\n\t\targs = slice.call(arguments, 2);\n\t\tproxy = function () {\n\t\t\treturn fn.apply(context || this, args.concat(slice.call(arguments)));\n\t\t};\n\n\t\t// Set the guid of unique handler to the same of original handler, so it can be removed\n\t\tproxy.guid = fn.guid = fn.guid || jQuery.guid++;\n\n\t\treturn proxy;\n\t};\n\n\tjQuery.holdReady = function (hold) {\n\t\tif (hold) {\n\t\t\tjQuery.readyWait++;\n\t\t} else {\n\t\t\tjQuery.ready(true);\n\t\t}\n\t};\n\tjQuery.isArray = Array.isArray;\n\tjQuery.parseJSON = JSON.parse;\n\tjQuery.nodeName = nodeName;\n\tjQuery.isFunction = isFunction;\n\tjQuery.isWindow = isWindow;\n\tjQuery.camelCase = camelCase;\n\tjQuery.type = toType;\n\n\tjQuery.now = Date.now;\n\n\tjQuery.isNumeric = function (obj) {\n\n\t\t// As of jQuery 3.0, isNumeric is limited to\n\t\t// strings and numbers (primitives or objects)\n\t\t// that can be coerced to finite numbers (gh-2662)\n\t\tvar type = jQuery.type(obj);\n\t\treturn (type === \"number\" || type === \"string\") &&\n\n\t\t\t// parseFloat NaNs numeric-cast false positives (\"\")\n\t\t\t// ...but misinterprets leading-number strings, particularly hex literals (\"0x...\")\n\t\t\t// subtraction forces infinities to NaN\n\t\t\t!isNaN(obj - parseFloat(obj));\n\t};\n\n\tjQuery.trim = function (text) {\n\t\treturn text == null ?\n\t\t\t\"\" :\n\t\t\t(text + \"\").replace(rtrim, \"$1\");\n\t};\n\n\n\n\t// Register as a named AMD module, since jQuery can be concatenated with other\n\t// files that may use define, but not via a proper concatenation script that\n\t// understands anonymous AMD modules. A named AMD is safest and most robust\n\t// way to register. Lowercase jquery is used because AMD module names are\n\t// derived from file names, and jQuery is normally delivered in a lowercase\n\t// file name. Do this after creating the global so that if an AMD module wants\n\t// to call noConflict to hide this version of jQuery, it will work.\n\n\t// Note that for maximum portability, libraries that are not jQuery should\n\t// declare themselves as anonymous modules, and avoid setting a global if an\n\t// AMD loader is present. jQuery is a special case. For more information, see\n\t// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon\n\n\tif (typeof define === \"function\" && define.amd) {\n\t\tdefine(\"jquery\", [], function () {\n\t\t\treturn jQuery;\n\t\t});\n\t}\n\n\n\n\n\tvar\n\n\t\t// Map over jQuery in case of overwrite\n\t\t_jQuery = window.jQuery,\n\n\t\t// Map over the $ in case of overwrite\n\t\t_$ = window.$;\n\n\tjQuery.noConflict = function (deep) {\n\t\tif (window.$ === jQuery) {\n\t\t\twindow.$ = _$;\n\t\t}\n\n\t\tif (deep && window.jQuery === jQuery) {\n\t\t\twindow.jQuery = _jQuery;\n\t\t}\n\n\t\treturn jQuery;\n\t};\n\n\t// Expose jQuery and $ identifiers, even in AMD\n\t// (trac-7102#comment:10, https://github.com/jquery/jquery/pull/557)\n\t// and CommonJS for browser emulators (trac-13566)\n\tif (typeof noGlobal === \"undefined\") {\n\t\twindow.jQuery = window.$ = jQuery;\n\t}\n\n\n\n\n\treturn jQuery;\n});"
  },
  {
    "path": "src/sourceDev.WebApp/SharedThemes/darkly/Shared/_Layout.cshtml",
    "content": "﻿@inject ISiteContextResolver siteResolver\n@inject ICoreThemeHelper themeHelper\n@{\n    var themeSettings = themeHelper.GetThemeSettings();\n    @*\n        These settings can be set by a main view to show additional columns.\n        Views that push content into the optional sections SideNav, AsidePrimary, and AsideSecondary\n        are obligated to set the needed viewtate property to true to show the section,\n        otherwise an error will occur.\n        The sideNav column also supports a toggle so it can be hidden and toggled visible even though it renders.\n    *@\n    bool sideNavVisible = true.Equals(ViewData[\"SideNavVisible\"]);\n    string sideNavToggleClass = ViewData[\"SideNavToggle\"]?.ToString() ?? \"collapse\";\n    bool asidePrimaryVisible = true.Equals(ViewData[\"AsidePrimaryVisible\"]);\n    bool asideSecondaryVisible = true.Equals(ViewData[\"AsideSecondaryVisible\"]);\n    var Tenant = await siteResolver.ResolveSite(Context.Request.Host.Host, Context.Request.Path);\n    var siteRoot = \"\";\n    if (!string.IsNullOrWhiteSpace(Tenant.SiteFolderName)) { siteRoot = \"/\" + Tenant.SiteFolderName; }\n   \n}\n<!DOCTYPE html>\n<html lang=\"@CultureInfo.CurrentUICulture.Name\">\n<head>\n    <meta charset=\"utf-8\" />\n    <title>@ViewData[\"Title\"] - @(Tenant?.SiteName ?? \"Sample\")</title>\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1, shrink-to-fit=no\">\n    @RenderSection(\"Meta\", required: false)\n    <environment names=\"Development\">\n        <link rel=\"stylesheet\" href=\"~/css/bootstrap.css\" cs-resolve-theme-resource=\"true\" cs-shared-theme=\"true\" cs-tenant=\"@Tenant\" />\n        <link rel=\"stylesheet\" href=\"~/css/fontawesome-all.min.css\" cs-resolve-theme-resource=\"true\" cs-shared-theme=\"true\" cs-tenant=\"@Tenant\" />\n        <link rel=\"stylesheet\" href=\"~/css/site.css\" cs-resolve-theme-resource=\"true\" cs-shared-theme=\"true\" cs-tenant=\"@Tenant\" asp-append-version=\"true\" />\n    </environment>\n    <environment names=\"Staging,Production\">\n        <link rel=\"stylesheet\" href=\"~/css/bootstrap.min.css\" cs-resolve-theme-resource=\"true\" cs-shared-theme=\"true\" cs-tenant=\"@Tenant\" />\n        <link rel=\"stylesheet\" href=\"~/css/fontawesome-all.min.css\" cs-resolve-theme-resource=\"true\" cs-shared-theme=\"true\" cs-tenant=\"@Tenant\" />\n        <link rel=\"stylesheet\" href=\"~/css/site.min.css\" cs-resolve-theme-resource=\"true\" cs-shared-theme=\"true\" cs-tenant=\"@Tenant\" asp-append-version=\"true\" />\n    </environment>\n    @RenderSection(\"Styles\", required: false)    \n    \n    <google-analytics profile-id=\"@Tenant.GoogleAnalyticsProfileId\" user-id=\"@User.GetUserId()\"></google-analytics>\n    <base href=\"@Context.Request.Path\" />\n</head>\n<body class=\"d-flex flex-column @ViewData[\"BodyClass\"]\">\n    <header>\n        <a id=\"skippy\" class=\"visually-hidden visually-hidden-focusable\" href=\"#content\">\n            <div class=\"container\">\n                <span class=\"skiplink-text\">Skip to main content</span>\n            </div>\n        </a>\n        <div class=\"fixed-top brand-header\">\n            <div class=\"d-flex align-items-center\">\n                @if (!string.IsNullOrWhiteSpace(Tenant.LogoUrl))\n                {\n                    <div>\n                         <partial name=\"SiteLogoPartial\" model=\"@Tenant\" />\n                    </div>\n                }\n                @if (Tenant.ShowSiteNameLink)\n                {\n                    <div class=\"align-self-center pt-4 pt-sm-0\">\n                         <partial name=\"SiteTitlePartial\" model=\"@Tenant\" />\n                    </div>\n                }\n                @if (!string.IsNullOrWhiteSpace(Tenant.HeaderContent))\n                {\n                    <div class=\"flex-fill align-self-center pt-3 d-none d-sm-block\">\n                        <partial name=\"SiteHeaderPartial\" />\n                    </div>\n                }\n            </div>\n        </div>\n        <nav class=\"navbar navbar-expand-md navbar-dark fixed-top bg-dark\">\n            <button class=\"navbar-toggler\" type=\"button\" data-bs-toggle=\"collapse\" data-bs-target=\"#navbarNavDropdown\" aria-controls=\"navbarNavDropdown\" aria-expanded=\"false\" aria-label=\"Toggle navigation\">\n                <span class=\"navbar-toggler-icon\"></span>\n            </button>\n            <div class=\"collapse navbar-collapse bg-dark ps-2\" id=\"navbarNavDropdown\">\n                @await Component.InvokeAsync(\"Navigation\", new { viewName = \"Bootstrap5TopNavWithDropdowns\", filterName = NamedNavigationFilters.TopNav, startingNodeKey = \"\" })\n                <partial name=\"_LoginPartialWithDropdowns\" />\n            </div>\n        </nav>\n    </header>\n    <div id=\"wrapper\" class=\"container-fluid cs-container flex-fill\">\n        @await Component.InvokeAsync(\"Navigation\", new { viewName = \"Bootstrap5Breadcrumbs\", filterName = NamedNavigationFilters.Breadcrumbs, startingNodeKey = \"\" })\n        <div class=\"row\">\n            <main id=\"content\" class=\"col order-3\">\n                <partial name=\"AlertsPartial\" />\n                <partial name=\"_CookieConsentPartial\" />\n                <partial name=\"_AutoLogoutWarningPartial\" />\n                @RenderBody()\n            </main>\n            @if (sideNavVisible)\n            {\n                <nav id=\"sidenavmenu\" class=\" col col-3 order-1 @sideNavToggleClass\">\n                    @RenderSection(\"SideNav\", required: false)\n                </nav>\n\n            }\n            @if (asideSecondaryVisible)\n            {\n                <aside id=\"asideSecondary\" class=\"col col-1 order-2\">\n                    @RenderSection(\"AsideSecondary\", required: false)\n                </aside>\n\n            }\n            @if (asidePrimaryVisible)\n            {\n                <aside id=\"asidePrimary\" class=\"col-12 col-md-3 col-sm-12  col-sm-12 order-4\">\n                    @RenderSection(\"AsidePrimary\", required: false)\n                </aside>\n\n            }\n        </div>\n    </div>\n    <footer class=\"sticky-bottom border pt-2 h-100\">\n        <div class=\"w-100 text-center\">\n            <partial name=\"SiteFooterPartial\" />\n        </div>\n        <div class=\"d-flex flex-wrap flex-grow justify-content-center\">\n            <div class=\"p-2\">\n            <ul class=\"list-unstyled d-flex flex-wrap\">\n                @if (Tenant != null && !string.IsNullOrWhiteSpace(Tenant.PrivacyPolicy))\n                {\n                    <li class=\"border-left ps-2 me-2\">\n                        <a asp-controller=\"Privacy\" asp-action=\"Index\">Privacy Policy</a>\n                    </li>\n                }\n                <li class=\"border-left ps-2 me-2\">\n                    @* you are free to remove the powered by cloudscribe link but we appreciate it if you choose to keep it! *@\n                    <a class=\"text-nowrap\" target=\"_blank\" href=\"https://www.cloudscribe.com/?utm_source=@Context.Request.Host.Value&amp;utm_medium=referral&amp;utm_campaign=poweredbycloudscribe\">Powered by cloudscribe</a>\n                </li>\n            </ul>\n        </div>\n        <div class=\"ps-sm-2  text-center w-100\"><span class=\"text-nowrap\">Copyright &copy; @DateTime.Now.Year</span><span class=\"d-none d-sm-inline\"> - </span><span> @(Tenant?.SiteName ?? \"Sample\")</span></div>\n        <partial name=\"_CookieConsentRevokePartial\" />\n        </div>\n    </footer>\n    @RenderSection(\"Toolbar\", required: false)\n    <environment names=\"Development\">\n        <script src=\"~/js/jquery.js\" cs-resolve-theme-resource=\"true\" cs-shared-theme=\"true\" cs-tenant=\"@Tenant\"></script>\n        <script src=\"~/js/bootstrap.bundle.js\" cs-resolve-theme-resource=\"true\" cs-shared-theme=\"true\" cs-tenant=\"@Tenant\"></script>\n        <script src=\"~/cr/js/bs4.smartmenus.min.js\"></script>\n    </environment>\n    <environment names=\"Staging,Production\">\n        <script src=\"~/js/jquery.min.js\" cs-resolve-theme-resource=\"true\" cs-shared-theme=\"true\" cs-tenant=\"@Tenant\"></script>\n        <script src=\"~/js/bootstrap.bundle.min.js\" cs-resolve-theme-resource=\"true\" cs-shared-theme=\"true\" cs-tenant=\"@Tenant\"></script>\n        <script src=\"~/cr/js/bs4.smartmenus.min.js\"></script>\n    </environment>\n    @RenderSection(\"Bottom\", required: false)\n    @RenderSection(\"Scripts\", required: false)     \n    @Html.RenderResources(\"js\") @*render any js resources declared via helpers in partial views etc*@\n    <add-this profile-id=\"@Tenant.AddThisDotComUsername\" async></add-this>\n</body>\n</html>\n"
  },
  {
    "path": "src/sourceDev.WebApp/SharedThemes/darkly/wwwroot/css/_bootswatch.scss",
    "content": "// Darkly 5.1.3\n// Bootswatch\n\n\n// Variables\n\n$web-font-path: \"https://fonts.googleapis.com/css2?family=Lato:ital,wght@0,400;0,700;1,400&display=swap\" !default;\n@if $web-font-path {\n  @import url($web-font-path);\n}\n\n// Typography\n\n.blockquote {\n  &-footer {\n    color: $gray-600;\n  }\n}\n\n// Forms\n\n.input-group-addon {\n  color: $white;\n}\n\n.form-floating > label {\n  color: $gray-700;\n}\n\n// Navs\n\n.nav-tabs,\n.nav-pills {\n  .nav-link,\n  .nav-link.active,\n  .nav-link.active:focus,\n  .nav-link.active:hover,\n  .nav-item.open .nav-link,\n  .nav-item.open .nav-link:focus,\n  .nav-item.open .nav-link:hover {\n    color: $white;\n  }\n}\n\n.breadcrumb a {\n  color: $white;\n}\n\n.pagination {\n  a:hover {\n    text-decoration: none;\n  }\n}\n\n// Indicators\n\n.alert {\n  border: none;\n  color: $white;\n\n  a,\n  .alert-link {\n    color: $white;\n    text-decoration: underline;\n  }\n\n  @each $color, $value in $theme-colors {\n    &-#{$color} {\n      @if $enable-gradients {\n        background: $value linear-gradient(180deg, mix($white, $value, 15%), $value) repeat-x;\n      } @else {\n        background-color: $value;\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "src/sourceDev.WebApp/SharedThemes/darkly/wwwroot/css/_variables.scss",
    "content": "// Darkly 5.1.3\n// Bootswatch\n\n$theme: \"darkly\" !default;\n\n//\n// Color system\n//\n\n$white:    #fff !default;\n$gray-100: #f8f9fa !default;\n$gray-200: #ebebeb !default;\n$gray-300: #dee2e6 !default;\n$gray-400: #ced4da !default;\n$gray-500: #adb5bd !default;\n$gray-600: #888 !default;\n$gray-700: #444 !default;\n$gray-800: #303030 !default;\n$gray-900: #222 !default;\n$black:    #000 !default;\n\n$blue:    #375a7f !default;\n$indigo:  #6610f2 !default;\n$purple:  #6f42c1 !default;\n$pink:    #e83e8c !default;\n$red:     #e74c3c !default;\n$orange:  #fd7e14 !default;\n$yellow:  #f39c12 !default;\n$green:   #00bc8c !default;\n$teal:    #20c997 !default;\n$cyan:    #3498db !default;\n\n$primary:       $blue !default;\n$secondary:     $gray-700 !default;\n$success:       $green !default;\n$info:          $cyan !default;\n$warning:       $yellow !default;\n$danger:        $red !default;\n$light:         $gray-500 !default;\n$dark:          $gray-800 !default;\n\n$min-contrast-ratio:   1.9 !default;\n\n// Body\n\n$body-bg:                   $gray-900 !default;\n$body-color:                $white !default;\n\n// Links\n\n$link-color:                $success !default;\n\n// Fonts\n\n// stylelint-disable-next-line value-keyword-case\n$font-family-sans-serif:      Lato, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\" !default;\n$h1-font-size:                3rem !default;\n$h2-font-size:                2.5rem !default;\n$h3-font-size:                2rem !default;\n$text-muted:                  $gray-600 !default;\n\n// Tables\n\n$table-border-color:          $gray-700 !default;\n\n$table-bg-scale:              0 !default;\n\n// Forms\n\n$input-bg:                          $white !default;\n$input-color:                       $gray-800 !default;\n$input-border-color:                $body-bg !default;\n$input-group-addon-color:           $gray-500 !default;\n$input-group-addon-bg:              $gray-700 !default;\n\n$form-check-input-bg:                     $white !default;\n$form-check-input-border:                 none !default;\n\n$form-file-button-color:          $white !default;\n\n// Dropdowns\n\n$dropdown-bg:                       $gray-900 !default;\n$dropdown-border-color:             $gray-700 !default;\n$dropdown-divider-bg:               $gray-700 !default;\n$dropdown-link-color:               $white !default;\n$dropdown-link-hover-color:         $white !default;\n$dropdown-link-hover-bg:            $primary !default;\n\n// Navs\n\n$nav-link-padding-x:                2rem !default;\n$nav-link-disabled-color:           $gray-500 !default;\n$nav-tabs-border-color:             $gray-700 !default;\n$nav-tabs-link-hover-border-color:  $nav-tabs-border-color $nav-tabs-border-color transparent !default;\n$nav-tabs-link-active-color:        $white !default;\n$nav-tabs-link-active-border-color: $nav-tabs-border-color $nav-tabs-border-color transparent !default;\n\n// Navbar\n\n$navbar-padding-y:                  1rem !default;\n$navbar-dark-color:                rgba($white, .6) !default;\n$navbar-dark-hover-color:          $white !default;\n$navbar-light-color:                rgba($gray-900, .7) !default;\n$navbar-light-hover-color:          $gray-900 !default;\n$navbar-light-active-color:         $gray-900 !default;\n$navbar-light-toggler-border-color: rgba($gray-900, .1) !default;\n\n// Pagination\n\n$pagination-color:                  $white !default;\n$pagination-bg:                     $success !default;\n$pagination-border-width:           0 !default;\n$pagination-border-color:           transparent !default;\n$pagination-hover-color:            $white !default;\n$pagination-hover-bg:               lighten($success, 10%) !default;\n$pagination-hover-border-color:     transparent !default;\n$pagination-active-bg:              $pagination-hover-bg !default;\n$pagination-active-border-color:    transparent !default;\n$pagination-disabled-color:         $white !default;\n$pagination-disabled-bg:            darken($success, 15%) !default;\n$pagination-disabled-border-color:  transparent !default;\n\n// Cards\n\n$card-cap-bg:                       $gray-700 !default;\n$card-bg:                           $gray-800 !default;\n\n// Popovers\n\n$popover-bg:                        $gray-800 !default;\n$popover-header-bg:                 $gray-700 !default;\n\n// Toasts\n\n$toast-background-color:            $gray-700 !default;\n$toast-header-background-color:     $gray-800 !default;\n\n// Modals\n\n$modal-content-bg:                  $gray-800 !default;\n$modal-content-border-color:        $gray-700 !default;\n$modal-header-border-color:         $gray-700 !default;\n\n// Progress bars\n\n$progress-bg:                       $gray-700 !default;\n\n// List group\n\n$list-group-color:                  $body-color !default;\n$list-group-bg:                     $gray-800 !default;\n$list-group-border-color:           $gray-700 !default;\n$list-group-hover-bg:               $gray-700 !default;\n$list-group-action-hover-color:     $list-group-color !default;\n$list-group-action-active-bg:       $gray-900 !default;\n\n// Breadcrumbs\n\n$breadcrumb-padding-y:              .375rem !default;\n$breadcrumb-padding-x:              .75rem !default;\n$breadcrumb-bg:                     $gray-700 !default;\n$breadcrumb-border-radius:          .25rem !default;\n\n// Close\n\n$btn-close-color:            $white !default;\n$btn-close-opacity:          .4 !default;\n$btn-close-hover-opacity:    1 !default;\n\n// Code\n\n$pre-color:                         inherit !default;\n"
  },
  {
    "path": "src/sourceDev.WebApp/SharedThemes/darkly/wwwroot/css/bootstrap.css",
    "content": "/*!\n * Bootswatch v5.1.3\n * Homepage: https://bootswatch.com\n * Copyright 2012-2021 Thomas Park\n * Licensed under MIT\n * Based on Bootstrap\n*/\n/*!\n * Bootstrap v5.1.3 (https://getbootstrap.com/)\n * Copyright 2011-2021 The Bootstrap Authors\n * Copyright 2011-2021 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n@import url(\"https://fonts.googleapis.com/css2?family=Lato:ital,wght@0,400;0,700;1,400&display=swap\");\n:root {\n  --bs-blue: #375a7f;\n  --bs-indigo: #6610f2;\n  --bs-purple: #6f42c1;\n  --bs-pink: #e83e8c;\n  --bs-red: #e74c3c;\n  --bs-orange: #fd7e14;\n  --bs-yellow: #f39c12;\n  --bs-green: #00bc8c;\n  --bs-teal: #20c997;\n  --bs-cyan: #3498db;\n  --bs-white: #fff;\n  --bs-gray: #888;\n  --bs-gray-dark: #303030;\n  --bs-gray-100: #f8f9fa;\n  --bs-gray-200: #ebebeb;\n  --bs-gray-300: #dee2e6;\n  --bs-gray-400: #ced4da;\n  --bs-gray-500: #adb5bd;\n  --bs-gray-600: #888;\n  --bs-gray-700: #444;\n  --bs-gray-800: #303030;\n  --bs-gray-900: #222;\n  --bs-primary: #375a7f;\n  --bs-secondary: #444;\n  --bs-success: #00bc8c;\n  --bs-info: #3498db;\n  --bs-warning: #f39c12;\n  --bs-danger: #e74c3c;\n  --bs-light: #adb5bd;\n  --bs-dark: #303030;\n  --bs-primary-rgb: 55, 90, 127;\n  --bs-secondary-rgb: 68, 68, 68;\n  --bs-success-rgb: 0, 188, 140;\n  --bs-info-rgb: 52, 152, 219;\n  --bs-warning-rgb: 243, 156, 18;\n  --bs-danger-rgb: 231, 76, 60;\n  --bs-light-rgb: 173, 181, 189;\n  --bs-dark-rgb: 48, 48, 48;\n  --bs-white-rgb: 255, 255, 255;\n  --bs-black-rgb: 0, 0, 0;\n  --bs-body-color-rgb: 255, 255, 255;\n  --bs-body-bg-rgb: 34, 34, 34;\n  --bs-font-sans-serif: Lato, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\";\n  --bs-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n  --bs-gradient: linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));\n  --bs-body-font-family: var(--bs-font-sans-serif);\n  --bs-body-font-size: 1rem;\n  --bs-body-font-weight: 400;\n  --bs-body-line-height: 1.5;\n  --bs-body-color: #fff;\n  --bs-body-bg: #222;\n}\n\n*,\n*::before,\n*::after {\n  box-sizing: border-box;\n}\n\n@media (prefers-reduced-motion: no-preference) {\n  :root {\n    scroll-behavior: smooth;\n  }\n}\n\nbody {\n  margin: 0;\n  font-family: var(--bs-body-font-family);\n  font-size: var(--bs-body-font-size);\n  font-weight: var(--bs-body-font-weight);\n  line-height: var(--bs-body-line-height);\n  color: var(--bs-body-color);\n  text-align: var(--bs-body-text-align);\n  background-color: var(--bs-body-bg);\n  -webkit-text-size-adjust: 100%;\n  -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\n\nhr {\n  margin: 1rem 0;\n  color: inherit;\n  background-color: currentColor;\n  border: 0;\n  opacity: 0.25;\n}\n\nhr:not([size]) {\n  height: 1px;\n}\n\nh1, .h1, h2, .h2, h3, .h3, h4, .h4, h5, .h5, h6, .h6 {\n  margin-top: 0;\n  margin-bottom: 0.5rem;\n  font-weight: 500;\n  line-height: 1.2;\n}\n\nh1, .h1 {\n  font-size: calc(1.425rem + 2.1vw);\n}\n\n@media (min-width: 1200px) {\n  h1, .h1 {\n    font-size: 3rem;\n  }\n}\n\nh2, .h2 {\n  font-size: calc(1.375rem + 1.5vw);\n}\n\n@media (min-width: 1200px) {\n  h2, .h2 {\n    font-size: 2.5rem;\n  }\n}\n\nh3, .h3 {\n  font-size: calc(1.325rem + 0.9vw);\n}\n\n@media (min-width: 1200px) {\n  h3, .h3 {\n    font-size: 2rem;\n  }\n}\n\nh4, .h4 {\n  font-size: calc(1.275rem + 0.3vw);\n}\n\n@media (min-width: 1200px) {\n  h4, .h4 {\n    font-size: 1.5rem;\n  }\n}\n\nh5, .h5 {\n  font-size: 1.25rem;\n}\n\nh6, .h6 {\n  font-size: 1rem;\n}\n\np {\n  margin-top: 0;\n  margin-bottom: 1rem;\n}\n\nabbr[title],\nabbr[data-bs-original-title] {\n  -webkit-text-decoration: underline dotted;\n  text-decoration: underline dotted;\n  cursor: help;\n  -webkit-text-decoration-skip-ink: none;\n  text-decoration-skip-ink: none;\n}\n\naddress {\n  margin-bottom: 1rem;\n  font-style: normal;\n  line-height: inherit;\n}\n\nol,\nul {\n  padding-left: 2rem;\n}\n\nol,\nul,\ndl {\n  margin-top: 0;\n  margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n  margin-bottom: 0;\n}\n\ndt {\n  font-weight: 700;\n}\n\ndd {\n  margin-bottom: .5rem;\n  margin-left: 0;\n}\n\nblockquote {\n  margin: 0 0 1rem;\n}\n\nb,\nstrong {\n  font-weight: bolder;\n}\n\nsmall, .small {\n  font-size: 0.875em;\n}\n\nmark, .mark {\n  padding: 0.2em;\n  background-color: #fcf8e3;\n}\n\nsub,\nsup {\n  position: relative;\n  font-size: 0.75em;\n  line-height: 0;\n  vertical-align: baseline;\n}\n\nsub {\n  bottom: -.25em;\n}\n\nsup {\n  top: -.5em;\n}\n\na {\n  color: #00bc8c;\n  text-decoration: underline;\n}\n\na:hover {\n  color: #009670;\n}\n\na:not([href]):not([class]), a:not([href]):not([class]):hover {\n  color: inherit;\n  text-decoration: none;\n}\n\npre,\ncode,\nkbd,\nsamp {\n  font-family: var(--bs-font-monospace);\n  font-size: 1em;\n  direction: ltr /* rtl:ignore */;\n  unicode-bidi: bidi-override;\n}\n\npre {\n  display: block;\n  margin-top: 0;\n  margin-bottom: 1rem;\n  overflow: auto;\n  font-size: 0.875em;\n  color: inherit;\n}\n\npre code {\n  font-size: inherit;\n  color: inherit;\n  word-break: normal;\n}\n\ncode {\n  font-size: 0.875em;\n  color: #e83e8c;\n  word-wrap: break-word;\n}\n\na > code {\n  color: inherit;\n}\n\nkbd {\n  padding: 0.2rem 0.4rem;\n  font-size: 0.875em;\n  color: #fff;\n  background-color: #222;\n  border-radius: 0.2rem;\n}\n\nkbd kbd {\n  padding: 0;\n  font-size: 1em;\n  font-weight: 700;\n}\n\nfigure {\n  margin: 0 0 1rem;\n}\n\nimg,\nsvg {\n  vertical-align: middle;\n}\n\ntable {\n  caption-side: bottom;\n  border-collapse: collapse;\n}\n\ncaption {\n  padding-top: 0.5rem;\n  padding-bottom: 0.5rem;\n  color: #888;\n  text-align: left;\n}\n\nth {\n  text-align: inherit;\n  text-align: -webkit-match-parent;\n}\n\nthead,\ntbody,\ntfoot,\ntr,\ntd,\nth {\n  border-color: inherit;\n  border-style: solid;\n  border-width: 0;\n}\n\nlabel {\n  display: inline-block;\n}\n\nbutton {\n  border-radius: 0;\n}\n\nbutton:focus:not(:focus-visible) {\n  outline: 0;\n}\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n  margin: 0;\n  font-family: inherit;\n  font-size: inherit;\n  line-height: inherit;\n}\n\nbutton,\nselect {\n  text-transform: none;\n}\n\n[role=\"button\"] {\n  cursor: pointer;\n}\n\nselect {\n  word-wrap: normal;\n}\n\nselect:disabled {\n  opacity: 1;\n}\n\n[list]::-webkit-calendar-picker-indicator {\n  display: none;\n}\n\nbutton,\n[type=\"button\"],\n[type=\"reset\"],\n[type=\"submit\"] {\n  -webkit-appearance: button;\n}\n\nbutton:not(:disabled),\n[type=\"button\"]:not(:disabled),\n[type=\"reset\"]:not(:disabled),\n[type=\"submit\"]:not(:disabled) {\n  cursor: pointer;\n}\n\n::-moz-focus-inner {\n  padding: 0;\n  border-style: none;\n}\n\ntextarea {\n  resize: vertical;\n}\n\nfieldset {\n  min-width: 0;\n  padding: 0;\n  margin: 0;\n  border: 0;\n}\n\nlegend {\n  float: left;\n  width: 100%;\n  padding: 0;\n  margin-bottom: 0.5rem;\n  font-size: calc(1.275rem + 0.3vw);\n  line-height: inherit;\n}\n\n@media (min-width: 1200px) {\n  legend {\n    font-size: 1.5rem;\n  }\n}\n\nlegend + * {\n  clear: left;\n}\n\n::-webkit-datetime-edit-fields-wrapper,\n::-webkit-datetime-edit-text,\n::-webkit-datetime-edit-minute,\n::-webkit-datetime-edit-hour-field,\n::-webkit-datetime-edit-day-field,\n::-webkit-datetime-edit-month-field,\n::-webkit-datetime-edit-year-field {\n  padding: 0;\n}\n\n::-webkit-inner-spin-button {\n  height: auto;\n}\n\n[type=\"search\"] {\n  outline-offset: -2px;\n  -webkit-appearance: textfield;\n}\n\n/* rtl:raw:\n[type=\"tel\"],\n[type=\"url\"],\n[type=\"email\"],\n[type=\"number\"] {\n  direction: ltr;\n}\n*/\n::-webkit-search-decoration {\n  -webkit-appearance: none;\n}\n\n::-webkit-color-swatch-wrapper {\n  padding: 0;\n}\n\n::file-selector-button {\n  font: inherit;\n}\n\n::-webkit-file-upload-button {\n  font: inherit;\n  -webkit-appearance: button;\n}\n\noutput {\n  display: inline-block;\n}\n\niframe {\n  border: 0;\n}\n\nsummary {\n  display: list-item;\n  cursor: pointer;\n}\n\nprogress {\n  vertical-align: baseline;\n}\n\n[hidden] {\n  display: none !important;\n}\n\n.lead {\n  font-size: 1.25rem;\n  font-weight: 300;\n}\n\n.display-1 {\n  font-size: calc(1.625rem + 4.5vw);\n  font-weight: 300;\n  line-height: 1.2;\n}\n\n@media (min-width: 1200px) {\n  .display-1 {\n    font-size: 5rem;\n  }\n}\n\n.display-2 {\n  font-size: calc(1.575rem + 3.9vw);\n  font-weight: 300;\n  line-height: 1.2;\n}\n\n@media (min-width: 1200px) {\n  .display-2 {\n    font-size: 4.5rem;\n  }\n}\n\n.display-3 {\n  font-size: calc(1.525rem + 3.3vw);\n  font-weight: 300;\n  line-height: 1.2;\n}\n\n@media (min-width: 1200px) {\n  .display-3 {\n    font-size: 4rem;\n  }\n}\n\n.display-4 {\n  font-size: calc(1.475rem + 2.7vw);\n  font-weight: 300;\n  line-height: 1.2;\n}\n\n@media (min-width: 1200px) {\n  .display-4 {\n    font-size: 3.5rem;\n  }\n}\n\n.display-5 {\n  font-size: calc(1.425rem + 2.1vw);\n  font-weight: 300;\n  line-height: 1.2;\n}\n\n@media (min-width: 1200px) {\n  .display-5 {\n    font-size: 3rem;\n  }\n}\n\n.display-6 {\n  font-size: calc(1.375rem + 1.5vw);\n  font-weight: 300;\n  line-height: 1.2;\n}\n\n@media (min-width: 1200px) {\n  .display-6 {\n    font-size: 2.5rem;\n  }\n}\n\n.list-unstyled {\n  padding-left: 0;\n  list-style: none;\n}\n\n.list-inline {\n  padding-left: 0;\n  list-style: none;\n}\n\n.list-inline-item {\n  display: inline-block;\n}\n\n.list-inline-item:not(:last-child) {\n  margin-right: 0.5rem;\n}\n\n.initialism {\n  font-size: 0.875em;\n  text-transform: uppercase;\n}\n\n.blockquote {\n  margin-bottom: 1rem;\n  font-size: 1.25rem;\n}\n\n.blockquote > :last-child {\n  margin-bottom: 0;\n}\n\n.blockquote-footer {\n  margin-top: -1rem;\n  margin-bottom: 1rem;\n  font-size: 0.875em;\n  color: #888;\n}\n\n.blockquote-footer::before {\n  content: \"\\2014\\00A0\";\n}\n\n.img-fluid {\n  max-width: 100%;\n  height: auto;\n}\n\n.img-thumbnail {\n  padding: 0.25rem;\n  background-color: #222;\n  border: 1px solid #dee2e6;\n  border-radius: 0.25rem;\n  max-width: 100%;\n  height: auto;\n}\n\n.figure {\n  display: inline-block;\n}\n\n.figure-img {\n  margin-bottom: 0.5rem;\n  line-height: 1;\n}\n\n.figure-caption {\n  font-size: 0.875em;\n  color: #888;\n}\n\n.container,\n.container-fluid,\n.container-sm,\n.container-md,\n.container-lg,\n.container-xl,\n.container-xxl {\n  width: 100%;\n  padding-right: var(--bs-gutter-x, 0.75rem);\n  padding-left: var(--bs-gutter-x, 0.75rem);\n  margin-right: auto;\n  margin-left: auto;\n}\n\n@media (min-width: 576px) {\n  .container, .container-sm {\n    max-width: 540px;\n  }\n}\n\n@media (min-width: 768px) {\n  .container, .container-sm, .container-md {\n    max-width: 720px;\n  }\n}\n\n@media (min-width: 992px) {\n  .container, .container-sm, .container-md, .container-lg {\n    max-width: 960px;\n  }\n}\n\n@media (min-width: 1200px) {\n  .container, .container-sm, .container-md, .container-lg, .container-xl {\n    max-width: 1140px;\n  }\n}\n\n@media (min-width: 1400px) {\n  .container, .container-sm, .container-md, .container-lg, .container-xl, .container-xxl {\n    max-width: 1320px;\n  }\n}\n\n.row {\n  --bs-gutter-x: 1.5rem;\n  --bs-gutter-y: 0;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n  flex-wrap: wrap;\n  margin-top: calc(-1 * var(--bs-gutter-y));\n  margin-right: calc(-.5 * var(--bs-gutter-x));\n  margin-left: calc(-.5 * var(--bs-gutter-x));\n}\n\n.row > * {\n  -ms-flex-negative: 0;\n  flex-shrink: 0;\n  width: 100%;\n  max-width: 100%;\n  padding-right: calc(var(--bs-gutter-x) * .5);\n  padding-left: calc(var(--bs-gutter-x) * .5);\n  margin-top: var(--bs-gutter-y);\n}\n\n.col {\n  -ms-flex: 1 0 0%;\n  flex: 1 0 0%;\n}\n\n.row-cols-auto > * {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: auto;\n}\n\n.row-cols-1 > * {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 100%;\n}\n\n.row-cols-2 > * {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 50%;\n}\n\n.row-cols-3 > * {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 33.333333%;\n}\n\n.row-cols-4 > * {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 25%;\n}\n\n.row-cols-5 > * {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 20%;\n}\n\n.row-cols-6 > * {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 16.666667%;\n}\n\n.col-auto {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: auto;\n}\n\n.col-1 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 8.333333%;\n}\n\n.col-2 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 16.666667%;\n}\n\n.col-3 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 25%;\n}\n\n.col-4 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 33.333333%;\n}\n\n.col-5 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 41.666667%;\n}\n\n.col-6 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 50%;\n}\n\n.col-7 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 58.333333%;\n}\n\n.col-8 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 66.666667%;\n}\n\n.col-9 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 75%;\n}\n\n.col-10 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 83.333333%;\n}\n\n.col-11 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 91.666667%;\n}\n\n.col-12 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 100%;\n}\n\n.offset-1 {\n  margin-left: 8.333333%;\n}\n\n.offset-2 {\n  margin-left: 16.666667%;\n}\n\n.offset-3 {\n  margin-left: 25%;\n}\n\n.offset-4 {\n  margin-left: 33.333333%;\n}\n\n.offset-5 {\n  margin-left: 41.666667%;\n}\n\n.offset-6 {\n  margin-left: 50%;\n}\n\n.offset-7 {\n  margin-left: 58.333333%;\n}\n\n.offset-8 {\n  margin-left: 66.666667%;\n}\n\n.offset-9 {\n  margin-left: 75%;\n}\n\n.offset-10 {\n  margin-left: 83.333333%;\n}\n\n.offset-11 {\n  margin-left: 91.666667%;\n}\n\n.g-0,\n.gx-0 {\n  --bs-gutter-x: 0;\n}\n\n.g-0,\n.gy-0 {\n  --bs-gutter-y: 0;\n}\n\n.g-1,\n.gx-1 {\n  --bs-gutter-x: 0.25rem;\n}\n\n.g-1,\n.gy-1 {\n  --bs-gutter-y: 0.25rem;\n}\n\n.g-2,\n.gx-2 {\n  --bs-gutter-x: 0.5rem;\n}\n\n.g-2,\n.gy-2 {\n  --bs-gutter-y: 0.5rem;\n}\n\n.g-3,\n.gx-3 {\n  --bs-gutter-x: 1rem;\n}\n\n.g-3,\n.gy-3 {\n  --bs-gutter-y: 1rem;\n}\n\n.g-4,\n.gx-4 {\n  --bs-gutter-x: 1.5rem;\n}\n\n.g-4,\n.gy-4 {\n  --bs-gutter-y: 1.5rem;\n}\n\n.g-5,\n.gx-5 {\n  --bs-gutter-x: 3rem;\n}\n\n.g-5,\n.gy-5 {\n  --bs-gutter-y: 3rem;\n}\n\n@media (min-width: 576px) {\n  .col-sm {\n    -ms-flex: 1 0 0%;\n    flex: 1 0 0%;\n  }\n  .row-cols-sm-auto > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .row-cols-sm-1 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .row-cols-sm-2 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .row-cols-sm-3 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 33.333333%;\n  }\n  .row-cols-sm-4 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .row-cols-sm-5 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 20%;\n  }\n  .row-cols-sm-6 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 16.666667%;\n  }\n  .col-sm-auto {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .col-sm-1 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 8.333333%;\n  }\n  .col-sm-2 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 16.666667%;\n  }\n  .col-sm-3 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .col-sm-4 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 33.333333%;\n  }\n  .col-sm-5 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 41.666667%;\n  }\n  .col-sm-6 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .col-sm-7 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 58.333333%;\n  }\n  .col-sm-8 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 66.666667%;\n  }\n  .col-sm-9 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 75%;\n  }\n  .col-sm-10 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 83.333333%;\n  }\n  .col-sm-11 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 91.666667%;\n  }\n  .col-sm-12 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .offset-sm-0 {\n    margin-left: 0;\n  }\n  .offset-sm-1 {\n    margin-left: 8.333333%;\n  }\n  .offset-sm-2 {\n    margin-left: 16.666667%;\n  }\n  .offset-sm-3 {\n    margin-left: 25%;\n  }\n  .offset-sm-4 {\n    margin-left: 33.333333%;\n  }\n  .offset-sm-5 {\n    margin-left: 41.666667%;\n  }\n  .offset-sm-6 {\n    margin-left: 50%;\n  }\n  .offset-sm-7 {\n    margin-left: 58.333333%;\n  }\n  .offset-sm-8 {\n    margin-left: 66.666667%;\n  }\n  .offset-sm-9 {\n    margin-left: 75%;\n  }\n  .offset-sm-10 {\n    margin-left: 83.333333%;\n  }\n  .offset-sm-11 {\n    margin-left: 91.666667%;\n  }\n  .g-sm-0,\n  .gx-sm-0 {\n    --bs-gutter-x: 0;\n  }\n  .g-sm-0,\n  .gy-sm-0 {\n    --bs-gutter-y: 0;\n  }\n  .g-sm-1,\n  .gx-sm-1 {\n    --bs-gutter-x: 0.25rem;\n  }\n  .g-sm-1,\n  .gy-sm-1 {\n    --bs-gutter-y: 0.25rem;\n  }\n  .g-sm-2,\n  .gx-sm-2 {\n    --bs-gutter-x: 0.5rem;\n  }\n  .g-sm-2,\n  .gy-sm-2 {\n    --bs-gutter-y: 0.5rem;\n  }\n  .g-sm-3,\n  .gx-sm-3 {\n    --bs-gutter-x: 1rem;\n  }\n  .g-sm-3,\n  .gy-sm-3 {\n    --bs-gutter-y: 1rem;\n  }\n  .g-sm-4,\n  .gx-sm-4 {\n    --bs-gutter-x: 1.5rem;\n  }\n  .g-sm-4,\n  .gy-sm-4 {\n    --bs-gutter-y: 1.5rem;\n  }\n  .g-sm-5,\n  .gx-sm-5 {\n    --bs-gutter-x: 3rem;\n  }\n  .g-sm-5,\n  .gy-sm-5 {\n    --bs-gutter-y: 3rem;\n  }\n}\n\n@media (min-width: 768px) {\n  .col-md {\n    -ms-flex: 1 0 0%;\n    flex: 1 0 0%;\n  }\n  .row-cols-md-auto > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .row-cols-md-1 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .row-cols-md-2 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .row-cols-md-3 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 33.333333%;\n  }\n  .row-cols-md-4 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .row-cols-md-5 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 20%;\n  }\n  .row-cols-md-6 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 16.666667%;\n  }\n  .col-md-auto {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .col-md-1 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 8.333333%;\n  }\n  .col-md-2 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 16.666667%;\n  }\n  .col-md-3 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .col-md-4 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 33.333333%;\n  }\n  .col-md-5 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 41.666667%;\n  }\n  .col-md-6 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .col-md-7 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 58.333333%;\n  }\n  .col-md-8 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 66.666667%;\n  }\n  .col-md-9 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 75%;\n  }\n  .col-md-10 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 83.333333%;\n  }\n  .col-md-11 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 91.666667%;\n  }\n  .col-md-12 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .offset-md-0 {\n    margin-left: 0;\n  }\n  .offset-md-1 {\n    margin-left: 8.333333%;\n  }\n  .offset-md-2 {\n    margin-left: 16.666667%;\n  }\n  .offset-md-3 {\n    margin-left: 25%;\n  }\n  .offset-md-4 {\n    margin-left: 33.333333%;\n  }\n  .offset-md-5 {\n    margin-left: 41.666667%;\n  }\n  .offset-md-6 {\n    margin-left: 50%;\n  }\n  .offset-md-7 {\n    margin-left: 58.333333%;\n  }\n  .offset-md-8 {\n    margin-left: 66.666667%;\n  }\n  .offset-md-9 {\n    margin-left: 75%;\n  }\n  .offset-md-10 {\n    margin-left: 83.333333%;\n  }\n  .offset-md-11 {\n    margin-left: 91.666667%;\n  }\n  .g-md-0,\n  .gx-md-0 {\n    --bs-gutter-x: 0;\n  }\n  .g-md-0,\n  .gy-md-0 {\n    --bs-gutter-y: 0;\n  }\n  .g-md-1,\n  .gx-md-1 {\n    --bs-gutter-x: 0.25rem;\n  }\n  .g-md-1,\n  .gy-md-1 {\n    --bs-gutter-y: 0.25rem;\n  }\n  .g-md-2,\n  .gx-md-2 {\n    --bs-gutter-x: 0.5rem;\n  }\n  .g-md-2,\n  .gy-md-2 {\n    --bs-gutter-y: 0.5rem;\n  }\n  .g-md-3,\n  .gx-md-3 {\n    --bs-gutter-x: 1rem;\n  }\n  .g-md-3,\n  .gy-md-3 {\n    --bs-gutter-y: 1rem;\n  }\n  .g-md-4,\n  .gx-md-4 {\n    --bs-gutter-x: 1.5rem;\n  }\n  .g-md-4,\n  .gy-md-4 {\n    --bs-gutter-y: 1.5rem;\n  }\n  .g-md-5,\n  .gx-md-5 {\n    --bs-gutter-x: 3rem;\n  }\n  .g-md-5,\n  .gy-md-5 {\n    --bs-gutter-y: 3rem;\n  }\n}\n\n@media (min-width: 992px) {\n  .col-lg {\n    -ms-flex: 1 0 0%;\n    flex: 1 0 0%;\n  }\n  .row-cols-lg-auto > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .row-cols-lg-1 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .row-cols-lg-2 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .row-cols-lg-3 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 33.333333%;\n  }\n  .row-cols-lg-4 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .row-cols-lg-5 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 20%;\n  }\n  .row-cols-lg-6 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 16.666667%;\n  }\n  .col-lg-auto {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .col-lg-1 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 8.333333%;\n  }\n  .col-lg-2 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 16.666667%;\n  }\n  .col-lg-3 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .col-lg-4 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 33.333333%;\n  }\n  .col-lg-5 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 41.666667%;\n  }\n  .col-lg-6 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .col-lg-7 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 58.333333%;\n  }\n  .col-lg-8 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 66.666667%;\n  }\n  .col-lg-9 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 75%;\n  }\n  .col-lg-10 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 83.333333%;\n  }\n  .col-lg-11 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 91.666667%;\n  }\n  .col-lg-12 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .offset-lg-0 {\n    margin-left: 0;\n  }\n  .offset-lg-1 {\n    margin-left: 8.333333%;\n  }\n  .offset-lg-2 {\n    margin-left: 16.666667%;\n  }\n  .offset-lg-3 {\n    margin-left: 25%;\n  }\n  .offset-lg-4 {\n    margin-left: 33.333333%;\n  }\n  .offset-lg-5 {\n    margin-left: 41.666667%;\n  }\n  .offset-lg-6 {\n    margin-left: 50%;\n  }\n  .offset-lg-7 {\n    margin-left: 58.333333%;\n  }\n  .offset-lg-8 {\n    margin-left: 66.666667%;\n  }\n  .offset-lg-9 {\n    margin-left: 75%;\n  }\n  .offset-lg-10 {\n    margin-left: 83.333333%;\n  }\n  .offset-lg-11 {\n    margin-left: 91.666667%;\n  }\n  .g-lg-0,\n  .gx-lg-0 {\n    --bs-gutter-x: 0;\n  }\n  .g-lg-0,\n  .gy-lg-0 {\n    --bs-gutter-y: 0;\n  }\n  .g-lg-1,\n  .gx-lg-1 {\n    --bs-gutter-x: 0.25rem;\n  }\n  .g-lg-1,\n  .gy-lg-1 {\n    --bs-gutter-y: 0.25rem;\n  }\n  .g-lg-2,\n  .gx-lg-2 {\n    --bs-gutter-x: 0.5rem;\n  }\n  .g-lg-2,\n  .gy-lg-2 {\n    --bs-gutter-y: 0.5rem;\n  }\n  .g-lg-3,\n  .gx-lg-3 {\n    --bs-gutter-x: 1rem;\n  }\n  .g-lg-3,\n  .gy-lg-3 {\n    --bs-gutter-y: 1rem;\n  }\n  .g-lg-4,\n  .gx-lg-4 {\n    --bs-gutter-x: 1.5rem;\n  }\n  .g-lg-4,\n  .gy-lg-4 {\n    --bs-gutter-y: 1.5rem;\n  }\n  .g-lg-5,\n  .gx-lg-5 {\n    --bs-gutter-x: 3rem;\n  }\n  .g-lg-5,\n  .gy-lg-5 {\n    --bs-gutter-y: 3rem;\n  }\n}\n\n@media (min-width: 1200px) {\n  .col-xl {\n    -ms-flex: 1 0 0%;\n    flex: 1 0 0%;\n  }\n  .row-cols-xl-auto > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .row-cols-xl-1 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .row-cols-xl-2 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .row-cols-xl-3 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 33.333333%;\n  }\n  .row-cols-xl-4 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .row-cols-xl-5 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 20%;\n  }\n  .row-cols-xl-6 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 16.666667%;\n  }\n  .col-xl-auto {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .col-xl-1 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 8.333333%;\n  }\n  .col-xl-2 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 16.666667%;\n  }\n  .col-xl-3 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .col-xl-4 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 33.333333%;\n  }\n  .col-xl-5 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 41.666667%;\n  }\n  .col-xl-6 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .col-xl-7 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 58.333333%;\n  }\n  .col-xl-8 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 66.666667%;\n  }\n  .col-xl-9 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 75%;\n  }\n  .col-xl-10 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 83.333333%;\n  }\n  .col-xl-11 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 91.666667%;\n  }\n  .col-xl-12 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .offset-xl-0 {\n    margin-left: 0;\n  }\n  .offset-xl-1 {\n    margin-left: 8.333333%;\n  }\n  .offset-xl-2 {\n    margin-left: 16.666667%;\n  }\n  .offset-xl-3 {\n    margin-left: 25%;\n  }\n  .offset-xl-4 {\n    margin-left: 33.333333%;\n  }\n  .offset-xl-5 {\n    margin-left: 41.666667%;\n  }\n  .offset-xl-6 {\n    margin-left: 50%;\n  }\n  .offset-xl-7 {\n    margin-left: 58.333333%;\n  }\n  .offset-xl-8 {\n    margin-left: 66.666667%;\n  }\n  .offset-xl-9 {\n    margin-left: 75%;\n  }\n  .offset-xl-10 {\n    margin-left: 83.333333%;\n  }\n  .offset-xl-11 {\n    margin-left: 91.666667%;\n  }\n  .g-xl-0,\n  .gx-xl-0 {\n    --bs-gutter-x: 0;\n  }\n  .g-xl-0,\n  .gy-xl-0 {\n    --bs-gutter-y: 0;\n  }\n  .g-xl-1,\n  .gx-xl-1 {\n    --bs-gutter-x: 0.25rem;\n  }\n  .g-xl-1,\n  .gy-xl-1 {\n    --bs-gutter-y: 0.25rem;\n  }\n  .g-xl-2,\n  .gx-xl-2 {\n    --bs-gutter-x: 0.5rem;\n  }\n  .g-xl-2,\n  .gy-xl-2 {\n    --bs-gutter-y: 0.5rem;\n  }\n  .g-xl-3,\n  .gx-xl-3 {\n    --bs-gutter-x: 1rem;\n  }\n  .g-xl-3,\n  .gy-xl-3 {\n    --bs-gutter-y: 1rem;\n  }\n  .g-xl-4,\n  .gx-xl-4 {\n    --bs-gutter-x: 1.5rem;\n  }\n  .g-xl-4,\n  .gy-xl-4 {\n    --bs-gutter-y: 1.5rem;\n  }\n  .g-xl-5,\n  .gx-xl-5 {\n    --bs-gutter-x: 3rem;\n  }\n  .g-xl-5,\n  .gy-xl-5 {\n    --bs-gutter-y: 3rem;\n  }\n}\n\n@media (min-width: 1400px) {\n  .col-xxl {\n    -ms-flex: 1 0 0%;\n    flex: 1 0 0%;\n  }\n  .row-cols-xxl-auto > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .row-cols-xxl-1 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .row-cols-xxl-2 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .row-cols-xxl-3 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 33.333333%;\n  }\n  .row-cols-xxl-4 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .row-cols-xxl-5 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 20%;\n  }\n  .row-cols-xxl-6 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 16.666667%;\n  }\n  .col-xxl-auto {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .col-xxl-1 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 8.333333%;\n  }\n  .col-xxl-2 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 16.666667%;\n  }\n  .col-xxl-3 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .col-xxl-4 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 33.333333%;\n  }\n  .col-xxl-5 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 41.666667%;\n  }\n  .col-xxl-6 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .col-xxl-7 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 58.333333%;\n  }\n  .col-xxl-8 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 66.666667%;\n  }\n  .col-xxl-9 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 75%;\n  }\n  .col-xxl-10 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 83.333333%;\n  }\n  .col-xxl-11 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 91.666667%;\n  }\n  .col-xxl-12 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .offset-xxl-0 {\n    margin-left: 0;\n  }\n  .offset-xxl-1 {\n    margin-left: 8.333333%;\n  }\n  .offset-xxl-2 {\n    margin-left: 16.666667%;\n  }\n  .offset-xxl-3 {\n    margin-left: 25%;\n  }\n  .offset-xxl-4 {\n    margin-left: 33.333333%;\n  }\n  .offset-xxl-5 {\n    margin-left: 41.666667%;\n  }\n  .offset-xxl-6 {\n    margin-left: 50%;\n  }\n  .offset-xxl-7 {\n    margin-left: 58.333333%;\n  }\n  .offset-xxl-8 {\n    margin-left: 66.666667%;\n  }\n  .offset-xxl-9 {\n    margin-left: 75%;\n  }\n  .offset-xxl-10 {\n    margin-left: 83.333333%;\n  }\n  .offset-xxl-11 {\n    margin-left: 91.666667%;\n  }\n  .g-xxl-0,\n  .gx-xxl-0 {\n    --bs-gutter-x: 0;\n  }\n  .g-xxl-0,\n  .gy-xxl-0 {\n    --bs-gutter-y: 0;\n  }\n  .g-xxl-1,\n  .gx-xxl-1 {\n    --bs-gutter-x: 0.25rem;\n  }\n  .g-xxl-1,\n  .gy-xxl-1 {\n    --bs-gutter-y: 0.25rem;\n  }\n  .g-xxl-2,\n  .gx-xxl-2 {\n    --bs-gutter-x: 0.5rem;\n  }\n  .g-xxl-2,\n  .gy-xxl-2 {\n    --bs-gutter-y: 0.5rem;\n  }\n  .g-xxl-3,\n  .gx-xxl-3 {\n    --bs-gutter-x: 1rem;\n  }\n  .g-xxl-3,\n  .gy-xxl-3 {\n    --bs-gutter-y: 1rem;\n  }\n  .g-xxl-4,\n  .gx-xxl-4 {\n    --bs-gutter-x: 1.5rem;\n  }\n  .g-xxl-4,\n  .gy-xxl-4 {\n    --bs-gutter-y: 1.5rem;\n  }\n  .g-xxl-5,\n  .gx-xxl-5 {\n    --bs-gutter-x: 3rem;\n  }\n  .g-xxl-5,\n  .gy-xxl-5 {\n    --bs-gutter-y: 3rem;\n  }\n}\n\n.table {\n  --bs-table-bg: transparent;\n  --bs-table-accent-bg: transparent;\n  --bs-table-striped-color: #fff;\n  --bs-table-striped-bg: rgba(0, 0, 0, 0.05);\n  --bs-table-active-color: #fff;\n  --bs-table-active-bg: rgba(0, 0, 0, 0.1);\n  --bs-table-hover-color: #fff;\n  --bs-table-hover-bg: rgba(0, 0, 0, 0.075);\n  width: 100%;\n  margin-bottom: 1rem;\n  color: #fff;\n  vertical-align: top;\n  border-color: #444;\n}\n\n.table > :not(caption) > * > * {\n  padding: 0.5rem 0.5rem;\n  background-color: var(--bs-table-bg);\n  border-bottom-width: 1px;\n  box-shadow: inset 0 0 0 9999px var(--bs-table-accent-bg);\n}\n\n.table > tbody {\n  vertical-align: inherit;\n}\n\n.table > thead {\n  vertical-align: bottom;\n}\n\n.table > :not(:first-child) {\n  border-top: 2px solid currentColor;\n}\n\n.caption-top {\n  caption-side: top;\n}\n\n.table-sm > :not(caption) > * > * {\n  padding: 0.25rem 0.25rem;\n}\n\n.table-bordered > :not(caption) > * {\n  border-width: 1px 0;\n}\n\n.table-bordered > :not(caption) > * > * {\n  border-width: 0 1px;\n}\n\n.table-borderless > :not(caption) > * > * {\n  border-bottom-width: 0;\n}\n\n.table-borderless > :not(:first-child) {\n  border-top-width: 0;\n}\n\n.table-striped > tbody > tr:nth-of-type(odd) > * {\n  --bs-table-accent-bg: var(--bs-table-striped-bg);\n  color: var(--bs-table-striped-color);\n}\n\n.table-active {\n  --bs-table-accent-bg: var(--bs-table-active-bg);\n  color: var(--bs-table-active-color);\n}\n\n.table-hover > tbody > tr:hover > * {\n  --bs-table-accent-bg: var(--bs-table-hover-bg);\n  color: var(--bs-table-hover-color);\n}\n\n.table-primary {\n  --bs-table-bg: #375a7f;\n  --bs-table-striped-bg: #416285;\n  --bs-table-striped-color: #fff;\n  --bs-table-active-bg: #4b6b8c;\n  --bs-table-active-color: #fff;\n  --bs-table-hover-bg: #466689;\n  --bs-table-hover-color: #fff;\n  color: #fff;\n  border-color: #4b6b8c;\n}\n\n.table-secondary {\n  --bs-table-bg: #444444;\n  --bs-table-striped-bg: #4d4d4d;\n  --bs-table-striped-color: #fff;\n  --bs-table-active-bg: #575757;\n  --bs-table-active-color: #fff;\n  --bs-table-hover-bg: #525252;\n  --bs-table-hover-color: #fff;\n  color: #fff;\n  border-color: #575757;\n}\n\n.table-success {\n  --bs-table-bg: #00bc8c;\n  --bs-table-striped-bg: #0dbf92;\n  --bs-table-striped-color: #fff;\n  --bs-table-active-bg: #1ac398;\n  --bs-table-active-color: #fff;\n  --bs-table-hover-bg: #13c195;\n  --bs-table-hover-color: #fff;\n  color: #fff;\n  border-color: #1ac398;\n}\n\n.table-info {\n  --bs-table-bg: #3498db;\n  --bs-table-striped-bg: #3e9ddd;\n  --bs-table-striped-color: #fff;\n  --bs-table-active-bg: #48a2df;\n  --bs-table-active-color: #fff;\n  --bs-table-hover-bg: #43a0de;\n  --bs-table-hover-color: #fff;\n  color: #fff;\n  border-color: #48a2df;\n}\n\n.table-warning {\n  --bs-table-bg: #f39c12;\n  --bs-table-striped-bg: #f4a11e;\n  --bs-table-striped-color: #fff;\n  --bs-table-active-bg: #f4a62a;\n  --bs-table-active-color: #fff;\n  --bs-table-hover-bg: #f4a324;\n  --bs-table-hover-color: #fff;\n  color: #fff;\n  border-color: #f4a62a;\n}\n\n.table-danger {\n  --bs-table-bg: #e74c3c;\n  --bs-table-striped-bg: #e85546;\n  --bs-table-striped-color: #fff;\n  --bs-table-active-bg: #e95e50;\n  --bs-table-active-color: #fff;\n  --bs-table-hover-bg: #e9594b;\n  --bs-table-hover-color: #fff;\n  color: #fff;\n  border-color: #e95e50;\n}\n\n.table-light {\n  --bs-table-bg: #adb5bd;\n  --bs-table-striped-bg: #b1b9c0;\n  --bs-table-striped-color: #fff;\n  --bs-table-active-bg: #b5bcc4;\n  --bs-table-active-color: #fff;\n  --bs-table-hover-bg: #b3bbc2;\n  --bs-table-hover-color: #fff;\n  color: #fff;\n  border-color: #b5bcc4;\n}\n\n.table-dark {\n  --bs-table-bg: #303030;\n  --bs-table-striped-bg: #3a3a3a;\n  --bs-table-striped-color: #fff;\n  --bs-table-active-bg: #454545;\n  --bs-table-active-color: #fff;\n  --bs-table-hover-bg: #404040;\n  --bs-table-hover-color: #fff;\n  color: #fff;\n  border-color: #454545;\n}\n\n.table-responsive {\n  overflow-x: auto;\n  -webkit-overflow-scrolling: touch;\n}\n\n@media (max-width: 575.98px) {\n  .table-responsive-sm {\n    overflow-x: auto;\n    -webkit-overflow-scrolling: touch;\n  }\n}\n\n@media (max-width: 767.98px) {\n  .table-responsive-md {\n    overflow-x: auto;\n    -webkit-overflow-scrolling: touch;\n  }\n}\n\n@media (max-width: 991.98px) {\n  .table-responsive-lg {\n    overflow-x: auto;\n    -webkit-overflow-scrolling: touch;\n  }\n}\n\n@media (max-width: 1199.98px) {\n  .table-responsive-xl {\n    overflow-x: auto;\n    -webkit-overflow-scrolling: touch;\n  }\n}\n\n@media (max-width: 1399.98px) {\n  .table-responsive-xxl {\n    overflow-x: auto;\n    -webkit-overflow-scrolling: touch;\n  }\n}\n\n.form-label {\n  margin-bottom: 0.5rem;\n}\n\n.col-form-label {\n  padding-top: calc(0.375rem + 1px);\n  padding-bottom: calc(0.375rem + 1px);\n  margin-bottom: 0;\n  font-size: inherit;\n  line-height: 1.5;\n}\n\n.col-form-label-lg {\n  padding-top: calc(0.5rem + 1px);\n  padding-bottom: calc(0.5rem + 1px);\n  font-size: 1.25rem;\n}\n\n.col-form-label-sm {\n  padding-top: calc(0.25rem + 1px);\n  padding-bottom: calc(0.25rem + 1px);\n  font-size: 0.875rem;\n}\n\n.form-text {\n  margin-top: 0.25rem;\n  font-size: 0.875em;\n  color: #888;\n}\n\n.form-control {\n  display: block;\n  width: 100%;\n  padding: 0.375rem 0.75rem;\n  font-size: 1rem;\n  font-weight: 400;\n  line-height: 1.5;\n  color: #303030;\n  background-color: #fff;\n  background-clip: padding-box;\n  border: 1px solid #222;\n  -webkit-appearance: none;\n  -moz-appearance: none;\n  appearance: none;\n  border-radius: 0.25rem;\n  transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .form-control {\n    transition: none;\n  }\n}\n\n.form-control[type=\"file\"] {\n  overflow: hidden;\n}\n\n.form-control[type=\"file\"]:not(:disabled):not([readonly]) {\n  cursor: pointer;\n}\n\n.form-control:focus {\n  color: #303030;\n  background-color: #fff;\n  border-color: #9badbf;\n  outline: 0;\n  box-shadow: 0 0 0 0.25rem rgba(55, 90, 127, 0.25);\n}\n\n.form-control::-webkit-date-and-time-value {\n  height: 1.5em;\n}\n\n.form-control::-webkit-input-placeholder {\n  color: #888;\n  opacity: 1;\n}\n\n.form-control::-moz-placeholder {\n  color: #888;\n  opacity: 1;\n}\n\n.form-control:-ms-input-placeholder {\n  color: #888;\n  opacity: 1;\n}\n\n.form-control::-ms-input-placeholder {\n  color: #888;\n  opacity: 1;\n}\n\n.form-control::placeholder {\n  color: #888;\n  opacity: 1;\n}\n\n.form-control:disabled, .form-control[readonly] {\n  background-color: #ebebeb;\n  opacity: 1;\n}\n\n.form-control::file-selector-button {\n  padding: 0.375rem 0.75rem;\n  margin: -0.375rem -0.75rem;\n  -webkit-margin-end: 0.75rem;\n  -moz-margin-end: 0.75rem;\n  margin-inline-end: 0.75rem;\n  color: #fff;\n  background-color: #444;\n  pointer-events: none;\n  border-color: inherit;\n  border-style: solid;\n  border-width: 0;\n  border-inline-end-width: 1px;\n  border-radius: 0;\n  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .form-control::file-selector-button {\n    transition: none;\n  }\n}\n\n.form-control:hover:not(:disabled):not([readonly])::file-selector-button {\n  background-color: #414141;\n}\n\n.form-control::-webkit-file-upload-button {\n  padding: 0.375rem 0.75rem;\n  margin: -0.375rem -0.75rem;\n  -webkit-margin-end: 0.75rem;\n  margin-inline-end: 0.75rem;\n  color: #fff;\n  background-color: #444;\n  pointer-events: none;\n  border-color: inherit;\n  border-style: solid;\n  border-width: 0;\n  border-inline-end-width: 1px;\n  border-radius: 0;\n  -webkit-transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .form-control::-webkit-file-upload-button {\n    -webkit-transition: none;\n    transition: none;\n  }\n}\n\n.form-control:hover:not(:disabled):not([readonly])::-webkit-file-upload-button {\n  background-color: #414141;\n}\n\n.form-control-plaintext {\n  display: block;\n  width: 100%;\n  padding: 0.375rem 0;\n  margin-bottom: 0;\n  line-height: 1.5;\n  color: #fff;\n  background-color: transparent;\n  border: solid transparent;\n  border-width: 1px 0;\n}\n\n.form-control-plaintext.form-control-sm, .form-control-plaintext.form-control-lg {\n  padding-right: 0;\n  padding-left: 0;\n}\n\n.form-control-sm {\n  min-height: calc(1.5em + 0.5rem + 2px);\n  padding: 0.25rem 0.5rem;\n  font-size: 0.875rem;\n  border-radius: 0.2rem;\n}\n\n.form-control-sm::file-selector-button {\n  padding: 0.25rem 0.5rem;\n  margin: -0.25rem -0.5rem;\n  -webkit-margin-end: 0.5rem;\n  -moz-margin-end: 0.5rem;\n  margin-inline-end: 0.5rem;\n}\n\n.form-control-sm::-webkit-file-upload-button {\n  padding: 0.25rem 0.5rem;\n  margin: -0.25rem -0.5rem;\n  -webkit-margin-end: 0.5rem;\n  margin-inline-end: 0.5rem;\n}\n\n.form-control-lg {\n  min-height: calc(1.5em + 1rem + 2px);\n  padding: 0.5rem 1rem;\n  font-size: 1.25rem;\n  border-radius: 0.3rem;\n}\n\n.form-control-lg::file-selector-button {\n  padding: 0.5rem 1rem;\n  margin: -0.5rem -1rem;\n  -webkit-margin-end: 1rem;\n  -moz-margin-end: 1rem;\n  margin-inline-end: 1rem;\n}\n\n.form-control-lg::-webkit-file-upload-button {\n  padding: 0.5rem 1rem;\n  margin: -0.5rem -1rem;\n  -webkit-margin-end: 1rem;\n  margin-inline-end: 1rem;\n}\n\ntextarea.form-control {\n  min-height: calc(1.5em + 0.75rem + 2px);\n}\n\ntextarea.form-control-sm {\n  min-height: calc(1.5em + 0.5rem + 2px);\n}\n\ntextarea.form-control-lg {\n  min-height: calc(1.5em + 1rem + 2px);\n}\n\n.form-control-color {\n  width: 3rem;\n  height: auto;\n  padding: 0.375rem;\n}\n\n.form-control-color:not(:disabled):not([readonly]) {\n  cursor: pointer;\n}\n\n.form-control-color::-moz-color-swatch {\n  height: 1.5em;\n  border-radius: 0.25rem;\n}\n\n.form-control-color::-webkit-color-swatch {\n  height: 1.5em;\n  border-radius: 0.25rem;\n}\n\n.form-select {\n  display: block;\n  width: 100%;\n  padding: 0.375rem 2.25rem 0.375rem 0.75rem;\n  -moz-padding-start: calc(0.75rem - 3px);\n  font-size: 1rem;\n  font-weight: 400;\n  line-height: 1.5;\n  color: #303030;\n  background-color: #fff;\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23303030' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e\");\n  background-repeat: no-repeat;\n  background-position: right 0.75rem center;\n  background-size: 16px 12px;\n  border: 1px solid #222;\n  border-radius: 0.25rem;\n  transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n  -webkit-appearance: none;\n  -moz-appearance: none;\n  appearance: none;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .form-select {\n    transition: none;\n  }\n}\n\n.form-select:focus {\n  border-color: #9badbf;\n  outline: 0;\n  box-shadow: 0 0 0 0.25rem rgba(55, 90, 127, 0.25);\n}\n\n.form-select[multiple], .form-select[size]:not([size=\"1\"]) {\n  padding-right: 0.75rem;\n  background-image: none;\n}\n\n.form-select:disabled {\n  background-color: #ebebeb;\n}\n\n.form-select:-moz-focusring {\n  color: transparent;\n  text-shadow: 0 0 0 #303030;\n}\n\n.form-select-sm {\n  padding-top: 0.25rem;\n  padding-bottom: 0.25rem;\n  padding-left: 0.5rem;\n  font-size: 0.875rem;\n  border-radius: 0.2rem;\n}\n\n.form-select-lg {\n  padding-top: 0.5rem;\n  padding-bottom: 0.5rem;\n  padding-left: 1rem;\n  font-size: 1.25rem;\n  border-radius: 0.3rem;\n}\n\n.form-check {\n  display: block;\n  min-height: 1.5rem;\n  padding-left: 1.5em;\n  margin-bottom: 0.125rem;\n}\n\n.form-check .form-check-input {\n  float: left;\n  margin-left: -1.5em;\n}\n\n.form-check-input {\n  width: 1em;\n  height: 1em;\n  margin-top: 0.25em;\n  vertical-align: top;\n  background-color: #fff;\n  background-repeat: no-repeat;\n  background-position: center;\n  background-size: contain;\n  border: none;\n  -webkit-appearance: none;\n  -moz-appearance: none;\n  appearance: none;\n  -webkit-print-color-adjust: exact;\n  color-adjust: exact;\n}\n\n.form-check-input[type=\"checkbox\"] {\n  border-radius: 0.25em;\n}\n\n.form-check-input[type=\"radio\"] {\n  border-radius: 50%;\n}\n\n.form-check-input:active {\n  -webkit-filter: brightness(90%);\n  filter: brightness(90%);\n}\n\n.form-check-input:focus {\n  border-color: #9badbf;\n  outline: 0;\n  box-shadow: 0 0 0 0.25rem rgba(55, 90, 127, 0.25);\n}\n\n.form-check-input:checked {\n  background-color: #375a7f;\n  border-color: #375a7f;\n}\n\n.form-check-input:checked[type=\"checkbox\"] {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10l3 3l6-6'/%3e%3c/svg%3e\");\n}\n\n.form-check-input:checked[type=\"radio\"] {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='2' fill='%23fff'/%3e%3c/svg%3e\");\n}\n\n.form-check-input[type=\"checkbox\"]:indeterminate {\n  background-color: #375a7f;\n  border-color: #375a7f;\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10h8'/%3e%3c/svg%3e\");\n}\n\n.form-check-input:disabled {\n  pointer-events: none;\n  -webkit-filter: none;\n  filter: none;\n  opacity: 0.5;\n}\n\n.form-check-input[disabled] ~ .form-check-label, .form-check-input:disabled ~ .form-check-label {\n  opacity: 0.5;\n}\n\n.form-switch {\n  padding-left: 2.5em;\n}\n\n.form-switch .form-check-input {\n  width: 2em;\n  margin-left: -2.5em;\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%280, 0, 0, 0.25%29'/%3e%3c/svg%3e\");\n  background-position: left center;\n  border-radius: 2em;\n  transition: background-position 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .form-switch .form-check-input {\n    transition: none;\n  }\n}\n\n.form-switch .form-check-input:focus {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%239badbf'/%3e%3c/svg%3e\");\n}\n\n.form-switch .form-check-input:checked {\n  background-position: right center;\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e\");\n}\n\n.form-check-inline {\n  display: inline-block;\n  margin-right: 1rem;\n}\n\n.btn-check {\n  position: absolute;\n  clip: rect(0, 0, 0, 0);\n  pointer-events: none;\n}\n\n.btn-check[disabled] + .btn, .btn-check:disabled + .btn {\n  pointer-events: none;\n  -webkit-filter: none;\n  filter: none;\n  opacity: 0.65;\n}\n\n.form-range {\n  width: 100%;\n  height: 1.5rem;\n  padding: 0;\n  background-color: transparent;\n  -webkit-appearance: none;\n  -moz-appearance: none;\n  appearance: none;\n}\n\n.form-range:focus {\n  outline: 0;\n}\n\n.form-range:focus::-webkit-slider-thumb {\n  box-shadow: 0 0 0 1px #222, 0 0 0 0.25rem rgba(55, 90, 127, 0.25);\n}\n\n.form-range:focus::-moz-range-thumb {\n  box-shadow: 0 0 0 1px #222, 0 0 0 0.25rem rgba(55, 90, 127, 0.25);\n}\n\n.form-range::-moz-focus-outer {\n  border: 0;\n}\n\n.form-range::-webkit-slider-thumb {\n  width: 1rem;\n  height: 1rem;\n  margin-top: -0.25rem;\n  background-color: #375a7f;\n  border: 0;\n  border-radius: 1rem;\n  -webkit-transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n  transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n  -webkit-appearance: none;\n  appearance: none;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .form-range::-webkit-slider-thumb {\n    -webkit-transition: none;\n    transition: none;\n  }\n}\n\n.form-range::-webkit-slider-thumb:active {\n  background-color: #c3ced9;\n}\n\n.form-range::-webkit-slider-runnable-track {\n  width: 100%;\n  height: 0.5rem;\n  color: transparent;\n  cursor: pointer;\n  background-color: #dee2e6;\n  border-color: transparent;\n  border-radius: 1rem;\n}\n\n.form-range::-moz-range-thumb {\n  width: 1rem;\n  height: 1rem;\n  background-color: #375a7f;\n  border: 0;\n  border-radius: 1rem;\n  -moz-transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n  transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n  -moz-appearance: none;\n  appearance: none;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .form-range::-moz-range-thumb {\n    -moz-transition: none;\n    transition: none;\n  }\n}\n\n.form-range::-moz-range-thumb:active {\n  background-color: #c3ced9;\n}\n\n.form-range::-moz-range-track {\n  width: 100%;\n  height: 0.5rem;\n  color: transparent;\n  cursor: pointer;\n  background-color: #dee2e6;\n  border-color: transparent;\n  border-radius: 1rem;\n}\n\n.form-range:disabled {\n  pointer-events: none;\n}\n\n.form-range:disabled::-webkit-slider-thumb {\n  background-color: #adb5bd;\n}\n\n.form-range:disabled::-moz-range-thumb {\n  background-color: #adb5bd;\n}\n\n.form-floating {\n  position: relative;\n}\n\n.form-floating > .form-control,\n.form-floating > .form-select {\n  height: calc(3.5rem + 2px);\n  line-height: 1.25;\n}\n\n.form-floating > label {\n  position: absolute;\n  top: 0;\n  left: 0;\n  height: 100%;\n  padding: 1rem 0.75rem;\n  pointer-events: none;\n  border: 1px solid transparent;\n  -webkit-transform-origin: 0 0;\n  transform-origin: 0 0;\n  transition: opacity 0.1s ease-in-out, -webkit-transform 0.1s ease-in-out;\n  transition: opacity 0.1s ease-in-out, transform 0.1s ease-in-out;\n  transition: opacity 0.1s ease-in-out, transform 0.1s ease-in-out, -webkit-transform 0.1s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .form-floating > label {\n    transition: none;\n  }\n}\n\n.form-floating > .form-control {\n  padding: 1rem 0.75rem;\n}\n\n.form-floating > .form-control::-webkit-input-placeholder {\n  color: transparent;\n}\n\n.form-floating > .form-control::-moz-placeholder {\n  color: transparent;\n}\n\n.form-floating > .form-control:-ms-input-placeholder {\n  color: transparent;\n}\n\n.form-floating > .form-control::-ms-input-placeholder {\n  color: transparent;\n}\n\n.form-floating > .form-control::placeholder {\n  color: transparent;\n}\n\n.form-floating > .form-control:not(:-moz-placeholder-shown) {\n  padding-top: 1.625rem;\n  padding-bottom: 0.625rem;\n}\n\n.form-floating > .form-control:not(:-ms-input-placeholder) {\n  padding-top: 1.625rem;\n  padding-bottom: 0.625rem;\n}\n\n.form-floating > .form-control:focus, .form-floating > .form-control:not(:placeholder-shown) {\n  padding-top: 1.625rem;\n  padding-bottom: 0.625rem;\n}\n\n.form-floating > .form-control:-webkit-autofill {\n  padding-top: 1.625rem;\n  padding-bottom: 0.625rem;\n}\n\n.form-floating > .form-select {\n  padding-top: 1.625rem;\n  padding-bottom: 0.625rem;\n}\n\n.form-floating > .form-control:not(:-moz-placeholder-shown) ~ label {\n  opacity: 0.65;\n  transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);\n}\n\n.form-floating > .form-control:not(:-ms-input-placeholder) ~ label {\n  opacity: 0.65;\n  transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);\n}\n\n.form-floating > .form-control:focus ~ label,\n.form-floating > .form-control:not(:placeholder-shown) ~ label,\n.form-floating > .form-select ~ label {\n  opacity: 0.65;\n  -webkit-transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);\n  transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);\n}\n\n.form-floating > .form-control:-webkit-autofill ~ label {\n  opacity: 0.65;\n  -webkit-transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);\n  transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);\n}\n\n.input-group {\n  position: relative;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n  flex-wrap: wrap;\n  -ms-flex-align: stretch;\n  align-items: stretch;\n  width: 100%;\n}\n\n.input-group > .form-control,\n.input-group > .form-select {\n  position: relative;\n  -ms-flex: 1 1 auto;\n  flex: 1 1 auto;\n  width: 1%;\n  min-width: 0;\n}\n\n.input-group > .form-control:focus,\n.input-group > .form-select:focus {\n  z-index: 3;\n}\n\n.input-group .btn {\n  position: relative;\n  z-index: 2;\n}\n\n.input-group .btn:focus {\n  z-index: 3;\n}\n\n.input-group-text {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-align: center;\n  align-items: center;\n  padding: 0.375rem 0.75rem;\n  font-size: 1rem;\n  font-weight: 400;\n  line-height: 1.5;\n  color: #adb5bd;\n  text-align: center;\n  white-space: nowrap;\n  background-color: #444;\n  border: 1px solid #222;\n  border-radius: 0.25rem;\n}\n\n.input-group-lg > .form-control,\n.input-group-lg > .form-select,\n.input-group-lg > .input-group-text,\n.input-group-lg > .btn {\n  padding: 0.5rem 1rem;\n  font-size: 1.25rem;\n  border-radius: 0.3rem;\n}\n\n.input-group-sm > .form-control,\n.input-group-sm > .form-select,\n.input-group-sm > .input-group-text,\n.input-group-sm > .btn {\n  padding: 0.25rem 0.5rem;\n  font-size: 0.875rem;\n  border-radius: 0.2rem;\n}\n\n.input-group-lg > .form-select,\n.input-group-sm > .form-select {\n  padding-right: 3rem;\n}\n\n.input-group:not(.has-validation) > :not(:last-child):not(.dropdown-toggle):not(.dropdown-menu),\n.input-group:not(.has-validation) > .dropdown-toggle:nth-last-child(n + 3) {\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n}\n\n.input-group.has-validation > :nth-last-child(n + 3):not(.dropdown-toggle):not(.dropdown-menu),\n.input-group.has-validation > .dropdown-toggle:nth-last-child(n + 4) {\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n}\n\n.input-group > :not(:first-child):not(.dropdown-menu):not(.valid-tooltip):not(.valid-feedback):not(.invalid-tooltip):not(.invalid-feedback) {\n  margin-left: -1px;\n  border-top-left-radius: 0;\n  border-bottom-left-radius: 0;\n}\n\n.valid-feedback {\n  display: none;\n  width: 100%;\n  margin-top: 0.25rem;\n  font-size: 0.875em;\n  color: #00bc8c;\n}\n\n.valid-tooltip {\n  position: absolute;\n  top: 100%;\n  z-index: 5;\n  display: none;\n  max-width: 100%;\n  padding: 0.25rem 0.5rem;\n  margin-top: .1rem;\n  font-size: 0.875rem;\n  color: #fff;\n  background-color: rgba(0, 188, 140, 0.9);\n  border-radius: 0.25rem;\n}\n\n.was-validated :valid ~ .valid-feedback,\n.was-validated :valid ~ .valid-tooltip,\n.is-valid ~ .valid-feedback,\n.is-valid ~ .valid-tooltip {\n  display: block;\n}\n\n.was-validated .form-control:valid, .form-control.is-valid {\n  border-color: #00bc8c;\n  padding-right: calc(1.5em + 0.75rem);\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%2300bc8c' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e\");\n  background-repeat: no-repeat;\n  background-position: right calc(0.375em + 0.1875rem) center;\n  background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n\n.was-validated .form-control:valid:focus, .form-control.is-valid:focus {\n  border-color: #00bc8c;\n  box-shadow: 0 0 0 0.25rem rgba(0, 188, 140, 0.25);\n}\n\n.was-validated textarea.form-control:valid, textarea.form-control.is-valid {\n  padding-right: calc(1.5em + 0.75rem);\n  background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem);\n}\n\n.was-validated .form-select:valid, .form-select.is-valid {\n  border-color: #00bc8c;\n}\n\n.was-validated .form-select:valid:not([multiple]):not([size]), .was-validated .form-select:valid:not([multiple])[size=\"1\"], .form-select.is-valid:not([multiple]):not([size]), .form-select.is-valid:not([multiple])[size=\"1\"] {\n  padding-right: 4.125rem;\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23303030' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e\"), url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%2300bc8c' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e\");\n  background-position: right 0.75rem center, center right 2.25rem;\n  background-size: 16px 12px, calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n\n.was-validated .form-select:valid:focus, .form-select.is-valid:focus {\n  border-color: #00bc8c;\n  box-shadow: 0 0 0 0.25rem rgba(0, 188, 140, 0.25);\n}\n\n.was-validated .form-check-input:valid, .form-check-input.is-valid {\n  border-color: #00bc8c;\n}\n\n.was-validated .form-check-input:valid:checked, .form-check-input.is-valid:checked {\n  background-color: #00bc8c;\n}\n\n.was-validated .form-check-input:valid:focus, .form-check-input.is-valid:focus {\n  box-shadow: 0 0 0 0.25rem rgba(0, 188, 140, 0.25);\n}\n\n.was-validated .form-check-input:valid ~ .form-check-label, .form-check-input.is-valid ~ .form-check-label {\n  color: #00bc8c;\n}\n\n.form-check-inline .form-check-input ~ .valid-feedback {\n  margin-left: .5em;\n}\n\n.was-validated .input-group .form-control:valid, .input-group .form-control.is-valid, .was-validated\n.input-group .form-select:valid,\n.input-group .form-select.is-valid {\n  z-index: 1;\n}\n\n.was-validated .input-group .form-control:valid:focus, .input-group .form-control.is-valid:focus, .was-validated\n.input-group .form-select:valid:focus,\n.input-group .form-select.is-valid:focus {\n  z-index: 3;\n}\n\n.invalid-feedback {\n  display: none;\n  width: 100%;\n  margin-top: 0.25rem;\n  font-size: 0.875em;\n  color: #e74c3c;\n}\n\n.invalid-tooltip {\n  position: absolute;\n  top: 100%;\n  z-index: 5;\n  display: none;\n  max-width: 100%;\n  padding: 0.25rem 0.5rem;\n  margin-top: .1rem;\n  font-size: 0.875rem;\n  color: #fff;\n  background-color: rgba(231, 76, 60, 0.9);\n  border-radius: 0.25rem;\n}\n\n.was-validated :invalid ~ .invalid-feedback,\n.was-validated :invalid ~ .invalid-tooltip,\n.is-invalid ~ .invalid-feedback,\n.is-invalid ~ .invalid-tooltip {\n  display: block;\n}\n\n.was-validated .form-control:invalid, .form-control.is-invalid {\n  border-color: #e74c3c;\n  padding-right: calc(1.5em + 0.75rem);\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23e74c3c'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23e74c3c' stroke='none'/%3e%3c/svg%3e\");\n  background-repeat: no-repeat;\n  background-position: right calc(0.375em + 0.1875rem) center;\n  background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n\n.was-validated .form-control:invalid:focus, .form-control.is-invalid:focus {\n  border-color: #e74c3c;\n  box-shadow: 0 0 0 0.25rem rgba(231, 76, 60, 0.25);\n}\n\n.was-validated textarea.form-control:invalid, textarea.form-control.is-invalid {\n  padding-right: calc(1.5em + 0.75rem);\n  background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem);\n}\n\n.was-validated .form-select:invalid, .form-select.is-invalid {\n  border-color: #e74c3c;\n}\n\n.was-validated .form-select:invalid:not([multiple]):not([size]), .was-validated .form-select:invalid:not([multiple])[size=\"1\"], .form-select.is-invalid:not([multiple]):not([size]), .form-select.is-invalid:not([multiple])[size=\"1\"] {\n  padding-right: 4.125rem;\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23303030' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e\"), url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23e74c3c'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23e74c3c' stroke='none'/%3e%3c/svg%3e\");\n  background-position: right 0.75rem center, center right 2.25rem;\n  background-size: 16px 12px, calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n\n.was-validated .form-select:invalid:focus, .form-select.is-invalid:focus {\n  border-color: #e74c3c;\n  box-shadow: 0 0 0 0.25rem rgba(231, 76, 60, 0.25);\n}\n\n.was-validated .form-check-input:invalid, .form-check-input.is-invalid {\n  border-color: #e74c3c;\n}\n\n.was-validated .form-check-input:invalid:checked, .form-check-input.is-invalid:checked {\n  background-color: #e74c3c;\n}\n\n.was-validated .form-check-input:invalid:focus, .form-check-input.is-invalid:focus {\n  box-shadow: 0 0 0 0.25rem rgba(231, 76, 60, 0.25);\n}\n\n.was-validated .form-check-input:invalid ~ .form-check-label, .form-check-input.is-invalid ~ .form-check-label {\n  color: #e74c3c;\n}\n\n.form-check-inline .form-check-input ~ .invalid-feedback {\n  margin-left: .5em;\n}\n\n.was-validated .input-group .form-control:invalid, .input-group .form-control.is-invalid, .was-validated\n.input-group .form-select:invalid,\n.input-group .form-select.is-invalid {\n  z-index: 2;\n}\n\n.was-validated .input-group .form-control:invalid:focus, .input-group .form-control.is-invalid:focus, .was-validated\n.input-group .form-select:invalid:focus,\n.input-group .form-select.is-invalid:focus {\n  z-index: 3;\n}\n\n.btn {\n  display: inline-block;\n  font-weight: 400;\n  line-height: 1.5;\n  color: #fff;\n  text-align: center;\n  text-decoration: none;\n  vertical-align: middle;\n  cursor: pointer;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  user-select: none;\n  background-color: transparent;\n  border: 1px solid transparent;\n  padding: 0.375rem 0.75rem;\n  font-size: 1rem;\n  border-radius: 0.25rem;\n  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .btn {\n    transition: none;\n  }\n}\n\n.btn:hover {\n  color: #fff;\n}\n\n.btn-check:focus + .btn, .btn:focus {\n  outline: 0;\n  box-shadow: 0 0 0 0.25rem rgba(55, 90, 127, 0.25);\n}\n\n.btn:disabled, .btn.disabled,\nfieldset:disabled .btn {\n  pointer-events: none;\n  opacity: 0.65;\n}\n\n.btn-primary {\n  color: #fff;\n  background-color: #375a7f;\n  border-color: #375a7f;\n}\n\n.btn-primary:hover {\n  color: #fff;\n  background-color: #2f4d6c;\n  border-color: #2c4866;\n}\n\n.btn-check:focus + .btn-primary, .btn-primary:focus {\n  color: #fff;\n  background-color: #2f4d6c;\n  border-color: #2c4866;\n  box-shadow: 0 0 0 0.25rem rgba(85, 115, 146, 0.5);\n}\n\n.btn-check:checked + .btn-primary,\n.btn-check:active + .btn-primary, .btn-primary:active, .btn-primary.active,\n.show > .btn-primary.dropdown-toggle {\n  color: #fff;\n  background-color: #2c4866;\n  border-color: #29445f;\n}\n\n.btn-check:checked + .btn-primary:focus,\n.btn-check:active + .btn-primary:focus, .btn-primary:active:focus, .btn-primary.active:focus,\n.show > .btn-primary.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.25rem rgba(85, 115, 146, 0.5);\n}\n\n.btn-primary:disabled, .btn-primary.disabled {\n  color: #fff;\n  background-color: #375a7f;\n  border-color: #375a7f;\n}\n\n.btn-secondary {\n  color: #fff;\n  background-color: #444;\n  border-color: #444;\n}\n\n.btn-secondary:hover {\n  color: #fff;\n  background-color: #3a3a3a;\n  border-color: #363636;\n}\n\n.btn-check:focus + .btn-secondary, .btn-secondary:focus {\n  color: #fff;\n  background-color: #3a3a3a;\n  border-color: #363636;\n  box-shadow: 0 0 0 0.25rem rgba(96, 96, 96, 0.5);\n}\n\n.btn-check:checked + .btn-secondary,\n.btn-check:active + .btn-secondary, .btn-secondary:active, .btn-secondary.active,\n.show > .btn-secondary.dropdown-toggle {\n  color: #fff;\n  background-color: #363636;\n  border-color: #333333;\n}\n\n.btn-check:checked + .btn-secondary:focus,\n.btn-check:active + .btn-secondary:focus, .btn-secondary:active:focus, .btn-secondary.active:focus,\n.show > .btn-secondary.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.25rem rgba(96, 96, 96, 0.5);\n}\n\n.btn-secondary:disabled, .btn-secondary.disabled {\n  color: #fff;\n  background-color: #444;\n  border-color: #444;\n}\n\n.btn-success {\n  color: #fff;\n  background-color: #00bc8c;\n  border-color: #00bc8c;\n}\n\n.btn-success:hover {\n  color: #fff;\n  background-color: #00a077;\n  border-color: #009670;\n}\n\n.btn-check:focus + .btn-success, .btn-success:focus {\n  color: #fff;\n  background-color: #00a077;\n  border-color: #009670;\n  box-shadow: 0 0 0 0.25rem rgba(38, 198, 157, 0.5);\n}\n\n.btn-check:checked + .btn-success,\n.btn-check:active + .btn-success, .btn-success:active, .btn-success.active,\n.show > .btn-success.dropdown-toggle {\n  color: #fff;\n  background-color: #009670;\n  border-color: #008d69;\n}\n\n.btn-check:checked + .btn-success:focus,\n.btn-check:active + .btn-success:focus, .btn-success:active:focus, .btn-success.active:focus,\n.show > .btn-success.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.25rem rgba(38, 198, 157, 0.5);\n}\n\n.btn-success:disabled, .btn-success.disabled {\n  color: #fff;\n  background-color: #00bc8c;\n  border-color: #00bc8c;\n}\n\n.btn-info {\n  color: #fff;\n  background-color: #3498db;\n  border-color: #3498db;\n}\n\n.btn-info:hover {\n  color: #fff;\n  background-color: #2c81ba;\n  border-color: #2a7aaf;\n}\n\n.btn-check:focus + .btn-info, .btn-info:focus {\n  color: #fff;\n  background-color: #2c81ba;\n  border-color: #2a7aaf;\n  box-shadow: 0 0 0 0.25rem rgba(82, 167, 224, 0.5);\n}\n\n.btn-check:checked + .btn-info,\n.btn-check:active + .btn-info, .btn-info:active, .btn-info.active,\n.show > .btn-info.dropdown-toggle {\n  color: #fff;\n  background-color: #2a7aaf;\n  border-color: #2772a4;\n}\n\n.btn-check:checked + .btn-info:focus,\n.btn-check:active + .btn-info:focus, .btn-info:active:focus, .btn-info.active:focus,\n.show > .btn-info.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.25rem rgba(82, 167, 224, 0.5);\n}\n\n.btn-info:disabled, .btn-info.disabled {\n  color: #fff;\n  background-color: #3498db;\n  border-color: #3498db;\n}\n\n.btn-warning {\n  color: #fff;\n  background-color: #f39c12;\n  border-color: #f39c12;\n}\n\n.btn-warning:hover {\n  color: #fff;\n  background-color: #cf850f;\n  border-color: #c27d0e;\n}\n\n.btn-check:focus + .btn-warning, .btn-warning:focus {\n  color: #fff;\n  background-color: #cf850f;\n  border-color: #c27d0e;\n  box-shadow: 0 0 0 0.25rem rgba(245, 171, 54, 0.5);\n}\n\n.btn-check:checked + .btn-warning,\n.btn-check:active + .btn-warning, .btn-warning:active, .btn-warning.active,\n.show > .btn-warning.dropdown-toggle {\n  color: #fff;\n  background-color: #c27d0e;\n  border-color: #b6750e;\n}\n\n.btn-check:checked + .btn-warning:focus,\n.btn-check:active + .btn-warning:focus, .btn-warning:active:focus, .btn-warning.active:focus,\n.show > .btn-warning.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.25rem rgba(245, 171, 54, 0.5);\n}\n\n.btn-warning:disabled, .btn-warning.disabled {\n  color: #fff;\n  background-color: #f39c12;\n  border-color: #f39c12;\n}\n\n.btn-danger {\n  color: #fff;\n  background-color: #e74c3c;\n  border-color: #e74c3c;\n}\n\n.btn-danger:hover {\n  color: #fff;\n  background-color: #c44133;\n  border-color: #b93d30;\n}\n\n.btn-check:focus + .btn-danger, .btn-danger:focus {\n  color: #fff;\n  background-color: #c44133;\n  border-color: #b93d30;\n  box-shadow: 0 0 0 0.25rem rgba(235, 103, 89, 0.5);\n}\n\n.btn-check:checked + .btn-danger,\n.btn-check:active + .btn-danger, .btn-danger:active, .btn-danger.active,\n.show > .btn-danger.dropdown-toggle {\n  color: #fff;\n  background-color: #b93d30;\n  border-color: #ad392d;\n}\n\n.btn-check:checked + .btn-danger:focus,\n.btn-check:active + .btn-danger:focus, .btn-danger:active:focus, .btn-danger.active:focus,\n.show > .btn-danger.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.25rem rgba(235, 103, 89, 0.5);\n}\n\n.btn-danger:disabled, .btn-danger.disabled {\n  color: #fff;\n  background-color: #e74c3c;\n  border-color: #e74c3c;\n}\n\n.btn-light {\n  color: #fff;\n  background-color: #adb5bd;\n  border-color: #adb5bd;\n}\n\n.btn-light:hover {\n  color: #fff;\n  background-color: #939aa1;\n  border-color: #8a9197;\n}\n\n.btn-check:focus + .btn-light, .btn-light:focus {\n  color: #fff;\n  background-color: #939aa1;\n  border-color: #8a9197;\n  box-shadow: 0 0 0 0.25rem rgba(185, 192, 199, 0.5);\n}\n\n.btn-check:checked + .btn-light,\n.btn-check:active + .btn-light, .btn-light:active, .btn-light.active,\n.show > .btn-light.dropdown-toggle {\n  color: #fff;\n  background-color: #8a9197;\n  border-color: #82888e;\n}\n\n.btn-check:checked + .btn-light:focus,\n.btn-check:active + .btn-light:focus, .btn-light:active:focus, .btn-light.active:focus,\n.show > .btn-light.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.25rem rgba(185, 192, 199, 0.5);\n}\n\n.btn-light:disabled, .btn-light.disabled {\n  color: #fff;\n  background-color: #adb5bd;\n  border-color: #adb5bd;\n}\n\n.btn-dark {\n  color: #fff;\n  background-color: #303030;\n  border-color: #303030;\n}\n\n.btn-dark:hover {\n  color: #fff;\n  background-color: #292929;\n  border-color: #262626;\n}\n\n.btn-check:focus + .btn-dark, .btn-dark:focus {\n  color: #fff;\n  background-color: #292929;\n  border-color: #262626;\n  box-shadow: 0 0 0 0.25rem rgba(79, 79, 79, 0.5);\n}\n\n.btn-check:checked + .btn-dark,\n.btn-check:active + .btn-dark, .btn-dark:active, .btn-dark.active,\n.show > .btn-dark.dropdown-toggle {\n  color: #fff;\n  background-color: #262626;\n  border-color: #242424;\n}\n\n.btn-check:checked + .btn-dark:focus,\n.btn-check:active + .btn-dark:focus, .btn-dark:active:focus, .btn-dark.active:focus,\n.show > .btn-dark.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.25rem rgba(79, 79, 79, 0.5);\n}\n\n.btn-dark:disabled, .btn-dark.disabled {\n  color: #fff;\n  background-color: #303030;\n  border-color: #303030;\n}\n\n.btn-outline-primary {\n  color: #375a7f;\n  border-color: #375a7f;\n}\n\n.btn-outline-primary:hover {\n  color: #fff;\n  background-color: #375a7f;\n  border-color: #375a7f;\n}\n\n.btn-check:focus + .btn-outline-primary, .btn-outline-primary:focus {\n  box-shadow: 0 0 0 0.25rem rgba(55, 90, 127, 0.5);\n}\n\n.btn-check:checked + .btn-outline-primary,\n.btn-check:active + .btn-outline-primary, .btn-outline-primary:active, .btn-outline-primary.active, .btn-outline-primary.dropdown-toggle.show {\n  color: #fff;\n  background-color: #375a7f;\n  border-color: #375a7f;\n}\n\n.btn-check:checked + .btn-outline-primary:focus,\n.btn-check:active + .btn-outline-primary:focus, .btn-outline-primary:active:focus, .btn-outline-primary.active:focus, .btn-outline-primary.dropdown-toggle.show:focus {\n  box-shadow: 0 0 0 0.25rem rgba(55, 90, 127, 0.5);\n}\n\n.btn-outline-primary:disabled, .btn-outline-primary.disabled {\n  color: #375a7f;\n  background-color: transparent;\n}\n\n.btn-outline-secondary {\n  color: #444;\n  border-color: #444;\n}\n\n.btn-outline-secondary:hover {\n  color: #fff;\n  background-color: #444;\n  border-color: #444;\n}\n\n.btn-check:focus + .btn-outline-secondary, .btn-outline-secondary:focus {\n  box-shadow: 0 0 0 0.25rem rgba(68, 68, 68, 0.5);\n}\n\n.btn-check:checked + .btn-outline-secondary,\n.btn-check:active + .btn-outline-secondary, .btn-outline-secondary:active, .btn-outline-secondary.active, .btn-outline-secondary.dropdown-toggle.show {\n  color: #fff;\n  background-color: #444;\n  border-color: #444;\n}\n\n.btn-check:checked + .btn-outline-secondary:focus,\n.btn-check:active + .btn-outline-secondary:focus, .btn-outline-secondary:active:focus, .btn-outline-secondary.active:focus, .btn-outline-secondary.dropdown-toggle.show:focus {\n  box-shadow: 0 0 0 0.25rem rgba(68, 68, 68, 0.5);\n}\n\n.btn-outline-secondary:disabled, .btn-outline-secondary.disabled {\n  color: #444;\n  background-color: transparent;\n}\n\n.btn-outline-success {\n  color: #00bc8c;\n  border-color: #00bc8c;\n}\n\n.btn-outline-success:hover {\n  color: #fff;\n  background-color: #00bc8c;\n  border-color: #00bc8c;\n}\n\n.btn-check:focus + .btn-outline-success, .btn-outline-success:focus {\n  box-shadow: 0 0 0 0.25rem rgba(0, 188, 140, 0.5);\n}\n\n.btn-check:checked + .btn-outline-success,\n.btn-check:active + .btn-outline-success, .btn-outline-success:active, .btn-outline-success.active, .btn-outline-success.dropdown-toggle.show {\n  color: #fff;\n  background-color: #00bc8c;\n  border-color: #00bc8c;\n}\n\n.btn-check:checked + .btn-outline-success:focus,\n.btn-check:active + .btn-outline-success:focus, .btn-outline-success:active:focus, .btn-outline-success.active:focus, .btn-outline-success.dropdown-toggle.show:focus {\n  box-shadow: 0 0 0 0.25rem rgba(0, 188, 140, 0.5);\n}\n\n.btn-outline-success:disabled, .btn-outline-success.disabled {\n  color: #00bc8c;\n  background-color: transparent;\n}\n\n.btn-outline-info {\n  color: #3498db;\n  border-color: #3498db;\n}\n\n.btn-outline-info:hover {\n  color: #fff;\n  background-color: #3498db;\n  border-color: #3498db;\n}\n\n.btn-check:focus + .btn-outline-info, .btn-outline-info:focus {\n  box-shadow: 0 0 0 0.25rem rgba(52, 152, 219, 0.5);\n}\n\n.btn-check:checked + .btn-outline-info,\n.btn-check:active + .btn-outline-info, .btn-outline-info:active, .btn-outline-info.active, .btn-outline-info.dropdown-toggle.show {\n  color: #fff;\n  background-color: #3498db;\n  border-color: #3498db;\n}\n\n.btn-check:checked + .btn-outline-info:focus,\n.btn-check:active + .btn-outline-info:focus, .btn-outline-info:active:focus, .btn-outline-info.active:focus, .btn-outline-info.dropdown-toggle.show:focus {\n  box-shadow: 0 0 0 0.25rem rgba(52, 152, 219, 0.5);\n}\n\n.btn-outline-info:disabled, .btn-outline-info.disabled {\n  color: #3498db;\n  background-color: transparent;\n}\n\n.btn-outline-warning {\n  color: #f39c12;\n  border-color: #f39c12;\n}\n\n.btn-outline-warning:hover {\n  color: #fff;\n  background-color: #f39c12;\n  border-color: #f39c12;\n}\n\n.btn-check:focus + .btn-outline-warning, .btn-outline-warning:focus {\n  box-shadow: 0 0 0 0.25rem rgba(243, 156, 18, 0.5);\n}\n\n.btn-check:checked + .btn-outline-warning,\n.btn-check:active + .btn-outline-warning, .btn-outline-warning:active, .btn-outline-warning.active, .btn-outline-warning.dropdown-toggle.show {\n  color: #fff;\n  background-color: #f39c12;\n  border-color: #f39c12;\n}\n\n.btn-check:checked + .btn-outline-warning:focus,\n.btn-check:active + .btn-outline-warning:focus, .btn-outline-warning:active:focus, .btn-outline-warning.active:focus, .btn-outline-warning.dropdown-toggle.show:focus {\n  box-shadow: 0 0 0 0.25rem rgba(243, 156, 18, 0.5);\n}\n\n.btn-outline-warning:disabled, .btn-outline-warning.disabled {\n  color: #f39c12;\n  background-color: transparent;\n}\n\n.btn-outline-danger {\n  color: #e74c3c;\n  border-color: #e74c3c;\n}\n\n.btn-outline-danger:hover {\n  color: #fff;\n  background-color: #e74c3c;\n  border-color: #e74c3c;\n}\n\n.btn-check:focus + .btn-outline-danger, .btn-outline-danger:focus {\n  box-shadow: 0 0 0 0.25rem rgba(231, 76, 60, 0.5);\n}\n\n.btn-check:checked + .btn-outline-danger,\n.btn-check:active + .btn-outline-danger, .btn-outline-danger:active, .btn-outline-danger.active, .btn-outline-danger.dropdown-toggle.show {\n  color: #fff;\n  background-color: #e74c3c;\n  border-color: #e74c3c;\n}\n\n.btn-check:checked + .btn-outline-danger:focus,\n.btn-check:active + .btn-outline-danger:focus, .btn-outline-danger:active:focus, .btn-outline-danger.active:focus, .btn-outline-danger.dropdown-toggle.show:focus {\n  box-shadow: 0 0 0 0.25rem rgba(231, 76, 60, 0.5);\n}\n\n.btn-outline-danger:disabled, .btn-outline-danger.disabled {\n  color: #e74c3c;\n  background-color: transparent;\n}\n\n.btn-outline-light {\n  color: #adb5bd;\n  border-color: #adb5bd;\n}\n\n.btn-outline-light:hover {\n  color: #fff;\n  background-color: #adb5bd;\n  border-color: #adb5bd;\n}\n\n.btn-check:focus + .btn-outline-light, .btn-outline-light:focus {\n  box-shadow: 0 0 0 0.25rem rgba(173, 181, 189, 0.5);\n}\n\n.btn-check:checked + .btn-outline-light,\n.btn-check:active + .btn-outline-light, .btn-outline-light:active, .btn-outline-light.active, .btn-outline-light.dropdown-toggle.show {\n  color: #fff;\n  background-color: #adb5bd;\n  border-color: #adb5bd;\n}\n\n.btn-check:checked + .btn-outline-light:focus,\n.btn-check:active + .btn-outline-light:focus, .btn-outline-light:active:focus, .btn-outline-light.active:focus, .btn-outline-light.dropdown-toggle.show:focus {\n  box-shadow: 0 0 0 0.25rem rgba(173, 181, 189, 0.5);\n}\n\n.btn-outline-light:disabled, .btn-outline-light.disabled {\n  color: #adb5bd;\n  background-color: transparent;\n}\n\n.btn-outline-dark {\n  color: #303030;\n  border-color: #303030;\n}\n\n.btn-outline-dark:hover {\n  color: #fff;\n  background-color: #303030;\n  border-color: #303030;\n}\n\n.btn-check:focus + .btn-outline-dark, .btn-outline-dark:focus {\n  box-shadow: 0 0 0 0.25rem rgba(48, 48, 48, 0.5);\n}\n\n.btn-check:checked + .btn-outline-dark,\n.btn-check:active + .btn-outline-dark, .btn-outline-dark:active, .btn-outline-dark.active, .btn-outline-dark.dropdown-toggle.show {\n  color: #fff;\n  background-color: #303030;\n  border-color: #303030;\n}\n\n.btn-check:checked + .btn-outline-dark:focus,\n.btn-check:active + .btn-outline-dark:focus, .btn-outline-dark:active:focus, .btn-outline-dark.active:focus, .btn-outline-dark.dropdown-toggle.show:focus {\n  box-shadow: 0 0 0 0.25rem rgba(48, 48, 48, 0.5);\n}\n\n.btn-outline-dark:disabled, .btn-outline-dark.disabled {\n  color: #303030;\n  background-color: transparent;\n}\n\n.btn-link {\n  font-weight: 400;\n  color: #00bc8c;\n  text-decoration: underline;\n}\n\n.btn-link:hover {\n  color: #009670;\n}\n\n.btn-link:disabled, .btn-link.disabled {\n  color: #888;\n}\n\n.btn-lg, .btn-group-lg > .btn {\n  padding: 0.5rem 1rem;\n  font-size: 1.25rem;\n  border-radius: 0.3rem;\n}\n\n.btn-sm, .btn-group-sm > .btn {\n  padding: 0.25rem 0.5rem;\n  font-size: 0.875rem;\n  border-radius: 0.2rem;\n}\n\n.fade {\n  transition: opacity 0.15s linear;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .fade {\n    transition: none;\n  }\n}\n\n.fade:not(.show) {\n  opacity: 0;\n}\n\n.collapse:not(.show) {\n  display: none;\n}\n\n.collapsing {\n  height: 0;\n  overflow: hidden;\n  transition: height 0.35s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .collapsing {\n    transition: none;\n  }\n}\n\n.collapsing.collapse-horizontal {\n  width: 0;\n  height: auto;\n  transition: width 0.35s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .collapsing.collapse-horizontal {\n    transition: none;\n  }\n}\n\n.dropup,\n.dropend,\n.dropdown,\n.dropstart {\n  position: relative;\n}\n\n.dropdown-toggle {\n  white-space: nowrap;\n}\n\n.dropdown-toggle::after {\n  display: inline-block;\n  margin-left: 0.255em;\n  vertical-align: 0.255em;\n  content: \"\";\n  border-top: 0.3em solid;\n  border-right: 0.3em solid transparent;\n  border-bottom: 0;\n  border-left: 0.3em solid transparent;\n}\n\n.dropdown-toggle:empty::after {\n  margin-left: 0;\n}\n\n.dropdown-menu {\n  position: absolute;\n  z-index: 1000;\n  display: none;\n  min-width: 10rem;\n  padding: 0.5rem 0;\n  margin: 0;\n  font-size: 1rem;\n  color: #fff;\n  text-align: left;\n  list-style: none;\n  background-color: #222;\n  background-clip: padding-box;\n  border: 1px solid #444;\n  border-radius: 0.25rem;\n}\n\n.dropdown-menu[data-bs-popper] {\n  top: 100%;\n  left: 0;\n  margin-top: 0.125rem;\n}\n\n.dropdown-menu-start {\n  --bs-position: start;\n}\n\n.dropdown-menu-start[data-bs-popper] {\n  right: auto;\n  left: 0;\n}\n\n.dropdown-menu-end {\n  --bs-position: end;\n}\n\n.dropdown-menu-end[data-bs-popper] {\n  right: 0;\n  left: auto;\n}\n\n@media (min-width: 576px) {\n  .dropdown-menu-sm-start {\n    --bs-position: start;\n  }\n  .dropdown-menu-sm-start[data-bs-popper] {\n    right: auto;\n    left: 0;\n  }\n  .dropdown-menu-sm-end {\n    --bs-position: end;\n  }\n  .dropdown-menu-sm-end[data-bs-popper] {\n    right: 0;\n    left: auto;\n  }\n}\n\n@media (min-width: 768px) {\n  .dropdown-menu-md-start {\n    --bs-position: start;\n  }\n  .dropdown-menu-md-start[data-bs-popper] {\n    right: auto;\n    left: 0;\n  }\n  .dropdown-menu-md-end {\n    --bs-position: end;\n  }\n  .dropdown-menu-md-end[data-bs-popper] {\n    right: 0;\n    left: auto;\n  }\n}\n\n@media (min-width: 992px) {\n  .dropdown-menu-lg-start {\n    --bs-position: start;\n  }\n  .dropdown-menu-lg-start[data-bs-popper] {\n    right: auto;\n    left: 0;\n  }\n  .dropdown-menu-lg-end {\n    --bs-position: end;\n  }\n  .dropdown-menu-lg-end[data-bs-popper] {\n    right: 0;\n    left: auto;\n  }\n}\n\n@media (min-width: 1200px) {\n  .dropdown-menu-xl-start {\n    --bs-position: start;\n  }\n  .dropdown-menu-xl-start[data-bs-popper] {\n    right: auto;\n    left: 0;\n  }\n  .dropdown-menu-xl-end {\n    --bs-position: end;\n  }\n  .dropdown-menu-xl-end[data-bs-popper] {\n    right: 0;\n    left: auto;\n  }\n}\n\n@media (min-width: 1400px) {\n  .dropdown-menu-xxl-start {\n    --bs-position: start;\n  }\n  .dropdown-menu-xxl-start[data-bs-popper] {\n    right: auto;\n    left: 0;\n  }\n  .dropdown-menu-xxl-end {\n    --bs-position: end;\n  }\n  .dropdown-menu-xxl-end[data-bs-popper] {\n    right: 0;\n    left: auto;\n  }\n}\n\n.dropup .dropdown-menu[data-bs-popper] {\n  top: auto;\n  bottom: 100%;\n  margin-top: 0;\n  margin-bottom: 0.125rem;\n}\n\n.dropup .dropdown-toggle::after {\n  display: inline-block;\n  margin-left: 0.255em;\n  vertical-align: 0.255em;\n  content: \"\";\n  border-top: 0;\n  border-right: 0.3em solid transparent;\n  border-bottom: 0.3em solid;\n  border-left: 0.3em solid transparent;\n}\n\n.dropup .dropdown-toggle:empty::after {\n  margin-left: 0;\n}\n\n.dropend .dropdown-menu[data-bs-popper] {\n  top: 0;\n  right: auto;\n  left: 100%;\n  margin-top: 0;\n  margin-left: 0.125rem;\n}\n\n.dropend .dropdown-toggle::after {\n  display: inline-block;\n  margin-left: 0.255em;\n  vertical-align: 0.255em;\n  content: \"\";\n  border-top: 0.3em solid transparent;\n  border-right: 0;\n  border-bottom: 0.3em solid transparent;\n  border-left: 0.3em solid;\n}\n\n.dropend .dropdown-toggle:empty::after {\n  margin-left: 0;\n}\n\n.dropend .dropdown-toggle::after {\n  vertical-align: 0;\n}\n\n.dropstart .dropdown-menu[data-bs-popper] {\n  top: 0;\n  right: 100%;\n  left: auto;\n  margin-top: 0;\n  margin-right: 0.125rem;\n}\n\n.dropstart .dropdown-toggle::after {\n  display: inline-block;\n  margin-left: 0.255em;\n  vertical-align: 0.255em;\n  content: \"\";\n}\n\n.dropstart .dropdown-toggle::after {\n  display: none;\n}\n\n.dropstart .dropdown-toggle::before {\n  display: inline-block;\n  margin-right: 0.255em;\n  vertical-align: 0.255em;\n  content: \"\";\n  border-top: 0.3em solid transparent;\n  border-right: 0.3em solid;\n  border-bottom: 0.3em solid transparent;\n}\n\n.dropstart .dropdown-toggle:empty::after {\n  margin-left: 0;\n}\n\n.dropstart .dropdown-toggle::before {\n  vertical-align: 0;\n}\n\n.dropdown-divider {\n  height: 0;\n  margin: 0.5rem 0;\n  overflow: hidden;\n  border-top: 1px solid #444;\n}\n\n.dropdown-item {\n  display: block;\n  width: 100%;\n  padding: 0.25rem 1rem;\n  clear: both;\n  font-weight: 400;\n  color: #fff;\n  text-align: inherit;\n  text-decoration: none;\n  white-space: nowrap;\n  background-color: transparent;\n  border: 0;\n}\n\n.dropdown-item:hover, .dropdown-item:focus {\n  color: #fff;\n  background-color: #375a7f;\n}\n\n.dropdown-item.active, .dropdown-item:active {\n  color: #fff;\n  text-decoration: none;\n  background-color: #375a7f;\n}\n\n.dropdown-item.disabled, .dropdown-item:disabled {\n  color: #adb5bd;\n  pointer-events: none;\n  background-color: transparent;\n}\n\n.dropdown-menu.show {\n  display: block;\n}\n\n.dropdown-header {\n  display: block;\n  padding: 0.5rem 1rem;\n  margin-bottom: 0;\n  font-size: 0.875rem;\n  color: #888;\n  white-space: nowrap;\n}\n\n.dropdown-item-text {\n  display: block;\n  padding: 0.25rem 1rem;\n  color: #fff;\n}\n\n.dropdown-menu-dark {\n  color: #dee2e6;\n  background-color: #303030;\n  border-color: #444;\n}\n\n.dropdown-menu-dark .dropdown-item {\n  color: #dee2e6;\n}\n\n.dropdown-menu-dark .dropdown-item:hover, .dropdown-menu-dark .dropdown-item:focus {\n  color: #fff;\n  background-color: rgba(255, 255, 255, 0.15);\n}\n\n.dropdown-menu-dark .dropdown-item.active, .dropdown-menu-dark .dropdown-item:active {\n  color: #fff;\n  background-color: #375a7f;\n}\n\n.dropdown-menu-dark .dropdown-item.disabled, .dropdown-menu-dark .dropdown-item:disabled {\n  color: #adb5bd;\n}\n\n.dropdown-menu-dark .dropdown-divider {\n  border-color: #444;\n}\n\n.dropdown-menu-dark .dropdown-item-text {\n  color: #dee2e6;\n}\n\n.dropdown-menu-dark .dropdown-header {\n  color: #adb5bd;\n}\n\n.btn-group,\n.btn-group-vertical {\n  position: relative;\n  display: -ms-inline-flexbox;\n  display: inline-flex;\n  vertical-align: middle;\n}\n\n.btn-group > .btn,\n.btn-group-vertical > .btn {\n  position: relative;\n  -ms-flex: 1 1 auto;\n  flex: 1 1 auto;\n}\n\n.btn-group > .btn-check:checked + .btn,\n.btn-group > .btn-check:focus + .btn,\n.btn-group > .btn:hover,\n.btn-group > .btn:focus,\n.btn-group > .btn:active,\n.btn-group > .btn.active,\n.btn-group-vertical > .btn-check:checked + .btn,\n.btn-group-vertical > .btn-check:focus + .btn,\n.btn-group-vertical > .btn:hover,\n.btn-group-vertical > .btn:focus,\n.btn-group-vertical > .btn:active,\n.btn-group-vertical > .btn.active {\n  z-index: 1;\n}\n\n.btn-toolbar {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n  flex-wrap: wrap;\n  -ms-flex-pack: start;\n  justify-content: flex-start;\n}\n\n.btn-toolbar .input-group {\n  width: auto;\n}\n\n.btn-group > .btn:not(:first-child),\n.btn-group > .btn-group:not(:first-child) {\n  margin-left: -1px;\n}\n\n.btn-group > .btn:not(:last-child):not(.dropdown-toggle),\n.btn-group > .btn-group:not(:last-child) > .btn {\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n}\n\n.btn-group > .btn:nth-child(n + 3),\n.btn-group > :not(.btn-check) + .btn,\n.btn-group > .btn-group:not(:first-child) > .btn {\n  border-top-left-radius: 0;\n  border-bottom-left-radius: 0;\n}\n\n.dropdown-toggle-split {\n  padding-right: 0.5625rem;\n  padding-left: 0.5625rem;\n}\n\n.dropdown-toggle-split::after,\n.dropup .dropdown-toggle-split::after,\n.dropend .dropdown-toggle-split::after {\n  margin-left: 0;\n}\n\n.dropstart .dropdown-toggle-split::before {\n  margin-right: 0;\n}\n\n.btn-sm + .dropdown-toggle-split, .btn-group-sm > .btn + .dropdown-toggle-split {\n  padding-right: 0.375rem;\n  padding-left: 0.375rem;\n}\n\n.btn-lg + .dropdown-toggle-split, .btn-group-lg > .btn + .dropdown-toggle-split {\n  padding-right: 0.75rem;\n  padding-left: 0.75rem;\n}\n\n.btn-group-vertical {\n  -ms-flex-direction: column;\n  flex-direction: column;\n  -ms-flex-align: start;\n  align-items: flex-start;\n  -ms-flex-pack: center;\n  justify-content: center;\n}\n\n.btn-group-vertical > .btn,\n.btn-group-vertical > .btn-group {\n  width: 100%;\n}\n\n.btn-group-vertical > .btn:not(:first-child),\n.btn-group-vertical > .btn-group:not(:first-child) {\n  margin-top: -1px;\n}\n\n.btn-group-vertical > .btn:not(:last-child):not(.dropdown-toggle),\n.btn-group-vertical > .btn-group:not(:last-child) > .btn {\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 0;\n}\n\n.btn-group-vertical > .btn ~ .btn,\n.btn-group-vertical > .btn-group:not(:first-child) > .btn {\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n}\n\n.nav {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n  flex-wrap: wrap;\n  padding-left: 0;\n  margin-bottom: 0;\n  list-style: none;\n}\n\n.nav-link {\n  display: block;\n  padding: 0.5rem 2rem;\n  color: #00bc8c;\n  text-decoration: none;\n  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .nav-link {\n    transition: none;\n  }\n}\n\n.nav-link:hover, .nav-link:focus {\n  color: #009670;\n}\n\n.nav-link.disabled {\n  color: #adb5bd;\n  pointer-events: none;\n  cursor: default;\n}\n\n.nav-tabs {\n  border-bottom: 1px solid #444;\n}\n\n.nav-tabs .nav-link {\n  margin-bottom: -1px;\n  background: none;\n  border: 1px solid transparent;\n  border-top-left-radius: 0.25rem;\n  border-top-right-radius: 0.25rem;\n}\n\n.nav-tabs .nav-link:hover, .nav-tabs .nav-link:focus {\n  border-color: #444 #444 transparent;\n  isolation: isolate;\n}\n\n.nav-tabs .nav-link.disabled {\n  color: #adb5bd;\n  background-color: transparent;\n  border-color: transparent;\n}\n\n.nav-tabs .nav-link.active,\n.nav-tabs .nav-item.show .nav-link {\n  color: #fff;\n  background-color: #222;\n  border-color: #444 #444 transparent;\n}\n\n.nav-tabs .dropdown-menu {\n  margin-top: -1px;\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n}\n\n.nav-pills .nav-link {\n  background: none;\n  border: 0;\n  border-radius: 0.25rem;\n}\n\n.nav-pills .nav-link.active,\n.nav-pills .show > .nav-link {\n  color: #fff;\n  background-color: #375a7f;\n}\n\n.nav-fill > .nav-link,\n.nav-fill .nav-item {\n  -ms-flex: 1 1 auto;\n  flex: 1 1 auto;\n  text-align: center;\n}\n\n.nav-justified > .nav-link,\n.nav-justified .nav-item {\n  -ms-flex-preferred-size: 0;\n  flex-basis: 0;\n  -ms-flex-positive: 1;\n  flex-grow: 1;\n  text-align: center;\n}\n\n.nav-fill .nav-item .nav-link,\n.nav-justified .nav-item .nav-link {\n  width: 100%;\n}\n\n.tab-content > .tab-pane {\n  display: none;\n}\n\n.tab-content > .active {\n  display: block;\n}\n\n.navbar {\n  position: relative;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n  flex-wrap: wrap;\n  -ms-flex-align: center;\n  align-items: center;\n  -ms-flex-pack: justify;\n  justify-content: space-between;\n  padding-top: 1rem;\n  padding-bottom: 1rem;\n}\n\n.navbar > .container,\n.navbar > .container-fluid, .navbar > .container-sm, .navbar > .container-md, .navbar > .container-lg, .navbar > .container-xl, .navbar > .container-xxl {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: inherit;\n  flex-wrap: inherit;\n  -ms-flex-align: center;\n  align-items: center;\n  -ms-flex-pack: justify;\n  justify-content: space-between;\n}\n\n.navbar-brand {\n  padding-top: 0.3125rem;\n  padding-bottom: 0.3125rem;\n  margin-right: 1rem;\n  font-size: 1.25rem;\n  text-decoration: none;\n  white-space: nowrap;\n}\n\n.navbar-nav {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  padding-left: 0;\n  margin-bottom: 0;\n  list-style: none;\n}\n\n.navbar-nav .nav-link {\n  padding-right: 0;\n  padding-left: 0;\n}\n\n.navbar-nav .dropdown-menu {\n  position: static;\n}\n\n.navbar-text {\n  padding-top: 0.5rem;\n  padding-bottom: 0.5rem;\n}\n\n.navbar-collapse {\n  -ms-flex-preferred-size: 100%;\n  flex-basis: 100%;\n  -ms-flex-positive: 1;\n  flex-grow: 1;\n  -ms-flex-align: center;\n  align-items: center;\n}\n\n.navbar-toggler {\n  padding: 0.25rem 0.75rem;\n  font-size: 1.25rem;\n  line-height: 1;\n  background-color: transparent;\n  border: 1px solid transparent;\n  border-radius: 0.25rem;\n  transition: box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .navbar-toggler {\n    transition: none;\n  }\n}\n\n.navbar-toggler:hover {\n  text-decoration: none;\n}\n\n.navbar-toggler:focus {\n  text-decoration: none;\n  outline: 0;\n  box-shadow: 0 0 0 0.25rem;\n}\n\n.navbar-toggler-icon {\n  display: inline-block;\n  width: 1.5em;\n  height: 1.5em;\n  vertical-align: middle;\n  background-repeat: no-repeat;\n  background-position: center;\n  background-size: 100%;\n}\n\n.navbar-nav-scroll {\n  max-height: var(--bs-scroll-height, 75vh);\n  overflow-y: auto;\n}\n\n@media (min-width: 576px) {\n  .navbar-expand-sm {\n    -ms-flex-wrap: nowrap;\n    flex-wrap: nowrap;\n    -ms-flex-pack: start;\n    justify-content: flex-start;\n  }\n  .navbar-expand-sm .navbar-nav {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .navbar-expand-sm .navbar-nav .dropdown-menu {\n    position: absolute;\n  }\n  .navbar-expand-sm .navbar-nav .nav-link {\n    padding-right: 0.5rem;\n    padding-left: 0.5rem;\n  }\n  .navbar-expand-sm .navbar-nav-scroll {\n    overflow: visible;\n  }\n  .navbar-expand-sm .navbar-collapse {\n    display: -ms-flexbox !important;\n    display: flex !important;\n    -ms-flex-preferred-size: auto;\n    flex-basis: auto;\n  }\n  .navbar-expand-sm .navbar-toggler {\n    display: none;\n  }\n  .navbar-expand-sm .offcanvas-header {\n    display: none;\n  }\n  .navbar-expand-sm .offcanvas {\n    position: inherit;\n    bottom: 0;\n    z-index: 1000;\n    -ms-flex-positive: 1;\n    flex-grow: 1;\n    visibility: visible !important;\n    background-color: transparent;\n    border-right: 0;\n    border-left: 0;\n    transition: none;\n    -webkit-transform: none;\n    transform: none;\n  }\n  .navbar-expand-sm .offcanvas-top,\n  .navbar-expand-sm .offcanvas-bottom {\n    height: auto;\n    border-top: 0;\n    border-bottom: 0;\n  }\n  .navbar-expand-sm .offcanvas-body {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-positive: 0;\n    flex-grow: 0;\n    padding: 0;\n    overflow-y: visible;\n  }\n}\n\n@media (min-width: 768px) {\n  .navbar-expand-md {\n    -ms-flex-wrap: nowrap;\n    flex-wrap: nowrap;\n    -ms-flex-pack: start;\n    justify-content: flex-start;\n  }\n  .navbar-expand-md .navbar-nav {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .navbar-expand-md .navbar-nav .dropdown-menu {\n    position: absolute;\n  }\n  .navbar-expand-md .navbar-nav .nav-link {\n    padding-right: 0.5rem;\n    padding-left: 0.5rem;\n  }\n  .navbar-expand-md .navbar-nav-scroll {\n    overflow: visible;\n  }\n  .navbar-expand-md .navbar-collapse {\n    display: -ms-flexbox !important;\n    display: flex !important;\n    -ms-flex-preferred-size: auto;\n    flex-basis: auto;\n  }\n  .navbar-expand-md .navbar-toggler {\n    display: none;\n  }\n  .navbar-expand-md .offcanvas-header {\n    display: none;\n  }\n  .navbar-expand-md .offcanvas {\n    position: inherit;\n    bottom: 0;\n    z-index: 1000;\n    -ms-flex-positive: 1;\n    flex-grow: 1;\n    visibility: visible !important;\n    background-color: transparent;\n    border-right: 0;\n    border-left: 0;\n    transition: none;\n    -webkit-transform: none;\n    transform: none;\n  }\n  .navbar-expand-md .offcanvas-top,\n  .navbar-expand-md .offcanvas-bottom {\n    height: auto;\n    border-top: 0;\n    border-bottom: 0;\n  }\n  .navbar-expand-md .offcanvas-body {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-positive: 0;\n    flex-grow: 0;\n    padding: 0;\n    overflow-y: visible;\n  }\n}\n\n@media (min-width: 992px) {\n  .navbar-expand-lg {\n    -ms-flex-wrap: nowrap;\n    flex-wrap: nowrap;\n    -ms-flex-pack: start;\n    justify-content: flex-start;\n  }\n  .navbar-expand-lg .navbar-nav {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .navbar-expand-lg .navbar-nav .dropdown-menu {\n    position: absolute;\n  }\n  .navbar-expand-lg .navbar-nav .nav-link {\n    padding-right: 0.5rem;\n    padding-left: 0.5rem;\n  }\n  .navbar-expand-lg .navbar-nav-scroll {\n    overflow: visible;\n  }\n  .navbar-expand-lg .navbar-collapse {\n    display: -ms-flexbox !important;\n    display: flex !important;\n    -ms-flex-preferred-size: auto;\n    flex-basis: auto;\n  }\n  .navbar-expand-lg .navbar-toggler {\n    display: none;\n  }\n  .navbar-expand-lg .offcanvas-header {\n    display: none;\n  }\n  .navbar-expand-lg .offcanvas {\n    position: inherit;\n    bottom: 0;\n    z-index: 1000;\n    -ms-flex-positive: 1;\n    flex-grow: 1;\n    visibility: visible !important;\n    background-color: transparent;\n    border-right: 0;\n    border-left: 0;\n    transition: none;\n    -webkit-transform: none;\n    transform: none;\n  }\n  .navbar-expand-lg .offcanvas-top,\n  .navbar-expand-lg .offcanvas-bottom {\n    height: auto;\n    border-top: 0;\n    border-bottom: 0;\n  }\n  .navbar-expand-lg .offcanvas-body {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-positive: 0;\n    flex-grow: 0;\n    padding: 0;\n    overflow-y: visible;\n  }\n}\n\n@media (min-width: 1200px) {\n  .navbar-expand-xl {\n    -ms-flex-wrap: nowrap;\n    flex-wrap: nowrap;\n    -ms-flex-pack: start;\n    justify-content: flex-start;\n  }\n  .navbar-expand-xl .navbar-nav {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .navbar-expand-xl .navbar-nav .dropdown-menu {\n    position: absolute;\n  }\n  .navbar-expand-xl .navbar-nav .nav-link {\n    padding-right: 0.5rem;\n    padding-left: 0.5rem;\n  }\n  .navbar-expand-xl .navbar-nav-scroll {\n    overflow: visible;\n  }\n  .navbar-expand-xl .navbar-collapse {\n    display: -ms-flexbox !important;\n    display: flex !important;\n    -ms-flex-preferred-size: auto;\n    flex-basis: auto;\n  }\n  .navbar-expand-xl .navbar-toggler {\n    display: none;\n  }\n  .navbar-expand-xl .offcanvas-header {\n    display: none;\n  }\n  .navbar-expand-xl .offcanvas {\n    position: inherit;\n    bottom: 0;\n    z-index: 1000;\n    -ms-flex-positive: 1;\n    flex-grow: 1;\n    visibility: visible !important;\n    background-color: transparent;\n    border-right: 0;\n    border-left: 0;\n    transition: none;\n    -webkit-transform: none;\n    transform: none;\n  }\n  .navbar-expand-xl .offcanvas-top,\n  .navbar-expand-xl .offcanvas-bottom {\n    height: auto;\n    border-top: 0;\n    border-bottom: 0;\n  }\n  .navbar-expand-xl .offcanvas-body {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-positive: 0;\n    flex-grow: 0;\n    padding: 0;\n    overflow-y: visible;\n  }\n}\n\n@media (min-width: 1400px) {\n  .navbar-expand-xxl {\n    -ms-flex-wrap: nowrap;\n    flex-wrap: nowrap;\n    -ms-flex-pack: start;\n    justify-content: flex-start;\n  }\n  .navbar-expand-xxl .navbar-nav {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .navbar-expand-xxl .navbar-nav .dropdown-menu {\n    position: absolute;\n  }\n  .navbar-expand-xxl .navbar-nav .nav-link {\n    padding-right: 0.5rem;\n    padding-left: 0.5rem;\n  }\n  .navbar-expand-xxl .navbar-nav-scroll {\n    overflow: visible;\n  }\n  .navbar-expand-xxl .navbar-collapse {\n    display: -ms-flexbox !important;\n    display: flex !important;\n    -ms-flex-preferred-size: auto;\n    flex-basis: auto;\n  }\n  .navbar-expand-xxl .navbar-toggler {\n    display: none;\n  }\n  .navbar-expand-xxl .offcanvas-header {\n    display: none;\n  }\n  .navbar-expand-xxl .offcanvas {\n    position: inherit;\n    bottom: 0;\n    z-index: 1000;\n    -ms-flex-positive: 1;\n    flex-grow: 1;\n    visibility: visible !important;\n    background-color: transparent;\n    border-right: 0;\n    border-left: 0;\n    transition: none;\n    -webkit-transform: none;\n    transform: none;\n  }\n  .navbar-expand-xxl .offcanvas-top,\n  .navbar-expand-xxl .offcanvas-bottom {\n    height: auto;\n    border-top: 0;\n    border-bottom: 0;\n  }\n  .navbar-expand-xxl .offcanvas-body {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-positive: 0;\n    flex-grow: 0;\n    padding: 0;\n    overflow-y: visible;\n  }\n}\n\n.navbar-expand {\n  -ms-flex-wrap: nowrap;\n  flex-wrap: nowrap;\n  -ms-flex-pack: start;\n  justify-content: flex-start;\n}\n\n.navbar-expand .navbar-nav {\n  -ms-flex-direction: row;\n  flex-direction: row;\n}\n\n.navbar-expand .navbar-nav .dropdown-menu {\n  position: absolute;\n}\n\n.navbar-expand .navbar-nav .nav-link {\n  padding-right: 0.5rem;\n  padding-left: 0.5rem;\n}\n\n.navbar-expand .navbar-nav-scroll {\n  overflow: visible;\n}\n\n.navbar-expand .navbar-collapse {\n  display: -ms-flexbox !important;\n  display: flex !important;\n  -ms-flex-preferred-size: auto;\n  flex-basis: auto;\n}\n\n.navbar-expand .navbar-toggler {\n  display: none;\n}\n\n.navbar-expand .offcanvas-header {\n  display: none;\n}\n\n.navbar-expand .offcanvas {\n  position: inherit;\n  bottom: 0;\n  z-index: 1000;\n  -ms-flex-positive: 1;\n  flex-grow: 1;\n  visibility: visible !important;\n  background-color: transparent;\n  border-right: 0;\n  border-left: 0;\n  transition: none;\n  -webkit-transform: none;\n  transform: none;\n}\n\n.navbar-expand .offcanvas-top,\n.navbar-expand .offcanvas-bottom {\n  height: auto;\n  border-top: 0;\n  border-bottom: 0;\n}\n\n.navbar-expand .offcanvas-body {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-positive: 0;\n  flex-grow: 0;\n  padding: 0;\n  overflow-y: visible;\n}\n\n.navbar-light .navbar-brand {\n  color: #222;\n}\n\n.navbar-light .navbar-brand:hover, .navbar-light .navbar-brand:focus {\n  color: #222;\n}\n\n.navbar-light .navbar-nav .nav-link {\n  color: rgba(34, 34, 34, 0.7);\n}\n\n.navbar-light .navbar-nav .nav-link:hover, .navbar-light .navbar-nav .nav-link:focus {\n  color: #222;\n}\n\n.navbar-light .navbar-nav .nav-link.disabled {\n  color: rgba(0, 0, 0, 0.3);\n}\n\n.navbar-light .navbar-nav .show > .nav-link,\n.navbar-light .navbar-nav .nav-link.active {\n  color: #222;\n}\n\n.navbar-light .navbar-toggler {\n  color: rgba(34, 34, 34, 0.7);\n  border-color: rgba(34, 34, 34, 0.1);\n}\n\n.navbar-light .navbar-toggler-icon {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%2834, 34, 34, 0.7%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e\");\n}\n\n.navbar-light .navbar-text {\n  color: rgba(34, 34, 34, 0.7);\n}\n\n.navbar-light .navbar-text a,\n.navbar-light .navbar-text a:hover,\n.navbar-light .navbar-text a:focus {\n  color: #222;\n}\n\n.navbar-dark .navbar-brand {\n  color: #fff;\n}\n\n.navbar-dark .navbar-brand:hover, .navbar-dark .navbar-brand:focus {\n  color: #fff;\n}\n\n.navbar-dark .navbar-nav .nav-link {\n  color: rgba(255, 255, 255, 0.6);\n}\n\n.navbar-dark .navbar-nav .nav-link:hover, .navbar-dark .navbar-nav .nav-link:focus {\n  color: #fff;\n}\n\n.navbar-dark .navbar-nav .nav-link.disabled {\n  color: rgba(255, 255, 255, 0.25);\n}\n\n.navbar-dark .navbar-nav .show > .nav-link,\n.navbar-dark .navbar-nav .nav-link.active {\n  color: #fff;\n}\n\n.navbar-dark .navbar-toggler {\n  color: rgba(255, 255, 255, 0.6);\n  border-color: rgba(255, 255, 255, 0.1);\n}\n\n.navbar-dark .navbar-toggler-icon {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.6%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e\");\n}\n\n.navbar-dark .navbar-text {\n  color: rgba(255, 255, 255, 0.6);\n}\n\n.navbar-dark .navbar-text a,\n.navbar-dark .navbar-text a:hover,\n.navbar-dark .navbar-text a:focus {\n  color: #fff;\n}\n\n.card {\n  position: relative;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  min-width: 0;\n  word-wrap: break-word;\n  background-color: #303030;\n  background-clip: border-box;\n  border: 1px solid rgba(0, 0, 0, 0.125);\n  border-radius: 0.25rem;\n}\n\n.card > hr {\n  margin-right: 0;\n  margin-left: 0;\n}\n\n.card > .list-group {\n  border-top: inherit;\n  border-bottom: inherit;\n}\n\n.card > .list-group:first-child {\n  border-top-width: 0;\n  border-top-left-radius: calc(0.25rem - 1px);\n  border-top-right-radius: calc(0.25rem - 1px);\n}\n\n.card > .list-group:last-child {\n  border-bottom-width: 0;\n  border-bottom-right-radius: calc(0.25rem - 1px);\n  border-bottom-left-radius: calc(0.25rem - 1px);\n}\n\n.card > .card-header + .list-group,\n.card > .list-group + .card-footer {\n  border-top: 0;\n}\n\n.card-body {\n  -ms-flex: 1 1 auto;\n  flex: 1 1 auto;\n  padding: 1rem 1rem;\n}\n\n.card-title {\n  margin-bottom: 0.5rem;\n}\n\n.card-subtitle {\n  margin-top: -0.25rem;\n  margin-bottom: 0;\n}\n\n.card-text:last-child {\n  margin-bottom: 0;\n}\n\n.card-link + .card-link {\n  margin-left: 1rem;\n}\n\n.card-header {\n  padding: 0.5rem 1rem;\n  margin-bottom: 0;\n  background-color: #444;\n  border-bottom: 1px solid rgba(0, 0, 0, 0.125);\n}\n\n.card-header:first-child {\n  border-radius: calc(0.25rem - 1px) calc(0.25rem - 1px) 0 0;\n}\n\n.card-footer {\n  padding: 0.5rem 1rem;\n  background-color: #444;\n  border-top: 1px solid rgba(0, 0, 0, 0.125);\n}\n\n.card-footer:last-child {\n  border-radius: 0 0 calc(0.25rem - 1px) calc(0.25rem - 1px);\n}\n\n.card-header-tabs {\n  margin-right: -0.5rem;\n  margin-bottom: -0.5rem;\n  margin-left: -0.5rem;\n  border-bottom: 0;\n}\n\n.card-header-tabs .nav-link.active {\n  background-color: #303030;\n  border-bottom-color: #303030;\n}\n\n.card-header-pills {\n  margin-right: -0.5rem;\n  margin-left: -0.5rem;\n}\n\n.card-img-overlay {\n  position: absolute;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  padding: 1rem;\n  border-radius: calc(0.25rem - 1px);\n}\n\n.card-img,\n.card-img-top,\n.card-img-bottom {\n  width: 100%;\n}\n\n.card-img,\n.card-img-top {\n  border-top-left-radius: calc(0.25rem - 1px);\n  border-top-right-radius: calc(0.25rem - 1px);\n}\n\n.card-img,\n.card-img-bottom {\n  border-bottom-right-radius: calc(0.25rem - 1px);\n  border-bottom-left-radius: calc(0.25rem - 1px);\n}\n\n.card-group > .card {\n  margin-bottom: 0.75rem;\n}\n\n@media (min-width: 576px) {\n  .card-group {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-flow: row wrap;\n    flex-flow: row wrap;\n  }\n  .card-group > .card {\n    -ms-flex: 1 0 0%;\n    flex: 1 0 0%;\n    margin-bottom: 0;\n  }\n  .card-group > .card + .card {\n    margin-left: 0;\n    border-left: 0;\n  }\n  .card-group > .card:not(:last-child) {\n    border-top-right-radius: 0;\n    border-bottom-right-radius: 0;\n  }\n  .card-group > .card:not(:last-child) .card-img-top,\n  .card-group > .card:not(:last-child) .card-header {\n    border-top-right-radius: 0;\n  }\n  .card-group > .card:not(:last-child) .card-img-bottom,\n  .card-group > .card:not(:last-child) .card-footer {\n    border-bottom-right-radius: 0;\n  }\n  .card-group > .card:not(:first-child) {\n    border-top-left-radius: 0;\n    border-bottom-left-radius: 0;\n  }\n  .card-group > .card:not(:first-child) .card-img-top,\n  .card-group > .card:not(:first-child) .card-header {\n    border-top-left-radius: 0;\n  }\n  .card-group > .card:not(:first-child) .card-img-bottom,\n  .card-group > .card:not(:first-child) .card-footer {\n    border-bottom-left-radius: 0;\n  }\n}\n\n.accordion-button {\n  position: relative;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-align: center;\n  align-items: center;\n  width: 100%;\n  padding: 1rem 1.25rem;\n  font-size: 1rem;\n  color: #fff;\n  text-align: left;\n  background-color: #222;\n  border: 0;\n  border-radius: 0;\n  overflow-anchor: none;\n  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, border-radius 0.15s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .accordion-button {\n    transition: none;\n  }\n}\n\n.accordion-button:not(.collapsed) {\n  color: #325172;\n  background-color: #ebeff2;\n  box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.125);\n}\n\n.accordion-button:not(.collapsed)::after {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23325172'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e\");\n  -webkit-transform: rotate(-180deg);\n  transform: rotate(-180deg);\n}\n\n.accordion-button::after {\n  -ms-flex-negative: 0;\n  flex-shrink: 0;\n  width: 1.25rem;\n  height: 1.25rem;\n  margin-left: auto;\n  content: \"\";\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e\");\n  background-repeat: no-repeat;\n  background-size: 1.25rem;\n  transition: -webkit-transform 0.2s ease-in-out;\n  transition: transform 0.2s ease-in-out;\n  transition: transform 0.2s ease-in-out, -webkit-transform 0.2s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .accordion-button::after {\n    transition: none;\n  }\n}\n\n.accordion-button:hover {\n  z-index: 2;\n}\n\n.accordion-button:focus {\n  z-index: 3;\n  border-color: #9badbf;\n  outline: 0;\n  box-shadow: 0 0 0 0.25rem rgba(55, 90, 127, 0.25);\n}\n\n.accordion-header {\n  margin-bottom: 0;\n}\n\n.accordion-item {\n  background-color: #222;\n  border: 1px solid rgba(0, 0, 0, 0.125);\n}\n\n.accordion-item:first-of-type {\n  border-top-left-radius: 0.25rem;\n  border-top-right-radius: 0.25rem;\n}\n\n.accordion-item:first-of-type .accordion-button {\n  border-top-left-radius: calc(0.25rem - 1px);\n  border-top-right-radius: calc(0.25rem - 1px);\n}\n\n.accordion-item:not(:first-of-type) {\n  border-top: 0;\n}\n\n.accordion-item:last-of-type {\n  border-bottom-right-radius: 0.25rem;\n  border-bottom-left-radius: 0.25rem;\n}\n\n.accordion-item:last-of-type .accordion-button.collapsed {\n  border-bottom-right-radius: calc(0.25rem - 1px);\n  border-bottom-left-radius: calc(0.25rem - 1px);\n}\n\n.accordion-item:last-of-type .accordion-collapse {\n  border-bottom-right-radius: 0.25rem;\n  border-bottom-left-radius: 0.25rem;\n}\n\n.accordion-body {\n  padding: 1rem 1.25rem;\n}\n\n.accordion-flush .accordion-collapse {\n  border-width: 0;\n}\n\n.accordion-flush .accordion-item {\n  border-right: 0;\n  border-left: 0;\n  border-radius: 0;\n}\n\n.accordion-flush .accordion-item:first-child {\n  border-top: 0;\n}\n\n.accordion-flush .accordion-item:last-child {\n  border-bottom: 0;\n}\n\n.accordion-flush .accordion-item .accordion-button {\n  border-radius: 0;\n}\n\n.breadcrumb {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n  flex-wrap: wrap;\n  padding: 0.375rem 0.75rem;\n  margin-bottom: 1rem;\n  list-style: none;\n  background-color: #444;\n  border-radius: 0.25rem;\n}\n\n.breadcrumb-item + .breadcrumb-item {\n  padding-left: 0.5rem;\n}\n\n.breadcrumb-item + .breadcrumb-item::before {\n  float: left;\n  padding-right: 0.5rem;\n  color: #888;\n  content: var(--bs-breadcrumb-divider, \"/\") /* rtl: var(--bs-breadcrumb-divider, \"/\") */;\n}\n\n.breadcrumb-item.active {\n  color: #888;\n}\n\n.pagination {\n  display: -ms-flexbox;\n  display: flex;\n  padding-left: 0;\n  list-style: none;\n}\n\n.page-link {\n  position: relative;\n  display: block;\n  color: #fff;\n  text-decoration: none;\n  background-color: #00bc8c;\n  border: 0 solid transparent;\n  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .page-link {\n    transition: none;\n  }\n}\n\n.page-link:hover {\n  z-index: 2;\n  color: #fff;\n  background-color: #00efb2;\n  border-color: transparent;\n}\n\n.page-link:focus {\n  z-index: 3;\n  color: #009670;\n  background-color: #ebebeb;\n  outline: 0;\n  box-shadow: 0 0 0 0.25rem rgba(55, 90, 127, 0.25);\n}\n\n.page-item:not(:first-child) .page-link {\n  margin-left: 0;\n}\n\n.page-item.active .page-link {\n  z-index: 3;\n  color: #fff;\n  background-color: #00efb2;\n  border-color: transparent;\n}\n\n.page-item.disabled .page-link {\n  color: #fff;\n  pointer-events: none;\n  background-color: #007053;\n  border-color: transparent;\n}\n\n.page-link {\n  padding: 0.375rem 0.75rem;\n}\n\n.page-item:first-child .page-link {\n  border-top-left-radius: 0.25rem;\n  border-bottom-left-radius: 0.25rem;\n}\n\n.page-item:last-child .page-link {\n  border-top-right-radius: 0.25rem;\n  border-bottom-right-radius: 0.25rem;\n}\n\n.pagination-lg .page-link {\n  padding: 0.75rem 1.5rem;\n  font-size: 1.25rem;\n}\n\n.pagination-lg .page-item:first-child .page-link {\n  border-top-left-radius: 0.3rem;\n  border-bottom-left-radius: 0.3rem;\n}\n\n.pagination-lg .page-item:last-child .page-link {\n  border-top-right-radius: 0.3rem;\n  border-bottom-right-radius: 0.3rem;\n}\n\n.pagination-sm .page-link {\n  padding: 0.25rem 0.5rem;\n  font-size: 0.875rem;\n}\n\n.pagination-sm .page-item:first-child .page-link {\n  border-top-left-radius: 0.2rem;\n  border-bottom-left-radius: 0.2rem;\n}\n\n.pagination-sm .page-item:last-child .page-link {\n  border-top-right-radius: 0.2rem;\n  border-bottom-right-radius: 0.2rem;\n}\n\n.badge {\n  display: inline-block;\n  padding: 0.35em 0.65em;\n  font-size: 0.75em;\n  font-weight: 700;\n  line-height: 1;\n  color: #fff;\n  text-align: center;\n  white-space: nowrap;\n  vertical-align: baseline;\n  border-radius: 0.25rem;\n}\n\n.badge:empty {\n  display: none;\n}\n\n.btn .badge {\n  position: relative;\n  top: -1px;\n}\n\n.alert {\n  position: relative;\n  padding: 1rem 1rem;\n  margin-bottom: 1rem;\n  border: 1px solid transparent;\n  border-radius: 0.25rem;\n}\n\n.alert-heading {\n  color: inherit;\n}\n\n.alert-link {\n  font-weight: 700;\n}\n\n.alert-dismissible {\n  padding-right: 3rem;\n}\n\n.alert-dismissible .btn-close {\n  position: absolute;\n  top: 0;\n  right: 0;\n  z-index: 2;\n  padding: 1.25rem 1rem;\n}\n\n.alert-primary {\n  color: #21364c;\n  background-color: #d7dee5;\n  border-color: #c3ced9;\n}\n\n.alert-primary .alert-link {\n  color: #1a2b3d;\n}\n\n.alert-secondary {\n  color: #292929;\n  background-color: #dadada;\n  border-color: #c7c7c7;\n}\n\n.alert-secondary .alert-link {\n  color: #212121;\n}\n\n.alert-success {\n  color: #007154;\n  background-color: #ccf2e8;\n  border-color: #b3ebdd;\n}\n\n.alert-success .alert-link {\n  color: #005a43;\n}\n\n.alert-info {\n  color: #1f5b83;\n  background-color: #d6eaf8;\n  border-color: #c2e0f4;\n}\n\n.alert-info .alert-link {\n  color: #194969;\n}\n\n.alert-warning {\n  color: #925e0b;\n  background-color: #fdebd0;\n  border-color: #fbe1b8;\n}\n\n.alert-warning .alert-link {\n  color: #754b09;\n}\n\n.alert-danger {\n  color: #8b2e24;\n  background-color: #fadbd8;\n  border-color: #f8c9c5;\n}\n\n.alert-danger .alert-link {\n  color: #6f251d;\n}\n\n.alert-light {\n  color: #686d71;\n  background-color: #eff0f2;\n  border-color: #e6e9eb;\n}\n\n.alert-light .alert-link {\n  color: #53575a;\n}\n\n.alert-dark {\n  color: #1d1d1d;\n  background-color: #d6d6d6;\n  border-color: #c1c1c1;\n}\n\n.alert-dark .alert-link {\n  color: #171717;\n}\n\n@-webkit-keyframes progress-bar-stripes {\n  0% {\n    background-position-x: 1rem;\n  }\n}\n\n@keyframes progress-bar-stripes {\n  0% {\n    background-position-x: 1rem;\n  }\n}\n\n.progress {\n  display: -ms-flexbox;\n  display: flex;\n  height: 1rem;\n  overflow: hidden;\n  font-size: 0.75rem;\n  background-color: #444;\n  border-radius: 0.25rem;\n}\n\n.progress-bar {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  -ms-flex-pack: center;\n  justify-content: center;\n  overflow: hidden;\n  color: #fff;\n  text-align: center;\n  white-space: nowrap;\n  background-color: #375a7f;\n  transition: width 0.6s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .progress-bar {\n    transition: none;\n  }\n}\n\n.progress-bar-striped {\n  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-size: 1rem 1rem;\n}\n\n.progress-bar-animated {\n  -webkit-animation: 1s linear infinite progress-bar-stripes;\n  animation: 1s linear infinite progress-bar-stripes;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .progress-bar-animated {\n    -webkit-animation: none;\n    animation: none;\n  }\n}\n\n.list-group {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  padding-left: 0;\n  margin-bottom: 0;\n  border-radius: 0.25rem;\n}\n\n.list-group-numbered {\n  list-style-type: none;\n  counter-reset: section;\n}\n\n.list-group-numbered > li::before {\n  content: counters(section, \".\") \". \";\n  counter-increment: section;\n}\n\n.list-group-item-action {\n  width: 100%;\n  color: #444;\n  text-align: inherit;\n}\n\n.list-group-item-action:hover, .list-group-item-action:focus {\n  z-index: 1;\n  color: #fff;\n  text-decoration: none;\n  background-color: #444;\n}\n\n.list-group-item-action:active {\n  color: #fff;\n  background-color: #222;\n}\n\n.list-group-item {\n  position: relative;\n  display: block;\n  padding: 0.5rem 1rem;\n  color: #fff;\n  text-decoration: none;\n  background-color: #303030;\n  border: 1px solid #444;\n}\n\n.list-group-item:first-child {\n  border-top-left-radius: inherit;\n  border-top-right-radius: inherit;\n}\n\n.list-group-item:last-child {\n  border-bottom-right-radius: inherit;\n  border-bottom-left-radius: inherit;\n}\n\n.list-group-item.disabled, .list-group-item:disabled {\n  color: #888;\n  pointer-events: none;\n  background-color: #303030;\n}\n\n.list-group-item.active {\n  z-index: 2;\n  color: #fff;\n  background-color: #375a7f;\n  border-color: #375a7f;\n}\n\n.list-group-item + .list-group-item {\n  border-top-width: 0;\n}\n\n.list-group-item + .list-group-item.active {\n  margin-top: -1px;\n  border-top-width: 1px;\n}\n\n.list-group-horizontal {\n  -ms-flex-direction: row;\n  flex-direction: row;\n}\n\n.list-group-horizontal > .list-group-item:first-child {\n  border-bottom-left-radius: 0.25rem;\n  border-top-right-radius: 0;\n}\n\n.list-group-horizontal > .list-group-item:last-child {\n  border-top-right-radius: 0.25rem;\n  border-bottom-left-radius: 0;\n}\n\n.list-group-horizontal > .list-group-item.active {\n  margin-top: 0;\n}\n\n.list-group-horizontal > .list-group-item + .list-group-item {\n  border-top-width: 1px;\n  border-left-width: 0;\n}\n\n.list-group-horizontal > .list-group-item + .list-group-item.active {\n  margin-left: -1px;\n  border-left-width: 1px;\n}\n\n@media (min-width: 576px) {\n  .list-group-horizontal-sm {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .list-group-horizontal-sm > .list-group-item:first-child {\n    border-bottom-left-radius: 0.25rem;\n    border-top-right-radius: 0;\n  }\n  .list-group-horizontal-sm > .list-group-item:last-child {\n    border-top-right-radius: 0.25rem;\n    border-bottom-left-radius: 0;\n  }\n  .list-group-horizontal-sm > .list-group-item.active {\n    margin-top: 0;\n  }\n  .list-group-horizontal-sm > .list-group-item + .list-group-item {\n    border-top-width: 1px;\n    border-left-width: 0;\n  }\n  .list-group-horizontal-sm > .list-group-item + .list-group-item.active {\n    margin-left: -1px;\n    border-left-width: 1px;\n  }\n}\n\n@media (min-width: 768px) {\n  .list-group-horizontal-md {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .list-group-horizontal-md > .list-group-item:first-child {\n    border-bottom-left-radius: 0.25rem;\n    border-top-right-radius: 0;\n  }\n  .list-group-horizontal-md > .list-group-item:last-child {\n    border-top-right-radius: 0.25rem;\n    border-bottom-left-radius: 0;\n  }\n  .list-group-horizontal-md > .list-group-item.active {\n    margin-top: 0;\n  }\n  .list-group-horizontal-md > .list-group-item + .list-group-item {\n    border-top-width: 1px;\n    border-left-width: 0;\n  }\n  .list-group-horizontal-md > .list-group-item + .list-group-item.active {\n    margin-left: -1px;\n    border-left-width: 1px;\n  }\n}\n\n@media (min-width: 992px) {\n  .list-group-horizontal-lg {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .list-group-horizontal-lg > .list-group-item:first-child {\n    border-bottom-left-radius: 0.25rem;\n    border-top-right-radius: 0;\n  }\n  .list-group-horizontal-lg > .list-group-item:last-child {\n    border-top-right-radius: 0.25rem;\n    border-bottom-left-radius: 0;\n  }\n  .list-group-horizontal-lg > .list-group-item.active {\n    margin-top: 0;\n  }\n  .list-group-horizontal-lg > .list-group-item + .list-group-item {\n    border-top-width: 1px;\n    border-left-width: 0;\n  }\n  .list-group-horizontal-lg > .list-group-item + .list-group-item.active {\n    margin-left: -1px;\n    border-left-width: 1px;\n  }\n}\n\n@media (min-width: 1200px) {\n  .list-group-horizontal-xl {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .list-group-horizontal-xl > .list-group-item:first-child {\n    border-bottom-left-radius: 0.25rem;\n    border-top-right-radius: 0;\n  }\n  .list-group-horizontal-xl > .list-group-item:last-child {\n    border-top-right-radius: 0.25rem;\n    border-bottom-left-radius: 0;\n  }\n  .list-group-horizontal-xl > .list-group-item.active {\n    margin-top: 0;\n  }\n  .list-group-horizontal-xl > .list-group-item + .list-group-item {\n    border-top-width: 1px;\n    border-left-width: 0;\n  }\n  .list-group-horizontal-xl > .list-group-item + .list-group-item.active {\n    margin-left: -1px;\n    border-left-width: 1px;\n  }\n}\n\n@media (min-width: 1400px) {\n  .list-group-horizontal-xxl {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .list-group-horizontal-xxl > .list-group-item:first-child {\n    border-bottom-left-radius: 0.25rem;\n    border-top-right-radius: 0;\n  }\n  .list-group-horizontal-xxl > .list-group-item:last-child {\n    border-top-right-radius: 0.25rem;\n    border-bottom-left-radius: 0;\n  }\n  .list-group-horizontal-xxl > .list-group-item.active {\n    margin-top: 0;\n  }\n  .list-group-horizontal-xxl > .list-group-item + .list-group-item {\n    border-top-width: 1px;\n    border-left-width: 0;\n  }\n  .list-group-horizontal-xxl > .list-group-item + .list-group-item.active {\n    margin-left: -1px;\n    border-left-width: 1px;\n  }\n}\n\n.list-group-flush {\n  border-radius: 0;\n}\n\n.list-group-flush > .list-group-item {\n  border-width: 0 0 1px;\n}\n\n.list-group-flush > .list-group-item:last-child {\n  border-bottom-width: 0;\n}\n\n.list-group-item-primary {\n  color: #21364c;\n  background-color: #d7dee5;\n}\n\n.list-group-item-primary.list-group-item-action:hover, .list-group-item-primary.list-group-item-action:focus {\n  color: #21364c;\n  background-color: #c2c8ce;\n}\n\n.list-group-item-primary.list-group-item-action.active {\n  color: #fff;\n  background-color: #21364c;\n  border-color: #21364c;\n}\n\n.list-group-item-secondary {\n  color: #292929;\n  background-color: #dadada;\n}\n\n.list-group-item-secondary.list-group-item-action:hover, .list-group-item-secondary.list-group-item-action:focus {\n  color: #292929;\n  background-color: #c4c4c4;\n}\n\n.list-group-item-secondary.list-group-item-action.active {\n  color: #fff;\n  background-color: #292929;\n  border-color: #292929;\n}\n\n.list-group-item-success {\n  color: #007154;\n  background-color: #ccf2e8;\n}\n\n.list-group-item-success.list-group-item-action:hover, .list-group-item-success.list-group-item-action:focus {\n  color: #007154;\n  background-color: #b8dad1;\n}\n\n.list-group-item-success.list-group-item-action.active {\n  color: #fff;\n  background-color: #007154;\n  border-color: #007154;\n}\n\n.list-group-item-info {\n  color: #1f5b83;\n  background-color: #d6eaf8;\n}\n\n.list-group-item-info.list-group-item-action:hover, .list-group-item-info.list-group-item-action:focus {\n  color: #1f5b83;\n  background-color: #c1d3df;\n}\n\n.list-group-item-info.list-group-item-action.active {\n  color: #fff;\n  background-color: #1f5b83;\n  border-color: #1f5b83;\n}\n\n.list-group-item-warning {\n  color: #925e0b;\n  background-color: #fdebd0;\n}\n\n.list-group-item-warning.list-group-item-action:hover, .list-group-item-warning.list-group-item-action:focus {\n  color: #925e0b;\n  background-color: #e4d4bb;\n}\n\n.list-group-item-warning.list-group-item-action.active {\n  color: #fff;\n  background-color: #925e0b;\n  border-color: #925e0b;\n}\n\n.list-group-item-danger {\n  color: #8b2e24;\n  background-color: #fadbd8;\n}\n\n.list-group-item-danger.list-group-item-action:hover, .list-group-item-danger.list-group-item-action:focus {\n  color: #8b2e24;\n  background-color: #e1c5c2;\n}\n\n.list-group-item-danger.list-group-item-action.active {\n  color: #fff;\n  background-color: #8b2e24;\n  border-color: #8b2e24;\n}\n\n.list-group-item-light {\n  color: #686d71;\n  background-color: #eff0f2;\n}\n\n.list-group-item-light.list-group-item-action:hover, .list-group-item-light.list-group-item-action:focus {\n  color: #686d71;\n  background-color: #d7d8da;\n}\n\n.list-group-item-light.list-group-item-action.active {\n  color: #fff;\n  background-color: #686d71;\n  border-color: #686d71;\n}\n\n.list-group-item-dark {\n  color: #1d1d1d;\n  background-color: #d6d6d6;\n}\n\n.list-group-item-dark.list-group-item-action:hover, .list-group-item-dark.list-group-item-action:focus {\n  color: #1d1d1d;\n  background-color: #c1c1c1;\n}\n\n.list-group-item-dark.list-group-item-action.active {\n  color: #fff;\n  background-color: #1d1d1d;\n  border-color: #1d1d1d;\n}\n\n.btn-close {\n  box-sizing: content-box;\n  width: 1em;\n  height: 1em;\n  padding: 0.25em 0.25em;\n  color: #fff;\n  background: transparent url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M.293.293a1 1 0 011.414 0L8 6.586 14.293.293a1 1 0 111.414 1.414L9.414 8l6.293 6.293a1 1 0 01-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 01-1.414-1.414L6.586 8 .293 1.707a1 1 0 010-1.414z'/%3e%3c/svg%3e\") center/1em auto no-repeat;\n  border: 0;\n  border-radius: 0.25rem;\n  opacity: 0.4;\n}\n\n.btn-close:hover {\n  color: #fff;\n  text-decoration: none;\n  opacity: 1;\n}\n\n.btn-close:focus {\n  outline: 0;\n  box-shadow: 0 0 0 0.25rem rgba(55, 90, 127, 0.25);\n  opacity: 1;\n}\n\n.btn-close:disabled, .btn-close.disabled {\n  pointer-events: none;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  user-select: none;\n  opacity: 0.25;\n}\n\n.btn-close-white {\n  -webkit-filter: invert(1) grayscale(100%) brightness(200%);\n  filter: invert(1) grayscale(100%) brightness(200%);\n}\n\n.toast {\n  width: 350px;\n  max-width: 100%;\n  font-size: 0.875rem;\n  pointer-events: auto;\n  background-color: #444;\n  background-clip: padding-box;\n  border: 1px solid rgba(0, 0, 0, 0.1);\n  box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15);\n  border-radius: 0.25rem;\n}\n\n.toast.showing {\n  opacity: 0;\n}\n\n.toast:not(.show) {\n  display: none;\n}\n\n.toast-container {\n  width: -webkit-max-content;\n  width: -moz-max-content;\n  width: max-content;\n  max-width: 100%;\n  pointer-events: none;\n}\n\n.toast-container > :not(:last-child) {\n  margin-bottom: 0.75rem;\n}\n\n.toast-header {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-align: center;\n  align-items: center;\n  padding: 0.5rem 0.75rem;\n  color: #888;\n  background-color: #303030;\n  background-clip: padding-box;\n  border-bottom: 1px solid rgba(0, 0, 0, 0.05);\n  border-top-left-radius: calc(0.25rem - 1px);\n  border-top-right-radius: calc(0.25rem - 1px);\n}\n\n.toast-header .btn-close {\n  margin-right: -0.375rem;\n  margin-left: 0.75rem;\n}\n\n.toast-body {\n  padding: 0.75rem;\n  word-wrap: break-word;\n}\n\n.modal {\n  position: fixed;\n  top: 0;\n  left: 0;\n  z-index: 1055;\n  display: none;\n  width: 100%;\n  height: 100%;\n  overflow-x: hidden;\n  overflow-y: auto;\n  outline: 0;\n}\n\n.modal-dialog {\n  position: relative;\n  width: auto;\n  margin: 0.5rem;\n  pointer-events: none;\n}\n\n.modal.fade .modal-dialog {\n  transition: -webkit-transform 0.3s ease-out;\n  transition: transform 0.3s ease-out;\n  transition: transform 0.3s ease-out, -webkit-transform 0.3s ease-out;\n  -webkit-transform: translate(0, -50px);\n  transform: translate(0, -50px);\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .modal.fade .modal-dialog {\n    transition: none;\n  }\n}\n\n.modal.show .modal-dialog {\n  -webkit-transform: none;\n  transform: none;\n}\n\n.modal.modal-static .modal-dialog {\n  -webkit-transform: scale(1.02);\n  transform: scale(1.02);\n}\n\n.modal-dialog-scrollable {\n  height: calc(100% - 1rem);\n}\n\n.modal-dialog-scrollable .modal-content {\n  max-height: 100%;\n  overflow: hidden;\n}\n\n.modal-dialog-scrollable .modal-body {\n  overflow-y: auto;\n}\n\n.modal-dialog-centered {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-align: center;\n  align-items: center;\n  min-height: calc(100% - 1rem);\n}\n\n.modal-content {\n  position: relative;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  width: 100%;\n  pointer-events: auto;\n  background-color: #303030;\n  background-clip: padding-box;\n  border: 1px solid #444;\n  border-radius: 0.3rem;\n  outline: 0;\n}\n\n.modal-backdrop {\n  position: fixed;\n  top: 0;\n  left: 0;\n  z-index: 1050;\n  width: 100vw;\n  height: 100vh;\n  background-color: #000;\n}\n\n.modal-backdrop.fade {\n  opacity: 0;\n}\n\n.modal-backdrop.show {\n  opacity: 0.5;\n}\n\n.modal-header {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-negative: 0;\n  flex-shrink: 0;\n  -ms-flex-align: center;\n  align-items: center;\n  -ms-flex-pack: justify;\n  justify-content: space-between;\n  padding: 1rem 1rem;\n  border-bottom: 1px solid #444;\n  border-top-left-radius: calc(0.3rem - 1px);\n  border-top-right-radius: calc(0.3rem - 1px);\n}\n\n.modal-header .btn-close {\n  padding: 0.5rem 0.5rem;\n  margin: -0.5rem -0.5rem -0.5rem auto;\n}\n\n.modal-title {\n  margin-bottom: 0;\n  line-height: 1.5;\n}\n\n.modal-body {\n  position: relative;\n  -ms-flex: 1 1 auto;\n  flex: 1 1 auto;\n  padding: 1rem;\n}\n\n.modal-footer {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n  flex-wrap: wrap;\n  -ms-flex-negative: 0;\n  flex-shrink: 0;\n  -ms-flex-align: center;\n  align-items: center;\n  -ms-flex-pack: end;\n  justify-content: flex-end;\n  padding: 0.75rem;\n  border-top: 1px solid #444;\n  border-bottom-right-radius: calc(0.3rem - 1px);\n  border-bottom-left-radius: calc(0.3rem - 1px);\n}\n\n.modal-footer > * {\n  margin: 0.25rem;\n}\n\n@media (min-width: 576px) {\n  .modal-dialog {\n    max-width: 500px;\n    margin: 1.75rem auto;\n  }\n  .modal-dialog-scrollable {\n    height: calc(100% - 3.5rem);\n  }\n  .modal-dialog-centered {\n    min-height: calc(100% - 3.5rem);\n  }\n  .modal-sm {\n    max-width: 300px;\n  }\n}\n\n@media (min-width: 992px) {\n  .modal-lg,\n  .modal-xl {\n    max-width: 800px;\n  }\n}\n\n@media (min-width: 1200px) {\n  .modal-xl {\n    max-width: 1140px;\n  }\n}\n\n.modal-fullscreen {\n  width: 100vw;\n  max-width: none;\n  height: 100%;\n  margin: 0;\n}\n\n.modal-fullscreen .modal-content {\n  height: 100%;\n  border: 0;\n  border-radius: 0;\n}\n\n.modal-fullscreen .modal-header {\n  border-radius: 0;\n}\n\n.modal-fullscreen .modal-body {\n  overflow-y: auto;\n}\n\n.modal-fullscreen .modal-footer {\n  border-radius: 0;\n}\n\n@media (max-width: 575.98px) {\n  .modal-fullscreen-sm-down {\n    width: 100vw;\n    max-width: none;\n    height: 100%;\n    margin: 0;\n  }\n  .modal-fullscreen-sm-down .modal-content {\n    height: 100%;\n    border: 0;\n    border-radius: 0;\n  }\n  .modal-fullscreen-sm-down .modal-header {\n    border-radius: 0;\n  }\n  .modal-fullscreen-sm-down .modal-body {\n    overflow-y: auto;\n  }\n  .modal-fullscreen-sm-down .modal-footer {\n    border-radius: 0;\n  }\n}\n\n@media (max-width: 767.98px) {\n  .modal-fullscreen-md-down {\n    width: 100vw;\n    max-width: none;\n    height: 100%;\n    margin: 0;\n  }\n  .modal-fullscreen-md-down .modal-content {\n    height: 100%;\n    border: 0;\n    border-radius: 0;\n  }\n  .modal-fullscreen-md-down .modal-header {\n    border-radius: 0;\n  }\n  .modal-fullscreen-md-down .modal-body {\n    overflow-y: auto;\n  }\n  .modal-fullscreen-md-down .modal-footer {\n    border-radius: 0;\n  }\n}\n\n@media (max-width: 991.98px) {\n  .modal-fullscreen-lg-down {\n    width: 100vw;\n    max-width: none;\n    height: 100%;\n    margin: 0;\n  }\n  .modal-fullscreen-lg-down .modal-content {\n    height: 100%;\n    border: 0;\n    border-radius: 0;\n  }\n  .modal-fullscreen-lg-down .modal-header {\n    border-radius: 0;\n  }\n  .modal-fullscreen-lg-down .modal-body {\n    overflow-y: auto;\n  }\n  .modal-fullscreen-lg-down .modal-footer {\n    border-radius: 0;\n  }\n}\n\n@media (max-width: 1199.98px) {\n  .modal-fullscreen-xl-down {\n    width: 100vw;\n    max-width: none;\n    height: 100%;\n    margin: 0;\n  }\n  .modal-fullscreen-xl-down .modal-content {\n    height: 100%;\n    border: 0;\n    border-radius: 0;\n  }\n  .modal-fullscreen-xl-down .modal-header {\n    border-radius: 0;\n  }\n  .modal-fullscreen-xl-down .modal-body {\n    overflow-y: auto;\n  }\n  .modal-fullscreen-xl-down .modal-footer {\n    border-radius: 0;\n  }\n}\n\n@media (max-width: 1399.98px) {\n  .modal-fullscreen-xxl-down {\n    width: 100vw;\n    max-width: none;\n    height: 100%;\n    margin: 0;\n  }\n  .modal-fullscreen-xxl-down .modal-content {\n    height: 100%;\n    border: 0;\n    border-radius: 0;\n  }\n  .modal-fullscreen-xxl-down .modal-header {\n    border-radius: 0;\n  }\n  .modal-fullscreen-xxl-down .modal-body {\n    overflow-y: auto;\n  }\n  .modal-fullscreen-xxl-down .modal-footer {\n    border-radius: 0;\n  }\n}\n\n.tooltip {\n  position: absolute;\n  z-index: 1080;\n  display: block;\n  margin: 0;\n  font-family: var(--bs-font-sans-serif);\n  font-style: normal;\n  font-weight: 400;\n  line-height: 1.5;\n  text-align: left;\n  text-align: start;\n  text-decoration: none;\n  text-shadow: none;\n  text-transform: none;\n  letter-spacing: normal;\n  word-break: normal;\n  word-spacing: normal;\n  white-space: normal;\n  line-break: auto;\n  font-size: 0.875rem;\n  word-wrap: break-word;\n  opacity: 0;\n}\n\n.tooltip.show {\n  opacity: 0.9;\n}\n\n.tooltip .tooltip-arrow {\n  position: absolute;\n  display: block;\n  width: 0.8rem;\n  height: 0.4rem;\n}\n\n.tooltip .tooltip-arrow::before {\n  position: absolute;\n  content: \"\";\n  border-color: transparent;\n  border-style: solid;\n}\n\n.bs-tooltip-top, .bs-tooltip-auto[data-popper-placement^=\"top\"] {\n  padding: 0.4rem 0;\n}\n\n.bs-tooltip-top .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=\"top\"] .tooltip-arrow {\n  bottom: 0;\n}\n\n.bs-tooltip-top .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=\"top\"] .tooltip-arrow::before {\n  top: -1px;\n  border-width: 0.4rem 0.4rem 0;\n  border-top-color: #000;\n}\n\n.bs-tooltip-end, .bs-tooltip-auto[data-popper-placement^=\"right\"] {\n  padding: 0 0.4rem;\n}\n\n.bs-tooltip-end .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=\"right\"] .tooltip-arrow {\n  left: 0;\n  width: 0.4rem;\n  height: 0.8rem;\n}\n\n.bs-tooltip-end .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=\"right\"] .tooltip-arrow::before {\n  right: -1px;\n  border-width: 0.4rem 0.4rem 0.4rem 0;\n  border-right-color: #000;\n}\n\n.bs-tooltip-bottom, .bs-tooltip-auto[data-popper-placement^=\"bottom\"] {\n  padding: 0.4rem 0;\n}\n\n.bs-tooltip-bottom .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=\"bottom\"] .tooltip-arrow {\n  top: 0;\n}\n\n.bs-tooltip-bottom .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=\"bottom\"] .tooltip-arrow::before {\n  bottom: -1px;\n  border-width: 0 0.4rem 0.4rem;\n  border-bottom-color: #000;\n}\n\n.bs-tooltip-start, .bs-tooltip-auto[data-popper-placement^=\"left\"] {\n  padding: 0 0.4rem;\n}\n\n.bs-tooltip-start .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=\"left\"] .tooltip-arrow {\n  right: 0;\n  width: 0.4rem;\n  height: 0.8rem;\n}\n\n.bs-tooltip-start .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=\"left\"] .tooltip-arrow::before {\n  left: -1px;\n  border-width: 0.4rem 0 0.4rem 0.4rem;\n  border-left-color: #000;\n}\n\n.tooltip-inner {\n  max-width: 200px;\n  padding: 0.25rem 0.5rem;\n  color: #fff;\n  text-align: center;\n  background-color: #000;\n  border-radius: 0.25rem;\n}\n\n.popover {\n  position: absolute;\n  top: 0;\n  left: 0 /* rtl:ignore */;\n  z-index: 1070;\n  display: block;\n  max-width: 276px;\n  font-family: var(--bs-font-sans-serif);\n  font-style: normal;\n  font-weight: 400;\n  line-height: 1.5;\n  text-align: left;\n  text-align: start;\n  text-decoration: none;\n  text-shadow: none;\n  text-transform: none;\n  letter-spacing: normal;\n  word-break: normal;\n  word-spacing: normal;\n  white-space: normal;\n  line-break: auto;\n  font-size: 0.875rem;\n  word-wrap: break-word;\n  background-color: #303030;\n  background-clip: padding-box;\n  border: 1px solid rgba(0, 0, 0, 0.2);\n  border-radius: 0.3rem;\n}\n\n.popover .popover-arrow {\n  position: absolute;\n  display: block;\n  width: 1rem;\n  height: 0.5rem;\n}\n\n.popover .popover-arrow::before, .popover .popover-arrow::after {\n  position: absolute;\n  display: block;\n  content: \"\";\n  border-color: transparent;\n  border-style: solid;\n}\n\n.bs-popover-top > .popover-arrow, .bs-popover-auto[data-popper-placement^=\"top\"] > .popover-arrow {\n  bottom: calc(-0.5rem - 1px);\n}\n\n.bs-popover-top > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=\"top\"] > .popover-arrow::before {\n  bottom: 0;\n  border-width: 0.5rem 0.5rem 0;\n  border-top-color: rgba(0, 0, 0, 0.25);\n}\n\n.bs-popover-top > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=\"top\"] > .popover-arrow::after {\n  bottom: 1px;\n  border-width: 0.5rem 0.5rem 0;\n  border-top-color: #303030;\n}\n\n.bs-popover-end > .popover-arrow, .bs-popover-auto[data-popper-placement^=\"right\"] > .popover-arrow {\n  left: calc(-0.5rem - 1px);\n  width: 0.5rem;\n  height: 1rem;\n}\n\n.bs-popover-end > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=\"right\"] > .popover-arrow::before {\n  left: 0;\n  border-width: 0.5rem 0.5rem 0.5rem 0;\n  border-right-color: rgba(0, 0, 0, 0.25);\n}\n\n.bs-popover-end > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=\"right\"] > .popover-arrow::after {\n  left: 1px;\n  border-width: 0.5rem 0.5rem 0.5rem 0;\n  border-right-color: #303030;\n}\n\n.bs-popover-bottom > .popover-arrow, .bs-popover-auto[data-popper-placement^=\"bottom\"] > .popover-arrow {\n  top: calc(-0.5rem - 1px);\n}\n\n.bs-popover-bottom > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=\"bottom\"] > .popover-arrow::before {\n  top: 0;\n  border-width: 0 0.5rem 0.5rem 0.5rem;\n  border-bottom-color: rgba(0, 0, 0, 0.25);\n}\n\n.bs-popover-bottom > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=\"bottom\"] > .popover-arrow::after {\n  top: 1px;\n  border-width: 0 0.5rem 0.5rem 0.5rem;\n  border-bottom-color: #303030;\n}\n\n.bs-popover-bottom .popover-header::before, .bs-popover-auto[data-popper-placement^=\"bottom\"] .popover-header::before {\n  position: absolute;\n  top: 0;\n  left: 50%;\n  display: block;\n  width: 1rem;\n  margin-left: -0.5rem;\n  content: \"\";\n  border-bottom: 1px solid #444;\n}\n\n.bs-popover-start > .popover-arrow, .bs-popover-auto[data-popper-placement^=\"left\"] > .popover-arrow {\n  right: calc(-0.5rem - 1px);\n  width: 0.5rem;\n  height: 1rem;\n}\n\n.bs-popover-start > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=\"left\"] > .popover-arrow::before {\n  right: 0;\n  border-width: 0.5rem 0 0.5rem 0.5rem;\n  border-left-color: rgba(0, 0, 0, 0.25);\n}\n\n.bs-popover-start > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=\"left\"] > .popover-arrow::after {\n  right: 1px;\n  border-width: 0.5rem 0 0.5rem 0.5rem;\n  border-left-color: #303030;\n}\n\n.popover-header {\n  padding: 0.5rem 1rem;\n  margin-bottom: 0;\n  font-size: 1rem;\n  background-color: #444;\n  border-bottom: 1px solid rgba(0, 0, 0, 0.2);\n  border-top-left-radius: calc(0.3rem - 1px);\n  border-top-right-radius: calc(0.3rem - 1px);\n}\n\n.popover-header:empty {\n  display: none;\n}\n\n.popover-body {\n  padding: 1rem 1rem;\n  color: #fff;\n}\n\n.carousel {\n  position: relative;\n}\n\n.carousel.pointer-event {\n  -ms-touch-action: pan-y;\n  touch-action: pan-y;\n}\n\n.carousel-inner {\n  position: relative;\n  width: 100%;\n  overflow: hidden;\n}\n\n.carousel-inner::after {\n  display: block;\n  clear: both;\n  content: \"\";\n}\n\n.carousel-item {\n  position: relative;\n  display: none;\n  float: left;\n  width: 100%;\n  margin-right: -100%;\n  -webkit-backface-visibility: hidden;\n  backface-visibility: hidden;\n  transition: -webkit-transform 0.6s ease-in-out;\n  transition: transform 0.6s ease-in-out;\n  transition: transform 0.6s ease-in-out, -webkit-transform 0.6s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .carousel-item {\n    transition: none;\n  }\n}\n\n.carousel-item.active,\n.carousel-item-next,\n.carousel-item-prev {\n  display: block;\n}\n\n/* rtl:begin:ignore */\n.carousel-item-next:not(.carousel-item-start),\n.active.carousel-item-end {\n  -webkit-transform: translateX(100%);\n  transform: translateX(100%);\n}\n\n.carousel-item-prev:not(.carousel-item-end),\n.active.carousel-item-start {\n  -webkit-transform: translateX(-100%);\n  transform: translateX(-100%);\n}\n\n/* rtl:end:ignore */\n.carousel-fade .carousel-item {\n  opacity: 0;\n  transition-property: opacity;\n  -webkit-transform: none;\n  transform: none;\n}\n\n.carousel-fade .carousel-item.active,\n.carousel-fade .carousel-item-next.carousel-item-start,\n.carousel-fade .carousel-item-prev.carousel-item-end {\n  z-index: 1;\n  opacity: 1;\n}\n\n.carousel-fade .active.carousel-item-start,\n.carousel-fade .active.carousel-item-end {\n  z-index: 0;\n  opacity: 0;\n  transition: opacity 0s 0.6s;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .carousel-fade .active.carousel-item-start,\n  .carousel-fade .active.carousel-item-end {\n    transition: none;\n  }\n}\n\n.carousel-control-prev,\n.carousel-control-next {\n  position: absolute;\n  top: 0;\n  bottom: 0;\n  z-index: 1;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-align: center;\n  align-items: center;\n  -ms-flex-pack: center;\n  justify-content: center;\n  width: 15%;\n  padding: 0;\n  color: #fff;\n  text-align: center;\n  background: none;\n  border: 0;\n  opacity: 0.5;\n  transition: opacity 0.15s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .carousel-control-prev,\n  .carousel-control-next {\n    transition: none;\n  }\n}\n\n.carousel-control-prev:hover, .carousel-control-prev:focus,\n.carousel-control-next:hover,\n.carousel-control-next:focus {\n  color: #fff;\n  text-decoration: none;\n  outline: 0;\n  opacity: 0.9;\n}\n\n.carousel-control-prev {\n  left: 0;\n}\n\n.carousel-control-next {\n  right: 0;\n}\n\n.carousel-control-prev-icon,\n.carousel-control-next-icon {\n  display: inline-block;\n  width: 2rem;\n  height: 2rem;\n  background-repeat: no-repeat;\n  background-position: 50%;\n  background-size: 100% 100%;\n}\n\n/* rtl:options: {\n  \"autoRename\": true,\n  \"stringMap\":[ {\n    \"name\"    : \"prev-next\",\n    \"search\"  : \"prev\",\n    \"replace\" : \"next\"\n  } ]\n} */\n.carousel-control-prev-icon {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0z'/%3e%3c/svg%3e\");\n}\n\n.carousel-control-next-icon {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e\");\n}\n\n.carousel-indicators {\n  position: absolute;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 2;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-pack: center;\n  justify-content: center;\n  padding: 0;\n  margin-right: 15%;\n  margin-bottom: 1rem;\n  margin-left: 15%;\n  list-style: none;\n}\n\n.carousel-indicators [data-bs-target] {\n  box-sizing: content-box;\n  -ms-flex: 0 1 auto;\n  flex: 0 1 auto;\n  width: 30px;\n  height: 3px;\n  padding: 0;\n  margin-right: 3px;\n  margin-left: 3px;\n  text-indent: -999px;\n  cursor: pointer;\n  background-color: #fff;\n  background-clip: padding-box;\n  border: 0;\n  border-top: 10px solid transparent;\n  border-bottom: 10px solid transparent;\n  opacity: 0.5;\n  transition: opacity 0.6s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .carousel-indicators [data-bs-target] {\n    transition: none;\n  }\n}\n\n.carousel-indicators .active {\n  opacity: 1;\n}\n\n.carousel-caption {\n  position: absolute;\n  right: 15%;\n  bottom: 1.25rem;\n  left: 15%;\n  padding-top: 1.25rem;\n  padding-bottom: 1.25rem;\n  color: #fff;\n  text-align: center;\n}\n\n.carousel-dark .carousel-control-prev-icon,\n.carousel-dark .carousel-control-next-icon {\n  -webkit-filter: invert(1) grayscale(100);\n  filter: invert(1) grayscale(100);\n}\n\n.carousel-dark .carousel-indicators [data-bs-target] {\n  background-color: #000;\n}\n\n.carousel-dark .carousel-caption {\n  color: #000;\n}\n\n@-webkit-keyframes spinner-border {\n  to {\n    -webkit-transform: rotate(360deg) /* rtl:ignore */;\n    transform: rotate(360deg) /* rtl:ignore */;\n  }\n}\n\n@keyframes spinner-border {\n  to {\n    -webkit-transform: rotate(360deg) /* rtl:ignore */;\n    transform: rotate(360deg) /* rtl:ignore */;\n  }\n}\n\n.spinner-border {\n  display: inline-block;\n  width: 2rem;\n  height: 2rem;\n  vertical-align: -0.125em;\n  border: 0.25em solid currentColor;\n  border-right-color: transparent;\n  border-radius: 50%;\n  -webkit-animation: 0.75s linear infinite spinner-border;\n  animation: 0.75s linear infinite spinner-border;\n}\n\n.spinner-border-sm {\n  width: 1rem;\n  height: 1rem;\n  border-width: 0.2em;\n}\n\n@-webkit-keyframes spinner-grow {\n  0% {\n    -webkit-transform: scale(0);\n    transform: scale(0);\n  }\n  50% {\n    opacity: 1;\n    -webkit-transform: none;\n    transform: none;\n  }\n}\n\n@keyframes spinner-grow {\n  0% {\n    -webkit-transform: scale(0);\n    transform: scale(0);\n  }\n  50% {\n    opacity: 1;\n    -webkit-transform: none;\n    transform: none;\n  }\n}\n\n.spinner-grow {\n  display: inline-block;\n  width: 2rem;\n  height: 2rem;\n  vertical-align: -0.125em;\n  background-color: currentColor;\n  border-radius: 50%;\n  opacity: 0;\n  -webkit-animation: 0.75s linear infinite spinner-grow;\n  animation: 0.75s linear infinite spinner-grow;\n}\n\n.spinner-grow-sm {\n  width: 1rem;\n  height: 1rem;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .spinner-border,\n  .spinner-grow {\n    -webkit-animation-duration: 1.5s;\n    animation-duration: 1.5s;\n  }\n}\n\n.offcanvas {\n  position: fixed;\n  bottom: 0;\n  z-index: 1045;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  max-width: 100%;\n  visibility: hidden;\n  background-color: #303030;\n  background-clip: padding-box;\n  outline: 0;\n  transition: -webkit-transform 0.3s ease-in-out;\n  transition: transform 0.3s ease-in-out;\n  transition: transform 0.3s ease-in-out, -webkit-transform 0.3s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .offcanvas {\n    transition: none;\n  }\n}\n\n.offcanvas-backdrop {\n  position: fixed;\n  top: 0;\n  left: 0;\n  z-index: 1040;\n  width: 100vw;\n  height: 100vh;\n  background-color: #000;\n}\n\n.offcanvas-backdrop.fade {\n  opacity: 0;\n}\n\n.offcanvas-backdrop.show {\n  opacity: 0.5;\n}\n\n.offcanvas-header {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-align: center;\n  align-items: center;\n  -ms-flex-pack: justify;\n  justify-content: space-between;\n  padding: 1rem 1rem;\n}\n\n.offcanvas-header .btn-close {\n  padding: 0.5rem 0.5rem;\n  margin-top: -0.5rem;\n  margin-right: -0.5rem;\n  margin-bottom: -0.5rem;\n}\n\n.offcanvas-title {\n  margin-bottom: 0;\n  line-height: 1.5;\n}\n\n.offcanvas-body {\n  -ms-flex-positive: 1;\n  flex-grow: 1;\n  padding: 1rem 1rem;\n  overflow-y: auto;\n}\n\n.offcanvas-start {\n  top: 0;\n  left: 0;\n  width: 400px;\n  border-right: 1px solid #444;\n  -webkit-transform: translateX(-100%);\n  transform: translateX(-100%);\n}\n\n.offcanvas-end {\n  top: 0;\n  right: 0;\n  width: 400px;\n  border-left: 1px solid #444;\n  -webkit-transform: translateX(100%);\n  transform: translateX(100%);\n}\n\n.offcanvas-top {\n  top: 0;\n  right: 0;\n  left: 0;\n  height: 30vh;\n  max-height: 100%;\n  border-bottom: 1px solid #444;\n  -webkit-transform: translateY(-100%);\n  transform: translateY(-100%);\n}\n\n.offcanvas-bottom {\n  right: 0;\n  left: 0;\n  height: 30vh;\n  max-height: 100%;\n  border-top: 1px solid #444;\n  -webkit-transform: translateY(100%);\n  transform: translateY(100%);\n}\n\n.offcanvas.show {\n  -webkit-transform: none;\n  transform: none;\n}\n\n.placeholder {\n  display: inline-block;\n  min-height: 1em;\n  vertical-align: middle;\n  cursor: wait;\n  background-color: currentColor;\n  opacity: 0.5;\n}\n\n.placeholder.btn::before {\n  display: inline-block;\n  content: \"\";\n}\n\n.placeholder-xs {\n  min-height: .6em;\n}\n\n.placeholder-sm {\n  min-height: .8em;\n}\n\n.placeholder-lg {\n  min-height: 1.2em;\n}\n\n.placeholder-glow .placeholder {\n  -webkit-animation: placeholder-glow 2s ease-in-out infinite;\n  animation: placeholder-glow 2s ease-in-out infinite;\n}\n\n@-webkit-keyframes placeholder-glow {\n  50% {\n    opacity: 0.2;\n  }\n}\n\n@keyframes placeholder-glow {\n  50% {\n    opacity: 0.2;\n  }\n}\n\n.placeholder-wave {\n  -webkit-mask-image: linear-gradient(130deg, #000 55%, rgba(0, 0, 0, 0.8) 75%, #000 95%);\n  mask-image: linear-gradient(130deg, #000 55%, rgba(0, 0, 0, 0.8) 75%, #000 95%);\n  -webkit-mask-size: 200% 100%;\n  mask-size: 200% 100%;\n  -webkit-animation: placeholder-wave 2s linear infinite;\n  animation: placeholder-wave 2s linear infinite;\n}\n\n@-webkit-keyframes placeholder-wave {\n  100% {\n    -webkit-mask-position: -200% 0%;\n    mask-position: -200% 0%;\n  }\n}\n\n@keyframes placeholder-wave {\n  100% {\n    -webkit-mask-position: -200% 0%;\n    mask-position: -200% 0%;\n  }\n}\n\n.clearfix::after {\n  display: block;\n  clear: both;\n  content: \"\";\n}\n\n.link-primary {\n  color: #375a7f;\n}\n\n.link-primary:hover, .link-primary:focus {\n  color: #2c4866;\n}\n\n.link-secondary {\n  color: #444;\n}\n\n.link-secondary:hover, .link-secondary:focus {\n  color: #363636;\n}\n\n.link-success {\n  color: #00bc8c;\n}\n\n.link-success:hover, .link-success:focus {\n  color: #009670;\n}\n\n.link-info {\n  color: #3498db;\n}\n\n.link-info:hover, .link-info:focus {\n  color: #2a7aaf;\n}\n\n.link-warning {\n  color: #f39c12;\n}\n\n.link-warning:hover, .link-warning:focus {\n  color: #c27d0e;\n}\n\n.link-danger {\n  color: #e74c3c;\n}\n\n.link-danger:hover, .link-danger:focus {\n  color: #b93d30;\n}\n\n.link-light {\n  color: #adb5bd;\n}\n\n.link-light:hover, .link-light:focus {\n  color: #8a9197;\n}\n\n.link-dark {\n  color: #303030;\n}\n\n.link-dark:hover, .link-dark:focus {\n  color: #262626;\n}\n\n.ratio {\n  position: relative;\n  width: 100%;\n}\n\n.ratio::before {\n  display: block;\n  padding-top: var(--bs-aspect-ratio);\n  content: \"\";\n}\n\n.ratio > * {\n  position: absolute;\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n}\n\n.ratio-1x1 {\n  --bs-aspect-ratio: 100%;\n}\n\n.ratio-4x3 {\n  --bs-aspect-ratio: calc(3 / 4 * 100%);\n}\n\n.ratio-16x9 {\n  --bs-aspect-ratio: calc(9 / 16 * 100%);\n}\n\n.ratio-21x9 {\n  --bs-aspect-ratio: calc(9 / 21 * 100%);\n}\n\n.fixed-top {\n  position: fixed;\n  top: 0;\n  right: 0;\n  left: 0;\n  z-index: 1030;\n}\n\n.fixed-bottom {\n  position: fixed;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 1030;\n}\n\n.sticky-top {\n  position: -webkit-sticky;\n  position: sticky;\n  top: 0;\n  z-index: 1020;\n}\n\n@media (min-width: 576px) {\n  .sticky-sm-top {\n    position: -webkit-sticky;\n    position: sticky;\n    top: 0;\n    z-index: 1020;\n  }\n}\n\n@media (min-width: 768px) {\n  .sticky-md-top {\n    position: -webkit-sticky;\n    position: sticky;\n    top: 0;\n    z-index: 1020;\n  }\n}\n\n@media (min-width: 992px) {\n  .sticky-lg-top {\n    position: -webkit-sticky;\n    position: sticky;\n    top: 0;\n    z-index: 1020;\n  }\n}\n\n@media (min-width: 1200px) {\n  .sticky-xl-top {\n    position: -webkit-sticky;\n    position: sticky;\n    top: 0;\n    z-index: 1020;\n  }\n}\n\n@media (min-width: 1400px) {\n  .sticky-xxl-top {\n    position: -webkit-sticky;\n    position: sticky;\n    top: 0;\n    z-index: 1020;\n  }\n}\n\n.hstack {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-direction: row;\n  flex-direction: row;\n  -ms-flex-align: center;\n  align-items: center;\n  -ms-flex-item-align: stretch;\n  align-self: stretch;\n}\n\n.vstack {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex: 1 1 auto;\n  flex: 1 1 auto;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  -ms-flex-item-align: stretch;\n  align-self: stretch;\n}\n\n.visually-hidden,\n.visually-hidden-focusable:not(:focus):not(:focus-within) {\n  position: absolute !important;\n  width: 1px !important;\n  height: 1px !important;\n  padding: 0 !important;\n  margin: -1px !important;\n  overflow: hidden !important;\n  clip: rect(0, 0, 0, 0) !important;\n  white-space: nowrap !important;\n  border: 0 !important;\n}\n\n.stretched-link::after {\n  position: absolute;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 1;\n  content: \"\";\n}\n\n.text-truncate {\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n}\n\n.vr {\n  display: inline-block;\n  -ms-flex-item-align: stretch;\n  align-self: stretch;\n  width: 1px;\n  min-height: 1em;\n  background-color: currentColor;\n  opacity: 0.25;\n}\n\n.align-baseline {\n  vertical-align: baseline !important;\n}\n\n.align-top {\n  vertical-align: top !important;\n}\n\n.align-middle {\n  vertical-align: middle !important;\n}\n\n.align-bottom {\n  vertical-align: bottom !important;\n}\n\n.align-text-bottom {\n  vertical-align: text-bottom !important;\n}\n\n.align-text-top {\n  vertical-align: text-top !important;\n}\n\n.float-start {\n  float: left !important;\n}\n\n.float-end {\n  float: right !important;\n}\n\n.float-none {\n  float: none !important;\n}\n\n.opacity-0 {\n  opacity: 0 !important;\n}\n\n.opacity-25 {\n  opacity: 0.25 !important;\n}\n\n.opacity-50 {\n  opacity: 0.5 !important;\n}\n\n.opacity-75 {\n  opacity: 0.75 !important;\n}\n\n.opacity-100 {\n  opacity: 1 !important;\n}\n\n.overflow-auto {\n  overflow: auto !important;\n}\n\n.overflow-hidden {\n  overflow: hidden !important;\n}\n\n.overflow-visible {\n  overflow: visible !important;\n}\n\n.overflow-scroll {\n  overflow: scroll !important;\n}\n\n.d-inline {\n  display: inline !important;\n}\n\n.d-inline-block {\n  display: inline-block !important;\n}\n\n.d-block {\n  display: block !important;\n}\n\n.d-grid {\n  display: grid !important;\n}\n\n.d-table {\n  display: table !important;\n}\n\n.d-table-row {\n  display: table-row !important;\n}\n\n.d-table-cell {\n  display: table-cell !important;\n}\n\n.d-flex {\n  display: -ms-flexbox !important;\n  display: flex !important;\n}\n\n.d-inline-flex {\n  display: -ms-inline-flexbox !important;\n  display: inline-flex !important;\n}\n\n.d-none {\n  display: none !important;\n}\n\n.shadow {\n  box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15) !important;\n}\n\n.shadow-sm {\n  box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075) !important;\n}\n\n.shadow-lg {\n  box-shadow: 0 1rem 3rem rgba(0, 0, 0, 0.175) !important;\n}\n\n.shadow-none {\n  box-shadow: none !important;\n}\n\n.position-static {\n  position: static !important;\n}\n\n.position-relative {\n  position: relative !important;\n}\n\n.position-absolute {\n  position: absolute !important;\n}\n\n.position-fixed {\n  position: fixed !important;\n}\n\n.position-sticky {\n  position: -webkit-sticky !important;\n  position: sticky !important;\n}\n\n.top-0 {\n  top: 0 !important;\n}\n\n.top-50 {\n  top: 50% !important;\n}\n\n.top-100 {\n  top: 100% !important;\n}\n\n.bottom-0 {\n  bottom: 0 !important;\n}\n\n.bottom-50 {\n  bottom: 50% !important;\n}\n\n.bottom-100 {\n  bottom: 100% !important;\n}\n\n.start-0 {\n  left: 0 !important;\n}\n\n.start-50 {\n  left: 50% !important;\n}\n\n.start-100 {\n  left: 100% !important;\n}\n\n.end-0 {\n  right: 0 !important;\n}\n\n.end-50 {\n  right: 50% !important;\n}\n\n.end-100 {\n  right: 100% !important;\n}\n\n.translate-middle {\n  -webkit-transform: translate(-50%, -50%) !important;\n  transform: translate(-50%, -50%) !important;\n}\n\n.translate-middle-x {\n  -webkit-transform: translateX(-50%) !important;\n  transform: translateX(-50%) !important;\n}\n\n.translate-middle-y {\n  -webkit-transform: translateY(-50%) !important;\n  transform: translateY(-50%) !important;\n}\n\n.border {\n  border: 1px solid #dee2e6 !important;\n}\n\n.border-0 {\n  border: 0 !important;\n}\n\n.border-top {\n  border-top: 1px solid #dee2e6 !important;\n}\n\n.border-top-0 {\n  border-top: 0 !important;\n}\n\n.border-end {\n  border-right: 1px solid #dee2e6 !important;\n}\n\n.border-end-0 {\n  border-right: 0 !important;\n}\n\n.border-bottom {\n  border-bottom: 1px solid #dee2e6 !important;\n}\n\n.border-bottom-0 {\n  border-bottom: 0 !important;\n}\n\n.border-start {\n  border-left: 1px solid #dee2e6 !important;\n}\n\n.border-start-0 {\n  border-left: 0 !important;\n}\n\n.border-primary {\n  border-color: #375a7f !important;\n}\n\n.border-secondary {\n  border-color: #444 !important;\n}\n\n.border-success {\n  border-color: #00bc8c !important;\n}\n\n.border-info {\n  border-color: #3498db !important;\n}\n\n.border-warning {\n  border-color: #f39c12 !important;\n}\n\n.border-danger {\n  border-color: #e74c3c !important;\n}\n\n.border-light {\n  border-color: #adb5bd !important;\n}\n\n.border-dark {\n  border-color: #303030 !important;\n}\n\n.border-white {\n  border-color: #fff !important;\n}\n\n.border-1 {\n  border-width: 1px !important;\n}\n\n.border-2 {\n  border-width: 2px !important;\n}\n\n.border-3 {\n  border-width: 3px !important;\n}\n\n.border-4 {\n  border-width: 4px !important;\n}\n\n.border-5 {\n  border-width: 5px !important;\n}\n\n.w-25 {\n  width: 25% !important;\n}\n\n.w-50 {\n  width: 50% !important;\n}\n\n.w-75 {\n  width: 75% !important;\n}\n\n.w-100 {\n  width: 100% !important;\n}\n\n.w-auto {\n  width: auto !important;\n}\n\n.mw-100 {\n  max-width: 100% !important;\n}\n\n.vw-100 {\n  width: 100vw !important;\n}\n\n.min-vw-100 {\n  min-width: 100vw !important;\n}\n\n.h-25 {\n  height: 25% !important;\n}\n\n.h-50 {\n  height: 50% !important;\n}\n\n.h-75 {\n  height: 75% !important;\n}\n\n.h-100 {\n  height: 100% !important;\n}\n\n.h-auto {\n  height: auto !important;\n}\n\n.mh-100 {\n  max-height: 100% !important;\n}\n\n.vh-100 {\n  height: 100vh !important;\n}\n\n.min-vh-100 {\n  min-height: 100vh !important;\n}\n\n.flex-fill {\n  -ms-flex: 1 1 auto !important;\n  flex: 1 1 auto !important;\n}\n\n.flex-row {\n  -ms-flex-direction: row !important;\n  flex-direction: row !important;\n}\n\n.flex-column {\n  -ms-flex-direction: column !important;\n  flex-direction: column !important;\n}\n\n.flex-row-reverse {\n  -ms-flex-direction: row-reverse !important;\n  flex-direction: row-reverse !important;\n}\n\n.flex-column-reverse {\n  -ms-flex-direction: column-reverse !important;\n  flex-direction: column-reverse !important;\n}\n\n.flex-grow-0 {\n  -ms-flex-positive: 0 !important;\n  flex-grow: 0 !important;\n}\n\n.flex-grow-1 {\n  -ms-flex-positive: 1 !important;\n  flex-grow: 1 !important;\n}\n\n.flex-shrink-0 {\n  -ms-flex-negative: 0 !important;\n  flex-shrink: 0 !important;\n}\n\n.flex-shrink-1 {\n  -ms-flex-negative: 1 !important;\n  flex-shrink: 1 !important;\n}\n\n.flex-wrap {\n  -ms-flex-wrap: wrap !important;\n  flex-wrap: wrap !important;\n}\n\n.flex-nowrap {\n  -ms-flex-wrap: nowrap !important;\n  flex-wrap: nowrap !important;\n}\n\n.flex-wrap-reverse {\n  -ms-flex-wrap: wrap-reverse !important;\n  flex-wrap: wrap-reverse !important;\n}\n\n.gap-0 {\n  gap: 0 !important;\n}\n\n.gap-1 {\n  gap: 0.25rem !important;\n}\n\n.gap-2 {\n  gap: 0.5rem !important;\n}\n\n.gap-3 {\n  gap: 1rem !important;\n}\n\n.gap-4 {\n  gap: 1.5rem !important;\n}\n\n.gap-5 {\n  gap: 3rem !important;\n}\n\n.justify-content-start {\n  -ms-flex-pack: start !important;\n  justify-content: flex-start !important;\n}\n\n.justify-content-end {\n  -ms-flex-pack: end !important;\n  justify-content: flex-end !important;\n}\n\n.justify-content-center {\n  -ms-flex-pack: center !important;\n  justify-content: center !important;\n}\n\n.justify-content-between {\n  -ms-flex-pack: justify !important;\n  justify-content: space-between !important;\n}\n\n.justify-content-around {\n  -ms-flex-pack: distribute !important;\n  justify-content: space-around !important;\n}\n\n.justify-content-evenly {\n  -ms-flex-pack: space-evenly !important;\n  justify-content: space-evenly !important;\n}\n\n.align-items-start {\n  -ms-flex-align: start !important;\n  align-items: flex-start !important;\n}\n\n.align-items-end {\n  -ms-flex-align: end !important;\n  align-items: flex-end !important;\n}\n\n.align-items-center {\n  -ms-flex-align: center !important;\n  align-items: center !important;\n}\n\n.align-items-baseline {\n  -ms-flex-align: baseline !important;\n  align-items: baseline !important;\n}\n\n.align-items-stretch {\n  -ms-flex-align: stretch !important;\n  align-items: stretch !important;\n}\n\n.align-content-start {\n  -ms-flex-line-pack: start !important;\n  align-content: flex-start !important;\n}\n\n.align-content-end {\n  -ms-flex-line-pack: end !important;\n  align-content: flex-end !important;\n}\n\n.align-content-center {\n  -ms-flex-line-pack: center !important;\n  align-content: center !important;\n}\n\n.align-content-between {\n  -ms-flex-line-pack: justify !important;\n  align-content: space-between !important;\n}\n\n.align-content-around {\n  -ms-flex-line-pack: distribute !important;\n  align-content: space-around !important;\n}\n\n.align-content-stretch {\n  -ms-flex-line-pack: stretch !important;\n  align-content: stretch !important;\n}\n\n.align-self-auto {\n  -ms-flex-item-align: auto !important;\n  align-self: auto !important;\n}\n\n.align-self-start {\n  -ms-flex-item-align: start !important;\n  align-self: flex-start !important;\n}\n\n.align-self-end {\n  -ms-flex-item-align: end !important;\n  align-self: flex-end !important;\n}\n\n.align-self-center {\n  -ms-flex-item-align: center !important;\n  align-self: center !important;\n}\n\n.align-self-baseline {\n  -ms-flex-item-align: baseline !important;\n  align-self: baseline !important;\n}\n\n.align-self-stretch {\n  -ms-flex-item-align: stretch !important;\n  align-self: stretch !important;\n}\n\n.order-first {\n  -ms-flex-order: -1 !important;\n  order: -1 !important;\n}\n\n.order-0 {\n  -ms-flex-order: 0 !important;\n  order: 0 !important;\n}\n\n.order-1 {\n  -ms-flex-order: 1 !important;\n  order: 1 !important;\n}\n\n.order-2 {\n  -ms-flex-order: 2 !important;\n  order: 2 !important;\n}\n\n.order-3 {\n  -ms-flex-order: 3 !important;\n  order: 3 !important;\n}\n\n.order-4 {\n  -ms-flex-order: 4 !important;\n  order: 4 !important;\n}\n\n.order-5 {\n  -ms-flex-order: 5 !important;\n  order: 5 !important;\n}\n\n.order-last {\n  -ms-flex-order: 6 !important;\n  order: 6 !important;\n}\n\n.m-0 {\n  margin: 0 !important;\n}\n\n.m-1 {\n  margin: 0.25rem !important;\n}\n\n.m-2 {\n  margin: 0.5rem !important;\n}\n\n.m-3 {\n  margin: 1rem !important;\n}\n\n.m-4 {\n  margin: 1.5rem !important;\n}\n\n.m-5 {\n  margin: 3rem !important;\n}\n\n.m-auto {\n  margin: auto !important;\n}\n\n.mx-0 {\n  margin-right: 0 !important;\n  margin-left: 0 !important;\n}\n\n.mx-1 {\n  margin-right: 0.25rem !important;\n  margin-left: 0.25rem !important;\n}\n\n.mx-2 {\n  margin-right: 0.5rem !important;\n  margin-left: 0.5rem !important;\n}\n\n.mx-3 {\n  margin-right: 1rem !important;\n  margin-left: 1rem !important;\n}\n\n.mx-4 {\n  margin-right: 1.5rem !important;\n  margin-left: 1.5rem !important;\n}\n\n.mx-5 {\n  margin-right: 3rem !important;\n  margin-left: 3rem !important;\n}\n\n.mx-auto {\n  margin-right: auto !important;\n  margin-left: auto !important;\n}\n\n.my-0 {\n  margin-top: 0 !important;\n  margin-bottom: 0 !important;\n}\n\n.my-1 {\n  margin-top: 0.25rem !important;\n  margin-bottom: 0.25rem !important;\n}\n\n.my-2 {\n  margin-top: 0.5rem !important;\n  margin-bottom: 0.5rem !important;\n}\n\n.my-3 {\n  margin-top: 1rem !important;\n  margin-bottom: 1rem !important;\n}\n\n.my-4 {\n  margin-top: 1.5rem !important;\n  margin-bottom: 1.5rem !important;\n}\n\n.my-5 {\n  margin-top: 3rem !important;\n  margin-bottom: 3rem !important;\n}\n\n.my-auto {\n  margin-top: auto !important;\n  margin-bottom: auto !important;\n}\n\n.mt-0 {\n  margin-top: 0 !important;\n}\n\n.mt-1 {\n  margin-top: 0.25rem !important;\n}\n\n.mt-2 {\n  margin-top: 0.5rem !important;\n}\n\n.mt-3 {\n  margin-top: 1rem !important;\n}\n\n.mt-4 {\n  margin-top: 1.5rem !important;\n}\n\n.mt-5 {\n  margin-top: 3rem !important;\n}\n\n.mt-auto {\n  margin-top: auto !important;\n}\n\n.me-0 {\n  margin-right: 0 !important;\n}\n\n.me-1 {\n  margin-right: 0.25rem !important;\n}\n\n.me-2 {\n  margin-right: 0.5rem !important;\n}\n\n.me-3 {\n  margin-right: 1rem !important;\n}\n\n.me-4 {\n  margin-right: 1.5rem !important;\n}\n\n.me-5 {\n  margin-right: 3rem !important;\n}\n\n.me-auto {\n  margin-right: auto !important;\n}\n\n.mb-0 {\n  margin-bottom: 0 !important;\n}\n\n.mb-1 {\n  margin-bottom: 0.25rem !important;\n}\n\n.mb-2 {\n  margin-bottom: 0.5rem !important;\n}\n\n.mb-3 {\n  margin-bottom: 1rem !important;\n}\n\n.mb-4 {\n  margin-bottom: 1.5rem !important;\n}\n\n.mb-5 {\n  margin-bottom: 3rem !important;\n}\n\n.mb-auto {\n  margin-bottom: auto !important;\n}\n\n.ms-0 {\n  margin-left: 0 !important;\n}\n\n.ms-1 {\n  margin-left: 0.25rem !important;\n}\n\n.ms-2 {\n  margin-left: 0.5rem !important;\n}\n\n.ms-3 {\n  margin-left: 1rem !important;\n}\n\n.ms-4 {\n  margin-left: 1.5rem !important;\n}\n\n.ms-5 {\n  margin-left: 3rem !important;\n}\n\n.ms-auto {\n  margin-left: auto !important;\n}\n\n.p-0 {\n  padding: 0 !important;\n}\n\n.p-1 {\n  padding: 0.25rem !important;\n}\n\n.p-2 {\n  padding: 0.5rem !important;\n}\n\n.p-3 {\n  padding: 1rem !important;\n}\n\n.p-4 {\n  padding: 1.5rem !important;\n}\n\n.p-5 {\n  padding: 3rem !important;\n}\n\n.px-0 {\n  padding-right: 0 !important;\n  padding-left: 0 !important;\n}\n\n.px-1 {\n  padding-right: 0.25rem !important;\n  padding-left: 0.25rem !important;\n}\n\n.px-2 {\n  padding-right: 0.5rem !important;\n  padding-left: 0.5rem !important;\n}\n\n.px-3 {\n  padding-right: 1rem !important;\n  padding-left: 1rem !important;\n}\n\n.px-4 {\n  padding-right: 1.5rem !important;\n  padding-left: 1.5rem !important;\n}\n\n.px-5 {\n  padding-right: 3rem !important;\n  padding-left: 3rem !important;\n}\n\n.py-0 {\n  padding-top: 0 !important;\n  padding-bottom: 0 !important;\n}\n\n.py-1 {\n  padding-top: 0.25rem !important;\n  padding-bottom: 0.25rem !important;\n}\n\n.py-2 {\n  padding-top: 0.5rem !important;\n  padding-bottom: 0.5rem !important;\n}\n\n.py-3 {\n  padding-top: 1rem !important;\n  padding-bottom: 1rem !important;\n}\n\n.py-4 {\n  padding-top: 1.5rem !important;\n  padding-bottom: 1.5rem !important;\n}\n\n.py-5 {\n  padding-top: 3rem !important;\n  padding-bottom: 3rem !important;\n}\n\n.pt-0 {\n  padding-top: 0 !important;\n}\n\n.pt-1 {\n  padding-top: 0.25rem !important;\n}\n\n.pt-2 {\n  padding-top: 0.5rem !important;\n}\n\n.pt-3 {\n  padding-top: 1rem !important;\n}\n\n.pt-4 {\n  padding-top: 1.5rem !important;\n}\n\n.pt-5 {\n  padding-top: 3rem !important;\n}\n\n.pe-0 {\n  padding-right: 0 !important;\n}\n\n.pe-1 {\n  padding-right: 0.25rem !important;\n}\n\n.pe-2 {\n  padding-right: 0.5rem !important;\n}\n\n.pe-3 {\n  padding-right: 1rem !important;\n}\n\n.pe-4 {\n  padding-right: 1.5rem !important;\n}\n\n.pe-5 {\n  padding-right: 3rem !important;\n}\n\n.pb-0 {\n  padding-bottom: 0 !important;\n}\n\n.pb-1 {\n  padding-bottom: 0.25rem !important;\n}\n\n.pb-2 {\n  padding-bottom: 0.5rem !important;\n}\n\n.pb-3 {\n  padding-bottom: 1rem !important;\n}\n\n.pb-4 {\n  padding-bottom: 1.5rem !important;\n}\n\n.pb-5 {\n  padding-bottom: 3rem !important;\n}\n\n.ps-0 {\n  padding-left: 0 !important;\n}\n\n.ps-1 {\n  padding-left: 0.25rem !important;\n}\n\n.ps-2 {\n  padding-left: 0.5rem !important;\n}\n\n.ps-3 {\n  padding-left: 1rem !important;\n}\n\n.ps-4 {\n  padding-left: 1.5rem !important;\n}\n\n.ps-5 {\n  padding-left: 3rem !important;\n}\n\n.font-monospace {\n  font-family: var(--bs-font-monospace) !important;\n}\n\n.fs-1 {\n  font-size: calc(1.425rem + 2.1vw) !important;\n}\n\n.fs-2 {\n  font-size: calc(1.375rem + 1.5vw) !important;\n}\n\n.fs-3 {\n  font-size: calc(1.325rem + 0.9vw) !important;\n}\n\n.fs-4 {\n  font-size: calc(1.275rem + 0.3vw) !important;\n}\n\n.fs-5 {\n  font-size: 1.25rem !important;\n}\n\n.fs-6 {\n  font-size: 1rem !important;\n}\n\n.fst-italic {\n  font-style: italic !important;\n}\n\n.fst-normal {\n  font-style: normal !important;\n}\n\n.fw-light {\n  font-weight: 300 !important;\n}\n\n.fw-lighter {\n  font-weight: lighter !important;\n}\n\n.fw-normal {\n  font-weight: 400 !important;\n}\n\n.fw-bold {\n  font-weight: 700 !important;\n}\n\n.fw-bolder {\n  font-weight: bolder !important;\n}\n\n.lh-1 {\n  line-height: 1 !important;\n}\n\n.lh-sm {\n  line-height: 1.25 !important;\n}\n\n.lh-base {\n  line-height: 1.5 !important;\n}\n\n.lh-lg {\n  line-height: 2 !important;\n}\n\n.text-start {\n  text-align: left !important;\n}\n\n.text-end {\n  text-align: right !important;\n}\n\n.text-center {\n  text-align: center !important;\n}\n\n.text-decoration-none {\n  text-decoration: none !important;\n}\n\n.text-decoration-underline {\n  text-decoration: underline !important;\n}\n\n.text-decoration-line-through {\n  text-decoration: line-through !important;\n}\n\n.text-lowercase {\n  text-transform: lowercase !important;\n}\n\n.text-uppercase {\n  text-transform: uppercase !important;\n}\n\n.text-capitalize {\n  text-transform: capitalize !important;\n}\n\n.text-wrap {\n  white-space: normal !important;\n}\n\n.text-nowrap {\n  white-space: nowrap !important;\n}\n\n/* rtl:begin:remove */\n.text-break {\n  word-wrap: break-word !important;\n  word-break: break-word !important;\n}\n\n/* rtl:end:remove */\n.text-primary {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-primary-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-secondary {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-secondary-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-success {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-success-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-info {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-info-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-warning {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-warning-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-danger {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-danger-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-light {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-light-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-dark {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-dark-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-black {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-black-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-white {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-white-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-body {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-body-color-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-muted {\n  --bs-text-opacity: 1;\n  color: #888 !important;\n}\n\n.text-black-50 {\n  --bs-text-opacity: 1;\n  color: rgba(0, 0, 0, 0.5) !important;\n}\n\n.text-white-50 {\n  --bs-text-opacity: 1;\n  color: rgba(255, 255, 255, 0.5) !important;\n}\n\n.text-reset {\n  --bs-text-opacity: 1;\n  color: inherit !important;\n}\n\n.text-opacity-25 {\n  --bs-text-opacity: 0.25;\n}\n\n.text-opacity-50 {\n  --bs-text-opacity: 0.5;\n}\n\n.text-opacity-75 {\n  --bs-text-opacity: 0.75;\n}\n\n.text-opacity-100 {\n  --bs-text-opacity: 1;\n}\n\n.bg-primary {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-primary-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-secondary {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-secondary-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-success {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-success-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-info {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-info-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-warning {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-warning-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-danger {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-danger-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-light {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-light-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-dark {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-dark-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-black {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-black-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-white {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-white-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-body {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-body-bg-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-transparent {\n  --bs-bg-opacity: 1;\n  background-color: transparent !important;\n}\n\n.bg-opacity-10 {\n  --bs-bg-opacity: 0.1;\n}\n\n.bg-opacity-25 {\n  --bs-bg-opacity: 0.25;\n}\n\n.bg-opacity-50 {\n  --bs-bg-opacity: 0.5;\n}\n\n.bg-opacity-75 {\n  --bs-bg-opacity: 0.75;\n}\n\n.bg-opacity-100 {\n  --bs-bg-opacity: 1;\n}\n\n.bg-gradient {\n  background-image: var(--bs-gradient) !important;\n}\n\n.user-select-all {\n  -webkit-user-select: all !important;\n  -moz-user-select: all !important;\n  user-select: all !important;\n}\n\n.user-select-auto {\n  -webkit-user-select: auto !important;\n  -moz-user-select: auto !important;\n  -ms-user-select: auto !important;\n  user-select: auto !important;\n}\n\n.user-select-none {\n  -webkit-user-select: none !important;\n  -moz-user-select: none !important;\n  -ms-user-select: none !important;\n  user-select: none !important;\n}\n\n.pe-none {\n  pointer-events: none !important;\n}\n\n.pe-auto {\n  pointer-events: auto !important;\n}\n\n.rounded {\n  border-radius: 0.25rem !important;\n}\n\n.rounded-0 {\n  border-radius: 0 !important;\n}\n\n.rounded-1 {\n  border-radius: 0.2rem !important;\n}\n\n.rounded-2 {\n  border-radius: 0.25rem !important;\n}\n\n.rounded-3 {\n  border-radius: 0.3rem !important;\n}\n\n.rounded-circle {\n  border-radius: 50% !important;\n}\n\n.rounded-pill {\n  border-radius: 50rem !important;\n}\n\n.rounded-top {\n  border-top-left-radius: 0.25rem !important;\n  border-top-right-radius: 0.25rem !important;\n}\n\n.rounded-end {\n  border-top-right-radius: 0.25rem !important;\n  border-bottom-right-radius: 0.25rem !important;\n}\n\n.rounded-bottom {\n  border-bottom-right-radius: 0.25rem !important;\n  border-bottom-left-radius: 0.25rem !important;\n}\n\n.rounded-start {\n  border-bottom-left-radius: 0.25rem !important;\n  border-top-left-radius: 0.25rem !important;\n}\n\n.visible {\n  visibility: visible !important;\n}\n\n.invisible {\n  visibility: hidden !important;\n}\n\n@media (min-width: 576px) {\n  .float-sm-start {\n    float: left !important;\n  }\n  .float-sm-end {\n    float: right !important;\n  }\n  .float-sm-none {\n    float: none !important;\n  }\n  .d-sm-inline {\n    display: inline !important;\n  }\n  .d-sm-inline-block {\n    display: inline-block !important;\n  }\n  .d-sm-block {\n    display: block !important;\n  }\n  .d-sm-grid {\n    display: grid !important;\n  }\n  .d-sm-table {\n    display: table !important;\n  }\n  .d-sm-table-row {\n    display: table-row !important;\n  }\n  .d-sm-table-cell {\n    display: table-cell !important;\n  }\n  .d-sm-flex {\n    display: -ms-flexbox !important;\n    display: flex !important;\n  }\n  .d-sm-inline-flex {\n    display: -ms-inline-flexbox !important;\n    display: inline-flex !important;\n  }\n  .d-sm-none {\n    display: none !important;\n  }\n  .flex-sm-fill {\n    -ms-flex: 1 1 auto !important;\n    flex: 1 1 auto !important;\n  }\n  .flex-sm-row {\n    -ms-flex-direction: row !important;\n    flex-direction: row !important;\n  }\n  .flex-sm-column {\n    -ms-flex-direction: column !important;\n    flex-direction: column !important;\n  }\n  .flex-sm-row-reverse {\n    -ms-flex-direction: row-reverse !important;\n    flex-direction: row-reverse !important;\n  }\n  .flex-sm-column-reverse {\n    -ms-flex-direction: column-reverse !important;\n    flex-direction: column-reverse !important;\n  }\n  .flex-sm-grow-0 {\n    -ms-flex-positive: 0 !important;\n    flex-grow: 0 !important;\n  }\n  .flex-sm-grow-1 {\n    -ms-flex-positive: 1 !important;\n    flex-grow: 1 !important;\n  }\n  .flex-sm-shrink-0 {\n    -ms-flex-negative: 0 !important;\n    flex-shrink: 0 !important;\n  }\n  .flex-sm-shrink-1 {\n    -ms-flex-negative: 1 !important;\n    flex-shrink: 1 !important;\n  }\n  .flex-sm-wrap {\n    -ms-flex-wrap: wrap !important;\n    flex-wrap: wrap !important;\n  }\n  .flex-sm-nowrap {\n    -ms-flex-wrap: nowrap !important;\n    flex-wrap: nowrap !important;\n  }\n  .flex-sm-wrap-reverse {\n    -ms-flex-wrap: wrap-reverse !important;\n    flex-wrap: wrap-reverse !important;\n  }\n  .gap-sm-0 {\n    gap: 0 !important;\n  }\n  .gap-sm-1 {\n    gap: 0.25rem !important;\n  }\n  .gap-sm-2 {\n    gap: 0.5rem !important;\n  }\n  .gap-sm-3 {\n    gap: 1rem !important;\n  }\n  .gap-sm-4 {\n    gap: 1.5rem !important;\n  }\n  .gap-sm-5 {\n    gap: 3rem !important;\n  }\n  .justify-content-sm-start {\n    -ms-flex-pack: start !important;\n    justify-content: flex-start !important;\n  }\n  .justify-content-sm-end {\n    -ms-flex-pack: end !important;\n    justify-content: flex-end !important;\n  }\n  .justify-content-sm-center {\n    -ms-flex-pack: center !important;\n    justify-content: center !important;\n  }\n  .justify-content-sm-between {\n    -ms-flex-pack: justify !important;\n    justify-content: space-between !important;\n  }\n  .justify-content-sm-around {\n    -ms-flex-pack: distribute !important;\n    justify-content: space-around !important;\n  }\n  .justify-content-sm-evenly {\n    -ms-flex-pack: space-evenly !important;\n    justify-content: space-evenly !important;\n  }\n  .align-items-sm-start {\n    -ms-flex-align: start !important;\n    align-items: flex-start !important;\n  }\n  .align-items-sm-end {\n    -ms-flex-align: end !important;\n    align-items: flex-end !important;\n  }\n  .align-items-sm-center {\n    -ms-flex-align: center !important;\n    align-items: center !important;\n  }\n  .align-items-sm-baseline {\n    -ms-flex-align: baseline !important;\n    align-items: baseline !important;\n  }\n  .align-items-sm-stretch {\n    -ms-flex-align: stretch !important;\n    align-items: stretch !important;\n  }\n  .align-content-sm-start {\n    -ms-flex-line-pack: start !important;\n    align-content: flex-start !important;\n  }\n  .align-content-sm-end {\n    -ms-flex-line-pack: end !important;\n    align-content: flex-end !important;\n  }\n  .align-content-sm-center {\n    -ms-flex-line-pack: center !important;\n    align-content: center !important;\n  }\n  .align-content-sm-between {\n    -ms-flex-line-pack: justify !important;\n    align-content: space-between !important;\n  }\n  .align-content-sm-around {\n    -ms-flex-line-pack: distribute !important;\n    align-content: space-around !important;\n  }\n  .align-content-sm-stretch {\n    -ms-flex-line-pack: stretch !important;\n    align-content: stretch !important;\n  }\n  .align-self-sm-auto {\n    -ms-flex-item-align: auto !important;\n    align-self: auto !important;\n  }\n  .align-self-sm-start {\n    -ms-flex-item-align: start !important;\n    align-self: flex-start !important;\n  }\n  .align-self-sm-end {\n    -ms-flex-item-align: end !important;\n    align-self: flex-end !important;\n  }\n  .align-self-sm-center {\n    -ms-flex-item-align: center !important;\n    align-self: center !important;\n  }\n  .align-self-sm-baseline {\n    -ms-flex-item-align: baseline !important;\n    align-self: baseline !important;\n  }\n  .align-self-sm-stretch {\n    -ms-flex-item-align: stretch !important;\n    align-self: stretch !important;\n  }\n  .order-sm-first {\n    -ms-flex-order: -1 !important;\n    order: -1 !important;\n  }\n  .order-sm-0 {\n    -ms-flex-order: 0 !important;\n    order: 0 !important;\n  }\n  .order-sm-1 {\n    -ms-flex-order: 1 !important;\n    order: 1 !important;\n  }\n  .order-sm-2 {\n    -ms-flex-order: 2 !important;\n    order: 2 !important;\n  }\n  .order-sm-3 {\n    -ms-flex-order: 3 !important;\n    order: 3 !important;\n  }\n  .order-sm-4 {\n    -ms-flex-order: 4 !important;\n    order: 4 !important;\n  }\n  .order-sm-5 {\n    -ms-flex-order: 5 !important;\n    order: 5 !important;\n  }\n  .order-sm-last {\n    -ms-flex-order: 6 !important;\n    order: 6 !important;\n  }\n  .m-sm-0 {\n    margin: 0 !important;\n  }\n  .m-sm-1 {\n    margin: 0.25rem !important;\n  }\n  .m-sm-2 {\n    margin: 0.5rem !important;\n  }\n  .m-sm-3 {\n    margin: 1rem !important;\n  }\n  .m-sm-4 {\n    margin: 1.5rem !important;\n  }\n  .m-sm-5 {\n    margin: 3rem !important;\n  }\n  .m-sm-auto {\n    margin: auto !important;\n  }\n  .mx-sm-0 {\n    margin-right: 0 !important;\n    margin-left: 0 !important;\n  }\n  .mx-sm-1 {\n    margin-right: 0.25rem !important;\n    margin-left: 0.25rem !important;\n  }\n  .mx-sm-2 {\n    margin-right: 0.5rem !important;\n    margin-left: 0.5rem !important;\n  }\n  .mx-sm-3 {\n    margin-right: 1rem !important;\n    margin-left: 1rem !important;\n  }\n  .mx-sm-4 {\n    margin-right: 1.5rem !important;\n    margin-left: 1.5rem !important;\n  }\n  .mx-sm-5 {\n    margin-right: 3rem !important;\n    margin-left: 3rem !important;\n  }\n  .mx-sm-auto {\n    margin-right: auto !important;\n    margin-left: auto !important;\n  }\n  .my-sm-0 {\n    margin-top: 0 !important;\n    margin-bottom: 0 !important;\n  }\n  .my-sm-1 {\n    margin-top: 0.25rem !important;\n    margin-bottom: 0.25rem !important;\n  }\n  .my-sm-2 {\n    margin-top: 0.5rem !important;\n    margin-bottom: 0.5rem !important;\n  }\n  .my-sm-3 {\n    margin-top: 1rem !important;\n    margin-bottom: 1rem !important;\n  }\n  .my-sm-4 {\n    margin-top: 1.5rem !important;\n    margin-bottom: 1.5rem !important;\n  }\n  .my-sm-5 {\n    margin-top: 3rem !important;\n    margin-bottom: 3rem !important;\n  }\n  .my-sm-auto {\n    margin-top: auto !important;\n    margin-bottom: auto !important;\n  }\n  .mt-sm-0 {\n    margin-top: 0 !important;\n  }\n  .mt-sm-1 {\n    margin-top: 0.25rem !important;\n  }\n  .mt-sm-2 {\n    margin-top: 0.5rem !important;\n  }\n  .mt-sm-3 {\n    margin-top: 1rem !important;\n  }\n  .mt-sm-4 {\n    margin-top: 1.5rem !important;\n  }\n  .mt-sm-5 {\n    margin-top: 3rem !important;\n  }\n  .mt-sm-auto {\n    margin-top: auto !important;\n  }\n  .me-sm-0 {\n    margin-right: 0 !important;\n  }\n  .me-sm-1 {\n    margin-right: 0.25rem !important;\n  }\n  .me-sm-2 {\n    margin-right: 0.5rem !important;\n  }\n  .me-sm-3 {\n    margin-right: 1rem !important;\n  }\n  .me-sm-4 {\n    margin-right: 1.5rem !important;\n  }\n  .me-sm-5 {\n    margin-right: 3rem !important;\n  }\n  .me-sm-auto {\n    margin-right: auto !important;\n  }\n  .mb-sm-0 {\n    margin-bottom: 0 !important;\n  }\n  .mb-sm-1 {\n    margin-bottom: 0.25rem !important;\n  }\n  .mb-sm-2 {\n    margin-bottom: 0.5rem !important;\n  }\n  .mb-sm-3 {\n    margin-bottom: 1rem !important;\n  }\n  .mb-sm-4 {\n    margin-bottom: 1.5rem !important;\n  }\n  .mb-sm-5 {\n    margin-bottom: 3rem !important;\n  }\n  .mb-sm-auto {\n    margin-bottom: auto !important;\n  }\n  .ms-sm-0 {\n    margin-left: 0 !important;\n  }\n  .ms-sm-1 {\n    margin-left: 0.25rem !important;\n  }\n  .ms-sm-2 {\n    margin-left: 0.5rem !important;\n  }\n  .ms-sm-3 {\n    margin-left: 1rem !important;\n  }\n  .ms-sm-4 {\n    margin-left: 1.5rem !important;\n  }\n  .ms-sm-5 {\n    margin-left: 3rem !important;\n  }\n  .ms-sm-auto {\n    margin-left: auto !important;\n  }\n  .p-sm-0 {\n    padding: 0 !important;\n  }\n  .p-sm-1 {\n    padding: 0.25rem !important;\n  }\n  .p-sm-2 {\n    padding: 0.5rem !important;\n  }\n  .p-sm-3 {\n    padding: 1rem !important;\n  }\n  .p-sm-4 {\n    padding: 1.5rem !important;\n  }\n  .p-sm-5 {\n    padding: 3rem !important;\n  }\n  .px-sm-0 {\n    padding-right: 0 !important;\n    padding-left: 0 !important;\n  }\n  .px-sm-1 {\n    padding-right: 0.25rem !important;\n    padding-left: 0.25rem !important;\n  }\n  .px-sm-2 {\n    padding-right: 0.5rem !important;\n    padding-left: 0.5rem !important;\n  }\n  .px-sm-3 {\n    padding-right: 1rem !important;\n    padding-left: 1rem !important;\n  }\n  .px-sm-4 {\n    padding-right: 1.5rem !important;\n    padding-left: 1.5rem !important;\n  }\n  .px-sm-5 {\n    padding-right: 3rem !important;\n    padding-left: 3rem !important;\n  }\n  .py-sm-0 {\n    padding-top: 0 !important;\n    padding-bottom: 0 !important;\n  }\n  .py-sm-1 {\n    padding-top: 0.25rem !important;\n    padding-bottom: 0.25rem !important;\n  }\n  .py-sm-2 {\n    padding-top: 0.5rem !important;\n    padding-bottom: 0.5rem !important;\n  }\n  .py-sm-3 {\n    padding-top: 1rem !important;\n    padding-bottom: 1rem !important;\n  }\n  .py-sm-4 {\n    padding-top: 1.5rem !important;\n    padding-bottom: 1.5rem !important;\n  }\n  .py-sm-5 {\n    padding-top: 3rem !important;\n    padding-bottom: 3rem !important;\n  }\n  .pt-sm-0 {\n    padding-top: 0 !important;\n  }\n  .pt-sm-1 {\n    padding-top: 0.25rem !important;\n  }\n  .pt-sm-2 {\n    padding-top: 0.5rem !important;\n  }\n  .pt-sm-3 {\n    padding-top: 1rem !important;\n  }\n  .pt-sm-4 {\n    padding-top: 1.5rem !important;\n  }\n  .pt-sm-5 {\n    padding-top: 3rem !important;\n  }\n  .pe-sm-0 {\n    padding-right: 0 !important;\n  }\n  .pe-sm-1 {\n    padding-right: 0.25rem !important;\n  }\n  .pe-sm-2 {\n    padding-right: 0.5rem !important;\n  }\n  .pe-sm-3 {\n    padding-right: 1rem !important;\n  }\n  .pe-sm-4 {\n    padding-right: 1.5rem !important;\n  }\n  .pe-sm-5 {\n    padding-right: 3rem !important;\n  }\n  .pb-sm-0 {\n    padding-bottom: 0 !important;\n  }\n  .pb-sm-1 {\n    padding-bottom: 0.25rem !important;\n  }\n  .pb-sm-2 {\n    padding-bottom: 0.5rem !important;\n  }\n  .pb-sm-3 {\n    padding-bottom: 1rem !important;\n  }\n  .pb-sm-4 {\n    padding-bottom: 1.5rem !important;\n  }\n  .pb-sm-5 {\n    padding-bottom: 3rem !important;\n  }\n  .ps-sm-0 {\n    padding-left: 0 !important;\n  }\n  .ps-sm-1 {\n    padding-left: 0.25rem !important;\n  }\n  .ps-sm-2 {\n    padding-left: 0.5rem !important;\n  }\n  .ps-sm-3 {\n    padding-left: 1rem !important;\n  }\n  .ps-sm-4 {\n    padding-left: 1.5rem !important;\n  }\n  .ps-sm-5 {\n    padding-left: 3rem !important;\n  }\n  .text-sm-start {\n    text-align: left !important;\n  }\n  .text-sm-end {\n    text-align: right !important;\n  }\n  .text-sm-center {\n    text-align: center !important;\n  }\n}\n\n@media (min-width: 768px) {\n  .float-md-start {\n    float: left !important;\n  }\n  .float-md-end {\n    float: right !important;\n  }\n  .float-md-none {\n    float: none !important;\n  }\n  .d-md-inline {\n    display: inline !important;\n  }\n  .d-md-inline-block {\n    display: inline-block !important;\n  }\n  .d-md-block {\n    display: block !important;\n  }\n  .d-md-grid {\n    display: grid !important;\n  }\n  .d-md-table {\n    display: table !important;\n  }\n  .d-md-table-row {\n    display: table-row !important;\n  }\n  .d-md-table-cell {\n    display: table-cell !important;\n  }\n  .d-md-flex {\n    display: -ms-flexbox !important;\n    display: flex !important;\n  }\n  .d-md-inline-flex {\n    display: -ms-inline-flexbox !important;\n    display: inline-flex !important;\n  }\n  .d-md-none {\n    display: none !important;\n  }\n  .flex-md-fill {\n    -ms-flex: 1 1 auto !important;\n    flex: 1 1 auto !important;\n  }\n  .flex-md-row {\n    -ms-flex-direction: row !important;\n    flex-direction: row !important;\n  }\n  .flex-md-column {\n    -ms-flex-direction: column !important;\n    flex-direction: column !important;\n  }\n  .flex-md-row-reverse {\n    -ms-flex-direction: row-reverse !important;\n    flex-direction: row-reverse !important;\n  }\n  .flex-md-column-reverse {\n    -ms-flex-direction: column-reverse !important;\n    flex-direction: column-reverse !important;\n  }\n  .flex-md-grow-0 {\n    -ms-flex-positive: 0 !important;\n    flex-grow: 0 !important;\n  }\n  .flex-md-grow-1 {\n    -ms-flex-positive: 1 !important;\n    flex-grow: 1 !important;\n  }\n  .flex-md-shrink-0 {\n    -ms-flex-negative: 0 !important;\n    flex-shrink: 0 !important;\n  }\n  .flex-md-shrink-1 {\n    -ms-flex-negative: 1 !important;\n    flex-shrink: 1 !important;\n  }\n  .flex-md-wrap {\n    -ms-flex-wrap: wrap !important;\n    flex-wrap: wrap !important;\n  }\n  .flex-md-nowrap {\n    -ms-flex-wrap: nowrap !important;\n    flex-wrap: nowrap !important;\n  }\n  .flex-md-wrap-reverse {\n    -ms-flex-wrap: wrap-reverse !important;\n    flex-wrap: wrap-reverse !important;\n  }\n  .gap-md-0 {\n    gap: 0 !important;\n  }\n  .gap-md-1 {\n    gap: 0.25rem !important;\n  }\n  .gap-md-2 {\n    gap: 0.5rem !important;\n  }\n  .gap-md-3 {\n    gap: 1rem !important;\n  }\n  .gap-md-4 {\n    gap: 1.5rem !important;\n  }\n  .gap-md-5 {\n    gap: 3rem !important;\n  }\n  .justify-content-md-start {\n    -ms-flex-pack: start !important;\n    justify-content: flex-start !important;\n  }\n  .justify-content-md-end {\n    -ms-flex-pack: end !important;\n    justify-content: flex-end !important;\n  }\n  .justify-content-md-center {\n    -ms-flex-pack: center !important;\n    justify-content: center !important;\n  }\n  .justify-content-md-between {\n    -ms-flex-pack: justify !important;\n    justify-content: space-between !important;\n  }\n  .justify-content-md-around {\n    -ms-flex-pack: distribute !important;\n    justify-content: space-around !important;\n  }\n  .justify-content-md-evenly {\n    -ms-flex-pack: space-evenly !important;\n    justify-content: space-evenly !important;\n  }\n  .align-items-md-start {\n    -ms-flex-align: start !important;\n    align-items: flex-start !important;\n  }\n  .align-items-md-end {\n    -ms-flex-align: end !important;\n    align-items: flex-end !important;\n  }\n  .align-items-md-center {\n    -ms-flex-align: center !important;\n    align-items: center !important;\n  }\n  .align-items-md-baseline {\n    -ms-flex-align: baseline !important;\n    align-items: baseline !important;\n  }\n  .align-items-md-stretch {\n    -ms-flex-align: stretch !important;\n    align-items: stretch !important;\n  }\n  .align-content-md-start {\n    -ms-flex-line-pack: start !important;\n    align-content: flex-start !important;\n  }\n  .align-content-md-end {\n    -ms-flex-line-pack: end !important;\n    align-content: flex-end !important;\n  }\n  .align-content-md-center {\n    -ms-flex-line-pack: center !important;\n    align-content: center !important;\n  }\n  .align-content-md-between {\n    -ms-flex-line-pack: justify !important;\n    align-content: space-between !important;\n  }\n  .align-content-md-around {\n    -ms-flex-line-pack: distribute !important;\n    align-content: space-around !important;\n  }\n  .align-content-md-stretch {\n    -ms-flex-line-pack: stretch !important;\n    align-content: stretch !important;\n  }\n  .align-self-md-auto {\n    -ms-flex-item-align: auto !important;\n    align-self: auto !important;\n  }\n  .align-self-md-start {\n    -ms-flex-item-align: start !important;\n    align-self: flex-start !important;\n  }\n  .align-self-md-end {\n    -ms-flex-item-align: end !important;\n    align-self: flex-end !important;\n  }\n  .align-self-md-center {\n    -ms-flex-item-align: center !important;\n    align-self: center !important;\n  }\n  .align-self-md-baseline {\n    -ms-flex-item-align: baseline !important;\n    align-self: baseline !important;\n  }\n  .align-self-md-stretch {\n    -ms-flex-item-align: stretch !important;\n    align-self: stretch !important;\n  }\n  .order-md-first {\n    -ms-flex-order: -1 !important;\n    order: -1 !important;\n  }\n  .order-md-0 {\n    -ms-flex-order: 0 !important;\n    order: 0 !important;\n  }\n  .order-md-1 {\n    -ms-flex-order: 1 !important;\n    order: 1 !important;\n  }\n  .order-md-2 {\n    -ms-flex-order: 2 !important;\n    order: 2 !important;\n  }\n  .order-md-3 {\n    -ms-flex-order: 3 !important;\n    order: 3 !important;\n  }\n  .order-md-4 {\n    -ms-flex-order: 4 !important;\n    order: 4 !important;\n  }\n  .order-md-5 {\n    -ms-flex-order: 5 !important;\n    order: 5 !important;\n  }\n  .order-md-last {\n    -ms-flex-order: 6 !important;\n    order: 6 !important;\n  }\n  .m-md-0 {\n    margin: 0 !important;\n  }\n  .m-md-1 {\n    margin: 0.25rem !important;\n  }\n  .m-md-2 {\n    margin: 0.5rem !important;\n  }\n  .m-md-3 {\n    margin: 1rem !important;\n  }\n  .m-md-4 {\n    margin: 1.5rem !important;\n  }\n  .m-md-5 {\n    margin: 3rem !important;\n  }\n  .m-md-auto {\n    margin: auto !important;\n  }\n  .mx-md-0 {\n    margin-right: 0 !important;\n    margin-left: 0 !important;\n  }\n  .mx-md-1 {\n    margin-right: 0.25rem !important;\n    margin-left: 0.25rem !important;\n  }\n  .mx-md-2 {\n    margin-right: 0.5rem !important;\n    margin-left: 0.5rem !important;\n  }\n  .mx-md-3 {\n    margin-right: 1rem !important;\n    margin-left: 1rem !important;\n  }\n  .mx-md-4 {\n    margin-right: 1.5rem !important;\n    margin-left: 1.5rem !important;\n  }\n  .mx-md-5 {\n    margin-right: 3rem !important;\n    margin-left: 3rem !important;\n  }\n  .mx-md-auto {\n    margin-right: auto !important;\n    margin-left: auto !important;\n  }\n  .my-md-0 {\n    margin-top: 0 !important;\n    margin-bottom: 0 !important;\n  }\n  .my-md-1 {\n    margin-top: 0.25rem !important;\n    margin-bottom: 0.25rem !important;\n  }\n  .my-md-2 {\n    margin-top: 0.5rem !important;\n    margin-bottom: 0.5rem !important;\n  }\n  .my-md-3 {\n    margin-top: 1rem !important;\n    margin-bottom: 1rem !important;\n  }\n  .my-md-4 {\n    margin-top: 1.5rem !important;\n    margin-bottom: 1.5rem !important;\n  }\n  .my-md-5 {\n    margin-top: 3rem !important;\n    margin-bottom: 3rem !important;\n  }\n  .my-md-auto {\n    margin-top: auto !important;\n    margin-bottom: auto !important;\n  }\n  .mt-md-0 {\n    margin-top: 0 !important;\n  }\n  .mt-md-1 {\n    margin-top: 0.25rem !important;\n  }\n  .mt-md-2 {\n    margin-top: 0.5rem !important;\n  }\n  .mt-md-3 {\n    margin-top: 1rem !important;\n  }\n  .mt-md-4 {\n    margin-top: 1.5rem !important;\n  }\n  .mt-md-5 {\n    margin-top: 3rem !important;\n  }\n  .mt-md-auto {\n    margin-top: auto !important;\n  }\n  .me-md-0 {\n    margin-right: 0 !important;\n  }\n  .me-md-1 {\n    margin-right: 0.25rem !important;\n  }\n  .me-md-2 {\n    margin-right: 0.5rem !important;\n  }\n  .me-md-3 {\n    margin-right: 1rem !important;\n  }\n  .me-md-4 {\n    margin-right: 1.5rem !important;\n  }\n  .me-md-5 {\n    margin-right: 3rem !important;\n  }\n  .me-md-auto {\n    margin-right: auto !important;\n  }\n  .mb-md-0 {\n    margin-bottom: 0 !important;\n  }\n  .mb-md-1 {\n    margin-bottom: 0.25rem !important;\n  }\n  .mb-md-2 {\n    margin-bottom: 0.5rem !important;\n  }\n  .mb-md-3 {\n    margin-bottom: 1rem !important;\n  }\n  .mb-md-4 {\n    margin-bottom: 1.5rem !important;\n  }\n  .mb-md-5 {\n    margin-bottom: 3rem !important;\n  }\n  .mb-md-auto {\n    margin-bottom: auto !important;\n  }\n  .ms-md-0 {\n    margin-left: 0 !important;\n  }\n  .ms-md-1 {\n    margin-left: 0.25rem !important;\n  }\n  .ms-md-2 {\n    margin-left: 0.5rem !important;\n  }\n  .ms-md-3 {\n    margin-left: 1rem !important;\n  }\n  .ms-md-4 {\n    margin-left: 1.5rem !important;\n  }\n  .ms-md-5 {\n    margin-left: 3rem !important;\n  }\n  .ms-md-auto {\n    margin-left: auto !important;\n  }\n  .p-md-0 {\n    padding: 0 !important;\n  }\n  .p-md-1 {\n    padding: 0.25rem !important;\n  }\n  .p-md-2 {\n    padding: 0.5rem !important;\n  }\n  .p-md-3 {\n    padding: 1rem !important;\n  }\n  .p-md-4 {\n    padding: 1.5rem !important;\n  }\n  .p-md-5 {\n    padding: 3rem !important;\n  }\n  .px-md-0 {\n    padding-right: 0 !important;\n    padding-left: 0 !important;\n  }\n  .px-md-1 {\n    padding-right: 0.25rem !important;\n    padding-left: 0.25rem !important;\n  }\n  .px-md-2 {\n    padding-right: 0.5rem !important;\n    padding-left: 0.5rem !important;\n  }\n  .px-md-3 {\n    padding-right: 1rem !important;\n    padding-left: 1rem !important;\n  }\n  .px-md-4 {\n    padding-right: 1.5rem !important;\n    padding-left: 1.5rem !important;\n  }\n  .px-md-5 {\n    padding-right: 3rem !important;\n    padding-left: 3rem !important;\n  }\n  .py-md-0 {\n    padding-top: 0 !important;\n    padding-bottom: 0 !important;\n  }\n  .py-md-1 {\n    padding-top: 0.25rem !important;\n    padding-bottom: 0.25rem !important;\n  }\n  .py-md-2 {\n    padding-top: 0.5rem !important;\n    padding-bottom: 0.5rem !important;\n  }\n  .py-md-3 {\n    padding-top: 1rem !important;\n    padding-bottom: 1rem !important;\n  }\n  .py-md-4 {\n    padding-top: 1.5rem !important;\n    padding-bottom: 1.5rem !important;\n  }\n  .py-md-5 {\n    padding-top: 3rem !important;\n    padding-bottom: 3rem !important;\n  }\n  .pt-md-0 {\n    padding-top: 0 !important;\n  }\n  .pt-md-1 {\n    padding-top: 0.25rem !important;\n  }\n  .pt-md-2 {\n    padding-top: 0.5rem !important;\n  }\n  .pt-md-3 {\n    padding-top: 1rem !important;\n  }\n  .pt-md-4 {\n    padding-top: 1.5rem !important;\n  }\n  .pt-md-5 {\n    padding-top: 3rem !important;\n  }\n  .pe-md-0 {\n    padding-right: 0 !important;\n  }\n  .pe-md-1 {\n    padding-right: 0.25rem !important;\n  }\n  .pe-md-2 {\n    padding-right: 0.5rem !important;\n  }\n  .pe-md-3 {\n    padding-right: 1rem !important;\n  }\n  .pe-md-4 {\n    padding-right: 1.5rem !important;\n  }\n  .pe-md-5 {\n    padding-right: 3rem !important;\n  }\n  .pb-md-0 {\n    padding-bottom: 0 !important;\n  }\n  .pb-md-1 {\n    padding-bottom: 0.25rem !important;\n  }\n  .pb-md-2 {\n    padding-bottom: 0.5rem !important;\n  }\n  .pb-md-3 {\n    padding-bottom: 1rem !important;\n  }\n  .pb-md-4 {\n    padding-bottom: 1.5rem !important;\n  }\n  .pb-md-5 {\n    padding-bottom: 3rem !important;\n  }\n  .ps-md-0 {\n    padding-left: 0 !important;\n  }\n  .ps-md-1 {\n    padding-left: 0.25rem !important;\n  }\n  .ps-md-2 {\n    padding-left: 0.5rem !important;\n  }\n  .ps-md-3 {\n    padding-left: 1rem !important;\n  }\n  .ps-md-4 {\n    padding-left: 1.5rem !important;\n  }\n  .ps-md-5 {\n    padding-left: 3rem !important;\n  }\n  .text-md-start {\n    text-align: left !important;\n  }\n  .text-md-end {\n    text-align: right !important;\n  }\n  .text-md-center {\n    text-align: center !important;\n  }\n}\n\n@media (min-width: 992px) {\n  .float-lg-start {\n    float: left !important;\n  }\n  .float-lg-end {\n    float: right !important;\n  }\n  .float-lg-none {\n    float: none !important;\n  }\n  .d-lg-inline {\n    display: inline !important;\n  }\n  .d-lg-inline-block {\n    display: inline-block !important;\n  }\n  .d-lg-block {\n    display: block !important;\n  }\n  .d-lg-grid {\n    display: grid !important;\n  }\n  .d-lg-table {\n    display: table !important;\n  }\n  .d-lg-table-row {\n    display: table-row !important;\n  }\n  .d-lg-table-cell {\n    display: table-cell !important;\n  }\n  .d-lg-flex {\n    display: -ms-flexbox !important;\n    display: flex !important;\n  }\n  .d-lg-inline-flex {\n    display: -ms-inline-flexbox !important;\n    display: inline-flex !important;\n  }\n  .d-lg-none {\n    display: none !important;\n  }\n  .flex-lg-fill {\n    -ms-flex: 1 1 auto !important;\n    flex: 1 1 auto !important;\n  }\n  .flex-lg-row {\n    -ms-flex-direction: row !important;\n    flex-direction: row !important;\n  }\n  .flex-lg-column {\n    -ms-flex-direction: column !important;\n    flex-direction: column !important;\n  }\n  .flex-lg-row-reverse {\n    -ms-flex-direction: row-reverse !important;\n    flex-direction: row-reverse !important;\n  }\n  .flex-lg-column-reverse {\n    -ms-flex-direction: column-reverse !important;\n    flex-direction: column-reverse !important;\n  }\n  .flex-lg-grow-0 {\n    -ms-flex-positive: 0 !important;\n    flex-grow: 0 !important;\n  }\n  .flex-lg-grow-1 {\n    -ms-flex-positive: 1 !important;\n    flex-grow: 1 !important;\n  }\n  .flex-lg-shrink-0 {\n    -ms-flex-negative: 0 !important;\n    flex-shrink: 0 !important;\n  }\n  .flex-lg-shrink-1 {\n    -ms-flex-negative: 1 !important;\n    flex-shrink: 1 !important;\n  }\n  .flex-lg-wrap {\n    -ms-flex-wrap: wrap !important;\n    flex-wrap: wrap !important;\n  }\n  .flex-lg-nowrap {\n    -ms-flex-wrap: nowrap !important;\n    flex-wrap: nowrap !important;\n  }\n  .flex-lg-wrap-reverse {\n    -ms-flex-wrap: wrap-reverse !important;\n    flex-wrap: wrap-reverse !important;\n  }\n  .gap-lg-0 {\n    gap: 0 !important;\n  }\n  .gap-lg-1 {\n    gap: 0.25rem !important;\n  }\n  .gap-lg-2 {\n    gap: 0.5rem !important;\n  }\n  .gap-lg-3 {\n    gap: 1rem !important;\n  }\n  .gap-lg-4 {\n    gap: 1.5rem !important;\n  }\n  .gap-lg-5 {\n    gap: 3rem !important;\n  }\n  .justify-content-lg-start {\n    -ms-flex-pack: start !important;\n    justify-content: flex-start !important;\n  }\n  .justify-content-lg-end {\n    -ms-flex-pack: end !important;\n    justify-content: flex-end !important;\n  }\n  .justify-content-lg-center {\n    -ms-flex-pack: center !important;\n    justify-content: center !important;\n  }\n  .justify-content-lg-between {\n    -ms-flex-pack: justify !important;\n    justify-content: space-between !important;\n  }\n  .justify-content-lg-around {\n    -ms-flex-pack: distribute !important;\n    justify-content: space-around !important;\n  }\n  .justify-content-lg-evenly {\n    -ms-flex-pack: space-evenly !important;\n    justify-content: space-evenly !important;\n  }\n  .align-items-lg-start {\n    -ms-flex-align: start !important;\n    align-items: flex-start !important;\n  }\n  .align-items-lg-end {\n    -ms-flex-align: end !important;\n    align-items: flex-end !important;\n  }\n  .align-items-lg-center {\n    -ms-flex-align: center !important;\n    align-items: center !important;\n  }\n  .align-items-lg-baseline {\n    -ms-flex-align: baseline !important;\n    align-items: baseline !important;\n  }\n  .align-items-lg-stretch {\n    -ms-flex-align: stretch !important;\n    align-items: stretch !important;\n  }\n  .align-content-lg-start {\n    -ms-flex-line-pack: start !important;\n    align-content: flex-start !important;\n  }\n  .align-content-lg-end {\n    -ms-flex-line-pack: end !important;\n    align-content: flex-end !important;\n  }\n  .align-content-lg-center {\n    -ms-flex-line-pack: center !important;\n    align-content: center !important;\n  }\n  .align-content-lg-between {\n    -ms-flex-line-pack: justify !important;\n    align-content: space-between !important;\n  }\n  .align-content-lg-around {\n    -ms-flex-line-pack: distribute !important;\n    align-content: space-around !important;\n  }\n  .align-content-lg-stretch {\n    -ms-flex-line-pack: stretch !important;\n    align-content: stretch !important;\n  }\n  .align-self-lg-auto {\n    -ms-flex-item-align: auto !important;\n    align-self: auto !important;\n  }\n  .align-self-lg-start {\n    -ms-flex-item-align: start !important;\n    align-self: flex-start !important;\n  }\n  .align-self-lg-end {\n    -ms-flex-item-align: end !important;\n    align-self: flex-end !important;\n  }\n  .align-self-lg-center {\n    -ms-flex-item-align: center !important;\n    align-self: center !important;\n  }\n  .align-self-lg-baseline {\n    -ms-flex-item-align: baseline !important;\n    align-self: baseline !important;\n  }\n  .align-self-lg-stretch {\n    -ms-flex-item-align: stretch !important;\n    align-self: stretch !important;\n  }\n  .order-lg-first {\n    -ms-flex-order: -1 !important;\n    order: -1 !important;\n  }\n  .order-lg-0 {\n    -ms-flex-order: 0 !important;\n    order: 0 !important;\n  }\n  .order-lg-1 {\n    -ms-flex-order: 1 !important;\n    order: 1 !important;\n  }\n  .order-lg-2 {\n    -ms-flex-order: 2 !important;\n    order: 2 !important;\n  }\n  .order-lg-3 {\n    -ms-flex-order: 3 !important;\n    order: 3 !important;\n  }\n  .order-lg-4 {\n    -ms-flex-order: 4 !important;\n    order: 4 !important;\n  }\n  .order-lg-5 {\n    -ms-flex-order: 5 !important;\n    order: 5 !important;\n  }\n  .order-lg-last {\n    -ms-flex-order: 6 !important;\n    order: 6 !important;\n  }\n  .m-lg-0 {\n    margin: 0 !important;\n  }\n  .m-lg-1 {\n    margin: 0.25rem !important;\n  }\n  .m-lg-2 {\n    margin: 0.5rem !important;\n  }\n  .m-lg-3 {\n    margin: 1rem !important;\n  }\n  .m-lg-4 {\n    margin: 1.5rem !important;\n  }\n  .m-lg-5 {\n    margin: 3rem !important;\n  }\n  .m-lg-auto {\n    margin: auto !important;\n  }\n  .mx-lg-0 {\n    margin-right: 0 !important;\n    margin-left: 0 !important;\n  }\n  .mx-lg-1 {\n    margin-right: 0.25rem !important;\n    margin-left: 0.25rem !important;\n  }\n  .mx-lg-2 {\n    margin-right: 0.5rem !important;\n    margin-left: 0.5rem !important;\n  }\n  .mx-lg-3 {\n    margin-right: 1rem !important;\n    margin-left: 1rem !important;\n  }\n  .mx-lg-4 {\n    margin-right: 1.5rem !important;\n    margin-left: 1.5rem !important;\n  }\n  .mx-lg-5 {\n    margin-right: 3rem !important;\n    margin-left: 3rem !important;\n  }\n  .mx-lg-auto {\n    margin-right: auto !important;\n    margin-left: auto !important;\n  }\n  .my-lg-0 {\n    margin-top: 0 !important;\n    margin-bottom: 0 !important;\n  }\n  .my-lg-1 {\n    margin-top: 0.25rem !important;\n    margin-bottom: 0.25rem !important;\n  }\n  .my-lg-2 {\n    margin-top: 0.5rem !important;\n    margin-bottom: 0.5rem !important;\n  }\n  .my-lg-3 {\n    margin-top: 1rem !important;\n    margin-bottom: 1rem !important;\n  }\n  .my-lg-4 {\n    margin-top: 1.5rem !important;\n    margin-bottom: 1.5rem !important;\n  }\n  .my-lg-5 {\n    margin-top: 3rem !important;\n    margin-bottom: 3rem !important;\n  }\n  .my-lg-auto {\n    margin-top: auto !important;\n    margin-bottom: auto !important;\n  }\n  .mt-lg-0 {\n    margin-top: 0 !important;\n  }\n  .mt-lg-1 {\n    margin-top: 0.25rem !important;\n  }\n  .mt-lg-2 {\n    margin-top: 0.5rem !important;\n  }\n  .mt-lg-3 {\n    margin-top: 1rem !important;\n  }\n  .mt-lg-4 {\n    margin-top: 1.5rem !important;\n  }\n  .mt-lg-5 {\n    margin-top: 3rem !important;\n  }\n  .mt-lg-auto {\n    margin-top: auto !important;\n  }\n  .me-lg-0 {\n    margin-right: 0 !important;\n  }\n  .me-lg-1 {\n    margin-right: 0.25rem !important;\n  }\n  .me-lg-2 {\n    margin-right: 0.5rem !important;\n  }\n  .me-lg-3 {\n    margin-right: 1rem !important;\n  }\n  .me-lg-4 {\n    margin-right: 1.5rem !important;\n  }\n  .me-lg-5 {\n    margin-right: 3rem !important;\n  }\n  .me-lg-auto {\n    margin-right: auto !important;\n  }\n  .mb-lg-0 {\n    margin-bottom: 0 !important;\n  }\n  .mb-lg-1 {\n    margin-bottom: 0.25rem !important;\n  }\n  .mb-lg-2 {\n    margin-bottom: 0.5rem !important;\n  }\n  .mb-lg-3 {\n    margin-bottom: 1rem !important;\n  }\n  .mb-lg-4 {\n    margin-bottom: 1.5rem !important;\n  }\n  .mb-lg-5 {\n    margin-bottom: 3rem !important;\n  }\n  .mb-lg-auto {\n    margin-bottom: auto !important;\n  }\n  .ms-lg-0 {\n    margin-left: 0 !important;\n  }\n  .ms-lg-1 {\n    margin-left: 0.25rem !important;\n  }\n  .ms-lg-2 {\n    margin-left: 0.5rem !important;\n  }\n  .ms-lg-3 {\n    margin-left: 1rem !important;\n  }\n  .ms-lg-4 {\n    margin-left: 1.5rem !important;\n  }\n  .ms-lg-5 {\n    margin-left: 3rem !important;\n  }\n  .ms-lg-auto {\n    margin-left: auto !important;\n  }\n  .p-lg-0 {\n    padding: 0 !important;\n  }\n  .p-lg-1 {\n    padding: 0.25rem !important;\n  }\n  .p-lg-2 {\n    padding: 0.5rem !important;\n  }\n  .p-lg-3 {\n    padding: 1rem !important;\n  }\n  .p-lg-4 {\n    padding: 1.5rem !important;\n  }\n  .p-lg-5 {\n    padding: 3rem !important;\n  }\n  .px-lg-0 {\n    padding-right: 0 !important;\n    padding-left: 0 !important;\n  }\n  .px-lg-1 {\n    padding-right: 0.25rem !important;\n    padding-left: 0.25rem !important;\n  }\n  .px-lg-2 {\n    padding-right: 0.5rem !important;\n    padding-left: 0.5rem !important;\n  }\n  .px-lg-3 {\n    padding-right: 1rem !important;\n    padding-left: 1rem !important;\n  }\n  .px-lg-4 {\n    padding-right: 1.5rem !important;\n    padding-left: 1.5rem !important;\n  }\n  .px-lg-5 {\n    padding-right: 3rem !important;\n    padding-left: 3rem !important;\n  }\n  .py-lg-0 {\n    padding-top: 0 !important;\n    padding-bottom: 0 !important;\n  }\n  .py-lg-1 {\n    padding-top: 0.25rem !important;\n    padding-bottom: 0.25rem !important;\n  }\n  .py-lg-2 {\n    padding-top: 0.5rem !important;\n    padding-bottom: 0.5rem !important;\n  }\n  .py-lg-3 {\n    padding-top: 1rem !important;\n    padding-bottom: 1rem !important;\n  }\n  .py-lg-4 {\n    padding-top: 1.5rem !important;\n    padding-bottom: 1.5rem !important;\n  }\n  .py-lg-5 {\n    padding-top: 3rem !important;\n    padding-bottom: 3rem !important;\n  }\n  .pt-lg-0 {\n    padding-top: 0 !important;\n  }\n  .pt-lg-1 {\n    padding-top: 0.25rem !important;\n  }\n  .pt-lg-2 {\n    padding-top: 0.5rem !important;\n  }\n  .pt-lg-3 {\n    padding-top: 1rem !important;\n  }\n  .pt-lg-4 {\n    padding-top: 1.5rem !important;\n  }\n  .pt-lg-5 {\n    padding-top: 3rem !important;\n  }\n  .pe-lg-0 {\n    padding-right: 0 !important;\n  }\n  .pe-lg-1 {\n    padding-right: 0.25rem !important;\n  }\n  .pe-lg-2 {\n    padding-right: 0.5rem !important;\n  }\n  .pe-lg-3 {\n    padding-right: 1rem !important;\n  }\n  .pe-lg-4 {\n    padding-right: 1.5rem !important;\n  }\n  .pe-lg-5 {\n    padding-right: 3rem !important;\n  }\n  .pb-lg-0 {\n    padding-bottom: 0 !important;\n  }\n  .pb-lg-1 {\n    padding-bottom: 0.25rem !important;\n  }\n  .pb-lg-2 {\n    padding-bottom: 0.5rem !important;\n  }\n  .pb-lg-3 {\n    padding-bottom: 1rem !important;\n  }\n  .pb-lg-4 {\n    padding-bottom: 1.5rem !important;\n  }\n  .pb-lg-5 {\n    padding-bottom: 3rem !important;\n  }\n  .ps-lg-0 {\n    padding-left: 0 !important;\n  }\n  .ps-lg-1 {\n    padding-left: 0.25rem !important;\n  }\n  .ps-lg-2 {\n    padding-left: 0.5rem !important;\n  }\n  .ps-lg-3 {\n    padding-left: 1rem !important;\n  }\n  .ps-lg-4 {\n    padding-left: 1.5rem !important;\n  }\n  .ps-lg-5 {\n    padding-left: 3rem !important;\n  }\n  .text-lg-start {\n    text-align: left !important;\n  }\n  .text-lg-end {\n    text-align: right !important;\n  }\n  .text-lg-center {\n    text-align: center !important;\n  }\n}\n\n@media (min-width: 1200px) {\n  .float-xl-start {\n    float: left !important;\n  }\n  .float-xl-end {\n    float: right !important;\n  }\n  .float-xl-none {\n    float: none !important;\n  }\n  .d-xl-inline {\n    display: inline !important;\n  }\n  .d-xl-inline-block {\n    display: inline-block !important;\n  }\n  .d-xl-block {\n    display: block !important;\n  }\n  .d-xl-grid {\n    display: grid !important;\n  }\n  .d-xl-table {\n    display: table !important;\n  }\n  .d-xl-table-row {\n    display: table-row !important;\n  }\n  .d-xl-table-cell {\n    display: table-cell !important;\n  }\n  .d-xl-flex {\n    display: -ms-flexbox !important;\n    display: flex !important;\n  }\n  .d-xl-inline-flex {\n    display: -ms-inline-flexbox !important;\n    display: inline-flex !important;\n  }\n  .d-xl-none {\n    display: none !important;\n  }\n  .flex-xl-fill {\n    -ms-flex: 1 1 auto !important;\n    flex: 1 1 auto !important;\n  }\n  .flex-xl-row {\n    -ms-flex-direction: row !important;\n    flex-direction: row !important;\n  }\n  .flex-xl-column {\n    -ms-flex-direction: column !important;\n    flex-direction: column !important;\n  }\n  .flex-xl-row-reverse {\n    -ms-flex-direction: row-reverse !important;\n    flex-direction: row-reverse !important;\n  }\n  .flex-xl-column-reverse {\n    -ms-flex-direction: column-reverse !important;\n    flex-direction: column-reverse !important;\n  }\n  .flex-xl-grow-0 {\n    -ms-flex-positive: 0 !important;\n    flex-grow: 0 !important;\n  }\n  .flex-xl-grow-1 {\n    -ms-flex-positive: 1 !important;\n    flex-grow: 1 !important;\n  }\n  .flex-xl-shrink-0 {\n    -ms-flex-negative: 0 !important;\n    flex-shrink: 0 !important;\n  }\n  .flex-xl-shrink-1 {\n    -ms-flex-negative: 1 !important;\n    flex-shrink: 1 !important;\n  }\n  .flex-xl-wrap {\n    -ms-flex-wrap: wrap !important;\n    flex-wrap: wrap !important;\n  }\n  .flex-xl-nowrap {\n    -ms-flex-wrap: nowrap !important;\n    flex-wrap: nowrap !important;\n  }\n  .flex-xl-wrap-reverse {\n    -ms-flex-wrap: wrap-reverse !important;\n    flex-wrap: wrap-reverse !important;\n  }\n  .gap-xl-0 {\n    gap: 0 !important;\n  }\n  .gap-xl-1 {\n    gap: 0.25rem !important;\n  }\n  .gap-xl-2 {\n    gap: 0.5rem !important;\n  }\n  .gap-xl-3 {\n    gap: 1rem !important;\n  }\n  .gap-xl-4 {\n    gap: 1.5rem !important;\n  }\n  .gap-xl-5 {\n    gap: 3rem !important;\n  }\n  .justify-content-xl-start {\n    -ms-flex-pack: start !important;\n    justify-content: flex-start !important;\n  }\n  .justify-content-xl-end {\n    -ms-flex-pack: end !important;\n    justify-content: flex-end !important;\n  }\n  .justify-content-xl-center {\n    -ms-flex-pack: center !important;\n    justify-content: center !important;\n  }\n  .justify-content-xl-between {\n    -ms-flex-pack: justify !important;\n    justify-content: space-between !important;\n  }\n  .justify-content-xl-around {\n    -ms-flex-pack: distribute !important;\n    justify-content: space-around !important;\n  }\n  .justify-content-xl-evenly {\n    -ms-flex-pack: space-evenly !important;\n    justify-content: space-evenly !important;\n  }\n  .align-items-xl-start {\n    -ms-flex-align: start !important;\n    align-items: flex-start !important;\n  }\n  .align-items-xl-end {\n    -ms-flex-align: end !important;\n    align-items: flex-end !important;\n  }\n  .align-items-xl-center {\n    -ms-flex-align: center !important;\n    align-items: center !important;\n  }\n  .align-items-xl-baseline {\n    -ms-flex-align: baseline !important;\n    align-items: baseline !important;\n  }\n  .align-items-xl-stretch {\n    -ms-flex-align: stretch !important;\n    align-items: stretch !important;\n  }\n  .align-content-xl-start {\n    -ms-flex-line-pack: start !important;\n    align-content: flex-start !important;\n  }\n  .align-content-xl-end {\n    -ms-flex-line-pack: end !important;\n    align-content: flex-end !important;\n  }\n  .align-content-xl-center {\n    -ms-flex-line-pack: center !important;\n    align-content: center !important;\n  }\n  .align-content-xl-between {\n    -ms-flex-line-pack: justify !important;\n    align-content: space-between !important;\n  }\n  .align-content-xl-around {\n    -ms-flex-line-pack: distribute !important;\n    align-content: space-around !important;\n  }\n  .align-content-xl-stretch {\n    -ms-flex-line-pack: stretch !important;\n    align-content: stretch !important;\n  }\n  .align-self-xl-auto {\n    -ms-flex-item-align: auto !important;\n    align-self: auto !important;\n  }\n  .align-self-xl-start {\n    -ms-flex-item-align: start !important;\n    align-self: flex-start !important;\n  }\n  .align-self-xl-end {\n    -ms-flex-item-align: end !important;\n    align-self: flex-end !important;\n  }\n  .align-self-xl-center {\n    -ms-flex-item-align: center !important;\n    align-self: center !important;\n  }\n  .align-self-xl-baseline {\n    -ms-flex-item-align: baseline !important;\n    align-self: baseline !important;\n  }\n  .align-self-xl-stretch {\n    -ms-flex-item-align: stretch !important;\n    align-self: stretch !important;\n  }\n  .order-xl-first {\n    -ms-flex-order: -1 !important;\n    order: -1 !important;\n  }\n  .order-xl-0 {\n    -ms-flex-order: 0 !important;\n    order: 0 !important;\n  }\n  .order-xl-1 {\n    -ms-flex-order: 1 !important;\n    order: 1 !important;\n  }\n  .order-xl-2 {\n    -ms-flex-order: 2 !important;\n    order: 2 !important;\n  }\n  .order-xl-3 {\n    -ms-flex-order: 3 !important;\n    order: 3 !important;\n  }\n  .order-xl-4 {\n    -ms-flex-order: 4 !important;\n    order: 4 !important;\n  }\n  .order-xl-5 {\n    -ms-flex-order: 5 !important;\n    order: 5 !important;\n  }\n  .order-xl-last {\n    -ms-flex-order: 6 !important;\n    order: 6 !important;\n  }\n  .m-xl-0 {\n    margin: 0 !important;\n  }\n  .m-xl-1 {\n    margin: 0.25rem !important;\n  }\n  .m-xl-2 {\n    margin: 0.5rem !important;\n  }\n  .m-xl-3 {\n    margin: 1rem !important;\n  }\n  .m-xl-4 {\n    margin: 1.5rem !important;\n  }\n  .m-xl-5 {\n    margin: 3rem !important;\n  }\n  .m-xl-auto {\n    margin: auto !important;\n  }\n  .mx-xl-0 {\n    margin-right: 0 !important;\n    margin-left: 0 !important;\n  }\n  .mx-xl-1 {\n    margin-right: 0.25rem !important;\n    margin-left: 0.25rem !important;\n  }\n  .mx-xl-2 {\n    margin-right: 0.5rem !important;\n    margin-left: 0.5rem !important;\n  }\n  .mx-xl-3 {\n    margin-right: 1rem !important;\n    margin-left: 1rem !important;\n  }\n  .mx-xl-4 {\n    margin-right: 1.5rem !important;\n    margin-left: 1.5rem !important;\n  }\n  .mx-xl-5 {\n    margin-right: 3rem !important;\n    margin-left: 3rem !important;\n  }\n  .mx-xl-auto {\n    margin-right: auto !important;\n    margin-left: auto !important;\n  }\n  .my-xl-0 {\n    margin-top: 0 !important;\n    margin-bottom: 0 !important;\n  }\n  .my-xl-1 {\n    margin-top: 0.25rem !important;\n    margin-bottom: 0.25rem !important;\n  }\n  .my-xl-2 {\n    margin-top: 0.5rem !important;\n    margin-bottom: 0.5rem !important;\n  }\n  .my-xl-3 {\n    margin-top: 1rem !important;\n    margin-bottom: 1rem !important;\n  }\n  .my-xl-4 {\n    margin-top: 1.5rem !important;\n    margin-bottom: 1.5rem !important;\n  }\n  .my-xl-5 {\n    margin-top: 3rem !important;\n    margin-bottom: 3rem !important;\n  }\n  .my-xl-auto {\n    margin-top: auto !important;\n    margin-bottom: auto !important;\n  }\n  .mt-xl-0 {\n    margin-top: 0 !important;\n  }\n  .mt-xl-1 {\n    margin-top: 0.25rem !important;\n  }\n  .mt-xl-2 {\n    margin-top: 0.5rem !important;\n  }\n  .mt-xl-3 {\n    margin-top: 1rem !important;\n  }\n  .mt-xl-4 {\n    margin-top: 1.5rem !important;\n  }\n  .mt-xl-5 {\n    margin-top: 3rem !important;\n  }\n  .mt-xl-auto {\n    margin-top: auto !important;\n  }\n  .me-xl-0 {\n    margin-right: 0 !important;\n  }\n  .me-xl-1 {\n    margin-right: 0.25rem !important;\n  }\n  .me-xl-2 {\n    margin-right: 0.5rem !important;\n  }\n  .me-xl-3 {\n    margin-right: 1rem !important;\n  }\n  .me-xl-4 {\n    margin-right: 1.5rem !important;\n  }\n  .me-xl-5 {\n    margin-right: 3rem !important;\n  }\n  .me-xl-auto {\n    margin-right: auto !important;\n  }\n  .mb-xl-0 {\n    margin-bottom: 0 !important;\n  }\n  .mb-xl-1 {\n    margin-bottom: 0.25rem !important;\n  }\n  .mb-xl-2 {\n    margin-bottom: 0.5rem !important;\n  }\n  .mb-xl-3 {\n    margin-bottom: 1rem !important;\n  }\n  .mb-xl-4 {\n    margin-bottom: 1.5rem !important;\n  }\n  .mb-xl-5 {\n    margin-bottom: 3rem !important;\n  }\n  .mb-xl-auto {\n    margin-bottom: auto !important;\n  }\n  .ms-xl-0 {\n    margin-left: 0 !important;\n  }\n  .ms-xl-1 {\n    margin-left: 0.25rem !important;\n  }\n  .ms-xl-2 {\n    margin-left: 0.5rem !important;\n  }\n  .ms-xl-3 {\n    margin-left: 1rem !important;\n  }\n  .ms-xl-4 {\n    margin-left: 1.5rem !important;\n  }\n  .ms-xl-5 {\n    margin-left: 3rem !important;\n  }\n  .ms-xl-auto {\n    margin-left: auto !important;\n  }\n  .p-xl-0 {\n    padding: 0 !important;\n  }\n  .p-xl-1 {\n    padding: 0.25rem !important;\n  }\n  .p-xl-2 {\n    padding: 0.5rem !important;\n  }\n  .p-xl-3 {\n    padding: 1rem !important;\n  }\n  .p-xl-4 {\n    padding: 1.5rem !important;\n  }\n  .p-xl-5 {\n    padding: 3rem !important;\n  }\n  .px-xl-0 {\n    padding-right: 0 !important;\n    padding-left: 0 !important;\n  }\n  .px-xl-1 {\n    padding-right: 0.25rem !important;\n    padding-left: 0.25rem !important;\n  }\n  .px-xl-2 {\n    padding-right: 0.5rem !important;\n    padding-left: 0.5rem !important;\n  }\n  .px-xl-3 {\n    padding-right: 1rem !important;\n    padding-left: 1rem !important;\n  }\n  .px-xl-4 {\n    padding-right: 1.5rem !important;\n    padding-left: 1.5rem !important;\n  }\n  .px-xl-5 {\n    padding-right: 3rem !important;\n    padding-left: 3rem !important;\n  }\n  .py-xl-0 {\n    padding-top: 0 !important;\n    padding-bottom: 0 !important;\n  }\n  .py-xl-1 {\n    padding-top: 0.25rem !important;\n    padding-bottom: 0.25rem !important;\n  }\n  .py-xl-2 {\n    padding-top: 0.5rem !important;\n    padding-bottom: 0.5rem !important;\n  }\n  .py-xl-3 {\n    padding-top: 1rem !important;\n    padding-bottom: 1rem !important;\n  }\n  .py-xl-4 {\n    padding-top: 1.5rem !important;\n    padding-bottom: 1.5rem !important;\n  }\n  .py-xl-5 {\n    padding-top: 3rem !important;\n    padding-bottom: 3rem !important;\n  }\n  .pt-xl-0 {\n    padding-top: 0 !important;\n  }\n  .pt-xl-1 {\n    padding-top: 0.25rem !important;\n  }\n  .pt-xl-2 {\n    padding-top: 0.5rem !important;\n  }\n  .pt-xl-3 {\n    padding-top: 1rem !important;\n  }\n  .pt-xl-4 {\n    padding-top: 1.5rem !important;\n  }\n  .pt-xl-5 {\n    padding-top: 3rem !important;\n  }\n  .pe-xl-0 {\n    padding-right: 0 !important;\n  }\n  .pe-xl-1 {\n    padding-right: 0.25rem !important;\n  }\n  .pe-xl-2 {\n    padding-right: 0.5rem !important;\n  }\n  .pe-xl-3 {\n    padding-right: 1rem !important;\n  }\n  .pe-xl-4 {\n    padding-right: 1.5rem !important;\n  }\n  .pe-xl-5 {\n    padding-right: 3rem !important;\n  }\n  .pb-xl-0 {\n    padding-bottom: 0 !important;\n  }\n  .pb-xl-1 {\n    padding-bottom: 0.25rem !important;\n  }\n  .pb-xl-2 {\n    padding-bottom: 0.5rem !important;\n  }\n  .pb-xl-3 {\n    padding-bottom: 1rem !important;\n  }\n  .pb-xl-4 {\n    padding-bottom: 1.5rem !important;\n  }\n  .pb-xl-5 {\n    padding-bottom: 3rem !important;\n  }\n  .ps-xl-0 {\n    padding-left: 0 !important;\n  }\n  .ps-xl-1 {\n    padding-left: 0.25rem !important;\n  }\n  .ps-xl-2 {\n    padding-left: 0.5rem !important;\n  }\n  .ps-xl-3 {\n    padding-left: 1rem !important;\n  }\n  .ps-xl-4 {\n    padding-left: 1.5rem !important;\n  }\n  .ps-xl-5 {\n    padding-left: 3rem !important;\n  }\n  .text-xl-start {\n    text-align: left !important;\n  }\n  .text-xl-end {\n    text-align: right !important;\n  }\n  .text-xl-center {\n    text-align: center !important;\n  }\n}\n\n@media (min-width: 1400px) {\n  .float-xxl-start {\n    float: left !important;\n  }\n  .float-xxl-end {\n    float: right !important;\n  }\n  .float-xxl-none {\n    float: none !important;\n  }\n  .d-xxl-inline {\n    display: inline !important;\n  }\n  .d-xxl-inline-block {\n    display: inline-block !important;\n  }\n  .d-xxl-block {\n    display: block !important;\n  }\n  .d-xxl-grid {\n    display: grid !important;\n  }\n  .d-xxl-table {\n    display: table !important;\n  }\n  .d-xxl-table-row {\n    display: table-row !important;\n  }\n  .d-xxl-table-cell {\n    display: table-cell !important;\n  }\n  .d-xxl-flex {\n    display: -ms-flexbox !important;\n    display: flex !important;\n  }\n  .d-xxl-inline-flex {\n    display: -ms-inline-flexbox !important;\n    display: inline-flex !important;\n  }\n  .d-xxl-none {\n    display: none !important;\n  }\n  .flex-xxl-fill {\n    -ms-flex: 1 1 auto !important;\n    flex: 1 1 auto !important;\n  }\n  .flex-xxl-row {\n    -ms-flex-direction: row !important;\n    flex-direction: row !important;\n  }\n  .flex-xxl-column {\n    -ms-flex-direction: column !important;\n    flex-direction: column !important;\n  }\n  .flex-xxl-row-reverse {\n    -ms-flex-direction: row-reverse !important;\n    flex-direction: row-reverse !important;\n  }\n  .flex-xxl-column-reverse {\n    -ms-flex-direction: column-reverse !important;\n    flex-direction: column-reverse !important;\n  }\n  .flex-xxl-grow-0 {\n    -ms-flex-positive: 0 !important;\n    flex-grow: 0 !important;\n  }\n  .flex-xxl-grow-1 {\n    -ms-flex-positive: 1 !important;\n    flex-grow: 1 !important;\n  }\n  .flex-xxl-shrink-0 {\n    -ms-flex-negative: 0 !important;\n    flex-shrink: 0 !important;\n  }\n  .flex-xxl-shrink-1 {\n    -ms-flex-negative: 1 !important;\n    flex-shrink: 1 !important;\n  }\n  .flex-xxl-wrap {\n    -ms-flex-wrap: wrap !important;\n    flex-wrap: wrap !important;\n  }\n  .flex-xxl-nowrap {\n    -ms-flex-wrap: nowrap !important;\n    flex-wrap: nowrap !important;\n  }\n  .flex-xxl-wrap-reverse {\n    -ms-flex-wrap: wrap-reverse !important;\n    flex-wrap: wrap-reverse !important;\n  }\n  .gap-xxl-0 {\n    gap: 0 !important;\n  }\n  .gap-xxl-1 {\n    gap: 0.25rem !important;\n  }\n  .gap-xxl-2 {\n    gap: 0.5rem !important;\n  }\n  .gap-xxl-3 {\n    gap: 1rem !important;\n  }\n  .gap-xxl-4 {\n    gap: 1.5rem !important;\n  }\n  .gap-xxl-5 {\n    gap: 3rem !important;\n  }\n  .justify-content-xxl-start {\n    -ms-flex-pack: start !important;\n    justify-content: flex-start !important;\n  }\n  .justify-content-xxl-end {\n    -ms-flex-pack: end !important;\n    justify-content: flex-end !important;\n  }\n  .justify-content-xxl-center {\n    -ms-flex-pack: center !important;\n    justify-content: center !important;\n  }\n  .justify-content-xxl-between {\n    -ms-flex-pack: justify !important;\n    justify-content: space-between !important;\n  }\n  .justify-content-xxl-around {\n    -ms-flex-pack: distribute !important;\n    justify-content: space-around !important;\n  }\n  .justify-content-xxl-evenly {\n    -ms-flex-pack: space-evenly !important;\n    justify-content: space-evenly !important;\n  }\n  .align-items-xxl-start {\n    -ms-flex-align: start !important;\n    align-items: flex-start !important;\n  }\n  .align-items-xxl-end {\n    -ms-flex-align: end !important;\n    align-items: flex-end !important;\n  }\n  .align-items-xxl-center {\n    -ms-flex-align: center !important;\n    align-items: center !important;\n  }\n  .align-items-xxl-baseline {\n    -ms-flex-align: baseline !important;\n    align-items: baseline !important;\n  }\n  .align-items-xxl-stretch {\n    -ms-flex-align: stretch !important;\n    align-items: stretch !important;\n  }\n  .align-content-xxl-start {\n    -ms-flex-line-pack: start !important;\n    align-content: flex-start !important;\n  }\n  .align-content-xxl-end {\n    -ms-flex-line-pack: end !important;\n    align-content: flex-end !important;\n  }\n  .align-content-xxl-center {\n    -ms-flex-line-pack: center !important;\n    align-content: center !important;\n  }\n  .align-content-xxl-between {\n    -ms-flex-line-pack: justify !important;\n    align-content: space-between !important;\n  }\n  .align-content-xxl-around {\n    -ms-flex-line-pack: distribute !important;\n    align-content: space-around !important;\n  }\n  .align-content-xxl-stretch {\n    -ms-flex-line-pack: stretch !important;\n    align-content: stretch !important;\n  }\n  .align-self-xxl-auto {\n    -ms-flex-item-align: auto !important;\n    align-self: auto !important;\n  }\n  .align-self-xxl-start {\n    -ms-flex-item-align: start !important;\n    align-self: flex-start !important;\n  }\n  .align-self-xxl-end {\n    -ms-flex-item-align: end !important;\n    align-self: flex-end !important;\n  }\n  .align-self-xxl-center {\n    -ms-flex-item-align: center !important;\n    align-self: center !important;\n  }\n  .align-self-xxl-baseline {\n    -ms-flex-item-align: baseline !important;\n    align-self: baseline !important;\n  }\n  .align-self-xxl-stretch {\n    -ms-flex-item-align: stretch !important;\n    align-self: stretch !important;\n  }\n  .order-xxl-first {\n    -ms-flex-order: -1 !important;\n    order: -1 !important;\n  }\n  .order-xxl-0 {\n    -ms-flex-order: 0 !important;\n    order: 0 !important;\n  }\n  .order-xxl-1 {\n    -ms-flex-order: 1 !important;\n    order: 1 !important;\n  }\n  .order-xxl-2 {\n    -ms-flex-order: 2 !important;\n    order: 2 !important;\n  }\n  .order-xxl-3 {\n    -ms-flex-order: 3 !important;\n    order: 3 !important;\n  }\n  .order-xxl-4 {\n    -ms-flex-order: 4 !important;\n    order: 4 !important;\n  }\n  .order-xxl-5 {\n    -ms-flex-order: 5 !important;\n    order: 5 !important;\n  }\n  .order-xxl-last {\n    -ms-flex-order: 6 !important;\n    order: 6 !important;\n  }\n  .m-xxl-0 {\n    margin: 0 !important;\n  }\n  .m-xxl-1 {\n    margin: 0.25rem !important;\n  }\n  .m-xxl-2 {\n    margin: 0.5rem !important;\n  }\n  .m-xxl-3 {\n    margin: 1rem !important;\n  }\n  .m-xxl-4 {\n    margin: 1.5rem !important;\n  }\n  .m-xxl-5 {\n    margin: 3rem !important;\n  }\n  .m-xxl-auto {\n    margin: auto !important;\n  }\n  .mx-xxl-0 {\n    margin-right: 0 !important;\n    margin-left: 0 !important;\n  }\n  .mx-xxl-1 {\n    margin-right: 0.25rem !important;\n    margin-left: 0.25rem !important;\n  }\n  .mx-xxl-2 {\n    margin-right: 0.5rem !important;\n    margin-left: 0.5rem !important;\n  }\n  .mx-xxl-3 {\n    margin-right: 1rem !important;\n    margin-left: 1rem !important;\n  }\n  .mx-xxl-4 {\n    margin-right: 1.5rem !important;\n    margin-left: 1.5rem !important;\n  }\n  .mx-xxl-5 {\n    margin-right: 3rem !important;\n    margin-left: 3rem !important;\n  }\n  .mx-xxl-auto {\n    margin-right: auto !important;\n    margin-left: auto !important;\n  }\n  .my-xxl-0 {\n    margin-top: 0 !important;\n    margin-bottom: 0 !important;\n  }\n  .my-xxl-1 {\n    margin-top: 0.25rem !important;\n    margin-bottom: 0.25rem !important;\n  }\n  .my-xxl-2 {\n    margin-top: 0.5rem !important;\n    margin-bottom: 0.5rem !important;\n  }\n  .my-xxl-3 {\n    margin-top: 1rem !important;\n    margin-bottom: 1rem !important;\n  }\n  .my-xxl-4 {\n    margin-top: 1.5rem !important;\n    margin-bottom: 1.5rem !important;\n  }\n  .my-xxl-5 {\n    margin-top: 3rem !important;\n    margin-bottom: 3rem !important;\n  }\n  .my-xxl-auto {\n    margin-top: auto !important;\n    margin-bottom: auto !important;\n  }\n  .mt-xxl-0 {\n    margin-top: 0 !important;\n  }\n  .mt-xxl-1 {\n    margin-top: 0.25rem !important;\n  }\n  .mt-xxl-2 {\n    margin-top: 0.5rem !important;\n  }\n  .mt-xxl-3 {\n    margin-top: 1rem !important;\n  }\n  .mt-xxl-4 {\n    margin-top: 1.5rem !important;\n  }\n  .mt-xxl-5 {\n    margin-top: 3rem !important;\n  }\n  .mt-xxl-auto {\n    margin-top: auto !important;\n  }\n  .me-xxl-0 {\n    margin-right: 0 !important;\n  }\n  .me-xxl-1 {\n    margin-right: 0.25rem !important;\n  }\n  .me-xxl-2 {\n    margin-right: 0.5rem !important;\n  }\n  .me-xxl-3 {\n    margin-right: 1rem !important;\n  }\n  .me-xxl-4 {\n    margin-right: 1.5rem !important;\n  }\n  .me-xxl-5 {\n    margin-right: 3rem !important;\n  }\n  .me-xxl-auto {\n    margin-right: auto !important;\n  }\n  .mb-xxl-0 {\n    margin-bottom: 0 !important;\n  }\n  .mb-xxl-1 {\n    margin-bottom: 0.25rem !important;\n  }\n  .mb-xxl-2 {\n    margin-bottom: 0.5rem !important;\n  }\n  .mb-xxl-3 {\n    margin-bottom: 1rem !important;\n  }\n  .mb-xxl-4 {\n    margin-bottom: 1.5rem !important;\n  }\n  .mb-xxl-5 {\n    margin-bottom: 3rem !important;\n  }\n  .mb-xxl-auto {\n    margin-bottom: auto !important;\n  }\n  .ms-xxl-0 {\n    margin-left: 0 !important;\n  }\n  .ms-xxl-1 {\n    margin-left: 0.25rem !important;\n  }\n  .ms-xxl-2 {\n    margin-left: 0.5rem !important;\n  }\n  .ms-xxl-3 {\n    margin-left: 1rem !important;\n  }\n  .ms-xxl-4 {\n    margin-left: 1.5rem !important;\n  }\n  .ms-xxl-5 {\n    margin-left: 3rem !important;\n  }\n  .ms-xxl-auto {\n    margin-left: auto !important;\n  }\n  .p-xxl-0 {\n    padding: 0 !important;\n  }\n  .p-xxl-1 {\n    padding: 0.25rem !important;\n  }\n  .p-xxl-2 {\n    padding: 0.5rem !important;\n  }\n  .p-xxl-3 {\n    padding: 1rem !important;\n  }\n  .p-xxl-4 {\n    padding: 1.5rem !important;\n  }\n  .p-xxl-5 {\n    padding: 3rem !important;\n  }\n  .px-xxl-0 {\n    padding-right: 0 !important;\n    padding-left: 0 !important;\n  }\n  .px-xxl-1 {\n    padding-right: 0.25rem !important;\n    padding-left: 0.25rem !important;\n  }\n  .px-xxl-2 {\n    padding-right: 0.5rem !important;\n    padding-left: 0.5rem !important;\n  }\n  .px-xxl-3 {\n    padding-right: 1rem !important;\n    padding-left: 1rem !important;\n  }\n  .px-xxl-4 {\n    padding-right: 1.5rem !important;\n    padding-left: 1.5rem !important;\n  }\n  .px-xxl-5 {\n    padding-right: 3rem !important;\n    padding-left: 3rem !important;\n  }\n  .py-xxl-0 {\n    padding-top: 0 !important;\n    padding-bottom: 0 !important;\n  }\n  .py-xxl-1 {\n    padding-top: 0.25rem !important;\n    padding-bottom: 0.25rem !important;\n  }\n  .py-xxl-2 {\n    padding-top: 0.5rem !important;\n    padding-bottom: 0.5rem !important;\n  }\n  .py-xxl-3 {\n    padding-top: 1rem !important;\n    padding-bottom: 1rem !important;\n  }\n  .py-xxl-4 {\n    padding-top: 1.5rem !important;\n    padding-bottom: 1.5rem !important;\n  }\n  .py-xxl-5 {\n    padding-top: 3rem !important;\n    padding-bottom: 3rem !important;\n  }\n  .pt-xxl-0 {\n    padding-top: 0 !important;\n  }\n  .pt-xxl-1 {\n    padding-top: 0.25rem !important;\n  }\n  .pt-xxl-2 {\n    padding-top: 0.5rem !important;\n  }\n  .pt-xxl-3 {\n    padding-top: 1rem !important;\n  }\n  .pt-xxl-4 {\n    padding-top: 1.5rem !important;\n  }\n  .pt-xxl-5 {\n    padding-top: 3rem !important;\n  }\n  .pe-xxl-0 {\n    padding-right: 0 !important;\n  }\n  .pe-xxl-1 {\n    padding-right: 0.25rem !important;\n  }\n  .pe-xxl-2 {\n    padding-right: 0.5rem !important;\n  }\n  .pe-xxl-3 {\n    padding-right: 1rem !important;\n  }\n  .pe-xxl-4 {\n    padding-right: 1.5rem !important;\n  }\n  .pe-xxl-5 {\n    padding-right: 3rem !important;\n  }\n  .pb-xxl-0 {\n    padding-bottom: 0 !important;\n  }\n  .pb-xxl-1 {\n    padding-bottom: 0.25rem !important;\n  }\n  .pb-xxl-2 {\n    padding-bottom: 0.5rem !important;\n  }\n  .pb-xxl-3 {\n    padding-bottom: 1rem !important;\n  }\n  .pb-xxl-4 {\n    padding-bottom: 1.5rem !important;\n  }\n  .pb-xxl-5 {\n    padding-bottom: 3rem !important;\n  }\n  .ps-xxl-0 {\n    padding-left: 0 !important;\n  }\n  .ps-xxl-1 {\n    padding-left: 0.25rem !important;\n  }\n  .ps-xxl-2 {\n    padding-left: 0.5rem !important;\n  }\n  .ps-xxl-3 {\n    padding-left: 1rem !important;\n  }\n  .ps-xxl-4 {\n    padding-left: 1.5rem !important;\n  }\n  .ps-xxl-5 {\n    padding-left: 3rem !important;\n  }\n  .text-xxl-start {\n    text-align: left !important;\n  }\n  .text-xxl-end {\n    text-align: right !important;\n  }\n  .text-xxl-center {\n    text-align: center !important;\n  }\n}\n\n@media (min-width: 1200px) {\n  .fs-1 {\n    font-size: 3rem !important;\n  }\n  .fs-2 {\n    font-size: 2.5rem !important;\n  }\n  .fs-3 {\n    font-size: 2rem !important;\n  }\n  .fs-4 {\n    font-size: 1.5rem !important;\n  }\n}\n\n@media print {\n  .d-print-inline {\n    display: inline !important;\n  }\n  .d-print-inline-block {\n    display: inline-block !important;\n  }\n  .d-print-block {\n    display: block !important;\n  }\n  .d-print-grid {\n    display: grid !important;\n  }\n  .d-print-table {\n    display: table !important;\n  }\n  .d-print-table-row {\n    display: table-row !important;\n  }\n  .d-print-table-cell {\n    display: table-cell !important;\n  }\n  .d-print-flex {\n    display: -ms-flexbox !important;\n    display: flex !important;\n  }\n  .d-print-inline-flex {\n    display: -ms-inline-flexbox !important;\n    display: inline-flex !important;\n  }\n  .d-print-none {\n    display: none !important;\n  }\n}\n\n.blockquote-footer {\n  color: #888;\n}\n\n.input-group-addon {\n  color: #fff;\n}\n\n.form-floating > label {\n  color: #444;\n}\n\n.nav-tabs .nav-link,\n.nav-tabs .nav-link.active,\n.nav-tabs .nav-link.active:focus,\n.nav-tabs .nav-link.active:hover,\n.nav-tabs .nav-item.open .nav-link,\n.nav-tabs .nav-item.open .nav-link:focus,\n.nav-tabs .nav-item.open .nav-link:hover,\n.nav-pills .nav-link,\n.nav-pills .nav-link.active,\n.nav-pills .nav-link.active:focus,\n.nav-pills .nav-link.active:hover,\n.nav-pills .nav-item.open .nav-link,\n.nav-pills .nav-item.open .nav-link:focus,\n.nav-pills .nav-item.open .nav-link:hover {\n  color: #fff;\n}\n\n.breadcrumb a {\n  color: #fff;\n}\n\n.pagination a:hover {\n  text-decoration: none;\n}\n\n.alert {\n  border: none;\n  color: #fff;\n}\n\n.alert a,\n.alert .alert-link {\n  color: #fff;\n  text-decoration: underline;\n}\n\n.alert-primary {\n  background-color: #375a7f;\n}\n\n.alert-secondary {\n  background-color: #444;\n}\n\n.alert-success {\n  background-color: #00bc8c;\n}\n\n.alert-info {\n  background-color: #3498db;\n}\n\n.alert-warning {\n  background-color: #f39c12;\n}\n\n.alert-danger {\n  background-color: #e74c3c;\n}\n\n.alert-light {\n  background-color: #adb5bd;\n}\n\n.alert-dark {\n  background-color: #303030;\n}\n"
  },
  {
    "path": "src/sourceDev.WebApp/SharedThemes/darkly/wwwroot/css/fontawesome-all.css",
    "content": "/*!\n * Font Awesome Free 5.0.8 by @fontawesome - https://fontawesome.com\n * License - https://fontawesome.com/license (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)\n */\n.fa,\n.fas,\n.far,\n.fal,\n.fab {\n  -moz-osx-font-smoothing: grayscale;\n  -webkit-font-smoothing: antialiased;\n  display: inline-block;\n  font-style: normal;\n  font-variant: normal;\n  text-rendering: auto;\n  line-height: 1; }\n\n.fa-lg {\n  font-size: 1.33333em;\n  line-height: 0.75em;\n  vertical-align: -.0667em; }\n\n.fa-xs {\n  font-size: .75em; }\n\n.fa-sm {\n  font-size: .875em; }\n\n.fa-1x {\n  font-size: 1em; }\n\n.fa-2x {\n  font-size: 2em; }\n\n.fa-3x {\n  font-size: 3em; }\n\n.fa-4x {\n  font-size: 4em; }\n\n.fa-5x {\n  font-size: 5em; }\n\n.fa-6x {\n  font-size: 6em; }\n\n.fa-7x {\n  font-size: 7em; }\n\n.fa-8x {\n  font-size: 8em; }\n\n.fa-9x {\n  font-size: 9em; }\n\n.fa-10x {\n  font-size: 10em; }\n\n.fa-fw {\n  text-align: center;\n  width: 1.25em; }\n\n.fa-ul {\n  list-style-type: none;\n  margin-left: 2.5em;\n  padding-left: 0; }\n  .fa-ul > li {\n    position: relative; }\n\n.fa-li {\n  left: -2em;\n  position: absolute;\n  text-align: center;\n  width: 2em;\n  line-height: inherit; }\n\n.fa-border {\n  border: solid 0.08em #eee;\n  border-radius: .1em;\n  padding: .2em .25em .15em; }\n\n.fa-pull-left {\n  float: left; }\n\n.fa-pull-right {\n  float: right; }\n\n.fa.fa-pull-left,\n.fas.fa-pull-left,\n.far.fa-pull-left,\n.fal.fa-pull-left,\n.fab.fa-pull-left {\n  margin-right: .3em; }\n\n.fa.fa-pull-right,\n.fas.fa-pull-right,\n.far.fa-pull-right,\n.fal.fa-pull-right,\n.fab.fa-pull-right {\n  margin-left: .3em; }\n\n.fa-spin {\n  -webkit-animation: fa-spin 2s infinite linear;\n          animation: fa-spin 2s infinite linear; }\n\n.fa-pulse {\n  -webkit-animation: fa-spin 1s infinite steps(8);\n          animation: fa-spin 1s infinite steps(8); }\n\n@-webkit-keyframes fa-spin {\n  0% {\n    -webkit-transform: rotate(0deg);\n            transform: rotate(0deg); }\n  100% {\n    -webkit-transform: rotate(360deg);\n            transform: rotate(360deg); } }\n\n@keyframes fa-spin {\n  0% {\n    -webkit-transform: rotate(0deg);\n            transform: rotate(0deg); }\n  100% {\n    -webkit-transform: rotate(360deg);\n            transform: rotate(360deg); } }\n\n.fa-rotate-90 {\n  -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)\";\n  -webkit-transform: rotate(90deg);\n          transform: rotate(90deg); }\n\n.fa-rotate-180 {\n  -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)\";\n  -webkit-transform: rotate(180deg);\n          transform: rotate(180deg); }\n\n.fa-rotate-270 {\n  -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)\";\n  -webkit-transform: rotate(270deg);\n          transform: rotate(270deg); }\n\n.fa-flip-horizontal {\n  -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)\";\n  -webkit-transform: scale(-1, 1);\n          transform: scale(-1, 1); }\n\n.fa-flip-vertical {\n  -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)\";\n  -webkit-transform: scale(1, -1);\n          transform: scale(1, -1); }\n\n.fa-flip-horizontal.fa-flip-vertical {\n  -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)\";\n  -webkit-transform: scale(-1, -1);\n          transform: scale(-1, -1); }\n\n:root .fa-rotate-90,\n:root .fa-rotate-180,\n:root .fa-rotate-270,\n:root .fa-flip-horizontal,\n:root .fa-flip-vertical {\n  -webkit-filter: none;\n          filter: none; }\n\n.fa-stack {\n  display: inline-block;\n  height: 2em;\n  line-height: 2em;\n  position: relative;\n  vertical-align: middle;\n  width: 2em; }\n\n.fa-stack-1x,\n.fa-stack-2x {\n  left: 0;\n  position: absolute;\n  text-align: center;\n  width: 100%; }\n\n.fa-stack-1x {\n  line-height: inherit; }\n\n.fa-stack-2x {\n  font-size: 2em; }\n\n.fa-inverse {\n  color: #fff; }\n\n/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen\nreaders do not read off random characters that represent icons */\n.fa-500px:before {\n  content: \"\\f26e\"; }\n\n.fa-accessible-icon:before {\n  content: \"\\f368\"; }\n\n.fa-accusoft:before {\n  content: \"\\f369\"; }\n\n.fa-address-book:before {\n  content: \"\\f2b9\"; }\n\n.fa-address-card:before {\n  content: \"\\f2bb\"; }\n\n.fa-adjust:before {\n  content: \"\\f042\"; }\n\n.fa-adn:before {\n  content: \"\\f170\"; }\n\n.fa-adversal:before {\n  content: \"\\f36a\"; }\n\n.fa-affiliatetheme:before {\n  content: \"\\f36b\"; }\n\n.fa-algolia:before {\n  content: \"\\f36c\"; }\n\n.fa-align-center:before {\n  content: \"\\f037\"; }\n\n.fa-align-justify:before {\n  content: \"\\f039\"; }\n\n.fa-align-left:before {\n  content: \"\\f036\"; }\n\n.fa-align-right:before {\n  content: \"\\f038\"; }\n\n.fa-amazon:before {\n  content: \"\\f270\"; }\n\n.fa-amazon-pay:before {\n  content: \"\\f42c\"; }\n\n.fa-ambulance:before {\n  content: \"\\f0f9\"; }\n\n.fa-american-sign-language-interpreting:before {\n  content: \"\\f2a3\"; }\n\n.fa-amilia:before {\n  content: \"\\f36d\"; }\n\n.fa-anchor:before {\n  content: \"\\f13d\"; }\n\n.fa-android:before {\n  content: \"\\f17b\"; }\n\n.fa-angellist:before {\n  content: \"\\f209\"; }\n\n.fa-angle-double-down:before {\n  content: \"\\f103\"; }\n\n.fa-angle-double-left:before {\n  content: \"\\f100\"; }\n\n.fa-angle-double-right:before {\n  content: \"\\f101\"; }\n\n.fa-angle-double-up:before {\n  content: \"\\f102\"; }\n\n.fa-angle-down:before {\n  content: \"\\f107\"; }\n\n.fa-angle-left:before {\n  content: \"\\f104\"; }\n\n.fa-angle-right:before {\n  content: \"\\f105\"; }\n\n.fa-angle-up:before {\n  content: \"\\f106\"; }\n\n.fa-angrycreative:before {\n  content: \"\\f36e\"; }\n\n.fa-angular:before {\n  content: \"\\f420\"; }\n\n.fa-app-store:before {\n  content: \"\\f36f\"; }\n\n.fa-app-store-ios:before {\n  content: \"\\f370\"; }\n\n.fa-apper:before {\n  content: \"\\f371\"; }\n\n.fa-apple:before {\n  content: \"\\f179\"; }\n\n.fa-apple-pay:before {\n  content: \"\\f415\"; }\n\n.fa-archive:before {\n  content: \"\\f187\"; }\n\n.fa-arrow-alt-circle-down:before {\n  content: \"\\f358\"; }\n\n.fa-arrow-alt-circle-left:before {\n  content: \"\\f359\"; }\n\n.fa-arrow-alt-circle-right:before {\n  content: \"\\f35a\"; }\n\n.fa-arrow-alt-circle-up:before {\n  content: \"\\f35b\"; }\n\n.fa-arrow-circle-down:before {\n  content: \"\\f0ab\"; }\n\n.fa-arrow-circle-left:before {\n  content: \"\\f0a8\"; }\n\n.fa-arrow-circle-right:before {\n  content: \"\\f0a9\"; }\n\n.fa-arrow-circle-up:before {\n  content: \"\\f0aa\"; }\n\n.fa-arrow-down:before {\n  content: \"\\f063\"; }\n\n.fa-arrow-left:before {\n  content: \"\\f060\"; }\n\n.fa-arrow-right:before {\n  content: \"\\f061\"; }\n\n.fa-arrow-up:before {\n  content: \"\\f062\"; }\n\n.fa-arrows-alt:before {\n  content: \"\\f0b2\"; }\n\n.fa-arrows-alt-h:before {\n  content: \"\\f337\"; }\n\n.fa-arrows-alt-v:before {\n  content: \"\\f338\"; }\n\n.fa-assistive-listening-systems:before {\n  content: \"\\f2a2\"; }\n\n.fa-asterisk:before {\n  content: \"\\f069\"; }\n\n.fa-asymmetrik:before {\n  content: \"\\f372\"; }\n\n.fa-at:before {\n  content: \"\\f1fa\"; }\n\n.fa-audible:before {\n  content: \"\\f373\"; }\n\n.fa-audio-description:before {\n  content: \"\\f29e\"; }\n\n.fa-autoprefixer:before {\n  content: \"\\f41c\"; }\n\n.fa-avianex:before {\n  content: \"\\f374\"; }\n\n.fa-aviato:before {\n  content: \"\\f421\"; }\n\n.fa-aws:before {\n  content: \"\\f375\"; }\n\n.fa-backward:before {\n  content: \"\\f04a\"; }\n\n.fa-balance-scale:before {\n  content: \"\\f24e\"; }\n\n.fa-ban:before {\n  content: \"\\f05e\"; }\n\n.fa-band-aid:before {\n  content: \"\\f462\"; }\n\n.fa-bandcamp:before {\n  content: \"\\f2d5\"; }\n\n.fa-barcode:before {\n  content: \"\\f02a\"; }\n\n.fa-bars:before {\n  content: \"\\f0c9\"; }\n\n.fa-baseball-ball:before {\n  content: \"\\f433\"; }\n\n.fa-basketball-ball:before {\n  content: \"\\f434\"; }\n\n.fa-bath:before {\n  content: \"\\f2cd\"; }\n\n.fa-battery-empty:before {\n  content: \"\\f244\"; }\n\n.fa-battery-full:before {\n  content: \"\\f240\"; }\n\n.fa-battery-half:before {\n  content: \"\\f242\"; }\n\n.fa-battery-quarter:before {\n  content: \"\\f243\"; }\n\n.fa-battery-three-quarters:before {\n  content: \"\\f241\"; }\n\n.fa-bed:before {\n  content: \"\\f236\"; }\n\n.fa-beer:before {\n  content: \"\\f0fc\"; }\n\n.fa-behance:before {\n  content: \"\\f1b4\"; }\n\n.fa-behance-square:before {\n  content: \"\\f1b5\"; }\n\n.fa-bell:before {\n  content: \"\\f0f3\"; }\n\n.fa-bell-slash:before {\n  content: \"\\f1f6\"; }\n\n.fa-bicycle:before {\n  content: \"\\f206\"; }\n\n.fa-bimobject:before {\n  content: \"\\f378\"; }\n\n.fa-binoculars:before {\n  content: \"\\f1e5\"; }\n\n.fa-birthday-cake:before {\n  content: \"\\f1fd\"; }\n\n.fa-bitbucket:before {\n  content: \"\\f171\"; }\n\n.fa-bitcoin:before {\n  content: \"\\f379\"; }\n\n.fa-bity:before {\n  content: \"\\f37a\"; }\n\n.fa-black-tie:before {\n  content: \"\\f27e\"; }\n\n.fa-blackberry:before {\n  content: \"\\f37b\"; }\n\n.fa-blind:before {\n  content: \"\\f29d\"; }\n\n.fa-blogger:before {\n  content: \"\\f37c\"; }\n\n.fa-blogger-b:before {\n  content: \"\\f37d\"; }\n\n.fa-bluetooth:before {\n  content: \"\\f293\"; }\n\n.fa-bluetooth-b:before {\n  content: \"\\f294\"; }\n\n.fa-bold:before {\n  content: \"\\f032\"; }\n\n.fa-bolt:before {\n  content: \"\\f0e7\"; }\n\n.fa-bomb:before {\n  content: \"\\f1e2\"; }\n\n.fa-book:before {\n  content: \"\\f02d\"; }\n\n.fa-bookmark:before {\n  content: \"\\f02e\"; }\n\n.fa-bowling-ball:before {\n  content: \"\\f436\"; }\n\n.fa-box:before {\n  content: \"\\f466\"; }\n\n.fa-boxes:before {\n  content: \"\\f468\"; }\n\n.fa-braille:before {\n  content: \"\\f2a1\"; }\n\n.fa-briefcase:before {\n  content: \"\\f0b1\"; }\n\n.fa-btc:before {\n  content: \"\\f15a\"; }\n\n.fa-bug:before {\n  content: \"\\f188\"; }\n\n.fa-building:before {\n  content: \"\\f1ad\"; }\n\n.fa-bullhorn:before {\n  content: \"\\f0a1\"; }\n\n.fa-bullseye:before {\n  content: \"\\f140\"; }\n\n.fa-buromobelexperte:before {\n  content: \"\\f37f\"; }\n\n.fa-bus:before {\n  content: \"\\f207\"; }\n\n.fa-buysellads:before {\n  content: \"\\f20d\"; }\n\n.fa-calculator:before {\n  content: \"\\f1ec\"; }\n\n.fa-calendar:before {\n  content: \"\\f133\"; }\n\n.fa-calendar-alt:before {\n  content: \"\\f073\"; }\n\n.fa-calendar-check:before {\n  content: \"\\f274\"; }\n\n.fa-calendar-minus:before {\n  content: \"\\f272\"; }\n\n.fa-calendar-plus:before {\n  content: \"\\f271\"; }\n\n.fa-calendar-times:before {\n  content: \"\\f273\"; }\n\n.fa-camera:before {\n  content: \"\\f030\"; }\n\n.fa-camera-retro:before {\n  content: \"\\f083\"; }\n\n.fa-car:before {\n  content: \"\\f1b9\"; }\n\n.fa-caret-down:before {\n  content: \"\\f0d7\"; }\n\n.fa-caret-left:before {\n  content: \"\\f0d9\"; }\n\n.fa-caret-right:before {\n  content: \"\\f0da\"; }\n\n.fa-caret-square-down:before {\n  content: \"\\f150\"; }\n\n.fa-caret-square-left:before {\n  content: \"\\f191\"; }\n\n.fa-caret-square-right:before {\n  content: \"\\f152\"; }\n\n.fa-caret-square-up:before {\n  content: \"\\f151\"; }\n\n.fa-caret-up:before {\n  content: \"\\f0d8\"; }\n\n.fa-cart-arrow-down:before {\n  content: \"\\f218\"; }\n\n.fa-cart-plus:before {\n  content: \"\\f217\"; }\n\n.fa-cc-amazon-pay:before {\n  content: \"\\f42d\"; }\n\n.fa-cc-amex:before {\n  content: \"\\f1f3\"; }\n\n.fa-cc-apple-pay:before {\n  content: \"\\f416\"; }\n\n.fa-cc-diners-club:before {\n  content: \"\\f24c\"; }\n\n.fa-cc-discover:before {\n  content: \"\\f1f2\"; }\n\n.fa-cc-jcb:before {\n  content: \"\\f24b\"; }\n\n.fa-cc-mastercard:before {\n  content: \"\\f1f1\"; }\n\n.fa-cc-paypal:before {\n  content: \"\\f1f4\"; }\n\n.fa-cc-stripe:before {\n  content: \"\\f1f5\"; }\n\n.fa-cc-visa:before {\n  content: \"\\f1f0\"; }\n\n.fa-centercode:before {\n  content: \"\\f380\"; }\n\n.fa-certificate:before {\n  content: \"\\f0a3\"; }\n\n.fa-chart-area:before {\n  content: \"\\f1fe\"; }\n\n.fa-chart-bar:before {\n  content: \"\\f080\"; }\n\n.fa-chart-line:before {\n  content: \"\\f201\"; }\n\n.fa-chart-pie:before {\n  content: \"\\f200\"; }\n\n.fa-check:before {\n  content: \"\\f00c\"; }\n\n.fa-check-circle:before {\n  content: \"\\f058\"; }\n\n.fa-check-square:before {\n  content: \"\\f14a\"; }\n\n.fa-chess:before {\n  content: \"\\f439\"; }\n\n.fa-chess-bishop:before {\n  content: \"\\f43a\"; }\n\n.fa-chess-board:before {\n  content: \"\\f43c\"; }\n\n.fa-chess-king:before {\n  content: \"\\f43f\"; }\n\n.fa-chess-knight:before {\n  content: \"\\f441\"; }\n\n.fa-chess-pawn:before {\n  content: \"\\f443\"; }\n\n.fa-chess-queen:before {\n  content: \"\\f445\"; }\n\n.fa-chess-rook:before {\n  content: \"\\f447\"; }\n\n.fa-chevron-circle-down:before {\n  content: \"\\f13a\"; }\n\n.fa-chevron-circle-left:before {\n  content: \"\\f137\"; }\n\n.fa-chevron-circle-right:before {\n  content: \"\\f138\"; }\n\n.fa-chevron-circle-up:before {\n  content: \"\\f139\"; }\n\n.fa-chevron-down:before {\n  content: \"\\f078\"; }\n\n.fa-chevron-left:before {\n  content: \"\\f053\"; }\n\n.fa-chevron-right:before {\n  content: \"\\f054\"; }\n\n.fa-chevron-up:before {\n  content: \"\\f077\"; }\n\n.fa-child:before {\n  content: \"\\f1ae\"; }\n\n.fa-chrome:before {\n  content: \"\\f268\"; }\n\n.fa-circle:before {\n  content: \"\\f111\"; }\n\n.fa-circle-notch:before {\n  content: \"\\f1ce\"; }\n\n.fa-clipboard:before {\n  content: \"\\f328\"; }\n\n.fa-clipboard-check:before {\n  content: \"\\f46c\"; }\n\n.fa-clipboard-list:before {\n  content: \"\\f46d\"; }\n\n.fa-clock:before {\n  content: \"\\f017\"; }\n\n.fa-clone:before {\n  content: \"\\f24d\"; }\n\n.fa-closed-captioning:before {\n  content: \"\\f20a\"; }\n\n.fa-cloud:before {\n  content: \"\\f0c2\"; }\n\n.fa-cloud-download-alt:before {\n  content: \"\\f381\"; }\n\n.fa-cloud-upload-alt:before {\n  content: \"\\f382\"; }\n\n.fa-cloudscale:before {\n  content: \"\\f383\"; }\n\n.fa-cloudsmith:before {\n  content: \"\\f384\"; }\n\n.fa-cloudversify:before {\n  content: \"\\f385\"; }\n\n.fa-code:before {\n  content: \"\\f121\"; }\n\n.fa-code-branch:before {\n  content: \"\\f126\"; }\n\n.fa-codepen:before {\n  content: \"\\f1cb\"; }\n\n.fa-codiepie:before {\n  content: \"\\f284\"; }\n\n.fa-coffee:before {\n  content: \"\\f0f4\"; }\n\n.fa-cog:before {\n  content: \"\\f013\"; }\n\n.fa-cogs:before {\n  content: \"\\f085\"; }\n\n.fa-columns:before {\n  content: \"\\f0db\"; }\n\n.fa-comment:before {\n  content: \"\\f075\"; }\n\n.fa-comment-alt:before {\n  content: \"\\f27a\"; }\n\n.fa-comments:before {\n  content: \"\\f086\"; }\n\n.fa-compass:before {\n  content: \"\\f14e\"; }\n\n.fa-compress:before {\n  content: \"\\f066\"; }\n\n.fa-connectdevelop:before {\n  content: \"\\f20e\"; }\n\n.fa-contao:before {\n  content: \"\\f26d\"; }\n\n.fa-copy:before {\n  content: \"\\f0c5\"; }\n\n.fa-copyright:before {\n  content: \"\\f1f9\"; }\n\n.fa-cpanel:before {\n  content: \"\\f388\"; }\n\n.fa-creative-commons:before {\n  content: \"\\f25e\"; }\n\n.fa-credit-card:before {\n  content: \"\\f09d\"; }\n\n.fa-crop:before {\n  content: \"\\f125\"; }\n\n.fa-crosshairs:before {\n  content: \"\\f05b\"; }\n\n.fa-css3:before {\n  content: \"\\f13c\"; }\n\n.fa-css3-alt:before {\n  content: \"\\f38b\"; }\n\n.fa-cube:before {\n  content: \"\\f1b2\"; }\n\n.fa-cubes:before {\n  content: \"\\f1b3\"; }\n\n.fa-cut:before {\n  content: \"\\f0c4\"; }\n\n.fa-cuttlefish:before {\n  content: \"\\f38c\"; }\n\n.fa-d-and-d:before {\n  content: \"\\f38d\"; }\n\n.fa-dashcube:before {\n  content: \"\\f210\"; }\n\n.fa-database:before {\n  content: \"\\f1c0\"; }\n\n.fa-deaf:before {\n  content: \"\\f2a4\"; }\n\n.fa-delicious:before {\n  content: \"\\f1a5\"; }\n\n.fa-deploydog:before {\n  content: \"\\f38e\"; }\n\n.fa-deskpro:before {\n  content: \"\\f38f\"; }\n\n.fa-desktop:before {\n  content: \"\\f108\"; }\n\n.fa-deviantart:before {\n  content: \"\\f1bd\"; }\n\n.fa-digg:before {\n  content: \"\\f1a6\"; }\n\n.fa-digital-ocean:before {\n  content: \"\\f391\"; }\n\n.fa-discord:before {\n  content: \"\\f392\"; }\n\n.fa-discourse:before {\n  content: \"\\f393\"; }\n\n.fa-dna:before {\n  content: \"\\f471\"; }\n\n.fa-dochub:before {\n  content: \"\\f394\"; }\n\n.fa-docker:before {\n  content: \"\\f395\"; }\n\n.fa-dollar-sign:before {\n  content: \"\\f155\"; }\n\n.fa-dolly:before {\n  content: \"\\f472\"; }\n\n.fa-dolly-flatbed:before {\n  content: \"\\f474\"; }\n\n.fa-dot-circle:before {\n  content: \"\\f192\"; }\n\n.fa-download:before {\n  content: \"\\f019\"; }\n\n.fa-draft2digital:before {\n  content: \"\\f396\"; }\n\n.fa-dribbble:before {\n  content: \"\\f17d\"; }\n\n.fa-dribbble-square:before {\n  content: \"\\f397\"; }\n\n.fa-dropbox:before {\n  content: \"\\f16b\"; }\n\n.fa-drupal:before {\n  content: \"\\f1a9\"; }\n\n.fa-dyalog:before {\n  content: \"\\f399\"; }\n\n.fa-earlybirds:before {\n  content: \"\\f39a\"; }\n\n.fa-edge:before {\n  content: \"\\f282\"; }\n\n.fa-edit:before {\n  content: \"\\f044\"; }\n\n.fa-eject:before {\n  content: \"\\f052\"; }\n\n.fa-elementor:before {\n  content: \"\\f430\"; }\n\n.fa-ellipsis-h:before {\n  content: \"\\f141\"; }\n\n.fa-ellipsis-v:before {\n  content: \"\\f142\"; }\n\n.fa-ember:before {\n  content: \"\\f423\"; }\n\n.fa-empire:before {\n  content: \"\\f1d1\"; }\n\n.fa-envelope:before {\n  content: \"\\f0e0\"; }\n\n.fa-envelope-open:before {\n  content: \"\\f2b6\"; }\n\n.fa-envelope-square:before {\n  content: \"\\f199\"; }\n\n.fa-envira:before {\n  content: \"\\f299\"; }\n\n.fa-eraser:before {\n  content: \"\\f12d\"; }\n\n.fa-erlang:before {\n  content: \"\\f39d\"; }\n\n.fa-ethereum:before {\n  content: \"\\f42e\"; }\n\n.fa-etsy:before {\n  content: \"\\f2d7\"; }\n\n.fa-euro-sign:before {\n  content: \"\\f153\"; }\n\n.fa-exchange-alt:before {\n  content: \"\\f362\"; }\n\n.fa-exclamation:before {\n  content: \"\\f12a\"; }\n\n.fa-exclamation-circle:before {\n  content: \"\\f06a\"; }\n\n.fa-exclamation-triangle:before {\n  content: \"\\f071\"; }\n\n.fa-expand:before {\n  content: \"\\f065\"; }\n\n.fa-expand-arrows-alt:before {\n  content: \"\\f31e\"; }\n\n.fa-expeditedssl:before {\n  content: \"\\f23e\"; }\n\n.fa-external-link-alt:before {\n  content: \"\\f35d\"; }\n\n.fa-external-link-square-alt:before {\n  content: \"\\f360\"; }\n\n.fa-eye:before {\n  content: \"\\f06e\"; }\n\n.fa-eye-dropper:before {\n  content: \"\\f1fb\"; }\n\n.fa-eye-slash:before {\n  content: \"\\f070\"; }\n\n.fa-facebook:before {\n  content: \"\\f09a\"; }\n\n.fa-facebook-f:before {\n  content: \"\\f39e\"; }\n\n.fa-facebook-messenger:before {\n  content: \"\\f39f\"; }\n\n.fa-facebook-square:before {\n  content: \"\\f082\"; }\n\n.fa-fast-backward:before {\n  content: \"\\f049\"; }\n\n.fa-fast-forward:before {\n  content: \"\\f050\"; }\n\n.fa-fax:before {\n  content: \"\\f1ac\"; }\n\n.fa-female:before {\n  content: \"\\f182\"; }\n\n.fa-fighter-jet:before {\n  content: \"\\f0fb\"; }\n\n.fa-file:before {\n  content: \"\\f15b\"; }\n\n.fa-file-alt:before {\n  content: \"\\f15c\"; }\n\n.fa-file-archive:before {\n  content: \"\\f1c6\"; }\n\n.fa-file-audio:before {\n  content: \"\\f1c7\"; }\n\n.fa-file-code:before {\n  content: \"\\f1c9\"; }\n\n.fa-file-excel:before {\n  content: \"\\f1c3\"; }\n\n.fa-file-image:before {\n  content: \"\\f1c5\"; }\n\n.fa-file-pdf:before {\n  content: \"\\f1c1\"; }\n\n.fa-file-powerpoint:before {\n  content: \"\\f1c4\"; }\n\n.fa-file-video:before {\n  content: \"\\f1c8\"; }\n\n.fa-file-word:before {\n  content: \"\\f1c2\"; }\n\n.fa-film:before {\n  content: \"\\f008\"; }\n\n.fa-filter:before {\n  content: \"\\f0b0\"; }\n\n.fa-fire:before {\n  content: \"\\f06d\"; }\n\n.fa-fire-extinguisher:before {\n  content: \"\\f134\"; }\n\n.fa-firefox:before {\n  content: \"\\f269\"; }\n\n.fa-first-aid:before {\n  content: \"\\f479\"; }\n\n.fa-first-order:before {\n  content: \"\\f2b0\"; }\n\n.fa-firstdraft:before {\n  content: \"\\f3a1\"; }\n\n.fa-flag:before {\n  content: \"\\f024\"; }\n\n.fa-flag-checkered:before {\n  content: \"\\f11e\"; }\n\n.fa-flask:before {\n  content: \"\\f0c3\"; }\n\n.fa-flickr:before {\n  content: \"\\f16e\"; }\n\n.fa-flipboard:before {\n  content: \"\\f44d\"; }\n\n.fa-fly:before {\n  content: \"\\f417\"; }\n\n.fa-folder:before {\n  content: \"\\f07b\"; }\n\n.fa-folder-open:before {\n  content: \"\\f07c\"; }\n\n.fa-font:before {\n  content: \"\\f031\"; }\n\n.fa-font-awesome:before {\n  content: \"\\f2b4\"; }\n\n.fa-font-awesome-alt:before {\n  content: \"\\f35c\"; }\n\n.fa-font-awesome-flag:before {\n  content: \"\\f425\"; }\n\n.fa-fonticons:before {\n  content: \"\\f280\"; }\n\n.fa-fonticons-fi:before {\n  content: \"\\f3a2\"; }\n\n.fa-football-ball:before {\n  content: \"\\f44e\"; }\n\n.fa-fort-awesome:before {\n  content: \"\\f286\"; }\n\n.fa-fort-awesome-alt:before {\n  content: \"\\f3a3\"; }\n\n.fa-forumbee:before {\n  content: \"\\f211\"; }\n\n.fa-forward:before {\n  content: \"\\f04e\"; }\n\n.fa-foursquare:before {\n  content: \"\\f180\"; }\n\n.fa-free-code-camp:before {\n  content: \"\\f2c5\"; }\n\n.fa-freebsd:before {\n  content: \"\\f3a4\"; }\n\n.fa-frown:before {\n  content: \"\\f119\"; }\n\n.fa-futbol:before {\n  content: \"\\f1e3\"; }\n\n.fa-gamepad:before {\n  content: \"\\f11b\"; }\n\n.fa-gavel:before {\n  content: \"\\f0e3\"; }\n\n.fa-gem:before {\n  content: \"\\f3a5\"; }\n\n.fa-genderless:before {\n  content: \"\\f22d\"; }\n\n.fa-get-pocket:before {\n  content: \"\\f265\"; }\n\n.fa-gg:before {\n  content: \"\\f260\"; }\n\n.fa-gg-circle:before {\n  content: \"\\f261\"; }\n\n.fa-gift:before {\n  content: \"\\f06b\"; }\n\n.fa-git:before {\n  content: \"\\f1d3\"; }\n\n.fa-git-square:before {\n  content: \"\\f1d2\"; }\n\n.fa-github:before {\n  content: \"\\f09b\"; }\n\n.fa-github-alt:before {\n  content: \"\\f113\"; }\n\n.fa-github-square:before {\n  content: \"\\f092\"; }\n\n.fa-gitkraken:before {\n  content: \"\\f3a6\"; }\n\n.fa-gitlab:before {\n  content: \"\\f296\"; }\n\n.fa-gitter:before {\n  content: \"\\f426\"; }\n\n.fa-glass-martini:before {\n  content: \"\\f000\"; }\n\n.fa-glide:before {\n  content: \"\\f2a5\"; }\n\n.fa-glide-g:before {\n  content: \"\\f2a6\"; }\n\n.fa-globe:before {\n  content: \"\\f0ac\"; }\n\n.fa-gofore:before {\n  content: \"\\f3a7\"; }\n\n.fa-golf-ball:before {\n  content: \"\\f450\"; }\n\n.fa-goodreads:before {\n  content: \"\\f3a8\"; }\n\n.fa-goodreads-g:before {\n  content: \"\\f3a9\"; }\n\n.fa-google:before {\n  content: \"\\f1a0\"; }\n\n.fa-google-drive:before {\n  content: \"\\f3aa\"; }\n\n.fa-google-play:before {\n  content: \"\\f3ab\"; }\n\n.fa-google-plus:before {\n  content: \"\\f2b3\"; }\n\n.fa-google-plus-g:before {\n  content: \"\\f0d5\"; }\n\n.fa-google-plus-square:before {\n  content: \"\\f0d4\"; }\n\n.fa-google-wallet:before {\n  content: \"\\f1ee\"; }\n\n.fa-graduation-cap:before {\n  content: \"\\f19d\"; }\n\n.fa-gratipay:before {\n  content: \"\\f184\"; }\n\n.fa-grav:before {\n  content: \"\\f2d6\"; }\n\n.fa-gripfire:before {\n  content: \"\\f3ac\"; }\n\n.fa-grunt:before {\n  content: \"\\f3ad\"; }\n\n.fa-gulp:before {\n  content: \"\\f3ae\"; }\n\n.fa-h-square:before {\n  content: \"\\f0fd\"; }\n\n.fa-hacker-news:before {\n  content: \"\\f1d4\"; }\n\n.fa-hacker-news-square:before {\n  content: \"\\f3af\"; }\n\n.fa-hand-lizard:before {\n  content: \"\\f258\"; }\n\n.fa-hand-paper:before {\n  content: \"\\f256\"; }\n\n.fa-hand-peace:before {\n  content: \"\\f25b\"; }\n\n.fa-hand-point-down:before {\n  content: \"\\f0a7\"; }\n\n.fa-hand-point-left:before {\n  content: \"\\f0a5\"; }\n\n.fa-hand-point-right:before {\n  content: \"\\f0a4\"; }\n\n.fa-hand-point-up:before {\n  content: \"\\f0a6\"; }\n\n.fa-hand-pointer:before {\n  content: \"\\f25a\"; }\n\n.fa-hand-rock:before {\n  content: \"\\f255\"; }\n\n.fa-hand-scissors:before {\n  content: \"\\f257\"; }\n\n.fa-hand-spock:before {\n  content: \"\\f259\"; }\n\n.fa-handshake:before {\n  content: \"\\f2b5\"; }\n\n.fa-hashtag:before {\n  content: \"\\f292\"; }\n\n.fa-hdd:before {\n  content: \"\\f0a0\"; }\n\n.fa-heading:before {\n  content: \"\\f1dc\"; }\n\n.fa-headphones:before {\n  content: \"\\f025\"; }\n\n.fa-heart:before {\n  content: \"\\f004\"; }\n\n.fa-heartbeat:before {\n  content: \"\\f21e\"; }\n\n.fa-hips:before {\n  content: \"\\f452\"; }\n\n.fa-hire-a-helper:before {\n  content: \"\\f3b0\"; }\n\n.fa-history:before {\n  content: \"\\f1da\"; }\n\n.fa-hockey-puck:before {\n  content: \"\\f453\"; }\n\n.fa-home:before {\n  content: \"\\f015\"; }\n\n.fa-hooli:before {\n  content: \"\\f427\"; }\n\n.fa-hospital:before {\n  content: \"\\f0f8\"; }\n\n.fa-hospital-symbol:before {\n  content: \"\\f47e\"; }\n\n.fa-hotjar:before {\n  content: \"\\f3b1\"; }\n\n.fa-hourglass:before {\n  content: \"\\f254\"; }\n\n.fa-hourglass-end:before {\n  content: \"\\f253\"; }\n\n.fa-hourglass-half:before {\n  content: \"\\f252\"; }\n\n.fa-hourglass-start:before {\n  content: \"\\f251\"; }\n\n.fa-houzz:before {\n  content: \"\\f27c\"; }\n\n.fa-html5:before {\n  content: \"\\f13b\"; }\n\n.fa-hubspot:before {\n  content: \"\\f3b2\"; }\n\n.fa-i-cursor:before {\n  content: \"\\f246\"; }\n\n.fa-id-badge:before {\n  content: \"\\f2c1\"; }\n\n.fa-id-card:before {\n  content: \"\\f2c2\"; }\n\n.fa-image:before {\n  content: \"\\f03e\"; }\n\n.fa-images:before {\n  content: \"\\f302\"; }\n\n.fa-imdb:before {\n  content: \"\\f2d8\"; }\n\n.fa-inbox:before {\n  content: \"\\f01c\"; }\n\n.fa-indent:before {\n  content: \"\\f03c\"; }\n\n.fa-industry:before {\n  content: \"\\f275\"; }\n\n.fa-info:before {\n  content: \"\\f129\"; }\n\n.fa-info-circle:before {\n  content: \"\\f05a\"; }\n\n.fa-instagram:before {\n  content: \"\\f16d\"; }\n\n.fa-internet-explorer:before {\n  content: \"\\f26b\"; }\n\n.fa-ioxhost:before {\n  content: \"\\f208\"; }\n\n.fa-italic:before {\n  content: \"\\f033\"; }\n\n.fa-itunes:before {\n  content: \"\\f3b4\"; }\n\n.fa-itunes-note:before {\n  content: \"\\f3b5\"; }\n\n.fa-jenkins:before {\n  content: \"\\f3b6\"; }\n\n.fa-joget:before {\n  content: \"\\f3b7\"; }\n\n.fa-joomla:before {\n  content: \"\\f1aa\"; }\n\n.fa-js:before {\n  content: \"\\f3b8\"; }\n\n.fa-js-square:before {\n  content: \"\\f3b9\"; }\n\n.fa-jsfiddle:before {\n  content: \"\\f1cc\"; }\n\n.fa-key:before {\n  content: \"\\f084\"; }\n\n.fa-keyboard:before {\n  content: \"\\f11c\"; }\n\n.fa-keycdn:before {\n  content: \"\\f3ba\"; }\n\n.fa-kickstarter:before {\n  content: \"\\f3bb\"; }\n\n.fa-kickstarter-k:before {\n  content: \"\\f3bc\"; }\n\n.fa-korvue:before {\n  content: \"\\f42f\"; }\n\n.fa-language:before {\n  content: \"\\f1ab\"; }\n\n.fa-laptop:before {\n  content: \"\\f109\"; }\n\n.fa-laravel:before {\n  content: \"\\f3bd\"; }\n\n.fa-lastfm:before {\n  content: \"\\f202\"; }\n\n.fa-lastfm-square:before {\n  content: \"\\f203\"; }\n\n.fa-leaf:before {\n  content: \"\\f06c\"; }\n\n.fa-leanpub:before {\n  content: \"\\f212\"; }\n\n.fa-lemon:before {\n  content: \"\\f094\"; }\n\n.fa-less:before {\n  content: \"\\f41d\"; }\n\n.fa-level-down-alt:before {\n  content: \"\\f3be\"; }\n\n.fa-level-up-alt:before {\n  content: \"\\f3bf\"; }\n\n.fa-life-ring:before {\n  content: \"\\f1cd\"; }\n\n.fa-lightbulb:before {\n  content: \"\\f0eb\"; }\n\n.fa-line:before {\n  content: \"\\f3c0\"; }\n\n.fa-link:before {\n  content: \"\\f0c1\"; }\n\n.fa-linkedin:before {\n  content: \"\\f08c\"; }\n\n.fa-linkedin-in:before {\n  content: \"\\f0e1\"; }\n\n.fa-linode:before {\n  content: \"\\f2b8\"; }\n\n.fa-linux:before {\n  content: \"\\f17c\"; }\n\n.fa-lira-sign:before {\n  content: \"\\f195\"; }\n\n.fa-list:before {\n  content: \"\\f03a\"; }\n\n.fa-list-alt:before {\n  content: \"\\f022\"; }\n\n.fa-list-ol:before {\n  content: \"\\f0cb\"; }\n\n.fa-list-ul:before {\n  content: \"\\f0ca\"; }\n\n.fa-location-arrow:before {\n  content: \"\\f124\"; }\n\n.fa-lock:before {\n  content: \"\\f023\"; }\n\n.fa-lock-open:before {\n  content: \"\\f3c1\"; }\n\n.fa-long-arrow-alt-down:before {\n  content: \"\\f309\"; }\n\n.fa-long-arrow-alt-left:before {\n  content: \"\\f30a\"; }\n\n.fa-long-arrow-alt-right:before {\n  content: \"\\f30b\"; }\n\n.fa-long-arrow-alt-up:before {\n  content: \"\\f30c\"; }\n\n.fa-low-vision:before {\n  content: \"\\f2a8\"; }\n\n.fa-lyft:before {\n  content: \"\\f3c3\"; }\n\n.fa-magento:before {\n  content: \"\\f3c4\"; }\n\n.fa-magic:before {\n  content: \"\\f0d0\"; }\n\n.fa-magnet:before {\n  content: \"\\f076\"; }\n\n.fa-male:before {\n  content: \"\\f183\"; }\n\n.fa-map:before {\n  content: \"\\f279\"; }\n\n.fa-map-marker:before {\n  content: \"\\f041\"; }\n\n.fa-map-marker-alt:before {\n  content: \"\\f3c5\"; }\n\n.fa-map-pin:before {\n  content: \"\\f276\"; }\n\n.fa-map-signs:before {\n  content: \"\\f277\"; }\n\n.fa-mars:before {\n  content: \"\\f222\"; }\n\n.fa-mars-double:before {\n  content: \"\\f227\"; }\n\n.fa-mars-stroke:before {\n  content: \"\\f229\"; }\n\n.fa-mars-stroke-h:before {\n  content: \"\\f22b\"; }\n\n.fa-mars-stroke-v:before {\n  content: \"\\f22a\"; }\n\n.fa-maxcdn:before {\n  content: \"\\f136\"; }\n\n.fa-medapps:before {\n  content: \"\\f3c6\"; }\n\n.fa-medium:before {\n  content: \"\\f23a\"; }\n\n.fa-medium-m:before {\n  content: \"\\f3c7\"; }\n\n.fa-medkit:before {\n  content: \"\\f0fa\"; }\n\n.fa-medrt:before {\n  content: \"\\f3c8\"; }\n\n.fa-meetup:before {\n  content: \"\\f2e0\"; }\n\n.fa-meh:before {\n  content: \"\\f11a\"; }\n\n.fa-mercury:before {\n  content: \"\\f223\"; }\n\n.fa-microchip:before {\n  content: \"\\f2db\"; }\n\n.fa-microphone:before {\n  content: \"\\f130\"; }\n\n.fa-microphone-slash:before {\n  content: \"\\f131\"; }\n\n.fa-microsoft:before {\n  content: \"\\f3ca\"; }\n\n.fa-minus:before {\n  content: \"\\f068\"; }\n\n.fa-minus-circle:before {\n  content: \"\\f056\"; }\n\n.fa-minus-square:before {\n  content: \"\\f146\"; }\n\n.fa-mix:before {\n  content: \"\\f3cb\"; }\n\n.fa-mixcloud:before {\n  content: \"\\f289\"; }\n\n.fa-mizuni:before {\n  content: \"\\f3cc\"; }\n\n.fa-mobile:before {\n  content: \"\\f10b\"; }\n\n.fa-mobile-alt:before {\n  content: \"\\f3cd\"; }\n\n.fa-modx:before {\n  content: \"\\f285\"; }\n\n.fa-monero:before {\n  content: \"\\f3d0\"; }\n\n.fa-money-bill-alt:before {\n  content: \"\\f3d1\"; }\n\n.fa-moon:before {\n  content: \"\\f186\"; }\n\n.fa-motorcycle:before {\n  content: \"\\f21c\"; }\n\n.fa-mouse-pointer:before {\n  content: \"\\f245\"; }\n\n.fa-music:before {\n  content: \"\\f001\"; }\n\n.fa-napster:before {\n  content: \"\\f3d2\"; }\n\n.fa-neuter:before {\n  content: \"\\f22c\"; }\n\n.fa-newspaper:before {\n  content: \"\\f1ea\"; }\n\n.fa-nintendo-switch:before {\n  content: \"\\f418\"; }\n\n.fa-node:before {\n  content: \"\\f419\"; }\n\n.fa-node-js:before {\n  content: \"\\f3d3\"; }\n\n.fa-npm:before {\n  content: \"\\f3d4\"; }\n\n.fa-ns8:before {\n  content: \"\\f3d5\"; }\n\n.fa-nutritionix:before {\n  content: \"\\f3d6\"; }\n\n.fa-object-group:before {\n  content: \"\\f247\"; }\n\n.fa-object-ungroup:before {\n  content: \"\\f248\"; }\n\n.fa-odnoklassniki:before {\n  content: \"\\f263\"; }\n\n.fa-odnoklassniki-square:before {\n  content: \"\\f264\"; }\n\n.fa-opencart:before {\n  content: \"\\f23d\"; }\n\n.fa-openid:before {\n  content: \"\\f19b\"; }\n\n.fa-opera:before {\n  content: \"\\f26a\"; }\n\n.fa-optin-monster:before {\n  content: \"\\f23c\"; }\n\n.fa-osi:before {\n  content: \"\\f41a\"; }\n\n.fa-outdent:before {\n  content: \"\\f03b\"; }\n\n.fa-page4:before {\n  content: \"\\f3d7\"; }\n\n.fa-pagelines:before {\n  content: \"\\f18c\"; }\n\n.fa-paint-brush:before {\n  content: \"\\f1fc\"; }\n\n.fa-palfed:before {\n  content: \"\\f3d8\"; }\n\n.fa-pallet:before {\n  content: \"\\f482\"; }\n\n.fa-paper-plane:before {\n  content: \"\\f1d8\"; }\n\n.fa-paperclip:before {\n  content: \"\\f0c6\"; }\n\n.fa-paragraph:before {\n  content: \"\\f1dd\"; }\n\n.fa-paste:before {\n  content: \"\\f0ea\"; }\n\n.fa-patreon:before {\n  content: \"\\f3d9\"; }\n\n.fa-pause:before {\n  content: \"\\f04c\"; }\n\n.fa-pause-circle:before {\n  content: \"\\f28b\"; }\n\n.fa-paw:before {\n  content: \"\\f1b0\"; }\n\n.fa-paypal:before {\n  content: \"\\f1ed\"; }\n\n.fa-pen-square:before {\n  content: \"\\f14b\"; }\n\n.fa-pencil-alt:before {\n  content: \"\\f303\"; }\n\n.fa-percent:before {\n  content: \"\\f295\"; }\n\n.fa-periscope:before {\n  content: \"\\f3da\"; }\n\n.fa-phabricator:before {\n  content: \"\\f3db\"; }\n\n.fa-phoenix-framework:before {\n  content: \"\\f3dc\"; }\n\n.fa-phone:before {\n  content: \"\\f095\"; }\n\n.fa-phone-square:before {\n  content: \"\\f098\"; }\n\n.fa-phone-volume:before {\n  content: \"\\f2a0\"; }\n\n.fa-php:before {\n  content: \"\\f457\"; }\n\n.fa-pied-piper:before {\n  content: \"\\f2ae\"; }\n\n.fa-pied-piper-alt:before {\n  content: \"\\f1a8\"; }\n\n.fa-pied-piper-pp:before {\n  content: \"\\f1a7\"; }\n\n.fa-pills:before {\n  content: \"\\f484\"; }\n\n.fa-pinterest:before {\n  content: \"\\f0d2\"; }\n\n.fa-pinterest-p:before {\n  content: \"\\f231\"; }\n\n.fa-pinterest-square:before {\n  content: \"\\f0d3\"; }\n\n.fa-plane:before {\n  content: \"\\f072\"; }\n\n.fa-play:before {\n  content: \"\\f04b\"; }\n\n.fa-play-circle:before {\n  content: \"\\f144\"; }\n\n.fa-playstation:before {\n  content: \"\\f3df\"; }\n\n.fa-plug:before {\n  content: \"\\f1e6\"; }\n\n.fa-plus:before {\n  content: \"\\f067\"; }\n\n.fa-plus-circle:before {\n  content: \"\\f055\"; }\n\n.fa-plus-square:before {\n  content: \"\\f0fe\"; }\n\n.fa-podcast:before {\n  content: \"\\f2ce\"; }\n\n.fa-pound-sign:before {\n  content: \"\\f154\"; }\n\n.fa-power-off:before {\n  content: \"\\f011\"; }\n\n.fa-print:before {\n  content: \"\\f02f\"; }\n\n.fa-product-hunt:before {\n  content: \"\\f288\"; }\n\n.fa-pushed:before {\n  content: \"\\f3e1\"; }\n\n.fa-puzzle-piece:before {\n  content: \"\\f12e\"; }\n\n.fa-python:before {\n  content: \"\\f3e2\"; }\n\n.fa-qq:before {\n  content: \"\\f1d6\"; }\n\n.fa-qrcode:before {\n  content: \"\\f029\"; }\n\n.fa-question:before {\n  content: \"\\f128\"; }\n\n.fa-question-circle:before {\n  content: \"\\f059\"; }\n\n.fa-quidditch:before {\n  content: \"\\f458\"; }\n\n.fa-quinscape:before {\n  content: \"\\f459\"; }\n\n.fa-quora:before {\n  content: \"\\f2c4\"; }\n\n.fa-quote-left:before {\n  content: \"\\f10d\"; }\n\n.fa-quote-right:before {\n  content: \"\\f10e\"; }\n\n.fa-random:before {\n  content: \"\\f074\"; }\n\n.fa-ravelry:before {\n  content: \"\\f2d9\"; }\n\n.fa-react:before {\n  content: \"\\f41b\"; }\n\n.fa-rebel:before {\n  content: \"\\f1d0\"; }\n\n.fa-recycle:before {\n  content: \"\\f1b8\"; }\n\n.fa-red-river:before {\n  content: \"\\f3e3\"; }\n\n.fa-reddit:before {\n  content: \"\\f1a1\"; }\n\n.fa-reddit-alien:before {\n  content: \"\\f281\"; }\n\n.fa-reddit-square:before {\n  content: \"\\f1a2\"; }\n\n.fa-redo:before {\n  content: \"\\f01e\"; }\n\n.fa-redo-alt:before {\n  content: \"\\f2f9\"; }\n\n.fa-registered:before {\n  content: \"\\f25d\"; }\n\n.fa-rendact:before {\n  content: \"\\f3e4\"; }\n\n.fa-renren:before {\n  content: \"\\f18b\"; }\n\n.fa-reply:before {\n  content: \"\\f3e5\"; }\n\n.fa-reply-all:before {\n  content: \"\\f122\"; }\n\n.fa-replyd:before {\n  content: \"\\f3e6\"; }\n\n.fa-resolving:before {\n  content: \"\\f3e7\"; }\n\n.fa-retweet:before {\n  content: \"\\f079\"; }\n\n.fa-road:before {\n  content: \"\\f018\"; }\n\n.fa-rocket:before {\n  content: \"\\f135\"; }\n\n.fa-rocketchat:before {\n  content: \"\\f3e8\"; }\n\n.fa-rockrms:before {\n  content: \"\\f3e9\"; }\n\n.fa-rss:before {\n  content: \"\\f09e\"; }\n\n.fa-rss-square:before {\n  content: \"\\f143\"; }\n\n.fa-ruble-sign:before {\n  content: \"\\f158\"; }\n\n.fa-rupee-sign:before {\n  content: \"\\f156\"; }\n\n.fa-safari:before {\n  content: \"\\f267\"; }\n\n.fa-sass:before {\n  content: \"\\f41e\"; }\n\n.fa-save:before {\n  content: \"\\f0c7\"; }\n\n.fa-schlix:before {\n  content: \"\\f3ea\"; }\n\n.fa-scribd:before {\n  content: \"\\f28a\"; }\n\n.fa-search:before {\n  content: \"\\f002\"; }\n\n.fa-search-minus:before {\n  content: \"\\f010\"; }\n\n.fa-search-plus:before {\n  content: \"\\f00e\"; }\n\n.fa-searchengin:before {\n  content: \"\\f3eb\"; }\n\n.fa-sellcast:before {\n  content: \"\\f2da\"; }\n\n.fa-sellsy:before {\n  content: \"\\f213\"; }\n\n.fa-server:before {\n  content: \"\\f233\"; }\n\n.fa-servicestack:before {\n  content: \"\\f3ec\"; }\n\n.fa-share:before {\n  content: \"\\f064\"; }\n\n.fa-share-alt:before {\n  content: \"\\f1e0\"; }\n\n.fa-share-alt-square:before {\n  content: \"\\f1e1\"; }\n\n.fa-share-square:before {\n  content: \"\\f14d\"; }\n\n.fa-shekel-sign:before {\n  content: \"\\f20b\"; }\n\n.fa-shield-alt:before {\n  content: \"\\f3ed\"; }\n\n.fa-ship:before {\n  content: \"\\f21a\"; }\n\n.fa-shipping-fast:before {\n  content: \"\\f48b\"; }\n\n.fa-shirtsinbulk:before {\n  content: \"\\f214\"; }\n\n.fa-shopping-bag:before {\n  content: \"\\f290\"; }\n\n.fa-shopping-basket:before {\n  content: \"\\f291\"; }\n\n.fa-shopping-cart:before {\n  content: \"\\f07a\"; }\n\n.fa-shower:before {\n  content: \"\\f2cc\"; }\n\n.fa-sign-in-alt:before {\n  content: \"\\f2f6\"; }\n\n.fa-sign-language:before {\n  content: \"\\f2a7\"; }\n\n.fa-sign-out-alt:before {\n  content: \"\\f2f5\"; }\n\n.fa-signal:before {\n  content: \"\\f012\"; }\n\n.fa-simplybuilt:before {\n  content: \"\\f215\"; }\n\n.fa-sistrix:before {\n  content: \"\\f3ee\"; }\n\n.fa-sitemap:before {\n  content: \"\\f0e8\"; }\n\n.fa-skyatlas:before {\n  content: \"\\f216\"; }\n\n.fa-skype:before {\n  content: \"\\f17e\"; }\n\n.fa-slack:before {\n  content: \"\\f198\"; }\n\n.fa-slack-hash:before {\n  content: \"\\f3ef\"; }\n\n.fa-sliders-h:before {\n  content: \"\\f1de\"; }\n\n.fa-slideshare:before {\n  content: \"\\f1e7\"; }\n\n.fa-smile:before {\n  content: \"\\f118\"; }\n\n.fa-snapchat:before {\n  content: \"\\f2ab\"; }\n\n.fa-snapchat-ghost:before {\n  content: \"\\f2ac\"; }\n\n.fa-snapchat-square:before {\n  content: \"\\f2ad\"; }\n\n.fa-snowflake:before {\n  content: \"\\f2dc\"; }\n\n.fa-sort:before {\n  content: \"\\f0dc\"; }\n\n.fa-sort-alpha-down:before {\n  content: \"\\f15d\"; }\n\n.fa-sort-alpha-up:before {\n  content: \"\\f15e\"; }\n\n.fa-sort-amount-down:before {\n  content: \"\\f160\"; }\n\n.fa-sort-amount-up:before {\n  content: \"\\f161\"; }\n\n.fa-sort-down:before {\n  content: \"\\f0dd\"; }\n\n.fa-sort-numeric-down:before {\n  content: \"\\f162\"; }\n\n.fa-sort-numeric-up:before {\n  content: \"\\f163\"; }\n\n.fa-sort-up:before {\n  content: \"\\f0de\"; }\n\n.fa-soundcloud:before {\n  content: \"\\f1be\"; }\n\n.fa-space-shuttle:before {\n  content: \"\\f197\"; }\n\n.fa-speakap:before {\n  content: \"\\f3f3\"; }\n\n.fa-spinner:before {\n  content: \"\\f110\"; }\n\n.fa-spotify:before {\n  content: \"\\f1bc\"; }\n\n.fa-square:before {\n  content: \"\\f0c8\"; }\n\n.fa-square-full:before {\n  content: \"\\f45c\"; }\n\n.fa-stack-exchange:before {\n  content: \"\\f18d\"; }\n\n.fa-stack-overflow:before {\n  content: \"\\f16c\"; }\n\n.fa-star:before {\n  content: \"\\f005\"; }\n\n.fa-star-half:before {\n  content: \"\\f089\"; }\n\n.fa-staylinked:before {\n  content: \"\\f3f5\"; }\n\n.fa-steam:before {\n  content: \"\\f1b6\"; }\n\n.fa-steam-square:before {\n  content: \"\\f1b7\"; }\n\n.fa-steam-symbol:before {\n  content: \"\\f3f6\"; }\n\n.fa-step-backward:before {\n  content: \"\\f048\"; }\n\n.fa-step-forward:before {\n  content: \"\\f051\"; }\n\n.fa-stethoscope:before {\n  content: \"\\f0f1\"; }\n\n.fa-sticker-mule:before {\n  content: \"\\f3f7\"; }\n\n.fa-sticky-note:before {\n  content: \"\\f249\"; }\n\n.fa-stop:before {\n  content: \"\\f04d\"; }\n\n.fa-stop-circle:before {\n  content: \"\\f28d\"; }\n\n.fa-stopwatch:before {\n  content: \"\\f2f2\"; }\n\n.fa-strava:before {\n  content: \"\\f428\"; }\n\n.fa-street-view:before {\n  content: \"\\f21d\"; }\n\n.fa-strikethrough:before {\n  content: \"\\f0cc\"; }\n\n.fa-stripe:before {\n  content: \"\\f429\"; }\n\n.fa-stripe-s:before {\n  content: \"\\f42a\"; }\n\n.fa-studiovinari:before {\n  content: \"\\f3f8\"; }\n\n.fa-stumbleupon:before {\n  content: \"\\f1a4\"; }\n\n.fa-stumbleupon-circle:before {\n  content: \"\\f1a3\"; }\n\n.fa-subscript:before {\n  content: \"\\f12c\"; }\n\n.fa-subway:before {\n  content: \"\\f239\"; }\n\n.fa-suitcase:before {\n  content: \"\\f0f2\"; }\n\n.fa-sun:before {\n  content: \"\\f185\"; }\n\n.fa-superpowers:before {\n  content: \"\\f2dd\"; }\n\n.fa-superscript:before {\n  content: \"\\f12b\"; }\n\n.fa-supple:before {\n  content: \"\\f3f9\"; }\n\n.fa-sync:before {\n  content: \"\\f021\"; }\n\n.fa-sync-alt:before {\n  content: \"\\f2f1\"; }\n\n.fa-syringe:before {\n  content: \"\\f48e\"; }\n\n.fa-table:before {\n  content: \"\\f0ce\"; }\n\n.fa-table-tennis:before {\n  content: \"\\f45d\"; }\n\n.fa-tablet:before {\n  content: \"\\f10a\"; }\n\n.fa-tablet-alt:before {\n  content: \"\\f3fa\"; }\n\n.fa-tachometer-alt:before {\n  content: \"\\f3fd\"; }\n\n.fa-tag:before {\n  content: \"\\f02b\"; }\n\n.fa-tags:before {\n  content: \"\\f02c\"; }\n\n.fa-tasks:before {\n  content: \"\\f0ae\"; }\n\n.fa-taxi:before {\n  content: \"\\f1ba\"; }\n\n.fa-telegram:before {\n  content: \"\\f2c6\"; }\n\n.fa-telegram-plane:before {\n  content: \"\\f3fe\"; }\n\n.fa-tencent-weibo:before {\n  content: \"\\f1d5\"; }\n\n.fa-terminal:before {\n  content: \"\\f120\"; }\n\n.fa-text-height:before {\n  content: \"\\f034\"; }\n\n.fa-text-width:before {\n  content: \"\\f035\"; }\n\n.fa-th:before {\n  content: \"\\f00a\"; }\n\n.fa-th-large:before {\n  content: \"\\f009\"; }\n\n.fa-th-list:before {\n  content: \"\\f00b\"; }\n\n.fa-themeisle:before {\n  content: \"\\f2b2\"; }\n\n.fa-thermometer:before {\n  content: \"\\f491\"; }\n\n.fa-thermometer-empty:before {\n  content: \"\\f2cb\"; }\n\n.fa-thermometer-full:before {\n  content: \"\\f2c7\"; }\n\n.fa-thermometer-half:before {\n  content: \"\\f2c9\"; }\n\n.fa-thermometer-quarter:before {\n  content: \"\\f2ca\"; }\n\n.fa-thermometer-three-quarters:before {\n  content: \"\\f2c8\"; }\n\n.fa-thumbs-down:before {\n  content: \"\\f165\"; }\n\n.fa-thumbs-up:before {\n  content: \"\\f164\"; }\n\n.fa-thumbtack:before {\n  content: \"\\f08d\"; }\n\n.fa-ticket-alt:before {\n  content: \"\\f3ff\"; }\n\n.fa-times:before {\n  content: \"\\f00d\"; }\n\n.fa-times-circle:before {\n  content: \"\\f057\"; }\n\n.fa-tint:before {\n  content: \"\\f043\"; }\n\n.fa-toggle-off:before {\n  content: \"\\f204\"; }\n\n.fa-toggle-on:before {\n  content: \"\\f205\"; }\n\n.fa-trademark:before {\n  content: \"\\f25c\"; }\n\n.fa-train:before {\n  content: \"\\f238\"; }\n\n.fa-transgender:before {\n  content: \"\\f224\"; }\n\n.fa-transgender-alt:before {\n  content: \"\\f225\"; }\n\n.fa-trash:before {\n  content: \"\\f1f8\"; }\n\n.fa-trash-alt:before {\n  content: \"\\f2ed\"; }\n\n.fa-tree:before {\n  content: \"\\f1bb\"; }\n\n.fa-trello:before {\n  content: \"\\f181\"; }\n\n.fa-tripadvisor:before {\n  content: \"\\f262\"; }\n\n.fa-trophy:before {\n  content: \"\\f091\"; }\n\n.fa-truck:before {\n  content: \"\\f0d1\"; }\n\n.fa-tty:before {\n  content: \"\\f1e4\"; }\n\n.fa-tumblr:before {\n  content: \"\\f173\"; }\n\n.fa-tumblr-square:before {\n  content: \"\\f174\"; }\n\n.fa-tv:before {\n  content: \"\\f26c\"; }\n\n.fa-twitch:before {\n  content: \"\\f1e8\"; }\n\n.fa-twitter:before {\n  content: \"\\f099\"; }\n\n.fa-twitter-square:before {\n  content: \"\\f081\"; }\n\n.fa-typo3:before {\n  content: \"\\f42b\"; }\n\n.fa-uber:before {\n  content: \"\\f402\"; }\n\n.fa-uikit:before {\n  content: \"\\f403\"; }\n\n.fa-umbrella:before {\n  content: \"\\f0e9\"; }\n\n.fa-underline:before {\n  content: \"\\f0cd\"; }\n\n.fa-undo:before {\n  content: \"\\f0e2\"; }\n\n.fa-undo-alt:before {\n  content: \"\\f2ea\"; }\n\n.fa-uniregistry:before {\n  content: \"\\f404\"; }\n\n.fa-universal-access:before {\n  content: \"\\f29a\"; }\n\n.fa-university:before {\n  content: \"\\f19c\"; }\n\n.fa-unlink:before {\n  content: \"\\f127\"; }\n\n.fa-unlock:before {\n  content: \"\\f09c\"; }\n\n.fa-unlock-alt:before {\n  content: \"\\f13e\"; }\n\n.fa-untappd:before {\n  content: \"\\f405\"; }\n\n.fa-upload:before {\n  content: \"\\f093\"; }\n\n.fa-usb:before {\n  content: \"\\f287\"; }\n\n.fa-user:before {\n  content: \"\\f007\"; }\n\n.fa-user-circle:before {\n  content: \"\\f2bd\"; }\n\n.fa-user-md:before {\n  content: \"\\f0f0\"; }\n\n.fa-user-plus:before {\n  content: \"\\f234\"; }\n\n.fa-user-secret:before {\n  content: \"\\f21b\"; }\n\n.fa-user-times:before {\n  content: \"\\f235\"; }\n\n.fa-users:before {\n  content: \"\\f0c0\"; }\n\n.fa-ussunnah:before {\n  content: \"\\f407\"; }\n\n.fa-utensil-spoon:before {\n  content: \"\\f2e5\"; }\n\n.fa-utensils:before {\n  content: \"\\f2e7\"; }\n\n.fa-vaadin:before {\n  content: \"\\f408\"; }\n\n.fa-venus:before {\n  content: \"\\f221\"; }\n\n.fa-venus-double:before {\n  content: \"\\f226\"; }\n\n.fa-venus-mars:before {\n  content: \"\\f228\"; }\n\n.fa-viacoin:before {\n  content: \"\\f237\"; }\n\n.fa-viadeo:before {\n  content: \"\\f2a9\"; }\n\n.fa-viadeo-square:before {\n  content: \"\\f2aa\"; }\n\n.fa-viber:before {\n  content: \"\\f409\"; }\n\n.fa-video:before {\n  content: \"\\f03d\"; }\n\n.fa-vimeo:before {\n  content: \"\\f40a\"; }\n\n.fa-vimeo-square:before {\n  content: \"\\f194\"; }\n\n.fa-vimeo-v:before {\n  content: \"\\f27d\"; }\n\n.fa-vine:before {\n  content: \"\\f1ca\"; }\n\n.fa-vk:before {\n  content: \"\\f189\"; }\n\n.fa-vnv:before {\n  content: \"\\f40b\"; }\n\n.fa-volleyball-ball:before {\n  content: \"\\f45f\"; }\n\n.fa-volume-down:before {\n  content: \"\\f027\"; }\n\n.fa-volume-off:before {\n  content: \"\\f026\"; }\n\n.fa-volume-up:before {\n  content: \"\\f028\"; }\n\n.fa-vuejs:before {\n  content: \"\\f41f\"; }\n\n.fa-warehouse:before {\n  content: \"\\f494\"; }\n\n.fa-weibo:before {\n  content: \"\\f18a\"; }\n\n.fa-weight:before {\n  content: \"\\f496\"; }\n\n.fa-weixin:before {\n  content: \"\\f1d7\"; }\n\n.fa-whatsapp:before {\n  content: \"\\f232\"; }\n\n.fa-whatsapp-square:before {\n  content: \"\\f40c\"; }\n\n.fa-wheelchair:before {\n  content: \"\\f193\"; }\n\n.fa-whmcs:before {\n  content: \"\\f40d\"; }\n\n.fa-wifi:before {\n  content: \"\\f1eb\"; }\n\n.fa-wikipedia-w:before {\n  content: \"\\f266\"; }\n\n.fa-window-close:before {\n  content: \"\\f410\"; }\n\n.fa-window-maximize:before {\n  content: \"\\f2d0\"; }\n\n.fa-window-minimize:before {\n  content: \"\\f2d1\"; }\n\n.fa-window-restore:before {\n  content: \"\\f2d2\"; }\n\n.fa-windows:before {\n  content: \"\\f17a\"; }\n\n.fa-won-sign:before {\n  content: \"\\f159\"; }\n\n.fa-wordpress:before {\n  content: \"\\f19a\"; }\n\n.fa-wordpress-simple:before {\n  content: \"\\f411\"; }\n\n.fa-wpbeginner:before {\n  content: \"\\f297\"; }\n\n.fa-wpexplorer:before {\n  content: \"\\f2de\"; }\n\n.fa-wpforms:before {\n  content: \"\\f298\"; }\n\n.fa-wrench:before {\n  content: \"\\f0ad\"; }\n\n.fa-xbox:before {\n  content: \"\\f412\"; }\n\n.fa-xing:before {\n  content: \"\\f168\"; }\n\n.fa-xing-square:before {\n  content: \"\\f169\"; }\n\n.fa-y-combinator:before {\n  content: \"\\f23b\"; }\n\n.fa-yahoo:before {\n  content: \"\\f19e\"; }\n\n.fa-yandex:before {\n  content: \"\\f413\"; }\n\n.fa-yandex-international:before {\n  content: \"\\f414\"; }\n\n.fa-yelp:before {\n  content: \"\\f1e9\"; }\n\n.fa-yen-sign:before {\n  content: \"\\f157\"; }\n\n.fa-yoast:before {\n  content: \"\\f2b1\"; }\n\n.fa-youtube:before {\n  content: \"\\f167\"; }\n\n.fa-youtube-square:before {\n  content: \"\\f431\"; }\n\n.sr-only {\n  border: 0;\n  clip: rect(0, 0, 0, 0);\n  height: 1px;\n  margin: -1px;\n  overflow: hidden;\n  padding: 0;\n  position: absolute;\n  width: 1px; }\n\n.sr-only-focusable:active, .sr-only-focusable:focus {\n  clip: auto;\n  height: auto;\n  margin: 0;\n  overflow: visible;\n  position: static;\n  width: auto; }\n@font-face {\n  font-family: 'Font Awesome 5 Brands';\n  font-style: normal;\n  font-weight: normal;\n  src: url(\"../webfonts/fa-brands-400.eot\");\n  src: url(\"../webfonts/fa-brands-400.eot?#iefix\") format(\"embedded-opentype\"), url(\"../webfonts/fa-brands-400.woff2\") format(\"woff2\"), url(\"../webfonts/fa-brands-400.woff\") format(\"woff\"), url(\"../webfonts/fa-brands-400.ttf\") format(\"truetype\"), url(\"../webfonts/fa-brands-400.svg#fontawesome\") format(\"svg\"); }\n\n.fab {\n  font-family: 'Font Awesome 5 Brands'; }\n@font-face {\n  font-family: 'Font Awesome 5 Free';\n  font-style: normal;\n  font-weight: 400;\n  src: url(\"../webfonts/fa-regular-400.eot\");\n  src: url(\"../webfonts/fa-regular-400.eot?#iefix\") format(\"embedded-opentype\"), url(\"../webfonts/fa-regular-400.woff2\") format(\"woff2\"), url(\"../webfonts/fa-regular-400.woff\") format(\"woff\"), url(\"../webfonts/fa-regular-400.ttf\") format(\"truetype\"), url(\"../webfonts/fa-regular-400.svg#fontawesome\") format(\"svg\"); }\n\n.far {\n  font-family: 'Font Awesome 5 Free';\n  font-weight: 400; }\n@font-face {\n  font-family: 'Font Awesome 5 Free';\n  font-style: normal;\n  font-weight: 900;\n  src: url(\"../webfonts/fa-solid-900.eot\");\n  src: url(\"../webfonts/fa-solid-900.eot?#iefix\") format(\"embedded-opentype\"), url(\"../webfonts/fa-solid-900.woff2\") format(\"woff2\"), url(\"../webfonts/fa-solid-900.woff\") format(\"woff\"), url(\"../webfonts/fa-solid-900.ttf\") format(\"truetype\"), url(\"../webfonts/fa-solid-900.svg#fontawesome\") format(\"svg\"); }\n\n.fa,\n.fas {\n  font-family: 'Font Awesome 5 Free';\n  font-weight: 900; }\n"
  },
  {
    "path": "src/sourceDev.WebApp/SharedThemes/darkly/wwwroot/css/site.css",
    "content": "﻿html {\n    position: relative;\n    min-height: 100%;\n}\n\nbody {\n    min-height: 100vh;\n    padding-top: 178px;\n}\n\n\n#newPostLink {\n    position: absolute;\n    top: 170px;\n    right: 0px;\n}\n\n#editPostLink {\n    position: absolute;\n    top: 200px;\n    right: 0px;\n}\n\n#unpublishPostLink {\n    position: absolute;\n    top: 230px !important;\n    right: 0px !important;\n}\n\n#pageManagerLink {\n    position: absolute;\n    top: 170px;\n    right: 0px;\n}\n\n#newPageLink {\n    position: absolute;\n    top: 200px;\n    right: 0px;\n}\n\n#editPageLink {\n    position: absolute;\n    top: 230px;\n    right: 0px\n}\n\n#unpublishPageLink {\n    position: absolute;\n    top: 260px !important;\n    right: 0px !important\n}\n\n\n\n#sidenavtoggle {\n    position: absolute;\n    top: 170px;\n    right: 5px;\n}\n\n\n@media screen and (max-width: 812px) {\n    #sidenavtoggle,\n    #sidenavmenu {\n        display: none;\n    }\n}\n\n.flex-fill {\n    flex: 1 1 auto !important;\n}\n\n\n.carousel-caption p {\n    font-size: 20px;\n    line-height: 1.4;\n}\n\n@media screen and (max-width: 768px) {\n    .carousel-caption {\n        display: none\n    }\n}\n\n\n\n\nimg, video, iframe {\n    max-width: 100%;\n}\n\ntd img, video, iframe {\n    max-width: none;\n}\n\n\n\n.table td, .table th {\n    vertical-align: inherit;\n}\n\n/******** jquery smartmenu bootstrap 4 ******/\n/* Carets in collapsible mode (make them look like +/- buttons) */\n.navbar-nav.sm-collapsible .sub-arrow {\n    position: absolute;\n    top: 50%;\n    right: 0;\n    margin: -0.7em 0.5em 0 0;\n    border: 1px solid rgba(0, 0, 0, .1);\n    border-radius: .25rem;\n    padding: 0;\n    width: 2em;\n    height: 1.4em;\n    font-size: 1.25rem;\n    line-height: 1.2em;\n    text-align: center;\n}\n\n    .navbar-nav.sm-collapsible .sub-arrow::before {\n        content: '+';\n    }\n\n.navbar-nav.sm-collapsible .show > a > .sub-arrow::before {\n    content: '-';\n}\n\n.navbar-dark .navbar-nav.sm-collapsible .nav-link .sub-arrow {\n    border-color: rgba(255, 255, 255, .1);\n}\n/* make sure there's room for the carets */\n.navbar-nav.sm-collapsible .has-submenu {\n    padding-right: 3em;\n}\n/* keep the carets properly positioned */\n.navbar-nav.sm-collapsible .nav-link,\n.navbar-nav.sm-collapsible .dropdown-item {\n    position: relative;\n}\n\n\n/* Nav carets in expanded mode */\n.navbar-nav:not(.sm-collapsible) .nav-link .sub-arrow {\n    display: inline-block;\n    width: 0;\n    height: 0;\n    margin-left: .255em;\n    vertical-align: .255em;\n    border-top: .3em solid;\n    border-right: .3em solid transparent;\n    border-left: .3em solid transparent;\n}\n/* point the arrows up for .fixed-bottom navbars */\n.fixed-bottom .navbar-nav:not(.sm-collapsible) .nav-link .sub-arrow,\n.fixed-bottom .navbar-nav:not(.sm-collapsible):not([data-sm-skip]) .dropdown-toggle::after {\n    border-top: 0;\n    border-bottom: .3em solid;\n}\n\n\n/* Dropdown carets in expanded mode */\n.navbar-nav:not(.sm-collapsible) .dropdown-item .sub-arrow,\n.navbar-nav:not(.sm-collapsible):not([data-sm-skip]) .dropdown-menu .dropdown-toggle::after {\n    position: absolute;\n    top: 50%;\n    right: 0;\n    width: 0;\n    height: 0;\n    margin-top: -.3em;\n    margin-right: 1em;\n    border-top: .3em solid transparent;\n    border-bottom: .3em solid transparent;\n    border-left: .3em solid;\n}\n/* make sure there's room for the carets */\n.navbar-nav:not(.sm-collapsible) .dropdown-item.has-submenu {\n    padding-right: 2em;\n}\n\n\n/* Scrolling arrows for tall menus */\n.navbar-nav .scroll-up,\n.navbar-nav .scroll-down {\n    position: absolute;\n    display: none;\n    visibility: hidden;\n    height: 20px;\n    overflow: hidden;\n    text-align: center;\n}\n\n.navbar-nav .scroll-up-arrow,\n.navbar-nav .scroll-down-arrow {\n    position: absolute;\n    top: -2px;\n    left: 50%;\n    margin-left: -8px;\n    width: 0;\n    height: 0;\n    overflow: hidden;\n    border-top: 7px solid transparent;\n    border-right: 7px solid transparent;\n    border-bottom: 7px solid;\n    border-left: 7px solid transparent;\n}\n\n.navbar-nav .scroll-down-arrow {\n    top: 6px;\n    border-top: 7px solid;\n    border-right: 7px solid transparent;\n    border-bottom: 7px solid transparent;\n    border-left: 7px solid transparent;\n}\n\n\n/* Add some spacing for 2+ level sub menus in collapsible mode */\n.navbar-nav.sm-collapsible .dropdown-menu .dropdown-menu {\n    margin: .5em;\n}\n\n\n/* Fix SmartMenus sub menus auto width (subMenusMinWidth/subMenusMaxWidth options) */\n.navbar-nav:not([data-sm-skip]) .dropdown-item {\n    white-space: normal;\n}\n\n.navbar-nav:not(.sm-collapsible) .sm-nowrap > li > .dropdown-item {\n    white-space: nowrap;\n}\n/******** end jquery smart menu bootstrap-4 *****************/\n\n.brand-header {\n    height: 100px;\n    background-color: #222;\n}\n\nheader .navbar {\n    top: 100px;\n}\n"
  },
  {
    "path": "src/sourceDev.WebApp/SharedThemes/darkly/wwwroot/js/bootstrap.bundle.js",
    "content": "/*!\n  * Bootstrap v5.0.2 (https://getbootstrap.com/)\n  * Copyright 2011-2021 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)\n  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n  */\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n  typeof define === 'function' && define.amd ? define(factory) :\n  (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.bootstrap = factory());\n}(this, (function () { 'use strict';\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): dom/selector-engine.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n  const NODE_TEXT = 3;\n  const SelectorEngine = {\n    find(selector, element = document.documentElement) {\n      return [].concat(...Element.prototype.querySelectorAll.call(element, selector));\n    },\n\n    findOne(selector, element = document.documentElement) {\n      return Element.prototype.querySelector.call(element, selector);\n    },\n\n    children(element, selector) {\n      return [].concat(...element.children).filter(child => child.matches(selector));\n    },\n\n    parents(element, selector) {\n      const parents = [];\n      let ancestor = element.parentNode;\n\n      while (ancestor && ancestor.nodeType === Node.ELEMENT_NODE && ancestor.nodeType !== NODE_TEXT) {\n        if (ancestor.matches(selector)) {\n          parents.push(ancestor);\n        }\n\n        ancestor = ancestor.parentNode;\n      }\n\n      return parents;\n    },\n\n    prev(element, selector) {\n      let previous = element.previousElementSibling;\n\n      while (previous) {\n        if (previous.matches(selector)) {\n          return [previous];\n        }\n\n        previous = previous.previousElementSibling;\n      }\n\n      return [];\n    },\n\n    next(element, selector) {\n      let next = element.nextElementSibling;\n\n      while (next) {\n        if (next.matches(selector)) {\n          return [next];\n        }\n\n        next = next.nextElementSibling;\n      }\n\n      return [];\n    }\n\n  };\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): util/index.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n\n  const MAX_UID = 1000000;\n  const MILLISECONDS_MULTIPLIER = 1000;\n  const TRANSITION_END = 'transitionend'; // Shoutout AngusCroll (https://goo.gl/pxwQGp)\n\n  const toType = obj => {\n    if (obj === null || obj === undefined) {\n      return `${obj}`;\n    }\n\n    return {}.toString.call(obj).match(/\\s([a-z]+)/i)[1].toLowerCase();\n  };\n  /**\n   * --------------------------------------------------------------------------\n   * Public Util Api\n   * --------------------------------------------------------------------------\n   */\n\n\n  const getUID = prefix => {\n    do {\n      prefix += Math.floor(Math.random() * MAX_UID);\n    } while (document.getElementById(prefix));\n\n    return prefix;\n  };\n\n  const getSelector = element => {\n    let selector = element.getAttribute('data-bs-target');\n\n    if (!selector || selector === '#') {\n      let hrefAttr = element.getAttribute('href'); // The only valid content that could double as a selector are IDs or classes,\n      // so everything starting with `#` or `.`. If a \"real\" URL is used as the selector,\n      // `document.querySelector` will rightfully complain it is invalid.\n      // See https://github.com/twbs/bootstrap/issues/32273\n\n      if (!hrefAttr || !hrefAttr.includes('#') && !hrefAttr.startsWith('.')) {\n        return null;\n      } // Just in case some CMS puts out a full URL with the anchor appended\n\n\n      if (hrefAttr.includes('#') && !hrefAttr.startsWith('#')) {\n        hrefAttr = `#${hrefAttr.split('#')[1]}`;\n      }\n\n      selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : null;\n    }\n\n    return selector;\n  };\n\n  const getSelectorFromElement = element => {\n    const selector = getSelector(element);\n\n    if (selector) {\n      return document.querySelector(selector) ? selector : null;\n    }\n\n    return null;\n  };\n\n  const getElementFromSelector = element => {\n    const selector = getSelector(element);\n    return selector ? document.querySelector(selector) : null;\n  };\n\n  const getTransitionDurationFromElement = element => {\n    if (!element) {\n      return 0;\n    } // Get transition-duration of the element\n\n\n    let {\n      transitionDuration,\n      transitionDelay\n    } = window.getComputedStyle(element);\n    const floatTransitionDuration = Number.parseFloat(transitionDuration);\n    const floatTransitionDelay = Number.parseFloat(transitionDelay); // Return 0 if element or transition duration is not found\n\n    if (!floatTransitionDuration && !floatTransitionDelay) {\n      return 0;\n    } // If multiple durations are defined, take the first\n\n\n    transitionDuration = transitionDuration.split(',')[0];\n    transitionDelay = transitionDelay.split(',')[0];\n    return (Number.parseFloat(transitionDuration) + Number.parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER;\n  };\n\n  const triggerTransitionEnd = element => {\n    element.dispatchEvent(new Event(TRANSITION_END));\n  };\n\n  const isElement$1 = obj => {\n    if (!obj || typeof obj !== 'object') {\n      return false;\n    }\n\n    if (typeof obj.jquery !== 'undefined') {\n      obj = obj[0];\n    }\n\n    return typeof obj.nodeType !== 'undefined';\n  };\n\n  const getElement = obj => {\n    if (isElement$1(obj)) {\n      // it's a jQuery object or a node element\n      return obj.jquery ? obj[0] : obj;\n    }\n\n    if (typeof obj === 'string' && obj.length > 0) {\n      return SelectorEngine.findOne(obj);\n    }\n\n    return null;\n  };\n\n  const typeCheckConfig = (componentName, config, configTypes) => {\n    Object.keys(configTypes).forEach(property => {\n      const expectedTypes = configTypes[property];\n      const value = config[property];\n      const valueType = value && isElement$1(value) ? 'element' : toType(value);\n\n      if (!new RegExp(expectedTypes).test(valueType)) {\n        throw new TypeError(`${componentName.toUpperCase()}: Option \"${property}\" provided type \"${valueType}\" but expected type \"${expectedTypes}\".`);\n      }\n    });\n  };\n\n  const isVisible = element => {\n    if (!isElement$1(element) || element.getClientRects().length === 0) {\n      return false;\n    }\n\n    return getComputedStyle(element).getPropertyValue('visibility') === 'visible';\n  };\n\n  const isDisabled = element => {\n    if (!element || element.nodeType !== Node.ELEMENT_NODE) {\n      return true;\n    }\n\n    if (element.classList.contains('disabled')) {\n      return true;\n    }\n\n    if (typeof element.disabled !== 'undefined') {\n      return element.disabled;\n    }\n\n    return element.hasAttribute('disabled') && element.getAttribute('disabled') !== 'false';\n  };\n\n  const findShadowRoot = element => {\n    if (!document.documentElement.attachShadow) {\n      return null;\n    } // Can find the shadow root otherwise it'll return the document\n\n\n    if (typeof element.getRootNode === 'function') {\n      const root = element.getRootNode();\n      return root instanceof ShadowRoot ? root : null;\n    }\n\n    if (element instanceof ShadowRoot) {\n      return element;\n    } // when we don't find a shadow root\n\n\n    if (!element.parentNode) {\n      return null;\n    }\n\n    return findShadowRoot(element.parentNode);\n  };\n\n  const noop = () => {};\n\n  const reflow = element => element.offsetHeight;\n\n  const getjQuery = () => {\n    const {\n      jQuery\n    } = window;\n\n    if (jQuery && !document.body.hasAttribute('data-bs-no-jquery')) {\n      return jQuery;\n    }\n\n    return null;\n  };\n\n  const DOMContentLoadedCallbacks = [];\n\n  const onDOMContentLoaded = callback => {\n    if (document.readyState === 'loading') {\n      // add listener on the first call when the document is in loading state\n      if (!DOMContentLoadedCallbacks.length) {\n        document.addEventListener('DOMContentLoaded', () => {\n          DOMContentLoadedCallbacks.forEach(callback => callback());\n        });\n      }\n\n      DOMContentLoadedCallbacks.push(callback);\n    } else {\n      callback();\n    }\n  };\n\n  const isRTL = () => document.documentElement.dir === 'rtl';\n\n  const defineJQueryPlugin = plugin => {\n    onDOMContentLoaded(() => {\n      const $ = getjQuery();\n      /* istanbul ignore if */\n\n      if ($) {\n        const name = plugin.NAME;\n        const JQUERY_NO_CONFLICT = $.fn[name];\n        $.fn[name] = plugin.jQueryInterface;\n        $.fn[name].Constructor = plugin;\n\n        $.fn[name].noConflict = () => {\n          $.fn[name] = JQUERY_NO_CONFLICT;\n          return plugin.jQueryInterface;\n        };\n      }\n    });\n  };\n\n  const execute = callback => {\n    if (typeof callback === 'function') {\n      callback();\n    }\n  };\n\n  const executeAfterTransition = (callback, transitionElement, waitForTransition = true) => {\n    if (!waitForTransition) {\n      execute(callback);\n      return;\n    }\n\n    const durationPadding = 5;\n    const emulatedDuration = getTransitionDurationFromElement(transitionElement) + durationPadding;\n    let called = false;\n\n    const handler = ({\n      target\n    }) => {\n      if (target !== transitionElement) {\n        return;\n      }\n\n      called = true;\n      transitionElement.removeEventListener(TRANSITION_END, handler);\n      execute(callback);\n    };\n\n    transitionElement.addEventListener(TRANSITION_END, handler);\n    setTimeout(() => {\n      if (!called) {\n        triggerTransitionEnd(transitionElement);\n      }\n    }, emulatedDuration);\n  };\n  /**\n   * Return the previous/next element of a list.\n   *\n   * @param {array} list    The list of elements\n   * @param activeElement   The active element\n   * @param shouldGetNext   Choose to get next or previous element\n   * @param isCycleAllowed\n   * @return {Element|elem} The proper element\n   */\n\n\n  const getNextActiveElement = (list, activeElement, shouldGetNext, isCycleAllowed) => {\n    let index = list.indexOf(activeElement); // if the element does not exist in the list return an element depending on the direction and if cycle is allowed\n\n    if (index === -1) {\n      return list[!shouldGetNext && isCycleAllowed ? list.length - 1 : 0];\n    }\n\n    const listLength = list.length;\n    index += shouldGetNext ? 1 : -1;\n\n    if (isCycleAllowed) {\n      index = (index + listLength) % listLength;\n    }\n\n    return list[Math.max(0, Math.min(index, listLength - 1))];\n  };\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): dom/event-handler.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const namespaceRegex = /[^.]*(?=\\..*)\\.|.*/;\n  const stripNameRegex = /\\..*/;\n  const stripUidRegex = /::\\d+$/;\n  const eventRegistry = {}; // Events storage\n\n  let uidEvent = 1;\n  const customEvents = {\n    mouseenter: 'mouseover',\n    mouseleave: 'mouseout'\n  };\n  const customEventsRegex = /^(mouseenter|mouseleave)/i;\n  const nativeEvents = new Set(['click', 'dblclick', 'mouseup', 'mousedown', 'contextmenu', 'mousewheel', 'DOMMouseScroll', 'mouseover', 'mouseout', 'mousemove', 'selectstart', 'selectend', 'keydown', 'keypress', 'keyup', 'orientationchange', 'touchstart', 'touchmove', 'touchend', 'touchcancel', 'pointerdown', 'pointermove', 'pointerup', 'pointerleave', 'pointercancel', 'gesturestart', 'gesturechange', 'gestureend', 'focus', 'blur', 'change', 'reset', 'select', 'submit', 'focusin', 'focusout', 'load', 'unload', 'beforeunload', 'resize', 'move', 'DOMContentLoaded', 'readystatechange', 'error', 'abort', 'scroll']);\n  /**\n   * ------------------------------------------------------------------------\n   * Private methods\n   * ------------------------------------------------------------------------\n   */\n\n  function getUidEvent(element, uid) {\n    return uid && `${uid}::${uidEvent++}` || element.uidEvent || uidEvent++;\n  }\n\n  function getEvent(element) {\n    const uid = getUidEvent(element);\n    element.uidEvent = uid;\n    eventRegistry[uid] = eventRegistry[uid] || {};\n    return eventRegistry[uid];\n  }\n\n  function bootstrapHandler(element, fn) {\n    return function handler(event) {\n      event.delegateTarget = element;\n\n      if (handler.oneOff) {\n        EventHandler.off(element, event.type, fn);\n      }\n\n      return fn.apply(element, [event]);\n    };\n  }\n\n  function bootstrapDelegationHandler(element, selector, fn) {\n    return function handler(event) {\n      const domElements = element.querySelectorAll(selector);\n\n      for (let {\n        target\n      } = event; target && target !== this; target = target.parentNode) {\n        for (let i = domElements.length; i--;) {\n          if (domElements[i] === target) {\n            event.delegateTarget = target;\n\n            if (handler.oneOff) {\n              // eslint-disable-next-line unicorn/consistent-destructuring\n              EventHandler.off(element, event.type, selector, fn);\n            }\n\n            return fn.apply(target, [event]);\n          }\n        }\n      } // To please ESLint\n\n\n      return null;\n    };\n  }\n\n  function findHandler(events, handler, delegationSelector = null) {\n    const uidEventList = Object.keys(events);\n\n    for (let i = 0, len = uidEventList.length; i < len; i++) {\n      const event = events[uidEventList[i]];\n\n      if (event.originalHandler === handler && event.delegationSelector === delegationSelector) {\n        return event;\n      }\n    }\n\n    return null;\n  }\n\n  function normalizeParams(originalTypeEvent, handler, delegationFn) {\n    const delegation = typeof handler === 'string';\n    const originalHandler = delegation ? delegationFn : handler;\n    let typeEvent = getTypeEvent(originalTypeEvent);\n    const isNative = nativeEvents.has(typeEvent);\n\n    if (!isNative) {\n      typeEvent = originalTypeEvent;\n    }\n\n    return [delegation, originalHandler, typeEvent];\n  }\n\n  function addHandler(element, originalTypeEvent, handler, delegationFn, oneOff) {\n    if (typeof originalTypeEvent !== 'string' || !element) {\n      return;\n    }\n\n    if (!handler) {\n      handler = delegationFn;\n      delegationFn = null;\n    } // in case of mouseenter or mouseleave wrap the handler within a function that checks for its DOM position\n    // this prevents the handler from being dispatched the same way as mouseover or mouseout does\n\n\n    if (customEventsRegex.test(originalTypeEvent)) {\n      const wrapFn = fn => {\n        return function (event) {\n          if (!event.relatedTarget || event.relatedTarget !== event.delegateTarget && !event.delegateTarget.contains(event.relatedTarget)) {\n            return fn.call(this, event);\n          }\n        };\n      };\n\n      if (delegationFn) {\n        delegationFn = wrapFn(delegationFn);\n      } else {\n        handler = wrapFn(handler);\n      }\n    }\n\n    const [delegation, originalHandler, typeEvent] = normalizeParams(originalTypeEvent, handler, delegationFn);\n    const events = getEvent(element);\n    const handlers = events[typeEvent] || (events[typeEvent] = {});\n    const previousFn = findHandler(handlers, originalHandler, delegation ? handler : null);\n\n    if (previousFn) {\n      previousFn.oneOff = previousFn.oneOff && oneOff;\n      return;\n    }\n\n    const uid = getUidEvent(originalHandler, originalTypeEvent.replace(namespaceRegex, ''));\n    const fn = delegation ? bootstrapDelegationHandler(element, handler, delegationFn) : bootstrapHandler(element, handler);\n    fn.delegationSelector = delegation ? handler : null;\n    fn.originalHandler = originalHandler;\n    fn.oneOff = oneOff;\n    fn.uidEvent = uid;\n    handlers[uid] = fn;\n    element.addEventListener(typeEvent, fn, delegation);\n  }\n\n  function removeHandler(element, events, typeEvent, handler, delegationSelector) {\n    const fn = findHandler(events[typeEvent], handler, delegationSelector);\n\n    if (!fn) {\n      return;\n    }\n\n    element.removeEventListener(typeEvent, fn, Boolean(delegationSelector));\n    delete events[typeEvent][fn.uidEvent];\n  }\n\n  function removeNamespacedHandlers(element, events, typeEvent, namespace) {\n    const storeElementEvent = events[typeEvent] || {};\n    Object.keys(storeElementEvent).forEach(handlerKey => {\n      if (handlerKey.includes(namespace)) {\n        const event = storeElementEvent[handlerKey];\n        removeHandler(element, events, typeEvent, event.originalHandler, event.delegationSelector);\n      }\n    });\n  }\n\n  function getTypeEvent(event) {\n    // allow to get the native events from namespaced events ('click.bs.button' --> 'click')\n    event = event.replace(stripNameRegex, '');\n    return customEvents[event] || event;\n  }\n\n  const EventHandler = {\n    on(element, event, handler, delegationFn) {\n      addHandler(element, event, handler, delegationFn, false);\n    },\n\n    one(element, event, handler, delegationFn) {\n      addHandler(element, event, handler, delegationFn, true);\n    },\n\n    off(element, originalTypeEvent, handler, delegationFn) {\n      if (typeof originalTypeEvent !== 'string' || !element) {\n        return;\n      }\n\n      const [delegation, originalHandler, typeEvent] = normalizeParams(originalTypeEvent, handler, delegationFn);\n      const inNamespace = typeEvent !== originalTypeEvent;\n      const events = getEvent(element);\n      const isNamespace = originalTypeEvent.startsWith('.');\n\n      if (typeof originalHandler !== 'undefined') {\n        // Simplest case: handler is passed, remove that listener ONLY.\n        if (!events || !events[typeEvent]) {\n          return;\n        }\n\n        removeHandler(element, events, typeEvent, originalHandler, delegation ? handler : null);\n        return;\n      }\n\n      if (isNamespace) {\n        Object.keys(events).forEach(elementEvent => {\n          removeNamespacedHandlers(element, events, elementEvent, originalTypeEvent.slice(1));\n        });\n      }\n\n      const storeElementEvent = events[typeEvent] || {};\n      Object.keys(storeElementEvent).forEach(keyHandlers => {\n        const handlerKey = keyHandlers.replace(stripUidRegex, '');\n\n        if (!inNamespace || originalTypeEvent.includes(handlerKey)) {\n          const event = storeElementEvent[keyHandlers];\n          removeHandler(element, events, typeEvent, event.originalHandler, event.delegationSelector);\n        }\n      });\n    },\n\n    trigger(element, event, args) {\n      if (typeof event !== 'string' || !element) {\n        return null;\n      }\n\n      const $ = getjQuery();\n      const typeEvent = getTypeEvent(event);\n      const inNamespace = event !== typeEvent;\n      const isNative = nativeEvents.has(typeEvent);\n      let jQueryEvent;\n      let bubbles = true;\n      let nativeDispatch = true;\n      let defaultPrevented = false;\n      let evt = null;\n\n      if (inNamespace && $) {\n        jQueryEvent = $.Event(event, args);\n        $(element).trigger(jQueryEvent);\n        bubbles = !jQueryEvent.isPropagationStopped();\n        nativeDispatch = !jQueryEvent.isImmediatePropagationStopped();\n        defaultPrevented = jQueryEvent.isDefaultPrevented();\n      }\n\n      if (isNative) {\n        evt = document.createEvent('HTMLEvents');\n        evt.initEvent(typeEvent, bubbles, true);\n      } else {\n        evt = new CustomEvent(event, {\n          bubbles,\n          cancelable: true\n        });\n      } // merge custom information in our event\n\n\n      if (typeof args !== 'undefined') {\n        Object.keys(args).forEach(key => {\n          Object.defineProperty(evt, key, {\n            get() {\n              return args[key];\n            }\n\n          });\n        });\n      }\n\n      if (defaultPrevented) {\n        evt.preventDefault();\n      }\n\n      if (nativeDispatch) {\n        element.dispatchEvent(evt);\n      }\n\n      if (evt.defaultPrevented && typeof jQueryEvent !== 'undefined') {\n        jQueryEvent.preventDefault();\n      }\n\n      return evt;\n    }\n\n  };\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): dom/data.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n  const elementMap = new Map();\n  var Data = {\n    set(element, key, instance) {\n      if (!elementMap.has(element)) {\n        elementMap.set(element, new Map());\n      }\n\n      const instanceMap = elementMap.get(element); // make it clear we only want one instance per element\n      // can be removed later when multiple key/instances are fine to be used\n\n      if (!instanceMap.has(key) && instanceMap.size !== 0) {\n        // eslint-disable-next-line no-console\n        console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(instanceMap.keys())[0]}.`);\n        return;\n      }\n\n      instanceMap.set(key, instance);\n    },\n\n    get(element, key) {\n      if (elementMap.has(element)) {\n        return elementMap.get(element).get(key) || null;\n      }\n\n      return null;\n    },\n\n    remove(element, key) {\n      if (!elementMap.has(element)) {\n        return;\n      }\n\n      const instanceMap = elementMap.get(element);\n      instanceMap.delete(key); // free up element references if there are no instances left for an element\n\n      if (instanceMap.size === 0) {\n        elementMap.delete(element);\n      }\n    }\n\n  };\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): base-component.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const VERSION = '5.0.2';\n\n  class BaseComponent {\n    constructor(element) {\n      element = getElement(element);\n\n      if (!element) {\n        return;\n      }\n\n      this._element = element;\n      Data.set(this._element, this.constructor.DATA_KEY, this);\n    }\n\n    dispose() {\n      Data.remove(this._element, this.constructor.DATA_KEY);\n      EventHandler.off(this._element, this.constructor.EVENT_KEY);\n      Object.getOwnPropertyNames(this).forEach(propertyName => {\n        this[propertyName] = null;\n      });\n    }\n\n    _queueCallback(callback, element, isAnimated = true) {\n      executeAfterTransition(callback, element, isAnimated);\n    }\n    /** Static */\n\n\n    static getInstance(element) {\n      return Data.get(element, this.DATA_KEY);\n    }\n\n    static getOrCreateInstance(element, config = {}) {\n      return this.getInstance(element) || new this(element, typeof config === 'object' ? config : null);\n    }\n\n    static get VERSION() {\n      return VERSION;\n    }\n\n    static get NAME() {\n      throw new Error('You have to implement the static method \"NAME\", for each component!');\n    }\n\n    static get DATA_KEY() {\n      return `bs.${this.NAME}`;\n    }\n\n    static get EVENT_KEY() {\n      return `.${this.DATA_KEY}`;\n    }\n\n  }\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): alert.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$c = 'alert';\n  const DATA_KEY$b = 'bs.alert';\n  const EVENT_KEY$b = `.${DATA_KEY$b}`;\n  const DATA_API_KEY$8 = '.data-api';\n  const SELECTOR_DISMISS = '[data-bs-dismiss=\"alert\"]';\n  const EVENT_CLOSE = `close${EVENT_KEY$b}`;\n  const EVENT_CLOSED = `closed${EVENT_KEY$b}`;\n  const EVENT_CLICK_DATA_API$7 = `click${EVENT_KEY$b}${DATA_API_KEY$8}`;\n  const CLASS_NAME_ALERT = 'alert';\n  const CLASS_NAME_FADE$6 = 'fade';\n  const CLASS_NAME_SHOW$9 = 'show';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Alert extends BaseComponent {\n    // Getters\n    static get NAME() {\n      return NAME$c;\n    } // Public\n\n\n    close(element) {\n      const rootElement = element ? this._getRootElement(element) : this._element;\n\n      const customEvent = this._triggerCloseEvent(rootElement);\n\n      if (customEvent === null || customEvent.defaultPrevented) {\n        return;\n      }\n\n      this._removeElement(rootElement);\n    } // Private\n\n\n    _getRootElement(element) {\n      return getElementFromSelector(element) || element.closest(`.${CLASS_NAME_ALERT}`);\n    }\n\n    _triggerCloseEvent(element) {\n      return EventHandler.trigger(element, EVENT_CLOSE);\n    }\n\n    _removeElement(element) {\n      element.classList.remove(CLASS_NAME_SHOW$9);\n      const isAnimated = element.classList.contains(CLASS_NAME_FADE$6);\n\n      this._queueCallback(() => this._destroyElement(element), element, isAnimated);\n    }\n\n    _destroyElement(element) {\n      element.remove();\n      EventHandler.trigger(element, EVENT_CLOSED);\n    } // Static\n\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = Alert.getOrCreateInstance(this);\n\n        if (config === 'close') {\n          data[config](this);\n        }\n      });\n    }\n\n    static handleDismiss(alertInstance) {\n      return function (event) {\n        if (event) {\n          event.preventDefault();\n        }\n\n        alertInstance.close(this);\n      };\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(document, EVENT_CLICK_DATA_API$7, SELECTOR_DISMISS, Alert.handleDismiss(new Alert()));\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Alert to jQuery only if jQuery is present\n   */\n\n  defineJQueryPlugin(Alert);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): button.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$b = 'button';\n  const DATA_KEY$a = 'bs.button';\n  const EVENT_KEY$a = `.${DATA_KEY$a}`;\n  const DATA_API_KEY$7 = '.data-api';\n  const CLASS_NAME_ACTIVE$3 = 'active';\n  const SELECTOR_DATA_TOGGLE$5 = '[data-bs-toggle=\"button\"]';\n  const EVENT_CLICK_DATA_API$6 = `click${EVENT_KEY$a}${DATA_API_KEY$7}`;\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Button extends BaseComponent {\n    // Getters\n    static get NAME() {\n      return NAME$b;\n    } // Public\n\n\n    toggle() {\n      // Toggle class and sync the `aria-pressed` attribute with the return value of the `.toggle()` method\n      this._element.setAttribute('aria-pressed', this._element.classList.toggle(CLASS_NAME_ACTIVE$3));\n    } // Static\n\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = Button.getOrCreateInstance(this);\n\n        if (config === 'toggle') {\n          data[config]();\n        }\n      });\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(document, EVENT_CLICK_DATA_API$6, SELECTOR_DATA_TOGGLE$5, event => {\n    event.preventDefault();\n    const button = event.target.closest(SELECTOR_DATA_TOGGLE$5);\n    const data = Button.getOrCreateInstance(button);\n    data.toggle();\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Button to jQuery only if jQuery is present\n   */\n\n  defineJQueryPlugin(Button);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): dom/manipulator.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  function normalizeData(val) {\n    if (val === 'true') {\n      return true;\n    }\n\n    if (val === 'false') {\n      return false;\n    }\n\n    if (val === Number(val).toString()) {\n      return Number(val);\n    }\n\n    if (val === '' || val === 'null') {\n      return null;\n    }\n\n    return val;\n  }\n\n  function normalizeDataKey(key) {\n    return key.replace(/[A-Z]/g, chr => `-${chr.toLowerCase()}`);\n  }\n\n  const Manipulator = {\n    setDataAttribute(element, key, value) {\n      element.setAttribute(`data-bs-${normalizeDataKey(key)}`, value);\n    },\n\n    removeDataAttribute(element, key) {\n      element.removeAttribute(`data-bs-${normalizeDataKey(key)}`);\n    },\n\n    getDataAttributes(element) {\n      if (!element) {\n        return {};\n      }\n\n      const attributes = {};\n      Object.keys(element.dataset).filter(key => key.startsWith('bs')).forEach(key => {\n        let pureKey = key.replace(/^bs/, '');\n        pureKey = pureKey.charAt(0).toLowerCase() + pureKey.slice(1, pureKey.length);\n        attributes[pureKey] = normalizeData(element.dataset[key]);\n      });\n      return attributes;\n    },\n\n    getDataAttribute(element, key) {\n      return normalizeData(element.getAttribute(`data-bs-${normalizeDataKey(key)}`));\n    },\n\n    offset(element) {\n      const rect = element.getBoundingClientRect();\n      return {\n        top: rect.top + document.body.scrollTop,\n        left: rect.left + document.body.scrollLeft\n      };\n    },\n\n    position(element) {\n      return {\n        top: element.offsetTop,\n        left: element.offsetLeft\n      };\n    }\n\n  };\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): carousel.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$a = 'carousel';\n  const DATA_KEY$9 = 'bs.carousel';\n  const EVENT_KEY$9 = `.${DATA_KEY$9}`;\n  const DATA_API_KEY$6 = '.data-api';\n  const ARROW_LEFT_KEY = 'ArrowLeft';\n  const ARROW_RIGHT_KEY = 'ArrowRight';\n  const TOUCHEVENT_COMPAT_WAIT = 500; // Time for mouse compat events to fire after touch\n\n  const SWIPE_THRESHOLD = 40;\n  const Default$9 = {\n    interval: 5000,\n    keyboard: true,\n    slide: false,\n    pause: 'hover',\n    wrap: true,\n    touch: true\n  };\n  const DefaultType$9 = {\n    interval: '(number|boolean)',\n    keyboard: 'boolean',\n    slide: '(boolean|string)',\n    pause: '(string|boolean)',\n    wrap: 'boolean',\n    touch: 'boolean'\n  };\n  const ORDER_NEXT = 'next';\n  const ORDER_PREV = 'prev';\n  const DIRECTION_LEFT = 'left';\n  const DIRECTION_RIGHT = 'right';\n  const KEY_TO_DIRECTION = {\n    [ARROW_LEFT_KEY]: DIRECTION_RIGHT,\n    [ARROW_RIGHT_KEY]: DIRECTION_LEFT\n  };\n  const EVENT_SLIDE = `slide${EVENT_KEY$9}`;\n  const EVENT_SLID = `slid${EVENT_KEY$9}`;\n  const EVENT_KEYDOWN = `keydown${EVENT_KEY$9}`;\n  const EVENT_MOUSEENTER = `mouseenter${EVENT_KEY$9}`;\n  const EVENT_MOUSELEAVE = `mouseleave${EVENT_KEY$9}`;\n  const EVENT_TOUCHSTART = `touchstart${EVENT_KEY$9}`;\n  const EVENT_TOUCHMOVE = `touchmove${EVENT_KEY$9}`;\n  const EVENT_TOUCHEND = `touchend${EVENT_KEY$9}`;\n  const EVENT_POINTERDOWN = `pointerdown${EVENT_KEY$9}`;\n  const EVENT_POINTERUP = `pointerup${EVENT_KEY$9}`;\n  const EVENT_DRAG_START = `dragstart${EVENT_KEY$9}`;\n  const EVENT_LOAD_DATA_API$2 = `load${EVENT_KEY$9}${DATA_API_KEY$6}`;\n  const EVENT_CLICK_DATA_API$5 = `click${EVENT_KEY$9}${DATA_API_KEY$6}`;\n  const CLASS_NAME_CAROUSEL = 'carousel';\n  const CLASS_NAME_ACTIVE$2 = 'active';\n  const CLASS_NAME_SLIDE = 'slide';\n  const CLASS_NAME_END = 'carousel-item-end';\n  const CLASS_NAME_START = 'carousel-item-start';\n  const CLASS_NAME_NEXT = 'carousel-item-next';\n  const CLASS_NAME_PREV = 'carousel-item-prev';\n  const CLASS_NAME_POINTER_EVENT = 'pointer-event';\n  const SELECTOR_ACTIVE$1 = '.active';\n  const SELECTOR_ACTIVE_ITEM = '.active.carousel-item';\n  const SELECTOR_ITEM = '.carousel-item';\n  const SELECTOR_ITEM_IMG = '.carousel-item img';\n  const SELECTOR_NEXT_PREV = '.carousel-item-next, .carousel-item-prev';\n  const SELECTOR_INDICATORS = '.carousel-indicators';\n  const SELECTOR_INDICATOR = '[data-bs-target]';\n  const SELECTOR_DATA_SLIDE = '[data-bs-slide], [data-bs-slide-to]';\n  const SELECTOR_DATA_RIDE = '[data-bs-ride=\"carousel\"]';\n  const POINTER_TYPE_TOUCH = 'touch';\n  const POINTER_TYPE_PEN = 'pen';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Carousel extends BaseComponent {\n    constructor(element, config) {\n      super(element);\n      this._items = null;\n      this._interval = null;\n      this._activeElement = null;\n      this._isPaused = false;\n      this._isSliding = false;\n      this.touchTimeout = null;\n      this.touchStartX = 0;\n      this.touchDeltaX = 0;\n      this._config = this._getConfig(config);\n      this._indicatorsElement = SelectorEngine.findOne(SELECTOR_INDICATORS, this._element);\n      this._touchSupported = 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0;\n      this._pointerEvent = Boolean(window.PointerEvent);\n\n      this._addEventListeners();\n    } // Getters\n\n\n    static get Default() {\n      return Default$9;\n    }\n\n    static get NAME() {\n      return NAME$a;\n    } // Public\n\n\n    next() {\n      this._slide(ORDER_NEXT);\n    }\n\n    nextWhenVisible() {\n      // Don't call next when the page isn't visible\n      // or the carousel or its parent isn't visible\n      if (!document.hidden && isVisible(this._element)) {\n        this.next();\n      }\n    }\n\n    prev() {\n      this._slide(ORDER_PREV);\n    }\n\n    pause(event) {\n      if (!event) {\n        this._isPaused = true;\n      }\n\n      if (SelectorEngine.findOne(SELECTOR_NEXT_PREV, this._element)) {\n        triggerTransitionEnd(this._element);\n        this.cycle(true);\n      }\n\n      clearInterval(this._interval);\n      this._interval = null;\n    }\n\n    cycle(event) {\n      if (!event) {\n        this._isPaused = false;\n      }\n\n      if (this._interval) {\n        clearInterval(this._interval);\n        this._interval = null;\n      }\n\n      if (this._config && this._config.interval && !this._isPaused) {\n        this._updateInterval();\n\n        this._interval = setInterval((document.visibilityState ? this.nextWhenVisible : this.next).bind(this), this._config.interval);\n      }\n    }\n\n    to(index) {\n      this._activeElement = SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element);\n\n      const activeIndex = this._getItemIndex(this._activeElement);\n\n      if (index > this._items.length - 1 || index < 0) {\n        return;\n      }\n\n      if (this._isSliding) {\n        EventHandler.one(this._element, EVENT_SLID, () => this.to(index));\n        return;\n      }\n\n      if (activeIndex === index) {\n        this.pause();\n        this.cycle();\n        return;\n      }\n\n      const order = index > activeIndex ? ORDER_NEXT : ORDER_PREV;\n\n      this._slide(order, this._items[index]);\n    } // Private\n\n\n    _getConfig(config) {\n      config = { ...Default$9,\n        ...Manipulator.getDataAttributes(this._element),\n        ...(typeof config === 'object' ? config : {})\n      };\n      typeCheckConfig(NAME$a, config, DefaultType$9);\n      return config;\n    }\n\n    _handleSwipe() {\n      const absDeltax = Math.abs(this.touchDeltaX);\n\n      if (absDeltax <= SWIPE_THRESHOLD) {\n        return;\n      }\n\n      const direction = absDeltax / this.touchDeltaX;\n      this.touchDeltaX = 0;\n\n      if (!direction) {\n        return;\n      }\n\n      this._slide(direction > 0 ? DIRECTION_RIGHT : DIRECTION_LEFT);\n    }\n\n    _addEventListeners() {\n      if (this._config.keyboard) {\n        EventHandler.on(this._element, EVENT_KEYDOWN, event => this._keydown(event));\n      }\n\n      if (this._config.pause === 'hover') {\n        EventHandler.on(this._element, EVENT_MOUSEENTER, event => this.pause(event));\n        EventHandler.on(this._element, EVENT_MOUSELEAVE, event => this.cycle(event));\n      }\n\n      if (this._config.touch && this._touchSupported) {\n        this._addTouchEventListeners();\n      }\n    }\n\n    _addTouchEventListeners() {\n      const start = event => {\n        if (this._pointerEvent && (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH)) {\n          this.touchStartX = event.clientX;\n        } else if (!this._pointerEvent) {\n          this.touchStartX = event.touches[0].clientX;\n        }\n      };\n\n      const move = event => {\n        // ensure swiping with one touch and not pinching\n        this.touchDeltaX = event.touches && event.touches.length > 1 ? 0 : event.touches[0].clientX - this.touchStartX;\n      };\n\n      const end = event => {\n        if (this._pointerEvent && (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH)) {\n          this.touchDeltaX = event.clientX - this.touchStartX;\n        }\n\n        this._handleSwipe();\n\n        if (this._config.pause === 'hover') {\n          // If it's a touch-enabled device, mouseenter/leave are fired as\n          // part of the mouse compatibility events on first tap - the carousel\n          // would stop cycling until user tapped out of it;\n          // here, we listen for touchend, explicitly pause the carousel\n          // (as if it's the second time we tap on it, mouseenter compat event\n          // is NOT fired) and after a timeout (to allow for mouse compatibility\n          // events to fire) we explicitly restart cycling\n          this.pause();\n\n          if (this.touchTimeout) {\n            clearTimeout(this.touchTimeout);\n          }\n\n          this.touchTimeout = setTimeout(event => this.cycle(event), TOUCHEVENT_COMPAT_WAIT + this._config.interval);\n        }\n      };\n\n      SelectorEngine.find(SELECTOR_ITEM_IMG, this._element).forEach(itemImg => {\n        EventHandler.on(itemImg, EVENT_DRAG_START, e => e.preventDefault());\n      });\n\n      if (this._pointerEvent) {\n        EventHandler.on(this._element, EVENT_POINTERDOWN, event => start(event));\n        EventHandler.on(this._element, EVENT_POINTERUP, event => end(event));\n\n        this._element.classList.add(CLASS_NAME_POINTER_EVENT);\n      } else {\n        EventHandler.on(this._element, EVENT_TOUCHSTART, event => start(event));\n        EventHandler.on(this._element, EVENT_TOUCHMOVE, event => move(event));\n        EventHandler.on(this._element, EVENT_TOUCHEND, event => end(event));\n      }\n    }\n\n    _keydown(event) {\n      if (/input|textarea/i.test(event.target.tagName)) {\n        return;\n      }\n\n      const direction = KEY_TO_DIRECTION[event.key];\n\n      if (direction) {\n        event.preventDefault();\n\n        this._slide(direction);\n      }\n    }\n\n    _getItemIndex(element) {\n      this._items = element && element.parentNode ? SelectorEngine.find(SELECTOR_ITEM, element.parentNode) : [];\n      return this._items.indexOf(element);\n    }\n\n    _getItemByOrder(order, activeElement) {\n      const isNext = order === ORDER_NEXT;\n      return getNextActiveElement(this._items, activeElement, isNext, this._config.wrap);\n    }\n\n    _triggerSlideEvent(relatedTarget, eventDirectionName) {\n      const targetIndex = this._getItemIndex(relatedTarget);\n\n      const fromIndex = this._getItemIndex(SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element));\n\n      return EventHandler.trigger(this._element, EVENT_SLIDE, {\n        relatedTarget,\n        direction: eventDirectionName,\n        from: fromIndex,\n        to: targetIndex\n      });\n    }\n\n    _setActiveIndicatorElement(element) {\n      if (this._indicatorsElement) {\n        const activeIndicator = SelectorEngine.findOne(SELECTOR_ACTIVE$1, this._indicatorsElement);\n        activeIndicator.classList.remove(CLASS_NAME_ACTIVE$2);\n        activeIndicator.removeAttribute('aria-current');\n        const indicators = SelectorEngine.find(SELECTOR_INDICATOR, this._indicatorsElement);\n\n        for (let i = 0; i < indicators.length; i++) {\n          if (Number.parseInt(indicators[i].getAttribute('data-bs-slide-to'), 10) === this._getItemIndex(element)) {\n            indicators[i].classList.add(CLASS_NAME_ACTIVE$2);\n            indicators[i].setAttribute('aria-current', 'true');\n            break;\n          }\n        }\n      }\n    }\n\n    _updateInterval() {\n      const element = this._activeElement || SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element);\n\n      if (!element) {\n        return;\n      }\n\n      const elementInterval = Number.parseInt(element.getAttribute('data-bs-interval'), 10);\n\n      if (elementInterval) {\n        this._config.defaultInterval = this._config.defaultInterval || this._config.interval;\n        this._config.interval = elementInterval;\n      } else {\n        this._config.interval = this._config.defaultInterval || this._config.interval;\n      }\n    }\n\n    _slide(directionOrOrder, element) {\n      const order = this._directionToOrder(directionOrOrder);\n\n      const activeElement = SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element);\n\n      const activeElementIndex = this._getItemIndex(activeElement);\n\n      const nextElement = element || this._getItemByOrder(order, activeElement);\n\n      const nextElementIndex = this._getItemIndex(nextElement);\n\n      const isCycling = Boolean(this._interval);\n      const isNext = order === ORDER_NEXT;\n      const directionalClassName = isNext ? CLASS_NAME_START : CLASS_NAME_END;\n      const orderClassName = isNext ? CLASS_NAME_NEXT : CLASS_NAME_PREV;\n\n      const eventDirectionName = this._orderToDirection(order);\n\n      if (nextElement && nextElement.classList.contains(CLASS_NAME_ACTIVE$2)) {\n        this._isSliding = false;\n        return;\n      }\n\n      if (this._isSliding) {\n        return;\n      }\n\n      const slideEvent = this._triggerSlideEvent(nextElement, eventDirectionName);\n\n      if (slideEvent.defaultPrevented) {\n        return;\n      }\n\n      if (!activeElement || !nextElement) {\n        // Some weirdness is happening, so we bail\n        return;\n      }\n\n      this._isSliding = true;\n\n      if (isCycling) {\n        this.pause();\n      }\n\n      this._setActiveIndicatorElement(nextElement);\n\n      this._activeElement = nextElement;\n\n      const triggerSlidEvent = () => {\n        EventHandler.trigger(this._element, EVENT_SLID, {\n          relatedTarget: nextElement,\n          direction: eventDirectionName,\n          from: activeElementIndex,\n          to: nextElementIndex\n        });\n      };\n\n      if (this._element.classList.contains(CLASS_NAME_SLIDE)) {\n        nextElement.classList.add(orderClassName);\n        reflow(nextElement);\n        activeElement.classList.add(directionalClassName);\n        nextElement.classList.add(directionalClassName);\n\n        const completeCallBack = () => {\n          nextElement.classList.remove(directionalClassName, orderClassName);\n          nextElement.classList.add(CLASS_NAME_ACTIVE$2);\n          activeElement.classList.remove(CLASS_NAME_ACTIVE$2, orderClassName, directionalClassName);\n          this._isSliding = false;\n          setTimeout(triggerSlidEvent, 0);\n        };\n\n        this._queueCallback(completeCallBack, activeElement, true);\n      } else {\n        activeElement.classList.remove(CLASS_NAME_ACTIVE$2);\n        nextElement.classList.add(CLASS_NAME_ACTIVE$2);\n        this._isSliding = false;\n        triggerSlidEvent();\n      }\n\n      if (isCycling) {\n        this.cycle();\n      }\n    }\n\n    _directionToOrder(direction) {\n      if (![DIRECTION_RIGHT, DIRECTION_LEFT].includes(direction)) {\n        return direction;\n      }\n\n      if (isRTL()) {\n        return direction === DIRECTION_LEFT ? ORDER_PREV : ORDER_NEXT;\n      }\n\n      return direction === DIRECTION_LEFT ? ORDER_NEXT : ORDER_PREV;\n    }\n\n    _orderToDirection(order) {\n      if (![ORDER_NEXT, ORDER_PREV].includes(order)) {\n        return order;\n      }\n\n      if (isRTL()) {\n        return order === ORDER_PREV ? DIRECTION_LEFT : DIRECTION_RIGHT;\n      }\n\n      return order === ORDER_PREV ? DIRECTION_RIGHT : DIRECTION_LEFT;\n    } // Static\n\n\n    static carouselInterface(element, config) {\n      const data = Carousel.getOrCreateInstance(element, config);\n      let {\n        _config\n      } = data;\n\n      if (typeof config === 'object') {\n        _config = { ..._config,\n          ...config\n        };\n      }\n\n      const action = typeof config === 'string' ? config : _config.slide;\n\n      if (typeof config === 'number') {\n        data.to(config);\n      } else if (typeof action === 'string') {\n        if (typeof data[action] === 'undefined') {\n          throw new TypeError(`No method named \"${action}\"`);\n        }\n\n        data[action]();\n      } else if (_config.interval && _config.ride) {\n        data.pause();\n        data.cycle();\n      }\n    }\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        Carousel.carouselInterface(this, config);\n      });\n    }\n\n    static dataApiClickHandler(event) {\n      const target = getElementFromSelector(this);\n\n      if (!target || !target.classList.contains(CLASS_NAME_CAROUSEL)) {\n        return;\n      }\n\n      const config = { ...Manipulator.getDataAttributes(target),\n        ...Manipulator.getDataAttributes(this)\n      };\n      const slideIndex = this.getAttribute('data-bs-slide-to');\n\n      if (slideIndex) {\n        config.interval = false;\n      }\n\n      Carousel.carouselInterface(target, config);\n\n      if (slideIndex) {\n        Carousel.getInstance(target).to(slideIndex);\n      }\n\n      event.preventDefault();\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(document, EVENT_CLICK_DATA_API$5, SELECTOR_DATA_SLIDE, Carousel.dataApiClickHandler);\n  EventHandler.on(window, EVENT_LOAD_DATA_API$2, () => {\n    const carousels = SelectorEngine.find(SELECTOR_DATA_RIDE);\n\n    for (let i = 0, len = carousels.length; i < len; i++) {\n      Carousel.carouselInterface(carousels[i], Carousel.getInstance(carousels[i]));\n    }\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Carousel to jQuery only if jQuery is present\n   */\n\n  defineJQueryPlugin(Carousel);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): collapse.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$9 = 'collapse';\n  const DATA_KEY$8 = 'bs.collapse';\n  const EVENT_KEY$8 = `.${DATA_KEY$8}`;\n  const DATA_API_KEY$5 = '.data-api';\n  const Default$8 = {\n    toggle: true,\n    parent: ''\n  };\n  const DefaultType$8 = {\n    toggle: 'boolean',\n    parent: '(string|element)'\n  };\n  const EVENT_SHOW$5 = `show${EVENT_KEY$8}`;\n  const EVENT_SHOWN$5 = `shown${EVENT_KEY$8}`;\n  const EVENT_HIDE$5 = `hide${EVENT_KEY$8}`;\n  const EVENT_HIDDEN$5 = `hidden${EVENT_KEY$8}`;\n  const EVENT_CLICK_DATA_API$4 = `click${EVENT_KEY$8}${DATA_API_KEY$5}`;\n  const CLASS_NAME_SHOW$8 = 'show';\n  const CLASS_NAME_COLLAPSE = 'collapse';\n  const CLASS_NAME_COLLAPSING = 'collapsing';\n  const CLASS_NAME_COLLAPSED = 'collapsed';\n  const WIDTH = 'width';\n  const HEIGHT = 'height';\n  const SELECTOR_ACTIVES = '.show, .collapsing';\n  const SELECTOR_DATA_TOGGLE$4 = '[data-bs-toggle=\"collapse\"]';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Collapse extends BaseComponent {\n    constructor(element, config) {\n      super(element);\n      this._isTransitioning = false;\n      this._config = this._getConfig(config);\n      this._triggerArray = SelectorEngine.find(`${SELECTOR_DATA_TOGGLE$4}[href=\"#${this._element.id}\"],` + `${SELECTOR_DATA_TOGGLE$4}[data-bs-target=\"#${this._element.id}\"]`);\n      const toggleList = SelectorEngine.find(SELECTOR_DATA_TOGGLE$4);\n\n      for (let i = 0, len = toggleList.length; i < len; i++) {\n        const elem = toggleList[i];\n        const selector = getSelectorFromElement(elem);\n        const filterElement = SelectorEngine.find(selector).filter(foundElem => foundElem === this._element);\n\n        if (selector !== null && filterElement.length) {\n          this._selector = selector;\n\n          this._triggerArray.push(elem);\n        }\n      }\n\n      this._parent = this._config.parent ? this._getParent() : null;\n\n      if (!this._config.parent) {\n        this._addAriaAndCollapsedClass(this._element, this._triggerArray);\n      }\n\n      if (this._config.toggle) {\n        this.toggle();\n      }\n    } // Getters\n\n\n    static get Default() {\n      return Default$8;\n    }\n\n    static get NAME() {\n      return NAME$9;\n    } // Public\n\n\n    toggle() {\n      if (this._element.classList.contains(CLASS_NAME_SHOW$8)) {\n        this.hide();\n      } else {\n        this.show();\n      }\n    }\n\n    show() {\n      if (this._isTransitioning || this._element.classList.contains(CLASS_NAME_SHOW$8)) {\n        return;\n      }\n\n      let actives;\n      let activesData;\n\n      if (this._parent) {\n        actives = SelectorEngine.find(SELECTOR_ACTIVES, this._parent).filter(elem => {\n          if (typeof this._config.parent === 'string') {\n            return elem.getAttribute('data-bs-parent') === this._config.parent;\n          }\n\n          return elem.classList.contains(CLASS_NAME_COLLAPSE);\n        });\n\n        if (actives.length === 0) {\n          actives = null;\n        }\n      }\n\n      const container = SelectorEngine.findOne(this._selector);\n\n      if (actives) {\n        const tempActiveData = actives.find(elem => container !== elem);\n        activesData = tempActiveData ? Collapse.getInstance(tempActiveData) : null;\n\n        if (activesData && activesData._isTransitioning) {\n          return;\n        }\n      }\n\n      const startEvent = EventHandler.trigger(this._element, EVENT_SHOW$5);\n\n      if (startEvent.defaultPrevented) {\n        return;\n      }\n\n      if (actives) {\n        actives.forEach(elemActive => {\n          if (container !== elemActive) {\n            Collapse.collapseInterface(elemActive, 'hide');\n          }\n\n          if (!activesData) {\n            Data.set(elemActive, DATA_KEY$8, null);\n          }\n        });\n      }\n\n      const dimension = this._getDimension();\n\n      this._element.classList.remove(CLASS_NAME_COLLAPSE);\n\n      this._element.classList.add(CLASS_NAME_COLLAPSING);\n\n      this._element.style[dimension] = 0;\n\n      if (this._triggerArray.length) {\n        this._triggerArray.forEach(element => {\n          element.classList.remove(CLASS_NAME_COLLAPSED);\n          element.setAttribute('aria-expanded', true);\n        });\n      }\n\n      this.setTransitioning(true);\n\n      const complete = () => {\n        this._element.classList.remove(CLASS_NAME_COLLAPSING);\n\n        this._element.classList.add(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$8);\n\n        this._element.style[dimension] = '';\n        this.setTransitioning(false);\n        EventHandler.trigger(this._element, EVENT_SHOWN$5);\n      };\n\n      const capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1);\n      const scrollSize = `scroll${capitalizedDimension}`;\n\n      this._queueCallback(complete, this._element, true);\n\n      this._element.style[dimension] = `${this._element[scrollSize]}px`;\n    }\n\n    hide() {\n      if (this._isTransitioning || !this._element.classList.contains(CLASS_NAME_SHOW$8)) {\n        return;\n      }\n\n      const startEvent = EventHandler.trigger(this._element, EVENT_HIDE$5);\n\n      if (startEvent.defaultPrevented) {\n        return;\n      }\n\n      const dimension = this._getDimension();\n\n      this._element.style[dimension] = `${this._element.getBoundingClientRect()[dimension]}px`;\n      reflow(this._element);\n\n      this._element.classList.add(CLASS_NAME_COLLAPSING);\n\n      this._element.classList.remove(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$8);\n\n      const triggerArrayLength = this._triggerArray.length;\n\n      if (triggerArrayLength > 0) {\n        for (let i = 0; i < triggerArrayLength; i++) {\n          const trigger = this._triggerArray[i];\n          const elem = getElementFromSelector(trigger);\n\n          if (elem && !elem.classList.contains(CLASS_NAME_SHOW$8)) {\n            trigger.classList.add(CLASS_NAME_COLLAPSED);\n            trigger.setAttribute('aria-expanded', false);\n          }\n        }\n      }\n\n      this.setTransitioning(true);\n\n      const complete = () => {\n        this.setTransitioning(false);\n\n        this._element.classList.remove(CLASS_NAME_COLLAPSING);\n\n        this._element.classList.add(CLASS_NAME_COLLAPSE);\n\n        EventHandler.trigger(this._element, EVENT_HIDDEN$5);\n      };\n\n      this._element.style[dimension] = '';\n\n      this._queueCallback(complete, this._element, true);\n    }\n\n    setTransitioning(isTransitioning) {\n      this._isTransitioning = isTransitioning;\n    } // Private\n\n\n    _getConfig(config) {\n      config = { ...Default$8,\n        ...config\n      };\n      config.toggle = Boolean(config.toggle); // Coerce string values\n\n      typeCheckConfig(NAME$9, config, DefaultType$8);\n      return config;\n    }\n\n    _getDimension() {\n      return this._element.classList.contains(WIDTH) ? WIDTH : HEIGHT;\n    }\n\n    _getParent() {\n      let {\n        parent\n      } = this._config;\n      parent = getElement(parent);\n      const selector = `${SELECTOR_DATA_TOGGLE$4}[data-bs-parent=\"${parent}\"]`;\n      SelectorEngine.find(selector, parent).forEach(element => {\n        const selected = getElementFromSelector(element);\n\n        this._addAriaAndCollapsedClass(selected, [element]);\n      });\n      return parent;\n    }\n\n    _addAriaAndCollapsedClass(element, triggerArray) {\n      if (!element || !triggerArray.length) {\n        return;\n      }\n\n      const isOpen = element.classList.contains(CLASS_NAME_SHOW$8);\n      triggerArray.forEach(elem => {\n        if (isOpen) {\n          elem.classList.remove(CLASS_NAME_COLLAPSED);\n        } else {\n          elem.classList.add(CLASS_NAME_COLLAPSED);\n        }\n\n        elem.setAttribute('aria-expanded', isOpen);\n      });\n    } // Static\n\n\n    static collapseInterface(element, config) {\n      let data = Collapse.getInstance(element);\n      const _config = { ...Default$8,\n        ...Manipulator.getDataAttributes(element),\n        ...(typeof config === 'object' && config ? config : {})\n      };\n\n      if (!data && _config.toggle && typeof config === 'string' && /show|hide/.test(config)) {\n        _config.toggle = false;\n      }\n\n      if (!data) {\n        data = new Collapse(element, _config);\n      }\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config]();\n      }\n    }\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        Collapse.collapseInterface(this, config);\n      });\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(document, EVENT_CLICK_DATA_API$4, SELECTOR_DATA_TOGGLE$4, function (event) {\n    // preventDefault only for <a> elements (which change the URL) not inside the collapsible element\n    if (event.target.tagName === 'A' || event.delegateTarget && event.delegateTarget.tagName === 'A') {\n      event.preventDefault();\n    }\n\n    const triggerData = Manipulator.getDataAttributes(this);\n    const selector = getSelectorFromElement(this);\n    const selectorElements = SelectorEngine.find(selector);\n    selectorElements.forEach(element => {\n      const data = Collapse.getInstance(element);\n      let config;\n\n      if (data) {\n        // update parent attribute\n        if (data._parent === null && typeof triggerData.parent === 'string') {\n          data._config.parent = triggerData.parent;\n          data._parent = data._getParent();\n        }\n\n        config = 'toggle';\n      } else {\n        config = triggerData;\n      }\n\n      Collapse.collapseInterface(element, config);\n    });\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Collapse to jQuery only if jQuery is present\n   */\n\n  defineJQueryPlugin(Collapse);\n\n  var top = 'top';\n  var bottom = 'bottom';\n  var right = 'right';\n  var left = 'left';\n  var auto = 'auto';\n  var basePlacements = [top, bottom, right, left];\n  var start = 'start';\n  var end = 'end';\n  var clippingParents = 'clippingParents';\n  var viewport = 'viewport';\n  var popper = 'popper';\n  var reference = 'reference';\n  var variationPlacements = /*#__PURE__*/basePlacements.reduce(function (acc, placement) {\n    return acc.concat([placement + \"-\" + start, placement + \"-\" + end]);\n  }, []);\n  var placements = /*#__PURE__*/[].concat(basePlacements, [auto]).reduce(function (acc, placement) {\n    return acc.concat([placement, placement + \"-\" + start, placement + \"-\" + end]);\n  }, []); // modifiers that need to read the DOM\n\n  var beforeRead = 'beforeRead';\n  var read = 'read';\n  var afterRead = 'afterRead'; // pure-logic modifiers\n\n  var beforeMain = 'beforeMain';\n  var main = 'main';\n  var afterMain = 'afterMain'; // modifier with the purpose to write to the DOM (or write into a framework state)\n\n  var beforeWrite = 'beforeWrite';\n  var write = 'write';\n  var afterWrite = 'afterWrite';\n  var modifierPhases = [beforeRead, read, afterRead, beforeMain, main, afterMain, beforeWrite, write, afterWrite];\n\n  function getNodeName(element) {\n    return element ? (element.nodeName || '').toLowerCase() : null;\n  }\n\n  function getWindow(node) {\n    if (node == null) {\n      return window;\n    }\n\n    if (node.toString() !== '[object Window]') {\n      var ownerDocument = node.ownerDocument;\n      return ownerDocument ? ownerDocument.defaultView || window : window;\n    }\n\n    return node;\n  }\n\n  function isElement(node) {\n    var OwnElement = getWindow(node).Element;\n    return node instanceof OwnElement || node instanceof Element;\n  }\n\n  function isHTMLElement(node) {\n    var OwnElement = getWindow(node).HTMLElement;\n    return node instanceof OwnElement || node instanceof HTMLElement;\n  }\n\n  function isShadowRoot(node) {\n    // IE 11 has no ShadowRoot\n    if (typeof ShadowRoot === 'undefined') {\n      return false;\n    }\n\n    var OwnElement = getWindow(node).ShadowRoot;\n    return node instanceof OwnElement || node instanceof ShadowRoot;\n  }\n\n  // and applies them to the HTMLElements such as popper and arrow\n\n  function applyStyles(_ref) {\n    var state = _ref.state;\n    Object.keys(state.elements).forEach(function (name) {\n      var style = state.styles[name] || {};\n      var attributes = state.attributes[name] || {};\n      var element = state.elements[name]; // arrow is optional + virtual elements\n\n      if (!isHTMLElement(element) || !getNodeName(element)) {\n        return;\n      } // Flow doesn't support to extend this property, but it's the most\n      // effective way to apply styles to an HTMLElement\n      // $FlowFixMe[cannot-write]\n\n\n      Object.assign(element.style, style);\n      Object.keys(attributes).forEach(function (name) {\n        var value = attributes[name];\n\n        if (value === false) {\n          element.removeAttribute(name);\n        } else {\n          element.setAttribute(name, value === true ? '' : value);\n        }\n      });\n    });\n  }\n\n  function effect$2(_ref2) {\n    var state = _ref2.state;\n    var initialStyles = {\n      popper: {\n        position: state.options.strategy,\n        left: '0',\n        top: '0',\n        margin: '0'\n      },\n      arrow: {\n        position: 'absolute'\n      },\n      reference: {}\n    };\n    Object.assign(state.elements.popper.style, initialStyles.popper);\n    state.styles = initialStyles;\n\n    if (state.elements.arrow) {\n      Object.assign(state.elements.arrow.style, initialStyles.arrow);\n    }\n\n    return function () {\n      Object.keys(state.elements).forEach(function (name) {\n        var element = state.elements[name];\n        var attributes = state.attributes[name] || {};\n        var styleProperties = Object.keys(state.styles.hasOwnProperty(name) ? state.styles[name] : initialStyles[name]); // Set all values to an empty string to unset them\n\n        var style = styleProperties.reduce(function (style, property) {\n          style[property] = '';\n          return style;\n        }, {}); // arrow is optional + virtual elements\n\n        if (!isHTMLElement(element) || !getNodeName(element)) {\n          return;\n        }\n\n        Object.assign(element.style, style);\n        Object.keys(attributes).forEach(function (attribute) {\n          element.removeAttribute(attribute);\n        });\n      });\n    };\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  var applyStyles$1 = {\n    name: 'applyStyles',\n    enabled: true,\n    phase: 'write',\n    fn: applyStyles,\n    effect: effect$2,\n    requires: ['computeStyles']\n  };\n\n  function getBasePlacement(placement) {\n    return placement.split('-')[0];\n  }\n\n  function getBoundingClientRect(element) {\n    var rect = element.getBoundingClientRect();\n    return {\n      width: rect.width,\n      height: rect.height,\n      top: rect.top,\n      right: rect.right,\n      bottom: rect.bottom,\n      left: rect.left,\n      x: rect.left,\n      y: rect.top\n    };\n  }\n\n  // means it doesn't take into account transforms.\n\n  function getLayoutRect(element) {\n    var clientRect = getBoundingClientRect(element); // Use the clientRect sizes if it's not been transformed.\n    // Fixes https://github.com/popperjs/popper-core/issues/1223\n\n    var width = element.offsetWidth;\n    var height = element.offsetHeight;\n\n    if (Math.abs(clientRect.width - width) <= 1) {\n      width = clientRect.width;\n    }\n\n    if (Math.abs(clientRect.height - height) <= 1) {\n      height = clientRect.height;\n    }\n\n    return {\n      x: element.offsetLeft,\n      y: element.offsetTop,\n      width: width,\n      height: height\n    };\n  }\n\n  function contains(parent, child) {\n    var rootNode = child.getRootNode && child.getRootNode(); // First, attempt with faster native method\n\n    if (parent.contains(child)) {\n      return true;\n    } // then fallback to custom implementation with Shadow DOM support\n    else if (rootNode && isShadowRoot(rootNode)) {\n        var next = child;\n\n        do {\n          if (next && parent.isSameNode(next)) {\n            return true;\n          } // $FlowFixMe[prop-missing]: need a better way to handle this...\n\n\n          next = next.parentNode || next.host;\n        } while (next);\n      } // Give up, the result is false\n\n\n    return false;\n  }\n\n  function getComputedStyle$1(element) {\n    return getWindow(element).getComputedStyle(element);\n  }\n\n  function isTableElement(element) {\n    return ['table', 'td', 'th'].indexOf(getNodeName(element)) >= 0;\n  }\n\n  function getDocumentElement(element) {\n    // $FlowFixMe[incompatible-return]: assume body is always available\n    return ((isElement(element) ? element.ownerDocument : // $FlowFixMe[prop-missing]\n    element.document) || window.document).documentElement;\n  }\n\n  function getParentNode(element) {\n    if (getNodeName(element) === 'html') {\n      return element;\n    }\n\n    return (// this is a quicker (but less type safe) way to save quite some bytes from the bundle\n      // $FlowFixMe[incompatible-return]\n      // $FlowFixMe[prop-missing]\n      element.assignedSlot || // step into the shadow DOM of the parent of a slotted node\n      element.parentNode || ( // DOM Element detected\n      isShadowRoot(element) ? element.host : null) || // ShadowRoot detected\n      // $FlowFixMe[incompatible-call]: HTMLElement is a Node\n      getDocumentElement(element) // fallback\n\n    );\n  }\n\n  function getTrueOffsetParent(element) {\n    if (!isHTMLElement(element) || // https://github.com/popperjs/popper-core/issues/837\n    getComputedStyle$1(element).position === 'fixed') {\n      return null;\n    }\n\n    return element.offsetParent;\n  } // `.offsetParent` reports `null` for fixed elements, while absolute elements\n  // return the containing block\n\n\n  function getContainingBlock(element) {\n    var isFirefox = navigator.userAgent.toLowerCase().indexOf('firefox') !== -1;\n    var isIE = navigator.userAgent.indexOf('Trident') !== -1;\n\n    if (isIE && isHTMLElement(element)) {\n      // In IE 9, 10 and 11 fixed elements containing block is always established by the viewport\n      var elementCss = getComputedStyle$1(element);\n\n      if (elementCss.position === 'fixed') {\n        return null;\n      }\n    }\n\n    var currentNode = getParentNode(element);\n\n    while (isHTMLElement(currentNode) && ['html', 'body'].indexOf(getNodeName(currentNode)) < 0) {\n      var css = getComputedStyle$1(currentNode); // This is non-exhaustive but covers the most common CSS properties that\n      // create a containing block.\n      // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n\n      if (css.transform !== 'none' || css.perspective !== 'none' || css.contain === 'paint' || ['transform', 'perspective'].indexOf(css.willChange) !== -1 || isFirefox && css.willChange === 'filter' || isFirefox && css.filter && css.filter !== 'none') {\n        return currentNode;\n      } else {\n        currentNode = currentNode.parentNode;\n      }\n    }\n\n    return null;\n  } // Gets the closest ancestor positioned element. Handles some edge cases,\n  // such as table ancestors and cross browser bugs.\n\n\n  function getOffsetParent(element) {\n    var window = getWindow(element);\n    var offsetParent = getTrueOffsetParent(element);\n\n    while (offsetParent && isTableElement(offsetParent) && getComputedStyle$1(offsetParent).position === 'static') {\n      offsetParent = getTrueOffsetParent(offsetParent);\n    }\n\n    if (offsetParent && (getNodeName(offsetParent) === 'html' || getNodeName(offsetParent) === 'body' && getComputedStyle$1(offsetParent).position === 'static')) {\n      return window;\n    }\n\n    return offsetParent || getContainingBlock(element) || window;\n  }\n\n  function getMainAxisFromPlacement(placement) {\n    return ['top', 'bottom'].indexOf(placement) >= 0 ? 'x' : 'y';\n  }\n\n  var max = Math.max;\n  var min = Math.min;\n  var round = Math.round;\n\n  function within(min$1, value, max$1) {\n    return max(min$1, min(value, max$1));\n  }\n\n  function getFreshSideObject() {\n    return {\n      top: 0,\n      right: 0,\n      bottom: 0,\n      left: 0\n    };\n  }\n\n  function mergePaddingObject(paddingObject) {\n    return Object.assign({}, getFreshSideObject(), paddingObject);\n  }\n\n  function expandToHashMap(value, keys) {\n    return keys.reduce(function (hashMap, key) {\n      hashMap[key] = value;\n      return hashMap;\n    }, {});\n  }\n\n  var toPaddingObject = function toPaddingObject(padding, state) {\n    padding = typeof padding === 'function' ? padding(Object.assign({}, state.rects, {\n      placement: state.placement\n    })) : padding;\n    return mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));\n  };\n\n  function arrow(_ref) {\n    var _state$modifiersData$;\n\n    var state = _ref.state,\n        name = _ref.name,\n        options = _ref.options;\n    var arrowElement = state.elements.arrow;\n    var popperOffsets = state.modifiersData.popperOffsets;\n    var basePlacement = getBasePlacement(state.placement);\n    var axis = getMainAxisFromPlacement(basePlacement);\n    var isVertical = [left, right].indexOf(basePlacement) >= 0;\n    var len = isVertical ? 'height' : 'width';\n\n    if (!arrowElement || !popperOffsets) {\n      return;\n    }\n\n    var paddingObject = toPaddingObject(options.padding, state);\n    var arrowRect = getLayoutRect(arrowElement);\n    var minProp = axis === 'y' ? top : left;\n    var maxProp = axis === 'y' ? bottom : right;\n    var endDiff = state.rects.reference[len] + state.rects.reference[axis] - popperOffsets[axis] - state.rects.popper[len];\n    var startDiff = popperOffsets[axis] - state.rects.reference[axis];\n    var arrowOffsetParent = getOffsetParent(arrowElement);\n    var clientSize = arrowOffsetParent ? axis === 'y' ? arrowOffsetParent.clientHeight || 0 : arrowOffsetParent.clientWidth || 0 : 0;\n    var centerToReference = endDiff / 2 - startDiff / 2; // Make sure the arrow doesn't overflow the popper if the center point is\n    // outside of the popper bounds\n\n    var min = paddingObject[minProp];\n    var max = clientSize - arrowRect[len] - paddingObject[maxProp];\n    var center = clientSize / 2 - arrowRect[len] / 2 + centerToReference;\n    var offset = within(min, center, max); // Prevents breaking syntax highlighting...\n\n    var axisProp = axis;\n    state.modifiersData[name] = (_state$modifiersData$ = {}, _state$modifiersData$[axisProp] = offset, _state$modifiersData$.centerOffset = offset - center, _state$modifiersData$);\n  }\n\n  function effect$1(_ref2) {\n    var state = _ref2.state,\n        options = _ref2.options;\n    var _options$element = options.element,\n        arrowElement = _options$element === void 0 ? '[data-popper-arrow]' : _options$element;\n\n    if (arrowElement == null) {\n      return;\n    } // CSS selector\n\n\n    if (typeof arrowElement === 'string') {\n      arrowElement = state.elements.popper.querySelector(arrowElement);\n\n      if (!arrowElement) {\n        return;\n      }\n    }\n\n    if (!contains(state.elements.popper, arrowElement)) {\n\n      return;\n    }\n\n    state.elements.arrow = arrowElement;\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  var arrow$1 = {\n    name: 'arrow',\n    enabled: true,\n    phase: 'main',\n    fn: arrow,\n    effect: effect$1,\n    requires: ['popperOffsets'],\n    requiresIfExists: ['preventOverflow']\n  };\n\n  var unsetSides = {\n    top: 'auto',\n    right: 'auto',\n    bottom: 'auto',\n    left: 'auto'\n  }; // Round the offsets to the nearest suitable subpixel based on the DPR.\n  // Zooming can change the DPR, but it seems to report a value that will\n  // cleanly divide the values into the appropriate subpixels.\n\n  function roundOffsetsByDPR(_ref) {\n    var x = _ref.x,\n        y = _ref.y;\n    var win = window;\n    var dpr = win.devicePixelRatio || 1;\n    return {\n      x: round(round(x * dpr) / dpr) || 0,\n      y: round(round(y * dpr) / dpr) || 0\n    };\n  }\n\n  function mapToStyles(_ref2) {\n    var _Object$assign2;\n\n    var popper = _ref2.popper,\n        popperRect = _ref2.popperRect,\n        placement = _ref2.placement,\n        offsets = _ref2.offsets,\n        position = _ref2.position,\n        gpuAcceleration = _ref2.gpuAcceleration,\n        adaptive = _ref2.adaptive,\n        roundOffsets = _ref2.roundOffsets;\n\n    var _ref3 = roundOffsets === true ? roundOffsetsByDPR(offsets) : typeof roundOffsets === 'function' ? roundOffsets(offsets) : offsets,\n        _ref3$x = _ref3.x,\n        x = _ref3$x === void 0 ? 0 : _ref3$x,\n        _ref3$y = _ref3.y,\n        y = _ref3$y === void 0 ? 0 : _ref3$y;\n\n    var hasX = offsets.hasOwnProperty('x');\n    var hasY = offsets.hasOwnProperty('y');\n    var sideX = left;\n    var sideY = top;\n    var win = window;\n\n    if (adaptive) {\n      var offsetParent = getOffsetParent(popper);\n      var heightProp = 'clientHeight';\n      var widthProp = 'clientWidth';\n\n      if (offsetParent === getWindow(popper)) {\n        offsetParent = getDocumentElement(popper);\n\n        if (getComputedStyle$1(offsetParent).position !== 'static') {\n          heightProp = 'scrollHeight';\n          widthProp = 'scrollWidth';\n        }\n      } // $FlowFixMe[incompatible-cast]: force type refinement, we compare offsetParent with window above, but Flow doesn't detect it\n\n\n      offsetParent = offsetParent;\n\n      if (placement === top) {\n        sideY = bottom; // $FlowFixMe[prop-missing]\n\n        y -= offsetParent[heightProp] - popperRect.height;\n        y *= gpuAcceleration ? 1 : -1;\n      }\n\n      if (placement === left) {\n        sideX = right; // $FlowFixMe[prop-missing]\n\n        x -= offsetParent[widthProp] - popperRect.width;\n        x *= gpuAcceleration ? 1 : -1;\n      }\n    }\n\n    var commonStyles = Object.assign({\n      position: position\n    }, adaptive && unsetSides);\n\n    if (gpuAcceleration) {\n      var _Object$assign;\n\n      return Object.assign({}, commonStyles, (_Object$assign = {}, _Object$assign[sideY] = hasY ? '0' : '', _Object$assign[sideX] = hasX ? '0' : '', _Object$assign.transform = (win.devicePixelRatio || 1) < 2 ? \"translate(\" + x + \"px, \" + y + \"px)\" : \"translate3d(\" + x + \"px, \" + y + \"px, 0)\", _Object$assign));\n    }\n\n    return Object.assign({}, commonStyles, (_Object$assign2 = {}, _Object$assign2[sideY] = hasY ? y + \"px\" : '', _Object$assign2[sideX] = hasX ? x + \"px\" : '', _Object$assign2.transform = '', _Object$assign2));\n  }\n\n  function computeStyles(_ref4) {\n    var state = _ref4.state,\n        options = _ref4.options;\n    var _options$gpuAccelerat = options.gpuAcceleration,\n        gpuAcceleration = _options$gpuAccelerat === void 0 ? true : _options$gpuAccelerat,\n        _options$adaptive = options.adaptive,\n        adaptive = _options$adaptive === void 0 ? true : _options$adaptive,\n        _options$roundOffsets = options.roundOffsets,\n        roundOffsets = _options$roundOffsets === void 0 ? true : _options$roundOffsets;\n\n    var commonStyles = {\n      placement: getBasePlacement(state.placement),\n      popper: state.elements.popper,\n      popperRect: state.rects.popper,\n      gpuAcceleration: gpuAcceleration\n    };\n\n    if (state.modifiersData.popperOffsets != null) {\n      state.styles.popper = Object.assign({}, state.styles.popper, mapToStyles(Object.assign({}, commonStyles, {\n        offsets: state.modifiersData.popperOffsets,\n        position: state.options.strategy,\n        adaptive: adaptive,\n        roundOffsets: roundOffsets\n      })));\n    }\n\n    if (state.modifiersData.arrow != null) {\n      state.styles.arrow = Object.assign({}, state.styles.arrow, mapToStyles(Object.assign({}, commonStyles, {\n        offsets: state.modifiersData.arrow,\n        position: 'absolute',\n        adaptive: false,\n        roundOffsets: roundOffsets\n      })));\n    }\n\n    state.attributes.popper = Object.assign({}, state.attributes.popper, {\n      'data-popper-placement': state.placement\n    });\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  var computeStyles$1 = {\n    name: 'computeStyles',\n    enabled: true,\n    phase: 'beforeWrite',\n    fn: computeStyles,\n    data: {}\n  };\n\n  var passive = {\n    passive: true\n  };\n\n  function effect(_ref) {\n    var state = _ref.state,\n        instance = _ref.instance,\n        options = _ref.options;\n    var _options$scroll = options.scroll,\n        scroll = _options$scroll === void 0 ? true : _options$scroll,\n        _options$resize = options.resize,\n        resize = _options$resize === void 0 ? true : _options$resize;\n    var window = getWindow(state.elements.popper);\n    var scrollParents = [].concat(state.scrollParents.reference, state.scrollParents.popper);\n\n    if (scroll) {\n      scrollParents.forEach(function (scrollParent) {\n        scrollParent.addEventListener('scroll', instance.update, passive);\n      });\n    }\n\n    if (resize) {\n      window.addEventListener('resize', instance.update, passive);\n    }\n\n    return function () {\n      if (scroll) {\n        scrollParents.forEach(function (scrollParent) {\n          scrollParent.removeEventListener('scroll', instance.update, passive);\n        });\n      }\n\n      if (resize) {\n        window.removeEventListener('resize', instance.update, passive);\n      }\n    };\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  var eventListeners = {\n    name: 'eventListeners',\n    enabled: true,\n    phase: 'write',\n    fn: function fn() {},\n    effect: effect,\n    data: {}\n  };\n\n  var hash$1 = {\n    left: 'right',\n    right: 'left',\n    bottom: 'top',\n    top: 'bottom'\n  };\n  function getOppositePlacement(placement) {\n    return placement.replace(/left|right|bottom|top/g, function (matched) {\n      return hash$1[matched];\n    });\n  }\n\n  var hash = {\n    start: 'end',\n    end: 'start'\n  };\n  function getOppositeVariationPlacement(placement) {\n    return placement.replace(/start|end/g, function (matched) {\n      return hash[matched];\n    });\n  }\n\n  function getWindowScroll(node) {\n    var win = getWindow(node);\n    var scrollLeft = win.pageXOffset;\n    var scrollTop = win.pageYOffset;\n    return {\n      scrollLeft: scrollLeft,\n      scrollTop: scrollTop\n    };\n  }\n\n  function getWindowScrollBarX(element) {\n    // If <html> has a CSS width greater than the viewport, then this will be\n    // incorrect for RTL.\n    // Popper 1 is broken in this case and never had a bug report so let's assume\n    // it's not an issue. I don't think anyone ever specifies width on <html>\n    // anyway.\n    // Browsers where the left scrollbar doesn't cause an issue report `0` for\n    // this (e.g. Edge 2019, IE11, Safari)\n    return getBoundingClientRect(getDocumentElement(element)).left + getWindowScroll(element).scrollLeft;\n  }\n\n  function getViewportRect(element) {\n    var win = getWindow(element);\n    var html = getDocumentElement(element);\n    var visualViewport = win.visualViewport;\n    var width = html.clientWidth;\n    var height = html.clientHeight;\n    var x = 0;\n    var y = 0; // NB: This isn't supported on iOS <= 12. If the keyboard is open, the popper\n    // can be obscured underneath it.\n    // Also, `html.clientHeight` adds the bottom bar height in Safari iOS, even\n    // if it isn't open, so if this isn't available, the popper will be detected\n    // to overflow the bottom of the screen too early.\n\n    if (visualViewport) {\n      width = visualViewport.width;\n      height = visualViewport.height; // Uses Layout Viewport (like Chrome; Safari does not currently)\n      // In Chrome, it returns a value very close to 0 (+/-) but contains rounding\n      // errors due to floating point numbers, so we need to check precision.\n      // Safari returns a number <= 0, usually < -1 when pinch-zoomed\n      // Feature detection fails in mobile emulation mode in Chrome.\n      // Math.abs(win.innerWidth / visualViewport.scale - visualViewport.width) <\n      // 0.001\n      // Fallback here: \"Not Safari\" userAgent\n\n      if (!/^((?!chrome|android).)*safari/i.test(navigator.userAgent)) {\n        x = visualViewport.offsetLeft;\n        y = visualViewport.offsetTop;\n      }\n    }\n\n    return {\n      width: width,\n      height: height,\n      x: x + getWindowScrollBarX(element),\n      y: y\n    };\n  }\n\n  // of the `<html>` and `<body>` rect bounds if horizontally scrollable\n\n  function getDocumentRect(element) {\n    var _element$ownerDocumen;\n\n    var html = getDocumentElement(element);\n    var winScroll = getWindowScroll(element);\n    var body = (_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body;\n    var width = max(html.scrollWidth, html.clientWidth, body ? body.scrollWidth : 0, body ? body.clientWidth : 0);\n    var height = max(html.scrollHeight, html.clientHeight, body ? body.scrollHeight : 0, body ? body.clientHeight : 0);\n    var x = -winScroll.scrollLeft + getWindowScrollBarX(element);\n    var y = -winScroll.scrollTop;\n\n    if (getComputedStyle$1(body || html).direction === 'rtl') {\n      x += max(html.clientWidth, body ? body.clientWidth : 0) - width;\n    }\n\n    return {\n      width: width,\n      height: height,\n      x: x,\n      y: y\n    };\n  }\n\n  function isScrollParent(element) {\n    // Firefox wants us to check `-x` and `-y` variations as well\n    var _getComputedStyle = getComputedStyle$1(element),\n        overflow = _getComputedStyle.overflow,\n        overflowX = _getComputedStyle.overflowX,\n        overflowY = _getComputedStyle.overflowY;\n\n    return /auto|scroll|overlay|hidden/.test(overflow + overflowY + overflowX);\n  }\n\n  function getScrollParent(node) {\n    if (['html', 'body', '#document'].indexOf(getNodeName(node)) >= 0) {\n      // $FlowFixMe[incompatible-return]: assume body is always available\n      return node.ownerDocument.body;\n    }\n\n    if (isHTMLElement(node) && isScrollParent(node)) {\n      return node;\n    }\n\n    return getScrollParent(getParentNode(node));\n  }\n\n  /*\n  given a DOM element, return the list of all scroll parents, up the list of ancesors\n  until we get to the top window object. This list is what we attach scroll listeners\n  to, because if any of these parent elements scroll, we'll need to re-calculate the\n  reference element's position.\n  */\n\n  function listScrollParents(element, list) {\n    var _element$ownerDocumen;\n\n    if (list === void 0) {\n      list = [];\n    }\n\n    var scrollParent = getScrollParent(element);\n    var isBody = scrollParent === ((_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body);\n    var win = getWindow(scrollParent);\n    var target = isBody ? [win].concat(win.visualViewport || [], isScrollParent(scrollParent) ? scrollParent : []) : scrollParent;\n    var updatedList = list.concat(target);\n    return isBody ? updatedList : // $FlowFixMe[incompatible-call]: isBody tells us target will be an HTMLElement here\n    updatedList.concat(listScrollParents(getParentNode(target)));\n  }\n\n  function rectToClientRect(rect) {\n    return Object.assign({}, rect, {\n      left: rect.x,\n      top: rect.y,\n      right: rect.x + rect.width,\n      bottom: rect.y + rect.height\n    });\n  }\n\n  function getInnerBoundingClientRect(element) {\n    var rect = getBoundingClientRect(element);\n    rect.top = rect.top + element.clientTop;\n    rect.left = rect.left + element.clientLeft;\n    rect.bottom = rect.top + element.clientHeight;\n    rect.right = rect.left + element.clientWidth;\n    rect.width = element.clientWidth;\n    rect.height = element.clientHeight;\n    rect.x = rect.left;\n    rect.y = rect.top;\n    return rect;\n  }\n\n  function getClientRectFromMixedType(element, clippingParent) {\n    return clippingParent === viewport ? rectToClientRect(getViewportRect(element)) : isHTMLElement(clippingParent) ? getInnerBoundingClientRect(clippingParent) : rectToClientRect(getDocumentRect(getDocumentElement(element)));\n  } // A \"clipping parent\" is an overflowable container with the characteristic of\n  // clipping (or hiding) overflowing elements with a position different from\n  // `initial`\n\n\n  function getClippingParents(element) {\n    var clippingParents = listScrollParents(getParentNode(element));\n    var canEscapeClipping = ['absolute', 'fixed'].indexOf(getComputedStyle$1(element).position) >= 0;\n    var clipperElement = canEscapeClipping && isHTMLElement(element) ? getOffsetParent(element) : element;\n\n    if (!isElement(clipperElement)) {\n      return [];\n    } // $FlowFixMe[incompatible-return]: https://github.com/facebook/flow/issues/1414\n\n\n    return clippingParents.filter(function (clippingParent) {\n      return isElement(clippingParent) && contains(clippingParent, clipperElement) && getNodeName(clippingParent) !== 'body';\n    });\n  } // Gets the maximum area that the element is visible in due to any number of\n  // clipping parents\n\n\n  function getClippingRect(element, boundary, rootBoundary) {\n    var mainClippingParents = boundary === 'clippingParents' ? getClippingParents(element) : [].concat(boundary);\n    var clippingParents = [].concat(mainClippingParents, [rootBoundary]);\n    var firstClippingParent = clippingParents[0];\n    var clippingRect = clippingParents.reduce(function (accRect, clippingParent) {\n      var rect = getClientRectFromMixedType(element, clippingParent);\n      accRect.top = max(rect.top, accRect.top);\n      accRect.right = min(rect.right, accRect.right);\n      accRect.bottom = min(rect.bottom, accRect.bottom);\n      accRect.left = max(rect.left, accRect.left);\n      return accRect;\n    }, getClientRectFromMixedType(element, firstClippingParent));\n    clippingRect.width = clippingRect.right - clippingRect.left;\n    clippingRect.height = clippingRect.bottom - clippingRect.top;\n    clippingRect.x = clippingRect.left;\n    clippingRect.y = clippingRect.top;\n    return clippingRect;\n  }\n\n  function getVariation(placement) {\n    return placement.split('-')[1];\n  }\n\n  function computeOffsets(_ref) {\n    var reference = _ref.reference,\n        element = _ref.element,\n        placement = _ref.placement;\n    var basePlacement = placement ? getBasePlacement(placement) : null;\n    var variation = placement ? getVariation(placement) : null;\n    var commonX = reference.x + reference.width / 2 - element.width / 2;\n    var commonY = reference.y + reference.height / 2 - element.height / 2;\n    var offsets;\n\n    switch (basePlacement) {\n      case top:\n        offsets = {\n          x: commonX,\n          y: reference.y - element.height\n        };\n        break;\n\n      case bottom:\n        offsets = {\n          x: commonX,\n          y: reference.y + reference.height\n        };\n        break;\n\n      case right:\n        offsets = {\n          x: reference.x + reference.width,\n          y: commonY\n        };\n        break;\n\n      case left:\n        offsets = {\n          x: reference.x - element.width,\n          y: commonY\n        };\n        break;\n\n      default:\n        offsets = {\n          x: reference.x,\n          y: reference.y\n        };\n    }\n\n    var mainAxis = basePlacement ? getMainAxisFromPlacement(basePlacement) : null;\n\n    if (mainAxis != null) {\n      var len = mainAxis === 'y' ? 'height' : 'width';\n\n      switch (variation) {\n        case start:\n          offsets[mainAxis] = offsets[mainAxis] - (reference[len] / 2 - element[len] / 2);\n          break;\n\n        case end:\n          offsets[mainAxis] = offsets[mainAxis] + (reference[len] / 2 - element[len] / 2);\n          break;\n      }\n    }\n\n    return offsets;\n  }\n\n  function detectOverflow(state, options) {\n    if (options === void 0) {\n      options = {};\n    }\n\n    var _options = options,\n        _options$placement = _options.placement,\n        placement = _options$placement === void 0 ? state.placement : _options$placement,\n        _options$boundary = _options.boundary,\n        boundary = _options$boundary === void 0 ? clippingParents : _options$boundary,\n        _options$rootBoundary = _options.rootBoundary,\n        rootBoundary = _options$rootBoundary === void 0 ? viewport : _options$rootBoundary,\n        _options$elementConte = _options.elementContext,\n        elementContext = _options$elementConte === void 0 ? popper : _options$elementConte,\n        _options$altBoundary = _options.altBoundary,\n        altBoundary = _options$altBoundary === void 0 ? false : _options$altBoundary,\n        _options$padding = _options.padding,\n        padding = _options$padding === void 0 ? 0 : _options$padding;\n    var paddingObject = mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));\n    var altContext = elementContext === popper ? reference : popper;\n    var referenceElement = state.elements.reference;\n    var popperRect = state.rects.popper;\n    var element = state.elements[altBoundary ? altContext : elementContext];\n    var clippingClientRect = getClippingRect(isElement(element) ? element : element.contextElement || getDocumentElement(state.elements.popper), boundary, rootBoundary);\n    var referenceClientRect = getBoundingClientRect(referenceElement);\n    var popperOffsets = computeOffsets({\n      reference: referenceClientRect,\n      element: popperRect,\n      strategy: 'absolute',\n      placement: placement\n    });\n    var popperClientRect = rectToClientRect(Object.assign({}, popperRect, popperOffsets));\n    var elementClientRect = elementContext === popper ? popperClientRect : referenceClientRect; // positive = overflowing the clipping rect\n    // 0 or negative = within the clipping rect\n\n    var overflowOffsets = {\n      top: clippingClientRect.top - elementClientRect.top + paddingObject.top,\n      bottom: elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom,\n      left: clippingClientRect.left - elementClientRect.left + paddingObject.left,\n      right: elementClientRect.right - clippingClientRect.right + paddingObject.right\n    };\n    var offsetData = state.modifiersData.offset; // Offsets can be applied only to the popper element\n\n    if (elementContext === popper && offsetData) {\n      var offset = offsetData[placement];\n      Object.keys(overflowOffsets).forEach(function (key) {\n        var multiply = [right, bottom].indexOf(key) >= 0 ? 1 : -1;\n        var axis = [top, bottom].indexOf(key) >= 0 ? 'y' : 'x';\n        overflowOffsets[key] += offset[axis] * multiply;\n      });\n    }\n\n    return overflowOffsets;\n  }\n\n  function computeAutoPlacement(state, options) {\n    if (options === void 0) {\n      options = {};\n    }\n\n    var _options = options,\n        placement = _options.placement,\n        boundary = _options.boundary,\n        rootBoundary = _options.rootBoundary,\n        padding = _options.padding,\n        flipVariations = _options.flipVariations,\n        _options$allowedAutoP = _options.allowedAutoPlacements,\n        allowedAutoPlacements = _options$allowedAutoP === void 0 ? placements : _options$allowedAutoP;\n    var variation = getVariation(placement);\n    var placements$1 = variation ? flipVariations ? variationPlacements : variationPlacements.filter(function (placement) {\n      return getVariation(placement) === variation;\n    }) : basePlacements;\n    var allowedPlacements = placements$1.filter(function (placement) {\n      return allowedAutoPlacements.indexOf(placement) >= 0;\n    });\n\n    if (allowedPlacements.length === 0) {\n      allowedPlacements = placements$1;\n    } // $FlowFixMe[incompatible-type]: Flow seems to have problems with two array unions...\n\n\n    var overflows = allowedPlacements.reduce(function (acc, placement) {\n      acc[placement] = detectOverflow(state, {\n        placement: placement,\n        boundary: boundary,\n        rootBoundary: rootBoundary,\n        padding: padding\n      })[getBasePlacement(placement)];\n      return acc;\n    }, {});\n    return Object.keys(overflows).sort(function (a, b) {\n      return overflows[a] - overflows[b];\n    });\n  }\n\n  function getExpandedFallbackPlacements(placement) {\n    if (getBasePlacement(placement) === auto) {\n      return [];\n    }\n\n    var oppositePlacement = getOppositePlacement(placement);\n    return [getOppositeVariationPlacement(placement), oppositePlacement, getOppositeVariationPlacement(oppositePlacement)];\n  }\n\n  function flip(_ref) {\n    var state = _ref.state,\n        options = _ref.options,\n        name = _ref.name;\n\n    if (state.modifiersData[name]._skip) {\n      return;\n    }\n\n    var _options$mainAxis = options.mainAxis,\n        checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\n        _options$altAxis = options.altAxis,\n        checkAltAxis = _options$altAxis === void 0 ? true : _options$altAxis,\n        specifiedFallbackPlacements = options.fallbackPlacements,\n        padding = options.padding,\n        boundary = options.boundary,\n        rootBoundary = options.rootBoundary,\n        altBoundary = options.altBoundary,\n        _options$flipVariatio = options.flipVariations,\n        flipVariations = _options$flipVariatio === void 0 ? true : _options$flipVariatio,\n        allowedAutoPlacements = options.allowedAutoPlacements;\n    var preferredPlacement = state.options.placement;\n    var basePlacement = getBasePlacement(preferredPlacement);\n    var isBasePlacement = basePlacement === preferredPlacement;\n    var fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipVariations ? [getOppositePlacement(preferredPlacement)] : getExpandedFallbackPlacements(preferredPlacement));\n    var placements = [preferredPlacement].concat(fallbackPlacements).reduce(function (acc, placement) {\n      return acc.concat(getBasePlacement(placement) === auto ? computeAutoPlacement(state, {\n        placement: placement,\n        boundary: boundary,\n        rootBoundary: rootBoundary,\n        padding: padding,\n        flipVariations: flipVariations,\n        allowedAutoPlacements: allowedAutoPlacements\n      }) : placement);\n    }, []);\n    var referenceRect = state.rects.reference;\n    var popperRect = state.rects.popper;\n    var checksMap = new Map();\n    var makeFallbackChecks = true;\n    var firstFittingPlacement = placements[0];\n\n    for (var i = 0; i < placements.length; i++) {\n      var placement = placements[i];\n\n      var _basePlacement = getBasePlacement(placement);\n\n      var isStartVariation = getVariation(placement) === start;\n      var isVertical = [top, bottom].indexOf(_basePlacement) >= 0;\n      var len = isVertical ? 'width' : 'height';\n      var overflow = detectOverflow(state, {\n        placement: placement,\n        boundary: boundary,\n        rootBoundary: rootBoundary,\n        altBoundary: altBoundary,\n        padding: padding\n      });\n      var mainVariationSide = isVertical ? isStartVariation ? right : left : isStartVariation ? bottom : top;\n\n      if (referenceRect[len] > popperRect[len]) {\n        mainVariationSide = getOppositePlacement(mainVariationSide);\n      }\n\n      var altVariationSide = getOppositePlacement(mainVariationSide);\n      var checks = [];\n\n      if (checkMainAxis) {\n        checks.push(overflow[_basePlacement] <= 0);\n      }\n\n      if (checkAltAxis) {\n        checks.push(overflow[mainVariationSide] <= 0, overflow[altVariationSide] <= 0);\n      }\n\n      if (checks.every(function (check) {\n        return check;\n      })) {\n        firstFittingPlacement = placement;\n        makeFallbackChecks = false;\n        break;\n      }\n\n      checksMap.set(placement, checks);\n    }\n\n    if (makeFallbackChecks) {\n      // `2` may be desired in some cases – research later\n      var numberOfChecks = flipVariations ? 3 : 1;\n\n      var _loop = function _loop(_i) {\n        var fittingPlacement = placements.find(function (placement) {\n          var checks = checksMap.get(placement);\n\n          if (checks) {\n            return checks.slice(0, _i).every(function (check) {\n              return check;\n            });\n          }\n        });\n\n        if (fittingPlacement) {\n          firstFittingPlacement = fittingPlacement;\n          return \"break\";\n        }\n      };\n\n      for (var _i = numberOfChecks; _i > 0; _i--) {\n        var _ret = _loop(_i);\n\n        if (_ret === \"break\") break;\n      }\n    }\n\n    if (state.placement !== firstFittingPlacement) {\n      state.modifiersData[name]._skip = true;\n      state.placement = firstFittingPlacement;\n      state.reset = true;\n    }\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  var flip$1 = {\n    name: 'flip',\n    enabled: true,\n    phase: 'main',\n    fn: flip,\n    requiresIfExists: ['offset'],\n    data: {\n      _skip: false\n    }\n  };\n\n  function getSideOffsets(overflow, rect, preventedOffsets) {\n    if (preventedOffsets === void 0) {\n      preventedOffsets = {\n        x: 0,\n        y: 0\n      };\n    }\n\n    return {\n      top: overflow.top - rect.height - preventedOffsets.y,\n      right: overflow.right - rect.width + preventedOffsets.x,\n      bottom: overflow.bottom - rect.height + preventedOffsets.y,\n      left: overflow.left - rect.width - preventedOffsets.x\n    };\n  }\n\n  function isAnySideFullyClipped(overflow) {\n    return [top, right, bottom, left].some(function (side) {\n      return overflow[side] >= 0;\n    });\n  }\n\n  function hide(_ref) {\n    var state = _ref.state,\n        name = _ref.name;\n    var referenceRect = state.rects.reference;\n    var popperRect = state.rects.popper;\n    var preventedOffsets = state.modifiersData.preventOverflow;\n    var referenceOverflow = detectOverflow(state, {\n      elementContext: 'reference'\n    });\n    var popperAltOverflow = detectOverflow(state, {\n      altBoundary: true\n    });\n    var referenceClippingOffsets = getSideOffsets(referenceOverflow, referenceRect);\n    var popperEscapeOffsets = getSideOffsets(popperAltOverflow, popperRect, preventedOffsets);\n    var isReferenceHidden = isAnySideFullyClipped(referenceClippingOffsets);\n    var hasPopperEscaped = isAnySideFullyClipped(popperEscapeOffsets);\n    state.modifiersData[name] = {\n      referenceClippingOffsets: referenceClippingOffsets,\n      popperEscapeOffsets: popperEscapeOffsets,\n      isReferenceHidden: isReferenceHidden,\n      hasPopperEscaped: hasPopperEscaped\n    };\n    state.attributes.popper = Object.assign({}, state.attributes.popper, {\n      'data-popper-reference-hidden': isReferenceHidden,\n      'data-popper-escaped': hasPopperEscaped\n    });\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  var hide$1 = {\n    name: 'hide',\n    enabled: true,\n    phase: 'main',\n    requiresIfExists: ['preventOverflow'],\n    fn: hide\n  };\n\n  function distanceAndSkiddingToXY(placement, rects, offset) {\n    var basePlacement = getBasePlacement(placement);\n    var invertDistance = [left, top].indexOf(basePlacement) >= 0 ? -1 : 1;\n\n    var _ref = typeof offset === 'function' ? offset(Object.assign({}, rects, {\n      placement: placement\n    })) : offset,\n        skidding = _ref[0],\n        distance = _ref[1];\n\n    skidding = skidding || 0;\n    distance = (distance || 0) * invertDistance;\n    return [left, right].indexOf(basePlacement) >= 0 ? {\n      x: distance,\n      y: skidding\n    } : {\n      x: skidding,\n      y: distance\n    };\n  }\n\n  function offset(_ref2) {\n    var state = _ref2.state,\n        options = _ref2.options,\n        name = _ref2.name;\n    var _options$offset = options.offset,\n        offset = _options$offset === void 0 ? [0, 0] : _options$offset;\n    var data = placements.reduce(function (acc, placement) {\n      acc[placement] = distanceAndSkiddingToXY(placement, state.rects, offset);\n      return acc;\n    }, {});\n    var _data$state$placement = data[state.placement],\n        x = _data$state$placement.x,\n        y = _data$state$placement.y;\n\n    if (state.modifiersData.popperOffsets != null) {\n      state.modifiersData.popperOffsets.x += x;\n      state.modifiersData.popperOffsets.y += y;\n    }\n\n    state.modifiersData[name] = data;\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  var offset$1 = {\n    name: 'offset',\n    enabled: true,\n    phase: 'main',\n    requires: ['popperOffsets'],\n    fn: offset\n  };\n\n  function popperOffsets(_ref) {\n    var state = _ref.state,\n        name = _ref.name;\n    // Offsets are the actual position the popper needs to have to be\n    // properly positioned near its reference element\n    // This is the most basic placement, and will be adjusted by\n    // the modifiers in the next step\n    state.modifiersData[name] = computeOffsets({\n      reference: state.rects.reference,\n      element: state.rects.popper,\n      strategy: 'absolute',\n      placement: state.placement\n    });\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  var popperOffsets$1 = {\n    name: 'popperOffsets',\n    enabled: true,\n    phase: 'read',\n    fn: popperOffsets,\n    data: {}\n  };\n\n  function getAltAxis(axis) {\n    return axis === 'x' ? 'y' : 'x';\n  }\n\n  function preventOverflow(_ref) {\n    var state = _ref.state,\n        options = _ref.options,\n        name = _ref.name;\n    var _options$mainAxis = options.mainAxis,\n        checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\n        _options$altAxis = options.altAxis,\n        checkAltAxis = _options$altAxis === void 0 ? false : _options$altAxis,\n        boundary = options.boundary,\n        rootBoundary = options.rootBoundary,\n        altBoundary = options.altBoundary,\n        padding = options.padding,\n        _options$tether = options.tether,\n        tether = _options$tether === void 0 ? true : _options$tether,\n        _options$tetherOffset = options.tetherOffset,\n        tetherOffset = _options$tetherOffset === void 0 ? 0 : _options$tetherOffset;\n    var overflow = detectOverflow(state, {\n      boundary: boundary,\n      rootBoundary: rootBoundary,\n      padding: padding,\n      altBoundary: altBoundary\n    });\n    var basePlacement = getBasePlacement(state.placement);\n    var variation = getVariation(state.placement);\n    var isBasePlacement = !variation;\n    var mainAxis = getMainAxisFromPlacement(basePlacement);\n    var altAxis = getAltAxis(mainAxis);\n    var popperOffsets = state.modifiersData.popperOffsets;\n    var referenceRect = state.rects.reference;\n    var popperRect = state.rects.popper;\n    var tetherOffsetValue = typeof tetherOffset === 'function' ? tetherOffset(Object.assign({}, state.rects, {\n      placement: state.placement\n    })) : tetherOffset;\n    var data = {\n      x: 0,\n      y: 0\n    };\n\n    if (!popperOffsets) {\n      return;\n    }\n\n    if (checkMainAxis || checkAltAxis) {\n      var mainSide = mainAxis === 'y' ? top : left;\n      var altSide = mainAxis === 'y' ? bottom : right;\n      var len = mainAxis === 'y' ? 'height' : 'width';\n      var offset = popperOffsets[mainAxis];\n      var min$1 = popperOffsets[mainAxis] + overflow[mainSide];\n      var max$1 = popperOffsets[mainAxis] - overflow[altSide];\n      var additive = tether ? -popperRect[len] / 2 : 0;\n      var minLen = variation === start ? referenceRect[len] : popperRect[len];\n      var maxLen = variation === start ? -popperRect[len] : -referenceRect[len]; // We need to include the arrow in the calculation so the arrow doesn't go\n      // outside the reference bounds\n\n      var arrowElement = state.elements.arrow;\n      var arrowRect = tether && arrowElement ? getLayoutRect(arrowElement) : {\n        width: 0,\n        height: 0\n      };\n      var arrowPaddingObject = state.modifiersData['arrow#persistent'] ? state.modifiersData['arrow#persistent'].padding : getFreshSideObject();\n      var arrowPaddingMin = arrowPaddingObject[mainSide];\n      var arrowPaddingMax = arrowPaddingObject[altSide]; // If the reference length is smaller than the arrow length, we don't want\n      // to include its full size in the calculation. If the reference is small\n      // and near the edge of a boundary, the popper can overflow even if the\n      // reference is not overflowing as well (e.g. virtual elements with no\n      // width or height)\n\n      var arrowLen = within(0, referenceRect[len], arrowRect[len]);\n      var minOffset = isBasePlacement ? referenceRect[len] / 2 - additive - arrowLen - arrowPaddingMin - tetherOffsetValue : minLen - arrowLen - arrowPaddingMin - tetherOffsetValue;\n      var maxOffset = isBasePlacement ? -referenceRect[len] / 2 + additive + arrowLen + arrowPaddingMax + tetherOffsetValue : maxLen + arrowLen + arrowPaddingMax + tetherOffsetValue;\n      var arrowOffsetParent = state.elements.arrow && getOffsetParent(state.elements.arrow);\n      var clientOffset = arrowOffsetParent ? mainAxis === 'y' ? arrowOffsetParent.clientTop || 0 : arrowOffsetParent.clientLeft || 0 : 0;\n      var offsetModifierValue = state.modifiersData.offset ? state.modifiersData.offset[state.placement][mainAxis] : 0;\n      var tetherMin = popperOffsets[mainAxis] + minOffset - offsetModifierValue - clientOffset;\n      var tetherMax = popperOffsets[mainAxis] + maxOffset - offsetModifierValue;\n\n      if (checkMainAxis) {\n        var preventedOffset = within(tether ? min(min$1, tetherMin) : min$1, offset, tether ? max(max$1, tetherMax) : max$1);\n        popperOffsets[mainAxis] = preventedOffset;\n        data[mainAxis] = preventedOffset - offset;\n      }\n\n      if (checkAltAxis) {\n        var _mainSide = mainAxis === 'x' ? top : left;\n\n        var _altSide = mainAxis === 'x' ? bottom : right;\n\n        var _offset = popperOffsets[altAxis];\n\n        var _min = _offset + overflow[_mainSide];\n\n        var _max = _offset - overflow[_altSide];\n\n        var _preventedOffset = within(tether ? min(_min, tetherMin) : _min, _offset, tether ? max(_max, tetherMax) : _max);\n\n        popperOffsets[altAxis] = _preventedOffset;\n        data[altAxis] = _preventedOffset - _offset;\n      }\n    }\n\n    state.modifiersData[name] = data;\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  var preventOverflow$1 = {\n    name: 'preventOverflow',\n    enabled: true,\n    phase: 'main',\n    fn: preventOverflow,\n    requiresIfExists: ['offset']\n  };\n\n  function getHTMLElementScroll(element) {\n    return {\n      scrollLeft: element.scrollLeft,\n      scrollTop: element.scrollTop\n    };\n  }\n\n  function getNodeScroll(node) {\n    if (node === getWindow(node) || !isHTMLElement(node)) {\n      return getWindowScroll(node);\n    } else {\n      return getHTMLElementScroll(node);\n    }\n  }\n\n  // Composite means it takes into account transforms as well as layout.\n\n  function getCompositeRect(elementOrVirtualElement, offsetParent, isFixed) {\n    if (isFixed === void 0) {\n      isFixed = false;\n    }\n\n    var documentElement = getDocumentElement(offsetParent);\n    var rect = getBoundingClientRect(elementOrVirtualElement);\n    var isOffsetParentAnElement = isHTMLElement(offsetParent);\n    var scroll = {\n      scrollLeft: 0,\n      scrollTop: 0\n    };\n    var offsets = {\n      x: 0,\n      y: 0\n    };\n\n    if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {\n      if (getNodeName(offsetParent) !== 'body' || // https://github.com/popperjs/popper-core/issues/1078\n      isScrollParent(documentElement)) {\n        scroll = getNodeScroll(offsetParent);\n      }\n\n      if (isHTMLElement(offsetParent)) {\n        offsets = getBoundingClientRect(offsetParent);\n        offsets.x += offsetParent.clientLeft;\n        offsets.y += offsetParent.clientTop;\n      } else if (documentElement) {\n        offsets.x = getWindowScrollBarX(documentElement);\n      }\n    }\n\n    return {\n      x: rect.left + scroll.scrollLeft - offsets.x,\n      y: rect.top + scroll.scrollTop - offsets.y,\n      width: rect.width,\n      height: rect.height\n    };\n  }\n\n  function order(modifiers) {\n    var map = new Map();\n    var visited = new Set();\n    var result = [];\n    modifiers.forEach(function (modifier) {\n      map.set(modifier.name, modifier);\n    }); // On visiting object, check for its dependencies and visit them recursively\n\n    function sort(modifier) {\n      visited.add(modifier.name);\n      var requires = [].concat(modifier.requires || [], modifier.requiresIfExists || []);\n      requires.forEach(function (dep) {\n        if (!visited.has(dep)) {\n          var depModifier = map.get(dep);\n\n          if (depModifier) {\n            sort(depModifier);\n          }\n        }\n      });\n      result.push(modifier);\n    }\n\n    modifiers.forEach(function (modifier) {\n      if (!visited.has(modifier.name)) {\n        // check for visited object\n        sort(modifier);\n      }\n    });\n    return result;\n  }\n\n  function orderModifiers(modifiers) {\n    // order based on dependencies\n    var orderedModifiers = order(modifiers); // order based on phase\n\n    return modifierPhases.reduce(function (acc, phase) {\n      return acc.concat(orderedModifiers.filter(function (modifier) {\n        return modifier.phase === phase;\n      }));\n    }, []);\n  }\n\n  function debounce(fn) {\n    var pending;\n    return function () {\n      if (!pending) {\n        pending = new Promise(function (resolve) {\n          Promise.resolve().then(function () {\n            pending = undefined;\n            resolve(fn());\n          });\n        });\n      }\n\n      return pending;\n    };\n  }\n\n  function mergeByName(modifiers) {\n    var merged = modifiers.reduce(function (merged, current) {\n      var existing = merged[current.name];\n      merged[current.name] = existing ? Object.assign({}, existing, current, {\n        options: Object.assign({}, existing.options, current.options),\n        data: Object.assign({}, existing.data, current.data)\n      }) : current;\n      return merged;\n    }, {}); // IE11 does not support Object.values\n\n    return Object.keys(merged).map(function (key) {\n      return merged[key];\n    });\n  }\n\n  var DEFAULT_OPTIONS = {\n    placement: 'bottom',\n    modifiers: [],\n    strategy: 'absolute'\n  };\n\n  function areValidElements() {\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    return !args.some(function (element) {\n      return !(element && typeof element.getBoundingClientRect === 'function');\n    });\n  }\n\n  function popperGenerator(generatorOptions) {\n    if (generatorOptions === void 0) {\n      generatorOptions = {};\n    }\n\n    var _generatorOptions = generatorOptions,\n        _generatorOptions$def = _generatorOptions.defaultModifiers,\n        defaultModifiers = _generatorOptions$def === void 0 ? [] : _generatorOptions$def,\n        _generatorOptions$def2 = _generatorOptions.defaultOptions,\n        defaultOptions = _generatorOptions$def2 === void 0 ? DEFAULT_OPTIONS : _generatorOptions$def2;\n    return function createPopper(reference, popper, options) {\n      if (options === void 0) {\n        options = defaultOptions;\n      }\n\n      var state = {\n        placement: 'bottom',\n        orderedModifiers: [],\n        options: Object.assign({}, DEFAULT_OPTIONS, defaultOptions),\n        modifiersData: {},\n        elements: {\n          reference: reference,\n          popper: popper\n        },\n        attributes: {},\n        styles: {}\n      };\n      var effectCleanupFns = [];\n      var isDestroyed = false;\n      var instance = {\n        state: state,\n        setOptions: function setOptions(options) {\n          cleanupModifierEffects();\n          state.options = Object.assign({}, defaultOptions, state.options, options);\n          state.scrollParents = {\n            reference: isElement(reference) ? listScrollParents(reference) : reference.contextElement ? listScrollParents(reference.contextElement) : [],\n            popper: listScrollParents(popper)\n          }; // Orders the modifiers based on their dependencies and `phase`\n          // properties\n\n          var orderedModifiers = orderModifiers(mergeByName([].concat(defaultModifiers, state.options.modifiers))); // Strip out disabled modifiers\n\n          state.orderedModifiers = orderedModifiers.filter(function (m) {\n            return m.enabled;\n          }); // Validate the provided modifiers so that the consumer will get warned\n\n          runModifierEffects();\n          return instance.update();\n        },\n        // Sync update – it will always be executed, even if not necessary. This\n        // is useful for low frequency updates where sync behavior simplifies the\n        // logic.\n        // For high frequency updates (e.g. `resize` and `scroll` events), always\n        // prefer the async Popper#update method\n        forceUpdate: function forceUpdate() {\n          if (isDestroyed) {\n            return;\n          }\n\n          var _state$elements = state.elements,\n              reference = _state$elements.reference,\n              popper = _state$elements.popper; // Don't proceed if `reference` or `popper` are not valid elements\n          // anymore\n\n          if (!areValidElements(reference, popper)) {\n\n            return;\n          } // Store the reference and popper rects to be read by modifiers\n\n\n          state.rects = {\n            reference: getCompositeRect(reference, getOffsetParent(popper), state.options.strategy === 'fixed'),\n            popper: getLayoutRect(popper)\n          }; // Modifiers have the ability to reset the current update cycle. The\n          // most common use case for this is the `flip` modifier changing the\n          // placement, which then needs to re-run all the modifiers, because the\n          // logic was previously ran for the previous placement and is therefore\n          // stale/incorrect\n\n          state.reset = false;\n          state.placement = state.options.placement; // On each update cycle, the `modifiersData` property for each modifier\n          // is filled with the initial data specified by the modifier. This means\n          // it doesn't persist and is fresh on each update.\n          // To ensure persistent data, use `${name}#persistent`\n\n          state.orderedModifiers.forEach(function (modifier) {\n            return state.modifiersData[modifier.name] = Object.assign({}, modifier.data);\n          });\n\n          for (var index = 0; index < state.orderedModifiers.length; index++) {\n\n            if (state.reset === true) {\n              state.reset = false;\n              index = -1;\n              continue;\n            }\n\n            var _state$orderedModifie = state.orderedModifiers[index],\n                fn = _state$orderedModifie.fn,\n                _state$orderedModifie2 = _state$orderedModifie.options,\n                _options = _state$orderedModifie2 === void 0 ? {} : _state$orderedModifie2,\n                name = _state$orderedModifie.name;\n\n            if (typeof fn === 'function') {\n              state = fn({\n                state: state,\n                options: _options,\n                name: name,\n                instance: instance\n              }) || state;\n            }\n          }\n        },\n        // Async and optimistically optimized update – it will not be executed if\n        // not necessary (debounced to run at most once-per-tick)\n        update: debounce(function () {\n          return new Promise(function (resolve) {\n            instance.forceUpdate();\n            resolve(state);\n          });\n        }),\n        destroy: function destroy() {\n          cleanupModifierEffects();\n          isDestroyed = true;\n        }\n      };\n\n      if (!areValidElements(reference, popper)) {\n\n        return instance;\n      }\n\n      instance.setOptions(options).then(function (state) {\n        if (!isDestroyed && options.onFirstUpdate) {\n          options.onFirstUpdate(state);\n        }\n      }); // Modifiers have the ability to execute arbitrary code before the first\n      // update cycle runs. They will be executed in the same order as the update\n      // cycle. This is useful when a modifier adds some persistent data that\n      // other modifiers need to use, but the modifier is run after the dependent\n      // one.\n\n      function runModifierEffects() {\n        state.orderedModifiers.forEach(function (_ref3) {\n          var name = _ref3.name,\n              _ref3$options = _ref3.options,\n              options = _ref3$options === void 0 ? {} : _ref3$options,\n              effect = _ref3.effect;\n\n          if (typeof effect === 'function') {\n            var cleanupFn = effect({\n              state: state,\n              name: name,\n              instance: instance,\n              options: options\n            });\n\n            var noopFn = function noopFn() {};\n\n            effectCleanupFns.push(cleanupFn || noopFn);\n          }\n        });\n      }\n\n      function cleanupModifierEffects() {\n        effectCleanupFns.forEach(function (fn) {\n          return fn();\n        });\n        effectCleanupFns = [];\n      }\n\n      return instance;\n    };\n  }\n  var createPopper$2 = /*#__PURE__*/popperGenerator(); // eslint-disable-next-line import/no-unused-modules\n\n  var defaultModifiers$1 = [eventListeners, popperOffsets$1, computeStyles$1, applyStyles$1];\n  var createPopper$1 = /*#__PURE__*/popperGenerator({\n    defaultModifiers: defaultModifiers$1\n  }); // eslint-disable-next-line import/no-unused-modules\n\n  var defaultModifiers = [eventListeners, popperOffsets$1, computeStyles$1, applyStyles$1, offset$1, flip$1, preventOverflow$1, arrow$1, hide$1];\n  var createPopper = /*#__PURE__*/popperGenerator({\n    defaultModifiers: defaultModifiers\n  }); // eslint-disable-next-line import/no-unused-modules\n\n  var Popper = /*#__PURE__*/Object.freeze({\n    __proto__: null,\n    popperGenerator: popperGenerator,\n    detectOverflow: detectOverflow,\n    createPopperBase: createPopper$2,\n    createPopper: createPopper,\n    createPopperLite: createPopper$1,\n    top: top,\n    bottom: bottom,\n    right: right,\n    left: left,\n    auto: auto,\n    basePlacements: basePlacements,\n    start: start,\n    end: end,\n    clippingParents: clippingParents,\n    viewport: viewport,\n    popper: popper,\n    reference: reference,\n    variationPlacements: variationPlacements,\n    placements: placements,\n    beforeRead: beforeRead,\n    read: read,\n    afterRead: afterRead,\n    beforeMain: beforeMain,\n    main: main,\n    afterMain: afterMain,\n    beforeWrite: beforeWrite,\n    write: write,\n    afterWrite: afterWrite,\n    modifierPhases: modifierPhases,\n    applyStyles: applyStyles$1,\n    arrow: arrow$1,\n    computeStyles: computeStyles$1,\n    eventListeners: eventListeners,\n    flip: flip$1,\n    hide: hide$1,\n    offset: offset$1,\n    popperOffsets: popperOffsets$1,\n    preventOverflow: preventOverflow$1\n  });\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): dropdown.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$8 = 'dropdown';\n  const DATA_KEY$7 = 'bs.dropdown';\n  const EVENT_KEY$7 = `.${DATA_KEY$7}`;\n  const DATA_API_KEY$4 = '.data-api';\n  const ESCAPE_KEY$2 = 'Escape';\n  const SPACE_KEY = 'Space';\n  const TAB_KEY = 'Tab';\n  const ARROW_UP_KEY = 'ArrowUp';\n  const ARROW_DOWN_KEY = 'ArrowDown';\n  const RIGHT_MOUSE_BUTTON = 2; // MouseEvent.button value for the secondary button, usually the right button\n\n  const REGEXP_KEYDOWN = new RegExp(`${ARROW_UP_KEY}|${ARROW_DOWN_KEY}|${ESCAPE_KEY$2}`);\n  const EVENT_HIDE$4 = `hide${EVENT_KEY$7}`;\n  const EVENT_HIDDEN$4 = `hidden${EVENT_KEY$7}`;\n  const EVENT_SHOW$4 = `show${EVENT_KEY$7}`;\n  const EVENT_SHOWN$4 = `shown${EVENT_KEY$7}`;\n  const EVENT_CLICK = `click${EVENT_KEY$7}`;\n  const EVENT_CLICK_DATA_API$3 = `click${EVENT_KEY$7}${DATA_API_KEY$4}`;\n  const EVENT_KEYDOWN_DATA_API = `keydown${EVENT_KEY$7}${DATA_API_KEY$4}`;\n  const EVENT_KEYUP_DATA_API = `keyup${EVENT_KEY$7}${DATA_API_KEY$4}`;\n  const CLASS_NAME_SHOW$7 = 'show';\n  const CLASS_NAME_DROPUP = 'dropup';\n  const CLASS_NAME_DROPEND = 'dropend';\n  const CLASS_NAME_DROPSTART = 'dropstart';\n  const CLASS_NAME_NAVBAR = 'navbar';\n  const SELECTOR_DATA_TOGGLE$3 = '[data-bs-toggle=\"dropdown\"]';\n  const SELECTOR_MENU = '.dropdown-menu';\n  const SELECTOR_NAVBAR_NAV = '.navbar-nav';\n  const SELECTOR_VISIBLE_ITEMS = '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)';\n  const PLACEMENT_TOP = isRTL() ? 'top-end' : 'top-start';\n  const PLACEMENT_TOPEND = isRTL() ? 'top-start' : 'top-end';\n  const PLACEMENT_BOTTOM = isRTL() ? 'bottom-end' : 'bottom-start';\n  const PLACEMENT_BOTTOMEND = isRTL() ? 'bottom-start' : 'bottom-end';\n  const PLACEMENT_RIGHT = isRTL() ? 'left-start' : 'right-start';\n  const PLACEMENT_LEFT = isRTL() ? 'right-start' : 'left-start';\n  const Default$7 = {\n    offset: [0, 2],\n    boundary: 'clippingParents',\n    reference: 'toggle',\n    display: 'dynamic',\n    popperConfig: null,\n    autoClose: true\n  };\n  const DefaultType$7 = {\n    offset: '(array|string|function)',\n    boundary: '(string|element)',\n    reference: '(string|element|object)',\n    display: 'string',\n    popperConfig: '(null|object|function)',\n    autoClose: '(boolean|string)'\n  };\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Dropdown extends BaseComponent {\n    constructor(element, config) {\n      super(element);\n      this._popper = null;\n      this._config = this._getConfig(config);\n      this._menu = this._getMenuElement();\n      this._inNavbar = this._detectNavbar();\n\n      this._addEventListeners();\n    } // Getters\n\n\n    static get Default() {\n      return Default$7;\n    }\n\n    static get DefaultType() {\n      return DefaultType$7;\n    }\n\n    static get NAME() {\n      return NAME$8;\n    } // Public\n\n\n    toggle() {\n      if (isDisabled(this._element)) {\n        return;\n      }\n\n      const isActive = this._element.classList.contains(CLASS_NAME_SHOW$7);\n\n      if (isActive) {\n        this.hide();\n        return;\n      }\n\n      this.show();\n    }\n\n    show() {\n      if (isDisabled(this._element) || this._menu.classList.contains(CLASS_NAME_SHOW$7)) {\n        return;\n      }\n\n      const parent = Dropdown.getParentFromElement(this._element);\n      const relatedTarget = {\n        relatedTarget: this._element\n      };\n      const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$4, relatedTarget);\n\n      if (showEvent.defaultPrevented) {\n        return;\n      } // Totally disable Popper for Dropdowns in Navbar\n\n\n      if (this._inNavbar) {\n        Manipulator.setDataAttribute(this._menu, 'popper', 'none');\n      } else {\n        if (typeof Popper === 'undefined') {\n          throw new TypeError('Bootstrap\\'s dropdowns require Popper (https://popper.js.org)');\n        }\n\n        let referenceElement = this._element;\n\n        if (this._config.reference === 'parent') {\n          referenceElement = parent;\n        } else if (isElement$1(this._config.reference)) {\n          referenceElement = getElement(this._config.reference);\n        } else if (typeof this._config.reference === 'object') {\n          referenceElement = this._config.reference;\n        }\n\n        const popperConfig = this._getPopperConfig();\n\n        const isDisplayStatic = popperConfig.modifiers.find(modifier => modifier.name === 'applyStyles' && modifier.enabled === false);\n        this._popper = createPopper(referenceElement, this._menu, popperConfig);\n\n        if (isDisplayStatic) {\n          Manipulator.setDataAttribute(this._menu, 'popper', 'static');\n        }\n      } // If this is a touch-enabled device we add extra\n      // empty mouseover listeners to the body's immediate children;\n      // only needed because of broken event delegation on iOS\n      // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n\n\n      if ('ontouchstart' in document.documentElement && !parent.closest(SELECTOR_NAVBAR_NAV)) {\n        [].concat(...document.body.children).forEach(elem => EventHandler.on(elem, 'mouseover', noop));\n      }\n\n      this._element.focus();\n\n      this._element.setAttribute('aria-expanded', true);\n\n      this._menu.classList.toggle(CLASS_NAME_SHOW$7);\n\n      this._element.classList.toggle(CLASS_NAME_SHOW$7);\n\n      EventHandler.trigger(this._element, EVENT_SHOWN$4, relatedTarget);\n    }\n\n    hide() {\n      if (isDisabled(this._element) || !this._menu.classList.contains(CLASS_NAME_SHOW$7)) {\n        return;\n      }\n\n      const relatedTarget = {\n        relatedTarget: this._element\n      };\n\n      this._completeHide(relatedTarget);\n    }\n\n    dispose() {\n      if (this._popper) {\n        this._popper.destroy();\n      }\n\n      super.dispose();\n    }\n\n    update() {\n      this._inNavbar = this._detectNavbar();\n\n      if (this._popper) {\n        this._popper.update();\n      }\n    } // Private\n\n\n    _addEventListeners() {\n      EventHandler.on(this._element, EVENT_CLICK, event => {\n        event.preventDefault();\n        this.toggle();\n      });\n    }\n\n    _completeHide(relatedTarget) {\n      const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$4, relatedTarget);\n\n      if (hideEvent.defaultPrevented) {\n        return;\n      } // If this is a touch-enabled device we remove the extra\n      // empty mouseover listeners we added for iOS support\n\n\n      if ('ontouchstart' in document.documentElement) {\n        [].concat(...document.body.children).forEach(elem => EventHandler.off(elem, 'mouseover', noop));\n      }\n\n      if (this._popper) {\n        this._popper.destroy();\n      }\n\n      this._menu.classList.remove(CLASS_NAME_SHOW$7);\n\n      this._element.classList.remove(CLASS_NAME_SHOW$7);\n\n      this._element.setAttribute('aria-expanded', 'false');\n\n      Manipulator.removeDataAttribute(this._menu, 'popper');\n      EventHandler.trigger(this._element, EVENT_HIDDEN$4, relatedTarget);\n    }\n\n    _getConfig(config) {\n      config = { ...this.constructor.Default,\n        ...Manipulator.getDataAttributes(this._element),\n        ...config\n      };\n      typeCheckConfig(NAME$8, config, this.constructor.DefaultType);\n\n      if (typeof config.reference === 'object' && !isElement$1(config.reference) && typeof config.reference.getBoundingClientRect !== 'function') {\n        // Popper virtual elements require a getBoundingClientRect method\n        throw new TypeError(`${NAME$8.toUpperCase()}: Option \"reference\" provided type \"object\" without a required \"getBoundingClientRect\" method.`);\n      }\n\n      return config;\n    }\n\n    _getMenuElement() {\n      return SelectorEngine.next(this._element, SELECTOR_MENU)[0];\n    }\n\n    _getPlacement() {\n      const parentDropdown = this._element.parentNode;\n\n      if (parentDropdown.classList.contains(CLASS_NAME_DROPEND)) {\n        return PLACEMENT_RIGHT;\n      }\n\n      if (parentDropdown.classList.contains(CLASS_NAME_DROPSTART)) {\n        return PLACEMENT_LEFT;\n      } // We need to trim the value because custom properties can also include spaces\n\n\n      const isEnd = getComputedStyle(this._menu).getPropertyValue('--bs-position').trim() === 'end';\n\n      if (parentDropdown.classList.contains(CLASS_NAME_DROPUP)) {\n        return isEnd ? PLACEMENT_TOPEND : PLACEMENT_TOP;\n      }\n\n      return isEnd ? PLACEMENT_BOTTOMEND : PLACEMENT_BOTTOM;\n    }\n\n    _detectNavbar() {\n      return this._element.closest(`.${CLASS_NAME_NAVBAR}`) !== null;\n    }\n\n    _getOffset() {\n      const {\n        offset\n      } = this._config;\n\n      if (typeof offset === 'string') {\n        return offset.split(',').map(val => Number.parseInt(val, 10));\n      }\n\n      if (typeof offset === 'function') {\n        return popperData => offset(popperData, this._element);\n      }\n\n      return offset;\n    }\n\n    _getPopperConfig() {\n      const defaultBsPopperConfig = {\n        placement: this._getPlacement(),\n        modifiers: [{\n          name: 'preventOverflow',\n          options: {\n            boundary: this._config.boundary\n          }\n        }, {\n          name: 'offset',\n          options: {\n            offset: this._getOffset()\n          }\n        }]\n      }; // Disable Popper if we have a static display\n\n      if (this._config.display === 'static') {\n        defaultBsPopperConfig.modifiers = [{\n          name: 'applyStyles',\n          enabled: false\n        }];\n      }\n\n      return { ...defaultBsPopperConfig,\n        ...(typeof this._config.popperConfig === 'function' ? this._config.popperConfig(defaultBsPopperConfig) : this._config.popperConfig)\n      };\n    }\n\n    _selectMenuItem({\n      key,\n      target\n    }) {\n      const items = SelectorEngine.find(SELECTOR_VISIBLE_ITEMS, this._menu).filter(isVisible);\n\n      if (!items.length) {\n        return;\n      } // if target isn't included in items (e.g. when expanding the dropdown)\n      // allow cycling to get the last item in case key equals ARROW_UP_KEY\n\n\n      getNextActiveElement(items, target, key === ARROW_DOWN_KEY, !items.includes(target)).focus();\n    } // Static\n\n\n    static dropdownInterface(element, config) {\n      const data = Dropdown.getOrCreateInstance(element, config);\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config]();\n      }\n    }\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        Dropdown.dropdownInterface(this, config);\n      });\n    }\n\n    static clearMenus(event) {\n      if (event && (event.button === RIGHT_MOUSE_BUTTON || event.type === 'keyup' && event.key !== TAB_KEY)) {\n        return;\n      }\n\n      const toggles = SelectorEngine.find(SELECTOR_DATA_TOGGLE$3);\n\n      for (let i = 0, len = toggles.length; i < len; i++) {\n        const context = Dropdown.getInstance(toggles[i]);\n\n        if (!context || context._config.autoClose === false) {\n          continue;\n        }\n\n        if (!context._element.classList.contains(CLASS_NAME_SHOW$7)) {\n          continue;\n        }\n\n        const relatedTarget = {\n          relatedTarget: context._element\n        };\n\n        if (event) {\n          const composedPath = event.composedPath();\n          const isMenuTarget = composedPath.includes(context._menu);\n\n          if (composedPath.includes(context._element) || context._config.autoClose === 'inside' && !isMenuTarget || context._config.autoClose === 'outside' && isMenuTarget) {\n            continue;\n          } // Tab navigation through the dropdown menu or events from contained inputs shouldn't close the menu\n\n\n          if (context._menu.contains(event.target) && (event.type === 'keyup' && event.key === TAB_KEY || /input|select|option|textarea|form/i.test(event.target.tagName))) {\n            continue;\n          }\n\n          if (event.type === 'click') {\n            relatedTarget.clickEvent = event;\n          }\n        }\n\n        context._completeHide(relatedTarget);\n      }\n    }\n\n    static getParentFromElement(element) {\n      return getElementFromSelector(element) || element.parentNode;\n    }\n\n    static dataApiKeydownHandler(event) {\n      // If not input/textarea:\n      //  - And not a key in REGEXP_KEYDOWN => not a dropdown command\n      // If input/textarea:\n      //  - If space key => not a dropdown command\n      //  - If key is other than escape\n      //    - If key is not up or down => not a dropdown command\n      //    - If trigger inside the menu => not a dropdown command\n      if (/input|textarea/i.test(event.target.tagName) ? event.key === SPACE_KEY || event.key !== ESCAPE_KEY$2 && (event.key !== ARROW_DOWN_KEY && event.key !== ARROW_UP_KEY || event.target.closest(SELECTOR_MENU)) : !REGEXP_KEYDOWN.test(event.key)) {\n        return;\n      }\n\n      const isActive = this.classList.contains(CLASS_NAME_SHOW$7);\n\n      if (!isActive && event.key === ESCAPE_KEY$2) {\n        return;\n      }\n\n      event.preventDefault();\n      event.stopPropagation();\n\n      if (isDisabled(this)) {\n        return;\n      }\n\n      const getToggleButton = () => this.matches(SELECTOR_DATA_TOGGLE$3) ? this : SelectorEngine.prev(this, SELECTOR_DATA_TOGGLE$3)[0];\n\n      if (event.key === ESCAPE_KEY$2) {\n        getToggleButton().focus();\n        Dropdown.clearMenus();\n        return;\n      }\n\n      if (event.key === ARROW_UP_KEY || event.key === ARROW_DOWN_KEY) {\n        if (!isActive) {\n          getToggleButton().click();\n        }\n\n        Dropdown.getInstance(getToggleButton())._selectMenuItem(event);\n\n        return;\n      }\n\n      if (!isActive || event.key === SPACE_KEY) {\n        Dropdown.clearMenus();\n      }\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_DATA_TOGGLE$3, Dropdown.dataApiKeydownHandler);\n  EventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown.dataApiKeydownHandler);\n  EventHandler.on(document, EVENT_CLICK_DATA_API$3, Dropdown.clearMenus);\n  EventHandler.on(document, EVENT_KEYUP_DATA_API, Dropdown.clearMenus);\n  EventHandler.on(document, EVENT_CLICK_DATA_API$3, SELECTOR_DATA_TOGGLE$3, function (event) {\n    event.preventDefault();\n    Dropdown.dropdownInterface(this);\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Dropdown to jQuery only if jQuery is present\n   */\n\n  defineJQueryPlugin(Dropdown);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): util/scrollBar.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  const SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top';\n  const SELECTOR_STICKY_CONTENT = '.sticky-top';\n\n  class ScrollBarHelper {\n    constructor() {\n      this._element = document.body;\n    }\n\n    getWidth() {\n      // https://developer.mozilla.org/en-US/docs/Web/API/Window/innerWidth#usage_notes\n      const documentWidth = document.documentElement.clientWidth;\n      return Math.abs(window.innerWidth - documentWidth);\n    }\n\n    hide() {\n      const width = this.getWidth();\n\n      this._disableOverFlow(); // give padding to element to balance the hidden scrollbar width\n\n\n      this._setElementAttributes(this._element, 'paddingRight', calculatedValue => calculatedValue + width); // trick: We adjust positive paddingRight and negative marginRight to sticky-top elements to keep showing fullwidth\n\n\n      this._setElementAttributes(SELECTOR_FIXED_CONTENT, 'paddingRight', calculatedValue => calculatedValue + width);\n\n      this._setElementAttributes(SELECTOR_STICKY_CONTENT, 'marginRight', calculatedValue => calculatedValue - width);\n    }\n\n    _disableOverFlow() {\n      this._saveInitialAttribute(this._element, 'overflow');\n\n      this._element.style.overflow = 'hidden';\n    }\n\n    _setElementAttributes(selector, styleProp, callback) {\n      const scrollbarWidth = this.getWidth();\n\n      const manipulationCallBack = element => {\n        if (element !== this._element && window.innerWidth > element.clientWidth + scrollbarWidth) {\n          return;\n        }\n\n        this._saveInitialAttribute(element, styleProp);\n\n        const calculatedValue = window.getComputedStyle(element)[styleProp];\n        element.style[styleProp] = `${callback(Number.parseFloat(calculatedValue))}px`;\n      };\n\n      this._applyManipulationCallback(selector, manipulationCallBack);\n    }\n\n    reset() {\n      this._resetElementAttributes(this._element, 'overflow');\n\n      this._resetElementAttributes(this._element, 'paddingRight');\n\n      this._resetElementAttributes(SELECTOR_FIXED_CONTENT, 'paddingRight');\n\n      this._resetElementAttributes(SELECTOR_STICKY_CONTENT, 'marginRight');\n    }\n\n    _saveInitialAttribute(element, styleProp) {\n      const actualValue = element.style[styleProp];\n\n      if (actualValue) {\n        Manipulator.setDataAttribute(element, styleProp, actualValue);\n      }\n    }\n\n    _resetElementAttributes(selector, styleProp) {\n      const manipulationCallBack = element => {\n        const value = Manipulator.getDataAttribute(element, styleProp);\n\n        if (typeof value === 'undefined') {\n          element.style.removeProperty(styleProp);\n        } else {\n          Manipulator.removeDataAttribute(element, styleProp);\n          element.style[styleProp] = value;\n        }\n      };\n\n      this._applyManipulationCallback(selector, manipulationCallBack);\n    }\n\n    _applyManipulationCallback(selector, callBack) {\n      if (isElement$1(selector)) {\n        callBack(selector);\n      } else {\n        SelectorEngine.find(selector, this._element).forEach(callBack);\n      }\n    }\n\n    isOverflowing() {\n      return this.getWidth() > 0;\n    }\n\n  }\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): util/backdrop.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  const Default$6 = {\n    isVisible: true,\n    // if false, we use the backdrop helper without adding any element to the dom\n    isAnimated: false,\n    rootElement: 'body',\n    // give the choice to place backdrop under different elements\n    clickCallback: null\n  };\n  const DefaultType$6 = {\n    isVisible: 'boolean',\n    isAnimated: 'boolean',\n    rootElement: '(element|string)',\n    clickCallback: '(function|null)'\n  };\n  const NAME$7 = 'backdrop';\n  const CLASS_NAME_BACKDROP = 'modal-backdrop';\n  const CLASS_NAME_FADE$5 = 'fade';\n  const CLASS_NAME_SHOW$6 = 'show';\n  const EVENT_MOUSEDOWN = `mousedown.bs.${NAME$7}`;\n\n  class Backdrop {\n    constructor(config) {\n      this._config = this._getConfig(config);\n      this._isAppended = false;\n      this._element = null;\n    }\n\n    show(callback) {\n      if (!this._config.isVisible) {\n        execute(callback);\n        return;\n      }\n\n      this._append();\n\n      if (this._config.isAnimated) {\n        reflow(this._getElement());\n      }\n\n      this._getElement().classList.add(CLASS_NAME_SHOW$6);\n\n      this._emulateAnimation(() => {\n        execute(callback);\n      });\n    }\n\n    hide(callback) {\n      if (!this._config.isVisible) {\n        execute(callback);\n        return;\n      }\n\n      this._getElement().classList.remove(CLASS_NAME_SHOW$6);\n\n      this._emulateAnimation(() => {\n        this.dispose();\n        execute(callback);\n      });\n    } // Private\n\n\n    _getElement() {\n      if (!this._element) {\n        const backdrop = document.createElement('div');\n        backdrop.className = CLASS_NAME_BACKDROP;\n\n        if (this._config.isAnimated) {\n          backdrop.classList.add(CLASS_NAME_FADE$5);\n        }\n\n        this._element = backdrop;\n      }\n\n      return this._element;\n    }\n\n    _getConfig(config) {\n      config = { ...Default$6,\n        ...(typeof config === 'object' ? config : {})\n      }; // use getElement() with the default \"body\" to get a fresh Element on each instantiation\n\n      config.rootElement = getElement(config.rootElement);\n      typeCheckConfig(NAME$7, config, DefaultType$6);\n      return config;\n    }\n\n    _append() {\n      if (this._isAppended) {\n        return;\n      }\n\n      this._config.rootElement.appendChild(this._getElement());\n\n      EventHandler.on(this._getElement(), EVENT_MOUSEDOWN, () => {\n        execute(this._config.clickCallback);\n      });\n      this._isAppended = true;\n    }\n\n    dispose() {\n      if (!this._isAppended) {\n        return;\n      }\n\n      EventHandler.off(this._element, EVENT_MOUSEDOWN);\n\n      this._element.remove();\n\n      this._isAppended = false;\n    }\n\n    _emulateAnimation(callback) {\n      executeAfterTransition(callback, this._getElement(), this._config.isAnimated);\n    }\n\n  }\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): modal.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$6 = 'modal';\n  const DATA_KEY$6 = 'bs.modal';\n  const EVENT_KEY$6 = `.${DATA_KEY$6}`;\n  const DATA_API_KEY$3 = '.data-api';\n  const ESCAPE_KEY$1 = 'Escape';\n  const Default$5 = {\n    backdrop: true,\n    keyboard: true,\n    focus: true\n  };\n  const DefaultType$5 = {\n    backdrop: '(boolean|string)',\n    keyboard: 'boolean',\n    focus: 'boolean'\n  };\n  const EVENT_HIDE$3 = `hide${EVENT_KEY$6}`;\n  const EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY$6}`;\n  const EVENT_HIDDEN$3 = `hidden${EVENT_KEY$6}`;\n  const EVENT_SHOW$3 = `show${EVENT_KEY$6}`;\n  const EVENT_SHOWN$3 = `shown${EVENT_KEY$6}`;\n  const EVENT_FOCUSIN$2 = `focusin${EVENT_KEY$6}`;\n  const EVENT_RESIZE = `resize${EVENT_KEY$6}`;\n  const EVENT_CLICK_DISMISS$2 = `click.dismiss${EVENT_KEY$6}`;\n  const EVENT_KEYDOWN_DISMISS$1 = `keydown.dismiss${EVENT_KEY$6}`;\n  const EVENT_MOUSEUP_DISMISS = `mouseup.dismiss${EVENT_KEY$6}`;\n  const EVENT_MOUSEDOWN_DISMISS = `mousedown.dismiss${EVENT_KEY$6}`;\n  const EVENT_CLICK_DATA_API$2 = `click${EVENT_KEY$6}${DATA_API_KEY$3}`;\n  const CLASS_NAME_OPEN = 'modal-open';\n  const CLASS_NAME_FADE$4 = 'fade';\n  const CLASS_NAME_SHOW$5 = 'show';\n  const CLASS_NAME_STATIC = 'modal-static';\n  const SELECTOR_DIALOG = '.modal-dialog';\n  const SELECTOR_MODAL_BODY = '.modal-body';\n  const SELECTOR_DATA_TOGGLE$2 = '[data-bs-toggle=\"modal\"]';\n  const SELECTOR_DATA_DISMISS$2 = '[data-bs-dismiss=\"modal\"]';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Modal extends BaseComponent {\n    constructor(element, config) {\n      super(element);\n      this._config = this._getConfig(config);\n      this._dialog = SelectorEngine.findOne(SELECTOR_DIALOG, this._element);\n      this._backdrop = this._initializeBackDrop();\n      this._isShown = false;\n      this._ignoreBackdropClick = false;\n      this._isTransitioning = false;\n      this._scrollBar = new ScrollBarHelper();\n    } // Getters\n\n\n    static get Default() {\n      return Default$5;\n    }\n\n    static get NAME() {\n      return NAME$6;\n    } // Public\n\n\n    toggle(relatedTarget) {\n      return this._isShown ? this.hide() : this.show(relatedTarget);\n    }\n\n    show(relatedTarget) {\n      if (this._isShown || this._isTransitioning) {\n        return;\n      }\n\n      const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$3, {\n        relatedTarget\n      });\n\n      if (showEvent.defaultPrevented) {\n        return;\n      }\n\n      this._isShown = true;\n\n      if (this._isAnimated()) {\n        this._isTransitioning = true;\n      }\n\n      this._scrollBar.hide();\n\n      document.body.classList.add(CLASS_NAME_OPEN);\n\n      this._adjustDialog();\n\n      this._setEscapeEvent();\n\n      this._setResizeEvent();\n\n      EventHandler.on(this._element, EVENT_CLICK_DISMISS$2, SELECTOR_DATA_DISMISS$2, event => this.hide(event));\n      EventHandler.on(this._dialog, EVENT_MOUSEDOWN_DISMISS, () => {\n        EventHandler.one(this._element, EVENT_MOUSEUP_DISMISS, event => {\n          if (event.target === this._element) {\n            this._ignoreBackdropClick = true;\n          }\n        });\n      });\n\n      this._showBackdrop(() => this._showElement(relatedTarget));\n    }\n\n    hide(event) {\n      if (event && ['A', 'AREA'].includes(event.target.tagName)) {\n        event.preventDefault();\n      }\n\n      if (!this._isShown || this._isTransitioning) {\n        return;\n      }\n\n      const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$3);\n\n      if (hideEvent.defaultPrevented) {\n        return;\n      }\n\n      this._isShown = false;\n\n      const isAnimated = this._isAnimated();\n\n      if (isAnimated) {\n        this._isTransitioning = true;\n      }\n\n      this._setEscapeEvent();\n\n      this._setResizeEvent();\n\n      EventHandler.off(document, EVENT_FOCUSIN$2);\n\n      this._element.classList.remove(CLASS_NAME_SHOW$5);\n\n      EventHandler.off(this._element, EVENT_CLICK_DISMISS$2);\n      EventHandler.off(this._dialog, EVENT_MOUSEDOWN_DISMISS);\n\n      this._queueCallback(() => this._hideModal(), this._element, isAnimated);\n    }\n\n    dispose() {\n      [window, this._dialog].forEach(htmlElement => EventHandler.off(htmlElement, EVENT_KEY$6));\n\n      this._backdrop.dispose();\n\n      super.dispose();\n      /**\n       * `document` has 2 events `EVENT_FOCUSIN` and `EVENT_CLICK_DATA_API`\n       * Do not move `document` in `htmlElements` array\n       * It will remove `EVENT_CLICK_DATA_API` event that should remain\n       */\n\n      EventHandler.off(document, EVENT_FOCUSIN$2);\n    }\n\n    handleUpdate() {\n      this._adjustDialog();\n    } // Private\n\n\n    _initializeBackDrop() {\n      return new Backdrop({\n        isVisible: Boolean(this._config.backdrop),\n        // 'static' option will be translated to true, and booleans will keep their value\n        isAnimated: this._isAnimated()\n      });\n    }\n\n    _getConfig(config) {\n      config = { ...Default$5,\n        ...Manipulator.getDataAttributes(this._element),\n        ...(typeof config === 'object' ? config : {})\n      };\n      typeCheckConfig(NAME$6, config, DefaultType$5);\n      return config;\n    }\n\n    _showElement(relatedTarget) {\n      const isAnimated = this._isAnimated();\n\n      const modalBody = SelectorEngine.findOne(SELECTOR_MODAL_BODY, this._dialog);\n\n      if (!this._element.parentNode || this._element.parentNode.nodeType !== Node.ELEMENT_NODE) {\n        // Don't move modal's DOM position\n        document.body.appendChild(this._element);\n      }\n\n      this._element.style.display = 'block';\n\n      this._element.removeAttribute('aria-hidden');\n\n      this._element.setAttribute('aria-modal', true);\n\n      this._element.setAttribute('role', 'dialog');\n\n      this._element.scrollTop = 0;\n\n      if (modalBody) {\n        modalBody.scrollTop = 0;\n      }\n\n      if (isAnimated) {\n        reflow(this._element);\n      }\n\n      this._element.classList.add(CLASS_NAME_SHOW$5);\n\n      if (this._config.focus) {\n        this._enforceFocus();\n      }\n\n      const transitionComplete = () => {\n        if (this._config.focus) {\n          this._element.focus();\n        }\n\n        this._isTransitioning = false;\n        EventHandler.trigger(this._element, EVENT_SHOWN$3, {\n          relatedTarget\n        });\n      };\n\n      this._queueCallback(transitionComplete, this._dialog, isAnimated);\n    }\n\n    _enforceFocus() {\n      EventHandler.off(document, EVENT_FOCUSIN$2); // guard against infinite focus loop\n\n      EventHandler.on(document, EVENT_FOCUSIN$2, event => {\n        if (document !== event.target && this._element !== event.target && !this._element.contains(event.target)) {\n          this._element.focus();\n        }\n      });\n    }\n\n    _setEscapeEvent() {\n      if (this._isShown) {\n        EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS$1, event => {\n          if (this._config.keyboard && event.key === ESCAPE_KEY$1) {\n            event.preventDefault();\n            this.hide();\n          } else if (!this._config.keyboard && event.key === ESCAPE_KEY$1) {\n            this._triggerBackdropTransition();\n          }\n        });\n      } else {\n        EventHandler.off(this._element, EVENT_KEYDOWN_DISMISS$1);\n      }\n    }\n\n    _setResizeEvent() {\n      if (this._isShown) {\n        EventHandler.on(window, EVENT_RESIZE, () => this._adjustDialog());\n      } else {\n        EventHandler.off(window, EVENT_RESIZE);\n      }\n    }\n\n    _hideModal() {\n      this._element.style.display = 'none';\n\n      this._element.setAttribute('aria-hidden', true);\n\n      this._element.removeAttribute('aria-modal');\n\n      this._element.removeAttribute('role');\n\n      this._isTransitioning = false;\n\n      this._backdrop.hide(() => {\n        document.body.classList.remove(CLASS_NAME_OPEN);\n\n        this._resetAdjustments();\n\n        this._scrollBar.reset();\n\n        EventHandler.trigger(this._element, EVENT_HIDDEN$3);\n      });\n    }\n\n    _showBackdrop(callback) {\n      EventHandler.on(this._element, EVENT_CLICK_DISMISS$2, event => {\n        if (this._ignoreBackdropClick) {\n          this._ignoreBackdropClick = false;\n          return;\n        }\n\n        if (event.target !== event.currentTarget) {\n          return;\n        }\n\n        if (this._config.backdrop === true) {\n          this.hide();\n        } else if (this._config.backdrop === 'static') {\n          this._triggerBackdropTransition();\n        }\n      });\n\n      this._backdrop.show(callback);\n    }\n\n    _isAnimated() {\n      return this._element.classList.contains(CLASS_NAME_FADE$4);\n    }\n\n    _triggerBackdropTransition() {\n      const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED);\n\n      if (hideEvent.defaultPrevented) {\n        return;\n      }\n\n      const {\n        classList,\n        scrollHeight,\n        style\n      } = this._element;\n      const isModalOverflowing = scrollHeight > document.documentElement.clientHeight; // return if the following background transition hasn't yet completed\n\n      if (!isModalOverflowing && style.overflowY === 'hidden' || classList.contains(CLASS_NAME_STATIC)) {\n        return;\n      }\n\n      if (!isModalOverflowing) {\n        style.overflowY = 'hidden';\n      }\n\n      classList.add(CLASS_NAME_STATIC);\n\n      this._queueCallback(() => {\n        classList.remove(CLASS_NAME_STATIC);\n\n        if (!isModalOverflowing) {\n          this._queueCallback(() => {\n            style.overflowY = '';\n          }, this._dialog);\n        }\n      }, this._dialog);\n\n      this._element.focus();\n    } // ----------------------------------------------------------------------\n    // the following methods are used to handle overflowing modals\n    // ----------------------------------------------------------------------\n\n\n    _adjustDialog() {\n      const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;\n\n      const scrollbarWidth = this._scrollBar.getWidth();\n\n      const isBodyOverflowing = scrollbarWidth > 0;\n\n      if (!isBodyOverflowing && isModalOverflowing && !isRTL() || isBodyOverflowing && !isModalOverflowing && isRTL()) {\n        this._element.style.paddingLeft = `${scrollbarWidth}px`;\n      }\n\n      if (isBodyOverflowing && !isModalOverflowing && !isRTL() || !isBodyOverflowing && isModalOverflowing && isRTL()) {\n        this._element.style.paddingRight = `${scrollbarWidth}px`;\n      }\n    }\n\n    _resetAdjustments() {\n      this._element.style.paddingLeft = '';\n      this._element.style.paddingRight = '';\n    } // Static\n\n\n    static jQueryInterface(config, relatedTarget) {\n      return this.each(function () {\n        const data = Modal.getOrCreateInstance(this, config);\n\n        if (typeof config !== 'string') {\n          return;\n        }\n\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config](relatedTarget);\n      });\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(document, EVENT_CLICK_DATA_API$2, SELECTOR_DATA_TOGGLE$2, function (event) {\n    const target = getElementFromSelector(this);\n\n    if (['A', 'AREA'].includes(this.tagName)) {\n      event.preventDefault();\n    }\n\n    EventHandler.one(target, EVENT_SHOW$3, showEvent => {\n      if (showEvent.defaultPrevented) {\n        // only register focus restorer if modal will actually get shown\n        return;\n      }\n\n      EventHandler.one(target, EVENT_HIDDEN$3, () => {\n        if (isVisible(this)) {\n          this.focus();\n        }\n      });\n    });\n    const data = Modal.getOrCreateInstance(target);\n    data.toggle(this);\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Modal to jQuery only if jQuery is present\n   */\n\n  defineJQueryPlugin(Modal);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): offcanvas.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$5 = 'offcanvas';\n  const DATA_KEY$5 = 'bs.offcanvas';\n  const EVENT_KEY$5 = `.${DATA_KEY$5}`;\n  const DATA_API_KEY$2 = '.data-api';\n  const EVENT_LOAD_DATA_API$1 = `load${EVENT_KEY$5}${DATA_API_KEY$2}`;\n  const ESCAPE_KEY = 'Escape';\n  const Default$4 = {\n    backdrop: true,\n    keyboard: true,\n    scroll: false\n  };\n  const DefaultType$4 = {\n    backdrop: 'boolean',\n    keyboard: 'boolean',\n    scroll: 'boolean'\n  };\n  const CLASS_NAME_SHOW$4 = 'show';\n  const OPEN_SELECTOR = '.offcanvas.show';\n  const EVENT_SHOW$2 = `show${EVENT_KEY$5}`;\n  const EVENT_SHOWN$2 = `shown${EVENT_KEY$5}`;\n  const EVENT_HIDE$2 = `hide${EVENT_KEY$5}`;\n  const EVENT_HIDDEN$2 = `hidden${EVENT_KEY$5}`;\n  const EVENT_FOCUSIN$1 = `focusin${EVENT_KEY$5}`;\n  const EVENT_CLICK_DATA_API$1 = `click${EVENT_KEY$5}${DATA_API_KEY$2}`;\n  const EVENT_CLICK_DISMISS$1 = `click.dismiss${EVENT_KEY$5}`;\n  const EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY$5}`;\n  const SELECTOR_DATA_DISMISS$1 = '[data-bs-dismiss=\"offcanvas\"]';\n  const SELECTOR_DATA_TOGGLE$1 = '[data-bs-toggle=\"offcanvas\"]';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Offcanvas extends BaseComponent {\n    constructor(element, config) {\n      super(element);\n      this._config = this._getConfig(config);\n      this._isShown = false;\n      this._backdrop = this._initializeBackDrop();\n\n      this._addEventListeners();\n    } // Getters\n\n\n    static get NAME() {\n      return NAME$5;\n    }\n\n    static get Default() {\n      return Default$4;\n    } // Public\n\n\n    toggle(relatedTarget) {\n      return this._isShown ? this.hide() : this.show(relatedTarget);\n    }\n\n    show(relatedTarget) {\n      if (this._isShown) {\n        return;\n      }\n\n      const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$2, {\n        relatedTarget\n      });\n\n      if (showEvent.defaultPrevented) {\n        return;\n      }\n\n      this._isShown = true;\n      this._element.style.visibility = 'visible';\n\n      this._backdrop.show();\n\n      if (!this._config.scroll) {\n        new ScrollBarHelper().hide();\n\n        this._enforceFocusOnElement(this._element);\n      }\n\n      this._element.removeAttribute('aria-hidden');\n\n      this._element.setAttribute('aria-modal', true);\n\n      this._element.setAttribute('role', 'dialog');\n\n      this._element.classList.add(CLASS_NAME_SHOW$4);\n\n      const completeCallBack = () => {\n        EventHandler.trigger(this._element, EVENT_SHOWN$2, {\n          relatedTarget\n        });\n      };\n\n      this._queueCallback(completeCallBack, this._element, true);\n    }\n\n    hide() {\n      if (!this._isShown) {\n        return;\n      }\n\n      const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$2);\n\n      if (hideEvent.defaultPrevented) {\n        return;\n      }\n\n      EventHandler.off(document, EVENT_FOCUSIN$1);\n\n      this._element.blur();\n\n      this._isShown = false;\n\n      this._element.classList.remove(CLASS_NAME_SHOW$4);\n\n      this._backdrop.hide();\n\n      const completeCallback = () => {\n        this._element.setAttribute('aria-hidden', true);\n\n        this._element.removeAttribute('aria-modal');\n\n        this._element.removeAttribute('role');\n\n        this._element.style.visibility = 'hidden';\n\n        if (!this._config.scroll) {\n          new ScrollBarHelper().reset();\n        }\n\n        EventHandler.trigger(this._element, EVENT_HIDDEN$2);\n      };\n\n      this._queueCallback(completeCallback, this._element, true);\n    }\n\n    dispose() {\n      this._backdrop.dispose();\n\n      super.dispose();\n      EventHandler.off(document, EVENT_FOCUSIN$1);\n    } // Private\n\n\n    _getConfig(config) {\n      config = { ...Default$4,\n        ...Manipulator.getDataAttributes(this._element),\n        ...(typeof config === 'object' ? config : {})\n      };\n      typeCheckConfig(NAME$5, config, DefaultType$4);\n      return config;\n    }\n\n    _initializeBackDrop() {\n      return new Backdrop({\n        isVisible: this._config.backdrop,\n        isAnimated: true,\n        rootElement: this._element.parentNode,\n        clickCallback: () => this.hide()\n      });\n    }\n\n    _enforceFocusOnElement(element) {\n      EventHandler.off(document, EVENT_FOCUSIN$1); // guard against infinite focus loop\n\n      EventHandler.on(document, EVENT_FOCUSIN$1, event => {\n        if (document !== event.target && element !== event.target && !element.contains(event.target)) {\n          element.focus();\n        }\n      });\n      element.focus();\n    }\n\n    _addEventListeners() {\n      EventHandler.on(this._element, EVENT_CLICK_DISMISS$1, SELECTOR_DATA_DISMISS$1, () => this.hide());\n      EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS, event => {\n        if (this._config.keyboard && event.key === ESCAPE_KEY) {\n          this.hide();\n        }\n      });\n    } // Static\n\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = Offcanvas.getOrCreateInstance(this, config);\n\n        if (typeof config !== 'string') {\n          return;\n        }\n\n        if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config](this);\n      });\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(document, EVENT_CLICK_DATA_API$1, SELECTOR_DATA_TOGGLE$1, function (event) {\n    const target = getElementFromSelector(this);\n\n    if (['A', 'AREA'].includes(this.tagName)) {\n      event.preventDefault();\n    }\n\n    if (isDisabled(this)) {\n      return;\n    }\n\n    EventHandler.one(target, EVENT_HIDDEN$2, () => {\n      // focus on trigger when it is closed\n      if (isVisible(this)) {\n        this.focus();\n      }\n    }); // avoid conflict when clicking a toggler of an offcanvas, while another is open\n\n    const allReadyOpen = SelectorEngine.findOne(OPEN_SELECTOR);\n\n    if (allReadyOpen && allReadyOpen !== target) {\n      Offcanvas.getInstance(allReadyOpen).hide();\n    }\n\n    const data = Offcanvas.getOrCreateInstance(target);\n    data.toggle(this);\n  });\n  EventHandler.on(window, EVENT_LOAD_DATA_API$1, () => SelectorEngine.find(OPEN_SELECTOR).forEach(el => Offcanvas.getOrCreateInstance(el).show()));\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   */\n\n  defineJQueryPlugin(Offcanvas);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): util/sanitizer.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  const uriAttrs = new Set(['background', 'cite', 'href', 'itemtype', 'longdesc', 'poster', 'src', 'xlink:href']);\n  const ARIA_ATTRIBUTE_PATTERN = /^aria-[\\w-]*$/i;\n  /**\n   * A pattern that recognizes a commonly useful subset of URLs that are safe.\n   *\n   * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts\n   */\n\n  const SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file):|[^#&/:?]*(?:[#/?]|$))/i;\n  /**\n   * A pattern that matches safe data URLs. Only matches image, video and audio types.\n   *\n   * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts\n   */\n\n  const DATA_URL_PATTERN = /^data:(?:image\\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\\/(?:mpeg|mp4|ogg|webm)|audio\\/(?:mp3|oga|ogg|opus));base64,[\\d+/a-z]+=*$/i;\n\n  const allowedAttribute = (attr, allowedAttributeList) => {\n    const attrName = attr.nodeName.toLowerCase();\n\n    if (allowedAttributeList.includes(attrName)) {\n      if (uriAttrs.has(attrName)) {\n        return Boolean(SAFE_URL_PATTERN.test(attr.nodeValue) || DATA_URL_PATTERN.test(attr.nodeValue));\n      }\n\n      return true;\n    }\n\n    const regExp = allowedAttributeList.filter(attrRegex => attrRegex instanceof RegExp); // Check if a regular expression validates the attribute.\n\n    for (let i = 0, len = regExp.length; i < len; i++) {\n      if (regExp[i].test(attrName)) {\n        return true;\n      }\n    }\n\n    return false;\n  };\n\n  const DefaultAllowlist = {\n    // Global attributes allowed on any supplied element below.\n    '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],\n    a: ['target', 'href', 'title', 'rel'],\n    area: [],\n    b: [],\n    br: [],\n    col: [],\n    code: [],\n    div: [],\n    em: [],\n    hr: [],\n    h1: [],\n    h2: [],\n    h3: [],\n    h4: [],\n    h5: [],\n    h6: [],\n    i: [],\n    img: ['src', 'srcset', 'alt', 'title', 'width', 'height'],\n    li: [],\n    ol: [],\n    p: [],\n    pre: [],\n    s: [],\n    small: [],\n    span: [],\n    sub: [],\n    sup: [],\n    strong: [],\n    u: [],\n    ul: []\n  };\n  function sanitizeHtml(unsafeHtml, allowList, sanitizeFn) {\n    if (!unsafeHtml.length) {\n      return unsafeHtml;\n    }\n\n    if (sanitizeFn && typeof sanitizeFn === 'function') {\n      return sanitizeFn(unsafeHtml);\n    }\n\n    const domParser = new window.DOMParser();\n    const createdDocument = domParser.parseFromString(unsafeHtml, 'text/html');\n    const allowlistKeys = Object.keys(allowList);\n    const elements = [].concat(...createdDocument.body.querySelectorAll('*'));\n\n    for (let i = 0, len = elements.length; i < len; i++) {\n      const el = elements[i];\n      const elName = el.nodeName.toLowerCase();\n\n      if (!allowlistKeys.includes(elName)) {\n        el.remove();\n        continue;\n      }\n\n      const attributeList = [].concat(...el.attributes);\n      const allowedAttributes = [].concat(allowList['*'] || [], allowList[elName] || []);\n      attributeList.forEach(attr => {\n        if (!allowedAttribute(attr, allowedAttributes)) {\n          el.removeAttribute(attr.nodeName);\n        }\n      });\n    }\n\n    return createdDocument.body.innerHTML;\n  }\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): tooltip.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$4 = 'tooltip';\n  const DATA_KEY$4 = 'bs.tooltip';\n  const EVENT_KEY$4 = `.${DATA_KEY$4}`;\n  const CLASS_PREFIX$1 = 'bs-tooltip';\n  const BSCLS_PREFIX_REGEX$1 = new RegExp(`(^|\\\\s)${CLASS_PREFIX$1}\\\\S+`, 'g');\n  const DISALLOWED_ATTRIBUTES = new Set(['sanitize', 'allowList', 'sanitizeFn']);\n  const DefaultType$3 = {\n    animation: 'boolean',\n    template: 'string',\n    title: '(string|element|function)',\n    trigger: 'string',\n    delay: '(number|object)',\n    html: 'boolean',\n    selector: '(string|boolean)',\n    placement: '(string|function)',\n    offset: '(array|string|function)',\n    container: '(string|element|boolean)',\n    fallbackPlacements: 'array',\n    boundary: '(string|element)',\n    customClass: '(string|function)',\n    sanitize: 'boolean',\n    sanitizeFn: '(null|function)',\n    allowList: 'object',\n    popperConfig: '(null|object|function)'\n  };\n  const AttachmentMap = {\n    AUTO: 'auto',\n    TOP: 'top',\n    RIGHT: isRTL() ? 'left' : 'right',\n    BOTTOM: 'bottom',\n    LEFT: isRTL() ? 'right' : 'left'\n  };\n  const Default$3 = {\n    animation: true,\n    template: '<div class=\"tooltip\" role=\"tooltip\">' + '<div class=\"tooltip-arrow\"></div>' + '<div class=\"tooltip-inner\"></div>' + '</div>',\n    trigger: 'hover focus',\n    title: '',\n    delay: 0,\n    html: false,\n    selector: false,\n    placement: 'top',\n    offset: [0, 0],\n    container: false,\n    fallbackPlacements: ['top', 'right', 'bottom', 'left'],\n    boundary: 'clippingParents',\n    customClass: '',\n    sanitize: true,\n    sanitizeFn: null,\n    allowList: DefaultAllowlist,\n    popperConfig: null\n  };\n  const Event$2 = {\n    HIDE: `hide${EVENT_KEY$4}`,\n    HIDDEN: `hidden${EVENT_KEY$4}`,\n    SHOW: `show${EVENT_KEY$4}`,\n    SHOWN: `shown${EVENT_KEY$4}`,\n    INSERTED: `inserted${EVENT_KEY$4}`,\n    CLICK: `click${EVENT_KEY$4}`,\n    FOCUSIN: `focusin${EVENT_KEY$4}`,\n    FOCUSOUT: `focusout${EVENT_KEY$4}`,\n    MOUSEENTER: `mouseenter${EVENT_KEY$4}`,\n    MOUSELEAVE: `mouseleave${EVENT_KEY$4}`\n  };\n  const CLASS_NAME_FADE$3 = 'fade';\n  const CLASS_NAME_MODAL = 'modal';\n  const CLASS_NAME_SHOW$3 = 'show';\n  const HOVER_STATE_SHOW = 'show';\n  const HOVER_STATE_OUT = 'out';\n  const SELECTOR_TOOLTIP_INNER = '.tooltip-inner';\n  const TRIGGER_HOVER = 'hover';\n  const TRIGGER_FOCUS = 'focus';\n  const TRIGGER_CLICK = 'click';\n  const TRIGGER_MANUAL = 'manual';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Tooltip extends BaseComponent {\n    constructor(element, config) {\n      if (typeof Popper === 'undefined') {\n        throw new TypeError('Bootstrap\\'s tooltips require Popper (https://popper.js.org)');\n      }\n\n      super(element); // private\n\n      this._isEnabled = true;\n      this._timeout = 0;\n      this._hoverState = '';\n      this._activeTrigger = {};\n      this._popper = null; // Protected\n\n      this._config = this._getConfig(config);\n      this.tip = null;\n\n      this._setListeners();\n    } // Getters\n\n\n    static get Default() {\n      return Default$3;\n    }\n\n    static get NAME() {\n      return NAME$4;\n    }\n\n    static get Event() {\n      return Event$2;\n    }\n\n    static get DefaultType() {\n      return DefaultType$3;\n    } // Public\n\n\n    enable() {\n      this._isEnabled = true;\n    }\n\n    disable() {\n      this._isEnabled = false;\n    }\n\n    toggleEnabled() {\n      this._isEnabled = !this._isEnabled;\n    }\n\n    toggle(event) {\n      if (!this._isEnabled) {\n        return;\n      }\n\n      if (event) {\n        const context = this._initializeOnDelegatedTarget(event);\n\n        context._activeTrigger.click = !context._activeTrigger.click;\n\n        if (context._isWithActiveTrigger()) {\n          context._enter(null, context);\n        } else {\n          context._leave(null, context);\n        }\n      } else {\n        if (this.getTipElement().classList.contains(CLASS_NAME_SHOW$3)) {\n          this._leave(null, this);\n\n          return;\n        }\n\n        this._enter(null, this);\n      }\n    }\n\n    dispose() {\n      clearTimeout(this._timeout);\n      EventHandler.off(this._element.closest(`.${CLASS_NAME_MODAL}`), 'hide.bs.modal', this._hideModalHandler);\n\n      if (this.tip) {\n        this.tip.remove();\n      }\n\n      if (this._popper) {\n        this._popper.destroy();\n      }\n\n      super.dispose();\n    }\n\n    show() {\n      if (this._element.style.display === 'none') {\n        throw new Error('Please use show on visible elements');\n      }\n\n      if (!(this.isWithContent() && this._isEnabled)) {\n        return;\n      }\n\n      const showEvent = EventHandler.trigger(this._element, this.constructor.Event.SHOW);\n      const shadowRoot = findShadowRoot(this._element);\n      const isInTheDom = shadowRoot === null ? this._element.ownerDocument.documentElement.contains(this._element) : shadowRoot.contains(this._element);\n\n      if (showEvent.defaultPrevented || !isInTheDom) {\n        return;\n      }\n\n      const tip = this.getTipElement();\n      const tipId = getUID(this.constructor.NAME);\n      tip.setAttribute('id', tipId);\n\n      this._element.setAttribute('aria-describedby', tipId);\n\n      this.setContent();\n\n      if (this._config.animation) {\n        tip.classList.add(CLASS_NAME_FADE$3);\n      }\n\n      const placement = typeof this._config.placement === 'function' ? this._config.placement.call(this, tip, this._element) : this._config.placement;\n\n      const attachment = this._getAttachment(placement);\n\n      this._addAttachmentClass(attachment);\n\n      const {\n        container\n      } = this._config;\n      Data.set(tip, this.constructor.DATA_KEY, this);\n\n      if (!this._element.ownerDocument.documentElement.contains(this.tip)) {\n        container.appendChild(tip);\n        EventHandler.trigger(this._element, this.constructor.Event.INSERTED);\n      }\n\n      if (this._popper) {\n        this._popper.update();\n      } else {\n        this._popper = createPopper(this._element, tip, this._getPopperConfig(attachment));\n      }\n\n      tip.classList.add(CLASS_NAME_SHOW$3);\n      const customClass = typeof this._config.customClass === 'function' ? this._config.customClass() : this._config.customClass;\n\n      if (customClass) {\n        tip.classList.add(...customClass.split(' '));\n      } // If this is a touch-enabled device we add extra\n      // empty mouseover listeners to the body's immediate children;\n      // only needed because of broken event delegation on iOS\n      // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n\n\n      if ('ontouchstart' in document.documentElement) {\n        [].concat(...document.body.children).forEach(element => {\n          EventHandler.on(element, 'mouseover', noop);\n        });\n      }\n\n      const complete = () => {\n        const prevHoverState = this._hoverState;\n        this._hoverState = null;\n        EventHandler.trigger(this._element, this.constructor.Event.SHOWN);\n\n        if (prevHoverState === HOVER_STATE_OUT) {\n          this._leave(null, this);\n        }\n      };\n\n      const isAnimated = this.tip.classList.contains(CLASS_NAME_FADE$3);\n\n      this._queueCallback(complete, this.tip, isAnimated);\n    }\n\n    hide() {\n      if (!this._popper) {\n        return;\n      }\n\n      const tip = this.getTipElement();\n\n      const complete = () => {\n        if (this._isWithActiveTrigger()) {\n          return;\n        }\n\n        if (this._hoverState !== HOVER_STATE_SHOW) {\n          tip.remove();\n        }\n\n        this._cleanTipClass();\n\n        this._element.removeAttribute('aria-describedby');\n\n        EventHandler.trigger(this._element, this.constructor.Event.HIDDEN);\n\n        if (this._popper) {\n          this._popper.destroy();\n\n          this._popper = null;\n        }\n      };\n\n      const hideEvent = EventHandler.trigger(this._element, this.constructor.Event.HIDE);\n\n      if (hideEvent.defaultPrevented) {\n        return;\n      }\n\n      tip.classList.remove(CLASS_NAME_SHOW$3); // If this is a touch-enabled device we remove the extra\n      // empty mouseover listeners we added for iOS support\n\n      if ('ontouchstart' in document.documentElement) {\n        [].concat(...document.body.children).forEach(element => EventHandler.off(element, 'mouseover', noop));\n      }\n\n      this._activeTrigger[TRIGGER_CLICK] = false;\n      this._activeTrigger[TRIGGER_FOCUS] = false;\n      this._activeTrigger[TRIGGER_HOVER] = false;\n      const isAnimated = this.tip.classList.contains(CLASS_NAME_FADE$3);\n\n      this._queueCallback(complete, this.tip, isAnimated);\n\n      this._hoverState = '';\n    }\n\n    update() {\n      if (this._popper !== null) {\n        this._popper.update();\n      }\n    } // Protected\n\n\n    isWithContent() {\n      return Boolean(this.getTitle());\n    }\n\n    getTipElement() {\n      if (this.tip) {\n        return this.tip;\n      }\n\n      const element = document.createElement('div');\n      element.innerHTML = this._config.template;\n      this.tip = element.children[0];\n      return this.tip;\n    }\n\n    setContent() {\n      const tip = this.getTipElement();\n      this.setElementContent(SelectorEngine.findOne(SELECTOR_TOOLTIP_INNER, tip), this.getTitle());\n      tip.classList.remove(CLASS_NAME_FADE$3, CLASS_NAME_SHOW$3);\n    }\n\n    setElementContent(element, content) {\n      if (element === null) {\n        return;\n      }\n\n      if (isElement$1(content)) {\n        content = getElement(content); // content is a DOM node or a jQuery\n\n        if (this._config.html) {\n          if (content.parentNode !== element) {\n            element.innerHTML = '';\n            element.appendChild(content);\n          }\n        } else {\n          element.textContent = content.textContent;\n        }\n\n        return;\n      }\n\n      if (this._config.html) {\n        if (this._config.sanitize) {\n          content = sanitizeHtml(content, this._config.allowList, this._config.sanitizeFn);\n        }\n\n        element.innerHTML = content;\n      } else {\n        element.textContent = content;\n      }\n    }\n\n    getTitle() {\n      let title = this._element.getAttribute('data-bs-original-title');\n\n      if (!title) {\n        title = typeof this._config.title === 'function' ? this._config.title.call(this._element) : this._config.title;\n      }\n\n      return title;\n    }\n\n    updateAttachment(attachment) {\n      if (attachment === 'right') {\n        return 'end';\n      }\n\n      if (attachment === 'left') {\n        return 'start';\n      }\n\n      return attachment;\n    } // Private\n\n\n    _initializeOnDelegatedTarget(event, context) {\n      const dataKey = this.constructor.DATA_KEY;\n      context = context || Data.get(event.delegateTarget, dataKey);\n\n      if (!context) {\n        context = new this.constructor(event.delegateTarget, this._getDelegateConfig());\n        Data.set(event.delegateTarget, dataKey, context);\n      }\n\n      return context;\n    }\n\n    _getOffset() {\n      const {\n        offset\n      } = this._config;\n\n      if (typeof offset === 'string') {\n        return offset.split(',').map(val => Number.parseInt(val, 10));\n      }\n\n      if (typeof offset === 'function') {\n        return popperData => offset(popperData, this._element);\n      }\n\n      return offset;\n    }\n\n    _getPopperConfig(attachment) {\n      const defaultBsPopperConfig = {\n        placement: attachment,\n        modifiers: [{\n          name: 'flip',\n          options: {\n            fallbackPlacements: this._config.fallbackPlacements\n          }\n        }, {\n          name: 'offset',\n          options: {\n            offset: this._getOffset()\n          }\n        }, {\n          name: 'preventOverflow',\n          options: {\n            boundary: this._config.boundary\n          }\n        }, {\n          name: 'arrow',\n          options: {\n            element: `.${this.constructor.NAME}-arrow`\n          }\n        }, {\n          name: 'onChange',\n          enabled: true,\n          phase: 'afterWrite',\n          fn: data => this._handlePopperPlacementChange(data)\n        }],\n        onFirstUpdate: data => {\n          if (data.options.placement !== data.placement) {\n            this._handlePopperPlacementChange(data);\n          }\n        }\n      };\n      return { ...defaultBsPopperConfig,\n        ...(typeof this._config.popperConfig === 'function' ? this._config.popperConfig(defaultBsPopperConfig) : this._config.popperConfig)\n      };\n    }\n\n    _addAttachmentClass(attachment) {\n      this.getTipElement().classList.add(`${CLASS_PREFIX$1}-${this.updateAttachment(attachment)}`);\n    }\n\n    _getAttachment(placement) {\n      return AttachmentMap[placement.toUpperCase()];\n    }\n\n    _setListeners() {\n      const triggers = this._config.trigger.split(' ');\n\n      triggers.forEach(trigger => {\n        if (trigger === 'click') {\n          EventHandler.on(this._element, this.constructor.Event.CLICK, this._config.selector, event => this.toggle(event));\n        } else if (trigger !== TRIGGER_MANUAL) {\n          const eventIn = trigger === TRIGGER_HOVER ? this.constructor.Event.MOUSEENTER : this.constructor.Event.FOCUSIN;\n          const eventOut = trigger === TRIGGER_HOVER ? this.constructor.Event.MOUSELEAVE : this.constructor.Event.FOCUSOUT;\n          EventHandler.on(this._element, eventIn, this._config.selector, event => this._enter(event));\n          EventHandler.on(this._element, eventOut, this._config.selector, event => this._leave(event));\n        }\n      });\n\n      this._hideModalHandler = () => {\n        if (this._element) {\n          this.hide();\n        }\n      };\n\n      EventHandler.on(this._element.closest(`.${CLASS_NAME_MODAL}`), 'hide.bs.modal', this._hideModalHandler);\n\n      if (this._config.selector) {\n        this._config = { ...this._config,\n          trigger: 'manual',\n          selector: ''\n        };\n      } else {\n        this._fixTitle();\n      }\n    }\n\n    _fixTitle() {\n      const title = this._element.getAttribute('title');\n\n      const originalTitleType = typeof this._element.getAttribute('data-bs-original-title');\n\n      if (title || originalTitleType !== 'string') {\n        this._element.setAttribute('data-bs-original-title', title || '');\n\n        if (title && !this._element.getAttribute('aria-label') && !this._element.textContent) {\n          this._element.setAttribute('aria-label', title);\n        }\n\n        this._element.setAttribute('title', '');\n      }\n    }\n\n    _enter(event, context) {\n      context = this._initializeOnDelegatedTarget(event, context);\n\n      if (event) {\n        context._activeTrigger[event.type === 'focusin' ? TRIGGER_FOCUS : TRIGGER_HOVER] = true;\n      }\n\n      if (context.getTipElement().classList.contains(CLASS_NAME_SHOW$3) || context._hoverState === HOVER_STATE_SHOW) {\n        context._hoverState = HOVER_STATE_SHOW;\n        return;\n      }\n\n      clearTimeout(context._timeout);\n      context._hoverState = HOVER_STATE_SHOW;\n\n      if (!context._config.delay || !context._config.delay.show) {\n        context.show();\n        return;\n      }\n\n      context._timeout = setTimeout(() => {\n        if (context._hoverState === HOVER_STATE_SHOW) {\n          context.show();\n        }\n      }, context._config.delay.show);\n    }\n\n    _leave(event, context) {\n      context = this._initializeOnDelegatedTarget(event, context);\n\n      if (event) {\n        context._activeTrigger[event.type === 'focusout' ? TRIGGER_FOCUS : TRIGGER_HOVER] = context._element.contains(event.relatedTarget);\n      }\n\n      if (context._isWithActiveTrigger()) {\n        return;\n      }\n\n      clearTimeout(context._timeout);\n      context._hoverState = HOVER_STATE_OUT;\n\n      if (!context._config.delay || !context._config.delay.hide) {\n        context.hide();\n        return;\n      }\n\n      context._timeout = setTimeout(() => {\n        if (context._hoverState === HOVER_STATE_OUT) {\n          context.hide();\n        }\n      }, context._config.delay.hide);\n    }\n\n    _isWithActiveTrigger() {\n      for (const trigger in this._activeTrigger) {\n        if (this._activeTrigger[trigger]) {\n          return true;\n        }\n      }\n\n      return false;\n    }\n\n    _getConfig(config) {\n      const dataAttributes = Manipulator.getDataAttributes(this._element);\n      Object.keys(dataAttributes).forEach(dataAttr => {\n        if (DISALLOWED_ATTRIBUTES.has(dataAttr)) {\n          delete dataAttributes[dataAttr];\n        }\n      });\n      config = { ...this.constructor.Default,\n        ...dataAttributes,\n        ...(typeof config === 'object' && config ? config : {})\n      };\n      config.container = config.container === false ? document.body : getElement(config.container);\n\n      if (typeof config.delay === 'number') {\n        config.delay = {\n          show: config.delay,\n          hide: config.delay\n        };\n      }\n\n      if (typeof config.title === 'number') {\n        config.title = config.title.toString();\n      }\n\n      if (typeof config.content === 'number') {\n        config.content = config.content.toString();\n      }\n\n      typeCheckConfig(NAME$4, config, this.constructor.DefaultType);\n\n      if (config.sanitize) {\n        config.template = sanitizeHtml(config.template, config.allowList, config.sanitizeFn);\n      }\n\n      return config;\n    }\n\n    _getDelegateConfig() {\n      const config = {};\n\n      if (this._config) {\n        for (const key in this._config) {\n          if (this.constructor.Default[key] !== this._config[key]) {\n            config[key] = this._config[key];\n          }\n        }\n      }\n\n      return config;\n    }\n\n    _cleanTipClass() {\n      const tip = this.getTipElement();\n      const tabClass = tip.getAttribute('class').match(BSCLS_PREFIX_REGEX$1);\n\n      if (tabClass !== null && tabClass.length > 0) {\n        tabClass.map(token => token.trim()).forEach(tClass => tip.classList.remove(tClass));\n      }\n    }\n\n    _handlePopperPlacementChange(popperData) {\n      const {\n        state\n      } = popperData;\n\n      if (!state) {\n        return;\n      }\n\n      this.tip = state.elements.popper;\n\n      this._cleanTipClass();\n\n      this._addAttachmentClass(this._getAttachment(state.placement));\n    } // Static\n\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = Tooltip.getOrCreateInstance(this, config);\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(`No method named \"${config}\"`);\n          }\n\n          data[config]();\n        }\n      });\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Tooltip to jQuery only if jQuery is present\n   */\n\n\n  defineJQueryPlugin(Tooltip);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): popover.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$3 = 'popover';\n  const DATA_KEY$3 = 'bs.popover';\n  const EVENT_KEY$3 = `.${DATA_KEY$3}`;\n  const CLASS_PREFIX = 'bs-popover';\n  const BSCLS_PREFIX_REGEX = new RegExp(`(^|\\\\s)${CLASS_PREFIX}\\\\S+`, 'g');\n  const Default$2 = { ...Tooltip.Default,\n    placement: 'right',\n    offset: [0, 8],\n    trigger: 'click',\n    content: '',\n    template: '<div class=\"popover\" role=\"tooltip\">' + '<div class=\"popover-arrow\"></div>' + '<h3 class=\"popover-header\"></h3>' + '<div class=\"popover-body\"></div>' + '</div>'\n  };\n  const DefaultType$2 = { ...Tooltip.DefaultType,\n    content: '(string|element|function)'\n  };\n  const Event$1 = {\n    HIDE: `hide${EVENT_KEY$3}`,\n    HIDDEN: `hidden${EVENT_KEY$3}`,\n    SHOW: `show${EVENT_KEY$3}`,\n    SHOWN: `shown${EVENT_KEY$3}`,\n    INSERTED: `inserted${EVENT_KEY$3}`,\n    CLICK: `click${EVENT_KEY$3}`,\n    FOCUSIN: `focusin${EVENT_KEY$3}`,\n    FOCUSOUT: `focusout${EVENT_KEY$3}`,\n    MOUSEENTER: `mouseenter${EVENT_KEY$3}`,\n    MOUSELEAVE: `mouseleave${EVENT_KEY$3}`\n  };\n  const CLASS_NAME_FADE$2 = 'fade';\n  const CLASS_NAME_SHOW$2 = 'show';\n  const SELECTOR_TITLE = '.popover-header';\n  const SELECTOR_CONTENT = '.popover-body';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Popover extends Tooltip {\n    // Getters\n    static get Default() {\n      return Default$2;\n    }\n\n    static get NAME() {\n      return NAME$3;\n    }\n\n    static get Event() {\n      return Event$1;\n    }\n\n    static get DefaultType() {\n      return DefaultType$2;\n    } // Overrides\n\n\n    isWithContent() {\n      return this.getTitle() || this._getContent();\n    }\n\n    getTipElement() {\n      if (this.tip) {\n        return this.tip;\n      }\n\n      this.tip = super.getTipElement();\n\n      if (!this.getTitle()) {\n        SelectorEngine.findOne(SELECTOR_TITLE, this.tip).remove();\n      }\n\n      if (!this._getContent()) {\n        SelectorEngine.findOne(SELECTOR_CONTENT, this.tip).remove();\n      }\n\n      return this.tip;\n    }\n\n    setContent() {\n      const tip = this.getTipElement(); // we use append for html objects to maintain js events\n\n      this.setElementContent(SelectorEngine.findOne(SELECTOR_TITLE, tip), this.getTitle());\n\n      let content = this._getContent();\n\n      if (typeof content === 'function') {\n        content = content.call(this._element);\n      }\n\n      this.setElementContent(SelectorEngine.findOne(SELECTOR_CONTENT, tip), content);\n      tip.classList.remove(CLASS_NAME_FADE$2, CLASS_NAME_SHOW$2);\n    } // Private\n\n\n    _addAttachmentClass(attachment) {\n      this.getTipElement().classList.add(`${CLASS_PREFIX}-${this.updateAttachment(attachment)}`);\n    }\n\n    _getContent() {\n      return this._element.getAttribute('data-bs-content') || this._config.content;\n    }\n\n    _cleanTipClass() {\n      const tip = this.getTipElement();\n      const tabClass = tip.getAttribute('class').match(BSCLS_PREFIX_REGEX);\n\n      if (tabClass !== null && tabClass.length > 0) {\n        tabClass.map(token => token.trim()).forEach(tClass => tip.classList.remove(tClass));\n      }\n    } // Static\n\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = Popover.getOrCreateInstance(this, config);\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(`No method named \"${config}\"`);\n          }\n\n          data[config]();\n        }\n      });\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Popover to jQuery only if jQuery is present\n   */\n\n\n  defineJQueryPlugin(Popover);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): scrollspy.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$2 = 'scrollspy';\n  const DATA_KEY$2 = 'bs.scrollspy';\n  const EVENT_KEY$2 = `.${DATA_KEY$2}`;\n  const DATA_API_KEY$1 = '.data-api';\n  const Default$1 = {\n    offset: 10,\n    method: 'auto',\n    target: ''\n  };\n  const DefaultType$1 = {\n    offset: 'number',\n    method: 'string',\n    target: '(string|element)'\n  };\n  const EVENT_ACTIVATE = `activate${EVENT_KEY$2}`;\n  const EVENT_SCROLL = `scroll${EVENT_KEY$2}`;\n  const EVENT_LOAD_DATA_API = `load${EVENT_KEY$2}${DATA_API_KEY$1}`;\n  const CLASS_NAME_DROPDOWN_ITEM = 'dropdown-item';\n  const CLASS_NAME_ACTIVE$1 = 'active';\n  const SELECTOR_DATA_SPY = '[data-bs-spy=\"scroll\"]';\n  const SELECTOR_NAV_LIST_GROUP$1 = '.nav, .list-group';\n  const SELECTOR_NAV_LINKS = '.nav-link';\n  const SELECTOR_NAV_ITEMS = '.nav-item';\n  const SELECTOR_LIST_ITEMS = '.list-group-item';\n  const SELECTOR_DROPDOWN$1 = '.dropdown';\n  const SELECTOR_DROPDOWN_TOGGLE$1 = '.dropdown-toggle';\n  const METHOD_OFFSET = 'offset';\n  const METHOD_POSITION = 'position';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class ScrollSpy extends BaseComponent {\n    constructor(element, config) {\n      super(element);\n      this._scrollElement = this._element.tagName === 'BODY' ? window : this._element;\n      this._config = this._getConfig(config);\n      this._selector = `${this._config.target} ${SELECTOR_NAV_LINKS}, ${this._config.target} ${SELECTOR_LIST_ITEMS}, ${this._config.target} .${CLASS_NAME_DROPDOWN_ITEM}`;\n      this._offsets = [];\n      this._targets = [];\n      this._activeTarget = null;\n      this._scrollHeight = 0;\n      EventHandler.on(this._scrollElement, EVENT_SCROLL, () => this._process());\n      this.refresh();\n\n      this._process();\n    } // Getters\n\n\n    static get Default() {\n      return Default$1;\n    }\n\n    static get NAME() {\n      return NAME$2;\n    } // Public\n\n\n    refresh() {\n      const autoMethod = this._scrollElement === this._scrollElement.window ? METHOD_OFFSET : METHOD_POSITION;\n      const offsetMethod = this._config.method === 'auto' ? autoMethod : this._config.method;\n      const offsetBase = offsetMethod === METHOD_POSITION ? this._getScrollTop() : 0;\n      this._offsets = [];\n      this._targets = [];\n      this._scrollHeight = this._getScrollHeight();\n      const targets = SelectorEngine.find(this._selector);\n      targets.map(element => {\n        const targetSelector = getSelectorFromElement(element);\n        const target = targetSelector ? SelectorEngine.findOne(targetSelector) : null;\n\n        if (target) {\n          const targetBCR = target.getBoundingClientRect();\n\n          if (targetBCR.width || targetBCR.height) {\n            return [Manipulator[offsetMethod](target).top + offsetBase, targetSelector];\n          }\n        }\n\n        return null;\n      }).filter(item => item).sort((a, b) => a[0] - b[0]).forEach(item => {\n        this._offsets.push(item[0]);\n\n        this._targets.push(item[1]);\n      });\n    }\n\n    dispose() {\n      EventHandler.off(this._scrollElement, EVENT_KEY$2);\n      super.dispose();\n    } // Private\n\n\n    _getConfig(config) {\n      config = { ...Default$1,\n        ...Manipulator.getDataAttributes(this._element),\n        ...(typeof config === 'object' && config ? config : {})\n      };\n\n      if (typeof config.target !== 'string' && isElement$1(config.target)) {\n        let {\n          id\n        } = config.target;\n\n        if (!id) {\n          id = getUID(NAME$2);\n          config.target.id = id;\n        }\n\n        config.target = `#${id}`;\n      }\n\n      typeCheckConfig(NAME$2, config, DefaultType$1);\n      return config;\n    }\n\n    _getScrollTop() {\n      return this._scrollElement === window ? this._scrollElement.pageYOffset : this._scrollElement.scrollTop;\n    }\n\n    _getScrollHeight() {\n      return this._scrollElement.scrollHeight || Math.max(document.body.scrollHeight, document.documentElement.scrollHeight);\n    }\n\n    _getOffsetHeight() {\n      return this._scrollElement === window ? window.innerHeight : this._scrollElement.getBoundingClientRect().height;\n    }\n\n    _process() {\n      const scrollTop = this._getScrollTop() + this._config.offset;\n\n      const scrollHeight = this._getScrollHeight();\n\n      const maxScroll = this._config.offset + scrollHeight - this._getOffsetHeight();\n\n      if (this._scrollHeight !== scrollHeight) {\n        this.refresh();\n      }\n\n      if (scrollTop >= maxScroll) {\n        const target = this._targets[this._targets.length - 1];\n\n        if (this._activeTarget !== target) {\n          this._activate(target);\n        }\n\n        return;\n      }\n\n      if (this._activeTarget && scrollTop < this._offsets[0] && this._offsets[0] > 0) {\n        this._activeTarget = null;\n\n        this._clear();\n\n        return;\n      }\n\n      for (let i = this._offsets.length; i--;) {\n        const isActiveTarget = this._activeTarget !== this._targets[i] && scrollTop >= this._offsets[i] && (typeof this._offsets[i + 1] === 'undefined' || scrollTop < this._offsets[i + 1]);\n\n        if (isActiveTarget) {\n          this._activate(this._targets[i]);\n        }\n      }\n    }\n\n    _activate(target) {\n      this._activeTarget = target;\n\n      this._clear();\n\n      const queries = this._selector.split(',').map(selector => `${selector}[data-bs-target=\"${target}\"],${selector}[href=\"${target}\"]`);\n\n      const link = SelectorEngine.findOne(queries.join(','));\n\n      if (link.classList.contains(CLASS_NAME_DROPDOWN_ITEM)) {\n        SelectorEngine.findOne(SELECTOR_DROPDOWN_TOGGLE$1, link.closest(SELECTOR_DROPDOWN$1)).classList.add(CLASS_NAME_ACTIVE$1);\n        link.classList.add(CLASS_NAME_ACTIVE$1);\n      } else {\n        // Set triggered link as active\n        link.classList.add(CLASS_NAME_ACTIVE$1);\n        SelectorEngine.parents(link, SELECTOR_NAV_LIST_GROUP$1).forEach(listGroup => {\n          // Set triggered links parents as active\n          // With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor\n          SelectorEngine.prev(listGroup, `${SELECTOR_NAV_LINKS}, ${SELECTOR_LIST_ITEMS}`).forEach(item => item.classList.add(CLASS_NAME_ACTIVE$1)); // Handle special case when .nav-link is inside .nav-item\n\n          SelectorEngine.prev(listGroup, SELECTOR_NAV_ITEMS).forEach(navItem => {\n            SelectorEngine.children(navItem, SELECTOR_NAV_LINKS).forEach(item => item.classList.add(CLASS_NAME_ACTIVE$1));\n          });\n        });\n      }\n\n      EventHandler.trigger(this._scrollElement, EVENT_ACTIVATE, {\n        relatedTarget: target\n      });\n    }\n\n    _clear() {\n      SelectorEngine.find(this._selector).filter(node => node.classList.contains(CLASS_NAME_ACTIVE$1)).forEach(node => node.classList.remove(CLASS_NAME_ACTIVE$1));\n    } // Static\n\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = ScrollSpy.getOrCreateInstance(this, config);\n\n        if (typeof config !== 'string') {\n          return;\n        }\n\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config]();\n      });\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n    SelectorEngine.find(SELECTOR_DATA_SPY).forEach(spy => new ScrollSpy(spy));\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .ScrollSpy to jQuery only if jQuery is present\n   */\n\n  defineJQueryPlugin(ScrollSpy);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): tab.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$1 = 'tab';\n  const DATA_KEY$1 = 'bs.tab';\n  const EVENT_KEY$1 = `.${DATA_KEY$1}`;\n  const DATA_API_KEY = '.data-api';\n  const EVENT_HIDE$1 = `hide${EVENT_KEY$1}`;\n  const EVENT_HIDDEN$1 = `hidden${EVENT_KEY$1}`;\n  const EVENT_SHOW$1 = `show${EVENT_KEY$1}`;\n  const EVENT_SHOWN$1 = `shown${EVENT_KEY$1}`;\n  const EVENT_CLICK_DATA_API = `click${EVENT_KEY$1}${DATA_API_KEY}`;\n  const CLASS_NAME_DROPDOWN_MENU = 'dropdown-menu';\n  const CLASS_NAME_ACTIVE = 'active';\n  const CLASS_NAME_FADE$1 = 'fade';\n  const CLASS_NAME_SHOW$1 = 'show';\n  const SELECTOR_DROPDOWN = '.dropdown';\n  const SELECTOR_NAV_LIST_GROUP = '.nav, .list-group';\n  const SELECTOR_ACTIVE = '.active';\n  const SELECTOR_ACTIVE_UL = ':scope > li > .active';\n  const SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"tab\"], [data-bs-toggle=\"pill\"], [data-bs-toggle=\"list\"]';\n  const SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle';\n  const SELECTOR_DROPDOWN_ACTIVE_CHILD = ':scope > .dropdown-menu .active';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Tab extends BaseComponent {\n    // Getters\n    static get NAME() {\n      return NAME$1;\n    } // Public\n\n\n    show() {\n      if (this._element.parentNode && this._element.parentNode.nodeType === Node.ELEMENT_NODE && this._element.classList.contains(CLASS_NAME_ACTIVE)) {\n        return;\n      }\n\n      let previous;\n      const target = getElementFromSelector(this._element);\n\n      const listElement = this._element.closest(SELECTOR_NAV_LIST_GROUP);\n\n      if (listElement) {\n        const itemSelector = listElement.nodeName === 'UL' || listElement.nodeName === 'OL' ? SELECTOR_ACTIVE_UL : SELECTOR_ACTIVE;\n        previous = SelectorEngine.find(itemSelector, listElement);\n        previous = previous[previous.length - 1];\n      }\n\n      const hideEvent = previous ? EventHandler.trigger(previous, EVENT_HIDE$1, {\n        relatedTarget: this._element\n      }) : null;\n      const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$1, {\n        relatedTarget: previous\n      });\n\n      if (showEvent.defaultPrevented || hideEvent !== null && hideEvent.defaultPrevented) {\n        return;\n      }\n\n      this._activate(this._element, listElement);\n\n      const complete = () => {\n        EventHandler.trigger(previous, EVENT_HIDDEN$1, {\n          relatedTarget: this._element\n        });\n        EventHandler.trigger(this._element, EVENT_SHOWN$1, {\n          relatedTarget: previous\n        });\n      };\n\n      if (target) {\n        this._activate(target, target.parentNode, complete);\n      } else {\n        complete();\n      }\n    } // Private\n\n\n    _activate(element, container, callback) {\n      const activeElements = container && (container.nodeName === 'UL' || container.nodeName === 'OL') ? SelectorEngine.find(SELECTOR_ACTIVE_UL, container) : SelectorEngine.children(container, SELECTOR_ACTIVE);\n      const active = activeElements[0];\n      const isTransitioning = callback && active && active.classList.contains(CLASS_NAME_FADE$1);\n\n      const complete = () => this._transitionComplete(element, active, callback);\n\n      if (active && isTransitioning) {\n        active.classList.remove(CLASS_NAME_SHOW$1);\n\n        this._queueCallback(complete, element, true);\n      } else {\n        complete();\n      }\n    }\n\n    _transitionComplete(element, active, callback) {\n      if (active) {\n        active.classList.remove(CLASS_NAME_ACTIVE);\n        const dropdownChild = SelectorEngine.findOne(SELECTOR_DROPDOWN_ACTIVE_CHILD, active.parentNode);\n\n        if (dropdownChild) {\n          dropdownChild.classList.remove(CLASS_NAME_ACTIVE);\n        }\n\n        if (active.getAttribute('role') === 'tab') {\n          active.setAttribute('aria-selected', false);\n        }\n      }\n\n      element.classList.add(CLASS_NAME_ACTIVE);\n\n      if (element.getAttribute('role') === 'tab') {\n        element.setAttribute('aria-selected', true);\n      }\n\n      reflow(element);\n\n      if (element.classList.contains(CLASS_NAME_FADE$1)) {\n        element.classList.add(CLASS_NAME_SHOW$1);\n      }\n\n      let parent = element.parentNode;\n\n      if (parent && parent.nodeName === 'LI') {\n        parent = parent.parentNode;\n      }\n\n      if (parent && parent.classList.contains(CLASS_NAME_DROPDOWN_MENU)) {\n        const dropdownElement = element.closest(SELECTOR_DROPDOWN);\n\n        if (dropdownElement) {\n          SelectorEngine.find(SELECTOR_DROPDOWN_TOGGLE, dropdownElement).forEach(dropdown => dropdown.classList.add(CLASS_NAME_ACTIVE));\n        }\n\n        element.setAttribute('aria-expanded', true);\n      }\n\n      if (callback) {\n        callback();\n      }\n    } // Static\n\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = Tab.getOrCreateInstance(this);\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(`No method named \"${config}\"`);\n          }\n\n          data[config]();\n        }\n      });\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n    if (['A', 'AREA'].includes(this.tagName)) {\n      event.preventDefault();\n    }\n\n    if (isDisabled(this)) {\n      return;\n    }\n\n    const data = Tab.getOrCreateInstance(this);\n    data.show();\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Tab to jQuery only if jQuery is present\n   */\n\n  defineJQueryPlugin(Tab);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): toast.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME = 'toast';\n  const DATA_KEY = 'bs.toast';\n  const EVENT_KEY = `.${DATA_KEY}`;\n  const EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY}`;\n  const EVENT_MOUSEOVER = `mouseover${EVENT_KEY}`;\n  const EVENT_MOUSEOUT = `mouseout${EVENT_KEY}`;\n  const EVENT_FOCUSIN = `focusin${EVENT_KEY}`;\n  const EVENT_FOCUSOUT = `focusout${EVENT_KEY}`;\n  const EVENT_HIDE = `hide${EVENT_KEY}`;\n  const EVENT_HIDDEN = `hidden${EVENT_KEY}`;\n  const EVENT_SHOW = `show${EVENT_KEY}`;\n  const EVENT_SHOWN = `shown${EVENT_KEY}`;\n  const CLASS_NAME_FADE = 'fade';\n  const CLASS_NAME_HIDE = 'hide';\n  const CLASS_NAME_SHOW = 'show';\n  const CLASS_NAME_SHOWING = 'showing';\n  const DefaultType = {\n    animation: 'boolean',\n    autohide: 'boolean',\n    delay: 'number'\n  };\n  const Default = {\n    animation: true,\n    autohide: true,\n    delay: 5000\n  };\n  const SELECTOR_DATA_DISMISS = '[data-bs-dismiss=\"toast\"]';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Toast extends BaseComponent {\n    constructor(element, config) {\n      super(element);\n      this._config = this._getConfig(config);\n      this._timeout = null;\n      this._hasMouseInteraction = false;\n      this._hasKeyboardInteraction = false;\n\n      this._setListeners();\n    } // Getters\n\n\n    static get DefaultType() {\n      return DefaultType;\n    }\n\n    static get Default() {\n      return Default;\n    }\n\n    static get NAME() {\n      return NAME;\n    } // Public\n\n\n    show() {\n      const showEvent = EventHandler.trigger(this._element, EVENT_SHOW);\n\n      if (showEvent.defaultPrevented) {\n        return;\n      }\n\n      this._clearTimeout();\n\n      if (this._config.animation) {\n        this._element.classList.add(CLASS_NAME_FADE);\n      }\n\n      const complete = () => {\n        this._element.classList.remove(CLASS_NAME_SHOWING);\n\n        this._element.classList.add(CLASS_NAME_SHOW);\n\n        EventHandler.trigger(this._element, EVENT_SHOWN);\n\n        this._maybeScheduleHide();\n      };\n\n      this._element.classList.remove(CLASS_NAME_HIDE);\n\n      reflow(this._element);\n\n      this._element.classList.add(CLASS_NAME_SHOWING);\n\n      this._queueCallback(complete, this._element, this._config.animation);\n    }\n\n    hide() {\n      if (!this._element.classList.contains(CLASS_NAME_SHOW)) {\n        return;\n      }\n\n      const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE);\n\n      if (hideEvent.defaultPrevented) {\n        return;\n      }\n\n      const complete = () => {\n        this._element.classList.add(CLASS_NAME_HIDE);\n\n        EventHandler.trigger(this._element, EVENT_HIDDEN);\n      };\n\n      this._element.classList.remove(CLASS_NAME_SHOW);\n\n      this._queueCallback(complete, this._element, this._config.animation);\n    }\n\n    dispose() {\n      this._clearTimeout();\n\n      if (this._element.classList.contains(CLASS_NAME_SHOW)) {\n        this._element.classList.remove(CLASS_NAME_SHOW);\n      }\n\n      super.dispose();\n    } // Private\n\n\n    _getConfig(config) {\n      config = { ...Default,\n        ...Manipulator.getDataAttributes(this._element),\n        ...(typeof config === 'object' && config ? config : {})\n      };\n      typeCheckConfig(NAME, config, this.constructor.DefaultType);\n      return config;\n    }\n\n    _maybeScheduleHide() {\n      if (!this._config.autohide) {\n        return;\n      }\n\n      if (this._hasMouseInteraction || this._hasKeyboardInteraction) {\n        return;\n      }\n\n      this._timeout = setTimeout(() => {\n        this.hide();\n      }, this._config.delay);\n    }\n\n    _onInteraction(event, isInteracting) {\n      switch (event.type) {\n        case 'mouseover':\n        case 'mouseout':\n          this._hasMouseInteraction = isInteracting;\n          break;\n\n        case 'focusin':\n        case 'focusout':\n          this._hasKeyboardInteraction = isInteracting;\n          break;\n      }\n\n      if (isInteracting) {\n        this._clearTimeout();\n\n        return;\n      }\n\n      const nextElement = event.relatedTarget;\n\n      if (this._element === nextElement || this._element.contains(nextElement)) {\n        return;\n      }\n\n      this._maybeScheduleHide();\n    }\n\n    _setListeners() {\n      EventHandler.on(this._element, EVENT_CLICK_DISMISS, SELECTOR_DATA_DISMISS, () => this.hide());\n      EventHandler.on(this._element, EVENT_MOUSEOVER, event => this._onInteraction(event, true));\n      EventHandler.on(this._element, EVENT_MOUSEOUT, event => this._onInteraction(event, false));\n      EventHandler.on(this._element, EVENT_FOCUSIN, event => this._onInteraction(event, true));\n      EventHandler.on(this._element, EVENT_FOCUSOUT, event => this._onInteraction(event, false));\n    }\n\n    _clearTimeout() {\n      clearTimeout(this._timeout);\n      this._timeout = null;\n    } // Static\n\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = Toast.getOrCreateInstance(this, config);\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(`No method named \"${config}\"`);\n          }\n\n          data[config](this);\n        }\n      });\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Toast to jQuery only if jQuery is present\n   */\n\n\n  defineJQueryPlugin(Toast);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): index.umd.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  var index_umd = {\n    Alert,\n    Button,\n    Carousel,\n    Collapse,\n    Dropdown,\n    Modal,\n    Offcanvas,\n    Popover,\n    ScrollSpy,\n    Tab,\n    Toast,\n    Tooltip\n  };\n\n  return index_umd;\n\n})));\n//# sourceMappingURL=bootstrap.bundle.js.map\n"
  },
  {
    "path": "src/sourceDev.WebApp/SharedThemes/darkly/wwwroot/js/bootstrap.esm.js",
    "content": "/*!\n  * Bootstrap v5.0.2 (https://getbootstrap.com/)\n  * Copyright 2011-2021 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)\n  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n  */\nimport * as Popper from '@popperjs/core';\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): dom/selector-engine.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\nconst NODE_TEXT = 3;\nconst SelectorEngine = {\n  find(selector, element = document.documentElement) {\n    return [].concat(...Element.prototype.querySelectorAll.call(element, selector));\n  },\n\n  findOne(selector, element = document.documentElement) {\n    return Element.prototype.querySelector.call(element, selector);\n  },\n\n  children(element, selector) {\n    return [].concat(...element.children).filter(child => child.matches(selector));\n  },\n\n  parents(element, selector) {\n    const parents = [];\n    let ancestor = element.parentNode;\n\n    while (ancestor && ancestor.nodeType === Node.ELEMENT_NODE && ancestor.nodeType !== NODE_TEXT) {\n      if (ancestor.matches(selector)) {\n        parents.push(ancestor);\n      }\n\n      ancestor = ancestor.parentNode;\n    }\n\n    return parents;\n  },\n\n  prev(element, selector) {\n    let previous = element.previousElementSibling;\n\n    while (previous) {\n      if (previous.matches(selector)) {\n        return [previous];\n      }\n\n      previous = previous.previousElementSibling;\n    }\n\n    return [];\n  },\n\n  next(element, selector) {\n    let next = element.nextElementSibling;\n\n    while (next) {\n      if (next.matches(selector)) {\n        return [next];\n      }\n\n      next = next.nextElementSibling;\n    }\n\n    return [];\n  }\n\n};\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): util/index.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst MAX_UID = 1000000;\nconst MILLISECONDS_MULTIPLIER = 1000;\nconst TRANSITION_END = 'transitionend'; // Shoutout AngusCroll (https://goo.gl/pxwQGp)\n\nconst toType = obj => {\n  if (obj === null || obj === undefined) {\n    return `${obj}`;\n  }\n\n  return {}.toString.call(obj).match(/\\s([a-z]+)/i)[1].toLowerCase();\n};\n/**\n * --------------------------------------------------------------------------\n * Public Util Api\n * --------------------------------------------------------------------------\n */\n\n\nconst getUID = prefix => {\n  do {\n    prefix += Math.floor(Math.random() * MAX_UID);\n  } while (document.getElementById(prefix));\n\n  return prefix;\n};\n\nconst getSelector = element => {\n  let selector = element.getAttribute('data-bs-target');\n\n  if (!selector || selector === '#') {\n    let hrefAttr = element.getAttribute('href'); // The only valid content that could double as a selector are IDs or classes,\n    // so everything starting with `#` or `.`. If a \"real\" URL is used as the selector,\n    // `document.querySelector` will rightfully complain it is invalid.\n    // See https://github.com/twbs/bootstrap/issues/32273\n\n    if (!hrefAttr || !hrefAttr.includes('#') && !hrefAttr.startsWith('.')) {\n      return null;\n    } // Just in case some CMS puts out a full URL with the anchor appended\n\n\n    if (hrefAttr.includes('#') && !hrefAttr.startsWith('#')) {\n      hrefAttr = `#${hrefAttr.split('#')[1]}`;\n    }\n\n    selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : null;\n  }\n\n  return selector;\n};\n\nconst getSelectorFromElement = element => {\n  const selector = getSelector(element);\n\n  if (selector) {\n    return document.querySelector(selector) ? selector : null;\n  }\n\n  return null;\n};\n\nconst getElementFromSelector = element => {\n  const selector = getSelector(element);\n  return selector ? document.querySelector(selector) : null;\n};\n\nconst getTransitionDurationFromElement = element => {\n  if (!element) {\n    return 0;\n  } // Get transition-duration of the element\n\n\n  let {\n    transitionDuration,\n    transitionDelay\n  } = window.getComputedStyle(element);\n  const floatTransitionDuration = Number.parseFloat(transitionDuration);\n  const floatTransitionDelay = Number.parseFloat(transitionDelay); // Return 0 if element or transition duration is not found\n\n  if (!floatTransitionDuration && !floatTransitionDelay) {\n    return 0;\n  } // If multiple durations are defined, take the first\n\n\n  transitionDuration = transitionDuration.split(',')[0];\n  transitionDelay = transitionDelay.split(',')[0];\n  return (Number.parseFloat(transitionDuration) + Number.parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER;\n};\n\nconst triggerTransitionEnd = element => {\n  element.dispatchEvent(new Event(TRANSITION_END));\n};\n\nconst isElement = obj => {\n  if (!obj || typeof obj !== 'object') {\n    return false;\n  }\n\n  if (typeof obj.jquery !== 'undefined') {\n    obj = obj[0];\n  }\n\n  return typeof obj.nodeType !== 'undefined';\n};\n\nconst getElement = obj => {\n  if (isElement(obj)) {\n    // it's a jQuery object or a node element\n    return obj.jquery ? obj[0] : obj;\n  }\n\n  if (typeof obj === 'string' && obj.length > 0) {\n    return SelectorEngine.findOne(obj);\n  }\n\n  return null;\n};\n\nconst typeCheckConfig = (componentName, config, configTypes) => {\n  Object.keys(configTypes).forEach(property => {\n    const expectedTypes = configTypes[property];\n    const value = config[property];\n    const valueType = value && isElement(value) ? 'element' : toType(value);\n\n    if (!new RegExp(expectedTypes).test(valueType)) {\n      throw new TypeError(`${componentName.toUpperCase()}: Option \"${property}\" provided type \"${valueType}\" but expected type \"${expectedTypes}\".`);\n    }\n  });\n};\n\nconst isVisible = element => {\n  if (!isElement(element) || element.getClientRects().length === 0) {\n    return false;\n  }\n\n  return getComputedStyle(element).getPropertyValue('visibility') === 'visible';\n};\n\nconst isDisabled = element => {\n  if (!element || element.nodeType !== Node.ELEMENT_NODE) {\n    return true;\n  }\n\n  if (element.classList.contains('disabled')) {\n    return true;\n  }\n\n  if (typeof element.disabled !== 'undefined') {\n    return element.disabled;\n  }\n\n  return element.hasAttribute('disabled') && element.getAttribute('disabled') !== 'false';\n};\n\nconst findShadowRoot = element => {\n  if (!document.documentElement.attachShadow) {\n    return null;\n  } // Can find the shadow root otherwise it'll return the document\n\n\n  if (typeof element.getRootNode === 'function') {\n    const root = element.getRootNode();\n    return root instanceof ShadowRoot ? root : null;\n  }\n\n  if (element instanceof ShadowRoot) {\n    return element;\n  } // when we don't find a shadow root\n\n\n  if (!element.parentNode) {\n    return null;\n  }\n\n  return findShadowRoot(element.parentNode);\n};\n\nconst noop = () => {};\n\nconst reflow = element => element.offsetHeight;\n\nconst getjQuery = () => {\n  const {\n    jQuery\n  } = window;\n\n  if (jQuery && !document.body.hasAttribute('data-bs-no-jquery')) {\n    return jQuery;\n  }\n\n  return null;\n};\n\nconst DOMContentLoadedCallbacks = [];\n\nconst onDOMContentLoaded = callback => {\n  if (document.readyState === 'loading') {\n    // add listener on the first call when the document is in loading state\n    if (!DOMContentLoadedCallbacks.length) {\n      document.addEventListener('DOMContentLoaded', () => {\n        DOMContentLoadedCallbacks.forEach(callback => callback());\n      });\n    }\n\n    DOMContentLoadedCallbacks.push(callback);\n  } else {\n    callback();\n  }\n};\n\nconst isRTL = () => document.documentElement.dir === 'rtl';\n\nconst defineJQueryPlugin = plugin => {\n  onDOMContentLoaded(() => {\n    const $ = getjQuery();\n    /* istanbul ignore if */\n\n    if ($) {\n      const name = plugin.NAME;\n      const JQUERY_NO_CONFLICT = $.fn[name];\n      $.fn[name] = plugin.jQueryInterface;\n      $.fn[name].Constructor = plugin;\n\n      $.fn[name].noConflict = () => {\n        $.fn[name] = JQUERY_NO_CONFLICT;\n        return plugin.jQueryInterface;\n      };\n    }\n  });\n};\n\nconst execute = callback => {\n  if (typeof callback === 'function') {\n    callback();\n  }\n};\n\nconst executeAfterTransition = (callback, transitionElement, waitForTransition = true) => {\n  if (!waitForTransition) {\n    execute(callback);\n    return;\n  }\n\n  const durationPadding = 5;\n  const emulatedDuration = getTransitionDurationFromElement(transitionElement) + durationPadding;\n  let called = false;\n\n  const handler = ({\n    target\n  }) => {\n    if (target !== transitionElement) {\n      return;\n    }\n\n    called = true;\n    transitionElement.removeEventListener(TRANSITION_END, handler);\n    execute(callback);\n  };\n\n  transitionElement.addEventListener(TRANSITION_END, handler);\n  setTimeout(() => {\n    if (!called) {\n      triggerTransitionEnd(transitionElement);\n    }\n  }, emulatedDuration);\n};\n/**\n * Return the previous/next element of a list.\n *\n * @param {array} list    The list of elements\n * @param activeElement   The active element\n * @param shouldGetNext   Choose to get next or previous element\n * @param isCycleAllowed\n * @return {Element|elem} The proper element\n */\n\n\nconst getNextActiveElement = (list, activeElement, shouldGetNext, isCycleAllowed) => {\n  let index = list.indexOf(activeElement); // if the element does not exist in the list return an element depending on the direction and if cycle is allowed\n\n  if (index === -1) {\n    return list[!shouldGetNext && isCycleAllowed ? list.length - 1 : 0];\n  }\n\n  const listLength = list.length;\n  index += shouldGetNext ? 1 : -1;\n\n  if (isCycleAllowed) {\n    index = (index + listLength) % listLength;\n  }\n\n  return list[Math.max(0, Math.min(index, listLength - 1))];\n};\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): dom/event-handler.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst namespaceRegex = /[^.]*(?=\\..*)\\.|.*/;\nconst stripNameRegex = /\\..*/;\nconst stripUidRegex = /::\\d+$/;\nconst eventRegistry = {}; // Events storage\n\nlet uidEvent = 1;\nconst customEvents = {\n  mouseenter: 'mouseover',\n  mouseleave: 'mouseout'\n};\nconst customEventsRegex = /^(mouseenter|mouseleave)/i;\nconst nativeEvents = new Set(['click', 'dblclick', 'mouseup', 'mousedown', 'contextmenu', 'mousewheel', 'DOMMouseScroll', 'mouseover', 'mouseout', 'mousemove', 'selectstart', 'selectend', 'keydown', 'keypress', 'keyup', 'orientationchange', 'touchstart', 'touchmove', 'touchend', 'touchcancel', 'pointerdown', 'pointermove', 'pointerup', 'pointerleave', 'pointercancel', 'gesturestart', 'gesturechange', 'gestureend', 'focus', 'blur', 'change', 'reset', 'select', 'submit', 'focusin', 'focusout', 'load', 'unload', 'beforeunload', 'resize', 'move', 'DOMContentLoaded', 'readystatechange', 'error', 'abort', 'scroll']);\n/**\n * ------------------------------------------------------------------------\n * Private methods\n * ------------------------------------------------------------------------\n */\n\nfunction getUidEvent(element, uid) {\n  return uid && `${uid}::${uidEvent++}` || element.uidEvent || uidEvent++;\n}\n\nfunction getEvent(element) {\n  const uid = getUidEvent(element);\n  element.uidEvent = uid;\n  eventRegistry[uid] = eventRegistry[uid] || {};\n  return eventRegistry[uid];\n}\n\nfunction bootstrapHandler(element, fn) {\n  return function handler(event) {\n    event.delegateTarget = element;\n\n    if (handler.oneOff) {\n      EventHandler.off(element, event.type, fn);\n    }\n\n    return fn.apply(element, [event]);\n  };\n}\n\nfunction bootstrapDelegationHandler(element, selector, fn) {\n  return function handler(event) {\n    const domElements = element.querySelectorAll(selector);\n\n    for (let {\n      target\n    } = event; target && target !== this; target = target.parentNode) {\n      for (let i = domElements.length; i--;) {\n        if (domElements[i] === target) {\n          event.delegateTarget = target;\n\n          if (handler.oneOff) {\n            // eslint-disable-next-line unicorn/consistent-destructuring\n            EventHandler.off(element, event.type, selector, fn);\n          }\n\n          return fn.apply(target, [event]);\n        }\n      }\n    } // To please ESLint\n\n\n    return null;\n  };\n}\n\nfunction findHandler(events, handler, delegationSelector = null) {\n  const uidEventList = Object.keys(events);\n\n  for (let i = 0, len = uidEventList.length; i < len; i++) {\n    const event = events[uidEventList[i]];\n\n    if (event.originalHandler === handler && event.delegationSelector === delegationSelector) {\n      return event;\n    }\n  }\n\n  return null;\n}\n\nfunction normalizeParams(originalTypeEvent, handler, delegationFn) {\n  const delegation = typeof handler === 'string';\n  const originalHandler = delegation ? delegationFn : handler;\n  let typeEvent = getTypeEvent(originalTypeEvent);\n  const isNative = nativeEvents.has(typeEvent);\n\n  if (!isNative) {\n    typeEvent = originalTypeEvent;\n  }\n\n  return [delegation, originalHandler, typeEvent];\n}\n\nfunction addHandler(element, originalTypeEvent, handler, delegationFn, oneOff) {\n  if (typeof originalTypeEvent !== 'string' || !element) {\n    return;\n  }\n\n  if (!handler) {\n    handler = delegationFn;\n    delegationFn = null;\n  } // in case of mouseenter or mouseleave wrap the handler within a function that checks for its DOM position\n  // this prevents the handler from being dispatched the same way as mouseover or mouseout does\n\n\n  if (customEventsRegex.test(originalTypeEvent)) {\n    const wrapFn = fn => {\n      return function (event) {\n        if (!event.relatedTarget || event.relatedTarget !== event.delegateTarget && !event.delegateTarget.contains(event.relatedTarget)) {\n          return fn.call(this, event);\n        }\n      };\n    };\n\n    if (delegationFn) {\n      delegationFn = wrapFn(delegationFn);\n    } else {\n      handler = wrapFn(handler);\n    }\n  }\n\n  const [delegation, originalHandler, typeEvent] = normalizeParams(originalTypeEvent, handler, delegationFn);\n  const events = getEvent(element);\n  const handlers = events[typeEvent] || (events[typeEvent] = {});\n  const previousFn = findHandler(handlers, originalHandler, delegation ? handler : null);\n\n  if (previousFn) {\n    previousFn.oneOff = previousFn.oneOff && oneOff;\n    return;\n  }\n\n  const uid = getUidEvent(originalHandler, originalTypeEvent.replace(namespaceRegex, ''));\n  const fn = delegation ? bootstrapDelegationHandler(element, handler, delegationFn) : bootstrapHandler(element, handler);\n  fn.delegationSelector = delegation ? handler : null;\n  fn.originalHandler = originalHandler;\n  fn.oneOff = oneOff;\n  fn.uidEvent = uid;\n  handlers[uid] = fn;\n  element.addEventListener(typeEvent, fn, delegation);\n}\n\nfunction removeHandler(element, events, typeEvent, handler, delegationSelector) {\n  const fn = findHandler(events[typeEvent], handler, delegationSelector);\n\n  if (!fn) {\n    return;\n  }\n\n  element.removeEventListener(typeEvent, fn, Boolean(delegationSelector));\n  delete events[typeEvent][fn.uidEvent];\n}\n\nfunction removeNamespacedHandlers(element, events, typeEvent, namespace) {\n  const storeElementEvent = events[typeEvent] || {};\n  Object.keys(storeElementEvent).forEach(handlerKey => {\n    if (handlerKey.includes(namespace)) {\n      const event = storeElementEvent[handlerKey];\n      removeHandler(element, events, typeEvent, event.originalHandler, event.delegationSelector);\n    }\n  });\n}\n\nfunction getTypeEvent(event) {\n  // allow to get the native events from namespaced events ('click.bs.button' --> 'click')\n  event = event.replace(stripNameRegex, '');\n  return customEvents[event] || event;\n}\n\nconst EventHandler = {\n  on(element, event, handler, delegationFn) {\n    addHandler(element, event, handler, delegationFn, false);\n  },\n\n  one(element, event, handler, delegationFn) {\n    addHandler(element, event, handler, delegationFn, true);\n  },\n\n  off(element, originalTypeEvent, handler, delegationFn) {\n    if (typeof originalTypeEvent !== 'string' || !element) {\n      return;\n    }\n\n    const [delegation, originalHandler, typeEvent] = normalizeParams(originalTypeEvent, handler, delegationFn);\n    const inNamespace = typeEvent !== originalTypeEvent;\n    const events = getEvent(element);\n    const isNamespace = originalTypeEvent.startsWith('.');\n\n    if (typeof originalHandler !== 'undefined') {\n      // Simplest case: handler is passed, remove that listener ONLY.\n      if (!events || !events[typeEvent]) {\n        return;\n      }\n\n      removeHandler(element, events, typeEvent, originalHandler, delegation ? handler : null);\n      return;\n    }\n\n    if (isNamespace) {\n      Object.keys(events).forEach(elementEvent => {\n        removeNamespacedHandlers(element, events, elementEvent, originalTypeEvent.slice(1));\n      });\n    }\n\n    const storeElementEvent = events[typeEvent] || {};\n    Object.keys(storeElementEvent).forEach(keyHandlers => {\n      const handlerKey = keyHandlers.replace(stripUidRegex, '');\n\n      if (!inNamespace || originalTypeEvent.includes(handlerKey)) {\n        const event = storeElementEvent[keyHandlers];\n        removeHandler(element, events, typeEvent, event.originalHandler, event.delegationSelector);\n      }\n    });\n  },\n\n  trigger(element, event, args) {\n    if (typeof event !== 'string' || !element) {\n      return null;\n    }\n\n    const $ = getjQuery();\n    const typeEvent = getTypeEvent(event);\n    const inNamespace = event !== typeEvent;\n    const isNative = nativeEvents.has(typeEvent);\n    let jQueryEvent;\n    let bubbles = true;\n    let nativeDispatch = true;\n    let defaultPrevented = false;\n    let evt = null;\n\n    if (inNamespace && $) {\n      jQueryEvent = $.Event(event, args);\n      $(element).trigger(jQueryEvent);\n      bubbles = !jQueryEvent.isPropagationStopped();\n      nativeDispatch = !jQueryEvent.isImmediatePropagationStopped();\n      defaultPrevented = jQueryEvent.isDefaultPrevented();\n    }\n\n    if (isNative) {\n      evt = document.createEvent('HTMLEvents');\n      evt.initEvent(typeEvent, bubbles, true);\n    } else {\n      evt = new CustomEvent(event, {\n        bubbles,\n        cancelable: true\n      });\n    } // merge custom information in our event\n\n\n    if (typeof args !== 'undefined') {\n      Object.keys(args).forEach(key => {\n        Object.defineProperty(evt, key, {\n          get() {\n            return args[key];\n          }\n\n        });\n      });\n    }\n\n    if (defaultPrevented) {\n      evt.preventDefault();\n    }\n\n    if (nativeDispatch) {\n      element.dispatchEvent(evt);\n    }\n\n    if (evt.defaultPrevented && typeof jQueryEvent !== 'undefined') {\n      jQueryEvent.preventDefault();\n    }\n\n    return evt;\n  }\n\n};\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): dom/data.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\nconst elementMap = new Map();\nvar Data = {\n  set(element, key, instance) {\n    if (!elementMap.has(element)) {\n      elementMap.set(element, new Map());\n    }\n\n    const instanceMap = elementMap.get(element); // make it clear we only want one instance per element\n    // can be removed later when multiple key/instances are fine to be used\n\n    if (!instanceMap.has(key) && instanceMap.size !== 0) {\n      // eslint-disable-next-line no-console\n      console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(instanceMap.keys())[0]}.`);\n      return;\n    }\n\n    instanceMap.set(key, instance);\n  },\n\n  get(element, key) {\n    if (elementMap.has(element)) {\n      return elementMap.get(element).get(key) || null;\n    }\n\n    return null;\n  },\n\n  remove(element, key) {\n    if (!elementMap.has(element)) {\n      return;\n    }\n\n    const instanceMap = elementMap.get(element);\n    instanceMap.delete(key); // free up element references if there are no instances left for an element\n\n    if (instanceMap.size === 0) {\n      elementMap.delete(element);\n    }\n  }\n\n};\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): base-component.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst VERSION = '5.0.2';\n\nclass BaseComponent {\n  constructor(element) {\n    element = getElement(element);\n\n    if (!element) {\n      return;\n    }\n\n    this._element = element;\n    Data.set(this._element, this.constructor.DATA_KEY, this);\n  }\n\n  dispose() {\n    Data.remove(this._element, this.constructor.DATA_KEY);\n    EventHandler.off(this._element, this.constructor.EVENT_KEY);\n    Object.getOwnPropertyNames(this).forEach(propertyName => {\n      this[propertyName] = null;\n    });\n  }\n\n  _queueCallback(callback, element, isAnimated = true) {\n    executeAfterTransition(callback, element, isAnimated);\n  }\n  /** Static */\n\n\n  static getInstance(element) {\n    return Data.get(element, this.DATA_KEY);\n  }\n\n  static getOrCreateInstance(element, config = {}) {\n    return this.getInstance(element) || new this(element, typeof config === 'object' ? config : null);\n  }\n\n  static get VERSION() {\n    return VERSION;\n  }\n\n  static get NAME() {\n    throw new Error('You have to implement the static method \"NAME\", for each component!');\n  }\n\n  static get DATA_KEY() {\n    return `bs.${this.NAME}`;\n  }\n\n  static get EVENT_KEY() {\n    return `.${this.DATA_KEY}`;\n  }\n\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): alert.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$c = 'alert';\nconst DATA_KEY$b = 'bs.alert';\nconst EVENT_KEY$b = `.${DATA_KEY$b}`;\nconst DATA_API_KEY$8 = '.data-api';\nconst SELECTOR_DISMISS = '[data-bs-dismiss=\"alert\"]';\nconst EVENT_CLOSE = `close${EVENT_KEY$b}`;\nconst EVENT_CLOSED = `closed${EVENT_KEY$b}`;\nconst EVENT_CLICK_DATA_API$7 = `click${EVENT_KEY$b}${DATA_API_KEY$8}`;\nconst CLASS_NAME_ALERT = 'alert';\nconst CLASS_NAME_FADE$6 = 'fade';\nconst CLASS_NAME_SHOW$9 = 'show';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Alert extends BaseComponent {\n  // Getters\n  static get NAME() {\n    return NAME$c;\n  } // Public\n\n\n  close(element) {\n    const rootElement = element ? this._getRootElement(element) : this._element;\n\n    const customEvent = this._triggerCloseEvent(rootElement);\n\n    if (customEvent === null || customEvent.defaultPrevented) {\n      return;\n    }\n\n    this._removeElement(rootElement);\n  } // Private\n\n\n  _getRootElement(element) {\n    return getElementFromSelector(element) || element.closest(`.${CLASS_NAME_ALERT}`);\n  }\n\n  _triggerCloseEvent(element) {\n    return EventHandler.trigger(element, EVENT_CLOSE);\n  }\n\n  _removeElement(element) {\n    element.classList.remove(CLASS_NAME_SHOW$9);\n    const isAnimated = element.classList.contains(CLASS_NAME_FADE$6);\n\n    this._queueCallback(() => this._destroyElement(element), element, isAnimated);\n  }\n\n  _destroyElement(element) {\n    element.remove();\n    EventHandler.trigger(element, EVENT_CLOSED);\n  } // Static\n\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Alert.getOrCreateInstance(this);\n\n      if (config === 'close') {\n        data[config](this);\n      }\n    });\n  }\n\n  static handleDismiss(alertInstance) {\n    return function (event) {\n      if (event) {\n        event.preventDefault();\n      }\n\n      alertInstance.close(this);\n    };\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$7, SELECTOR_DISMISS, Alert.handleDismiss(new Alert()));\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Alert to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Alert);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): button.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$b = 'button';\nconst DATA_KEY$a = 'bs.button';\nconst EVENT_KEY$a = `.${DATA_KEY$a}`;\nconst DATA_API_KEY$7 = '.data-api';\nconst CLASS_NAME_ACTIVE$3 = 'active';\nconst SELECTOR_DATA_TOGGLE$5 = '[data-bs-toggle=\"button\"]';\nconst EVENT_CLICK_DATA_API$6 = `click${EVENT_KEY$a}${DATA_API_KEY$7}`;\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Button extends BaseComponent {\n  // Getters\n  static get NAME() {\n    return NAME$b;\n  } // Public\n\n\n  toggle() {\n    // Toggle class and sync the `aria-pressed` attribute with the return value of the `.toggle()` method\n    this._element.setAttribute('aria-pressed', this._element.classList.toggle(CLASS_NAME_ACTIVE$3));\n  } // Static\n\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Button.getOrCreateInstance(this);\n\n      if (config === 'toggle') {\n        data[config]();\n      }\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$6, SELECTOR_DATA_TOGGLE$5, event => {\n  event.preventDefault();\n  const button = event.target.closest(SELECTOR_DATA_TOGGLE$5);\n  const data = Button.getOrCreateInstance(button);\n  data.toggle();\n});\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Button to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Button);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): dom/manipulator.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\nfunction normalizeData(val) {\n  if (val === 'true') {\n    return true;\n  }\n\n  if (val === 'false') {\n    return false;\n  }\n\n  if (val === Number(val).toString()) {\n    return Number(val);\n  }\n\n  if (val === '' || val === 'null') {\n    return null;\n  }\n\n  return val;\n}\n\nfunction normalizeDataKey(key) {\n  return key.replace(/[A-Z]/g, chr => `-${chr.toLowerCase()}`);\n}\n\nconst Manipulator = {\n  setDataAttribute(element, key, value) {\n    element.setAttribute(`data-bs-${normalizeDataKey(key)}`, value);\n  },\n\n  removeDataAttribute(element, key) {\n    element.removeAttribute(`data-bs-${normalizeDataKey(key)}`);\n  },\n\n  getDataAttributes(element) {\n    if (!element) {\n      return {};\n    }\n\n    const attributes = {};\n    Object.keys(element.dataset).filter(key => key.startsWith('bs')).forEach(key => {\n      let pureKey = key.replace(/^bs/, '');\n      pureKey = pureKey.charAt(0).toLowerCase() + pureKey.slice(1, pureKey.length);\n      attributes[pureKey] = normalizeData(element.dataset[key]);\n    });\n    return attributes;\n  },\n\n  getDataAttribute(element, key) {\n    return normalizeData(element.getAttribute(`data-bs-${normalizeDataKey(key)}`));\n  },\n\n  offset(element) {\n    const rect = element.getBoundingClientRect();\n    return {\n      top: rect.top + document.body.scrollTop,\n      left: rect.left + document.body.scrollLeft\n    };\n  },\n\n  position(element) {\n    return {\n      top: element.offsetTop,\n      left: element.offsetLeft\n    };\n  }\n\n};\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): carousel.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$a = 'carousel';\nconst DATA_KEY$9 = 'bs.carousel';\nconst EVENT_KEY$9 = `.${DATA_KEY$9}`;\nconst DATA_API_KEY$6 = '.data-api';\nconst ARROW_LEFT_KEY = 'ArrowLeft';\nconst ARROW_RIGHT_KEY = 'ArrowRight';\nconst TOUCHEVENT_COMPAT_WAIT = 500; // Time for mouse compat events to fire after touch\n\nconst SWIPE_THRESHOLD = 40;\nconst Default$9 = {\n  interval: 5000,\n  keyboard: true,\n  slide: false,\n  pause: 'hover',\n  wrap: true,\n  touch: true\n};\nconst DefaultType$9 = {\n  interval: '(number|boolean)',\n  keyboard: 'boolean',\n  slide: '(boolean|string)',\n  pause: '(string|boolean)',\n  wrap: 'boolean',\n  touch: 'boolean'\n};\nconst ORDER_NEXT = 'next';\nconst ORDER_PREV = 'prev';\nconst DIRECTION_LEFT = 'left';\nconst DIRECTION_RIGHT = 'right';\nconst KEY_TO_DIRECTION = {\n  [ARROW_LEFT_KEY]: DIRECTION_RIGHT,\n  [ARROW_RIGHT_KEY]: DIRECTION_LEFT\n};\nconst EVENT_SLIDE = `slide${EVENT_KEY$9}`;\nconst EVENT_SLID = `slid${EVENT_KEY$9}`;\nconst EVENT_KEYDOWN = `keydown${EVENT_KEY$9}`;\nconst EVENT_MOUSEENTER = `mouseenter${EVENT_KEY$9}`;\nconst EVENT_MOUSELEAVE = `mouseleave${EVENT_KEY$9}`;\nconst EVENT_TOUCHSTART = `touchstart${EVENT_KEY$9}`;\nconst EVENT_TOUCHMOVE = `touchmove${EVENT_KEY$9}`;\nconst EVENT_TOUCHEND = `touchend${EVENT_KEY$9}`;\nconst EVENT_POINTERDOWN = `pointerdown${EVENT_KEY$9}`;\nconst EVENT_POINTERUP = `pointerup${EVENT_KEY$9}`;\nconst EVENT_DRAG_START = `dragstart${EVENT_KEY$9}`;\nconst EVENT_LOAD_DATA_API$2 = `load${EVENT_KEY$9}${DATA_API_KEY$6}`;\nconst EVENT_CLICK_DATA_API$5 = `click${EVENT_KEY$9}${DATA_API_KEY$6}`;\nconst CLASS_NAME_CAROUSEL = 'carousel';\nconst CLASS_NAME_ACTIVE$2 = 'active';\nconst CLASS_NAME_SLIDE = 'slide';\nconst CLASS_NAME_END = 'carousel-item-end';\nconst CLASS_NAME_START = 'carousel-item-start';\nconst CLASS_NAME_NEXT = 'carousel-item-next';\nconst CLASS_NAME_PREV = 'carousel-item-prev';\nconst CLASS_NAME_POINTER_EVENT = 'pointer-event';\nconst SELECTOR_ACTIVE$1 = '.active';\nconst SELECTOR_ACTIVE_ITEM = '.active.carousel-item';\nconst SELECTOR_ITEM = '.carousel-item';\nconst SELECTOR_ITEM_IMG = '.carousel-item img';\nconst SELECTOR_NEXT_PREV = '.carousel-item-next, .carousel-item-prev';\nconst SELECTOR_INDICATORS = '.carousel-indicators';\nconst SELECTOR_INDICATOR = '[data-bs-target]';\nconst SELECTOR_DATA_SLIDE = '[data-bs-slide], [data-bs-slide-to]';\nconst SELECTOR_DATA_RIDE = '[data-bs-ride=\"carousel\"]';\nconst POINTER_TYPE_TOUCH = 'touch';\nconst POINTER_TYPE_PEN = 'pen';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Carousel extends BaseComponent {\n  constructor(element, config) {\n    super(element);\n    this._items = null;\n    this._interval = null;\n    this._activeElement = null;\n    this._isPaused = false;\n    this._isSliding = false;\n    this.touchTimeout = null;\n    this.touchStartX = 0;\n    this.touchDeltaX = 0;\n    this._config = this._getConfig(config);\n    this._indicatorsElement = SelectorEngine.findOne(SELECTOR_INDICATORS, this._element);\n    this._touchSupported = 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0;\n    this._pointerEvent = Boolean(window.PointerEvent);\n\n    this._addEventListeners();\n  } // Getters\n\n\n  static get Default() {\n    return Default$9;\n  }\n\n  static get NAME() {\n    return NAME$a;\n  } // Public\n\n\n  next() {\n    this._slide(ORDER_NEXT);\n  }\n\n  nextWhenVisible() {\n    // Don't call next when the page isn't visible\n    // or the carousel or its parent isn't visible\n    if (!document.hidden && isVisible(this._element)) {\n      this.next();\n    }\n  }\n\n  prev() {\n    this._slide(ORDER_PREV);\n  }\n\n  pause(event) {\n    if (!event) {\n      this._isPaused = true;\n    }\n\n    if (SelectorEngine.findOne(SELECTOR_NEXT_PREV, this._element)) {\n      triggerTransitionEnd(this._element);\n      this.cycle(true);\n    }\n\n    clearInterval(this._interval);\n    this._interval = null;\n  }\n\n  cycle(event) {\n    if (!event) {\n      this._isPaused = false;\n    }\n\n    if (this._interval) {\n      clearInterval(this._interval);\n      this._interval = null;\n    }\n\n    if (this._config && this._config.interval && !this._isPaused) {\n      this._updateInterval();\n\n      this._interval = setInterval((document.visibilityState ? this.nextWhenVisible : this.next).bind(this), this._config.interval);\n    }\n  }\n\n  to(index) {\n    this._activeElement = SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element);\n\n    const activeIndex = this._getItemIndex(this._activeElement);\n\n    if (index > this._items.length - 1 || index < 0) {\n      return;\n    }\n\n    if (this._isSliding) {\n      EventHandler.one(this._element, EVENT_SLID, () => this.to(index));\n      return;\n    }\n\n    if (activeIndex === index) {\n      this.pause();\n      this.cycle();\n      return;\n    }\n\n    const order = index > activeIndex ? ORDER_NEXT : ORDER_PREV;\n\n    this._slide(order, this._items[index]);\n  } // Private\n\n\n  _getConfig(config) {\n    config = { ...Default$9,\n      ...Manipulator.getDataAttributes(this._element),\n      ...(typeof config === 'object' ? config : {})\n    };\n    typeCheckConfig(NAME$a, config, DefaultType$9);\n    return config;\n  }\n\n  _handleSwipe() {\n    const absDeltax = Math.abs(this.touchDeltaX);\n\n    if (absDeltax <= SWIPE_THRESHOLD) {\n      return;\n    }\n\n    const direction = absDeltax / this.touchDeltaX;\n    this.touchDeltaX = 0;\n\n    if (!direction) {\n      return;\n    }\n\n    this._slide(direction > 0 ? DIRECTION_RIGHT : DIRECTION_LEFT);\n  }\n\n  _addEventListeners() {\n    if (this._config.keyboard) {\n      EventHandler.on(this._element, EVENT_KEYDOWN, event => this._keydown(event));\n    }\n\n    if (this._config.pause === 'hover') {\n      EventHandler.on(this._element, EVENT_MOUSEENTER, event => this.pause(event));\n      EventHandler.on(this._element, EVENT_MOUSELEAVE, event => this.cycle(event));\n    }\n\n    if (this._config.touch && this._touchSupported) {\n      this._addTouchEventListeners();\n    }\n  }\n\n  _addTouchEventListeners() {\n    const start = event => {\n      if (this._pointerEvent && (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH)) {\n        this.touchStartX = event.clientX;\n      } else if (!this._pointerEvent) {\n        this.touchStartX = event.touches[0].clientX;\n      }\n    };\n\n    const move = event => {\n      // ensure swiping with one touch and not pinching\n      this.touchDeltaX = event.touches && event.touches.length > 1 ? 0 : event.touches[0].clientX - this.touchStartX;\n    };\n\n    const end = event => {\n      if (this._pointerEvent && (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH)) {\n        this.touchDeltaX = event.clientX - this.touchStartX;\n      }\n\n      this._handleSwipe();\n\n      if (this._config.pause === 'hover') {\n        // If it's a touch-enabled device, mouseenter/leave are fired as\n        // part of the mouse compatibility events on first tap - the carousel\n        // would stop cycling until user tapped out of it;\n        // here, we listen for touchend, explicitly pause the carousel\n        // (as if it's the second time we tap on it, mouseenter compat event\n        // is NOT fired) and after a timeout (to allow for mouse compatibility\n        // events to fire) we explicitly restart cycling\n        this.pause();\n\n        if (this.touchTimeout) {\n          clearTimeout(this.touchTimeout);\n        }\n\n        this.touchTimeout = setTimeout(event => this.cycle(event), TOUCHEVENT_COMPAT_WAIT + this._config.interval);\n      }\n    };\n\n    SelectorEngine.find(SELECTOR_ITEM_IMG, this._element).forEach(itemImg => {\n      EventHandler.on(itemImg, EVENT_DRAG_START, e => e.preventDefault());\n    });\n\n    if (this._pointerEvent) {\n      EventHandler.on(this._element, EVENT_POINTERDOWN, event => start(event));\n      EventHandler.on(this._element, EVENT_POINTERUP, event => end(event));\n\n      this._element.classList.add(CLASS_NAME_POINTER_EVENT);\n    } else {\n      EventHandler.on(this._element, EVENT_TOUCHSTART, event => start(event));\n      EventHandler.on(this._element, EVENT_TOUCHMOVE, event => move(event));\n      EventHandler.on(this._element, EVENT_TOUCHEND, event => end(event));\n    }\n  }\n\n  _keydown(event) {\n    if (/input|textarea/i.test(event.target.tagName)) {\n      return;\n    }\n\n    const direction = KEY_TO_DIRECTION[event.key];\n\n    if (direction) {\n      event.preventDefault();\n\n      this._slide(direction);\n    }\n  }\n\n  _getItemIndex(element) {\n    this._items = element && element.parentNode ? SelectorEngine.find(SELECTOR_ITEM, element.parentNode) : [];\n    return this._items.indexOf(element);\n  }\n\n  _getItemByOrder(order, activeElement) {\n    const isNext = order === ORDER_NEXT;\n    return getNextActiveElement(this._items, activeElement, isNext, this._config.wrap);\n  }\n\n  _triggerSlideEvent(relatedTarget, eventDirectionName) {\n    const targetIndex = this._getItemIndex(relatedTarget);\n\n    const fromIndex = this._getItemIndex(SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element));\n\n    return EventHandler.trigger(this._element, EVENT_SLIDE, {\n      relatedTarget,\n      direction: eventDirectionName,\n      from: fromIndex,\n      to: targetIndex\n    });\n  }\n\n  _setActiveIndicatorElement(element) {\n    if (this._indicatorsElement) {\n      const activeIndicator = SelectorEngine.findOne(SELECTOR_ACTIVE$1, this._indicatorsElement);\n      activeIndicator.classList.remove(CLASS_NAME_ACTIVE$2);\n      activeIndicator.removeAttribute('aria-current');\n      const indicators = SelectorEngine.find(SELECTOR_INDICATOR, this._indicatorsElement);\n\n      for (let i = 0; i < indicators.length; i++) {\n        if (Number.parseInt(indicators[i].getAttribute('data-bs-slide-to'), 10) === this._getItemIndex(element)) {\n          indicators[i].classList.add(CLASS_NAME_ACTIVE$2);\n          indicators[i].setAttribute('aria-current', 'true');\n          break;\n        }\n      }\n    }\n  }\n\n  _updateInterval() {\n    const element = this._activeElement || SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element);\n\n    if (!element) {\n      return;\n    }\n\n    const elementInterval = Number.parseInt(element.getAttribute('data-bs-interval'), 10);\n\n    if (elementInterval) {\n      this._config.defaultInterval = this._config.defaultInterval || this._config.interval;\n      this._config.interval = elementInterval;\n    } else {\n      this._config.interval = this._config.defaultInterval || this._config.interval;\n    }\n  }\n\n  _slide(directionOrOrder, element) {\n    const order = this._directionToOrder(directionOrOrder);\n\n    const activeElement = SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element);\n\n    const activeElementIndex = this._getItemIndex(activeElement);\n\n    const nextElement = element || this._getItemByOrder(order, activeElement);\n\n    const nextElementIndex = this._getItemIndex(nextElement);\n\n    const isCycling = Boolean(this._interval);\n    const isNext = order === ORDER_NEXT;\n    const directionalClassName = isNext ? CLASS_NAME_START : CLASS_NAME_END;\n    const orderClassName = isNext ? CLASS_NAME_NEXT : CLASS_NAME_PREV;\n\n    const eventDirectionName = this._orderToDirection(order);\n\n    if (nextElement && nextElement.classList.contains(CLASS_NAME_ACTIVE$2)) {\n      this._isSliding = false;\n      return;\n    }\n\n    if (this._isSliding) {\n      return;\n    }\n\n    const slideEvent = this._triggerSlideEvent(nextElement, eventDirectionName);\n\n    if (slideEvent.defaultPrevented) {\n      return;\n    }\n\n    if (!activeElement || !nextElement) {\n      // Some weirdness is happening, so we bail\n      return;\n    }\n\n    this._isSliding = true;\n\n    if (isCycling) {\n      this.pause();\n    }\n\n    this._setActiveIndicatorElement(nextElement);\n\n    this._activeElement = nextElement;\n\n    const triggerSlidEvent = () => {\n      EventHandler.trigger(this._element, EVENT_SLID, {\n        relatedTarget: nextElement,\n        direction: eventDirectionName,\n        from: activeElementIndex,\n        to: nextElementIndex\n      });\n    };\n\n    if (this._element.classList.contains(CLASS_NAME_SLIDE)) {\n      nextElement.classList.add(orderClassName);\n      reflow(nextElement);\n      activeElement.classList.add(directionalClassName);\n      nextElement.classList.add(directionalClassName);\n\n      const completeCallBack = () => {\n        nextElement.classList.remove(directionalClassName, orderClassName);\n        nextElement.classList.add(CLASS_NAME_ACTIVE$2);\n        activeElement.classList.remove(CLASS_NAME_ACTIVE$2, orderClassName, directionalClassName);\n        this._isSliding = false;\n        setTimeout(triggerSlidEvent, 0);\n      };\n\n      this._queueCallback(completeCallBack, activeElement, true);\n    } else {\n      activeElement.classList.remove(CLASS_NAME_ACTIVE$2);\n      nextElement.classList.add(CLASS_NAME_ACTIVE$2);\n      this._isSliding = false;\n      triggerSlidEvent();\n    }\n\n    if (isCycling) {\n      this.cycle();\n    }\n  }\n\n  _directionToOrder(direction) {\n    if (![DIRECTION_RIGHT, DIRECTION_LEFT].includes(direction)) {\n      return direction;\n    }\n\n    if (isRTL()) {\n      return direction === DIRECTION_LEFT ? ORDER_PREV : ORDER_NEXT;\n    }\n\n    return direction === DIRECTION_LEFT ? ORDER_NEXT : ORDER_PREV;\n  }\n\n  _orderToDirection(order) {\n    if (![ORDER_NEXT, ORDER_PREV].includes(order)) {\n      return order;\n    }\n\n    if (isRTL()) {\n      return order === ORDER_PREV ? DIRECTION_LEFT : DIRECTION_RIGHT;\n    }\n\n    return order === ORDER_PREV ? DIRECTION_RIGHT : DIRECTION_LEFT;\n  } // Static\n\n\n  static carouselInterface(element, config) {\n    const data = Carousel.getOrCreateInstance(element, config);\n    let {\n      _config\n    } = data;\n\n    if (typeof config === 'object') {\n      _config = { ..._config,\n        ...config\n      };\n    }\n\n    const action = typeof config === 'string' ? config : _config.slide;\n\n    if (typeof config === 'number') {\n      data.to(config);\n    } else if (typeof action === 'string') {\n      if (typeof data[action] === 'undefined') {\n        throw new TypeError(`No method named \"${action}\"`);\n      }\n\n      data[action]();\n    } else if (_config.interval && _config.ride) {\n      data.pause();\n      data.cycle();\n    }\n  }\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      Carousel.carouselInterface(this, config);\n    });\n  }\n\n  static dataApiClickHandler(event) {\n    const target = getElementFromSelector(this);\n\n    if (!target || !target.classList.contains(CLASS_NAME_CAROUSEL)) {\n      return;\n    }\n\n    const config = { ...Manipulator.getDataAttributes(target),\n      ...Manipulator.getDataAttributes(this)\n    };\n    const slideIndex = this.getAttribute('data-bs-slide-to');\n\n    if (slideIndex) {\n      config.interval = false;\n    }\n\n    Carousel.carouselInterface(target, config);\n\n    if (slideIndex) {\n      Carousel.getInstance(target).to(slideIndex);\n    }\n\n    event.preventDefault();\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$5, SELECTOR_DATA_SLIDE, Carousel.dataApiClickHandler);\nEventHandler.on(window, EVENT_LOAD_DATA_API$2, () => {\n  const carousels = SelectorEngine.find(SELECTOR_DATA_RIDE);\n\n  for (let i = 0, len = carousels.length; i < len; i++) {\n    Carousel.carouselInterface(carousels[i], Carousel.getInstance(carousels[i]));\n  }\n});\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Carousel to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Carousel);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): collapse.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$9 = 'collapse';\nconst DATA_KEY$8 = 'bs.collapse';\nconst EVENT_KEY$8 = `.${DATA_KEY$8}`;\nconst DATA_API_KEY$5 = '.data-api';\nconst Default$8 = {\n  toggle: true,\n  parent: ''\n};\nconst DefaultType$8 = {\n  toggle: 'boolean',\n  parent: '(string|element)'\n};\nconst EVENT_SHOW$5 = `show${EVENT_KEY$8}`;\nconst EVENT_SHOWN$5 = `shown${EVENT_KEY$8}`;\nconst EVENT_HIDE$5 = `hide${EVENT_KEY$8}`;\nconst EVENT_HIDDEN$5 = `hidden${EVENT_KEY$8}`;\nconst EVENT_CLICK_DATA_API$4 = `click${EVENT_KEY$8}${DATA_API_KEY$5}`;\nconst CLASS_NAME_SHOW$8 = 'show';\nconst CLASS_NAME_COLLAPSE = 'collapse';\nconst CLASS_NAME_COLLAPSING = 'collapsing';\nconst CLASS_NAME_COLLAPSED = 'collapsed';\nconst WIDTH = 'width';\nconst HEIGHT = 'height';\nconst SELECTOR_ACTIVES = '.show, .collapsing';\nconst SELECTOR_DATA_TOGGLE$4 = '[data-bs-toggle=\"collapse\"]';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Collapse extends BaseComponent {\n  constructor(element, config) {\n    super(element);\n    this._isTransitioning = false;\n    this._config = this._getConfig(config);\n    this._triggerArray = SelectorEngine.find(`${SELECTOR_DATA_TOGGLE$4}[href=\"#${this._element.id}\"],` + `${SELECTOR_DATA_TOGGLE$4}[data-bs-target=\"#${this._element.id}\"]`);\n    const toggleList = SelectorEngine.find(SELECTOR_DATA_TOGGLE$4);\n\n    for (let i = 0, len = toggleList.length; i < len; i++) {\n      const elem = toggleList[i];\n      const selector = getSelectorFromElement(elem);\n      const filterElement = SelectorEngine.find(selector).filter(foundElem => foundElem === this._element);\n\n      if (selector !== null && filterElement.length) {\n        this._selector = selector;\n\n        this._triggerArray.push(elem);\n      }\n    }\n\n    this._parent = this._config.parent ? this._getParent() : null;\n\n    if (!this._config.parent) {\n      this._addAriaAndCollapsedClass(this._element, this._triggerArray);\n    }\n\n    if (this._config.toggle) {\n      this.toggle();\n    }\n  } // Getters\n\n\n  static get Default() {\n    return Default$8;\n  }\n\n  static get NAME() {\n    return NAME$9;\n  } // Public\n\n\n  toggle() {\n    if (this._element.classList.contains(CLASS_NAME_SHOW$8)) {\n      this.hide();\n    } else {\n      this.show();\n    }\n  }\n\n  show() {\n    if (this._isTransitioning || this._element.classList.contains(CLASS_NAME_SHOW$8)) {\n      return;\n    }\n\n    let actives;\n    let activesData;\n\n    if (this._parent) {\n      actives = SelectorEngine.find(SELECTOR_ACTIVES, this._parent).filter(elem => {\n        if (typeof this._config.parent === 'string') {\n          return elem.getAttribute('data-bs-parent') === this._config.parent;\n        }\n\n        return elem.classList.contains(CLASS_NAME_COLLAPSE);\n      });\n\n      if (actives.length === 0) {\n        actives = null;\n      }\n    }\n\n    const container = SelectorEngine.findOne(this._selector);\n\n    if (actives) {\n      const tempActiveData = actives.find(elem => container !== elem);\n      activesData = tempActiveData ? Collapse.getInstance(tempActiveData) : null;\n\n      if (activesData && activesData._isTransitioning) {\n        return;\n      }\n    }\n\n    const startEvent = EventHandler.trigger(this._element, EVENT_SHOW$5);\n\n    if (startEvent.defaultPrevented) {\n      return;\n    }\n\n    if (actives) {\n      actives.forEach(elemActive => {\n        if (container !== elemActive) {\n          Collapse.collapseInterface(elemActive, 'hide');\n        }\n\n        if (!activesData) {\n          Data.set(elemActive, DATA_KEY$8, null);\n        }\n      });\n    }\n\n    const dimension = this._getDimension();\n\n    this._element.classList.remove(CLASS_NAME_COLLAPSE);\n\n    this._element.classList.add(CLASS_NAME_COLLAPSING);\n\n    this._element.style[dimension] = 0;\n\n    if (this._triggerArray.length) {\n      this._triggerArray.forEach(element => {\n        element.classList.remove(CLASS_NAME_COLLAPSED);\n        element.setAttribute('aria-expanded', true);\n      });\n    }\n\n    this.setTransitioning(true);\n\n    const complete = () => {\n      this._element.classList.remove(CLASS_NAME_COLLAPSING);\n\n      this._element.classList.add(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$8);\n\n      this._element.style[dimension] = '';\n      this.setTransitioning(false);\n      EventHandler.trigger(this._element, EVENT_SHOWN$5);\n    };\n\n    const capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1);\n    const scrollSize = `scroll${capitalizedDimension}`;\n\n    this._queueCallback(complete, this._element, true);\n\n    this._element.style[dimension] = `${this._element[scrollSize]}px`;\n  }\n\n  hide() {\n    if (this._isTransitioning || !this._element.classList.contains(CLASS_NAME_SHOW$8)) {\n      return;\n    }\n\n    const startEvent = EventHandler.trigger(this._element, EVENT_HIDE$5);\n\n    if (startEvent.defaultPrevented) {\n      return;\n    }\n\n    const dimension = this._getDimension();\n\n    this._element.style[dimension] = `${this._element.getBoundingClientRect()[dimension]}px`;\n    reflow(this._element);\n\n    this._element.classList.add(CLASS_NAME_COLLAPSING);\n\n    this._element.classList.remove(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$8);\n\n    const triggerArrayLength = this._triggerArray.length;\n\n    if (triggerArrayLength > 0) {\n      for (let i = 0; i < triggerArrayLength; i++) {\n        const trigger = this._triggerArray[i];\n        const elem = getElementFromSelector(trigger);\n\n        if (elem && !elem.classList.contains(CLASS_NAME_SHOW$8)) {\n          trigger.classList.add(CLASS_NAME_COLLAPSED);\n          trigger.setAttribute('aria-expanded', false);\n        }\n      }\n    }\n\n    this.setTransitioning(true);\n\n    const complete = () => {\n      this.setTransitioning(false);\n\n      this._element.classList.remove(CLASS_NAME_COLLAPSING);\n\n      this._element.classList.add(CLASS_NAME_COLLAPSE);\n\n      EventHandler.trigger(this._element, EVENT_HIDDEN$5);\n    };\n\n    this._element.style[dimension] = '';\n\n    this._queueCallback(complete, this._element, true);\n  }\n\n  setTransitioning(isTransitioning) {\n    this._isTransitioning = isTransitioning;\n  } // Private\n\n\n  _getConfig(config) {\n    config = { ...Default$8,\n      ...config\n    };\n    config.toggle = Boolean(config.toggle); // Coerce string values\n\n    typeCheckConfig(NAME$9, config, DefaultType$8);\n    return config;\n  }\n\n  _getDimension() {\n    return this._element.classList.contains(WIDTH) ? WIDTH : HEIGHT;\n  }\n\n  _getParent() {\n    let {\n      parent\n    } = this._config;\n    parent = getElement(parent);\n    const selector = `${SELECTOR_DATA_TOGGLE$4}[data-bs-parent=\"${parent}\"]`;\n    SelectorEngine.find(selector, parent).forEach(element => {\n      const selected = getElementFromSelector(element);\n\n      this._addAriaAndCollapsedClass(selected, [element]);\n    });\n    return parent;\n  }\n\n  _addAriaAndCollapsedClass(element, triggerArray) {\n    if (!element || !triggerArray.length) {\n      return;\n    }\n\n    const isOpen = element.classList.contains(CLASS_NAME_SHOW$8);\n    triggerArray.forEach(elem => {\n      if (isOpen) {\n        elem.classList.remove(CLASS_NAME_COLLAPSED);\n      } else {\n        elem.classList.add(CLASS_NAME_COLLAPSED);\n      }\n\n      elem.setAttribute('aria-expanded', isOpen);\n    });\n  } // Static\n\n\n  static collapseInterface(element, config) {\n    let data = Collapse.getInstance(element);\n    const _config = { ...Default$8,\n      ...Manipulator.getDataAttributes(element),\n      ...(typeof config === 'object' && config ? config : {})\n    };\n\n    if (!data && _config.toggle && typeof config === 'string' && /show|hide/.test(config)) {\n      _config.toggle = false;\n    }\n\n    if (!data) {\n      data = new Collapse(element, _config);\n    }\n\n    if (typeof config === 'string') {\n      if (typeof data[config] === 'undefined') {\n        throw new TypeError(`No method named \"${config}\"`);\n      }\n\n      data[config]();\n    }\n  }\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      Collapse.collapseInterface(this, config);\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$4, SELECTOR_DATA_TOGGLE$4, function (event) {\n  // preventDefault only for <a> elements (which change the URL) not inside the collapsible element\n  if (event.target.tagName === 'A' || event.delegateTarget && event.delegateTarget.tagName === 'A') {\n    event.preventDefault();\n  }\n\n  const triggerData = Manipulator.getDataAttributes(this);\n  const selector = getSelectorFromElement(this);\n  const selectorElements = SelectorEngine.find(selector);\n  selectorElements.forEach(element => {\n    const data = Collapse.getInstance(element);\n    let config;\n\n    if (data) {\n      // update parent attribute\n      if (data._parent === null && typeof triggerData.parent === 'string') {\n        data._config.parent = triggerData.parent;\n        data._parent = data._getParent();\n      }\n\n      config = 'toggle';\n    } else {\n      config = triggerData;\n    }\n\n    Collapse.collapseInterface(element, config);\n  });\n});\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Collapse to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Collapse);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): dropdown.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$8 = 'dropdown';\nconst DATA_KEY$7 = 'bs.dropdown';\nconst EVENT_KEY$7 = `.${DATA_KEY$7}`;\nconst DATA_API_KEY$4 = '.data-api';\nconst ESCAPE_KEY$2 = 'Escape';\nconst SPACE_KEY = 'Space';\nconst TAB_KEY = 'Tab';\nconst ARROW_UP_KEY = 'ArrowUp';\nconst ARROW_DOWN_KEY = 'ArrowDown';\nconst RIGHT_MOUSE_BUTTON = 2; // MouseEvent.button value for the secondary button, usually the right button\n\nconst REGEXP_KEYDOWN = new RegExp(`${ARROW_UP_KEY}|${ARROW_DOWN_KEY}|${ESCAPE_KEY$2}`);\nconst EVENT_HIDE$4 = `hide${EVENT_KEY$7}`;\nconst EVENT_HIDDEN$4 = `hidden${EVENT_KEY$7}`;\nconst EVENT_SHOW$4 = `show${EVENT_KEY$7}`;\nconst EVENT_SHOWN$4 = `shown${EVENT_KEY$7}`;\nconst EVENT_CLICK = `click${EVENT_KEY$7}`;\nconst EVENT_CLICK_DATA_API$3 = `click${EVENT_KEY$7}${DATA_API_KEY$4}`;\nconst EVENT_KEYDOWN_DATA_API = `keydown${EVENT_KEY$7}${DATA_API_KEY$4}`;\nconst EVENT_KEYUP_DATA_API = `keyup${EVENT_KEY$7}${DATA_API_KEY$4}`;\nconst CLASS_NAME_SHOW$7 = 'show';\nconst CLASS_NAME_DROPUP = 'dropup';\nconst CLASS_NAME_DROPEND = 'dropend';\nconst CLASS_NAME_DROPSTART = 'dropstart';\nconst CLASS_NAME_NAVBAR = 'navbar';\nconst SELECTOR_DATA_TOGGLE$3 = '[data-bs-toggle=\"dropdown\"]';\nconst SELECTOR_MENU = '.dropdown-menu';\nconst SELECTOR_NAVBAR_NAV = '.navbar-nav';\nconst SELECTOR_VISIBLE_ITEMS = '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)';\nconst PLACEMENT_TOP = isRTL() ? 'top-end' : 'top-start';\nconst PLACEMENT_TOPEND = isRTL() ? 'top-start' : 'top-end';\nconst PLACEMENT_BOTTOM = isRTL() ? 'bottom-end' : 'bottom-start';\nconst PLACEMENT_BOTTOMEND = isRTL() ? 'bottom-start' : 'bottom-end';\nconst PLACEMENT_RIGHT = isRTL() ? 'left-start' : 'right-start';\nconst PLACEMENT_LEFT = isRTL() ? 'right-start' : 'left-start';\nconst Default$7 = {\n  offset: [0, 2],\n  boundary: 'clippingParents',\n  reference: 'toggle',\n  display: 'dynamic',\n  popperConfig: null,\n  autoClose: true\n};\nconst DefaultType$7 = {\n  offset: '(array|string|function)',\n  boundary: '(string|element)',\n  reference: '(string|element|object)',\n  display: 'string',\n  popperConfig: '(null|object|function)',\n  autoClose: '(boolean|string)'\n};\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Dropdown extends BaseComponent {\n  constructor(element, config) {\n    super(element);\n    this._popper = null;\n    this._config = this._getConfig(config);\n    this._menu = this._getMenuElement();\n    this._inNavbar = this._detectNavbar();\n\n    this._addEventListeners();\n  } // Getters\n\n\n  static get Default() {\n    return Default$7;\n  }\n\n  static get DefaultType() {\n    return DefaultType$7;\n  }\n\n  static get NAME() {\n    return NAME$8;\n  } // Public\n\n\n  toggle() {\n    if (isDisabled(this._element)) {\n      return;\n    }\n\n    const isActive = this._element.classList.contains(CLASS_NAME_SHOW$7);\n\n    if (isActive) {\n      this.hide();\n      return;\n    }\n\n    this.show();\n  }\n\n  show() {\n    if (isDisabled(this._element) || this._menu.classList.contains(CLASS_NAME_SHOW$7)) {\n      return;\n    }\n\n    const parent = Dropdown.getParentFromElement(this._element);\n    const relatedTarget = {\n      relatedTarget: this._element\n    };\n    const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$4, relatedTarget);\n\n    if (showEvent.defaultPrevented) {\n      return;\n    } // Totally disable Popper for Dropdowns in Navbar\n\n\n    if (this._inNavbar) {\n      Manipulator.setDataAttribute(this._menu, 'popper', 'none');\n    } else {\n      if (typeof Popper === 'undefined') {\n        throw new TypeError('Bootstrap\\'s dropdowns require Popper (https://popper.js.org)');\n      }\n\n      let referenceElement = this._element;\n\n      if (this._config.reference === 'parent') {\n        referenceElement = parent;\n      } else if (isElement(this._config.reference)) {\n        referenceElement = getElement(this._config.reference);\n      } else if (typeof this._config.reference === 'object') {\n        referenceElement = this._config.reference;\n      }\n\n      const popperConfig = this._getPopperConfig();\n\n      const isDisplayStatic = popperConfig.modifiers.find(modifier => modifier.name === 'applyStyles' && modifier.enabled === false);\n      this._popper = Popper.createPopper(referenceElement, this._menu, popperConfig);\n\n      if (isDisplayStatic) {\n        Manipulator.setDataAttribute(this._menu, 'popper', 'static');\n      }\n    } // If this is a touch-enabled device we add extra\n    // empty mouseover listeners to the body's immediate children;\n    // only needed because of broken event delegation on iOS\n    // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n\n\n    if ('ontouchstart' in document.documentElement && !parent.closest(SELECTOR_NAVBAR_NAV)) {\n      [].concat(...document.body.children).forEach(elem => EventHandler.on(elem, 'mouseover', noop));\n    }\n\n    this._element.focus();\n\n    this._element.setAttribute('aria-expanded', true);\n\n    this._menu.classList.toggle(CLASS_NAME_SHOW$7);\n\n    this._element.classList.toggle(CLASS_NAME_SHOW$7);\n\n    EventHandler.trigger(this._element, EVENT_SHOWN$4, relatedTarget);\n  }\n\n  hide() {\n    if (isDisabled(this._element) || !this._menu.classList.contains(CLASS_NAME_SHOW$7)) {\n      return;\n    }\n\n    const relatedTarget = {\n      relatedTarget: this._element\n    };\n\n    this._completeHide(relatedTarget);\n  }\n\n  dispose() {\n    if (this._popper) {\n      this._popper.destroy();\n    }\n\n    super.dispose();\n  }\n\n  update() {\n    this._inNavbar = this._detectNavbar();\n\n    if (this._popper) {\n      this._popper.update();\n    }\n  } // Private\n\n\n  _addEventListeners() {\n    EventHandler.on(this._element, EVENT_CLICK, event => {\n      event.preventDefault();\n      this.toggle();\n    });\n  }\n\n  _completeHide(relatedTarget) {\n    const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$4, relatedTarget);\n\n    if (hideEvent.defaultPrevented) {\n      return;\n    } // If this is a touch-enabled device we remove the extra\n    // empty mouseover listeners we added for iOS support\n\n\n    if ('ontouchstart' in document.documentElement) {\n      [].concat(...document.body.children).forEach(elem => EventHandler.off(elem, 'mouseover', noop));\n    }\n\n    if (this._popper) {\n      this._popper.destroy();\n    }\n\n    this._menu.classList.remove(CLASS_NAME_SHOW$7);\n\n    this._element.classList.remove(CLASS_NAME_SHOW$7);\n\n    this._element.setAttribute('aria-expanded', 'false');\n\n    Manipulator.removeDataAttribute(this._menu, 'popper');\n    EventHandler.trigger(this._element, EVENT_HIDDEN$4, relatedTarget);\n  }\n\n  _getConfig(config) {\n    config = { ...this.constructor.Default,\n      ...Manipulator.getDataAttributes(this._element),\n      ...config\n    };\n    typeCheckConfig(NAME$8, config, this.constructor.DefaultType);\n\n    if (typeof config.reference === 'object' && !isElement(config.reference) && typeof config.reference.getBoundingClientRect !== 'function') {\n      // Popper virtual elements require a getBoundingClientRect method\n      throw new TypeError(`${NAME$8.toUpperCase()}: Option \"reference\" provided type \"object\" without a required \"getBoundingClientRect\" method.`);\n    }\n\n    return config;\n  }\n\n  _getMenuElement() {\n    return SelectorEngine.next(this._element, SELECTOR_MENU)[0];\n  }\n\n  _getPlacement() {\n    const parentDropdown = this._element.parentNode;\n\n    if (parentDropdown.classList.contains(CLASS_NAME_DROPEND)) {\n      return PLACEMENT_RIGHT;\n    }\n\n    if (parentDropdown.classList.contains(CLASS_NAME_DROPSTART)) {\n      return PLACEMENT_LEFT;\n    } // We need to trim the value because custom properties can also include spaces\n\n\n    const isEnd = getComputedStyle(this._menu).getPropertyValue('--bs-position').trim() === 'end';\n\n    if (parentDropdown.classList.contains(CLASS_NAME_DROPUP)) {\n      return isEnd ? PLACEMENT_TOPEND : PLACEMENT_TOP;\n    }\n\n    return isEnd ? PLACEMENT_BOTTOMEND : PLACEMENT_BOTTOM;\n  }\n\n  _detectNavbar() {\n    return this._element.closest(`.${CLASS_NAME_NAVBAR}`) !== null;\n  }\n\n  _getOffset() {\n    const {\n      offset\n    } = this._config;\n\n    if (typeof offset === 'string') {\n      return offset.split(',').map(val => Number.parseInt(val, 10));\n    }\n\n    if (typeof offset === 'function') {\n      return popperData => offset(popperData, this._element);\n    }\n\n    return offset;\n  }\n\n  _getPopperConfig() {\n    const defaultBsPopperConfig = {\n      placement: this._getPlacement(),\n      modifiers: [{\n        name: 'preventOverflow',\n        options: {\n          boundary: this._config.boundary\n        }\n      }, {\n        name: 'offset',\n        options: {\n          offset: this._getOffset()\n        }\n      }]\n    }; // Disable Popper if we have a static display\n\n    if (this._config.display === 'static') {\n      defaultBsPopperConfig.modifiers = [{\n        name: 'applyStyles',\n        enabled: false\n      }];\n    }\n\n    return { ...defaultBsPopperConfig,\n      ...(typeof this._config.popperConfig === 'function' ? this._config.popperConfig(defaultBsPopperConfig) : this._config.popperConfig)\n    };\n  }\n\n  _selectMenuItem({\n    key,\n    target\n  }) {\n    const items = SelectorEngine.find(SELECTOR_VISIBLE_ITEMS, this._menu).filter(isVisible);\n\n    if (!items.length) {\n      return;\n    } // if target isn't included in items (e.g. when expanding the dropdown)\n    // allow cycling to get the last item in case key equals ARROW_UP_KEY\n\n\n    getNextActiveElement(items, target, key === ARROW_DOWN_KEY, !items.includes(target)).focus();\n  } // Static\n\n\n  static dropdownInterface(element, config) {\n    const data = Dropdown.getOrCreateInstance(element, config);\n\n    if (typeof config === 'string') {\n      if (typeof data[config] === 'undefined') {\n        throw new TypeError(`No method named \"${config}\"`);\n      }\n\n      data[config]();\n    }\n  }\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      Dropdown.dropdownInterface(this, config);\n    });\n  }\n\n  static clearMenus(event) {\n    if (event && (event.button === RIGHT_MOUSE_BUTTON || event.type === 'keyup' && event.key !== TAB_KEY)) {\n      return;\n    }\n\n    const toggles = SelectorEngine.find(SELECTOR_DATA_TOGGLE$3);\n\n    for (let i = 0, len = toggles.length; i < len; i++) {\n      const context = Dropdown.getInstance(toggles[i]);\n\n      if (!context || context._config.autoClose === false) {\n        continue;\n      }\n\n      if (!context._element.classList.contains(CLASS_NAME_SHOW$7)) {\n        continue;\n      }\n\n      const relatedTarget = {\n        relatedTarget: context._element\n      };\n\n      if (event) {\n        const composedPath = event.composedPath();\n        const isMenuTarget = composedPath.includes(context._menu);\n\n        if (composedPath.includes(context._element) || context._config.autoClose === 'inside' && !isMenuTarget || context._config.autoClose === 'outside' && isMenuTarget) {\n          continue;\n        } // Tab navigation through the dropdown menu or events from contained inputs shouldn't close the menu\n\n\n        if (context._menu.contains(event.target) && (event.type === 'keyup' && event.key === TAB_KEY || /input|select|option|textarea|form/i.test(event.target.tagName))) {\n          continue;\n        }\n\n        if (event.type === 'click') {\n          relatedTarget.clickEvent = event;\n        }\n      }\n\n      context._completeHide(relatedTarget);\n    }\n  }\n\n  static getParentFromElement(element) {\n    return getElementFromSelector(element) || element.parentNode;\n  }\n\n  static dataApiKeydownHandler(event) {\n    // If not input/textarea:\n    //  - And not a key in REGEXP_KEYDOWN => not a dropdown command\n    // If input/textarea:\n    //  - If space key => not a dropdown command\n    //  - If key is other than escape\n    //    - If key is not up or down => not a dropdown command\n    //    - If trigger inside the menu => not a dropdown command\n    if (/input|textarea/i.test(event.target.tagName) ? event.key === SPACE_KEY || event.key !== ESCAPE_KEY$2 && (event.key !== ARROW_DOWN_KEY && event.key !== ARROW_UP_KEY || event.target.closest(SELECTOR_MENU)) : !REGEXP_KEYDOWN.test(event.key)) {\n      return;\n    }\n\n    const isActive = this.classList.contains(CLASS_NAME_SHOW$7);\n\n    if (!isActive && event.key === ESCAPE_KEY$2) {\n      return;\n    }\n\n    event.preventDefault();\n    event.stopPropagation();\n\n    if (isDisabled(this)) {\n      return;\n    }\n\n    const getToggleButton = () => this.matches(SELECTOR_DATA_TOGGLE$3) ? this : SelectorEngine.prev(this, SELECTOR_DATA_TOGGLE$3)[0];\n\n    if (event.key === ESCAPE_KEY$2) {\n      getToggleButton().focus();\n      Dropdown.clearMenus();\n      return;\n    }\n\n    if (event.key === ARROW_UP_KEY || event.key === ARROW_DOWN_KEY) {\n      if (!isActive) {\n        getToggleButton().click();\n      }\n\n      Dropdown.getInstance(getToggleButton())._selectMenuItem(event);\n\n      return;\n    }\n\n    if (!isActive || event.key === SPACE_KEY) {\n      Dropdown.clearMenus();\n    }\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_DATA_TOGGLE$3, Dropdown.dataApiKeydownHandler);\nEventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown.dataApiKeydownHandler);\nEventHandler.on(document, EVENT_CLICK_DATA_API$3, Dropdown.clearMenus);\nEventHandler.on(document, EVENT_KEYUP_DATA_API, Dropdown.clearMenus);\nEventHandler.on(document, EVENT_CLICK_DATA_API$3, SELECTOR_DATA_TOGGLE$3, function (event) {\n  event.preventDefault();\n  Dropdown.dropdownInterface(this);\n});\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Dropdown to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Dropdown);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): util/scrollBar.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\nconst SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top';\nconst SELECTOR_STICKY_CONTENT = '.sticky-top';\n\nclass ScrollBarHelper {\n  constructor() {\n    this._element = document.body;\n  }\n\n  getWidth() {\n    // https://developer.mozilla.org/en-US/docs/Web/API/Window/innerWidth#usage_notes\n    const documentWidth = document.documentElement.clientWidth;\n    return Math.abs(window.innerWidth - documentWidth);\n  }\n\n  hide() {\n    const width = this.getWidth();\n\n    this._disableOverFlow(); // give padding to element to balance the hidden scrollbar width\n\n\n    this._setElementAttributes(this._element, 'paddingRight', calculatedValue => calculatedValue + width); // trick: We adjust positive paddingRight and negative marginRight to sticky-top elements to keep showing fullwidth\n\n\n    this._setElementAttributes(SELECTOR_FIXED_CONTENT, 'paddingRight', calculatedValue => calculatedValue + width);\n\n    this._setElementAttributes(SELECTOR_STICKY_CONTENT, 'marginRight', calculatedValue => calculatedValue - width);\n  }\n\n  _disableOverFlow() {\n    this._saveInitialAttribute(this._element, 'overflow');\n\n    this._element.style.overflow = 'hidden';\n  }\n\n  _setElementAttributes(selector, styleProp, callback) {\n    const scrollbarWidth = this.getWidth();\n\n    const manipulationCallBack = element => {\n      if (element !== this._element && window.innerWidth > element.clientWidth + scrollbarWidth) {\n        return;\n      }\n\n      this._saveInitialAttribute(element, styleProp);\n\n      const calculatedValue = window.getComputedStyle(element)[styleProp];\n      element.style[styleProp] = `${callback(Number.parseFloat(calculatedValue))}px`;\n    };\n\n    this._applyManipulationCallback(selector, manipulationCallBack);\n  }\n\n  reset() {\n    this._resetElementAttributes(this._element, 'overflow');\n\n    this._resetElementAttributes(this._element, 'paddingRight');\n\n    this._resetElementAttributes(SELECTOR_FIXED_CONTENT, 'paddingRight');\n\n    this._resetElementAttributes(SELECTOR_STICKY_CONTENT, 'marginRight');\n  }\n\n  _saveInitialAttribute(element, styleProp) {\n    const actualValue = element.style[styleProp];\n\n    if (actualValue) {\n      Manipulator.setDataAttribute(element, styleProp, actualValue);\n    }\n  }\n\n  _resetElementAttributes(selector, styleProp) {\n    const manipulationCallBack = element => {\n      const value = Manipulator.getDataAttribute(element, styleProp);\n\n      if (typeof value === 'undefined') {\n        element.style.removeProperty(styleProp);\n      } else {\n        Manipulator.removeDataAttribute(element, styleProp);\n        element.style[styleProp] = value;\n      }\n    };\n\n    this._applyManipulationCallback(selector, manipulationCallBack);\n  }\n\n  _applyManipulationCallback(selector, callBack) {\n    if (isElement(selector)) {\n      callBack(selector);\n    } else {\n      SelectorEngine.find(selector, this._element).forEach(callBack);\n    }\n  }\n\n  isOverflowing() {\n    return this.getWidth() > 0;\n  }\n\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): util/backdrop.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\nconst Default$6 = {\n  isVisible: true,\n  // if false, we use the backdrop helper without adding any element to the dom\n  isAnimated: false,\n  rootElement: 'body',\n  // give the choice to place backdrop under different elements\n  clickCallback: null\n};\nconst DefaultType$6 = {\n  isVisible: 'boolean',\n  isAnimated: 'boolean',\n  rootElement: '(element|string)',\n  clickCallback: '(function|null)'\n};\nconst NAME$7 = 'backdrop';\nconst CLASS_NAME_BACKDROP = 'modal-backdrop';\nconst CLASS_NAME_FADE$5 = 'fade';\nconst CLASS_NAME_SHOW$6 = 'show';\nconst EVENT_MOUSEDOWN = `mousedown.bs.${NAME$7}`;\n\nclass Backdrop {\n  constructor(config) {\n    this._config = this._getConfig(config);\n    this._isAppended = false;\n    this._element = null;\n  }\n\n  show(callback) {\n    if (!this._config.isVisible) {\n      execute(callback);\n      return;\n    }\n\n    this._append();\n\n    if (this._config.isAnimated) {\n      reflow(this._getElement());\n    }\n\n    this._getElement().classList.add(CLASS_NAME_SHOW$6);\n\n    this._emulateAnimation(() => {\n      execute(callback);\n    });\n  }\n\n  hide(callback) {\n    if (!this._config.isVisible) {\n      execute(callback);\n      return;\n    }\n\n    this._getElement().classList.remove(CLASS_NAME_SHOW$6);\n\n    this._emulateAnimation(() => {\n      this.dispose();\n      execute(callback);\n    });\n  } // Private\n\n\n  _getElement() {\n    if (!this._element) {\n      const backdrop = document.createElement('div');\n      backdrop.className = CLASS_NAME_BACKDROP;\n\n      if (this._config.isAnimated) {\n        backdrop.classList.add(CLASS_NAME_FADE$5);\n      }\n\n      this._element = backdrop;\n    }\n\n    return this._element;\n  }\n\n  _getConfig(config) {\n    config = { ...Default$6,\n      ...(typeof config === 'object' ? config : {})\n    }; // use getElement() with the default \"body\" to get a fresh Element on each instantiation\n\n    config.rootElement = getElement(config.rootElement);\n    typeCheckConfig(NAME$7, config, DefaultType$6);\n    return config;\n  }\n\n  _append() {\n    if (this._isAppended) {\n      return;\n    }\n\n    this._config.rootElement.appendChild(this._getElement());\n\n    EventHandler.on(this._getElement(), EVENT_MOUSEDOWN, () => {\n      execute(this._config.clickCallback);\n    });\n    this._isAppended = true;\n  }\n\n  dispose() {\n    if (!this._isAppended) {\n      return;\n    }\n\n    EventHandler.off(this._element, EVENT_MOUSEDOWN);\n\n    this._element.remove();\n\n    this._isAppended = false;\n  }\n\n  _emulateAnimation(callback) {\n    executeAfterTransition(callback, this._getElement(), this._config.isAnimated);\n  }\n\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): modal.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$6 = 'modal';\nconst DATA_KEY$6 = 'bs.modal';\nconst EVENT_KEY$6 = `.${DATA_KEY$6}`;\nconst DATA_API_KEY$3 = '.data-api';\nconst ESCAPE_KEY$1 = 'Escape';\nconst Default$5 = {\n  backdrop: true,\n  keyboard: true,\n  focus: true\n};\nconst DefaultType$5 = {\n  backdrop: '(boolean|string)',\n  keyboard: 'boolean',\n  focus: 'boolean'\n};\nconst EVENT_HIDE$3 = `hide${EVENT_KEY$6}`;\nconst EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY$6}`;\nconst EVENT_HIDDEN$3 = `hidden${EVENT_KEY$6}`;\nconst EVENT_SHOW$3 = `show${EVENT_KEY$6}`;\nconst EVENT_SHOWN$3 = `shown${EVENT_KEY$6}`;\nconst EVENT_FOCUSIN$2 = `focusin${EVENT_KEY$6}`;\nconst EVENT_RESIZE = `resize${EVENT_KEY$6}`;\nconst EVENT_CLICK_DISMISS$2 = `click.dismiss${EVENT_KEY$6}`;\nconst EVENT_KEYDOWN_DISMISS$1 = `keydown.dismiss${EVENT_KEY$6}`;\nconst EVENT_MOUSEUP_DISMISS = `mouseup.dismiss${EVENT_KEY$6}`;\nconst EVENT_MOUSEDOWN_DISMISS = `mousedown.dismiss${EVENT_KEY$6}`;\nconst EVENT_CLICK_DATA_API$2 = `click${EVENT_KEY$6}${DATA_API_KEY$3}`;\nconst CLASS_NAME_OPEN = 'modal-open';\nconst CLASS_NAME_FADE$4 = 'fade';\nconst CLASS_NAME_SHOW$5 = 'show';\nconst CLASS_NAME_STATIC = 'modal-static';\nconst SELECTOR_DIALOG = '.modal-dialog';\nconst SELECTOR_MODAL_BODY = '.modal-body';\nconst SELECTOR_DATA_TOGGLE$2 = '[data-bs-toggle=\"modal\"]';\nconst SELECTOR_DATA_DISMISS$2 = '[data-bs-dismiss=\"modal\"]';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Modal extends BaseComponent {\n  constructor(element, config) {\n    super(element);\n    this._config = this._getConfig(config);\n    this._dialog = SelectorEngine.findOne(SELECTOR_DIALOG, this._element);\n    this._backdrop = this._initializeBackDrop();\n    this._isShown = false;\n    this._ignoreBackdropClick = false;\n    this._isTransitioning = false;\n    this._scrollBar = new ScrollBarHelper();\n  } // Getters\n\n\n  static get Default() {\n    return Default$5;\n  }\n\n  static get NAME() {\n    return NAME$6;\n  } // Public\n\n\n  toggle(relatedTarget) {\n    return this._isShown ? this.hide() : this.show(relatedTarget);\n  }\n\n  show(relatedTarget) {\n    if (this._isShown || this._isTransitioning) {\n      return;\n    }\n\n    const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$3, {\n      relatedTarget\n    });\n\n    if (showEvent.defaultPrevented) {\n      return;\n    }\n\n    this._isShown = true;\n\n    if (this._isAnimated()) {\n      this._isTransitioning = true;\n    }\n\n    this._scrollBar.hide();\n\n    document.body.classList.add(CLASS_NAME_OPEN);\n\n    this._adjustDialog();\n\n    this._setEscapeEvent();\n\n    this._setResizeEvent();\n\n    EventHandler.on(this._element, EVENT_CLICK_DISMISS$2, SELECTOR_DATA_DISMISS$2, event => this.hide(event));\n    EventHandler.on(this._dialog, EVENT_MOUSEDOWN_DISMISS, () => {\n      EventHandler.one(this._element, EVENT_MOUSEUP_DISMISS, event => {\n        if (event.target === this._element) {\n          this._ignoreBackdropClick = true;\n        }\n      });\n    });\n\n    this._showBackdrop(() => this._showElement(relatedTarget));\n  }\n\n  hide(event) {\n    if (event && ['A', 'AREA'].includes(event.target.tagName)) {\n      event.preventDefault();\n    }\n\n    if (!this._isShown || this._isTransitioning) {\n      return;\n    }\n\n    const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$3);\n\n    if (hideEvent.defaultPrevented) {\n      return;\n    }\n\n    this._isShown = false;\n\n    const isAnimated = this._isAnimated();\n\n    if (isAnimated) {\n      this._isTransitioning = true;\n    }\n\n    this._setEscapeEvent();\n\n    this._setResizeEvent();\n\n    EventHandler.off(document, EVENT_FOCUSIN$2);\n\n    this._element.classList.remove(CLASS_NAME_SHOW$5);\n\n    EventHandler.off(this._element, EVENT_CLICK_DISMISS$2);\n    EventHandler.off(this._dialog, EVENT_MOUSEDOWN_DISMISS);\n\n    this._queueCallback(() => this._hideModal(), this._element, isAnimated);\n  }\n\n  dispose() {\n    [window, this._dialog].forEach(htmlElement => EventHandler.off(htmlElement, EVENT_KEY$6));\n\n    this._backdrop.dispose();\n\n    super.dispose();\n    /**\n     * `document` has 2 events `EVENT_FOCUSIN` and `EVENT_CLICK_DATA_API`\n     * Do not move `document` in `htmlElements` array\n     * It will remove `EVENT_CLICK_DATA_API` event that should remain\n     */\n\n    EventHandler.off(document, EVENT_FOCUSIN$2);\n  }\n\n  handleUpdate() {\n    this._adjustDialog();\n  } // Private\n\n\n  _initializeBackDrop() {\n    return new Backdrop({\n      isVisible: Boolean(this._config.backdrop),\n      // 'static' option will be translated to true, and booleans will keep their value\n      isAnimated: this._isAnimated()\n    });\n  }\n\n  _getConfig(config) {\n    config = { ...Default$5,\n      ...Manipulator.getDataAttributes(this._element),\n      ...(typeof config === 'object' ? config : {})\n    };\n    typeCheckConfig(NAME$6, config, DefaultType$5);\n    return config;\n  }\n\n  _showElement(relatedTarget) {\n    const isAnimated = this._isAnimated();\n\n    const modalBody = SelectorEngine.findOne(SELECTOR_MODAL_BODY, this._dialog);\n\n    if (!this._element.parentNode || this._element.parentNode.nodeType !== Node.ELEMENT_NODE) {\n      // Don't move modal's DOM position\n      document.body.appendChild(this._element);\n    }\n\n    this._element.style.display = 'block';\n\n    this._element.removeAttribute('aria-hidden');\n\n    this._element.setAttribute('aria-modal', true);\n\n    this._element.setAttribute('role', 'dialog');\n\n    this._element.scrollTop = 0;\n\n    if (modalBody) {\n      modalBody.scrollTop = 0;\n    }\n\n    if (isAnimated) {\n      reflow(this._element);\n    }\n\n    this._element.classList.add(CLASS_NAME_SHOW$5);\n\n    if (this._config.focus) {\n      this._enforceFocus();\n    }\n\n    const transitionComplete = () => {\n      if (this._config.focus) {\n        this._element.focus();\n      }\n\n      this._isTransitioning = false;\n      EventHandler.trigger(this._element, EVENT_SHOWN$3, {\n        relatedTarget\n      });\n    };\n\n    this._queueCallback(transitionComplete, this._dialog, isAnimated);\n  }\n\n  _enforceFocus() {\n    EventHandler.off(document, EVENT_FOCUSIN$2); // guard against infinite focus loop\n\n    EventHandler.on(document, EVENT_FOCUSIN$2, event => {\n      if (document !== event.target && this._element !== event.target && !this._element.contains(event.target)) {\n        this._element.focus();\n      }\n    });\n  }\n\n  _setEscapeEvent() {\n    if (this._isShown) {\n      EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS$1, event => {\n        if (this._config.keyboard && event.key === ESCAPE_KEY$1) {\n          event.preventDefault();\n          this.hide();\n        } else if (!this._config.keyboard && event.key === ESCAPE_KEY$1) {\n          this._triggerBackdropTransition();\n        }\n      });\n    } else {\n      EventHandler.off(this._element, EVENT_KEYDOWN_DISMISS$1);\n    }\n  }\n\n  _setResizeEvent() {\n    if (this._isShown) {\n      EventHandler.on(window, EVENT_RESIZE, () => this._adjustDialog());\n    } else {\n      EventHandler.off(window, EVENT_RESIZE);\n    }\n  }\n\n  _hideModal() {\n    this._element.style.display = 'none';\n\n    this._element.setAttribute('aria-hidden', true);\n\n    this._element.removeAttribute('aria-modal');\n\n    this._element.removeAttribute('role');\n\n    this._isTransitioning = false;\n\n    this._backdrop.hide(() => {\n      document.body.classList.remove(CLASS_NAME_OPEN);\n\n      this._resetAdjustments();\n\n      this._scrollBar.reset();\n\n      EventHandler.trigger(this._element, EVENT_HIDDEN$3);\n    });\n  }\n\n  _showBackdrop(callback) {\n    EventHandler.on(this._element, EVENT_CLICK_DISMISS$2, event => {\n      if (this._ignoreBackdropClick) {\n        this._ignoreBackdropClick = false;\n        return;\n      }\n\n      if (event.target !== event.currentTarget) {\n        return;\n      }\n\n      if (this._config.backdrop === true) {\n        this.hide();\n      } else if (this._config.backdrop === 'static') {\n        this._triggerBackdropTransition();\n      }\n    });\n\n    this._backdrop.show(callback);\n  }\n\n  _isAnimated() {\n    return this._element.classList.contains(CLASS_NAME_FADE$4);\n  }\n\n  _triggerBackdropTransition() {\n    const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED);\n\n    if (hideEvent.defaultPrevented) {\n      return;\n    }\n\n    const {\n      classList,\n      scrollHeight,\n      style\n    } = this._element;\n    const isModalOverflowing = scrollHeight > document.documentElement.clientHeight; // return if the following background transition hasn't yet completed\n\n    if (!isModalOverflowing && style.overflowY === 'hidden' || classList.contains(CLASS_NAME_STATIC)) {\n      return;\n    }\n\n    if (!isModalOverflowing) {\n      style.overflowY = 'hidden';\n    }\n\n    classList.add(CLASS_NAME_STATIC);\n\n    this._queueCallback(() => {\n      classList.remove(CLASS_NAME_STATIC);\n\n      if (!isModalOverflowing) {\n        this._queueCallback(() => {\n          style.overflowY = '';\n        }, this._dialog);\n      }\n    }, this._dialog);\n\n    this._element.focus();\n  } // ----------------------------------------------------------------------\n  // the following methods are used to handle overflowing modals\n  // ----------------------------------------------------------------------\n\n\n  _adjustDialog() {\n    const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;\n\n    const scrollbarWidth = this._scrollBar.getWidth();\n\n    const isBodyOverflowing = scrollbarWidth > 0;\n\n    if (!isBodyOverflowing && isModalOverflowing && !isRTL() || isBodyOverflowing && !isModalOverflowing && isRTL()) {\n      this._element.style.paddingLeft = `${scrollbarWidth}px`;\n    }\n\n    if (isBodyOverflowing && !isModalOverflowing && !isRTL() || !isBodyOverflowing && isModalOverflowing && isRTL()) {\n      this._element.style.paddingRight = `${scrollbarWidth}px`;\n    }\n  }\n\n  _resetAdjustments() {\n    this._element.style.paddingLeft = '';\n    this._element.style.paddingRight = '';\n  } // Static\n\n\n  static jQueryInterface(config, relatedTarget) {\n    return this.each(function () {\n      const data = Modal.getOrCreateInstance(this, config);\n\n      if (typeof config !== 'string') {\n        return;\n      }\n\n      if (typeof data[config] === 'undefined') {\n        throw new TypeError(`No method named \"${config}\"`);\n      }\n\n      data[config](relatedTarget);\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$2, SELECTOR_DATA_TOGGLE$2, function (event) {\n  const target = getElementFromSelector(this);\n\n  if (['A', 'AREA'].includes(this.tagName)) {\n    event.preventDefault();\n  }\n\n  EventHandler.one(target, EVENT_SHOW$3, showEvent => {\n    if (showEvent.defaultPrevented) {\n      // only register focus restorer if modal will actually get shown\n      return;\n    }\n\n    EventHandler.one(target, EVENT_HIDDEN$3, () => {\n      if (isVisible(this)) {\n        this.focus();\n      }\n    });\n  });\n  const data = Modal.getOrCreateInstance(target);\n  data.toggle(this);\n});\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Modal to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Modal);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): offcanvas.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$5 = 'offcanvas';\nconst DATA_KEY$5 = 'bs.offcanvas';\nconst EVENT_KEY$5 = `.${DATA_KEY$5}`;\nconst DATA_API_KEY$2 = '.data-api';\nconst EVENT_LOAD_DATA_API$1 = `load${EVENT_KEY$5}${DATA_API_KEY$2}`;\nconst ESCAPE_KEY = 'Escape';\nconst Default$4 = {\n  backdrop: true,\n  keyboard: true,\n  scroll: false\n};\nconst DefaultType$4 = {\n  backdrop: 'boolean',\n  keyboard: 'boolean',\n  scroll: 'boolean'\n};\nconst CLASS_NAME_SHOW$4 = 'show';\nconst OPEN_SELECTOR = '.offcanvas.show';\nconst EVENT_SHOW$2 = `show${EVENT_KEY$5}`;\nconst EVENT_SHOWN$2 = `shown${EVENT_KEY$5}`;\nconst EVENT_HIDE$2 = `hide${EVENT_KEY$5}`;\nconst EVENT_HIDDEN$2 = `hidden${EVENT_KEY$5}`;\nconst EVENT_FOCUSIN$1 = `focusin${EVENT_KEY$5}`;\nconst EVENT_CLICK_DATA_API$1 = `click${EVENT_KEY$5}${DATA_API_KEY$2}`;\nconst EVENT_CLICK_DISMISS$1 = `click.dismiss${EVENT_KEY$5}`;\nconst EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY$5}`;\nconst SELECTOR_DATA_DISMISS$1 = '[data-bs-dismiss=\"offcanvas\"]';\nconst SELECTOR_DATA_TOGGLE$1 = '[data-bs-toggle=\"offcanvas\"]';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Offcanvas extends BaseComponent {\n  constructor(element, config) {\n    super(element);\n    this._config = this._getConfig(config);\n    this._isShown = false;\n    this._backdrop = this._initializeBackDrop();\n\n    this._addEventListeners();\n  } // Getters\n\n\n  static get NAME() {\n    return NAME$5;\n  }\n\n  static get Default() {\n    return Default$4;\n  } // Public\n\n\n  toggle(relatedTarget) {\n    return this._isShown ? this.hide() : this.show(relatedTarget);\n  }\n\n  show(relatedTarget) {\n    if (this._isShown) {\n      return;\n    }\n\n    const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$2, {\n      relatedTarget\n    });\n\n    if (showEvent.defaultPrevented) {\n      return;\n    }\n\n    this._isShown = true;\n    this._element.style.visibility = 'visible';\n\n    this._backdrop.show();\n\n    if (!this._config.scroll) {\n      new ScrollBarHelper().hide();\n\n      this._enforceFocusOnElement(this._element);\n    }\n\n    this._element.removeAttribute('aria-hidden');\n\n    this._element.setAttribute('aria-modal', true);\n\n    this._element.setAttribute('role', 'dialog');\n\n    this._element.classList.add(CLASS_NAME_SHOW$4);\n\n    const completeCallBack = () => {\n      EventHandler.trigger(this._element, EVENT_SHOWN$2, {\n        relatedTarget\n      });\n    };\n\n    this._queueCallback(completeCallBack, this._element, true);\n  }\n\n  hide() {\n    if (!this._isShown) {\n      return;\n    }\n\n    const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$2);\n\n    if (hideEvent.defaultPrevented) {\n      return;\n    }\n\n    EventHandler.off(document, EVENT_FOCUSIN$1);\n\n    this._element.blur();\n\n    this._isShown = false;\n\n    this._element.classList.remove(CLASS_NAME_SHOW$4);\n\n    this._backdrop.hide();\n\n    const completeCallback = () => {\n      this._element.setAttribute('aria-hidden', true);\n\n      this._element.removeAttribute('aria-modal');\n\n      this._element.removeAttribute('role');\n\n      this._element.style.visibility = 'hidden';\n\n      if (!this._config.scroll) {\n        new ScrollBarHelper().reset();\n      }\n\n      EventHandler.trigger(this._element, EVENT_HIDDEN$2);\n    };\n\n    this._queueCallback(completeCallback, this._element, true);\n  }\n\n  dispose() {\n    this._backdrop.dispose();\n\n    super.dispose();\n    EventHandler.off(document, EVENT_FOCUSIN$1);\n  } // Private\n\n\n  _getConfig(config) {\n    config = { ...Default$4,\n      ...Manipulator.getDataAttributes(this._element),\n      ...(typeof config === 'object' ? config : {})\n    };\n    typeCheckConfig(NAME$5, config, DefaultType$4);\n    return config;\n  }\n\n  _initializeBackDrop() {\n    return new Backdrop({\n      isVisible: this._config.backdrop,\n      isAnimated: true,\n      rootElement: this._element.parentNode,\n      clickCallback: () => this.hide()\n    });\n  }\n\n  _enforceFocusOnElement(element) {\n    EventHandler.off(document, EVENT_FOCUSIN$1); // guard against infinite focus loop\n\n    EventHandler.on(document, EVENT_FOCUSIN$1, event => {\n      if (document !== event.target && element !== event.target && !element.contains(event.target)) {\n        element.focus();\n      }\n    });\n    element.focus();\n  }\n\n  _addEventListeners() {\n    EventHandler.on(this._element, EVENT_CLICK_DISMISS$1, SELECTOR_DATA_DISMISS$1, () => this.hide());\n    EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS, event => {\n      if (this._config.keyboard && event.key === ESCAPE_KEY) {\n        this.hide();\n      }\n    });\n  } // Static\n\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Offcanvas.getOrCreateInstance(this, config);\n\n      if (typeof config !== 'string') {\n        return;\n      }\n\n      if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n        throw new TypeError(`No method named \"${config}\"`);\n      }\n\n      data[config](this);\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$1, SELECTOR_DATA_TOGGLE$1, function (event) {\n  const target = getElementFromSelector(this);\n\n  if (['A', 'AREA'].includes(this.tagName)) {\n    event.preventDefault();\n  }\n\n  if (isDisabled(this)) {\n    return;\n  }\n\n  EventHandler.one(target, EVENT_HIDDEN$2, () => {\n    // focus on trigger when it is closed\n    if (isVisible(this)) {\n      this.focus();\n    }\n  }); // avoid conflict when clicking a toggler of an offcanvas, while another is open\n\n  const allReadyOpen = SelectorEngine.findOne(OPEN_SELECTOR);\n\n  if (allReadyOpen && allReadyOpen !== target) {\n    Offcanvas.getInstance(allReadyOpen).hide();\n  }\n\n  const data = Offcanvas.getOrCreateInstance(target);\n  data.toggle(this);\n});\nEventHandler.on(window, EVENT_LOAD_DATA_API$1, () => SelectorEngine.find(OPEN_SELECTOR).forEach(el => Offcanvas.getOrCreateInstance(el).show()));\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\ndefineJQueryPlugin(Offcanvas);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): util/sanitizer.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\nconst uriAttrs = new Set(['background', 'cite', 'href', 'itemtype', 'longdesc', 'poster', 'src', 'xlink:href']);\nconst ARIA_ATTRIBUTE_PATTERN = /^aria-[\\w-]*$/i;\n/**\n * A pattern that recognizes a commonly useful subset of URLs that are safe.\n *\n * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts\n */\n\nconst SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file):|[^#&/:?]*(?:[#/?]|$))/i;\n/**\n * A pattern that matches safe data URLs. Only matches image, video and audio types.\n *\n * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts\n */\n\nconst DATA_URL_PATTERN = /^data:(?:image\\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\\/(?:mpeg|mp4|ogg|webm)|audio\\/(?:mp3|oga|ogg|opus));base64,[\\d+/a-z]+=*$/i;\n\nconst allowedAttribute = (attr, allowedAttributeList) => {\n  const attrName = attr.nodeName.toLowerCase();\n\n  if (allowedAttributeList.includes(attrName)) {\n    if (uriAttrs.has(attrName)) {\n      return Boolean(SAFE_URL_PATTERN.test(attr.nodeValue) || DATA_URL_PATTERN.test(attr.nodeValue));\n    }\n\n    return true;\n  }\n\n  const regExp = allowedAttributeList.filter(attrRegex => attrRegex instanceof RegExp); // Check if a regular expression validates the attribute.\n\n  for (let i = 0, len = regExp.length; i < len; i++) {\n    if (regExp[i].test(attrName)) {\n      return true;\n    }\n  }\n\n  return false;\n};\n\nconst DefaultAllowlist = {\n  // Global attributes allowed on any supplied element below.\n  '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],\n  a: ['target', 'href', 'title', 'rel'],\n  area: [],\n  b: [],\n  br: [],\n  col: [],\n  code: [],\n  div: [],\n  em: [],\n  hr: [],\n  h1: [],\n  h2: [],\n  h3: [],\n  h4: [],\n  h5: [],\n  h6: [],\n  i: [],\n  img: ['src', 'srcset', 'alt', 'title', 'width', 'height'],\n  li: [],\n  ol: [],\n  p: [],\n  pre: [],\n  s: [],\n  small: [],\n  span: [],\n  sub: [],\n  sup: [],\n  strong: [],\n  u: [],\n  ul: []\n};\nfunction sanitizeHtml(unsafeHtml, allowList, sanitizeFn) {\n  if (!unsafeHtml.length) {\n    return unsafeHtml;\n  }\n\n  if (sanitizeFn && typeof sanitizeFn === 'function') {\n    return sanitizeFn(unsafeHtml);\n  }\n\n  const domParser = new window.DOMParser();\n  const createdDocument = domParser.parseFromString(unsafeHtml, 'text/html');\n  const allowlistKeys = Object.keys(allowList);\n  const elements = [].concat(...createdDocument.body.querySelectorAll('*'));\n\n  for (let i = 0, len = elements.length; i < len; i++) {\n    const el = elements[i];\n    const elName = el.nodeName.toLowerCase();\n\n    if (!allowlistKeys.includes(elName)) {\n      el.remove();\n      continue;\n    }\n\n    const attributeList = [].concat(...el.attributes);\n    const allowedAttributes = [].concat(allowList['*'] || [], allowList[elName] || []);\n    attributeList.forEach(attr => {\n      if (!allowedAttribute(attr, allowedAttributes)) {\n        el.removeAttribute(attr.nodeName);\n      }\n    });\n  }\n\n  return createdDocument.body.innerHTML;\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): tooltip.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$4 = 'tooltip';\nconst DATA_KEY$4 = 'bs.tooltip';\nconst EVENT_KEY$4 = `.${DATA_KEY$4}`;\nconst CLASS_PREFIX$1 = 'bs-tooltip';\nconst BSCLS_PREFIX_REGEX$1 = new RegExp(`(^|\\\\s)${CLASS_PREFIX$1}\\\\S+`, 'g');\nconst DISALLOWED_ATTRIBUTES = new Set(['sanitize', 'allowList', 'sanitizeFn']);\nconst DefaultType$3 = {\n  animation: 'boolean',\n  template: 'string',\n  title: '(string|element|function)',\n  trigger: 'string',\n  delay: '(number|object)',\n  html: 'boolean',\n  selector: '(string|boolean)',\n  placement: '(string|function)',\n  offset: '(array|string|function)',\n  container: '(string|element|boolean)',\n  fallbackPlacements: 'array',\n  boundary: '(string|element)',\n  customClass: '(string|function)',\n  sanitize: 'boolean',\n  sanitizeFn: '(null|function)',\n  allowList: 'object',\n  popperConfig: '(null|object|function)'\n};\nconst AttachmentMap = {\n  AUTO: 'auto',\n  TOP: 'top',\n  RIGHT: isRTL() ? 'left' : 'right',\n  BOTTOM: 'bottom',\n  LEFT: isRTL() ? 'right' : 'left'\n};\nconst Default$3 = {\n  animation: true,\n  template: '<div class=\"tooltip\" role=\"tooltip\">' + '<div class=\"tooltip-arrow\"></div>' + '<div class=\"tooltip-inner\"></div>' + '</div>',\n  trigger: 'hover focus',\n  title: '',\n  delay: 0,\n  html: false,\n  selector: false,\n  placement: 'top',\n  offset: [0, 0],\n  container: false,\n  fallbackPlacements: ['top', 'right', 'bottom', 'left'],\n  boundary: 'clippingParents',\n  customClass: '',\n  sanitize: true,\n  sanitizeFn: null,\n  allowList: DefaultAllowlist,\n  popperConfig: null\n};\nconst Event$2 = {\n  HIDE: `hide${EVENT_KEY$4}`,\n  HIDDEN: `hidden${EVENT_KEY$4}`,\n  SHOW: `show${EVENT_KEY$4}`,\n  SHOWN: `shown${EVENT_KEY$4}`,\n  INSERTED: `inserted${EVENT_KEY$4}`,\n  CLICK: `click${EVENT_KEY$4}`,\n  FOCUSIN: `focusin${EVENT_KEY$4}`,\n  FOCUSOUT: `focusout${EVENT_KEY$4}`,\n  MOUSEENTER: `mouseenter${EVENT_KEY$4}`,\n  MOUSELEAVE: `mouseleave${EVENT_KEY$4}`\n};\nconst CLASS_NAME_FADE$3 = 'fade';\nconst CLASS_NAME_MODAL = 'modal';\nconst CLASS_NAME_SHOW$3 = 'show';\nconst HOVER_STATE_SHOW = 'show';\nconst HOVER_STATE_OUT = 'out';\nconst SELECTOR_TOOLTIP_INNER = '.tooltip-inner';\nconst TRIGGER_HOVER = 'hover';\nconst TRIGGER_FOCUS = 'focus';\nconst TRIGGER_CLICK = 'click';\nconst TRIGGER_MANUAL = 'manual';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Tooltip extends BaseComponent {\n  constructor(element, config) {\n    if (typeof Popper === 'undefined') {\n      throw new TypeError('Bootstrap\\'s tooltips require Popper (https://popper.js.org)');\n    }\n\n    super(element); // private\n\n    this._isEnabled = true;\n    this._timeout = 0;\n    this._hoverState = '';\n    this._activeTrigger = {};\n    this._popper = null; // Protected\n\n    this._config = this._getConfig(config);\n    this.tip = null;\n\n    this._setListeners();\n  } // Getters\n\n\n  static get Default() {\n    return Default$3;\n  }\n\n  static get NAME() {\n    return NAME$4;\n  }\n\n  static get Event() {\n    return Event$2;\n  }\n\n  static get DefaultType() {\n    return DefaultType$3;\n  } // Public\n\n\n  enable() {\n    this._isEnabled = true;\n  }\n\n  disable() {\n    this._isEnabled = false;\n  }\n\n  toggleEnabled() {\n    this._isEnabled = !this._isEnabled;\n  }\n\n  toggle(event) {\n    if (!this._isEnabled) {\n      return;\n    }\n\n    if (event) {\n      const context = this._initializeOnDelegatedTarget(event);\n\n      context._activeTrigger.click = !context._activeTrigger.click;\n\n      if (context._isWithActiveTrigger()) {\n        context._enter(null, context);\n      } else {\n        context._leave(null, context);\n      }\n    } else {\n      if (this.getTipElement().classList.contains(CLASS_NAME_SHOW$3)) {\n        this._leave(null, this);\n\n        return;\n      }\n\n      this._enter(null, this);\n    }\n  }\n\n  dispose() {\n    clearTimeout(this._timeout);\n    EventHandler.off(this._element.closest(`.${CLASS_NAME_MODAL}`), 'hide.bs.modal', this._hideModalHandler);\n\n    if (this.tip) {\n      this.tip.remove();\n    }\n\n    if (this._popper) {\n      this._popper.destroy();\n    }\n\n    super.dispose();\n  }\n\n  show() {\n    if (this._element.style.display === 'none') {\n      throw new Error('Please use show on visible elements');\n    }\n\n    if (!(this.isWithContent() && this._isEnabled)) {\n      return;\n    }\n\n    const showEvent = EventHandler.trigger(this._element, this.constructor.Event.SHOW);\n    const shadowRoot = findShadowRoot(this._element);\n    const isInTheDom = shadowRoot === null ? this._element.ownerDocument.documentElement.contains(this._element) : shadowRoot.contains(this._element);\n\n    if (showEvent.defaultPrevented || !isInTheDom) {\n      return;\n    }\n\n    const tip = this.getTipElement();\n    const tipId = getUID(this.constructor.NAME);\n    tip.setAttribute('id', tipId);\n\n    this._element.setAttribute('aria-describedby', tipId);\n\n    this.setContent();\n\n    if (this._config.animation) {\n      tip.classList.add(CLASS_NAME_FADE$3);\n    }\n\n    const placement = typeof this._config.placement === 'function' ? this._config.placement.call(this, tip, this._element) : this._config.placement;\n\n    const attachment = this._getAttachment(placement);\n\n    this._addAttachmentClass(attachment);\n\n    const {\n      container\n    } = this._config;\n    Data.set(tip, this.constructor.DATA_KEY, this);\n\n    if (!this._element.ownerDocument.documentElement.contains(this.tip)) {\n      container.appendChild(tip);\n      EventHandler.trigger(this._element, this.constructor.Event.INSERTED);\n    }\n\n    if (this._popper) {\n      this._popper.update();\n    } else {\n      this._popper = Popper.createPopper(this._element, tip, this._getPopperConfig(attachment));\n    }\n\n    tip.classList.add(CLASS_NAME_SHOW$3);\n    const customClass = typeof this._config.customClass === 'function' ? this._config.customClass() : this._config.customClass;\n\n    if (customClass) {\n      tip.classList.add(...customClass.split(' '));\n    } // If this is a touch-enabled device we add extra\n    // empty mouseover listeners to the body's immediate children;\n    // only needed because of broken event delegation on iOS\n    // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n\n\n    if ('ontouchstart' in document.documentElement) {\n      [].concat(...document.body.children).forEach(element => {\n        EventHandler.on(element, 'mouseover', noop);\n      });\n    }\n\n    const complete = () => {\n      const prevHoverState = this._hoverState;\n      this._hoverState = null;\n      EventHandler.trigger(this._element, this.constructor.Event.SHOWN);\n\n      if (prevHoverState === HOVER_STATE_OUT) {\n        this._leave(null, this);\n      }\n    };\n\n    const isAnimated = this.tip.classList.contains(CLASS_NAME_FADE$3);\n\n    this._queueCallback(complete, this.tip, isAnimated);\n  }\n\n  hide() {\n    if (!this._popper) {\n      return;\n    }\n\n    const tip = this.getTipElement();\n\n    const complete = () => {\n      if (this._isWithActiveTrigger()) {\n        return;\n      }\n\n      if (this._hoverState !== HOVER_STATE_SHOW) {\n        tip.remove();\n      }\n\n      this._cleanTipClass();\n\n      this._element.removeAttribute('aria-describedby');\n\n      EventHandler.trigger(this._element, this.constructor.Event.HIDDEN);\n\n      if (this._popper) {\n        this._popper.destroy();\n\n        this._popper = null;\n      }\n    };\n\n    const hideEvent = EventHandler.trigger(this._element, this.constructor.Event.HIDE);\n\n    if (hideEvent.defaultPrevented) {\n      return;\n    }\n\n    tip.classList.remove(CLASS_NAME_SHOW$3); // If this is a touch-enabled device we remove the extra\n    // empty mouseover listeners we added for iOS support\n\n    if ('ontouchstart' in document.documentElement) {\n      [].concat(...document.body.children).forEach(element => EventHandler.off(element, 'mouseover', noop));\n    }\n\n    this._activeTrigger[TRIGGER_CLICK] = false;\n    this._activeTrigger[TRIGGER_FOCUS] = false;\n    this._activeTrigger[TRIGGER_HOVER] = false;\n    const isAnimated = this.tip.classList.contains(CLASS_NAME_FADE$3);\n\n    this._queueCallback(complete, this.tip, isAnimated);\n\n    this._hoverState = '';\n  }\n\n  update() {\n    if (this._popper !== null) {\n      this._popper.update();\n    }\n  } // Protected\n\n\n  isWithContent() {\n    return Boolean(this.getTitle());\n  }\n\n  getTipElement() {\n    if (this.tip) {\n      return this.tip;\n    }\n\n    const element = document.createElement('div');\n    element.innerHTML = this._config.template;\n    this.tip = element.children[0];\n    return this.tip;\n  }\n\n  setContent() {\n    const tip = this.getTipElement();\n    this.setElementContent(SelectorEngine.findOne(SELECTOR_TOOLTIP_INNER, tip), this.getTitle());\n    tip.classList.remove(CLASS_NAME_FADE$3, CLASS_NAME_SHOW$3);\n  }\n\n  setElementContent(element, content) {\n    if (element === null) {\n      return;\n    }\n\n    if (isElement(content)) {\n      content = getElement(content); // content is a DOM node or a jQuery\n\n      if (this._config.html) {\n        if (content.parentNode !== element) {\n          element.innerHTML = '';\n          element.appendChild(content);\n        }\n      } else {\n        element.textContent = content.textContent;\n      }\n\n      return;\n    }\n\n    if (this._config.html) {\n      if (this._config.sanitize) {\n        content = sanitizeHtml(content, this._config.allowList, this._config.sanitizeFn);\n      }\n\n      element.innerHTML = content;\n    } else {\n      element.textContent = content;\n    }\n  }\n\n  getTitle() {\n    let title = this._element.getAttribute('data-bs-original-title');\n\n    if (!title) {\n      title = typeof this._config.title === 'function' ? this._config.title.call(this._element) : this._config.title;\n    }\n\n    return title;\n  }\n\n  updateAttachment(attachment) {\n    if (attachment === 'right') {\n      return 'end';\n    }\n\n    if (attachment === 'left') {\n      return 'start';\n    }\n\n    return attachment;\n  } // Private\n\n\n  _initializeOnDelegatedTarget(event, context) {\n    const dataKey = this.constructor.DATA_KEY;\n    context = context || Data.get(event.delegateTarget, dataKey);\n\n    if (!context) {\n      context = new this.constructor(event.delegateTarget, this._getDelegateConfig());\n      Data.set(event.delegateTarget, dataKey, context);\n    }\n\n    return context;\n  }\n\n  _getOffset() {\n    const {\n      offset\n    } = this._config;\n\n    if (typeof offset === 'string') {\n      return offset.split(',').map(val => Number.parseInt(val, 10));\n    }\n\n    if (typeof offset === 'function') {\n      return popperData => offset(popperData, this._element);\n    }\n\n    return offset;\n  }\n\n  _getPopperConfig(attachment) {\n    const defaultBsPopperConfig = {\n      placement: attachment,\n      modifiers: [{\n        name: 'flip',\n        options: {\n          fallbackPlacements: this._config.fallbackPlacements\n        }\n      }, {\n        name: 'offset',\n        options: {\n          offset: this._getOffset()\n        }\n      }, {\n        name: 'preventOverflow',\n        options: {\n          boundary: this._config.boundary\n        }\n      }, {\n        name: 'arrow',\n        options: {\n          element: `.${this.constructor.NAME}-arrow`\n        }\n      }, {\n        name: 'onChange',\n        enabled: true,\n        phase: 'afterWrite',\n        fn: data => this._handlePopperPlacementChange(data)\n      }],\n      onFirstUpdate: data => {\n        if (data.options.placement !== data.placement) {\n          this._handlePopperPlacementChange(data);\n        }\n      }\n    };\n    return { ...defaultBsPopperConfig,\n      ...(typeof this._config.popperConfig === 'function' ? this._config.popperConfig(defaultBsPopperConfig) : this._config.popperConfig)\n    };\n  }\n\n  _addAttachmentClass(attachment) {\n    this.getTipElement().classList.add(`${CLASS_PREFIX$1}-${this.updateAttachment(attachment)}`);\n  }\n\n  _getAttachment(placement) {\n    return AttachmentMap[placement.toUpperCase()];\n  }\n\n  _setListeners() {\n    const triggers = this._config.trigger.split(' ');\n\n    triggers.forEach(trigger => {\n      if (trigger === 'click') {\n        EventHandler.on(this._element, this.constructor.Event.CLICK, this._config.selector, event => this.toggle(event));\n      } else if (trigger !== TRIGGER_MANUAL) {\n        const eventIn = trigger === TRIGGER_HOVER ? this.constructor.Event.MOUSEENTER : this.constructor.Event.FOCUSIN;\n        const eventOut = trigger === TRIGGER_HOVER ? this.constructor.Event.MOUSELEAVE : this.constructor.Event.FOCUSOUT;\n        EventHandler.on(this._element, eventIn, this._config.selector, event => this._enter(event));\n        EventHandler.on(this._element, eventOut, this._config.selector, event => this._leave(event));\n      }\n    });\n\n    this._hideModalHandler = () => {\n      if (this._element) {\n        this.hide();\n      }\n    };\n\n    EventHandler.on(this._element.closest(`.${CLASS_NAME_MODAL}`), 'hide.bs.modal', this._hideModalHandler);\n\n    if (this._config.selector) {\n      this._config = { ...this._config,\n        trigger: 'manual',\n        selector: ''\n      };\n    } else {\n      this._fixTitle();\n    }\n  }\n\n  _fixTitle() {\n    const title = this._element.getAttribute('title');\n\n    const originalTitleType = typeof this._element.getAttribute('data-bs-original-title');\n\n    if (title || originalTitleType !== 'string') {\n      this._element.setAttribute('data-bs-original-title', title || '');\n\n      if (title && !this._element.getAttribute('aria-label') && !this._element.textContent) {\n        this._element.setAttribute('aria-label', title);\n      }\n\n      this._element.setAttribute('title', '');\n    }\n  }\n\n  _enter(event, context) {\n    context = this._initializeOnDelegatedTarget(event, context);\n\n    if (event) {\n      context._activeTrigger[event.type === 'focusin' ? TRIGGER_FOCUS : TRIGGER_HOVER] = true;\n    }\n\n    if (context.getTipElement().classList.contains(CLASS_NAME_SHOW$3) || context._hoverState === HOVER_STATE_SHOW) {\n      context._hoverState = HOVER_STATE_SHOW;\n      return;\n    }\n\n    clearTimeout(context._timeout);\n    context._hoverState = HOVER_STATE_SHOW;\n\n    if (!context._config.delay || !context._config.delay.show) {\n      context.show();\n      return;\n    }\n\n    context._timeout = setTimeout(() => {\n      if (context._hoverState === HOVER_STATE_SHOW) {\n        context.show();\n      }\n    }, context._config.delay.show);\n  }\n\n  _leave(event, context) {\n    context = this._initializeOnDelegatedTarget(event, context);\n\n    if (event) {\n      context._activeTrigger[event.type === 'focusout' ? TRIGGER_FOCUS : TRIGGER_HOVER] = context._element.contains(event.relatedTarget);\n    }\n\n    if (context._isWithActiveTrigger()) {\n      return;\n    }\n\n    clearTimeout(context._timeout);\n    context._hoverState = HOVER_STATE_OUT;\n\n    if (!context._config.delay || !context._config.delay.hide) {\n      context.hide();\n      return;\n    }\n\n    context._timeout = setTimeout(() => {\n      if (context._hoverState === HOVER_STATE_OUT) {\n        context.hide();\n      }\n    }, context._config.delay.hide);\n  }\n\n  _isWithActiveTrigger() {\n    for (const trigger in this._activeTrigger) {\n      if (this._activeTrigger[trigger]) {\n        return true;\n      }\n    }\n\n    return false;\n  }\n\n  _getConfig(config) {\n    const dataAttributes = Manipulator.getDataAttributes(this._element);\n    Object.keys(dataAttributes).forEach(dataAttr => {\n      if (DISALLOWED_ATTRIBUTES.has(dataAttr)) {\n        delete dataAttributes[dataAttr];\n      }\n    });\n    config = { ...this.constructor.Default,\n      ...dataAttributes,\n      ...(typeof config === 'object' && config ? config : {})\n    };\n    config.container = config.container === false ? document.body : getElement(config.container);\n\n    if (typeof config.delay === 'number') {\n      config.delay = {\n        show: config.delay,\n        hide: config.delay\n      };\n    }\n\n    if (typeof config.title === 'number') {\n      config.title = config.title.toString();\n    }\n\n    if (typeof config.content === 'number') {\n      config.content = config.content.toString();\n    }\n\n    typeCheckConfig(NAME$4, config, this.constructor.DefaultType);\n\n    if (config.sanitize) {\n      config.template = sanitizeHtml(config.template, config.allowList, config.sanitizeFn);\n    }\n\n    return config;\n  }\n\n  _getDelegateConfig() {\n    const config = {};\n\n    if (this._config) {\n      for (const key in this._config) {\n        if (this.constructor.Default[key] !== this._config[key]) {\n          config[key] = this._config[key];\n        }\n      }\n    }\n\n    return config;\n  }\n\n  _cleanTipClass() {\n    const tip = this.getTipElement();\n    const tabClass = tip.getAttribute('class').match(BSCLS_PREFIX_REGEX$1);\n\n    if (tabClass !== null && tabClass.length > 0) {\n      tabClass.map(token => token.trim()).forEach(tClass => tip.classList.remove(tClass));\n    }\n  }\n\n  _handlePopperPlacementChange(popperData) {\n    const {\n      state\n    } = popperData;\n\n    if (!state) {\n      return;\n    }\n\n    this.tip = state.elements.popper;\n\n    this._cleanTipClass();\n\n    this._addAttachmentClass(this._getAttachment(state.placement));\n  } // Static\n\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Tooltip.getOrCreateInstance(this, config);\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config]();\n      }\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Tooltip to jQuery only if jQuery is present\n */\n\n\ndefineJQueryPlugin(Tooltip);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): popover.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$3 = 'popover';\nconst DATA_KEY$3 = 'bs.popover';\nconst EVENT_KEY$3 = `.${DATA_KEY$3}`;\nconst CLASS_PREFIX = 'bs-popover';\nconst BSCLS_PREFIX_REGEX = new RegExp(`(^|\\\\s)${CLASS_PREFIX}\\\\S+`, 'g');\nconst Default$2 = { ...Tooltip.Default,\n  placement: 'right',\n  offset: [0, 8],\n  trigger: 'click',\n  content: '',\n  template: '<div class=\"popover\" role=\"tooltip\">' + '<div class=\"popover-arrow\"></div>' + '<h3 class=\"popover-header\"></h3>' + '<div class=\"popover-body\"></div>' + '</div>'\n};\nconst DefaultType$2 = { ...Tooltip.DefaultType,\n  content: '(string|element|function)'\n};\nconst Event$1 = {\n  HIDE: `hide${EVENT_KEY$3}`,\n  HIDDEN: `hidden${EVENT_KEY$3}`,\n  SHOW: `show${EVENT_KEY$3}`,\n  SHOWN: `shown${EVENT_KEY$3}`,\n  INSERTED: `inserted${EVENT_KEY$3}`,\n  CLICK: `click${EVENT_KEY$3}`,\n  FOCUSIN: `focusin${EVENT_KEY$3}`,\n  FOCUSOUT: `focusout${EVENT_KEY$3}`,\n  MOUSEENTER: `mouseenter${EVENT_KEY$3}`,\n  MOUSELEAVE: `mouseleave${EVENT_KEY$3}`\n};\nconst CLASS_NAME_FADE$2 = 'fade';\nconst CLASS_NAME_SHOW$2 = 'show';\nconst SELECTOR_TITLE = '.popover-header';\nconst SELECTOR_CONTENT = '.popover-body';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Popover extends Tooltip {\n  // Getters\n  static get Default() {\n    return Default$2;\n  }\n\n  static get NAME() {\n    return NAME$3;\n  }\n\n  static get Event() {\n    return Event$1;\n  }\n\n  static get DefaultType() {\n    return DefaultType$2;\n  } // Overrides\n\n\n  isWithContent() {\n    return this.getTitle() || this._getContent();\n  }\n\n  getTipElement() {\n    if (this.tip) {\n      return this.tip;\n    }\n\n    this.tip = super.getTipElement();\n\n    if (!this.getTitle()) {\n      SelectorEngine.findOne(SELECTOR_TITLE, this.tip).remove();\n    }\n\n    if (!this._getContent()) {\n      SelectorEngine.findOne(SELECTOR_CONTENT, this.tip).remove();\n    }\n\n    return this.tip;\n  }\n\n  setContent() {\n    const tip = this.getTipElement(); // we use append for html objects to maintain js events\n\n    this.setElementContent(SelectorEngine.findOne(SELECTOR_TITLE, tip), this.getTitle());\n\n    let content = this._getContent();\n\n    if (typeof content === 'function') {\n      content = content.call(this._element);\n    }\n\n    this.setElementContent(SelectorEngine.findOne(SELECTOR_CONTENT, tip), content);\n    tip.classList.remove(CLASS_NAME_FADE$2, CLASS_NAME_SHOW$2);\n  } // Private\n\n\n  _addAttachmentClass(attachment) {\n    this.getTipElement().classList.add(`${CLASS_PREFIX}-${this.updateAttachment(attachment)}`);\n  }\n\n  _getContent() {\n    return this._element.getAttribute('data-bs-content') || this._config.content;\n  }\n\n  _cleanTipClass() {\n    const tip = this.getTipElement();\n    const tabClass = tip.getAttribute('class').match(BSCLS_PREFIX_REGEX);\n\n    if (tabClass !== null && tabClass.length > 0) {\n      tabClass.map(token => token.trim()).forEach(tClass => tip.classList.remove(tClass));\n    }\n  } // Static\n\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Popover.getOrCreateInstance(this, config);\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config]();\n      }\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Popover to jQuery only if jQuery is present\n */\n\n\ndefineJQueryPlugin(Popover);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): scrollspy.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$2 = 'scrollspy';\nconst DATA_KEY$2 = 'bs.scrollspy';\nconst EVENT_KEY$2 = `.${DATA_KEY$2}`;\nconst DATA_API_KEY$1 = '.data-api';\nconst Default$1 = {\n  offset: 10,\n  method: 'auto',\n  target: ''\n};\nconst DefaultType$1 = {\n  offset: 'number',\n  method: 'string',\n  target: '(string|element)'\n};\nconst EVENT_ACTIVATE = `activate${EVENT_KEY$2}`;\nconst EVENT_SCROLL = `scroll${EVENT_KEY$2}`;\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY$2}${DATA_API_KEY$1}`;\nconst CLASS_NAME_DROPDOWN_ITEM = 'dropdown-item';\nconst CLASS_NAME_ACTIVE$1 = 'active';\nconst SELECTOR_DATA_SPY = '[data-bs-spy=\"scroll\"]';\nconst SELECTOR_NAV_LIST_GROUP$1 = '.nav, .list-group';\nconst SELECTOR_NAV_LINKS = '.nav-link';\nconst SELECTOR_NAV_ITEMS = '.nav-item';\nconst SELECTOR_LIST_ITEMS = '.list-group-item';\nconst SELECTOR_DROPDOWN$1 = '.dropdown';\nconst SELECTOR_DROPDOWN_TOGGLE$1 = '.dropdown-toggle';\nconst METHOD_OFFSET = 'offset';\nconst METHOD_POSITION = 'position';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass ScrollSpy extends BaseComponent {\n  constructor(element, config) {\n    super(element);\n    this._scrollElement = this._element.tagName === 'BODY' ? window : this._element;\n    this._config = this._getConfig(config);\n    this._selector = `${this._config.target} ${SELECTOR_NAV_LINKS}, ${this._config.target} ${SELECTOR_LIST_ITEMS}, ${this._config.target} .${CLASS_NAME_DROPDOWN_ITEM}`;\n    this._offsets = [];\n    this._targets = [];\n    this._activeTarget = null;\n    this._scrollHeight = 0;\n    EventHandler.on(this._scrollElement, EVENT_SCROLL, () => this._process());\n    this.refresh();\n\n    this._process();\n  } // Getters\n\n\n  static get Default() {\n    return Default$1;\n  }\n\n  static get NAME() {\n    return NAME$2;\n  } // Public\n\n\n  refresh() {\n    const autoMethod = this._scrollElement === this._scrollElement.window ? METHOD_OFFSET : METHOD_POSITION;\n    const offsetMethod = this._config.method === 'auto' ? autoMethod : this._config.method;\n    const offsetBase = offsetMethod === METHOD_POSITION ? this._getScrollTop() : 0;\n    this._offsets = [];\n    this._targets = [];\n    this._scrollHeight = this._getScrollHeight();\n    const targets = SelectorEngine.find(this._selector);\n    targets.map(element => {\n      const targetSelector = getSelectorFromElement(element);\n      const target = targetSelector ? SelectorEngine.findOne(targetSelector) : null;\n\n      if (target) {\n        const targetBCR = target.getBoundingClientRect();\n\n        if (targetBCR.width || targetBCR.height) {\n          return [Manipulator[offsetMethod](target).top + offsetBase, targetSelector];\n        }\n      }\n\n      return null;\n    }).filter(item => item).sort((a, b) => a[0] - b[0]).forEach(item => {\n      this._offsets.push(item[0]);\n\n      this._targets.push(item[1]);\n    });\n  }\n\n  dispose() {\n    EventHandler.off(this._scrollElement, EVENT_KEY$2);\n    super.dispose();\n  } // Private\n\n\n  _getConfig(config) {\n    config = { ...Default$1,\n      ...Manipulator.getDataAttributes(this._element),\n      ...(typeof config === 'object' && config ? config : {})\n    };\n\n    if (typeof config.target !== 'string' && isElement(config.target)) {\n      let {\n        id\n      } = config.target;\n\n      if (!id) {\n        id = getUID(NAME$2);\n        config.target.id = id;\n      }\n\n      config.target = `#${id}`;\n    }\n\n    typeCheckConfig(NAME$2, config, DefaultType$1);\n    return config;\n  }\n\n  _getScrollTop() {\n    return this._scrollElement === window ? this._scrollElement.pageYOffset : this._scrollElement.scrollTop;\n  }\n\n  _getScrollHeight() {\n    return this._scrollElement.scrollHeight || Math.max(document.body.scrollHeight, document.documentElement.scrollHeight);\n  }\n\n  _getOffsetHeight() {\n    return this._scrollElement === window ? window.innerHeight : this._scrollElement.getBoundingClientRect().height;\n  }\n\n  _process() {\n    const scrollTop = this._getScrollTop() + this._config.offset;\n\n    const scrollHeight = this._getScrollHeight();\n\n    const maxScroll = this._config.offset + scrollHeight - this._getOffsetHeight();\n\n    if (this._scrollHeight !== scrollHeight) {\n      this.refresh();\n    }\n\n    if (scrollTop >= maxScroll) {\n      const target = this._targets[this._targets.length - 1];\n\n      if (this._activeTarget !== target) {\n        this._activate(target);\n      }\n\n      return;\n    }\n\n    if (this._activeTarget && scrollTop < this._offsets[0] && this._offsets[0] > 0) {\n      this._activeTarget = null;\n\n      this._clear();\n\n      return;\n    }\n\n    for (let i = this._offsets.length; i--;) {\n      const isActiveTarget = this._activeTarget !== this._targets[i] && scrollTop >= this._offsets[i] && (typeof this._offsets[i + 1] === 'undefined' || scrollTop < this._offsets[i + 1]);\n\n      if (isActiveTarget) {\n        this._activate(this._targets[i]);\n      }\n    }\n  }\n\n  _activate(target) {\n    this._activeTarget = target;\n\n    this._clear();\n\n    const queries = this._selector.split(',').map(selector => `${selector}[data-bs-target=\"${target}\"],${selector}[href=\"${target}\"]`);\n\n    const link = SelectorEngine.findOne(queries.join(','));\n\n    if (link.classList.contains(CLASS_NAME_DROPDOWN_ITEM)) {\n      SelectorEngine.findOne(SELECTOR_DROPDOWN_TOGGLE$1, link.closest(SELECTOR_DROPDOWN$1)).classList.add(CLASS_NAME_ACTIVE$1);\n      link.classList.add(CLASS_NAME_ACTIVE$1);\n    } else {\n      // Set triggered link as active\n      link.classList.add(CLASS_NAME_ACTIVE$1);\n      SelectorEngine.parents(link, SELECTOR_NAV_LIST_GROUP$1).forEach(listGroup => {\n        // Set triggered links parents as active\n        // With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor\n        SelectorEngine.prev(listGroup, `${SELECTOR_NAV_LINKS}, ${SELECTOR_LIST_ITEMS}`).forEach(item => item.classList.add(CLASS_NAME_ACTIVE$1)); // Handle special case when .nav-link is inside .nav-item\n\n        SelectorEngine.prev(listGroup, SELECTOR_NAV_ITEMS).forEach(navItem => {\n          SelectorEngine.children(navItem, SELECTOR_NAV_LINKS).forEach(item => item.classList.add(CLASS_NAME_ACTIVE$1));\n        });\n      });\n    }\n\n    EventHandler.trigger(this._scrollElement, EVENT_ACTIVATE, {\n      relatedTarget: target\n    });\n  }\n\n  _clear() {\n    SelectorEngine.find(this._selector).filter(node => node.classList.contains(CLASS_NAME_ACTIVE$1)).forEach(node => node.classList.remove(CLASS_NAME_ACTIVE$1));\n  } // Static\n\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = ScrollSpy.getOrCreateInstance(this, config);\n\n      if (typeof config !== 'string') {\n        return;\n      }\n\n      if (typeof data[config] === 'undefined') {\n        throw new TypeError(`No method named \"${config}\"`);\n      }\n\n      data[config]();\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n  SelectorEngine.find(SELECTOR_DATA_SPY).forEach(spy => new ScrollSpy(spy));\n});\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .ScrollSpy to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(ScrollSpy);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): tab.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$1 = 'tab';\nconst DATA_KEY$1 = 'bs.tab';\nconst EVENT_KEY$1 = `.${DATA_KEY$1}`;\nconst DATA_API_KEY = '.data-api';\nconst EVENT_HIDE$1 = `hide${EVENT_KEY$1}`;\nconst EVENT_HIDDEN$1 = `hidden${EVENT_KEY$1}`;\nconst EVENT_SHOW$1 = `show${EVENT_KEY$1}`;\nconst EVENT_SHOWN$1 = `shown${EVENT_KEY$1}`;\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY$1}${DATA_API_KEY}`;\nconst CLASS_NAME_DROPDOWN_MENU = 'dropdown-menu';\nconst CLASS_NAME_ACTIVE = 'active';\nconst CLASS_NAME_FADE$1 = 'fade';\nconst CLASS_NAME_SHOW$1 = 'show';\nconst SELECTOR_DROPDOWN = '.dropdown';\nconst SELECTOR_NAV_LIST_GROUP = '.nav, .list-group';\nconst SELECTOR_ACTIVE = '.active';\nconst SELECTOR_ACTIVE_UL = ':scope > li > .active';\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"tab\"], [data-bs-toggle=\"pill\"], [data-bs-toggle=\"list\"]';\nconst SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle';\nconst SELECTOR_DROPDOWN_ACTIVE_CHILD = ':scope > .dropdown-menu .active';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Tab extends BaseComponent {\n  // Getters\n  static get NAME() {\n    return NAME$1;\n  } // Public\n\n\n  show() {\n    if (this._element.parentNode && this._element.parentNode.nodeType === Node.ELEMENT_NODE && this._element.classList.contains(CLASS_NAME_ACTIVE)) {\n      return;\n    }\n\n    let previous;\n    const target = getElementFromSelector(this._element);\n\n    const listElement = this._element.closest(SELECTOR_NAV_LIST_GROUP);\n\n    if (listElement) {\n      const itemSelector = listElement.nodeName === 'UL' || listElement.nodeName === 'OL' ? SELECTOR_ACTIVE_UL : SELECTOR_ACTIVE;\n      previous = SelectorEngine.find(itemSelector, listElement);\n      previous = previous[previous.length - 1];\n    }\n\n    const hideEvent = previous ? EventHandler.trigger(previous, EVENT_HIDE$1, {\n      relatedTarget: this._element\n    }) : null;\n    const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$1, {\n      relatedTarget: previous\n    });\n\n    if (showEvent.defaultPrevented || hideEvent !== null && hideEvent.defaultPrevented) {\n      return;\n    }\n\n    this._activate(this._element, listElement);\n\n    const complete = () => {\n      EventHandler.trigger(previous, EVENT_HIDDEN$1, {\n        relatedTarget: this._element\n      });\n      EventHandler.trigger(this._element, EVENT_SHOWN$1, {\n        relatedTarget: previous\n      });\n    };\n\n    if (target) {\n      this._activate(target, target.parentNode, complete);\n    } else {\n      complete();\n    }\n  } // Private\n\n\n  _activate(element, container, callback) {\n    const activeElements = container && (container.nodeName === 'UL' || container.nodeName === 'OL') ? SelectorEngine.find(SELECTOR_ACTIVE_UL, container) : SelectorEngine.children(container, SELECTOR_ACTIVE);\n    const active = activeElements[0];\n    const isTransitioning = callback && active && active.classList.contains(CLASS_NAME_FADE$1);\n\n    const complete = () => this._transitionComplete(element, active, callback);\n\n    if (active && isTransitioning) {\n      active.classList.remove(CLASS_NAME_SHOW$1);\n\n      this._queueCallback(complete, element, true);\n    } else {\n      complete();\n    }\n  }\n\n  _transitionComplete(element, active, callback) {\n    if (active) {\n      active.classList.remove(CLASS_NAME_ACTIVE);\n      const dropdownChild = SelectorEngine.findOne(SELECTOR_DROPDOWN_ACTIVE_CHILD, active.parentNode);\n\n      if (dropdownChild) {\n        dropdownChild.classList.remove(CLASS_NAME_ACTIVE);\n      }\n\n      if (active.getAttribute('role') === 'tab') {\n        active.setAttribute('aria-selected', false);\n      }\n    }\n\n    element.classList.add(CLASS_NAME_ACTIVE);\n\n    if (element.getAttribute('role') === 'tab') {\n      element.setAttribute('aria-selected', true);\n    }\n\n    reflow(element);\n\n    if (element.classList.contains(CLASS_NAME_FADE$1)) {\n      element.classList.add(CLASS_NAME_SHOW$1);\n    }\n\n    let parent = element.parentNode;\n\n    if (parent && parent.nodeName === 'LI') {\n      parent = parent.parentNode;\n    }\n\n    if (parent && parent.classList.contains(CLASS_NAME_DROPDOWN_MENU)) {\n      const dropdownElement = element.closest(SELECTOR_DROPDOWN);\n\n      if (dropdownElement) {\n        SelectorEngine.find(SELECTOR_DROPDOWN_TOGGLE, dropdownElement).forEach(dropdown => dropdown.classList.add(CLASS_NAME_ACTIVE));\n      }\n\n      element.setAttribute('aria-expanded', true);\n    }\n\n    if (callback) {\n      callback();\n    }\n  } // Static\n\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Tab.getOrCreateInstance(this);\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config]();\n      }\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n  if (['A', 'AREA'].includes(this.tagName)) {\n    event.preventDefault();\n  }\n\n  if (isDisabled(this)) {\n    return;\n  }\n\n  const data = Tab.getOrCreateInstance(this);\n  data.show();\n});\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Tab to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Tab);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): toast.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'toast';\nconst DATA_KEY = 'bs.toast';\nconst EVENT_KEY = `.${DATA_KEY}`;\nconst EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY}`;\nconst EVENT_MOUSEOVER = `mouseover${EVENT_KEY}`;\nconst EVENT_MOUSEOUT = `mouseout${EVENT_KEY}`;\nconst EVENT_FOCUSIN = `focusin${EVENT_KEY}`;\nconst EVENT_FOCUSOUT = `focusout${EVENT_KEY}`;\nconst EVENT_HIDE = `hide${EVENT_KEY}`;\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`;\nconst EVENT_SHOW = `show${EVENT_KEY}`;\nconst EVENT_SHOWN = `shown${EVENT_KEY}`;\nconst CLASS_NAME_FADE = 'fade';\nconst CLASS_NAME_HIDE = 'hide';\nconst CLASS_NAME_SHOW = 'show';\nconst CLASS_NAME_SHOWING = 'showing';\nconst DefaultType = {\n  animation: 'boolean',\n  autohide: 'boolean',\n  delay: 'number'\n};\nconst Default = {\n  animation: true,\n  autohide: true,\n  delay: 5000\n};\nconst SELECTOR_DATA_DISMISS = '[data-bs-dismiss=\"toast\"]';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Toast extends BaseComponent {\n  constructor(element, config) {\n    super(element);\n    this._config = this._getConfig(config);\n    this._timeout = null;\n    this._hasMouseInteraction = false;\n    this._hasKeyboardInteraction = false;\n\n    this._setListeners();\n  } // Getters\n\n\n  static get DefaultType() {\n    return DefaultType;\n  }\n\n  static get Default() {\n    return Default;\n  }\n\n  static get NAME() {\n    return NAME;\n  } // Public\n\n\n  show() {\n    const showEvent = EventHandler.trigger(this._element, EVENT_SHOW);\n\n    if (showEvent.defaultPrevented) {\n      return;\n    }\n\n    this._clearTimeout();\n\n    if (this._config.animation) {\n      this._element.classList.add(CLASS_NAME_FADE);\n    }\n\n    const complete = () => {\n      this._element.classList.remove(CLASS_NAME_SHOWING);\n\n      this._element.classList.add(CLASS_NAME_SHOW);\n\n      EventHandler.trigger(this._element, EVENT_SHOWN);\n\n      this._maybeScheduleHide();\n    };\n\n    this._element.classList.remove(CLASS_NAME_HIDE);\n\n    reflow(this._element);\n\n    this._element.classList.add(CLASS_NAME_SHOWING);\n\n    this._queueCallback(complete, this._element, this._config.animation);\n  }\n\n  hide() {\n    if (!this._element.classList.contains(CLASS_NAME_SHOW)) {\n      return;\n    }\n\n    const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE);\n\n    if (hideEvent.defaultPrevented) {\n      return;\n    }\n\n    const complete = () => {\n      this._element.classList.add(CLASS_NAME_HIDE);\n\n      EventHandler.trigger(this._element, EVENT_HIDDEN);\n    };\n\n    this._element.classList.remove(CLASS_NAME_SHOW);\n\n    this._queueCallback(complete, this._element, this._config.animation);\n  }\n\n  dispose() {\n    this._clearTimeout();\n\n    if (this._element.classList.contains(CLASS_NAME_SHOW)) {\n      this._element.classList.remove(CLASS_NAME_SHOW);\n    }\n\n    super.dispose();\n  } // Private\n\n\n  _getConfig(config) {\n    config = { ...Default,\n      ...Manipulator.getDataAttributes(this._element),\n      ...(typeof config === 'object' && config ? config : {})\n    };\n    typeCheckConfig(NAME, config, this.constructor.DefaultType);\n    return config;\n  }\n\n  _maybeScheduleHide() {\n    if (!this._config.autohide) {\n      return;\n    }\n\n    if (this._hasMouseInteraction || this._hasKeyboardInteraction) {\n      return;\n    }\n\n    this._timeout = setTimeout(() => {\n      this.hide();\n    }, this._config.delay);\n  }\n\n  _onInteraction(event, isInteracting) {\n    switch (event.type) {\n      case 'mouseover':\n      case 'mouseout':\n        this._hasMouseInteraction = isInteracting;\n        break;\n\n      case 'focusin':\n      case 'focusout':\n        this._hasKeyboardInteraction = isInteracting;\n        break;\n    }\n\n    if (isInteracting) {\n      this._clearTimeout();\n\n      return;\n    }\n\n    const nextElement = event.relatedTarget;\n\n    if (this._element === nextElement || this._element.contains(nextElement)) {\n      return;\n    }\n\n    this._maybeScheduleHide();\n  }\n\n  _setListeners() {\n    EventHandler.on(this._element, EVENT_CLICK_DISMISS, SELECTOR_DATA_DISMISS, () => this.hide());\n    EventHandler.on(this._element, EVENT_MOUSEOVER, event => this._onInteraction(event, true));\n    EventHandler.on(this._element, EVENT_MOUSEOUT, event => this._onInteraction(event, false));\n    EventHandler.on(this._element, EVENT_FOCUSIN, event => this._onInteraction(event, true));\n    EventHandler.on(this._element, EVENT_FOCUSOUT, event => this._onInteraction(event, false));\n  }\n\n  _clearTimeout() {\n    clearTimeout(this._timeout);\n    this._timeout = null;\n  } // Static\n\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Toast.getOrCreateInstance(this, config);\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config](this);\n      }\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Toast to jQuery only if jQuery is present\n */\n\n\ndefineJQueryPlugin(Toast);\n\nexport { Alert, Button, Carousel, Collapse, Dropdown, Modal, Offcanvas, Popover, ScrollSpy, Tab, Toast, Tooltip };\n//# sourceMappingURL=bootstrap.esm.js.map\n"
  },
  {
    "path": "src/sourceDev.WebApp/SharedThemes/darkly/wwwroot/js/jquery.js",
    "content": "/*!\n * jQuery JavaScript Library v3.7.0\n * https://jquery.com/\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license\n * https://jquery.org/license\n *\n * Date: 2023-05-11T18:29Z\n */\n(function (global, factory) {\n\n\t\"use strict\";\n\n\tif (typeof module === \"object\" && typeof module.exports === \"object\") {\n\n\t\t// For CommonJS and CommonJS-like environments where a proper `window`\n\t\t// is present, execute the factory and get jQuery.\n\t\t// For environments that do not have a `window` with a `document`\n\t\t// (such as Node.js), expose a factory as module.exports.\n\t\t// This accentuates the need for the creation of a real `window`.\n\t\t// e.g. var jQuery = require(\"jquery\")(window);\n\t\t// See ticket trac-14549 for more info.\n\t\tmodule.exports = global.document ?\n\t\t\tfactory(global, true) :\n\t\t\tfunction (w) {\n\t\t\t\tif (!w.document) {\n\t\t\t\t\tthrow new Error(\"jQuery requires a window with a document\");\n\t\t\t\t}\n\t\t\t\treturn factory(w);\n\t\t\t};\n\t} else {\n\t\tfactory(global);\n\t}\n\n\t// Pass this if window is not defined yet\n})(typeof window !== \"undefined\" ? window : this, function (window, noGlobal) {\n\n\t// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1\n\t// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode\n\t// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common\n\t// enough that all such attempts are guarded in a try block.\n\t\"use strict\";\n\n\tvar arr = [];\n\n\tvar getProto = Object.getPrototypeOf;\n\n\tvar slice = arr.slice;\n\n\tvar flat = arr.flat ? function (array) {\n\t\treturn arr.flat.call(array);\n\t} : function (array) {\n\t\treturn arr.concat.apply([], array);\n\t};\n\n\n\tvar push = arr.push;\n\n\tvar indexOf = arr.indexOf;\n\n\tvar class2type = {};\n\n\tvar toString = class2type.toString;\n\n\tvar hasOwn = class2type.hasOwnProperty;\n\n\tvar fnToString = hasOwn.toString;\n\n\tvar ObjectFunctionString = fnToString.call(Object);\n\n\tvar support = {};\n\n\tvar isFunction = function isFunction(obj) {\n\n\t\t// Support: Chrome <=57, Firefox <=52\n\t\t// In some browsers, typeof returns \"function\" for HTML <object> elements\n\t\t// (i.e., `typeof document.createElement( \"object\" ) === \"function\"`).\n\t\t// We don't want to classify *any* DOM node as a function.\n\t\t// Support: QtWeb <=3.8.5, WebKit <=534.34, wkhtmltopdf tool <=0.12.5\n\t\t// Plus for old WebKit, typeof returns \"function\" for HTML collections\n\t\t// (e.g., `typeof document.getElementsByTagName(\"div\") === \"function\"`). (gh-4756)\n\t\treturn typeof obj === \"function\" && typeof obj.nodeType !== \"number\" &&\n\t\t\ttypeof obj.item !== \"function\";\n\t};\n\n\n\tvar isWindow = function isWindow(obj) {\n\t\treturn obj != null && obj === obj.window;\n\t};\n\n\n\tvar document = window.document;\n\n\n\n\tvar preservedScriptAttributes = {\n\t\ttype: true,\n\t\tsrc: true,\n\t\tnonce: true,\n\t\tnoModule: true\n\t};\n\n\tfunction DOMEval(code, node, doc) {\n\t\tdoc = doc || document;\n\n\t\tvar i, val,\n\t\t\tscript = doc.createElement(\"script\");\n\n\t\tscript.text = code;\n\t\tif (node) {\n\t\t\tfor (i in preservedScriptAttributes) {\n\n\t\t\t\t// Support: Firefox 64+, Edge 18+\n\t\t\t\t// Some browsers don't support the \"nonce\" property on scripts.\n\t\t\t\t// On the other hand, just using `getAttribute` is not enough as\n\t\t\t\t// the `nonce` attribute is reset to an empty string whenever it\n\t\t\t\t// becomes browsing-context connected.\n\t\t\t\t// See https://github.com/whatwg/html/issues/2369\n\t\t\t\t// See https://html.spec.whatwg.org/#nonce-attributes\n\t\t\t\t// The `node.getAttribute` check was added for the sake of\n\t\t\t\t// `jQuery.globalEval` so that it can fake a nonce-containing node\n\t\t\t\t// via an object.\n\t\t\t\tval = node[i] || node.getAttribute && node.getAttribute(i);\n\t\t\t\tif (val) {\n\t\t\t\t\tscript.setAttribute(i, val);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tdoc.head.appendChild(script).parentNode.removeChild(script);\n\t}\n\n\n\tfunction toType(obj) {\n\t\tif (obj == null) {\n\t\t\treturn obj + \"\";\n\t\t}\n\n\t\t// Support: Android <=2.3 only (functionish RegExp)\n\t\treturn typeof obj === \"object\" || typeof obj === \"function\" ?\n\t\t\tclass2type[toString.call(obj)] || \"object\" :\n\t\t\ttypeof obj;\n\t}\n\t/* global Symbol */\n\t// Defining this global in .eslintrc.json would create a danger of using the global\n\t// unguarded in another place, it seems safer to define global only for this module\n\n\n\n\tvar version = \"3.7.0\",\n\n\t\trhtmlSuffix = /HTML$/i,\n\n\t\t// Define a local copy of jQuery\n\t\tjQuery = function (selector, context) {\n\n\t\t\t// The jQuery object is actually just the init constructor 'enhanced'\n\t\t\t// Need init if jQuery is called (just allow error to be thrown if not included)\n\t\t\treturn new jQuery.fn.init(selector, context);\n\t\t};\n\n\tjQuery.fn = jQuery.prototype = {\n\n\t\t// The current version of jQuery being used\n\t\tjquery: version,\n\n\t\tconstructor: jQuery,\n\n\t\t// The default length of a jQuery object is 0\n\t\tlength: 0,\n\n\t\ttoArray: function () {\n\t\t\treturn slice.call(this);\n\t\t},\n\n\t\t// Get the Nth element in the matched element set OR\n\t\t// Get the whole matched element set as a clean array\n\t\tget: function (num) {\n\n\t\t\t// Return all the elements in a clean array\n\t\t\tif (num == null) {\n\t\t\t\treturn slice.call(this);\n\t\t\t}\n\n\t\t\t// Return just the one element from the set\n\t\t\treturn num < 0 ? this[num + this.length] : this[num];\n\t\t},\n\n\t\t// Take an array of elements and push it onto the stack\n\t\t// (returning the new matched element set)\n\t\tpushStack: function (elems) {\n\n\t\t\t// Build a new jQuery matched element set\n\t\t\tvar ret = jQuery.merge(this.constructor(), elems);\n\n\t\t\t// Add the old object onto the stack (as a reference)\n\t\t\tret.prevObject = this;\n\n\t\t\t// Return the newly-formed element set\n\t\t\treturn ret;\n\t\t},\n\n\t\t// Execute a callback for every element in the matched set.\n\t\teach: function (callback) {\n\t\t\treturn jQuery.each(this, callback);\n\t\t},\n\n\t\tmap: function (callback) {\n\t\t\treturn this.pushStack(jQuery.map(this, function (elem, i) {\n\t\t\t\treturn callback.call(elem, i, elem);\n\t\t\t}));\n\t\t},\n\n\t\tslice: function () {\n\t\t\treturn this.pushStack(slice.apply(this, arguments));\n\t\t},\n\n\t\tfirst: function () {\n\t\t\treturn this.eq(0);\n\t\t},\n\n\t\tlast: function () {\n\t\t\treturn this.eq(-1);\n\t\t},\n\n\t\teven: function () {\n\t\t\treturn this.pushStack(jQuery.grep(this, function (_elem, i) {\n\t\t\t\treturn (i + 1) % 2;\n\t\t\t}));\n\t\t},\n\n\t\todd: function () {\n\t\t\treturn this.pushStack(jQuery.grep(this, function (_elem, i) {\n\t\t\t\treturn i % 2;\n\t\t\t}));\n\t\t},\n\n\t\teq: function (i) {\n\t\t\tvar len = this.length,\n\t\t\t\tj = +i + (i < 0 ? len : 0);\n\t\t\treturn this.pushStack(j >= 0 && j < len ? [this[j]] : []);\n\t\t},\n\n\t\tend: function () {\n\t\t\treturn this.prevObject || this.constructor();\n\t\t},\n\n\t\t// For internal use only.\n\t\t// Behaves like an Array's method, not like a jQuery method.\n\t\tpush: push,\n\t\tsort: arr.sort,\n\t\tsplice: arr.splice\n\t};\n\n\tjQuery.extend = jQuery.fn.extend = function () {\n\t\tvar options, name, src, copy, copyIsArray, clone,\n\t\t\ttarget = arguments[0] || {},\n\t\t\ti = 1,\n\t\t\tlength = arguments.length,\n\t\t\tdeep = false;\n\n\t\t// Handle a deep copy situation\n\t\tif (typeof target === \"boolean\") {\n\t\t\tdeep = target;\n\n\t\t\t// Skip the boolean and the target\n\t\t\ttarget = arguments[i] || {};\n\t\t\ti++;\n\t\t}\n\n\t\t// Handle case when target is a string or something (possible in deep copy)\n\t\tif (typeof target !== \"object\" && !isFunction(target)) {\n\t\t\ttarget = {};\n\t\t}\n\n\t\t// Extend jQuery itself if only one argument is passed\n\t\tif (i === length) {\n\t\t\ttarget = this;\n\t\t\ti--;\n\t\t}\n\n\t\tfor (; i < length; i++) {\n\n\t\t\t// Only deal with non-null/undefined values\n\t\t\tif ((options = arguments[i]) != null) {\n\n\t\t\t\t// Extend the base object\n\t\t\t\tfor (name in options) {\n\t\t\t\t\tcopy = options[name];\n\n\t\t\t\t\t// Prevent Object.prototype pollution\n\t\t\t\t\t// Prevent never-ending loop\n\t\t\t\t\tif (name === \"__proto__\" || target === copy) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\t\tif (deep && copy && (jQuery.isPlainObject(copy) ||\n\t\t\t\t\t\t(copyIsArray = Array.isArray(copy)))) {\n\t\t\t\t\t\tsrc = target[name];\n\n\t\t\t\t\t\t// Ensure proper type for the source value\n\t\t\t\t\t\tif (copyIsArray && !Array.isArray(src)) {\n\t\t\t\t\t\t\tclone = [];\n\t\t\t\t\t\t} else if (!copyIsArray && !jQuery.isPlainObject(src)) {\n\t\t\t\t\t\t\tclone = {};\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tclone = src;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcopyIsArray = false;\n\n\t\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\t\ttarget[name] = jQuery.extend(deep, clone, copy);\n\n\t\t\t\t\t\t// Don't bring in undefined values\n\t\t\t\t\t} else if (copy !== undefined) {\n\t\t\t\t\t\ttarget[name] = copy;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Return the modified object\n\t\treturn target;\n\t};\n\n\tjQuery.extend({\n\n\t\t// Unique for each copy of jQuery on the page\n\t\texpando: \"jQuery\" + (version + Math.random()).replace(/\\D/g, \"\"),\n\n\t\t// Assume jQuery is ready without the ready module\n\t\tisReady: true,\n\n\t\terror: function (msg) {\n\t\t\tthrow new Error(msg);\n\t\t},\n\n\t\tnoop: function () { },\n\n\t\tisPlainObject: function (obj) {\n\t\t\tvar proto, Ctor;\n\n\t\t\t// Detect obvious negatives\n\t\t\t// Use toString instead of jQuery.type to catch host objects\n\t\t\tif (!obj || toString.call(obj) !== \"[object Object]\") {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tproto = getProto(obj);\n\n\t\t\t// Objects with no prototype (e.g., `Object.create( null )`) are plain\n\t\t\tif (!proto) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\t// Objects with prototype are plain iff they were constructed by a global Object function\n\t\t\tCtor = hasOwn.call(proto, \"constructor\") && proto.constructor;\n\t\t\treturn typeof Ctor === \"function\" && fnToString.call(Ctor) === ObjectFunctionString;\n\t\t},\n\n\t\tisEmptyObject: function (obj) {\n\t\t\tvar name;\n\n\t\t\tfor (name in obj) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\n\t\t// Evaluates a script in a provided context; falls back to the global one\n\t\t// if not specified.\n\t\tglobalEval: function (code, options, doc) {\n\t\t\tDOMEval(code, { nonce: options && options.nonce }, doc);\n\t\t},\n\n\t\teach: function (obj, callback) {\n\t\t\tvar length, i = 0;\n\n\t\t\tif (isArrayLike(obj)) {\n\t\t\t\tlength = obj.length;\n\t\t\t\tfor (; i < length; i++) {\n\t\t\t\t\tif (callback.call(obj[i], i, obj[i]) === false) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor (i in obj) {\n\t\t\t\t\tif (callback.call(obj[i], i, obj[i]) === false) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn obj;\n\t\t},\n\n\n\t\t// Retrieve the text value of an array of DOM nodes\n\t\ttext: function (elem) {\n\t\t\tvar node,\n\t\t\t\tret = \"\",\n\t\t\t\ti = 0,\n\t\t\t\tnodeType = elem.nodeType;\n\n\t\t\tif (!nodeType) {\n\n\t\t\t\t// If no nodeType, this is expected to be an array\n\t\t\t\twhile ((node = elem[i++])) {\n\n\t\t\t\t\t// Do not traverse comment nodes\n\t\t\t\t\tret += jQuery.text(node);\n\t\t\t\t}\n\t\t\t} else if (nodeType === 1 || nodeType === 9 || nodeType === 11) {\n\t\t\t\treturn elem.textContent;\n\t\t\t} else if (nodeType === 3 || nodeType === 4) {\n\t\t\t\treturn elem.nodeValue;\n\t\t\t}\n\n\t\t\t// Do not include comment or processing instruction nodes\n\n\t\t\treturn ret;\n\t\t},\n\n\t\t// results is for internal usage only\n\t\tmakeArray: function (arr, results) {\n\t\t\tvar ret = results || [];\n\n\t\t\tif (arr != null) {\n\t\t\t\tif (isArrayLike(Object(arr))) {\n\t\t\t\t\tjQuery.merge(ret,\n\t\t\t\t\t\ttypeof arr === \"string\" ?\n\t\t\t\t\t\t\t[arr] : arr\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\tpush.call(ret, arr);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn ret;\n\t\t},\n\n\t\tinArray: function (elem, arr, i) {\n\t\t\treturn arr == null ? -1 : indexOf.call(arr, elem, i);\n\t\t},\n\n\t\tisXMLDoc: function (elem) {\n\t\t\tvar namespace = elem && elem.namespaceURI,\n\t\t\t\tdocElem = elem && (elem.ownerDocument || elem).documentElement;\n\n\t\t\t// Assume HTML when documentElement doesn't yet exist, such as inside\n\t\t\t// document fragments.\n\t\t\treturn !rhtmlSuffix.test(namespace || docElem && docElem.nodeName || \"HTML\");\n\t\t},\n\n\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\tmerge: function (first, second) {\n\t\t\tvar len = +second.length,\n\t\t\t\tj = 0,\n\t\t\t\ti = first.length;\n\n\t\t\tfor (; j < len; j++) {\n\t\t\t\tfirst[i++] = second[j];\n\t\t\t}\n\n\t\t\tfirst.length = i;\n\n\t\t\treturn first;\n\t\t},\n\n\t\tgrep: function (elems, callback, invert) {\n\t\t\tvar callbackInverse,\n\t\t\t\tmatches = [],\n\t\t\t\ti = 0,\n\t\t\t\tlength = elems.length,\n\t\t\t\tcallbackExpect = !invert;\n\n\t\t\t// Go through the array, only saving the items\n\t\t\t// that pass the validator function\n\t\t\tfor (; i < length; i++) {\n\t\t\t\tcallbackInverse = !callback(elems[i], i);\n\t\t\t\tif (callbackInverse !== callbackExpect) {\n\t\t\t\t\tmatches.push(elems[i]);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn matches;\n\t\t},\n\n\t\t// arg is for internal usage only\n\t\tmap: function (elems, callback, arg) {\n\t\t\tvar length, value,\n\t\t\t\ti = 0,\n\t\t\t\tret = [];\n\n\t\t\t// Go through the array, translating each of the items to their new values\n\t\t\tif (isArrayLike(elems)) {\n\t\t\t\tlength = elems.length;\n\t\t\t\tfor (; i < length; i++) {\n\t\t\t\t\tvalue = callback(elems[i], i, arg);\n\n\t\t\t\t\tif (value != null) {\n\t\t\t\t\t\tret.push(value);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Go through every key on the object,\n\t\t\t} else {\n\t\t\t\tfor (i in elems) {\n\t\t\t\t\tvalue = callback(elems[i], i, arg);\n\n\t\t\t\t\tif (value != null) {\n\t\t\t\t\t\tret.push(value);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Flatten any nested arrays\n\t\t\treturn flat(ret);\n\t\t},\n\n\t\t// A global GUID counter for objects\n\t\tguid: 1,\n\n\t\t// jQuery.support is not used in Core but other projects attach their\n\t\t// properties to it so it needs to exist.\n\t\tsupport: support\n\t});\n\n\tif (typeof Symbol === \"function\") {\n\t\tjQuery.fn[Symbol.iterator] = arr[Symbol.iterator];\n\t}\n\n\t// Populate the class2type map\n\tjQuery.each(\"Boolean Number String Function Array Date RegExp Object Error Symbol\".split(\" \"),\n\t\tfunction (_i, name) {\n\t\t\tclass2type[\"[object \" + name + \"]\"] = name.toLowerCase();\n\t\t});\n\n\tfunction isArrayLike(obj) {\n\n\t\t// Support: real iOS 8.2 only (not reproducible in simulator)\n\t\t// `in` check used to prevent JIT error (gh-2145)\n\t\t// hasOwn isn't used here due to false negatives\n\t\t// regarding Nodelist length in IE\n\t\tvar length = !!obj && \"length\" in obj && obj.length,\n\t\t\ttype = toType(obj);\n\n\t\tif (isFunction(obj) || isWindow(obj)) {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn type === \"array\" || length === 0 ||\n\t\t\ttypeof length === \"number\" && length > 0 && (length - 1) in obj;\n\t}\n\n\n\tfunction nodeName(elem, name) {\n\n\t\treturn elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();\n\n\t}\n\tvar pop = arr.pop;\n\n\n\tvar sort = arr.sort;\n\n\n\tvar splice = arr.splice;\n\n\n\tvar whitespace = \"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\";\n\n\n\tvar rtrimCSS = new RegExp(\n\t\t\"^\" + whitespace + \"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\" + whitespace + \"+$\",\n\t\t\"g\"\n\t);\n\n\n\n\n\t// Note: an element does not contain itself\n\tjQuery.contains = function (a, b) {\n\t\tvar bup = b && b.parentNode;\n\n\t\treturn a === bup || !!(bup && bup.nodeType === 1 && (\n\n\t\t\t// Support: IE 9 - 11+\n\t\t\t// IE doesn't have `contains` on SVG.\n\t\t\ta.contains ?\n\t\t\t\ta.contains(bup) :\n\t\t\t\ta.compareDocumentPosition && a.compareDocumentPosition(bup) & 16\n\t\t));\n\t};\n\n\n\n\n\t// CSS string/identifier serialization\n\t// https://drafts.csswg.org/cssom/#common-serializing-idioms\n\tvar rcssescape = /([\\0-\\x1f\\x7f]|^-?\\d)|^-$|[^\\x80-\\uFFFF\\w-]/g;\n\n\tfunction fcssescape(ch, asCodePoint) {\n\t\tif (asCodePoint) {\n\n\t\t\t// U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER\n\t\t\tif (ch === \"\\0\") {\n\t\t\t\treturn \"\\uFFFD\";\n\t\t\t}\n\n\t\t\t// Control characters and (dependent upon position) numbers get escaped as code points\n\t\t\treturn ch.slice(0, -1) + \"\\\\\" + ch.charCodeAt(ch.length - 1).toString(16) + \" \";\n\t\t}\n\n\t\t// Other potentially-special ASCII characters get backslash-escaped\n\t\treturn \"\\\\\" + ch;\n\t}\n\n\tjQuery.escapeSelector = function (sel) {\n\t\treturn (sel + \"\").replace(rcssescape, fcssescape);\n\t};\n\n\n\n\n\tvar preferredDoc = document,\n\t\tpushNative = push;\n\n\t(function () {\n\n\t\tvar i,\n\t\t\tExpr,\n\t\t\toutermostContext,\n\t\t\tsortInput,\n\t\t\thasDuplicate,\n\t\t\tpush = pushNative,\n\n\t\t\t// Local document vars\n\t\t\tdocument,\n\t\t\tdocumentElement,\n\t\t\tdocumentIsHTML,\n\t\t\trbuggyQSA,\n\t\t\tmatches,\n\n\t\t\t// Instance-specific data\n\t\t\texpando = jQuery.expando,\n\t\t\tdirruns = 0,\n\t\t\tdone = 0,\n\t\t\tclassCache = createCache(),\n\t\t\ttokenCache = createCache(),\n\t\t\tcompilerCache = createCache(),\n\t\t\tnonnativeSelectorCache = createCache(),\n\t\t\tsortOrder = function (a, b) {\n\t\t\t\tif (a === b) {\n\t\t\t\t\thasDuplicate = true;\n\t\t\t\t}\n\t\t\t\treturn 0;\n\t\t\t},\n\n\t\t\tbooleans = \"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|\" +\n\t\t\t\t\"loop|multiple|open|readonly|required|scoped\",\n\n\t\t\t// Regular expressions\n\n\t\t\t// https://www.w3.org/TR/css-syntax-3/#ident-token-diagram\n\t\t\tidentifier = \"(?:\\\\\\\\[\\\\da-fA-F]{1,6}\" + whitespace +\n\t\t\t\t\"?|\\\\\\\\[^\\\\r\\\\n\\\\f]|[\\\\w-]|[^\\0-\\\\x7f])+\",\n\n\t\t\t// Attribute selectors: https://www.w3.org/TR/selectors/#attribute-selectors\n\t\t\tattributes = \"\\\\[\" + whitespace + \"*(\" + identifier + \")(?:\" + whitespace +\n\n\t\t\t\t// Operator (capture 2)\n\t\t\t\t\"*([*^$|!~]?=)\" + whitespace +\n\n\t\t\t\t// \"Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]\"\n\t\t\t\t\"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\" + identifier + \"))|)\" +\n\t\t\t\twhitespace + \"*\\\\]\",\n\n\t\t\tpseudos = \":(\" + identifier + \")(?:\\\\((\" +\n\n\t\t\t\t// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:\n\t\t\t\t// 1. quoted (capture 3; capture 4 or capture 5)\n\t\t\t\t\"('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|\" +\n\n\t\t\t\t// 2. simple (capture 6)\n\t\t\t\t\"((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\" + attributes + \")*)|\" +\n\n\t\t\t\t// 3. anything else (capture 2)\n\t\t\t\t\".*\" +\n\t\t\t\t\")\\\\)|)\",\n\n\t\t\t// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter\n\t\t\trwhitespace = new RegExp(whitespace + \"+\", \"g\"),\n\n\t\t\trcomma = new RegExp(\"^\" + whitespace + \"*,\" + whitespace + \"*\"),\n\t\t\trleadingCombinator = new RegExp(\"^\" + whitespace + \"*([>+~]|\" + whitespace + \")\" +\n\t\t\t\twhitespace + \"*\"),\n\t\t\trdescend = new RegExp(whitespace + \"|>\"),\n\n\t\t\trpseudo = new RegExp(pseudos),\n\t\t\tridentifier = new RegExp(\"^\" + identifier + \"$\"),\n\n\t\t\tmatchExpr = {\n\t\t\t\tID: new RegExp(\"^#(\" + identifier + \")\"),\n\t\t\t\tCLASS: new RegExp(\"^\\\\.(\" + identifier + \")\"),\n\t\t\t\tTAG: new RegExp(\"^(\" + identifier + \"|[*])\"),\n\t\t\t\tATTR: new RegExp(\"^\" + attributes),\n\t\t\t\tPSEUDO: new RegExp(\"^\" + pseudos),\n\t\t\t\tCHILD: new RegExp(\n\t\t\t\t\t\"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\" +\n\t\t\t\t\twhitespace + \"*(even|odd|(([+-]|)(\\\\d*)n|)\" + whitespace + \"*(?:([+-]|)\" +\n\t\t\t\t\twhitespace + \"*(\\\\d+)|))\" + whitespace + \"*\\\\)|)\", \"i\"),\n\t\t\t\tbool: new RegExp(\"^(?:\" + booleans + \")$\", \"i\"),\n\n\t\t\t\t// For use in libraries implementing .is()\n\t\t\t\t// We use this for POS matching in `select`\n\t\t\t\tneedsContext: new RegExp(\"^\" + whitespace +\n\t\t\t\t\t\"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\" + whitespace +\n\t\t\t\t\t\"*((?:-\\\\d)?\\\\d*)\" + whitespace + \"*\\\\)|)(?=[^-]|$)\", \"i\")\n\t\t\t},\n\n\t\t\trinputs = /^(?:input|select|textarea|button)$/i,\n\t\t\trheader = /^h\\d$/i,\n\n\t\t\t// Easily-parseable/retrievable ID or TAG or CLASS selectors\n\t\t\trquickExpr = /^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,\n\n\t\t\trsibling = /[+~]/,\n\n\t\t\t// CSS escapes\n\t\t\t// https://www.w3.org/TR/CSS21/syndata.html#escaped-characters\n\t\t\trunescape = new RegExp(\"\\\\\\\\[\\\\da-fA-F]{1,6}\" + whitespace +\n\t\t\t\t\"?|\\\\\\\\([^\\\\r\\\\n\\\\f])\", \"g\"),\n\t\t\tfunescape = function (escape, nonHex) {\n\t\t\t\tvar high = \"0x\" + escape.slice(1) - 0x10000;\n\n\t\t\t\tif (nonHex) {\n\n\t\t\t\t\t// Strip the backslash prefix from a non-hex escape sequence\n\t\t\t\t\treturn nonHex;\n\t\t\t\t}\n\n\t\t\t\t// Replace a hexadecimal escape sequence with the encoded Unicode code point\n\t\t\t\t// Support: IE <=11+\n\t\t\t\t// For values outside the Basic Multilingual Plane (BMP), manually construct a\n\t\t\t\t// surrogate pair\n\t\t\t\treturn high < 0 ?\n\t\t\t\t\tString.fromCharCode(high + 0x10000) :\n\t\t\t\t\tString.fromCharCode(high >> 10 | 0xD800, high & 0x3FF | 0xDC00);\n\t\t\t},\n\n\t\t\t// Used for iframes; see `setDocument`.\n\t\t\t// Support: IE 9 - 11+, Edge 12 - 18+\n\t\t\t// Removing the function wrapper causes a \"Permission Denied\"\n\t\t\t// error in IE/Edge.\n\t\t\tunloadHandler = function () {\n\t\t\t\tsetDocument();\n\t\t\t},\n\n\t\t\tinDisabledFieldset = addCombinator(\n\t\t\t\tfunction (elem) {\n\t\t\t\t\treturn elem.disabled === true && nodeName(elem, \"fieldset\");\n\t\t\t\t},\n\t\t\t\t{ dir: \"parentNode\", next: \"legend\" }\n\t\t\t);\n\n\t\t// Support: IE <=9 only\n\t\t// Accessing document.activeElement can throw unexpectedly\n\t\t// https://bugs.jquery.com/ticket/13393\n\t\tfunction safeActiveElement() {\n\t\t\ttry {\n\t\t\t\treturn document.activeElement;\n\t\t\t} catch (err) { }\n\t\t}\n\n\t\t// Optimize for push.apply( _, NodeList )\n\t\ttry {\n\t\t\tpush.apply(\n\t\t\t\t(arr = slice.call(preferredDoc.childNodes)),\n\t\t\t\tpreferredDoc.childNodes\n\t\t\t);\n\n\t\t\t// Support: Android <=4.0\n\t\t\t// Detect silently failing push.apply\n\t\t\t// eslint-disable-next-line no-unused-expressions\n\t\t\tarr[preferredDoc.childNodes.length].nodeType;\n\t\t} catch (e) {\n\t\t\tpush = {\n\t\t\t\tapply: function (target, els) {\n\t\t\t\t\tpushNative.apply(target, slice.call(els));\n\t\t\t\t},\n\t\t\t\tcall: function (target) {\n\t\t\t\t\tpushNative.apply(target, slice.call(arguments, 1));\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\n\t\tfunction find(selector, context, results, seed) {\n\t\t\tvar m, i, elem, nid, match, groups, newSelector,\n\t\t\t\tnewContext = context && context.ownerDocument,\n\n\t\t\t\t// nodeType defaults to 9, since context defaults to document\n\t\t\t\tnodeType = context ? context.nodeType : 9;\n\n\t\t\tresults = results || [];\n\n\t\t\t// Return early from calls with invalid selector or context\n\t\t\tif (typeof selector !== \"string\" || !selector ||\n\t\t\t\tnodeType !== 1 && nodeType !== 9 && nodeType !== 11) {\n\n\t\t\t\treturn results;\n\t\t\t}\n\n\t\t\t// Try to shortcut find operations (as opposed to filters) in HTML documents\n\t\t\tif (!seed) {\n\t\t\t\tsetDocument(context);\n\t\t\t\tcontext = context || document;\n\n\t\t\t\tif (documentIsHTML) {\n\n\t\t\t\t\t// If the selector is sufficiently simple, try using a \"get*By*\" DOM method\n\t\t\t\t\t// (excepting DocumentFragment context, where the methods don't exist)\n\t\t\t\t\tif (nodeType !== 11 && (match = rquickExpr.exec(selector))) {\n\n\t\t\t\t\t\t// ID selector\n\t\t\t\t\t\tif ((m = match[1])) {\n\n\t\t\t\t\t\t\t// Document context\n\t\t\t\t\t\t\tif (nodeType === 9) {\n\t\t\t\t\t\t\t\tif ((elem = context.getElementById(m))) {\n\n\t\t\t\t\t\t\t\t\t// Support: IE 9 only\n\t\t\t\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\t\t\t\tif (elem.id === m) {\n\t\t\t\t\t\t\t\t\t\tpush.call(results, elem);\n\t\t\t\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t// Element context\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t// Support: IE 9 only\n\t\t\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\t\t\tif (newContext && (elem = newContext.getElementById(m)) &&\n\t\t\t\t\t\t\t\t\tfind.contains(context, elem) &&\n\t\t\t\t\t\t\t\t\telem.id === m) {\n\n\t\t\t\t\t\t\t\t\tpush.call(results, elem);\n\t\t\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Type selector\n\t\t\t\t\t\t} else if (match[2]) {\n\t\t\t\t\t\t\tpush.apply(results, context.getElementsByTagName(selector));\n\t\t\t\t\t\t\treturn results;\n\n\t\t\t\t\t\t\t// Class selector\n\t\t\t\t\t\t} else if ((m = match[3]) && context.getElementsByClassName) {\n\t\t\t\t\t\t\tpush.apply(results, context.getElementsByClassName(m));\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Take advantage of querySelectorAll\n\t\t\t\t\tif (!nonnativeSelectorCache[selector + \" \"] &&\n\t\t\t\t\t\t(!rbuggyQSA || !rbuggyQSA.test(selector))) {\n\n\t\t\t\t\t\tnewSelector = selector;\n\t\t\t\t\t\tnewContext = context;\n\n\t\t\t\t\t\t// qSA considers elements outside a scoping root when evaluating child or\n\t\t\t\t\t\t// descendant combinators, which is not what we want.\n\t\t\t\t\t\t// In such cases, we work around the behavior by prefixing every selector in the\n\t\t\t\t\t\t// list with an ID selector referencing the scope context.\n\t\t\t\t\t\t// The technique has to be used as well when a leading combinator is used\n\t\t\t\t\t\t// as such selectors are not recognized by querySelectorAll.\n\t\t\t\t\t\t// Thanks to Andrew Dupont for this technique.\n\t\t\t\t\t\tif (nodeType === 1 &&\n\t\t\t\t\t\t\t(rdescend.test(selector) || rleadingCombinator.test(selector))) {\n\n\t\t\t\t\t\t\t// Expand context for sibling selectors\n\t\t\t\t\t\t\tnewContext = rsibling.test(selector) && testContext(context.parentNode) ||\n\t\t\t\t\t\t\t\tcontext;\n\n\t\t\t\t\t\t\t// We can use :scope instead of the ID hack if the browser\n\t\t\t\t\t\t\t// supports it & if we're not changing the context.\n\t\t\t\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when\n\t\t\t\t\t\t\t// strict-comparing two documents; shallow comparisons work.\n\t\t\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\t\t\tif (newContext != context || !support.scope) {\n\n\t\t\t\t\t\t\t\t// Capture the context ID, setting it first if necessary\n\t\t\t\t\t\t\t\tif ((nid = context.getAttribute(\"id\"))) {\n\t\t\t\t\t\t\t\t\tnid = jQuery.escapeSelector(nid);\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tcontext.setAttribute(\"id\", (nid = expando));\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Prefix every selector in the list\n\t\t\t\t\t\t\tgroups = tokenize(selector);\n\t\t\t\t\t\t\ti = groups.length;\n\t\t\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\t\t\tgroups[i] = (nid ? \"#\" + nid : \":scope\") + \" \" +\n\t\t\t\t\t\t\t\t\ttoSelector(groups[i]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tnewSelector = groups.join(\",\");\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tpush.apply(results,\n\t\t\t\t\t\t\t\tnewContext.querySelectorAll(newSelector)\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t} catch (qsaError) {\n\t\t\t\t\t\t\tnonnativeSelectorCache(selector, true);\n\t\t\t\t\t\t} finally {\n\t\t\t\t\t\t\tif (nid === expando) {\n\t\t\t\t\t\t\t\tcontext.removeAttribute(\"id\");\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// All others\n\t\t\treturn select(selector.replace(rtrimCSS, \"$1\"), context, results, seed);\n\t\t}\n\n\t\t/**\n\t\t * Create key-value caches of limited size\n\t\t * @returns {function(string, object)} Returns the Object data after storing it on itself with\n\t\t *\tproperty name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)\n\t\t *\tdeleting the oldest entry\n\t\t */\n\t\tfunction createCache() {\n\t\t\tvar keys = [];\n\n\t\t\tfunction cache(key, value) {\n\n\t\t\t\t// Use (key + \" \") to avoid collision with native prototype properties\n\t\t\t\t// (see https://github.com/jquery/sizzle/issues/157)\n\t\t\t\tif (keys.push(key + \" \") > Expr.cacheLength) {\n\n\t\t\t\t\t// Only keep the most recent entries\n\t\t\t\t\tdelete cache[keys.shift()];\n\t\t\t\t}\n\t\t\t\treturn (cache[key + \" \"] = value);\n\t\t\t}\n\t\t\treturn cache;\n\t\t}\n\n\t\t/**\n\t\t * Mark a function for special use by jQuery selector module\n\t\t * @param {Function} fn The function to mark\n\t\t */\n\t\tfunction markFunction(fn) {\n\t\t\tfn[expando] = true;\n\t\t\treturn fn;\n\t\t}\n\n\t\t/**\n\t\t * Support testing using an element\n\t\t * @param {Function} fn Passed the created element and returns a boolean result\n\t\t */\n\t\tfunction assert(fn) {\n\t\t\tvar el = document.createElement(\"fieldset\");\n\n\t\t\ttry {\n\t\t\t\treturn !!fn(el);\n\t\t\t} catch (e) {\n\t\t\t\treturn false;\n\t\t\t} finally {\n\n\t\t\t\t// Remove from its parent by default\n\t\t\t\tif (el.parentNode) {\n\t\t\t\t\tel.parentNode.removeChild(el);\n\t\t\t\t}\n\n\t\t\t\t// release memory in IE\n\t\t\t\tel = null;\n\t\t\t}\n\t\t}\n\n\t\t/**\n\t\t * Returns a function to use in pseudos for input types\n\t\t * @param {String} type\n\t\t */\n\t\tfunction createInputPseudo(type) {\n\t\t\treturn function (elem) {\n\t\t\t\treturn nodeName(elem, \"input\") && elem.type === type;\n\t\t\t};\n\t\t}\n\n\t\t/**\n\t\t * Returns a function to use in pseudos for buttons\n\t\t * @param {String} type\n\t\t */\n\t\tfunction createButtonPseudo(type) {\n\t\t\treturn function (elem) {\n\t\t\t\treturn (nodeName(elem, \"input\") || nodeName(elem, \"button\")) &&\n\t\t\t\t\telem.type === type;\n\t\t\t};\n\t\t}\n\n\t\t/**\n\t\t * Returns a function to use in pseudos for :enabled/:disabled\n\t\t * @param {Boolean} disabled true for :disabled; false for :enabled\n\t\t */\n\t\tfunction createDisabledPseudo(disabled) {\n\n\t\t\t// Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable\n\t\t\treturn function (elem) {\n\n\t\t\t\t// Only certain elements can match :enabled or :disabled\n\t\t\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled\n\t\t\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled\n\t\t\t\tif (\"form\" in elem) {\n\n\t\t\t\t\t// Check for inherited disabledness on relevant non-disabled elements:\n\t\t\t\t\t// * listed form-associated elements in a disabled fieldset\n\t\t\t\t\t//   https://html.spec.whatwg.org/multipage/forms.html#category-listed\n\t\t\t\t\t//   https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled\n\t\t\t\t\t// * option elements in a disabled optgroup\n\t\t\t\t\t//   https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled\n\t\t\t\t\t// All such elements have a \"form\" property.\n\t\t\t\t\tif (elem.parentNode && elem.disabled === false) {\n\n\t\t\t\t\t\t// Option elements defer to a parent optgroup if present\n\t\t\t\t\t\tif (\"label\" in elem) {\n\t\t\t\t\t\t\tif (\"label\" in elem.parentNode) {\n\t\t\t\t\t\t\t\treturn elem.parentNode.disabled === disabled;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\treturn elem.disabled === disabled;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Support: IE 6 - 11+\n\t\t\t\t\t\t// Use the isDisabled shortcut property to check for disabled fieldset ancestors\n\t\t\t\t\t\treturn elem.isDisabled === disabled ||\n\n\t\t\t\t\t\t\t// Where there is no isDisabled, check manually\n\t\t\t\t\t\t\telem.isDisabled !== !disabled &&\n\t\t\t\t\t\t\tinDisabledFieldset(elem) === disabled;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn elem.disabled === disabled;\n\n\t\t\t\t\t// Try to winnow out elements that can't be disabled before trusting the disabled property.\n\t\t\t\t\t// Some victims get caught in our net (label, legend, menu, track), but it shouldn't\n\t\t\t\t\t// even exist on them, let alone have a boolean value.\n\t\t\t\t} else if (\"label\" in elem) {\n\t\t\t\t\treturn elem.disabled === disabled;\n\t\t\t\t}\n\n\t\t\t\t// Remaining elements are neither :enabled nor :disabled\n\t\t\t\treturn false;\n\t\t\t};\n\t\t}\n\n\t\t/**\n\t\t * Returns a function to use in pseudos for positionals\n\t\t * @param {Function} fn\n\t\t */\n\t\tfunction createPositionalPseudo(fn) {\n\t\t\treturn markFunction(function (argument) {\n\t\t\t\targument = +argument;\n\t\t\t\treturn markFunction(function (seed, matches) {\n\t\t\t\t\tvar j,\n\t\t\t\t\t\tmatchIndexes = fn([], seed.length, argument),\n\t\t\t\t\t\ti = matchIndexes.length;\n\n\t\t\t\t\t// Match elements found at the specified indexes\n\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\tif (seed[(j = matchIndexes[i])]) {\n\t\t\t\t\t\t\tseed[j] = !(matches[j] = seed[j]);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\n\t\t/**\n\t\t * Checks a node for validity as a jQuery selector context\n\t\t * @param {Element|Object=} context\n\t\t * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value\n\t\t */\n\t\tfunction testContext(context) {\n\t\t\treturn context && typeof context.getElementsByTagName !== \"undefined\" && context;\n\t\t}\n\n\t\t/**\n\t\t * Sets document-related variables once based on the current document\n\t\t * @param {Element|Object} [node] An element or document object to use to set the document\n\t\t * @returns {Object} Returns the current document\n\t\t */\n\t\tfunction setDocument(node) {\n\t\t\tvar subWindow,\n\t\t\t\tdoc = node ? node.ownerDocument || node : preferredDoc;\n\n\t\t\t// Return early if doc is invalid or already selected\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tif (doc == document || doc.nodeType !== 9 || !doc.documentElement) {\n\t\t\t\treturn document;\n\t\t\t}\n\n\t\t\t// Update global variables\n\t\t\tdocument = doc;\n\t\t\tdocumentElement = document.documentElement;\n\t\t\tdocumentIsHTML = !jQuery.isXMLDoc(document);\n\n\t\t\t// Support: iOS 7 only, IE 9 - 11+\n\t\t\t// Older browsers didn't support unprefixed `matches`.\n\t\t\tmatches = documentElement.matches ||\n\t\t\t\tdocumentElement.webkitMatchesSelector ||\n\t\t\t\tdocumentElement.msMatchesSelector;\n\n\t\t\t// Support: IE 9 - 11+, Edge 12 - 18+\n\t\t\t// Accessing iframe documents after unload throws \"permission denied\" errors (see trac-13936)\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tif (preferredDoc != document &&\n\t\t\t\t(subWindow = document.defaultView) && subWindow.top !== subWindow) {\n\n\t\t\t\t// Support: IE 9 - 11+, Edge 12 - 18+\n\t\t\t\tsubWindow.addEventListener(\"unload\", unloadHandler);\n\t\t\t}\n\n\t\t\t// Support: IE <10\n\t\t\t// Check if getElementById returns elements by name\n\t\t\t// The broken getElementById methods don't pick up programmatically-set names,\n\t\t\t// so use a roundabout getElementsByName test\n\t\t\tsupport.getById = assert(function (el) {\n\t\t\t\tdocumentElement.appendChild(el).id = jQuery.expando;\n\t\t\t\treturn !document.getElementsByName ||\n\t\t\t\t\t!document.getElementsByName(jQuery.expando).length;\n\t\t\t});\n\n\t\t\t// Support: IE 9 only\n\t\t\t// Check to see if it's possible to do matchesSelector\n\t\t\t// on a disconnected node.\n\t\t\tsupport.disconnectedMatch = assert(function (el) {\n\t\t\t\treturn matches.call(el, \"*\");\n\t\t\t});\n\n\t\t\t// Support: IE 9 - 11+, Edge 12 - 18+\n\t\t\t// IE/Edge don't support the :scope pseudo-class.\n\t\t\tsupport.scope = assert(function () {\n\t\t\t\treturn document.querySelectorAll(\":scope\");\n\t\t\t});\n\n\t\t\t// Support: Chrome 105 - 111 only, Safari 15.4 - 16.3 only\n\t\t\t// Make sure the `:has()` argument is parsed unforgivingly.\n\t\t\t// We include `*` in the test to detect buggy implementations that are\n\t\t\t// _selectively_ forgiving (specifically when the list includes at least\n\t\t\t// one valid selector).\n\t\t\t// Note that we treat complete lack of support for `:has()` as if it were\n\t\t\t// spec-compliant support, which is fine because use of `:has()` in such\n\t\t\t// environments will fail in the qSA path and fall back to jQuery traversal\n\t\t\t// anyway.\n\t\t\tsupport.cssHas = assert(function () {\n\t\t\t\ttry {\n\t\t\t\t\tdocument.querySelector(\":has(*,:jqfake)\");\n\t\t\t\t\treturn false;\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t// ID filter and find\n\t\t\tif (support.getById) {\n\t\t\t\tExpr.filter.ID = function (id) {\n\t\t\t\t\tvar attrId = id.replace(runescape, funescape);\n\t\t\t\t\treturn function (elem) {\n\t\t\t\t\t\treturn elem.getAttribute(\"id\") === attrId;\n\t\t\t\t\t};\n\t\t\t\t};\n\t\t\t\tExpr.find.ID = function (id, context) {\n\t\t\t\t\tif (typeof context.getElementById !== \"undefined\" && documentIsHTML) {\n\t\t\t\t\t\tvar elem = context.getElementById(id);\n\t\t\t\t\t\treturn elem ? [elem] : [];\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t} else {\n\t\t\t\tExpr.filter.ID = function (id) {\n\t\t\t\t\tvar attrId = id.replace(runescape, funescape);\n\t\t\t\t\treturn function (elem) {\n\t\t\t\t\t\tvar node = typeof elem.getAttributeNode !== \"undefined\" &&\n\t\t\t\t\t\t\telem.getAttributeNode(\"id\");\n\t\t\t\t\t\treturn node && node.value === attrId;\n\t\t\t\t\t};\n\t\t\t\t};\n\n\t\t\t\t// Support: IE 6 - 7 only\n\t\t\t\t// getElementById is not reliable as a find shortcut\n\t\t\t\tExpr.find.ID = function (id, context) {\n\t\t\t\t\tif (typeof context.getElementById !== \"undefined\" && documentIsHTML) {\n\t\t\t\t\t\tvar node, i, elems,\n\t\t\t\t\t\t\telem = context.getElementById(id);\n\n\t\t\t\t\t\tif (elem) {\n\n\t\t\t\t\t\t\t// Verify the id attribute\n\t\t\t\t\t\t\tnode = elem.getAttributeNode(\"id\");\n\t\t\t\t\t\t\tif (node && node.value === id) {\n\t\t\t\t\t\t\t\treturn [elem];\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Fall back on getElementsByName\n\t\t\t\t\t\t\telems = context.getElementsByName(id);\n\t\t\t\t\t\t\ti = 0;\n\t\t\t\t\t\t\twhile ((elem = elems[i++])) {\n\t\t\t\t\t\t\t\tnode = elem.getAttributeNode(\"id\");\n\t\t\t\t\t\t\t\tif (node && node.value === id) {\n\t\t\t\t\t\t\t\t\treturn [elem];\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn [];\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\n\t\t\t// Tag\n\t\t\tExpr.find.TAG = function (tag, context) {\n\t\t\t\tif (typeof context.getElementsByTagName !== \"undefined\") {\n\t\t\t\t\treturn context.getElementsByTagName(tag);\n\n\t\t\t\t\t// DocumentFragment nodes don't have gEBTN\n\t\t\t\t} else {\n\t\t\t\t\treturn context.querySelectorAll(tag);\n\t\t\t\t}\n\t\t\t};\n\n\t\t\t// Class\n\t\t\tExpr.find.CLASS = function (className, context) {\n\t\t\t\tif (typeof context.getElementsByClassName !== \"undefined\" && documentIsHTML) {\n\t\t\t\t\treturn context.getElementsByClassName(className);\n\t\t\t\t}\n\t\t\t};\n\n\t\t\t/* QSA/matchesSelector\n\t\t\t---------------------------------------------------------------------- */\n\n\t\t\t// QSA and matchesSelector support\n\n\t\t\trbuggyQSA = [];\n\n\t\t\t// Build QSA regex\n\t\t\t// Regex strategy adopted from Diego Perini\n\t\t\tassert(function (el) {\n\n\t\t\t\tvar input;\n\n\t\t\t\tdocumentElement.appendChild(el).innerHTML =\n\t\t\t\t\t\"<a id='\" + expando + \"' href='' disabled='disabled'></a>\" +\n\t\t\t\t\t\"<select id='\" + expando + \"-\\r\\\\' disabled='disabled'>\" +\n\t\t\t\t\t\"<option selected=''></option></select>\";\n\n\t\t\t\t// Support: iOS <=7 - 8 only\n\t\t\t\t// Boolean attributes and \"value\" are not treated correctly in some XML documents\n\t\t\t\tif (!el.querySelectorAll(\"[selected]\").length) {\n\t\t\t\t\trbuggyQSA.push(\"\\\\[\" + whitespace + \"*(?:value|\" + booleans + \")\");\n\t\t\t\t}\n\n\t\t\t\t// Support: iOS <=7 - 8 only\n\t\t\t\tif (!el.querySelectorAll(\"[id~=\" + expando + \"-]\").length) {\n\t\t\t\t\trbuggyQSA.push(\"~=\");\n\t\t\t\t}\n\n\t\t\t\t// Support: iOS 8 only\n\t\t\t\t// https://bugs.webkit.org/show_bug.cgi?id=136851\n\t\t\t\t// In-page `selector#id sibling-combinator selector` fails\n\t\t\t\tif (!el.querySelectorAll(\"a#\" + expando + \"+*\").length) {\n\t\t\t\t\trbuggyQSA.push(\".#.+[+~]\");\n\t\t\t\t}\n\n\t\t\t\t// Support: Chrome <=105+, Firefox <=104+, Safari <=15.4+\n\t\t\t\t// In some of the document kinds, these selectors wouldn't work natively.\n\t\t\t\t// This is probably OK but for backwards compatibility we want to maintain\n\t\t\t\t// handling them through jQuery traversal in jQuery 3.x.\n\t\t\t\tif (!el.querySelectorAll(\":checked\").length) {\n\t\t\t\t\trbuggyQSA.push(\":checked\");\n\t\t\t\t}\n\n\t\t\t\t// Support: Windows 8 Native Apps\n\t\t\t\t// The type and name attributes are restricted during .innerHTML assignment\n\t\t\t\tinput = document.createElement(\"input\");\n\t\t\t\tinput.setAttribute(\"type\", \"hidden\");\n\t\t\t\tel.appendChild(input).setAttribute(\"name\", \"D\");\n\n\t\t\t\t// Support: IE 9 - 11+\n\t\t\t\t// IE's :disabled selector does not pick up the children of disabled fieldsets\n\t\t\t\t// Support: Chrome <=105+, Firefox <=104+, Safari <=15.4+\n\t\t\t\t// In some of the document kinds, these selectors wouldn't work natively.\n\t\t\t\t// This is probably OK but for backwards compatibility we want to maintain\n\t\t\t\t// handling them through jQuery traversal in jQuery 3.x.\n\t\t\t\tdocumentElement.appendChild(el).disabled = true;\n\t\t\t\tif (el.querySelectorAll(\":disabled\").length !== 2) {\n\t\t\t\t\trbuggyQSA.push(\":enabled\", \":disabled\");\n\t\t\t\t}\n\n\t\t\t\t// Support: IE 11+, Edge 15 - 18+\n\t\t\t\t// IE 11/Edge don't find elements on a `[name='']` query in some cases.\n\t\t\t\t// Adding a temporary attribute to the document before the selection works\n\t\t\t\t// around the issue.\n\t\t\t\t// Interestingly, IE 10 & older don't seem to have the issue.\n\t\t\t\tinput = document.createElement(\"input\");\n\t\t\t\tinput.setAttribute(\"name\", \"\");\n\t\t\t\tel.appendChild(input);\n\t\t\t\tif (!el.querySelectorAll(\"[name='']\").length) {\n\t\t\t\t\trbuggyQSA.push(\"\\\\[\" + whitespace + \"*name\" + whitespace + \"*=\" +\n\t\t\t\t\t\twhitespace + \"*(?:''|\\\"\\\")\");\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tif (!support.cssHas) {\n\n\t\t\t\t// Support: Chrome 105 - 110+, Safari 15.4 - 16.3+\n\t\t\t\t// Our regular `try-catch` mechanism fails to detect natively-unsupported\n\t\t\t\t// pseudo-classes inside `:has()` (such as `:has(:contains(\"Foo\"))`)\n\t\t\t\t// in browsers that parse the `:has()` argument as a forgiving selector list.\n\t\t\t\t// https://drafts.csswg.org/selectors/#relational now requires the argument\n\t\t\t\t// to be parsed unforgivingly, but browsers have not yet fully adjusted.\n\t\t\t\trbuggyQSA.push(\":has\");\n\t\t\t}\n\n\t\t\trbuggyQSA = rbuggyQSA.length && new RegExp(rbuggyQSA.join(\"|\"));\n\n\t\t\t/* Sorting\n\t\t\t---------------------------------------------------------------------- */\n\n\t\t\t// Document order sorting\n\t\t\tsortOrder = function (a, b) {\n\n\t\t\t\t// Flag for duplicate removal\n\t\t\t\tif (a === b) {\n\t\t\t\t\thasDuplicate = true;\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\n\t\t\t\t// Sort on method existence if only one input has compareDocumentPosition\n\t\t\t\tvar compare = !a.compareDocumentPosition - !b.compareDocumentPosition;\n\t\t\t\tif (compare) {\n\t\t\t\t\treturn compare;\n\t\t\t\t}\n\n\t\t\t\t// Calculate position if both inputs belong to the same document\n\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\tcompare = (a.ownerDocument || a) == (b.ownerDocument || b) ?\n\t\t\t\t\ta.compareDocumentPosition(b) :\n\n\t\t\t\t\t// Otherwise we know they are disconnected\n\t\t\t\t\t1;\n\n\t\t\t\t// Disconnected nodes\n\t\t\t\tif (compare & 1 ||\n\t\t\t\t\t(!support.sortDetached && b.compareDocumentPosition(a) === compare)) {\n\n\t\t\t\t\t// Choose the first element that is related to our preferred document\n\t\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\tif (a === document || a.ownerDocument == preferredDoc &&\n\t\t\t\t\t\tfind.contains(preferredDoc, a)) {\n\t\t\t\t\t\treturn -1;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\tif (b === document || b.ownerDocument == preferredDoc &&\n\t\t\t\t\t\tfind.contains(preferredDoc, b)) {\n\t\t\t\t\t\treturn 1;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Maintain original order\n\t\t\t\t\treturn sortInput ?\n\t\t\t\t\t\t(indexOf.call(sortInput, a) - indexOf.call(sortInput, b)) :\n\t\t\t\t\t\t0;\n\t\t\t\t}\n\n\t\t\t\treturn compare & 4 ? -1 : 1;\n\t\t\t};\n\n\t\t\treturn document;\n\t\t}\n\n\t\tfind.matches = function (expr, elements) {\n\t\t\treturn find(expr, null, null, elements);\n\t\t};\n\n\t\tfind.matchesSelector = function (elem, expr) {\n\t\t\tsetDocument(elem);\n\n\t\t\tif (documentIsHTML &&\n\t\t\t\t!nonnativeSelectorCache[expr + \" \"] &&\n\t\t\t\t(!rbuggyQSA || !rbuggyQSA.test(expr))) {\n\n\t\t\t\ttry {\n\t\t\t\t\tvar ret = matches.call(elem, expr);\n\n\t\t\t\t\t// IE 9's matchesSelector returns false on disconnected nodes\n\t\t\t\t\tif (ret || support.disconnectedMatch ||\n\n\t\t\t\t\t\t// As well, disconnected nodes are said to be in a document\n\t\t\t\t\t\t// fragment in IE 9\n\t\t\t\t\t\telem.document && elem.document.nodeType !== 11) {\n\t\t\t\t\t\treturn ret;\n\t\t\t\t\t}\n\t\t\t\t} catch (e) {\n\t\t\t\t\tnonnativeSelectorCache(expr, true);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn find(expr, document, null, [elem]).length > 0;\n\t\t};\n\n\t\tfind.contains = function (context, elem) {\n\n\t\t\t// Set document vars if needed\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tif ((context.ownerDocument || context) != document) {\n\t\t\t\tsetDocument(context);\n\t\t\t}\n\t\t\treturn jQuery.contains(context, elem);\n\t\t};\n\n\n\t\tfind.attr = function (elem, name) {\n\n\t\t\t// Set document vars if needed\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tif ((elem.ownerDocument || elem) != document) {\n\t\t\t\tsetDocument(elem);\n\t\t\t}\n\n\t\t\tvar fn = Expr.attrHandle[name.toLowerCase()],\n\n\t\t\t\t// Don't get fooled by Object.prototype properties (see trac-13807)\n\t\t\t\tval = fn && hasOwn.call(Expr.attrHandle, name.toLowerCase()) ?\n\t\t\t\t\tfn(elem, name, !documentIsHTML) :\n\t\t\t\t\tundefined;\n\n\t\t\tif (val !== undefined) {\n\t\t\t\treturn val;\n\t\t\t}\n\n\t\t\treturn elem.getAttribute(name);\n\t\t};\n\n\t\tfind.error = function (msg) {\n\t\t\tthrow new Error(\"Syntax error, unrecognized expression: \" + msg);\n\t\t};\n\n\t\t/**\n\t\t * Document sorting and removing duplicates\n\t\t * @param {ArrayLike} results\n\t\t */\n\t\tjQuery.uniqueSort = function (results) {\n\t\t\tvar elem,\n\t\t\t\tduplicates = [],\n\t\t\t\tj = 0,\n\t\t\t\ti = 0;\n\n\t\t\t// Unless we *know* we can detect duplicates, assume their presence\n\t\t\t//\n\t\t\t// Support: Android <=4.0+\n\t\t\t// Testing for detecting duplicates is unpredictable so instead assume we can't\n\t\t\t// depend on duplicate detection in all browsers without a stable sort.\n\t\t\thasDuplicate = !support.sortStable;\n\t\t\tsortInput = !support.sortStable && slice.call(results, 0);\n\t\t\tsort.call(results, sortOrder);\n\n\t\t\tif (hasDuplicate) {\n\t\t\t\twhile ((elem = results[i++])) {\n\t\t\t\t\tif (elem === results[i]) {\n\t\t\t\t\t\tj = duplicates.push(i);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\twhile (j--) {\n\t\t\t\t\tsplice.call(results, duplicates[j], 1);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Clear input after sorting to release objects\n\t\t\t// See https://github.com/jquery/sizzle/pull/225\n\t\t\tsortInput = null;\n\n\t\t\treturn results;\n\t\t};\n\n\t\tjQuery.fn.uniqueSort = function () {\n\t\t\treturn this.pushStack(jQuery.uniqueSort(slice.apply(this)));\n\t\t};\n\n\t\tExpr = jQuery.expr = {\n\n\t\t\t// Can be adjusted by the user\n\t\t\tcacheLength: 50,\n\n\t\t\tcreatePseudo: markFunction,\n\n\t\t\tmatch: matchExpr,\n\n\t\t\tattrHandle: {},\n\n\t\t\tfind: {},\n\n\t\t\trelative: {\n\t\t\t\t\">\": { dir: \"parentNode\", first: true },\n\t\t\t\t\" \": { dir: \"parentNode\" },\n\t\t\t\t\"+\": { dir: \"previousSibling\", first: true },\n\t\t\t\t\"~\": { dir: \"previousSibling\" }\n\t\t\t},\n\n\t\t\tpreFilter: {\n\t\t\t\tATTR: function (match) {\n\t\t\t\t\tmatch[1] = match[1].replace(runescape, funescape);\n\n\t\t\t\t\t// Move the given value to match[3] whether quoted or unquoted\n\t\t\t\t\tmatch[3] = (match[3] || match[4] || match[5] || \"\")\n\t\t\t\t\t\t.replace(runescape, funescape);\n\n\t\t\t\t\tif (match[2] === \"~=\") {\n\t\t\t\t\t\tmatch[3] = \" \" + match[3] + \" \";\n\t\t\t\t\t}\n\n\t\t\t\t\treturn match.slice(0, 4);\n\t\t\t\t},\n\n\t\t\t\tCHILD: function (match) {\n\n\t\t\t\t\t/* matches from matchExpr[\"CHILD\"]\n\t\t\t\t\t\t1 type (only|nth|...)\n\t\t\t\t\t\t2 what (child|of-type)\n\t\t\t\t\t\t3 argument (even|odd|\\d*|\\d*n([+-]\\d+)?|...)\n\t\t\t\t\t\t4 xn-component of xn+y argument ([+-]?\\d*n|)\n\t\t\t\t\t\t5 sign of xn-component\n\t\t\t\t\t\t6 x of xn-component\n\t\t\t\t\t\t7 sign of y-component\n\t\t\t\t\t\t8 y of y-component\n\t\t\t\t\t*/\n\t\t\t\t\tmatch[1] = match[1].toLowerCase();\n\n\t\t\t\t\tif (match[1].slice(0, 3) === \"nth\") {\n\n\t\t\t\t\t\t// nth-* requires argument\n\t\t\t\t\t\tif (!match[3]) {\n\t\t\t\t\t\t\tfind.error(match[0]);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// numeric x and y parameters for Expr.filter.CHILD\n\t\t\t\t\t\t// remember that false/true cast respectively to 0/1\n\t\t\t\t\t\tmatch[4] = +(match[4] ?\n\t\t\t\t\t\t\tmatch[5] + (match[6] || 1) :\n\t\t\t\t\t\t\t2 * (match[3] === \"even\" || match[3] === \"odd\")\n\t\t\t\t\t\t);\n\t\t\t\t\t\tmatch[5] = +((match[7] + match[8]) || match[3] === \"odd\");\n\n\t\t\t\t\t\t// other types prohibit arguments\n\t\t\t\t\t} else if (match[3]) {\n\t\t\t\t\t\tfind.error(match[0]);\n\t\t\t\t\t}\n\n\t\t\t\t\treturn match;\n\t\t\t\t},\n\n\t\t\t\tPSEUDO: function (match) {\n\t\t\t\t\tvar excess,\n\t\t\t\t\t\tunquoted = !match[6] && match[2];\n\n\t\t\t\t\tif (matchExpr.CHILD.test(match[0])) {\n\t\t\t\t\t\treturn null;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Accept quoted arguments as-is\n\t\t\t\t\tif (match[3]) {\n\t\t\t\t\t\tmatch[2] = match[4] || match[5] || \"\";\n\n\t\t\t\t\t\t// Strip excess characters from unquoted arguments\n\t\t\t\t\t} else if (unquoted && rpseudo.test(unquoted) &&\n\n\t\t\t\t\t\t// Get excess from tokenize (recursively)\n\t\t\t\t\t\t(excess = tokenize(unquoted, true)) &&\n\n\t\t\t\t\t\t// advance to the next closing parenthesis\n\t\t\t\t\t\t(excess = unquoted.indexOf(\")\", unquoted.length - excess) - unquoted.length)) {\n\n\t\t\t\t\t\t// excess is a negative index\n\t\t\t\t\t\tmatch[0] = match[0].slice(0, excess);\n\t\t\t\t\t\tmatch[2] = unquoted.slice(0, excess);\n\t\t\t\t\t}\n\n\t\t\t\t\t// Return only captures needed by the pseudo filter method (type and argument)\n\t\t\t\t\treturn match.slice(0, 3);\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tfilter: {\n\n\t\t\t\tTAG: function (nodeNameSelector) {\n\t\t\t\t\tvar expectedNodeName = nodeNameSelector.replace(runescape, funescape).toLowerCase();\n\t\t\t\t\treturn nodeNameSelector === \"*\" ?\n\t\t\t\t\t\tfunction () {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t} :\n\t\t\t\t\t\tfunction (elem) {\n\t\t\t\t\t\t\treturn nodeName(elem, expectedNodeName);\n\t\t\t\t\t\t};\n\t\t\t\t},\n\n\t\t\t\tCLASS: function (className) {\n\t\t\t\t\tvar pattern = classCache[className + \" \"];\n\n\t\t\t\t\treturn pattern ||\n\t\t\t\t\t\t(pattern = new RegExp(\"(^|\" + whitespace + \")\" + className +\n\t\t\t\t\t\t\t\"(\" + whitespace + \"|$)\")) &&\n\t\t\t\t\t\tclassCache(className, function (elem) {\n\t\t\t\t\t\t\treturn pattern.test(\n\t\t\t\t\t\t\t\ttypeof elem.className === \"string\" && elem.className ||\n\t\t\t\t\t\t\t\ttypeof elem.getAttribute !== \"undefined\" &&\n\t\t\t\t\t\t\t\telem.getAttribute(\"class\") ||\n\t\t\t\t\t\t\t\t\"\"\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t});\n\t\t\t\t},\n\n\t\t\t\tATTR: function (name, operator, check) {\n\t\t\t\t\treturn function (elem) {\n\t\t\t\t\t\tvar result = find.attr(elem, name);\n\n\t\t\t\t\t\tif (result == null) {\n\t\t\t\t\t\t\treturn operator === \"!=\";\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!operator) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tresult += \"\";\n\n\t\t\t\t\t\tif (operator === \"=\") {\n\t\t\t\t\t\t\treturn result === check;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (operator === \"!=\") {\n\t\t\t\t\t\t\treturn result !== check;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (operator === \"^=\") {\n\t\t\t\t\t\t\treturn check && result.indexOf(check) === 0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (operator === \"*=\") {\n\t\t\t\t\t\t\treturn check && result.indexOf(check) > -1;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (operator === \"$=\") {\n\t\t\t\t\t\t\treturn check && result.slice(-check.length) === check;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (operator === \"~=\") {\n\t\t\t\t\t\t\treturn (\" \" + result.replace(rwhitespace, \" \") + \" \")\n\t\t\t\t\t\t\t\t.indexOf(check) > -1;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (operator === \"|=\") {\n\t\t\t\t\t\t\treturn result === check || result.slice(0, check.length + 1) === check + \"-\";\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t};\n\t\t\t\t},\n\n\t\t\t\tCHILD: function (type, what, _argument, first, last) {\n\t\t\t\t\tvar simple = type.slice(0, 3) !== \"nth\",\n\t\t\t\t\t\tforward = type.slice(-4) !== \"last\",\n\t\t\t\t\t\tofType = what === \"of-type\";\n\n\t\t\t\t\treturn first === 1 && last === 0 ?\n\n\t\t\t\t\t\t// Shortcut for :nth-*(n)\n\t\t\t\t\t\tfunction (elem) {\n\t\t\t\t\t\t\treturn !!elem.parentNode;\n\t\t\t\t\t\t} :\n\n\t\t\t\t\t\tfunction (elem, _context, xml) {\n\t\t\t\t\t\t\tvar cache, outerCache, node, nodeIndex, start,\n\t\t\t\t\t\t\t\tdir = simple !== forward ? \"nextSibling\" : \"previousSibling\",\n\t\t\t\t\t\t\t\tparent = elem.parentNode,\n\t\t\t\t\t\t\t\tname = ofType && elem.nodeName.toLowerCase(),\n\t\t\t\t\t\t\t\tuseCache = !xml && !ofType,\n\t\t\t\t\t\t\t\tdiff = false;\n\n\t\t\t\t\t\t\tif (parent) {\n\n\t\t\t\t\t\t\t\t// :(first|last|only)-(child|of-type)\n\t\t\t\t\t\t\t\tif (simple) {\n\t\t\t\t\t\t\t\t\twhile (dir) {\n\t\t\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\t\t\twhile ((node = node[dir])) {\n\t\t\t\t\t\t\t\t\t\t\tif (ofType ?\n\t\t\t\t\t\t\t\t\t\t\t\tnodeName(node, name) :\n\t\t\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1) {\n\n\t\t\t\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t// Reverse direction for :only-* (if we haven't yet done so)\n\t\t\t\t\t\t\t\t\t\tstart = dir = type === \"only\" && !start && \"nextSibling\";\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tstart = [forward ? parent.firstChild : parent.lastChild];\n\n\t\t\t\t\t\t\t\t// non-xml :nth-child(...) stores cache data on `parent`\n\t\t\t\t\t\t\t\tif (forward && useCache) {\n\n\t\t\t\t\t\t\t\t\t// Seek `elem` from a previously-cached index\n\t\t\t\t\t\t\t\t\touterCache = parent[expando] || (parent[expando] = {});\n\t\t\t\t\t\t\t\t\tcache = outerCache[type] || [];\n\t\t\t\t\t\t\t\t\tnodeIndex = cache[0] === dirruns && cache[1];\n\t\t\t\t\t\t\t\t\tdiff = nodeIndex && cache[2];\n\t\t\t\t\t\t\t\t\tnode = nodeIndex && parent.childNodes[nodeIndex];\n\n\t\t\t\t\t\t\t\t\twhile ((node = ++nodeIndex && node && node[dir] ||\n\n\t\t\t\t\t\t\t\t\t\t// Fallback to seeking `elem` from the start\n\t\t\t\t\t\t\t\t\t\t(diff = nodeIndex = 0) || start.pop())) {\n\n\t\t\t\t\t\t\t\t\t\t// When found, cache indexes on `parent` and break\n\t\t\t\t\t\t\t\t\t\tif (node.nodeType === 1 && ++diff && node === elem) {\n\t\t\t\t\t\t\t\t\t\t\touterCache[type] = [dirruns, nodeIndex, diff];\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t// Use previously-cached element index if available\n\t\t\t\t\t\t\t\t\tif (useCache) {\n\t\t\t\t\t\t\t\t\t\touterCache = elem[expando] || (elem[expando] = {});\n\t\t\t\t\t\t\t\t\t\tcache = outerCache[type] || [];\n\t\t\t\t\t\t\t\t\t\tnodeIndex = cache[0] === dirruns && cache[1];\n\t\t\t\t\t\t\t\t\t\tdiff = nodeIndex;\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// xml :nth-child(...)\n\t\t\t\t\t\t\t\t\t// or :nth-last-child(...) or :nth(-last)?-of-type(...)\n\t\t\t\t\t\t\t\t\tif (diff === false) {\n\n\t\t\t\t\t\t\t\t\t\t// Use the same loop as above to seek `elem` from the start\n\t\t\t\t\t\t\t\t\t\twhile ((node = ++nodeIndex && node && node[dir] ||\n\t\t\t\t\t\t\t\t\t\t\t(diff = nodeIndex = 0) || start.pop())) {\n\n\t\t\t\t\t\t\t\t\t\t\tif ((ofType ?\n\t\t\t\t\t\t\t\t\t\t\t\tnodeName(node, name) :\n\t\t\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1) &&\n\t\t\t\t\t\t\t\t\t\t\t\t++diff) {\n\n\t\t\t\t\t\t\t\t\t\t\t\t// Cache the index of each encountered element\n\t\t\t\t\t\t\t\t\t\t\t\tif (useCache) {\n\t\t\t\t\t\t\t\t\t\t\t\t\touterCache = node[expando] ||\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t(node[expando] = {});\n\t\t\t\t\t\t\t\t\t\t\t\t\touterCache[type] = [dirruns, diff];\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\tif (node === elem) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t// Incorporate the offset, then check against cycle size\n\t\t\t\t\t\t\t\tdiff -= last;\n\t\t\t\t\t\t\t\treturn diff === first || (diff % first === 0 && diff / first >= 0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\t\t\t\t},\n\n\t\t\t\tPSEUDO: function (pseudo, argument) {\n\n\t\t\t\t\t// pseudo-class names are case-insensitive\n\t\t\t\t\t// https://www.w3.org/TR/selectors/#pseudo-classes\n\t\t\t\t\t// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters\n\t\t\t\t\t// Remember that setFilters inherits from pseudos\n\t\t\t\t\tvar args,\n\t\t\t\t\t\tfn = Expr.pseudos[pseudo] || Expr.setFilters[pseudo.toLowerCase()] ||\n\t\t\t\t\t\t\tfind.error(\"unsupported pseudo: \" + pseudo);\n\n\t\t\t\t\t// The user may use createPseudo to indicate that\n\t\t\t\t\t// arguments are needed to create the filter function\n\t\t\t\t\t// just as jQuery does\n\t\t\t\t\tif (fn[expando]) {\n\t\t\t\t\t\treturn fn(argument);\n\t\t\t\t\t}\n\n\t\t\t\t\t// But maintain support for old signatures\n\t\t\t\t\tif (fn.length > 1) {\n\t\t\t\t\t\targs = [pseudo, pseudo, \"\", argument];\n\t\t\t\t\t\treturn Expr.setFilters.hasOwnProperty(pseudo.toLowerCase()) ?\n\t\t\t\t\t\t\tmarkFunction(function (seed, matches) {\n\t\t\t\t\t\t\t\tvar idx,\n\t\t\t\t\t\t\t\t\tmatched = fn(seed, argument),\n\t\t\t\t\t\t\t\t\ti = matched.length;\n\t\t\t\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\t\t\t\tidx = indexOf.call(seed, matched[i]);\n\t\t\t\t\t\t\t\t\tseed[idx] = !(matches[idx] = matched[i]);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}) :\n\t\t\t\t\t\t\tfunction (elem) {\n\t\t\t\t\t\t\t\treturn fn(elem, 0, args);\n\t\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\treturn fn;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tpseudos: {\n\n\t\t\t\t// Potentially complex pseudos\n\t\t\t\tnot: markFunction(function (selector) {\n\n\t\t\t\t\t// Trim the selector passed to compile\n\t\t\t\t\t// to avoid treating leading and trailing\n\t\t\t\t\t// spaces as combinators\n\t\t\t\t\tvar input = [],\n\t\t\t\t\t\tresults = [],\n\t\t\t\t\t\tmatcher = compile(selector.replace(rtrimCSS, \"$1\"));\n\n\t\t\t\t\treturn matcher[expando] ?\n\t\t\t\t\t\tmarkFunction(function (seed, matches, _context, xml) {\n\t\t\t\t\t\t\tvar elem,\n\t\t\t\t\t\t\t\tunmatched = matcher(seed, null, xml, []),\n\t\t\t\t\t\t\t\ti = seed.length;\n\n\t\t\t\t\t\t\t// Match elements unmatched by `matcher`\n\t\t\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\t\t\tif ((elem = unmatched[i])) {\n\t\t\t\t\t\t\t\t\tseed[i] = !(matches[i] = elem);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}) :\n\t\t\t\t\t\tfunction (elem, _context, xml) {\n\t\t\t\t\t\t\tinput[0] = elem;\n\t\t\t\t\t\t\tmatcher(input, null, xml, results);\n\n\t\t\t\t\t\t\t// Don't keep the element\n\t\t\t\t\t\t\t// (see https://github.com/jquery/sizzle/issues/299)\n\t\t\t\t\t\t\tinput[0] = null;\n\t\t\t\t\t\t\treturn !results.pop();\n\t\t\t\t\t\t};\n\t\t\t\t}),\n\n\t\t\t\thas: markFunction(function (selector) {\n\t\t\t\t\treturn function (elem) {\n\t\t\t\t\t\treturn find(selector, elem).length > 0;\n\t\t\t\t\t};\n\t\t\t\t}),\n\n\t\t\t\tcontains: markFunction(function (text) {\n\t\t\t\t\ttext = text.replace(runescape, funescape);\n\t\t\t\t\treturn function (elem) {\n\t\t\t\t\t\treturn (elem.textContent || jQuery.text(elem)).indexOf(text) > -1;\n\t\t\t\t\t};\n\t\t\t\t}),\n\n\t\t\t\t// \"Whether an element is represented by a :lang() selector\n\t\t\t\t// is based solely on the element's language value\n\t\t\t\t// being equal to the identifier C,\n\t\t\t\t// or beginning with the identifier C immediately followed by \"-\".\n\t\t\t\t// The matching of C against the element's language value is performed case-insensitively.\n\t\t\t\t// The identifier C does not have to be a valid language name.\"\n\t\t\t\t// https://www.w3.org/TR/selectors/#lang-pseudo\n\t\t\t\tlang: markFunction(function (lang) {\n\n\t\t\t\t\t// lang value must be a valid identifier\n\t\t\t\t\tif (!ridentifier.test(lang || \"\")) {\n\t\t\t\t\t\tfind.error(\"unsupported lang: \" + lang);\n\t\t\t\t\t}\n\t\t\t\t\tlang = lang.replace(runescape, funescape).toLowerCase();\n\t\t\t\t\treturn function (elem) {\n\t\t\t\t\t\tvar elemLang;\n\t\t\t\t\t\tdo {\n\t\t\t\t\t\t\tif ((elemLang = documentIsHTML ?\n\t\t\t\t\t\t\t\telem.lang :\n\t\t\t\t\t\t\t\telem.getAttribute(\"xml:lang\") || elem.getAttribute(\"lang\"))) {\n\n\t\t\t\t\t\t\t\telemLang = elemLang.toLowerCase();\n\t\t\t\t\t\t\t\treturn elemLang === lang || elemLang.indexOf(lang + \"-\") === 0;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} while ((elem = elem.parentNode) && elem.nodeType === 1);\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t};\n\t\t\t\t}),\n\n\t\t\t\t// Miscellaneous\n\t\t\t\ttarget: function (elem) {\n\t\t\t\t\tvar hash = window.location && window.location.hash;\n\t\t\t\t\treturn hash && hash.slice(1) === elem.id;\n\t\t\t\t},\n\n\t\t\t\troot: function (elem) {\n\t\t\t\t\treturn elem === documentElement;\n\t\t\t\t},\n\n\t\t\t\tfocus: function (elem) {\n\t\t\t\t\treturn elem === safeActiveElement() &&\n\t\t\t\t\t\tdocument.hasFocus() &&\n\t\t\t\t\t\t!!(elem.type || elem.href || ~elem.tabIndex);\n\t\t\t\t},\n\n\t\t\t\t// Boolean properties\n\t\t\t\tenabled: createDisabledPseudo(false),\n\t\t\t\tdisabled: createDisabledPseudo(true),\n\n\t\t\t\tchecked: function (elem) {\n\n\t\t\t\t\t// In CSS3, :checked should return both checked and selected elements\n\t\t\t\t\t// https://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\t\t\treturn (nodeName(elem, \"input\") && !!elem.checked) ||\n\t\t\t\t\t\t(nodeName(elem, \"option\") && !!elem.selected);\n\t\t\t\t},\n\n\t\t\t\tselected: function (elem) {\n\n\t\t\t\t\t// Support: IE <=11+\n\t\t\t\t\t// Accessing the selectedIndex property\n\t\t\t\t\t// forces the browser to treat the default option as\n\t\t\t\t\t// selected when in an optgroup.\n\t\t\t\t\tif (elem.parentNode) {\n\t\t\t\t\t\t// eslint-disable-next-line no-unused-expressions\n\t\t\t\t\t\telem.parentNode.selectedIndex;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn elem.selected === true;\n\t\t\t\t},\n\n\t\t\t\t// Contents\n\t\t\t\tempty: function (elem) {\n\n\t\t\t\t\t// https://www.w3.org/TR/selectors/#empty-pseudo\n\t\t\t\t\t// :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),\n\t\t\t\t\t//   but not by others (comment: 8; processing instruction: 7; etc.)\n\t\t\t\t\t// nodeType < 6 works because attributes (2) do not appear as children\n\t\t\t\t\tfor (elem = elem.firstChild; elem; elem = elem.nextSibling) {\n\t\t\t\t\t\tif (elem.nodeType < 6) {\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn true;\n\t\t\t\t},\n\n\t\t\t\tparent: function (elem) {\n\t\t\t\t\treturn !Expr.pseudos.empty(elem);\n\t\t\t\t},\n\n\t\t\t\t// Element/input types\n\t\t\t\theader: function (elem) {\n\t\t\t\t\treturn rheader.test(elem.nodeName);\n\t\t\t\t},\n\n\t\t\t\tinput: function (elem) {\n\t\t\t\t\treturn rinputs.test(elem.nodeName);\n\t\t\t\t},\n\n\t\t\t\tbutton: function (elem) {\n\t\t\t\t\treturn nodeName(elem, \"input\") && elem.type === \"button\" ||\n\t\t\t\t\t\tnodeName(elem, \"button\");\n\t\t\t\t},\n\n\t\t\t\ttext: function (elem) {\n\t\t\t\t\tvar attr;\n\t\t\t\t\treturn nodeName(elem, \"input\") && elem.type === \"text\" &&\n\n\t\t\t\t\t\t// Support: IE <10 only\n\t\t\t\t\t\t// New HTML5 attribute values (e.g., \"search\") appear\n\t\t\t\t\t\t// with elem.type === \"text\"\n\t\t\t\t\t\t((attr = elem.getAttribute(\"type\")) == null ||\n\t\t\t\t\t\t\tattr.toLowerCase() === \"text\");\n\t\t\t\t},\n\n\t\t\t\t// Position-in-collection\n\t\t\t\tfirst: createPositionalPseudo(function () {\n\t\t\t\t\treturn [0];\n\t\t\t\t}),\n\n\t\t\t\tlast: createPositionalPseudo(function (_matchIndexes, length) {\n\t\t\t\t\treturn [length - 1];\n\t\t\t\t}),\n\n\t\t\t\teq: createPositionalPseudo(function (_matchIndexes, length, argument) {\n\t\t\t\t\treturn [argument < 0 ? argument + length : argument];\n\t\t\t\t}),\n\n\t\t\t\teven: createPositionalPseudo(function (matchIndexes, length) {\n\t\t\t\t\tvar i = 0;\n\t\t\t\t\tfor (; i < length; i += 2) {\n\t\t\t\t\t\tmatchIndexes.push(i);\n\t\t\t\t\t}\n\t\t\t\t\treturn matchIndexes;\n\t\t\t\t}),\n\n\t\t\t\todd: createPositionalPseudo(function (matchIndexes, length) {\n\t\t\t\t\tvar i = 1;\n\t\t\t\t\tfor (; i < length; i += 2) {\n\t\t\t\t\t\tmatchIndexes.push(i);\n\t\t\t\t\t}\n\t\t\t\t\treturn matchIndexes;\n\t\t\t\t}),\n\n\t\t\t\tlt: createPositionalPseudo(function (matchIndexes, length, argument) {\n\t\t\t\t\tvar i;\n\n\t\t\t\t\tif (argument < 0) {\n\t\t\t\t\t\ti = argument + length;\n\t\t\t\t\t} else if (argument > length) {\n\t\t\t\t\t\ti = length;\n\t\t\t\t\t} else {\n\t\t\t\t\t\ti = argument;\n\t\t\t\t\t}\n\n\t\t\t\t\tfor (; --i >= 0;) {\n\t\t\t\t\t\tmatchIndexes.push(i);\n\t\t\t\t\t}\n\t\t\t\t\treturn matchIndexes;\n\t\t\t\t}),\n\n\t\t\t\tgt: createPositionalPseudo(function (matchIndexes, length, argument) {\n\t\t\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\t\t\tfor (; ++i < length;) {\n\t\t\t\t\t\tmatchIndexes.push(i);\n\t\t\t\t\t}\n\t\t\t\t\treturn matchIndexes;\n\t\t\t\t})\n\t\t\t}\n\t\t};\n\n\t\tExpr.pseudos.nth = Expr.pseudos.eq;\n\n\t\t// Add button/input type pseudos\n\t\tfor (i in { radio: true, checkbox: true, file: true, password: true, image: true }) {\n\t\t\tExpr.pseudos[i] = createInputPseudo(i);\n\t\t}\n\t\tfor (i in { submit: true, reset: true }) {\n\t\t\tExpr.pseudos[i] = createButtonPseudo(i);\n\t\t}\n\n\t\t// Easy API for creating new setFilters\n\t\tfunction setFilters() { }\n\t\tsetFilters.prototype = Expr.filters = Expr.pseudos;\n\t\tExpr.setFilters = new setFilters();\n\n\t\tfunction tokenize(selector, parseOnly) {\n\t\t\tvar matched, match, tokens, type,\n\t\t\t\tsoFar, groups, preFilters,\n\t\t\t\tcached = tokenCache[selector + \" \"];\n\n\t\t\tif (cached) {\n\t\t\t\treturn parseOnly ? 0 : cached.slice(0);\n\t\t\t}\n\n\t\t\tsoFar = selector;\n\t\t\tgroups = [];\n\t\t\tpreFilters = Expr.preFilter;\n\n\t\t\twhile (soFar) {\n\n\t\t\t\t// Comma and first run\n\t\t\t\tif (!matched || (match = rcomma.exec(soFar))) {\n\t\t\t\t\tif (match) {\n\n\t\t\t\t\t\t// Don't consume trailing commas as valid\n\t\t\t\t\t\tsoFar = soFar.slice(match[0].length) || soFar;\n\t\t\t\t\t}\n\t\t\t\t\tgroups.push((tokens = []));\n\t\t\t\t}\n\n\t\t\t\tmatched = false;\n\n\t\t\t\t// Combinators\n\t\t\t\tif ((match = rleadingCombinator.exec(soFar))) {\n\t\t\t\t\tmatched = match.shift();\n\t\t\t\t\ttokens.push({\n\t\t\t\t\t\tvalue: matched,\n\n\t\t\t\t\t\t// Cast descendant combinators to space\n\t\t\t\t\t\ttype: match[0].replace(rtrimCSS, \" \")\n\t\t\t\t\t});\n\t\t\t\t\tsoFar = soFar.slice(matched.length);\n\t\t\t\t}\n\n\t\t\t\t// Filters\n\t\t\t\tfor (type in Expr.filter) {\n\t\t\t\t\tif ((match = matchExpr[type].exec(soFar)) && (!preFilters[type] ||\n\t\t\t\t\t\t(match = preFilters[type](match)))) {\n\t\t\t\t\t\tmatched = match.shift();\n\t\t\t\t\t\ttokens.push({\n\t\t\t\t\t\t\tvalue: matched,\n\t\t\t\t\t\t\ttype: type,\n\t\t\t\t\t\t\tmatches: match\n\t\t\t\t\t\t});\n\t\t\t\t\t\tsoFar = soFar.slice(matched.length);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (!matched) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Return the length of the invalid excess\n\t\t\t// if we're just parsing\n\t\t\t// Otherwise, throw an error or return tokens\n\t\t\tif (parseOnly) {\n\t\t\t\treturn soFar.length;\n\t\t\t}\n\n\t\t\treturn soFar ?\n\t\t\t\tfind.error(selector) :\n\n\t\t\t\t// Cache the tokens\n\t\t\t\ttokenCache(selector, groups).slice(0);\n\t\t}\n\n\t\tfunction toSelector(tokens) {\n\t\t\tvar i = 0,\n\t\t\t\tlen = tokens.length,\n\t\t\t\tselector = \"\";\n\t\t\tfor (; i < len; i++) {\n\t\t\t\tselector += tokens[i].value;\n\t\t\t}\n\t\t\treturn selector;\n\t\t}\n\n\t\tfunction addCombinator(matcher, combinator, base) {\n\t\t\tvar dir = combinator.dir,\n\t\t\t\tskip = combinator.next,\n\t\t\t\tkey = skip || dir,\n\t\t\t\tcheckNonElements = base && key === \"parentNode\",\n\t\t\t\tdoneName = done++;\n\n\t\t\treturn combinator.first ?\n\n\t\t\t\t// Check against closest ancestor/preceding element\n\t\t\t\tfunction (elem, context, xml) {\n\t\t\t\t\twhile ((elem = elem[dir])) {\n\t\t\t\t\t\tif (elem.nodeType === 1 || checkNonElements) {\n\t\t\t\t\t\t\treturn matcher(elem, context, xml);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn false;\n\t\t\t\t} :\n\n\t\t\t\t// Check against all ancestor/preceding elements\n\t\t\t\tfunction (elem, context, xml) {\n\t\t\t\t\tvar oldCache, outerCache,\n\t\t\t\t\t\tnewCache = [dirruns, doneName];\n\n\t\t\t\t\t// We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching\n\t\t\t\t\tif (xml) {\n\t\t\t\t\t\twhile ((elem = elem[dir])) {\n\t\t\t\t\t\t\tif (elem.nodeType === 1 || checkNonElements) {\n\t\t\t\t\t\t\t\tif (matcher(elem, context, xml)) {\n\t\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\twhile ((elem = elem[dir])) {\n\t\t\t\t\t\t\tif (elem.nodeType === 1 || checkNonElements) {\n\t\t\t\t\t\t\t\touterCache = elem[expando] || (elem[expando] = {});\n\n\t\t\t\t\t\t\t\tif (skip && nodeName(elem, skip)) {\n\t\t\t\t\t\t\t\t\telem = elem[dir] || elem;\n\t\t\t\t\t\t\t\t} else if ((oldCache = outerCache[key]) &&\n\t\t\t\t\t\t\t\t\toldCache[0] === dirruns && oldCache[1] === doneName) {\n\n\t\t\t\t\t\t\t\t\t// Assign to newCache so results back-propagate to previous elements\n\t\t\t\t\t\t\t\t\treturn (newCache[2] = oldCache[2]);\n\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t// Reuse newcache so results back-propagate to previous elements\n\t\t\t\t\t\t\t\t\touterCache[key] = newCache;\n\n\t\t\t\t\t\t\t\t\t// A match means we're done; a fail means we have to keep checking\n\t\t\t\t\t\t\t\t\tif ((newCache[2] = matcher(elem, context, xml))) {\n\t\t\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn false;\n\t\t\t\t};\n\t\t}\n\n\t\tfunction elementMatcher(matchers) {\n\t\t\treturn matchers.length > 1 ?\n\t\t\t\tfunction (elem, context, xml) {\n\t\t\t\t\tvar i = matchers.length;\n\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\tif (!matchers[i](elem, context, xml)) {\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn true;\n\t\t\t\t} :\n\t\t\t\tmatchers[0];\n\t\t}\n\n\t\tfunction multipleContexts(selector, contexts, results) {\n\t\t\tvar i = 0,\n\t\t\t\tlen = contexts.length;\n\t\t\tfor (; i < len; i++) {\n\t\t\t\tfind(selector, contexts[i], results);\n\t\t\t}\n\t\t\treturn results;\n\t\t}\n\n\t\tfunction condense(unmatched, map, filter, context, xml) {\n\t\t\tvar elem,\n\t\t\t\tnewUnmatched = [],\n\t\t\t\ti = 0,\n\t\t\t\tlen = unmatched.length,\n\t\t\t\tmapped = map != null;\n\n\t\t\tfor (; i < len; i++) {\n\t\t\t\tif ((elem = unmatched[i])) {\n\t\t\t\t\tif (!filter || filter(elem, context, xml)) {\n\t\t\t\t\t\tnewUnmatched.push(elem);\n\t\t\t\t\t\tif (mapped) {\n\t\t\t\t\t\t\tmap.push(i);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn newUnmatched;\n\t\t}\n\n\t\tfunction setMatcher(preFilter, selector, matcher, postFilter, postFinder, postSelector) {\n\t\t\tif (postFilter && !postFilter[expando]) {\n\t\t\t\tpostFilter = setMatcher(postFilter);\n\t\t\t}\n\t\t\tif (postFinder && !postFinder[expando]) {\n\t\t\t\tpostFinder = setMatcher(postFinder, postSelector);\n\t\t\t}\n\t\t\treturn markFunction(function (seed, results, context, xml) {\n\t\t\t\tvar temp, i, elem, matcherOut,\n\t\t\t\t\tpreMap = [],\n\t\t\t\t\tpostMap = [],\n\t\t\t\t\tpreexisting = results.length,\n\n\t\t\t\t\t// Get initial elements from seed or context\n\t\t\t\t\telems = seed ||\n\t\t\t\t\t\tmultipleContexts(selector || \"*\",\n\t\t\t\t\t\t\tcontext.nodeType ? [context] : context, []),\n\n\t\t\t\t\t// Prefilter to get matcher input, preserving a map for seed-results synchronization\n\t\t\t\t\tmatcherIn = preFilter && (seed || !selector) ?\n\t\t\t\t\t\tcondense(elems, preMap, preFilter, context, xml) :\n\t\t\t\t\t\telems;\n\n\t\t\t\tif (matcher) {\n\n\t\t\t\t\t// If we have a postFinder, or filtered seed, or non-seed postFilter\n\t\t\t\t\t// or preexisting results,\n\t\t\t\t\tmatcherOut = postFinder || (seed ? preFilter : preexisting || postFilter) ?\n\n\t\t\t\t\t\t// ...intermediate processing is necessary\n\t\t\t\t\t\t[] :\n\n\t\t\t\t\t\t// ...otherwise use results directly\n\t\t\t\t\t\tresults;\n\n\t\t\t\t\t// Find primary matches\n\t\t\t\t\tmatcher(matcherIn, matcherOut, context, xml);\n\t\t\t\t} else {\n\t\t\t\t\tmatcherOut = matcherIn;\n\t\t\t\t}\n\n\t\t\t\t// Apply postFilter\n\t\t\t\tif (postFilter) {\n\t\t\t\t\ttemp = condense(matcherOut, postMap);\n\t\t\t\t\tpostFilter(temp, [], context, xml);\n\n\t\t\t\t\t// Un-match failing elements by moving them back to matcherIn\n\t\t\t\t\ti = temp.length;\n\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\tif ((elem = temp[i])) {\n\t\t\t\t\t\t\tmatcherOut[postMap[i]] = !(matcherIn[postMap[i]] = elem);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (seed) {\n\t\t\t\t\tif (postFinder || preFilter) {\n\t\t\t\t\t\tif (postFinder) {\n\n\t\t\t\t\t\t\t// Get the final matcherOut by condensing this intermediate into postFinder contexts\n\t\t\t\t\t\t\ttemp = [];\n\t\t\t\t\t\t\ti = matcherOut.length;\n\t\t\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\t\t\tif ((elem = matcherOut[i])) {\n\n\t\t\t\t\t\t\t\t\t// Restore matcherIn since elem is not yet a final match\n\t\t\t\t\t\t\t\t\ttemp.push((matcherIn[i] = elem));\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tpostFinder(null, (matcherOut = []), temp, xml);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Move matched elements from seed to results to keep them synchronized\n\t\t\t\t\t\ti = matcherOut.length;\n\t\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\t\tif ((elem = matcherOut[i]) &&\n\t\t\t\t\t\t\t\t(temp = postFinder ? indexOf.call(seed, elem) : preMap[i]) > -1) {\n\n\t\t\t\t\t\t\t\tseed[temp] = !(results[temp] = elem);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Add elements to results, through postFinder if defined\n\t\t\t\t} else {\n\t\t\t\t\tmatcherOut = condense(\n\t\t\t\t\t\tmatcherOut === results ?\n\t\t\t\t\t\t\tmatcherOut.splice(preexisting, matcherOut.length) :\n\t\t\t\t\t\t\tmatcherOut\n\t\t\t\t\t);\n\t\t\t\t\tif (postFinder) {\n\t\t\t\t\t\tpostFinder(null, results, matcherOut, xml);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tpush.apply(results, matcherOut);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tfunction matcherFromTokens(tokens) {\n\t\t\tvar checkContext, matcher, j,\n\t\t\t\tlen = tokens.length,\n\t\t\t\tleadingRelative = Expr.relative[tokens[0].type],\n\t\t\t\timplicitRelative = leadingRelative || Expr.relative[\" \"],\n\t\t\t\ti = leadingRelative ? 1 : 0,\n\n\t\t\t\t// The foundational matcher ensures that elements are reachable from top-level context(s)\n\t\t\t\tmatchContext = addCombinator(function (elem) {\n\t\t\t\t\treturn elem === checkContext;\n\t\t\t\t}, implicitRelative, true),\n\t\t\t\tmatchAnyContext = addCombinator(function (elem) {\n\t\t\t\t\treturn indexOf.call(checkContext, elem) > -1;\n\t\t\t\t}, implicitRelative, true),\n\t\t\t\tmatchers = [function (elem, context, xml) {\n\n\t\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\tvar ret = (!leadingRelative && (xml || context != outermostContext)) || (\n\t\t\t\t\t\t(checkContext = context).nodeType ?\n\t\t\t\t\t\t\tmatchContext(elem, context, xml) :\n\t\t\t\t\t\t\tmatchAnyContext(elem, context, xml));\n\n\t\t\t\t\t// Avoid hanging onto element\n\t\t\t\t\t// (see https://github.com/jquery/sizzle/issues/299)\n\t\t\t\t\tcheckContext = null;\n\t\t\t\t\treturn ret;\n\t\t\t\t}];\n\n\t\t\tfor (; i < len; i++) {\n\t\t\t\tif ((matcher = Expr.relative[tokens[i].type])) {\n\t\t\t\t\tmatchers = [addCombinator(elementMatcher(matchers), matcher)];\n\t\t\t\t} else {\n\t\t\t\t\tmatcher = Expr.filter[tokens[i].type].apply(null, tokens[i].matches);\n\n\t\t\t\t\t// Return special upon seeing a positional matcher\n\t\t\t\t\tif (matcher[expando]) {\n\n\t\t\t\t\t\t// Find the next relative operator (if any) for proper handling\n\t\t\t\t\t\tj = ++i;\n\t\t\t\t\t\tfor (; j < len; j++) {\n\t\t\t\t\t\t\tif (Expr.relative[tokens[j].type]) {\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn setMatcher(\n\t\t\t\t\t\t\ti > 1 && elementMatcher(matchers),\n\t\t\t\t\t\t\ti > 1 && toSelector(\n\n\t\t\t\t\t\t\t\t// If the preceding token was a descendant combinator, insert an implicit any-element `*`\n\t\t\t\t\t\t\t\ttokens.slice(0, i - 1)\n\t\t\t\t\t\t\t\t\t.concat({ value: tokens[i - 2].type === \" \" ? \"*\" : \"\" })\n\t\t\t\t\t\t\t).replace(rtrimCSS, \"$1\"),\n\t\t\t\t\t\t\tmatcher,\n\t\t\t\t\t\t\ti < j && matcherFromTokens(tokens.slice(i, j)),\n\t\t\t\t\t\t\tj < len && matcherFromTokens((tokens = tokens.slice(j))),\n\t\t\t\t\t\t\tj < len && toSelector(tokens)\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\tmatchers.push(matcher);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn elementMatcher(matchers);\n\t\t}\n\n\t\tfunction matcherFromGroupMatchers(elementMatchers, setMatchers) {\n\t\t\tvar bySet = setMatchers.length > 0,\n\t\t\t\tbyElement = elementMatchers.length > 0,\n\t\t\t\tsuperMatcher = function (seed, context, xml, results, outermost) {\n\t\t\t\t\tvar elem, j, matcher,\n\t\t\t\t\t\tmatchedCount = 0,\n\t\t\t\t\t\ti = \"0\",\n\t\t\t\t\t\tunmatched = seed && [],\n\t\t\t\t\t\tsetMatched = [],\n\t\t\t\t\t\tcontextBackup = outermostContext,\n\n\t\t\t\t\t\t// We must always have either seed elements or outermost context\n\t\t\t\t\t\telems = seed || byElement && Expr.find.TAG(\"*\", outermost),\n\n\t\t\t\t\t\t// Use integer dirruns iff this is the outermost matcher\n\t\t\t\t\t\tdirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1),\n\t\t\t\t\t\tlen = elems.length;\n\n\t\t\t\t\tif (outermost) {\n\n\t\t\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\t\toutermostContext = context == document || context || outermost;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Add elements passing elementMatchers directly to results\n\t\t\t\t\t// Support: iOS <=7 - 9 only\n\t\t\t\t\t// Tolerate NodeList properties (IE: \"length\"; Safari: <number>) matching\n\t\t\t\t\t// elements by id. (see trac-14142)\n\t\t\t\t\tfor (; i !== len && (elem = elems[i]) != null; i++) {\n\t\t\t\t\t\tif (byElement && elem) {\n\t\t\t\t\t\t\tj = 0;\n\n\t\t\t\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\t\t\tif (!context && elem.ownerDocument != document) {\n\t\t\t\t\t\t\t\tsetDocument(elem);\n\t\t\t\t\t\t\t\txml = !documentIsHTML;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\twhile ((matcher = elementMatchers[j++])) {\n\t\t\t\t\t\t\t\tif (matcher(elem, context || document, xml)) {\n\t\t\t\t\t\t\t\t\tpush.call(results, elem);\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (outermost) {\n\t\t\t\t\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Track unmatched elements for set filters\n\t\t\t\t\t\tif (bySet) {\n\n\t\t\t\t\t\t\t// They will have gone through all possible matchers\n\t\t\t\t\t\t\tif ((elem = !matcher && elem)) {\n\t\t\t\t\t\t\t\tmatchedCount--;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Lengthen the array for every element, matched or not\n\t\t\t\t\t\t\tif (seed) {\n\t\t\t\t\t\t\t\tunmatched.push(elem);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// `i` is now the count of elements visited above, and adding it to `matchedCount`\n\t\t\t\t\t// makes the latter nonnegative.\n\t\t\t\t\tmatchedCount += i;\n\n\t\t\t\t\t// Apply set filters to unmatched elements\n\t\t\t\t\t// NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`\n\t\t\t\t\t// equals `i`), unless we didn't visit _any_ elements in the above loop because we have\n\t\t\t\t\t// no element matchers and no seed.\n\t\t\t\t\t// Incrementing an initially-string \"0\" `i` allows `i` to remain a string only in that\n\t\t\t\t\t// case, which will result in a \"00\" `matchedCount` that differs from `i` but is also\n\t\t\t\t\t// numerically zero.\n\t\t\t\t\tif (bySet && i !== matchedCount) {\n\t\t\t\t\t\tj = 0;\n\t\t\t\t\t\twhile ((matcher = setMatchers[j++])) {\n\t\t\t\t\t\t\tmatcher(unmatched, setMatched, context, xml);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (seed) {\n\n\t\t\t\t\t\t\t// Reintegrate element matches to eliminate the need for sorting\n\t\t\t\t\t\t\tif (matchedCount > 0) {\n\t\t\t\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\t\t\t\tif (!(unmatched[i] || setMatched[i])) {\n\t\t\t\t\t\t\t\t\t\tsetMatched[i] = pop.call(results);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Discard index placeholder values to get only actual matches\n\t\t\t\t\t\t\tsetMatched = condense(setMatched);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Add matches to results\n\t\t\t\t\t\tpush.apply(results, setMatched);\n\n\t\t\t\t\t\t// Seedless set matches succeeding multiple successful matchers stipulate sorting\n\t\t\t\t\t\tif (outermost && !seed && setMatched.length > 0 &&\n\t\t\t\t\t\t\t(matchedCount + setMatchers.length) > 1) {\n\n\t\t\t\t\t\t\tjQuery.uniqueSort(results);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Override manipulation of globals by nested matchers\n\t\t\t\t\tif (outermost) {\n\t\t\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\t\t\toutermostContext = contextBackup;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn unmatched;\n\t\t\t\t};\n\n\t\t\treturn bySet ?\n\t\t\t\tmarkFunction(superMatcher) :\n\t\t\t\tsuperMatcher;\n\t\t}\n\n\t\tfunction compile(selector, match /* Internal Use Only */) {\n\t\t\tvar i,\n\t\t\t\tsetMatchers = [],\n\t\t\t\telementMatchers = [],\n\t\t\t\tcached = compilerCache[selector + \" \"];\n\n\t\t\tif (!cached) {\n\n\t\t\t\t// Generate a function of recursive functions that can be used to check each element\n\t\t\t\tif (!match) {\n\t\t\t\t\tmatch = tokenize(selector);\n\t\t\t\t}\n\t\t\t\ti = match.length;\n\t\t\t\twhile (i--) {\n\t\t\t\t\tcached = matcherFromTokens(match[i]);\n\t\t\t\t\tif (cached[expando]) {\n\t\t\t\t\t\tsetMatchers.push(cached);\n\t\t\t\t\t} else {\n\t\t\t\t\t\telementMatchers.push(cached);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Cache the compiled function\n\t\t\t\tcached = compilerCache(selector,\n\t\t\t\t\tmatcherFromGroupMatchers(elementMatchers, setMatchers));\n\n\t\t\t\t// Save selector and tokenization\n\t\t\t\tcached.selector = selector;\n\t\t\t}\n\t\t\treturn cached;\n\t\t}\n\n\t\t/**\n\t\t * A low-level selection function that works with jQuery's compiled\n\t\t *  selector functions\n\t\t * @param {String|Function} selector A selector or a pre-compiled\n\t\t *  selector function built with jQuery selector compile\n\t\t * @param {Element} context\n\t\t * @param {Array} [results]\n\t\t * @param {Array} [seed] A set of elements to match against\n\t\t */\n\t\tfunction select(selector, context, results, seed) {\n\t\t\tvar i, tokens, token, type, find,\n\t\t\t\tcompiled = typeof selector === \"function\" && selector,\n\t\t\t\tmatch = !seed && tokenize((selector = compiled.selector || selector));\n\n\t\t\tresults = results || [];\n\n\t\t\t// Try to minimize operations if there is only one selector in the list and no seed\n\t\t\t// (the latter of which guarantees us context)\n\t\t\tif (match.length === 1) {\n\n\t\t\t\t// Reduce context if the leading compound selector is an ID\n\t\t\t\ttokens = match[0] = match[0].slice(0);\n\t\t\t\tif (tokens.length > 2 && (token = tokens[0]).type === \"ID\" &&\n\t\t\t\t\tcontext.nodeType === 9 && documentIsHTML && Expr.relative[tokens[1].type]) {\n\n\t\t\t\t\tcontext = (Expr.find.ID(\n\t\t\t\t\t\ttoken.matches[0].replace(runescape, funescape),\n\t\t\t\t\t\tcontext\n\t\t\t\t\t) || [])[0];\n\t\t\t\t\tif (!context) {\n\t\t\t\t\t\treturn results;\n\n\t\t\t\t\t\t// Precompiled matchers will still verify ancestry, so step up a level\n\t\t\t\t\t} else if (compiled) {\n\t\t\t\t\t\tcontext = context.parentNode;\n\t\t\t\t\t}\n\n\t\t\t\t\tselector = selector.slice(tokens.shift().value.length);\n\t\t\t\t}\n\n\t\t\t\t// Fetch a seed set for right-to-left matching\n\t\t\t\ti = matchExpr.needsContext.test(selector) ? 0 : tokens.length;\n\t\t\t\twhile (i--) {\n\t\t\t\t\ttoken = tokens[i];\n\n\t\t\t\t\t// Abort if we hit a combinator\n\t\t\t\t\tif (Expr.relative[(type = token.type)]) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tif ((find = Expr.find[type])) {\n\n\t\t\t\t\t\t// Search, expanding context for leading sibling combinators\n\t\t\t\t\t\tif ((seed = find(\n\t\t\t\t\t\t\ttoken.matches[0].replace(runescape, funescape),\n\t\t\t\t\t\t\trsibling.test(tokens[0].type) &&\n\t\t\t\t\t\t\ttestContext(context.parentNode) || context\n\t\t\t\t\t\t))) {\n\n\t\t\t\t\t\t\t// If seed is empty or no tokens remain, we can return early\n\t\t\t\t\t\t\ttokens.splice(i, 1);\n\t\t\t\t\t\t\tselector = seed.length && toSelector(tokens);\n\t\t\t\t\t\t\tif (!selector) {\n\t\t\t\t\t\t\t\tpush.apply(results, seed);\n\t\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Compile and execute a filtering function if one is not provided\n\t\t\t// Provide `match` to avoid retokenization if we modified the selector above\n\t\t\t(compiled || compile(selector, match))(\n\t\t\t\tseed,\n\t\t\t\tcontext,\n\t\t\t\t!documentIsHTML,\n\t\t\t\tresults,\n\t\t\t\t!context || rsibling.test(selector) && testContext(context.parentNode) || context\n\t\t\t);\n\t\t\treturn results;\n\t\t}\n\n\t\t// One-time assignments\n\n\t\t// Support: Android <=4.0 - 4.1+\n\t\t// Sort stability\n\t\tsupport.sortStable = expando.split(\"\").sort(sortOrder).join(\"\") === expando;\n\n\t\t// Initialize against the default document\n\t\tsetDocument();\n\n\t\t// Support: Android <=4.0 - 4.1+\n\t\t// Detached nodes confoundingly follow *each other*\n\t\tsupport.sortDetached = assert(function (el) {\n\n\t\t\t// Should return 1, but returns 4 (following)\n\t\t\treturn el.compareDocumentPosition(document.createElement(\"fieldset\")) & 1;\n\t\t});\n\n\t\tjQuery.find = find;\n\n\t\t// Deprecated\n\t\tjQuery.expr[\":\"] = jQuery.expr.pseudos;\n\t\tjQuery.unique = jQuery.uniqueSort;\n\n\t\t// These have always been private, but they used to be documented\n\t\t// as part of Sizzle so let's maintain them in the 3.x line\n\t\t// for backwards compatibility purposes.\n\t\tfind.compile = compile;\n\t\tfind.select = select;\n\t\tfind.setDocument = setDocument;\n\n\t\tfind.escape = jQuery.escapeSelector;\n\t\tfind.getText = jQuery.text;\n\t\tfind.isXML = jQuery.isXMLDoc;\n\t\tfind.selectors = jQuery.expr;\n\t\tfind.support = jQuery.support;\n\t\tfind.uniqueSort = jQuery.uniqueSort;\n\n\t\t/* eslint-enable */\n\n\t})();\n\n\n\tvar dir = function (elem, dir, until) {\n\t\tvar matched = [],\n\t\t\ttruncate = until !== undefined;\n\n\t\twhile ((elem = elem[dir]) && elem.nodeType !== 9) {\n\t\t\tif (elem.nodeType === 1) {\n\t\t\t\tif (truncate && jQuery(elem).is(until)) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tmatched.push(elem);\n\t\t\t}\n\t\t}\n\t\treturn matched;\n\t};\n\n\n\tvar siblings = function (n, elem) {\n\t\tvar matched = [];\n\n\t\tfor (; n; n = n.nextSibling) {\n\t\t\tif (n.nodeType === 1 && n !== elem) {\n\t\t\t\tmatched.push(n);\n\t\t\t}\n\t\t}\n\n\t\treturn matched;\n\t};\n\n\n\tvar rneedsContext = jQuery.expr.match.needsContext;\n\n\tvar rsingleTag = (/^<([a-z][^\\/\\0>:\\x20\\t\\r\\n\\f]*)[\\x20\\t\\r\\n\\f]*\\/?>(?:<\\/\\1>|)$/i);\n\n\n\n\t// Implement the identical functionality for filter and not\n\tfunction winnow(elements, qualifier, not) {\n\t\tif (isFunction(qualifier)) {\n\t\t\treturn jQuery.grep(elements, function (elem, i) {\n\t\t\t\treturn !!qualifier.call(elem, i, elem) !== not;\n\t\t\t});\n\t\t}\n\n\t\t// Single element\n\t\tif (qualifier.nodeType) {\n\t\t\treturn jQuery.grep(elements, function (elem) {\n\t\t\t\treturn (elem === qualifier) !== not;\n\t\t\t});\n\t\t}\n\n\t\t// Arraylike of elements (jQuery, arguments, Array)\n\t\tif (typeof qualifier !== \"string\") {\n\t\t\treturn jQuery.grep(elements, function (elem) {\n\t\t\t\treturn (indexOf.call(qualifier, elem) > -1) !== not;\n\t\t\t});\n\t\t}\n\n\t\t// Filtered directly for both simple and complex selectors\n\t\treturn jQuery.filter(qualifier, elements, not);\n\t}\n\n\tjQuery.filter = function (expr, elems, not) {\n\t\tvar elem = elems[0];\n\n\t\tif (not) {\n\t\t\texpr = \":not(\" + expr + \")\";\n\t\t}\n\n\t\tif (elems.length === 1 && elem.nodeType === 1) {\n\t\t\treturn jQuery.find.matchesSelector(elem, expr) ? [elem] : [];\n\t\t}\n\n\t\treturn jQuery.find.matches(expr, jQuery.grep(elems, function (elem) {\n\t\t\treturn elem.nodeType === 1;\n\t\t}));\n\t};\n\n\tjQuery.fn.extend({\n\t\tfind: function (selector) {\n\t\t\tvar i, ret,\n\t\t\t\tlen = this.length,\n\t\t\t\tself = this;\n\n\t\t\tif (typeof selector !== \"string\") {\n\t\t\t\treturn this.pushStack(jQuery(selector).filter(function () {\n\t\t\t\t\tfor (i = 0; i < len; i++) {\n\t\t\t\t\t\tif (jQuery.contains(self[i], this)) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}));\n\t\t\t}\n\n\t\t\tret = this.pushStack([]);\n\n\t\t\tfor (i = 0; i < len; i++) {\n\t\t\t\tjQuery.find(selector, self[i], ret);\n\t\t\t}\n\n\t\t\treturn len > 1 ? jQuery.uniqueSort(ret) : ret;\n\t\t},\n\t\tfilter: function (selector) {\n\t\t\treturn this.pushStack(winnow(this, selector || [], false));\n\t\t},\n\t\tnot: function (selector) {\n\t\t\treturn this.pushStack(winnow(this, selector || [], true));\n\t\t},\n\t\tis: function (selector) {\n\t\t\treturn !!winnow(\n\t\t\t\tthis,\n\n\t\t\t\t// If this is a positional/relative selector, check membership in the returned set\n\t\t\t\t// so $(\"p:first\").is(\"p:last\") won't return true for a doc with two \"p\".\n\t\t\t\ttypeof selector === \"string\" && rneedsContext.test(selector) ?\n\t\t\t\t\tjQuery(selector) :\n\t\t\t\t\tselector || [],\n\t\t\t\tfalse\n\t\t\t).length;\n\t\t}\n\t});\n\n\n\t// Initialize a jQuery object\n\n\n\t// A central reference to the root jQuery(document)\n\tvar rootjQuery,\n\n\t\t// A simple way to check for HTML strings\n\t\t// Prioritize #id over <tag> to avoid XSS via location.hash (trac-9521)\n\t\t// Strict HTML recognition (trac-11290: must start with <)\n\t\t// Shortcut simple #id case for speed\n\t\trquickExpr = /^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]+))$/,\n\n\t\tinit = jQuery.fn.init = function (selector, context, root) {\n\t\t\tvar match, elem;\n\n\t\t\t// HANDLE: $(\"\"), $(null), $(undefined), $(false)\n\t\t\tif (!selector) {\n\t\t\t\treturn this;\n\t\t\t}\n\n\t\t\t// Method init() accepts an alternate rootjQuery\n\t\t\t// so migrate can support jQuery.sub (gh-2101)\n\t\t\troot = root || rootjQuery;\n\n\t\t\t// Handle HTML strings\n\t\t\tif (typeof selector === \"string\") {\n\t\t\t\tif (selector[0] === \"<\" &&\n\t\t\t\t\tselector[selector.length - 1] === \">\" &&\n\t\t\t\t\tselector.length >= 3) {\n\n\t\t\t\t\t// Assume that strings that start and end with <> are HTML and skip the regex check\n\t\t\t\t\tmatch = [null, selector, null];\n\n\t\t\t\t} else {\n\t\t\t\t\tmatch = rquickExpr.exec(selector);\n\t\t\t\t}\n\n\t\t\t\t// Match html or make sure no context is specified for #id\n\t\t\t\tif (match && (match[1] || !context)) {\n\n\t\t\t\t\t// HANDLE: $(html) -> $(array)\n\t\t\t\t\tif (match[1]) {\n\t\t\t\t\t\tcontext = context instanceof jQuery ? context[0] : context;\n\n\t\t\t\t\t\t// Option to run scripts is true for back-compat\n\t\t\t\t\t\t// Intentionally let the error be thrown if parseHTML is not present\n\t\t\t\t\t\tjQuery.merge(this, jQuery.parseHTML(\n\t\t\t\t\t\t\tmatch[1],\n\t\t\t\t\t\t\tcontext && context.nodeType ? context.ownerDocument || context : document,\n\t\t\t\t\t\t\ttrue\n\t\t\t\t\t\t));\n\n\t\t\t\t\t\t// HANDLE: $(html, props)\n\t\t\t\t\t\tif (rsingleTag.test(match[1]) && jQuery.isPlainObject(context)) {\n\t\t\t\t\t\t\tfor (match in context) {\n\n\t\t\t\t\t\t\t\t// Properties of context are called as methods if possible\n\t\t\t\t\t\t\t\tif (isFunction(this[match])) {\n\t\t\t\t\t\t\t\t\tthis[match](context[match]);\n\n\t\t\t\t\t\t\t\t\t// ...and otherwise set as attributes\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tthis.attr(match, context[match]);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn this;\n\n\t\t\t\t\t\t// HANDLE: $(#id)\n\t\t\t\t\t} else {\n\t\t\t\t\t\telem = document.getElementById(match[2]);\n\n\t\t\t\t\t\tif (elem) {\n\n\t\t\t\t\t\t\t// Inject the element directly into the jQuery object\n\t\t\t\t\t\t\tthis[0] = elem;\n\t\t\t\t\t\t\tthis.length = 1;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn this;\n\t\t\t\t\t}\n\n\t\t\t\t\t// HANDLE: $(expr, $(...))\n\t\t\t\t} else if (!context || context.jquery) {\n\t\t\t\t\treturn (context || root).find(selector);\n\n\t\t\t\t\t// HANDLE: $(expr, context)\n\t\t\t\t\t// (which is just equivalent to: $(context).find(expr)\n\t\t\t\t} else {\n\t\t\t\t\treturn this.constructor(context).find(selector);\n\t\t\t\t}\n\n\t\t\t\t// HANDLE: $(DOMElement)\n\t\t\t} else if (selector.nodeType) {\n\t\t\t\tthis[0] = selector;\n\t\t\t\tthis.length = 1;\n\t\t\t\treturn this;\n\n\t\t\t\t// HANDLE: $(function)\n\t\t\t\t// Shortcut for document ready\n\t\t\t} else if (isFunction(selector)) {\n\t\t\t\treturn root.ready !== undefined ?\n\t\t\t\t\troot.ready(selector) :\n\n\t\t\t\t\t// Execute immediately if ready is not present\n\t\t\t\t\tselector(jQuery);\n\t\t\t}\n\n\t\t\treturn jQuery.makeArray(selector, this);\n\t\t};\n\n\t// Give the init function the jQuery prototype for later instantiation\n\tinit.prototype = jQuery.fn;\n\n\t// Initialize central reference\n\trootjQuery = jQuery(document);\n\n\n\tvar rparentsprev = /^(?:parents|prev(?:Until|All))/,\n\n\t\t// Methods guaranteed to produce a unique set when starting from a unique set\n\t\tguaranteedUnique = {\n\t\t\tchildren: true,\n\t\t\tcontents: true,\n\t\t\tnext: true,\n\t\t\tprev: true\n\t\t};\n\n\tjQuery.fn.extend({\n\t\thas: function (target) {\n\t\t\tvar targets = jQuery(target, this),\n\t\t\t\tl = targets.length;\n\n\t\t\treturn this.filter(function () {\n\t\t\t\tvar i = 0;\n\t\t\t\tfor (; i < l; i++) {\n\t\t\t\t\tif (jQuery.contains(this, targets[i])) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\tclosest: function (selectors, context) {\n\t\t\tvar cur,\n\t\t\t\ti = 0,\n\t\t\t\tl = this.length,\n\t\t\t\tmatched = [],\n\t\t\t\ttargets = typeof selectors !== \"string\" && jQuery(selectors);\n\n\t\t\t// Positional selectors never match, since there's no _selection_ context\n\t\t\tif (!rneedsContext.test(selectors)) {\n\t\t\t\tfor (; i < l; i++) {\n\t\t\t\t\tfor (cur = this[i]; cur && cur !== context; cur = cur.parentNode) {\n\n\t\t\t\t\t\t// Always skip document fragments\n\t\t\t\t\t\tif (cur.nodeType < 11 && (targets ?\n\t\t\t\t\t\t\ttargets.index(cur) > -1 :\n\n\t\t\t\t\t\t\t// Don't pass non-elements to jQuery#find\n\t\t\t\t\t\t\tcur.nodeType === 1 &&\n\t\t\t\t\t\t\tjQuery.find.matchesSelector(cur, selectors))) {\n\n\t\t\t\t\t\t\tmatched.push(cur);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn this.pushStack(matched.length > 1 ? jQuery.uniqueSort(matched) : matched);\n\t\t},\n\n\t\t// Determine the position of an element within the set\n\t\tindex: function (elem) {\n\n\t\t\t// No argument, return index in parent\n\t\t\tif (!elem) {\n\t\t\t\treturn (this[0] && this[0].parentNode) ? this.first().prevAll().length : -1;\n\t\t\t}\n\n\t\t\t// Index in selector\n\t\t\tif (typeof elem === \"string\") {\n\t\t\t\treturn indexOf.call(jQuery(elem), this[0]);\n\t\t\t}\n\n\t\t\t// Locate the position of the desired element\n\t\t\treturn indexOf.call(this,\n\n\t\t\t\t// If it receives a jQuery object, the first element is used\n\t\t\t\telem.jquery ? elem[0] : elem\n\t\t\t);\n\t\t},\n\n\t\tadd: function (selector, context) {\n\t\t\treturn this.pushStack(\n\t\t\t\tjQuery.uniqueSort(\n\t\t\t\t\tjQuery.merge(this.get(), jQuery(selector, context))\n\t\t\t\t)\n\t\t\t);\n\t\t},\n\n\t\taddBack: function (selector) {\n\t\t\treturn this.add(selector == null ?\n\t\t\t\tthis.prevObject : this.prevObject.filter(selector)\n\t\t\t);\n\t\t}\n\t});\n\n\tfunction sibling(cur, dir) {\n\t\twhile ((cur = cur[dir]) && cur.nodeType !== 1) { }\n\t\treturn cur;\n\t}\n\n\tjQuery.each({\n\t\tparent: function (elem) {\n\t\t\tvar parent = elem.parentNode;\n\t\t\treturn parent && parent.nodeType !== 11 ? parent : null;\n\t\t},\n\t\tparents: function (elem) {\n\t\t\treturn dir(elem, \"parentNode\");\n\t\t},\n\t\tparentsUntil: function (elem, _i, until) {\n\t\t\treturn dir(elem, \"parentNode\", until);\n\t\t},\n\t\tnext: function (elem) {\n\t\t\treturn sibling(elem, \"nextSibling\");\n\t\t},\n\t\tprev: function (elem) {\n\t\t\treturn sibling(elem, \"previousSibling\");\n\t\t},\n\t\tnextAll: function (elem) {\n\t\t\treturn dir(elem, \"nextSibling\");\n\t\t},\n\t\tprevAll: function (elem) {\n\t\t\treturn dir(elem, \"previousSibling\");\n\t\t},\n\t\tnextUntil: function (elem, _i, until) {\n\t\t\treturn dir(elem, \"nextSibling\", until);\n\t\t},\n\t\tprevUntil: function (elem, _i, until) {\n\t\t\treturn dir(elem, \"previousSibling\", until);\n\t\t},\n\t\tsiblings: function (elem) {\n\t\t\treturn siblings((elem.parentNode || {}).firstChild, elem);\n\t\t},\n\t\tchildren: function (elem) {\n\t\t\treturn siblings(elem.firstChild);\n\t\t},\n\t\tcontents: function (elem) {\n\t\t\tif (elem.contentDocument != null &&\n\n\t\t\t\t// Support: IE 11+\n\t\t\t\t// <object> elements with no `data` attribute has an object\n\t\t\t\t// `contentDocument` with a `null` prototype.\n\t\t\t\tgetProto(elem.contentDocument)) {\n\n\t\t\t\treturn elem.contentDocument;\n\t\t\t}\n\n\t\t\t// Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only\n\t\t\t// Treat the template element as a regular one in browsers that\n\t\t\t// don't support it.\n\t\t\tif (nodeName(elem, \"template\")) {\n\t\t\t\telem = elem.content || elem;\n\t\t\t}\n\n\t\t\treturn jQuery.merge([], elem.childNodes);\n\t\t}\n\t}, function (name, fn) {\n\t\tjQuery.fn[name] = function (until, selector) {\n\t\t\tvar matched = jQuery.map(this, fn, until);\n\n\t\t\tif (name.slice(-5) !== \"Until\") {\n\t\t\t\tselector = until;\n\t\t\t}\n\n\t\t\tif (selector && typeof selector === \"string\") {\n\t\t\t\tmatched = jQuery.filter(selector, matched);\n\t\t\t}\n\n\t\t\tif (this.length > 1) {\n\n\t\t\t\t// Remove duplicates\n\t\t\t\tif (!guaranteedUnique[name]) {\n\t\t\t\t\tjQuery.uniqueSort(matched);\n\t\t\t\t}\n\n\t\t\t\t// Reverse order for parents* and prev-derivatives\n\t\t\t\tif (rparentsprev.test(name)) {\n\t\t\t\t\tmatched.reverse();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn this.pushStack(matched);\n\t\t};\n\t});\n\tvar rnothtmlwhite = (/[^\\x20\\t\\r\\n\\f]+/g);\n\n\n\n\t// Convert String-formatted options into Object-formatted ones\n\tfunction createOptions(options) {\n\t\tvar object = {};\n\t\tjQuery.each(options.match(rnothtmlwhite) || [], function (_, flag) {\n\t\t\tobject[flag] = true;\n\t\t});\n\t\treturn object;\n\t}\n\n\t/*\n\t * Create a callback list using the following parameters:\n\t *\n\t *\toptions: an optional list of space-separated options that will change how\n\t *\t\t\tthe callback list behaves or a more traditional option object\n\t *\n\t * By default a callback list will act like an event callback list and can be\n\t * \"fired\" multiple times.\n\t *\n\t * Possible options:\n\t *\n\t *\tonce:\t\t\twill ensure the callback list can only be fired once (like a Deferred)\n\t *\n\t *\tmemory:\t\t\twill keep track of previous values and will call any callback added\n\t *\t\t\t\t\tafter the list has been fired right away with the latest \"memorized\"\n\t *\t\t\t\t\tvalues (like a Deferred)\n\t *\n\t *\tunique:\t\t\twill ensure a callback can only be added once (no duplicate in the list)\n\t *\n\t *\tstopOnFalse:\tinterrupt callings when a callback returns false\n\t *\n\t */\n\tjQuery.Callbacks = function (options) {\n\n\t\t// Convert options from String-formatted to Object-formatted if needed\n\t\t// (we check in cache first)\n\t\toptions = typeof options === \"string\" ?\n\t\t\tcreateOptions(options) :\n\t\t\tjQuery.extend({}, options);\n\n\t\tvar // Flag to know if list is currently firing\n\t\t\tfiring,\n\n\t\t\t// Last fire value for non-forgettable lists\n\t\t\tmemory,\n\n\t\t\t// Flag to know if list was already fired\n\t\t\tfired,\n\n\t\t\t// Flag to prevent firing\n\t\t\tlocked,\n\n\t\t\t// Actual callback list\n\t\t\tlist = [],\n\n\t\t\t// Queue of execution data for repeatable lists\n\t\t\tqueue = [],\n\n\t\t\t// Index of currently firing callback (modified by add/remove as needed)\n\t\t\tfiringIndex = -1,\n\n\t\t\t// Fire callbacks\n\t\t\tfire = function () {\n\n\t\t\t\t// Enforce single-firing\n\t\t\t\tlocked = locked || options.once;\n\n\t\t\t\t// Execute callbacks for all pending executions,\n\t\t\t\t// respecting firingIndex overrides and runtime changes\n\t\t\t\tfired = firing = true;\n\t\t\t\tfor (; queue.length; firingIndex = -1) {\n\t\t\t\t\tmemory = queue.shift();\n\t\t\t\t\twhile (++firingIndex < list.length) {\n\n\t\t\t\t\t\t// Run callback and check for early termination\n\t\t\t\t\t\tif (list[firingIndex].apply(memory[0], memory[1]) === false &&\n\t\t\t\t\t\t\toptions.stopOnFalse) {\n\n\t\t\t\t\t\t\t// Jump to end and forget the data so .add doesn't re-fire\n\t\t\t\t\t\t\tfiringIndex = list.length;\n\t\t\t\t\t\t\tmemory = false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Forget the data if we're done with it\n\t\t\t\tif (!options.memory) {\n\t\t\t\t\tmemory = false;\n\t\t\t\t}\n\n\t\t\t\tfiring = false;\n\n\t\t\t\t// Clean up if we're done firing for good\n\t\t\t\tif (locked) {\n\n\t\t\t\t\t// Keep an empty list if we have data for future add calls\n\t\t\t\t\tif (memory) {\n\t\t\t\t\t\tlist = [];\n\n\t\t\t\t\t\t// Otherwise, this object is spent\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlist = \"\";\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// Actual Callbacks object\n\t\t\tself = {\n\n\t\t\t\t// Add a callback or a collection of callbacks to the list\n\t\t\t\tadd: function () {\n\t\t\t\t\tif (list) {\n\n\t\t\t\t\t\t// If we have memory from a past run, we should fire after adding\n\t\t\t\t\t\tif (memory && !firing) {\n\t\t\t\t\t\t\tfiringIndex = list.length - 1;\n\t\t\t\t\t\t\tqueue.push(memory);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t(function add(args) {\n\t\t\t\t\t\t\tjQuery.each(args, function (_, arg) {\n\t\t\t\t\t\t\t\tif (isFunction(arg)) {\n\t\t\t\t\t\t\t\t\tif (!options.unique || !self.has(arg)) {\n\t\t\t\t\t\t\t\t\t\tlist.push(arg);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} else if (arg && arg.length && toType(arg) !== \"string\") {\n\n\t\t\t\t\t\t\t\t\t// Inspect recursively\n\t\t\t\t\t\t\t\t\tadd(arg);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t})(arguments);\n\n\t\t\t\t\t\tif (memory && !firing) {\n\t\t\t\t\t\t\tfire();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Remove a callback from the list\n\t\t\t\tremove: function () {\n\t\t\t\t\tjQuery.each(arguments, function (_, arg) {\n\t\t\t\t\t\tvar index;\n\t\t\t\t\t\twhile ((index = jQuery.inArray(arg, list, index)) > -1) {\n\t\t\t\t\t\t\tlist.splice(index, 1);\n\n\t\t\t\t\t\t\t// Handle firing indexes\n\t\t\t\t\t\t\tif (index <= firingIndex) {\n\t\t\t\t\t\t\t\tfiringIndex--;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Check if a given callback is in the list.\n\t\t\t\t// If no argument is given, return whether or not list has callbacks attached.\n\t\t\t\thas: function (fn) {\n\t\t\t\t\treturn fn ?\n\t\t\t\t\t\tjQuery.inArray(fn, list) > -1 :\n\t\t\t\t\t\tlist.length > 0;\n\t\t\t\t},\n\n\t\t\t\t// Remove all callbacks from the list\n\t\t\t\tempty: function () {\n\t\t\t\t\tif (list) {\n\t\t\t\t\t\tlist = [];\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Disable .fire and .add\n\t\t\t\t// Abort any current/pending executions\n\t\t\t\t// Clear all callbacks and values\n\t\t\t\tdisable: function () {\n\t\t\t\t\tlocked = queue = [];\n\t\t\t\t\tlist = memory = \"\";\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\t\t\t\tdisabled: function () {\n\t\t\t\t\treturn !list;\n\t\t\t\t},\n\n\t\t\t\t// Disable .fire\n\t\t\t\t// Also disable .add unless we have memory (since it would have no effect)\n\t\t\t\t// Abort any pending executions\n\t\t\t\tlock: function () {\n\t\t\t\t\tlocked = queue = [];\n\t\t\t\t\tif (!memory && !firing) {\n\t\t\t\t\t\tlist = memory = \"\";\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\t\t\t\tlocked: function () {\n\t\t\t\t\treturn !!locked;\n\t\t\t\t},\n\n\t\t\t\t// Call all callbacks with the given context and arguments\n\t\t\t\tfireWith: function (context, args) {\n\t\t\t\t\tif (!locked) {\n\t\t\t\t\t\targs = args || [];\n\t\t\t\t\t\targs = [context, args.slice ? args.slice() : args];\n\t\t\t\t\t\tqueue.push(args);\n\t\t\t\t\t\tif (!firing) {\n\t\t\t\t\t\t\tfire();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Call all the callbacks with the given arguments\n\t\t\t\tfire: function () {\n\t\t\t\t\tself.fireWith(this, arguments);\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// To know if the callbacks have already been called at least once\n\t\t\t\tfired: function () {\n\t\t\t\t\treturn !!fired;\n\t\t\t\t}\n\t\t\t};\n\n\t\treturn self;\n\t};\n\n\n\tfunction Identity(v) {\n\t\treturn v;\n\t}\n\tfunction Thrower(ex) {\n\t\tthrow ex;\n\t}\n\n\tfunction adoptValue(value, resolve, reject, noValue) {\n\t\tvar method;\n\n\t\ttry {\n\n\t\t\t// Check for promise aspect first to privilege synchronous behavior\n\t\t\tif (value && isFunction((method = value.promise))) {\n\t\t\t\tmethod.call(value).done(resolve).fail(reject);\n\n\t\t\t\t// Other thenables\n\t\t\t} else if (value && isFunction((method = value.then))) {\n\t\t\t\tmethod.call(value, resolve, reject);\n\n\t\t\t\t// Other non-thenables\n\t\t\t} else {\n\n\t\t\t\t// Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer:\n\t\t\t\t// * false: [ value ].slice( 0 ) => resolve( value )\n\t\t\t\t// * true: [ value ].slice( 1 ) => resolve()\n\t\t\t\tresolve.apply(undefined, [value].slice(noValue));\n\t\t\t}\n\n\t\t\t// For Promises/A+, convert exceptions into rejections\n\t\t\t// Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in\n\t\t\t// Deferred#then to conditionally suppress rejection.\n\t\t} catch (value) {\n\n\t\t\t// Support: Android 4.0 only\n\t\t\t// Strict mode functions invoked without .call/.apply get global-object context\n\t\t\treject.apply(undefined, [value]);\n\t\t}\n\t}\n\n\tjQuery.extend({\n\n\t\tDeferred: function (func) {\n\t\t\tvar tuples = [\n\n\t\t\t\t// action, add listener, callbacks,\n\t\t\t\t// ... .then handlers, argument index, [final state]\n\t\t\t\t[\"notify\", \"progress\", jQuery.Callbacks(\"memory\"),\n\t\t\t\t\tjQuery.Callbacks(\"memory\"), 2],\n\t\t\t\t[\"resolve\", \"done\", jQuery.Callbacks(\"once memory\"),\n\t\t\t\t\tjQuery.Callbacks(\"once memory\"), 0, \"resolved\"],\n\t\t\t\t[\"reject\", \"fail\", jQuery.Callbacks(\"once memory\"),\n\t\t\t\t\tjQuery.Callbacks(\"once memory\"), 1, \"rejected\"]\n\t\t\t],\n\t\t\t\tstate = \"pending\",\n\t\t\t\tpromise = {\n\t\t\t\t\tstate: function () {\n\t\t\t\t\t\treturn state;\n\t\t\t\t\t},\n\t\t\t\t\talways: function () {\n\t\t\t\t\t\tdeferred.done(arguments).fail(arguments);\n\t\t\t\t\t\treturn this;\n\t\t\t\t\t},\n\t\t\t\t\t\"catch\": function (fn) {\n\t\t\t\t\t\treturn promise.then(null, fn);\n\t\t\t\t\t},\n\n\t\t\t\t\t// Keep pipe for back-compat\n\t\t\t\t\tpipe: function ( /* fnDone, fnFail, fnProgress */) {\n\t\t\t\t\t\tvar fns = arguments;\n\n\t\t\t\t\t\treturn jQuery.Deferred(function (newDefer) {\n\t\t\t\t\t\t\tjQuery.each(tuples, function (_i, tuple) {\n\n\t\t\t\t\t\t\t\t// Map tuples (progress, done, fail) to arguments (done, fail, progress)\n\t\t\t\t\t\t\t\tvar fn = isFunction(fns[tuple[4]]) && fns[tuple[4]];\n\n\t\t\t\t\t\t\t\t// deferred.progress(function() { bind to newDefer or newDefer.notify })\n\t\t\t\t\t\t\t\t// deferred.done(function() { bind to newDefer or newDefer.resolve })\n\t\t\t\t\t\t\t\t// deferred.fail(function() { bind to newDefer or newDefer.reject })\n\t\t\t\t\t\t\t\tdeferred[tuple[1]](function () {\n\t\t\t\t\t\t\t\t\tvar returned = fn && fn.apply(this, arguments);\n\t\t\t\t\t\t\t\t\tif (returned && isFunction(returned.promise)) {\n\t\t\t\t\t\t\t\t\t\treturned.promise()\n\t\t\t\t\t\t\t\t\t\t\t.progress(newDefer.notify)\n\t\t\t\t\t\t\t\t\t\t\t.done(newDefer.resolve)\n\t\t\t\t\t\t\t\t\t\t\t.fail(newDefer.reject);\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tnewDefer[tuple[0] + \"With\"](\n\t\t\t\t\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\t\t\t\t\tfn ? [returned] : arguments\n\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tfns = null;\n\t\t\t\t\t\t}).promise();\n\t\t\t\t\t},\n\t\t\t\t\tthen: function (onFulfilled, onRejected, onProgress) {\n\t\t\t\t\t\tvar maxDepth = 0;\n\t\t\t\t\t\tfunction resolve(depth, deferred, handler, special) {\n\t\t\t\t\t\t\treturn function () {\n\t\t\t\t\t\t\t\tvar that = this,\n\t\t\t\t\t\t\t\t\targs = arguments,\n\t\t\t\t\t\t\t\t\tmightThrow = function () {\n\t\t\t\t\t\t\t\t\t\tvar returned, then;\n\n\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.3\n\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-59\n\t\t\t\t\t\t\t\t\t\t// Ignore double-resolution attempts\n\t\t\t\t\t\t\t\t\t\tif (depth < maxDepth) {\n\t\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\treturned = handler.apply(that, args);\n\n\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.1\n\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-48\n\t\t\t\t\t\t\t\t\t\tif (returned === deferred.promise()) {\n\t\t\t\t\t\t\t\t\t\t\tthrow new TypeError(\"Thenable self-resolution\");\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ sections 2.3.3.1, 3.5\n\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-54\n\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-75\n\t\t\t\t\t\t\t\t\t\t// Retrieve `then` only once\n\t\t\t\t\t\t\t\t\t\tthen = returned &&\n\n\t\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.4\n\t\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-64\n\t\t\t\t\t\t\t\t\t\t\t// Only check objects and functions for thenability\n\t\t\t\t\t\t\t\t\t\t\t(typeof returned === \"object\" ||\n\t\t\t\t\t\t\t\t\t\t\t\ttypeof returned === \"function\") &&\n\t\t\t\t\t\t\t\t\t\t\treturned.then;\n\n\t\t\t\t\t\t\t\t\t\t// Handle a returned thenable\n\t\t\t\t\t\t\t\t\t\tif (isFunction(then)) {\n\n\t\t\t\t\t\t\t\t\t\t\t// Special processors (notify) just wait for resolution\n\t\t\t\t\t\t\t\t\t\t\tif (special) {\n\t\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\t\tresolve(maxDepth, deferred, Identity, special),\n\t\t\t\t\t\t\t\t\t\t\t\t\tresolve(maxDepth, deferred, Thrower, special)\n\t\t\t\t\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t\t\t\t\t// Normal processors (resolve) also hook into progress\n\t\t\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t\t\t// ...and disregard older resolution values\n\t\t\t\t\t\t\t\t\t\t\t\tmaxDepth++;\n\n\t\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\t\tresolve(maxDepth, deferred, Identity, special),\n\t\t\t\t\t\t\t\t\t\t\t\t\tresolve(maxDepth, deferred, Thrower, special),\n\t\t\t\t\t\t\t\t\t\t\t\t\tresolve(maxDepth, deferred, Identity,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tdeferred.notifyWith)\n\t\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t// Handle all other returned values\n\t\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\t\tif (handler !== Identity) {\n\t\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\t\targs = [returned];\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t// Process the value(s)\n\t\t\t\t\t\t\t\t\t\t\t// Default process is resolve\n\t\t\t\t\t\t\t\t\t\t\t(special || deferred.resolveWith)(that, args);\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\n\t\t\t\t\t\t\t\t\t// Only normal processors (resolve) catch and reject exceptions\n\t\t\t\t\t\t\t\t\tprocess = special ?\n\t\t\t\t\t\t\t\t\t\tmightThrow :\n\t\t\t\t\t\t\t\t\t\tfunction () {\n\t\t\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\t\t\tmightThrow();\n\t\t\t\t\t\t\t\t\t\t\t} catch (e) {\n\n\t\t\t\t\t\t\t\t\t\t\t\tif (jQuery.Deferred.exceptionHook) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tjQuery.Deferred.exceptionHook(e,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tprocess.error);\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.4.1\n\t\t\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-61\n\t\t\t\t\t\t\t\t\t\t\t\t// Ignore post-resolution exceptions\n\t\t\t\t\t\t\t\t\t\t\t\tif (depth + 1 >= maxDepth) {\n\n\t\t\t\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\t\t\t\tif (handler !== Thrower) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\targs = [e];\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\t\tdeferred.rejectWith(that, args);\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.1\n\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-57\n\t\t\t\t\t\t\t\t// Re-resolve promises immediately to dodge false rejection from\n\t\t\t\t\t\t\t\t// subsequent errors\n\t\t\t\t\t\t\t\tif (depth) {\n\t\t\t\t\t\t\t\t\tprocess();\n\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t// Call an optional hook to record the error, in case of exception\n\t\t\t\t\t\t\t\t\t// since it's otherwise lost when execution goes async\n\t\t\t\t\t\t\t\t\tif (jQuery.Deferred.getErrorHook) {\n\t\t\t\t\t\t\t\t\t\tprocess.error = jQuery.Deferred.getErrorHook();\n\n\t\t\t\t\t\t\t\t\t\t// The deprecated alias of the above. While the name suggests\n\t\t\t\t\t\t\t\t\t\t// returning the stack, not an error instance, jQuery just passes\n\t\t\t\t\t\t\t\t\t\t// it directly to `console.warn` so both will work; an instance\n\t\t\t\t\t\t\t\t\t\t// just better cooperates with source maps.\n\t\t\t\t\t\t\t\t\t} else if (jQuery.Deferred.getStackHook) {\n\t\t\t\t\t\t\t\t\t\tprocess.error = jQuery.Deferred.getStackHook();\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\twindow.setTimeout(process);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn jQuery.Deferred(function (newDefer) {\n\n\t\t\t\t\t\t\t// progress_handlers.add( ... )\n\t\t\t\t\t\t\ttuples[0][3].add(\n\t\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\t\tisFunction(onProgress) ?\n\t\t\t\t\t\t\t\t\t\tonProgress :\n\t\t\t\t\t\t\t\t\t\tIdentity,\n\t\t\t\t\t\t\t\t\tnewDefer.notifyWith\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t// fulfilled_handlers.add( ... )\n\t\t\t\t\t\t\ttuples[1][3].add(\n\t\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\t\tisFunction(onFulfilled) ?\n\t\t\t\t\t\t\t\t\t\tonFulfilled :\n\t\t\t\t\t\t\t\t\t\tIdentity\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t// rejected_handlers.add( ... )\n\t\t\t\t\t\t\ttuples[2][3].add(\n\t\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\t\tisFunction(onRejected) ?\n\t\t\t\t\t\t\t\t\t\tonRejected :\n\t\t\t\t\t\t\t\t\t\tThrower\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}).promise();\n\t\t\t\t\t},\n\n\t\t\t\t\t// Get a promise for this deferred\n\t\t\t\t\t// If obj is provided, the promise aspect is added to the object\n\t\t\t\t\tpromise: function (obj) {\n\t\t\t\t\t\treturn obj != null ? jQuery.extend(obj, promise) : promise;\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tdeferred = {};\n\n\t\t\t// Add list-specific methods\n\t\t\tjQuery.each(tuples, function (i, tuple) {\n\t\t\t\tvar list = tuple[2],\n\t\t\t\t\tstateString = tuple[5];\n\n\t\t\t\t// promise.progress = list.add\n\t\t\t\t// promise.done = list.add\n\t\t\t\t// promise.fail = list.add\n\t\t\t\tpromise[tuple[1]] = list.add;\n\n\t\t\t\t// Handle state\n\t\t\t\tif (stateString) {\n\t\t\t\t\tlist.add(\n\t\t\t\t\t\tfunction () {\n\n\t\t\t\t\t\t\t// state = \"resolved\" (i.e., fulfilled)\n\t\t\t\t\t\t\t// state = \"rejected\"\n\t\t\t\t\t\t\tstate = stateString;\n\t\t\t\t\t\t},\n\n\t\t\t\t\t\t// rejected_callbacks.disable\n\t\t\t\t\t\t// fulfilled_callbacks.disable\n\t\t\t\t\t\ttuples[3 - i][2].disable,\n\n\t\t\t\t\t\t// rejected_handlers.disable\n\t\t\t\t\t\t// fulfilled_handlers.disable\n\t\t\t\t\t\ttuples[3 - i][3].disable,\n\n\t\t\t\t\t\t// progress_callbacks.lock\n\t\t\t\t\t\ttuples[0][2].lock,\n\n\t\t\t\t\t\t// progress_handlers.lock\n\t\t\t\t\t\ttuples[0][3].lock\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\t// progress_handlers.fire\n\t\t\t\t// fulfilled_handlers.fire\n\t\t\t\t// rejected_handlers.fire\n\t\t\t\tlist.add(tuple[3].fire);\n\n\t\t\t\t// deferred.notify = function() { deferred.notifyWith(...) }\n\t\t\t\t// deferred.resolve = function() { deferred.resolveWith(...) }\n\t\t\t\t// deferred.reject = function() { deferred.rejectWith(...) }\n\t\t\t\tdeferred[tuple[0]] = function () {\n\t\t\t\t\tdeferred[tuple[0] + \"With\"](this === deferred ? undefined : this, arguments);\n\t\t\t\t\treturn this;\n\t\t\t\t};\n\n\t\t\t\t// deferred.notifyWith = list.fireWith\n\t\t\t\t// deferred.resolveWith = list.fireWith\n\t\t\t\t// deferred.rejectWith = list.fireWith\n\t\t\t\tdeferred[tuple[0] + \"With\"] = list.fireWith;\n\t\t\t});\n\n\t\t\t// Make the deferred a promise\n\t\t\tpromise.promise(deferred);\n\n\t\t\t// Call given func if any\n\t\t\tif (func) {\n\t\t\t\tfunc.call(deferred, deferred);\n\t\t\t}\n\n\t\t\t// All done!\n\t\t\treturn deferred;\n\t\t},\n\n\t\t// Deferred helper\n\t\twhen: function (singleValue) {\n\t\t\tvar\n\n\t\t\t\t// count of uncompleted subordinates\n\t\t\t\tremaining = arguments.length,\n\n\t\t\t\t// count of unprocessed arguments\n\t\t\t\ti = remaining,\n\n\t\t\t\t// subordinate fulfillment data\n\t\t\t\tresolveContexts = Array(i),\n\t\t\t\tresolveValues = slice.call(arguments),\n\n\t\t\t\t// the primary Deferred\n\t\t\t\tprimary = jQuery.Deferred(),\n\n\t\t\t\t// subordinate callback factory\n\t\t\t\tupdateFunc = function (i) {\n\t\t\t\t\treturn function (value) {\n\t\t\t\t\t\tresolveContexts[i] = this;\n\t\t\t\t\t\tresolveValues[i] = arguments.length > 1 ? slice.call(arguments) : value;\n\t\t\t\t\t\tif (!(--remaining)) {\n\t\t\t\t\t\t\tprimary.resolveWith(resolveContexts, resolveValues);\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t};\n\n\t\t\t// Single- and empty arguments are adopted like Promise.resolve\n\t\t\tif (remaining <= 1) {\n\t\t\t\tadoptValue(singleValue, primary.done(updateFunc(i)).resolve, primary.reject,\n\t\t\t\t\t!remaining);\n\n\t\t\t\t// Use .then() to unwrap secondary thenables (cf. gh-3000)\n\t\t\t\tif (primary.state() === \"pending\" ||\n\t\t\t\t\tisFunction(resolveValues[i] && resolveValues[i].then)) {\n\n\t\t\t\t\treturn primary.then();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Multiple arguments are aggregated like Promise.all array elements\n\t\t\twhile (i--) {\n\t\t\t\tadoptValue(resolveValues[i], updateFunc(i), primary.reject);\n\t\t\t}\n\n\t\t\treturn primary.promise();\n\t\t}\n\t});\n\n\n\t// These usually indicate a programmer mistake during development,\n\t// warn about them ASAP rather than swallowing them by default.\n\tvar rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;\n\n\t// If `jQuery.Deferred.getErrorHook` is defined, `asyncError` is an error\n\t// captured before the async barrier to get the original error cause\n\t// which may otherwise be hidden.\n\tjQuery.Deferred.exceptionHook = function (error, asyncError) {\n\n\t\t// Support: IE 8 - 9 only\n\t\t// Console exists when dev tools are open, which can happen at any time\n\t\tif (window.console && window.console.warn && error && rerrorNames.test(error.name)) {\n\t\t\twindow.console.warn(\"jQuery.Deferred exception: \" + error.message,\n\t\t\t\terror.stack, asyncError);\n\t\t}\n\t};\n\n\n\n\n\tjQuery.readyException = function (error) {\n\t\twindow.setTimeout(function () {\n\t\t\tthrow error;\n\t\t});\n\t};\n\n\n\n\n\t// The deferred used on DOM ready\n\tvar readyList = jQuery.Deferred();\n\n\tjQuery.fn.ready = function (fn) {\n\n\t\treadyList\n\t\t\t.then(fn)\n\n\t\t\t// Wrap jQuery.readyException in a function so that the lookup\n\t\t\t// happens at the time of error handling instead of callback\n\t\t\t// registration.\n\t\t\t.catch(function (error) {\n\t\t\t\tjQuery.readyException(error);\n\t\t\t});\n\n\t\treturn this;\n\t};\n\n\tjQuery.extend({\n\n\t\t// Is the DOM ready to be used? Set to true once it occurs.\n\t\tisReady: false,\n\n\t\t// A counter to track how many items to wait for before\n\t\t// the ready event fires. See trac-6781\n\t\treadyWait: 1,\n\n\t\t// Handle when the DOM is ready\n\t\tready: function (wait) {\n\n\t\t\t// Abort if there are pending holds or we're already ready\n\t\t\tif (wait === true ? --jQuery.readyWait : jQuery.isReady) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Remember that the DOM is ready\n\t\t\tjQuery.isReady = true;\n\n\t\t\t// If a normal DOM Ready event fired, decrement, and wait if need be\n\t\t\tif (wait !== true && --jQuery.readyWait > 0) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If there are functions bound, to execute\n\t\t\treadyList.resolveWith(document, [jQuery]);\n\t\t}\n\t});\n\n\tjQuery.ready.then = readyList.then;\n\n\t// The ready event handler and self cleanup method\n\tfunction completed() {\n\t\tdocument.removeEventListener(\"DOMContentLoaded\", completed);\n\t\twindow.removeEventListener(\"load\", completed);\n\t\tjQuery.ready();\n\t}\n\n\t// Catch cases where $(document).ready() is called\n\t// after the browser event has already occurred.\n\t// Support: IE <=9 - 10 only\n\t// Older IE sometimes signals \"interactive\" too soon\n\tif (document.readyState === \"complete\" ||\n\t\t(document.readyState !== \"loading\" && !document.documentElement.doScroll)) {\n\n\t\t// Handle it asynchronously to allow scripts the opportunity to delay ready\n\t\twindow.setTimeout(jQuery.ready);\n\n\t} else {\n\n\t\t// Use the handy event callback\n\t\tdocument.addEventListener(\"DOMContentLoaded\", completed);\n\n\t\t// A fallback to window.onload, that will always work\n\t\twindow.addEventListener(\"load\", completed);\n\t}\n\n\n\n\n\t// Multifunctional method to get and set values of a collection\n\t// The value/s can optionally be executed if it's a function\n\tvar access = function (elems, fn, key, value, chainable, emptyGet, raw) {\n\t\tvar i = 0,\n\t\t\tlen = elems.length,\n\t\t\tbulk = key == null;\n\n\t\t// Sets many values\n\t\tif (toType(key) === \"object\") {\n\t\t\tchainable = true;\n\t\t\tfor (i in key) {\n\t\t\t\taccess(elems, fn, i, key[i], true, emptyGet, raw);\n\t\t\t}\n\n\t\t\t// Sets one value\n\t\t} else if (value !== undefined) {\n\t\t\tchainable = true;\n\n\t\t\tif (!isFunction(value)) {\n\t\t\t\traw = true;\n\t\t\t}\n\n\t\t\tif (bulk) {\n\n\t\t\t\t// Bulk operations run against the entire set\n\t\t\t\tif (raw) {\n\t\t\t\t\tfn.call(elems, value);\n\t\t\t\t\tfn = null;\n\n\t\t\t\t\t// ...except when executing function values\n\t\t\t\t} else {\n\t\t\t\t\tbulk = fn;\n\t\t\t\t\tfn = function (elem, _key, value) {\n\t\t\t\t\t\treturn bulk.call(jQuery(elem), value);\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (fn) {\n\t\t\t\tfor (; i < len; i++) {\n\t\t\t\t\tfn(\n\t\t\t\t\t\telems[i], key, raw ?\n\t\t\t\t\t\tvalue :\n\t\t\t\t\t\tvalue.call(elems[i], i, fn(elems[i], key))\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (chainable) {\n\t\t\treturn elems;\n\t\t}\n\n\t\t// Gets\n\t\tif (bulk) {\n\t\t\treturn fn.call(elems);\n\t\t}\n\n\t\treturn len ? fn(elems[0], key) : emptyGet;\n\t};\n\n\n\t// Matches dashed string for camelizing\n\tvar rmsPrefix = /^-ms-/,\n\t\trdashAlpha = /-([a-z])/g;\n\n\t// Used by camelCase as callback to replace()\n\tfunction fcamelCase(_all, letter) {\n\t\treturn letter.toUpperCase();\n\t}\n\n\t// Convert dashed to camelCase; used by the css and data modules\n\t// Support: IE <=9 - 11, Edge 12 - 15\n\t// Microsoft forgot to hump their vendor prefix (trac-9572)\n\tfunction camelCase(string) {\n\t\treturn string.replace(rmsPrefix, \"ms-\").replace(rdashAlpha, fcamelCase);\n\t}\n\tvar acceptData = function (owner) {\n\n\t\t// Accepts only:\n\t\t//  - Node\n\t\t//    - Node.ELEMENT_NODE\n\t\t//    - Node.DOCUMENT_NODE\n\t\t//  - Object\n\t\t//    - Any\n\t\treturn owner.nodeType === 1 || owner.nodeType === 9 || !(+owner.nodeType);\n\t};\n\n\n\n\n\tfunction Data() {\n\t\tthis.expando = jQuery.expando + Data.uid++;\n\t}\n\n\tData.uid = 1;\n\n\tData.prototype = {\n\n\t\tcache: function (owner) {\n\n\t\t\t// Check if the owner object already has a cache\n\t\t\tvar value = owner[this.expando];\n\n\t\t\t// If not, create one\n\t\t\tif (!value) {\n\t\t\t\tvalue = {};\n\n\t\t\t\t// We can accept data for non-element nodes in modern browsers,\n\t\t\t\t// but we should not, see trac-8335.\n\t\t\t\t// Always return an empty object.\n\t\t\t\tif (acceptData(owner)) {\n\n\t\t\t\t\t// If it is a node unlikely to be stringify-ed or looped over\n\t\t\t\t\t// use plain assignment\n\t\t\t\t\tif (owner.nodeType) {\n\t\t\t\t\t\towner[this.expando] = value;\n\n\t\t\t\t\t\t// Otherwise secure it in a non-enumerable property\n\t\t\t\t\t\t// configurable must be true to allow the property to be\n\t\t\t\t\t\t// deleted when data is removed\n\t\t\t\t\t} else {\n\t\t\t\t\t\tObject.defineProperty(owner, this.expando, {\n\t\t\t\t\t\t\tvalue: value,\n\t\t\t\t\t\t\tconfigurable: true\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn value;\n\t\t},\n\t\tset: function (owner, data, value) {\n\t\t\tvar prop,\n\t\t\t\tcache = this.cache(owner);\n\n\t\t\t// Handle: [ owner, key, value ] args\n\t\t\t// Always use camelCase key (gh-2257)\n\t\t\tif (typeof data === \"string\") {\n\t\t\t\tcache[camelCase(data)] = value;\n\n\t\t\t\t// Handle: [ owner, { properties } ] args\n\t\t\t} else {\n\n\t\t\t\t// Copy the properties one-by-one to the cache object\n\t\t\t\tfor (prop in data) {\n\t\t\t\t\tcache[camelCase(prop)] = data[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn cache;\n\t\t},\n\t\tget: function (owner, key) {\n\t\t\treturn key === undefined ?\n\t\t\t\tthis.cache(owner) :\n\n\t\t\t\t// Always use camelCase key (gh-2257)\n\t\t\t\towner[this.expando] && owner[this.expando][camelCase(key)];\n\t\t},\n\t\taccess: function (owner, key, value) {\n\n\t\t\t// In cases where either:\n\t\t\t//\n\t\t\t//   1. No key was specified\n\t\t\t//   2. A string key was specified, but no value provided\n\t\t\t//\n\t\t\t// Take the \"read\" path and allow the get method to determine\n\t\t\t// which value to return, respectively either:\n\t\t\t//\n\t\t\t//   1. The entire cache object\n\t\t\t//   2. The data stored at the key\n\t\t\t//\n\t\t\tif (key === undefined ||\n\t\t\t\t((key && typeof key === \"string\") && value === undefined)) {\n\n\t\t\t\treturn this.get(owner, key);\n\t\t\t}\n\n\t\t\t// When the key is not a string, or both a key and value\n\t\t\t// are specified, set or extend (existing objects) with either:\n\t\t\t//\n\t\t\t//   1. An object of properties\n\t\t\t//   2. A key and value\n\t\t\t//\n\t\t\tthis.set(owner, key, value);\n\n\t\t\t// Since the \"set\" path can have two possible entry points\n\t\t\t// return the expected data based on which path was taken[*]\n\t\t\treturn value !== undefined ? value : key;\n\t\t},\n\t\tremove: function (owner, key) {\n\t\t\tvar i,\n\t\t\t\tcache = owner[this.expando];\n\n\t\t\tif (cache === undefined) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (key !== undefined) {\n\n\t\t\t\t// Support array or space separated string of keys\n\t\t\t\tif (Array.isArray(key)) {\n\n\t\t\t\t\t// If key is an array of keys...\n\t\t\t\t\t// We always set camelCase keys, so remove that.\n\t\t\t\t\tkey = key.map(camelCase);\n\t\t\t\t} else {\n\t\t\t\t\tkey = camelCase(key);\n\n\t\t\t\t\t// If a key with the spaces exists, use it.\n\t\t\t\t\t// Otherwise, create an array by matching non-whitespace\n\t\t\t\t\tkey = key in cache ?\n\t\t\t\t\t\t[key] :\n\t\t\t\t\t\t(key.match(rnothtmlwhite) || []);\n\t\t\t\t}\n\n\t\t\t\ti = key.length;\n\n\t\t\t\twhile (i--) {\n\t\t\t\t\tdelete cache[key[i]];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove the expando if there's no more data\n\t\t\tif (key === undefined || jQuery.isEmptyObject(cache)) {\n\n\t\t\t\t// Support: Chrome <=35 - 45\n\t\t\t\t// Webkit & Blink performance suffers when deleting properties\n\t\t\t\t// from DOM nodes, so set to undefined instead\n\t\t\t\t// https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted)\n\t\t\t\tif (owner.nodeType) {\n\t\t\t\t\towner[this.expando] = undefined;\n\t\t\t\t} else {\n\t\t\t\t\tdelete owner[this.expando];\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\thasData: function (owner) {\n\t\t\tvar cache = owner[this.expando];\n\t\t\treturn cache !== undefined && !jQuery.isEmptyObject(cache);\n\t\t}\n\t};\n\tvar dataPriv = new Data();\n\n\tvar dataUser = new Data();\n\n\n\n\t//\tImplementation Summary\n\t//\n\t//\t1. Enforce API surface and semantic compatibility with 1.9.x branch\n\t//\t2. Improve the module's maintainability by reducing the storage\n\t//\t\tpaths to a single mechanism.\n\t//\t3. Use the same single mechanism to support \"private\" and \"user\" data.\n\t//\t4. _Never_ expose \"private\" data to user code (TODO: Drop _data, _removeData)\n\t//\t5. Avoid exposing implementation details on user objects (eg. expando properties)\n\t//\t6. Provide a clear path for implementation upgrade to WeakMap in 2014\n\n\tvar rbrace = /^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,\n\t\trmultiDash = /[A-Z]/g;\n\n\tfunction getData(data) {\n\t\tif (data === \"true\") {\n\t\t\treturn true;\n\t\t}\n\n\t\tif (data === \"false\") {\n\t\t\treturn false;\n\t\t}\n\n\t\tif (data === \"null\") {\n\t\t\treturn null;\n\t\t}\n\n\t\t// Only convert to a number if it doesn't change the string\n\t\tif (data === +data + \"\") {\n\t\t\treturn +data;\n\t\t}\n\n\t\tif (rbrace.test(data)) {\n\t\t\treturn JSON.parse(data);\n\t\t}\n\n\t\treturn data;\n\t}\n\n\tfunction dataAttr(elem, key, data) {\n\t\tvar name;\n\n\t\t// If nothing was found internally, try to fetch any\n\t\t// data from the HTML5 data-* attribute\n\t\tif (data === undefined && elem.nodeType === 1) {\n\t\t\tname = \"data-\" + key.replace(rmultiDash, \"-$&\").toLowerCase();\n\t\t\tdata = elem.getAttribute(name);\n\n\t\t\tif (typeof data === \"string\") {\n\t\t\t\ttry {\n\t\t\t\t\tdata = getData(data);\n\t\t\t\t} catch (e) { }\n\n\t\t\t\t// Make sure we set the data so it isn't changed later\n\t\t\t\tdataUser.set(elem, key, data);\n\t\t\t} else {\n\t\t\t\tdata = undefined;\n\t\t\t}\n\t\t}\n\t\treturn data;\n\t}\n\n\tjQuery.extend({\n\t\thasData: function (elem) {\n\t\t\treturn dataUser.hasData(elem) || dataPriv.hasData(elem);\n\t\t},\n\n\t\tdata: function (elem, name, data) {\n\t\t\treturn dataUser.access(elem, name, data);\n\t\t},\n\n\t\tremoveData: function (elem, name) {\n\t\t\tdataUser.remove(elem, name);\n\t\t},\n\n\t\t// TODO: Now that all calls to _data and _removeData have been replaced\n\t\t// with direct calls to dataPriv methods, these can be deprecated.\n\t\t_data: function (elem, name, data) {\n\t\t\treturn dataPriv.access(elem, name, data);\n\t\t},\n\n\t\t_removeData: function (elem, name) {\n\t\t\tdataPriv.remove(elem, name);\n\t\t}\n\t});\n\n\tjQuery.fn.extend({\n\t\tdata: function (key, value) {\n\t\t\tvar i, name, data,\n\t\t\t\telem = this[0],\n\t\t\t\tattrs = elem && elem.attributes;\n\n\t\t\t// Gets all values\n\t\t\tif (key === undefined) {\n\t\t\t\tif (this.length) {\n\t\t\t\t\tdata = dataUser.get(elem);\n\n\t\t\t\t\tif (elem.nodeType === 1 && !dataPriv.get(elem, \"hasDataAttrs\")) {\n\t\t\t\t\t\ti = attrs.length;\n\t\t\t\t\t\twhile (i--) {\n\n\t\t\t\t\t\t\t// Support: IE 11 only\n\t\t\t\t\t\t\t// The attrs elements can be null (trac-14894)\n\t\t\t\t\t\t\tif (attrs[i]) {\n\t\t\t\t\t\t\t\tname = attrs[i].name;\n\t\t\t\t\t\t\t\tif (name.indexOf(\"data-\") === 0) {\n\t\t\t\t\t\t\t\t\tname = camelCase(name.slice(5));\n\t\t\t\t\t\t\t\t\tdataAttr(elem, name, data[name]);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdataPriv.set(elem, \"hasDataAttrs\", true);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn data;\n\t\t\t}\n\n\t\t\t// Sets multiple values\n\t\t\tif (typeof key === \"object\") {\n\t\t\t\treturn this.each(function () {\n\t\t\t\t\tdataUser.set(this, key);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn access(this, function (value) {\n\t\t\t\tvar data;\n\n\t\t\t\t// The calling jQuery object (element matches) is not empty\n\t\t\t\t// (and therefore has an element appears at this[ 0 ]) and the\n\t\t\t\t// `value` parameter was not undefined. An empty jQuery object\n\t\t\t\t// will result in `undefined` for elem = this[ 0 ] which will\n\t\t\t\t// throw an exception if an attempt to read a data cache is made.\n\t\t\t\tif (elem && value === undefined) {\n\n\t\t\t\t\t// Attempt to get data from the cache\n\t\t\t\t\t// The key will always be camelCased in Data\n\t\t\t\t\tdata = dataUser.get(elem, key);\n\t\t\t\t\tif (data !== undefined) {\n\t\t\t\t\t\treturn data;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Attempt to \"discover\" the data in\n\t\t\t\t\t// HTML5 custom data-* attrs\n\t\t\t\t\tdata = dataAttr(elem, key);\n\t\t\t\t\tif (data !== undefined) {\n\t\t\t\t\t\treturn data;\n\t\t\t\t\t}\n\n\t\t\t\t\t// We tried really hard, but the data doesn't exist.\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Set the data...\n\t\t\t\tthis.each(function () {\n\n\t\t\t\t\t// We always store the camelCased key\n\t\t\t\t\tdataUser.set(this, key, value);\n\t\t\t\t});\n\t\t\t}, null, value, arguments.length > 1, null, true);\n\t\t},\n\n\t\tremoveData: function (key) {\n\t\t\treturn this.each(function () {\n\t\t\t\tdataUser.remove(this, key);\n\t\t\t});\n\t\t}\n\t});\n\n\n\tjQuery.extend({\n\t\tqueue: function (elem, type, data) {\n\t\t\tvar queue;\n\n\t\t\tif (elem) {\n\t\t\t\ttype = (type || \"fx\") + \"queue\";\n\t\t\t\tqueue = dataPriv.get(elem, type);\n\n\t\t\t\t// Speed up dequeue by getting out quickly if this is just a lookup\n\t\t\t\tif (data) {\n\t\t\t\t\tif (!queue || Array.isArray(data)) {\n\t\t\t\t\t\tqueue = dataPriv.access(elem, type, jQuery.makeArray(data));\n\t\t\t\t\t} else {\n\t\t\t\t\t\tqueue.push(data);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn queue || [];\n\t\t\t}\n\t\t},\n\n\t\tdequeue: function (elem, type) {\n\t\t\ttype = type || \"fx\";\n\n\t\t\tvar queue = jQuery.queue(elem, type),\n\t\t\t\tstartLength = queue.length,\n\t\t\t\tfn = queue.shift(),\n\t\t\t\thooks = jQuery._queueHooks(elem, type),\n\t\t\t\tnext = function () {\n\t\t\t\t\tjQuery.dequeue(elem, type);\n\t\t\t\t};\n\n\t\t\t// If the fx queue is dequeued, always remove the progress sentinel\n\t\t\tif (fn === \"inprogress\") {\n\t\t\t\tfn = queue.shift();\n\t\t\t\tstartLength--;\n\t\t\t}\n\n\t\t\tif (fn) {\n\n\t\t\t\t// Add a progress sentinel to prevent the fx queue from being\n\t\t\t\t// automatically dequeued\n\t\t\t\tif (type === \"fx\") {\n\t\t\t\t\tqueue.unshift(\"inprogress\");\n\t\t\t\t}\n\n\t\t\t\t// Clear up the last queue stop function\n\t\t\t\tdelete hooks.stop;\n\t\t\t\tfn.call(elem, next, hooks);\n\t\t\t}\n\n\t\t\tif (!startLength && hooks) {\n\t\t\t\thooks.empty.fire();\n\t\t\t}\n\t\t},\n\n\t\t// Not public - generate a queueHooks object, or return the current one\n\t\t_queueHooks: function (elem, type) {\n\t\t\tvar key = type + \"queueHooks\";\n\t\t\treturn dataPriv.get(elem, key) || dataPriv.access(elem, key, {\n\t\t\t\tempty: jQuery.Callbacks(\"once memory\").add(function () {\n\t\t\t\t\tdataPriv.remove(elem, [type + \"queue\", key]);\n\t\t\t\t})\n\t\t\t});\n\t\t}\n\t});\n\n\tjQuery.fn.extend({\n\t\tqueue: function (type, data) {\n\t\t\tvar setter = 2;\n\n\t\t\tif (typeof type !== \"string\") {\n\t\t\t\tdata = type;\n\t\t\t\ttype = \"fx\";\n\t\t\t\tsetter--;\n\t\t\t}\n\n\t\t\tif (arguments.length < setter) {\n\t\t\t\treturn jQuery.queue(this[0], type);\n\t\t\t}\n\n\t\t\treturn data === undefined ?\n\t\t\t\tthis :\n\t\t\t\tthis.each(function () {\n\t\t\t\t\tvar queue = jQuery.queue(this, type, data);\n\n\t\t\t\t\t// Ensure a hooks for this queue\n\t\t\t\t\tjQuery._queueHooks(this, type);\n\n\t\t\t\t\tif (type === \"fx\" && queue[0] !== \"inprogress\") {\n\t\t\t\t\t\tjQuery.dequeue(this, type);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t},\n\t\tdequeue: function (type) {\n\t\t\treturn this.each(function () {\n\t\t\t\tjQuery.dequeue(this, type);\n\t\t\t});\n\t\t},\n\t\tclearQueue: function (type) {\n\t\t\treturn this.queue(type || \"fx\", []);\n\t\t},\n\n\t\t// Get a promise resolved when queues of a certain type\n\t\t// are emptied (fx is the type by default)\n\t\tpromise: function (type, obj) {\n\t\t\tvar tmp,\n\t\t\t\tcount = 1,\n\t\t\t\tdefer = jQuery.Deferred(),\n\t\t\t\telements = this,\n\t\t\t\ti = this.length,\n\t\t\t\tresolve = function () {\n\t\t\t\t\tif (!(--count)) {\n\t\t\t\t\t\tdefer.resolveWith(elements, [elements]);\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\tif (typeof type !== \"string\") {\n\t\t\t\tobj = type;\n\t\t\t\ttype = undefined;\n\t\t\t}\n\t\t\ttype = type || \"fx\";\n\n\t\t\twhile (i--) {\n\t\t\t\ttmp = dataPriv.get(elements[i], type + \"queueHooks\");\n\t\t\t\tif (tmp && tmp.empty) {\n\t\t\t\t\tcount++;\n\t\t\t\t\ttmp.empty.add(resolve);\n\t\t\t\t}\n\t\t\t}\n\t\t\tresolve();\n\t\t\treturn defer.promise(obj);\n\t\t}\n\t});\n\tvar pnum = (/[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/).source;\n\n\tvar rcssNum = new RegExp(\"^(?:([+-])=|)(\" + pnum + \")([a-z%]*)$\", \"i\");\n\n\n\tvar cssExpand = [\"Top\", \"Right\", \"Bottom\", \"Left\"];\n\n\tvar documentElement = document.documentElement;\n\n\n\n\tvar isAttached = function (elem) {\n\t\treturn jQuery.contains(elem.ownerDocument, elem);\n\t},\n\t\tcomposed = { composed: true };\n\n\t// Support: IE 9 - 11+, Edge 12 - 18+, iOS 10.0 - 10.2 only\n\t// Check attachment across shadow DOM boundaries when possible (gh-3504)\n\t// Support: iOS 10.0-10.2 only\n\t// Early iOS 10 versions support `attachShadow` but not `getRootNode`,\n\t// leading to errors. We need to check for `getRootNode`.\n\tif (documentElement.getRootNode) {\n\t\tisAttached = function (elem) {\n\t\t\treturn jQuery.contains(elem.ownerDocument, elem) ||\n\t\t\t\telem.getRootNode(composed) === elem.ownerDocument;\n\t\t};\n\t}\n\tvar isHiddenWithinTree = function (elem, el) {\n\n\t\t// isHiddenWithinTree might be called from jQuery#filter function;\n\t\t// in that case, element will be second argument\n\t\telem = el || elem;\n\n\t\t// Inline style trumps all\n\t\treturn elem.style.display === \"none\" ||\n\t\t\telem.style.display === \"\" &&\n\n\t\t\t// Otherwise, check computed style\n\t\t\t// Support: Firefox <=43 - 45\n\t\t\t// Disconnected elements can have computed display: none, so first confirm that elem is\n\t\t\t// in the document.\n\t\t\tisAttached(elem) &&\n\n\t\t\tjQuery.css(elem, \"display\") === \"none\";\n\t};\n\n\n\n\tfunction adjustCSS(elem, prop, valueParts, tween) {\n\t\tvar adjusted, scale,\n\t\t\tmaxIterations = 20,\n\t\t\tcurrentValue = tween ?\n\t\t\t\tfunction () {\n\t\t\t\t\treturn tween.cur();\n\t\t\t\t} :\n\t\t\t\tfunction () {\n\t\t\t\t\treturn jQuery.css(elem, prop, \"\");\n\t\t\t\t},\n\t\t\tinitial = currentValue(),\n\t\t\tunit = valueParts && valueParts[3] || (jQuery.cssNumber[prop] ? \"\" : \"px\"),\n\n\t\t\t// Starting value computation is required for potential unit mismatches\n\t\t\tinitialInUnit = elem.nodeType &&\n\t\t\t\t(jQuery.cssNumber[prop] || unit !== \"px\" && +initial) &&\n\t\t\t\trcssNum.exec(jQuery.css(elem, prop));\n\n\t\tif (initialInUnit && initialInUnit[3] !== unit) {\n\n\t\t\t// Support: Firefox <=54\n\t\t\t// Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144)\n\t\t\tinitial = initial / 2;\n\n\t\t\t// Trust units reported by jQuery.css\n\t\t\tunit = unit || initialInUnit[3];\n\n\t\t\t// Iteratively approximate from a nonzero starting point\n\t\t\tinitialInUnit = +initial || 1;\n\n\t\t\twhile (maxIterations--) {\n\n\t\t\t\t// Evaluate and update our best guess (doubling guesses that zero out).\n\t\t\t\t// Finish if the scale equals or crosses 1 (making the old*new product non-positive).\n\t\t\t\tjQuery.style(elem, prop, initialInUnit + unit);\n\t\t\t\tif ((1 - scale) * (1 - (scale = currentValue() / initial || 0.5)) <= 0) {\n\t\t\t\t\tmaxIterations = 0;\n\t\t\t\t}\n\t\t\t\tinitialInUnit = initialInUnit / scale;\n\n\t\t\t}\n\n\t\t\tinitialInUnit = initialInUnit * 2;\n\t\t\tjQuery.style(elem, prop, initialInUnit + unit);\n\n\t\t\t// Make sure we update the tween properties later on\n\t\t\tvalueParts = valueParts || [];\n\t\t}\n\n\t\tif (valueParts) {\n\t\t\tinitialInUnit = +initialInUnit || +initial || 0;\n\n\t\t\t// Apply relative offset (+=/-=) if specified\n\t\t\tadjusted = valueParts[1] ?\n\t\t\t\tinitialInUnit + (valueParts[1] + 1) * valueParts[2] :\n\t\t\t\t+valueParts[2];\n\t\t\tif (tween) {\n\t\t\t\ttween.unit = unit;\n\t\t\t\ttween.start = initialInUnit;\n\t\t\t\ttween.end = adjusted;\n\t\t\t}\n\t\t}\n\t\treturn adjusted;\n\t}\n\n\n\tvar defaultDisplayMap = {};\n\n\tfunction getDefaultDisplay(elem) {\n\t\tvar temp,\n\t\t\tdoc = elem.ownerDocument,\n\t\t\tnodeName = elem.nodeName,\n\t\t\tdisplay = defaultDisplayMap[nodeName];\n\n\t\tif (display) {\n\t\t\treturn display;\n\t\t}\n\n\t\ttemp = doc.body.appendChild(doc.createElement(nodeName));\n\t\tdisplay = jQuery.css(temp, \"display\");\n\n\t\ttemp.parentNode.removeChild(temp);\n\n\t\tif (display === \"none\") {\n\t\t\tdisplay = \"block\";\n\t\t}\n\t\tdefaultDisplayMap[nodeName] = display;\n\n\t\treturn display;\n\t}\n\n\tfunction showHide(elements, show) {\n\t\tvar display, elem,\n\t\t\tvalues = [],\n\t\t\tindex = 0,\n\t\t\tlength = elements.length;\n\n\t\t// Determine new display value for elements that need to change\n\t\tfor (; index < length; index++) {\n\t\t\telem = elements[index];\n\t\t\tif (!elem.style) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tdisplay = elem.style.display;\n\t\t\tif (show) {\n\n\t\t\t\t// Since we force visibility upon cascade-hidden elements, an immediate (and slow)\n\t\t\t\t// check is required in this first loop unless we have a nonempty display value (either\n\t\t\t\t// inline or about-to-be-restored)\n\t\t\t\tif (display === \"none\") {\n\t\t\t\t\tvalues[index] = dataPriv.get(elem, \"display\") || null;\n\t\t\t\t\tif (!values[index]) {\n\t\t\t\t\t\telem.style.display = \"\";\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (elem.style.display === \"\" && isHiddenWithinTree(elem)) {\n\t\t\t\t\tvalues[index] = getDefaultDisplay(elem);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (display !== \"none\") {\n\t\t\t\t\tvalues[index] = \"none\";\n\n\t\t\t\t\t// Remember what we're overwriting\n\t\t\t\t\tdataPriv.set(elem, \"display\", display);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Set the display of the elements in a second loop to avoid constant reflow\n\t\tfor (index = 0; index < length; index++) {\n\t\t\tif (values[index] != null) {\n\t\t\t\telements[index].style.display = values[index];\n\t\t\t}\n\t\t}\n\n\t\treturn elements;\n\t}\n\n\tjQuery.fn.extend({\n\t\tshow: function () {\n\t\t\treturn showHide(this, true);\n\t\t},\n\t\thide: function () {\n\t\t\treturn showHide(this);\n\t\t},\n\t\ttoggle: function (state) {\n\t\t\tif (typeof state === \"boolean\") {\n\t\t\t\treturn state ? this.show() : this.hide();\n\t\t\t}\n\n\t\t\treturn this.each(function () {\n\t\t\t\tif (isHiddenWithinTree(this)) {\n\t\t\t\t\tjQuery(this).show();\n\t\t\t\t} else {\n\t\t\t\t\tjQuery(this).hide();\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t});\n\tvar rcheckableType = (/^(?:checkbox|radio)$/i);\n\n\tvar rtagName = (/<([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]*)/i);\n\n\tvar rscriptType = (/^$|^module$|\\/(?:java|ecma)script/i);\n\n\n\n\t(function () {\n\t\tvar fragment = document.createDocumentFragment(),\n\t\t\tdiv = fragment.appendChild(document.createElement(\"div\")),\n\t\t\tinput = document.createElement(\"input\");\n\n\t\t// Support: Android 4.0 - 4.3 only\n\t\t// Check state lost if the name is set (trac-11217)\n\t\t// Support: Windows Web Apps (WWA)\n\t\t// `name` and `type` must use .setAttribute for WWA (trac-14901)\n\t\tinput.setAttribute(\"type\", \"radio\");\n\t\tinput.setAttribute(\"checked\", \"checked\");\n\t\tinput.setAttribute(\"name\", \"t\");\n\n\t\tdiv.appendChild(input);\n\n\t\t// Support: Android <=4.1 only\n\t\t// Older WebKit doesn't clone checked state correctly in fragments\n\t\tsupport.checkClone = div.cloneNode(true).cloneNode(true).lastChild.checked;\n\n\t\t// Support: IE <=11 only\n\t\t// Make sure textarea (and checkbox) defaultValue is properly cloned\n\t\tdiv.innerHTML = \"<textarea>x</textarea>\";\n\t\tsupport.noCloneChecked = !!div.cloneNode(true).lastChild.defaultValue;\n\n\t\t// Support: IE <=9 only\n\t\t// IE <=9 replaces <option> tags with their contents when inserted outside of\n\t\t// the select element.\n\t\tdiv.innerHTML = \"<option></option>\";\n\t\tsupport.option = !!div.lastChild;\n\t})();\n\n\n\t// We have to close these tags to support XHTML (trac-13200)\n\tvar wrapMap = {\n\n\t\t// XHTML parsers do not magically insert elements in the\n\t\t// same way that tag soup parsers do. So we cannot shorten\n\t\t// this by omitting <tbody> or other required elements.\n\t\tthead: [1, \"<table>\", \"</table>\"],\n\t\tcol: [2, \"<table><colgroup>\", \"</colgroup></table>\"],\n\t\ttr: [2, \"<table><tbody>\", \"</tbody></table>\"],\n\t\ttd: [3, \"<table><tbody><tr>\", \"</tr></tbody></table>\"],\n\n\t\t_default: [0, \"\", \"\"]\n\t};\n\n\twrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;\n\twrapMap.th = wrapMap.td;\n\n\t// Support: IE <=9 only\n\tif (!support.option) {\n\t\twrapMap.optgroup = wrapMap.option = [1, \"<select multiple='multiple'>\", \"</select>\"];\n\t}\n\n\n\tfunction getAll(context, tag) {\n\n\t\t// Support: IE <=9 - 11 only\n\t\t// Use typeof to avoid zero-argument method invocation on host objects (trac-15151)\n\t\tvar ret;\n\n\t\tif (typeof context.getElementsByTagName !== \"undefined\") {\n\t\t\tret = context.getElementsByTagName(tag || \"*\");\n\n\t\t} else if (typeof context.querySelectorAll !== \"undefined\") {\n\t\t\tret = context.querySelectorAll(tag || \"*\");\n\n\t\t} else {\n\t\t\tret = [];\n\t\t}\n\n\t\tif (tag === undefined || tag && nodeName(context, tag)) {\n\t\t\treturn jQuery.merge([context], ret);\n\t\t}\n\n\t\treturn ret;\n\t}\n\n\n\t// Mark scripts as having already been evaluated\n\tfunction setGlobalEval(elems, refElements) {\n\t\tvar i = 0,\n\t\t\tl = elems.length;\n\n\t\tfor (; i < l; i++) {\n\t\t\tdataPriv.set(\n\t\t\t\telems[i],\n\t\t\t\t\"globalEval\",\n\t\t\t\t!refElements || dataPriv.get(refElements[i], \"globalEval\")\n\t\t\t);\n\t\t}\n\t}\n\n\n\tvar rhtml = /<|&#?\\w+;/;\n\n\tfunction buildFragment(elems, context, scripts, selection, ignored) {\n\t\tvar elem, tmp, tag, wrap, attached, j,\n\t\t\tfragment = context.createDocumentFragment(),\n\t\t\tnodes = [],\n\t\t\ti = 0,\n\t\t\tl = elems.length;\n\n\t\tfor (; i < l; i++) {\n\t\t\telem = elems[i];\n\n\t\t\tif (elem || elem === 0) {\n\n\t\t\t\t// Add nodes directly\n\t\t\t\tif (toType(elem) === \"object\") {\n\n\t\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\t\tjQuery.merge(nodes, elem.nodeType ? [elem] : elem);\n\n\t\t\t\t\t// Convert non-html into a text node\n\t\t\t\t} else if (!rhtml.test(elem)) {\n\t\t\t\t\tnodes.push(context.createTextNode(elem));\n\n\t\t\t\t\t// Convert html into DOM nodes\n\t\t\t\t} else {\n\t\t\t\t\ttmp = tmp || fragment.appendChild(context.createElement(\"div\"));\n\n\t\t\t\t\t// Deserialize a standard representation\n\t\t\t\t\ttag = (rtagName.exec(elem) || [\"\", \"\"])[1].toLowerCase();\n\t\t\t\t\twrap = wrapMap[tag] || wrapMap._default;\n\t\t\t\t\ttmp.innerHTML = wrap[1] + jQuery.htmlPrefilter(elem) + wrap[2];\n\n\t\t\t\t\t// Descend through wrappers to the right content\n\t\t\t\t\tj = wrap[0];\n\t\t\t\t\twhile (j--) {\n\t\t\t\t\t\ttmp = tmp.lastChild;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\t\tjQuery.merge(nodes, tmp.childNodes);\n\n\t\t\t\t\t// Remember the top-level container\n\t\t\t\t\ttmp = fragment.firstChild;\n\n\t\t\t\t\t// Ensure the created nodes are orphaned (trac-12392)\n\t\t\t\t\ttmp.textContent = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Remove wrapper from fragment\n\t\tfragment.textContent = \"\";\n\n\t\ti = 0;\n\t\twhile ((elem = nodes[i++])) {\n\n\t\t\t// Skip elements already in the context collection (trac-4087)\n\t\t\tif (selection && jQuery.inArray(elem, selection) > -1) {\n\t\t\t\tif (ignored) {\n\t\t\t\t\tignored.push(elem);\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tattached = isAttached(elem);\n\n\t\t\t// Append to fragment\n\t\t\ttmp = getAll(fragment.appendChild(elem), \"script\");\n\n\t\t\t// Preserve script evaluation history\n\t\t\tif (attached) {\n\t\t\t\tsetGlobalEval(tmp);\n\t\t\t}\n\n\t\t\t// Capture executables\n\t\t\tif (scripts) {\n\t\t\t\tj = 0;\n\t\t\t\twhile ((elem = tmp[j++])) {\n\t\t\t\t\tif (rscriptType.test(elem.type || \"\")) {\n\t\t\t\t\t\tscripts.push(elem);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn fragment;\n\t}\n\n\n\tvar rtypenamespace = /^([^.]*)(?:\\.(.+)|)/;\n\n\tfunction returnTrue() {\n\t\treturn true;\n\t}\n\n\tfunction returnFalse() {\n\t\treturn false;\n\t}\n\n\tfunction on(elem, types, selector, data, fn, one) {\n\t\tvar origFn, type;\n\n\t\t// Types can be a map of types/handlers\n\t\tif (typeof types === \"object\") {\n\n\t\t\t// ( types-Object, selector, data )\n\t\t\tif (typeof selector !== \"string\") {\n\n\t\t\t\t// ( types-Object, data )\n\t\t\t\tdata = data || selector;\n\t\t\t\tselector = undefined;\n\t\t\t}\n\t\t\tfor (type in types) {\n\t\t\t\ton(elem, type, selector, data, types[type], one);\n\t\t\t}\n\t\t\treturn elem;\n\t\t}\n\n\t\tif (data == null && fn == null) {\n\n\t\t\t// ( types, fn )\n\t\t\tfn = selector;\n\t\t\tdata = selector = undefined;\n\t\t} else if (fn == null) {\n\t\t\tif (typeof selector === \"string\") {\n\n\t\t\t\t// ( types, selector, fn )\n\t\t\t\tfn = data;\n\t\t\t\tdata = undefined;\n\t\t\t} else {\n\n\t\t\t\t// ( types, data, fn )\n\t\t\t\tfn = data;\n\t\t\t\tdata = selector;\n\t\t\t\tselector = undefined;\n\t\t\t}\n\t\t}\n\t\tif (fn === false) {\n\t\t\tfn = returnFalse;\n\t\t} else if (!fn) {\n\t\t\treturn elem;\n\t\t}\n\n\t\tif (one === 1) {\n\t\t\torigFn = fn;\n\t\t\tfn = function (event) {\n\n\t\t\t\t// Can use an empty set, since event contains the info\n\t\t\t\tjQuery().off(event);\n\t\t\t\treturn origFn.apply(this, arguments);\n\t\t\t};\n\n\t\t\t// Use same guid so caller can remove using origFn\n\t\t\tfn.guid = origFn.guid || (origFn.guid = jQuery.guid++);\n\t\t}\n\t\treturn elem.each(function () {\n\t\t\tjQuery.event.add(this, types, fn, data, selector);\n\t\t});\n\t}\n\n\t/*\n\t * Helper functions for managing events -- not part of the public interface.\n\t * Props to Dean Edwards' addEvent library for many of the ideas.\n\t */\n\tjQuery.event = {\n\n\t\tglobal: {},\n\n\t\tadd: function (elem, types, handler, data, selector) {\n\n\t\t\tvar handleObjIn, eventHandle, tmp,\n\t\t\t\tevents, t, handleObj,\n\t\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\t\telemData = dataPriv.get(elem);\n\n\t\t\t// Only attach events to objects that accept data\n\t\t\tif (!acceptData(elem)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Caller can pass in an object of custom data in lieu of the handler\n\t\t\tif (handler.handler) {\n\t\t\t\thandleObjIn = handler;\n\t\t\t\thandler = handleObjIn.handler;\n\t\t\t\tselector = handleObjIn.selector;\n\t\t\t}\n\n\t\t\t// Ensure that invalid selectors throw exceptions at attach time\n\t\t\t// Evaluate against documentElement in case elem is a non-element node (e.g., document)\n\t\t\tif (selector) {\n\t\t\t\tjQuery.find.matchesSelector(documentElement, selector);\n\t\t\t}\n\n\t\t\t// Make sure that the handler has a unique ID, used to find/remove it later\n\t\t\tif (!handler.guid) {\n\t\t\t\thandler.guid = jQuery.guid++;\n\t\t\t}\n\n\t\t\t// Init the element's event structure and main handler, if this is the first\n\t\t\tif (!(events = elemData.events)) {\n\t\t\t\tevents = elemData.events = Object.create(null);\n\t\t\t}\n\t\t\tif (!(eventHandle = elemData.handle)) {\n\t\t\t\teventHandle = elemData.handle = function (e) {\n\n\t\t\t\t\t// Discard the second event of a jQuery.event.trigger() and\n\t\t\t\t\t// when an event is called after a page has unloaded\n\t\t\t\t\treturn typeof jQuery !== \"undefined\" && jQuery.event.triggered !== e.type ?\n\t\t\t\t\t\tjQuery.event.dispatch.apply(elem, arguments) : undefined;\n\t\t\t\t};\n\t\t\t}\n\n\t\t\t// Handle multiple events separated by a space\n\t\t\ttypes = (types || \"\").match(rnothtmlwhite) || [\"\"];\n\t\t\tt = types.length;\n\t\t\twhile (t--) {\n\t\t\t\ttmp = rtypenamespace.exec(types[t]) || [];\n\t\t\t\ttype = origType = tmp[1];\n\t\t\t\tnamespaces = (tmp[2] || \"\").split(\".\").sort();\n\n\t\t\t\t// There *must* be a type, no attaching namespace-only handlers\n\t\t\t\tif (!type) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// If event changes its type, use the special event handlers for the changed type\n\t\t\t\tspecial = jQuery.event.special[type] || {};\n\n\t\t\t\t// If selector defined, determine special event api type, otherwise given type\n\t\t\t\ttype = (selector ? special.delegateType : special.bindType) || type;\n\n\t\t\t\t// Update special based on newly reset type\n\t\t\t\tspecial = jQuery.event.special[type] || {};\n\n\t\t\t\t// handleObj is passed to all event handlers\n\t\t\t\thandleObj = jQuery.extend({\n\t\t\t\t\ttype: type,\n\t\t\t\t\torigType: origType,\n\t\t\t\t\tdata: data,\n\t\t\t\t\thandler: handler,\n\t\t\t\t\tguid: handler.guid,\n\t\t\t\t\tselector: selector,\n\t\t\t\t\tneedsContext: selector && jQuery.expr.match.needsContext.test(selector),\n\t\t\t\t\tnamespace: namespaces.join(\".\")\n\t\t\t\t}, handleObjIn);\n\n\t\t\t\t// Init the event handler queue if we're the first\n\t\t\t\tif (!(handlers = events[type])) {\n\t\t\t\t\thandlers = events[type] = [];\n\t\t\t\t\thandlers.delegateCount = 0;\n\n\t\t\t\t\t// Only use addEventListener if the special events handler returns false\n\t\t\t\t\tif (!special.setup ||\n\t\t\t\t\t\tspecial.setup.call(elem, data, namespaces, eventHandle) === false) {\n\n\t\t\t\t\t\tif (elem.addEventListener) {\n\t\t\t\t\t\t\telem.addEventListener(type, eventHandle);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (special.add) {\n\t\t\t\t\tspecial.add.call(elem, handleObj);\n\n\t\t\t\t\tif (!handleObj.handler.guid) {\n\t\t\t\t\t\thandleObj.handler.guid = handler.guid;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Add to the element's handler list, delegates in front\n\t\t\t\tif (selector) {\n\t\t\t\t\thandlers.splice(handlers.delegateCount++, 0, handleObj);\n\t\t\t\t} else {\n\t\t\t\t\thandlers.push(handleObj);\n\t\t\t\t}\n\n\t\t\t\t// Keep track of which events have ever been used, for event optimization\n\t\t\t\tjQuery.event.global[type] = true;\n\t\t\t}\n\n\t\t},\n\n\t\t// Detach an event or set of events from an element\n\t\tremove: function (elem, types, handler, selector, mappedTypes) {\n\n\t\t\tvar j, origCount, tmp,\n\t\t\t\tevents, t, handleObj,\n\t\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\t\telemData = dataPriv.hasData(elem) && dataPriv.get(elem);\n\n\t\t\tif (!elemData || !(events = elemData.events)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Once for each type.namespace in types; type may be omitted\n\t\t\ttypes = (types || \"\").match(rnothtmlwhite) || [\"\"];\n\t\t\tt = types.length;\n\t\t\twhile (t--) {\n\t\t\t\ttmp = rtypenamespace.exec(types[t]) || [];\n\t\t\t\ttype = origType = tmp[1];\n\t\t\t\tnamespaces = (tmp[2] || \"\").split(\".\").sort();\n\n\t\t\t\t// Unbind all events (on this namespace, if provided) for the element\n\t\t\t\tif (!type) {\n\t\t\t\t\tfor (type in events) {\n\t\t\t\t\t\tjQuery.event.remove(elem, type + types[t], handler, selector, true);\n\t\t\t\t\t}\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tspecial = jQuery.event.special[type] || {};\n\t\t\t\ttype = (selector ? special.delegateType : special.bindType) || type;\n\t\t\t\thandlers = events[type] || [];\n\t\t\t\ttmp = tmp[2] &&\n\t\t\t\t\tnew RegExp(\"(^|\\\\.)\" + namespaces.join(\"\\\\.(?:.*\\\\.|)\") + \"(\\\\.|$)\");\n\n\t\t\t\t// Remove matching events\n\t\t\t\torigCount = j = handlers.length;\n\t\t\t\twhile (j--) {\n\t\t\t\t\thandleObj = handlers[j];\n\n\t\t\t\t\tif ((mappedTypes || origType === handleObj.origType) &&\n\t\t\t\t\t\t(!handler || handler.guid === handleObj.guid) &&\n\t\t\t\t\t\t(!tmp || tmp.test(handleObj.namespace)) &&\n\t\t\t\t\t\t(!selector || selector === handleObj.selector ||\n\t\t\t\t\t\t\tselector === \"**\" && handleObj.selector)) {\n\t\t\t\t\t\thandlers.splice(j, 1);\n\n\t\t\t\t\t\tif (handleObj.selector) {\n\t\t\t\t\t\t\thandlers.delegateCount--;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (special.remove) {\n\t\t\t\t\t\t\tspecial.remove.call(elem, handleObj);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Remove generic event handler if we removed something and no more handlers exist\n\t\t\t\t// (avoids potential for endless recursion during removal of special event handlers)\n\t\t\t\tif (origCount && !handlers.length) {\n\t\t\t\t\tif (!special.teardown ||\n\t\t\t\t\t\tspecial.teardown.call(elem, namespaces, elemData.handle) === false) {\n\n\t\t\t\t\t\tjQuery.removeEvent(elem, type, elemData.handle);\n\t\t\t\t\t}\n\n\t\t\t\t\tdelete events[type];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove data and the expando if it's no longer used\n\t\t\tif (jQuery.isEmptyObject(events)) {\n\t\t\t\tdataPriv.remove(elem, \"handle events\");\n\t\t\t}\n\t\t},\n\n\t\tdispatch: function (nativeEvent) {\n\n\t\t\tvar i, j, ret, matched, handleObj, handlerQueue,\n\t\t\t\targs = new Array(arguments.length),\n\n\t\t\t\t// Make a writable jQuery.Event from the native event object\n\t\t\t\tevent = jQuery.event.fix(nativeEvent),\n\n\t\t\t\thandlers = (\n\t\t\t\t\tdataPriv.get(this, \"events\") || Object.create(null)\n\t\t\t\t)[event.type] || [],\n\t\t\t\tspecial = jQuery.event.special[event.type] || {};\n\n\t\t\t// Use the fix-ed jQuery.Event rather than the (read-only) native event\n\t\t\targs[0] = event;\n\n\t\t\tfor (i = 1; i < arguments.length; i++) {\n\t\t\t\targs[i] = arguments[i];\n\t\t\t}\n\n\t\t\tevent.delegateTarget = this;\n\n\t\t\t// Call the preDispatch hook for the mapped type, and let it bail if desired\n\t\t\tif (special.preDispatch && special.preDispatch.call(this, event) === false) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Determine handlers\n\t\t\thandlerQueue = jQuery.event.handlers.call(this, event, handlers);\n\n\t\t\t// Run delegates first; they may want to stop propagation beneath us\n\t\t\ti = 0;\n\t\t\twhile ((matched = handlerQueue[i++]) && !event.isPropagationStopped()) {\n\t\t\t\tevent.currentTarget = matched.elem;\n\n\t\t\t\tj = 0;\n\t\t\t\twhile ((handleObj = matched.handlers[j++]) &&\n\t\t\t\t\t!event.isImmediatePropagationStopped()) {\n\n\t\t\t\t\t// If the event is namespaced, then each handler is only invoked if it is\n\t\t\t\t\t// specially universal or its namespaces are a superset of the event's.\n\t\t\t\t\tif (!event.rnamespace || handleObj.namespace === false ||\n\t\t\t\t\t\tevent.rnamespace.test(handleObj.namespace)) {\n\n\t\t\t\t\t\tevent.handleObj = handleObj;\n\t\t\t\t\t\tevent.data = handleObj.data;\n\n\t\t\t\t\t\tret = ((jQuery.event.special[handleObj.origType] || {}).handle ||\n\t\t\t\t\t\t\thandleObj.handler).apply(matched.elem, args);\n\n\t\t\t\t\t\tif (ret !== undefined) {\n\t\t\t\t\t\t\tif ((event.result = ret) === false) {\n\t\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Call the postDispatch hook for the mapped type\n\t\t\tif (special.postDispatch) {\n\t\t\t\tspecial.postDispatch.call(this, event);\n\t\t\t}\n\n\t\t\treturn event.result;\n\t\t},\n\n\t\thandlers: function (event, handlers) {\n\t\t\tvar i, handleObj, sel, matchedHandlers, matchedSelectors,\n\t\t\t\thandlerQueue = [],\n\t\t\t\tdelegateCount = handlers.delegateCount,\n\t\t\t\tcur = event.target;\n\n\t\t\t// Find delegate handlers\n\t\t\tif (delegateCount &&\n\n\t\t\t\t// Support: IE <=9\n\t\t\t\t// Black-hole SVG <use> instance trees (trac-13180)\n\t\t\t\tcur.nodeType &&\n\n\t\t\t\t// Support: Firefox <=42\n\t\t\t\t// Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861)\n\t\t\t\t// https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click\n\t\t\t\t// Support: IE 11 only\n\t\t\t\t// ...but not arrow key \"clicks\" of radio inputs, which can have `button` -1 (gh-2343)\n\t\t\t\t!(event.type === \"click\" && event.button >= 1)) {\n\n\t\t\t\tfor (; cur !== this; cur = cur.parentNode || this) {\n\n\t\t\t\t\t// Don't check non-elements (trac-13208)\n\t\t\t\t\t// Don't process clicks on disabled elements (trac-6911, trac-8165, trac-11382, trac-11764)\n\t\t\t\t\tif (cur.nodeType === 1 && !(event.type === \"click\" && cur.disabled === true)) {\n\t\t\t\t\t\tmatchedHandlers = [];\n\t\t\t\t\t\tmatchedSelectors = {};\n\t\t\t\t\t\tfor (i = 0; i < delegateCount; i++) {\n\t\t\t\t\t\t\thandleObj = handlers[i];\n\n\t\t\t\t\t\t\t// Don't conflict with Object.prototype properties (trac-13203)\n\t\t\t\t\t\t\tsel = handleObj.selector + \" \";\n\n\t\t\t\t\t\t\tif (matchedSelectors[sel] === undefined) {\n\t\t\t\t\t\t\t\tmatchedSelectors[sel] = handleObj.needsContext ?\n\t\t\t\t\t\t\t\t\tjQuery(sel, this).index(cur) > -1 :\n\t\t\t\t\t\t\t\t\tjQuery.find(sel, this, null, [cur]).length;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (matchedSelectors[sel]) {\n\t\t\t\t\t\t\t\tmatchedHandlers.push(handleObj);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (matchedHandlers.length) {\n\t\t\t\t\t\t\thandlerQueue.push({ elem: cur, handlers: matchedHandlers });\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Add the remaining (directly-bound) handlers\n\t\t\tcur = this;\n\t\t\tif (delegateCount < handlers.length) {\n\t\t\t\thandlerQueue.push({ elem: cur, handlers: handlers.slice(delegateCount) });\n\t\t\t}\n\n\t\t\treturn handlerQueue;\n\t\t},\n\n\t\taddProp: function (name, hook) {\n\t\t\tObject.defineProperty(jQuery.Event.prototype, name, {\n\t\t\t\tenumerable: true,\n\t\t\t\tconfigurable: true,\n\n\t\t\t\tget: isFunction(hook) ?\n\t\t\t\t\tfunction () {\n\t\t\t\t\t\tif (this.originalEvent) {\n\t\t\t\t\t\t\treturn hook(this.originalEvent);\n\t\t\t\t\t\t}\n\t\t\t\t\t} :\n\t\t\t\t\tfunction () {\n\t\t\t\t\t\tif (this.originalEvent) {\n\t\t\t\t\t\t\treturn this.originalEvent[name];\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\n\t\t\t\tset: function (value) {\n\t\t\t\t\tObject.defineProperty(this, name, {\n\t\t\t\t\t\tenumerable: true,\n\t\t\t\t\t\tconfigurable: true,\n\t\t\t\t\t\twritable: true,\n\t\t\t\t\t\tvalue: value\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\tfix: function (originalEvent) {\n\t\t\treturn originalEvent[jQuery.expando] ?\n\t\t\t\toriginalEvent :\n\t\t\t\tnew jQuery.Event(originalEvent);\n\t\t},\n\n\t\tspecial: {\n\t\t\tload: {\n\n\t\t\t\t// Prevent triggered image.load events from bubbling to window.load\n\t\t\t\tnoBubble: true\n\t\t\t},\n\t\t\tclick: {\n\n\t\t\t\t// Utilize native event to ensure correct state for checkable inputs\n\t\t\t\tsetup: function (data) {\n\n\t\t\t\t\t// For mutual compressibility with _default, replace `this` access with a local var.\n\t\t\t\t\t// `|| data` is dead code meant only to preserve the variable through minification.\n\t\t\t\t\tvar el = this || data;\n\n\t\t\t\t\t// Claim the first handler\n\t\t\t\t\tif (rcheckableType.test(el.type) &&\n\t\t\t\t\t\tel.click && nodeName(el, \"input\")) {\n\n\t\t\t\t\t\t// dataPriv.set( el, \"click\", ... )\n\t\t\t\t\t\tleverageNative(el, \"click\", true);\n\t\t\t\t\t}\n\n\t\t\t\t\t// Return false to allow normal processing in the caller\n\t\t\t\t\treturn false;\n\t\t\t\t},\n\t\t\t\ttrigger: function (data) {\n\n\t\t\t\t\t// For mutual compressibility with _default, replace `this` access with a local var.\n\t\t\t\t\t// `|| data` is dead code meant only to preserve the variable through minification.\n\t\t\t\t\tvar el = this || data;\n\n\t\t\t\t\t// Force setup before triggering a click\n\t\t\t\t\tif (rcheckableType.test(el.type) &&\n\t\t\t\t\t\tel.click && nodeName(el, \"input\")) {\n\n\t\t\t\t\t\tleverageNative(el, \"click\");\n\t\t\t\t\t}\n\n\t\t\t\t\t// Return non-false to allow normal event-path propagation\n\t\t\t\t\treturn true;\n\t\t\t\t},\n\n\t\t\t\t// For cross-browser consistency, suppress native .click() on links\n\t\t\t\t// Also prevent it if we're currently inside a leveraged native-event stack\n\t\t\t\t_default: function (event) {\n\t\t\t\t\tvar target = event.target;\n\t\t\t\t\treturn rcheckableType.test(target.type) &&\n\t\t\t\t\t\ttarget.click && nodeName(target, \"input\") &&\n\t\t\t\t\t\tdataPriv.get(target, \"click\") ||\n\t\t\t\t\t\tnodeName(target, \"a\");\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tbeforeunload: {\n\t\t\t\tpostDispatch: function (event) {\n\n\t\t\t\t\t// Support: Firefox 20+\n\t\t\t\t\t// Firefox doesn't alert if the returnValue field is not set.\n\t\t\t\t\tif (event.result !== undefined && event.originalEvent) {\n\t\t\t\t\t\tevent.originalEvent.returnValue = event.result;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t// Ensure the presence of an event listener that handles manually-triggered\n\t// synthetic events by interrupting progress until reinvoked in response to\n\t// *native* events that it fires directly, ensuring that state changes have\n\t// already occurred before other listeners are invoked.\n\tfunction leverageNative(el, type, isSetup) {\n\n\t\t// Missing `isSetup` indicates a trigger call, which must force setup through jQuery.event.add\n\t\tif (!isSetup) {\n\t\t\tif (dataPriv.get(el, type) === undefined) {\n\t\t\t\tjQuery.event.add(el, type, returnTrue);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\t// Register the controller as a special universal handler for all event namespaces\n\t\tdataPriv.set(el, type, false);\n\t\tjQuery.event.add(el, type, {\n\t\t\tnamespace: false,\n\t\t\thandler: function (event) {\n\t\t\t\tvar result,\n\t\t\t\t\tsaved = dataPriv.get(this, type);\n\n\t\t\t\tif ((event.isTrigger & 1) && this[type]) {\n\n\t\t\t\t\t// Interrupt processing of the outer synthetic .trigger()ed event\n\t\t\t\t\tif (!saved) {\n\n\t\t\t\t\t\t// Store arguments for use when handling the inner native event\n\t\t\t\t\t\t// There will always be at least one argument (an event object), so this array\n\t\t\t\t\t\t// will not be confused with a leftover capture object.\n\t\t\t\t\t\tsaved = slice.call(arguments);\n\t\t\t\t\t\tdataPriv.set(this, type, saved);\n\n\t\t\t\t\t\t// Trigger the native event and capture its result\n\t\t\t\t\t\tthis[type]();\n\t\t\t\t\t\tresult = dataPriv.get(this, type);\n\t\t\t\t\t\tdataPriv.set(this, type, false);\n\n\t\t\t\t\t\tif (saved !== result) {\n\n\t\t\t\t\t\t\t// Cancel the outer synthetic event\n\t\t\t\t\t\t\tevent.stopImmediatePropagation();\n\t\t\t\t\t\t\tevent.preventDefault();\n\n\t\t\t\t\t\t\treturn result;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// If this is an inner synthetic event for an event with a bubbling surrogate\n\t\t\t\t\t\t// (focus or blur), assume that the surrogate already propagated from triggering\n\t\t\t\t\t\t// the native event and prevent that from happening again here.\n\t\t\t\t\t\t// This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the\n\t\t\t\t\t\t// bubbling surrogate propagates *after* the non-bubbling base), but that seems\n\t\t\t\t\t\t// less bad than duplication.\n\t\t\t\t\t} else if ((jQuery.event.special[type] || {}).delegateType) {\n\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t}\n\n\t\t\t\t\t// If this is a native event triggered above, everything is now in order\n\t\t\t\t\t// Fire an inner synthetic event with the original arguments\n\t\t\t\t} else if (saved) {\n\n\t\t\t\t\t// ...and capture the result\n\t\t\t\t\tdataPriv.set(this, type, jQuery.event.trigger(\n\t\t\t\t\t\tsaved[0],\n\t\t\t\t\t\tsaved.slice(1),\n\t\t\t\t\t\tthis\n\t\t\t\t\t));\n\n\t\t\t\t\t// Abort handling of the native event by all jQuery handlers while allowing\n\t\t\t\t\t// native handlers on the same element to run. On target, this is achieved\n\t\t\t\t\t// by stopping immediate propagation just on the jQuery event. However,\n\t\t\t\t\t// the native event is re-wrapped by a jQuery one on each level of the\n\t\t\t\t\t// propagation so the only way to stop it for jQuery is to stop it for\n\t\t\t\t\t// everyone via native `stopPropagation()`. This is not a problem for\n\t\t\t\t\t// focus/blur which don't bubble, but it does also stop click on checkboxes\n\t\t\t\t\t// and radios. We accept this limitation.\n\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\tevent.isImmediatePropagationStopped = returnTrue;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\tjQuery.removeEvent = function (elem, type, handle) {\n\n\t\t// This \"if\" is needed for plain objects\n\t\tif (elem.removeEventListener) {\n\t\t\telem.removeEventListener(type, handle);\n\t\t}\n\t};\n\n\tjQuery.Event = function (src, props) {\n\n\t\t// Allow instantiation without the 'new' keyword\n\t\tif (!(this instanceof jQuery.Event)) {\n\t\t\treturn new jQuery.Event(src, props);\n\t\t}\n\n\t\t// Event object\n\t\tif (src && src.type) {\n\t\t\tthis.originalEvent = src;\n\t\t\tthis.type = src.type;\n\n\t\t\t// Events bubbling up the document may have been marked as prevented\n\t\t\t// by a handler lower down the tree; reflect the correct value.\n\t\t\tthis.isDefaultPrevented = src.defaultPrevented ||\n\t\t\t\tsrc.defaultPrevented === undefined &&\n\n\t\t\t\t// Support: Android <=2.3 only\n\t\t\t\tsrc.returnValue === false ?\n\t\t\t\treturnTrue :\n\t\t\t\treturnFalse;\n\n\t\t\t// Create target properties\n\t\t\t// Support: Safari <=6 - 7 only\n\t\t\t// Target should not be a text node (trac-504, trac-13143)\n\t\t\tthis.target = (src.target && src.target.nodeType === 3) ?\n\t\t\t\tsrc.target.parentNode :\n\t\t\t\tsrc.target;\n\n\t\t\tthis.currentTarget = src.currentTarget;\n\t\t\tthis.relatedTarget = src.relatedTarget;\n\n\t\t\t// Event type\n\t\t} else {\n\t\t\tthis.type = src;\n\t\t}\n\n\t\t// Put explicitly provided properties onto the event object\n\t\tif (props) {\n\t\t\tjQuery.extend(this, props);\n\t\t}\n\n\t\t// Create a timestamp if incoming event doesn't have one\n\t\tthis.timeStamp = src && src.timeStamp || Date.now();\n\n\t\t// Mark it as fixed\n\t\tthis[jQuery.expando] = true;\n\t};\n\n\t// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding\n\t// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html\n\tjQuery.Event.prototype = {\n\t\tconstructor: jQuery.Event,\n\t\tisDefaultPrevented: returnFalse,\n\t\tisPropagationStopped: returnFalse,\n\t\tisImmediatePropagationStopped: returnFalse,\n\t\tisSimulated: false,\n\n\t\tpreventDefault: function () {\n\t\t\tvar e = this.originalEvent;\n\n\t\t\tthis.isDefaultPrevented = returnTrue;\n\n\t\t\tif (e && !this.isSimulated) {\n\t\t\t\te.preventDefault();\n\t\t\t}\n\t\t},\n\t\tstopPropagation: function () {\n\t\t\tvar e = this.originalEvent;\n\n\t\t\tthis.isPropagationStopped = returnTrue;\n\n\t\t\tif (e && !this.isSimulated) {\n\t\t\t\te.stopPropagation();\n\t\t\t}\n\t\t},\n\t\tstopImmediatePropagation: function () {\n\t\t\tvar e = this.originalEvent;\n\n\t\t\tthis.isImmediatePropagationStopped = returnTrue;\n\n\t\t\tif (e && !this.isSimulated) {\n\t\t\t\te.stopImmediatePropagation();\n\t\t\t}\n\n\t\t\tthis.stopPropagation();\n\t\t}\n\t};\n\n\t// Includes all common event props including KeyEvent and MouseEvent specific props\n\tjQuery.each({\n\t\taltKey: true,\n\t\tbubbles: true,\n\t\tcancelable: true,\n\t\tchangedTouches: true,\n\t\tctrlKey: true,\n\t\tdetail: true,\n\t\teventPhase: true,\n\t\tmetaKey: true,\n\t\tpageX: true,\n\t\tpageY: true,\n\t\tshiftKey: true,\n\t\tview: true,\n\t\t\"char\": true,\n\t\tcode: true,\n\t\tcharCode: true,\n\t\tkey: true,\n\t\tkeyCode: true,\n\t\tbutton: true,\n\t\tbuttons: true,\n\t\tclientX: true,\n\t\tclientY: true,\n\t\toffsetX: true,\n\t\toffsetY: true,\n\t\tpointerId: true,\n\t\tpointerType: true,\n\t\tscreenX: true,\n\t\tscreenY: true,\n\t\ttargetTouches: true,\n\t\ttoElement: true,\n\t\ttouches: true,\n\t\twhich: true\n\t}, jQuery.event.addProp);\n\n\tjQuery.each({ focus: \"focusin\", blur: \"focusout\" }, function (type, delegateType) {\n\n\t\tfunction focusMappedHandler(nativeEvent) {\n\t\t\tif (document.documentMode) {\n\n\t\t\t\t// Support: IE 11+\n\t\t\t\t// Attach a single focusin/focusout handler on the document while someone wants\n\t\t\t\t// focus/blur. This is because the former are synchronous in IE while the latter\n\t\t\t\t// are async. In other browsers, all those handlers are invoked synchronously.\n\n\t\t\t\t// `handle` from private data would already wrap the event, but we need\n\t\t\t\t// to change the `type` here.\n\t\t\t\tvar handle = dataPriv.get(this, \"handle\"),\n\t\t\t\t\tevent = jQuery.event.fix(nativeEvent);\n\t\t\t\tevent.type = nativeEvent.type === \"focusin\" ? \"focus\" : \"blur\";\n\t\t\t\tevent.isSimulated = true;\n\n\t\t\t\t// First, handle focusin/focusout\n\t\t\t\thandle(nativeEvent);\n\n\t\t\t\t// ...then, handle focus/blur\n\t\t\t\t//\n\t\t\t\t// focus/blur don't bubble while focusin/focusout do; simulate the former by only\n\t\t\t\t// invoking the handler at the lower level.\n\t\t\t\tif (event.target === event.currentTarget) {\n\n\t\t\t\t\t// The setup part calls `leverageNative`, which, in turn, calls\n\t\t\t\t\t// `jQuery.event.add`, so event handle will already have been set\n\t\t\t\t\t// by this point.\n\t\t\t\t\thandle(event);\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\t// For non-IE browsers, attach a single capturing handler on the document\n\t\t\t\t// while someone wants focusin/focusout.\n\t\t\t\tjQuery.event.simulate(delegateType, nativeEvent.target,\n\t\t\t\t\tjQuery.event.fix(nativeEvent));\n\t\t\t}\n\t\t}\n\n\t\tjQuery.event.special[type] = {\n\n\t\t\t// Utilize native event if possible so blur/focus sequence is correct\n\t\t\tsetup: function () {\n\n\t\t\t\tvar attaches;\n\n\t\t\t\t// Claim the first handler\n\t\t\t\t// dataPriv.set( this, \"focus\", ... )\n\t\t\t\t// dataPriv.set( this, \"blur\", ... )\n\t\t\t\tleverageNative(this, type, true);\n\n\t\t\t\tif (document.documentMode) {\n\n\t\t\t\t\t// Support: IE 9 - 11+\n\t\t\t\t\t// We use the same native handler for focusin & focus (and focusout & blur)\n\t\t\t\t\t// so we need to coordinate setup & teardown parts between those events.\n\t\t\t\t\t// Use `delegateType` as the key as `type` is already used by `leverageNative`.\n\t\t\t\t\tattaches = dataPriv.get(this, delegateType);\n\t\t\t\t\tif (!attaches) {\n\t\t\t\t\t\tthis.addEventListener(delegateType, focusMappedHandler);\n\t\t\t\t\t}\n\t\t\t\t\tdataPriv.set(this, delegateType, (attaches || 0) + 1);\n\t\t\t\t} else {\n\n\t\t\t\t\t// Return false to allow normal processing in the caller\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\t\t\ttrigger: function () {\n\n\t\t\t\t// Force setup before trigger\n\t\t\t\tleverageNative(this, type);\n\n\t\t\t\t// Return non-false to allow normal event-path propagation\n\t\t\t\treturn true;\n\t\t\t},\n\n\t\t\tteardown: function () {\n\t\t\t\tvar attaches;\n\n\t\t\t\tif (document.documentMode) {\n\t\t\t\t\tattaches = dataPriv.get(this, delegateType) - 1;\n\t\t\t\t\tif (!attaches) {\n\t\t\t\t\t\tthis.removeEventListener(delegateType, focusMappedHandler);\n\t\t\t\t\t\tdataPriv.remove(this, delegateType);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdataPriv.set(this, delegateType, attaches);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\n\t\t\t\t\t// Return false to indicate standard teardown should be applied\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// Suppress native focus or blur if we're currently inside\n\t\t\t// a leveraged native-event stack\n\t\t\t_default: function (event) {\n\t\t\t\treturn dataPriv.get(event.target, type);\n\t\t\t},\n\n\t\t\tdelegateType: delegateType\n\t\t};\n\n\t\t// Support: Firefox <=44\n\t\t// Firefox doesn't have focus(in | out) events\n\t\t// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787\n\t\t//\n\t\t// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1\n\t\t// focus(in | out) events fire after focus & blur events,\n\t\t// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order\n\t\t// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857\n\t\t//\n\t\t// Support: IE 9 - 11+\n\t\t// To preserve relative focusin/focus & focusout/blur event order guaranteed on the 3.x branch,\n\t\t// attach a single handler for both events in IE.\n\t\tjQuery.event.special[delegateType] = {\n\t\t\tsetup: function () {\n\n\t\t\t\t// Handle: regular nodes (via `this.ownerDocument`), window\n\t\t\t\t// (via `this.document`) & document (via `this`).\n\t\t\t\tvar doc = this.ownerDocument || this.document || this,\n\t\t\t\t\tdataHolder = document.documentMode ? this : doc,\n\t\t\t\t\tattaches = dataPriv.get(dataHolder, delegateType);\n\n\t\t\t\t// Support: IE 9 - 11+\n\t\t\t\t// We use the same native handler for focusin & focus (and focusout & blur)\n\t\t\t\t// so we need to coordinate setup & teardown parts between those events.\n\t\t\t\t// Use `delegateType` as the key as `type` is already used by `leverageNative`.\n\t\t\t\tif (!attaches) {\n\t\t\t\t\tif (document.documentMode) {\n\t\t\t\t\t\tthis.addEventListener(delegateType, focusMappedHandler);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdoc.addEventListener(type, focusMappedHandler, true);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tdataPriv.set(dataHolder, delegateType, (attaches || 0) + 1);\n\t\t\t},\n\t\t\tteardown: function () {\n\t\t\t\tvar doc = this.ownerDocument || this.document || this,\n\t\t\t\t\tdataHolder = document.documentMode ? this : doc,\n\t\t\t\t\tattaches = dataPriv.get(dataHolder, delegateType) - 1;\n\n\t\t\t\tif (!attaches) {\n\t\t\t\t\tif (document.documentMode) {\n\t\t\t\t\t\tthis.removeEventListener(delegateType, focusMappedHandler);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdoc.removeEventListener(type, focusMappedHandler, true);\n\t\t\t\t\t}\n\t\t\t\t\tdataPriv.remove(dataHolder, delegateType);\n\t\t\t\t} else {\n\t\t\t\t\tdataPriv.set(dataHolder, delegateType, attaches);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t});\n\n\t// Create mouseenter/leave events using mouseover/out and event-time checks\n\t// so that event delegation works in jQuery.\n\t// Do the same for pointerenter/pointerleave and pointerover/pointerout\n\t//\n\t// Support: Safari 7 only\n\t// Safari sends mouseenter too often; see:\n\t// https://bugs.chromium.org/p/chromium/issues/detail?id=470258\n\t// for the description of the bug (it existed in older Chrome versions as well).\n\tjQuery.each({\n\t\tmouseenter: \"mouseover\",\n\t\tmouseleave: \"mouseout\",\n\t\tpointerenter: \"pointerover\",\n\t\tpointerleave: \"pointerout\"\n\t}, function (orig, fix) {\n\t\tjQuery.event.special[orig] = {\n\t\t\tdelegateType: fix,\n\t\t\tbindType: fix,\n\n\t\t\thandle: function (event) {\n\t\t\t\tvar ret,\n\t\t\t\t\ttarget = this,\n\t\t\t\t\trelated = event.relatedTarget,\n\t\t\t\t\thandleObj = event.handleObj;\n\n\t\t\t\t// For mouseenter/leave call the handler if related is outside the target.\n\t\t\t\t// NB: No relatedTarget if the mouse left/entered the browser window\n\t\t\t\tif (!related || (related !== target && !jQuery.contains(target, related))) {\n\t\t\t\t\tevent.type = handleObj.origType;\n\t\t\t\t\tret = handleObj.handler.apply(this, arguments);\n\t\t\t\t\tevent.type = fix;\n\t\t\t\t}\n\t\t\t\treturn ret;\n\t\t\t}\n\t\t};\n\t});\n\n\tjQuery.fn.extend({\n\n\t\ton: function (types, selector, data, fn) {\n\t\t\treturn on(this, types, selector, data, fn);\n\t\t},\n\t\tone: function (types, selector, data, fn) {\n\t\t\treturn on(this, types, selector, data, fn, 1);\n\t\t},\n\t\toff: function (types, selector, fn) {\n\t\t\tvar handleObj, type;\n\t\t\tif (types && types.preventDefault && types.handleObj) {\n\n\t\t\t\t// ( event )  dispatched jQuery.Event\n\t\t\t\thandleObj = types.handleObj;\n\t\t\t\tjQuery(types.delegateTarget).off(\n\t\t\t\t\thandleObj.namespace ?\n\t\t\t\t\t\thandleObj.origType + \".\" + handleObj.namespace :\n\t\t\t\t\t\thandleObj.origType,\n\t\t\t\t\thandleObj.selector,\n\t\t\t\t\thandleObj.handler\n\t\t\t\t);\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\tif (typeof types === \"object\") {\n\n\t\t\t\t// ( types-object [, selector] )\n\t\t\t\tfor (type in types) {\n\t\t\t\t\tthis.off(type, selector, types[type]);\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\tif (selector === false || typeof selector === \"function\") {\n\n\t\t\t\t// ( types [, fn] )\n\t\t\t\tfn = selector;\n\t\t\t\tselector = undefined;\n\t\t\t}\n\t\t\tif (fn === false) {\n\t\t\t\tfn = returnFalse;\n\t\t\t}\n\t\t\treturn this.each(function () {\n\t\t\t\tjQuery.event.remove(this, types, fn, selector);\n\t\t\t});\n\t\t}\n\t});\n\n\n\tvar\n\n\t\t// Support: IE <=10 - 11, Edge 12 - 13 only\n\t\t// In IE/Edge using regex groups here causes severe slowdowns.\n\t\t// See https://connect.microsoft.com/IE/feedback/details/1736512/\n\t\trnoInnerhtml = /<script|<style|<link/i,\n\n\t\t// checked=\"checked\" or checked\n\t\trchecked = /checked\\s*(?:[^=]|=\\s*.checked.)/i,\n\n\t\trcleanScript = /^\\s*<!\\[CDATA\\[|\\]\\]>\\s*$/g;\n\n\t// Prefer a tbody over its parent table for containing new rows\n\tfunction manipulationTarget(elem, content) {\n\t\tif (nodeName(elem, \"table\") &&\n\t\t\tnodeName(content.nodeType !== 11 ? content : content.firstChild, \"tr\")) {\n\n\t\t\treturn jQuery(elem).children(\"tbody\")[0] || elem;\n\t\t}\n\n\t\treturn elem;\n\t}\n\n\t// Replace/restore the type attribute of script elements for safe DOM manipulation\n\tfunction disableScript(elem) {\n\t\telem.type = (elem.getAttribute(\"type\") !== null) + \"/\" + elem.type;\n\t\treturn elem;\n\t}\n\tfunction restoreScript(elem) {\n\t\tif ((elem.type || \"\").slice(0, 5) === \"true/\") {\n\t\t\telem.type = elem.type.slice(5);\n\t\t} else {\n\t\t\telem.removeAttribute(\"type\");\n\t\t}\n\n\t\treturn elem;\n\t}\n\n\tfunction cloneCopyEvent(src, dest) {\n\t\tvar i, l, type, pdataOld, udataOld, udataCur, events;\n\n\t\tif (dest.nodeType !== 1) {\n\t\t\treturn;\n\t\t}\n\n\t\t// 1. Copy private data: events, handlers, etc.\n\t\tif (dataPriv.hasData(src)) {\n\t\t\tpdataOld = dataPriv.get(src);\n\t\t\tevents = pdataOld.events;\n\n\t\t\tif (events) {\n\t\t\t\tdataPriv.remove(dest, \"handle events\");\n\n\t\t\t\tfor (type in events) {\n\t\t\t\t\tfor (i = 0, l = events[type].length; i < l; i++) {\n\t\t\t\t\t\tjQuery.event.add(dest, type, events[type][i]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// 2. Copy user data\n\t\tif (dataUser.hasData(src)) {\n\t\t\tudataOld = dataUser.access(src);\n\t\t\tudataCur = jQuery.extend({}, udataOld);\n\n\t\t\tdataUser.set(dest, udataCur);\n\t\t}\n\t}\n\n\t// Fix IE bugs, see support tests\n\tfunction fixInput(src, dest) {\n\t\tvar nodeName = dest.nodeName.toLowerCase();\n\n\t\t// Fails to persist the checked state of a cloned checkbox or radio button.\n\t\tif (nodeName === \"input\" && rcheckableType.test(src.type)) {\n\t\t\tdest.checked = src.checked;\n\n\t\t\t// Fails to return the selected option to the default selected state when cloning options\n\t\t} else if (nodeName === \"input\" || nodeName === \"textarea\") {\n\t\t\tdest.defaultValue = src.defaultValue;\n\t\t}\n\t}\n\n\tfunction domManip(collection, args, callback, ignored) {\n\n\t\t// Flatten any nested arrays\n\t\targs = flat(args);\n\n\t\tvar fragment, first, scripts, hasScripts, node, doc,\n\t\t\ti = 0,\n\t\t\tl = collection.length,\n\t\t\tiNoClone = l - 1,\n\t\t\tvalue = args[0],\n\t\t\tvalueIsFunction = isFunction(value);\n\n\t\t// We can't cloneNode fragments that contain checked, in WebKit\n\t\tif (valueIsFunction ||\n\t\t\t(l > 1 && typeof value === \"string\" &&\n\t\t\t\t!support.checkClone && rchecked.test(value))) {\n\t\t\treturn collection.each(function (index) {\n\t\t\t\tvar self = collection.eq(index);\n\t\t\t\tif (valueIsFunction) {\n\t\t\t\t\targs[0] = value.call(this, index, self.html());\n\t\t\t\t}\n\t\t\t\tdomManip(self, args, callback, ignored);\n\t\t\t});\n\t\t}\n\n\t\tif (l) {\n\t\t\tfragment = buildFragment(args, collection[0].ownerDocument, false, collection, ignored);\n\t\t\tfirst = fragment.firstChild;\n\n\t\t\tif (fragment.childNodes.length === 1) {\n\t\t\t\tfragment = first;\n\t\t\t}\n\n\t\t\t// Require either new content or an interest in ignored elements to invoke the callback\n\t\t\tif (first || ignored) {\n\t\t\t\tscripts = jQuery.map(getAll(fragment, \"script\"), disableScript);\n\t\t\t\thasScripts = scripts.length;\n\n\t\t\t\t// Use the original fragment for the last item\n\t\t\t\t// instead of the first because it can end up\n\t\t\t\t// being emptied incorrectly in certain situations (trac-8070).\n\t\t\t\tfor (; i < l; i++) {\n\t\t\t\t\tnode = fragment;\n\n\t\t\t\t\tif (i !== iNoClone) {\n\t\t\t\t\t\tnode = jQuery.clone(node, true, true);\n\n\t\t\t\t\t\t// Keep references to cloned scripts for later restoration\n\t\t\t\t\t\tif (hasScripts) {\n\n\t\t\t\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\t\t\t\tjQuery.merge(scripts, getAll(node, \"script\"));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tcallback.call(collection[i], node, i);\n\t\t\t\t}\n\n\t\t\t\tif (hasScripts) {\n\t\t\t\t\tdoc = scripts[scripts.length - 1].ownerDocument;\n\n\t\t\t\t\t// Reenable scripts\n\t\t\t\t\tjQuery.map(scripts, restoreScript);\n\n\t\t\t\t\t// Evaluate executable scripts on first document insertion\n\t\t\t\t\tfor (i = 0; i < hasScripts; i++) {\n\t\t\t\t\t\tnode = scripts[i];\n\t\t\t\t\t\tif (rscriptType.test(node.type || \"\") &&\n\t\t\t\t\t\t\t!dataPriv.access(node, \"globalEval\") &&\n\t\t\t\t\t\t\tjQuery.contains(doc, node)) {\n\n\t\t\t\t\t\t\tif (node.src && (node.type || \"\").toLowerCase() !== \"module\") {\n\n\t\t\t\t\t\t\t\t// Optional AJAX dependency, but won't run scripts if not present\n\t\t\t\t\t\t\t\tif (jQuery._evalUrl && !node.noModule) {\n\t\t\t\t\t\t\t\t\tjQuery._evalUrl(node.src, {\n\t\t\t\t\t\t\t\t\t\tnonce: node.nonce || node.getAttribute(\"nonce\")\n\t\t\t\t\t\t\t\t\t}, doc);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t// Unwrap a CDATA section containing script contents. This shouldn't be\n\t\t\t\t\t\t\t\t// needed as in XML documents they're already not visible when\n\t\t\t\t\t\t\t\t// inspecting element contents and in HTML documents they have no\n\t\t\t\t\t\t\t\t// meaning but we're preserving that logic for backwards compatibility.\n\t\t\t\t\t\t\t\t// This will be removed completely in 4.0. See gh-4904.\n\t\t\t\t\t\t\t\tDOMEval(node.textContent.replace(rcleanScript, \"\"), node, doc);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn collection;\n\t}\n\n\tfunction remove(elem, selector, keepData) {\n\t\tvar node,\n\t\t\tnodes = selector ? jQuery.filter(selector, elem) : elem,\n\t\t\ti = 0;\n\n\t\tfor (; (node = nodes[i]) != null; i++) {\n\t\t\tif (!keepData && node.nodeType === 1) {\n\t\t\t\tjQuery.cleanData(getAll(node));\n\t\t\t}\n\n\t\t\tif (node.parentNode) {\n\t\t\t\tif (keepData && isAttached(node)) {\n\t\t\t\t\tsetGlobalEval(getAll(node, \"script\"));\n\t\t\t\t}\n\t\t\t\tnode.parentNode.removeChild(node);\n\t\t\t}\n\t\t}\n\n\t\treturn elem;\n\t}\n\n\tjQuery.extend({\n\t\thtmlPrefilter: function (html) {\n\t\t\treturn html;\n\t\t},\n\n\t\tclone: function (elem, dataAndEvents, deepDataAndEvents) {\n\t\t\tvar i, l, srcElements, destElements,\n\t\t\t\tclone = elem.cloneNode(true),\n\t\t\t\tinPage = isAttached(elem);\n\n\t\t\t// Fix IE cloning issues\n\t\t\tif (!support.noCloneChecked && (elem.nodeType === 1 || elem.nodeType === 11) &&\n\t\t\t\t!jQuery.isXMLDoc(elem)) {\n\n\t\t\t\t// We eschew jQuery#find here for performance reasons:\n\t\t\t\t// https://jsperf.com/getall-vs-sizzle/2\n\t\t\t\tdestElements = getAll(clone);\n\t\t\t\tsrcElements = getAll(elem);\n\n\t\t\t\tfor (i = 0, l = srcElements.length; i < l; i++) {\n\t\t\t\t\tfixInput(srcElements[i], destElements[i]);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Copy the events from the original to the clone\n\t\t\tif (dataAndEvents) {\n\t\t\t\tif (deepDataAndEvents) {\n\t\t\t\t\tsrcElements = srcElements || getAll(elem);\n\t\t\t\t\tdestElements = destElements || getAll(clone);\n\n\t\t\t\t\tfor (i = 0, l = srcElements.length; i < l; i++) {\n\t\t\t\t\t\tcloneCopyEvent(srcElements[i], destElements[i]);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tcloneCopyEvent(elem, clone);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Preserve script evaluation history\n\t\t\tdestElements = getAll(clone, \"script\");\n\t\t\tif (destElements.length > 0) {\n\t\t\t\tsetGlobalEval(destElements, !inPage && getAll(elem, \"script\"));\n\t\t\t}\n\n\t\t\t// Return the cloned set\n\t\t\treturn clone;\n\t\t},\n\n\t\tcleanData: function (elems) {\n\t\t\tvar data, elem, type,\n\t\t\t\tspecial = jQuery.event.special,\n\t\t\t\ti = 0;\n\n\t\t\tfor (; (elem = elems[i]) !== undefined; i++) {\n\t\t\t\tif (acceptData(elem)) {\n\t\t\t\t\tif ((data = elem[dataPriv.expando])) {\n\t\t\t\t\t\tif (data.events) {\n\t\t\t\t\t\t\tfor (type in data.events) {\n\t\t\t\t\t\t\t\tif (special[type]) {\n\t\t\t\t\t\t\t\t\tjQuery.event.remove(elem, type);\n\n\t\t\t\t\t\t\t\t\t// This is a shortcut to avoid jQuery.event.remove's overhead\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tjQuery.removeEvent(elem, type, data.handle);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\t\telem[dataPriv.expando] = undefined;\n\t\t\t\t\t}\n\t\t\t\t\tif (elem[dataUser.expando]) {\n\n\t\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\t\telem[dataUser.expando] = undefined;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\n\tjQuery.fn.extend({\n\t\tdetach: function (selector) {\n\t\t\treturn remove(this, selector, true);\n\t\t},\n\n\t\tremove: function (selector) {\n\t\t\treturn remove(this, selector);\n\t\t},\n\n\t\ttext: function (value) {\n\t\t\treturn access(this, function (value) {\n\t\t\t\treturn value === undefined ?\n\t\t\t\t\tjQuery.text(this) :\n\t\t\t\t\tthis.empty().each(function () {\n\t\t\t\t\t\tif (this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9) {\n\t\t\t\t\t\t\tthis.textContent = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t}, null, value, arguments.length);\n\t\t},\n\n\t\tappend: function () {\n\t\t\treturn domManip(this, arguments, function (elem) {\n\t\t\t\tif (this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9) {\n\t\t\t\t\tvar target = manipulationTarget(this, elem);\n\t\t\t\t\ttarget.appendChild(elem);\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\tprepend: function () {\n\t\t\treturn domManip(this, arguments, function (elem) {\n\t\t\t\tif (this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9) {\n\t\t\t\t\tvar target = manipulationTarget(this, elem);\n\t\t\t\t\ttarget.insertBefore(elem, target.firstChild);\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\tbefore: function () {\n\t\t\treturn domManip(this, arguments, function (elem) {\n\t\t\t\tif (this.parentNode) {\n\t\t\t\t\tthis.parentNode.insertBefore(elem, this);\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\tafter: function () {\n\t\t\treturn domManip(this, arguments, function (elem) {\n\t\t\t\tif (this.parentNode) {\n\t\t\t\t\tthis.parentNode.insertBefore(elem, this.nextSibling);\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\tempty: function () {\n\t\t\tvar elem,\n\t\t\t\ti = 0;\n\n\t\t\tfor (; (elem = this[i]) != null; i++) {\n\t\t\t\tif (elem.nodeType === 1) {\n\n\t\t\t\t\t// Prevent memory leaks\n\t\t\t\t\tjQuery.cleanData(getAll(elem, false));\n\n\t\t\t\t\t// Remove any remaining nodes\n\t\t\t\t\telem.textContent = \"\";\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn this;\n\t\t},\n\n\t\tclone: function (dataAndEvents, deepDataAndEvents) {\n\t\t\tdataAndEvents = dataAndEvents == null ? false : dataAndEvents;\n\t\t\tdeepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;\n\n\t\t\treturn this.map(function () {\n\t\t\t\treturn jQuery.clone(this, dataAndEvents, deepDataAndEvents);\n\t\t\t});\n\t\t},\n\n\t\thtml: function (value) {\n\t\t\treturn access(this, function (value) {\n\t\t\t\tvar elem = this[0] || {},\n\t\t\t\t\ti = 0,\n\t\t\t\t\tl = this.length;\n\n\t\t\t\tif (value === undefined && elem.nodeType === 1) {\n\t\t\t\t\treturn elem.innerHTML;\n\t\t\t\t}\n\n\t\t\t\t// See if we can take a shortcut and just use innerHTML\n\t\t\t\tif (typeof value === \"string\" && !rnoInnerhtml.test(value) &&\n\t\t\t\t\t!wrapMap[(rtagName.exec(value) || [\"\", \"\"])[1].toLowerCase()]) {\n\n\t\t\t\t\tvalue = jQuery.htmlPrefilter(value);\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tfor (; i < l; i++) {\n\t\t\t\t\t\t\telem = this[i] || {};\n\n\t\t\t\t\t\t\t// Remove element nodes and prevent memory leaks\n\t\t\t\t\t\t\tif (elem.nodeType === 1) {\n\t\t\t\t\t\t\t\tjQuery.cleanData(getAll(elem, false));\n\t\t\t\t\t\t\t\telem.innerHTML = value;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\telem = 0;\n\n\t\t\t\t\t\t// If using innerHTML throws an exception, use the fallback method\n\t\t\t\t\t} catch (e) { }\n\t\t\t\t}\n\n\t\t\t\tif (elem) {\n\t\t\t\t\tthis.empty().append(value);\n\t\t\t\t}\n\t\t\t}, null, value, arguments.length);\n\t\t},\n\n\t\treplaceWith: function () {\n\t\t\tvar ignored = [];\n\n\t\t\t// Make the changes, replacing each non-ignored context element with the new content\n\t\t\treturn domManip(this, arguments, function (elem) {\n\t\t\t\tvar parent = this.parentNode;\n\n\t\t\t\tif (jQuery.inArray(this, ignored) < 0) {\n\t\t\t\t\tjQuery.cleanData(getAll(this));\n\t\t\t\t\tif (parent) {\n\t\t\t\t\t\tparent.replaceChild(elem, this);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Force callback invocation\n\t\t\t}, ignored);\n\t\t}\n\t});\n\n\tjQuery.each({\n\t\tappendTo: \"append\",\n\t\tprependTo: \"prepend\",\n\t\tinsertBefore: \"before\",\n\t\tinsertAfter: \"after\",\n\t\treplaceAll: \"replaceWith\"\n\t}, function (name, original) {\n\t\tjQuery.fn[name] = function (selector) {\n\t\t\tvar elems,\n\t\t\t\tret = [],\n\t\t\t\tinsert = jQuery(selector),\n\t\t\t\tlast = insert.length - 1,\n\t\t\t\ti = 0;\n\n\t\t\tfor (; i <= last; i++) {\n\t\t\t\telems = i === last ? this : this.clone(true);\n\t\t\t\tjQuery(insert[i])[original](elems);\n\n\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t// .get() because push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\tpush.apply(ret, elems.get());\n\t\t\t}\n\n\t\t\treturn this.pushStack(ret);\n\t\t};\n\t});\n\tvar rnumnonpx = new RegExp(\"^(\" + pnum + \")(?!px)[a-z%]+$\", \"i\");\n\n\tvar rcustomProp = /^--/;\n\n\n\tvar getStyles = function (elem) {\n\n\t\t// Support: IE <=11 only, Firefox <=30 (trac-15098, trac-14150)\n\t\t// IE throws on elements created in popups\n\t\t// FF meanwhile throws on frame elements through \"defaultView.getComputedStyle\"\n\t\tvar view = elem.ownerDocument.defaultView;\n\n\t\tif (!view || !view.opener) {\n\t\t\tview = window;\n\t\t}\n\n\t\treturn view.getComputedStyle(elem);\n\t};\n\n\tvar swap = function (elem, options, callback) {\n\t\tvar ret, name,\n\t\t\told = {};\n\n\t\t// Remember the old values, and insert the new ones\n\t\tfor (name in options) {\n\t\t\told[name] = elem.style[name];\n\t\t\telem.style[name] = options[name];\n\t\t}\n\n\t\tret = callback.call(elem);\n\n\t\t// Revert the old values\n\t\tfor (name in options) {\n\t\t\telem.style[name] = old[name];\n\t\t}\n\n\t\treturn ret;\n\t};\n\n\n\tvar rboxStyle = new RegExp(cssExpand.join(\"|\"), \"i\");\n\n\n\n\t(function () {\n\n\t\t// Executing both pixelPosition & boxSizingReliable tests require only one layout\n\t\t// so they're executed at the same time to save the second computation.\n\t\tfunction computeStyleTests() {\n\n\t\t\t// This is a singleton, we need to execute it only once\n\t\t\tif (!div) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tcontainer.style.cssText = \"position:absolute;left:-11111px;width:60px;\" +\n\t\t\t\t\"margin-top:1px;padding:0;border:0\";\n\t\t\tdiv.style.cssText =\n\t\t\t\t\"position:relative;display:block;box-sizing:border-box;overflow:scroll;\" +\n\t\t\t\t\"margin:auto;border:1px;padding:1px;\" +\n\t\t\t\t\"width:60%;top:1%\";\n\t\t\tdocumentElement.appendChild(container).appendChild(div);\n\n\t\t\tvar divStyle = window.getComputedStyle(div);\n\t\t\tpixelPositionVal = divStyle.top !== \"1%\";\n\n\t\t\t// Support: Android 4.0 - 4.3 only, Firefox <=3 - 44\n\t\t\treliableMarginLeftVal = roundPixelMeasures(divStyle.marginLeft) === 12;\n\n\t\t\t// Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3\n\t\t\t// Some styles come back with percentage values, even though they shouldn't\n\t\t\tdiv.style.right = \"60%\";\n\t\t\tpixelBoxStylesVal = roundPixelMeasures(divStyle.right) === 36;\n\n\t\t\t// Support: IE 9 - 11 only\n\t\t\t// Detect misreporting of content dimensions for box-sizing:border-box elements\n\t\t\tboxSizingReliableVal = roundPixelMeasures(divStyle.width) === 36;\n\n\t\t\t// Support: IE 9 only\n\t\t\t// Detect overflow:scroll screwiness (gh-3699)\n\t\t\t// Support: Chrome <=64\n\t\t\t// Don't get tricked when zoom affects offsetWidth (gh-4029)\n\t\t\tdiv.style.position = \"absolute\";\n\t\t\tscrollboxSizeVal = roundPixelMeasures(div.offsetWidth / 3) === 12;\n\n\t\t\tdocumentElement.removeChild(container);\n\n\t\t\t// Nullify the div so it wouldn't be stored in the memory and\n\t\t\t// it will also be a sign that checks already performed\n\t\t\tdiv = null;\n\t\t}\n\n\t\tfunction roundPixelMeasures(measure) {\n\t\t\treturn Math.round(parseFloat(measure));\n\t\t}\n\n\t\tvar pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal,\n\t\t\treliableTrDimensionsVal, reliableMarginLeftVal,\n\t\t\tcontainer = document.createElement(\"div\"),\n\t\t\tdiv = document.createElement(\"div\");\n\n\t\t// Finish early in limited (non-browser) environments\n\t\tif (!div.style) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Support: IE <=9 - 11 only\n\t\t// Style of cloned element affects source element cloned (trac-8908)\n\t\tdiv.style.backgroundClip = \"content-box\";\n\t\tdiv.cloneNode(true).style.backgroundClip = \"\";\n\t\tsupport.clearCloneStyle = div.style.backgroundClip === \"content-box\";\n\n\t\tjQuery.extend(support, {\n\t\t\tboxSizingReliable: function () {\n\t\t\t\tcomputeStyleTests();\n\t\t\t\treturn boxSizingReliableVal;\n\t\t\t},\n\t\t\tpixelBoxStyles: function () {\n\t\t\t\tcomputeStyleTests();\n\t\t\t\treturn pixelBoxStylesVal;\n\t\t\t},\n\t\t\tpixelPosition: function () {\n\t\t\t\tcomputeStyleTests();\n\t\t\t\treturn pixelPositionVal;\n\t\t\t},\n\t\t\treliableMarginLeft: function () {\n\t\t\t\tcomputeStyleTests();\n\t\t\t\treturn reliableMarginLeftVal;\n\t\t\t},\n\t\t\tscrollboxSize: function () {\n\t\t\t\tcomputeStyleTests();\n\t\t\t\treturn scrollboxSizeVal;\n\t\t\t},\n\n\t\t\t// Support: IE 9 - 11+, Edge 15 - 18+\n\t\t\t// IE/Edge misreport `getComputedStyle` of table rows with width/height\n\t\t\t// set in CSS while `offset*` properties report correct values.\n\t\t\t// Behavior in IE 9 is more subtle than in newer versions & it passes\n\t\t\t// some versions of this test; make sure not to make it pass there!\n\t\t\t//\n\t\t\t// Support: Firefox 70+\n\t\t\t// Only Firefox includes border widths\n\t\t\t// in computed dimensions. (gh-4529)\n\t\t\treliableTrDimensions: function () {\n\t\t\t\tvar table, tr, trChild, trStyle;\n\t\t\t\tif (reliableTrDimensionsVal == null) {\n\t\t\t\t\ttable = document.createElement(\"table\");\n\t\t\t\t\ttr = document.createElement(\"tr\");\n\t\t\t\t\ttrChild = document.createElement(\"div\");\n\n\t\t\t\t\ttable.style.cssText = \"position:absolute;left:-11111px;border-collapse:separate\";\n\t\t\t\t\ttr.style.cssText = \"border:1px solid\";\n\n\t\t\t\t\t// Support: Chrome 86+\n\t\t\t\t\t// Height set through cssText does not get applied.\n\t\t\t\t\t// Computed height then comes back as 0.\n\t\t\t\t\ttr.style.height = \"1px\";\n\t\t\t\t\ttrChild.style.height = \"9px\";\n\n\t\t\t\t\t// Support: Android 8 Chrome 86+\n\t\t\t\t\t// In our bodyBackground.html iframe,\n\t\t\t\t\t// display for all div elements is set to \"inline\",\n\t\t\t\t\t// which causes a problem only in Android 8 Chrome 86.\n\t\t\t\t\t// Ensuring the div is display: block\n\t\t\t\t\t// gets around this issue.\n\t\t\t\t\ttrChild.style.display = \"block\";\n\n\t\t\t\t\tdocumentElement\n\t\t\t\t\t\t.appendChild(table)\n\t\t\t\t\t\t.appendChild(tr)\n\t\t\t\t\t\t.appendChild(trChild);\n\n\t\t\t\t\ttrStyle = window.getComputedStyle(tr);\n\t\t\t\t\treliableTrDimensionsVal = (parseInt(trStyle.height, 10) +\n\t\t\t\t\t\tparseInt(trStyle.borderTopWidth, 10) +\n\t\t\t\t\t\tparseInt(trStyle.borderBottomWidth, 10)) === tr.offsetHeight;\n\n\t\t\t\t\tdocumentElement.removeChild(table);\n\t\t\t\t}\n\t\t\t\treturn reliableTrDimensionsVal;\n\t\t\t}\n\t\t});\n\t})();\n\n\n\tfunction curCSS(elem, name, computed) {\n\t\tvar width, minWidth, maxWidth, ret,\n\t\t\tisCustomProp = rcustomProp.test(name),\n\n\t\t\t// Support: Firefox 51+\n\t\t\t// Retrieving style before computed somehow\n\t\t\t// fixes an issue with getting wrong values\n\t\t\t// on detached elements\n\t\t\tstyle = elem.style;\n\n\t\tcomputed = computed || getStyles(elem);\n\n\t\t// getPropertyValue is needed for:\n\t\t//   .css('filter') (IE 9 only, trac-12537)\n\t\t//   .css('--customProperty) (gh-3144)\n\t\tif (computed) {\n\n\t\t\t// Support: IE <=9 - 11+\n\t\t\t// IE only supports `\"float\"` in `getPropertyValue`; in computed styles\n\t\t\t// it's only available as `\"cssFloat\"`. We no longer modify properties\n\t\t\t// sent to `.css()` apart from camelCasing, so we need to check both.\n\t\t\t// Normally, this would create difference in behavior: if\n\t\t\t// `getPropertyValue` returns an empty string, the value returned\n\t\t\t// by `.css()` would be `undefined`. This is usually the case for\n\t\t\t// disconnected elements. However, in IE even disconnected elements\n\t\t\t// with no styles return `\"none\"` for `getPropertyValue( \"float\" )`\n\t\t\tret = computed.getPropertyValue(name) || computed[name];\n\n\t\t\tif (isCustomProp && ret) {\n\n\t\t\t\t// Support: Firefox 105+, Chrome <=105+\n\t\t\t\t// Spec requires trimming whitespace for custom properties (gh-4926).\n\t\t\t\t// Firefox only trims leading whitespace. Chrome just collapses\n\t\t\t\t// both leading & trailing whitespace to a single space.\n\t\t\t\t//\n\t\t\t\t// Fall back to `undefined` if empty string returned.\n\t\t\t\t// This collapses a missing definition with property defined\n\t\t\t\t// and set to an empty string but there's no standard API\n\t\t\t\t// allowing us to differentiate them without a performance penalty\n\t\t\t\t// and returning `undefined` aligns with older jQuery.\n\t\t\t\t//\n\t\t\t\t// rtrimCSS treats U+000D CARRIAGE RETURN and U+000C FORM FEED\n\t\t\t\t// as whitespace while CSS does not, but this is not a problem\n\t\t\t\t// because CSS preprocessing replaces them with U+000A LINE FEED\n\t\t\t\t// (which *is* CSS whitespace)\n\t\t\t\t// https://www.w3.org/TR/css-syntax-3/#input-preprocessing\n\t\t\t\tret = ret.replace(rtrimCSS, \"$1\") || undefined;\n\t\t\t}\n\n\t\t\tif (ret === \"\" && !isAttached(elem)) {\n\t\t\t\tret = jQuery.style(elem, name);\n\t\t\t}\n\n\t\t\t// A tribute to the \"awesome hack by Dean Edwards\"\n\t\t\t// Android Browser returns percentage for some values,\n\t\t\t// but width seems to be reliably pixels.\n\t\t\t// This is against the CSSOM draft spec:\n\t\t\t// https://drafts.csswg.org/cssom/#resolved-values\n\t\t\tif (!support.pixelBoxStyles() && rnumnonpx.test(ret) && rboxStyle.test(name)) {\n\n\t\t\t\t// Remember the original values\n\t\t\t\twidth = style.width;\n\t\t\t\tminWidth = style.minWidth;\n\t\t\t\tmaxWidth = style.maxWidth;\n\n\t\t\t\t// Put in the new values to get a computed value out\n\t\t\t\tstyle.minWidth = style.maxWidth = style.width = ret;\n\t\t\t\tret = computed.width;\n\n\t\t\t\t// Revert the changed values\n\t\t\t\tstyle.width = width;\n\t\t\t\tstyle.minWidth = minWidth;\n\t\t\t\tstyle.maxWidth = maxWidth;\n\t\t\t}\n\t\t}\n\n\t\treturn ret !== undefined ?\n\n\t\t\t// Support: IE <=9 - 11 only\n\t\t\t// IE returns zIndex value as an integer.\n\t\t\tret + \"\" :\n\t\t\tret;\n\t}\n\n\n\tfunction addGetHookIf(conditionFn, hookFn) {\n\n\t\t// Define the hook, we'll check on the first run if it's really needed.\n\t\treturn {\n\t\t\tget: function () {\n\t\t\t\tif (conditionFn()) {\n\n\t\t\t\t\t// Hook not needed (or it's not possible to use it due\n\t\t\t\t\t// to missing dependency), remove it.\n\t\t\t\t\tdelete this.get;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Hook needed; redefine it so that the support test is not executed again.\n\t\t\t\treturn (this.get = hookFn).apply(this, arguments);\n\t\t\t}\n\t\t};\n\t}\n\n\n\tvar cssPrefixes = [\"Webkit\", \"Moz\", \"ms\"],\n\t\temptyStyle = document.createElement(\"div\").style,\n\t\tvendorProps = {};\n\n\t// Return a vendor-prefixed property or undefined\n\tfunction vendorPropName(name) {\n\n\t\t// Check for vendor prefixed names\n\t\tvar capName = name[0].toUpperCase() + name.slice(1),\n\t\t\ti = cssPrefixes.length;\n\n\t\twhile (i--) {\n\t\t\tname = cssPrefixes[i] + capName;\n\t\t\tif (name in emptyStyle) {\n\t\t\t\treturn name;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return a potentially-mapped jQuery.cssProps or vendor prefixed property\n\tfunction finalPropName(name) {\n\t\tvar final = jQuery.cssProps[name] || vendorProps[name];\n\n\t\tif (final) {\n\t\t\treturn final;\n\t\t}\n\t\tif (name in emptyStyle) {\n\t\t\treturn name;\n\t\t}\n\t\treturn vendorProps[name] = vendorPropName(name) || name;\n\t}\n\n\n\tvar\n\n\t\t// Swappable if display is none or starts with table\n\t\t// except \"table\", \"table-cell\", or \"table-caption\"\n\t\t// See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display\n\t\trdisplayswap = /^(none|table(?!-c[ea]).+)/,\n\t\tcssShow = { position: \"absolute\", visibility: \"hidden\", display: \"block\" },\n\t\tcssNormalTransform = {\n\t\t\tletterSpacing: \"0\",\n\t\t\tfontWeight: \"400\"\n\t\t};\n\n\tfunction setPositiveNumber(_elem, value, subtract) {\n\n\t\t// Any relative (+/-) values have already been\n\t\t// normalized at this point\n\t\tvar matches = rcssNum.exec(value);\n\t\treturn matches ?\n\n\t\t\t// Guard against undefined \"subtract\", e.g., when used as in cssHooks\n\t\t\tMath.max(0, matches[2] - (subtract || 0)) + (matches[3] || \"px\") :\n\t\t\tvalue;\n\t}\n\n\tfunction boxModelAdjustment(elem, dimension, box, isBorderBox, styles, computedVal) {\n\t\tvar i = dimension === \"width\" ? 1 : 0,\n\t\t\textra = 0,\n\t\t\tdelta = 0,\n\t\t\tmarginDelta = 0;\n\n\t\t// Adjustment may not be necessary\n\t\tif (box === (isBorderBox ? \"border\" : \"content\")) {\n\t\t\treturn 0;\n\t\t}\n\n\t\tfor (; i < 4; i += 2) {\n\n\t\t\t// Both box models exclude margin\n\t\t\t// Count margin delta separately to only add it after scroll gutter adjustment.\n\t\t\t// This is needed to make negative margins work with `outerHeight( true )` (gh-3982).\n\t\t\tif (box === \"margin\") {\n\t\t\t\tmarginDelta += jQuery.css(elem, box + cssExpand[i], true, styles);\n\t\t\t}\n\n\t\t\t// If we get here with a content-box, we're seeking \"padding\" or \"border\" or \"margin\"\n\t\t\tif (!isBorderBox) {\n\n\t\t\t\t// Add padding\n\t\t\t\tdelta += jQuery.css(elem, \"padding\" + cssExpand[i], true, styles);\n\n\t\t\t\t// For \"border\" or \"margin\", add border\n\t\t\t\tif (box !== \"padding\") {\n\t\t\t\t\tdelta += jQuery.css(elem, \"border\" + cssExpand[i] + \"Width\", true, styles);\n\n\t\t\t\t\t// But still keep track of it otherwise\n\t\t\t\t} else {\n\t\t\t\t\textra += jQuery.css(elem, \"border\" + cssExpand[i] + \"Width\", true, styles);\n\t\t\t\t}\n\n\t\t\t\t// If we get here with a border-box (content + padding + border), we're seeking \"content\" or\n\t\t\t\t// \"padding\" or \"margin\"\n\t\t\t} else {\n\n\t\t\t\t// For \"content\", subtract padding\n\t\t\t\tif (box === \"content\") {\n\t\t\t\t\tdelta -= jQuery.css(elem, \"padding\" + cssExpand[i], true, styles);\n\t\t\t\t}\n\n\t\t\t\t// For \"content\" or \"padding\", subtract border\n\t\t\t\tif (box !== \"margin\") {\n\t\t\t\t\tdelta -= jQuery.css(elem, \"border\" + cssExpand[i] + \"Width\", true, styles);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Account for positive content-box scroll gutter when requested by providing computedVal\n\t\tif (!isBorderBox && computedVal >= 0) {\n\n\t\t\t// offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border\n\t\t\t// Assuming integer scroll gutter, subtract the rest and round down\n\t\t\tdelta += Math.max(0, Math.ceil(\n\t\t\t\telem[\"offset\" + dimension[0].toUpperCase() + dimension.slice(1)] -\n\t\t\t\tcomputedVal -\n\t\t\t\tdelta -\n\t\t\t\textra -\n\t\t\t\t0.5\n\n\t\t\t\t// If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter\n\t\t\t\t// Use an explicit zero to avoid NaN (gh-3964)\n\t\t\t)) || 0;\n\t\t}\n\n\t\treturn delta + marginDelta;\n\t}\n\n\tfunction getWidthOrHeight(elem, dimension, extra) {\n\n\t\t// Start with computed style\n\t\tvar styles = getStyles(elem),\n\n\t\t\t// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322).\n\t\t\t// Fake content-box until we know it's needed to know the true value.\n\t\t\tboxSizingNeeded = !support.boxSizingReliable() || extra,\n\t\t\tisBorderBox = boxSizingNeeded &&\n\t\t\t\tjQuery.css(elem, \"boxSizing\", false, styles) === \"border-box\",\n\t\t\tvalueIsBorderBox = isBorderBox,\n\n\t\t\tval = curCSS(elem, dimension, styles),\n\t\t\toffsetProp = \"offset\" + dimension[0].toUpperCase() + dimension.slice(1);\n\n\t\t// Support: Firefox <=54\n\t\t// Return a confounding non-pixel value or feign ignorance, as appropriate.\n\t\tif (rnumnonpx.test(val)) {\n\t\t\tif (!extra) {\n\t\t\t\treturn val;\n\t\t\t}\n\t\t\tval = \"auto\";\n\t\t}\n\n\n\t\t// Support: IE 9 - 11 only\n\t\t// Use offsetWidth/offsetHeight for when box sizing is unreliable.\n\t\t// In those cases, the computed value can be trusted to be border-box.\n\t\tif ((!support.boxSizingReliable() && isBorderBox ||\n\n\t\t\t// Support: IE 10 - 11+, Edge 15 - 18+\n\t\t\t// IE/Edge misreport `getComputedStyle` of table rows with width/height\n\t\t\t// set in CSS while `offset*` properties report correct values.\n\t\t\t// Interestingly, in some cases IE 9 doesn't suffer from this issue.\n\t\t\t!support.reliableTrDimensions() && nodeName(elem, \"tr\") ||\n\n\t\t\t// Fall back to offsetWidth/offsetHeight when value is \"auto\"\n\t\t\t// This happens for inline elements with no explicit setting (gh-3571)\n\t\t\tval === \"auto\" ||\n\n\t\t\t// Support: Android <=4.1 - 4.3 only\n\t\t\t// Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602)\n\t\t\t!parseFloat(val) && jQuery.css(elem, \"display\", false, styles) === \"inline\") &&\n\n\t\t\t// Make sure the element is visible & connected\n\t\t\telem.getClientRects().length) {\n\n\t\t\tisBorderBox = jQuery.css(elem, \"boxSizing\", false, styles) === \"border-box\";\n\n\t\t\t// Where available, offsetWidth/offsetHeight approximate border box dimensions.\n\t\t\t// Where not available (e.g., SVG), assume unreliable box-sizing and interpret the\n\t\t\t// retrieved value as a content box dimension.\n\t\t\tvalueIsBorderBox = offsetProp in elem;\n\t\t\tif (valueIsBorderBox) {\n\t\t\t\tval = elem[offsetProp];\n\t\t\t}\n\t\t}\n\n\t\t// Normalize \"\" and auto\n\t\tval = parseFloat(val) || 0;\n\n\t\t// Adjust for the element's box model\n\t\treturn (val +\n\t\t\tboxModelAdjustment(\n\t\t\t\telem,\n\t\t\t\tdimension,\n\t\t\t\textra || (isBorderBox ? \"border\" : \"content\"),\n\t\t\t\tvalueIsBorderBox,\n\t\t\t\tstyles,\n\n\t\t\t\t// Provide the current computed size to request scroll gutter calculation (gh-3589)\n\t\t\t\tval\n\t\t\t)\n\t\t) + \"px\";\n\t}\n\n\tjQuery.extend({\n\n\t\t// Add in style property hooks for overriding the default\n\t\t// behavior of getting and setting a style property\n\t\tcssHooks: {\n\t\t\topacity: {\n\t\t\t\tget: function (elem, computed) {\n\t\t\t\t\tif (computed) {\n\n\t\t\t\t\t\t// We should always get a number back from opacity\n\t\t\t\t\t\tvar ret = curCSS(elem, \"opacity\");\n\t\t\t\t\t\treturn ret === \"\" ? \"1\" : ret;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t// Don't automatically add \"px\" to these possibly-unitless properties\n\t\tcssNumber: {\n\t\t\tanimationIterationCount: true,\n\t\t\taspectRatio: true,\n\t\t\tborderImageSlice: true,\n\t\t\tcolumnCount: true,\n\t\t\tflexGrow: true,\n\t\t\tflexShrink: true,\n\t\t\tfontWeight: true,\n\t\t\tgridArea: true,\n\t\t\tgridColumn: true,\n\t\t\tgridColumnEnd: true,\n\t\t\tgridColumnStart: true,\n\t\t\tgridRow: true,\n\t\t\tgridRowEnd: true,\n\t\t\tgridRowStart: true,\n\t\t\tlineHeight: true,\n\t\t\topacity: true,\n\t\t\torder: true,\n\t\t\torphans: true,\n\t\t\tscale: true,\n\t\t\twidows: true,\n\t\t\tzIndex: true,\n\t\t\tzoom: true,\n\n\t\t\t// SVG-related\n\t\t\tfillOpacity: true,\n\t\t\tfloodOpacity: true,\n\t\t\tstopOpacity: true,\n\t\t\tstrokeMiterlimit: true,\n\t\t\tstrokeOpacity: true\n\t\t},\n\n\t\t// Add in properties whose names you wish to fix before\n\t\t// setting or getting the value\n\t\tcssProps: {},\n\n\t\t// Get and set the style property on a DOM Node\n\t\tstyle: function (elem, name, value, extra) {\n\n\t\t\t// Don't set styles on text and comment nodes\n\t\t\tif (!elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Make sure that we're working with the right name\n\t\t\tvar ret, type, hooks,\n\t\t\t\torigName = camelCase(name),\n\t\t\t\tisCustomProp = rcustomProp.test(name),\n\t\t\t\tstyle = elem.style;\n\n\t\t\t// Make sure that we're working with the right name. We don't\n\t\t\t// want to query the value if it is a CSS custom property\n\t\t\t// since they are user-defined.\n\t\t\tif (!isCustomProp) {\n\t\t\t\tname = finalPropName(origName);\n\t\t\t}\n\n\t\t\t// Gets hook for the prefixed version, then unprefixed version\n\t\t\thooks = jQuery.cssHooks[name] || jQuery.cssHooks[origName];\n\n\t\t\t// Check if we're setting a value\n\t\t\tif (value !== undefined) {\n\t\t\t\ttype = typeof value;\n\n\t\t\t\t// Convert \"+=\" or \"-=\" to relative numbers (trac-7345)\n\t\t\t\tif (type === \"string\" && (ret = rcssNum.exec(value)) && ret[1]) {\n\t\t\t\t\tvalue = adjustCSS(elem, name, ret);\n\n\t\t\t\t\t// Fixes bug trac-9237\n\t\t\t\t\ttype = \"number\";\n\t\t\t\t}\n\n\t\t\t\t// Make sure that null and NaN values aren't set (trac-7116)\n\t\t\t\tif (value == null || value !== value) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// If a number was passed in, add the unit (except for certain CSS properties)\n\t\t\t\t// The isCustomProp check can be removed in jQuery 4.0 when we only auto-append\n\t\t\t\t// \"px\" to a few hardcoded values.\n\t\t\t\tif (type === \"number\" && !isCustomProp) {\n\t\t\t\t\tvalue += ret && ret[3] || (jQuery.cssNumber[origName] ? \"\" : \"px\");\n\t\t\t\t}\n\n\t\t\t\t// background-* props affect original clone's values\n\t\t\t\tif (!support.clearCloneStyle && value === \"\" && name.indexOf(\"background\") === 0) {\n\t\t\t\t\tstyle[name] = \"inherit\";\n\t\t\t\t}\n\n\t\t\t\t// If a hook was provided, use that value, otherwise just set the specified value\n\t\t\t\tif (!hooks || !(\"set\" in hooks) ||\n\t\t\t\t\t(value = hooks.set(elem, value, extra)) !== undefined) {\n\n\t\t\t\t\tif (isCustomProp) {\n\t\t\t\t\t\tstyle.setProperty(name, value);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tstyle[name] = value;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\t// If a hook was provided get the non-computed value from there\n\t\t\t\tif (hooks && \"get\" in hooks &&\n\t\t\t\t\t(ret = hooks.get(elem, false, extra)) !== undefined) {\n\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\n\t\t\t\t// Otherwise just get the value from the style object\n\t\t\t\treturn style[name];\n\t\t\t}\n\t\t},\n\n\t\tcss: function (elem, name, extra, styles) {\n\t\t\tvar val, num, hooks,\n\t\t\t\torigName = camelCase(name),\n\t\t\t\tisCustomProp = rcustomProp.test(name);\n\n\t\t\t// Make sure that we're working with the right name. We don't\n\t\t\t// want to modify the value if it is a CSS custom property\n\t\t\t// since they are user-defined.\n\t\t\tif (!isCustomProp) {\n\t\t\t\tname = finalPropName(origName);\n\t\t\t}\n\n\t\t\t// Try prefixed name followed by the unprefixed name\n\t\t\thooks = jQuery.cssHooks[name] || jQuery.cssHooks[origName];\n\n\t\t\t// If a hook was provided get the computed value from there\n\t\t\tif (hooks && \"get\" in hooks) {\n\t\t\t\tval = hooks.get(elem, true, extra);\n\t\t\t}\n\n\t\t\t// Otherwise, if a way to get the computed value exists, use that\n\t\t\tif (val === undefined) {\n\t\t\t\tval = curCSS(elem, name, styles);\n\t\t\t}\n\n\t\t\t// Convert \"normal\" to computed value\n\t\t\tif (val === \"normal\" && name in cssNormalTransform) {\n\t\t\t\tval = cssNormalTransform[name];\n\t\t\t}\n\n\t\t\t// Make numeric if forced or a qualifier was provided and val looks numeric\n\t\t\tif (extra === \"\" || extra) {\n\t\t\t\tnum = parseFloat(val);\n\t\t\t\treturn extra === true || isFinite(num) ? num || 0 : val;\n\t\t\t}\n\n\t\t\treturn val;\n\t\t}\n\t});\n\n\tjQuery.each([\"height\", \"width\"], function (_i, dimension) {\n\t\tjQuery.cssHooks[dimension] = {\n\t\t\tget: function (elem, computed, extra) {\n\t\t\t\tif (computed) {\n\n\t\t\t\t\t// Certain elements can have dimension info if we invisibly show them\n\t\t\t\t\t// but it must have a current display style that would benefit\n\t\t\t\t\treturn rdisplayswap.test(jQuery.css(elem, \"display\")) &&\n\n\t\t\t\t\t\t// Support: Safari 8+\n\t\t\t\t\t\t// Table columns in Safari have non-zero offsetWidth & zero\n\t\t\t\t\t\t// getBoundingClientRect().width unless display is changed.\n\t\t\t\t\t\t// Support: IE <=11 only\n\t\t\t\t\t\t// Running getBoundingClientRect on a disconnected node\n\t\t\t\t\t\t// in IE throws an error.\n\t\t\t\t\t\t(!elem.getClientRects().length || !elem.getBoundingClientRect().width) ?\n\t\t\t\t\t\tswap(elem, cssShow, function () {\n\t\t\t\t\t\t\treturn getWidthOrHeight(elem, dimension, extra);\n\t\t\t\t\t\t}) :\n\t\t\t\t\t\tgetWidthOrHeight(elem, dimension, extra);\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tset: function (elem, value, extra) {\n\t\t\t\tvar matches,\n\t\t\t\t\tstyles = getStyles(elem),\n\n\t\t\t\t\t// Only read styles.position if the test has a chance to fail\n\t\t\t\t\t// to avoid forcing a reflow.\n\t\t\t\t\tscrollboxSizeBuggy = !support.scrollboxSize() &&\n\t\t\t\t\t\tstyles.position === \"absolute\",\n\n\t\t\t\t\t// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991)\n\t\t\t\t\tboxSizingNeeded = scrollboxSizeBuggy || extra,\n\t\t\t\t\tisBorderBox = boxSizingNeeded &&\n\t\t\t\t\t\tjQuery.css(elem, \"boxSizing\", false, styles) === \"border-box\",\n\t\t\t\t\tsubtract = extra ?\n\t\t\t\t\t\tboxModelAdjustment(\n\t\t\t\t\t\t\telem,\n\t\t\t\t\t\t\tdimension,\n\t\t\t\t\t\t\textra,\n\t\t\t\t\t\t\tisBorderBox,\n\t\t\t\t\t\t\tstyles\n\t\t\t\t\t\t) :\n\t\t\t\t\t\t0;\n\n\t\t\t\t// Account for unreliable border-box dimensions by comparing offset* to computed and\n\t\t\t\t// faking a content-box to get border and padding (gh-3699)\n\t\t\t\tif (isBorderBox && scrollboxSizeBuggy) {\n\t\t\t\t\tsubtract -= Math.ceil(\n\t\t\t\t\t\telem[\"offset\" + dimension[0].toUpperCase() + dimension.slice(1)] -\n\t\t\t\t\t\tparseFloat(styles[dimension]) -\n\t\t\t\t\t\tboxModelAdjustment(elem, dimension, \"border\", false, styles) -\n\t\t\t\t\t\t0.5\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\t// Convert to pixels if value adjustment is needed\n\t\t\t\tif (subtract && (matches = rcssNum.exec(value)) &&\n\t\t\t\t\t(matches[3] || \"px\") !== \"px\") {\n\n\t\t\t\t\telem.style[dimension] = value;\n\t\t\t\t\tvalue = jQuery.css(elem, dimension);\n\t\t\t\t}\n\n\t\t\t\treturn setPositiveNumber(elem, value, subtract);\n\t\t\t}\n\t\t};\n\t});\n\n\tjQuery.cssHooks.marginLeft = addGetHookIf(support.reliableMarginLeft,\n\t\tfunction (elem, computed) {\n\t\t\tif (computed) {\n\t\t\t\treturn (parseFloat(curCSS(elem, \"marginLeft\")) ||\n\t\t\t\t\telem.getBoundingClientRect().left -\n\t\t\t\t\tswap(elem, { marginLeft: 0 }, function () {\n\t\t\t\t\t\treturn elem.getBoundingClientRect().left;\n\t\t\t\t\t})\n\t\t\t\t) + \"px\";\n\t\t\t}\n\t\t}\n\t);\n\n\t// These hooks are used by animate to expand properties\n\tjQuery.each({\n\t\tmargin: \"\",\n\t\tpadding: \"\",\n\t\tborder: \"Width\"\n\t}, function (prefix, suffix) {\n\t\tjQuery.cssHooks[prefix + suffix] = {\n\t\t\texpand: function (value) {\n\t\t\t\tvar i = 0,\n\t\t\t\t\texpanded = {},\n\n\t\t\t\t\t// Assumes a single number if not a string\n\t\t\t\t\tparts = typeof value === \"string\" ? value.split(\" \") : [value];\n\n\t\t\t\tfor (; i < 4; i++) {\n\t\t\t\t\texpanded[prefix + cssExpand[i] + suffix] =\n\t\t\t\t\t\tparts[i] || parts[i - 2] || parts[0];\n\t\t\t\t}\n\n\t\t\t\treturn expanded;\n\t\t\t}\n\t\t};\n\n\t\tif (prefix !== \"margin\") {\n\t\t\tjQuery.cssHooks[prefix + suffix].set = setPositiveNumber;\n\t\t}\n\t});\n\n\tjQuery.fn.extend({\n\t\tcss: function (name, value) {\n\t\t\treturn access(this, function (elem, name, value) {\n\t\t\t\tvar styles, len,\n\t\t\t\t\tmap = {},\n\t\t\t\t\ti = 0;\n\n\t\t\t\tif (Array.isArray(name)) {\n\t\t\t\t\tstyles = getStyles(elem);\n\t\t\t\t\tlen = name.length;\n\n\t\t\t\t\tfor (; i < len; i++) {\n\t\t\t\t\t\tmap[name[i]] = jQuery.css(elem, name[i], false, styles);\n\t\t\t\t\t}\n\n\t\t\t\t\treturn map;\n\t\t\t\t}\n\n\t\t\t\treturn value !== undefined ?\n\t\t\t\t\tjQuery.style(elem, name, value) :\n\t\t\t\t\tjQuery.css(elem, name);\n\t\t\t}, name, value, arguments.length > 1);\n\t\t}\n\t});\n\n\n\tfunction Tween(elem, options, prop, end, easing) {\n\t\treturn new Tween.prototype.init(elem, options, prop, end, easing);\n\t}\n\tjQuery.Tween = Tween;\n\n\tTween.prototype = {\n\t\tconstructor: Tween,\n\t\tinit: function (elem, options, prop, end, easing, unit) {\n\t\t\tthis.elem = elem;\n\t\t\tthis.prop = prop;\n\t\t\tthis.easing = easing || jQuery.easing._default;\n\t\t\tthis.options = options;\n\t\t\tthis.start = this.now = this.cur();\n\t\t\tthis.end = end;\n\t\t\tthis.unit = unit || (jQuery.cssNumber[prop] ? \"\" : \"px\");\n\t\t},\n\t\tcur: function () {\n\t\t\tvar hooks = Tween.propHooks[this.prop];\n\n\t\t\treturn hooks && hooks.get ?\n\t\t\t\thooks.get(this) :\n\t\t\t\tTween.propHooks._default.get(this);\n\t\t},\n\t\trun: function (percent) {\n\t\t\tvar eased,\n\t\t\t\thooks = Tween.propHooks[this.prop];\n\n\t\t\tif (this.options.duration) {\n\t\t\t\tthis.pos = eased = jQuery.easing[this.easing](\n\t\t\t\t\tpercent, this.options.duration * percent, 0, 1, this.options.duration\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tthis.pos = eased = percent;\n\t\t\t}\n\t\t\tthis.now = (this.end - this.start) * eased + this.start;\n\n\t\t\tif (this.options.step) {\n\t\t\t\tthis.options.step.call(this.elem, this.now, this);\n\t\t\t}\n\n\t\t\tif (hooks && hooks.set) {\n\t\t\t\thooks.set(this);\n\t\t\t} else {\n\t\t\t\tTween.propHooks._default.set(this);\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t};\n\n\tTween.prototype.init.prototype = Tween.prototype;\n\n\tTween.propHooks = {\n\t\t_default: {\n\t\t\tget: function (tween) {\n\t\t\t\tvar result;\n\n\t\t\t\t// Use a property on the element directly when it is not a DOM element,\n\t\t\t\t// or when there is no matching style property that exists.\n\t\t\t\tif (tween.elem.nodeType !== 1 ||\n\t\t\t\t\ttween.elem[tween.prop] != null && tween.elem.style[tween.prop] == null) {\n\t\t\t\t\treturn tween.elem[tween.prop];\n\t\t\t\t}\n\n\t\t\t\t// Passing an empty string as a 3rd parameter to .css will automatically\n\t\t\t\t// attempt a parseFloat and fallback to a string if the parse fails.\n\t\t\t\t// Simple values such as \"10px\" are parsed to Float;\n\t\t\t\t// complex values such as \"rotate(1rad)\" are returned as-is.\n\t\t\t\tresult = jQuery.css(tween.elem, tween.prop, \"\");\n\n\t\t\t\t// Empty strings, null, undefined and \"auto\" are converted to 0.\n\t\t\t\treturn !result || result === \"auto\" ? 0 : result;\n\t\t\t},\n\t\t\tset: function (tween) {\n\n\t\t\t\t// Use step hook for back compat.\n\t\t\t\t// Use cssHook if its there.\n\t\t\t\t// Use .style if available and use plain properties where available.\n\t\t\t\tif (jQuery.fx.step[tween.prop]) {\n\t\t\t\t\tjQuery.fx.step[tween.prop](tween);\n\t\t\t\t} else if (tween.elem.nodeType === 1 && (\n\t\t\t\t\tjQuery.cssHooks[tween.prop] ||\n\t\t\t\t\ttween.elem.style[finalPropName(tween.prop)] != null)) {\n\t\t\t\t\tjQuery.style(tween.elem, tween.prop, tween.now + tween.unit);\n\t\t\t\t} else {\n\t\t\t\t\ttween.elem[tween.prop] = tween.now;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t// Support: IE <=9 only\n\t// Panic based approach to setting things on disconnected nodes\n\tTween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {\n\t\tset: function (tween) {\n\t\t\tif (tween.elem.nodeType && tween.elem.parentNode) {\n\t\t\t\ttween.elem[tween.prop] = tween.now;\n\t\t\t}\n\t\t}\n\t};\n\n\tjQuery.easing = {\n\t\tlinear: function (p) {\n\t\t\treturn p;\n\t\t},\n\t\tswing: function (p) {\n\t\t\treturn 0.5 - Math.cos(p * Math.PI) / 2;\n\t\t},\n\t\t_default: \"swing\"\n\t};\n\n\tjQuery.fx = Tween.prototype.init;\n\n\t// Back compat <1.8 extension point\n\tjQuery.fx.step = {};\n\n\n\n\n\tvar\n\t\tfxNow, inProgress,\n\t\trfxtypes = /^(?:toggle|show|hide)$/,\n\t\trrun = /queueHooks$/;\n\n\tfunction schedule() {\n\t\tif (inProgress) {\n\t\t\tif (document.hidden === false && window.requestAnimationFrame) {\n\t\t\t\twindow.requestAnimationFrame(schedule);\n\t\t\t} else {\n\t\t\t\twindow.setTimeout(schedule, jQuery.fx.interval);\n\t\t\t}\n\n\t\t\tjQuery.fx.tick();\n\t\t}\n\t}\n\n\t// Animations created synchronously will run synchronously\n\tfunction createFxNow() {\n\t\twindow.setTimeout(function () {\n\t\t\tfxNow = undefined;\n\t\t});\n\t\treturn (fxNow = Date.now());\n\t}\n\n\t// Generate parameters to create a standard animation\n\tfunction genFx(type, includeWidth) {\n\t\tvar which,\n\t\t\ti = 0,\n\t\t\tattrs = { height: type };\n\n\t\t// If we include width, step value is 1 to do all cssExpand values,\n\t\t// otherwise step value is 2 to skip over Left and Right\n\t\tincludeWidth = includeWidth ? 1 : 0;\n\t\tfor (; i < 4; i += 2 - includeWidth) {\n\t\t\twhich = cssExpand[i];\n\t\t\tattrs[\"margin\" + which] = attrs[\"padding\" + which] = type;\n\t\t}\n\n\t\tif (includeWidth) {\n\t\t\tattrs.opacity = attrs.width = type;\n\t\t}\n\n\t\treturn attrs;\n\t}\n\n\tfunction createTween(value, prop, animation) {\n\t\tvar tween,\n\t\t\tcollection = (Animation.tweeners[prop] || []).concat(Animation.tweeners[\"*\"]),\n\t\t\tindex = 0,\n\t\t\tlength = collection.length;\n\t\tfor (; index < length; index++) {\n\t\t\tif ((tween = collection[index].call(animation, prop, value))) {\n\n\t\t\t\t// We're done with this property\n\t\t\t\treturn tween;\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction defaultPrefilter(elem, props, opts) {\n\t\tvar prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display,\n\t\t\tisBox = \"width\" in props || \"height\" in props,\n\t\t\tanim = this,\n\t\t\torig = {},\n\t\t\tstyle = elem.style,\n\t\t\thidden = elem.nodeType && isHiddenWithinTree(elem),\n\t\t\tdataShow = dataPriv.get(elem, \"fxshow\");\n\n\t\t// Queue-skipping animations hijack the fx hooks\n\t\tif (!opts.queue) {\n\t\t\thooks = jQuery._queueHooks(elem, \"fx\");\n\t\t\tif (hooks.unqueued == null) {\n\t\t\t\thooks.unqueued = 0;\n\t\t\t\toldfire = hooks.empty.fire;\n\t\t\t\thooks.empty.fire = function () {\n\t\t\t\t\tif (!hooks.unqueued) {\n\t\t\t\t\t\toldfire();\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t\thooks.unqueued++;\n\n\t\t\tanim.always(function () {\n\n\t\t\t\t// Ensure the complete handler is called before this completes\n\t\t\t\tanim.always(function () {\n\t\t\t\t\thooks.unqueued--;\n\t\t\t\t\tif (!jQuery.queue(elem, \"fx\").length) {\n\t\t\t\t\t\thooks.empty.fire();\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\n\t\t// Detect show/hide animations\n\t\tfor (prop in props) {\n\t\t\tvalue = props[prop];\n\t\t\tif (rfxtypes.test(value)) {\n\t\t\t\tdelete props[prop];\n\t\t\t\ttoggle = toggle || value === \"toggle\";\n\t\t\t\tif (value === (hidden ? \"hide\" : \"show\")) {\n\n\t\t\t\t\t// Pretend to be hidden if this is a \"show\" and\n\t\t\t\t\t// there is still data from a stopped show/hide\n\t\t\t\t\tif (value === \"show\" && dataShow && dataShow[prop] !== undefined) {\n\t\t\t\t\t\thidden = true;\n\n\t\t\t\t\t\t// Ignore all other no-op show/hide data\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\torig[prop] = dataShow && dataShow[prop] || jQuery.style(elem, prop);\n\t\t\t}\n\t\t}\n\n\t\t// Bail out if this is a no-op like .hide().hide()\n\t\tpropTween = !jQuery.isEmptyObject(props);\n\t\tif (!propTween && jQuery.isEmptyObject(orig)) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Restrict \"overflow\" and \"display\" styles during box animations\n\t\tif (isBox && elem.nodeType === 1) {\n\n\t\t\t// Support: IE <=9 - 11, Edge 12 - 15\n\t\t\t// Record all 3 overflow attributes because IE does not infer the shorthand\n\t\t\t// from identically-valued overflowX and overflowY and Edge just mirrors\n\t\t\t// the overflowX value there.\n\t\t\topts.overflow = [style.overflow, style.overflowX, style.overflowY];\n\n\t\t\t// Identify a display type, preferring old show/hide data over the CSS cascade\n\t\t\trestoreDisplay = dataShow && dataShow.display;\n\t\t\tif (restoreDisplay == null) {\n\t\t\t\trestoreDisplay = dataPriv.get(elem, \"display\");\n\t\t\t}\n\t\t\tdisplay = jQuery.css(elem, \"display\");\n\t\t\tif (display === \"none\") {\n\t\t\t\tif (restoreDisplay) {\n\t\t\t\t\tdisplay = restoreDisplay;\n\t\t\t\t} else {\n\n\t\t\t\t\t// Get nonempty value(s) by temporarily forcing visibility\n\t\t\t\t\tshowHide([elem], true);\n\t\t\t\t\trestoreDisplay = elem.style.display || restoreDisplay;\n\t\t\t\t\tdisplay = jQuery.css(elem, \"display\");\n\t\t\t\t\tshowHide([elem]);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Animate inline elements as inline-block\n\t\t\tif (display === \"inline\" || display === \"inline-block\" && restoreDisplay != null) {\n\t\t\t\tif (jQuery.css(elem, \"float\") === \"none\") {\n\n\t\t\t\t\t// Restore the original display value at the end of pure show/hide animations\n\t\t\t\t\tif (!propTween) {\n\t\t\t\t\t\tanim.done(function () {\n\t\t\t\t\t\t\tstyle.display = restoreDisplay;\n\t\t\t\t\t\t});\n\t\t\t\t\t\tif (restoreDisplay == null) {\n\t\t\t\t\t\t\tdisplay = style.display;\n\t\t\t\t\t\t\trestoreDisplay = display === \"none\" ? \"\" : display;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tstyle.display = \"inline-block\";\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (opts.overflow) {\n\t\t\tstyle.overflow = \"hidden\";\n\t\t\tanim.always(function () {\n\t\t\t\tstyle.overflow = opts.overflow[0];\n\t\t\t\tstyle.overflowX = opts.overflow[1];\n\t\t\t\tstyle.overflowY = opts.overflow[2];\n\t\t\t});\n\t\t}\n\n\t\t// Implement show/hide animations\n\t\tpropTween = false;\n\t\tfor (prop in orig) {\n\n\t\t\t// General show/hide setup for this element animation\n\t\t\tif (!propTween) {\n\t\t\t\tif (dataShow) {\n\t\t\t\t\tif (\"hidden\" in dataShow) {\n\t\t\t\t\t\thidden = dataShow.hidden;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tdataShow = dataPriv.access(elem, \"fxshow\", { display: restoreDisplay });\n\t\t\t\t}\n\n\t\t\t\t// Store hidden/visible for toggle so `.stop().toggle()` \"reverses\"\n\t\t\t\tif (toggle) {\n\t\t\t\t\tdataShow.hidden = !hidden;\n\t\t\t\t}\n\n\t\t\t\t// Show elements before animating them\n\t\t\t\tif (hidden) {\n\t\t\t\t\tshowHide([elem], true);\n\t\t\t\t}\n\n\t\t\t\t/* eslint-disable no-loop-func */\n\n\t\t\t\tanim.done(function () {\n\n\t\t\t\t\t/* eslint-enable no-loop-func */\n\n\t\t\t\t\t// The final step of a \"hide\" animation is actually hiding the element\n\t\t\t\t\tif (!hidden) {\n\t\t\t\t\t\tshowHide([elem]);\n\t\t\t\t\t}\n\t\t\t\t\tdataPriv.remove(elem, \"fxshow\");\n\t\t\t\t\tfor (prop in orig) {\n\t\t\t\t\t\tjQuery.style(elem, prop, orig[prop]);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// Per-property setup\n\t\t\tpropTween = createTween(hidden ? dataShow[prop] : 0, prop, anim);\n\t\t\tif (!(prop in dataShow)) {\n\t\t\t\tdataShow[prop] = propTween.start;\n\t\t\t\tif (hidden) {\n\t\t\t\t\tpropTween.end = propTween.start;\n\t\t\t\t\tpropTween.start = 0;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction propFilter(props, specialEasing) {\n\t\tvar index, name, easing, value, hooks;\n\n\t\t// camelCase, specialEasing and expand cssHook pass\n\t\tfor (index in props) {\n\t\t\tname = camelCase(index);\n\t\t\teasing = specialEasing[name];\n\t\t\tvalue = props[index];\n\t\t\tif (Array.isArray(value)) {\n\t\t\t\teasing = value[1];\n\t\t\t\tvalue = props[index] = value[0];\n\t\t\t}\n\n\t\t\tif (index !== name) {\n\t\t\t\tprops[name] = value;\n\t\t\t\tdelete props[index];\n\t\t\t}\n\n\t\t\thooks = jQuery.cssHooks[name];\n\t\t\tif (hooks && \"expand\" in hooks) {\n\t\t\t\tvalue = hooks.expand(value);\n\t\t\t\tdelete props[name];\n\n\t\t\t\t// Not quite $.extend, this won't overwrite existing keys.\n\t\t\t\t// Reusing 'index' because we have the correct \"name\"\n\t\t\t\tfor (index in value) {\n\t\t\t\t\tif (!(index in props)) {\n\t\t\t\t\t\tprops[index] = value[index];\n\t\t\t\t\t\tspecialEasing[index] = easing;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tspecialEasing[name] = easing;\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction Animation(elem, properties, options) {\n\t\tvar result,\n\t\t\tstopped,\n\t\t\tindex = 0,\n\t\t\tlength = Animation.prefilters.length,\n\t\t\tdeferred = jQuery.Deferred().always(function () {\n\n\t\t\t\t// Don't match elem in the :animated selector\n\t\t\t\tdelete tick.elem;\n\t\t\t}),\n\t\t\ttick = function () {\n\t\t\t\tif (stopped) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tvar currentTime = fxNow || createFxNow(),\n\t\t\t\t\tremaining = Math.max(0, animation.startTime + animation.duration - currentTime),\n\n\t\t\t\t\t// Support: Android 2.3 only\n\t\t\t\t\t// Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (trac-12497)\n\t\t\t\t\ttemp = remaining / animation.duration || 0,\n\t\t\t\t\tpercent = 1 - temp,\n\t\t\t\t\tindex = 0,\n\t\t\t\t\tlength = animation.tweens.length;\n\n\t\t\t\tfor (; index < length; index++) {\n\t\t\t\t\tanimation.tweens[index].run(percent);\n\t\t\t\t}\n\n\t\t\t\tdeferred.notifyWith(elem, [animation, percent, remaining]);\n\n\t\t\t\t// If there's more to do, yield\n\t\t\t\tif (percent < 1 && length) {\n\t\t\t\t\treturn remaining;\n\t\t\t\t}\n\n\t\t\t\t// If this was an empty animation, synthesize a final progress notification\n\t\t\t\tif (!length) {\n\t\t\t\t\tdeferred.notifyWith(elem, [animation, 1, 0]);\n\t\t\t\t}\n\n\t\t\t\t// Resolve the animation and report its conclusion\n\t\t\t\tdeferred.resolveWith(elem, [animation]);\n\t\t\t\treturn false;\n\t\t\t},\n\t\t\tanimation = deferred.promise({\n\t\t\t\telem: elem,\n\t\t\t\tprops: jQuery.extend({}, properties),\n\t\t\t\topts: jQuery.extend(true, {\n\t\t\t\t\tspecialEasing: {},\n\t\t\t\t\teasing: jQuery.easing._default\n\t\t\t\t}, options),\n\t\t\t\toriginalProperties: properties,\n\t\t\t\toriginalOptions: options,\n\t\t\t\tstartTime: fxNow || createFxNow(),\n\t\t\t\tduration: options.duration,\n\t\t\t\ttweens: [],\n\t\t\t\tcreateTween: function (prop, end) {\n\t\t\t\t\tvar tween = jQuery.Tween(elem, animation.opts, prop, end,\n\t\t\t\t\t\tanimation.opts.specialEasing[prop] || animation.opts.easing);\n\t\t\t\t\tanimation.tweens.push(tween);\n\t\t\t\t\treturn tween;\n\t\t\t\t},\n\t\t\t\tstop: function (gotoEnd) {\n\t\t\t\t\tvar index = 0,\n\n\t\t\t\t\t\t// If we are going to the end, we want to run all the tweens\n\t\t\t\t\t\t// otherwise we skip this part\n\t\t\t\t\t\tlength = gotoEnd ? animation.tweens.length : 0;\n\t\t\t\t\tif (stopped) {\n\t\t\t\t\t\treturn this;\n\t\t\t\t\t}\n\t\t\t\t\tstopped = true;\n\t\t\t\t\tfor (; index < length; index++) {\n\t\t\t\t\t\tanimation.tweens[index].run(1);\n\t\t\t\t\t}\n\n\t\t\t\t\t// Resolve when we played the last frame; otherwise, reject\n\t\t\t\t\tif (gotoEnd) {\n\t\t\t\t\t\tdeferred.notifyWith(elem, [animation, 1, 0]);\n\t\t\t\t\t\tdeferred.resolveWith(elem, [animation, gotoEnd]);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdeferred.rejectWith(elem, [animation, gotoEnd]);\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t}),\n\t\t\tprops = animation.props;\n\n\t\tpropFilter(props, animation.opts.specialEasing);\n\n\t\tfor (; index < length; index++) {\n\t\t\tresult = Animation.prefilters[index].call(animation, elem, props, animation.opts);\n\t\t\tif (result) {\n\t\t\t\tif (isFunction(result.stop)) {\n\t\t\t\t\tjQuery._queueHooks(animation.elem, animation.opts.queue).stop =\n\t\t\t\t\t\tresult.stop.bind(result);\n\t\t\t\t}\n\t\t\t\treturn result;\n\t\t\t}\n\t\t}\n\n\t\tjQuery.map(props, createTween, animation);\n\n\t\tif (isFunction(animation.opts.start)) {\n\t\t\tanimation.opts.start.call(elem, animation);\n\t\t}\n\n\t\t// Attach callbacks from options\n\t\tanimation\n\t\t\t.progress(animation.opts.progress)\n\t\t\t.done(animation.opts.done, animation.opts.complete)\n\t\t\t.fail(animation.opts.fail)\n\t\t\t.always(animation.opts.always);\n\n\t\tjQuery.fx.timer(\n\t\t\tjQuery.extend(tick, {\n\t\t\t\telem: elem,\n\t\t\t\tanim: animation,\n\t\t\t\tqueue: animation.opts.queue\n\t\t\t})\n\t\t);\n\n\t\treturn animation;\n\t}\n\n\tjQuery.Animation = jQuery.extend(Animation, {\n\n\t\ttweeners: {\n\t\t\t\"*\": [function (prop, value) {\n\t\t\t\tvar tween = this.createTween(prop, value);\n\t\t\t\tadjustCSS(tween.elem, prop, rcssNum.exec(value), tween);\n\t\t\t\treturn tween;\n\t\t\t}]\n\t\t},\n\n\t\ttweener: function (props, callback) {\n\t\t\tif (isFunction(props)) {\n\t\t\t\tcallback = props;\n\t\t\t\tprops = [\"*\"];\n\t\t\t} else {\n\t\t\t\tprops = props.match(rnothtmlwhite);\n\t\t\t}\n\n\t\t\tvar prop,\n\t\t\t\tindex = 0,\n\t\t\t\tlength = props.length;\n\n\t\t\tfor (; index < length; index++) {\n\t\t\t\tprop = props[index];\n\t\t\t\tAnimation.tweeners[prop] = Animation.tweeners[prop] || [];\n\t\t\t\tAnimation.tweeners[prop].unshift(callback);\n\t\t\t}\n\t\t},\n\n\t\tprefilters: [defaultPrefilter],\n\n\t\tprefilter: function (callback, prepend) {\n\t\t\tif (prepend) {\n\t\t\t\tAnimation.prefilters.unshift(callback);\n\t\t\t} else {\n\t\t\t\tAnimation.prefilters.push(callback);\n\t\t\t}\n\t\t}\n\t});\n\n\tjQuery.speed = function (speed, easing, fn) {\n\t\tvar opt = speed && typeof speed === \"object\" ? jQuery.extend({}, speed) : {\n\t\t\tcomplete: fn || !fn && easing ||\n\t\t\t\tisFunction(speed) && speed,\n\t\t\tduration: speed,\n\t\t\teasing: fn && easing || easing && !isFunction(easing) && easing\n\t\t};\n\n\t\t// Go to the end state if fx are off\n\t\tif (jQuery.fx.off) {\n\t\t\topt.duration = 0;\n\n\t\t} else {\n\t\t\tif (typeof opt.duration !== \"number\") {\n\t\t\t\tif (opt.duration in jQuery.fx.speeds) {\n\t\t\t\t\topt.duration = jQuery.fx.speeds[opt.duration];\n\n\t\t\t\t} else {\n\t\t\t\t\topt.duration = jQuery.fx.speeds._default;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Normalize opt.queue - true/undefined/null -> \"fx\"\n\t\tif (opt.queue == null || opt.queue === true) {\n\t\t\topt.queue = \"fx\";\n\t\t}\n\n\t\t// Queueing\n\t\topt.old = opt.complete;\n\n\t\topt.complete = function () {\n\t\t\tif (isFunction(opt.old)) {\n\t\t\t\topt.old.call(this);\n\t\t\t}\n\n\t\t\tif (opt.queue) {\n\t\t\t\tjQuery.dequeue(this, opt.queue);\n\t\t\t}\n\t\t};\n\n\t\treturn opt;\n\t};\n\n\tjQuery.fn.extend({\n\t\tfadeTo: function (speed, to, easing, callback) {\n\n\t\t\t// Show any hidden elements after setting opacity to 0\n\t\t\treturn this.filter(isHiddenWithinTree).css(\"opacity\", 0).show()\n\n\t\t\t\t// Animate to the value specified\n\t\t\t\t.end().animate({ opacity: to }, speed, easing, callback);\n\t\t},\n\t\tanimate: function (prop, speed, easing, callback) {\n\t\t\tvar empty = jQuery.isEmptyObject(prop),\n\t\t\t\toptall = jQuery.speed(speed, easing, callback),\n\t\t\t\tdoAnimation = function () {\n\n\t\t\t\t\t// Operate on a copy of prop so per-property easing won't be lost\n\t\t\t\t\tvar anim = Animation(this, jQuery.extend({}, prop), optall);\n\n\t\t\t\t\t// Empty animations, or finishing resolves immediately\n\t\t\t\t\tif (empty || dataPriv.get(this, \"finish\")) {\n\t\t\t\t\t\tanim.stop(true);\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\tdoAnimation.finish = doAnimation;\n\n\t\t\treturn empty || optall.queue === false ?\n\t\t\t\tthis.each(doAnimation) :\n\t\t\t\tthis.queue(optall.queue, doAnimation);\n\t\t},\n\t\tstop: function (type, clearQueue, gotoEnd) {\n\t\t\tvar stopQueue = function (hooks) {\n\t\t\t\tvar stop = hooks.stop;\n\t\t\t\tdelete hooks.stop;\n\t\t\t\tstop(gotoEnd);\n\t\t\t};\n\n\t\t\tif (typeof type !== \"string\") {\n\t\t\t\tgotoEnd = clearQueue;\n\t\t\t\tclearQueue = type;\n\t\t\t\ttype = undefined;\n\t\t\t}\n\t\t\tif (clearQueue) {\n\t\t\t\tthis.queue(type || \"fx\", []);\n\t\t\t}\n\n\t\t\treturn this.each(function () {\n\t\t\t\tvar dequeue = true,\n\t\t\t\t\tindex = type != null && type + \"queueHooks\",\n\t\t\t\t\ttimers = jQuery.timers,\n\t\t\t\t\tdata = dataPriv.get(this);\n\n\t\t\t\tif (index) {\n\t\t\t\t\tif (data[index] && data[index].stop) {\n\t\t\t\t\t\tstopQueue(data[index]);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tfor (index in data) {\n\t\t\t\t\t\tif (data[index] && data[index].stop && rrun.test(index)) {\n\t\t\t\t\t\t\tstopQueue(data[index]);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tfor (index = timers.length; index--;) {\n\t\t\t\t\tif (timers[index].elem === this &&\n\t\t\t\t\t\t(type == null || timers[index].queue === type)) {\n\n\t\t\t\t\t\ttimers[index].anim.stop(gotoEnd);\n\t\t\t\t\t\tdequeue = false;\n\t\t\t\t\t\ttimers.splice(index, 1);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Start the next in the queue if the last step wasn't forced.\n\t\t\t\t// Timers currently will call their complete callbacks, which\n\t\t\t\t// will dequeue but only if they were gotoEnd.\n\t\t\t\tif (dequeue || !gotoEnd) {\n\t\t\t\t\tjQuery.dequeue(this, type);\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\t\tfinish: function (type) {\n\t\t\tif (type !== false) {\n\t\t\t\ttype = type || \"fx\";\n\t\t\t}\n\t\t\treturn this.each(function () {\n\t\t\t\tvar index,\n\t\t\t\t\tdata = dataPriv.get(this),\n\t\t\t\t\tqueue = data[type + \"queue\"],\n\t\t\t\t\thooks = data[type + \"queueHooks\"],\n\t\t\t\t\ttimers = jQuery.timers,\n\t\t\t\t\tlength = queue ? queue.length : 0;\n\n\t\t\t\t// Enable finishing flag on private data\n\t\t\t\tdata.finish = true;\n\n\t\t\t\t// Empty the queue first\n\t\t\t\tjQuery.queue(this, type, []);\n\n\t\t\t\tif (hooks && hooks.stop) {\n\t\t\t\t\thooks.stop.call(this, true);\n\t\t\t\t}\n\n\t\t\t\t// Look for any active animations, and finish them\n\t\t\t\tfor (index = timers.length; index--;) {\n\t\t\t\t\tif (timers[index].elem === this && timers[index].queue === type) {\n\t\t\t\t\t\ttimers[index].anim.stop(true);\n\t\t\t\t\t\ttimers.splice(index, 1);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Look for any animations in the old queue and finish them\n\t\t\t\tfor (index = 0; index < length; index++) {\n\t\t\t\t\tif (queue[index] && queue[index].finish) {\n\t\t\t\t\t\tqueue[index].finish.call(this);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Turn off finishing flag\n\t\t\t\tdelete data.finish;\n\t\t\t});\n\t\t}\n\t});\n\n\tjQuery.each([\"toggle\", \"show\", \"hide\"], function (_i, name) {\n\t\tvar cssFn = jQuery.fn[name];\n\t\tjQuery.fn[name] = function (speed, easing, callback) {\n\t\t\treturn speed == null || typeof speed === \"boolean\" ?\n\t\t\t\tcssFn.apply(this, arguments) :\n\t\t\t\tthis.animate(genFx(name, true), speed, easing, callback);\n\t\t};\n\t});\n\n\t// Generate shortcuts for custom animations\n\tjQuery.each({\n\t\tslideDown: genFx(\"show\"),\n\t\tslideUp: genFx(\"hide\"),\n\t\tslideToggle: genFx(\"toggle\"),\n\t\tfadeIn: { opacity: \"show\" },\n\t\tfadeOut: { opacity: \"hide\" },\n\t\tfadeToggle: { opacity: \"toggle\" }\n\t}, function (name, props) {\n\t\tjQuery.fn[name] = function (speed, easing, callback) {\n\t\t\treturn this.animate(props, speed, easing, callback);\n\t\t};\n\t});\n\n\tjQuery.timers = [];\n\tjQuery.fx.tick = function () {\n\t\tvar timer,\n\t\t\ti = 0,\n\t\t\ttimers = jQuery.timers;\n\n\t\tfxNow = Date.now();\n\n\t\tfor (; i < timers.length; i++) {\n\t\t\ttimer = timers[i];\n\n\t\t\t// Run the timer and safely remove it when done (allowing for external removal)\n\t\t\tif (!timer() && timers[i] === timer) {\n\t\t\t\ttimers.splice(i--, 1);\n\t\t\t}\n\t\t}\n\n\t\tif (!timers.length) {\n\t\t\tjQuery.fx.stop();\n\t\t}\n\t\tfxNow = undefined;\n\t};\n\n\tjQuery.fx.timer = function (timer) {\n\t\tjQuery.timers.push(timer);\n\t\tjQuery.fx.start();\n\t};\n\n\tjQuery.fx.interval = 13;\n\tjQuery.fx.start = function () {\n\t\tif (inProgress) {\n\t\t\treturn;\n\t\t}\n\n\t\tinProgress = true;\n\t\tschedule();\n\t};\n\n\tjQuery.fx.stop = function () {\n\t\tinProgress = null;\n\t};\n\n\tjQuery.fx.speeds = {\n\t\tslow: 600,\n\t\tfast: 200,\n\n\t\t// Default speed\n\t\t_default: 400\n\t};\n\n\n\t// Based off of the plugin by Clint Helfers, with permission.\n\tjQuery.fn.delay = function (time, type) {\n\t\ttime = jQuery.fx ? jQuery.fx.speeds[time] || time : time;\n\t\ttype = type || \"fx\";\n\n\t\treturn this.queue(type, function (next, hooks) {\n\t\t\tvar timeout = window.setTimeout(next, time);\n\t\t\thooks.stop = function () {\n\t\t\t\twindow.clearTimeout(timeout);\n\t\t\t};\n\t\t});\n\t};\n\n\n\t(function () {\n\t\tvar input = document.createElement(\"input\"),\n\t\t\tselect = document.createElement(\"select\"),\n\t\t\topt = select.appendChild(document.createElement(\"option\"));\n\n\t\tinput.type = \"checkbox\";\n\n\t\t// Support: Android <=4.3 only\n\t\t// Default value for a checkbox should be \"on\"\n\t\tsupport.checkOn = input.value !== \"\";\n\n\t\t// Support: IE <=11 only\n\t\t// Must access selectedIndex to make default options select\n\t\tsupport.optSelected = opt.selected;\n\n\t\t// Support: IE <=11 only\n\t\t// An input loses its value after becoming a radio\n\t\tinput = document.createElement(\"input\");\n\t\tinput.value = \"t\";\n\t\tinput.type = \"radio\";\n\t\tsupport.radioValue = input.value === \"t\";\n\t})();\n\n\n\tvar boolHook,\n\t\tattrHandle = jQuery.expr.attrHandle;\n\n\tjQuery.fn.extend({\n\t\tattr: function (name, value) {\n\t\t\treturn access(this, jQuery.attr, name, value, arguments.length > 1);\n\t\t},\n\n\t\tremoveAttr: function (name) {\n\t\t\treturn this.each(function () {\n\t\t\t\tjQuery.removeAttr(this, name);\n\t\t\t});\n\t\t}\n\t});\n\n\tjQuery.extend({\n\t\tattr: function (elem, name, value) {\n\t\t\tvar ret, hooks,\n\t\t\t\tnType = elem.nodeType;\n\n\t\t\t// Don't get/set attributes on text, comment and attribute nodes\n\t\t\tif (nType === 3 || nType === 8 || nType === 2) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Fallback to prop when attributes are not supported\n\t\t\tif (typeof elem.getAttribute === \"undefined\") {\n\t\t\t\treturn jQuery.prop(elem, name, value);\n\t\t\t}\n\n\t\t\t// Attribute hooks are determined by the lowercase version\n\t\t\t// Grab necessary hook if one is defined\n\t\t\tif (nType !== 1 || !jQuery.isXMLDoc(elem)) {\n\t\t\t\thooks = jQuery.attrHooks[name.toLowerCase()] ||\n\t\t\t\t\t(jQuery.expr.match.bool.test(name) ? boolHook : undefined);\n\t\t\t}\n\n\t\t\tif (value !== undefined) {\n\t\t\t\tif (value === null) {\n\t\t\t\t\tjQuery.removeAttr(elem, name);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (hooks && \"set\" in hooks &&\n\t\t\t\t\t(ret = hooks.set(elem, value, name)) !== undefined) {\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\n\t\t\t\telem.setAttribute(name, value + \"\");\n\t\t\t\treturn value;\n\t\t\t}\n\n\t\t\tif (hooks && \"get\" in hooks && (ret = hooks.get(elem, name)) !== null) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\tret = jQuery.find.attr(elem, name);\n\n\t\t\t// Non-existent attributes return null, we normalize to undefined\n\t\t\treturn ret == null ? undefined : ret;\n\t\t},\n\n\t\tattrHooks: {\n\t\t\ttype: {\n\t\t\t\tset: function (elem, value) {\n\t\t\t\t\tif (!support.radioValue && value === \"radio\" &&\n\t\t\t\t\t\tnodeName(elem, \"input\")) {\n\t\t\t\t\t\tvar val = elem.value;\n\t\t\t\t\t\telem.setAttribute(\"type\", value);\n\t\t\t\t\t\tif (val) {\n\t\t\t\t\t\t\telem.value = val;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn value;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tremoveAttr: function (elem, value) {\n\t\t\tvar name,\n\t\t\t\ti = 0,\n\n\t\t\t\t// Attribute names can contain non-HTML whitespace characters\n\t\t\t\t// https://html.spec.whatwg.org/multipage/syntax.html#attributes-2\n\t\t\t\tattrNames = value && value.match(rnothtmlwhite);\n\n\t\t\tif (attrNames && elem.nodeType === 1) {\n\t\t\t\twhile ((name = attrNames[i++])) {\n\t\t\t\t\telem.removeAttribute(name);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\n\t// Hooks for boolean attributes\n\tboolHook = {\n\t\tset: function (elem, value, name) {\n\t\t\tif (value === false) {\n\n\t\t\t\t// Remove boolean attributes when set to false\n\t\t\t\tjQuery.removeAttr(elem, name);\n\t\t\t} else {\n\t\t\t\telem.setAttribute(name, name);\n\t\t\t}\n\t\t\treturn name;\n\t\t}\n\t};\n\n\tjQuery.each(jQuery.expr.match.bool.source.match(/\\w+/g), function (_i, name) {\n\t\tvar getter = attrHandle[name] || jQuery.find.attr;\n\n\t\tattrHandle[name] = function (elem, name, isXML) {\n\t\t\tvar ret, handle,\n\t\t\t\tlowercaseName = name.toLowerCase();\n\n\t\t\tif (!isXML) {\n\n\t\t\t\t// Avoid an infinite loop by temporarily removing this function from the getter\n\t\t\t\thandle = attrHandle[lowercaseName];\n\t\t\t\tattrHandle[lowercaseName] = ret;\n\t\t\t\tret = getter(elem, name, isXML) != null ?\n\t\t\t\t\tlowercaseName :\n\t\t\t\t\tnull;\n\t\t\t\tattrHandle[lowercaseName] = handle;\n\t\t\t}\n\t\t\treturn ret;\n\t\t};\n\t});\n\n\n\n\n\tvar rfocusable = /^(?:input|select|textarea|button)$/i,\n\t\trclickable = /^(?:a|area)$/i;\n\n\tjQuery.fn.extend({\n\t\tprop: function (name, value) {\n\t\t\treturn access(this, jQuery.prop, name, value, arguments.length > 1);\n\t\t},\n\n\t\tremoveProp: function (name) {\n\t\t\treturn this.each(function () {\n\t\t\t\tdelete this[jQuery.propFix[name] || name];\n\t\t\t});\n\t\t}\n\t});\n\n\tjQuery.extend({\n\t\tprop: function (elem, name, value) {\n\t\t\tvar ret, hooks,\n\t\t\t\tnType = elem.nodeType;\n\n\t\t\t// Don't get/set properties on text, comment and attribute nodes\n\t\t\tif (nType === 3 || nType === 8 || nType === 2) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (nType !== 1 || !jQuery.isXMLDoc(elem)) {\n\n\t\t\t\t// Fix name and attach hooks\n\t\t\t\tname = jQuery.propFix[name] || name;\n\t\t\t\thooks = jQuery.propHooks[name];\n\t\t\t}\n\n\t\t\tif (value !== undefined) {\n\t\t\t\tif (hooks && \"set\" in hooks &&\n\t\t\t\t\t(ret = hooks.set(elem, value, name)) !== undefined) {\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\n\t\t\t\treturn (elem[name] = value);\n\t\t\t}\n\n\t\t\tif (hooks && \"get\" in hooks && (ret = hooks.get(elem, name)) !== null) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\treturn elem[name];\n\t\t},\n\n\t\tpropHooks: {\n\t\t\ttabIndex: {\n\t\t\t\tget: function (elem) {\n\n\t\t\t\t\t// Support: IE <=9 - 11 only\n\t\t\t\t\t// elem.tabIndex doesn't always return the\n\t\t\t\t\t// correct value when it hasn't been explicitly set\n\t\t\t\t\t// Use proper attribute retrieval (trac-12072)\n\t\t\t\t\tvar tabindex = jQuery.find.attr(elem, \"tabindex\");\n\n\t\t\t\t\tif (tabindex) {\n\t\t\t\t\t\treturn parseInt(tabindex, 10);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (\n\t\t\t\t\t\trfocusable.test(elem.nodeName) ||\n\t\t\t\t\t\trclickable.test(elem.nodeName) &&\n\t\t\t\t\t\telem.href\n\t\t\t\t\t) {\n\t\t\t\t\t\treturn 0;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn -1;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tpropFix: {\n\t\t\t\"for\": \"htmlFor\",\n\t\t\t\"class\": \"className\"\n\t\t}\n\t});\n\n\t// Support: IE <=11 only\n\t// Accessing the selectedIndex property\n\t// forces the browser to respect setting selected\n\t// on the option\n\t// The getter ensures a default option is selected\n\t// when in an optgroup\n\t// eslint rule \"no-unused-expressions\" is disabled for this code\n\t// since it considers such accessions noop\n\tif (!support.optSelected) {\n\t\tjQuery.propHooks.selected = {\n\t\t\tget: function (elem) {\n\n\t\t\t\t/* eslint no-unused-expressions: \"off\" */\n\n\t\t\t\tvar parent = elem.parentNode;\n\t\t\t\tif (parent && parent.parentNode) {\n\t\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t\t}\n\t\t\t\treturn null;\n\t\t\t},\n\t\t\tset: function (elem) {\n\n\t\t\t\t/* eslint no-unused-expressions: \"off\" */\n\n\t\t\t\tvar parent = elem.parentNode;\n\t\t\t\tif (parent) {\n\t\t\t\t\tparent.selectedIndex;\n\n\t\t\t\t\tif (parent.parentNode) {\n\t\t\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n\n\tjQuery.each([\n\t\t\"tabIndex\",\n\t\t\"readOnly\",\n\t\t\"maxLength\",\n\t\t\"cellSpacing\",\n\t\t\"cellPadding\",\n\t\t\"rowSpan\",\n\t\t\"colSpan\",\n\t\t\"useMap\",\n\t\t\"frameBorder\",\n\t\t\"contentEditable\"\n\t], function () {\n\t\tjQuery.propFix[this.toLowerCase()] = this;\n\t});\n\n\n\n\n\t// Strip and collapse whitespace according to HTML spec\n\t// https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace\n\tfunction stripAndCollapse(value) {\n\t\tvar tokens = value.match(rnothtmlwhite) || [];\n\t\treturn tokens.join(\" \");\n\t}\n\n\n\tfunction getClass(elem) {\n\t\treturn elem.getAttribute && elem.getAttribute(\"class\") || \"\";\n\t}\n\n\tfunction classesToArray(value) {\n\t\tif (Array.isArray(value)) {\n\t\t\treturn value;\n\t\t}\n\t\tif (typeof value === \"string\") {\n\t\t\treturn value.match(rnothtmlwhite) || [];\n\t\t}\n\t\treturn [];\n\t}\n\n\tjQuery.fn.extend({\n\t\taddClass: function (value) {\n\t\t\tvar classNames, cur, curValue, className, i, finalValue;\n\n\t\t\tif (isFunction(value)) {\n\t\t\t\treturn this.each(function (j) {\n\t\t\t\t\tjQuery(this).addClass(value.call(this, j, getClass(this)));\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tclassNames = classesToArray(value);\n\n\t\t\tif (classNames.length) {\n\t\t\t\treturn this.each(function () {\n\t\t\t\t\tcurValue = getClass(this);\n\t\t\t\t\tcur = this.nodeType === 1 && (\" \" + stripAndCollapse(curValue) + \" \");\n\n\t\t\t\t\tif (cur) {\n\t\t\t\t\t\tfor (i = 0; i < classNames.length; i++) {\n\t\t\t\t\t\t\tclassName = classNames[i];\n\t\t\t\t\t\t\tif (cur.indexOf(\" \" + className + \" \") < 0) {\n\t\t\t\t\t\t\t\tcur += className + \" \";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\t\tfinalValue = stripAndCollapse(cur);\n\t\t\t\t\t\tif (curValue !== finalValue) {\n\t\t\t\t\t\t\tthis.setAttribute(\"class\", finalValue);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn this;\n\t\t},\n\n\t\tremoveClass: function (value) {\n\t\t\tvar classNames, cur, curValue, className, i, finalValue;\n\n\t\t\tif (isFunction(value)) {\n\t\t\t\treturn this.each(function (j) {\n\t\t\t\t\tjQuery(this).removeClass(value.call(this, j, getClass(this)));\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (!arguments.length) {\n\t\t\t\treturn this.attr(\"class\", \"\");\n\t\t\t}\n\n\t\t\tclassNames = classesToArray(value);\n\n\t\t\tif (classNames.length) {\n\t\t\t\treturn this.each(function () {\n\t\t\t\t\tcurValue = getClass(this);\n\n\t\t\t\t\t// This expression is here for better compressibility (see addClass)\n\t\t\t\t\tcur = this.nodeType === 1 && (\" \" + stripAndCollapse(curValue) + \" \");\n\n\t\t\t\t\tif (cur) {\n\t\t\t\t\t\tfor (i = 0; i < classNames.length; i++) {\n\t\t\t\t\t\t\tclassName = classNames[i];\n\n\t\t\t\t\t\t\t// Remove *all* instances\n\t\t\t\t\t\t\twhile (cur.indexOf(\" \" + className + \" \") > -1) {\n\t\t\t\t\t\t\t\tcur = cur.replace(\" \" + className + \" \", \" \");\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\t\tfinalValue = stripAndCollapse(cur);\n\t\t\t\t\t\tif (curValue !== finalValue) {\n\t\t\t\t\t\t\tthis.setAttribute(\"class\", finalValue);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn this;\n\t\t},\n\n\t\ttoggleClass: function (value, stateVal) {\n\t\t\tvar classNames, className, i, self,\n\t\t\t\ttype = typeof value,\n\t\t\t\tisValidValue = type === \"string\" || Array.isArray(value);\n\n\t\t\tif (isFunction(value)) {\n\t\t\t\treturn this.each(function (i) {\n\t\t\t\t\tjQuery(this).toggleClass(\n\t\t\t\t\t\tvalue.call(this, i, getClass(this), stateVal),\n\t\t\t\t\t\tstateVal\n\t\t\t\t\t);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (typeof stateVal === \"boolean\" && isValidValue) {\n\t\t\t\treturn stateVal ? this.addClass(value) : this.removeClass(value);\n\t\t\t}\n\n\t\t\tclassNames = classesToArray(value);\n\n\t\t\treturn this.each(function () {\n\t\t\t\tif (isValidValue) {\n\n\t\t\t\t\t// Toggle individual class names\n\t\t\t\t\tself = jQuery(this);\n\n\t\t\t\t\tfor (i = 0; i < classNames.length; i++) {\n\t\t\t\t\t\tclassName = classNames[i];\n\n\t\t\t\t\t\t// Check each className given, space separated list\n\t\t\t\t\t\tif (self.hasClass(className)) {\n\t\t\t\t\t\t\tself.removeClass(className);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tself.addClass(className);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Toggle whole class name\n\t\t\t\t} else if (value === undefined || type === \"boolean\") {\n\t\t\t\t\tclassName = getClass(this);\n\t\t\t\t\tif (className) {\n\n\t\t\t\t\t\t// Store className if set\n\t\t\t\t\t\tdataPriv.set(this, \"__className__\", className);\n\t\t\t\t\t}\n\n\t\t\t\t\t// If the element has a class name or if we're passed `false`,\n\t\t\t\t\t// then remove the whole classname (if there was one, the above saved it).\n\t\t\t\t\t// Otherwise bring back whatever was previously saved (if anything),\n\t\t\t\t\t// falling back to the empty string if nothing was stored.\n\t\t\t\t\tif (this.setAttribute) {\n\t\t\t\t\t\tthis.setAttribute(\"class\",\n\t\t\t\t\t\t\tclassName || value === false ?\n\t\t\t\t\t\t\t\t\"\" :\n\t\t\t\t\t\t\t\tdataPriv.get(this, \"__className__\") || \"\"\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\thasClass: function (selector) {\n\t\t\tvar className, elem,\n\t\t\t\ti = 0;\n\n\t\t\tclassName = \" \" + selector + \" \";\n\t\t\twhile ((elem = this[i++])) {\n\t\t\t\tif (elem.nodeType === 1 &&\n\t\t\t\t\t(\" \" + stripAndCollapse(getClass(elem)) + \" \").indexOf(className) > -1) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn false;\n\t\t}\n\t});\n\n\n\n\n\tvar rreturn = /\\r/g;\n\n\tjQuery.fn.extend({\n\t\tval: function (value) {\n\t\t\tvar hooks, ret, valueIsFunction,\n\t\t\t\telem = this[0];\n\n\t\t\tif (!arguments.length) {\n\t\t\t\tif (elem) {\n\t\t\t\t\thooks = jQuery.valHooks[elem.type] ||\n\t\t\t\t\t\tjQuery.valHooks[elem.nodeName.toLowerCase()];\n\n\t\t\t\t\tif (hooks &&\n\t\t\t\t\t\t\"get\" in hooks &&\n\t\t\t\t\t\t(ret = hooks.get(elem, \"value\")) !== undefined\n\t\t\t\t\t) {\n\t\t\t\t\t\treturn ret;\n\t\t\t\t\t}\n\n\t\t\t\t\tret = elem.value;\n\n\t\t\t\t\t// Handle most common string cases\n\t\t\t\t\tif (typeof ret === \"string\") {\n\t\t\t\t\t\treturn ret.replace(rreturn, \"\");\n\t\t\t\t\t}\n\n\t\t\t\t\t// Handle cases where value is null/undef or number\n\t\t\t\t\treturn ret == null ? \"\" : ret;\n\t\t\t\t}\n\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvalueIsFunction = isFunction(value);\n\n\t\t\treturn this.each(function (i) {\n\t\t\t\tvar val;\n\n\t\t\t\tif (this.nodeType !== 1) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (valueIsFunction) {\n\t\t\t\t\tval = value.call(this, i, jQuery(this).val());\n\t\t\t\t} else {\n\t\t\t\t\tval = value;\n\t\t\t\t}\n\n\t\t\t\t// Treat null/undefined as \"\"; convert numbers to string\n\t\t\t\tif (val == null) {\n\t\t\t\t\tval = \"\";\n\n\t\t\t\t} else if (typeof val === \"number\") {\n\t\t\t\t\tval += \"\";\n\n\t\t\t\t} else if (Array.isArray(val)) {\n\t\t\t\t\tval = jQuery.map(val, function (value) {\n\t\t\t\t\t\treturn value == null ? \"\" : value + \"\";\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\thooks = jQuery.valHooks[this.type] || jQuery.valHooks[this.nodeName.toLowerCase()];\n\n\t\t\t\t// If set returns undefined, fall back to normal setting\n\t\t\t\tif (!hooks || !(\"set\" in hooks) || hooks.set(this, val, \"value\") === undefined) {\n\t\t\t\t\tthis.value = val;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t});\n\n\tjQuery.extend({\n\t\tvalHooks: {\n\t\t\toption: {\n\t\t\t\tget: function (elem) {\n\n\t\t\t\t\tvar val = jQuery.find.attr(elem, \"value\");\n\t\t\t\t\treturn val != null ?\n\t\t\t\t\t\tval :\n\n\t\t\t\t\t\t// Support: IE <=10 - 11 only\n\t\t\t\t\t\t// option.text throws exceptions (trac-14686, trac-14858)\n\t\t\t\t\t\t// Strip and collapse whitespace\n\t\t\t\t\t\t// https://html.spec.whatwg.org/#strip-and-collapse-whitespace\n\t\t\t\t\t\tstripAndCollapse(jQuery.text(elem));\n\t\t\t\t}\n\t\t\t},\n\t\t\tselect: {\n\t\t\t\tget: function (elem) {\n\t\t\t\t\tvar value, option, i,\n\t\t\t\t\t\toptions = elem.options,\n\t\t\t\t\t\tindex = elem.selectedIndex,\n\t\t\t\t\t\tone = elem.type === \"select-one\",\n\t\t\t\t\t\tvalues = one ? null : [],\n\t\t\t\t\t\tmax = one ? index + 1 : options.length;\n\n\t\t\t\t\tif (index < 0) {\n\t\t\t\t\t\ti = max;\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\ti = one ? index : 0;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Loop through all the selected options\n\t\t\t\t\tfor (; i < max; i++) {\n\t\t\t\t\t\toption = options[i];\n\n\t\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t\t// IE8-9 doesn't update selected after form reset (trac-2551)\n\t\t\t\t\t\tif ((option.selected || i === index) &&\n\n\t\t\t\t\t\t\t// Don't return options that are disabled or in a disabled optgroup\n\t\t\t\t\t\t\t!option.disabled &&\n\t\t\t\t\t\t\t(!option.parentNode.disabled ||\n\t\t\t\t\t\t\t\t!nodeName(option.parentNode, \"optgroup\"))) {\n\n\t\t\t\t\t\t\t// Get the specific value for the option\n\t\t\t\t\t\t\tvalue = jQuery(option).val();\n\n\t\t\t\t\t\t\t// We don't need an array for one selects\n\t\t\t\t\t\t\tif (one) {\n\t\t\t\t\t\t\t\treturn value;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Multi-Selects return an array\n\t\t\t\t\t\t\tvalues.push(value);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn values;\n\t\t\t\t},\n\n\t\t\t\tset: function (elem, value) {\n\t\t\t\t\tvar optionSet, option,\n\t\t\t\t\t\toptions = elem.options,\n\t\t\t\t\t\tvalues = jQuery.makeArray(value),\n\t\t\t\t\t\ti = options.length;\n\n\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\toption = options[i];\n\n\t\t\t\t\t\t/* eslint-disable no-cond-assign */\n\n\t\t\t\t\t\tif (option.selected =\n\t\t\t\t\t\t\tjQuery.inArray(jQuery.valHooks.option.get(option), values) > -1\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\toptionSet = true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t/* eslint-enable no-cond-assign */\n\t\t\t\t\t}\n\n\t\t\t\t\t// Force browsers to behave consistently when non-matching value is set\n\t\t\t\t\tif (!optionSet) {\n\t\t\t\t\t\telem.selectedIndex = -1;\n\t\t\t\t\t}\n\t\t\t\t\treturn values;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\n\t// Radios and checkboxes getter/setter\n\tjQuery.each([\"radio\", \"checkbox\"], function () {\n\t\tjQuery.valHooks[this] = {\n\t\t\tset: function (elem, value) {\n\t\t\t\tif (Array.isArray(value)) {\n\t\t\t\t\treturn (elem.checked = jQuery.inArray(jQuery(elem).val(), value) > -1);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\tif (!support.checkOn) {\n\t\t\tjQuery.valHooks[this].get = function (elem) {\n\t\t\t\treturn elem.getAttribute(\"value\") === null ? \"on\" : elem.value;\n\t\t\t};\n\t\t}\n\t});\n\n\n\n\n\t// Return jQuery for attributes-only inclusion\n\tvar location = window.location;\n\n\tvar nonce = { guid: Date.now() };\n\n\tvar rquery = (/\\?/);\n\n\n\n\t// Cross-browser xml parsing\n\tjQuery.parseXML = function (data) {\n\t\tvar xml, parserErrorElem;\n\t\tif (!data || typeof data !== \"string\") {\n\t\t\treturn null;\n\t\t}\n\n\t\t// Support: IE 9 - 11 only\n\t\t// IE throws on parseFromString with invalid input.\n\t\ttry {\n\t\t\txml = (new window.DOMParser()).parseFromString(data, \"text/xml\");\n\t\t} catch (e) { }\n\n\t\tparserErrorElem = xml && xml.getElementsByTagName(\"parsererror\")[0];\n\t\tif (!xml || parserErrorElem) {\n\t\t\tjQuery.error(\"Invalid XML: \" + (\n\t\t\t\tparserErrorElem ?\n\t\t\t\t\tjQuery.map(parserErrorElem.childNodes, function (el) {\n\t\t\t\t\t\treturn el.textContent;\n\t\t\t\t\t}).join(\"\\n\") :\n\t\t\t\t\tdata\n\t\t\t));\n\t\t}\n\t\treturn xml;\n\t};\n\n\n\tvar rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,\n\t\tstopPropagationCallback = function (e) {\n\t\t\te.stopPropagation();\n\t\t};\n\n\tjQuery.extend(jQuery.event, {\n\n\t\ttrigger: function (event, data, elem, onlyHandlers) {\n\n\t\t\tvar i, cur, tmp, bubbleType, ontype, handle, special, lastElement,\n\t\t\t\teventPath = [elem || document],\n\t\t\t\ttype = hasOwn.call(event, \"type\") ? event.type : event,\n\t\t\t\tnamespaces = hasOwn.call(event, \"namespace\") ? event.namespace.split(\".\") : [];\n\n\t\t\tcur = lastElement = tmp = elem = elem || document;\n\n\t\t\t// Don't do events on text and comment nodes\n\t\t\tif (elem.nodeType === 3 || elem.nodeType === 8) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// focus/blur morphs to focusin/out; ensure we're not firing them right now\n\t\t\tif (rfocusMorph.test(type + jQuery.event.triggered)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (type.indexOf(\".\") > -1) {\n\n\t\t\t\t// Namespaced trigger; create a regexp to match event type in handle()\n\t\t\t\tnamespaces = type.split(\".\");\n\t\t\t\ttype = namespaces.shift();\n\t\t\t\tnamespaces.sort();\n\t\t\t}\n\t\t\tontype = type.indexOf(\":\") < 0 && \"on\" + type;\n\n\t\t\t// Caller can pass in a jQuery.Event object, Object, or just an event type string\n\t\t\tevent = event[jQuery.expando] ?\n\t\t\t\tevent :\n\t\t\t\tnew jQuery.Event(type, typeof event === \"object\" && event);\n\n\t\t\t// Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)\n\t\t\tevent.isTrigger = onlyHandlers ? 2 : 3;\n\t\t\tevent.namespace = namespaces.join(\".\");\n\t\t\tevent.rnamespace = event.namespace ?\n\t\t\t\tnew RegExp(\"(^|\\\\.)\" + namespaces.join(\"\\\\.(?:.*\\\\.|)\") + \"(\\\\.|$)\") :\n\t\t\t\tnull;\n\n\t\t\t// Clean up the event in case it is being reused\n\t\t\tevent.result = undefined;\n\t\t\tif (!event.target) {\n\t\t\t\tevent.target = elem;\n\t\t\t}\n\n\t\t\t// Clone any incoming data and prepend the event, creating the handler arg list\n\t\t\tdata = data == null ?\n\t\t\t\t[event] :\n\t\t\t\tjQuery.makeArray(data, [event]);\n\n\t\t\t// Allow special events to draw outside the lines\n\t\t\tspecial = jQuery.event.special[type] || {};\n\t\t\tif (!onlyHandlers && special.trigger && special.trigger.apply(elem, data) === false) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Determine event propagation path in advance, per W3C events spec (trac-9951)\n\t\t\t// Bubble up to document, then to window; watch for a global ownerDocument var (trac-9724)\n\t\t\tif (!onlyHandlers && !special.noBubble && !isWindow(elem)) {\n\n\t\t\t\tbubbleType = special.delegateType || type;\n\t\t\t\tif (!rfocusMorph.test(bubbleType + type)) {\n\t\t\t\t\tcur = cur.parentNode;\n\t\t\t\t}\n\t\t\t\tfor (; cur; cur = cur.parentNode) {\n\t\t\t\t\teventPath.push(cur);\n\t\t\t\t\ttmp = cur;\n\t\t\t\t}\n\n\t\t\t\t// Only add window if we got to document (e.g., not plain obj or detached DOM)\n\t\t\t\tif (tmp === (elem.ownerDocument || document)) {\n\t\t\t\t\teventPath.push(tmp.defaultView || tmp.parentWindow || window);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Fire handlers on the event path\n\t\t\ti = 0;\n\t\t\twhile ((cur = eventPath[i++]) && !event.isPropagationStopped()) {\n\t\t\t\tlastElement = cur;\n\t\t\t\tevent.type = i > 1 ?\n\t\t\t\t\tbubbleType :\n\t\t\t\t\tspecial.bindType || type;\n\n\t\t\t\t// jQuery handler\n\t\t\t\thandle = (dataPriv.get(cur, \"events\") || Object.create(null))[event.type] &&\n\t\t\t\t\tdataPriv.get(cur, \"handle\");\n\t\t\t\tif (handle) {\n\t\t\t\t\thandle.apply(cur, data);\n\t\t\t\t}\n\n\t\t\t\t// Native handler\n\t\t\t\thandle = ontype && cur[ontype];\n\t\t\t\tif (handle && handle.apply && acceptData(cur)) {\n\t\t\t\t\tevent.result = handle.apply(cur, data);\n\t\t\t\t\tif (event.result === false) {\n\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tevent.type = type;\n\n\t\t\t// If nobody prevented the default action, do it now\n\t\t\tif (!onlyHandlers && !event.isDefaultPrevented()) {\n\n\t\t\t\tif ((!special._default ||\n\t\t\t\t\tspecial._default.apply(eventPath.pop(), data) === false) &&\n\t\t\t\t\tacceptData(elem)) {\n\n\t\t\t\t\t// Call a native DOM method on the target with the same name as the event.\n\t\t\t\t\t// Don't do default actions on window, that's where global variables be (trac-6170)\n\t\t\t\t\tif (ontype && isFunction(elem[type]) && !isWindow(elem)) {\n\n\t\t\t\t\t\t// Don't re-trigger an onFOO event when we call its FOO() method\n\t\t\t\t\t\ttmp = elem[ontype];\n\n\t\t\t\t\t\tif (tmp) {\n\t\t\t\t\t\t\telem[ontype] = null;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Prevent re-triggering of the same event, since we already bubbled it above\n\t\t\t\t\t\tjQuery.event.triggered = type;\n\n\t\t\t\t\t\tif (event.isPropagationStopped()) {\n\t\t\t\t\t\t\tlastElement.addEventListener(type, stopPropagationCallback);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\telem[type]();\n\n\t\t\t\t\t\tif (event.isPropagationStopped()) {\n\t\t\t\t\t\t\tlastElement.removeEventListener(type, stopPropagationCallback);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tjQuery.event.triggered = undefined;\n\n\t\t\t\t\t\tif (tmp) {\n\t\t\t\t\t\t\telem[ontype] = tmp;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn event.result;\n\t\t},\n\n\t\t// Piggyback on a donor event to simulate a different one\n\t\t// Used only for `focus(in | out)` events\n\t\tsimulate: function (type, elem, event) {\n\t\t\tvar e = jQuery.extend(\n\t\t\t\tnew jQuery.Event(),\n\t\t\t\tevent,\n\t\t\t\t{\n\t\t\t\t\ttype: type,\n\t\t\t\t\tisSimulated: true\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tjQuery.event.trigger(e, null, elem);\n\t\t}\n\n\t});\n\n\tjQuery.fn.extend({\n\n\t\ttrigger: function (type, data) {\n\t\t\treturn this.each(function () {\n\t\t\t\tjQuery.event.trigger(type, data, this);\n\t\t\t});\n\t\t},\n\t\ttriggerHandler: function (type, data) {\n\t\t\tvar elem = this[0];\n\t\t\tif (elem) {\n\t\t\t\treturn jQuery.event.trigger(type, data, elem, true);\n\t\t\t}\n\t\t}\n\t});\n\n\n\tvar\n\t\trbracket = /\\[\\]$/,\n\t\trCRLF = /\\r?\\n/g,\n\t\trsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,\n\t\trsubmittable = /^(?:input|select|textarea|keygen)/i;\n\n\tfunction buildParams(prefix, obj, traditional, add) {\n\t\tvar name;\n\n\t\tif (Array.isArray(obj)) {\n\n\t\t\t// Serialize array item.\n\t\t\tjQuery.each(obj, function (i, v) {\n\t\t\t\tif (traditional || rbracket.test(prefix)) {\n\n\t\t\t\t\t// Treat each array item as a scalar.\n\t\t\t\t\tadd(prefix, v);\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// Item is non-scalar (array or object), encode its numeric index.\n\t\t\t\t\tbuildParams(\n\t\t\t\t\t\tprefix + \"[\" + (typeof v === \"object\" && v != null ? i : \"\") + \"]\",\n\t\t\t\t\t\tv,\n\t\t\t\t\t\ttraditional,\n\t\t\t\t\t\tadd\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t});\n\n\t\t} else if (!traditional && toType(obj) === \"object\") {\n\n\t\t\t// Serialize object item.\n\t\t\tfor (name in obj) {\n\t\t\t\tbuildParams(prefix + \"[\" + name + \"]\", obj[name], traditional, add);\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// Serialize scalar item.\n\t\t\tadd(prefix, obj);\n\t\t}\n\t}\n\n\t// Serialize an array of form elements or a set of\n\t// key/values into a query string\n\tjQuery.param = function (a, traditional) {\n\t\tvar prefix,\n\t\t\ts = [],\n\t\t\tadd = function (key, valueOrFunction) {\n\n\t\t\t\t// If value is a function, invoke it and use its return value\n\t\t\t\tvar value = isFunction(valueOrFunction) ?\n\t\t\t\t\tvalueOrFunction() :\n\t\t\t\t\tvalueOrFunction;\n\n\t\t\t\ts[s.length] = encodeURIComponent(key) + \"=\" +\n\t\t\t\t\tencodeURIComponent(value == null ? \"\" : value);\n\t\t\t};\n\n\t\tif (a == null) {\n\t\t\treturn \"\";\n\t\t}\n\n\t\t// If an array was passed in, assume that it is an array of form elements.\n\t\tif (Array.isArray(a) || (a.jquery && !jQuery.isPlainObject(a))) {\n\n\t\t\t// Serialize the form elements\n\t\t\tjQuery.each(a, function () {\n\t\t\t\tadd(this.name, this.value);\n\t\t\t});\n\n\t\t} else {\n\n\t\t\t// If traditional, encode the \"old\" way (the way 1.3.2 or older\n\t\t\t// did it), otherwise encode params recursively.\n\t\t\tfor (prefix in a) {\n\t\t\t\tbuildParams(prefix, a[prefix], traditional, add);\n\t\t\t}\n\t\t}\n\n\t\t// Return the resulting serialization\n\t\treturn s.join(\"&\");\n\t};\n\n\tjQuery.fn.extend({\n\t\tserialize: function () {\n\t\t\treturn jQuery.param(this.serializeArray());\n\t\t},\n\t\tserializeArray: function () {\n\t\t\treturn this.map(function () {\n\n\t\t\t\t// Can add propHook for \"elements\" to filter or add form elements\n\t\t\t\tvar elements = jQuery.prop(this, \"elements\");\n\t\t\t\treturn elements ? jQuery.makeArray(elements) : this;\n\t\t\t}).filter(function () {\n\t\t\t\tvar type = this.type;\n\n\t\t\t\t// Use .is( \":disabled\" ) so that fieldset[disabled] works\n\t\t\t\treturn this.name && !jQuery(this).is(\":disabled\") &&\n\t\t\t\t\trsubmittable.test(this.nodeName) && !rsubmitterTypes.test(type) &&\n\t\t\t\t\t(this.checked || !rcheckableType.test(type));\n\t\t\t}).map(function (_i, elem) {\n\t\t\t\tvar val = jQuery(this).val();\n\n\t\t\t\tif (val == null) {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\n\t\t\t\tif (Array.isArray(val)) {\n\t\t\t\t\treturn jQuery.map(val, function (val) {\n\t\t\t\t\t\treturn { name: elem.name, value: val.replace(rCRLF, \"\\r\\n\") };\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\treturn { name: elem.name, value: val.replace(rCRLF, \"\\r\\n\") };\n\t\t\t}).get();\n\t\t}\n\t});\n\n\n\tvar\n\t\tr20 = /%20/g,\n\t\trhash = /#.*$/,\n\t\trantiCache = /([?&])_=[^&]*/,\n\t\trheaders = /^(.*?):[ \\t]*([^\\r\\n]*)$/mg,\n\n\t\t// trac-7653, trac-8125, trac-8152: local protocol detection\n\t\trlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,\n\t\trnoContent = /^(?:GET|HEAD)$/,\n\t\trprotocol = /^\\/\\//,\n\n\t\t/* Prefilters\n\t\t * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)\n\t\t * 2) These are called:\n\t\t *    - BEFORE asking for a transport\n\t\t *    - AFTER param serialization (s.data is a string if s.processData is true)\n\t\t * 3) key is the dataType\n\t\t * 4) the catchall symbol \"*\" can be used\n\t\t * 5) execution will start with transport dataType and THEN continue down to \"*\" if needed\n\t\t */\n\t\tprefilters = {},\n\n\t\t/* Transports bindings\n\t\t * 1) key is the dataType\n\t\t * 2) the catchall symbol \"*\" can be used\n\t\t * 3) selection will start with transport dataType and THEN go to \"*\" if needed\n\t\t */\n\t\ttransports = {},\n\n\t\t// Avoid comment-prolog char sequence (trac-10098); must appease lint and evade compression\n\t\tallTypes = \"*/\".concat(\"*\"),\n\n\t\t// Anchor tag for parsing the document origin\n\t\toriginAnchor = document.createElement(\"a\");\n\n\toriginAnchor.href = location.href;\n\n\t// Base \"constructor\" for jQuery.ajaxPrefilter and jQuery.ajaxTransport\n\tfunction addToPrefiltersOrTransports(structure) {\n\n\t\t// dataTypeExpression is optional and defaults to \"*\"\n\t\treturn function (dataTypeExpression, func) {\n\n\t\t\tif (typeof dataTypeExpression !== \"string\") {\n\t\t\t\tfunc = dataTypeExpression;\n\t\t\t\tdataTypeExpression = \"*\";\n\t\t\t}\n\n\t\t\tvar dataType,\n\t\t\t\ti = 0,\n\t\t\t\tdataTypes = dataTypeExpression.toLowerCase().match(rnothtmlwhite) || [];\n\n\t\t\tif (isFunction(func)) {\n\n\t\t\t\t// For each dataType in the dataTypeExpression\n\t\t\t\twhile ((dataType = dataTypes[i++])) {\n\n\t\t\t\t\t// Prepend if requested\n\t\t\t\t\tif (dataType[0] === \"+\") {\n\t\t\t\t\t\tdataType = dataType.slice(1) || \"*\";\n\t\t\t\t\t\t(structure[dataType] = structure[dataType] || []).unshift(func);\n\n\t\t\t\t\t\t// Otherwise append\n\t\t\t\t\t} else {\n\t\t\t\t\t\t(structure[dataType] = structure[dataType] || []).push(func);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n\n\t// Base inspection function for prefilters and transports\n\tfunction inspectPrefiltersOrTransports(structure, options, originalOptions, jqXHR) {\n\n\t\tvar inspected = {},\n\t\t\tseekingTransport = (structure === transports);\n\n\t\tfunction inspect(dataType) {\n\t\t\tvar selected;\n\t\t\tinspected[dataType] = true;\n\t\t\tjQuery.each(structure[dataType] || [], function (_, prefilterOrFactory) {\n\t\t\t\tvar dataTypeOrTransport = prefilterOrFactory(options, originalOptions, jqXHR);\n\t\t\t\tif (typeof dataTypeOrTransport === \"string\" &&\n\t\t\t\t\t!seekingTransport && !inspected[dataTypeOrTransport]) {\n\n\t\t\t\t\toptions.dataTypes.unshift(dataTypeOrTransport);\n\t\t\t\t\tinspect(dataTypeOrTransport);\n\t\t\t\t\treturn false;\n\t\t\t\t} else if (seekingTransport) {\n\t\t\t\t\treturn !(selected = dataTypeOrTransport);\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn selected;\n\t\t}\n\n\t\treturn inspect(options.dataTypes[0]) || !inspected[\"*\"] && inspect(\"*\");\n\t}\n\n\t// A special extend for ajax options\n\t// that takes \"flat\" options (not to be deep extended)\n\t// Fixes trac-9887\n\tfunction ajaxExtend(target, src) {\n\t\tvar key, deep,\n\t\t\tflatOptions = jQuery.ajaxSettings.flatOptions || {};\n\n\t\tfor (key in src) {\n\t\t\tif (src[key] !== undefined) {\n\t\t\t\t(flatOptions[key] ? target : (deep || (deep = {})))[key] = src[key];\n\t\t\t}\n\t\t}\n\t\tif (deep) {\n\t\t\tjQuery.extend(true, target, deep);\n\t\t}\n\n\t\treturn target;\n\t}\n\n\t/* Handles responses to an ajax request:\n\t * - finds the right dataType (mediates between content-type and expected dataType)\n\t * - returns the corresponding response\n\t */\n\tfunction ajaxHandleResponses(s, jqXHR, responses) {\n\n\t\tvar ct, type, finalDataType, firstDataType,\n\t\t\tcontents = s.contents,\n\t\t\tdataTypes = s.dataTypes;\n\n\t\t// Remove auto dataType and get content-type in the process\n\t\twhile (dataTypes[0] === \"*\") {\n\t\t\tdataTypes.shift();\n\t\t\tif (ct === undefined) {\n\t\t\t\tct = s.mimeType || jqXHR.getResponseHeader(\"Content-Type\");\n\t\t\t}\n\t\t}\n\n\t\t// Check if we're dealing with a known content-type\n\t\tif (ct) {\n\t\t\tfor (type in contents) {\n\t\t\t\tif (contents[type] && contents[type].test(ct)) {\n\t\t\t\t\tdataTypes.unshift(type);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Check to see if we have a response for the expected dataType\n\t\tif (dataTypes[0] in responses) {\n\t\t\tfinalDataType = dataTypes[0];\n\t\t} else {\n\n\t\t\t// Try convertible dataTypes\n\t\t\tfor (type in responses) {\n\t\t\t\tif (!dataTypes[0] || s.converters[type + \" \" + dataTypes[0]]) {\n\t\t\t\t\tfinalDataType = type;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (!firstDataType) {\n\t\t\t\t\tfirstDataType = type;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Or just use first one\n\t\t\tfinalDataType = finalDataType || firstDataType;\n\t\t}\n\n\t\t// If we found a dataType\n\t\t// We add the dataType to the list if needed\n\t\t// and return the corresponding response\n\t\tif (finalDataType) {\n\t\t\tif (finalDataType !== dataTypes[0]) {\n\t\t\t\tdataTypes.unshift(finalDataType);\n\t\t\t}\n\t\t\treturn responses[finalDataType];\n\t\t}\n\t}\n\n\t/* Chain conversions given the request and the original response\n\t * Also sets the responseXXX fields on the jqXHR instance\n\t */\n\tfunction ajaxConvert(s, response, jqXHR, isSuccess) {\n\t\tvar conv2, current, conv, tmp, prev,\n\t\t\tconverters = {},\n\n\t\t\t// Work with a copy of dataTypes in case we need to modify it for conversion\n\t\t\tdataTypes = s.dataTypes.slice();\n\n\t\t// Create converters map with lowercased keys\n\t\tif (dataTypes[1]) {\n\t\t\tfor (conv in s.converters) {\n\t\t\t\tconverters[conv.toLowerCase()] = s.converters[conv];\n\t\t\t}\n\t\t}\n\n\t\tcurrent = dataTypes.shift();\n\n\t\t// Convert to each sequential dataType\n\t\twhile (current) {\n\n\t\t\tif (s.responseFields[current]) {\n\t\t\t\tjqXHR[s.responseFields[current]] = response;\n\t\t\t}\n\n\t\t\t// Apply the dataFilter if provided\n\t\t\tif (!prev && isSuccess && s.dataFilter) {\n\t\t\t\tresponse = s.dataFilter(response, s.dataType);\n\t\t\t}\n\n\t\t\tprev = current;\n\t\t\tcurrent = dataTypes.shift();\n\n\t\t\tif (current) {\n\n\t\t\t\t// There's only work to do if current dataType is non-auto\n\t\t\t\tif (current === \"*\") {\n\n\t\t\t\t\tcurrent = prev;\n\n\t\t\t\t\t// Convert response if prev dataType is non-auto and differs from current\n\t\t\t\t} else if (prev !== \"*\" && prev !== current) {\n\n\t\t\t\t\t// Seek a direct converter\n\t\t\t\t\tconv = converters[prev + \" \" + current] || converters[\"* \" + current];\n\n\t\t\t\t\t// If none found, seek a pair\n\t\t\t\t\tif (!conv) {\n\t\t\t\t\t\tfor (conv2 in converters) {\n\n\t\t\t\t\t\t\t// If conv2 outputs current\n\t\t\t\t\t\t\ttmp = conv2.split(\" \");\n\t\t\t\t\t\t\tif (tmp[1] === current) {\n\n\t\t\t\t\t\t\t\t// If prev can be converted to accepted input\n\t\t\t\t\t\t\t\tconv = converters[prev + \" \" + tmp[0]] ||\n\t\t\t\t\t\t\t\t\tconverters[\"* \" + tmp[0]];\n\t\t\t\t\t\t\t\tif (conv) {\n\n\t\t\t\t\t\t\t\t\t// Condense equivalence converters\n\t\t\t\t\t\t\t\t\tif (conv === true) {\n\t\t\t\t\t\t\t\t\t\tconv = converters[conv2];\n\n\t\t\t\t\t\t\t\t\t\t// Otherwise, insert the intermediate dataType\n\t\t\t\t\t\t\t\t\t} else if (converters[conv2] !== true) {\n\t\t\t\t\t\t\t\t\t\tcurrent = tmp[0];\n\t\t\t\t\t\t\t\t\t\tdataTypes.unshift(tmp[1]);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Apply converter (if not an equivalence)\n\t\t\t\t\tif (conv !== true) {\n\n\t\t\t\t\t\t// Unless errors are allowed to bubble, catch and return them\n\t\t\t\t\t\tif (conv && s.throws) {\n\t\t\t\t\t\t\tresponse = conv(response);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\tresponse = conv(response);\n\t\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\tstate: \"parsererror\",\n\t\t\t\t\t\t\t\t\terror: conv ? e : \"No conversion from \" + prev + \" to \" + current\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn { state: \"success\", data: response };\n\t}\n\n\tjQuery.extend({\n\n\t\t// Counter for holding the number of active queries\n\t\tactive: 0,\n\n\t\t// Last-Modified header cache for next request\n\t\tlastModified: {},\n\t\tetag: {},\n\n\t\tajaxSettings: {\n\t\t\turl: location.href,\n\t\t\ttype: \"GET\",\n\t\t\tisLocal: rlocalProtocol.test(location.protocol),\n\t\t\tglobal: true,\n\t\t\tprocessData: true,\n\t\t\tasync: true,\n\t\t\tcontentType: \"application/x-www-form-urlencoded; charset=UTF-8\",\n\n\t\t\t/*\n\t\t\ttimeout: 0,\n\t\t\tdata: null,\n\t\t\tdataType: null,\n\t\t\tusername: null,\n\t\t\tpassword: null,\n\t\t\tcache: null,\n\t\t\tthrows: false,\n\t\t\ttraditional: false,\n\t\t\theaders: {},\n\t\t\t*/\n\n\t\t\taccepts: {\n\t\t\t\t\"*\": allTypes,\n\t\t\t\ttext: \"text/plain\",\n\t\t\t\thtml: \"text/html\",\n\t\t\t\txml: \"application/xml, text/xml\",\n\t\t\t\tjson: \"application/json, text/javascript\"\n\t\t\t},\n\n\t\t\tcontents: {\n\t\t\t\txml: /\\bxml\\b/,\n\t\t\t\thtml: /\\bhtml/,\n\t\t\t\tjson: /\\bjson\\b/\n\t\t\t},\n\n\t\t\tresponseFields: {\n\t\t\t\txml: \"responseXML\",\n\t\t\t\ttext: \"responseText\",\n\t\t\t\tjson: \"responseJSON\"\n\t\t\t},\n\n\t\t\t// Data converters\n\t\t\t// Keys separate source (or catchall \"*\") and destination types with a single space\n\t\t\tconverters: {\n\n\t\t\t\t// Convert anything to text\n\t\t\t\t\"* text\": String,\n\n\t\t\t\t// Text to html (true = no transformation)\n\t\t\t\t\"text html\": true,\n\n\t\t\t\t// Evaluate text as a json expression\n\t\t\t\t\"text json\": JSON.parse,\n\n\t\t\t\t// Parse text as xml\n\t\t\t\t\"text xml\": jQuery.parseXML\n\t\t\t},\n\n\t\t\t// For options that shouldn't be deep extended:\n\t\t\t// you can add your own custom options here if\n\t\t\t// and when you create one that shouldn't be\n\t\t\t// deep extended (see ajaxExtend)\n\t\t\tflatOptions: {\n\t\t\t\turl: true,\n\t\t\t\tcontext: true\n\t\t\t}\n\t\t},\n\n\t\t// Creates a full fledged settings object into target\n\t\t// with both ajaxSettings and settings fields.\n\t\t// If target is omitted, writes into ajaxSettings.\n\t\tajaxSetup: function (target, settings) {\n\t\t\treturn settings ?\n\n\t\t\t\t// Building a settings object\n\t\t\t\tajaxExtend(ajaxExtend(target, jQuery.ajaxSettings), settings) :\n\n\t\t\t\t// Extending ajaxSettings\n\t\t\t\tajaxExtend(jQuery.ajaxSettings, target);\n\t\t},\n\n\t\tajaxPrefilter: addToPrefiltersOrTransports(prefilters),\n\t\tajaxTransport: addToPrefiltersOrTransports(transports),\n\n\t\t// Main method\n\t\tajax: function (url, options) {\n\n\t\t\t// If url is an object, simulate pre-1.5 signature\n\t\t\tif (typeof url === \"object\") {\n\t\t\t\toptions = url;\n\t\t\t\turl = undefined;\n\t\t\t}\n\n\t\t\t// Force options to be an object\n\t\t\toptions = options || {};\n\n\t\t\tvar transport,\n\n\t\t\t\t// URL without anti-cache param\n\t\t\t\tcacheURL,\n\n\t\t\t\t// Response headers\n\t\t\t\tresponseHeadersString,\n\t\t\t\tresponseHeaders,\n\n\t\t\t\t// timeout handle\n\t\t\t\ttimeoutTimer,\n\n\t\t\t\t// Url cleanup var\n\t\t\t\turlAnchor,\n\n\t\t\t\t// Request state (becomes false upon send and true upon completion)\n\t\t\t\tcompleted,\n\n\t\t\t\t// To know if global events are to be dispatched\n\t\t\t\tfireGlobals,\n\n\t\t\t\t// Loop variable\n\t\t\t\ti,\n\n\t\t\t\t// uncached part of the url\n\t\t\t\tuncached,\n\n\t\t\t\t// Create the final options object\n\t\t\t\ts = jQuery.ajaxSetup({}, options),\n\n\t\t\t\t// Callbacks context\n\t\t\t\tcallbackContext = s.context || s,\n\n\t\t\t\t// Context for global events is callbackContext if it is a DOM node or jQuery collection\n\t\t\t\tglobalEventContext = s.context &&\n\t\t\t\t\t(callbackContext.nodeType || callbackContext.jquery) ?\n\t\t\t\t\tjQuery(callbackContext) :\n\t\t\t\t\tjQuery.event,\n\n\t\t\t\t// Deferreds\n\t\t\t\tdeferred = jQuery.Deferred(),\n\t\t\t\tcompleteDeferred = jQuery.Callbacks(\"once memory\"),\n\n\t\t\t\t// Status-dependent callbacks\n\t\t\t\tstatusCode = s.statusCode || {},\n\n\t\t\t\t// Headers (they are sent all at once)\n\t\t\t\trequestHeaders = {},\n\t\t\t\trequestHeadersNames = {},\n\n\t\t\t\t// Default abort message\n\t\t\t\tstrAbort = \"canceled\",\n\n\t\t\t\t// Fake xhr\n\t\t\t\tjqXHR = {\n\t\t\t\t\treadyState: 0,\n\n\t\t\t\t\t// Builds headers hashtable if needed\n\t\t\t\t\tgetResponseHeader: function (key) {\n\t\t\t\t\t\tvar match;\n\t\t\t\t\t\tif (completed) {\n\t\t\t\t\t\t\tif (!responseHeaders) {\n\t\t\t\t\t\t\t\tresponseHeaders = {};\n\t\t\t\t\t\t\t\twhile ((match = rheaders.exec(responseHeadersString))) {\n\t\t\t\t\t\t\t\t\tresponseHeaders[match[1].toLowerCase() + \" \"] =\n\t\t\t\t\t\t\t\t\t\t(responseHeaders[match[1].toLowerCase() + \" \"] || [])\n\t\t\t\t\t\t\t\t\t\t\t.concat(match[2]);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tmatch = responseHeaders[key.toLowerCase() + \" \"];\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn match == null ? null : match.join(\", \");\n\t\t\t\t\t},\n\n\t\t\t\t\t// Raw string\n\t\t\t\t\tgetAllResponseHeaders: function () {\n\t\t\t\t\t\treturn completed ? responseHeadersString : null;\n\t\t\t\t\t},\n\n\t\t\t\t\t// Caches the header\n\t\t\t\t\tsetRequestHeader: function (name, value) {\n\t\t\t\t\t\tif (completed == null) {\n\t\t\t\t\t\t\tname = requestHeadersNames[name.toLowerCase()] =\n\t\t\t\t\t\t\t\trequestHeadersNames[name.toLowerCase()] || name;\n\t\t\t\t\t\t\trequestHeaders[name] = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn this;\n\t\t\t\t\t},\n\n\t\t\t\t\t// Overrides response content-type header\n\t\t\t\t\toverrideMimeType: function (type) {\n\t\t\t\t\t\tif (completed == null) {\n\t\t\t\t\t\t\ts.mimeType = type;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn this;\n\t\t\t\t\t},\n\n\t\t\t\t\t// Status-dependent callbacks\n\t\t\t\t\tstatusCode: function (map) {\n\t\t\t\t\t\tvar code;\n\t\t\t\t\t\tif (map) {\n\t\t\t\t\t\t\tif (completed) {\n\n\t\t\t\t\t\t\t\t// Execute the appropriate callbacks\n\t\t\t\t\t\t\t\tjqXHR.always(map[jqXHR.status]);\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t// Lazy-add the new callbacks in a way that preserves old ones\n\t\t\t\t\t\t\t\tfor (code in map) {\n\t\t\t\t\t\t\t\t\tstatusCode[code] = [statusCode[code], map[code]];\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn this;\n\t\t\t\t\t},\n\n\t\t\t\t\t// Cancel the request\n\t\t\t\t\tabort: function (statusText) {\n\t\t\t\t\t\tvar finalText = statusText || strAbort;\n\t\t\t\t\t\tif (transport) {\n\t\t\t\t\t\t\ttransport.abort(finalText);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdone(0, finalText);\n\t\t\t\t\t\treturn this;\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t// Attach deferreds\n\t\t\tdeferred.promise(jqXHR);\n\n\t\t\t// Add protocol if not provided (prefilters might expect it)\n\t\t\t// Handle falsy url in the settings object (trac-10093: consistency with old signature)\n\t\t\t// We also use the url parameter if available\n\t\t\ts.url = ((url || s.url || location.href) + \"\")\n\t\t\t\t.replace(rprotocol, location.protocol + \"//\");\n\n\t\t\t// Alias method option to type as per ticket trac-12004\n\t\t\ts.type = options.method || options.type || s.method || s.type;\n\n\t\t\t// Extract dataTypes list\n\t\t\ts.dataTypes = (s.dataType || \"*\").toLowerCase().match(rnothtmlwhite) || [\"\"];\n\n\t\t\t// A cross-domain request is in order when the origin doesn't match the current origin.\n\t\t\tif (s.crossDomain == null) {\n\t\t\t\turlAnchor = document.createElement(\"a\");\n\n\t\t\t\t// Support: IE <=8 - 11, Edge 12 - 15\n\t\t\t\t// IE throws exception on accessing the href property if url is malformed,\n\t\t\t\t// e.g. http://example.com:80x/\n\t\t\t\ttry {\n\t\t\t\t\turlAnchor.href = s.url;\n\n\t\t\t\t\t// Support: IE <=8 - 11 only\n\t\t\t\t\t// Anchor's host property isn't correctly set when s.url is relative\n\t\t\t\t\turlAnchor.href = urlAnchor.href;\n\t\t\t\t\ts.crossDomain = originAnchor.protocol + \"//\" + originAnchor.host !==\n\t\t\t\t\t\turlAnchor.protocol + \"//\" + urlAnchor.host;\n\t\t\t\t} catch (e) {\n\n\t\t\t\t\t// If there is an error parsing the URL, assume it is crossDomain,\n\t\t\t\t\t// it can be rejected by the transport if it is invalid\n\t\t\t\t\ts.crossDomain = true;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Convert data if not already a string\n\t\t\tif (s.data && s.processData && typeof s.data !== \"string\") {\n\t\t\t\ts.data = jQuery.param(s.data, s.traditional);\n\t\t\t}\n\n\t\t\t// Apply prefilters\n\t\t\tinspectPrefiltersOrTransports(prefilters, s, options, jqXHR);\n\n\t\t\t// If request was aborted inside a prefilter, stop there\n\t\t\tif (completed) {\n\t\t\t\treturn jqXHR;\n\t\t\t}\n\n\t\t\t// We can fire global events as of now if asked to\n\t\t\t// Don't fire events if jQuery.event is undefined in an AMD-usage scenario (trac-15118)\n\t\t\tfireGlobals = jQuery.event && s.global;\n\n\t\t\t// Watch for a new set of requests\n\t\t\tif (fireGlobals && jQuery.active++ === 0) {\n\t\t\t\tjQuery.event.trigger(\"ajaxStart\");\n\t\t\t}\n\n\t\t\t// Uppercase the type\n\t\t\ts.type = s.type.toUpperCase();\n\n\t\t\t// Determine if request has content\n\t\t\ts.hasContent = !rnoContent.test(s.type);\n\n\t\t\t// Save the URL in case we're toying with the If-Modified-Since\n\t\t\t// and/or If-None-Match header later on\n\t\t\t// Remove hash to simplify url manipulation\n\t\t\tcacheURL = s.url.replace(rhash, \"\");\n\n\t\t\t// More options handling for requests with no content\n\t\t\tif (!s.hasContent) {\n\n\t\t\t\t// Remember the hash so we can put it back\n\t\t\t\tuncached = s.url.slice(cacheURL.length);\n\n\t\t\t\t// If data is available and should be processed, append data to url\n\t\t\t\tif (s.data && (s.processData || typeof s.data === \"string\")) {\n\t\t\t\t\tcacheURL += (rquery.test(cacheURL) ? \"&\" : \"?\") + s.data;\n\n\t\t\t\t\t// trac-9682: remove data so that it's not used in an eventual retry\n\t\t\t\t\tdelete s.data;\n\t\t\t\t}\n\n\t\t\t\t// Add or update anti-cache param if needed\n\t\t\t\tif (s.cache === false) {\n\t\t\t\t\tcacheURL = cacheURL.replace(rantiCache, \"$1\");\n\t\t\t\t\tuncached = (rquery.test(cacheURL) ? \"&\" : \"?\") + \"_=\" + (nonce.guid++) +\n\t\t\t\t\t\tuncached;\n\t\t\t\t}\n\n\t\t\t\t// Put hash and anti-cache on the URL that will be requested (gh-1732)\n\t\t\t\ts.url = cacheURL + uncached;\n\n\t\t\t\t// Change '%20' to '+' if this is encoded form body content (gh-2658)\n\t\t\t} else if (s.data && s.processData &&\n\t\t\t\t(s.contentType || \"\").indexOf(\"application/x-www-form-urlencoded\") === 0) {\n\t\t\t\ts.data = s.data.replace(r20, \"+\");\n\t\t\t}\n\n\t\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\t\tif (s.ifModified) {\n\t\t\t\tif (jQuery.lastModified[cacheURL]) {\n\t\t\t\t\tjqXHR.setRequestHeader(\"If-Modified-Since\", jQuery.lastModified[cacheURL]);\n\t\t\t\t}\n\t\t\t\tif (jQuery.etag[cacheURL]) {\n\t\t\t\t\tjqXHR.setRequestHeader(\"If-None-Match\", jQuery.etag[cacheURL]);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Set the correct header, if data is being sent\n\t\t\tif (s.data && s.hasContent && s.contentType !== false || options.contentType) {\n\t\t\t\tjqXHR.setRequestHeader(\"Content-Type\", s.contentType);\n\t\t\t}\n\n\t\t\t// Set the Accepts header for the server, depending on the dataType\n\t\t\tjqXHR.setRequestHeader(\n\t\t\t\t\"Accept\",\n\t\t\t\ts.dataTypes[0] && s.accepts[s.dataTypes[0]] ?\n\t\t\t\t\ts.accepts[s.dataTypes[0]] +\n\t\t\t\t\t(s.dataTypes[0] !== \"*\" ? \", \" + allTypes + \"; q=0.01\" : \"\") :\n\t\t\t\t\ts.accepts[\"*\"]\n\t\t\t);\n\n\t\t\t// Check for headers option\n\t\t\tfor (i in s.headers) {\n\t\t\t\tjqXHR.setRequestHeader(i, s.headers[i]);\n\t\t\t}\n\n\t\t\t// Allow custom headers/mimetypes and early abort\n\t\t\tif (s.beforeSend &&\n\t\t\t\t(s.beforeSend.call(callbackContext, jqXHR, s) === false || completed)) {\n\n\t\t\t\t// Abort if not done already and return\n\t\t\t\treturn jqXHR.abort();\n\t\t\t}\n\n\t\t\t// Aborting is no longer a cancellation\n\t\t\tstrAbort = \"abort\";\n\n\t\t\t// Install callbacks on deferreds\n\t\t\tcompleteDeferred.add(s.complete);\n\t\t\tjqXHR.done(s.success);\n\t\t\tjqXHR.fail(s.error);\n\n\t\t\t// Get transport\n\t\t\ttransport = inspectPrefiltersOrTransports(transports, s, options, jqXHR);\n\n\t\t\t// If no transport, we auto-abort\n\t\t\tif (!transport) {\n\t\t\t\tdone(-1, \"No Transport\");\n\t\t\t} else {\n\t\t\t\tjqXHR.readyState = 1;\n\n\t\t\t\t// Send global event\n\t\t\t\tif (fireGlobals) {\n\t\t\t\t\tglobalEventContext.trigger(\"ajaxSend\", [jqXHR, s]);\n\t\t\t\t}\n\n\t\t\t\t// If request was aborted inside ajaxSend, stop there\n\t\t\t\tif (completed) {\n\t\t\t\t\treturn jqXHR;\n\t\t\t\t}\n\n\t\t\t\t// Timeout\n\t\t\t\tif (s.async && s.timeout > 0) {\n\t\t\t\t\ttimeoutTimer = window.setTimeout(function () {\n\t\t\t\t\t\tjqXHR.abort(\"timeout\");\n\t\t\t\t\t}, s.timeout);\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tcompleted = false;\n\t\t\t\t\ttransport.send(requestHeaders, done);\n\t\t\t\t} catch (e) {\n\n\t\t\t\t\t// Rethrow post-completion exceptions\n\t\t\t\t\tif (completed) {\n\t\t\t\t\t\tthrow e;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Propagate others as results\n\t\t\t\t\tdone(-1, e);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Callback for when everything is done\n\t\t\tfunction done(status, nativeStatusText, responses, headers) {\n\t\t\t\tvar isSuccess, success, error, response, modified,\n\t\t\t\t\tstatusText = nativeStatusText;\n\n\t\t\t\t// Ignore repeat invocations\n\t\t\t\tif (completed) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tcompleted = true;\n\n\t\t\t\t// Clear timeout if it exists\n\t\t\t\tif (timeoutTimer) {\n\t\t\t\t\twindow.clearTimeout(timeoutTimer);\n\t\t\t\t}\n\n\t\t\t\t// Dereference transport for early garbage collection\n\t\t\t\t// (no matter how long the jqXHR object will be used)\n\t\t\t\ttransport = undefined;\n\n\t\t\t\t// Cache response headers\n\t\t\t\tresponseHeadersString = headers || \"\";\n\n\t\t\t\t// Set readyState\n\t\t\t\tjqXHR.readyState = status > 0 ? 4 : 0;\n\n\t\t\t\t// Determine if successful\n\t\t\t\tisSuccess = status >= 200 && status < 300 || status === 304;\n\n\t\t\t\t// Get response data\n\t\t\t\tif (responses) {\n\t\t\t\t\tresponse = ajaxHandleResponses(s, jqXHR, responses);\n\t\t\t\t}\n\n\t\t\t\t// Use a noop converter for missing script but not if jsonp\n\t\t\t\tif (!isSuccess &&\n\t\t\t\t\tjQuery.inArray(\"script\", s.dataTypes) > -1 &&\n\t\t\t\t\tjQuery.inArray(\"json\", s.dataTypes) < 0) {\n\t\t\t\t\ts.converters[\"text script\"] = function () { };\n\t\t\t\t}\n\n\t\t\t\t// Convert no matter what (that way responseXXX fields are always set)\n\t\t\t\tresponse = ajaxConvert(s, response, jqXHR, isSuccess);\n\n\t\t\t\t// If successful, handle type chaining\n\t\t\t\tif (isSuccess) {\n\n\t\t\t\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\t\t\t\tif (s.ifModified) {\n\t\t\t\t\t\tmodified = jqXHR.getResponseHeader(\"Last-Modified\");\n\t\t\t\t\t\tif (modified) {\n\t\t\t\t\t\t\tjQuery.lastModified[cacheURL] = modified;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmodified = jqXHR.getResponseHeader(\"etag\");\n\t\t\t\t\t\tif (modified) {\n\t\t\t\t\t\t\tjQuery.etag[cacheURL] = modified;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// if no content\n\t\t\t\t\tif (status === 204 || s.type === \"HEAD\") {\n\t\t\t\t\t\tstatusText = \"nocontent\";\n\n\t\t\t\t\t\t// if not modified\n\t\t\t\t\t} else if (status === 304) {\n\t\t\t\t\t\tstatusText = \"notmodified\";\n\n\t\t\t\t\t\t// If we have data, let's convert it\n\t\t\t\t\t} else {\n\t\t\t\t\t\tstatusText = response.state;\n\t\t\t\t\t\tsuccess = response.data;\n\t\t\t\t\t\terror = response.error;\n\t\t\t\t\t\tisSuccess = !error;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\n\t\t\t\t\t// Extract error from statusText and normalize for non-aborts\n\t\t\t\t\terror = statusText;\n\t\t\t\t\tif (status || !statusText) {\n\t\t\t\t\t\tstatusText = \"error\";\n\t\t\t\t\t\tif (status < 0) {\n\t\t\t\t\t\t\tstatus = 0;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Set data for the fake xhr object\n\t\t\t\tjqXHR.status = status;\n\t\t\t\tjqXHR.statusText = (nativeStatusText || statusText) + \"\";\n\n\t\t\t\t// Success/Error\n\t\t\t\tif (isSuccess) {\n\t\t\t\t\tdeferred.resolveWith(callbackContext, [success, statusText, jqXHR]);\n\t\t\t\t} else {\n\t\t\t\t\tdeferred.rejectWith(callbackContext, [jqXHR, statusText, error]);\n\t\t\t\t}\n\n\t\t\t\t// Status-dependent callbacks\n\t\t\t\tjqXHR.statusCode(statusCode);\n\t\t\t\tstatusCode = undefined;\n\n\t\t\t\tif (fireGlobals) {\n\t\t\t\t\tglobalEventContext.trigger(isSuccess ? \"ajaxSuccess\" : \"ajaxError\",\n\t\t\t\t\t\t[jqXHR, s, isSuccess ? success : error]);\n\t\t\t\t}\n\n\t\t\t\t// Complete\n\t\t\t\tcompleteDeferred.fireWith(callbackContext, [jqXHR, statusText]);\n\n\t\t\t\tif (fireGlobals) {\n\t\t\t\t\tglobalEventContext.trigger(\"ajaxComplete\", [jqXHR, s]);\n\n\t\t\t\t\t// Handle the global AJAX counter\n\t\t\t\t\tif (!(--jQuery.active)) {\n\t\t\t\t\t\tjQuery.event.trigger(\"ajaxStop\");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn jqXHR;\n\t\t},\n\n\t\tgetJSON: function (url, data, callback) {\n\t\t\treturn jQuery.get(url, data, callback, \"json\");\n\t\t},\n\n\t\tgetScript: function (url, callback) {\n\t\t\treturn jQuery.get(url, undefined, callback, \"script\");\n\t\t}\n\t});\n\n\tjQuery.each([\"get\", \"post\"], function (_i, method) {\n\t\tjQuery[method] = function (url, data, callback, type) {\n\n\t\t\t// Shift arguments if data argument was omitted\n\t\t\tif (isFunction(data)) {\n\t\t\t\ttype = type || callback;\n\t\t\t\tcallback = data;\n\t\t\t\tdata = undefined;\n\t\t\t}\n\n\t\t\t// The url can be an options object (which then must have .url)\n\t\t\treturn jQuery.ajax(jQuery.extend({\n\t\t\t\turl: url,\n\t\t\t\ttype: method,\n\t\t\t\tdataType: type,\n\t\t\t\tdata: data,\n\t\t\t\tsuccess: callback\n\t\t\t}, jQuery.isPlainObject(url) && url));\n\t\t};\n\t});\n\n\tjQuery.ajaxPrefilter(function (s) {\n\t\tvar i;\n\t\tfor (i in s.headers) {\n\t\t\tif (i.toLowerCase() === \"content-type\") {\n\t\t\t\ts.contentType = s.headers[i] || \"\";\n\t\t\t}\n\t\t}\n\t});\n\n\n\tjQuery._evalUrl = function (url, options, doc) {\n\t\treturn jQuery.ajax({\n\t\t\turl: url,\n\n\t\t\t// Make this explicit, since user can override this through ajaxSetup (trac-11264)\n\t\t\ttype: \"GET\",\n\t\t\tdataType: \"script\",\n\t\t\tcache: true,\n\t\t\tasync: false,\n\t\t\tglobal: false,\n\n\t\t\t// Only evaluate the response if it is successful (gh-4126)\n\t\t\t// dataFilter is not invoked for failure responses, so using it instead\n\t\t\t// of the default converter is kludgy but it works.\n\t\t\tconverters: {\n\t\t\t\t\"text script\": function () { }\n\t\t\t},\n\t\t\tdataFilter: function (response) {\n\t\t\t\tjQuery.globalEval(response, options, doc);\n\t\t\t}\n\t\t});\n\t};\n\n\n\tjQuery.fn.extend({\n\t\twrapAll: function (html) {\n\t\t\tvar wrap;\n\n\t\t\tif (this[0]) {\n\t\t\t\tif (isFunction(html)) {\n\t\t\t\t\thtml = html.call(this[0]);\n\t\t\t\t}\n\n\t\t\t\t// The elements to wrap the target around\n\t\t\t\twrap = jQuery(html, this[0].ownerDocument).eq(0).clone(true);\n\n\t\t\t\tif (this[0].parentNode) {\n\t\t\t\t\twrap.insertBefore(this[0]);\n\t\t\t\t}\n\n\t\t\t\twrap.map(function () {\n\t\t\t\t\tvar elem = this;\n\n\t\t\t\t\twhile (elem.firstElementChild) {\n\t\t\t\t\t\telem = elem.firstElementChild;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn elem;\n\t\t\t\t}).append(this);\n\t\t\t}\n\n\t\t\treturn this;\n\t\t},\n\n\t\twrapInner: function (html) {\n\t\t\tif (isFunction(html)) {\n\t\t\t\treturn this.each(function (i) {\n\t\t\t\t\tjQuery(this).wrapInner(html.call(this, i));\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn this.each(function () {\n\t\t\t\tvar self = jQuery(this),\n\t\t\t\t\tcontents = self.contents();\n\n\t\t\t\tif (contents.length) {\n\t\t\t\t\tcontents.wrapAll(html);\n\n\t\t\t\t} else {\n\t\t\t\t\tself.append(html);\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\twrap: function (html) {\n\t\t\tvar htmlIsFunction = isFunction(html);\n\n\t\t\treturn this.each(function (i) {\n\t\t\t\tjQuery(this).wrapAll(htmlIsFunction ? html.call(this, i) : html);\n\t\t\t});\n\t\t},\n\n\t\tunwrap: function (selector) {\n\t\t\tthis.parent(selector).not(\"body\").each(function () {\n\t\t\t\tjQuery(this).replaceWith(this.childNodes);\n\t\t\t});\n\t\t\treturn this;\n\t\t}\n\t});\n\n\n\tjQuery.expr.pseudos.hidden = function (elem) {\n\t\treturn !jQuery.expr.pseudos.visible(elem);\n\t};\n\tjQuery.expr.pseudos.visible = function (elem) {\n\t\treturn !!(elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length);\n\t};\n\n\n\n\n\tjQuery.ajaxSettings.xhr = function () {\n\t\ttry {\n\t\t\treturn new window.XMLHttpRequest();\n\t\t} catch (e) { }\n\t};\n\n\tvar xhrSuccessStatus = {\n\n\t\t// File protocol always yields status code 0, assume 200\n\t\t0: 200,\n\n\t\t// Support: IE <=9 only\n\t\t// trac-1450: sometimes IE returns 1223 when it should be 204\n\t\t1223: 204\n\t},\n\t\txhrSupported = jQuery.ajaxSettings.xhr();\n\n\tsupport.cors = !!xhrSupported && (\"withCredentials\" in xhrSupported);\n\tsupport.ajax = xhrSupported = !!xhrSupported;\n\n\tjQuery.ajaxTransport(function (options) {\n\t\tvar callback, errorCallback;\n\n\t\t// Cross domain only allowed if supported through XMLHttpRequest\n\t\tif (support.cors || xhrSupported && !options.crossDomain) {\n\t\t\treturn {\n\t\t\t\tsend: function (headers, complete) {\n\t\t\t\t\tvar i,\n\t\t\t\t\t\txhr = options.xhr();\n\n\t\t\t\t\txhr.open(\n\t\t\t\t\t\toptions.type,\n\t\t\t\t\t\toptions.url,\n\t\t\t\t\t\toptions.async,\n\t\t\t\t\t\toptions.username,\n\t\t\t\t\t\toptions.password\n\t\t\t\t\t);\n\n\t\t\t\t\t// Apply custom fields if provided\n\t\t\t\t\tif (options.xhrFields) {\n\t\t\t\t\t\tfor (i in options.xhrFields) {\n\t\t\t\t\t\t\txhr[i] = options.xhrFields[i];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Override mime type if needed\n\t\t\t\t\tif (options.mimeType && xhr.overrideMimeType) {\n\t\t\t\t\t\txhr.overrideMimeType(options.mimeType);\n\t\t\t\t\t}\n\n\t\t\t\t\t// X-Requested-With header\n\t\t\t\t\t// For cross-domain requests, seeing as conditions for a preflight are\n\t\t\t\t\t// akin to a jigsaw puzzle, we simply never set it to be sure.\n\t\t\t\t\t// (it can always be set on a per-request basis or even using ajaxSetup)\n\t\t\t\t\t// For same-domain requests, won't change header if already provided.\n\t\t\t\t\tif (!options.crossDomain && !headers[\"X-Requested-With\"]) {\n\t\t\t\t\t\theaders[\"X-Requested-With\"] = \"XMLHttpRequest\";\n\t\t\t\t\t}\n\n\t\t\t\t\t// Set headers\n\t\t\t\t\tfor (i in headers) {\n\t\t\t\t\t\txhr.setRequestHeader(i, headers[i]);\n\t\t\t\t\t}\n\n\t\t\t\t\t// Callback\n\t\t\t\t\tcallback = function (type) {\n\t\t\t\t\t\treturn function () {\n\t\t\t\t\t\t\tif (callback) {\n\t\t\t\t\t\t\t\tcallback = errorCallback = xhr.onload =\n\t\t\t\t\t\t\t\t\txhr.onerror = xhr.onabort = xhr.ontimeout =\n\t\t\t\t\t\t\t\t\txhr.onreadystatechange = null;\n\n\t\t\t\t\t\t\t\tif (type === \"abort\") {\n\t\t\t\t\t\t\t\t\txhr.abort();\n\t\t\t\t\t\t\t\t} else if (type === \"error\") {\n\n\t\t\t\t\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t\t\t\t\t// On a manual native abort, IE9 throws\n\t\t\t\t\t\t\t\t\t// errors on any property access that is not readyState\n\t\t\t\t\t\t\t\t\tif (typeof xhr.status !== \"number\") {\n\t\t\t\t\t\t\t\t\t\tcomplete(0, \"error\");\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tcomplete(\n\n\t\t\t\t\t\t\t\t\t\t\t// File: protocol always yields status 0; see trac-8605, trac-14207\n\t\t\t\t\t\t\t\t\t\t\txhr.status,\n\t\t\t\t\t\t\t\t\t\t\txhr.statusText\n\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tcomplete(\n\t\t\t\t\t\t\t\t\t\txhrSuccessStatus[xhr.status] || xhr.status,\n\t\t\t\t\t\t\t\t\t\txhr.statusText,\n\n\t\t\t\t\t\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t\t\t\t\t\t// IE9 has no XHR2 but throws on binary (trac-11426)\n\t\t\t\t\t\t\t\t\t\t// For XHR2 non-text, let the caller handle it (gh-2498)\n\t\t\t\t\t\t\t\t\t\t(xhr.responseType || \"text\") !== \"text\" ||\n\t\t\t\t\t\t\t\t\t\t\ttypeof xhr.responseText !== \"string\" ?\n\t\t\t\t\t\t\t\t\t\t\t{ binary: xhr.response } :\n\t\t\t\t\t\t\t\t\t\t\t{ text: xhr.responseText },\n\t\t\t\t\t\t\t\t\t\txhr.getAllResponseHeaders()\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\t\t\t\t\t};\n\n\t\t\t\t\t// Listen to events\n\t\t\t\t\txhr.onload = callback();\n\t\t\t\t\terrorCallback = xhr.onerror = xhr.ontimeout = callback(\"error\");\n\n\t\t\t\t\t// Support: IE 9 only\n\t\t\t\t\t// Use onreadystatechange to replace onabort\n\t\t\t\t\t// to handle uncaught aborts\n\t\t\t\t\tif (xhr.onabort !== undefined) {\n\t\t\t\t\t\txhr.onabort = errorCallback;\n\t\t\t\t\t} else {\n\t\t\t\t\t\txhr.onreadystatechange = function () {\n\n\t\t\t\t\t\t\t// Check readyState before timeout as it changes\n\t\t\t\t\t\t\tif (xhr.readyState === 4) {\n\n\t\t\t\t\t\t\t\t// Allow onerror to be called first,\n\t\t\t\t\t\t\t\t// but that will not handle a native abort\n\t\t\t\t\t\t\t\t// Also, save errorCallback to a variable\n\t\t\t\t\t\t\t\t// as xhr.onerror cannot be accessed\n\t\t\t\t\t\t\t\twindow.setTimeout(function () {\n\t\t\t\t\t\t\t\t\tif (callback) {\n\t\t\t\t\t\t\t\t\t\terrorCallback();\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\t// Create the abort callback\n\t\t\t\t\tcallback = callback(\"abort\");\n\n\t\t\t\t\ttry {\n\n\t\t\t\t\t\t// Do send the request (this may raise an exception)\n\t\t\t\t\t\txhr.send(options.hasContent && options.data || null);\n\t\t\t\t\t} catch (e) {\n\n\t\t\t\t\t\t// trac-14683: Only rethrow if this hasn't been notified as an error yet\n\t\t\t\t\t\tif (callback) {\n\t\t\t\t\t\t\tthrow e;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\t\tabort: function () {\n\t\t\t\t\tif (callback) {\n\t\t\t\t\t\tcallback();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t});\n\n\n\n\n\t// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432)\n\tjQuery.ajaxPrefilter(function (s) {\n\t\tif (s.crossDomain) {\n\t\t\ts.contents.script = false;\n\t\t}\n\t});\n\n\t// Install script dataType\n\tjQuery.ajaxSetup({\n\t\taccepts: {\n\t\t\tscript: \"text/javascript, application/javascript, \" +\n\t\t\t\t\"application/ecmascript, application/x-ecmascript\"\n\t\t},\n\t\tcontents: {\n\t\t\tscript: /\\b(?:java|ecma)script\\b/\n\t\t},\n\t\tconverters: {\n\t\t\t\"text script\": function (text) {\n\t\t\t\tjQuery.globalEval(text);\n\t\t\t\treturn text;\n\t\t\t}\n\t\t}\n\t});\n\n\t// Handle cache's special case and crossDomain\n\tjQuery.ajaxPrefilter(\"script\", function (s) {\n\t\tif (s.cache === undefined) {\n\t\t\ts.cache = false;\n\t\t}\n\t\tif (s.crossDomain) {\n\t\t\ts.type = \"GET\";\n\t\t}\n\t});\n\n\t// Bind script tag hack transport\n\tjQuery.ajaxTransport(\"script\", function (s) {\n\n\t\t// This transport only deals with cross domain or forced-by-attrs requests\n\t\tif (s.crossDomain || s.scriptAttrs) {\n\t\t\tvar script, callback;\n\t\t\treturn {\n\t\t\t\tsend: function (_, complete) {\n\t\t\t\t\tscript = jQuery(\"<script>\")\n\t\t\t\t\t\t.attr(s.scriptAttrs || {})\n\t\t\t\t\t\t.prop({ charset: s.scriptCharset, src: s.url })\n\t\t\t\t\t\t.on(\"load error\", callback = function (evt) {\n\t\t\t\t\t\t\tscript.remove();\n\t\t\t\t\t\t\tcallback = null;\n\t\t\t\t\t\t\tif (evt) {\n\t\t\t\t\t\t\t\tcomplete(evt.type === \"error\" ? 404 : 200, evt.type);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\n\t\t\t\t\t// Use native DOM manipulation to avoid our domManip AJAX trickery\n\t\t\t\t\tdocument.head.appendChild(script[0]);\n\t\t\t\t},\n\t\t\t\tabort: function () {\n\t\t\t\t\tif (callback) {\n\t\t\t\t\t\tcallback();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t});\n\n\n\n\n\tvar oldCallbacks = [],\n\t\trjsonp = /(=)\\?(?=&|$)|\\?\\?/;\n\n\t// Default jsonp settings\n\tjQuery.ajaxSetup({\n\t\tjsonp: \"callback\",\n\t\tjsonpCallback: function () {\n\t\t\tvar callback = oldCallbacks.pop() || (jQuery.expando + \"_\" + (nonce.guid++));\n\t\t\tthis[callback] = true;\n\t\t\treturn callback;\n\t\t}\n\t});\n\n\t// Detect, normalize options and install callbacks for jsonp requests\n\tjQuery.ajaxPrefilter(\"json jsonp\", function (s, originalSettings, jqXHR) {\n\n\t\tvar callbackName, overwritten, responseContainer,\n\t\t\tjsonProp = s.jsonp !== false && (rjsonp.test(s.url) ?\n\t\t\t\t\"url\" :\n\t\t\t\ttypeof s.data === \"string\" &&\n\t\t\t\t(s.contentType || \"\")\n\t\t\t\t\t.indexOf(\"application/x-www-form-urlencoded\") === 0 &&\n\t\t\t\trjsonp.test(s.data) && \"data\"\n\t\t\t);\n\n\t\t// Handle iff the expected data type is \"jsonp\" or we have a parameter to set\n\t\tif (jsonProp || s.dataTypes[0] === \"jsonp\") {\n\n\t\t\t// Get callback name, remembering preexisting value associated with it\n\t\t\tcallbackName = s.jsonpCallback = isFunction(s.jsonpCallback) ?\n\t\t\t\ts.jsonpCallback() :\n\t\t\t\ts.jsonpCallback;\n\n\t\t\t// Insert callback into url or form data\n\t\t\tif (jsonProp) {\n\t\t\t\ts[jsonProp] = s[jsonProp].replace(rjsonp, \"$1\" + callbackName);\n\t\t\t} else if (s.jsonp !== false) {\n\t\t\t\ts.url += (rquery.test(s.url) ? \"&\" : \"?\") + s.jsonp + \"=\" + callbackName;\n\t\t\t}\n\n\t\t\t// Use data converter to retrieve json after script execution\n\t\t\ts.converters[\"script json\"] = function () {\n\t\t\t\tif (!responseContainer) {\n\t\t\t\t\tjQuery.error(callbackName + \" was not called\");\n\t\t\t\t}\n\t\t\t\treturn responseContainer[0];\n\t\t\t};\n\n\t\t\t// Force json dataType\n\t\t\ts.dataTypes[0] = \"json\";\n\n\t\t\t// Install callback\n\t\t\toverwritten = window[callbackName];\n\t\t\twindow[callbackName] = function () {\n\t\t\t\tresponseContainer = arguments;\n\t\t\t};\n\n\t\t\t// Clean-up function (fires after converters)\n\t\t\tjqXHR.always(function () {\n\n\t\t\t\t// If previous value didn't exist - remove it\n\t\t\t\tif (overwritten === undefined) {\n\t\t\t\t\tjQuery(window).removeProp(callbackName);\n\n\t\t\t\t\t// Otherwise restore preexisting value\n\t\t\t\t} else {\n\t\t\t\t\twindow[callbackName] = overwritten;\n\t\t\t\t}\n\n\t\t\t\t// Save back as free\n\t\t\t\tif (s[callbackName]) {\n\n\t\t\t\t\t// Make sure that re-using the options doesn't screw things around\n\t\t\t\t\ts.jsonpCallback = originalSettings.jsonpCallback;\n\n\t\t\t\t\t// Save the callback name for future use\n\t\t\t\t\toldCallbacks.push(callbackName);\n\t\t\t\t}\n\n\t\t\t\t// Call if it was a function and we have a response\n\t\t\t\tif (responseContainer && isFunction(overwritten)) {\n\t\t\t\t\toverwritten(responseContainer[0]);\n\t\t\t\t}\n\n\t\t\t\tresponseContainer = overwritten = undefined;\n\t\t\t});\n\n\t\t\t// Delegate to script\n\t\t\treturn \"script\";\n\t\t}\n\t});\n\n\n\n\n\t// Support: Safari 8 only\n\t// In Safari 8 documents created via document.implementation.createHTMLDocument\n\t// collapse sibling forms: the second one becomes a child of the first one.\n\t// Because of that, this security measure has to be disabled in Safari 8.\n\t// https://bugs.webkit.org/show_bug.cgi?id=137337\n\tsupport.createHTMLDocument = (function () {\n\t\tvar body = document.implementation.createHTMLDocument(\"\").body;\n\t\tbody.innerHTML = \"<form></form><form></form>\";\n\t\treturn body.childNodes.length === 2;\n\t})();\n\n\n\t// Argument \"data\" should be string of html\n\t// context (optional): If specified, the fragment will be created in this context,\n\t// defaults to document\n\t// keepScripts (optional): If true, will include scripts passed in the html string\n\tjQuery.parseHTML = function (data, context, keepScripts) {\n\t\tif (typeof data !== \"string\") {\n\t\t\treturn [];\n\t\t}\n\t\tif (typeof context === \"boolean\") {\n\t\t\tkeepScripts = context;\n\t\t\tcontext = false;\n\t\t}\n\n\t\tvar base, parsed, scripts;\n\n\t\tif (!context) {\n\n\t\t\t// Stop scripts or inline event handlers from being executed immediately\n\t\t\t// by using document.implementation\n\t\t\tif (support.createHTMLDocument) {\n\t\t\t\tcontext = document.implementation.createHTMLDocument(\"\");\n\n\t\t\t\t// Set the base href for the created document\n\t\t\t\t// so any parsed elements with URLs\n\t\t\t\t// are based on the document's URL (gh-2965)\n\t\t\t\tbase = context.createElement(\"base\");\n\t\t\t\tbase.href = document.location.href;\n\t\t\t\tcontext.head.appendChild(base);\n\t\t\t} else {\n\t\t\t\tcontext = document;\n\t\t\t}\n\t\t}\n\n\t\tparsed = rsingleTag.exec(data);\n\t\tscripts = !keepScripts && [];\n\n\t\t// Single tag\n\t\tif (parsed) {\n\t\t\treturn [context.createElement(parsed[1])];\n\t\t}\n\n\t\tparsed = buildFragment([data], context, scripts);\n\n\t\tif (scripts && scripts.length) {\n\t\t\tjQuery(scripts).remove();\n\t\t}\n\n\t\treturn jQuery.merge([], parsed.childNodes);\n\t};\n\n\n\t/**\n\t * Load a url into a page\n\t */\n\tjQuery.fn.load = function (url, params, callback) {\n\t\tvar selector, type, response,\n\t\t\tself = this,\n\t\t\toff = url.indexOf(\" \");\n\n\t\tif (off > -1) {\n\t\t\tselector = stripAndCollapse(url.slice(off));\n\t\t\turl = url.slice(0, off);\n\t\t}\n\n\t\t// If it's a function\n\t\tif (isFunction(params)) {\n\n\t\t\t// We assume that it's the callback\n\t\t\tcallback = params;\n\t\t\tparams = undefined;\n\n\t\t\t// Otherwise, build a param string\n\t\t} else if (params && typeof params === \"object\") {\n\t\t\ttype = \"POST\";\n\t\t}\n\n\t\t// If we have elements to modify, make the request\n\t\tif (self.length > 0) {\n\t\t\tjQuery.ajax({\n\t\t\t\turl: url,\n\n\t\t\t\t// If \"type\" variable is undefined, then \"GET\" method will be used.\n\t\t\t\t// Make value of this field explicit since\n\t\t\t\t// user can override it through ajaxSetup method\n\t\t\t\ttype: type || \"GET\",\n\t\t\t\tdataType: \"html\",\n\t\t\t\tdata: params\n\t\t\t}).done(function (responseText) {\n\n\t\t\t\t// Save response for use in complete callback\n\t\t\t\tresponse = arguments;\n\n\t\t\t\tself.html(selector ?\n\n\t\t\t\t\t// If a selector was specified, locate the right elements in a dummy div\n\t\t\t\t\t// Exclude scripts to avoid IE 'Permission Denied' errors\n\t\t\t\t\tjQuery(\"<div>\").append(jQuery.parseHTML(responseText)).find(selector) :\n\n\t\t\t\t\t// Otherwise use the full result\n\t\t\t\t\tresponseText);\n\n\t\t\t\t// If the request succeeds, this function gets \"data\", \"status\", \"jqXHR\"\n\t\t\t\t// but they are ignored because response was set above.\n\t\t\t\t// If it fails, this function gets \"jqXHR\", \"status\", \"error\"\n\t\t\t}).always(callback && function (jqXHR, status) {\n\t\t\t\tself.each(function () {\n\t\t\t\t\tcallback.apply(this, response || [jqXHR.responseText, status, jqXHR]);\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\n\t\treturn this;\n\t};\n\n\n\n\n\tjQuery.expr.pseudos.animated = function (elem) {\n\t\treturn jQuery.grep(jQuery.timers, function (fn) {\n\t\t\treturn elem === fn.elem;\n\t\t}).length;\n\t};\n\n\n\n\n\tjQuery.offset = {\n\t\tsetOffset: function (elem, options, i) {\n\t\t\tvar curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition,\n\t\t\t\tposition = jQuery.css(elem, \"position\"),\n\t\t\t\tcurElem = jQuery(elem),\n\t\t\t\tprops = {};\n\n\t\t\t// Set position first, in-case top/left are set even on static elem\n\t\t\tif (position === \"static\") {\n\t\t\t\telem.style.position = \"relative\";\n\t\t\t}\n\n\t\t\tcurOffset = curElem.offset();\n\t\t\tcurCSSTop = jQuery.css(elem, \"top\");\n\t\t\tcurCSSLeft = jQuery.css(elem, \"left\");\n\t\t\tcalculatePosition = (position === \"absolute\" || position === \"fixed\") &&\n\t\t\t\t(curCSSTop + curCSSLeft).indexOf(\"auto\") > -1;\n\n\t\t\t// Need to be able to calculate position if either\n\t\t\t// top or left is auto and position is either absolute or fixed\n\t\t\tif (calculatePosition) {\n\t\t\t\tcurPosition = curElem.position();\n\t\t\t\tcurTop = curPosition.top;\n\t\t\t\tcurLeft = curPosition.left;\n\n\t\t\t} else {\n\t\t\t\tcurTop = parseFloat(curCSSTop) || 0;\n\t\t\t\tcurLeft = parseFloat(curCSSLeft) || 0;\n\t\t\t}\n\n\t\t\tif (isFunction(options)) {\n\n\t\t\t\t// Use jQuery.extend here to allow modification of coordinates argument (gh-1848)\n\t\t\t\toptions = options.call(elem, i, jQuery.extend({}, curOffset));\n\t\t\t}\n\n\t\t\tif (options.top != null) {\n\t\t\t\tprops.top = (options.top - curOffset.top) + curTop;\n\t\t\t}\n\t\t\tif (options.left != null) {\n\t\t\t\tprops.left = (options.left - curOffset.left) + curLeft;\n\t\t\t}\n\n\t\t\tif (\"using\" in options) {\n\t\t\t\toptions.using.call(elem, props);\n\n\t\t\t} else {\n\t\t\t\tcurElem.css(props);\n\t\t\t}\n\t\t}\n\t};\n\n\tjQuery.fn.extend({\n\n\t\t// offset() relates an element's border box to the document origin\n\t\toffset: function (options) {\n\n\t\t\t// Preserve chaining for setter\n\t\t\tif (arguments.length) {\n\t\t\t\treturn options === undefined ?\n\t\t\t\t\tthis :\n\t\t\t\t\tthis.each(function (i) {\n\t\t\t\t\t\tjQuery.offset.setOffset(this, options, i);\n\t\t\t\t\t});\n\t\t\t}\n\n\t\t\tvar rect, win,\n\t\t\t\telem = this[0];\n\n\t\t\tif (!elem) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Return zeros for disconnected and hidden (display: none) elements (gh-2310)\n\t\t\t// Support: IE <=11 only\n\t\t\t// Running getBoundingClientRect on a\n\t\t\t// disconnected node in IE throws an error\n\t\t\tif (!elem.getClientRects().length) {\n\t\t\t\treturn { top: 0, left: 0 };\n\t\t\t}\n\n\t\t\t// Get document-relative position by adding viewport scroll to viewport-relative gBCR\n\t\t\trect = elem.getBoundingClientRect();\n\t\t\twin = elem.ownerDocument.defaultView;\n\t\t\treturn {\n\t\t\t\ttop: rect.top + win.pageYOffset,\n\t\t\t\tleft: rect.left + win.pageXOffset\n\t\t\t};\n\t\t},\n\n\t\t// position() relates an element's margin box to its offset parent's padding box\n\t\t// This corresponds to the behavior of CSS absolute positioning\n\t\tposition: function () {\n\t\t\tif (!this[0]) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar offsetParent, offset, doc,\n\t\t\t\telem = this[0],\n\t\t\t\tparentOffset = { top: 0, left: 0 };\n\n\t\t\t// position:fixed elements are offset from the viewport, which itself always has zero offset\n\t\t\tif (jQuery.css(elem, \"position\") === \"fixed\") {\n\n\t\t\t\t// Assume position:fixed implies availability of getBoundingClientRect\n\t\t\t\toffset = elem.getBoundingClientRect();\n\n\t\t\t} else {\n\t\t\t\toffset = this.offset();\n\n\t\t\t\t// Account for the *real* offset parent, which can be the document or its root element\n\t\t\t\t// when a statically positioned element is identified\n\t\t\t\tdoc = elem.ownerDocument;\n\t\t\t\toffsetParent = elem.offsetParent || doc.documentElement;\n\t\t\t\twhile (offsetParent &&\n\t\t\t\t\t(offsetParent === doc.body || offsetParent === doc.documentElement) &&\n\t\t\t\t\tjQuery.css(offsetParent, \"position\") === \"static\") {\n\n\t\t\t\t\toffsetParent = offsetParent.parentNode;\n\t\t\t\t}\n\t\t\t\tif (offsetParent && offsetParent !== elem && offsetParent.nodeType === 1) {\n\n\t\t\t\t\t// Incorporate borders into its offset, since they are outside its content origin\n\t\t\t\t\tparentOffset = jQuery(offsetParent).offset();\n\t\t\t\t\tparentOffset.top += jQuery.css(offsetParent, \"borderTopWidth\", true);\n\t\t\t\t\tparentOffset.left += jQuery.css(offsetParent, \"borderLeftWidth\", true);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Subtract parent offsets and element margins\n\t\t\treturn {\n\t\t\t\ttop: offset.top - parentOffset.top - jQuery.css(elem, \"marginTop\", true),\n\t\t\t\tleft: offset.left - parentOffset.left - jQuery.css(elem, \"marginLeft\", true)\n\t\t\t};\n\t\t},\n\n\t\t// This method will return documentElement in the following cases:\n\t\t// 1) For the element inside the iframe without offsetParent, this method will return\n\t\t//    documentElement of the parent window\n\t\t// 2) For the hidden or detached element\n\t\t// 3) For body or html element, i.e. in case of the html node - it will return itself\n\t\t//\n\t\t// but those exceptions were never presented as a real life use-cases\n\t\t// and might be considered as more preferable results.\n\t\t//\n\t\t// This logic, however, is not guaranteed and can change at any point in the future\n\t\toffsetParent: function () {\n\t\t\treturn this.map(function () {\n\t\t\t\tvar offsetParent = this.offsetParent;\n\n\t\t\t\twhile (offsetParent && jQuery.css(offsetParent, \"position\") === \"static\") {\n\t\t\t\t\toffsetParent = offsetParent.offsetParent;\n\t\t\t\t}\n\n\t\t\t\treturn offsetParent || documentElement;\n\t\t\t});\n\t\t}\n\t});\n\n\t// Create scrollLeft and scrollTop methods\n\tjQuery.each({ scrollLeft: \"pageXOffset\", scrollTop: \"pageYOffset\" }, function (method, prop) {\n\t\tvar top = \"pageYOffset\" === prop;\n\n\t\tjQuery.fn[method] = function (val) {\n\t\t\treturn access(this, function (elem, method, val) {\n\n\t\t\t\t// Coalesce documents and windows\n\t\t\t\tvar win;\n\t\t\t\tif (isWindow(elem)) {\n\t\t\t\t\twin = elem;\n\t\t\t\t} else if (elem.nodeType === 9) {\n\t\t\t\t\twin = elem.defaultView;\n\t\t\t\t}\n\n\t\t\t\tif (val === undefined) {\n\t\t\t\t\treturn win ? win[prop] : elem[method];\n\t\t\t\t}\n\n\t\t\t\tif (win) {\n\t\t\t\t\twin.scrollTo(\n\t\t\t\t\t\t!top ? val : win.pageXOffset,\n\t\t\t\t\t\ttop ? val : win.pageYOffset\n\t\t\t\t\t);\n\n\t\t\t\t} else {\n\t\t\t\t\telem[method] = val;\n\t\t\t\t}\n\t\t\t}, method, val, arguments.length);\n\t\t};\n\t});\n\n\t// Support: Safari <=7 - 9.1, Chrome <=37 - 49\n\t// Add the top/left cssHooks using jQuery.fn.position\n\t// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084\n\t// Blink bug: https://bugs.chromium.org/p/chromium/issues/detail?id=589347\n\t// getComputedStyle returns percent when specified for top/left/bottom/right;\n\t// rather than make the css module depend on the offset module, just check for it here\n\tjQuery.each([\"top\", \"left\"], function (_i, prop) {\n\t\tjQuery.cssHooks[prop] = addGetHookIf(support.pixelPosition,\n\t\t\tfunction (elem, computed) {\n\t\t\t\tif (computed) {\n\t\t\t\t\tcomputed = curCSS(elem, prop);\n\n\t\t\t\t\t// If curCSS returns percentage, fallback to offset\n\t\t\t\t\treturn rnumnonpx.test(computed) ?\n\t\t\t\t\t\tjQuery(elem).position()[prop] + \"px\" :\n\t\t\t\t\t\tcomputed;\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\t});\n\n\n\t// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods\n\tjQuery.each({ Height: \"height\", Width: \"width\" }, function (name, type) {\n\t\tjQuery.each({\n\t\t\tpadding: \"inner\" + name,\n\t\t\tcontent: type,\n\t\t\t\"\": \"outer\" + name\n\t\t}, function (defaultExtra, funcName) {\n\n\t\t\t// Margin is only for outerHeight, outerWidth\n\t\t\tjQuery.fn[funcName] = function (margin, value) {\n\t\t\t\tvar chainable = arguments.length && (defaultExtra || typeof margin !== \"boolean\"),\n\t\t\t\t\textra = defaultExtra || (margin === true || value === true ? \"margin\" : \"border\");\n\n\t\t\t\treturn access(this, function (elem, type, value) {\n\t\t\t\t\tvar doc;\n\n\t\t\t\t\tif (isWindow(elem)) {\n\n\t\t\t\t\t\t// $( window ).outerWidth/Height return w/h including scrollbars (gh-1729)\n\t\t\t\t\t\treturn funcName.indexOf(\"outer\") === 0 ?\n\t\t\t\t\t\t\telem[\"inner\" + name] :\n\t\t\t\t\t\t\telem.document.documentElement[\"client\" + name];\n\t\t\t\t\t}\n\n\t\t\t\t\t// Get document width or height\n\t\t\t\t\tif (elem.nodeType === 9) {\n\t\t\t\t\t\tdoc = elem.documentElement;\n\n\t\t\t\t\t\t// Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height],\n\t\t\t\t\t\t// whichever is greatest\n\t\t\t\t\t\treturn Math.max(\n\t\t\t\t\t\t\telem.body[\"scroll\" + name], doc[\"scroll\" + name],\n\t\t\t\t\t\t\telem.body[\"offset\" + name], doc[\"offset\" + name],\n\t\t\t\t\t\t\tdoc[\"client\" + name]\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\n\t\t\t\t\treturn value === undefined ?\n\n\t\t\t\t\t\t// Get width or height on the element, requesting but not forcing parseFloat\n\t\t\t\t\t\tjQuery.css(elem, type, extra) :\n\n\t\t\t\t\t\t// Set width or height on the element\n\t\t\t\t\t\tjQuery.style(elem, type, value, extra);\n\t\t\t\t}, type, chainable ? margin : undefined, chainable);\n\t\t\t};\n\t\t});\n\t});\n\n\n\tjQuery.each([\n\t\t\"ajaxStart\",\n\t\t\"ajaxStop\",\n\t\t\"ajaxComplete\",\n\t\t\"ajaxError\",\n\t\t\"ajaxSuccess\",\n\t\t\"ajaxSend\"\n\t], function (_i, type) {\n\t\tjQuery.fn[type] = function (fn) {\n\t\t\treturn this.on(type, fn);\n\t\t};\n\t});\n\n\n\n\n\tjQuery.fn.extend({\n\n\t\tbind: function (types, data, fn) {\n\t\t\treturn this.on(types, null, data, fn);\n\t\t},\n\t\tunbind: function (types, fn) {\n\t\t\treturn this.off(types, null, fn);\n\t\t},\n\n\t\tdelegate: function (selector, types, data, fn) {\n\t\t\treturn this.on(types, selector, data, fn);\n\t\t},\n\t\tundelegate: function (selector, types, fn) {\n\n\t\t\t// ( namespace ) or ( selector, types [, fn] )\n\t\t\treturn arguments.length === 1 ?\n\t\t\t\tthis.off(selector, \"**\") :\n\t\t\t\tthis.off(types, selector || \"**\", fn);\n\t\t},\n\n\t\thover: function (fnOver, fnOut) {\n\t\t\treturn this.mouseenter(fnOver).mouseleave(fnOut || fnOver);\n\t\t}\n\t});\n\n\tjQuery.each(\n\t\t(\"blur focus focusin focusout resize scroll click dblclick \" +\n\t\t\t\"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave \" +\n\t\t\t\"change select submit keydown keypress keyup contextmenu\").split(\" \"),\n\t\tfunction (_i, name) {\n\n\t\t\t// Handle event binding\n\t\t\tjQuery.fn[name] = function (data, fn) {\n\t\t\t\treturn arguments.length > 0 ?\n\t\t\t\t\tthis.on(name, null, data, fn) :\n\t\t\t\t\tthis.trigger(name);\n\t\t\t};\n\t\t}\n\t);\n\n\n\n\n\t// Support: Android <=4.0 only\n\t// Make sure we trim BOM and NBSP\n\t// Require that the \"whitespace run\" starts from a non-whitespace\n\t// to avoid O(N^2) behavior when the engine would try matching \"\\s+$\" at each space position.\n\tvar rtrim = /^[\\s\\uFEFF\\xA0]+|([^\\s\\uFEFF\\xA0])[\\s\\uFEFF\\xA0]+$/g;\n\n\t// Bind a function to a context, optionally partially applying any\n\t// arguments.\n\t// jQuery.proxy is deprecated to promote standards (specifically Function#bind)\n\t// However, it is not slated for removal any time soon\n\tjQuery.proxy = function (fn, context) {\n\t\tvar tmp, args, proxy;\n\n\t\tif (typeof context === \"string\") {\n\t\t\ttmp = fn[context];\n\t\t\tcontext = fn;\n\t\t\tfn = tmp;\n\t\t}\n\n\t\t// Quick check to determine if target is callable, in the spec\n\t\t// this throws a TypeError, but we will just return undefined.\n\t\tif (!isFunction(fn)) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\t// Simulated bind\n\t\targs = slice.call(arguments, 2);\n\t\tproxy = function () {\n\t\t\treturn fn.apply(context || this, args.concat(slice.call(arguments)));\n\t\t};\n\n\t\t// Set the guid of unique handler to the same of original handler, so it can be removed\n\t\tproxy.guid = fn.guid = fn.guid || jQuery.guid++;\n\n\t\treturn proxy;\n\t};\n\n\tjQuery.holdReady = function (hold) {\n\t\tif (hold) {\n\t\t\tjQuery.readyWait++;\n\t\t} else {\n\t\t\tjQuery.ready(true);\n\t\t}\n\t};\n\tjQuery.isArray = Array.isArray;\n\tjQuery.parseJSON = JSON.parse;\n\tjQuery.nodeName = nodeName;\n\tjQuery.isFunction = isFunction;\n\tjQuery.isWindow = isWindow;\n\tjQuery.camelCase = camelCase;\n\tjQuery.type = toType;\n\n\tjQuery.now = Date.now;\n\n\tjQuery.isNumeric = function (obj) {\n\n\t\t// As of jQuery 3.0, isNumeric is limited to\n\t\t// strings and numbers (primitives or objects)\n\t\t// that can be coerced to finite numbers (gh-2662)\n\t\tvar type = jQuery.type(obj);\n\t\treturn (type === \"number\" || type === \"string\") &&\n\n\t\t\t// parseFloat NaNs numeric-cast false positives (\"\")\n\t\t\t// ...but misinterprets leading-number strings, particularly hex literals (\"0x...\")\n\t\t\t// subtraction forces infinities to NaN\n\t\t\t!isNaN(obj - parseFloat(obj));\n\t};\n\n\tjQuery.trim = function (text) {\n\t\treturn text == null ?\n\t\t\t\"\" :\n\t\t\t(text + \"\").replace(rtrim, \"$1\");\n\t};\n\n\n\n\t// Register as a named AMD module, since jQuery can be concatenated with other\n\t// files that may use define, but not via a proper concatenation script that\n\t// understands anonymous AMD modules. A named AMD is safest and most robust\n\t// way to register. Lowercase jquery is used because AMD module names are\n\t// derived from file names, and jQuery is normally delivered in a lowercase\n\t// file name. Do this after creating the global so that if an AMD module wants\n\t// to call noConflict to hide this version of jQuery, it will work.\n\n\t// Note that for maximum portability, libraries that are not jQuery should\n\t// declare themselves as anonymous modules, and avoid setting a global if an\n\t// AMD loader is present. jQuery is a special case. For more information, see\n\t// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon\n\n\tif (typeof define === \"function\" && define.amd) {\n\t\tdefine(\"jquery\", [], function () {\n\t\t\treturn jQuery;\n\t\t});\n\t}\n\n\n\n\n\tvar\n\n\t\t// Map over jQuery in case of overwrite\n\t\t_jQuery = window.jQuery,\n\n\t\t// Map over the $ in case of overwrite\n\t\t_$ = window.$;\n\n\tjQuery.noConflict = function (deep) {\n\t\tif (window.$ === jQuery) {\n\t\t\twindow.$ = _$;\n\t\t}\n\n\t\tif (deep && window.jQuery === jQuery) {\n\t\t\twindow.jQuery = _jQuery;\n\t\t}\n\n\t\treturn jQuery;\n\t};\n\n\t// Expose jQuery and $ identifiers, even in AMD\n\t// (trac-7102#comment:10, https://github.com/jquery/jquery/pull/557)\n\t// and CommonJS for browser emulators (trac-13566)\n\tif (typeof noGlobal === \"undefined\") {\n\t\twindow.jQuery = window.$ = jQuery;\n\t}\n\n\n\n\n\treturn jQuery;\n});"
  },
  {
    "path": "src/sourceDev.WebApp/SharedThemes/flatly/Shared/_Layout.cshtml",
    "content": "﻿@inject ISiteContextResolver siteResolver\n@inject ICoreThemeHelper themeHelper\n@{\n    var themeSettings = themeHelper.GetThemeSettings();\n    @*\n        These settings can be set by a main view to show additional columns.\n        Views that push content into the optional sections SideNav, AsidePrimary, and AsideSecondary\n        are obligated to set the needed viewtate property to true to show the section,\n        otherwise an error will occur.\n        The sideNav column also supports a toggle so it can be hidden and toggled visible even though it renders.\n    *@\n    bool sideNavVisible = true.Equals(ViewData[\"SideNavVisible\"]);\n    string sideNavToggleClass = ViewData[\"SideNavToggle\"]?.ToString() ?? \"collapse\";\n    bool asidePrimaryVisible = true.Equals(ViewData[\"AsidePrimaryVisible\"]);\n    bool asideSecondaryVisible = true.Equals(ViewData[\"AsideSecondaryVisible\"]);\n    var Tenant = await siteResolver.ResolveSite(Context.Request.Host.Host, Context.Request.Path);\n    var siteRoot = \"\";\n    if (!string.IsNullOrWhiteSpace(Tenant.SiteFolderName)) { siteRoot = \"/\" + Tenant.SiteFolderName; }\n    \n}\n<!DOCTYPE html>\n<html lang=\"@CultureInfo.CurrentUICulture.Name\">\n<head>\n    <meta charset=\"utf-8\" />\n    <title>@ViewData[\"Title\"] - @(Tenant?.SiteName ?? \"Sample\")</title>\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1, shrink-to-fit=no\">\n    @RenderSection(\"Meta\", required: false)\n    <environment names=\"Development\">\n        <link rel=\"stylesheet\" href=\"~/css/bootstrap.css\" cs-resolve-theme-resource=\"true\" cs-shared-theme=\"true\" cs-tenant=\"@Tenant\" />\n        <link rel=\"stylesheet\" href=\"~/css/fontawesome-all.min.css\" cs-resolve-theme-resource=\"true\" cs-shared-theme=\"true\" cs-tenant=\"@Tenant\" />\n        <link rel=\"stylesheet\" href=\"~/css/site.css\" cs-resolve-theme-resource=\"true\" cs-shared-theme=\"true\" cs-tenant=\"@Tenant\" asp-append-version=\"true\" />\n    </environment>\n    <environment names=\"Staging,Production\">\n        <link rel=\"stylesheet\" href=\"~/css/bootstrap.min.css\" cs-resolve-theme-resource=\"true\" cs-shared-theme=\"true\" cs-tenant=\"@Tenant\" />\n        <link rel=\"stylesheet\" href=\"~/css/fontawesome-all.min.css\" cs-resolve-theme-resource=\"true\" cs-shared-theme=\"true\" cs-tenant=\"@Tenant\" />\n        <link rel=\"stylesheet\" href=\"~/css/site.min.css\" cs-resolve-theme-resource=\"true\" cs-shared-theme=\"true\" cs-tenant=\"@Tenant\" asp-append-version=\"true\" />\n    </environment>\n    @RenderSection(\"Styles\", required: false)    \n    \n    <google-analytics profile-id=\"@Tenant.GoogleAnalyticsProfileId\" user-id=\"@User.GetUserId()\"></google-analytics>\n    <base href=\"@Context.Request.Path\" />\n</head>\n<body class=\"d-flex flex-column @ViewData[\"BodyClass\"]\">\n    <header class=\"bg-white\">\n        <a id=\"skippy\" class=\"visually-hidden visually-hidden-focusable\" href=\"#content\">\n            <div class=\"container\">\n                <span class=\"skiplink-text\">Skip to main content</span>\n            </div>\n        </a>\n        <div class=\"fixed-top container-fluid brand-header bg-white\">\n            <div class=\"d-flex align-items-center bg-white\">\n                @if (!string.IsNullOrWhiteSpace(Tenant.LogoUrl))\n                {\n                    <div>\n                         <partial name=\"SiteLogoPartial\" model=\"@Tenant\" />\n                    </div>\n                }\n                @if (Tenant.ShowSiteNameLink)\n                {\n                    <div class=\"align-self-center pt-4 pt-sm-0\">\n                         <partial name=\"SiteTitlePartial\" model=\"@Tenant\" />\n                    </div>\n                }\n                @if (!string.IsNullOrWhiteSpace(Tenant.HeaderContent))\n                {\n                    <div class=\"flex-fill align-self-center pt-3 d-none d-md-block\">\n                        <partial name=\"SiteHeaderPartial\" />\n                    </div>\n                }\n            </div>\n        </div>\n        <nav class=\"navbar navbar-expand-md navbar-dark fixed-top navbar-dark bg-primary pt-0 pb-0\">\n            <button class=\"navbar-toggler\" type=\"button\" data-bs-toggle=\"collapse\" data-bs-target=\"#navbarNavDropdown\" aria-controls=\"navbarNavDropdown\" aria-expanded=\"false\" aria-label=\"Toggle navigation\">\n                <span class=\"navbar-toggler-icon\"></span>\n            </button>\n\n            <div class=\"collapse navbar-collapse bg-primary ps-2\" id=\"navbarNavDropdown\">\n                @await Component.InvokeAsync(\"Navigation\", new { viewName = \"Bootstrap5TopNavWithDropdowns\", filterName = NamedNavigationFilters.TopNav, startingNodeKey = \"\" })\n                <partial name=\"_LoginPartialWithDropdowns\" />\n            </div>\n        </nav>\n    </header>\n    <div id=\"wrapper\" class=\"container cs-container flex-fill\">\n        @await Component.InvokeAsync(\"Navigation\", new { viewName = \"Bootstrap5Breadcrumbs\", filterName = NamedNavigationFilters.Breadcrumbs, startingNodeKey = \"\" })\n        <div class=\"row\">\n            <main id=\"content\" class=\"col order-3\">\n                <partial name=\"AlertsPartial\" />\n                <partial name=\"_CookieConsentPartial\" />\n                <partial name=\"_AutoLogoutWarningPartial\" />\n                @RenderBody()\n            </main>\n            @if (sideNavVisible)\n            {\n                <nav id=\"sidenavmenu\" class=\" col col-3 order-1 @sideNavToggleClass\">\n                    @RenderSection(\"SideNav\", required: false)\n                </nav>\n\n            }\n            @if (asideSecondaryVisible)\n            {\n                <aside id=\"asideSecondary\" class=\"col col-1 order-2\">\n                    @RenderSection(\"AsideSecondary\", required: false)\n                </aside>\n\n            }\n            @if (asidePrimaryVisible)\n            {\n                <aside id=\"asidePrimary\" class=\"col-12 col-md-3 col-sm-12  col-sm-12 order-4\">\n                    @RenderSection(\"AsidePrimary\", required: false)\n                </aside>\n\n            }\n        </div>\n    </div>\n   <footer class=\"sticky-bottom border pt-2 h-100\">\n        <div class=\"w-100 text-center\">\n            <partial name=\"SiteFooterPartial\" />\n        </div>\n        <div class=\"d-flex flex-wrap flex-grow justify-content-center\">\n            <div class=\"p-2\">\n            <ul class=\"list-unstyled d-flex flex-wrap\">\n                @if (Tenant != null && !string.IsNullOrWhiteSpace(Tenant.PrivacyPolicy))\n                {\n                    <li class=\"border-left ps-2 me-2\">\n                        <a asp-controller=\"Privacy\" asp-action=\"Index\">Privacy Policy</a>\n                    </li>\n                }\n                <li class=\"border-left ps-2 me-2\">\n                    @* you are free to remove the powered by cloudscribe link but we appreciate it if you choose to keep it! *@\n                    <a class=\"text-nowrap\" target=\"_blank\" href=\"https://www.cloudscribe.com/?utm_source=@Context.Request.Host.Value&amp;utm_medium=referral&amp;utm_campaign=poweredbycloudscribe\">Powered by cloudscribe</a>\n                </li>\n            </ul>\n        </div>\n        <div class=\"ps-sm-2  text-center w-100\"><span class=\"text-nowrap\">Copyright &copy; @DateTime.Now.Year</span><span class=\"d-none d-sm-inline\"> - </span><span> @(Tenant?.SiteName ?? \"Sample\")</span></div>\n        <partial name=\"_CookieConsentRevokePartial\" />\n        </div>\n    </footer>\n    @RenderSection(\"Toolbar\", required: false)\n    <environment names=\"Development\">\n        <script src=\"~/js/jquery.js\" cs-resolve-theme-resource=\"true\" cs-shared-theme=\"true\" cs-tenant=\"@Tenant\"></script>\n        <script src=\"~/js/bootstrap.bundle.js\" cs-resolve-theme-resource=\"true\" cs-shared-theme=\"true\" cs-tenant=\"@Tenant\"></script>\n        <script src=\"~/cr/js/bs4.smartmenus.min.js\"></script>\n    </environment>\n    <environment names=\"Staging,Production\">\n        <script src=\"~/js/jquery.min.js\" cs-resolve-theme-resource=\"true\" cs-shared-theme=\"true\" cs-tenant=\"@Tenant\"></script>\n        <script src=\"~/js/bootstrap.bundle.min.js\" cs-resolve-theme-resource=\"true\" cs-shared-theme=\"true\" cs-tenant=\"@Tenant\"></script>\n        <script src=\"~/cr/js/bs4.smartmenus.min.js\"></script>\n    </environment>\n    @RenderSection(\"Bottom\", required: false)\n    @RenderSection(\"Scripts\", required: false)     \n    @Html.RenderResources(\"js\") @*render any js resources declared via helpers in partial views etc*@\n    <add-this profile-id=\"@Tenant.AddThisDotComUsername\" async></add-this>\n</body>\n</html>\n"
  },
  {
    "path": "src/sourceDev.WebApp/SharedThemes/flatly/wwwroot/css/_bootswatch.scss",
    "content": "// Flatly 5.1.3\n// Bootswatch\n\n\n// Variables\n\n$web-font-path: \"https://fonts.googleapis.com/css2?family=Lato:ital,wght@0,400;0,700;1,400&display=swap\" !default;\n@if $web-font-path {\n  @import url($web-font-path);\n}\n\n// Navbar\n\n.bg-primary {\n  .navbar-nav .show > .nav-link,\n  .navbar-nav .nav-link.active,\n  .navbar-nav .nav-link:hover,\n  .navbar-nav .nav-link:focus {\n    color: $success !important;\n  }\n}\n\n// Navs\n\n.nav-tabs {\n  .nav-link.active,\n  .nav-link.active:focus,\n  .nav-link.active:hover,\n  .nav-item.open .nav-link,\n  .nav-item.open .nav-link:focus,\n  .nav-item.open .nav-link:hover {\n    color: $primary;\n  }\n}\n\n.pagination {\n  a:hover {\n    text-decoration: none;\n  }\n}\n\n// Indicators\n\n.badge {\n  &.bg-light {\n    color: $dark;\n  }\n}\n\n.alert {\n  border: none;\n  color: $white;\n\n  a,\n  .alert-link {\n    color: $white;\n    text-decoration: underline;\n  }\n\n  @each $color, $value in $theme-colors {\n    &-#{$color} {\n      @if $enable-gradients {\n        background: $value linear-gradient(180deg, mix($body-bg, $value, 15%), $value) repeat-x;\n      } @else {\n        background-color: $value;\n      }\n    }\n  }\n\n  &-light {\n    &,\n    a,\n    .alert-link {\n      color: $body-color;\n    }\n  }\n}\n\n// Containers\n\n.modal,\n.toast {\n  .btn-close {\n    background-image: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23000'><path d='M.293.293a1 1 0 011.414 0L8 6.586 14.293.293a1 1 0 111.414 1.414L9.414 8l6.293 6.293a1 1 0 01-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 01-1.414-1.414L6.586 8 .293 1.707a1 1 0 010-1.414z'/></svg>\");\n  }\n}\n"
  },
  {
    "path": "src/sourceDev.WebApp/SharedThemes/flatly/wwwroot/css/_variables.scss",
    "content": "// Flatly 5.1.3\n// Bootswatch\n\n$theme: \"flatly\" !default;\n\n//\n// Color system\n//\n\n$white:    #fff !default;\n$gray-100: #f8f9fa !default;\n$gray-200: #ecf0f1 !default;\n$gray-300: #dee2e6 !default;\n$gray-400: #ced4da !default;\n$gray-500: #b4bcc2 !default;\n$gray-600: #95a5a6 !default;\n$gray-700: #7b8a8b !default;\n$gray-800: #343a40 !default;\n$gray-900: #212529 !default;\n$black:    #000 !default;\n\n$blue:    #2c3e50 !default;\n$indigo:  #6610f2 !default;\n$purple:  #6f42c1 !default;\n$pink:    #e83e8c !default;\n$red:     #e74c3c !default;\n$orange:  #fd7e14 !default;\n$yellow:  #f39c12 !default;\n$green:   #18bc9c !default;\n$teal:    #20c997 !default;\n$cyan:    #3498db !default;\n\n$primary:       $blue !default;\n$secondary:     $gray-600 !default;\n$success:       $green !default;\n$info:          $cyan !default;\n$warning:       $yellow !default;\n$danger:        $red !default;\n$light:         $gray-200 !default;\n$dark:          $gray-700 !default;\n\n$min-contrast-ratio:   2.05 !default;\n\n// Links\n\n$link-color:                $success !default;\n\n// Fonts\n\n// stylelint-disable-next-line value-keyword-case\n$font-family-sans-serif:      Lato, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\" !default;\n$h1-font-size:                3rem !default;\n$h2-font-size:                2.5rem !default;\n$h3-font-size:                2rem !default;\n\n// Tables\n\n$table-bg-scale:              0 !default;\n\n// Dropdowns\n\n$dropdown-link-color:               $gray-700 !default;\n$dropdown-link-hover-color:         $white !default;\n$dropdown-link-hover-bg:            $primary !default;\n\n// Navs\n\n$nav-link-padding-y:                .5rem !default !default;\n$nav-link-padding-x:                2rem !default;\n$nav-link-disabled-color:           $gray-600 !default !default;\n$nav-tabs-border-color:             $gray-200 !default;\n\n// Navbar\n\n$navbar-padding-y:                  1rem !default;\n$navbar-dark-color:                 $white !default;\n$navbar-dark-hover-color:           $primary !default;\n$navbar-dark-active-color:          $primary !default;\n\n$navbar-dark-brand-color:                 $white !default;\n$navbar-dark-brand-hover-color:           $navbar-dark-brand-color !default;\n\n// Pagination\n\n$pagination-color:                  $white !default;\n$pagination-bg:                     $success !default;\n$pagination-border-width:           0 !default;\n$pagination-border-color:           transparent !default;\n$pagination-hover-color:            $white !default;\n$pagination-hover-bg:               darken($success, 15%) !default;\n$pagination-hover-border-color:     transparent !default;\n$pagination-active-bg:              $pagination-hover-bg !default;\n$pagination-active-border-color:    transparent !default;\n$pagination-disabled-color:         $gray-200 !default;\n$pagination-disabled-bg:            lighten($success, 15%) !default;\n$pagination-disabled-border-color:  transparent !default;\n\n// List group\n\n$list-group-hover-bg:               $gray-200 !default;\n$list-group-disabled-bg:            $gray-200 !default;\n\n// Breadcrumbs\n\n$breadcrumb-padding-y:              .375rem !default;\n$breadcrumb-padding-x:              .75rem !default;\n$breadcrumb-border-radius:          .25rem !default;\n\n// Close\n\n$btn-close-color:            $white !default;\n$btn-close-opacity:          .4 !default;\n$btn-close-hover-opacity:    1 !default;\n"
  },
  {
    "path": "src/sourceDev.WebApp/SharedThemes/flatly/wwwroot/css/bootstrap.css",
    "content": "/*!\n * Bootswatch v5.1.3\n * Homepage: https://bootswatch.com\n * Copyright 2012-2021 Thomas Park\n * Licensed under MIT\n * Based on Bootstrap\n*/\n/*!\n * Bootstrap v5.1.3 (https://getbootstrap.com/)\n * Copyright 2011-2021 The Bootstrap Authors\n * Copyright 2011-2021 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n@import url(\"https://fonts.googleapis.com/css2?family=Lato:ital,wght@0,400;0,700;1,400&display=swap\");\n:root {\n  --bs-blue: #2c3e50;\n  --bs-indigo: #6610f2;\n  --bs-purple: #6f42c1;\n  --bs-pink: #e83e8c;\n  --bs-red: #e74c3c;\n  --bs-orange: #fd7e14;\n  --bs-yellow: #f39c12;\n  --bs-green: #18bc9c;\n  --bs-teal: #20c997;\n  --bs-cyan: #3498db;\n  --bs-white: #fff;\n  --bs-gray: #95a5a6;\n  --bs-gray-dark: #343a40;\n  --bs-gray-100: #f8f9fa;\n  --bs-gray-200: #ecf0f1;\n  --bs-gray-300: #dee2e6;\n  --bs-gray-400: #ced4da;\n  --bs-gray-500: #b4bcc2;\n  --bs-gray-600: #95a5a6;\n  --bs-gray-700: #7b8a8b;\n  --bs-gray-800: #343a40;\n  --bs-gray-900: #212529;\n  --bs-primary: #2c3e50;\n  --bs-secondary: #95a5a6;\n  --bs-success: #18bc9c;\n  --bs-info: #3498db;\n  --bs-warning: #f39c12;\n  --bs-danger: #e74c3c;\n  --bs-light: #ecf0f1;\n  --bs-dark: #7b8a8b;\n  --bs-primary-rgb: 44, 62, 80;\n  --bs-secondary-rgb: 149, 165, 166;\n  --bs-success-rgb: 24, 188, 156;\n  --bs-info-rgb: 52, 152, 219;\n  --bs-warning-rgb: 243, 156, 18;\n  --bs-danger-rgb: 231, 76, 60;\n  --bs-light-rgb: 236, 240, 241;\n  --bs-dark-rgb: 123, 138, 139;\n  --bs-white-rgb: 255, 255, 255;\n  --bs-black-rgb: 0, 0, 0;\n  --bs-body-color-rgb: 33, 37, 41;\n  --bs-body-bg-rgb: 255, 255, 255;\n  --bs-font-sans-serif: Lato, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\";\n  --bs-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n  --bs-gradient: linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));\n  --bs-body-font-family: var(--bs-font-sans-serif);\n  --bs-body-font-size: 1rem;\n  --bs-body-font-weight: 400;\n  --bs-body-line-height: 1.5;\n  --bs-body-color: #212529;\n  --bs-body-bg: #fff;\n}\n\n*,\n*::before,\n*::after {\n  box-sizing: border-box;\n}\n\n@media (prefers-reduced-motion: no-preference) {\n  :root {\n    scroll-behavior: smooth;\n  }\n}\n\nbody {\n  margin: 0;\n  font-family: var(--bs-body-font-family);\n  font-size: var(--bs-body-font-size);\n  font-weight: var(--bs-body-font-weight);\n  line-height: var(--bs-body-line-height);\n  color: var(--bs-body-color);\n  text-align: var(--bs-body-text-align);\n  background-color: var(--bs-body-bg);\n  -webkit-text-size-adjust: 100%;\n  -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\n\nhr {\n  margin: 1rem 0;\n  color: inherit;\n  background-color: currentColor;\n  border: 0;\n  opacity: 0.25;\n}\n\nhr:not([size]) {\n  height: 1px;\n}\n\nh1, .h1, h2, .h2, h3, .h3, h4, .h4, h5, .h5, h6, .h6 {\n  margin-top: 0;\n  margin-bottom: 0.5rem;\n  font-weight: 500;\n  line-height: 1.2;\n}\n\nh1, .h1 {\n  font-size: calc(1.425rem + 2.1vw);\n}\n\n@media (min-width: 1200px) {\n  h1, .h1 {\n    font-size: 3rem;\n  }\n}\n\nh2, .h2 {\n  font-size: calc(1.375rem + 1.5vw);\n}\n\n@media (min-width: 1200px) {\n  h2, .h2 {\n    font-size: 2.5rem;\n  }\n}\n\nh3, .h3 {\n  font-size: calc(1.325rem + 0.9vw);\n}\n\n@media (min-width: 1200px) {\n  h3, .h3 {\n    font-size: 2rem;\n  }\n}\n\nh4, .h4 {\n  font-size: calc(1.275rem + 0.3vw);\n}\n\n@media (min-width: 1200px) {\n  h4, .h4 {\n    font-size: 1.5rem;\n  }\n}\n\nh5, .h5 {\n  font-size: 1.25rem;\n}\n\nh6, .h6 {\n  font-size: 1rem;\n}\n\np {\n  margin-top: 0;\n  margin-bottom: 1rem;\n}\n\nabbr[title],\nabbr[data-bs-original-title] {\n  -webkit-text-decoration: underline dotted;\n  text-decoration: underline dotted;\n  cursor: help;\n  -webkit-text-decoration-skip-ink: none;\n  text-decoration-skip-ink: none;\n}\n\naddress {\n  margin-bottom: 1rem;\n  font-style: normal;\n  line-height: inherit;\n}\n\nol,\nul {\n  padding-left: 2rem;\n}\n\nol,\nul,\ndl {\n  margin-top: 0;\n  margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n  margin-bottom: 0;\n}\n\ndt {\n  font-weight: 700;\n}\n\ndd {\n  margin-bottom: .5rem;\n  margin-left: 0;\n}\n\nblockquote {\n  margin: 0 0 1rem;\n}\n\nb,\nstrong {\n  font-weight: bolder;\n}\n\nsmall, .small {\n  font-size: 0.875em;\n}\n\nmark, .mark {\n  padding: 0.2em;\n  background-color: #fcf8e3;\n}\n\nsub,\nsup {\n  position: relative;\n  font-size: 0.75em;\n  line-height: 0;\n  vertical-align: baseline;\n}\n\nsub {\n  bottom: -.25em;\n}\n\nsup {\n  top: -.5em;\n}\n\na {\n  color: #18bc9c;\n  text-decoration: underline;\n}\n\na:hover {\n  color: #13967d;\n}\n\na:not([href]):not([class]), a:not([href]):not([class]):hover {\n  color: inherit;\n  text-decoration: none;\n}\n\npre,\ncode,\nkbd,\nsamp {\n  font-family: var(--bs-font-monospace);\n  font-size: 1em;\n  direction: ltr /* rtl:ignore */;\n  unicode-bidi: bidi-override;\n}\n\npre {\n  display: block;\n  margin-top: 0;\n  margin-bottom: 1rem;\n  overflow: auto;\n  font-size: 0.875em;\n}\n\npre code {\n  font-size: inherit;\n  color: inherit;\n  word-break: normal;\n}\n\ncode {\n  font-size: 0.875em;\n  color: #e83e8c;\n  word-wrap: break-word;\n}\n\na > code {\n  color: inherit;\n}\n\nkbd {\n  padding: 0.2rem 0.4rem;\n  font-size: 0.875em;\n  color: #fff;\n  background-color: #212529;\n  border-radius: 0.2rem;\n}\n\nkbd kbd {\n  padding: 0;\n  font-size: 1em;\n  font-weight: 700;\n}\n\nfigure {\n  margin: 0 0 1rem;\n}\n\nimg,\nsvg {\n  vertical-align: middle;\n}\n\ntable {\n  caption-side: bottom;\n  border-collapse: collapse;\n}\n\ncaption {\n  padding-top: 0.5rem;\n  padding-bottom: 0.5rem;\n  color: #95a5a6;\n  text-align: left;\n}\n\nth {\n  text-align: inherit;\n  text-align: -webkit-match-parent;\n}\n\nthead,\ntbody,\ntfoot,\ntr,\ntd,\nth {\n  border-color: inherit;\n  border-style: solid;\n  border-width: 0;\n}\n\nlabel {\n  display: inline-block;\n}\n\nbutton {\n  border-radius: 0;\n}\n\nbutton:focus:not(:focus-visible) {\n  outline: 0;\n}\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n  margin: 0;\n  font-family: inherit;\n  font-size: inherit;\n  line-height: inherit;\n}\n\nbutton,\nselect {\n  text-transform: none;\n}\n\n[role=\"button\"] {\n  cursor: pointer;\n}\n\nselect {\n  word-wrap: normal;\n}\n\nselect:disabled {\n  opacity: 1;\n}\n\n[list]::-webkit-calendar-picker-indicator {\n  display: none;\n}\n\nbutton,\n[type=\"button\"],\n[type=\"reset\"],\n[type=\"submit\"] {\n  -webkit-appearance: button;\n}\n\nbutton:not(:disabled),\n[type=\"button\"]:not(:disabled),\n[type=\"reset\"]:not(:disabled),\n[type=\"submit\"]:not(:disabled) {\n  cursor: pointer;\n}\n\n::-moz-focus-inner {\n  padding: 0;\n  border-style: none;\n}\n\ntextarea {\n  resize: vertical;\n}\n\nfieldset {\n  min-width: 0;\n  padding: 0;\n  margin: 0;\n  border: 0;\n}\n\nlegend {\n  float: left;\n  width: 100%;\n  padding: 0;\n  margin-bottom: 0.5rem;\n  font-size: calc(1.275rem + 0.3vw);\n  line-height: inherit;\n}\n\n@media (min-width: 1200px) {\n  legend {\n    font-size: 1.5rem;\n  }\n}\n\nlegend + * {\n  clear: left;\n}\n\n::-webkit-datetime-edit-fields-wrapper,\n::-webkit-datetime-edit-text,\n::-webkit-datetime-edit-minute,\n::-webkit-datetime-edit-hour-field,\n::-webkit-datetime-edit-day-field,\n::-webkit-datetime-edit-month-field,\n::-webkit-datetime-edit-year-field {\n  padding: 0;\n}\n\n::-webkit-inner-spin-button {\n  height: auto;\n}\n\n[type=\"search\"] {\n  outline-offset: -2px;\n  -webkit-appearance: textfield;\n}\n\n/* rtl:raw:\n[type=\"tel\"],\n[type=\"url\"],\n[type=\"email\"],\n[type=\"number\"] {\n  direction: ltr;\n}\n*/\n::-webkit-search-decoration {\n  -webkit-appearance: none;\n}\n\n::-webkit-color-swatch-wrapper {\n  padding: 0;\n}\n\n::file-selector-button {\n  font: inherit;\n}\n\n::-webkit-file-upload-button {\n  font: inherit;\n  -webkit-appearance: button;\n}\n\noutput {\n  display: inline-block;\n}\n\niframe {\n  border: 0;\n}\n\nsummary {\n  display: list-item;\n  cursor: pointer;\n}\n\nprogress {\n  vertical-align: baseline;\n}\n\n[hidden] {\n  display: none !important;\n}\n\n.lead {\n  font-size: 1.25rem;\n  font-weight: 300;\n}\n\n.display-1 {\n  font-size: calc(1.625rem + 4.5vw);\n  font-weight: 300;\n  line-height: 1.2;\n}\n\n@media (min-width: 1200px) {\n  .display-1 {\n    font-size: 5rem;\n  }\n}\n\n.display-2 {\n  font-size: calc(1.575rem + 3.9vw);\n  font-weight: 300;\n  line-height: 1.2;\n}\n\n@media (min-width: 1200px) {\n  .display-2 {\n    font-size: 4.5rem;\n  }\n}\n\n.display-3 {\n  font-size: calc(1.525rem + 3.3vw);\n  font-weight: 300;\n  line-height: 1.2;\n}\n\n@media (min-width: 1200px) {\n  .display-3 {\n    font-size: 4rem;\n  }\n}\n\n.display-4 {\n  font-size: calc(1.475rem + 2.7vw);\n  font-weight: 300;\n  line-height: 1.2;\n}\n\n@media (min-width: 1200px) {\n  .display-4 {\n    font-size: 3.5rem;\n  }\n}\n\n.display-5 {\n  font-size: calc(1.425rem + 2.1vw);\n  font-weight: 300;\n  line-height: 1.2;\n}\n\n@media (min-width: 1200px) {\n  .display-5 {\n    font-size: 3rem;\n  }\n}\n\n.display-6 {\n  font-size: calc(1.375rem + 1.5vw);\n  font-weight: 300;\n  line-height: 1.2;\n}\n\n@media (min-width: 1200px) {\n  .display-6 {\n    font-size: 2.5rem;\n  }\n}\n\n.list-unstyled {\n  padding-left: 0;\n  list-style: none;\n}\n\n.list-inline {\n  padding-left: 0;\n  list-style: none;\n}\n\n.list-inline-item {\n  display: inline-block;\n}\n\n.list-inline-item:not(:last-child) {\n  margin-right: 0.5rem;\n}\n\n.initialism {\n  font-size: 0.875em;\n  text-transform: uppercase;\n}\n\n.blockquote {\n  margin-bottom: 1rem;\n  font-size: 1.25rem;\n}\n\n.blockquote > :last-child {\n  margin-bottom: 0;\n}\n\n.blockquote-footer {\n  margin-top: -1rem;\n  margin-bottom: 1rem;\n  font-size: 0.875em;\n  color: #95a5a6;\n}\n\n.blockquote-footer::before {\n  content: \"\\2014\\00A0\";\n}\n\n.img-fluid {\n  max-width: 100%;\n  height: auto;\n}\n\n.img-thumbnail {\n  padding: 0.25rem;\n  background-color: #fff;\n  border: 1px solid #dee2e6;\n  border-radius: 0.25rem;\n  max-width: 100%;\n  height: auto;\n}\n\n.figure {\n  display: inline-block;\n}\n\n.figure-img {\n  margin-bottom: 0.5rem;\n  line-height: 1;\n}\n\n.figure-caption {\n  font-size: 0.875em;\n  color: #95a5a6;\n}\n\n.container,\n.container-fluid,\n.container-sm,\n.container-md,\n.container-lg,\n.container-xl,\n.container-xxl {\n  width: 100%;\n  padding-right: var(--bs-gutter-x, 0.75rem);\n  padding-left: var(--bs-gutter-x, 0.75rem);\n  margin-right: auto;\n  margin-left: auto;\n}\n\n@media (min-width: 576px) {\n  .container, .container-sm {\n    max-width: 540px;\n  }\n}\n\n@media (min-width: 768px) {\n  .container, .container-sm, .container-md {\n    max-width: 720px;\n  }\n}\n\n@media (min-width: 992px) {\n  .container, .container-sm, .container-md, .container-lg {\n    max-width: 960px;\n  }\n}\n\n@media (min-width: 1200px) {\n  .container, .container-sm, .container-md, .container-lg, .container-xl {\n    max-width: 1140px;\n  }\n}\n\n@media (min-width: 1400px) {\n  .container, .container-sm, .container-md, .container-lg, .container-xl, .container-xxl {\n    max-width: 1320px;\n  }\n}\n\n.row {\n  --bs-gutter-x: 1.5rem;\n  --bs-gutter-y: 0;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n  flex-wrap: wrap;\n  margin-top: calc(-1 * var(--bs-gutter-y));\n  margin-right: calc(-.5 * var(--bs-gutter-x));\n  margin-left: calc(-.5 * var(--bs-gutter-x));\n}\n\n.row > * {\n  -ms-flex-negative: 0;\n  flex-shrink: 0;\n  width: 100%;\n  max-width: 100%;\n  padding-right: calc(var(--bs-gutter-x) * .5);\n  padding-left: calc(var(--bs-gutter-x) * .5);\n  margin-top: var(--bs-gutter-y);\n}\n\n.col {\n  -ms-flex: 1 0 0%;\n  flex: 1 0 0%;\n}\n\n.row-cols-auto > * {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: auto;\n}\n\n.row-cols-1 > * {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 100%;\n}\n\n.row-cols-2 > * {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 50%;\n}\n\n.row-cols-3 > * {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 33.333333%;\n}\n\n.row-cols-4 > * {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 25%;\n}\n\n.row-cols-5 > * {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 20%;\n}\n\n.row-cols-6 > * {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 16.666667%;\n}\n\n.col-auto {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: auto;\n}\n\n.col-1 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 8.333333%;\n}\n\n.col-2 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 16.666667%;\n}\n\n.col-3 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 25%;\n}\n\n.col-4 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 33.333333%;\n}\n\n.col-5 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 41.666667%;\n}\n\n.col-6 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 50%;\n}\n\n.col-7 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 58.333333%;\n}\n\n.col-8 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 66.666667%;\n}\n\n.col-9 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 75%;\n}\n\n.col-10 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 83.333333%;\n}\n\n.col-11 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 91.666667%;\n}\n\n.col-12 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 100%;\n}\n\n.offset-1 {\n  margin-left: 8.333333%;\n}\n\n.offset-2 {\n  margin-left: 16.666667%;\n}\n\n.offset-3 {\n  margin-left: 25%;\n}\n\n.offset-4 {\n  margin-left: 33.333333%;\n}\n\n.offset-5 {\n  margin-left: 41.666667%;\n}\n\n.offset-6 {\n  margin-left: 50%;\n}\n\n.offset-7 {\n  margin-left: 58.333333%;\n}\n\n.offset-8 {\n  margin-left: 66.666667%;\n}\n\n.offset-9 {\n  margin-left: 75%;\n}\n\n.offset-10 {\n  margin-left: 83.333333%;\n}\n\n.offset-11 {\n  margin-left: 91.666667%;\n}\n\n.g-0,\n.gx-0 {\n  --bs-gutter-x: 0;\n}\n\n.g-0,\n.gy-0 {\n  --bs-gutter-y: 0;\n}\n\n.g-1,\n.gx-1 {\n  --bs-gutter-x: 0.25rem;\n}\n\n.g-1,\n.gy-1 {\n  --bs-gutter-y: 0.25rem;\n}\n\n.g-2,\n.gx-2 {\n  --bs-gutter-x: 0.5rem;\n}\n\n.g-2,\n.gy-2 {\n  --bs-gutter-y: 0.5rem;\n}\n\n.g-3,\n.gx-3 {\n  --bs-gutter-x: 1rem;\n}\n\n.g-3,\n.gy-3 {\n  --bs-gutter-y: 1rem;\n}\n\n.g-4,\n.gx-4 {\n  --bs-gutter-x: 1.5rem;\n}\n\n.g-4,\n.gy-4 {\n  --bs-gutter-y: 1.5rem;\n}\n\n.g-5,\n.gx-5 {\n  --bs-gutter-x: 3rem;\n}\n\n.g-5,\n.gy-5 {\n  --bs-gutter-y: 3rem;\n}\n\n@media (min-width: 576px) {\n  .col-sm {\n    -ms-flex: 1 0 0%;\n    flex: 1 0 0%;\n  }\n  .row-cols-sm-auto > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .row-cols-sm-1 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .row-cols-sm-2 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .row-cols-sm-3 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 33.333333%;\n  }\n  .row-cols-sm-4 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .row-cols-sm-5 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 20%;\n  }\n  .row-cols-sm-6 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 16.666667%;\n  }\n  .col-sm-auto {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .col-sm-1 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 8.333333%;\n  }\n  .col-sm-2 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 16.666667%;\n  }\n  .col-sm-3 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .col-sm-4 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 33.333333%;\n  }\n  .col-sm-5 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 41.666667%;\n  }\n  .col-sm-6 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .col-sm-7 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 58.333333%;\n  }\n  .col-sm-8 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 66.666667%;\n  }\n  .col-sm-9 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 75%;\n  }\n  .col-sm-10 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 83.333333%;\n  }\n  .col-sm-11 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 91.666667%;\n  }\n  .col-sm-12 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .offset-sm-0 {\n    margin-left: 0;\n  }\n  .offset-sm-1 {\n    margin-left: 8.333333%;\n  }\n  .offset-sm-2 {\n    margin-left: 16.666667%;\n  }\n  .offset-sm-3 {\n    margin-left: 25%;\n  }\n  .offset-sm-4 {\n    margin-left: 33.333333%;\n  }\n  .offset-sm-5 {\n    margin-left: 41.666667%;\n  }\n  .offset-sm-6 {\n    margin-left: 50%;\n  }\n  .offset-sm-7 {\n    margin-left: 58.333333%;\n  }\n  .offset-sm-8 {\n    margin-left: 66.666667%;\n  }\n  .offset-sm-9 {\n    margin-left: 75%;\n  }\n  .offset-sm-10 {\n    margin-left: 83.333333%;\n  }\n  .offset-sm-11 {\n    margin-left: 91.666667%;\n  }\n  .g-sm-0,\n  .gx-sm-0 {\n    --bs-gutter-x: 0;\n  }\n  .g-sm-0,\n  .gy-sm-0 {\n    --bs-gutter-y: 0;\n  }\n  .g-sm-1,\n  .gx-sm-1 {\n    --bs-gutter-x: 0.25rem;\n  }\n  .g-sm-1,\n  .gy-sm-1 {\n    --bs-gutter-y: 0.25rem;\n  }\n  .g-sm-2,\n  .gx-sm-2 {\n    --bs-gutter-x: 0.5rem;\n  }\n  .g-sm-2,\n  .gy-sm-2 {\n    --bs-gutter-y: 0.5rem;\n  }\n  .g-sm-3,\n  .gx-sm-3 {\n    --bs-gutter-x: 1rem;\n  }\n  .g-sm-3,\n  .gy-sm-3 {\n    --bs-gutter-y: 1rem;\n  }\n  .g-sm-4,\n  .gx-sm-4 {\n    --bs-gutter-x: 1.5rem;\n  }\n  .g-sm-4,\n  .gy-sm-4 {\n    --bs-gutter-y: 1.5rem;\n  }\n  .g-sm-5,\n  .gx-sm-5 {\n    --bs-gutter-x: 3rem;\n  }\n  .g-sm-5,\n  .gy-sm-5 {\n    --bs-gutter-y: 3rem;\n  }\n}\n\n@media (min-width: 768px) {\n  .col-md {\n    -ms-flex: 1 0 0%;\n    flex: 1 0 0%;\n  }\n  .row-cols-md-auto > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .row-cols-md-1 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .row-cols-md-2 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .row-cols-md-3 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 33.333333%;\n  }\n  .row-cols-md-4 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .row-cols-md-5 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 20%;\n  }\n  .row-cols-md-6 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 16.666667%;\n  }\n  .col-md-auto {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .col-md-1 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 8.333333%;\n  }\n  .col-md-2 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 16.666667%;\n  }\n  .col-md-3 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .col-md-4 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 33.333333%;\n  }\n  .col-md-5 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 41.666667%;\n  }\n  .col-md-6 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .col-md-7 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 58.333333%;\n  }\n  .col-md-8 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 66.666667%;\n  }\n  .col-md-9 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 75%;\n  }\n  .col-md-10 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 83.333333%;\n  }\n  .col-md-11 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 91.666667%;\n  }\n  .col-md-12 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .offset-md-0 {\n    margin-left: 0;\n  }\n  .offset-md-1 {\n    margin-left: 8.333333%;\n  }\n  .offset-md-2 {\n    margin-left: 16.666667%;\n  }\n  .offset-md-3 {\n    margin-left: 25%;\n  }\n  .offset-md-4 {\n    margin-left: 33.333333%;\n  }\n  .offset-md-5 {\n    margin-left: 41.666667%;\n  }\n  .offset-md-6 {\n    margin-left: 50%;\n  }\n  .offset-md-7 {\n    margin-left: 58.333333%;\n  }\n  .offset-md-8 {\n    margin-left: 66.666667%;\n  }\n  .offset-md-9 {\n    margin-left: 75%;\n  }\n  .offset-md-10 {\n    margin-left: 83.333333%;\n  }\n  .offset-md-11 {\n    margin-left: 91.666667%;\n  }\n  .g-md-0,\n  .gx-md-0 {\n    --bs-gutter-x: 0;\n  }\n  .g-md-0,\n  .gy-md-0 {\n    --bs-gutter-y: 0;\n  }\n  .g-md-1,\n  .gx-md-1 {\n    --bs-gutter-x: 0.25rem;\n  }\n  .g-md-1,\n  .gy-md-1 {\n    --bs-gutter-y: 0.25rem;\n  }\n  .g-md-2,\n  .gx-md-2 {\n    --bs-gutter-x: 0.5rem;\n  }\n  .g-md-2,\n  .gy-md-2 {\n    --bs-gutter-y: 0.5rem;\n  }\n  .g-md-3,\n  .gx-md-3 {\n    --bs-gutter-x: 1rem;\n  }\n  .g-md-3,\n  .gy-md-3 {\n    --bs-gutter-y: 1rem;\n  }\n  .g-md-4,\n  .gx-md-4 {\n    --bs-gutter-x: 1.5rem;\n  }\n  .g-md-4,\n  .gy-md-4 {\n    --bs-gutter-y: 1.5rem;\n  }\n  .g-md-5,\n  .gx-md-5 {\n    --bs-gutter-x: 3rem;\n  }\n  .g-md-5,\n  .gy-md-5 {\n    --bs-gutter-y: 3rem;\n  }\n}\n\n@media (min-width: 992px) {\n  .col-lg {\n    -ms-flex: 1 0 0%;\n    flex: 1 0 0%;\n  }\n  .row-cols-lg-auto > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .row-cols-lg-1 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .row-cols-lg-2 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .row-cols-lg-3 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 33.333333%;\n  }\n  .row-cols-lg-4 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .row-cols-lg-5 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 20%;\n  }\n  .row-cols-lg-6 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 16.666667%;\n  }\n  .col-lg-auto {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .col-lg-1 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 8.333333%;\n  }\n  .col-lg-2 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 16.666667%;\n  }\n  .col-lg-3 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .col-lg-4 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 33.333333%;\n  }\n  .col-lg-5 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 41.666667%;\n  }\n  .col-lg-6 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .col-lg-7 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 58.333333%;\n  }\n  .col-lg-8 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 66.666667%;\n  }\n  .col-lg-9 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 75%;\n  }\n  .col-lg-10 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 83.333333%;\n  }\n  .col-lg-11 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 91.666667%;\n  }\n  .col-lg-12 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .offset-lg-0 {\n    margin-left: 0;\n  }\n  .offset-lg-1 {\n    margin-left: 8.333333%;\n  }\n  .offset-lg-2 {\n    margin-left: 16.666667%;\n  }\n  .offset-lg-3 {\n    margin-left: 25%;\n  }\n  .offset-lg-4 {\n    margin-left: 33.333333%;\n  }\n  .offset-lg-5 {\n    margin-left: 41.666667%;\n  }\n  .offset-lg-6 {\n    margin-left: 50%;\n  }\n  .offset-lg-7 {\n    margin-left: 58.333333%;\n  }\n  .offset-lg-8 {\n    margin-left: 66.666667%;\n  }\n  .offset-lg-9 {\n    margin-left: 75%;\n  }\n  .offset-lg-10 {\n    margin-left: 83.333333%;\n  }\n  .offset-lg-11 {\n    margin-left: 91.666667%;\n  }\n  .g-lg-0,\n  .gx-lg-0 {\n    --bs-gutter-x: 0;\n  }\n  .g-lg-0,\n  .gy-lg-0 {\n    --bs-gutter-y: 0;\n  }\n  .g-lg-1,\n  .gx-lg-1 {\n    --bs-gutter-x: 0.25rem;\n  }\n  .g-lg-1,\n  .gy-lg-1 {\n    --bs-gutter-y: 0.25rem;\n  }\n  .g-lg-2,\n  .gx-lg-2 {\n    --bs-gutter-x: 0.5rem;\n  }\n  .g-lg-2,\n  .gy-lg-2 {\n    --bs-gutter-y: 0.5rem;\n  }\n  .g-lg-3,\n  .gx-lg-3 {\n    --bs-gutter-x: 1rem;\n  }\n  .g-lg-3,\n  .gy-lg-3 {\n    --bs-gutter-y: 1rem;\n  }\n  .g-lg-4,\n  .gx-lg-4 {\n    --bs-gutter-x: 1.5rem;\n  }\n  .g-lg-4,\n  .gy-lg-4 {\n    --bs-gutter-y: 1.5rem;\n  }\n  .g-lg-5,\n  .gx-lg-5 {\n    --bs-gutter-x: 3rem;\n  }\n  .g-lg-5,\n  .gy-lg-5 {\n    --bs-gutter-y: 3rem;\n  }\n}\n\n@media (min-width: 1200px) {\n  .col-xl {\n    -ms-flex: 1 0 0%;\n    flex: 1 0 0%;\n  }\n  .row-cols-xl-auto > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .row-cols-xl-1 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .row-cols-xl-2 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .row-cols-xl-3 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 33.333333%;\n  }\n  .row-cols-xl-4 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .row-cols-xl-5 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 20%;\n  }\n  .row-cols-xl-6 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 16.666667%;\n  }\n  .col-xl-auto {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .col-xl-1 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 8.333333%;\n  }\n  .col-xl-2 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 16.666667%;\n  }\n  .col-xl-3 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .col-xl-4 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 33.333333%;\n  }\n  .col-xl-5 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 41.666667%;\n  }\n  .col-xl-6 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .col-xl-7 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 58.333333%;\n  }\n  .col-xl-8 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 66.666667%;\n  }\n  .col-xl-9 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 75%;\n  }\n  .col-xl-10 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 83.333333%;\n  }\n  .col-xl-11 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 91.666667%;\n  }\n  .col-xl-12 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .offset-xl-0 {\n    margin-left: 0;\n  }\n  .offset-xl-1 {\n    margin-left: 8.333333%;\n  }\n  .offset-xl-2 {\n    margin-left: 16.666667%;\n  }\n  .offset-xl-3 {\n    margin-left: 25%;\n  }\n  .offset-xl-4 {\n    margin-left: 33.333333%;\n  }\n  .offset-xl-5 {\n    margin-left: 41.666667%;\n  }\n  .offset-xl-6 {\n    margin-left: 50%;\n  }\n  .offset-xl-7 {\n    margin-left: 58.333333%;\n  }\n  .offset-xl-8 {\n    margin-left: 66.666667%;\n  }\n  .offset-xl-9 {\n    margin-left: 75%;\n  }\n  .offset-xl-10 {\n    margin-left: 83.333333%;\n  }\n  .offset-xl-11 {\n    margin-left: 91.666667%;\n  }\n  .g-xl-0,\n  .gx-xl-0 {\n    --bs-gutter-x: 0;\n  }\n  .g-xl-0,\n  .gy-xl-0 {\n    --bs-gutter-y: 0;\n  }\n  .g-xl-1,\n  .gx-xl-1 {\n    --bs-gutter-x: 0.25rem;\n  }\n  .g-xl-1,\n  .gy-xl-1 {\n    --bs-gutter-y: 0.25rem;\n  }\n  .g-xl-2,\n  .gx-xl-2 {\n    --bs-gutter-x: 0.5rem;\n  }\n  .g-xl-2,\n  .gy-xl-2 {\n    --bs-gutter-y: 0.5rem;\n  }\n  .g-xl-3,\n  .gx-xl-3 {\n    --bs-gutter-x: 1rem;\n  }\n  .g-xl-3,\n  .gy-xl-3 {\n    --bs-gutter-y: 1rem;\n  }\n  .g-xl-4,\n  .gx-xl-4 {\n    --bs-gutter-x: 1.5rem;\n  }\n  .g-xl-4,\n  .gy-xl-4 {\n    --bs-gutter-y: 1.5rem;\n  }\n  .g-xl-5,\n  .gx-xl-5 {\n    --bs-gutter-x: 3rem;\n  }\n  .g-xl-5,\n  .gy-xl-5 {\n    --bs-gutter-y: 3rem;\n  }\n}\n\n@media (min-width: 1400px) {\n  .col-xxl {\n    -ms-flex: 1 0 0%;\n    flex: 1 0 0%;\n  }\n  .row-cols-xxl-auto > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .row-cols-xxl-1 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .row-cols-xxl-2 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .row-cols-xxl-3 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 33.333333%;\n  }\n  .row-cols-xxl-4 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .row-cols-xxl-5 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 20%;\n  }\n  .row-cols-xxl-6 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 16.666667%;\n  }\n  .col-xxl-auto {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .col-xxl-1 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 8.333333%;\n  }\n  .col-xxl-2 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 16.666667%;\n  }\n  .col-xxl-3 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .col-xxl-4 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 33.333333%;\n  }\n  .col-xxl-5 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 41.666667%;\n  }\n  .col-xxl-6 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .col-xxl-7 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 58.333333%;\n  }\n  .col-xxl-8 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 66.666667%;\n  }\n  .col-xxl-9 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 75%;\n  }\n  .col-xxl-10 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 83.333333%;\n  }\n  .col-xxl-11 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 91.666667%;\n  }\n  .col-xxl-12 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .offset-xxl-0 {\n    margin-left: 0;\n  }\n  .offset-xxl-1 {\n    margin-left: 8.333333%;\n  }\n  .offset-xxl-2 {\n    margin-left: 16.666667%;\n  }\n  .offset-xxl-3 {\n    margin-left: 25%;\n  }\n  .offset-xxl-4 {\n    margin-left: 33.333333%;\n  }\n  .offset-xxl-5 {\n    margin-left: 41.666667%;\n  }\n  .offset-xxl-6 {\n    margin-left: 50%;\n  }\n  .offset-xxl-7 {\n    margin-left: 58.333333%;\n  }\n  .offset-xxl-8 {\n    margin-left: 66.666667%;\n  }\n  .offset-xxl-9 {\n    margin-left: 75%;\n  }\n  .offset-xxl-10 {\n    margin-left: 83.333333%;\n  }\n  .offset-xxl-11 {\n    margin-left: 91.666667%;\n  }\n  .g-xxl-0,\n  .gx-xxl-0 {\n    --bs-gutter-x: 0;\n  }\n  .g-xxl-0,\n  .gy-xxl-0 {\n    --bs-gutter-y: 0;\n  }\n  .g-xxl-1,\n  .gx-xxl-1 {\n    --bs-gutter-x: 0.25rem;\n  }\n  .g-xxl-1,\n  .gy-xxl-1 {\n    --bs-gutter-y: 0.25rem;\n  }\n  .g-xxl-2,\n  .gx-xxl-2 {\n    --bs-gutter-x: 0.5rem;\n  }\n  .g-xxl-2,\n  .gy-xxl-2 {\n    --bs-gutter-y: 0.5rem;\n  }\n  .g-xxl-3,\n  .gx-xxl-3 {\n    --bs-gutter-x: 1rem;\n  }\n  .g-xxl-3,\n  .gy-xxl-3 {\n    --bs-gutter-y: 1rem;\n  }\n  .g-xxl-4,\n  .gx-xxl-4 {\n    --bs-gutter-x: 1.5rem;\n  }\n  .g-xxl-4,\n  .gy-xxl-4 {\n    --bs-gutter-y: 1.5rem;\n  }\n  .g-xxl-5,\n  .gx-xxl-5 {\n    --bs-gutter-x: 3rem;\n  }\n  .g-xxl-5,\n  .gy-xxl-5 {\n    --bs-gutter-y: 3rem;\n  }\n}\n\n.table {\n  --bs-table-bg: transparent;\n  --bs-table-accent-bg: transparent;\n  --bs-table-striped-color: #212529;\n  --bs-table-striped-bg: rgba(0, 0, 0, 0.05);\n  --bs-table-active-color: #212529;\n  --bs-table-active-bg: rgba(0, 0, 0, 0.1);\n  --bs-table-hover-color: #212529;\n  --bs-table-hover-bg: rgba(0, 0, 0, 0.075);\n  width: 100%;\n  margin-bottom: 1rem;\n  color: #212529;\n  vertical-align: top;\n  border-color: #dee2e6;\n}\n\n.table > :not(caption) > * > * {\n  padding: 0.5rem 0.5rem;\n  background-color: var(--bs-table-bg);\n  border-bottom-width: 1px;\n  box-shadow: inset 0 0 0 9999px var(--bs-table-accent-bg);\n}\n\n.table > tbody {\n  vertical-align: inherit;\n}\n\n.table > thead {\n  vertical-align: bottom;\n}\n\n.table > :not(:first-child) {\n  border-top: 2px solid currentColor;\n}\n\n.caption-top {\n  caption-side: top;\n}\n\n.table-sm > :not(caption) > * > * {\n  padding: 0.25rem 0.25rem;\n}\n\n.table-bordered > :not(caption) > * {\n  border-width: 1px 0;\n}\n\n.table-bordered > :not(caption) > * > * {\n  border-width: 0 1px;\n}\n\n.table-borderless > :not(caption) > * > * {\n  border-bottom-width: 0;\n}\n\n.table-borderless > :not(:first-child) {\n  border-top-width: 0;\n}\n\n.table-striped > tbody > tr:nth-of-type(odd) > * {\n  --bs-table-accent-bg: var(--bs-table-striped-bg);\n  color: var(--bs-table-striped-color);\n}\n\n.table-active {\n  --bs-table-accent-bg: var(--bs-table-active-bg);\n  color: var(--bs-table-active-color);\n}\n\n.table-hover > tbody > tr:hover > * {\n  --bs-table-accent-bg: var(--bs-table-hover-bg);\n  color: var(--bs-table-hover-color);\n}\n\n.table-primary {\n  --bs-table-bg: #2c3e50;\n  --bs-table-striped-bg: #374859;\n  --bs-table-striped-color: #fff;\n  --bs-table-active-bg: #415162;\n  --bs-table-active-color: #fff;\n  --bs-table-hover-bg: #3c4c5d;\n  --bs-table-hover-color: #fff;\n  color: #fff;\n  border-color: #415162;\n}\n\n.table-secondary {\n  --bs-table-bg: #95a5a6;\n  --bs-table-striped-bg: #9aaaaa;\n  --bs-table-striped-color: #fff;\n  --bs-table-active-bg: #a0aeaf;\n  --bs-table-active-color: #fff;\n  --bs-table-hover-bg: #9dacad;\n  --bs-table-hover-color: #fff;\n  color: #fff;\n  border-color: #a0aeaf;\n}\n\n.table-success {\n  --bs-table-bg: #18bc9c;\n  --bs-table-striped-bg: #24bfa1;\n  --bs-table-striped-color: #fff;\n  --bs-table-active-bg: #2fc3a6;\n  --bs-table-active-color: #fff;\n  --bs-table-hover-bg: #29c1a3;\n  --bs-table-hover-color: #fff;\n  color: #fff;\n  border-color: #2fc3a6;\n}\n\n.table-info {\n  --bs-table-bg: #3498db;\n  --bs-table-striped-bg: #3e9ddd;\n  --bs-table-striped-color: #fff;\n  --bs-table-active-bg: #48a2df;\n  --bs-table-active-color: #fff;\n  --bs-table-hover-bg: #43a0de;\n  --bs-table-hover-color: #fff;\n  color: #fff;\n  border-color: #48a2df;\n}\n\n.table-warning {\n  --bs-table-bg: #f39c12;\n  --bs-table-striped-bg: #f4a11e;\n  --bs-table-striped-color: #fff;\n  --bs-table-active-bg: #f4a62a;\n  --bs-table-active-color: #000;\n  --bs-table-hover-bg: #f4a324;\n  --bs-table-hover-color: #fff;\n  color: #fff;\n  border-color: #f4a62a;\n}\n\n.table-danger {\n  --bs-table-bg: #e74c3c;\n  --bs-table-striped-bg: #e85546;\n  --bs-table-striped-color: #fff;\n  --bs-table-active-bg: #e95e50;\n  --bs-table-active-color: #fff;\n  --bs-table-hover-bg: #e9594b;\n  --bs-table-hover-color: #fff;\n  color: #fff;\n  border-color: #e95e50;\n}\n\n.table-light {\n  --bs-table-bg: #ecf0f1;\n  --bs-table-striped-bg: #e0e4e5;\n  --bs-table-striped-color: #000;\n  --bs-table-active-bg: #d4d8d9;\n  --bs-table-active-color: #000;\n  --bs-table-hover-bg: #dadedf;\n  --bs-table-hover-color: #000;\n  color: #000;\n  border-color: #d4d8d9;\n}\n\n.table-dark {\n  --bs-table-bg: #7b8a8b;\n  --bs-table-striped-bg: #829091;\n  --bs-table-striped-color: #fff;\n  --bs-table-active-bg: #889697;\n  --bs-table-active-color: #fff;\n  --bs-table-hover-bg: #859394;\n  --bs-table-hover-color: #fff;\n  color: #fff;\n  border-color: #889697;\n}\n\n.table-responsive {\n  overflow-x: auto;\n  -webkit-overflow-scrolling: touch;\n}\n\n@media (max-width: 575.98px) {\n  .table-responsive-sm {\n    overflow-x: auto;\n    -webkit-overflow-scrolling: touch;\n  }\n}\n\n@media (max-width: 767.98px) {\n  .table-responsive-md {\n    overflow-x: auto;\n    -webkit-overflow-scrolling: touch;\n  }\n}\n\n@media (max-width: 991.98px) {\n  .table-responsive-lg {\n    overflow-x: auto;\n    -webkit-overflow-scrolling: touch;\n  }\n}\n\n@media (max-width: 1199.98px) {\n  .table-responsive-xl {\n    overflow-x: auto;\n    -webkit-overflow-scrolling: touch;\n  }\n}\n\n@media (max-width: 1399.98px) {\n  .table-responsive-xxl {\n    overflow-x: auto;\n    -webkit-overflow-scrolling: touch;\n  }\n}\n\n.form-label {\n  margin-bottom: 0.5rem;\n}\n\n.col-form-label {\n  padding-top: calc(0.375rem + 1px);\n  padding-bottom: calc(0.375rem + 1px);\n  margin-bottom: 0;\n  font-size: inherit;\n  line-height: 1.5;\n}\n\n.col-form-label-lg {\n  padding-top: calc(0.5rem + 1px);\n  padding-bottom: calc(0.5rem + 1px);\n  font-size: 1.25rem;\n}\n\n.col-form-label-sm {\n  padding-top: calc(0.25rem + 1px);\n  padding-bottom: calc(0.25rem + 1px);\n  font-size: 0.875rem;\n}\n\n.form-text {\n  margin-top: 0.25rem;\n  font-size: 0.875em;\n  color: #95a5a6;\n}\n\n.form-control {\n  display: block;\n  width: 100%;\n  padding: 0.375rem 0.75rem;\n  font-size: 1rem;\n  font-weight: 400;\n  line-height: 1.5;\n  color: #212529;\n  background-color: #fff;\n  background-clip: padding-box;\n  border: 1px solid #ced4da;\n  -webkit-appearance: none;\n  -moz-appearance: none;\n  appearance: none;\n  border-radius: 0.25rem;\n  transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .form-control {\n    transition: none;\n  }\n}\n\n.form-control[type=\"file\"] {\n  overflow: hidden;\n}\n\n.form-control[type=\"file\"]:not(:disabled):not([readonly]) {\n  cursor: pointer;\n}\n\n.form-control:focus {\n  color: #212529;\n  background-color: #fff;\n  border-color: #969fa8;\n  outline: 0;\n  box-shadow: 0 0 0 0.25rem rgba(44, 62, 80, 0.25);\n}\n\n.form-control::-webkit-date-and-time-value {\n  height: 1.5em;\n}\n\n.form-control::-webkit-input-placeholder {\n  color: #95a5a6;\n  opacity: 1;\n}\n\n.form-control::-moz-placeholder {\n  color: #95a5a6;\n  opacity: 1;\n}\n\n.form-control:-ms-input-placeholder {\n  color: #95a5a6;\n  opacity: 1;\n}\n\n.form-control::-ms-input-placeholder {\n  color: #95a5a6;\n  opacity: 1;\n}\n\n.form-control::placeholder {\n  color: #95a5a6;\n  opacity: 1;\n}\n\n.form-control:disabled, .form-control[readonly] {\n  background-color: #ecf0f1;\n  opacity: 1;\n}\n\n.form-control::file-selector-button {\n  padding: 0.375rem 0.75rem;\n  margin: -0.375rem -0.75rem;\n  -webkit-margin-end: 0.75rem;\n  -moz-margin-end: 0.75rem;\n  margin-inline-end: 0.75rem;\n  color: #212529;\n  background-color: #ecf0f1;\n  pointer-events: none;\n  border-color: inherit;\n  border-style: solid;\n  border-width: 0;\n  border-inline-end-width: 1px;\n  border-radius: 0;\n  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .form-control::file-selector-button {\n    transition: none;\n  }\n}\n\n.form-control:hover:not(:disabled):not([readonly])::file-selector-button {\n  background-color: #e0e4e5;\n}\n\n.form-control::-webkit-file-upload-button {\n  padding: 0.375rem 0.75rem;\n  margin: -0.375rem -0.75rem;\n  -webkit-margin-end: 0.75rem;\n  margin-inline-end: 0.75rem;\n  color: #212529;\n  background-color: #ecf0f1;\n  pointer-events: none;\n  border-color: inherit;\n  border-style: solid;\n  border-width: 0;\n  border-inline-end-width: 1px;\n  border-radius: 0;\n  -webkit-transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .form-control::-webkit-file-upload-button {\n    -webkit-transition: none;\n    transition: none;\n  }\n}\n\n.form-control:hover:not(:disabled):not([readonly])::-webkit-file-upload-button {\n  background-color: #e0e4e5;\n}\n\n.form-control-plaintext {\n  display: block;\n  width: 100%;\n  padding: 0.375rem 0;\n  margin-bottom: 0;\n  line-height: 1.5;\n  color: #212529;\n  background-color: transparent;\n  border: solid transparent;\n  border-width: 1px 0;\n}\n\n.form-control-plaintext.form-control-sm, .form-control-plaintext.form-control-lg {\n  padding-right: 0;\n  padding-left: 0;\n}\n\n.form-control-sm {\n  min-height: calc(1.5em + 0.5rem + 2px);\n  padding: 0.25rem 0.5rem;\n  font-size: 0.875rem;\n  border-radius: 0.2rem;\n}\n\n.form-control-sm::file-selector-button {\n  padding: 0.25rem 0.5rem;\n  margin: -0.25rem -0.5rem;\n  -webkit-margin-end: 0.5rem;\n  -moz-margin-end: 0.5rem;\n  margin-inline-end: 0.5rem;\n}\n\n.form-control-sm::-webkit-file-upload-button {\n  padding: 0.25rem 0.5rem;\n  margin: -0.25rem -0.5rem;\n  -webkit-margin-end: 0.5rem;\n  margin-inline-end: 0.5rem;\n}\n\n.form-control-lg {\n  min-height: calc(1.5em + 1rem + 2px);\n  padding: 0.5rem 1rem;\n  font-size: 1.25rem;\n  border-radius: 0.3rem;\n}\n\n.form-control-lg::file-selector-button {\n  padding: 0.5rem 1rem;\n  margin: -0.5rem -1rem;\n  -webkit-margin-end: 1rem;\n  -moz-margin-end: 1rem;\n  margin-inline-end: 1rem;\n}\n\n.form-control-lg::-webkit-file-upload-button {\n  padding: 0.5rem 1rem;\n  margin: -0.5rem -1rem;\n  -webkit-margin-end: 1rem;\n  margin-inline-end: 1rem;\n}\n\ntextarea.form-control {\n  min-height: calc(1.5em + 0.75rem + 2px);\n}\n\ntextarea.form-control-sm {\n  min-height: calc(1.5em + 0.5rem + 2px);\n}\n\ntextarea.form-control-lg {\n  min-height: calc(1.5em + 1rem + 2px);\n}\n\n.form-control-color {\n  width: 3rem;\n  height: auto;\n  padding: 0.375rem;\n}\n\n.form-control-color:not(:disabled):not([readonly]) {\n  cursor: pointer;\n}\n\n.form-control-color::-moz-color-swatch {\n  height: 1.5em;\n  border-radius: 0.25rem;\n}\n\n.form-control-color::-webkit-color-swatch {\n  height: 1.5em;\n  border-radius: 0.25rem;\n}\n\n.form-select {\n  display: block;\n  width: 100%;\n  padding: 0.375rem 2.25rem 0.375rem 0.75rem;\n  -moz-padding-start: calc(0.75rem - 3px);\n  font-size: 1rem;\n  font-weight: 400;\n  line-height: 1.5;\n  color: #212529;\n  background-color: #fff;\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e\");\n  background-repeat: no-repeat;\n  background-position: right 0.75rem center;\n  background-size: 16px 12px;\n  border: 1px solid #ced4da;\n  border-radius: 0.25rem;\n  transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n  -webkit-appearance: none;\n  -moz-appearance: none;\n  appearance: none;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .form-select {\n    transition: none;\n  }\n}\n\n.form-select:focus {\n  border-color: #969fa8;\n  outline: 0;\n  box-shadow: 0 0 0 0.25rem rgba(44, 62, 80, 0.25);\n}\n\n.form-select[multiple], .form-select[size]:not([size=\"1\"]) {\n  padding-right: 0.75rem;\n  background-image: none;\n}\n\n.form-select:disabled {\n  background-color: #ecf0f1;\n}\n\n.form-select:-moz-focusring {\n  color: transparent;\n  text-shadow: 0 0 0 #212529;\n}\n\n.form-select-sm {\n  padding-top: 0.25rem;\n  padding-bottom: 0.25rem;\n  padding-left: 0.5rem;\n  font-size: 0.875rem;\n  border-radius: 0.2rem;\n}\n\n.form-select-lg {\n  padding-top: 0.5rem;\n  padding-bottom: 0.5rem;\n  padding-left: 1rem;\n  font-size: 1.25rem;\n  border-radius: 0.3rem;\n}\n\n.form-check {\n  display: block;\n  min-height: 1.5rem;\n  padding-left: 1.5em;\n  margin-bottom: 0.125rem;\n}\n\n.form-check .form-check-input {\n  float: left;\n  margin-left: -1.5em;\n}\n\n.form-check-input {\n  width: 1em;\n  height: 1em;\n  margin-top: 0.25em;\n  vertical-align: top;\n  background-color: #fff;\n  background-repeat: no-repeat;\n  background-position: center;\n  background-size: contain;\n  border: 1px solid rgba(0, 0, 0, 0.25);\n  -webkit-appearance: none;\n  -moz-appearance: none;\n  appearance: none;\n  -webkit-print-color-adjust: exact;\n  color-adjust: exact;\n}\n\n.form-check-input[type=\"checkbox\"] {\n  border-radius: 0.25em;\n}\n\n.form-check-input[type=\"radio\"] {\n  border-radius: 50%;\n}\n\n.form-check-input:active {\n  -webkit-filter: brightness(90%);\n  filter: brightness(90%);\n}\n\n.form-check-input:focus {\n  border-color: #969fa8;\n  outline: 0;\n  box-shadow: 0 0 0 0.25rem rgba(44, 62, 80, 0.25);\n}\n\n.form-check-input:checked {\n  background-color: #2c3e50;\n  border-color: #2c3e50;\n}\n\n.form-check-input:checked[type=\"checkbox\"] {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10l3 3l6-6'/%3e%3c/svg%3e\");\n}\n\n.form-check-input:checked[type=\"radio\"] {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='2' fill='%23fff'/%3e%3c/svg%3e\");\n}\n\n.form-check-input[type=\"checkbox\"]:indeterminate {\n  background-color: #2c3e50;\n  border-color: #2c3e50;\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10h8'/%3e%3c/svg%3e\");\n}\n\n.form-check-input:disabled {\n  pointer-events: none;\n  -webkit-filter: none;\n  filter: none;\n  opacity: 0.5;\n}\n\n.form-check-input[disabled] ~ .form-check-label, .form-check-input:disabled ~ .form-check-label {\n  opacity: 0.5;\n}\n\n.form-switch {\n  padding-left: 2.5em;\n}\n\n.form-switch .form-check-input {\n  width: 2em;\n  margin-left: -2.5em;\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%280, 0, 0, 0.25%29'/%3e%3c/svg%3e\");\n  background-position: left center;\n  border-radius: 2em;\n  transition: background-position 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .form-switch .form-check-input {\n    transition: none;\n  }\n}\n\n.form-switch .form-check-input:focus {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23969fa8'/%3e%3c/svg%3e\");\n}\n\n.form-switch .form-check-input:checked {\n  background-position: right center;\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e\");\n}\n\n.form-check-inline {\n  display: inline-block;\n  margin-right: 1rem;\n}\n\n.btn-check {\n  position: absolute;\n  clip: rect(0, 0, 0, 0);\n  pointer-events: none;\n}\n\n.btn-check[disabled] + .btn, .btn-check:disabled + .btn {\n  pointer-events: none;\n  -webkit-filter: none;\n  filter: none;\n  opacity: 0.65;\n}\n\n.form-range {\n  width: 100%;\n  height: 1.5rem;\n  padding: 0;\n  background-color: transparent;\n  -webkit-appearance: none;\n  -moz-appearance: none;\n  appearance: none;\n}\n\n.form-range:focus {\n  outline: 0;\n}\n\n.form-range:focus::-webkit-slider-thumb {\n  box-shadow: 0 0 0 1px #fff, 0 0 0 0.25rem rgba(44, 62, 80, 0.25);\n}\n\n.form-range:focus::-moz-range-thumb {\n  box-shadow: 0 0 0 1px #fff, 0 0 0 0.25rem rgba(44, 62, 80, 0.25);\n}\n\n.form-range::-moz-focus-outer {\n  border: 0;\n}\n\n.form-range::-webkit-slider-thumb {\n  width: 1rem;\n  height: 1rem;\n  margin-top: -0.25rem;\n  background-color: #2c3e50;\n  border: 0;\n  border-radius: 1rem;\n  -webkit-transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n  transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n  -webkit-appearance: none;\n  appearance: none;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .form-range::-webkit-slider-thumb {\n    -webkit-transition: none;\n    transition: none;\n  }\n}\n\n.form-range::-webkit-slider-thumb:active {\n  background-color: #c0c5cb;\n}\n\n.form-range::-webkit-slider-runnable-track {\n  width: 100%;\n  height: 0.5rem;\n  color: transparent;\n  cursor: pointer;\n  background-color: #dee2e6;\n  border-color: transparent;\n  border-radius: 1rem;\n}\n\n.form-range::-moz-range-thumb {\n  width: 1rem;\n  height: 1rem;\n  background-color: #2c3e50;\n  border: 0;\n  border-radius: 1rem;\n  -moz-transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n  transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n  -moz-appearance: none;\n  appearance: none;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .form-range::-moz-range-thumb {\n    -moz-transition: none;\n    transition: none;\n  }\n}\n\n.form-range::-moz-range-thumb:active {\n  background-color: #c0c5cb;\n}\n\n.form-range::-moz-range-track {\n  width: 100%;\n  height: 0.5rem;\n  color: transparent;\n  cursor: pointer;\n  background-color: #dee2e6;\n  border-color: transparent;\n  border-radius: 1rem;\n}\n\n.form-range:disabled {\n  pointer-events: none;\n}\n\n.form-range:disabled::-webkit-slider-thumb {\n  background-color: #b4bcc2;\n}\n\n.form-range:disabled::-moz-range-thumb {\n  background-color: #b4bcc2;\n}\n\n.form-floating {\n  position: relative;\n}\n\n.form-floating > .form-control,\n.form-floating > .form-select {\n  height: calc(3.5rem + 2px);\n  line-height: 1.25;\n}\n\n.form-floating > label {\n  position: absolute;\n  top: 0;\n  left: 0;\n  height: 100%;\n  padding: 1rem 0.75rem;\n  pointer-events: none;\n  border: 1px solid transparent;\n  -webkit-transform-origin: 0 0;\n  transform-origin: 0 0;\n  transition: opacity 0.1s ease-in-out, -webkit-transform 0.1s ease-in-out;\n  transition: opacity 0.1s ease-in-out, transform 0.1s ease-in-out;\n  transition: opacity 0.1s ease-in-out, transform 0.1s ease-in-out, -webkit-transform 0.1s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .form-floating > label {\n    transition: none;\n  }\n}\n\n.form-floating > .form-control {\n  padding: 1rem 0.75rem;\n}\n\n.form-floating > .form-control::-webkit-input-placeholder {\n  color: transparent;\n}\n\n.form-floating > .form-control::-moz-placeholder {\n  color: transparent;\n}\n\n.form-floating > .form-control:-ms-input-placeholder {\n  color: transparent;\n}\n\n.form-floating > .form-control::-ms-input-placeholder {\n  color: transparent;\n}\n\n.form-floating > .form-control::placeholder {\n  color: transparent;\n}\n\n.form-floating > .form-control:not(:-moz-placeholder-shown) {\n  padding-top: 1.625rem;\n  padding-bottom: 0.625rem;\n}\n\n.form-floating > .form-control:not(:-ms-input-placeholder) {\n  padding-top: 1.625rem;\n  padding-bottom: 0.625rem;\n}\n\n.form-floating > .form-control:focus, .form-floating > .form-control:not(:placeholder-shown) {\n  padding-top: 1.625rem;\n  padding-bottom: 0.625rem;\n}\n\n.form-floating > .form-control:-webkit-autofill {\n  padding-top: 1.625rem;\n  padding-bottom: 0.625rem;\n}\n\n.form-floating > .form-select {\n  padding-top: 1.625rem;\n  padding-bottom: 0.625rem;\n}\n\n.form-floating > .form-control:not(:-moz-placeholder-shown) ~ label {\n  opacity: 0.65;\n  transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);\n}\n\n.form-floating > .form-control:not(:-ms-input-placeholder) ~ label {\n  opacity: 0.65;\n  transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);\n}\n\n.form-floating > .form-control:focus ~ label,\n.form-floating > .form-control:not(:placeholder-shown) ~ label,\n.form-floating > .form-select ~ label {\n  opacity: 0.65;\n  -webkit-transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);\n  transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);\n}\n\n.form-floating > .form-control:-webkit-autofill ~ label {\n  opacity: 0.65;\n  -webkit-transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);\n  transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);\n}\n\n.input-group {\n  position: relative;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n  flex-wrap: wrap;\n  -ms-flex-align: stretch;\n  align-items: stretch;\n  width: 100%;\n}\n\n.input-group > .form-control,\n.input-group > .form-select {\n  position: relative;\n  -ms-flex: 1 1 auto;\n  flex: 1 1 auto;\n  width: 1%;\n  min-width: 0;\n}\n\n.input-group > .form-control:focus,\n.input-group > .form-select:focus {\n  z-index: 3;\n}\n\n.input-group .btn {\n  position: relative;\n  z-index: 2;\n}\n\n.input-group .btn:focus {\n  z-index: 3;\n}\n\n.input-group-text {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-align: center;\n  align-items: center;\n  padding: 0.375rem 0.75rem;\n  font-size: 1rem;\n  font-weight: 400;\n  line-height: 1.5;\n  color: #212529;\n  text-align: center;\n  white-space: nowrap;\n  background-color: #ecf0f1;\n  border: 1px solid #ced4da;\n  border-radius: 0.25rem;\n}\n\n.input-group-lg > .form-control,\n.input-group-lg > .form-select,\n.input-group-lg > .input-group-text,\n.input-group-lg > .btn {\n  padding: 0.5rem 1rem;\n  font-size: 1.25rem;\n  border-radius: 0.3rem;\n}\n\n.input-group-sm > .form-control,\n.input-group-sm > .form-select,\n.input-group-sm > .input-group-text,\n.input-group-sm > .btn {\n  padding: 0.25rem 0.5rem;\n  font-size: 0.875rem;\n  border-radius: 0.2rem;\n}\n\n.input-group-lg > .form-select,\n.input-group-sm > .form-select {\n  padding-right: 3rem;\n}\n\n.input-group:not(.has-validation) > :not(:last-child):not(.dropdown-toggle):not(.dropdown-menu),\n.input-group:not(.has-validation) > .dropdown-toggle:nth-last-child(n + 3) {\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n}\n\n.input-group.has-validation > :nth-last-child(n + 3):not(.dropdown-toggle):not(.dropdown-menu),\n.input-group.has-validation > .dropdown-toggle:nth-last-child(n + 4) {\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n}\n\n.input-group > :not(:first-child):not(.dropdown-menu):not(.valid-tooltip):not(.valid-feedback):not(.invalid-tooltip):not(.invalid-feedback) {\n  margin-left: -1px;\n  border-top-left-radius: 0;\n  border-bottom-left-radius: 0;\n}\n\n.valid-feedback {\n  display: none;\n  width: 100%;\n  margin-top: 0.25rem;\n  font-size: 0.875em;\n  color: #18bc9c;\n}\n\n.valid-tooltip {\n  position: absolute;\n  top: 100%;\n  z-index: 5;\n  display: none;\n  max-width: 100%;\n  padding: 0.25rem 0.5rem;\n  margin-top: .1rem;\n  font-size: 0.875rem;\n  color: #fff;\n  background-color: rgba(24, 188, 156, 0.9);\n  border-radius: 0.25rem;\n}\n\n.was-validated :valid ~ .valid-feedback,\n.was-validated :valid ~ .valid-tooltip,\n.is-valid ~ .valid-feedback,\n.is-valid ~ .valid-tooltip {\n  display: block;\n}\n\n.was-validated .form-control:valid, .form-control.is-valid {\n  border-color: #18bc9c;\n  padding-right: calc(1.5em + 0.75rem);\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%2318bc9c' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e\");\n  background-repeat: no-repeat;\n  background-position: right calc(0.375em + 0.1875rem) center;\n  background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n\n.was-validated .form-control:valid:focus, .form-control.is-valid:focus {\n  border-color: #18bc9c;\n  box-shadow: 0 0 0 0.25rem rgba(24, 188, 156, 0.25);\n}\n\n.was-validated textarea.form-control:valid, textarea.form-control.is-valid {\n  padding-right: calc(1.5em + 0.75rem);\n  background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem);\n}\n\n.was-validated .form-select:valid, .form-select.is-valid {\n  border-color: #18bc9c;\n}\n\n.was-validated .form-select:valid:not([multiple]):not([size]), .was-validated .form-select:valid:not([multiple])[size=\"1\"], .form-select.is-valid:not([multiple]):not([size]), .form-select.is-valid:not([multiple])[size=\"1\"] {\n  padding-right: 4.125rem;\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e\"), url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%2318bc9c' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e\");\n  background-position: right 0.75rem center, center right 2.25rem;\n  background-size: 16px 12px, calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n\n.was-validated .form-select:valid:focus, .form-select.is-valid:focus {\n  border-color: #18bc9c;\n  box-shadow: 0 0 0 0.25rem rgba(24, 188, 156, 0.25);\n}\n\n.was-validated .form-check-input:valid, .form-check-input.is-valid {\n  border-color: #18bc9c;\n}\n\n.was-validated .form-check-input:valid:checked, .form-check-input.is-valid:checked {\n  background-color: #18bc9c;\n}\n\n.was-validated .form-check-input:valid:focus, .form-check-input.is-valid:focus {\n  box-shadow: 0 0 0 0.25rem rgba(24, 188, 156, 0.25);\n}\n\n.was-validated .form-check-input:valid ~ .form-check-label, .form-check-input.is-valid ~ .form-check-label {\n  color: #18bc9c;\n}\n\n.form-check-inline .form-check-input ~ .valid-feedback {\n  margin-left: .5em;\n}\n\n.was-validated .input-group .form-control:valid, .input-group .form-control.is-valid, .was-validated\n.input-group .form-select:valid,\n.input-group .form-select.is-valid {\n  z-index: 1;\n}\n\n.was-validated .input-group .form-control:valid:focus, .input-group .form-control.is-valid:focus, .was-validated\n.input-group .form-select:valid:focus,\n.input-group .form-select.is-valid:focus {\n  z-index: 3;\n}\n\n.invalid-feedback {\n  display: none;\n  width: 100%;\n  margin-top: 0.25rem;\n  font-size: 0.875em;\n  color: #e74c3c;\n}\n\n.invalid-tooltip {\n  position: absolute;\n  top: 100%;\n  z-index: 5;\n  display: none;\n  max-width: 100%;\n  padding: 0.25rem 0.5rem;\n  margin-top: .1rem;\n  font-size: 0.875rem;\n  color: #fff;\n  background-color: rgba(231, 76, 60, 0.9);\n  border-radius: 0.25rem;\n}\n\n.was-validated :invalid ~ .invalid-feedback,\n.was-validated :invalid ~ .invalid-tooltip,\n.is-invalid ~ .invalid-feedback,\n.is-invalid ~ .invalid-tooltip {\n  display: block;\n}\n\n.was-validated .form-control:invalid, .form-control.is-invalid {\n  border-color: #e74c3c;\n  padding-right: calc(1.5em + 0.75rem);\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23e74c3c'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23e74c3c' stroke='none'/%3e%3c/svg%3e\");\n  background-repeat: no-repeat;\n  background-position: right calc(0.375em + 0.1875rem) center;\n  background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n\n.was-validated .form-control:invalid:focus, .form-control.is-invalid:focus {\n  border-color: #e74c3c;\n  box-shadow: 0 0 0 0.25rem rgba(231, 76, 60, 0.25);\n}\n\n.was-validated textarea.form-control:invalid, textarea.form-control.is-invalid {\n  padding-right: calc(1.5em + 0.75rem);\n  background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem);\n}\n\n.was-validated .form-select:invalid, .form-select.is-invalid {\n  border-color: #e74c3c;\n}\n\n.was-validated .form-select:invalid:not([multiple]):not([size]), .was-validated .form-select:invalid:not([multiple])[size=\"1\"], .form-select.is-invalid:not([multiple]):not([size]), .form-select.is-invalid:not([multiple])[size=\"1\"] {\n  padding-right: 4.125rem;\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e\"), url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23e74c3c'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23e74c3c' stroke='none'/%3e%3c/svg%3e\");\n  background-position: right 0.75rem center, center right 2.25rem;\n  background-size: 16px 12px, calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n\n.was-validated .form-select:invalid:focus, .form-select.is-invalid:focus {\n  border-color: #e74c3c;\n  box-shadow: 0 0 0 0.25rem rgba(231, 76, 60, 0.25);\n}\n\n.was-validated .form-check-input:invalid, .form-check-input.is-invalid {\n  border-color: #e74c3c;\n}\n\n.was-validated .form-check-input:invalid:checked, .form-check-input.is-invalid:checked {\n  background-color: #e74c3c;\n}\n\n.was-validated .form-check-input:invalid:focus, .form-check-input.is-invalid:focus {\n  box-shadow: 0 0 0 0.25rem rgba(231, 76, 60, 0.25);\n}\n\n.was-validated .form-check-input:invalid ~ .form-check-label, .form-check-input.is-invalid ~ .form-check-label {\n  color: #e74c3c;\n}\n\n.form-check-inline .form-check-input ~ .invalid-feedback {\n  margin-left: .5em;\n}\n\n.was-validated .input-group .form-control:invalid, .input-group .form-control.is-invalid, .was-validated\n.input-group .form-select:invalid,\n.input-group .form-select.is-invalid {\n  z-index: 2;\n}\n\n.was-validated .input-group .form-control:invalid:focus, .input-group .form-control.is-invalid:focus, .was-validated\n.input-group .form-select:invalid:focus,\n.input-group .form-select.is-invalid:focus {\n  z-index: 3;\n}\n\n.btn {\n  display: inline-block;\n  font-weight: 400;\n  line-height: 1.5;\n  color: #212529;\n  text-align: center;\n  text-decoration: none;\n  vertical-align: middle;\n  cursor: pointer;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  user-select: none;\n  background-color: transparent;\n  border: 1px solid transparent;\n  padding: 0.375rem 0.75rem;\n  font-size: 1rem;\n  border-radius: 0.25rem;\n  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .btn {\n    transition: none;\n  }\n}\n\n.btn:hover {\n  color: #212529;\n}\n\n.btn-check:focus + .btn, .btn:focus {\n  outline: 0;\n  box-shadow: 0 0 0 0.25rem rgba(44, 62, 80, 0.25);\n}\n\n.btn:disabled, .btn.disabled,\nfieldset:disabled .btn {\n  pointer-events: none;\n  opacity: 0.65;\n}\n\n.btn-primary {\n  color: #fff;\n  background-color: #2c3e50;\n  border-color: #2c3e50;\n}\n\n.btn-primary:hover {\n  color: #fff;\n  background-color: #253544;\n  border-color: #233240;\n}\n\n.btn-check:focus + .btn-primary, .btn-primary:focus {\n  color: #fff;\n  background-color: #253544;\n  border-color: #233240;\n  box-shadow: 0 0 0 0.25rem rgba(76, 91, 106, 0.5);\n}\n\n.btn-check:checked + .btn-primary,\n.btn-check:active + .btn-primary, .btn-primary:active, .btn-primary.active,\n.show > .btn-primary.dropdown-toggle {\n  color: #fff;\n  background-color: #233240;\n  border-color: #212f3c;\n}\n\n.btn-check:checked + .btn-primary:focus,\n.btn-check:active + .btn-primary:focus, .btn-primary:active:focus, .btn-primary.active:focus,\n.show > .btn-primary.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.25rem rgba(76, 91, 106, 0.5);\n}\n\n.btn-primary:disabled, .btn-primary.disabled {\n  color: #fff;\n  background-color: #2c3e50;\n  border-color: #2c3e50;\n}\n\n.btn-secondary {\n  color: #fff;\n  background-color: #95a5a6;\n  border-color: #95a5a6;\n}\n\n.btn-secondary:hover {\n  color: #fff;\n  background-color: #7f8c8d;\n  border-color: #778485;\n}\n\n.btn-check:focus + .btn-secondary, .btn-secondary:focus {\n  color: #fff;\n  background-color: #7f8c8d;\n  border-color: #778485;\n  box-shadow: 0 0 0 0.25rem rgba(165, 179, 179, 0.5);\n}\n\n.btn-check:checked + .btn-secondary,\n.btn-check:active + .btn-secondary, .btn-secondary:active, .btn-secondary.active,\n.show > .btn-secondary.dropdown-toggle {\n  color: #fff;\n  background-color: #778485;\n  border-color: #707c7d;\n}\n\n.btn-check:checked + .btn-secondary:focus,\n.btn-check:active + .btn-secondary:focus, .btn-secondary:active:focus, .btn-secondary.active:focus,\n.show > .btn-secondary.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.25rem rgba(165, 179, 179, 0.5);\n}\n\n.btn-secondary:disabled, .btn-secondary.disabled {\n  color: #fff;\n  background-color: #95a5a6;\n  border-color: #95a5a6;\n}\n\n.btn-success {\n  color: #fff;\n  background-color: #18bc9c;\n  border-color: #18bc9c;\n}\n\n.btn-success:hover {\n  color: #fff;\n  background-color: #14a085;\n  border-color: #13967d;\n}\n\n.btn-check:focus + .btn-success, .btn-success:focus {\n  color: #fff;\n  background-color: #14a085;\n  border-color: #13967d;\n  box-shadow: 0 0 0 0.25rem rgba(59, 198, 171, 0.5);\n}\n\n.btn-check:checked + .btn-success,\n.btn-check:active + .btn-success, .btn-success:active, .btn-success.active,\n.show > .btn-success.dropdown-toggle {\n  color: #fff;\n  background-color: #13967d;\n  border-color: #128d75;\n}\n\n.btn-check:checked + .btn-success:focus,\n.btn-check:active + .btn-success:focus, .btn-success:active:focus, .btn-success.active:focus,\n.show > .btn-success.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.25rem rgba(59, 198, 171, 0.5);\n}\n\n.btn-success:disabled, .btn-success.disabled {\n  color: #fff;\n  background-color: #18bc9c;\n  border-color: #18bc9c;\n}\n\n.btn-info {\n  color: #fff;\n  background-color: #3498db;\n  border-color: #3498db;\n}\n\n.btn-info:hover {\n  color: #fff;\n  background-color: #2c81ba;\n  border-color: #2a7aaf;\n}\n\n.btn-check:focus + .btn-info, .btn-info:focus {\n  color: #fff;\n  background-color: #2c81ba;\n  border-color: #2a7aaf;\n  box-shadow: 0 0 0 0.25rem rgba(82, 167, 224, 0.5);\n}\n\n.btn-check:checked + .btn-info,\n.btn-check:active + .btn-info, .btn-info:active, .btn-info.active,\n.show > .btn-info.dropdown-toggle {\n  color: #fff;\n  background-color: #2a7aaf;\n  border-color: #2772a4;\n}\n\n.btn-check:checked + .btn-info:focus,\n.btn-check:active + .btn-info:focus, .btn-info:active:focus, .btn-info.active:focus,\n.show > .btn-info.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.25rem rgba(82, 167, 224, 0.5);\n}\n\n.btn-info:disabled, .btn-info.disabled {\n  color: #fff;\n  background-color: #3498db;\n  border-color: #3498db;\n}\n\n.btn-warning {\n  color: #fff;\n  background-color: #f39c12;\n  border-color: #f39c12;\n}\n\n.btn-warning:hover {\n  color: #fff;\n  background-color: #cf850f;\n  border-color: #c27d0e;\n}\n\n.btn-check:focus + .btn-warning, .btn-warning:focus {\n  color: #fff;\n  background-color: #cf850f;\n  border-color: #c27d0e;\n  box-shadow: 0 0 0 0.25rem rgba(245, 171, 54, 0.5);\n}\n\n.btn-check:checked + .btn-warning,\n.btn-check:active + .btn-warning, .btn-warning:active, .btn-warning.active,\n.show > .btn-warning.dropdown-toggle {\n  color: #fff;\n  background-color: #c27d0e;\n  border-color: #b6750e;\n}\n\n.btn-check:checked + .btn-warning:focus,\n.btn-check:active + .btn-warning:focus, .btn-warning:active:focus, .btn-warning.active:focus,\n.show > .btn-warning.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.25rem rgba(245, 171, 54, 0.5);\n}\n\n.btn-warning:disabled, .btn-warning.disabled {\n  color: #fff;\n  background-color: #f39c12;\n  border-color: #f39c12;\n}\n\n.btn-danger {\n  color: #fff;\n  background-color: #e74c3c;\n  border-color: #e74c3c;\n}\n\n.btn-danger:hover {\n  color: #fff;\n  background-color: #c44133;\n  border-color: #b93d30;\n}\n\n.btn-check:focus + .btn-danger, .btn-danger:focus {\n  color: #fff;\n  background-color: #c44133;\n  border-color: #b93d30;\n  box-shadow: 0 0 0 0.25rem rgba(235, 103, 89, 0.5);\n}\n\n.btn-check:checked + .btn-danger,\n.btn-check:active + .btn-danger, .btn-danger:active, .btn-danger.active,\n.show > .btn-danger.dropdown-toggle {\n  color: #fff;\n  background-color: #b93d30;\n  border-color: #ad392d;\n}\n\n.btn-check:checked + .btn-danger:focus,\n.btn-check:active + .btn-danger:focus, .btn-danger:active:focus, .btn-danger.active:focus,\n.show > .btn-danger.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.25rem rgba(235, 103, 89, 0.5);\n}\n\n.btn-danger:disabled, .btn-danger.disabled {\n  color: #fff;\n  background-color: #e74c3c;\n  border-color: #e74c3c;\n}\n\n.btn-light {\n  color: #000;\n  background-color: #ecf0f1;\n  border-color: #ecf0f1;\n}\n\n.btn-light:hover {\n  color: #000;\n  background-color: #eff2f3;\n  border-color: #eef2f2;\n}\n\n.btn-check:focus + .btn-light, .btn-light:focus {\n  color: #000;\n  background-color: #eff2f3;\n  border-color: #eef2f2;\n  box-shadow: 0 0 0 0.25rem rgba(201, 204, 205, 0.5);\n}\n\n.btn-check:checked + .btn-light,\n.btn-check:active + .btn-light, .btn-light:active, .btn-light.active,\n.show > .btn-light.dropdown-toggle {\n  color: #000;\n  background-color: #f0f3f4;\n  border-color: #eef2f2;\n}\n\n.btn-check:checked + .btn-light:focus,\n.btn-check:active + .btn-light:focus, .btn-light:active:focus, .btn-light.active:focus,\n.show > .btn-light.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.25rem rgba(201, 204, 205, 0.5);\n}\n\n.btn-light:disabled, .btn-light.disabled {\n  color: #000;\n  background-color: #ecf0f1;\n  border-color: #ecf0f1;\n}\n\n.btn-dark {\n  color: #fff;\n  background-color: #7b8a8b;\n  border-color: #7b8a8b;\n}\n\n.btn-dark:hover {\n  color: #fff;\n  background-color: #697576;\n  border-color: #626e6f;\n}\n\n.btn-check:focus + .btn-dark, .btn-dark:focus {\n  color: #fff;\n  background-color: #697576;\n  border-color: #626e6f;\n  box-shadow: 0 0 0 0.25rem rgba(143, 156, 156, 0.5);\n}\n\n.btn-check:checked + .btn-dark,\n.btn-check:active + .btn-dark, .btn-dark:active, .btn-dark.active,\n.show > .btn-dark.dropdown-toggle {\n  color: #fff;\n  background-color: #626e6f;\n  border-color: #5c6868;\n}\n\n.btn-check:checked + .btn-dark:focus,\n.btn-check:active + .btn-dark:focus, .btn-dark:active:focus, .btn-dark.active:focus,\n.show > .btn-dark.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.25rem rgba(143, 156, 156, 0.5);\n}\n\n.btn-dark:disabled, .btn-dark.disabled {\n  color: #fff;\n  background-color: #7b8a8b;\n  border-color: #7b8a8b;\n}\n\n.btn-outline-primary {\n  color: #2c3e50;\n  border-color: #2c3e50;\n}\n\n.btn-outline-primary:hover {\n  color: #fff;\n  background-color: #2c3e50;\n  border-color: #2c3e50;\n}\n\n.btn-check:focus + .btn-outline-primary, .btn-outline-primary:focus {\n  box-shadow: 0 0 0 0.25rem rgba(44, 62, 80, 0.5);\n}\n\n.btn-check:checked + .btn-outline-primary,\n.btn-check:active + .btn-outline-primary, .btn-outline-primary:active, .btn-outline-primary.active, .btn-outline-primary.dropdown-toggle.show {\n  color: #fff;\n  background-color: #2c3e50;\n  border-color: #2c3e50;\n}\n\n.btn-check:checked + .btn-outline-primary:focus,\n.btn-check:active + .btn-outline-primary:focus, .btn-outline-primary:active:focus, .btn-outline-primary.active:focus, .btn-outline-primary.dropdown-toggle.show:focus {\n  box-shadow: 0 0 0 0.25rem rgba(44, 62, 80, 0.5);\n}\n\n.btn-outline-primary:disabled, .btn-outline-primary.disabled {\n  color: #2c3e50;\n  background-color: transparent;\n}\n\n.btn-outline-secondary {\n  color: #95a5a6;\n  border-color: #95a5a6;\n}\n\n.btn-outline-secondary:hover {\n  color: #fff;\n  background-color: #95a5a6;\n  border-color: #95a5a6;\n}\n\n.btn-check:focus + .btn-outline-secondary, .btn-outline-secondary:focus {\n  box-shadow: 0 0 0 0.25rem rgba(149, 165, 166, 0.5);\n}\n\n.btn-check:checked + .btn-outline-secondary,\n.btn-check:active + .btn-outline-secondary, .btn-outline-secondary:active, .btn-outline-secondary.active, .btn-outline-secondary.dropdown-toggle.show {\n  color: #fff;\n  background-color: #95a5a6;\n  border-color: #95a5a6;\n}\n\n.btn-check:checked + .btn-outline-secondary:focus,\n.btn-check:active + .btn-outline-secondary:focus, .btn-outline-secondary:active:focus, .btn-outline-secondary.active:focus, .btn-outline-secondary.dropdown-toggle.show:focus {\n  box-shadow: 0 0 0 0.25rem rgba(149, 165, 166, 0.5);\n}\n\n.btn-outline-secondary:disabled, .btn-outline-secondary.disabled {\n  color: #95a5a6;\n  background-color: transparent;\n}\n\n.btn-outline-success {\n  color: #18bc9c;\n  border-color: #18bc9c;\n}\n\n.btn-outline-success:hover {\n  color: #fff;\n  background-color: #18bc9c;\n  border-color: #18bc9c;\n}\n\n.btn-check:focus + .btn-outline-success, .btn-outline-success:focus {\n  box-shadow: 0 0 0 0.25rem rgba(24, 188, 156, 0.5);\n}\n\n.btn-check:checked + .btn-outline-success,\n.btn-check:active + .btn-outline-success, .btn-outline-success:active, .btn-outline-success.active, .btn-outline-success.dropdown-toggle.show {\n  color: #fff;\n  background-color: #18bc9c;\n  border-color: #18bc9c;\n}\n\n.btn-check:checked + .btn-outline-success:focus,\n.btn-check:active + .btn-outline-success:focus, .btn-outline-success:active:focus, .btn-outline-success.active:focus, .btn-outline-success.dropdown-toggle.show:focus {\n  box-shadow: 0 0 0 0.25rem rgba(24, 188, 156, 0.5);\n}\n\n.btn-outline-success:disabled, .btn-outline-success.disabled {\n  color: #18bc9c;\n  background-color: transparent;\n}\n\n.btn-outline-info {\n  color: #3498db;\n  border-color: #3498db;\n}\n\n.btn-outline-info:hover {\n  color: #fff;\n  background-color: #3498db;\n  border-color: #3498db;\n}\n\n.btn-check:focus + .btn-outline-info, .btn-outline-info:focus {\n  box-shadow: 0 0 0 0.25rem rgba(52, 152, 219, 0.5);\n}\n\n.btn-check:checked + .btn-outline-info,\n.btn-check:active + .btn-outline-info, .btn-outline-info:active, .btn-outline-info.active, .btn-outline-info.dropdown-toggle.show {\n  color: #fff;\n  background-color: #3498db;\n  border-color: #3498db;\n}\n\n.btn-check:checked + .btn-outline-info:focus,\n.btn-check:active + .btn-outline-info:focus, .btn-outline-info:active:focus, .btn-outline-info.active:focus, .btn-outline-info.dropdown-toggle.show:focus {\n  box-shadow: 0 0 0 0.25rem rgba(52, 152, 219, 0.5);\n}\n\n.btn-outline-info:disabled, .btn-outline-info.disabled {\n  color: #3498db;\n  background-color: transparent;\n}\n\n.btn-outline-warning {\n  color: #f39c12;\n  border-color: #f39c12;\n}\n\n.btn-outline-warning:hover {\n  color: #fff;\n  background-color: #f39c12;\n  border-color: #f39c12;\n}\n\n.btn-check:focus + .btn-outline-warning, .btn-outline-warning:focus {\n  box-shadow: 0 0 0 0.25rem rgba(243, 156, 18, 0.5);\n}\n\n.btn-check:checked + .btn-outline-warning,\n.btn-check:active + .btn-outline-warning, .btn-outline-warning:active, .btn-outline-warning.active, .btn-outline-warning.dropdown-toggle.show {\n  color: #fff;\n  background-color: #f39c12;\n  border-color: #f39c12;\n}\n\n.btn-check:checked + .btn-outline-warning:focus,\n.btn-check:active + .btn-outline-warning:focus, .btn-outline-warning:active:focus, .btn-outline-warning.active:focus, .btn-outline-warning.dropdown-toggle.show:focus {\n  box-shadow: 0 0 0 0.25rem rgba(243, 156, 18, 0.5);\n}\n\n.btn-outline-warning:disabled, .btn-outline-warning.disabled {\n  color: #f39c12;\n  background-color: transparent;\n}\n\n.btn-outline-danger {\n  color: #e74c3c;\n  border-color: #e74c3c;\n}\n\n.btn-outline-danger:hover {\n  color: #fff;\n  background-color: #e74c3c;\n  border-color: #e74c3c;\n}\n\n.btn-check:focus + .btn-outline-danger, .btn-outline-danger:focus {\n  box-shadow: 0 0 0 0.25rem rgba(231, 76, 60, 0.5);\n}\n\n.btn-check:checked + .btn-outline-danger,\n.btn-check:active + .btn-outline-danger, .btn-outline-danger:active, .btn-outline-danger.active, .btn-outline-danger.dropdown-toggle.show {\n  color: #fff;\n  background-color: #e74c3c;\n  border-color: #e74c3c;\n}\n\n.btn-check:checked + .btn-outline-danger:focus,\n.btn-check:active + .btn-outline-danger:focus, .btn-outline-danger:active:focus, .btn-outline-danger.active:focus, .btn-outline-danger.dropdown-toggle.show:focus {\n  box-shadow: 0 0 0 0.25rem rgba(231, 76, 60, 0.5);\n}\n\n.btn-outline-danger:disabled, .btn-outline-danger.disabled {\n  color: #e74c3c;\n  background-color: transparent;\n}\n\n.btn-outline-light {\n  color: #ecf0f1;\n  border-color: #ecf0f1;\n}\n\n.btn-outline-light:hover {\n  color: #000;\n  background-color: #ecf0f1;\n  border-color: #ecf0f1;\n}\n\n.btn-check:focus + .btn-outline-light, .btn-outline-light:focus {\n  box-shadow: 0 0 0 0.25rem rgba(236, 240, 241, 0.5);\n}\n\n.btn-check:checked + .btn-outline-light,\n.btn-check:active + .btn-outline-light, .btn-outline-light:active, .btn-outline-light.active, .btn-outline-light.dropdown-toggle.show {\n  color: #000;\n  background-color: #ecf0f1;\n  border-color: #ecf0f1;\n}\n\n.btn-check:checked + .btn-outline-light:focus,\n.btn-check:active + .btn-outline-light:focus, .btn-outline-light:active:focus, .btn-outline-light.active:focus, .btn-outline-light.dropdown-toggle.show:focus {\n  box-shadow: 0 0 0 0.25rem rgba(236, 240, 241, 0.5);\n}\n\n.btn-outline-light:disabled, .btn-outline-light.disabled {\n  color: #ecf0f1;\n  background-color: transparent;\n}\n\n.btn-outline-dark {\n  color: #7b8a8b;\n  border-color: #7b8a8b;\n}\n\n.btn-outline-dark:hover {\n  color: #fff;\n  background-color: #7b8a8b;\n  border-color: #7b8a8b;\n}\n\n.btn-check:focus + .btn-outline-dark, .btn-outline-dark:focus {\n  box-shadow: 0 0 0 0.25rem rgba(123, 138, 139, 0.5);\n}\n\n.btn-check:checked + .btn-outline-dark,\n.btn-check:active + .btn-outline-dark, .btn-outline-dark:active, .btn-outline-dark.active, .btn-outline-dark.dropdown-toggle.show {\n  color: #fff;\n  background-color: #7b8a8b;\n  border-color: #7b8a8b;\n}\n\n.btn-check:checked + .btn-outline-dark:focus,\n.btn-check:active + .btn-outline-dark:focus, .btn-outline-dark:active:focus, .btn-outline-dark.active:focus, .btn-outline-dark.dropdown-toggle.show:focus {\n  box-shadow: 0 0 0 0.25rem rgba(123, 138, 139, 0.5);\n}\n\n.btn-outline-dark:disabled, .btn-outline-dark.disabled {\n  color: #7b8a8b;\n  background-color: transparent;\n}\n\n.btn-link {\n  font-weight: 400;\n  color: #18bc9c;\n  text-decoration: underline;\n}\n\n.btn-link:hover {\n  color: #13967d;\n}\n\n.btn-link:disabled, .btn-link.disabled {\n  color: #95a5a6;\n}\n\n.btn-lg, .btn-group-lg > .btn {\n  padding: 0.5rem 1rem;\n  font-size: 1.25rem;\n  border-radius: 0.3rem;\n}\n\n.btn-sm, .btn-group-sm > .btn {\n  padding: 0.25rem 0.5rem;\n  font-size: 0.875rem;\n  border-radius: 0.2rem;\n}\n\n.fade {\n  transition: opacity 0.15s linear;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .fade {\n    transition: none;\n  }\n}\n\n.fade:not(.show) {\n  opacity: 0;\n}\n\n.collapse:not(.show) {\n  display: none;\n}\n\n.collapsing {\n  height: 0;\n  overflow: hidden;\n  transition: height 0.35s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .collapsing {\n    transition: none;\n  }\n}\n\n.collapsing.collapse-horizontal {\n  width: 0;\n  height: auto;\n  transition: width 0.35s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .collapsing.collapse-horizontal {\n    transition: none;\n  }\n}\n\n.dropup,\n.dropend,\n.dropdown,\n.dropstart {\n  position: relative;\n}\n\n.dropdown-toggle {\n  white-space: nowrap;\n}\n\n.dropdown-toggle::after {\n  display: inline-block;\n  margin-left: 0.255em;\n  vertical-align: 0.255em;\n  content: \"\";\n  border-top: 0.3em solid;\n  border-right: 0.3em solid transparent;\n  border-bottom: 0;\n  border-left: 0.3em solid transparent;\n}\n\n.dropdown-toggle:empty::after {\n  margin-left: 0;\n}\n\n.dropdown-menu {\n  position: absolute;\n  z-index: 1000;\n  display: none;\n  min-width: 10rem;\n  padding: 0.5rem 0;\n  margin: 0;\n  font-size: 1rem;\n  color: #212529;\n  text-align: left;\n  list-style: none;\n  background-color: #fff;\n  background-clip: padding-box;\n  border: 1px solid rgba(0, 0, 0, 0.15);\n  border-radius: 0.25rem;\n}\n\n.dropdown-menu[data-bs-popper] {\n  top: 100%;\n  left: 0;\n  margin-top: 0.125rem;\n}\n\n.dropdown-menu-start {\n  --bs-position: start;\n}\n\n.dropdown-menu-start[data-bs-popper] {\n  right: auto;\n  left: 0;\n}\n\n.dropdown-menu-end {\n  --bs-position: end;\n}\n\n.dropdown-menu-end[data-bs-popper] {\n  right: 0;\n  left: auto;\n}\n\n@media (min-width: 576px) {\n  .dropdown-menu-sm-start {\n    --bs-position: start;\n  }\n  .dropdown-menu-sm-start[data-bs-popper] {\n    right: auto;\n    left: 0;\n  }\n  .dropdown-menu-sm-end {\n    --bs-position: end;\n  }\n  .dropdown-menu-sm-end[data-bs-popper] {\n    right: 0;\n    left: auto;\n  }\n}\n\n@media (min-width: 768px) {\n  .dropdown-menu-md-start {\n    --bs-position: start;\n  }\n  .dropdown-menu-md-start[data-bs-popper] {\n    right: auto;\n    left: 0;\n  }\n  .dropdown-menu-md-end {\n    --bs-position: end;\n  }\n  .dropdown-menu-md-end[data-bs-popper] {\n    right: 0;\n    left: auto;\n  }\n}\n\n@media (min-width: 992px) {\n  .dropdown-menu-lg-start {\n    --bs-position: start;\n  }\n  .dropdown-menu-lg-start[data-bs-popper] {\n    right: auto;\n    left: 0;\n  }\n  .dropdown-menu-lg-end {\n    --bs-position: end;\n  }\n  .dropdown-menu-lg-end[data-bs-popper] {\n    right: 0;\n    left: auto;\n  }\n}\n\n@media (min-width: 1200px) {\n  .dropdown-menu-xl-start {\n    --bs-position: start;\n  }\n  .dropdown-menu-xl-start[data-bs-popper] {\n    right: auto;\n    left: 0;\n  }\n  .dropdown-menu-xl-end {\n    --bs-position: end;\n  }\n  .dropdown-menu-xl-end[data-bs-popper] {\n    right: 0;\n    left: auto;\n  }\n}\n\n@media (min-width: 1400px) {\n  .dropdown-menu-xxl-start {\n    --bs-position: start;\n  }\n  .dropdown-menu-xxl-start[data-bs-popper] {\n    right: auto;\n    left: 0;\n  }\n  .dropdown-menu-xxl-end {\n    --bs-position: end;\n  }\n  .dropdown-menu-xxl-end[data-bs-popper] {\n    right: 0;\n    left: auto;\n  }\n}\n\n.dropup .dropdown-menu[data-bs-popper] {\n  top: auto;\n  bottom: 100%;\n  margin-top: 0;\n  margin-bottom: 0.125rem;\n}\n\n.dropup .dropdown-toggle::after {\n  display: inline-block;\n  margin-left: 0.255em;\n  vertical-align: 0.255em;\n  content: \"\";\n  border-top: 0;\n  border-right: 0.3em solid transparent;\n  border-bottom: 0.3em solid;\n  border-left: 0.3em solid transparent;\n}\n\n.dropup .dropdown-toggle:empty::after {\n  margin-left: 0;\n}\n\n.dropend .dropdown-menu[data-bs-popper] {\n  top: 0;\n  right: auto;\n  left: 100%;\n  margin-top: 0;\n  margin-left: 0.125rem;\n}\n\n.dropend .dropdown-toggle::after {\n  display: inline-block;\n  margin-left: 0.255em;\n  vertical-align: 0.255em;\n  content: \"\";\n  border-top: 0.3em solid transparent;\n  border-right: 0;\n  border-bottom: 0.3em solid transparent;\n  border-left: 0.3em solid;\n}\n\n.dropend .dropdown-toggle:empty::after {\n  margin-left: 0;\n}\n\n.dropend .dropdown-toggle::after {\n  vertical-align: 0;\n}\n\n.dropstart .dropdown-menu[data-bs-popper] {\n  top: 0;\n  right: 100%;\n  left: auto;\n  margin-top: 0;\n  margin-right: 0.125rem;\n}\n\n.dropstart .dropdown-toggle::after {\n  display: inline-block;\n  margin-left: 0.255em;\n  vertical-align: 0.255em;\n  content: \"\";\n}\n\n.dropstart .dropdown-toggle::after {\n  display: none;\n}\n\n.dropstart .dropdown-toggle::before {\n  display: inline-block;\n  margin-right: 0.255em;\n  vertical-align: 0.255em;\n  content: \"\";\n  border-top: 0.3em solid transparent;\n  border-right: 0.3em solid;\n  border-bottom: 0.3em solid transparent;\n}\n\n.dropstart .dropdown-toggle:empty::after {\n  margin-left: 0;\n}\n\n.dropstart .dropdown-toggle::before {\n  vertical-align: 0;\n}\n\n.dropdown-divider {\n  height: 0;\n  margin: 0.5rem 0;\n  overflow: hidden;\n  border-top: 1px solid rgba(0, 0, 0, 0.15);\n}\n\n.dropdown-item {\n  display: block;\n  width: 100%;\n  padding: 0.25rem 1rem;\n  clear: both;\n  font-weight: 400;\n  color: #7b8a8b;\n  text-align: inherit;\n  text-decoration: none;\n  white-space: nowrap;\n  background-color: transparent;\n  border: 0;\n}\n\n.dropdown-item:hover, .dropdown-item:focus {\n  color: #fff;\n  background-color: #2c3e50;\n}\n\n.dropdown-item.active, .dropdown-item:active {\n  color: #fff;\n  text-decoration: none;\n  background-color: #2c3e50;\n}\n\n.dropdown-item.disabled, .dropdown-item:disabled {\n  color: #b4bcc2;\n  pointer-events: none;\n  background-color: transparent;\n}\n\n.dropdown-menu.show {\n  display: block;\n}\n\n.dropdown-header {\n  display: block;\n  padding: 0.5rem 1rem;\n  margin-bottom: 0;\n  font-size: 0.875rem;\n  color: #95a5a6;\n  white-space: nowrap;\n}\n\n.dropdown-item-text {\n  display: block;\n  padding: 0.25rem 1rem;\n  color: #7b8a8b;\n}\n\n.dropdown-menu-dark {\n  color: #dee2e6;\n  background-color: #343a40;\n  border-color: rgba(0, 0, 0, 0.15);\n}\n\n.dropdown-menu-dark .dropdown-item {\n  color: #dee2e6;\n}\n\n.dropdown-menu-dark .dropdown-item:hover, .dropdown-menu-dark .dropdown-item:focus {\n  color: #fff;\n  background-color: rgba(255, 255, 255, 0.15);\n}\n\n.dropdown-menu-dark .dropdown-item.active, .dropdown-menu-dark .dropdown-item:active {\n  color: #fff;\n  background-color: #2c3e50;\n}\n\n.dropdown-menu-dark .dropdown-item.disabled, .dropdown-menu-dark .dropdown-item:disabled {\n  color: #b4bcc2;\n}\n\n.dropdown-menu-dark .dropdown-divider {\n  border-color: rgba(0, 0, 0, 0.15);\n}\n\n.dropdown-menu-dark .dropdown-item-text {\n  color: #dee2e6;\n}\n\n.dropdown-menu-dark .dropdown-header {\n  color: #b4bcc2;\n}\n\n.btn-group,\n.btn-group-vertical {\n  position: relative;\n  display: -ms-inline-flexbox;\n  display: inline-flex;\n  vertical-align: middle;\n}\n\n.btn-group > .btn,\n.btn-group-vertical > .btn {\n  position: relative;\n  -ms-flex: 1 1 auto;\n  flex: 1 1 auto;\n}\n\n.btn-group > .btn-check:checked + .btn,\n.btn-group > .btn-check:focus + .btn,\n.btn-group > .btn:hover,\n.btn-group > .btn:focus,\n.btn-group > .btn:active,\n.btn-group > .btn.active,\n.btn-group-vertical > .btn-check:checked + .btn,\n.btn-group-vertical > .btn-check:focus + .btn,\n.btn-group-vertical > .btn:hover,\n.btn-group-vertical > .btn:focus,\n.btn-group-vertical > .btn:active,\n.btn-group-vertical > .btn.active {\n  z-index: 1;\n}\n\n.btn-toolbar {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n  flex-wrap: wrap;\n  -ms-flex-pack: start;\n  justify-content: flex-start;\n}\n\n.btn-toolbar .input-group {\n  width: auto;\n}\n\n.btn-group > .btn:not(:first-child),\n.btn-group > .btn-group:not(:first-child) {\n  margin-left: -1px;\n}\n\n.btn-group > .btn:not(:last-child):not(.dropdown-toggle),\n.btn-group > .btn-group:not(:last-child) > .btn {\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n}\n\n.btn-group > .btn:nth-child(n + 3),\n.btn-group > :not(.btn-check) + .btn,\n.btn-group > .btn-group:not(:first-child) > .btn {\n  border-top-left-radius: 0;\n  border-bottom-left-radius: 0;\n}\n\n.dropdown-toggle-split {\n  padding-right: 0.5625rem;\n  padding-left: 0.5625rem;\n}\n\n.dropdown-toggle-split::after,\n.dropup .dropdown-toggle-split::after,\n.dropend .dropdown-toggle-split::after {\n  margin-left: 0;\n}\n\n.dropstart .dropdown-toggle-split::before {\n  margin-right: 0;\n}\n\n.btn-sm + .dropdown-toggle-split, .btn-group-sm > .btn + .dropdown-toggle-split {\n  padding-right: 0.375rem;\n  padding-left: 0.375rem;\n}\n\n.btn-lg + .dropdown-toggle-split, .btn-group-lg > .btn + .dropdown-toggle-split {\n  padding-right: 0.75rem;\n  padding-left: 0.75rem;\n}\n\n.btn-group-vertical {\n  -ms-flex-direction: column;\n  flex-direction: column;\n  -ms-flex-align: start;\n  align-items: flex-start;\n  -ms-flex-pack: center;\n  justify-content: center;\n}\n\n.btn-group-vertical > .btn,\n.btn-group-vertical > .btn-group {\n  width: 100%;\n}\n\n.btn-group-vertical > .btn:not(:first-child),\n.btn-group-vertical > .btn-group:not(:first-child) {\n  margin-top: -1px;\n}\n\n.btn-group-vertical > .btn:not(:last-child):not(.dropdown-toggle),\n.btn-group-vertical > .btn-group:not(:last-child) > .btn {\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 0;\n}\n\n.btn-group-vertical > .btn ~ .btn,\n.btn-group-vertical > .btn-group:not(:first-child) > .btn {\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n}\n\n.nav {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n  flex-wrap: wrap;\n  padding-left: 0;\n  margin-bottom: 0;\n  list-style: none;\n}\n\n.nav-link {\n  display: block;\n  padding: 0.5rem 2rem;\n  color: #18bc9c;\n  text-decoration: none;\n  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .nav-link {\n    transition: none;\n  }\n}\n\n.nav-link:hover, .nav-link:focus {\n  color: #13967d;\n}\n\n.nav-link.disabled {\n  color: #95a5a6;\n  pointer-events: none;\n  cursor: default;\n}\n\n.nav-tabs {\n  border-bottom: 1px solid #ecf0f1;\n}\n\n.nav-tabs .nav-link {\n  margin-bottom: -1px;\n  background: none;\n  border: 1px solid transparent;\n  border-top-left-radius: 0.25rem;\n  border-top-right-radius: 0.25rem;\n}\n\n.nav-tabs .nav-link:hover, .nav-tabs .nav-link:focus {\n  border-color: #ecf0f1 #ecf0f1 #ecf0f1;\n  isolation: isolate;\n}\n\n.nav-tabs .nav-link.disabled {\n  color: #95a5a6;\n  background-color: transparent;\n  border-color: transparent;\n}\n\n.nav-tabs .nav-link.active,\n.nav-tabs .nav-item.show .nav-link {\n  color: #7b8a8b;\n  background-color: #fff;\n  border-color: #dee2e6 #dee2e6 #fff;\n}\n\n.nav-tabs .dropdown-menu {\n  margin-top: -1px;\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n}\n\n.nav-pills .nav-link {\n  background: none;\n  border: 0;\n  border-radius: 0.25rem;\n}\n\n.nav-pills .nav-link.active,\n.nav-pills .show > .nav-link {\n  color: #fff;\n  background-color: #2c3e50;\n}\n\n.nav-fill > .nav-link,\n.nav-fill .nav-item {\n  -ms-flex: 1 1 auto;\n  flex: 1 1 auto;\n  text-align: center;\n}\n\n.nav-justified > .nav-link,\n.nav-justified .nav-item {\n  -ms-flex-preferred-size: 0;\n  flex-basis: 0;\n  -ms-flex-positive: 1;\n  flex-grow: 1;\n  text-align: center;\n}\n\n.nav-fill .nav-item .nav-link,\n.nav-justified .nav-item .nav-link {\n  width: 100%;\n}\n\n.tab-content > .tab-pane {\n  display: none;\n}\n\n.tab-content > .active {\n  display: block;\n}\n\n.navbar {\n  position: relative;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n  flex-wrap: wrap;\n  -ms-flex-align: center;\n  align-items: center;\n  -ms-flex-pack: justify;\n  justify-content: space-between;\n  padding-top: 1rem;\n  padding-bottom: 1rem;\n}\n\n.navbar > .container,\n.navbar > .container-fluid, .navbar > .container-sm, .navbar > .container-md, .navbar > .container-lg, .navbar > .container-xl, .navbar > .container-xxl {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: inherit;\n  flex-wrap: inherit;\n  -ms-flex-align: center;\n  align-items: center;\n  -ms-flex-pack: justify;\n  justify-content: space-between;\n}\n\n.navbar-brand {\n  padding-top: 0.3125rem;\n  padding-bottom: 0.3125rem;\n  margin-right: 1rem;\n  font-size: 1.25rem;\n  text-decoration: none;\n  white-space: nowrap;\n}\n\n.navbar-nav {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  padding-left: 0;\n  margin-bottom: 0;\n  list-style: none;\n}\n\n.navbar-nav .nav-link {\n  padding-right: 0;\n  padding-left: 0;\n}\n\n.navbar-nav .dropdown-menu {\n  position: static;\n}\n\n.navbar-text {\n  padding-top: 0.5rem;\n  padding-bottom: 0.5rem;\n}\n\n.navbar-collapse {\n  -ms-flex-preferred-size: 100%;\n  flex-basis: 100%;\n  -ms-flex-positive: 1;\n  flex-grow: 1;\n  -ms-flex-align: center;\n  align-items: center;\n}\n\n.navbar-toggler {\n  padding: 0.25rem 0.75rem;\n  font-size: 1.25rem;\n  line-height: 1;\n  background-color: transparent;\n  border: 1px solid transparent;\n  border-radius: 0.25rem;\n  transition: box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .navbar-toggler {\n    transition: none;\n  }\n}\n\n.navbar-toggler:hover {\n  text-decoration: none;\n}\n\n.navbar-toggler:focus {\n  text-decoration: none;\n  outline: 0;\n  box-shadow: 0 0 0 0.25rem;\n}\n\n.navbar-toggler-icon {\n  display: inline-block;\n  width: 1.5em;\n  height: 1.5em;\n  vertical-align: middle;\n  background-repeat: no-repeat;\n  background-position: center;\n  background-size: 100%;\n}\n\n.navbar-nav-scroll {\n  max-height: var(--bs-scroll-height, 75vh);\n  overflow-y: auto;\n}\n\n@media (min-width: 576px) {\n  .navbar-expand-sm {\n    -ms-flex-wrap: nowrap;\n    flex-wrap: nowrap;\n    -ms-flex-pack: start;\n    justify-content: flex-start;\n  }\n  .navbar-expand-sm .navbar-nav {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .navbar-expand-sm .navbar-nav .dropdown-menu {\n    position: absolute;\n  }\n  .navbar-expand-sm .navbar-nav .nav-link {\n    padding-right: 0.5rem;\n    padding-left: 0.5rem;\n  }\n  .navbar-expand-sm .navbar-nav-scroll {\n    overflow: visible;\n  }\n  .navbar-expand-sm .navbar-collapse {\n    display: -ms-flexbox !important;\n    display: flex !important;\n    -ms-flex-preferred-size: auto;\n    flex-basis: auto;\n  }\n  .navbar-expand-sm .navbar-toggler {\n    display: none;\n  }\n  .navbar-expand-sm .offcanvas-header {\n    display: none;\n  }\n  .navbar-expand-sm .offcanvas {\n    position: inherit;\n    bottom: 0;\n    z-index: 1000;\n    -ms-flex-positive: 1;\n    flex-grow: 1;\n    visibility: visible !important;\n    background-color: transparent;\n    border-right: 0;\n    border-left: 0;\n    transition: none;\n    -webkit-transform: none;\n    transform: none;\n  }\n  .navbar-expand-sm .offcanvas-top,\n  .navbar-expand-sm .offcanvas-bottom {\n    height: auto;\n    border-top: 0;\n    border-bottom: 0;\n  }\n  .navbar-expand-sm .offcanvas-body {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-positive: 0;\n    flex-grow: 0;\n    padding: 0;\n    overflow-y: visible;\n  }\n}\n\n@media (min-width: 768px) {\n  .navbar-expand-md {\n    -ms-flex-wrap: nowrap;\n    flex-wrap: nowrap;\n    -ms-flex-pack: start;\n    justify-content: flex-start;\n  }\n  .navbar-expand-md .navbar-nav {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .navbar-expand-md .navbar-nav .dropdown-menu {\n    position: absolute;\n  }\n  .navbar-expand-md .navbar-nav .nav-link {\n    padding-right: 0.5rem;\n    padding-left: 0.5rem;\n  }\n  .navbar-expand-md .navbar-nav-scroll {\n    overflow: visible;\n  }\n  .navbar-expand-md .navbar-collapse {\n    display: -ms-flexbox !important;\n    display: flex !important;\n    -ms-flex-preferred-size: auto;\n    flex-basis: auto;\n  }\n  .navbar-expand-md .navbar-toggler {\n    display: none;\n  }\n  .navbar-expand-md .offcanvas-header {\n    display: none;\n  }\n  .navbar-expand-md .offcanvas {\n    position: inherit;\n    bottom: 0;\n    z-index: 1000;\n    -ms-flex-positive: 1;\n    flex-grow: 1;\n    visibility: visible !important;\n    background-color: transparent;\n    border-right: 0;\n    border-left: 0;\n    transition: none;\n    -webkit-transform: none;\n    transform: none;\n  }\n  .navbar-expand-md .offcanvas-top,\n  .navbar-expand-md .offcanvas-bottom {\n    height: auto;\n    border-top: 0;\n    border-bottom: 0;\n  }\n  .navbar-expand-md .offcanvas-body {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-positive: 0;\n    flex-grow: 0;\n    padding: 0;\n    overflow-y: visible;\n  }\n}\n\n@media (min-width: 992px) {\n  .navbar-expand-lg {\n    -ms-flex-wrap: nowrap;\n    flex-wrap: nowrap;\n    -ms-flex-pack: start;\n    justify-content: flex-start;\n  }\n  .navbar-expand-lg .navbar-nav {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .navbar-expand-lg .navbar-nav .dropdown-menu {\n    position: absolute;\n  }\n  .navbar-expand-lg .navbar-nav .nav-link {\n    padding-right: 0.5rem;\n    padding-left: 0.5rem;\n  }\n  .navbar-expand-lg .navbar-nav-scroll {\n    overflow: visible;\n  }\n  .navbar-expand-lg .navbar-collapse {\n    display: -ms-flexbox !important;\n    display: flex !important;\n    -ms-flex-preferred-size: auto;\n    flex-basis: auto;\n  }\n  .navbar-expand-lg .navbar-toggler {\n    display: none;\n  }\n  .navbar-expand-lg .offcanvas-header {\n    display: none;\n  }\n  .navbar-expand-lg .offcanvas {\n    position: inherit;\n    bottom: 0;\n    z-index: 1000;\n    -ms-flex-positive: 1;\n    flex-grow: 1;\n    visibility: visible !important;\n    background-color: transparent;\n    border-right: 0;\n    border-left: 0;\n    transition: none;\n    -webkit-transform: none;\n    transform: none;\n  }\n  .navbar-expand-lg .offcanvas-top,\n  .navbar-expand-lg .offcanvas-bottom {\n    height: auto;\n    border-top: 0;\n    border-bottom: 0;\n  }\n  .navbar-expand-lg .offcanvas-body {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-positive: 0;\n    flex-grow: 0;\n    padding: 0;\n    overflow-y: visible;\n  }\n}\n\n@media (min-width: 1200px) {\n  .navbar-expand-xl {\n    -ms-flex-wrap: nowrap;\n    flex-wrap: nowrap;\n    -ms-flex-pack: start;\n    justify-content: flex-start;\n  }\n  .navbar-expand-xl .navbar-nav {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .navbar-expand-xl .navbar-nav .dropdown-menu {\n    position: absolute;\n  }\n  .navbar-expand-xl .navbar-nav .nav-link {\n    padding-right: 0.5rem;\n    padding-left: 0.5rem;\n  }\n  .navbar-expand-xl .navbar-nav-scroll {\n    overflow: visible;\n  }\n  .navbar-expand-xl .navbar-collapse {\n    display: -ms-flexbox !important;\n    display: flex !important;\n    -ms-flex-preferred-size: auto;\n    flex-basis: auto;\n  }\n  .navbar-expand-xl .navbar-toggler {\n    display: none;\n  }\n  .navbar-expand-xl .offcanvas-header {\n    display: none;\n  }\n  .navbar-expand-xl .offcanvas {\n    position: inherit;\n    bottom: 0;\n    z-index: 1000;\n    -ms-flex-positive: 1;\n    flex-grow: 1;\n    visibility: visible !important;\n    background-color: transparent;\n    border-right: 0;\n    border-left: 0;\n    transition: none;\n    -webkit-transform: none;\n    transform: none;\n  }\n  .navbar-expand-xl .offcanvas-top,\n  .navbar-expand-xl .offcanvas-bottom {\n    height: auto;\n    border-top: 0;\n    border-bottom: 0;\n  }\n  .navbar-expand-xl .offcanvas-body {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-positive: 0;\n    flex-grow: 0;\n    padding: 0;\n    overflow-y: visible;\n  }\n}\n\n@media (min-width: 1400px) {\n  .navbar-expand-xxl {\n    -ms-flex-wrap: nowrap;\n    flex-wrap: nowrap;\n    -ms-flex-pack: start;\n    justify-content: flex-start;\n  }\n  .navbar-expand-xxl .navbar-nav {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .navbar-expand-xxl .navbar-nav .dropdown-menu {\n    position: absolute;\n  }\n  .navbar-expand-xxl .navbar-nav .nav-link {\n    padding-right: 0.5rem;\n    padding-left: 0.5rem;\n  }\n  .navbar-expand-xxl .navbar-nav-scroll {\n    overflow: visible;\n  }\n  .navbar-expand-xxl .navbar-collapse {\n    display: -ms-flexbox !important;\n    display: flex !important;\n    -ms-flex-preferred-size: auto;\n    flex-basis: auto;\n  }\n  .navbar-expand-xxl .navbar-toggler {\n    display: none;\n  }\n  .navbar-expand-xxl .offcanvas-header {\n    display: none;\n  }\n  .navbar-expand-xxl .offcanvas {\n    position: inherit;\n    bottom: 0;\n    z-index: 1000;\n    -ms-flex-positive: 1;\n    flex-grow: 1;\n    visibility: visible !important;\n    background-color: transparent;\n    border-right: 0;\n    border-left: 0;\n    transition: none;\n    -webkit-transform: none;\n    transform: none;\n  }\n  .navbar-expand-xxl .offcanvas-top,\n  .navbar-expand-xxl .offcanvas-bottom {\n    height: auto;\n    border-top: 0;\n    border-bottom: 0;\n  }\n  .navbar-expand-xxl .offcanvas-body {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-positive: 0;\n    flex-grow: 0;\n    padding: 0;\n    overflow-y: visible;\n  }\n}\n\n.navbar-expand {\n  -ms-flex-wrap: nowrap;\n  flex-wrap: nowrap;\n  -ms-flex-pack: start;\n  justify-content: flex-start;\n}\n\n.navbar-expand .navbar-nav {\n  -ms-flex-direction: row;\n  flex-direction: row;\n}\n\n.navbar-expand .navbar-nav .dropdown-menu {\n  position: absolute;\n}\n\n.navbar-expand .navbar-nav .nav-link {\n  padding-right: 0.5rem;\n  padding-left: 0.5rem;\n}\n\n.navbar-expand .navbar-nav-scroll {\n  overflow: visible;\n}\n\n.navbar-expand .navbar-collapse {\n  display: -ms-flexbox !important;\n  display: flex !important;\n  -ms-flex-preferred-size: auto;\n  flex-basis: auto;\n}\n\n.navbar-expand .navbar-toggler {\n  display: none;\n}\n\n.navbar-expand .offcanvas-header {\n  display: none;\n}\n\n.navbar-expand .offcanvas {\n  position: inherit;\n  bottom: 0;\n  z-index: 1000;\n  -ms-flex-positive: 1;\n  flex-grow: 1;\n  visibility: visible !important;\n  background-color: transparent;\n  border-right: 0;\n  border-left: 0;\n  transition: none;\n  -webkit-transform: none;\n  transform: none;\n}\n\n.navbar-expand .offcanvas-top,\n.navbar-expand .offcanvas-bottom {\n  height: auto;\n  border-top: 0;\n  border-bottom: 0;\n}\n\n.navbar-expand .offcanvas-body {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-positive: 0;\n  flex-grow: 0;\n  padding: 0;\n  overflow-y: visible;\n}\n\n.navbar-light .navbar-brand {\n  color: rgba(0, 0, 0, 0.9);\n}\n\n.navbar-light .navbar-brand:hover, .navbar-light .navbar-brand:focus {\n  color: rgba(0, 0, 0, 0.9);\n}\n\n.navbar-light .navbar-nav .nav-link {\n  color: rgba(0, 0, 0, 0.55);\n}\n\n.navbar-light .navbar-nav .nav-link:hover, .navbar-light .navbar-nav .nav-link:focus {\n  color: rgba(0, 0, 0, 0.7);\n}\n\n.navbar-light .navbar-nav .nav-link.disabled {\n  color: rgba(0, 0, 0, 0.3);\n}\n\n.navbar-light .navbar-nav .show > .nav-link,\n.navbar-light .navbar-nav .nav-link.active {\n  color: rgba(0, 0, 0, 0.9);\n}\n\n.navbar-light .navbar-toggler {\n  color: rgba(0, 0, 0, 0.55);\n  border-color: rgba(0, 0, 0, 0.1);\n}\n\n.navbar-light .navbar-toggler-icon {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%280, 0, 0, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e\");\n}\n\n.navbar-light .navbar-text {\n  color: rgba(0, 0, 0, 0.55);\n}\n\n.navbar-light .navbar-text a,\n.navbar-light .navbar-text a:hover,\n.navbar-light .navbar-text a:focus {\n  color: rgba(0, 0, 0, 0.9);\n}\n\n.navbar-dark .navbar-brand {\n  color: #fff;\n}\n\n.navbar-dark .navbar-brand:hover, .navbar-dark .navbar-brand:focus {\n  color: #fff;\n}\n\n.navbar-dark .navbar-nav .nav-link {\n  color: #fff;\n}\n\n.navbar-dark .navbar-nav .nav-link:hover, .navbar-dark .navbar-nav .nav-link:focus {\n  color: #2c3e50;\n}\n\n.navbar-dark .navbar-nav .nav-link.disabled {\n  color: rgba(255, 255, 255, 0.25);\n}\n\n.navbar-dark .navbar-nav .show > .nav-link,\n.navbar-dark .navbar-nav .nav-link.active {\n  color: #2c3e50;\n}\n\n.navbar-dark .navbar-toggler {\n  color: #fff;\n  border-color: rgba(255, 255, 255, 0.1);\n}\n\n.navbar-dark .navbar-toggler-icon {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='%23fff' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e\");\n}\n\n.navbar-dark .navbar-text {\n  color: #fff;\n}\n\n.navbar-dark .navbar-text a,\n.navbar-dark .navbar-text a:hover,\n.navbar-dark .navbar-text a:focus {\n  color: #2c3e50;\n}\n\n.card {\n  position: relative;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  min-width: 0;\n  word-wrap: break-word;\n  background-color: #fff;\n  background-clip: border-box;\n  border: 1px solid rgba(0, 0, 0, 0.125);\n  border-radius: 0.25rem;\n}\n\n.card > hr {\n  margin-right: 0;\n  margin-left: 0;\n}\n\n.card > .list-group {\n  border-top: inherit;\n  border-bottom: inherit;\n}\n\n.card > .list-group:first-child {\n  border-top-width: 0;\n  border-top-left-radius: calc(0.25rem - 1px);\n  border-top-right-radius: calc(0.25rem - 1px);\n}\n\n.card > .list-group:last-child {\n  border-bottom-width: 0;\n  border-bottom-right-radius: calc(0.25rem - 1px);\n  border-bottom-left-radius: calc(0.25rem - 1px);\n}\n\n.card > .card-header + .list-group,\n.card > .list-group + .card-footer {\n  border-top: 0;\n}\n\n.card-body {\n  -ms-flex: 1 1 auto;\n  flex: 1 1 auto;\n  padding: 1rem 1rem;\n}\n\n.card-title {\n  margin-bottom: 0.5rem;\n}\n\n.card-subtitle {\n  margin-top: -0.25rem;\n  margin-bottom: 0;\n}\n\n.card-text:last-child {\n  margin-bottom: 0;\n}\n\n.card-link + .card-link {\n  margin-left: 1rem;\n}\n\n.card-header {\n  padding: 0.5rem 1rem;\n  margin-bottom: 0;\n  background-color: rgba(0, 0, 0, 0.03);\n  border-bottom: 1px solid rgba(0, 0, 0, 0.125);\n}\n\n.card-header:first-child {\n  border-radius: calc(0.25rem - 1px) calc(0.25rem - 1px) 0 0;\n}\n\n.card-footer {\n  padding: 0.5rem 1rem;\n  background-color: rgba(0, 0, 0, 0.03);\n  border-top: 1px solid rgba(0, 0, 0, 0.125);\n}\n\n.card-footer:last-child {\n  border-radius: 0 0 calc(0.25rem - 1px) calc(0.25rem - 1px);\n}\n\n.card-header-tabs {\n  margin-right: -0.5rem;\n  margin-bottom: -0.5rem;\n  margin-left: -0.5rem;\n  border-bottom: 0;\n}\n\n.card-header-pills {\n  margin-right: -0.5rem;\n  margin-left: -0.5rem;\n}\n\n.card-img-overlay {\n  position: absolute;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  padding: 1rem;\n  border-radius: calc(0.25rem - 1px);\n}\n\n.card-img,\n.card-img-top,\n.card-img-bottom {\n  width: 100%;\n}\n\n.card-img,\n.card-img-top {\n  border-top-left-radius: calc(0.25rem - 1px);\n  border-top-right-radius: calc(0.25rem - 1px);\n}\n\n.card-img,\n.card-img-bottom {\n  border-bottom-right-radius: calc(0.25rem - 1px);\n  border-bottom-left-radius: calc(0.25rem - 1px);\n}\n\n.card-group > .card {\n  margin-bottom: 0.75rem;\n}\n\n@media (min-width: 576px) {\n  .card-group {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-flow: row wrap;\n    flex-flow: row wrap;\n  }\n  .card-group > .card {\n    -ms-flex: 1 0 0%;\n    flex: 1 0 0%;\n    margin-bottom: 0;\n  }\n  .card-group > .card + .card {\n    margin-left: 0;\n    border-left: 0;\n  }\n  .card-group > .card:not(:last-child) {\n    border-top-right-radius: 0;\n    border-bottom-right-radius: 0;\n  }\n  .card-group > .card:not(:last-child) .card-img-top,\n  .card-group > .card:not(:last-child) .card-header {\n    border-top-right-radius: 0;\n  }\n  .card-group > .card:not(:last-child) .card-img-bottom,\n  .card-group > .card:not(:last-child) .card-footer {\n    border-bottom-right-radius: 0;\n  }\n  .card-group > .card:not(:first-child) {\n    border-top-left-radius: 0;\n    border-bottom-left-radius: 0;\n  }\n  .card-group > .card:not(:first-child) .card-img-top,\n  .card-group > .card:not(:first-child) .card-header {\n    border-top-left-radius: 0;\n  }\n  .card-group > .card:not(:first-child) .card-img-bottom,\n  .card-group > .card:not(:first-child) .card-footer {\n    border-bottom-left-radius: 0;\n  }\n}\n\n.accordion-button {\n  position: relative;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-align: center;\n  align-items: center;\n  width: 100%;\n  padding: 1rem 1.25rem;\n  font-size: 1rem;\n  color: #212529;\n  text-align: left;\n  background-color: #fff;\n  border: 0;\n  border-radius: 0;\n  overflow-anchor: none;\n  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, border-radius 0.15s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .accordion-button {\n    transition: none;\n  }\n}\n\n.accordion-button:not(.collapsed) {\n  color: #283848;\n  background-color: #eaecee;\n  box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.125);\n}\n\n.accordion-button:not(.collapsed)::after {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23283848'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e\");\n  -webkit-transform: rotate(-180deg);\n  transform: rotate(-180deg);\n}\n\n.accordion-button::after {\n  -ms-flex-negative: 0;\n  flex-shrink: 0;\n  width: 1.25rem;\n  height: 1.25rem;\n  margin-left: auto;\n  content: \"\";\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23212529'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e\");\n  background-repeat: no-repeat;\n  background-size: 1.25rem;\n  transition: -webkit-transform 0.2s ease-in-out;\n  transition: transform 0.2s ease-in-out;\n  transition: transform 0.2s ease-in-out, -webkit-transform 0.2s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .accordion-button::after {\n    transition: none;\n  }\n}\n\n.accordion-button:hover {\n  z-index: 2;\n}\n\n.accordion-button:focus {\n  z-index: 3;\n  border-color: #969fa8;\n  outline: 0;\n  box-shadow: 0 0 0 0.25rem rgba(44, 62, 80, 0.25);\n}\n\n.accordion-header {\n  margin-bottom: 0;\n}\n\n.accordion-item {\n  background-color: #fff;\n  border: 1px solid rgba(0, 0, 0, 0.125);\n}\n\n.accordion-item:first-of-type {\n  border-top-left-radius: 0.25rem;\n  border-top-right-radius: 0.25rem;\n}\n\n.accordion-item:first-of-type .accordion-button {\n  border-top-left-radius: calc(0.25rem - 1px);\n  border-top-right-radius: calc(0.25rem - 1px);\n}\n\n.accordion-item:not(:first-of-type) {\n  border-top: 0;\n}\n\n.accordion-item:last-of-type {\n  border-bottom-right-radius: 0.25rem;\n  border-bottom-left-radius: 0.25rem;\n}\n\n.accordion-item:last-of-type .accordion-button.collapsed {\n  border-bottom-right-radius: calc(0.25rem - 1px);\n  border-bottom-left-radius: calc(0.25rem - 1px);\n}\n\n.accordion-item:last-of-type .accordion-collapse {\n  border-bottom-right-radius: 0.25rem;\n  border-bottom-left-radius: 0.25rem;\n}\n\n.accordion-body {\n  padding: 1rem 1.25rem;\n}\n\n.accordion-flush .accordion-collapse {\n  border-width: 0;\n}\n\n.accordion-flush .accordion-item {\n  border-right: 0;\n  border-left: 0;\n  border-radius: 0;\n}\n\n.accordion-flush .accordion-item:first-child {\n  border-top: 0;\n}\n\n.accordion-flush .accordion-item:last-child {\n  border-bottom: 0;\n}\n\n.accordion-flush .accordion-item .accordion-button {\n  border-radius: 0;\n}\n\n.breadcrumb {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n  flex-wrap: wrap;\n  padding: 0.375rem 0.75rem;\n  margin-bottom: 1rem;\n  list-style: none;\n  border-radius: 0.25rem;\n}\n\n.breadcrumb-item + .breadcrumb-item {\n  padding-left: 0.5rem;\n}\n\n.breadcrumb-item + .breadcrumb-item::before {\n  float: left;\n  padding-right: 0.5rem;\n  color: #95a5a6;\n  content: var(--bs-breadcrumb-divider, \"/\") /* rtl: var(--bs-breadcrumb-divider, \"/\") */;\n}\n\n.breadcrumb-item.active {\n  color: #95a5a6;\n}\n\n.pagination {\n  display: -ms-flexbox;\n  display: flex;\n  padding-left: 0;\n  list-style: none;\n}\n\n.page-link {\n  position: relative;\n  display: block;\n  color: #fff;\n  text-decoration: none;\n  background-color: #18bc9c;\n  border: 0 solid transparent;\n  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .page-link {\n    transition: none;\n  }\n}\n\n.page-link:hover {\n  z-index: 2;\n  color: #fff;\n  background-color: #0f7864;\n  border-color: transparent;\n}\n\n.page-link:focus {\n  z-index: 3;\n  color: #13967d;\n  background-color: #ecf0f1;\n  outline: 0;\n  box-shadow: 0 0 0 0.25rem rgba(44, 62, 80, 0.25);\n}\n\n.page-item:not(:first-child) .page-link {\n  margin-left: 0;\n}\n\n.page-item.active .page-link {\n  z-index: 3;\n  color: #fff;\n  background-color: #0f7864;\n  border-color: transparent;\n}\n\n.page-item.disabled .page-link {\n  color: #ecf0f1;\n  pointer-events: none;\n  background-color: #3be6c4;\n  border-color: transparent;\n}\n\n.page-link {\n  padding: 0.375rem 0.75rem;\n}\n\n.page-item:first-child .page-link {\n  border-top-left-radius: 0.25rem;\n  border-bottom-left-radius: 0.25rem;\n}\n\n.page-item:last-child .page-link {\n  border-top-right-radius: 0.25rem;\n  border-bottom-right-radius: 0.25rem;\n}\n\n.pagination-lg .page-link {\n  padding: 0.75rem 1.5rem;\n  font-size: 1.25rem;\n}\n\n.pagination-lg .page-item:first-child .page-link {\n  border-top-left-radius: 0.3rem;\n  border-bottom-left-radius: 0.3rem;\n}\n\n.pagination-lg .page-item:last-child .page-link {\n  border-top-right-radius: 0.3rem;\n  border-bottom-right-radius: 0.3rem;\n}\n\n.pagination-sm .page-link {\n  padding: 0.25rem 0.5rem;\n  font-size: 0.875rem;\n}\n\n.pagination-sm .page-item:first-child .page-link {\n  border-top-left-radius: 0.2rem;\n  border-bottom-left-radius: 0.2rem;\n}\n\n.pagination-sm .page-item:last-child .page-link {\n  border-top-right-radius: 0.2rem;\n  border-bottom-right-radius: 0.2rem;\n}\n\n.badge {\n  display: inline-block;\n  padding: 0.35em 0.65em;\n  font-size: 0.75em;\n  font-weight: 700;\n  line-height: 1;\n  color: #fff;\n  text-align: center;\n  white-space: nowrap;\n  vertical-align: baseline;\n  border-radius: 0.25rem;\n}\n\n.badge:empty {\n  display: none;\n}\n\n.btn .badge {\n  position: relative;\n  top: -1px;\n}\n\n.alert {\n  position: relative;\n  padding: 1rem 1rem;\n  margin-bottom: 1rem;\n  border: 1px solid transparent;\n  border-radius: 0.25rem;\n}\n\n.alert-heading {\n  color: inherit;\n}\n\n.alert-link {\n  font-weight: 700;\n}\n\n.alert-dismissible {\n  padding-right: 3rem;\n}\n\n.alert-dismissible .btn-close {\n  position: absolute;\n  top: 0;\n  right: 0;\n  z-index: 2;\n  padding: 1.25rem 1rem;\n}\n\n.alert-primary {\n  color: #1a2530;\n  background-color: #d5d8dc;\n  border-color: #c0c5cb;\n}\n\n.alert-primary .alert-link {\n  color: #151e26;\n}\n\n.alert-secondary {\n  color: #596364;\n  background-color: #eaeded;\n  border-color: #dfe4e4;\n}\n\n.alert-secondary .alert-link {\n  color: #474f50;\n}\n\n.alert-success {\n  color: #0e715e;\n  background-color: #d1f2eb;\n  border-color: #baebe1;\n}\n\n.alert-success .alert-link {\n  color: #0b5a4b;\n}\n\n.alert-info {\n  color: #1f5b83;\n  background-color: #d6eaf8;\n  border-color: #c2e0f4;\n}\n\n.alert-info .alert-link {\n  color: #194969;\n}\n\n.alert-warning {\n  color: #925e0b;\n  background-color: #fdebd0;\n  border-color: #fbe1b8;\n}\n\n.alert-warning .alert-link {\n  color: #754b09;\n}\n\n.alert-danger {\n  color: #8b2e24;\n  background-color: #fadbd8;\n  border-color: #f8c9c5;\n}\n\n.alert-danger .alert-link {\n  color: #6f251d;\n}\n\n.alert-light {\n  color: #8e9091;\n  background-color: #fbfcfc;\n  border-color: #f9fbfb;\n}\n\n.alert-light .alert-link {\n  color: #727374;\n}\n\n.alert-dark {\n  color: #4a5353;\n  background-color: #e5e8e8;\n  border-color: #d7dcdc;\n}\n\n.alert-dark .alert-link {\n  color: #3b4242;\n}\n\n@-webkit-keyframes progress-bar-stripes {\n  0% {\n    background-position-x: 1rem;\n  }\n}\n\n@keyframes progress-bar-stripes {\n  0% {\n    background-position-x: 1rem;\n  }\n}\n\n.progress {\n  display: -ms-flexbox;\n  display: flex;\n  height: 1rem;\n  overflow: hidden;\n  font-size: 0.75rem;\n  background-color: #ecf0f1;\n  border-radius: 0.25rem;\n}\n\n.progress-bar {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  -ms-flex-pack: center;\n  justify-content: center;\n  overflow: hidden;\n  color: #fff;\n  text-align: center;\n  white-space: nowrap;\n  background-color: #2c3e50;\n  transition: width 0.6s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .progress-bar {\n    transition: none;\n  }\n}\n\n.progress-bar-striped {\n  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-size: 1rem 1rem;\n}\n\n.progress-bar-animated {\n  -webkit-animation: 1s linear infinite progress-bar-stripes;\n  animation: 1s linear infinite progress-bar-stripes;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .progress-bar-animated {\n    -webkit-animation: none;\n    animation: none;\n  }\n}\n\n.list-group {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  padding-left: 0;\n  margin-bottom: 0;\n  border-radius: 0.25rem;\n}\n\n.list-group-numbered {\n  list-style-type: none;\n  counter-reset: section;\n}\n\n.list-group-numbered > li::before {\n  content: counters(section, \".\") \". \";\n  counter-increment: section;\n}\n\n.list-group-item-action {\n  width: 100%;\n  color: #7b8a8b;\n  text-align: inherit;\n}\n\n.list-group-item-action:hover, .list-group-item-action:focus {\n  z-index: 1;\n  color: #7b8a8b;\n  text-decoration: none;\n  background-color: #ecf0f1;\n}\n\n.list-group-item-action:active {\n  color: #212529;\n  background-color: #ecf0f1;\n}\n\n.list-group-item {\n  position: relative;\n  display: block;\n  padding: 0.5rem 1rem;\n  color: #212529;\n  text-decoration: none;\n  background-color: #fff;\n  border: 1px solid rgba(0, 0, 0, 0.125);\n}\n\n.list-group-item:first-child {\n  border-top-left-radius: inherit;\n  border-top-right-radius: inherit;\n}\n\n.list-group-item:last-child {\n  border-bottom-right-radius: inherit;\n  border-bottom-left-radius: inherit;\n}\n\n.list-group-item.disabled, .list-group-item:disabled {\n  color: #95a5a6;\n  pointer-events: none;\n  background-color: #ecf0f1;\n}\n\n.list-group-item.active {\n  z-index: 2;\n  color: #fff;\n  background-color: #2c3e50;\n  border-color: #2c3e50;\n}\n\n.list-group-item + .list-group-item {\n  border-top-width: 0;\n}\n\n.list-group-item + .list-group-item.active {\n  margin-top: -1px;\n  border-top-width: 1px;\n}\n\n.list-group-horizontal {\n  -ms-flex-direction: row;\n  flex-direction: row;\n}\n\n.list-group-horizontal > .list-group-item:first-child {\n  border-bottom-left-radius: 0.25rem;\n  border-top-right-radius: 0;\n}\n\n.list-group-horizontal > .list-group-item:last-child {\n  border-top-right-radius: 0.25rem;\n  border-bottom-left-radius: 0;\n}\n\n.list-group-horizontal > .list-group-item.active {\n  margin-top: 0;\n}\n\n.list-group-horizontal > .list-group-item + .list-group-item {\n  border-top-width: 1px;\n  border-left-width: 0;\n}\n\n.list-group-horizontal > .list-group-item + .list-group-item.active {\n  margin-left: -1px;\n  border-left-width: 1px;\n}\n\n@media (min-width: 576px) {\n  .list-group-horizontal-sm {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .list-group-horizontal-sm > .list-group-item:first-child {\n    border-bottom-left-radius: 0.25rem;\n    border-top-right-radius: 0;\n  }\n  .list-group-horizontal-sm > .list-group-item:last-child {\n    border-top-right-radius: 0.25rem;\n    border-bottom-left-radius: 0;\n  }\n  .list-group-horizontal-sm > .list-group-item.active {\n    margin-top: 0;\n  }\n  .list-group-horizontal-sm > .list-group-item + .list-group-item {\n    border-top-width: 1px;\n    border-left-width: 0;\n  }\n  .list-group-horizontal-sm > .list-group-item + .list-group-item.active {\n    margin-left: -1px;\n    border-left-width: 1px;\n  }\n}\n\n@media (min-width: 768px) {\n  .list-group-horizontal-md {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .list-group-horizontal-md > .list-group-item:first-child {\n    border-bottom-left-radius: 0.25rem;\n    border-top-right-radius: 0;\n  }\n  .list-group-horizontal-md > .list-group-item:last-child {\n    border-top-right-radius: 0.25rem;\n    border-bottom-left-radius: 0;\n  }\n  .list-group-horizontal-md > .list-group-item.active {\n    margin-top: 0;\n  }\n  .list-group-horizontal-md > .list-group-item + .list-group-item {\n    border-top-width: 1px;\n    border-left-width: 0;\n  }\n  .list-group-horizontal-md > .list-group-item + .list-group-item.active {\n    margin-left: -1px;\n    border-left-width: 1px;\n  }\n}\n\n@media (min-width: 992px) {\n  .list-group-horizontal-lg {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .list-group-horizontal-lg > .list-group-item:first-child {\n    border-bottom-left-radius: 0.25rem;\n    border-top-right-radius: 0;\n  }\n  .list-group-horizontal-lg > .list-group-item:last-child {\n    border-top-right-radius: 0.25rem;\n    border-bottom-left-radius: 0;\n  }\n  .list-group-horizontal-lg > .list-group-item.active {\n    margin-top: 0;\n  }\n  .list-group-horizontal-lg > .list-group-item + .list-group-item {\n    border-top-width: 1px;\n    border-left-width: 0;\n  }\n  .list-group-horizontal-lg > .list-group-item + .list-group-item.active {\n    margin-left: -1px;\n    border-left-width: 1px;\n  }\n}\n\n@media (min-width: 1200px) {\n  .list-group-horizontal-xl {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .list-group-horizontal-xl > .list-group-item:first-child {\n    border-bottom-left-radius: 0.25rem;\n    border-top-right-radius: 0;\n  }\n  .list-group-horizontal-xl > .list-group-item:last-child {\n    border-top-right-radius: 0.25rem;\n    border-bottom-left-radius: 0;\n  }\n  .list-group-horizontal-xl > .list-group-item.active {\n    margin-top: 0;\n  }\n  .list-group-horizontal-xl > .list-group-item + .list-group-item {\n    border-top-width: 1px;\n    border-left-width: 0;\n  }\n  .list-group-horizontal-xl > .list-group-item + .list-group-item.active {\n    margin-left: -1px;\n    border-left-width: 1px;\n  }\n}\n\n@media (min-width: 1400px) {\n  .list-group-horizontal-xxl {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .list-group-horizontal-xxl > .list-group-item:first-child {\n    border-bottom-left-radius: 0.25rem;\n    border-top-right-radius: 0;\n  }\n  .list-group-horizontal-xxl > .list-group-item:last-child {\n    border-top-right-radius: 0.25rem;\n    border-bottom-left-radius: 0;\n  }\n  .list-group-horizontal-xxl > .list-group-item.active {\n    margin-top: 0;\n  }\n  .list-group-horizontal-xxl > .list-group-item + .list-group-item {\n    border-top-width: 1px;\n    border-left-width: 0;\n  }\n  .list-group-horizontal-xxl > .list-group-item + .list-group-item.active {\n    margin-left: -1px;\n    border-left-width: 1px;\n  }\n}\n\n.list-group-flush {\n  border-radius: 0;\n}\n\n.list-group-flush > .list-group-item {\n  border-width: 0 0 1px;\n}\n\n.list-group-flush > .list-group-item:last-child {\n  border-bottom-width: 0;\n}\n\n.list-group-item-primary {\n  color: #1a2530;\n  background-color: #d5d8dc;\n}\n\n.list-group-item-primary.list-group-item-action:hover, .list-group-item-primary.list-group-item-action:focus {\n  color: #1a2530;\n  background-color: #c0c2c6;\n}\n\n.list-group-item-primary.list-group-item-action.active {\n  color: #fff;\n  background-color: #1a2530;\n  border-color: #1a2530;\n}\n\n.list-group-item-secondary {\n  color: #596364;\n  background-color: #eaeded;\n}\n\n.list-group-item-secondary.list-group-item-action:hover, .list-group-item-secondary.list-group-item-action:focus {\n  color: #596364;\n  background-color: #d3d5d5;\n}\n\n.list-group-item-secondary.list-group-item-action.active {\n  color: #fff;\n  background-color: #596364;\n  border-color: #596364;\n}\n\n.list-group-item-success {\n  color: #0e715e;\n  background-color: #d1f2eb;\n}\n\n.list-group-item-success.list-group-item-action:hover, .list-group-item-success.list-group-item-action:focus {\n  color: #0e715e;\n  background-color: #bcdad4;\n}\n\n.list-group-item-success.list-group-item-action.active {\n  color: #fff;\n  background-color: #0e715e;\n  border-color: #0e715e;\n}\n\n.list-group-item-info {\n  color: #1f5b83;\n  background-color: #d6eaf8;\n}\n\n.list-group-item-info.list-group-item-action:hover, .list-group-item-info.list-group-item-action:focus {\n  color: #1f5b83;\n  background-color: #c1d3df;\n}\n\n.list-group-item-info.list-group-item-action.active {\n  color: #fff;\n  background-color: #1f5b83;\n  border-color: #1f5b83;\n}\n\n.list-group-item-warning {\n  color: #925e0b;\n  background-color: #fdebd0;\n}\n\n.list-group-item-warning.list-group-item-action:hover, .list-group-item-warning.list-group-item-action:focus {\n  color: #925e0b;\n  background-color: #e4d4bb;\n}\n\n.list-group-item-warning.list-group-item-action.active {\n  color: #fff;\n  background-color: #925e0b;\n  border-color: #925e0b;\n}\n\n.list-group-item-danger {\n  color: #8b2e24;\n  background-color: #fadbd8;\n}\n\n.list-group-item-danger.list-group-item-action:hover, .list-group-item-danger.list-group-item-action:focus {\n  color: #8b2e24;\n  background-color: #e1c5c2;\n}\n\n.list-group-item-danger.list-group-item-action.active {\n  color: #fff;\n  background-color: #8b2e24;\n  border-color: #8b2e24;\n}\n\n.list-group-item-light {\n  color: #8e9091;\n  background-color: #fbfcfc;\n}\n\n.list-group-item-light.list-group-item-action:hover, .list-group-item-light.list-group-item-action:focus {\n  color: #8e9091;\n  background-color: #e2e3e3;\n}\n\n.list-group-item-light.list-group-item-action.active {\n  color: #fff;\n  background-color: #8e9091;\n  border-color: #8e9091;\n}\n\n.list-group-item-dark {\n  color: #4a5353;\n  background-color: #e5e8e8;\n}\n\n.list-group-item-dark.list-group-item-action:hover, .list-group-item-dark.list-group-item-action:focus {\n  color: #4a5353;\n  background-color: #ced1d1;\n}\n\n.list-group-item-dark.list-group-item-action.active {\n  color: #fff;\n  background-color: #4a5353;\n  border-color: #4a5353;\n}\n\n.btn-close {\n  box-sizing: content-box;\n  width: 1em;\n  height: 1em;\n  padding: 0.25em 0.25em;\n  color: #fff;\n  background: transparent url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M.293.293a1 1 0 011.414 0L8 6.586 14.293.293a1 1 0 111.414 1.414L9.414 8l6.293 6.293a1 1 0 01-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 01-1.414-1.414L6.586 8 .293 1.707a1 1 0 010-1.414z'/%3e%3c/svg%3e\") center/1em auto no-repeat;\n  border: 0;\n  border-radius: 0.25rem;\n  opacity: 0.4;\n}\n\n.btn-close:hover {\n  color: #fff;\n  text-decoration: none;\n  opacity: 1;\n}\n\n.btn-close:focus {\n  outline: 0;\n  box-shadow: 0 0 0 0.25rem rgba(44, 62, 80, 0.25);\n  opacity: 1;\n}\n\n.btn-close:disabled, .btn-close.disabled {\n  pointer-events: none;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  user-select: none;\n  opacity: 0.25;\n}\n\n.btn-close-white {\n  -webkit-filter: invert(1) grayscale(100%) brightness(200%);\n  filter: invert(1) grayscale(100%) brightness(200%);\n}\n\n.toast {\n  width: 350px;\n  max-width: 100%;\n  font-size: 0.875rem;\n  pointer-events: auto;\n  background-color: rgba(255, 255, 255, 0.85);\n  background-clip: padding-box;\n  border: 1px solid rgba(0, 0, 0, 0.1);\n  box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15);\n  border-radius: 0.25rem;\n}\n\n.toast.showing {\n  opacity: 0;\n}\n\n.toast:not(.show) {\n  display: none;\n}\n\n.toast-container {\n  width: -webkit-max-content;\n  width: -moz-max-content;\n  width: max-content;\n  max-width: 100%;\n  pointer-events: none;\n}\n\n.toast-container > :not(:last-child) {\n  margin-bottom: 0.75rem;\n}\n\n.toast-header {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-align: center;\n  align-items: center;\n  padding: 0.5rem 0.75rem;\n  color: #95a5a6;\n  background-color: rgba(255, 255, 255, 0.85);\n  background-clip: padding-box;\n  border-bottom: 1px solid rgba(0, 0, 0, 0.05);\n  border-top-left-radius: calc(0.25rem - 1px);\n  border-top-right-radius: calc(0.25rem - 1px);\n}\n\n.toast-header .btn-close {\n  margin-right: -0.375rem;\n  margin-left: 0.75rem;\n}\n\n.toast-body {\n  padding: 0.75rem;\n  word-wrap: break-word;\n}\n\n.modal {\n  position: fixed;\n  top: 0;\n  left: 0;\n  z-index: 1055;\n  display: none;\n  width: 100%;\n  height: 100%;\n  overflow-x: hidden;\n  overflow-y: auto;\n  outline: 0;\n}\n\n.modal-dialog {\n  position: relative;\n  width: auto;\n  margin: 0.5rem;\n  pointer-events: none;\n}\n\n.modal.fade .modal-dialog {\n  transition: -webkit-transform 0.3s ease-out;\n  transition: transform 0.3s ease-out;\n  transition: transform 0.3s ease-out, -webkit-transform 0.3s ease-out;\n  -webkit-transform: translate(0, -50px);\n  transform: translate(0, -50px);\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .modal.fade .modal-dialog {\n    transition: none;\n  }\n}\n\n.modal.show .modal-dialog {\n  -webkit-transform: none;\n  transform: none;\n}\n\n.modal.modal-static .modal-dialog {\n  -webkit-transform: scale(1.02);\n  transform: scale(1.02);\n}\n\n.modal-dialog-scrollable {\n  height: calc(100% - 1rem);\n}\n\n.modal-dialog-scrollable .modal-content {\n  max-height: 100%;\n  overflow: hidden;\n}\n\n.modal-dialog-scrollable .modal-body {\n  overflow-y: auto;\n}\n\n.modal-dialog-centered {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-align: center;\n  align-items: center;\n  min-height: calc(100% - 1rem);\n}\n\n.modal-content {\n  position: relative;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  width: 100%;\n  pointer-events: auto;\n  background-color: #fff;\n  background-clip: padding-box;\n  border: 1px solid rgba(0, 0, 0, 0.2);\n  border-radius: 0.3rem;\n  outline: 0;\n}\n\n.modal-backdrop {\n  position: fixed;\n  top: 0;\n  left: 0;\n  z-index: 1050;\n  width: 100vw;\n  height: 100vh;\n  background-color: #000;\n}\n\n.modal-backdrop.fade {\n  opacity: 0;\n}\n\n.modal-backdrop.show {\n  opacity: 0.5;\n}\n\n.modal-header {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-negative: 0;\n  flex-shrink: 0;\n  -ms-flex-align: center;\n  align-items: center;\n  -ms-flex-pack: justify;\n  justify-content: space-between;\n  padding: 1rem 1rem;\n  border-bottom: 1px solid #dee2e6;\n  border-top-left-radius: calc(0.3rem - 1px);\n  border-top-right-radius: calc(0.3rem - 1px);\n}\n\n.modal-header .btn-close {\n  padding: 0.5rem 0.5rem;\n  margin: -0.5rem -0.5rem -0.5rem auto;\n}\n\n.modal-title {\n  margin-bottom: 0;\n  line-height: 1.5;\n}\n\n.modal-body {\n  position: relative;\n  -ms-flex: 1 1 auto;\n  flex: 1 1 auto;\n  padding: 1rem;\n}\n\n.modal-footer {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n  flex-wrap: wrap;\n  -ms-flex-negative: 0;\n  flex-shrink: 0;\n  -ms-flex-align: center;\n  align-items: center;\n  -ms-flex-pack: end;\n  justify-content: flex-end;\n  padding: 0.75rem;\n  border-top: 1px solid #dee2e6;\n  border-bottom-right-radius: calc(0.3rem - 1px);\n  border-bottom-left-radius: calc(0.3rem - 1px);\n}\n\n.modal-footer > * {\n  margin: 0.25rem;\n}\n\n@media (min-width: 576px) {\n  .modal-dialog {\n    max-width: 500px;\n    margin: 1.75rem auto;\n  }\n  .modal-dialog-scrollable {\n    height: calc(100% - 3.5rem);\n  }\n  .modal-dialog-centered {\n    min-height: calc(100% - 3.5rem);\n  }\n  .modal-sm {\n    max-width: 300px;\n  }\n}\n\n@media (min-width: 992px) {\n  .modal-lg,\n  .modal-xl {\n    max-width: 800px;\n  }\n}\n\n@media (min-width: 1200px) {\n  .modal-xl {\n    max-width: 1140px;\n  }\n}\n\n.modal-fullscreen {\n  width: 100vw;\n  max-width: none;\n  height: 100%;\n  margin: 0;\n}\n\n.modal-fullscreen .modal-content {\n  height: 100%;\n  border: 0;\n  border-radius: 0;\n}\n\n.modal-fullscreen .modal-header {\n  border-radius: 0;\n}\n\n.modal-fullscreen .modal-body {\n  overflow-y: auto;\n}\n\n.modal-fullscreen .modal-footer {\n  border-radius: 0;\n}\n\n@media (max-width: 575.98px) {\n  .modal-fullscreen-sm-down {\n    width: 100vw;\n    max-width: none;\n    height: 100%;\n    margin: 0;\n  }\n  .modal-fullscreen-sm-down .modal-content {\n    height: 100%;\n    border: 0;\n    border-radius: 0;\n  }\n  .modal-fullscreen-sm-down .modal-header {\n    border-radius: 0;\n  }\n  .modal-fullscreen-sm-down .modal-body {\n    overflow-y: auto;\n  }\n  .modal-fullscreen-sm-down .modal-footer {\n    border-radius: 0;\n  }\n}\n\n@media (max-width: 767.98px) {\n  .modal-fullscreen-md-down {\n    width: 100vw;\n    max-width: none;\n    height: 100%;\n    margin: 0;\n  }\n  .modal-fullscreen-md-down .modal-content {\n    height: 100%;\n    border: 0;\n    border-radius: 0;\n  }\n  .modal-fullscreen-md-down .modal-header {\n    border-radius: 0;\n  }\n  .modal-fullscreen-md-down .modal-body {\n    overflow-y: auto;\n  }\n  .modal-fullscreen-md-down .modal-footer {\n    border-radius: 0;\n  }\n}\n\n@media (max-width: 991.98px) {\n  .modal-fullscreen-lg-down {\n    width: 100vw;\n    max-width: none;\n    height: 100%;\n    margin: 0;\n  }\n  .modal-fullscreen-lg-down .modal-content {\n    height: 100%;\n    border: 0;\n    border-radius: 0;\n  }\n  .modal-fullscreen-lg-down .modal-header {\n    border-radius: 0;\n  }\n  .modal-fullscreen-lg-down .modal-body {\n    overflow-y: auto;\n  }\n  .modal-fullscreen-lg-down .modal-footer {\n    border-radius: 0;\n  }\n}\n\n@media (max-width: 1199.98px) {\n  .modal-fullscreen-xl-down {\n    width: 100vw;\n    max-width: none;\n    height: 100%;\n    margin: 0;\n  }\n  .modal-fullscreen-xl-down .modal-content {\n    height: 100%;\n    border: 0;\n    border-radius: 0;\n  }\n  .modal-fullscreen-xl-down .modal-header {\n    border-radius: 0;\n  }\n  .modal-fullscreen-xl-down .modal-body {\n    overflow-y: auto;\n  }\n  .modal-fullscreen-xl-down .modal-footer {\n    border-radius: 0;\n  }\n}\n\n@media (max-width: 1399.98px) {\n  .modal-fullscreen-xxl-down {\n    width: 100vw;\n    max-width: none;\n    height: 100%;\n    margin: 0;\n  }\n  .modal-fullscreen-xxl-down .modal-content {\n    height: 100%;\n    border: 0;\n    border-radius: 0;\n  }\n  .modal-fullscreen-xxl-down .modal-header {\n    border-radius: 0;\n  }\n  .modal-fullscreen-xxl-down .modal-body {\n    overflow-y: auto;\n  }\n  .modal-fullscreen-xxl-down .modal-footer {\n    border-radius: 0;\n  }\n}\n\n.tooltip {\n  position: absolute;\n  z-index: 1080;\n  display: block;\n  margin: 0;\n  font-family: var(--bs-font-sans-serif);\n  font-style: normal;\n  font-weight: 400;\n  line-height: 1.5;\n  text-align: left;\n  text-align: start;\n  text-decoration: none;\n  text-shadow: none;\n  text-transform: none;\n  letter-spacing: normal;\n  word-break: normal;\n  word-spacing: normal;\n  white-space: normal;\n  line-break: auto;\n  font-size: 0.875rem;\n  word-wrap: break-word;\n  opacity: 0;\n}\n\n.tooltip.show {\n  opacity: 0.9;\n}\n\n.tooltip .tooltip-arrow {\n  position: absolute;\n  display: block;\n  width: 0.8rem;\n  height: 0.4rem;\n}\n\n.tooltip .tooltip-arrow::before {\n  position: absolute;\n  content: \"\";\n  border-color: transparent;\n  border-style: solid;\n}\n\n.bs-tooltip-top, .bs-tooltip-auto[data-popper-placement^=\"top\"] {\n  padding: 0.4rem 0;\n}\n\n.bs-tooltip-top .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=\"top\"] .tooltip-arrow {\n  bottom: 0;\n}\n\n.bs-tooltip-top .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=\"top\"] .tooltip-arrow::before {\n  top: -1px;\n  border-width: 0.4rem 0.4rem 0;\n  border-top-color: #000;\n}\n\n.bs-tooltip-end, .bs-tooltip-auto[data-popper-placement^=\"right\"] {\n  padding: 0 0.4rem;\n}\n\n.bs-tooltip-end .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=\"right\"] .tooltip-arrow {\n  left: 0;\n  width: 0.4rem;\n  height: 0.8rem;\n}\n\n.bs-tooltip-end .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=\"right\"] .tooltip-arrow::before {\n  right: -1px;\n  border-width: 0.4rem 0.4rem 0.4rem 0;\n  border-right-color: #000;\n}\n\n.bs-tooltip-bottom, .bs-tooltip-auto[data-popper-placement^=\"bottom\"] {\n  padding: 0.4rem 0;\n}\n\n.bs-tooltip-bottom .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=\"bottom\"] .tooltip-arrow {\n  top: 0;\n}\n\n.bs-tooltip-bottom .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=\"bottom\"] .tooltip-arrow::before {\n  bottom: -1px;\n  border-width: 0 0.4rem 0.4rem;\n  border-bottom-color: #000;\n}\n\n.bs-tooltip-start, .bs-tooltip-auto[data-popper-placement^=\"left\"] {\n  padding: 0 0.4rem;\n}\n\n.bs-tooltip-start .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=\"left\"] .tooltip-arrow {\n  right: 0;\n  width: 0.4rem;\n  height: 0.8rem;\n}\n\n.bs-tooltip-start .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=\"left\"] .tooltip-arrow::before {\n  left: -1px;\n  border-width: 0.4rem 0 0.4rem 0.4rem;\n  border-left-color: #000;\n}\n\n.tooltip-inner {\n  max-width: 200px;\n  padding: 0.25rem 0.5rem;\n  color: #fff;\n  text-align: center;\n  background-color: #000;\n  border-radius: 0.25rem;\n}\n\n.popover {\n  position: absolute;\n  top: 0;\n  left: 0 /* rtl:ignore */;\n  z-index: 1070;\n  display: block;\n  max-width: 276px;\n  font-family: var(--bs-font-sans-serif);\n  font-style: normal;\n  font-weight: 400;\n  line-height: 1.5;\n  text-align: left;\n  text-align: start;\n  text-decoration: none;\n  text-shadow: none;\n  text-transform: none;\n  letter-spacing: normal;\n  word-break: normal;\n  word-spacing: normal;\n  white-space: normal;\n  line-break: auto;\n  font-size: 0.875rem;\n  word-wrap: break-word;\n  background-color: #fff;\n  background-clip: padding-box;\n  border: 1px solid rgba(0, 0, 0, 0.2);\n  border-radius: 0.3rem;\n}\n\n.popover .popover-arrow {\n  position: absolute;\n  display: block;\n  width: 1rem;\n  height: 0.5rem;\n}\n\n.popover .popover-arrow::before, .popover .popover-arrow::after {\n  position: absolute;\n  display: block;\n  content: \"\";\n  border-color: transparent;\n  border-style: solid;\n}\n\n.bs-popover-top > .popover-arrow, .bs-popover-auto[data-popper-placement^=\"top\"] > .popover-arrow {\n  bottom: calc(-0.5rem - 1px);\n}\n\n.bs-popover-top > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=\"top\"] > .popover-arrow::before {\n  bottom: 0;\n  border-width: 0.5rem 0.5rem 0;\n  border-top-color: rgba(0, 0, 0, 0.25);\n}\n\n.bs-popover-top > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=\"top\"] > .popover-arrow::after {\n  bottom: 1px;\n  border-width: 0.5rem 0.5rem 0;\n  border-top-color: #fff;\n}\n\n.bs-popover-end > .popover-arrow, .bs-popover-auto[data-popper-placement^=\"right\"] > .popover-arrow {\n  left: calc(-0.5rem - 1px);\n  width: 0.5rem;\n  height: 1rem;\n}\n\n.bs-popover-end > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=\"right\"] > .popover-arrow::before {\n  left: 0;\n  border-width: 0.5rem 0.5rem 0.5rem 0;\n  border-right-color: rgba(0, 0, 0, 0.25);\n}\n\n.bs-popover-end > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=\"right\"] > .popover-arrow::after {\n  left: 1px;\n  border-width: 0.5rem 0.5rem 0.5rem 0;\n  border-right-color: #fff;\n}\n\n.bs-popover-bottom > .popover-arrow, .bs-popover-auto[data-popper-placement^=\"bottom\"] > .popover-arrow {\n  top: calc(-0.5rem - 1px);\n}\n\n.bs-popover-bottom > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=\"bottom\"] > .popover-arrow::before {\n  top: 0;\n  border-width: 0 0.5rem 0.5rem 0.5rem;\n  border-bottom-color: rgba(0, 0, 0, 0.25);\n}\n\n.bs-popover-bottom > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=\"bottom\"] > .popover-arrow::after {\n  top: 1px;\n  border-width: 0 0.5rem 0.5rem 0.5rem;\n  border-bottom-color: #fff;\n}\n\n.bs-popover-bottom .popover-header::before, .bs-popover-auto[data-popper-placement^=\"bottom\"] .popover-header::before {\n  position: absolute;\n  top: 0;\n  left: 50%;\n  display: block;\n  width: 1rem;\n  margin-left: -0.5rem;\n  content: \"\";\n  border-bottom: 1px solid #f0f0f0;\n}\n\n.bs-popover-start > .popover-arrow, .bs-popover-auto[data-popper-placement^=\"left\"] > .popover-arrow {\n  right: calc(-0.5rem - 1px);\n  width: 0.5rem;\n  height: 1rem;\n}\n\n.bs-popover-start > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=\"left\"] > .popover-arrow::before {\n  right: 0;\n  border-width: 0.5rem 0 0.5rem 0.5rem;\n  border-left-color: rgba(0, 0, 0, 0.25);\n}\n\n.bs-popover-start > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=\"left\"] > .popover-arrow::after {\n  right: 1px;\n  border-width: 0.5rem 0 0.5rem 0.5rem;\n  border-left-color: #fff;\n}\n\n.popover-header {\n  padding: 0.5rem 1rem;\n  margin-bottom: 0;\n  font-size: 1rem;\n  background-color: #f0f0f0;\n  border-bottom: 1px solid rgba(0, 0, 0, 0.2);\n  border-top-left-radius: calc(0.3rem - 1px);\n  border-top-right-radius: calc(0.3rem - 1px);\n}\n\n.popover-header:empty {\n  display: none;\n}\n\n.popover-body {\n  padding: 1rem 1rem;\n  color: #212529;\n}\n\n.carousel {\n  position: relative;\n}\n\n.carousel.pointer-event {\n  -ms-touch-action: pan-y;\n  touch-action: pan-y;\n}\n\n.carousel-inner {\n  position: relative;\n  width: 100%;\n  overflow: hidden;\n}\n\n.carousel-inner::after {\n  display: block;\n  clear: both;\n  content: \"\";\n}\n\n.carousel-item {\n  position: relative;\n  display: none;\n  float: left;\n  width: 100%;\n  margin-right: -100%;\n  -webkit-backface-visibility: hidden;\n  backface-visibility: hidden;\n  transition: -webkit-transform 0.6s ease-in-out;\n  transition: transform 0.6s ease-in-out;\n  transition: transform 0.6s ease-in-out, -webkit-transform 0.6s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .carousel-item {\n    transition: none;\n  }\n}\n\n.carousel-item.active,\n.carousel-item-next,\n.carousel-item-prev {\n  display: block;\n}\n\n/* rtl:begin:ignore */\n.carousel-item-next:not(.carousel-item-start),\n.active.carousel-item-end {\n  -webkit-transform: translateX(100%);\n  transform: translateX(100%);\n}\n\n.carousel-item-prev:not(.carousel-item-end),\n.active.carousel-item-start {\n  -webkit-transform: translateX(-100%);\n  transform: translateX(-100%);\n}\n\n/* rtl:end:ignore */\n.carousel-fade .carousel-item {\n  opacity: 0;\n  transition-property: opacity;\n  -webkit-transform: none;\n  transform: none;\n}\n\n.carousel-fade .carousel-item.active,\n.carousel-fade .carousel-item-next.carousel-item-start,\n.carousel-fade .carousel-item-prev.carousel-item-end {\n  z-index: 1;\n  opacity: 1;\n}\n\n.carousel-fade .active.carousel-item-start,\n.carousel-fade .active.carousel-item-end {\n  z-index: 0;\n  opacity: 0;\n  transition: opacity 0s 0.6s;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .carousel-fade .active.carousel-item-start,\n  .carousel-fade .active.carousel-item-end {\n    transition: none;\n  }\n}\n\n.carousel-control-prev,\n.carousel-control-next {\n  position: absolute;\n  top: 0;\n  bottom: 0;\n  z-index: 1;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-align: center;\n  align-items: center;\n  -ms-flex-pack: center;\n  justify-content: center;\n  width: 15%;\n  padding: 0;\n  color: #fff;\n  text-align: center;\n  background: none;\n  border: 0;\n  opacity: 0.5;\n  transition: opacity 0.15s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .carousel-control-prev,\n  .carousel-control-next {\n    transition: none;\n  }\n}\n\n.carousel-control-prev:hover, .carousel-control-prev:focus,\n.carousel-control-next:hover,\n.carousel-control-next:focus {\n  color: #fff;\n  text-decoration: none;\n  outline: 0;\n  opacity: 0.9;\n}\n\n.carousel-control-prev {\n  left: 0;\n}\n\n.carousel-control-next {\n  right: 0;\n}\n\n.carousel-control-prev-icon,\n.carousel-control-next-icon {\n  display: inline-block;\n  width: 2rem;\n  height: 2rem;\n  background-repeat: no-repeat;\n  background-position: 50%;\n  background-size: 100% 100%;\n}\n\n/* rtl:options: {\n  \"autoRename\": true,\n  \"stringMap\":[ {\n    \"name\"    : \"prev-next\",\n    \"search\"  : \"prev\",\n    \"replace\" : \"next\"\n  } ]\n} */\n.carousel-control-prev-icon {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0z'/%3e%3c/svg%3e\");\n}\n\n.carousel-control-next-icon {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e\");\n}\n\n.carousel-indicators {\n  position: absolute;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 2;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-pack: center;\n  justify-content: center;\n  padding: 0;\n  margin-right: 15%;\n  margin-bottom: 1rem;\n  margin-left: 15%;\n  list-style: none;\n}\n\n.carousel-indicators [data-bs-target] {\n  box-sizing: content-box;\n  -ms-flex: 0 1 auto;\n  flex: 0 1 auto;\n  width: 30px;\n  height: 3px;\n  padding: 0;\n  margin-right: 3px;\n  margin-left: 3px;\n  text-indent: -999px;\n  cursor: pointer;\n  background-color: #fff;\n  background-clip: padding-box;\n  border: 0;\n  border-top: 10px solid transparent;\n  border-bottom: 10px solid transparent;\n  opacity: 0.5;\n  transition: opacity 0.6s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .carousel-indicators [data-bs-target] {\n    transition: none;\n  }\n}\n\n.carousel-indicators .active {\n  opacity: 1;\n}\n\n.carousel-caption {\n  position: absolute;\n  right: 15%;\n  bottom: 1.25rem;\n  left: 15%;\n  padding-top: 1.25rem;\n  padding-bottom: 1.25rem;\n  color: #fff;\n  text-align: center;\n}\n\n.carousel-dark .carousel-control-prev-icon,\n.carousel-dark .carousel-control-next-icon {\n  -webkit-filter: invert(1) grayscale(100);\n  filter: invert(1) grayscale(100);\n}\n\n.carousel-dark .carousel-indicators [data-bs-target] {\n  background-color: #000;\n}\n\n.carousel-dark .carousel-caption {\n  color: #000;\n}\n\n@-webkit-keyframes spinner-border {\n  to {\n    -webkit-transform: rotate(360deg) /* rtl:ignore */;\n    transform: rotate(360deg) /* rtl:ignore */;\n  }\n}\n\n@keyframes spinner-border {\n  to {\n    -webkit-transform: rotate(360deg) /* rtl:ignore */;\n    transform: rotate(360deg) /* rtl:ignore */;\n  }\n}\n\n.spinner-border {\n  display: inline-block;\n  width: 2rem;\n  height: 2rem;\n  vertical-align: -0.125em;\n  border: 0.25em solid currentColor;\n  border-right-color: transparent;\n  border-radius: 50%;\n  -webkit-animation: 0.75s linear infinite spinner-border;\n  animation: 0.75s linear infinite spinner-border;\n}\n\n.spinner-border-sm {\n  width: 1rem;\n  height: 1rem;\n  border-width: 0.2em;\n}\n\n@-webkit-keyframes spinner-grow {\n  0% {\n    -webkit-transform: scale(0);\n    transform: scale(0);\n  }\n  50% {\n    opacity: 1;\n    -webkit-transform: none;\n    transform: none;\n  }\n}\n\n@keyframes spinner-grow {\n  0% {\n    -webkit-transform: scale(0);\n    transform: scale(0);\n  }\n  50% {\n    opacity: 1;\n    -webkit-transform: none;\n    transform: none;\n  }\n}\n\n.spinner-grow {\n  display: inline-block;\n  width: 2rem;\n  height: 2rem;\n  vertical-align: -0.125em;\n  background-color: currentColor;\n  border-radius: 50%;\n  opacity: 0;\n  -webkit-animation: 0.75s linear infinite spinner-grow;\n  animation: 0.75s linear infinite spinner-grow;\n}\n\n.spinner-grow-sm {\n  width: 1rem;\n  height: 1rem;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .spinner-border,\n  .spinner-grow {\n    -webkit-animation-duration: 1.5s;\n    animation-duration: 1.5s;\n  }\n}\n\n.offcanvas {\n  position: fixed;\n  bottom: 0;\n  z-index: 1045;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  max-width: 100%;\n  visibility: hidden;\n  background-color: #fff;\n  background-clip: padding-box;\n  outline: 0;\n  transition: -webkit-transform 0.3s ease-in-out;\n  transition: transform 0.3s ease-in-out;\n  transition: transform 0.3s ease-in-out, -webkit-transform 0.3s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .offcanvas {\n    transition: none;\n  }\n}\n\n.offcanvas-backdrop {\n  position: fixed;\n  top: 0;\n  left: 0;\n  z-index: 1040;\n  width: 100vw;\n  height: 100vh;\n  background-color: #000;\n}\n\n.offcanvas-backdrop.fade {\n  opacity: 0;\n}\n\n.offcanvas-backdrop.show {\n  opacity: 0.5;\n}\n\n.offcanvas-header {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-align: center;\n  align-items: center;\n  -ms-flex-pack: justify;\n  justify-content: space-between;\n  padding: 1rem 1rem;\n}\n\n.offcanvas-header .btn-close {\n  padding: 0.5rem 0.5rem;\n  margin-top: -0.5rem;\n  margin-right: -0.5rem;\n  margin-bottom: -0.5rem;\n}\n\n.offcanvas-title {\n  margin-bottom: 0;\n  line-height: 1.5;\n}\n\n.offcanvas-body {\n  -ms-flex-positive: 1;\n  flex-grow: 1;\n  padding: 1rem 1rem;\n  overflow-y: auto;\n}\n\n.offcanvas-start {\n  top: 0;\n  left: 0;\n  width: 400px;\n  border-right: 1px solid rgba(0, 0, 0, 0.2);\n  -webkit-transform: translateX(-100%);\n  transform: translateX(-100%);\n}\n\n.offcanvas-end {\n  top: 0;\n  right: 0;\n  width: 400px;\n  border-left: 1px solid rgba(0, 0, 0, 0.2);\n  -webkit-transform: translateX(100%);\n  transform: translateX(100%);\n}\n\n.offcanvas-top {\n  top: 0;\n  right: 0;\n  left: 0;\n  height: 30vh;\n  max-height: 100%;\n  border-bottom: 1px solid rgba(0, 0, 0, 0.2);\n  -webkit-transform: translateY(-100%);\n  transform: translateY(-100%);\n}\n\n.offcanvas-bottom {\n  right: 0;\n  left: 0;\n  height: 30vh;\n  max-height: 100%;\n  border-top: 1px solid rgba(0, 0, 0, 0.2);\n  -webkit-transform: translateY(100%);\n  transform: translateY(100%);\n}\n\n.offcanvas.show {\n  -webkit-transform: none;\n  transform: none;\n}\n\n.placeholder {\n  display: inline-block;\n  min-height: 1em;\n  vertical-align: middle;\n  cursor: wait;\n  background-color: currentColor;\n  opacity: 0.5;\n}\n\n.placeholder.btn::before {\n  display: inline-block;\n  content: \"\";\n}\n\n.placeholder-xs {\n  min-height: .6em;\n}\n\n.placeholder-sm {\n  min-height: .8em;\n}\n\n.placeholder-lg {\n  min-height: 1.2em;\n}\n\n.placeholder-glow .placeholder {\n  -webkit-animation: placeholder-glow 2s ease-in-out infinite;\n  animation: placeholder-glow 2s ease-in-out infinite;\n}\n\n@-webkit-keyframes placeholder-glow {\n  50% {\n    opacity: 0.2;\n  }\n}\n\n@keyframes placeholder-glow {\n  50% {\n    opacity: 0.2;\n  }\n}\n\n.placeholder-wave {\n  -webkit-mask-image: linear-gradient(130deg, #000 55%, rgba(0, 0, 0, 0.8) 75%, #000 95%);\n  mask-image: linear-gradient(130deg, #000 55%, rgba(0, 0, 0, 0.8) 75%, #000 95%);\n  -webkit-mask-size: 200% 100%;\n  mask-size: 200% 100%;\n  -webkit-animation: placeholder-wave 2s linear infinite;\n  animation: placeholder-wave 2s linear infinite;\n}\n\n@-webkit-keyframes placeholder-wave {\n  100% {\n    -webkit-mask-position: -200% 0%;\n    mask-position: -200% 0%;\n  }\n}\n\n@keyframes placeholder-wave {\n  100% {\n    -webkit-mask-position: -200% 0%;\n    mask-position: -200% 0%;\n  }\n}\n\n.clearfix::after {\n  display: block;\n  clear: both;\n  content: \"\";\n}\n\n.link-primary {\n  color: #2c3e50;\n}\n\n.link-primary:hover, .link-primary:focus {\n  color: #233240;\n}\n\n.link-secondary {\n  color: #95a5a6;\n}\n\n.link-secondary:hover, .link-secondary:focus {\n  color: #778485;\n}\n\n.link-success {\n  color: #18bc9c;\n}\n\n.link-success:hover, .link-success:focus {\n  color: #13967d;\n}\n\n.link-info {\n  color: #3498db;\n}\n\n.link-info:hover, .link-info:focus {\n  color: #2a7aaf;\n}\n\n.link-warning {\n  color: #f39c12;\n}\n\n.link-warning:hover, .link-warning:focus {\n  color: #c27d0e;\n}\n\n.link-danger {\n  color: #e74c3c;\n}\n\n.link-danger:hover, .link-danger:focus {\n  color: #b93d30;\n}\n\n.link-light {\n  color: #ecf0f1;\n}\n\n.link-light:hover, .link-light:focus {\n  color: #f0f3f4;\n}\n\n.link-dark {\n  color: #7b8a8b;\n}\n\n.link-dark:hover, .link-dark:focus {\n  color: #626e6f;\n}\n\n.ratio {\n  position: relative;\n  width: 100%;\n}\n\n.ratio::before {\n  display: block;\n  padding-top: var(--bs-aspect-ratio);\n  content: \"\";\n}\n\n.ratio > * {\n  position: absolute;\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n}\n\n.ratio-1x1 {\n  --bs-aspect-ratio: 100%;\n}\n\n.ratio-4x3 {\n  --bs-aspect-ratio: calc(3 / 4 * 100%);\n}\n\n.ratio-16x9 {\n  --bs-aspect-ratio: calc(9 / 16 * 100%);\n}\n\n.ratio-21x9 {\n  --bs-aspect-ratio: calc(9 / 21 * 100%);\n}\n\n.fixed-top {\n  position: fixed;\n  top: 0;\n  right: 0;\n  left: 0;\n  z-index: 1030;\n}\n\n.fixed-bottom {\n  position: fixed;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 1030;\n}\n\n.sticky-top {\n  position: -webkit-sticky;\n  position: sticky;\n  top: 0;\n  z-index: 1020;\n}\n\n@media (min-width: 576px) {\n  .sticky-sm-top {\n    position: -webkit-sticky;\n    position: sticky;\n    top: 0;\n    z-index: 1020;\n  }\n}\n\n@media (min-width: 768px) {\n  .sticky-md-top {\n    position: -webkit-sticky;\n    position: sticky;\n    top: 0;\n    z-index: 1020;\n  }\n}\n\n@media (min-width: 992px) {\n  .sticky-lg-top {\n    position: -webkit-sticky;\n    position: sticky;\n    top: 0;\n    z-index: 1020;\n  }\n}\n\n@media (min-width: 1200px) {\n  .sticky-xl-top {\n    position: -webkit-sticky;\n    position: sticky;\n    top: 0;\n    z-index: 1020;\n  }\n}\n\n@media (min-width: 1400px) {\n  .sticky-xxl-top {\n    position: -webkit-sticky;\n    position: sticky;\n    top: 0;\n    z-index: 1020;\n  }\n}\n\n.hstack {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-direction: row;\n  flex-direction: row;\n  -ms-flex-align: center;\n  align-items: center;\n  -ms-flex-item-align: stretch;\n  align-self: stretch;\n}\n\n.vstack {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex: 1 1 auto;\n  flex: 1 1 auto;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  -ms-flex-item-align: stretch;\n  align-self: stretch;\n}\n\n.visually-hidden,\n.visually-hidden-focusable:not(:focus):not(:focus-within) {\n  position: absolute !important;\n  width: 1px !important;\n  height: 1px !important;\n  padding: 0 !important;\n  margin: -1px !important;\n  overflow: hidden !important;\n  clip: rect(0, 0, 0, 0) !important;\n  white-space: nowrap !important;\n  border: 0 !important;\n}\n\n.stretched-link::after {\n  position: absolute;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 1;\n  content: \"\";\n}\n\n.text-truncate {\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n}\n\n.vr {\n  display: inline-block;\n  -ms-flex-item-align: stretch;\n  align-self: stretch;\n  width: 1px;\n  min-height: 1em;\n  background-color: currentColor;\n  opacity: 0.25;\n}\n\n.align-baseline {\n  vertical-align: baseline !important;\n}\n\n.align-top {\n  vertical-align: top !important;\n}\n\n.align-middle {\n  vertical-align: middle !important;\n}\n\n.align-bottom {\n  vertical-align: bottom !important;\n}\n\n.align-text-bottom {\n  vertical-align: text-bottom !important;\n}\n\n.align-text-top {\n  vertical-align: text-top !important;\n}\n\n.float-start {\n  float: left !important;\n}\n\n.float-end {\n  float: right !important;\n}\n\n.float-none {\n  float: none !important;\n}\n\n.opacity-0 {\n  opacity: 0 !important;\n}\n\n.opacity-25 {\n  opacity: 0.25 !important;\n}\n\n.opacity-50 {\n  opacity: 0.5 !important;\n}\n\n.opacity-75 {\n  opacity: 0.75 !important;\n}\n\n.opacity-100 {\n  opacity: 1 !important;\n}\n\n.overflow-auto {\n  overflow: auto !important;\n}\n\n.overflow-hidden {\n  overflow: hidden !important;\n}\n\n.overflow-visible {\n  overflow: visible !important;\n}\n\n.overflow-scroll {\n  overflow: scroll !important;\n}\n\n.d-inline {\n  display: inline !important;\n}\n\n.d-inline-block {\n  display: inline-block !important;\n}\n\n.d-block {\n  display: block !important;\n}\n\n.d-grid {\n  display: grid !important;\n}\n\n.d-table {\n  display: table !important;\n}\n\n.d-table-row {\n  display: table-row !important;\n}\n\n.d-table-cell {\n  display: table-cell !important;\n}\n\n.d-flex {\n  display: -ms-flexbox !important;\n  display: flex !important;\n}\n\n.d-inline-flex {\n  display: -ms-inline-flexbox !important;\n  display: inline-flex !important;\n}\n\n.d-none {\n  display: none !important;\n}\n\n.shadow {\n  box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15) !important;\n}\n\n.shadow-sm {\n  box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075) !important;\n}\n\n.shadow-lg {\n  box-shadow: 0 1rem 3rem rgba(0, 0, 0, 0.175) !important;\n}\n\n.shadow-none {\n  box-shadow: none !important;\n}\n\n.position-static {\n  position: static !important;\n}\n\n.position-relative {\n  position: relative !important;\n}\n\n.position-absolute {\n  position: absolute !important;\n}\n\n.position-fixed {\n  position: fixed !important;\n}\n\n.position-sticky {\n  position: -webkit-sticky !important;\n  position: sticky !important;\n}\n\n.top-0 {\n  top: 0 !important;\n}\n\n.top-50 {\n  top: 50% !important;\n}\n\n.top-100 {\n  top: 100% !important;\n}\n\n.bottom-0 {\n  bottom: 0 !important;\n}\n\n.bottom-50 {\n  bottom: 50% !important;\n}\n\n.bottom-100 {\n  bottom: 100% !important;\n}\n\n.start-0 {\n  left: 0 !important;\n}\n\n.start-50 {\n  left: 50% !important;\n}\n\n.start-100 {\n  left: 100% !important;\n}\n\n.end-0 {\n  right: 0 !important;\n}\n\n.end-50 {\n  right: 50% !important;\n}\n\n.end-100 {\n  right: 100% !important;\n}\n\n.translate-middle {\n  -webkit-transform: translate(-50%, -50%) !important;\n  transform: translate(-50%, -50%) !important;\n}\n\n.translate-middle-x {\n  -webkit-transform: translateX(-50%) !important;\n  transform: translateX(-50%) !important;\n}\n\n.translate-middle-y {\n  -webkit-transform: translateY(-50%) !important;\n  transform: translateY(-50%) !important;\n}\n\n.border {\n  border: 1px solid #dee2e6 !important;\n}\n\n.border-0 {\n  border: 0 !important;\n}\n\n.border-top {\n  border-top: 1px solid #dee2e6 !important;\n}\n\n.border-top-0 {\n  border-top: 0 !important;\n}\n\n.border-end {\n  border-right: 1px solid #dee2e6 !important;\n}\n\n.border-end-0 {\n  border-right: 0 !important;\n}\n\n.border-bottom {\n  border-bottom: 1px solid #dee2e6 !important;\n}\n\n.border-bottom-0 {\n  border-bottom: 0 !important;\n}\n\n.border-start {\n  border-left: 1px solid #dee2e6 !important;\n}\n\n.border-start-0 {\n  border-left: 0 !important;\n}\n\n.border-primary {\n  border-color: #2c3e50 !important;\n}\n\n.border-secondary {\n  border-color: #95a5a6 !important;\n}\n\n.border-success {\n  border-color: #18bc9c !important;\n}\n\n.border-info {\n  border-color: #3498db !important;\n}\n\n.border-warning {\n  border-color: #f39c12 !important;\n}\n\n.border-danger {\n  border-color: #e74c3c !important;\n}\n\n.border-light {\n  border-color: #ecf0f1 !important;\n}\n\n.border-dark {\n  border-color: #7b8a8b !important;\n}\n\n.border-white {\n  border-color: #fff !important;\n}\n\n.border-1 {\n  border-width: 1px !important;\n}\n\n.border-2 {\n  border-width: 2px !important;\n}\n\n.border-3 {\n  border-width: 3px !important;\n}\n\n.border-4 {\n  border-width: 4px !important;\n}\n\n.border-5 {\n  border-width: 5px !important;\n}\n\n.w-25 {\n  width: 25% !important;\n}\n\n.w-50 {\n  width: 50% !important;\n}\n\n.w-75 {\n  width: 75% !important;\n}\n\n.w-100 {\n  width: 100% !important;\n}\n\n.w-auto {\n  width: auto !important;\n}\n\n.mw-100 {\n  max-width: 100% !important;\n}\n\n.vw-100 {\n  width: 100vw !important;\n}\n\n.min-vw-100 {\n  min-width: 100vw !important;\n}\n\n.h-25 {\n  height: 25% !important;\n}\n\n.h-50 {\n  height: 50% !important;\n}\n\n.h-75 {\n  height: 75% !important;\n}\n\n.h-100 {\n  height: 100% !important;\n}\n\n.h-auto {\n  height: auto !important;\n}\n\n.mh-100 {\n  max-height: 100% !important;\n}\n\n.vh-100 {\n  height: 100vh !important;\n}\n\n.min-vh-100 {\n  min-height: 100vh !important;\n}\n\n.flex-fill {\n  -ms-flex: 1 1 auto !important;\n  flex: 1 1 auto !important;\n}\n\n.flex-row {\n  -ms-flex-direction: row !important;\n  flex-direction: row !important;\n}\n\n.flex-column {\n  -ms-flex-direction: column !important;\n  flex-direction: column !important;\n}\n\n.flex-row-reverse {\n  -ms-flex-direction: row-reverse !important;\n  flex-direction: row-reverse !important;\n}\n\n.flex-column-reverse {\n  -ms-flex-direction: column-reverse !important;\n  flex-direction: column-reverse !important;\n}\n\n.flex-grow-0 {\n  -ms-flex-positive: 0 !important;\n  flex-grow: 0 !important;\n}\n\n.flex-grow-1 {\n  -ms-flex-positive: 1 !important;\n  flex-grow: 1 !important;\n}\n\n.flex-shrink-0 {\n  -ms-flex-negative: 0 !important;\n  flex-shrink: 0 !important;\n}\n\n.flex-shrink-1 {\n  -ms-flex-negative: 1 !important;\n  flex-shrink: 1 !important;\n}\n\n.flex-wrap {\n  -ms-flex-wrap: wrap !important;\n  flex-wrap: wrap !important;\n}\n\n.flex-nowrap {\n  -ms-flex-wrap: nowrap !important;\n  flex-wrap: nowrap !important;\n}\n\n.flex-wrap-reverse {\n  -ms-flex-wrap: wrap-reverse !important;\n  flex-wrap: wrap-reverse !important;\n}\n\n.gap-0 {\n  gap: 0 !important;\n}\n\n.gap-1 {\n  gap: 0.25rem !important;\n}\n\n.gap-2 {\n  gap: 0.5rem !important;\n}\n\n.gap-3 {\n  gap: 1rem !important;\n}\n\n.gap-4 {\n  gap: 1.5rem !important;\n}\n\n.gap-5 {\n  gap: 3rem !important;\n}\n\n.justify-content-start {\n  -ms-flex-pack: start !important;\n  justify-content: flex-start !important;\n}\n\n.justify-content-end {\n  -ms-flex-pack: end !important;\n  justify-content: flex-end !important;\n}\n\n.justify-content-center {\n  -ms-flex-pack: center !important;\n  justify-content: center !important;\n}\n\n.justify-content-between {\n  -ms-flex-pack: justify !important;\n  justify-content: space-between !important;\n}\n\n.justify-content-around {\n  -ms-flex-pack: distribute !important;\n  justify-content: space-around !important;\n}\n\n.justify-content-evenly {\n  -ms-flex-pack: space-evenly !important;\n  justify-content: space-evenly !important;\n}\n\n.align-items-start {\n  -ms-flex-align: start !important;\n  align-items: flex-start !important;\n}\n\n.align-items-end {\n  -ms-flex-align: end !important;\n  align-items: flex-end !important;\n}\n\n.align-items-center {\n  -ms-flex-align: center !important;\n  align-items: center !important;\n}\n\n.align-items-baseline {\n  -ms-flex-align: baseline !important;\n  align-items: baseline !important;\n}\n\n.align-items-stretch {\n  -ms-flex-align: stretch !important;\n  align-items: stretch !important;\n}\n\n.align-content-start {\n  -ms-flex-line-pack: start !important;\n  align-content: flex-start !important;\n}\n\n.align-content-end {\n  -ms-flex-line-pack: end !important;\n  align-content: flex-end !important;\n}\n\n.align-content-center {\n  -ms-flex-line-pack: center !important;\n  align-content: center !important;\n}\n\n.align-content-between {\n  -ms-flex-line-pack: justify !important;\n  align-content: space-between !important;\n}\n\n.align-content-around {\n  -ms-flex-line-pack: distribute !important;\n  align-content: space-around !important;\n}\n\n.align-content-stretch {\n  -ms-flex-line-pack: stretch !important;\n  align-content: stretch !important;\n}\n\n.align-self-auto {\n  -ms-flex-item-align: auto !important;\n  align-self: auto !important;\n}\n\n.align-self-start {\n  -ms-flex-item-align: start !important;\n  align-self: flex-start !important;\n}\n\n.align-self-end {\n  -ms-flex-item-align: end !important;\n  align-self: flex-end !important;\n}\n\n.align-self-center {\n  -ms-flex-item-align: center !important;\n  align-self: center !important;\n}\n\n.align-self-baseline {\n  -ms-flex-item-align: baseline !important;\n  align-self: baseline !important;\n}\n\n.align-self-stretch {\n  -ms-flex-item-align: stretch !important;\n  align-self: stretch !important;\n}\n\n.order-first {\n  -ms-flex-order: -1 !important;\n  order: -1 !important;\n}\n\n.order-0 {\n  -ms-flex-order: 0 !important;\n  order: 0 !important;\n}\n\n.order-1 {\n  -ms-flex-order: 1 !important;\n  order: 1 !important;\n}\n\n.order-2 {\n  -ms-flex-order: 2 !important;\n  order: 2 !important;\n}\n\n.order-3 {\n  -ms-flex-order: 3 !important;\n  order: 3 !important;\n}\n\n.order-4 {\n  -ms-flex-order: 4 !important;\n  order: 4 !important;\n}\n\n.order-5 {\n  -ms-flex-order: 5 !important;\n  order: 5 !important;\n}\n\n.order-last {\n  -ms-flex-order: 6 !important;\n  order: 6 !important;\n}\n\n.m-0 {\n  margin: 0 !important;\n}\n\n.m-1 {\n  margin: 0.25rem !important;\n}\n\n.m-2 {\n  margin: 0.5rem !important;\n}\n\n.m-3 {\n  margin: 1rem !important;\n}\n\n.m-4 {\n  margin: 1.5rem !important;\n}\n\n.m-5 {\n  margin: 3rem !important;\n}\n\n.m-auto {\n  margin: auto !important;\n}\n\n.mx-0 {\n  margin-right: 0 !important;\n  margin-left: 0 !important;\n}\n\n.mx-1 {\n  margin-right: 0.25rem !important;\n  margin-left: 0.25rem !important;\n}\n\n.mx-2 {\n  margin-right: 0.5rem !important;\n  margin-left: 0.5rem !important;\n}\n\n.mx-3 {\n  margin-right: 1rem !important;\n  margin-left: 1rem !important;\n}\n\n.mx-4 {\n  margin-right: 1.5rem !important;\n  margin-left: 1.5rem !important;\n}\n\n.mx-5 {\n  margin-right: 3rem !important;\n  margin-left: 3rem !important;\n}\n\n.mx-auto {\n  margin-right: auto !important;\n  margin-left: auto !important;\n}\n\n.my-0 {\n  margin-top: 0 !important;\n  margin-bottom: 0 !important;\n}\n\n.my-1 {\n  margin-top: 0.25rem !important;\n  margin-bottom: 0.25rem !important;\n}\n\n.my-2 {\n  margin-top: 0.5rem !important;\n  margin-bottom: 0.5rem !important;\n}\n\n.my-3 {\n  margin-top: 1rem !important;\n  margin-bottom: 1rem !important;\n}\n\n.my-4 {\n  margin-top: 1.5rem !important;\n  margin-bottom: 1.5rem !important;\n}\n\n.my-5 {\n  margin-top: 3rem !important;\n  margin-bottom: 3rem !important;\n}\n\n.my-auto {\n  margin-top: auto !important;\n  margin-bottom: auto !important;\n}\n\n.mt-0 {\n  margin-top: 0 !important;\n}\n\n.mt-1 {\n  margin-top: 0.25rem !important;\n}\n\n.mt-2 {\n  margin-top: 0.5rem !important;\n}\n\n.mt-3 {\n  margin-top: 1rem !important;\n}\n\n.mt-4 {\n  margin-top: 1.5rem !important;\n}\n\n.mt-5 {\n  margin-top: 3rem !important;\n}\n\n.mt-auto {\n  margin-top: auto !important;\n}\n\n.me-0 {\n  margin-right: 0 !important;\n}\n\n.me-1 {\n  margin-right: 0.25rem !important;\n}\n\n.me-2 {\n  margin-right: 0.5rem !important;\n}\n\n.me-3 {\n  margin-right: 1rem !important;\n}\n\n.me-4 {\n  margin-right: 1.5rem !important;\n}\n\n.me-5 {\n  margin-right: 3rem !important;\n}\n\n.me-auto {\n  margin-right: auto !important;\n}\n\n.mb-0 {\n  margin-bottom: 0 !important;\n}\n\n.mb-1 {\n  margin-bottom: 0.25rem !important;\n}\n\n.mb-2 {\n  margin-bottom: 0.5rem !important;\n}\n\n.mb-3 {\n  margin-bottom: 1rem !important;\n}\n\n.mb-4 {\n  margin-bottom: 1.5rem !important;\n}\n\n.mb-5 {\n  margin-bottom: 3rem !important;\n}\n\n.mb-auto {\n  margin-bottom: auto !important;\n}\n\n.ms-0 {\n  margin-left: 0 !important;\n}\n\n.ms-1 {\n  margin-left: 0.25rem !important;\n}\n\n.ms-2 {\n  margin-left: 0.5rem !important;\n}\n\n.ms-3 {\n  margin-left: 1rem !important;\n}\n\n.ms-4 {\n  margin-left: 1.5rem !important;\n}\n\n.ms-5 {\n  margin-left: 3rem !important;\n}\n\n.ms-auto {\n  margin-left: auto !important;\n}\n\n.p-0 {\n  padding: 0 !important;\n}\n\n.p-1 {\n  padding: 0.25rem !important;\n}\n\n.p-2 {\n  padding: 0.5rem !important;\n}\n\n.p-3 {\n  padding: 1rem !important;\n}\n\n.p-4 {\n  padding: 1.5rem !important;\n}\n\n.p-5 {\n  padding: 3rem !important;\n}\n\n.px-0 {\n  padding-right: 0 !important;\n  padding-left: 0 !important;\n}\n\n.px-1 {\n  padding-right: 0.25rem !important;\n  padding-left: 0.25rem !important;\n}\n\n.px-2 {\n  padding-right: 0.5rem !important;\n  padding-left: 0.5rem !important;\n}\n\n.px-3 {\n  padding-right: 1rem !important;\n  padding-left: 1rem !important;\n}\n\n.px-4 {\n  padding-right: 1.5rem !important;\n  padding-left: 1.5rem !important;\n}\n\n.px-5 {\n  padding-right: 3rem !important;\n  padding-left: 3rem !important;\n}\n\n.py-0 {\n  padding-top: 0 !important;\n  padding-bottom: 0 !important;\n}\n\n.py-1 {\n  padding-top: 0.25rem !important;\n  padding-bottom: 0.25rem !important;\n}\n\n.py-2 {\n  padding-top: 0.5rem !important;\n  padding-bottom: 0.5rem !important;\n}\n\n.py-3 {\n  padding-top: 1rem !important;\n  padding-bottom: 1rem !important;\n}\n\n.py-4 {\n  padding-top: 1.5rem !important;\n  padding-bottom: 1.5rem !important;\n}\n\n.py-5 {\n  padding-top: 3rem !important;\n  padding-bottom: 3rem !important;\n}\n\n.pt-0 {\n  padding-top: 0 !important;\n}\n\n.pt-1 {\n  padding-top: 0.25rem !important;\n}\n\n.pt-2 {\n  padding-top: 0.5rem !important;\n}\n\n.pt-3 {\n  padding-top: 1rem !important;\n}\n\n.pt-4 {\n  padding-top: 1.5rem !important;\n}\n\n.pt-5 {\n  padding-top: 3rem !important;\n}\n\n.pe-0 {\n  padding-right: 0 !important;\n}\n\n.pe-1 {\n  padding-right: 0.25rem !important;\n}\n\n.pe-2 {\n  padding-right: 0.5rem !important;\n}\n\n.pe-3 {\n  padding-right: 1rem !important;\n}\n\n.pe-4 {\n  padding-right: 1.5rem !important;\n}\n\n.pe-5 {\n  padding-right: 3rem !important;\n}\n\n.pb-0 {\n  padding-bottom: 0 !important;\n}\n\n.pb-1 {\n  padding-bottom: 0.25rem !important;\n}\n\n.pb-2 {\n  padding-bottom: 0.5rem !important;\n}\n\n.pb-3 {\n  padding-bottom: 1rem !important;\n}\n\n.pb-4 {\n  padding-bottom: 1.5rem !important;\n}\n\n.pb-5 {\n  padding-bottom: 3rem !important;\n}\n\n.ps-0 {\n  padding-left: 0 !important;\n}\n\n.ps-1 {\n  padding-left: 0.25rem !important;\n}\n\n.ps-2 {\n  padding-left: 0.5rem !important;\n}\n\n.ps-3 {\n  padding-left: 1rem !important;\n}\n\n.ps-4 {\n  padding-left: 1.5rem !important;\n}\n\n.ps-5 {\n  padding-left: 3rem !important;\n}\n\n.font-monospace {\n  font-family: var(--bs-font-monospace) !important;\n}\n\n.fs-1 {\n  font-size: calc(1.425rem + 2.1vw) !important;\n}\n\n.fs-2 {\n  font-size: calc(1.375rem + 1.5vw) !important;\n}\n\n.fs-3 {\n  font-size: calc(1.325rem + 0.9vw) !important;\n}\n\n.fs-4 {\n  font-size: calc(1.275rem + 0.3vw) !important;\n}\n\n.fs-5 {\n  font-size: 1.25rem !important;\n}\n\n.fs-6 {\n  font-size: 1rem !important;\n}\n\n.fst-italic {\n  font-style: italic !important;\n}\n\n.fst-normal {\n  font-style: normal !important;\n}\n\n.fw-light {\n  font-weight: 300 !important;\n}\n\n.fw-lighter {\n  font-weight: lighter !important;\n}\n\n.fw-normal {\n  font-weight: 400 !important;\n}\n\n.fw-bold {\n  font-weight: 700 !important;\n}\n\n.fw-bolder {\n  font-weight: bolder !important;\n}\n\n.lh-1 {\n  line-height: 1 !important;\n}\n\n.lh-sm {\n  line-height: 1.25 !important;\n}\n\n.lh-base {\n  line-height: 1.5 !important;\n}\n\n.lh-lg {\n  line-height: 2 !important;\n}\n\n.text-start {\n  text-align: left !important;\n}\n\n.text-end {\n  text-align: right !important;\n}\n\n.text-center {\n  text-align: center !important;\n}\n\n.text-decoration-none {\n  text-decoration: none !important;\n}\n\n.text-decoration-underline {\n  text-decoration: underline !important;\n}\n\n.text-decoration-line-through {\n  text-decoration: line-through !important;\n}\n\n.text-lowercase {\n  text-transform: lowercase !important;\n}\n\n.text-uppercase {\n  text-transform: uppercase !important;\n}\n\n.text-capitalize {\n  text-transform: capitalize !important;\n}\n\n.text-wrap {\n  white-space: normal !important;\n}\n\n.text-nowrap {\n  white-space: nowrap !important;\n}\n\n/* rtl:begin:remove */\n.text-break {\n  word-wrap: break-word !important;\n  word-break: break-word !important;\n}\n\n/* rtl:end:remove */\n.text-primary {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-primary-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-secondary {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-secondary-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-success {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-success-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-info {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-info-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-warning {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-warning-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-danger {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-danger-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-light {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-light-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-dark {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-dark-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-black {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-black-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-white {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-white-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-body {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-body-color-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-muted {\n  --bs-text-opacity: 1;\n  color: #95a5a6 !important;\n}\n\n.text-black-50 {\n  --bs-text-opacity: 1;\n  color: rgba(0, 0, 0, 0.5) !important;\n}\n\n.text-white-50 {\n  --bs-text-opacity: 1;\n  color: rgba(255, 255, 255, 0.5) !important;\n}\n\n.text-reset {\n  --bs-text-opacity: 1;\n  color: inherit !important;\n}\n\n.text-opacity-25 {\n  --bs-text-opacity: 0.25;\n}\n\n.text-opacity-50 {\n  --bs-text-opacity: 0.5;\n}\n\n.text-opacity-75 {\n  --bs-text-opacity: 0.75;\n}\n\n.text-opacity-100 {\n  --bs-text-opacity: 1;\n}\n\n.bg-primary {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-primary-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-secondary {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-secondary-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-success {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-success-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-info {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-info-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-warning {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-warning-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-danger {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-danger-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-light {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-light-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-dark {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-dark-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-black {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-black-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-white {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-white-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-body {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-body-bg-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-transparent {\n  --bs-bg-opacity: 1;\n  background-color: transparent !important;\n}\n\n.bg-opacity-10 {\n  --bs-bg-opacity: 0.1;\n}\n\n.bg-opacity-25 {\n  --bs-bg-opacity: 0.25;\n}\n\n.bg-opacity-50 {\n  --bs-bg-opacity: 0.5;\n}\n\n.bg-opacity-75 {\n  --bs-bg-opacity: 0.75;\n}\n\n.bg-opacity-100 {\n  --bs-bg-opacity: 1;\n}\n\n.bg-gradient {\n  background-image: var(--bs-gradient) !important;\n}\n\n.user-select-all {\n  -webkit-user-select: all !important;\n  -moz-user-select: all !important;\n  user-select: all !important;\n}\n\n.user-select-auto {\n  -webkit-user-select: auto !important;\n  -moz-user-select: auto !important;\n  -ms-user-select: auto !important;\n  user-select: auto !important;\n}\n\n.user-select-none {\n  -webkit-user-select: none !important;\n  -moz-user-select: none !important;\n  -ms-user-select: none !important;\n  user-select: none !important;\n}\n\n.pe-none {\n  pointer-events: none !important;\n}\n\n.pe-auto {\n  pointer-events: auto !important;\n}\n\n.rounded {\n  border-radius: 0.25rem !important;\n}\n\n.rounded-0 {\n  border-radius: 0 !important;\n}\n\n.rounded-1 {\n  border-radius: 0.2rem !important;\n}\n\n.rounded-2 {\n  border-radius: 0.25rem !important;\n}\n\n.rounded-3 {\n  border-radius: 0.3rem !important;\n}\n\n.rounded-circle {\n  border-radius: 50% !important;\n}\n\n.rounded-pill {\n  border-radius: 50rem !important;\n}\n\n.rounded-top {\n  border-top-left-radius: 0.25rem !important;\n  border-top-right-radius: 0.25rem !important;\n}\n\n.rounded-end {\n  border-top-right-radius: 0.25rem !important;\n  border-bottom-right-radius: 0.25rem !important;\n}\n\n.rounded-bottom {\n  border-bottom-right-radius: 0.25rem !important;\n  border-bottom-left-radius: 0.25rem !important;\n}\n\n.rounded-start {\n  border-bottom-left-radius: 0.25rem !important;\n  border-top-left-radius: 0.25rem !important;\n}\n\n.visible {\n  visibility: visible !important;\n}\n\n.invisible {\n  visibility: hidden !important;\n}\n\n@media (min-width: 576px) {\n  .float-sm-start {\n    float: left !important;\n  }\n  .float-sm-end {\n    float: right !important;\n  }\n  .float-sm-none {\n    float: none !important;\n  }\n  .d-sm-inline {\n    display: inline !important;\n  }\n  .d-sm-inline-block {\n    display: inline-block !important;\n  }\n  .d-sm-block {\n    display: block !important;\n  }\n  .d-sm-grid {\n    display: grid !important;\n  }\n  .d-sm-table {\n    display: table !important;\n  }\n  .d-sm-table-row {\n    display: table-row !important;\n  }\n  .d-sm-table-cell {\n    display: table-cell !important;\n  }\n  .d-sm-flex {\n    display: -ms-flexbox !important;\n    display: flex !important;\n  }\n  .d-sm-inline-flex {\n    display: -ms-inline-flexbox !important;\n    display: inline-flex !important;\n  }\n  .d-sm-none {\n    display: none !important;\n  }\n  .flex-sm-fill {\n    -ms-flex: 1 1 auto !important;\n    flex: 1 1 auto !important;\n  }\n  .flex-sm-row {\n    -ms-flex-direction: row !important;\n    flex-direction: row !important;\n  }\n  .flex-sm-column {\n    -ms-flex-direction: column !important;\n    flex-direction: column !important;\n  }\n  .flex-sm-row-reverse {\n    -ms-flex-direction: row-reverse !important;\n    flex-direction: row-reverse !important;\n  }\n  .flex-sm-column-reverse {\n    -ms-flex-direction: column-reverse !important;\n    flex-direction: column-reverse !important;\n  }\n  .flex-sm-grow-0 {\n    -ms-flex-positive: 0 !important;\n    flex-grow: 0 !important;\n  }\n  .flex-sm-grow-1 {\n    -ms-flex-positive: 1 !important;\n    flex-grow: 1 !important;\n  }\n  .flex-sm-shrink-0 {\n    -ms-flex-negative: 0 !important;\n    flex-shrink: 0 !important;\n  }\n  .flex-sm-shrink-1 {\n    -ms-flex-negative: 1 !important;\n    flex-shrink: 1 !important;\n  }\n  .flex-sm-wrap {\n    -ms-flex-wrap: wrap !important;\n    flex-wrap: wrap !important;\n  }\n  .flex-sm-nowrap {\n    -ms-flex-wrap: nowrap !important;\n    flex-wrap: nowrap !important;\n  }\n  .flex-sm-wrap-reverse {\n    -ms-flex-wrap: wrap-reverse !important;\n    flex-wrap: wrap-reverse !important;\n  }\n  .gap-sm-0 {\n    gap: 0 !important;\n  }\n  .gap-sm-1 {\n    gap: 0.25rem !important;\n  }\n  .gap-sm-2 {\n    gap: 0.5rem !important;\n  }\n  .gap-sm-3 {\n    gap: 1rem !important;\n  }\n  .gap-sm-4 {\n    gap: 1.5rem !important;\n  }\n  .gap-sm-5 {\n    gap: 3rem !important;\n  }\n  .justify-content-sm-start {\n    -ms-flex-pack: start !important;\n    justify-content: flex-start !important;\n  }\n  .justify-content-sm-end {\n    -ms-flex-pack: end !important;\n    justify-content: flex-end !important;\n  }\n  .justify-content-sm-center {\n    -ms-flex-pack: center !important;\n    justify-content: center !important;\n  }\n  .justify-content-sm-between {\n    -ms-flex-pack: justify !important;\n    justify-content: space-between !important;\n  }\n  .justify-content-sm-around {\n    -ms-flex-pack: distribute !important;\n    justify-content: space-around !important;\n  }\n  .justify-content-sm-evenly {\n    -ms-flex-pack: space-evenly !important;\n    justify-content: space-evenly !important;\n  }\n  .align-items-sm-start {\n    -ms-flex-align: start !important;\n    align-items: flex-start !important;\n  }\n  .align-items-sm-end {\n    -ms-flex-align: end !important;\n    align-items: flex-end !important;\n  }\n  .align-items-sm-center {\n    -ms-flex-align: center !important;\n    align-items: center !important;\n  }\n  .align-items-sm-baseline {\n    -ms-flex-align: baseline !important;\n    align-items: baseline !important;\n  }\n  .align-items-sm-stretch {\n    -ms-flex-align: stretch !important;\n    align-items: stretch !important;\n  }\n  .align-content-sm-start {\n    -ms-flex-line-pack: start !important;\n    align-content: flex-start !important;\n  }\n  .align-content-sm-end {\n    -ms-flex-line-pack: end !important;\n    align-content: flex-end !important;\n  }\n  .align-content-sm-center {\n    -ms-flex-line-pack: center !important;\n    align-content: center !important;\n  }\n  .align-content-sm-between {\n    -ms-flex-line-pack: justify !important;\n    align-content: space-between !important;\n  }\n  .align-content-sm-around {\n    -ms-flex-line-pack: distribute !important;\n    align-content: space-around !important;\n  }\n  .align-content-sm-stretch {\n    -ms-flex-line-pack: stretch !important;\n    align-content: stretch !important;\n  }\n  .align-self-sm-auto {\n    -ms-flex-item-align: auto !important;\n    align-self: auto !important;\n  }\n  .align-self-sm-start {\n    -ms-flex-item-align: start !important;\n    align-self: flex-start !important;\n  }\n  .align-self-sm-end {\n    -ms-flex-item-align: end !important;\n    align-self: flex-end !important;\n  }\n  .align-self-sm-center {\n    -ms-flex-item-align: center !important;\n    align-self: center !important;\n  }\n  .align-self-sm-baseline {\n    -ms-flex-item-align: baseline !important;\n    align-self: baseline !important;\n  }\n  .align-self-sm-stretch {\n    -ms-flex-item-align: stretch !important;\n    align-self: stretch !important;\n  }\n  .order-sm-first {\n    -ms-flex-order: -1 !important;\n    order: -1 !important;\n  }\n  .order-sm-0 {\n    -ms-flex-order: 0 !important;\n    order: 0 !important;\n  }\n  .order-sm-1 {\n    -ms-flex-order: 1 !important;\n    order: 1 !important;\n  }\n  .order-sm-2 {\n    -ms-flex-order: 2 !important;\n    order: 2 !important;\n  }\n  .order-sm-3 {\n    -ms-flex-order: 3 !important;\n    order: 3 !important;\n  }\n  .order-sm-4 {\n    -ms-flex-order: 4 !important;\n    order: 4 !important;\n  }\n  .order-sm-5 {\n    -ms-flex-order: 5 !important;\n    order: 5 !important;\n  }\n  .order-sm-last {\n    -ms-flex-order: 6 !important;\n    order: 6 !important;\n  }\n  .m-sm-0 {\n    margin: 0 !important;\n  }\n  .m-sm-1 {\n    margin: 0.25rem !important;\n  }\n  .m-sm-2 {\n    margin: 0.5rem !important;\n  }\n  .m-sm-3 {\n    margin: 1rem !important;\n  }\n  .m-sm-4 {\n    margin: 1.5rem !important;\n  }\n  .m-sm-5 {\n    margin: 3rem !important;\n  }\n  .m-sm-auto {\n    margin: auto !important;\n  }\n  .mx-sm-0 {\n    margin-right: 0 !important;\n    margin-left: 0 !important;\n  }\n  .mx-sm-1 {\n    margin-right: 0.25rem !important;\n    margin-left: 0.25rem !important;\n  }\n  .mx-sm-2 {\n    margin-right: 0.5rem !important;\n    margin-left: 0.5rem !important;\n  }\n  .mx-sm-3 {\n    margin-right: 1rem !important;\n    margin-left: 1rem !important;\n  }\n  .mx-sm-4 {\n    margin-right: 1.5rem !important;\n    margin-left: 1.5rem !important;\n  }\n  .mx-sm-5 {\n    margin-right: 3rem !important;\n    margin-left: 3rem !important;\n  }\n  .mx-sm-auto {\n    margin-right: auto !important;\n    margin-left: auto !important;\n  }\n  .my-sm-0 {\n    margin-top: 0 !important;\n    margin-bottom: 0 !important;\n  }\n  .my-sm-1 {\n    margin-top: 0.25rem !important;\n    margin-bottom: 0.25rem !important;\n  }\n  .my-sm-2 {\n    margin-top: 0.5rem !important;\n    margin-bottom: 0.5rem !important;\n  }\n  .my-sm-3 {\n    margin-top: 1rem !important;\n    margin-bottom: 1rem !important;\n  }\n  .my-sm-4 {\n    margin-top: 1.5rem !important;\n    margin-bottom: 1.5rem !important;\n  }\n  .my-sm-5 {\n    margin-top: 3rem !important;\n    margin-bottom: 3rem !important;\n  }\n  .my-sm-auto {\n    margin-top: auto !important;\n    margin-bottom: auto !important;\n  }\n  .mt-sm-0 {\n    margin-top: 0 !important;\n  }\n  .mt-sm-1 {\n    margin-top: 0.25rem !important;\n  }\n  .mt-sm-2 {\n    margin-top: 0.5rem !important;\n  }\n  .mt-sm-3 {\n    margin-top: 1rem !important;\n  }\n  .mt-sm-4 {\n    margin-top: 1.5rem !important;\n  }\n  .mt-sm-5 {\n    margin-top: 3rem !important;\n  }\n  .mt-sm-auto {\n    margin-top: auto !important;\n  }\n  .me-sm-0 {\n    margin-right: 0 !important;\n  }\n  .me-sm-1 {\n    margin-right: 0.25rem !important;\n  }\n  .me-sm-2 {\n    margin-right: 0.5rem !important;\n  }\n  .me-sm-3 {\n    margin-right: 1rem !important;\n  }\n  .me-sm-4 {\n    margin-right: 1.5rem !important;\n  }\n  .me-sm-5 {\n    margin-right: 3rem !important;\n  }\n  .me-sm-auto {\n    margin-right: auto !important;\n  }\n  .mb-sm-0 {\n    margin-bottom: 0 !important;\n  }\n  .mb-sm-1 {\n    margin-bottom: 0.25rem !important;\n  }\n  .mb-sm-2 {\n    margin-bottom: 0.5rem !important;\n  }\n  .mb-sm-3 {\n    margin-bottom: 1rem !important;\n  }\n  .mb-sm-4 {\n    margin-bottom: 1.5rem !important;\n  }\n  .mb-sm-5 {\n    margin-bottom: 3rem !important;\n  }\n  .mb-sm-auto {\n    margin-bottom: auto !important;\n  }\n  .ms-sm-0 {\n    margin-left: 0 !important;\n  }\n  .ms-sm-1 {\n    margin-left: 0.25rem !important;\n  }\n  .ms-sm-2 {\n    margin-left: 0.5rem !important;\n  }\n  .ms-sm-3 {\n    margin-left: 1rem !important;\n  }\n  .ms-sm-4 {\n    margin-left: 1.5rem !important;\n  }\n  .ms-sm-5 {\n    margin-left: 3rem !important;\n  }\n  .ms-sm-auto {\n    margin-left: auto !important;\n  }\n  .p-sm-0 {\n    padding: 0 !important;\n  }\n  .p-sm-1 {\n    padding: 0.25rem !important;\n  }\n  .p-sm-2 {\n    padding: 0.5rem !important;\n  }\n  .p-sm-3 {\n    padding: 1rem !important;\n  }\n  .p-sm-4 {\n    padding: 1.5rem !important;\n  }\n  .p-sm-5 {\n    padding: 3rem !important;\n  }\n  .px-sm-0 {\n    padding-right: 0 !important;\n    padding-left: 0 !important;\n  }\n  .px-sm-1 {\n    padding-right: 0.25rem !important;\n    padding-left: 0.25rem !important;\n  }\n  .px-sm-2 {\n    padding-right: 0.5rem !important;\n    padding-left: 0.5rem !important;\n  }\n  .px-sm-3 {\n    padding-right: 1rem !important;\n    padding-left: 1rem !important;\n  }\n  .px-sm-4 {\n    padding-right: 1.5rem !important;\n    padding-left: 1.5rem !important;\n  }\n  .px-sm-5 {\n    padding-right: 3rem !important;\n    padding-left: 3rem !important;\n  }\n  .py-sm-0 {\n    padding-top: 0 !important;\n    padding-bottom: 0 !important;\n  }\n  .py-sm-1 {\n    padding-top: 0.25rem !important;\n    padding-bottom: 0.25rem !important;\n  }\n  .py-sm-2 {\n    padding-top: 0.5rem !important;\n    padding-bottom: 0.5rem !important;\n  }\n  .py-sm-3 {\n    padding-top: 1rem !important;\n    padding-bottom: 1rem !important;\n  }\n  .py-sm-4 {\n    padding-top: 1.5rem !important;\n    padding-bottom: 1.5rem !important;\n  }\n  .py-sm-5 {\n    padding-top: 3rem !important;\n    padding-bottom: 3rem !important;\n  }\n  .pt-sm-0 {\n    padding-top: 0 !important;\n  }\n  .pt-sm-1 {\n    padding-top: 0.25rem !important;\n  }\n  .pt-sm-2 {\n    padding-top: 0.5rem !important;\n  }\n  .pt-sm-3 {\n    padding-top: 1rem !important;\n  }\n  .pt-sm-4 {\n    padding-top: 1.5rem !important;\n  }\n  .pt-sm-5 {\n    padding-top: 3rem !important;\n  }\n  .pe-sm-0 {\n    padding-right: 0 !important;\n  }\n  .pe-sm-1 {\n    padding-right: 0.25rem !important;\n  }\n  .pe-sm-2 {\n    padding-right: 0.5rem !important;\n  }\n  .pe-sm-3 {\n    padding-right: 1rem !important;\n  }\n  .pe-sm-4 {\n    padding-right: 1.5rem !important;\n  }\n  .pe-sm-5 {\n    padding-right: 3rem !important;\n  }\n  .pb-sm-0 {\n    padding-bottom: 0 !important;\n  }\n  .pb-sm-1 {\n    padding-bottom: 0.25rem !important;\n  }\n  .pb-sm-2 {\n    padding-bottom: 0.5rem !important;\n  }\n  .pb-sm-3 {\n    padding-bottom: 1rem !important;\n  }\n  .pb-sm-4 {\n    padding-bottom: 1.5rem !important;\n  }\n  .pb-sm-5 {\n    padding-bottom: 3rem !important;\n  }\n  .ps-sm-0 {\n    padding-left: 0 !important;\n  }\n  .ps-sm-1 {\n    padding-left: 0.25rem !important;\n  }\n  .ps-sm-2 {\n    padding-left: 0.5rem !important;\n  }\n  .ps-sm-3 {\n    padding-left: 1rem !important;\n  }\n  .ps-sm-4 {\n    padding-left: 1.5rem !important;\n  }\n  .ps-sm-5 {\n    padding-left: 3rem !important;\n  }\n  .text-sm-start {\n    text-align: left !important;\n  }\n  .text-sm-end {\n    text-align: right !important;\n  }\n  .text-sm-center {\n    text-align: center !important;\n  }\n}\n\n@media (min-width: 768px) {\n  .float-md-start {\n    float: left !important;\n  }\n  .float-md-end {\n    float: right !important;\n  }\n  .float-md-none {\n    float: none !important;\n  }\n  .d-md-inline {\n    display: inline !important;\n  }\n  .d-md-inline-block {\n    display: inline-block !important;\n  }\n  .d-md-block {\n    display: block !important;\n  }\n  .d-md-grid {\n    display: grid !important;\n  }\n  .d-md-table {\n    display: table !important;\n  }\n  .d-md-table-row {\n    display: table-row !important;\n  }\n  .d-md-table-cell {\n    display: table-cell !important;\n  }\n  .d-md-flex {\n    display: -ms-flexbox !important;\n    display: flex !important;\n  }\n  .d-md-inline-flex {\n    display: -ms-inline-flexbox !important;\n    display: inline-flex !important;\n  }\n  .d-md-none {\n    display: none !important;\n  }\n  .flex-md-fill {\n    -ms-flex: 1 1 auto !important;\n    flex: 1 1 auto !important;\n  }\n  .flex-md-row {\n    -ms-flex-direction: row !important;\n    flex-direction: row !important;\n  }\n  .flex-md-column {\n    -ms-flex-direction: column !important;\n    flex-direction: column !important;\n  }\n  .flex-md-row-reverse {\n    -ms-flex-direction: row-reverse !important;\n    flex-direction: row-reverse !important;\n  }\n  .flex-md-column-reverse {\n    -ms-flex-direction: column-reverse !important;\n    flex-direction: column-reverse !important;\n  }\n  .flex-md-grow-0 {\n    -ms-flex-positive: 0 !important;\n    flex-grow: 0 !important;\n  }\n  .flex-md-grow-1 {\n    -ms-flex-positive: 1 !important;\n    flex-grow: 1 !important;\n  }\n  .flex-md-shrink-0 {\n    -ms-flex-negative: 0 !important;\n    flex-shrink: 0 !important;\n  }\n  .flex-md-shrink-1 {\n    -ms-flex-negative: 1 !important;\n    flex-shrink: 1 !important;\n  }\n  .flex-md-wrap {\n    -ms-flex-wrap: wrap !important;\n    flex-wrap: wrap !important;\n  }\n  .flex-md-nowrap {\n    -ms-flex-wrap: nowrap !important;\n    flex-wrap: nowrap !important;\n  }\n  .flex-md-wrap-reverse {\n    -ms-flex-wrap: wrap-reverse !important;\n    flex-wrap: wrap-reverse !important;\n  }\n  .gap-md-0 {\n    gap: 0 !important;\n  }\n  .gap-md-1 {\n    gap: 0.25rem !important;\n  }\n  .gap-md-2 {\n    gap: 0.5rem !important;\n  }\n  .gap-md-3 {\n    gap: 1rem !important;\n  }\n  .gap-md-4 {\n    gap: 1.5rem !important;\n  }\n  .gap-md-5 {\n    gap: 3rem !important;\n  }\n  .justify-content-md-start {\n    -ms-flex-pack: start !important;\n    justify-content: flex-start !important;\n  }\n  .justify-content-md-end {\n    -ms-flex-pack: end !important;\n    justify-content: flex-end !important;\n  }\n  .justify-content-md-center {\n    -ms-flex-pack: center !important;\n    justify-content: center !important;\n  }\n  .justify-content-md-between {\n    -ms-flex-pack: justify !important;\n    justify-content: space-between !important;\n  }\n  .justify-content-md-around {\n    -ms-flex-pack: distribute !important;\n    justify-content: space-around !important;\n  }\n  .justify-content-md-evenly {\n    -ms-flex-pack: space-evenly !important;\n    justify-content: space-evenly !important;\n  }\n  .align-items-md-start {\n    -ms-flex-align: start !important;\n    align-items: flex-start !important;\n  }\n  .align-items-md-end {\n    -ms-flex-align: end !important;\n    align-items: flex-end !important;\n  }\n  .align-items-md-center {\n    -ms-flex-align: center !important;\n    align-items: center !important;\n  }\n  .align-items-md-baseline {\n    -ms-flex-align: baseline !important;\n    align-items: baseline !important;\n  }\n  .align-items-md-stretch {\n    -ms-flex-align: stretch !important;\n    align-items: stretch !important;\n  }\n  .align-content-md-start {\n    -ms-flex-line-pack: start !important;\n    align-content: flex-start !important;\n  }\n  .align-content-md-end {\n    -ms-flex-line-pack: end !important;\n    align-content: flex-end !important;\n  }\n  .align-content-md-center {\n    -ms-flex-line-pack: center !important;\n    align-content: center !important;\n  }\n  .align-content-md-between {\n    -ms-flex-line-pack: justify !important;\n    align-content: space-between !important;\n  }\n  .align-content-md-around {\n    -ms-flex-line-pack: distribute !important;\n    align-content: space-around !important;\n  }\n  .align-content-md-stretch {\n    -ms-flex-line-pack: stretch !important;\n    align-content: stretch !important;\n  }\n  .align-self-md-auto {\n    -ms-flex-item-align: auto !important;\n    align-self: auto !important;\n  }\n  .align-self-md-start {\n    -ms-flex-item-align: start !important;\n    align-self: flex-start !important;\n  }\n  .align-self-md-end {\n    -ms-flex-item-align: end !important;\n    align-self: flex-end !important;\n  }\n  .align-self-md-center {\n    -ms-flex-item-align: center !important;\n    align-self: center !important;\n  }\n  .align-self-md-baseline {\n    -ms-flex-item-align: baseline !important;\n    align-self: baseline !important;\n  }\n  .align-self-md-stretch {\n    -ms-flex-item-align: stretch !important;\n    align-self: stretch !important;\n  }\n  .order-md-first {\n    -ms-flex-order: -1 !important;\n    order: -1 !important;\n  }\n  .order-md-0 {\n    -ms-flex-order: 0 !important;\n    order: 0 !important;\n  }\n  .order-md-1 {\n    -ms-flex-order: 1 !important;\n    order: 1 !important;\n  }\n  .order-md-2 {\n    -ms-flex-order: 2 !important;\n    order: 2 !important;\n  }\n  .order-md-3 {\n    -ms-flex-order: 3 !important;\n    order: 3 !important;\n  }\n  .order-md-4 {\n    -ms-flex-order: 4 !important;\n    order: 4 !important;\n  }\n  .order-md-5 {\n    -ms-flex-order: 5 !important;\n    order: 5 !important;\n  }\n  .order-md-last {\n    -ms-flex-order: 6 !important;\n    order: 6 !important;\n  }\n  .m-md-0 {\n    margin: 0 !important;\n  }\n  .m-md-1 {\n    margin: 0.25rem !important;\n  }\n  .m-md-2 {\n    margin: 0.5rem !important;\n  }\n  .m-md-3 {\n    margin: 1rem !important;\n  }\n  .m-md-4 {\n    margin: 1.5rem !important;\n  }\n  .m-md-5 {\n    margin: 3rem !important;\n  }\n  .m-md-auto {\n    margin: auto !important;\n  }\n  .mx-md-0 {\n    margin-right: 0 !important;\n    margin-left: 0 !important;\n  }\n  .mx-md-1 {\n    margin-right: 0.25rem !important;\n    margin-left: 0.25rem !important;\n  }\n  .mx-md-2 {\n    margin-right: 0.5rem !important;\n    margin-left: 0.5rem !important;\n  }\n  .mx-md-3 {\n    margin-right: 1rem !important;\n    margin-left: 1rem !important;\n  }\n  .mx-md-4 {\n    margin-right: 1.5rem !important;\n    margin-left: 1.5rem !important;\n  }\n  .mx-md-5 {\n    margin-right: 3rem !important;\n    margin-left: 3rem !important;\n  }\n  .mx-md-auto {\n    margin-right: auto !important;\n    margin-left: auto !important;\n  }\n  .my-md-0 {\n    margin-top: 0 !important;\n    margin-bottom: 0 !important;\n  }\n  .my-md-1 {\n    margin-top: 0.25rem !important;\n    margin-bottom: 0.25rem !important;\n  }\n  .my-md-2 {\n    margin-top: 0.5rem !important;\n    margin-bottom: 0.5rem !important;\n  }\n  .my-md-3 {\n    margin-top: 1rem !important;\n    margin-bottom: 1rem !important;\n  }\n  .my-md-4 {\n    margin-top: 1.5rem !important;\n    margin-bottom: 1.5rem !important;\n  }\n  .my-md-5 {\n    margin-top: 3rem !important;\n    margin-bottom: 3rem !important;\n  }\n  .my-md-auto {\n    margin-top: auto !important;\n    margin-bottom: auto !important;\n  }\n  .mt-md-0 {\n    margin-top: 0 !important;\n  }\n  .mt-md-1 {\n    margin-top: 0.25rem !important;\n  }\n  .mt-md-2 {\n    margin-top: 0.5rem !important;\n  }\n  .mt-md-3 {\n    margin-top: 1rem !important;\n  }\n  .mt-md-4 {\n    margin-top: 1.5rem !important;\n  }\n  .mt-md-5 {\n    margin-top: 3rem !important;\n  }\n  .mt-md-auto {\n    margin-top: auto !important;\n  }\n  .me-md-0 {\n    margin-right: 0 !important;\n  }\n  .me-md-1 {\n    margin-right: 0.25rem !important;\n  }\n  .me-md-2 {\n    margin-right: 0.5rem !important;\n  }\n  .me-md-3 {\n    margin-right: 1rem !important;\n  }\n  .me-md-4 {\n    margin-right: 1.5rem !important;\n  }\n  .me-md-5 {\n    margin-right: 3rem !important;\n  }\n  .me-md-auto {\n    margin-right: auto !important;\n  }\n  .mb-md-0 {\n    margin-bottom: 0 !important;\n  }\n  .mb-md-1 {\n    margin-bottom: 0.25rem !important;\n  }\n  .mb-md-2 {\n    margin-bottom: 0.5rem !important;\n  }\n  .mb-md-3 {\n    margin-bottom: 1rem !important;\n  }\n  .mb-md-4 {\n    margin-bottom: 1.5rem !important;\n  }\n  .mb-md-5 {\n    margin-bottom: 3rem !important;\n  }\n  .mb-md-auto {\n    margin-bottom: auto !important;\n  }\n  .ms-md-0 {\n    margin-left: 0 !important;\n  }\n  .ms-md-1 {\n    margin-left: 0.25rem !important;\n  }\n  .ms-md-2 {\n    margin-left: 0.5rem !important;\n  }\n  .ms-md-3 {\n    margin-left: 1rem !important;\n  }\n  .ms-md-4 {\n    margin-left: 1.5rem !important;\n  }\n  .ms-md-5 {\n    margin-left: 3rem !important;\n  }\n  .ms-md-auto {\n    margin-left: auto !important;\n  }\n  .p-md-0 {\n    padding: 0 !important;\n  }\n  .p-md-1 {\n    padding: 0.25rem !important;\n  }\n  .p-md-2 {\n    padding: 0.5rem !important;\n  }\n  .p-md-3 {\n    padding: 1rem !important;\n  }\n  .p-md-4 {\n    padding: 1.5rem !important;\n  }\n  .p-md-5 {\n    padding: 3rem !important;\n  }\n  .px-md-0 {\n    padding-right: 0 !important;\n    padding-left: 0 !important;\n  }\n  .px-md-1 {\n    padding-right: 0.25rem !important;\n    padding-left: 0.25rem !important;\n  }\n  .px-md-2 {\n    padding-right: 0.5rem !important;\n    padding-left: 0.5rem !important;\n  }\n  .px-md-3 {\n    padding-right: 1rem !important;\n    padding-left: 1rem !important;\n  }\n  .px-md-4 {\n    padding-right: 1.5rem !important;\n    padding-left: 1.5rem !important;\n  }\n  .px-md-5 {\n    padding-right: 3rem !important;\n    padding-left: 3rem !important;\n  }\n  .py-md-0 {\n    padding-top: 0 !important;\n    padding-bottom: 0 !important;\n  }\n  .py-md-1 {\n    padding-top: 0.25rem !important;\n    padding-bottom: 0.25rem !important;\n  }\n  .py-md-2 {\n    padding-top: 0.5rem !important;\n    padding-bottom: 0.5rem !important;\n  }\n  .py-md-3 {\n    padding-top: 1rem !important;\n    padding-bottom: 1rem !important;\n  }\n  .py-md-4 {\n    padding-top: 1.5rem !important;\n    padding-bottom: 1.5rem !important;\n  }\n  .py-md-5 {\n    padding-top: 3rem !important;\n    padding-bottom: 3rem !important;\n  }\n  .pt-md-0 {\n    padding-top: 0 !important;\n  }\n  .pt-md-1 {\n    padding-top: 0.25rem !important;\n  }\n  .pt-md-2 {\n    padding-top: 0.5rem !important;\n  }\n  .pt-md-3 {\n    padding-top: 1rem !important;\n  }\n  .pt-md-4 {\n    padding-top: 1.5rem !important;\n  }\n  .pt-md-5 {\n    padding-top: 3rem !important;\n  }\n  .pe-md-0 {\n    padding-right: 0 !important;\n  }\n  .pe-md-1 {\n    padding-right: 0.25rem !important;\n  }\n  .pe-md-2 {\n    padding-right: 0.5rem !important;\n  }\n  .pe-md-3 {\n    padding-right: 1rem !important;\n  }\n  .pe-md-4 {\n    padding-right: 1.5rem !important;\n  }\n  .pe-md-5 {\n    padding-right: 3rem !important;\n  }\n  .pb-md-0 {\n    padding-bottom: 0 !important;\n  }\n  .pb-md-1 {\n    padding-bottom: 0.25rem !important;\n  }\n  .pb-md-2 {\n    padding-bottom: 0.5rem !important;\n  }\n  .pb-md-3 {\n    padding-bottom: 1rem !important;\n  }\n  .pb-md-4 {\n    padding-bottom: 1.5rem !important;\n  }\n  .pb-md-5 {\n    padding-bottom: 3rem !important;\n  }\n  .ps-md-0 {\n    padding-left: 0 !important;\n  }\n  .ps-md-1 {\n    padding-left: 0.25rem !important;\n  }\n  .ps-md-2 {\n    padding-left: 0.5rem !important;\n  }\n  .ps-md-3 {\n    padding-left: 1rem !important;\n  }\n  .ps-md-4 {\n    padding-left: 1.5rem !important;\n  }\n  .ps-md-5 {\n    padding-left: 3rem !important;\n  }\n  .text-md-start {\n    text-align: left !important;\n  }\n  .text-md-end {\n    text-align: right !important;\n  }\n  .text-md-center {\n    text-align: center !important;\n  }\n}\n\n@media (min-width: 992px) {\n  .float-lg-start {\n    float: left !important;\n  }\n  .float-lg-end {\n    float: right !important;\n  }\n  .float-lg-none {\n    float: none !important;\n  }\n  .d-lg-inline {\n    display: inline !important;\n  }\n  .d-lg-inline-block {\n    display: inline-block !important;\n  }\n  .d-lg-block {\n    display: block !important;\n  }\n  .d-lg-grid {\n    display: grid !important;\n  }\n  .d-lg-table {\n    display: table !important;\n  }\n  .d-lg-table-row {\n    display: table-row !important;\n  }\n  .d-lg-table-cell {\n    display: table-cell !important;\n  }\n  .d-lg-flex {\n    display: -ms-flexbox !important;\n    display: flex !important;\n  }\n  .d-lg-inline-flex {\n    display: -ms-inline-flexbox !important;\n    display: inline-flex !important;\n  }\n  .d-lg-none {\n    display: none !important;\n  }\n  .flex-lg-fill {\n    -ms-flex: 1 1 auto !important;\n    flex: 1 1 auto !important;\n  }\n  .flex-lg-row {\n    -ms-flex-direction: row !important;\n    flex-direction: row !important;\n  }\n  .flex-lg-column {\n    -ms-flex-direction: column !important;\n    flex-direction: column !important;\n  }\n  .flex-lg-row-reverse {\n    -ms-flex-direction: row-reverse !important;\n    flex-direction: row-reverse !important;\n  }\n  .flex-lg-column-reverse {\n    -ms-flex-direction: column-reverse !important;\n    flex-direction: column-reverse !important;\n  }\n  .flex-lg-grow-0 {\n    -ms-flex-positive: 0 !important;\n    flex-grow: 0 !important;\n  }\n  .flex-lg-grow-1 {\n    -ms-flex-positive: 1 !important;\n    flex-grow: 1 !important;\n  }\n  .flex-lg-shrink-0 {\n    -ms-flex-negative: 0 !important;\n    flex-shrink: 0 !important;\n  }\n  .flex-lg-shrink-1 {\n    -ms-flex-negative: 1 !important;\n    flex-shrink: 1 !important;\n  }\n  .flex-lg-wrap {\n    -ms-flex-wrap: wrap !important;\n    flex-wrap: wrap !important;\n  }\n  .flex-lg-nowrap {\n    -ms-flex-wrap: nowrap !important;\n    flex-wrap: nowrap !important;\n  }\n  .flex-lg-wrap-reverse {\n    -ms-flex-wrap: wrap-reverse !important;\n    flex-wrap: wrap-reverse !important;\n  }\n  .gap-lg-0 {\n    gap: 0 !important;\n  }\n  .gap-lg-1 {\n    gap: 0.25rem !important;\n  }\n  .gap-lg-2 {\n    gap: 0.5rem !important;\n  }\n  .gap-lg-3 {\n    gap: 1rem !important;\n  }\n  .gap-lg-4 {\n    gap: 1.5rem !important;\n  }\n  .gap-lg-5 {\n    gap: 3rem !important;\n  }\n  .justify-content-lg-start {\n    -ms-flex-pack: start !important;\n    justify-content: flex-start !important;\n  }\n  .justify-content-lg-end {\n    -ms-flex-pack: end !important;\n    justify-content: flex-end !important;\n  }\n  .justify-content-lg-center {\n    -ms-flex-pack: center !important;\n    justify-content: center !important;\n  }\n  .justify-content-lg-between {\n    -ms-flex-pack: justify !important;\n    justify-content: space-between !important;\n  }\n  .justify-content-lg-around {\n    -ms-flex-pack: distribute !important;\n    justify-content: space-around !important;\n  }\n  .justify-content-lg-evenly {\n    -ms-flex-pack: space-evenly !important;\n    justify-content: space-evenly !important;\n  }\n  .align-items-lg-start {\n    -ms-flex-align: start !important;\n    align-items: flex-start !important;\n  }\n  .align-items-lg-end {\n    -ms-flex-align: end !important;\n    align-items: flex-end !important;\n  }\n  .align-items-lg-center {\n    -ms-flex-align: center !important;\n    align-items: center !important;\n  }\n  .align-items-lg-baseline {\n    -ms-flex-align: baseline !important;\n    align-items: baseline !important;\n  }\n  .align-items-lg-stretch {\n    -ms-flex-align: stretch !important;\n    align-items: stretch !important;\n  }\n  .align-content-lg-start {\n    -ms-flex-line-pack: start !important;\n    align-content: flex-start !important;\n  }\n  .align-content-lg-end {\n    -ms-flex-line-pack: end !important;\n    align-content: flex-end !important;\n  }\n  .align-content-lg-center {\n    -ms-flex-line-pack: center !important;\n    align-content: center !important;\n  }\n  .align-content-lg-between {\n    -ms-flex-line-pack: justify !important;\n    align-content: space-between !important;\n  }\n  .align-content-lg-around {\n    -ms-flex-line-pack: distribute !important;\n    align-content: space-around !important;\n  }\n  .align-content-lg-stretch {\n    -ms-flex-line-pack: stretch !important;\n    align-content: stretch !important;\n  }\n  .align-self-lg-auto {\n    -ms-flex-item-align: auto !important;\n    align-self: auto !important;\n  }\n  .align-self-lg-start {\n    -ms-flex-item-align: start !important;\n    align-self: flex-start !important;\n  }\n  .align-self-lg-end {\n    -ms-flex-item-align: end !important;\n    align-self: flex-end !important;\n  }\n  .align-self-lg-center {\n    -ms-flex-item-align: center !important;\n    align-self: center !important;\n  }\n  .align-self-lg-baseline {\n    -ms-flex-item-align: baseline !important;\n    align-self: baseline !important;\n  }\n  .align-self-lg-stretch {\n    -ms-flex-item-align: stretch !important;\n    align-self: stretch !important;\n  }\n  .order-lg-first {\n    -ms-flex-order: -1 !important;\n    order: -1 !important;\n  }\n  .order-lg-0 {\n    -ms-flex-order: 0 !important;\n    order: 0 !important;\n  }\n  .order-lg-1 {\n    -ms-flex-order: 1 !important;\n    order: 1 !important;\n  }\n  .order-lg-2 {\n    -ms-flex-order: 2 !important;\n    order: 2 !important;\n  }\n  .order-lg-3 {\n    -ms-flex-order: 3 !important;\n    order: 3 !important;\n  }\n  .order-lg-4 {\n    -ms-flex-order: 4 !important;\n    order: 4 !important;\n  }\n  .order-lg-5 {\n    -ms-flex-order: 5 !important;\n    order: 5 !important;\n  }\n  .order-lg-last {\n    -ms-flex-order: 6 !important;\n    order: 6 !important;\n  }\n  .m-lg-0 {\n    margin: 0 !important;\n  }\n  .m-lg-1 {\n    margin: 0.25rem !important;\n  }\n  .m-lg-2 {\n    margin: 0.5rem !important;\n  }\n  .m-lg-3 {\n    margin: 1rem !important;\n  }\n  .m-lg-4 {\n    margin: 1.5rem !important;\n  }\n  .m-lg-5 {\n    margin: 3rem !important;\n  }\n  .m-lg-auto {\n    margin: auto !important;\n  }\n  .mx-lg-0 {\n    margin-right: 0 !important;\n    margin-left: 0 !important;\n  }\n  .mx-lg-1 {\n    margin-right: 0.25rem !important;\n    margin-left: 0.25rem !important;\n  }\n  .mx-lg-2 {\n    margin-right: 0.5rem !important;\n    margin-left: 0.5rem !important;\n  }\n  .mx-lg-3 {\n    margin-right: 1rem !important;\n    margin-left: 1rem !important;\n  }\n  .mx-lg-4 {\n    margin-right: 1.5rem !important;\n    margin-left: 1.5rem !important;\n  }\n  .mx-lg-5 {\n    margin-right: 3rem !important;\n    margin-left: 3rem !important;\n  }\n  .mx-lg-auto {\n    margin-right: auto !important;\n    margin-left: auto !important;\n  }\n  .my-lg-0 {\n    margin-top: 0 !important;\n    margin-bottom: 0 !important;\n  }\n  .my-lg-1 {\n    margin-top: 0.25rem !important;\n    margin-bottom: 0.25rem !important;\n  }\n  .my-lg-2 {\n    margin-top: 0.5rem !important;\n    margin-bottom: 0.5rem !important;\n  }\n  .my-lg-3 {\n    margin-top: 1rem !important;\n    margin-bottom: 1rem !important;\n  }\n  .my-lg-4 {\n    margin-top: 1.5rem !important;\n    margin-bottom: 1.5rem !important;\n  }\n  .my-lg-5 {\n    margin-top: 3rem !important;\n    margin-bottom: 3rem !important;\n  }\n  .my-lg-auto {\n    margin-top: auto !important;\n    margin-bottom: auto !important;\n  }\n  .mt-lg-0 {\n    margin-top: 0 !important;\n  }\n  .mt-lg-1 {\n    margin-top: 0.25rem !important;\n  }\n  .mt-lg-2 {\n    margin-top: 0.5rem !important;\n  }\n  .mt-lg-3 {\n    margin-top: 1rem !important;\n  }\n  .mt-lg-4 {\n    margin-top: 1.5rem !important;\n  }\n  .mt-lg-5 {\n    margin-top: 3rem !important;\n  }\n  .mt-lg-auto {\n    margin-top: auto !important;\n  }\n  .me-lg-0 {\n    margin-right: 0 !important;\n  }\n  .me-lg-1 {\n    margin-right: 0.25rem !important;\n  }\n  .me-lg-2 {\n    margin-right: 0.5rem !important;\n  }\n  .me-lg-3 {\n    margin-right: 1rem !important;\n  }\n  .me-lg-4 {\n    margin-right: 1.5rem !important;\n  }\n  .me-lg-5 {\n    margin-right: 3rem !important;\n  }\n  .me-lg-auto {\n    margin-right: auto !important;\n  }\n  .mb-lg-0 {\n    margin-bottom: 0 !important;\n  }\n  .mb-lg-1 {\n    margin-bottom: 0.25rem !important;\n  }\n  .mb-lg-2 {\n    margin-bottom: 0.5rem !important;\n  }\n  .mb-lg-3 {\n    margin-bottom: 1rem !important;\n  }\n  .mb-lg-4 {\n    margin-bottom: 1.5rem !important;\n  }\n  .mb-lg-5 {\n    margin-bottom: 3rem !important;\n  }\n  .mb-lg-auto {\n    margin-bottom: auto !important;\n  }\n  .ms-lg-0 {\n    margin-left: 0 !important;\n  }\n  .ms-lg-1 {\n    margin-left: 0.25rem !important;\n  }\n  .ms-lg-2 {\n    margin-left: 0.5rem !important;\n  }\n  .ms-lg-3 {\n    margin-left: 1rem !important;\n  }\n  .ms-lg-4 {\n    margin-left: 1.5rem !important;\n  }\n  .ms-lg-5 {\n    margin-left: 3rem !important;\n  }\n  .ms-lg-auto {\n    margin-left: auto !important;\n  }\n  .p-lg-0 {\n    padding: 0 !important;\n  }\n  .p-lg-1 {\n    padding: 0.25rem !important;\n  }\n  .p-lg-2 {\n    padding: 0.5rem !important;\n  }\n  .p-lg-3 {\n    padding: 1rem !important;\n  }\n  .p-lg-4 {\n    padding: 1.5rem !important;\n  }\n  .p-lg-5 {\n    padding: 3rem !important;\n  }\n  .px-lg-0 {\n    padding-right: 0 !important;\n    padding-left: 0 !important;\n  }\n  .px-lg-1 {\n    padding-right: 0.25rem !important;\n    padding-left: 0.25rem !important;\n  }\n  .px-lg-2 {\n    padding-right: 0.5rem !important;\n    padding-left: 0.5rem !important;\n  }\n  .px-lg-3 {\n    padding-right: 1rem !important;\n    padding-left: 1rem !important;\n  }\n  .px-lg-4 {\n    padding-right: 1.5rem !important;\n    padding-left: 1.5rem !important;\n  }\n  .px-lg-5 {\n    padding-right: 3rem !important;\n    padding-left: 3rem !important;\n  }\n  .py-lg-0 {\n    padding-top: 0 !important;\n    padding-bottom: 0 !important;\n  }\n  .py-lg-1 {\n    padding-top: 0.25rem !important;\n    padding-bottom: 0.25rem !important;\n  }\n  .py-lg-2 {\n    padding-top: 0.5rem !important;\n    padding-bottom: 0.5rem !important;\n  }\n  .py-lg-3 {\n    padding-top: 1rem !important;\n    padding-bottom: 1rem !important;\n  }\n  .py-lg-4 {\n    padding-top: 1.5rem !important;\n    padding-bottom: 1.5rem !important;\n  }\n  .py-lg-5 {\n    padding-top: 3rem !important;\n    padding-bottom: 3rem !important;\n  }\n  .pt-lg-0 {\n    padding-top: 0 !important;\n  }\n  .pt-lg-1 {\n    padding-top: 0.25rem !important;\n  }\n  .pt-lg-2 {\n    padding-top: 0.5rem !important;\n  }\n  .pt-lg-3 {\n    padding-top: 1rem !important;\n  }\n  .pt-lg-4 {\n    padding-top: 1.5rem !important;\n  }\n  .pt-lg-5 {\n    padding-top: 3rem !important;\n  }\n  .pe-lg-0 {\n    padding-right: 0 !important;\n  }\n  .pe-lg-1 {\n    padding-right: 0.25rem !important;\n  }\n  .pe-lg-2 {\n    padding-right: 0.5rem !important;\n  }\n  .pe-lg-3 {\n    padding-right: 1rem !important;\n  }\n  .pe-lg-4 {\n    padding-right: 1.5rem !important;\n  }\n  .pe-lg-5 {\n    padding-right: 3rem !important;\n  }\n  .pb-lg-0 {\n    padding-bottom: 0 !important;\n  }\n  .pb-lg-1 {\n    padding-bottom: 0.25rem !important;\n  }\n  .pb-lg-2 {\n    padding-bottom: 0.5rem !important;\n  }\n  .pb-lg-3 {\n    padding-bottom: 1rem !important;\n  }\n  .pb-lg-4 {\n    padding-bottom: 1.5rem !important;\n  }\n  .pb-lg-5 {\n    padding-bottom: 3rem !important;\n  }\n  .ps-lg-0 {\n    padding-left: 0 !important;\n  }\n  .ps-lg-1 {\n    padding-left: 0.25rem !important;\n  }\n  .ps-lg-2 {\n    padding-left: 0.5rem !important;\n  }\n  .ps-lg-3 {\n    padding-left: 1rem !important;\n  }\n  .ps-lg-4 {\n    padding-left: 1.5rem !important;\n  }\n  .ps-lg-5 {\n    padding-left: 3rem !important;\n  }\n  .text-lg-start {\n    text-align: left !important;\n  }\n  .text-lg-end {\n    text-align: right !important;\n  }\n  .text-lg-center {\n    text-align: center !important;\n  }\n}\n\n@media (min-width: 1200px) {\n  .float-xl-start {\n    float: left !important;\n  }\n  .float-xl-end {\n    float: right !important;\n  }\n  .float-xl-none {\n    float: none !important;\n  }\n  .d-xl-inline {\n    display: inline !important;\n  }\n  .d-xl-inline-block {\n    display: inline-block !important;\n  }\n  .d-xl-block {\n    display: block !important;\n  }\n  .d-xl-grid {\n    display: grid !important;\n  }\n  .d-xl-table {\n    display: table !important;\n  }\n  .d-xl-table-row {\n    display: table-row !important;\n  }\n  .d-xl-table-cell {\n    display: table-cell !important;\n  }\n  .d-xl-flex {\n    display: -ms-flexbox !important;\n    display: flex !important;\n  }\n  .d-xl-inline-flex {\n    display: -ms-inline-flexbox !important;\n    display: inline-flex !important;\n  }\n  .d-xl-none {\n    display: none !important;\n  }\n  .flex-xl-fill {\n    -ms-flex: 1 1 auto !important;\n    flex: 1 1 auto !important;\n  }\n  .flex-xl-row {\n    -ms-flex-direction: row !important;\n    flex-direction: row !important;\n  }\n  .flex-xl-column {\n    -ms-flex-direction: column !important;\n    flex-direction: column !important;\n  }\n  .flex-xl-row-reverse {\n    -ms-flex-direction: row-reverse !important;\n    flex-direction: row-reverse !important;\n  }\n  .flex-xl-column-reverse {\n    -ms-flex-direction: column-reverse !important;\n    flex-direction: column-reverse !important;\n  }\n  .flex-xl-grow-0 {\n    -ms-flex-positive: 0 !important;\n    flex-grow: 0 !important;\n  }\n  .flex-xl-grow-1 {\n    -ms-flex-positive: 1 !important;\n    flex-grow: 1 !important;\n  }\n  .flex-xl-shrink-0 {\n    -ms-flex-negative: 0 !important;\n    flex-shrink: 0 !important;\n  }\n  .flex-xl-shrink-1 {\n    -ms-flex-negative: 1 !important;\n    flex-shrink: 1 !important;\n  }\n  .flex-xl-wrap {\n    -ms-flex-wrap: wrap !important;\n    flex-wrap: wrap !important;\n  }\n  .flex-xl-nowrap {\n    -ms-flex-wrap: nowrap !important;\n    flex-wrap: nowrap !important;\n  }\n  .flex-xl-wrap-reverse {\n    -ms-flex-wrap: wrap-reverse !important;\n    flex-wrap: wrap-reverse !important;\n  }\n  .gap-xl-0 {\n    gap: 0 !important;\n  }\n  .gap-xl-1 {\n    gap: 0.25rem !important;\n  }\n  .gap-xl-2 {\n    gap: 0.5rem !important;\n  }\n  .gap-xl-3 {\n    gap: 1rem !important;\n  }\n  .gap-xl-4 {\n    gap: 1.5rem !important;\n  }\n  .gap-xl-5 {\n    gap: 3rem !important;\n  }\n  .justify-content-xl-start {\n    -ms-flex-pack: start !important;\n    justify-content: flex-start !important;\n  }\n  .justify-content-xl-end {\n    -ms-flex-pack: end !important;\n    justify-content: flex-end !important;\n  }\n  .justify-content-xl-center {\n    -ms-flex-pack: center !important;\n    justify-content: center !important;\n  }\n  .justify-content-xl-between {\n    -ms-flex-pack: justify !important;\n    justify-content: space-between !important;\n  }\n  .justify-content-xl-around {\n    -ms-flex-pack: distribute !important;\n    justify-content: space-around !important;\n  }\n  .justify-content-xl-evenly {\n    -ms-flex-pack: space-evenly !important;\n    justify-content: space-evenly !important;\n  }\n  .align-items-xl-start {\n    -ms-flex-align: start !important;\n    align-items: flex-start !important;\n  }\n  .align-items-xl-end {\n    -ms-flex-align: end !important;\n    align-items: flex-end !important;\n  }\n  .align-items-xl-center {\n    -ms-flex-align: center !important;\n    align-items: center !important;\n  }\n  .align-items-xl-baseline {\n    -ms-flex-align: baseline !important;\n    align-items: baseline !important;\n  }\n  .align-items-xl-stretch {\n    -ms-flex-align: stretch !important;\n    align-items: stretch !important;\n  }\n  .align-content-xl-start {\n    -ms-flex-line-pack: start !important;\n    align-content: flex-start !important;\n  }\n  .align-content-xl-end {\n    -ms-flex-line-pack: end !important;\n    align-content: flex-end !important;\n  }\n  .align-content-xl-center {\n    -ms-flex-line-pack: center !important;\n    align-content: center !important;\n  }\n  .align-content-xl-between {\n    -ms-flex-line-pack: justify !important;\n    align-content: space-between !important;\n  }\n  .align-content-xl-around {\n    -ms-flex-line-pack: distribute !important;\n    align-content: space-around !important;\n  }\n  .align-content-xl-stretch {\n    -ms-flex-line-pack: stretch !important;\n    align-content: stretch !important;\n  }\n  .align-self-xl-auto {\n    -ms-flex-item-align: auto !important;\n    align-self: auto !important;\n  }\n  .align-self-xl-start {\n    -ms-flex-item-align: start !important;\n    align-self: flex-start !important;\n  }\n  .align-self-xl-end {\n    -ms-flex-item-align: end !important;\n    align-self: flex-end !important;\n  }\n  .align-self-xl-center {\n    -ms-flex-item-align: center !important;\n    align-self: center !important;\n  }\n  .align-self-xl-baseline {\n    -ms-flex-item-align: baseline !important;\n    align-self: baseline !important;\n  }\n  .align-self-xl-stretch {\n    -ms-flex-item-align: stretch !important;\n    align-self: stretch !important;\n  }\n  .order-xl-first {\n    -ms-flex-order: -1 !important;\n    order: -1 !important;\n  }\n  .order-xl-0 {\n    -ms-flex-order: 0 !important;\n    order: 0 !important;\n  }\n  .order-xl-1 {\n    -ms-flex-order: 1 !important;\n    order: 1 !important;\n  }\n  .order-xl-2 {\n    -ms-flex-order: 2 !important;\n    order: 2 !important;\n  }\n  .order-xl-3 {\n    -ms-flex-order: 3 !important;\n    order: 3 !important;\n  }\n  .order-xl-4 {\n    -ms-flex-order: 4 !important;\n    order: 4 !important;\n  }\n  .order-xl-5 {\n    -ms-flex-order: 5 !important;\n    order: 5 !important;\n  }\n  .order-xl-last {\n    -ms-flex-order: 6 !important;\n    order: 6 !important;\n  }\n  .m-xl-0 {\n    margin: 0 !important;\n  }\n  .m-xl-1 {\n    margin: 0.25rem !important;\n  }\n  .m-xl-2 {\n    margin: 0.5rem !important;\n  }\n  .m-xl-3 {\n    margin: 1rem !important;\n  }\n  .m-xl-4 {\n    margin: 1.5rem !important;\n  }\n  .m-xl-5 {\n    margin: 3rem !important;\n  }\n  .m-xl-auto {\n    margin: auto !important;\n  }\n  .mx-xl-0 {\n    margin-right: 0 !important;\n    margin-left: 0 !important;\n  }\n  .mx-xl-1 {\n    margin-right: 0.25rem !important;\n    margin-left: 0.25rem !important;\n  }\n  .mx-xl-2 {\n    margin-right: 0.5rem !important;\n    margin-left: 0.5rem !important;\n  }\n  .mx-xl-3 {\n    margin-right: 1rem !important;\n    margin-left: 1rem !important;\n  }\n  .mx-xl-4 {\n    margin-right: 1.5rem !important;\n    margin-left: 1.5rem !important;\n  }\n  .mx-xl-5 {\n    margin-right: 3rem !important;\n    margin-left: 3rem !important;\n  }\n  .mx-xl-auto {\n    margin-right: auto !important;\n    margin-left: auto !important;\n  }\n  .my-xl-0 {\n    margin-top: 0 !important;\n    margin-bottom: 0 !important;\n  }\n  .my-xl-1 {\n    margin-top: 0.25rem !important;\n    margin-bottom: 0.25rem !important;\n  }\n  .my-xl-2 {\n    margin-top: 0.5rem !important;\n    margin-bottom: 0.5rem !important;\n  }\n  .my-xl-3 {\n    margin-top: 1rem !important;\n    margin-bottom: 1rem !important;\n  }\n  .my-xl-4 {\n    margin-top: 1.5rem !important;\n    margin-bottom: 1.5rem !important;\n  }\n  .my-xl-5 {\n    margin-top: 3rem !important;\n    margin-bottom: 3rem !important;\n  }\n  .my-xl-auto {\n    margin-top: auto !important;\n    margin-bottom: auto !important;\n  }\n  .mt-xl-0 {\n    margin-top: 0 !important;\n  }\n  .mt-xl-1 {\n    margin-top: 0.25rem !important;\n  }\n  .mt-xl-2 {\n    margin-top: 0.5rem !important;\n  }\n  .mt-xl-3 {\n    margin-top: 1rem !important;\n  }\n  .mt-xl-4 {\n    margin-top: 1.5rem !important;\n  }\n  .mt-xl-5 {\n    margin-top: 3rem !important;\n  }\n  .mt-xl-auto {\n    margin-top: auto !important;\n  }\n  .me-xl-0 {\n    margin-right: 0 !important;\n  }\n  .me-xl-1 {\n    margin-right: 0.25rem !important;\n  }\n  .me-xl-2 {\n    margin-right: 0.5rem !important;\n  }\n  .me-xl-3 {\n    margin-right: 1rem !important;\n  }\n  .me-xl-4 {\n    margin-right: 1.5rem !important;\n  }\n  .me-xl-5 {\n    margin-right: 3rem !important;\n  }\n  .me-xl-auto {\n    margin-right: auto !important;\n  }\n  .mb-xl-0 {\n    margin-bottom: 0 !important;\n  }\n  .mb-xl-1 {\n    margin-bottom: 0.25rem !important;\n  }\n  .mb-xl-2 {\n    margin-bottom: 0.5rem !important;\n  }\n  .mb-xl-3 {\n    margin-bottom: 1rem !important;\n  }\n  .mb-xl-4 {\n    margin-bottom: 1.5rem !important;\n  }\n  .mb-xl-5 {\n    margin-bottom: 3rem !important;\n  }\n  .mb-xl-auto {\n    margin-bottom: auto !important;\n  }\n  .ms-xl-0 {\n    margin-left: 0 !important;\n  }\n  .ms-xl-1 {\n    margin-left: 0.25rem !important;\n  }\n  .ms-xl-2 {\n    margin-left: 0.5rem !important;\n  }\n  .ms-xl-3 {\n    margin-left: 1rem !important;\n  }\n  .ms-xl-4 {\n    margin-left: 1.5rem !important;\n  }\n  .ms-xl-5 {\n    margin-left: 3rem !important;\n  }\n  .ms-xl-auto {\n    margin-left: auto !important;\n  }\n  .p-xl-0 {\n    padding: 0 !important;\n  }\n  .p-xl-1 {\n    padding: 0.25rem !important;\n  }\n  .p-xl-2 {\n    padding: 0.5rem !important;\n  }\n  .p-xl-3 {\n    padding: 1rem !important;\n  }\n  .p-xl-4 {\n    padding: 1.5rem !important;\n  }\n  .p-xl-5 {\n    padding: 3rem !important;\n  }\n  .px-xl-0 {\n    padding-right: 0 !important;\n    padding-left: 0 !important;\n  }\n  .px-xl-1 {\n    padding-right: 0.25rem !important;\n    padding-left: 0.25rem !important;\n  }\n  .px-xl-2 {\n    padding-right: 0.5rem !important;\n    padding-left: 0.5rem !important;\n  }\n  .px-xl-3 {\n    padding-right: 1rem !important;\n    padding-left: 1rem !important;\n  }\n  .px-xl-4 {\n    padding-right: 1.5rem !important;\n    padding-left: 1.5rem !important;\n  }\n  .px-xl-5 {\n    padding-right: 3rem !important;\n    padding-left: 3rem !important;\n  }\n  .py-xl-0 {\n    padding-top: 0 !important;\n    padding-bottom: 0 !important;\n  }\n  .py-xl-1 {\n    padding-top: 0.25rem !important;\n    padding-bottom: 0.25rem !important;\n  }\n  .py-xl-2 {\n    padding-top: 0.5rem !important;\n    padding-bottom: 0.5rem !important;\n  }\n  .py-xl-3 {\n    padding-top: 1rem !important;\n    padding-bottom: 1rem !important;\n  }\n  .py-xl-4 {\n    padding-top: 1.5rem !important;\n    padding-bottom: 1.5rem !important;\n  }\n  .py-xl-5 {\n    padding-top: 3rem !important;\n    padding-bottom: 3rem !important;\n  }\n  .pt-xl-0 {\n    padding-top: 0 !important;\n  }\n  .pt-xl-1 {\n    padding-top: 0.25rem !important;\n  }\n  .pt-xl-2 {\n    padding-top: 0.5rem !important;\n  }\n  .pt-xl-3 {\n    padding-top: 1rem !important;\n  }\n  .pt-xl-4 {\n    padding-top: 1.5rem !important;\n  }\n  .pt-xl-5 {\n    padding-top: 3rem !important;\n  }\n  .pe-xl-0 {\n    padding-right: 0 !important;\n  }\n  .pe-xl-1 {\n    padding-right: 0.25rem !important;\n  }\n  .pe-xl-2 {\n    padding-right: 0.5rem !important;\n  }\n  .pe-xl-3 {\n    padding-right: 1rem !important;\n  }\n  .pe-xl-4 {\n    padding-right: 1.5rem !important;\n  }\n  .pe-xl-5 {\n    padding-right: 3rem !important;\n  }\n  .pb-xl-0 {\n    padding-bottom: 0 !important;\n  }\n  .pb-xl-1 {\n    padding-bottom: 0.25rem !important;\n  }\n  .pb-xl-2 {\n    padding-bottom: 0.5rem !important;\n  }\n  .pb-xl-3 {\n    padding-bottom: 1rem !important;\n  }\n  .pb-xl-4 {\n    padding-bottom: 1.5rem !important;\n  }\n  .pb-xl-5 {\n    padding-bottom: 3rem !important;\n  }\n  .ps-xl-0 {\n    padding-left: 0 !important;\n  }\n  .ps-xl-1 {\n    padding-left: 0.25rem !important;\n  }\n  .ps-xl-2 {\n    padding-left: 0.5rem !important;\n  }\n  .ps-xl-3 {\n    padding-left: 1rem !important;\n  }\n  .ps-xl-4 {\n    padding-left: 1.5rem !important;\n  }\n  .ps-xl-5 {\n    padding-left: 3rem !important;\n  }\n  .text-xl-start {\n    text-align: left !important;\n  }\n  .text-xl-end {\n    text-align: right !important;\n  }\n  .text-xl-center {\n    text-align: center !important;\n  }\n}\n\n@media (min-width: 1400px) {\n  .float-xxl-start {\n    float: left !important;\n  }\n  .float-xxl-end {\n    float: right !important;\n  }\n  .float-xxl-none {\n    float: none !important;\n  }\n  .d-xxl-inline {\n    display: inline !important;\n  }\n  .d-xxl-inline-block {\n    display: inline-block !important;\n  }\n  .d-xxl-block {\n    display: block !important;\n  }\n  .d-xxl-grid {\n    display: grid !important;\n  }\n  .d-xxl-table {\n    display: table !important;\n  }\n  .d-xxl-table-row {\n    display: table-row !important;\n  }\n  .d-xxl-table-cell {\n    display: table-cell !important;\n  }\n  .d-xxl-flex {\n    display: -ms-flexbox !important;\n    display: flex !important;\n  }\n  .d-xxl-inline-flex {\n    display: -ms-inline-flexbox !important;\n    display: inline-flex !important;\n  }\n  .d-xxl-none {\n    display: none !important;\n  }\n  .flex-xxl-fill {\n    -ms-flex: 1 1 auto !important;\n    flex: 1 1 auto !important;\n  }\n  .flex-xxl-row {\n    -ms-flex-direction: row !important;\n    flex-direction: row !important;\n  }\n  .flex-xxl-column {\n    -ms-flex-direction: column !important;\n    flex-direction: column !important;\n  }\n  .flex-xxl-row-reverse {\n    -ms-flex-direction: row-reverse !important;\n    flex-direction: row-reverse !important;\n  }\n  .flex-xxl-column-reverse {\n    -ms-flex-direction: column-reverse !important;\n    flex-direction: column-reverse !important;\n  }\n  .flex-xxl-grow-0 {\n    -ms-flex-positive: 0 !important;\n    flex-grow: 0 !important;\n  }\n  .flex-xxl-grow-1 {\n    -ms-flex-positive: 1 !important;\n    flex-grow: 1 !important;\n  }\n  .flex-xxl-shrink-0 {\n    -ms-flex-negative: 0 !important;\n    flex-shrink: 0 !important;\n  }\n  .flex-xxl-shrink-1 {\n    -ms-flex-negative: 1 !important;\n    flex-shrink: 1 !important;\n  }\n  .flex-xxl-wrap {\n    -ms-flex-wrap: wrap !important;\n    flex-wrap: wrap !important;\n  }\n  .flex-xxl-nowrap {\n    -ms-flex-wrap: nowrap !important;\n    flex-wrap: nowrap !important;\n  }\n  .flex-xxl-wrap-reverse {\n    -ms-flex-wrap: wrap-reverse !important;\n    flex-wrap: wrap-reverse !important;\n  }\n  .gap-xxl-0 {\n    gap: 0 !important;\n  }\n  .gap-xxl-1 {\n    gap: 0.25rem !important;\n  }\n  .gap-xxl-2 {\n    gap: 0.5rem !important;\n  }\n  .gap-xxl-3 {\n    gap: 1rem !important;\n  }\n  .gap-xxl-4 {\n    gap: 1.5rem !important;\n  }\n  .gap-xxl-5 {\n    gap: 3rem !important;\n  }\n  .justify-content-xxl-start {\n    -ms-flex-pack: start !important;\n    justify-content: flex-start !important;\n  }\n  .justify-content-xxl-end {\n    -ms-flex-pack: end !important;\n    justify-content: flex-end !important;\n  }\n  .justify-content-xxl-center {\n    -ms-flex-pack: center !important;\n    justify-content: center !important;\n  }\n  .justify-content-xxl-between {\n    -ms-flex-pack: justify !important;\n    justify-content: space-between !important;\n  }\n  .justify-content-xxl-around {\n    -ms-flex-pack: distribute !important;\n    justify-content: space-around !important;\n  }\n  .justify-content-xxl-evenly {\n    -ms-flex-pack: space-evenly !important;\n    justify-content: space-evenly !important;\n  }\n  .align-items-xxl-start {\n    -ms-flex-align: start !important;\n    align-items: flex-start !important;\n  }\n  .align-items-xxl-end {\n    -ms-flex-align: end !important;\n    align-items: flex-end !important;\n  }\n  .align-items-xxl-center {\n    -ms-flex-align: center !important;\n    align-items: center !important;\n  }\n  .align-items-xxl-baseline {\n    -ms-flex-align: baseline !important;\n    align-items: baseline !important;\n  }\n  .align-items-xxl-stretch {\n    -ms-flex-align: stretch !important;\n    align-items: stretch !important;\n  }\n  .align-content-xxl-start {\n    -ms-flex-line-pack: start !important;\n    align-content: flex-start !important;\n  }\n  .align-content-xxl-end {\n    -ms-flex-line-pack: end !important;\n    align-content: flex-end !important;\n  }\n  .align-content-xxl-center {\n    -ms-flex-line-pack: center !important;\n    align-content: center !important;\n  }\n  .align-content-xxl-between {\n    -ms-flex-line-pack: justify !important;\n    align-content: space-between !important;\n  }\n  .align-content-xxl-around {\n    -ms-flex-line-pack: distribute !important;\n    align-content: space-around !important;\n  }\n  .align-content-xxl-stretch {\n    -ms-flex-line-pack: stretch !important;\n    align-content: stretch !important;\n  }\n  .align-self-xxl-auto {\n    -ms-flex-item-align: auto !important;\n    align-self: auto !important;\n  }\n  .align-self-xxl-start {\n    -ms-flex-item-align: start !important;\n    align-self: flex-start !important;\n  }\n  .align-self-xxl-end {\n    -ms-flex-item-align: end !important;\n    align-self: flex-end !important;\n  }\n  .align-self-xxl-center {\n    -ms-flex-item-align: center !important;\n    align-self: center !important;\n  }\n  .align-self-xxl-baseline {\n    -ms-flex-item-align: baseline !important;\n    align-self: baseline !important;\n  }\n  .align-self-xxl-stretch {\n    -ms-flex-item-align: stretch !important;\n    align-self: stretch !important;\n  }\n  .order-xxl-first {\n    -ms-flex-order: -1 !important;\n    order: -1 !important;\n  }\n  .order-xxl-0 {\n    -ms-flex-order: 0 !important;\n    order: 0 !important;\n  }\n  .order-xxl-1 {\n    -ms-flex-order: 1 !important;\n    order: 1 !important;\n  }\n  .order-xxl-2 {\n    -ms-flex-order: 2 !important;\n    order: 2 !important;\n  }\n  .order-xxl-3 {\n    -ms-flex-order: 3 !important;\n    order: 3 !important;\n  }\n  .order-xxl-4 {\n    -ms-flex-order: 4 !important;\n    order: 4 !important;\n  }\n  .order-xxl-5 {\n    -ms-flex-order: 5 !important;\n    order: 5 !important;\n  }\n  .order-xxl-last {\n    -ms-flex-order: 6 !important;\n    order: 6 !important;\n  }\n  .m-xxl-0 {\n    margin: 0 !important;\n  }\n  .m-xxl-1 {\n    margin: 0.25rem !important;\n  }\n  .m-xxl-2 {\n    margin: 0.5rem !important;\n  }\n  .m-xxl-3 {\n    margin: 1rem !important;\n  }\n  .m-xxl-4 {\n    margin: 1.5rem !important;\n  }\n  .m-xxl-5 {\n    margin: 3rem !important;\n  }\n  .m-xxl-auto {\n    margin: auto !important;\n  }\n  .mx-xxl-0 {\n    margin-right: 0 !important;\n    margin-left: 0 !important;\n  }\n  .mx-xxl-1 {\n    margin-right: 0.25rem !important;\n    margin-left: 0.25rem !important;\n  }\n  .mx-xxl-2 {\n    margin-right: 0.5rem !important;\n    margin-left: 0.5rem !important;\n  }\n  .mx-xxl-3 {\n    margin-right: 1rem !important;\n    margin-left: 1rem !important;\n  }\n  .mx-xxl-4 {\n    margin-right: 1.5rem !important;\n    margin-left: 1.5rem !important;\n  }\n  .mx-xxl-5 {\n    margin-right: 3rem !important;\n    margin-left: 3rem !important;\n  }\n  .mx-xxl-auto {\n    margin-right: auto !important;\n    margin-left: auto !important;\n  }\n  .my-xxl-0 {\n    margin-top: 0 !important;\n    margin-bottom: 0 !important;\n  }\n  .my-xxl-1 {\n    margin-top: 0.25rem !important;\n    margin-bottom: 0.25rem !important;\n  }\n  .my-xxl-2 {\n    margin-top: 0.5rem !important;\n    margin-bottom: 0.5rem !important;\n  }\n  .my-xxl-3 {\n    margin-top: 1rem !important;\n    margin-bottom: 1rem !important;\n  }\n  .my-xxl-4 {\n    margin-top: 1.5rem !important;\n    margin-bottom: 1.5rem !important;\n  }\n  .my-xxl-5 {\n    margin-top: 3rem !important;\n    margin-bottom: 3rem !important;\n  }\n  .my-xxl-auto {\n    margin-top: auto !important;\n    margin-bottom: auto !important;\n  }\n  .mt-xxl-0 {\n    margin-top: 0 !important;\n  }\n  .mt-xxl-1 {\n    margin-top: 0.25rem !important;\n  }\n  .mt-xxl-2 {\n    margin-top: 0.5rem !important;\n  }\n  .mt-xxl-3 {\n    margin-top: 1rem !important;\n  }\n  .mt-xxl-4 {\n    margin-top: 1.5rem !important;\n  }\n  .mt-xxl-5 {\n    margin-top: 3rem !important;\n  }\n  .mt-xxl-auto {\n    margin-top: auto !important;\n  }\n  .me-xxl-0 {\n    margin-right: 0 !important;\n  }\n  .me-xxl-1 {\n    margin-right: 0.25rem !important;\n  }\n  .me-xxl-2 {\n    margin-right: 0.5rem !important;\n  }\n  .me-xxl-3 {\n    margin-right: 1rem !important;\n  }\n  .me-xxl-4 {\n    margin-right: 1.5rem !important;\n  }\n  .me-xxl-5 {\n    margin-right: 3rem !important;\n  }\n  .me-xxl-auto {\n    margin-right: auto !important;\n  }\n  .mb-xxl-0 {\n    margin-bottom: 0 !important;\n  }\n  .mb-xxl-1 {\n    margin-bottom: 0.25rem !important;\n  }\n  .mb-xxl-2 {\n    margin-bottom: 0.5rem !important;\n  }\n  .mb-xxl-3 {\n    margin-bottom: 1rem !important;\n  }\n  .mb-xxl-4 {\n    margin-bottom: 1.5rem !important;\n  }\n  .mb-xxl-5 {\n    margin-bottom: 3rem !important;\n  }\n  .mb-xxl-auto {\n    margin-bottom: auto !important;\n  }\n  .ms-xxl-0 {\n    margin-left: 0 !important;\n  }\n  .ms-xxl-1 {\n    margin-left: 0.25rem !important;\n  }\n  .ms-xxl-2 {\n    margin-left: 0.5rem !important;\n  }\n  .ms-xxl-3 {\n    margin-left: 1rem !important;\n  }\n  .ms-xxl-4 {\n    margin-left: 1.5rem !important;\n  }\n  .ms-xxl-5 {\n    margin-left: 3rem !important;\n  }\n  .ms-xxl-auto {\n    margin-left: auto !important;\n  }\n  .p-xxl-0 {\n    padding: 0 !important;\n  }\n  .p-xxl-1 {\n    padding: 0.25rem !important;\n  }\n  .p-xxl-2 {\n    padding: 0.5rem !important;\n  }\n  .p-xxl-3 {\n    padding: 1rem !important;\n  }\n  .p-xxl-4 {\n    padding: 1.5rem !important;\n  }\n  .p-xxl-5 {\n    padding: 3rem !important;\n  }\n  .px-xxl-0 {\n    padding-right: 0 !important;\n    padding-left: 0 !important;\n  }\n  .px-xxl-1 {\n    padding-right: 0.25rem !important;\n    padding-left: 0.25rem !important;\n  }\n  .px-xxl-2 {\n    padding-right: 0.5rem !important;\n    padding-left: 0.5rem !important;\n  }\n  .px-xxl-3 {\n    padding-right: 1rem !important;\n    padding-left: 1rem !important;\n  }\n  .px-xxl-4 {\n    padding-right: 1.5rem !important;\n    padding-left: 1.5rem !important;\n  }\n  .px-xxl-5 {\n    padding-right: 3rem !important;\n    padding-left: 3rem !important;\n  }\n  .py-xxl-0 {\n    padding-top: 0 !important;\n    padding-bottom: 0 !important;\n  }\n  .py-xxl-1 {\n    padding-top: 0.25rem !important;\n    padding-bottom: 0.25rem !important;\n  }\n  .py-xxl-2 {\n    padding-top: 0.5rem !important;\n    padding-bottom: 0.5rem !important;\n  }\n  .py-xxl-3 {\n    padding-top: 1rem !important;\n    padding-bottom: 1rem !important;\n  }\n  .py-xxl-4 {\n    padding-top: 1.5rem !important;\n    padding-bottom: 1.5rem !important;\n  }\n  .py-xxl-5 {\n    padding-top: 3rem !important;\n    padding-bottom: 3rem !important;\n  }\n  .pt-xxl-0 {\n    padding-top: 0 !important;\n  }\n  .pt-xxl-1 {\n    padding-top: 0.25rem !important;\n  }\n  .pt-xxl-2 {\n    padding-top: 0.5rem !important;\n  }\n  .pt-xxl-3 {\n    padding-top: 1rem !important;\n  }\n  .pt-xxl-4 {\n    padding-top: 1.5rem !important;\n  }\n  .pt-xxl-5 {\n    padding-top: 3rem !important;\n  }\n  .pe-xxl-0 {\n    padding-right: 0 !important;\n  }\n  .pe-xxl-1 {\n    padding-right: 0.25rem !important;\n  }\n  .pe-xxl-2 {\n    padding-right: 0.5rem !important;\n  }\n  .pe-xxl-3 {\n    padding-right: 1rem !important;\n  }\n  .pe-xxl-4 {\n    padding-right: 1.5rem !important;\n  }\n  .pe-xxl-5 {\n    padding-right: 3rem !important;\n  }\n  .pb-xxl-0 {\n    padding-bottom: 0 !important;\n  }\n  .pb-xxl-1 {\n    padding-bottom: 0.25rem !important;\n  }\n  .pb-xxl-2 {\n    padding-bottom: 0.5rem !important;\n  }\n  .pb-xxl-3 {\n    padding-bottom: 1rem !important;\n  }\n  .pb-xxl-4 {\n    padding-bottom: 1.5rem !important;\n  }\n  .pb-xxl-5 {\n    padding-bottom: 3rem !important;\n  }\n  .ps-xxl-0 {\n    padding-left: 0 !important;\n  }\n  .ps-xxl-1 {\n    padding-left: 0.25rem !important;\n  }\n  .ps-xxl-2 {\n    padding-left: 0.5rem !important;\n  }\n  .ps-xxl-3 {\n    padding-left: 1rem !important;\n  }\n  .ps-xxl-4 {\n    padding-left: 1.5rem !important;\n  }\n  .ps-xxl-5 {\n    padding-left: 3rem !important;\n  }\n  .text-xxl-start {\n    text-align: left !important;\n  }\n  .text-xxl-end {\n    text-align: right !important;\n  }\n  .text-xxl-center {\n    text-align: center !important;\n  }\n}\n\n@media (min-width: 1200px) {\n  .fs-1 {\n    font-size: 3rem !important;\n  }\n  .fs-2 {\n    font-size: 2.5rem !important;\n  }\n  .fs-3 {\n    font-size: 2rem !important;\n  }\n  .fs-4 {\n    font-size: 1.5rem !important;\n  }\n}\n\n@media print {\n  .d-print-inline {\n    display: inline !important;\n  }\n  .d-print-inline-block {\n    display: inline-block !important;\n  }\n  .d-print-block {\n    display: block !important;\n  }\n  .d-print-grid {\n    display: grid !important;\n  }\n  .d-print-table {\n    display: table !important;\n  }\n  .d-print-table-row {\n    display: table-row !important;\n  }\n  .d-print-table-cell {\n    display: table-cell !important;\n  }\n  .d-print-flex {\n    display: -ms-flexbox !important;\n    display: flex !important;\n  }\n  .d-print-inline-flex {\n    display: -ms-inline-flexbox !important;\n    display: inline-flex !important;\n  }\n  .d-print-none {\n    display: none !important;\n  }\n}\n\n.bg-primary .navbar-nav .show > .nav-link,\n.bg-primary .navbar-nav .nav-link.active,\n.bg-primary .navbar-nav .nav-link:hover,\n.bg-primary .navbar-nav .nav-link:focus {\n  color: #18bc9c !important;\n}\n\n.nav-tabs .nav-link.active,\n.nav-tabs .nav-link.active:focus,\n.nav-tabs .nav-link.active:hover,\n.nav-tabs .nav-item.open .nav-link,\n.nav-tabs .nav-item.open .nav-link:focus,\n.nav-tabs .nav-item.open .nav-link:hover {\n  color: #2c3e50;\n}\n\n.pagination a:hover {\n  text-decoration: none;\n}\n\n.badge.bg-light {\n  color: #7b8a8b;\n}\n\n.alert {\n  border: none;\n  color: #fff;\n}\n\n.alert a,\n.alert .alert-link {\n  color: #fff;\n  text-decoration: underline;\n}\n\n.alert-primary {\n  background-color: #2c3e50;\n}\n\n.alert-secondary {\n  background-color: #95a5a6;\n}\n\n.alert-success {\n  background-color: #18bc9c;\n}\n\n.alert-info {\n  background-color: #3498db;\n}\n\n.alert-warning {\n  background-color: #f39c12;\n}\n\n.alert-danger {\n  background-color: #e74c3c;\n}\n\n.alert-light {\n  background-color: #ecf0f1;\n}\n\n.alert-dark {\n  background-color: #7b8a8b;\n}\n\n.alert-light,\n.alert-light a,\n.alert-light .alert-link {\n  color: #212529;\n}\n\n.modal .btn-close,\n.toast .btn-close {\n  background-image: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23000'><path d='M.293.293a1 1 0 011.414 0L8 6.586 14.293.293a1 1 0 111.414 1.414L9.414 8l6.293 6.293a1 1 0 01-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 01-1.414-1.414L6.586 8 .293 1.707a1 1 0 010-1.414z'/></svg>\");\n}\n"
  },
  {
    "path": "src/sourceDev.WebApp/SharedThemes/flatly/wwwroot/css/fontawesome-all.css",
    "content": "/*!\n * Font Awesome Free 5.0.8 by @fontawesome - https://fontawesome.com\n * License - https://fontawesome.com/license (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)\n */\n.fa,\n.fas,\n.far,\n.fal,\n.fab {\n  -moz-osx-font-smoothing: grayscale;\n  -webkit-font-smoothing: antialiased;\n  display: inline-block;\n  font-style: normal;\n  font-variant: normal;\n  text-rendering: auto;\n  line-height: 1; }\n\n.fa-lg {\n  font-size: 1.33333em;\n  line-height: 0.75em;\n  vertical-align: -.0667em; }\n\n.fa-xs {\n  font-size: .75em; }\n\n.fa-sm {\n  font-size: .875em; }\n\n.fa-1x {\n  font-size: 1em; }\n\n.fa-2x {\n  font-size: 2em; }\n\n.fa-3x {\n  font-size: 3em; }\n\n.fa-4x {\n  font-size: 4em; }\n\n.fa-5x {\n  font-size: 5em; }\n\n.fa-6x {\n  font-size: 6em; }\n\n.fa-7x {\n  font-size: 7em; }\n\n.fa-8x {\n  font-size: 8em; }\n\n.fa-9x {\n  font-size: 9em; }\n\n.fa-10x {\n  font-size: 10em; }\n\n.fa-fw {\n  text-align: center;\n  width: 1.25em; }\n\n.fa-ul {\n  list-style-type: none;\n  margin-left: 2.5em;\n  padding-left: 0; }\n  .fa-ul > li {\n    position: relative; }\n\n.fa-li {\n  left: -2em;\n  position: absolute;\n  text-align: center;\n  width: 2em;\n  line-height: inherit; }\n\n.fa-border {\n  border: solid 0.08em #eee;\n  border-radius: .1em;\n  padding: .2em .25em .15em; }\n\n.fa-pull-left {\n  float: left; }\n\n.fa-pull-right {\n  float: right; }\n\n.fa.fa-pull-left,\n.fas.fa-pull-left,\n.far.fa-pull-left,\n.fal.fa-pull-left,\n.fab.fa-pull-left {\n  margin-right: .3em; }\n\n.fa.fa-pull-right,\n.fas.fa-pull-right,\n.far.fa-pull-right,\n.fal.fa-pull-right,\n.fab.fa-pull-right {\n  margin-left: .3em; }\n\n.fa-spin {\n  -webkit-animation: fa-spin 2s infinite linear;\n          animation: fa-spin 2s infinite linear; }\n\n.fa-pulse {\n  -webkit-animation: fa-spin 1s infinite steps(8);\n          animation: fa-spin 1s infinite steps(8); }\n\n@-webkit-keyframes fa-spin {\n  0% {\n    -webkit-transform: rotate(0deg);\n            transform: rotate(0deg); }\n  100% {\n    -webkit-transform: rotate(360deg);\n            transform: rotate(360deg); } }\n\n@keyframes fa-spin {\n  0% {\n    -webkit-transform: rotate(0deg);\n            transform: rotate(0deg); }\n  100% {\n    -webkit-transform: rotate(360deg);\n            transform: rotate(360deg); } }\n\n.fa-rotate-90 {\n  -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)\";\n  -webkit-transform: rotate(90deg);\n          transform: rotate(90deg); }\n\n.fa-rotate-180 {\n  -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)\";\n  -webkit-transform: rotate(180deg);\n          transform: rotate(180deg); }\n\n.fa-rotate-270 {\n  -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)\";\n  -webkit-transform: rotate(270deg);\n          transform: rotate(270deg); }\n\n.fa-flip-horizontal {\n  -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)\";\n  -webkit-transform: scale(-1, 1);\n          transform: scale(-1, 1); }\n\n.fa-flip-vertical {\n  -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)\";\n  -webkit-transform: scale(1, -1);\n          transform: scale(1, -1); }\n\n.fa-flip-horizontal.fa-flip-vertical {\n  -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)\";\n  -webkit-transform: scale(-1, -1);\n          transform: scale(-1, -1); }\n\n:root .fa-rotate-90,\n:root .fa-rotate-180,\n:root .fa-rotate-270,\n:root .fa-flip-horizontal,\n:root .fa-flip-vertical {\n  -webkit-filter: none;\n          filter: none; }\n\n.fa-stack {\n  display: inline-block;\n  height: 2em;\n  line-height: 2em;\n  position: relative;\n  vertical-align: middle;\n  width: 2em; }\n\n.fa-stack-1x,\n.fa-stack-2x {\n  left: 0;\n  position: absolute;\n  text-align: center;\n  width: 100%; }\n\n.fa-stack-1x {\n  line-height: inherit; }\n\n.fa-stack-2x {\n  font-size: 2em; }\n\n.fa-inverse {\n  color: #fff; }\n\n/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen\nreaders do not read off random characters that represent icons */\n.fa-500px:before {\n  content: \"\\f26e\"; }\n\n.fa-accessible-icon:before {\n  content: \"\\f368\"; }\n\n.fa-accusoft:before {\n  content: \"\\f369\"; }\n\n.fa-address-book:before {\n  content: \"\\f2b9\"; }\n\n.fa-address-card:before {\n  content: \"\\f2bb\"; }\n\n.fa-adjust:before {\n  content: \"\\f042\"; }\n\n.fa-adn:before {\n  content: \"\\f170\"; }\n\n.fa-adversal:before {\n  content: \"\\f36a\"; }\n\n.fa-affiliatetheme:before {\n  content: \"\\f36b\"; }\n\n.fa-algolia:before {\n  content: \"\\f36c\"; }\n\n.fa-align-center:before {\n  content: \"\\f037\"; }\n\n.fa-align-justify:before {\n  content: \"\\f039\"; }\n\n.fa-align-left:before {\n  content: \"\\f036\"; }\n\n.fa-align-right:before {\n  content: \"\\f038\"; }\n\n.fa-amazon:before {\n  content: \"\\f270\"; }\n\n.fa-amazon-pay:before {\n  content: \"\\f42c\"; }\n\n.fa-ambulance:before {\n  content: \"\\f0f9\"; }\n\n.fa-american-sign-language-interpreting:before {\n  content: \"\\f2a3\"; }\n\n.fa-amilia:before {\n  content: \"\\f36d\"; }\n\n.fa-anchor:before {\n  content: \"\\f13d\"; }\n\n.fa-android:before {\n  content: \"\\f17b\"; }\n\n.fa-angellist:before {\n  content: \"\\f209\"; }\n\n.fa-angle-double-down:before {\n  content: \"\\f103\"; }\n\n.fa-angle-double-left:before {\n  content: \"\\f100\"; }\n\n.fa-angle-double-right:before {\n  content: \"\\f101\"; }\n\n.fa-angle-double-up:before {\n  content: \"\\f102\"; }\n\n.fa-angle-down:before {\n  content: \"\\f107\"; }\n\n.fa-angle-left:before {\n  content: \"\\f104\"; }\n\n.fa-angle-right:before {\n  content: \"\\f105\"; }\n\n.fa-angle-up:before {\n  content: \"\\f106\"; }\n\n.fa-angrycreative:before {\n  content: \"\\f36e\"; }\n\n.fa-angular:before {\n  content: \"\\f420\"; }\n\n.fa-app-store:before {\n  content: \"\\f36f\"; }\n\n.fa-app-store-ios:before {\n  content: \"\\f370\"; }\n\n.fa-apper:before {\n  content: \"\\f371\"; }\n\n.fa-apple:before {\n  content: \"\\f179\"; }\n\n.fa-apple-pay:before {\n  content: \"\\f415\"; }\n\n.fa-archive:before {\n  content: \"\\f187\"; }\n\n.fa-arrow-alt-circle-down:before {\n  content: \"\\f358\"; }\n\n.fa-arrow-alt-circle-left:before {\n  content: \"\\f359\"; }\n\n.fa-arrow-alt-circle-right:before {\n  content: \"\\f35a\"; }\n\n.fa-arrow-alt-circle-up:before {\n  content: \"\\f35b\"; }\n\n.fa-arrow-circle-down:before {\n  content: \"\\f0ab\"; }\n\n.fa-arrow-circle-left:before {\n  content: \"\\f0a8\"; }\n\n.fa-arrow-circle-right:before {\n  content: \"\\f0a9\"; }\n\n.fa-arrow-circle-up:before {\n  content: \"\\f0aa\"; }\n\n.fa-arrow-down:before {\n  content: \"\\f063\"; }\n\n.fa-arrow-left:before {\n  content: \"\\f060\"; }\n\n.fa-arrow-right:before {\n  content: \"\\f061\"; }\n\n.fa-arrow-up:before {\n  content: \"\\f062\"; }\n\n.fa-arrows-alt:before {\n  content: \"\\f0b2\"; }\n\n.fa-arrows-alt-h:before {\n  content: \"\\f337\"; }\n\n.fa-arrows-alt-v:before {\n  content: \"\\f338\"; }\n\n.fa-assistive-listening-systems:before {\n  content: \"\\f2a2\"; }\n\n.fa-asterisk:before {\n  content: \"\\f069\"; }\n\n.fa-asymmetrik:before {\n  content: \"\\f372\"; }\n\n.fa-at:before {\n  content: \"\\f1fa\"; }\n\n.fa-audible:before {\n  content: \"\\f373\"; }\n\n.fa-audio-description:before {\n  content: \"\\f29e\"; }\n\n.fa-autoprefixer:before {\n  content: \"\\f41c\"; }\n\n.fa-avianex:before {\n  content: \"\\f374\"; }\n\n.fa-aviato:before {\n  content: \"\\f421\"; }\n\n.fa-aws:before {\n  content: \"\\f375\"; }\n\n.fa-backward:before {\n  content: \"\\f04a\"; }\n\n.fa-balance-scale:before {\n  content: \"\\f24e\"; }\n\n.fa-ban:before {\n  content: \"\\f05e\"; }\n\n.fa-band-aid:before {\n  content: \"\\f462\"; }\n\n.fa-bandcamp:before {\n  content: \"\\f2d5\"; }\n\n.fa-barcode:before {\n  content: \"\\f02a\"; }\n\n.fa-bars:before {\n  content: \"\\f0c9\"; }\n\n.fa-baseball-ball:before {\n  content: \"\\f433\"; }\n\n.fa-basketball-ball:before {\n  content: \"\\f434\"; }\n\n.fa-bath:before {\n  content: \"\\f2cd\"; }\n\n.fa-battery-empty:before {\n  content: \"\\f244\"; }\n\n.fa-battery-full:before {\n  content: \"\\f240\"; }\n\n.fa-battery-half:before {\n  content: \"\\f242\"; }\n\n.fa-battery-quarter:before {\n  content: \"\\f243\"; }\n\n.fa-battery-three-quarters:before {\n  content: \"\\f241\"; }\n\n.fa-bed:before {\n  content: \"\\f236\"; }\n\n.fa-beer:before {\n  content: \"\\f0fc\"; }\n\n.fa-behance:before {\n  content: \"\\f1b4\"; }\n\n.fa-behance-square:before {\n  content: \"\\f1b5\"; }\n\n.fa-bell:before {\n  content: \"\\f0f3\"; }\n\n.fa-bell-slash:before {\n  content: \"\\f1f6\"; }\n\n.fa-bicycle:before {\n  content: \"\\f206\"; }\n\n.fa-bimobject:before {\n  content: \"\\f378\"; }\n\n.fa-binoculars:before {\n  content: \"\\f1e5\"; }\n\n.fa-birthday-cake:before {\n  content: \"\\f1fd\"; }\n\n.fa-bitbucket:before {\n  content: \"\\f171\"; }\n\n.fa-bitcoin:before {\n  content: \"\\f379\"; }\n\n.fa-bity:before {\n  content: \"\\f37a\"; }\n\n.fa-black-tie:before {\n  content: \"\\f27e\"; }\n\n.fa-blackberry:before {\n  content: \"\\f37b\"; }\n\n.fa-blind:before {\n  content: \"\\f29d\"; }\n\n.fa-blogger:before {\n  content: \"\\f37c\"; }\n\n.fa-blogger-b:before {\n  content: \"\\f37d\"; }\n\n.fa-bluetooth:before {\n  content: \"\\f293\"; }\n\n.fa-bluetooth-b:before {\n  content: \"\\f294\"; }\n\n.fa-bold:before {\n  content: \"\\f032\"; }\n\n.fa-bolt:before {\n  content: \"\\f0e7\"; }\n\n.fa-bomb:before {\n  content: \"\\f1e2\"; }\n\n.fa-book:before {\n  content: \"\\f02d\"; }\n\n.fa-bookmark:before {\n  content: \"\\f02e\"; }\n\n.fa-bowling-ball:before {\n  content: \"\\f436\"; }\n\n.fa-box:before {\n  content: \"\\f466\"; }\n\n.fa-boxes:before {\n  content: \"\\f468\"; }\n\n.fa-braille:before {\n  content: \"\\f2a1\"; }\n\n.fa-briefcase:before {\n  content: \"\\f0b1\"; }\n\n.fa-btc:before {\n  content: \"\\f15a\"; }\n\n.fa-bug:before {\n  content: \"\\f188\"; }\n\n.fa-building:before {\n  content: \"\\f1ad\"; }\n\n.fa-bullhorn:before {\n  content: \"\\f0a1\"; }\n\n.fa-bullseye:before {\n  content: \"\\f140\"; }\n\n.fa-buromobelexperte:before {\n  content: \"\\f37f\"; }\n\n.fa-bus:before {\n  content: \"\\f207\"; }\n\n.fa-buysellads:before {\n  content: \"\\f20d\"; }\n\n.fa-calculator:before {\n  content: \"\\f1ec\"; }\n\n.fa-calendar:before {\n  content: \"\\f133\"; }\n\n.fa-calendar-alt:before {\n  content: \"\\f073\"; }\n\n.fa-calendar-check:before {\n  content: \"\\f274\"; }\n\n.fa-calendar-minus:before {\n  content: \"\\f272\"; }\n\n.fa-calendar-plus:before {\n  content: \"\\f271\"; }\n\n.fa-calendar-times:before {\n  content: \"\\f273\"; }\n\n.fa-camera:before {\n  content: \"\\f030\"; }\n\n.fa-camera-retro:before {\n  content: \"\\f083\"; }\n\n.fa-car:before {\n  content: \"\\f1b9\"; }\n\n.fa-caret-down:before {\n  content: \"\\f0d7\"; }\n\n.fa-caret-left:before {\n  content: \"\\f0d9\"; }\n\n.fa-caret-right:before {\n  content: \"\\f0da\"; }\n\n.fa-caret-square-down:before {\n  content: \"\\f150\"; }\n\n.fa-caret-square-left:before {\n  content: \"\\f191\"; }\n\n.fa-caret-square-right:before {\n  content: \"\\f152\"; }\n\n.fa-caret-square-up:before {\n  content: \"\\f151\"; }\n\n.fa-caret-up:before {\n  content: \"\\f0d8\"; }\n\n.fa-cart-arrow-down:before {\n  content: \"\\f218\"; }\n\n.fa-cart-plus:before {\n  content: \"\\f217\"; }\n\n.fa-cc-amazon-pay:before {\n  content: \"\\f42d\"; }\n\n.fa-cc-amex:before {\n  content: \"\\f1f3\"; }\n\n.fa-cc-apple-pay:before {\n  content: \"\\f416\"; }\n\n.fa-cc-diners-club:before {\n  content: \"\\f24c\"; }\n\n.fa-cc-discover:before {\n  content: \"\\f1f2\"; }\n\n.fa-cc-jcb:before {\n  content: \"\\f24b\"; }\n\n.fa-cc-mastercard:before {\n  content: \"\\f1f1\"; }\n\n.fa-cc-paypal:before {\n  content: \"\\f1f4\"; }\n\n.fa-cc-stripe:before {\n  content: \"\\f1f5\"; }\n\n.fa-cc-visa:before {\n  content: \"\\f1f0\"; }\n\n.fa-centercode:before {\n  content: \"\\f380\"; }\n\n.fa-certificate:before {\n  content: \"\\f0a3\"; }\n\n.fa-chart-area:before {\n  content: \"\\f1fe\"; }\n\n.fa-chart-bar:before {\n  content: \"\\f080\"; }\n\n.fa-chart-line:before {\n  content: \"\\f201\"; }\n\n.fa-chart-pie:before {\n  content: \"\\f200\"; }\n\n.fa-check:before {\n  content: \"\\f00c\"; }\n\n.fa-check-circle:before {\n  content: \"\\f058\"; }\n\n.fa-check-square:before {\n  content: \"\\f14a\"; }\n\n.fa-chess:before {\n  content: \"\\f439\"; }\n\n.fa-chess-bishop:before {\n  content: \"\\f43a\"; }\n\n.fa-chess-board:before {\n  content: \"\\f43c\"; }\n\n.fa-chess-king:before {\n  content: \"\\f43f\"; }\n\n.fa-chess-knight:before {\n  content: \"\\f441\"; }\n\n.fa-chess-pawn:before {\n  content: \"\\f443\"; }\n\n.fa-chess-queen:before {\n  content: \"\\f445\"; }\n\n.fa-chess-rook:before {\n  content: \"\\f447\"; }\n\n.fa-chevron-circle-down:before {\n  content: \"\\f13a\"; }\n\n.fa-chevron-circle-left:before {\n  content: \"\\f137\"; }\n\n.fa-chevron-circle-right:before {\n  content: \"\\f138\"; }\n\n.fa-chevron-circle-up:before {\n  content: \"\\f139\"; }\n\n.fa-chevron-down:before {\n  content: \"\\f078\"; }\n\n.fa-chevron-left:before {\n  content: \"\\f053\"; }\n\n.fa-chevron-right:before {\n  content: \"\\f054\"; }\n\n.fa-chevron-up:before {\n  content: \"\\f077\"; }\n\n.fa-child:before {\n  content: \"\\f1ae\"; }\n\n.fa-chrome:before {\n  content: \"\\f268\"; }\n\n.fa-circle:before {\n  content: \"\\f111\"; }\n\n.fa-circle-notch:before {\n  content: \"\\f1ce\"; }\n\n.fa-clipboard:before {\n  content: \"\\f328\"; }\n\n.fa-clipboard-check:before {\n  content: \"\\f46c\"; }\n\n.fa-clipboard-list:before {\n  content: \"\\f46d\"; }\n\n.fa-clock:before {\n  content: \"\\f017\"; }\n\n.fa-clone:before {\n  content: \"\\f24d\"; }\n\n.fa-closed-captioning:before {\n  content: \"\\f20a\"; }\n\n.fa-cloud:before {\n  content: \"\\f0c2\"; }\n\n.fa-cloud-download-alt:before {\n  content: \"\\f381\"; }\n\n.fa-cloud-upload-alt:before {\n  content: \"\\f382\"; }\n\n.fa-cloudscale:before {\n  content: \"\\f383\"; }\n\n.fa-cloudsmith:before {\n  content: \"\\f384\"; }\n\n.fa-cloudversify:before {\n  content: \"\\f385\"; }\n\n.fa-code:before {\n  content: \"\\f121\"; }\n\n.fa-code-branch:before {\n  content: \"\\f126\"; }\n\n.fa-codepen:before {\n  content: \"\\f1cb\"; }\n\n.fa-codiepie:before {\n  content: \"\\f284\"; }\n\n.fa-coffee:before {\n  content: \"\\f0f4\"; }\n\n.fa-cog:before {\n  content: \"\\f013\"; }\n\n.fa-cogs:before {\n  content: \"\\f085\"; }\n\n.fa-columns:before {\n  content: \"\\f0db\"; }\n\n.fa-comment:before {\n  content: \"\\f075\"; }\n\n.fa-comment-alt:before {\n  content: \"\\f27a\"; }\n\n.fa-comments:before {\n  content: \"\\f086\"; }\n\n.fa-compass:before {\n  content: \"\\f14e\"; }\n\n.fa-compress:before {\n  content: \"\\f066\"; }\n\n.fa-connectdevelop:before {\n  content: \"\\f20e\"; }\n\n.fa-contao:before {\n  content: \"\\f26d\"; }\n\n.fa-copy:before {\n  content: \"\\f0c5\"; }\n\n.fa-copyright:before {\n  content: \"\\f1f9\"; }\n\n.fa-cpanel:before {\n  content: \"\\f388\"; }\n\n.fa-creative-commons:before {\n  content: \"\\f25e\"; }\n\n.fa-credit-card:before {\n  content: \"\\f09d\"; }\n\n.fa-crop:before {\n  content: \"\\f125\"; }\n\n.fa-crosshairs:before {\n  content: \"\\f05b\"; }\n\n.fa-css3:before {\n  content: \"\\f13c\"; }\n\n.fa-css3-alt:before {\n  content: \"\\f38b\"; }\n\n.fa-cube:before {\n  content: \"\\f1b2\"; }\n\n.fa-cubes:before {\n  content: \"\\f1b3\"; }\n\n.fa-cut:before {\n  content: \"\\f0c4\"; }\n\n.fa-cuttlefish:before {\n  content: \"\\f38c\"; }\n\n.fa-d-and-d:before {\n  content: \"\\f38d\"; }\n\n.fa-dashcube:before {\n  content: \"\\f210\"; }\n\n.fa-database:before {\n  content: \"\\f1c0\"; }\n\n.fa-deaf:before {\n  content: \"\\f2a4\"; }\n\n.fa-delicious:before {\n  content: \"\\f1a5\"; }\n\n.fa-deploydog:before {\n  content: \"\\f38e\"; }\n\n.fa-deskpro:before {\n  content: \"\\f38f\"; }\n\n.fa-desktop:before {\n  content: \"\\f108\"; }\n\n.fa-deviantart:before {\n  content: \"\\f1bd\"; }\n\n.fa-digg:before {\n  content: \"\\f1a6\"; }\n\n.fa-digital-ocean:before {\n  content: \"\\f391\"; }\n\n.fa-discord:before {\n  content: \"\\f392\"; }\n\n.fa-discourse:before {\n  content: \"\\f393\"; }\n\n.fa-dna:before {\n  content: \"\\f471\"; }\n\n.fa-dochub:before {\n  content: \"\\f394\"; }\n\n.fa-docker:before {\n  content: \"\\f395\"; }\n\n.fa-dollar-sign:before {\n  content: \"\\f155\"; }\n\n.fa-dolly:before {\n  content: \"\\f472\"; }\n\n.fa-dolly-flatbed:before {\n  content: \"\\f474\"; }\n\n.fa-dot-circle:before {\n  content: \"\\f192\"; }\n\n.fa-download:before {\n  content: \"\\f019\"; }\n\n.fa-draft2digital:before {\n  content: \"\\f396\"; }\n\n.fa-dribbble:before {\n  content: \"\\f17d\"; }\n\n.fa-dribbble-square:before {\n  content: \"\\f397\"; }\n\n.fa-dropbox:before {\n  content: \"\\f16b\"; }\n\n.fa-drupal:before {\n  content: \"\\f1a9\"; }\n\n.fa-dyalog:before {\n  content: \"\\f399\"; }\n\n.fa-earlybirds:before {\n  content: \"\\f39a\"; }\n\n.fa-edge:before {\n  content: \"\\f282\"; }\n\n.fa-edit:before {\n  content: \"\\f044\"; }\n\n.fa-eject:before {\n  content: \"\\f052\"; }\n\n.fa-elementor:before {\n  content: \"\\f430\"; }\n\n.fa-ellipsis-h:before {\n  content: \"\\f141\"; }\n\n.fa-ellipsis-v:before {\n  content: \"\\f142\"; }\n\n.fa-ember:before {\n  content: \"\\f423\"; }\n\n.fa-empire:before {\n  content: \"\\f1d1\"; }\n\n.fa-envelope:before {\n  content: \"\\f0e0\"; }\n\n.fa-envelope-open:before {\n  content: \"\\f2b6\"; }\n\n.fa-envelope-square:before {\n  content: \"\\f199\"; }\n\n.fa-envira:before {\n  content: \"\\f299\"; }\n\n.fa-eraser:before {\n  content: \"\\f12d\"; }\n\n.fa-erlang:before {\n  content: \"\\f39d\"; }\n\n.fa-ethereum:before {\n  content: \"\\f42e\"; }\n\n.fa-etsy:before {\n  content: \"\\f2d7\"; }\n\n.fa-euro-sign:before {\n  content: \"\\f153\"; }\n\n.fa-exchange-alt:before {\n  content: \"\\f362\"; }\n\n.fa-exclamation:before {\n  content: \"\\f12a\"; }\n\n.fa-exclamation-circle:before {\n  content: \"\\f06a\"; }\n\n.fa-exclamation-triangle:before {\n  content: \"\\f071\"; }\n\n.fa-expand:before {\n  content: \"\\f065\"; }\n\n.fa-expand-arrows-alt:before {\n  content: \"\\f31e\"; }\n\n.fa-expeditedssl:before {\n  content: \"\\f23e\"; }\n\n.fa-external-link-alt:before {\n  content: \"\\f35d\"; }\n\n.fa-external-link-square-alt:before {\n  content: \"\\f360\"; }\n\n.fa-eye:before {\n  content: \"\\f06e\"; }\n\n.fa-eye-dropper:before {\n  content: \"\\f1fb\"; }\n\n.fa-eye-slash:before {\n  content: \"\\f070\"; }\n\n.fa-facebook:before {\n  content: \"\\f09a\"; }\n\n.fa-facebook-f:before {\n  content: \"\\f39e\"; }\n\n.fa-facebook-messenger:before {\n  content: \"\\f39f\"; }\n\n.fa-facebook-square:before {\n  content: \"\\f082\"; }\n\n.fa-fast-backward:before {\n  content: \"\\f049\"; }\n\n.fa-fast-forward:before {\n  content: \"\\f050\"; }\n\n.fa-fax:before {\n  content: \"\\f1ac\"; }\n\n.fa-female:before {\n  content: \"\\f182\"; }\n\n.fa-fighter-jet:before {\n  content: \"\\f0fb\"; }\n\n.fa-file:before {\n  content: \"\\f15b\"; }\n\n.fa-file-alt:before {\n  content: \"\\f15c\"; }\n\n.fa-file-archive:before {\n  content: \"\\f1c6\"; }\n\n.fa-file-audio:before {\n  content: \"\\f1c7\"; }\n\n.fa-file-code:before {\n  content: \"\\f1c9\"; }\n\n.fa-file-excel:before {\n  content: \"\\f1c3\"; }\n\n.fa-file-image:before {\n  content: \"\\f1c5\"; }\n\n.fa-file-pdf:before {\n  content: \"\\f1c1\"; }\n\n.fa-file-powerpoint:before {\n  content: \"\\f1c4\"; }\n\n.fa-file-video:before {\n  content: \"\\f1c8\"; }\n\n.fa-file-word:before {\n  content: \"\\f1c2\"; }\n\n.fa-film:before {\n  content: \"\\f008\"; }\n\n.fa-filter:before {\n  content: \"\\f0b0\"; }\n\n.fa-fire:before {\n  content: \"\\f06d\"; }\n\n.fa-fire-extinguisher:before {\n  content: \"\\f134\"; }\n\n.fa-firefox:before {\n  content: \"\\f269\"; }\n\n.fa-first-aid:before {\n  content: \"\\f479\"; }\n\n.fa-first-order:before {\n  content: \"\\f2b0\"; }\n\n.fa-firstdraft:before {\n  content: \"\\f3a1\"; }\n\n.fa-flag:before {\n  content: \"\\f024\"; }\n\n.fa-flag-checkered:before {\n  content: \"\\f11e\"; }\n\n.fa-flask:before {\n  content: \"\\f0c3\"; }\n\n.fa-flickr:before {\n  content: \"\\f16e\"; }\n\n.fa-flipboard:before {\n  content: \"\\f44d\"; }\n\n.fa-fly:before {\n  content: \"\\f417\"; }\n\n.fa-folder:before {\n  content: \"\\f07b\"; }\n\n.fa-folder-open:before {\n  content: \"\\f07c\"; }\n\n.fa-font:before {\n  content: \"\\f031\"; }\n\n.fa-font-awesome:before {\n  content: \"\\f2b4\"; }\n\n.fa-font-awesome-alt:before {\n  content: \"\\f35c\"; }\n\n.fa-font-awesome-flag:before {\n  content: \"\\f425\"; }\n\n.fa-fonticons:before {\n  content: \"\\f280\"; }\n\n.fa-fonticons-fi:before {\n  content: \"\\f3a2\"; }\n\n.fa-football-ball:before {\n  content: \"\\f44e\"; }\n\n.fa-fort-awesome:before {\n  content: \"\\f286\"; }\n\n.fa-fort-awesome-alt:before {\n  content: \"\\f3a3\"; }\n\n.fa-forumbee:before {\n  content: \"\\f211\"; }\n\n.fa-forward:before {\n  content: \"\\f04e\"; }\n\n.fa-foursquare:before {\n  content: \"\\f180\"; }\n\n.fa-free-code-camp:before {\n  content: \"\\f2c5\"; }\n\n.fa-freebsd:before {\n  content: \"\\f3a4\"; }\n\n.fa-frown:before {\n  content: \"\\f119\"; }\n\n.fa-futbol:before {\n  content: \"\\f1e3\"; }\n\n.fa-gamepad:before {\n  content: \"\\f11b\"; }\n\n.fa-gavel:before {\n  content: \"\\f0e3\"; }\n\n.fa-gem:before {\n  content: \"\\f3a5\"; }\n\n.fa-genderless:before {\n  content: \"\\f22d\"; }\n\n.fa-get-pocket:before {\n  content: \"\\f265\"; }\n\n.fa-gg:before {\n  content: \"\\f260\"; }\n\n.fa-gg-circle:before {\n  content: \"\\f261\"; }\n\n.fa-gift:before {\n  content: \"\\f06b\"; }\n\n.fa-git:before {\n  content: \"\\f1d3\"; }\n\n.fa-git-square:before {\n  content: \"\\f1d2\"; }\n\n.fa-github:before {\n  content: \"\\f09b\"; }\n\n.fa-github-alt:before {\n  content: \"\\f113\"; }\n\n.fa-github-square:before {\n  content: \"\\f092\"; }\n\n.fa-gitkraken:before {\n  content: \"\\f3a6\"; }\n\n.fa-gitlab:before {\n  content: \"\\f296\"; }\n\n.fa-gitter:before {\n  content: \"\\f426\"; }\n\n.fa-glass-martini:before {\n  content: \"\\f000\"; }\n\n.fa-glide:before {\n  content: \"\\f2a5\"; }\n\n.fa-glide-g:before {\n  content: \"\\f2a6\"; }\n\n.fa-globe:before {\n  content: \"\\f0ac\"; }\n\n.fa-gofore:before {\n  content: \"\\f3a7\"; }\n\n.fa-golf-ball:before {\n  content: \"\\f450\"; }\n\n.fa-goodreads:before {\n  content: \"\\f3a8\"; }\n\n.fa-goodreads-g:before {\n  content: \"\\f3a9\"; }\n\n.fa-google:before {\n  content: \"\\f1a0\"; }\n\n.fa-google-drive:before {\n  content: \"\\f3aa\"; }\n\n.fa-google-play:before {\n  content: \"\\f3ab\"; }\n\n.fa-google-plus:before {\n  content: \"\\f2b3\"; }\n\n.fa-google-plus-g:before {\n  content: \"\\f0d5\"; }\n\n.fa-google-plus-square:before {\n  content: \"\\f0d4\"; }\n\n.fa-google-wallet:before {\n  content: \"\\f1ee\"; }\n\n.fa-graduation-cap:before {\n  content: \"\\f19d\"; }\n\n.fa-gratipay:before {\n  content: \"\\f184\"; }\n\n.fa-grav:before {\n  content: \"\\f2d6\"; }\n\n.fa-gripfire:before {\n  content: \"\\f3ac\"; }\n\n.fa-grunt:before {\n  content: \"\\f3ad\"; }\n\n.fa-gulp:before {\n  content: \"\\f3ae\"; }\n\n.fa-h-square:before {\n  content: \"\\f0fd\"; }\n\n.fa-hacker-news:before {\n  content: \"\\f1d4\"; }\n\n.fa-hacker-news-square:before {\n  content: \"\\f3af\"; }\n\n.fa-hand-lizard:before {\n  content: \"\\f258\"; }\n\n.fa-hand-paper:before {\n  content: \"\\f256\"; }\n\n.fa-hand-peace:before {\n  content: \"\\f25b\"; }\n\n.fa-hand-point-down:before {\n  content: \"\\f0a7\"; }\n\n.fa-hand-point-left:before {\n  content: \"\\f0a5\"; }\n\n.fa-hand-point-right:before {\n  content: \"\\f0a4\"; }\n\n.fa-hand-point-up:before {\n  content: \"\\f0a6\"; }\n\n.fa-hand-pointer:before {\n  content: \"\\f25a\"; }\n\n.fa-hand-rock:before {\n  content: \"\\f255\"; }\n\n.fa-hand-scissors:before {\n  content: \"\\f257\"; }\n\n.fa-hand-spock:before {\n  content: \"\\f259\"; }\n\n.fa-handshake:before {\n  content: \"\\f2b5\"; }\n\n.fa-hashtag:before {\n  content: \"\\f292\"; }\n\n.fa-hdd:before {\n  content: \"\\f0a0\"; }\n\n.fa-heading:before {\n  content: \"\\f1dc\"; }\n\n.fa-headphones:before {\n  content: \"\\f025\"; }\n\n.fa-heart:before {\n  content: \"\\f004\"; }\n\n.fa-heartbeat:before {\n  content: \"\\f21e\"; }\n\n.fa-hips:before {\n  content: \"\\f452\"; }\n\n.fa-hire-a-helper:before {\n  content: \"\\f3b0\"; }\n\n.fa-history:before {\n  content: \"\\f1da\"; }\n\n.fa-hockey-puck:before {\n  content: \"\\f453\"; }\n\n.fa-home:before {\n  content: \"\\f015\"; }\n\n.fa-hooli:before {\n  content: \"\\f427\"; }\n\n.fa-hospital:before {\n  content: \"\\f0f8\"; }\n\n.fa-hospital-symbol:before {\n  content: \"\\f47e\"; }\n\n.fa-hotjar:before {\n  content: \"\\f3b1\"; }\n\n.fa-hourglass:before {\n  content: \"\\f254\"; }\n\n.fa-hourglass-end:before {\n  content: \"\\f253\"; }\n\n.fa-hourglass-half:before {\n  content: \"\\f252\"; }\n\n.fa-hourglass-start:before {\n  content: \"\\f251\"; }\n\n.fa-houzz:before {\n  content: \"\\f27c\"; }\n\n.fa-html5:before {\n  content: \"\\f13b\"; }\n\n.fa-hubspot:before {\n  content: \"\\f3b2\"; }\n\n.fa-i-cursor:before {\n  content: \"\\f246\"; }\n\n.fa-id-badge:before {\n  content: \"\\f2c1\"; }\n\n.fa-id-card:before {\n  content: \"\\f2c2\"; }\n\n.fa-image:before {\n  content: \"\\f03e\"; }\n\n.fa-images:before {\n  content: \"\\f302\"; }\n\n.fa-imdb:before {\n  content: \"\\f2d8\"; }\n\n.fa-inbox:before {\n  content: \"\\f01c\"; }\n\n.fa-indent:before {\n  content: \"\\f03c\"; }\n\n.fa-industry:before {\n  content: \"\\f275\"; }\n\n.fa-info:before {\n  content: \"\\f129\"; }\n\n.fa-info-circle:before {\n  content: \"\\f05a\"; }\n\n.fa-instagram:before {\n  content: \"\\f16d\"; }\n\n.fa-internet-explorer:before {\n  content: \"\\f26b\"; }\n\n.fa-ioxhost:before {\n  content: \"\\f208\"; }\n\n.fa-italic:before {\n  content: \"\\f033\"; }\n\n.fa-itunes:before {\n  content: \"\\f3b4\"; }\n\n.fa-itunes-note:before {\n  content: \"\\f3b5\"; }\n\n.fa-jenkins:before {\n  content: \"\\f3b6\"; }\n\n.fa-joget:before {\n  content: \"\\f3b7\"; }\n\n.fa-joomla:before {\n  content: \"\\f1aa\"; }\n\n.fa-js:before {\n  content: \"\\f3b8\"; }\n\n.fa-js-square:before {\n  content: \"\\f3b9\"; }\n\n.fa-jsfiddle:before {\n  content: \"\\f1cc\"; }\n\n.fa-key:before {\n  content: \"\\f084\"; }\n\n.fa-keyboard:before {\n  content: \"\\f11c\"; }\n\n.fa-keycdn:before {\n  content: \"\\f3ba\"; }\n\n.fa-kickstarter:before {\n  content: \"\\f3bb\"; }\n\n.fa-kickstarter-k:before {\n  content: \"\\f3bc\"; }\n\n.fa-korvue:before {\n  content: \"\\f42f\"; }\n\n.fa-language:before {\n  content: \"\\f1ab\"; }\n\n.fa-laptop:before {\n  content: \"\\f109\"; }\n\n.fa-laravel:before {\n  content: \"\\f3bd\"; }\n\n.fa-lastfm:before {\n  content: \"\\f202\"; }\n\n.fa-lastfm-square:before {\n  content: \"\\f203\"; }\n\n.fa-leaf:before {\n  content: \"\\f06c\"; }\n\n.fa-leanpub:before {\n  content: \"\\f212\"; }\n\n.fa-lemon:before {\n  content: \"\\f094\"; }\n\n.fa-less:before {\n  content: \"\\f41d\"; }\n\n.fa-level-down-alt:before {\n  content: \"\\f3be\"; }\n\n.fa-level-up-alt:before {\n  content: \"\\f3bf\"; }\n\n.fa-life-ring:before {\n  content: \"\\f1cd\"; }\n\n.fa-lightbulb:before {\n  content: \"\\f0eb\"; }\n\n.fa-line:before {\n  content: \"\\f3c0\"; }\n\n.fa-link:before {\n  content: \"\\f0c1\"; }\n\n.fa-linkedin:before {\n  content: \"\\f08c\"; }\n\n.fa-linkedin-in:before {\n  content: \"\\f0e1\"; }\n\n.fa-linode:before {\n  content: \"\\f2b8\"; }\n\n.fa-linux:before {\n  content: \"\\f17c\"; }\n\n.fa-lira-sign:before {\n  content: \"\\f195\"; }\n\n.fa-list:before {\n  content: \"\\f03a\"; }\n\n.fa-list-alt:before {\n  content: \"\\f022\"; }\n\n.fa-list-ol:before {\n  content: \"\\f0cb\"; }\n\n.fa-list-ul:before {\n  content: \"\\f0ca\"; }\n\n.fa-location-arrow:before {\n  content: \"\\f124\"; }\n\n.fa-lock:before {\n  content: \"\\f023\"; }\n\n.fa-lock-open:before {\n  content: \"\\f3c1\"; }\n\n.fa-long-arrow-alt-down:before {\n  content: \"\\f309\"; }\n\n.fa-long-arrow-alt-left:before {\n  content: \"\\f30a\"; }\n\n.fa-long-arrow-alt-right:before {\n  content: \"\\f30b\"; }\n\n.fa-long-arrow-alt-up:before {\n  content: \"\\f30c\"; }\n\n.fa-low-vision:before {\n  content: \"\\f2a8\"; }\n\n.fa-lyft:before {\n  content: \"\\f3c3\"; }\n\n.fa-magento:before {\n  content: \"\\f3c4\"; }\n\n.fa-magic:before {\n  content: \"\\f0d0\"; }\n\n.fa-magnet:before {\n  content: \"\\f076\"; }\n\n.fa-male:before {\n  content: \"\\f183\"; }\n\n.fa-map:before {\n  content: \"\\f279\"; }\n\n.fa-map-marker:before {\n  content: \"\\f041\"; }\n\n.fa-map-marker-alt:before {\n  content: \"\\f3c5\"; }\n\n.fa-map-pin:before {\n  content: \"\\f276\"; }\n\n.fa-map-signs:before {\n  content: \"\\f277\"; }\n\n.fa-mars:before {\n  content: \"\\f222\"; }\n\n.fa-mars-double:before {\n  content: \"\\f227\"; }\n\n.fa-mars-stroke:before {\n  content: \"\\f229\"; }\n\n.fa-mars-stroke-h:before {\n  content: \"\\f22b\"; }\n\n.fa-mars-stroke-v:before {\n  content: \"\\f22a\"; }\n\n.fa-maxcdn:before {\n  content: \"\\f136\"; }\n\n.fa-medapps:before {\n  content: \"\\f3c6\"; }\n\n.fa-medium:before {\n  content: \"\\f23a\"; }\n\n.fa-medium-m:before {\n  content: \"\\f3c7\"; }\n\n.fa-medkit:before {\n  content: \"\\f0fa\"; }\n\n.fa-medrt:before {\n  content: \"\\f3c8\"; }\n\n.fa-meetup:before {\n  content: \"\\f2e0\"; }\n\n.fa-meh:before {\n  content: \"\\f11a\"; }\n\n.fa-mercury:before {\n  content: \"\\f223\"; }\n\n.fa-microchip:before {\n  content: \"\\f2db\"; }\n\n.fa-microphone:before {\n  content: \"\\f130\"; }\n\n.fa-microphone-slash:before {\n  content: \"\\f131\"; }\n\n.fa-microsoft:before {\n  content: \"\\f3ca\"; }\n\n.fa-minus:before {\n  content: \"\\f068\"; }\n\n.fa-minus-circle:before {\n  content: \"\\f056\"; }\n\n.fa-minus-square:before {\n  content: \"\\f146\"; }\n\n.fa-mix:before {\n  content: \"\\f3cb\"; }\n\n.fa-mixcloud:before {\n  content: \"\\f289\"; }\n\n.fa-mizuni:before {\n  content: \"\\f3cc\"; }\n\n.fa-mobile:before {\n  content: \"\\f10b\"; }\n\n.fa-mobile-alt:before {\n  content: \"\\f3cd\"; }\n\n.fa-modx:before {\n  content: \"\\f285\"; }\n\n.fa-monero:before {\n  content: \"\\f3d0\"; }\n\n.fa-money-bill-alt:before {\n  content: \"\\f3d1\"; }\n\n.fa-moon:before {\n  content: \"\\f186\"; }\n\n.fa-motorcycle:before {\n  content: \"\\f21c\"; }\n\n.fa-mouse-pointer:before {\n  content: \"\\f245\"; }\n\n.fa-music:before {\n  content: \"\\f001\"; }\n\n.fa-napster:before {\n  content: \"\\f3d2\"; }\n\n.fa-neuter:before {\n  content: \"\\f22c\"; }\n\n.fa-newspaper:before {\n  content: \"\\f1ea\"; }\n\n.fa-nintendo-switch:before {\n  content: \"\\f418\"; }\n\n.fa-node:before {\n  content: \"\\f419\"; }\n\n.fa-node-js:before {\n  content: \"\\f3d3\"; }\n\n.fa-npm:before {\n  content: \"\\f3d4\"; }\n\n.fa-ns8:before {\n  content: \"\\f3d5\"; }\n\n.fa-nutritionix:before {\n  content: \"\\f3d6\"; }\n\n.fa-object-group:before {\n  content: \"\\f247\"; }\n\n.fa-object-ungroup:before {\n  content: \"\\f248\"; }\n\n.fa-odnoklassniki:before {\n  content: \"\\f263\"; }\n\n.fa-odnoklassniki-square:before {\n  content: \"\\f264\"; }\n\n.fa-opencart:before {\n  content: \"\\f23d\"; }\n\n.fa-openid:before {\n  content: \"\\f19b\"; }\n\n.fa-opera:before {\n  content: \"\\f26a\"; }\n\n.fa-optin-monster:before {\n  content: \"\\f23c\"; }\n\n.fa-osi:before {\n  content: \"\\f41a\"; }\n\n.fa-outdent:before {\n  content: \"\\f03b\"; }\n\n.fa-page4:before {\n  content: \"\\f3d7\"; }\n\n.fa-pagelines:before {\n  content: \"\\f18c\"; }\n\n.fa-paint-brush:before {\n  content: \"\\f1fc\"; }\n\n.fa-palfed:before {\n  content: \"\\f3d8\"; }\n\n.fa-pallet:before {\n  content: \"\\f482\"; }\n\n.fa-paper-plane:before {\n  content: \"\\f1d8\"; }\n\n.fa-paperclip:before {\n  content: \"\\f0c6\"; }\n\n.fa-paragraph:before {\n  content: \"\\f1dd\"; }\n\n.fa-paste:before {\n  content: \"\\f0ea\"; }\n\n.fa-patreon:before {\n  content: \"\\f3d9\"; }\n\n.fa-pause:before {\n  content: \"\\f04c\"; }\n\n.fa-pause-circle:before {\n  content: \"\\f28b\"; }\n\n.fa-paw:before {\n  content: \"\\f1b0\"; }\n\n.fa-paypal:before {\n  content: \"\\f1ed\"; }\n\n.fa-pen-square:before {\n  content: \"\\f14b\"; }\n\n.fa-pencil-alt:before {\n  content: \"\\f303\"; }\n\n.fa-percent:before {\n  content: \"\\f295\"; }\n\n.fa-periscope:before {\n  content: \"\\f3da\"; }\n\n.fa-phabricator:before {\n  content: \"\\f3db\"; }\n\n.fa-phoenix-framework:before {\n  content: \"\\f3dc\"; }\n\n.fa-phone:before {\n  content: \"\\f095\"; }\n\n.fa-phone-square:before {\n  content: \"\\f098\"; }\n\n.fa-phone-volume:before {\n  content: \"\\f2a0\"; }\n\n.fa-php:before {\n  content: \"\\f457\"; }\n\n.fa-pied-piper:before {\n  content: \"\\f2ae\"; }\n\n.fa-pied-piper-alt:before {\n  content: \"\\f1a8\"; }\n\n.fa-pied-piper-pp:before {\n  content: \"\\f1a7\"; }\n\n.fa-pills:before {\n  content: \"\\f484\"; }\n\n.fa-pinterest:before {\n  content: \"\\f0d2\"; }\n\n.fa-pinterest-p:before {\n  content: \"\\f231\"; }\n\n.fa-pinterest-square:before {\n  content: \"\\f0d3\"; }\n\n.fa-plane:before {\n  content: \"\\f072\"; }\n\n.fa-play:before {\n  content: \"\\f04b\"; }\n\n.fa-play-circle:before {\n  content: \"\\f144\"; }\n\n.fa-playstation:before {\n  content: \"\\f3df\"; }\n\n.fa-plug:before {\n  content: \"\\f1e6\"; }\n\n.fa-plus:before {\n  content: \"\\f067\"; }\n\n.fa-plus-circle:before {\n  content: \"\\f055\"; }\n\n.fa-plus-square:before {\n  content: \"\\f0fe\"; }\n\n.fa-podcast:before {\n  content: \"\\f2ce\"; }\n\n.fa-pound-sign:before {\n  content: \"\\f154\"; }\n\n.fa-power-off:before {\n  content: \"\\f011\"; }\n\n.fa-print:before {\n  content: \"\\f02f\"; }\n\n.fa-product-hunt:before {\n  content: \"\\f288\"; }\n\n.fa-pushed:before {\n  content: \"\\f3e1\"; }\n\n.fa-puzzle-piece:before {\n  content: \"\\f12e\"; }\n\n.fa-python:before {\n  content: \"\\f3e2\"; }\n\n.fa-qq:before {\n  content: \"\\f1d6\"; }\n\n.fa-qrcode:before {\n  content: \"\\f029\"; }\n\n.fa-question:before {\n  content: \"\\f128\"; }\n\n.fa-question-circle:before {\n  content: \"\\f059\"; }\n\n.fa-quidditch:before {\n  content: \"\\f458\"; }\n\n.fa-quinscape:before {\n  content: \"\\f459\"; }\n\n.fa-quora:before {\n  content: \"\\f2c4\"; }\n\n.fa-quote-left:before {\n  content: \"\\f10d\"; }\n\n.fa-quote-right:before {\n  content: \"\\f10e\"; }\n\n.fa-random:before {\n  content: \"\\f074\"; }\n\n.fa-ravelry:before {\n  content: \"\\f2d9\"; }\n\n.fa-react:before {\n  content: \"\\f41b\"; }\n\n.fa-rebel:before {\n  content: \"\\f1d0\"; }\n\n.fa-recycle:before {\n  content: \"\\f1b8\"; }\n\n.fa-red-river:before {\n  content: \"\\f3e3\"; }\n\n.fa-reddit:before {\n  content: \"\\f1a1\"; }\n\n.fa-reddit-alien:before {\n  content: \"\\f281\"; }\n\n.fa-reddit-square:before {\n  content: \"\\f1a2\"; }\n\n.fa-redo:before {\n  content: \"\\f01e\"; }\n\n.fa-redo-alt:before {\n  content: \"\\f2f9\"; }\n\n.fa-registered:before {\n  content: \"\\f25d\"; }\n\n.fa-rendact:before {\n  content: \"\\f3e4\"; }\n\n.fa-renren:before {\n  content: \"\\f18b\"; }\n\n.fa-reply:before {\n  content: \"\\f3e5\"; }\n\n.fa-reply-all:before {\n  content: \"\\f122\"; }\n\n.fa-replyd:before {\n  content: \"\\f3e6\"; }\n\n.fa-resolving:before {\n  content: \"\\f3e7\"; }\n\n.fa-retweet:before {\n  content: \"\\f079\"; }\n\n.fa-road:before {\n  content: \"\\f018\"; }\n\n.fa-rocket:before {\n  content: \"\\f135\"; }\n\n.fa-rocketchat:before {\n  content: \"\\f3e8\"; }\n\n.fa-rockrms:before {\n  content: \"\\f3e9\"; }\n\n.fa-rss:before {\n  content: \"\\f09e\"; }\n\n.fa-rss-square:before {\n  content: \"\\f143\"; }\n\n.fa-ruble-sign:before {\n  content: \"\\f158\"; }\n\n.fa-rupee-sign:before {\n  content: \"\\f156\"; }\n\n.fa-safari:before {\n  content: \"\\f267\"; }\n\n.fa-sass:before {\n  content: \"\\f41e\"; }\n\n.fa-save:before {\n  content: \"\\f0c7\"; }\n\n.fa-schlix:before {\n  content: \"\\f3ea\"; }\n\n.fa-scribd:before {\n  content: \"\\f28a\"; }\n\n.fa-search:before {\n  content: \"\\f002\"; }\n\n.fa-search-minus:before {\n  content: \"\\f010\"; }\n\n.fa-search-plus:before {\n  content: \"\\f00e\"; }\n\n.fa-searchengin:before {\n  content: \"\\f3eb\"; }\n\n.fa-sellcast:before {\n  content: \"\\f2da\"; }\n\n.fa-sellsy:before {\n  content: \"\\f213\"; }\n\n.fa-server:before {\n  content: \"\\f233\"; }\n\n.fa-servicestack:before {\n  content: \"\\f3ec\"; }\n\n.fa-share:before {\n  content: \"\\f064\"; }\n\n.fa-share-alt:before {\n  content: \"\\f1e0\"; }\n\n.fa-share-alt-square:before {\n  content: \"\\f1e1\"; }\n\n.fa-share-square:before {\n  content: \"\\f14d\"; }\n\n.fa-shekel-sign:before {\n  content: \"\\f20b\"; }\n\n.fa-shield-alt:before {\n  content: \"\\f3ed\"; }\n\n.fa-ship:before {\n  content: \"\\f21a\"; }\n\n.fa-shipping-fast:before {\n  content: \"\\f48b\"; }\n\n.fa-shirtsinbulk:before {\n  content: \"\\f214\"; }\n\n.fa-shopping-bag:before {\n  content: \"\\f290\"; }\n\n.fa-shopping-basket:before {\n  content: \"\\f291\"; }\n\n.fa-shopping-cart:before {\n  content: \"\\f07a\"; }\n\n.fa-shower:before {\n  content: \"\\f2cc\"; }\n\n.fa-sign-in-alt:before {\n  content: \"\\f2f6\"; }\n\n.fa-sign-language:before {\n  content: \"\\f2a7\"; }\n\n.fa-sign-out-alt:before {\n  content: \"\\f2f5\"; }\n\n.fa-signal:before {\n  content: \"\\f012\"; }\n\n.fa-simplybuilt:before {\n  content: \"\\f215\"; }\n\n.fa-sistrix:before {\n  content: \"\\f3ee\"; }\n\n.fa-sitemap:before {\n  content: \"\\f0e8\"; }\n\n.fa-skyatlas:before {\n  content: \"\\f216\"; }\n\n.fa-skype:before {\n  content: \"\\f17e\"; }\n\n.fa-slack:before {\n  content: \"\\f198\"; }\n\n.fa-slack-hash:before {\n  content: \"\\f3ef\"; }\n\n.fa-sliders-h:before {\n  content: \"\\f1de\"; }\n\n.fa-slideshare:before {\n  content: \"\\f1e7\"; }\n\n.fa-smile:before {\n  content: \"\\f118\"; }\n\n.fa-snapchat:before {\n  content: \"\\f2ab\"; }\n\n.fa-snapchat-ghost:before {\n  content: \"\\f2ac\"; }\n\n.fa-snapchat-square:before {\n  content: \"\\f2ad\"; }\n\n.fa-snowflake:before {\n  content: \"\\f2dc\"; }\n\n.fa-sort:before {\n  content: \"\\f0dc\"; }\n\n.fa-sort-alpha-down:before {\n  content: \"\\f15d\"; }\n\n.fa-sort-alpha-up:before {\n  content: \"\\f15e\"; }\n\n.fa-sort-amount-down:before {\n  content: \"\\f160\"; }\n\n.fa-sort-amount-up:before {\n  content: \"\\f161\"; }\n\n.fa-sort-down:before {\n  content: \"\\f0dd\"; }\n\n.fa-sort-numeric-down:before {\n  content: \"\\f162\"; }\n\n.fa-sort-numeric-up:before {\n  content: \"\\f163\"; }\n\n.fa-sort-up:before {\n  content: \"\\f0de\"; }\n\n.fa-soundcloud:before {\n  content: \"\\f1be\"; }\n\n.fa-space-shuttle:before {\n  content: \"\\f197\"; }\n\n.fa-speakap:before {\n  content: \"\\f3f3\"; }\n\n.fa-spinner:before {\n  content: \"\\f110\"; }\n\n.fa-spotify:before {\n  content: \"\\f1bc\"; }\n\n.fa-square:before {\n  content: \"\\f0c8\"; }\n\n.fa-square-full:before {\n  content: \"\\f45c\"; }\n\n.fa-stack-exchange:before {\n  content: \"\\f18d\"; }\n\n.fa-stack-overflow:before {\n  content: \"\\f16c\"; }\n\n.fa-star:before {\n  content: \"\\f005\"; }\n\n.fa-star-half:before {\n  content: \"\\f089\"; }\n\n.fa-staylinked:before {\n  content: \"\\f3f5\"; }\n\n.fa-steam:before {\n  content: \"\\f1b6\"; }\n\n.fa-steam-square:before {\n  content: \"\\f1b7\"; }\n\n.fa-steam-symbol:before {\n  content: \"\\f3f6\"; }\n\n.fa-step-backward:before {\n  content: \"\\f048\"; }\n\n.fa-step-forward:before {\n  content: \"\\f051\"; }\n\n.fa-stethoscope:before {\n  content: \"\\f0f1\"; }\n\n.fa-sticker-mule:before {\n  content: \"\\f3f7\"; }\n\n.fa-sticky-note:before {\n  content: \"\\f249\"; }\n\n.fa-stop:before {\n  content: \"\\f04d\"; }\n\n.fa-stop-circle:before {\n  content: \"\\f28d\"; }\n\n.fa-stopwatch:before {\n  content: \"\\f2f2\"; }\n\n.fa-strava:before {\n  content: \"\\f428\"; }\n\n.fa-street-view:before {\n  content: \"\\f21d\"; }\n\n.fa-strikethrough:before {\n  content: \"\\f0cc\"; }\n\n.fa-stripe:before {\n  content: \"\\f429\"; }\n\n.fa-stripe-s:before {\n  content: \"\\f42a\"; }\n\n.fa-studiovinari:before {\n  content: \"\\f3f8\"; }\n\n.fa-stumbleupon:before {\n  content: \"\\f1a4\"; }\n\n.fa-stumbleupon-circle:before {\n  content: \"\\f1a3\"; }\n\n.fa-subscript:before {\n  content: \"\\f12c\"; }\n\n.fa-subway:before {\n  content: \"\\f239\"; }\n\n.fa-suitcase:before {\n  content: \"\\f0f2\"; }\n\n.fa-sun:before {\n  content: \"\\f185\"; }\n\n.fa-superpowers:before {\n  content: \"\\f2dd\"; }\n\n.fa-superscript:before {\n  content: \"\\f12b\"; }\n\n.fa-supple:before {\n  content: \"\\f3f9\"; }\n\n.fa-sync:before {\n  content: \"\\f021\"; }\n\n.fa-sync-alt:before {\n  content: \"\\f2f1\"; }\n\n.fa-syringe:before {\n  content: \"\\f48e\"; }\n\n.fa-table:before {\n  content: \"\\f0ce\"; }\n\n.fa-table-tennis:before {\n  content: \"\\f45d\"; }\n\n.fa-tablet:before {\n  content: \"\\f10a\"; }\n\n.fa-tablet-alt:before {\n  content: \"\\f3fa\"; }\n\n.fa-tachometer-alt:before {\n  content: \"\\f3fd\"; }\n\n.fa-tag:before {\n  content: \"\\f02b\"; }\n\n.fa-tags:before {\n  content: \"\\f02c\"; }\n\n.fa-tasks:before {\n  content: \"\\f0ae\"; }\n\n.fa-taxi:before {\n  content: \"\\f1ba\"; }\n\n.fa-telegram:before {\n  content: \"\\f2c6\"; }\n\n.fa-telegram-plane:before {\n  content: \"\\f3fe\"; }\n\n.fa-tencent-weibo:before {\n  content: \"\\f1d5\"; }\n\n.fa-terminal:before {\n  content: \"\\f120\"; }\n\n.fa-text-height:before {\n  content: \"\\f034\"; }\n\n.fa-text-width:before {\n  content: \"\\f035\"; }\n\n.fa-th:before {\n  content: \"\\f00a\"; }\n\n.fa-th-large:before {\n  content: \"\\f009\"; }\n\n.fa-th-list:before {\n  content: \"\\f00b\"; }\n\n.fa-themeisle:before {\n  content: \"\\f2b2\"; }\n\n.fa-thermometer:before {\n  content: \"\\f491\"; }\n\n.fa-thermometer-empty:before {\n  content: \"\\f2cb\"; }\n\n.fa-thermometer-full:before {\n  content: \"\\f2c7\"; }\n\n.fa-thermometer-half:before {\n  content: \"\\f2c9\"; }\n\n.fa-thermometer-quarter:before {\n  content: \"\\f2ca\"; }\n\n.fa-thermometer-three-quarters:before {\n  content: \"\\f2c8\"; }\n\n.fa-thumbs-down:before {\n  content: \"\\f165\"; }\n\n.fa-thumbs-up:before {\n  content: \"\\f164\"; }\n\n.fa-thumbtack:before {\n  content: \"\\f08d\"; }\n\n.fa-ticket-alt:before {\n  content: \"\\f3ff\"; }\n\n.fa-times:before {\n  content: \"\\f00d\"; }\n\n.fa-times-circle:before {\n  content: \"\\f057\"; }\n\n.fa-tint:before {\n  content: \"\\f043\"; }\n\n.fa-toggle-off:before {\n  content: \"\\f204\"; }\n\n.fa-toggle-on:before {\n  content: \"\\f205\"; }\n\n.fa-trademark:before {\n  content: \"\\f25c\"; }\n\n.fa-train:before {\n  content: \"\\f238\"; }\n\n.fa-transgender:before {\n  content: \"\\f224\"; }\n\n.fa-transgender-alt:before {\n  content: \"\\f225\"; }\n\n.fa-trash:before {\n  content: \"\\f1f8\"; }\n\n.fa-trash-alt:before {\n  content: \"\\f2ed\"; }\n\n.fa-tree:before {\n  content: \"\\f1bb\"; }\n\n.fa-trello:before {\n  content: \"\\f181\"; }\n\n.fa-tripadvisor:before {\n  content: \"\\f262\"; }\n\n.fa-trophy:before {\n  content: \"\\f091\"; }\n\n.fa-truck:before {\n  content: \"\\f0d1\"; }\n\n.fa-tty:before {\n  content: \"\\f1e4\"; }\n\n.fa-tumblr:before {\n  content: \"\\f173\"; }\n\n.fa-tumblr-square:before {\n  content: \"\\f174\"; }\n\n.fa-tv:before {\n  content: \"\\f26c\"; }\n\n.fa-twitch:before {\n  content: \"\\f1e8\"; }\n\n.fa-twitter:before {\n  content: \"\\f099\"; }\n\n.fa-twitter-square:before {\n  content: \"\\f081\"; }\n\n.fa-typo3:before {\n  content: \"\\f42b\"; }\n\n.fa-uber:before {\n  content: \"\\f402\"; }\n\n.fa-uikit:before {\n  content: \"\\f403\"; }\n\n.fa-umbrella:before {\n  content: \"\\f0e9\"; }\n\n.fa-underline:before {\n  content: \"\\f0cd\"; }\n\n.fa-undo:before {\n  content: \"\\f0e2\"; }\n\n.fa-undo-alt:before {\n  content: \"\\f2ea\"; }\n\n.fa-uniregistry:before {\n  content: \"\\f404\"; }\n\n.fa-universal-access:before {\n  content: \"\\f29a\"; }\n\n.fa-university:before {\n  content: \"\\f19c\"; }\n\n.fa-unlink:before {\n  content: \"\\f127\"; }\n\n.fa-unlock:before {\n  content: \"\\f09c\"; }\n\n.fa-unlock-alt:before {\n  content: \"\\f13e\"; }\n\n.fa-untappd:before {\n  content: \"\\f405\"; }\n\n.fa-upload:before {\n  content: \"\\f093\"; }\n\n.fa-usb:before {\n  content: \"\\f287\"; }\n\n.fa-user:before {\n  content: \"\\f007\"; }\n\n.fa-user-circle:before {\n  content: \"\\f2bd\"; }\n\n.fa-user-md:before {\n  content: \"\\f0f0\"; }\n\n.fa-user-plus:before {\n  content: \"\\f234\"; }\n\n.fa-user-secret:before {\n  content: \"\\f21b\"; }\n\n.fa-user-times:before {\n  content: \"\\f235\"; }\n\n.fa-users:before {\n  content: \"\\f0c0\"; }\n\n.fa-ussunnah:before {\n  content: \"\\f407\"; }\n\n.fa-utensil-spoon:before {\n  content: \"\\f2e5\"; }\n\n.fa-utensils:before {\n  content: \"\\f2e7\"; }\n\n.fa-vaadin:before {\n  content: \"\\f408\"; }\n\n.fa-venus:before {\n  content: \"\\f221\"; }\n\n.fa-venus-double:before {\n  content: \"\\f226\"; }\n\n.fa-venus-mars:before {\n  content: \"\\f228\"; }\n\n.fa-viacoin:before {\n  content: \"\\f237\"; }\n\n.fa-viadeo:before {\n  content: \"\\f2a9\"; }\n\n.fa-viadeo-square:before {\n  content: \"\\f2aa\"; }\n\n.fa-viber:before {\n  content: \"\\f409\"; }\n\n.fa-video:before {\n  content: \"\\f03d\"; }\n\n.fa-vimeo:before {\n  content: \"\\f40a\"; }\n\n.fa-vimeo-square:before {\n  content: \"\\f194\"; }\n\n.fa-vimeo-v:before {\n  content: \"\\f27d\"; }\n\n.fa-vine:before {\n  content: \"\\f1ca\"; }\n\n.fa-vk:before {\n  content: \"\\f189\"; }\n\n.fa-vnv:before {\n  content: \"\\f40b\"; }\n\n.fa-volleyball-ball:before {\n  content: \"\\f45f\"; }\n\n.fa-volume-down:before {\n  content: \"\\f027\"; }\n\n.fa-volume-off:before {\n  content: \"\\f026\"; }\n\n.fa-volume-up:before {\n  content: \"\\f028\"; }\n\n.fa-vuejs:before {\n  content: \"\\f41f\"; }\n\n.fa-warehouse:before {\n  content: \"\\f494\"; }\n\n.fa-weibo:before {\n  content: \"\\f18a\"; }\n\n.fa-weight:before {\n  content: \"\\f496\"; }\n\n.fa-weixin:before {\n  content: \"\\f1d7\"; }\n\n.fa-whatsapp:before {\n  content: \"\\f232\"; }\n\n.fa-whatsapp-square:before {\n  content: \"\\f40c\"; }\n\n.fa-wheelchair:before {\n  content: \"\\f193\"; }\n\n.fa-whmcs:before {\n  content: \"\\f40d\"; }\n\n.fa-wifi:before {\n  content: \"\\f1eb\"; }\n\n.fa-wikipedia-w:before {\n  content: \"\\f266\"; }\n\n.fa-window-close:before {\n  content: \"\\f410\"; }\n\n.fa-window-maximize:before {\n  content: \"\\f2d0\"; }\n\n.fa-window-minimize:before {\n  content: \"\\f2d1\"; }\n\n.fa-window-restore:before {\n  content: \"\\f2d2\"; }\n\n.fa-windows:before {\n  content: \"\\f17a\"; }\n\n.fa-won-sign:before {\n  content: \"\\f159\"; }\n\n.fa-wordpress:before {\n  content: \"\\f19a\"; }\n\n.fa-wordpress-simple:before {\n  content: \"\\f411\"; }\n\n.fa-wpbeginner:before {\n  content: \"\\f297\"; }\n\n.fa-wpexplorer:before {\n  content: \"\\f2de\"; }\n\n.fa-wpforms:before {\n  content: \"\\f298\"; }\n\n.fa-wrench:before {\n  content: \"\\f0ad\"; }\n\n.fa-xbox:before {\n  content: \"\\f412\"; }\n\n.fa-xing:before {\n  content: \"\\f168\"; }\n\n.fa-xing-square:before {\n  content: \"\\f169\"; }\n\n.fa-y-combinator:before {\n  content: \"\\f23b\"; }\n\n.fa-yahoo:before {\n  content: \"\\f19e\"; }\n\n.fa-yandex:before {\n  content: \"\\f413\"; }\n\n.fa-yandex-international:before {\n  content: \"\\f414\"; }\n\n.fa-yelp:before {\n  content: \"\\f1e9\"; }\n\n.fa-yen-sign:before {\n  content: \"\\f157\"; }\n\n.fa-yoast:before {\n  content: \"\\f2b1\"; }\n\n.fa-youtube:before {\n  content: \"\\f167\"; }\n\n.fa-youtube-square:before {\n  content: \"\\f431\"; }\n\n.sr-only {\n  border: 0;\n  clip: rect(0, 0, 0, 0);\n  height: 1px;\n  margin: -1px;\n  overflow: hidden;\n  padding: 0;\n  position: absolute;\n  width: 1px; }\n\n.sr-only-focusable:active, .sr-only-focusable:focus {\n  clip: auto;\n  height: auto;\n  margin: 0;\n  overflow: visible;\n  position: static;\n  width: auto; }\n@font-face {\n  font-family: 'Font Awesome 5 Brands';\n  font-style: normal;\n  font-weight: normal;\n  src: url(\"../webfonts/fa-brands-400.eot\");\n  src: url(\"../webfonts/fa-brands-400.eot?#iefix\") format(\"embedded-opentype\"), url(\"../webfonts/fa-brands-400.woff2\") format(\"woff2\"), url(\"../webfonts/fa-brands-400.woff\") format(\"woff\"), url(\"../webfonts/fa-brands-400.ttf\") format(\"truetype\"), url(\"../webfonts/fa-brands-400.svg#fontawesome\") format(\"svg\"); }\n\n.fab {\n  font-family: 'Font Awesome 5 Brands'; }\n@font-face {\n  font-family: 'Font Awesome 5 Free';\n  font-style: normal;\n  font-weight: 400;\n  src: url(\"../webfonts/fa-regular-400.eot\");\n  src: url(\"../webfonts/fa-regular-400.eot?#iefix\") format(\"embedded-opentype\"), url(\"../webfonts/fa-regular-400.woff2\") format(\"woff2\"), url(\"../webfonts/fa-regular-400.woff\") format(\"woff\"), url(\"../webfonts/fa-regular-400.ttf\") format(\"truetype\"), url(\"../webfonts/fa-regular-400.svg#fontawesome\") format(\"svg\"); }\n\n.far {\n  font-family: 'Font Awesome 5 Free';\n  font-weight: 400; }\n@font-face {\n  font-family: 'Font Awesome 5 Free';\n  font-style: normal;\n  font-weight: 900;\n  src: url(\"../webfonts/fa-solid-900.eot\");\n  src: url(\"../webfonts/fa-solid-900.eot?#iefix\") format(\"embedded-opentype\"), url(\"../webfonts/fa-solid-900.woff2\") format(\"woff2\"), url(\"../webfonts/fa-solid-900.woff\") format(\"woff\"), url(\"../webfonts/fa-solid-900.ttf\") format(\"truetype\"), url(\"../webfonts/fa-solid-900.svg#fontawesome\") format(\"svg\"); }\n\n.fa,\n.fas {\n  font-family: 'Font Awesome 5 Free';\n  font-weight: 900; }\n"
  },
  {
    "path": "src/sourceDev.WebApp/SharedThemes/flatly/wwwroot/css/site.css",
    "content": "﻿html {\n    position: relative;\n    min-height: 100%;\n}\n\nbody {\n    min-height: 100vh;\n    padding-top: 142px;\n}\n\n\n#newPostLink {\n    position: absolute;\n    top: 170px;\n    right: 0px;\n}\n\n#editPostLink {\n    position: absolute;\n    top: 200px;\n    right: 0px;\n}\n\n#unpublishPostLink {\n    position: absolute;\n    top: 230px !important;\n    right: 0px !important;\n}\n\n#pageManagerLink {\n    position: absolute;\n    top: 170px;\n    right: 0px;\n}\n\n#newPageLink {\n    position: absolute;\n    top: 200px;\n    right: 0px;\n}\n\n#editPageLink {\n    position: absolute;\n    top: 230px;\n    right: 0px\n}\n\n#unpublishPageLink {\n    position: absolute;\n    top: 260px !important;\n    right: 0px !important\n}\n\n#sidenavtoggle {\n    position: absolute;\n    top: 220px;\n    right: 5px;\n}\n\n\n\n@media screen and (max-width: 812px) {\n    #sidenavtoggle,\n    #sidenavmenu {\n        display: none;\n    }\n}\n\n.flex-fill {\n    flex: 1 1 auto !important;\n}\n\n\n.carousel-caption p {\n    font-size: 20px;\n    line-height: 1.4;\n}\n\n@media screen and (max-width: 768px) {\n    .carousel-caption {\n        display: none\n    }\n}\n\n\n\n\nimg, video, iframe {\n    max-width: 100%;\n}\n\ntd img, video, iframe {\n    max-width: none;\n}\n\n\n\n.table td, .table th {\n    vertical-align: inherit;\n}\n\n/******** jquery smartmenu bootstrap 4 ******/\n/* Carets in collapsible mode (make them look like +/- buttons) */\n.navbar-nav.sm-collapsible .sub-arrow {\n    position: absolute;\n    top: 50%;\n    right: 0;\n    margin: -0.7em 0.5em 0 0;\n    border: 1px solid rgba(0, 0, 0, .1);\n    border-radius: .25rem;\n    padding: 0;\n    width: 2em;\n    height: 1.4em;\n    font-size: 1.25rem;\n    line-height: 1.2em;\n    text-align: center;\n}\n\n    .navbar-nav.sm-collapsible .sub-arrow::before {\n        content: '+';\n    }\n\n.navbar-nav.sm-collapsible .show > a > .sub-arrow::before {\n    content: '-';\n}\n\n.navbar-dark .navbar-nav.sm-collapsible .nav-link .sub-arrow {\n    border-color: rgba(255, 255, 255, .1);\n}\n/* make sure there's room for the carets */\n.navbar-nav.sm-collapsible .has-submenu {\n    padding-right: 3em;\n}\n/* keep the carets properly positioned */\n.navbar-nav.sm-collapsible .nav-link,\n.navbar-nav.sm-collapsible .dropdown-item {\n    position: relative;\n}\n\n\n/* Nav carets in expanded mode */\n.navbar-nav:not(.sm-collapsible) .nav-link .sub-arrow {\n    display: inline-block;\n    width: 0;\n    height: 0;\n    margin-left: .255em;\n    vertical-align: .255em;\n    border-top: .3em solid;\n    border-right: .3em solid transparent;\n    border-left: .3em solid transparent;\n}\n/* point the arrows up for .fixed-bottom navbars */\n.fixed-bottom .navbar-nav:not(.sm-collapsible) .nav-link .sub-arrow,\n.fixed-bottom .navbar-nav:not(.sm-collapsible):not([data-sm-skip]) .dropdown-toggle::after {\n    border-top: 0;\n    border-bottom: .3em solid;\n}\n\n\n/* Dropdown carets in expanded mode */\n.navbar-nav:not(.sm-collapsible) .dropdown-item .sub-arrow,\n.navbar-nav:not(.sm-collapsible):not([data-sm-skip]) .dropdown-menu .dropdown-toggle::after {\n    position: absolute;\n    top: 50%;\n    right: 0;\n    width: 0;\n    height: 0;\n    margin-top: -.3em;\n    margin-right: 1em;\n    border-top: .3em solid transparent;\n    border-bottom: .3em solid transparent;\n    border-left: .3em solid;\n}\n/* make sure there's room for the carets */\n.navbar-nav:not(.sm-collapsible) .dropdown-item.has-submenu {\n    padding-right: 2em;\n}\n\n\n/* Scrolling arrows for tall menus */\n.navbar-nav .scroll-up,\n.navbar-nav .scroll-down {\n    position: absolute;\n    display: none;\n    visibility: hidden;\n    height: 20px;\n    overflow: hidden;\n    text-align: center;\n}\n\n.navbar-nav .scroll-up-arrow,\n.navbar-nav .scroll-down-arrow {\n    position: absolute;\n    top: -2px;\n    left: 50%;\n    margin-left: -8px;\n    width: 0;\n    height: 0;\n    overflow: hidden;\n    border-top: 7px solid transparent;\n    border-right: 7px solid transparent;\n    border-bottom: 7px solid;\n    border-left: 7px solid transparent;\n}\n\n.navbar-nav .scroll-down-arrow {\n    top: 6px;\n    border-top: 7px solid;\n    border-right: 7px solid transparent;\n    border-bottom: 7px solid transparent;\n    border-left: 7px solid transparent;\n}\n\n\n/* Add some spacing for 2+ level sub menus in collapsible mode */\n.navbar-nav.sm-collapsible .dropdown-menu .dropdown-menu {\n    margin: .5em;\n}\n\n\n/* Fix SmartMenus sub menus auto width (subMenusMinWidth/subMenusMaxWidth options) */\n.navbar-nav:not([data-sm-skip]) .dropdown-item {\n    white-space: normal;\n}\n\n.navbar-nav:not(.sm-collapsible) .sm-nowrap > li > .dropdown-item {\n    white-space: nowrap;\n}\n/******** end jquery smart menu bootstrap-4 *****************/\n\n.brand-header {\n    height: 100px;\n}\n\nheader .navbar {\n    top: 100px;\n}\n"
  },
  {
    "path": "src/sourceDev.WebApp/SharedThemes/flatly/wwwroot/js/bootstrap.bundle.js",
    "content": "/*!\n  * Bootstrap v5.0.2 (https://getbootstrap.com/)\n  * Copyright 2011-2021 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)\n  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n  */\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n  typeof define === 'function' && define.amd ? define(factory) :\n  (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.bootstrap = factory());\n}(this, (function () { 'use strict';\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): dom/selector-engine.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n  const NODE_TEXT = 3;\n  const SelectorEngine = {\n    find(selector, element = document.documentElement) {\n      return [].concat(...Element.prototype.querySelectorAll.call(element, selector));\n    },\n\n    findOne(selector, element = document.documentElement) {\n      return Element.prototype.querySelector.call(element, selector);\n    },\n\n    children(element, selector) {\n      return [].concat(...element.children).filter(child => child.matches(selector));\n    },\n\n    parents(element, selector) {\n      const parents = [];\n      let ancestor = element.parentNode;\n\n      while (ancestor && ancestor.nodeType === Node.ELEMENT_NODE && ancestor.nodeType !== NODE_TEXT) {\n        if (ancestor.matches(selector)) {\n          parents.push(ancestor);\n        }\n\n        ancestor = ancestor.parentNode;\n      }\n\n      return parents;\n    },\n\n    prev(element, selector) {\n      let previous = element.previousElementSibling;\n\n      while (previous) {\n        if (previous.matches(selector)) {\n          return [previous];\n        }\n\n        previous = previous.previousElementSibling;\n      }\n\n      return [];\n    },\n\n    next(element, selector) {\n      let next = element.nextElementSibling;\n\n      while (next) {\n        if (next.matches(selector)) {\n          return [next];\n        }\n\n        next = next.nextElementSibling;\n      }\n\n      return [];\n    }\n\n  };\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): util/index.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n\n  const MAX_UID = 1000000;\n  const MILLISECONDS_MULTIPLIER = 1000;\n  const TRANSITION_END = 'transitionend'; // Shoutout AngusCroll (https://goo.gl/pxwQGp)\n\n  const toType = obj => {\n    if (obj === null || obj === undefined) {\n      return `${obj}`;\n    }\n\n    return {}.toString.call(obj).match(/\\s([a-z]+)/i)[1].toLowerCase();\n  };\n  /**\n   * --------------------------------------------------------------------------\n   * Public Util Api\n   * --------------------------------------------------------------------------\n   */\n\n\n  const getUID = prefix => {\n    do {\n      prefix += Math.floor(Math.random() * MAX_UID);\n    } while (document.getElementById(prefix));\n\n    return prefix;\n  };\n\n  const getSelector = element => {\n    let selector = element.getAttribute('data-bs-target');\n\n    if (!selector || selector === '#') {\n      let hrefAttr = element.getAttribute('href'); // The only valid content that could double as a selector are IDs or classes,\n      // so everything starting with `#` or `.`. If a \"real\" URL is used as the selector,\n      // `document.querySelector` will rightfully complain it is invalid.\n      // See https://github.com/twbs/bootstrap/issues/32273\n\n      if (!hrefAttr || !hrefAttr.includes('#') && !hrefAttr.startsWith('.')) {\n        return null;\n      } // Just in case some CMS puts out a full URL with the anchor appended\n\n\n      if (hrefAttr.includes('#') && !hrefAttr.startsWith('#')) {\n        hrefAttr = `#${hrefAttr.split('#')[1]}`;\n      }\n\n      selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : null;\n    }\n\n    return selector;\n  };\n\n  const getSelectorFromElement = element => {\n    const selector = getSelector(element);\n\n    if (selector) {\n      return document.querySelector(selector) ? selector : null;\n    }\n\n    return null;\n  };\n\n  const getElementFromSelector = element => {\n    const selector = getSelector(element);\n    return selector ? document.querySelector(selector) : null;\n  };\n\n  const getTransitionDurationFromElement = element => {\n    if (!element) {\n      return 0;\n    } // Get transition-duration of the element\n\n\n    let {\n      transitionDuration,\n      transitionDelay\n    } = window.getComputedStyle(element);\n    const floatTransitionDuration = Number.parseFloat(transitionDuration);\n    const floatTransitionDelay = Number.parseFloat(transitionDelay); // Return 0 if element or transition duration is not found\n\n    if (!floatTransitionDuration && !floatTransitionDelay) {\n      return 0;\n    } // If multiple durations are defined, take the first\n\n\n    transitionDuration = transitionDuration.split(',')[0];\n    transitionDelay = transitionDelay.split(',')[0];\n    return (Number.parseFloat(transitionDuration) + Number.parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER;\n  };\n\n  const triggerTransitionEnd = element => {\n    element.dispatchEvent(new Event(TRANSITION_END));\n  };\n\n  const isElement$1 = obj => {\n    if (!obj || typeof obj !== 'object') {\n      return false;\n    }\n\n    if (typeof obj.jquery !== 'undefined') {\n      obj = obj[0];\n    }\n\n    return typeof obj.nodeType !== 'undefined';\n  };\n\n  const getElement = obj => {\n    if (isElement$1(obj)) {\n      // it's a jQuery object or a node element\n      return obj.jquery ? obj[0] : obj;\n    }\n\n    if (typeof obj === 'string' && obj.length > 0) {\n      return SelectorEngine.findOne(obj);\n    }\n\n    return null;\n  };\n\n  const typeCheckConfig = (componentName, config, configTypes) => {\n    Object.keys(configTypes).forEach(property => {\n      const expectedTypes = configTypes[property];\n      const value = config[property];\n      const valueType = value && isElement$1(value) ? 'element' : toType(value);\n\n      if (!new RegExp(expectedTypes).test(valueType)) {\n        throw new TypeError(`${componentName.toUpperCase()}: Option \"${property}\" provided type \"${valueType}\" but expected type \"${expectedTypes}\".`);\n      }\n    });\n  };\n\n  const isVisible = element => {\n    if (!isElement$1(element) || element.getClientRects().length === 0) {\n      return false;\n    }\n\n    return getComputedStyle(element).getPropertyValue('visibility') === 'visible';\n  };\n\n  const isDisabled = element => {\n    if (!element || element.nodeType !== Node.ELEMENT_NODE) {\n      return true;\n    }\n\n    if (element.classList.contains('disabled')) {\n      return true;\n    }\n\n    if (typeof element.disabled !== 'undefined') {\n      return element.disabled;\n    }\n\n    return element.hasAttribute('disabled') && element.getAttribute('disabled') !== 'false';\n  };\n\n  const findShadowRoot = element => {\n    if (!document.documentElement.attachShadow) {\n      return null;\n    } // Can find the shadow root otherwise it'll return the document\n\n\n    if (typeof element.getRootNode === 'function') {\n      const root = element.getRootNode();\n      return root instanceof ShadowRoot ? root : null;\n    }\n\n    if (element instanceof ShadowRoot) {\n      return element;\n    } // when we don't find a shadow root\n\n\n    if (!element.parentNode) {\n      return null;\n    }\n\n    return findShadowRoot(element.parentNode);\n  };\n\n  const noop = () => {};\n\n  const reflow = element => element.offsetHeight;\n\n  const getjQuery = () => {\n    const {\n      jQuery\n    } = window;\n\n    if (jQuery && !document.body.hasAttribute('data-bs-no-jquery')) {\n      return jQuery;\n    }\n\n    return null;\n  };\n\n  const DOMContentLoadedCallbacks = [];\n\n  const onDOMContentLoaded = callback => {\n    if (document.readyState === 'loading') {\n      // add listener on the first call when the document is in loading state\n      if (!DOMContentLoadedCallbacks.length) {\n        document.addEventListener('DOMContentLoaded', () => {\n          DOMContentLoadedCallbacks.forEach(callback => callback());\n        });\n      }\n\n      DOMContentLoadedCallbacks.push(callback);\n    } else {\n      callback();\n    }\n  };\n\n  const isRTL = () => document.documentElement.dir === 'rtl';\n\n  const defineJQueryPlugin = plugin => {\n    onDOMContentLoaded(() => {\n      const $ = getjQuery();\n      /* istanbul ignore if */\n\n      if ($) {\n        const name = plugin.NAME;\n        const JQUERY_NO_CONFLICT = $.fn[name];\n        $.fn[name] = plugin.jQueryInterface;\n        $.fn[name].Constructor = plugin;\n\n        $.fn[name].noConflict = () => {\n          $.fn[name] = JQUERY_NO_CONFLICT;\n          return plugin.jQueryInterface;\n        };\n      }\n    });\n  };\n\n  const execute = callback => {\n    if (typeof callback === 'function') {\n      callback();\n    }\n  };\n\n  const executeAfterTransition = (callback, transitionElement, waitForTransition = true) => {\n    if (!waitForTransition) {\n      execute(callback);\n      return;\n    }\n\n    const durationPadding = 5;\n    const emulatedDuration = getTransitionDurationFromElement(transitionElement) + durationPadding;\n    let called = false;\n\n    const handler = ({\n      target\n    }) => {\n      if (target !== transitionElement) {\n        return;\n      }\n\n      called = true;\n      transitionElement.removeEventListener(TRANSITION_END, handler);\n      execute(callback);\n    };\n\n    transitionElement.addEventListener(TRANSITION_END, handler);\n    setTimeout(() => {\n      if (!called) {\n        triggerTransitionEnd(transitionElement);\n      }\n    }, emulatedDuration);\n  };\n  /**\n   * Return the previous/next element of a list.\n   *\n   * @param {array} list    The list of elements\n   * @param activeElement   The active element\n   * @param shouldGetNext   Choose to get next or previous element\n   * @param isCycleAllowed\n   * @return {Element|elem} The proper element\n   */\n\n\n  const getNextActiveElement = (list, activeElement, shouldGetNext, isCycleAllowed) => {\n    let index = list.indexOf(activeElement); // if the element does not exist in the list return an element depending on the direction and if cycle is allowed\n\n    if (index === -1) {\n      return list[!shouldGetNext && isCycleAllowed ? list.length - 1 : 0];\n    }\n\n    const listLength = list.length;\n    index += shouldGetNext ? 1 : -1;\n\n    if (isCycleAllowed) {\n      index = (index + listLength) % listLength;\n    }\n\n    return list[Math.max(0, Math.min(index, listLength - 1))];\n  };\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): dom/event-handler.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const namespaceRegex = /[^.]*(?=\\..*)\\.|.*/;\n  const stripNameRegex = /\\..*/;\n  const stripUidRegex = /::\\d+$/;\n  const eventRegistry = {}; // Events storage\n\n  let uidEvent = 1;\n  const customEvents = {\n    mouseenter: 'mouseover',\n    mouseleave: 'mouseout'\n  };\n  const customEventsRegex = /^(mouseenter|mouseleave)/i;\n  const nativeEvents = new Set(['click', 'dblclick', 'mouseup', 'mousedown', 'contextmenu', 'mousewheel', 'DOMMouseScroll', 'mouseover', 'mouseout', 'mousemove', 'selectstart', 'selectend', 'keydown', 'keypress', 'keyup', 'orientationchange', 'touchstart', 'touchmove', 'touchend', 'touchcancel', 'pointerdown', 'pointermove', 'pointerup', 'pointerleave', 'pointercancel', 'gesturestart', 'gesturechange', 'gestureend', 'focus', 'blur', 'change', 'reset', 'select', 'submit', 'focusin', 'focusout', 'load', 'unload', 'beforeunload', 'resize', 'move', 'DOMContentLoaded', 'readystatechange', 'error', 'abort', 'scroll']);\n  /**\n   * ------------------------------------------------------------------------\n   * Private methods\n   * ------------------------------------------------------------------------\n   */\n\n  function getUidEvent(element, uid) {\n    return uid && `${uid}::${uidEvent++}` || element.uidEvent || uidEvent++;\n  }\n\n  function getEvent(element) {\n    const uid = getUidEvent(element);\n    element.uidEvent = uid;\n    eventRegistry[uid] = eventRegistry[uid] || {};\n    return eventRegistry[uid];\n  }\n\n  function bootstrapHandler(element, fn) {\n    return function handler(event) {\n      event.delegateTarget = element;\n\n      if (handler.oneOff) {\n        EventHandler.off(element, event.type, fn);\n      }\n\n      return fn.apply(element, [event]);\n    };\n  }\n\n  function bootstrapDelegationHandler(element, selector, fn) {\n    return function handler(event) {\n      const domElements = element.querySelectorAll(selector);\n\n      for (let {\n        target\n      } = event; target && target !== this; target = target.parentNode) {\n        for (let i = domElements.length; i--;) {\n          if (domElements[i] === target) {\n            event.delegateTarget = target;\n\n            if (handler.oneOff) {\n              // eslint-disable-next-line unicorn/consistent-destructuring\n              EventHandler.off(element, event.type, selector, fn);\n            }\n\n            return fn.apply(target, [event]);\n          }\n        }\n      } // To please ESLint\n\n\n      return null;\n    };\n  }\n\n  function findHandler(events, handler, delegationSelector = null) {\n    const uidEventList = Object.keys(events);\n\n    for (let i = 0, len = uidEventList.length; i < len; i++) {\n      const event = events[uidEventList[i]];\n\n      if (event.originalHandler === handler && event.delegationSelector === delegationSelector) {\n        return event;\n      }\n    }\n\n    return null;\n  }\n\n  function normalizeParams(originalTypeEvent, handler, delegationFn) {\n    const delegation = typeof handler === 'string';\n    const originalHandler = delegation ? delegationFn : handler;\n    let typeEvent = getTypeEvent(originalTypeEvent);\n    const isNative = nativeEvents.has(typeEvent);\n\n    if (!isNative) {\n      typeEvent = originalTypeEvent;\n    }\n\n    return [delegation, originalHandler, typeEvent];\n  }\n\n  function addHandler(element, originalTypeEvent, handler, delegationFn, oneOff) {\n    if (typeof originalTypeEvent !== 'string' || !element) {\n      return;\n    }\n\n    if (!handler) {\n      handler = delegationFn;\n      delegationFn = null;\n    } // in case of mouseenter or mouseleave wrap the handler within a function that checks for its DOM position\n    // this prevents the handler from being dispatched the same way as mouseover or mouseout does\n\n\n    if (customEventsRegex.test(originalTypeEvent)) {\n      const wrapFn = fn => {\n        return function (event) {\n          if (!event.relatedTarget || event.relatedTarget !== event.delegateTarget && !event.delegateTarget.contains(event.relatedTarget)) {\n            return fn.call(this, event);\n          }\n        };\n      };\n\n      if (delegationFn) {\n        delegationFn = wrapFn(delegationFn);\n      } else {\n        handler = wrapFn(handler);\n      }\n    }\n\n    const [delegation, originalHandler, typeEvent] = normalizeParams(originalTypeEvent, handler, delegationFn);\n    const events = getEvent(element);\n    const handlers = events[typeEvent] || (events[typeEvent] = {});\n    const previousFn = findHandler(handlers, originalHandler, delegation ? handler : null);\n\n    if (previousFn) {\n      previousFn.oneOff = previousFn.oneOff && oneOff;\n      return;\n    }\n\n    const uid = getUidEvent(originalHandler, originalTypeEvent.replace(namespaceRegex, ''));\n    const fn = delegation ? bootstrapDelegationHandler(element, handler, delegationFn) : bootstrapHandler(element, handler);\n    fn.delegationSelector = delegation ? handler : null;\n    fn.originalHandler = originalHandler;\n    fn.oneOff = oneOff;\n    fn.uidEvent = uid;\n    handlers[uid] = fn;\n    element.addEventListener(typeEvent, fn, delegation);\n  }\n\n  function removeHandler(element, events, typeEvent, handler, delegationSelector) {\n    const fn = findHandler(events[typeEvent], handler, delegationSelector);\n\n    if (!fn) {\n      return;\n    }\n\n    element.removeEventListener(typeEvent, fn, Boolean(delegationSelector));\n    delete events[typeEvent][fn.uidEvent];\n  }\n\n  function removeNamespacedHandlers(element, events, typeEvent, namespace) {\n    const storeElementEvent = events[typeEvent] || {};\n    Object.keys(storeElementEvent).forEach(handlerKey => {\n      if (handlerKey.includes(namespace)) {\n        const event = storeElementEvent[handlerKey];\n        removeHandler(element, events, typeEvent, event.originalHandler, event.delegationSelector);\n      }\n    });\n  }\n\n  function getTypeEvent(event) {\n    // allow to get the native events from namespaced events ('click.bs.button' --> 'click')\n    event = event.replace(stripNameRegex, '');\n    return customEvents[event] || event;\n  }\n\n  const EventHandler = {\n    on(element, event, handler, delegationFn) {\n      addHandler(element, event, handler, delegationFn, false);\n    },\n\n    one(element, event, handler, delegationFn) {\n      addHandler(element, event, handler, delegationFn, true);\n    },\n\n    off(element, originalTypeEvent, handler, delegationFn) {\n      if (typeof originalTypeEvent !== 'string' || !element) {\n        return;\n      }\n\n      const [delegation, originalHandler, typeEvent] = normalizeParams(originalTypeEvent, handler, delegationFn);\n      const inNamespace = typeEvent !== originalTypeEvent;\n      const events = getEvent(element);\n      const isNamespace = originalTypeEvent.startsWith('.');\n\n      if (typeof originalHandler !== 'undefined') {\n        // Simplest case: handler is passed, remove that listener ONLY.\n        if (!events || !events[typeEvent]) {\n          return;\n        }\n\n        removeHandler(element, events, typeEvent, originalHandler, delegation ? handler : null);\n        return;\n      }\n\n      if (isNamespace) {\n        Object.keys(events).forEach(elementEvent => {\n          removeNamespacedHandlers(element, events, elementEvent, originalTypeEvent.slice(1));\n        });\n      }\n\n      const storeElementEvent = events[typeEvent] || {};\n      Object.keys(storeElementEvent).forEach(keyHandlers => {\n        const handlerKey = keyHandlers.replace(stripUidRegex, '');\n\n        if (!inNamespace || originalTypeEvent.includes(handlerKey)) {\n          const event = storeElementEvent[keyHandlers];\n          removeHandler(element, events, typeEvent, event.originalHandler, event.delegationSelector);\n        }\n      });\n    },\n\n    trigger(element, event, args) {\n      if (typeof event !== 'string' || !element) {\n        return null;\n      }\n\n      const $ = getjQuery();\n      const typeEvent = getTypeEvent(event);\n      const inNamespace = event !== typeEvent;\n      const isNative = nativeEvents.has(typeEvent);\n      let jQueryEvent;\n      let bubbles = true;\n      let nativeDispatch = true;\n      let defaultPrevented = false;\n      let evt = null;\n\n      if (inNamespace && $) {\n        jQueryEvent = $.Event(event, args);\n        $(element).trigger(jQueryEvent);\n        bubbles = !jQueryEvent.isPropagationStopped();\n        nativeDispatch = !jQueryEvent.isImmediatePropagationStopped();\n        defaultPrevented = jQueryEvent.isDefaultPrevented();\n      }\n\n      if (isNative) {\n        evt = document.createEvent('HTMLEvents');\n        evt.initEvent(typeEvent, bubbles, true);\n      } else {\n        evt = new CustomEvent(event, {\n          bubbles,\n          cancelable: true\n        });\n      } // merge custom information in our event\n\n\n      if (typeof args !== 'undefined') {\n        Object.keys(args).forEach(key => {\n          Object.defineProperty(evt, key, {\n            get() {\n              return args[key];\n            }\n\n          });\n        });\n      }\n\n      if (defaultPrevented) {\n        evt.preventDefault();\n      }\n\n      if (nativeDispatch) {\n        element.dispatchEvent(evt);\n      }\n\n      if (evt.defaultPrevented && typeof jQueryEvent !== 'undefined') {\n        jQueryEvent.preventDefault();\n      }\n\n      return evt;\n    }\n\n  };\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): dom/data.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n  const elementMap = new Map();\n  var Data = {\n    set(element, key, instance) {\n      if (!elementMap.has(element)) {\n        elementMap.set(element, new Map());\n      }\n\n      const instanceMap = elementMap.get(element); // make it clear we only want one instance per element\n      // can be removed later when multiple key/instances are fine to be used\n\n      if (!instanceMap.has(key) && instanceMap.size !== 0) {\n        // eslint-disable-next-line no-console\n        console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(instanceMap.keys())[0]}.`);\n        return;\n      }\n\n      instanceMap.set(key, instance);\n    },\n\n    get(element, key) {\n      if (elementMap.has(element)) {\n        return elementMap.get(element).get(key) || null;\n      }\n\n      return null;\n    },\n\n    remove(element, key) {\n      if (!elementMap.has(element)) {\n        return;\n      }\n\n      const instanceMap = elementMap.get(element);\n      instanceMap.delete(key); // free up element references if there are no instances left for an element\n\n      if (instanceMap.size === 0) {\n        elementMap.delete(element);\n      }\n    }\n\n  };\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): base-component.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const VERSION = '5.0.2';\n\n  class BaseComponent {\n    constructor(element) {\n      element = getElement(element);\n\n      if (!element) {\n        return;\n      }\n\n      this._element = element;\n      Data.set(this._element, this.constructor.DATA_KEY, this);\n    }\n\n    dispose() {\n      Data.remove(this._element, this.constructor.DATA_KEY);\n      EventHandler.off(this._element, this.constructor.EVENT_KEY);\n      Object.getOwnPropertyNames(this).forEach(propertyName => {\n        this[propertyName] = null;\n      });\n    }\n\n    _queueCallback(callback, element, isAnimated = true) {\n      executeAfterTransition(callback, element, isAnimated);\n    }\n    /** Static */\n\n\n    static getInstance(element) {\n      return Data.get(element, this.DATA_KEY);\n    }\n\n    static getOrCreateInstance(element, config = {}) {\n      return this.getInstance(element) || new this(element, typeof config === 'object' ? config : null);\n    }\n\n    static get VERSION() {\n      return VERSION;\n    }\n\n    static get NAME() {\n      throw new Error('You have to implement the static method \"NAME\", for each component!');\n    }\n\n    static get DATA_KEY() {\n      return `bs.${this.NAME}`;\n    }\n\n    static get EVENT_KEY() {\n      return `.${this.DATA_KEY}`;\n    }\n\n  }\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): alert.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$c = 'alert';\n  const DATA_KEY$b = 'bs.alert';\n  const EVENT_KEY$b = `.${DATA_KEY$b}`;\n  const DATA_API_KEY$8 = '.data-api';\n  const SELECTOR_DISMISS = '[data-bs-dismiss=\"alert\"]';\n  const EVENT_CLOSE = `close${EVENT_KEY$b}`;\n  const EVENT_CLOSED = `closed${EVENT_KEY$b}`;\n  const EVENT_CLICK_DATA_API$7 = `click${EVENT_KEY$b}${DATA_API_KEY$8}`;\n  const CLASS_NAME_ALERT = 'alert';\n  const CLASS_NAME_FADE$6 = 'fade';\n  const CLASS_NAME_SHOW$9 = 'show';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Alert extends BaseComponent {\n    // Getters\n    static get NAME() {\n      return NAME$c;\n    } // Public\n\n\n    close(element) {\n      const rootElement = element ? this._getRootElement(element) : this._element;\n\n      const customEvent = this._triggerCloseEvent(rootElement);\n\n      if (customEvent === null || customEvent.defaultPrevented) {\n        return;\n      }\n\n      this._removeElement(rootElement);\n    } // Private\n\n\n    _getRootElement(element) {\n      return getElementFromSelector(element) || element.closest(`.${CLASS_NAME_ALERT}`);\n    }\n\n    _triggerCloseEvent(element) {\n      return EventHandler.trigger(element, EVENT_CLOSE);\n    }\n\n    _removeElement(element) {\n      element.classList.remove(CLASS_NAME_SHOW$9);\n      const isAnimated = element.classList.contains(CLASS_NAME_FADE$6);\n\n      this._queueCallback(() => this._destroyElement(element), element, isAnimated);\n    }\n\n    _destroyElement(element) {\n      element.remove();\n      EventHandler.trigger(element, EVENT_CLOSED);\n    } // Static\n\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = Alert.getOrCreateInstance(this);\n\n        if (config === 'close') {\n          data[config](this);\n        }\n      });\n    }\n\n    static handleDismiss(alertInstance) {\n      return function (event) {\n        if (event) {\n          event.preventDefault();\n        }\n\n        alertInstance.close(this);\n      };\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(document, EVENT_CLICK_DATA_API$7, SELECTOR_DISMISS, Alert.handleDismiss(new Alert()));\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Alert to jQuery only if jQuery is present\n   */\n\n  defineJQueryPlugin(Alert);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): button.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$b = 'button';\n  const DATA_KEY$a = 'bs.button';\n  const EVENT_KEY$a = `.${DATA_KEY$a}`;\n  const DATA_API_KEY$7 = '.data-api';\n  const CLASS_NAME_ACTIVE$3 = 'active';\n  const SELECTOR_DATA_TOGGLE$5 = '[data-bs-toggle=\"button\"]';\n  const EVENT_CLICK_DATA_API$6 = `click${EVENT_KEY$a}${DATA_API_KEY$7}`;\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Button extends BaseComponent {\n    // Getters\n    static get NAME() {\n      return NAME$b;\n    } // Public\n\n\n    toggle() {\n      // Toggle class and sync the `aria-pressed` attribute with the return value of the `.toggle()` method\n      this._element.setAttribute('aria-pressed', this._element.classList.toggle(CLASS_NAME_ACTIVE$3));\n    } // Static\n\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = Button.getOrCreateInstance(this);\n\n        if (config === 'toggle') {\n          data[config]();\n        }\n      });\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(document, EVENT_CLICK_DATA_API$6, SELECTOR_DATA_TOGGLE$5, event => {\n    event.preventDefault();\n    const button = event.target.closest(SELECTOR_DATA_TOGGLE$5);\n    const data = Button.getOrCreateInstance(button);\n    data.toggle();\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Button to jQuery only if jQuery is present\n   */\n\n  defineJQueryPlugin(Button);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): dom/manipulator.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  function normalizeData(val) {\n    if (val === 'true') {\n      return true;\n    }\n\n    if (val === 'false') {\n      return false;\n    }\n\n    if (val === Number(val).toString()) {\n      return Number(val);\n    }\n\n    if (val === '' || val === 'null') {\n      return null;\n    }\n\n    return val;\n  }\n\n  function normalizeDataKey(key) {\n    return key.replace(/[A-Z]/g, chr => `-${chr.toLowerCase()}`);\n  }\n\n  const Manipulator = {\n    setDataAttribute(element, key, value) {\n      element.setAttribute(`data-bs-${normalizeDataKey(key)}`, value);\n    },\n\n    removeDataAttribute(element, key) {\n      element.removeAttribute(`data-bs-${normalizeDataKey(key)}`);\n    },\n\n    getDataAttributes(element) {\n      if (!element) {\n        return {};\n      }\n\n      const attributes = {};\n      Object.keys(element.dataset).filter(key => key.startsWith('bs')).forEach(key => {\n        let pureKey = key.replace(/^bs/, '');\n        pureKey = pureKey.charAt(0).toLowerCase() + pureKey.slice(1, pureKey.length);\n        attributes[pureKey] = normalizeData(element.dataset[key]);\n      });\n      return attributes;\n    },\n\n    getDataAttribute(element, key) {\n      return normalizeData(element.getAttribute(`data-bs-${normalizeDataKey(key)}`));\n    },\n\n    offset(element) {\n      const rect = element.getBoundingClientRect();\n      return {\n        top: rect.top + document.body.scrollTop,\n        left: rect.left + document.body.scrollLeft\n      };\n    },\n\n    position(element) {\n      return {\n        top: element.offsetTop,\n        left: element.offsetLeft\n      };\n    }\n\n  };\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): carousel.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$a = 'carousel';\n  const DATA_KEY$9 = 'bs.carousel';\n  const EVENT_KEY$9 = `.${DATA_KEY$9}`;\n  const DATA_API_KEY$6 = '.data-api';\n  const ARROW_LEFT_KEY = 'ArrowLeft';\n  const ARROW_RIGHT_KEY = 'ArrowRight';\n  const TOUCHEVENT_COMPAT_WAIT = 500; // Time for mouse compat events to fire after touch\n\n  const SWIPE_THRESHOLD = 40;\n  const Default$9 = {\n    interval: 5000,\n    keyboard: true,\n    slide: false,\n    pause: 'hover',\n    wrap: true,\n    touch: true\n  };\n  const DefaultType$9 = {\n    interval: '(number|boolean)',\n    keyboard: 'boolean',\n    slide: '(boolean|string)',\n    pause: '(string|boolean)',\n    wrap: 'boolean',\n    touch: 'boolean'\n  };\n  const ORDER_NEXT = 'next';\n  const ORDER_PREV = 'prev';\n  const DIRECTION_LEFT = 'left';\n  const DIRECTION_RIGHT = 'right';\n  const KEY_TO_DIRECTION = {\n    [ARROW_LEFT_KEY]: DIRECTION_RIGHT,\n    [ARROW_RIGHT_KEY]: DIRECTION_LEFT\n  };\n  const EVENT_SLIDE = `slide${EVENT_KEY$9}`;\n  const EVENT_SLID = `slid${EVENT_KEY$9}`;\n  const EVENT_KEYDOWN = `keydown${EVENT_KEY$9}`;\n  const EVENT_MOUSEENTER = `mouseenter${EVENT_KEY$9}`;\n  const EVENT_MOUSELEAVE = `mouseleave${EVENT_KEY$9}`;\n  const EVENT_TOUCHSTART = `touchstart${EVENT_KEY$9}`;\n  const EVENT_TOUCHMOVE = `touchmove${EVENT_KEY$9}`;\n  const EVENT_TOUCHEND = `touchend${EVENT_KEY$9}`;\n  const EVENT_POINTERDOWN = `pointerdown${EVENT_KEY$9}`;\n  const EVENT_POINTERUP = `pointerup${EVENT_KEY$9}`;\n  const EVENT_DRAG_START = `dragstart${EVENT_KEY$9}`;\n  const EVENT_LOAD_DATA_API$2 = `load${EVENT_KEY$9}${DATA_API_KEY$6}`;\n  const EVENT_CLICK_DATA_API$5 = `click${EVENT_KEY$9}${DATA_API_KEY$6}`;\n  const CLASS_NAME_CAROUSEL = 'carousel';\n  const CLASS_NAME_ACTIVE$2 = 'active';\n  const CLASS_NAME_SLIDE = 'slide';\n  const CLASS_NAME_END = 'carousel-item-end';\n  const CLASS_NAME_START = 'carousel-item-start';\n  const CLASS_NAME_NEXT = 'carousel-item-next';\n  const CLASS_NAME_PREV = 'carousel-item-prev';\n  const CLASS_NAME_POINTER_EVENT = 'pointer-event';\n  const SELECTOR_ACTIVE$1 = '.active';\n  const SELECTOR_ACTIVE_ITEM = '.active.carousel-item';\n  const SELECTOR_ITEM = '.carousel-item';\n  const SELECTOR_ITEM_IMG = '.carousel-item img';\n  const SELECTOR_NEXT_PREV = '.carousel-item-next, .carousel-item-prev';\n  const SELECTOR_INDICATORS = '.carousel-indicators';\n  const SELECTOR_INDICATOR = '[data-bs-target]';\n  const SELECTOR_DATA_SLIDE = '[data-bs-slide], [data-bs-slide-to]';\n  const SELECTOR_DATA_RIDE = '[data-bs-ride=\"carousel\"]';\n  const POINTER_TYPE_TOUCH = 'touch';\n  const POINTER_TYPE_PEN = 'pen';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Carousel extends BaseComponent {\n    constructor(element, config) {\n      super(element);\n      this._items = null;\n      this._interval = null;\n      this._activeElement = null;\n      this._isPaused = false;\n      this._isSliding = false;\n      this.touchTimeout = null;\n      this.touchStartX = 0;\n      this.touchDeltaX = 0;\n      this._config = this._getConfig(config);\n      this._indicatorsElement = SelectorEngine.findOne(SELECTOR_INDICATORS, this._element);\n      this._touchSupported = 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0;\n      this._pointerEvent = Boolean(window.PointerEvent);\n\n      this._addEventListeners();\n    } // Getters\n\n\n    static get Default() {\n      return Default$9;\n    }\n\n    static get NAME() {\n      return NAME$a;\n    } // Public\n\n\n    next() {\n      this._slide(ORDER_NEXT);\n    }\n\n    nextWhenVisible() {\n      // Don't call next when the page isn't visible\n      // or the carousel or its parent isn't visible\n      if (!document.hidden && isVisible(this._element)) {\n        this.next();\n      }\n    }\n\n    prev() {\n      this._slide(ORDER_PREV);\n    }\n\n    pause(event) {\n      if (!event) {\n        this._isPaused = true;\n      }\n\n      if (SelectorEngine.findOne(SELECTOR_NEXT_PREV, this._element)) {\n        triggerTransitionEnd(this._element);\n        this.cycle(true);\n      }\n\n      clearInterval(this._interval);\n      this._interval = null;\n    }\n\n    cycle(event) {\n      if (!event) {\n        this._isPaused = false;\n      }\n\n      if (this._interval) {\n        clearInterval(this._interval);\n        this._interval = null;\n      }\n\n      if (this._config && this._config.interval && !this._isPaused) {\n        this._updateInterval();\n\n        this._interval = setInterval((document.visibilityState ? this.nextWhenVisible : this.next).bind(this), this._config.interval);\n      }\n    }\n\n    to(index) {\n      this._activeElement = SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element);\n\n      const activeIndex = this._getItemIndex(this._activeElement);\n\n      if (index > this._items.length - 1 || index < 0) {\n        return;\n      }\n\n      if (this._isSliding) {\n        EventHandler.one(this._element, EVENT_SLID, () => this.to(index));\n        return;\n      }\n\n      if (activeIndex === index) {\n        this.pause();\n        this.cycle();\n        return;\n      }\n\n      const order = index > activeIndex ? ORDER_NEXT : ORDER_PREV;\n\n      this._slide(order, this._items[index]);\n    } // Private\n\n\n    _getConfig(config) {\n      config = { ...Default$9,\n        ...Manipulator.getDataAttributes(this._element),\n        ...(typeof config === 'object' ? config : {})\n      };\n      typeCheckConfig(NAME$a, config, DefaultType$9);\n      return config;\n    }\n\n    _handleSwipe() {\n      const absDeltax = Math.abs(this.touchDeltaX);\n\n      if (absDeltax <= SWIPE_THRESHOLD) {\n        return;\n      }\n\n      const direction = absDeltax / this.touchDeltaX;\n      this.touchDeltaX = 0;\n\n      if (!direction) {\n        return;\n      }\n\n      this._slide(direction > 0 ? DIRECTION_RIGHT : DIRECTION_LEFT);\n    }\n\n    _addEventListeners() {\n      if (this._config.keyboard) {\n        EventHandler.on(this._element, EVENT_KEYDOWN, event => this._keydown(event));\n      }\n\n      if (this._config.pause === 'hover') {\n        EventHandler.on(this._element, EVENT_MOUSEENTER, event => this.pause(event));\n        EventHandler.on(this._element, EVENT_MOUSELEAVE, event => this.cycle(event));\n      }\n\n      if (this._config.touch && this._touchSupported) {\n        this._addTouchEventListeners();\n      }\n    }\n\n    _addTouchEventListeners() {\n      const start = event => {\n        if (this._pointerEvent && (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH)) {\n          this.touchStartX = event.clientX;\n        } else if (!this._pointerEvent) {\n          this.touchStartX = event.touches[0].clientX;\n        }\n      };\n\n      const move = event => {\n        // ensure swiping with one touch and not pinching\n        this.touchDeltaX = event.touches && event.touches.length > 1 ? 0 : event.touches[0].clientX - this.touchStartX;\n      };\n\n      const end = event => {\n        if (this._pointerEvent && (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH)) {\n          this.touchDeltaX = event.clientX - this.touchStartX;\n        }\n\n        this._handleSwipe();\n\n        if (this._config.pause === 'hover') {\n          // If it's a touch-enabled device, mouseenter/leave are fired as\n          // part of the mouse compatibility events on first tap - the carousel\n          // would stop cycling until user tapped out of it;\n          // here, we listen for touchend, explicitly pause the carousel\n          // (as if it's the second time we tap on it, mouseenter compat event\n          // is NOT fired) and after a timeout (to allow for mouse compatibility\n          // events to fire) we explicitly restart cycling\n          this.pause();\n\n          if (this.touchTimeout) {\n            clearTimeout(this.touchTimeout);\n          }\n\n          this.touchTimeout = setTimeout(event => this.cycle(event), TOUCHEVENT_COMPAT_WAIT + this._config.interval);\n        }\n      };\n\n      SelectorEngine.find(SELECTOR_ITEM_IMG, this._element).forEach(itemImg => {\n        EventHandler.on(itemImg, EVENT_DRAG_START, e => e.preventDefault());\n      });\n\n      if (this._pointerEvent) {\n        EventHandler.on(this._element, EVENT_POINTERDOWN, event => start(event));\n        EventHandler.on(this._element, EVENT_POINTERUP, event => end(event));\n\n        this._element.classList.add(CLASS_NAME_POINTER_EVENT);\n      } else {\n        EventHandler.on(this._element, EVENT_TOUCHSTART, event => start(event));\n        EventHandler.on(this._element, EVENT_TOUCHMOVE, event => move(event));\n        EventHandler.on(this._element, EVENT_TOUCHEND, event => end(event));\n      }\n    }\n\n    _keydown(event) {\n      if (/input|textarea/i.test(event.target.tagName)) {\n        return;\n      }\n\n      const direction = KEY_TO_DIRECTION[event.key];\n\n      if (direction) {\n        event.preventDefault();\n\n        this._slide(direction);\n      }\n    }\n\n    _getItemIndex(element) {\n      this._items = element && element.parentNode ? SelectorEngine.find(SELECTOR_ITEM, element.parentNode) : [];\n      return this._items.indexOf(element);\n    }\n\n    _getItemByOrder(order, activeElement) {\n      const isNext = order === ORDER_NEXT;\n      return getNextActiveElement(this._items, activeElement, isNext, this._config.wrap);\n    }\n\n    _triggerSlideEvent(relatedTarget, eventDirectionName) {\n      const targetIndex = this._getItemIndex(relatedTarget);\n\n      const fromIndex = this._getItemIndex(SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element));\n\n      return EventHandler.trigger(this._element, EVENT_SLIDE, {\n        relatedTarget,\n        direction: eventDirectionName,\n        from: fromIndex,\n        to: targetIndex\n      });\n    }\n\n    _setActiveIndicatorElement(element) {\n      if (this._indicatorsElement) {\n        const activeIndicator = SelectorEngine.findOne(SELECTOR_ACTIVE$1, this._indicatorsElement);\n        activeIndicator.classList.remove(CLASS_NAME_ACTIVE$2);\n        activeIndicator.removeAttribute('aria-current');\n        const indicators = SelectorEngine.find(SELECTOR_INDICATOR, this._indicatorsElement);\n\n        for (let i = 0; i < indicators.length; i++) {\n          if (Number.parseInt(indicators[i].getAttribute('data-bs-slide-to'), 10) === this._getItemIndex(element)) {\n            indicators[i].classList.add(CLASS_NAME_ACTIVE$2);\n            indicators[i].setAttribute('aria-current', 'true');\n            break;\n          }\n        }\n      }\n    }\n\n    _updateInterval() {\n      const element = this._activeElement || SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element);\n\n      if (!element) {\n        return;\n      }\n\n      const elementInterval = Number.parseInt(element.getAttribute('data-bs-interval'), 10);\n\n      if (elementInterval) {\n        this._config.defaultInterval = this._config.defaultInterval || this._config.interval;\n        this._config.interval = elementInterval;\n      } else {\n        this._config.interval = this._config.defaultInterval || this._config.interval;\n      }\n    }\n\n    _slide(directionOrOrder, element) {\n      const order = this._directionToOrder(directionOrOrder);\n\n      const activeElement = SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element);\n\n      const activeElementIndex = this._getItemIndex(activeElement);\n\n      const nextElement = element || this._getItemByOrder(order, activeElement);\n\n      const nextElementIndex = this._getItemIndex(nextElement);\n\n      const isCycling = Boolean(this._interval);\n      const isNext = order === ORDER_NEXT;\n      const directionalClassName = isNext ? CLASS_NAME_START : CLASS_NAME_END;\n      const orderClassName = isNext ? CLASS_NAME_NEXT : CLASS_NAME_PREV;\n\n      const eventDirectionName = this._orderToDirection(order);\n\n      if (nextElement && nextElement.classList.contains(CLASS_NAME_ACTIVE$2)) {\n        this._isSliding = false;\n        return;\n      }\n\n      if (this._isSliding) {\n        return;\n      }\n\n      const slideEvent = this._triggerSlideEvent(nextElement, eventDirectionName);\n\n      if (slideEvent.defaultPrevented) {\n        return;\n      }\n\n      if (!activeElement || !nextElement) {\n        // Some weirdness is happening, so we bail\n        return;\n      }\n\n      this._isSliding = true;\n\n      if (isCycling) {\n        this.pause();\n      }\n\n      this._setActiveIndicatorElement(nextElement);\n\n      this._activeElement = nextElement;\n\n      const triggerSlidEvent = () => {\n        EventHandler.trigger(this._element, EVENT_SLID, {\n          relatedTarget: nextElement,\n          direction: eventDirectionName,\n          from: activeElementIndex,\n          to: nextElementIndex\n        });\n      };\n\n      if (this._element.classList.contains(CLASS_NAME_SLIDE)) {\n        nextElement.classList.add(orderClassName);\n        reflow(nextElement);\n        activeElement.classList.add(directionalClassName);\n        nextElement.classList.add(directionalClassName);\n\n        const completeCallBack = () => {\n          nextElement.classList.remove(directionalClassName, orderClassName);\n          nextElement.classList.add(CLASS_NAME_ACTIVE$2);\n          activeElement.classList.remove(CLASS_NAME_ACTIVE$2, orderClassName, directionalClassName);\n          this._isSliding = false;\n          setTimeout(triggerSlidEvent, 0);\n        };\n\n        this._queueCallback(completeCallBack, activeElement, true);\n      } else {\n        activeElement.classList.remove(CLASS_NAME_ACTIVE$2);\n        nextElement.classList.add(CLASS_NAME_ACTIVE$2);\n        this._isSliding = false;\n        triggerSlidEvent();\n      }\n\n      if (isCycling) {\n        this.cycle();\n      }\n    }\n\n    _directionToOrder(direction) {\n      if (![DIRECTION_RIGHT, DIRECTION_LEFT].includes(direction)) {\n        return direction;\n      }\n\n      if (isRTL()) {\n        return direction === DIRECTION_LEFT ? ORDER_PREV : ORDER_NEXT;\n      }\n\n      return direction === DIRECTION_LEFT ? ORDER_NEXT : ORDER_PREV;\n    }\n\n    _orderToDirection(order) {\n      if (![ORDER_NEXT, ORDER_PREV].includes(order)) {\n        return order;\n      }\n\n      if (isRTL()) {\n        return order === ORDER_PREV ? DIRECTION_LEFT : DIRECTION_RIGHT;\n      }\n\n      return order === ORDER_PREV ? DIRECTION_RIGHT : DIRECTION_LEFT;\n    } // Static\n\n\n    static carouselInterface(element, config) {\n      const data = Carousel.getOrCreateInstance(element, config);\n      let {\n        _config\n      } = data;\n\n      if (typeof config === 'object') {\n        _config = { ..._config,\n          ...config\n        };\n      }\n\n      const action = typeof config === 'string' ? config : _config.slide;\n\n      if (typeof config === 'number') {\n        data.to(config);\n      } else if (typeof action === 'string') {\n        if (typeof data[action] === 'undefined') {\n          throw new TypeError(`No method named \"${action}\"`);\n        }\n\n        data[action]();\n      } else if (_config.interval && _config.ride) {\n        data.pause();\n        data.cycle();\n      }\n    }\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        Carousel.carouselInterface(this, config);\n      });\n    }\n\n    static dataApiClickHandler(event) {\n      const target = getElementFromSelector(this);\n\n      if (!target || !target.classList.contains(CLASS_NAME_CAROUSEL)) {\n        return;\n      }\n\n      const config = { ...Manipulator.getDataAttributes(target),\n        ...Manipulator.getDataAttributes(this)\n      };\n      const slideIndex = this.getAttribute('data-bs-slide-to');\n\n      if (slideIndex) {\n        config.interval = false;\n      }\n\n      Carousel.carouselInterface(target, config);\n\n      if (slideIndex) {\n        Carousel.getInstance(target).to(slideIndex);\n      }\n\n      event.preventDefault();\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(document, EVENT_CLICK_DATA_API$5, SELECTOR_DATA_SLIDE, Carousel.dataApiClickHandler);\n  EventHandler.on(window, EVENT_LOAD_DATA_API$2, () => {\n    const carousels = SelectorEngine.find(SELECTOR_DATA_RIDE);\n\n    for (let i = 0, len = carousels.length; i < len; i++) {\n      Carousel.carouselInterface(carousels[i], Carousel.getInstance(carousels[i]));\n    }\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Carousel to jQuery only if jQuery is present\n   */\n\n  defineJQueryPlugin(Carousel);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): collapse.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$9 = 'collapse';\n  const DATA_KEY$8 = 'bs.collapse';\n  const EVENT_KEY$8 = `.${DATA_KEY$8}`;\n  const DATA_API_KEY$5 = '.data-api';\n  const Default$8 = {\n    toggle: true,\n    parent: ''\n  };\n  const DefaultType$8 = {\n    toggle: 'boolean',\n    parent: '(string|element)'\n  };\n  const EVENT_SHOW$5 = `show${EVENT_KEY$8}`;\n  const EVENT_SHOWN$5 = `shown${EVENT_KEY$8}`;\n  const EVENT_HIDE$5 = `hide${EVENT_KEY$8}`;\n  const EVENT_HIDDEN$5 = `hidden${EVENT_KEY$8}`;\n  const EVENT_CLICK_DATA_API$4 = `click${EVENT_KEY$8}${DATA_API_KEY$5}`;\n  const CLASS_NAME_SHOW$8 = 'show';\n  const CLASS_NAME_COLLAPSE = 'collapse';\n  const CLASS_NAME_COLLAPSING = 'collapsing';\n  const CLASS_NAME_COLLAPSED = 'collapsed';\n  const WIDTH = 'width';\n  const HEIGHT = 'height';\n  const SELECTOR_ACTIVES = '.show, .collapsing';\n  const SELECTOR_DATA_TOGGLE$4 = '[data-bs-toggle=\"collapse\"]';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Collapse extends BaseComponent {\n    constructor(element, config) {\n      super(element);\n      this._isTransitioning = false;\n      this._config = this._getConfig(config);\n      this._triggerArray = SelectorEngine.find(`${SELECTOR_DATA_TOGGLE$4}[href=\"#${this._element.id}\"],` + `${SELECTOR_DATA_TOGGLE$4}[data-bs-target=\"#${this._element.id}\"]`);\n      const toggleList = SelectorEngine.find(SELECTOR_DATA_TOGGLE$4);\n\n      for (let i = 0, len = toggleList.length; i < len; i++) {\n        const elem = toggleList[i];\n        const selector = getSelectorFromElement(elem);\n        const filterElement = SelectorEngine.find(selector).filter(foundElem => foundElem === this._element);\n\n        if (selector !== null && filterElement.length) {\n          this._selector = selector;\n\n          this._triggerArray.push(elem);\n        }\n      }\n\n      this._parent = this._config.parent ? this._getParent() : null;\n\n      if (!this._config.parent) {\n        this._addAriaAndCollapsedClass(this._element, this._triggerArray);\n      }\n\n      if (this._config.toggle) {\n        this.toggle();\n      }\n    } // Getters\n\n\n    static get Default() {\n      return Default$8;\n    }\n\n    static get NAME() {\n      return NAME$9;\n    } // Public\n\n\n    toggle() {\n      if (this._element.classList.contains(CLASS_NAME_SHOW$8)) {\n        this.hide();\n      } else {\n        this.show();\n      }\n    }\n\n    show() {\n      if (this._isTransitioning || this._element.classList.contains(CLASS_NAME_SHOW$8)) {\n        return;\n      }\n\n      let actives;\n      let activesData;\n\n      if (this._parent) {\n        actives = SelectorEngine.find(SELECTOR_ACTIVES, this._parent).filter(elem => {\n          if (typeof this._config.parent === 'string') {\n            return elem.getAttribute('data-bs-parent') === this._config.parent;\n          }\n\n          return elem.classList.contains(CLASS_NAME_COLLAPSE);\n        });\n\n        if (actives.length === 0) {\n          actives = null;\n        }\n      }\n\n      const container = SelectorEngine.findOne(this._selector);\n\n      if (actives) {\n        const tempActiveData = actives.find(elem => container !== elem);\n        activesData = tempActiveData ? Collapse.getInstance(tempActiveData) : null;\n\n        if (activesData && activesData._isTransitioning) {\n          return;\n        }\n      }\n\n      const startEvent = EventHandler.trigger(this._element, EVENT_SHOW$5);\n\n      if (startEvent.defaultPrevented) {\n        return;\n      }\n\n      if (actives) {\n        actives.forEach(elemActive => {\n          if (container !== elemActive) {\n            Collapse.collapseInterface(elemActive, 'hide');\n          }\n\n          if (!activesData) {\n            Data.set(elemActive, DATA_KEY$8, null);\n          }\n        });\n      }\n\n      const dimension = this._getDimension();\n\n      this._element.classList.remove(CLASS_NAME_COLLAPSE);\n\n      this._element.classList.add(CLASS_NAME_COLLAPSING);\n\n      this._element.style[dimension] = 0;\n\n      if (this._triggerArray.length) {\n        this._triggerArray.forEach(element => {\n          element.classList.remove(CLASS_NAME_COLLAPSED);\n          element.setAttribute('aria-expanded', true);\n        });\n      }\n\n      this.setTransitioning(true);\n\n      const complete = () => {\n        this._element.classList.remove(CLASS_NAME_COLLAPSING);\n\n        this._element.classList.add(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$8);\n\n        this._element.style[dimension] = '';\n        this.setTransitioning(false);\n        EventHandler.trigger(this._element, EVENT_SHOWN$5);\n      };\n\n      const capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1);\n      const scrollSize = `scroll${capitalizedDimension}`;\n\n      this._queueCallback(complete, this._element, true);\n\n      this._element.style[dimension] = `${this._element[scrollSize]}px`;\n    }\n\n    hide() {\n      if (this._isTransitioning || !this._element.classList.contains(CLASS_NAME_SHOW$8)) {\n        return;\n      }\n\n      const startEvent = EventHandler.trigger(this._element, EVENT_HIDE$5);\n\n      if (startEvent.defaultPrevented) {\n        return;\n      }\n\n      const dimension = this._getDimension();\n\n      this._element.style[dimension] = `${this._element.getBoundingClientRect()[dimension]}px`;\n      reflow(this._element);\n\n      this._element.classList.add(CLASS_NAME_COLLAPSING);\n\n      this._element.classList.remove(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$8);\n\n      const triggerArrayLength = this._triggerArray.length;\n\n      if (triggerArrayLength > 0) {\n        for (let i = 0; i < triggerArrayLength; i++) {\n          const trigger = this._triggerArray[i];\n          const elem = getElementFromSelector(trigger);\n\n          if (elem && !elem.classList.contains(CLASS_NAME_SHOW$8)) {\n            trigger.classList.add(CLASS_NAME_COLLAPSED);\n            trigger.setAttribute('aria-expanded', false);\n          }\n        }\n      }\n\n      this.setTransitioning(true);\n\n      const complete = () => {\n        this.setTransitioning(false);\n\n        this._element.classList.remove(CLASS_NAME_COLLAPSING);\n\n        this._element.classList.add(CLASS_NAME_COLLAPSE);\n\n        EventHandler.trigger(this._element, EVENT_HIDDEN$5);\n      };\n\n      this._element.style[dimension] = '';\n\n      this._queueCallback(complete, this._element, true);\n    }\n\n    setTransitioning(isTransitioning) {\n      this._isTransitioning = isTransitioning;\n    } // Private\n\n\n    _getConfig(config) {\n      config = { ...Default$8,\n        ...config\n      };\n      config.toggle = Boolean(config.toggle); // Coerce string values\n\n      typeCheckConfig(NAME$9, config, DefaultType$8);\n      return config;\n    }\n\n    _getDimension() {\n      return this._element.classList.contains(WIDTH) ? WIDTH : HEIGHT;\n    }\n\n    _getParent() {\n      let {\n        parent\n      } = this._config;\n      parent = getElement(parent);\n      const selector = `${SELECTOR_DATA_TOGGLE$4}[data-bs-parent=\"${parent}\"]`;\n      SelectorEngine.find(selector, parent).forEach(element => {\n        const selected = getElementFromSelector(element);\n\n        this._addAriaAndCollapsedClass(selected, [element]);\n      });\n      return parent;\n    }\n\n    _addAriaAndCollapsedClass(element, triggerArray) {\n      if (!element || !triggerArray.length) {\n        return;\n      }\n\n      const isOpen = element.classList.contains(CLASS_NAME_SHOW$8);\n      triggerArray.forEach(elem => {\n        if (isOpen) {\n          elem.classList.remove(CLASS_NAME_COLLAPSED);\n        } else {\n          elem.classList.add(CLASS_NAME_COLLAPSED);\n        }\n\n        elem.setAttribute('aria-expanded', isOpen);\n      });\n    } // Static\n\n\n    static collapseInterface(element, config) {\n      let data = Collapse.getInstance(element);\n      const _config = { ...Default$8,\n        ...Manipulator.getDataAttributes(element),\n        ...(typeof config === 'object' && config ? config : {})\n      };\n\n      if (!data && _config.toggle && typeof config === 'string' && /show|hide/.test(config)) {\n        _config.toggle = false;\n      }\n\n      if (!data) {\n        data = new Collapse(element, _config);\n      }\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config]();\n      }\n    }\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        Collapse.collapseInterface(this, config);\n      });\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(document, EVENT_CLICK_DATA_API$4, SELECTOR_DATA_TOGGLE$4, function (event) {\n    // preventDefault only for <a> elements (which change the URL) not inside the collapsible element\n    if (event.target.tagName === 'A' || event.delegateTarget && event.delegateTarget.tagName === 'A') {\n      event.preventDefault();\n    }\n\n    const triggerData = Manipulator.getDataAttributes(this);\n    const selector = getSelectorFromElement(this);\n    const selectorElements = SelectorEngine.find(selector);\n    selectorElements.forEach(element => {\n      const data = Collapse.getInstance(element);\n      let config;\n\n      if (data) {\n        // update parent attribute\n        if (data._parent === null && typeof triggerData.parent === 'string') {\n          data._config.parent = triggerData.parent;\n          data._parent = data._getParent();\n        }\n\n        config = 'toggle';\n      } else {\n        config = triggerData;\n      }\n\n      Collapse.collapseInterface(element, config);\n    });\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Collapse to jQuery only if jQuery is present\n   */\n\n  defineJQueryPlugin(Collapse);\n\n  var top = 'top';\n  var bottom = 'bottom';\n  var right = 'right';\n  var left = 'left';\n  var auto = 'auto';\n  var basePlacements = [top, bottom, right, left];\n  var start = 'start';\n  var end = 'end';\n  var clippingParents = 'clippingParents';\n  var viewport = 'viewport';\n  var popper = 'popper';\n  var reference = 'reference';\n  var variationPlacements = /*#__PURE__*/basePlacements.reduce(function (acc, placement) {\n    return acc.concat([placement + \"-\" + start, placement + \"-\" + end]);\n  }, []);\n  var placements = /*#__PURE__*/[].concat(basePlacements, [auto]).reduce(function (acc, placement) {\n    return acc.concat([placement, placement + \"-\" + start, placement + \"-\" + end]);\n  }, []); // modifiers that need to read the DOM\n\n  var beforeRead = 'beforeRead';\n  var read = 'read';\n  var afterRead = 'afterRead'; // pure-logic modifiers\n\n  var beforeMain = 'beforeMain';\n  var main = 'main';\n  var afterMain = 'afterMain'; // modifier with the purpose to write to the DOM (or write into a framework state)\n\n  var beforeWrite = 'beforeWrite';\n  var write = 'write';\n  var afterWrite = 'afterWrite';\n  var modifierPhases = [beforeRead, read, afterRead, beforeMain, main, afterMain, beforeWrite, write, afterWrite];\n\n  function getNodeName(element) {\n    return element ? (element.nodeName || '').toLowerCase() : null;\n  }\n\n  function getWindow(node) {\n    if (node == null) {\n      return window;\n    }\n\n    if (node.toString() !== '[object Window]') {\n      var ownerDocument = node.ownerDocument;\n      return ownerDocument ? ownerDocument.defaultView || window : window;\n    }\n\n    return node;\n  }\n\n  function isElement(node) {\n    var OwnElement = getWindow(node).Element;\n    return node instanceof OwnElement || node instanceof Element;\n  }\n\n  function isHTMLElement(node) {\n    var OwnElement = getWindow(node).HTMLElement;\n    return node instanceof OwnElement || node instanceof HTMLElement;\n  }\n\n  function isShadowRoot(node) {\n    // IE 11 has no ShadowRoot\n    if (typeof ShadowRoot === 'undefined') {\n      return false;\n    }\n\n    var OwnElement = getWindow(node).ShadowRoot;\n    return node instanceof OwnElement || node instanceof ShadowRoot;\n  }\n\n  // and applies them to the HTMLElements such as popper and arrow\n\n  function applyStyles(_ref) {\n    var state = _ref.state;\n    Object.keys(state.elements).forEach(function (name) {\n      var style = state.styles[name] || {};\n      var attributes = state.attributes[name] || {};\n      var element = state.elements[name]; // arrow is optional + virtual elements\n\n      if (!isHTMLElement(element) || !getNodeName(element)) {\n        return;\n      } // Flow doesn't support to extend this property, but it's the most\n      // effective way to apply styles to an HTMLElement\n      // $FlowFixMe[cannot-write]\n\n\n      Object.assign(element.style, style);\n      Object.keys(attributes).forEach(function (name) {\n        var value = attributes[name];\n\n        if (value === false) {\n          element.removeAttribute(name);\n        } else {\n          element.setAttribute(name, value === true ? '' : value);\n        }\n      });\n    });\n  }\n\n  function effect$2(_ref2) {\n    var state = _ref2.state;\n    var initialStyles = {\n      popper: {\n        position: state.options.strategy,\n        left: '0',\n        top: '0',\n        margin: '0'\n      },\n      arrow: {\n        position: 'absolute'\n      },\n      reference: {}\n    };\n    Object.assign(state.elements.popper.style, initialStyles.popper);\n    state.styles = initialStyles;\n\n    if (state.elements.arrow) {\n      Object.assign(state.elements.arrow.style, initialStyles.arrow);\n    }\n\n    return function () {\n      Object.keys(state.elements).forEach(function (name) {\n        var element = state.elements[name];\n        var attributes = state.attributes[name] || {};\n        var styleProperties = Object.keys(state.styles.hasOwnProperty(name) ? state.styles[name] : initialStyles[name]); // Set all values to an empty string to unset them\n\n        var style = styleProperties.reduce(function (style, property) {\n          style[property] = '';\n          return style;\n        }, {}); // arrow is optional + virtual elements\n\n        if (!isHTMLElement(element) || !getNodeName(element)) {\n          return;\n        }\n\n        Object.assign(element.style, style);\n        Object.keys(attributes).forEach(function (attribute) {\n          element.removeAttribute(attribute);\n        });\n      });\n    };\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  var applyStyles$1 = {\n    name: 'applyStyles',\n    enabled: true,\n    phase: 'write',\n    fn: applyStyles,\n    effect: effect$2,\n    requires: ['computeStyles']\n  };\n\n  function getBasePlacement(placement) {\n    return placement.split('-')[0];\n  }\n\n  function getBoundingClientRect(element) {\n    var rect = element.getBoundingClientRect();\n    return {\n      width: rect.width,\n      height: rect.height,\n      top: rect.top,\n      right: rect.right,\n      bottom: rect.bottom,\n      left: rect.left,\n      x: rect.left,\n      y: rect.top\n    };\n  }\n\n  // means it doesn't take into account transforms.\n\n  function getLayoutRect(element) {\n    var clientRect = getBoundingClientRect(element); // Use the clientRect sizes if it's not been transformed.\n    // Fixes https://github.com/popperjs/popper-core/issues/1223\n\n    var width = element.offsetWidth;\n    var height = element.offsetHeight;\n\n    if (Math.abs(clientRect.width - width) <= 1) {\n      width = clientRect.width;\n    }\n\n    if (Math.abs(clientRect.height - height) <= 1) {\n      height = clientRect.height;\n    }\n\n    return {\n      x: element.offsetLeft,\n      y: element.offsetTop,\n      width: width,\n      height: height\n    };\n  }\n\n  function contains(parent, child) {\n    var rootNode = child.getRootNode && child.getRootNode(); // First, attempt with faster native method\n\n    if (parent.contains(child)) {\n      return true;\n    } // then fallback to custom implementation with Shadow DOM support\n    else if (rootNode && isShadowRoot(rootNode)) {\n        var next = child;\n\n        do {\n          if (next && parent.isSameNode(next)) {\n            return true;\n          } // $FlowFixMe[prop-missing]: need a better way to handle this...\n\n\n          next = next.parentNode || next.host;\n        } while (next);\n      } // Give up, the result is false\n\n\n    return false;\n  }\n\n  function getComputedStyle$1(element) {\n    return getWindow(element).getComputedStyle(element);\n  }\n\n  function isTableElement(element) {\n    return ['table', 'td', 'th'].indexOf(getNodeName(element)) >= 0;\n  }\n\n  function getDocumentElement(element) {\n    // $FlowFixMe[incompatible-return]: assume body is always available\n    return ((isElement(element) ? element.ownerDocument : // $FlowFixMe[prop-missing]\n    element.document) || window.document).documentElement;\n  }\n\n  function getParentNode(element) {\n    if (getNodeName(element) === 'html') {\n      return element;\n    }\n\n    return (// this is a quicker (but less type safe) way to save quite some bytes from the bundle\n      // $FlowFixMe[incompatible-return]\n      // $FlowFixMe[prop-missing]\n      element.assignedSlot || // step into the shadow DOM of the parent of a slotted node\n      element.parentNode || ( // DOM Element detected\n      isShadowRoot(element) ? element.host : null) || // ShadowRoot detected\n      // $FlowFixMe[incompatible-call]: HTMLElement is a Node\n      getDocumentElement(element) // fallback\n\n    );\n  }\n\n  function getTrueOffsetParent(element) {\n    if (!isHTMLElement(element) || // https://github.com/popperjs/popper-core/issues/837\n    getComputedStyle$1(element).position === 'fixed') {\n      return null;\n    }\n\n    return element.offsetParent;\n  } // `.offsetParent` reports `null` for fixed elements, while absolute elements\n  // return the containing block\n\n\n  function getContainingBlock(element) {\n    var isFirefox = navigator.userAgent.toLowerCase().indexOf('firefox') !== -1;\n    var isIE = navigator.userAgent.indexOf('Trident') !== -1;\n\n    if (isIE && isHTMLElement(element)) {\n      // In IE 9, 10 and 11 fixed elements containing block is always established by the viewport\n      var elementCss = getComputedStyle$1(element);\n\n      if (elementCss.position === 'fixed') {\n        return null;\n      }\n    }\n\n    var currentNode = getParentNode(element);\n\n    while (isHTMLElement(currentNode) && ['html', 'body'].indexOf(getNodeName(currentNode)) < 0) {\n      var css = getComputedStyle$1(currentNode); // This is non-exhaustive but covers the most common CSS properties that\n      // create a containing block.\n      // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n\n      if (css.transform !== 'none' || css.perspective !== 'none' || css.contain === 'paint' || ['transform', 'perspective'].indexOf(css.willChange) !== -1 || isFirefox && css.willChange === 'filter' || isFirefox && css.filter && css.filter !== 'none') {\n        return currentNode;\n      } else {\n        currentNode = currentNode.parentNode;\n      }\n    }\n\n    return null;\n  } // Gets the closest ancestor positioned element. Handles some edge cases,\n  // such as table ancestors and cross browser bugs.\n\n\n  function getOffsetParent(element) {\n    var window = getWindow(element);\n    var offsetParent = getTrueOffsetParent(element);\n\n    while (offsetParent && isTableElement(offsetParent) && getComputedStyle$1(offsetParent).position === 'static') {\n      offsetParent = getTrueOffsetParent(offsetParent);\n    }\n\n    if (offsetParent && (getNodeName(offsetParent) === 'html' || getNodeName(offsetParent) === 'body' && getComputedStyle$1(offsetParent).position === 'static')) {\n      return window;\n    }\n\n    return offsetParent || getContainingBlock(element) || window;\n  }\n\n  function getMainAxisFromPlacement(placement) {\n    return ['top', 'bottom'].indexOf(placement) >= 0 ? 'x' : 'y';\n  }\n\n  var max = Math.max;\n  var min = Math.min;\n  var round = Math.round;\n\n  function within(min$1, value, max$1) {\n    return max(min$1, min(value, max$1));\n  }\n\n  function getFreshSideObject() {\n    return {\n      top: 0,\n      right: 0,\n      bottom: 0,\n      left: 0\n    };\n  }\n\n  function mergePaddingObject(paddingObject) {\n    return Object.assign({}, getFreshSideObject(), paddingObject);\n  }\n\n  function expandToHashMap(value, keys) {\n    return keys.reduce(function (hashMap, key) {\n      hashMap[key] = value;\n      return hashMap;\n    }, {});\n  }\n\n  var toPaddingObject = function toPaddingObject(padding, state) {\n    padding = typeof padding === 'function' ? padding(Object.assign({}, state.rects, {\n      placement: state.placement\n    })) : padding;\n    return mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));\n  };\n\n  function arrow(_ref) {\n    var _state$modifiersData$;\n\n    var state = _ref.state,\n        name = _ref.name,\n        options = _ref.options;\n    var arrowElement = state.elements.arrow;\n    var popperOffsets = state.modifiersData.popperOffsets;\n    var basePlacement = getBasePlacement(state.placement);\n    var axis = getMainAxisFromPlacement(basePlacement);\n    var isVertical = [left, right].indexOf(basePlacement) >= 0;\n    var len = isVertical ? 'height' : 'width';\n\n    if (!arrowElement || !popperOffsets) {\n      return;\n    }\n\n    var paddingObject = toPaddingObject(options.padding, state);\n    var arrowRect = getLayoutRect(arrowElement);\n    var minProp = axis === 'y' ? top : left;\n    var maxProp = axis === 'y' ? bottom : right;\n    var endDiff = state.rects.reference[len] + state.rects.reference[axis] - popperOffsets[axis] - state.rects.popper[len];\n    var startDiff = popperOffsets[axis] - state.rects.reference[axis];\n    var arrowOffsetParent = getOffsetParent(arrowElement);\n    var clientSize = arrowOffsetParent ? axis === 'y' ? arrowOffsetParent.clientHeight || 0 : arrowOffsetParent.clientWidth || 0 : 0;\n    var centerToReference = endDiff / 2 - startDiff / 2; // Make sure the arrow doesn't overflow the popper if the center point is\n    // outside of the popper bounds\n\n    var min = paddingObject[minProp];\n    var max = clientSize - arrowRect[len] - paddingObject[maxProp];\n    var center = clientSize / 2 - arrowRect[len] / 2 + centerToReference;\n    var offset = within(min, center, max); // Prevents breaking syntax highlighting...\n\n    var axisProp = axis;\n    state.modifiersData[name] = (_state$modifiersData$ = {}, _state$modifiersData$[axisProp] = offset, _state$modifiersData$.centerOffset = offset - center, _state$modifiersData$);\n  }\n\n  function effect$1(_ref2) {\n    var state = _ref2.state,\n        options = _ref2.options;\n    var _options$element = options.element,\n        arrowElement = _options$element === void 0 ? '[data-popper-arrow]' : _options$element;\n\n    if (arrowElement == null) {\n      return;\n    } // CSS selector\n\n\n    if (typeof arrowElement === 'string') {\n      arrowElement = state.elements.popper.querySelector(arrowElement);\n\n      if (!arrowElement) {\n        return;\n      }\n    }\n\n    if (!contains(state.elements.popper, arrowElement)) {\n\n      return;\n    }\n\n    state.elements.arrow = arrowElement;\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  var arrow$1 = {\n    name: 'arrow',\n    enabled: true,\n    phase: 'main',\n    fn: arrow,\n    effect: effect$1,\n    requires: ['popperOffsets'],\n    requiresIfExists: ['preventOverflow']\n  };\n\n  var unsetSides = {\n    top: 'auto',\n    right: 'auto',\n    bottom: 'auto',\n    left: 'auto'\n  }; // Round the offsets to the nearest suitable subpixel based on the DPR.\n  // Zooming can change the DPR, but it seems to report a value that will\n  // cleanly divide the values into the appropriate subpixels.\n\n  function roundOffsetsByDPR(_ref) {\n    var x = _ref.x,\n        y = _ref.y;\n    var win = window;\n    var dpr = win.devicePixelRatio || 1;\n    return {\n      x: round(round(x * dpr) / dpr) || 0,\n      y: round(round(y * dpr) / dpr) || 0\n    };\n  }\n\n  function mapToStyles(_ref2) {\n    var _Object$assign2;\n\n    var popper = _ref2.popper,\n        popperRect = _ref2.popperRect,\n        placement = _ref2.placement,\n        offsets = _ref2.offsets,\n        position = _ref2.position,\n        gpuAcceleration = _ref2.gpuAcceleration,\n        adaptive = _ref2.adaptive,\n        roundOffsets = _ref2.roundOffsets;\n\n    var _ref3 = roundOffsets === true ? roundOffsetsByDPR(offsets) : typeof roundOffsets === 'function' ? roundOffsets(offsets) : offsets,\n        _ref3$x = _ref3.x,\n        x = _ref3$x === void 0 ? 0 : _ref3$x,\n        _ref3$y = _ref3.y,\n        y = _ref3$y === void 0 ? 0 : _ref3$y;\n\n    var hasX = offsets.hasOwnProperty('x');\n    var hasY = offsets.hasOwnProperty('y');\n    var sideX = left;\n    var sideY = top;\n    var win = window;\n\n    if (adaptive) {\n      var offsetParent = getOffsetParent(popper);\n      var heightProp = 'clientHeight';\n      var widthProp = 'clientWidth';\n\n      if (offsetParent === getWindow(popper)) {\n        offsetParent = getDocumentElement(popper);\n\n        if (getComputedStyle$1(offsetParent).position !== 'static') {\n          heightProp = 'scrollHeight';\n          widthProp = 'scrollWidth';\n        }\n      } // $FlowFixMe[incompatible-cast]: force type refinement, we compare offsetParent with window above, but Flow doesn't detect it\n\n\n      offsetParent = offsetParent;\n\n      if (placement === top) {\n        sideY = bottom; // $FlowFixMe[prop-missing]\n\n        y -= offsetParent[heightProp] - popperRect.height;\n        y *= gpuAcceleration ? 1 : -1;\n      }\n\n      if (placement === left) {\n        sideX = right; // $FlowFixMe[prop-missing]\n\n        x -= offsetParent[widthProp] - popperRect.width;\n        x *= gpuAcceleration ? 1 : -1;\n      }\n    }\n\n    var commonStyles = Object.assign({\n      position: position\n    }, adaptive && unsetSides);\n\n    if (gpuAcceleration) {\n      var _Object$assign;\n\n      return Object.assign({}, commonStyles, (_Object$assign = {}, _Object$assign[sideY] = hasY ? '0' : '', _Object$assign[sideX] = hasX ? '0' : '', _Object$assign.transform = (win.devicePixelRatio || 1) < 2 ? \"translate(\" + x + \"px, \" + y + \"px)\" : \"translate3d(\" + x + \"px, \" + y + \"px, 0)\", _Object$assign));\n    }\n\n    return Object.assign({}, commonStyles, (_Object$assign2 = {}, _Object$assign2[sideY] = hasY ? y + \"px\" : '', _Object$assign2[sideX] = hasX ? x + \"px\" : '', _Object$assign2.transform = '', _Object$assign2));\n  }\n\n  function computeStyles(_ref4) {\n    var state = _ref4.state,\n        options = _ref4.options;\n    var _options$gpuAccelerat = options.gpuAcceleration,\n        gpuAcceleration = _options$gpuAccelerat === void 0 ? true : _options$gpuAccelerat,\n        _options$adaptive = options.adaptive,\n        adaptive = _options$adaptive === void 0 ? true : _options$adaptive,\n        _options$roundOffsets = options.roundOffsets,\n        roundOffsets = _options$roundOffsets === void 0 ? true : _options$roundOffsets;\n\n    var commonStyles = {\n      placement: getBasePlacement(state.placement),\n      popper: state.elements.popper,\n      popperRect: state.rects.popper,\n      gpuAcceleration: gpuAcceleration\n    };\n\n    if (state.modifiersData.popperOffsets != null) {\n      state.styles.popper = Object.assign({}, state.styles.popper, mapToStyles(Object.assign({}, commonStyles, {\n        offsets: state.modifiersData.popperOffsets,\n        position: state.options.strategy,\n        adaptive: adaptive,\n        roundOffsets: roundOffsets\n      })));\n    }\n\n    if (state.modifiersData.arrow != null) {\n      state.styles.arrow = Object.assign({}, state.styles.arrow, mapToStyles(Object.assign({}, commonStyles, {\n        offsets: state.modifiersData.arrow,\n        position: 'absolute',\n        adaptive: false,\n        roundOffsets: roundOffsets\n      })));\n    }\n\n    state.attributes.popper = Object.assign({}, state.attributes.popper, {\n      'data-popper-placement': state.placement\n    });\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  var computeStyles$1 = {\n    name: 'computeStyles',\n    enabled: true,\n    phase: 'beforeWrite',\n    fn: computeStyles,\n    data: {}\n  };\n\n  var passive = {\n    passive: true\n  };\n\n  function effect(_ref) {\n    var state = _ref.state,\n        instance = _ref.instance,\n        options = _ref.options;\n    var _options$scroll = options.scroll,\n        scroll = _options$scroll === void 0 ? true : _options$scroll,\n        _options$resize = options.resize,\n        resize = _options$resize === void 0 ? true : _options$resize;\n    var window = getWindow(state.elements.popper);\n    var scrollParents = [].concat(state.scrollParents.reference, state.scrollParents.popper);\n\n    if (scroll) {\n      scrollParents.forEach(function (scrollParent) {\n        scrollParent.addEventListener('scroll', instance.update, passive);\n      });\n    }\n\n    if (resize) {\n      window.addEventListener('resize', instance.update, passive);\n    }\n\n    return function () {\n      if (scroll) {\n        scrollParents.forEach(function (scrollParent) {\n          scrollParent.removeEventListener('scroll', instance.update, passive);\n        });\n      }\n\n      if (resize) {\n        window.removeEventListener('resize', instance.update, passive);\n      }\n    };\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  var eventListeners = {\n    name: 'eventListeners',\n    enabled: true,\n    phase: 'write',\n    fn: function fn() {},\n    effect: effect,\n    data: {}\n  };\n\n  var hash$1 = {\n    left: 'right',\n    right: 'left',\n    bottom: 'top',\n    top: 'bottom'\n  };\n  function getOppositePlacement(placement) {\n    return placement.replace(/left|right|bottom|top/g, function (matched) {\n      return hash$1[matched];\n    });\n  }\n\n  var hash = {\n    start: 'end',\n    end: 'start'\n  };\n  function getOppositeVariationPlacement(placement) {\n    return placement.replace(/start|end/g, function (matched) {\n      return hash[matched];\n    });\n  }\n\n  function getWindowScroll(node) {\n    var win = getWindow(node);\n    var scrollLeft = win.pageXOffset;\n    var scrollTop = win.pageYOffset;\n    return {\n      scrollLeft: scrollLeft,\n      scrollTop: scrollTop\n    };\n  }\n\n  function getWindowScrollBarX(element) {\n    // If <html> has a CSS width greater than the viewport, then this will be\n    // incorrect for RTL.\n    // Popper 1 is broken in this case and never had a bug report so let's assume\n    // it's not an issue. I don't think anyone ever specifies width on <html>\n    // anyway.\n    // Browsers where the left scrollbar doesn't cause an issue report `0` for\n    // this (e.g. Edge 2019, IE11, Safari)\n    return getBoundingClientRect(getDocumentElement(element)).left + getWindowScroll(element).scrollLeft;\n  }\n\n  function getViewportRect(element) {\n    var win = getWindow(element);\n    var html = getDocumentElement(element);\n    var visualViewport = win.visualViewport;\n    var width = html.clientWidth;\n    var height = html.clientHeight;\n    var x = 0;\n    var y = 0; // NB: This isn't supported on iOS <= 12. If the keyboard is open, the popper\n    // can be obscured underneath it.\n    // Also, `html.clientHeight` adds the bottom bar height in Safari iOS, even\n    // if it isn't open, so if this isn't available, the popper will be detected\n    // to overflow the bottom of the screen too early.\n\n    if (visualViewport) {\n      width = visualViewport.width;\n      height = visualViewport.height; // Uses Layout Viewport (like Chrome; Safari does not currently)\n      // In Chrome, it returns a value very close to 0 (+/-) but contains rounding\n      // errors due to floating point numbers, so we need to check precision.\n      // Safari returns a number <= 0, usually < -1 when pinch-zoomed\n      // Feature detection fails in mobile emulation mode in Chrome.\n      // Math.abs(win.innerWidth / visualViewport.scale - visualViewport.width) <\n      // 0.001\n      // Fallback here: \"Not Safari\" userAgent\n\n      if (!/^((?!chrome|android).)*safari/i.test(navigator.userAgent)) {\n        x = visualViewport.offsetLeft;\n        y = visualViewport.offsetTop;\n      }\n    }\n\n    return {\n      width: width,\n      height: height,\n      x: x + getWindowScrollBarX(element),\n      y: y\n    };\n  }\n\n  // of the `<html>` and `<body>` rect bounds if horizontally scrollable\n\n  function getDocumentRect(element) {\n    var _element$ownerDocumen;\n\n    var html = getDocumentElement(element);\n    var winScroll = getWindowScroll(element);\n    var body = (_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body;\n    var width = max(html.scrollWidth, html.clientWidth, body ? body.scrollWidth : 0, body ? body.clientWidth : 0);\n    var height = max(html.scrollHeight, html.clientHeight, body ? body.scrollHeight : 0, body ? body.clientHeight : 0);\n    var x = -winScroll.scrollLeft + getWindowScrollBarX(element);\n    var y = -winScroll.scrollTop;\n\n    if (getComputedStyle$1(body || html).direction === 'rtl') {\n      x += max(html.clientWidth, body ? body.clientWidth : 0) - width;\n    }\n\n    return {\n      width: width,\n      height: height,\n      x: x,\n      y: y\n    };\n  }\n\n  function isScrollParent(element) {\n    // Firefox wants us to check `-x` and `-y` variations as well\n    var _getComputedStyle = getComputedStyle$1(element),\n        overflow = _getComputedStyle.overflow,\n        overflowX = _getComputedStyle.overflowX,\n        overflowY = _getComputedStyle.overflowY;\n\n    return /auto|scroll|overlay|hidden/.test(overflow + overflowY + overflowX);\n  }\n\n  function getScrollParent(node) {\n    if (['html', 'body', '#document'].indexOf(getNodeName(node)) >= 0) {\n      // $FlowFixMe[incompatible-return]: assume body is always available\n      return node.ownerDocument.body;\n    }\n\n    if (isHTMLElement(node) && isScrollParent(node)) {\n      return node;\n    }\n\n    return getScrollParent(getParentNode(node));\n  }\n\n  /*\n  given a DOM element, return the list of all scroll parents, up the list of ancesors\n  until we get to the top window object. This list is what we attach scroll listeners\n  to, because if any of these parent elements scroll, we'll need to re-calculate the\n  reference element's position.\n  */\n\n  function listScrollParents(element, list) {\n    var _element$ownerDocumen;\n\n    if (list === void 0) {\n      list = [];\n    }\n\n    var scrollParent = getScrollParent(element);\n    var isBody = scrollParent === ((_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body);\n    var win = getWindow(scrollParent);\n    var target = isBody ? [win].concat(win.visualViewport || [], isScrollParent(scrollParent) ? scrollParent : []) : scrollParent;\n    var updatedList = list.concat(target);\n    return isBody ? updatedList : // $FlowFixMe[incompatible-call]: isBody tells us target will be an HTMLElement here\n    updatedList.concat(listScrollParents(getParentNode(target)));\n  }\n\n  function rectToClientRect(rect) {\n    return Object.assign({}, rect, {\n      left: rect.x,\n      top: rect.y,\n      right: rect.x + rect.width,\n      bottom: rect.y + rect.height\n    });\n  }\n\n  function getInnerBoundingClientRect(element) {\n    var rect = getBoundingClientRect(element);\n    rect.top = rect.top + element.clientTop;\n    rect.left = rect.left + element.clientLeft;\n    rect.bottom = rect.top + element.clientHeight;\n    rect.right = rect.left + element.clientWidth;\n    rect.width = element.clientWidth;\n    rect.height = element.clientHeight;\n    rect.x = rect.left;\n    rect.y = rect.top;\n    return rect;\n  }\n\n  function getClientRectFromMixedType(element, clippingParent) {\n    return clippingParent === viewport ? rectToClientRect(getViewportRect(element)) : isHTMLElement(clippingParent) ? getInnerBoundingClientRect(clippingParent) : rectToClientRect(getDocumentRect(getDocumentElement(element)));\n  } // A \"clipping parent\" is an overflowable container with the characteristic of\n  // clipping (or hiding) overflowing elements with a position different from\n  // `initial`\n\n\n  function getClippingParents(element) {\n    var clippingParents = listScrollParents(getParentNode(element));\n    var canEscapeClipping = ['absolute', 'fixed'].indexOf(getComputedStyle$1(element).position) >= 0;\n    var clipperElement = canEscapeClipping && isHTMLElement(element) ? getOffsetParent(element) : element;\n\n    if (!isElement(clipperElement)) {\n      return [];\n    } // $FlowFixMe[incompatible-return]: https://github.com/facebook/flow/issues/1414\n\n\n    return clippingParents.filter(function (clippingParent) {\n      return isElement(clippingParent) && contains(clippingParent, clipperElement) && getNodeName(clippingParent) !== 'body';\n    });\n  } // Gets the maximum area that the element is visible in due to any number of\n  // clipping parents\n\n\n  function getClippingRect(element, boundary, rootBoundary) {\n    var mainClippingParents = boundary === 'clippingParents' ? getClippingParents(element) : [].concat(boundary);\n    var clippingParents = [].concat(mainClippingParents, [rootBoundary]);\n    var firstClippingParent = clippingParents[0];\n    var clippingRect = clippingParents.reduce(function (accRect, clippingParent) {\n      var rect = getClientRectFromMixedType(element, clippingParent);\n      accRect.top = max(rect.top, accRect.top);\n      accRect.right = min(rect.right, accRect.right);\n      accRect.bottom = min(rect.bottom, accRect.bottom);\n      accRect.left = max(rect.left, accRect.left);\n      return accRect;\n    }, getClientRectFromMixedType(element, firstClippingParent));\n    clippingRect.width = clippingRect.right - clippingRect.left;\n    clippingRect.height = clippingRect.bottom - clippingRect.top;\n    clippingRect.x = clippingRect.left;\n    clippingRect.y = clippingRect.top;\n    return clippingRect;\n  }\n\n  function getVariation(placement) {\n    return placement.split('-')[1];\n  }\n\n  function computeOffsets(_ref) {\n    var reference = _ref.reference,\n        element = _ref.element,\n        placement = _ref.placement;\n    var basePlacement = placement ? getBasePlacement(placement) : null;\n    var variation = placement ? getVariation(placement) : null;\n    var commonX = reference.x + reference.width / 2 - element.width / 2;\n    var commonY = reference.y + reference.height / 2 - element.height / 2;\n    var offsets;\n\n    switch (basePlacement) {\n      case top:\n        offsets = {\n          x: commonX,\n          y: reference.y - element.height\n        };\n        break;\n\n      case bottom:\n        offsets = {\n          x: commonX,\n          y: reference.y + reference.height\n        };\n        break;\n\n      case right:\n        offsets = {\n          x: reference.x + reference.width,\n          y: commonY\n        };\n        break;\n\n      case left:\n        offsets = {\n          x: reference.x - element.width,\n          y: commonY\n        };\n        break;\n\n      default:\n        offsets = {\n          x: reference.x,\n          y: reference.y\n        };\n    }\n\n    var mainAxis = basePlacement ? getMainAxisFromPlacement(basePlacement) : null;\n\n    if (mainAxis != null) {\n      var len = mainAxis === 'y' ? 'height' : 'width';\n\n      switch (variation) {\n        case start:\n          offsets[mainAxis] = offsets[mainAxis] - (reference[len] / 2 - element[len] / 2);\n          break;\n\n        case end:\n          offsets[mainAxis] = offsets[mainAxis] + (reference[len] / 2 - element[len] / 2);\n          break;\n      }\n    }\n\n    return offsets;\n  }\n\n  function detectOverflow(state, options) {\n    if (options === void 0) {\n      options = {};\n    }\n\n    var _options = options,\n        _options$placement = _options.placement,\n        placement = _options$placement === void 0 ? state.placement : _options$placement,\n        _options$boundary = _options.boundary,\n        boundary = _options$boundary === void 0 ? clippingParents : _options$boundary,\n        _options$rootBoundary = _options.rootBoundary,\n        rootBoundary = _options$rootBoundary === void 0 ? viewport : _options$rootBoundary,\n        _options$elementConte = _options.elementContext,\n        elementContext = _options$elementConte === void 0 ? popper : _options$elementConte,\n        _options$altBoundary = _options.altBoundary,\n        altBoundary = _options$altBoundary === void 0 ? false : _options$altBoundary,\n        _options$padding = _options.padding,\n        padding = _options$padding === void 0 ? 0 : _options$padding;\n    var paddingObject = mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));\n    var altContext = elementContext === popper ? reference : popper;\n    var referenceElement = state.elements.reference;\n    var popperRect = state.rects.popper;\n    var element = state.elements[altBoundary ? altContext : elementContext];\n    var clippingClientRect = getClippingRect(isElement(element) ? element : element.contextElement || getDocumentElement(state.elements.popper), boundary, rootBoundary);\n    var referenceClientRect = getBoundingClientRect(referenceElement);\n    var popperOffsets = computeOffsets({\n      reference: referenceClientRect,\n      element: popperRect,\n      strategy: 'absolute',\n      placement: placement\n    });\n    var popperClientRect = rectToClientRect(Object.assign({}, popperRect, popperOffsets));\n    var elementClientRect = elementContext === popper ? popperClientRect : referenceClientRect; // positive = overflowing the clipping rect\n    // 0 or negative = within the clipping rect\n\n    var overflowOffsets = {\n      top: clippingClientRect.top - elementClientRect.top + paddingObject.top,\n      bottom: elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom,\n      left: clippingClientRect.left - elementClientRect.left + paddingObject.left,\n      right: elementClientRect.right - clippingClientRect.right + paddingObject.right\n    };\n    var offsetData = state.modifiersData.offset; // Offsets can be applied only to the popper element\n\n    if (elementContext === popper && offsetData) {\n      var offset = offsetData[placement];\n      Object.keys(overflowOffsets).forEach(function (key) {\n        var multiply = [right, bottom].indexOf(key) >= 0 ? 1 : -1;\n        var axis = [top, bottom].indexOf(key) >= 0 ? 'y' : 'x';\n        overflowOffsets[key] += offset[axis] * multiply;\n      });\n    }\n\n    return overflowOffsets;\n  }\n\n  function computeAutoPlacement(state, options) {\n    if (options === void 0) {\n      options = {};\n    }\n\n    var _options = options,\n        placement = _options.placement,\n        boundary = _options.boundary,\n        rootBoundary = _options.rootBoundary,\n        padding = _options.padding,\n        flipVariations = _options.flipVariations,\n        _options$allowedAutoP = _options.allowedAutoPlacements,\n        allowedAutoPlacements = _options$allowedAutoP === void 0 ? placements : _options$allowedAutoP;\n    var variation = getVariation(placement);\n    var placements$1 = variation ? flipVariations ? variationPlacements : variationPlacements.filter(function (placement) {\n      return getVariation(placement) === variation;\n    }) : basePlacements;\n    var allowedPlacements = placements$1.filter(function (placement) {\n      return allowedAutoPlacements.indexOf(placement) >= 0;\n    });\n\n    if (allowedPlacements.length === 0) {\n      allowedPlacements = placements$1;\n    } // $FlowFixMe[incompatible-type]: Flow seems to have problems with two array unions...\n\n\n    var overflows = allowedPlacements.reduce(function (acc, placement) {\n      acc[placement] = detectOverflow(state, {\n        placement: placement,\n        boundary: boundary,\n        rootBoundary: rootBoundary,\n        padding: padding\n      })[getBasePlacement(placement)];\n      return acc;\n    }, {});\n    return Object.keys(overflows).sort(function (a, b) {\n      return overflows[a] - overflows[b];\n    });\n  }\n\n  function getExpandedFallbackPlacements(placement) {\n    if (getBasePlacement(placement) === auto) {\n      return [];\n    }\n\n    var oppositePlacement = getOppositePlacement(placement);\n    return [getOppositeVariationPlacement(placement), oppositePlacement, getOppositeVariationPlacement(oppositePlacement)];\n  }\n\n  function flip(_ref) {\n    var state = _ref.state,\n        options = _ref.options,\n        name = _ref.name;\n\n    if (state.modifiersData[name]._skip) {\n      return;\n    }\n\n    var _options$mainAxis = options.mainAxis,\n        checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\n        _options$altAxis = options.altAxis,\n        checkAltAxis = _options$altAxis === void 0 ? true : _options$altAxis,\n        specifiedFallbackPlacements = options.fallbackPlacements,\n        padding = options.padding,\n        boundary = options.boundary,\n        rootBoundary = options.rootBoundary,\n        altBoundary = options.altBoundary,\n        _options$flipVariatio = options.flipVariations,\n        flipVariations = _options$flipVariatio === void 0 ? true : _options$flipVariatio,\n        allowedAutoPlacements = options.allowedAutoPlacements;\n    var preferredPlacement = state.options.placement;\n    var basePlacement = getBasePlacement(preferredPlacement);\n    var isBasePlacement = basePlacement === preferredPlacement;\n    var fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipVariations ? [getOppositePlacement(preferredPlacement)] : getExpandedFallbackPlacements(preferredPlacement));\n    var placements = [preferredPlacement].concat(fallbackPlacements).reduce(function (acc, placement) {\n      return acc.concat(getBasePlacement(placement) === auto ? computeAutoPlacement(state, {\n        placement: placement,\n        boundary: boundary,\n        rootBoundary: rootBoundary,\n        padding: padding,\n        flipVariations: flipVariations,\n        allowedAutoPlacements: allowedAutoPlacements\n      }) : placement);\n    }, []);\n    var referenceRect = state.rects.reference;\n    var popperRect = state.rects.popper;\n    var checksMap = new Map();\n    var makeFallbackChecks = true;\n    var firstFittingPlacement = placements[0];\n\n    for (var i = 0; i < placements.length; i++) {\n      var placement = placements[i];\n\n      var _basePlacement = getBasePlacement(placement);\n\n      var isStartVariation = getVariation(placement) === start;\n      var isVertical = [top, bottom].indexOf(_basePlacement) >= 0;\n      var len = isVertical ? 'width' : 'height';\n      var overflow = detectOverflow(state, {\n        placement: placement,\n        boundary: boundary,\n        rootBoundary: rootBoundary,\n        altBoundary: altBoundary,\n        padding: padding\n      });\n      var mainVariationSide = isVertical ? isStartVariation ? right : left : isStartVariation ? bottom : top;\n\n      if (referenceRect[len] > popperRect[len]) {\n        mainVariationSide = getOppositePlacement(mainVariationSide);\n      }\n\n      var altVariationSide = getOppositePlacement(mainVariationSide);\n      var checks = [];\n\n      if (checkMainAxis) {\n        checks.push(overflow[_basePlacement] <= 0);\n      }\n\n      if (checkAltAxis) {\n        checks.push(overflow[mainVariationSide] <= 0, overflow[altVariationSide] <= 0);\n      }\n\n      if (checks.every(function (check) {\n        return check;\n      })) {\n        firstFittingPlacement = placement;\n        makeFallbackChecks = false;\n        break;\n      }\n\n      checksMap.set(placement, checks);\n    }\n\n    if (makeFallbackChecks) {\n      // `2` may be desired in some cases – research later\n      var numberOfChecks = flipVariations ? 3 : 1;\n\n      var _loop = function _loop(_i) {\n        var fittingPlacement = placements.find(function (placement) {\n          var checks = checksMap.get(placement);\n\n          if (checks) {\n            return checks.slice(0, _i).every(function (check) {\n              return check;\n            });\n          }\n        });\n\n        if (fittingPlacement) {\n          firstFittingPlacement = fittingPlacement;\n          return \"break\";\n        }\n      };\n\n      for (var _i = numberOfChecks; _i > 0; _i--) {\n        var _ret = _loop(_i);\n\n        if (_ret === \"break\") break;\n      }\n    }\n\n    if (state.placement !== firstFittingPlacement) {\n      state.modifiersData[name]._skip = true;\n      state.placement = firstFittingPlacement;\n      state.reset = true;\n    }\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  var flip$1 = {\n    name: 'flip',\n    enabled: true,\n    phase: 'main',\n    fn: flip,\n    requiresIfExists: ['offset'],\n    data: {\n      _skip: false\n    }\n  };\n\n  function getSideOffsets(overflow, rect, preventedOffsets) {\n    if (preventedOffsets === void 0) {\n      preventedOffsets = {\n        x: 0,\n        y: 0\n      };\n    }\n\n    return {\n      top: overflow.top - rect.height - preventedOffsets.y,\n      right: overflow.right - rect.width + preventedOffsets.x,\n      bottom: overflow.bottom - rect.height + preventedOffsets.y,\n      left: overflow.left - rect.width - preventedOffsets.x\n    };\n  }\n\n  function isAnySideFullyClipped(overflow) {\n    return [top, right, bottom, left].some(function (side) {\n      return overflow[side] >= 0;\n    });\n  }\n\n  function hide(_ref) {\n    var state = _ref.state,\n        name = _ref.name;\n    var referenceRect = state.rects.reference;\n    var popperRect = state.rects.popper;\n    var preventedOffsets = state.modifiersData.preventOverflow;\n    var referenceOverflow = detectOverflow(state, {\n      elementContext: 'reference'\n    });\n    var popperAltOverflow = detectOverflow(state, {\n      altBoundary: true\n    });\n    var referenceClippingOffsets = getSideOffsets(referenceOverflow, referenceRect);\n    var popperEscapeOffsets = getSideOffsets(popperAltOverflow, popperRect, preventedOffsets);\n    var isReferenceHidden = isAnySideFullyClipped(referenceClippingOffsets);\n    var hasPopperEscaped = isAnySideFullyClipped(popperEscapeOffsets);\n    state.modifiersData[name] = {\n      referenceClippingOffsets: referenceClippingOffsets,\n      popperEscapeOffsets: popperEscapeOffsets,\n      isReferenceHidden: isReferenceHidden,\n      hasPopperEscaped: hasPopperEscaped\n    };\n    state.attributes.popper = Object.assign({}, state.attributes.popper, {\n      'data-popper-reference-hidden': isReferenceHidden,\n      'data-popper-escaped': hasPopperEscaped\n    });\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  var hide$1 = {\n    name: 'hide',\n    enabled: true,\n    phase: 'main',\n    requiresIfExists: ['preventOverflow'],\n    fn: hide\n  };\n\n  function distanceAndSkiddingToXY(placement, rects, offset) {\n    var basePlacement = getBasePlacement(placement);\n    var invertDistance = [left, top].indexOf(basePlacement) >= 0 ? -1 : 1;\n\n    var _ref = typeof offset === 'function' ? offset(Object.assign({}, rects, {\n      placement: placement\n    })) : offset,\n        skidding = _ref[0],\n        distance = _ref[1];\n\n    skidding = skidding || 0;\n    distance = (distance || 0) * invertDistance;\n    return [left, right].indexOf(basePlacement) >= 0 ? {\n      x: distance,\n      y: skidding\n    } : {\n      x: skidding,\n      y: distance\n    };\n  }\n\n  function offset(_ref2) {\n    var state = _ref2.state,\n        options = _ref2.options,\n        name = _ref2.name;\n    var _options$offset = options.offset,\n        offset = _options$offset === void 0 ? [0, 0] : _options$offset;\n    var data = placements.reduce(function (acc, placement) {\n      acc[placement] = distanceAndSkiddingToXY(placement, state.rects, offset);\n      return acc;\n    }, {});\n    var _data$state$placement = data[state.placement],\n        x = _data$state$placement.x,\n        y = _data$state$placement.y;\n\n    if (state.modifiersData.popperOffsets != null) {\n      state.modifiersData.popperOffsets.x += x;\n      state.modifiersData.popperOffsets.y += y;\n    }\n\n    state.modifiersData[name] = data;\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  var offset$1 = {\n    name: 'offset',\n    enabled: true,\n    phase: 'main',\n    requires: ['popperOffsets'],\n    fn: offset\n  };\n\n  function popperOffsets(_ref) {\n    var state = _ref.state,\n        name = _ref.name;\n    // Offsets are the actual position the popper needs to have to be\n    // properly positioned near its reference element\n    // This is the most basic placement, and will be adjusted by\n    // the modifiers in the next step\n    state.modifiersData[name] = computeOffsets({\n      reference: state.rects.reference,\n      element: state.rects.popper,\n      strategy: 'absolute',\n      placement: state.placement\n    });\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  var popperOffsets$1 = {\n    name: 'popperOffsets',\n    enabled: true,\n    phase: 'read',\n    fn: popperOffsets,\n    data: {}\n  };\n\n  function getAltAxis(axis) {\n    return axis === 'x' ? 'y' : 'x';\n  }\n\n  function preventOverflow(_ref) {\n    var state = _ref.state,\n        options = _ref.options,\n        name = _ref.name;\n    var _options$mainAxis = options.mainAxis,\n        checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\n        _options$altAxis = options.altAxis,\n        checkAltAxis = _options$altAxis === void 0 ? false : _options$altAxis,\n        boundary = options.boundary,\n        rootBoundary = options.rootBoundary,\n        altBoundary = options.altBoundary,\n        padding = options.padding,\n        _options$tether = options.tether,\n        tether = _options$tether === void 0 ? true : _options$tether,\n        _options$tetherOffset = options.tetherOffset,\n        tetherOffset = _options$tetherOffset === void 0 ? 0 : _options$tetherOffset;\n    var overflow = detectOverflow(state, {\n      boundary: boundary,\n      rootBoundary: rootBoundary,\n      padding: padding,\n      altBoundary: altBoundary\n    });\n    var basePlacement = getBasePlacement(state.placement);\n    var variation = getVariation(state.placement);\n    var isBasePlacement = !variation;\n    var mainAxis = getMainAxisFromPlacement(basePlacement);\n    var altAxis = getAltAxis(mainAxis);\n    var popperOffsets = state.modifiersData.popperOffsets;\n    var referenceRect = state.rects.reference;\n    var popperRect = state.rects.popper;\n    var tetherOffsetValue = typeof tetherOffset === 'function' ? tetherOffset(Object.assign({}, state.rects, {\n      placement: state.placement\n    })) : tetherOffset;\n    var data = {\n      x: 0,\n      y: 0\n    };\n\n    if (!popperOffsets) {\n      return;\n    }\n\n    if (checkMainAxis || checkAltAxis) {\n      var mainSide = mainAxis === 'y' ? top : left;\n      var altSide = mainAxis === 'y' ? bottom : right;\n      var len = mainAxis === 'y' ? 'height' : 'width';\n      var offset = popperOffsets[mainAxis];\n      var min$1 = popperOffsets[mainAxis] + overflow[mainSide];\n      var max$1 = popperOffsets[mainAxis] - overflow[altSide];\n      var additive = tether ? -popperRect[len] / 2 : 0;\n      var minLen = variation === start ? referenceRect[len] : popperRect[len];\n      var maxLen = variation === start ? -popperRect[len] : -referenceRect[len]; // We need to include the arrow in the calculation so the arrow doesn't go\n      // outside the reference bounds\n\n      var arrowElement = state.elements.arrow;\n      var arrowRect = tether && arrowElement ? getLayoutRect(arrowElement) : {\n        width: 0,\n        height: 0\n      };\n      var arrowPaddingObject = state.modifiersData['arrow#persistent'] ? state.modifiersData['arrow#persistent'].padding : getFreshSideObject();\n      var arrowPaddingMin = arrowPaddingObject[mainSide];\n      var arrowPaddingMax = arrowPaddingObject[altSide]; // If the reference length is smaller than the arrow length, we don't want\n      // to include its full size in the calculation. If the reference is small\n      // and near the edge of a boundary, the popper can overflow even if the\n      // reference is not overflowing as well (e.g. virtual elements with no\n      // width or height)\n\n      var arrowLen = within(0, referenceRect[len], arrowRect[len]);\n      var minOffset = isBasePlacement ? referenceRect[len] / 2 - additive - arrowLen - arrowPaddingMin - tetherOffsetValue : minLen - arrowLen - arrowPaddingMin - tetherOffsetValue;\n      var maxOffset = isBasePlacement ? -referenceRect[len] / 2 + additive + arrowLen + arrowPaddingMax + tetherOffsetValue : maxLen + arrowLen + arrowPaddingMax + tetherOffsetValue;\n      var arrowOffsetParent = state.elements.arrow && getOffsetParent(state.elements.arrow);\n      var clientOffset = arrowOffsetParent ? mainAxis === 'y' ? arrowOffsetParent.clientTop || 0 : arrowOffsetParent.clientLeft || 0 : 0;\n      var offsetModifierValue = state.modifiersData.offset ? state.modifiersData.offset[state.placement][mainAxis] : 0;\n      var tetherMin = popperOffsets[mainAxis] + minOffset - offsetModifierValue - clientOffset;\n      var tetherMax = popperOffsets[mainAxis] + maxOffset - offsetModifierValue;\n\n      if (checkMainAxis) {\n        var preventedOffset = within(tether ? min(min$1, tetherMin) : min$1, offset, tether ? max(max$1, tetherMax) : max$1);\n        popperOffsets[mainAxis] = preventedOffset;\n        data[mainAxis] = preventedOffset - offset;\n      }\n\n      if (checkAltAxis) {\n        var _mainSide = mainAxis === 'x' ? top : left;\n\n        var _altSide = mainAxis === 'x' ? bottom : right;\n\n        var _offset = popperOffsets[altAxis];\n\n        var _min = _offset + overflow[_mainSide];\n\n        var _max = _offset - overflow[_altSide];\n\n        var _preventedOffset = within(tether ? min(_min, tetherMin) : _min, _offset, tether ? max(_max, tetherMax) : _max);\n\n        popperOffsets[altAxis] = _preventedOffset;\n        data[altAxis] = _preventedOffset - _offset;\n      }\n    }\n\n    state.modifiersData[name] = data;\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  var preventOverflow$1 = {\n    name: 'preventOverflow',\n    enabled: true,\n    phase: 'main',\n    fn: preventOverflow,\n    requiresIfExists: ['offset']\n  };\n\n  function getHTMLElementScroll(element) {\n    return {\n      scrollLeft: element.scrollLeft,\n      scrollTop: element.scrollTop\n    };\n  }\n\n  function getNodeScroll(node) {\n    if (node === getWindow(node) || !isHTMLElement(node)) {\n      return getWindowScroll(node);\n    } else {\n      return getHTMLElementScroll(node);\n    }\n  }\n\n  // Composite means it takes into account transforms as well as layout.\n\n  function getCompositeRect(elementOrVirtualElement, offsetParent, isFixed) {\n    if (isFixed === void 0) {\n      isFixed = false;\n    }\n\n    var documentElement = getDocumentElement(offsetParent);\n    var rect = getBoundingClientRect(elementOrVirtualElement);\n    var isOffsetParentAnElement = isHTMLElement(offsetParent);\n    var scroll = {\n      scrollLeft: 0,\n      scrollTop: 0\n    };\n    var offsets = {\n      x: 0,\n      y: 0\n    };\n\n    if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {\n      if (getNodeName(offsetParent) !== 'body' || // https://github.com/popperjs/popper-core/issues/1078\n      isScrollParent(documentElement)) {\n        scroll = getNodeScroll(offsetParent);\n      }\n\n      if (isHTMLElement(offsetParent)) {\n        offsets = getBoundingClientRect(offsetParent);\n        offsets.x += offsetParent.clientLeft;\n        offsets.y += offsetParent.clientTop;\n      } else if (documentElement) {\n        offsets.x = getWindowScrollBarX(documentElement);\n      }\n    }\n\n    return {\n      x: rect.left + scroll.scrollLeft - offsets.x,\n      y: rect.top + scroll.scrollTop - offsets.y,\n      width: rect.width,\n      height: rect.height\n    };\n  }\n\n  function order(modifiers) {\n    var map = new Map();\n    var visited = new Set();\n    var result = [];\n    modifiers.forEach(function (modifier) {\n      map.set(modifier.name, modifier);\n    }); // On visiting object, check for its dependencies and visit them recursively\n\n    function sort(modifier) {\n      visited.add(modifier.name);\n      var requires = [].concat(modifier.requires || [], modifier.requiresIfExists || []);\n      requires.forEach(function (dep) {\n        if (!visited.has(dep)) {\n          var depModifier = map.get(dep);\n\n          if (depModifier) {\n            sort(depModifier);\n          }\n        }\n      });\n      result.push(modifier);\n    }\n\n    modifiers.forEach(function (modifier) {\n      if (!visited.has(modifier.name)) {\n        // check for visited object\n        sort(modifier);\n      }\n    });\n    return result;\n  }\n\n  function orderModifiers(modifiers) {\n    // order based on dependencies\n    var orderedModifiers = order(modifiers); // order based on phase\n\n    return modifierPhases.reduce(function (acc, phase) {\n      return acc.concat(orderedModifiers.filter(function (modifier) {\n        return modifier.phase === phase;\n      }));\n    }, []);\n  }\n\n  function debounce(fn) {\n    var pending;\n    return function () {\n      if (!pending) {\n        pending = new Promise(function (resolve) {\n          Promise.resolve().then(function () {\n            pending = undefined;\n            resolve(fn());\n          });\n        });\n      }\n\n      return pending;\n    };\n  }\n\n  function mergeByName(modifiers) {\n    var merged = modifiers.reduce(function (merged, current) {\n      var existing = merged[current.name];\n      merged[current.name] = existing ? Object.assign({}, existing, current, {\n        options: Object.assign({}, existing.options, current.options),\n        data: Object.assign({}, existing.data, current.data)\n      }) : current;\n      return merged;\n    }, {}); // IE11 does not support Object.values\n\n    return Object.keys(merged).map(function (key) {\n      return merged[key];\n    });\n  }\n\n  var DEFAULT_OPTIONS = {\n    placement: 'bottom',\n    modifiers: [],\n    strategy: 'absolute'\n  };\n\n  function areValidElements() {\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    return !args.some(function (element) {\n      return !(element && typeof element.getBoundingClientRect === 'function');\n    });\n  }\n\n  function popperGenerator(generatorOptions) {\n    if (generatorOptions === void 0) {\n      generatorOptions = {};\n    }\n\n    var _generatorOptions = generatorOptions,\n        _generatorOptions$def = _generatorOptions.defaultModifiers,\n        defaultModifiers = _generatorOptions$def === void 0 ? [] : _generatorOptions$def,\n        _generatorOptions$def2 = _generatorOptions.defaultOptions,\n        defaultOptions = _generatorOptions$def2 === void 0 ? DEFAULT_OPTIONS : _generatorOptions$def2;\n    return function createPopper(reference, popper, options) {\n      if (options === void 0) {\n        options = defaultOptions;\n      }\n\n      var state = {\n        placement: 'bottom',\n        orderedModifiers: [],\n        options: Object.assign({}, DEFAULT_OPTIONS, defaultOptions),\n        modifiersData: {},\n        elements: {\n          reference: reference,\n          popper: popper\n        },\n        attributes: {},\n        styles: {}\n      };\n      var effectCleanupFns = [];\n      var isDestroyed = false;\n      var instance = {\n        state: state,\n        setOptions: function setOptions(options) {\n          cleanupModifierEffects();\n          state.options = Object.assign({}, defaultOptions, state.options, options);\n          state.scrollParents = {\n            reference: isElement(reference) ? listScrollParents(reference) : reference.contextElement ? listScrollParents(reference.contextElement) : [],\n            popper: listScrollParents(popper)\n          }; // Orders the modifiers based on their dependencies and `phase`\n          // properties\n\n          var orderedModifiers = orderModifiers(mergeByName([].concat(defaultModifiers, state.options.modifiers))); // Strip out disabled modifiers\n\n          state.orderedModifiers = orderedModifiers.filter(function (m) {\n            return m.enabled;\n          }); // Validate the provided modifiers so that the consumer will get warned\n\n          runModifierEffects();\n          return instance.update();\n        },\n        // Sync update – it will always be executed, even if not necessary. This\n        // is useful for low frequency updates where sync behavior simplifies the\n        // logic.\n        // For high frequency updates (e.g. `resize` and `scroll` events), always\n        // prefer the async Popper#update method\n        forceUpdate: function forceUpdate() {\n          if (isDestroyed) {\n            return;\n          }\n\n          var _state$elements = state.elements,\n              reference = _state$elements.reference,\n              popper = _state$elements.popper; // Don't proceed if `reference` or `popper` are not valid elements\n          // anymore\n\n          if (!areValidElements(reference, popper)) {\n\n            return;\n          } // Store the reference and popper rects to be read by modifiers\n\n\n          state.rects = {\n            reference: getCompositeRect(reference, getOffsetParent(popper), state.options.strategy === 'fixed'),\n            popper: getLayoutRect(popper)\n          }; // Modifiers have the ability to reset the current update cycle. The\n          // most common use case for this is the `flip` modifier changing the\n          // placement, which then needs to re-run all the modifiers, because the\n          // logic was previously ran for the previous placement and is therefore\n          // stale/incorrect\n\n          state.reset = false;\n          state.placement = state.options.placement; // On each update cycle, the `modifiersData` property for each modifier\n          // is filled with the initial data specified by the modifier. This means\n          // it doesn't persist and is fresh on each update.\n          // To ensure persistent data, use `${name}#persistent`\n\n          state.orderedModifiers.forEach(function (modifier) {\n            return state.modifiersData[modifier.name] = Object.assign({}, modifier.data);\n          });\n\n          for (var index = 0; index < state.orderedModifiers.length; index++) {\n\n            if (state.reset === true) {\n              state.reset = false;\n              index = -1;\n              continue;\n            }\n\n            var _state$orderedModifie = state.orderedModifiers[index],\n                fn = _state$orderedModifie.fn,\n                _state$orderedModifie2 = _state$orderedModifie.options,\n                _options = _state$orderedModifie2 === void 0 ? {} : _state$orderedModifie2,\n                name = _state$orderedModifie.name;\n\n            if (typeof fn === 'function') {\n              state = fn({\n                state: state,\n                options: _options,\n                name: name,\n                instance: instance\n              }) || state;\n            }\n          }\n        },\n        // Async and optimistically optimized update – it will not be executed if\n        // not necessary (debounced to run at most once-per-tick)\n        update: debounce(function () {\n          return new Promise(function (resolve) {\n            instance.forceUpdate();\n            resolve(state);\n          });\n        }),\n        destroy: function destroy() {\n          cleanupModifierEffects();\n          isDestroyed = true;\n        }\n      };\n\n      if (!areValidElements(reference, popper)) {\n\n        return instance;\n      }\n\n      instance.setOptions(options).then(function (state) {\n        if (!isDestroyed && options.onFirstUpdate) {\n          options.onFirstUpdate(state);\n        }\n      }); // Modifiers have the ability to execute arbitrary code before the first\n      // update cycle runs. They will be executed in the same order as the update\n      // cycle. This is useful when a modifier adds some persistent data that\n      // other modifiers need to use, but the modifier is run after the dependent\n      // one.\n\n      function runModifierEffects() {\n        state.orderedModifiers.forEach(function (_ref3) {\n          var name = _ref3.name,\n              _ref3$options = _ref3.options,\n              options = _ref3$options === void 0 ? {} : _ref3$options,\n              effect = _ref3.effect;\n\n          if (typeof effect === 'function') {\n            var cleanupFn = effect({\n              state: state,\n              name: name,\n              instance: instance,\n              options: options\n            });\n\n            var noopFn = function noopFn() {};\n\n            effectCleanupFns.push(cleanupFn || noopFn);\n          }\n        });\n      }\n\n      function cleanupModifierEffects() {\n        effectCleanupFns.forEach(function (fn) {\n          return fn();\n        });\n        effectCleanupFns = [];\n      }\n\n      return instance;\n    };\n  }\n  var createPopper$2 = /*#__PURE__*/popperGenerator(); // eslint-disable-next-line import/no-unused-modules\n\n  var defaultModifiers$1 = [eventListeners, popperOffsets$1, computeStyles$1, applyStyles$1];\n  var createPopper$1 = /*#__PURE__*/popperGenerator({\n    defaultModifiers: defaultModifiers$1\n  }); // eslint-disable-next-line import/no-unused-modules\n\n  var defaultModifiers = [eventListeners, popperOffsets$1, computeStyles$1, applyStyles$1, offset$1, flip$1, preventOverflow$1, arrow$1, hide$1];\n  var createPopper = /*#__PURE__*/popperGenerator({\n    defaultModifiers: defaultModifiers\n  }); // eslint-disable-next-line import/no-unused-modules\n\n  var Popper = /*#__PURE__*/Object.freeze({\n    __proto__: null,\n    popperGenerator: popperGenerator,\n    detectOverflow: detectOverflow,\n    createPopperBase: createPopper$2,\n    createPopper: createPopper,\n    createPopperLite: createPopper$1,\n    top: top,\n    bottom: bottom,\n    right: right,\n    left: left,\n    auto: auto,\n    basePlacements: basePlacements,\n    start: start,\n    end: end,\n    clippingParents: clippingParents,\n    viewport: viewport,\n    popper: popper,\n    reference: reference,\n    variationPlacements: variationPlacements,\n    placements: placements,\n    beforeRead: beforeRead,\n    read: read,\n    afterRead: afterRead,\n    beforeMain: beforeMain,\n    main: main,\n    afterMain: afterMain,\n    beforeWrite: beforeWrite,\n    write: write,\n    afterWrite: afterWrite,\n    modifierPhases: modifierPhases,\n    applyStyles: applyStyles$1,\n    arrow: arrow$1,\n    computeStyles: computeStyles$1,\n    eventListeners: eventListeners,\n    flip: flip$1,\n    hide: hide$1,\n    offset: offset$1,\n    popperOffsets: popperOffsets$1,\n    preventOverflow: preventOverflow$1\n  });\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): dropdown.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$8 = 'dropdown';\n  const DATA_KEY$7 = 'bs.dropdown';\n  const EVENT_KEY$7 = `.${DATA_KEY$7}`;\n  const DATA_API_KEY$4 = '.data-api';\n  const ESCAPE_KEY$2 = 'Escape';\n  const SPACE_KEY = 'Space';\n  const TAB_KEY = 'Tab';\n  const ARROW_UP_KEY = 'ArrowUp';\n  const ARROW_DOWN_KEY = 'ArrowDown';\n  const RIGHT_MOUSE_BUTTON = 2; // MouseEvent.button value for the secondary button, usually the right button\n\n  const REGEXP_KEYDOWN = new RegExp(`${ARROW_UP_KEY}|${ARROW_DOWN_KEY}|${ESCAPE_KEY$2}`);\n  const EVENT_HIDE$4 = `hide${EVENT_KEY$7}`;\n  const EVENT_HIDDEN$4 = `hidden${EVENT_KEY$7}`;\n  const EVENT_SHOW$4 = `show${EVENT_KEY$7}`;\n  const EVENT_SHOWN$4 = `shown${EVENT_KEY$7}`;\n  const EVENT_CLICK = `click${EVENT_KEY$7}`;\n  const EVENT_CLICK_DATA_API$3 = `click${EVENT_KEY$7}${DATA_API_KEY$4}`;\n  const EVENT_KEYDOWN_DATA_API = `keydown${EVENT_KEY$7}${DATA_API_KEY$4}`;\n  const EVENT_KEYUP_DATA_API = `keyup${EVENT_KEY$7}${DATA_API_KEY$4}`;\n  const CLASS_NAME_SHOW$7 = 'show';\n  const CLASS_NAME_DROPUP = 'dropup';\n  const CLASS_NAME_DROPEND = 'dropend';\n  const CLASS_NAME_DROPSTART = 'dropstart';\n  const CLASS_NAME_NAVBAR = 'navbar';\n  const SELECTOR_DATA_TOGGLE$3 = '[data-bs-toggle=\"dropdown\"]';\n  const SELECTOR_MENU = '.dropdown-menu';\n  const SELECTOR_NAVBAR_NAV = '.navbar-nav';\n  const SELECTOR_VISIBLE_ITEMS = '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)';\n  const PLACEMENT_TOP = isRTL() ? 'top-end' : 'top-start';\n  const PLACEMENT_TOPEND = isRTL() ? 'top-start' : 'top-end';\n  const PLACEMENT_BOTTOM = isRTL() ? 'bottom-end' : 'bottom-start';\n  const PLACEMENT_BOTTOMEND = isRTL() ? 'bottom-start' : 'bottom-end';\n  const PLACEMENT_RIGHT = isRTL() ? 'left-start' : 'right-start';\n  const PLACEMENT_LEFT = isRTL() ? 'right-start' : 'left-start';\n  const Default$7 = {\n    offset: [0, 2],\n    boundary: 'clippingParents',\n    reference: 'toggle',\n    display: 'dynamic',\n    popperConfig: null,\n    autoClose: true\n  };\n  const DefaultType$7 = {\n    offset: '(array|string|function)',\n    boundary: '(string|element)',\n    reference: '(string|element|object)',\n    display: 'string',\n    popperConfig: '(null|object|function)',\n    autoClose: '(boolean|string)'\n  };\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Dropdown extends BaseComponent {\n    constructor(element, config) {\n      super(element);\n      this._popper = null;\n      this._config = this._getConfig(config);\n      this._menu = this._getMenuElement();\n      this._inNavbar = this._detectNavbar();\n\n      this._addEventListeners();\n    } // Getters\n\n\n    static get Default() {\n      return Default$7;\n    }\n\n    static get DefaultType() {\n      return DefaultType$7;\n    }\n\n    static get NAME() {\n      return NAME$8;\n    } // Public\n\n\n    toggle() {\n      if (isDisabled(this._element)) {\n        return;\n      }\n\n      const isActive = this._element.classList.contains(CLASS_NAME_SHOW$7);\n\n      if (isActive) {\n        this.hide();\n        return;\n      }\n\n      this.show();\n    }\n\n    show() {\n      if (isDisabled(this._element) || this._menu.classList.contains(CLASS_NAME_SHOW$7)) {\n        return;\n      }\n\n      const parent = Dropdown.getParentFromElement(this._element);\n      const relatedTarget = {\n        relatedTarget: this._element\n      };\n      const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$4, relatedTarget);\n\n      if (showEvent.defaultPrevented) {\n        return;\n      } // Totally disable Popper for Dropdowns in Navbar\n\n\n      if (this._inNavbar) {\n        Manipulator.setDataAttribute(this._menu, 'popper', 'none');\n      } else {\n        if (typeof Popper === 'undefined') {\n          throw new TypeError('Bootstrap\\'s dropdowns require Popper (https://popper.js.org)');\n        }\n\n        let referenceElement = this._element;\n\n        if (this._config.reference === 'parent') {\n          referenceElement = parent;\n        } else if (isElement$1(this._config.reference)) {\n          referenceElement = getElement(this._config.reference);\n        } else if (typeof this._config.reference === 'object') {\n          referenceElement = this._config.reference;\n        }\n\n        const popperConfig = this._getPopperConfig();\n\n        const isDisplayStatic = popperConfig.modifiers.find(modifier => modifier.name === 'applyStyles' && modifier.enabled === false);\n        this._popper = createPopper(referenceElement, this._menu, popperConfig);\n\n        if (isDisplayStatic) {\n          Manipulator.setDataAttribute(this._menu, 'popper', 'static');\n        }\n      } // If this is a touch-enabled device we add extra\n      // empty mouseover listeners to the body's immediate children;\n      // only needed because of broken event delegation on iOS\n      // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n\n\n      if ('ontouchstart' in document.documentElement && !parent.closest(SELECTOR_NAVBAR_NAV)) {\n        [].concat(...document.body.children).forEach(elem => EventHandler.on(elem, 'mouseover', noop));\n      }\n\n      this._element.focus();\n\n      this._element.setAttribute('aria-expanded', true);\n\n      this._menu.classList.toggle(CLASS_NAME_SHOW$7);\n\n      this._element.classList.toggle(CLASS_NAME_SHOW$7);\n\n      EventHandler.trigger(this._element, EVENT_SHOWN$4, relatedTarget);\n    }\n\n    hide() {\n      if (isDisabled(this._element) || !this._menu.classList.contains(CLASS_NAME_SHOW$7)) {\n        return;\n      }\n\n      const relatedTarget = {\n        relatedTarget: this._element\n      };\n\n      this._completeHide(relatedTarget);\n    }\n\n    dispose() {\n      if (this._popper) {\n        this._popper.destroy();\n      }\n\n      super.dispose();\n    }\n\n    update() {\n      this._inNavbar = this._detectNavbar();\n\n      if (this._popper) {\n        this._popper.update();\n      }\n    } // Private\n\n\n    _addEventListeners() {\n      EventHandler.on(this._element, EVENT_CLICK, event => {\n        event.preventDefault();\n        this.toggle();\n      });\n    }\n\n    _completeHide(relatedTarget) {\n      const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$4, relatedTarget);\n\n      if (hideEvent.defaultPrevented) {\n        return;\n      } // If this is a touch-enabled device we remove the extra\n      // empty mouseover listeners we added for iOS support\n\n\n      if ('ontouchstart' in document.documentElement) {\n        [].concat(...document.body.children).forEach(elem => EventHandler.off(elem, 'mouseover', noop));\n      }\n\n      if (this._popper) {\n        this._popper.destroy();\n      }\n\n      this._menu.classList.remove(CLASS_NAME_SHOW$7);\n\n      this._element.classList.remove(CLASS_NAME_SHOW$7);\n\n      this._element.setAttribute('aria-expanded', 'false');\n\n      Manipulator.removeDataAttribute(this._menu, 'popper');\n      EventHandler.trigger(this._element, EVENT_HIDDEN$4, relatedTarget);\n    }\n\n    _getConfig(config) {\n      config = { ...this.constructor.Default,\n        ...Manipulator.getDataAttributes(this._element),\n        ...config\n      };\n      typeCheckConfig(NAME$8, config, this.constructor.DefaultType);\n\n      if (typeof config.reference === 'object' && !isElement$1(config.reference) && typeof config.reference.getBoundingClientRect !== 'function') {\n        // Popper virtual elements require a getBoundingClientRect method\n        throw new TypeError(`${NAME$8.toUpperCase()}: Option \"reference\" provided type \"object\" without a required \"getBoundingClientRect\" method.`);\n      }\n\n      return config;\n    }\n\n    _getMenuElement() {\n      return SelectorEngine.next(this._element, SELECTOR_MENU)[0];\n    }\n\n    _getPlacement() {\n      const parentDropdown = this._element.parentNode;\n\n      if (parentDropdown.classList.contains(CLASS_NAME_DROPEND)) {\n        return PLACEMENT_RIGHT;\n      }\n\n      if (parentDropdown.classList.contains(CLASS_NAME_DROPSTART)) {\n        return PLACEMENT_LEFT;\n      } // We need to trim the value because custom properties can also include spaces\n\n\n      const isEnd = getComputedStyle(this._menu).getPropertyValue('--bs-position').trim() === 'end';\n\n      if (parentDropdown.classList.contains(CLASS_NAME_DROPUP)) {\n        return isEnd ? PLACEMENT_TOPEND : PLACEMENT_TOP;\n      }\n\n      return isEnd ? PLACEMENT_BOTTOMEND : PLACEMENT_BOTTOM;\n    }\n\n    _detectNavbar() {\n      return this._element.closest(`.${CLASS_NAME_NAVBAR}`) !== null;\n    }\n\n    _getOffset() {\n      const {\n        offset\n      } = this._config;\n\n      if (typeof offset === 'string') {\n        return offset.split(',').map(val => Number.parseInt(val, 10));\n      }\n\n      if (typeof offset === 'function') {\n        return popperData => offset(popperData, this._element);\n      }\n\n      return offset;\n    }\n\n    _getPopperConfig() {\n      const defaultBsPopperConfig = {\n        placement: this._getPlacement(),\n        modifiers: [{\n          name: 'preventOverflow',\n          options: {\n            boundary: this._config.boundary\n          }\n        }, {\n          name: 'offset',\n          options: {\n            offset: this._getOffset()\n          }\n        }]\n      }; // Disable Popper if we have a static display\n\n      if (this._config.display === 'static') {\n        defaultBsPopperConfig.modifiers = [{\n          name: 'applyStyles',\n          enabled: false\n        }];\n      }\n\n      return { ...defaultBsPopperConfig,\n        ...(typeof this._config.popperConfig === 'function' ? this._config.popperConfig(defaultBsPopperConfig) : this._config.popperConfig)\n      };\n    }\n\n    _selectMenuItem({\n      key,\n      target\n    }) {\n      const items = SelectorEngine.find(SELECTOR_VISIBLE_ITEMS, this._menu).filter(isVisible);\n\n      if (!items.length) {\n        return;\n      } // if target isn't included in items (e.g. when expanding the dropdown)\n      // allow cycling to get the last item in case key equals ARROW_UP_KEY\n\n\n      getNextActiveElement(items, target, key === ARROW_DOWN_KEY, !items.includes(target)).focus();\n    } // Static\n\n\n    static dropdownInterface(element, config) {\n      const data = Dropdown.getOrCreateInstance(element, config);\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config]();\n      }\n    }\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        Dropdown.dropdownInterface(this, config);\n      });\n    }\n\n    static clearMenus(event) {\n      if (event && (event.button === RIGHT_MOUSE_BUTTON || event.type === 'keyup' && event.key !== TAB_KEY)) {\n        return;\n      }\n\n      const toggles = SelectorEngine.find(SELECTOR_DATA_TOGGLE$3);\n\n      for (let i = 0, len = toggles.length; i < len; i++) {\n        const context = Dropdown.getInstance(toggles[i]);\n\n        if (!context || context._config.autoClose === false) {\n          continue;\n        }\n\n        if (!context._element.classList.contains(CLASS_NAME_SHOW$7)) {\n          continue;\n        }\n\n        const relatedTarget = {\n          relatedTarget: context._element\n        };\n\n        if (event) {\n          const composedPath = event.composedPath();\n          const isMenuTarget = composedPath.includes(context._menu);\n\n          if (composedPath.includes(context._element) || context._config.autoClose === 'inside' && !isMenuTarget || context._config.autoClose === 'outside' && isMenuTarget) {\n            continue;\n          } // Tab navigation through the dropdown menu or events from contained inputs shouldn't close the menu\n\n\n          if (context._menu.contains(event.target) && (event.type === 'keyup' && event.key === TAB_KEY || /input|select|option|textarea|form/i.test(event.target.tagName))) {\n            continue;\n          }\n\n          if (event.type === 'click') {\n            relatedTarget.clickEvent = event;\n          }\n        }\n\n        context._completeHide(relatedTarget);\n      }\n    }\n\n    static getParentFromElement(element) {\n      return getElementFromSelector(element) || element.parentNode;\n    }\n\n    static dataApiKeydownHandler(event) {\n      // If not input/textarea:\n      //  - And not a key in REGEXP_KEYDOWN => not a dropdown command\n      // If input/textarea:\n      //  - If space key => not a dropdown command\n      //  - If key is other than escape\n      //    - If key is not up or down => not a dropdown command\n      //    - If trigger inside the menu => not a dropdown command\n      if (/input|textarea/i.test(event.target.tagName) ? event.key === SPACE_KEY || event.key !== ESCAPE_KEY$2 && (event.key !== ARROW_DOWN_KEY && event.key !== ARROW_UP_KEY || event.target.closest(SELECTOR_MENU)) : !REGEXP_KEYDOWN.test(event.key)) {\n        return;\n      }\n\n      const isActive = this.classList.contains(CLASS_NAME_SHOW$7);\n\n      if (!isActive && event.key === ESCAPE_KEY$2) {\n        return;\n      }\n\n      event.preventDefault();\n      event.stopPropagation();\n\n      if (isDisabled(this)) {\n        return;\n      }\n\n      const getToggleButton = () => this.matches(SELECTOR_DATA_TOGGLE$3) ? this : SelectorEngine.prev(this, SELECTOR_DATA_TOGGLE$3)[0];\n\n      if (event.key === ESCAPE_KEY$2) {\n        getToggleButton().focus();\n        Dropdown.clearMenus();\n        return;\n      }\n\n      if (event.key === ARROW_UP_KEY || event.key === ARROW_DOWN_KEY) {\n        if (!isActive) {\n          getToggleButton().click();\n        }\n\n        Dropdown.getInstance(getToggleButton())._selectMenuItem(event);\n\n        return;\n      }\n\n      if (!isActive || event.key === SPACE_KEY) {\n        Dropdown.clearMenus();\n      }\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_DATA_TOGGLE$3, Dropdown.dataApiKeydownHandler);\n  EventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown.dataApiKeydownHandler);\n  EventHandler.on(document, EVENT_CLICK_DATA_API$3, Dropdown.clearMenus);\n  EventHandler.on(document, EVENT_KEYUP_DATA_API, Dropdown.clearMenus);\n  EventHandler.on(document, EVENT_CLICK_DATA_API$3, SELECTOR_DATA_TOGGLE$3, function (event) {\n    event.preventDefault();\n    Dropdown.dropdownInterface(this);\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Dropdown to jQuery only if jQuery is present\n   */\n\n  defineJQueryPlugin(Dropdown);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): util/scrollBar.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  const SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top';\n  const SELECTOR_STICKY_CONTENT = '.sticky-top';\n\n  class ScrollBarHelper {\n    constructor() {\n      this._element = document.body;\n    }\n\n    getWidth() {\n      // https://developer.mozilla.org/en-US/docs/Web/API/Window/innerWidth#usage_notes\n      const documentWidth = document.documentElement.clientWidth;\n      return Math.abs(window.innerWidth - documentWidth);\n    }\n\n    hide() {\n      const width = this.getWidth();\n\n      this._disableOverFlow(); // give padding to element to balance the hidden scrollbar width\n\n\n      this._setElementAttributes(this._element, 'paddingRight', calculatedValue => calculatedValue + width); // trick: We adjust positive paddingRight and negative marginRight to sticky-top elements to keep showing fullwidth\n\n\n      this._setElementAttributes(SELECTOR_FIXED_CONTENT, 'paddingRight', calculatedValue => calculatedValue + width);\n\n      this._setElementAttributes(SELECTOR_STICKY_CONTENT, 'marginRight', calculatedValue => calculatedValue - width);\n    }\n\n    _disableOverFlow() {\n      this._saveInitialAttribute(this._element, 'overflow');\n\n      this._element.style.overflow = 'hidden';\n    }\n\n    _setElementAttributes(selector, styleProp, callback) {\n      const scrollbarWidth = this.getWidth();\n\n      const manipulationCallBack = element => {\n        if (element !== this._element && window.innerWidth > element.clientWidth + scrollbarWidth) {\n          return;\n        }\n\n        this._saveInitialAttribute(element, styleProp);\n\n        const calculatedValue = window.getComputedStyle(element)[styleProp];\n        element.style[styleProp] = `${callback(Number.parseFloat(calculatedValue))}px`;\n      };\n\n      this._applyManipulationCallback(selector, manipulationCallBack);\n    }\n\n    reset() {\n      this._resetElementAttributes(this._element, 'overflow');\n\n      this._resetElementAttributes(this._element, 'paddingRight');\n\n      this._resetElementAttributes(SELECTOR_FIXED_CONTENT, 'paddingRight');\n\n      this._resetElementAttributes(SELECTOR_STICKY_CONTENT, 'marginRight');\n    }\n\n    _saveInitialAttribute(element, styleProp) {\n      const actualValue = element.style[styleProp];\n\n      if (actualValue) {\n        Manipulator.setDataAttribute(element, styleProp, actualValue);\n      }\n    }\n\n    _resetElementAttributes(selector, styleProp) {\n      const manipulationCallBack = element => {\n        const value = Manipulator.getDataAttribute(element, styleProp);\n\n        if (typeof value === 'undefined') {\n          element.style.removeProperty(styleProp);\n        } else {\n          Manipulator.removeDataAttribute(element, styleProp);\n          element.style[styleProp] = value;\n        }\n      };\n\n      this._applyManipulationCallback(selector, manipulationCallBack);\n    }\n\n    _applyManipulationCallback(selector, callBack) {\n      if (isElement$1(selector)) {\n        callBack(selector);\n      } else {\n        SelectorEngine.find(selector, this._element).forEach(callBack);\n      }\n    }\n\n    isOverflowing() {\n      return this.getWidth() > 0;\n    }\n\n  }\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): util/backdrop.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  const Default$6 = {\n    isVisible: true,\n    // if false, we use the backdrop helper without adding any element to the dom\n    isAnimated: false,\n    rootElement: 'body',\n    // give the choice to place backdrop under different elements\n    clickCallback: null\n  };\n  const DefaultType$6 = {\n    isVisible: 'boolean',\n    isAnimated: 'boolean',\n    rootElement: '(element|string)',\n    clickCallback: '(function|null)'\n  };\n  const NAME$7 = 'backdrop';\n  const CLASS_NAME_BACKDROP = 'modal-backdrop';\n  const CLASS_NAME_FADE$5 = 'fade';\n  const CLASS_NAME_SHOW$6 = 'show';\n  const EVENT_MOUSEDOWN = `mousedown.bs.${NAME$7}`;\n\n  class Backdrop {\n    constructor(config) {\n      this._config = this._getConfig(config);\n      this._isAppended = false;\n      this._element = null;\n    }\n\n    show(callback) {\n      if (!this._config.isVisible) {\n        execute(callback);\n        return;\n      }\n\n      this._append();\n\n      if (this._config.isAnimated) {\n        reflow(this._getElement());\n      }\n\n      this._getElement().classList.add(CLASS_NAME_SHOW$6);\n\n      this._emulateAnimation(() => {\n        execute(callback);\n      });\n    }\n\n    hide(callback) {\n      if (!this._config.isVisible) {\n        execute(callback);\n        return;\n      }\n\n      this._getElement().classList.remove(CLASS_NAME_SHOW$6);\n\n      this._emulateAnimation(() => {\n        this.dispose();\n        execute(callback);\n      });\n    } // Private\n\n\n    _getElement() {\n      if (!this._element) {\n        const backdrop = document.createElement('div');\n        backdrop.className = CLASS_NAME_BACKDROP;\n\n        if (this._config.isAnimated) {\n          backdrop.classList.add(CLASS_NAME_FADE$5);\n        }\n\n        this._element = backdrop;\n      }\n\n      return this._element;\n    }\n\n    _getConfig(config) {\n      config = { ...Default$6,\n        ...(typeof config === 'object' ? config : {})\n      }; // use getElement() with the default \"body\" to get a fresh Element on each instantiation\n\n      config.rootElement = getElement(config.rootElement);\n      typeCheckConfig(NAME$7, config, DefaultType$6);\n      return config;\n    }\n\n    _append() {\n      if (this._isAppended) {\n        return;\n      }\n\n      this._config.rootElement.appendChild(this._getElement());\n\n      EventHandler.on(this._getElement(), EVENT_MOUSEDOWN, () => {\n        execute(this._config.clickCallback);\n      });\n      this._isAppended = true;\n    }\n\n    dispose() {\n      if (!this._isAppended) {\n        return;\n      }\n\n      EventHandler.off(this._element, EVENT_MOUSEDOWN);\n\n      this._element.remove();\n\n      this._isAppended = false;\n    }\n\n    _emulateAnimation(callback) {\n      executeAfterTransition(callback, this._getElement(), this._config.isAnimated);\n    }\n\n  }\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): modal.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$6 = 'modal';\n  const DATA_KEY$6 = 'bs.modal';\n  const EVENT_KEY$6 = `.${DATA_KEY$6}`;\n  const DATA_API_KEY$3 = '.data-api';\n  const ESCAPE_KEY$1 = 'Escape';\n  const Default$5 = {\n    backdrop: true,\n    keyboard: true,\n    focus: true\n  };\n  const DefaultType$5 = {\n    backdrop: '(boolean|string)',\n    keyboard: 'boolean',\n    focus: 'boolean'\n  };\n  const EVENT_HIDE$3 = `hide${EVENT_KEY$6}`;\n  const EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY$6}`;\n  const EVENT_HIDDEN$3 = `hidden${EVENT_KEY$6}`;\n  const EVENT_SHOW$3 = `show${EVENT_KEY$6}`;\n  const EVENT_SHOWN$3 = `shown${EVENT_KEY$6}`;\n  const EVENT_FOCUSIN$2 = `focusin${EVENT_KEY$6}`;\n  const EVENT_RESIZE = `resize${EVENT_KEY$6}`;\n  const EVENT_CLICK_DISMISS$2 = `click.dismiss${EVENT_KEY$6}`;\n  const EVENT_KEYDOWN_DISMISS$1 = `keydown.dismiss${EVENT_KEY$6}`;\n  const EVENT_MOUSEUP_DISMISS = `mouseup.dismiss${EVENT_KEY$6}`;\n  const EVENT_MOUSEDOWN_DISMISS = `mousedown.dismiss${EVENT_KEY$6}`;\n  const EVENT_CLICK_DATA_API$2 = `click${EVENT_KEY$6}${DATA_API_KEY$3}`;\n  const CLASS_NAME_OPEN = 'modal-open';\n  const CLASS_NAME_FADE$4 = 'fade';\n  const CLASS_NAME_SHOW$5 = 'show';\n  const CLASS_NAME_STATIC = 'modal-static';\n  const SELECTOR_DIALOG = '.modal-dialog';\n  const SELECTOR_MODAL_BODY = '.modal-body';\n  const SELECTOR_DATA_TOGGLE$2 = '[data-bs-toggle=\"modal\"]';\n  const SELECTOR_DATA_DISMISS$2 = '[data-bs-dismiss=\"modal\"]';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Modal extends BaseComponent {\n    constructor(element, config) {\n      super(element);\n      this._config = this._getConfig(config);\n      this._dialog = SelectorEngine.findOne(SELECTOR_DIALOG, this._element);\n      this._backdrop = this._initializeBackDrop();\n      this._isShown = false;\n      this._ignoreBackdropClick = false;\n      this._isTransitioning = false;\n      this._scrollBar = new ScrollBarHelper();\n    } // Getters\n\n\n    static get Default() {\n      return Default$5;\n    }\n\n    static get NAME() {\n      return NAME$6;\n    } // Public\n\n\n    toggle(relatedTarget) {\n      return this._isShown ? this.hide() : this.show(relatedTarget);\n    }\n\n    show(relatedTarget) {\n      if (this._isShown || this._isTransitioning) {\n        return;\n      }\n\n      const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$3, {\n        relatedTarget\n      });\n\n      if (showEvent.defaultPrevented) {\n        return;\n      }\n\n      this._isShown = true;\n\n      if (this._isAnimated()) {\n        this._isTransitioning = true;\n      }\n\n      this._scrollBar.hide();\n\n      document.body.classList.add(CLASS_NAME_OPEN);\n\n      this._adjustDialog();\n\n      this._setEscapeEvent();\n\n      this._setResizeEvent();\n\n      EventHandler.on(this._element, EVENT_CLICK_DISMISS$2, SELECTOR_DATA_DISMISS$2, event => this.hide(event));\n      EventHandler.on(this._dialog, EVENT_MOUSEDOWN_DISMISS, () => {\n        EventHandler.one(this._element, EVENT_MOUSEUP_DISMISS, event => {\n          if (event.target === this._element) {\n            this._ignoreBackdropClick = true;\n          }\n        });\n      });\n\n      this._showBackdrop(() => this._showElement(relatedTarget));\n    }\n\n    hide(event) {\n      if (event && ['A', 'AREA'].includes(event.target.tagName)) {\n        event.preventDefault();\n      }\n\n      if (!this._isShown || this._isTransitioning) {\n        return;\n      }\n\n      const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$3);\n\n      if (hideEvent.defaultPrevented) {\n        return;\n      }\n\n      this._isShown = false;\n\n      const isAnimated = this._isAnimated();\n\n      if (isAnimated) {\n        this._isTransitioning = true;\n      }\n\n      this._setEscapeEvent();\n\n      this._setResizeEvent();\n\n      EventHandler.off(document, EVENT_FOCUSIN$2);\n\n      this._element.classList.remove(CLASS_NAME_SHOW$5);\n\n      EventHandler.off(this._element, EVENT_CLICK_DISMISS$2);\n      EventHandler.off(this._dialog, EVENT_MOUSEDOWN_DISMISS);\n\n      this._queueCallback(() => this._hideModal(), this._element, isAnimated);\n    }\n\n    dispose() {\n      [window, this._dialog].forEach(htmlElement => EventHandler.off(htmlElement, EVENT_KEY$6));\n\n      this._backdrop.dispose();\n\n      super.dispose();\n      /**\n       * `document` has 2 events `EVENT_FOCUSIN` and `EVENT_CLICK_DATA_API`\n       * Do not move `document` in `htmlElements` array\n       * It will remove `EVENT_CLICK_DATA_API` event that should remain\n       */\n\n      EventHandler.off(document, EVENT_FOCUSIN$2);\n    }\n\n    handleUpdate() {\n      this._adjustDialog();\n    } // Private\n\n\n    _initializeBackDrop() {\n      return new Backdrop({\n        isVisible: Boolean(this._config.backdrop),\n        // 'static' option will be translated to true, and booleans will keep their value\n        isAnimated: this._isAnimated()\n      });\n    }\n\n    _getConfig(config) {\n      config = { ...Default$5,\n        ...Manipulator.getDataAttributes(this._element),\n        ...(typeof config === 'object' ? config : {})\n      };\n      typeCheckConfig(NAME$6, config, DefaultType$5);\n      return config;\n    }\n\n    _showElement(relatedTarget) {\n      const isAnimated = this._isAnimated();\n\n      const modalBody = SelectorEngine.findOne(SELECTOR_MODAL_BODY, this._dialog);\n\n      if (!this._element.parentNode || this._element.parentNode.nodeType !== Node.ELEMENT_NODE) {\n        // Don't move modal's DOM position\n        document.body.appendChild(this._element);\n      }\n\n      this._element.style.display = 'block';\n\n      this._element.removeAttribute('aria-hidden');\n\n      this._element.setAttribute('aria-modal', true);\n\n      this._element.setAttribute('role', 'dialog');\n\n      this._element.scrollTop = 0;\n\n      if (modalBody) {\n        modalBody.scrollTop = 0;\n      }\n\n      if (isAnimated) {\n        reflow(this._element);\n      }\n\n      this._element.classList.add(CLASS_NAME_SHOW$5);\n\n      if (this._config.focus) {\n        this._enforceFocus();\n      }\n\n      const transitionComplete = () => {\n        if (this._config.focus) {\n          this._element.focus();\n        }\n\n        this._isTransitioning = false;\n        EventHandler.trigger(this._element, EVENT_SHOWN$3, {\n          relatedTarget\n        });\n      };\n\n      this._queueCallback(transitionComplete, this._dialog, isAnimated);\n    }\n\n    _enforceFocus() {\n      EventHandler.off(document, EVENT_FOCUSIN$2); // guard against infinite focus loop\n\n      EventHandler.on(document, EVENT_FOCUSIN$2, event => {\n        if (document !== event.target && this._element !== event.target && !this._element.contains(event.target)) {\n          this._element.focus();\n        }\n      });\n    }\n\n    _setEscapeEvent() {\n      if (this._isShown) {\n        EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS$1, event => {\n          if (this._config.keyboard && event.key === ESCAPE_KEY$1) {\n            event.preventDefault();\n            this.hide();\n          } else if (!this._config.keyboard && event.key === ESCAPE_KEY$1) {\n            this._triggerBackdropTransition();\n          }\n        });\n      } else {\n        EventHandler.off(this._element, EVENT_KEYDOWN_DISMISS$1);\n      }\n    }\n\n    _setResizeEvent() {\n      if (this._isShown) {\n        EventHandler.on(window, EVENT_RESIZE, () => this._adjustDialog());\n      } else {\n        EventHandler.off(window, EVENT_RESIZE);\n      }\n    }\n\n    _hideModal() {\n      this._element.style.display = 'none';\n\n      this._element.setAttribute('aria-hidden', true);\n\n      this._element.removeAttribute('aria-modal');\n\n      this._element.removeAttribute('role');\n\n      this._isTransitioning = false;\n\n      this._backdrop.hide(() => {\n        document.body.classList.remove(CLASS_NAME_OPEN);\n\n        this._resetAdjustments();\n\n        this._scrollBar.reset();\n\n        EventHandler.trigger(this._element, EVENT_HIDDEN$3);\n      });\n    }\n\n    _showBackdrop(callback) {\n      EventHandler.on(this._element, EVENT_CLICK_DISMISS$2, event => {\n        if (this._ignoreBackdropClick) {\n          this._ignoreBackdropClick = false;\n          return;\n        }\n\n        if (event.target !== event.currentTarget) {\n          return;\n        }\n\n        if (this._config.backdrop === true) {\n          this.hide();\n        } else if (this._config.backdrop === 'static') {\n          this._triggerBackdropTransition();\n        }\n      });\n\n      this._backdrop.show(callback);\n    }\n\n    _isAnimated() {\n      return this._element.classList.contains(CLASS_NAME_FADE$4);\n    }\n\n    _triggerBackdropTransition() {\n      const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED);\n\n      if (hideEvent.defaultPrevented) {\n        return;\n      }\n\n      const {\n        classList,\n        scrollHeight,\n        style\n      } = this._element;\n      const isModalOverflowing = scrollHeight > document.documentElement.clientHeight; // return if the following background transition hasn't yet completed\n\n      if (!isModalOverflowing && style.overflowY === 'hidden' || classList.contains(CLASS_NAME_STATIC)) {\n        return;\n      }\n\n      if (!isModalOverflowing) {\n        style.overflowY = 'hidden';\n      }\n\n      classList.add(CLASS_NAME_STATIC);\n\n      this._queueCallback(() => {\n        classList.remove(CLASS_NAME_STATIC);\n\n        if (!isModalOverflowing) {\n          this._queueCallback(() => {\n            style.overflowY = '';\n          }, this._dialog);\n        }\n      }, this._dialog);\n\n      this._element.focus();\n    } // ----------------------------------------------------------------------\n    // the following methods are used to handle overflowing modals\n    // ----------------------------------------------------------------------\n\n\n    _adjustDialog() {\n      const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;\n\n      const scrollbarWidth = this._scrollBar.getWidth();\n\n      const isBodyOverflowing = scrollbarWidth > 0;\n\n      if (!isBodyOverflowing && isModalOverflowing && !isRTL() || isBodyOverflowing && !isModalOverflowing && isRTL()) {\n        this._element.style.paddingLeft = `${scrollbarWidth}px`;\n      }\n\n      if (isBodyOverflowing && !isModalOverflowing && !isRTL() || !isBodyOverflowing && isModalOverflowing && isRTL()) {\n        this._element.style.paddingRight = `${scrollbarWidth}px`;\n      }\n    }\n\n    _resetAdjustments() {\n      this._element.style.paddingLeft = '';\n      this._element.style.paddingRight = '';\n    } // Static\n\n\n    static jQueryInterface(config, relatedTarget) {\n      return this.each(function () {\n        const data = Modal.getOrCreateInstance(this, config);\n\n        if (typeof config !== 'string') {\n          return;\n        }\n\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config](relatedTarget);\n      });\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(document, EVENT_CLICK_DATA_API$2, SELECTOR_DATA_TOGGLE$2, function (event) {\n    const target = getElementFromSelector(this);\n\n    if (['A', 'AREA'].includes(this.tagName)) {\n      event.preventDefault();\n    }\n\n    EventHandler.one(target, EVENT_SHOW$3, showEvent => {\n      if (showEvent.defaultPrevented) {\n        // only register focus restorer if modal will actually get shown\n        return;\n      }\n\n      EventHandler.one(target, EVENT_HIDDEN$3, () => {\n        if (isVisible(this)) {\n          this.focus();\n        }\n      });\n    });\n    const data = Modal.getOrCreateInstance(target);\n    data.toggle(this);\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Modal to jQuery only if jQuery is present\n   */\n\n  defineJQueryPlugin(Modal);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): offcanvas.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$5 = 'offcanvas';\n  const DATA_KEY$5 = 'bs.offcanvas';\n  const EVENT_KEY$5 = `.${DATA_KEY$5}`;\n  const DATA_API_KEY$2 = '.data-api';\n  const EVENT_LOAD_DATA_API$1 = `load${EVENT_KEY$5}${DATA_API_KEY$2}`;\n  const ESCAPE_KEY = 'Escape';\n  const Default$4 = {\n    backdrop: true,\n    keyboard: true,\n    scroll: false\n  };\n  const DefaultType$4 = {\n    backdrop: 'boolean',\n    keyboard: 'boolean',\n    scroll: 'boolean'\n  };\n  const CLASS_NAME_SHOW$4 = 'show';\n  const OPEN_SELECTOR = '.offcanvas.show';\n  const EVENT_SHOW$2 = `show${EVENT_KEY$5}`;\n  const EVENT_SHOWN$2 = `shown${EVENT_KEY$5}`;\n  const EVENT_HIDE$2 = `hide${EVENT_KEY$5}`;\n  const EVENT_HIDDEN$2 = `hidden${EVENT_KEY$5}`;\n  const EVENT_FOCUSIN$1 = `focusin${EVENT_KEY$5}`;\n  const EVENT_CLICK_DATA_API$1 = `click${EVENT_KEY$5}${DATA_API_KEY$2}`;\n  const EVENT_CLICK_DISMISS$1 = `click.dismiss${EVENT_KEY$5}`;\n  const EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY$5}`;\n  const SELECTOR_DATA_DISMISS$1 = '[data-bs-dismiss=\"offcanvas\"]';\n  const SELECTOR_DATA_TOGGLE$1 = '[data-bs-toggle=\"offcanvas\"]';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Offcanvas extends BaseComponent {\n    constructor(element, config) {\n      super(element);\n      this._config = this._getConfig(config);\n      this._isShown = false;\n      this._backdrop = this._initializeBackDrop();\n\n      this._addEventListeners();\n    } // Getters\n\n\n    static get NAME() {\n      return NAME$5;\n    }\n\n    static get Default() {\n      return Default$4;\n    } // Public\n\n\n    toggle(relatedTarget) {\n      return this._isShown ? this.hide() : this.show(relatedTarget);\n    }\n\n    show(relatedTarget) {\n      if (this._isShown) {\n        return;\n      }\n\n      const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$2, {\n        relatedTarget\n      });\n\n      if (showEvent.defaultPrevented) {\n        return;\n      }\n\n      this._isShown = true;\n      this._element.style.visibility = 'visible';\n\n      this._backdrop.show();\n\n      if (!this._config.scroll) {\n        new ScrollBarHelper().hide();\n\n        this._enforceFocusOnElement(this._element);\n      }\n\n      this._element.removeAttribute('aria-hidden');\n\n      this._element.setAttribute('aria-modal', true);\n\n      this._element.setAttribute('role', 'dialog');\n\n      this._element.classList.add(CLASS_NAME_SHOW$4);\n\n      const completeCallBack = () => {\n        EventHandler.trigger(this._element, EVENT_SHOWN$2, {\n          relatedTarget\n        });\n      };\n\n      this._queueCallback(completeCallBack, this._element, true);\n    }\n\n    hide() {\n      if (!this._isShown) {\n        return;\n      }\n\n      const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$2);\n\n      if (hideEvent.defaultPrevented) {\n        return;\n      }\n\n      EventHandler.off(document, EVENT_FOCUSIN$1);\n\n      this._element.blur();\n\n      this._isShown = false;\n\n      this._element.classList.remove(CLASS_NAME_SHOW$4);\n\n      this._backdrop.hide();\n\n      const completeCallback = () => {\n        this._element.setAttribute('aria-hidden', true);\n\n        this._element.removeAttribute('aria-modal');\n\n        this._element.removeAttribute('role');\n\n        this._element.style.visibility = 'hidden';\n\n        if (!this._config.scroll) {\n          new ScrollBarHelper().reset();\n        }\n\n        EventHandler.trigger(this._element, EVENT_HIDDEN$2);\n      };\n\n      this._queueCallback(completeCallback, this._element, true);\n    }\n\n    dispose() {\n      this._backdrop.dispose();\n\n      super.dispose();\n      EventHandler.off(document, EVENT_FOCUSIN$1);\n    } // Private\n\n\n    _getConfig(config) {\n      config = { ...Default$4,\n        ...Manipulator.getDataAttributes(this._element),\n        ...(typeof config === 'object' ? config : {})\n      };\n      typeCheckConfig(NAME$5, config, DefaultType$4);\n      return config;\n    }\n\n    _initializeBackDrop() {\n      return new Backdrop({\n        isVisible: this._config.backdrop,\n        isAnimated: true,\n        rootElement: this._element.parentNode,\n        clickCallback: () => this.hide()\n      });\n    }\n\n    _enforceFocusOnElement(element) {\n      EventHandler.off(document, EVENT_FOCUSIN$1); // guard against infinite focus loop\n\n      EventHandler.on(document, EVENT_FOCUSIN$1, event => {\n        if (document !== event.target && element !== event.target && !element.contains(event.target)) {\n          element.focus();\n        }\n      });\n      element.focus();\n    }\n\n    _addEventListeners() {\n      EventHandler.on(this._element, EVENT_CLICK_DISMISS$1, SELECTOR_DATA_DISMISS$1, () => this.hide());\n      EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS, event => {\n        if (this._config.keyboard && event.key === ESCAPE_KEY) {\n          this.hide();\n        }\n      });\n    } // Static\n\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = Offcanvas.getOrCreateInstance(this, config);\n\n        if (typeof config !== 'string') {\n          return;\n        }\n\n        if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config](this);\n      });\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(document, EVENT_CLICK_DATA_API$1, SELECTOR_DATA_TOGGLE$1, function (event) {\n    const target = getElementFromSelector(this);\n\n    if (['A', 'AREA'].includes(this.tagName)) {\n      event.preventDefault();\n    }\n\n    if (isDisabled(this)) {\n      return;\n    }\n\n    EventHandler.one(target, EVENT_HIDDEN$2, () => {\n      // focus on trigger when it is closed\n      if (isVisible(this)) {\n        this.focus();\n      }\n    }); // avoid conflict when clicking a toggler of an offcanvas, while another is open\n\n    const allReadyOpen = SelectorEngine.findOne(OPEN_SELECTOR);\n\n    if (allReadyOpen && allReadyOpen !== target) {\n      Offcanvas.getInstance(allReadyOpen).hide();\n    }\n\n    const data = Offcanvas.getOrCreateInstance(target);\n    data.toggle(this);\n  });\n  EventHandler.on(window, EVENT_LOAD_DATA_API$1, () => SelectorEngine.find(OPEN_SELECTOR).forEach(el => Offcanvas.getOrCreateInstance(el).show()));\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   */\n\n  defineJQueryPlugin(Offcanvas);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): util/sanitizer.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  const uriAttrs = new Set(['background', 'cite', 'href', 'itemtype', 'longdesc', 'poster', 'src', 'xlink:href']);\n  const ARIA_ATTRIBUTE_PATTERN = /^aria-[\\w-]*$/i;\n  /**\n   * A pattern that recognizes a commonly useful subset of URLs that are safe.\n   *\n   * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts\n   */\n\n  const SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file):|[^#&/:?]*(?:[#/?]|$))/i;\n  /**\n   * A pattern that matches safe data URLs. Only matches image, video and audio types.\n   *\n   * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts\n   */\n\n  const DATA_URL_PATTERN = /^data:(?:image\\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\\/(?:mpeg|mp4|ogg|webm)|audio\\/(?:mp3|oga|ogg|opus));base64,[\\d+/a-z]+=*$/i;\n\n  const allowedAttribute = (attr, allowedAttributeList) => {\n    const attrName = attr.nodeName.toLowerCase();\n\n    if (allowedAttributeList.includes(attrName)) {\n      if (uriAttrs.has(attrName)) {\n        return Boolean(SAFE_URL_PATTERN.test(attr.nodeValue) || DATA_URL_PATTERN.test(attr.nodeValue));\n      }\n\n      return true;\n    }\n\n    const regExp = allowedAttributeList.filter(attrRegex => attrRegex instanceof RegExp); // Check if a regular expression validates the attribute.\n\n    for (let i = 0, len = regExp.length; i < len; i++) {\n      if (regExp[i].test(attrName)) {\n        return true;\n      }\n    }\n\n    return false;\n  };\n\n  const DefaultAllowlist = {\n    // Global attributes allowed on any supplied element below.\n    '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],\n    a: ['target', 'href', 'title', 'rel'],\n    area: [],\n    b: [],\n    br: [],\n    col: [],\n    code: [],\n    div: [],\n    em: [],\n    hr: [],\n    h1: [],\n    h2: [],\n    h3: [],\n    h4: [],\n    h5: [],\n    h6: [],\n    i: [],\n    img: ['src', 'srcset', 'alt', 'title', 'width', 'height'],\n    li: [],\n    ol: [],\n    p: [],\n    pre: [],\n    s: [],\n    small: [],\n    span: [],\n    sub: [],\n    sup: [],\n    strong: [],\n    u: [],\n    ul: []\n  };\n  function sanitizeHtml(unsafeHtml, allowList, sanitizeFn) {\n    if (!unsafeHtml.length) {\n      return unsafeHtml;\n    }\n\n    if (sanitizeFn && typeof sanitizeFn === 'function') {\n      return sanitizeFn(unsafeHtml);\n    }\n\n    const domParser = new window.DOMParser();\n    const createdDocument = domParser.parseFromString(unsafeHtml, 'text/html');\n    const allowlistKeys = Object.keys(allowList);\n    const elements = [].concat(...createdDocument.body.querySelectorAll('*'));\n\n    for (let i = 0, len = elements.length; i < len; i++) {\n      const el = elements[i];\n      const elName = el.nodeName.toLowerCase();\n\n      if (!allowlistKeys.includes(elName)) {\n        el.remove();\n        continue;\n      }\n\n      const attributeList = [].concat(...el.attributes);\n      const allowedAttributes = [].concat(allowList['*'] || [], allowList[elName] || []);\n      attributeList.forEach(attr => {\n        if (!allowedAttribute(attr, allowedAttributes)) {\n          el.removeAttribute(attr.nodeName);\n        }\n      });\n    }\n\n    return createdDocument.body.innerHTML;\n  }\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): tooltip.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$4 = 'tooltip';\n  const DATA_KEY$4 = 'bs.tooltip';\n  const EVENT_KEY$4 = `.${DATA_KEY$4}`;\n  const CLASS_PREFIX$1 = 'bs-tooltip';\n  const BSCLS_PREFIX_REGEX$1 = new RegExp(`(^|\\\\s)${CLASS_PREFIX$1}\\\\S+`, 'g');\n  const DISALLOWED_ATTRIBUTES = new Set(['sanitize', 'allowList', 'sanitizeFn']);\n  const DefaultType$3 = {\n    animation: 'boolean',\n    template: 'string',\n    title: '(string|element|function)',\n    trigger: 'string',\n    delay: '(number|object)',\n    html: 'boolean',\n    selector: '(string|boolean)',\n    placement: '(string|function)',\n    offset: '(array|string|function)',\n    container: '(string|element|boolean)',\n    fallbackPlacements: 'array',\n    boundary: '(string|element)',\n    customClass: '(string|function)',\n    sanitize: 'boolean',\n    sanitizeFn: '(null|function)',\n    allowList: 'object',\n    popperConfig: '(null|object|function)'\n  };\n  const AttachmentMap = {\n    AUTO: 'auto',\n    TOP: 'top',\n    RIGHT: isRTL() ? 'left' : 'right',\n    BOTTOM: 'bottom',\n    LEFT: isRTL() ? 'right' : 'left'\n  };\n  const Default$3 = {\n    animation: true,\n    template: '<div class=\"tooltip\" role=\"tooltip\">' + '<div class=\"tooltip-arrow\"></div>' + '<div class=\"tooltip-inner\"></div>' + '</div>',\n    trigger: 'hover focus',\n    title: '',\n    delay: 0,\n    html: false,\n    selector: false,\n    placement: 'top',\n    offset: [0, 0],\n    container: false,\n    fallbackPlacements: ['top', 'right', 'bottom', 'left'],\n    boundary: 'clippingParents',\n    customClass: '',\n    sanitize: true,\n    sanitizeFn: null,\n    allowList: DefaultAllowlist,\n    popperConfig: null\n  };\n  const Event$2 = {\n    HIDE: `hide${EVENT_KEY$4}`,\n    HIDDEN: `hidden${EVENT_KEY$4}`,\n    SHOW: `show${EVENT_KEY$4}`,\n    SHOWN: `shown${EVENT_KEY$4}`,\n    INSERTED: `inserted${EVENT_KEY$4}`,\n    CLICK: `click${EVENT_KEY$4}`,\n    FOCUSIN: `focusin${EVENT_KEY$4}`,\n    FOCUSOUT: `focusout${EVENT_KEY$4}`,\n    MOUSEENTER: `mouseenter${EVENT_KEY$4}`,\n    MOUSELEAVE: `mouseleave${EVENT_KEY$4}`\n  };\n  const CLASS_NAME_FADE$3 = 'fade';\n  const CLASS_NAME_MODAL = 'modal';\n  const CLASS_NAME_SHOW$3 = 'show';\n  const HOVER_STATE_SHOW = 'show';\n  const HOVER_STATE_OUT = 'out';\n  const SELECTOR_TOOLTIP_INNER = '.tooltip-inner';\n  const TRIGGER_HOVER = 'hover';\n  const TRIGGER_FOCUS = 'focus';\n  const TRIGGER_CLICK = 'click';\n  const TRIGGER_MANUAL = 'manual';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Tooltip extends BaseComponent {\n    constructor(element, config) {\n      if (typeof Popper === 'undefined') {\n        throw new TypeError('Bootstrap\\'s tooltips require Popper (https://popper.js.org)');\n      }\n\n      super(element); // private\n\n      this._isEnabled = true;\n      this._timeout = 0;\n      this._hoverState = '';\n      this._activeTrigger = {};\n      this._popper = null; // Protected\n\n      this._config = this._getConfig(config);\n      this.tip = null;\n\n      this._setListeners();\n    } // Getters\n\n\n    static get Default() {\n      return Default$3;\n    }\n\n    static get NAME() {\n      return NAME$4;\n    }\n\n    static get Event() {\n      return Event$2;\n    }\n\n    static get DefaultType() {\n      return DefaultType$3;\n    } // Public\n\n\n    enable() {\n      this._isEnabled = true;\n    }\n\n    disable() {\n      this._isEnabled = false;\n    }\n\n    toggleEnabled() {\n      this._isEnabled = !this._isEnabled;\n    }\n\n    toggle(event) {\n      if (!this._isEnabled) {\n        return;\n      }\n\n      if (event) {\n        const context = this._initializeOnDelegatedTarget(event);\n\n        context._activeTrigger.click = !context._activeTrigger.click;\n\n        if (context._isWithActiveTrigger()) {\n          context._enter(null, context);\n        } else {\n          context._leave(null, context);\n        }\n      } else {\n        if (this.getTipElement().classList.contains(CLASS_NAME_SHOW$3)) {\n          this._leave(null, this);\n\n          return;\n        }\n\n        this._enter(null, this);\n      }\n    }\n\n    dispose() {\n      clearTimeout(this._timeout);\n      EventHandler.off(this._element.closest(`.${CLASS_NAME_MODAL}`), 'hide.bs.modal', this._hideModalHandler);\n\n      if (this.tip) {\n        this.tip.remove();\n      }\n\n      if (this._popper) {\n        this._popper.destroy();\n      }\n\n      super.dispose();\n    }\n\n    show() {\n      if (this._element.style.display === 'none') {\n        throw new Error('Please use show on visible elements');\n      }\n\n      if (!(this.isWithContent() && this._isEnabled)) {\n        return;\n      }\n\n      const showEvent = EventHandler.trigger(this._element, this.constructor.Event.SHOW);\n      const shadowRoot = findShadowRoot(this._element);\n      const isInTheDom = shadowRoot === null ? this._element.ownerDocument.documentElement.contains(this._element) : shadowRoot.contains(this._element);\n\n      if (showEvent.defaultPrevented || !isInTheDom) {\n        return;\n      }\n\n      const tip = this.getTipElement();\n      const tipId = getUID(this.constructor.NAME);\n      tip.setAttribute('id', tipId);\n\n      this._element.setAttribute('aria-describedby', tipId);\n\n      this.setContent();\n\n      if (this._config.animation) {\n        tip.classList.add(CLASS_NAME_FADE$3);\n      }\n\n      const placement = typeof this._config.placement === 'function' ? this._config.placement.call(this, tip, this._element) : this._config.placement;\n\n      const attachment = this._getAttachment(placement);\n\n      this._addAttachmentClass(attachment);\n\n      const {\n        container\n      } = this._config;\n      Data.set(tip, this.constructor.DATA_KEY, this);\n\n      if (!this._element.ownerDocument.documentElement.contains(this.tip)) {\n        container.appendChild(tip);\n        EventHandler.trigger(this._element, this.constructor.Event.INSERTED);\n      }\n\n      if (this._popper) {\n        this._popper.update();\n      } else {\n        this._popper = createPopper(this._element, tip, this._getPopperConfig(attachment));\n      }\n\n      tip.classList.add(CLASS_NAME_SHOW$3);\n      const customClass = typeof this._config.customClass === 'function' ? this._config.customClass() : this._config.customClass;\n\n      if (customClass) {\n        tip.classList.add(...customClass.split(' '));\n      } // If this is a touch-enabled device we add extra\n      // empty mouseover listeners to the body's immediate children;\n      // only needed because of broken event delegation on iOS\n      // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n\n\n      if ('ontouchstart' in document.documentElement) {\n        [].concat(...document.body.children).forEach(element => {\n          EventHandler.on(element, 'mouseover', noop);\n        });\n      }\n\n      const complete = () => {\n        const prevHoverState = this._hoverState;\n        this._hoverState = null;\n        EventHandler.trigger(this._element, this.constructor.Event.SHOWN);\n\n        if (prevHoverState === HOVER_STATE_OUT) {\n          this._leave(null, this);\n        }\n      };\n\n      const isAnimated = this.tip.classList.contains(CLASS_NAME_FADE$3);\n\n      this._queueCallback(complete, this.tip, isAnimated);\n    }\n\n    hide() {\n      if (!this._popper) {\n        return;\n      }\n\n      const tip = this.getTipElement();\n\n      const complete = () => {\n        if (this._isWithActiveTrigger()) {\n          return;\n        }\n\n        if (this._hoverState !== HOVER_STATE_SHOW) {\n          tip.remove();\n        }\n\n        this._cleanTipClass();\n\n        this._element.removeAttribute('aria-describedby');\n\n        EventHandler.trigger(this._element, this.constructor.Event.HIDDEN);\n\n        if (this._popper) {\n          this._popper.destroy();\n\n          this._popper = null;\n        }\n      };\n\n      const hideEvent = EventHandler.trigger(this._element, this.constructor.Event.HIDE);\n\n      if (hideEvent.defaultPrevented) {\n        return;\n      }\n\n      tip.classList.remove(CLASS_NAME_SHOW$3); // If this is a touch-enabled device we remove the extra\n      // empty mouseover listeners we added for iOS support\n\n      if ('ontouchstart' in document.documentElement) {\n        [].concat(...document.body.children).forEach(element => EventHandler.off(element, 'mouseover', noop));\n      }\n\n      this._activeTrigger[TRIGGER_CLICK] = false;\n      this._activeTrigger[TRIGGER_FOCUS] = false;\n      this._activeTrigger[TRIGGER_HOVER] = false;\n      const isAnimated = this.tip.classList.contains(CLASS_NAME_FADE$3);\n\n      this._queueCallback(complete, this.tip, isAnimated);\n\n      this._hoverState = '';\n    }\n\n    update() {\n      if (this._popper !== null) {\n        this._popper.update();\n      }\n    } // Protected\n\n\n    isWithContent() {\n      return Boolean(this.getTitle());\n    }\n\n    getTipElement() {\n      if (this.tip) {\n        return this.tip;\n      }\n\n      const element = document.createElement('div');\n      element.innerHTML = this._config.template;\n      this.tip = element.children[0];\n      return this.tip;\n    }\n\n    setContent() {\n      const tip = this.getTipElement();\n      this.setElementContent(SelectorEngine.findOne(SELECTOR_TOOLTIP_INNER, tip), this.getTitle());\n      tip.classList.remove(CLASS_NAME_FADE$3, CLASS_NAME_SHOW$3);\n    }\n\n    setElementContent(element, content) {\n      if (element === null) {\n        return;\n      }\n\n      if (isElement$1(content)) {\n        content = getElement(content); // content is a DOM node or a jQuery\n\n        if (this._config.html) {\n          if (content.parentNode !== element) {\n            element.innerHTML = '';\n            element.appendChild(content);\n          }\n        } else {\n          element.textContent = content.textContent;\n        }\n\n        return;\n      }\n\n      if (this._config.html) {\n        if (this._config.sanitize) {\n          content = sanitizeHtml(content, this._config.allowList, this._config.sanitizeFn);\n        }\n\n        element.innerHTML = content;\n      } else {\n        element.textContent = content;\n      }\n    }\n\n    getTitle() {\n      let title = this._element.getAttribute('data-bs-original-title');\n\n      if (!title) {\n        title = typeof this._config.title === 'function' ? this._config.title.call(this._element) : this._config.title;\n      }\n\n      return title;\n    }\n\n    updateAttachment(attachment) {\n      if (attachment === 'right') {\n        return 'end';\n      }\n\n      if (attachment === 'left') {\n        return 'start';\n      }\n\n      return attachment;\n    } // Private\n\n\n    _initializeOnDelegatedTarget(event, context) {\n      const dataKey = this.constructor.DATA_KEY;\n      context = context || Data.get(event.delegateTarget, dataKey);\n\n      if (!context) {\n        context = new this.constructor(event.delegateTarget, this._getDelegateConfig());\n        Data.set(event.delegateTarget, dataKey, context);\n      }\n\n      return context;\n    }\n\n    _getOffset() {\n      const {\n        offset\n      } = this._config;\n\n      if (typeof offset === 'string') {\n        return offset.split(',').map(val => Number.parseInt(val, 10));\n      }\n\n      if (typeof offset === 'function') {\n        return popperData => offset(popperData, this._element);\n      }\n\n      return offset;\n    }\n\n    _getPopperConfig(attachment) {\n      const defaultBsPopperConfig = {\n        placement: attachment,\n        modifiers: [{\n          name: 'flip',\n          options: {\n            fallbackPlacements: this._config.fallbackPlacements\n          }\n        }, {\n          name: 'offset',\n          options: {\n            offset: this._getOffset()\n          }\n        }, {\n          name: 'preventOverflow',\n          options: {\n            boundary: this._config.boundary\n          }\n        }, {\n          name: 'arrow',\n          options: {\n            element: `.${this.constructor.NAME}-arrow`\n          }\n        }, {\n          name: 'onChange',\n          enabled: true,\n          phase: 'afterWrite',\n          fn: data => this._handlePopperPlacementChange(data)\n        }],\n        onFirstUpdate: data => {\n          if (data.options.placement !== data.placement) {\n            this._handlePopperPlacementChange(data);\n          }\n        }\n      };\n      return { ...defaultBsPopperConfig,\n        ...(typeof this._config.popperConfig === 'function' ? this._config.popperConfig(defaultBsPopperConfig) : this._config.popperConfig)\n      };\n    }\n\n    _addAttachmentClass(attachment) {\n      this.getTipElement().classList.add(`${CLASS_PREFIX$1}-${this.updateAttachment(attachment)}`);\n    }\n\n    _getAttachment(placement) {\n      return AttachmentMap[placement.toUpperCase()];\n    }\n\n    _setListeners() {\n      const triggers = this._config.trigger.split(' ');\n\n      triggers.forEach(trigger => {\n        if (trigger === 'click') {\n          EventHandler.on(this._element, this.constructor.Event.CLICK, this._config.selector, event => this.toggle(event));\n        } else if (trigger !== TRIGGER_MANUAL) {\n          const eventIn = trigger === TRIGGER_HOVER ? this.constructor.Event.MOUSEENTER : this.constructor.Event.FOCUSIN;\n          const eventOut = trigger === TRIGGER_HOVER ? this.constructor.Event.MOUSELEAVE : this.constructor.Event.FOCUSOUT;\n          EventHandler.on(this._element, eventIn, this._config.selector, event => this._enter(event));\n          EventHandler.on(this._element, eventOut, this._config.selector, event => this._leave(event));\n        }\n      });\n\n      this._hideModalHandler = () => {\n        if (this._element) {\n          this.hide();\n        }\n      };\n\n      EventHandler.on(this._element.closest(`.${CLASS_NAME_MODAL}`), 'hide.bs.modal', this._hideModalHandler);\n\n      if (this._config.selector) {\n        this._config = { ...this._config,\n          trigger: 'manual',\n          selector: ''\n        };\n      } else {\n        this._fixTitle();\n      }\n    }\n\n    _fixTitle() {\n      const title = this._element.getAttribute('title');\n\n      const originalTitleType = typeof this._element.getAttribute('data-bs-original-title');\n\n      if (title || originalTitleType !== 'string') {\n        this._element.setAttribute('data-bs-original-title', title || '');\n\n        if (title && !this._element.getAttribute('aria-label') && !this._element.textContent) {\n          this._element.setAttribute('aria-label', title);\n        }\n\n        this._element.setAttribute('title', '');\n      }\n    }\n\n    _enter(event, context) {\n      context = this._initializeOnDelegatedTarget(event, context);\n\n      if (event) {\n        context._activeTrigger[event.type === 'focusin' ? TRIGGER_FOCUS : TRIGGER_HOVER] = true;\n      }\n\n      if (context.getTipElement().classList.contains(CLASS_NAME_SHOW$3) || context._hoverState === HOVER_STATE_SHOW) {\n        context._hoverState = HOVER_STATE_SHOW;\n        return;\n      }\n\n      clearTimeout(context._timeout);\n      context._hoverState = HOVER_STATE_SHOW;\n\n      if (!context._config.delay || !context._config.delay.show) {\n        context.show();\n        return;\n      }\n\n      context._timeout = setTimeout(() => {\n        if (context._hoverState === HOVER_STATE_SHOW) {\n          context.show();\n        }\n      }, context._config.delay.show);\n    }\n\n    _leave(event, context) {\n      context = this._initializeOnDelegatedTarget(event, context);\n\n      if (event) {\n        context._activeTrigger[event.type === 'focusout' ? TRIGGER_FOCUS : TRIGGER_HOVER] = context._element.contains(event.relatedTarget);\n      }\n\n      if (context._isWithActiveTrigger()) {\n        return;\n      }\n\n      clearTimeout(context._timeout);\n      context._hoverState = HOVER_STATE_OUT;\n\n      if (!context._config.delay || !context._config.delay.hide) {\n        context.hide();\n        return;\n      }\n\n      context._timeout = setTimeout(() => {\n        if (context._hoverState === HOVER_STATE_OUT) {\n          context.hide();\n        }\n      }, context._config.delay.hide);\n    }\n\n    _isWithActiveTrigger() {\n      for (const trigger in this._activeTrigger) {\n        if (this._activeTrigger[trigger]) {\n          return true;\n        }\n      }\n\n      return false;\n    }\n\n    _getConfig(config) {\n      const dataAttributes = Manipulator.getDataAttributes(this._element);\n      Object.keys(dataAttributes).forEach(dataAttr => {\n        if (DISALLOWED_ATTRIBUTES.has(dataAttr)) {\n          delete dataAttributes[dataAttr];\n        }\n      });\n      config = { ...this.constructor.Default,\n        ...dataAttributes,\n        ...(typeof config === 'object' && config ? config : {})\n      };\n      config.container = config.container === false ? document.body : getElement(config.container);\n\n      if (typeof config.delay === 'number') {\n        config.delay = {\n          show: config.delay,\n          hide: config.delay\n        };\n      }\n\n      if (typeof config.title === 'number') {\n        config.title = config.title.toString();\n      }\n\n      if (typeof config.content === 'number') {\n        config.content = config.content.toString();\n      }\n\n      typeCheckConfig(NAME$4, config, this.constructor.DefaultType);\n\n      if (config.sanitize) {\n        config.template = sanitizeHtml(config.template, config.allowList, config.sanitizeFn);\n      }\n\n      return config;\n    }\n\n    _getDelegateConfig() {\n      const config = {};\n\n      if (this._config) {\n        for (const key in this._config) {\n          if (this.constructor.Default[key] !== this._config[key]) {\n            config[key] = this._config[key];\n          }\n        }\n      }\n\n      return config;\n    }\n\n    _cleanTipClass() {\n      const tip = this.getTipElement();\n      const tabClass = tip.getAttribute('class').match(BSCLS_PREFIX_REGEX$1);\n\n      if (tabClass !== null && tabClass.length > 0) {\n        tabClass.map(token => token.trim()).forEach(tClass => tip.classList.remove(tClass));\n      }\n    }\n\n    _handlePopperPlacementChange(popperData) {\n      const {\n        state\n      } = popperData;\n\n      if (!state) {\n        return;\n      }\n\n      this.tip = state.elements.popper;\n\n      this._cleanTipClass();\n\n      this._addAttachmentClass(this._getAttachment(state.placement));\n    } // Static\n\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = Tooltip.getOrCreateInstance(this, config);\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(`No method named \"${config}\"`);\n          }\n\n          data[config]();\n        }\n      });\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Tooltip to jQuery only if jQuery is present\n   */\n\n\n  defineJQueryPlugin(Tooltip);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): popover.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$3 = 'popover';\n  const DATA_KEY$3 = 'bs.popover';\n  const EVENT_KEY$3 = `.${DATA_KEY$3}`;\n  const CLASS_PREFIX = 'bs-popover';\n  const BSCLS_PREFIX_REGEX = new RegExp(`(^|\\\\s)${CLASS_PREFIX}\\\\S+`, 'g');\n  const Default$2 = { ...Tooltip.Default,\n    placement: 'right',\n    offset: [0, 8],\n    trigger: 'click',\n    content: '',\n    template: '<div class=\"popover\" role=\"tooltip\">' + '<div class=\"popover-arrow\"></div>' + '<h3 class=\"popover-header\"></h3>' + '<div class=\"popover-body\"></div>' + '</div>'\n  };\n  const DefaultType$2 = { ...Tooltip.DefaultType,\n    content: '(string|element|function)'\n  };\n  const Event$1 = {\n    HIDE: `hide${EVENT_KEY$3}`,\n    HIDDEN: `hidden${EVENT_KEY$3}`,\n    SHOW: `show${EVENT_KEY$3}`,\n    SHOWN: `shown${EVENT_KEY$3}`,\n    INSERTED: `inserted${EVENT_KEY$3}`,\n    CLICK: `click${EVENT_KEY$3}`,\n    FOCUSIN: `focusin${EVENT_KEY$3}`,\n    FOCUSOUT: `focusout${EVENT_KEY$3}`,\n    MOUSEENTER: `mouseenter${EVENT_KEY$3}`,\n    MOUSELEAVE: `mouseleave${EVENT_KEY$3}`\n  };\n  const CLASS_NAME_FADE$2 = 'fade';\n  const CLASS_NAME_SHOW$2 = 'show';\n  const SELECTOR_TITLE = '.popover-header';\n  const SELECTOR_CONTENT = '.popover-body';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Popover extends Tooltip {\n    // Getters\n    static get Default() {\n      return Default$2;\n    }\n\n    static get NAME() {\n      return NAME$3;\n    }\n\n    static get Event() {\n      return Event$1;\n    }\n\n    static get DefaultType() {\n      return DefaultType$2;\n    } // Overrides\n\n\n    isWithContent() {\n      return this.getTitle() || this._getContent();\n    }\n\n    getTipElement() {\n      if (this.tip) {\n        return this.tip;\n      }\n\n      this.tip = super.getTipElement();\n\n      if (!this.getTitle()) {\n        SelectorEngine.findOne(SELECTOR_TITLE, this.tip).remove();\n      }\n\n      if (!this._getContent()) {\n        SelectorEngine.findOne(SELECTOR_CONTENT, this.tip).remove();\n      }\n\n      return this.tip;\n    }\n\n    setContent() {\n      const tip = this.getTipElement(); // we use append for html objects to maintain js events\n\n      this.setElementContent(SelectorEngine.findOne(SELECTOR_TITLE, tip), this.getTitle());\n\n      let content = this._getContent();\n\n      if (typeof content === 'function') {\n        content = content.call(this._element);\n      }\n\n      this.setElementContent(SelectorEngine.findOne(SELECTOR_CONTENT, tip), content);\n      tip.classList.remove(CLASS_NAME_FADE$2, CLASS_NAME_SHOW$2);\n    } // Private\n\n\n    _addAttachmentClass(attachment) {\n      this.getTipElement().classList.add(`${CLASS_PREFIX}-${this.updateAttachment(attachment)}`);\n    }\n\n    _getContent() {\n      return this._element.getAttribute('data-bs-content') || this._config.content;\n    }\n\n    _cleanTipClass() {\n      const tip = this.getTipElement();\n      const tabClass = tip.getAttribute('class').match(BSCLS_PREFIX_REGEX);\n\n      if (tabClass !== null && tabClass.length > 0) {\n        tabClass.map(token => token.trim()).forEach(tClass => tip.classList.remove(tClass));\n      }\n    } // Static\n\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = Popover.getOrCreateInstance(this, config);\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(`No method named \"${config}\"`);\n          }\n\n          data[config]();\n        }\n      });\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Popover to jQuery only if jQuery is present\n   */\n\n\n  defineJQueryPlugin(Popover);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): scrollspy.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$2 = 'scrollspy';\n  const DATA_KEY$2 = 'bs.scrollspy';\n  const EVENT_KEY$2 = `.${DATA_KEY$2}`;\n  const DATA_API_KEY$1 = '.data-api';\n  const Default$1 = {\n    offset: 10,\n    method: 'auto',\n    target: ''\n  };\n  const DefaultType$1 = {\n    offset: 'number',\n    method: 'string',\n    target: '(string|element)'\n  };\n  const EVENT_ACTIVATE = `activate${EVENT_KEY$2}`;\n  const EVENT_SCROLL = `scroll${EVENT_KEY$2}`;\n  const EVENT_LOAD_DATA_API = `load${EVENT_KEY$2}${DATA_API_KEY$1}`;\n  const CLASS_NAME_DROPDOWN_ITEM = 'dropdown-item';\n  const CLASS_NAME_ACTIVE$1 = 'active';\n  const SELECTOR_DATA_SPY = '[data-bs-spy=\"scroll\"]';\n  const SELECTOR_NAV_LIST_GROUP$1 = '.nav, .list-group';\n  const SELECTOR_NAV_LINKS = '.nav-link';\n  const SELECTOR_NAV_ITEMS = '.nav-item';\n  const SELECTOR_LIST_ITEMS = '.list-group-item';\n  const SELECTOR_DROPDOWN$1 = '.dropdown';\n  const SELECTOR_DROPDOWN_TOGGLE$1 = '.dropdown-toggle';\n  const METHOD_OFFSET = 'offset';\n  const METHOD_POSITION = 'position';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class ScrollSpy extends BaseComponent {\n    constructor(element, config) {\n      super(element);\n      this._scrollElement = this._element.tagName === 'BODY' ? window : this._element;\n      this._config = this._getConfig(config);\n      this._selector = `${this._config.target} ${SELECTOR_NAV_LINKS}, ${this._config.target} ${SELECTOR_LIST_ITEMS}, ${this._config.target} .${CLASS_NAME_DROPDOWN_ITEM}`;\n      this._offsets = [];\n      this._targets = [];\n      this._activeTarget = null;\n      this._scrollHeight = 0;\n      EventHandler.on(this._scrollElement, EVENT_SCROLL, () => this._process());\n      this.refresh();\n\n      this._process();\n    } // Getters\n\n\n    static get Default() {\n      return Default$1;\n    }\n\n    static get NAME() {\n      return NAME$2;\n    } // Public\n\n\n    refresh() {\n      const autoMethod = this._scrollElement === this._scrollElement.window ? METHOD_OFFSET : METHOD_POSITION;\n      const offsetMethod = this._config.method === 'auto' ? autoMethod : this._config.method;\n      const offsetBase = offsetMethod === METHOD_POSITION ? this._getScrollTop() : 0;\n      this._offsets = [];\n      this._targets = [];\n      this._scrollHeight = this._getScrollHeight();\n      const targets = SelectorEngine.find(this._selector);\n      targets.map(element => {\n        const targetSelector = getSelectorFromElement(element);\n        const target = targetSelector ? SelectorEngine.findOne(targetSelector) : null;\n\n        if (target) {\n          const targetBCR = target.getBoundingClientRect();\n\n          if (targetBCR.width || targetBCR.height) {\n            return [Manipulator[offsetMethod](target).top + offsetBase, targetSelector];\n          }\n        }\n\n        return null;\n      }).filter(item => item).sort((a, b) => a[0] - b[0]).forEach(item => {\n        this._offsets.push(item[0]);\n\n        this._targets.push(item[1]);\n      });\n    }\n\n    dispose() {\n      EventHandler.off(this._scrollElement, EVENT_KEY$2);\n      super.dispose();\n    } // Private\n\n\n    _getConfig(config) {\n      config = { ...Default$1,\n        ...Manipulator.getDataAttributes(this._element),\n        ...(typeof config === 'object' && config ? config : {})\n      };\n\n      if (typeof config.target !== 'string' && isElement$1(config.target)) {\n        let {\n          id\n        } = config.target;\n\n        if (!id) {\n          id = getUID(NAME$2);\n          config.target.id = id;\n        }\n\n        config.target = `#${id}`;\n      }\n\n      typeCheckConfig(NAME$2, config, DefaultType$1);\n      return config;\n    }\n\n    _getScrollTop() {\n      return this._scrollElement === window ? this._scrollElement.pageYOffset : this._scrollElement.scrollTop;\n    }\n\n    _getScrollHeight() {\n      return this._scrollElement.scrollHeight || Math.max(document.body.scrollHeight, document.documentElement.scrollHeight);\n    }\n\n    _getOffsetHeight() {\n      return this._scrollElement === window ? window.innerHeight : this._scrollElement.getBoundingClientRect().height;\n    }\n\n    _process() {\n      const scrollTop = this._getScrollTop() + this._config.offset;\n\n      const scrollHeight = this._getScrollHeight();\n\n      const maxScroll = this._config.offset + scrollHeight - this._getOffsetHeight();\n\n      if (this._scrollHeight !== scrollHeight) {\n        this.refresh();\n      }\n\n      if (scrollTop >= maxScroll) {\n        const target = this._targets[this._targets.length - 1];\n\n        if (this._activeTarget !== target) {\n          this._activate(target);\n        }\n\n        return;\n      }\n\n      if (this._activeTarget && scrollTop < this._offsets[0] && this._offsets[0] > 0) {\n        this._activeTarget = null;\n\n        this._clear();\n\n        return;\n      }\n\n      for (let i = this._offsets.length; i--;) {\n        const isActiveTarget = this._activeTarget !== this._targets[i] && scrollTop >= this._offsets[i] && (typeof this._offsets[i + 1] === 'undefined' || scrollTop < this._offsets[i + 1]);\n\n        if (isActiveTarget) {\n          this._activate(this._targets[i]);\n        }\n      }\n    }\n\n    _activate(target) {\n      this._activeTarget = target;\n\n      this._clear();\n\n      const queries = this._selector.split(',').map(selector => `${selector}[data-bs-target=\"${target}\"],${selector}[href=\"${target}\"]`);\n\n      const link = SelectorEngine.findOne(queries.join(','));\n\n      if (link.classList.contains(CLASS_NAME_DROPDOWN_ITEM)) {\n        SelectorEngine.findOne(SELECTOR_DROPDOWN_TOGGLE$1, link.closest(SELECTOR_DROPDOWN$1)).classList.add(CLASS_NAME_ACTIVE$1);\n        link.classList.add(CLASS_NAME_ACTIVE$1);\n      } else {\n        // Set triggered link as active\n        link.classList.add(CLASS_NAME_ACTIVE$1);\n        SelectorEngine.parents(link, SELECTOR_NAV_LIST_GROUP$1).forEach(listGroup => {\n          // Set triggered links parents as active\n          // With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor\n          SelectorEngine.prev(listGroup, `${SELECTOR_NAV_LINKS}, ${SELECTOR_LIST_ITEMS}`).forEach(item => item.classList.add(CLASS_NAME_ACTIVE$1)); // Handle special case when .nav-link is inside .nav-item\n\n          SelectorEngine.prev(listGroup, SELECTOR_NAV_ITEMS).forEach(navItem => {\n            SelectorEngine.children(navItem, SELECTOR_NAV_LINKS).forEach(item => item.classList.add(CLASS_NAME_ACTIVE$1));\n          });\n        });\n      }\n\n      EventHandler.trigger(this._scrollElement, EVENT_ACTIVATE, {\n        relatedTarget: target\n      });\n    }\n\n    _clear() {\n      SelectorEngine.find(this._selector).filter(node => node.classList.contains(CLASS_NAME_ACTIVE$1)).forEach(node => node.classList.remove(CLASS_NAME_ACTIVE$1));\n    } // Static\n\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = ScrollSpy.getOrCreateInstance(this, config);\n\n        if (typeof config !== 'string') {\n          return;\n        }\n\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config]();\n      });\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n    SelectorEngine.find(SELECTOR_DATA_SPY).forEach(spy => new ScrollSpy(spy));\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .ScrollSpy to jQuery only if jQuery is present\n   */\n\n  defineJQueryPlugin(ScrollSpy);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): tab.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$1 = 'tab';\n  const DATA_KEY$1 = 'bs.tab';\n  const EVENT_KEY$1 = `.${DATA_KEY$1}`;\n  const DATA_API_KEY = '.data-api';\n  const EVENT_HIDE$1 = `hide${EVENT_KEY$1}`;\n  const EVENT_HIDDEN$1 = `hidden${EVENT_KEY$1}`;\n  const EVENT_SHOW$1 = `show${EVENT_KEY$1}`;\n  const EVENT_SHOWN$1 = `shown${EVENT_KEY$1}`;\n  const EVENT_CLICK_DATA_API = `click${EVENT_KEY$1}${DATA_API_KEY}`;\n  const CLASS_NAME_DROPDOWN_MENU = 'dropdown-menu';\n  const CLASS_NAME_ACTIVE = 'active';\n  const CLASS_NAME_FADE$1 = 'fade';\n  const CLASS_NAME_SHOW$1 = 'show';\n  const SELECTOR_DROPDOWN = '.dropdown';\n  const SELECTOR_NAV_LIST_GROUP = '.nav, .list-group';\n  const SELECTOR_ACTIVE = '.active';\n  const SELECTOR_ACTIVE_UL = ':scope > li > .active';\n  const SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"tab\"], [data-bs-toggle=\"pill\"], [data-bs-toggle=\"list\"]';\n  const SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle';\n  const SELECTOR_DROPDOWN_ACTIVE_CHILD = ':scope > .dropdown-menu .active';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Tab extends BaseComponent {\n    // Getters\n    static get NAME() {\n      return NAME$1;\n    } // Public\n\n\n    show() {\n      if (this._element.parentNode && this._element.parentNode.nodeType === Node.ELEMENT_NODE && this._element.classList.contains(CLASS_NAME_ACTIVE)) {\n        return;\n      }\n\n      let previous;\n      const target = getElementFromSelector(this._element);\n\n      const listElement = this._element.closest(SELECTOR_NAV_LIST_GROUP);\n\n      if (listElement) {\n        const itemSelector = listElement.nodeName === 'UL' || listElement.nodeName === 'OL' ? SELECTOR_ACTIVE_UL : SELECTOR_ACTIVE;\n        previous = SelectorEngine.find(itemSelector, listElement);\n        previous = previous[previous.length - 1];\n      }\n\n      const hideEvent = previous ? EventHandler.trigger(previous, EVENT_HIDE$1, {\n        relatedTarget: this._element\n      }) : null;\n      const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$1, {\n        relatedTarget: previous\n      });\n\n      if (showEvent.defaultPrevented || hideEvent !== null && hideEvent.defaultPrevented) {\n        return;\n      }\n\n      this._activate(this._element, listElement);\n\n      const complete = () => {\n        EventHandler.trigger(previous, EVENT_HIDDEN$1, {\n          relatedTarget: this._element\n        });\n        EventHandler.trigger(this._element, EVENT_SHOWN$1, {\n          relatedTarget: previous\n        });\n      };\n\n      if (target) {\n        this._activate(target, target.parentNode, complete);\n      } else {\n        complete();\n      }\n    } // Private\n\n\n    _activate(element, container, callback) {\n      const activeElements = container && (container.nodeName === 'UL' || container.nodeName === 'OL') ? SelectorEngine.find(SELECTOR_ACTIVE_UL, container) : SelectorEngine.children(container, SELECTOR_ACTIVE);\n      const active = activeElements[0];\n      const isTransitioning = callback && active && active.classList.contains(CLASS_NAME_FADE$1);\n\n      const complete = () => this._transitionComplete(element, active, callback);\n\n      if (active && isTransitioning) {\n        active.classList.remove(CLASS_NAME_SHOW$1);\n\n        this._queueCallback(complete, element, true);\n      } else {\n        complete();\n      }\n    }\n\n    _transitionComplete(element, active, callback) {\n      if (active) {\n        active.classList.remove(CLASS_NAME_ACTIVE);\n        const dropdownChild = SelectorEngine.findOne(SELECTOR_DROPDOWN_ACTIVE_CHILD, active.parentNode);\n\n        if (dropdownChild) {\n          dropdownChild.classList.remove(CLASS_NAME_ACTIVE);\n        }\n\n        if (active.getAttribute('role') === 'tab') {\n          active.setAttribute('aria-selected', false);\n        }\n      }\n\n      element.classList.add(CLASS_NAME_ACTIVE);\n\n      if (element.getAttribute('role') === 'tab') {\n        element.setAttribute('aria-selected', true);\n      }\n\n      reflow(element);\n\n      if (element.classList.contains(CLASS_NAME_FADE$1)) {\n        element.classList.add(CLASS_NAME_SHOW$1);\n      }\n\n      let parent = element.parentNode;\n\n      if (parent && parent.nodeName === 'LI') {\n        parent = parent.parentNode;\n      }\n\n      if (parent && parent.classList.contains(CLASS_NAME_DROPDOWN_MENU)) {\n        const dropdownElement = element.closest(SELECTOR_DROPDOWN);\n\n        if (dropdownElement) {\n          SelectorEngine.find(SELECTOR_DROPDOWN_TOGGLE, dropdownElement).forEach(dropdown => dropdown.classList.add(CLASS_NAME_ACTIVE));\n        }\n\n        element.setAttribute('aria-expanded', true);\n      }\n\n      if (callback) {\n        callback();\n      }\n    } // Static\n\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = Tab.getOrCreateInstance(this);\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(`No method named \"${config}\"`);\n          }\n\n          data[config]();\n        }\n      });\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n    if (['A', 'AREA'].includes(this.tagName)) {\n      event.preventDefault();\n    }\n\n    if (isDisabled(this)) {\n      return;\n    }\n\n    const data = Tab.getOrCreateInstance(this);\n    data.show();\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Tab to jQuery only if jQuery is present\n   */\n\n  defineJQueryPlugin(Tab);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): toast.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME = 'toast';\n  const DATA_KEY = 'bs.toast';\n  const EVENT_KEY = `.${DATA_KEY}`;\n  const EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY}`;\n  const EVENT_MOUSEOVER = `mouseover${EVENT_KEY}`;\n  const EVENT_MOUSEOUT = `mouseout${EVENT_KEY}`;\n  const EVENT_FOCUSIN = `focusin${EVENT_KEY}`;\n  const EVENT_FOCUSOUT = `focusout${EVENT_KEY}`;\n  const EVENT_HIDE = `hide${EVENT_KEY}`;\n  const EVENT_HIDDEN = `hidden${EVENT_KEY}`;\n  const EVENT_SHOW = `show${EVENT_KEY}`;\n  const EVENT_SHOWN = `shown${EVENT_KEY}`;\n  const CLASS_NAME_FADE = 'fade';\n  const CLASS_NAME_HIDE = 'hide';\n  const CLASS_NAME_SHOW = 'show';\n  const CLASS_NAME_SHOWING = 'showing';\n  const DefaultType = {\n    animation: 'boolean',\n    autohide: 'boolean',\n    delay: 'number'\n  };\n  const Default = {\n    animation: true,\n    autohide: true,\n    delay: 5000\n  };\n  const SELECTOR_DATA_DISMISS = '[data-bs-dismiss=\"toast\"]';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Toast extends BaseComponent {\n    constructor(element, config) {\n      super(element);\n      this._config = this._getConfig(config);\n      this._timeout = null;\n      this._hasMouseInteraction = false;\n      this._hasKeyboardInteraction = false;\n\n      this._setListeners();\n    } // Getters\n\n\n    static get DefaultType() {\n      return DefaultType;\n    }\n\n    static get Default() {\n      return Default;\n    }\n\n    static get NAME() {\n      return NAME;\n    } // Public\n\n\n    show() {\n      const showEvent = EventHandler.trigger(this._element, EVENT_SHOW);\n\n      if (showEvent.defaultPrevented) {\n        return;\n      }\n\n      this._clearTimeout();\n\n      if (this._config.animation) {\n        this._element.classList.add(CLASS_NAME_FADE);\n      }\n\n      const complete = () => {\n        this._element.classList.remove(CLASS_NAME_SHOWING);\n\n        this._element.classList.add(CLASS_NAME_SHOW);\n\n        EventHandler.trigger(this._element, EVENT_SHOWN);\n\n        this._maybeScheduleHide();\n      };\n\n      this._element.classList.remove(CLASS_NAME_HIDE);\n\n      reflow(this._element);\n\n      this._element.classList.add(CLASS_NAME_SHOWING);\n\n      this._queueCallback(complete, this._element, this._config.animation);\n    }\n\n    hide() {\n      if (!this._element.classList.contains(CLASS_NAME_SHOW)) {\n        return;\n      }\n\n      const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE);\n\n      if (hideEvent.defaultPrevented) {\n        return;\n      }\n\n      const complete = () => {\n        this._element.classList.add(CLASS_NAME_HIDE);\n\n        EventHandler.trigger(this._element, EVENT_HIDDEN);\n      };\n\n      this._element.classList.remove(CLASS_NAME_SHOW);\n\n      this._queueCallback(complete, this._element, this._config.animation);\n    }\n\n    dispose() {\n      this._clearTimeout();\n\n      if (this._element.classList.contains(CLASS_NAME_SHOW)) {\n        this._element.classList.remove(CLASS_NAME_SHOW);\n      }\n\n      super.dispose();\n    } // Private\n\n\n    _getConfig(config) {\n      config = { ...Default,\n        ...Manipulator.getDataAttributes(this._element),\n        ...(typeof config === 'object' && config ? config : {})\n      };\n      typeCheckConfig(NAME, config, this.constructor.DefaultType);\n      return config;\n    }\n\n    _maybeScheduleHide() {\n      if (!this._config.autohide) {\n        return;\n      }\n\n      if (this._hasMouseInteraction || this._hasKeyboardInteraction) {\n        return;\n      }\n\n      this._timeout = setTimeout(() => {\n        this.hide();\n      }, this._config.delay);\n    }\n\n    _onInteraction(event, isInteracting) {\n      switch (event.type) {\n        case 'mouseover':\n        case 'mouseout':\n          this._hasMouseInteraction = isInteracting;\n          break;\n\n        case 'focusin':\n        case 'focusout':\n          this._hasKeyboardInteraction = isInteracting;\n          break;\n      }\n\n      if (isInteracting) {\n        this._clearTimeout();\n\n        return;\n      }\n\n      const nextElement = event.relatedTarget;\n\n      if (this._element === nextElement || this._element.contains(nextElement)) {\n        return;\n      }\n\n      this._maybeScheduleHide();\n    }\n\n    _setListeners() {\n      EventHandler.on(this._element, EVENT_CLICK_DISMISS, SELECTOR_DATA_DISMISS, () => this.hide());\n      EventHandler.on(this._element, EVENT_MOUSEOVER, event => this._onInteraction(event, true));\n      EventHandler.on(this._element, EVENT_MOUSEOUT, event => this._onInteraction(event, false));\n      EventHandler.on(this._element, EVENT_FOCUSIN, event => this._onInteraction(event, true));\n      EventHandler.on(this._element, EVENT_FOCUSOUT, event => this._onInteraction(event, false));\n    }\n\n    _clearTimeout() {\n      clearTimeout(this._timeout);\n      this._timeout = null;\n    } // Static\n\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = Toast.getOrCreateInstance(this, config);\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(`No method named \"${config}\"`);\n          }\n\n          data[config](this);\n        }\n      });\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Toast to jQuery only if jQuery is present\n   */\n\n\n  defineJQueryPlugin(Toast);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): index.umd.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  var index_umd = {\n    Alert,\n    Button,\n    Carousel,\n    Collapse,\n    Dropdown,\n    Modal,\n    Offcanvas,\n    Popover,\n    ScrollSpy,\n    Tab,\n    Toast,\n    Tooltip\n  };\n\n  return index_umd;\n\n})));\n//# sourceMappingURL=bootstrap.bundle.js.map\n"
  },
  {
    "path": "src/sourceDev.WebApp/SharedThemes/flatly/wwwroot/js/bootstrap.esm.js",
    "content": "/*!\n  * Bootstrap v5.0.2 (https://getbootstrap.com/)\n  * Copyright 2011-2021 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)\n  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n  */\nimport * as Popper from '@popperjs/core';\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): dom/selector-engine.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\nconst NODE_TEXT = 3;\nconst SelectorEngine = {\n  find(selector, element = document.documentElement) {\n    return [].concat(...Element.prototype.querySelectorAll.call(element, selector));\n  },\n\n  findOne(selector, element = document.documentElement) {\n    return Element.prototype.querySelector.call(element, selector);\n  },\n\n  children(element, selector) {\n    return [].concat(...element.children).filter(child => child.matches(selector));\n  },\n\n  parents(element, selector) {\n    const parents = [];\n    let ancestor = element.parentNode;\n\n    while (ancestor && ancestor.nodeType === Node.ELEMENT_NODE && ancestor.nodeType !== NODE_TEXT) {\n      if (ancestor.matches(selector)) {\n        parents.push(ancestor);\n      }\n\n      ancestor = ancestor.parentNode;\n    }\n\n    return parents;\n  },\n\n  prev(element, selector) {\n    let previous = element.previousElementSibling;\n\n    while (previous) {\n      if (previous.matches(selector)) {\n        return [previous];\n      }\n\n      previous = previous.previousElementSibling;\n    }\n\n    return [];\n  },\n\n  next(element, selector) {\n    let next = element.nextElementSibling;\n\n    while (next) {\n      if (next.matches(selector)) {\n        return [next];\n      }\n\n      next = next.nextElementSibling;\n    }\n\n    return [];\n  }\n\n};\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): util/index.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst MAX_UID = 1000000;\nconst MILLISECONDS_MULTIPLIER = 1000;\nconst TRANSITION_END = 'transitionend'; // Shoutout AngusCroll (https://goo.gl/pxwQGp)\n\nconst toType = obj => {\n  if (obj === null || obj === undefined) {\n    return `${obj}`;\n  }\n\n  return {}.toString.call(obj).match(/\\s([a-z]+)/i)[1].toLowerCase();\n};\n/**\n * --------------------------------------------------------------------------\n * Public Util Api\n * --------------------------------------------------------------------------\n */\n\n\nconst getUID = prefix => {\n  do {\n    prefix += Math.floor(Math.random() * MAX_UID);\n  } while (document.getElementById(prefix));\n\n  return prefix;\n};\n\nconst getSelector = element => {\n  let selector = element.getAttribute('data-bs-target');\n\n  if (!selector || selector === '#') {\n    let hrefAttr = element.getAttribute('href'); // The only valid content that could double as a selector are IDs or classes,\n    // so everything starting with `#` or `.`. If a \"real\" URL is used as the selector,\n    // `document.querySelector` will rightfully complain it is invalid.\n    // See https://github.com/twbs/bootstrap/issues/32273\n\n    if (!hrefAttr || !hrefAttr.includes('#') && !hrefAttr.startsWith('.')) {\n      return null;\n    } // Just in case some CMS puts out a full URL with the anchor appended\n\n\n    if (hrefAttr.includes('#') && !hrefAttr.startsWith('#')) {\n      hrefAttr = `#${hrefAttr.split('#')[1]}`;\n    }\n\n    selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : null;\n  }\n\n  return selector;\n};\n\nconst getSelectorFromElement = element => {\n  const selector = getSelector(element);\n\n  if (selector) {\n    return document.querySelector(selector) ? selector : null;\n  }\n\n  return null;\n};\n\nconst getElementFromSelector = element => {\n  const selector = getSelector(element);\n  return selector ? document.querySelector(selector) : null;\n};\n\nconst getTransitionDurationFromElement = element => {\n  if (!element) {\n    return 0;\n  } // Get transition-duration of the element\n\n\n  let {\n    transitionDuration,\n    transitionDelay\n  } = window.getComputedStyle(element);\n  const floatTransitionDuration = Number.parseFloat(transitionDuration);\n  const floatTransitionDelay = Number.parseFloat(transitionDelay); // Return 0 if element or transition duration is not found\n\n  if (!floatTransitionDuration && !floatTransitionDelay) {\n    return 0;\n  } // If multiple durations are defined, take the first\n\n\n  transitionDuration = transitionDuration.split(',')[0];\n  transitionDelay = transitionDelay.split(',')[0];\n  return (Number.parseFloat(transitionDuration) + Number.parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER;\n};\n\nconst triggerTransitionEnd = element => {\n  element.dispatchEvent(new Event(TRANSITION_END));\n};\n\nconst isElement = obj => {\n  if (!obj || typeof obj !== 'object') {\n    return false;\n  }\n\n  if (typeof obj.jquery !== 'undefined') {\n    obj = obj[0];\n  }\n\n  return typeof obj.nodeType !== 'undefined';\n};\n\nconst getElement = obj => {\n  if (isElement(obj)) {\n    // it's a jQuery object or a node element\n    return obj.jquery ? obj[0] : obj;\n  }\n\n  if (typeof obj === 'string' && obj.length > 0) {\n    return SelectorEngine.findOne(obj);\n  }\n\n  return null;\n};\n\nconst typeCheckConfig = (componentName, config, configTypes) => {\n  Object.keys(configTypes).forEach(property => {\n    const expectedTypes = configTypes[property];\n    const value = config[property];\n    const valueType = value && isElement(value) ? 'element' : toType(value);\n\n    if (!new RegExp(expectedTypes).test(valueType)) {\n      throw new TypeError(`${componentName.toUpperCase()}: Option \"${property}\" provided type \"${valueType}\" but expected type \"${expectedTypes}\".`);\n    }\n  });\n};\n\nconst isVisible = element => {\n  if (!isElement(element) || element.getClientRects().length === 0) {\n    return false;\n  }\n\n  return getComputedStyle(element).getPropertyValue('visibility') === 'visible';\n};\n\nconst isDisabled = element => {\n  if (!element || element.nodeType !== Node.ELEMENT_NODE) {\n    return true;\n  }\n\n  if (element.classList.contains('disabled')) {\n    return true;\n  }\n\n  if (typeof element.disabled !== 'undefined') {\n    return element.disabled;\n  }\n\n  return element.hasAttribute('disabled') && element.getAttribute('disabled') !== 'false';\n};\n\nconst findShadowRoot = element => {\n  if (!document.documentElement.attachShadow) {\n    return null;\n  } // Can find the shadow root otherwise it'll return the document\n\n\n  if (typeof element.getRootNode === 'function') {\n    const root = element.getRootNode();\n    return root instanceof ShadowRoot ? root : null;\n  }\n\n  if (element instanceof ShadowRoot) {\n    return element;\n  } // when we don't find a shadow root\n\n\n  if (!element.parentNode) {\n    return null;\n  }\n\n  return findShadowRoot(element.parentNode);\n};\n\nconst noop = () => {};\n\nconst reflow = element => element.offsetHeight;\n\nconst getjQuery = () => {\n  const {\n    jQuery\n  } = window;\n\n  if (jQuery && !document.body.hasAttribute('data-bs-no-jquery')) {\n    return jQuery;\n  }\n\n  return null;\n};\n\nconst DOMContentLoadedCallbacks = [];\n\nconst onDOMContentLoaded = callback => {\n  if (document.readyState === 'loading') {\n    // add listener on the first call when the document is in loading state\n    if (!DOMContentLoadedCallbacks.length) {\n      document.addEventListener('DOMContentLoaded', () => {\n        DOMContentLoadedCallbacks.forEach(callback => callback());\n      });\n    }\n\n    DOMContentLoadedCallbacks.push(callback);\n  } else {\n    callback();\n  }\n};\n\nconst isRTL = () => document.documentElement.dir === 'rtl';\n\nconst defineJQueryPlugin = plugin => {\n  onDOMContentLoaded(() => {\n    const $ = getjQuery();\n    /* istanbul ignore if */\n\n    if ($) {\n      const name = plugin.NAME;\n      const JQUERY_NO_CONFLICT = $.fn[name];\n      $.fn[name] = plugin.jQueryInterface;\n      $.fn[name].Constructor = plugin;\n\n      $.fn[name].noConflict = () => {\n        $.fn[name] = JQUERY_NO_CONFLICT;\n        return plugin.jQueryInterface;\n      };\n    }\n  });\n};\n\nconst execute = callback => {\n  if (typeof callback === 'function') {\n    callback();\n  }\n};\n\nconst executeAfterTransition = (callback, transitionElement, waitForTransition = true) => {\n  if (!waitForTransition) {\n    execute(callback);\n    return;\n  }\n\n  const durationPadding = 5;\n  const emulatedDuration = getTransitionDurationFromElement(transitionElement) + durationPadding;\n  let called = false;\n\n  const handler = ({\n    target\n  }) => {\n    if (target !== transitionElement) {\n      return;\n    }\n\n    called = true;\n    transitionElement.removeEventListener(TRANSITION_END, handler);\n    execute(callback);\n  };\n\n  transitionElement.addEventListener(TRANSITION_END, handler);\n  setTimeout(() => {\n    if (!called) {\n      triggerTransitionEnd(transitionElement);\n    }\n  }, emulatedDuration);\n};\n/**\n * Return the previous/next element of a list.\n *\n * @param {array} list    The list of elements\n * @param activeElement   The active element\n * @param shouldGetNext   Choose to get next or previous element\n * @param isCycleAllowed\n * @return {Element|elem} The proper element\n */\n\n\nconst getNextActiveElement = (list, activeElement, shouldGetNext, isCycleAllowed) => {\n  let index = list.indexOf(activeElement); // if the element does not exist in the list return an element depending on the direction and if cycle is allowed\n\n  if (index === -1) {\n    return list[!shouldGetNext && isCycleAllowed ? list.length - 1 : 0];\n  }\n\n  const listLength = list.length;\n  index += shouldGetNext ? 1 : -1;\n\n  if (isCycleAllowed) {\n    index = (index + listLength) % listLength;\n  }\n\n  return list[Math.max(0, Math.min(index, listLength - 1))];\n};\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): dom/event-handler.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst namespaceRegex = /[^.]*(?=\\..*)\\.|.*/;\nconst stripNameRegex = /\\..*/;\nconst stripUidRegex = /::\\d+$/;\nconst eventRegistry = {}; // Events storage\n\nlet uidEvent = 1;\nconst customEvents = {\n  mouseenter: 'mouseover',\n  mouseleave: 'mouseout'\n};\nconst customEventsRegex = /^(mouseenter|mouseleave)/i;\nconst nativeEvents = new Set(['click', 'dblclick', 'mouseup', 'mousedown', 'contextmenu', 'mousewheel', 'DOMMouseScroll', 'mouseover', 'mouseout', 'mousemove', 'selectstart', 'selectend', 'keydown', 'keypress', 'keyup', 'orientationchange', 'touchstart', 'touchmove', 'touchend', 'touchcancel', 'pointerdown', 'pointermove', 'pointerup', 'pointerleave', 'pointercancel', 'gesturestart', 'gesturechange', 'gestureend', 'focus', 'blur', 'change', 'reset', 'select', 'submit', 'focusin', 'focusout', 'load', 'unload', 'beforeunload', 'resize', 'move', 'DOMContentLoaded', 'readystatechange', 'error', 'abort', 'scroll']);\n/**\n * ------------------------------------------------------------------------\n * Private methods\n * ------------------------------------------------------------------------\n */\n\nfunction getUidEvent(element, uid) {\n  return uid && `${uid}::${uidEvent++}` || element.uidEvent || uidEvent++;\n}\n\nfunction getEvent(element) {\n  const uid = getUidEvent(element);\n  element.uidEvent = uid;\n  eventRegistry[uid] = eventRegistry[uid] || {};\n  return eventRegistry[uid];\n}\n\nfunction bootstrapHandler(element, fn) {\n  return function handler(event) {\n    event.delegateTarget = element;\n\n    if (handler.oneOff) {\n      EventHandler.off(element, event.type, fn);\n    }\n\n    return fn.apply(element, [event]);\n  };\n}\n\nfunction bootstrapDelegationHandler(element, selector, fn) {\n  return function handler(event) {\n    const domElements = element.querySelectorAll(selector);\n\n    for (let {\n      target\n    } = event; target && target !== this; target = target.parentNode) {\n      for (let i = domElements.length; i--;) {\n        if (domElements[i] === target) {\n          event.delegateTarget = target;\n\n          if (handler.oneOff) {\n            // eslint-disable-next-line unicorn/consistent-destructuring\n            EventHandler.off(element, event.type, selector, fn);\n          }\n\n          return fn.apply(target, [event]);\n        }\n      }\n    } // To please ESLint\n\n\n    return null;\n  };\n}\n\nfunction findHandler(events, handler, delegationSelector = null) {\n  const uidEventList = Object.keys(events);\n\n  for (let i = 0, len = uidEventList.length; i < len; i++) {\n    const event = events[uidEventList[i]];\n\n    if (event.originalHandler === handler && event.delegationSelector === delegationSelector) {\n      return event;\n    }\n  }\n\n  return null;\n}\n\nfunction normalizeParams(originalTypeEvent, handler, delegationFn) {\n  const delegation = typeof handler === 'string';\n  const originalHandler = delegation ? delegationFn : handler;\n  let typeEvent = getTypeEvent(originalTypeEvent);\n  const isNative = nativeEvents.has(typeEvent);\n\n  if (!isNative) {\n    typeEvent = originalTypeEvent;\n  }\n\n  return [delegation, originalHandler, typeEvent];\n}\n\nfunction addHandler(element, originalTypeEvent, handler, delegationFn, oneOff) {\n  if (typeof originalTypeEvent !== 'string' || !element) {\n    return;\n  }\n\n  if (!handler) {\n    handler = delegationFn;\n    delegationFn = null;\n  } // in case of mouseenter or mouseleave wrap the handler within a function that checks for its DOM position\n  // this prevents the handler from being dispatched the same way as mouseover or mouseout does\n\n\n  if (customEventsRegex.test(originalTypeEvent)) {\n    const wrapFn = fn => {\n      return function (event) {\n        if (!event.relatedTarget || event.relatedTarget !== event.delegateTarget && !event.delegateTarget.contains(event.relatedTarget)) {\n          return fn.call(this, event);\n        }\n      };\n    };\n\n    if (delegationFn) {\n      delegationFn = wrapFn(delegationFn);\n    } else {\n      handler = wrapFn(handler);\n    }\n  }\n\n  const [delegation, originalHandler, typeEvent] = normalizeParams(originalTypeEvent, handler, delegationFn);\n  const events = getEvent(element);\n  const handlers = events[typeEvent] || (events[typeEvent] = {});\n  const previousFn = findHandler(handlers, originalHandler, delegation ? handler : null);\n\n  if (previousFn) {\n    previousFn.oneOff = previousFn.oneOff && oneOff;\n    return;\n  }\n\n  const uid = getUidEvent(originalHandler, originalTypeEvent.replace(namespaceRegex, ''));\n  const fn = delegation ? bootstrapDelegationHandler(element, handler, delegationFn) : bootstrapHandler(element, handler);\n  fn.delegationSelector = delegation ? handler : null;\n  fn.originalHandler = originalHandler;\n  fn.oneOff = oneOff;\n  fn.uidEvent = uid;\n  handlers[uid] = fn;\n  element.addEventListener(typeEvent, fn, delegation);\n}\n\nfunction removeHandler(element, events, typeEvent, handler, delegationSelector) {\n  const fn = findHandler(events[typeEvent], handler, delegationSelector);\n\n  if (!fn) {\n    return;\n  }\n\n  element.removeEventListener(typeEvent, fn, Boolean(delegationSelector));\n  delete events[typeEvent][fn.uidEvent];\n}\n\nfunction removeNamespacedHandlers(element, events, typeEvent, namespace) {\n  const storeElementEvent = events[typeEvent] || {};\n  Object.keys(storeElementEvent).forEach(handlerKey => {\n    if (handlerKey.includes(namespace)) {\n      const event = storeElementEvent[handlerKey];\n      removeHandler(element, events, typeEvent, event.originalHandler, event.delegationSelector);\n    }\n  });\n}\n\nfunction getTypeEvent(event) {\n  // allow to get the native events from namespaced events ('click.bs.button' --> 'click')\n  event = event.replace(stripNameRegex, '');\n  return customEvents[event] || event;\n}\n\nconst EventHandler = {\n  on(element, event, handler, delegationFn) {\n    addHandler(element, event, handler, delegationFn, false);\n  },\n\n  one(element, event, handler, delegationFn) {\n    addHandler(element, event, handler, delegationFn, true);\n  },\n\n  off(element, originalTypeEvent, handler, delegationFn) {\n    if (typeof originalTypeEvent !== 'string' || !element) {\n      return;\n    }\n\n    const [delegation, originalHandler, typeEvent] = normalizeParams(originalTypeEvent, handler, delegationFn);\n    const inNamespace = typeEvent !== originalTypeEvent;\n    const events = getEvent(element);\n    const isNamespace = originalTypeEvent.startsWith('.');\n\n    if (typeof originalHandler !== 'undefined') {\n      // Simplest case: handler is passed, remove that listener ONLY.\n      if (!events || !events[typeEvent]) {\n        return;\n      }\n\n      removeHandler(element, events, typeEvent, originalHandler, delegation ? handler : null);\n      return;\n    }\n\n    if (isNamespace) {\n      Object.keys(events).forEach(elementEvent => {\n        removeNamespacedHandlers(element, events, elementEvent, originalTypeEvent.slice(1));\n      });\n    }\n\n    const storeElementEvent = events[typeEvent] || {};\n    Object.keys(storeElementEvent).forEach(keyHandlers => {\n      const handlerKey = keyHandlers.replace(stripUidRegex, '');\n\n      if (!inNamespace || originalTypeEvent.includes(handlerKey)) {\n        const event = storeElementEvent[keyHandlers];\n        removeHandler(element, events, typeEvent, event.originalHandler, event.delegationSelector);\n      }\n    });\n  },\n\n  trigger(element, event, args) {\n    if (typeof event !== 'string' || !element) {\n      return null;\n    }\n\n    const $ = getjQuery();\n    const typeEvent = getTypeEvent(event);\n    const inNamespace = event !== typeEvent;\n    const isNative = nativeEvents.has(typeEvent);\n    let jQueryEvent;\n    let bubbles = true;\n    let nativeDispatch = true;\n    let defaultPrevented = false;\n    let evt = null;\n\n    if (inNamespace && $) {\n      jQueryEvent = $.Event(event, args);\n      $(element).trigger(jQueryEvent);\n      bubbles = !jQueryEvent.isPropagationStopped();\n      nativeDispatch = !jQueryEvent.isImmediatePropagationStopped();\n      defaultPrevented = jQueryEvent.isDefaultPrevented();\n    }\n\n    if (isNative) {\n      evt = document.createEvent('HTMLEvents');\n      evt.initEvent(typeEvent, bubbles, true);\n    } else {\n      evt = new CustomEvent(event, {\n        bubbles,\n        cancelable: true\n      });\n    } // merge custom information in our event\n\n\n    if (typeof args !== 'undefined') {\n      Object.keys(args).forEach(key => {\n        Object.defineProperty(evt, key, {\n          get() {\n            return args[key];\n          }\n\n        });\n      });\n    }\n\n    if (defaultPrevented) {\n      evt.preventDefault();\n    }\n\n    if (nativeDispatch) {\n      element.dispatchEvent(evt);\n    }\n\n    if (evt.defaultPrevented && typeof jQueryEvent !== 'undefined') {\n      jQueryEvent.preventDefault();\n    }\n\n    return evt;\n  }\n\n};\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): dom/data.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\nconst elementMap = new Map();\nvar Data = {\n  set(element, key, instance) {\n    if (!elementMap.has(element)) {\n      elementMap.set(element, new Map());\n    }\n\n    const instanceMap = elementMap.get(element); // make it clear we only want one instance per element\n    // can be removed later when multiple key/instances are fine to be used\n\n    if (!instanceMap.has(key) && instanceMap.size !== 0) {\n      // eslint-disable-next-line no-console\n      console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(instanceMap.keys())[0]}.`);\n      return;\n    }\n\n    instanceMap.set(key, instance);\n  },\n\n  get(element, key) {\n    if (elementMap.has(element)) {\n      return elementMap.get(element).get(key) || null;\n    }\n\n    return null;\n  },\n\n  remove(element, key) {\n    if (!elementMap.has(element)) {\n      return;\n    }\n\n    const instanceMap = elementMap.get(element);\n    instanceMap.delete(key); // free up element references if there are no instances left for an element\n\n    if (instanceMap.size === 0) {\n      elementMap.delete(element);\n    }\n  }\n\n};\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): base-component.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst VERSION = '5.0.2';\n\nclass BaseComponent {\n  constructor(element) {\n    element = getElement(element);\n\n    if (!element) {\n      return;\n    }\n\n    this._element = element;\n    Data.set(this._element, this.constructor.DATA_KEY, this);\n  }\n\n  dispose() {\n    Data.remove(this._element, this.constructor.DATA_KEY);\n    EventHandler.off(this._element, this.constructor.EVENT_KEY);\n    Object.getOwnPropertyNames(this).forEach(propertyName => {\n      this[propertyName] = null;\n    });\n  }\n\n  _queueCallback(callback, element, isAnimated = true) {\n    executeAfterTransition(callback, element, isAnimated);\n  }\n  /** Static */\n\n\n  static getInstance(element) {\n    return Data.get(element, this.DATA_KEY);\n  }\n\n  static getOrCreateInstance(element, config = {}) {\n    return this.getInstance(element) || new this(element, typeof config === 'object' ? config : null);\n  }\n\n  static get VERSION() {\n    return VERSION;\n  }\n\n  static get NAME() {\n    throw new Error('You have to implement the static method \"NAME\", for each component!');\n  }\n\n  static get DATA_KEY() {\n    return `bs.${this.NAME}`;\n  }\n\n  static get EVENT_KEY() {\n    return `.${this.DATA_KEY}`;\n  }\n\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): alert.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$c = 'alert';\nconst DATA_KEY$b = 'bs.alert';\nconst EVENT_KEY$b = `.${DATA_KEY$b}`;\nconst DATA_API_KEY$8 = '.data-api';\nconst SELECTOR_DISMISS = '[data-bs-dismiss=\"alert\"]';\nconst EVENT_CLOSE = `close${EVENT_KEY$b}`;\nconst EVENT_CLOSED = `closed${EVENT_KEY$b}`;\nconst EVENT_CLICK_DATA_API$7 = `click${EVENT_KEY$b}${DATA_API_KEY$8}`;\nconst CLASS_NAME_ALERT = 'alert';\nconst CLASS_NAME_FADE$6 = 'fade';\nconst CLASS_NAME_SHOW$9 = 'show';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Alert extends BaseComponent {\n  // Getters\n  static get NAME() {\n    return NAME$c;\n  } // Public\n\n\n  close(element) {\n    const rootElement = element ? this._getRootElement(element) : this._element;\n\n    const customEvent = this._triggerCloseEvent(rootElement);\n\n    if (customEvent === null || customEvent.defaultPrevented) {\n      return;\n    }\n\n    this._removeElement(rootElement);\n  } // Private\n\n\n  _getRootElement(element) {\n    return getElementFromSelector(element) || element.closest(`.${CLASS_NAME_ALERT}`);\n  }\n\n  _triggerCloseEvent(element) {\n    return EventHandler.trigger(element, EVENT_CLOSE);\n  }\n\n  _removeElement(element) {\n    element.classList.remove(CLASS_NAME_SHOW$9);\n    const isAnimated = element.classList.contains(CLASS_NAME_FADE$6);\n\n    this._queueCallback(() => this._destroyElement(element), element, isAnimated);\n  }\n\n  _destroyElement(element) {\n    element.remove();\n    EventHandler.trigger(element, EVENT_CLOSED);\n  } // Static\n\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Alert.getOrCreateInstance(this);\n\n      if (config === 'close') {\n        data[config](this);\n      }\n    });\n  }\n\n  static handleDismiss(alertInstance) {\n    return function (event) {\n      if (event) {\n        event.preventDefault();\n      }\n\n      alertInstance.close(this);\n    };\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$7, SELECTOR_DISMISS, Alert.handleDismiss(new Alert()));\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Alert to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Alert);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): button.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$b = 'button';\nconst DATA_KEY$a = 'bs.button';\nconst EVENT_KEY$a = `.${DATA_KEY$a}`;\nconst DATA_API_KEY$7 = '.data-api';\nconst CLASS_NAME_ACTIVE$3 = 'active';\nconst SELECTOR_DATA_TOGGLE$5 = '[data-bs-toggle=\"button\"]';\nconst EVENT_CLICK_DATA_API$6 = `click${EVENT_KEY$a}${DATA_API_KEY$7}`;\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Button extends BaseComponent {\n  // Getters\n  static get NAME() {\n    return NAME$b;\n  } // Public\n\n\n  toggle() {\n    // Toggle class and sync the `aria-pressed` attribute with the return value of the `.toggle()` method\n    this._element.setAttribute('aria-pressed', this._element.classList.toggle(CLASS_NAME_ACTIVE$3));\n  } // Static\n\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Button.getOrCreateInstance(this);\n\n      if (config === 'toggle') {\n        data[config]();\n      }\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$6, SELECTOR_DATA_TOGGLE$5, event => {\n  event.preventDefault();\n  const button = event.target.closest(SELECTOR_DATA_TOGGLE$5);\n  const data = Button.getOrCreateInstance(button);\n  data.toggle();\n});\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Button to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Button);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): dom/manipulator.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\nfunction normalizeData(val) {\n  if (val === 'true') {\n    return true;\n  }\n\n  if (val === 'false') {\n    return false;\n  }\n\n  if (val === Number(val).toString()) {\n    return Number(val);\n  }\n\n  if (val === '' || val === 'null') {\n    return null;\n  }\n\n  return val;\n}\n\nfunction normalizeDataKey(key) {\n  return key.replace(/[A-Z]/g, chr => `-${chr.toLowerCase()}`);\n}\n\nconst Manipulator = {\n  setDataAttribute(element, key, value) {\n    element.setAttribute(`data-bs-${normalizeDataKey(key)}`, value);\n  },\n\n  removeDataAttribute(element, key) {\n    element.removeAttribute(`data-bs-${normalizeDataKey(key)}`);\n  },\n\n  getDataAttributes(element) {\n    if (!element) {\n      return {};\n    }\n\n    const attributes = {};\n    Object.keys(element.dataset).filter(key => key.startsWith('bs')).forEach(key => {\n      let pureKey = key.replace(/^bs/, '');\n      pureKey = pureKey.charAt(0).toLowerCase() + pureKey.slice(1, pureKey.length);\n      attributes[pureKey] = normalizeData(element.dataset[key]);\n    });\n    return attributes;\n  },\n\n  getDataAttribute(element, key) {\n    return normalizeData(element.getAttribute(`data-bs-${normalizeDataKey(key)}`));\n  },\n\n  offset(element) {\n    const rect = element.getBoundingClientRect();\n    return {\n      top: rect.top + document.body.scrollTop,\n      left: rect.left + document.body.scrollLeft\n    };\n  },\n\n  position(element) {\n    return {\n      top: element.offsetTop,\n      left: element.offsetLeft\n    };\n  }\n\n};\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): carousel.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$a = 'carousel';\nconst DATA_KEY$9 = 'bs.carousel';\nconst EVENT_KEY$9 = `.${DATA_KEY$9}`;\nconst DATA_API_KEY$6 = '.data-api';\nconst ARROW_LEFT_KEY = 'ArrowLeft';\nconst ARROW_RIGHT_KEY = 'ArrowRight';\nconst TOUCHEVENT_COMPAT_WAIT = 500; // Time for mouse compat events to fire after touch\n\nconst SWIPE_THRESHOLD = 40;\nconst Default$9 = {\n  interval: 5000,\n  keyboard: true,\n  slide: false,\n  pause: 'hover',\n  wrap: true,\n  touch: true\n};\nconst DefaultType$9 = {\n  interval: '(number|boolean)',\n  keyboard: 'boolean',\n  slide: '(boolean|string)',\n  pause: '(string|boolean)',\n  wrap: 'boolean',\n  touch: 'boolean'\n};\nconst ORDER_NEXT = 'next';\nconst ORDER_PREV = 'prev';\nconst DIRECTION_LEFT = 'left';\nconst DIRECTION_RIGHT = 'right';\nconst KEY_TO_DIRECTION = {\n  [ARROW_LEFT_KEY]: DIRECTION_RIGHT,\n  [ARROW_RIGHT_KEY]: DIRECTION_LEFT\n};\nconst EVENT_SLIDE = `slide${EVENT_KEY$9}`;\nconst EVENT_SLID = `slid${EVENT_KEY$9}`;\nconst EVENT_KEYDOWN = `keydown${EVENT_KEY$9}`;\nconst EVENT_MOUSEENTER = `mouseenter${EVENT_KEY$9}`;\nconst EVENT_MOUSELEAVE = `mouseleave${EVENT_KEY$9}`;\nconst EVENT_TOUCHSTART = `touchstart${EVENT_KEY$9}`;\nconst EVENT_TOUCHMOVE = `touchmove${EVENT_KEY$9}`;\nconst EVENT_TOUCHEND = `touchend${EVENT_KEY$9}`;\nconst EVENT_POINTERDOWN = `pointerdown${EVENT_KEY$9}`;\nconst EVENT_POINTERUP = `pointerup${EVENT_KEY$9}`;\nconst EVENT_DRAG_START = `dragstart${EVENT_KEY$9}`;\nconst EVENT_LOAD_DATA_API$2 = `load${EVENT_KEY$9}${DATA_API_KEY$6}`;\nconst EVENT_CLICK_DATA_API$5 = `click${EVENT_KEY$9}${DATA_API_KEY$6}`;\nconst CLASS_NAME_CAROUSEL = 'carousel';\nconst CLASS_NAME_ACTIVE$2 = 'active';\nconst CLASS_NAME_SLIDE = 'slide';\nconst CLASS_NAME_END = 'carousel-item-end';\nconst CLASS_NAME_START = 'carousel-item-start';\nconst CLASS_NAME_NEXT = 'carousel-item-next';\nconst CLASS_NAME_PREV = 'carousel-item-prev';\nconst CLASS_NAME_POINTER_EVENT = 'pointer-event';\nconst SELECTOR_ACTIVE$1 = '.active';\nconst SELECTOR_ACTIVE_ITEM = '.active.carousel-item';\nconst SELECTOR_ITEM = '.carousel-item';\nconst SELECTOR_ITEM_IMG = '.carousel-item img';\nconst SELECTOR_NEXT_PREV = '.carousel-item-next, .carousel-item-prev';\nconst SELECTOR_INDICATORS = '.carousel-indicators';\nconst SELECTOR_INDICATOR = '[data-bs-target]';\nconst SELECTOR_DATA_SLIDE = '[data-bs-slide], [data-bs-slide-to]';\nconst SELECTOR_DATA_RIDE = '[data-bs-ride=\"carousel\"]';\nconst POINTER_TYPE_TOUCH = 'touch';\nconst POINTER_TYPE_PEN = 'pen';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Carousel extends BaseComponent {\n  constructor(element, config) {\n    super(element);\n    this._items = null;\n    this._interval = null;\n    this._activeElement = null;\n    this._isPaused = false;\n    this._isSliding = false;\n    this.touchTimeout = null;\n    this.touchStartX = 0;\n    this.touchDeltaX = 0;\n    this._config = this._getConfig(config);\n    this._indicatorsElement = SelectorEngine.findOne(SELECTOR_INDICATORS, this._element);\n    this._touchSupported = 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0;\n    this._pointerEvent = Boolean(window.PointerEvent);\n\n    this._addEventListeners();\n  } // Getters\n\n\n  static get Default() {\n    return Default$9;\n  }\n\n  static get NAME() {\n    return NAME$a;\n  } // Public\n\n\n  next() {\n    this._slide(ORDER_NEXT);\n  }\n\n  nextWhenVisible() {\n    // Don't call next when the page isn't visible\n    // or the carousel or its parent isn't visible\n    if (!document.hidden && isVisible(this._element)) {\n      this.next();\n    }\n  }\n\n  prev() {\n    this._slide(ORDER_PREV);\n  }\n\n  pause(event) {\n    if (!event) {\n      this._isPaused = true;\n    }\n\n    if (SelectorEngine.findOne(SELECTOR_NEXT_PREV, this._element)) {\n      triggerTransitionEnd(this._element);\n      this.cycle(true);\n    }\n\n    clearInterval(this._interval);\n    this._interval = null;\n  }\n\n  cycle(event) {\n    if (!event) {\n      this._isPaused = false;\n    }\n\n    if (this._interval) {\n      clearInterval(this._interval);\n      this._interval = null;\n    }\n\n    if (this._config && this._config.interval && !this._isPaused) {\n      this._updateInterval();\n\n      this._interval = setInterval((document.visibilityState ? this.nextWhenVisible : this.next).bind(this), this._config.interval);\n    }\n  }\n\n  to(index) {\n    this._activeElement = SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element);\n\n    const activeIndex = this._getItemIndex(this._activeElement);\n\n    if (index > this._items.length - 1 || index < 0) {\n      return;\n    }\n\n    if (this._isSliding) {\n      EventHandler.one(this._element, EVENT_SLID, () => this.to(index));\n      return;\n    }\n\n    if (activeIndex === index) {\n      this.pause();\n      this.cycle();\n      return;\n    }\n\n    const order = index > activeIndex ? ORDER_NEXT : ORDER_PREV;\n\n    this._slide(order, this._items[index]);\n  } // Private\n\n\n  _getConfig(config) {\n    config = { ...Default$9,\n      ...Manipulator.getDataAttributes(this._element),\n      ...(typeof config === 'object' ? config : {})\n    };\n    typeCheckConfig(NAME$a, config, DefaultType$9);\n    return config;\n  }\n\n  _handleSwipe() {\n    const absDeltax = Math.abs(this.touchDeltaX);\n\n    if (absDeltax <= SWIPE_THRESHOLD) {\n      return;\n    }\n\n    const direction = absDeltax / this.touchDeltaX;\n    this.touchDeltaX = 0;\n\n    if (!direction) {\n      return;\n    }\n\n    this._slide(direction > 0 ? DIRECTION_RIGHT : DIRECTION_LEFT);\n  }\n\n  _addEventListeners() {\n    if (this._config.keyboard) {\n      EventHandler.on(this._element, EVENT_KEYDOWN, event => this._keydown(event));\n    }\n\n    if (this._config.pause === 'hover') {\n      EventHandler.on(this._element, EVENT_MOUSEENTER, event => this.pause(event));\n      EventHandler.on(this._element, EVENT_MOUSELEAVE, event => this.cycle(event));\n    }\n\n    if (this._config.touch && this._touchSupported) {\n      this._addTouchEventListeners();\n    }\n  }\n\n  _addTouchEventListeners() {\n    const start = event => {\n      if (this._pointerEvent && (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH)) {\n        this.touchStartX = event.clientX;\n      } else if (!this._pointerEvent) {\n        this.touchStartX = event.touches[0].clientX;\n      }\n    };\n\n    const move = event => {\n      // ensure swiping with one touch and not pinching\n      this.touchDeltaX = event.touches && event.touches.length > 1 ? 0 : event.touches[0].clientX - this.touchStartX;\n    };\n\n    const end = event => {\n      if (this._pointerEvent && (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH)) {\n        this.touchDeltaX = event.clientX - this.touchStartX;\n      }\n\n      this._handleSwipe();\n\n      if (this._config.pause === 'hover') {\n        // If it's a touch-enabled device, mouseenter/leave are fired as\n        // part of the mouse compatibility events on first tap - the carousel\n        // would stop cycling until user tapped out of it;\n        // here, we listen for touchend, explicitly pause the carousel\n        // (as if it's the second time we tap on it, mouseenter compat event\n        // is NOT fired) and after a timeout (to allow for mouse compatibility\n        // events to fire) we explicitly restart cycling\n        this.pause();\n\n        if (this.touchTimeout) {\n          clearTimeout(this.touchTimeout);\n        }\n\n        this.touchTimeout = setTimeout(event => this.cycle(event), TOUCHEVENT_COMPAT_WAIT + this._config.interval);\n      }\n    };\n\n    SelectorEngine.find(SELECTOR_ITEM_IMG, this._element).forEach(itemImg => {\n      EventHandler.on(itemImg, EVENT_DRAG_START, e => e.preventDefault());\n    });\n\n    if (this._pointerEvent) {\n      EventHandler.on(this._element, EVENT_POINTERDOWN, event => start(event));\n      EventHandler.on(this._element, EVENT_POINTERUP, event => end(event));\n\n      this._element.classList.add(CLASS_NAME_POINTER_EVENT);\n    } else {\n      EventHandler.on(this._element, EVENT_TOUCHSTART, event => start(event));\n      EventHandler.on(this._element, EVENT_TOUCHMOVE, event => move(event));\n      EventHandler.on(this._element, EVENT_TOUCHEND, event => end(event));\n    }\n  }\n\n  _keydown(event) {\n    if (/input|textarea/i.test(event.target.tagName)) {\n      return;\n    }\n\n    const direction = KEY_TO_DIRECTION[event.key];\n\n    if (direction) {\n      event.preventDefault();\n\n      this._slide(direction);\n    }\n  }\n\n  _getItemIndex(element) {\n    this._items = element && element.parentNode ? SelectorEngine.find(SELECTOR_ITEM, element.parentNode) : [];\n    return this._items.indexOf(element);\n  }\n\n  _getItemByOrder(order, activeElement) {\n    const isNext = order === ORDER_NEXT;\n    return getNextActiveElement(this._items, activeElement, isNext, this._config.wrap);\n  }\n\n  _triggerSlideEvent(relatedTarget, eventDirectionName) {\n    const targetIndex = this._getItemIndex(relatedTarget);\n\n    const fromIndex = this._getItemIndex(SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element));\n\n    return EventHandler.trigger(this._element, EVENT_SLIDE, {\n      relatedTarget,\n      direction: eventDirectionName,\n      from: fromIndex,\n      to: targetIndex\n    });\n  }\n\n  _setActiveIndicatorElement(element) {\n    if (this._indicatorsElement) {\n      const activeIndicator = SelectorEngine.findOne(SELECTOR_ACTIVE$1, this._indicatorsElement);\n      activeIndicator.classList.remove(CLASS_NAME_ACTIVE$2);\n      activeIndicator.removeAttribute('aria-current');\n      const indicators = SelectorEngine.find(SELECTOR_INDICATOR, this._indicatorsElement);\n\n      for (let i = 0; i < indicators.length; i++) {\n        if (Number.parseInt(indicators[i].getAttribute('data-bs-slide-to'), 10) === this._getItemIndex(element)) {\n          indicators[i].classList.add(CLASS_NAME_ACTIVE$2);\n          indicators[i].setAttribute('aria-current', 'true');\n          break;\n        }\n      }\n    }\n  }\n\n  _updateInterval() {\n    const element = this._activeElement || SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element);\n\n    if (!element) {\n      return;\n    }\n\n    const elementInterval = Number.parseInt(element.getAttribute('data-bs-interval'), 10);\n\n    if (elementInterval) {\n      this._config.defaultInterval = this._config.defaultInterval || this._config.interval;\n      this._config.interval = elementInterval;\n    } else {\n      this._config.interval = this._config.defaultInterval || this._config.interval;\n    }\n  }\n\n  _slide(directionOrOrder, element) {\n    const order = this._directionToOrder(directionOrOrder);\n\n    const activeElement = SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element);\n\n    const activeElementIndex = this._getItemIndex(activeElement);\n\n    const nextElement = element || this._getItemByOrder(order, activeElement);\n\n    const nextElementIndex = this._getItemIndex(nextElement);\n\n    const isCycling = Boolean(this._interval);\n    const isNext = order === ORDER_NEXT;\n    const directionalClassName = isNext ? CLASS_NAME_START : CLASS_NAME_END;\n    const orderClassName = isNext ? CLASS_NAME_NEXT : CLASS_NAME_PREV;\n\n    const eventDirectionName = this._orderToDirection(order);\n\n    if (nextElement && nextElement.classList.contains(CLASS_NAME_ACTIVE$2)) {\n      this._isSliding = false;\n      return;\n    }\n\n    if (this._isSliding) {\n      return;\n    }\n\n    const slideEvent = this._triggerSlideEvent(nextElement, eventDirectionName);\n\n    if (slideEvent.defaultPrevented) {\n      return;\n    }\n\n    if (!activeElement || !nextElement) {\n      // Some weirdness is happening, so we bail\n      return;\n    }\n\n    this._isSliding = true;\n\n    if (isCycling) {\n      this.pause();\n    }\n\n    this._setActiveIndicatorElement(nextElement);\n\n    this._activeElement = nextElement;\n\n    const triggerSlidEvent = () => {\n      EventHandler.trigger(this._element, EVENT_SLID, {\n        relatedTarget: nextElement,\n        direction: eventDirectionName,\n        from: activeElementIndex,\n        to: nextElementIndex\n      });\n    };\n\n    if (this._element.classList.contains(CLASS_NAME_SLIDE)) {\n      nextElement.classList.add(orderClassName);\n      reflow(nextElement);\n      activeElement.classList.add(directionalClassName);\n      nextElement.classList.add(directionalClassName);\n\n      const completeCallBack = () => {\n        nextElement.classList.remove(directionalClassName, orderClassName);\n        nextElement.classList.add(CLASS_NAME_ACTIVE$2);\n        activeElement.classList.remove(CLASS_NAME_ACTIVE$2, orderClassName, directionalClassName);\n        this._isSliding = false;\n        setTimeout(triggerSlidEvent, 0);\n      };\n\n      this._queueCallback(completeCallBack, activeElement, true);\n    } else {\n      activeElement.classList.remove(CLASS_NAME_ACTIVE$2);\n      nextElement.classList.add(CLASS_NAME_ACTIVE$2);\n      this._isSliding = false;\n      triggerSlidEvent();\n    }\n\n    if (isCycling) {\n      this.cycle();\n    }\n  }\n\n  _directionToOrder(direction) {\n    if (![DIRECTION_RIGHT, DIRECTION_LEFT].includes(direction)) {\n      return direction;\n    }\n\n    if (isRTL()) {\n      return direction === DIRECTION_LEFT ? ORDER_PREV : ORDER_NEXT;\n    }\n\n    return direction === DIRECTION_LEFT ? ORDER_NEXT : ORDER_PREV;\n  }\n\n  _orderToDirection(order) {\n    if (![ORDER_NEXT, ORDER_PREV].includes(order)) {\n      return order;\n    }\n\n    if (isRTL()) {\n      return order === ORDER_PREV ? DIRECTION_LEFT : DIRECTION_RIGHT;\n    }\n\n    return order === ORDER_PREV ? DIRECTION_RIGHT : DIRECTION_LEFT;\n  } // Static\n\n\n  static carouselInterface(element, config) {\n    const data = Carousel.getOrCreateInstance(element, config);\n    let {\n      _config\n    } = data;\n\n    if (typeof config === 'object') {\n      _config = { ..._config,\n        ...config\n      };\n    }\n\n    const action = typeof config === 'string' ? config : _config.slide;\n\n    if (typeof config === 'number') {\n      data.to(config);\n    } else if (typeof action === 'string') {\n      if (typeof data[action] === 'undefined') {\n        throw new TypeError(`No method named \"${action}\"`);\n      }\n\n      data[action]();\n    } else if (_config.interval && _config.ride) {\n      data.pause();\n      data.cycle();\n    }\n  }\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      Carousel.carouselInterface(this, config);\n    });\n  }\n\n  static dataApiClickHandler(event) {\n    const target = getElementFromSelector(this);\n\n    if (!target || !target.classList.contains(CLASS_NAME_CAROUSEL)) {\n      return;\n    }\n\n    const config = { ...Manipulator.getDataAttributes(target),\n      ...Manipulator.getDataAttributes(this)\n    };\n    const slideIndex = this.getAttribute('data-bs-slide-to');\n\n    if (slideIndex) {\n      config.interval = false;\n    }\n\n    Carousel.carouselInterface(target, config);\n\n    if (slideIndex) {\n      Carousel.getInstance(target).to(slideIndex);\n    }\n\n    event.preventDefault();\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$5, SELECTOR_DATA_SLIDE, Carousel.dataApiClickHandler);\nEventHandler.on(window, EVENT_LOAD_DATA_API$2, () => {\n  const carousels = SelectorEngine.find(SELECTOR_DATA_RIDE);\n\n  for (let i = 0, len = carousels.length; i < len; i++) {\n    Carousel.carouselInterface(carousels[i], Carousel.getInstance(carousels[i]));\n  }\n});\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Carousel to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Carousel);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): collapse.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$9 = 'collapse';\nconst DATA_KEY$8 = 'bs.collapse';\nconst EVENT_KEY$8 = `.${DATA_KEY$8}`;\nconst DATA_API_KEY$5 = '.data-api';\nconst Default$8 = {\n  toggle: true,\n  parent: ''\n};\nconst DefaultType$8 = {\n  toggle: 'boolean',\n  parent: '(string|element)'\n};\nconst EVENT_SHOW$5 = `show${EVENT_KEY$8}`;\nconst EVENT_SHOWN$5 = `shown${EVENT_KEY$8}`;\nconst EVENT_HIDE$5 = `hide${EVENT_KEY$8}`;\nconst EVENT_HIDDEN$5 = `hidden${EVENT_KEY$8}`;\nconst EVENT_CLICK_DATA_API$4 = `click${EVENT_KEY$8}${DATA_API_KEY$5}`;\nconst CLASS_NAME_SHOW$8 = 'show';\nconst CLASS_NAME_COLLAPSE = 'collapse';\nconst CLASS_NAME_COLLAPSING = 'collapsing';\nconst CLASS_NAME_COLLAPSED = 'collapsed';\nconst WIDTH = 'width';\nconst HEIGHT = 'height';\nconst SELECTOR_ACTIVES = '.show, .collapsing';\nconst SELECTOR_DATA_TOGGLE$4 = '[data-bs-toggle=\"collapse\"]';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Collapse extends BaseComponent {\n  constructor(element, config) {\n    super(element);\n    this._isTransitioning = false;\n    this._config = this._getConfig(config);\n    this._triggerArray = SelectorEngine.find(`${SELECTOR_DATA_TOGGLE$4}[href=\"#${this._element.id}\"],` + `${SELECTOR_DATA_TOGGLE$4}[data-bs-target=\"#${this._element.id}\"]`);\n    const toggleList = SelectorEngine.find(SELECTOR_DATA_TOGGLE$4);\n\n    for (let i = 0, len = toggleList.length; i < len; i++) {\n      const elem = toggleList[i];\n      const selector = getSelectorFromElement(elem);\n      const filterElement = SelectorEngine.find(selector).filter(foundElem => foundElem === this._element);\n\n      if (selector !== null && filterElement.length) {\n        this._selector = selector;\n\n        this._triggerArray.push(elem);\n      }\n    }\n\n    this._parent = this._config.parent ? this._getParent() : null;\n\n    if (!this._config.parent) {\n      this._addAriaAndCollapsedClass(this._element, this._triggerArray);\n    }\n\n    if (this._config.toggle) {\n      this.toggle();\n    }\n  } // Getters\n\n\n  static get Default() {\n    return Default$8;\n  }\n\n  static get NAME() {\n    return NAME$9;\n  } // Public\n\n\n  toggle() {\n    if (this._element.classList.contains(CLASS_NAME_SHOW$8)) {\n      this.hide();\n    } else {\n      this.show();\n    }\n  }\n\n  show() {\n    if (this._isTransitioning || this._element.classList.contains(CLASS_NAME_SHOW$8)) {\n      return;\n    }\n\n    let actives;\n    let activesData;\n\n    if (this._parent) {\n      actives = SelectorEngine.find(SELECTOR_ACTIVES, this._parent).filter(elem => {\n        if (typeof this._config.parent === 'string') {\n          return elem.getAttribute('data-bs-parent') === this._config.parent;\n        }\n\n        return elem.classList.contains(CLASS_NAME_COLLAPSE);\n      });\n\n      if (actives.length === 0) {\n        actives = null;\n      }\n    }\n\n    const container = SelectorEngine.findOne(this._selector);\n\n    if (actives) {\n      const tempActiveData = actives.find(elem => container !== elem);\n      activesData = tempActiveData ? Collapse.getInstance(tempActiveData) : null;\n\n      if (activesData && activesData._isTransitioning) {\n        return;\n      }\n    }\n\n    const startEvent = EventHandler.trigger(this._element, EVENT_SHOW$5);\n\n    if (startEvent.defaultPrevented) {\n      return;\n    }\n\n    if (actives) {\n      actives.forEach(elemActive => {\n        if (container !== elemActive) {\n          Collapse.collapseInterface(elemActive, 'hide');\n        }\n\n        if (!activesData) {\n          Data.set(elemActive, DATA_KEY$8, null);\n        }\n      });\n    }\n\n    const dimension = this._getDimension();\n\n    this._element.classList.remove(CLASS_NAME_COLLAPSE);\n\n    this._element.classList.add(CLASS_NAME_COLLAPSING);\n\n    this._element.style[dimension] = 0;\n\n    if (this._triggerArray.length) {\n      this._triggerArray.forEach(element => {\n        element.classList.remove(CLASS_NAME_COLLAPSED);\n        element.setAttribute('aria-expanded', true);\n      });\n    }\n\n    this.setTransitioning(true);\n\n    const complete = () => {\n      this._element.classList.remove(CLASS_NAME_COLLAPSING);\n\n      this._element.classList.add(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$8);\n\n      this._element.style[dimension] = '';\n      this.setTransitioning(false);\n      EventHandler.trigger(this._element, EVENT_SHOWN$5);\n    };\n\n    const capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1);\n    const scrollSize = `scroll${capitalizedDimension}`;\n\n    this._queueCallback(complete, this._element, true);\n\n    this._element.style[dimension] = `${this._element[scrollSize]}px`;\n  }\n\n  hide() {\n    if (this._isTransitioning || !this._element.classList.contains(CLASS_NAME_SHOW$8)) {\n      return;\n    }\n\n    const startEvent = EventHandler.trigger(this._element, EVENT_HIDE$5);\n\n    if (startEvent.defaultPrevented) {\n      return;\n    }\n\n    const dimension = this._getDimension();\n\n    this._element.style[dimension] = `${this._element.getBoundingClientRect()[dimension]}px`;\n    reflow(this._element);\n\n    this._element.classList.add(CLASS_NAME_COLLAPSING);\n\n    this._element.classList.remove(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$8);\n\n    const triggerArrayLength = this._triggerArray.length;\n\n    if (triggerArrayLength > 0) {\n      for (let i = 0; i < triggerArrayLength; i++) {\n        const trigger = this._triggerArray[i];\n        const elem = getElementFromSelector(trigger);\n\n        if (elem && !elem.classList.contains(CLASS_NAME_SHOW$8)) {\n          trigger.classList.add(CLASS_NAME_COLLAPSED);\n          trigger.setAttribute('aria-expanded', false);\n        }\n      }\n    }\n\n    this.setTransitioning(true);\n\n    const complete = () => {\n      this.setTransitioning(false);\n\n      this._element.classList.remove(CLASS_NAME_COLLAPSING);\n\n      this._element.classList.add(CLASS_NAME_COLLAPSE);\n\n      EventHandler.trigger(this._element, EVENT_HIDDEN$5);\n    };\n\n    this._element.style[dimension] = '';\n\n    this._queueCallback(complete, this._element, true);\n  }\n\n  setTransitioning(isTransitioning) {\n    this._isTransitioning = isTransitioning;\n  } // Private\n\n\n  _getConfig(config) {\n    config = { ...Default$8,\n      ...config\n    };\n    config.toggle = Boolean(config.toggle); // Coerce string values\n\n    typeCheckConfig(NAME$9, config, DefaultType$8);\n    return config;\n  }\n\n  _getDimension() {\n    return this._element.classList.contains(WIDTH) ? WIDTH : HEIGHT;\n  }\n\n  _getParent() {\n    let {\n      parent\n    } = this._config;\n    parent = getElement(parent);\n    const selector = `${SELECTOR_DATA_TOGGLE$4}[data-bs-parent=\"${parent}\"]`;\n    SelectorEngine.find(selector, parent).forEach(element => {\n      const selected = getElementFromSelector(element);\n\n      this._addAriaAndCollapsedClass(selected, [element]);\n    });\n    return parent;\n  }\n\n  _addAriaAndCollapsedClass(element, triggerArray) {\n    if (!element || !triggerArray.length) {\n      return;\n    }\n\n    const isOpen = element.classList.contains(CLASS_NAME_SHOW$8);\n    triggerArray.forEach(elem => {\n      if (isOpen) {\n        elem.classList.remove(CLASS_NAME_COLLAPSED);\n      } else {\n        elem.classList.add(CLASS_NAME_COLLAPSED);\n      }\n\n      elem.setAttribute('aria-expanded', isOpen);\n    });\n  } // Static\n\n\n  static collapseInterface(element, config) {\n    let data = Collapse.getInstance(element);\n    const _config = { ...Default$8,\n      ...Manipulator.getDataAttributes(element),\n      ...(typeof config === 'object' && config ? config : {})\n    };\n\n    if (!data && _config.toggle && typeof config === 'string' && /show|hide/.test(config)) {\n      _config.toggle = false;\n    }\n\n    if (!data) {\n      data = new Collapse(element, _config);\n    }\n\n    if (typeof config === 'string') {\n      if (typeof data[config] === 'undefined') {\n        throw new TypeError(`No method named \"${config}\"`);\n      }\n\n      data[config]();\n    }\n  }\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      Collapse.collapseInterface(this, config);\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$4, SELECTOR_DATA_TOGGLE$4, function (event) {\n  // preventDefault only for <a> elements (which change the URL) not inside the collapsible element\n  if (event.target.tagName === 'A' || event.delegateTarget && event.delegateTarget.tagName === 'A') {\n    event.preventDefault();\n  }\n\n  const triggerData = Manipulator.getDataAttributes(this);\n  const selector = getSelectorFromElement(this);\n  const selectorElements = SelectorEngine.find(selector);\n  selectorElements.forEach(element => {\n    const data = Collapse.getInstance(element);\n    let config;\n\n    if (data) {\n      // update parent attribute\n      if (data._parent === null && typeof triggerData.parent === 'string') {\n        data._config.parent = triggerData.parent;\n        data._parent = data._getParent();\n      }\n\n      config = 'toggle';\n    } else {\n      config = triggerData;\n    }\n\n    Collapse.collapseInterface(element, config);\n  });\n});\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Collapse to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Collapse);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): dropdown.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$8 = 'dropdown';\nconst DATA_KEY$7 = 'bs.dropdown';\nconst EVENT_KEY$7 = `.${DATA_KEY$7}`;\nconst DATA_API_KEY$4 = '.data-api';\nconst ESCAPE_KEY$2 = 'Escape';\nconst SPACE_KEY = 'Space';\nconst TAB_KEY = 'Tab';\nconst ARROW_UP_KEY = 'ArrowUp';\nconst ARROW_DOWN_KEY = 'ArrowDown';\nconst RIGHT_MOUSE_BUTTON = 2; // MouseEvent.button value for the secondary button, usually the right button\n\nconst REGEXP_KEYDOWN = new RegExp(`${ARROW_UP_KEY}|${ARROW_DOWN_KEY}|${ESCAPE_KEY$2}`);\nconst EVENT_HIDE$4 = `hide${EVENT_KEY$7}`;\nconst EVENT_HIDDEN$4 = `hidden${EVENT_KEY$7}`;\nconst EVENT_SHOW$4 = `show${EVENT_KEY$7}`;\nconst EVENT_SHOWN$4 = `shown${EVENT_KEY$7}`;\nconst EVENT_CLICK = `click${EVENT_KEY$7}`;\nconst EVENT_CLICK_DATA_API$3 = `click${EVENT_KEY$7}${DATA_API_KEY$4}`;\nconst EVENT_KEYDOWN_DATA_API = `keydown${EVENT_KEY$7}${DATA_API_KEY$4}`;\nconst EVENT_KEYUP_DATA_API = `keyup${EVENT_KEY$7}${DATA_API_KEY$4}`;\nconst CLASS_NAME_SHOW$7 = 'show';\nconst CLASS_NAME_DROPUP = 'dropup';\nconst CLASS_NAME_DROPEND = 'dropend';\nconst CLASS_NAME_DROPSTART = 'dropstart';\nconst CLASS_NAME_NAVBAR = 'navbar';\nconst SELECTOR_DATA_TOGGLE$3 = '[data-bs-toggle=\"dropdown\"]';\nconst SELECTOR_MENU = '.dropdown-menu';\nconst SELECTOR_NAVBAR_NAV = '.navbar-nav';\nconst SELECTOR_VISIBLE_ITEMS = '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)';\nconst PLACEMENT_TOP = isRTL() ? 'top-end' : 'top-start';\nconst PLACEMENT_TOPEND = isRTL() ? 'top-start' : 'top-end';\nconst PLACEMENT_BOTTOM = isRTL() ? 'bottom-end' : 'bottom-start';\nconst PLACEMENT_BOTTOMEND = isRTL() ? 'bottom-start' : 'bottom-end';\nconst PLACEMENT_RIGHT = isRTL() ? 'left-start' : 'right-start';\nconst PLACEMENT_LEFT = isRTL() ? 'right-start' : 'left-start';\nconst Default$7 = {\n  offset: [0, 2],\n  boundary: 'clippingParents',\n  reference: 'toggle',\n  display: 'dynamic',\n  popperConfig: null,\n  autoClose: true\n};\nconst DefaultType$7 = {\n  offset: '(array|string|function)',\n  boundary: '(string|element)',\n  reference: '(string|element|object)',\n  display: 'string',\n  popperConfig: '(null|object|function)',\n  autoClose: '(boolean|string)'\n};\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Dropdown extends BaseComponent {\n  constructor(element, config) {\n    super(element);\n    this._popper = null;\n    this._config = this._getConfig(config);\n    this._menu = this._getMenuElement();\n    this._inNavbar = this._detectNavbar();\n\n    this._addEventListeners();\n  } // Getters\n\n\n  static get Default() {\n    return Default$7;\n  }\n\n  static get DefaultType() {\n    return DefaultType$7;\n  }\n\n  static get NAME() {\n    return NAME$8;\n  } // Public\n\n\n  toggle() {\n    if (isDisabled(this._element)) {\n      return;\n    }\n\n    const isActive = this._element.classList.contains(CLASS_NAME_SHOW$7);\n\n    if (isActive) {\n      this.hide();\n      return;\n    }\n\n    this.show();\n  }\n\n  show() {\n    if (isDisabled(this._element) || this._menu.classList.contains(CLASS_NAME_SHOW$7)) {\n      return;\n    }\n\n    const parent = Dropdown.getParentFromElement(this._element);\n    const relatedTarget = {\n      relatedTarget: this._element\n    };\n    const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$4, relatedTarget);\n\n    if (showEvent.defaultPrevented) {\n      return;\n    } // Totally disable Popper for Dropdowns in Navbar\n\n\n    if (this._inNavbar) {\n      Manipulator.setDataAttribute(this._menu, 'popper', 'none');\n    } else {\n      if (typeof Popper === 'undefined') {\n        throw new TypeError('Bootstrap\\'s dropdowns require Popper (https://popper.js.org)');\n      }\n\n      let referenceElement = this._element;\n\n      if (this._config.reference === 'parent') {\n        referenceElement = parent;\n      } else if (isElement(this._config.reference)) {\n        referenceElement = getElement(this._config.reference);\n      } else if (typeof this._config.reference === 'object') {\n        referenceElement = this._config.reference;\n      }\n\n      const popperConfig = this._getPopperConfig();\n\n      const isDisplayStatic = popperConfig.modifiers.find(modifier => modifier.name === 'applyStyles' && modifier.enabled === false);\n      this._popper = Popper.createPopper(referenceElement, this._menu, popperConfig);\n\n      if (isDisplayStatic) {\n        Manipulator.setDataAttribute(this._menu, 'popper', 'static');\n      }\n    } // If this is a touch-enabled device we add extra\n    // empty mouseover listeners to the body's immediate children;\n    // only needed because of broken event delegation on iOS\n    // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n\n\n    if ('ontouchstart' in document.documentElement && !parent.closest(SELECTOR_NAVBAR_NAV)) {\n      [].concat(...document.body.children).forEach(elem => EventHandler.on(elem, 'mouseover', noop));\n    }\n\n    this._element.focus();\n\n    this._element.setAttribute('aria-expanded', true);\n\n    this._menu.classList.toggle(CLASS_NAME_SHOW$7);\n\n    this._element.classList.toggle(CLASS_NAME_SHOW$7);\n\n    EventHandler.trigger(this._element, EVENT_SHOWN$4, relatedTarget);\n  }\n\n  hide() {\n    if (isDisabled(this._element) || !this._menu.classList.contains(CLASS_NAME_SHOW$7)) {\n      return;\n    }\n\n    const relatedTarget = {\n      relatedTarget: this._element\n    };\n\n    this._completeHide(relatedTarget);\n  }\n\n  dispose() {\n    if (this._popper) {\n      this._popper.destroy();\n    }\n\n    super.dispose();\n  }\n\n  update() {\n    this._inNavbar = this._detectNavbar();\n\n    if (this._popper) {\n      this._popper.update();\n    }\n  } // Private\n\n\n  _addEventListeners() {\n    EventHandler.on(this._element, EVENT_CLICK, event => {\n      event.preventDefault();\n      this.toggle();\n    });\n  }\n\n  _completeHide(relatedTarget) {\n    const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$4, relatedTarget);\n\n    if (hideEvent.defaultPrevented) {\n      return;\n    } // If this is a touch-enabled device we remove the extra\n    // empty mouseover listeners we added for iOS support\n\n\n    if ('ontouchstart' in document.documentElement) {\n      [].concat(...document.body.children).forEach(elem => EventHandler.off(elem, 'mouseover', noop));\n    }\n\n    if (this._popper) {\n      this._popper.destroy();\n    }\n\n    this._menu.classList.remove(CLASS_NAME_SHOW$7);\n\n    this._element.classList.remove(CLASS_NAME_SHOW$7);\n\n    this._element.setAttribute('aria-expanded', 'false');\n\n    Manipulator.removeDataAttribute(this._menu, 'popper');\n    EventHandler.trigger(this._element, EVENT_HIDDEN$4, relatedTarget);\n  }\n\n  _getConfig(config) {\n    config = { ...this.constructor.Default,\n      ...Manipulator.getDataAttributes(this._element),\n      ...config\n    };\n    typeCheckConfig(NAME$8, config, this.constructor.DefaultType);\n\n    if (typeof config.reference === 'object' && !isElement(config.reference) && typeof config.reference.getBoundingClientRect !== 'function') {\n      // Popper virtual elements require a getBoundingClientRect method\n      throw new TypeError(`${NAME$8.toUpperCase()}: Option \"reference\" provided type \"object\" without a required \"getBoundingClientRect\" method.`);\n    }\n\n    return config;\n  }\n\n  _getMenuElement() {\n    return SelectorEngine.next(this._element, SELECTOR_MENU)[0];\n  }\n\n  _getPlacement() {\n    const parentDropdown = this._element.parentNode;\n\n    if (parentDropdown.classList.contains(CLASS_NAME_DROPEND)) {\n      return PLACEMENT_RIGHT;\n    }\n\n    if (parentDropdown.classList.contains(CLASS_NAME_DROPSTART)) {\n      return PLACEMENT_LEFT;\n    } // We need to trim the value because custom properties can also include spaces\n\n\n    const isEnd = getComputedStyle(this._menu).getPropertyValue('--bs-position').trim() === 'end';\n\n    if (parentDropdown.classList.contains(CLASS_NAME_DROPUP)) {\n      return isEnd ? PLACEMENT_TOPEND : PLACEMENT_TOP;\n    }\n\n    return isEnd ? PLACEMENT_BOTTOMEND : PLACEMENT_BOTTOM;\n  }\n\n  _detectNavbar() {\n    return this._element.closest(`.${CLASS_NAME_NAVBAR}`) !== null;\n  }\n\n  _getOffset() {\n    const {\n      offset\n    } = this._config;\n\n    if (typeof offset === 'string') {\n      return offset.split(',').map(val => Number.parseInt(val, 10));\n    }\n\n    if (typeof offset === 'function') {\n      return popperData => offset(popperData, this._element);\n    }\n\n    return offset;\n  }\n\n  _getPopperConfig() {\n    const defaultBsPopperConfig = {\n      placement: this._getPlacement(),\n      modifiers: [{\n        name: 'preventOverflow',\n        options: {\n          boundary: this._config.boundary\n        }\n      }, {\n        name: 'offset',\n        options: {\n          offset: this._getOffset()\n        }\n      }]\n    }; // Disable Popper if we have a static display\n\n    if (this._config.display === 'static') {\n      defaultBsPopperConfig.modifiers = [{\n        name: 'applyStyles',\n        enabled: false\n      }];\n    }\n\n    return { ...defaultBsPopperConfig,\n      ...(typeof this._config.popperConfig === 'function' ? this._config.popperConfig(defaultBsPopperConfig) : this._config.popperConfig)\n    };\n  }\n\n  _selectMenuItem({\n    key,\n    target\n  }) {\n    const items = SelectorEngine.find(SELECTOR_VISIBLE_ITEMS, this._menu).filter(isVisible);\n\n    if (!items.length) {\n      return;\n    } // if target isn't included in items (e.g. when expanding the dropdown)\n    // allow cycling to get the last item in case key equals ARROW_UP_KEY\n\n\n    getNextActiveElement(items, target, key === ARROW_DOWN_KEY, !items.includes(target)).focus();\n  } // Static\n\n\n  static dropdownInterface(element, config) {\n    const data = Dropdown.getOrCreateInstance(element, config);\n\n    if (typeof config === 'string') {\n      if (typeof data[config] === 'undefined') {\n        throw new TypeError(`No method named \"${config}\"`);\n      }\n\n      data[config]();\n    }\n  }\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      Dropdown.dropdownInterface(this, config);\n    });\n  }\n\n  static clearMenus(event) {\n    if (event && (event.button === RIGHT_MOUSE_BUTTON || event.type === 'keyup' && event.key !== TAB_KEY)) {\n      return;\n    }\n\n    const toggles = SelectorEngine.find(SELECTOR_DATA_TOGGLE$3);\n\n    for (let i = 0, len = toggles.length; i < len; i++) {\n      const context = Dropdown.getInstance(toggles[i]);\n\n      if (!context || context._config.autoClose === false) {\n        continue;\n      }\n\n      if (!context._element.classList.contains(CLASS_NAME_SHOW$7)) {\n        continue;\n      }\n\n      const relatedTarget = {\n        relatedTarget: context._element\n      };\n\n      if (event) {\n        const composedPath = event.composedPath();\n        const isMenuTarget = composedPath.includes(context._menu);\n\n        if (composedPath.includes(context._element) || context._config.autoClose === 'inside' && !isMenuTarget || context._config.autoClose === 'outside' && isMenuTarget) {\n          continue;\n        } // Tab navigation through the dropdown menu or events from contained inputs shouldn't close the menu\n\n\n        if (context._menu.contains(event.target) && (event.type === 'keyup' && event.key === TAB_KEY || /input|select|option|textarea|form/i.test(event.target.tagName))) {\n          continue;\n        }\n\n        if (event.type === 'click') {\n          relatedTarget.clickEvent = event;\n        }\n      }\n\n      context._completeHide(relatedTarget);\n    }\n  }\n\n  static getParentFromElement(element) {\n    return getElementFromSelector(element) || element.parentNode;\n  }\n\n  static dataApiKeydownHandler(event) {\n    // If not input/textarea:\n    //  - And not a key in REGEXP_KEYDOWN => not a dropdown command\n    // If input/textarea:\n    //  - If space key => not a dropdown command\n    //  - If key is other than escape\n    //    - If key is not up or down => not a dropdown command\n    //    - If trigger inside the menu => not a dropdown command\n    if (/input|textarea/i.test(event.target.tagName) ? event.key === SPACE_KEY || event.key !== ESCAPE_KEY$2 && (event.key !== ARROW_DOWN_KEY && event.key !== ARROW_UP_KEY || event.target.closest(SELECTOR_MENU)) : !REGEXP_KEYDOWN.test(event.key)) {\n      return;\n    }\n\n    const isActive = this.classList.contains(CLASS_NAME_SHOW$7);\n\n    if (!isActive && event.key === ESCAPE_KEY$2) {\n      return;\n    }\n\n    event.preventDefault();\n    event.stopPropagation();\n\n    if (isDisabled(this)) {\n      return;\n    }\n\n    const getToggleButton = () => this.matches(SELECTOR_DATA_TOGGLE$3) ? this : SelectorEngine.prev(this, SELECTOR_DATA_TOGGLE$3)[0];\n\n    if (event.key === ESCAPE_KEY$2) {\n      getToggleButton().focus();\n      Dropdown.clearMenus();\n      return;\n    }\n\n    if (event.key === ARROW_UP_KEY || event.key === ARROW_DOWN_KEY) {\n      if (!isActive) {\n        getToggleButton().click();\n      }\n\n      Dropdown.getInstance(getToggleButton())._selectMenuItem(event);\n\n      return;\n    }\n\n    if (!isActive || event.key === SPACE_KEY) {\n      Dropdown.clearMenus();\n    }\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_DATA_TOGGLE$3, Dropdown.dataApiKeydownHandler);\nEventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown.dataApiKeydownHandler);\nEventHandler.on(document, EVENT_CLICK_DATA_API$3, Dropdown.clearMenus);\nEventHandler.on(document, EVENT_KEYUP_DATA_API, Dropdown.clearMenus);\nEventHandler.on(document, EVENT_CLICK_DATA_API$3, SELECTOR_DATA_TOGGLE$3, function (event) {\n  event.preventDefault();\n  Dropdown.dropdownInterface(this);\n});\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Dropdown to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Dropdown);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): util/scrollBar.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\nconst SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top';\nconst SELECTOR_STICKY_CONTENT = '.sticky-top';\n\nclass ScrollBarHelper {\n  constructor() {\n    this._element = document.body;\n  }\n\n  getWidth() {\n    // https://developer.mozilla.org/en-US/docs/Web/API/Window/innerWidth#usage_notes\n    const documentWidth = document.documentElement.clientWidth;\n    return Math.abs(window.innerWidth - documentWidth);\n  }\n\n  hide() {\n    const width = this.getWidth();\n\n    this._disableOverFlow(); // give padding to element to balance the hidden scrollbar width\n\n\n    this._setElementAttributes(this._element, 'paddingRight', calculatedValue => calculatedValue + width); // trick: We adjust positive paddingRight and negative marginRight to sticky-top elements to keep showing fullwidth\n\n\n    this._setElementAttributes(SELECTOR_FIXED_CONTENT, 'paddingRight', calculatedValue => calculatedValue + width);\n\n    this._setElementAttributes(SELECTOR_STICKY_CONTENT, 'marginRight', calculatedValue => calculatedValue - width);\n  }\n\n  _disableOverFlow() {\n    this._saveInitialAttribute(this._element, 'overflow');\n\n    this._element.style.overflow = 'hidden';\n  }\n\n  _setElementAttributes(selector, styleProp, callback) {\n    const scrollbarWidth = this.getWidth();\n\n    const manipulationCallBack = element => {\n      if (element !== this._element && window.innerWidth > element.clientWidth + scrollbarWidth) {\n        return;\n      }\n\n      this._saveInitialAttribute(element, styleProp);\n\n      const calculatedValue = window.getComputedStyle(element)[styleProp];\n      element.style[styleProp] = `${callback(Number.parseFloat(calculatedValue))}px`;\n    };\n\n    this._applyManipulationCallback(selector, manipulationCallBack);\n  }\n\n  reset() {\n    this._resetElementAttributes(this._element, 'overflow');\n\n    this._resetElementAttributes(this._element, 'paddingRight');\n\n    this._resetElementAttributes(SELECTOR_FIXED_CONTENT, 'paddingRight');\n\n    this._resetElementAttributes(SELECTOR_STICKY_CONTENT, 'marginRight');\n  }\n\n  _saveInitialAttribute(element, styleProp) {\n    const actualValue = element.style[styleProp];\n\n    if (actualValue) {\n      Manipulator.setDataAttribute(element, styleProp, actualValue);\n    }\n  }\n\n  _resetElementAttributes(selector, styleProp) {\n    const manipulationCallBack = element => {\n      const value = Manipulator.getDataAttribute(element, styleProp);\n\n      if (typeof value === 'undefined') {\n        element.style.removeProperty(styleProp);\n      } else {\n        Manipulator.removeDataAttribute(element, styleProp);\n        element.style[styleProp] = value;\n      }\n    };\n\n    this._applyManipulationCallback(selector, manipulationCallBack);\n  }\n\n  _applyManipulationCallback(selector, callBack) {\n    if (isElement(selector)) {\n      callBack(selector);\n    } else {\n      SelectorEngine.find(selector, this._element).forEach(callBack);\n    }\n  }\n\n  isOverflowing() {\n    return this.getWidth() > 0;\n  }\n\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): util/backdrop.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\nconst Default$6 = {\n  isVisible: true,\n  // if false, we use the backdrop helper without adding any element to the dom\n  isAnimated: false,\n  rootElement: 'body',\n  // give the choice to place backdrop under different elements\n  clickCallback: null\n};\nconst DefaultType$6 = {\n  isVisible: 'boolean',\n  isAnimated: 'boolean',\n  rootElement: '(element|string)',\n  clickCallback: '(function|null)'\n};\nconst NAME$7 = 'backdrop';\nconst CLASS_NAME_BACKDROP = 'modal-backdrop';\nconst CLASS_NAME_FADE$5 = 'fade';\nconst CLASS_NAME_SHOW$6 = 'show';\nconst EVENT_MOUSEDOWN = `mousedown.bs.${NAME$7}`;\n\nclass Backdrop {\n  constructor(config) {\n    this._config = this._getConfig(config);\n    this._isAppended = false;\n    this._element = null;\n  }\n\n  show(callback) {\n    if (!this._config.isVisible) {\n      execute(callback);\n      return;\n    }\n\n    this._append();\n\n    if (this._config.isAnimated) {\n      reflow(this._getElement());\n    }\n\n    this._getElement().classList.add(CLASS_NAME_SHOW$6);\n\n    this._emulateAnimation(() => {\n      execute(callback);\n    });\n  }\n\n  hide(callback) {\n    if (!this._config.isVisible) {\n      execute(callback);\n      return;\n    }\n\n    this._getElement().classList.remove(CLASS_NAME_SHOW$6);\n\n    this._emulateAnimation(() => {\n      this.dispose();\n      execute(callback);\n    });\n  } // Private\n\n\n  _getElement() {\n    if (!this._element) {\n      const backdrop = document.createElement('div');\n      backdrop.className = CLASS_NAME_BACKDROP;\n\n      if (this._config.isAnimated) {\n        backdrop.classList.add(CLASS_NAME_FADE$5);\n      }\n\n      this._element = backdrop;\n    }\n\n    return this._element;\n  }\n\n  _getConfig(config) {\n    config = { ...Default$6,\n      ...(typeof config === 'object' ? config : {})\n    }; // use getElement() with the default \"body\" to get a fresh Element on each instantiation\n\n    config.rootElement = getElement(config.rootElement);\n    typeCheckConfig(NAME$7, config, DefaultType$6);\n    return config;\n  }\n\n  _append() {\n    if (this._isAppended) {\n      return;\n    }\n\n    this._config.rootElement.appendChild(this._getElement());\n\n    EventHandler.on(this._getElement(), EVENT_MOUSEDOWN, () => {\n      execute(this._config.clickCallback);\n    });\n    this._isAppended = true;\n  }\n\n  dispose() {\n    if (!this._isAppended) {\n      return;\n    }\n\n    EventHandler.off(this._element, EVENT_MOUSEDOWN);\n\n    this._element.remove();\n\n    this._isAppended = false;\n  }\n\n  _emulateAnimation(callback) {\n    executeAfterTransition(callback, this._getElement(), this._config.isAnimated);\n  }\n\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): modal.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$6 = 'modal';\nconst DATA_KEY$6 = 'bs.modal';\nconst EVENT_KEY$6 = `.${DATA_KEY$6}`;\nconst DATA_API_KEY$3 = '.data-api';\nconst ESCAPE_KEY$1 = 'Escape';\nconst Default$5 = {\n  backdrop: true,\n  keyboard: true,\n  focus: true\n};\nconst DefaultType$5 = {\n  backdrop: '(boolean|string)',\n  keyboard: 'boolean',\n  focus: 'boolean'\n};\nconst EVENT_HIDE$3 = `hide${EVENT_KEY$6}`;\nconst EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY$6}`;\nconst EVENT_HIDDEN$3 = `hidden${EVENT_KEY$6}`;\nconst EVENT_SHOW$3 = `show${EVENT_KEY$6}`;\nconst EVENT_SHOWN$3 = `shown${EVENT_KEY$6}`;\nconst EVENT_FOCUSIN$2 = `focusin${EVENT_KEY$6}`;\nconst EVENT_RESIZE = `resize${EVENT_KEY$6}`;\nconst EVENT_CLICK_DISMISS$2 = `click.dismiss${EVENT_KEY$6}`;\nconst EVENT_KEYDOWN_DISMISS$1 = `keydown.dismiss${EVENT_KEY$6}`;\nconst EVENT_MOUSEUP_DISMISS = `mouseup.dismiss${EVENT_KEY$6}`;\nconst EVENT_MOUSEDOWN_DISMISS = `mousedown.dismiss${EVENT_KEY$6}`;\nconst EVENT_CLICK_DATA_API$2 = `click${EVENT_KEY$6}${DATA_API_KEY$3}`;\nconst CLASS_NAME_OPEN = 'modal-open';\nconst CLASS_NAME_FADE$4 = 'fade';\nconst CLASS_NAME_SHOW$5 = 'show';\nconst CLASS_NAME_STATIC = 'modal-static';\nconst SELECTOR_DIALOG = '.modal-dialog';\nconst SELECTOR_MODAL_BODY = '.modal-body';\nconst SELECTOR_DATA_TOGGLE$2 = '[data-bs-toggle=\"modal\"]';\nconst SELECTOR_DATA_DISMISS$2 = '[data-bs-dismiss=\"modal\"]';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Modal extends BaseComponent {\n  constructor(element, config) {\n    super(element);\n    this._config = this._getConfig(config);\n    this._dialog = SelectorEngine.findOne(SELECTOR_DIALOG, this._element);\n    this._backdrop = this._initializeBackDrop();\n    this._isShown = false;\n    this._ignoreBackdropClick = false;\n    this._isTransitioning = false;\n    this._scrollBar = new ScrollBarHelper();\n  } // Getters\n\n\n  static get Default() {\n    return Default$5;\n  }\n\n  static get NAME() {\n    return NAME$6;\n  } // Public\n\n\n  toggle(relatedTarget) {\n    return this._isShown ? this.hide() : this.show(relatedTarget);\n  }\n\n  show(relatedTarget) {\n    if (this._isShown || this._isTransitioning) {\n      return;\n    }\n\n    const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$3, {\n      relatedTarget\n    });\n\n    if (showEvent.defaultPrevented) {\n      return;\n    }\n\n    this._isShown = true;\n\n    if (this._isAnimated()) {\n      this._isTransitioning = true;\n    }\n\n    this._scrollBar.hide();\n\n    document.body.classList.add(CLASS_NAME_OPEN);\n\n    this._adjustDialog();\n\n    this._setEscapeEvent();\n\n    this._setResizeEvent();\n\n    EventHandler.on(this._element, EVENT_CLICK_DISMISS$2, SELECTOR_DATA_DISMISS$2, event => this.hide(event));\n    EventHandler.on(this._dialog, EVENT_MOUSEDOWN_DISMISS, () => {\n      EventHandler.one(this._element, EVENT_MOUSEUP_DISMISS, event => {\n        if (event.target === this._element) {\n          this._ignoreBackdropClick = true;\n        }\n      });\n    });\n\n    this._showBackdrop(() => this._showElement(relatedTarget));\n  }\n\n  hide(event) {\n    if (event && ['A', 'AREA'].includes(event.target.tagName)) {\n      event.preventDefault();\n    }\n\n    if (!this._isShown || this._isTransitioning) {\n      return;\n    }\n\n    const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$3);\n\n    if (hideEvent.defaultPrevented) {\n      return;\n    }\n\n    this._isShown = false;\n\n    const isAnimated = this._isAnimated();\n\n    if (isAnimated) {\n      this._isTransitioning = true;\n    }\n\n    this._setEscapeEvent();\n\n    this._setResizeEvent();\n\n    EventHandler.off(document, EVENT_FOCUSIN$2);\n\n    this._element.classList.remove(CLASS_NAME_SHOW$5);\n\n    EventHandler.off(this._element, EVENT_CLICK_DISMISS$2);\n    EventHandler.off(this._dialog, EVENT_MOUSEDOWN_DISMISS);\n\n    this._queueCallback(() => this._hideModal(), this._element, isAnimated);\n  }\n\n  dispose() {\n    [window, this._dialog].forEach(htmlElement => EventHandler.off(htmlElement, EVENT_KEY$6));\n\n    this._backdrop.dispose();\n\n    super.dispose();\n    /**\n     * `document` has 2 events `EVENT_FOCUSIN` and `EVENT_CLICK_DATA_API`\n     * Do not move `document` in `htmlElements` array\n     * It will remove `EVENT_CLICK_DATA_API` event that should remain\n     */\n\n    EventHandler.off(document, EVENT_FOCUSIN$2);\n  }\n\n  handleUpdate() {\n    this._adjustDialog();\n  } // Private\n\n\n  _initializeBackDrop() {\n    return new Backdrop({\n      isVisible: Boolean(this._config.backdrop),\n      // 'static' option will be translated to true, and booleans will keep their value\n      isAnimated: this._isAnimated()\n    });\n  }\n\n  _getConfig(config) {\n    config = { ...Default$5,\n      ...Manipulator.getDataAttributes(this._element),\n      ...(typeof config === 'object' ? config : {})\n    };\n    typeCheckConfig(NAME$6, config, DefaultType$5);\n    return config;\n  }\n\n  _showElement(relatedTarget) {\n    const isAnimated = this._isAnimated();\n\n    const modalBody = SelectorEngine.findOne(SELECTOR_MODAL_BODY, this._dialog);\n\n    if (!this._element.parentNode || this._element.parentNode.nodeType !== Node.ELEMENT_NODE) {\n      // Don't move modal's DOM position\n      document.body.appendChild(this._element);\n    }\n\n    this._element.style.display = 'block';\n\n    this._element.removeAttribute('aria-hidden');\n\n    this._element.setAttribute('aria-modal', true);\n\n    this._element.setAttribute('role', 'dialog');\n\n    this._element.scrollTop = 0;\n\n    if (modalBody) {\n      modalBody.scrollTop = 0;\n    }\n\n    if (isAnimated) {\n      reflow(this._element);\n    }\n\n    this._element.classList.add(CLASS_NAME_SHOW$5);\n\n    if (this._config.focus) {\n      this._enforceFocus();\n    }\n\n    const transitionComplete = () => {\n      if (this._config.focus) {\n        this._element.focus();\n      }\n\n      this._isTransitioning = false;\n      EventHandler.trigger(this._element, EVENT_SHOWN$3, {\n        relatedTarget\n      });\n    };\n\n    this._queueCallback(transitionComplete, this._dialog, isAnimated);\n  }\n\n  _enforceFocus() {\n    EventHandler.off(document, EVENT_FOCUSIN$2); // guard against infinite focus loop\n\n    EventHandler.on(document, EVENT_FOCUSIN$2, event => {\n      if (document !== event.target && this._element !== event.target && !this._element.contains(event.target)) {\n        this._element.focus();\n      }\n    });\n  }\n\n  _setEscapeEvent() {\n    if (this._isShown) {\n      EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS$1, event => {\n        if (this._config.keyboard && event.key === ESCAPE_KEY$1) {\n          event.preventDefault();\n          this.hide();\n        } else if (!this._config.keyboard && event.key === ESCAPE_KEY$1) {\n          this._triggerBackdropTransition();\n        }\n      });\n    } else {\n      EventHandler.off(this._element, EVENT_KEYDOWN_DISMISS$1);\n    }\n  }\n\n  _setResizeEvent() {\n    if (this._isShown) {\n      EventHandler.on(window, EVENT_RESIZE, () => this._adjustDialog());\n    } else {\n      EventHandler.off(window, EVENT_RESIZE);\n    }\n  }\n\n  _hideModal() {\n    this._element.style.display = 'none';\n\n    this._element.setAttribute('aria-hidden', true);\n\n    this._element.removeAttribute('aria-modal');\n\n    this._element.removeAttribute('role');\n\n    this._isTransitioning = false;\n\n    this._backdrop.hide(() => {\n      document.body.classList.remove(CLASS_NAME_OPEN);\n\n      this._resetAdjustments();\n\n      this._scrollBar.reset();\n\n      EventHandler.trigger(this._element, EVENT_HIDDEN$3);\n    });\n  }\n\n  _showBackdrop(callback) {\n    EventHandler.on(this._element, EVENT_CLICK_DISMISS$2, event => {\n      if (this._ignoreBackdropClick) {\n        this._ignoreBackdropClick = false;\n        return;\n      }\n\n      if (event.target !== event.currentTarget) {\n        return;\n      }\n\n      if (this._config.backdrop === true) {\n        this.hide();\n      } else if (this._config.backdrop === 'static') {\n        this._triggerBackdropTransition();\n      }\n    });\n\n    this._backdrop.show(callback);\n  }\n\n  _isAnimated() {\n    return this._element.classList.contains(CLASS_NAME_FADE$4);\n  }\n\n  _triggerBackdropTransition() {\n    const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED);\n\n    if (hideEvent.defaultPrevented) {\n      return;\n    }\n\n    const {\n      classList,\n      scrollHeight,\n      style\n    } = this._element;\n    const isModalOverflowing = scrollHeight > document.documentElement.clientHeight; // return if the following background transition hasn't yet completed\n\n    if (!isModalOverflowing && style.overflowY === 'hidden' || classList.contains(CLASS_NAME_STATIC)) {\n      return;\n    }\n\n    if (!isModalOverflowing) {\n      style.overflowY = 'hidden';\n    }\n\n    classList.add(CLASS_NAME_STATIC);\n\n    this._queueCallback(() => {\n      classList.remove(CLASS_NAME_STATIC);\n\n      if (!isModalOverflowing) {\n        this._queueCallback(() => {\n          style.overflowY = '';\n        }, this._dialog);\n      }\n    }, this._dialog);\n\n    this._element.focus();\n  } // ----------------------------------------------------------------------\n  // the following methods are used to handle overflowing modals\n  // ----------------------------------------------------------------------\n\n\n  _adjustDialog() {\n    const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;\n\n    const scrollbarWidth = this._scrollBar.getWidth();\n\n    const isBodyOverflowing = scrollbarWidth > 0;\n\n    if (!isBodyOverflowing && isModalOverflowing && !isRTL() || isBodyOverflowing && !isModalOverflowing && isRTL()) {\n      this._element.style.paddingLeft = `${scrollbarWidth}px`;\n    }\n\n    if (isBodyOverflowing && !isModalOverflowing && !isRTL() || !isBodyOverflowing && isModalOverflowing && isRTL()) {\n      this._element.style.paddingRight = `${scrollbarWidth}px`;\n    }\n  }\n\n  _resetAdjustments() {\n    this._element.style.paddingLeft = '';\n    this._element.style.paddingRight = '';\n  } // Static\n\n\n  static jQueryInterface(config, relatedTarget) {\n    return this.each(function () {\n      const data = Modal.getOrCreateInstance(this, config);\n\n      if (typeof config !== 'string') {\n        return;\n      }\n\n      if (typeof data[config] === 'undefined') {\n        throw new TypeError(`No method named \"${config}\"`);\n      }\n\n      data[config](relatedTarget);\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$2, SELECTOR_DATA_TOGGLE$2, function (event) {\n  const target = getElementFromSelector(this);\n\n  if (['A', 'AREA'].includes(this.tagName)) {\n    event.preventDefault();\n  }\n\n  EventHandler.one(target, EVENT_SHOW$3, showEvent => {\n    if (showEvent.defaultPrevented) {\n      // only register focus restorer if modal will actually get shown\n      return;\n    }\n\n    EventHandler.one(target, EVENT_HIDDEN$3, () => {\n      if (isVisible(this)) {\n        this.focus();\n      }\n    });\n  });\n  const data = Modal.getOrCreateInstance(target);\n  data.toggle(this);\n});\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Modal to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Modal);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): offcanvas.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$5 = 'offcanvas';\nconst DATA_KEY$5 = 'bs.offcanvas';\nconst EVENT_KEY$5 = `.${DATA_KEY$5}`;\nconst DATA_API_KEY$2 = '.data-api';\nconst EVENT_LOAD_DATA_API$1 = `load${EVENT_KEY$5}${DATA_API_KEY$2}`;\nconst ESCAPE_KEY = 'Escape';\nconst Default$4 = {\n  backdrop: true,\n  keyboard: true,\n  scroll: false\n};\nconst DefaultType$4 = {\n  backdrop: 'boolean',\n  keyboard: 'boolean',\n  scroll: 'boolean'\n};\nconst CLASS_NAME_SHOW$4 = 'show';\nconst OPEN_SELECTOR = '.offcanvas.show';\nconst EVENT_SHOW$2 = `show${EVENT_KEY$5}`;\nconst EVENT_SHOWN$2 = `shown${EVENT_KEY$5}`;\nconst EVENT_HIDE$2 = `hide${EVENT_KEY$5}`;\nconst EVENT_HIDDEN$2 = `hidden${EVENT_KEY$5}`;\nconst EVENT_FOCUSIN$1 = `focusin${EVENT_KEY$5}`;\nconst EVENT_CLICK_DATA_API$1 = `click${EVENT_KEY$5}${DATA_API_KEY$2}`;\nconst EVENT_CLICK_DISMISS$1 = `click.dismiss${EVENT_KEY$5}`;\nconst EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY$5}`;\nconst SELECTOR_DATA_DISMISS$1 = '[data-bs-dismiss=\"offcanvas\"]';\nconst SELECTOR_DATA_TOGGLE$1 = '[data-bs-toggle=\"offcanvas\"]';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Offcanvas extends BaseComponent {\n  constructor(element, config) {\n    super(element);\n    this._config = this._getConfig(config);\n    this._isShown = false;\n    this._backdrop = this._initializeBackDrop();\n\n    this._addEventListeners();\n  } // Getters\n\n\n  static get NAME() {\n    return NAME$5;\n  }\n\n  static get Default() {\n    return Default$4;\n  } // Public\n\n\n  toggle(relatedTarget) {\n    return this._isShown ? this.hide() : this.show(relatedTarget);\n  }\n\n  show(relatedTarget) {\n    if (this._isShown) {\n      return;\n    }\n\n    const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$2, {\n      relatedTarget\n    });\n\n    if (showEvent.defaultPrevented) {\n      return;\n    }\n\n    this._isShown = true;\n    this._element.style.visibility = 'visible';\n\n    this._backdrop.show();\n\n    if (!this._config.scroll) {\n      new ScrollBarHelper().hide();\n\n      this._enforceFocusOnElement(this._element);\n    }\n\n    this._element.removeAttribute('aria-hidden');\n\n    this._element.setAttribute('aria-modal', true);\n\n    this._element.setAttribute('role', 'dialog');\n\n    this._element.classList.add(CLASS_NAME_SHOW$4);\n\n    const completeCallBack = () => {\n      EventHandler.trigger(this._element, EVENT_SHOWN$2, {\n        relatedTarget\n      });\n    };\n\n    this._queueCallback(completeCallBack, this._element, true);\n  }\n\n  hide() {\n    if (!this._isShown) {\n      return;\n    }\n\n    const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$2);\n\n    if (hideEvent.defaultPrevented) {\n      return;\n    }\n\n    EventHandler.off(document, EVENT_FOCUSIN$1);\n\n    this._element.blur();\n\n    this._isShown = false;\n\n    this._element.classList.remove(CLASS_NAME_SHOW$4);\n\n    this._backdrop.hide();\n\n    const completeCallback = () => {\n      this._element.setAttribute('aria-hidden', true);\n\n      this._element.removeAttribute('aria-modal');\n\n      this._element.removeAttribute('role');\n\n      this._element.style.visibility = 'hidden';\n\n      if (!this._config.scroll) {\n        new ScrollBarHelper().reset();\n      }\n\n      EventHandler.trigger(this._element, EVENT_HIDDEN$2);\n    };\n\n    this._queueCallback(completeCallback, this._element, true);\n  }\n\n  dispose() {\n    this._backdrop.dispose();\n\n    super.dispose();\n    EventHandler.off(document, EVENT_FOCUSIN$1);\n  } // Private\n\n\n  _getConfig(config) {\n    config = { ...Default$4,\n      ...Manipulator.getDataAttributes(this._element),\n      ...(typeof config === 'object' ? config : {})\n    };\n    typeCheckConfig(NAME$5, config, DefaultType$4);\n    return config;\n  }\n\n  _initializeBackDrop() {\n    return new Backdrop({\n      isVisible: this._config.backdrop,\n      isAnimated: true,\n      rootElement: this._element.parentNode,\n      clickCallback: () => this.hide()\n    });\n  }\n\n  _enforceFocusOnElement(element) {\n    EventHandler.off(document, EVENT_FOCUSIN$1); // guard against infinite focus loop\n\n    EventHandler.on(document, EVENT_FOCUSIN$1, event => {\n      if (document !== event.target && element !== event.target && !element.contains(event.target)) {\n        element.focus();\n      }\n    });\n    element.focus();\n  }\n\n  _addEventListeners() {\n    EventHandler.on(this._element, EVENT_CLICK_DISMISS$1, SELECTOR_DATA_DISMISS$1, () => this.hide());\n    EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS, event => {\n      if (this._config.keyboard && event.key === ESCAPE_KEY) {\n        this.hide();\n      }\n    });\n  } // Static\n\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Offcanvas.getOrCreateInstance(this, config);\n\n      if (typeof config !== 'string') {\n        return;\n      }\n\n      if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n        throw new TypeError(`No method named \"${config}\"`);\n      }\n\n      data[config](this);\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$1, SELECTOR_DATA_TOGGLE$1, function (event) {\n  const target = getElementFromSelector(this);\n\n  if (['A', 'AREA'].includes(this.tagName)) {\n    event.preventDefault();\n  }\n\n  if (isDisabled(this)) {\n    return;\n  }\n\n  EventHandler.one(target, EVENT_HIDDEN$2, () => {\n    // focus on trigger when it is closed\n    if (isVisible(this)) {\n      this.focus();\n    }\n  }); // avoid conflict when clicking a toggler of an offcanvas, while another is open\n\n  const allReadyOpen = SelectorEngine.findOne(OPEN_SELECTOR);\n\n  if (allReadyOpen && allReadyOpen !== target) {\n    Offcanvas.getInstance(allReadyOpen).hide();\n  }\n\n  const data = Offcanvas.getOrCreateInstance(target);\n  data.toggle(this);\n});\nEventHandler.on(window, EVENT_LOAD_DATA_API$1, () => SelectorEngine.find(OPEN_SELECTOR).forEach(el => Offcanvas.getOrCreateInstance(el).show()));\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\ndefineJQueryPlugin(Offcanvas);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): util/sanitizer.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\nconst uriAttrs = new Set(['background', 'cite', 'href', 'itemtype', 'longdesc', 'poster', 'src', 'xlink:href']);\nconst ARIA_ATTRIBUTE_PATTERN = /^aria-[\\w-]*$/i;\n/**\n * A pattern that recognizes a commonly useful subset of URLs that are safe.\n *\n * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts\n */\n\nconst SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file):|[^#&/:?]*(?:[#/?]|$))/i;\n/**\n * A pattern that matches safe data URLs. Only matches image, video and audio types.\n *\n * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts\n */\n\nconst DATA_URL_PATTERN = /^data:(?:image\\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\\/(?:mpeg|mp4|ogg|webm)|audio\\/(?:mp3|oga|ogg|opus));base64,[\\d+/a-z]+=*$/i;\n\nconst allowedAttribute = (attr, allowedAttributeList) => {\n  const attrName = attr.nodeName.toLowerCase();\n\n  if (allowedAttributeList.includes(attrName)) {\n    if (uriAttrs.has(attrName)) {\n      return Boolean(SAFE_URL_PATTERN.test(attr.nodeValue) || DATA_URL_PATTERN.test(attr.nodeValue));\n    }\n\n    return true;\n  }\n\n  const regExp = allowedAttributeList.filter(attrRegex => attrRegex instanceof RegExp); // Check if a regular expression validates the attribute.\n\n  for (let i = 0, len = regExp.length; i < len; i++) {\n    if (regExp[i].test(attrName)) {\n      return true;\n    }\n  }\n\n  return false;\n};\n\nconst DefaultAllowlist = {\n  // Global attributes allowed on any supplied element below.\n  '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],\n  a: ['target', 'href', 'title', 'rel'],\n  area: [],\n  b: [],\n  br: [],\n  col: [],\n  code: [],\n  div: [],\n  em: [],\n  hr: [],\n  h1: [],\n  h2: [],\n  h3: [],\n  h4: [],\n  h5: [],\n  h6: [],\n  i: [],\n  img: ['src', 'srcset', 'alt', 'title', 'width', 'height'],\n  li: [],\n  ol: [],\n  p: [],\n  pre: [],\n  s: [],\n  small: [],\n  span: [],\n  sub: [],\n  sup: [],\n  strong: [],\n  u: [],\n  ul: []\n};\nfunction sanitizeHtml(unsafeHtml, allowList, sanitizeFn) {\n  if (!unsafeHtml.length) {\n    return unsafeHtml;\n  }\n\n  if (sanitizeFn && typeof sanitizeFn === 'function') {\n    return sanitizeFn(unsafeHtml);\n  }\n\n  const domParser = new window.DOMParser();\n  const createdDocument = domParser.parseFromString(unsafeHtml, 'text/html');\n  const allowlistKeys = Object.keys(allowList);\n  const elements = [].concat(...createdDocument.body.querySelectorAll('*'));\n\n  for (let i = 0, len = elements.length; i < len; i++) {\n    const el = elements[i];\n    const elName = el.nodeName.toLowerCase();\n\n    if (!allowlistKeys.includes(elName)) {\n      el.remove();\n      continue;\n    }\n\n    const attributeList = [].concat(...el.attributes);\n    const allowedAttributes = [].concat(allowList['*'] || [], allowList[elName] || []);\n    attributeList.forEach(attr => {\n      if (!allowedAttribute(attr, allowedAttributes)) {\n        el.removeAttribute(attr.nodeName);\n      }\n    });\n  }\n\n  return createdDocument.body.innerHTML;\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): tooltip.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$4 = 'tooltip';\nconst DATA_KEY$4 = 'bs.tooltip';\nconst EVENT_KEY$4 = `.${DATA_KEY$4}`;\nconst CLASS_PREFIX$1 = 'bs-tooltip';\nconst BSCLS_PREFIX_REGEX$1 = new RegExp(`(^|\\\\s)${CLASS_PREFIX$1}\\\\S+`, 'g');\nconst DISALLOWED_ATTRIBUTES = new Set(['sanitize', 'allowList', 'sanitizeFn']);\nconst DefaultType$3 = {\n  animation: 'boolean',\n  template: 'string',\n  title: '(string|element|function)',\n  trigger: 'string',\n  delay: '(number|object)',\n  html: 'boolean',\n  selector: '(string|boolean)',\n  placement: '(string|function)',\n  offset: '(array|string|function)',\n  container: '(string|element|boolean)',\n  fallbackPlacements: 'array',\n  boundary: '(string|element)',\n  customClass: '(string|function)',\n  sanitize: 'boolean',\n  sanitizeFn: '(null|function)',\n  allowList: 'object',\n  popperConfig: '(null|object|function)'\n};\nconst AttachmentMap = {\n  AUTO: 'auto',\n  TOP: 'top',\n  RIGHT: isRTL() ? 'left' : 'right',\n  BOTTOM: 'bottom',\n  LEFT: isRTL() ? 'right' : 'left'\n};\nconst Default$3 = {\n  animation: true,\n  template: '<div class=\"tooltip\" role=\"tooltip\">' + '<div class=\"tooltip-arrow\"></div>' + '<div class=\"tooltip-inner\"></div>' + '</div>',\n  trigger: 'hover focus',\n  title: '',\n  delay: 0,\n  html: false,\n  selector: false,\n  placement: 'top',\n  offset: [0, 0],\n  container: false,\n  fallbackPlacements: ['top', 'right', 'bottom', 'left'],\n  boundary: 'clippingParents',\n  customClass: '',\n  sanitize: true,\n  sanitizeFn: null,\n  allowList: DefaultAllowlist,\n  popperConfig: null\n};\nconst Event$2 = {\n  HIDE: `hide${EVENT_KEY$4}`,\n  HIDDEN: `hidden${EVENT_KEY$4}`,\n  SHOW: `show${EVENT_KEY$4}`,\n  SHOWN: `shown${EVENT_KEY$4}`,\n  INSERTED: `inserted${EVENT_KEY$4}`,\n  CLICK: `click${EVENT_KEY$4}`,\n  FOCUSIN: `focusin${EVENT_KEY$4}`,\n  FOCUSOUT: `focusout${EVENT_KEY$4}`,\n  MOUSEENTER: `mouseenter${EVENT_KEY$4}`,\n  MOUSELEAVE: `mouseleave${EVENT_KEY$4}`\n};\nconst CLASS_NAME_FADE$3 = 'fade';\nconst CLASS_NAME_MODAL = 'modal';\nconst CLASS_NAME_SHOW$3 = 'show';\nconst HOVER_STATE_SHOW = 'show';\nconst HOVER_STATE_OUT = 'out';\nconst SELECTOR_TOOLTIP_INNER = '.tooltip-inner';\nconst TRIGGER_HOVER = 'hover';\nconst TRIGGER_FOCUS = 'focus';\nconst TRIGGER_CLICK = 'click';\nconst TRIGGER_MANUAL = 'manual';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Tooltip extends BaseComponent {\n  constructor(element, config) {\n    if (typeof Popper === 'undefined') {\n      throw new TypeError('Bootstrap\\'s tooltips require Popper (https://popper.js.org)');\n    }\n\n    super(element); // private\n\n    this._isEnabled = true;\n    this._timeout = 0;\n    this._hoverState = '';\n    this._activeTrigger = {};\n    this._popper = null; // Protected\n\n    this._config = this._getConfig(config);\n    this.tip = null;\n\n    this._setListeners();\n  } // Getters\n\n\n  static get Default() {\n    return Default$3;\n  }\n\n  static get NAME() {\n    return NAME$4;\n  }\n\n  static get Event() {\n    return Event$2;\n  }\n\n  static get DefaultType() {\n    return DefaultType$3;\n  } // Public\n\n\n  enable() {\n    this._isEnabled = true;\n  }\n\n  disable() {\n    this._isEnabled = false;\n  }\n\n  toggleEnabled() {\n    this._isEnabled = !this._isEnabled;\n  }\n\n  toggle(event) {\n    if (!this._isEnabled) {\n      return;\n    }\n\n    if (event) {\n      const context = this._initializeOnDelegatedTarget(event);\n\n      context._activeTrigger.click = !context._activeTrigger.click;\n\n      if (context._isWithActiveTrigger()) {\n        context._enter(null, context);\n      } else {\n        context._leave(null, context);\n      }\n    } else {\n      if (this.getTipElement().classList.contains(CLASS_NAME_SHOW$3)) {\n        this._leave(null, this);\n\n        return;\n      }\n\n      this._enter(null, this);\n    }\n  }\n\n  dispose() {\n    clearTimeout(this._timeout);\n    EventHandler.off(this._element.closest(`.${CLASS_NAME_MODAL}`), 'hide.bs.modal', this._hideModalHandler);\n\n    if (this.tip) {\n      this.tip.remove();\n    }\n\n    if (this._popper) {\n      this._popper.destroy();\n    }\n\n    super.dispose();\n  }\n\n  show() {\n    if (this._element.style.display === 'none') {\n      throw new Error('Please use show on visible elements');\n    }\n\n    if (!(this.isWithContent() && this._isEnabled)) {\n      return;\n    }\n\n    const showEvent = EventHandler.trigger(this._element, this.constructor.Event.SHOW);\n    const shadowRoot = findShadowRoot(this._element);\n    const isInTheDom = shadowRoot === null ? this._element.ownerDocument.documentElement.contains(this._element) : shadowRoot.contains(this._element);\n\n    if (showEvent.defaultPrevented || !isInTheDom) {\n      return;\n    }\n\n    const tip = this.getTipElement();\n    const tipId = getUID(this.constructor.NAME);\n    tip.setAttribute('id', tipId);\n\n    this._element.setAttribute('aria-describedby', tipId);\n\n    this.setContent();\n\n    if (this._config.animation) {\n      tip.classList.add(CLASS_NAME_FADE$3);\n    }\n\n    const placement = typeof this._config.placement === 'function' ? this._config.placement.call(this, tip, this._element) : this._config.placement;\n\n    const attachment = this._getAttachment(placement);\n\n    this._addAttachmentClass(attachment);\n\n    const {\n      container\n    } = this._config;\n    Data.set(tip, this.constructor.DATA_KEY, this);\n\n    if (!this._element.ownerDocument.documentElement.contains(this.tip)) {\n      container.appendChild(tip);\n      EventHandler.trigger(this._element, this.constructor.Event.INSERTED);\n    }\n\n    if (this._popper) {\n      this._popper.update();\n    } else {\n      this._popper = Popper.createPopper(this._element, tip, this._getPopperConfig(attachment));\n    }\n\n    tip.classList.add(CLASS_NAME_SHOW$3);\n    const customClass = typeof this._config.customClass === 'function' ? this._config.customClass() : this._config.customClass;\n\n    if (customClass) {\n      tip.classList.add(...customClass.split(' '));\n    } // If this is a touch-enabled device we add extra\n    // empty mouseover listeners to the body's immediate children;\n    // only needed because of broken event delegation on iOS\n    // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n\n\n    if ('ontouchstart' in document.documentElement) {\n      [].concat(...document.body.children).forEach(element => {\n        EventHandler.on(element, 'mouseover', noop);\n      });\n    }\n\n    const complete = () => {\n      const prevHoverState = this._hoverState;\n      this._hoverState = null;\n      EventHandler.trigger(this._element, this.constructor.Event.SHOWN);\n\n      if (prevHoverState === HOVER_STATE_OUT) {\n        this._leave(null, this);\n      }\n    };\n\n    const isAnimated = this.tip.classList.contains(CLASS_NAME_FADE$3);\n\n    this._queueCallback(complete, this.tip, isAnimated);\n  }\n\n  hide() {\n    if (!this._popper) {\n      return;\n    }\n\n    const tip = this.getTipElement();\n\n    const complete = () => {\n      if (this._isWithActiveTrigger()) {\n        return;\n      }\n\n      if (this._hoverState !== HOVER_STATE_SHOW) {\n        tip.remove();\n      }\n\n      this._cleanTipClass();\n\n      this._element.removeAttribute('aria-describedby');\n\n      EventHandler.trigger(this._element, this.constructor.Event.HIDDEN);\n\n      if (this._popper) {\n        this._popper.destroy();\n\n        this._popper = null;\n      }\n    };\n\n    const hideEvent = EventHandler.trigger(this._element, this.constructor.Event.HIDE);\n\n    if (hideEvent.defaultPrevented) {\n      return;\n    }\n\n    tip.classList.remove(CLASS_NAME_SHOW$3); // If this is a touch-enabled device we remove the extra\n    // empty mouseover listeners we added for iOS support\n\n    if ('ontouchstart' in document.documentElement) {\n      [].concat(...document.body.children).forEach(element => EventHandler.off(element, 'mouseover', noop));\n    }\n\n    this._activeTrigger[TRIGGER_CLICK] = false;\n    this._activeTrigger[TRIGGER_FOCUS] = false;\n    this._activeTrigger[TRIGGER_HOVER] = false;\n    const isAnimated = this.tip.classList.contains(CLASS_NAME_FADE$3);\n\n    this._queueCallback(complete, this.tip, isAnimated);\n\n    this._hoverState = '';\n  }\n\n  update() {\n    if (this._popper !== null) {\n      this._popper.update();\n    }\n  } // Protected\n\n\n  isWithContent() {\n    return Boolean(this.getTitle());\n  }\n\n  getTipElement() {\n    if (this.tip) {\n      return this.tip;\n    }\n\n    const element = document.createElement('div');\n    element.innerHTML = this._config.template;\n    this.tip = element.children[0];\n    return this.tip;\n  }\n\n  setContent() {\n    const tip = this.getTipElement();\n    this.setElementContent(SelectorEngine.findOne(SELECTOR_TOOLTIP_INNER, tip), this.getTitle());\n    tip.classList.remove(CLASS_NAME_FADE$3, CLASS_NAME_SHOW$3);\n  }\n\n  setElementContent(element, content) {\n    if (element === null) {\n      return;\n    }\n\n    if (isElement(content)) {\n      content = getElement(content); // content is a DOM node or a jQuery\n\n      if (this._config.html) {\n        if (content.parentNode !== element) {\n          element.innerHTML = '';\n          element.appendChild(content);\n        }\n      } else {\n        element.textContent = content.textContent;\n      }\n\n      return;\n    }\n\n    if (this._config.html) {\n      if (this._config.sanitize) {\n        content = sanitizeHtml(content, this._config.allowList, this._config.sanitizeFn);\n      }\n\n      element.innerHTML = content;\n    } else {\n      element.textContent = content;\n    }\n  }\n\n  getTitle() {\n    let title = this._element.getAttribute('data-bs-original-title');\n\n    if (!title) {\n      title = typeof this._config.title === 'function' ? this._config.title.call(this._element) : this._config.title;\n    }\n\n    return title;\n  }\n\n  updateAttachment(attachment) {\n    if (attachment === 'right') {\n      return 'end';\n    }\n\n    if (attachment === 'left') {\n      return 'start';\n    }\n\n    return attachment;\n  } // Private\n\n\n  _initializeOnDelegatedTarget(event, context) {\n    const dataKey = this.constructor.DATA_KEY;\n    context = context || Data.get(event.delegateTarget, dataKey);\n\n    if (!context) {\n      context = new this.constructor(event.delegateTarget, this._getDelegateConfig());\n      Data.set(event.delegateTarget, dataKey, context);\n    }\n\n    return context;\n  }\n\n  _getOffset() {\n    const {\n      offset\n    } = this._config;\n\n    if (typeof offset === 'string') {\n      return offset.split(',').map(val => Number.parseInt(val, 10));\n    }\n\n    if (typeof offset === 'function') {\n      return popperData => offset(popperData, this._element);\n    }\n\n    return offset;\n  }\n\n  _getPopperConfig(attachment) {\n    const defaultBsPopperConfig = {\n      placement: attachment,\n      modifiers: [{\n        name: 'flip',\n        options: {\n          fallbackPlacements: this._config.fallbackPlacements\n        }\n      }, {\n        name: 'offset',\n        options: {\n          offset: this._getOffset()\n        }\n      }, {\n        name: 'preventOverflow',\n        options: {\n          boundary: this._config.boundary\n        }\n      }, {\n        name: 'arrow',\n        options: {\n          element: `.${this.constructor.NAME}-arrow`\n        }\n      }, {\n        name: 'onChange',\n        enabled: true,\n        phase: 'afterWrite',\n        fn: data => this._handlePopperPlacementChange(data)\n      }],\n      onFirstUpdate: data => {\n        if (data.options.placement !== data.placement) {\n          this._handlePopperPlacementChange(data);\n        }\n      }\n    };\n    return { ...defaultBsPopperConfig,\n      ...(typeof this._config.popperConfig === 'function' ? this._config.popperConfig(defaultBsPopperConfig) : this._config.popperConfig)\n    };\n  }\n\n  _addAttachmentClass(attachment) {\n    this.getTipElement().classList.add(`${CLASS_PREFIX$1}-${this.updateAttachment(attachment)}`);\n  }\n\n  _getAttachment(placement) {\n    return AttachmentMap[placement.toUpperCase()];\n  }\n\n  _setListeners() {\n    const triggers = this._config.trigger.split(' ');\n\n    triggers.forEach(trigger => {\n      if (trigger === 'click') {\n        EventHandler.on(this._element, this.constructor.Event.CLICK, this._config.selector, event => this.toggle(event));\n      } else if (trigger !== TRIGGER_MANUAL) {\n        const eventIn = trigger === TRIGGER_HOVER ? this.constructor.Event.MOUSEENTER : this.constructor.Event.FOCUSIN;\n        const eventOut = trigger === TRIGGER_HOVER ? this.constructor.Event.MOUSELEAVE : this.constructor.Event.FOCUSOUT;\n        EventHandler.on(this._element, eventIn, this._config.selector, event => this._enter(event));\n        EventHandler.on(this._element, eventOut, this._config.selector, event => this._leave(event));\n      }\n    });\n\n    this._hideModalHandler = () => {\n      if (this._element) {\n        this.hide();\n      }\n    };\n\n    EventHandler.on(this._element.closest(`.${CLASS_NAME_MODAL}`), 'hide.bs.modal', this._hideModalHandler);\n\n    if (this._config.selector) {\n      this._config = { ...this._config,\n        trigger: 'manual',\n        selector: ''\n      };\n    } else {\n      this._fixTitle();\n    }\n  }\n\n  _fixTitle() {\n    const title = this._element.getAttribute('title');\n\n    const originalTitleType = typeof this._element.getAttribute('data-bs-original-title');\n\n    if (title || originalTitleType !== 'string') {\n      this._element.setAttribute('data-bs-original-title', title || '');\n\n      if (title && !this._element.getAttribute('aria-label') && !this._element.textContent) {\n        this._element.setAttribute('aria-label', title);\n      }\n\n      this._element.setAttribute('title', '');\n    }\n  }\n\n  _enter(event, context) {\n    context = this._initializeOnDelegatedTarget(event, context);\n\n    if (event) {\n      context._activeTrigger[event.type === 'focusin' ? TRIGGER_FOCUS : TRIGGER_HOVER] = true;\n    }\n\n    if (context.getTipElement().classList.contains(CLASS_NAME_SHOW$3) || context._hoverState === HOVER_STATE_SHOW) {\n      context._hoverState = HOVER_STATE_SHOW;\n      return;\n    }\n\n    clearTimeout(context._timeout);\n    context._hoverState = HOVER_STATE_SHOW;\n\n    if (!context._config.delay || !context._config.delay.show) {\n      context.show();\n      return;\n    }\n\n    context._timeout = setTimeout(() => {\n      if (context._hoverState === HOVER_STATE_SHOW) {\n        context.show();\n      }\n    }, context._config.delay.show);\n  }\n\n  _leave(event, context) {\n    context = this._initializeOnDelegatedTarget(event, context);\n\n    if (event) {\n      context._activeTrigger[event.type === 'focusout' ? TRIGGER_FOCUS : TRIGGER_HOVER] = context._element.contains(event.relatedTarget);\n    }\n\n    if (context._isWithActiveTrigger()) {\n      return;\n    }\n\n    clearTimeout(context._timeout);\n    context._hoverState = HOVER_STATE_OUT;\n\n    if (!context._config.delay || !context._config.delay.hide) {\n      context.hide();\n      return;\n    }\n\n    context._timeout = setTimeout(() => {\n      if (context._hoverState === HOVER_STATE_OUT) {\n        context.hide();\n      }\n    }, context._config.delay.hide);\n  }\n\n  _isWithActiveTrigger() {\n    for (const trigger in this._activeTrigger) {\n      if (this._activeTrigger[trigger]) {\n        return true;\n      }\n    }\n\n    return false;\n  }\n\n  _getConfig(config) {\n    const dataAttributes = Manipulator.getDataAttributes(this._element);\n    Object.keys(dataAttributes).forEach(dataAttr => {\n      if (DISALLOWED_ATTRIBUTES.has(dataAttr)) {\n        delete dataAttributes[dataAttr];\n      }\n    });\n    config = { ...this.constructor.Default,\n      ...dataAttributes,\n      ...(typeof config === 'object' && config ? config : {})\n    };\n    config.container = config.container === false ? document.body : getElement(config.container);\n\n    if (typeof config.delay === 'number') {\n      config.delay = {\n        show: config.delay,\n        hide: config.delay\n      };\n    }\n\n    if (typeof config.title === 'number') {\n      config.title = config.title.toString();\n    }\n\n    if (typeof config.content === 'number') {\n      config.content = config.content.toString();\n    }\n\n    typeCheckConfig(NAME$4, config, this.constructor.DefaultType);\n\n    if (config.sanitize) {\n      config.template = sanitizeHtml(config.template, config.allowList, config.sanitizeFn);\n    }\n\n    return config;\n  }\n\n  _getDelegateConfig() {\n    const config = {};\n\n    if (this._config) {\n      for (const key in this._config) {\n        if (this.constructor.Default[key] !== this._config[key]) {\n          config[key] = this._config[key];\n        }\n      }\n    }\n\n    return config;\n  }\n\n  _cleanTipClass() {\n    const tip = this.getTipElement();\n    const tabClass = tip.getAttribute('class').match(BSCLS_PREFIX_REGEX$1);\n\n    if (tabClass !== null && tabClass.length > 0) {\n      tabClass.map(token => token.trim()).forEach(tClass => tip.classList.remove(tClass));\n    }\n  }\n\n  _handlePopperPlacementChange(popperData) {\n    const {\n      state\n    } = popperData;\n\n    if (!state) {\n      return;\n    }\n\n    this.tip = state.elements.popper;\n\n    this._cleanTipClass();\n\n    this._addAttachmentClass(this._getAttachment(state.placement));\n  } // Static\n\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Tooltip.getOrCreateInstance(this, config);\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config]();\n      }\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Tooltip to jQuery only if jQuery is present\n */\n\n\ndefineJQueryPlugin(Tooltip);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): popover.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$3 = 'popover';\nconst DATA_KEY$3 = 'bs.popover';\nconst EVENT_KEY$3 = `.${DATA_KEY$3}`;\nconst CLASS_PREFIX = 'bs-popover';\nconst BSCLS_PREFIX_REGEX = new RegExp(`(^|\\\\s)${CLASS_PREFIX}\\\\S+`, 'g');\nconst Default$2 = { ...Tooltip.Default,\n  placement: 'right',\n  offset: [0, 8],\n  trigger: 'click',\n  content: '',\n  template: '<div class=\"popover\" role=\"tooltip\">' + '<div class=\"popover-arrow\"></div>' + '<h3 class=\"popover-header\"></h3>' + '<div class=\"popover-body\"></div>' + '</div>'\n};\nconst DefaultType$2 = { ...Tooltip.DefaultType,\n  content: '(string|element|function)'\n};\nconst Event$1 = {\n  HIDE: `hide${EVENT_KEY$3}`,\n  HIDDEN: `hidden${EVENT_KEY$3}`,\n  SHOW: `show${EVENT_KEY$3}`,\n  SHOWN: `shown${EVENT_KEY$3}`,\n  INSERTED: `inserted${EVENT_KEY$3}`,\n  CLICK: `click${EVENT_KEY$3}`,\n  FOCUSIN: `focusin${EVENT_KEY$3}`,\n  FOCUSOUT: `focusout${EVENT_KEY$3}`,\n  MOUSEENTER: `mouseenter${EVENT_KEY$3}`,\n  MOUSELEAVE: `mouseleave${EVENT_KEY$3}`\n};\nconst CLASS_NAME_FADE$2 = 'fade';\nconst CLASS_NAME_SHOW$2 = 'show';\nconst SELECTOR_TITLE = '.popover-header';\nconst SELECTOR_CONTENT = '.popover-body';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Popover extends Tooltip {\n  // Getters\n  static get Default() {\n    return Default$2;\n  }\n\n  static get NAME() {\n    return NAME$3;\n  }\n\n  static get Event() {\n    return Event$1;\n  }\n\n  static get DefaultType() {\n    return DefaultType$2;\n  } // Overrides\n\n\n  isWithContent() {\n    return this.getTitle() || this._getContent();\n  }\n\n  getTipElement() {\n    if (this.tip) {\n      return this.tip;\n    }\n\n    this.tip = super.getTipElement();\n\n    if (!this.getTitle()) {\n      SelectorEngine.findOne(SELECTOR_TITLE, this.tip).remove();\n    }\n\n    if (!this._getContent()) {\n      SelectorEngine.findOne(SELECTOR_CONTENT, this.tip).remove();\n    }\n\n    return this.tip;\n  }\n\n  setContent() {\n    const tip = this.getTipElement(); // we use append for html objects to maintain js events\n\n    this.setElementContent(SelectorEngine.findOne(SELECTOR_TITLE, tip), this.getTitle());\n\n    let content = this._getContent();\n\n    if (typeof content === 'function') {\n      content = content.call(this._element);\n    }\n\n    this.setElementContent(SelectorEngine.findOne(SELECTOR_CONTENT, tip), content);\n    tip.classList.remove(CLASS_NAME_FADE$2, CLASS_NAME_SHOW$2);\n  } // Private\n\n\n  _addAttachmentClass(attachment) {\n    this.getTipElement().classList.add(`${CLASS_PREFIX}-${this.updateAttachment(attachment)}`);\n  }\n\n  _getContent() {\n    return this._element.getAttribute('data-bs-content') || this._config.content;\n  }\n\n  _cleanTipClass() {\n    const tip = this.getTipElement();\n    const tabClass = tip.getAttribute('class').match(BSCLS_PREFIX_REGEX);\n\n    if (tabClass !== null && tabClass.length > 0) {\n      tabClass.map(token => token.trim()).forEach(tClass => tip.classList.remove(tClass));\n    }\n  } // Static\n\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Popover.getOrCreateInstance(this, config);\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config]();\n      }\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Popover to jQuery only if jQuery is present\n */\n\n\ndefineJQueryPlugin(Popover);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): scrollspy.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$2 = 'scrollspy';\nconst DATA_KEY$2 = 'bs.scrollspy';\nconst EVENT_KEY$2 = `.${DATA_KEY$2}`;\nconst DATA_API_KEY$1 = '.data-api';\nconst Default$1 = {\n  offset: 10,\n  method: 'auto',\n  target: ''\n};\nconst DefaultType$1 = {\n  offset: 'number',\n  method: 'string',\n  target: '(string|element)'\n};\nconst EVENT_ACTIVATE = `activate${EVENT_KEY$2}`;\nconst EVENT_SCROLL = `scroll${EVENT_KEY$2}`;\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY$2}${DATA_API_KEY$1}`;\nconst CLASS_NAME_DROPDOWN_ITEM = 'dropdown-item';\nconst CLASS_NAME_ACTIVE$1 = 'active';\nconst SELECTOR_DATA_SPY = '[data-bs-spy=\"scroll\"]';\nconst SELECTOR_NAV_LIST_GROUP$1 = '.nav, .list-group';\nconst SELECTOR_NAV_LINKS = '.nav-link';\nconst SELECTOR_NAV_ITEMS = '.nav-item';\nconst SELECTOR_LIST_ITEMS = '.list-group-item';\nconst SELECTOR_DROPDOWN$1 = '.dropdown';\nconst SELECTOR_DROPDOWN_TOGGLE$1 = '.dropdown-toggle';\nconst METHOD_OFFSET = 'offset';\nconst METHOD_POSITION = 'position';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass ScrollSpy extends BaseComponent {\n  constructor(element, config) {\n    super(element);\n    this._scrollElement = this._element.tagName === 'BODY' ? window : this._element;\n    this._config = this._getConfig(config);\n    this._selector = `${this._config.target} ${SELECTOR_NAV_LINKS}, ${this._config.target} ${SELECTOR_LIST_ITEMS}, ${this._config.target} .${CLASS_NAME_DROPDOWN_ITEM}`;\n    this._offsets = [];\n    this._targets = [];\n    this._activeTarget = null;\n    this._scrollHeight = 0;\n    EventHandler.on(this._scrollElement, EVENT_SCROLL, () => this._process());\n    this.refresh();\n\n    this._process();\n  } // Getters\n\n\n  static get Default() {\n    return Default$1;\n  }\n\n  static get NAME() {\n    return NAME$2;\n  } // Public\n\n\n  refresh() {\n    const autoMethod = this._scrollElement === this._scrollElement.window ? METHOD_OFFSET : METHOD_POSITION;\n    const offsetMethod = this._config.method === 'auto' ? autoMethod : this._config.method;\n    const offsetBase = offsetMethod === METHOD_POSITION ? this._getScrollTop() : 0;\n    this._offsets = [];\n    this._targets = [];\n    this._scrollHeight = this._getScrollHeight();\n    const targets = SelectorEngine.find(this._selector);\n    targets.map(element => {\n      const targetSelector = getSelectorFromElement(element);\n      const target = targetSelector ? SelectorEngine.findOne(targetSelector) : null;\n\n      if (target) {\n        const targetBCR = target.getBoundingClientRect();\n\n        if (targetBCR.width || targetBCR.height) {\n          return [Manipulator[offsetMethod](target).top + offsetBase, targetSelector];\n        }\n      }\n\n      return null;\n    }).filter(item => item).sort((a, b) => a[0] - b[0]).forEach(item => {\n      this._offsets.push(item[0]);\n\n      this._targets.push(item[1]);\n    });\n  }\n\n  dispose() {\n    EventHandler.off(this._scrollElement, EVENT_KEY$2);\n    super.dispose();\n  } // Private\n\n\n  _getConfig(config) {\n    config = { ...Default$1,\n      ...Manipulator.getDataAttributes(this._element),\n      ...(typeof config === 'object' && config ? config : {})\n    };\n\n    if (typeof config.target !== 'string' && isElement(config.target)) {\n      let {\n        id\n      } = config.target;\n\n      if (!id) {\n        id = getUID(NAME$2);\n        config.target.id = id;\n      }\n\n      config.target = `#${id}`;\n    }\n\n    typeCheckConfig(NAME$2, config, DefaultType$1);\n    return config;\n  }\n\n  _getScrollTop() {\n    return this._scrollElement === window ? this._scrollElement.pageYOffset : this._scrollElement.scrollTop;\n  }\n\n  _getScrollHeight() {\n    return this._scrollElement.scrollHeight || Math.max(document.body.scrollHeight, document.documentElement.scrollHeight);\n  }\n\n  _getOffsetHeight() {\n    return this._scrollElement === window ? window.innerHeight : this._scrollElement.getBoundingClientRect().height;\n  }\n\n  _process() {\n    const scrollTop = this._getScrollTop() + this._config.offset;\n\n    const scrollHeight = this._getScrollHeight();\n\n    const maxScroll = this._config.offset + scrollHeight - this._getOffsetHeight();\n\n    if (this._scrollHeight !== scrollHeight) {\n      this.refresh();\n    }\n\n    if (scrollTop >= maxScroll) {\n      const target = this._targets[this._targets.length - 1];\n\n      if (this._activeTarget !== target) {\n        this._activate(target);\n      }\n\n      return;\n    }\n\n    if (this._activeTarget && scrollTop < this._offsets[0] && this._offsets[0] > 0) {\n      this._activeTarget = null;\n\n      this._clear();\n\n      return;\n    }\n\n    for (let i = this._offsets.length; i--;) {\n      const isActiveTarget = this._activeTarget !== this._targets[i] && scrollTop >= this._offsets[i] && (typeof this._offsets[i + 1] === 'undefined' || scrollTop < this._offsets[i + 1]);\n\n      if (isActiveTarget) {\n        this._activate(this._targets[i]);\n      }\n    }\n  }\n\n  _activate(target) {\n    this._activeTarget = target;\n\n    this._clear();\n\n    const queries = this._selector.split(',').map(selector => `${selector}[data-bs-target=\"${target}\"],${selector}[href=\"${target}\"]`);\n\n    const link = SelectorEngine.findOne(queries.join(','));\n\n    if (link.classList.contains(CLASS_NAME_DROPDOWN_ITEM)) {\n      SelectorEngine.findOne(SELECTOR_DROPDOWN_TOGGLE$1, link.closest(SELECTOR_DROPDOWN$1)).classList.add(CLASS_NAME_ACTIVE$1);\n      link.classList.add(CLASS_NAME_ACTIVE$1);\n    } else {\n      // Set triggered link as active\n      link.classList.add(CLASS_NAME_ACTIVE$1);\n      SelectorEngine.parents(link, SELECTOR_NAV_LIST_GROUP$1).forEach(listGroup => {\n        // Set triggered links parents as active\n        // With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor\n        SelectorEngine.prev(listGroup, `${SELECTOR_NAV_LINKS}, ${SELECTOR_LIST_ITEMS}`).forEach(item => item.classList.add(CLASS_NAME_ACTIVE$1)); // Handle special case when .nav-link is inside .nav-item\n\n        SelectorEngine.prev(listGroup, SELECTOR_NAV_ITEMS).forEach(navItem => {\n          SelectorEngine.children(navItem, SELECTOR_NAV_LINKS).forEach(item => item.classList.add(CLASS_NAME_ACTIVE$1));\n        });\n      });\n    }\n\n    EventHandler.trigger(this._scrollElement, EVENT_ACTIVATE, {\n      relatedTarget: target\n    });\n  }\n\n  _clear() {\n    SelectorEngine.find(this._selector).filter(node => node.classList.contains(CLASS_NAME_ACTIVE$1)).forEach(node => node.classList.remove(CLASS_NAME_ACTIVE$1));\n  } // Static\n\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = ScrollSpy.getOrCreateInstance(this, config);\n\n      if (typeof config !== 'string') {\n        return;\n      }\n\n      if (typeof data[config] === 'undefined') {\n        throw new TypeError(`No method named \"${config}\"`);\n      }\n\n      data[config]();\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n  SelectorEngine.find(SELECTOR_DATA_SPY).forEach(spy => new ScrollSpy(spy));\n});\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .ScrollSpy to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(ScrollSpy);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): tab.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$1 = 'tab';\nconst DATA_KEY$1 = 'bs.tab';\nconst EVENT_KEY$1 = `.${DATA_KEY$1}`;\nconst DATA_API_KEY = '.data-api';\nconst EVENT_HIDE$1 = `hide${EVENT_KEY$1}`;\nconst EVENT_HIDDEN$1 = `hidden${EVENT_KEY$1}`;\nconst EVENT_SHOW$1 = `show${EVENT_KEY$1}`;\nconst EVENT_SHOWN$1 = `shown${EVENT_KEY$1}`;\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY$1}${DATA_API_KEY}`;\nconst CLASS_NAME_DROPDOWN_MENU = 'dropdown-menu';\nconst CLASS_NAME_ACTIVE = 'active';\nconst CLASS_NAME_FADE$1 = 'fade';\nconst CLASS_NAME_SHOW$1 = 'show';\nconst SELECTOR_DROPDOWN = '.dropdown';\nconst SELECTOR_NAV_LIST_GROUP = '.nav, .list-group';\nconst SELECTOR_ACTIVE = '.active';\nconst SELECTOR_ACTIVE_UL = ':scope > li > .active';\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"tab\"], [data-bs-toggle=\"pill\"], [data-bs-toggle=\"list\"]';\nconst SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle';\nconst SELECTOR_DROPDOWN_ACTIVE_CHILD = ':scope > .dropdown-menu .active';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Tab extends BaseComponent {\n  // Getters\n  static get NAME() {\n    return NAME$1;\n  } // Public\n\n\n  show() {\n    if (this._element.parentNode && this._element.parentNode.nodeType === Node.ELEMENT_NODE && this._element.classList.contains(CLASS_NAME_ACTIVE)) {\n      return;\n    }\n\n    let previous;\n    const target = getElementFromSelector(this._element);\n\n    const listElement = this._element.closest(SELECTOR_NAV_LIST_GROUP);\n\n    if (listElement) {\n      const itemSelector = listElement.nodeName === 'UL' || listElement.nodeName === 'OL' ? SELECTOR_ACTIVE_UL : SELECTOR_ACTIVE;\n      previous = SelectorEngine.find(itemSelector, listElement);\n      previous = previous[previous.length - 1];\n    }\n\n    const hideEvent = previous ? EventHandler.trigger(previous, EVENT_HIDE$1, {\n      relatedTarget: this._element\n    }) : null;\n    const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$1, {\n      relatedTarget: previous\n    });\n\n    if (showEvent.defaultPrevented || hideEvent !== null && hideEvent.defaultPrevented) {\n      return;\n    }\n\n    this._activate(this._element, listElement);\n\n    const complete = () => {\n      EventHandler.trigger(previous, EVENT_HIDDEN$1, {\n        relatedTarget: this._element\n      });\n      EventHandler.trigger(this._element, EVENT_SHOWN$1, {\n        relatedTarget: previous\n      });\n    };\n\n    if (target) {\n      this._activate(target, target.parentNode, complete);\n    } else {\n      complete();\n    }\n  } // Private\n\n\n  _activate(element, container, callback) {\n    const activeElements = container && (container.nodeName === 'UL' || container.nodeName === 'OL') ? SelectorEngine.find(SELECTOR_ACTIVE_UL, container) : SelectorEngine.children(container, SELECTOR_ACTIVE);\n    const active = activeElements[0];\n    const isTransitioning = callback && active && active.classList.contains(CLASS_NAME_FADE$1);\n\n    const complete = () => this._transitionComplete(element, active, callback);\n\n    if (active && isTransitioning) {\n      active.classList.remove(CLASS_NAME_SHOW$1);\n\n      this._queueCallback(complete, element, true);\n    } else {\n      complete();\n    }\n  }\n\n  _transitionComplete(element, active, callback) {\n    if (active) {\n      active.classList.remove(CLASS_NAME_ACTIVE);\n      const dropdownChild = SelectorEngine.findOne(SELECTOR_DROPDOWN_ACTIVE_CHILD, active.parentNode);\n\n      if (dropdownChild) {\n        dropdownChild.classList.remove(CLASS_NAME_ACTIVE);\n      }\n\n      if (active.getAttribute('role') === 'tab') {\n        active.setAttribute('aria-selected', false);\n      }\n    }\n\n    element.classList.add(CLASS_NAME_ACTIVE);\n\n    if (element.getAttribute('role') === 'tab') {\n      element.setAttribute('aria-selected', true);\n    }\n\n    reflow(element);\n\n    if (element.classList.contains(CLASS_NAME_FADE$1)) {\n      element.classList.add(CLASS_NAME_SHOW$1);\n    }\n\n    let parent = element.parentNode;\n\n    if (parent && parent.nodeName === 'LI') {\n      parent = parent.parentNode;\n    }\n\n    if (parent && parent.classList.contains(CLASS_NAME_DROPDOWN_MENU)) {\n      const dropdownElement = element.closest(SELECTOR_DROPDOWN);\n\n      if (dropdownElement) {\n        SelectorEngine.find(SELECTOR_DROPDOWN_TOGGLE, dropdownElement).forEach(dropdown => dropdown.classList.add(CLASS_NAME_ACTIVE));\n      }\n\n      element.setAttribute('aria-expanded', true);\n    }\n\n    if (callback) {\n      callback();\n    }\n  } // Static\n\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Tab.getOrCreateInstance(this);\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config]();\n      }\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n  if (['A', 'AREA'].includes(this.tagName)) {\n    event.preventDefault();\n  }\n\n  if (isDisabled(this)) {\n    return;\n  }\n\n  const data = Tab.getOrCreateInstance(this);\n  data.show();\n});\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Tab to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Tab);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): toast.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'toast';\nconst DATA_KEY = 'bs.toast';\nconst EVENT_KEY = `.${DATA_KEY}`;\nconst EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY}`;\nconst EVENT_MOUSEOVER = `mouseover${EVENT_KEY}`;\nconst EVENT_MOUSEOUT = `mouseout${EVENT_KEY}`;\nconst EVENT_FOCUSIN = `focusin${EVENT_KEY}`;\nconst EVENT_FOCUSOUT = `focusout${EVENT_KEY}`;\nconst EVENT_HIDE = `hide${EVENT_KEY}`;\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`;\nconst EVENT_SHOW = `show${EVENT_KEY}`;\nconst EVENT_SHOWN = `shown${EVENT_KEY}`;\nconst CLASS_NAME_FADE = 'fade';\nconst CLASS_NAME_HIDE = 'hide';\nconst CLASS_NAME_SHOW = 'show';\nconst CLASS_NAME_SHOWING = 'showing';\nconst DefaultType = {\n  animation: 'boolean',\n  autohide: 'boolean',\n  delay: 'number'\n};\nconst Default = {\n  animation: true,\n  autohide: true,\n  delay: 5000\n};\nconst SELECTOR_DATA_DISMISS = '[data-bs-dismiss=\"toast\"]';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Toast extends BaseComponent {\n  constructor(element, config) {\n    super(element);\n    this._config = this._getConfig(config);\n    this._timeout = null;\n    this._hasMouseInteraction = false;\n    this._hasKeyboardInteraction = false;\n\n    this._setListeners();\n  } // Getters\n\n\n  static get DefaultType() {\n    return DefaultType;\n  }\n\n  static get Default() {\n    return Default;\n  }\n\n  static get NAME() {\n    return NAME;\n  } // Public\n\n\n  show() {\n    const showEvent = EventHandler.trigger(this._element, EVENT_SHOW);\n\n    if (showEvent.defaultPrevented) {\n      return;\n    }\n\n    this._clearTimeout();\n\n    if (this._config.animation) {\n      this._element.classList.add(CLASS_NAME_FADE);\n    }\n\n    const complete = () => {\n      this._element.classList.remove(CLASS_NAME_SHOWING);\n\n      this._element.classList.add(CLASS_NAME_SHOW);\n\n      EventHandler.trigger(this._element, EVENT_SHOWN);\n\n      this._maybeScheduleHide();\n    };\n\n    this._element.classList.remove(CLASS_NAME_HIDE);\n\n    reflow(this._element);\n\n    this._element.classList.add(CLASS_NAME_SHOWING);\n\n    this._queueCallback(complete, this._element, this._config.animation);\n  }\n\n  hide() {\n    if (!this._element.classList.contains(CLASS_NAME_SHOW)) {\n      return;\n    }\n\n    const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE);\n\n    if (hideEvent.defaultPrevented) {\n      return;\n    }\n\n    const complete = () => {\n      this._element.classList.add(CLASS_NAME_HIDE);\n\n      EventHandler.trigger(this._element, EVENT_HIDDEN);\n    };\n\n    this._element.classList.remove(CLASS_NAME_SHOW);\n\n    this._queueCallback(complete, this._element, this._config.animation);\n  }\n\n  dispose() {\n    this._clearTimeout();\n\n    if (this._element.classList.contains(CLASS_NAME_SHOW)) {\n      this._element.classList.remove(CLASS_NAME_SHOW);\n    }\n\n    super.dispose();\n  } // Private\n\n\n  _getConfig(config) {\n    config = { ...Default,\n      ...Manipulator.getDataAttributes(this._element),\n      ...(typeof config === 'object' && config ? config : {})\n    };\n    typeCheckConfig(NAME, config, this.constructor.DefaultType);\n    return config;\n  }\n\n  _maybeScheduleHide() {\n    if (!this._config.autohide) {\n      return;\n    }\n\n    if (this._hasMouseInteraction || this._hasKeyboardInteraction) {\n      return;\n    }\n\n    this._timeout = setTimeout(() => {\n      this.hide();\n    }, this._config.delay);\n  }\n\n  _onInteraction(event, isInteracting) {\n    switch (event.type) {\n      case 'mouseover':\n      case 'mouseout':\n        this._hasMouseInteraction = isInteracting;\n        break;\n\n      case 'focusin':\n      case 'focusout':\n        this._hasKeyboardInteraction = isInteracting;\n        break;\n    }\n\n    if (isInteracting) {\n      this._clearTimeout();\n\n      return;\n    }\n\n    const nextElement = event.relatedTarget;\n\n    if (this._element === nextElement || this._element.contains(nextElement)) {\n      return;\n    }\n\n    this._maybeScheduleHide();\n  }\n\n  _setListeners() {\n    EventHandler.on(this._element, EVENT_CLICK_DISMISS, SELECTOR_DATA_DISMISS, () => this.hide());\n    EventHandler.on(this._element, EVENT_MOUSEOVER, event => this._onInteraction(event, true));\n    EventHandler.on(this._element, EVENT_MOUSEOUT, event => this._onInteraction(event, false));\n    EventHandler.on(this._element, EVENT_FOCUSIN, event => this._onInteraction(event, true));\n    EventHandler.on(this._element, EVENT_FOCUSOUT, event => this._onInteraction(event, false));\n  }\n\n  _clearTimeout() {\n    clearTimeout(this._timeout);\n    this._timeout = null;\n  } // Static\n\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Toast.getOrCreateInstance(this, config);\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config](this);\n      }\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Toast to jQuery only if jQuery is present\n */\n\n\ndefineJQueryPlugin(Toast);\n\nexport { Alert, Button, Carousel, Collapse, Dropdown, Modal, Offcanvas, Popover, ScrollSpy, Tab, Toast, Tooltip };\n//# sourceMappingURL=bootstrap.esm.js.map\n"
  },
  {
    "path": "src/sourceDev.WebApp/SharedThemes/flatly/wwwroot/js/jquery.js",
    "content": "/*!\n * jQuery JavaScript Library v3.7.0\n * https://jquery.com/\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license\n * https://jquery.org/license\n *\n * Date: 2023-05-11T18:29Z\n */\n(function (global, factory) {\n\n\t\"use strict\";\n\n\tif (typeof module === \"object\" && typeof module.exports === \"object\") {\n\n\t\t// For CommonJS and CommonJS-like environments where a proper `window`\n\t\t// is present, execute the factory and get jQuery.\n\t\t// For environments that do not have a `window` with a `document`\n\t\t// (such as Node.js), expose a factory as module.exports.\n\t\t// This accentuates the need for the creation of a real `window`.\n\t\t// e.g. var jQuery = require(\"jquery\")(window);\n\t\t// See ticket trac-14549 for more info.\n\t\tmodule.exports = global.document ?\n\t\t\tfactory(global, true) :\n\t\t\tfunction (w) {\n\t\t\t\tif (!w.document) {\n\t\t\t\t\tthrow new Error(\"jQuery requires a window with a document\");\n\t\t\t\t}\n\t\t\t\treturn factory(w);\n\t\t\t};\n\t} else {\n\t\tfactory(global);\n\t}\n\n\t// Pass this if window is not defined yet\n})(typeof window !== \"undefined\" ? window : this, function (window, noGlobal) {\n\n\t// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1\n\t// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode\n\t// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common\n\t// enough that all such attempts are guarded in a try block.\n\t\"use strict\";\n\n\tvar arr = [];\n\n\tvar getProto = Object.getPrototypeOf;\n\n\tvar slice = arr.slice;\n\n\tvar flat = arr.flat ? function (array) {\n\t\treturn arr.flat.call(array);\n\t} : function (array) {\n\t\treturn arr.concat.apply([], array);\n\t};\n\n\n\tvar push = arr.push;\n\n\tvar indexOf = arr.indexOf;\n\n\tvar class2type = {};\n\n\tvar toString = class2type.toString;\n\n\tvar hasOwn = class2type.hasOwnProperty;\n\n\tvar fnToString = hasOwn.toString;\n\n\tvar ObjectFunctionString = fnToString.call(Object);\n\n\tvar support = {};\n\n\tvar isFunction = function isFunction(obj) {\n\n\t\t// Support: Chrome <=57, Firefox <=52\n\t\t// In some browsers, typeof returns \"function\" for HTML <object> elements\n\t\t// (i.e., `typeof document.createElement( \"object\" ) === \"function\"`).\n\t\t// We don't want to classify *any* DOM node as a function.\n\t\t// Support: QtWeb <=3.8.5, WebKit <=534.34, wkhtmltopdf tool <=0.12.5\n\t\t// Plus for old WebKit, typeof returns \"function\" for HTML collections\n\t\t// (e.g., `typeof document.getElementsByTagName(\"div\") === \"function\"`). (gh-4756)\n\t\treturn typeof obj === \"function\" && typeof obj.nodeType !== \"number\" &&\n\t\t\ttypeof obj.item !== \"function\";\n\t};\n\n\n\tvar isWindow = function isWindow(obj) {\n\t\treturn obj != null && obj === obj.window;\n\t};\n\n\n\tvar document = window.document;\n\n\n\n\tvar preservedScriptAttributes = {\n\t\ttype: true,\n\t\tsrc: true,\n\t\tnonce: true,\n\t\tnoModule: true\n\t};\n\n\tfunction DOMEval(code, node, doc) {\n\t\tdoc = doc || document;\n\n\t\tvar i, val,\n\t\t\tscript = doc.createElement(\"script\");\n\n\t\tscript.text = code;\n\t\tif (node) {\n\t\t\tfor (i in preservedScriptAttributes) {\n\n\t\t\t\t// Support: Firefox 64+, Edge 18+\n\t\t\t\t// Some browsers don't support the \"nonce\" property on scripts.\n\t\t\t\t// On the other hand, just using `getAttribute` is not enough as\n\t\t\t\t// the `nonce` attribute is reset to an empty string whenever it\n\t\t\t\t// becomes browsing-context connected.\n\t\t\t\t// See https://github.com/whatwg/html/issues/2369\n\t\t\t\t// See https://html.spec.whatwg.org/#nonce-attributes\n\t\t\t\t// The `node.getAttribute` check was added for the sake of\n\t\t\t\t// `jQuery.globalEval` so that it can fake a nonce-containing node\n\t\t\t\t// via an object.\n\t\t\t\tval = node[i] || node.getAttribute && node.getAttribute(i);\n\t\t\t\tif (val) {\n\t\t\t\t\tscript.setAttribute(i, val);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tdoc.head.appendChild(script).parentNode.removeChild(script);\n\t}\n\n\n\tfunction toType(obj) {\n\t\tif (obj == null) {\n\t\t\treturn obj + \"\";\n\t\t}\n\n\t\t// Support: Android <=2.3 only (functionish RegExp)\n\t\treturn typeof obj === \"object\" || typeof obj === \"function\" ?\n\t\t\tclass2type[toString.call(obj)] || \"object\" :\n\t\t\ttypeof obj;\n\t}\n\t/* global Symbol */\n\t// Defining this global in .eslintrc.json would create a danger of using the global\n\t// unguarded in another place, it seems safer to define global only for this module\n\n\n\n\tvar version = \"3.7.0\",\n\n\t\trhtmlSuffix = /HTML$/i,\n\n\t\t// Define a local copy of jQuery\n\t\tjQuery = function (selector, context) {\n\n\t\t\t// The jQuery object is actually just the init constructor 'enhanced'\n\t\t\t// Need init if jQuery is called (just allow error to be thrown if not included)\n\t\t\treturn new jQuery.fn.init(selector, context);\n\t\t};\n\n\tjQuery.fn = jQuery.prototype = {\n\n\t\t// The current version of jQuery being used\n\t\tjquery: version,\n\n\t\tconstructor: jQuery,\n\n\t\t// The default length of a jQuery object is 0\n\t\tlength: 0,\n\n\t\ttoArray: function () {\n\t\t\treturn slice.call(this);\n\t\t},\n\n\t\t// Get the Nth element in the matched element set OR\n\t\t// Get the whole matched element set as a clean array\n\t\tget: function (num) {\n\n\t\t\t// Return all the elements in a clean array\n\t\t\tif (num == null) {\n\t\t\t\treturn slice.call(this);\n\t\t\t}\n\n\t\t\t// Return just the one element from the set\n\t\t\treturn num < 0 ? this[num + this.length] : this[num];\n\t\t},\n\n\t\t// Take an array of elements and push it onto the stack\n\t\t// (returning the new matched element set)\n\t\tpushStack: function (elems) {\n\n\t\t\t// Build a new jQuery matched element set\n\t\t\tvar ret = jQuery.merge(this.constructor(), elems);\n\n\t\t\t// Add the old object onto the stack (as a reference)\n\t\t\tret.prevObject = this;\n\n\t\t\t// Return the newly-formed element set\n\t\t\treturn ret;\n\t\t},\n\n\t\t// Execute a callback for every element in the matched set.\n\t\teach: function (callback) {\n\t\t\treturn jQuery.each(this, callback);\n\t\t},\n\n\t\tmap: function (callback) {\n\t\t\treturn this.pushStack(jQuery.map(this, function (elem, i) {\n\t\t\t\treturn callback.call(elem, i, elem);\n\t\t\t}));\n\t\t},\n\n\t\tslice: function () {\n\t\t\treturn this.pushStack(slice.apply(this, arguments));\n\t\t},\n\n\t\tfirst: function () {\n\t\t\treturn this.eq(0);\n\t\t},\n\n\t\tlast: function () {\n\t\t\treturn this.eq(-1);\n\t\t},\n\n\t\teven: function () {\n\t\t\treturn this.pushStack(jQuery.grep(this, function (_elem, i) {\n\t\t\t\treturn (i + 1) % 2;\n\t\t\t}));\n\t\t},\n\n\t\todd: function () {\n\t\t\treturn this.pushStack(jQuery.grep(this, function (_elem, i) {\n\t\t\t\treturn i % 2;\n\t\t\t}));\n\t\t},\n\n\t\teq: function (i) {\n\t\t\tvar len = this.length,\n\t\t\t\tj = +i + (i < 0 ? len : 0);\n\t\t\treturn this.pushStack(j >= 0 && j < len ? [this[j]] : []);\n\t\t},\n\n\t\tend: function () {\n\t\t\treturn this.prevObject || this.constructor();\n\t\t},\n\n\t\t// For internal use only.\n\t\t// Behaves like an Array's method, not like a jQuery method.\n\t\tpush: push,\n\t\tsort: arr.sort,\n\t\tsplice: arr.splice\n\t};\n\n\tjQuery.extend = jQuery.fn.extend = function () {\n\t\tvar options, name, src, copy, copyIsArray, clone,\n\t\t\ttarget = arguments[0] || {},\n\t\t\ti = 1,\n\t\t\tlength = arguments.length,\n\t\t\tdeep = false;\n\n\t\t// Handle a deep copy situation\n\t\tif (typeof target === \"boolean\") {\n\t\t\tdeep = target;\n\n\t\t\t// Skip the boolean and the target\n\t\t\ttarget = arguments[i] || {};\n\t\t\ti++;\n\t\t}\n\n\t\t// Handle case when target is a string or something (possible in deep copy)\n\t\tif (typeof target !== \"object\" && !isFunction(target)) {\n\t\t\ttarget = {};\n\t\t}\n\n\t\t// Extend jQuery itself if only one argument is passed\n\t\tif (i === length) {\n\t\t\ttarget = this;\n\t\t\ti--;\n\t\t}\n\n\t\tfor (; i < length; i++) {\n\n\t\t\t// Only deal with non-null/undefined values\n\t\t\tif ((options = arguments[i]) != null) {\n\n\t\t\t\t// Extend the base object\n\t\t\t\tfor (name in options) {\n\t\t\t\t\tcopy = options[name];\n\n\t\t\t\t\t// Prevent Object.prototype pollution\n\t\t\t\t\t// Prevent never-ending loop\n\t\t\t\t\tif (name === \"__proto__\" || target === copy) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\t\tif (deep && copy && (jQuery.isPlainObject(copy) ||\n\t\t\t\t\t\t(copyIsArray = Array.isArray(copy)))) {\n\t\t\t\t\t\tsrc = target[name];\n\n\t\t\t\t\t\t// Ensure proper type for the source value\n\t\t\t\t\t\tif (copyIsArray && !Array.isArray(src)) {\n\t\t\t\t\t\t\tclone = [];\n\t\t\t\t\t\t} else if (!copyIsArray && !jQuery.isPlainObject(src)) {\n\t\t\t\t\t\t\tclone = {};\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tclone = src;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcopyIsArray = false;\n\n\t\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\t\ttarget[name] = jQuery.extend(deep, clone, copy);\n\n\t\t\t\t\t\t// Don't bring in undefined values\n\t\t\t\t\t} else if (copy !== undefined) {\n\t\t\t\t\t\ttarget[name] = copy;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Return the modified object\n\t\treturn target;\n\t};\n\n\tjQuery.extend({\n\n\t\t// Unique for each copy of jQuery on the page\n\t\texpando: \"jQuery\" + (version + Math.random()).replace(/\\D/g, \"\"),\n\n\t\t// Assume jQuery is ready without the ready module\n\t\tisReady: true,\n\n\t\terror: function (msg) {\n\t\t\tthrow new Error(msg);\n\t\t},\n\n\t\tnoop: function () { },\n\n\t\tisPlainObject: function (obj) {\n\t\t\tvar proto, Ctor;\n\n\t\t\t// Detect obvious negatives\n\t\t\t// Use toString instead of jQuery.type to catch host objects\n\t\t\tif (!obj || toString.call(obj) !== \"[object Object]\") {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tproto = getProto(obj);\n\n\t\t\t// Objects with no prototype (e.g., `Object.create( null )`) are plain\n\t\t\tif (!proto) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\t// Objects with prototype are plain iff they were constructed by a global Object function\n\t\t\tCtor = hasOwn.call(proto, \"constructor\") && proto.constructor;\n\t\t\treturn typeof Ctor === \"function\" && fnToString.call(Ctor) === ObjectFunctionString;\n\t\t},\n\n\t\tisEmptyObject: function (obj) {\n\t\t\tvar name;\n\n\t\t\tfor (name in obj) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\n\t\t// Evaluates a script in a provided context; falls back to the global one\n\t\t// if not specified.\n\t\tglobalEval: function (code, options, doc) {\n\t\t\tDOMEval(code, { nonce: options && options.nonce }, doc);\n\t\t},\n\n\t\teach: function (obj, callback) {\n\t\t\tvar length, i = 0;\n\n\t\t\tif (isArrayLike(obj)) {\n\t\t\t\tlength = obj.length;\n\t\t\t\tfor (; i < length; i++) {\n\t\t\t\t\tif (callback.call(obj[i], i, obj[i]) === false) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor (i in obj) {\n\t\t\t\t\tif (callback.call(obj[i], i, obj[i]) === false) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn obj;\n\t\t},\n\n\n\t\t// Retrieve the text value of an array of DOM nodes\n\t\ttext: function (elem) {\n\t\t\tvar node,\n\t\t\t\tret = \"\",\n\t\t\t\ti = 0,\n\t\t\t\tnodeType = elem.nodeType;\n\n\t\t\tif (!nodeType) {\n\n\t\t\t\t// If no nodeType, this is expected to be an array\n\t\t\t\twhile ((node = elem[i++])) {\n\n\t\t\t\t\t// Do not traverse comment nodes\n\t\t\t\t\tret += jQuery.text(node);\n\t\t\t\t}\n\t\t\t} else if (nodeType === 1 || nodeType === 9 || nodeType === 11) {\n\t\t\t\treturn elem.textContent;\n\t\t\t} else if (nodeType === 3 || nodeType === 4) {\n\t\t\t\treturn elem.nodeValue;\n\t\t\t}\n\n\t\t\t// Do not include comment or processing instruction nodes\n\n\t\t\treturn ret;\n\t\t},\n\n\t\t// results is for internal usage only\n\t\tmakeArray: function (arr, results) {\n\t\t\tvar ret = results || [];\n\n\t\t\tif (arr != null) {\n\t\t\t\tif (isArrayLike(Object(arr))) {\n\t\t\t\t\tjQuery.merge(ret,\n\t\t\t\t\t\ttypeof arr === \"string\" ?\n\t\t\t\t\t\t\t[arr] : arr\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\tpush.call(ret, arr);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn ret;\n\t\t},\n\n\t\tinArray: function (elem, arr, i) {\n\t\t\treturn arr == null ? -1 : indexOf.call(arr, elem, i);\n\t\t},\n\n\t\tisXMLDoc: function (elem) {\n\t\t\tvar namespace = elem && elem.namespaceURI,\n\t\t\t\tdocElem = elem && (elem.ownerDocument || elem).documentElement;\n\n\t\t\t// Assume HTML when documentElement doesn't yet exist, such as inside\n\t\t\t// document fragments.\n\t\t\treturn !rhtmlSuffix.test(namespace || docElem && docElem.nodeName || \"HTML\");\n\t\t},\n\n\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\tmerge: function (first, second) {\n\t\t\tvar len = +second.length,\n\t\t\t\tj = 0,\n\t\t\t\ti = first.length;\n\n\t\t\tfor (; j < len; j++) {\n\t\t\t\tfirst[i++] = second[j];\n\t\t\t}\n\n\t\t\tfirst.length = i;\n\n\t\t\treturn first;\n\t\t},\n\n\t\tgrep: function (elems, callback, invert) {\n\t\t\tvar callbackInverse,\n\t\t\t\tmatches = [],\n\t\t\t\ti = 0,\n\t\t\t\tlength = elems.length,\n\t\t\t\tcallbackExpect = !invert;\n\n\t\t\t// Go through the array, only saving the items\n\t\t\t// that pass the validator function\n\t\t\tfor (; i < length; i++) {\n\t\t\t\tcallbackInverse = !callback(elems[i], i);\n\t\t\t\tif (callbackInverse !== callbackExpect) {\n\t\t\t\t\tmatches.push(elems[i]);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn matches;\n\t\t},\n\n\t\t// arg is for internal usage only\n\t\tmap: function (elems, callback, arg) {\n\t\t\tvar length, value,\n\t\t\t\ti = 0,\n\t\t\t\tret = [];\n\n\t\t\t// Go through the array, translating each of the items to their new values\n\t\t\tif (isArrayLike(elems)) {\n\t\t\t\tlength = elems.length;\n\t\t\t\tfor (; i < length; i++) {\n\t\t\t\t\tvalue = callback(elems[i], i, arg);\n\n\t\t\t\t\tif (value != null) {\n\t\t\t\t\t\tret.push(value);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Go through every key on the object,\n\t\t\t} else {\n\t\t\t\tfor (i in elems) {\n\t\t\t\t\tvalue = callback(elems[i], i, arg);\n\n\t\t\t\t\tif (value != null) {\n\t\t\t\t\t\tret.push(value);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Flatten any nested arrays\n\t\t\treturn flat(ret);\n\t\t},\n\n\t\t// A global GUID counter for objects\n\t\tguid: 1,\n\n\t\t// jQuery.support is not used in Core but other projects attach their\n\t\t// properties to it so it needs to exist.\n\t\tsupport: support\n\t});\n\n\tif (typeof Symbol === \"function\") {\n\t\tjQuery.fn[Symbol.iterator] = arr[Symbol.iterator];\n\t}\n\n\t// Populate the class2type map\n\tjQuery.each(\"Boolean Number String Function Array Date RegExp Object Error Symbol\".split(\" \"),\n\t\tfunction (_i, name) {\n\t\t\tclass2type[\"[object \" + name + \"]\"] = name.toLowerCase();\n\t\t});\n\n\tfunction isArrayLike(obj) {\n\n\t\t// Support: real iOS 8.2 only (not reproducible in simulator)\n\t\t// `in` check used to prevent JIT error (gh-2145)\n\t\t// hasOwn isn't used here due to false negatives\n\t\t// regarding Nodelist length in IE\n\t\tvar length = !!obj && \"length\" in obj && obj.length,\n\t\t\ttype = toType(obj);\n\n\t\tif (isFunction(obj) || isWindow(obj)) {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn type === \"array\" || length === 0 ||\n\t\t\ttypeof length === \"number\" && length > 0 && (length - 1) in obj;\n\t}\n\n\n\tfunction nodeName(elem, name) {\n\n\t\treturn elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();\n\n\t}\n\tvar pop = arr.pop;\n\n\n\tvar sort = arr.sort;\n\n\n\tvar splice = arr.splice;\n\n\n\tvar whitespace = \"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\";\n\n\n\tvar rtrimCSS = new RegExp(\n\t\t\"^\" + whitespace + \"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\" + whitespace + \"+$\",\n\t\t\"g\"\n\t);\n\n\n\n\n\t// Note: an element does not contain itself\n\tjQuery.contains = function (a, b) {\n\t\tvar bup = b && b.parentNode;\n\n\t\treturn a === bup || !!(bup && bup.nodeType === 1 && (\n\n\t\t\t// Support: IE 9 - 11+\n\t\t\t// IE doesn't have `contains` on SVG.\n\t\t\ta.contains ?\n\t\t\t\ta.contains(bup) :\n\t\t\t\ta.compareDocumentPosition && a.compareDocumentPosition(bup) & 16\n\t\t));\n\t};\n\n\n\n\n\t// CSS string/identifier serialization\n\t// https://drafts.csswg.org/cssom/#common-serializing-idioms\n\tvar rcssescape = /([\\0-\\x1f\\x7f]|^-?\\d)|^-$|[^\\x80-\\uFFFF\\w-]/g;\n\n\tfunction fcssescape(ch, asCodePoint) {\n\t\tif (asCodePoint) {\n\n\t\t\t// U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER\n\t\t\tif (ch === \"\\0\") {\n\t\t\t\treturn \"\\uFFFD\";\n\t\t\t}\n\n\t\t\t// Control characters and (dependent upon position) numbers get escaped as code points\n\t\t\treturn ch.slice(0, -1) + \"\\\\\" + ch.charCodeAt(ch.length - 1).toString(16) + \" \";\n\t\t}\n\n\t\t// Other potentially-special ASCII characters get backslash-escaped\n\t\treturn \"\\\\\" + ch;\n\t}\n\n\tjQuery.escapeSelector = function (sel) {\n\t\treturn (sel + \"\").replace(rcssescape, fcssescape);\n\t};\n\n\n\n\n\tvar preferredDoc = document,\n\t\tpushNative = push;\n\n\t(function () {\n\n\t\tvar i,\n\t\t\tExpr,\n\t\t\toutermostContext,\n\t\t\tsortInput,\n\t\t\thasDuplicate,\n\t\t\tpush = pushNative,\n\n\t\t\t// Local document vars\n\t\t\tdocument,\n\t\t\tdocumentElement,\n\t\t\tdocumentIsHTML,\n\t\t\trbuggyQSA,\n\t\t\tmatches,\n\n\t\t\t// Instance-specific data\n\t\t\texpando = jQuery.expando,\n\t\t\tdirruns = 0,\n\t\t\tdone = 0,\n\t\t\tclassCache = createCache(),\n\t\t\ttokenCache = createCache(),\n\t\t\tcompilerCache = createCache(),\n\t\t\tnonnativeSelectorCache = createCache(),\n\t\t\tsortOrder = function (a, b) {\n\t\t\t\tif (a === b) {\n\t\t\t\t\thasDuplicate = true;\n\t\t\t\t}\n\t\t\t\treturn 0;\n\t\t\t},\n\n\t\t\tbooleans = \"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|\" +\n\t\t\t\t\"loop|multiple|open|readonly|required|scoped\",\n\n\t\t\t// Regular expressions\n\n\t\t\t// https://www.w3.org/TR/css-syntax-3/#ident-token-diagram\n\t\t\tidentifier = \"(?:\\\\\\\\[\\\\da-fA-F]{1,6}\" + whitespace +\n\t\t\t\t\"?|\\\\\\\\[^\\\\r\\\\n\\\\f]|[\\\\w-]|[^\\0-\\\\x7f])+\",\n\n\t\t\t// Attribute selectors: https://www.w3.org/TR/selectors/#attribute-selectors\n\t\t\tattributes = \"\\\\[\" + whitespace + \"*(\" + identifier + \")(?:\" + whitespace +\n\n\t\t\t\t// Operator (capture 2)\n\t\t\t\t\"*([*^$|!~]?=)\" + whitespace +\n\n\t\t\t\t// \"Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]\"\n\t\t\t\t\"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\" + identifier + \"))|)\" +\n\t\t\t\twhitespace + \"*\\\\]\",\n\n\t\t\tpseudos = \":(\" + identifier + \")(?:\\\\((\" +\n\n\t\t\t\t// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:\n\t\t\t\t// 1. quoted (capture 3; capture 4 or capture 5)\n\t\t\t\t\"('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|\" +\n\n\t\t\t\t// 2. simple (capture 6)\n\t\t\t\t\"((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\" + attributes + \")*)|\" +\n\n\t\t\t\t// 3. anything else (capture 2)\n\t\t\t\t\".*\" +\n\t\t\t\t\")\\\\)|)\",\n\n\t\t\t// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter\n\t\t\trwhitespace = new RegExp(whitespace + \"+\", \"g\"),\n\n\t\t\trcomma = new RegExp(\"^\" + whitespace + \"*,\" + whitespace + \"*\"),\n\t\t\trleadingCombinator = new RegExp(\"^\" + whitespace + \"*([>+~]|\" + whitespace + \")\" +\n\t\t\t\twhitespace + \"*\"),\n\t\t\trdescend = new RegExp(whitespace + \"|>\"),\n\n\t\t\trpseudo = new RegExp(pseudos),\n\t\t\tridentifier = new RegExp(\"^\" + identifier + \"$\"),\n\n\t\t\tmatchExpr = {\n\t\t\t\tID: new RegExp(\"^#(\" + identifier + \")\"),\n\t\t\t\tCLASS: new RegExp(\"^\\\\.(\" + identifier + \")\"),\n\t\t\t\tTAG: new RegExp(\"^(\" + identifier + \"|[*])\"),\n\t\t\t\tATTR: new RegExp(\"^\" + attributes),\n\t\t\t\tPSEUDO: new RegExp(\"^\" + pseudos),\n\t\t\t\tCHILD: new RegExp(\n\t\t\t\t\t\"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\" +\n\t\t\t\t\twhitespace + \"*(even|odd|(([+-]|)(\\\\d*)n|)\" + whitespace + \"*(?:([+-]|)\" +\n\t\t\t\t\twhitespace + \"*(\\\\d+)|))\" + whitespace + \"*\\\\)|)\", \"i\"),\n\t\t\t\tbool: new RegExp(\"^(?:\" + booleans + \")$\", \"i\"),\n\n\t\t\t\t// For use in libraries implementing .is()\n\t\t\t\t// We use this for POS matching in `select`\n\t\t\t\tneedsContext: new RegExp(\"^\" + whitespace +\n\t\t\t\t\t\"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\" + whitespace +\n\t\t\t\t\t\"*((?:-\\\\d)?\\\\d*)\" + whitespace + \"*\\\\)|)(?=[^-]|$)\", \"i\")\n\t\t\t},\n\n\t\t\trinputs = /^(?:input|select|textarea|button)$/i,\n\t\t\trheader = /^h\\d$/i,\n\n\t\t\t// Easily-parseable/retrievable ID or TAG or CLASS selectors\n\t\t\trquickExpr = /^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,\n\n\t\t\trsibling = /[+~]/,\n\n\t\t\t// CSS escapes\n\t\t\t// https://www.w3.org/TR/CSS21/syndata.html#escaped-characters\n\t\t\trunescape = new RegExp(\"\\\\\\\\[\\\\da-fA-F]{1,6}\" + whitespace +\n\t\t\t\t\"?|\\\\\\\\([^\\\\r\\\\n\\\\f])\", \"g\"),\n\t\t\tfunescape = function (escape, nonHex) {\n\t\t\t\tvar high = \"0x\" + escape.slice(1) - 0x10000;\n\n\t\t\t\tif (nonHex) {\n\n\t\t\t\t\t// Strip the backslash prefix from a non-hex escape sequence\n\t\t\t\t\treturn nonHex;\n\t\t\t\t}\n\n\t\t\t\t// Replace a hexadecimal escape sequence with the encoded Unicode code point\n\t\t\t\t// Support: IE <=11+\n\t\t\t\t// For values outside the Basic Multilingual Plane (BMP), manually construct a\n\t\t\t\t// surrogate pair\n\t\t\t\treturn high < 0 ?\n\t\t\t\t\tString.fromCharCode(high + 0x10000) :\n\t\t\t\t\tString.fromCharCode(high >> 10 | 0xD800, high & 0x3FF | 0xDC00);\n\t\t\t},\n\n\t\t\t// Used for iframes; see `setDocument`.\n\t\t\t// Support: IE 9 - 11+, Edge 12 - 18+\n\t\t\t// Removing the function wrapper causes a \"Permission Denied\"\n\t\t\t// error in IE/Edge.\n\t\t\tunloadHandler = function () {\n\t\t\t\tsetDocument();\n\t\t\t},\n\n\t\t\tinDisabledFieldset = addCombinator(\n\t\t\t\tfunction (elem) {\n\t\t\t\t\treturn elem.disabled === true && nodeName(elem, \"fieldset\");\n\t\t\t\t},\n\t\t\t\t{ dir: \"parentNode\", next: \"legend\" }\n\t\t\t);\n\n\t\t// Support: IE <=9 only\n\t\t// Accessing document.activeElement can throw unexpectedly\n\t\t// https://bugs.jquery.com/ticket/13393\n\t\tfunction safeActiveElement() {\n\t\t\ttry {\n\t\t\t\treturn document.activeElement;\n\t\t\t} catch (err) { }\n\t\t}\n\n\t\t// Optimize for push.apply( _, NodeList )\n\t\ttry {\n\t\t\tpush.apply(\n\t\t\t\t(arr = slice.call(preferredDoc.childNodes)),\n\t\t\t\tpreferredDoc.childNodes\n\t\t\t);\n\n\t\t\t// Support: Android <=4.0\n\t\t\t// Detect silently failing push.apply\n\t\t\t// eslint-disable-next-line no-unused-expressions\n\t\t\tarr[preferredDoc.childNodes.length].nodeType;\n\t\t} catch (e) {\n\t\t\tpush = {\n\t\t\t\tapply: function (target, els) {\n\t\t\t\t\tpushNative.apply(target, slice.call(els));\n\t\t\t\t},\n\t\t\t\tcall: function (target) {\n\t\t\t\t\tpushNative.apply(target, slice.call(arguments, 1));\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\n\t\tfunction find(selector, context, results, seed) {\n\t\t\tvar m, i, elem, nid, match, groups, newSelector,\n\t\t\t\tnewContext = context && context.ownerDocument,\n\n\t\t\t\t// nodeType defaults to 9, since context defaults to document\n\t\t\t\tnodeType = context ? context.nodeType : 9;\n\n\t\t\tresults = results || [];\n\n\t\t\t// Return early from calls with invalid selector or context\n\t\t\tif (typeof selector !== \"string\" || !selector ||\n\t\t\t\tnodeType !== 1 && nodeType !== 9 && nodeType !== 11) {\n\n\t\t\t\treturn results;\n\t\t\t}\n\n\t\t\t// Try to shortcut find operations (as opposed to filters) in HTML documents\n\t\t\tif (!seed) {\n\t\t\t\tsetDocument(context);\n\t\t\t\tcontext = context || document;\n\n\t\t\t\tif (documentIsHTML) {\n\n\t\t\t\t\t// If the selector is sufficiently simple, try using a \"get*By*\" DOM method\n\t\t\t\t\t// (excepting DocumentFragment context, where the methods don't exist)\n\t\t\t\t\tif (nodeType !== 11 && (match = rquickExpr.exec(selector))) {\n\n\t\t\t\t\t\t// ID selector\n\t\t\t\t\t\tif ((m = match[1])) {\n\n\t\t\t\t\t\t\t// Document context\n\t\t\t\t\t\t\tif (nodeType === 9) {\n\t\t\t\t\t\t\t\tif ((elem = context.getElementById(m))) {\n\n\t\t\t\t\t\t\t\t\t// Support: IE 9 only\n\t\t\t\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\t\t\t\tif (elem.id === m) {\n\t\t\t\t\t\t\t\t\t\tpush.call(results, elem);\n\t\t\t\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t// Element context\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t// Support: IE 9 only\n\t\t\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\t\t\tif (newContext && (elem = newContext.getElementById(m)) &&\n\t\t\t\t\t\t\t\t\tfind.contains(context, elem) &&\n\t\t\t\t\t\t\t\t\telem.id === m) {\n\n\t\t\t\t\t\t\t\t\tpush.call(results, elem);\n\t\t\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Type selector\n\t\t\t\t\t\t} else if (match[2]) {\n\t\t\t\t\t\t\tpush.apply(results, context.getElementsByTagName(selector));\n\t\t\t\t\t\t\treturn results;\n\n\t\t\t\t\t\t\t// Class selector\n\t\t\t\t\t\t} else if ((m = match[3]) && context.getElementsByClassName) {\n\t\t\t\t\t\t\tpush.apply(results, context.getElementsByClassName(m));\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Take advantage of querySelectorAll\n\t\t\t\t\tif (!nonnativeSelectorCache[selector + \" \"] &&\n\t\t\t\t\t\t(!rbuggyQSA || !rbuggyQSA.test(selector))) {\n\n\t\t\t\t\t\tnewSelector = selector;\n\t\t\t\t\t\tnewContext = context;\n\n\t\t\t\t\t\t// qSA considers elements outside a scoping root when evaluating child or\n\t\t\t\t\t\t// descendant combinators, which is not what we want.\n\t\t\t\t\t\t// In such cases, we work around the behavior by prefixing every selector in the\n\t\t\t\t\t\t// list with an ID selector referencing the scope context.\n\t\t\t\t\t\t// The technique has to be used as well when a leading combinator is used\n\t\t\t\t\t\t// as such selectors are not recognized by querySelectorAll.\n\t\t\t\t\t\t// Thanks to Andrew Dupont for this technique.\n\t\t\t\t\t\tif (nodeType === 1 &&\n\t\t\t\t\t\t\t(rdescend.test(selector) || rleadingCombinator.test(selector))) {\n\n\t\t\t\t\t\t\t// Expand context for sibling selectors\n\t\t\t\t\t\t\tnewContext = rsibling.test(selector) && testContext(context.parentNode) ||\n\t\t\t\t\t\t\t\tcontext;\n\n\t\t\t\t\t\t\t// We can use :scope instead of the ID hack if the browser\n\t\t\t\t\t\t\t// supports it & if we're not changing the context.\n\t\t\t\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when\n\t\t\t\t\t\t\t// strict-comparing two documents; shallow comparisons work.\n\t\t\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\t\t\tif (newContext != context || !support.scope) {\n\n\t\t\t\t\t\t\t\t// Capture the context ID, setting it first if necessary\n\t\t\t\t\t\t\t\tif ((nid = context.getAttribute(\"id\"))) {\n\t\t\t\t\t\t\t\t\tnid = jQuery.escapeSelector(nid);\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tcontext.setAttribute(\"id\", (nid = expando));\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Prefix every selector in the list\n\t\t\t\t\t\t\tgroups = tokenize(selector);\n\t\t\t\t\t\t\ti = groups.length;\n\t\t\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\t\t\tgroups[i] = (nid ? \"#\" + nid : \":scope\") + \" \" +\n\t\t\t\t\t\t\t\t\ttoSelector(groups[i]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tnewSelector = groups.join(\",\");\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tpush.apply(results,\n\t\t\t\t\t\t\t\tnewContext.querySelectorAll(newSelector)\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t} catch (qsaError) {\n\t\t\t\t\t\t\tnonnativeSelectorCache(selector, true);\n\t\t\t\t\t\t} finally {\n\t\t\t\t\t\t\tif (nid === expando) {\n\t\t\t\t\t\t\t\tcontext.removeAttribute(\"id\");\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// All others\n\t\t\treturn select(selector.replace(rtrimCSS, \"$1\"), context, results, seed);\n\t\t}\n\n\t\t/**\n\t\t * Create key-value caches of limited size\n\t\t * @returns {function(string, object)} Returns the Object data after storing it on itself with\n\t\t *\tproperty name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)\n\t\t *\tdeleting the oldest entry\n\t\t */\n\t\tfunction createCache() {\n\t\t\tvar keys = [];\n\n\t\t\tfunction cache(key, value) {\n\n\t\t\t\t// Use (key + \" \") to avoid collision with native prototype properties\n\t\t\t\t// (see https://github.com/jquery/sizzle/issues/157)\n\t\t\t\tif (keys.push(key + \" \") > Expr.cacheLength) {\n\n\t\t\t\t\t// Only keep the most recent entries\n\t\t\t\t\tdelete cache[keys.shift()];\n\t\t\t\t}\n\t\t\t\treturn (cache[key + \" \"] = value);\n\t\t\t}\n\t\t\treturn cache;\n\t\t}\n\n\t\t/**\n\t\t * Mark a function for special use by jQuery selector module\n\t\t * @param {Function} fn The function to mark\n\t\t */\n\t\tfunction markFunction(fn) {\n\t\t\tfn[expando] = true;\n\t\t\treturn fn;\n\t\t}\n\n\t\t/**\n\t\t * Support testing using an element\n\t\t * @param {Function} fn Passed the created element and returns a boolean result\n\t\t */\n\t\tfunction assert(fn) {\n\t\t\tvar el = document.createElement(\"fieldset\");\n\n\t\t\ttry {\n\t\t\t\treturn !!fn(el);\n\t\t\t} catch (e) {\n\t\t\t\treturn false;\n\t\t\t} finally {\n\n\t\t\t\t// Remove from its parent by default\n\t\t\t\tif (el.parentNode) {\n\t\t\t\t\tel.parentNode.removeChild(el);\n\t\t\t\t}\n\n\t\t\t\t// release memory in IE\n\t\t\t\tel = null;\n\t\t\t}\n\t\t}\n\n\t\t/**\n\t\t * Returns a function to use in pseudos for input types\n\t\t * @param {String} type\n\t\t */\n\t\tfunction createInputPseudo(type) {\n\t\t\treturn function (elem) {\n\t\t\t\treturn nodeName(elem, \"input\") && elem.type === type;\n\t\t\t};\n\t\t}\n\n\t\t/**\n\t\t * Returns a function to use in pseudos for buttons\n\t\t * @param {String} type\n\t\t */\n\t\tfunction createButtonPseudo(type) {\n\t\t\treturn function (elem) {\n\t\t\t\treturn (nodeName(elem, \"input\") || nodeName(elem, \"button\")) &&\n\t\t\t\t\telem.type === type;\n\t\t\t};\n\t\t}\n\n\t\t/**\n\t\t * Returns a function to use in pseudos for :enabled/:disabled\n\t\t * @param {Boolean} disabled true for :disabled; false for :enabled\n\t\t */\n\t\tfunction createDisabledPseudo(disabled) {\n\n\t\t\t// Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable\n\t\t\treturn function (elem) {\n\n\t\t\t\t// Only certain elements can match :enabled or :disabled\n\t\t\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled\n\t\t\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled\n\t\t\t\tif (\"form\" in elem) {\n\n\t\t\t\t\t// Check for inherited disabledness on relevant non-disabled elements:\n\t\t\t\t\t// * listed form-associated elements in a disabled fieldset\n\t\t\t\t\t//   https://html.spec.whatwg.org/multipage/forms.html#category-listed\n\t\t\t\t\t//   https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled\n\t\t\t\t\t// * option elements in a disabled optgroup\n\t\t\t\t\t//   https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled\n\t\t\t\t\t// All such elements have a \"form\" property.\n\t\t\t\t\tif (elem.parentNode && elem.disabled === false) {\n\n\t\t\t\t\t\t// Option elements defer to a parent optgroup if present\n\t\t\t\t\t\tif (\"label\" in elem) {\n\t\t\t\t\t\t\tif (\"label\" in elem.parentNode) {\n\t\t\t\t\t\t\t\treturn elem.parentNode.disabled === disabled;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\treturn elem.disabled === disabled;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Support: IE 6 - 11+\n\t\t\t\t\t\t// Use the isDisabled shortcut property to check for disabled fieldset ancestors\n\t\t\t\t\t\treturn elem.isDisabled === disabled ||\n\n\t\t\t\t\t\t\t// Where there is no isDisabled, check manually\n\t\t\t\t\t\t\telem.isDisabled !== !disabled &&\n\t\t\t\t\t\t\tinDisabledFieldset(elem) === disabled;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn elem.disabled === disabled;\n\n\t\t\t\t\t// Try to winnow out elements that can't be disabled before trusting the disabled property.\n\t\t\t\t\t// Some victims get caught in our net (label, legend, menu, track), but it shouldn't\n\t\t\t\t\t// even exist on them, let alone have a boolean value.\n\t\t\t\t} else if (\"label\" in elem) {\n\t\t\t\t\treturn elem.disabled === disabled;\n\t\t\t\t}\n\n\t\t\t\t// Remaining elements are neither :enabled nor :disabled\n\t\t\t\treturn false;\n\t\t\t};\n\t\t}\n\n\t\t/**\n\t\t * Returns a function to use in pseudos for positionals\n\t\t * @param {Function} fn\n\t\t */\n\t\tfunction createPositionalPseudo(fn) {\n\t\t\treturn markFunction(function (argument) {\n\t\t\t\targument = +argument;\n\t\t\t\treturn markFunction(function (seed, matches) {\n\t\t\t\t\tvar j,\n\t\t\t\t\t\tmatchIndexes = fn([], seed.length, argument),\n\t\t\t\t\t\ti = matchIndexes.length;\n\n\t\t\t\t\t// Match elements found at the specified indexes\n\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\tif (seed[(j = matchIndexes[i])]) {\n\t\t\t\t\t\t\tseed[j] = !(matches[j] = seed[j]);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\n\t\t/**\n\t\t * Checks a node for validity as a jQuery selector context\n\t\t * @param {Element|Object=} context\n\t\t * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value\n\t\t */\n\t\tfunction testContext(context) {\n\t\t\treturn context && typeof context.getElementsByTagName !== \"undefined\" && context;\n\t\t}\n\n\t\t/**\n\t\t * Sets document-related variables once based on the current document\n\t\t * @param {Element|Object} [node] An element or document object to use to set the document\n\t\t * @returns {Object} Returns the current document\n\t\t */\n\t\tfunction setDocument(node) {\n\t\t\tvar subWindow,\n\t\t\t\tdoc = node ? node.ownerDocument || node : preferredDoc;\n\n\t\t\t// Return early if doc is invalid or already selected\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tif (doc == document || doc.nodeType !== 9 || !doc.documentElement) {\n\t\t\t\treturn document;\n\t\t\t}\n\n\t\t\t// Update global variables\n\t\t\tdocument = doc;\n\t\t\tdocumentElement = document.documentElement;\n\t\t\tdocumentIsHTML = !jQuery.isXMLDoc(document);\n\n\t\t\t// Support: iOS 7 only, IE 9 - 11+\n\t\t\t// Older browsers didn't support unprefixed `matches`.\n\t\t\tmatches = documentElement.matches ||\n\t\t\t\tdocumentElement.webkitMatchesSelector ||\n\t\t\t\tdocumentElement.msMatchesSelector;\n\n\t\t\t// Support: IE 9 - 11+, Edge 12 - 18+\n\t\t\t// Accessing iframe documents after unload throws \"permission denied\" errors (see trac-13936)\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tif (preferredDoc != document &&\n\t\t\t\t(subWindow = document.defaultView) && subWindow.top !== subWindow) {\n\n\t\t\t\t// Support: IE 9 - 11+, Edge 12 - 18+\n\t\t\t\tsubWindow.addEventListener(\"unload\", unloadHandler);\n\t\t\t}\n\n\t\t\t// Support: IE <10\n\t\t\t// Check if getElementById returns elements by name\n\t\t\t// The broken getElementById methods don't pick up programmatically-set names,\n\t\t\t// so use a roundabout getElementsByName test\n\t\t\tsupport.getById = assert(function (el) {\n\t\t\t\tdocumentElement.appendChild(el).id = jQuery.expando;\n\t\t\t\treturn !document.getElementsByName ||\n\t\t\t\t\t!document.getElementsByName(jQuery.expando).length;\n\t\t\t});\n\n\t\t\t// Support: IE 9 only\n\t\t\t// Check to see if it's possible to do matchesSelector\n\t\t\t// on a disconnected node.\n\t\t\tsupport.disconnectedMatch = assert(function (el) {\n\t\t\t\treturn matches.call(el, \"*\");\n\t\t\t});\n\n\t\t\t// Support: IE 9 - 11+, Edge 12 - 18+\n\t\t\t// IE/Edge don't support the :scope pseudo-class.\n\t\t\tsupport.scope = assert(function () {\n\t\t\t\treturn document.querySelectorAll(\":scope\");\n\t\t\t});\n\n\t\t\t// Support: Chrome 105 - 111 only, Safari 15.4 - 16.3 only\n\t\t\t// Make sure the `:has()` argument is parsed unforgivingly.\n\t\t\t// We include `*` in the test to detect buggy implementations that are\n\t\t\t// _selectively_ forgiving (specifically when the list includes at least\n\t\t\t// one valid selector).\n\t\t\t// Note that we treat complete lack of support for `:has()` as if it were\n\t\t\t// spec-compliant support, which is fine because use of `:has()` in such\n\t\t\t// environments will fail in the qSA path and fall back to jQuery traversal\n\t\t\t// anyway.\n\t\t\tsupport.cssHas = assert(function () {\n\t\t\t\ttry {\n\t\t\t\t\tdocument.querySelector(\":has(*,:jqfake)\");\n\t\t\t\t\treturn false;\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t// ID filter and find\n\t\t\tif (support.getById) {\n\t\t\t\tExpr.filter.ID = function (id) {\n\t\t\t\t\tvar attrId = id.replace(runescape, funescape);\n\t\t\t\t\treturn function (elem) {\n\t\t\t\t\t\treturn elem.getAttribute(\"id\") === attrId;\n\t\t\t\t\t};\n\t\t\t\t};\n\t\t\t\tExpr.find.ID = function (id, context) {\n\t\t\t\t\tif (typeof context.getElementById !== \"undefined\" && documentIsHTML) {\n\t\t\t\t\t\tvar elem = context.getElementById(id);\n\t\t\t\t\t\treturn elem ? [elem] : [];\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t} else {\n\t\t\t\tExpr.filter.ID = function (id) {\n\t\t\t\t\tvar attrId = id.replace(runescape, funescape);\n\t\t\t\t\treturn function (elem) {\n\t\t\t\t\t\tvar node = typeof elem.getAttributeNode !== \"undefined\" &&\n\t\t\t\t\t\t\telem.getAttributeNode(\"id\");\n\t\t\t\t\t\treturn node && node.value === attrId;\n\t\t\t\t\t};\n\t\t\t\t};\n\n\t\t\t\t// Support: IE 6 - 7 only\n\t\t\t\t// getElementById is not reliable as a find shortcut\n\t\t\t\tExpr.find.ID = function (id, context) {\n\t\t\t\t\tif (typeof context.getElementById !== \"undefined\" && documentIsHTML) {\n\t\t\t\t\t\tvar node, i, elems,\n\t\t\t\t\t\t\telem = context.getElementById(id);\n\n\t\t\t\t\t\tif (elem) {\n\n\t\t\t\t\t\t\t// Verify the id attribute\n\t\t\t\t\t\t\tnode = elem.getAttributeNode(\"id\");\n\t\t\t\t\t\t\tif (node && node.value === id) {\n\t\t\t\t\t\t\t\treturn [elem];\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Fall back on getElementsByName\n\t\t\t\t\t\t\telems = context.getElementsByName(id);\n\t\t\t\t\t\t\ti = 0;\n\t\t\t\t\t\t\twhile ((elem = elems[i++])) {\n\t\t\t\t\t\t\t\tnode = elem.getAttributeNode(\"id\");\n\t\t\t\t\t\t\t\tif (node && node.value === id) {\n\t\t\t\t\t\t\t\t\treturn [elem];\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn [];\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\n\t\t\t// Tag\n\t\t\tExpr.find.TAG = function (tag, context) {\n\t\t\t\tif (typeof context.getElementsByTagName !== \"undefined\") {\n\t\t\t\t\treturn context.getElementsByTagName(tag);\n\n\t\t\t\t\t// DocumentFragment nodes don't have gEBTN\n\t\t\t\t} else {\n\t\t\t\t\treturn context.querySelectorAll(tag);\n\t\t\t\t}\n\t\t\t};\n\n\t\t\t// Class\n\t\t\tExpr.find.CLASS = function (className, context) {\n\t\t\t\tif (typeof context.getElementsByClassName !== \"undefined\" && documentIsHTML) {\n\t\t\t\t\treturn context.getElementsByClassName(className);\n\t\t\t\t}\n\t\t\t};\n\n\t\t\t/* QSA/matchesSelector\n\t\t\t---------------------------------------------------------------------- */\n\n\t\t\t// QSA and matchesSelector support\n\n\t\t\trbuggyQSA = [];\n\n\t\t\t// Build QSA regex\n\t\t\t// Regex strategy adopted from Diego Perini\n\t\t\tassert(function (el) {\n\n\t\t\t\tvar input;\n\n\t\t\t\tdocumentElement.appendChild(el).innerHTML =\n\t\t\t\t\t\"<a id='\" + expando + \"' href='' disabled='disabled'></a>\" +\n\t\t\t\t\t\"<select id='\" + expando + \"-\\r\\\\' disabled='disabled'>\" +\n\t\t\t\t\t\"<option selected=''></option></select>\";\n\n\t\t\t\t// Support: iOS <=7 - 8 only\n\t\t\t\t// Boolean attributes and \"value\" are not treated correctly in some XML documents\n\t\t\t\tif (!el.querySelectorAll(\"[selected]\").length) {\n\t\t\t\t\trbuggyQSA.push(\"\\\\[\" + whitespace + \"*(?:value|\" + booleans + \")\");\n\t\t\t\t}\n\n\t\t\t\t// Support: iOS <=7 - 8 only\n\t\t\t\tif (!el.querySelectorAll(\"[id~=\" + expando + \"-]\").length) {\n\t\t\t\t\trbuggyQSA.push(\"~=\");\n\t\t\t\t}\n\n\t\t\t\t// Support: iOS 8 only\n\t\t\t\t// https://bugs.webkit.org/show_bug.cgi?id=136851\n\t\t\t\t// In-page `selector#id sibling-combinator selector` fails\n\t\t\t\tif (!el.querySelectorAll(\"a#\" + expando + \"+*\").length) {\n\t\t\t\t\trbuggyQSA.push(\".#.+[+~]\");\n\t\t\t\t}\n\n\t\t\t\t// Support: Chrome <=105+, Firefox <=104+, Safari <=15.4+\n\t\t\t\t// In some of the document kinds, these selectors wouldn't work natively.\n\t\t\t\t// This is probably OK but for backwards compatibility we want to maintain\n\t\t\t\t// handling them through jQuery traversal in jQuery 3.x.\n\t\t\t\tif (!el.querySelectorAll(\":checked\").length) {\n\t\t\t\t\trbuggyQSA.push(\":checked\");\n\t\t\t\t}\n\n\t\t\t\t// Support: Windows 8 Native Apps\n\t\t\t\t// The type and name attributes are restricted during .innerHTML assignment\n\t\t\t\tinput = document.createElement(\"input\");\n\t\t\t\tinput.setAttribute(\"type\", \"hidden\");\n\t\t\t\tel.appendChild(input).setAttribute(\"name\", \"D\");\n\n\t\t\t\t// Support: IE 9 - 11+\n\t\t\t\t// IE's :disabled selector does not pick up the children of disabled fieldsets\n\t\t\t\t// Support: Chrome <=105+, Firefox <=104+, Safari <=15.4+\n\t\t\t\t// In some of the document kinds, these selectors wouldn't work natively.\n\t\t\t\t// This is probably OK but for backwards compatibility we want to maintain\n\t\t\t\t// handling them through jQuery traversal in jQuery 3.x.\n\t\t\t\tdocumentElement.appendChild(el).disabled = true;\n\t\t\t\tif (el.querySelectorAll(\":disabled\").length !== 2) {\n\t\t\t\t\trbuggyQSA.push(\":enabled\", \":disabled\");\n\t\t\t\t}\n\n\t\t\t\t// Support: IE 11+, Edge 15 - 18+\n\t\t\t\t// IE 11/Edge don't find elements on a `[name='']` query in some cases.\n\t\t\t\t// Adding a temporary attribute to the document before the selection works\n\t\t\t\t// around the issue.\n\t\t\t\t// Interestingly, IE 10 & older don't seem to have the issue.\n\t\t\t\tinput = document.createElement(\"input\");\n\t\t\t\tinput.setAttribute(\"name\", \"\");\n\t\t\t\tel.appendChild(input);\n\t\t\t\tif (!el.querySelectorAll(\"[name='']\").length) {\n\t\t\t\t\trbuggyQSA.push(\"\\\\[\" + whitespace + \"*name\" + whitespace + \"*=\" +\n\t\t\t\t\t\twhitespace + \"*(?:''|\\\"\\\")\");\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tif (!support.cssHas) {\n\n\t\t\t\t// Support: Chrome 105 - 110+, Safari 15.4 - 16.3+\n\t\t\t\t// Our regular `try-catch` mechanism fails to detect natively-unsupported\n\t\t\t\t// pseudo-classes inside `:has()` (such as `:has(:contains(\"Foo\"))`)\n\t\t\t\t// in browsers that parse the `:has()` argument as a forgiving selector list.\n\t\t\t\t// https://drafts.csswg.org/selectors/#relational now requires the argument\n\t\t\t\t// to be parsed unforgivingly, but browsers have not yet fully adjusted.\n\t\t\t\trbuggyQSA.push(\":has\");\n\t\t\t}\n\n\t\t\trbuggyQSA = rbuggyQSA.length && new RegExp(rbuggyQSA.join(\"|\"));\n\n\t\t\t/* Sorting\n\t\t\t---------------------------------------------------------------------- */\n\n\t\t\t// Document order sorting\n\t\t\tsortOrder = function (a, b) {\n\n\t\t\t\t// Flag for duplicate removal\n\t\t\t\tif (a === b) {\n\t\t\t\t\thasDuplicate = true;\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\n\t\t\t\t// Sort on method existence if only one input has compareDocumentPosition\n\t\t\t\tvar compare = !a.compareDocumentPosition - !b.compareDocumentPosition;\n\t\t\t\tif (compare) {\n\t\t\t\t\treturn compare;\n\t\t\t\t}\n\n\t\t\t\t// Calculate position if both inputs belong to the same document\n\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\tcompare = (a.ownerDocument || a) == (b.ownerDocument || b) ?\n\t\t\t\t\ta.compareDocumentPosition(b) :\n\n\t\t\t\t\t// Otherwise we know they are disconnected\n\t\t\t\t\t1;\n\n\t\t\t\t// Disconnected nodes\n\t\t\t\tif (compare & 1 ||\n\t\t\t\t\t(!support.sortDetached && b.compareDocumentPosition(a) === compare)) {\n\n\t\t\t\t\t// Choose the first element that is related to our preferred document\n\t\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\tif (a === document || a.ownerDocument == preferredDoc &&\n\t\t\t\t\t\tfind.contains(preferredDoc, a)) {\n\t\t\t\t\t\treturn -1;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\tif (b === document || b.ownerDocument == preferredDoc &&\n\t\t\t\t\t\tfind.contains(preferredDoc, b)) {\n\t\t\t\t\t\treturn 1;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Maintain original order\n\t\t\t\t\treturn sortInput ?\n\t\t\t\t\t\t(indexOf.call(sortInput, a) - indexOf.call(sortInput, b)) :\n\t\t\t\t\t\t0;\n\t\t\t\t}\n\n\t\t\t\treturn compare & 4 ? -1 : 1;\n\t\t\t};\n\n\t\t\treturn document;\n\t\t}\n\n\t\tfind.matches = function (expr, elements) {\n\t\t\treturn find(expr, null, null, elements);\n\t\t};\n\n\t\tfind.matchesSelector = function (elem, expr) {\n\t\t\tsetDocument(elem);\n\n\t\t\tif (documentIsHTML &&\n\t\t\t\t!nonnativeSelectorCache[expr + \" \"] &&\n\t\t\t\t(!rbuggyQSA || !rbuggyQSA.test(expr))) {\n\n\t\t\t\ttry {\n\t\t\t\t\tvar ret = matches.call(elem, expr);\n\n\t\t\t\t\t// IE 9's matchesSelector returns false on disconnected nodes\n\t\t\t\t\tif (ret || support.disconnectedMatch ||\n\n\t\t\t\t\t\t// As well, disconnected nodes are said to be in a document\n\t\t\t\t\t\t// fragment in IE 9\n\t\t\t\t\t\telem.document && elem.document.nodeType !== 11) {\n\t\t\t\t\t\treturn ret;\n\t\t\t\t\t}\n\t\t\t\t} catch (e) {\n\t\t\t\t\tnonnativeSelectorCache(expr, true);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn find(expr, document, null, [elem]).length > 0;\n\t\t};\n\n\t\tfind.contains = function (context, elem) {\n\n\t\t\t// Set document vars if needed\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tif ((context.ownerDocument || context) != document) {\n\t\t\t\tsetDocument(context);\n\t\t\t}\n\t\t\treturn jQuery.contains(context, elem);\n\t\t};\n\n\n\t\tfind.attr = function (elem, name) {\n\n\t\t\t// Set document vars if needed\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tif ((elem.ownerDocument || elem) != document) {\n\t\t\t\tsetDocument(elem);\n\t\t\t}\n\n\t\t\tvar fn = Expr.attrHandle[name.toLowerCase()],\n\n\t\t\t\t// Don't get fooled by Object.prototype properties (see trac-13807)\n\t\t\t\tval = fn && hasOwn.call(Expr.attrHandle, name.toLowerCase()) ?\n\t\t\t\t\tfn(elem, name, !documentIsHTML) :\n\t\t\t\t\tundefined;\n\n\t\t\tif (val !== undefined) {\n\t\t\t\treturn val;\n\t\t\t}\n\n\t\t\treturn elem.getAttribute(name);\n\t\t};\n\n\t\tfind.error = function (msg) {\n\t\t\tthrow new Error(\"Syntax error, unrecognized expression: \" + msg);\n\t\t};\n\n\t\t/**\n\t\t * Document sorting and removing duplicates\n\t\t * @param {ArrayLike} results\n\t\t */\n\t\tjQuery.uniqueSort = function (results) {\n\t\t\tvar elem,\n\t\t\t\tduplicates = [],\n\t\t\t\tj = 0,\n\t\t\t\ti = 0;\n\n\t\t\t// Unless we *know* we can detect duplicates, assume their presence\n\t\t\t//\n\t\t\t// Support: Android <=4.0+\n\t\t\t// Testing for detecting duplicates is unpredictable so instead assume we can't\n\t\t\t// depend on duplicate detection in all browsers without a stable sort.\n\t\t\thasDuplicate = !support.sortStable;\n\t\t\tsortInput = !support.sortStable && slice.call(results, 0);\n\t\t\tsort.call(results, sortOrder);\n\n\t\t\tif (hasDuplicate) {\n\t\t\t\twhile ((elem = results[i++])) {\n\t\t\t\t\tif (elem === results[i]) {\n\t\t\t\t\t\tj = duplicates.push(i);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\twhile (j--) {\n\t\t\t\t\tsplice.call(results, duplicates[j], 1);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Clear input after sorting to release objects\n\t\t\t// See https://github.com/jquery/sizzle/pull/225\n\t\t\tsortInput = null;\n\n\t\t\treturn results;\n\t\t};\n\n\t\tjQuery.fn.uniqueSort = function () {\n\t\t\treturn this.pushStack(jQuery.uniqueSort(slice.apply(this)));\n\t\t};\n\n\t\tExpr = jQuery.expr = {\n\n\t\t\t// Can be adjusted by the user\n\t\t\tcacheLength: 50,\n\n\t\t\tcreatePseudo: markFunction,\n\n\t\t\tmatch: matchExpr,\n\n\t\t\tattrHandle: {},\n\n\t\t\tfind: {},\n\n\t\t\trelative: {\n\t\t\t\t\">\": { dir: \"parentNode\", first: true },\n\t\t\t\t\" \": { dir: \"parentNode\" },\n\t\t\t\t\"+\": { dir: \"previousSibling\", first: true },\n\t\t\t\t\"~\": { dir: \"previousSibling\" }\n\t\t\t},\n\n\t\t\tpreFilter: {\n\t\t\t\tATTR: function (match) {\n\t\t\t\t\tmatch[1] = match[1].replace(runescape, funescape);\n\n\t\t\t\t\t// Move the given value to match[3] whether quoted or unquoted\n\t\t\t\t\tmatch[3] = (match[3] || match[4] || match[5] || \"\")\n\t\t\t\t\t\t.replace(runescape, funescape);\n\n\t\t\t\t\tif (match[2] === \"~=\") {\n\t\t\t\t\t\tmatch[3] = \" \" + match[3] + \" \";\n\t\t\t\t\t}\n\n\t\t\t\t\treturn match.slice(0, 4);\n\t\t\t\t},\n\n\t\t\t\tCHILD: function (match) {\n\n\t\t\t\t\t/* matches from matchExpr[\"CHILD\"]\n\t\t\t\t\t\t1 type (only|nth|...)\n\t\t\t\t\t\t2 what (child|of-type)\n\t\t\t\t\t\t3 argument (even|odd|\\d*|\\d*n([+-]\\d+)?|...)\n\t\t\t\t\t\t4 xn-component of xn+y argument ([+-]?\\d*n|)\n\t\t\t\t\t\t5 sign of xn-component\n\t\t\t\t\t\t6 x of xn-component\n\t\t\t\t\t\t7 sign of y-component\n\t\t\t\t\t\t8 y of y-component\n\t\t\t\t\t*/\n\t\t\t\t\tmatch[1] = match[1].toLowerCase();\n\n\t\t\t\t\tif (match[1].slice(0, 3) === \"nth\") {\n\n\t\t\t\t\t\t// nth-* requires argument\n\t\t\t\t\t\tif (!match[3]) {\n\t\t\t\t\t\t\tfind.error(match[0]);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// numeric x and y parameters for Expr.filter.CHILD\n\t\t\t\t\t\t// remember that false/true cast respectively to 0/1\n\t\t\t\t\t\tmatch[4] = +(match[4] ?\n\t\t\t\t\t\t\tmatch[5] + (match[6] || 1) :\n\t\t\t\t\t\t\t2 * (match[3] === \"even\" || match[3] === \"odd\")\n\t\t\t\t\t\t);\n\t\t\t\t\t\tmatch[5] = +((match[7] + match[8]) || match[3] === \"odd\");\n\n\t\t\t\t\t\t// other types prohibit arguments\n\t\t\t\t\t} else if (match[3]) {\n\t\t\t\t\t\tfind.error(match[0]);\n\t\t\t\t\t}\n\n\t\t\t\t\treturn match;\n\t\t\t\t},\n\n\t\t\t\tPSEUDO: function (match) {\n\t\t\t\t\tvar excess,\n\t\t\t\t\t\tunquoted = !match[6] && match[2];\n\n\t\t\t\t\tif (matchExpr.CHILD.test(match[0])) {\n\t\t\t\t\t\treturn null;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Accept quoted arguments as-is\n\t\t\t\t\tif (match[3]) {\n\t\t\t\t\t\tmatch[2] = match[4] || match[5] || \"\";\n\n\t\t\t\t\t\t// Strip excess characters from unquoted arguments\n\t\t\t\t\t} else if (unquoted && rpseudo.test(unquoted) &&\n\n\t\t\t\t\t\t// Get excess from tokenize (recursively)\n\t\t\t\t\t\t(excess = tokenize(unquoted, true)) &&\n\n\t\t\t\t\t\t// advance to the next closing parenthesis\n\t\t\t\t\t\t(excess = unquoted.indexOf(\")\", unquoted.length - excess) - unquoted.length)) {\n\n\t\t\t\t\t\t// excess is a negative index\n\t\t\t\t\t\tmatch[0] = match[0].slice(0, excess);\n\t\t\t\t\t\tmatch[2] = unquoted.slice(0, excess);\n\t\t\t\t\t}\n\n\t\t\t\t\t// Return only captures needed by the pseudo filter method (type and argument)\n\t\t\t\t\treturn match.slice(0, 3);\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tfilter: {\n\n\t\t\t\tTAG: function (nodeNameSelector) {\n\t\t\t\t\tvar expectedNodeName = nodeNameSelector.replace(runescape, funescape).toLowerCase();\n\t\t\t\t\treturn nodeNameSelector === \"*\" ?\n\t\t\t\t\t\tfunction () {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t} :\n\t\t\t\t\t\tfunction (elem) {\n\t\t\t\t\t\t\treturn nodeName(elem, expectedNodeName);\n\t\t\t\t\t\t};\n\t\t\t\t},\n\n\t\t\t\tCLASS: function (className) {\n\t\t\t\t\tvar pattern = classCache[className + \" \"];\n\n\t\t\t\t\treturn pattern ||\n\t\t\t\t\t\t(pattern = new RegExp(\"(^|\" + whitespace + \")\" + className +\n\t\t\t\t\t\t\t\"(\" + whitespace + \"|$)\")) &&\n\t\t\t\t\t\tclassCache(className, function (elem) {\n\t\t\t\t\t\t\treturn pattern.test(\n\t\t\t\t\t\t\t\ttypeof elem.className === \"string\" && elem.className ||\n\t\t\t\t\t\t\t\ttypeof elem.getAttribute !== \"undefined\" &&\n\t\t\t\t\t\t\t\telem.getAttribute(\"class\") ||\n\t\t\t\t\t\t\t\t\"\"\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t});\n\t\t\t\t},\n\n\t\t\t\tATTR: function (name, operator, check) {\n\t\t\t\t\treturn function (elem) {\n\t\t\t\t\t\tvar result = find.attr(elem, name);\n\n\t\t\t\t\t\tif (result == null) {\n\t\t\t\t\t\t\treturn operator === \"!=\";\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!operator) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tresult += \"\";\n\n\t\t\t\t\t\tif (operator === \"=\") {\n\t\t\t\t\t\t\treturn result === check;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (operator === \"!=\") {\n\t\t\t\t\t\t\treturn result !== check;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (operator === \"^=\") {\n\t\t\t\t\t\t\treturn check && result.indexOf(check) === 0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (operator === \"*=\") {\n\t\t\t\t\t\t\treturn check && result.indexOf(check) > -1;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (operator === \"$=\") {\n\t\t\t\t\t\t\treturn check && result.slice(-check.length) === check;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (operator === \"~=\") {\n\t\t\t\t\t\t\treturn (\" \" + result.replace(rwhitespace, \" \") + \" \")\n\t\t\t\t\t\t\t\t.indexOf(check) > -1;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (operator === \"|=\") {\n\t\t\t\t\t\t\treturn result === check || result.slice(0, check.length + 1) === check + \"-\";\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t};\n\t\t\t\t},\n\n\t\t\t\tCHILD: function (type, what, _argument, first, last) {\n\t\t\t\t\tvar simple = type.slice(0, 3) !== \"nth\",\n\t\t\t\t\t\tforward = type.slice(-4) !== \"last\",\n\t\t\t\t\t\tofType = what === \"of-type\";\n\n\t\t\t\t\treturn first === 1 && last === 0 ?\n\n\t\t\t\t\t\t// Shortcut for :nth-*(n)\n\t\t\t\t\t\tfunction (elem) {\n\t\t\t\t\t\t\treturn !!elem.parentNode;\n\t\t\t\t\t\t} :\n\n\t\t\t\t\t\tfunction (elem, _context, xml) {\n\t\t\t\t\t\t\tvar cache, outerCache, node, nodeIndex, start,\n\t\t\t\t\t\t\t\tdir = simple !== forward ? \"nextSibling\" : \"previousSibling\",\n\t\t\t\t\t\t\t\tparent = elem.parentNode,\n\t\t\t\t\t\t\t\tname = ofType && elem.nodeName.toLowerCase(),\n\t\t\t\t\t\t\t\tuseCache = !xml && !ofType,\n\t\t\t\t\t\t\t\tdiff = false;\n\n\t\t\t\t\t\t\tif (parent) {\n\n\t\t\t\t\t\t\t\t// :(first|last|only)-(child|of-type)\n\t\t\t\t\t\t\t\tif (simple) {\n\t\t\t\t\t\t\t\t\twhile (dir) {\n\t\t\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\t\t\twhile ((node = node[dir])) {\n\t\t\t\t\t\t\t\t\t\t\tif (ofType ?\n\t\t\t\t\t\t\t\t\t\t\t\tnodeName(node, name) :\n\t\t\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1) {\n\n\t\t\t\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t// Reverse direction for :only-* (if we haven't yet done so)\n\t\t\t\t\t\t\t\t\t\tstart = dir = type === \"only\" && !start && \"nextSibling\";\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tstart = [forward ? parent.firstChild : parent.lastChild];\n\n\t\t\t\t\t\t\t\t// non-xml :nth-child(...) stores cache data on `parent`\n\t\t\t\t\t\t\t\tif (forward && useCache) {\n\n\t\t\t\t\t\t\t\t\t// Seek `elem` from a previously-cached index\n\t\t\t\t\t\t\t\t\touterCache = parent[expando] || (parent[expando] = {});\n\t\t\t\t\t\t\t\t\tcache = outerCache[type] || [];\n\t\t\t\t\t\t\t\t\tnodeIndex = cache[0] === dirruns && cache[1];\n\t\t\t\t\t\t\t\t\tdiff = nodeIndex && cache[2];\n\t\t\t\t\t\t\t\t\tnode = nodeIndex && parent.childNodes[nodeIndex];\n\n\t\t\t\t\t\t\t\t\twhile ((node = ++nodeIndex && node && node[dir] ||\n\n\t\t\t\t\t\t\t\t\t\t// Fallback to seeking `elem` from the start\n\t\t\t\t\t\t\t\t\t\t(diff = nodeIndex = 0) || start.pop())) {\n\n\t\t\t\t\t\t\t\t\t\t// When found, cache indexes on `parent` and break\n\t\t\t\t\t\t\t\t\t\tif (node.nodeType === 1 && ++diff && node === elem) {\n\t\t\t\t\t\t\t\t\t\t\touterCache[type] = [dirruns, nodeIndex, diff];\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t// Use previously-cached element index if available\n\t\t\t\t\t\t\t\t\tif (useCache) {\n\t\t\t\t\t\t\t\t\t\touterCache = elem[expando] || (elem[expando] = {});\n\t\t\t\t\t\t\t\t\t\tcache = outerCache[type] || [];\n\t\t\t\t\t\t\t\t\t\tnodeIndex = cache[0] === dirruns && cache[1];\n\t\t\t\t\t\t\t\t\t\tdiff = nodeIndex;\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// xml :nth-child(...)\n\t\t\t\t\t\t\t\t\t// or :nth-last-child(...) or :nth(-last)?-of-type(...)\n\t\t\t\t\t\t\t\t\tif (diff === false) {\n\n\t\t\t\t\t\t\t\t\t\t// Use the same loop as above to seek `elem` from the start\n\t\t\t\t\t\t\t\t\t\twhile ((node = ++nodeIndex && node && node[dir] ||\n\t\t\t\t\t\t\t\t\t\t\t(diff = nodeIndex = 0) || start.pop())) {\n\n\t\t\t\t\t\t\t\t\t\t\tif ((ofType ?\n\t\t\t\t\t\t\t\t\t\t\t\tnodeName(node, name) :\n\t\t\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1) &&\n\t\t\t\t\t\t\t\t\t\t\t\t++diff) {\n\n\t\t\t\t\t\t\t\t\t\t\t\t// Cache the index of each encountered element\n\t\t\t\t\t\t\t\t\t\t\t\tif (useCache) {\n\t\t\t\t\t\t\t\t\t\t\t\t\touterCache = node[expando] ||\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t(node[expando] = {});\n\t\t\t\t\t\t\t\t\t\t\t\t\touterCache[type] = [dirruns, diff];\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\tif (node === elem) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t// Incorporate the offset, then check against cycle size\n\t\t\t\t\t\t\t\tdiff -= last;\n\t\t\t\t\t\t\t\treturn diff === first || (diff % first === 0 && diff / first >= 0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\t\t\t\t},\n\n\t\t\t\tPSEUDO: function (pseudo, argument) {\n\n\t\t\t\t\t// pseudo-class names are case-insensitive\n\t\t\t\t\t// https://www.w3.org/TR/selectors/#pseudo-classes\n\t\t\t\t\t// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters\n\t\t\t\t\t// Remember that setFilters inherits from pseudos\n\t\t\t\t\tvar args,\n\t\t\t\t\t\tfn = Expr.pseudos[pseudo] || Expr.setFilters[pseudo.toLowerCase()] ||\n\t\t\t\t\t\t\tfind.error(\"unsupported pseudo: \" + pseudo);\n\n\t\t\t\t\t// The user may use createPseudo to indicate that\n\t\t\t\t\t// arguments are needed to create the filter function\n\t\t\t\t\t// just as jQuery does\n\t\t\t\t\tif (fn[expando]) {\n\t\t\t\t\t\treturn fn(argument);\n\t\t\t\t\t}\n\n\t\t\t\t\t// But maintain support for old signatures\n\t\t\t\t\tif (fn.length > 1) {\n\t\t\t\t\t\targs = [pseudo, pseudo, \"\", argument];\n\t\t\t\t\t\treturn Expr.setFilters.hasOwnProperty(pseudo.toLowerCase()) ?\n\t\t\t\t\t\t\tmarkFunction(function (seed, matches) {\n\t\t\t\t\t\t\t\tvar idx,\n\t\t\t\t\t\t\t\t\tmatched = fn(seed, argument),\n\t\t\t\t\t\t\t\t\ti = matched.length;\n\t\t\t\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\t\t\t\tidx = indexOf.call(seed, matched[i]);\n\t\t\t\t\t\t\t\t\tseed[idx] = !(matches[idx] = matched[i]);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}) :\n\t\t\t\t\t\t\tfunction (elem) {\n\t\t\t\t\t\t\t\treturn fn(elem, 0, args);\n\t\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\treturn fn;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tpseudos: {\n\n\t\t\t\t// Potentially complex pseudos\n\t\t\t\tnot: markFunction(function (selector) {\n\n\t\t\t\t\t// Trim the selector passed to compile\n\t\t\t\t\t// to avoid treating leading and trailing\n\t\t\t\t\t// spaces as combinators\n\t\t\t\t\tvar input = [],\n\t\t\t\t\t\tresults = [],\n\t\t\t\t\t\tmatcher = compile(selector.replace(rtrimCSS, \"$1\"));\n\n\t\t\t\t\treturn matcher[expando] ?\n\t\t\t\t\t\tmarkFunction(function (seed, matches, _context, xml) {\n\t\t\t\t\t\t\tvar elem,\n\t\t\t\t\t\t\t\tunmatched = matcher(seed, null, xml, []),\n\t\t\t\t\t\t\t\ti = seed.length;\n\n\t\t\t\t\t\t\t// Match elements unmatched by `matcher`\n\t\t\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\t\t\tif ((elem = unmatched[i])) {\n\t\t\t\t\t\t\t\t\tseed[i] = !(matches[i] = elem);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}) :\n\t\t\t\t\t\tfunction (elem, _context, xml) {\n\t\t\t\t\t\t\tinput[0] = elem;\n\t\t\t\t\t\t\tmatcher(input, null, xml, results);\n\n\t\t\t\t\t\t\t// Don't keep the element\n\t\t\t\t\t\t\t// (see https://github.com/jquery/sizzle/issues/299)\n\t\t\t\t\t\t\tinput[0] = null;\n\t\t\t\t\t\t\treturn !results.pop();\n\t\t\t\t\t\t};\n\t\t\t\t}),\n\n\t\t\t\thas: markFunction(function (selector) {\n\t\t\t\t\treturn function (elem) {\n\t\t\t\t\t\treturn find(selector, elem).length > 0;\n\t\t\t\t\t};\n\t\t\t\t}),\n\n\t\t\t\tcontains: markFunction(function (text) {\n\t\t\t\t\ttext = text.replace(runescape, funescape);\n\t\t\t\t\treturn function (elem) {\n\t\t\t\t\t\treturn (elem.textContent || jQuery.text(elem)).indexOf(text) > -1;\n\t\t\t\t\t};\n\t\t\t\t}),\n\n\t\t\t\t// \"Whether an element is represented by a :lang() selector\n\t\t\t\t// is based solely on the element's language value\n\t\t\t\t// being equal to the identifier C,\n\t\t\t\t// or beginning with the identifier C immediately followed by \"-\".\n\t\t\t\t// The matching of C against the element's language value is performed case-insensitively.\n\t\t\t\t// The identifier C does not have to be a valid language name.\"\n\t\t\t\t// https://www.w3.org/TR/selectors/#lang-pseudo\n\t\t\t\tlang: markFunction(function (lang) {\n\n\t\t\t\t\t// lang value must be a valid identifier\n\t\t\t\t\tif (!ridentifier.test(lang || \"\")) {\n\t\t\t\t\t\tfind.error(\"unsupported lang: \" + lang);\n\t\t\t\t\t}\n\t\t\t\t\tlang = lang.replace(runescape, funescape).toLowerCase();\n\t\t\t\t\treturn function (elem) {\n\t\t\t\t\t\tvar elemLang;\n\t\t\t\t\t\tdo {\n\t\t\t\t\t\t\tif ((elemLang = documentIsHTML ?\n\t\t\t\t\t\t\t\telem.lang :\n\t\t\t\t\t\t\t\telem.getAttribute(\"xml:lang\") || elem.getAttribute(\"lang\"))) {\n\n\t\t\t\t\t\t\t\telemLang = elemLang.toLowerCase();\n\t\t\t\t\t\t\t\treturn elemLang === lang || elemLang.indexOf(lang + \"-\") === 0;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} while ((elem = elem.parentNode) && elem.nodeType === 1);\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t};\n\t\t\t\t}),\n\n\t\t\t\t// Miscellaneous\n\t\t\t\ttarget: function (elem) {\n\t\t\t\t\tvar hash = window.location && window.location.hash;\n\t\t\t\t\treturn hash && hash.slice(1) === elem.id;\n\t\t\t\t},\n\n\t\t\t\troot: function (elem) {\n\t\t\t\t\treturn elem === documentElement;\n\t\t\t\t},\n\n\t\t\t\tfocus: function (elem) {\n\t\t\t\t\treturn elem === safeActiveElement() &&\n\t\t\t\t\t\tdocument.hasFocus() &&\n\t\t\t\t\t\t!!(elem.type || elem.href || ~elem.tabIndex);\n\t\t\t\t},\n\n\t\t\t\t// Boolean properties\n\t\t\t\tenabled: createDisabledPseudo(false),\n\t\t\t\tdisabled: createDisabledPseudo(true),\n\n\t\t\t\tchecked: function (elem) {\n\n\t\t\t\t\t// In CSS3, :checked should return both checked and selected elements\n\t\t\t\t\t// https://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\t\t\treturn (nodeName(elem, \"input\") && !!elem.checked) ||\n\t\t\t\t\t\t(nodeName(elem, \"option\") && !!elem.selected);\n\t\t\t\t},\n\n\t\t\t\tselected: function (elem) {\n\n\t\t\t\t\t// Support: IE <=11+\n\t\t\t\t\t// Accessing the selectedIndex property\n\t\t\t\t\t// forces the browser to treat the default option as\n\t\t\t\t\t// selected when in an optgroup.\n\t\t\t\t\tif (elem.parentNode) {\n\t\t\t\t\t\t// eslint-disable-next-line no-unused-expressions\n\t\t\t\t\t\telem.parentNode.selectedIndex;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn elem.selected === true;\n\t\t\t\t},\n\n\t\t\t\t// Contents\n\t\t\t\tempty: function (elem) {\n\n\t\t\t\t\t// https://www.w3.org/TR/selectors/#empty-pseudo\n\t\t\t\t\t// :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),\n\t\t\t\t\t//   but not by others (comment: 8; processing instruction: 7; etc.)\n\t\t\t\t\t// nodeType < 6 works because attributes (2) do not appear as children\n\t\t\t\t\tfor (elem = elem.firstChild; elem; elem = elem.nextSibling) {\n\t\t\t\t\t\tif (elem.nodeType < 6) {\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn true;\n\t\t\t\t},\n\n\t\t\t\tparent: function (elem) {\n\t\t\t\t\treturn !Expr.pseudos.empty(elem);\n\t\t\t\t},\n\n\t\t\t\t// Element/input types\n\t\t\t\theader: function (elem) {\n\t\t\t\t\treturn rheader.test(elem.nodeName);\n\t\t\t\t},\n\n\t\t\t\tinput: function (elem) {\n\t\t\t\t\treturn rinputs.test(elem.nodeName);\n\t\t\t\t},\n\n\t\t\t\tbutton: function (elem) {\n\t\t\t\t\treturn nodeName(elem, \"input\") && elem.type === \"button\" ||\n\t\t\t\t\t\tnodeName(elem, \"button\");\n\t\t\t\t},\n\n\t\t\t\ttext: function (elem) {\n\t\t\t\t\tvar attr;\n\t\t\t\t\treturn nodeName(elem, \"input\") && elem.type === \"text\" &&\n\n\t\t\t\t\t\t// Support: IE <10 only\n\t\t\t\t\t\t// New HTML5 attribute values (e.g., \"search\") appear\n\t\t\t\t\t\t// with elem.type === \"text\"\n\t\t\t\t\t\t((attr = elem.getAttribute(\"type\")) == null ||\n\t\t\t\t\t\t\tattr.toLowerCase() === \"text\");\n\t\t\t\t},\n\n\t\t\t\t// Position-in-collection\n\t\t\t\tfirst: createPositionalPseudo(function () {\n\t\t\t\t\treturn [0];\n\t\t\t\t}),\n\n\t\t\t\tlast: createPositionalPseudo(function (_matchIndexes, length) {\n\t\t\t\t\treturn [length - 1];\n\t\t\t\t}),\n\n\t\t\t\teq: createPositionalPseudo(function (_matchIndexes, length, argument) {\n\t\t\t\t\treturn [argument < 0 ? argument + length : argument];\n\t\t\t\t}),\n\n\t\t\t\teven: createPositionalPseudo(function (matchIndexes, length) {\n\t\t\t\t\tvar i = 0;\n\t\t\t\t\tfor (; i < length; i += 2) {\n\t\t\t\t\t\tmatchIndexes.push(i);\n\t\t\t\t\t}\n\t\t\t\t\treturn matchIndexes;\n\t\t\t\t}),\n\n\t\t\t\todd: createPositionalPseudo(function (matchIndexes, length) {\n\t\t\t\t\tvar i = 1;\n\t\t\t\t\tfor (; i < length; i += 2) {\n\t\t\t\t\t\tmatchIndexes.push(i);\n\t\t\t\t\t}\n\t\t\t\t\treturn matchIndexes;\n\t\t\t\t}),\n\n\t\t\t\tlt: createPositionalPseudo(function (matchIndexes, length, argument) {\n\t\t\t\t\tvar i;\n\n\t\t\t\t\tif (argument < 0) {\n\t\t\t\t\t\ti = argument + length;\n\t\t\t\t\t} else if (argument > length) {\n\t\t\t\t\t\ti = length;\n\t\t\t\t\t} else {\n\t\t\t\t\t\ti = argument;\n\t\t\t\t\t}\n\n\t\t\t\t\tfor (; --i >= 0;) {\n\t\t\t\t\t\tmatchIndexes.push(i);\n\t\t\t\t\t}\n\t\t\t\t\treturn matchIndexes;\n\t\t\t\t}),\n\n\t\t\t\tgt: createPositionalPseudo(function (matchIndexes, length, argument) {\n\t\t\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\t\t\tfor (; ++i < length;) {\n\t\t\t\t\t\tmatchIndexes.push(i);\n\t\t\t\t\t}\n\t\t\t\t\treturn matchIndexes;\n\t\t\t\t})\n\t\t\t}\n\t\t};\n\n\t\tExpr.pseudos.nth = Expr.pseudos.eq;\n\n\t\t// Add button/input type pseudos\n\t\tfor (i in { radio: true, checkbox: true, file: true, password: true, image: true }) {\n\t\t\tExpr.pseudos[i] = createInputPseudo(i);\n\t\t}\n\t\tfor (i in { submit: true, reset: true }) {\n\t\t\tExpr.pseudos[i] = createButtonPseudo(i);\n\t\t}\n\n\t\t// Easy API for creating new setFilters\n\t\tfunction setFilters() { }\n\t\tsetFilters.prototype = Expr.filters = Expr.pseudos;\n\t\tExpr.setFilters = new setFilters();\n\n\t\tfunction tokenize(selector, parseOnly) {\n\t\t\tvar matched, match, tokens, type,\n\t\t\t\tsoFar, groups, preFilters,\n\t\t\t\tcached = tokenCache[selector + \" \"];\n\n\t\t\tif (cached) {\n\t\t\t\treturn parseOnly ? 0 : cached.slice(0);\n\t\t\t}\n\n\t\t\tsoFar = selector;\n\t\t\tgroups = [];\n\t\t\tpreFilters = Expr.preFilter;\n\n\t\t\twhile (soFar) {\n\n\t\t\t\t// Comma and first run\n\t\t\t\tif (!matched || (match = rcomma.exec(soFar))) {\n\t\t\t\t\tif (match) {\n\n\t\t\t\t\t\t// Don't consume trailing commas as valid\n\t\t\t\t\t\tsoFar = soFar.slice(match[0].length) || soFar;\n\t\t\t\t\t}\n\t\t\t\t\tgroups.push((tokens = []));\n\t\t\t\t}\n\n\t\t\t\tmatched = false;\n\n\t\t\t\t// Combinators\n\t\t\t\tif ((match = rleadingCombinator.exec(soFar))) {\n\t\t\t\t\tmatched = match.shift();\n\t\t\t\t\ttokens.push({\n\t\t\t\t\t\tvalue: matched,\n\n\t\t\t\t\t\t// Cast descendant combinators to space\n\t\t\t\t\t\ttype: match[0].replace(rtrimCSS, \" \")\n\t\t\t\t\t});\n\t\t\t\t\tsoFar = soFar.slice(matched.length);\n\t\t\t\t}\n\n\t\t\t\t// Filters\n\t\t\t\tfor (type in Expr.filter) {\n\t\t\t\t\tif ((match = matchExpr[type].exec(soFar)) && (!preFilters[type] ||\n\t\t\t\t\t\t(match = preFilters[type](match)))) {\n\t\t\t\t\t\tmatched = match.shift();\n\t\t\t\t\t\ttokens.push({\n\t\t\t\t\t\t\tvalue: matched,\n\t\t\t\t\t\t\ttype: type,\n\t\t\t\t\t\t\tmatches: match\n\t\t\t\t\t\t});\n\t\t\t\t\t\tsoFar = soFar.slice(matched.length);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (!matched) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Return the length of the invalid excess\n\t\t\t// if we're just parsing\n\t\t\t// Otherwise, throw an error or return tokens\n\t\t\tif (parseOnly) {\n\t\t\t\treturn soFar.length;\n\t\t\t}\n\n\t\t\treturn soFar ?\n\t\t\t\tfind.error(selector) :\n\n\t\t\t\t// Cache the tokens\n\t\t\t\ttokenCache(selector, groups).slice(0);\n\t\t}\n\n\t\tfunction toSelector(tokens) {\n\t\t\tvar i = 0,\n\t\t\t\tlen = tokens.length,\n\t\t\t\tselector = \"\";\n\t\t\tfor (; i < len; i++) {\n\t\t\t\tselector += tokens[i].value;\n\t\t\t}\n\t\t\treturn selector;\n\t\t}\n\n\t\tfunction addCombinator(matcher, combinator, base) {\n\t\t\tvar dir = combinator.dir,\n\t\t\t\tskip = combinator.next,\n\t\t\t\tkey = skip || dir,\n\t\t\t\tcheckNonElements = base && key === \"parentNode\",\n\t\t\t\tdoneName = done++;\n\n\t\t\treturn combinator.first ?\n\n\t\t\t\t// Check against closest ancestor/preceding element\n\t\t\t\tfunction (elem, context, xml) {\n\t\t\t\t\twhile ((elem = elem[dir])) {\n\t\t\t\t\t\tif (elem.nodeType === 1 || checkNonElements) {\n\t\t\t\t\t\t\treturn matcher(elem, context, xml);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn false;\n\t\t\t\t} :\n\n\t\t\t\t// Check against all ancestor/preceding elements\n\t\t\t\tfunction (elem, context, xml) {\n\t\t\t\t\tvar oldCache, outerCache,\n\t\t\t\t\t\tnewCache = [dirruns, doneName];\n\n\t\t\t\t\t// We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching\n\t\t\t\t\tif (xml) {\n\t\t\t\t\t\twhile ((elem = elem[dir])) {\n\t\t\t\t\t\t\tif (elem.nodeType === 1 || checkNonElements) {\n\t\t\t\t\t\t\t\tif (matcher(elem, context, xml)) {\n\t\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\twhile ((elem = elem[dir])) {\n\t\t\t\t\t\t\tif (elem.nodeType === 1 || checkNonElements) {\n\t\t\t\t\t\t\t\touterCache = elem[expando] || (elem[expando] = {});\n\n\t\t\t\t\t\t\t\tif (skip && nodeName(elem, skip)) {\n\t\t\t\t\t\t\t\t\telem = elem[dir] || elem;\n\t\t\t\t\t\t\t\t} else if ((oldCache = outerCache[key]) &&\n\t\t\t\t\t\t\t\t\toldCache[0] === dirruns && oldCache[1] === doneName) {\n\n\t\t\t\t\t\t\t\t\t// Assign to newCache so results back-propagate to previous elements\n\t\t\t\t\t\t\t\t\treturn (newCache[2] = oldCache[2]);\n\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t// Reuse newcache so results back-propagate to previous elements\n\t\t\t\t\t\t\t\t\touterCache[key] = newCache;\n\n\t\t\t\t\t\t\t\t\t// A match means we're done; a fail means we have to keep checking\n\t\t\t\t\t\t\t\t\tif ((newCache[2] = matcher(elem, context, xml))) {\n\t\t\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn false;\n\t\t\t\t};\n\t\t}\n\n\t\tfunction elementMatcher(matchers) {\n\t\t\treturn matchers.length > 1 ?\n\t\t\t\tfunction (elem, context, xml) {\n\t\t\t\t\tvar i = matchers.length;\n\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\tif (!matchers[i](elem, context, xml)) {\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn true;\n\t\t\t\t} :\n\t\t\t\tmatchers[0];\n\t\t}\n\n\t\tfunction multipleContexts(selector, contexts, results) {\n\t\t\tvar i = 0,\n\t\t\t\tlen = contexts.length;\n\t\t\tfor (; i < len; i++) {\n\t\t\t\tfind(selector, contexts[i], results);\n\t\t\t}\n\t\t\treturn results;\n\t\t}\n\n\t\tfunction condense(unmatched, map, filter, context, xml) {\n\t\t\tvar elem,\n\t\t\t\tnewUnmatched = [],\n\t\t\t\ti = 0,\n\t\t\t\tlen = unmatched.length,\n\t\t\t\tmapped = map != null;\n\n\t\t\tfor (; i < len; i++) {\n\t\t\t\tif ((elem = unmatched[i])) {\n\t\t\t\t\tif (!filter || filter(elem, context, xml)) {\n\t\t\t\t\t\tnewUnmatched.push(elem);\n\t\t\t\t\t\tif (mapped) {\n\t\t\t\t\t\t\tmap.push(i);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn newUnmatched;\n\t\t}\n\n\t\tfunction setMatcher(preFilter, selector, matcher, postFilter, postFinder, postSelector) {\n\t\t\tif (postFilter && !postFilter[expando]) {\n\t\t\t\tpostFilter = setMatcher(postFilter);\n\t\t\t}\n\t\t\tif (postFinder && !postFinder[expando]) {\n\t\t\t\tpostFinder = setMatcher(postFinder, postSelector);\n\t\t\t}\n\t\t\treturn markFunction(function (seed, results, context, xml) {\n\t\t\t\tvar temp, i, elem, matcherOut,\n\t\t\t\t\tpreMap = [],\n\t\t\t\t\tpostMap = [],\n\t\t\t\t\tpreexisting = results.length,\n\n\t\t\t\t\t// Get initial elements from seed or context\n\t\t\t\t\telems = seed ||\n\t\t\t\t\t\tmultipleContexts(selector || \"*\",\n\t\t\t\t\t\t\tcontext.nodeType ? [context] : context, []),\n\n\t\t\t\t\t// Prefilter to get matcher input, preserving a map for seed-results synchronization\n\t\t\t\t\tmatcherIn = preFilter && (seed || !selector) ?\n\t\t\t\t\t\tcondense(elems, preMap, preFilter, context, xml) :\n\t\t\t\t\t\telems;\n\n\t\t\t\tif (matcher) {\n\n\t\t\t\t\t// If we have a postFinder, or filtered seed, or non-seed postFilter\n\t\t\t\t\t// or preexisting results,\n\t\t\t\t\tmatcherOut = postFinder || (seed ? preFilter : preexisting || postFilter) ?\n\n\t\t\t\t\t\t// ...intermediate processing is necessary\n\t\t\t\t\t\t[] :\n\n\t\t\t\t\t\t// ...otherwise use results directly\n\t\t\t\t\t\tresults;\n\n\t\t\t\t\t// Find primary matches\n\t\t\t\t\tmatcher(matcherIn, matcherOut, context, xml);\n\t\t\t\t} else {\n\t\t\t\t\tmatcherOut = matcherIn;\n\t\t\t\t}\n\n\t\t\t\t// Apply postFilter\n\t\t\t\tif (postFilter) {\n\t\t\t\t\ttemp = condense(matcherOut, postMap);\n\t\t\t\t\tpostFilter(temp, [], context, xml);\n\n\t\t\t\t\t// Un-match failing elements by moving them back to matcherIn\n\t\t\t\t\ti = temp.length;\n\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\tif ((elem = temp[i])) {\n\t\t\t\t\t\t\tmatcherOut[postMap[i]] = !(matcherIn[postMap[i]] = elem);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (seed) {\n\t\t\t\t\tif (postFinder || preFilter) {\n\t\t\t\t\t\tif (postFinder) {\n\n\t\t\t\t\t\t\t// Get the final matcherOut by condensing this intermediate into postFinder contexts\n\t\t\t\t\t\t\ttemp = [];\n\t\t\t\t\t\t\ti = matcherOut.length;\n\t\t\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\t\t\tif ((elem = matcherOut[i])) {\n\n\t\t\t\t\t\t\t\t\t// Restore matcherIn since elem is not yet a final match\n\t\t\t\t\t\t\t\t\ttemp.push((matcherIn[i] = elem));\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tpostFinder(null, (matcherOut = []), temp, xml);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Move matched elements from seed to results to keep them synchronized\n\t\t\t\t\t\ti = matcherOut.length;\n\t\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\t\tif ((elem = matcherOut[i]) &&\n\t\t\t\t\t\t\t\t(temp = postFinder ? indexOf.call(seed, elem) : preMap[i]) > -1) {\n\n\t\t\t\t\t\t\t\tseed[temp] = !(results[temp] = elem);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Add elements to results, through postFinder if defined\n\t\t\t\t} else {\n\t\t\t\t\tmatcherOut = condense(\n\t\t\t\t\t\tmatcherOut === results ?\n\t\t\t\t\t\t\tmatcherOut.splice(preexisting, matcherOut.length) :\n\t\t\t\t\t\t\tmatcherOut\n\t\t\t\t\t);\n\t\t\t\t\tif (postFinder) {\n\t\t\t\t\t\tpostFinder(null, results, matcherOut, xml);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tpush.apply(results, matcherOut);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tfunction matcherFromTokens(tokens) {\n\t\t\tvar checkContext, matcher, j,\n\t\t\t\tlen = tokens.length,\n\t\t\t\tleadingRelative = Expr.relative[tokens[0].type],\n\t\t\t\timplicitRelative = leadingRelative || Expr.relative[\" \"],\n\t\t\t\ti = leadingRelative ? 1 : 0,\n\n\t\t\t\t// The foundational matcher ensures that elements are reachable from top-level context(s)\n\t\t\t\tmatchContext = addCombinator(function (elem) {\n\t\t\t\t\treturn elem === checkContext;\n\t\t\t\t}, implicitRelative, true),\n\t\t\t\tmatchAnyContext = addCombinator(function (elem) {\n\t\t\t\t\treturn indexOf.call(checkContext, elem) > -1;\n\t\t\t\t}, implicitRelative, true),\n\t\t\t\tmatchers = [function (elem, context, xml) {\n\n\t\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\tvar ret = (!leadingRelative && (xml || context != outermostContext)) || (\n\t\t\t\t\t\t(checkContext = context).nodeType ?\n\t\t\t\t\t\t\tmatchContext(elem, context, xml) :\n\t\t\t\t\t\t\tmatchAnyContext(elem, context, xml));\n\n\t\t\t\t\t// Avoid hanging onto element\n\t\t\t\t\t// (see https://github.com/jquery/sizzle/issues/299)\n\t\t\t\t\tcheckContext = null;\n\t\t\t\t\treturn ret;\n\t\t\t\t}];\n\n\t\t\tfor (; i < len; i++) {\n\t\t\t\tif ((matcher = Expr.relative[tokens[i].type])) {\n\t\t\t\t\tmatchers = [addCombinator(elementMatcher(matchers), matcher)];\n\t\t\t\t} else {\n\t\t\t\t\tmatcher = Expr.filter[tokens[i].type].apply(null, tokens[i].matches);\n\n\t\t\t\t\t// Return special upon seeing a positional matcher\n\t\t\t\t\tif (matcher[expando]) {\n\n\t\t\t\t\t\t// Find the next relative operator (if any) for proper handling\n\t\t\t\t\t\tj = ++i;\n\t\t\t\t\t\tfor (; j < len; j++) {\n\t\t\t\t\t\t\tif (Expr.relative[tokens[j].type]) {\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn setMatcher(\n\t\t\t\t\t\t\ti > 1 && elementMatcher(matchers),\n\t\t\t\t\t\t\ti > 1 && toSelector(\n\n\t\t\t\t\t\t\t\t// If the preceding token was a descendant combinator, insert an implicit any-element `*`\n\t\t\t\t\t\t\t\ttokens.slice(0, i - 1)\n\t\t\t\t\t\t\t\t\t.concat({ value: tokens[i - 2].type === \" \" ? \"*\" : \"\" })\n\t\t\t\t\t\t\t).replace(rtrimCSS, \"$1\"),\n\t\t\t\t\t\t\tmatcher,\n\t\t\t\t\t\t\ti < j && matcherFromTokens(tokens.slice(i, j)),\n\t\t\t\t\t\t\tj < len && matcherFromTokens((tokens = tokens.slice(j))),\n\t\t\t\t\t\t\tj < len && toSelector(tokens)\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\tmatchers.push(matcher);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn elementMatcher(matchers);\n\t\t}\n\n\t\tfunction matcherFromGroupMatchers(elementMatchers, setMatchers) {\n\t\t\tvar bySet = setMatchers.length > 0,\n\t\t\t\tbyElement = elementMatchers.length > 0,\n\t\t\t\tsuperMatcher = function (seed, context, xml, results, outermost) {\n\t\t\t\t\tvar elem, j, matcher,\n\t\t\t\t\t\tmatchedCount = 0,\n\t\t\t\t\t\ti = \"0\",\n\t\t\t\t\t\tunmatched = seed && [],\n\t\t\t\t\t\tsetMatched = [],\n\t\t\t\t\t\tcontextBackup = outermostContext,\n\n\t\t\t\t\t\t// We must always have either seed elements or outermost context\n\t\t\t\t\t\telems = seed || byElement && Expr.find.TAG(\"*\", outermost),\n\n\t\t\t\t\t\t// Use integer dirruns iff this is the outermost matcher\n\t\t\t\t\t\tdirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1),\n\t\t\t\t\t\tlen = elems.length;\n\n\t\t\t\t\tif (outermost) {\n\n\t\t\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\t\toutermostContext = context == document || context || outermost;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Add elements passing elementMatchers directly to results\n\t\t\t\t\t// Support: iOS <=7 - 9 only\n\t\t\t\t\t// Tolerate NodeList properties (IE: \"length\"; Safari: <number>) matching\n\t\t\t\t\t// elements by id. (see trac-14142)\n\t\t\t\t\tfor (; i !== len && (elem = elems[i]) != null; i++) {\n\t\t\t\t\t\tif (byElement && elem) {\n\t\t\t\t\t\t\tj = 0;\n\n\t\t\t\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\t\t\tif (!context && elem.ownerDocument != document) {\n\t\t\t\t\t\t\t\tsetDocument(elem);\n\t\t\t\t\t\t\t\txml = !documentIsHTML;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\twhile ((matcher = elementMatchers[j++])) {\n\t\t\t\t\t\t\t\tif (matcher(elem, context || document, xml)) {\n\t\t\t\t\t\t\t\t\tpush.call(results, elem);\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (outermost) {\n\t\t\t\t\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Track unmatched elements for set filters\n\t\t\t\t\t\tif (bySet) {\n\n\t\t\t\t\t\t\t// They will have gone through all possible matchers\n\t\t\t\t\t\t\tif ((elem = !matcher && elem)) {\n\t\t\t\t\t\t\t\tmatchedCount--;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Lengthen the array for every element, matched or not\n\t\t\t\t\t\t\tif (seed) {\n\t\t\t\t\t\t\t\tunmatched.push(elem);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// `i` is now the count of elements visited above, and adding it to `matchedCount`\n\t\t\t\t\t// makes the latter nonnegative.\n\t\t\t\t\tmatchedCount += i;\n\n\t\t\t\t\t// Apply set filters to unmatched elements\n\t\t\t\t\t// NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`\n\t\t\t\t\t// equals `i`), unless we didn't visit _any_ elements in the above loop because we have\n\t\t\t\t\t// no element matchers and no seed.\n\t\t\t\t\t// Incrementing an initially-string \"0\" `i` allows `i` to remain a string only in that\n\t\t\t\t\t// case, which will result in a \"00\" `matchedCount` that differs from `i` but is also\n\t\t\t\t\t// numerically zero.\n\t\t\t\t\tif (bySet && i !== matchedCount) {\n\t\t\t\t\t\tj = 0;\n\t\t\t\t\t\twhile ((matcher = setMatchers[j++])) {\n\t\t\t\t\t\t\tmatcher(unmatched, setMatched, context, xml);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (seed) {\n\n\t\t\t\t\t\t\t// Reintegrate element matches to eliminate the need for sorting\n\t\t\t\t\t\t\tif (matchedCount > 0) {\n\t\t\t\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\t\t\t\tif (!(unmatched[i] || setMatched[i])) {\n\t\t\t\t\t\t\t\t\t\tsetMatched[i] = pop.call(results);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Discard index placeholder values to get only actual matches\n\t\t\t\t\t\t\tsetMatched = condense(setMatched);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Add matches to results\n\t\t\t\t\t\tpush.apply(results, setMatched);\n\n\t\t\t\t\t\t// Seedless set matches succeeding multiple successful matchers stipulate sorting\n\t\t\t\t\t\tif (outermost && !seed && setMatched.length > 0 &&\n\t\t\t\t\t\t\t(matchedCount + setMatchers.length) > 1) {\n\n\t\t\t\t\t\t\tjQuery.uniqueSort(results);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Override manipulation of globals by nested matchers\n\t\t\t\t\tif (outermost) {\n\t\t\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\t\t\toutermostContext = contextBackup;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn unmatched;\n\t\t\t\t};\n\n\t\t\treturn bySet ?\n\t\t\t\tmarkFunction(superMatcher) :\n\t\t\t\tsuperMatcher;\n\t\t}\n\n\t\tfunction compile(selector, match /* Internal Use Only */) {\n\t\t\tvar i,\n\t\t\t\tsetMatchers = [],\n\t\t\t\telementMatchers = [],\n\t\t\t\tcached = compilerCache[selector + \" \"];\n\n\t\t\tif (!cached) {\n\n\t\t\t\t// Generate a function of recursive functions that can be used to check each element\n\t\t\t\tif (!match) {\n\t\t\t\t\tmatch = tokenize(selector);\n\t\t\t\t}\n\t\t\t\ti = match.length;\n\t\t\t\twhile (i--) {\n\t\t\t\t\tcached = matcherFromTokens(match[i]);\n\t\t\t\t\tif (cached[expando]) {\n\t\t\t\t\t\tsetMatchers.push(cached);\n\t\t\t\t\t} else {\n\t\t\t\t\t\telementMatchers.push(cached);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Cache the compiled function\n\t\t\t\tcached = compilerCache(selector,\n\t\t\t\t\tmatcherFromGroupMatchers(elementMatchers, setMatchers));\n\n\t\t\t\t// Save selector and tokenization\n\t\t\t\tcached.selector = selector;\n\t\t\t}\n\t\t\treturn cached;\n\t\t}\n\n\t\t/**\n\t\t * A low-level selection function that works with jQuery's compiled\n\t\t *  selector functions\n\t\t * @param {String|Function} selector A selector or a pre-compiled\n\t\t *  selector function built with jQuery selector compile\n\t\t * @param {Element} context\n\t\t * @param {Array} [results]\n\t\t * @param {Array} [seed] A set of elements to match against\n\t\t */\n\t\tfunction select(selector, context, results, seed) {\n\t\t\tvar i, tokens, token, type, find,\n\t\t\t\tcompiled = typeof selector === \"function\" && selector,\n\t\t\t\tmatch = !seed && tokenize((selector = compiled.selector || selector));\n\n\t\t\tresults = results || [];\n\n\t\t\t// Try to minimize operations if there is only one selector in the list and no seed\n\t\t\t// (the latter of which guarantees us context)\n\t\t\tif (match.length === 1) {\n\n\t\t\t\t// Reduce context if the leading compound selector is an ID\n\t\t\t\ttokens = match[0] = match[0].slice(0);\n\t\t\t\tif (tokens.length > 2 && (token = tokens[0]).type === \"ID\" &&\n\t\t\t\t\tcontext.nodeType === 9 && documentIsHTML && Expr.relative[tokens[1].type]) {\n\n\t\t\t\t\tcontext = (Expr.find.ID(\n\t\t\t\t\t\ttoken.matches[0].replace(runescape, funescape),\n\t\t\t\t\t\tcontext\n\t\t\t\t\t) || [])[0];\n\t\t\t\t\tif (!context) {\n\t\t\t\t\t\treturn results;\n\n\t\t\t\t\t\t// Precompiled matchers will still verify ancestry, so step up a level\n\t\t\t\t\t} else if (compiled) {\n\t\t\t\t\t\tcontext = context.parentNode;\n\t\t\t\t\t}\n\n\t\t\t\t\tselector = selector.slice(tokens.shift().value.length);\n\t\t\t\t}\n\n\t\t\t\t// Fetch a seed set for right-to-left matching\n\t\t\t\ti = matchExpr.needsContext.test(selector) ? 0 : tokens.length;\n\t\t\t\twhile (i--) {\n\t\t\t\t\ttoken = tokens[i];\n\n\t\t\t\t\t// Abort if we hit a combinator\n\t\t\t\t\tif (Expr.relative[(type = token.type)]) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tif ((find = Expr.find[type])) {\n\n\t\t\t\t\t\t// Search, expanding context for leading sibling combinators\n\t\t\t\t\t\tif ((seed = find(\n\t\t\t\t\t\t\ttoken.matches[0].replace(runescape, funescape),\n\t\t\t\t\t\t\trsibling.test(tokens[0].type) &&\n\t\t\t\t\t\t\ttestContext(context.parentNode) || context\n\t\t\t\t\t\t))) {\n\n\t\t\t\t\t\t\t// If seed is empty or no tokens remain, we can return early\n\t\t\t\t\t\t\ttokens.splice(i, 1);\n\t\t\t\t\t\t\tselector = seed.length && toSelector(tokens);\n\t\t\t\t\t\t\tif (!selector) {\n\t\t\t\t\t\t\t\tpush.apply(results, seed);\n\t\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Compile and execute a filtering function if one is not provided\n\t\t\t// Provide `match` to avoid retokenization if we modified the selector above\n\t\t\t(compiled || compile(selector, match))(\n\t\t\t\tseed,\n\t\t\t\tcontext,\n\t\t\t\t!documentIsHTML,\n\t\t\t\tresults,\n\t\t\t\t!context || rsibling.test(selector) && testContext(context.parentNode) || context\n\t\t\t);\n\t\t\treturn results;\n\t\t}\n\n\t\t// One-time assignments\n\n\t\t// Support: Android <=4.0 - 4.1+\n\t\t// Sort stability\n\t\tsupport.sortStable = expando.split(\"\").sort(sortOrder).join(\"\") === expando;\n\n\t\t// Initialize against the default document\n\t\tsetDocument();\n\n\t\t// Support: Android <=4.0 - 4.1+\n\t\t// Detached nodes confoundingly follow *each other*\n\t\tsupport.sortDetached = assert(function (el) {\n\n\t\t\t// Should return 1, but returns 4 (following)\n\t\t\treturn el.compareDocumentPosition(document.createElement(\"fieldset\")) & 1;\n\t\t});\n\n\t\tjQuery.find = find;\n\n\t\t// Deprecated\n\t\tjQuery.expr[\":\"] = jQuery.expr.pseudos;\n\t\tjQuery.unique = jQuery.uniqueSort;\n\n\t\t// These have always been private, but they used to be documented\n\t\t// as part of Sizzle so let's maintain them in the 3.x line\n\t\t// for backwards compatibility purposes.\n\t\tfind.compile = compile;\n\t\tfind.select = select;\n\t\tfind.setDocument = setDocument;\n\n\t\tfind.escape = jQuery.escapeSelector;\n\t\tfind.getText = jQuery.text;\n\t\tfind.isXML = jQuery.isXMLDoc;\n\t\tfind.selectors = jQuery.expr;\n\t\tfind.support = jQuery.support;\n\t\tfind.uniqueSort = jQuery.uniqueSort;\n\n\t\t/* eslint-enable */\n\n\t})();\n\n\n\tvar dir = function (elem, dir, until) {\n\t\tvar matched = [],\n\t\t\ttruncate = until !== undefined;\n\n\t\twhile ((elem = elem[dir]) && elem.nodeType !== 9) {\n\t\t\tif (elem.nodeType === 1) {\n\t\t\t\tif (truncate && jQuery(elem).is(until)) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tmatched.push(elem);\n\t\t\t}\n\t\t}\n\t\treturn matched;\n\t};\n\n\n\tvar siblings = function (n, elem) {\n\t\tvar matched = [];\n\n\t\tfor (; n; n = n.nextSibling) {\n\t\t\tif (n.nodeType === 1 && n !== elem) {\n\t\t\t\tmatched.push(n);\n\t\t\t}\n\t\t}\n\n\t\treturn matched;\n\t};\n\n\n\tvar rneedsContext = jQuery.expr.match.needsContext;\n\n\tvar rsingleTag = (/^<([a-z][^\\/\\0>:\\x20\\t\\r\\n\\f]*)[\\x20\\t\\r\\n\\f]*\\/?>(?:<\\/\\1>|)$/i);\n\n\n\n\t// Implement the identical functionality for filter and not\n\tfunction winnow(elements, qualifier, not) {\n\t\tif (isFunction(qualifier)) {\n\t\t\treturn jQuery.grep(elements, function (elem, i) {\n\t\t\t\treturn !!qualifier.call(elem, i, elem) !== not;\n\t\t\t});\n\t\t}\n\n\t\t// Single element\n\t\tif (qualifier.nodeType) {\n\t\t\treturn jQuery.grep(elements, function (elem) {\n\t\t\t\treturn (elem === qualifier) !== not;\n\t\t\t});\n\t\t}\n\n\t\t// Arraylike of elements (jQuery, arguments, Array)\n\t\tif (typeof qualifier !== \"string\") {\n\t\t\treturn jQuery.grep(elements, function (elem) {\n\t\t\t\treturn (indexOf.call(qualifier, elem) > -1) !== not;\n\t\t\t});\n\t\t}\n\n\t\t// Filtered directly for both simple and complex selectors\n\t\treturn jQuery.filter(qualifier, elements, not);\n\t}\n\n\tjQuery.filter = function (expr, elems, not) {\n\t\tvar elem = elems[0];\n\n\t\tif (not) {\n\t\t\texpr = \":not(\" + expr + \")\";\n\t\t}\n\n\t\tif (elems.length === 1 && elem.nodeType === 1) {\n\t\t\treturn jQuery.find.matchesSelector(elem, expr) ? [elem] : [];\n\t\t}\n\n\t\treturn jQuery.find.matches(expr, jQuery.grep(elems, function (elem) {\n\t\t\treturn elem.nodeType === 1;\n\t\t}));\n\t};\n\n\tjQuery.fn.extend({\n\t\tfind: function (selector) {\n\t\t\tvar i, ret,\n\t\t\t\tlen = this.length,\n\t\t\t\tself = this;\n\n\t\t\tif (typeof selector !== \"string\") {\n\t\t\t\treturn this.pushStack(jQuery(selector).filter(function () {\n\t\t\t\t\tfor (i = 0; i < len; i++) {\n\t\t\t\t\t\tif (jQuery.contains(self[i], this)) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}));\n\t\t\t}\n\n\t\t\tret = this.pushStack([]);\n\n\t\t\tfor (i = 0; i < len; i++) {\n\t\t\t\tjQuery.find(selector, self[i], ret);\n\t\t\t}\n\n\t\t\treturn len > 1 ? jQuery.uniqueSort(ret) : ret;\n\t\t},\n\t\tfilter: function (selector) {\n\t\t\treturn this.pushStack(winnow(this, selector || [], false));\n\t\t},\n\t\tnot: function (selector) {\n\t\t\treturn this.pushStack(winnow(this, selector || [], true));\n\t\t},\n\t\tis: function (selector) {\n\t\t\treturn !!winnow(\n\t\t\t\tthis,\n\n\t\t\t\t// If this is a positional/relative selector, check membership in the returned set\n\t\t\t\t// so $(\"p:first\").is(\"p:last\") won't return true for a doc with two \"p\".\n\t\t\t\ttypeof selector === \"string\" && rneedsContext.test(selector) ?\n\t\t\t\t\tjQuery(selector) :\n\t\t\t\t\tselector || [],\n\t\t\t\tfalse\n\t\t\t).length;\n\t\t}\n\t});\n\n\n\t// Initialize a jQuery object\n\n\n\t// A central reference to the root jQuery(document)\n\tvar rootjQuery,\n\n\t\t// A simple way to check for HTML strings\n\t\t// Prioritize #id over <tag> to avoid XSS via location.hash (trac-9521)\n\t\t// Strict HTML recognition (trac-11290: must start with <)\n\t\t// Shortcut simple #id case for speed\n\t\trquickExpr = /^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]+))$/,\n\n\t\tinit = jQuery.fn.init = function (selector, context, root) {\n\t\t\tvar match, elem;\n\n\t\t\t// HANDLE: $(\"\"), $(null), $(undefined), $(false)\n\t\t\tif (!selector) {\n\t\t\t\treturn this;\n\t\t\t}\n\n\t\t\t// Method init() accepts an alternate rootjQuery\n\t\t\t// so migrate can support jQuery.sub (gh-2101)\n\t\t\troot = root || rootjQuery;\n\n\t\t\t// Handle HTML strings\n\t\t\tif (typeof selector === \"string\") {\n\t\t\t\tif (selector[0] === \"<\" &&\n\t\t\t\t\tselector[selector.length - 1] === \">\" &&\n\t\t\t\t\tselector.length >= 3) {\n\n\t\t\t\t\t// Assume that strings that start and end with <> are HTML and skip the regex check\n\t\t\t\t\tmatch = [null, selector, null];\n\n\t\t\t\t} else {\n\t\t\t\t\tmatch = rquickExpr.exec(selector);\n\t\t\t\t}\n\n\t\t\t\t// Match html or make sure no context is specified for #id\n\t\t\t\tif (match && (match[1] || !context)) {\n\n\t\t\t\t\t// HANDLE: $(html) -> $(array)\n\t\t\t\t\tif (match[1]) {\n\t\t\t\t\t\tcontext = context instanceof jQuery ? context[0] : context;\n\n\t\t\t\t\t\t// Option to run scripts is true for back-compat\n\t\t\t\t\t\t// Intentionally let the error be thrown if parseHTML is not present\n\t\t\t\t\t\tjQuery.merge(this, jQuery.parseHTML(\n\t\t\t\t\t\t\tmatch[1],\n\t\t\t\t\t\t\tcontext && context.nodeType ? context.ownerDocument || context : document,\n\t\t\t\t\t\t\ttrue\n\t\t\t\t\t\t));\n\n\t\t\t\t\t\t// HANDLE: $(html, props)\n\t\t\t\t\t\tif (rsingleTag.test(match[1]) && jQuery.isPlainObject(context)) {\n\t\t\t\t\t\t\tfor (match in context) {\n\n\t\t\t\t\t\t\t\t// Properties of context are called as methods if possible\n\t\t\t\t\t\t\t\tif (isFunction(this[match])) {\n\t\t\t\t\t\t\t\t\tthis[match](context[match]);\n\n\t\t\t\t\t\t\t\t\t// ...and otherwise set as attributes\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tthis.attr(match, context[match]);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn this;\n\n\t\t\t\t\t\t// HANDLE: $(#id)\n\t\t\t\t\t} else {\n\t\t\t\t\t\telem = document.getElementById(match[2]);\n\n\t\t\t\t\t\tif (elem) {\n\n\t\t\t\t\t\t\t// Inject the element directly into the jQuery object\n\t\t\t\t\t\t\tthis[0] = elem;\n\t\t\t\t\t\t\tthis.length = 1;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn this;\n\t\t\t\t\t}\n\n\t\t\t\t\t// HANDLE: $(expr, $(...))\n\t\t\t\t} else if (!context || context.jquery) {\n\t\t\t\t\treturn (context || root).find(selector);\n\n\t\t\t\t\t// HANDLE: $(expr, context)\n\t\t\t\t\t// (which is just equivalent to: $(context).find(expr)\n\t\t\t\t} else {\n\t\t\t\t\treturn this.constructor(context).find(selector);\n\t\t\t\t}\n\n\t\t\t\t// HANDLE: $(DOMElement)\n\t\t\t} else if (selector.nodeType) {\n\t\t\t\tthis[0] = selector;\n\t\t\t\tthis.length = 1;\n\t\t\t\treturn this;\n\n\t\t\t\t// HANDLE: $(function)\n\t\t\t\t// Shortcut for document ready\n\t\t\t} else if (isFunction(selector)) {\n\t\t\t\treturn root.ready !== undefined ?\n\t\t\t\t\troot.ready(selector) :\n\n\t\t\t\t\t// Execute immediately if ready is not present\n\t\t\t\t\tselector(jQuery);\n\t\t\t}\n\n\t\t\treturn jQuery.makeArray(selector, this);\n\t\t};\n\n\t// Give the init function the jQuery prototype for later instantiation\n\tinit.prototype = jQuery.fn;\n\n\t// Initialize central reference\n\trootjQuery = jQuery(document);\n\n\n\tvar rparentsprev = /^(?:parents|prev(?:Until|All))/,\n\n\t\t// Methods guaranteed to produce a unique set when starting from a unique set\n\t\tguaranteedUnique = {\n\t\t\tchildren: true,\n\t\t\tcontents: true,\n\t\t\tnext: true,\n\t\t\tprev: true\n\t\t};\n\n\tjQuery.fn.extend({\n\t\thas: function (target) {\n\t\t\tvar targets = jQuery(target, this),\n\t\t\t\tl = targets.length;\n\n\t\t\treturn this.filter(function () {\n\t\t\t\tvar i = 0;\n\t\t\t\tfor (; i < l; i++) {\n\t\t\t\t\tif (jQuery.contains(this, targets[i])) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\tclosest: function (selectors, context) {\n\t\t\tvar cur,\n\t\t\t\ti = 0,\n\t\t\t\tl = this.length,\n\t\t\t\tmatched = [],\n\t\t\t\ttargets = typeof selectors !== \"string\" && jQuery(selectors);\n\n\t\t\t// Positional selectors never match, since there's no _selection_ context\n\t\t\tif (!rneedsContext.test(selectors)) {\n\t\t\t\tfor (; i < l; i++) {\n\t\t\t\t\tfor (cur = this[i]; cur && cur !== context; cur = cur.parentNode) {\n\n\t\t\t\t\t\t// Always skip document fragments\n\t\t\t\t\t\tif (cur.nodeType < 11 && (targets ?\n\t\t\t\t\t\t\ttargets.index(cur) > -1 :\n\n\t\t\t\t\t\t\t// Don't pass non-elements to jQuery#find\n\t\t\t\t\t\t\tcur.nodeType === 1 &&\n\t\t\t\t\t\t\tjQuery.find.matchesSelector(cur, selectors))) {\n\n\t\t\t\t\t\t\tmatched.push(cur);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn this.pushStack(matched.length > 1 ? jQuery.uniqueSort(matched) : matched);\n\t\t},\n\n\t\t// Determine the position of an element within the set\n\t\tindex: function (elem) {\n\n\t\t\t// No argument, return index in parent\n\t\t\tif (!elem) {\n\t\t\t\treturn (this[0] && this[0].parentNode) ? this.first().prevAll().length : -1;\n\t\t\t}\n\n\t\t\t// Index in selector\n\t\t\tif (typeof elem === \"string\") {\n\t\t\t\treturn indexOf.call(jQuery(elem), this[0]);\n\t\t\t}\n\n\t\t\t// Locate the position of the desired element\n\t\t\treturn indexOf.call(this,\n\n\t\t\t\t// If it receives a jQuery object, the first element is used\n\t\t\t\telem.jquery ? elem[0] : elem\n\t\t\t);\n\t\t},\n\n\t\tadd: function (selector, context) {\n\t\t\treturn this.pushStack(\n\t\t\t\tjQuery.uniqueSort(\n\t\t\t\t\tjQuery.merge(this.get(), jQuery(selector, context))\n\t\t\t\t)\n\t\t\t);\n\t\t},\n\n\t\taddBack: function (selector) {\n\t\t\treturn this.add(selector == null ?\n\t\t\t\tthis.prevObject : this.prevObject.filter(selector)\n\t\t\t);\n\t\t}\n\t});\n\n\tfunction sibling(cur, dir) {\n\t\twhile ((cur = cur[dir]) && cur.nodeType !== 1) { }\n\t\treturn cur;\n\t}\n\n\tjQuery.each({\n\t\tparent: function (elem) {\n\t\t\tvar parent = elem.parentNode;\n\t\t\treturn parent && parent.nodeType !== 11 ? parent : null;\n\t\t},\n\t\tparents: function (elem) {\n\t\t\treturn dir(elem, \"parentNode\");\n\t\t},\n\t\tparentsUntil: function (elem, _i, until) {\n\t\t\treturn dir(elem, \"parentNode\", until);\n\t\t},\n\t\tnext: function (elem) {\n\t\t\treturn sibling(elem, \"nextSibling\");\n\t\t},\n\t\tprev: function (elem) {\n\t\t\treturn sibling(elem, \"previousSibling\");\n\t\t},\n\t\tnextAll: function (elem) {\n\t\t\treturn dir(elem, \"nextSibling\");\n\t\t},\n\t\tprevAll: function (elem) {\n\t\t\treturn dir(elem, \"previousSibling\");\n\t\t},\n\t\tnextUntil: function (elem, _i, until) {\n\t\t\treturn dir(elem, \"nextSibling\", until);\n\t\t},\n\t\tprevUntil: function (elem, _i, until) {\n\t\t\treturn dir(elem, \"previousSibling\", until);\n\t\t},\n\t\tsiblings: function (elem) {\n\t\t\treturn siblings((elem.parentNode || {}).firstChild, elem);\n\t\t},\n\t\tchildren: function (elem) {\n\t\t\treturn siblings(elem.firstChild);\n\t\t},\n\t\tcontents: function (elem) {\n\t\t\tif (elem.contentDocument != null &&\n\n\t\t\t\t// Support: IE 11+\n\t\t\t\t// <object> elements with no `data` attribute has an object\n\t\t\t\t// `contentDocument` with a `null` prototype.\n\t\t\t\tgetProto(elem.contentDocument)) {\n\n\t\t\t\treturn elem.contentDocument;\n\t\t\t}\n\n\t\t\t// Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only\n\t\t\t// Treat the template element as a regular one in browsers that\n\t\t\t// don't support it.\n\t\t\tif (nodeName(elem, \"template\")) {\n\t\t\t\telem = elem.content || elem;\n\t\t\t}\n\n\t\t\treturn jQuery.merge([], elem.childNodes);\n\t\t}\n\t}, function (name, fn) {\n\t\tjQuery.fn[name] = function (until, selector) {\n\t\t\tvar matched = jQuery.map(this, fn, until);\n\n\t\t\tif (name.slice(-5) !== \"Until\") {\n\t\t\t\tselector = until;\n\t\t\t}\n\n\t\t\tif (selector && typeof selector === \"string\") {\n\t\t\t\tmatched = jQuery.filter(selector, matched);\n\t\t\t}\n\n\t\t\tif (this.length > 1) {\n\n\t\t\t\t// Remove duplicates\n\t\t\t\tif (!guaranteedUnique[name]) {\n\t\t\t\t\tjQuery.uniqueSort(matched);\n\t\t\t\t}\n\n\t\t\t\t// Reverse order for parents* and prev-derivatives\n\t\t\t\tif (rparentsprev.test(name)) {\n\t\t\t\t\tmatched.reverse();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn this.pushStack(matched);\n\t\t};\n\t});\n\tvar rnothtmlwhite = (/[^\\x20\\t\\r\\n\\f]+/g);\n\n\n\n\t// Convert String-formatted options into Object-formatted ones\n\tfunction createOptions(options) {\n\t\tvar object = {};\n\t\tjQuery.each(options.match(rnothtmlwhite) || [], function (_, flag) {\n\t\t\tobject[flag] = true;\n\t\t});\n\t\treturn object;\n\t}\n\n\t/*\n\t * Create a callback list using the following parameters:\n\t *\n\t *\toptions: an optional list of space-separated options that will change how\n\t *\t\t\tthe callback list behaves or a more traditional option object\n\t *\n\t * By default a callback list will act like an event callback list and can be\n\t * \"fired\" multiple times.\n\t *\n\t * Possible options:\n\t *\n\t *\tonce:\t\t\twill ensure the callback list can only be fired once (like a Deferred)\n\t *\n\t *\tmemory:\t\t\twill keep track of previous values and will call any callback added\n\t *\t\t\t\t\tafter the list has been fired right away with the latest \"memorized\"\n\t *\t\t\t\t\tvalues (like a Deferred)\n\t *\n\t *\tunique:\t\t\twill ensure a callback can only be added once (no duplicate in the list)\n\t *\n\t *\tstopOnFalse:\tinterrupt callings when a callback returns false\n\t *\n\t */\n\tjQuery.Callbacks = function (options) {\n\n\t\t// Convert options from String-formatted to Object-formatted if needed\n\t\t// (we check in cache first)\n\t\toptions = typeof options === \"string\" ?\n\t\t\tcreateOptions(options) :\n\t\t\tjQuery.extend({}, options);\n\n\t\tvar // Flag to know if list is currently firing\n\t\t\tfiring,\n\n\t\t\t// Last fire value for non-forgettable lists\n\t\t\tmemory,\n\n\t\t\t// Flag to know if list was already fired\n\t\t\tfired,\n\n\t\t\t// Flag to prevent firing\n\t\t\tlocked,\n\n\t\t\t// Actual callback list\n\t\t\tlist = [],\n\n\t\t\t// Queue of execution data for repeatable lists\n\t\t\tqueue = [],\n\n\t\t\t// Index of currently firing callback (modified by add/remove as needed)\n\t\t\tfiringIndex = -1,\n\n\t\t\t// Fire callbacks\n\t\t\tfire = function () {\n\n\t\t\t\t// Enforce single-firing\n\t\t\t\tlocked = locked || options.once;\n\n\t\t\t\t// Execute callbacks for all pending executions,\n\t\t\t\t// respecting firingIndex overrides and runtime changes\n\t\t\t\tfired = firing = true;\n\t\t\t\tfor (; queue.length; firingIndex = -1) {\n\t\t\t\t\tmemory = queue.shift();\n\t\t\t\t\twhile (++firingIndex < list.length) {\n\n\t\t\t\t\t\t// Run callback and check for early termination\n\t\t\t\t\t\tif (list[firingIndex].apply(memory[0], memory[1]) === false &&\n\t\t\t\t\t\t\toptions.stopOnFalse) {\n\n\t\t\t\t\t\t\t// Jump to end and forget the data so .add doesn't re-fire\n\t\t\t\t\t\t\tfiringIndex = list.length;\n\t\t\t\t\t\t\tmemory = false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Forget the data if we're done with it\n\t\t\t\tif (!options.memory) {\n\t\t\t\t\tmemory = false;\n\t\t\t\t}\n\n\t\t\t\tfiring = false;\n\n\t\t\t\t// Clean up if we're done firing for good\n\t\t\t\tif (locked) {\n\n\t\t\t\t\t// Keep an empty list if we have data for future add calls\n\t\t\t\t\tif (memory) {\n\t\t\t\t\t\tlist = [];\n\n\t\t\t\t\t\t// Otherwise, this object is spent\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlist = \"\";\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// Actual Callbacks object\n\t\t\tself = {\n\n\t\t\t\t// Add a callback or a collection of callbacks to the list\n\t\t\t\tadd: function () {\n\t\t\t\t\tif (list) {\n\n\t\t\t\t\t\t// If we have memory from a past run, we should fire after adding\n\t\t\t\t\t\tif (memory && !firing) {\n\t\t\t\t\t\t\tfiringIndex = list.length - 1;\n\t\t\t\t\t\t\tqueue.push(memory);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t(function add(args) {\n\t\t\t\t\t\t\tjQuery.each(args, function (_, arg) {\n\t\t\t\t\t\t\t\tif (isFunction(arg)) {\n\t\t\t\t\t\t\t\t\tif (!options.unique || !self.has(arg)) {\n\t\t\t\t\t\t\t\t\t\tlist.push(arg);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} else if (arg && arg.length && toType(arg) !== \"string\") {\n\n\t\t\t\t\t\t\t\t\t// Inspect recursively\n\t\t\t\t\t\t\t\t\tadd(arg);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t})(arguments);\n\n\t\t\t\t\t\tif (memory && !firing) {\n\t\t\t\t\t\t\tfire();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Remove a callback from the list\n\t\t\t\tremove: function () {\n\t\t\t\t\tjQuery.each(arguments, function (_, arg) {\n\t\t\t\t\t\tvar index;\n\t\t\t\t\t\twhile ((index = jQuery.inArray(arg, list, index)) > -1) {\n\t\t\t\t\t\t\tlist.splice(index, 1);\n\n\t\t\t\t\t\t\t// Handle firing indexes\n\t\t\t\t\t\t\tif (index <= firingIndex) {\n\t\t\t\t\t\t\t\tfiringIndex--;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Check if a given callback is in the list.\n\t\t\t\t// If no argument is given, return whether or not list has callbacks attached.\n\t\t\t\thas: function (fn) {\n\t\t\t\t\treturn fn ?\n\t\t\t\t\t\tjQuery.inArray(fn, list) > -1 :\n\t\t\t\t\t\tlist.length > 0;\n\t\t\t\t},\n\n\t\t\t\t// Remove all callbacks from the list\n\t\t\t\tempty: function () {\n\t\t\t\t\tif (list) {\n\t\t\t\t\t\tlist = [];\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Disable .fire and .add\n\t\t\t\t// Abort any current/pending executions\n\t\t\t\t// Clear all callbacks and values\n\t\t\t\tdisable: function () {\n\t\t\t\t\tlocked = queue = [];\n\t\t\t\t\tlist = memory = \"\";\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\t\t\t\tdisabled: function () {\n\t\t\t\t\treturn !list;\n\t\t\t\t},\n\n\t\t\t\t// Disable .fire\n\t\t\t\t// Also disable .add unless we have memory (since it would have no effect)\n\t\t\t\t// Abort any pending executions\n\t\t\t\tlock: function () {\n\t\t\t\t\tlocked = queue = [];\n\t\t\t\t\tif (!memory && !firing) {\n\t\t\t\t\t\tlist = memory = \"\";\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\t\t\t\tlocked: function () {\n\t\t\t\t\treturn !!locked;\n\t\t\t\t},\n\n\t\t\t\t// Call all callbacks with the given context and arguments\n\t\t\t\tfireWith: function (context, args) {\n\t\t\t\t\tif (!locked) {\n\t\t\t\t\t\targs = args || [];\n\t\t\t\t\t\targs = [context, args.slice ? args.slice() : args];\n\t\t\t\t\t\tqueue.push(args);\n\t\t\t\t\t\tif (!firing) {\n\t\t\t\t\t\t\tfire();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Call all the callbacks with the given arguments\n\t\t\t\tfire: function () {\n\t\t\t\t\tself.fireWith(this, arguments);\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// To know if the callbacks have already been called at least once\n\t\t\t\tfired: function () {\n\t\t\t\t\treturn !!fired;\n\t\t\t\t}\n\t\t\t};\n\n\t\treturn self;\n\t};\n\n\n\tfunction Identity(v) {\n\t\treturn v;\n\t}\n\tfunction Thrower(ex) {\n\t\tthrow ex;\n\t}\n\n\tfunction adoptValue(value, resolve, reject, noValue) {\n\t\tvar method;\n\n\t\ttry {\n\n\t\t\t// Check for promise aspect first to privilege synchronous behavior\n\t\t\tif (value && isFunction((method = value.promise))) {\n\t\t\t\tmethod.call(value).done(resolve).fail(reject);\n\n\t\t\t\t// Other thenables\n\t\t\t} else if (value && isFunction((method = value.then))) {\n\t\t\t\tmethod.call(value, resolve, reject);\n\n\t\t\t\t// Other non-thenables\n\t\t\t} else {\n\n\t\t\t\t// Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer:\n\t\t\t\t// * false: [ value ].slice( 0 ) => resolve( value )\n\t\t\t\t// * true: [ value ].slice( 1 ) => resolve()\n\t\t\t\tresolve.apply(undefined, [value].slice(noValue));\n\t\t\t}\n\n\t\t\t// For Promises/A+, convert exceptions into rejections\n\t\t\t// Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in\n\t\t\t// Deferred#then to conditionally suppress rejection.\n\t\t} catch (value) {\n\n\t\t\t// Support: Android 4.0 only\n\t\t\t// Strict mode functions invoked without .call/.apply get global-object context\n\t\t\treject.apply(undefined, [value]);\n\t\t}\n\t}\n\n\tjQuery.extend({\n\n\t\tDeferred: function (func) {\n\t\t\tvar tuples = [\n\n\t\t\t\t// action, add listener, callbacks,\n\t\t\t\t// ... .then handlers, argument index, [final state]\n\t\t\t\t[\"notify\", \"progress\", jQuery.Callbacks(\"memory\"),\n\t\t\t\t\tjQuery.Callbacks(\"memory\"), 2],\n\t\t\t\t[\"resolve\", \"done\", jQuery.Callbacks(\"once memory\"),\n\t\t\t\t\tjQuery.Callbacks(\"once memory\"), 0, \"resolved\"],\n\t\t\t\t[\"reject\", \"fail\", jQuery.Callbacks(\"once memory\"),\n\t\t\t\t\tjQuery.Callbacks(\"once memory\"), 1, \"rejected\"]\n\t\t\t],\n\t\t\t\tstate = \"pending\",\n\t\t\t\tpromise = {\n\t\t\t\t\tstate: function () {\n\t\t\t\t\t\treturn state;\n\t\t\t\t\t},\n\t\t\t\t\talways: function () {\n\t\t\t\t\t\tdeferred.done(arguments).fail(arguments);\n\t\t\t\t\t\treturn this;\n\t\t\t\t\t},\n\t\t\t\t\t\"catch\": function (fn) {\n\t\t\t\t\t\treturn promise.then(null, fn);\n\t\t\t\t\t},\n\n\t\t\t\t\t// Keep pipe for back-compat\n\t\t\t\t\tpipe: function ( /* fnDone, fnFail, fnProgress */) {\n\t\t\t\t\t\tvar fns = arguments;\n\n\t\t\t\t\t\treturn jQuery.Deferred(function (newDefer) {\n\t\t\t\t\t\t\tjQuery.each(tuples, function (_i, tuple) {\n\n\t\t\t\t\t\t\t\t// Map tuples (progress, done, fail) to arguments (done, fail, progress)\n\t\t\t\t\t\t\t\tvar fn = isFunction(fns[tuple[4]]) && fns[tuple[4]];\n\n\t\t\t\t\t\t\t\t// deferred.progress(function() { bind to newDefer or newDefer.notify })\n\t\t\t\t\t\t\t\t// deferred.done(function() { bind to newDefer or newDefer.resolve })\n\t\t\t\t\t\t\t\t// deferred.fail(function() { bind to newDefer or newDefer.reject })\n\t\t\t\t\t\t\t\tdeferred[tuple[1]](function () {\n\t\t\t\t\t\t\t\t\tvar returned = fn && fn.apply(this, arguments);\n\t\t\t\t\t\t\t\t\tif (returned && isFunction(returned.promise)) {\n\t\t\t\t\t\t\t\t\t\treturned.promise()\n\t\t\t\t\t\t\t\t\t\t\t.progress(newDefer.notify)\n\t\t\t\t\t\t\t\t\t\t\t.done(newDefer.resolve)\n\t\t\t\t\t\t\t\t\t\t\t.fail(newDefer.reject);\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tnewDefer[tuple[0] + \"With\"](\n\t\t\t\t\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\t\t\t\t\tfn ? [returned] : arguments\n\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tfns = null;\n\t\t\t\t\t\t}).promise();\n\t\t\t\t\t},\n\t\t\t\t\tthen: function (onFulfilled, onRejected, onProgress) {\n\t\t\t\t\t\tvar maxDepth = 0;\n\t\t\t\t\t\tfunction resolve(depth, deferred, handler, special) {\n\t\t\t\t\t\t\treturn function () {\n\t\t\t\t\t\t\t\tvar that = this,\n\t\t\t\t\t\t\t\t\targs = arguments,\n\t\t\t\t\t\t\t\t\tmightThrow = function () {\n\t\t\t\t\t\t\t\t\t\tvar returned, then;\n\n\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.3\n\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-59\n\t\t\t\t\t\t\t\t\t\t// Ignore double-resolution attempts\n\t\t\t\t\t\t\t\t\t\tif (depth < maxDepth) {\n\t\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\treturned = handler.apply(that, args);\n\n\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.1\n\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-48\n\t\t\t\t\t\t\t\t\t\tif (returned === deferred.promise()) {\n\t\t\t\t\t\t\t\t\t\t\tthrow new TypeError(\"Thenable self-resolution\");\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ sections 2.3.3.1, 3.5\n\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-54\n\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-75\n\t\t\t\t\t\t\t\t\t\t// Retrieve `then` only once\n\t\t\t\t\t\t\t\t\t\tthen = returned &&\n\n\t\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.4\n\t\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-64\n\t\t\t\t\t\t\t\t\t\t\t// Only check objects and functions for thenability\n\t\t\t\t\t\t\t\t\t\t\t(typeof returned === \"object\" ||\n\t\t\t\t\t\t\t\t\t\t\t\ttypeof returned === \"function\") &&\n\t\t\t\t\t\t\t\t\t\t\treturned.then;\n\n\t\t\t\t\t\t\t\t\t\t// Handle a returned thenable\n\t\t\t\t\t\t\t\t\t\tif (isFunction(then)) {\n\n\t\t\t\t\t\t\t\t\t\t\t// Special processors (notify) just wait for resolution\n\t\t\t\t\t\t\t\t\t\t\tif (special) {\n\t\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\t\tresolve(maxDepth, deferred, Identity, special),\n\t\t\t\t\t\t\t\t\t\t\t\t\tresolve(maxDepth, deferred, Thrower, special)\n\t\t\t\t\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t\t\t\t\t// Normal processors (resolve) also hook into progress\n\t\t\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t\t\t// ...and disregard older resolution values\n\t\t\t\t\t\t\t\t\t\t\t\tmaxDepth++;\n\n\t\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\t\tresolve(maxDepth, deferred, Identity, special),\n\t\t\t\t\t\t\t\t\t\t\t\t\tresolve(maxDepth, deferred, Thrower, special),\n\t\t\t\t\t\t\t\t\t\t\t\t\tresolve(maxDepth, deferred, Identity,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tdeferred.notifyWith)\n\t\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t// Handle all other returned values\n\t\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\t\tif (handler !== Identity) {\n\t\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\t\targs = [returned];\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t// Process the value(s)\n\t\t\t\t\t\t\t\t\t\t\t// Default process is resolve\n\t\t\t\t\t\t\t\t\t\t\t(special || deferred.resolveWith)(that, args);\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\n\t\t\t\t\t\t\t\t\t// Only normal processors (resolve) catch and reject exceptions\n\t\t\t\t\t\t\t\t\tprocess = special ?\n\t\t\t\t\t\t\t\t\t\tmightThrow :\n\t\t\t\t\t\t\t\t\t\tfunction () {\n\t\t\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\t\t\tmightThrow();\n\t\t\t\t\t\t\t\t\t\t\t} catch (e) {\n\n\t\t\t\t\t\t\t\t\t\t\t\tif (jQuery.Deferred.exceptionHook) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tjQuery.Deferred.exceptionHook(e,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tprocess.error);\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.4.1\n\t\t\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-61\n\t\t\t\t\t\t\t\t\t\t\t\t// Ignore post-resolution exceptions\n\t\t\t\t\t\t\t\t\t\t\t\tif (depth + 1 >= maxDepth) {\n\n\t\t\t\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\t\t\t\tif (handler !== Thrower) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\targs = [e];\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\t\tdeferred.rejectWith(that, args);\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.1\n\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-57\n\t\t\t\t\t\t\t\t// Re-resolve promises immediately to dodge false rejection from\n\t\t\t\t\t\t\t\t// subsequent errors\n\t\t\t\t\t\t\t\tif (depth) {\n\t\t\t\t\t\t\t\t\tprocess();\n\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t// Call an optional hook to record the error, in case of exception\n\t\t\t\t\t\t\t\t\t// since it's otherwise lost when execution goes async\n\t\t\t\t\t\t\t\t\tif (jQuery.Deferred.getErrorHook) {\n\t\t\t\t\t\t\t\t\t\tprocess.error = jQuery.Deferred.getErrorHook();\n\n\t\t\t\t\t\t\t\t\t\t// The deprecated alias of the above. While the name suggests\n\t\t\t\t\t\t\t\t\t\t// returning the stack, not an error instance, jQuery just passes\n\t\t\t\t\t\t\t\t\t\t// it directly to `console.warn` so both will work; an instance\n\t\t\t\t\t\t\t\t\t\t// just better cooperates with source maps.\n\t\t\t\t\t\t\t\t\t} else if (jQuery.Deferred.getStackHook) {\n\t\t\t\t\t\t\t\t\t\tprocess.error = jQuery.Deferred.getStackHook();\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\twindow.setTimeout(process);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn jQuery.Deferred(function (newDefer) {\n\n\t\t\t\t\t\t\t// progress_handlers.add( ... )\n\t\t\t\t\t\t\ttuples[0][3].add(\n\t\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\t\tisFunction(onProgress) ?\n\t\t\t\t\t\t\t\t\t\tonProgress :\n\t\t\t\t\t\t\t\t\t\tIdentity,\n\t\t\t\t\t\t\t\t\tnewDefer.notifyWith\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t// fulfilled_handlers.add( ... )\n\t\t\t\t\t\t\ttuples[1][3].add(\n\t\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\t\tisFunction(onFulfilled) ?\n\t\t\t\t\t\t\t\t\t\tonFulfilled :\n\t\t\t\t\t\t\t\t\t\tIdentity\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t// rejected_handlers.add( ... )\n\t\t\t\t\t\t\ttuples[2][3].add(\n\t\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\t\tisFunction(onRejected) ?\n\t\t\t\t\t\t\t\t\t\tonRejected :\n\t\t\t\t\t\t\t\t\t\tThrower\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}).promise();\n\t\t\t\t\t},\n\n\t\t\t\t\t// Get a promise for this deferred\n\t\t\t\t\t// If obj is provided, the promise aspect is added to the object\n\t\t\t\t\tpromise: function (obj) {\n\t\t\t\t\t\treturn obj != null ? jQuery.extend(obj, promise) : promise;\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tdeferred = {};\n\n\t\t\t// Add list-specific methods\n\t\t\tjQuery.each(tuples, function (i, tuple) {\n\t\t\t\tvar list = tuple[2],\n\t\t\t\t\tstateString = tuple[5];\n\n\t\t\t\t// promise.progress = list.add\n\t\t\t\t// promise.done = list.add\n\t\t\t\t// promise.fail = list.add\n\t\t\t\tpromise[tuple[1]] = list.add;\n\n\t\t\t\t// Handle state\n\t\t\t\tif (stateString) {\n\t\t\t\t\tlist.add(\n\t\t\t\t\t\tfunction () {\n\n\t\t\t\t\t\t\t// state = \"resolved\" (i.e., fulfilled)\n\t\t\t\t\t\t\t// state = \"rejected\"\n\t\t\t\t\t\t\tstate = stateString;\n\t\t\t\t\t\t},\n\n\t\t\t\t\t\t// rejected_callbacks.disable\n\t\t\t\t\t\t// fulfilled_callbacks.disable\n\t\t\t\t\t\ttuples[3 - i][2].disable,\n\n\t\t\t\t\t\t// rejected_handlers.disable\n\t\t\t\t\t\t// fulfilled_handlers.disable\n\t\t\t\t\t\ttuples[3 - i][3].disable,\n\n\t\t\t\t\t\t// progress_callbacks.lock\n\t\t\t\t\t\ttuples[0][2].lock,\n\n\t\t\t\t\t\t// progress_handlers.lock\n\t\t\t\t\t\ttuples[0][3].lock\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\t// progress_handlers.fire\n\t\t\t\t// fulfilled_handlers.fire\n\t\t\t\t// rejected_handlers.fire\n\t\t\t\tlist.add(tuple[3].fire);\n\n\t\t\t\t// deferred.notify = function() { deferred.notifyWith(...) }\n\t\t\t\t// deferred.resolve = function() { deferred.resolveWith(...) }\n\t\t\t\t// deferred.reject = function() { deferred.rejectWith(...) }\n\t\t\t\tdeferred[tuple[0]] = function () {\n\t\t\t\t\tdeferred[tuple[0] + \"With\"](this === deferred ? undefined : this, arguments);\n\t\t\t\t\treturn this;\n\t\t\t\t};\n\n\t\t\t\t// deferred.notifyWith = list.fireWith\n\t\t\t\t// deferred.resolveWith = list.fireWith\n\t\t\t\t// deferred.rejectWith = list.fireWith\n\t\t\t\tdeferred[tuple[0] + \"With\"] = list.fireWith;\n\t\t\t});\n\n\t\t\t// Make the deferred a promise\n\t\t\tpromise.promise(deferred);\n\n\t\t\t// Call given func if any\n\t\t\tif (func) {\n\t\t\t\tfunc.call(deferred, deferred);\n\t\t\t}\n\n\t\t\t// All done!\n\t\t\treturn deferred;\n\t\t},\n\n\t\t// Deferred helper\n\t\twhen: function (singleValue) {\n\t\t\tvar\n\n\t\t\t\t// count of uncompleted subordinates\n\t\t\t\tremaining = arguments.length,\n\n\t\t\t\t// count of unprocessed arguments\n\t\t\t\ti = remaining,\n\n\t\t\t\t// subordinate fulfillment data\n\t\t\t\tresolveContexts = Array(i),\n\t\t\t\tresolveValues = slice.call(arguments),\n\n\t\t\t\t// the primary Deferred\n\t\t\t\tprimary = jQuery.Deferred(),\n\n\t\t\t\t// subordinate callback factory\n\t\t\t\tupdateFunc = function (i) {\n\t\t\t\t\treturn function (value) {\n\t\t\t\t\t\tresolveContexts[i] = this;\n\t\t\t\t\t\tresolveValues[i] = arguments.length > 1 ? slice.call(arguments) : value;\n\t\t\t\t\t\tif (!(--remaining)) {\n\t\t\t\t\t\t\tprimary.resolveWith(resolveContexts, resolveValues);\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t};\n\n\t\t\t// Single- and empty arguments are adopted like Promise.resolve\n\t\t\tif (remaining <= 1) {\n\t\t\t\tadoptValue(singleValue, primary.done(updateFunc(i)).resolve, primary.reject,\n\t\t\t\t\t!remaining);\n\n\t\t\t\t// Use .then() to unwrap secondary thenables (cf. gh-3000)\n\t\t\t\tif (primary.state() === \"pending\" ||\n\t\t\t\t\tisFunction(resolveValues[i] && resolveValues[i].then)) {\n\n\t\t\t\t\treturn primary.then();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Multiple arguments are aggregated like Promise.all array elements\n\t\t\twhile (i--) {\n\t\t\t\tadoptValue(resolveValues[i], updateFunc(i), primary.reject);\n\t\t\t}\n\n\t\t\treturn primary.promise();\n\t\t}\n\t});\n\n\n\t// These usually indicate a programmer mistake during development,\n\t// warn about them ASAP rather than swallowing them by default.\n\tvar rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;\n\n\t// If `jQuery.Deferred.getErrorHook` is defined, `asyncError` is an error\n\t// captured before the async barrier to get the original error cause\n\t// which may otherwise be hidden.\n\tjQuery.Deferred.exceptionHook = function (error, asyncError) {\n\n\t\t// Support: IE 8 - 9 only\n\t\t// Console exists when dev tools are open, which can happen at any time\n\t\tif (window.console && window.console.warn && error && rerrorNames.test(error.name)) {\n\t\t\twindow.console.warn(\"jQuery.Deferred exception: \" + error.message,\n\t\t\t\terror.stack, asyncError);\n\t\t}\n\t};\n\n\n\n\n\tjQuery.readyException = function (error) {\n\t\twindow.setTimeout(function () {\n\t\t\tthrow error;\n\t\t});\n\t};\n\n\n\n\n\t// The deferred used on DOM ready\n\tvar readyList = jQuery.Deferred();\n\n\tjQuery.fn.ready = function (fn) {\n\n\t\treadyList\n\t\t\t.then(fn)\n\n\t\t\t// Wrap jQuery.readyException in a function so that the lookup\n\t\t\t// happens at the time of error handling instead of callback\n\t\t\t// registration.\n\t\t\t.catch(function (error) {\n\t\t\t\tjQuery.readyException(error);\n\t\t\t});\n\n\t\treturn this;\n\t};\n\n\tjQuery.extend({\n\n\t\t// Is the DOM ready to be used? Set to true once it occurs.\n\t\tisReady: false,\n\n\t\t// A counter to track how many items to wait for before\n\t\t// the ready event fires. See trac-6781\n\t\treadyWait: 1,\n\n\t\t// Handle when the DOM is ready\n\t\tready: function (wait) {\n\n\t\t\t// Abort if there are pending holds or we're already ready\n\t\t\tif (wait === true ? --jQuery.readyWait : jQuery.isReady) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Remember that the DOM is ready\n\t\t\tjQuery.isReady = true;\n\n\t\t\t// If a normal DOM Ready event fired, decrement, and wait if need be\n\t\t\tif (wait !== true && --jQuery.readyWait > 0) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If there are functions bound, to execute\n\t\t\treadyList.resolveWith(document, [jQuery]);\n\t\t}\n\t});\n\n\tjQuery.ready.then = readyList.then;\n\n\t// The ready event handler and self cleanup method\n\tfunction completed() {\n\t\tdocument.removeEventListener(\"DOMContentLoaded\", completed);\n\t\twindow.removeEventListener(\"load\", completed);\n\t\tjQuery.ready();\n\t}\n\n\t// Catch cases where $(document).ready() is called\n\t// after the browser event has already occurred.\n\t// Support: IE <=9 - 10 only\n\t// Older IE sometimes signals \"interactive\" too soon\n\tif (document.readyState === \"complete\" ||\n\t\t(document.readyState !== \"loading\" && !document.documentElement.doScroll)) {\n\n\t\t// Handle it asynchronously to allow scripts the opportunity to delay ready\n\t\twindow.setTimeout(jQuery.ready);\n\n\t} else {\n\n\t\t// Use the handy event callback\n\t\tdocument.addEventListener(\"DOMContentLoaded\", completed);\n\n\t\t// A fallback to window.onload, that will always work\n\t\twindow.addEventListener(\"load\", completed);\n\t}\n\n\n\n\n\t// Multifunctional method to get and set values of a collection\n\t// The value/s can optionally be executed if it's a function\n\tvar access = function (elems, fn, key, value, chainable, emptyGet, raw) {\n\t\tvar i = 0,\n\t\t\tlen = elems.length,\n\t\t\tbulk = key == null;\n\n\t\t// Sets many values\n\t\tif (toType(key) === \"object\") {\n\t\t\tchainable = true;\n\t\t\tfor (i in key) {\n\t\t\t\taccess(elems, fn, i, key[i], true, emptyGet, raw);\n\t\t\t}\n\n\t\t\t// Sets one value\n\t\t} else if (value !== undefined) {\n\t\t\tchainable = true;\n\n\t\t\tif (!isFunction(value)) {\n\t\t\t\traw = true;\n\t\t\t}\n\n\t\t\tif (bulk) {\n\n\t\t\t\t// Bulk operations run against the entire set\n\t\t\t\tif (raw) {\n\t\t\t\t\tfn.call(elems, value);\n\t\t\t\t\tfn = null;\n\n\t\t\t\t\t// ...except when executing function values\n\t\t\t\t} else {\n\t\t\t\t\tbulk = fn;\n\t\t\t\t\tfn = function (elem, _key, value) {\n\t\t\t\t\t\treturn bulk.call(jQuery(elem), value);\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (fn) {\n\t\t\t\tfor (; i < len; i++) {\n\t\t\t\t\tfn(\n\t\t\t\t\t\telems[i], key, raw ?\n\t\t\t\t\t\tvalue :\n\t\t\t\t\t\tvalue.call(elems[i], i, fn(elems[i], key))\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (chainable) {\n\t\t\treturn elems;\n\t\t}\n\n\t\t// Gets\n\t\tif (bulk) {\n\t\t\treturn fn.call(elems);\n\t\t}\n\n\t\treturn len ? fn(elems[0], key) : emptyGet;\n\t};\n\n\n\t// Matches dashed string for camelizing\n\tvar rmsPrefix = /^-ms-/,\n\t\trdashAlpha = /-([a-z])/g;\n\n\t// Used by camelCase as callback to replace()\n\tfunction fcamelCase(_all, letter) {\n\t\treturn letter.toUpperCase();\n\t}\n\n\t// Convert dashed to camelCase; used by the css and data modules\n\t// Support: IE <=9 - 11, Edge 12 - 15\n\t// Microsoft forgot to hump their vendor prefix (trac-9572)\n\tfunction camelCase(string) {\n\t\treturn string.replace(rmsPrefix, \"ms-\").replace(rdashAlpha, fcamelCase);\n\t}\n\tvar acceptData = function (owner) {\n\n\t\t// Accepts only:\n\t\t//  - Node\n\t\t//    - Node.ELEMENT_NODE\n\t\t//    - Node.DOCUMENT_NODE\n\t\t//  - Object\n\t\t//    - Any\n\t\treturn owner.nodeType === 1 || owner.nodeType === 9 || !(+owner.nodeType);\n\t};\n\n\n\n\n\tfunction Data() {\n\t\tthis.expando = jQuery.expando + Data.uid++;\n\t}\n\n\tData.uid = 1;\n\n\tData.prototype = {\n\n\t\tcache: function (owner) {\n\n\t\t\t// Check if the owner object already has a cache\n\t\t\tvar value = owner[this.expando];\n\n\t\t\t// If not, create one\n\t\t\tif (!value) {\n\t\t\t\tvalue = {};\n\n\t\t\t\t// We can accept data for non-element nodes in modern browsers,\n\t\t\t\t// but we should not, see trac-8335.\n\t\t\t\t// Always return an empty object.\n\t\t\t\tif (acceptData(owner)) {\n\n\t\t\t\t\t// If it is a node unlikely to be stringify-ed or looped over\n\t\t\t\t\t// use plain assignment\n\t\t\t\t\tif (owner.nodeType) {\n\t\t\t\t\t\towner[this.expando] = value;\n\n\t\t\t\t\t\t// Otherwise secure it in a non-enumerable property\n\t\t\t\t\t\t// configurable must be true to allow the property to be\n\t\t\t\t\t\t// deleted when data is removed\n\t\t\t\t\t} else {\n\t\t\t\t\t\tObject.defineProperty(owner, this.expando, {\n\t\t\t\t\t\t\tvalue: value,\n\t\t\t\t\t\t\tconfigurable: true\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn value;\n\t\t},\n\t\tset: function (owner, data, value) {\n\t\t\tvar prop,\n\t\t\t\tcache = this.cache(owner);\n\n\t\t\t// Handle: [ owner, key, value ] args\n\t\t\t// Always use camelCase key (gh-2257)\n\t\t\tif (typeof data === \"string\") {\n\t\t\t\tcache[camelCase(data)] = value;\n\n\t\t\t\t// Handle: [ owner, { properties } ] args\n\t\t\t} else {\n\n\t\t\t\t// Copy the properties one-by-one to the cache object\n\t\t\t\tfor (prop in data) {\n\t\t\t\t\tcache[camelCase(prop)] = data[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn cache;\n\t\t},\n\t\tget: function (owner, key) {\n\t\t\treturn key === undefined ?\n\t\t\t\tthis.cache(owner) :\n\n\t\t\t\t// Always use camelCase key (gh-2257)\n\t\t\t\towner[this.expando] && owner[this.expando][camelCase(key)];\n\t\t},\n\t\taccess: function (owner, key, value) {\n\n\t\t\t// In cases where either:\n\t\t\t//\n\t\t\t//   1. No key was specified\n\t\t\t//   2. A string key was specified, but no value provided\n\t\t\t//\n\t\t\t// Take the \"read\" path and allow the get method to determine\n\t\t\t// which value to return, respectively either:\n\t\t\t//\n\t\t\t//   1. The entire cache object\n\t\t\t//   2. The data stored at the key\n\t\t\t//\n\t\t\tif (key === undefined ||\n\t\t\t\t((key && typeof key === \"string\") && value === undefined)) {\n\n\t\t\t\treturn this.get(owner, key);\n\t\t\t}\n\n\t\t\t// When the key is not a string, or both a key and value\n\t\t\t// are specified, set or extend (existing objects) with either:\n\t\t\t//\n\t\t\t//   1. An object of properties\n\t\t\t//   2. A key and value\n\t\t\t//\n\t\t\tthis.set(owner, key, value);\n\n\t\t\t// Since the \"set\" path can have two possible entry points\n\t\t\t// return the expected data based on which path was taken[*]\n\t\t\treturn value !== undefined ? value : key;\n\t\t},\n\t\tremove: function (owner, key) {\n\t\t\tvar i,\n\t\t\t\tcache = owner[this.expando];\n\n\t\t\tif (cache === undefined) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (key !== undefined) {\n\n\t\t\t\t// Support array or space separated string of keys\n\t\t\t\tif (Array.isArray(key)) {\n\n\t\t\t\t\t// If key is an array of keys...\n\t\t\t\t\t// We always set camelCase keys, so remove that.\n\t\t\t\t\tkey = key.map(camelCase);\n\t\t\t\t} else {\n\t\t\t\t\tkey = camelCase(key);\n\n\t\t\t\t\t// If a key with the spaces exists, use it.\n\t\t\t\t\t// Otherwise, create an array by matching non-whitespace\n\t\t\t\t\tkey = key in cache ?\n\t\t\t\t\t\t[key] :\n\t\t\t\t\t\t(key.match(rnothtmlwhite) || []);\n\t\t\t\t}\n\n\t\t\t\ti = key.length;\n\n\t\t\t\twhile (i--) {\n\t\t\t\t\tdelete cache[key[i]];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove the expando if there's no more data\n\t\t\tif (key === undefined || jQuery.isEmptyObject(cache)) {\n\n\t\t\t\t// Support: Chrome <=35 - 45\n\t\t\t\t// Webkit & Blink performance suffers when deleting properties\n\t\t\t\t// from DOM nodes, so set to undefined instead\n\t\t\t\t// https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted)\n\t\t\t\tif (owner.nodeType) {\n\t\t\t\t\towner[this.expando] = undefined;\n\t\t\t\t} else {\n\t\t\t\t\tdelete owner[this.expando];\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\thasData: function (owner) {\n\t\t\tvar cache = owner[this.expando];\n\t\t\treturn cache !== undefined && !jQuery.isEmptyObject(cache);\n\t\t}\n\t};\n\tvar dataPriv = new Data();\n\n\tvar dataUser = new Data();\n\n\n\n\t//\tImplementation Summary\n\t//\n\t//\t1. Enforce API surface and semantic compatibility with 1.9.x branch\n\t//\t2. Improve the module's maintainability by reducing the storage\n\t//\t\tpaths to a single mechanism.\n\t//\t3. Use the same single mechanism to support \"private\" and \"user\" data.\n\t//\t4. _Never_ expose \"private\" data to user code (TODO: Drop _data, _removeData)\n\t//\t5. Avoid exposing implementation details on user objects (eg. expando properties)\n\t//\t6. Provide a clear path for implementation upgrade to WeakMap in 2014\n\n\tvar rbrace = /^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,\n\t\trmultiDash = /[A-Z]/g;\n\n\tfunction getData(data) {\n\t\tif (data === \"true\") {\n\t\t\treturn true;\n\t\t}\n\n\t\tif (data === \"false\") {\n\t\t\treturn false;\n\t\t}\n\n\t\tif (data === \"null\") {\n\t\t\treturn null;\n\t\t}\n\n\t\t// Only convert to a number if it doesn't change the string\n\t\tif (data === +data + \"\") {\n\t\t\treturn +data;\n\t\t}\n\n\t\tif (rbrace.test(data)) {\n\t\t\treturn JSON.parse(data);\n\t\t}\n\n\t\treturn data;\n\t}\n\n\tfunction dataAttr(elem, key, data) {\n\t\tvar name;\n\n\t\t// If nothing was found internally, try to fetch any\n\t\t// data from the HTML5 data-* attribute\n\t\tif (data === undefined && elem.nodeType === 1) {\n\t\t\tname = \"data-\" + key.replace(rmultiDash, \"-$&\").toLowerCase();\n\t\t\tdata = elem.getAttribute(name);\n\n\t\t\tif (typeof data === \"string\") {\n\t\t\t\ttry {\n\t\t\t\t\tdata = getData(data);\n\t\t\t\t} catch (e) { }\n\n\t\t\t\t// Make sure we set the data so it isn't changed later\n\t\t\t\tdataUser.set(elem, key, data);\n\t\t\t} else {\n\t\t\t\tdata = undefined;\n\t\t\t}\n\t\t}\n\t\treturn data;\n\t}\n\n\tjQuery.extend({\n\t\thasData: function (elem) {\n\t\t\treturn dataUser.hasData(elem) || dataPriv.hasData(elem);\n\t\t},\n\n\t\tdata: function (elem, name, data) {\n\t\t\treturn dataUser.access(elem, name, data);\n\t\t},\n\n\t\tremoveData: function (elem, name) {\n\t\t\tdataUser.remove(elem, name);\n\t\t},\n\n\t\t// TODO: Now that all calls to _data and _removeData have been replaced\n\t\t// with direct calls to dataPriv methods, these can be deprecated.\n\t\t_data: function (elem, name, data) {\n\t\t\treturn dataPriv.access(elem, name, data);\n\t\t},\n\n\t\t_removeData: function (elem, name) {\n\t\t\tdataPriv.remove(elem, name);\n\t\t}\n\t});\n\n\tjQuery.fn.extend({\n\t\tdata: function (key, value) {\n\t\t\tvar i, name, data,\n\t\t\t\telem = this[0],\n\t\t\t\tattrs = elem && elem.attributes;\n\n\t\t\t// Gets all values\n\t\t\tif (key === undefined) {\n\t\t\t\tif (this.length) {\n\t\t\t\t\tdata = dataUser.get(elem);\n\n\t\t\t\t\tif (elem.nodeType === 1 && !dataPriv.get(elem, \"hasDataAttrs\")) {\n\t\t\t\t\t\ti = attrs.length;\n\t\t\t\t\t\twhile (i--) {\n\n\t\t\t\t\t\t\t// Support: IE 11 only\n\t\t\t\t\t\t\t// The attrs elements can be null (trac-14894)\n\t\t\t\t\t\t\tif (attrs[i]) {\n\t\t\t\t\t\t\t\tname = attrs[i].name;\n\t\t\t\t\t\t\t\tif (name.indexOf(\"data-\") === 0) {\n\t\t\t\t\t\t\t\t\tname = camelCase(name.slice(5));\n\t\t\t\t\t\t\t\t\tdataAttr(elem, name, data[name]);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdataPriv.set(elem, \"hasDataAttrs\", true);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn data;\n\t\t\t}\n\n\t\t\t// Sets multiple values\n\t\t\tif (typeof key === \"object\") {\n\t\t\t\treturn this.each(function () {\n\t\t\t\t\tdataUser.set(this, key);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn access(this, function (value) {\n\t\t\t\tvar data;\n\n\t\t\t\t// The calling jQuery object (element matches) is not empty\n\t\t\t\t// (and therefore has an element appears at this[ 0 ]) and the\n\t\t\t\t// `value` parameter was not undefined. An empty jQuery object\n\t\t\t\t// will result in `undefined` for elem = this[ 0 ] which will\n\t\t\t\t// throw an exception if an attempt to read a data cache is made.\n\t\t\t\tif (elem && value === undefined) {\n\n\t\t\t\t\t// Attempt to get data from the cache\n\t\t\t\t\t// The key will always be camelCased in Data\n\t\t\t\t\tdata = dataUser.get(elem, key);\n\t\t\t\t\tif (data !== undefined) {\n\t\t\t\t\t\treturn data;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Attempt to \"discover\" the data in\n\t\t\t\t\t// HTML5 custom data-* attrs\n\t\t\t\t\tdata = dataAttr(elem, key);\n\t\t\t\t\tif (data !== undefined) {\n\t\t\t\t\t\treturn data;\n\t\t\t\t\t}\n\n\t\t\t\t\t// We tried really hard, but the data doesn't exist.\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Set the data...\n\t\t\t\tthis.each(function () {\n\n\t\t\t\t\t// We always store the camelCased key\n\t\t\t\t\tdataUser.set(this, key, value);\n\t\t\t\t});\n\t\t\t}, null, value, arguments.length > 1, null, true);\n\t\t},\n\n\t\tremoveData: function (key) {\n\t\t\treturn this.each(function () {\n\t\t\t\tdataUser.remove(this, key);\n\t\t\t});\n\t\t}\n\t});\n\n\n\tjQuery.extend({\n\t\tqueue: function (elem, type, data) {\n\t\t\tvar queue;\n\n\t\t\tif (elem) {\n\t\t\t\ttype = (type || \"fx\") + \"queue\";\n\t\t\t\tqueue = dataPriv.get(elem, type);\n\n\t\t\t\t// Speed up dequeue by getting out quickly if this is just a lookup\n\t\t\t\tif (data) {\n\t\t\t\t\tif (!queue || Array.isArray(data)) {\n\t\t\t\t\t\tqueue = dataPriv.access(elem, type, jQuery.makeArray(data));\n\t\t\t\t\t} else {\n\t\t\t\t\t\tqueue.push(data);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn queue || [];\n\t\t\t}\n\t\t},\n\n\t\tdequeue: function (elem, type) {\n\t\t\ttype = type || \"fx\";\n\n\t\t\tvar queue = jQuery.queue(elem, type),\n\t\t\t\tstartLength = queue.length,\n\t\t\t\tfn = queue.shift(),\n\t\t\t\thooks = jQuery._queueHooks(elem, type),\n\t\t\t\tnext = function () {\n\t\t\t\t\tjQuery.dequeue(elem, type);\n\t\t\t\t};\n\n\t\t\t// If the fx queue is dequeued, always remove the progress sentinel\n\t\t\tif (fn === \"inprogress\") {\n\t\t\t\tfn = queue.shift();\n\t\t\t\tstartLength--;\n\t\t\t}\n\n\t\t\tif (fn) {\n\n\t\t\t\t// Add a progress sentinel to prevent the fx queue from being\n\t\t\t\t// automatically dequeued\n\t\t\t\tif (type === \"fx\") {\n\t\t\t\t\tqueue.unshift(\"inprogress\");\n\t\t\t\t}\n\n\t\t\t\t// Clear up the last queue stop function\n\t\t\t\tdelete hooks.stop;\n\t\t\t\tfn.call(elem, next, hooks);\n\t\t\t}\n\n\t\t\tif (!startLength && hooks) {\n\t\t\t\thooks.empty.fire();\n\t\t\t}\n\t\t},\n\n\t\t// Not public - generate a queueHooks object, or return the current one\n\t\t_queueHooks: function (elem, type) {\n\t\t\tvar key = type + \"queueHooks\";\n\t\t\treturn dataPriv.get(elem, key) || dataPriv.access(elem, key, {\n\t\t\t\tempty: jQuery.Callbacks(\"once memory\").add(function () {\n\t\t\t\t\tdataPriv.remove(elem, [type + \"queue\", key]);\n\t\t\t\t})\n\t\t\t});\n\t\t}\n\t});\n\n\tjQuery.fn.extend({\n\t\tqueue: function (type, data) {\n\t\t\tvar setter = 2;\n\n\t\t\tif (typeof type !== \"string\") {\n\t\t\t\tdata = type;\n\t\t\t\ttype = \"fx\";\n\t\t\t\tsetter--;\n\t\t\t}\n\n\t\t\tif (arguments.length < setter) {\n\t\t\t\treturn jQuery.queue(this[0], type);\n\t\t\t}\n\n\t\t\treturn data === undefined ?\n\t\t\t\tthis :\n\t\t\t\tthis.each(function () {\n\t\t\t\t\tvar queue = jQuery.queue(this, type, data);\n\n\t\t\t\t\t// Ensure a hooks for this queue\n\t\t\t\t\tjQuery._queueHooks(this, type);\n\n\t\t\t\t\tif (type === \"fx\" && queue[0] !== \"inprogress\") {\n\t\t\t\t\t\tjQuery.dequeue(this, type);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t},\n\t\tdequeue: function (type) {\n\t\t\treturn this.each(function () {\n\t\t\t\tjQuery.dequeue(this, type);\n\t\t\t});\n\t\t},\n\t\tclearQueue: function (type) {\n\t\t\treturn this.queue(type || \"fx\", []);\n\t\t},\n\n\t\t// Get a promise resolved when queues of a certain type\n\t\t// are emptied (fx is the type by default)\n\t\tpromise: function (type, obj) {\n\t\t\tvar tmp,\n\t\t\t\tcount = 1,\n\t\t\t\tdefer = jQuery.Deferred(),\n\t\t\t\telements = this,\n\t\t\t\ti = this.length,\n\t\t\t\tresolve = function () {\n\t\t\t\t\tif (!(--count)) {\n\t\t\t\t\t\tdefer.resolveWith(elements, [elements]);\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\tif (typeof type !== \"string\") {\n\t\t\t\tobj = type;\n\t\t\t\ttype = undefined;\n\t\t\t}\n\t\t\ttype = type || \"fx\";\n\n\t\t\twhile (i--) {\n\t\t\t\ttmp = dataPriv.get(elements[i], type + \"queueHooks\");\n\t\t\t\tif (tmp && tmp.empty) {\n\t\t\t\t\tcount++;\n\t\t\t\t\ttmp.empty.add(resolve);\n\t\t\t\t}\n\t\t\t}\n\t\t\tresolve();\n\t\t\treturn defer.promise(obj);\n\t\t}\n\t});\n\tvar pnum = (/[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/).source;\n\n\tvar rcssNum = new RegExp(\"^(?:([+-])=|)(\" + pnum + \")([a-z%]*)$\", \"i\");\n\n\n\tvar cssExpand = [\"Top\", \"Right\", \"Bottom\", \"Left\"];\n\n\tvar documentElement = document.documentElement;\n\n\n\n\tvar isAttached = function (elem) {\n\t\treturn jQuery.contains(elem.ownerDocument, elem);\n\t},\n\t\tcomposed = { composed: true };\n\n\t// Support: IE 9 - 11+, Edge 12 - 18+, iOS 10.0 - 10.2 only\n\t// Check attachment across shadow DOM boundaries when possible (gh-3504)\n\t// Support: iOS 10.0-10.2 only\n\t// Early iOS 10 versions support `attachShadow` but not `getRootNode`,\n\t// leading to errors. We need to check for `getRootNode`.\n\tif (documentElement.getRootNode) {\n\t\tisAttached = function (elem) {\n\t\t\treturn jQuery.contains(elem.ownerDocument, elem) ||\n\t\t\t\telem.getRootNode(composed) === elem.ownerDocument;\n\t\t};\n\t}\n\tvar isHiddenWithinTree = function (elem, el) {\n\n\t\t// isHiddenWithinTree might be called from jQuery#filter function;\n\t\t// in that case, element will be second argument\n\t\telem = el || elem;\n\n\t\t// Inline style trumps all\n\t\treturn elem.style.display === \"none\" ||\n\t\t\telem.style.display === \"\" &&\n\n\t\t\t// Otherwise, check computed style\n\t\t\t// Support: Firefox <=43 - 45\n\t\t\t// Disconnected elements can have computed display: none, so first confirm that elem is\n\t\t\t// in the document.\n\t\t\tisAttached(elem) &&\n\n\t\t\tjQuery.css(elem, \"display\") === \"none\";\n\t};\n\n\n\n\tfunction adjustCSS(elem, prop, valueParts, tween) {\n\t\tvar adjusted, scale,\n\t\t\tmaxIterations = 20,\n\t\t\tcurrentValue = tween ?\n\t\t\t\tfunction () {\n\t\t\t\t\treturn tween.cur();\n\t\t\t\t} :\n\t\t\t\tfunction () {\n\t\t\t\t\treturn jQuery.css(elem, prop, \"\");\n\t\t\t\t},\n\t\t\tinitial = currentValue(),\n\t\t\tunit = valueParts && valueParts[3] || (jQuery.cssNumber[prop] ? \"\" : \"px\"),\n\n\t\t\t// Starting value computation is required for potential unit mismatches\n\t\t\tinitialInUnit = elem.nodeType &&\n\t\t\t\t(jQuery.cssNumber[prop] || unit !== \"px\" && +initial) &&\n\t\t\t\trcssNum.exec(jQuery.css(elem, prop));\n\n\t\tif (initialInUnit && initialInUnit[3] !== unit) {\n\n\t\t\t// Support: Firefox <=54\n\t\t\t// Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144)\n\t\t\tinitial = initial / 2;\n\n\t\t\t// Trust units reported by jQuery.css\n\t\t\tunit = unit || initialInUnit[3];\n\n\t\t\t// Iteratively approximate from a nonzero starting point\n\t\t\tinitialInUnit = +initial || 1;\n\n\t\t\twhile (maxIterations--) {\n\n\t\t\t\t// Evaluate and update our best guess (doubling guesses that zero out).\n\t\t\t\t// Finish if the scale equals or crosses 1 (making the old*new product non-positive).\n\t\t\t\tjQuery.style(elem, prop, initialInUnit + unit);\n\t\t\t\tif ((1 - scale) * (1 - (scale = currentValue() / initial || 0.5)) <= 0) {\n\t\t\t\t\tmaxIterations = 0;\n\t\t\t\t}\n\t\t\t\tinitialInUnit = initialInUnit / scale;\n\n\t\t\t}\n\n\t\t\tinitialInUnit = initialInUnit * 2;\n\t\t\tjQuery.style(elem, prop, initialInUnit + unit);\n\n\t\t\t// Make sure we update the tween properties later on\n\t\t\tvalueParts = valueParts || [];\n\t\t}\n\n\t\tif (valueParts) {\n\t\t\tinitialInUnit = +initialInUnit || +initial || 0;\n\n\t\t\t// Apply relative offset (+=/-=) if specified\n\t\t\tadjusted = valueParts[1] ?\n\t\t\t\tinitialInUnit + (valueParts[1] + 1) * valueParts[2] :\n\t\t\t\t+valueParts[2];\n\t\t\tif (tween) {\n\t\t\t\ttween.unit = unit;\n\t\t\t\ttween.start = initialInUnit;\n\t\t\t\ttween.end = adjusted;\n\t\t\t}\n\t\t}\n\t\treturn adjusted;\n\t}\n\n\n\tvar defaultDisplayMap = {};\n\n\tfunction getDefaultDisplay(elem) {\n\t\tvar temp,\n\t\t\tdoc = elem.ownerDocument,\n\t\t\tnodeName = elem.nodeName,\n\t\t\tdisplay = defaultDisplayMap[nodeName];\n\n\t\tif (display) {\n\t\t\treturn display;\n\t\t}\n\n\t\ttemp = doc.body.appendChild(doc.createElement(nodeName));\n\t\tdisplay = jQuery.css(temp, \"display\");\n\n\t\ttemp.parentNode.removeChild(temp);\n\n\t\tif (display === \"none\") {\n\t\t\tdisplay = \"block\";\n\t\t}\n\t\tdefaultDisplayMap[nodeName] = display;\n\n\t\treturn display;\n\t}\n\n\tfunction showHide(elements, show) {\n\t\tvar display, elem,\n\t\t\tvalues = [],\n\t\t\tindex = 0,\n\t\t\tlength = elements.length;\n\n\t\t// Determine new display value for elements that need to change\n\t\tfor (; index < length; index++) {\n\t\t\telem = elements[index];\n\t\t\tif (!elem.style) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tdisplay = elem.style.display;\n\t\t\tif (show) {\n\n\t\t\t\t// Since we force visibility upon cascade-hidden elements, an immediate (and slow)\n\t\t\t\t// check is required in this first loop unless we have a nonempty display value (either\n\t\t\t\t// inline or about-to-be-restored)\n\t\t\t\tif (display === \"none\") {\n\t\t\t\t\tvalues[index] = dataPriv.get(elem, \"display\") || null;\n\t\t\t\t\tif (!values[index]) {\n\t\t\t\t\t\telem.style.display = \"\";\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (elem.style.display === \"\" && isHiddenWithinTree(elem)) {\n\t\t\t\t\tvalues[index] = getDefaultDisplay(elem);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (display !== \"none\") {\n\t\t\t\t\tvalues[index] = \"none\";\n\n\t\t\t\t\t// Remember what we're overwriting\n\t\t\t\t\tdataPriv.set(elem, \"display\", display);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Set the display of the elements in a second loop to avoid constant reflow\n\t\tfor (index = 0; index < length; index++) {\n\t\t\tif (values[index] != null) {\n\t\t\t\telements[index].style.display = values[index];\n\t\t\t}\n\t\t}\n\n\t\treturn elements;\n\t}\n\n\tjQuery.fn.extend({\n\t\tshow: function () {\n\t\t\treturn showHide(this, true);\n\t\t},\n\t\thide: function () {\n\t\t\treturn showHide(this);\n\t\t},\n\t\ttoggle: function (state) {\n\t\t\tif (typeof state === \"boolean\") {\n\t\t\t\treturn state ? this.show() : this.hide();\n\t\t\t}\n\n\t\t\treturn this.each(function () {\n\t\t\t\tif (isHiddenWithinTree(this)) {\n\t\t\t\t\tjQuery(this).show();\n\t\t\t\t} else {\n\t\t\t\t\tjQuery(this).hide();\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t});\n\tvar rcheckableType = (/^(?:checkbox|radio)$/i);\n\n\tvar rtagName = (/<([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]*)/i);\n\n\tvar rscriptType = (/^$|^module$|\\/(?:java|ecma)script/i);\n\n\n\n\t(function () {\n\t\tvar fragment = document.createDocumentFragment(),\n\t\t\tdiv = fragment.appendChild(document.createElement(\"div\")),\n\t\t\tinput = document.createElement(\"input\");\n\n\t\t// Support: Android 4.0 - 4.3 only\n\t\t// Check state lost if the name is set (trac-11217)\n\t\t// Support: Windows Web Apps (WWA)\n\t\t// `name` and `type` must use .setAttribute for WWA (trac-14901)\n\t\tinput.setAttribute(\"type\", \"radio\");\n\t\tinput.setAttribute(\"checked\", \"checked\");\n\t\tinput.setAttribute(\"name\", \"t\");\n\n\t\tdiv.appendChild(input);\n\n\t\t// Support: Android <=4.1 only\n\t\t// Older WebKit doesn't clone checked state correctly in fragments\n\t\tsupport.checkClone = div.cloneNode(true).cloneNode(true).lastChild.checked;\n\n\t\t// Support: IE <=11 only\n\t\t// Make sure textarea (and checkbox) defaultValue is properly cloned\n\t\tdiv.innerHTML = \"<textarea>x</textarea>\";\n\t\tsupport.noCloneChecked = !!div.cloneNode(true).lastChild.defaultValue;\n\n\t\t// Support: IE <=9 only\n\t\t// IE <=9 replaces <option> tags with their contents when inserted outside of\n\t\t// the select element.\n\t\tdiv.innerHTML = \"<option></option>\";\n\t\tsupport.option = !!div.lastChild;\n\t})();\n\n\n\t// We have to close these tags to support XHTML (trac-13200)\n\tvar wrapMap = {\n\n\t\t// XHTML parsers do not magically insert elements in the\n\t\t// same way that tag soup parsers do. So we cannot shorten\n\t\t// this by omitting <tbody> or other required elements.\n\t\tthead: [1, \"<table>\", \"</table>\"],\n\t\tcol: [2, \"<table><colgroup>\", \"</colgroup></table>\"],\n\t\ttr: [2, \"<table><tbody>\", \"</tbody></table>\"],\n\t\ttd: [3, \"<table><tbody><tr>\", \"</tr></tbody></table>\"],\n\n\t\t_default: [0, \"\", \"\"]\n\t};\n\n\twrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;\n\twrapMap.th = wrapMap.td;\n\n\t// Support: IE <=9 only\n\tif (!support.option) {\n\t\twrapMap.optgroup = wrapMap.option = [1, \"<select multiple='multiple'>\", \"</select>\"];\n\t}\n\n\n\tfunction getAll(context, tag) {\n\n\t\t// Support: IE <=9 - 11 only\n\t\t// Use typeof to avoid zero-argument method invocation on host objects (trac-15151)\n\t\tvar ret;\n\n\t\tif (typeof context.getElementsByTagName !== \"undefined\") {\n\t\t\tret = context.getElementsByTagName(tag || \"*\");\n\n\t\t} else if (typeof context.querySelectorAll !== \"undefined\") {\n\t\t\tret = context.querySelectorAll(tag || \"*\");\n\n\t\t} else {\n\t\t\tret = [];\n\t\t}\n\n\t\tif (tag === undefined || tag && nodeName(context, tag)) {\n\t\t\treturn jQuery.merge([context], ret);\n\t\t}\n\n\t\treturn ret;\n\t}\n\n\n\t// Mark scripts as having already been evaluated\n\tfunction setGlobalEval(elems, refElements) {\n\t\tvar i = 0,\n\t\t\tl = elems.length;\n\n\t\tfor (; i < l; i++) {\n\t\t\tdataPriv.set(\n\t\t\t\telems[i],\n\t\t\t\t\"globalEval\",\n\t\t\t\t!refElements || dataPriv.get(refElements[i], \"globalEval\")\n\t\t\t);\n\t\t}\n\t}\n\n\n\tvar rhtml = /<|&#?\\w+;/;\n\n\tfunction buildFragment(elems, context, scripts, selection, ignored) {\n\t\tvar elem, tmp, tag, wrap, attached, j,\n\t\t\tfragment = context.createDocumentFragment(),\n\t\t\tnodes = [],\n\t\t\ti = 0,\n\t\t\tl = elems.length;\n\n\t\tfor (; i < l; i++) {\n\t\t\telem = elems[i];\n\n\t\t\tif (elem || elem === 0) {\n\n\t\t\t\t// Add nodes directly\n\t\t\t\tif (toType(elem) === \"object\") {\n\n\t\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\t\tjQuery.merge(nodes, elem.nodeType ? [elem] : elem);\n\n\t\t\t\t\t// Convert non-html into a text node\n\t\t\t\t} else if (!rhtml.test(elem)) {\n\t\t\t\t\tnodes.push(context.createTextNode(elem));\n\n\t\t\t\t\t// Convert html into DOM nodes\n\t\t\t\t} else {\n\t\t\t\t\ttmp = tmp || fragment.appendChild(context.createElement(\"div\"));\n\n\t\t\t\t\t// Deserialize a standard representation\n\t\t\t\t\ttag = (rtagName.exec(elem) || [\"\", \"\"])[1].toLowerCase();\n\t\t\t\t\twrap = wrapMap[tag] || wrapMap._default;\n\t\t\t\t\ttmp.innerHTML = wrap[1] + jQuery.htmlPrefilter(elem) + wrap[2];\n\n\t\t\t\t\t// Descend through wrappers to the right content\n\t\t\t\t\tj = wrap[0];\n\t\t\t\t\twhile (j--) {\n\t\t\t\t\t\ttmp = tmp.lastChild;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\t\tjQuery.merge(nodes, tmp.childNodes);\n\n\t\t\t\t\t// Remember the top-level container\n\t\t\t\t\ttmp = fragment.firstChild;\n\n\t\t\t\t\t// Ensure the created nodes are orphaned (trac-12392)\n\t\t\t\t\ttmp.textContent = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Remove wrapper from fragment\n\t\tfragment.textContent = \"\";\n\n\t\ti = 0;\n\t\twhile ((elem = nodes[i++])) {\n\n\t\t\t// Skip elements already in the context collection (trac-4087)\n\t\t\tif (selection && jQuery.inArray(elem, selection) > -1) {\n\t\t\t\tif (ignored) {\n\t\t\t\t\tignored.push(elem);\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tattached = isAttached(elem);\n\n\t\t\t// Append to fragment\n\t\t\ttmp = getAll(fragment.appendChild(elem), \"script\");\n\n\t\t\t// Preserve script evaluation history\n\t\t\tif (attached) {\n\t\t\t\tsetGlobalEval(tmp);\n\t\t\t}\n\n\t\t\t// Capture executables\n\t\t\tif (scripts) {\n\t\t\t\tj = 0;\n\t\t\t\twhile ((elem = tmp[j++])) {\n\t\t\t\t\tif (rscriptType.test(elem.type || \"\")) {\n\t\t\t\t\t\tscripts.push(elem);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn fragment;\n\t}\n\n\n\tvar rtypenamespace = /^([^.]*)(?:\\.(.+)|)/;\n\n\tfunction returnTrue() {\n\t\treturn true;\n\t}\n\n\tfunction returnFalse() {\n\t\treturn false;\n\t}\n\n\tfunction on(elem, types, selector, data, fn, one) {\n\t\tvar origFn, type;\n\n\t\t// Types can be a map of types/handlers\n\t\tif (typeof types === \"object\") {\n\n\t\t\t// ( types-Object, selector, data )\n\t\t\tif (typeof selector !== \"string\") {\n\n\t\t\t\t// ( types-Object, data )\n\t\t\t\tdata = data || selector;\n\t\t\t\tselector = undefined;\n\t\t\t}\n\t\t\tfor (type in types) {\n\t\t\t\ton(elem, type, selector, data, types[type], one);\n\t\t\t}\n\t\t\treturn elem;\n\t\t}\n\n\t\tif (data == null && fn == null) {\n\n\t\t\t// ( types, fn )\n\t\t\tfn = selector;\n\t\t\tdata = selector = undefined;\n\t\t} else if (fn == null) {\n\t\t\tif (typeof selector === \"string\") {\n\n\t\t\t\t// ( types, selector, fn )\n\t\t\t\tfn = data;\n\t\t\t\tdata = undefined;\n\t\t\t} else {\n\n\t\t\t\t// ( types, data, fn )\n\t\t\t\tfn = data;\n\t\t\t\tdata = selector;\n\t\t\t\tselector = undefined;\n\t\t\t}\n\t\t}\n\t\tif (fn === false) {\n\t\t\tfn = returnFalse;\n\t\t} else if (!fn) {\n\t\t\treturn elem;\n\t\t}\n\n\t\tif (one === 1) {\n\t\t\torigFn = fn;\n\t\t\tfn = function (event) {\n\n\t\t\t\t// Can use an empty set, since event contains the info\n\t\t\t\tjQuery().off(event);\n\t\t\t\treturn origFn.apply(this, arguments);\n\t\t\t};\n\n\t\t\t// Use same guid so caller can remove using origFn\n\t\t\tfn.guid = origFn.guid || (origFn.guid = jQuery.guid++);\n\t\t}\n\t\treturn elem.each(function () {\n\t\t\tjQuery.event.add(this, types, fn, data, selector);\n\t\t});\n\t}\n\n\t/*\n\t * Helper functions for managing events -- not part of the public interface.\n\t * Props to Dean Edwards' addEvent library for many of the ideas.\n\t */\n\tjQuery.event = {\n\n\t\tglobal: {},\n\n\t\tadd: function (elem, types, handler, data, selector) {\n\n\t\t\tvar handleObjIn, eventHandle, tmp,\n\t\t\t\tevents, t, handleObj,\n\t\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\t\telemData = dataPriv.get(elem);\n\n\t\t\t// Only attach events to objects that accept data\n\t\t\tif (!acceptData(elem)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Caller can pass in an object of custom data in lieu of the handler\n\t\t\tif (handler.handler) {\n\t\t\t\thandleObjIn = handler;\n\t\t\t\thandler = handleObjIn.handler;\n\t\t\t\tselector = handleObjIn.selector;\n\t\t\t}\n\n\t\t\t// Ensure that invalid selectors throw exceptions at attach time\n\t\t\t// Evaluate against documentElement in case elem is a non-element node (e.g., document)\n\t\t\tif (selector) {\n\t\t\t\tjQuery.find.matchesSelector(documentElement, selector);\n\t\t\t}\n\n\t\t\t// Make sure that the handler has a unique ID, used to find/remove it later\n\t\t\tif (!handler.guid) {\n\t\t\t\thandler.guid = jQuery.guid++;\n\t\t\t}\n\n\t\t\t// Init the element's event structure and main handler, if this is the first\n\t\t\tif (!(events = elemData.events)) {\n\t\t\t\tevents = elemData.events = Object.create(null);\n\t\t\t}\n\t\t\tif (!(eventHandle = elemData.handle)) {\n\t\t\t\teventHandle = elemData.handle = function (e) {\n\n\t\t\t\t\t// Discard the second event of a jQuery.event.trigger() and\n\t\t\t\t\t// when an event is called after a page has unloaded\n\t\t\t\t\treturn typeof jQuery !== \"undefined\" && jQuery.event.triggered !== e.type ?\n\t\t\t\t\t\tjQuery.event.dispatch.apply(elem, arguments) : undefined;\n\t\t\t\t};\n\t\t\t}\n\n\t\t\t// Handle multiple events separated by a space\n\t\t\ttypes = (types || \"\").match(rnothtmlwhite) || [\"\"];\n\t\t\tt = types.length;\n\t\t\twhile (t--) {\n\t\t\t\ttmp = rtypenamespace.exec(types[t]) || [];\n\t\t\t\ttype = origType = tmp[1];\n\t\t\t\tnamespaces = (tmp[2] || \"\").split(\".\").sort();\n\n\t\t\t\t// There *must* be a type, no attaching namespace-only handlers\n\t\t\t\tif (!type) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// If event changes its type, use the special event handlers for the changed type\n\t\t\t\tspecial = jQuery.event.special[type] || {};\n\n\t\t\t\t// If selector defined, determine special event api type, otherwise given type\n\t\t\t\ttype = (selector ? special.delegateType : special.bindType) || type;\n\n\t\t\t\t// Update special based on newly reset type\n\t\t\t\tspecial = jQuery.event.special[type] || {};\n\n\t\t\t\t// handleObj is passed to all event handlers\n\t\t\t\thandleObj = jQuery.extend({\n\t\t\t\t\ttype: type,\n\t\t\t\t\torigType: origType,\n\t\t\t\t\tdata: data,\n\t\t\t\t\thandler: handler,\n\t\t\t\t\tguid: handler.guid,\n\t\t\t\t\tselector: selector,\n\t\t\t\t\tneedsContext: selector && jQuery.expr.match.needsContext.test(selector),\n\t\t\t\t\tnamespace: namespaces.join(\".\")\n\t\t\t\t}, handleObjIn);\n\n\t\t\t\t// Init the event handler queue if we're the first\n\t\t\t\tif (!(handlers = events[type])) {\n\t\t\t\t\thandlers = events[type] = [];\n\t\t\t\t\thandlers.delegateCount = 0;\n\n\t\t\t\t\t// Only use addEventListener if the special events handler returns false\n\t\t\t\t\tif (!special.setup ||\n\t\t\t\t\t\tspecial.setup.call(elem, data, namespaces, eventHandle) === false) {\n\n\t\t\t\t\t\tif (elem.addEventListener) {\n\t\t\t\t\t\t\telem.addEventListener(type, eventHandle);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (special.add) {\n\t\t\t\t\tspecial.add.call(elem, handleObj);\n\n\t\t\t\t\tif (!handleObj.handler.guid) {\n\t\t\t\t\t\thandleObj.handler.guid = handler.guid;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Add to the element's handler list, delegates in front\n\t\t\t\tif (selector) {\n\t\t\t\t\thandlers.splice(handlers.delegateCount++, 0, handleObj);\n\t\t\t\t} else {\n\t\t\t\t\thandlers.push(handleObj);\n\t\t\t\t}\n\n\t\t\t\t// Keep track of which events have ever been used, for event optimization\n\t\t\t\tjQuery.event.global[type] = true;\n\t\t\t}\n\n\t\t},\n\n\t\t// Detach an event or set of events from an element\n\t\tremove: function (elem, types, handler, selector, mappedTypes) {\n\n\t\t\tvar j, origCount, tmp,\n\t\t\t\tevents, t, handleObj,\n\t\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\t\telemData = dataPriv.hasData(elem) && dataPriv.get(elem);\n\n\t\t\tif (!elemData || !(events = elemData.events)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Once for each type.namespace in types; type may be omitted\n\t\t\ttypes = (types || \"\").match(rnothtmlwhite) || [\"\"];\n\t\t\tt = types.length;\n\t\t\twhile (t--) {\n\t\t\t\ttmp = rtypenamespace.exec(types[t]) || [];\n\t\t\t\ttype = origType = tmp[1];\n\t\t\t\tnamespaces = (tmp[2] || \"\").split(\".\").sort();\n\n\t\t\t\t// Unbind all events (on this namespace, if provided) for the element\n\t\t\t\tif (!type) {\n\t\t\t\t\tfor (type in events) {\n\t\t\t\t\t\tjQuery.event.remove(elem, type + types[t], handler, selector, true);\n\t\t\t\t\t}\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tspecial = jQuery.event.special[type] || {};\n\t\t\t\ttype = (selector ? special.delegateType : special.bindType) || type;\n\t\t\t\thandlers = events[type] || [];\n\t\t\t\ttmp = tmp[2] &&\n\t\t\t\t\tnew RegExp(\"(^|\\\\.)\" + namespaces.join(\"\\\\.(?:.*\\\\.|)\") + \"(\\\\.|$)\");\n\n\t\t\t\t// Remove matching events\n\t\t\t\torigCount = j = handlers.length;\n\t\t\t\twhile (j--) {\n\t\t\t\t\thandleObj = handlers[j];\n\n\t\t\t\t\tif ((mappedTypes || origType === handleObj.origType) &&\n\t\t\t\t\t\t(!handler || handler.guid === handleObj.guid) &&\n\t\t\t\t\t\t(!tmp || tmp.test(handleObj.namespace)) &&\n\t\t\t\t\t\t(!selector || selector === handleObj.selector ||\n\t\t\t\t\t\t\tselector === \"**\" && handleObj.selector)) {\n\t\t\t\t\t\thandlers.splice(j, 1);\n\n\t\t\t\t\t\tif (handleObj.selector) {\n\t\t\t\t\t\t\thandlers.delegateCount--;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (special.remove) {\n\t\t\t\t\t\t\tspecial.remove.call(elem, handleObj);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Remove generic event handler if we removed something and no more handlers exist\n\t\t\t\t// (avoids potential for endless recursion during removal of special event handlers)\n\t\t\t\tif (origCount && !handlers.length) {\n\t\t\t\t\tif (!special.teardown ||\n\t\t\t\t\t\tspecial.teardown.call(elem, namespaces, elemData.handle) === false) {\n\n\t\t\t\t\t\tjQuery.removeEvent(elem, type, elemData.handle);\n\t\t\t\t\t}\n\n\t\t\t\t\tdelete events[type];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove data and the expando if it's no longer used\n\t\t\tif (jQuery.isEmptyObject(events)) {\n\t\t\t\tdataPriv.remove(elem, \"handle events\");\n\t\t\t}\n\t\t},\n\n\t\tdispatch: function (nativeEvent) {\n\n\t\t\tvar i, j, ret, matched, handleObj, handlerQueue,\n\t\t\t\targs = new Array(arguments.length),\n\n\t\t\t\t// Make a writable jQuery.Event from the native event object\n\t\t\t\tevent = jQuery.event.fix(nativeEvent),\n\n\t\t\t\thandlers = (\n\t\t\t\t\tdataPriv.get(this, \"events\") || Object.create(null)\n\t\t\t\t)[event.type] || [],\n\t\t\t\tspecial = jQuery.event.special[event.type] || {};\n\n\t\t\t// Use the fix-ed jQuery.Event rather than the (read-only) native event\n\t\t\targs[0] = event;\n\n\t\t\tfor (i = 1; i < arguments.length; i++) {\n\t\t\t\targs[i] = arguments[i];\n\t\t\t}\n\n\t\t\tevent.delegateTarget = this;\n\n\t\t\t// Call the preDispatch hook for the mapped type, and let it bail if desired\n\t\t\tif (special.preDispatch && special.preDispatch.call(this, event) === false) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Determine handlers\n\t\t\thandlerQueue = jQuery.event.handlers.call(this, event, handlers);\n\n\t\t\t// Run delegates first; they may want to stop propagation beneath us\n\t\t\ti = 0;\n\t\t\twhile ((matched = handlerQueue[i++]) && !event.isPropagationStopped()) {\n\t\t\t\tevent.currentTarget = matched.elem;\n\n\t\t\t\tj = 0;\n\t\t\t\twhile ((handleObj = matched.handlers[j++]) &&\n\t\t\t\t\t!event.isImmediatePropagationStopped()) {\n\n\t\t\t\t\t// If the event is namespaced, then each handler is only invoked if it is\n\t\t\t\t\t// specially universal or its namespaces are a superset of the event's.\n\t\t\t\t\tif (!event.rnamespace || handleObj.namespace === false ||\n\t\t\t\t\t\tevent.rnamespace.test(handleObj.namespace)) {\n\n\t\t\t\t\t\tevent.handleObj = handleObj;\n\t\t\t\t\t\tevent.data = handleObj.data;\n\n\t\t\t\t\t\tret = ((jQuery.event.special[handleObj.origType] || {}).handle ||\n\t\t\t\t\t\t\thandleObj.handler).apply(matched.elem, args);\n\n\t\t\t\t\t\tif (ret !== undefined) {\n\t\t\t\t\t\t\tif ((event.result = ret) === false) {\n\t\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Call the postDispatch hook for the mapped type\n\t\t\tif (special.postDispatch) {\n\t\t\t\tspecial.postDispatch.call(this, event);\n\t\t\t}\n\n\t\t\treturn event.result;\n\t\t},\n\n\t\thandlers: function (event, handlers) {\n\t\t\tvar i, handleObj, sel, matchedHandlers, matchedSelectors,\n\t\t\t\thandlerQueue = [],\n\t\t\t\tdelegateCount = handlers.delegateCount,\n\t\t\t\tcur = event.target;\n\n\t\t\t// Find delegate handlers\n\t\t\tif (delegateCount &&\n\n\t\t\t\t// Support: IE <=9\n\t\t\t\t// Black-hole SVG <use> instance trees (trac-13180)\n\t\t\t\tcur.nodeType &&\n\n\t\t\t\t// Support: Firefox <=42\n\t\t\t\t// Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861)\n\t\t\t\t// https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click\n\t\t\t\t// Support: IE 11 only\n\t\t\t\t// ...but not arrow key \"clicks\" of radio inputs, which can have `button` -1 (gh-2343)\n\t\t\t\t!(event.type === \"click\" && event.button >= 1)) {\n\n\t\t\t\tfor (; cur !== this; cur = cur.parentNode || this) {\n\n\t\t\t\t\t// Don't check non-elements (trac-13208)\n\t\t\t\t\t// Don't process clicks on disabled elements (trac-6911, trac-8165, trac-11382, trac-11764)\n\t\t\t\t\tif (cur.nodeType === 1 && !(event.type === \"click\" && cur.disabled === true)) {\n\t\t\t\t\t\tmatchedHandlers = [];\n\t\t\t\t\t\tmatchedSelectors = {};\n\t\t\t\t\t\tfor (i = 0; i < delegateCount; i++) {\n\t\t\t\t\t\t\thandleObj = handlers[i];\n\n\t\t\t\t\t\t\t// Don't conflict with Object.prototype properties (trac-13203)\n\t\t\t\t\t\t\tsel = handleObj.selector + \" \";\n\n\t\t\t\t\t\t\tif (matchedSelectors[sel] === undefined) {\n\t\t\t\t\t\t\t\tmatchedSelectors[sel] = handleObj.needsContext ?\n\t\t\t\t\t\t\t\t\tjQuery(sel, this).index(cur) > -1 :\n\t\t\t\t\t\t\t\t\tjQuery.find(sel, this, null, [cur]).length;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (matchedSelectors[sel]) {\n\t\t\t\t\t\t\t\tmatchedHandlers.push(handleObj);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (matchedHandlers.length) {\n\t\t\t\t\t\t\thandlerQueue.push({ elem: cur, handlers: matchedHandlers });\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Add the remaining (directly-bound) handlers\n\t\t\tcur = this;\n\t\t\tif (delegateCount < handlers.length) {\n\t\t\t\thandlerQueue.push({ elem: cur, handlers: handlers.slice(delegateCount) });\n\t\t\t}\n\n\t\t\treturn handlerQueue;\n\t\t},\n\n\t\taddProp: function (name, hook) {\n\t\t\tObject.defineProperty(jQuery.Event.prototype, name, {\n\t\t\t\tenumerable: true,\n\t\t\t\tconfigurable: true,\n\n\t\t\t\tget: isFunction(hook) ?\n\t\t\t\t\tfunction () {\n\t\t\t\t\t\tif (this.originalEvent) {\n\t\t\t\t\t\t\treturn hook(this.originalEvent);\n\t\t\t\t\t\t}\n\t\t\t\t\t} :\n\t\t\t\t\tfunction () {\n\t\t\t\t\t\tif (this.originalEvent) {\n\t\t\t\t\t\t\treturn this.originalEvent[name];\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\n\t\t\t\tset: function (value) {\n\t\t\t\t\tObject.defineProperty(this, name, {\n\t\t\t\t\t\tenumerable: true,\n\t\t\t\t\t\tconfigurable: true,\n\t\t\t\t\t\twritable: true,\n\t\t\t\t\t\tvalue: value\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\tfix: function (originalEvent) {\n\t\t\treturn originalEvent[jQuery.expando] ?\n\t\t\t\toriginalEvent :\n\t\t\t\tnew jQuery.Event(originalEvent);\n\t\t},\n\n\t\tspecial: {\n\t\t\tload: {\n\n\t\t\t\t// Prevent triggered image.load events from bubbling to window.load\n\t\t\t\tnoBubble: true\n\t\t\t},\n\t\t\tclick: {\n\n\t\t\t\t// Utilize native event to ensure correct state for checkable inputs\n\t\t\t\tsetup: function (data) {\n\n\t\t\t\t\t// For mutual compressibility with _default, replace `this` access with a local var.\n\t\t\t\t\t// `|| data` is dead code meant only to preserve the variable through minification.\n\t\t\t\t\tvar el = this || data;\n\n\t\t\t\t\t// Claim the first handler\n\t\t\t\t\tif (rcheckableType.test(el.type) &&\n\t\t\t\t\t\tel.click && nodeName(el, \"input\")) {\n\n\t\t\t\t\t\t// dataPriv.set( el, \"click\", ... )\n\t\t\t\t\t\tleverageNative(el, \"click\", true);\n\t\t\t\t\t}\n\n\t\t\t\t\t// Return false to allow normal processing in the caller\n\t\t\t\t\treturn false;\n\t\t\t\t},\n\t\t\t\ttrigger: function (data) {\n\n\t\t\t\t\t// For mutual compressibility with _default, replace `this` access with a local var.\n\t\t\t\t\t// `|| data` is dead code meant only to preserve the variable through minification.\n\t\t\t\t\tvar el = this || data;\n\n\t\t\t\t\t// Force setup before triggering a click\n\t\t\t\t\tif (rcheckableType.test(el.type) &&\n\t\t\t\t\t\tel.click && nodeName(el, \"input\")) {\n\n\t\t\t\t\t\tleverageNative(el, \"click\");\n\t\t\t\t\t}\n\n\t\t\t\t\t// Return non-false to allow normal event-path propagation\n\t\t\t\t\treturn true;\n\t\t\t\t},\n\n\t\t\t\t// For cross-browser consistency, suppress native .click() on links\n\t\t\t\t// Also prevent it if we're currently inside a leveraged native-event stack\n\t\t\t\t_default: function (event) {\n\t\t\t\t\tvar target = event.target;\n\t\t\t\t\treturn rcheckableType.test(target.type) &&\n\t\t\t\t\t\ttarget.click && nodeName(target, \"input\") &&\n\t\t\t\t\t\tdataPriv.get(target, \"click\") ||\n\t\t\t\t\t\tnodeName(target, \"a\");\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tbeforeunload: {\n\t\t\t\tpostDispatch: function (event) {\n\n\t\t\t\t\t// Support: Firefox 20+\n\t\t\t\t\t// Firefox doesn't alert if the returnValue field is not set.\n\t\t\t\t\tif (event.result !== undefined && event.originalEvent) {\n\t\t\t\t\t\tevent.originalEvent.returnValue = event.result;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t// Ensure the presence of an event listener that handles manually-triggered\n\t// synthetic events by interrupting progress until reinvoked in response to\n\t// *native* events that it fires directly, ensuring that state changes have\n\t// already occurred before other listeners are invoked.\n\tfunction leverageNative(el, type, isSetup) {\n\n\t\t// Missing `isSetup` indicates a trigger call, which must force setup through jQuery.event.add\n\t\tif (!isSetup) {\n\t\t\tif (dataPriv.get(el, type) === undefined) {\n\t\t\t\tjQuery.event.add(el, type, returnTrue);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\t// Register the controller as a special universal handler for all event namespaces\n\t\tdataPriv.set(el, type, false);\n\t\tjQuery.event.add(el, type, {\n\t\t\tnamespace: false,\n\t\t\thandler: function (event) {\n\t\t\t\tvar result,\n\t\t\t\t\tsaved = dataPriv.get(this, type);\n\n\t\t\t\tif ((event.isTrigger & 1) && this[type]) {\n\n\t\t\t\t\t// Interrupt processing of the outer synthetic .trigger()ed event\n\t\t\t\t\tif (!saved) {\n\n\t\t\t\t\t\t// Store arguments for use when handling the inner native event\n\t\t\t\t\t\t// There will always be at least one argument (an event object), so this array\n\t\t\t\t\t\t// will not be confused with a leftover capture object.\n\t\t\t\t\t\tsaved = slice.call(arguments);\n\t\t\t\t\t\tdataPriv.set(this, type, saved);\n\n\t\t\t\t\t\t// Trigger the native event and capture its result\n\t\t\t\t\t\tthis[type]();\n\t\t\t\t\t\tresult = dataPriv.get(this, type);\n\t\t\t\t\t\tdataPriv.set(this, type, false);\n\n\t\t\t\t\t\tif (saved !== result) {\n\n\t\t\t\t\t\t\t// Cancel the outer synthetic event\n\t\t\t\t\t\t\tevent.stopImmediatePropagation();\n\t\t\t\t\t\t\tevent.preventDefault();\n\n\t\t\t\t\t\t\treturn result;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// If this is an inner synthetic event for an event with a bubbling surrogate\n\t\t\t\t\t\t// (focus or blur), assume that the surrogate already propagated from triggering\n\t\t\t\t\t\t// the native event and prevent that from happening again here.\n\t\t\t\t\t\t// This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the\n\t\t\t\t\t\t// bubbling surrogate propagates *after* the non-bubbling base), but that seems\n\t\t\t\t\t\t// less bad than duplication.\n\t\t\t\t\t} else if ((jQuery.event.special[type] || {}).delegateType) {\n\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t}\n\n\t\t\t\t\t// If this is a native event triggered above, everything is now in order\n\t\t\t\t\t// Fire an inner synthetic event with the original arguments\n\t\t\t\t} else if (saved) {\n\n\t\t\t\t\t// ...and capture the result\n\t\t\t\t\tdataPriv.set(this, type, jQuery.event.trigger(\n\t\t\t\t\t\tsaved[0],\n\t\t\t\t\t\tsaved.slice(1),\n\t\t\t\t\t\tthis\n\t\t\t\t\t));\n\n\t\t\t\t\t// Abort handling of the native event by all jQuery handlers while allowing\n\t\t\t\t\t// native handlers on the same element to run. On target, this is achieved\n\t\t\t\t\t// by stopping immediate propagation just on the jQuery event. However,\n\t\t\t\t\t// the native event is re-wrapped by a jQuery one on each level of the\n\t\t\t\t\t// propagation so the only way to stop it for jQuery is to stop it for\n\t\t\t\t\t// everyone via native `stopPropagation()`. This is not a problem for\n\t\t\t\t\t// focus/blur which don't bubble, but it does also stop click on checkboxes\n\t\t\t\t\t// and radios. We accept this limitation.\n\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\tevent.isImmediatePropagationStopped = returnTrue;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\tjQuery.removeEvent = function (elem, type, handle) {\n\n\t\t// This \"if\" is needed for plain objects\n\t\tif (elem.removeEventListener) {\n\t\t\telem.removeEventListener(type, handle);\n\t\t}\n\t};\n\n\tjQuery.Event = function (src, props) {\n\n\t\t// Allow instantiation without the 'new' keyword\n\t\tif (!(this instanceof jQuery.Event)) {\n\t\t\treturn new jQuery.Event(src, props);\n\t\t}\n\n\t\t// Event object\n\t\tif (src && src.type) {\n\t\t\tthis.originalEvent = src;\n\t\t\tthis.type = src.type;\n\n\t\t\t// Events bubbling up the document may have been marked as prevented\n\t\t\t// by a handler lower down the tree; reflect the correct value.\n\t\t\tthis.isDefaultPrevented = src.defaultPrevented ||\n\t\t\t\tsrc.defaultPrevented === undefined &&\n\n\t\t\t\t// Support: Android <=2.3 only\n\t\t\t\tsrc.returnValue === false ?\n\t\t\t\treturnTrue :\n\t\t\t\treturnFalse;\n\n\t\t\t// Create target properties\n\t\t\t// Support: Safari <=6 - 7 only\n\t\t\t// Target should not be a text node (trac-504, trac-13143)\n\t\t\tthis.target = (src.target && src.target.nodeType === 3) ?\n\t\t\t\tsrc.target.parentNode :\n\t\t\t\tsrc.target;\n\n\t\t\tthis.currentTarget = src.currentTarget;\n\t\t\tthis.relatedTarget = src.relatedTarget;\n\n\t\t\t// Event type\n\t\t} else {\n\t\t\tthis.type = src;\n\t\t}\n\n\t\t// Put explicitly provided properties onto the event object\n\t\tif (props) {\n\t\t\tjQuery.extend(this, props);\n\t\t}\n\n\t\t// Create a timestamp if incoming event doesn't have one\n\t\tthis.timeStamp = src && src.timeStamp || Date.now();\n\n\t\t// Mark it as fixed\n\t\tthis[jQuery.expando] = true;\n\t};\n\n\t// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding\n\t// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html\n\tjQuery.Event.prototype = {\n\t\tconstructor: jQuery.Event,\n\t\tisDefaultPrevented: returnFalse,\n\t\tisPropagationStopped: returnFalse,\n\t\tisImmediatePropagationStopped: returnFalse,\n\t\tisSimulated: false,\n\n\t\tpreventDefault: function () {\n\t\t\tvar e = this.originalEvent;\n\n\t\t\tthis.isDefaultPrevented = returnTrue;\n\n\t\t\tif (e && !this.isSimulated) {\n\t\t\t\te.preventDefault();\n\t\t\t}\n\t\t},\n\t\tstopPropagation: function () {\n\t\t\tvar e = this.originalEvent;\n\n\t\t\tthis.isPropagationStopped = returnTrue;\n\n\t\t\tif (e && !this.isSimulated) {\n\t\t\t\te.stopPropagation();\n\t\t\t}\n\t\t},\n\t\tstopImmediatePropagation: function () {\n\t\t\tvar e = this.originalEvent;\n\n\t\t\tthis.isImmediatePropagationStopped = returnTrue;\n\n\t\t\tif (e && !this.isSimulated) {\n\t\t\t\te.stopImmediatePropagation();\n\t\t\t}\n\n\t\t\tthis.stopPropagation();\n\t\t}\n\t};\n\n\t// Includes all common event props including KeyEvent and MouseEvent specific props\n\tjQuery.each({\n\t\taltKey: true,\n\t\tbubbles: true,\n\t\tcancelable: true,\n\t\tchangedTouches: true,\n\t\tctrlKey: true,\n\t\tdetail: true,\n\t\teventPhase: true,\n\t\tmetaKey: true,\n\t\tpageX: true,\n\t\tpageY: true,\n\t\tshiftKey: true,\n\t\tview: true,\n\t\t\"char\": true,\n\t\tcode: true,\n\t\tcharCode: true,\n\t\tkey: true,\n\t\tkeyCode: true,\n\t\tbutton: true,\n\t\tbuttons: true,\n\t\tclientX: true,\n\t\tclientY: true,\n\t\toffsetX: true,\n\t\toffsetY: true,\n\t\tpointerId: true,\n\t\tpointerType: true,\n\t\tscreenX: true,\n\t\tscreenY: true,\n\t\ttargetTouches: true,\n\t\ttoElement: true,\n\t\ttouches: true,\n\t\twhich: true\n\t}, jQuery.event.addProp);\n\n\tjQuery.each({ focus: \"focusin\", blur: \"focusout\" }, function (type, delegateType) {\n\n\t\tfunction focusMappedHandler(nativeEvent) {\n\t\t\tif (document.documentMode) {\n\n\t\t\t\t// Support: IE 11+\n\t\t\t\t// Attach a single focusin/focusout handler on the document while someone wants\n\t\t\t\t// focus/blur. This is because the former are synchronous in IE while the latter\n\t\t\t\t// are async. In other browsers, all those handlers are invoked synchronously.\n\n\t\t\t\t// `handle` from private data would already wrap the event, but we need\n\t\t\t\t// to change the `type` here.\n\t\t\t\tvar handle = dataPriv.get(this, \"handle\"),\n\t\t\t\t\tevent = jQuery.event.fix(nativeEvent);\n\t\t\t\tevent.type = nativeEvent.type === \"focusin\" ? \"focus\" : \"blur\";\n\t\t\t\tevent.isSimulated = true;\n\n\t\t\t\t// First, handle focusin/focusout\n\t\t\t\thandle(nativeEvent);\n\n\t\t\t\t// ...then, handle focus/blur\n\t\t\t\t//\n\t\t\t\t// focus/blur don't bubble while focusin/focusout do; simulate the former by only\n\t\t\t\t// invoking the handler at the lower level.\n\t\t\t\tif (event.target === event.currentTarget) {\n\n\t\t\t\t\t// The setup part calls `leverageNative`, which, in turn, calls\n\t\t\t\t\t// `jQuery.event.add`, so event handle will already have been set\n\t\t\t\t\t// by this point.\n\t\t\t\t\thandle(event);\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\t// For non-IE browsers, attach a single capturing handler on the document\n\t\t\t\t// while someone wants focusin/focusout.\n\t\t\t\tjQuery.event.simulate(delegateType, nativeEvent.target,\n\t\t\t\t\tjQuery.event.fix(nativeEvent));\n\t\t\t}\n\t\t}\n\n\t\tjQuery.event.special[type] = {\n\n\t\t\t// Utilize native event if possible so blur/focus sequence is correct\n\t\t\tsetup: function () {\n\n\t\t\t\tvar attaches;\n\n\t\t\t\t// Claim the first handler\n\t\t\t\t// dataPriv.set( this, \"focus\", ... )\n\t\t\t\t// dataPriv.set( this, \"blur\", ... )\n\t\t\t\tleverageNative(this, type, true);\n\n\t\t\t\tif (document.documentMode) {\n\n\t\t\t\t\t// Support: IE 9 - 11+\n\t\t\t\t\t// We use the same native handler for focusin & focus (and focusout & blur)\n\t\t\t\t\t// so we need to coordinate setup & teardown parts between those events.\n\t\t\t\t\t// Use `delegateType` as the key as `type` is already used by `leverageNative`.\n\t\t\t\t\tattaches = dataPriv.get(this, delegateType);\n\t\t\t\t\tif (!attaches) {\n\t\t\t\t\t\tthis.addEventListener(delegateType, focusMappedHandler);\n\t\t\t\t\t}\n\t\t\t\t\tdataPriv.set(this, delegateType, (attaches || 0) + 1);\n\t\t\t\t} else {\n\n\t\t\t\t\t// Return false to allow normal processing in the caller\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\t\t\ttrigger: function () {\n\n\t\t\t\t// Force setup before trigger\n\t\t\t\tleverageNative(this, type);\n\n\t\t\t\t// Return non-false to allow normal event-path propagation\n\t\t\t\treturn true;\n\t\t\t},\n\n\t\t\tteardown: function () {\n\t\t\t\tvar attaches;\n\n\t\t\t\tif (document.documentMode) {\n\t\t\t\t\tattaches = dataPriv.get(this, delegateType) - 1;\n\t\t\t\t\tif (!attaches) {\n\t\t\t\t\t\tthis.removeEventListener(delegateType, focusMappedHandler);\n\t\t\t\t\t\tdataPriv.remove(this, delegateType);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdataPriv.set(this, delegateType, attaches);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\n\t\t\t\t\t// Return false to indicate standard teardown should be applied\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// Suppress native focus or blur if we're currently inside\n\t\t\t// a leveraged native-event stack\n\t\t\t_default: function (event) {\n\t\t\t\treturn dataPriv.get(event.target, type);\n\t\t\t},\n\n\t\t\tdelegateType: delegateType\n\t\t};\n\n\t\t// Support: Firefox <=44\n\t\t// Firefox doesn't have focus(in | out) events\n\t\t// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787\n\t\t//\n\t\t// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1\n\t\t// focus(in | out) events fire after focus & blur events,\n\t\t// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order\n\t\t// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857\n\t\t//\n\t\t// Support: IE 9 - 11+\n\t\t// To preserve relative focusin/focus & focusout/blur event order guaranteed on the 3.x branch,\n\t\t// attach a single handler for both events in IE.\n\t\tjQuery.event.special[delegateType] = {\n\t\t\tsetup: function () {\n\n\t\t\t\t// Handle: regular nodes (via `this.ownerDocument`), window\n\t\t\t\t// (via `this.document`) & document (via `this`).\n\t\t\t\tvar doc = this.ownerDocument || this.document || this,\n\t\t\t\t\tdataHolder = document.documentMode ? this : doc,\n\t\t\t\t\tattaches = dataPriv.get(dataHolder, delegateType);\n\n\t\t\t\t// Support: IE 9 - 11+\n\t\t\t\t// We use the same native handler for focusin & focus (and focusout & blur)\n\t\t\t\t// so we need to coordinate setup & teardown parts between those events.\n\t\t\t\t// Use `delegateType` as the key as `type` is already used by `leverageNative`.\n\t\t\t\tif (!attaches) {\n\t\t\t\t\tif (document.documentMode) {\n\t\t\t\t\t\tthis.addEventListener(delegateType, focusMappedHandler);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdoc.addEventListener(type, focusMappedHandler, true);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tdataPriv.set(dataHolder, delegateType, (attaches || 0) + 1);\n\t\t\t},\n\t\t\tteardown: function () {\n\t\t\t\tvar doc = this.ownerDocument || this.document || this,\n\t\t\t\t\tdataHolder = document.documentMode ? this : doc,\n\t\t\t\t\tattaches = dataPriv.get(dataHolder, delegateType) - 1;\n\n\t\t\t\tif (!attaches) {\n\t\t\t\t\tif (document.documentMode) {\n\t\t\t\t\t\tthis.removeEventListener(delegateType, focusMappedHandler);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdoc.removeEventListener(type, focusMappedHandler, true);\n\t\t\t\t\t}\n\t\t\t\t\tdataPriv.remove(dataHolder, delegateType);\n\t\t\t\t} else {\n\t\t\t\t\tdataPriv.set(dataHolder, delegateType, attaches);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t});\n\n\t// Create mouseenter/leave events using mouseover/out and event-time checks\n\t// so that event delegation works in jQuery.\n\t// Do the same for pointerenter/pointerleave and pointerover/pointerout\n\t//\n\t// Support: Safari 7 only\n\t// Safari sends mouseenter too often; see:\n\t// https://bugs.chromium.org/p/chromium/issues/detail?id=470258\n\t// for the description of the bug (it existed in older Chrome versions as well).\n\tjQuery.each({\n\t\tmouseenter: \"mouseover\",\n\t\tmouseleave: \"mouseout\",\n\t\tpointerenter: \"pointerover\",\n\t\tpointerleave: \"pointerout\"\n\t}, function (orig, fix) {\n\t\tjQuery.event.special[orig] = {\n\t\t\tdelegateType: fix,\n\t\t\tbindType: fix,\n\n\t\t\thandle: function (event) {\n\t\t\t\tvar ret,\n\t\t\t\t\ttarget = this,\n\t\t\t\t\trelated = event.relatedTarget,\n\t\t\t\t\thandleObj = event.handleObj;\n\n\t\t\t\t// For mouseenter/leave call the handler if related is outside the target.\n\t\t\t\t// NB: No relatedTarget if the mouse left/entered the browser window\n\t\t\t\tif (!related || (related !== target && !jQuery.contains(target, related))) {\n\t\t\t\t\tevent.type = handleObj.origType;\n\t\t\t\t\tret = handleObj.handler.apply(this, arguments);\n\t\t\t\t\tevent.type = fix;\n\t\t\t\t}\n\t\t\t\treturn ret;\n\t\t\t}\n\t\t};\n\t});\n\n\tjQuery.fn.extend({\n\n\t\ton: function (types, selector, data, fn) {\n\t\t\treturn on(this, types, selector, data, fn);\n\t\t},\n\t\tone: function (types, selector, data, fn) {\n\t\t\treturn on(this, types, selector, data, fn, 1);\n\t\t},\n\t\toff: function (types, selector, fn) {\n\t\t\tvar handleObj, type;\n\t\t\tif (types && types.preventDefault && types.handleObj) {\n\n\t\t\t\t// ( event )  dispatched jQuery.Event\n\t\t\t\thandleObj = types.handleObj;\n\t\t\t\tjQuery(types.delegateTarget).off(\n\t\t\t\t\thandleObj.namespace ?\n\t\t\t\t\t\thandleObj.origType + \".\" + handleObj.namespace :\n\t\t\t\t\t\thandleObj.origType,\n\t\t\t\t\thandleObj.selector,\n\t\t\t\t\thandleObj.handler\n\t\t\t\t);\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\tif (typeof types === \"object\") {\n\n\t\t\t\t// ( types-object [, selector] )\n\t\t\t\tfor (type in types) {\n\t\t\t\t\tthis.off(type, selector, types[type]);\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\tif (selector === false || typeof selector === \"function\") {\n\n\t\t\t\t// ( types [, fn] )\n\t\t\t\tfn = selector;\n\t\t\t\tselector = undefined;\n\t\t\t}\n\t\t\tif (fn === false) {\n\t\t\t\tfn = returnFalse;\n\t\t\t}\n\t\t\treturn this.each(function () {\n\t\t\t\tjQuery.event.remove(this, types, fn, selector);\n\t\t\t});\n\t\t}\n\t});\n\n\n\tvar\n\n\t\t// Support: IE <=10 - 11, Edge 12 - 13 only\n\t\t// In IE/Edge using regex groups here causes severe slowdowns.\n\t\t// See https://connect.microsoft.com/IE/feedback/details/1736512/\n\t\trnoInnerhtml = /<script|<style|<link/i,\n\n\t\t// checked=\"checked\" or checked\n\t\trchecked = /checked\\s*(?:[^=]|=\\s*.checked.)/i,\n\n\t\trcleanScript = /^\\s*<!\\[CDATA\\[|\\]\\]>\\s*$/g;\n\n\t// Prefer a tbody over its parent table for containing new rows\n\tfunction manipulationTarget(elem, content) {\n\t\tif (nodeName(elem, \"table\") &&\n\t\t\tnodeName(content.nodeType !== 11 ? content : content.firstChild, \"tr\")) {\n\n\t\t\treturn jQuery(elem).children(\"tbody\")[0] || elem;\n\t\t}\n\n\t\treturn elem;\n\t}\n\n\t// Replace/restore the type attribute of script elements for safe DOM manipulation\n\tfunction disableScript(elem) {\n\t\telem.type = (elem.getAttribute(\"type\") !== null) + \"/\" + elem.type;\n\t\treturn elem;\n\t}\n\tfunction restoreScript(elem) {\n\t\tif ((elem.type || \"\").slice(0, 5) === \"true/\") {\n\t\t\telem.type = elem.type.slice(5);\n\t\t} else {\n\t\t\telem.removeAttribute(\"type\");\n\t\t}\n\n\t\treturn elem;\n\t}\n\n\tfunction cloneCopyEvent(src, dest) {\n\t\tvar i, l, type, pdataOld, udataOld, udataCur, events;\n\n\t\tif (dest.nodeType !== 1) {\n\t\t\treturn;\n\t\t}\n\n\t\t// 1. Copy private data: events, handlers, etc.\n\t\tif (dataPriv.hasData(src)) {\n\t\t\tpdataOld = dataPriv.get(src);\n\t\t\tevents = pdataOld.events;\n\n\t\t\tif (events) {\n\t\t\t\tdataPriv.remove(dest, \"handle events\");\n\n\t\t\t\tfor (type in events) {\n\t\t\t\t\tfor (i = 0, l = events[type].length; i < l; i++) {\n\t\t\t\t\t\tjQuery.event.add(dest, type, events[type][i]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// 2. Copy user data\n\t\tif (dataUser.hasData(src)) {\n\t\t\tudataOld = dataUser.access(src);\n\t\t\tudataCur = jQuery.extend({}, udataOld);\n\n\t\t\tdataUser.set(dest, udataCur);\n\t\t}\n\t}\n\n\t// Fix IE bugs, see support tests\n\tfunction fixInput(src, dest) {\n\t\tvar nodeName = dest.nodeName.toLowerCase();\n\n\t\t// Fails to persist the checked state of a cloned checkbox or radio button.\n\t\tif (nodeName === \"input\" && rcheckableType.test(src.type)) {\n\t\t\tdest.checked = src.checked;\n\n\t\t\t// Fails to return the selected option to the default selected state when cloning options\n\t\t} else if (nodeName === \"input\" || nodeName === \"textarea\") {\n\t\t\tdest.defaultValue = src.defaultValue;\n\t\t}\n\t}\n\n\tfunction domManip(collection, args, callback, ignored) {\n\n\t\t// Flatten any nested arrays\n\t\targs = flat(args);\n\n\t\tvar fragment, first, scripts, hasScripts, node, doc,\n\t\t\ti = 0,\n\t\t\tl = collection.length,\n\t\t\tiNoClone = l - 1,\n\t\t\tvalue = args[0],\n\t\t\tvalueIsFunction = isFunction(value);\n\n\t\t// We can't cloneNode fragments that contain checked, in WebKit\n\t\tif (valueIsFunction ||\n\t\t\t(l > 1 && typeof value === \"string\" &&\n\t\t\t\t!support.checkClone && rchecked.test(value))) {\n\t\t\treturn collection.each(function (index) {\n\t\t\t\tvar self = collection.eq(index);\n\t\t\t\tif (valueIsFunction) {\n\t\t\t\t\targs[0] = value.call(this, index, self.html());\n\t\t\t\t}\n\t\t\t\tdomManip(self, args, callback, ignored);\n\t\t\t});\n\t\t}\n\n\t\tif (l) {\n\t\t\tfragment = buildFragment(args, collection[0].ownerDocument, false, collection, ignored);\n\t\t\tfirst = fragment.firstChild;\n\n\t\t\tif (fragment.childNodes.length === 1) {\n\t\t\t\tfragment = first;\n\t\t\t}\n\n\t\t\t// Require either new content or an interest in ignored elements to invoke the callback\n\t\t\tif (first || ignored) {\n\t\t\t\tscripts = jQuery.map(getAll(fragment, \"script\"), disableScript);\n\t\t\t\thasScripts = scripts.length;\n\n\t\t\t\t// Use the original fragment for the last item\n\t\t\t\t// instead of the first because it can end up\n\t\t\t\t// being emptied incorrectly in certain situations (trac-8070).\n\t\t\t\tfor (; i < l; i++) {\n\t\t\t\t\tnode = fragment;\n\n\t\t\t\t\tif (i !== iNoClone) {\n\t\t\t\t\t\tnode = jQuery.clone(node, true, true);\n\n\t\t\t\t\t\t// Keep references to cloned scripts for later restoration\n\t\t\t\t\t\tif (hasScripts) {\n\n\t\t\t\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\t\t\t\tjQuery.merge(scripts, getAll(node, \"script\"));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tcallback.call(collection[i], node, i);\n\t\t\t\t}\n\n\t\t\t\tif (hasScripts) {\n\t\t\t\t\tdoc = scripts[scripts.length - 1].ownerDocument;\n\n\t\t\t\t\t// Reenable scripts\n\t\t\t\t\tjQuery.map(scripts, restoreScript);\n\n\t\t\t\t\t// Evaluate executable scripts on first document insertion\n\t\t\t\t\tfor (i = 0; i < hasScripts; i++) {\n\t\t\t\t\t\tnode = scripts[i];\n\t\t\t\t\t\tif (rscriptType.test(node.type || \"\") &&\n\t\t\t\t\t\t\t!dataPriv.access(node, \"globalEval\") &&\n\t\t\t\t\t\t\tjQuery.contains(doc, node)) {\n\n\t\t\t\t\t\t\tif (node.src && (node.type || \"\").toLowerCase() !== \"module\") {\n\n\t\t\t\t\t\t\t\t// Optional AJAX dependency, but won't run scripts if not present\n\t\t\t\t\t\t\t\tif (jQuery._evalUrl && !node.noModule) {\n\t\t\t\t\t\t\t\t\tjQuery._evalUrl(node.src, {\n\t\t\t\t\t\t\t\t\t\tnonce: node.nonce || node.getAttribute(\"nonce\")\n\t\t\t\t\t\t\t\t\t}, doc);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t// Unwrap a CDATA section containing script contents. This shouldn't be\n\t\t\t\t\t\t\t\t// needed as in XML documents they're already not visible when\n\t\t\t\t\t\t\t\t// inspecting element contents and in HTML documents they have no\n\t\t\t\t\t\t\t\t// meaning but we're preserving that logic for backwards compatibility.\n\t\t\t\t\t\t\t\t// This will be removed completely in 4.0. See gh-4904.\n\t\t\t\t\t\t\t\tDOMEval(node.textContent.replace(rcleanScript, \"\"), node, doc);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn collection;\n\t}\n\n\tfunction remove(elem, selector, keepData) {\n\t\tvar node,\n\t\t\tnodes = selector ? jQuery.filter(selector, elem) : elem,\n\t\t\ti = 0;\n\n\t\tfor (; (node = nodes[i]) != null; i++) {\n\t\t\tif (!keepData && node.nodeType === 1) {\n\t\t\t\tjQuery.cleanData(getAll(node));\n\t\t\t}\n\n\t\t\tif (node.parentNode) {\n\t\t\t\tif (keepData && isAttached(node)) {\n\t\t\t\t\tsetGlobalEval(getAll(node, \"script\"));\n\t\t\t\t}\n\t\t\t\tnode.parentNode.removeChild(node);\n\t\t\t}\n\t\t}\n\n\t\treturn elem;\n\t}\n\n\tjQuery.extend({\n\t\thtmlPrefilter: function (html) {\n\t\t\treturn html;\n\t\t},\n\n\t\tclone: function (elem, dataAndEvents, deepDataAndEvents) {\n\t\t\tvar i, l, srcElements, destElements,\n\t\t\t\tclone = elem.cloneNode(true),\n\t\t\t\tinPage = isAttached(elem);\n\n\t\t\t// Fix IE cloning issues\n\t\t\tif (!support.noCloneChecked && (elem.nodeType === 1 || elem.nodeType === 11) &&\n\t\t\t\t!jQuery.isXMLDoc(elem)) {\n\n\t\t\t\t// We eschew jQuery#find here for performance reasons:\n\t\t\t\t// https://jsperf.com/getall-vs-sizzle/2\n\t\t\t\tdestElements = getAll(clone);\n\t\t\t\tsrcElements = getAll(elem);\n\n\t\t\t\tfor (i = 0, l = srcElements.length; i < l; i++) {\n\t\t\t\t\tfixInput(srcElements[i], destElements[i]);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Copy the events from the original to the clone\n\t\t\tif (dataAndEvents) {\n\t\t\t\tif (deepDataAndEvents) {\n\t\t\t\t\tsrcElements = srcElements || getAll(elem);\n\t\t\t\t\tdestElements = destElements || getAll(clone);\n\n\t\t\t\t\tfor (i = 0, l = srcElements.length; i < l; i++) {\n\t\t\t\t\t\tcloneCopyEvent(srcElements[i], destElements[i]);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tcloneCopyEvent(elem, clone);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Preserve script evaluation history\n\t\t\tdestElements = getAll(clone, \"script\");\n\t\t\tif (destElements.length > 0) {\n\t\t\t\tsetGlobalEval(destElements, !inPage && getAll(elem, \"script\"));\n\t\t\t}\n\n\t\t\t// Return the cloned set\n\t\t\treturn clone;\n\t\t},\n\n\t\tcleanData: function (elems) {\n\t\t\tvar data, elem, type,\n\t\t\t\tspecial = jQuery.event.special,\n\t\t\t\ti = 0;\n\n\t\t\tfor (; (elem = elems[i]) !== undefined; i++) {\n\t\t\t\tif (acceptData(elem)) {\n\t\t\t\t\tif ((data = elem[dataPriv.expando])) {\n\t\t\t\t\t\tif (data.events) {\n\t\t\t\t\t\t\tfor (type in data.events) {\n\t\t\t\t\t\t\t\tif (special[type]) {\n\t\t\t\t\t\t\t\t\tjQuery.event.remove(elem, type);\n\n\t\t\t\t\t\t\t\t\t// This is a shortcut to avoid jQuery.event.remove's overhead\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tjQuery.removeEvent(elem, type, data.handle);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\t\telem[dataPriv.expando] = undefined;\n\t\t\t\t\t}\n\t\t\t\t\tif (elem[dataUser.expando]) {\n\n\t\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\t\telem[dataUser.expando] = undefined;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\n\tjQuery.fn.extend({\n\t\tdetach: function (selector) {\n\t\t\treturn remove(this, selector, true);\n\t\t},\n\n\t\tremove: function (selector) {\n\t\t\treturn remove(this, selector);\n\t\t},\n\n\t\ttext: function (value) {\n\t\t\treturn access(this, function (value) {\n\t\t\t\treturn value === undefined ?\n\t\t\t\t\tjQuery.text(this) :\n\t\t\t\t\tthis.empty().each(function () {\n\t\t\t\t\t\tif (this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9) {\n\t\t\t\t\t\t\tthis.textContent = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t}, null, value, arguments.length);\n\t\t},\n\n\t\tappend: function () {\n\t\t\treturn domManip(this, arguments, function (elem) {\n\t\t\t\tif (this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9) {\n\t\t\t\t\tvar target = manipulationTarget(this, elem);\n\t\t\t\t\ttarget.appendChild(elem);\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\tprepend: function () {\n\t\t\treturn domManip(this, arguments, function (elem) {\n\t\t\t\tif (this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9) {\n\t\t\t\t\tvar target = manipulationTarget(this, elem);\n\t\t\t\t\ttarget.insertBefore(elem, target.firstChild);\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\tbefore: function () {\n\t\t\treturn domManip(this, arguments, function (elem) {\n\t\t\t\tif (this.parentNode) {\n\t\t\t\t\tthis.parentNode.insertBefore(elem, this);\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\tafter: function () {\n\t\t\treturn domManip(this, arguments, function (elem) {\n\t\t\t\tif (this.parentNode) {\n\t\t\t\t\tthis.parentNode.insertBefore(elem, this.nextSibling);\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\tempty: function () {\n\t\t\tvar elem,\n\t\t\t\ti = 0;\n\n\t\t\tfor (; (elem = this[i]) != null; i++) {\n\t\t\t\tif (elem.nodeType === 1) {\n\n\t\t\t\t\t// Prevent memory leaks\n\t\t\t\t\tjQuery.cleanData(getAll(elem, false));\n\n\t\t\t\t\t// Remove any remaining nodes\n\t\t\t\t\telem.textContent = \"\";\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn this;\n\t\t},\n\n\t\tclone: function (dataAndEvents, deepDataAndEvents) {\n\t\t\tdataAndEvents = dataAndEvents == null ? false : dataAndEvents;\n\t\t\tdeepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;\n\n\t\t\treturn this.map(function () {\n\t\t\t\treturn jQuery.clone(this, dataAndEvents, deepDataAndEvents);\n\t\t\t});\n\t\t},\n\n\t\thtml: function (value) {\n\t\t\treturn access(this, function (value) {\n\t\t\t\tvar elem = this[0] || {},\n\t\t\t\t\ti = 0,\n\t\t\t\t\tl = this.length;\n\n\t\t\t\tif (value === undefined && elem.nodeType === 1) {\n\t\t\t\t\treturn elem.innerHTML;\n\t\t\t\t}\n\n\t\t\t\t// See if we can take a shortcut and just use innerHTML\n\t\t\t\tif (typeof value === \"string\" && !rnoInnerhtml.test(value) &&\n\t\t\t\t\t!wrapMap[(rtagName.exec(value) || [\"\", \"\"])[1].toLowerCase()]) {\n\n\t\t\t\t\tvalue = jQuery.htmlPrefilter(value);\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tfor (; i < l; i++) {\n\t\t\t\t\t\t\telem = this[i] || {};\n\n\t\t\t\t\t\t\t// Remove element nodes and prevent memory leaks\n\t\t\t\t\t\t\tif (elem.nodeType === 1) {\n\t\t\t\t\t\t\t\tjQuery.cleanData(getAll(elem, false));\n\t\t\t\t\t\t\t\telem.innerHTML = value;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\telem = 0;\n\n\t\t\t\t\t\t// If using innerHTML throws an exception, use the fallback method\n\t\t\t\t\t} catch (e) { }\n\t\t\t\t}\n\n\t\t\t\tif (elem) {\n\t\t\t\t\tthis.empty().append(value);\n\t\t\t\t}\n\t\t\t}, null, value, arguments.length);\n\t\t},\n\n\t\treplaceWith: function () {\n\t\t\tvar ignored = [];\n\n\t\t\t// Make the changes, replacing each non-ignored context element with the new content\n\t\t\treturn domManip(this, arguments, function (elem) {\n\t\t\t\tvar parent = this.parentNode;\n\n\t\t\t\tif (jQuery.inArray(this, ignored) < 0) {\n\t\t\t\t\tjQuery.cleanData(getAll(this));\n\t\t\t\t\tif (parent) {\n\t\t\t\t\t\tparent.replaceChild(elem, this);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Force callback invocation\n\t\t\t}, ignored);\n\t\t}\n\t});\n\n\tjQuery.each({\n\t\tappendTo: \"append\",\n\t\tprependTo: \"prepend\",\n\t\tinsertBefore: \"before\",\n\t\tinsertAfter: \"after\",\n\t\treplaceAll: \"replaceWith\"\n\t}, function (name, original) {\n\t\tjQuery.fn[name] = function (selector) {\n\t\t\tvar elems,\n\t\t\t\tret = [],\n\t\t\t\tinsert = jQuery(selector),\n\t\t\t\tlast = insert.length - 1,\n\t\t\t\ti = 0;\n\n\t\t\tfor (; i <= last; i++) {\n\t\t\t\telems = i === last ? this : this.clone(true);\n\t\t\t\tjQuery(insert[i])[original](elems);\n\n\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t// .get() because push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\tpush.apply(ret, elems.get());\n\t\t\t}\n\n\t\t\treturn this.pushStack(ret);\n\t\t};\n\t});\n\tvar rnumnonpx = new RegExp(\"^(\" + pnum + \")(?!px)[a-z%]+$\", \"i\");\n\n\tvar rcustomProp = /^--/;\n\n\n\tvar getStyles = function (elem) {\n\n\t\t// Support: IE <=11 only, Firefox <=30 (trac-15098, trac-14150)\n\t\t// IE throws on elements created in popups\n\t\t// FF meanwhile throws on frame elements through \"defaultView.getComputedStyle\"\n\t\tvar view = elem.ownerDocument.defaultView;\n\n\t\tif (!view || !view.opener) {\n\t\t\tview = window;\n\t\t}\n\n\t\treturn view.getComputedStyle(elem);\n\t};\n\n\tvar swap = function (elem, options, callback) {\n\t\tvar ret, name,\n\t\t\told = {};\n\n\t\t// Remember the old values, and insert the new ones\n\t\tfor (name in options) {\n\t\t\told[name] = elem.style[name];\n\t\t\telem.style[name] = options[name];\n\t\t}\n\n\t\tret = callback.call(elem);\n\n\t\t// Revert the old values\n\t\tfor (name in options) {\n\t\t\telem.style[name] = old[name];\n\t\t}\n\n\t\treturn ret;\n\t};\n\n\n\tvar rboxStyle = new RegExp(cssExpand.join(\"|\"), \"i\");\n\n\n\n\t(function () {\n\n\t\t// Executing both pixelPosition & boxSizingReliable tests require only one layout\n\t\t// so they're executed at the same time to save the second computation.\n\t\tfunction computeStyleTests() {\n\n\t\t\t// This is a singleton, we need to execute it only once\n\t\t\tif (!div) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tcontainer.style.cssText = \"position:absolute;left:-11111px;width:60px;\" +\n\t\t\t\t\"margin-top:1px;padding:0;border:0\";\n\t\t\tdiv.style.cssText =\n\t\t\t\t\"position:relative;display:block;box-sizing:border-box;overflow:scroll;\" +\n\t\t\t\t\"margin:auto;border:1px;padding:1px;\" +\n\t\t\t\t\"width:60%;top:1%\";\n\t\t\tdocumentElement.appendChild(container).appendChild(div);\n\n\t\t\tvar divStyle = window.getComputedStyle(div);\n\t\t\tpixelPositionVal = divStyle.top !== \"1%\";\n\n\t\t\t// Support: Android 4.0 - 4.3 only, Firefox <=3 - 44\n\t\t\treliableMarginLeftVal = roundPixelMeasures(divStyle.marginLeft) === 12;\n\n\t\t\t// Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3\n\t\t\t// Some styles come back with percentage values, even though they shouldn't\n\t\t\tdiv.style.right = \"60%\";\n\t\t\tpixelBoxStylesVal = roundPixelMeasures(divStyle.right) === 36;\n\n\t\t\t// Support: IE 9 - 11 only\n\t\t\t// Detect misreporting of content dimensions for box-sizing:border-box elements\n\t\t\tboxSizingReliableVal = roundPixelMeasures(divStyle.width) === 36;\n\n\t\t\t// Support: IE 9 only\n\t\t\t// Detect overflow:scroll screwiness (gh-3699)\n\t\t\t// Support: Chrome <=64\n\t\t\t// Don't get tricked when zoom affects offsetWidth (gh-4029)\n\t\t\tdiv.style.position = \"absolute\";\n\t\t\tscrollboxSizeVal = roundPixelMeasures(div.offsetWidth / 3) === 12;\n\n\t\t\tdocumentElement.removeChild(container);\n\n\t\t\t// Nullify the div so it wouldn't be stored in the memory and\n\t\t\t// it will also be a sign that checks already performed\n\t\t\tdiv = null;\n\t\t}\n\n\t\tfunction roundPixelMeasures(measure) {\n\t\t\treturn Math.round(parseFloat(measure));\n\t\t}\n\n\t\tvar pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal,\n\t\t\treliableTrDimensionsVal, reliableMarginLeftVal,\n\t\t\tcontainer = document.createElement(\"div\"),\n\t\t\tdiv = document.createElement(\"div\");\n\n\t\t// Finish early in limited (non-browser) environments\n\t\tif (!div.style) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Support: IE <=9 - 11 only\n\t\t// Style of cloned element affects source element cloned (trac-8908)\n\t\tdiv.style.backgroundClip = \"content-box\";\n\t\tdiv.cloneNode(true).style.backgroundClip = \"\";\n\t\tsupport.clearCloneStyle = div.style.backgroundClip === \"content-box\";\n\n\t\tjQuery.extend(support, {\n\t\t\tboxSizingReliable: function () {\n\t\t\t\tcomputeStyleTests();\n\t\t\t\treturn boxSizingReliableVal;\n\t\t\t},\n\t\t\tpixelBoxStyles: function () {\n\t\t\t\tcomputeStyleTests();\n\t\t\t\treturn pixelBoxStylesVal;\n\t\t\t},\n\t\t\tpixelPosition: function () {\n\t\t\t\tcomputeStyleTests();\n\t\t\t\treturn pixelPositionVal;\n\t\t\t},\n\t\t\treliableMarginLeft: function () {\n\t\t\t\tcomputeStyleTests();\n\t\t\t\treturn reliableMarginLeftVal;\n\t\t\t},\n\t\t\tscrollboxSize: function () {\n\t\t\t\tcomputeStyleTests();\n\t\t\t\treturn scrollboxSizeVal;\n\t\t\t},\n\n\t\t\t// Support: IE 9 - 11+, Edge 15 - 18+\n\t\t\t// IE/Edge misreport `getComputedStyle` of table rows with width/height\n\t\t\t// set in CSS while `offset*` properties report correct values.\n\t\t\t// Behavior in IE 9 is more subtle than in newer versions & it passes\n\t\t\t// some versions of this test; make sure not to make it pass there!\n\t\t\t//\n\t\t\t// Support: Firefox 70+\n\t\t\t// Only Firefox includes border widths\n\t\t\t// in computed dimensions. (gh-4529)\n\t\t\treliableTrDimensions: function () {\n\t\t\t\tvar table, tr, trChild, trStyle;\n\t\t\t\tif (reliableTrDimensionsVal == null) {\n\t\t\t\t\ttable = document.createElement(\"table\");\n\t\t\t\t\ttr = document.createElement(\"tr\");\n\t\t\t\t\ttrChild = document.createElement(\"div\");\n\n\t\t\t\t\ttable.style.cssText = \"position:absolute;left:-11111px;border-collapse:separate\";\n\t\t\t\t\ttr.style.cssText = \"border:1px solid\";\n\n\t\t\t\t\t// Support: Chrome 86+\n\t\t\t\t\t// Height set through cssText does not get applied.\n\t\t\t\t\t// Computed height then comes back as 0.\n\t\t\t\t\ttr.style.height = \"1px\";\n\t\t\t\t\ttrChild.style.height = \"9px\";\n\n\t\t\t\t\t// Support: Android 8 Chrome 86+\n\t\t\t\t\t// In our bodyBackground.html iframe,\n\t\t\t\t\t// display for all div elements is set to \"inline\",\n\t\t\t\t\t// which causes a problem only in Android 8 Chrome 86.\n\t\t\t\t\t// Ensuring the div is display: block\n\t\t\t\t\t// gets around this issue.\n\t\t\t\t\ttrChild.style.display = \"block\";\n\n\t\t\t\t\tdocumentElement\n\t\t\t\t\t\t.appendChild(table)\n\t\t\t\t\t\t.appendChild(tr)\n\t\t\t\t\t\t.appendChild(trChild);\n\n\t\t\t\t\ttrStyle = window.getComputedStyle(tr);\n\t\t\t\t\treliableTrDimensionsVal = (parseInt(trStyle.height, 10) +\n\t\t\t\t\t\tparseInt(trStyle.borderTopWidth, 10) +\n\t\t\t\t\t\tparseInt(trStyle.borderBottomWidth, 10)) === tr.offsetHeight;\n\n\t\t\t\t\tdocumentElement.removeChild(table);\n\t\t\t\t}\n\t\t\t\treturn reliableTrDimensionsVal;\n\t\t\t}\n\t\t});\n\t})();\n\n\n\tfunction curCSS(elem, name, computed) {\n\t\tvar width, minWidth, maxWidth, ret,\n\t\t\tisCustomProp = rcustomProp.test(name),\n\n\t\t\t// Support: Firefox 51+\n\t\t\t// Retrieving style before computed somehow\n\t\t\t// fixes an issue with getting wrong values\n\t\t\t// on detached elements\n\t\t\tstyle = elem.style;\n\n\t\tcomputed = computed || getStyles(elem);\n\n\t\t// getPropertyValue is needed for:\n\t\t//   .css('filter') (IE 9 only, trac-12537)\n\t\t//   .css('--customProperty) (gh-3144)\n\t\tif (computed) {\n\n\t\t\t// Support: IE <=9 - 11+\n\t\t\t// IE only supports `\"float\"` in `getPropertyValue`; in computed styles\n\t\t\t// it's only available as `\"cssFloat\"`. We no longer modify properties\n\t\t\t// sent to `.css()` apart from camelCasing, so we need to check both.\n\t\t\t// Normally, this would create difference in behavior: if\n\t\t\t// `getPropertyValue` returns an empty string, the value returned\n\t\t\t// by `.css()` would be `undefined`. This is usually the case for\n\t\t\t// disconnected elements. However, in IE even disconnected elements\n\t\t\t// with no styles return `\"none\"` for `getPropertyValue( \"float\" )`\n\t\t\tret = computed.getPropertyValue(name) || computed[name];\n\n\t\t\tif (isCustomProp && ret) {\n\n\t\t\t\t// Support: Firefox 105+, Chrome <=105+\n\t\t\t\t// Spec requires trimming whitespace for custom properties (gh-4926).\n\t\t\t\t// Firefox only trims leading whitespace. Chrome just collapses\n\t\t\t\t// both leading & trailing whitespace to a single space.\n\t\t\t\t//\n\t\t\t\t// Fall back to `undefined` if empty string returned.\n\t\t\t\t// This collapses a missing definition with property defined\n\t\t\t\t// and set to an empty string but there's no standard API\n\t\t\t\t// allowing us to differentiate them without a performance penalty\n\t\t\t\t// and returning `undefined` aligns with older jQuery.\n\t\t\t\t//\n\t\t\t\t// rtrimCSS treats U+000D CARRIAGE RETURN and U+000C FORM FEED\n\t\t\t\t// as whitespace while CSS does not, but this is not a problem\n\t\t\t\t// because CSS preprocessing replaces them with U+000A LINE FEED\n\t\t\t\t// (which *is* CSS whitespace)\n\t\t\t\t// https://www.w3.org/TR/css-syntax-3/#input-preprocessing\n\t\t\t\tret = ret.replace(rtrimCSS, \"$1\") || undefined;\n\t\t\t}\n\n\t\t\tif (ret === \"\" && !isAttached(elem)) {\n\t\t\t\tret = jQuery.style(elem, name);\n\t\t\t}\n\n\t\t\t// A tribute to the \"awesome hack by Dean Edwards\"\n\t\t\t// Android Browser returns percentage for some values,\n\t\t\t// but width seems to be reliably pixels.\n\t\t\t// This is against the CSSOM draft spec:\n\t\t\t// https://drafts.csswg.org/cssom/#resolved-values\n\t\t\tif (!support.pixelBoxStyles() && rnumnonpx.test(ret) && rboxStyle.test(name)) {\n\n\t\t\t\t// Remember the original values\n\t\t\t\twidth = style.width;\n\t\t\t\tminWidth = style.minWidth;\n\t\t\t\tmaxWidth = style.maxWidth;\n\n\t\t\t\t// Put in the new values to get a computed value out\n\t\t\t\tstyle.minWidth = style.maxWidth = style.width = ret;\n\t\t\t\tret = computed.width;\n\n\t\t\t\t// Revert the changed values\n\t\t\t\tstyle.width = width;\n\t\t\t\tstyle.minWidth = minWidth;\n\t\t\t\tstyle.maxWidth = maxWidth;\n\t\t\t}\n\t\t}\n\n\t\treturn ret !== undefined ?\n\n\t\t\t// Support: IE <=9 - 11 only\n\t\t\t// IE returns zIndex value as an integer.\n\t\t\tret + \"\" :\n\t\t\tret;\n\t}\n\n\n\tfunction addGetHookIf(conditionFn, hookFn) {\n\n\t\t// Define the hook, we'll check on the first run if it's really needed.\n\t\treturn {\n\t\t\tget: function () {\n\t\t\t\tif (conditionFn()) {\n\n\t\t\t\t\t// Hook not needed (or it's not possible to use it due\n\t\t\t\t\t// to missing dependency), remove it.\n\t\t\t\t\tdelete this.get;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Hook needed; redefine it so that the support test is not executed again.\n\t\t\t\treturn (this.get = hookFn).apply(this, arguments);\n\t\t\t}\n\t\t};\n\t}\n\n\n\tvar cssPrefixes = [\"Webkit\", \"Moz\", \"ms\"],\n\t\temptyStyle = document.createElement(\"div\").style,\n\t\tvendorProps = {};\n\n\t// Return a vendor-prefixed property or undefined\n\tfunction vendorPropName(name) {\n\n\t\t// Check for vendor prefixed names\n\t\tvar capName = name[0].toUpperCase() + name.slice(1),\n\t\t\ti = cssPrefixes.length;\n\n\t\twhile (i--) {\n\t\t\tname = cssPrefixes[i] + capName;\n\t\t\tif (name in emptyStyle) {\n\t\t\t\treturn name;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return a potentially-mapped jQuery.cssProps or vendor prefixed property\n\tfunction finalPropName(name) {\n\t\tvar final = jQuery.cssProps[name] || vendorProps[name];\n\n\t\tif (final) {\n\t\t\treturn final;\n\t\t}\n\t\tif (name in emptyStyle) {\n\t\t\treturn name;\n\t\t}\n\t\treturn vendorProps[name] = vendorPropName(name) || name;\n\t}\n\n\n\tvar\n\n\t\t// Swappable if display is none or starts with table\n\t\t// except \"table\", \"table-cell\", or \"table-caption\"\n\t\t// See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display\n\t\trdisplayswap = /^(none|table(?!-c[ea]).+)/,\n\t\tcssShow = { position: \"absolute\", visibility: \"hidden\", display: \"block\" },\n\t\tcssNormalTransform = {\n\t\t\tletterSpacing: \"0\",\n\t\t\tfontWeight: \"400\"\n\t\t};\n\n\tfunction setPositiveNumber(_elem, value, subtract) {\n\n\t\t// Any relative (+/-) values have already been\n\t\t// normalized at this point\n\t\tvar matches = rcssNum.exec(value);\n\t\treturn matches ?\n\n\t\t\t// Guard against undefined \"subtract\", e.g., when used as in cssHooks\n\t\t\tMath.max(0, matches[2] - (subtract || 0)) + (matches[3] || \"px\") :\n\t\t\tvalue;\n\t}\n\n\tfunction boxModelAdjustment(elem, dimension, box, isBorderBox, styles, computedVal) {\n\t\tvar i = dimension === \"width\" ? 1 : 0,\n\t\t\textra = 0,\n\t\t\tdelta = 0,\n\t\t\tmarginDelta = 0;\n\n\t\t// Adjustment may not be necessary\n\t\tif (box === (isBorderBox ? \"border\" : \"content\")) {\n\t\t\treturn 0;\n\t\t}\n\n\t\tfor (; i < 4; i += 2) {\n\n\t\t\t// Both box models exclude margin\n\t\t\t// Count margin delta separately to only add it after scroll gutter adjustment.\n\t\t\t// This is needed to make negative margins work with `outerHeight( true )` (gh-3982).\n\t\t\tif (box === \"margin\") {\n\t\t\t\tmarginDelta += jQuery.css(elem, box + cssExpand[i], true, styles);\n\t\t\t}\n\n\t\t\t// If we get here with a content-box, we're seeking \"padding\" or \"border\" or \"margin\"\n\t\t\tif (!isBorderBox) {\n\n\t\t\t\t// Add padding\n\t\t\t\tdelta += jQuery.css(elem, \"padding\" + cssExpand[i], true, styles);\n\n\t\t\t\t// For \"border\" or \"margin\", add border\n\t\t\t\tif (box !== \"padding\") {\n\t\t\t\t\tdelta += jQuery.css(elem, \"border\" + cssExpand[i] + \"Width\", true, styles);\n\n\t\t\t\t\t// But still keep track of it otherwise\n\t\t\t\t} else {\n\t\t\t\t\textra += jQuery.css(elem, \"border\" + cssExpand[i] + \"Width\", true, styles);\n\t\t\t\t}\n\n\t\t\t\t// If we get here with a border-box (content + padding + border), we're seeking \"content\" or\n\t\t\t\t// \"padding\" or \"margin\"\n\t\t\t} else {\n\n\t\t\t\t// For \"content\", subtract padding\n\t\t\t\tif (box === \"content\") {\n\t\t\t\t\tdelta -= jQuery.css(elem, \"padding\" + cssExpand[i], true, styles);\n\t\t\t\t}\n\n\t\t\t\t// For \"content\" or \"padding\", subtract border\n\t\t\t\tif (box !== \"margin\") {\n\t\t\t\t\tdelta -= jQuery.css(elem, \"border\" + cssExpand[i] + \"Width\", true, styles);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Account for positive content-box scroll gutter when requested by providing computedVal\n\t\tif (!isBorderBox && computedVal >= 0) {\n\n\t\t\t// offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border\n\t\t\t// Assuming integer scroll gutter, subtract the rest and round down\n\t\t\tdelta += Math.max(0, Math.ceil(\n\t\t\t\telem[\"offset\" + dimension[0].toUpperCase() + dimension.slice(1)] -\n\t\t\t\tcomputedVal -\n\t\t\t\tdelta -\n\t\t\t\textra -\n\t\t\t\t0.5\n\n\t\t\t\t// If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter\n\t\t\t\t// Use an explicit zero to avoid NaN (gh-3964)\n\t\t\t)) || 0;\n\t\t}\n\n\t\treturn delta + marginDelta;\n\t}\n\n\tfunction getWidthOrHeight(elem, dimension, extra) {\n\n\t\t// Start with computed style\n\t\tvar styles = getStyles(elem),\n\n\t\t\t// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322).\n\t\t\t// Fake content-box until we know it's needed to know the true value.\n\t\t\tboxSizingNeeded = !support.boxSizingReliable() || extra,\n\t\t\tisBorderBox = boxSizingNeeded &&\n\t\t\t\tjQuery.css(elem, \"boxSizing\", false, styles) === \"border-box\",\n\t\t\tvalueIsBorderBox = isBorderBox,\n\n\t\t\tval = curCSS(elem, dimension, styles),\n\t\t\toffsetProp = \"offset\" + dimension[0].toUpperCase() + dimension.slice(1);\n\n\t\t// Support: Firefox <=54\n\t\t// Return a confounding non-pixel value or feign ignorance, as appropriate.\n\t\tif (rnumnonpx.test(val)) {\n\t\t\tif (!extra) {\n\t\t\t\treturn val;\n\t\t\t}\n\t\t\tval = \"auto\";\n\t\t}\n\n\n\t\t// Support: IE 9 - 11 only\n\t\t// Use offsetWidth/offsetHeight for when box sizing is unreliable.\n\t\t// In those cases, the computed value can be trusted to be border-box.\n\t\tif ((!support.boxSizingReliable() && isBorderBox ||\n\n\t\t\t// Support: IE 10 - 11+, Edge 15 - 18+\n\t\t\t// IE/Edge misreport `getComputedStyle` of table rows with width/height\n\t\t\t// set in CSS while `offset*` properties report correct values.\n\t\t\t// Interestingly, in some cases IE 9 doesn't suffer from this issue.\n\t\t\t!support.reliableTrDimensions() && nodeName(elem, \"tr\") ||\n\n\t\t\t// Fall back to offsetWidth/offsetHeight when value is \"auto\"\n\t\t\t// This happens for inline elements with no explicit setting (gh-3571)\n\t\t\tval === \"auto\" ||\n\n\t\t\t// Support: Android <=4.1 - 4.3 only\n\t\t\t// Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602)\n\t\t\t!parseFloat(val) && jQuery.css(elem, \"display\", false, styles) === \"inline\") &&\n\n\t\t\t// Make sure the element is visible & connected\n\t\t\telem.getClientRects().length) {\n\n\t\t\tisBorderBox = jQuery.css(elem, \"boxSizing\", false, styles) === \"border-box\";\n\n\t\t\t// Where available, offsetWidth/offsetHeight approximate border box dimensions.\n\t\t\t// Where not available (e.g., SVG), assume unreliable box-sizing and interpret the\n\t\t\t// retrieved value as a content box dimension.\n\t\t\tvalueIsBorderBox = offsetProp in elem;\n\t\t\tif (valueIsBorderBox) {\n\t\t\t\tval = elem[offsetProp];\n\t\t\t}\n\t\t}\n\n\t\t// Normalize \"\" and auto\n\t\tval = parseFloat(val) || 0;\n\n\t\t// Adjust for the element's box model\n\t\treturn (val +\n\t\t\tboxModelAdjustment(\n\t\t\t\telem,\n\t\t\t\tdimension,\n\t\t\t\textra || (isBorderBox ? \"border\" : \"content\"),\n\t\t\t\tvalueIsBorderBox,\n\t\t\t\tstyles,\n\n\t\t\t\t// Provide the current computed size to request scroll gutter calculation (gh-3589)\n\t\t\t\tval\n\t\t\t)\n\t\t) + \"px\";\n\t}\n\n\tjQuery.extend({\n\n\t\t// Add in style property hooks for overriding the default\n\t\t// behavior of getting and setting a style property\n\t\tcssHooks: {\n\t\t\topacity: {\n\t\t\t\tget: function (elem, computed) {\n\t\t\t\t\tif (computed) {\n\n\t\t\t\t\t\t// We should always get a number back from opacity\n\t\t\t\t\t\tvar ret = curCSS(elem, \"opacity\");\n\t\t\t\t\t\treturn ret === \"\" ? \"1\" : ret;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t// Don't automatically add \"px\" to these possibly-unitless properties\n\t\tcssNumber: {\n\t\t\tanimationIterationCount: true,\n\t\t\taspectRatio: true,\n\t\t\tborderImageSlice: true,\n\t\t\tcolumnCount: true,\n\t\t\tflexGrow: true,\n\t\t\tflexShrink: true,\n\t\t\tfontWeight: true,\n\t\t\tgridArea: true,\n\t\t\tgridColumn: true,\n\t\t\tgridColumnEnd: true,\n\t\t\tgridColumnStart: true,\n\t\t\tgridRow: true,\n\t\t\tgridRowEnd: true,\n\t\t\tgridRowStart: true,\n\t\t\tlineHeight: true,\n\t\t\topacity: true,\n\t\t\torder: true,\n\t\t\torphans: true,\n\t\t\tscale: true,\n\t\t\twidows: true,\n\t\t\tzIndex: true,\n\t\t\tzoom: true,\n\n\t\t\t// SVG-related\n\t\t\tfillOpacity: true,\n\t\t\tfloodOpacity: true,\n\t\t\tstopOpacity: true,\n\t\t\tstrokeMiterlimit: true,\n\t\t\tstrokeOpacity: true\n\t\t},\n\n\t\t// Add in properties whose names you wish to fix before\n\t\t// setting or getting the value\n\t\tcssProps: {},\n\n\t\t// Get and set the style property on a DOM Node\n\t\tstyle: function (elem, name, value, extra) {\n\n\t\t\t// Don't set styles on text and comment nodes\n\t\t\tif (!elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Make sure that we're working with the right name\n\t\t\tvar ret, type, hooks,\n\t\t\t\torigName = camelCase(name),\n\t\t\t\tisCustomProp = rcustomProp.test(name),\n\t\t\t\tstyle = elem.style;\n\n\t\t\t// Make sure that we're working with the right name. We don't\n\t\t\t// want to query the value if it is a CSS custom property\n\t\t\t// since they are user-defined.\n\t\t\tif (!isCustomProp) {\n\t\t\t\tname = finalPropName(origName);\n\t\t\t}\n\n\t\t\t// Gets hook for the prefixed version, then unprefixed version\n\t\t\thooks = jQuery.cssHooks[name] || jQuery.cssHooks[origName];\n\n\t\t\t// Check if we're setting a value\n\t\t\tif (value !== undefined) {\n\t\t\t\ttype = typeof value;\n\n\t\t\t\t// Convert \"+=\" or \"-=\" to relative numbers (trac-7345)\n\t\t\t\tif (type === \"string\" && (ret = rcssNum.exec(value)) && ret[1]) {\n\t\t\t\t\tvalue = adjustCSS(elem, name, ret);\n\n\t\t\t\t\t// Fixes bug trac-9237\n\t\t\t\t\ttype = \"number\";\n\t\t\t\t}\n\n\t\t\t\t// Make sure that null and NaN values aren't set (trac-7116)\n\t\t\t\tif (value == null || value !== value) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// If a number was passed in, add the unit (except for certain CSS properties)\n\t\t\t\t// The isCustomProp check can be removed in jQuery 4.0 when we only auto-append\n\t\t\t\t// \"px\" to a few hardcoded values.\n\t\t\t\tif (type === \"number\" && !isCustomProp) {\n\t\t\t\t\tvalue += ret && ret[3] || (jQuery.cssNumber[origName] ? \"\" : \"px\");\n\t\t\t\t}\n\n\t\t\t\t// background-* props affect original clone's values\n\t\t\t\tif (!support.clearCloneStyle && value === \"\" && name.indexOf(\"background\") === 0) {\n\t\t\t\t\tstyle[name] = \"inherit\";\n\t\t\t\t}\n\n\t\t\t\t// If a hook was provided, use that value, otherwise just set the specified value\n\t\t\t\tif (!hooks || !(\"set\" in hooks) ||\n\t\t\t\t\t(value = hooks.set(elem, value, extra)) !== undefined) {\n\n\t\t\t\t\tif (isCustomProp) {\n\t\t\t\t\t\tstyle.setProperty(name, value);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tstyle[name] = value;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\t// If a hook was provided get the non-computed value from there\n\t\t\t\tif (hooks && \"get\" in hooks &&\n\t\t\t\t\t(ret = hooks.get(elem, false, extra)) !== undefined) {\n\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\n\t\t\t\t// Otherwise just get the value from the style object\n\t\t\t\treturn style[name];\n\t\t\t}\n\t\t},\n\n\t\tcss: function (elem, name, extra, styles) {\n\t\t\tvar val, num, hooks,\n\t\t\t\torigName = camelCase(name),\n\t\t\t\tisCustomProp = rcustomProp.test(name);\n\n\t\t\t// Make sure that we're working with the right name. We don't\n\t\t\t// want to modify the value if it is a CSS custom property\n\t\t\t// since they are user-defined.\n\t\t\tif (!isCustomProp) {\n\t\t\t\tname = finalPropName(origName);\n\t\t\t}\n\n\t\t\t// Try prefixed name followed by the unprefixed name\n\t\t\thooks = jQuery.cssHooks[name] || jQuery.cssHooks[origName];\n\n\t\t\t// If a hook was provided get the computed value from there\n\t\t\tif (hooks && \"get\" in hooks) {\n\t\t\t\tval = hooks.get(elem, true, extra);\n\t\t\t}\n\n\t\t\t// Otherwise, if a way to get the computed value exists, use that\n\t\t\tif (val === undefined) {\n\t\t\t\tval = curCSS(elem, name, styles);\n\t\t\t}\n\n\t\t\t// Convert \"normal\" to computed value\n\t\t\tif (val === \"normal\" && name in cssNormalTransform) {\n\t\t\t\tval = cssNormalTransform[name];\n\t\t\t}\n\n\t\t\t// Make numeric if forced or a qualifier was provided and val looks numeric\n\t\t\tif (extra === \"\" || extra) {\n\t\t\t\tnum = parseFloat(val);\n\t\t\t\treturn extra === true || isFinite(num) ? num || 0 : val;\n\t\t\t}\n\n\t\t\treturn val;\n\t\t}\n\t});\n\n\tjQuery.each([\"height\", \"width\"], function (_i, dimension) {\n\t\tjQuery.cssHooks[dimension] = {\n\t\t\tget: function (elem, computed, extra) {\n\t\t\t\tif (computed) {\n\n\t\t\t\t\t// Certain elements can have dimension info if we invisibly show them\n\t\t\t\t\t// but it must have a current display style that would benefit\n\t\t\t\t\treturn rdisplayswap.test(jQuery.css(elem, \"display\")) &&\n\n\t\t\t\t\t\t// Support: Safari 8+\n\t\t\t\t\t\t// Table columns in Safari have non-zero offsetWidth & zero\n\t\t\t\t\t\t// getBoundingClientRect().width unless display is changed.\n\t\t\t\t\t\t// Support: IE <=11 only\n\t\t\t\t\t\t// Running getBoundingClientRect on a disconnected node\n\t\t\t\t\t\t// in IE throws an error.\n\t\t\t\t\t\t(!elem.getClientRects().length || !elem.getBoundingClientRect().width) ?\n\t\t\t\t\t\tswap(elem, cssShow, function () {\n\t\t\t\t\t\t\treturn getWidthOrHeight(elem, dimension, extra);\n\t\t\t\t\t\t}) :\n\t\t\t\t\t\tgetWidthOrHeight(elem, dimension, extra);\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tset: function (elem, value, extra) {\n\t\t\t\tvar matches,\n\t\t\t\t\tstyles = getStyles(elem),\n\n\t\t\t\t\t// Only read styles.position if the test has a chance to fail\n\t\t\t\t\t// to avoid forcing a reflow.\n\t\t\t\t\tscrollboxSizeBuggy = !support.scrollboxSize() &&\n\t\t\t\t\t\tstyles.position === \"absolute\",\n\n\t\t\t\t\t// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991)\n\t\t\t\t\tboxSizingNeeded = scrollboxSizeBuggy || extra,\n\t\t\t\t\tisBorderBox = boxSizingNeeded &&\n\t\t\t\t\t\tjQuery.css(elem, \"boxSizing\", false, styles) === \"border-box\",\n\t\t\t\t\tsubtract = extra ?\n\t\t\t\t\t\tboxModelAdjustment(\n\t\t\t\t\t\t\telem,\n\t\t\t\t\t\t\tdimension,\n\t\t\t\t\t\t\textra,\n\t\t\t\t\t\t\tisBorderBox,\n\t\t\t\t\t\t\tstyles\n\t\t\t\t\t\t) :\n\t\t\t\t\t\t0;\n\n\t\t\t\t// Account for unreliable border-box dimensions by comparing offset* to computed and\n\t\t\t\t// faking a content-box to get border and padding (gh-3699)\n\t\t\t\tif (isBorderBox && scrollboxSizeBuggy) {\n\t\t\t\t\tsubtract -= Math.ceil(\n\t\t\t\t\t\telem[\"offset\" + dimension[0].toUpperCase() + dimension.slice(1)] -\n\t\t\t\t\t\tparseFloat(styles[dimension]) -\n\t\t\t\t\t\tboxModelAdjustment(elem, dimension, \"border\", false, styles) -\n\t\t\t\t\t\t0.5\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\t// Convert to pixels if value adjustment is needed\n\t\t\t\tif (subtract && (matches = rcssNum.exec(value)) &&\n\t\t\t\t\t(matches[3] || \"px\") !== \"px\") {\n\n\t\t\t\t\telem.style[dimension] = value;\n\t\t\t\t\tvalue = jQuery.css(elem, dimension);\n\t\t\t\t}\n\n\t\t\t\treturn setPositiveNumber(elem, value, subtract);\n\t\t\t}\n\t\t};\n\t});\n\n\tjQuery.cssHooks.marginLeft = addGetHookIf(support.reliableMarginLeft,\n\t\tfunction (elem, computed) {\n\t\t\tif (computed) {\n\t\t\t\treturn (parseFloat(curCSS(elem, \"marginLeft\")) ||\n\t\t\t\t\telem.getBoundingClientRect().left -\n\t\t\t\t\tswap(elem, { marginLeft: 0 }, function () {\n\t\t\t\t\t\treturn elem.getBoundingClientRect().left;\n\t\t\t\t\t})\n\t\t\t\t) + \"px\";\n\t\t\t}\n\t\t}\n\t);\n\n\t// These hooks are used by animate to expand properties\n\tjQuery.each({\n\t\tmargin: \"\",\n\t\tpadding: \"\",\n\t\tborder: \"Width\"\n\t}, function (prefix, suffix) {\n\t\tjQuery.cssHooks[prefix + suffix] = {\n\t\t\texpand: function (value) {\n\t\t\t\tvar i = 0,\n\t\t\t\t\texpanded = {},\n\n\t\t\t\t\t// Assumes a single number if not a string\n\t\t\t\t\tparts = typeof value === \"string\" ? value.split(\" \") : [value];\n\n\t\t\t\tfor (; i < 4; i++) {\n\t\t\t\t\texpanded[prefix + cssExpand[i] + suffix] =\n\t\t\t\t\t\tparts[i] || parts[i - 2] || parts[0];\n\t\t\t\t}\n\n\t\t\t\treturn expanded;\n\t\t\t}\n\t\t};\n\n\t\tif (prefix !== \"margin\") {\n\t\t\tjQuery.cssHooks[prefix + suffix].set = setPositiveNumber;\n\t\t}\n\t});\n\n\tjQuery.fn.extend({\n\t\tcss: function (name, value) {\n\t\t\treturn access(this, function (elem, name, value) {\n\t\t\t\tvar styles, len,\n\t\t\t\t\tmap = {},\n\t\t\t\t\ti = 0;\n\n\t\t\t\tif (Array.isArray(name)) {\n\t\t\t\t\tstyles = getStyles(elem);\n\t\t\t\t\tlen = name.length;\n\n\t\t\t\t\tfor (; i < len; i++) {\n\t\t\t\t\t\tmap[name[i]] = jQuery.css(elem, name[i], false, styles);\n\t\t\t\t\t}\n\n\t\t\t\t\treturn map;\n\t\t\t\t}\n\n\t\t\t\treturn value !== undefined ?\n\t\t\t\t\tjQuery.style(elem, name, value) :\n\t\t\t\t\tjQuery.css(elem, name);\n\t\t\t}, name, value, arguments.length > 1);\n\t\t}\n\t});\n\n\n\tfunction Tween(elem, options, prop, end, easing) {\n\t\treturn new Tween.prototype.init(elem, options, prop, end, easing);\n\t}\n\tjQuery.Tween = Tween;\n\n\tTween.prototype = {\n\t\tconstructor: Tween,\n\t\tinit: function (elem, options, prop, end, easing, unit) {\n\t\t\tthis.elem = elem;\n\t\t\tthis.prop = prop;\n\t\t\tthis.easing = easing || jQuery.easing._default;\n\t\t\tthis.options = options;\n\t\t\tthis.start = this.now = this.cur();\n\t\t\tthis.end = end;\n\t\t\tthis.unit = unit || (jQuery.cssNumber[prop] ? \"\" : \"px\");\n\t\t},\n\t\tcur: function () {\n\t\t\tvar hooks = Tween.propHooks[this.prop];\n\n\t\t\treturn hooks && hooks.get ?\n\t\t\t\thooks.get(this) :\n\t\t\t\tTween.propHooks._default.get(this);\n\t\t},\n\t\trun: function (percent) {\n\t\t\tvar eased,\n\t\t\t\thooks = Tween.propHooks[this.prop];\n\n\t\t\tif (this.options.duration) {\n\t\t\t\tthis.pos = eased = jQuery.easing[this.easing](\n\t\t\t\t\tpercent, this.options.duration * percent, 0, 1, this.options.duration\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tthis.pos = eased = percent;\n\t\t\t}\n\t\t\tthis.now = (this.end - this.start) * eased + this.start;\n\n\t\t\tif (this.options.step) {\n\t\t\t\tthis.options.step.call(this.elem, this.now, this);\n\t\t\t}\n\n\t\t\tif (hooks && hooks.set) {\n\t\t\t\thooks.set(this);\n\t\t\t} else {\n\t\t\t\tTween.propHooks._default.set(this);\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t};\n\n\tTween.prototype.init.prototype = Tween.prototype;\n\n\tTween.propHooks = {\n\t\t_default: {\n\t\t\tget: function (tween) {\n\t\t\t\tvar result;\n\n\t\t\t\t// Use a property on the element directly when it is not a DOM element,\n\t\t\t\t// or when there is no matching style property that exists.\n\t\t\t\tif (tween.elem.nodeType !== 1 ||\n\t\t\t\t\ttween.elem[tween.prop] != null && tween.elem.style[tween.prop] == null) {\n\t\t\t\t\treturn tween.elem[tween.prop];\n\t\t\t\t}\n\n\t\t\t\t// Passing an empty string as a 3rd parameter to .css will automatically\n\t\t\t\t// attempt a parseFloat and fallback to a string if the parse fails.\n\t\t\t\t// Simple values such as \"10px\" are parsed to Float;\n\t\t\t\t// complex values such as \"rotate(1rad)\" are returned as-is.\n\t\t\t\tresult = jQuery.css(tween.elem, tween.prop, \"\");\n\n\t\t\t\t// Empty strings, null, undefined and \"auto\" are converted to 0.\n\t\t\t\treturn !result || result === \"auto\" ? 0 : result;\n\t\t\t},\n\t\t\tset: function (tween) {\n\n\t\t\t\t// Use step hook for back compat.\n\t\t\t\t// Use cssHook if its there.\n\t\t\t\t// Use .style if available and use plain properties where available.\n\t\t\t\tif (jQuery.fx.step[tween.prop]) {\n\t\t\t\t\tjQuery.fx.step[tween.prop](tween);\n\t\t\t\t} else if (tween.elem.nodeType === 1 && (\n\t\t\t\t\tjQuery.cssHooks[tween.prop] ||\n\t\t\t\t\ttween.elem.style[finalPropName(tween.prop)] != null)) {\n\t\t\t\t\tjQuery.style(tween.elem, tween.prop, tween.now + tween.unit);\n\t\t\t\t} else {\n\t\t\t\t\ttween.elem[tween.prop] = tween.now;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t// Support: IE <=9 only\n\t// Panic based approach to setting things on disconnected nodes\n\tTween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {\n\t\tset: function (tween) {\n\t\t\tif (tween.elem.nodeType && tween.elem.parentNode) {\n\t\t\t\ttween.elem[tween.prop] = tween.now;\n\t\t\t}\n\t\t}\n\t};\n\n\tjQuery.easing = {\n\t\tlinear: function (p) {\n\t\t\treturn p;\n\t\t},\n\t\tswing: function (p) {\n\t\t\treturn 0.5 - Math.cos(p * Math.PI) / 2;\n\t\t},\n\t\t_default: \"swing\"\n\t};\n\n\tjQuery.fx = Tween.prototype.init;\n\n\t// Back compat <1.8 extension point\n\tjQuery.fx.step = {};\n\n\n\n\n\tvar\n\t\tfxNow, inProgress,\n\t\trfxtypes = /^(?:toggle|show|hide)$/,\n\t\trrun = /queueHooks$/;\n\n\tfunction schedule() {\n\t\tif (inProgress) {\n\t\t\tif (document.hidden === false && window.requestAnimationFrame) {\n\t\t\t\twindow.requestAnimationFrame(schedule);\n\t\t\t} else {\n\t\t\t\twindow.setTimeout(schedule, jQuery.fx.interval);\n\t\t\t}\n\n\t\t\tjQuery.fx.tick();\n\t\t}\n\t}\n\n\t// Animations created synchronously will run synchronously\n\tfunction createFxNow() {\n\t\twindow.setTimeout(function () {\n\t\t\tfxNow = undefined;\n\t\t});\n\t\treturn (fxNow = Date.now());\n\t}\n\n\t// Generate parameters to create a standard animation\n\tfunction genFx(type, includeWidth) {\n\t\tvar which,\n\t\t\ti = 0,\n\t\t\tattrs = { height: type };\n\n\t\t// If we include width, step value is 1 to do all cssExpand values,\n\t\t// otherwise step value is 2 to skip over Left and Right\n\t\tincludeWidth = includeWidth ? 1 : 0;\n\t\tfor (; i < 4; i += 2 - includeWidth) {\n\t\t\twhich = cssExpand[i];\n\t\t\tattrs[\"margin\" + which] = attrs[\"padding\" + which] = type;\n\t\t}\n\n\t\tif (includeWidth) {\n\t\t\tattrs.opacity = attrs.width = type;\n\t\t}\n\n\t\treturn attrs;\n\t}\n\n\tfunction createTween(value, prop, animation) {\n\t\tvar tween,\n\t\t\tcollection = (Animation.tweeners[prop] || []).concat(Animation.tweeners[\"*\"]),\n\t\t\tindex = 0,\n\t\t\tlength = collection.length;\n\t\tfor (; index < length; index++) {\n\t\t\tif ((tween = collection[index].call(animation, prop, value))) {\n\n\t\t\t\t// We're done with this property\n\t\t\t\treturn tween;\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction defaultPrefilter(elem, props, opts) {\n\t\tvar prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display,\n\t\t\tisBox = \"width\" in props || \"height\" in props,\n\t\t\tanim = this,\n\t\t\torig = {},\n\t\t\tstyle = elem.style,\n\t\t\thidden = elem.nodeType && isHiddenWithinTree(elem),\n\t\t\tdataShow = dataPriv.get(elem, \"fxshow\");\n\n\t\t// Queue-skipping animations hijack the fx hooks\n\t\tif (!opts.queue) {\n\t\t\thooks = jQuery._queueHooks(elem, \"fx\");\n\t\t\tif (hooks.unqueued == null) {\n\t\t\t\thooks.unqueued = 0;\n\t\t\t\toldfire = hooks.empty.fire;\n\t\t\t\thooks.empty.fire = function () {\n\t\t\t\t\tif (!hooks.unqueued) {\n\t\t\t\t\t\toldfire();\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t\thooks.unqueued++;\n\n\t\t\tanim.always(function () {\n\n\t\t\t\t// Ensure the complete handler is called before this completes\n\t\t\t\tanim.always(function () {\n\t\t\t\t\thooks.unqueued--;\n\t\t\t\t\tif (!jQuery.queue(elem, \"fx\").length) {\n\t\t\t\t\t\thooks.empty.fire();\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\n\t\t// Detect show/hide animations\n\t\tfor (prop in props) {\n\t\t\tvalue = props[prop];\n\t\t\tif (rfxtypes.test(value)) {\n\t\t\t\tdelete props[prop];\n\t\t\t\ttoggle = toggle || value === \"toggle\";\n\t\t\t\tif (value === (hidden ? \"hide\" : \"show\")) {\n\n\t\t\t\t\t// Pretend to be hidden if this is a \"show\" and\n\t\t\t\t\t// there is still data from a stopped show/hide\n\t\t\t\t\tif (value === \"show\" && dataShow && dataShow[prop] !== undefined) {\n\t\t\t\t\t\thidden = true;\n\n\t\t\t\t\t\t// Ignore all other no-op show/hide data\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\torig[prop] = dataShow && dataShow[prop] || jQuery.style(elem, prop);\n\t\t\t}\n\t\t}\n\n\t\t// Bail out if this is a no-op like .hide().hide()\n\t\tpropTween = !jQuery.isEmptyObject(props);\n\t\tif (!propTween && jQuery.isEmptyObject(orig)) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Restrict \"overflow\" and \"display\" styles during box animations\n\t\tif (isBox && elem.nodeType === 1) {\n\n\t\t\t// Support: IE <=9 - 11, Edge 12 - 15\n\t\t\t// Record all 3 overflow attributes because IE does not infer the shorthand\n\t\t\t// from identically-valued overflowX and overflowY and Edge just mirrors\n\t\t\t// the overflowX value there.\n\t\t\topts.overflow = [style.overflow, style.overflowX, style.overflowY];\n\n\t\t\t// Identify a display type, preferring old show/hide data over the CSS cascade\n\t\t\trestoreDisplay = dataShow && dataShow.display;\n\t\t\tif (restoreDisplay == null) {\n\t\t\t\trestoreDisplay = dataPriv.get(elem, \"display\");\n\t\t\t}\n\t\t\tdisplay = jQuery.css(elem, \"display\");\n\t\t\tif (display === \"none\") {\n\t\t\t\tif (restoreDisplay) {\n\t\t\t\t\tdisplay = restoreDisplay;\n\t\t\t\t} else {\n\n\t\t\t\t\t// Get nonempty value(s) by temporarily forcing visibility\n\t\t\t\t\tshowHide([elem], true);\n\t\t\t\t\trestoreDisplay = elem.style.display || restoreDisplay;\n\t\t\t\t\tdisplay = jQuery.css(elem, \"display\");\n\t\t\t\t\tshowHide([elem]);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Animate inline elements as inline-block\n\t\t\tif (display === \"inline\" || display === \"inline-block\" && restoreDisplay != null) {\n\t\t\t\tif (jQuery.css(elem, \"float\") === \"none\") {\n\n\t\t\t\t\t// Restore the original display value at the end of pure show/hide animations\n\t\t\t\t\tif (!propTween) {\n\t\t\t\t\t\tanim.done(function () {\n\t\t\t\t\t\t\tstyle.display = restoreDisplay;\n\t\t\t\t\t\t});\n\t\t\t\t\t\tif (restoreDisplay == null) {\n\t\t\t\t\t\t\tdisplay = style.display;\n\t\t\t\t\t\t\trestoreDisplay = display === \"none\" ? \"\" : display;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tstyle.display = \"inline-block\";\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (opts.overflow) {\n\t\t\tstyle.overflow = \"hidden\";\n\t\t\tanim.always(function () {\n\t\t\t\tstyle.overflow = opts.overflow[0];\n\t\t\t\tstyle.overflowX = opts.overflow[1];\n\t\t\t\tstyle.overflowY = opts.overflow[2];\n\t\t\t});\n\t\t}\n\n\t\t// Implement show/hide animations\n\t\tpropTween = false;\n\t\tfor (prop in orig) {\n\n\t\t\t// General show/hide setup for this element animation\n\t\t\tif (!propTween) {\n\t\t\t\tif (dataShow) {\n\t\t\t\t\tif (\"hidden\" in dataShow) {\n\t\t\t\t\t\thidden = dataShow.hidden;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tdataShow = dataPriv.access(elem, \"fxshow\", { display: restoreDisplay });\n\t\t\t\t}\n\n\t\t\t\t// Store hidden/visible for toggle so `.stop().toggle()` \"reverses\"\n\t\t\t\tif (toggle) {\n\t\t\t\t\tdataShow.hidden = !hidden;\n\t\t\t\t}\n\n\t\t\t\t// Show elements before animating them\n\t\t\t\tif (hidden) {\n\t\t\t\t\tshowHide([elem], true);\n\t\t\t\t}\n\n\t\t\t\t/* eslint-disable no-loop-func */\n\n\t\t\t\tanim.done(function () {\n\n\t\t\t\t\t/* eslint-enable no-loop-func */\n\n\t\t\t\t\t// The final step of a \"hide\" animation is actually hiding the element\n\t\t\t\t\tif (!hidden) {\n\t\t\t\t\t\tshowHide([elem]);\n\t\t\t\t\t}\n\t\t\t\t\tdataPriv.remove(elem, \"fxshow\");\n\t\t\t\t\tfor (prop in orig) {\n\t\t\t\t\t\tjQuery.style(elem, prop, orig[prop]);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// Per-property setup\n\t\t\tpropTween = createTween(hidden ? dataShow[prop] : 0, prop, anim);\n\t\t\tif (!(prop in dataShow)) {\n\t\t\t\tdataShow[prop] = propTween.start;\n\t\t\t\tif (hidden) {\n\t\t\t\t\tpropTween.end = propTween.start;\n\t\t\t\t\tpropTween.start = 0;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction propFilter(props, specialEasing) {\n\t\tvar index, name, easing, value, hooks;\n\n\t\t// camelCase, specialEasing and expand cssHook pass\n\t\tfor (index in props) {\n\t\t\tname = camelCase(index);\n\t\t\teasing = specialEasing[name];\n\t\t\tvalue = props[index];\n\t\t\tif (Array.isArray(value)) {\n\t\t\t\teasing = value[1];\n\t\t\t\tvalue = props[index] = value[0];\n\t\t\t}\n\n\t\t\tif (index !== name) {\n\t\t\t\tprops[name] = value;\n\t\t\t\tdelete props[index];\n\t\t\t}\n\n\t\t\thooks = jQuery.cssHooks[name];\n\t\t\tif (hooks && \"expand\" in hooks) {\n\t\t\t\tvalue = hooks.expand(value);\n\t\t\t\tdelete props[name];\n\n\t\t\t\t// Not quite $.extend, this won't overwrite existing keys.\n\t\t\t\t// Reusing 'index' because we have the correct \"name\"\n\t\t\t\tfor (index in value) {\n\t\t\t\t\tif (!(index in props)) {\n\t\t\t\t\t\tprops[index] = value[index];\n\t\t\t\t\t\tspecialEasing[index] = easing;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tspecialEasing[name] = easing;\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction Animation(elem, properties, options) {\n\t\tvar result,\n\t\t\tstopped,\n\t\t\tindex = 0,\n\t\t\tlength = Animation.prefilters.length,\n\t\t\tdeferred = jQuery.Deferred().always(function () {\n\n\t\t\t\t// Don't match elem in the :animated selector\n\t\t\t\tdelete tick.elem;\n\t\t\t}),\n\t\t\ttick = function () {\n\t\t\t\tif (stopped) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tvar currentTime = fxNow || createFxNow(),\n\t\t\t\t\tremaining = Math.max(0, animation.startTime + animation.duration - currentTime),\n\n\t\t\t\t\t// Support: Android 2.3 only\n\t\t\t\t\t// Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (trac-12497)\n\t\t\t\t\ttemp = remaining / animation.duration || 0,\n\t\t\t\t\tpercent = 1 - temp,\n\t\t\t\t\tindex = 0,\n\t\t\t\t\tlength = animation.tweens.length;\n\n\t\t\t\tfor (; index < length; index++) {\n\t\t\t\t\tanimation.tweens[index].run(percent);\n\t\t\t\t}\n\n\t\t\t\tdeferred.notifyWith(elem, [animation, percent, remaining]);\n\n\t\t\t\t// If there's more to do, yield\n\t\t\t\tif (percent < 1 && length) {\n\t\t\t\t\treturn remaining;\n\t\t\t\t}\n\n\t\t\t\t// If this was an empty animation, synthesize a final progress notification\n\t\t\t\tif (!length) {\n\t\t\t\t\tdeferred.notifyWith(elem, [animation, 1, 0]);\n\t\t\t\t}\n\n\t\t\t\t// Resolve the animation and report its conclusion\n\t\t\t\tdeferred.resolveWith(elem, [animation]);\n\t\t\t\treturn false;\n\t\t\t},\n\t\t\tanimation = deferred.promise({\n\t\t\t\telem: elem,\n\t\t\t\tprops: jQuery.extend({}, properties),\n\t\t\t\topts: jQuery.extend(true, {\n\t\t\t\t\tspecialEasing: {},\n\t\t\t\t\teasing: jQuery.easing._default\n\t\t\t\t}, options),\n\t\t\t\toriginalProperties: properties,\n\t\t\t\toriginalOptions: options,\n\t\t\t\tstartTime: fxNow || createFxNow(),\n\t\t\t\tduration: options.duration,\n\t\t\t\ttweens: [],\n\t\t\t\tcreateTween: function (prop, end) {\n\t\t\t\t\tvar tween = jQuery.Tween(elem, animation.opts, prop, end,\n\t\t\t\t\t\tanimation.opts.specialEasing[prop] || animation.opts.easing);\n\t\t\t\t\tanimation.tweens.push(tween);\n\t\t\t\t\treturn tween;\n\t\t\t\t},\n\t\t\t\tstop: function (gotoEnd) {\n\t\t\t\t\tvar index = 0,\n\n\t\t\t\t\t\t// If we are going to the end, we want to run all the tweens\n\t\t\t\t\t\t// otherwise we skip this part\n\t\t\t\t\t\tlength = gotoEnd ? animation.tweens.length : 0;\n\t\t\t\t\tif (stopped) {\n\t\t\t\t\t\treturn this;\n\t\t\t\t\t}\n\t\t\t\t\tstopped = true;\n\t\t\t\t\tfor (; index < length; index++) {\n\t\t\t\t\t\tanimation.tweens[index].run(1);\n\t\t\t\t\t}\n\n\t\t\t\t\t// Resolve when we played the last frame; otherwise, reject\n\t\t\t\t\tif (gotoEnd) {\n\t\t\t\t\t\tdeferred.notifyWith(elem, [animation, 1, 0]);\n\t\t\t\t\t\tdeferred.resolveWith(elem, [animation, gotoEnd]);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdeferred.rejectWith(elem, [animation, gotoEnd]);\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t}),\n\t\t\tprops = animation.props;\n\n\t\tpropFilter(props, animation.opts.specialEasing);\n\n\t\tfor (; index < length; index++) {\n\t\t\tresult = Animation.prefilters[index].call(animation, elem, props, animation.opts);\n\t\t\tif (result) {\n\t\t\t\tif (isFunction(result.stop)) {\n\t\t\t\t\tjQuery._queueHooks(animation.elem, animation.opts.queue).stop =\n\t\t\t\t\t\tresult.stop.bind(result);\n\t\t\t\t}\n\t\t\t\treturn result;\n\t\t\t}\n\t\t}\n\n\t\tjQuery.map(props, createTween, animation);\n\n\t\tif (isFunction(animation.opts.start)) {\n\t\t\tanimation.opts.start.call(elem, animation);\n\t\t}\n\n\t\t// Attach callbacks from options\n\t\tanimation\n\t\t\t.progress(animation.opts.progress)\n\t\t\t.done(animation.opts.done, animation.opts.complete)\n\t\t\t.fail(animation.opts.fail)\n\t\t\t.always(animation.opts.always);\n\n\t\tjQuery.fx.timer(\n\t\t\tjQuery.extend(tick, {\n\t\t\t\telem: elem,\n\t\t\t\tanim: animation,\n\t\t\t\tqueue: animation.opts.queue\n\t\t\t})\n\t\t);\n\n\t\treturn animation;\n\t}\n\n\tjQuery.Animation = jQuery.extend(Animation, {\n\n\t\ttweeners: {\n\t\t\t\"*\": [function (prop, value) {\n\t\t\t\tvar tween = this.createTween(prop, value);\n\t\t\t\tadjustCSS(tween.elem, prop, rcssNum.exec(value), tween);\n\t\t\t\treturn tween;\n\t\t\t}]\n\t\t},\n\n\t\ttweener: function (props, callback) {\n\t\t\tif (isFunction(props)) {\n\t\t\t\tcallback = props;\n\t\t\t\tprops = [\"*\"];\n\t\t\t} else {\n\t\t\t\tprops = props.match(rnothtmlwhite);\n\t\t\t}\n\n\t\t\tvar prop,\n\t\t\t\tindex = 0,\n\t\t\t\tlength = props.length;\n\n\t\t\tfor (; index < length; index++) {\n\t\t\t\tprop = props[index];\n\t\t\t\tAnimation.tweeners[prop] = Animation.tweeners[prop] || [];\n\t\t\t\tAnimation.tweeners[prop].unshift(callback);\n\t\t\t}\n\t\t},\n\n\t\tprefilters: [defaultPrefilter],\n\n\t\tprefilter: function (callback, prepend) {\n\t\t\tif (prepend) {\n\t\t\t\tAnimation.prefilters.unshift(callback);\n\t\t\t} else {\n\t\t\t\tAnimation.prefilters.push(callback);\n\t\t\t}\n\t\t}\n\t});\n\n\tjQuery.speed = function (speed, easing, fn) {\n\t\tvar opt = speed && typeof speed === \"object\" ? jQuery.extend({}, speed) : {\n\t\t\tcomplete: fn || !fn && easing ||\n\t\t\t\tisFunction(speed) && speed,\n\t\t\tduration: speed,\n\t\t\teasing: fn && easing || easing && !isFunction(easing) && easing\n\t\t};\n\n\t\t// Go to the end state if fx are off\n\t\tif (jQuery.fx.off) {\n\t\t\topt.duration = 0;\n\n\t\t} else {\n\t\t\tif (typeof opt.duration !== \"number\") {\n\t\t\t\tif (opt.duration in jQuery.fx.speeds) {\n\t\t\t\t\topt.duration = jQuery.fx.speeds[opt.duration];\n\n\t\t\t\t} else {\n\t\t\t\t\topt.duration = jQuery.fx.speeds._default;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Normalize opt.queue - true/undefined/null -> \"fx\"\n\t\tif (opt.queue == null || opt.queue === true) {\n\t\t\topt.queue = \"fx\";\n\t\t}\n\n\t\t// Queueing\n\t\topt.old = opt.complete;\n\n\t\topt.complete = function () {\n\t\t\tif (isFunction(opt.old)) {\n\t\t\t\topt.old.call(this);\n\t\t\t}\n\n\t\t\tif (opt.queue) {\n\t\t\t\tjQuery.dequeue(this, opt.queue);\n\t\t\t}\n\t\t};\n\n\t\treturn opt;\n\t};\n\n\tjQuery.fn.extend({\n\t\tfadeTo: function (speed, to, easing, callback) {\n\n\t\t\t// Show any hidden elements after setting opacity to 0\n\t\t\treturn this.filter(isHiddenWithinTree).css(\"opacity\", 0).show()\n\n\t\t\t\t// Animate to the value specified\n\t\t\t\t.end().animate({ opacity: to }, speed, easing, callback);\n\t\t},\n\t\tanimate: function (prop, speed, easing, callback) {\n\t\t\tvar empty = jQuery.isEmptyObject(prop),\n\t\t\t\toptall = jQuery.speed(speed, easing, callback),\n\t\t\t\tdoAnimation = function () {\n\n\t\t\t\t\t// Operate on a copy of prop so per-property easing won't be lost\n\t\t\t\t\tvar anim = Animation(this, jQuery.extend({}, prop), optall);\n\n\t\t\t\t\t// Empty animations, or finishing resolves immediately\n\t\t\t\t\tif (empty || dataPriv.get(this, \"finish\")) {\n\t\t\t\t\t\tanim.stop(true);\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\tdoAnimation.finish = doAnimation;\n\n\t\t\treturn empty || optall.queue === false ?\n\t\t\t\tthis.each(doAnimation) :\n\t\t\t\tthis.queue(optall.queue, doAnimation);\n\t\t},\n\t\tstop: function (type, clearQueue, gotoEnd) {\n\t\t\tvar stopQueue = function (hooks) {\n\t\t\t\tvar stop = hooks.stop;\n\t\t\t\tdelete hooks.stop;\n\t\t\t\tstop(gotoEnd);\n\t\t\t};\n\n\t\t\tif (typeof type !== \"string\") {\n\t\t\t\tgotoEnd = clearQueue;\n\t\t\t\tclearQueue = type;\n\t\t\t\ttype = undefined;\n\t\t\t}\n\t\t\tif (clearQueue) {\n\t\t\t\tthis.queue(type || \"fx\", []);\n\t\t\t}\n\n\t\t\treturn this.each(function () {\n\t\t\t\tvar dequeue = true,\n\t\t\t\t\tindex = type != null && type + \"queueHooks\",\n\t\t\t\t\ttimers = jQuery.timers,\n\t\t\t\t\tdata = dataPriv.get(this);\n\n\t\t\t\tif (index) {\n\t\t\t\t\tif (data[index] && data[index].stop) {\n\t\t\t\t\t\tstopQueue(data[index]);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tfor (index in data) {\n\t\t\t\t\t\tif (data[index] && data[index].stop && rrun.test(index)) {\n\t\t\t\t\t\t\tstopQueue(data[index]);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tfor (index = timers.length; index--;) {\n\t\t\t\t\tif (timers[index].elem === this &&\n\t\t\t\t\t\t(type == null || timers[index].queue === type)) {\n\n\t\t\t\t\t\ttimers[index].anim.stop(gotoEnd);\n\t\t\t\t\t\tdequeue = false;\n\t\t\t\t\t\ttimers.splice(index, 1);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Start the next in the queue if the last step wasn't forced.\n\t\t\t\t// Timers currently will call their complete callbacks, which\n\t\t\t\t// will dequeue but only if they were gotoEnd.\n\t\t\t\tif (dequeue || !gotoEnd) {\n\t\t\t\t\tjQuery.dequeue(this, type);\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\t\tfinish: function (type) {\n\t\t\tif (type !== false) {\n\t\t\t\ttype = type || \"fx\";\n\t\t\t}\n\t\t\treturn this.each(function () {\n\t\t\t\tvar index,\n\t\t\t\t\tdata = dataPriv.get(this),\n\t\t\t\t\tqueue = data[type + \"queue\"],\n\t\t\t\t\thooks = data[type + \"queueHooks\"],\n\t\t\t\t\ttimers = jQuery.timers,\n\t\t\t\t\tlength = queue ? queue.length : 0;\n\n\t\t\t\t// Enable finishing flag on private data\n\t\t\t\tdata.finish = true;\n\n\t\t\t\t// Empty the queue first\n\t\t\t\tjQuery.queue(this, type, []);\n\n\t\t\t\tif (hooks && hooks.stop) {\n\t\t\t\t\thooks.stop.call(this, true);\n\t\t\t\t}\n\n\t\t\t\t// Look for any active animations, and finish them\n\t\t\t\tfor (index = timers.length; index--;) {\n\t\t\t\t\tif (timers[index].elem === this && timers[index].queue === type) {\n\t\t\t\t\t\ttimers[index].anim.stop(true);\n\t\t\t\t\t\ttimers.splice(index, 1);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Look for any animations in the old queue and finish them\n\t\t\t\tfor (index = 0; index < length; index++) {\n\t\t\t\t\tif (queue[index] && queue[index].finish) {\n\t\t\t\t\t\tqueue[index].finish.call(this);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Turn off finishing flag\n\t\t\t\tdelete data.finish;\n\t\t\t});\n\t\t}\n\t});\n\n\tjQuery.each([\"toggle\", \"show\", \"hide\"], function (_i, name) {\n\t\tvar cssFn = jQuery.fn[name];\n\t\tjQuery.fn[name] = function (speed, easing, callback) {\n\t\t\treturn speed == null || typeof speed === \"boolean\" ?\n\t\t\t\tcssFn.apply(this, arguments) :\n\t\t\t\tthis.animate(genFx(name, true), speed, easing, callback);\n\t\t};\n\t});\n\n\t// Generate shortcuts for custom animations\n\tjQuery.each({\n\t\tslideDown: genFx(\"show\"),\n\t\tslideUp: genFx(\"hide\"),\n\t\tslideToggle: genFx(\"toggle\"),\n\t\tfadeIn: { opacity: \"show\" },\n\t\tfadeOut: { opacity: \"hide\" },\n\t\tfadeToggle: { opacity: \"toggle\" }\n\t}, function (name, props) {\n\t\tjQuery.fn[name] = function (speed, easing, callback) {\n\t\t\treturn this.animate(props, speed, easing, callback);\n\t\t};\n\t});\n\n\tjQuery.timers = [];\n\tjQuery.fx.tick = function () {\n\t\tvar timer,\n\t\t\ti = 0,\n\t\t\ttimers = jQuery.timers;\n\n\t\tfxNow = Date.now();\n\n\t\tfor (; i < timers.length; i++) {\n\t\t\ttimer = timers[i];\n\n\t\t\t// Run the timer and safely remove it when done (allowing for external removal)\n\t\t\tif (!timer() && timers[i] === timer) {\n\t\t\t\ttimers.splice(i--, 1);\n\t\t\t}\n\t\t}\n\n\t\tif (!timers.length) {\n\t\t\tjQuery.fx.stop();\n\t\t}\n\t\tfxNow = undefined;\n\t};\n\n\tjQuery.fx.timer = function (timer) {\n\t\tjQuery.timers.push(timer);\n\t\tjQuery.fx.start();\n\t};\n\n\tjQuery.fx.interval = 13;\n\tjQuery.fx.start = function () {\n\t\tif (inProgress) {\n\t\t\treturn;\n\t\t}\n\n\t\tinProgress = true;\n\t\tschedule();\n\t};\n\n\tjQuery.fx.stop = function () {\n\t\tinProgress = null;\n\t};\n\n\tjQuery.fx.speeds = {\n\t\tslow: 600,\n\t\tfast: 200,\n\n\t\t// Default speed\n\t\t_default: 400\n\t};\n\n\n\t// Based off of the plugin by Clint Helfers, with permission.\n\tjQuery.fn.delay = function (time, type) {\n\t\ttime = jQuery.fx ? jQuery.fx.speeds[time] || time : time;\n\t\ttype = type || \"fx\";\n\n\t\treturn this.queue(type, function (next, hooks) {\n\t\t\tvar timeout = window.setTimeout(next, time);\n\t\t\thooks.stop = function () {\n\t\t\t\twindow.clearTimeout(timeout);\n\t\t\t};\n\t\t});\n\t};\n\n\n\t(function () {\n\t\tvar input = document.createElement(\"input\"),\n\t\t\tselect = document.createElement(\"select\"),\n\t\t\topt = select.appendChild(document.createElement(\"option\"));\n\n\t\tinput.type = \"checkbox\";\n\n\t\t// Support: Android <=4.3 only\n\t\t// Default value for a checkbox should be \"on\"\n\t\tsupport.checkOn = input.value !== \"\";\n\n\t\t// Support: IE <=11 only\n\t\t// Must access selectedIndex to make default options select\n\t\tsupport.optSelected = opt.selected;\n\n\t\t// Support: IE <=11 only\n\t\t// An input loses its value after becoming a radio\n\t\tinput = document.createElement(\"input\");\n\t\tinput.value = \"t\";\n\t\tinput.type = \"radio\";\n\t\tsupport.radioValue = input.value === \"t\";\n\t})();\n\n\n\tvar boolHook,\n\t\tattrHandle = jQuery.expr.attrHandle;\n\n\tjQuery.fn.extend({\n\t\tattr: function (name, value) {\n\t\t\treturn access(this, jQuery.attr, name, value, arguments.length > 1);\n\t\t},\n\n\t\tremoveAttr: function (name) {\n\t\t\treturn this.each(function () {\n\t\t\t\tjQuery.removeAttr(this, name);\n\t\t\t});\n\t\t}\n\t});\n\n\tjQuery.extend({\n\t\tattr: function (elem, name, value) {\n\t\t\tvar ret, hooks,\n\t\t\t\tnType = elem.nodeType;\n\n\t\t\t// Don't get/set attributes on text, comment and attribute nodes\n\t\t\tif (nType === 3 || nType === 8 || nType === 2) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Fallback to prop when attributes are not supported\n\t\t\tif (typeof elem.getAttribute === \"undefined\") {\n\t\t\t\treturn jQuery.prop(elem, name, value);\n\t\t\t}\n\n\t\t\t// Attribute hooks are determined by the lowercase version\n\t\t\t// Grab necessary hook if one is defined\n\t\t\tif (nType !== 1 || !jQuery.isXMLDoc(elem)) {\n\t\t\t\thooks = jQuery.attrHooks[name.toLowerCase()] ||\n\t\t\t\t\t(jQuery.expr.match.bool.test(name) ? boolHook : undefined);\n\t\t\t}\n\n\t\t\tif (value !== undefined) {\n\t\t\t\tif (value === null) {\n\t\t\t\t\tjQuery.removeAttr(elem, name);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (hooks && \"set\" in hooks &&\n\t\t\t\t\t(ret = hooks.set(elem, value, name)) !== undefined) {\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\n\t\t\t\telem.setAttribute(name, value + \"\");\n\t\t\t\treturn value;\n\t\t\t}\n\n\t\t\tif (hooks && \"get\" in hooks && (ret = hooks.get(elem, name)) !== null) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\tret = jQuery.find.attr(elem, name);\n\n\t\t\t// Non-existent attributes return null, we normalize to undefined\n\t\t\treturn ret == null ? undefined : ret;\n\t\t},\n\n\t\tattrHooks: {\n\t\t\ttype: {\n\t\t\t\tset: function (elem, value) {\n\t\t\t\t\tif (!support.radioValue && value === \"radio\" &&\n\t\t\t\t\t\tnodeName(elem, \"input\")) {\n\t\t\t\t\t\tvar val = elem.value;\n\t\t\t\t\t\telem.setAttribute(\"type\", value);\n\t\t\t\t\t\tif (val) {\n\t\t\t\t\t\t\telem.value = val;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn value;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tremoveAttr: function (elem, value) {\n\t\t\tvar name,\n\t\t\t\ti = 0,\n\n\t\t\t\t// Attribute names can contain non-HTML whitespace characters\n\t\t\t\t// https://html.spec.whatwg.org/multipage/syntax.html#attributes-2\n\t\t\t\tattrNames = value && value.match(rnothtmlwhite);\n\n\t\t\tif (attrNames && elem.nodeType === 1) {\n\t\t\t\twhile ((name = attrNames[i++])) {\n\t\t\t\t\telem.removeAttribute(name);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\n\t// Hooks for boolean attributes\n\tboolHook = {\n\t\tset: function (elem, value, name) {\n\t\t\tif (value === false) {\n\n\t\t\t\t// Remove boolean attributes when set to false\n\t\t\t\tjQuery.removeAttr(elem, name);\n\t\t\t} else {\n\t\t\t\telem.setAttribute(name, name);\n\t\t\t}\n\t\t\treturn name;\n\t\t}\n\t};\n\n\tjQuery.each(jQuery.expr.match.bool.source.match(/\\w+/g), function (_i, name) {\n\t\tvar getter = attrHandle[name] || jQuery.find.attr;\n\n\t\tattrHandle[name] = function (elem, name, isXML) {\n\t\t\tvar ret, handle,\n\t\t\t\tlowercaseName = name.toLowerCase();\n\n\t\t\tif (!isXML) {\n\n\t\t\t\t// Avoid an infinite loop by temporarily removing this function from the getter\n\t\t\t\thandle = attrHandle[lowercaseName];\n\t\t\t\tattrHandle[lowercaseName] = ret;\n\t\t\t\tret = getter(elem, name, isXML) != null ?\n\t\t\t\t\tlowercaseName :\n\t\t\t\t\tnull;\n\t\t\t\tattrHandle[lowercaseName] = handle;\n\t\t\t}\n\t\t\treturn ret;\n\t\t};\n\t});\n\n\n\n\n\tvar rfocusable = /^(?:input|select|textarea|button)$/i,\n\t\trclickable = /^(?:a|area)$/i;\n\n\tjQuery.fn.extend({\n\t\tprop: function (name, value) {\n\t\t\treturn access(this, jQuery.prop, name, value, arguments.length > 1);\n\t\t},\n\n\t\tremoveProp: function (name) {\n\t\t\treturn this.each(function () {\n\t\t\t\tdelete this[jQuery.propFix[name] || name];\n\t\t\t});\n\t\t}\n\t});\n\n\tjQuery.extend({\n\t\tprop: function (elem, name, value) {\n\t\t\tvar ret, hooks,\n\t\t\t\tnType = elem.nodeType;\n\n\t\t\t// Don't get/set properties on text, comment and attribute nodes\n\t\t\tif (nType === 3 || nType === 8 || nType === 2) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (nType !== 1 || !jQuery.isXMLDoc(elem)) {\n\n\t\t\t\t// Fix name and attach hooks\n\t\t\t\tname = jQuery.propFix[name] || name;\n\t\t\t\thooks = jQuery.propHooks[name];\n\t\t\t}\n\n\t\t\tif (value !== undefined) {\n\t\t\t\tif (hooks && \"set\" in hooks &&\n\t\t\t\t\t(ret = hooks.set(elem, value, name)) !== undefined) {\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\n\t\t\t\treturn (elem[name] = value);\n\t\t\t}\n\n\t\t\tif (hooks && \"get\" in hooks && (ret = hooks.get(elem, name)) !== null) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\treturn elem[name];\n\t\t},\n\n\t\tpropHooks: {\n\t\t\ttabIndex: {\n\t\t\t\tget: function (elem) {\n\n\t\t\t\t\t// Support: IE <=9 - 11 only\n\t\t\t\t\t// elem.tabIndex doesn't always return the\n\t\t\t\t\t// correct value when it hasn't been explicitly set\n\t\t\t\t\t// Use proper attribute retrieval (trac-12072)\n\t\t\t\t\tvar tabindex = jQuery.find.attr(elem, \"tabindex\");\n\n\t\t\t\t\tif (tabindex) {\n\t\t\t\t\t\treturn parseInt(tabindex, 10);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (\n\t\t\t\t\t\trfocusable.test(elem.nodeName) ||\n\t\t\t\t\t\trclickable.test(elem.nodeName) &&\n\t\t\t\t\t\telem.href\n\t\t\t\t\t) {\n\t\t\t\t\t\treturn 0;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn -1;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tpropFix: {\n\t\t\t\"for\": \"htmlFor\",\n\t\t\t\"class\": \"className\"\n\t\t}\n\t});\n\n\t// Support: IE <=11 only\n\t// Accessing the selectedIndex property\n\t// forces the browser to respect setting selected\n\t// on the option\n\t// The getter ensures a default option is selected\n\t// when in an optgroup\n\t// eslint rule \"no-unused-expressions\" is disabled for this code\n\t// since it considers such accessions noop\n\tif (!support.optSelected) {\n\t\tjQuery.propHooks.selected = {\n\t\t\tget: function (elem) {\n\n\t\t\t\t/* eslint no-unused-expressions: \"off\" */\n\n\t\t\t\tvar parent = elem.parentNode;\n\t\t\t\tif (parent && parent.parentNode) {\n\t\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t\t}\n\t\t\t\treturn null;\n\t\t\t},\n\t\t\tset: function (elem) {\n\n\t\t\t\t/* eslint no-unused-expressions: \"off\" */\n\n\t\t\t\tvar parent = elem.parentNode;\n\t\t\t\tif (parent) {\n\t\t\t\t\tparent.selectedIndex;\n\n\t\t\t\t\tif (parent.parentNode) {\n\t\t\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n\n\tjQuery.each([\n\t\t\"tabIndex\",\n\t\t\"readOnly\",\n\t\t\"maxLength\",\n\t\t\"cellSpacing\",\n\t\t\"cellPadding\",\n\t\t\"rowSpan\",\n\t\t\"colSpan\",\n\t\t\"useMap\",\n\t\t\"frameBorder\",\n\t\t\"contentEditable\"\n\t], function () {\n\t\tjQuery.propFix[this.toLowerCase()] = this;\n\t});\n\n\n\n\n\t// Strip and collapse whitespace according to HTML spec\n\t// https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace\n\tfunction stripAndCollapse(value) {\n\t\tvar tokens = value.match(rnothtmlwhite) || [];\n\t\treturn tokens.join(\" \");\n\t}\n\n\n\tfunction getClass(elem) {\n\t\treturn elem.getAttribute && elem.getAttribute(\"class\") || \"\";\n\t}\n\n\tfunction classesToArray(value) {\n\t\tif (Array.isArray(value)) {\n\t\t\treturn value;\n\t\t}\n\t\tif (typeof value === \"string\") {\n\t\t\treturn value.match(rnothtmlwhite) || [];\n\t\t}\n\t\treturn [];\n\t}\n\n\tjQuery.fn.extend({\n\t\taddClass: function (value) {\n\t\t\tvar classNames, cur, curValue, className, i, finalValue;\n\n\t\t\tif (isFunction(value)) {\n\t\t\t\treturn this.each(function (j) {\n\t\t\t\t\tjQuery(this).addClass(value.call(this, j, getClass(this)));\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tclassNames = classesToArray(value);\n\n\t\t\tif (classNames.length) {\n\t\t\t\treturn this.each(function () {\n\t\t\t\t\tcurValue = getClass(this);\n\t\t\t\t\tcur = this.nodeType === 1 && (\" \" + stripAndCollapse(curValue) + \" \");\n\n\t\t\t\t\tif (cur) {\n\t\t\t\t\t\tfor (i = 0; i < classNames.length; i++) {\n\t\t\t\t\t\t\tclassName = classNames[i];\n\t\t\t\t\t\t\tif (cur.indexOf(\" \" + className + \" \") < 0) {\n\t\t\t\t\t\t\t\tcur += className + \" \";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\t\tfinalValue = stripAndCollapse(cur);\n\t\t\t\t\t\tif (curValue !== finalValue) {\n\t\t\t\t\t\t\tthis.setAttribute(\"class\", finalValue);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn this;\n\t\t},\n\n\t\tremoveClass: function (value) {\n\t\t\tvar classNames, cur, curValue, className, i, finalValue;\n\n\t\t\tif (isFunction(value)) {\n\t\t\t\treturn this.each(function (j) {\n\t\t\t\t\tjQuery(this).removeClass(value.call(this, j, getClass(this)));\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (!arguments.length) {\n\t\t\t\treturn this.attr(\"class\", \"\");\n\t\t\t}\n\n\t\t\tclassNames = classesToArray(value);\n\n\t\t\tif (classNames.length) {\n\t\t\t\treturn this.each(function () {\n\t\t\t\t\tcurValue = getClass(this);\n\n\t\t\t\t\t// This expression is here for better compressibility (see addClass)\n\t\t\t\t\tcur = this.nodeType === 1 && (\" \" + stripAndCollapse(curValue) + \" \");\n\n\t\t\t\t\tif (cur) {\n\t\t\t\t\t\tfor (i = 0; i < classNames.length; i++) {\n\t\t\t\t\t\t\tclassName = classNames[i];\n\n\t\t\t\t\t\t\t// Remove *all* instances\n\t\t\t\t\t\t\twhile (cur.indexOf(\" \" + className + \" \") > -1) {\n\t\t\t\t\t\t\t\tcur = cur.replace(\" \" + className + \" \", \" \");\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\t\tfinalValue = stripAndCollapse(cur);\n\t\t\t\t\t\tif (curValue !== finalValue) {\n\t\t\t\t\t\t\tthis.setAttribute(\"class\", finalValue);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn this;\n\t\t},\n\n\t\ttoggleClass: function (value, stateVal) {\n\t\t\tvar classNames, className, i, self,\n\t\t\t\ttype = typeof value,\n\t\t\t\tisValidValue = type === \"string\" || Array.isArray(value);\n\n\t\t\tif (isFunction(value)) {\n\t\t\t\treturn this.each(function (i) {\n\t\t\t\t\tjQuery(this).toggleClass(\n\t\t\t\t\t\tvalue.call(this, i, getClass(this), stateVal),\n\t\t\t\t\t\tstateVal\n\t\t\t\t\t);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (typeof stateVal === \"boolean\" && isValidValue) {\n\t\t\t\treturn stateVal ? this.addClass(value) : this.removeClass(value);\n\t\t\t}\n\n\t\t\tclassNames = classesToArray(value);\n\n\t\t\treturn this.each(function () {\n\t\t\t\tif (isValidValue) {\n\n\t\t\t\t\t// Toggle individual class names\n\t\t\t\t\tself = jQuery(this);\n\n\t\t\t\t\tfor (i = 0; i < classNames.length; i++) {\n\t\t\t\t\t\tclassName = classNames[i];\n\n\t\t\t\t\t\t// Check each className given, space separated list\n\t\t\t\t\t\tif (self.hasClass(className)) {\n\t\t\t\t\t\t\tself.removeClass(className);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tself.addClass(className);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Toggle whole class name\n\t\t\t\t} else if (value === undefined || type === \"boolean\") {\n\t\t\t\t\tclassName = getClass(this);\n\t\t\t\t\tif (className) {\n\n\t\t\t\t\t\t// Store className if set\n\t\t\t\t\t\tdataPriv.set(this, \"__className__\", className);\n\t\t\t\t\t}\n\n\t\t\t\t\t// If the element has a class name or if we're passed `false`,\n\t\t\t\t\t// then remove the whole classname (if there was one, the above saved it).\n\t\t\t\t\t// Otherwise bring back whatever was previously saved (if anything),\n\t\t\t\t\t// falling back to the empty string if nothing was stored.\n\t\t\t\t\tif (this.setAttribute) {\n\t\t\t\t\t\tthis.setAttribute(\"class\",\n\t\t\t\t\t\t\tclassName || value === false ?\n\t\t\t\t\t\t\t\t\"\" :\n\t\t\t\t\t\t\t\tdataPriv.get(this, \"__className__\") || \"\"\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\thasClass: function (selector) {\n\t\t\tvar className, elem,\n\t\t\t\ti = 0;\n\n\t\t\tclassName = \" \" + selector + \" \";\n\t\t\twhile ((elem = this[i++])) {\n\t\t\t\tif (elem.nodeType === 1 &&\n\t\t\t\t\t(\" \" + stripAndCollapse(getClass(elem)) + \" \").indexOf(className) > -1) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn false;\n\t\t}\n\t});\n\n\n\n\n\tvar rreturn = /\\r/g;\n\n\tjQuery.fn.extend({\n\t\tval: function (value) {\n\t\t\tvar hooks, ret, valueIsFunction,\n\t\t\t\telem = this[0];\n\n\t\t\tif (!arguments.length) {\n\t\t\t\tif (elem) {\n\t\t\t\t\thooks = jQuery.valHooks[elem.type] ||\n\t\t\t\t\t\tjQuery.valHooks[elem.nodeName.toLowerCase()];\n\n\t\t\t\t\tif (hooks &&\n\t\t\t\t\t\t\"get\" in hooks &&\n\t\t\t\t\t\t(ret = hooks.get(elem, \"value\")) !== undefined\n\t\t\t\t\t) {\n\t\t\t\t\t\treturn ret;\n\t\t\t\t\t}\n\n\t\t\t\t\tret = elem.value;\n\n\t\t\t\t\t// Handle most common string cases\n\t\t\t\t\tif (typeof ret === \"string\") {\n\t\t\t\t\t\treturn ret.replace(rreturn, \"\");\n\t\t\t\t\t}\n\n\t\t\t\t\t// Handle cases where value is null/undef or number\n\t\t\t\t\treturn ret == null ? \"\" : ret;\n\t\t\t\t}\n\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvalueIsFunction = isFunction(value);\n\n\t\t\treturn this.each(function (i) {\n\t\t\t\tvar val;\n\n\t\t\t\tif (this.nodeType !== 1) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (valueIsFunction) {\n\t\t\t\t\tval = value.call(this, i, jQuery(this).val());\n\t\t\t\t} else {\n\t\t\t\t\tval = value;\n\t\t\t\t}\n\n\t\t\t\t// Treat null/undefined as \"\"; convert numbers to string\n\t\t\t\tif (val == null) {\n\t\t\t\t\tval = \"\";\n\n\t\t\t\t} else if (typeof val === \"number\") {\n\t\t\t\t\tval += \"\";\n\n\t\t\t\t} else if (Array.isArray(val)) {\n\t\t\t\t\tval = jQuery.map(val, function (value) {\n\t\t\t\t\t\treturn value == null ? \"\" : value + \"\";\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\thooks = jQuery.valHooks[this.type] || jQuery.valHooks[this.nodeName.toLowerCase()];\n\n\t\t\t\t// If set returns undefined, fall back to normal setting\n\t\t\t\tif (!hooks || !(\"set\" in hooks) || hooks.set(this, val, \"value\") === undefined) {\n\t\t\t\t\tthis.value = val;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t});\n\n\tjQuery.extend({\n\t\tvalHooks: {\n\t\t\toption: {\n\t\t\t\tget: function (elem) {\n\n\t\t\t\t\tvar val = jQuery.find.attr(elem, \"value\");\n\t\t\t\t\treturn val != null ?\n\t\t\t\t\t\tval :\n\n\t\t\t\t\t\t// Support: IE <=10 - 11 only\n\t\t\t\t\t\t// option.text throws exceptions (trac-14686, trac-14858)\n\t\t\t\t\t\t// Strip and collapse whitespace\n\t\t\t\t\t\t// https://html.spec.whatwg.org/#strip-and-collapse-whitespace\n\t\t\t\t\t\tstripAndCollapse(jQuery.text(elem));\n\t\t\t\t}\n\t\t\t},\n\t\t\tselect: {\n\t\t\t\tget: function (elem) {\n\t\t\t\t\tvar value, option, i,\n\t\t\t\t\t\toptions = elem.options,\n\t\t\t\t\t\tindex = elem.selectedIndex,\n\t\t\t\t\t\tone = elem.type === \"select-one\",\n\t\t\t\t\t\tvalues = one ? null : [],\n\t\t\t\t\t\tmax = one ? index + 1 : options.length;\n\n\t\t\t\t\tif (index < 0) {\n\t\t\t\t\t\ti = max;\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\ti = one ? index : 0;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Loop through all the selected options\n\t\t\t\t\tfor (; i < max; i++) {\n\t\t\t\t\t\toption = options[i];\n\n\t\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t\t// IE8-9 doesn't update selected after form reset (trac-2551)\n\t\t\t\t\t\tif ((option.selected || i === index) &&\n\n\t\t\t\t\t\t\t// Don't return options that are disabled or in a disabled optgroup\n\t\t\t\t\t\t\t!option.disabled &&\n\t\t\t\t\t\t\t(!option.parentNode.disabled ||\n\t\t\t\t\t\t\t\t!nodeName(option.parentNode, \"optgroup\"))) {\n\n\t\t\t\t\t\t\t// Get the specific value for the option\n\t\t\t\t\t\t\tvalue = jQuery(option).val();\n\n\t\t\t\t\t\t\t// We don't need an array for one selects\n\t\t\t\t\t\t\tif (one) {\n\t\t\t\t\t\t\t\treturn value;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Multi-Selects return an array\n\t\t\t\t\t\t\tvalues.push(value);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn values;\n\t\t\t\t},\n\n\t\t\t\tset: function (elem, value) {\n\t\t\t\t\tvar optionSet, option,\n\t\t\t\t\t\toptions = elem.options,\n\t\t\t\t\t\tvalues = jQuery.makeArray(value),\n\t\t\t\t\t\ti = options.length;\n\n\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\toption = options[i];\n\n\t\t\t\t\t\t/* eslint-disable no-cond-assign */\n\n\t\t\t\t\t\tif (option.selected =\n\t\t\t\t\t\t\tjQuery.inArray(jQuery.valHooks.option.get(option), values) > -1\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\toptionSet = true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t/* eslint-enable no-cond-assign */\n\t\t\t\t\t}\n\n\t\t\t\t\t// Force browsers to behave consistently when non-matching value is set\n\t\t\t\t\tif (!optionSet) {\n\t\t\t\t\t\telem.selectedIndex = -1;\n\t\t\t\t\t}\n\t\t\t\t\treturn values;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\n\t// Radios and checkboxes getter/setter\n\tjQuery.each([\"radio\", \"checkbox\"], function () {\n\t\tjQuery.valHooks[this] = {\n\t\t\tset: function (elem, value) {\n\t\t\t\tif (Array.isArray(value)) {\n\t\t\t\t\treturn (elem.checked = jQuery.inArray(jQuery(elem).val(), value) > -1);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\tif (!support.checkOn) {\n\t\t\tjQuery.valHooks[this].get = function (elem) {\n\t\t\t\treturn elem.getAttribute(\"value\") === null ? \"on\" : elem.value;\n\t\t\t};\n\t\t}\n\t});\n\n\n\n\n\t// Return jQuery for attributes-only inclusion\n\tvar location = window.location;\n\n\tvar nonce = { guid: Date.now() };\n\n\tvar rquery = (/\\?/);\n\n\n\n\t// Cross-browser xml parsing\n\tjQuery.parseXML = function (data) {\n\t\tvar xml, parserErrorElem;\n\t\tif (!data || typeof data !== \"string\") {\n\t\t\treturn null;\n\t\t}\n\n\t\t// Support: IE 9 - 11 only\n\t\t// IE throws on parseFromString with invalid input.\n\t\ttry {\n\t\t\txml = (new window.DOMParser()).parseFromString(data, \"text/xml\");\n\t\t} catch (e) { }\n\n\t\tparserErrorElem = xml && xml.getElementsByTagName(\"parsererror\")[0];\n\t\tif (!xml || parserErrorElem) {\n\t\t\tjQuery.error(\"Invalid XML: \" + (\n\t\t\t\tparserErrorElem ?\n\t\t\t\t\tjQuery.map(parserErrorElem.childNodes, function (el) {\n\t\t\t\t\t\treturn el.textContent;\n\t\t\t\t\t}).join(\"\\n\") :\n\t\t\t\t\tdata\n\t\t\t));\n\t\t}\n\t\treturn xml;\n\t};\n\n\n\tvar rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,\n\t\tstopPropagationCallback = function (e) {\n\t\t\te.stopPropagation();\n\t\t};\n\n\tjQuery.extend(jQuery.event, {\n\n\t\ttrigger: function (event, data, elem, onlyHandlers) {\n\n\t\t\tvar i, cur, tmp, bubbleType, ontype, handle, special, lastElement,\n\t\t\t\teventPath = [elem || document],\n\t\t\t\ttype = hasOwn.call(event, \"type\") ? event.type : event,\n\t\t\t\tnamespaces = hasOwn.call(event, \"namespace\") ? event.namespace.split(\".\") : [];\n\n\t\t\tcur = lastElement = tmp = elem = elem || document;\n\n\t\t\t// Don't do events on text and comment nodes\n\t\t\tif (elem.nodeType === 3 || elem.nodeType === 8) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// focus/blur morphs to focusin/out; ensure we're not firing them right now\n\t\t\tif (rfocusMorph.test(type + jQuery.event.triggered)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (type.indexOf(\".\") > -1) {\n\n\t\t\t\t// Namespaced trigger; create a regexp to match event type in handle()\n\t\t\t\tnamespaces = type.split(\".\");\n\t\t\t\ttype = namespaces.shift();\n\t\t\t\tnamespaces.sort();\n\t\t\t}\n\t\t\tontype = type.indexOf(\":\") < 0 && \"on\" + type;\n\n\t\t\t// Caller can pass in a jQuery.Event object, Object, or just an event type string\n\t\t\tevent = event[jQuery.expando] ?\n\t\t\t\tevent :\n\t\t\t\tnew jQuery.Event(type, typeof event === \"object\" && event);\n\n\t\t\t// Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)\n\t\t\tevent.isTrigger = onlyHandlers ? 2 : 3;\n\t\t\tevent.namespace = namespaces.join(\".\");\n\t\t\tevent.rnamespace = event.namespace ?\n\t\t\t\tnew RegExp(\"(^|\\\\.)\" + namespaces.join(\"\\\\.(?:.*\\\\.|)\") + \"(\\\\.|$)\") :\n\t\t\t\tnull;\n\n\t\t\t// Clean up the event in case it is being reused\n\t\t\tevent.result = undefined;\n\t\t\tif (!event.target) {\n\t\t\t\tevent.target = elem;\n\t\t\t}\n\n\t\t\t// Clone any incoming data and prepend the event, creating the handler arg list\n\t\t\tdata = data == null ?\n\t\t\t\t[event] :\n\t\t\t\tjQuery.makeArray(data, [event]);\n\n\t\t\t// Allow special events to draw outside the lines\n\t\t\tspecial = jQuery.event.special[type] || {};\n\t\t\tif (!onlyHandlers && special.trigger && special.trigger.apply(elem, data) === false) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Determine event propagation path in advance, per W3C events spec (trac-9951)\n\t\t\t// Bubble up to document, then to window; watch for a global ownerDocument var (trac-9724)\n\t\t\tif (!onlyHandlers && !special.noBubble && !isWindow(elem)) {\n\n\t\t\t\tbubbleType = special.delegateType || type;\n\t\t\t\tif (!rfocusMorph.test(bubbleType + type)) {\n\t\t\t\t\tcur = cur.parentNode;\n\t\t\t\t}\n\t\t\t\tfor (; cur; cur = cur.parentNode) {\n\t\t\t\t\teventPath.push(cur);\n\t\t\t\t\ttmp = cur;\n\t\t\t\t}\n\n\t\t\t\t// Only add window if we got to document (e.g., not plain obj or detached DOM)\n\t\t\t\tif (tmp === (elem.ownerDocument || document)) {\n\t\t\t\t\teventPath.push(tmp.defaultView || tmp.parentWindow || window);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Fire handlers on the event path\n\t\t\ti = 0;\n\t\t\twhile ((cur = eventPath[i++]) && !event.isPropagationStopped()) {\n\t\t\t\tlastElement = cur;\n\t\t\t\tevent.type = i > 1 ?\n\t\t\t\t\tbubbleType :\n\t\t\t\t\tspecial.bindType || type;\n\n\t\t\t\t// jQuery handler\n\t\t\t\thandle = (dataPriv.get(cur, \"events\") || Object.create(null))[event.type] &&\n\t\t\t\t\tdataPriv.get(cur, \"handle\");\n\t\t\t\tif (handle) {\n\t\t\t\t\thandle.apply(cur, data);\n\t\t\t\t}\n\n\t\t\t\t// Native handler\n\t\t\t\thandle = ontype && cur[ontype];\n\t\t\t\tif (handle && handle.apply && acceptData(cur)) {\n\t\t\t\t\tevent.result = handle.apply(cur, data);\n\t\t\t\t\tif (event.result === false) {\n\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tevent.type = type;\n\n\t\t\t// If nobody prevented the default action, do it now\n\t\t\tif (!onlyHandlers && !event.isDefaultPrevented()) {\n\n\t\t\t\tif ((!special._default ||\n\t\t\t\t\tspecial._default.apply(eventPath.pop(), data) === false) &&\n\t\t\t\t\tacceptData(elem)) {\n\n\t\t\t\t\t// Call a native DOM method on the target with the same name as the event.\n\t\t\t\t\t// Don't do default actions on window, that's where global variables be (trac-6170)\n\t\t\t\t\tif (ontype && isFunction(elem[type]) && !isWindow(elem)) {\n\n\t\t\t\t\t\t// Don't re-trigger an onFOO event when we call its FOO() method\n\t\t\t\t\t\ttmp = elem[ontype];\n\n\t\t\t\t\t\tif (tmp) {\n\t\t\t\t\t\t\telem[ontype] = null;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Prevent re-triggering of the same event, since we already bubbled it above\n\t\t\t\t\t\tjQuery.event.triggered = type;\n\n\t\t\t\t\t\tif (event.isPropagationStopped()) {\n\t\t\t\t\t\t\tlastElement.addEventListener(type, stopPropagationCallback);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\telem[type]();\n\n\t\t\t\t\t\tif (event.isPropagationStopped()) {\n\t\t\t\t\t\t\tlastElement.removeEventListener(type, stopPropagationCallback);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tjQuery.event.triggered = undefined;\n\n\t\t\t\t\t\tif (tmp) {\n\t\t\t\t\t\t\telem[ontype] = tmp;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn event.result;\n\t\t},\n\n\t\t// Piggyback on a donor event to simulate a different one\n\t\t// Used only for `focus(in | out)` events\n\t\tsimulate: function (type, elem, event) {\n\t\t\tvar e = jQuery.extend(\n\t\t\t\tnew jQuery.Event(),\n\t\t\t\tevent,\n\t\t\t\t{\n\t\t\t\t\ttype: type,\n\t\t\t\t\tisSimulated: true\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tjQuery.event.trigger(e, null, elem);\n\t\t}\n\n\t});\n\n\tjQuery.fn.extend({\n\n\t\ttrigger: function (type, data) {\n\t\t\treturn this.each(function () {\n\t\t\t\tjQuery.event.trigger(type, data, this);\n\t\t\t});\n\t\t},\n\t\ttriggerHandler: function (type, data) {\n\t\t\tvar elem = this[0];\n\t\t\tif (elem) {\n\t\t\t\treturn jQuery.event.trigger(type, data, elem, true);\n\t\t\t}\n\t\t}\n\t});\n\n\n\tvar\n\t\trbracket = /\\[\\]$/,\n\t\trCRLF = /\\r?\\n/g,\n\t\trsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,\n\t\trsubmittable = /^(?:input|select|textarea|keygen)/i;\n\n\tfunction buildParams(prefix, obj, traditional, add) {\n\t\tvar name;\n\n\t\tif (Array.isArray(obj)) {\n\n\t\t\t// Serialize array item.\n\t\t\tjQuery.each(obj, function (i, v) {\n\t\t\t\tif (traditional || rbracket.test(prefix)) {\n\n\t\t\t\t\t// Treat each array item as a scalar.\n\t\t\t\t\tadd(prefix, v);\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// Item is non-scalar (array or object), encode its numeric index.\n\t\t\t\t\tbuildParams(\n\t\t\t\t\t\tprefix + \"[\" + (typeof v === \"object\" && v != null ? i : \"\") + \"]\",\n\t\t\t\t\t\tv,\n\t\t\t\t\t\ttraditional,\n\t\t\t\t\t\tadd\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t});\n\n\t\t} else if (!traditional && toType(obj) === \"object\") {\n\n\t\t\t// Serialize object item.\n\t\t\tfor (name in obj) {\n\t\t\t\tbuildParams(prefix + \"[\" + name + \"]\", obj[name], traditional, add);\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// Serialize scalar item.\n\t\t\tadd(prefix, obj);\n\t\t}\n\t}\n\n\t// Serialize an array of form elements or a set of\n\t// key/values into a query string\n\tjQuery.param = function (a, traditional) {\n\t\tvar prefix,\n\t\t\ts = [],\n\t\t\tadd = function (key, valueOrFunction) {\n\n\t\t\t\t// If value is a function, invoke it and use its return value\n\t\t\t\tvar value = isFunction(valueOrFunction) ?\n\t\t\t\t\tvalueOrFunction() :\n\t\t\t\t\tvalueOrFunction;\n\n\t\t\t\ts[s.length] = encodeURIComponent(key) + \"=\" +\n\t\t\t\t\tencodeURIComponent(value == null ? \"\" : value);\n\t\t\t};\n\n\t\tif (a == null) {\n\t\t\treturn \"\";\n\t\t}\n\n\t\t// If an array was passed in, assume that it is an array of form elements.\n\t\tif (Array.isArray(a) || (a.jquery && !jQuery.isPlainObject(a))) {\n\n\t\t\t// Serialize the form elements\n\t\t\tjQuery.each(a, function () {\n\t\t\t\tadd(this.name, this.value);\n\t\t\t});\n\n\t\t} else {\n\n\t\t\t// If traditional, encode the \"old\" way (the way 1.3.2 or older\n\t\t\t// did it), otherwise encode params recursively.\n\t\t\tfor (prefix in a) {\n\t\t\t\tbuildParams(prefix, a[prefix], traditional, add);\n\t\t\t}\n\t\t}\n\n\t\t// Return the resulting serialization\n\t\treturn s.join(\"&\");\n\t};\n\n\tjQuery.fn.extend({\n\t\tserialize: function () {\n\t\t\treturn jQuery.param(this.serializeArray());\n\t\t},\n\t\tserializeArray: function () {\n\t\t\treturn this.map(function () {\n\n\t\t\t\t// Can add propHook for \"elements\" to filter or add form elements\n\t\t\t\tvar elements = jQuery.prop(this, \"elements\");\n\t\t\t\treturn elements ? jQuery.makeArray(elements) : this;\n\t\t\t}).filter(function () {\n\t\t\t\tvar type = this.type;\n\n\t\t\t\t// Use .is( \":disabled\" ) so that fieldset[disabled] works\n\t\t\t\treturn this.name && !jQuery(this).is(\":disabled\") &&\n\t\t\t\t\trsubmittable.test(this.nodeName) && !rsubmitterTypes.test(type) &&\n\t\t\t\t\t(this.checked || !rcheckableType.test(type));\n\t\t\t}).map(function (_i, elem) {\n\t\t\t\tvar val = jQuery(this).val();\n\n\t\t\t\tif (val == null) {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\n\t\t\t\tif (Array.isArray(val)) {\n\t\t\t\t\treturn jQuery.map(val, function (val) {\n\t\t\t\t\t\treturn { name: elem.name, value: val.replace(rCRLF, \"\\r\\n\") };\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\treturn { name: elem.name, value: val.replace(rCRLF, \"\\r\\n\") };\n\t\t\t}).get();\n\t\t}\n\t});\n\n\n\tvar\n\t\tr20 = /%20/g,\n\t\trhash = /#.*$/,\n\t\trantiCache = /([?&])_=[^&]*/,\n\t\trheaders = /^(.*?):[ \\t]*([^\\r\\n]*)$/mg,\n\n\t\t// trac-7653, trac-8125, trac-8152: local protocol detection\n\t\trlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,\n\t\trnoContent = /^(?:GET|HEAD)$/,\n\t\trprotocol = /^\\/\\//,\n\n\t\t/* Prefilters\n\t\t * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)\n\t\t * 2) These are called:\n\t\t *    - BEFORE asking for a transport\n\t\t *    - AFTER param serialization (s.data is a string if s.processData is true)\n\t\t * 3) key is the dataType\n\t\t * 4) the catchall symbol \"*\" can be used\n\t\t * 5) execution will start with transport dataType and THEN continue down to \"*\" if needed\n\t\t */\n\t\tprefilters = {},\n\n\t\t/* Transports bindings\n\t\t * 1) key is the dataType\n\t\t * 2) the catchall symbol \"*\" can be used\n\t\t * 3) selection will start with transport dataType and THEN go to \"*\" if needed\n\t\t */\n\t\ttransports = {},\n\n\t\t// Avoid comment-prolog char sequence (trac-10098); must appease lint and evade compression\n\t\tallTypes = \"*/\".concat(\"*\"),\n\n\t\t// Anchor tag for parsing the document origin\n\t\toriginAnchor = document.createElement(\"a\");\n\n\toriginAnchor.href = location.href;\n\n\t// Base \"constructor\" for jQuery.ajaxPrefilter and jQuery.ajaxTransport\n\tfunction addToPrefiltersOrTransports(structure) {\n\n\t\t// dataTypeExpression is optional and defaults to \"*\"\n\t\treturn function (dataTypeExpression, func) {\n\n\t\t\tif (typeof dataTypeExpression !== \"string\") {\n\t\t\t\tfunc = dataTypeExpression;\n\t\t\t\tdataTypeExpression = \"*\";\n\t\t\t}\n\n\t\t\tvar dataType,\n\t\t\t\ti = 0,\n\t\t\t\tdataTypes = dataTypeExpression.toLowerCase().match(rnothtmlwhite) || [];\n\n\t\t\tif (isFunction(func)) {\n\n\t\t\t\t// For each dataType in the dataTypeExpression\n\t\t\t\twhile ((dataType = dataTypes[i++])) {\n\n\t\t\t\t\t// Prepend if requested\n\t\t\t\t\tif (dataType[0] === \"+\") {\n\t\t\t\t\t\tdataType = dataType.slice(1) || \"*\";\n\t\t\t\t\t\t(structure[dataType] = structure[dataType] || []).unshift(func);\n\n\t\t\t\t\t\t// Otherwise append\n\t\t\t\t\t} else {\n\t\t\t\t\t\t(structure[dataType] = structure[dataType] || []).push(func);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n\n\t// Base inspection function for prefilters and transports\n\tfunction inspectPrefiltersOrTransports(structure, options, originalOptions, jqXHR) {\n\n\t\tvar inspected = {},\n\t\t\tseekingTransport = (structure === transports);\n\n\t\tfunction inspect(dataType) {\n\t\t\tvar selected;\n\t\t\tinspected[dataType] = true;\n\t\t\tjQuery.each(structure[dataType] || [], function (_, prefilterOrFactory) {\n\t\t\t\tvar dataTypeOrTransport = prefilterOrFactory(options, originalOptions, jqXHR);\n\t\t\t\tif (typeof dataTypeOrTransport === \"string\" &&\n\t\t\t\t\t!seekingTransport && !inspected[dataTypeOrTransport]) {\n\n\t\t\t\t\toptions.dataTypes.unshift(dataTypeOrTransport);\n\t\t\t\t\tinspect(dataTypeOrTransport);\n\t\t\t\t\treturn false;\n\t\t\t\t} else if (seekingTransport) {\n\t\t\t\t\treturn !(selected = dataTypeOrTransport);\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn selected;\n\t\t}\n\n\t\treturn inspect(options.dataTypes[0]) || !inspected[\"*\"] && inspect(\"*\");\n\t}\n\n\t// A special extend for ajax options\n\t// that takes \"flat\" options (not to be deep extended)\n\t// Fixes trac-9887\n\tfunction ajaxExtend(target, src) {\n\t\tvar key, deep,\n\t\t\tflatOptions = jQuery.ajaxSettings.flatOptions || {};\n\n\t\tfor (key in src) {\n\t\t\tif (src[key] !== undefined) {\n\t\t\t\t(flatOptions[key] ? target : (deep || (deep = {})))[key] = src[key];\n\t\t\t}\n\t\t}\n\t\tif (deep) {\n\t\t\tjQuery.extend(true, target, deep);\n\t\t}\n\n\t\treturn target;\n\t}\n\n\t/* Handles responses to an ajax request:\n\t * - finds the right dataType (mediates between content-type and expected dataType)\n\t * - returns the corresponding response\n\t */\n\tfunction ajaxHandleResponses(s, jqXHR, responses) {\n\n\t\tvar ct, type, finalDataType, firstDataType,\n\t\t\tcontents = s.contents,\n\t\t\tdataTypes = s.dataTypes;\n\n\t\t// Remove auto dataType and get content-type in the process\n\t\twhile (dataTypes[0] === \"*\") {\n\t\t\tdataTypes.shift();\n\t\t\tif (ct === undefined) {\n\t\t\t\tct = s.mimeType || jqXHR.getResponseHeader(\"Content-Type\");\n\t\t\t}\n\t\t}\n\n\t\t// Check if we're dealing with a known content-type\n\t\tif (ct) {\n\t\t\tfor (type in contents) {\n\t\t\t\tif (contents[type] && contents[type].test(ct)) {\n\t\t\t\t\tdataTypes.unshift(type);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Check to see if we have a response for the expected dataType\n\t\tif (dataTypes[0] in responses) {\n\t\t\tfinalDataType = dataTypes[0];\n\t\t} else {\n\n\t\t\t// Try convertible dataTypes\n\t\t\tfor (type in responses) {\n\t\t\t\tif (!dataTypes[0] || s.converters[type + \" \" + dataTypes[0]]) {\n\t\t\t\t\tfinalDataType = type;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (!firstDataType) {\n\t\t\t\t\tfirstDataType = type;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Or just use first one\n\t\t\tfinalDataType = finalDataType || firstDataType;\n\t\t}\n\n\t\t// If we found a dataType\n\t\t// We add the dataType to the list if needed\n\t\t// and return the corresponding response\n\t\tif (finalDataType) {\n\t\t\tif (finalDataType !== dataTypes[0]) {\n\t\t\t\tdataTypes.unshift(finalDataType);\n\t\t\t}\n\t\t\treturn responses[finalDataType];\n\t\t}\n\t}\n\n\t/* Chain conversions given the request and the original response\n\t * Also sets the responseXXX fields on the jqXHR instance\n\t */\n\tfunction ajaxConvert(s, response, jqXHR, isSuccess) {\n\t\tvar conv2, current, conv, tmp, prev,\n\t\t\tconverters = {},\n\n\t\t\t// Work with a copy of dataTypes in case we need to modify it for conversion\n\t\t\tdataTypes = s.dataTypes.slice();\n\n\t\t// Create converters map with lowercased keys\n\t\tif (dataTypes[1]) {\n\t\t\tfor (conv in s.converters) {\n\t\t\t\tconverters[conv.toLowerCase()] = s.converters[conv];\n\t\t\t}\n\t\t}\n\n\t\tcurrent = dataTypes.shift();\n\n\t\t// Convert to each sequential dataType\n\t\twhile (current) {\n\n\t\t\tif (s.responseFields[current]) {\n\t\t\t\tjqXHR[s.responseFields[current]] = response;\n\t\t\t}\n\n\t\t\t// Apply the dataFilter if provided\n\t\t\tif (!prev && isSuccess && s.dataFilter) {\n\t\t\t\tresponse = s.dataFilter(response, s.dataType);\n\t\t\t}\n\n\t\t\tprev = current;\n\t\t\tcurrent = dataTypes.shift();\n\n\t\t\tif (current) {\n\n\t\t\t\t// There's only work to do if current dataType is non-auto\n\t\t\t\tif (current === \"*\") {\n\n\t\t\t\t\tcurrent = prev;\n\n\t\t\t\t\t// Convert response if prev dataType is non-auto and differs from current\n\t\t\t\t} else if (prev !== \"*\" && prev !== current) {\n\n\t\t\t\t\t// Seek a direct converter\n\t\t\t\t\tconv = converters[prev + \" \" + current] || converters[\"* \" + current];\n\n\t\t\t\t\t// If none found, seek a pair\n\t\t\t\t\tif (!conv) {\n\t\t\t\t\t\tfor (conv2 in converters) {\n\n\t\t\t\t\t\t\t// If conv2 outputs current\n\t\t\t\t\t\t\ttmp = conv2.split(\" \");\n\t\t\t\t\t\t\tif (tmp[1] === current) {\n\n\t\t\t\t\t\t\t\t// If prev can be converted to accepted input\n\t\t\t\t\t\t\t\tconv = converters[prev + \" \" + tmp[0]] ||\n\t\t\t\t\t\t\t\t\tconverters[\"* \" + tmp[0]];\n\t\t\t\t\t\t\t\tif (conv) {\n\n\t\t\t\t\t\t\t\t\t// Condense equivalence converters\n\t\t\t\t\t\t\t\t\tif (conv === true) {\n\t\t\t\t\t\t\t\t\t\tconv = converters[conv2];\n\n\t\t\t\t\t\t\t\t\t\t// Otherwise, insert the intermediate dataType\n\t\t\t\t\t\t\t\t\t} else if (converters[conv2] !== true) {\n\t\t\t\t\t\t\t\t\t\tcurrent = tmp[0];\n\t\t\t\t\t\t\t\t\t\tdataTypes.unshift(tmp[1]);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Apply converter (if not an equivalence)\n\t\t\t\t\tif (conv !== true) {\n\n\t\t\t\t\t\t// Unless errors are allowed to bubble, catch and return them\n\t\t\t\t\t\tif (conv && s.throws) {\n\t\t\t\t\t\t\tresponse = conv(response);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\tresponse = conv(response);\n\t\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\tstate: \"parsererror\",\n\t\t\t\t\t\t\t\t\terror: conv ? e : \"No conversion from \" + prev + \" to \" + current\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn { state: \"success\", data: response };\n\t}\n\n\tjQuery.extend({\n\n\t\t// Counter for holding the number of active queries\n\t\tactive: 0,\n\n\t\t// Last-Modified header cache for next request\n\t\tlastModified: {},\n\t\tetag: {},\n\n\t\tajaxSettings: {\n\t\t\turl: location.href,\n\t\t\ttype: \"GET\",\n\t\t\tisLocal: rlocalProtocol.test(location.protocol),\n\t\t\tglobal: true,\n\t\t\tprocessData: true,\n\t\t\tasync: true,\n\t\t\tcontentType: \"application/x-www-form-urlencoded; charset=UTF-8\",\n\n\t\t\t/*\n\t\t\ttimeout: 0,\n\t\t\tdata: null,\n\t\t\tdataType: null,\n\t\t\tusername: null,\n\t\t\tpassword: null,\n\t\t\tcache: null,\n\t\t\tthrows: false,\n\t\t\ttraditional: false,\n\t\t\theaders: {},\n\t\t\t*/\n\n\t\t\taccepts: {\n\t\t\t\t\"*\": allTypes,\n\t\t\t\ttext: \"text/plain\",\n\t\t\t\thtml: \"text/html\",\n\t\t\t\txml: \"application/xml, text/xml\",\n\t\t\t\tjson: \"application/json, text/javascript\"\n\t\t\t},\n\n\t\t\tcontents: {\n\t\t\t\txml: /\\bxml\\b/,\n\t\t\t\thtml: /\\bhtml/,\n\t\t\t\tjson: /\\bjson\\b/\n\t\t\t},\n\n\t\t\tresponseFields: {\n\t\t\t\txml: \"responseXML\",\n\t\t\t\ttext: \"responseText\",\n\t\t\t\tjson: \"responseJSON\"\n\t\t\t},\n\n\t\t\t// Data converters\n\t\t\t// Keys separate source (or catchall \"*\") and destination types with a single space\n\t\t\tconverters: {\n\n\t\t\t\t// Convert anything to text\n\t\t\t\t\"* text\": String,\n\n\t\t\t\t// Text to html (true = no transformation)\n\t\t\t\t\"text html\": true,\n\n\t\t\t\t// Evaluate text as a json expression\n\t\t\t\t\"text json\": JSON.parse,\n\n\t\t\t\t// Parse text as xml\n\t\t\t\t\"text xml\": jQuery.parseXML\n\t\t\t},\n\n\t\t\t// For options that shouldn't be deep extended:\n\t\t\t// you can add your own custom options here if\n\t\t\t// and when you create one that shouldn't be\n\t\t\t// deep extended (see ajaxExtend)\n\t\t\tflatOptions: {\n\t\t\t\turl: true,\n\t\t\t\tcontext: true\n\t\t\t}\n\t\t},\n\n\t\t// Creates a full fledged settings object into target\n\t\t// with both ajaxSettings and settings fields.\n\t\t// If target is omitted, writes into ajaxSettings.\n\t\tajaxSetup: function (target, settings) {\n\t\t\treturn settings ?\n\n\t\t\t\t// Building a settings object\n\t\t\t\tajaxExtend(ajaxExtend(target, jQuery.ajaxSettings), settings) :\n\n\t\t\t\t// Extending ajaxSettings\n\t\t\t\tajaxExtend(jQuery.ajaxSettings, target);\n\t\t},\n\n\t\tajaxPrefilter: addToPrefiltersOrTransports(prefilters),\n\t\tajaxTransport: addToPrefiltersOrTransports(transports),\n\n\t\t// Main method\n\t\tajax: function (url, options) {\n\n\t\t\t// If url is an object, simulate pre-1.5 signature\n\t\t\tif (typeof url === \"object\") {\n\t\t\t\toptions = url;\n\t\t\t\turl = undefined;\n\t\t\t}\n\n\t\t\t// Force options to be an object\n\t\t\toptions = options || {};\n\n\t\t\tvar transport,\n\n\t\t\t\t// URL without anti-cache param\n\t\t\t\tcacheURL,\n\n\t\t\t\t// Response headers\n\t\t\t\tresponseHeadersString,\n\t\t\t\tresponseHeaders,\n\n\t\t\t\t// timeout handle\n\t\t\t\ttimeoutTimer,\n\n\t\t\t\t// Url cleanup var\n\t\t\t\turlAnchor,\n\n\t\t\t\t// Request state (becomes false upon send and true upon completion)\n\t\t\t\tcompleted,\n\n\t\t\t\t// To know if global events are to be dispatched\n\t\t\t\tfireGlobals,\n\n\t\t\t\t// Loop variable\n\t\t\t\ti,\n\n\t\t\t\t// uncached part of the url\n\t\t\t\tuncached,\n\n\t\t\t\t// Create the final options object\n\t\t\t\ts = jQuery.ajaxSetup({}, options),\n\n\t\t\t\t// Callbacks context\n\t\t\t\tcallbackContext = s.context || s,\n\n\t\t\t\t// Context for global events is callbackContext if it is a DOM node or jQuery collection\n\t\t\t\tglobalEventContext = s.context &&\n\t\t\t\t\t(callbackContext.nodeType || callbackContext.jquery) ?\n\t\t\t\t\tjQuery(callbackContext) :\n\t\t\t\t\tjQuery.event,\n\n\t\t\t\t// Deferreds\n\t\t\t\tdeferred = jQuery.Deferred(),\n\t\t\t\tcompleteDeferred = jQuery.Callbacks(\"once memory\"),\n\n\t\t\t\t// Status-dependent callbacks\n\t\t\t\tstatusCode = s.statusCode || {},\n\n\t\t\t\t// Headers (they are sent all at once)\n\t\t\t\trequestHeaders = {},\n\t\t\t\trequestHeadersNames = {},\n\n\t\t\t\t// Default abort message\n\t\t\t\tstrAbort = \"canceled\",\n\n\t\t\t\t// Fake xhr\n\t\t\t\tjqXHR = {\n\t\t\t\t\treadyState: 0,\n\n\t\t\t\t\t// Builds headers hashtable if needed\n\t\t\t\t\tgetResponseHeader: function (key) {\n\t\t\t\t\t\tvar match;\n\t\t\t\t\t\tif (completed) {\n\t\t\t\t\t\t\tif (!responseHeaders) {\n\t\t\t\t\t\t\t\tresponseHeaders = {};\n\t\t\t\t\t\t\t\twhile ((match = rheaders.exec(responseHeadersString))) {\n\t\t\t\t\t\t\t\t\tresponseHeaders[match[1].toLowerCase() + \" \"] =\n\t\t\t\t\t\t\t\t\t\t(responseHeaders[match[1].toLowerCase() + \" \"] || [])\n\t\t\t\t\t\t\t\t\t\t\t.concat(match[2]);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tmatch = responseHeaders[key.toLowerCase() + \" \"];\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn match == null ? null : match.join(\", \");\n\t\t\t\t\t},\n\n\t\t\t\t\t// Raw string\n\t\t\t\t\tgetAllResponseHeaders: function () {\n\t\t\t\t\t\treturn completed ? responseHeadersString : null;\n\t\t\t\t\t},\n\n\t\t\t\t\t// Caches the header\n\t\t\t\t\tsetRequestHeader: function (name, value) {\n\t\t\t\t\t\tif (completed == null) {\n\t\t\t\t\t\t\tname = requestHeadersNames[name.toLowerCase()] =\n\t\t\t\t\t\t\t\trequestHeadersNames[name.toLowerCase()] || name;\n\t\t\t\t\t\t\trequestHeaders[name] = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn this;\n\t\t\t\t\t},\n\n\t\t\t\t\t// Overrides response content-type header\n\t\t\t\t\toverrideMimeType: function (type) {\n\t\t\t\t\t\tif (completed == null) {\n\t\t\t\t\t\t\ts.mimeType = type;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn this;\n\t\t\t\t\t},\n\n\t\t\t\t\t// Status-dependent callbacks\n\t\t\t\t\tstatusCode: function (map) {\n\t\t\t\t\t\tvar code;\n\t\t\t\t\t\tif (map) {\n\t\t\t\t\t\t\tif (completed) {\n\n\t\t\t\t\t\t\t\t// Execute the appropriate callbacks\n\t\t\t\t\t\t\t\tjqXHR.always(map[jqXHR.status]);\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t// Lazy-add the new callbacks in a way that preserves old ones\n\t\t\t\t\t\t\t\tfor (code in map) {\n\t\t\t\t\t\t\t\t\tstatusCode[code] = [statusCode[code], map[code]];\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn this;\n\t\t\t\t\t},\n\n\t\t\t\t\t// Cancel the request\n\t\t\t\t\tabort: function (statusText) {\n\t\t\t\t\t\tvar finalText = statusText || strAbort;\n\t\t\t\t\t\tif (transport) {\n\t\t\t\t\t\t\ttransport.abort(finalText);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdone(0, finalText);\n\t\t\t\t\t\treturn this;\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t// Attach deferreds\n\t\t\tdeferred.promise(jqXHR);\n\n\t\t\t// Add protocol if not provided (prefilters might expect it)\n\t\t\t// Handle falsy url in the settings object (trac-10093: consistency with old signature)\n\t\t\t// We also use the url parameter if available\n\t\t\ts.url = ((url || s.url || location.href) + \"\")\n\t\t\t\t.replace(rprotocol, location.protocol + \"//\");\n\n\t\t\t// Alias method option to type as per ticket trac-12004\n\t\t\ts.type = options.method || options.type || s.method || s.type;\n\n\t\t\t// Extract dataTypes list\n\t\t\ts.dataTypes = (s.dataType || \"*\").toLowerCase().match(rnothtmlwhite) || [\"\"];\n\n\t\t\t// A cross-domain request is in order when the origin doesn't match the current origin.\n\t\t\tif (s.crossDomain == null) {\n\t\t\t\turlAnchor = document.createElement(\"a\");\n\n\t\t\t\t// Support: IE <=8 - 11, Edge 12 - 15\n\t\t\t\t// IE throws exception on accessing the href property if url is malformed,\n\t\t\t\t// e.g. http://example.com:80x/\n\t\t\t\ttry {\n\t\t\t\t\turlAnchor.href = s.url;\n\n\t\t\t\t\t// Support: IE <=8 - 11 only\n\t\t\t\t\t// Anchor's host property isn't correctly set when s.url is relative\n\t\t\t\t\turlAnchor.href = urlAnchor.href;\n\t\t\t\t\ts.crossDomain = originAnchor.protocol + \"//\" + originAnchor.host !==\n\t\t\t\t\t\turlAnchor.protocol + \"//\" + urlAnchor.host;\n\t\t\t\t} catch (e) {\n\n\t\t\t\t\t// If there is an error parsing the URL, assume it is crossDomain,\n\t\t\t\t\t// it can be rejected by the transport if it is invalid\n\t\t\t\t\ts.crossDomain = true;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Convert data if not already a string\n\t\t\tif (s.data && s.processData && typeof s.data !== \"string\") {\n\t\t\t\ts.data = jQuery.param(s.data, s.traditional);\n\t\t\t}\n\n\t\t\t// Apply prefilters\n\t\t\tinspectPrefiltersOrTransports(prefilters, s, options, jqXHR);\n\n\t\t\t// If request was aborted inside a prefilter, stop there\n\t\t\tif (completed) {\n\t\t\t\treturn jqXHR;\n\t\t\t}\n\n\t\t\t// We can fire global events as of now if asked to\n\t\t\t// Don't fire events if jQuery.event is undefined in an AMD-usage scenario (trac-15118)\n\t\t\tfireGlobals = jQuery.event && s.global;\n\n\t\t\t// Watch for a new set of requests\n\t\t\tif (fireGlobals && jQuery.active++ === 0) {\n\t\t\t\tjQuery.event.trigger(\"ajaxStart\");\n\t\t\t}\n\n\t\t\t// Uppercase the type\n\t\t\ts.type = s.type.toUpperCase();\n\n\t\t\t// Determine if request has content\n\t\t\ts.hasContent = !rnoContent.test(s.type);\n\n\t\t\t// Save the URL in case we're toying with the If-Modified-Since\n\t\t\t// and/or If-None-Match header later on\n\t\t\t// Remove hash to simplify url manipulation\n\t\t\tcacheURL = s.url.replace(rhash, \"\");\n\n\t\t\t// More options handling for requests with no content\n\t\t\tif (!s.hasContent) {\n\n\t\t\t\t// Remember the hash so we can put it back\n\t\t\t\tuncached = s.url.slice(cacheURL.length);\n\n\t\t\t\t// If data is available and should be processed, append data to url\n\t\t\t\tif (s.data && (s.processData || typeof s.data === \"string\")) {\n\t\t\t\t\tcacheURL += (rquery.test(cacheURL) ? \"&\" : \"?\") + s.data;\n\n\t\t\t\t\t// trac-9682: remove data so that it's not used in an eventual retry\n\t\t\t\t\tdelete s.data;\n\t\t\t\t}\n\n\t\t\t\t// Add or update anti-cache param if needed\n\t\t\t\tif (s.cache === false) {\n\t\t\t\t\tcacheURL = cacheURL.replace(rantiCache, \"$1\");\n\t\t\t\t\tuncached = (rquery.test(cacheURL) ? \"&\" : \"?\") + \"_=\" + (nonce.guid++) +\n\t\t\t\t\t\tuncached;\n\t\t\t\t}\n\n\t\t\t\t// Put hash and anti-cache on the URL that will be requested (gh-1732)\n\t\t\t\ts.url = cacheURL + uncached;\n\n\t\t\t\t// Change '%20' to '+' if this is encoded form body content (gh-2658)\n\t\t\t} else if (s.data && s.processData &&\n\t\t\t\t(s.contentType || \"\").indexOf(\"application/x-www-form-urlencoded\") === 0) {\n\t\t\t\ts.data = s.data.replace(r20, \"+\");\n\t\t\t}\n\n\t\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\t\tif (s.ifModified) {\n\t\t\t\tif (jQuery.lastModified[cacheURL]) {\n\t\t\t\t\tjqXHR.setRequestHeader(\"If-Modified-Since\", jQuery.lastModified[cacheURL]);\n\t\t\t\t}\n\t\t\t\tif (jQuery.etag[cacheURL]) {\n\t\t\t\t\tjqXHR.setRequestHeader(\"If-None-Match\", jQuery.etag[cacheURL]);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Set the correct header, if data is being sent\n\t\t\tif (s.data && s.hasContent && s.contentType !== false || options.contentType) {\n\t\t\t\tjqXHR.setRequestHeader(\"Content-Type\", s.contentType);\n\t\t\t}\n\n\t\t\t// Set the Accepts header for the server, depending on the dataType\n\t\t\tjqXHR.setRequestHeader(\n\t\t\t\t\"Accept\",\n\t\t\t\ts.dataTypes[0] && s.accepts[s.dataTypes[0]] ?\n\t\t\t\t\ts.accepts[s.dataTypes[0]] +\n\t\t\t\t\t(s.dataTypes[0] !== \"*\" ? \", \" + allTypes + \"; q=0.01\" : \"\") :\n\t\t\t\t\ts.accepts[\"*\"]\n\t\t\t);\n\n\t\t\t// Check for headers option\n\t\t\tfor (i in s.headers) {\n\t\t\t\tjqXHR.setRequestHeader(i, s.headers[i]);\n\t\t\t}\n\n\t\t\t// Allow custom headers/mimetypes and early abort\n\t\t\tif (s.beforeSend &&\n\t\t\t\t(s.beforeSend.call(callbackContext, jqXHR, s) === false || completed)) {\n\n\t\t\t\t// Abort if not done already and return\n\t\t\t\treturn jqXHR.abort();\n\t\t\t}\n\n\t\t\t// Aborting is no longer a cancellation\n\t\t\tstrAbort = \"abort\";\n\n\t\t\t// Install callbacks on deferreds\n\t\t\tcompleteDeferred.add(s.complete);\n\t\t\tjqXHR.done(s.success);\n\t\t\tjqXHR.fail(s.error);\n\n\t\t\t// Get transport\n\t\t\ttransport = inspectPrefiltersOrTransports(transports, s, options, jqXHR);\n\n\t\t\t// If no transport, we auto-abort\n\t\t\tif (!transport) {\n\t\t\t\tdone(-1, \"No Transport\");\n\t\t\t} else {\n\t\t\t\tjqXHR.readyState = 1;\n\n\t\t\t\t// Send global event\n\t\t\t\tif (fireGlobals) {\n\t\t\t\t\tglobalEventContext.trigger(\"ajaxSend\", [jqXHR, s]);\n\t\t\t\t}\n\n\t\t\t\t// If request was aborted inside ajaxSend, stop there\n\t\t\t\tif (completed) {\n\t\t\t\t\treturn jqXHR;\n\t\t\t\t}\n\n\t\t\t\t// Timeout\n\t\t\t\tif (s.async && s.timeout > 0) {\n\t\t\t\t\ttimeoutTimer = window.setTimeout(function () {\n\t\t\t\t\t\tjqXHR.abort(\"timeout\");\n\t\t\t\t\t}, s.timeout);\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tcompleted = false;\n\t\t\t\t\ttransport.send(requestHeaders, done);\n\t\t\t\t} catch (e) {\n\n\t\t\t\t\t// Rethrow post-completion exceptions\n\t\t\t\t\tif (completed) {\n\t\t\t\t\t\tthrow e;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Propagate others as results\n\t\t\t\t\tdone(-1, e);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Callback for when everything is done\n\t\t\tfunction done(status, nativeStatusText, responses, headers) {\n\t\t\t\tvar isSuccess, success, error, response, modified,\n\t\t\t\t\tstatusText = nativeStatusText;\n\n\t\t\t\t// Ignore repeat invocations\n\t\t\t\tif (completed) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tcompleted = true;\n\n\t\t\t\t// Clear timeout if it exists\n\t\t\t\tif (timeoutTimer) {\n\t\t\t\t\twindow.clearTimeout(timeoutTimer);\n\t\t\t\t}\n\n\t\t\t\t// Dereference transport for early garbage collection\n\t\t\t\t// (no matter how long the jqXHR object will be used)\n\t\t\t\ttransport = undefined;\n\n\t\t\t\t// Cache response headers\n\t\t\t\tresponseHeadersString = headers || \"\";\n\n\t\t\t\t// Set readyState\n\t\t\t\tjqXHR.readyState = status > 0 ? 4 : 0;\n\n\t\t\t\t// Determine if successful\n\t\t\t\tisSuccess = status >= 200 && status < 300 || status === 304;\n\n\t\t\t\t// Get response data\n\t\t\t\tif (responses) {\n\t\t\t\t\tresponse = ajaxHandleResponses(s, jqXHR, responses);\n\t\t\t\t}\n\n\t\t\t\t// Use a noop converter for missing script but not if jsonp\n\t\t\t\tif (!isSuccess &&\n\t\t\t\t\tjQuery.inArray(\"script\", s.dataTypes) > -1 &&\n\t\t\t\t\tjQuery.inArray(\"json\", s.dataTypes) < 0) {\n\t\t\t\t\ts.converters[\"text script\"] = function () { };\n\t\t\t\t}\n\n\t\t\t\t// Convert no matter what (that way responseXXX fields are always set)\n\t\t\t\tresponse = ajaxConvert(s, response, jqXHR, isSuccess);\n\n\t\t\t\t// If successful, handle type chaining\n\t\t\t\tif (isSuccess) {\n\n\t\t\t\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\t\t\t\tif (s.ifModified) {\n\t\t\t\t\t\tmodified = jqXHR.getResponseHeader(\"Last-Modified\");\n\t\t\t\t\t\tif (modified) {\n\t\t\t\t\t\t\tjQuery.lastModified[cacheURL] = modified;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmodified = jqXHR.getResponseHeader(\"etag\");\n\t\t\t\t\t\tif (modified) {\n\t\t\t\t\t\t\tjQuery.etag[cacheURL] = modified;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// if no content\n\t\t\t\t\tif (status === 204 || s.type === \"HEAD\") {\n\t\t\t\t\t\tstatusText = \"nocontent\";\n\n\t\t\t\t\t\t// if not modified\n\t\t\t\t\t} else if (status === 304) {\n\t\t\t\t\t\tstatusText = \"notmodified\";\n\n\t\t\t\t\t\t// If we have data, let's convert it\n\t\t\t\t\t} else {\n\t\t\t\t\t\tstatusText = response.state;\n\t\t\t\t\t\tsuccess = response.data;\n\t\t\t\t\t\terror = response.error;\n\t\t\t\t\t\tisSuccess = !error;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\n\t\t\t\t\t// Extract error from statusText and normalize for non-aborts\n\t\t\t\t\terror = statusText;\n\t\t\t\t\tif (status || !statusText) {\n\t\t\t\t\t\tstatusText = \"error\";\n\t\t\t\t\t\tif (status < 0) {\n\t\t\t\t\t\t\tstatus = 0;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Set data for the fake xhr object\n\t\t\t\tjqXHR.status = status;\n\t\t\t\tjqXHR.statusText = (nativeStatusText || statusText) + \"\";\n\n\t\t\t\t// Success/Error\n\t\t\t\tif (isSuccess) {\n\t\t\t\t\tdeferred.resolveWith(callbackContext, [success, statusText, jqXHR]);\n\t\t\t\t} else {\n\t\t\t\t\tdeferred.rejectWith(callbackContext, [jqXHR, statusText, error]);\n\t\t\t\t}\n\n\t\t\t\t// Status-dependent callbacks\n\t\t\t\tjqXHR.statusCode(statusCode);\n\t\t\t\tstatusCode = undefined;\n\n\t\t\t\tif (fireGlobals) {\n\t\t\t\t\tglobalEventContext.trigger(isSuccess ? \"ajaxSuccess\" : \"ajaxError\",\n\t\t\t\t\t\t[jqXHR, s, isSuccess ? success : error]);\n\t\t\t\t}\n\n\t\t\t\t// Complete\n\t\t\t\tcompleteDeferred.fireWith(callbackContext, [jqXHR, statusText]);\n\n\t\t\t\tif (fireGlobals) {\n\t\t\t\t\tglobalEventContext.trigger(\"ajaxComplete\", [jqXHR, s]);\n\n\t\t\t\t\t// Handle the global AJAX counter\n\t\t\t\t\tif (!(--jQuery.active)) {\n\t\t\t\t\t\tjQuery.event.trigger(\"ajaxStop\");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn jqXHR;\n\t\t},\n\n\t\tgetJSON: function (url, data, callback) {\n\t\t\treturn jQuery.get(url, data, callback, \"json\");\n\t\t},\n\n\t\tgetScript: function (url, callback) {\n\t\t\treturn jQuery.get(url, undefined, callback, \"script\");\n\t\t}\n\t});\n\n\tjQuery.each([\"get\", \"post\"], function (_i, method) {\n\t\tjQuery[method] = function (url, data, callback, type) {\n\n\t\t\t// Shift arguments if data argument was omitted\n\t\t\tif (isFunction(data)) {\n\t\t\t\ttype = type || callback;\n\t\t\t\tcallback = data;\n\t\t\t\tdata = undefined;\n\t\t\t}\n\n\t\t\t// The url can be an options object (which then must have .url)\n\t\t\treturn jQuery.ajax(jQuery.extend({\n\t\t\t\turl: url,\n\t\t\t\ttype: method,\n\t\t\t\tdataType: type,\n\t\t\t\tdata: data,\n\t\t\t\tsuccess: callback\n\t\t\t}, jQuery.isPlainObject(url) && url));\n\t\t};\n\t});\n\n\tjQuery.ajaxPrefilter(function (s) {\n\t\tvar i;\n\t\tfor (i in s.headers) {\n\t\t\tif (i.toLowerCase() === \"content-type\") {\n\t\t\t\ts.contentType = s.headers[i] || \"\";\n\t\t\t}\n\t\t}\n\t});\n\n\n\tjQuery._evalUrl = function (url, options, doc) {\n\t\treturn jQuery.ajax({\n\t\t\turl: url,\n\n\t\t\t// Make this explicit, since user can override this through ajaxSetup (trac-11264)\n\t\t\ttype: \"GET\",\n\t\t\tdataType: \"script\",\n\t\t\tcache: true,\n\t\t\tasync: false,\n\t\t\tglobal: false,\n\n\t\t\t// Only evaluate the response if it is successful (gh-4126)\n\t\t\t// dataFilter is not invoked for failure responses, so using it instead\n\t\t\t// of the default converter is kludgy but it works.\n\t\t\tconverters: {\n\t\t\t\t\"text script\": function () { }\n\t\t\t},\n\t\t\tdataFilter: function (response) {\n\t\t\t\tjQuery.globalEval(response, options, doc);\n\t\t\t}\n\t\t});\n\t};\n\n\n\tjQuery.fn.extend({\n\t\twrapAll: function (html) {\n\t\t\tvar wrap;\n\n\t\t\tif (this[0]) {\n\t\t\t\tif (isFunction(html)) {\n\t\t\t\t\thtml = html.call(this[0]);\n\t\t\t\t}\n\n\t\t\t\t// The elements to wrap the target around\n\t\t\t\twrap = jQuery(html, this[0].ownerDocument).eq(0).clone(true);\n\n\t\t\t\tif (this[0].parentNode) {\n\t\t\t\t\twrap.insertBefore(this[0]);\n\t\t\t\t}\n\n\t\t\t\twrap.map(function () {\n\t\t\t\t\tvar elem = this;\n\n\t\t\t\t\twhile (elem.firstElementChild) {\n\t\t\t\t\t\telem = elem.firstElementChild;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn elem;\n\t\t\t\t}).append(this);\n\t\t\t}\n\n\t\t\treturn this;\n\t\t},\n\n\t\twrapInner: function (html) {\n\t\t\tif (isFunction(html)) {\n\t\t\t\treturn this.each(function (i) {\n\t\t\t\t\tjQuery(this).wrapInner(html.call(this, i));\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn this.each(function () {\n\t\t\t\tvar self = jQuery(this),\n\t\t\t\t\tcontents = self.contents();\n\n\t\t\t\tif (contents.length) {\n\t\t\t\t\tcontents.wrapAll(html);\n\n\t\t\t\t} else {\n\t\t\t\t\tself.append(html);\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\twrap: function (html) {\n\t\t\tvar htmlIsFunction = isFunction(html);\n\n\t\t\treturn this.each(function (i) {\n\t\t\t\tjQuery(this).wrapAll(htmlIsFunction ? html.call(this, i) : html);\n\t\t\t});\n\t\t},\n\n\t\tunwrap: function (selector) {\n\t\t\tthis.parent(selector).not(\"body\").each(function () {\n\t\t\t\tjQuery(this).replaceWith(this.childNodes);\n\t\t\t});\n\t\t\treturn this;\n\t\t}\n\t});\n\n\n\tjQuery.expr.pseudos.hidden = function (elem) {\n\t\treturn !jQuery.expr.pseudos.visible(elem);\n\t};\n\tjQuery.expr.pseudos.visible = function (elem) {\n\t\treturn !!(elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length);\n\t};\n\n\n\n\n\tjQuery.ajaxSettings.xhr = function () {\n\t\ttry {\n\t\t\treturn new window.XMLHttpRequest();\n\t\t} catch (e) { }\n\t};\n\n\tvar xhrSuccessStatus = {\n\n\t\t// File protocol always yields status code 0, assume 200\n\t\t0: 200,\n\n\t\t// Support: IE <=9 only\n\t\t// trac-1450: sometimes IE returns 1223 when it should be 204\n\t\t1223: 204\n\t},\n\t\txhrSupported = jQuery.ajaxSettings.xhr();\n\n\tsupport.cors = !!xhrSupported && (\"withCredentials\" in xhrSupported);\n\tsupport.ajax = xhrSupported = !!xhrSupported;\n\n\tjQuery.ajaxTransport(function (options) {\n\t\tvar callback, errorCallback;\n\n\t\t// Cross domain only allowed if supported through XMLHttpRequest\n\t\tif (support.cors || xhrSupported && !options.crossDomain) {\n\t\t\treturn {\n\t\t\t\tsend: function (headers, complete) {\n\t\t\t\t\tvar i,\n\t\t\t\t\t\txhr = options.xhr();\n\n\t\t\t\t\txhr.open(\n\t\t\t\t\t\toptions.type,\n\t\t\t\t\t\toptions.url,\n\t\t\t\t\t\toptions.async,\n\t\t\t\t\t\toptions.username,\n\t\t\t\t\t\toptions.password\n\t\t\t\t\t);\n\n\t\t\t\t\t// Apply custom fields if provided\n\t\t\t\t\tif (options.xhrFields) {\n\t\t\t\t\t\tfor (i in options.xhrFields) {\n\t\t\t\t\t\t\txhr[i] = options.xhrFields[i];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Override mime type if needed\n\t\t\t\t\tif (options.mimeType && xhr.overrideMimeType) {\n\t\t\t\t\t\txhr.overrideMimeType(options.mimeType);\n\t\t\t\t\t}\n\n\t\t\t\t\t// X-Requested-With header\n\t\t\t\t\t// For cross-domain requests, seeing as conditions for a preflight are\n\t\t\t\t\t// akin to a jigsaw puzzle, we simply never set it to be sure.\n\t\t\t\t\t// (it can always be set on a per-request basis or even using ajaxSetup)\n\t\t\t\t\t// For same-domain requests, won't change header if already provided.\n\t\t\t\t\tif (!options.crossDomain && !headers[\"X-Requested-With\"]) {\n\t\t\t\t\t\theaders[\"X-Requested-With\"] = \"XMLHttpRequest\";\n\t\t\t\t\t}\n\n\t\t\t\t\t// Set headers\n\t\t\t\t\tfor (i in headers) {\n\t\t\t\t\t\txhr.setRequestHeader(i, headers[i]);\n\t\t\t\t\t}\n\n\t\t\t\t\t// Callback\n\t\t\t\t\tcallback = function (type) {\n\t\t\t\t\t\treturn function () {\n\t\t\t\t\t\t\tif (callback) {\n\t\t\t\t\t\t\t\tcallback = errorCallback = xhr.onload =\n\t\t\t\t\t\t\t\t\txhr.onerror = xhr.onabort = xhr.ontimeout =\n\t\t\t\t\t\t\t\t\txhr.onreadystatechange = null;\n\n\t\t\t\t\t\t\t\tif (type === \"abort\") {\n\t\t\t\t\t\t\t\t\txhr.abort();\n\t\t\t\t\t\t\t\t} else if (type === \"error\") {\n\n\t\t\t\t\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t\t\t\t\t// On a manual native abort, IE9 throws\n\t\t\t\t\t\t\t\t\t// errors on any property access that is not readyState\n\t\t\t\t\t\t\t\t\tif (typeof xhr.status !== \"number\") {\n\t\t\t\t\t\t\t\t\t\tcomplete(0, \"error\");\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tcomplete(\n\n\t\t\t\t\t\t\t\t\t\t\t// File: protocol always yields status 0; see trac-8605, trac-14207\n\t\t\t\t\t\t\t\t\t\t\txhr.status,\n\t\t\t\t\t\t\t\t\t\t\txhr.statusText\n\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tcomplete(\n\t\t\t\t\t\t\t\t\t\txhrSuccessStatus[xhr.status] || xhr.status,\n\t\t\t\t\t\t\t\t\t\txhr.statusText,\n\n\t\t\t\t\t\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t\t\t\t\t\t// IE9 has no XHR2 but throws on binary (trac-11426)\n\t\t\t\t\t\t\t\t\t\t// For XHR2 non-text, let the caller handle it (gh-2498)\n\t\t\t\t\t\t\t\t\t\t(xhr.responseType || \"text\") !== \"text\" ||\n\t\t\t\t\t\t\t\t\t\t\ttypeof xhr.responseText !== \"string\" ?\n\t\t\t\t\t\t\t\t\t\t\t{ binary: xhr.response } :\n\t\t\t\t\t\t\t\t\t\t\t{ text: xhr.responseText },\n\t\t\t\t\t\t\t\t\t\txhr.getAllResponseHeaders()\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\t\t\t\t\t};\n\n\t\t\t\t\t// Listen to events\n\t\t\t\t\txhr.onload = callback();\n\t\t\t\t\terrorCallback = xhr.onerror = xhr.ontimeout = callback(\"error\");\n\n\t\t\t\t\t// Support: IE 9 only\n\t\t\t\t\t// Use onreadystatechange to replace onabort\n\t\t\t\t\t// to handle uncaught aborts\n\t\t\t\t\tif (xhr.onabort !== undefined) {\n\t\t\t\t\t\txhr.onabort = errorCallback;\n\t\t\t\t\t} else {\n\t\t\t\t\t\txhr.onreadystatechange = function () {\n\n\t\t\t\t\t\t\t// Check readyState before timeout as it changes\n\t\t\t\t\t\t\tif (xhr.readyState === 4) {\n\n\t\t\t\t\t\t\t\t// Allow onerror to be called first,\n\t\t\t\t\t\t\t\t// but that will not handle a native abort\n\t\t\t\t\t\t\t\t// Also, save errorCallback to a variable\n\t\t\t\t\t\t\t\t// as xhr.onerror cannot be accessed\n\t\t\t\t\t\t\t\twindow.setTimeout(function () {\n\t\t\t\t\t\t\t\t\tif (callback) {\n\t\t\t\t\t\t\t\t\t\terrorCallback();\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\t// Create the abort callback\n\t\t\t\t\tcallback = callback(\"abort\");\n\n\t\t\t\t\ttry {\n\n\t\t\t\t\t\t// Do send the request (this may raise an exception)\n\t\t\t\t\t\txhr.send(options.hasContent && options.data || null);\n\t\t\t\t\t} catch (e) {\n\n\t\t\t\t\t\t// trac-14683: Only rethrow if this hasn't been notified as an error yet\n\t\t\t\t\t\tif (callback) {\n\t\t\t\t\t\t\tthrow e;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\t\tabort: function () {\n\t\t\t\t\tif (callback) {\n\t\t\t\t\t\tcallback();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t});\n\n\n\n\n\t// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432)\n\tjQuery.ajaxPrefilter(function (s) {\n\t\tif (s.crossDomain) {\n\t\t\ts.contents.script = false;\n\t\t}\n\t});\n\n\t// Install script dataType\n\tjQuery.ajaxSetup({\n\t\taccepts: {\n\t\t\tscript: \"text/javascript, application/javascript, \" +\n\t\t\t\t\"application/ecmascript, application/x-ecmascript\"\n\t\t},\n\t\tcontents: {\n\t\t\tscript: /\\b(?:java|ecma)script\\b/\n\t\t},\n\t\tconverters: {\n\t\t\t\"text script\": function (text) {\n\t\t\t\tjQuery.globalEval(text);\n\t\t\t\treturn text;\n\t\t\t}\n\t\t}\n\t});\n\n\t// Handle cache's special case and crossDomain\n\tjQuery.ajaxPrefilter(\"script\", function (s) {\n\t\tif (s.cache === undefined) {\n\t\t\ts.cache = false;\n\t\t}\n\t\tif (s.crossDomain) {\n\t\t\ts.type = \"GET\";\n\t\t}\n\t});\n\n\t// Bind script tag hack transport\n\tjQuery.ajaxTransport(\"script\", function (s) {\n\n\t\t// This transport only deals with cross domain or forced-by-attrs requests\n\t\tif (s.crossDomain || s.scriptAttrs) {\n\t\t\tvar script, callback;\n\t\t\treturn {\n\t\t\t\tsend: function (_, complete) {\n\t\t\t\t\tscript = jQuery(\"<script>\")\n\t\t\t\t\t\t.attr(s.scriptAttrs || {})\n\t\t\t\t\t\t.prop({ charset: s.scriptCharset, src: s.url })\n\t\t\t\t\t\t.on(\"load error\", callback = function (evt) {\n\t\t\t\t\t\t\tscript.remove();\n\t\t\t\t\t\t\tcallback = null;\n\t\t\t\t\t\t\tif (evt) {\n\t\t\t\t\t\t\t\tcomplete(evt.type === \"error\" ? 404 : 200, evt.type);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\n\t\t\t\t\t// Use native DOM manipulation to avoid our domManip AJAX trickery\n\t\t\t\t\tdocument.head.appendChild(script[0]);\n\t\t\t\t},\n\t\t\t\tabort: function () {\n\t\t\t\t\tif (callback) {\n\t\t\t\t\t\tcallback();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t});\n\n\n\n\n\tvar oldCallbacks = [],\n\t\trjsonp = /(=)\\?(?=&|$)|\\?\\?/;\n\n\t// Default jsonp settings\n\tjQuery.ajaxSetup({\n\t\tjsonp: \"callback\",\n\t\tjsonpCallback: function () {\n\t\t\tvar callback = oldCallbacks.pop() || (jQuery.expando + \"_\" + (nonce.guid++));\n\t\t\tthis[callback] = true;\n\t\t\treturn callback;\n\t\t}\n\t});\n\n\t// Detect, normalize options and install callbacks for jsonp requests\n\tjQuery.ajaxPrefilter(\"json jsonp\", function (s, originalSettings, jqXHR) {\n\n\t\tvar callbackName, overwritten, responseContainer,\n\t\t\tjsonProp = s.jsonp !== false && (rjsonp.test(s.url) ?\n\t\t\t\t\"url\" :\n\t\t\t\ttypeof s.data === \"string\" &&\n\t\t\t\t(s.contentType || \"\")\n\t\t\t\t\t.indexOf(\"application/x-www-form-urlencoded\") === 0 &&\n\t\t\t\trjsonp.test(s.data) && \"data\"\n\t\t\t);\n\n\t\t// Handle iff the expected data type is \"jsonp\" or we have a parameter to set\n\t\tif (jsonProp || s.dataTypes[0] === \"jsonp\") {\n\n\t\t\t// Get callback name, remembering preexisting value associated with it\n\t\t\tcallbackName = s.jsonpCallback = isFunction(s.jsonpCallback) ?\n\t\t\t\ts.jsonpCallback() :\n\t\t\t\ts.jsonpCallback;\n\n\t\t\t// Insert callback into url or form data\n\t\t\tif (jsonProp) {\n\t\t\t\ts[jsonProp] = s[jsonProp].replace(rjsonp, \"$1\" + callbackName);\n\t\t\t} else if (s.jsonp !== false) {\n\t\t\t\ts.url += (rquery.test(s.url) ? \"&\" : \"?\") + s.jsonp + \"=\" + callbackName;\n\t\t\t}\n\n\t\t\t// Use data converter to retrieve json after script execution\n\t\t\ts.converters[\"script json\"] = function () {\n\t\t\t\tif (!responseContainer) {\n\t\t\t\t\tjQuery.error(callbackName + \" was not called\");\n\t\t\t\t}\n\t\t\t\treturn responseContainer[0];\n\t\t\t};\n\n\t\t\t// Force json dataType\n\t\t\ts.dataTypes[0] = \"json\";\n\n\t\t\t// Install callback\n\t\t\toverwritten = window[callbackName];\n\t\t\twindow[callbackName] = function () {\n\t\t\t\tresponseContainer = arguments;\n\t\t\t};\n\n\t\t\t// Clean-up function (fires after converters)\n\t\t\tjqXHR.always(function () {\n\n\t\t\t\t// If previous value didn't exist - remove it\n\t\t\t\tif (overwritten === undefined) {\n\t\t\t\t\tjQuery(window).removeProp(callbackName);\n\n\t\t\t\t\t// Otherwise restore preexisting value\n\t\t\t\t} else {\n\t\t\t\t\twindow[callbackName] = overwritten;\n\t\t\t\t}\n\n\t\t\t\t// Save back as free\n\t\t\t\tif (s[callbackName]) {\n\n\t\t\t\t\t// Make sure that re-using the options doesn't screw things around\n\t\t\t\t\ts.jsonpCallback = originalSettings.jsonpCallback;\n\n\t\t\t\t\t// Save the callback name for future use\n\t\t\t\t\toldCallbacks.push(callbackName);\n\t\t\t\t}\n\n\t\t\t\t// Call if it was a function and we have a response\n\t\t\t\tif (responseContainer && isFunction(overwritten)) {\n\t\t\t\t\toverwritten(responseContainer[0]);\n\t\t\t\t}\n\n\t\t\t\tresponseContainer = overwritten = undefined;\n\t\t\t});\n\n\t\t\t// Delegate to script\n\t\t\treturn \"script\";\n\t\t}\n\t});\n\n\n\n\n\t// Support: Safari 8 only\n\t// In Safari 8 documents created via document.implementation.createHTMLDocument\n\t// collapse sibling forms: the second one becomes a child of the first one.\n\t// Because of that, this security measure has to be disabled in Safari 8.\n\t// https://bugs.webkit.org/show_bug.cgi?id=137337\n\tsupport.createHTMLDocument = (function () {\n\t\tvar body = document.implementation.createHTMLDocument(\"\").body;\n\t\tbody.innerHTML = \"<form></form><form></form>\";\n\t\treturn body.childNodes.length === 2;\n\t})();\n\n\n\t// Argument \"data\" should be string of html\n\t// context (optional): If specified, the fragment will be created in this context,\n\t// defaults to document\n\t// keepScripts (optional): If true, will include scripts passed in the html string\n\tjQuery.parseHTML = function (data, context, keepScripts) {\n\t\tif (typeof data !== \"string\") {\n\t\t\treturn [];\n\t\t}\n\t\tif (typeof context === \"boolean\") {\n\t\t\tkeepScripts = context;\n\t\t\tcontext = false;\n\t\t}\n\n\t\tvar base, parsed, scripts;\n\n\t\tif (!context) {\n\n\t\t\t// Stop scripts or inline event handlers from being executed immediately\n\t\t\t// by using document.implementation\n\t\t\tif (support.createHTMLDocument) {\n\t\t\t\tcontext = document.implementation.createHTMLDocument(\"\");\n\n\t\t\t\t// Set the base href for the created document\n\t\t\t\t// so any parsed elements with URLs\n\t\t\t\t// are based on the document's URL (gh-2965)\n\t\t\t\tbase = context.createElement(\"base\");\n\t\t\t\tbase.href = document.location.href;\n\t\t\t\tcontext.head.appendChild(base);\n\t\t\t} else {\n\t\t\t\tcontext = document;\n\t\t\t}\n\t\t}\n\n\t\tparsed = rsingleTag.exec(data);\n\t\tscripts = !keepScripts && [];\n\n\t\t// Single tag\n\t\tif (parsed) {\n\t\t\treturn [context.createElement(parsed[1])];\n\t\t}\n\n\t\tparsed = buildFragment([data], context, scripts);\n\n\t\tif (scripts && scripts.length) {\n\t\t\tjQuery(scripts).remove();\n\t\t}\n\n\t\treturn jQuery.merge([], parsed.childNodes);\n\t};\n\n\n\t/**\n\t * Load a url into a page\n\t */\n\tjQuery.fn.load = function (url, params, callback) {\n\t\tvar selector, type, response,\n\t\t\tself = this,\n\t\t\toff = url.indexOf(\" \");\n\n\t\tif (off > -1) {\n\t\t\tselector = stripAndCollapse(url.slice(off));\n\t\t\turl = url.slice(0, off);\n\t\t}\n\n\t\t// If it's a function\n\t\tif (isFunction(params)) {\n\n\t\t\t// We assume that it's the callback\n\t\t\tcallback = params;\n\t\t\tparams = undefined;\n\n\t\t\t// Otherwise, build a param string\n\t\t} else if (params && typeof params === \"object\") {\n\t\t\ttype = \"POST\";\n\t\t}\n\n\t\t// If we have elements to modify, make the request\n\t\tif (self.length > 0) {\n\t\t\tjQuery.ajax({\n\t\t\t\turl: url,\n\n\t\t\t\t// If \"type\" variable is undefined, then \"GET\" method will be used.\n\t\t\t\t// Make value of this field explicit since\n\t\t\t\t// user can override it through ajaxSetup method\n\t\t\t\ttype: type || \"GET\",\n\t\t\t\tdataType: \"html\",\n\t\t\t\tdata: params\n\t\t\t}).done(function (responseText) {\n\n\t\t\t\t// Save response for use in complete callback\n\t\t\t\tresponse = arguments;\n\n\t\t\t\tself.html(selector ?\n\n\t\t\t\t\t// If a selector was specified, locate the right elements in a dummy div\n\t\t\t\t\t// Exclude scripts to avoid IE 'Permission Denied' errors\n\t\t\t\t\tjQuery(\"<div>\").append(jQuery.parseHTML(responseText)).find(selector) :\n\n\t\t\t\t\t// Otherwise use the full result\n\t\t\t\t\tresponseText);\n\n\t\t\t\t// If the request succeeds, this function gets \"data\", \"status\", \"jqXHR\"\n\t\t\t\t// but they are ignored because response was set above.\n\t\t\t\t// If it fails, this function gets \"jqXHR\", \"status\", \"error\"\n\t\t\t}).always(callback && function (jqXHR, status) {\n\t\t\t\tself.each(function () {\n\t\t\t\t\tcallback.apply(this, response || [jqXHR.responseText, status, jqXHR]);\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\n\t\treturn this;\n\t};\n\n\n\n\n\tjQuery.expr.pseudos.animated = function (elem) {\n\t\treturn jQuery.grep(jQuery.timers, function (fn) {\n\t\t\treturn elem === fn.elem;\n\t\t}).length;\n\t};\n\n\n\n\n\tjQuery.offset = {\n\t\tsetOffset: function (elem, options, i) {\n\t\t\tvar curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition,\n\t\t\t\tposition = jQuery.css(elem, \"position\"),\n\t\t\t\tcurElem = jQuery(elem),\n\t\t\t\tprops = {};\n\n\t\t\t// Set position first, in-case top/left are set even on static elem\n\t\t\tif (position === \"static\") {\n\t\t\t\telem.style.position = \"relative\";\n\t\t\t}\n\n\t\t\tcurOffset = curElem.offset();\n\t\t\tcurCSSTop = jQuery.css(elem, \"top\");\n\t\t\tcurCSSLeft = jQuery.css(elem, \"left\");\n\t\t\tcalculatePosition = (position === \"absolute\" || position === \"fixed\") &&\n\t\t\t\t(curCSSTop + curCSSLeft).indexOf(\"auto\") > -1;\n\n\t\t\t// Need to be able to calculate position if either\n\t\t\t// top or left is auto and position is either absolute or fixed\n\t\t\tif (calculatePosition) {\n\t\t\t\tcurPosition = curElem.position();\n\t\t\t\tcurTop = curPosition.top;\n\t\t\t\tcurLeft = curPosition.left;\n\n\t\t\t} else {\n\t\t\t\tcurTop = parseFloat(curCSSTop) || 0;\n\t\t\t\tcurLeft = parseFloat(curCSSLeft) || 0;\n\t\t\t}\n\n\t\t\tif (isFunction(options)) {\n\n\t\t\t\t// Use jQuery.extend here to allow modification of coordinates argument (gh-1848)\n\t\t\t\toptions = options.call(elem, i, jQuery.extend({}, curOffset));\n\t\t\t}\n\n\t\t\tif (options.top != null) {\n\t\t\t\tprops.top = (options.top - curOffset.top) + curTop;\n\t\t\t}\n\t\t\tif (options.left != null) {\n\t\t\t\tprops.left = (options.left - curOffset.left) + curLeft;\n\t\t\t}\n\n\t\t\tif (\"using\" in options) {\n\t\t\t\toptions.using.call(elem, props);\n\n\t\t\t} else {\n\t\t\t\tcurElem.css(props);\n\t\t\t}\n\t\t}\n\t};\n\n\tjQuery.fn.extend({\n\n\t\t// offset() relates an element's border box to the document origin\n\t\toffset: function (options) {\n\n\t\t\t// Preserve chaining for setter\n\t\t\tif (arguments.length) {\n\t\t\t\treturn options === undefined ?\n\t\t\t\t\tthis :\n\t\t\t\t\tthis.each(function (i) {\n\t\t\t\t\t\tjQuery.offset.setOffset(this, options, i);\n\t\t\t\t\t});\n\t\t\t}\n\n\t\t\tvar rect, win,\n\t\t\t\telem = this[0];\n\n\t\t\tif (!elem) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Return zeros for disconnected and hidden (display: none) elements (gh-2310)\n\t\t\t// Support: IE <=11 only\n\t\t\t// Running getBoundingClientRect on a\n\t\t\t// disconnected node in IE throws an error\n\t\t\tif (!elem.getClientRects().length) {\n\t\t\t\treturn { top: 0, left: 0 };\n\t\t\t}\n\n\t\t\t// Get document-relative position by adding viewport scroll to viewport-relative gBCR\n\t\t\trect = elem.getBoundingClientRect();\n\t\t\twin = elem.ownerDocument.defaultView;\n\t\t\treturn {\n\t\t\t\ttop: rect.top + win.pageYOffset,\n\t\t\t\tleft: rect.left + win.pageXOffset\n\t\t\t};\n\t\t},\n\n\t\t// position() relates an element's margin box to its offset parent's padding box\n\t\t// This corresponds to the behavior of CSS absolute positioning\n\t\tposition: function () {\n\t\t\tif (!this[0]) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar offsetParent, offset, doc,\n\t\t\t\telem = this[0],\n\t\t\t\tparentOffset = { top: 0, left: 0 };\n\n\t\t\t// position:fixed elements are offset from the viewport, which itself always has zero offset\n\t\t\tif (jQuery.css(elem, \"position\") === \"fixed\") {\n\n\t\t\t\t// Assume position:fixed implies availability of getBoundingClientRect\n\t\t\t\toffset = elem.getBoundingClientRect();\n\n\t\t\t} else {\n\t\t\t\toffset = this.offset();\n\n\t\t\t\t// Account for the *real* offset parent, which can be the document or its root element\n\t\t\t\t// when a statically positioned element is identified\n\t\t\t\tdoc = elem.ownerDocument;\n\t\t\t\toffsetParent = elem.offsetParent || doc.documentElement;\n\t\t\t\twhile (offsetParent &&\n\t\t\t\t\t(offsetParent === doc.body || offsetParent === doc.documentElement) &&\n\t\t\t\t\tjQuery.css(offsetParent, \"position\") === \"static\") {\n\n\t\t\t\t\toffsetParent = offsetParent.parentNode;\n\t\t\t\t}\n\t\t\t\tif (offsetParent && offsetParent !== elem && offsetParent.nodeType === 1) {\n\n\t\t\t\t\t// Incorporate borders into its offset, since they are outside its content origin\n\t\t\t\t\tparentOffset = jQuery(offsetParent).offset();\n\t\t\t\t\tparentOffset.top += jQuery.css(offsetParent, \"borderTopWidth\", true);\n\t\t\t\t\tparentOffset.left += jQuery.css(offsetParent, \"borderLeftWidth\", true);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Subtract parent offsets and element margins\n\t\t\treturn {\n\t\t\t\ttop: offset.top - parentOffset.top - jQuery.css(elem, \"marginTop\", true),\n\t\t\t\tleft: offset.left - parentOffset.left - jQuery.css(elem, \"marginLeft\", true)\n\t\t\t};\n\t\t},\n\n\t\t// This method will return documentElement in the following cases:\n\t\t// 1) For the element inside the iframe without offsetParent, this method will return\n\t\t//    documentElement of the parent window\n\t\t// 2) For the hidden or detached element\n\t\t// 3) For body or html element, i.e. in case of the html node - it will return itself\n\t\t//\n\t\t// but those exceptions were never presented as a real life use-cases\n\t\t// and might be considered as more preferable results.\n\t\t//\n\t\t// This logic, however, is not guaranteed and can change at any point in the future\n\t\toffsetParent: function () {\n\t\t\treturn this.map(function () {\n\t\t\t\tvar offsetParent = this.offsetParent;\n\n\t\t\t\twhile (offsetParent && jQuery.css(offsetParent, \"position\") === \"static\") {\n\t\t\t\t\toffsetParent = offsetParent.offsetParent;\n\t\t\t\t}\n\n\t\t\t\treturn offsetParent || documentElement;\n\t\t\t});\n\t\t}\n\t});\n\n\t// Create scrollLeft and scrollTop methods\n\tjQuery.each({ scrollLeft: \"pageXOffset\", scrollTop: \"pageYOffset\" }, function (method, prop) {\n\t\tvar top = \"pageYOffset\" === prop;\n\n\t\tjQuery.fn[method] = function (val) {\n\t\t\treturn access(this, function (elem, method, val) {\n\n\t\t\t\t// Coalesce documents and windows\n\t\t\t\tvar win;\n\t\t\t\tif (isWindow(elem)) {\n\t\t\t\t\twin = elem;\n\t\t\t\t} else if (elem.nodeType === 9) {\n\t\t\t\t\twin = elem.defaultView;\n\t\t\t\t}\n\n\t\t\t\tif (val === undefined) {\n\t\t\t\t\treturn win ? win[prop] : elem[method];\n\t\t\t\t}\n\n\t\t\t\tif (win) {\n\t\t\t\t\twin.scrollTo(\n\t\t\t\t\t\t!top ? val : win.pageXOffset,\n\t\t\t\t\t\ttop ? val : win.pageYOffset\n\t\t\t\t\t);\n\n\t\t\t\t} else {\n\t\t\t\t\telem[method] = val;\n\t\t\t\t}\n\t\t\t}, method, val, arguments.length);\n\t\t};\n\t});\n\n\t// Support: Safari <=7 - 9.1, Chrome <=37 - 49\n\t// Add the top/left cssHooks using jQuery.fn.position\n\t// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084\n\t// Blink bug: https://bugs.chromium.org/p/chromium/issues/detail?id=589347\n\t// getComputedStyle returns percent when specified for top/left/bottom/right;\n\t// rather than make the css module depend on the offset module, just check for it here\n\tjQuery.each([\"top\", \"left\"], function (_i, prop) {\n\t\tjQuery.cssHooks[prop] = addGetHookIf(support.pixelPosition,\n\t\t\tfunction (elem, computed) {\n\t\t\t\tif (computed) {\n\t\t\t\t\tcomputed = curCSS(elem, prop);\n\n\t\t\t\t\t// If curCSS returns percentage, fallback to offset\n\t\t\t\t\treturn rnumnonpx.test(computed) ?\n\t\t\t\t\t\tjQuery(elem).position()[prop] + \"px\" :\n\t\t\t\t\t\tcomputed;\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\t});\n\n\n\t// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods\n\tjQuery.each({ Height: \"height\", Width: \"width\" }, function (name, type) {\n\t\tjQuery.each({\n\t\t\tpadding: \"inner\" + name,\n\t\t\tcontent: type,\n\t\t\t\"\": \"outer\" + name\n\t\t}, function (defaultExtra, funcName) {\n\n\t\t\t// Margin is only for outerHeight, outerWidth\n\t\t\tjQuery.fn[funcName] = function (margin, value) {\n\t\t\t\tvar chainable = arguments.length && (defaultExtra || typeof margin !== \"boolean\"),\n\t\t\t\t\textra = defaultExtra || (margin === true || value === true ? \"margin\" : \"border\");\n\n\t\t\t\treturn access(this, function (elem, type, value) {\n\t\t\t\t\tvar doc;\n\n\t\t\t\t\tif (isWindow(elem)) {\n\n\t\t\t\t\t\t// $( window ).outerWidth/Height return w/h including scrollbars (gh-1729)\n\t\t\t\t\t\treturn funcName.indexOf(\"outer\") === 0 ?\n\t\t\t\t\t\t\telem[\"inner\" + name] :\n\t\t\t\t\t\t\telem.document.documentElement[\"client\" + name];\n\t\t\t\t\t}\n\n\t\t\t\t\t// Get document width or height\n\t\t\t\t\tif (elem.nodeType === 9) {\n\t\t\t\t\t\tdoc = elem.documentElement;\n\n\t\t\t\t\t\t// Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height],\n\t\t\t\t\t\t// whichever is greatest\n\t\t\t\t\t\treturn Math.max(\n\t\t\t\t\t\t\telem.body[\"scroll\" + name], doc[\"scroll\" + name],\n\t\t\t\t\t\t\telem.body[\"offset\" + name], doc[\"offset\" + name],\n\t\t\t\t\t\t\tdoc[\"client\" + name]\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\n\t\t\t\t\treturn value === undefined ?\n\n\t\t\t\t\t\t// Get width or height on the element, requesting but not forcing parseFloat\n\t\t\t\t\t\tjQuery.css(elem, type, extra) :\n\n\t\t\t\t\t\t// Set width or height on the element\n\t\t\t\t\t\tjQuery.style(elem, type, value, extra);\n\t\t\t\t}, type, chainable ? margin : undefined, chainable);\n\t\t\t};\n\t\t});\n\t});\n\n\n\tjQuery.each([\n\t\t\"ajaxStart\",\n\t\t\"ajaxStop\",\n\t\t\"ajaxComplete\",\n\t\t\"ajaxError\",\n\t\t\"ajaxSuccess\",\n\t\t\"ajaxSend\"\n\t], function (_i, type) {\n\t\tjQuery.fn[type] = function (fn) {\n\t\t\treturn this.on(type, fn);\n\t\t};\n\t});\n\n\n\n\n\tjQuery.fn.extend({\n\n\t\tbind: function (types, data, fn) {\n\t\t\treturn this.on(types, null, data, fn);\n\t\t},\n\t\tunbind: function (types, fn) {\n\t\t\treturn this.off(types, null, fn);\n\t\t},\n\n\t\tdelegate: function (selector, types, data, fn) {\n\t\t\treturn this.on(types, selector, data, fn);\n\t\t},\n\t\tundelegate: function (selector, types, fn) {\n\n\t\t\t// ( namespace ) or ( selector, types [, fn] )\n\t\t\treturn arguments.length === 1 ?\n\t\t\t\tthis.off(selector, \"**\") :\n\t\t\t\tthis.off(types, selector || \"**\", fn);\n\t\t},\n\n\t\thover: function (fnOver, fnOut) {\n\t\t\treturn this.mouseenter(fnOver).mouseleave(fnOut || fnOver);\n\t\t}\n\t});\n\n\tjQuery.each(\n\t\t(\"blur focus focusin focusout resize scroll click dblclick \" +\n\t\t\t\"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave \" +\n\t\t\t\"change select submit keydown keypress keyup contextmenu\").split(\" \"),\n\t\tfunction (_i, name) {\n\n\t\t\t// Handle event binding\n\t\t\tjQuery.fn[name] = function (data, fn) {\n\t\t\t\treturn arguments.length > 0 ?\n\t\t\t\t\tthis.on(name, null, data, fn) :\n\t\t\t\t\tthis.trigger(name);\n\t\t\t};\n\t\t}\n\t);\n\n\n\n\n\t// Support: Android <=4.0 only\n\t// Make sure we trim BOM and NBSP\n\t// Require that the \"whitespace run\" starts from a non-whitespace\n\t// to avoid O(N^2) behavior when the engine would try matching \"\\s+$\" at each space position.\n\tvar rtrim = /^[\\s\\uFEFF\\xA0]+|([^\\s\\uFEFF\\xA0])[\\s\\uFEFF\\xA0]+$/g;\n\n\t// Bind a function to a context, optionally partially applying any\n\t// arguments.\n\t// jQuery.proxy is deprecated to promote standards (specifically Function#bind)\n\t// However, it is not slated for removal any time soon\n\tjQuery.proxy = function (fn, context) {\n\t\tvar tmp, args, proxy;\n\n\t\tif (typeof context === \"string\") {\n\t\t\ttmp = fn[context];\n\t\t\tcontext = fn;\n\t\t\tfn = tmp;\n\t\t}\n\n\t\t// Quick check to determine if target is callable, in the spec\n\t\t// this throws a TypeError, but we will just return undefined.\n\t\tif (!isFunction(fn)) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\t// Simulated bind\n\t\targs = slice.call(arguments, 2);\n\t\tproxy = function () {\n\t\t\treturn fn.apply(context || this, args.concat(slice.call(arguments)));\n\t\t};\n\n\t\t// Set the guid of unique handler to the same of original handler, so it can be removed\n\t\tproxy.guid = fn.guid = fn.guid || jQuery.guid++;\n\n\t\treturn proxy;\n\t};\n\n\tjQuery.holdReady = function (hold) {\n\t\tif (hold) {\n\t\t\tjQuery.readyWait++;\n\t\t} else {\n\t\t\tjQuery.ready(true);\n\t\t}\n\t};\n\tjQuery.isArray = Array.isArray;\n\tjQuery.parseJSON = JSON.parse;\n\tjQuery.nodeName = nodeName;\n\tjQuery.isFunction = isFunction;\n\tjQuery.isWindow = isWindow;\n\tjQuery.camelCase = camelCase;\n\tjQuery.type = toType;\n\n\tjQuery.now = Date.now;\n\n\tjQuery.isNumeric = function (obj) {\n\n\t\t// As of jQuery 3.0, isNumeric is limited to\n\t\t// strings and numbers (primitives or objects)\n\t\t// that can be coerced to finite numbers (gh-2662)\n\t\tvar type = jQuery.type(obj);\n\t\treturn (type === \"number\" || type === \"string\") &&\n\n\t\t\t// parseFloat NaNs numeric-cast false positives (\"\")\n\t\t\t// ...but misinterprets leading-number strings, particularly hex literals (\"0x...\")\n\t\t\t// subtraction forces infinities to NaN\n\t\t\t!isNaN(obj - parseFloat(obj));\n\t};\n\n\tjQuery.trim = function (text) {\n\t\treturn text == null ?\n\t\t\t\"\" :\n\t\t\t(text + \"\").replace(rtrim, \"$1\");\n\t};\n\n\n\n\t// Register as a named AMD module, since jQuery can be concatenated with other\n\t// files that may use define, but not via a proper concatenation script that\n\t// understands anonymous AMD modules. A named AMD is safest and most robust\n\t// way to register. Lowercase jquery is used because AMD module names are\n\t// derived from file names, and jQuery is normally delivered in a lowercase\n\t// file name. Do this after creating the global so that if an AMD module wants\n\t// to call noConflict to hide this version of jQuery, it will work.\n\n\t// Note that for maximum portability, libraries that are not jQuery should\n\t// declare themselves as anonymous modules, and avoid setting a global if an\n\t// AMD loader is present. jQuery is a special case. For more information, see\n\t// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon\n\n\tif (typeof define === \"function\" && define.amd) {\n\t\tdefine(\"jquery\", [], function () {\n\t\t\treturn jQuery;\n\t\t});\n\t}\n\n\n\n\n\tvar\n\n\t\t// Map over jQuery in case of overwrite\n\t\t_jQuery = window.jQuery,\n\n\t\t// Map over the $ in case of overwrite\n\t\t_$ = window.$;\n\n\tjQuery.noConflict = function (deep) {\n\t\tif (window.$ === jQuery) {\n\t\t\twindow.$ = _$;\n\t\t}\n\n\t\tif (deep && window.jQuery === jQuery) {\n\t\t\twindow.jQuery = _jQuery;\n\t\t}\n\n\t\treturn jQuery;\n\t};\n\n\t// Expose jQuery and $ identifiers, even in AMD\n\t// (trac-7102#comment:10, https://github.com/jquery/jquery/pull/557)\n\t// and CommonJS for browser emulators (trac-13566)\n\tif (typeof noGlobal === \"undefined\") {\n\t\twindow.jQuery = window.$ = jQuery;\n\t}\n\n\n\n\n\treturn jQuery;\n});"
  },
  {
    "path": "src/sourceDev.WebApp/SharedThemes/journal/Shared/_Layout.cshtml",
    "content": "﻿@inject ISiteContextResolver siteResolver\n@inject ICoreThemeHelper themeHelper\n@{\n    var themeSettings = themeHelper.GetThemeSettings();\n    @*\n        These settings can be set by a main view to show additional columns.\n        Views that push content into the optional sections SideNav, AsidePrimary, and AsideSecondary\n        are obligated to set the needed viewtate property to true to show the section,\n        otherwise an error will occur.\n        The sideNav column also supports a toggle so it can be hidden and toggled visible even though it renders.\n    *@\n    bool sideNavVisible = true.Equals(ViewData[\"SideNavVisible\"]);\n    string sideNavToggleClass = ViewData[\"SideNavToggle\"]?.ToString() ?? \"collapse\";\n    bool asidePrimaryVisible = true.Equals(ViewData[\"AsidePrimaryVisible\"]);\n    bool asideSecondaryVisible = true.Equals(ViewData[\"AsideSecondaryVisible\"]);\n    var Tenant = await siteResolver.ResolveSite(Context.Request.Host.Host, Context.Request.Path);\n    var siteRoot = \"\";\n    if (!string.IsNullOrWhiteSpace(Tenant.SiteFolderName)) { siteRoot = \"/\" + Tenant.SiteFolderName; }\n    \n}\n<!DOCTYPE html>\n<html lang=\"@CultureInfo.CurrentUICulture.Name\">\n<head>\n    <meta charset=\"utf-8\" />\n    <title>@ViewData[\"Title\"] - @(Tenant?.SiteName ?? \"Sample\")</title>\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1, shrink-to-fit=no\">\n    @RenderSection(\"Meta\", required: false)\n    <environment names=\"Development\">\n        <link rel=\"stylesheet\" href=\"~/css/bootstrap.css\" cs-resolve-theme-resource=\"true\" cs-shared-theme=\"true\" cs-tenant=\"@Tenant\" />\n        <link rel=\"stylesheet\" href=\"~/css/fontawesome-all.min.css\" cs-resolve-theme-resource=\"true\" cs-shared-theme=\"true\" cs-tenant=\"@Tenant\" />\n        <link rel=\"stylesheet\" href=\"~/css/site.css\" cs-resolve-theme-resource=\"true\" cs-shared-theme=\"true\" cs-tenant=\"@Tenant\" asp-append-version=\"true\" />\n    </environment>\n    <environment names=\"Staging,Production\">\n        <link rel=\"stylesheet\" href=\"~/css/bootstrap.min.css\" cs-resolve-theme-resource=\"true\" cs-shared-theme=\"true\" cs-tenant=\"@Tenant\" />\n        <link rel=\"stylesheet\" href=\"~/css/fontawesome-all.min.css\" cs-resolve-theme-resource=\"true\" cs-shared-theme=\"true\" cs-tenant=\"@Tenant\" />\n        <link rel=\"stylesheet\" href=\"~/css/site.min.css\" cs-resolve-theme-resource=\"true\" cs-shared-theme=\"true\" cs-tenant=\"@Tenant\" asp-append-version=\"true\" />\n    </environment>\n    @RenderSection(\"Styles\", required: false)    \n    \n    <google-analytics profile-id=\"@Tenant.GoogleAnalyticsProfileId\" user-id=\"@User.GetUserId()\"></google-analytics>\n    <base href=\"@Context.Request.Path\" />\n</head>\n<body class=\"d-flex flex-column @ViewData[\"BodyClass\"]\">\n    <header class=\"bg-white\">\n        <a id=\"skippy\" class=\"visually-hidden visually-hidden-focusable\" href=\"#content\">\n            <div class=\"container\">\n                <span class=\"skiplink-text\">Skip to main content</span>\n            </div>\n        </a>\n        <div class=\"fixed-top container-fluid brand-header bg-white\">\n            <div class=\"d-flex align-items-center bg-white\">\n                @if (!string.IsNullOrWhiteSpace(Tenant.LogoUrl))\n                {\n                    <div>\n                         <partial name=\"SiteLogoPartial\" model=\"@Tenant\" />\n                    </div>\n                }\n                @if (Tenant.ShowSiteNameLink)\n                {\n                    <div class=\"align-self-center pt-4 pt-sm-0\">\n                         <partial name=\"SiteTitlePartial\" model=\"@Tenant\" />\n                    </div>\n                }\n                @if (!string.IsNullOrWhiteSpace(Tenant.HeaderContent))\n                {\n                    <div class=\"flex-fill align-self-center pt-3 d-none d-sm-block\">\n                        <partial name=\"SiteHeaderPartial\" />\n                    </div>\n                }\n            </div>\n        </div>\n        <nav class=\"navbar navbar-expand-md navbar-dark fixed-top bg-dark pt-0 pb-0\">\n            <button class=\"navbar-toggler\" type=\"button\" data-bs-toggle=\"collapse\" data-bs-target=\"#navbarNavDropdown\" aria-controls=\"navbarNavDropdown\" aria-expanded=\"false\" aria-label=\"Toggle navigation\">\n                <span class=\"navbar-toggler-icon\"></span>\n            </button>\n\n            <div class=\"collapse navbar-collapse bg-dark ps-2\" id=\"navbarNavDropdown\">\n                @await Component.InvokeAsync(\"Navigation\", new { viewName = \"Bootstrap5TopNavWithDropdowns\", filterName = NamedNavigationFilters.TopNav, startingNodeKey = \"\" })\n                <partial name=\"_LoginPartialWithDropdowns\" />\n            </div>\n        </nav>\n    </header>\n    <div id=\"wrapper\" class=\"container-fluid cs-container flex-fill\">\n        @await Component.InvokeAsync(\"Navigation\", new { viewName = \"Bootstrap5Breadcrumbs\", filterName = NamedNavigationFilters.Breadcrumbs, startingNodeKey = \"\" })\n        <div class=\"row\">\n            <main id=\"content\" class=\"col order-3\">\n                <partial name=\"AlertsPartial\" />\n                <partial name=\"_CookieConsentPartial\" />\n                <partial name=\"_AutoLogoutWarningPartial\" />\n                @RenderBody()\n            </main>\n            @if (sideNavVisible)\n            {\n                <nav id=\"sidenavmenu\" class=\" col col-3 order-1 @sideNavToggleClass\">\n                    @RenderSection(\"SideNav\", required: false)\n                </nav>\n\n            }\n            @if (asideSecondaryVisible)\n            {\n                <aside id=\"asideSecondary\" class=\"col col-1 order-2\">\n                    @RenderSection(\"AsideSecondary\", required: false)\n                </aside>\n\n            }\n            @if (asidePrimaryVisible)\n            {\n                <aside id=\"asidePrimary\" class=\"col-12 col-md-3 col-sm-12  col-sm-12 order-4\">\n                    @RenderSection(\"AsidePrimary\", required: false)\n                </aside>\n\n            }\n        </div>\n    </div>\n    <footer class=\"sticky-bottom border pt-2 h-100\">\n        <div class=\"w-100 text-center\">\n            <partial name=\"SiteFooterPartial\" />\n        </div>\n        <div class=\"d-flex flex-wrap flex-grow justify-content-center\">\n            <div class=\"p-2\">\n            <ul class=\"list-unstyled d-md-flex flex-wrap\">\n                @if (Tenant != null && !string.IsNullOrWhiteSpace(Tenant.PrivacyPolicy))\n                {\n                    <li class=\"ps-sm-2 me-sm-2\">\n                        <a asp-controller=\"Privacy\" asp-action=\"Index\">Privacy Policy</a>\n                    </li>\n                }\n                <li class=\"ps-sm-2 me-sm-2\">\n                    @* you are free to remove the powered by cloudscribe link but we appreciate it if you choose to keep it! *@\n                    <a class=\"text-nowrap\" target=\"_blank\" href=\"https://www.cloudscribe.com/?utm_source=@Context.Request.Host.Value&amp;utm_medium=referral&amp;utm_campaign=poweredbycloudscribe\">Powered by cloudscribe</a>\n                </li>\n            </ul>\n        </div>\n        <div class=\"ps-sm-2  text-center w-100\"><span class=\"text-nowrap\">Copyright &copy; @DateTime.Now.Year</span><span class=\"d-none d-sm-inline\"> - </span><span> @(Tenant?.SiteName ?? \"Sample\")</span></div>\n        <partial name=\"_CookieConsentRevokePartial\" />\n        </div>\n    </footer>\n    @RenderSection(\"Toolbar\", required: false)\n    <environment names=\"Development\">\n        <script src=\"~/js/jquery.js\" cs-resolve-theme-resource=\"true\" cs-shared-theme=\"true\" cs-tenant=\"@Tenant\"></script>\n        <script src=\"~/js/bootstrap.bundle.js\" cs-resolve-theme-resource=\"true\" cs-shared-theme=\"true\" cs-tenant=\"@Tenant\"></script>\n        <script src=\"~/cr/js/bs4.smartmenus.min.js\"></script>\n    </environment>\n    <environment names=\"Staging,Production\">\n        <script src=\"~/js/jquery.min.js\" cs-resolve-theme-resource=\"true\" cs-shared-theme=\"true\" cs-tenant=\"@Tenant\"></script>\n        <script src=\"~/js/bootstrap.bundle.min.js\" cs-resolve-theme-resource=\"true\" cs-shared-theme=\"true\" cs-tenant=\"@Tenant\"></script>\n        <script src=\"~/cr/js/bs4.smartmenus.min.js\"></script>\n    </environment>\n    @RenderSection(\"Bottom\", required: false)\n    @RenderSection(\"Scripts\", required: false)     \n    @Html.RenderResources(\"js\") @*render any js resources declared via helpers in partial views etc*@\n    <add-this profile-id=\"@Tenant.AddThisDotComUsername\" async></add-this>\n</body>\n</html>\n"
  },
  {
    "path": "src/sourceDev.WebApp/SharedThemes/journal/wwwroot/css/_bootswatch.scss",
    "content": "// Journal 5.1.3\n// Bootswatch\n\n\n// Variables\n\n$web-font-path: \"https://fonts.googleapis.com/css2?family=News+Cycle:wght@400;700&display=swap\" !default;\n@if $web-font-path {\n  @import url($web-font-path);\n}\n\n// Navbar\n\n.bg-dark {\n  background-color: $black !important;\n}\n\n.bg-light {\n  background-color: $white !important;\n  color: $black;\n  border: 1px solid $gray-200;\n\n  &.navbar-fixed-top {\n    border-width: 0 0 1px;\n  }\n\n  &.navbar-fixed-bottom {\n    border-width: 1px 0 0;\n  }\n}\n\n.navbar {\n  font-size: 18px;\n  font-family: $headings-font-family;\n  font-weight: $headings-font-weight;\n}\n\n.navbar-brand {\n  padding-top: .5rem;\n  font-size: inherit;\n  font-weight: $headings-font-weight;\n  text-transform: uppercase;\n}\n\n// Buttons\n\n.btn {\n  font-family: $headings-font-family;\n  font-weight: $headings-font-weight;\n\n  &-secondary,\n  &-warning {\n    color: $white;\n  }\n}\n\n// Navs\n\n.pagination {\n  a:hover {\n    text-decoration: none;\n  }\n}\n"
  },
  {
    "path": "src/sourceDev.WebApp/SharedThemes/journal/wwwroot/css/_variables.scss",
    "content": "// Journal 5.1.3\n// Bootswatch\n\n$theme: \"journal\" !default;\n\n//\n// Color system\n//\n\n$white:    #fff !default;\n$gray-100: #f8f9fa !default;\n$gray-200: #eee !default;\n$gray-300: #dee2e6 !default;\n$gray-400: #ced4da !default;\n$gray-500: #aaa !default;\n$gray-600: #777 !default;\n$gray-700: #495057 !default;\n$gray-800: #333 !default;\n$gray-900: #222 !default;\n$black:    #000 !default;\n\n$blue:    #eb6864 !default;\n$indigo:  #6610f2 !default;\n$purple:  #6f42c1 !default;\n$pink:    #e83e8c !default;\n$red:     #f57a00 !default;\n$orange:  #fd7e14 !default;\n$yellow:  #f5e625 !default;\n$green:   #22b24c !default;\n$teal:    #20c997 !default;\n$cyan:    #369 !default;\n\n$primary:       $blue !default;\n$secondary:     $gray-500 !default;\n$success:       $green !default;\n$info:          $cyan !default;\n$warning:       $yellow !default;\n$danger:        $red !default;\n$light:         $gray-100 !default;\n$dark:          $gray-900 !default;\n\n$min-contrast-ratio:   1.28 !default;\n\n// Fonts\n\n$headings-font-family:   \"News Cycle\", \"Arial Narrow Bold\", sans-serif !default;\n$headings-font-weight:    700 !default;\n$headings-line-height:    1.1 !default;\n\n// Buttons\n\n$input-btn-padding-x:         1rem !default;\n\n// Navbar\n\n$navbar-light-color:                rgba($black, .7) !default;\n$navbar-light-hover-color:          $black !default;\n$navbar-light-active-color:         $black !default;\n\n// Pagination\n\n$pagination-hover-color:            $white !default;\n$pagination-hover-bg:               $primary !default;\n$pagination-hover-border-color:     $primary !default;\n"
  },
  {
    "path": "src/sourceDev.WebApp/SharedThemes/journal/wwwroot/css/bootstrap.css",
    "content": "/*!\n * Bootswatch v5.1.3\n * Homepage: https://bootswatch.com\n * Copyright 2012-2021 Thomas Park\n * Licensed under MIT\n * Based on Bootstrap\n*/\n/*!\n * Bootstrap v5.1.3 (https://getbootstrap.com/)\n * Copyright 2011-2021 The Bootstrap Authors\n * Copyright 2011-2021 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n@import url(\"https://fonts.googleapis.com/css2?family=News+Cycle:wght@400;700&display=swap\");\n:root {\n  --bs-blue: #eb6864;\n  --bs-indigo: #6610f2;\n  --bs-purple: #6f42c1;\n  --bs-pink: #e83e8c;\n  --bs-red: #f57a00;\n  --bs-orange: #fd7e14;\n  --bs-yellow: #f5e625;\n  --bs-green: #22b24c;\n  --bs-teal: #20c997;\n  --bs-cyan: #369;\n  --bs-white: #fff;\n  --bs-gray: #777;\n  --bs-gray-dark: #333;\n  --bs-gray-100: #f8f9fa;\n  --bs-gray-200: #eee;\n  --bs-gray-300: #dee2e6;\n  --bs-gray-400: #ced4da;\n  --bs-gray-500: #aaa;\n  --bs-gray-600: #777;\n  --bs-gray-700: #495057;\n  --bs-gray-800: #333;\n  --bs-gray-900: #222;\n  --bs-primary: #eb6864;\n  --bs-secondary: #aaa;\n  --bs-success: #22b24c;\n  --bs-info: #369;\n  --bs-warning: #f5e625;\n  --bs-danger: #f57a00;\n  --bs-light: #f8f9fa;\n  --bs-dark: #222;\n  --bs-primary-rgb: 235, 104, 100;\n  --bs-secondary-rgb: 170, 170, 170;\n  --bs-success-rgb: 34, 178, 76;\n  --bs-info-rgb: 51, 102, 153;\n  --bs-warning-rgb: 245, 230, 37;\n  --bs-danger-rgb: 245, 122, 0;\n  --bs-light-rgb: 248, 249, 250;\n  --bs-dark-rgb: 34, 34, 34;\n  --bs-white-rgb: 255, 255, 255;\n  --bs-black-rgb: 0, 0, 0;\n  --bs-body-color-rgb: 34, 34, 34;\n  --bs-body-bg-rgb: 255, 255, 255;\n  --bs-font-sans-serif: system-ui, -apple-system, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, \"Noto Sans\", \"Liberation Sans\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n  --bs-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n  --bs-gradient: linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));\n  --bs-body-font-family: var(--bs-font-sans-serif);\n  --bs-body-font-size: 1rem;\n  --bs-body-font-weight: 400;\n  --bs-body-line-height: 1.5;\n  --bs-body-color: #222;\n  --bs-body-bg: #fff;\n}\n\n*,\n*::before,\n*::after {\n  box-sizing: border-box;\n}\n\n@media (prefers-reduced-motion: no-preference) {\n  :root {\n    scroll-behavior: smooth;\n  }\n}\n\nbody {\n  margin: 0;\n  font-family: var(--bs-body-font-family);\n  font-size: var(--bs-body-font-size);\n  font-weight: var(--bs-body-font-weight);\n  line-height: var(--bs-body-line-height);\n  color: var(--bs-body-color);\n  text-align: var(--bs-body-text-align);\n  background-color: var(--bs-body-bg);\n  -webkit-text-size-adjust: 100%;\n  -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\n\nhr {\n  margin: 1rem 0;\n  color: inherit;\n  background-color: currentColor;\n  border: 0;\n  opacity: 0.25;\n}\n\nhr:not([size]) {\n  height: 1px;\n}\n\nh1, .h1, h2, .h2, h3, .h3, h4, .h4, h5, .h5, h6, .h6 {\n  margin-top: 0;\n  margin-bottom: 0.5rem;\n  font-family: \"News Cycle\", \"Arial Narrow Bold\", sans-serif;\n  font-weight: 700;\n  line-height: 1.1;\n}\n\nh1, .h1 {\n  font-size: calc(1.375rem + 1.5vw);\n}\n\n@media (min-width: 1200px) {\n  h1, .h1 {\n    font-size: 2.5rem;\n  }\n}\n\nh2, .h2 {\n  font-size: calc(1.325rem + 0.9vw);\n}\n\n@media (min-width: 1200px) {\n  h2, .h2 {\n    font-size: 2rem;\n  }\n}\n\nh3, .h3 {\n  font-size: calc(1.3rem + 0.6vw);\n}\n\n@media (min-width: 1200px) {\n  h3, .h3 {\n    font-size: 1.75rem;\n  }\n}\n\nh4, .h4 {\n  font-size: calc(1.275rem + 0.3vw);\n}\n\n@media (min-width: 1200px) {\n  h4, .h4 {\n    font-size: 1.5rem;\n  }\n}\n\nh5, .h5 {\n  font-size: 1.25rem;\n}\n\nh6, .h6 {\n  font-size: 1rem;\n}\n\np {\n  margin-top: 0;\n  margin-bottom: 1rem;\n}\n\nabbr[title],\nabbr[data-bs-original-title] {\n  -webkit-text-decoration: underline dotted;\n  text-decoration: underline dotted;\n  cursor: help;\n  -webkit-text-decoration-skip-ink: none;\n  text-decoration-skip-ink: none;\n}\n\naddress {\n  margin-bottom: 1rem;\n  font-style: normal;\n  line-height: inherit;\n}\n\nol,\nul {\n  padding-left: 2rem;\n}\n\nol,\nul,\ndl {\n  margin-top: 0;\n  margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n  margin-bottom: 0;\n}\n\ndt {\n  font-weight: 700;\n}\n\ndd {\n  margin-bottom: .5rem;\n  margin-left: 0;\n}\n\nblockquote {\n  margin: 0 0 1rem;\n}\n\nb,\nstrong {\n  font-weight: bolder;\n}\n\nsmall, .small {\n  font-size: 0.875em;\n}\n\nmark, .mark {\n  padding: 0.2em;\n  background-color: #fcf8e3;\n}\n\nsub,\nsup {\n  position: relative;\n  font-size: 0.75em;\n  line-height: 0;\n  vertical-align: baseline;\n}\n\nsub {\n  bottom: -.25em;\n}\n\nsup {\n  top: -.5em;\n}\n\na {\n  color: #eb6864;\n  text-decoration: underline;\n}\n\na:hover {\n  color: #bc5350;\n}\n\na:not([href]):not([class]), a:not([href]):not([class]):hover {\n  color: inherit;\n  text-decoration: none;\n}\n\npre,\ncode,\nkbd,\nsamp {\n  font-family: var(--bs-font-monospace);\n  font-size: 1em;\n  direction: ltr /* rtl:ignore */;\n  unicode-bidi: bidi-override;\n}\n\npre {\n  display: block;\n  margin-top: 0;\n  margin-bottom: 1rem;\n  overflow: auto;\n  font-size: 0.875em;\n}\n\npre code {\n  font-size: inherit;\n  color: inherit;\n  word-break: normal;\n}\n\ncode {\n  font-size: 0.875em;\n  color: #e83e8c;\n  word-wrap: break-word;\n}\n\na > code {\n  color: inherit;\n}\n\nkbd {\n  padding: 0.2rem 0.4rem;\n  font-size: 0.875em;\n  color: #fff;\n  background-color: #222;\n  border-radius: 0.2rem;\n}\n\nkbd kbd {\n  padding: 0;\n  font-size: 1em;\n  font-weight: 700;\n}\n\nfigure {\n  margin: 0 0 1rem;\n}\n\nimg,\nsvg {\n  vertical-align: middle;\n}\n\ntable {\n  caption-side: bottom;\n  border-collapse: collapse;\n}\n\ncaption {\n  padding-top: 0.5rem;\n  padding-bottom: 0.5rem;\n  color: #777;\n  text-align: left;\n}\n\nth {\n  text-align: inherit;\n  text-align: -webkit-match-parent;\n}\n\nthead,\ntbody,\ntfoot,\ntr,\ntd,\nth {\n  border-color: inherit;\n  border-style: solid;\n  border-width: 0;\n}\n\nlabel {\n  display: inline-block;\n}\n\nbutton {\n  border-radius: 0;\n}\n\nbutton:focus:not(:focus-visible) {\n  outline: 0;\n}\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n  margin: 0;\n  font-family: inherit;\n  font-size: inherit;\n  line-height: inherit;\n}\n\nbutton,\nselect {\n  text-transform: none;\n}\n\n[role=\"button\"] {\n  cursor: pointer;\n}\n\nselect {\n  word-wrap: normal;\n}\n\nselect:disabled {\n  opacity: 1;\n}\n\n[list]::-webkit-calendar-picker-indicator {\n  display: none;\n}\n\nbutton,\n[type=\"button\"],\n[type=\"reset\"],\n[type=\"submit\"] {\n  -webkit-appearance: button;\n}\n\nbutton:not(:disabled),\n[type=\"button\"]:not(:disabled),\n[type=\"reset\"]:not(:disabled),\n[type=\"submit\"]:not(:disabled) {\n  cursor: pointer;\n}\n\n::-moz-focus-inner {\n  padding: 0;\n  border-style: none;\n}\n\ntextarea {\n  resize: vertical;\n}\n\nfieldset {\n  min-width: 0;\n  padding: 0;\n  margin: 0;\n  border: 0;\n}\n\nlegend {\n  float: left;\n  width: 100%;\n  padding: 0;\n  margin-bottom: 0.5rem;\n  font-size: calc(1.275rem + 0.3vw);\n  line-height: inherit;\n}\n\n@media (min-width: 1200px) {\n  legend {\n    font-size: 1.5rem;\n  }\n}\n\nlegend + * {\n  clear: left;\n}\n\n::-webkit-datetime-edit-fields-wrapper,\n::-webkit-datetime-edit-text,\n::-webkit-datetime-edit-minute,\n::-webkit-datetime-edit-hour-field,\n::-webkit-datetime-edit-day-field,\n::-webkit-datetime-edit-month-field,\n::-webkit-datetime-edit-year-field {\n  padding: 0;\n}\n\n::-webkit-inner-spin-button {\n  height: auto;\n}\n\n[type=\"search\"] {\n  outline-offset: -2px;\n  -webkit-appearance: textfield;\n}\n\n/* rtl:raw:\n[type=\"tel\"],\n[type=\"url\"],\n[type=\"email\"],\n[type=\"number\"] {\n  direction: ltr;\n}\n*/\n::-webkit-search-decoration {\n  -webkit-appearance: none;\n}\n\n::-webkit-color-swatch-wrapper {\n  padding: 0;\n}\n\n::file-selector-button {\n  font: inherit;\n}\n\n::-webkit-file-upload-button {\n  font: inherit;\n  -webkit-appearance: button;\n}\n\noutput {\n  display: inline-block;\n}\n\niframe {\n  border: 0;\n}\n\nsummary {\n  display: list-item;\n  cursor: pointer;\n}\n\nprogress {\n  vertical-align: baseline;\n}\n\n[hidden] {\n  display: none !important;\n}\n\n.lead {\n  font-size: 1.25rem;\n  font-weight: 300;\n}\n\n.display-1 {\n  font-size: calc(1.625rem + 4.5vw);\n  font-weight: 300;\n  line-height: 1.1;\n}\n\n@media (min-width: 1200px) {\n  .display-1 {\n    font-size: 5rem;\n  }\n}\n\n.display-2 {\n  font-size: calc(1.575rem + 3.9vw);\n  font-weight: 300;\n  line-height: 1.1;\n}\n\n@media (min-width: 1200px) {\n  .display-2 {\n    font-size: 4.5rem;\n  }\n}\n\n.display-3 {\n  font-size: calc(1.525rem + 3.3vw);\n  font-weight: 300;\n  line-height: 1.1;\n}\n\n@media (min-width: 1200px) {\n  .display-3 {\n    font-size: 4rem;\n  }\n}\n\n.display-4 {\n  font-size: calc(1.475rem + 2.7vw);\n  font-weight: 300;\n  line-height: 1.1;\n}\n\n@media (min-width: 1200px) {\n  .display-4 {\n    font-size: 3.5rem;\n  }\n}\n\n.display-5 {\n  font-size: calc(1.425rem + 2.1vw);\n  font-weight: 300;\n  line-height: 1.1;\n}\n\n@media (min-width: 1200px) {\n  .display-5 {\n    font-size: 3rem;\n  }\n}\n\n.display-6 {\n  font-size: calc(1.375rem + 1.5vw);\n  font-weight: 300;\n  line-height: 1.1;\n}\n\n@media (min-width: 1200px) {\n  .display-6 {\n    font-size: 2.5rem;\n  }\n}\n\n.list-unstyled {\n  padding-left: 0;\n  list-style: none;\n}\n\n.list-inline {\n  padding-left: 0;\n  list-style: none;\n}\n\n.list-inline-item {\n  display: inline-block;\n}\n\n.list-inline-item:not(:last-child) {\n  margin-right: 0.5rem;\n}\n\n.initialism {\n  font-size: 0.875em;\n  text-transform: uppercase;\n}\n\n.blockquote {\n  margin-bottom: 1rem;\n  font-size: 1.25rem;\n}\n\n.blockquote > :last-child {\n  margin-bottom: 0;\n}\n\n.blockquote-footer {\n  margin-top: -1rem;\n  margin-bottom: 1rem;\n  font-size: 0.875em;\n  color: #777;\n}\n\n.blockquote-footer::before {\n  content: \"\\2014\\00A0\";\n}\n\n.img-fluid {\n  max-width: 100%;\n  height: auto;\n}\n\n.img-thumbnail {\n  padding: 0.25rem;\n  background-color: #fff;\n  border: 1px solid #dee2e6;\n  border-radius: 0.25rem;\n  max-width: 100%;\n  height: auto;\n}\n\n.figure {\n  display: inline-block;\n}\n\n.figure-img {\n  margin-bottom: 0.5rem;\n  line-height: 1;\n}\n\n.figure-caption {\n  font-size: 0.875em;\n  color: #777;\n}\n\n.container,\n.container-fluid,\n.container-sm,\n.container-md,\n.container-lg,\n.container-xl,\n.container-xxl {\n  width: 100%;\n  padding-right: var(--bs-gutter-x, 0.75rem);\n  padding-left: var(--bs-gutter-x, 0.75rem);\n  margin-right: auto;\n  margin-left: auto;\n}\n\n@media (min-width: 576px) {\n  .container, .container-sm {\n    max-width: 540px;\n  }\n}\n\n@media (min-width: 768px) {\n  .container, .container-sm, .container-md {\n    max-width: 720px;\n  }\n}\n\n@media (min-width: 992px) {\n  .container, .container-sm, .container-md, .container-lg {\n    max-width: 960px;\n  }\n}\n\n@media (min-width: 1200px) {\n  .container, .container-sm, .container-md, .container-lg, .container-xl {\n    max-width: 1140px;\n  }\n}\n\n@media (min-width: 1400px) {\n  .container, .container-sm, .container-md, .container-lg, .container-xl, .container-xxl {\n    max-width: 1320px;\n  }\n}\n\n.row {\n  --bs-gutter-x: 1.5rem;\n  --bs-gutter-y: 0;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n  flex-wrap: wrap;\n  margin-top: calc(-1 * var(--bs-gutter-y));\n  margin-right: calc(-.5 * var(--bs-gutter-x));\n  margin-left: calc(-.5 * var(--bs-gutter-x));\n}\n\n.row > * {\n  -ms-flex-negative: 0;\n  flex-shrink: 0;\n  width: 100%;\n  max-width: 100%;\n  padding-right: calc(var(--bs-gutter-x) * .5);\n  padding-left: calc(var(--bs-gutter-x) * .5);\n  margin-top: var(--bs-gutter-y);\n}\n\n.col {\n  -ms-flex: 1 0 0%;\n  flex: 1 0 0%;\n}\n\n.row-cols-auto > * {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: auto;\n}\n\n.row-cols-1 > * {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 100%;\n}\n\n.row-cols-2 > * {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 50%;\n}\n\n.row-cols-3 > * {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 33.333333%;\n}\n\n.row-cols-4 > * {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 25%;\n}\n\n.row-cols-5 > * {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 20%;\n}\n\n.row-cols-6 > * {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 16.666667%;\n}\n\n.col-auto {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: auto;\n}\n\n.col-1 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 8.333333%;\n}\n\n.col-2 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 16.666667%;\n}\n\n.col-3 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 25%;\n}\n\n.col-4 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 33.333333%;\n}\n\n.col-5 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 41.666667%;\n}\n\n.col-6 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 50%;\n}\n\n.col-7 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 58.333333%;\n}\n\n.col-8 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 66.666667%;\n}\n\n.col-9 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 75%;\n}\n\n.col-10 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 83.333333%;\n}\n\n.col-11 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 91.666667%;\n}\n\n.col-12 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 100%;\n}\n\n.offset-1 {\n  margin-left: 8.333333%;\n}\n\n.offset-2 {\n  margin-left: 16.666667%;\n}\n\n.offset-3 {\n  margin-left: 25%;\n}\n\n.offset-4 {\n  margin-left: 33.333333%;\n}\n\n.offset-5 {\n  margin-left: 41.666667%;\n}\n\n.offset-6 {\n  margin-left: 50%;\n}\n\n.offset-7 {\n  margin-left: 58.333333%;\n}\n\n.offset-8 {\n  margin-left: 66.666667%;\n}\n\n.offset-9 {\n  margin-left: 75%;\n}\n\n.offset-10 {\n  margin-left: 83.333333%;\n}\n\n.offset-11 {\n  margin-left: 91.666667%;\n}\n\n.g-0,\n.gx-0 {\n  --bs-gutter-x: 0;\n}\n\n.g-0,\n.gy-0 {\n  --bs-gutter-y: 0;\n}\n\n.g-1,\n.gx-1 {\n  --bs-gutter-x: 0.25rem;\n}\n\n.g-1,\n.gy-1 {\n  --bs-gutter-y: 0.25rem;\n}\n\n.g-2,\n.gx-2 {\n  --bs-gutter-x: 0.5rem;\n}\n\n.g-2,\n.gy-2 {\n  --bs-gutter-y: 0.5rem;\n}\n\n.g-3,\n.gx-3 {\n  --bs-gutter-x: 1rem;\n}\n\n.g-3,\n.gy-3 {\n  --bs-gutter-y: 1rem;\n}\n\n.g-4,\n.gx-4 {\n  --bs-gutter-x: 1.5rem;\n}\n\n.g-4,\n.gy-4 {\n  --bs-gutter-y: 1.5rem;\n}\n\n.g-5,\n.gx-5 {\n  --bs-gutter-x: 3rem;\n}\n\n.g-5,\n.gy-5 {\n  --bs-gutter-y: 3rem;\n}\n\n@media (min-width: 576px) {\n  .col-sm {\n    -ms-flex: 1 0 0%;\n    flex: 1 0 0%;\n  }\n  .row-cols-sm-auto > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .row-cols-sm-1 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .row-cols-sm-2 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .row-cols-sm-3 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 33.333333%;\n  }\n  .row-cols-sm-4 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .row-cols-sm-5 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 20%;\n  }\n  .row-cols-sm-6 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 16.666667%;\n  }\n  .col-sm-auto {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .col-sm-1 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 8.333333%;\n  }\n  .col-sm-2 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 16.666667%;\n  }\n  .col-sm-3 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .col-sm-4 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 33.333333%;\n  }\n  .col-sm-5 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 41.666667%;\n  }\n  .col-sm-6 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .col-sm-7 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 58.333333%;\n  }\n  .col-sm-8 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 66.666667%;\n  }\n  .col-sm-9 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 75%;\n  }\n  .col-sm-10 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 83.333333%;\n  }\n  .col-sm-11 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 91.666667%;\n  }\n  .col-sm-12 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .offset-sm-0 {\n    margin-left: 0;\n  }\n  .offset-sm-1 {\n    margin-left: 8.333333%;\n  }\n  .offset-sm-2 {\n    margin-left: 16.666667%;\n  }\n  .offset-sm-3 {\n    margin-left: 25%;\n  }\n  .offset-sm-4 {\n    margin-left: 33.333333%;\n  }\n  .offset-sm-5 {\n    margin-left: 41.666667%;\n  }\n  .offset-sm-6 {\n    margin-left: 50%;\n  }\n  .offset-sm-7 {\n    margin-left: 58.333333%;\n  }\n  .offset-sm-8 {\n    margin-left: 66.666667%;\n  }\n  .offset-sm-9 {\n    margin-left: 75%;\n  }\n  .offset-sm-10 {\n    margin-left: 83.333333%;\n  }\n  .offset-sm-11 {\n    margin-left: 91.666667%;\n  }\n  .g-sm-0,\n  .gx-sm-0 {\n    --bs-gutter-x: 0;\n  }\n  .g-sm-0,\n  .gy-sm-0 {\n    --bs-gutter-y: 0;\n  }\n  .g-sm-1,\n  .gx-sm-1 {\n    --bs-gutter-x: 0.25rem;\n  }\n  .g-sm-1,\n  .gy-sm-1 {\n    --bs-gutter-y: 0.25rem;\n  }\n  .g-sm-2,\n  .gx-sm-2 {\n    --bs-gutter-x: 0.5rem;\n  }\n  .g-sm-2,\n  .gy-sm-2 {\n    --bs-gutter-y: 0.5rem;\n  }\n  .g-sm-3,\n  .gx-sm-3 {\n    --bs-gutter-x: 1rem;\n  }\n  .g-sm-3,\n  .gy-sm-3 {\n    --bs-gutter-y: 1rem;\n  }\n  .g-sm-4,\n  .gx-sm-4 {\n    --bs-gutter-x: 1.5rem;\n  }\n  .g-sm-4,\n  .gy-sm-4 {\n    --bs-gutter-y: 1.5rem;\n  }\n  .g-sm-5,\n  .gx-sm-5 {\n    --bs-gutter-x: 3rem;\n  }\n  .g-sm-5,\n  .gy-sm-5 {\n    --bs-gutter-y: 3rem;\n  }\n}\n\n@media (min-width: 768px) {\n  .col-md {\n    -ms-flex: 1 0 0%;\n    flex: 1 0 0%;\n  }\n  .row-cols-md-auto > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .row-cols-md-1 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .row-cols-md-2 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .row-cols-md-3 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 33.333333%;\n  }\n  .row-cols-md-4 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .row-cols-md-5 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 20%;\n  }\n  .row-cols-md-6 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 16.666667%;\n  }\n  .col-md-auto {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .col-md-1 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 8.333333%;\n  }\n  .col-md-2 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 16.666667%;\n  }\n  .col-md-3 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .col-md-4 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 33.333333%;\n  }\n  .col-md-5 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 41.666667%;\n  }\n  .col-md-6 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .col-md-7 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 58.333333%;\n  }\n  .col-md-8 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 66.666667%;\n  }\n  .col-md-9 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 75%;\n  }\n  .col-md-10 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 83.333333%;\n  }\n  .col-md-11 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 91.666667%;\n  }\n  .col-md-12 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .offset-md-0 {\n    margin-left: 0;\n  }\n  .offset-md-1 {\n    margin-left: 8.333333%;\n  }\n  .offset-md-2 {\n    margin-left: 16.666667%;\n  }\n  .offset-md-3 {\n    margin-left: 25%;\n  }\n  .offset-md-4 {\n    margin-left: 33.333333%;\n  }\n  .offset-md-5 {\n    margin-left: 41.666667%;\n  }\n  .offset-md-6 {\n    margin-left: 50%;\n  }\n  .offset-md-7 {\n    margin-left: 58.333333%;\n  }\n  .offset-md-8 {\n    margin-left: 66.666667%;\n  }\n  .offset-md-9 {\n    margin-left: 75%;\n  }\n  .offset-md-10 {\n    margin-left: 83.333333%;\n  }\n  .offset-md-11 {\n    margin-left: 91.666667%;\n  }\n  .g-md-0,\n  .gx-md-0 {\n    --bs-gutter-x: 0;\n  }\n  .g-md-0,\n  .gy-md-0 {\n    --bs-gutter-y: 0;\n  }\n  .g-md-1,\n  .gx-md-1 {\n    --bs-gutter-x: 0.25rem;\n  }\n  .g-md-1,\n  .gy-md-1 {\n    --bs-gutter-y: 0.25rem;\n  }\n  .g-md-2,\n  .gx-md-2 {\n    --bs-gutter-x: 0.5rem;\n  }\n  .g-md-2,\n  .gy-md-2 {\n    --bs-gutter-y: 0.5rem;\n  }\n  .g-md-3,\n  .gx-md-3 {\n    --bs-gutter-x: 1rem;\n  }\n  .g-md-3,\n  .gy-md-3 {\n    --bs-gutter-y: 1rem;\n  }\n  .g-md-4,\n  .gx-md-4 {\n    --bs-gutter-x: 1.5rem;\n  }\n  .g-md-4,\n  .gy-md-4 {\n    --bs-gutter-y: 1.5rem;\n  }\n  .g-md-5,\n  .gx-md-5 {\n    --bs-gutter-x: 3rem;\n  }\n  .g-md-5,\n  .gy-md-5 {\n    --bs-gutter-y: 3rem;\n  }\n}\n\n@media (min-width: 992px) {\n  .col-lg {\n    -ms-flex: 1 0 0%;\n    flex: 1 0 0%;\n  }\n  .row-cols-lg-auto > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .row-cols-lg-1 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .row-cols-lg-2 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .row-cols-lg-3 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 33.333333%;\n  }\n  .row-cols-lg-4 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .row-cols-lg-5 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 20%;\n  }\n  .row-cols-lg-6 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 16.666667%;\n  }\n  .col-lg-auto {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .col-lg-1 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 8.333333%;\n  }\n  .col-lg-2 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 16.666667%;\n  }\n  .col-lg-3 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .col-lg-4 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 33.333333%;\n  }\n  .col-lg-5 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 41.666667%;\n  }\n  .col-lg-6 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .col-lg-7 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 58.333333%;\n  }\n  .col-lg-8 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 66.666667%;\n  }\n  .col-lg-9 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 75%;\n  }\n  .col-lg-10 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 83.333333%;\n  }\n  .col-lg-11 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 91.666667%;\n  }\n  .col-lg-12 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .offset-lg-0 {\n    margin-left: 0;\n  }\n  .offset-lg-1 {\n    margin-left: 8.333333%;\n  }\n  .offset-lg-2 {\n    margin-left: 16.666667%;\n  }\n  .offset-lg-3 {\n    margin-left: 25%;\n  }\n  .offset-lg-4 {\n    margin-left: 33.333333%;\n  }\n  .offset-lg-5 {\n    margin-left: 41.666667%;\n  }\n  .offset-lg-6 {\n    margin-left: 50%;\n  }\n  .offset-lg-7 {\n    margin-left: 58.333333%;\n  }\n  .offset-lg-8 {\n    margin-left: 66.666667%;\n  }\n  .offset-lg-9 {\n    margin-left: 75%;\n  }\n  .offset-lg-10 {\n    margin-left: 83.333333%;\n  }\n  .offset-lg-11 {\n    margin-left: 91.666667%;\n  }\n  .g-lg-0,\n  .gx-lg-0 {\n    --bs-gutter-x: 0;\n  }\n  .g-lg-0,\n  .gy-lg-0 {\n    --bs-gutter-y: 0;\n  }\n  .g-lg-1,\n  .gx-lg-1 {\n    --bs-gutter-x: 0.25rem;\n  }\n  .g-lg-1,\n  .gy-lg-1 {\n    --bs-gutter-y: 0.25rem;\n  }\n  .g-lg-2,\n  .gx-lg-2 {\n    --bs-gutter-x: 0.5rem;\n  }\n  .g-lg-2,\n  .gy-lg-2 {\n    --bs-gutter-y: 0.5rem;\n  }\n  .g-lg-3,\n  .gx-lg-3 {\n    --bs-gutter-x: 1rem;\n  }\n  .g-lg-3,\n  .gy-lg-3 {\n    --bs-gutter-y: 1rem;\n  }\n  .g-lg-4,\n  .gx-lg-4 {\n    --bs-gutter-x: 1.5rem;\n  }\n  .g-lg-4,\n  .gy-lg-4 {\n    --bs-gutter-y: 1.5rem;\n  }\n  .g-lg-5,\n  .gx-lg-5 {\n    --bs-gutter-x: 3rem;\n  }\n  .g-lg-5,\n  .gy-lg-5 {\n    --bs-gutter-y: 3rem;\n  }\n}\n\n@media (min-width: 1200px) {\n  .col-xl {\n    -ms-flex: 1 0 0%;\n    flex: 1 0 0%;\n  }\n  .row-cols-xl-auto > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .row-cols-xl-1 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .row-cols-xl-2 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .row-cols-xl-3 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 33.333333%;\n  }\n  .row-cols-xl-4 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .row-cols-xl-5 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 20%;\n  }\n  .row-cols-xl-6 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 16.666667%;\n  }\n  .col-xl-auto {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .col-xl-1 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 8.333333%;\n  }\n  .col-xl-2 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 16.666667%;\n  }\n  .col-xl-3 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .col-xl-4 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 33.333333%;\n  }\n  .col-xl-5 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 41.666667%;\n  }\n  .col-xl-6 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .col-xl-7 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 58.333333%;\n  }\n  .col-xl-8 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 66.666667%;\n  }\n  .col-xl-9 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 75%;\n  }\n  .col-xl-10 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 83.333333%;\n  }\n  .col-xl-11 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 91.666667%;\n  }\n  .col-xl-12 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .offset-xl-0 {\n    margin-left: 0;\n  }\n  .offset-xl-1 {\n    margin-left: 8.333333%;\n  }\n  .offset-xl-2 {\n    margin-left: 16.666667%;\n  }\n  .offset-xl-3 {\n    margin-left: 25%;\n  }\n  .offset-xl-4 {\n    margin-left: 33.333333%;\n  }\n  .offset-xl-5 {\n    margin-left: 41.666667%;\n  }\n  .offset-xl-6 {\n    margin-left: 50%;\n  }\n  .offset-xl-7 {\n    margin-left: 58.333333%;\n  }\n  .offset-xl-8 {\n    margin-left: 66.666667%;\n  }\n  .offset-xl-9 {\n    margin-left: 75%;\n  }\n  .offset-xl-10 {\n    margin-left: 83.333333%;\n  }\n  .offset-xl-11 {\n    margin-left: 91.666667%;\n  }\n  .g-xl-0,\n  .gx-xl-0 {\n    --bs-gutter-x: 0;\n  }\n  .g-xl-0,\n  .gy-xl-0 {\n    --bs-gutter-y: 0;\n  }\n  .g-xl-1,\n  .gx-xl-1 {\n    --bs-gutter-x: 0.25rem;\n  }\n  .g-xl-1,\n  .gy-xl-1 {\n    --bs-gutter-y: 0.25rem;\n  }\n  .g-xl-2,\n  .gx-xl-2 {\n    --bs-gutter-x: 0.5rem;\n  }\n  .g-xl-2,\n  .gy-xl-2 {\n    --bs-gutter-y: 0.5rem;\n  }\n  .g-xl-3,\n  .gx-xl-3 {\n    --bs-gutter-x: 1rem;\n  }\n  .g-xl-3,\n  .gy-xl-3 {\n    --bs-gutter-y: 1rem;\n  }\n  .g-xl-4,\n  .gx-xl-4 {\n    --bs-gutter-x: 1.5rem;\n  }\n  .g-xl-4,\n  .gy-xl-4 {\n    --bs-gutter-y: 1.5rem;\n  }\n  .g-xl-5,\n  .gx-xl-5 {\n    --bs-gutter-x: 3rem;\n  }\n  .g-xl-5,\n  .gy-xl-5 {\n    --bs-gutter-y: 3rem;\n  }\n}\n\n@media (min-width: 1400px) {\n  .col-xxl {\n    -ms-flex: 1 0 0%;\n    flex: 1 0 0%;\n  }\n  .row-cols-xxl-auto > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .row-cols-xxl-1 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .row-cols-xxl-2 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .row-cols-xxl-3 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 33.333333%;\n  }\n  .row-cols-xxl-4 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .row-cols-xxl-5 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 20%;\n  }\n  .row-cols-xxl-6 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 16.666667%;\n  }\n  .col-xxl-auto {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .col-xxl-1 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 8.333333%;\n  }\n  .col-xxl-2 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 16.666667%;\n  }\n  .col-xxl-3 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .col-xxl-4 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 33.333333%;\n  }\n  .col-xxl-5 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 41.666667%;\n  }\n  .col-xxl-6 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .col-xxl-7 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 58.333333%;\n  }\n  .col-xxl-8 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 66.666667%;\n  }\n  .col-xxl-9 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 75%;\n  }\n  .col-xxl-10 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 83.333333%;\n  }\n  .col-xxl-11 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 91.666667%;\n  }\n  .col-xxl-12 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .offset-xxl-0 {\n    margin-left: 0;\n  }\n  .offset-xxl-1 {\n    margin-left: 8.333333%;\n  }\n  .offset-xxl-2 {\n    margin-left: 16.666667%;\n  }\n  .offset-xxl-3 {\n    margin-left: 25%;\n  }\n  .offset-xxl-4 {\n    margin-left: 33.333333%;\n  }\n  .offset-xxl-5 {\n    margin-left: 41.666667%;\n  }\n  .offset-xxl-6 {\n    margin-left: 50%;\n  }\n  .offset-xxl-7 {\n    margin-left: 58.333333%;\n  }\n  .offset-xxl-8 {\n    margin-left: 66.666667%;\n  }\n  .offset-xxl-9 {\n    margin-left: 75%;\n  }\n  .offset-xxl-10 {\n    margin-left: 83.333333%;\n  }\n  .offset-xxl-11 {\n    margin-left: 91.666667%;\n  }\n  .g-xxl-0,\n  .gx-xxl-0 {\n    --bs-gutter-x: 0;\n  }\n  .g-xxl-0,\n  .gy-xxl-0 {\n    --bs-gutter-y: 0;\n  }\n  .g-xxl-1,\n  .gx-xxl-1 {\n    --bs-gutter-x: 0.25rem;\n  }\n  .g-xxl-1,\n  .gy-xxl-1 {\n    --bs-gutter-y: 0.25rem;\n  }\n  .g-xxl-2,\n  .gx-xxl-2 {\n    --bs-gutter-x: 0.5rem;\n  }\n  .g-xxl-2,\n  .gy-xxl-2 {\n    --bs-gutter-y: 0.5rem;\n  }\n  .g-xxl-3,\n  .gx-xxl-3 {\n    --bs-gutter-x: 1rem;\n  }\n  .g-xxl-3,\n  .gy-xxl-3 {\n    --bs-gutter-y: 1rem;\n  }\n  .g-xxl-4,\n  .gx-xxl-4 {\n    --bs-gutter-x: 1.5rem;\n  }\n  .g-xxl-4,\n  .gy-xxl-4 {\n    --bs-gutter-y: 1.5rem;\n  }\n  .g-xxl-5,\n  .gx-xxl-5 {\n    --bs-gutter-x: 3rem;\n  }\n  .g-xxl-5,\n  .gy-xxl-5 {\n    --bs-gutter-y: 3rem;\n  }\n}\n\n.table {\n  --bs-table-bg: transparent;\n  --bs-table-accent-bg: transparent;\n  --bs-table-striped-color: #222;\n  --bs-table-striped-bg: rgba(0, 0, 0, 0.05);\n  --bs-table-active-color: #222;\n  --bs-table-active-bg: rgba(0, 0, 0, 0.1);\n  --bs-table-hover-color: #222;\n  --bs-table-hover-bg: rgba(0, 0, 0, 0.075);\n  width: 100%;\n  margin-bottom: 1rem;\n  color: #222;\n  vertical-align: top;\n  border-color: #dee2e6;\n}\n\n.table > :not(caption) > * > * {\n  padding: 0.5rem 0.5rem;\n  background-color: var(--bs-table-bg);\n  border-bottom-width: 1px;\n  box-shadow: inset 0 0 0 9999px var(--bs-table-accent-bg);\n}\n\n.table > tbody {\n  vertical-align: inherit;\n}\n\n.table > thead {\n  vertical-align: bottom;\n}\n\n.table > :not(:first-child) {\n  border-top: 2px solid currentColor;\n}\n\n.caption-top {\n  caption-side: top;\n}\n\n.table-sm > :not(caption) > * > * {\n  padding: 0.25rem 0.25rem;\n}\n\n.table-bordered > :not(caption) > * {\n  border-width: 1px 0;\n}\n\n.table-bordered > :not(caption) > * > * {\n  border-width: 0 1px;\n}\n\n.table-borderless > :not(caption) > * > * {\n  border-bottom-width: 0;\n}\n\n.table-borderless > :not(:first-child) {\n  border-top-width: 0;\n}\n\n.table-striped > tbody > tr:nth-of-type(odd) > * {\n  --bs-table-accent-bg: var(--bs-table-striped-bg);\n  color: var(--bs-table-striped-color);\n}\n\n.table-active {\n  --bs-table-accent-bg: var(--bs-table-active-bg);\n  color: var(--bs-table-active-color);\n}\n\n.table-hover > tbody > tr:hover > * {\n  --bs-table-accent-bg: var(--bs-table-hover-bg);\n  color: var(--bs-table-hover-color);\n}\n\n.table-primary {\n  --bs-table-bg: #fbe1e0;\n  --bs-table-striped-bg: #eed6d5;\n  --bs-table-striped-color: #fff;\n  --bs-table-active-bg: #e2cbca;\n  --bs-table-active-color: #fff;\n  --bs-table-hover-bg: #e8d0cf;\n  --bs-table-hover-color: #fff;\n  color: #000;\n  border-color: #e2cbca;\n}\n\n.table-secondary {\n  --bs-table-bg: #eeeeee;\n  --bs-table-striped-bg: #e2e2e2;\n  --bs-table-striped-color: #fff;\n  --bs-table-active-bg: #d6d6d6;\n  --bs-table-active-color: #fff;\n  --bs-table-hover-bg: gainsboro;\n  --bs-table-hover-color: #fff;\n  color: #000;\n  border-color: #d6d6d6;\n}\n\n.table-success {\n  --bs-table-bg: #d3f0db;\n  --bs-table-striped-bg: #c8e4d0;\n  --bs-table-striped-color: #fff;\n  --bs-table-active-bg: #bed8c5;\n  --bs-table-active-color: #fff;\n  --bs-table-hover-bg: #c3decb;\n  --bs-table-hover-color: #fff;\n  color: #000;\n  border-color: #bed8c5;\n}\n\n.table-info {\n  --bs-table-bg: #d6e0eb;\n  --bs-table-striped-bg: #d8e2ec;\n  --bs-table-striped-color: #fff;\n  --bs-table-active-bg: #dae3ed;\n  --bs-table-active-color: #fff;\n  --bs-table-hover-bg: #d9e2ed;\n  --bs-table-hover-color: #fff;\n  color: #fff;\n  border-color: #dae3ed;\n}\n\n.table-warning {\n  --bs-table-bg: #fdfad3;\n  --bs-table-striped-bg: #f0eec8;\n  --bs-table-striped-color: #000;\n  --bs-table-active-bg: #e4e1be;\n  --bs-table-active-color: #fff;\n  --bs-table-hover-bg: #eae7c3;\n  --bs-table-hover-color: #000;\n  color: #000;\n  border-color: #e4e1be;\n}\n\n.table-danger {\n  --bs-table-bg: #fde4cc;\n  --bs-table-striped-bg: #f0d9c2;\n  --bs-table-striped-color: #fff;\n  --bs-table-active-bg: #e4cdb8;\n  --bs-table-active-color: #fff;\n  --bs-table-hover-bg: #ead3bd;\n  --bs-table-hover-color: #fff;\n  color: #000;\n  border-color: #e4cdb8;\n}\n\n.table-light {\n  --bs-table-bg: #f8f9fa;\n  --bs-table-striped-bg: #ecedee;\n  --bs-table-striped-color: #000;\n  --bs-table-active-bg: #dfe0e1;\n  --bs-table-active-color: #fff;\n  --bs-table-hover-bg: #e5e6e7;\n  --bs-table-hover-color: #000;\n  color: #000;\n  border-color: #dfe0e1;\n}\n\n.table-dark {\n  --bs-table-bg: #222;\n  --bs-table-striped-bg: #2d2d2d;\n  --bs-table-striped-color: #fff;\n  --bs-table-active-bg: #383838;\n  --bs-table-active-color: #fff;\n  --bs-table-hover-bg: #333333;\n  --bs-table-hover-color: #fff;\n  color: #fff;\n  border-color: #383838;\n}\n\n.table-responsive {\n  overflow-x: auto;\n  -webkit-overflow-scrolling: touch;\n}\n\n@media (max-width: 575.98px) {\n  .table-responsive-sm {\n    overflow-x: auto;\n    -webkit-overflow-scrolling: touch;\n  }\n}\n\n@media (max-width: 767.98px) {\n  .table-responsive-md {\n    overflow-x: auto;\n    -webkit-overflow-scrolling: touch;\n  }\n}\n\n@media (max-width: 991.98px) {\n  .table-responsive-lg {\n    overflow-x: auto;\n    -webkit-overflow-scrolling: touch;\n  }\n}\n\n@media (max-width: 1199.98px) {\n  .table-responsive-xl {\n    overflow-x: auto;\n    -webkit-overflow-scrolling: touch;\n  }\n}\n\n@media (max-width: 1399.98px) {\n  .table-responsive-xxl {\n    overflow-x: auto;\n    -webkit-overflow-scrolling: touch;\n  }\n}\n\n.form-label {\n  margin-bottom: 0.5rem;\n}\n\n.col-form-label {\n  padding-top: calc(0.375rem + 1px);\n  padding-bottom: calc(0.375rem + 1px);\n  margin-bottom: 0;\n  font-size: inherit;\n  line-height: 1.5;\n}\n\n.col-form-label-lg {\n  padding-top: calc(0.5rem + 1px);\n  padding-bottom: calc(0.5rem + 1px);\n  font-size: 1.25rem;\n}\n\n.col-form-label-sm {\n  padding-top: calc(0.25rem + 1px);\n  padding-bottom: calc(0.25rem + 1px);\n  font-size: 0.875rem;\n}\n\n.form-text {\n  margin-top: 0.25rem;\n  font-size: 0.875em;\n  color: #777;\n}\n\n.form-control {\n  display: block;\n  width: 100%;\n  padding: 0.375rem 1rem;\n  font-size: 1rem;\n  font-weight: 400;\n  line-height: 1.5;\n  color: #222;\n  background-color: #fff;\n  background-clip: padding-box;\n  border: 1px solid #ced4da;\n  -webkit-appearance: none;\n  -moz-appearance: none;\n  appearance: none;\n  border-radius: 0.25rem;\n  transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .form-control {\n    transition: none;\n  }\n}\n\n.form-control[type=\"file\"] {\n  overflow: hidden;\n}\n\n.form-control[type=\"file\"]:not(:disabled):not([readonly]) {\n  cursor: pointer;\n}\n\n.form-control:focus {\n  color: #222;\n  background-color: #fff;\n  border-color: #f5b4b2;\n  outline: 0;\n  box-shadow: 0 0 0 0.25rem rgba(235, 104, 100, 0.25);\n}\n\n.form-control::-webkit-date-and-time-value {\n  height: 1.5em;\n}\n\n.form-control::-webkit-input-placeholder {\n  color: #777;\n  opacity: 1;\n}\n\n.form-control::-moz-placeholder {\n  color: #777;\n  opacity: 1;\n}\n\n.form-control:-ms-input-placeholder {\n  color: #777;\n  opacity: 1;\n}\n\n.form-control::-ms-input-placeholder {\n  color: #777;\n  opacity: 1;\n}\n\n.form-control::placeholder {\n  color: #777;\n  opacity: 1;\n}\n\n.form-control:disabled, .form-control[readonly] {\n  background-color: #eee;\n  opacity: 1;\n}\n\n.form-control::file-selector-button {\n  padding: 0.375rem 1rem;\n  margin: -0.375rem -1rem;\n  -webkit-margin-end: 1rem;\n  -moz-margin-end: 1rem;\n  margin-inline-end: 1rem;\n  color: #222;\n  background-color: #eee;\n  pointer-events: none;\n  border-color: inherit;\n  border-style: solid;\n  border-width: 0;\n  border-inline-end-width: 1px;\n  border-radius: 0;\n  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .form-control::file-selector-button {\n    transition: none;\n  }\n}\n\n.form-control:hover:not(:disabled):not([readonly])::file-selector-button {\n  background-color: #e2e2e2;\n}\n\n.form-control::-webkit-file-upload-button {\n  padding: 0.375rem 1rem;\n  margin: -0.375rem -1rem;\n  -webkit-margin-end: 1rem;\n  margin-inline-end: 1rem;\n  color: #222;\n  background-color: #eee;\n  pointer-events: none;\n  border-color: inherit;\n  border-style: solid;\n  border-width: 0;\n  border-inline-end-width: 1px;\n  border-radius: 0;\n  -webkit-transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .form-control::-webkit-file-upload-button {\n    -webkit-transition: none;\n    transition: none;\n  }\n}\n\n.form-control:hover:not(:disabled):not([readonly])::-webkit-file-upload-button {\n  background-color: #e2e2e2;\n}\n\n.form-control-plaintext {\n  display: block;\n  width: 100%;\n  padding: 0.375rem 0;\n  margin-bottom: 0;\n  line-height: 1.5;\n  color: #222;\n  background-color: transparent;\n  border: solid transparent;\n  border-width: 1px 0;\n}\n\n.form-control-plaintext.form-control-sm, .form-control-plaintext.form-control-lg {\n  padding-right: 0;\n  padding-left: 0;\n}\n\n.form-control-sm {\n  min-height: calc(1.5em + 0.5rem + 2px);\n  padding: 0.25rem 0.5rem;\n  font-size: 0.875rem;\n  border-radius: 0.2rem;\n}\n\n.form-control-sm::file-selector-button {\n  padding: 0.25rem 0.5rem;\n  margin: -0.25rem -0.5rem;\n  -webkit-margin-end: 0.5rem;\n  -moz-margin-end: 0.5rem;\n  margin-inline-end: 0.5rem;\n}\n\n.form-control-sm::-webkit-file-upload-button {\n  padding: 0.25rem 0.5rem;\n  margin: -0.25rem -0.5rem;\n  -webkit-margin-end: 0.5rem;\n  margin-inline-end: 0.5rem;\n}\n\n.form-control-lg {\n  min-height: calc(1.5em + 1rem + 2px);\n  padding: 0.5rem 1rem;\n  font-size: 1.25rem;\n  border-radius: 0.3rem;\n}\n\n.form-control-lg::file-selector-button {\n  padding: 0.5rem 1rem;\n  margin: -0.5rem -1rem;\n  -webkit-margin-end: 1rem;\n  -moz-margin-end: 1rem;\n  margin-inline-end: 1rem;\n}\n\n.form-control-lg::-webkit-file-upload-button {\n  padding: 0.5rem 1rem;\n  margin: -0.5rem -1rem;\n  -webkit-margin-end: 1rem;\n  margin-inline-end: 1rem;\n}\n\ntextarea.form-control {\n  min-height: calc(1.5em + 0.75rem + 2px);\n}\n\ntextarea.form-control-sm {\n  min-height: calc(1.5em + 0.5rem + 2px);\n}\n\ntextarea.form-control-lg {\n  min-height: calc(1.5em + 1rem + 2px);\n}\n\n.form-control-color {\n  width: 3rem;\n  height: auto;\n  padding: 0.375rem;\n}\n\n.form-control-color:not(:disabled):not([readonly]) {\n  cursor: pointer;\n}\n\n.form-control-color::-moz-color-swatch {\n  height: 1.5em;\n  border-radius: 0.25rem;\n}\n\n.form-control-color::-webkit-color-swatch {\n  height: 1.5em;\n  border-radius: 0.25rem;\n}\n\n.form-select {\n  display: block;\n  width: 100%;\n  padding: 0.375rem 3rem 0.375rem 1rem;\n  -moz-padding-start: calc(1rem - 3px);\n  font-size: 1rem;\n  font-weight: 400;\n  line-height: 1.5;\n  color: #222;\n  background-color: #fff;\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23333' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e\");\n  background-repeat: no-repeat;\n  background-position: right 1rem center;\n  background-size: 16px 12px;\n  border: 1px solid #ced4da;\n  border-radius: 0.25rem;\n  transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n  -webkit-appearance: none;\n  -moz-appearance: none;\n  appearance: none;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .form-select {\n    transition: none;\n  }\n}\n\n.form-select:focus {\n  border-color: #f5b4b2;\n  outline: 0;\n  box-shadow: 0 0 0 0.25rem rgba(235, 104, 100, 0.25);\n}\n\n.form-select[multiple], .form-select[size]:not([size=\"1\"]) {\n  padding-right: 1rem;\n  background-image: none;\n}\n\n.form-select:disabled {\n  background-color: #eee;\n}\n\n.form-select:-moz-focusring {\n  color: transparent;\n  text-shadow: 0 0 0 #222;\n}\n\n.form-select-sm {\n  padding-top: 0.25rem;\n  padding-bottom: 0.25rem;\n  padding-left: 0.5rem;\n  font-size: 0.875rem;\n  border-radius: 0.2rem;\n}\n\n.form-select-lg {\n  padding-top: 0.5rem;\n  padding-bottom: 0.5rem;\n  padding-left: 1rem;\n  font-size: 1.25rem;\n  border-radius: 0.3rem;\n}\n\n.form-check {\n  display: block;\n  min-height: 1.5rem;\n  padding-left: 1.5em;\n  margin-bottom: 0.125rem;\n}\n\n.form-check .form-check-input {\n  float: left;\n  margin-left: -1.5em;\n}\n\n.form-check-input {\n  width: 1em;\n  height: 1em;\n  margin-top: 0.25em;\n  vertical-align: top;\n  background-color: #fff;\n  background-repeat: no-repeat;\n  background-position: center;\n  background-size: contain;\n  border: 1px solid rgba(0, 0, 0, 0.25);\n  -webkit-appearance: none;\n  -moz-appearance: none;\n  appearance: none;\n  -webkit-print-color-adjust: exact;\n  color-adjust: exact;\n}\n\n.form-check-input[type=\"checkbox\"] {\n  border-radius: 0.25em;\n}\n\n.form-check-input[type=\"radio\"] {\n  border-radius: 50%;\n}\n\n.form-check-input:active {\n  -webkit-filter: brightness(90%);\n  filter: brightness(90%);\n}\n\n.form-check-input:focus {\n  border-color: #f5b4b2;\n  outline: 0;\n  box-shadow: 0 0 0 0.25rem rgba(235, 104, 100, 0.25);\n}\n\n.form-check-input:checked {\n  background-color: #eb6864;\n  border-color: #eb6864;\n}\n\n.form-check-input:checked[type=\"checkbox\"] {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10l3 3l6-6'/%3e%3c/svg%3e\");\n}\n\n.form-check-input:checked[type=\"radio\"] {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='2' fill='%23fff'/%3e%3c/svg%3e\");\n}\n\n.form-check-input[type=\"checkbox\"]:indeterminate {\n  background-color: #eb6864;\n  border-color: #eb6864;\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10h8'/%3e%3c/svg%3e\");\n}\n\n.form-check-input:disabled {\n  pointer-events: none;\n  -webkit-filter: none;\n  filter: none;\n  opacity: 0.5;\n}\n\n.form-check-input[disabled] ~ .form-check-label, .form-check-input:disabled ~ .form-check-label {\n  opacity: 0.5;\n}\n\n.form-switch {\n  padding-left: 2.5em;\n}\n\n.form-switch .form-check-input {\n  width: 2em;\n  margin-left: -2.5em;\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%280, 0, 0, 0.25%29'/%3e%3c/svg%3e\");\n  background-position: left center;\n  border-radius: 2em;\n  transition: background-position 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .form-switch .form-check-input {\n    transition: none;\n  }\n}\n\n.form-switch .form-check-input:focus {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23f5b4b2'/%3e%3c/svg%3e\");\n}\n\n.form-switch .form-check-input:checked {\n  background-position: right center;\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e\");\n}\n\n.form-check-inline {\n  display: inline-block;\n  margin-right: 1rem;\n}\n\n.btn-check {\n  position: absolute;\n  clip: rect(0, 0, 0, 0);\n  pointer-events: none;\n}\n\n.btn-check[disabled] + .btn, .btn-check:disabled + .btn {\n  pointer-events: none;\n  -webkit-filter: none;\n  filter: none;\n  opacity: 0.65;\n}\n\n.form-range {\n  width: 100%;\n  height: 1.5rem;\n  padding: 0;\n  background-color: transparent;\n  -webkit-appearance: none;\n  -moz-appearance: none;\n  appearance: none;\n}\n\n.form-range:focus {\n  outline: 0;\n}\n\n.form-range:focus::-webkit-slider-thumb {\n  box-shadow: 0 0 0 1px #fff, 0 0 0 0.25rem rgba(235, 104, 100, 0.25);\n}\n\n.form-range:focus::-moz-range-thumb {\n  box-shadow: 0 0 0 1px #fff, 0 0 0 0.25rem rgba(235, 104, 100, 0.25);\n}\n\n.form-range::-moz-focus-outer {\n  border: 0;\n}\n\n.form-range::-webkit-slider-thumb {\n  width: 1rem;\n  height: 1rem;\n  margin-top: -0.25rem;\n  background-color: #eb6864;\n  border: 0;\n  border-radius: 1rem;\n  -webkit-transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n  transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n  -webkit-appearance: none;\n  appearance: none;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .form-range::-webkit-slider-thumb {\n    -webkit-transition: none;\n    transition: none;\n  }\n}\n\n.form-range::-webkit-slider-thumb:active {\n  background-color: #f9d2d1;\n}\n\n.form-range::-webkit-slider-runnable-track {\n  width: 100%;\n  height: 0.5rem;\n  color: transparent;\n  cursor: pointer;\n  background-color: #dee2e6;\n  border-color: transparent;\n  border-radius: 1rem;\n}\n\n.form-range::-moz-range-thumb {\n  width: 1rem;\n  height: 1rem;\n  background-color: #eb6864;\n  border: 0;\n  border-radius: 1rem;\n  -moz-transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n  transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n  -moz-appearance: none;\n  appearance: none;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .form-range::-moz-range-thumb {\n    -moz-transition: none;\n    transition: none;\n  }\n}\n\n.form-range::-moz-range-thumb:active {\n  background-color: #f9d2d1;\n}\n\n.form-range::-moz-range-track {\n  width: 100%;\n  height: 0.5rem;\n  color: transparent;\n  cursor: pointer;\n  background-color: #dee2e6;\n  border-color: transparent;\n  border-radius: 1rem;\n}\n\n.form-range:disabled {\n  pointer-events: none;\n}\n\n.form-range:disabled::-webkit-slider-thumb {\n  background-color: #aaa;\n}\n\n.form-range:disabled::-moz-range-thumb {\n  background-color: #aaa;\n}\n\n.form-floating {\n  position: relative;\n}\n\n.form-floating > .form-control,\n.form-floating > .form-select {\n  height: calc(3.5rem + 2px);\n  line-height: 1.25;\n}\n\n.form-floating > label {\n  position: absolute;\n  top: 0;\n  left: 0;\n  height: 100%;\n  padding: 1rem 1rem;\n  pointer-events: none;\n  border: 1px solid transparent;\n  -webkit-transform-origin: 0 0;\n  transform-origin: 0 0;\n  transition: opacity 0.1s ease-in-out, -webkit-transform 0.1s ease-in-out;\n  transition: opacity 0.1s ease-in-out, transform 0.1s ease-in-out;\n  transition: opacity 0.1s ease-in-out, transform 0.1s ease-in-out, -webkit-transform 0.1s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .form-floating > label {\n    transition: none;\n  }\n}\n\n.form-floating > .form-control {\n  padding: 1rem 1rem;\n}\n\n.form-floating > .form-control::-webkit-input-placeholder {\n  color: transparent;\n}\n\n.form-floating > .form-control::-moz-placeholder {\n  color: transparent;\n}\n\n.form-floating > .form-control:-ms-input-placeholder {\n  color: transparent;\n}\n\n.form-floating > .form-control::-ms-input-placeholder {\n  color: transparent;\n}\n\n.form-floating > .form-control::placeholder {\n  color: transparent;\n}\n\n.form-floating > .form-control:not(:-moz-placeholder-shown) {\n  padding-top: 1.625rem;\n  padding-bottom: 0.625rem;\n}\n\n.form-floating > .form-control:not(:-ms-input-placeholder) {\n  padding-top: 1.625rem;\n  padding-bottom: 0.625rem;\n}\n\n.form-floating > .form-control:focus, .form-floating > .form-control:not(:placeholder-shown) {\n  padding-top: 1.625rem;\n  padding-bottom: 0.625rem;\n}\n\n.form-floating > .form-control:-webkit-autofill {\n  padding-top: 1.625rem;\n  padding-bottom: 0.625rem;\n}\n\n.form-floating > .form-select {\n  padding-top: 1.625rem;\n  padding-bottom: 0.625rem;\n}\n\n.form-floating > .form-control:not(:-moz-placeholder-shown) ~ label {\n  opacity: 0.65;\n  transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);\n}\n\n.form-floating > .form-control:not(:-ms-input-placeholder) ~ label {\n  opacity: 0.65;\n  transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);\n}\n\n.form-floating > .form-control:focus ~ label,\n.form-floating > .form-control:not(:placeholder-shown) ~ label,\n.form-floating > .form-select ~ label {\n  opacity: 0.65;\n  -webkit-transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);\n  transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);\n}\n\n.form-floating > .form-control:-webkit-autofill ~ label {\n  opacity: 0.65;\n  -webkit-transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);\n  transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);\n}\n\n.input-group {\n  position: relative;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n  flex-wrap: wrap;\n  -ms-flex-align: stretch;\n  align-items: stretch;\n  width: 100%;\n}\n\n.input-group > .form-control,\n.input-group > .form-select {\n  position: relative;\n  -ms-flex: 1 1 auto;\n  flex: 1 1 auto;\n  width: 1%;\n  min-width: 0;\n}\n\n.input-group > .form-control:focus,\n.input-group > .form-select:focus {\n  z-index: 3;\n}\n\n.input-group .btn {\n  position: relative;\n  z-index: 2;\n}\n\n.input-group .btn:focus {\n  z-index: 3;\n}\n\n.input-group-text {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-align: center;\n  align-items: center;\n  padding: 0.375rem 1rem;\n  font-size: 1rem;\n  font-weight: 400;\n  line-height: 1.5;\n  color: #222;\n  text-align: center;\n  white-space: nowrap;\n  background-color: #eee;\n  border: 1px solid #ced4da;\n  border-radius: 0.25rem;\n}\n\n.input-group-lg > .form-control,\n.input-group-lg > .form-select,\n.input-group-lg > .input-group-text,\n.input-group-lg > .btn {\n  padding: 0.5rem 1rem;\n  font-size: 1.25rem;\n  border-radius: 0.3rem;\n}\n\n.input-group-sm > .form-control,\n.input-group-sm > .form-select,\n.input-group-sm > .input-group-text,\n.input-group-sm > .btn {\n  padding: 0.25rem 0.5rem;\n  font-size: 0.875rem;\n  border-radius: 0.2rem;\n}\n\n.input-group-lg > .form-select,\n.input-group-sm > .form-select {\n  padding-right: 4rem;\n}\n\n.input-group:not(.has-validation) > :not(:last-child):not(.dropdown-toggle):not(.dropdown-menu),\n.input-group:not(.has-validation) > .dropdown-toggle:nth-last-child(n + 3) {\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n}\n\n.input-group.has-validation > :nth-last-child(n + 3):not(.dropdown-toggle):not(.dropdown-menu),\n.input-group.has-validation > .dropdown-toggle:nth-last-child(n + 4) {\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n}\n\n.input-group > :not(:first-child):not(.dropdown-menu):not(.valid-tooltip):not(.valid-feedback):not(.invalid-tooltip):not(.invalid-feedback) {\n  margin-left: -1px;\n  border-top-left-radius: 0;\n  border-bottom-left-radius: 0;\n}\n\n.valid-feedback {\n  display: none;\n  width: 100%;\n  margin-top: 0.25rem;\n  font-size: 0.875em;\n  color: #22b24c;\n}\n\n.valid-tooltip {\n  position: absolute;\n  top: 100%;\n  z-index: 5;\n  display: none;\n  max-width: 100%;\n  padding: 0.25rem 0.5rem;\n  margin-top: .1rem;\n  font-size: 0.875rem;\n  color: #fff;\n  background-color: rgba(34, 178, 76, 0.9);\n  border-radius: 0.25rem;\n}\n\n.was-validated :valid ~ .valid-feedback,\n.was-validated :valid ~ .valid-tooltip,\n.is-valid ~ .valid-feedback,\n.is-valid ~ .valid-tooltip {\n  display: block;\n}\n\n.was-validated .form-control:valid, .form-control.is-valid {\n  border-color: #22b24c;\n  padding-right: calc(1.5em + 0.75rem);\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%2322b24c' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e\");\n  background-repeat: no-repeat;\n  background-position: right calc(0.375em + 0.1875rem) center;\n  background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n\n.was-validated .form-control:valid:focus, .form-control.is-valid:focus {\n  border-color: #22b24c;\n  box-shadow: 0 0 0 0.25rem rgba(34, 178, 76, 0.25);\n}\n\n.was-validated textarea.form-control:valid, textarea.form-control.is-valid {\n  padding-right: calc(1.5em + 0.75rem);\n  background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem);\n}\n\n.was-validated .form-select:valid, .form-select.is-valid {\n  border-color: #22b24c;\n}\n\n.was-validated .form-select:valid:not([multiple]):not([size]), .was-validated .form-select:valid:not([multiple])[size=\"1\"], .form-select.is-valid:not([multiple]):not([size]), .form-select.is-valid:not([multiple])[size=\"1\"] {\n  padding-right: 5.5rem;\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23333' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e\"), url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%2322b24c' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e\");\n  background-position: right 1rem center, center right 3rem;\n  background-size: 16px 12px, calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n\n.was-validated .form-select:valid:focus, .form-select.is-valid:focus {\n  border-color: #22b24c;\n  box-shadow: 0 0 0 0.25rem rgba(34, 178, 76, 0.25);\n}\n\n.was-validated .form-check-input:valid, .form-check-input.is-valid {\n  border-color: #22b24c;\n}\n\n.was-validated .form-check-input:valid:checked, .form-check-input.is-valid:checked {\n  background-color: #22b24c;\n}\n\n.was-validated .form-check-input:valid:focus, .form-check-input.is-valid:focus {\n  box-shadow: 0 0 0 0.25rem rgba(34, 178, 76, 0.25);\n}\n\n.was-validated .form-check-input:valid ~ .form-check-label, .form-check-input.is-valid ~ .form-check-label {\n  color: #22b24c;\n}\n\n.form-check-inline .form-check-input ~ .valid-feedback {\n  margin-left: .5em;\n}\n\n.was-validated .input-group .form-control:valid, .input-group .form-control.is-valid, .was-validated\n.input-group .form-select:valid,\n.input-group .form-select.is-valid {\n  z-index: 1;\n}\n\n.was-validated .input-group .form-control:valid:focus, .input-group .form-control.is-valid:focus, .was-validated\n.input-group .form-select:valid:focus,\n.input-group .form-select.is-valid:focus {\n  z-index: 3;\n}\n\n.invalid-feedback {\n  display: none;\n  width: 100%;\n  margin-top: 0.25rem;\n  font-size: 0.875em;\n  color: #f57a00;\n}\n\n.invalid-tooltip {\n  position: absolute;\n  top: 100%;\n  z-index: 5;\n  display: none;\n  max-width: 100%;\n  padding: 0.25rem 0.5rem;\n  margin-top: .1rem;\n  font-size: 0.875rem;\n  color: #fff;\n  background-color: rgba(245, 122, 0, 0.9);\n  border-radius: 0.25rem;\n}\n\n.was-validated :invalid ~ .invalid-feedback,\n.was-validated :invalid ~ .invalid-tooltip,\n.is-invalid ~ .invalid-feedback,\n.is-invalid ~ .invalid-tooltip {\n  display: block;\n}\n\n.was-validated .form-control:invalid, .form-control.is-invalid {\n  border-color: #f57a00;\n  padding-right: calc(1.5em + 0.75rem);\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23f57a00'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23f57a00' stroke='none'/%3e%3c/svg%3e\");\n  background-repeat: no-repeat;\n  background-position: right calc(0.375em + 0.1875rem) center;\n  background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n\n.was-validated .form-control:invalid:focus, .form-control.is-invalid:focus {\n  border-color: #f57a00;\n  box-shadow: 0 0 0 0.25rem rgba(245, 122, 0, 0.25);\n}\n\n.was-validated textarea.form-control:invalid, textarea.form-control.is-invalid {\n  padding-right: calc(1.5em + 0.75rem);\n  background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem);\n}\n\n.was-validated .form-select:invalid, .form-select.is-invalid {\n  border-color: #f57a00;\n}\n\n.was-validated .form-select:invalid:not([multiple]):not([size]), .was-validated .form-select:invalid:not([multiple])[size=\"1\"], .form-select.is-invalid:not([multiple]):not([size]), .form-select.is-invalid:not([multiple])[size=\"1\"] {\n  padding-right: 5.5rem;\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23333' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e\"), url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23f57a00'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23f57a00' stroke='none'/%3e%3c/svg%3e\");\n  background-position: right 1rem center, center right 3rem;\n  background-size: 16px 12px, calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n\n.was-validated .form-select:invalid:focus, .form-select.is-invalid:focus {\n  border-color: #f57a00;\n  box-shadow: 0 0 0 0.25rem rgba(245, 122, 0, 0.25);\n}\n\n.was-validated .form-check-input:invalid, .form-check-input.is-invalid {\n  border-color: #f57a00;\n}\n\n.was-validated .form-check-input:invalid:checked, .form-check-input.is-invalid:checked {\n  background-color: #f57a00;\n}\n\n.was-validated .form-check-input:invalid:focus, .form-check-input.is-invalid:focus {\n  box-shadow: 0 0 0 0.25rem rgba(245, 122, 0, 0.25);\n}\n\n.was-validated .form-check-input:invalid ~ .form-check-label, .form-check-input.is-invalid ~ .form-check-label {\n  color: #f57a00;\n}\n\n.form-check-inline .form-check-input ~ .invalid-feedback {\n  margin-left: .5em;\n}\n\n.was-validated .input-group .form-control:invalid, .input-group .form-control.is-invalid, .was-validated\n.input-group .form-select:invalid,\n.input-group .form-select.is-invalid {\n  z-index: 2;\n}\n\n.was-validated .input-group .form-control:invalid:focus, .input-group .form-control.is-invalid:focus, .was-validated\n.input-group .form-select:invalid:focus,\n.input-group .form-select.is-invalid:focus {\n  z-index: 3;\n}\n\n.btn {\n  display: inline-block;\n  font-weight: 400;\n  line-height: 1.5;\n  color: #222;\n  text-align: center;\n  text-decoration: none;\n  vertical-align: middle;\n  cursor: pointer;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  user-select: none;\n  background-color: transparent;\n  border: 1px solid transparent;\n  padding: 0.375rem 1rem;\n  font-size: 1rem;\n  border-radius: 0.25rem;\n  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .btn {\n    transition: none;\n  }\n}\n\n.btn:hover {\n  color: #222;\n}\n\n.btn-check:focus + .btn, .btn:focus {\n  outline: 0;\n  box-shadow: 0 0 0 0.25rem rgba(235, 104, 100, 0.25);\n}\n\n.btn:disabled, .btn.disabled,\nfieldset:disabled .btn {\n  pointer-events: none;\n  opacity: 0.65;\n}\n\n.btn-primary {\n  color: #fff;\n  background-color: #eb6864;\n  border-color: #eb6864;\n}\n\n.btn-primary:hover {\n  color: #fff;\n  background-color: #c85855;\n  border-color: #bc5350;\n}\n\n.btn-check:focus + .btn-primary, .btn-primary:focus {\n  color: #fff;\n  background-color: #c85855;\n  border-color: #bc5350;\n  box-shadow: 0 0 0 0.25rem rgba(238, 127, 123, 0.5);\n}\n\n.btn-check:checked + .btn-primary,\n.btn-check:active + .btn-primary, .btn-primary:active, .btn-primary.active,\n.show > .btn-primary.dropdown-toggle {\n  color: #fff;\n  background-color: #bc5350;\n  border-color: #b04e4b;\n}\n\n.btn-check:checked + .btn-primary:focus,\n.btn-check:active + .btn-primary:focus, .btn-primary:active:focus, .btn-primary.active:focus,\n.show > .btn-primary.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.25rem rgba(238, 127, 123, 0.5);\n}\n\n.btn-primary:disabled, .btn-primary.disabled {\n  color: #fff;\n  background-color: #eb6864;\n  border-color: #eb6864;\n}\n\n.btn-secondary {\n  color: #fff;\n  background-color: #aaa;\n  border-color: #aaa;\n}\n\n.btn-secondary:hover {\n  color: #fff;\n  background-color: #919191;\n  border-color: #888888;\n}\n\n.btn-check:focus + .btn-secondary, .btn-secondary:focus {\n  color: #fff;\n  background-color: #919191;\n  border-color: #888888;\n  box-shadow: 0 0 0 0.25rem rgba(183, 183, 183, 0.5);\n}\n\n.btn-check:checked + .btn-secondary,\n.btn-check:active + .btn-secondary, .btn-secondary:active, .btn-secondary.active,\n.show > .btn-secondary.dropdown-toggle {\n  color: #fff;\n  background-color: #888888;\n  border-color: gray;\n}\n\n.btn-check:checked + .btn-secondary:focus,\n.btn-check:active + .btn-secondary:focus, .btn-secondary:active:focus, .btn-secondary.active:focus,\n.show > .btn-secondary.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.25rem rgba(183, 183, 183, 0.5);\n}\n\n.btn-secondary:disabled, .btn-secondary.disabled {\n  color: #fff;\n  background-color: #aaa;\n  border-color: #aaa;\n}\n\n.btn-success {\n  color: #fff;\n  background-color: #22b24c;\n  border-color: #22b24c;\n}\n\n.btn-success:hover {\n  color: #fff;\n  background-color: #1d9741;\n  border-color: #1b8e3d;\n}\n\n.btn-check:focus + .btn-success, .btn-success:focus {\n  color: #fff;\n  background-color: #1d9741;\n  border-color: #1b8e3d;\n  box-shadow: 0 0 0 0.25rem rgba(67, 190, 103, 0.5);\n}\n\n.btn-check:checked + .btn-success,\n.btn-check:active + .btn-success, .btn-success:active, .btn-success.active,\n.show > .btn-success.dropdown-toggle {\n  color: #fff;\n  background-color: #1b8e3d;\n  border-color: #1a8639;\n}\n\n.btn-check:checked + .btn-success:focus,\n.btn-check:active + .btn-success:focus, .btn-success:active:focus, .btn-success.active:focus,\n.show > .btn-success.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.25rem rgba(67, 190, 103, 0.5);\n}\n\n.btn-success:disabled, .btn-success.disabled {\n  color: #fff;\n  background-color: #22b24c;\n  border-color: #22b24c;\n}\n\n.btn-info {\n  color: #fff;\n  background-color: #369;\n  border-color: #369;\n}\n\n.btn-info:hover {\n  color: #fff;\n  background-color: #2b5782;\n  border-color: #29527a;\n}\n\n.btn-check:focus + .btn-info, .btn-info:focus {\n  color: #fff;\n  background-color: #2b5782;\n  border-color: #29527a;\n  box-shadow: 0 0 0 0.25rem rgba(82, 125, 168, 0.5);\n}\n\n.btn-check:checked + .btn-info,\n.btn-check:active + .btn-info, .btn-info:active, .btn-info.active,\n.show > .btn-info.dropdown-toggle {\n  color: #fff;\n  background-color: #29527a;\n  border-color: #264d73;\n}\n\n.btn-check:checked + .btn-info:focus,\n.btn-check:active + .btn-info:focus, .btn-info:active:focus, .btn-info.active:focus,\n.show > .btn-info.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.25rem rgba(82, 125, 168, 0.5);\n}\n\n.btn-info:disabled, .btn-info.disabled {\n  color: #fff;\n  background-color: #369;\n  border-color: #369;\n}\n\n.btn-warning {\n  color: #fff;\n  background-color: #f5e625;\n  border-color: #f5e625;\n}\n\n.btn-warning:hover {\n  color: #fff;\n  background-color: #d0c41f;\n  border-color: #c4b81e;\n}\n\n.btn-check:focus + .btn-warning, .btn-warning:focus {\n  color: #fff;\n  background-color: #d0c41f;\n  border-color: #c4b81e;\n  box-shadow: 0 0 0 0.25rem rgba(247, 234, 70, 0.5);\n}\n\n.btn-check:checked + .btn-warning,\n.btn-check:active + .btn-warning, .btn-warning:active, .btn-warning.active,\n.show > .btn-warning.dropdown-toggle {\n  color: #fff;\n  background-color: #c4b81e;\n  border-color: #b8ad1c;\n}\n\n.btn-check:checked + .btn-warning:focus,\n.btn-check:active + .btn-warning:focus, .btn-warning:active:focus, .btn-warning.active:focus,\n.show > .btn-warning.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.25rem rgba(247, 234, 70, 0.5);\n}\n\n.btn-warning:disabled, .btn-warning.disabled {\n  color: #fff;\n  background-color: #f5e625;\n  border-color: #f5e625;\n}\n\n.btn-danger {\n  color: #fff;\n  background-color: #f57a00;\n  border-color: #f57a00;\n}\n\n.btn-danger:hover {\n  color: #fff;\n  background-color: #d06800;\n  border-color: #c46200;\n}\n\n.btn-check:focus + .btn-danger, .btn-danger:focus {\n  color: #fff;\n  background-color: #d06800;\n  border-color: #c46200;\n  box-shadow: 0 0 0 0.25rem rgba(247, 142, 38, 0.5);\n}\n\n.btn-check:checked + .btn-danger,\n.btn-check:active + .btn-danger, .btn-danger:active, .btn-danger.active,\n.show > .btn-danger.dropdown-toggle {\n  color: #fff;\n  background-color: #c46200;\n  border-color: #b85c00;\n}\n\n.btn-check:checked + .btn-danger:focus,\n.btn-check:active + .btn-danger:focus, .btn-danger:active:focus, .btn-danger.active:focus,\n.show > .btn-danger.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.25rem rgba(247, 142, 38, 0.5);\n}\n\n.btn-danger:disabled, .btn-danger.disabled {\n  color: #fff;\n  background-color: #f57a00;\n  border-color: #f57a00;\n}\n\n.btn-light {\n  color: #000;\n  background-color: #f8f9fa;\n  border-color: #f8f9fa;\n}\n\n.btn-light:hover {\n  color: #000;\n  background-color: #f9fafb;\n  border-color: #f9fafb;\n}\n\n.btn-check:focus + .btn-light, .btn-light:focus {\n  color: #000;\n  background-color: #f9fafb;\n  border-color: #f9fafb;\n  box-shadow: 0 0 0 0.25rem rgba(211, 212, 213, 0.5);\n}\n\n.btn-check:checked + .btn-light,\n.btn-check:active + .btn-light, .btn-light:active, .btn-light.active,\n.show > .btn-light.dropdown-toggle {\n  color: #000;\n  background-color: #f9fafb;\n  border-color: #f9fafb;\n}\n\n.btn-check:checked + .btn-light:focus,\n.btn-check:active + .btn-light:focus, .btn-light:active:focus, .btn-light.active:focus,\n.show > .btn-light.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.25rem rgba(211, 212, 213, 0.5);\n}\n\n.btn-light:disabled, .btn-light.disabled {\n  color: #000;\n  background-color: #f8f9fa;\n  border-color: #f8f9fa;\n}\n\n.btn-dark {\n  color: #fff;\n  background-color: #222;\n  border-color: #222;\n}\n\n.btn-dark:hover {\n  color: #fff;\n  background-color: #1d1d1d;\n  border-color: #1b1b1b;\n}\n\n.btn-check:focus + .btn-dark, .btn-dark:focus {\n  color: #fff;\n  background-color: #1d1d1d;\n  border-color: #1b1b1b;\n  box-shadow: 0 0 0 0.25rem rgba(67, 67, 67, 0.5);\n}\n\n.btn-check:checked + .btn-dark,\n.btn-check:active + .btn-dark, .btn-dark:active, .btn-dark.active,\n.show > .btn-dark.dropdown-toggle {\n  color: #fff;\n  background-color: #1b1b1b;\n  border-color: #1a1a1a;\n}\n\n.btn-check:checked + .btn-dark:focus,\n.btn-check:active + .btn-dark:focus, .btn-dark:active:focus, .btn-dark.active:focus,\n.show > .btn-dark.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.25rem rgba(67, 67, 67, 0.5);\n}\n\n.btn-dark:disabled, .btn-dark.disabled {\n  color: #fff;\n  background-color: #222;\n  border-color: #222;\n}\n\n.btn-outline-primary {\n  color: #eb6864;\n  border-color: #eb6864;\n}\n\n.btn-outline-primary:hover {\n  color: #fff;\n  background-color: #eb6864;\n  border-color: #eb6864;\n}\n\n.btn-check:focus + .btn-outline-primary, .btn-outline-primary:focus {\n  box-shadow: 0 0 0 0.25rem rgba(235, 104, 100, 0.5);\n}\n\n.btn-check:checked + .btn-outline-primary,\n.btn-check:active + .btn-outline-primary, .btn-outline-primary:active, .btn-outline-primary.active, .btn-outline-primary.dropdown-toggle.show {\n  color: #fff;\n  background-color: #eb6864;\n  border-color: #eb6864;\n}\n\n.btn-check:checked + .btn-outline-primary:focus,\n.btn-check:active + .btn-outline-primary:focus, .btn-outline-primary:active:focus, .btn-outline-primary.active:focus, .btn-outline-primary.dropdown-toggle.show:focus {\n  box-shadow: 0 0 0 0.25rem rgba(235, 104, 100, 0.5);\n}\n\n.btn-outline-primary:disabled, .btn-outline-primary.disabled {\n  color: #eb6864;\n  background-color: transparent;\n}\n\n.btn-outline-secondary {\n  color: #aaa;\n  border-color: #aaa;\n}\n\n.btn-outline-secondary:hover {\n  color: #fff;\n  background-color: #aaa;\n  border-color: #aaa;\n}\n\n.btn-check:focus + .btn-outline-secondary, .btn-outline-secondary:focus {\n  box-shadow: 0 0 0 0.25rem rgba(170, 170, 170, 0.5);\n}\n\n.btn-check:checked + .btn-outline-secondary,\n.btn-check:active + .btn-outline-secondary, .btn-outline-secondary:active, .btn-outline-secondary.active, .btn-outline-secondary.dropdown-toggle.show {\n  color: #fff;\n  background-color: #aaa;\n  border-color: #aaa;\n}\n\n.btn-check:checked + .btn-outline-secondary:focus,\n.btn-check:active + .btn-outline-secondary:focus, .btn-outline-secondary:active:focus, .btn-outline-secondary.active:focus, .btn-outline-secondary.dropdown-toggle.show:focus {\n  box-shadow: 0 0 0 0.25rem rgba(170, 170, 170, 0.5);\n}\n\n.btn-outline-secondary:disabled, .btn-outline-secondary.disabled {\n  color: #aaa;\n  background-color: transparent;\n}\n\n.btn-outline-success {\n  color: #22b24c;\n  border-color: #22b24c;\n}\n\n.btn-outline-success:hover {\n  color: #fff;\n  background-color: #22b24c;\n  border-color: #22b24c;\n}\n\n.btn-check:focus + .btn-outline-success, .btn-outline-success:focus {\n  box-shadow: 0 0 0 0.25rem rgba(34, 178, 76, 0.5);\n}\n\n.btn-check:checked + .btn-outline-success,\n.btn-check:active + .btn-outline-success, .btn-outline-success:active, .btn-outline-success.active, .btn-outline-success.dropdown-toggle.show {\n  color: #fff;\n  background-color: #22b24c;\n  border-color: #22b24c;\n}\n\n.btn-check:checked + .btn-outline-success:focus,\n.btn-check:active + .btn-outline-success:focus, .btn-outline-success:active:focus, .btn-outline-success.active:focus, .btn-outline-success.dropdown-toggle.show:focus {\n  box-shadow: 0 0 0 0.25rem rgba(34, 178, 76, 0.5);\n}\n\n.btn-outline-success:disabled, .btn-outline-success.disabled {\n  color: #22b24c;\n  background-color: transparent;\n}\n\n.btn-outline-info {\n  color: #369;\n  border-color: #369;\n}\n\n.btn-outline-info:hover {\n  color: #fff;\n  background-color: #369;\n  border-color: #369;\n}\n\n.btn-check:focus + .btn-outline-info, .btn-outline-info:focus {\n  box-shadow: 0 0 0 0.25rem rgba(51, 102, 153, 0.5);\n}\n\n.btn-check:checked + .btn-outline-info,\n.btn-check:active + .btn-outline-info, .btn-outline-info:active, .btn-outline-info.active, .btn-outline-info.dropdown-toggle.show {\n  color: #fff;\n  background-color: #369;\n  border-color: #369;\n}\n\n.btn-check:checked + .btn-outline-info:focus,\n.btn-check:active + .btn-outline-info:focus, .btn-outline-info:active:focus, .btn-outline-info.active:focus, .btn-outline-info.dropdown-toggle.show:focus {\n  box-shadow: 0 0 0 0.25rem rgba(51, 102, 153, 0.5);\n}\n\n.btn-outline-info:disabled, .btn-outline-info.disabled {\n  color: #369;\n  background-color: transparent;\n}\n\n.btn-outline-warning {\n  color: #f5e625;\n  border-color: #f5e625;\n}\n\n.btn-outline-warning:hover {\n  color: #fff;\n  background-color: #f5e625;\n  border-color: #f5e625;\n}\n\n.btn-check:focus + .btn-outline-warning, .btn-outline-warning:focus {\n  box-shadow: 0 0 0 0.25rem rgba(245, 230, 37, 0.5);\n}\n\n.btn-check:checked + .btn-outline-warning,\n.btn-check:active + .btn-outline-warning, .btn-outline-warning:active, .btn-outline-warning.active, .btn-outline-warning.dropdown-toggle.show {\n  color: #fff;\n  background-color: #f5e625;\n  border-color: #f5e625;\n}\n\n.btn-check:checked + .btn-outline-warning:focus,\n.btn-check:active + .btn-outline-warning:focus, .btn-outline-warning:active:focus, .btn-outline-warning.active:focus, .btn-outline-warning.dropdown-toggle.show:focus {\n  box-shadow: 0 0 0 0.25rem rgba(245, 230, 37, 0.5);\n}\n\n.btn-outline-warning:disabled, .btn-outline-warning.disabled {\n  color: #f5e625;\n  background-color: transparent;\n}\n\n.btn-outline-danger {\n  color: #f57a00;\n  border-color: #f57a00;\n}\n\n.btn-outline-danger:hover {\n  color: #fff;\n  background-color: #f57a00;\n  border-color: #f57a00;\n}\n\n.btn-check:focus + .btn-outline-danger, .btn-outline-danger:focus {\n  box-shadow: 0 0 0 0.25rem rgba(245, 122, 0, 0.5);\n}\n\n.btn-check:checked + .btn-outline-danger,\n.btn-check:active + .btn-outline-danger, .btn-outline-danger:active, .btn-outline-danger.active, .btn-outline-danger.dropdown-toggle.show {\n  color: #fff;\n  background-color: #f57a00;\n  border-color: #f57a00;\n}\n\n.btn-check:checked + .btn-outline-danger:focus,\n.btn-check:active + .btn-outline-danger:focus, .btn-outline-danger:active:focus, .btn-outline-danger.active:focus, .btn-outline-danger.dropdown-toggle.show:focus {\n  box-shadow: 0 0 0 0.25rem rgba(245, 122, 0, 0.5);\n}\n\n.btn-outline-danger:disabled, .btn-outline-danger.disabled {\n  color: #f57a00;\n  background-color: transparent;\n}\n\n.btn-outline-light {\n  color: #f8f9fa;\n  border-color: #f8f9fa;\n}\n\n.btn-outline-light:hover {\n  color: #000;\n  background-color: #f8f9fa;\n  border-color: #f8f9fa;\n}\n\n.btn-check:focus + .btn-outline-light, .btn-outline-light:focus {\n  box-shadow: 0 0 0 0.25rem rgba(248, 249, 250, 0.5);\n}\n\n.btn-check:checked + .btn-outline-light,\n.btn-check:active + .btn-outline-light, .btn-outline-light:active, .btn-outline-light.active, .btn-outline-light.dropdown-toggle.show {\n  color: #000;\n  background-color: #f8f9fa;\n  border-color: #f8f9fa;\n}\n\n.btn-check:checked + .btn-outline-light:focus,\n.btn-check:active + .btn-outline-light:focus, .btn-outline-light:active:focus, .btn-outline-light.active:focus, .btn-outline-light.dropdown-toggle.show:focus {\n  box-shadow: 0 0 0 0.25rem rgba(248, 249, 250, 0.5);\n}\n\n.btn-outline-light:disabled, .btn-outline-light.disabled {\n  color: #f8f9fa;\n  background-color: transparent;\n}\n\n.btn-outline-dark {\n  color: #222;\n  border-color: #222;\n}\n\n.btn-outline-dark:hover {\n  color: #fff;\n  background-color: #222;\n  border-color: #222;\n}\n\n.btn-check:focus + .btn-outline-dark, .btn-outline-dark:focus {\n  box-shadow: 0 0 0 0.25rem rgba(34, 34, 34, 0.5);\n}\n\n.btn-check:checked + .btn-outline-dark,\n.btn-check:active + .btn-outline-dark, .btn-outline-dark:active, .btn-outline-dark.active, .btn-outline-dark.dropdown-toggle.show {\n  color: #fff;\n  background-color: #222;\n  border-color: #222;\n}\n\n.btn-check:checked + .btn-outline-dark:focus,\n.btn-check:active + .btn-outline-dark:focus, .btn-outline-dark:active:focus, .btn-outline-dark.active:focus, .btn-outline-dark.dropdown-toggle.show:focus {\n  box-shadow: 0 0 0 0.25rem rgba(34, 34, 34, 0.5);\n}\n\n.btn-outline-dark:disabled, .btn-outline-dark.disabled {\n  color: #222;\n  background-color: transparent;\n}\n\n.btn-link {\n  font-weight: 400;\n  color: #eb6864;\n  text-decoration: underline;\n}\n\n.btn-link:hover {\n  color: #bc5350;\n}\n\n.btn-link:disabled, .btn-link.disabled {\n  color: #777;\n}\n\n.btn-lg, .btn-group-lg > .btn {\n  padding: 0.5rem 1rem;\n  font-size: 1.25rem;\n  border-radius: 0.3rem;\n}\n\n.btn-sm, .btn-group-sm > .btn {\n  padding: 0.25rem 0.5rem;\n  font-size: 0.875rem;\n  border-radius: 0.2rem;\n}\n\n.fade {\n  transition: opacity 0.15s linear;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .fade {\n    transition: none;\n  }\n}\n\n.fade:not(.show) {\n  opacity: 0;\n}\n\n.collapse:not(.show) {\n  display: none;\n}\n\n.collapsing {\n  height: 0;\n  overflow: hidden;\n  transition: height 0.35s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .collapsing {\n    transition: none;\n  }\n}\n\n.collapsing.collapse-horizontal {\n  width: 0;\n  height: auto;\n  transition: width 0.35s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .collapsing.collapse-horizontal {\n    transition: none;\n  }\n}\n\n.dropup,\n.dropend,\n.dropdown,\n.dropstart {\n  position: relative;\n}\n\n.dropdown-toggle {\n  white-space: nowrap;\n}\n\n.dropdown-toggle::after {\n  display: inline-block;\n  margin-left: 0.255em;\n  vertical-align: 0.255em;\n  content: \"\";\n  border-top: 0.3em solid;\n  border-right: 0.3em solid transparent;\n  border-bottom: 0;\n  border-left: 0.3em solid transparent;\n}\n\n.dropdown-toggle:empty::after {\n  margin-left: 0;\n}\n\n.dropdown-menu {\n  position: absolute;\n  z-index: 1000;\n  display: none;\n  min-width: 10rem;\n  padding: 0.5rem 0;\n  margin: 0;\n  font-size: 1rem;\n  color: #222;\n  text-align: left;\n  list-style: none;\n  background-color: #fff;\n  background-clip: padding-box;\n  border: 1px solid rgba(0, 0, 0, 0.15);\n  border-radius: 0.25rem;\n}\n\n.dropdown-menu[data-bs-popper] {\n  top: 100%;\n  left: 0;\n  margin-top: 0.125rem;\n}\n\n.dropdown-menu-start {\n  --bs-position: start;\n}\n\n.dropdown-menu-start[data-bs-popper] {\n  right: auto;\n  left: 0;\n}\n\n.dropdown-menu-end {\n  --bs-position: end;\n}\n\n.dropdown-menu-end[data-bs-popper] {\n  right: 0;\n  left: auto;\n}\n\n@media (min-width: 576px) {\n  .dropdown-menu-sm-start {\n    --bs-position: start;\n  }\n  .dropdown-menu-sm-start[data-bs-popper] {\n    right: auto;\n    left: 0;\n  }\n  .dropdown-menu-sm-end {\n    --bs-position: end;\n  }\n  .dropdown-menu-sm-end[data-bs-popper] {\n    right: 0;\n    left: auto;\n  }\n}\n\n@media (min-width: 768px) {\n  .dropdown-menu-md-start {\n    --bs-position: start;\n  }\n  .dropdown-menu-md-start[data-bs-popper] {\n    right: auto;\n    left: 0;\n  }\n  .dropdown-menu-md-end {\n    --bs-position: end;\n  }\n  .dropdown-menu-md-end[data-bs-popper] {\n    right: 0;\n    left: auto;\n  }\n}\n\n@media (min-width: 992px) {\n  .dropdown-menu-lg-start {\n    --bs-position: start;\n  }\n  .dropdown-menu-lg-start[data-bs-popper] {\n    right: auto;\n    left: 0;\n  }\n  .dropdown-menu-lg-end {\n    --bs-position: end;\n  }\n  .dropdown-menu-lg-end[data-bs-popper] {\n    right: 0;\n    left: auto;\n  }\n}\n\n@media (min-width: 1200px) {\n  .dropdown-menu-xl-start {\n    --bs-position: start;\n  }\n  .dropdown-menu-xl-start[data-bs-popper] {\n    right: auto;\n    left: 0;\n  }\n  .dropdown-menu-xl-end {\n    --bs-position: end;\n  }\n  .dropdown-menu-xl-end[data-bs-popper] {\n    right: 0;\n    left: auto;\n  }\n}\n\n@media (min-width: 1400px) {\n  .dropdown-menu-xxl-start {\n    --bs-position: start;\n  }\n  .dropdown-menu-xxl-start[data-bs-popper] {\n    right: auto;\n    left: 0;\n  }\n  .dropdown-menu-xxl-end {\n    --bs-position: end;\n  }\n  .dropdown-menu-xxl-end[data-bs-popper] {\n    right: 0;\n    left: auto;\n  }\n}\n\n.dropup .dropdown-menu[data-bs-popper] {\n  top: auto;\n  bottom: 100%;\n  margin-top: 0;\n  margin-bottom: 0.125rem;\n}\n\n.dropup .dropdown-toggle::after {\n  display: inline-block;\n  margin-left: 0.255em;\n  vertical-align: 0.255em;\n  content: \"\";\n  border-top: 0;\n  border-right: 0.3em solid transparent;\n  border-bottom: 0.3em solid;\n  border-left: 0.3em solid transparent;\n}\n\n.dropup .dropdown-toggle:empty::after {\n  margin-left: 0;\n}\n\n.dropend .dropdown-menu[data-bs-popper] {\n  top: 0;\n  right: auto;\n  left: 100%;\n  margin-top: 0;\n  margin-left: 0.125rem;\n}\n\n.dropend .dropdown-toggle::after {\n  display: inline-block;\n  margin-left: 0.255em;\n  vertical-align: 0.255em;\n  content: \"\";\n  border-top: 0.3em solid transparent;\n  border-right: 0;\n  border-bottom: 0.3em solid transparent;\n  border-left: 0.3em solid;\n}\n\n.dropend .dropdown-toggle:empty::after {\n  margin-left: 0;\n}\n\n.dropend .dropdown-toggle::after {\n  vertical-align: 0;\n}\n\n.dropstart .dropdown-menu[data-bs-popper] {\n  top: 0;\n  right: 100%;\n  left: auto;\n  margin-top: 0;\n  margin-right: 0.125rem;\n}\n\n.dropstart .dropdown-toggle::after {\n  display: inline-block;\n  margin-left: 0.255em;\n  vertical-align: 0.255em;\n  content: \"\";\n}\n\n.dropstart .dropdown-toggle::after {\n  display: none;\n}\n\n.dropstart .dropdown-toggle::before {\n  display: inline-block;\n  margin-right: 0.255em;\n  vertical-align: 0.255em;\n  content: \"\";\n  border-top: 0.3em solid transparent;\n  border-right: 0.3em solid;\n  border-bottom: 0.3em solid transparent;\n}\n\n.dropstart .dropdown-toggle:empty::after {\n  margin-left: 0;\n}\n\n.dropstart .dropdown-toggle::before {\n  vertical-align: 0;\n}\n\n.dropdown-divider {\n  height: 0;\n  margin: 0.5rem 0;\n  overflow: hidden;\n  border-top: 1px solid rgba(0, 0, 0, 0.15);\n}\n\n.dropdown-item {\n  display: block;\n  width: 100%;\n  padding: 0.25rem 1rem;\n  clear: both;\n  font-weight: 400;\n  color: #222;\n  text-align: inherit;\n  text-decoration: none;\n  white-space: nowrap;\n  background-color: transparent;\n  border: 0;\n}\n\n.dropdown-item:hover, .dropdown-item:focus {\n  color: #1f1f1f;\n  background-color: #eee;\n}\n\n.dropdown-item.active, .dropdown-item:active {\n  color: #fff;\n  text-decoration: none;\n  background-color: #eb6864;\n}\n\n.dropdown-item.disabled, .dropdown-item:disabled {\n  color: #aaa;\n  pointer-events: none;\n  background-color: transparent;\n}\n\n.dropdown-menu.show {\n  display: block;\n}\n\n.dropdown-header {\n  display: block;\n  padding: 0.5rem 1rem;\n  margin-bottom: 0;\n  font-size: 0.875rem;\n  color: #777;\n  white-space: nowrap;\n}\n\n.dropdown-item-text {\n  display: block;\n  padding: 0.25rem 1rem;\n  color: #222;\n}\n\n.dropdown-menu-dark {\n  color: #dee2e6;\n  background-color: #333;\n  border-color: rgba(0, 0, 0, 0.15);\n}\n\n.dropdown-menu-dark .dropdown-item {\n  color: #dee2e6;\n}\n\n.dropdown-menu-dark .dropdown-item:hover, .dropdown-menu-dark .dropdown-item:focus {\n  color: #fff;\n  background-color: rgba(255, 255, 255, 0.15);\n}\n\n.dropdown-menu-dark .dropdown-item.active, .dropdown-menu-dark .dropdown-item:active {\n  color: #fff;\n  background-color: #eb6864;\n}\n\n.dropdown-menu-dark .dropdown-item.disabled, .dropdown-menu-dark .dropdown-item:disabled {\n  color: #aaa;\n}\n\n.dropdown-menu-dark .dropdown-divider {\n  border-color: rgba(0, 0, 0, 0.15);\n}\n\n.dropdown-menu-dark .dropdown-item-text {\n  color: #dee2e6;\n}\n\n.dropdown-menu-dark .dropdown-header {\n  color: #aaa;\n}\n\n.btn-group,\n.btn-group-vertical {\n  position: relative;\n  display: -ms-inline-flexbox;\n  display: inline-flex;\n  vertical-align: middle;\n}\n\n.btn-group > .btn,\n.btn-group-vertical > .btn {\n  position: relative;\n  -ms-flex: 1 1 auto;\n  flex: 1 1 auto;\n}\n\n.btn-group > .btn-check:checked + .btn,\n.btn-group > .btn-check:focus + .btn,\n.btn-group > .btn:hover,\n.btn-group > .btn:focus,\n.btn-group > .btn:active,\n.btn-group > .btn.active,\n.btn-group-vertical > .btn-check:checked + .btn,\n.btn-group-vertical > .btn-check:focus + .btn,\n.btn-group-vertical > .btn:hover,\n.btn-group-vertical > .btn:focus,\n.btn-group-vertical > .btn:active,\n.btn-group-vertical > .btn.active {\n  z-index: 1;\n}\n\n.btn-toolbar {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n  flex-wrap: wrap;\n  -ms-flex-pack: start;\n  justify-content: flex-start;\n}\n\n.btn-toolbar .input-group {\n  width: auto;\n}\n\n.btn-group > .btn:not(:first-child),\n.btn-group > .btn-group:not(:first-child) {\n  margin-left: -1px;\n}\n\n.btn-group > .btn:not(:last-child):not(.dropdown-toggle),\n.btn-group > .btn-group:not(:last-child) > .btn {\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n}\n\n.btn-group > .btn:nth-child(n + 3),\n.btn-group > :not(.btn-check) + .btn,\n.btn-group > .btn-group:not(:first-child) > .btn {\n  border-top-left-radius: 0;\n  border-bottom-left-radius: 0;\n}\n\n.dropdown-toggle-split {\n  padding-right: 0.75rem;\n  padding-left: 0.75rem;\n}\n\n.dropdown-toggle-split::after,\n.dropup .dropdown-toggle-split::after,\n.dropend .dropdown-toggle-split::after {\n  margin-left: 0;\n}\n\n.dropstart .dropdown-toggle-split::before {\n  margin-right: 0;\n}\n\n.btn-sm + .dropdown-toggle-split, .btn-group-sm > .btn + .dropdown-toggle-split {\n  padding-right: 0.375rem;\n  padding-left: 0.375rem;\n}\n\n.btn-lg + .dropdown-toggle-split, .btn-group-lg > .btn + .dropdown-toggle-split {\n  padding-right: 0.75rem;\n  padding-left: 0.75rem;\n}\n\n.btn-group-vertical {\n  -ms-flex-direction: column;\n  flex-direction: column;\n  -ms-flex-align: start;\n  align-items: flex-start;\n  -ms-flex-pack: center;\n  justify-content: center;\n}\n\n.btn-group-vertical > .btn,\n.btn-group-vertical > .btn-group {\n  width: 100%;\n}\n\n.btn-group-vertical > .btn:not(:first-child),\n.btn-group-vertical > .btn-group:not(:first-child) {\n  margin-top: -1px;\n}\n\n.btn-group-vertical > .btn:not(:last-child):not(.dropdown-toggle),\n.btn-group-vertical > .btn-group:not(:last-child) > .btn {\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 0;\n}\n\n.btn-group-vertical > .btn ~ .btn,\n.btn-group-vertical > .btn-group:not(:first-child) > .btn {\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n}\n\n.nav {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n  flex-wrap: wrap;\n  padding-left: 0;\n  margin-bottom: 0;\n  list-style: none;\n}\n\n.nav-link {\n  display: block;\n  padding: 0.5rem 1rem;\n  color: #eb6864;\n  text-decoration: none;\n  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .nav-link {\n    transition: none;\n  }\n}\n\n.nav-link:hover, .nav-link:focus {\n  color: #bc5350;\n}\n\n.nav-link.disabled {\n  color: #777;\n  pointer-events: none;\n  cursor: default;\n}\n\n.nav-tabs {\n  border-bottom: 1px solid #dee2e6;\n}\n\n.nav-tabs .nav-link {\n  margin-bottom: -1px;\n  background: none;\n  border: 1px solid transparent;\n  border-top-left-radius: 0.25rem;\n  border-top-right-radius: 0.25rem;\n}\n\n.nav-tabs .nav-link:hover, .nav-tabs .nav-link:focus {\n  border-color: #eee #eee #dee2e6;\n  isolation: isolate;\n}\n\n.nav-tabs .nav-link.disabled {\n  color: #777;\n  background-color: transparent;\n  border-color: transparent;\n}\n\n.nav-tabs .nav-link.active,\n.nav-tabs .nav-item.show .nav-link {\n  color: #495057;\n  background-color: #fff;\n  border-color: #dee2e6 #dee2e6 #fff;\n}\n\n.nav-tabs .dropdown-menu {\n  margin-top: -1px;\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n}\n\n.nav-pills .nav-link {\n  background: none;\n  border: 0;\n  border-radius: 0.25rem;\n}\n\n.nav-pills .nav-link.active,\n.nav-pills .show > .nav-link {\n  color: #fff;\n  background-color: #eb6864;\n}\n\n.nav-fill > .nav-link,\n.nav-fill .nav-item {\n  -ms-flex: 1 1 auto;\n  flex: 1 1 auto;\n  text-align: center;\n}\n\n.nav-justified > .nav-link,\n.nav-justified .nav-item {\n  -ms-flex-preferred-size: 0;\n  flex-basis: 0;\n  -ms-flex-positive: 1;\n  flex-grow: 1;\n  text-align: center;\n}\n\n.nav-fill .nav-item .nav-link,\n.nav-justified .nav-item .nav-link {\n  width: 100%;\n}\n\n.tab-content > .tab-pane {\n  display: none;\n}\n\n.tab-content > .active {\n  display: block;\n}\n\n.navbar {\n  position: relative;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n  flex-wrap: wrap;\n  -ms-flex-align: center;\n  align-items: center;\n  -ms-flex-pack: justify;\n  justify-content: space-between;\n  padding-top: 0.5rem;\n  padding-bottom: 0.5rem;\n}\n\n.navbar > .container,\n.navbar > .container-fluid, .navbar > .container-sm, .navbar > .container-md, .navbar > .container-lg, .navbar > .container-xl, .navbar > .container-xxl {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: inherit;\n  flex-wrap: inherit;\n  -ms-flex-align: center;\n  align-items: center;\n  -ms-flex-pack: justify;\n  justify-content: space-between;\n}\n\n.navbar-brand {\n  padding-top: 0.3125rem;\n  padding-bottom: 0.3125rem;\n  margin-right: 1rem;\n  font-size: 1.25rem;\n  text-decoration: none;\n  white-space: nowrap;\n}\n\n.navbar-nav {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  padding-left: 0;\n  margin-bottom: 0;\n  list-style: none;\n}\n\n.navbar-nav .nav-link {\n  padding-right: 0;\n  padding-left: 0;\n}\n\n.navbar-nav .dropdown-menu {\n  position: static;\n}\n\n.navbar-text {\n  padding-top: 0.5rem;\n  padding-bottom: 0.5rem;\n}\n\n.navbar-collapse {\n  -ms-flex-preferred-size: 100%;\n  flex-basis: 100%;\n  -ms-flex-positive: 1;\n  flex-grow: 1;\n  -ms-flex-align: center;\n  align-items: center;\n}\n\n.navbar-toggler {\n  padding: 0.25rem 0.75rem;\n  font-size: 1.25rem;\n  line-height: 1;\n  background-color: transparent;\n  border: 1px solid transparent;\n  border-radius: 0.25rem;\n  transition: box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .navbar-toggler {\n    transition: none;\n  }\n}\n\n.navbar-toggler:hover {\n  text-decoration: none;\n}\n\n.navbar-toggler:focus {\n  text-decoration: none;\n  outline: 0;\n  box-shadow: 0 0 0 0.25rem;\n}\n\n.navbar-toggler-icon {\n  display: inline-block;\n  width: 1.5em;\n  height: 1.5em;\n  vertical-align: middle;\n  background-repeat: no-repeat;\n  background-position: center;\n  background-size: 100%;\n}\n\n.navbar-nav-scroll {\n  max-height: var(--bs-scroll-height, 75vh);\n  overflow-y: auto;\n}\n\n@media (min-width: 576px) {\n  .navbar-expand-sm {\n    -ms-flex-wrap: nowrap;\n    flex-wrap: nowrap;\n    -ms-flex-pack: start;\n    justify-content: flex-start;\n  }\n  .navbar-expand-sm .navbar-nav {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .navbar-expand-sm .navbar-nav .dropdown-menu {\n    position: absolute;\n  }\n  .navbar-expand-sm .navbar-nav .nav-link {\n    padding-right: 0.5rem;\n    padding-left: 0.5rem;\n  }\n  .navbar-expand-sm .navbar-nav-scroll {\n    overflow: visible;\n  }\n  .navbar-expand-sm .navbar-collapse {\n    display: -ms-flexbox !important;\n    display: flex !important;\n    -ms-flex-preferred-size: auto;\n    flex-basis: auto;\n  }\n  .navbar-expand-sm .navbar-toggler {\n    display: none;\n  }\n  .navbar-expand-sm .offcanvas-header {\n    display: none;\n  }\n  .navbar-expand-sm .offcanvas {\n    position: inherit;\n    bottom: 0;\n    z-index: 1000;\n    -ms-flex-positive: 1;\n    flex-grow: 1;\n    visibility: visible !important;\n    background-color: transparent;\n    border-right: 0;\n    border-left: 0;\n    transition: none;\n    -webkit-transform: none;\n    transform: none;\n  }\n  .navbar-expand-sm .offcanvas-top,\n  .navbar-expand-sm .offcanvas-bottom {\n    height: auto;\n    border-top: 0;\n    border-bottom: 0;\n  }\n  .navbar-expand-sm .offcanvas-body {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-positive: 0;\n    flex-grow: 0;\n    padding: 0;\n    overflow-y: visible;\n  }\n}\n\n@media (min-width: 768px) {\n  .navbar-expand-md {\n    -ms-flex-wrap: nowrap;\n    flex-wrap: nowrap;\n    -ms-flex-pack: start;\n    justify-content: flex-start;\n  }\n  .navbar-expand-md .navbar-nav {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .navbar-expand-md .navbar-nav .dropdown-menu {\n    position: absolute;\n  }\n  .navbar-expand-md .navbar-nav .nav-link {\n    padding-right: 0.5rem;\n    padding-left: 0.5rem;\n  }\n  .navbar-expand-md .navbar-nav-scroll {\n    overflow: visible;\n  }\n  .navbar-expand-md .navbar-collapse {\n    display: -ms-flexbox !important;\n    display: flex !important;\n    -ms-flex-preferred-size: auto;\n    flex-basis: auto;\n  }\n  .navbar-expand-md .navbar-toggler {\n    display: none;\n  }\n  .navbar-expand-md .offcanvas-header {\n    display: none;\n  }\n  .navbar-expand-md .offcanvas {\n    position: inherit;\n    bottom: 0;\n    z-index: 1000;\n    -ms-flex-positive: 1;\n    flex-grow: 1;\n    visibility: visible !important;\n    background-color: transparent;\n    border-right: 0;\n    border-left: 0;\n    transition: none;\n    -webkit-transform: none;\n    transform: none;\n  }\n  .navbar-expand-md .offcanvas-top,\n  .navbar-expand-md .offcanvas-bottom {\n    height: auto;\n    border-top: 0;\n    border-bottom: 0;\n  }\n  .navbar-expand-md .offcanvas-body {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-positive: 0;\n    flex-grow: 0;\n    padding: 0;\n    overflow-y: visible;\n  }\n}\n\n@media (min-width: 992px) {\n  .navbar-expand-lg {\n    -ms-flex-wrap: nowrap;\n    flex-wrap: nowrap;\n    -ms-flex-pack: start;\n    justify-content: flex-start;\n  }\n  .navbar-expand-lg .navbar-nav {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .navbar-expand-lg .navbar-nav .dropdown-menu {\n    position: absolute;\n  }\n  .navbar-expand-lg .navbar-nav .nav-link {\n    padding-right: 0.5rem;\n    padding-left: 0.5rem;\n  }\n  .navbar-expand-lg .navbar-nav-scroll {\n    overflow: visible;\n  }\n  .navbar-expand-lg .navbar-collapse {\n    display: -ms-flexbox !important;\n    display: flex !important;\n    -ms-flex-preferred-size: auto;\n    flex-basis: auto;\n  }\n  .navbar-expand-lg .navbar-toggler {\n    display: none;\n  }\n  .navbar-expand-lg .offcanvas-header {\n    display: none;\n  }\n  .navbar-expand-lg .offcanvas {\n    position: inherit;\n    bottom: 0;\n    z-index: 1000;\n    -ms-flex-positive: 1;\n    flex-grow: 1;\n    visibility: visible !important;\n    background-color: transparent;\n    border-right: 0;\n    border-left: 0;\n    transition: none;\n    -webkit-transform: none;\n    transform: none;\n  }\n  .navbar-expand-lg .offcanvas-top,\n  .navbar-expand-lg .offcanvas-bottom {\n    height: auto;\n    border-top: 0;\n    border-bottom: 0;\n  }\n  .navbar-expand-lg .offcanvas-body {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-positive: 0;\n    flex-grow: 0;\n    padding: 0;\n    overflow-y: visible;\n  }\n}\n\n@media (min-width: 1200px) {\n  .navbar-expand-xl {\n    -ms-flex-wrap: nowrap;\n    flex-wrap: nowrap;\n    -ms-flex-pack: start;\n    justify-content: flex-start;\n  }\n  .navbar-expand-xl .navbar-nav {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .navbar-expand-xl .navbar-nav .dropdown-menu {\n    position: absolute;\n  }\n  .navbar-expand-xl .navbar-nav .nav-link {\n    padding-right: 0.5rem;\n    padding-left: 0.5rem;\n  }\n  .navbar-expand-xl .navbar-nav-scroll {\n    overflow: visible;\n  }\n  .navbar-expand-xl .navbar-collapse {\n    display: -ms-flexbox !important;\n    display: flex !important;\n    -ms-flex-preferred-size: auto;\n    flex-basis: auto;\n  }\n  .navbar-expand-xl .navbar-toggler {\n    display: none;\n  }\n  .navbar-expand-xl .offcanvas-header {\n    display: none;\n  }\n  .navbar-expand-xl .offcanvas {\n    position: inherit;\n    bottom: 0;\n    z-index: 1000;\n    -ms-flex-positive: 1;\n    flex-grow: 1;\n    visibility: visible !important;\n    background-color: transparent;\n    border-right: 0;\n    border-left: 0;\n    transition: none;\n    -webkit-transform: none;\n    transform: none;\n  }\n  .navbar-expand-xl .offcanvas-top,\n  .navbar-expand-xl .offcanvas-bottom {\n    height: auto;\n    border-top: 0;\n    border-bottom: 0;\n  }\n  .navbar-expand-xl .offcanvas-body {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-positive: 0;\n    flex-grow: 0;\n    padding: 0;\n    overflow-y: visible;\n  }\n}\n\n@media (min-width: 1400px) {\n  .navbar-expand-xxl {\n    -ms-flex-wrap: nowrap;\n    flex-wrap: nowrap;\n    -ms-flex-pack: start;\n    justify-content: flex-start;\n  }\n  .navbar-expand-xxl .navbar-nav {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .navbar-expand-xxl .navbar-nav .dropdown-menu {\n    position: absolute;\n  }\n  .navbar-expand-xxl .navbar-nav .nav-link {\n    padding-right: 0.5rem;\n    padding-left: 0.5rem;\n  }\n  .navbar-expand-xxl .navbar-nav-scroll {\n    overflow: visible;\n  }\n  .navbar-expand-xxl .navbar-collapse {\n    display: -ms-flexbox !important;\n    display: flex !important;\n    -ms-flex-preferred-size: auto;\n    flex-basis: auto;\n  }\n  .navbar-expand-xxl .navbar-toggler {\n    display: none;\n  }\n  .navbar-expand-xxl .offcanvas-header {\n    display: none;\n  }\n  .navbar-expand-xxl .offcanvas {\n    position: inherit;\n    bottom: 0;\n    z-index: 1000;\n    -ms-flex-positive: 1;\n    flex-grow: 1;\n    visibility: visible !important;\n    background-color: transparent;\n    border-right: 0;\n    border-left: 0;\n    transition: none;\n    -webkit-transform: none;\n    transform: none;\n  }\n  .navbar-expand-xxl .offcanvas-top,\n  .navbar-expand-xxl .offcanvas-bottom {\n    height: auto;\n    border-top: 0;\n    border-bottom: 0;\n  }\n  .navbar-expand-xxl .offcanvas-body {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-positive: 0;\n    flex-grow: 0;\n    padding: 0;\n    overflow-y: visible;\n  }\n}\n\n.navbar-expand {\n  -ms-flex-wrap: nowrap;\n  flex-wrap: nowrap;\n  -ms-flex-pack: start;\n  justify-content: flex-start;\n}\n\n.navbar-expand .navbar-nav {\n  -ms-flex-direction: row;\n  flex-direction: row;\n}\n\n.navbar-expand .navbar-nav .dropdown-menu {\n  position: absolute;\n}\n\n.navbar-expand .navbar-nav .nav-link {\n  padding-right: 0.5rem;\n  padding-left: 0.5rem;\n}\n\n.navbar-expand .navbar-nav-scroll {\n  overflow: visible;\n}\n\n.navbar-expand .navbar-collapse {\n  display: -ms-flexbox !important;\n  display: flex !important;\n  -ms-flex-preferred-size: auto;\n  flex-basis: auto;\n}\n\n.navbar-expand .navbar-toggler {\n  display: none;\n}\n\n.navbar-expand .offcanvas-header {\n  display: none;\n}\n\n.navbar-expand .offcanvas {\n  position: inherit;\n  bottom: 0;\n  z-index: 1000;\n  -ms-flex-positive: 1;\n  flex-grow: 1;\n  visibility: visible !important;\n  background-color: transparent;\n  border-right: 0;\n  border-left: 0;\n  transition: none;\n  -webkit-transform: none;\n  transform: none;\n}\n\n.navbar-expand .offcanvas-top,\n.navbar-expand .offcanvas-bottom {\n  height: auto;\n  border-top: 0;\n  border-bottom: 0;\n}\n\n.navbar-expand .offcanvas-body {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-positive: 0;\n  flex-grow: 0;\n  padding: 0;\n  overflow-y: visible;\n}\n\n.navbar-light .navbar-brand {\n  color: #000;\n}\n\n.navbar-light .navbar-brand:hover, .navbar-light .navbar-brand:focus {\n  color: #000;\n}\n\n.navbar-light .navbar-nav .nav-link {\n  color: rgba(0, 0, 0, 0.7);\n}\n\n.navbar-light .navbar-nav .nav-link:hover, .navbar-light .navbar-nav .nav-link:focus {\n  color: #000;\n}\n\n.navbar-light .navbar-nav .nav-link.disabled {\n  color: rgba(0, 0, 0, 0.3);\n}\n\n.navbar-light .navbar-nav .show > .nav-link,\n.navbar-light .navbar-nav .nav-link.active {\n  color: #000;\n}\n\n.navbar-light .navbar-toggler {\n  color: rgba(0, 0, 0, 0.7);\n  border-color: rgba(0, 0, 0, 0.1);\n}\n\n.navbar-light .navbar-toggler-icon {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%280, 0, 0, 0.7%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e\");\n}\n\n.navbar-light .navbar-text {\n  color: rgba(0, 0, 0, 0.7);\n}\n\n.navbar-light .navbar-text a,\n.navbar-light .navbar-text a:hover,\n.navbar-light .navbar-text a:focus {\n  color: #000;\n}\n\n.navbar-dark .navbar-brand {\n  color: #fff;\n}\n\n.navbar-dark .navbar-brand:hover, .navbar-dark .navbar-brand:focus {\n  color: #fff;\n}\n\n.navbar-dark .navbar-nav .nav-link {\n  color: rgba(255, 255, 255, 0.55);\n}\n\n.navbar-dark .navbar-nav .nav-link:hover, .navbar-dark .navbar-nav .nav-link:focus {\n  color: rgba(255, 255, 255, 0.75);\n}\n\n.navbar-dark .navbar-nav .nav-link.disabled {\n  color: rgba(255, 255, 255, 0.25);\n}\n\n.navbar-dark .navbar-nav .show > .nav-link,\n.navbar-dark .navbar-nav .nav-link.active {\n  color: #fff;\n}\n\n.navbar-dark .navbar-toggler {\n  color: rgba(255, 255, 255, 0.55);\n  border-color: rgba(255, 255, 255, 0.1);\n}\n\n.navbar-dark .navbar-toggler-icon {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e\");\n}\n\n.navbar-dark .navbar-text {\n  color: rgba(255, 255, 255, 0.55);\n}\n\n.navbar-dark .navbar-text a,\n.navbar-dark .navbar-text a:hover,\n.navbar-dark .navbar-text a:focus {\n  color: #fff;\n}\n\n.card {\n  position: relative;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  min-width: 0;\n  word-wrap: break-word;\n  background-color: #fff;\n  background-clip: border-box;\n  border: 1px solid rgba(0, 0, 0, 0.125);\n  border-radius: 0.25rem;\n}\n\n.card > hr {\n  margin-right: 0;\n  margin-left: 0;\n}\n\n.card > .list-group {\n  border-top: inherit;\n  border-bottom: inherit;\n}\n\n.card > .list-group:first-child {\n  border-top-width: 0;\n  border-top-left-radius: calc(0.25rem - 1px);\n  border-top-right-radius: calc(0.25rem - 1px);\n}\n\n.card > .list-group:last-child {\n  border-bottom-width: 0;\n  border-bottom-right-radius: calc(0.25rem - 1px);\n  border-bottom-left-radius: calc(0.25rem - 1px);\n}\n\n.card > .card-header + .list-group,\n.card > .list-group + .card-footer {\n  border-top: 0;\n}\n\n.card-body {\n  -ms-flex: 1 1 auto;\n  flex: 1 1 auto;\n  padding: 1rem 1rem;\n}\n\n.card-title {\n  margin-bottom: 0.5rem;\n}\n\n.card-subtitle {\n  margin-top: -0.25rem;\n  margin-bottom: 0;\n}\n\n.card-text:last-child {\n  margin-bottom: 0;\n}\n\n.card-link + .card-link {\n  margin-left: 1rem;\n}\n\n.card-header {\n  padding: 0.5rem 1rem;\n  margin-bottom: 0;\n  background-color: rgba(0, 0, 0, 0.03);\n  border-bottom: 1px solid rgba(0, 0, 0, 0.125);\n}\n\n.card-header:first-child {\n  border-radius: calc(0.25rem - 1px) calc(0.25rem - 1px) 0 0;\n}\n\n.card-footer {\n  padding: 0.5rem 1rem;\n  background-color: rgba(0, 0, 0, 0.03);\n  border-top: 1px solid rgba(0, 0, 0, 0.125);\n}\n\n.card-footer:last-child {\n  border-radius: 0 0 calc(0.25rem - 1px) calc(0.25rem - 1px);\n}\n\n.card-header-tabs {\n  margin-right: -0.5rem;\n  margin-bottom: -0.5rem;\n  margin-left: -0.5rem;\n  border-bottom: 0;\n}\n\n.card-header-pills {\n  margin-right: -0.5rem;\n  margin-left: -0.5rem;\n}\n\n.card-img-overlay {\n  position: absolute;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  padding: 1rem;\n  border-radius: calc(0.25rem - 1px);\n}\n\n.card-img,\n.card-img-top,\n.card-img-bottom {\n  width: 100%;\n}\n\n.card-img,\n.card-img-top {\n  border-top-left-radius: calc(0.25rem - 1px);\n  border-top-right-radius: calc(0.25rem - 1px);\n}\n\n.card-img,\n.card-img-bottom {\n  border-bottom-right-radius: calc(0.25rem - 1px);\n  border-bottom-left-radius: calc(0.25rem - 1px);\n}\n\n.card-group > .card {\n  margin-bottom: 0.75rem;\n}\n\n@media (min-width: 576px) {\n  .card-group {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-flow: row wrap;\n    flex-flow: row wrap;\n  }\n  .card-group > .card {\n    -ms-flex: 1 0 0%;\n    flex: 1 0 0%;\n    margin-bottom: 0;\n  }\n  .card-group > .card + .card {\n    margin-left: 0;\n    border-left: 0;\n  }\n  .card-group > .card:not(:last-child) {\n    border-top-right-radius: 0;\n    border-bottom-right-radius: 0;\n  }\n  .card-group > .card:not(:last-child) .card-img-top,\n  .card-group > .card:not(:last-child) .card-header {\n    border-top-right-radius: 0;\n  }\n  .card-group > .card:not(:last-child) .card-img-bottom,\n  .card-group > .card:not(:last-child) .card-footer {\n    border-bottom-right-radius: 0;\n  }\n  .card-group > .card:not(:first-child) {\n    border-top-left-radius: 0;\n    border-bottom-left-radius: 0;\n  }\n  .card-group > .card:not(:first-child) .card-img-top,\n  .card-group > .card:not(:first-child) .card-header {\n    border-top-left-radius: 0;\n  }\n  .card-group > .card:not(:first-child) .card-img-bottom,\n  .card-group > .card:not(:first-child) .card-footer {\n    border-bottom-left-radius: 0;\n  }\n}\n\n.accordion-button {\n  position: relative;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-align: center;\n  align-items: center;\n  width: 100%;\n  padding: 1rem 1.25rem;\n  font-size: 1rem;\n  color: #222;\n  text-align: left;\n  background-color: #fff;\n  border: 0;\n  border-radius: 0;\n  overflow-anchor: none;\n  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, border-radius 0.15s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .accordion-button {\n    transition: none;\n  }\n}\n\n.accordion-button:not(.collapsed) {\n  color: #d45e5a;\n  background-color: #fdf0f0;\n  box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.125);\n}\n\n.accordion-button:not(.collapsed)::after {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23d45e5a'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e\");\n  -webkit-transform: rotate(-180deg);\n  transform: rotate(-180deg);\n}\n\n.accordion-button::after {\n  -ms-flex-negative: 0;\n  flex-shrink: 0;\n  width: 1.25rem;\n  height: 1.25rem;\n  margin-left: auto;\n  content: \"\";\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23222'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e\");\n  background-repeat: no-repeat;\n  background-size: 1.25rem;\n  transition: -webkit-transform 0.2s ease-in-out;\n  transition: transform 0.2s ease-in-out;\n  transition: transform 0.2s ease-in-out, -webkit-transform 0.2s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .accordion-button::after {\n    transition: none;\n  }\n}\n\n.accordion-button:hover {\n  z-index: 2;\n}\n\n.accordion-button:focus {\n  z-index: 3;\n  border-color: #f5b4b2;\n  outline: 0;\n  box-shadow: 0 0 0 0.25rem rgba(235, 104, 100, 0.25);\n}\n\n.accordion-header {\n  margin-bottom: 0;\n}\n\n.accordion-item {\n  background-color: #fff;\n  border: 1px solid rgba(0, 0, 0, 0.125);\n}\n\n.accordion-item:first-of-type {\n  border-top-left-radius: 0.25rem;\n  border-top-right-radius: 0.25rem;\n}\n\n.accordion-item:first-of-type .accordion-button {\n  border-top-left-radius: calc(0.25rem - 1px);\n  border-top-right-radius: calc(0.25rem - 1px);\n}\n\n.accordion-item:not(:first-of-type) {\n  border-top: 0;\n}\n\n.accordion-item:last-of-type {\n  border-bottom-right-radius: 0.25rem;\n  border-bottom-left-radius: 0.25rem;\n}\n\n.accordion-item:last-of-type .accordion-button.collapsed {\n  border-bottom-right-radius: calc(0.25rem - 1px);\n  border-bottom-left-radius: calc(0.25rem - 1px);\n}\n\n.accordion-item:last-of-type .accordion-collapse {\n  border-bottom-right-radius: 0.25rem;\n  border-bottom-left-radius: 0.25rem;\n}\n\n.accordion-body {\n  padding: 1rem 1.25rem;\n}\n\n.accordion-flush .accordion-collapse {\n  border-width: 0;\n}\n\n.accordion-flush .accordion-item {\n  border-right: 0;\n  border-left: 0;\n  border-radius: 0;\n}\n\n.accordion-flush .accordion-item:first-child {\n  border-top: 0;\n}\n\n.accordion-flush .accordion-item:last-child {\n  border-bottom: 0;\n}\n\n.accordion-flush .accordion-item .accordion-button {\n  border-radius: 0;\n}\n\n.breadcrumb {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n  flex-wrap: wrap;\n  padding: 0 0;\n  margin-bottom: 1rem;\n  list-style: none;\n}\n\n.breadcrumb-item + .breadcrumb-item {\n  padding-left: 0.5rem;\n}\n\n.breadcrumb-item + .breadcrumb-item::before {\n  float: left;\n  padding-right: 0.5rem;\n  color: #777;\n  content: var(--bs-breadcrumb-divider, \"/\") /* rtl: var(--bs-breadcrumb-divider, \"/\") */;\n}\n\n.breadcrumb-item.active {\n  color: #777;\n}\n\n.pagination {\n  display: -ms-flexbox;\n  display: flex;\n  padding-left: 0;\n  list-style: none;\n}\n\n.page-link {\n  position: relative;\n  display: block;\n  color: #eb6864;\n  text-decoration: none;\n  background-color: #fff;\n  border: 1px solid #dee2e6;\n  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .page-link {\n    transition: none;\n  }\n}\n\n.page-link:hover {\n  z-index: 2;\n  color: #fff;\n  background-color: #eb6864;\n  border-color: #eb6864;\n}\n\n.page-link:focus {\n  z-index: 3;\n  color: #bc5350;\n  background-color: #eee;\n  outline: 0;\n  box-shadow: 0 0 0 0.25rem rgba(235, 104, 100, 0.25);\n}\n\n.page-item:not(:first-child) .page-link {\n  margin-left: -1px;\n}\n\n.page-item.active .page-link {\n  z-index: 3;\n  color: #fff;\n  background-color: #eb6864;\n  border-color: #eb6864;\n}\n\n.page-item.disabled .page-link {\n  color: #777;\n  pointer-events: none;\n  background-color: #fff;\n  border-color: #dee2e6;\n}\n\n.page-link {\n  padding: 0.375rem 0.75rem;\n}\n\n.page-item:first-child .page-link {\n  border-top-left-radius: 0.25rem;\n  border-bottom-left-radius: 0.25rem;\n}\n\n.page-item:last-child .page-link {\n  border-top-right-radius: 0.25rem;\n  border-bottom-right-radius: 0.25rem;\n}\n\n.pagination-lg .page-link {\n  padding: 0.75rem 1.5rem;\n  font-size: 1.25rem;\n}\n\n.pagination-lg .page-item:first-child .page-link {\n  border-top-left-radius: 0.3rem;\n  border-bottom-left-radius: 0.3rem;\n}\n\n.pagination-lg .page-item:last-child .page-link {\n  border-top-right-radius: 0.3rem;\n  border-bottom-right-radius: 0.3rem;\n}\n\n.pagination-sm .page-link {\n  padding: 0.25rem 0.5rem;\n  font-size: 0.875rem;\n}\n\n.pagination-sm .page-item:first-child .page-link {\n  border-top-left-radius: 0.2rem;\n  border-bottom-left-radius: 0.2rem;\n}\n\n.pagination-sm .page-item:last-child .page-link {\n  border-top-right-radius: 0.2rem;\n  border-bottom-right-radius: 0.2rem;\n}\n\n.badge {\n  display: inline-block;\n  padding: 0.35em 0.65em;\n  font-size: 0.75em;\n  font-weight: 700;\n  line-height: 1;\n  color: #fff;\n  text-align: center;\n  white-space: nowrap;\n  vertical-align: baseline;\n  border-radius: 0.25rem;\n}\n\n.badge:empty {\n  display: none;\n}\n\n.btn .badge {\n  position: relative;\n  top: -1px;\n}\n\n.alert {\n  position: relative;\n  padding: 1rem 1rem;\n  margin-bottom: 1rem;\n  border: 1px solid transparent;\n  border-radius: 0.25rem;\n}\n\n.alert-heading {\n  color: inherit;\n}\n\n.alert-link {\n  font-weight: 700;\n}\n\n.alert-dismissible {\n  padding-right: 3rem;\n}\n\n.alert-dismissible .btn-close {\n  position: absolute;\n  top: 0;\n  right: 0;\n  z-index: 2;\n  padding: 1.25rem 1rem;\n}\n\n.alert-primary {\n  color: #8d3e3c;\n  background-color: #fbe1e0;\n  border-color: #f9d2d1;\n}\n\n.alert-primary .alert-link {\n  color: #713230;\n}\n\n.alert-secondary {\n  color: #666666;\n  background-color: #eeeeee;\n  border-color: #e6e6e6;\n}\n\n.alert-secondary .alert-link {\n  color: #525252;\n}\n\n.alert-success {\n  color: #146b2e;\n  background-color: #d3f0db;\n  border-color: #bde8c9;\n}\n\n.alert-success .alert-link {\n  color: #105625;\n}\n\n.alert-info {\n  color: #1f3d5c;\n  background-color: #d6e0eb;\n  border-color: #c2d1e0;\n}\n\n.alert-info .alert-link {\n  color: #19314a;\n}\n\n.alert-warning {\n  color: #938a16;\n  background-color: #fdfad3;\n  border-color: #fcf8be;\n}\n\n.alert-warning .alert-link {\n  color: #766e12;\n}\n\n.alert-danger {\n  color: #934900;\n  background-color: #fde4cc;\n  border-color: #fcd7b3;\n}\n\n.alert-danger .alert-link {\n  color: #763a00;\n}\n\n.alert-light {\n  color: #959596;\n  background-color: #fefefe;\n  border-color: #fdfdfe;\n}\n\n.alert-light .alert-link {\n  color: #777778;\n}\n\n.alert-dark {\n  color: #141414;\n  background-color: lightgray;\n  border-color: #bdbdbd;\n}\n\n.alert-dark .alert-link {\n  color: #101010;\n}\n\n@-webkit-keyframes progress-bar-stripes {\n  0% {\n    background-position-x: 1rem;\n  }\n}\n\n@keyframes progress-bar-stripes {\n  0% {\n    background-position-x: 1rem;\n  }\n}\n\n.progress {\n  display: -ms-flexbox;\n  display: flex;\n  height: 1rem;\n  overflow: hidden;\n  font-size: 0.75rem;\n  background-color: #eee;\n  border-radius: 0.25rem;\n}\n\n.progress-bar {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  -ms-flex-pack: center;\n  justify-content: center;\n  overflow: hidden;\n  color: #fff;\n  text-align: center;\n  white-space: nowrap;\n  background-color: #eb6864;\n  transition: width 0.6s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .progress-bar {\n    transition: none;\n  }\n}\n\n.progress-bar-striped {\n  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-size: 1rem 1rem;\n}\n\n.progress-bar-animated {\n  -webkit-animation: 1s linear infinite progress-bar-stripes;\n  animation: 1s linear infinite progress-bar-stripes;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .progress-bar-animated {\n    -webkit-animation: none;\n    animation: none;\n  }\n}\n\n.list-group {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  padding-left: 0;\n  margin-bottom: 0;\n  border-radius: 0.25rem;\n}\n\n.list-group-numbered {\n  list-style-type: none;\n  counter-reset: section;\n}\n\n.list-group-numbered > li::before {\n  content: counters(section, \".\") \". \";\n  counter-increment: section;\n}\n\n.list-group-item-action {\n  width: 100%;\n  color: #495057;\n  text-align: inherit;\n}\n\n.list-group-item-action:hover, .list-group-item-action:focus {\n  z-index: 1;\n  color: #495057;\n  text-decoration: none;\n  background-color: #f8f9fa;\n}\n\n.list-group-item-action:active {\n  color: #222;\n  background-color: #eee;\n}\n\n.list-group-item {\n  position: relative;\n  display: block;\n  padding: 0.5rem 1rem;\n  color: #222;\n  text-decoration: none;\n  background-color: #fff;\n  border: 1px solid rgba(0, 0, 0, 0.125);\n}\n\n.list-group-item:first-child {\n  border-top-left-radius: inherit;\n  border-top-right-radius: inherit;\n}\n\n.list-group-item:last-child {\n  border-bottom-right-radius: inherit;\n  border-bottom-left-radius: inherit;\n}\n\n.list-group-item.disabled, .list-group-item:disabled {\n  color: #777;\n  pointer-events: none;\n  background-color: #fff;\n}\n\n.list-group-item.active {\n  z-index: 2;\n  color: #fff;\n  background-color: #eb6864;\n  border-color: #eb6864;\n}\n\n.list-group-item + .list-group-item {\n  border-top-width: 0;\n}\n\n.list-group-item + .list-group-item.active {\n  margin-top: -1px;\n  border-top-width: 1px;\n}\n\n.list-group-horizontal {\n  -ms-flex-direction: row;\n  flex-direction: row;\n}\n\n.list-group-horizontal > .list-group-item:first-child {\n  border-bottom-left-radius: 0.25rem;\n  border-top-right-radius: 0;\n}\n\n.list-group-horizontal > .list-group-item:last-child {\n  border-top-right-radius: 0.25rem;\n  border-bottom-left-radius: 0;\n}\n\n.list-group-horizontal > .list-group-item.active {\n  margin-top: 0;\n}\n\n.list-group-horizontal > .list-group-item + .list-group-item {\n  border-top-width: 1px;\n  border-left-width: 0;\n}\n\n.list-group-horizontal > .list-group-item + .list-group-item.active {\n  margin-left: -1px;\n  border-left-width: 1px;\n}\n\n@media (min-width: 576px) {\n  .list-group-horizontal-sm {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .list-group-horizontal-sm > .list-group-item:first-child {\n    border-bottom-left-radius: 0.25rem;\n    border-top-right-radius: 0;\n  }\n  .list-group-horizontal-sm > .list-group-item:last-child {\n    border-top-right-radius: 0.25rem;\n    border-bottom-left-radius: 0;\n  }\n  .list-group-horizontal-sm > .list-group-item.active {\n    margin-top: 0;\n  }\n  .list-group-horizontal-sm > .list-group-item + .list-group-item {\n    border-top-width: 1px;\n    border-left-width: 0;\n  }\n  .list-group-horizontal-sm > .list-group-item + .list-group-item.active {\n    margin-left: -1px;\n    border-left-width: 1px;\n  }\n}\n\n@media (min-width: 768px) {\n  .list-group-horizontal-md {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .list-group-horizontal-md > .list-group-item:first-child {\n    border-bottom-left-radius: 0.25rem;\n    border-top-right-radius: 0;\n  }\n  .list-group-horizontal-md > .list-group-item:last-child {\n    border-top-right-radius: 0.25rem;\n    border-bottom-left-radius: 0;\n  }\n  .list-group-horizontal-md > .list-group-item.active {\n    margin-top: 0;\n  }\n  .list-group-horizontal-md > .list-group-item + .list-group-item {\n    border-top-width: 1px;\n    border-left-width: 0;\n  }\n  .list-group-horizontal-md > .list-group-item + .list-group-item.active {\n    margin-left: -1px;\n    border-left-width: 1px;\n  }\n}\n\n@media (min-width: 992px) {\n  .list-group-horizontal-lg {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .list-group-horizontal-lg > .list-group-item:first-child {\n    border-bottom-left-radius: 0.25rem;\n    border-top-right-radius: 0;\n  }\n  .list-group-horizontal-lg > .list-group-item:last-child {\n    border-top-right-radius: 0.25rem;\n    border-bottom-left-radius: 0;\n  }\n  .list-group-horizontal-lg > .list-group-item.active {\n    margin-top: 0;\n  }\n  .list-group-horizontal-lg > .list-group-item + .list-group-item {\n    border-top-width: 1px;\n    border-left-width: 0;\n  }\n  .list-group-horizontal-lg > .list-group-item + .list-group-item.active {\n    margin-left: -1px;\n    border-left-width: 1px;\n  }\n}\n\n@media (min-width: 1200px) {\n  .list-group-horizontal-xl {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .list-group-horizontal-xl > .list-group-item:first-child {\n    border-bottom-left-radius: 0.25rem;\n    border-top-right-radius: 0;\n  }\n  .list-group-horizontal-xl > .list-group-item:last-child {\n    border-top-right-radius: 0.25rem;\n    border-bottom-left-radius: 0;\n  }\n  .list-group-horizontal-xl > .list-group-item.active {\n    margin-top: 0;\n  }\n  .list-group-horizontal-xl > .list-group-item + .list-group-item {\n    border-top-width: 1px;\n    border-left-width: 0;\n  }\n  .list-group-horizontal-xl > .list-group-item + .list-group-item.active {\n    margin-left: -1px;\n    border-left-width: 1px;\n  }\n}\n\n@media (min-width: 1400px) {\n  .list-group-horizontal-xxl {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .list-group-horizontal-xxl > .list-group-item:first-child {\n    border-bottom-left-radius: 0.25rem;\n    border-top-right-radius: 0;\n  }\n  .list-group-horizontal-xxl > .list-group-item:last-child {\n    border-top-right-radius: 0.25rem;\n    border-bottom-left-radius: 0;\n  }\n  .list-group-horizontal-xxl > .list-group-item.active {\n    margin-top: 0;\n  }\n  .list-group-horizontal-xxl > .list-group-item + .list-group-item {\n    border-top-width: 1px;\n    border-left-width: 0;\n  }\n  .list-group-horizontal-xxl > .list-group-item + .list-group-item.active {\n    margin-left: -1px;\n    border-left-width: 1px;\n  }\n}\n\n.list-group-flush {\n  border-radius: 0;\n}\n\n.list-group-flush > .list-group-item {\n  border-width: 0 0 1px;\n}\n\n.list-group-flush > .list-group-item:last-child {\n  border-bottom-width: 0;\n}\n\n.list-group-item-primary {\n  color: #8d3e3c;\n  background-color: #fbe1e0;\n}\n\n.list-group-item-primary.list-group-item-action:hover, .list-group-item-primary.list-group-item-action:focus {\n  color: #8d3e3c;\n  background-color: #e2cbca;\n}\n\n.list-group-item-primary.list-group-item-action.active {\n  color: #fff;\n  background-color: #8d3e3c;\n  border-color: #8d3e3c;\n}\n\n.list-group-item-secondary {\n  color: #666666;\n  background-color: #eeeeee;\n}\n\n.list-group-item-secondary.list-group-item-action:hover, .list-group-item-secondary.list-group-item-action:focus {\n  color: #666666;\n  background-color: #d6d6d6;\n}\n\n.list-group-item-secondary.list-group-item-action.active {\n  color: #fff;\n  background-color: #666666;\n  border-color: #666666;\n}\n\n.list-group-item-success {\n  color: #146b2e;\n  background-color: #d3f0db;\n}\n\n.list-group-item-success.list-group-item-action:hover, .list-group-item-success.list-group-item-action:focus {\n  color: #146b2e;\n  background-color: #bed8c5;\n}\n\n.list-group-item-success.list-group-item-action.active {\n  color: #fff;\n  background-color: #146b2e;\n  border-color: #146b2e;\n}\n\n.list-group-item-info {\n  color: #1f3d5c;\n  background-color: #d6e0eb;\n}\n\n.list-group-item-info.list-group-item-action:hover, .list-group-item-info.list-group-item-action:focus {\n  color: #1f3d5c;\n  background-color: #c1cad4;\n}\n\n.list-group-item-info.list-group-item-action.active {\n  color: #fff;\n  background-color: #1f3d5c;\n  border-color: #1f3d5c;\n}\n\n.list-group-item-warning {\n  color: #938a16;\n  background-color: #fdfad3;\n}\n\n.list-group-item-warning.list-group-item-action:hover, .list-group-item-warning.list-group-item-action:focus {\n  color: #938a16;\n  background-color: #e4e1be;\n}\n\n.list-group-item-warning.list-group-item-action.active {\n  color: #fff;\n  background-color: #938a16;\n  border-color: #938a16;\n}\n\n.list-group-item-danger {\n  color: #934900;\n  background-color: #fde4cc;\n}\n\n.list-group-item-danger.list-group-item-action:hover, .list-group-item-danger.list-group-item-action:focus {\n  color: #934900;\n  background-color: #e4cdb8;\n}\n\n.list-group-item-danger.list-group-item-action.active {\n  color: #fff;\n  background-color: #934900;\n  border-color: #934900;\n}\n\n.list-group-item-light {\n  color: #959596;\n  background-color: #fefefe;\n}\n\n.list-group-item-light.list-group-item-action:hover, .list-group-item-light.list-group-item-action:focus {\n  color: #959596;\n  background-color: #e5e5e5;\n}\n\n.list-group-item-light.list-group-item-action.active {\n  color: #fff;\n  background-color: #959596;\n  border-color: #959596;\n}\n\n.list-group-item-dark {\n  color: #141414;\n  background-color: lightgray;\n}\n\n.list-group-item-dark.list-group-item-action:hover, .list-group-item-dark.list-group-item-action:focus {\n  color: #141414;\n  background-color: #bebebe;\n}\n\n.list-group-item-dark.list-group-item-action.active {\n  color: #fff;\n  background-color: #141414;\n  border-color: #141414;\n}\n\n.btn-close {\n  box-sizing: content-box;\n  width: 1em;\n  height: 1em;\n  padding: 0.25em 0.25em;\n  color: #000;\n  background: transparent url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23000'%3e%3cpath d='M.293.293a1 1 0 011.414 0L8 6.586 14.293.293a1 1 0 111.414 1.414L9.414 8l6.293 6.293a1 1 0 01-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 01-1.414-1.414L6.586 8 .293 1.707a1 1 0 010-1.414z'/%3e%3c/svg%3e\") center/1em auto no-repeat;\n  border: 0;\n  border-radius: 0.25rem;\n  opacity: 0.5;\n}\n\n.btn-close:hover {\n  color: #000;\n  text-decoration: none;\n  opacity: 0.75;\n}\n\n.btn-close:focus {\n  outline: 0;\n  box-shadow: 0 0 0 0.25rem rgba(235, 104, 100, 0.25);\n  opacity: 1;\n}\n\n.btn-close:disabled, .btn-close.disabled {\n  pointer-events: none;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  user-select: none;\n  opacity: 0.25;\n}\n\n.btn-close-white {\n  -webkit-filter: invert(1) grayscale(100%) brightness(200%);\n  filter: invert(1) grayscale(100%) brightness(200%);\n}\n\n.toast {\n  width: 350px;\n  max-width: 100%;\n  font-size: 0.875rem;\n  pointer-events: auto;\n  background-color: rgba(255, 255, 255, 0.85);\n  background-clip: padding-box;\n  border: 1px solid rgba(0, 0, 0, 0.1);\n  box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15);\n  border-radius: 0.25rem;\n}\n\n.toast.showing {\n  opacity: 0;\n}\n\n.toast:not(.show) {\n  display: none;\n}\n\n.toast-container {\n  width: -webkit-max-content;\n  width: -moz-max-content;\n  width: max-content;\n  max-width: 100%;\n  pointer-events: none;\n}\n\n.toast-container > :not(:last-child) {\n  margin-bottom: 0.75rem;\n}\n\n.toast-header {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-align: center;\n  align-items: center;\n  padding: 0.5rem 0.75rem;\n  color: #777;\n  background-color: rgba(255, 255, 255, 0.85);\n  background-clip: padding-box;\n  border-bottom: 1px solid rgba(0, 0, 0, 0.05);\n  border-top-left-radius: calc(0.25rem - 1px);\n  border-top-right-radius: calc(0.25rem - 1px);\n}\n\n.toast-header .btn-close {\n  margin-right: -0.375rem;\n  margin-left: 0.75rem;\n}\n\n.toast-body {\n  padding: 0.75rem;\n  word-wrap: break-word;\n}\n\n.modal {\n  position: fixed;\n  top: 0;\n  left: 0;\n  z-index: 1055;\n  display: none;\n  width: 100%;\n  height: 100%;\n  overflow-x: hidden;\n  overflow-y: auto;\n  outline: 0;\n}\n\n.modal-dialog {\n  position: relative;\n  width: auto;\n  margin: 0.5rem;\n  pointer-events: none;\n}\n\n.modal.fade .modal-dialog {\n  transition: -webkit-transform 0.3s ease-out;\n  transition: transform 0.3s ease-out;\n  transition: transform 0.3s ease-out, -webkit-transform 0.3s ease-out;\n  -webkit-transform: translate(0, -50px);\n  transform: translate(0, -50px);\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .modal.fade .modal-dialog {\n    transition: none;\n  }\n}\n\n.modal.show .modal-dialog {\n  -webkit-transform: none;\n  transform: none;\n}\n\n.modal.modal-static .modal-dialog {\n  -webkit-transform: scale(1.02);\n  transform: scale(1.02);\n}\n\n.modal-dialog-scrollable {\n  height: calc(100% - 1rem);\n}\n\n.modal-dialog-scrollable .modal-content {\n  max-height: 100%;\n  overflow: hidden;\n}\n\n.modal-dialog-scrollable .modal-body {\n  overflow-y: auto;\n}\n\n.modal-dialog-centered {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-align: center;\n  align-items: center;\n  min-height: calc(100% - 1rem);\n}\n\n.modal-content {\n  position: relative;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  width: 100%;\n  pointer-events: auto;\n  background-color: #fff;\n  background-clip: padding-box;\n  border: 1px solid rgba(0, 0, 0, 0.2);\n  border-radius: 0.3rem;\n  outline: 0;\n}\n\n.modal-backdrop {\n  position: fixed;\n  top: 0;\n  left: 0;\n  z-index: 1050;\n  width: 100vw;\n  height: 100vh;\n  background-color: #000;\n}\n\n.modal-backdrop.fade {\n  opacity: 0;\n}\n\n.modal-backdrop.show {\n  opacity: 0.5;\n}\n\n.modal-header {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-negative: 0;\n  flex-shrink: 0;\n  -ms-flex-align: center;\n  align-items: center;\n  -ms-flex-pack: justify;\n  justify-content: space-between;\n  padding: 1rem 1rem;\n  border-bottom: 1px solid #dee2e6;\n  border-top-left-radius: calc(0.3rem - 1px);\n  border-top-right-radius: calc(0.3rem - 1px);\n}\n\n.modal-header .btn-close {\n  padding: 0.5rem 0.5rem;\n  margin: -0.5rem -0.5rem -0.5rem auto;\n}\n\n.modal-title {\n  margin-bottom: 0;\n  line-height: 1.5;\n}\n\n.modal-body {\n  position: relative;\n  -ms-flex: 1 1 auto;\n  flex: 1 1 auto;\n  padding: 1rem;\n}\n\n.modal-footer {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n  flex-wrap: wrap;\n  -ms-flex-negative: 0;\n  flex-shrink: 0;\n  -ms-flex-align: center;\n  align-items: center;\n  -ms-flex-pack: end;\n  justify-content: flex-end;\n  padding: 0.75rem;\n  border-top: 1px solid #dee2e6;\n  border-bottom-right-radius: calc(0.3rem - 1px);\n  border-bottom-left-radius: calc(0.3rem - 1px);\n}\n\n.modal-footer > * {\n  margin: 0.25rem;\n}\n\n@media (min-width: 576px) {\n  .modal-dialog {\n    max-width: 500px;\n    margin: 1.75rem auto;\n  }\n  .modal-dialog-scrollable {\n    height: calc(100% - 3.5rem);\n  }\n  .modal-dialog-centered {\n    min-height: calc(100% - 3.5rem);\n  }\n  .modal-sm {\n    max-width: 300px;\n  }\n}\n\n@media (min-width: 992px) {\n  .modal-lg,\n  .modal-xl {\n    max-width: 800px;\n  }\n}\n\n@media (min-width: 1200px) {\n  .modal-xl {\n    max-width: 1140px;\n  }\n}\n\n.modal-fullscreen {\n  width: 100vw;\n  max-width: none;\n  height: 100%;\n  margin: 0;\n}\n\n.modal-fullscreen .modal-content {\n  height: 100%;\n  border: 0;\n  border-radius: 0;\n}\n\n.modal-fullscreen .modal-header {\n  border-radius: 0;\n}\n\n.modal-fullscreen .modal-body {\n  overflow-y: auto;\n}\n\n.modal-fullscreen .modal-footer {\n  border-radius: 0;\n}\n\n@media (max-width: 575.98px) {\n  .modal-fullscreen-sm-down {\n    width: 100vw;\n    max-width: none;\n    height: 100%;\n    margin: 0;\n  }\n  .modal-fullscreen-sm-down .modal-content {\n    height: 100%;\n    border: 0;\n    border-radius: 0;\n  }\n  .modal-fullscreen-sm-down .modal-header {\n    border-radius: 0;\n  }\n  .modal-fullscreen-sm-down .modal-body {\n    overflow-y: auto;\n  }\n  .modal-fullscreen-sm-down .modal-footer {\n    border-radius: 0;\n  }\n}\n\n@media (max-width: 767.98px) {\n  .modal-fullscreen-md-down {\n    width: 100vw;\n    max-width: none;\n    height: 100%;\n    margin: 0;\n  }\n  .modal-fullscreen-md-down .modal-content {\n    height: 100%;\n    border: 0;\n    border-radius: 0;\n  }\n  .modal-fullscreen-md-down .modal-header {\n    border-radius: 0;\n  }\n  .modal-fullscreen-md-down .modal-body {\n    overflow-y: auto;\n  }\n  .modal-fullscreen-md-down .modal-footer {\n    border-radius: 0;\n  }\n}\n\n@media (max-width: 991.98px) {\n  .modal-fullscreen-lg-down {\n    width: 100vw;\n    max-width: none;\n    height: 100%;\n    margin: 0;\n  }\n  .modal-fullscreen-lg-down .modal-content {\n    height: 100%;\n    border: 0;\n    border-radius: 0;\n  }\n  .modal-fullscreen-lg-down .modal-header {\n    border-radius: 0;\n  }\n  .modal-fullscreen-lg-down .modal-body {\n    overflow-y: auto;\n  }\n  .modal-fullscreen-lg-down .modal-footer {\n    border-radius: 0;\n  }\n}\n\n@media (max-width: 1199.98px) {\n  .modal-fullscreen-xl-down {\n    width: 100vw;\n    max-width: none;\n    height: 100%;\n    margin: 0;\n  }\n  .modal-fullscreen-xl-down .modal-content {\n    height: 100%;\n    border: 0;\n    border-radius: 0;\n  }\n  .modal-fullscreen-xl-down .modal-header {\n    border-radius: 0;\n  }\n  .modal-fullscreen-xl-down .modal-body {\n    overflow-y: auto;\n  }\n  .modal-fullscreen-xl-down .modal-footer {\n    border-radius: 0;\n  }\n}\n\n@media (max-width: 1399.98px) {\n  .modal-fullscreen-xxl-down {\n    width: 100vw;\n    max-width: none;\n    height: 100%;\n    margin: 0;\n  }\n  .modal-fullscreen-xxl-down .modal-content {\n    height: 100%;\n    border: 0;\n    border-radius: 0;\n  }\n  .modal-fullscreen-xxl-down .modal-header {\n    border-radius: 0;\n  }\n  .modal-fullscreen-xxl-down .modal-body {\n    overflow-y: auto;\n  }\n  .modal-fullscreen-xxl-down .modal-footer {\n    border-radius: 0;\n  }\n}\n\n.tooltip {\n  position: absolute;\n  z-index: 1080;\n  display: block;\n  margin: 0;\n  font-family: var(--bs-font-sans-serif);\n  font-style: normal;\n  font-weight: 400;\n  line-height: 1.5;\n  text-align: left;\n  text-align: start;\n  text-decoration: none;\n  text-shadow: none;\n  text-transform: none;\n  letter-spacing: normal;\n  word-break: normal;\n  word-spacing: normal;\n  white-space: normal;\n  line-break: auto;\n  font-size: 0.875rem;\n  word-wrap: break-word;\n  opacity: 0;\n}\n\n.tooltip.show {\n  opacity: 0.9;\n}\n\n.tooltip .tooltip-arrow {\n  position: absolute;\n  display: block;\n  width: 0.8rem;\n  height: 0.4rem;\n}\n\n.tooltip .tooltip-arrow::before {\n  position: absolute;\n  content: \"\";\n  border-color: transparent;\n  border-style: solid;\n}\n\n.bs-tooltip-top, .bs-tooltip-auto[data-popper-placement^=\"top\"] {\n  padding: 0.4rem 0;\n}\n\n.bs-tooltip-top .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=\"top\"] .tooltip-arrow {\n  bottom: 0;\n}\n\n.bs-tooltip-top .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=\"top\"] .tooltip-arrow::before {\n  top: -1px;\n  border-width: 0.4rem 0.4rem 0;\n  border-top-color: #000;\n}\n\n.bs-tooltip-end, .bs-tooltip-auto[data-popper-placement^=\"right\"] {\n  padding: 0 0.4rem;\n}\n\n.bs-tooltip-end .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=\"right\"] .tooltip-arrow {\n  left: 0;\n  width: 0.4rem;\n  height: 0.8rem;\n}\n\n.bs-tooltip-end .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=\"right\"] .tooltip-arrow::before {\n  right: -1px;\n  border-width: 0.4rem 0.4rem 0.4rem 0;\n  border-right-color: #000;\n}\n\n.bs-tooltip-bottom, .bs-tooltip-auto[data-popper-placement^=\"bottom\"] {\n  padding: 0.4rem 0;\n}\n\n.bs-tooltip-bottom .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=\"bottom\"] .tooltip-arrow {\n  top: 0;\n}\n\n.bs-tooltip-bottom .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=\"bottom\"] .tooltip-arrow::before {\n  bottom: -1px;\n  border-width: 0 0.4rem 0.4rem;\n  border-bottom-color: #000;\n}\n\n.bs-tooltip-start, .bs-tooltip-auto[data-popper-placement^=\"left\"] {\n  padding: 0 0.4rem;\n}\n\n.bs-tooltip-start .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=\"left\"] .tooltip-arrow {\n  right: 0;\n  width: 0.4rem;\n  height: 0.8rem;\n}\n\n.bs-tooltip-start .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=\"left\"] .tooltip-arrow::before {\n  left: -1px;\n  border-width: 0.4rem 0 0.4rem 0.4rem;\n  border-left-color: #000;\n}\n\n.tooltip-inner {\n  max-width: 200px;\n  padding: 0.25rem 0.5rem;\n  color: #fff;\n  text-align: center;\n  background-color: #000;\n  border-radius: 0.25rem;\n}\n\n.popover {\n  position: absolute;\n  top: 0;\n  left: 0 /* rtl:ignore */;\n  z-index: 1070;\n  display: block;\n  max-width: 276px;\n  font-family: var(--bs-font-sans-serif);\n  font-style: normal;\n  font-weight: 400;\n  line-height: 1.5;\n  text-align: left;\n  text-align: start;\n  text-decoration: none;\n  text-shadow: none;\n  text-transform: none;\n  letter-spacing: normal;\n  word-break: normal;\n  word-spacing: normal;\n  white-space: normal;\n  line-break: auto;\n  font-size: 0.875rem;\n  word-wrap: break-word;\n  background-color: #fff;\n  background-clip: padding-box;\n  border: 1px solid rgba(0, 0, 0, 0.2);\n  border-radius: 0.3rem;\n}\n\n.popover .popover-arrow {\n  position: absolute;\n  display: block;\n  width: 1rem;\n  height: 0.5rem;\n}\n\n.popover .popover-arrow::before, .popover .popover-arrow::after {\n  position: absolute;\n  display: block;\n  content: \"\";\n  border-color: transparent;\n  border-style: solid;\n}\n\n.bs-popover-top > .popover-arrow, .bs-popover-auto[data-popper-placement^=\"top\"] > .popover-arrow {\n  bottom: calc(-0.5rem - 1px);\n}\n\n.bs-popover-top > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=\"top\"] > .popover-arrow::before {\n  bottom: 0;\n  border-width: 0.5rem 0.5rem 0;\n  border-top-color: rgba(0, 0, 0, 0.25);\n}\n\n.bs-popover-top > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=\"top\"] > .popover-arrow::after {\n  bottom: 1px;\n  border-width: 0.5rem 0.5rem 0;\n  border-top-color: #fff;\n}\n\n.bs-popover-end > .popover-arrow, .bs-popover-auto[data-popper-placement^=\"right\"] > .popover-arrow {\n  left: calc(-0.5rem - 1px);\n  width: 0.5rem;\n  height: 1rem;\n}\n\n.bs-popover-end > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=\"right\"] > .popover-arrow::before {\n  left: 0;\n  border-width: 0.5rem 0.5rem 0.5rem 0;\n  border-right-color: rgba(0, 0, 0, 0.25);\n}\n\n.bs-popover-end > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=\"right\"] > .popover-arrow::after {\n  left: 1px;\n  border-width: 0.5rem 0.5rem 0.5rem 0;\n  border-right-color: #fff;\n}\n\n.bs-popover-bottom > .popover-arrow, .bs-popover-auto[data-popper-placement^=\"bottom\"] > .popover-arrow {\n  top: calc(-0.5rem - 1px);\n}\n\n.bs-popover-bottom > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=\"bottom\"] > .popover-arrow::before {\n  top: 0;\n  border-width: 0 0.5rem 0.5rem 0.5rem;\n  border-bottom-color: rgba(0, 0, 0, 0.25);\n}\n\n.bs-popover-bottom > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=\"bottom\"] > .popover-arrow::after {\n  top: 1px;\n  border-width: 0 0.5rem 0.5rem 0.5rem;\n  border-bottom-color: #fff;\n}\n\n.bs-popover-bottom .popover-header::before, .bs-popover-auto[data-popper-placement^=\"bottom\"] .popover-header::before {\n  position: absolute;\n  top: 0;\n  left: 50%;\n  display: block;\n  width: 1rem;\n  margin-left: -0.5rem;\n  content: \"\";\n  border-bottom: 1px solid #f0f0f0;\n}\n\n.bs-popover-start > .popover-arrow, .bs-popover-auto[data-popper-placement^=\"left\"] > .popover-arrow {\n  right: calc(-0.5rem - 1px);\n  width: 0.5rem;\n  height: 1rem;\n}\n\n.bs-popover-start > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=\"left\"] > .popover-arrow::before {\n  right: 0;\n  border-width: 0.5rem 0 0.5rem 0.5rem;\n  border-left-color: rgba(0, 0, 0, 0.25);\n}\n\n.bs-popover-start > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=\"left\"] > .popover-arrow::after {\n  right: 1px;\n  border-width: 0.5rem 0 0.5rem 0.5rem;\n  border-left-color: #fff;\n}\n\n.popover-header {\n  padding: 0.5rem 1rem;\n  margin-bottom: 0;\n  font-size: 1rem;\n  background-color: #f0f0f0;\n  border-bottom: 1px solid rgba(0, 0, 0, 0.2);\n  border-top-left-radius: calc(0.3rem - 1px);\n  border-top-right-radius: calc(0.3rem - 1px);\n}\n\n.popover-header:empty {\n  display: none;\n}\n\n.popover-body {\n  padding: 1rem 1rem;\n  color: #222;\n}\n\n.carousel {\n  position: relative;\n}\n\n.carousel.pointer-event {\n  -ms-touch-action: pan-y;\n  touch-action: pan-y;\n}\n\n.carousel-inner {\n  position: relative;\n  width: 100%;\n  overflow: hidden;\n}\n\n.carousel-inner::after {\n  display: block;\n  clear: both;\n  content: \"\";\n}\n\n.carousel-item {\n  position: relative;\n  display: none;\n  float: left;\n  width: 100%;\n  margin-right: -100%;\n  -webkit-backface-visibility: hidden;\n  backface-visibility: hidden;\n  transition: -webkit-transform 0.6s ease-in-out;\n  transition: transform 0.6s ease-in-out;\n  transition: transform 0.6s ease-in-out, -webkit-transform 0.6s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .carousel-item {\n    transition: none;\n  }\n}\n\n.carousel-item.active,\n.carousel-item-next,\n.carousel-item-prev {\n  display: block;\n}\n\n/* rtl:begin:ignore */\n.carousel-item-next:not(.carousel-item-start),\n.active.carousel-item-end {\n  -webkit-transform: translateX(100%);\n  transform: translateX(100%);\n}\n\n.carousel-item-prev:not(.carousel-item-end),\n.active.carousel-item-start {\n  -webkit-transform: translateX(-100%);\n  transform: translateX(-100%);\n}\n\n/* rtl:end:ignore */\n.carousel-fade .carousel-item {\n  opacity: 0;\n  transition-property: opacity;\n  -webkit-transform: none;\n  transform: none;\n}\n\n.carousel-fade .carousel-item.active,\n.carousel-fade .carousel-item-next.carousel-item-start,\n.carousel-fade .carousel-item-prev.carousel-item-end {\n  z-index: 1;\n  opacity: 1;\n}\n\n.carousel-fade .active.carousel-item-start,\n.carousel-fade .active.carousel-item-end {\n  z-index: 0;\n  opacity: 0;\n  transition: opacity 0s 0.6s;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .carousel-fade .active.carousel-item-start,\n  .carousel-fade .active.carousel-item-end {\n    transition: none;\n  }\n}\n\n.carousel-control-prev,\n.carousel-control-next {\n  position: absolute;\n  top: 0;\n  bottom: 0;\n  z-index: 1;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-align: center;\n  align-items: center;\n  -ms-flex-pack: center;\n  justify-content: center;\n  width: 15%;\n  padding: 0;\n  color: #fff;\n  text-align: center;\n  background: none;\n  border: 0;\n  opacity: 0.5;\n  transition: opacity 0.15s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .carousel-control-prev,\n  .carousel-control-next {\n    transition: none;\n  }\n}\n\n.carousel-control-prev:hover, .carousel-control-prev:focus,\n.carousel-control-next:hover,\n.carousel-control-next:focus {\n  color: #fff;\n  text-decoration: none;\n  outline: 0;\n  opacity: 0.9;\n}\n\n.carousel-control-prev {\n  left: 0;\n}\n\n.carousel-control-next {\n  right: 0;\n}\n\n.carousel-control-prev-icon,\n.carousel-control-next-icon {\n  display: inline-block;\n  width: 2rem;\n  height: 2rem;\n  background-repeat: no-repeat;\n  background-position: 50%;\n  background-size: 100% 100%;\n}\n\n/* rtl:options: {\n  \"autoRename\": true,\n  \"stringMap\":[ {\n    \"name\"    : \"prev-next\",\n    \"search\"  : \"prev\",\n    \"replace\" : \"next\"\n  } ]\n} */\n.carousel-control-prev-icon {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0z'/%3e%3c/svg%3e\");\n}\n\n.carousel-control-next-icon {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e\");\n}\n\n.carousel-indicators {\n  position: absolute;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 2;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-pack: center;\n  justify-content: center;\n  padding: 0;\n  margin-right: 15%;\n  margin-bottom: 1rem;\n  margin-left: 15%;\n  list-style: none;\n}\n\n.carousel-indicators [data-bs-target] {\n  box-sizing: content-box;\n  -ms-flex: 0 1 auto;\n  flex: 0 1 auto;\n  width: 30px;\n  height: 3px;\n  padding: 0;\n  margin-right: 3px;\n  margin-left: 3px;\n  text-indent: -999px;\n  cursor: pointer;\n  background-color: #fff;\n  background-clip: padding-box;\n  border: 0;\n  border-top: 10px solid transparent;\n  border-bottom: 10px solid transparent;\n  opacity: 0.5;\n  transition: opacity 0.6s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .carousel-indicators [data-bs-target] {\n    transition: none;\n  }\n}\n\n.carousel-indicators .active {\n  opacity: 1;\n}\n\n.carousel-caption {\n  position: absolute;\n  right: 15%;\n  bottom: 1.25rem;\n  left: 15%;\n  padding-top: 1.25rem;\n  padding-bottom: 1.25rem;\n  color: #fff;\n  text-align: center;\n}\n\n.carousel-dark .carousel-control-prev-icon,\n.carousel-dark .carousel-control-next-icon {\n  -webkit-filter: invert(1) grayscale(100);\n  filter: invert(1) grayscale(100);\n}\n\n.carousel-dark .carousel-indicators [data-bs-target] {\n  background-color: #000;\n}\n\n.carousel-dark .carousel-caption {\n  color: #000;\n}\n\n@-webkit-keyframes spinner-border {\n  to {\n    -webkit-transform: rotate(360deg) /* rtl:ignore */;\n    transform: rotate(360deg) /* rtl:ignore */;\n  }\n}\n\n@keyframes spinner-border {\n  to {\n    -webkit-transform: rotate(360deg) /* rtl:ignore */;\n    transform: rotate(360deg) /* rtl:ignore */;\n  }\n}\n\n.spinner-border {\n  display: inline-block;\n  width: 2rem;\n  height: 2rem;\n  vertical-align: -0.125em;\n  border: 0.25em solid currentColor;\n  border-right-color: transparent;\n  border-radius: 50%;\n  -webkit-animation: 0.75s linear infinite spinner-border;\n  animation: 0.75s linear infinite spinner-border;\n}\n\n.spinner-border-sm {\n  width: 1rem;\n  height: 1rem;\n  border-width: 0.2em;\n}\n\n@-webkit-keyframes spinner-grow {\n  0% {\n    -webkit-transform: scale(0);\n    transform: scale(0);\n  }\n  50% {\n    opacity: 1;\n    -webkit-transform: none;\n    transform: none;\n  }\n}\n\n@keyframes spinner-grow {\n  0% {\n    -webkit-transform: scale(0);\n    transform: scale(0);\n  }\n  50% {\n    opacity: 1;\n    -webkit-transform: none;\n    transform: none;\n  }\n}\n\n.spinner-grow {\n  display: inline-block;\n  width: 2rem;\n  height: 2rem;\n  vertical-align: -0.125em;\n  background-color: currentColor;\n  border-radius: 50%;\n  opacity: 0;\n  -webkit-animation: 0.75s linear infinite spinner-grow;\n  animation: 0.75s linear infinite spinner-grow;\n}\n\n.spinner-grow-sm {\n  width: 1rem;\n  height: 1rem;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .spinner-border,\n  .spinner-grow {\n    -webkit-animation-duration: 1.5s;\n    animation-duration: 1.5s;\n  }\n}\n\n.offcanvas {\n  position: fixed;\n  bottom: 0;\n  z-index: 1045;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  max-width: 100%;\n  visibility: hidden;\n  background-color: #fff;\n  background-clip: padding-box;\n  outline: 0;\n  transition: -webkit-transform 0.3s ease-in-out;\n  transition: transform 0.3s ease-in-out;\n  transition: transform 0.3s ease-in-out, -webkit-transform 0.3s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .offcanvas {\n    transition: none;\n  }\n}\n\n.offcanvas-backdrop {\n  position: fixed;\n  top: 0;\n  left: 0;\n  z-index: 1040;\n  width: 100vw;\n  height: 100vh;\n  background-color: #000;\n}\n\n.offcanvas-backdrop.fade {\n  opacity: 0;\n}\n\n.offcanvas-backdrop.show {\n  opacity: 0.5;\n}\n\n.offcanvas-header {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-align: center;\n  align-items: center;\n  -ms-flex-pack: justify;\n  justify-content: space-between;\n  padding: 1rem 1rem;\n}\n\n.offcanvas-header .btn-close {\n  padding: 0.5rem 0.5rem;\n  margin-top: -0.5rem;\n  margin-right: -0.5rem;\n  margin-bottom: -0.5rem;\n}\n\n.offcanvas-title {\n  margin-bottom: 0;\n  line-height: 1.5;\n}\n\n.offcanvas-body {\n  -ms-flex-positive: 1;\n  flex-grow: 1;\n  padding: 1rem 1rem;\n  overflow-y: auto;\n}\n\n.offcanvas-start {\n  top: 0;\n  left: 0;\n  width: 400px;\n  border-right: 1px solid rgba(0, 0, 0, 0.2);\n  -webkit-transform: translateX(-100%);\n  transform: translateX(-100%);\n}\n\n.offcanvas-end {\n  top: 0;\n  right: 0;\n  width: 400px;\n  border-left: 1px solid rgba(0, 0, 0, 0.2);\n  -webkit-transform: translateX(100%);\n  transform: translateX(100%);\n}\n\n.offcanvas-top {\n  top: 0;\n  right: 0;\n  left: 0;\n  height: 30vh;\n  max-height: 100%;\n  border-bottom: 1px solid rgba(0, 0, 0, 0.2);\n  -webkit-transform: translateY(-100%);\n  transform: translateY(-100%);\n}\n\n.offcanvas-bottom {\n  right: 0;\n  left: 0;\n  height: 30vh;\n  max-height: 100%;\n  border-top: 1px solid rgba(0, 0, 0, 0.2);\n  -webkit-transform: translateY(100%);\n  transform: translateY(100%);\n}\n\n.offcanvas.show {\n  -webkit-transform: none;\n  transform: none;\n}\n\n.placeholder {\n  display: inline-block;\n  min-height: 1em;\n  vertical-align: middle;\n  cursor: wait;\n  background-color: currentColor;\n  opacity: 0.5;\n}\n\n.placeholder.btn::before {\n  display: inline-block;\n  content: \"\";\n}\n\n.placeholder-xs {\n  min-height: .6em;\n}\n\n.placeholder-sm {\n  min-height: .8em;\n}\n\n.placeholder-lg {\n  min-height: 1.2em;\n}\n\n.placeholder-glow .placeholder {\n  -webkit-animation: placeholder-glow 2s ease-in-out infinite;\n  animation: placeholder-glow 2s ease-in-out infinite;\n}\n\n@-webkit-keyframes placeholder-glow {\n  50% {\n    opacity: 0.2;\n  }\n}\n\n@keyframes placeholder-glow {\n  50% {\n    opacity: 0.2;\n  }\n}\n\n.placeholder-wave {\n  -webkit-mask-image: linear-gradient(130deg, #000 55%, rgba(0, 0, 0, 0.8) 75%, #000 95%);\n  mask-image: linear-gradient(130deg, #000 55%, rgba(0, 0, 0, 0.8) 75%, #000 95%);\n  -webkit-mask-size: 200% 100%;\n  mask-size: 200% 100%;\n  -webkit-animation: placeholder-wave 2s linear infinite;\n  animation: placeholder-wave 2s linear infinite;\n}\n\n@-webkit-keyframes placeholder-wave {\n  100% {\n    -webkit-mask-position: -200% 0%;\n    mask-position: -200% 0%;\n  }\n}\n\n@keyframes placeholder-wave {\n  100% {\n    -webkit-mask-position: -200% 0%;\n    mask-position: -200% 0%;\n  }\n}\n\n.clearfix::after {\n  display: block;\n  clear: both;\n  content: \"\";\n}\n\n.link-primary {\n  color: #eb6864;\n}\n\n.link-primary:hover, .link-primary:focus {\n  color: #bc5350;\n}\n\n.link-secondary {\n  color: #aaa;\n}\n\n.link-secondary:hover, .link-secondary:focus {\n  color: #888888;\n}\n\n.link-success {\n  color: #22b24c;\n}\n\n.link-success:hover, .link-success:focus {\n  color: #1b8e3d;\n}\n\n.link-info {\n  color: #369;\n}\n\n.link-info:hover, .link-info:focus {\n  color: #29527a;\n}\n\n.link-warning {\n  color: #f5e625;\n}\n\n.link-warning:hover, .link-warning:focus {\n  color: #c4b81e;\n}\n\n.link-danger {\n  color: #f57a00;\n}\n\n.link-danger:hover, .link-danger:focus {\n  color: #c46200;\n}\n\n.link-light {\n  color: #f8f9fa;\n}\n\n.link-light:hover, .link-light:focus {\n  color: #f9fafb;\n}\n\n.link-dark {\n  color: #222;\n}\n\n.link-dark:hover, .link-dark:focus {\n  color: #1b1b1b;\n}\n\n.ratio {\n  position: relative;\n  width: 100%;\n}\n\n.ratio::before {\n  display: block;\n  padding-top: var(--bs-aspect-ratio);\n  content: \"\";\n}\n\n.ratio > * {\n  position: absolute;\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n}\n\n.ratio-1x1 {\n  --bs-aspect-ratio: 100%;\n}\n\n.ratio-4x3 {\n  --bs-aspect-ratio: calc(3 / 4 * 100%);\n}\n\n.ratio-16x9 {\n  --bs-aspect-ratio: calc(9 / 16 * 100%);\n}\n\n.ratio-21x9 {\n  --bs-aspect-ratio: calc(9 / 21 * 100%);\n}\n\n.fixed-top {\n  position: fixed;\n  top: 0;\n  right: 0;\n  left: 0;\n  z-index: 1030;\n}\n\n.fixed-bottom {\n  position: fixed;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 1030;\n}\n\n.sticky-top {\n  position: -webkit-sticky;\n  position: sticky;\n  top: 0;\n  z-index: 1020;\n}\n\n@media (min-width: 576px) {\n  .sticky-sm-top {\n    position: -webkit-sticky;\n    position: sticky;\n    top: 0;\n    z-index: 1020;\n  }\n}\n\n@media (min-width: 768px) {\n  .sticky-md-top {\n    position: -webkit-sticky;\n    position: sticky;\n    top: 0;\n    z-index: 1020;\n  }\n}\n\n@media (min-width: 992px) {\n  .sticky-lg-top {\n    position: -webkit-sticky;\n    position: sticky;\n    top: 0;\n    z-index: 1020;\n  }\n}\n\n@media (min-width: 1200px) {\n  .sticky-xl-top {\n    position: -webkit-sticky;\n    position: sticky;\n    top: 0;\n    z-index: 1020;\n  }\n}\n\n@media (min-width: 1400px) {\n  .sticky-xxl-top {\n    position: -webkit-sticky;\n    position: sticky;\n    top: 0;\n    z-index: 1020;\n  }\n}\n\n.hstack {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-direction: row;\n  flex-direction: row;\n  -ms-flex-align: center;\n  align-items: center;\n  -ms-flex-item-align: stretch;\n  align-self: stretch;\n}\n\n.vstack {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex: 1 1 auto;\n  flex: 1 1 auto;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  -ms-flex-item-align: stretch;\n  align-self: stretch;\n}\n\n.visually-hidden,\n.visually-hidden-focusable:not(:focus):not(:focus-within) {\n  position: absolute !important;\n  width: 1px !important;\n  height: 1px !important;\n  padding: 0 !important;\n  margin: -1px !important;\n  overflow: hidden !important;\n  clip: rect(0, 0, 0, 0) !important;\n  white-space: nowrap !important;\n  border: 0 !important;\n}\n\n.stretched-link::after {\n  position: absolute;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 1;\n  content: \"\";\n}\n\n.text-truncate {\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n}\n\n.vr {\n  display: inline-block;\n  -ms-flex-item-align: stretch;\n  align-self: stretch;\n  width: 1px;\n  min-height: 1em;\n  background-color: currentColor;\n  opacity: 0.25;\n}\n\n.align-baseline {\n  vertical-align: baseline !important;\n}\n\n.align-top {\n  vertical-align: top !important;\n}\n\n.align-middle {\n  vertical-align: middle !important;\n}\n\n.align-bottom {\n  vertical-align: bottom !important;\n}\n\n.align-text-bottom {\n  vertical-align: text-bottom !important;\n}\n\n.align-text-top {\n  vertical-align: text-top !important;\n}\n\n.float-start {\n  float: left !important;\n}\n\n.float-end {\n  float: right !important;\n}\n\n.float-none {\n  float: none !important;\n}\n\n.opacity-0 {\n  opacity: 0 !important;\n}\n\n.opacity-25 {\n  opacity: 0.25 !important;\n}\n\n.opacity-50 {\n  opacity: 0.5 !important;\n}\n\n.opacity-75 {\n  opacity: 0.75 !important;\n}\n\n.opacity-100 {\n  opacity: 1 !important;\n}\n\n.overflow-auto {\n  overflow: auto !important;\n}\n\n.overflow-hidden {\n  overflow: hidden !important;\n}\n\n.overflow-visible {\n  overflow: visible !important;\n}\n\n.overflow-scroll {\n  overflow: scroll !important;\n}\n\n.d-inline {\n  display: inline !important;\n}\n\n.d-inline-block {\n  display: inline-block !important;\n}\n\n.d-block {\n  display: block !important;\n}\n\n.d-grid {\n  display: grid !important;\n}\n\n.d-table {\n  display: table !important;\n}\n\n.d-table-row {\n  display: table-row !important;\n}\n\n.d-table-cell {\n  display: table-cell !important;\n}\n\n.d-flex {\n  display: -ms-flexbox !important;\n  display: flex !important;\n}\n\n.d-inline-flex {\n  display: -ms-inline-flexbox !important;\n  display: inline-flex !important;\n}\n\n.d-none {\n  display: none !important;\n}\n\n.shadow {\n  box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15) !important;\n}\n\n.shadow-sm {\n  box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075) !important;\n}\n\n.shadow-lg {\n  box-shadow: 0 1rem 3rem rgba(0, 0, 0, 0.175) !important;\n}\n\n.shadow-none {\n  box-shadow: none !important;\n}\n\n.position-static {\n  position: static !important;\n}\n\n.position-relative {\n  position: relative !important;\n}\n\n.position-absolute {\n  position: absolute !important;\n}\n\n.position-fixed {\n  position: fixed !important;\n}\n\n.position-sticky {\n  position: -webkit-sticky !important;\n  position: sticky !important;\n}\n\n.top-0 {\n  top: 0 !important;\n}\n\n.top-50 {\n  top: 50% !important;\n}\n\n.top-100 {\n  top: 100% !important;\n}\n\n.bottom-0 {\n  bottom: 0 !important;\n}\n\n.bottom-50 {\n  bottom: 50% !important;\n}\n\n.bottom-100 {\n  bottom: 100% !important;\n}\n\n.start-0 {\n  left: 0 !important;\n}\n\n.start-50 {\n  left: 50% !important;\n}\n\n.start-100 {\n  left: 100% !important;\n}\n\n.end-0 {\n  right: 0 !important;\n}\n\n.end-50 {\n  right: 50% !important;\n}\n\n.end-100 {\n  right: 100% !important;\n}\n\n.translate-middle {\n  -webkit-transform: translate(-50%, -50%) !important;\n  transform: translate(-50%, -50%) !important;\n}\n\n.translate-middle-x {\n  -webkit-transform: translateX(-50%) !important;\n  transform: translateX(-50%) !important;\n}\n\n.translate-middle-y {\n  -webkit-transform: translateY(-50%) !important;\n  transform: translateY(-50%) !important;\n}\n\n.border {\n  border: 1px solid #dee2e6 !important;\n}\n\n.border-0 {\n  border: 0 !important;\n}\n\n.border-top {\n  border-top: 1px solid #dee2e6 !important;\n}\n\n.border-top-0 {\n  border-top: 0 !important;\n}\n\n.border-end {\n  border-right: 1px solid #dee2e6 !important;\n}\n\n.border-end-0 {\n  border-right: 0 !important;\n}\n\n.border-bottom {\n  border-bottom: 1px solid #dee2e6 !important;\n}\n\n.border-bottom-0 {\n  border-bottom: 0 !important;\n}\n\n.border-start {\n  border-left: 1px solid #dee2e6 !important;\n}\n\n.border-start-0 {\n  border-left: 0 !important;\n}\n\n.border-primary {\n  border-color: #eb6864 !important;\n}\n\n.border-secondary {\n  border-color: #aaa !important;\n}\n\n.border-success {\n  border-color: #22b24c !important;\n}\n\n.border-info {\n  border-color: #369 !important;\n}\n\n.border-warning {\n  border-color: #f5e625 !important;\n}\n\n.border-danger {\n  border-color: #f57a00 !important;\n}\n\n.border-light {\n  border-color: #f8f9fa !important;\n}\n\n.border-dark {\n  border-color: #222 !important;\n}\n\n.border-white {\n  border-color: #fff !important;\n}\n\n.border-1 {\n  border-width: 1px !important;\n}\n\n.border-2 {\n  border-width: 2px !important;\n}\n\n.border-3 {\n  border-width: 3px !important;\n}\n\n.border-4 {\n  border-width: 4px !important;\n}\n\n.border-5 {\n  border-width: 5px !important;\n}\n\n.w-25 {\n  width: 25% !important;\n}\n\n.w-50 {\n  width: 50% !important;\n}\n\n.w-75 {\n  width: 75% !important;\n}\n\n.w-100 {\n  width: 100% !important;\n}\n\n.w-auto {\n  width: auto !important;\n}\n\n.mw-100 {\n  max-width: 100% !important;\n}\n\n.vw-100 {\n  width: 100vw !important;\n}\n\n.min-vw-100 {\n  min-width: 100vw !important;\n}\n\n.h-25 {\n  height: 25% !important;\n}\n\n.h-50 {\n  height: 50% !important;\n}\n\n.h-75 {\n  height: 75% !important;\n}\n\n.h-100 {\n  height: 100% !important;\n}\n\n.h-auto {\n  height: auto !important;\n}\n\n.mh-100 {\n  max-height: 100% !important;\n}\n\n.vh-100 {\n  height: 100vh !important;\n}\n\n.min-vh-100 {\n  min-height: 100vh !important;\n}\n\n.flex-fill {\n  -ms-flex: 1 1 auto !important;\n  flex: 1 1 auto !important;\n}\n\n.flex-row {\n  -ms-flex-direction: row !important;\n  flex-direction: row !important;\n}\n\n.flex-column {\n  -ms-flex-direction: column !important;\n  flex-direction: column !important;\n}\n\n.flex-row-reverse {\n  -ms-flex-direction: row-reverse !important;\n  flex-direction: row-reverse !important;\n}\n\n.flex-column-reverse {\n  -ms-flex-direction: column-reverse !important;\n  flex-direction: column-reverse !important;\n}\n\n.flex-grow-0 {\n  -ms-flex-positive: 0 !important;\n  flex-grow: 0 !important;\n}\n\n.flex-grow-1 {\n  -ms-flex-positive: 1 !important;\n  flex-grow: 1 !important;\n}\n\n.flex-shrink-0 {\n  -ms-flex-negative: 0 !important;\n  flex-shrink: 0 !important;\n}\n\n.flex-shrink-1 {\n  -ms-flex-negative: 1 !important;\n  flex-shrink: 1 !important;\n}\n\n.flex-wrap {\n  -ms-flex-wrap: wrap !important;\n  flex-wrap: wrap !important;\n}\n\n.flex-nowrap {\n  -ms-flex-wrap: nowrap !important;\n  flex-wrap: nowrap !important;\n}\n\n.flex-wrap-reverse {\n  -ms-flex-wrap: wrap-reverse !important;\n  flex-wrap: wrap-reverse !important;\n}\n\n.gap-0 {\n  gap: 0 !important;\n}\n\n.gap-1 {\n  gap: 0.25rem !important;\n}\n\n.gap-2 {\n  gap: 0.5rem !important;\n}\n\n.gap-3 {\n  gap: 1rem !important;\n}\n\n.gap-4 {\n  gap: 1.5rem !important;\n}\n\n.gap-5 {\n  gap: 3rem !important;\n}\n\n.justify-content-start {\n  -ms-flex-pack: start !important;\n  justify-content: flex-start !important;\n}\n\n.justify-content-end {\n  -ms-flex-pack: end !important;\n  justify-content: flex-end !important;\n}\n\n.justify-content-center {\n  -ms-flex-pack: center !important;\n  justify-content: center !important;\n}\n\n.justify-content-between {\n  -ms-flex-pack: justify !important;\n  justify-content: space-between !important;\n}\n\n.justify-content-around {\n  -ms-flex-pack: distribute !important;\n  justify-content: space-around !important;\n}\n\n.justify-content-evenly {\n  -ms-flex-pack: space-evenly !important;\n  justify-content: space-evenly !important;\n}\n\n.align-items-start {\n  -ms-flex-align: start !important;\n  align-items: flex-start !important;\n}\n\n.align-items-end {\n  -ms-flex-align: end !important;\n  align-items: flex-end !important;\n}\n\n.align-items-center {\n  -ms-flex-align: center !important;\n  align-items: center !important;\n}\n\n.align-items-baseline {\n  -ms-flex-align: baseline !important;\n  align-items: baseline !important;\n}\n\n.align-items-stretch {\n  -ms-flex-align: stretch !important;\n  align-items: stretch !important;\n}\n\n.align-content-start {\n  -ms-flex-line-pack: start !important;\n  align-content: flex-start !important;\n}\n\n.align-content-end {\n  -ms-flex-line-pack: end !important;\n  align-content: flex-end !important;\n}\n\n.align-content-center {\n  -ms-flex-line-pack: center !important;\n  align-content: center !important;\n}\n\n.align-content-between {\n  -ms-flex-line-pack: justify !important;\n  align-content: space-between !important;\n}\n\n.align-content-around {\n  -ms-flex-line-pack: distribute !important;\n  align-content: space-around !important;\n}\n\n.align-content-stretch {\n  -ms-flex-line-pack: stretch !important;\n  align-content: stretch !important;\n}\n\n.align-self-auto {\n  -ms-flex-item-align: auto !important;\n  align-self: auto !important;\n}\n\n.align-self-start {\n  -ms-flex-item-align: start !important;\n  align-self: flex-start !important;\n}\n\n.align-self-end {\n  -ms-flex-item-align: end !important;\n  align-self: flex-end !important;\n}\n\n.align-self-center {\n  -ms-flex-item-align: center !important;\n  align-self: center !important;\n}\n\n.align-self-baseline {\n  -ms-flex-item-align: baseline !important;\n  align-self: baseline !important;\n}\n\n.align-self-stretch {\n  -ms-flex-item-align: stretch !important;\n  align-self: stretch !important;\n}\n\n.order-first {\n  -ms-flex-order: -1 !important;\n  order: -1 !important;\n}\n\n.order-0 {\n  -ms-flex-order: 0 !important;\n  order: 0 !important;\n}\n\n.order-1 {\n  -ms-flex-order: 1 !important;\n  order: 1 !important;\n}\n\n.order-2 {\n  -ms-flex-order: 2 !important;\n  order: 2 !important;\n}\n\n.order-3 {\n  -ms-flex-order: 3 !important;\n  order: 3 !important;\n}\n\n.order-4 {\n  -ms-flex-order: 4 !important;\n  order: 4 !important;\n}\n\n.order-5 {\n  -ms-flex-order: 5 !important;\n  order: 5 !important;\n}\n\n.order-last {\n  -ms-flex-order: 6 !important;\n  order: 6 !important;\n}\n\n.m-0 {\n  margin: 0 !important;\n}\n\n.m-1 {\n  margin: 0.25rem !important;\n}\n\n.m-2 {\n  margin: 0.5rem !important;\n}\n\n.m-3 {\n  margin: 1rem !important;\n}\n\n.m-4 {\n  margin: 1.5rem !important;\n}\n\n.m-5 {\n  margin: 3rem !important;\n}\n\n.m-auto {\n  margin: auto !important;\n}\n\n.mx-0 {\n  margin-right: 0 !important;\n  margin-left: 0 !important;\n}\n\n.mx-1 {\n  margin-right: 0.25rem !important;\n  margin-left: 0.25rem !important;\n}\n\n.mx-2 {\n  margin-right: 0.5rem !important;\n  margin-left: 0.5rem !important;\n}\n\n.mx-3 {\n  margin-right: 1rem !important;\n  margin-left: 1rem !important;\n}\n\n.mx-4 {\n  margin-right: 1.5rem !important;\n  margin-left: 1.5rem !important;\n}\n\n.mx-5 {\n  margin-right: 3rem !important;\n  margin-left: 3rem !important;\n}\n\n.mx-auto {\n  margin-right: auto !important;\n  margin-left: auto !important;\n}\n\n.my-0 {\n  margin-top: 0 !important;\n  margin-bottom: 0 !important;\n}\n\n.my-1 {\n  margin-top: 0.25rem !important;\n  margin-bottom: 0.25rem !important;\n}\n\n.my-2 {\n  margin-top: 0.5rem !important;\n  margin-bottom: 0.5rem !important;\n}\n\n.my-3 {\n  margin-top: 1rem !important;\n  margin-bottom: 1rem !important;\n}\n\n.my-4 {\n  margin-top: 1.5rem !important;\n  margin-bottom: 1.5rem !important;\n}\n\n.my-5 {\n  margin-top: 3rem !important;\n  margin-bottom: 3rem !important;\n}\n\n.my-auto {\n  margin-top: auto !important;\n  margin-bottom: auto !important;\n}\n\n.mt-0 {\n  margin-top: 0 !important;\n}\n\n.mt-1 {\n  margin-top: 0.25rem !important;\n}\n\n.mt-2 {\n  margin-top: 0.5rem !important;\n}\n\n.mt-3 {\n  margin-top: 1rem !important;\n}\n\n.mt-4 {\n  margin-top: 1.5rem !important;\n}\n\n.mt-5 {\n  margin-top: 3rem !important;\n}\n\n.mt-auto {\n  margin-top: auto !important;\n}\n\n.me-0 {\n  margin-right: 0 !important;\n}\n\n.me-1 {\n  margin-right: 0.25rem !important;\n}\n\n.me-2 {\n  margin-right: 0.5rem !important;\n}\n\n.me-3 {\n  margin-right: 1rem !important;\n}\n\n.me-4 {\n  margin-right: 1.5rem !important;\n}\n\n.me-5 {\n  margin-right: 3rem !important;\n}\n\n.me-auto {\n  margin-right: auto !important;\n}\n\n.mb-0 {\n  margin-bottom: 0 !important;\n}\n\n.mb-1 {\n  margin-bottom: 0.25rem !important;\n}\n\n.mb-2 {\n  margin-bottom: 0.5rem !important;\n}\n\n.mb-3 {\n  margin-bottom: 1rem !important;\n}\n\n.mb-4 {\n  margin-bottom: 1.5rem !important;\n}\n\n.mb-5 {\n  margin-bottom: 3rem !important;\n}\n\n.mb-auto {\n  margin-bottom: auto !important;\n}\n\n.ms-0 {\n  margin-left: 0 !important;\n}\n\n.ms-1 {\n  margin-left: 0.25rem !important;\n}\n\n.ms-2 {\n  margin-left: 0.5rem !important;\n}\n\n.ms-3 {\n  margin-left: 1rem !important;\n}\n\n.ms-4 {\n  margin-left: 1.5rem !important;\n}\n\n.ms-5 {\n  margin-left: 3rem !important;\n}\n\n.ms-auto {\n  margin-left: auto !important;\n}\n\n.p-0 {\n  padding: 0 !important;\n}\n\n.p-1 {\n  padding: 0.25rem !important;\n}\n\n.p-2 {\n  padding: 0.5rem !important;\n}\n\n.p-3 {\n  padding: 1rem !important;\n}\n\n.p-4 {\n  padding: 1.5rem !important;\n}\n\n.p-5 {\n  padding: 3rem !important;\n}\n\n.px-0 {\n  padding-right: 0 !important;\n  padding-left: 0 !important;\n}\n\n.px-1 {\n  padding-right: 0.25rem !important;\n  padding-left: 0.25rem !important;\n}\n\n.px-2 {\n  padding-right: 0.5rem !important;\n  padding-left: 0.5rem !important;\n}\n\n.px-3 {\n  padding-right: 1rem !important;\n  padding-left: 1rem !important;\n}\n\n.px-4 {\n  padding-right: 1.5rem !important;\n  padding-left: 1.5rem !important;\n}\n\n.px-5 {\n  padding-right: 3rem !important;\n  padding-left: 3rem !important;\n}\n\n.py-0 {\n  padding-top: 0 !important;\n  padding-bottom: 0 !important;\n}\n\n.py-1 {\n  padding-top: 0.25rem !important;\n  padding-bottom: 0.25rem !important;\n}\n\n.py-2 {\n  padding-top: 0.5rem !important;\n  padding-bottom: 0.5rem !important;\n}\n\n.py-3 {\n  padding-top: 1rem !important;\n  padding-bottom: 1rem !important;\n}\n\n.py-4 {\n  padding-top: 1.5rem !important;\n  padding-bottom: 1.5rem !important;\n}\n\n.py-5 {\n  padding-top: 3rem !important;\n  padding-bottom: 3rem !important;\n}\n\n.pt-0 {\n  padding-top: 0 !important;\n}\n\n.pt-1 {\n  padding-top: 0.25rem !important;\n}\n\n.pt-2 {\n  padding-top: 0.5rem !important;\n}\n\n.pt-3 {\n  padding-top: 1rem !important;\n}\n\n.pt-4 {\n  padding-top: 1.5rem !important;\n}\n\n.pt-5 {\n  padding-top: 3rem !important;\n}\n\n.pe-0 {\n  padding-right: 0 !important;\n}\n\n.pe-1 {\n  padding-right: 0.25rem !important;\n}\n\n.pe-2 {\n  padding-right: 0.5rem !important;\n}\n\n.pe-3 {\n  padding-right: 1rem !important;\n}\n\n.pe-4 {\n  padding-right: 1.5rem !important;\n}\n\n.pe-5 {\n  padding-right: 3rem !important;\n}\n\n.pb-0 {\n  padding-bottom: 0 !important;\n}\n\n.pb-1 {\n  padding-bottom: 0.25rem !important;\n}\n\n.pb-2 {\n  padding-bottom: 0.5rem !important;\n}\n\n.pb-3 {\n  padding-bottom: 1rem !important;\n}\n\n.pb-4 {\n  padding-bottom: 1.5rem !important;\n}\n\n.pb-5 {\n  padding-bottom: 3rem !important;\n}\n\n.ps-0 {\n  padding-left: 0 !important;\n}\n\n.ps-1 {\n  padding-left: 0.25rem !important;\n}\n\n.ps-2 {\n  padding-left: 0.5rem !important;\n}\n\n.ps-3 {\n  padding-left: 1rem !important;\n}\n\n.ps-4 {\n  padding-left: 1.5rem !important;\n}\n\n.ps-5 {\n  padding-left: 3rem !important;\n}\n\n.font-monospace {\n  font-family: var(--bs-font-monospace) !important;\n}\n\n.fs-1 {\n  font-size: calc(1.375rem + 1.5vw) !important;\n}\n\n.fs-2 {\n  font-size: calc(1.325rem + 0.9vw) !important;\n}\n\n.fs-3 {\n  font-size: calc(1.3rem + 0.6vw) !important;\n}\n\n.fs-4 {\n  font-size: calc(1.275rem + 0.3vw) !important;\n}\n\n.fs-5 {\n  font-size: 1.25rem !important;\n}\n\n.fs-6 {\n  font-size: 1rem !important;\n}\n\n.fst-italic {\n  font-style: italic !important;\n}\n\n.fst-normal {\n  font-style: normal !important;\n}\n\n.fw-light {\n  font-weight: 300 !important;\n}\n\n.fw-lighter {\n  font-weight: lighter !important;\n}\n\n.fw-normal {\n  font-weight: 400 !important;\n}\n\n.fw-bold {\n  font-weight: 700 !important;\n}\n\n.fw-bolder {\n  font-weight: bolder !important;\n}\n\n.lh-1 {\n  line-height: 1 !important;\n}\n\n.lh-sm {\n  line-height: 1.25 !important;\n}\n\n.lh-base {\n  line-height: 1.5 !important;\n}\n\n.lh-lg {\n  line-height: 2 !important;\n}\n\n.text-start {\n  text-align: left !important;\n}\n\n.text-end {\n  text-align: right !important;\n}\n\n.text-center {\n  text-align: center !important;\n}\n\n.text-decoration-none {\n  text-decoration: none !important;\n}\n\n.text-decoration-underline {\n  text-decoration: underline !important;\n}\n\n.text-decoration-line-through {\n  text-decoration: line-through !important;\n}\n\n.text-lowercase {\n  text-transform: lowercase !important;\n}\n\n.text-uppercase {\n  text-transform: uppercase !important;\n}\n\n.text-capitalize {\n  text-transform: capitalize !important;\n}\n\n.text-wrap {\n  white-space: normal !important;\n}\n\n.text-nowrap {\n  white-space: nowrap !important;\n}\n\n/* rtl:begin:remove */\n.text-break {\n  word-wrap: break-word !important;\n  word-break: break-word !important;\n}\n\n/* rtl:end:remove */\n.text-primary {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-primary-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-secondary {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-secondary-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-success {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-success-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-info {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-info-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-warning {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-warning-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-danger {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-danger-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-light {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-light-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-dark {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-dark-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-black {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-black-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-white {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-white-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-body {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-body-color-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-muted {\n  --bs-text-opacity: 1;\n  color: #777 !important;\n}\n\n.text-black-50 {\n  --bs-text-opacity: 1;\n  color: rgba(0, 0, 0, 0.5) !important;\n}\n\n.text-white-50 {\n  --bs-text-opacity: 1;\n  color: rgba(255, 255, 255, 0.5) !important;\n}\n\n.text-reset {\n  --bs-text-opacity: 1;\n  color: inherit !important;\n}\n\n.text-opacity-25 {\n  --bs-text-opacity: 0.25;\n}\n\n.text-opacity-50 {\n  --bs-text-opacity: 0.5;\n}\n\n.text-opacity-75 {\n  --bs-text-opacity: 0.75;\n}\n\n.text-opacity-100 {\n  --bs-text-opacity: 1;\n}\n\n.bg-primary {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-primary-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-secondary {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-secondary-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-success {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-success-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-info {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-info-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-warning {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-warning-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-danger {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-danger-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-light {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-light-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-dark {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-dark-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-black {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-black-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-white {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-white-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-body {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-body-bg-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-transparent {\n  --bs-bg-opacity: 1;\n  background-color: transparent !important;\n}\n\n.bg-opacity-10 {\n  --bs-bg-opacity: 0.1;\n}\n\n.bg-opacity-25 {\n  --bs-bg-opacity: 0.25;\n}\n\n.bg-opacity-50 {\n  --bs-bg-opacity: 0.5;\n}\n\n.bg-opacity-75 {\n  --bs-bg-opacity: 0.75;\n}\n\n.bg-opacity-100 {\n  --bs-bg-opacity: 1;\n}\n\n.bg-gradient {\n  background-image: var(--bs-gradient) !important;\n}\n\n.user-select-all {\n  -webkit-user-select: all !important;\n  -moz-user-select: all !important;\n  user-select: all !important;\n}\n\n.user-select-auto {\n  -webkit-user-select: auto !important;\n  -moz-user-select: auto !important;\n  -ms-user-select: auto !important;\n  user-select: auto !important;\n}\n\n.user-select-none {\n  -webkit-user-select: none !important;\n  -moz-user-select: none !important;\n  -ms-user-select: none !important;\n  user-select: none !important;\n}\n\n.pe-none {\n  pointer-events: none !important;\n}\n\n.pe-auto {\n  pointer-events: auto !important;\n}\n\n.rounded {\n  border-radius: 0.25rem !important;\n}\n\n.rounded-0 {\n  border-radius: 0 !important;\n}\n\n.rounded-1 {\n  border-radius: 0.2rem !important;\n}\n\n.rounded-2 {\n  border-radius: 0.25rem !important;\n}\n\n.rounded-3 {\n  border-radius: 0.3rem !important;\n}\n\n.rounded-circle {\n  border-radius: 50% !important;\n}\n\n.rounded-pill {\n  border-radius: 50rem !important;\n}\n\n.rounded-top {\n  border-top-left-radius: 0.25rem !important;\n  border-top-right-radius: 0.25rem !important;\n}\n\n.rounded-end {\n  border-top-right-radius: 0.25rem !important;\n  border-bottom-right-radius: 0.25rem !important;\n}\n\n.rounded-bottom {\n  border-bottom-right-radius: 0.25rem !important;\n  border-bottom-left-radius: 0.25rem !important;\n}\n\n.rounded-start {\n  border-bottom-left-radius: 0.25rem !important;\n  border-top-left-radius: 0.25rem !important;\n}\n\n.visible {\n  visibility: visible !important;\n}\n\n.invisible {\n  visibility: hidden !important;\n}\n\n@media (min-width: 576px) {\n  .float-sm-start {\n    float: left !important;\n  }\n  .float-sm-end {\n    float: right !important;\n  }\n  .float-sm-none {\n    float: none !important;\n  }\n  .d-sm-inline {\n    display: inline !important;\n  }\n  .d-sm-inline-block {\n    display: inline-block !important;\n  }\n  .d-sm-block {\n    display: block !important;\n  }\n  .d-sm-grid {\n    display: grid !important;\n  }\n  .d-sm-table {\n    display: table !important;\n  }\n  .d-sm-table-row {\n    display: table-row !important;\n  }\n  .d-sm-table-cell {\n    display: table-cell !important;\n  }\n  .d-sm-flex {\n    display: -ms-flexbox !important;\n    display: flex !important;\n  }\n  .d-sm-inline-flex {\n    display: -ms-inline-flexbox !important;\n    display: inline-flex !important;\n  }\n  .d-sm-none {\n    display: none !important;\n  }\n  .flex-sm-fill {\n    -ms-flex: 1 1 auto !important;\n    flex: 1 1 auto !important;\n  }\n  .flex-sm-row {\n    -ms-flex-direction: row !important;\n    flex-direction: row !important;\n  }\n  .flex-sm-column {\n    -ms-flex-direction: column !important;\n    flex-direction: column !important;\n  }\n  .flex-sm-row-reverse {\n    -ms-flex-direction: row-reverse !important;\n    flex-direction: row-reverse !important;\n  }\n  .flex-sm-column-reverse {\n    -ms-flex-direction: column-reverse !important;\n    flex-direction: column-reverse !important;\n  }\n  .flex-sm-grow-0 {\n    -ms-flex-positive: 0 !important;\n    flex-grow: 0 !important;\n  }\n  .flex-sm-grow-1 {\n    -ms-flex-positive: 1 !important;\n    flex-grow: 1 !important;\n  }\n  .flex-sm-shrink-0 {\n    -ms-flex-negative: 0 !important;\n    flex-shrink: 0 !important;\n  }\n  .flex-sm-shrink-1 {\n    -ms-flex-negative: 1 !important;\n    flex-shrink: 1 !important;\n  }\n  .flex-sm-wrap {\n    -ms-flex-wrap: wrap !important;\n    flex-wrap: wrap !important;\n  }\n  .flex-sm-nowrap {\n    -ms-flex-wrap: nowrap !important;\n    flex-wrap: nowrap !important;\n  }\n  .flex-sm-wrap-reverse {\n    -ms-flex-wrap: wrap-reverse !important;\n    flex-wrap: wrap-reverse !important;\n  }\n  .gap-sm-0 {\n    gap: 0 !important;\n  }\n  .gap-sm-1 {\n    gap: 0.25rem !important;\n  }\n  .gap-sm-2 {\n    gap: 0.5rem !important;\n  }\n  .gap-sm-3 {\n    gap: 1rem !important;\n  }\n  .gap-sm-4 {\n    gap: 1.5rem !important;\n  }\n  .gap-sm-5 {\n    gap: 3rem !important;\n  }\n  .justify-content-sm-start {\n    -ms-flex-pack: start !important;\n    justify-content: flex-start !important;\n  }\n  .justify-content-sm-end {\n    -ms-flex-pack: end !important;\n    justify-content: flex-end !important;\n  }\n  .justify-content-sm-center {\n    -ms-flex-pack: center !important;\n    justify-content: center !important;\n  }\n  .justify-content-sm-between {\n    -ms-flex-pack: justify !important;\n    justify-content: space-between !important;\n  }\n  .justify-content-sm-around {\n    -ms-flex-pack: distribute !important;\n    justify-content: space-around !important;\n  }\n  .justify-content-sm-evenly {\n    -ms-flex-pack: space-evenly !important;\n    justify-content: space-evenly !important;\n  }\n  .align-items-sm-start {\n    -ms-flex-align: start !important;\n    align-items: flex-start !important;\n  }\n  .align-items-sm-end {\n    -ms-flex-align: end !important;\n    align-items: flex-end !important;\n  }\n  .align-items-sm-center {\n    -ms-flex-align: center !important;\n    align-items: center !important;\n  }\n  .align-items-sm-baseline {\n    -ms-flex-align: baseline !important;\n    align-items: baseline !important;\n  }\n  .align-items-sm-stretch {\n    -ms-flex-align: stretch !important;\n    align-items: stretch !important;\n  }\n  .align-content-sm-start {\n    -ms-flex-line-pack: start !important;\n    align-content: flex-start !important;\n  }\n  .align-content-sm-end {\n    -ms-flex-line-pack: end !important;\n    align-content: flex-end !important;\n  }\n  .align-content-sm-center {\n    -ms-flex-line-pack: center !important;\n    align-content: center !important;\n  }\n  .align-content-sm-between {\n    -ms-flex-line-pack: justify !important;\n    align-content: space-between !important;\n  }\n  .align-content-sm-around {\n    -ms-flex-line-pack: distribute !important;\n    align-content: space-around !important;\n  }\n  .align-content-sm-stretch {\n    -ms-flex-line-pack: stretch !important;\n    align-content: stretch !important;\n  }\n  .align-self-sm-auto {\n    -ms-flex-item-align: auto !important;\n    align-self: auto !important;\n  }\n  .align-self-sm-start {\n    -ms-flex-item-align: start !important;\n    align-self: flex-start !important;\n  }\n  .align-self-sm-end {\n    -ms-flex-item-align: end !important;\n    align-self: flex-end !important;\n  }\n  .align-self-sm-center {\n    -ms-flex-item-align: center !important;\n    align-self: center !important;\n  }\n  .align-self-sm-baseline {\n    -ms-flex-item-align: baseline !important;\n    align-self: baseline !important;\n  }\n  .align-self-sm-stretch {\n    -ms-flex-item-align: stretch !important;\n    align-self: stretch !important;\n  }\n  .order-sm-first {\n    -ms-flex-order: -1 !important;\n    order: -1 !important;\n  }\n  .order-sm-0 {\n    -ms-flex-order: 0 !important;\n    order: 0 !important;\n  }\n  .order-sm-1 {\n    -ms-flex-order: 1 !important;\n    order: 1 !important;\n  }\n  .order-sm-2 {\n    -ms-flex-order: 2 !important;\n    order: 2 !important;\n  }\n  .order-sm-3 {\n    -ms-flex-order: 3 !important;\n    order: 3 !important;\n  }\n  .order-sm-4 {\n    -ms-flex-order: 4 !important;\n    order: 4 !important;\n  }\n  .order-sm-5 {\n    -ms-flex-order: 5 !important;\n    order: 5 !important;\n  }\n  .order-sm-last {\n    -ms-flex-order: 6 !important;\n    order: 6 !important;\n  }\n  .m-sm-0 {\n    margin: 0 !important;\n  }\n  .m-sm-1 {\n    margin: 0.25rem !important;\n  }\n  .m-sm-2 {\n    margin: 0.5rem !important;\n  }\n  .m-sm-3 {\n    margin: 1rem !important;\n  }\n  .m-sm-4 {\n    margin: 1.5rem !important;\n  }\n  .m-sm-5 {\n    margin: 3rem !important;\n  }\n  .m-sm-auto {\n    margin: auto !important;\n  }\n  .mx-sm-0 {\n    margin-right: 0 !important;\n    margin-left: 0 !important;\n  }\n  .mx-sm-1 {\n    margin-right: 0.25rem !important;\n    margin-left: 0.25rem !important;\n  }\n  .mx-sm-2 {\n    margin-right: 0.5rem !important;\n    margin-left: 0.5rem !important;\n  }\n  .mx-sm-3 {\n    margin-right: 1rem !important;\n    margin-left: 1rem !important;\n  }\n  .mx-sm-4 {\n    margin-right: 1.5rem !important;\n    margin-left: 1.5rem !important;\n  }\n  .mx-sm-5 {\n    margin-right: 3rem !important;\n    margin-left: 3rem !important;\n  }\n  .mx-sm-auto {\n    margin-right: auto !important;\n    margin-left: auto !important;\n  }\n  .my-sm-0 {\n    margin-top: 0 !important;\n    margin-bottom: 0 !important;\n  }\n  .my-sm-1 {\n    margin-top: 0.25rem !important;\n    margin-bottom: 0.25rem !important;\n  }\n  .my-sm-2 {\n    margin-top: 0.5rem !important;\n    margin-bottom: 0.5rem !important;\n  }\n  .my-sm-3 {\n    margin-top: 1rem !important;\n    margin-bottom: 1rem !important;\n  }\n  .my-sm-4 {\n    margin-top: 1.5rem !important;\n    margin-bottom: 1.5rem !important;\n  }\n  .my-sm-5 {\n    margin-top: 3rem !important;\n    margin-bottom: 3rem !important;\n  }\n  .my-sm-auto {\n    margin-top: auto !important;\n    margin-bottom: auto !important;\n  }\n  .mt-sm-0 {\n    margin-top: 0 !important;\n  }\n  .mt-sm-1 {\n    margin-top: 0.25rem !important;\n  }\n  .mt-sm-2 {\n    margin-top: 0.5rem !important;\n  }\n  .mt-sm-3 {\n    margin-top: 1rem !important;\n  }\n  .mt-sm-4 {\n    margin-top: 1.5rem !important;\n  }\n  .mt-sm-5 {\n    margin-top: 3rem !important;\n  }\n  .mt-sm-auto {\n    margin-top: auto !important;\n  }\n  .me-sm-0 {\n    margin-right: 0 !important;\n  }\n  .me-sm-1 {\n    margin-right: 0.25rem !important;\n  }\n  .me-sm-2 {\n    margin-right: 0.5rem !important;\n  }\n  .me-sm-3 {\n    margin-right: 1rem !important;\n  }\n  .me-sm-4 {\n    margin-right: 1.5rem !important;\n  }\n  .me-sm-5 {\n    margin-right: 3rem !important;\n  }\n  .me-sm-auto {\n    margin-right: auto !important;\n  }\n  .mb-sm-0 {\n    margin-bottom: 0 !important;\n  }\n  .mb-sm-1 {\n    margin-bottom: 0.25rem !important;\n  }\n  .mb-sm-2 {\n    margin-bottom: 0.5rem !important;\n  }\n  .mb-sm-3 {\n    margin-bottom: 1rem !important;\n  }\n  .mb-sm-4 {\n    margin-bottom: 1.5rem !important;\n  }\n  .mb-sm-5 {\n    margin-bottom: 3rem !important;\n  }\n  .mb-sm-auto {\n    margin-bottom: auto !important;\n  }\n  .ms-sm-0 {\n    margin-left: 0 !important;\n  }\n  .ms-sm-1 {\n    margin-left: 0.25rem !important;\n  }\n  .ms-sm-2 {\n    margin-left: 0.5rem !important;\n  }\n  .ms-sm-3 {\n    margin-left: 1rem !important;\n  }\n  .ms-sm-4 {\n    margin-left: 1.5rem !important;\n  }\n  .ms-sm-5 {\n    margin-left: 3rem !important;\n  }\n  .ms-sm-auto {\n    margin-left: auto !important;\n  }\n  .p-sm-0 {\n    padding: 0 !important;\n  }\n  .p-sm-1 {\n    padding: 0.25rem !important;\n  }\n  .p-sm-2 {\n    padding: 0.5rem !important;\n  }\n  .p-sm-3 {\n    padding: 1rem !important;\n  }\n  .p-sm-4 {\n    padding: 1.5rem !important;\n  }\n  .p-sm-5 {\n    padding: 3rem !important;\n  }\n  .px-sm-0 {\n    padding-right: 0 !important;\n    padding-left: 0 !important;\n  }\n  .px-sm-1 {\n    padding-right: 0.25rem !important;\n    padding-left: 0.25rem !important;\n  }\n  .px-sm-2 {\n    padding-right: 0.5rem !important;\n    padding-left: 0.5rem !important;\n  }\n  .px-sm-3 {\n    padding-right: 1rem !important;\n    padding-left: 1rem !important;\n  }\n  .px-sm-4 {\n    padding-right: 1.5rem !important;\n    padding-left: 1.5rem !important;\n  }\n  .px-sm-5 {\n    padding-right: 3rem !important;\n    padding-left: 3rem !important;\n  }\n  .py-sm-0 {\n    padding-top: 0 !important;\n    padding-bottom: 0 !important;\n  }\n  .py-sm-1 {\n    padding-top: 0.25rem !important;\n    padding-bottom: 0.25rem !important;\n  }\n  .py-sm-2 {\n    padding-top: 0.5rem !important;\n    padding-bottom: 0.5rem !important;\n  }\n  .py-sm-3 {\n    padding-top: 1rem !important;\n    padding-bottom: 1rem !important;\n  }\n  .py-sm-4 {\n    padding-top: 1.5rem !important;\n    padding-bottom: 1.5rem !important;\n  }\n  .py-sm-5 {\n    padding-top: 3rem !important;\n    padding-bottom: 3rem !important;\n  }\n  .pt-sm-0 {\n    padding-top: 0 !important;\n  }\n  .pt-sm-1 {\n    padding-top: 0.25rem !important;\n  }\n  .pt-sm-2 {\n    padding-top: 0.5rem !important;\n  }\n  .pt-sm-3 {\n    padding-top: 1rem !important;\n  }\n  .pt-sm-4 {\n    padding-top: 1.5rem !important;\n  }\n  .pt-sm-5 {\n    padding-top: 3rem !important;\n  }\n  .pe-sm-0 {\n    padding-right: 0 !important;\n  }\n  .pe-sm-1 {\n    padding-right: 0.25rem !important;\n  }\n  .pe-sm-2 {\n    padding-right: 0.5rem !important;\n  }\n  .pe-sm-3 {\n    padding-right: 1rem !important;\n  }\n  .pe-sm-4 {\n    padding-right: 1.5rem !important;\n  }\n  .pe-sm-5 {\n    padding-right: 3rem !important;\n  }\n  .pb-sm-0 {\n    padding-bottom: 0 !important;\n  }\n  .pb-sm-1 {\n    padding-bottom: 0.25rem !important;\n  }\n  .pb-sm-2 {\n    padding-bottom: 0.5rem !important;\n  }\n  .pb-sm-3 {\n    padding-bottom: 1rem !important;\n  }\n  .pb-sm-4 {\n    padding-bottom: 1.5rem !important;\n  }\n  .pb-sm-5 {\n    padding-bottom: 3rem !important;\n  }\n  .ps-sm-0 {\n    padding-left: 0 !important;\n  }\n  .ps-sm-1 {\n    padding-left: 0.25rem !important;\n  }\n  .ps-sm-2 {\n    padding-left: 0.5rem !important;\n  }\n  .ps-sm-3 {\n    padding-left: 1rem !important;\n  }\n  .ps-sm-4 {\n    padding-left: 1.5rem !important;\n  }\n  .ps-sm-5 {\n    padding-left: 3rem !important;\n  }\n  .text-sm-start {\n    text-align: left !important;\n  }\n  .text-sm-end {\n    text-align: right !important;\n  }\n  .text-sm-center {\n    text-align: center !important;\n  }\n}\n\n@media (min-width: 768px) {\n  .float-md-start {\n    float: left !important;\n  }\n  .float-md-end {\n    float: right !important;\n  }\n  .float-md-none {\n    float: none !important;\n  }\n  .d-md-inline {\n    display: inline !important;\n  }\n  .d-md-inline-block {\n    display: inline-block !important;\n  }\n  .d-md-block {\n    display: block !important;\n  }\n  .d-md-grid {\n    display: grid !important;\n  }\n  .d-md-table {\n    display: table !important;\n  }\n  .d-md-table-row {\n    display: table-row !important;\n  }\n  .d-md-table-cell {\n    display: table-cell !important;\n  }\n  .d-md-flex {\n    display: -ms-flexbox !important;\n    display: flex !important;\n  }\n  .d-md-inline-flex {\n    display: -ms-inline-flexbox !important;\n    display: inline-flex !important;\n  }\n  .d-md-none {\n    display: none !important;\n  }\n  .flex-md-fill {\n    -ms-flex: 1 1 auto !important;\n    flex: 1 1 auto !important;\n  }\n  .flex-md-row {\n    -ms-flex-direction: row !important;\n    flex-direction: row !important;\n  }\n  .flex-md-column {\n    -ms-flex-direction: column !important;\n    flex-direction: column !important;\n  }\n  .flex-md-row-reverse {\n    -ms-flex-direction: row-reverse !important;\n    flex-direction: row-reverse !important;\n  }\n  .flex-md-column-reverse {\n    -ms-flex-direction: column-reverse !important;\n    flex-direction: column-reverse !important;\n  }\n  .flex-md-grow-0 {\n    -ms-flex-positive: 0 !important;\n    flex-grow: 0 !important;\n  }\n  .flex-md-grow-1 {\n    -ms-flex-positive: 1 !important;\n    flex-grow: 1 !important;\n  }\n  .flex-md-shrink-0 {\n    -ms-flex-negative: 0 !important;\n    flex-shrink: 0 !important;\n  }\n  .flex-md-shrink-1 {\n    -ms-flex-negative: 1 !important;\n    flex-shrink: 1 !important;\n  }\n  .flex-md-wrap {\n    -ms-flex-wrap: wrap !important;\n    flex-wrap: wrap !important;\n  }\n  .flex-md-nowrap {\n    -ms-flex-wrap: nowrap !important;\n    flex-wrap: nowrap !important;\n  }\n  .flex-md-wrap-reverse {\n    -ms-flex-wrap: wrap-reverse !important;\n    flex-wrap: wrap-reverse !important;\n  }\n  .gap-md-0 {\n    gap: 0 !important;\n  }\n  .gap-md-1 {\n    gap: 0.25rem !important;\n  }\n  .gap-md-2 {\n    gap: 0.5rem !important;\n  }\n  .gap-md-3 {\n    gap: 1rem !important;\n  }\n  .gap-md-4 {\n    gap: 1.5rem !important;\n  }\n  .gap-md-5 {\n    gap: 3rem !important;\n  }\n  .justify-content-md-start {\n    -ms-flex-pack: start !important;\n    justify-content: flex-start !important;\n  }\n  .justify-content-md-end {\n    -ms-flex-pack: end !important;\n    justify-content: flex-end !important;\n  }\n  .justify-content-md-center {\n    -ms-flex-pack: center !important;\n    justify-content: center !important;\n  }\n  .justify-content-md-between {\n    -ms-flex-pack: justify !important;\n    justify-content: space-between !important;\n  }\n  .justify-content-md-around {\n    -ms-flex-pack: distribute !important;\n    justify-content: space-around !important;\n  }\n  .justify-content-md-evenly {\n    -ms-flex-pack: space-evenly !important;\n    justify-content: space-evenly !important;\n  }\n  .align-items-md-start {\n    -ms-flex-align: start !important;\n    align-items: flex-start !important;\n  }\n  .align-items-md-end {\n    -ms-flex-align: end !important;\n    align-items: flex-end !important;\n  }\n  .align-items-md-center {\n    -ms-flex-align: center !important;\n    align-items: center !important;\n  }\n  .align-items-md-baseline {\n    -ms-flex-align: baseline !important;\n    align-items: baseline !important;\n  }\n  .align-items-md-stretch {\n    -ms-flex-align: stretch !important;\n    align-items: stretch !important;\n  }\n  .align-content-md-start {\n    -ms-flex-line-pack: start !important;\n    align-content: flex-start !important;\n  }\n  .align-content-md-end {\n    -ms-flex-line-pack: end !important;\n    align-content: flex-end !important;\n  }\n  .align-content-md-center {\n    -ms-flex-line-pack: center !important;\n    align-content: center !important;\n  }\n  .align-content-md-between {\n    -ms-flex-line-pack: justify !important;\n    align-content: space-between !important;\n  }\n  .align-content-md-around {\n    -ms-flex-line-pack: distribute !important;\n    align-content: space-around !important;\n  }\n  .align-content-md-stretch {\n    -ms-flex-line-pack: stretch !important;\n    align-content: stretch !important;\n  }\n  .align-self-md-auto {\n    -ms-flex-item-align: auto !important;\n    align-self: auto !important;\n  }\n  .align-self-md-start {\n    -ms-flex-item-align: start !important;\n    align-self: flex-start !important;\n  }\n  .align-self-md-end {\n    -ms-flex-item-align: end !important;\n    align-self: flex-end !important;\n  }\n  .align-self-md-center {\n    -ms-flex-item-align: center !important;\n    align-self: center !important;\n  }\n  .align-self-md-baseline {\n    -ms-flex-item-align: baseline !important;\n    align-self: baseline !important;\n  }\n  .align-self-md-stretch {\n    -ms-flex-item-align: stretch !important;\n    align-self: stretch !important;\n  }\n  .order-md-first {\n    -ms-flex-order: -1 !important;\n    order: -1 !important;\n  }\n  .order-md-0 {\n    -ms-flex-order: 0 !important;\n    order: 0 !important;\n  }\n  .order-md-1 {\n    -ms-flex-order: 1 !important;\n    order: 1 !important;\n  }\n  .order-md-2 {\n    -ms-flex-order: 2 !important;\n    order: 2 !important;\n  }\n  .order-md-3 {\n    -ms-flex-order: 3 !important;\n    order: 3 !important;\n  }\n  .order-md-4 {\n    -ms-flex-order: 4 !important;\n    order: 4 !important;\n  }\n  .order-md-5 {\n    -ms-flex-order: 5 !important;\n    order: 5 !important;\n  }\n  .order-md-last {\n    -ms-flex-order: 6 !important;\n    order: 6 !important;\n  }\n  .m-md-0 {\n    margin: 0 !important;\n  }\n  .m-md-1 {\n    margin: 0.25rem !important;\n  }\n  .m-md-2 {\n    margin: 0.5rem !important;\n  }\n  .m-md-3 {\n    margin: 1rem !important;\n  }\n  .m-md-4 {\n    margin: 1.5rem !important;\n  }\n  .m-md-5 {\n    margin: 3rem !important;\n  }\n  .m-md-auto {\n    margin: auto !important;\n  }\n  .mx-md-0 {\n    margin-right: 0 !important;\n    margin-left: 0 !important;\n  }\n  .mx-md-1 {\n    margin-right: 0.25rem !important;\n    margin-left: 0.25rem !important;\n  }\n  .mx-md-2 {\n    margin-right: 0.5rem !important;\n    margin-left: 0.5rem !important;\n  }\n  .mx-md-3 {\n    margin-right: 1rem !important;\n    margin-left: 1rem !important;\n  }\n  .mx-md-4 {\n    margin-right: 1.5rem !important;\n    margin-left: 1.5rem !important;\n  }\n  .mx-md-5 {\n    margin-right: 3rem !important;\n    margin-left: 3rem !important;\n  }\n  .mx-md-auto {\n    margin-right: auto !important;\n    margin-left: auto !important;\n  }\n  .my-md-0 {\n    margin-top: 0 !important;\n    margin-bottom: 0 !important;\n  }\n  .my-md-1 {\n    margin-top: 0.25rem !important;\n    margin-bottom: 0.25rem !important;\n  }\n  .my-md-2 {\n    margin-top: 0.5rem !important;\n    margin-bottom: 0.5rem !important;\n  }\n  .my-md-3 {\n    margin-top: 1rem !important;\n    margin-bottom: 1rem !important;\n  }\n  .my-md-4 {\n    margin-top: 1.5rem !important;\n    margin-bottom: 1.5rem !important;\n  }\n  .my-md-5 {\n    margin-top: 3rem !important;\n    margin-bottom: 3rem !important;\n  }\n  .my-md-auto {\n    margin-top: auto !important;\n    margin-bottom: auto !important;\n  }\n  .mt-md-0 {\n    margin-top: 0 !important;\n  }\n  .mt-md-1 {\n    margin-top: 0.25rem !important;\n  }\n  .mt-md-2 {\n    margin-top: 0.5rem !important;\n  }\n  .mt-md-3 {\n    margin-top: 1rem !important;\n  }\n  .mt-md-4 {\n    margin-top: 1.5rem !important;\n  }\n  .mt-md-5 {\n    margin-top: 3rem !important;\n  }\n  .mt-md-auto {\n    margin-top: auto !important;\n  }\n  .me-md-0 {\n    margin-right: 0 !important;\n  }\n  .me-md-1 {\n    margin-right: 0.25rem !important;\n  }\n  .me-md-2 {\n    margin-right: 0.5rem !important;\n  }\n  .me-md-3 {\n    margin-right: 1rem !important;\n  }\n  .me-md-4 {\n    margin-right: 1.5rem !important;\n  }\n  .me-md-5 {\n    margin-right: 3rem !important;\n  }\n  .me-md-auto {\n    margin-right: auto !important;\n  }\n  .mb-md-0 {\n    margin-bottom: 0 !important;\n  }\n  .mb-md-1 {\n    margin-bottom: 0.25rem !important;\n  }\n  .mb-md-2 {\n    margin-bottom: 0.5rem !important;\n  }\n  .mb-md-3 {\n    margin-bottom: 1rem !important;\n  }\n  .mb-md-4 {\n    margin-bottom: 1.5rem !important;\n  }\n  .mb-md-5 {\n    margin-bottom: 3rem !important;\n  }\n  .mb-md-auto {\n    margin-bottom: auto !important;\n  }\n  .ms-md-0 {\n    margin-left: 0 !important;\n  }\n  .ms-md-1 {\n    margin-left: 0.25rem !important;\n  }\n  .ms-md-2 {\n    margin-left: 0.5rem !important;\n  }\n  .ms-md-3 {\n    margin-left: 1rem !important;\n  }\n  .ms-md-4 {\n    margin-left: 1.5rem !important;\n  }\n  .ms-md-5 {\n    margin-left: 3rem !important;\n  }\n  .ms-md-auto {\n    margin-left: auto !important;\n  }\n  .p-md-0 {\n    padding: 0 !important;\n  }\n  .p-md-1 {\n    padding: 0.25rem !important;\n  }\n  .p-md-2 {\n    padding: 0.5rem !important;\n  }\n  .p-md-3 {\n    padding: 1rem !important;\n  }\n  .p-md-4 {\n    padding: 1.5rem !important;\n  }\n  .p-md-5 {\n    padding: 3rem !important;\n  }\n  .px-md-0 {\n    padding-right: 0 !important;\n    padding-left: 0 !important;\n  }\n  .px-md-1 {\n    padding-right: 0.25rem !important;\n    padding-left: 0.25rem !important;\n  }\n  .px-md-2 {\n    padding-right: 0.5rem !important;\n    padding-left: 0.5rem !important;\n  }\n  .px-md-3 {\n    padding-right: 1rem !important;\n    padding-left: 1rem !important;\n  }\n  .px-md-4 {\n    padding-right: 1.5rem !important;\n    padding-left: 1.5rem !important;\n  }\n  .px-md-5 {\n    padding-right: 3rem !important;\n    padding-left: 3rem !important;\n  }\n  .py-md-0 {\n    padding-top: 0 !important;\n    padding-bottom: 0 !important;\n  }\n  .py-md-1 {\n    padding-top: 0.25rem !important;\n    padding-bottom: 0.25rem !important;\n  }\n  .py-md-2 {\n    padding-top: 0.5rem !important;\n    padding-bottom: 0.5rem !important;\n  }\n  .py-md-3 {\n    padding-top: 1rem !important;\n    padding-bottom: 1rem !important;\n  }\n  .py-md-4 {\n    padding-top: 1.5rem !important;\n    padding-bottom: 1.5rem !important;\n  }\n  .py-md-5 {\n    padding-top: 3rem !important;\n    padding-bottom: 3rem !important;\n  }\n  .pt-md-0 {\n    padding-top: 0 !important;\n  }\n  .pt-md-1 {\n    padding-top: 0.25rem !important;\n  }\n  .pt-md-2 {\n    padding-top: 0.5rem !important;\n  }\n  .pt-md-3 {\n    padding-top: 1rem !important;\n  }\n  .pt-md-4 {\n    padding-top: 1.5rem !important;\n  }\n  .pt-md-5 {\n    padding-top: 3rem !important;\n  }\n  .pe-md-0 {\n    padding-right: 0 !important;\n  }\n  .pe-md-1 {\n    padding-right: 0.25rem !important;\n  }\n  .pe-md-2 {\n    padding-right: 0.5rem !important;\n  }\n  .pe-md-3 {\n    padding-right: 1rem !important;\n  }\n  .pe-md-4 {\n    padding-right: 1.5rem !important;\n  }\n  .pe-md-5 {\n    padding-right: 3rem !important;\n  }\n  .pb-md-0 {\n    padding-bottom: 0 !important;\n  }\n  .pb-md-1 {\n    padding-bottom: 0.25rem !important;\n  }\n  .pb-md-2 {\n    padding-bottom: 0.5rem !important;\n  }\n  .pb-md-3 {\n    padding-bottom: 1rem !important;\n  }\n  .pb-md-4 {\n    padding-bottom: 1.5rem !important;\n  }\n  .pb-md-5 {\n    padding-bottom: 3rem !important;\n  }\n  .ps-md-0 {\n    padding-left: 0 !important;\n  }\n  .ps-md-1 {\n    padding-left: 0.25rem !important;\n  }\n  .ps-md-2 {\n    padding-left: 0.5rem !important;\n  }\n  .ps-md-3 {\n    padding-left: 1rem !important;\n  }\n  .ps-md-4 {\n    padding-left: 1.5rem !important;\n  }\n  .ps-md-5 {\n    padding-left: 3rem !important;\n  }\n  .text-md-start {\n    text-align: left !important;\n  }\n  .text-md-end {\n    text-align: right !important;\n  }\n  .text-md-center {\n    text-align: center !important;\n  }\n}\n\n@media (min-width: 992px) {\n  .float-lg-start {\n    float: left !important;\n  }\n  .float-lg-end {\n    float: right !important;\n  }\n  .float-lg-none {\n    float: none !important;\n  }\n  .d-lg-inline {\n    display: inline !important;\n  }\n  .d-lg-inline-block {\n    display: inline-block !important;\n  }\n  .d-lg-block {\n    display: block !important;\n  }\n  .d-lg-grid {\n    display: grid !important;\n  }\n  .d-lg-table {\n    display: table !important;\n  }\n  .d-lg-table-row {\n    display: table-row !important;\n  }\n  .d-lg-table-cell {\n    display: table-cell !important;\n  }\n  .d-lg-flex {\n    display: -ms-flexbox !important;\n    display: flex !important;\n  }\n  .d-lg-inline-flex {\n    display: -ms-inline-flexbox !important;\n    display: inline-flex !important;\n  }\n  .d-lg-none {\n    display: none !important;\n  }\n  .flex-lg-fill {\n    -ms-flex: 1 1 auto !important;\n    flex: 1 1 auto !important;\n  }\n  .flex-lg-row {\n    -ms-flex-direction: row !important;\n    flex-direction: row !important;\n  }\n  .flex-lg-column {\n    -ms-flex-direction: column !important;\n    flex-direction: column !important;\n  }\n  .flex-lg-row-reverse {\n    -ms-flex-direction: row-reverse !important;\n    flex-direction: row-reverse !important;\n  }\n  .flex-lg-column-reverse {\n    -ms-flex-direction: column-reverse !important;\n    flex-direction: column-reverse !important;\n  }\n  .flex-lg-grow-0 {\n    -ms-flex-positive: 0 !important;\n    flex-grow: 0 !important;\n  }\n  .flex-lg-grow-1 {\n    -ms-flex-positive: 1 !important;\n    flex-grow: 1 !important;\n  }\n  .flex-lg-shrink-0 {\n    -ms-flex-negative: 0 !important;\n    flex-shrink: 0 !important;\n  }\n  .flex-lg-shrink-1 {\n    -ms-flex-negative: 1 !important;\n    flex-shrink: 1 !important;\n  }\n  .flex-lg-wrap {\n    -ms-flex-wrap: wrap !important;\n    flex-wrap: wrap !important;\n  }\n  .flex-lg-nowrap {\n    -ms-flex-wrap: nowrap !important;\n    flex-wrap: nowrap !important;\n  }\n  .flex-lg-wrap-reverse {\n    -ms-flex-wrap: wrap-reverse !important;\n    flex-wrap: wrap-reverse !important;\n  }\n  .gap-lg-0 {\n    gap: 0 !important;\n  }\n  .gap-lg-1 {\n    gap: 0.25rem !important;\n  }\n  .gap-lg-2 {\n    gap: 0.5rem !important;\n  }\n  .gap-lg-3 {\n    gap: 1rem !important;\n  }\n  .gap-lg-4 {\n    gap: 1.5rem !important;\n  }\n  .gap-lg-5 {\n    gap: 3rem !important;\n  }\n  .justify-content-lg-start {\n    -ms-flex-pack: start !important;\n    justify-content: flex-start !important;\n  }\n  .justify-content-lg-end {\n    -ms-flex-pack: end !important;\n    justify-content: flex-end !important;\n  }\n  .justify-content-lg-center {\n    -ms-flex-pack: center !important;\n    justify-content: center !important;\n  }\n  .justify-content-lg-between {\n    -ms-flex-pack: justify !important;\n    justify-content: space-between !important;\n  }\n  .justify-content-lg-around {\n    -ms-flex-pack: distribute !important;\n    justify-content: space-around !important;\n  }\n  .justify-content-lg-evenly {\n    -ms-flex-pack: space-evenly !important;\n    justify-content: space-evenly !important;\n  }\n  .align-items-lg-start {\n    -ms-flex-align: start !important;\n    align-items: flex-start !important;\n  }\n  .align-items-lg-end {\n    -ms-flex-align: end !important;\n    align-items: flex-end !important;\n  }\n  .align-items-lg-center {\n    -ms-flex-align: center !important;\n    align-items: center !important;\n  }\n  .align-items-lg-baseline {\n    -ms-flex-align: baseline !important;\n    align-items: baseline !important;\n  }\n  .align-items-lg-stretch {\n    -ms-flex-align: stretch !important;\n    align-items: stretch !important;\n  }\n  .align-content-lg-start {\n    -ms-flex-line-pack: start !important;\n    align-content: flex-start !important;\n  }\n  .align-content-lg-end {\n    -ms-flex-line-pack: end !important;\n    align-content: flex-end !important;\n  }\n  .align-content-lg-center {\n    -ms-flex-line-pack: center !important;\n    align-content: center !important;\n  }\n  .align-content-lg-between {\n    -ms-flex-line-pack: justify !important;\n    align-content: space-between !important;\n  }\n  .align-content-lg-around {\n    -ms-flex-line-pack: distribute !important;\n    align-content: space-around !important;\n  }\n  .align-content-lg-stretch {\n    -ms-flex-line-pack: stretch !important;\n    align-content: stretch !important;\n  }\n  .align-self-lg-auto {\n    -ms-flex-item-align: auto !important;\n    align-self: auto !important;\n  }\n  .align-self-lg-start {\n    -ms-flex-item-align: start !important;\n    align-self: flex-start !important;\n  }\n  .align-self-lg-end {\n    -ms-flex-item-align: end !important;\n    align-self: flex-end !important;\n  }\n  .align-self-lg-center {\n    -ms-flex-item-align: center !important;\n    align-self: center !important;\n  }\n  .align-self-lg-baseline {\n    -ms-flex-item-align: baseline !important;\n    align-self: baseline !important;\n  }\n  .align-self-lg-stretch {\n    -ms-flex-item-align: stretch !important;\n    align-self: stretch !important;\n  }\n  .order-lg-first {\n    -ms-flex-order: -1 !important;\n    order: -1 !important;\n  }\n  .order-lg-0 {\n    -ms-flex-order: 0 !important;\n    order: 0 !important;\n  }\n  .order-lg-1 {\n    -ms-flex-order: 1 !important;\n    order: 1 !important;\n  }\n  .order-lg-2 {\n    -ms-flex-order: 2 !important;\n    order: 2 !important;\n  }\n  .order-lg-3 {\n    -ms-flex-order: 3 !important;\n    order: 3 !important;\n  }\n  .order-lg-4 {\n    -ms-flex-order: 4 !important;\n    order: 4 !important;\n  }\n  .order-lg-5 {\n    -ms-flex-order: 5 !important;\n    order: 5 !important;\n  }\n  .order-lg-last {\n    -ms-flex-order: 6 !important;\n    order: 6 !important;\n  }\n  .m-lg-0 {\n    margin: 0 !important;\n  }\n  .m-lg-1 {\n    margin: 0.25rem !important;\n  }\n  .m-lg-2 {\n    margin: 0.5rem !important;\n  }\n  .m-lg-3 {\n    margin: 1rem !important;\n  }\n  .m-lg-4 {\n    margin: 1.5rem !important;\n  }\n  .m-lg-5 {\n    margin: 3rem !important;\n  }\n  .m-lg-auto {\n    margin: auto !important;\n  }\n  .mx-lg-0 {\n    margin-right: 0 !important;\n    margin-left: 0 !important;\n  }\n  .mx-lg-1 {\n    margin-right: 0.25rem !important;\n    margin-left: 0.25rem !important;\n  }\n  .mx-lg-2 {\n    margin-right: 0.5rem !important;\n    margin-left: 0.5rem !important;\n  }\n  .mx-lg-3 {\n    margin-right: 1rem !important;\n    margin-left: 1rem !important;\n  }\n  .mx-lg-4 {\n    margin-right: 1.5rem !important;\n    margin-left: 1.5rem !important;\n  }\n  .mx-lg-5 {\n    margin-right: 3rem !important;\n    margin-left: 3rem !important;\n  }\n  .mx-lg-auto {\n    margin-right: auto !important;\n    margin-left: auto !important;\n  }\n  .my-lg-0 {\n    margin-top: 0 !important;\n    margin-bottom: 0 !important;\n  }\n  .my-lg-1 {\n    margin-top: 0.25rem !important;\n    margin-bottom: 0.25rem !important;\n  }\n  .my-lg-2 {\n    margin-top: 0.5rem !important;\n    margin-bottom: 0.5rem !important;\n  }\n  .my-lg-3 {\n    margin-top: 1rem !important;\n    margin-bottom: 1rem !important;\n  }\n  .my-lg-4 {\n    margin-top: 1.5rem !important;\n    margin-bottom: 1.5rem !important;\n  }\n  .my-lg-5 {\n    margin-top: 3rem !important;\n    margin-bottom: 3rem !important;\n  }\n  .my-lg-auto {\n    margin-top: auto !important;\n    margin-bottom: auto !important;\n  }\n  .mt-lg-0 {\n    margin-top: 0 !important;\n  }\n  .mt-lg-1 {\n    margin-top: 0.25rem !important;\n  }\n  .mt-lg-2 {\n    margin-top: 0.5rem !important;\n  }\n  .mt-lg-3 {\n    margin-top: 1rem !important;\n  }\n  .mt-lg-4 {\n    margin-top: 1.5rem !important;\n  }\n  .mt-lg-5 {\n    margin-top: 3rem !important;\n  }\n  .mt-lg-auto {\n    margin-top: auto !important;\n  }\n  .me-lg-0 {\n    margin-right: 0 !important;\n  }\n  .me-lg-1 {\n    margin-right: 0.25rem !important;\n  }\n  .me-lg-2 {\n    margin-right: 0.5rem !important;\n  }\n  .me-lg-3 {\n    margin-right: 1rem !important;\n  }\n  .me-lg-4 {\n    margin-right: 1.5rem !important;\n  }\n  .me-lg-5 {\n    margin-right: 3rem !important;\n  }\n  .me-lg-auto {\n    margin-right: auto !important;\n  }\n  .mb-lg-0 {\n    margin-bottom: 0 !important;\n  }\n  .mb-lg-1 {\n    margin-bottom: 0.25rem !important;\n  }\n  .mb-lg-2 {\n    margin-bottom: 0.5rem !important;\n  }\n  .mb-lg-3 {\n    margin-bottom: 1rem !important;\n  }\n  .mb-lg-4 {\n    margin-bottom: 1.5rem !important;\n  }\n  .mb-lg-5 {\n    margin-bottom: 3rem !important;\n  }\n  .mb-lg-auto {\n    margin-bottom: auto !important;\n  }\n  .ms-lg-0 {\n    margin-left: 0 !important;\n  }\n  .ms-lg-1 {\n    margin-left: 0.25rem !important;\n  }\n  .ms-lg-2 {\n    margin-left: 0.5rem !important;\n  }\n  .ms-lg-3 {\n    margin-left: 1rem !important;\n  }\n  .ms-lg-4 {\n    margin-left: 1.5rem !important;\n  }\n  .ms-lg-5 {\n    margin-left: 3rem !important;\n  }\n  .ms-lg-auto {\n    margin-left: auto !important;\n  }\n  .p-lg-0 {\n    padding: 0 !important;\n  }\n  .p-lg-1 {\n    padding: 0.25rem !important;\n  }\n  .p-lg-2 {\n    padding: 0.5rem !important;\n  }\n  .p-lg-3 {\n    padding: 1rem !important;\n  }\n  .p-lg-4 {\n    padding: 1.5rem !important;\n  }\n  .p-lg-5 {\n    padding: 3rem !important;\n  }\n  .px-lg-0 {\n    padding-right: 0 !important;\n    padding-left: 0 !important;\n  }\n  .px-lg-1 {\n    padding-right: 0.25rem !important;\n    padding-left: 0.25rem !important;\n  }\n  .px-lg-2 {\n    padding-right: 0.5rem !important;\n    padding-left: 0.5rem !important;\n  }\n  .px-lg-3 {\n    padding-right: 1rem !important;\n    padding-left: 1rem !important;\n  }\n  .px-lg-4 {\n    padding-right: 1.5rem !important;\n    padding-left: 1.5rem !important;\n  }\n  .px-lg-5 {\n    padding-right: 3rem !important;\n    padding-left: 3rem !important;\n  }\n  .py-lg-0 {\n    padding-top: 0 !important;\n    padding-bottom: 0 !important;\n  }\n  .py-lg-1 {\n    padding-top: 0.25rem !important;\n    padding-bottom: 0.25rem !important;\n  }\n  .py-lg-2 {\n    padding-top: 0.5rem !important;\n    padding-bottom: 0.5rem !important;\n  }\n  .py-lg-3 {\n    padding-top: 1rem !important;\n    padding-bottom: 1rem !important;\n  }\n  .py-lg-4 {\n    padding-top: 1.5rem !important;\n    padding-bottom: 1.5rem !important;\n  }\n  .py-lg-5 {\n    padding-top: 3rem !important;\n    padding-bottom: 3rem !important;\n  }\n  .pt-lg-0 {\n    padding-top: 0 !important;\n  }\n  .pt-lg-1 {\n    padding-top: 0.25rem !important;\n  }\n  .pt-lg-2 {\n    padding-top: 0.5rem !important;\n  }\n  .pt-lg-3 {\n    padding-top: 1rem !important;\n  }\n  .pt-lg-4 {\n    padding-top: 1.5rem !important;\n  }\n  .pt-lg-5 {\n    padding-top: 3rem !important;\n  }\n  .pe-lg-0 {\n    padding-right: 0 !important;\n  }\n  .pe-lg-1 {\n    padding-right: 0.25rem !important;\n  }\n  .pe-lg-2 {\n    padding-right: 0.5rem !important;\n  }\n  .pe-lg-3 {\n    padding-right: 1rem !important;\n  }\n  .pe-lg-4 {\n    padding-right: 1.5rem !important;\n  }\n  .pe-lg-5 {\n    padding-right: 3rem !important;\n  }\n  .pb-lg-0 {\n    padding-bottom: 0 !important;\n  }\n  .pb-lg-1 {\n    padding-bottom: 0.25rem !important;\n  }\n  .pb-lg-2 {\n    padding-bottom: 0.5rem !important;\n  }\n  .pb-lg-3 {\n    padding-bottom: 1rem !important;\n  }\n  .pb-lg-4 {\n    padding-bottom: 1.5rem !important;\n  }\n  .pb-lg-5 {\n    padding-bottom: 3rem !important;\n  }\n  .ps-lg-0 {\n    padding-left: 0 !important;\n  }\n  .ps-lg-1 {\n    padding-left: 0.25rem !important;\n  }\n  .ps-lg-2 {\n    padding-left: 0.5rem !important;\n  }\n  .ps-lg-3 {\n    padding-left: 1rem !important;\n  }\n  .ps-lg-4 {\n    padding-left: 1.5rem !important;\n  }\n  .ps-lg-5 {\n    padding-left: 3rem !important;\n  }\n  .text-lg-start {\n    text-align: left !important;\n  }\n  .text-lg-end {\n    text-align: right !important;\n  }\n  .text-lg-center {\n    text-align: center !important;\n  }\n}\n\n@media (min-width: 1200px) {\n  .float-xl-start {\n    float: left !important;\n  }\n  .float-xl-end {\n    float: right !important;\n  }\n  .float-xl-none {\n    float: none !important;\n  }\n  .d-xl-inline {\n    display: inline !important;\n  }\n  .d-xl-inline-block {\n    display: inline-block !important;\n  }\n  .d-xl-block {\n    display: block !important;\n  }\n  .d-xl-grid {\n    display: grid !important;\n  }\n  .d-xl-table {\n    display: table !important;\n  }\n  .d-xl-table-row {\n    display: table-row !important;\n  }\n  .d-xl-table-cell {\n    display: table-cell !important;\n  }\n  .d-xl-flex {\n    display: -ms-flexbox !important;\n    display: flex !important;\n  }\n  .d-xl-inline-flex {\n    display: -ms-inline-flexbox !important;\n    display: inline-flex !important;\n  }\n  .d-xl-none {\n    display: none !important;\n  }\n  .flex-xl-fill {\n    -ms-flex: 1 1 auto !important;\n    flex: 1 1 auto !important;\n  }\n  .flex-xl-row {\n    -ms-flex-direction: row !important;\n    flex-direction: row !important;\n  }\n  .flex-xl-column {\n    -ms-flex-direction: column !important;\n    flex-direction: column !important;\n  }\n  .flex-xl-row-reverse {\n    -ms-flex-direction: row-reverse !important;\n    flex-direction: row-reverse !important;\n  }\n  .flex-xl-column-reverse {\n    -ms-flex-direction: column-reverse !important;\n    flex-direction: column-reverse !important;\n  }\n  .flex-xl-grow-0 {\n    -ms-flex-positive: 0 !important;\n    flex-grow: 0 !important;\n  }\n  .flex-xl-grow-1 {\n    -ms-flex-positive: 1 !important;\n    flex-grow: 1 !important;\n  }\n  .flex-xl-shrink-0 {\n    -ms-flex-negative: 0 !important;\n    flex-shrink: 0 !important;\n  }\n  .flex-xl-shrink-1 {\n    -ms-flex-negative: 1 !important;\n    flex-shrink: 1 !important;\n  }\n  .flex-xl-wrap {\n    -ms-flex-wrap: wrap !important;\n    flex-wrap: wrap !important;\n  }\n  .flex-xl-nowrap {\n    -ms-flex-wrap: nowrap !important;\n    flex-wrap: nowrap !important;\n  }\n  .flex-xl-wrap-reverse {\n    -ms-flex-wrap: wrap-reverse !important;\n    flex-wrap: wrap-reverse !important;\n  }\n  .gap-xl-0 {\n    gap: 0 !important;\n  }\n  .gap-xl-1 {\n    gap: 0.25rem !important;\n  }\n  .gap-xl-2 {\n    gap: 0.5rem !important;\n  }\n  .gap-xl-3 {\n    gap: 1rem !important;\n  }\n  .gap-xl-4 {\n    gap: 1.5rem !important;\n  }\n  .gap-xl-5 {\n    gap: 3rem !important;\n  }\n  .justify-content-xl-start {\n    -ms-flex-pack: start !important;\n    justify-content: flex-start !important;\n  }\n  .justify-content-xl-end {\n    -ms-flex-pack: end !important;\n    justify-content: flex-end !important;\n  }\n  .justify-content-xl-center {\n    -ms-flex-pack: center !important;\n    justify-content: center !important;\n  }\n  .justify-content-xl-between {\n    -ms-flex-pack: justify !important;\n    justify-content: space-between !important;\n  }\n  .justify-content-xl-around {\n    -ms-flex-pack: distribute !important;\n    justify-content: space-around !important;\n  }\n  .justify-content-xl-evenly {\n    -ms-flex-pack: space-evenly !important;\n    justify-content: space-evenly !important;\n  }\n  .align-items-xl-start {\n    -ms-flex-align: start !important;\n    align-items: flex-start !important;\n  }\n  .align-items-xl-end {\n    -ms-flex-align: end !important;\n    align-items: flex-end !important;\n  }\n  .align-items-xl-center {\n    -ms-flex-align: center !important;\n    align-items: center !important;\n  }\n  .align-items-xl-baseline {\n    -ms-flex-align: baseline !important;\n    align-items: baseline !important;\n  }\n  .align-items-xl-stretch {\n    -ms-flex-align: stretch !important;\n    align-items: stretch !important;\n  }\n  .align-content-xl-start {\n    -ms-flex-line-pack: start !important;\n    align-content: flex-start !important;\n  }\n  .align-content-xl-end {\n    -ms-flex-line-pack: end !important;\n    align-content: flex-end !important;\n  }\n  .align-content-xl-center {\n    -ms-flex-line-pack: center !important;\n    align-content: center !important;\n  }\n  .align-content-xl-between {\n    -ms-flex-line-pack: justify !important;\n    align-content: space-between !important;\n  }\n  .align-content-xl-around {\n    -ms-flex-line-pack: distribute !important;\n    align-content: space-around !important;\n  }\n  .align-content-xl-stretch {\n    -ms-flex-line-pack: stretch !important;\n    align-content: stretch !important;\n  }\n  .align-self-xl-auto {\n    -ms-flex-item-align: auto !important;\n    align-self: auto !important;\n  }\n  .align-self-xl-start {\n    -ms-flex-item-align: start !important;\n    align-self: flex-start !important;\n  }\n  .align-self-xl-end {\n    -ms-flex-item-align: end !important;\n    align-self: flex-end !important;\n  }\n  .align-self-xl-center {\n    -ms-flex-item-align: center !important;\n    align-self: center !important;\n  }\n  .align-self-xl-baseline {\n    -ms-flex-item-align: baseline !important;\n    align-self: baseline !important;\n  }\n  .align-self-xl-stretch {\n    -ms-flex-item-align: stretch !important;\n    align-self: stretch !important;\n  }\n  .order-xl-first {\n    -ms-flex-order: -1 !important;\n    order: -1 !important;\n  }\n  .order-xl-0 {\n    -ms-flex-order: 0 !important;\n    order: 0 !important;\n  }\n  .order-xl-1 {\n    -ms-flex-order: 1 !important;\n    order: 1 !important;\n  }\n  .order-xl-2 {\n    -ms-flex-order: 2 !important;\n    order: 2 !important;\n  }\n  .order-xl-3 {\n    -ms-flex-order: 3 !important;\n    order: 3 !important;\n  }\n  .order-xl-4 {\n    -ms-flex-order: 4 !important;\n    order: 4 !important;\n  }\n  .order-xl-5 {\n    -ms-flex-order: 5 !important;\n    order: 5 !important;\n  }\n  .order-xl-last {\n    -ms-flex-order: 6 !important;\n    order: 6 !important;\n  }\n  .m-xl-0 {\n    margin: 0 !important;\n  }\n  .m-xl-1 {\n    margin: 0.25rem !important;\n  }\n  .m-xl-2 {\n    margin: 0.5rem !important;\n  }\n  .m-xl-3 {\n    margin: 1rem !important;\n  }\n  .m-xl-4 {\n    margin: 1.5rem !important;\n  }\n  .m-xl-5 {\n    margin: 3rem !important;\n  }\n  .m-xl-auto {\n    margin: auto !important;\n  }\n  .mx-xl-0 {\n    margin-right: 0 !important;\n    margin-left: 0 !important;\n  }\n  .mx-xl-1 {\n    margin-right: 0.25rem !important;\n    margin-left: 0.25rem !important;\n  }\n  .mx-xl-2 {\n    margin-right: 0.5rem !important;\n    margin-left: 0.5rem !important;\n  }\n  .mx-xl-3 {\n    margin-right: 1rem !important;\n    margin-left: 1rem !important;\n  }\n  .mx-xl-4 {\n    margin-right: 1.5rem !important;\n    margin-left: 1.5rem !important;\n  }\n  .mx-xl-5 {\n    margin-right: 3rem !important;\n    margin-left: 3rem !important;\n  }\n  .mx-xl-auto {\n    margin-right: auto !important;\n    margin-left: auto !important;\n  }\n  .my-xl-0 {\n    margin-top: 0 !important;\n    margin-bottom: 0 !important;\n  }\n  .my-xl-1 {\n    margin-top: 0.25rem !important;\n    margin-bottom: 0.25rem !important;\n  }\n  .my-xl-2 {\n    margin-top: 0.5rem !important;\n    margin-bottom: 0.5rem !important;\n  }\n  .my-xl-3 {\n    margin-top: 1rem !important;\n    margin-bottom: 1rem !important;\n  }\n  .my-xl-4 {\n    margin-top: 1.5rem !important;\n    margin-bottom: 1.5rem !important;\n  }\n  .my-xl-5 {\n    margin-top: 3rem !important;\n    margin-bottom: 3rem !important;\n  }\n  .my-xl-auto {\n    margin-top: auto !important;\n    margin-bottom: auto !important;\n  }\n  .mt-xl-0 {\n    margin-top: 0 !important;\n  }\n  .mt-xl-1 {\n    margin-top: 0.25rem !important;\n  }\n  .mt-xl-2 {\n    margin-top: 0.5rem !important;\n  }\n  .mt-xl-3 {\n    margin-top: 1rem !important;\n  }\n  .mt-xl-4 {\n    margin-top: 1.5rem !important;\n  }\n  .mt-xl-5 {\n    margin-top: 3rem !important;\n  }\n  .mt-xl-auto {\n    margin-top: auto !important;\n  }\n  .me-xl-0 {\n    margin-right: 0 !important;\n  }\n  .me-xl-1 {\n    margin-right: 0.25rem !important;\n  }\n  .me-xl-2 {\n    margin-right: 0.5rem !important;\n  }\n  .me-xl-3 {\n    margin-right: 1rem !important;\n  }\n  .me-xl-4 {\n    margin-right: 1.5rem !important;\n  }\n  .me-xl-5 {\n    margin-right: 3rem !important;\n  }\n  .me-xl-auto {\n    margin-right: auto !important;\n  }\n  .mb-xl-0 {\n    margin-bottom: 0 !important;\n  }\n  .mb-xl-1 {\n    margin-bottom: 0.25rem !important;\n  }\n  .mb-xl-2 {\n    margin-bottom: 0.5rem !important;\n  }\n  .mb-xl-3 {\n    margin-bottom: 1rem !important;\n  }\n  .mb-xl-4 {\n    margin-bottom: 1.5rem !important;\n  }\n  .mb-xl-5 {\n    margin-bottom: 3rem !important;\n  }\n  .mb-xl-auto {\n    margin-bottom: auto !important;\n  }\n  .ms-xl-0 {\n    margin-left: 0 !important;\n  }\n  .ms-xl-1 {\n    margin-left: 0.25rem !important;\n  }\n  .ms-xl-2 {\n    margin-left: 0.5rem !important;\n  }\n  .ms-xl-3 {\n    margin-left: 1rem !important;\n  }\n  .ms-xl-4 {\n    margin-left: 1.5rem !important;\n  }\n  .ms-xl-5 {\n    margin-left: 3rem !important;\n  }\n  .ms-xl-auto {\n    margin-left: auto !important;\n  }\n  .p-xl-0 {\n    padding: 0 !important;\n  }\n  .p-xl-1 {\n    padding: 0.25rem !important;\n  }\n  .p-xl-2 {\n    padding: 0.5rem !important;\n  }\n  .p-xl-3 {\n    padding: 1rem !important;\n  }\n  .p-xl-4 {\n    padding: 1.5rem !important;\n  }\n  .p-xl-5 {\n    padding: 3rem !important;\n  }\n  .px-xl-0 {\n    padding-right: 0 !important;\n    padding-left: 0 !important;\n  }\n  .px-xl-1 {\n    padding-right: 0.25rem !important;\n    padding-left: 0.25rem !important;\n  }\n  .px-xl-2 {\n    padding-right: 0.5rem !important;\n    padding-left: 0.5rem !important;\n  }\n  .px-xl-3 {\n    padding-right: 1rem !important;\n    padding-left: 1rem !important;\n  }\n  .px-xl-4 {\n    padding-right: 1.5rem !important;\n    padding-left: 1.5rem !important;\n  }\n  .px-xl-5 {\n    padding-right: 3rem !important;\n    padding-left: 3rem !important;\n  }\n  .py-xl-0 {\n    padding-top: 0 !important;\n    padding-bottom: 0 !important;\n  }\n  .py-xl-1 {\n    padding-top: 0.25rem !important;\n    padding-bottom: 0.25rem !important;\n  }\n  .py-xl-2 {\n    padding-top: 0.5rem !important;\n    padding-bottom: 0.5rem !important;\n  }\n  .py-xl-3 {\n    padding-top: 1rem !important;\n    padding-bottom: 1rem !important;\n  }\n  .py-xl-4 {\n    padding-top: 1.5rem !important;\n    padding-bottom: 1.5rem !important;\n  }\n  .py-xl-5 {\n    padding-top: 3rem !important;\n    padding-bottom: 3rem !important;\n  }\n  .pt-xl-0 {\n    padding-top: 0 !important;\n  }\n  .pt-xl-1 {\n    padding-top: 0.25rem !important;\n  }\n  .pt-xl-2 {\n    padding-top: 0.5rem !important;\n  }\n  .pt-xl-3 {\n    padding-top: 1rem !important;\n  }\n  .pt-xl-4 {\n    padding-top: 1.5rem !important;\n  }\n  .pt-xl-5 {\n    padding-top: 3rem !important;\n  }\n  .pe-xl-0 {\n    padding-right: 0 !important;\n  }\n  .pe-xl-1 {\n    padding-right: 0.25rem !important;\n  }\n  .pe-xl-2 {\n    padding-right: 0.5rem !important;\n  }\n  .pe-xl-3 {\n    padding-right: 1rem !important;\n  }\n  .pe-xl-4 {\n    padding-right: 1.5rem !important;\n  }\n  .pe-xl-5 {\n    padding-right: 3rem !important;\n  }\n  .pb-xl-0 {\n    padding-bottom: 0 !important;\n  }\n  .pb-xl-1 {\n    padding-bottom: 0.25rem !important;\n  }\n  .pb-xl-2 {\n    padding-bottom: 0.5rem !important;\n  }\n  .pb-xl-3 {\n    padding-bottom: 1rem !important;\n  }\n  .pb-xl-4 {\n    padding-bottom: 1.5rem !important;\n  }\n  .pb-xl-5 {\n    padding-bottom: 3rem !important;\n  }\n  .ps-xl-0 {\n    padding-left: 0 !important;\n  }\n  .ps-xl-1 {\n    padding-left: 0.25rem !important;\n  }\n  .ps-xl-2 {\n    padding-left: 0.5rem !important;\n  }\n  .ps-xl-3 {\n    padding-left: 1rem !important;\n  }\n  .ps-xl-4 {\n    padding-left: 1.5rem !important;\n  }\n  .ps-xl-5 {\n    padding-left: 3rem !important;\n  }\n  .text-xl-start {\n    text-align: left !important;\n  }\n  .text-xl-end {\n    text-align: right !important;\n  }\n  .text-xl-center {\n    text-align: center !important;\n  }\n}\n\n@media (min-width: 1400px) {\n  .float-xxl-start {\n    float: left !important;\n  }\n  .float-xxl-end {\n    float: right !important;\n  }\n  .float-xxl-none {\n    float: none !important;\n  }\n  .d-xxl-inline {\n    display: inline !important;\n  }\n  .d-xxl-inline-block {\n    display: inline-block !important;\n  }\n  .d-xxl-block {\n    display: block !important;\n  }\n  .d-xxl-grid {\n    display: grid !important;\n  }\n  .d-xxl-table {\n    display: table !important;\n  }\n  .d-xxl-table-row {\n    display: table-row !important;\n  }\n  .d-xxl-table-cell {\n    display: table-cell !important;\n  }\n  .d-xxl-flex {\n    display: -ms-flexbox !important;\n    display: flex !important;\n  }\n  .d-xxl-inline-flex {\n    display: -ms-inline-flexbox !important;\n    display: inline-flex !important;\n  }\n  .d-xxl-none {\n    display: none !important;\n  }\n  .flex-xxl-fill {\n    -ms-flex: 1 1 auto !important;\n    flex: 1 1 auto !important;\n  }\n  .flex-xxl-row {\n    -ms-flex-direction: row !important;\n    flex-direction: row !important;\n  }\n  .flex-xxl-column {\n    -ms-flex-direction: column !important;\n    flex-direction: column !important;\n  }\n  .flex-xxl-row-reverse {\n    -ms-flex-direction: row-reverse !important;\n    flex-direction: row-reverse !important;\n  }\n  .flex-xxl-column-reverse {\n    -ms-flex-direction: column-reverse !important;\n    flex-direction: column-reverse !important;\n  }\n  .flex-xxl-grow-0 {\n    -ms-flex-positive: 0 !important;\n    flex-grow: 0 !important;\n  }\n  .flex-xxl-grow-1 {\n    -ms-flex-positive: 1 !important;\n    flex-grow: 1 !important;\n  }\n  .flex-xxl-shrink-0 {\n    -ms-flex-negative: 0 !important;\n    flex-shrink: 0 !important;\n  }\n  .flex-xxl-shrink-1 {\n    -ms-flex-negative: 1 !important;\n    flex-shrink: 1 !important;\n  }\n  .flex-xxl-wrap {\n    -ms-flex-wrap: wrap !important;\n    flex-wrap: wrap !important;\n  }\n  .flex-xxl-nowrap {\n    -ms-flex-wrap: nowrap !important;\n    flex-wrap: nowrap !important;\n  }\n  .flex-xxl-wrap-reverse {\n    -ms-flex-wrap: wrap-reverse !important;\n    flex-wrap: wrap-reverse !important;\n  }\n  .gap-xxl-0 {\n    gap: 0 !important;\n  }\n  .gap-xxl-1 {\n    gap: 0.25rem !important;\n  }\n  .gap-xxl-2 {\n    gap: 0.5rem !important;\n  }\n  .gap-xxl-3 {\n    gap: 1rem !important;\n  }\n  .gap-xxl-4 {\n    gap: 1.5rem !important;\n  }\n  .gap-xxl-5 {\n    gap: 3rem !important;\n  }\n  .justify-content-xxl-start {\n    -ms-flex-pack: start !important;\n    justify-content: flex-start !important;\n  }\n  .justify-content-xxl-end {\n    -ms-flex-pack: end !important;\n    justify-content: flex-end !important;\n  }\n  .justify-content-xxl-center {\n    -ms-flex-pack: center !important;\n    justify-content: center !important;\n  }\n  .justify-content-xxl-between {\n    -ms-flex-pack: justify !important;\n    justify-content: space-between !important;\n  }\n  .justify-content-xxl-around {\n    -ms-flex-pack: distribute !important;\n    justify-content: space-around !important;\n  }\n  .justify-content-xxl-evenly {\n    -ms-flex-pack: space-evenly !important;\n    justify-content: space-evenly !important;\n  }\n  .align-items-xxl-start {\n    -ms-flex-align: start !important;\n    align-items: flex-start !important;\n  }\n  .align-items-xxl-end {\n    -ms-flex-align: end !important;\n    align-items: flex-end !important;\n  }\n  .align-items-xxl-center {\n    -ms-flex-align: center !important;\n    align-items: center !important;\n  }\n  .align-items-xxl-baseline {\n    -ms-flex-align: baseline !important;\n    align-items: baseline !important;\n  }\n  .align-items-xxl-stretch {\n    -ms-flex-align: stretch !important;\n    align-items: stretch !important;\n  }\n  .align-content-xxl-start {\n    -ms-flex-line-pack: start !important;\n    align-content: flex-start !important;\n  }\n  .align-content-xxl-end {\n    -ms-flex-line-pack: end !important;\n    align-content: flex-end !important;\n  }\n  .align-content-xxl-center {\n    -ms-flex-line-pack: center !important;\n    align-content: center !important;\n  }\n  .align-content-xxl-between {\n    -ms-flex-line-pack: justify !important;\n    align-content: space-between !important;\n  }\n  .align-content-xxl-around {\n    -ms-flex-line-pack: distribute !important;\n    align-content: space-around !important;\n  }\n  .align-content-xxl-stretch {\n    -ms-flex-line-pack: stretch !important;\n    align-content: stretch !important;\n  }\n  .align-self-xxl-auto {\n    -ms-flex-item-align: auto !important;\n    align-self: auto !important;\n  }\n  .align-self-xxl-start {\n    -ms-flex-item-align: start !important;\n    align-self: flex-start !important;\n  }\n  .align-self-xxl-end {\n    -ms-flex-item-align: end !important;\n    align-self: flex-end !important;\n  }\n  .align-self-xxl-center {\n    -ms-flex-item-align: center !important;\n    align-self: center !important;\n  }\n  .align-self-xxl-baseline {\n    -ms-flex-item-align: baseline !important;\n    align-self: baseline !important;\n  }\n  .align-self-xxl-stretch {\n    -ms-flex-item-align: stretch !important;\n    align-self: stretch !important;\n  }\n  .order-xxl-first {\n    -ms-flex-order: -1 !important;\n    order: -1 !important;\n  }\n  .order-xxl-0 {\n    -ms-flex-order: 0 !important;\n    order: 0 !important;\n  }\n  .order-xxl-1 {\n    -ms-flex-order: 1 !important;\n    order: 1 !important;\n  }\n  .order-xxl-2 {\n    -ms-flex-order: 2 !important;\n    order: 2 !important;\n  }\n  .order-xxl-3 {\n    -ms-flex-order: 3 !important;\n    order: 3 !important;\n  }\n  .order-xxl-4 {\n    -ms-flex-order: 4 !important;\n    order: 4 !important;\n  }\n  .order-xxl-5 {\n    -ms-flex-order: 5 !important;\n    order: 5 !important;\n  }\n  .order-xxl-last {\n    -ms-flex-order: 6 !important;\n    order: 6 !important;\n  }\n  .m-xxl-0 {\n    margin: 0 !important;\n  }\n  .m-xxl-1 {\n    margin: 0.25rem !important;\n  }\n  .m-xxl-2 {\n    margin: 0.5rem !important;\n  }\n  .m-xxl-3 {\n    margin: 1rem !important;\n  }\n  .m-xxl-4 {\n    margin: 1.5rem !important;\n  }\n  .m-xxl-5 {\n    margin: 3rem !important;\n  }\n  .m-xxl-auto {\n    margin: auto !important;\n  }\n  .mx-xxl-0 {\n    margin-right: 0 !important;\n    margin-left: 0 !important;\n  }\n  .mx-xxl-1 {\n    margin-right: 0.25rem !important;\n    margin-left: 0.25rem !important;\n  }\n  .mx-xxl-2 {\n    margin-right: 0.5rem !important;\n    margin-left: 0.5rem !important;\n  }\n  .mx-xxl-3 {\n    margin-right: 1rem !important;\n    margin-left: 1rem !important;\n  }\n  .mx-xxl-4 {\n    margin-right: 1.5rem !important;\n    margin-left: 1.5rem !important;\n  }\n  .mx-xxl-5 {\n    margin-right: 3rem !important;\n    margin-left: 3rem !important;\n  }\n  .mx-xxl-auto {\n    margin-right: auto !important;\n    margin-left: auto !important;\n  }\n  .my-xxl-0 {\n    margin-top: 0 !important;\n    margin-bottom: 0 !important;\n  }\n  .my-xxl-1 {\n    margin-top: 0.25rem !important;\n    margin-bottom: 0.25rem !important;\n  }\n  .my-xxl-2 {\n    margin-top: 0.5rem !important;\n    margin-bottom: 0.5rem !important;\n  }\n  .my-xxl-3 {\n    margin-top: 1rem !important;\n    margin-bottom: 1rem !important;\n  }\n  .my-xxl-4 {\n    margin-top: 1.5rem !important;\n    margin-bottom: 1.5rem !important;\n  }\n  .my-xxl-5 {\n    margin-top: 3rem !important;\n    margin-bottom: 3rem !important;\n  }\n  .my-xxl-auto {\n    margin-top: auto !important;\n    margin-bottom: auto !important;\n  }\n  .mt-xxl-0 {\n    margin-top: 0 !important;\n  }\n  .mt-xxl-1 {\n    margin-top: 0.25rem !important;\n  }\n  .mt-xxl-2 {\n    margin-top: 0.5rem !important;\n  }\n  .mt-xxl-3 {\n    margin-top: 1rem !important;\n  }\n  .mt-xxl-4 {\n    margin-top: 1.5rem !important;\n  }\n  .mt-xxl-5 {\n    margin-top: 3rem !important;\n  }\n  .mt-xxl-auto {\n    margin-top: auto !important;\n  }\n  .me-xxl-0 {\n    margin-right: 0 !important;\n  }\n  .me-xxl-1 {\n    margin-right: 0.25rem !important;\n  }\n  .me-xxl-2 {\n    margin-right: 0.5rem !important;\n  }\n  .me-xxl-3 {\n    margin-right: 1rem !important;\n  }\n  .me-xxl-4 {\n    margin-right: 1.5rem !important;\n  }\n  .me-xxl-5 {\n    margin-right: 3rem !important;\n  }\n  .me-xxl-auto {\n    margin-right: auto !important;\n  }\n  .mb-xxl-0 {\n    margin-bottom: 0 !important;\n  }\n  .mb-xxl-1 {\n    margin-bottom: 0.25rem !important;\n  }\n  .mb-xxl-2 {\n    margin-bottom: 0.5rem !important;\n  }\n  .mb-xxl-3 {\n    margin-bottom: 1rem !important;\n  }\n  .mb-xxl-4 {\n    margin-bottom: 1.5rem !important;\n  }\n  .mb-xxl-5 {\n    margin-bottom: 3rem !important;\n  }\n  .mb-xxl-auto {\n    margin-bottom: auto !important;\n  }\n  .ms-xxl-0 {\n    margin-left: 0 !important;\n  }\n  .ms-xxl-1 {\n    margin-left: 0.25rem !important;\n  }\n  .ms-xxl-2 {\n    margin-left: 0.5rem !important;\n  }\n  .ms-xxl-3 {\n    margin-left: 1rem !important;\n  }\n  .ms-xxl-4 {\n    margin-left: 1.5rem !important;\n  }\n  .ms-xxl-5 {\n    margin-left: 3rem !important;\n  }\n  .ms-xxl-auto {\n    margin-left: auto !important;\n  }\n  .p-xxl-0 {\n    padding: 0 !important;\n  }\n  .p-xxl-1 {\n    padding: 0.25rem !important;\n  }\n  .p-xxl-2 {\n    padding: 0.5rem !important;\n  }\n  .p-xxl-3 {\n    padding: 1rem !important;\n  }\n  .p-xxl-4 {\n    padding: 1.5rem !important;\n  }\n  .p-xxl-5 {\n    padding: 3rem !important;\n  }\n  .px-xxl-0 {\n    padding-right: 0 !important;\n    padding-left: 0 !important;\n  }\n  .px-xxl-1 {\n    padding-right: 0.25rem !important;\n    padding-left: 0.25rem !important;\n  }\n  .px-xxl-2 {\n    padding-right: 0.5rem !important;\n    padding-left: 0.5rem !important;\n  }\n  .px-xxl-3 {\n    padding-right: 1rem !important;\n    padding-left: 1rem !important;\n  }\n  .px-xxl-4 {\n    padding-right: 1.5rem !important;\n    padding-left: 1.5rem !important;\n  }\n  .px-xxl-5 {\n    padding-right: 3rem !important;\n    padding-left: 3rem !important;\n  }\n  .py-xxl-0 {\n    padding-top: 0 !important;\n    padding-bottom: 0 !important;\n  }\n  .py-xxl-1 {\n    padding-top: 0.25rem !important;\n    padding-bottom: 0.25rem !important;\n  }\n  .py-xxl-2 {\n    padding-top: 0.5rem !important;\n    padding-bottom: 0.5rem !important;\n  }\n  .py-xxl-3 {\n    padding-top: 1rem !important;\n    padding-bottom: 1rem !important;\n  }\n  .py-xxl-4 {\n    padding-top: 1.5rem !important;\n    padding-bottom: 1.5rem !important;\n  }\n  .py-xxl-5 {\n    padding-top: 3rem !important;\n    padding-bottom: 3rem !important;\n  }\n  .pt-xxl-0 {\n    padding-top: 0 !important;\n  }\n  .pt-xxl-1 {\n    padding-top: 0.25rem !important;\n  }\n  .pt-xxl-2 {\n    padding-top: 0.5rem !important;\n  }\n  .pt-xxl-3 {\n    padding-top: 1rem !important;\n  }\n  .pt-xxl-4 {\n    padding-top: 1.5rem !important;\n  }\n  .pt-xxl-5 {\n    padding-top: 3rem !important;\n  }\n  .pe-xxl-0 {\n    padding-right: 0 !important;\n  }\n  .pe-xxl-1 {\n    padding-right: 0.25rem !important;\n  }\n  .pe-xxl-2 {\n    padding-right: 0.5rem !important;\n  }\n  .pe-xxl-3 {\n    padding-right: 1rem !important;\n  }\n  .pe-xxl-4 {\n    padding-right: 1.5rem !important;\n  }\n  .pe-xxl-5 {\n    padding-right: 3rem !important;\n  }\n  .pb-xxl-0 {\n    padding-bottom: 0 !important;\n  }\n  .pb-xxl-1 {\n    padding-bottom: 0.25rem !important;\n  }\n  .pb-xxl-2 {\n    padding-bottom: 0.5rem !important;\n  }\n  .pb-xxl-3 {\n    padding-bottom: 1rem !important;\n  }\n  .pb-xxl-4 {\n    padding-bottom: 1.5rem !important;\n  }\n  .pb-xxl-5 {\n    padding-bottom: 3rem !important;\n  }\n  .ps-xxl-0 {\n    padding-left: 0 !important;\n  }\n  .ps-xxl-1 {\n    padding-left: 0.25rem !important;\n  }\n  .ps-xxl-2 {\n    padding-left: 0.5rem !important;\n  }\n  .ps-xxl-3 {\n    padding-left: 1rem !important;\n  }\n  .ps-xxl-4 {\n    padding-left: 1.5rem !important;\n  }\n  .ps-xxl-5 {\n    padding-left: 3rem !important;\n  }\n  .text-xxl-start {\n    text-align: left !important;\n  }\n  .text-xxl-end {\n    text-align: right !important;\n  }\n  .text-xxl-center {\n    text-align: center !important;\n  }\n}\n\n@media (min-width: 1200px) {\n  .fs-1 {\n    font-size: 2.5rem !important;\n  }\n  .fs-2 {\n    font-size: 2rem !important;\n  }\n  .fs-3 {\n    font-size: 1.75rem !important;\n  }\n  .fs-4 {\n    font-size: 1.5rem !important;\n  }\n}\n\n@media print {\n  .d-print-inline {\n    display: inline !important;\n  }\n  .d-print-inline-block {\n    display: inline-block !important;\n  }\n  .d-print-block {\n    display: block !important;\n  }\n  .d-print-grid {\n    display: grid !important;\n  }\n  .d-print-table {\n    display: table !important;\n  }\n  .d-print-table-row {\n    display: table-row !important;\n  }\n  .d-print-table-cell {\n    display: table-cell !important;\n  }\n  .d-print-flex {\n    display: -ms-flexbox !important;\n    display: flex !important;\n  }\n  .d-print-inline-flex {\n    display: -ms-inline-flexbox !important;\n    display: inline-flex !important;\n  }\n  .d-print-none {\n    display: none !important;\n  }\n}\n\n.bg-dark {\n  background-color: #000 !important;\n}\n\n.bg-light {\n  background-color: #fff !important;\n  color: #000;\n  border: 1px solid #eee;\n}\n\n.bg-light.navbar-fixed-top {\n  border-width: 0 0 1px;\n}\n\n.bg-light.navbar-fixed-bottom {\n  border-width: 1px 0 0;\n}\n\n.navbar {\n  font-size: 18px;\n  font-family: \"News Cycle\", \"Arial Narrow Bold\", sans-serif;\n  font-weight: 700;\n}\n\n.navbar-brand {\n  padding-top: .5rem;\n  font-size: inherit;\n  font-weight: 700;\n  text-transform: uppercase;\n}\n\n.btn {\n  font-family: \"News Cycle\", \"Arial Narrow Bold\", sans-serif;\n  font-weight: 700;\n}\n\n.btn-secondary, .btn-warning {\n  color: #fff;\n}\n\n.pagination a:hover {\n  text-decoration: none;\n}\n"
  },
  {
    "path": "src/sourceDev.WebApp/SharedThemes/journal/wwwroot/css/fontawesome-all.css",
    "content": "/*!\n * Font Awesome Free 5.0.8 by @fontawesome - https://fontawesome.com\n * License - https://fontawesome.com/license (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)\n */\n.fa,\n.fas,\n.far,\n.fal,\n.fab {\n  -moz-osx-font-smoothing: grayscale;\n  -webkit-font-smoothing: antialiased;\n  display: inline-block;\n  font-style: normal;\n  font-variant: normal;\n  text-rendering: auto;\n  line-height: 1; }\n\n.fa-lg {\n  font-size: 1.33333em;\n  line-height: 0.75em;\n  vertical-align: -.0667em; }\n\n.fa-xs {\n  font-size: .75em; }\n\n.fa-sm {\n  font-size: .875em; }\n\n.fa-1x {\n  font-size: 1em; }\n\n.fa-2x {\n  font-size: 2em; }\n\n.fa-3x {\n  font-size: 3em; }\n\n.fa-4x {\n  font-size: 4em; }\n\n.fa-5x {\n  font-size: 5em; }\n\n.fa-6x {\n  font-size: 6em; }\n\n.fa-7x {\n  font-size: 7em; }\n\n.fa-8x {\n  font-size: 8em; }\n\n.fa-9x {\n  font-size: 9em; }\n\n.fa-10x {\n  font-size: 10em; }\n\n.fa-fw {\n  text-align: center;\n  width: 1.25em; }\n\n.fa-ul {\n  list-style-type: none;\n  margin-left: 2.5em;\n  padding-left: 0; }\n  .fa-ul > li {\n    position: relative; }\n\n.fa-li {\n  left: -2em;\n  position: absolute;\n  text-align: center;\n  width: 2em;\n  line-height: inherit; }\n\n.fa-border {\n  border: solid 0.08em #eee;\n  border-radius: .1em;\n  padding: .2em .25em .15em; }\n\n.fa-pull-left {\n  float: left; }\n\n.fa-pull-right {\n  float: right; }\n\n.fa.fa-pull-left,\n.fas.fa-pull-left,\n.far.fa-pull-left,\n.fal.fa-pull-left,\n.fab.fa-pull-left {\n  margin-right: .3em; }\n\n.fa.fa-pull-right,\n.fas.fa-pull-right,\n.far.fa-pull-right,\n.fal.fa-pull-right,\n.fab.fa-pull-right {\n  margin-left: .3em; }\n\n.fa-spin {\n  -webkit-animation: fa-spin 2s infinite linear;\n          animation: fa-spin 2s infinite linear; }\n\n.fa-pulse {\n  -webkit-animation: fa-spin 1s infinite steps(8);\n          animation: fa-spin 1s infinite steps(8); }\n\n@-webkit-keyframes fa-spin {\n  0% {\n    -webkit-transform: rotate(0deg);\n            transform: rotate(0deg); }\n  100% {\n    -webkit-transform: rotate(360deg);\n            transform: rotate(360deg); } }\n\n@keyframes fa-spin {\n  0% {\n    -webkit-transform: rotate(0deg);\n            transform: rotate(0deg); }\n  100% {\n    -webkit-transform: rotate(360deg);\n            transform: rotate(360deg); } }\n\n.fa-rotate-90 {\n  -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)\";\n  -webkit-transform: rotate(90deg);\n          transform: rotate(90deg); }\n\n.fa-rotate-180 {\n  -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)\";\n  -webkit-transform: rotate(180deg);\n          transform: rotate(180deg); }\n\n.fa-rotate-270 {\n  -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)\";\n  -webkit-transform: rotate(270deg);\n          transform: rotate(270deg); }\n\n.fa-flip-horizontal {\n  -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)\";\n  -webkit-transform: scale(-1, 1);\n          transform: scale(-1, 1); }\n\n.fa-flip-vertical {\n  -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)\";\n  -webkit-transform: scale(1, -1);\n          transform: scale(1, -1); }\n\n.fa-flip-horizontal.fa-flip-vertical {\n  -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)\";\n  -webkit-transform: scale(-1, -1);\n          transform: scale(-1, -1); }\n\n:root .fa-rotate-90,\n:root .fa-rotate-180,\n:root .fa-rotate-270,\n:root .fa-flip-horizontal,\n:root .fa-flip-vertical {\n  -webkit-filter: none;\n          filter: none; }\n\n.fa-stack {\n  display: inline-block;\n  height: 2em;\n  line-height: 2em;\n  position: relative;\n  vertical-align: middle;\n  width: 2em; }\n\n.fa-stack-1x,\n.fa-stack-2x {\n  left: 0;\n  position: absolute;\n  text-align: center;\n  width: 100%; }\n\n.fa-stack-1x {\n  line-height: inherit; }\n\n.fa-stack-2x {\n  font-size: 2em; }\n\n.fa-inverse {\n  color: #fff; }\n\n/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen\nreaders do not read off random characters that represent icons */\n.fa-500px:before {\n  content: \"\\f26e\"; }\n\n.fa-accessible-icon:before {\n  content: \"\\f368\"; }\n\n.fa-accusoft:before {\n  content: \"\\f369\"; }\n\n.fa-address-book:before {\n  content: \"\\f2b9\"; }\n\n.fa-address-card:before {\n  content: \"\\f2bb\"; }\n\n.fa-adjust:before {\n  content: \"\\f042\"; }\n\n.fa-adn:before {\n  content: \"\\f170\"; }\n\n.fa-adversal:before {\n  content: \"\\f36a\"; }\n\n.fa-affiliatetheme:before {\n  content: \"\\f36b\"; }\n\n.fa-algolia:before {\n  content: \"\\f36c\"; }\n\n.fa-align-center:before {\n  content: \"\\f037\"; }\n\n.fa-align-justify:before {\n  content: \"\\f039\"; }\n\n.fa-align-left:before {\n  content: \"\\f036\"; }\n\n.fa-align-right:before {\n  content: \"\\f038\"; }\n\n.fa-amazon:before {\n  content: \"\\f270\"; }\n\n.fa-amazon-pay:before {\n  content: \"\\f42c\"; }\n\n.fa-ambulance:before {\n  content: \"\\f0f9\"; }\n\n.fa-american-sign-language-interpreting:before {\n  content: \"\\f2a3\"; }\n\n.fa-amilia:before {\n  content: \"\\f36d\"; }\n\n.fa-anchor:before {\n  content: \"\\f13d\"; }\n\n.fa-android:before {\n  content: \"\\f17b\"; }\n\n.fa-angellist:before {\n  content: \"\\f209\"; }\n\n.fa-angle-double-down:before {\n  content: \"\\f103\"; }\n\n.fa-angle-double-left:before {\n  content: \"\\f100\"; }\n\n.fa-angle-double-right:before {\n  content: \"\\f101\"; }\n\n.fa-angle-double-up:before {\n  content: \"\\f102\"; }\n\n.fa-angle-down:before {\n  content: \"\\f107\"; }\n\n.fa-angle-left:before {\n  content: \"\\f104\"; }\n\n.fa-angle-right:before {\n  content: \"\\f105\"; }\n\n.fa-angle-up:before {\n  content: \"\\f106\"; }\n\n.fa-angrycreative:before {\n  content: \"\\f36e\"; }\n\n.fa-angular:before {\n  content: \"\\f420\"; }\n\n.fa-app-store:before {\n  content: \"\\f36f\"; }\n\n.fa-app-store-ios:before {\n  content: \"\\f370\"; }\n\n.fa-apper:before {\n  content: \"\\f371\"; }\n\n.fa-apple:before {\n  content: \"\\f179\"; }\n\n.fa-apple-pay:before {\n  content: \"\\f415\"; }\n\n.fa-archive:before {\n  content: \"\\f187\"; }\n\n.fa-arrow-alt-circle-down:before {\n  content: \"\\f358\"; }\n\n.fa-arrow-alt-circle-left:before {\n  content: \"\\f359\"; }\n\n.fa-arrow-alt-circle-right:before {\n  content: \"\\f35a\"; }\n\n.fa-arrow-alt-circle-up:before {\n  content: \"\\f35b\"; }\n\n.fa-arrow-circle-down:before {\n  content: \"\\f0ab\"; }\n\n.fa-arrow-circle-left:before {\n  content: \"\\f0a8\"; }\n\n.fa-arrow-circle-right:before {\n  content: \"\\f0a9\"; }\n\n.fa-arrow-circle-up:before {\n  content: \"\\f0aa\"; }\n\n.fa-arrow-down:before {\n  content: \"\\f063\"; }\n\n.fa-arrow-left:before {\n  content: \"\\f060\"; }\n\n.fa-arrow-right:before {\n  content: \"\\f061\"; }\n\n.fa-arrow-up:before {\n  content: \"\\f062\"; }\n\n.fa-arrows-alt:before {\n  content: \"\\f0b2\"; }\n\n.fa-arrows-alt-h:before {\n  content: \"\\f337\"; }\n\n.fa-arrows-alt-v:before {\n  content: \"\\f338\"; }\n\n.fa-assistive-listening-systems:before {\n  content: \"\\f2a2\"; }\n\n.fa-asterisk:before {\n  content: \"\\f069\"; }\n\n.fa-asymmetrik:before {\n  content: \"\\f372\"; }\n\n.fa-at:before {\n  content: \"\\f1fa\"; }\n\n.fa-audible:before {\n  content: \"\\f373\"; }\n\n.fa-audio-description:before {\n  content: \"\\f29e\"; }\n\n.fa-autoprefixer:before {\n  content: \"\\f41c\"; }\n\n.fa-avianex:before {\n  content: \"\\f374\"; }\n\n.fa-aviato:before {\n  content: \"\\f421\"; }\n\n.fa-aws:before {\n  content: \"\\f375\"; }\n\n.fa-backward:before {\n  content: \"\\f04a\"; }\n\n.fa-balance-scale:before {\n  content: \"\\f24e\"; }\n\n.fa-ban:before {\n  content: \"\\f05e\"; }\n\n.fa-band-aid:before {\n  content: \"\\f462\"; }\n\n.fa-bandcamp:before {\n  content: \"\\f2d5\"; }\n\n.fa-barcode:before {\n  content: \"\\f02a\"; }\n\n.fa-bars:before {\n  content: \"\\f0c9\"; }\n\n.fa-baseball-ball:before {\n  content: \"\\f433\"; }\n\n.fa-basketball-ball:before {\n  content: \"\\f434\"; }\n\n.fa-bath:before {\n  content: \"\\f2cd\"; }\n\n.fa-battery-empty:before {\n  content: \"\\f244\"; }\n\n.fa-battery-full:before {\n  content: \"\\f240\"; }\n\n.fa-battery-half:before {\n  content: \"\\f242\"; }\n\n.fa-battery-quarter:before {\n  content: \"\\f243\"; }\n\n.fa-battery-three-quarters:before {\n  content: \"\\f241\"; }\n\n.fa-bed:before {\n  content: \"\\f236\"; }\n\n.fa-beer:before {\n  content: \"\\f0fc\"; }\n\n.fa-behance:before {\n  content: \"\\f1b4\"; }\n\n.fa-behance-square:before {\n  content: \"\\f1b5\"; }\n\n.fa-bell:before {\n  content: \"\\f0f3\"; }\n\n.fa-bell-slash:before {\n  content: \"\\f1f6\"; }\n\n.fa-bicycle:before {\n  content: \"\\f206\"; }\n\n.fa-bimobject:before {\n  content: \"\\f378\"; }\n\n.fa-binoculars:before {\n  content: \"\\f1e5\"; }\n\n.fa-birthday-cake:before {\n  content: \"\\f1fd\"; }\n\n.fa-bitbucket:before {\n  content: \"\\f171\"; }\n\n.fa-bitcoin:before {\n  content: \"\\f379\"; }\n\n.fa-bity:before {\n  content: \"\\f37a\"; }\n\n.fa-black-tie:before {\n  content: \"\\f27e\"; }\n\n.fa-blackberry:before {\n  content: \"\\f37b\"; }\n\n.fa-blind:before {\n  content: \"\\f29d\"; }\n\n.fa-blogger:before {\n  content: \"\\f37c\"; }\n\n.fa-blogger-b:before {\n  content: \"\\f37d\"; }\n\n.fa-bluetooth:before {\n  content: \"\\f293\"; }\n\n.fa-bluetooth-b:before {\n  content: \"\\f294\"; }\n\n.fa-bold:before {\n  content: \"\\f032\"; }\n\n.fa-bolt:before {\n  content: \"\\f0e7\"; }\n\n.fa-bomb:before {\n  content: \"\\f1e2\"; }\n\n.fa-book:before {\n  content: \"\\f02d\"; }\n\n.fa-bookmark:before {\n  content: \"\\f02e\"; }\n\n.fa-bowling-ball:before {\n  content: \"\\f436\"; }\n\n.fa-box:before {\n  content: \"\\f466\"; }\n\n.fa-boxes:before {\n  content: \"\\f468\"; }\n\n.fa-braille:before {\n  content: \"\\f2a1\"; }\n\n.fa-briefcase:before {\n  content: \"\\f0b1\"; }\n\n.fa-btc:before {\n  content: \"\\f15a\"; }\n\n.fa-bug:before {\n  content: \"\\f188\"; }\n\n.fa-building:before {\n  content: \"\\f1ad\"; }\n\n.fa-bullhorn:before {\n  content: \"\\f0a1\"; }\n\n.fa-bullseye:before {\n  content: \"\\f140\"; }\n\n.fa-buromobelexperte:before {\n  content: \"\\f37f\"; }\n\n.fa-bus:before {\n  content: \"\\f207\"; }\n\n.fa-buysellads:before {\n  content: \"\\f20d\"; }\n\n.fa-calculator:before {\n  content: \"\\f1ec\"; }\n\n.fa-calendar:before {\n  content: \"\\f133\"; }\n\n.fa-calendar-alt:before {\n  content: \"\\f073\"; }\n\n.fa-calendar-check:before {\n  content: \"\\f274\"; }\n\n.fa-calendar-minus:before {\n  content: \"\\f272\"; }\n\n.fa-calendar-plus:before {\n  content: \"\\f271\"; }\n\n.fa-calendar-times:before {\n  content: \"\\f273\"; }\n\n.fa-camera:before {\n  content: \"\\f030\"; }\n\n.fa-camera-retro:before {\n  content: \"\\f083\"; }\n\n.fa-car:before {\n  content: \"\\f1b9\"; }\n\n.fa-caret-down:before {\n  content: \"\\f0d7\"; }\n\n.fa-caret-left:before {\n  content: \"\\f0d9\"; }\n\n.fa-caret-right:before {\n  content: \"\\f0da\"; }\n\n.fa-caret-square-down:before {\n  content: \"\\f150\"; }\n\n.fa-caret-square-left:before {\n  content: \"\\f191\"; }\n\n.fa-caret-square-right:before {\n  content: \"\\f152\"; }\n\n.fa-caret-square-up:before {\n  content: \"\\f151\"; }\n\n.fa-caret-up:before {\n  content: \"\\f0d8\"; }\n\n.fa-cart-arrow-down:before {\n  content: \"\\f218\"; }\n\n.fa-cart-plus:before {\n  content: \"\\f217\"; }\n\n.fa-cc-amazon-pay:before {\n  content: \"\\f42d\"; }\n\n.fa-cc-amex:before {\n  content: \"\\f1f3\"; }\n\n.fa-cc-apple-pay:before {\n  content: \"\\f416\"; }\n\n.fa-cc-diners-club:before {\n  content: \"\\f24c\"; }\n\n.fa-cc-discover:before {\n  content: \"\\f1f2\"; }\n\n.fa-cc-jcb:before {\n  content: \"\\f24b\"; }\n\n.fa-cc-mastercard:before {\n  content: \"\\f1f1\"; }\n\n.fa-cc-paypal:before {\n  content: \"\\f1f4\"; }\n\n.fa-cc-stripe:before {\n  content: \"\\f1f5\"; }\n\n.fa-cc-visa:before {\n  content: \"\\f1f0\"; }\n\n.fa-centercode:before {\n  content: \"\\f380\"; }\n\n.fa-certificate:before {\n  content: \"\\f0a3\"; }\n\n.fa-chart-area:before {\n  content: \"\\f1fe\"; }\n\n.fa-chart-bar:before {\n  content: \"\\f080\"; }\n\n.fa-chart-line:before {\n  content: \"\\f201\"; }\n\n.fa-chart-pie:before {\n  content: \"\\f200\"; }\n\n.fa-check:before {\n  content: \"\\f00c\"; }\n\n.fa-check-circle:before {\n  content: \"\\f058\"; }\n\n.fa-check-square:before {\n  content: \"\\f14a\"; }\n\n.fa-chess:before {\n  content: \"\\f439\"; }\n\n.fa-chess-bishop:before {\n  content: \"\\f43a\"; }\n\n.fa-chess-board:before {\n  content: \"\\f43c\"; }\n\n.fa-chess-king:before {\n  content: \"\\f43f\"; }\n\n.fa-chess-knight:before {\n  content: \"\\f441\"; }\n\n.fa-chess-pawn:before {\n  content: \"\\f443\"; }\n\n.fa-chess-queen:before {\n  content: \"\\f445\"; }\n\n.fa-chess-rook:before {\n  content: \"\\f447\"; }\n\n.fa-chevron-circle-down:before {\n  content: \"\\f13a\"; }\n\n.fa-chevron-circle-left:before {\n  content: \"\\f137\"; }\n\n.fa-chevron-circle-right:before {\n  content: \"\\f138\"; }\n\n.fa-chevron-circle-up:before {\n  content: \"\\f139\"; }\n\n.fa-chevron-down:before {\n  content: \"\\f078\"; }\n\n.fa-chevron-left:before {\n  content: \"\\f053\"; }\n\n.fa-chevron-right:before {\n  content: \"\\f054\"; }\n\n.fa-chevron-up:before {\n  content: \"\\f077\"; }\n\n.fa-child:before {\n  content: \"\\f1ae\"; }\n\n.fa-chrome:before {\n  content: \"\\f268\"; }\n\n.fa-circle:before {\n  content: \"\\f111\"; }\n\n.fa-circle-notch:before {\n  content: \"\\f1ce\"; }\n\n.fa-clipboard:before {\n  content: \"\\f328\"; }\n\n.fa-clipboard-check:before {\n  content: \"\\f46c\"; }\n\n.fa-clipboard-list:before {\n  content: \"\\f46d\"; }\n\n.fa-clock:before {\n  content: \"\\f017\"; }\n\n.fa-clone:before {\n  content: \"\\f24d\"; }\n\n.fa-closed-captioning:before {\n  content: \"\\f20a\"; }\n\n.fa-cloud:before {\n  content: \"\\f0c2\"; }\n\n.fa-cloud-download-alt:before {\n  content: \"\\f381\"; }\n\n.fa-cloud-upload-alt:before {\n  content: \"\\f382\"; }\n\n.fa-cloudscale:before {\n  content: \"\\f383\"; }\n\n.fa-cloudsmith:before {\n  content: \"\\f384\"; }\n\n.fa-cloudversify:before {\n  content: \"\\f385\"; }\n\n.fa-code:before {\n  content: \"\\f121\"; }\n\n.fa-code-branch:before {\n  content: \"\\f126\"; }\n\n.fa-codepen:before {\n  content: \"\\f1cb\"; }\n\n.fa-codiepie:before {\n  content: \"\\f284\"; }\n\n.fa-coffee:before {\n  content: \"\\f0f4\"; }\n\n.fa-cog:before {\n  content: \"\\f013\"; }\n\n.fa-cogs:before {\n  content: \"\\f085\"; }\n\n.fa-columns:before {\n  content: \"\\f0db\"; }\n\n.fa-comment:before {\n  content: \"\\f075\"; }\n\n.fa-comment-alt:before {\n  content: \"\\f27a\"; }\n\n.fa-comments:before {\n  content: \"\\f086\"; }\n\n.fa-compass:before {\n  content: \"\\f14e\"; }\n\n.fa-compress:before {\n  content: \"\\f066\"; }\n\n.fa-connectdevelop:before {\n  content: \"\\f20e\"; }\n\n.fa-contao:before {\n  content: \"\\f26d\"; }\n\n.fa-copy:before {\n  content: \"\\f0c5\"; }\n\n.fa-copyright:before {\n  content: \"\\f1f9\"; }\n\n.fa-cpanel:before {\n  content: \"\\f388\"; }\n\n.fa-creative-commons:before {\n  content: \"\\f25e\"; }\n\n.fa-credit-card:before {\n  content: \"\\f09d\"; }\n\n.fa-crop:before {\n  content: \"\\f125\"; }\n\n.fa-crosshairs:before {\n  content: \"\\f05b\"; }\n\n.fa-css3:before {\n  content: \"\\f13c\"; }\n\n.fa-css3-alt:before {\n  content: \"\\f38b\"; }\n\n.fa-cube:before {\n  content: \"\\f1b2\"; }\n\n.fa-cubes:before {\n  content: \"\\f1b3\"; }\n\n.fa-cut:before {\n  content: \"\\f0c4\"; }\n\n.fa-cuttlefish:before {\n  content: \"\\f38c\"; }\n\n.fa-d-and-d:before {\n  content: \"\\f38d\"; }\n\n.fa-dashcube:before {\n  content: \"\\f210\"; }\n\n.fa-database:before {\n  content: \"\\f1c0\"; }\n\n.fa-deaf:before {\n  content: \"\\f2a4\"; }\n\n.fa-delicious:before {\n  content: \"\\f1a5\"; }\n\n.fa-deploydog:before {\n  content: \"\\f38e\"; }\n\n.fa-deskpro:before {\n  content: \"\\f38f\"; }\n\n.fa-desktop:before {\n  content: \"\\f108\"; }\n\n.fa-deviantart:before {\n  content: \"\\f1bd\"; }\n\n.fa-digg:before {\n  content: \"\\f1a6\"; }\n\n.fa-digital-ocean:before {\n  content: \"\\f391\"; }\n\n.fa-discord:before {\n  content: \"\\f392\"; }\n\n.fa-discourse:before {\n  content: \"\\f393\"; }\n\n.fa-dna:before {\n  content: \"\\f471\"; }\n\n.fa-dochub:before {\n  content: \"\\f394\"; }\n\n.fa-docker:before {\n  content: \"\\f395\"; }\n\n.fa-dollar-sign:before {\n  content: \"\\f155\"; }\n\n.fa-dolly:before {\n  content: \"\\f472\"; }\n\n.fa-dolly-flatbed:before {\n  content: \"\\f474\"; }\n\n.fa-dot-circle:before {\n  content: \"\\f192\"; }\n\n.fa-download:before {\n  content: \"\\f019\"; }\n\n.fa-draft2digital:before {\n  content: \"\\f396\"; }\n\n.fa-dribbble:before {\n  content: \"\\f17d\"; }\n\n.fa-dribbble-square:before {\n  content: \"\\f397\"; }\n\n.fa-dropbox:before {\n  content: \"\\f16b\"; }\n\n.fa-drupal:before {\n  content: \"\\f1a9\"; }\n\n.fa-dyalog:before {\n  content: \"\\f399\"; }\n\n.fa-earlybirds:before {\n  content: \"\\f39a\"; }\n\n.fa-edge:before {\n  content: \"\\f282\"; }\n\n.fa-edit:before {\n  content: \"\\f044\"; }\n\n.fa-eject:before {\n  content: \"\\f052\"; }\n\n.fa-elementor:before {\n  content: \"\\f430\"; }\n\n.fa-ellipsis-h:before {\n  content: \"\\f141\"; }\n\n.fa-ellipsis-v:before {\n  content: \"\\f142\"; }\n\n.fa-ember:before {\n  content: \"\\f423\"; }\n\n.fa-empire:before {\n  content: \"\\f1d1\"; }\n\n.fa-envelope:before {\n  content: \"\\f0e0\"; }\n\n.fa-envelope-open:before {\n  content: \"\\f2b6\"; }\n\n.fa-envelope-square:before {\n  content: \"\\f199\"; }\n\n.fa-envira:before {\n  content: \"\\f299\"; }\n\n.fa-eraser:before {\n  content: \"\\f12d\"; }\n\n.fa-erlang:before {\n  content: \"\\f39d\"; }\n\n.fa-ethereum:before {\n  content: \"\\f42e\"; }\n\n.fa-etsy:before {\n  content: \"\\f2d7\"; }\n\n.fa-euro-sign:before {\n  content: \"\\f153\"; }\n\n.fa-exchange-alt:before {\n  content: \"\\f362\"; }\n\n.fa-exclamation:before {\n  content: \"\\f12a\"; }\n\n.fa-exclamation-circle:before {\n  content: \"\\f06a\"; }\n\n.fa-exclamation-triangle:before {\n  content: \"\\f071\"; }\n\n.fa-expand:before {\n  content: \"\\f065\"; }\n\n.fa-expand-arrows-alt:before {\n  content: \"\\f31e\"; }\n\n.fa-expeditedssl:before {\n  content: \"\\f23e\"; }\n\n.fa-external-link-alt:before {\n  content: \"\\f35d\"; }\n\n.fa-external-link-square-alt:before {\n  content: \"\\f360\"; }\n\n.fa-eye:before {\n  content: \"\\f06e\"; }\n\n.fa-eye-dropper:before {\n  content: \"\\f1fb\"; }\n\n.fa-eye-slash:before {\n  content: \"\\f070\"; }\n\n.fa-facebook:before {\n  content: \"\\f09a\"; }\n\n.fa-facebook-f:before {\n  content: \"\\f39e\"; }\n\n.fa-facebook-messenger:before {\n  content: \"\\f39f\"; }\n\n.fa-facebook-square:before {\n  content: \"\\f082\"; }\n\n.fa-fast-backward:before {\n  content: \"\\f049\"; }\n\n.fa-fast-forward:before {\n  content: \"\\f050\"; }\n\n.fa-fax:before {\n  content: \"\\f1ac\"; }\n\n.fa-female:before {\n  content: \"\\f182\"; }\n\n.fa-fighter-jet:before {\n  content: \"\\f0fb\"; }\n\n.fa-file:before {\n  content: \"\\f15b\"; }\n\n.fa-file-alt:before {\n  content: \"\\f15c\"; }\n\n.fa-file-archive:before {\n  content: \"\\f1c6\"; }\n\n.fa-file-audio:before {\n  content: \"\\f1c7\"; }\n\n.fa-file-code:before {\n  content: \"\\f1c9\"; }\n\n.fa-file-excel:before {\n  content: \"\\f1c3\"; }\n\n.fa-file-image:before {\n  content: \"\\f1c5\"; }\n\n.fa-file-pdf:before {\n  content: \"\\f1c1\"; }\n\n.fa-file-powerpoint:before {\n  content: \"\\f1c4\"; }\n\n.fa-file-video:before {\n  content: \"\\f1c8\"; }\n\n.fa-file-word:before {\n  content: \"\\f1c2\"; }\n\n.fa-film:before {\n  content: \"\\f008\"; }\n\n.fa-filter:before {\n  content: \"\\f0b0\"; }\n\n.fa-fire:before {\n  content: \"\\f06d\"; }\n\n.fa-fire-extinguisher:before {\n  content: \"\\f134\"; }\n\n.fa-firefox:before {\n  content: \"\\f269\"; }\n\n.fa-first-aid:before {\n  content: \"\\f479\"; }\n\n.fa-first-order:before {\n  content: \"\\f2b0\"; }\n\n.fa-firstdraft:before {\n  content: \"\\f3a1\"; }\n\n.fa-flag:before {\n  content: \"\\f024\"; }\n\n.fa-flag-checkered:before {\n  content: \"\\f11e\"; }\n\n.fa-flask:before {\n  content: \"\\f0c3\"; }\n\n.fa-flickr:before {\n  content: \"\\f16e\"; }\n\n.fa-flipboard:before {\n  content: \"\\f44d\"; }\n\n.fa-fly:before {\n  content: \"\\f417\"; }\n\n.fa-folder:before {\n  content: \"\\f07b\"; }\n\n.fa-folder-open:before {\n  content: \"\\f07c\"; }\n\n.fa-font:before {\n  content: \"\\f031\"; }\n\n.fa-font-awesome:before {\n  content: \"\\f2b4\"; }\n\n.fa-font-awesome-alt:before {\n  content: \"\\f35c\"; }\n\n.fa-font-awesome-flag:before {\n  content: \"\\f425\"; }\n\n.fa-fonticons:before {\n  content: \"\\f280\"; }\n\n.fa-fonticons-fi:before {\n  content: \"\\f3a2\"; }\n\n.fa-football-ball:before {\n  content: \"\\f44e\"; }\n\n.fa-fort-awesome:before {\n  content: \"\\f286\"; }\n\n.fa-fort-awesome-alt:before {\n  content: \"\\f3a3\"; }\n\n.fa-forumbee:before {\n  content: \"\\f211\"; }\n\n.fa-forward:before {\n  content: \"\\f04e\"; }\n\n.fa-foursquare:before {\n  content: \"\\f180\"; }\n\n.fa-free-code-camp:before {\n  content: \"\\f2c5\"; }\n\n.fa-freebsd:before {\n  content: \"\\f3a4\"; }\n\n.fa-frown:before {\n  content: \"\\f119\"; }\n\n.fa-futbol:before {\n  content: \"\\f1e3\"; }\n\n.fa-gamepad:before {\n  content: \"\\f11b\"; }\n\n.fa-gavel:before {\n  content: \"\\f0e3\"; }\n\n.fa-gem:before {\n  content: \"\\f3a5\"; }\n\n.fa-genderless:before {\n  content: \"\\f22d\"; }\n\n.fa-get-pocket:before {\n  content: \"\\f265\"; }\n\n.fa-gg:before {\n  content: \"\\f260\"; }\n\n.fa-gg-circle:before {\n  content: \"\\f261\"; }\n\n.fa-gift:before {\n  content: \"\\f06b\"; }\n\n.fa-git:before {\n  content: \"\\f1d3\"; }\n\n.fa-git-square:before {\n  content: \"\\f1d2\"; }\n\n.fa-github:before {\n  content: \"\\f09b\"; }\n\n.fa-github-alt:before {\n  content: \"\\f113\"; }\n\n.fa-github-square:before {\n  content: \"\\f092\"; }\n\n.fa-gitkraken:before {\n  content: \"\\f3a6\"; }\n\n.fa-gitlab:before {\n  content: \"\\f296\"; }\n\n.fa-gitter:before {\n  content: \"\\f426\"; }\n\n.fa-glass-martini:before {\n  content: \"\\f000\"; }\n\n.fa-glide:before {\n  content: \"\\f2a5\"; }\n\n.fa-glide-g:before {\n  content: \"\\f2a6\"; }\n\n.fa-globe:before {\n  content: \"\\f0ac\"; }\n\n.fa-gofore:before {\n  content: \"\\f3a7\"; }\n\n.fa-golf-ball:before {\n  content: \"\\f450\"; }\n\n.fa-goodreads:before {\n  content: \"\\f3a8\"; }\n\n.fa-goodreads-g:before {\n  content: \"\\f3a9\"; }\n\n.fa-google:before {\n  content: \"\\f1a0\"; }\n\n.fa-google-drive:before {\n  content: \"\\f3aa\"; }\n\n.fa-google-play:before {\n  content: \"\\f3ab\"; }\n\n.fa-google-plus:before {\n  content: \"\\f2b3\"; }\n\n.fa-google-plus-g:before {\n  content: \"\\f0d5\"; }\n\n.fa-google-plus-square:before {\n  content: \"\\f0d4\"; }\n\n.fa-google-wallet:before {\n  content: \"\\f1ee\"; }\n\n.fa-graduation-cap:before {\n  content: \"\\f19d\"; }\n\n.fa-gratipay:before {\n  content: \"\\f184\"; }\n\n.fa-grav:before {\n  content: \"\\f2d6\"; }\n\n.fa-gripfire:before {\n  content: \"\\f3ac\"; }\n\n.fa-grunt:before {\n  content: \"\\f3ad\"; }\n\n.fa-gulp:before {\n  content: \"\\f3ae\"; }\n\n.fa-h-square:before {\n  content: \"\\f0fd\"; }\n\n.fa-hacker-news:before {\n  content: \"\\f1d4\"; }\n\n.fa-hacker-news-square:before {\n  content: \"\\f3af\"; }\n\n.fa-hand-lizard:before {\n  content: \"\\f258\"; }\n\n.fa-hand-paper:before {\n  content: \"\\f256\"; }\n\n.fa-hand-peace:before {\n  content: \"\\f25b\"; }\n\n.fa-hand-point-down:before {\n  content: \"\\f0a7\"; }\n\n.fa-hand-point-left:before {\n  content: \"\\f0a5\"; }\n\n.fa-hand-point-right:before {\n  content: \"\\f0a4\"; }\n\n.fa-hand-point-up:before {\n  content: \"\\f0a6\"; }\n\n.fa-hand-pointer:before {\n  content: \"\\f25a\"; }\n\n.fa-hand-rock:before {\n  content: \"\\f255\"; }\n\n.fa-hand-scissors:before {\n  content: \"\\f257\"; }\n\n.fa-hand-spock:before {\n  content: \"\\f259\"; }\n\n.fa-handshake:before {\n  content: \"\\f2b5\"; }\n\n.fa-hashtag:before {\n  content: \"\\f292\"; }\n\n.fa-hdd:before {\n  content: \"\\f0a0\"; }\n\n.fa-heading:before {\n  content: \"\\f1dc\"; }\n\n.fa-headphones:before {\n  content: \"\\f025\"; }\n\n.fa-heart:before {\n  content: \"\\f004\"; }\n\n.fa-heartbeat:before {\n  content: \"\\f21e\"; }\n\n.fa-hips:before {\n  content: \"\\f452\"; }\n\n.fa-hire-a-helper:before {\n  content: \"\\f3b0\"; }\n\n.fa-history:before {\n  content: \"\\f1da\"; }\n\n.fa-hockey-puck:before {\n  content: \"\\f453\"; }\n\n.fa-home:before {\n  content: \"\\f015\"; }\n\n.fa-hooli:before {\n  content: \"\\f427\"; }\n\n.fa-hospital:before {\n  content: \"\\f0f8\"; }\n\n.fa-hospital-symbol:before {\n  content: \"\\f47e\"; }\n\n.fa-hotjar:before {\n  content: \"\\f3b1\"; }\n\n.fa-hourglass:before {\n  content: \"\\f254\"; }\n\n.fa-hourglass-end:before {\n  content: \"\\f253\"; }\n\n.fa-hourglass-half:before {\n  content: \"\\f252\"; }\n\n.fa-hourglass-start:before {\n  content: \"\\f251\"; }\n\n.fa-houzz:before {\n  content: \"\\f27c\"; }\n\n.fa-html5:before {\n  content: \"\\f13b\"; }\n\n.fa-hubspot:before {\n  content: \"\\f3b2\"; }\n\n.fa-i-cursor:before {\n  content: \"\\f246\"; }\n\n.fa-id-badge:before {\n  content: \"\\f2c1\"; }\n\n.fa-id-card:before {\n  content: \"\\f2c2\"; }\n\n.fa-image:before {\n  content: \"\\f03e\"; }\n\n.fa-images:before {\n  content: \"\\f302\"; }\n\n.fa-imdb:before {\n  content: \"\\f2d8\"; }\n\n.fa-inbox:before {\n  content: \"\\f01c\"; }\n\n.fa-indent:before {\n  content: \"\\f03c\"; }\n\n.fa-industry:before {\n  content: \"\\f275\"; }\n\n.fa-info:before {\n  content: \"\\f129\"; }\n\n.fa-info-circle:before {\n  content: \"\\f05a\"; }\n\n.fa-instagram:before {\n  content: \"\\f16d\"; }\n\n.fa-internet-explorer:before {\n  content: \"\\f26b\"; }\n\n.fa-ioxhost:before {\n  content: \"\\f208\"; }\n\n.fa-italic:before {\n  content: \"\\f033\"; }\n\n.fa-itunes:before {\n  content: \"\\f3b4\"; }\n\n.fa-itunes-note:before {\n  content: \"\\f3b5\"; }\n\n.fa-jenkins:before {\n  content: \"\\f3b6\"; }\n\n.fa-joget:before {\n  content: \"\\f3b7\"; }\n\n.fa-joomla:before {\n  content: \"\\f1aa\"; }\n\n.fa-js:before {\n  content: \"\\f3b8\"; }\n\n.fa-js-square:before {\n  content: \"\\f3b9\"; }\n\n.fa-jsfiddle:before {\n  content: \"\\f1cc\"; }\n\n.fa-key:before {\n  content: \"\\f084\"; }\n\n.fa-keyboard:before {\n  content: \"\\f11c\"; }\n\n.fa-keycdn:before {\n  content: \"\\f3ba\"; }\n\n.fa-kickstarter:before {\n  content: \"\\f3bb\"; }\n\n.fa-kickstarter-k:before {\n  content: \"\\f3bc\"; }\n\n.fa-korvue:before {\n  content: \"\\f42f\"; }\n\n.fa-language:before {\n  content: \"\\f1ab\"; }\n\n.fa-laptop:before {\n  content: \"\\f109\"; }\n\n.fa-laravel:before {\n  content: \"\\f3bd\"; }\n\n.fa-lastfm:before {\n  content: \"\\f202\"; }\n\n.fa-lastfm-square:before {\n  content: \"\\f203\"; }\n\n.fa-leaf:before {\n  content: \"\\f06c\"; }\n\n.fa-leanpub:before {\n  content: \"\\f212\"; }\n\n.fa-lemon:before {\n  content: \"\\f094\"; }\n\n.fa-less:before {\n  content: \"\\f41d\"; }\n\n.fa-level-down-alt:before {\n  content: \"\\f3be\"; }\n\n.fa-level-up-alt:before {\n  content: \"\\f3bf\"; }\n\n.fa-life-ring:before {\n  content: \"\\f1cd\"; }\n\n.fa-lightbulb:before {\n  content: \"\\f0eb\"; }\n\n.fa-line:before {\n  content: \"\\f3c0\"; }\n\n.fa-link:before {\n  content: \"\\f0c1\"; }\n\n.fa-linkedin:before {\n  content: \"\\f08c\"; }\n\n.fa-linkedin-in:before {\n  content: \"\\f0e1\"; }\n\n.fa-linode:before {\n  content: \"\\f2b8\"; }\n\n.fa-linux:before {\n  content: \"\\f17c\"; }\n\n.fa-lira-sign:before {\n  content: \"\\f195\"; }\n\n.fa-list:before {\n  content: \"\\f03a\"; }\n\n.fa-list-alt:before {\n  content: \"\\f022\"; }\n\n.fa-list-ol:before {\n  content: \"\\f0cb\"; }\n\n.fa-list-ul:before {\n  content: \"\\f0ca\"; }\n\n.fa-location-arrow:before {\n  content: \"\\f124\"; }\n\n.fa-lock:before {\n  content: \"\\f023\"; }\n\n.fa-lock-open:before {\n  content: \"\\f3c1\"; }\n\n.fa-long-arrow-alt-down:before {\n  content: \"\\f309\"; }\n\n.fa-long-arrow-alt-left:before {\n  content: \"\\f30a\"; }\n\n.fa-long-arrow-alt-right:before {\n  content: \"\\f30b\"; }\n\n.fa-long-arrow-alt-up:before {\n  content: \"\\f30c\"; }\n\n.fa-low-vision:before {\n  content: \"\\f2a8\"; }\n\n.fa-lyft:before {\n  content: \"\\f3c3\"; }\n\n.fa-magento:before {\n  content: \"\\f3c4\"; }\n\n.fa-magic:before {\n  content: \"\\f0d0\"; }\n\n.fa-magnet:before {\n  content: \"\\f076\"; }\n\n.fa-male:before {\n  content: \"\\f183\"; }\n\n.fa-map:before {\n  content: \"\\f279\"; }\n\n.fa-map-marker:before {\n  content: \"\\f041\"; }\n\n.fa-map-marker-alt:before {\n  content: \"\\f3c5\"; }\n\n.fa-map-pin:before {\n  content: \"\\f276\"; }\n\n.fa-map-signs:before {\n  content: \"\\f277\"; }\n\n.fa-mars:before {\n  content: \"\\f222\"; }\n\n.fa-mars-double:before {\n  content: \"\\f227\"; }\n\n.fa-mars-stroke:before {\n  content: \"\\f229\"; }\n\n.fa-mars-stroke-h:before {\n  content: \"\\f22b\"; }\n\n.fa-mars-stroke-v:before {\n  content: \"\\f22a\"; }\n\n.fa-maxcdn:before {\n  content: \"\\f136\"; }\n\n.fa-medapps:before {\n  content: \"\\f3c6\"; }\n\n.fa-medium:before {\n  content: \"\\f23a\"; }\n\n.fa-medium-m:before {\n  content: \"\\f3c7\"; }\n\n.fa-medkit:before {\n  content: \"\\f0fa\"; }\n\n.fa-medrt:before {\n  content: \"\\f3c8\"; }\n\n.fa-meetup:before {\n  content: \"\\f2e0\"; }\n\n.fa-meh:before {\n  content: \"\\f11a\"; }\n\n.fa-mercury:before {\n  content: \"\\f223\"; }\n\n.fa-microchip:before {\n  content: \"\\f2db\"; }\n\n.fa-microphone:before {\n  content: \"\\f130\"; }\n\n.fa-microphone-slash:before {\n  content: \"\\f131\"; }\n\n.fa-microsoft:before {\n  content: \"\\f3ca\"; }\n\n.fa-minus:before {\n  content: \"\\f068\"; }\n\n.fa-minus-circle:before {\n  content: \"\\f056\"; }\n\n.fa-minus-square:before {\n  content: \"\\f146\"; }\n\n.fa-mix:before {\n  content: \"\\f3cb\"; }\n\n.fa-mixcloud:before {\n  content: \"\\f289\"; }\n\n.fa-mizuni:before {\n  content: \"\\f3cc\"; }\n\n.fa-mobile:before {\n  content: \"\\f10b\"; }\n\n.fa-mobile-alt:before {\n  content: \"\\f3cd\"; }\n\n.fa-modx:before {\n  content: \"\\f285\"; }\n\n.fa-monero:before {\n  content: \"\\f3d0\"; }\n\n.fa-money-bill-alt:before {\n  content: \"\\f3d1\"; }\n\n.fa-moon:before {\n  content: \"\\f186\"; }\n\n.fa-motorcycle:before {\n  content: \"\\f21c\"; }\n\n.fa-mouse-pointer:before {\n  content: \"\\f245\"; }\n\n.fa-music:before {\n  content: \"\\f001\"; }\n\n.fa-napster:before {\n  content: \"\\f3d2\"; }\n\n.fa-neuter:before {\n  content: \"\\f22c\"; }\n\n.fa-newspaper:before {\n  content: \"\\f1ea\"; }\n\n.fa-nintendo-switch:before {\n  content: \"\\f418\"; }\n\n.fa-node:before {\n  content: \"\\f419\"; }\n\n.fa-node-js:before {\n  content: \"\\f3d3\"; }\n\n.fa-npm:before {\n  content: \"\\f3d4\"; }\n\n.fa-ns8:before {\n  content: \"\\f3d5\"; }\n\n.fa-nutritionix:before {\n  content: \"\\f3d6\"; }\n\n.fa-object-group:before {\n  content: \"\\f247\"; }\n\n.fa-object-ungroup:before {\n  content: \"\\f248\"; }\n\n.fa-odnoklassniki:before {\n  content: \"\\f263\"; }\n\n.fa-odnoklassniki-square:before {\n  content: \"\\f264\"; }\n\n.fa-opencart:before {\n  content: \"\\f23d\"; }\n\n.fa-openid:before {\n  content: \"\\f19b\"; }\n\n.fa-opera:before {\n  content: \"\\f26a\"; }\n\n.fa-optin-monster:before {\n  content: \"\\f23c\"; }\n\n.fa-osi:before {\n  content: \"\\f41a\"; }\n\n.fa-outdent:before {\n  content: \"\\f03b\"; }\n\n.fa-page4:before {\n  content: \"\\f3d7\"; }\n\n.fa-pagelines:before {\n  content: \"\\f18c\"; }\n\n.fa-paint-brush:before {\n  content: \"\\f1fc\"; }\n\n.fa-palfed:before {\n  content: \"\\f3d8\"; }\n\n.fa-pallet:before {\n  content: \"\\f482\"; }\n\n.fa-paper-plane:before {\n  content: \"\\f1d8\"; }\n\n.fa-paperclip:before {\n  content: \"\\f0c6\"; }\n\n.fa-paragraph:before {\n  content: \"\\f1dd\"; }\n\n.fa-paste:before {\n  content: \"\\f0ea\"; }\n\n.fa-patreon:before {\n  content: \"\\f3d9\"; }\n\n.fa-pause:before {\n  content: \"\\f04c\"; }\n\n.fa-pause-circle:before {\n  content: \"\\f28b\"; }\n\n.fa-paw:before {\n  content: \"\\f1b0\"; }\n\n.fa-paypal:before {\n  content: \"\\f1ed\"; }\n\n.fa-pen-square:before {\n  content: \"\\f14b\"; }\n\n.fa-pencil-alt:before {\n  content: \"\\f303\"; }\n\n.fa-percent:before {\n  content: \"\\f295\"; }\n\n.fa-periscope:before {\n  content: \"\\f3da\"; }\n\n.fa-phabricator:before {\n  content: \"\\f3db\"; }\n\n.fa-phoenix-framework:before {\n  content: \"\\f3dc\"; }\n\n.fa-phone:before {\n  content: \"\\f095\"; }\n\n.fa-phone-square:before {\n  content: \"\\f098\"; }\n\n.fa-phone-volume:before {\n  content: \"\\f2a0\"; }\n\n.fa-php:before {\n  content: \"\\f457\"; }\n\n.fa-pied-piper:before {\n  content: \"\\f2ae\"; }\n\n.fa-pied-piper-alt:before {\n  content: \"\\f1a8\"; }\n\n.fa-pied-piper-pp:before {\n  content: \"\\f1a7\"; }\n\n.fa-pills:before {\n  content: \"\\f484\"; }\n\n.fa-pinterest:before {\n  content: \"\\f0d2\"; }\n\n.fa-pinterest-p:before {\n  content: \"\\f231\"; }\n\n.fa-pinterest-square:before {\n  content: \"\\f0d3\"; }\n\n.fa-plane:before {\n  content: \"\\f072\"; }\n\n.fa-play:before {\n  content: \"\\f04b\"; }\n\n.fa-play-circle:before {\n  content: \"\\f144\"; }\n\n.fa-playstation:before {\n  content: \"\\f3df\"; }\n\n.fa-plug:before {\n  content: \"\\f1e6\"; }\n\n.fa-plus:before {\n  content: \"\\f067\"; }\n\n.fa-plus-circle:before {\n  content: \"\\f055\"; }\n\n.fa-plus-square:before {\n  content: \"\\f0fe\"; }\n\n.fa-podcast:before {\n  content: \"\\f2ce\"; }\n\n.fa-pound-sign:before {\n  content: \"\\f154\"; }\n\n.fa-power-off:before {\n  content: \"\\f011\"; }\n\n.fa-print:before {\n  content: \"\\f02f\"; }\n\n.fa-product-hunt:before {\n  content: \"\\f288\"; }\n\n.fa-pushed:before {\n  content: \"\\f3e1\"; }\n\n.fa-puzzle-piece:before {\n  content: \"\\f12e\"; }\n\n.fa-python:before {\n  content: \"\\f3e2\"; }\n\n.fa-qq:before {\n  content: \"\\f1d6\"; }\n\n.fa-qrcode:before {\n  content: \"\\f029\"; }\n\n.fa-question:before {\n  content: \"\\f128\"; }\n\n.fa-question-circle:before {\n  content: \"\\f059\"; }\n\n.fa-quidditch:before {\n  content: \"\\f458\"; }\n\n.fa-quinscape:before {\n  content: \"\\f459\"; }\n\n.fa-quora:before {\n  content: \"\\f2c4\"; }\n\n.fa-quote-left:before {\n  content: \"\\f10d\"; }\n\n.fa-quote-right:before {\n  content: \"\\f10e\"; }\n\n.fa-random:before {\n  content: \"\\f074\"; }\n\n.fa-ravelry:before {\n  content: \"\\f2d9\"; }\n\n.fa-react:before {\n  content: \"\\f41b\"; }\n\n.fa-rebel:before {\n  content: \"\\f1d0\"; }\n\n.fa-recycle:before {\n  content: \"\\f1b8\"; }\n\n.fa-red-river:before {\n  content: \"\\f3e3\"; }\n\n.fa-reddit:before {\n  content: \"\\f1a1\"; }\n\n.fa-reddit-alien:before {\n  content: \"\\f281\"; }\n\n.fa-reddit-square:before {\n  content: \"\\f1a2\"; }\n\n.fa-redo:before {\n  content: \"\\f01e\"; }\n\n.fa-redo-alt:before {\n  content: \"\\f2f9\"; }\n\n.fa-registered:before {\n  content: \"\\f25d\"; }\n\n.fa-rendact:before {\n  content: \"\\f3e4\"; }\n\n.fa-renren:before {\n  content: \"\\f18b\"; }\n\n.fa-reply:before {\n  content: \"\\f3e5\"; }\n\n.fa-reply-all:before {\n  content: \"\\f122\"; }\n\n.fa-replyd:before {\n  content: \"\\f3e6\"; }\n\n.fa-resolving:before {\n  content: \"\\f3e7\"; }\n\n.fa-retweet:before {\n  content: \"\\f079\"; }\n\n.fa-road:before {\n  content: \"\\f018\"; }\n\n.fa-rocket:before {\n  content: \"\\f135\"; }\n\n.fa-rocketchat:before {\n  content: \"\\f3e8\"; }\n\n.fa-rockrms:before {\n  content: \"\\f3e9\"; }\n\n.fa-rss:before {\n  content: \"\\f09e\"; }\n\n.fa-rss-square:before {\n  content: \"\\f143\"; }\n\n.fa-ruble-sign:before {\n  content: \"\\f158\"; }\n\n.fa-rupee-sign:before {\n  content: \"\\f156\"; }\n\n.fa-safari:before {\n  content: \"\\f267\"; }\n\n.fa-sass:before {\n  content: \"\\f41e\"; }\n\n.fa-save:before {\n  content: \"\\f0c7\"; }\n\n.fa-schlix:before {\n  content: \"\\f3ea\"; }\n\n.fa-scribd:before {\n  content: \"\\f28a\"; }\n\n.fa-search:before {\n  content: \"\\f002\"; }\n\n.fa-search-minus:before {\n  content: \"\\f010\"; }\n\n.fa-search-plus:before {\n  content: \"\\f00e\"; }\n\n.fa-searchengin:before {\n  content: \"\\f3eb\"; }\n\n.fa-sellcast:before {\n  content: \"\\f2da\"; }\n\n.fa-sellsy:before {\n  content: \"\\f213\"; }\n\n.fa-server:before {\n  content: \"\\f233\"; }\n\n.fa-servicestack:before {\n  content: \"\\f3ec\"; }\n\n.fa-share:before {\n  content: \"\\f064\"; }\n\n.fa-share-alt:before {\n  content: \"\\f1e0\"; }\n\n.fa-share-alt-square:before {\n  content: \"\\f1e1\"; }\n\n.fa-share-square:before {\n  content: \"\\f14d\"; }\n\n.fa-shekel-sign:before {\n  content: \"\\f20b\"; }\n\n.fa-shield-alt:before {\n  content: \"\\f3ed\"; }\n\n.fa-ship:before {\n  content: \"\\f21a\"; }\n\n.fa-shipping-fast:before {\n  content: \"\\f48b\"; }\n\n.fa-shirtsinbulk:before {\n  content: \"\\f214\"; }\n\n.fa-shopping-bag:before {\n  content: \"\\f290\"; }\n\n.fa-shopping-basket:before {\n  content: \"\\f291\"; }\n\n.fa-shopping-cart:before {\n  content: \"\\f07a\"; }\n\n.fa-shower:before {\n  content: \"\\f2cc\"; }\n\n.fa-sign-in-alt:before {\n  content: \"\\f2f6\"; }\n\n.fa-sign-language:before {\n  content: \"\\f2a7\"; }\n\n.fa-sign-out-alt:before {\n  content: \"\\f2f5\"; }\n\n.fa-signal:before {\n  content: \"\\f012\"; }\n\n.fa-simplybuilt:before {\n  content: \"\\f215\"; }\n\n.fa-sistrix:before {\n  content: \"\\f3ee\"; }\n\n.fa-sitemap:before {\n  content: \"\\f0e8\"; }\n\n.fa-skyatlas:before {\n  content: \"\\f216\"; }\n\n.fa-skype:before {\n  content: \"\\f17e\"; }\n\n.fa-slack:before {\n  content: \"\\f198\"; }\n\n.fa-slack-hash:before {\n  content: \"\\f3ef\"; }\n\n.fa-sliders-h:before {\n  content: \"\\f1de\"; }\n\n.fa-slideshare:before {\n  content: \"\\f1e7\"; }\n\n.fa-smile:before {\n  content: \"\\f118\"; }\n\n.fa-snapchat:before {\n  content: \"\\f2ab\"; }\n\n.fa-snapchat-ghost:before {\n  content: \"\\f2ac\"; }\n\n.fa-snapchat-square:before {\n  content: \"\\f2ad\"; }\n\n.fa-snowflake:before {\n  content: \"\\f2dc\"; }\n\n.fa-sort:before {\n  content: \"\\f0dc\"; }\n\n.fa-sort-alpha-down:before {\n  content: \"\\f15d\"; }\n\n.fa-sort-alpha-up:before {\n  content: \"\\f15e\"; }\n\n.fa-sort-amount-down:before {\n  content: \"\\f160\"; }\n\n.fa-sort-amount-up:before {\n  content: \"\\f161\"; }\n\n.fa-sort-down:before {\n  content: \"\\f0dd\"; }\n\n.fa-sort-numeric-down:before {\n  content: \"\\f162\"; }\n\n.fa-sort-numeric-up:before {\n  content: \"\\f163\"; }\n\n.fa-sort-up:before {\n  content: \"\\f0de\"; }\n\n.fa-soundcloud:before {\n  content: \"\\f1be\"; }\n\n.fa-space-shuttle:before {\n  content: \"\\f197\"; }\n\n.fa-speakap:before {\n  content: \"\\f3f3\"; }\n\n.fa-spinner:before {\n  content: \"\\f110\"; }\n\n.fa-spotify:before {\n  content: \"\\f1bc\"; }\n\n.fa-square:before {\n  content: \"\\f0c8\"; }\n\n.fa-square-full:before {\n  content: \"\\f45c\"; }\n\n.fa-stack-exchange:before {\n  content: \"\\f18d\"; }\n\n.fa-stack-overflow:before {\n  content: \"\\f16c\"; }\n\n.fa-star:before {\n  content: \"\\f005\"; }\n\n.fa-star-half:before {\n  content: \"\\f089\"; }\n\n.fa-staylinked:before {\n  content: \"\\f3f5\"; }\n\n.fa-steam:before {\n  content: \"\\f1b6\"; }\n\n.fa-steam-square:before {\n  content: \"\\f1b7\"; }\n\n.fa-steam-symbol:before {\n  content: \"\\f3f6\"; }\n\n.fa-step-backward:before {\n  content: \"\\f048\"; }\n\n.fa-step-forward:before {\n  content: \"\\f051\"; }\n\n.fa-stethoscope:before {\n  content: \"\\f0f1\"; }\n\n.fa-sticker-mule:before {\n  content: \"\\f3f7\"; }\n\n.fa-sticky-note:before {\n  content: \"\\f249\"; }\n\n.fa-stop:before {\n  content: \"\\f04d\"; }\n\n.fa-stop-circle:before {\n  content: \"\\f28d\"; }\n\n.fa-stopwatch:before {\n  content: \"\\f2f2\"; }\n\n.fa-strava:before {\n  content: \"\\f428\"; }\n\n.fa-street-view:before {\n  content: \"\\f21d\"; }\n\n.fa-strikethrough:before {\n  content: \"\\f0cc\"; }\n\n.fa-stripe:before {\n  content: \"\\f429\"; }\n\n.fa-stripe-s:before {\n  content: \"\\f42a\"; }\n\n.fa-studiovinari:before {\n  content: \"\\f3f8\"; }\n\n.fa-stumbleupon:before {\n  content: \"\\f1a4\"; }\n\n.fa-stumbleupon-circle:before {\n  content: \"\\f1a3\"; }\n\n.fa-subscript:before {\n  content: \"\\f12c\"; }\n\n.fa-subway:before {\n  content: \"\\f239\"; }\n\n.fa-suitcase:before {\n  content: \"\\f0f2\"; }\n\n.fa-sun:before {\n  content: \"\\f185\"; }\n\n.fa-superpowers:before {\n  content: \"\\f2dd\"; }\n\n.fa-superscript:before {\n  content: \"\\f12b\"; }\n\n.fa-supple:before {\n  content: \"\\f3f9\"; }\n\n.fa-sync:before {\n  content: \"\\f021\"; }\n\n.fa-sync-alt:before {\n  content: \"\\f2f1\"; }\n\n.fa-syringe:before {\n  content: \"\\f48e\"; }\n\n.fa-table:before {\n  content: \"\\f0ce\"; }\n\n.fa-table-tennis:before {\n  content: \"\\f45d\"; }\n\n.fa-tablet:before {\n  content: \"\\f10a\"; }\n\n.fa-tablet-alt:before {\n  content: \"\\f3fa\"; }\n\n.fa-tachometer-alt:before {\n  content: \"\\f3fd\"; }\n\n.fa-tag:before {\n  content: \"\\f02b\"; }\n\n.fa-tags:before {\n  content: \"\\f02c\"; }\n\n.fa-tasks:before {\n  content: \"\\f0ae\"; }\n\n.fa-taxi:before {\n  content: \"\\f1ba\"; }\n\n.fa-telegram:before {\n  content: \"\\f2c6\"; }\n\n.fa-telegram-plane:before {\n  content: \"\\f3fe\"; }\n\n.fa-tencent-weibo:before {\n  content: \"\\f1d5\"; }\n\n.fa-terminal:before {\n  content: \"\\f120\"; }\n\n.fa-text-height:before {\n  content: \"\\f034\"; }\n\n.fa-text-width:before {\n  content: \"\\f035\"; }\n\n.fa-th:before {\n  content: \"\\f00a\"; }\n\n.fa-th-large:before {\n  content: \"\\f009\"; }\n\n.fa-th-list:before {\n  content: \"\\f00b\"; }\n\n.fa-themeisle:before {\n  content: \"\\f2b2\"; }\n\n.fa-thermometer:before {\n  content: \"\\f491\"; }\n\n.fa-thermometer-empty:before {\n  content: \"\\f2cb\"; }\n\n.fa-thermometer-full:before {\n  content: \"\\f2c7\"; }\n\n.fa-thermometer-half:before {\n  content: \"\\f2c9\"; }\n\n.fa-thermometer-quarter:before {\n  content: \"\\f2ca\"; }\n\n.fa-thermometer-three-quarters:before {\n  content: \"\\f2c8\"; }\n\n.fa-thumbs-down:before {\n  content: \"\\f165\"; }\n\n.fa-thumbs-up:before {\n  content: \"\\f164\"; }\n\n.fa-thumbtack:before {\n  content: \"\\f08d\"; }\n\n.fa-ticket-alt:before {\n  content: \"\\f3ff\"; }\n\n.fa-times:before {\n  content: \"\\f00d\"; }\n\n.fa-times-circle:before {\n  content: \"\\f057\"; }\n\n.fa-tint:before {\n  content: \"\\f043\"; }\n\n.fa-toggle-off:before {\n  content: \"\\f204\"; }\n\n.fa-toggle-on:before {\n  content: \"\\f205\"; }\n\n.fa-trademark:before {\n  content: \"\\f25c\"; }\n\n.fa-train:before {\n  content: \"\\f238\"; }\n\n.fa-transgender:before {\n  content: \"\\f224\"; }\n\n.fa-transgender-alt:before {\n  content: \"\\f225\"; }\n\n.fa-trash:before {\n  content: \"\\f1f8\"; }\n\n.fa-trash-alt:before {\n  content: \"\\f2ed\"; }\n\n.fa-tree:before {\n  content: \"\\f1bb\"; }\n\n.fa-trello:before {\n  content: \"\\f181\"; }\n\n.fa-tripadvisor:before {\n  content: \"\\f262\"; }\n\n.fa-trophy:before {\n  content: \"\\f091\"; }\n\n.fa-truck:before {\n  content: \"\\f0d1\"; }\n\n.fa-tty:before {\n  content: \"\\f1e4\"; }\n\n.fa-tumblr:before {\n  content: \"\\f173\"; }\n\n.fa-tumblr-square:before {\n  content: \"\\f174\"; }\n\n.fa-tv:before {\n  content: \"\\f26c\"; }\n\n.fa-twitch:before {\n  content: \"\\f1e8\"; }\n\n.fa-twitter:before {\n  content: \"\\f099\"; }\n\n.fa-twitter-square:before {\n  content: \"\\f081\"; }\n\n.fa-typo3:before {\n  content: \"\\f42b\"; }\n\n.fa-uber:before {\n  content: \"\\f402\"; }\n\n.fa-uikit:before {\n  content: \"\\f403\"; }\n\n.fa-umbrella:before {\n  content: \"\\f0e9\"; }\n\n.fa-underline:before {\n  content: \"\\f0cd\"; }\n\n.fa-undo:before {\n  content: \"\\f0e2\"; }\n\n.fa-undo-alt:before {\n  content: \"\\f2ea\"; }\n\n.fa-uniregistry:before {\n  content: \"\\f404\"; }\n\n.fa-universal-access:before {\n  content: \"\\f29a\"; }\n\n.fa-university:before {\n  content: \"\\f19c\"; }\n\n.fa-unlink:before {\n  content: \"\\f127\"; }\n\n.fa-unlock:before {\n  content: \"\\f09c\"; }\n\n.fa-unlock-alt:before {\n  content: \"\\f13e\"; }\n\n.fa-untappd:before {\n  content: \"\\f405\"; }\n\n.fa-upload:before {\n  content: \"\\f093\"; }\n\n.fa-usb:before {\n  content: \"\\f287\"; }\n\n.fa-user:before {\n  content: \"\\f007\"; }\n\n.fa-user-circle:before {\n  content: \"\\f2bd\"; }\n\n.fa-user-md:before {\n  content: \"\\f0f0\"; }\n\n.fa-user-plus:before {\n  content: \"\\f234\"; }\n\n.fa-user-secret:before {\n  content: \"\\f21b\"; }\n\n.fa-user-times:before {\n  content: \"\\f235\"; }\n\n.fa-users:before {\n  content: \"\\f0c0\"; }\n\n.fa-ussunnah:before {\n  content: \"\\f407\"; }\n\n.fa-utensil-spoon:before {\n  content: \"\\f2e5\"; }\n\n.fa-utensils:before {\n  content: \"\\f2e7\"; }\n\n.fa-vaadin:before {\n  content: \"\\f408\"; }\n\n.fa-venus:before {\n  content: \"\\f221\"; }\n\n.fa-venus-double:before {\n  content: \"\\f226\"; }\n\n.fa-venus-mars:before {\n  content: \"\\f228\"; }\n\n.fa-viacoin:before {\n  content: \"\\f237\"; }\n\n.fa-viadeo:before {\n  content: \"\\f2a9\"; }\n\n.fa-viadeo-square:before {\n  content: \"\\f2aa\"; }\n\n.fa-viber:before {\n  content: \"\\f409\"; }\n\n.fa-video:before {\n  content: \"\\f03d\"; }\n\n.fa-vimeo:before {\n  content: \"\\f40a\"; }\n\n.fa-vimeo-square:before {\n  content: \"\\f194\"; }\n\n.fa-vimeo-v:before {\n  content: \"\\f27d\"; }\n\n.fa-vine:before {\n  content: \"\\f1ca\"; }\n\n.fa-vk:before {\n  content: \"\\f189\"; }\n\n.fa-vnv:before {\n  content: \"\\f40b\"; }\n\n.fa-volleyball-ball:before {\n  content: \"\\f45f\"; }\n\n.fa-volume-down:before {\n  content: \"\\f027\"; }\n\n.fa-volume-off:before {\n  content: \"\\f026\"; }\n\n.fa-volume-up:before {\n  content: \"\\f028\"; }\n\n.fa-vuejs:before {\n  content: \"\\f41f\"; }\n\n.fa-warehouse:before {\n  content: \"\\f494\"; }\n\n.fa-weibo:before {\n  content: \"\\f18a\"; }\n\n.fa-weight:before {\n  content: \"\\f496\"; }\n\n.fa-weixin:before {\n  content: \"\\f1d7\"; }\n\n.fa-whatsapp:before {\n  content: \"\\f232\"; }\n\n.fa-whatsapp-square:before {\n  content: \"\\f40c\"; }\n\n.fa-wheelchair:before {\n  content: \"\\f193\"; }\n\n.fa-whmcs:before {\n  content: \"\\f40d\"; }\n\n.fa-wifi:before {\n  content: \"\\f1eb\"; }\n\n.fa-wikipedia-w:before {\n  content: \"\\f266\"; }\n\n.fa-window-close:before {\n  content: \"\\f410\"; }\n\n.fa-window-maximize:before {\n  content: \"\\f2d0\"; }\n\n.fa-window-minimize:before {\n  content: \"\\f2d1\"; }\n\n.fa-window-restore:before {\n  content: \"\\f2d2\"; }\n\n.fa-windows:before {\n  content: \"\\f17a\"; }\n\n.fa-won-sign:before {\n  content: \"\\f159\"; }\n\n.fa-wordpress:before {\n  content: \"\\f19a\"; }\n\n.fa-wordpress-simple:before {\n  content: \"\\f411\"; }\n\n.fa-wpbeginner:before {\n  content: \"\\f297\"; }\n\n.fa-wpexplorer:before {\n  content: \"\\f2de\"; }\n\n.fa-wpforms:before {\n  content: \"\\f298\"; }\n\n.fa-wrench:before {\n  content: \"\\f0ad\"; }\n\n.fa-xbox:before {\n  content: \"\\f412\"; }\n\n.fa-xing:before {\n  content: \"\\f168\"; }\n\n.fa-xing-square:before {\n  content: \"\\f169\"; }\n\n.fa-y-combinator:before {\n  content: \"\\f23b\"; }\n\n.fa-yahoo:before {\n  content: \"\\f19e\"; }\n\n.fa-yandex:before {\n  content: \"\\f413\"; }\n\n.fa-yandex-international:before {\n  content: \"\\f414\"; }\n\n.fa-yelp:before {\n  content: \"\\f1e9\"; }\n\n.fa-yen-sign:before {\n  content: \"\\f157\"; }\n\n.fa-yoast:before {\n  content: \"\\f2b1\"; }\n\n.fa-youtube:before {\n  content: \"\\f167\"; }\n\n.fa-youtube-square:before {\n  content: \"\\f431\"; }\n\n.sr-only {\n  border: 0;\n  clip: rect(0, 0, 0, 0);\n  height: 1px;\n  margin: -1px;\n  overflow: hidden;\n  padding: 0;\n  position: absolute;\n  width: 1px; }\n\n.sr-only-focusable:active, .sr-only-focusable:focus {\n  clip: auto;\n  height: auto;\n  margin: 0;\n  overflow: visible;\n  position: static;\n  width: auto; }\n@font-face {\n  font-family: 'Font Awesome 5 Brands';\n  font-style: normal;\n  font-weight: normal;\n  src: url(\"../webfonts/fa-brands-400.eot\");\n  src: url(\"../webfonts/fa-brands-400.eot?#iefix\") format(\"embedded-opentype\"), url(\"../webfonts/fa-brands-400.woff2\") format(\"woff2\"), url(\"../webfonts/fa-brands-400.woff\") format(\"woff\"), url(\"../webfonts/fa-brands-400.ttf\") format(\"truetype\"), url(\"../webfonts/fa-brands-400.svg#fontawesome\") format(\"svg\"); }\n\n.fab {\n  font-family: 'Font Awesome 5 Brands'; }\n@font-face {\n  font-family: 'Font Awesome 5 Free';\n  font-style: normal;\n  font-weight: 400;\n  src: url(\"../webfonts/fa-regular-400.eot\");\n  src: url(\"../webfonts/fa-regular-400.eot?#iefix\") format(\"embedded-opentype\"), url(\"../webfonts/fa-regular-400.woff2\") format(\"woff2\"), url(\"../webfonts/fa-regular-400.woff\") format(\"woff\"), url(\"../webfonts/fa-regular-400.ttf\") format(\"truetype\"), url(\"../webfonts/fa-regular-400.svg#fontawesome\") format(\"svg\"); }\n\n.far {\n  font-family: 'Font Awesome 5 Free';\n  font-weight: 400; }\n@font-face {\n  font-family: 'Font Awesome 5 Free';\n  font-style: normal;\n  font-weight: 900;\n  src: url(\"../webfonts/fa-solid-900.eot\");\n  src: url(\"../webfonts/fa-solid-900.eot?#iefix\") format(\"embedded-opentype\"), url(\"../webfonts/fa-solid-900.woff2\") format(\"woff2\"), url(\"../webfonts/fa-solid-900.woff\") format(\"woff\"), url(\"../webfonts/fa-solid-900.ttf\") format(\"truetype\"), url(\"../webfonts/fa-solid-900.svg#fontawesome\") format(\"svg\"); }\n\n.fa,\n.fas {\n  font-family: 'Font Awesome 5 Free';\n  font-weight: 900; }\n"
  },
  {
    "path": "src/sourceDev.WebApp/SharedThemes/journal/wwwroot/css/site.css",
    "content": "﻿html {\n    position: relative;\n    min-height: 100%;\n}\n\nbody {\n    min-height: 100vh;\n    padding-top: 146px;\n}\n\n#newPostLink {\n    position: absolute;\n    top: 170px;\n    right: 0px;\n}\n\n#editPostLink {\n    position: absolute;\n    top: 200px;\n    right: 0px;\n}\n\n#unpublishPostLink {\n    position: absolute;\n    top: 230px !important;\n    right: 0px !important;\n}\n\n#pageManagerLink {\n    position: absolute;\n    top: 170px;\n    right: 0px;\n}\n\n#newPageLink {\n    position: absolute;\n    top: 200px;\n    right: 0px;\n}\n\n#editPageLink {\n    position: absolute;\n    top: 230px;\n    right: 0px\n}\n\n#unpublishPageLink {\n    position: absolute;\n    top: 260px !important;\n    right: 0px !important\n}\n\n#sidenavtoggle {\n    position: absolute;\n    top: 220px;\n    right: 5px;\n}\n\n\n@media screen and (max-width: 812px) {\n    #sidenavtoggle,\n    #sidenavmenu {\n        display: none;\n    }\n}\n\n.flex-fill {\n    flex: 1 1 auto !important;\n}\n\n\n.carousel-caption p {\n    font-size: 20px;\n    line-height: 1.4;\n}\n\n@media screen and (max-width: 768px) {\n    .carousel-caption {\n        display: none\n    }\n}\n\n\n\n\nimg, video, iframe {\n    max-width: 100%;\n}\n\ntd img, video, iframe {\n    max-width: none;\n}\n\n\n\n.table td, .table th {\n    vertical-align: inherit;\n}\n\n/******** jquery smartmenu bootstrap 4 ******/\n/* Carets in collapsible mode (make them look like +/- buttons) */\n.navbar-nav.sm-collapsible .sub-arrow {\n    position: absolute;\n    top: 50%;\n    right: 0;\n    margin: -0.7em 0.5em 0 0;\n    border: 1px solid rgba(0, 0, 0, .1);\n    border-radius: .25rem;\n    padding: 0;\n    width: 2em;\n    height: 1.4em;\n    font-size: 1.25rem;\n    line-height: 1.2em;\n    text-align: center;\n}\n\n    .navbar-nav.sm-collapsible .sub-arrow::before {\n        content: '+';\n    }\n\n.navbar-nav.sm-collapsible .show > a > .sub-arrow::before {\n    content: '-';\n}\n\n.navbar-dark .navbar-nav.sm-collapsible .nav-link .sub-arrow {\n    border-color: rgba(255, 255, 255, .1);\n}\n/* make sure there's room for the carets */\n.navbar-nav.sm-collapsible .has-submenu {\n    padding-right: 3em;\n}\n/* keep the carets properly positioned */\n.navbar-nav.sm-collapsible .nav-link,\n.navbar-nav.sm-collapsible .dropdown-item {\n    position: relative;\n}\n\n\n/* Nav carets in expanded mode */\n.navbar-nav:not(.sm-collapsible) .nav-link .sub-arrow {\n    display: inline-block;\n    width: 0;\n    height: 0;\n    margin-left: .255em;\n    vertical-align: .255em;\n    border-top: .3em solid;\n    border-right: .3em solid transparent;\n    border-left: .3em solid transparent;\n}\n/* point the arrows up for .fixed-bottom navbars */\n.fixed-bottom .navbar-nav:not(.sm-collapsible) .nav-link .sub-arrow,\n.fixed-bottom .navbar-nav:not(.sm-collapsible):not([data-sm-skip]) .dropdown-toggle::after {\n    border-top: 0;\n    border-bottom: .3em solid;\n}\n\n\n/* Dropdown carets in expanded mode */\n.navbar-nav:not(.sm-collapsible) .dropdown-item .sub-arrow,\n.navbar-nav:not(.sm-collapsible):not([data-sm-skip]) .dropdown-menu .dropdown-toggle::after {\n    position: absolute;\n    top: 50%;\n    right: 0;\n    width: 0;\n    height: 0;\n    margin-top: -.3em;\n    margin-right: 1em;\n    border-top: .3em solid transparent;\n    border-bottom: .3em solid transparent;\n    border-left: .3em solid;\n}\n/* make sure there's room for the carets */\n.navbar-nav:not(.sm-collapsible) .dropdown-item.has-submenu {\n    padding-right: 2em;\n}\n\n\n/* Scrolling arrows for tall menus */\n.navbar-nav .scroll-up,\n.navbar-nav .scroll-down {\n    position: absolute;\n    display: none;\n    visibility: hidden;\n    height: 20px;\n    overflow: hidden;\n    text-align: center;\n}\n\n.navbar-nav .scroll-up-arrow,\n.navbar-nav .scroll-down-arrow {\n    position: absolute;\n    top: -2px;\n    left: 50%;\n    margin-left: -8px;\n    width: 0;\n    height: 0;\n    overflow: hidden;\n    border-top: 7px solid transparent;\n    border-right: 7px solid transparent;\n    border-bottom: 7px solid;\n    border-left: 7px solid transparent;\n}\n\n.navbar-nav .scroll-down-arrow {\n    top: 6px;\n    border-top: 7px solid;\n    border-right: 7px solid transparent;\n    border-bottom: 7px solid transparent;\n    border-left: 7px solid transparent;\n}\n\n\n/* Add some spacing for 2+ level sub menus in collapsible mode */\n.navbar-nav.sm-collapsible .dropdown-menu .dropdown-menu {\n    margin: .5em;\n}\n\n\n/* Fix SmartMenus sub menus auto width (subMenusMinWidth/subMenusMaxWidth options) */\n.navbar-nav:not([data-sm-skip]) .dropdown-item {\n    white-space: normal;\n}\n\n.navbar-nav:not(.sm-collapsible) .sm-nowrap > li > .dropdown-item {\n    white-space: nowrap;\n}\n/******** end jquery smart menu bootstrap-4 *****************/\n\n.brand-header {\n    height: 100px;\n}\n\nheader .navbar {\n    top: 100px;\n}\n"
  },
  {
    "path": "src/sourceDev.WebApp/SharedThemes/journal/wwwroot/js/bootstrap.bundle.js",
    "content": "/*!\n  * Bootstrap v5.0.2 (https://getbootstrap.com/)\n  * Copyright 2011-2021 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)\n  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n  */\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n  typeof define === 'function' && define.amd ? define(factory) :\n  (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.bootstrap = factory());\n}(this, (function () { 'use strict';\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): dom/selector-engine.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n  const NODE_TEXT = 3;\n  const SelectorEngine = {\n    find(selector, element = document.documentElement) {\n      return [].concat(...Element.prototype.querySelectorAll.call(element, selector));\n    },\n\n    findOne(selector, element = document.documentElement) {\n      return Element.prototype.querySelector.call(element, selector);\n    },\n\n    children(element, selector) {\n      return [].concat(...element.children).filter(child => child.matches(selector));\n    },\n\n    parents(element, selector) {\n      const parents = [];\n      let ancestor = element.parentNode;\n\n      while (ancestor && ancestor.nodeType === Node.ELEMENT_NODE && ancestor.nodeType !== NODE_TEXT) {\n        if (ancestor.matches(selector)) {\n          parents.push(ancestor);\n        }\n\n        ancestor = ancestor.parentNode;\n      }\n\n      return parents;\n    },\n\n    prev(element, selector) {\n      let previous = element.previousElementSibling;\n\n      while (previous) {\n        if (previous.matches(selector)) {\n          return [previous];\n        }\n\n        previous = previous.previousElementSibling;\n      }\n\n      return [];\n    },\n\n    next(element, selector) {\n      let next = element.nextElementSibling;\n\n      while (next) {\n        if (next.matches(selector)) {\n          return [next];\n        }\n\n        next = next.nextElementSibling;\n      }\n\n      return [];\n    }\n\n  };\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): util/index.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n\n  const MAX_UID = 1000000;\n  const MILLISECONDS_MULTIPLIER = 1000;\n  const TRANSITION_END = 'transitionend'; // Shoutout AngusCroll (https://goo.gl/pxwQGp)\n\n  const toType = obj => {\n    if (obj === null || obj === undefined) {\n      return `${obj}`;\n    }\n\n    return {}.toString.call(obj).match(/\\s([a-z]+)/i)[1].toLowerCase();\n  };\n  /**\n   * --------------------------------------------------------------------------\n   * Public Util Api\n   * --------------------------------------------------------------------------\n   */\n\n\n  const getUID = prefix => {\n    do {\n      prefix += Math.floor(Math.random() * MAX_UID);\n    } while (document.getElementById(prefix));\n\n    return prefix;\n  };\n\n  const getSelector = element => {\n    let selector = element.getAttribute('data-bs-target');\n\n    if (!selector || selector === '#') {\n      let hrefAttr = element.getAttribute('href'); // The only valid content that could double as a selector are IDs or classes,\n      // so everything starting with `#` or `.`. If a \"real\" URL is used as the selector,\n      // `document.querySelector` will rightfully complain it is invalid.\n      // See https://github.com/twbs/bootstrap/issues/32273\n\n      if (!hrefAttr || !hrefAttr.includes('#') && !hrefAttr.startsWith('.')) {\n        return null;\n      } // Just in case some CMS puts out a full URL with the anchor appended\n\n\n      if (hrefAttr.includes('#') && !hrefAttr.startsWith('#')) {\n        hrefAttr = `#${hrefAttr.split('#')[1]}`;\n      }\n\n      selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : null;\n    }\n\n    return selector;\n  };\n\n  const getSelectorFromElement = element => {\n    const selector = getSelector(element);\n\n    if (selector) {\n      return document.querySelector(selector) ? selector : null;\n    }\n\n    return null;\n  };\n\n  const getElementFromSelector = element => {\n    const selector = getSelector(element);\n    return selector ? document.querySelector(selector) : null;\n  };\n\n  const getTransitionDurationFromElement = element => {\n    if (!element) {\n      return 0;\n    } // Get transition-duration of the element\n\n\n    let {\n      transitionDuration,\n      transitionDelay\n    } = window.getComputedStyle(element);\n    const floatTransitionDuration = Number.parseFloat(transitionDuration);\n    const floatTransitionDelay = Number.parseFloat(transitionDelay); // Return 0 if element or transition duration is not found\n\n    if (!floatTransitionDuration && !floatTransitionDelay) {\n      return 0;\n    } // If multiple durations are defined, take the first\n\n\n    transitionDuration = transitionDuration.split(',')[0];\n    transitionDelay = transitionDelay.split(',')[0];\n    return (Number.parseFloat(transitionDuration) + Number.parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER;\n  };\n\n  const triggerTransitionEnd = element => {\n    element.dispatchEvent(new Event(TRANSITION_END));\n  };\n\n  const isElement$1 = obj => {\n    if (!obj || typeof obj !== 'object') {\n      return false;\n    }\n\n    if (typeof obj.jquery !== 'undefined') {\n      obj = obj[0];\n    }\n\n    return typeof obj.nodeType !== 'undefined';\n  };\n\n  const getElement = obj => {\n    if (isElement$1(obj)) {\n      // it's a jQuery object or a node element\n      return obj.jquery ? obj[0] : obj;\n    }\n\n    if (typeof obj === 'string' && obj.length > 0) {\n      return SelectorEngine.findOne(obj);\n    }\n\n    return null;\n  };\n\n  const typeCheckConfig = (componentName, config, configTypes) => {\n    Object.keys(configTypes).forEach(property => {\n      const expectedTypes = configTypes[property];\n      const value = config[property];\n      const valueType = value && isElement$1(value) ? 'element' : toType(value);\n\n      if (!new RegExp(expectedTypes).test(valueType)) {\n        throw new TypeError(`${componentName.toUpperCase()}: Option \"${property}\" provided type \"${valueType}\" but expected type \"${expectedTypes}\".`);\n      }\n    });\n  };\n\n  const isVisible = element => {\n    if (!isElement$1(element) || element.getClientRects().length === 0) {\n      return false;\n    }\n\n    return getComputedStyle(element).getPropertyValue('visibility') === 'visible';\n  };\n\n  const isDisabled = element => {\n    if (!element || element.nodeType !== Node.ELEMENT_NODE) {\n      return true;\n    }\n\n    if (element.classList.contains('disabled')) {\n      return true;\n    }\n\n    if (typeof element.disabled !== 'undefined') {\n      return element.disabled;\n    }\n\n    return element.hasAttribute('disabled') && element.getAttribute('disabled') !== 'false';\n  };\n\n  const findShadowRoot = element => {\n    if (!document.documentElement.attachShadow) {\n      return null;\n    } // Can find the shadow root otherwise it'll return the document\n\n\n    if (typeof element.getRootNode === 'function') {\n      const root = element.getRootNode();\n      return root instanceof ShadowRoot ? root : null;\n    }\n\n    if (element instanceof ShadowRoot) {\n      return element;\n    } // when we don't find a shadow root\n\n\n    if (!element.parentNode) {\n      return null;\n    }\n\n    return findShadowRoot(element.parentNode);\n  };\n\n  const noop = () => {};\n\n  const reflow = element => element.offsetHeight;\n\n  const getjQuery = () => {\n    const {\n      jQuery\n    } = window;\n\n    if (jQuery && !document.body.hasAttribute('data-bs-no-jquery')) {\n      return jQuery;\n    }\n\n    return null;\n  };\n\n  const DOMContentLoadedCallbacks = [];\n\n  const onDOMContentLoaded = callback => {\n    if (document.readyState === 'loading') {\n      // add listener on the first call when the document is in loading state\n      if (!DOMContentLoadedCallbacks.length) {\n        document.addEventListener('DOMContentLoaded', () => {\n          DOMContentLoadedCallbacks.forEach(callback => callback());\n        });\n      }\n\n      DOMContentLoadedCallbacks.push(callback);\n    } else {\n      callback();\n    }\n  };\n\n  const isRTL = () => document.documentElement.dir === 'rtl';\n\n  const defineJQueryPlugin = plugin => {\n    onDOMContentLoaded(() => {\n      const $ = getjQuery();\n      /* istanbul ignore if */\n\n      if ($) {\n        const name = plugin.NAME;\n        const JQUERY_NO_CONFLICT = $.fn[name];\n        $.fn[name] = plugin.jQueryInterface;\n        $.fn[name].Constructor = plugin;\n\n        $.fn[name].noConflict = () => {\n          $.fn[name] = JQUERY_NO_CONFLICT;\n          return plugin.jQueryInterface;\n        };\n      }\n    });\n  };\n\n  const execute = callback => {\n    if (typeof callback === 'function') {\n      callback();\n    }\n  };\n\n  const executeAfterTransition = (callback, transitionElement, waitForTransition = true) => {\n    if (!waitForTransition) {\n      execute(callback);\n      return;\n    }\n\n    const durationPadding = 5;\n    const emulatedDuration = getTransitionDurationFromElement(transitionElement) + durationPadding;\n    let called = false;\n\n    const handler = ({\n      target\n    }) => {\n      if (target !== transitionElement) {\n        return;\n      }\n\n      called = true;\n      transitionElement.removeEventListener(TRANSITION_END, handler);\n      execute(callback);\n    };\n\n    transitionElement.addEventListener(TRANSITION_END, handler);\n    setTimeout(() => {\n      if (!called) {\n        triggerTransitionEnd(transitionElement);\n      }\n    }, emulatedDuration);\n  };\n  /**\n   * Return the previous/next element of a list.\n   *\n   * @param {array} list    The list of elements\n   * @param activeElement   The active element\n   * @param shouldGetNext   Choose to get next or previous element\n   * @param isCycleAllowed\n   * @return {Element|elem} The proper element\n   */\n\n\n  const getNextActiveElement = (list, activeElement, shouldGetNext, isCycleAllowed) => {\n    let index = list.indexOf(activeElement); // if the element does not exist in the list return an element depending on the direction and if cycle is allowed\n\n    if (index === -1) {\n      return list[!shouldGetNext && isCycleAllowed ? list.length - 1 : 0];\n    }\n\n    const listLength = list.length;\n    index += shouldGetNext ? 1 : -1;\n\n    if (isCycleAllowed) {\n      index = (index + listLength) % listLength;\n    }\n\n    return list[Math.max(0, Math.min(index, listLength - 1))];\n  };\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): dom/event-handler.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const namespaceRegex = /[^.]*(?=\\..*)\\.|.*/;\n  const stripNameRegex = /\\..*/;\n  const stripUidRegex = /::\\d+$/;\n  const eventRegistry = {}; // Events storage\n\n  let uidEvent = 1;\n  const customEvents = {\n    mouseenter: 'mouseover',\n    mouseleave: 'mouseout'\n  };\n  const customEventsRegex = /^(mouseenter|mouseleave)/i;\n  const nativeEvents = new Set(['click', 'dblclick', 'mouseup', 'mousedown', 'contextmenu', 'mousewheel', 'DOMMouseScroll', 'mouseover', 'mouseout', 'mousemove', 'selectstart', 'selectend', 'keydown', 'keypress', 'keyup', 'orientationchange', 'touchstart', 'touchmove', 'touchend', 'touchcancel', 'pointerdown', 'pointermove', 'pointerup', 'pointerleave', 'pointercancel', 'gesturestart', 'gesturechange', 'gestureend', 'focus', 'blur', 'change', 'reset', 'select', 'submit', 'focusin', 'focusout', 'load', 'unload', 'beforeunload', 'resize', 'move', 'DOMContentLoaded', 'readystatechange', 'error', 'abort', 'scroll']);\n  /**\n   * ------------------------------------------------------------------------\n   * Private methods\n   * ------------------------------------------------------------------------\n   */\n\n  function getUidEvent(element, uid) {\n    return uid && `${uid}::${uidEvent++}` || element.uidEvent || uidEvent++;\n  }\n\n  function getEvent(element) {\n    const uid = getUidEvent(element);\n    element.uidEvent = uid;\n    eventRegistry[uid] = eventRegistry[uid] || {};\n    return eventRegistry[uid];\n  }\n\n  function bootstrapHandler(element, fn) {\n    return function handler(event) {\n      event.delegateTarget = element;\n\n      if (handler.oneOff) {\n        EventHandler.off(element, event.type, fn);\n      }\n\n      return fn.apply(element, [event]);\n    };\n  }\n\n  function bootstrapDelegationHandler(element, selector, fn) {\n    return function handler(event) {\n      const domElements = element.querySelectorAll(selector);\n\n      for (let {\n        target\n      } = event; target && target !== this; target = target.parentNode) {\n        for (let i = domElements.length; i--;) {\n          if (domElements[i] === target) {\n            event.delegateTarget = target;\n\n            if (handler.oneOff) {\n              // eslint-disable-next-line unicorn/consistent-destructuring\n              EventHandler.off(element, event.type, selector, fn);\n            }\n\n            return fn.apply(target, [event]);\n          }\n        }\n      } // To please ESLint\n\n\n      return null;\n    };\n  }\n\n  function findHandler(events, handler, delegationSelector = null) {\n    const uidEventList = Object.keys(events);\n\n    for (let i = 0, len = uidEventList.length; i < len; i++) {\n      const event = events[uidEventList[i]];\n\n      if (event.originalHandler === handler && event.delegationSelector === delegationSelector) {\n        return event;\n      }\n    }\n\n    return null;\n  }\n\n  function normalizeParams(originalTypeEvent, handler, delegationFn) {\n    const delegation = typeof handler === 'string';\n    const originalHandler = delegation ? delegationFn : handler;\n    let typeEvent = getTypeEvent(originalTypeEvent);\n    const isNative = nativeEvents.has(typeEvent);\n\n    if (!isNative) {\n      typeEvent = originalTypeEvent;\n    }\n\n    return [delegation, originalHandler, typeEvent];\n  }\n\n  function addHandler(element, originalTypeEvent, handler, delegationFn, oneOff) {\n    if (typeof originalTypeEvent !== 'string' || !element) {\n      return;\n    }\n\n    if (!handler) {\n      handler = delegationFn;\n      delegationFn = null;\n    } // in case of mouseenter or mouseleave wrap the handler within a function that checks for its DOM position\n    // this prevents the handler from being dispatched the same way as mouseover or mouseout does\n\n\n    if (customEventsRegex.test(originalTypeEvent)) {\n      const wrapFn = fn => {\n        return function (event) {\n          if (!event.relatedTarget || event.relatedTarget !== event.delegateTarget && !event.delegateTarget.contains(event.relatedTarget)) {\n            return fn.call(this, event);\n          }\n        };\n      };\n\n      if (delegationFn) {\n        delegationFn = wrapFn(delegationFn);\n      } else {\n        handler = wrapFn(handler);\n      }\n    }\n\n    const [delegation, originalHandler, typeEvent] = normalizeParams(originalTypeEvent, handler, delegationFn);\n    const events = getEvent(element);\n    const handlers = events[typeEvent] || (events[typeEvent] = {});\n    const previousFn = findHandler(handlers, originalHandler, delegation ? handler : null);\n\n    if (previousFn) {\n      previousFn.oneOff = previousFn.oneOff && oneOff;\n      return;\n    }\n\n    const uid = getUidEvent(originalHandler, originalTypeEvent.replace(namespaceRegex, ''));\n    const fn = delegation ? bootstrapDelegationHandler(element, handler, delegationFn) : bootstrapHandler(element, handler);\n    fn.delegationSelector = delegation ? handler : null;\n    fn.originalHandler = originalHandler;\n    fn.oneOff = oneOff;\n    fn.uidEvent = uid;\n    handlers[uid] = fn;\n    element.addEventListener(typeEvent, fn, delegation);\n  }\n\n  function removeHandler(element, events, typeEvent, handler, delegationSelector) {\n    const fn = findHandler(events[typeEvent], handler, delegationSelector);\n\n    if (!fn) {\n      return;\n    }\n\n    element.removeEventListener(typeEvent, fn, Boolean(delegationSelector));\n    delete events[typeEvent][fn.uidEvent];\n  }\n\n  function removeNamespacedHandlers(element, events, typeEvent, namespace) {\n    const storeElementEvent = events[typeEvent] || {};\n    Object.keys(storeElementEvent).forEach(handlerKey => {\n      if (handlerKey.includes(namespace)) {\n        const event = storeElementEvent[handlerKey];\n        removeHandler(element, events, typeEvent, event.originalHandler, event.delegationSelector);\n      }\n    });\n  }\n\n  function getTypeEvent(event) {\n    // allow to get the native events from namespaced events ('click.bs.button' --> 'click')\n    event = event.replace(stripNameRegex, '');\n    return customEvents[event] || event;\n  }\n\n  const EventHandler = {\n    on(element, event, handler, delegationFn) {\n      addHandler(element, event, handler, delegationFn, false);\n    },\n\n    one(element, event, handler, delegationFn) {\n      addHandler(element, event, handler, delegationFn, true);\n    },\n\n    off(element, originalTypeEvent, handler, delegationFn) {\n      if (typeof originalTypeEvent !== 'string' || !element) {\n        return;\n      }\n\n      const [delegation, originalHandler, typeEvent] = normalizeParams(originalTypeEvent, handler, delegationFn);\n      const inNamespace = typeEvent !== originalTypeEvent;\n      const events = getEvent(element);\n      const isNamespace = originalTypeEvent.startsWith('.');\n\n      if (typeof originalHandler !== 'undefined') {\n        // Simplest case: handler is passed, remove that listener ONLY.\n        if (!events || !events[typeEvent]) {\n          return;\n        }\n\n        removeHandler(element, events, typeEvent, originalHandler, delegation ? handler : null);\n        return;\n      }\n\n      if (isNamespace) {\n        Object.keys(events).forEach(elementEvent => {\n          removeNamespacedHandlers(element, events, elementEvent, originalTypeEvent.slice(1));\n        });\n      }\n\n      const storeElementEvent = events[typeEvent] || {};\n      Object.keys(storeElementEvent).forEach(keyHandlers => {\n        const handlerKey = keyHandlers.replace(stripUidRegex, '');\n\n        if (!inNamespace || originalTypeEvent.includes(handlerKey)) {\n          const event = storeElementEvent[keyHandlers];\n          removeHandler(element, events, typeEvent, event.originalHandler, event.delegationSelector);\n        }\n      });\n    },\n\n    trigger(element, event, args) {\n      if (typeof event !== 'string' || !element) {\n        return null;\n      }\n\n      const $ = getjQuery();\n      const typeEvent = getTypeEvent(event);\n      const inNamespace = event !== typeEvent;\n      const isNative = nativeEvents.has(typeEvent);\n      let jQueryEvent;\n      let bubbles = true;\n      let nativeDispatch = true;\n      let defaultPrevented = false;\n      let evt = null;\n\n      if (inNamespace && $) {\n        jQueryEvent = $.Event(event, args);\n        $(element).trigger(jQueryEvent);\n        bubbles = !jQueryEvent.isPropagationStopped();\n        nativeDispatch = !jQueryEvent.isImmediatePropagationStopped();\n        defaultPrevented = jQueryEvent.isDefaultPrevented();\n      }\n\n      if (isNative) {\n        evt = document.createEvent('HTMLEvents');\n        evt.initEvent(typeEvent, bubbles, true);\n      } else {\n        evt = new CustomEvent(event, {\n          bubbles,\n          cancelable: true\n        });\n      } // merge custom information in our event\n\n\n      if (typeof args !== 'undefined') {\n        Object.keys(args).forEach(key => {\n          Object.defineProperty(evt, key, {\n            get() {\n              return args[key];\n            }\n\n          });\n        });\n      }\n\n      if (defaultPrevented) {\n        evt.preventDefault();\n      }\n\n      if (nativeDispatch) {\n        element.dispatchEvent(evt);\n      }\n\n      if (evt.defaultPrevented && typeof jQueryEvent !== 'undefined') {\n        jQueryEvent.preventDefault();\n      }\n\n      return evt;\n    }\n\n  };\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): dom/data.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n  const elementMap = new Map();\n  var Data = {\n    set(element, key, instance) {\n      if (!elementMap.has(element)) {\n        elementMap.set(element, new Map());\n      }\n\n      const instanceMap = elementMap.get(element); // make it clear we only want one instance per element\n      // can be removed later when multiple key/instances are fine to be used\n\n      if (!instanceMap.has(key) && instanceMap.size !== 0) {\n        // eslint-disable-next-line no-console\n        console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(instanceMap.keys())[0]}.`);\n        return;\n      }\n\n      instanceMap.set(key, instance);\n    },\n\n    get(element, key) {\n      if (elementMap.has(element)) {\n        return elementMap.get(element).get(key) || null;\n      }\n\n      return null;\n    },\n\n    remove(element, key) {\n      if (!elementMap.has(element)) {\n        return;\n      }\n\n      const instanceMap = elementMap.get(element);\n      instanceMap.delete(key); // free up element references if there are no instances left for an element\n\n      if (instanceMap.size === 0) {\n        elementMap.delete(element);\n      }\n    }\n\n  };\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): base-component.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const VERSION = '5.0.2';\n\n  class BaseComponent {\n    constructor(element) {\n      element = getElement(element);\n\n      if (!element) {\n        return;\n      }\n\n      this._element = element;\n      Data.set(this._element, this.constructor.DATA_KEY, this);\n    }\n\n    dispose() {\n      Data.remove(this._element, this.constructor.DATA_KEY);\n      EventHandler.off(this._element, this.constructor.EVENT_KEY);\n      Object.getOwnPropertyNames(this).forEach(propertyName => {\n        this[propertyName] = null;\n      });\n    }\n\n    _queueCallback(callback, element, isAnimated = true) {\n      executeAfterTransition(callback, element, isAnimated);\n    }\n    /** Static */\n\n\n    static getInstance(element) {\n      return Data.get(element, this.DATA_KEY);\n    }\n\n    static getOrCreateInstance(element, config = {}) {\n      return this.getInstance(element) || new this(element, typeof config === 'object' ? config : null);\n    }\n\n    static get VERSION() {\n      return VERSION;\n    }\n\n    static get NAME() {\n      throw new Error('You have to implement the static method \"NAME\", for each component!');\n    }\n\n    static get DATA_KEY() {\n      return `bs.${this.NAME}`;\n    }\n\n    static get EVENT_KEY() {\n      return `.${this.DATA_KEY}`;\n    }\n\n  }\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): alert.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$c = 'alert';\n  const DATA_KEY$b = 'bs.alert';\n  const EVENT_KEY$b = `.${DATA_KEY$b}`;\n  const DATA_API_KEY$8 = '.data-api';\n  const SELECTOR_DISMISS = '[data-bs-dismiss=\"alert\"]';\n  const EVENT_CLOSE = `close${EVENT_KEY$b}`;\n  const EVENT_CLOSED = `closed${EVENT_KEY$b}`;\n  const EVENT_CLICK_DATA_API$7 = `click${EVENT_KEY$b}${DATA_API_KEY$8}`;\n  const CLASS_NAME_ALERT = 'alert';\n  const CLASS_NAME_FADE$6 = 'fade';\n  const CLASS_NAME_SHOW$9 = 'show';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Alert extends BaseComponent {\n    // Getters\n    static get NAME() {\n      return NAME$c;\n    } // Public\n\n\n    close(element) {\n      const rootElement = element ? this._getRootElement(element) : this._element;\n\n      const customEvent = this._triggerCloseEvent(rootElement);\n\n      if (customEvent === null || customEvent.defaultPrevented) {\n        return;\n      }\n\n      this._removeElement(rootElement);\n    } // Private\n\n\n    _getRootElement(element) {\n      return getElementFromSelector(element) || element.closest(`.${CLASS_NAME_ALERT}`);\n    }\n\n    _triggerCloseEvent(element) {\n      return EventHandler.trigger(element, EVENT_CLOSE);\n    }\n\n    _removeElement(element) {\n      element.classList.remove(CLASS_NAME_SHOW$9);\n      const isAnimated = element.classList.contains(CLASS_NAME_FADE$6);\n\n      this._queueCallback(() => this._destroyElement(element), element, isAnimated);\n    }\n\n    _destroyElement(element) {\n      element.remove();\n      EventHandler.trigger(element, EVENT_CLOSED);\n    } // Static\n\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = Alert.getOrCreateInstance(this);\n\n        if (config === 'close') {\n          data[config](this);\n        }\n      });\n    }\n\n    static handleDismiss(alertInstance) {\n      return function (event) {\n        if (event) {\n          event.preventDefault();\n        }\n\n        alertInstance.close(this);\n      };\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(document, EVENT_CLICK_DATA_API$7, SELECTOR_DISMISS, Alert.handleDismiss(new Alert()));\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Alert to jQuery only if jQuery is present\n   */\n\n  defineJQueryPlugin(Alert);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): button.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$b = 'button';\n  const DATA_KEY$a = 'bs.button';\n  const EVENT_KEY$a = `.${DATA_KEY$a}`;\n  const DATA_API_KEY$7 = '.data-api';\n  const CLASS_NAME_ACTIVE$3 = 'active';\n  const SELECTOR_DATA_TOGGLE$5 = '[data-bs-toggle=\"button\"]';\n  const EVENT_CLICK_DATA_API$6 = `click${EVENT_KEY$a}${DATA_API_KEY$7}`;\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Button extends BaseComponent {\n    // Getters\n    static get NAME() {\n      return NAME$b;\n    } // Public\n\n\n    toggle() {\n      // Toggle class and sync the `aria-pressed` attribute with the return value of the `.toggle()` method\n      this._element.setAttribute('aria-pressed', this._element.classList.toggle(CLASS_NAME_ACTIVE$3));\n    } // Static\n\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = Button.getOrCreateInstance(this);\n\n        if (config === 'toggle') {\n          data[config]();\n        }\n      });\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(document, EVENT_CLICK_DATA_API$6, SELECTOR_DATA_TOGGLE$5, event => {\n    event.preventDefault();\n    const button = event.target.closest(SELECTOR_DATA_TOGGLE$5);\n    const data = Button.getOrCreateInstance(button);\n    data.toggle();\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Button to jQuery only if jQuery is present\n   */\n\n  defineJQueryPlugin(Button);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): dom/manipulator.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  function normalizeData(val) {\n    if (val === 'true') {\n      return true;\n    }\n\n    if (val === 'false') {\n      return false;\n    }\n\n    if (val === Number(val).toString()) {\n      return Number(val);\n    }\n\n    if (val === '' || val === 'null') {\n      return null;\n    }\n\n    return val;\n  }\n\n  function normalizeDataKey(key) {\n    return key.replace(/[A-Z]/g, chr => `-${chr.toLowerCase()}`);\n  }\n\n  const Manipulator = {\n    setDataAttribute(element, key, value) {\n      element.setAttribute(`data-bs-${normalizeDataKey(key)}`, value);\n    },\n\n    removeDataAttribute(element, key) {\n      element.removeAttribute(`data-bs-${normalizeDataKey(key)}`);\n    },\n\n    getDataAttributes(element) {\n      if (!element) {\n        return {};\n      }\n\n      const attributes = {};\n      Object.keys(element.dataset).filter(key => key.startsWith('bs')).forEach(key => {\n        let pureKey = key.replace(/^bs/, '');\n        pureKey = pureKey.charAt(0).toLowerCase() + pureKey.slice(1, pureKey.length);\n        attributes[pureKey] = normalizeData(element.dataset[key]);\n      });\n      return attributes;\n    },\n\n    getDataAttribute(element, key) {\n      return normalizeData(element.getAttribute(`data-bs-${normalizeDataKey(key)}`));\n    },\n\n    offset(element) {\n      const rect = element.getBoundingClientRect();\n      return {\n        top: rect.top + document.body.scrollTop,\n        left: rect.left + document.body.scrollLeft\n      };\n    },\n\n    position(element) {\n      return {\n        top: element.offsetTop,\n        left: element.offsetLeft\n      };\n    }\n\n  };\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): carousel.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$a = 'carousel';\n  const DATA_KEY$9 = 'bs.carousel';\n  const EVENT_KEY$9 = `.${DATA_KEY$9}`;\n  const DATA_API_KEY$6 = '.data-api';\n  const ARROW_LEFT_KEY = 'ArrowLeft';\n  const ARROW_RIGHT_KEY = 'ArrowRight';\n  const TOUCHEVENT_COMPAT_WAIT = 500; // Time for mouse compat events to fire after touch\n\n  const SWIPE_THRESHOLD = 40;\n  const Default$9 = {\n    interval: 5000,\n    keyboard: true,\n    slide: false,\n    pause: 'hover',\n    wrap: true,\n    touch: true\n  };\n  const DefaultType$9 = {\n    interval: '(number|boolean)',\n    keyboard: 'boolean',\n    slide: '(boolean|string)',\n    pause: '(string|boolean)',\n    wrap: 'boolean',\n    touch: 'boolean'\n  };\n  const ORDER_NEXT = 'next';\n  const ORDER_PREV = 'prev';\n  const DIRECTION_LEFT = 'left';\n  const DIRECTION_RIGHT = 'right';\n  const KEY_TO_DIRECTION = {\n    [ARROW_LEFT_KEY]: DIRECTION_RIGHT,\n    [ARROW_RIGHT_KEY]: DIRECTION_LEFT\n  };\n  const EVENT_SLIDE = `slide${EVENT_KEY$9}`;\n  const EVENT_SLID = `slid${EVENT_KEY$9}`;\n  const EVENT_KEYDOWN = `keydown${EVENT_KEY$9}`;\n  const EVENT_MOUSEENTER = `mouseenter${EVENT_KEY$9}`;\n  const EVENT_MOUSELEAVE = `mouseleave${EVENT_KEY$9}`;\n  const EVENT_TOUCHSTART = `touchstart${EVENT_KEY$9}`;\n  const EVENT_TOUCHMOVE = `touchmove${EVENT_KEY$9}`;\n  const EVENT_TOUCHEND = `touchend${EVENT_KEY$9}`;\n  const EVENT_POINTERDOWN = `pointerdown${EVENT_KEY$9}`;\n  const EVENT_POINTERUP = `pointerup${EVENT_KEY$9}`;\n  const EVENT_DRAG_START = `dragstart${EVENT_KEY$9}`;\n  const EVENT_LOAD_DATA_API$2 = `load${EVENT_KEY$9}${DATA_API_KEY$6}`;\n  const EVENT_CLICK_DATA_API$5 = `click${EVENT_KEY$9}${DATA_API_KEY$6}`;\n  const CLASS_NAME_CAROUSEL = 'carousel';\n  const CLASS_NAME_ACTIVE$2 = 'active';\n  const CLASS_NAME_SLIDE = 'slide';\n  const CLASS_NAME_END = 'carousel-item-end';\n  const CLASS_NAME_START = 'carousel-item-start';\n  const CLASS_NAME_NEXT = 'carousel-item-next';\n  const CLASS_NAME_PREV = 'carousel-item-prev';\n  const CLASS_NAME_POINTER_EVENT = 'pointer-event';\n  const SELECTOR_ACTIVE$1 = '.active';\n  const SELECTOR_ACTIVE_ITEM = '.active.carousel-item';\n  const SELECTOR_ITEM = '.carousel-item';\n  const SELECTOR_ITEM_IMG = '.carousel-item img';\n  const SELECTOR_NEXT_PREV = '.carousel-item-next, .carousel-item-prev';\n  const SELECTOR_INDICATORS = '.carousel-indicators';\n  const SELECTOR_INDICATOR = '[data-bs-target]';\n  const SELECTOR_DATA_SLIDE = '[data-bs-slide], [data-bs-slide-to]';\n  const SELECTOR_DATA_RIDE = '[data-bs-ride=\"carousel\"]';\n  const POINTER_TYPE_TOUCH = 'touch';\n  const POINTER_TYPE_PEN = 'pen';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Carousel extends BaseComponent {\n    constructor(element, config) {\n      super(element);\n      this._items = null;\n      this._interval = null;\n      this._activeElement = null;\n      this._isPaused = false;\n      this._isSliding = false;\n      this.touchTimeout = null;\n      this.touchStartX = 0;\n      this.touchDeltaX = 0;\n      this._config = this._getConfig(config);\n      this._indicatorsElement = SelectorEngine.findOne(SELECTOR_INDICATORS, this._element);\n      this._touchSupported = 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0;\n      this._pointerEvent = Boolean(window.PointerEvent);\n\n      this._addEventListeners();\n    } // Getters\n\n\n    static get Default() {\n      return Default$9;\n    }\n\n    static get NAME() {\n      return NAME$a;\n    } // Public\n\n\n    next() {\n      this._slide(ORDER_NEXT);\n    }\n\n    nextWhenVisible() {\n      // Don't call next when the page isn't visible\n      // or the carousel or its parent isn't visible\n      if (!document.hidden && isVisible(this._element)) {\n        this.next();\n      }\n    }\n\n    prev() {\n      this._slide(ORDER_PREV);\n    }\n\n    pause(event) {\n      if (!event) {\n        this._isPaused = true;\n      }\n\n      if (SelectorEngine.findOne(SELECTOR_NEXT_PREV, this._element)) {\n        triggerTransitionEnd(this._element);\n        this.cycle(true);\n      }\n\n      clearInterval(this._interval);\n      this._interval = null;\n    }\n\n    cycle(event) {\n      if (!event) {\n        this._isPaused = false;\n      }\n\n      if (this._interval) {\n        clearInterval(this._interval);\n        this._interval = null;\n      }\n\n      if (this._config && this._config.interval && !this._isPaused) {\n        this._updateInterval();\n\n        this._interval = setInterval((document.visibilityState ? this.nextWhenVisible : this.next).bind(this), this._config.interval);\n      }\n    }\n\n    to(index) {\n      this._activeElement = SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element);\n\n      const activeIndex = this._getItemIndex(this._activeElement);\n\n      if (index > this._items.length - 1 || index < 0) {\n        return;\n      }\n\n      if (this._isSliding) {\n        EventHandler.one(this._element, EVENT_SLID, () => this.to(index));\n        return;\n      }\n\n      if (activeIndex === index) {\n        this.pause();\n        this.cycle();\n        return;\n      }\n\n      const order = index > activeIndex ? ORDER_NEXT : ORDER_PREV;\n\n      this._slide(order, this._items[index]);\n    } // Private\n\n\n    _getConfig(config) {\n      config = { ...Default$9,\n        ...Manipulator.getDataAttributes(this._element),\n        ...(typeof config === 'object' ? config : {})\n      };\n      typeCheckConfig(NAME$a, config, DefaultType$9);\n      return config;\n    }\n\n    _handleSwipe() {\n      const absDeltax = Math.abs(this.touchDeltaX);\n\n      if (absDeltax <= SWIPE_THRESHOLD) {\n        return;\n      }\n\n      const direction = absDeltax / this.touchDeltaX;\n      this.touchDeltaX = 0;\n\n      if (!direction) {\n        return;\n      }\n\n      this._slide(direction > 0 ? DIRECTION_RIGHT : DIRECTION_LEFT);\n    }\n\n    _addEventListeners() {\n      if (this._config.keyboard) {\n        EventHandler.on(this._element, EVENT_KEYDOWN, event => this._keydown(event));\n      }\n\n      if (this._config.pause === 'hover') {\n        EventHandler.on(this._element, EVENT_MOUSEENTER, event => this.pause(event));\n        EventHandler.on(this._element, EVENT_MOUSELEAVE, event => this.cycle(event));\n      }\n\n      if (this._config.touch && this._touchSupported) {\n        this._addTouchEventListeners();\n      }\n    }\n\n    _addTouchEventListeners() {\n      const start = event => {\n        if (this._pointerEvent && (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH)) {\n          this.touchStartX = event.clientX;\n        } else if (!this._pointerEvent) {\n          this.touchStartX = event.touches[0].clientX;\n        }\n      };\n\n      const move = event => {\n        // ensure swiping with one touch and not pinching\n        this.touchDeltaX = event.touches && event.touches.length > 1 ? 0 : event.touches[0].clientX - this.touchStartX;\n      };\n\n      const end = event => {\n        if (this._pointerEvent && (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH)) {\n          this.touchDeltaX = event.clientX - this.touchStartX;\n        }\n\n        this._handleSwipe();\n\n        if (this._config.pause === 'hover') {\n          // If it's a touch-enabled device, mouseenter/leave are fired as\n          // part of the mouse compatibility events on first tap - the carousel\n          // would stop cycling until user tapped out of it;\n          // here, we listen for touchend, explicitly pause the carousel\n          // (as if it's the second time we tap on it, mouseenter compat event\n          // is NOT fired) and after a timeout (to allow for mouse compatibility\n          // events to fire) we explicitly restart cycling\n          this.pause();\n\n          if (this.touchTimeout) {\n            clearTimeout(this.touchTimeout);\n          }\n\n          this.touchTimeout = setTimeout(event => this.cycle(event), TOUCHEVENT_COMPAT_WAIT + this._config.interval);\n        }\n      };\n\n      SelectorEngine.find(SELECTOR_ITEM_IMG, this._element).forEach(itemImg => {\n        EventHandler.on(itemImg, EVENT_DRAG_START, e => e.preventDefault());\n      });\n\n      if (this._pointerEvent) {\n        EventHandler.on(this._element, EVENT_POINTERDOWN, event => start(event));\n        EventHandler.on(this._element, EVENT_POINTERUP, event => end(event));\n\n        this._element.classList.add(CLASS_NAME_POINTER_EVENT);\n      } else {\n        EventHandler.on(this._element, EVENT_TOUCHSTART, event => start(event));\n        EventHandler.on(this._element, EVENT_TOUCHMOVE, event => move(event));\n        EventHandler.on(this._element, EVENT_TOUCHEND, event => end(event));\n      }\n    }\n\n    _keydown(event) {\n      if (/input|textarea/i.test(event.target.tagName)) {\n        return;\n      }\n\n      const direction = KEY_TO_DIRECTION[event.key];\n\n      if (direction) {\n        event.preventDefault();\n\n        this._slide(direction);\n      }\n    }\n\n    _getItemIndex(element) {\n      this._items = element && element.parentNode ? SelectorEngine.find(SELECTOR_ITEM, element.parentNode) : [];\n      return this._items.indexOf(element);\n    }\n\n    _getItemByOrder(order, activeElement) {\n      const isNext = order === ORDER_NEXT;\n      return getNextActiveElement(this._items, activeElement, isNext, this._config.wrap);\n    }\n\n    _triggerSlideEvent(relatedTarget, eventDirectionName) {\n      const targetIndex = this._getItemIndex(relatedTarget);\n\n      const fromIndex = this._getItemIndex(SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element));\n\n      return EventHandler.trigger(this._element, EVENT_SLIDE, {\n        relatedTarget,\n        direction: eventDirectionName,\n        from: fromIndex,\n        to: targetIndex\n      });\n    }\n\n    _setActiveIndicatorElement(element) {\n      if (this._indicatorsElement) {\n        const activeIndicator = SelectorEngine.findOne(SELECTOR_ACTIVE$1, this._indicatorsElement);\n        activeIndicator.classList.remove(CLASS_NAME_ACTIVE$2);\n        activeIndicator.removeAttribute('aria-current');\n        const indicators = SelectorEngine.find(SELECTOR_INDICATOR, this._indicatorsElement);\n\n        for (let i = 0; i < indicators.length; i++) {\n          if (Number.parseInt(indicators[i].getAttribute('data-bs-slide-to'), 10) === this._getItemIndex(element)) {\n            indicators[i].classList.add(CLASS_NAME_ACTIVE$2);\n            indicators[i].setAttribute('aria-current', 'true');\n            break;\n          }\n        }\n      }\n    }\n\n    _updateInterval() {\n      const element = this._activeElement || SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element);\n\n      if (!element) {\n        return;\n      }\n\n      const elementInterval = Number.parseInt(element.getAttribute('data-bs-interval'), 10);\n\n      if (elementInterval) {\n        this._config.defaultInterval = this._config.defaultInterval || this._config.interval;\n        this._config.interval = elementInterval;\n      } else {\n        this._config.interval = this._config.defaultInterval || this._config.interval;\n      }\n    }\n\n    _slide(directionOrOrder, element) {\n      const order = this._directionToOrder(directionOrOrder);\n\n      const activeElement = SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element);\n\n      const activeElementIndex = this._getItemIndex(activeElement);\n\n      const nextElement = element || this._getItemByOrder(order, activeElement);\n\n      const nextElementIndex = this._getItemIndex(nextElement);\n\n      const isCycling = Boolean(this._interval);\n      const isNext = order === ORDER_NEXT;\n      const directionalClassName = isNext ? CLASS_NAME_START : CLASS_NAME_END;\n      const orderClassName = isNext ? CLASS_NAME_NEXT : CLASS_NAME_PREV;\n\n      const eventDirectionName = this._orderToDirection(order);\n\n      if (nextElement && nextElement.classList.contains(CLASS_NAME_ACTIVE$2)) {\n        this._isSliding = false;\n        return;\n      }\n\n      if (this._isSliding) {\n        return;\n      }\n\n      const slideEvent = this._triggerSlideEvent(nextElement, eventDirectionName);\n\n      if (slideEvent.defaultPrevented) {\n        return;\n      }\n\n      if (!activeElement || !nextElement) {\n        // Some weirdness is happening, so we bail\n        return;\n      }\n\n      this._isSliding = true;\n\n      if (isCycling) {\n        this.pause();\n      }\n\n      this._setActiveIndicatorElement(nextElement);\n\n      this._activeElement = nextElement;\n\n      const triggerSlidEvent = () => {\n        EventHandler.trigger(this._element, EVENT_SLID, {\n          relatedTarget: nextElement,\n          direction: eventDirectionName,\n          from: activeElementIndex,\n          to: nextElementIndex\n        });\n      };\n\n      if (this._element.classList.contains(CLASS_NAME_SLIDE)) {\n        nextElement.classList.add(orderClassName);\n        reflow(nextElement);\n        activeElement.classList.add(directionalClassName);\n        nextElement.classList.add(directionalClassName);\n\n        const completeCallBack = () => {\n          nextElement.classList.remove(directionalClassName, orderClassName);\n          nextElement.classList.add(CLASS_NAME_ACTIVE$2);\n          activeElement.classList.remove(CLASS_NAME_ACTIVE$2, orderClassName, directionalClassName);\n          this._isSliding = false;\n          setTimeout(triggerSlidEvent, 0);\n        };\n\n        this._queueCallback(completeCallBack, activeElement, true);\n      } else {\n        activeElement.classList.remove(CLASS_NAME_ACTIVE$2);\n        nextElement.classList.add(CLASS_NAME_ACTIVE$2);\n        this._isSliding = false;\n        triggerSlidEvent();\n      }\n\n      if (isCycling) {\n        this.cycle();\n      }\n    }\n\n    _directionToOrder(direction) {\n      if (![DIRECTION_RIGHT, DIRECTION_LEFT].includes(direction)) {\n        return direction;\n      }\n\n      if (isRTL()) {\n        return direction === DIRECTION_LEFT ? ORDER_PREV : ORDER_NEXT;\n      }\n\n      return direction === DIRECTION_LEFT ? ORDER_NEXT : ORDER_PREV;\n    }\n\n    _orderToDirection(order) {\n      if (![ORDER_NEXT, ORDER_PREV].includes(order)) {\n        return order;\n      }\n\n      if (isRTL()) {\n        return order === ORDER_PREV ? DIRECTION_LEFT : DIRECTION_RIGHT;\n      }\n\n      return order === ORDER_PREV ? DIRECTION_RIGHT : DIRECTION_LEFT;\n    } // Static\n\n\n    static carouselInterface(element, config) {\n      const data = Carousel.getOrCreateInstance(element, config);\n      let {\n        _config\n      } = data;\n\n      if (typeof config === 'object') {\n        _config = { ..._config,\n          ...config\n        };\n      }\n\n      const action = typeof config === 'string' ? config : _config.slide;\n\n      if (typeof config === 'number') {\n        data.to(config);\n      } else if (typeof action === 'string') {\n        if (typeof data[action] === 'undefined') {\n          throw new TypeError(`No method named \"${action}\"`);\n        }\n\n        data[action]();\n      } else if (_config.interval && _config.ride) {\n        data.pause();\n        data.cycle();\n      }\n    }\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        Carousel.carouselInterface(this, config);\n      });\n    }\n\n    static dataApiClickHandler(event) {\n      const target = getElementFromSelector(this);\n\n      if (!target || !target.classList.contains(CLASS_NAME_CAROUSEL)) {\n        return;\n      }\n\n      const config = { ...Manipulator.getDataAttributes(target),\n        ...Manipulator.getDataAttributes(this)\n      };\n      const slideIndex = this.getAttribute('data-bs-slide-to');\n\n      if (slideIndex) {\n        config.interval = false;\n      }\n\n      Carousel.carouselInterface(target, config);\n\n      if (slideIndex) {\n        Carousel.getInstance(target).to(slideIndex);\n      }\n\n      event.preventDefault();\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(document, EVENT_CLICK_DATA_API$5, SELECTOR_DATA_SLIDE, Carousel.dataApiClickHandler);\n  EventHandler.on(window, EVENT_LOAD_DATA_API$2, () => {\n    const carousels = SelectorEngine.find(SELECTOR_DATA_RIDE);\n\n    for (let i = 0, len = carousels.length; i < len; i++) {\n      Carousel.carouselInterface(carousels[i], Carousel.getInstance(carousels[i]));\n    }\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Carousel to jQuery only if jQuery is present\n   */\n\n  defineJQueryPlugin(Carousel);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): collapse.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$9 = 'collapse';\n  const DATA_KEY$8 = 'bs.collapse';\n  const EVENT_KEY$8 = `.${DATA_KEY$8}`;\n  const DATA_API_KEY$5 = '.data-api';\n  const Default$8 = {\n    toggle: true,\n    parent: ''\n  };\n  const DefaultType$8 = {\n    toggle: 'boolean',\n    parent: '(string|element)'\n  };\n  const EVENT_SHOW$5 = `show${EVENT_KEY$8}`;\n  const EVENT_SHOWN$5 = `shown${EVENT_KEY$8}`;\n  const EVENT_HIDE$5 = `hide${EVENT_KEY$8}`;\n  const EVENT_HIDDEN$5 = `hidden${EVENT_KEY$8}`;\n  const EVENT_CLICK_DATA_API$4 = `click${EVENT_KEY$8}${DATA_API_KEY$5}`;\n  const CLASS_NAME_SHOW$8 = 'show';\n  const CLASS_NAME_COLLAPSE = 'collapse';\n  const CLASS_NAME_COLLAPSING = 'collapsing';\n  const CLASS_NAME_COLLAPSED = 'collapsed';\n  const WIDTH = 'width';\n  const HEIGHT = 'height';\n  const SELECTOR_ACTIVES = '.show, .collapsing';\n  const SELECTOR_DATA_TOGGLE$4 = '[data-bs-toggle=\"collapse\"]';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Collapse extends BaseComponent {\n    constructor(element, config) {\n      super(element);\n      this._isTransitioning = false;\n      this._config = this._getConfig(config);\n      this._triggerArray = SelectorEngine.find(`${SELECTOR_DATA_TOGGLE$4}[href=\"#${this._element.id}\"],` + `${SELECTOR_DATA_TOGGLE$4}[data-bs-target=\"#${this._element.id}\"]`);\n      const toggleList = SelectorEngine.find(SELECTOR_DATA_TOGGLE$4);\n\n      for (let i = 0, len = toggleList.length; i < len; i++) {\n        const elem = toggleList[i];\n        const selector = getSelectorFromElement(elem);\n        const filterElement = SelectorEngine.find(selector).filter(foundElem => foundElem === this._element);\n\n        if (selector !== null && filterElement.length) {\n          this._selector = selector;\n\n          this._triggerArray.push(elem);\n        }\n      }\n\n      this._parent = this._config.parent ? this._getParent() : null;\n\n      if (!this._config.parent) {\n        this._addAriaAndCollapsedClass(this._element, this._triggerArray);\n      }\n\n      if (this._config.toggle) {\n        this.toggle();\n      }\n    } // Getters\n\n\n    static get Default() {\n      return Default$8;\n    }\n\n    static get NAME() {\n      return NAME$9;\n    } // Public\n\n\n    toggle() {\n      if (this._element.classList.contains(CLASS_NAME_SHOW$8)) {\n        this.hide();\n      } else {\n        this.show();\n      }\n    }\n\n    show() {\n      if (this._isTransitioning || this._element.classList.contains(CLASS_NAME_SHOW$8)) {\n        return;\n      }\n\n      let actives;\n      let activesData;\n\n      if (this._parent) {\n        actives = SelectorEngine.find(SELECTOR_ACTIVES, this._parent).filter(elem => {\n          if (typeof this._config.parent === 'string') {\n            return elem.getAttribute('data-bs-parent') === this._config.parent;\n          }\n\n          return elem.classList.contains(CLASS_NAME_COLLAPSE);\n        });\n\n        if (actives.length === 0) {\n          actives = null;\n        }\n      }\n\n      const container = SelectorEngine.findOne(this._selector);\n\n      if (actives) {\n        const tempActiveData = actives.find(elem => container !== elem);\n        activesData = tempActiveData ? Collapse.getInstance(tempActiveData) : null;\n\n        if (activesData && activesData._isTransitioning) {\n          return;\n        }\n      }\n\n      const startEvent = EventHandler.trigger(this._element, EVENT_SHOW$5);\n\n      if (startEvent.defaultPrevented) {\n        return;\n      }\n\n      if (actives) {\n        actives.forEach(elemActive => {\n          if (container !== elemActive) {\n            Collapse.collapseInterface(elemActive, 'hide');\n          }\n\n          if (!activesData) {\n            Data.set(elemActive, DATA_KEY$8, null);\n          }\n        });\n      }\n\n      const dimension = this._getDimension();\n\n      this._element.classList.remove(CLASS_NAME_COLLAPSE);\n\n      this._element.classList.add(CLASS_NAME_COLLAPSING);\n\n      this._element.style[dimension] = 0;\n\n      if (this._triggerArray.length) {\n        this._triggerArray.forEach(element => {\n          element.classList.remove(CLASS_NAME_COLLAPSED);\n          element.setAttribute('aria-expanded', true);\n        });\n      }\n\n      this.setTransitioning(true);\n\n      const complete = () => {\n        this._element.classList.remove(CLASS_NAME_COLLAPSING);\n\n        this._element.classList.add(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$8);\n\n        this._element.style[dimension] = '';\n        this.setTransitioning(false);\n        EventHandler.trigger(this._element, EVENT_SHOWN$5);\n      };\n\n      const capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1);\n      const scrollSize = `scroll${capitalizedDimension}`;\n\n      this._queueCallback(complete, this._element, true);\n\n      this._element.style[dimension] = `${this._element[scrollSize]}px`;\n    }\n\n    hide() {\n      if (this._isTransitioning || !this._element.classList.contains(CLASS_NAME_SHOW$8)) {\n        return;\n      }\n\n      const startEvent = EventHandler.trigger(this._element, EVENT_HIDE$5);\n\n      if (startEvent.defaultPrevented) {\n        return;\n      }\n\n      const dimension = this._getDimension();\n\n      this._element.style[dimension] = `${this._element.getBoundingClientRect()[dimension]}px`;\n      reflow(this._element);\n\n      this._element.classList.add(CLASS_NAME_COLLAPSING);\n\n      this._element.classList.remove(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$8);\n\n      const triggerArrayLength = this._triggerArray.length;\n\n      if (triggerArrayLength > 0) {\n        for (let i = 0; i < triggerArrayLength; i++) {\n          const trigger = this._triggerArray[i];\n          const elem = getElementFromSelector(trigger);\n\n          if (elem && !elem.classList.contains(CLASS_NAME_SHOW$8)) {\n            trigger.classList.add(CLASS_NAME_COLLAPSED);\n            trigger.setAttribute('aria-expanded', false);\n          }\n        }\n      }\n\n      this.setTransitioning(true);\n\n      const complete = () => {\n        this.setTransitioning(false);\n\n        this._element.classList.remove(CLASS_NAME_COLLAPSING);\n\n        this._element.classList.add(CLASS_NAME_COLLAPSE);\n\n        EventHandler.trigger(this._element, EVENT_HIDDEN$5);\n      };\n\n      this._element.style[dimension] = '';\n\n      this._queueCallback(complete, this._element, true);\n    }\n\n    setTransitioning(isTransitioning) {\n      this._isTransitioning = isTransitioning;\n    } // Private\n\n\n    _getConfig(config) {\n      config = { ...Default$8,\n        ...config\n      };\n      config.toggle = Boolean(config.toggle); // Coerce string values\n\n      typeCheckConfig(NAME$9, config, DefaultType$8);\n      return config;\n    }\n\n    _getDimension() {\n      return this._element.classList.contains(WIDTH) ? WIDTH : HEIGHT;\n    }\n\n    _getParent() {\n      let {\n        parent\n      } = this._config;\n      parent = getElement(parent);\n      const selector = `${SELECTOR_DATA_TOGGLE$4}[data-bs-parent=\"${parent}\"]`;\n      SelectorEngine.find(selector, parent).forEach(element => {\n        const selected = getElementFromSelector(element);\n\n        this._addAriaAndCollapsedClass(selected, [element]);\n      });\n      return parent;\n    }\n\n    _addAriaAndCollapsedClass(element, triggerArray) {\n      if (!element || !triggerArray.length) {\n        return;\n      }\n\n      const isOpen = element.classList.contains(CLASS_NAME_SHOW$8);\n      triggerArray.forEach(elem => {\n        if (isOpen) {\n          elem.classList.remove(CLASS_NAME_COLLAPSED);\n        } else {\n          elem.classList.add(CLASS_NAME_COLLAPSED);\n        }\n\n        elem.setAttribute('aria-expanded', isOpen);\n      });\n    } // Static\n\n\n    static collapseInterface(element, config) {\n      let data = Collapse.getInstance(element);\n      const _config = { ...Default$8,\n        ...Manipulator.getDataAttributes(element),\n        ...(typeof config === 'object' && config ? config : {})\n      };\n\n      if (!data && _config.toggle && typeof config === 'string' && /show|hide/.test(config)) {\n        _config.toggle = false;\n      }\n\n      if (!data) {\n        data = new Collapse(element, _config);\n      }\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config]();\n      }\n    }\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        Collapse.collapseInterface(this, config);\n      });\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(document, EVENT_CLICK_DATA_API$4, SELECTOR_DATA_TOGGLE$4, function (event) {\n    // preventDefault only for <a> elements (which change the URL) not inside the collapsible element\n    if (event.target.tagName === 'A' || event.delegateTarget && event.delegateTarget.tagName === 'A') {\n      event.preventDefault();\n    }\n\n    const triggerData = Manipulator.getDataAttributes(this);\n    const selector = getSelectorFromElement(this);\n    const selectorElements = SelectorEngine.find(selector);\n    selectorElements.forEach(element => {\n      const data = Collapse.getInstance(element);\n      let config;\n\n      if (data) {\n        // update parent attribute\n        if (data._parent === null && typeof triggerData.parent === 'string') {\n          data._config.parent = triggerData.parent;\n          data._parent = data._getParent();\n        }\n\n        config = 'toggle';\n      } else {\n        config = triggerData;\n      }\n\n      Collapse.collapseInterface(element, config);\n    });\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Collapse to jQuery only if jQuery is present\n   */\n\n  defineJQueryPlugin(Collapse);\n\n  var top = 'top';\n  var bottom = 'bottom';\n  var right = 'right';\n  var left = 'left';\n  var auto = 'auto';\n  var basePlacements = [top, bottom, right, left];\n  var start = 'start';\n  var end = 'end';\n  var clippingParents = 'clippingParents';\n  var viewport = 'viewport';\n  var popper = 'popper';\n  var reference = 'reference';\n  var variationPlacements = /*#__PURE__*/basePlacements.reduce(function (acc, placement) {\n    return acc.concat([placement + \"-\" + start, placement + \"-\" + end]);\n  }, []);\n  var placements = /*#__PURE__*/[].concat(basePlacements, [auto]).reduce(function (acc, placement) {\n    return acc.concat([placement, placement + \"-\" + start, placement + \"-\" + end]);\n  }, []); // modifiers that need to read the DOM\n\n  var beforeRead = 'beforeRead';\n  var read = 'read';\n  var afterRead = 'afterRead'; // pure-logic modifiers\n\n  var beforeMain = 'beforeMain';\n  var main = 'main';\n  var afterMain = 'afterMain'; // modifier with the purpose to write to the DOM (or write into a framework state)\n\n  var beforeWrite = 'beforeWrite';\n  var write = 'write';\n  var afterWrite = 'afterWrite';\n  var modifierPhases = [beforeRead, read, afterRead, beforeMain, main, afterMain, beforeWrite, write, afterWrite];\n\n  function getNodeName(element) {\n    return element ? (element.nodeName || '').toLowerCase() : null;\n  }\n\n  function getWindow(node) {\n    if (node == null) {\n      return window;\n    }\n\n    if (node.toString() !== '[object Window]') {\n      var ownerDocument = node.ownerDocument;\n      return ownerDocument ? ownerDocument.defaultView || window : window;\n    }\n\n    return node;\n  }\n\n  function isElement(node) {\n    var OwnElement = getWindow(node).Element;\n    return node instanceof OwnElement || node instanceof Element;\n  }\n\n  function isHTMLElement(node) {\n    var OwnElement = getWindow(node).HTMLElement;\n    return node instanceof OwnElement || node instanceof HTMLElement;\n  }\n\n  function isShadowRoot(node) {\n    // IE 11 has no ShadowRoot\n    if (typeof ShadowRoot === 'undefined') {\n      return false;\n    }\n\n    var OwnElement = getWindow(node).ShadowRoot;\n    return node instanceof OwnElement || node instanceof ShadowRoot;\n  }\n\n  // and applies them to the HTMLElements such as popper and arrow\n\n  function applyStyles(_ref) {\n    var state = _ref.state;\n    Object.keys(state.elements).forEach(function (name) {\n      var style = state.styles[name] || {};\n      var attributes = state.attributes[name] || {};\n      var element = state.elements[name]; // arrow is optional + virtual elements\n\n      if (!isHTMLElement(element) || !getNodeName(element)) {\n        return;\n      } // Flow doesn't support to extend this property, but it's the most\n      // effective way to apply styles to an HTMLElement\n      // $FlowFixMe[cannot-write]\n\n\n      Object.assign(element.style, style);\n      Object.keys(attributes).forEach(function (name) {\n        var value = attributes[name];\n\n        if (value === false) {\n          element.removeAttribute(name);\n        } else {\n          element.setAttribute(name, value === true ? '' : value);\n        }\n      });\n    });\n  }\n\n  function effect$2(_ref2) {\n    var state = _ref2.state;\n    var initialStyles = {\n      popper: {\n        position: state.options.strategy,\n        left: '0',\n        top: '0',\n        margin: '0'\n      },\n      arrow: {\n        position: 'absolute'\n      },\n      reference: {}\n    };\n    Object.assign(state.elements.popper.style, initialStyles.popper);\n    state.styles = initialStyles;\n\n    if (state.elements.arrow) {\n      Object.assign(state.elements.arrow.style, initialStyles.arrow);\n    }\n\n    return function () {\n      Object.keys(state.elements).forEach(function (name) {\n        var element = state.elements[name];\n        var attributes = state.attributes[name] || {};\n        var styleProperties = Object.keys(state.styles.hasOwnProperty(name) ? state.styles[name] : initialStyles[name]); // Set all values to an empty string to unset them\n\n        var style = styleProperties.reduce(function (style, property) {\n          style[property] = '';\n          return style;\n        }, {}); // arrow is optional + virtual elements\n\n        if (!isHTMLElement(element) || !getNodeName(element)) {\n          return;\n        }\n\n        Object.assign(element.style, style);\n        Object.keys(attributes).forEach(function (attribute) {\n          element.removeAttribute(attribute);\n        });\n      });\n    };\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  var applyStyles$1 = {\n    name: 'applyStyles',\n    enabled: true,\n    phase: 'write',\n    fn: applyStyles,\n    effect: effect$2,\n    requires: ['computeStyles']\n  };\n\n  function getBasePlacement(placement) {\n    return placement.split('-')[0];\n  }\n\n  function getBoundingClientRect(element) {\n    var rect = element.getBoundingClientRect();\n    return {\n      width: rect.width,\n      height: rect.height,\n      top: rect.top,\n      right: rect.right,\n      bottom: rect.bottom,\n      left: rect.left,\n      x: rect.left,\n      y: rect.top\n    };\n  }\n\n  // means it doesn't take into account transforms.\n\n  function getLayoutRect(element) {\n    var clientRect = getBoundingClientRect(element); // Use the clientRect sizes if it's not been transformed.\n    // Fixes https://github.com/popperjs/popper-core/issues/1223\n\n    var width = element.offsetWidth;\n    var height = element.offsetHeight;\n\n    if (Math.abs(clientRect.width - width) <= 1) {\n      width = clientRect.width;\n    }\n\n    if (Math.abs(clientRect.height - height) <= 1) {\n      height = clientRect.height;\n    }\n\n    return {\n      x: element.offsetLeft,\n      y: element.offsetTop,\n      width: width,\n      height: height\n    };\n  }\n\n  function contains(parent, child) {\n    var rootNode = child.getRootNode && child.getRootNode(); // First, attempt with faster native method\n\n    if (parent.contains(child)) {\n      return true;\n    } // then fallback to custom implementation with Shadow DOM support\n    else if (rootNode && isShadowRoot(rootNode)) {\n        var next = child;\n\n        do {\n          if (next && parent.isSameNode(next)) {\n            return true;\n          } // $FlowFixMe[prop-missing]: need a better way to handle this...\n\n\n          next = next.parentNode || next.host;\n        } while (next);\n      } // Give up, the result is false\n\n\n    return false;\n  }\n\n  function getComputedStyle$1(element) {\n    return getWindow(element).getComputedStyle(element);\n  }\n\n  function isTableElement(element) {\n    return ['table', 'td', 'th'].indexOf(getNodeName(element)) >= 0;\n  }\n\n  function getDocumentElement(element) {\n    // $FlowFixMe[incompatible-return]: assume body is always available\n    return ((isElement(element) ? element.ownerDocument : // $FlowFixMe[prop-missing]\n    element.document) || window.document).documentElement;\n  }\n\n  function getParentNode(element) {\n    if (getNodeName(element) === 'html') {\n      return element;\n    }\n\n    return (// this is a quicker (but less type safe) way to save quite some bytes from the bundle\n      // $FlowFixMe[incompatible-return]\n      // $FlowFixMe[prop-missing]\n      element.assignedSlot || // step into the shadow DOM of the parent of a slotted node\n      element.parentNode || ( // DOM Element detected\n      isShadowRoot(element) ? element.host : null) || // ShadowRoot detected\n      // $FlowFixMe[incompatible-call]: HTMLElement is a Node\n      getDocumentElement(element) // fallback\n\n    );\n  }\n\n  function getTrueOffsetParent(element) {\n    if (!isHTMLElement(element) || // https://github.com/popperjs/popper-core/issues/837\n    getComputedStyle$1(element).position === 'fixed') {\n      return null;\n    }\n\n    return element.offsetParent;\n  } // `.offsetParent` reports `null` for fixed elements, while absolute elements\n  // return the containing block\n\n\n  function getContainingBlock(element) {\n    var isFirefox = navigator.userAgent.toLowerCase().indexOf('firefox') !== -1;\n    var isIE = navigator.userAgent.indexOf('Trident') !== -1;\n\n    if (isIE && isHTMLElement(element)) {\n      // In IE 9, 10 and 11 fixed elements containing block is always established by the viewport\n      var elementCss = getComputedStyle$1(element);\n\n      if (elementCss.position === 'fixed') {\n        return null;\n      }\n    }\n\n    var currentNode = getParentNode(element);\n\n    while (isHTMLElement(currentNode) && ['html', 'body'].indexOf(getNodeName(currentNode)) < 0) {\n      var css = getComputedStyle$1(currentNode); // This is non-exhaustive but covers the most common CSS properties that\n      // create a containing block.\n      // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n\n      if (css.transform !== 'none' || css.perspective !== 'none' || css.contain === 'paint' || ['transform', 'perspective'].indexOf(css.willChange) !== -1 || isFirefox && css.willChange === 'filter' || isFirefox && css.filter && css.filter !== 'none') {\n        return currentNode;\n      } else {\n        currentNode = currentNode.parentNode;\n      }\n    }\n\n    return null;\n  } // Gets the closest ancestor positioned element. Handles some edge cases,\n  // such as table ancestors and cross browser bugs.\n\n\n  function getOffsetParent(element) {\n    var window = getWindow(element);\n    var offsetParent = getTrueOffsetParent(element);\n\n    while (offsetParent && isTableElement(offsetParent) && getComputedStyle$1(offsetParent).position === 'static') {\n      offsetParent = getTrueOffsetParent(offsetParent);\n    }\n\n    if (offsetParent && (getNodeName(offsetParent) === 'html' || getNodeName(offsetParent) === 'body' && getComputedStyle$1(offsetParent).position === 'static')) {\n      return window;\n    }\n\n    return offsetParent || getContainingBlock(element) || window;\n  }\n\n  function getMainAxisFromPlacement(placement) {\n    return ['top', 'bottom'].indexOf(placement) >= 0 ? 'x' : 'y';\n  }\n\n  var max = Math.max;\n  var min = Math.min;\n  var round = Math.round;\n\n  function within(min$1, value, max$1) {\n    return max(min$1, min(value, max$1));\n  }\n\n  function getFreshSideObject() {\n    return {\n      top: 0,\n      right: 0,\n      bottom: 0,\n      left: 0\n    };\n  }\n\n  function mergePaddingObject(paddingObject) {\n    return Object.assign({}, getFreshSideObject(), paddingObject);\n  }\n\n  function expandToHashMap(value, keys) {\n    return keys.reduce(function (hashMap, key) {\n      hashMap[key] = value;\n      return hashMap;\n    }, {});\n  }\n\n  var toPaddingObject = function toPaddingObject(padding, state) {\n    padding = typeof padding === 'function' ? padding(Object.assign({}, state.rects, {\n      placement: state.placement\n    })) : padding;\n    return mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));\n  };\n\n  function arrow(_ref) {\n    var _state$modifiersData$;\n\n    var state = _ref.state,\n        name = _ref.name,\n        options = _ref.options;\n    var arrowElement = state.elements.arrow;\n    var popperOffsets = state.modifiersData.popperOffsets;\n    var basePlacement = getBasePlacement(state.placement);\n    var axis = getMainAxisFromPlacement(basePlacement);\n    var isVertical = [left, right].indexOf(basePlacement) >= 0;\n    var len = isVertical ? 'height' : 'width';\n\n    if (!arrowElement || !popperOffsets) {\n      return;\n    }\n\n    var paddingObject = toPaddingObject(options.padding, state);\n    var arrowRect = getLayoutRect(arrowElement);\n    var minProp = axis === 'y' ? top : left;\n    var maxProp = axis === 'y' ? bottom : right;\n    var endDiff = state.rects.reference[len] + state.rects.reference[axis] - popperOffsets[axis] - state.rects.popper[len];\n    var startDiff = popperOffsets[axis] - state.rects.reference[axis];\n    var arrowOffsetParent = getOffsetParent(arrowElement);\n    var clientSize = arrowOffsetParent ? axis === 'y' ? arrowOffsetParent.clientHeight || 0 : arrowOffsetParent.clientWidth || 0 : 0;\n    var centerToReference = endDiff / 2 - startDiff / 2; // Make sure the arrow doesn't overflow the popper if the center point is\n    // outside of the popper bounds\n\n    var min = paddingObject[minProp];\n    var max = clientSize - arrowRect[len] - paddingObject[maxProp];\n    var center = clientSize / 2 - arrowRect[len] / 2 + centerToReference;\n    var offset = within(min, center, max); // Prevents breaking syntax highlighting...\n\n    var axisProp = axis;\n    state.modifiersData[name] = (_state$modifiersData$ = {}, _state$modifiersData$[axisProp] = offset, _state$modifiersData$.centerOffset = offset - center, _state$modifiersData$);\n  }\n\n  function effect$1(_ref2) {\n    var state = _ref2.state,\n        options = _ref2.options;\n    var _options$element = options.element,\n        arrowElement = _options$element === void 0 ? '[data-popper-arrow]' : _options$element;\n\n    if (arrowElement == null) {\n      return;\n    } // CSS selector\n\n\n    if (typeof arrowElement === 'string') {\n      arrowElement = state.elements.popper.querySelector(arrowElement);\n\n      if (!arrowElement) {\n        return;\n      }\n    }\n\n    if (!contains(state.elements.popper, arrowElement)) {\n\n      return;\n    }\n\n    state.elements.arrow = arrowElement;\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  var arrow$1 = {\n    name: 'arrow',\n    enabled: true,\n    phase: 'main',\n    fn: arrow,\n    effect: effect$1,\n    requires: ['popperOffsets'],\n    requiresIfExists: ['preventOverflow']\n  };\n\n  var unsetSides = {\n    top: 'auto',\n    right: 'auto',\n    bottom: 'auto',\n    left: 'auto'\n  }; // Round the offsets to the nearest suitable subpixel based on the DPR.\n  // Zooming can change the DPR, but it seems to report a value that will\n  // cleanly divide the values into the appropriate subpixels.\n\n  function roundOffsetsByDPR(_ref) {\n    var x = _ref.x,\n        y = _ref.y;\n    var win = window;\n    var dpr = win.devicePixelRatio || 1;\n    return {\n      x: round(round(x * dpr) / dpr) || 0,\n      y: round(round(y * dpr) / dpr) || 0\n    };\n  }\n\n  function mapToStyles(_ref2) {\n    var _Object$assign2;\n\n    var popper = _ref2.popper,\n        popperRect = _ref2.popperRect,\n        placement = _ref2.placement,\n        offsets = _ref2.offsets,\n        position = _ref2.position,\n        gpuAcceleration = _ref2.gpuAcceleration,\n        adaptive = _ref2.adaptive,\n        roundOffsets = _ref2.roundOffsets;\n\n    var _ref3 = roundOffsets === true ? roundOffsetsByDPR(offsets) : typeof roundOffsets === 'function' ? roundOffsets(offsets) : offsets,\n        _ref3$x = _ref3.x,\n        x = _ref3$x === void 0 ? 0 : _ref3$x,\n        _ref3$y = _ref3.y,\n        y = _ref3$y === void 0 ? 0 : _ref3$y;\n\n    var hasX = offsets.hasOwnProperty('x');\n    var hasY = offsets.hasOwnProperty('y');\n    var sideX = left;\n    var sideY = top;\n    var win = window;\n\n    if (adaptive) {\n      var offsetParent = getOffsetParent(popper);\n      var heightProp = 'clientHeight';\n      var widthProp = 'clientWidth';\n\n      if (offsetParent === getWindow(popper)) {\n        offsetParent = getDocumentElement(popper);\n\n        if (getComputedStyle$1(offsetParent).position !== 'static') {\n          heightProp = 'scrollHeight';\n          widthProp = 'scrollWidth';\n        }\n      } // $FlowFixMe[incompatible-cast]: force type refinement, we compare offsetParent with window above, but Flow doesn't detect it\n\n\n      offsetParent = offsetParent;\n\n      if (placement === top) {\n        sideY = bottom; // $FlowFixMe[prop-missing]\n\n        y -= offsetParent[heightProp] - popperRect.height;\n        y *= gpuAcceleration ? 1 : -1;\n      }\n\n      if (placement === left) {\n        sideX = right; // $FlowFixMe[prop-missing]\n\n        x -= offsetParent[widthProp] - popperRect.width;\n        x *= gpuAcceleration ? 1 : -1;\n      }\n    }\n\n    var commonStyles = Object.assign({\n      position: position\n    }, adaptive && unsetSides);\n\n    if (gpuAcceleration) {\n      var _Object$assign;\n\n      return Object.assign({}, commonStyles, (_Object$assign = {}, _Object$assign[sideY] = hasY ? '0' : '', _Object$assign[sideX] = hasX ? '0' : '', _Object$assign.transform = (win.devicePixelRatio || 1) < 2 ? \"translate(\" + x + \"px, \" + y + \"px)\" : \"translate3d(\" + x + \"px, \" + y + \"px, 0)\", _Object$assign));\n    }\n\n    return Object.assign({}, commonStyles, (_Object$assign2 = {}, _Object$assign2[sideY] = hasY ? y + \"px\" : '', _Object$assign2[sideX] = hasX ? x + \"px\" : '', _Object$assign2.transform = '', _Object$assign2));\n  }\n\n  function computeStyles(_ref4) {\n    var state = _ref4.state,\n        options = _ref4.options;\n    var _options$gpuAccelerat = options.gpuAcceleration,\n        gpuAcceleration = _options$gpuAccelerat === void 0 ? true : _options$gpuAccelerat,\n        _options$adaptive = options.adaptive,\n        adaptive = _options$adaptive === void 0 ? true : _options$adaptive,\n        _options$roundOffsets = options.roundOffsets,\n        roundOffsets = _options$roundOffsets === void 0 ? true : _options$roundOffsets;\n\n    var commonStyles = {\n      placement: getBasePlacement(state.placement),\n      popper: state.elements.popper,\n      popperRect: state.rects.popper,\n      gpuAcceleration: gpuAcceleration\n    };\n\n    if (state.modifiersData.popperOffsets != null) {\n      state.styles.popper = Object.assign({}, state.styles.popper, mapToStyles(Object.assign({}, commonStyles, {\n        offsets: state.modifiersData.popperOffsets,\n        position: state.options.strategy,\n        adaptive: adaptive,\n        roundOffsets: roundOffsets\n      })));\n    }\n\n    if (state.modifiersData.arrow != null) {\n      state.styles.arrow = Object.assign({}, state.styles.arrow, mapToStyles(Object.assign({}, commonStyles, {\n        offsets: state.modifiersData.arrow,\n        position: 'absolute',\n        adaptive: false,\n        roundOffsets: roundOffsets\n      })));\n    }\n\n    state.attributes.popper = Object.assign({}, state.attributes.popper, {\n      'data-popper-placement': state.placement\n    });\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  var computeStyles$1 = {\n    name: 'computeStyles',\n    enabled: true,\n    phase: 'beforeWrite',\n    fn: computeStyles,\n    data: {}\n  };\n\n  var passive = {\n    passive: true\n  };\n\n  function effect(_ref) {\n    var state = _ref.state,\n        instance = _ref.instance,\n        options = _ref.options;\n    var _options$scroll = options.scroll,\n        scroll = _options$scroll === void 0 ? true : _options$scroll,\n        _options$resize = options.resize,\n        resize = _options$resize === void 0 ? true : _options$resize;\n    var window = getWindow(state.elements.popper);\n    var scrollParents = [].concat(state.scrollParents.reference, state.scrollParents.popper);\n\n    if (scroll) {\n      scrollParents.forEach(function (scrollParent) {\n        scrollParent.addEventListener('scroll', instance.update, passive);\n      });\n    }\n\n    if (resize) {\n      window.addEventListener('resize', instance.update, passive);\n    }\n\n    return function () {\n      if (scroll) {\n        scrollParents.forEach(function (scrollParent) {\n          scrollParent.removeEventListener('scroll', instance.update, passive);\n        });\n      }\n\n      if (resize) {\n        window.removeEventListener('resize', instance.update, passive);\n      }\n    };\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  var eventListeners = {\n    name: 'eventListeners',\n    enabled: true,\n    phase: 'write',\n    fn: function fn() {},\n    effect: effect,\n    data: {}\n  };\n\n  var hash$1 = {\n    left: 'right',\n    right: 'left',\n    bottom: 'top',\n    top: 'bottom'\n  };\n  function getOppositePlacement(placement) {\n    return placement.replace(/left|right|bottom|top/g, function (matched) {\n      return hash$1[matched];\n    });\n  }\n\n  var hash = {\n    start: 'end',\n    end: 'start'\n  };\n  function getOppositeVariationPlacement(placement) {\n    return placement.replace(/start|end/g, function (matched) {\n      return hash[matched];\n    });\n  }\n\n  function getWindowScroll(node) {\n    var win = getWindow(node);\n    var scrollLeft = win.pageXOffset;\n    var scrollTop = win.pageYOffset;\n    return {\n      scrollLeft: scrollLeft,\n      scrollTop: scrollTop\n    };\n  }\n\n  function getWindowScrollBarX(element) {\n    // If <html> has a CSS width greater than the viewport, then this will be\n    // incorrect for RTL.\n    // Popper 1 is broken in this case and never had a bug report so let's assume\n    // it's not an issue. I don't think anyone ever specifies width on <html>\n    // anyway.\n    // Browsers where the left scrollbar doesn't cause an issue report `0` for\n    // this (e.g. Edge 2019, IE11, Safari)\n    return getBoundingClientRect(getDocumentElement(element)).left + getWindowScroll(element).scrollLeft;\n  }\n\n  function getViewportRect(element) {\n    var win = getWindow(element);\n    var html = getDocumentElement(element);\n    var visualViewport = win.visualViewport;\n    var width = html.clientWidth;\n    var height = html.clientHeight;\n    var x = 0;\n    var y = 0; // NB: This isn't supported on iOS <= 12. If the keyboard is open, the popper\n    // can be obscured underneath it.\n    // Also, `html.clientHeight` adds the bottom bar height in Safari iOS, even\n    // if it isn't open, so if this isn't available, the popper will be detected\n    // to overflow the bottom of the screen too early.\n\n    if (visualViewport) {\n      width = visualViewport.width;\n      height = visualViewport.height; // Uses Layout Viewport (like Chrome; Safari does not currently)\n      // In Chrome, it returns a value very close to 0 (+/-) but contains rounding\n      // errors due to floating point numbers, so we need to check precision.\n      // Safari returns a number <= 0, usually < -1 when pinch-zoomed\n      // Feature detection fails in mobile emulation mode in Chrome.\n      // Math.abs(win.innerWidth / visualViewport.scale - visualViewport.width) <\n      // 0.001\n      // Fallback here: \"Not Safari\" userAgent\n\n      if (!/^((?!chrome|android).)*safari/i.test(navigator.userAgent)) {\n        x = visualViewport.offsetLeft;\n        y = visualViewport.offsetTop;\n      }\n    }\n\n    return {\n      width: width,\n      height: height,\n      x: x + getWindowScrollBarX(element),\n      y: y\n    };\n  }\n\n  // of the `<html>` and `<body>` rect bounds if horizontally scrollable\n\n  function getDocumentRect(element) {\n    var _element$ownerDocumen;\n\n    var html = getDocumentElement(element);\n    var winScroll = getWindowScroll(element);\n    var body = (_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body;\n    var width = max(html.scrollWidth, html.clientWidth, body ? body.scrollWidth : 0, body ? body.clientWidth : 0);\n    var height = max(html.scrollHeight, html.clientHeight, body ? body.scrollHeight : 0, body ? body.clientHeight : 0);\n    var x = -winScroll.scrollLeft + getWindowScrollBarX(element);\n    var y = -winScroll.scrollTop;\n\n    if (getComputedStyle$1(body || html).direction === 'rtl') {\n      x += max(html.clientWidth, body ? body.clientWidth : 0) - width;\n    }\n\n    return {\n      width: width,\n      height: height,\n      x: x,\n      y: y\n    };\n  }\n\n  function isScrollParent(element) {\n    // Firefox wants us to check `-x` and `-y` variations as well\n    var _getComputedStyle = getComputedStyle$1(element),\n        overflow = _getComputedStyle.overflow,\n        overflowX = _getComputedStyle.overflowX,\n        overflowY = _getComputedStyle.overflowY;\n\n    return /auto|scroll|overlay|hidden/.test(overflow + overflowY + overflowX);\n  }\n\n  function getScrollParent(node) {\n    if (['html', 'body', '#document'].indexOf(getNodeName(node)) >= 0) {\n      // $FlowFixMe[incompatible-return]: assume body is always available\n      return node.ownerDocument.body;\n    }\n\n    if (isHTMLElement(node) && isScrollParent(node)) {\n      return node;\n    }\n\n    return getScrollParent(getParentNode(node));\n  }\n\n  /*\n  given a DOM element, return the list of all scroll parents, up the list of ancesors\n  until we get to the top window object. This list is what we attach scroll listeners\n  to, because if any of these parent elements scroll, we'll need to re-calculate the\n  reference element's position.\n  */\n\n  function listScrollParents(element, list) {\n    var _element$ownerDocumen;\n\n    if (list === void 0) {\n      list = [];\n    }\n\n    var scrollParent = getScrollParent(element);\n    var isBody = scrollParent === ((_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body);\n    var win = getWindow(scrollParent);\n    var target = isBody ? [win].concat(win.visualViewport || [], isScrollParent(scrollParent) ? scrollParent : []) : scrollParent;\n    var updatedList = list.concat(target);\n    return isBody ? updatedList : // $FlowFixMe[incompatible-call]: isBody tells us target will be an HTMLElement here\n    updatedList.concat(listScrollParents(getParentNode(target)));\n  }\n\n  function rectToClientRect(rect) {\n    return Object.assign({}, rect, {\n      left: rect.x,\n      top: rect.y,\n      right: rect.x + rect.width,\n      bottom: rect.y + rect.height\n    });\n  }\n\n  function getInnerBoundingClientRect(element) {\n    var rect = getBoundingClientRect(element);\n    rect.top = rect.top + element.clientTop;\n    rect.left = rect.left + element.clientLeft;\n    rect.bottom = rect.top + element.clientHeight;\n    rect.right = rect.left + element.clientWidth;\n    rect.width = element.clientWidth;\n    rect.height = element.clientHeight;\n    rect.x = rect.left;\n    rect.y = rect.top;\n    return rect;\n  }\n\n  function getClientRectFromMixedType(element, clippingParent) {\n    return clippingParent === viewport ? rectToClientRect(getViewportRect(element)) : isHTMLElement(clippingParent) ? getInnerBoundingClientRect(clippingParent) : rectToClientRect(getDocumentRect(getDocumentElement(element)));\n  } // A \"clipping parent\" is an overflowable container with the characteristic of\n  // clipping (or hiding) overflowing elements with a position different from\n  // `initial`\n\n\n  function getClippingParents(element) {\n    var clippingParents = listScrollParents(getParentNode(element));\n    var canEscapeClipping = ['absolute', 'fixed'].indexOf(getComputedStyle$1(element).position) >= 0;\n    var clipperElement = canEscapeClipping && isHTMLElement(element) ? getOffsetParent(element) : element;\n\n    if (!isElement(clipperElement)) {\n      return [];\n    } // $FlowFixMe[incompatible-return]: https://github.com/facebook/flow/issues/1414\n\n\n    return clippingParents.filter(function (clippingParent) {\n      return isElement(clippingParent) && contains(clippingParent, clipperElement) && getNodeName(clippingParent) !== 'body';\n    });\n  } // Gets the maximum area that the element is visible in due to any number of\n  // clipping parents\n\n\n  function getClippingRect(element, boundary, rootBoundary) {\n    var mainClippingParents = boundary === 'clippingParents' ? getClippingParents(element) : [].concat(boundary);\n    var clippingParents = [].concat(mainClippingParents, [rootBoundary]);\n    var firstClippingParent = clippingParents[0];\n    var clippingRect = clippingParents.reduce(function (accRect, clippingParent) {\n      var rect = getClientRectFromMixedType(element, clippingParent);\n      accRect.top = max(rect.top, accRect.top);\n      accRect.right = min(rect.right, accRect.right);\n      accRect.bottom = min(rect.bottom, accRect.bottom);\n      accRect.left = max(rect.left, accRect.left);\n      return accRect;\n    }, getClientRectFromMixedType(element, firstClippingParent));\n    clippingRect.width = clippingRect.right - clippingRect.left;\n    clippingRect.height = clippingRect.bottom - clippingRect.top;\n    clippingRect.x = clippingRect.left;\n    clippingRect.y = clippingRect.top;\n    return clippingRect;\n  }\n\n  function getVariation(placement) {\n    return placement.split('-')[1];\n  }\n\n  function computeOffsets(_ref) {\n    var reference = _ref.reference,\n        element = _ref.element,\n        placement = _ref.placement;\n    var basePlacement = placement ? getBasePlacement(placement) : null;\n    var variation = placement ? getVariation(placement) : null;\n    var commonX = reference.x + reference.width / 2 - element.width / 2;\n    var commonY = reference.y + reference.height / 2 - element.height / 2;\n    var offsets;\n\n    switch (basePlacement) {\n      case top:\n        offsets = {\n          x: commonX,\n          y: reference.y - element.height\n        };\n        break;\n\n      case bottom:\n        offsets = {\n          x: commonX,\n          y: reference.y + reference.height\n        };\n        break;\n\n      case right:\n        offsets = {\n          x: reference.x + reference.width,\n          y: commonY\n        };\n        break;\n\n      case left:\n        offsets = {\n          x: reference.x - element.width,\n          y: commonY\n        };\n        break;\n\n      default:\n        offsets = {\n          x: reference.x,\n          y: reference.y\n        };\n    }\n\n    var mainAxis = basePlacement ? getMainAxisFromPlacement(basePlacement) : null;\n\n    if (mainAxis != null) {\n      var len = mainAxis === 'y' ? 'height' : 'width';\n\n      switch (variation) {\n        case start:\n          offsets[mainAxis] = offsets[mainAxis] - (reference[len] / 2 - element[len] / 2);\n          break;\n\n        case end:\n          offsets[mainAxis] = offsets[mainAxis] + (reference[len] / 2 - element[len] / 2);\n          break;\n      }\n    }\n\n    return offsets;\n  }\n\n  function detectOverflow(state, options) {\n    if (options === void 0) {\n      options = {};\n    }\n\n    var _options = options,\n        _options$placement = _options.placement,\n        placement = _options$placement === void 0 ? state.placement : _options$placement,\n        _options$boundary = _options.boundary,\n        boundary = _options$boundary === void 0 ? clippingParents : _options$boundary,\n        _options$rootBoundary = _options.rootBoundary,\n        rootBoundary = _options$rootBoundary === void 0 ? viewport : _options$rootBoundary,\n        _options$elementConte = _options.elementContext,\n        elementContext = _options$elementConte === void 0 ? popper : _options$elementConte,\n        _options$altBoundary = _options.altBoundary,\n        altBoundary = _options$altBoundary === void 0 ? false : _options$altBoundary,\n        _options$padding = _options.padding,\n        padding = _options$padding === void 0 ? 0 : _options$padding;\n    var paddingObject = mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));\n    var altContext = elementContext === popper ? reference : popper;\n    var referenceElement = state.elements.reference;\n    var popperRect = state.rects.popper;\n    var element = state.elements[altBoundary ? altContext : elementContext];\n    var clippingClientRect = getClippingRect(isElement(element) ? element : element.contextElement || getDocumentElement(state.elements.popper), boundary, rootBoundary);\n    var referenceClientRect = getBoundingClientRect(referenceElement);\n    var popperOffsets = computeOffsets({\n      reference: referenceClientRect,\n      element: popperRect,\n      strategy: 'absolute',\n      placement: placement\n    });\n    var popperClientRect = rectToClientRect(Object.assign({}, popperRect, popperOffsets));\n    var elementClientRect = elementContext === popper ? popperClientRect : referenceClientRect; // positive = overflowing the clipping rect\n    // 0 or negative = within the clipping rect\n\n    var overflowOffsets = {\n      top: clippingClientRect.top - elementClientRect.top + paddingObject.top,\n      bottom: elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom,\n      left: clippingClientRect.left - elementClientRect.left + paddingObject.left,\n      right: elementClientRect.right - clippingClientRect.right + paddingObject.right\n    };\n    var offsetData = state.modifiersData.offset; // Offsets can be applied only to the popper element\n\n    if (elementContext === popper && offsetData) {\n      var offset = offsetData[placement];\n      Object.keys(overflowOffsets).forEach(function (key) {\n        var multiply = [right, bottom].indexOf(key) >= 0 ? 1 : -1;\n        var axis = [top, bottom].indexOf(key) >= 0 ? 'y' : 'x';\n        overflowOffsets[key] += offset[axis] * multiply;\n      });\n    }\n\n    return overflowOffsets;\n  }\n\n  function computeAutoPlacement(state, options) {\n    if (options === void 0) {\n      options = {};\n    }\n\n    var _options = options,\n        placement = _options.placement,\n        boundary = _options.boundary,\n        rootBoundary = _options.rootBoundary,\n        padding = _options.padding,\n        flipVariations = _options.flipVariations,\n        _options$allowedAutoP = _options.allowedAutoPlacements,\n        allowedAutoPlacements = _options$allowedAutoP === void 0 ? placements : _options$allowedAutoP;\n    var variation = getVariation(placement);\n    var placements$1 = variation ? flipVariations ? variationPlacements : variationPlacements.filter(function (placement) {\n      return getVariation(placement) === variation;\n    }) : basePlacements;\n    var allowedPlacements = placements$1.filter(function (placement) {\n      return allowedAutoPlacements.indexOf(placement) >= 0;\n    });\n\n    if (allowedPlacements.length === 0) {\n      allowedPlacements = placements$1;\n    } // $FlowFixMe[incompatible-type]: Flow seems to have problems with two array unions...\n\n\n    var overflows = allowedPlacements.reduce(function (acc, placement) {\n      acc[placement] = detectOverflow(state, {\n        placement: placement,\n        boundary: boundary,\n        rootBoundary: rootBoundary,\n        padding: padding\n      })[getBasePlacement(placement)];\n      return acc;\n    }, {});\n    return Object.keys(overflows).sort(function (a, b) {\n      return overflows[a] - overflows[b];\n    });\n  }\n\n  function getExpandedFallbackPlacements(placement) {\n    if (getBasePlacement(placement) === auto) {\n      return [];\n    }\n\n    var oppositePlacement = getOppositePlacement(placement);\n    return [getOppositeVariationPlacement(placement), oppositePlacement, getOppositeVariationPlacement(oppositePlacement)];\n  }\n\n  function flip(_ref) {\n    var state = _ref.state,\n        options = _ref.options,\n        name = _ref.name;\n\n    if (state.modifiersData[name]._skip) {\n      return;\n    }\n\n    var _options$mainAxis = options.mainAxis,\n        checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\n        _options$altAxis = options.altAxis,\n        checkAltAxis = _options$altAxis === void 0 ? true : _options$altAxis,\n        specifiedFallbackPlacements = options.fallbackPlacements,\n        padding = options.padding,\n        boundary = options.boundary,\n        rootBoundary = options.rootBoundary,\n        altBoundary = options.altBoundary,\n        _options$flipVariatio = options.flipVariations,\n        flipVariations = _options$flipVariatio === void 0 ? true : _options$flipVariatio,\n        allowedAutoPlacements = options.allowedAutoPlacements;\n    var preferredPlacement = state.options.placement;\n    var basePlacement = getBasePlacement(preferredPlacement);\n    var isBasePlacement = basePlacement === preferredPlacement;\n    var fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipVariations ? [getOppositePlacement(preferredPlacement)] : getExpandedFallbackPlacements(preferredPlacement));\n    var placements = [preferredPlacement].concat(fallbackPlacements).reduce(function (acc, placement) {\n      return acc.concat(getBasePlacement(placement) === auto ? computeAutoPlacement(state, {\n        placement: placement,\n        boundary: boundary,\n        rootBoundary: rootBoundary,\n        padding: padding,\n        flipVariations: flipVariations,\n        allowedAutoPlacements: allowedAutoPlacements\n      }) : placement);\n    }, []);\n    var referenceRect = state.rects.reference;\n    var popperRect = state.rects.popper;\n    var checksMap = new Map();\n    var makeFallbackChecks = true;\n    var firstFittingPlacement = placements[0];\n\n    for (var i = 0; i < placements.length; i++) {\n      var placement = placements[i];\n\n      var _basePlacement = getBasePlacement(placement);\n\n      var isStartVariation = getVariation(placement) === start;\n      var isVertical = [top, bottom].indexOf(_basePlacement) >= 0;\n      var len = isVertical ? 'width' : 'height';\n      var overflow = detectOverflow(state, {\n        placement: placement,\n        boundary: boundary,\n        rootBoundary: rootBoundary,\n        altBoundary: altBoundary,\n        padding: padding\n      });\n      var mainVariationSide = isVertical ? isStartVariation ? right : left : isStartVariation ? bottom : top;\n\n      if (referenceRect[len] > popperRect[len]) {\n        mainVariationSide = getOppositePlacement(mainVariationSide);\n      }\n\n      var altVariationSide = getOppositePlacement(mainVariationSide);\n      var checks = [];\n\n      if (checkMainAxis) {\n        checks.push(overflow[_basePlacement] <= 0);\n      }\n\n      if (checkAltAxis) {\n        checks.push(overflow[mainVariationSide] <= 0, overflow[altVariationSide] <= 0);\n      }\n\n      if (checks.every(function (check) {\n        return check;\n      })) {\n        firstFittingPlacement = placement;\n        makeFallbackChecks = false;\n        break;\n      }\n\n      checksMap.set(placement, checks);\n    }\n\n    if (makeFallbackChecks) {\n      // `2` may be desired in some cases – research later\n      var numberOfChecks = flipVariations ? 3 : 1;\n\n      var _loop = function _loop(_i) {\n        var fittingPlacement = placements.find(function (placement) {\n          var checks = checksMap.get(placement);\n\n          if (checks) {\n            return checks.slice(0, _i).every(function (check) {\n              return check;\n            });\n          }\n        });\n\n        if (fittingPlacement) {\n          firstFittingPlacement = fittingPlacement;\n          return \"break\";\n        }\n      };\n\n      for (var _i = numberOfChecks; _i > 0; _i--) {\n        var _ret = _loop(_i);\n\n        if (_ret === \"break\") break;\n      }\n    }\n\n    if (state.placement !== firstFittingPlacement) {\n      state.modifiersData[name]._skip = true;\n      state.placement = firstFittingPlacement;\n      state.reset = true;\n    }\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  var flip$1 = {\n    name: 'flip',\n    enabled: true,\n    phase: 'main',\n    fn: flip,\n    requiresIfExists: ['offset'],\n    data: {\n      _skip: false\n    }\n  };\n\n  function getSideOffsets(overflow, rect, preventedOffsets) {\n    if (preventedOffsets === void 0) {\n      preventedOffsets = {\n        x: 0,\n        y: 0\n      };\n    }\n\n    return {\n      top: overflow.top - rect.height - preventedOffsets.y,\n      right: overflow.right - rect.width + preventedOffsets.x,\n      bottom: overflow.bottom - rect.height + preventedOffsets.y,\n      left: overflow.left - rect.width - preventedOffsets.x\n    };\n  }\n\n  function isAnySideFullyClipped(overflow) {\n    return [top, right, bottom, left].some(function (side) {\n      return overflow[side] >= 0;\n    });\n  }\n\n  function hide(_ref) {\n    var state = _ref.state,\n        name = _ref.name;\n    var referenceRect = state.rects.reference;\n    var popperRect = state.rects.popper;\n    var preventedOffsets = state.modifiersData.preventOverflow;\n    var referenceOverflow = detectOverflow(state, {\n      elementContext: 'reference'\n    });\n    var popperAltOverflow = detectOverflow(state, {\n      altBoundary: true\n    });\n    var referenceClippingOffsets = getSideOffsets(referenceOverflow, referenceRect);\n    var popperEscapeOffsets = getSideOffsets(popperAltOverflow, popperRect, preventedOffsets);\n    var isReferenceHidden = isAnySideFullyClipped(referenceClippingOffsets);\n    var hasPopperEscaped = isAnySideFullyClipped(popperEscapeOffsets);\n    state.modifiersData[name] = {\n      referenceClippingOffsets: referenceClippingOffsets,\n      popperEscapeOffsets: popperEscapeOffsets,\n      isReferenceHidden: isReferenceHidden,\n      hasPopperEscaped: hasPopperEscaped\n    };\n    state.attributes.popper = Object.assign({}, state.attributes.popper, {\n      'data-popper-reference-hidden': isReferenceHidden,\n      'data-popper-escaped': hasPopperEscaped\n    });\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  var hide$1 = {\n    name: 'hide',\n    enabled: true,\n    phase: 'main',\n    requiresIfExists: ['preventOverflow'],\n    fn: hide\n  };\n\n  function distanceAndSkiddingToXY(placement, rects, offset) {\n    var basePlacement = getBasePlacement(placement);\n    var invertDistance = [left, top].indexOf(basePlacement) >= 0 ? -1 : 1;\n\n    var _ref = typeof offset === 'function' ? offset(Object.assign({}, rects, {\n      placement: placement\n    })) : offset,\n        skidding = _ref[0],\n        distance = _ref[1];\n\n    skidding = skidding || 0;\n    distance = (distance || 0) * invertDistance;\n    return [left, right].indexOf(basePlacement) >= 0 ? {\n      x: distance,\n      y: skidding\n    } : {\n      x: skidding,\n      y: distance\n    };\n  }\n\n  function offset(_ref2) {\n    var state = _ref2.state,\n        options = _ref2.options,\n        name = _ref2.name;\n    var _options$offset = options.offset,\n        offset = _options$offset === void 0 ? [0, 0] : _options$offset;\n    var data = placements.reduce(function (acc, placement) {\n      acc[placement] = distanceAndSkiddingToXY(placement, state.rects, offset);\n      return acc;\n    }, {});\n    var _data$state$placement = data[state.placement],\n        x = _data$state$placement.x,\n        y = _data$state$placement.y;\n\n    if (state.modifiersData.popperOffsets != null) {\n      state.modifiersData.popperOffsets.x += x;\n      state.modifiersData.popperOffsets.y += y;\n    }\n\n    state.modifiersData[name] = data;\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  var offset$1 = {\n    name: 'offset',\n    enabled: true,\n    phase: 'main',\n    requires: ['popperOffsets'],\n    fn: offset\n  };\n\n  function popperOffsets(_ref) {\n    var state = _ref.state,\n        name = _ref.name;\n    // Offsets are the actual position the popper needs to have to be\n    // properly positioned near its reference element\n    // This is the most basic placement, and will be adjusted by\n    // the modifiers in the next step\n    state.modifiersData[name] = computeOffsets({\n      reference: state.rects.reference,\n      element: state.rects.popper,\n      strategy: 'absolute',\n      placement: state.placement\n    });\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  var popperOffsets$1 = {\n    name: 'popperOffsets',\n    enabled: true,\n    phase: 'read',\n    fn: popperOffsets,\n    data: {}\n  };\n\n  function getAltAxis(axis) {\n    return axis === 'x' ? 'y' : 'x';\n  }\n\n  function preventOverflow(_ref) {\n    var state = _ref.state,\n        options = _ref.options,\n        name = _ref.name;\n    var _options$mainAxis = options.mainAxis,\n        checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\n        _options$altAxis = options.altAxis,\n        checkAltAxis = _options$altAxis === void 0 ? false : _options$altAxis,\n        boundary = options.boundary,\n        rootBoundary = options.rootBoundary,\n        altBoundary = options.altBoundary,\n        padding = options.padding,\n        _options$tether = options.tether,\n        tether = _options$tether === void 0 ? true : _options$tether,\n        _options$tetherOffset = options.tetherOffset,\n        tetherOffset = _options$tetherOffset === void 0 ? 0 : _options$tetherOffset;\n    var overflow = detectOverflow(state, {\n      boundary: boundary,\n      rootBoundary: rootBoundary,\n      padding: padding,\n      altBoundary: altBoundary\n    });\n    var basePlacement = getBasePlacement(state.placement);\n    var variation = getVariation(state.placement);\n    var isBasePlacement = !variation;\n    var mainAxis = getMainAxisFromPlacement(basePlacement);\n    var altAxis = getAltAxis(mainAxis);\n    var popperOffsets = state.modifiersData.popperOffsets;\n    var referenceRect = state.rects.reference;\n    var popperRect = state.rects.popper;\n    var tetherOffsetValue = typeof tetherOffset === 'function' ? tetherOffset(Object.assign({}, state.rects, {\n      placement: state.placement\n    })) : tetherOffset;\n    var data = {\n      x: 0,\n      y: 0\n    };\n\n    if (!popperOffsets) {\n      return;\n    }\n\n    if (checkMainAxis || checkAltAxis) {\n      var mainSide = mainAxis === 'y' ? top : left;\n      var altSide = mainAxis === 'y' ? bottom : right;\n      var len = mainAxis === 'y' ? 'height' : 'width';\n      var offset = popperOffsets[mainAxis];\n      var min$1 = popperOffsets[mainAxis] + overflow[mainSide];\n      var max$1 = popperOffsets[mainAxis] - overflow[altSide];\n      var additive = tether ? -popperRect[len] / 2 : 0;\n      var minLen = variation === start ? referenceRect[len] : popperRect[len];\n      var maxLen = variation === start ? -popperRect[len] : -referenceRect[len]; // We need to include the arrow in the calculation so the arrow doesn't go\n      // outside the reference bounds\n\n      var arrowElement = state.elements.arrow;\n      var arrowRect = tether && arrowElement ? getLayoutRect(arrowElement) : {\n        width: 0,\n        height: 0\n      };\n      var arrowPaddingObject = state.modifiersData['arrow#persistent'] ? state.modifiersData['arrow#persistent'].padding : getFreshSideObject();\n      var arrowPaddingMin = arrowPaddingObject[mainSide];\n      var arrowPaddingMax = arrowPaddingObject[altSide]; // If the reference length is smaller than the arrow length, we don't want\n      // to include its full size in the calculation. If the reference is small\n      // and near the edge of a boundary, the popper can overflow even if the\n      // reference is not overflowing as well (e.g. virtual elements with no\n      // width or height)\n\n      var arrowLen = within(0, referenceRect[len], arrowRect[len]);\n      var minOffset = isBasePlacement ? referenceRect[len] / 2 - additive - arrowLen - arrowPaddingMin - tetherOffsetValue : minLen - arrowLen - arrowPaddingMin - tetherOffsetValue;\n      var maxOffset = isBasePlacement ? -referenceRect[len] / 2 + additive + arrowLen + arrowPaddingMax + tetherOffsetValue : maxLen + arrowLen + arrowPaddingMax + tetherOffsetValue;\n      var arrowOffsetParent = state.elements.arrow && getOffsetParent(state.elements.arrow);\n      var clientOffset = arrowOffsetParent ? mainAxis === 'y' ? arrowOffsetParent.clientTop || 0 : arrowOffsetParent.clientLeft || 0 : 0;\n      var offsetModifierValue = state.modifiersData.offset ? state.modifiersData.offset[state.placement][mainAxis] : 0;\n      var tetherMin = popperOffsets[mainAxis] + minOffset - offsetModifierValue - clientOffset;\n      var tetherMax = popperOffsets[mainAxis] + maxOffset - offsetModifierValue;\n\n      if (checkMainAxis) {\n        var preventedOffset = within(tether ? min(min$1, tetherMin) : min$1, offset, tether ? max(max$1, tetherMax) : max$1);\n        popperOffsets[mainAxis] = preventedOffset;\n        data[mainAxis] = preventedOffset - offset;\n      }\n\n      if (checkAltAxis) {\n        var _mainSide = mainAxis === 'x' ? top : left;\n\n        var _altSide = mainAxis === 'x' ? bottom : right;\n\n        var _offset = popperOffsets[altAxis];\n\n        var _min = _offset + overflow[_mainSide];\n\n        var _max = _offset - overflow[_altSide];\n\n        var _preventedOffset = within(tether ? min(_min, tetherMin) : _min, _offset, tether ? max(_max, tetherMax) : _max);\n\n        popperOffsets[altAxis] = _preventedOffset;\n        data[altAxis] = _preventedOffset - _offset;\n      }\n    }\n\n    state.modifiersData[name] = data;\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  var preventOverflow$1 = {\n    name: 'preventOverflow',\n    enabled: true,\n    phase: 'main',\n    fn: preventOverflow,\n    requiresIfExists: ['offset']\n  };\n\n  function getHTMLElementScroll(element) {\n    return {\n      scrollLeft: element.scrollLeft,\n      scrollTop: element.scrollTop\n    };\n  }\n\n  function getNodeScroll(node) {\n    if (node === getWindow(node) || !isHTMLElement(node)) {\n      return getWindowScroll(node);\n    } else {\n      return getHTMLElementScroll(node);\n    }\n  }\n\n  // Composite means it takes into account transforms as well as layout.\n\n  function getCompositeRect(elementOrVirtualElement, offsetParent, isFixed) {\n    if (isFixed === void 0) {\n      isFixed = false;\n    }\n\n    var documentElement = getDocumentElement(offsetParent);\n    var rect = getBoundingClientRect(elementOrVirtualElement);\n    var isOffsetParentAnElement = isHTMLElement(offsetParent);\n    var scroll = {\n      scrollLeft: 0,\n      scrollTop: 0\n    };\n    var offsets = {\n      x: 0,\n      y: 0\n    };\n\n    if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {\n      if (getNodeName(offsetParent) !== 'body' || // https://github.com/popperjs/popper-core/issues/1078\n      isScrollParent(documentElement)) {\n        scroll = getNodeScroll(offsetParent);\n      }\n\n      if (isHTMLElement(offsetParent)) {\n        offsets = getBoundingClientRect(offsetParent);\n        offsets.x += offsetParent.clientLeft;\n        offsets.y += offsetParent.clientTop;\n      } else if (documentElement) {\n        offsets.x = getWindowScrollBarX(documentElement);\n      }\n    }\n\n    return {\n      x: rect.left + scroll.scrollLeft - offsets.x,\n      y: rect.top + scroll.scrollTop - offsets.y,\n      width: rect.width,\n      height: rect.height\n    };\n  }\n\n  function order(modifiers) {\n    var map = new Map();\n    var visited = new Set();\n    var result = [];\n    modifiers.forEach(function (modifier) {\n      map.set(modifier.name, modifier);\n    }); // On visiting object, check for its dependencies and visit them recursively\n\n    function sort(modifier) {\n      visited.add(modifier.name);\n      var requires = [].concat(modifier.requires || [], modifier.requiresIfExists || []);\n      requires.forEach(function (dep) {\n        if (!visited.has(dep)) {\n          var depModifier = map.get(dep);\n\n          if (depModifier) {\n            sort(depModifier);\n          }\n        }\n      });\n      result.push(modifier);\n    }\n\n    modifiers.forEach(function (modifier) {\n      if (!visited.has(modifier.name)) {\n        // check for visited object\n        sort(modifier);\n      }\n    });\n    return result;\n  }\n\n  function orderModifiers(modifiers) {\n    // order based on dependencies\n    var orderedModifiers = order(modifiers); // order based on phase\n\n    return modifierPhases.reduce(function (acc, phase) {\n      return acc.concat(orderedModifiers.filter(function (modifier) {\n        return modifier.phase === phase;\n      }));\n    }, []);\n  }\n\n  function debounce(fn) {\n    var pending;\n    return function () {\n      if (!pending) {\n        pending = new Promise(function (resolve) {\n          Promise.resolve().then(function () {\n            pending = undefined;\n            resolve(fn());\n          });\n        });\n      }\n\n      return pending;\n    };\n  }\n\n  function mergeByName(modifiers) {\n    var merged = modifiers.reduce(function (merged, current) {\n      var existing = merged[current.name];\n      merged[current.name] = existing ? Object.assign({}, existing, current, {\n        options: Object.assign({}, existing.options, current.options),\n        data: Object.assign({}, existing.data, current.data)\n      }) : current;\n      return merged;\n    }, {}); // IE11 does not support Object.values\n\n    return Object.keys(merged).map(function (key) {\n      return merged[key];\n    });\n  }\n\n  var DEFAULT_OPTIONS = {\n    placement: 'bottom',\n    modifiers: [],\n    strategy: 'absolute'\n  };\n\n  function areValidElements() {\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    return !args.some(function (element) {\n      return !(element && typeof element.getBoundingClientRect === 'function');\n    });\n  }\n\n  function popperGenerator(generatorOptions) {\n    if (generatorOptions === void 0) {\n      generatorOptions = {};\n    }\n\n    var _generatorOptions = generatorOptions,\n        _generatorOptions$def = _generatorOptions.defaultModifiers,\n        defaultModifiers = _generatorOptions$def === void 0 ? [] : _generatorOptions$def,\n        _generatorOptions$def2 = _generatorOptions.defaultOptions,\n        defaultOptions = _generatorOptions$def2 === void 0 ? DEFAULT_OPTIONS : _generatorOptions$def2;\n    return function createPopper(reference, popper, options) {\n      if (options === void 0) {\n        options = defaultOptions;\n      }\n\n      var state = {\n        placement: 'bottom',\n        orderedModifiers: [],\n        options: Object.assign({}, DEFAULT_OPTIONS, defaultOptions),\n        modifiersData: {},\n        elements: {\n          reference: reference,\n          popper: popper\n        },\n        attributes: {},\n        styles: {}\n      };\n      var effectCleanupFns = [];\n      var isDestroyed = false;\n      var instance = {\n        state: state,\n        setOptions: function setOptions(options) {\n          cleanupModifierEffects();\n          state.options = Object.assign({}, defaultOptions, state.options, options);\n          state.scrollParents = {\n            reference: isElement(reference) ? listScrollParents(reference) : reference.contextElement ? listScrollParents(reference.contextElement) : [],\n            popper: listScrollParents(popper)\n          }; // Orders the modifiers based on their dependencies and `phase`\n          // properties\n\n          var orderedModifiers = orderModifiers(mergeByName([].concat(defaultModifiers, state.options.modifiers))); // Strip out disabled modifiers\n\n          state.orderedModifiers = orderedModifiers.filter(function (m) {\n            return m.enabled;\n          }); // Validate the provided modifiers so that the consumer will get warned\n\n          runModifierEffects();\n          return instance.update();\n        },\n        // Sync update – it will always be executed, even if not necessary. This\n        // is useful for low frequency updates where sync behavior simplifies the\n        // logic.\n        // For high frequency updates (e.g. `resize` and `scroll` events), always\n        // prefer the async Popper#update method\n        forceUpdate: function forceUpdate() {\n          if (isDestroyed) {\n            return;\n          }\n\n          var _state$elements = state.elements,\n              reference = _state$elements.reference,\n              popper = _state$elements.popper; // Don't proceed if `reference` or `popper` are not valid elements\n          // anymore\n\n          if (!areValidElements(reference, popper)) {\n\n            return;\n          } // Store the reference and popper rects to be read by modifiers\n\n\n          state.rects = {\n            reference: getCompositeRect(reference, getOffsetParent(popper), state.options.strategy === 'fixed'),\n            popper: getLayoutRect(popper)\n          }; // Modifiers have the ability to reset the current update cycle. The\n          // most common use case for this is the `flip` modifier changing the\n          // placement, which then needs to re-run all the modifiers, because the\n          // logic was previously ran for the previous placement and is therefore\n          // stale/incorrect\n\n          state.reset = false;\n          state.placement = state.options.placement; // On each update cycle, the `modifiersData` property for each modifier\n          // is filled with the initial data specified by the modifier. This means\n          // it doesn't persist and is fresh on each update.\n          // To ensure persistent data, use `${name}#persistent`\n\n          state.orderedModifiers.forEach(function (modifier) {\n            return state.modifiersData[modifier.name] = Object.assign({}, modifier.data);\n          });\n\n          for (var index = 0; index < state.orderedModifiers.length; index++) {\n\n            if (state.reset === true) {\n              state.reset = false;\n              index = -1;\n              continue;\n            }\n\n            var _state$orderedModifie = state.orderedModifiers[index],\n                fn = _state$orderedModifie.fn,\n                _state$orderedModifie2 = _state$orderedModifie.options,\n                _options = _state$orderedModifie2 === void 0 ? {} : _state$orderedModifie2,\n                name = _state$orderedModifie.name;\n\n            if (typeof fn === 'function') {\n              state = fn({\n                state: state,\n                options: _options,\n                name: name,\n                instance: instance\n              }) || state;\n            }\n          }\n        },\n        // Async and optimistically optimized update – it will not be executed if\n        // not necessary (debounced to run at most once-per-tick)\n        update: debounce(function () {\n          return new Promise(function (resolve) {\n            instance.forceUpdate();\n            resolve(state);\n          });\n        }),\n        destroy: function destroy() {\n          cleanupModifierEffects();\n          isDestroyed = true;\n        }\n      };\n\n      if (!areValidElements(reference, popper)) {\n\n        return instance;\n      }\n\n      instance.setOptions(options).then(function (state) {\n        if (!isDestroyed && options.onFirstUpdate) {\n          options.onFirstUpdate(state);\n        }\n      }); // Modifiers have the ability to execute arbitrary code before the first\n      // update cycle runs. They will be executed in the same order as the update\n      // cycle. This is useful when a modifier adds some persistent data that\n      // other modifiers need to use, but the modifier is run after the dependent\n      // one.\n\n      function runModifierEffects() {\n        state.orderedModifiers.forEach(function (_ref3) {\n          var name = _ref3.name,\n              _ref3$options = _ref3.options,\n              options = _ref3$options === void 0 ? {} : _ref3$options,\n              effect = _ref3.effect;\n\n          if (typeof effect === 'function') {\n            var cleanupFn = effect({\n              state: state,\n              name: name,\n              instance: instance,\n              options: options\n            });\n\n            var noopFn = function noopFn() {};\n\n            effectCleanupFns.push(cleanupFn || noopFn);\n          }\n        });\n      }\n\n      function cleanupModifierEffects() {\n        effectCleanupFns.forEach(function (fn) {\n          return fn();\n        });\n        effectCleanupFns = [];\n      }\n\n      return instance;\n    };\n  }\n  var createPopper$2 = /*#__PURE__*/popperGenerator(); // eslint-disable-next-line import/no-unused-modules\n\n  var defaultModifiers$1 = [eventListeners, popperOffsets$1, computeStyles$1, applyStyles$1];\n  var createPopper$1 = /*#__PURE__*/popperGenerator({\n    defaultModifiers: defaultModifiers$1\n  }); // eslint-disable-next-line import/no-unused-modules\n\n  var defaultModifiers = [eventListeners, popperOffsets$1, computeStyles$1, applyStyles$1, offset$1, flip$1, preventOverflow$1, arrow$1, hide$1];\n  var createPopper = /*#__PURE__*/popperGenerator({\n    defaultModifiers: defaultModifiers\n  }); // eslint-disable-next-line import/no-unused-modules\n\n  var Popper = /*#__PURE__*/Object.freeze({\n    __proto__: null,\n    popperGenerator: popperGenerator,\n    detectOverflow: detectOverflow,\n    createPopperBase: createPopper$2,\n    createPopper: createPopper,\n    createPopperLite: createPopper$1,\n    top: top,\n    bottom: bottom,\n    right: right,\n    left: left,\n    auto: auto,\n    basePlacements: basePlacements,\n    start: start,\n    end: end,\n    clippingParents: clippingParents,\n    viewport: viewport,\n    popper: popper,\n    reference: reference,\n    variationPlacements: variationPlacements,\n    placements: placements,\n    beforeRead: beforeRead,\n    read: read,\n    afterRead: afterRead,\n    beforeMain: beforeMain,\n    main: main,\n    afterMain: afterMain,\n    beforeWrite: beforeWrite,\n    write: write,\n    afterWrite: afterWrite,\n    modifierPhases: modifierPhases,\n    applyStyles: applyStyles$1,\n    arrow: arrow$1,\n    computeStyles: computeStyles$1,\n    eventListeners: eventListeners,\n    flip: flip$1,\n    hide: hide$1,\n    offset: offset$1,\n    popperOffsets: popperOffsets$1,\n    preventOverflow: preventOverflow$1\n  });\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): dropdown.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$8 = 'dropdown';\n  const DATA_KEY$7 = 'bs.dropdown';\n  const EVENT_KEY$7 = `.${DATA_KEY$7}`;\n  const DATA_API_KEY$4 = '.data-api';\n  const ESCAPE_KEY$2 = 'Escape';\n  const SPACE_KEY = 'Space';\n  const TAB_KEY = 'Tab';\n  const ARROW_UP_KEY = 'ArrowUp';\n  const ARROW_DOWN_KEY = 'ArrowDown';\n  const RIGHT_MOUSE_BUTTON = 2; // MouseEvent.button value for the secondary button, usually the right button\n\n  const REGEXP_KEYDOWN = new RegExp(`${ARROW_UP_KEY}|${ARROW_DOWN_KEY}|${ESCAPE_KEY$2}`);\n  const EVENT_HIDE$4 = `hide${EVENT_KEY$7}`;\n  const EVENT_HIDDEN$4 = `hidden${EVENT_KEY$7}`;\n  const EVENT_SHOW$4 = `show${EVENT_KEY$7}`;\n  const EVENT_SHOWN$4 = `shown${EVENT_KEY$7}`;\n  const EVENT_CLICK = `click${EVENT_KEY$7}`;\n  const EVENT_CLICK_DATA_API$3 = `click${EVENT_KEY$7}${DATA_API_KEY$4}`;\n  const EVENT_KEYDOWN_DATA_API = `keydown${EVENT_KEY$7}${DATA_API_KEY$4}`;\n  const EVENT_KEYUP_DATA_API = `keyup${EVENT_KEY$7}${DATA_API_KEY$4}`;\n  const CLASS_NAME_SHOW$7 = 'show';\n  const CLASS_NAME_DROPUP = 'dropup';\n  const CLASS_NAME_DROPEND = 'dropend';\n  const CLASS_NAME_DROPSTART = 'dropstart';\n  const CLASS_NAME_NAVBAR = 'navbar';\n  const SELECTOR_DATA_TOGGLE$3 = '[data-bs-toggle=\"dropdown\"]';\n  const SELECTOR_MENU = '.dropdown-menu';\n  const SELECTOR_NAVBAR_NAV = '.navbar-nav';\n  const SELECTOR_VISIBLE_ITEMS = '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)';\n  const PLACEMENT_TOP = isRTL() ? 'top-end' : 'top-start';\n  const PLACEMENT_TOPEND = isRTL() ? 'top-start' : 'top-end';\n  const PLACEMENT_BOTTOM = isRTL() ? 'bottom-end' : 'bottom-start';\n  const PLACEMENT_BOTTOMEND = isRTL() ? 'bottom-start' : 'bottom-end';\n  const PLACEMENT_RIGHT = isRTL() ? 'left-start' : 'right-start';\n  const PLACEMENT_LEFT = isRTL() ? 'right-start' : 'left-start';\n  const Default$7 = {\n    offset: [0, 2],\n    boundary: 'clippingParents',\n    reference: 'toggle',\n    display: 'dynamic',\n    popperConfig: null,\n    autoClose: true\n  };\n  const DefaultType$7 = {\n    offset: '(array|string|function)',\n    boundary: '(string|element)',\n    reference: '(string|element|object)',\n    display: 'string',\n    popperConfig: '(null|object|function)',\n    autoClose: '(boolean|string)'\n  };\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Dropdown extends BaseComponent {\n    constructor(element, config) {\n      super(element);\n      this._popper = null;\n      this._config = this._getConfig(config);\n      this._menu = this._getMenuElement();\n      this._inNavbar = this._detectNavbar();\n\n      this._addEventListeners();\n    } // Getters\n\n\n    static get Default() {\n      return Default$7;\n    }\n\n    static get DefaultType() {\n      return DefaultType$7;\n    }\n\n    static get NAME() {\n      return NAME$8;\n    } // Public\n\n\n    toggle() {\n      if (isDisabled(this._element)) {\n        return;\n      }\n\n      const isActive = this._element.classList.contains(CLASS_NAME_SHOW$7);\n\n      if (isActive) {\n        this.hide();\n        return;\n      }\n\n      this.show();\n    }\n\n    show() {\n      if (isDisabled(this._element) || this._menu.classList.contains(CLASS_NAME_SHOW$7)) {\n        return;\n      }\n\n      const parent = Dropdown.getParentFromElement(this._element);\n      const relatedTarget = {\n        relatedTarget: this._element\n      };\n      const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$4, relatedTarget);\n\n      if (showEvent.defaultPrevented) {\n        return;\n      } // Totally disable Popper for Dropdowns in Navbar\n\n\n      if (this._inNavbar) {\n        Manipulator.setDataAttribute(this._menu, 'popper', 'none');\n      } else {\n        if (typeof Popper === 'undefined') {\n          throw new TypeError('Bootstrap\\'s dropdowns require Popper (https://popper.js.org)');\n        }\n\n        let referenceElement = this._element;\n\n        if (this._config.reference === 'parent') {\n          referenceElement = parent;\n        } else if (isElement$1(this._config.reference)) {\n          referenceElement = getElement(this._config.reference);\n        } else if (typeof this._config.reference === 'object') {\n          referenceElement = this._config.reference;\n        }\n\n        const popperConfig = this._getPopperConfig();\n\n        const isDisplayStatic = popperConfig.modifiers.find(modifier => modifier.name === 'applyStyles' && modifier.enabled === false);\n        this._popper = createPopper(referenceElement, this._menu, popperConfig);\n\n        if (isDisplayStatic) {\n          Manipulator.setDataAttribute(this._menu, 'popper', 'static');\n        }\n      } // If this is a touch-enabled device we add extra\n      // empty mouseover listeners to the body's immediate children;\n      // only needed because of broken event delegation on iOS\n      // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n\n\n      if ('ontouchstart' in document.documentElement && !parent.closest(SELECTOR_NAVBAR_NAV)) {\n        [].concat(...document.body.children).forEach(elem => EventHandler.on(elem, 'mouseover', noop));\n      }\n\n      this._element.focus();\n\n      this._element.setAttribute('aria-expanded', true);\n\n      this._menu.classList.toggle(CLASS_NAME_SHOW$7);\n\n      this._element.classList.toggle(CLASS_NAME_SHOW$7);\n\n      EventHandler.trigger(this._element, EVENT_SHOWN$4, relatedTarget);\n    }\n\n    hide() {\n      if (isDisabled(this._element) || !this._menu.classList.contains(CLASS_NAME_SHOW$7)) {\n        return;\n      }\n\n      const relatedTarget = {\n        relatedTarget: this._element\n      };\n\n      this._completeHide(relatedTarget);\n    }\n\n    dispose() {\n      if (this._popper) {\n        this._popper.destroy();\n      }\n\n      super.dispose();\n    }\n\n    update() {\n      this._inNavbar = this._detectNavbar();\n\n      if (this._popper) {\n        this._popper.update();\n      }\n    } // Private\n\n\n    _addEventListeners() {\n      EventHandler.on(this._element, EVENT_CLICK, event => {\n        event.preventDefault();\n        this.toggle();\n      });\n    }\n\n    _completeHide(relatedTarget) {\n      const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$4, relatedTarget);\n\n      if (hideEvent.defaultPrevented) {\n        return;\n      } // If this is a touch-enabled device we remove the extra\n      // empty mouseover listeners we added for iOS support\n\n\n      if ('ontouchstart' in document.documentElement) {\n        [].concat(...document.body.children).forEach(elem => EventHandler.off(elem, 'mouseover', noop));\n      }\n\n      if (this._popper) {\n        this._popper.destroy();\n      }\n\n      this._menu.classList.remove(CLASS_NAME_SHOW$7);\n\n      this._element.classList.remove(CLASS_NAME_SHOW$7);\n\n      this._element.setAttribute('aria-expanded', 'false');\n\n      Manipulator.removeDataAttribute(this._menu, 'popper');\n      EventHandler.trigger(this._element, EVENT_HIDDEN$4, relatedTarget);\n    }\n\n    _getConfig(config) {\n      config = { ...this.constructor.Default,\n        ...Manipulator.getDataAttributes(this._element),\n        ...config\n      };\n      typeCheckConfig(NAME$8, config, this.constructor.DefaultType);\n\n      if (typeof config.reference === 'object' && !isElement$1(config.reference) && typeof config.reference.getBoundingClientRect !== 'function') {\n        // Popper virtual elements require a getBoundingClientRect method\n        throw new TypeError(`${NAME$8.toUpperCase()}: Option \"reference\" provided type \"object\" without a required \"getBoundingClientRect\" method.`);\n      }\n\n      return config;\n    }\n\n    _getMenuElement() {\n      return SelectorEngine.next(this._element, SELECTOR_MENU)[0];\n    }\n\n    _getPlacement() {\n      const parentDropdown = this._element.parentNode;\n\n      if (parentDropdown.classList.contains(CLASS_NAME_DROPEND)) {\n        return PLACEMENT_RIGHT;\n      }\n\n      if (parentDropdown.classList.contains(CLASS_NAME_DROPSTART)) {\n        return PLACEMENT_LEFT;\n      } // We need to trim the value because custom properties can also include spaces\n\n\n      const isEnd = getComputedStyle(this._menu).getPropertyValue('--bs-position').trim() === 'end';\n\n      if (parentDropdown.classList.contains(CLASS_NAME_DROPUP)) {\n        return isEnd ? PLACEMENT_TOPEND : PLACEMENT_TOP;\n      }\n\n      return isEnd ? PLACEMENT_BOTTOMEND : PLACEMENT_BOTTOM;\n    }\n\n    _detectNavbar() {\n      return this._element.closest(`.${CLASS_NAME_NAVBAR}`) !== null;\n    }\n\n    _getOffset() {\n      const {\n        offset\n      } = this._config;\n\n      if (typeof offset === 'string') {\n        return offset.split(',').map(val => Number.parseInt(val, 10));\n      }\n\n      if (typeof offset === 'function') {\n        return popperData => offset(popperData, this._element);\n      }\n\n      return offset;\n    }\n\n    _getPopperConfig() {\n      const defaultBsPopperConfig = {\n        placement: this._getPlacement(),\n        modifiers: [{\n          name: 'preventOverflow',\n          options: {\n            boundary: this._config.boundary\n          }\n        }, {\n          name: 'offset',\n          options: {\n            offset: this._getOffset()\n          }\n        }]\n      }; // Disable Popper if we have a static display\n\n      if (this._config.display === 'static') {\n        defaultBsPopperConfig.modifiers = [{\n          name: 'applyStyles',\n          enabled: false\n        }];\n      }\n\n      return { ...defaultBsPopperConfig,\n        ...(typeof this._config.popperConfig === 'function' ? this._config.popperConfig(defaultBsPopperConfig) : this._config.popperConfig)\n      };\n    }\n\n    _selectMenuItem({\n      key,\n      target\n    }) {\n      const items = SelectorEngine.find(SELECTOR_VISIBLE_ITEMS, this._menu).filter(isVisible);\n\n      if (!items.length) {\n        return;\n      } // if target isn't included in items (e.g. when expanding the dropdown)\n      // allow cycling to get the last item in case key equals ARROW_UP_KEY\n\n\n      getNextActiveElement(items, target, key === ARROW_DOWN_KEY, !items.includes(target)).focus();\n    } // Static\n\n\n    static dropdownInterface(element, config) {\n      const data = Dropdown.getOrCreateInstance(element, config);\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config]();\n      }\n    }\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        Dropdown.dropdownInterface(this, config);\n      });\n    }\n\n    static clearMenus(event) {\n      if (event && (event.button === RIGHT_MOUSE_BUTTON || event.type === 'keyup' && event.key !== TAB_KEY)) {\n        return;\n      }\n\n      const toggles = SelectorEngine.find(SELECTOR_DATA_TOGGLE$3);\n\n      for (let i = 0, len = toggles.length; i < len; i++) {\n        const context = Dropdown.getInstance(toggles[i]);\n\n        if (!context || context._config.autoClose === false) {\n          continue;\n        }\n\n        if (!context._element.classList.contains(CLASS_NAME_SHOW$7)) {\n          continue;\n        }\n\n        const relatedTarget = {\n          relatedTarget: context._element\n        };\n\n        if (event) {\n          const composedPath = event.composedPath();\n          const isMenuTarget = composedPath.includes(context._menu);\n\n          if (composedPath.includes(context._element) || context._config.autoClose === 'inside' && !isMenuTarget || context._config.autoClose === 'outside' && isMenuTarget) {\n            continue;\n          } // Tab navigation through the dropdown menu or events from contained inputs shouldn't close the menu\n\n\n          if (context._menu.contains(event.target) && (event.type === 'keyup' && event.key === TAB_KEY || /input|select|option|textarea|form/i.test(event.target.tagName))) {\n            continue;\n          }\n\n          if (event.type === 'click') {\n            relatedTarget.clickEvent = event;\n          }\n        }\n\n        context._completeHide(relatedTarget);\n      }\n    }\n\n    static getParentFromElement(element) {\n      return getElementFromSelector(element) || element.parentNode;\n    }\n\n    static dataApiKeydownHandler(event) {\n      // If not input/textarea:\n      //  - And not a key in REGEXP_KEYDOWN => not a dropdown command\n      // If input/textarea:\n      //  - If space key => not a dropdown command\n      //  - If key is other than escape\n      //    - If key is not up or down => not a dropdown command\n      //    - If trigger inside the menu => not a dropdown command\n      if (/input|textarea/i.test(event.target.tagName) ? event.key === SPACE_KEY || event.key !== ESCAPE_KEY$2 && (event.key !== ARROW_DOWN_KEY && event.key !== ARROW_UP_KEY || event.target.closest(SELECTOR_MENU)) : !REGEXP_KEYDOWN.test(event.key)) {\n        return;\n      }\n\n      const isActive = this.classList.contains(CLASS_NAME_SHOW$7);\n\n      if (!isActive && event.key === ESCAPE_KEY$2) {\n        return;\n      }\n\n      event.preventDefault();\n      event.stopPropagation();\n\n      if (isDisabled(this)) {\n        return;\n      }\n\n      const getToggleButton = () => this.matches(SELECTOR_DATA_TOGGLE$3) ? this : SelectorEngine.prev(this, SELECTOR_DATA_TOGGLE$3)[0];\n\n      if (event.key === ESCAPE_KEY$2) {\n        getToggleButton().focus();\n        Dropdown.clearMenus();\n        return;\n      }\n\n      if (event.key === ARROW_UP_KEY || event.key === ARROW_DOWN_KEY) {\n        if (!isActive) {\n          getToggleButton().click();\n        }\n\n        Dropdown.getInstance(getToggleButton())._selectMenuItem(event);\n\n        return;\n      }\n\n      if (!isActive || event.key === SPACE_KEY) {\n        Dropdown.clearMenus();\n      }\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_DATA_TOGGLE$3, Dropdown.dataApiKeydownHandler);\n  EventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown.dataApiKeydownHandler);\n  EventHandler.on(document, EVENT_CLICK_DATA_API$3, Dropdown.clearMenus);\n  EventHandler.on(document, EVENT_KEYUP_DATA_API, Dropdown.clearMenus);\n  EventHandler.on(document, EVENT_CLICK_DATA_API$3, SELECTOR_DATA_TOGGLE$3, function (event) {\n    event.preventDefault();\n    Dropdown.dropdownInterface(this);\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Dropdown to jQuery only if jQuery is present\n   */\n\n  defineJQueryPlugin(Dropdown);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): util/scrollBar.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  const SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top';\n  const SELECTOR_STICKY_CONTENT = '.sticky-top';\n\n  class ScrollBarHelper {\n    constructor() {\n      this._element = document.body;\n    }\n\n    getWidth() {\n      // https://developer.mozilla.org/en-US/docs/Web/API/Window/innerWidth#usage_notes\n      const documentWidth = document.documentElement.clientWidth;\n      return Math.abs(window.innerWidth - documentWidth);\n    }\n\n    hide() {\n      const width = this.getWidth();\n\n      this._disableOverFlow(); // give padding to element to balance the hidden scrollbar width\n\n\n      this._setElementAttributes(this._element, 'paddingRight', calculatedValue => calculatedValue + width); // trick: We adjust positive paddingRight and negative marginRight to sticky-top elements to keep showing fullwidth\n\n\n      this._setElementAttributes(SELECTOR_FIXED_CONTENT, 'paddingRight', calculatedValue => calculatedValue + width);\n\n      this._setElementAttributes(SELECTOR_STICKY_CONTENT, 'marginRight', calculatedValue => calculatedValue - width);\n    }\n\n    _disableOverFlow() {\n      this._saveInitialAttribute(this._element, 'overflow');\n\n      this._element.style.overflow = 'hidden';\n    }\n\n    _setElementAttributes(selector, styleProp, callback) {\n      const scrollbarWidth = this.getWidth();\n\n      const manipulationCallBack = element => {\n        if (element !== this._element && window.innerWidth > element.clientWidth + scrollbarWidth) {\n          return;\n        }\n\n        this._saveInitialAttribute(element, styleProp);\n\n        const calculatedValue = window.getComputedStyle(element)[styleProp];\n        element.style[styleProp] = `${callback(Number.parseFloat(calculatedValue))}px`;\n      };\n\n      this._applyManipulationCallback(selector, manipulationCallBack);\n    }\n\n    reset() {\n      this._resetElementAttributes(this._element, 'overflow');\n\n      this._resetElementAttributes(this._element, 'paddingRight');\n\n      this._resetElementAttributes(SELECTOR_FIXED_CONTENT, 'paddingRight');\n\n      this._resetElementAttributes(SELECTOR_STICKY_CONTENT, 'marginRight');\n    }\n\n    _saveInitialAttribute(element, styleProp) {\n      const actualValue = element.style[styleProp];\n\n      if (actualValue) {\n        Manipulator.setDataAttribute(element, styleProp, actualValue);\n      }\n    }\n\n    _resetElementAttributes(selector, styleProp) {\n      const manipulationCallBack = element => {\n        const value = Manipulator.getDataAttribute(element, styleProp);\n\n        if (typeof value === 'undefined') {\n          element.style.removeProperty(styleProp);\n        } else {\n          Manipulator.removeDataAttribute(element, styleProp);\n          element.style[styleProp] = value;\n        }\n      };\n\n      this._applyManipulationCallback(selector, manipulationCallBack);\n    }\n\n    _applyManipulationCallback(selector, callBack) {\n      if (isElement$1(selector)) {\n        callBack(selector);\n      } else {\n        SelectorEngine.find(selector, this._element).forEach(callBack);\n      }\n    }\n\n    isOverflowing() {\n      return this.getWidth() > 0;\n    }\n\n  }\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): util/backdrop.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  const Default$6 = {\n    isVisible: true,\n    // if false, we use the backdrop helper without adding any element to the dom\n    isAnimated: false,\n    rootElement: 'body',\n    // give the choice to place backdrop under different elements\n    clickCallback: null\n  };\n  const DefaultType$6 = {\n    isVisible: 'boolean',\n    isAnimated: 'boolean',\n    rootElement: '(element|string)',\n    clickCallback: '(function|null)'\n  };\n  const NAME$7 = 'backdrop';\n  const CLASS_NAME_BACKDROP = 'modal-backdrop';\n  const CLASS_NAME_FADE$5 = 'fade';\n  const CLASS_NAME_SHOW$6 = 'show';\n  const EVENT_MOUSEDOWN = `mousedown.bs.${NAME$7}`;\n\n  class Backdrop {\n    constructor(config) {\n      this._config = this._getConfig(config);\n      this._isAppended = false;\n      this._element = null;\n    }\n\n    show(callback) {\n      if (!this._config.isVisible) {\n        execute(callback);\n        return;\n      }\n\n      this._append();\n\n      if (this._config.isAnimated) {\n        reflow(this._getElement());\n      }\n\n      this._getElement().classList.add(CLASS_NAME_SHOW$6);\n\n      this._emulateAnimation(() => {\n        execute(callback);\n      });\n    }\n\n    hide(callback) {\n      if (!this._config.isVisible) {\n        execute(callback);\n        return;\n      }\n\n      this._getElement().classList.remove(CLASS_NAME_SHOW$6);\n\n      this._emulateAnimation(() => {\n        this.dispose();\n        execute(callback);\n      });\n    } // Private\n\n\n    _getElement() {\n      if (!this._element) {\n        const backdrop = document.createElement('div');\n        backdrop.className = CLASS_NAME_BACKDROP;\n\n        if (this._config.isAnimated) {\n          backdrop.classList.add(CLASS_NAME_FADE$5);\n        }\n\n        this._element = backdrop;\n      }\n\n      return this._element;\n    }\n\n    _getConfig(config) {\n      config = { ...Default$6,\n        ...(typeof config === 'object' ? config : {})\n      }; // use getElement() with the default \"body\" to get a fresh Element on each instantiation\n\n      config.rootElement = getElement(config.rootElement);\n      typeCheckConfig(NAME$7, config, DefaultType$6);\n      return config;\n    }\n\n    _append() {\n      if (this._isAppended) {\n        return;\n      }\n\n      this._config.rootElement.appendChild(this._getElement());\n\n      EventHandler.on(this._getElement(), EVENT_MOUSEDOWN, () => {\n        execute(this._config.clickCallback);\n      });\n      this._isAppended = true;\n    }\n\n    dispose() {\n      if (!this._isAppended) {\n        return;\n      }\n\n      EventHandler.off(this._element, EVENT_MOUSEDOWN);\n\n      this._element.remove();\n\n      this._isAppended = false;\n    }\n\n    _emulateAnimation(callback) {\n      executeAfterTransition(callback, this._getElement(), this._config.isAnimated);\n    }\n\n  }\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): modal.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$6 = 'modal';\n  const DATA_KEY$6 = 'bs.modal';\n  const EVENT_KEY$6 = `.${DATA_KEY$6}`;\n  const DATA_API_KEY$3 = '.data-api';\n  const ESCAPE_KEY$1 = 'Escape';\n  const Default$5 = {\n    backdrop: true,\n    keyboard: true,\n    focus: true\n  };\n  const DefaultType$5 = {\n    backdrop: '(boolean|string)',\n    keyboard: 'boolean',\n    focus: 'boolean'\n  };\n  const EVENT_HIDE$3 = `hide${EVENT_KEY$6}`;\n  const EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY$6}`;\n  const EVENT_HIDDEN$3 = `hidden${EVENT_KEY$6}`;\n  const EVENT_SHOW$3 = `show${EVENT_KEY$6}`;\n  const EVENT_SHOWN$3 = `shown${EVENT_KEY$6}`;\n  const EVENT_FOCUSIN$2 = `focusin${EVENT_KEY$6}`;\n  const EVENT_RESIZE = `resize${EVENT_KEY$6}`;\n  const EVENT_CLICK_DISMISS$2 = `click.dismiss${EVENT_KEY$6}`;\n  const EVENT_KEYDOWN_DISMISS$1 = `keydown.dismiss${EVENT_KEY$6}`;\n  const EVENT_MOUSEUP_DISMISS = `mouseup.dismiss${EVENT_KEY$6}`;\n  const EVENT_MOUSEDOWN_DISMISS = `mousedown.dismiss${EVENT_KEY$6}`;\n  const EVENT_CLICK_DATA_API$2 = `click${EVENT_KEY$6}${DATA_API_KEY$3}`;\n  const CLASS_NAME_OPEN = 'modal-open';\n  const CLASS_NAME_FADE$4 = 'fade';\n  const CLASS_NAME_SHOW$5 = 'show';\n  const CLASS_NAME_STATIC = 'modal-static';\n  const SELECTOR_DIALOG = '.modal-dialog';\n  const SELECTOR_MODAL_BODY = '.modal-body';\n  const SELECTOR_DATA_TOGGLE$2 = '[data-bs-toggle=\"modal\"]';\n  const SELECTOR_DATA_DISMISS$2 = '[data-bs-dismiss=\"modal\"]';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Modal extends BaseComponent {\n    constructor(element, config) {\n      super(element);\n      this._config = this._getConfig(config);\n      this._dialog = SelectorEngine.findOne(SELECTOR_DIALOG, this._element);\n      this._backdrop = this._initializeBackDrop();\n      this._isShown = false;\n      this._ignoreBackdropClick = false;\n      this._isTransitioning = false;\n      this._scrollBar = new ScrollBarHelper();\n    } // Getters\n\n\n    static get Default() {\n      return Default$5;\n    }\n\n    static get NAME() {\n      return NAME$6;\n    } // Public\n\n\n    toggle(relatedTarget) {\n      return this._isShown ? this.hide() : this.show(relatedTarget);\n    }\n\n    show(relatedTarget) {\n      if (this._isShown || this._isTransitioning) {\n        return;\n      }\n\n      const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$3, {\n        relatedTarget\n      });\n\n      if (showEvent.defaultPrevented) {\n        return;\n      }\n\n      this._isShown = true;\n\n      if (this._isAnimated()) {\n        this._isTransitioning = true;\n      }\n\n      this._scrollBar.hide();\n\n      document.body.classList.add(CLASS_NAME_OPEN);\n\n      this._adjustDialog();\n\n      this._setEscapeEvent();\n\n      this._setResizeEvent();\n\n      EventHandler.on(this._element, EVENT_CLICK_DISMISS$2, SELECTOR_DATA_DISMISS$2, event => this.hide(event));\n      EventHandler.on(this._dialog, EVENT_MOUSEDOWN_DISMISS, () => {\n        EventHandler.one(this._element, EVENT_MOUSEUP_DISMISS, event => {\n          if (event.target === this._element) {\n            this._ignoreBackdropClick = true;\n          }\n        });\n      });\n\n      this._showBackdrop(() => this._showElement(relatedTarget));\n    }\n\n    hide(event) {\n      if (event && ['A', 'AREA'].includes(event.target.tagName)) {\n        event.preventDefault();\n      }\n\n      if (!this._isShown || this._isTransitioning) {\n        return;\n      }\n\n      const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$3);\n\n      if (hideEvent.defaultPrevented) {\n        return;\n      }\n\n      this._isShown = false;\n\n      const isAnimated = this._isAnimated();\n\n      if (isAnimated) {\n        this._isTransitioning = true;\n      }\n\n      this._setEscapeEvent();\n\n      this._setResizeEvent();\n\n      EventHandler.off(document, EVENT_FOCUSIN$2);\n\n      this._element.classList.remove(CLASS_NAME_SHOW$5);\n\n      EventHandler.off(this._element, EVENT_CLICK_DISMISS$2);\n      EventHandler.off(this._dialog, EVENT_MOUSEDOWN_DISMISS);\n\n      this._queueCallback(() => this._hideModal(), this._element, isAnimated);\n    }\n\n    dispose() {\n      [window, this._dialog].forEach(htmlElement => EventHandler.off(htmlElement, EVENT_KEY$6));\n\n      this._backdrop.dispose();\n\n      super.dispose();\n      /**\n       * `document` has 2 events `EVENT_FOCUSIN` and `EVENT_CLICK_DATA_API`\n       * Do not move `document` in `htmlElements` array\n       * It will remove `EVENT_CLICK_DATA_API` event that should remain\n       */\n\n      EventHandler.off(document, EVENT_FOCUSIN$2);\n    }\n\n    handleUpdate() {\n      this._adjustDialog();\n    } // Private\n\n\n    _initializeBackDrop() {\n      return new Backdrop({\n        isVisible: Boolean(this._config.backdrop),\n        // 'static' option will be translated to true, and booleans will keep their value\n        isAnimated: this._isAnimated()\n      });\n    }\n\n    _getConfig(config) {\n      config = { ...Default$5,\n        ...Manipulator.getDataAttributes(this._element),\n        ...(typeof config === 'object' ? config : {})\n      };\n      typeCheckConfig(NAME$6, config, DefaultType$5);\n      return config;\n    }\n\n    _showElement(relatedTarget) {\n      const isAnimated = this._isAnimated();\n\n      const modalBody = SelectorEngine.findOne(SELECTOR_MODAL_BODY, this._dialog);\n\n      if (!this._element.parentNode || this._element.parentNode.nodeType !== Node.ELEMENT_NODE) {\n        // Don't move modal's DOM position\n        document.body.appendChild(this._element);\n      }\n\n      this._element.style.display = 'block';\n\n      this._element.removeAttribute('aria-hidden');\n\n      this._element.setAttribute('aria-modal', true);\n\n      this._element.setAttribute('role', 'dialog');\n\n      this._element.scrollTop = 0;\n\n      if (modalBody) {\n        modalBody.scrollTop = 0;\n      }\n\n      if (isAnimated) {\n        reflow(this._element);\n      }\n\n      this._element.classList.add(CLASS_NAME_SHOW$5);\n\n      if (this._config.focus) {\n        this._enforceFocus();\n      }\n\n      const transitionComplete = () => {\n        if (this._config.focus) {\n          this._element.focus();\n        }\n\n        this._isTransitioning = false;\n        EventHandler.trigger(this._element, EVENT_SHOWN$3, {\n          relatedTarget\n        });\n      };\n\n      this._queueCallback(transitionComplete, this._dialog, isAnimated);\n    }\n\n    _enforceFocus() {\n      EventHandler.off(document, EVENT_FOCUSIN$2); // guard against infinite focus loop\n\n      EventHandler.on(document, EVENT_FOCUSIN$2, event => {\n        if (document !== event.target && this._element !== event.target && !this._element.contains(event.target)) {\n          this._element.focus();\n        }\n      });\n    }\n\n    _setEscapeEvent() {\n      if (this._isShown) {\n        EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS$1, event => {\n          if (this._config.keyboard && event.key === ESCAPE_KEY$1) {\n            event.preventDefault();\n            this.hide();\n          } else if (!this._config.keyboard && event.key === ESCAPE_KEY$1) {\n            this._triggerBackdropTransition();\n          }\n        });\n      } else {\n        EventHandler.off(this._element, EVENT_KEYDOWN_DISMISS$1);\n      }\n    }\n\n    _setResizeEvent() {\n      if (this._isShown) {\n        EventHandler.on(window, EVENT_RESIZE, () => this._adjustDialog());\n      } else {\n        EventHandler.off(window, EVENT_RESIZE);\n      }\n    }\n\n    _hideModal() {\n      this._element.style.display = 'none';\n\n      this._element.setAttribute('aria-hidden', true);\n\n      this._element.removeAttribute('aria-modal');\n\n      this._element.removeAttribute('role');\n\n      this._isTransitioning = false;\n\n      this._backdrop.hide(() => {\n        document.body.classList.remove(CLASS_NAME_OPEN);\n\n        this._resetAdjustments();\n\n        this._scrollBar.reset();\n\n        EventHandler.trigger(this._element, EVENT_HIDDEN$3);\n      });\n    }\n\n    _showBackdrop(callback) {\n      EventHandler.on(this._element, EVENT_CLICK_DISMISS$2, event => {\n        if (this._ignoreBackdropClick) {\n          this._ignoreBackdropClick = false;\n          return;\n        }\n\n        if (event.target !== event.currentTarget) {\n          return;\n        }\n\n        if (this._config.backdrop === true) {\n          this.hide();\n        } else if (this._config.backdrop === 'static') {\n          this._triggerBackdropTransition();\n        }\n      });\n\n      this._backdrop.show(callback);\n    }\n\n    _isAnimated() {\n      return this._element.classList.contains(CLASS_NAME_FADE$4);\n    }\n\n    _triggerBackdropTransition() {\n      const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED);\n\n      if (hideEvent.defaultPrevented) {\n        return;\n      }\n\n      const {\n        classList,\n        scrollHeight,\n        style\n      } = this._element;\n      const isModalOverflowing = scrollHeight > document.documentElement.clientHeight; // return if the following background transition hasn't yet completed\n\n      if (!isModalOverflowing && style.overflowY === 'hidden' || classList.contains(CLASS_NAME_STATIC)) {\n        return;\n      }\n\n      if (!isModalOverflowing) {\n        style.overflowY = 'hidden';\n      }\n\n      classList.add(CLASS_NAME_STATIC);\n\n      this._queueCallback(() => {\n        classList.remove(CLASS_NAME_STATIC);\n\n        if (!isModalOverflowing) {\n          this._queueCallback(() => {\n            style.overflowY = '';\n          }, this._dialog);\n        }\n      }, this._dialog);\n\n      this._element.focus();\n    } // ----------------------------------------------------------------------\n    // the following methods are used to handle overflowing modals\n    // ----------------------------------------------------------------------\n\n\n    _adjustDialog() {\n      const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;\n\n      const scrollbarWidth = this._scrollBar.getWidth();\n\n      const isBodyOverflowing = scrollbarWidth > 0;\n\n      if (!isBodyOverflowing && isModalOverflowing && !isRTL() || isBodyOverflowing && !isModalOverflowing && isRTL()) {\n        this._element.style.paddingLeft = `${scrollbarWidth}px`;\n      }\n\n      if (isBodyOverflowing && !isModalOverflowing && !isRTL() || !isBodyOverflowing && isModalOverflowing && isRTL()) {\n        this._element.style.paddingRight = `${scrollbarWidth}px`;\n      }\n    }\n\n    _resetAdjustments() {\n      this._element.style.paddingLeft = '';\n      this._element.style.paddingRight = '';\n    } // Static\n\n\n    static jQueryInterface(config, relatedTarget) {\n      return this.each(function () {\n        const data = Modal.getOrCreateInstance(this, config);\n\n        if (typeof config !== 'string') {\n          return;\n        }\n\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config](relatedTarget);\n      });\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(document, EVENT_CLICK_DATA_API$2, SELECTOR_DATA_TOGGLE$2, function (event) {\n    const target = getElementFromSelector(this);\n\n    if (['A', 'AREA'].includes(this.tagName)) {\n      event.preventDefault();\n    }\n\n    EventHandler.one(target, EVENT_SHOW$3, showEvent => {\n      if (showEvent.defaultPrevented) {\n        // only register focus restorer if modal will actually get shown\n        return;\n      }\n\n      EventHandler.one(target, EVENT_HIDDEN$3, () => {\n        if (isVisible(this)) {\n          this.focus();\n        }\n      });\n    });\n    const data = Modal.getOrCreateInstance(target);\n    data.toggle(this);\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Modal to jQuery only if jQuery is present\n   */\n\n  defineJQueryPlugin(Modal);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): offcanvas.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$5 = 'offcanvas';\n  const DATA_KEY$5 = 'bs.offcanvas';\n  const EVENT_KEY$5 = `.${DATA_KEY$5}`;\n  const DATA_API_KEY$2 = '.data-api';\n  const EVENT_LOAD_DATA_API$1 = `load${EVENT_KEY$5}${DATA_API_KEY$2}`;\n  const ESCAPE_KEY = 'Escape';\n  const Default$4 = {\n    backdrop: true,\n    keyboard: true,\n    scroll: false\n  };\n  const DefaultType$4 = {\n    backdrop: 'boolean',\n    keyboard: 'boolean',\n    scroll: 'boolean'\n  };\n  const CLASS_NAME_SHOW$4 = 'show';\n  const OPEN_SELECTOR = '.offcanvas.show';\n  const EVENT_SHOW$2 = `show${EVENT_KEY$5}`;\n  const EVENT_SHOWN$2 = `shown${EVENT_KEY$5}`;\n  const EVENT_HIDE$2 = `hide${EVENT_KEY$5}`;\n  const EVENT_HIDDEN$2 = `hidden${EVENT_KEY$5}`;\n  const EVENT_FOCUSIN$1 = `focusin${EVENT_KEY$5}`;\n  const EVENT_CLICK_DATA_API$1 = `click${EVENT_KEY$5}${DATA_API_KEY$2}`;\n  const EVENT_CLICK_DISMISS$1 = `click.dismiss${EVENT_KEY$5}`;\n  const EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY$5}`;\n  const SELECTOR_DATA_DISMISS$1 = '[data-bs-dismiss=\"offcanvas\"]';\n  const SELECTOR_DATA_TOGGLE$1 = '[data-bs-toggle=\"offcanvas\"]';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Offcanvas extends BaseComponent {\n    constructor(element, config) {\n      super(element);\n      this._config = this._getConfig(config);\n      this._isShown = false;\n      this._backdrop = this._initializeBackDrop();\n\n      this._addEventListeners();\n    } // Getters\n\n\n    static get NAME() {\n      return NAME$5;\n    }\n\n    static get Default() {\n      return Default$4;\n    } // Public\n\n\n    toggle(relatedTarget) {\n      return this._isShown ? this.hide() : this.show(relatedTarget);\n    }\n\n    show(relatedTarget) {\n      if (this._isShown) {\n        return;\n      }\n\n      const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$2, {\n        relatedTarget\n      });\n\n      if (showEvent.defaultPrevented) {\n        return;\n      }\n\n      this._isShown = true;\n      this._element.style.visibility = 'visible';\n\n      this._backdrop.show();\n\n      if (!this._config.scroll) {\n        new ScrollBarHelper().hide();\n\n        this._enforceFocusOnElement(this._element);\n      }\n\n      this._element.removeAttribute('aria-hidden');\n\n      this._element.setAttribute('aria-modal', true);\n\n      this._element.setAttribute('role', 'dialog');\n\n      this._element.classList.add(CLASS_NAME_SHOW$4);\n\n      const completeCallBack = () => {\n        EventHandler.trigger(this._element, EVENT_SHOWN$2, {\n          relatedTarget\n        });\n      };\n\n      this._queueCallback(completeCallBack, this._element, true);\n    }\n\n    hide() {\n      if (!this._isShown) {\n        return;\n      }\n\n      const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$2);\n\n      if (hideEvent.defaultPrevented) {\n        return;\n      }\n\n      EventHandler.off(document, EVENT_FOCUSIN$1);\n\n      this._element.blur();\n\n      this._isShown = false;\n\n      this._element.classList.remove(CLASS_NAME_SHOW$4);\n\n      this._backdrop.hide();\n\n      const completeCallback = () => {\n        this._element.setAttribute('aria-hidden', true);\n\n        this._element.removeAttribute('aria-modal');\n\n        this._element.removeAttribute('role');\n\n        this._element.style.visibility = 'hidden';\n\n        if (!this._config.scroll) {\n          new ScrollBarHelper().reset();\n        }\n\n        EventHandler.trigger(this._element, EVENT_HIDDEN$2);\n      };\n\n      this._queueCallback(completeCallback, this._element, true);\n    }\n\n    dispose() {\n      this._backdrop.dispose();\n\n      super.dispose();\n      EventHandler.off(document, EVENT_FOCUSIN$1);\n    } // Private\n\n\n    _getConfig(config) {\n      config = { ...Default$4,\n        ...Manipulator.getDataAttributes(this._element),\n        ...(typeof config === 'object' ? config : {})\n      };\n      typeCheckConfig(NAME$5, config, DefaultType$4);\n      return config;\n    }\n\n    _initializeBackDrop() {\n      return new Backdrop({\n        isVisible: this._config.backdrop,\n        isAnimated: true,\n        rootElement: this._element.parentNode,\n        clickCallback: () => this.hide()\n      });\n    }\n\n    _enforceFocusOnElement(element) {\n      EventHandler.off(document, EVENT_FOCUSIN$1); // guard against infinite focus loop\n\n      EventHandler.on(document, EVENT_FOCUSIN$1, event => {\n        if (document !== event.target && element !== event.target && !element.contains(event.target)) {\n          element.focus();\n        }\n      });\n      element.focus();\n    }\n\n    _addEventListeners() {\n      EventHandler.on(this._element, EVENT_CLICK_DISMISS$1, SELECTOR_DATA_DISMISS$1, () => this.hide());\n      EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS, event => {\n        if (this._config.keyboard && event.key === ESCAPE_KEY) {\n          this.hide();\n        }\n      });\n    } // Static\n\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = Offcanvas.getOrCreateInstance(this, config);\n\n        if (typeof config !== 'string') {\n          return;\n        }\n\n        if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config](this);\n      });\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(document, EVENT_CLICK_DATA_API$1, SELECTOR_DATA_TOGGLE$1, function (event) {\n    const target = getElementFromSelector(this);\n\n    if (['A', 'AREA'].includes(this.tagName)) {\n      event.preventDefault();\n    }\n\n    if (isDisabled(this)) {\n      return;\n    }\n\n    EventHandler.one(target, EVENT_HIDDEN$2, () => {\n      // focus on trigger when it is closed\n      if (isVisible(this)) {\n        this.focus();\n      }\n    }); // avoid conflict when clicking a toggler of an offcanvas, while another is open\n\n    const allReadyOpen = SelectorEngine.findOne(OPEN_SELECTOR);\n\n    if (allReadyOpen && allReadyOpen !== target) {\n      Offcanvas.getInstance(allReadyOpen).hide();\n    }\n\n    const data = Offcanvas.getOrCreateInstance(target);\n    data.toggle(this);\n  });\n  EventHandler.on(window, EVENT_LOAD_DATA_API$1, () => SelectorEngine.find(OPEN_SELECTOR).forEach(el => Offcanvas.getOrCreateInstance(el).show()));\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   */\n\n  defineJQueryPlugin(Offcanvas);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): util/sanitizer.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  const uriAttrs = new Set(['background', 'cite', 'href', 'itemtype', 'longdesc', 'poster', 'src', 'xlink:href']);\n  const ARIA_ATTRIBUTE_PATTERN = /^aria-[\\w-]*$/i;\n  /**\n   * A pattern that recognizes a commonly useful subset of URLs that are safe.\n   *\n   * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts\n   */\n\n  const SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file):|[^#&/:?]*(?:[#/?]|$))/i;\n  /**\n   * A pattern that matches safe data URLs. Only matches image, video and audio types.\n   *\n   * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts\n   */\n\n  const DATA_URL_PATTERN = /^data:(?:image\\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\\/(?:mpeg|mp4|ogg|webm)|audio\\/(?:mp3|oga|ogg|opus));base64,[\\d+/a-z]+=*$/i;\n\n  const allowedAttribute = (attr, allowedAttributeList) => {\n    const attrName = attr.nodeName.toLowerCase();\n\n    if (allowedAttributeList.includes(attrName)) {\n      if (uriAttrs.has(attrName)) {\n        return Boolean(SAFE_URL_PATTERN.test(attr.nodeValue) || DATA_URL_PATTERN.test(attr.nodeValue));\n      }\n\n      return true;\n    }\n\n    const regExp = allowedAttributeList.filter(attrRegex => attrRegex instanceof RegExp); // Check if a regular expression validates the attribute.\n\n    for (let i = 0, len = regExp.length; i < len; i++) {\n      if (regExp[i].test(attrName)) {\n        return true;\n      }\n    }\n\n    return false;\n  };\n\n  const DefaultAllowlist = {\n    // Global attributes allowed on any supplied element below.\n    '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],\n    a: ['target', 'href', 'title', 'rel'],\n    area: [],\n    b: [],\n    br: [],\n    col: [],\n    code: [],\n    div: [],\n    em: [],\n    hr: [],\n    h1: [],\n    h2: [],\n    h3: [],\n    h4: [],\n    h5: [],\n    h6: [],\n    i: [],\n    img: ['src', 'srcset', 'alt', 'title', 'width', 'height'],\n    li: [],\n    ol: [],\n    p: [],\n    pre: [],\n    s: [],\n    small: [],\n    span: [],\n    sub: [],\n    sup: [],\n    strong: [],\n    u: [],\n    ul: []\n  };\n  function sanitizeHtml(unsafeHtml, allowList, sanitizeFn) {\n    if (!unsafeHtml.length) {\n      return unsafeHtml;\n    }\n\n    if (sanitizeFn && typeof sanitizeFn === 'function') {\n      return sanitizeFn(unsafeHtml);\n    }\n\n    const domParser = new window.DOMParser();\n    const createdDocument = domParser.parseFromString(unsafeHtml, 'text/html');\n    const allowlistKeys = Object.keys(allowList);\n    const elements = [].concat(...createdDocument.body.querySelectorAll('*'));\n\n    for (let i = 0, len = elements.length; i < len; i++) {\n      const el = elements[i];\n      const elName = el.nodeName.toLowerCase();\n\n      if (!allowlistKeys.includes(elName)) {\n        el.remove();\n        continue;\n      }\n\n      const attributeList = [].concat(...el.attributes);\n      const allowedAttributes = [].concat(allowList['*'] || [], allowList[elName] || []);\n      attributeList.forEach(attr => {\n        if (!allowedAttribute(attr, allowedAttributes)) {\n          el.removeAttribute(attr.nodeName);\n        }\n      });\n    }\n\n    return createdDocument.body.innerHTML;\n  }\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): tooltip.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$4 = 'tooltip';\n  const DATA_KEY$4 = 'bs.tooltip';\n  const EVENT_KEY$4 = `.${DATA_KEY$4}`;\n  const CLASS_PREFIX$1 = 'bs-tooltip';\n  const BSCLS_PREFIX_REGEX$1 = new RegExp(`(^|\\\\s)${CLASS_PREFIX$1}\\\\S+`, 'g');\n  const DISALLOWED_ATTRIBUTES = new Set(['sanitize', 'allowList', 'sanitizeFn']);\n  const DefaultType$3 = {\n    animation: 'boolean',\n    template: 'string',\n    title: '(string|element|function)',\n    trigger: 'string',\n    delay: '(number|object)',\n    html: 'boolean',\n    selector: '(string|boolean)',\n    placement: '(string|function)',\n    offset: '(array|string|function)',\n    container: '(string|element|boolean)',\n    fallbackPlacements: 'array',\n    boundary: '(string|element)',\n    customClass: '(string|function)',\n    sanitize: 'boolean',\n    sanitizeFn: '(null|function)',\n    allowList: 'object',\n    popperConfig: '(null|object|function)'\n  };\n  const AttachmentMap = {\n    AUTO: 'auto',\n    TOP: 'top',\n    RIGHT: isRTL() ? 'left' : 'right',\n    BOTTOM: 'bottom',\n    LEFT: isRTL() ? 'right' : 'left'\n  };\n  const Default$3 = {\n    animation: true,\n    template: '<div class=\"tooltip\" role=\"tooltip\">' + '<div class=\"tooltip-arrow\"></div>' + '<div class=\"tooltip-inner\"></div>' + '</div>',\n    trigger: 'hover focus',\n    title: '',\n    delay: 0,\n    html: false,\n    selector: false,\n    placement: 'top',\n    offset: [0, 0],\n    container: false,\n    fallbackPlacements: ['top', 'right', 'bottom', 'left'],\n    boundary: 'clippingParents',\n    customClass: '',\n    sanitize: true,\n    sanitizeFn: null,\n    allowList: DefaultAllowlist,\n    popperConfig: null\n  };\n  const Event$2 = {\n    HIDE: `hide${EVENT_KEY$4}`,\n    HIDDEN: `hidden${EVENT_KEY$4}`,\n    SHOW: `show${EVENT_KEY$4}`,\n    SHOWN: `shown${EVENT_KEY$4}`,\n    INSERTED: `inserted${EVENT_KEY$4}`,\n    CLICK: `click${EVENT_KEY$4}`,\n    FOCUSIN: `focusin${EVENT_KEY$4}`,\n    FOCUSOUT: `focusout${EVENT_KEY$4}`,\n    MOUSEENTER: `mouseenter${EVENT_KEY$4}`,\n    MOUSELEAVE: `mouseleave${EVENT_KEY$4}`\n  };\n  const CLASS_NAME_FADE$3 = 'fade';\n  const CLASS_NAME_MODAL = 'modal';\n  const CLASS_NAME_SHOW$3 = 'show';\n  const HOVER_STATE_SHOW = 'show';\n  const HOVER_STATE_OUT = 'out';\n  const SELECTOR_TOOLTIP_INNER = '.tooltip-inner';\n  const TRIGGER_HOVER = 'hover';\n  const TRIGGER_FOCUS = 'focus';\n  const TRIGGER_CLICK = 'click';\n  const TRIGGER_MANUAL = 'manual';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Tooltip extends BaseComponent {\n    constructor(element, config) {\n      if (typeof Popper === 'undefined') {\n        throw new TypeError('Bootstrap\\'s tooltips require Popper (https://popper.js.org)');\n      }\n\n      super(element); // private\n\n      this._isEnabled = true;\n      this._timeout = 0;\n      this._hoverState = '';\n      this._activeTrigger = {};\n      this._popper = null; // Protected\n\n      this._config = this._getConfig(config);\n      this.tip = null;\n\n      this._setListeners();\n    } // Getters\n\n\n    static get Default() {\n      return Default$3;\n    }\n\n    static get NAME() {\n      return NAME$4;\n    }\n\n    static get Event() {\n      return Event$2;\n    }\n\n    static get DefaultType() {\n      return DefaultType$3;\n    } // Public\n\n\n    enable() {\n      this._isEnabled = true;\n    }\n\n    disable() {\n      this._isEnabled = false;\n    }\n\n    toggleEnabled() {\n      this._isEnabled = !this._isEnabled;\n    }\n\n    toggle(event) {\n      if (!this._isEnabled) {\n        return;\n      }\n\n      if (event) {\n        const context = this._initializeOnDelegatedTarget(event);\n\n        context._activeTrigger.click = !context._activeTrigger.click;\n\n        if (context._isWithActiveTrigger()) {\n          context._enter(null, context);\n        } else {\n          context._leave(null, context);\n        }\n      } else {\n        if (this.getTipElement().classList.contains(CLASS_NAME_SHOW$3)) {\n          this._leave(null, this);\n\n          return;\n        }\n\n        this._enter(null, this);\n      }\n    }\n\n    dispose() {\n      clearTimeout(this._timeout);\n      EventHandler.off(this._element.closest(`.${CLASS_NAME_MODAL}`), 'hide.bs.modal', this._hideModalHandler);\n\n      if (this.tip) {\n        this.tip.remove();\n      }\n\n      if (this._popper) {\n        this._popper.destroy();\n      }\n\n      super.dispose();\n    }\n\n    show() {\n      if (this._element.style.display === 'none') {\n        throw new Error('Please use show on visible elements');\n      }\n\n      if (!(this.isWithContent() && this._isEnabled)) {\n        return;\n      }\n\n      const showEvent = EventHandler.trigger(this._element, this.constructor.Event.SHOW);\n      const shadowRoot = findShadowRoot(this._element);\n      const isInTheDom = shadowRoot === null ? this._element.ownerDocument.documentElement.contains(this._element) : shadowRoot.contains(this._element);\n\n      if (showEvent.defaultPrevented || !isInTheDom) {\n        return;\n      }\n\n      const tip = this.getTipElement();\n      const tipId = getUID(this.constructor.NAME);\n      tip.setAttribute('id', tipId);\n\n      this._element.setAttribute('aria-describedby', tipId);\n\n      this.setContent();\n\n      if (this._config.animation) {\n        tip.classList.add(CLASS_NAME_FADE$3);\n      }\n\n      const placement = typeof this._config.placement === 'function' ? this._config.placement.call(this, tip, this._element) : this._config.placement;\n\n      const attachment = this._getAttachment(placement);\n\n      this._addAttachmentClass(attachment);\n\n      const {\n        container\n      } = this._config;\n      Data.set(tip, this.constructor.DATA_KEY, this);\n\n      if (!this._element.ownerDocument.documentElement.contains(this.tip)) {\n        container.appendChild(tip);\n        EventHandler.trigger(this._element, this.constructor.Event.INSERTED);\n      }\n\n      if (this._popper) {\n        this._popper.update();\n      } else {\n        this._popper = createPopper(this._element, tip, this._getPopperConfig(attachment));\n      }\n\n      tip.classList.add(CLASS_NAME_SHOW$3);\n      const customClass = typeof this._config.customClass === 'function' ? this._config.customClass() : this._config.customClass;\n\n      if (customClass) {\n        tip.classList.add(...customClass.split(' '));\n      } // If this is a touch-enabled device we add extra\n      // empty mouseover listeners to the body's immediate children;\n      // only needed because of broken event delegation on iOS\n      // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n\n\n      if ('ontouchstart' in document.documentElement) {\n        [].concat(...document.body.children).forEach(element => {\n          EventHandler.on(element, 'mouseover', noop);\n        });\n      }\n\n      const complete = () => {\n        const prevHoverState = this._hoverState;\n        this._hoverState = null;\n        EventHandler.trigger(this._element, this.constructor.Event.SHOWN);\n\n        if (prevHoverState === HOVER_STATE_OUT) {\n          this._leave(null, this);\n        }\n      };\n\n      const isAnimated = this.tip.classList.contains(CLASS_NAME_FADE$3);\n\n      this._queueCallback(complete, this.tip, isAnimated);\n    }\n\n    hide() {\n      if (!this._popper) {\n        return;\n      }\n\n      const tip = this.getTipElement();\n\n      const complete = () => {\n        if (this._isWithActiveTrigger()) {\n          return;\n        }\n\n        if (this._hoverState !== HOVER_STATE_SHOW) {\n          tip.remove();\n        }\n\n        this._cleanTipClass();\n\n        this._element.removeAttribute('aria-describedby');\n\n        EventHandler.trigger(this._element, this.constructor.Event.HIDDEN);\n\n        if (this._popper) {\n          this._popper.destroy();\n\n          this._popper = null;\n        }\n      };\n\n      const hideEvent = EventHandler.trigger(this._element, this.constructor.Event.HIDE);\n\n      if (hideEvent.defaultPrevented) {\n        return;\n      }\n\n      tip.classList.remove(CLASS_NAME_SHOW$3); // If this is a touch-enabled device we remove the extra\n      // empty mouseover listeners we added for iOS support\n\n      if ('ontouchstart' in document.documentElement) {\n        [].concat(...document.body.children).forEach(element => EventHandler.off(element, 'mouseover', noop));\n      }\n\n      this._activeTrigger[TRIGGER_CLICK] = false;\n      this._activeTrigger[TRIGGER_FOCUS] = false;\n      this._activeTrigger[TRIGGER_HOVER] = false;\n      const isAnimated = this.tip.classList.contains(CLASS_NAME_FADE$3);\n\n      this._queueCallback(complete, this.tip, isAnimated);\n\n      this._hoverState = '';\n    }\n\n    update() {\n      if (this._popper !== null) {\n        this._popper.update();\n      }\n    } // Protected\n\n\n    isWithContent() {\n      return Boolean(this.getTitle());\n    }\n\n    getTipElement() {\n      if (this.tip) {\n        return this.tip;\n      }\n\n      const element = document.createElement('div');\n      element.innerHTML = this._config.template;\n      this.tip = element.children[0];\n      return this.tip;\n    }\n\n    setContent() {\n      const tip = this.getTipElement();\n      this.setElementContent(SelectorEngine.findOne(SELECTOR_TOOLTIP_INNER, tip), this.getTitle());\n      tip.classList.remove(CLASS_NAME_FADE$3, CLASS_NAME_SHOW$3);\n    }\n\n    setElementContent(element, content) {\n      if (element === null) {\n        return;\n      }\n\n      if (isElement$1(content)) {\n        content = getElement(content); // content is a DOM node or a jQuery\n\n        if (this._config.html) {\n          if (content.parentNode !== element) {\n            element.innerHTML = '';\n            element.appendChild(content);\n          }\n        } else {\n          element.textContent = content.textContent;\n        }\n\n        return;\n      }\n\n      if (this._config.html) {\n        if (this._config.sanitize) {\n          content = sanitizeHtml(content, this._config.allowList, this._config.sanitizeFn);\n        }\n\n        element.innerHTML = content;\n      } else {\n        element.textContent = content;\n      }\n    }\n\n    getTitle() {\n      let title = this._element.getAttribute('data-bs-original-title');\n\n      if (!title) {\n        title = typeof this._config.title === 'function' ? this._config.title.call(this._element) : this._config.title;\n      }\n\n      return title;\n    }\n\n    updateAttachment(attachment) {\n      if (attachment === 'right') {\n        return 'end';\n      }\n\n      if (attachment === 'left') {\n        return 'start';\n      }\n\n      return attachment;\n    } // Private\n\n\n    _initializeOnDelegatedTarget(event, context) {\n      const dataKey = this.constructor.DATA_KEY;\n      context = context || Data.get(event.delegateTarget, dataKey);\n\n      if (!context) {\n        context = new this.constructor(event.delegateTarget, this._getDelegateConfig());\n        Data.set(event.delegateTarget, dataKey, context);\n      }\n\n      return context;\n    }\n\n    _getOffset() {\n      const {\n        offset\n      } = this._config;\n\n      if (typeof offset === 'string') {\n        return offset.split(',').map(val => Number.parseInt(val, 10));\n      }\n\n      if (typeof offset === 'function') {\n        return popperData => offset(popperData, this._element);\n      }\n\n      return offset;\n    }\n\n    _getPopperConfig(attachment) {\n      const defaultBsPopperConfig = {\n        placement: attachment,\n        modifiers: [{\n          name: 'flip',\n          options: {\n            fallbackPlacements: this._config.fallbackPlacements\n          }\n        }, {\n          name: 'offset',\n          options: {\n            offset: this._getOffset()\n          }\n        }, {\n          name: 'preventOverflow',\n          options: {\n            boundary: this._config.boundary\n          }\n        }, {\n          name: 'arrow',\n          options: {\n            element: `.${this.constructor.NAME}-arrow`\n          }\n        }, {\n          name: 'onChange',\n          enabled: true,\n          phase: 'afterWrite',\n          fn: data => this._handlePopperPlacementChange(data)\n        }],\n        onFirstUpdate: data => {\n          if (data.options.placement !== data.placement) {\n            this._handlePopperPlacementChange(data);\n          }\n        }\n      };\n      return { ...defaultBsPopperConfig,\n        ...(typeof this._config.popperConfig === 'function' ? this._config.popperConfig(defaultBsPopperConfig) : this._config.popperConfig)\n      };\n    }\n\n    _addAttachmentClass(attachment) {\n      this.getTipElement().classList.add(`${CLASS_PREFIX$1}-${this.updateAttachment(attachment)}`);\n    }\n\n    _getAttachment(placement) {\n      return AttachmentMap[placement.toUpperCase()];\n    }\n\n    _setListeners() {\n      const triggers = this._config.trigger.split(' ');\n\n      triggers.forEach(trigger => {\n        if (trigger === 'click') {\n          EventHandler.on(this._element, this.constructor.Event.CLICK, this._config.selector, event => this.toggle(event));\n        } else if (trigger !== TRIGGER_MANUAL) {\n          const eventIn = trigger === TRIGGER_HOVER ? this.constructor.Event.MOUSEENTER : this.constructor.Event.FOCUSIN;\n          const eventOut = trigger === TRIGGER_HOVER ? this.constructor.Event.MOUSELEAVE : this.constructor.Event.FOCUSOUT;\n          EventHandler.on(this._element, eventIn, this._config.selector, event => this._enter(event));\n          EventHandler.on(this._element, eventOut, this._config.selector, event => this._leave(event));\n        }\n      });\n\n      this._hideModalHandler = () => {\n        if (this._element) {\n          this.hide();\n        }\n      };\n\n      EventHandler.on(this._element.closest(`.${CLASS_NAME_MODAL}`), 'hide.bs.modal', this._hideModalHandler);\n\n      if (this._config.selector) {\n        this._config = { ...this._config,\n          trigger: 'manual',\n          selector: ''\n        };\n      } else {\n        this._fixTitle();\n      }\n    }\n\n    _fixTitle() {\n      const title = this._element.getAttribute('title');\n\n      const originalTitleType = typeof this._element.getAttribute('data-bs-original-title');\n\n      if (title || originalTitleType !== 'string') {\n        this._element.setAttribute('data-bs-original-title', title || '');\n\n        if (title && !this._element.getAttribute('aria-label') && !this._element.textContent) {\n          this._element.setAttribute('aria-label', title);\n        }\n\n        this._element.setAttribute('title', '');\n      }\n    }\n\n    _enter(event, context) {\n      context = this._initializeOnDelegatedTarget(event, context);\n\n      if (event) {\n        context._activeTrigger[event.type === 'focusin' ? TRIGGER_FOCUS : TRIGGER_HOVER] = true;\n      }\n\n      if (context.getTipElement().classList.contains(CLASS_NAME_SHOW$3) || context._hoverState === HOVER_STATE_SHOW) {\n        context._hoverState = HOVER_STATE_SHOW;\n        return;\n      }\n\n      clearTimeout(context._timeout);\n      context._hoverState = HOVER_STATE_SHOW;\n\n      if (!context._config.delay || !context._config.delay.show) {\n        context.show();\n        return;\n      }\n\n      context._timeout = setTimeout(() => {\n        if (context._hoverState === HOVER_STATE_SHOW) {\n          context.show();\n        }\n      }, context._config.delay.show);\n    }\n\n    _leave(event, context) {\n      context = this._initializeOnDelegatedTarget(event, context);\n\n      if (event) {\n        context._activeTrigger[event.type === 'focusout' ? TRIGGER_FOCUS : TRIGGER_HOVER] = context._element.contains(event.relatedTarget);\n      }\n\n      if (context._isWithActiveTrigger()) {\n        return;\n      }\n\n      clearTimeout(context._timeout);\n      context._hoverState = HOVER_STATE_OUT;\n\n      if (!context._config.delay || !context._config.delay.hide) {\n        context.hide();\n        return;\n      }\n\n      context._timeout = setTimeout(() => {\n        if (context._hoverState === HOVER_STATE_OUT) {\n          context.hide();\n        }\n      }, context._config.delay.hide);\n    }\n\n    _isWithActiveTrigger() {\n      for (const trigger in this._activeTrigger) {\n        if (this._activeTrigger[trigger]) {\n          return true;\n        }\n      }\n\n      return false;\n    }\n\n    _getConfig(config) {\n      const dataAttributes = Manipulator.getDataAttributes(this._element);\n      Object.keys(dataAttributes).forEach(dataAttr => {\n        if (DISALLOWED_ATTRIBUTES.has(dataAttr)) {\n          delete dataAttributes[dataAttr];\n        }\n      });\n      config = { ...this.constructor.Default,\n        ...dataAttributes,\n        ...(typeof config === 'object' && config ? config : {})\n      };\n      config.container = config.container === false ? document.body : getElement(config.container);\n\n      if (typeof config.delay === 'number') {\n        config.delay = {\n          show: config.delay,\n          hide: config.delay\n        };\n      }\n\n      if (typeof config.title === 'number') {\n        config.title = config.title.toString();\n      }\n\n      if (typeof config.content === 'number') {\n        config.content = config.content.toString();\n      }\n\n      typeCheckConfig(NAME$4, config, this.constructor.DefaultType);\n\n      if (config.sanitize) {\n        config.template = sanitizeHtml(config.template, config.allowList, config.sanitizeFn);\n      }\n\n      return config;\n    }\n\n    _getDelegateConfig() {\n      const config = {};\n\n      if (this._config) {\n        for (const key in this._config) {\n          if (this.constructor.Default[key] !== this._config[key]) {\n            config[key] = this._config[key];\n          }\n        }\n      }\n\n      return config;\n    }\n\n    _cleanTipClass() {\n      const tip = this.getTipElement();\n      const tabClass = tip.getAttribute('class').match(BSCLS_PREFIX_REGEX$1);\n\n      if (tabClass !== null && tabClass.length > 0) {\n        tabClass.map(token => token.trim()).forEach(tClass => tip.classList.remove(tClass));\n      }\n    }\n\n    _handlePopperPlacementChange(popperData) {\n      const {\n        state\n      } = popperData;\n\n      if (!state) {\n        return;\n      }\n\n      this.tip = state.elements.popper;\n\n      this._cleanTipClass();\n\n      this._addAttachmentClass(this._getAttachment(state.placement));\n    } // Static\n\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = Tooltip.getOrCreateInstance(this, config);\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(`No method named \"${config}\"`);\n          }\n\n          data[config]();\n        }\n      });\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Tooltip to jQuery only if jQuery is present\n   */\n\n\n  defineJQueryPlugin(Tooltip);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): popover.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$3 = 'popover';\n  const DATA_KEY$3 = 'bs.popover';\n  const EVENT_KEY$3 = `.${DATA_KEY$3}`;\n  const CLASS_PREFIX = 'bs-popover';\n  const BSCLS_PREFIX_REGEX = new RegExp(`(^|\\\\s)${CLASS_PREFIX}\\\\S+`, 'g');\n  const Default$2 = { ...Tooltip.Default,\n    placement: 'right',\n    offset: [0, 8],\n    trigger: 'click',\n    content: '',\n    template: '<div class=\"popover\" role=\"tooltip\">' + '<div class=\"popover-arrow\"></div>' + '<h3 class=\"popover-header\"></h3>' + '<div class=\"popover-body\"></div>' + '</div>'\n  };\n  const DefaultType$2 = { ...Tooltip.DefaultType,\n    content: '(string|element|function)'\n  };\n  const Event$1 = {\n    HIDE: `hide${EVENT_KEY$3}`,\n    HIDDEN: `hidden${EVENT_KEY$3}`,\n    SHOW: `show${EVENT_KEY$3}`,\n    SHOWN: `shown${EVENT_KEY$3}`,\n    INSERTED: `inserted${EVENT_KEY$3}`,\n    CLICK: `click${EVENT_KEY$3}`,\n    FOCUSIN: `focusin${EVENT_KEY$3}`,\n    FOCUSOUT: `focusout${EVENT_KEY$3}`,\n    MOUSEENTER: `mouseenter${EVENT_KEY$3}`,\n    MOUSELEAVE: `mouseleave${EVENT_KEY$3}`\n  };\n  const CLASS_NAME_FADE$2 = 'fade';\n  const CLASS_NAME_SHOW$2 = 'show';\n  const SELECTOR_TITLE = '.popover-header';\n  const SELECTOR_CONTENT = '.popover-body';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Popover extends Tooltip {\n    // Getters\n    static get Default() {\n      return Default$2;\n    }\n\n    static get NAME() {\n      return NAME$3;\n    }\n\n    static get Event() {\n      return Event$1;\n    }\n\n    static get DefaultType() {\n      return DefaultType$2;\n    } // Overrides\n\n\n    isWithContent() {\n      return this.getTitle() || this._getContent();\n    }\n\n    getTipElement() {\n      if (this.tip) {\n        return this.tip;\n      }\n\n      this.tip = super.getTipElement();\n\n      if (!this.getTitle()) {\n        SelectorEngine.findOne(SELECTOR_TITLE, this.tip).remove();\n      }\n\n      if (!this._getContent()) {\n        SelectorEngine.findOne(SELECTOR_CONTENT, this.tip).remove();\n      }\n\n      return this.tip;\n    }\n\n    setContent() {\n      const tip = this.getTipElement(); // we use append for html objects to maintain js events\n\n      this.setElementContent(SelectorEngine.findOne(SELECTOR_TITLE, tip), this.getTitle());\n\n      let content = this._getContent();\n\n      if (typeof content === 'function') {\n        content = content.call(this._element);\n      }\n\n      this.setElementContent(SelectorEngine.findOne(SELECTOR_CONTENT, tip), content);\n      tip.classList.remove(CLASS_NAME_FADE$2, CLASS_NAME_SHOW$2);\n    } // Private\n\n\n    _addAttachmentClass(attachment) {\n      this.getTipElement().classList.add(`${CLASS_PREFIX}-${this.updateAttachment(attachment)}`);\n    }\n\n    _getContent() {\n      return this._element.getAttribute('data-bs-content') || this._config.content;\n    }\n\n    _cleanTipClass() {\n      const tip = this.getTipElement();\n      const tabClass = tip.getAttribute('class').match(BSCLS_PREFIX_REGEX);\n\n      if (tabClass !== null && tabClass.length > 0) {\n        tabClass.map(token => token.trim()).forEach(tClass => tip.classList.remove(tClass));\n      }\n    } // Static\n\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = Popover.getOrCreateInstance(this, config);\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(`No method named \"${config}\"`);\n          }\n\n          data[config]();\n        }\n      });\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Popover to jQuery only if jQuery is present\n   */\n\n\n  defineJQueryPlugin(Popover);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): scrollspy.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$2 = 'scrollspy';\n  const DATA_KEY$2 = 'bs.scrollspy';\n  const EVENT_KEY$2 = `.${DATA_KEY$2}`;\n  const DATA_API_KEY$1 = '.data-api';\n  const Default$1 = {\n    offset: 10,\n    method: 'auto',\n    target: ''\n  };\n  const DefaultType$1 = {\n    offset: 'number',\n    method: 'string',\n    target: '(string|element)'\n  };\n  const EVENT_ACTIVATE = `activate${EVENT_KEY$2}`;\n  const EVENT_SCROLL = `scroll${EVENT_KEY$2}`;\n  const EVENT_LOAD_DATA_API = `load${EVENT_KEY$2}${DATA_API_KEY$1}`;\n  const CLASS_NAME_DROPDOWN_ITEM = 'dropdown-item';\n  const CLASS_NAME_ACTIVE$1 = 'active';\n  const SELECTOR_DATA_SPY = '[data-bs-spy=\"scroll\"]';\n  const SELECTOR_NAV_LIST_GROUP$1 = '.nav, .list-group';\n  const SELECTOR_NAV_LINKS = '.nav-link';\n  const SELECTOR_NAV_ITEMS = '.nav-item';\n  const SELECTOR_LIST_ITEMS = '.list-group-item';\n  const SELECTOR_DROPDOWN$1 = '.dropdown';\n  const SELECTOR_DROPDOWN_TOGGLE$1 = '.dropdown-toggle';\n  const METHOD_OFFSET = 'offset';\n  const METHOD_POSITION = 'position';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class ScrollSpy extends BaseComponent {\n    constructor(element, config) {\n      super(element);\n      this._scrollElement = this._element.tagName === 'BODY' ? window : this._element;\n      this._config = this._getConfig(config);\n      this._selector = `${this._config.target} ${SELECTOR_NAV_LINKS}, ${this._config.target} ${SELECTOR_LIST_ITEMS}, ${this._config.target} .${CLASS_NAME_DROPDOWN_ITEM}`;\n      this._offsets = [];\n      this._targets = [];\n      this._activeTarget = null;\n      this._scrollHeight = 0;\n      EventHandler.on(this._scrollElement, EVENT_SCROLL, () => this._process());\n      this.refresh();\n\n      this._process();\n    } // Getters\n\n\n    static get Default() {\n      return Default$1;\n    }\n\n    static get NAME() {\n      return NAME$2;\n    } // Public\n\n\n    refresh() {\n      const autoMethod = this._scrollElement === this._scrollElement.window ? METHOD_OFFSET : METHOD_POSITION;\n      const offsetMethod = this._config.method === 'auto' ? autoMethod : this._config.method;\n      const offsetBase = offsetMethod === METHOD_POSITION ? this._getScrollTop() : 0;\n      this._offsets = [];\n      this._targets = [];\n      this._scrollHeight = this._getScrollHeight();\n      const targets = SelectorEngine.find(this._selector);\n      targets.map(element => {\n        const targetSelector = getSelectorFromElement(element);\n        const target = targetSelector ? SelectorEngine.findOne(targetSelector) : null;\n\n        if (target) {\n          const targetBCR = target.getBoundingClientRect();\n\n          if (targetBCR.width || targetBCR.height) {\n            return [Manipulator[offsetMethod](target).top + offsetBase, targetSelector];\n          }\n        }\n\n        return null;\n      }).filter(item => item).sort((a, b) => a[0] - b[0]).forEach(item => {\n        this._offsets.push(item[0]);\n\n        this._targets.push(item[1]);\n      });\n    }\n\n    dispose() {\n      EventHandler.off(this._scrollElement, EVENT_KEY$2);\n      super.dispose();\n    } // Private\n\n\n    _getConfig(config) {\n      config = { ...Default$1,\n        ...Manipulator.getDataAttributes(this._element),\n        ...(typeof config === 'object' && config ? config : {})\n      };\n\n      if (typeof config.target !== 'string' && isElement$1(config.target)) {\n        let {\n          id\n        } = config.target;\n\n        if (!id) {\n          id = getUID(NAME$2);\n          config.target.id = id;\n        }\n\n        config.target = `#${id}`;\n      }\n\n      typeCheckConfig(NAME$2, config, DefaultType$1);\n      return config;\n    }\n\n    _getScrollTop() {\n      return this._scrollElement === window ? this._scrollElement.pageYOffset : this._scrollElement.scrollTop;\n    }\n\n    _getScrollHeight() {\n      return this._scrollElement.scrollHeight || Math.max(document.body.scrollHeight, document.documentElement.scrollHeight);\n    }\n\n    _getOffsetHeight() {\n      return this._scrollElement === window ? window.innerHeight : this._scrollElement.getBoundingClientRect().height;\n    }\n\n    _process() {\n      const scrollTop = this._getScrollTop() + this._config.offset;\n\n      const scrollHeight = this._getScrollHeight();\n\n      const maxScroll = this._config.offset + scrollHeight - this._getOffsetHeight();\n\n      if (this._scrollHeight !== scrollHeight) {\n        this.refresh();\n      }\n\n      if (scrollTop >= maxScroll) {\n        const target = this._targets[this._targets.length - 1];\n\n        if (this._activeTarget !== target) {\n          this._activate(target);\n        }\n\n        return;\n      }\n\n      if (this._activeTarget && scrollTop < this._offsets[0] && this._offsets[0] > 0) {\n        this._activeTarget = null;\n\n        this._clear();\n\n        return;\n      }\n\n      for (let i = this._offsets.length; i--;) {\n        const isActiveTarget = this._activeTarget !== this._targets[i] && scrollTop >= this._offsets[i] && (typeof this._offsets[i + 1] === 'undefined' || scrollTop < this._offsets[i + 1]);\n\n        if (isActiveTarget) {\n          this._activate(this._targets[i]);\n        }\n      }\n    }\n\n    _activate(target) {\n      this._activeTarget = target;\n\n      this._clear();\n\n      const queries = this._selector.split(',').map(selector => `${selector}[data-bs-target=\"${target}\"],${selector}[href=\"${target}\"]`);\n\n      const link = SelectorEngine.findOne(queries.join(','));\n\n      if (link.classList.contains(CLASS_NAME_DROPDOWN_ITEM)) {\n        SelectorEngine.findOne(SELECTOR_DROPDOWN_TOGGLE$1, link.closest(SELECTOR_DROPDOWN$1)).classList.add(CLASS_NAME_ACTIVE$1);\n        link.classList.add(CLASS_NAME_ACTIVE$1);\n      } else {\n        // Set triggered link as active\n        link.classList.add(CLASS_NAME_ACTIVE$1);\n        SelectorEngine.parents(link, SELECTOR_NAV_LIST_GROUP$1).forEach(listGroup => {\n          // Set triggered links parents as active\n          // With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor\n          SelectorEngine.prev(listGroup, `${SELECTOR_NAV_LINKS}, ${SELECTOR_LIST_ITEMS}`).forEach(item => item.classList.add(CLASS_NAME_ACTIVE$1)); // Handle special case when .nav-link is inside .nav-item\n\n          SelectorEngine.prev(listGroup, SELECTOR_NAV_ITEMS).forEach(navItem => {\n            SelectorEngine.children(navItem, SELECTOR_NAV_LINKS).forEach(item => item.classList.add(CLASS_NAME_ACTIVE$1));\n          });\n        });\n      }\n\n      EventHandler.trigger(this._scrollElement, EVENT_ACTIVATE, {\n        relatedTarget: target\n      });\n    }\n\n    _clear() {\n      SelectorEngine.find(this._selector).filter(node => node.classList.contains(CLASS_NAME_ACTIVE$1)).forEach(node => node.classList.remove(CLASS_NAME_ACTIVE$1));\n    } // Static\n\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = ScrollSpy.getOrCreateInstance(this, config);\n\n        if (typeof config !== 'string') {\n          return;\n        }\n\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config]();\n      });\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n    SelectorEngine.find(SELECTOR_DATA_SPY).forEach(spy => new ScrollSpy(spy));\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .ScrollSpy to jQuery only if jQuery is present\n   */\n\n  defineJQueryPlugin(ScrollSpy);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): tab.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$1 = 'tab';\n  const DATA_KEY$1 = 'bs.tab';\n  const EVENT_KEY$1 = `.${DATA_KEY$1}`;\n  const DATA_API_KEY = '.data-api';\n  const EVENT_HIDE$1 = `hide${EVENT_KEY$1}`;\n  const EVENT_HIDDEN$1 = `hidden${EVENT_KEY$1}`;\n  const EVENT_SHOW$1 = `show${EVENT_KEY$1}`;\n  const EVENT_SHOWN$1 = `shown${EVENT_KEY$1}`;\n  const EVENT_CLICK_DATA_API = `click${EVENT_KEY$1}${DATA_API_KEY}`;\n  const CLASS_NAME_DROPDOWN_MENU = 'dropdown-menu';\n  const CLASS_NAME_ACTIVE = 'active';\n  const CLASS_NAME_FADE$1 = 'fade';\n  const CLASS_NAME_SHOW$1 = 'show';\n  const SELECTOR_DROPDOWN = '.dropdown';\n  const SELECTOR_NAV_LIST_GROUP = '.nav, .list-group';\n  const SELECTOR_ACTIVE = '.active';\n  const SELECTOR_ACTIVE_UL = ':scope > li > .active';\n  const SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"tab\"], [data-bs-toggle=\"pill\"], [data-bs-toggle=\"list\"]';\n  const SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle';\n  const SELECTOR_DROPDOWN_ACTIVE_CHILD = ':scope > .dropdown-menu .active';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Tab extends BaseComponent {\n    // Getters\n    static get NAME() {\n      return NAME$1;\n    } // Public\n\n\n    show() {\n      if (this._element.parentNode && this._element.parentNode.nodeType === Node.ELEMENT_NODE && this._element.classList.contains(CLASS_NAME_ACTIVE)) {\n        return;\n      }\n\n      let previous;\n      const target = getElementFromSelector(this._element);\n\n      const listElement = this._element.closest(SELECTOR_NAV_LIST_GROUP);\n\n      if (listElement) {\n        const itemSelector = listElement.nodeName === 'UL' || listElement.nodeName === 'OL' ? SELECTOR_ACTIVE_UL : SELECTOR_ACTIVE;\n        previous = SelectorEngine.find(itemSelector, listElement);\n        previous = previous[previous.length - 1];\n      }\n\n      const hideEvent = previous ? EventHandler.trigger(previous, EVENT_HIDE$1, {\n        relatedTarget: this._element\n      }) : null;\n      const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$1, {\n        relatedTarget: previous\n      });\n\n      if (showEvent.defaultPrevented || hideEvent !== null && hideEvent.defaultPrevented) {\n        return;\n      }\n\n      this._activate(this._element, listElement);\n\n      const complete = () => {\n        EventHandler.trigger(previous, EVENT_HIDDEN$1, {\n          relatedTarget: this._element\n        });\n        EventHandler.trigger(this._element, EVENT_SHOWN$1, {\n          relatedTarget: previous\n        });\n      };\n\n      if (target) {\n        this._activate(target, target.parentNode, complete);\n      } else {\n        complete();\n      }\n    } // Private\n\n\n    _activate(element, container, callback) {\n      const activeElements = container && (container.nodeName === 'UL' || container.nodeName === 'OL') ? SelectorEngine.find(SELECTOR_ACTIVE_UL, container) : SelectorEngine.children(container, SELECTOR_ACTIVE);\n      const active = activeElements[0];\n      const isTransitioning = callback && active && active.classList.contains(CLASS_NAME_FADE$1);\n\n      const complete = () => this._transitionComplete(element, active, callback);\n\n      if (active && isTransitioning) {\n        active.classList.remove(CLASS_NAME_SHOW$1);\n\n        this._queueCallback(complete, element, true);\n      } else {\n        complete();\n      }\n    }\n\n    _transitionComplete(element, active, callback) {\n      if (active) {\n        active.classList.remove(CLASS_NAME_ACTIVE);\n        const dropdownChild = SelectorEngine.findOne(SELECTOR_DROPDOWN_ACTIVE_CHILD, active.parentNode);\n\n        if (dropdownChild) {\n          dropdownChild.classList.remove(CLASS_NAME_ACTIVE);\n        }\n\n        if (active.getAttribute('role') === 'tab') {\n          active.setAttribute('aria-selected', false);\n        }\n      }\n\n      element.classList.add(CLASS_NAME_ACTIVE);\n\n      if (element.getAttribute('role') === 'tab') {\n        element.setAttribute('aria-selected', true);\n      }\n\n      reflow(element);\n\n      if (element.classList.contains(CLASS_NAME_FADE$1)) {\n        element.classList.add(CLASS_NAME_SHOW$1);\n      }\n\n      let parent = element.parentNode;\n\n      if (parent && parent.nodeName === 'LI') {\n        parent = parent.parentNode;\n      }\n\n      if (parent && parent.classList.contains(CLASS_NAME_DROPDOWN_MENU)) {\n        const dropdownElement = element.closest(SELECTOR_DROPDOWN);\n\n        if (dropdownElement) {\n          SelectorEngine.find(SELECTOR_DROPDOWN_TOGGLE, dropdownElement).forEach(dropdown => dropdown.classList.add(CLASS_NAME_ACTIVE));\n        }\n\n        element.setAttribute('aria-expanded', true);\n      }\n\n      if (callback) {\n        callback();\n      }\n    } // Static\n\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = Tab.getOrCreateInstance(this);\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(`No method named \"${config}\"`);\n          }\n\n          data[config]();\n        }\n      });\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n    if (['A', 'AREA'].includes(this.tagName)) {\n      event.preventDefault();\n    }\n\n    if (isDisabled(this)) {\n      return;\n    }\n\n    const data = Tab.getOrCreateInstance(this);\n    data.show();\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Tab to jQuery only if jQuery is present\n   */\n\n  defineJQueryPlugin(Tab);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): toast.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME = 'toast';\n  const DATA_KEY = 'bs.toast';\n  const EVENT_KEY = `.${DATA_KEY}`;\n  const EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY}`;\n  const EVENT_MOUSEOVER = `mouseover${EVENT_KEY}`;\n  const EVENT_MOUSEOUT = `mouseout${EVENT_KEY}`;\n  const EVENT_FOCUSIN = `focusin${EVENT_KEY}`;\n  const EVENT_FOCUSOUT = `focusout${EVENT_KEY}`;\n  const EVENT_HIDE = `hide${EVENT_KEY}`;\n  const EVENT_HIDDEN = `hidden${EVENT_KEY}`;\n  const EVENT_SHOW = `show${EVENT_KEY}`;\n  const EVENT_SHOWN = `shown${EVENT_KEY}`;\n  const CLASS_NAME_FADE = 'fade';\n  const CLASS_NAME_HIDE = 'hide';\n  const CLASS_NAME_SHOW = 'show';\n  const CLASS_NAME_SHOWING = 'showing';\n  const DefaultType = {\n    animation: 'boolean',\n    autohide: 'boolean',\n    delay: 'number'\n  };\n  const Default = {\n    animation: true,\n    autohide: true,\n    delay: 5000\n  };\n  const SELECTOR_DATA_DISMISS = '[data-bs-dismiss=\"toast\"]';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Toast extends BaseComponent {\n    constructor(element, config) {\n      super(element);\n      this._config = this._getConfig(config);\n      this._timeout = null;\n      this._hasMouseInteraction = false;\n      this._hasKeyboardInteraction = false;\n\n      this._setListeners();\n    } // Getters\n\n\n    static get DefaultType() {\n      return DefaultType;\n    }\n\n    static get Default() {\n      return Default;\n    }\n\n    static get NAME() {\n      return NAME;\n    } // Public\n\n\n    show() {\n      const showEvent = EventHandler.trigger(this._element, EVENT_SHOW);\n\n      if (showEvent.defaultPrevented) {\n        return;\n      }\n\n      this._clearTimeout();\n\n      if (this._config.animation) {\n        this._element.classList.add(CLASS_NAME_FADE);\n      }\n\n      const complete = () => {\n        this._element.classList.remove(CLASS_NAME_SHOWING);\n\n        this._element.classList.add(CLASS_NAME_SHOW);\n\n        EventHandler.trigger(this._element, EVENT_SHOWN);\n\n        this._maybeScheduleHide();\n      };\n\n      this._element.classList.remove(CLASS_NAME_HIDE);\n\n      reflow(this._element);\n\n      this._element.classList.add(CLASS_NAME_SHOWING);\n\n      this._queueCallback(complete, this._element, this._config.animation);\n    }\n\n    hide() {\n      if (!this._element.classList.contains(CLASS_NAME_SHOW)) {\n        return;\n      }\n\n      const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE);\n\n      if (hideEvent.defaultPrevented) {\n        return;\n      }\n\n      const complete = () => {\n        this._element.classList.add(CLASS_NAME_HIDE);\n\n        EventHandler.trigger(this._element, EVENT_HIDDEN);\n      };\n\n      this._element.classList.remove(CLASS_NAME_SHOW);\n\n      this._queueCallback(complete, this._element, this._config.animation);\n    }\n\n    dispose() {\n      this._clearTimeout();\n\n      if (this._element.classList.contains(CLASS_NAME_SHOW)) {\n        this._element.classList.remove(CLASS_NAME_SHOW);\n      }\n\n      super.dispose();\n    } // Private\n\n\n    _getConfig(config) {\n      config = { ...Default,\n        ...Manipulator.getDataAttributes(this._element),\n        ...(typeof config === 'object' && config ? config : {})\n      };\n      typeCheckConfig(NAME, config, this.constructor.DefaultType);\n      return config;\n    }\n\n    _maybeScheduleHide() {\n      if (!this._config.autohide) {\n        return;\n      }\n\n      if (this._hasMouseInteraction || this._hasKeyboardInteraction) {\n        return;\n      }\n\n      this._timeout = setTimeout(() => {\n        this.hide();\n      }, this._config.delay);\n    }\n\n    _onInteraction(event, isInteracting) {\n      switch (event.type) {\n        case 'mouseover':\n        case 'mouseout':\n          this._hasMouseInteraction = isInteracting;\n          break;\n\n        case 'focusin':\n        case 'focusout':\n          this._hasKeyboardInteraction = isInteracting;\n          break;\n      }\n\n      if (isInteracting) {\n        this._clearTimeout();\n\n        return;\n      }\n\n      const nextElement = event.relatedTarget;\n\n      if (this._element === nextElement || this._element.contains(nextElement)) {\n        return;\n      }\n\n      this._maybeScheduleHide();\n    }\n\n    _setListeners() {\n      EventHandler.on(this._element, EVENT_CLICK_DISMISS, SELECTOR_DATA_DISMISS, () => this.hide());\n      EventHandler.on(this._element, EVENT_MOUSEOVER, event => this._onInteraction(event, true));\n      EventHandler.on(this._element, EVENT_MOUSEOUT, event => this._onInteraction(event, false));\n      EventHandler.on(this._element, EVENT_FOCUSIN, event => this._onInteraction(event, true));\n      EventHandler.on(this._element, EVENT_FOCUSOUT, event => this._onInteraction(event, false));\n    }\n\n    _clearTimeout() {\n      clearTimeout(this._timeout);\n      this._timeout = null;\n    } // Static\n\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = Toast.getOrCreateInstance(this, config);\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(`No method named \"${config}\"`);\n          }\n\n          data[config](this);\n        }\n      });\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Toast to jQuery only if jQuery is present\n   */\n\n\n  defineJQueryPlugin(Toast);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): index.umd.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  var index_umd = {\n    Alert,\n    Button,\n    Carousel,\n    Collapse,\n    Dropdown,\n    Modal,\n    Offcanvas,\n    Popover,\n    ScrollSpy,\n    Tab,\n    Toast,\n    Tooltip\n  };\n\n  return index_umd;\n\n})));\n//# sourceMappingURL=bootstrap.bundle.js.map\n"
  },
  {
    "path": "src/sourceDev.WebApp/SharedThemes/journal/wwwroot/js/bootstrap.esm.js",
    "content": "/*!\n  * Bootstrap v5.0.2 (https://getbootstrap.com/)\n  * Copyright 2011-2021 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)\n  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n  */\nimport * as Popper from '@popperjs/core';\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): dom/selector-engine.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\nconst NODE_TEXT = 3;\nconst SelectorEngine = {\n  find(selector, element = document.documentElement) {\n    return [].concat(...Element.prototype.querySelectorAll.call(element, selector));\n  },\n\n  findOne(selector, element = document.documentElement) {\n    return Element.prototype.querySelector.call(element, selector);\n  },\n\n  children(element, selector) {\n    return [].concat(...element.children).filter(child => child.matches(selector));\n  },\n\n  parents(element, selector) {\n    const parents = [];\n    let ancestor = element.parentNode;\n\n    while (ancestor && ancestor.nodeType === Node.ELEMENT_NODE && ancestor.nodeType !== NODE_TEXT) {\n      if (ancestor.matches(selector)) {\n        parents.push(ancestor);\n      }\n\n      ancestor = ancestor.parentNode;\n    }\n\n    return parents;\n  },\n\n  prev(element, selector) {\n    let previous = element.previousElementSibling;\n\n    while (previous) {\n      if (previous.matches(selector)) {\n        return [previous];\n      }\n\n      previous = previous.previousElementSibling;\n    }\n\n    return [];\n  },\n\n  next(element, selector) {\n    let next = element.nextElementSibling;\n\n    while (next) {\n      if (next.matches(selector)) {\n        return [next];\n      }\n\n      next = next.nextElementSibling;\n    }\n\n    return [];\n  }\n\n};\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): util/index.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst MAX_UID = 1000000;\nconst MILLISECONDS_MULTIPLIER = 1000;\nconst TRANSITION_END = 'transitionend'; // Shoutout AngusCroll (https://goo.gl/pxwQGp)\n\nconst toType = obj => {\n  if (obj === null || obj === undefined) {\n    return `${obj}`;\n  }\n\n  return {}.toString.call(obj).match(/\\s([a-z]+)/i)[1].toLowerCase();\n};\n/**\n * --------------------------------------------------------------------------\n * Public Util Api\n * --------------------------------------------------------------------------\n */\n\n\nconst getUID = prefix => {\n  do {\n    prefix += Math.floor(Math.random() * MAX_UID);\n  } while (document.getElementById(prefix));\n\n  return prefix;\n};\n\nconst getSelector = element => {\n  let selector = element.getAttribute('data-bs-target');\n\n  if (!selector || selector === '#') {\n    let hrefAttr = element.getAttribute('href'); // The only valid content that could double as a selector are IDs or classes,\n    // so everything starting with `#` or `.`. If a \"real\" URL is used as the selector,\n    // `document.querySelector` will rightfully complain it is invalid.\n    // See https://github.com/twbs/bootstrap/issues/32273\n\n    if (!hrefAttr || !hrefAttr.includes('#') && !hrefAttr.startsWith('.')) {\n      return null;\n    } // Just in case some CMS puts out a full URL with the anchor appended\n\n\n    if (hrefAttr.includes('#') && !hrefAttr.startsWith('#')) {\n      hrefAttr = `#${hrefAttr.split('#')[1]}`;\n    }\n\n    selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : null;\n  }\n\n  return selector;\n};\n\nconst getSelectorFromElement = element => {\n  const selector = getSelector(element);\n\n  if (selector) {\n    return document.querySelector(selector) ? selector : null;\n  }\n\n  return null;\n};\n\nconst getElementFromSelector = element => {\n  const selector = getSelector(element);\n  return selector ? document.querySelector(selector) : null;\n};\n\nconst getTransitionDurationFromElement = element => {\n  if (!element) {\n    return 0;\n  } // Get transition-duration of the element\n\n\n  let {\n    transitionDuration,\n    transitionDelay\n  } = window.getComputedStyle(element);\n  const floatTransitionDuration = Number.parseFloat(transitionDuration);\n  const floatTransitionDelay = Number.parseFloat(transitionDelay); // Return 0 if element or transition duration is not found\n\n  if (!floatTransitionDuration && !floatTransitionDelay) {\n    return 0;\n  } // If multiple durations are defined, take the first\n\n\n  transitionDuration = transitionDuration.split(',')[0];\n  transitionDelay = transitionDelay.split(',')[0];\n  return (Number.parseFloat(transitionDuration) + Number.parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER;\n};\n\nconst triggerTransitionEnd = element => {\n  element.dispatchEvent(new Event(TRANSITION_END));\n};\n\nconst isElement = obj => {\n  if (!obj || typeof obj !== 'object') {\n    return false;\n  }\n\n  if (typeof obj.jquery !== 'undefined') {\n    obj = obj[0];\n  }\n\n  return typeof obj.nodeType !== 'undefined';\n};\n\nconst getElement = obj => {\n  if (isElement(obj)) {\n    // it's a jQuery object or a node element\n    return obj.jquery ? obj[0] : obj;\n  }\n\n  if (typeof obj === 'string' && obj.length > 0) {\n    return SelectorEngine.findOne(obj);\n  }\n\n  return null;\n};\n\nconst typeCheckConfig = (componentName, config, configTypes) => {\n  Object.keys(configTypes).forEach(property => {\n    const expectedTypes = configTypes[property];\n    const value = config[property];\n    const valueType = value && isElement(value) ? 'element' : toType(value);\n\n    if (!new RegExp(expectedTypes).test(valueType)) {\n      throw new TypeError(`${componentName.toUpperCase()}: Option \"${property}\" provided type \"${valueType}\" but expected type \"${expectedTypes}\".`);\n    }\n  });\n};\n\nconst isVisible = element => {\n  if (!isElement(element) || element.getClientRects().length === 0) {\n    return false;\n  }\n\n  return getComputedStyle(element).getPropertyValue('visibility') === 'visible';\n};\n\nconst isDisabled = element => {\n  if (!element || element.nodeType !== Node.ELEMENT_NODE) {\n    return true;\n  }\n\n  if (element.classList.contains('disabled')) {\n    return true;\n  }\n\n  if (typeof element.disabled !== 'undefined') {\n    return element.disabled;\n  }\n\n  return element.hasAttribute('disabled') && element.getAttribute('disabled') !== 'false';\n};\n\nconst findShadowRoot = element => {\n  if (!document.documentElement.attachShadow) {\n    return null;\n  } // Can find the shadow root otherwise it'll return the document\n\n\n  if (typeof element.getRootNode === 'function') {\n    const root = element.getRootNode();\n    return root instanceof ShadowRoot ? root : null;\n  }\n\n  if (element instanceof ShadowRoot) {\n    return element;\n  } // when we don't find a shadow root\n\n\n  if (!element.parentNode) {\n    return null;\n  }\n\n  return findShadowRoot(element.parentNode);\n};\n\nconst noop = () => {};\n\nconst reflow = element => element.offsetHeight;\n\nconst getjQuery = () => {\n  const {\n    jQuery\n  } = window;\n\n  if (jQuery && !document.body.hasAttribute('data-bs-no-jquery')) {\n    return jQuery;\n  }\n\n  return null;\n};\n\nconst DOMContentLoadedCallbacks = [];\n\nconst onDOMContentLoaded = callback => {\n  if (document.readyState === 'loading') {\n    // add listener on the first call when the document is in loading state\n    if (!DOMContentLoadedCallbacks.length) {\n      document.addEventListener('DOMContentLoaded', () => {\n        DOMContentLoadedCallbacks.forEach(callback => callback());\n      });\n    }\n\n    DOMContentLoadedCallbacks.push(callback);\n  } else {\n    callback();\n  }\n};\n\nconst isRTL = () => document.documentElement.dir === 'rtl';\n\nconst defineJQueryPlugin = plugin => {\n  onDOMContentLoaded(() => {\n    const $ = getjQuery();\n    /* istanbul ignore if */\n\n    if ($) {\n      const name = plugin.NAME;\n      const JQUERY_NO_CONFLICT = $.fn[name];\n      $.fn[name] = plugin.jQueryInterface;\n      $.fn[name].Constructor = plugin;\n\n      $.fn[name].noConflict = () => {\n        $.fn[name] = JQUERY_NO_CONFLICT;\n        return plugin.jQueryInterface;\n      };\n    }\n  });\n};\n\nconst execute = callback => {\n  if (typeof callback === 'function') {\n    callback();\n  }\n};\n\nconst executeAfterTransition = (callback, transitionElement, waitForTransition = true) => {\n  if (!waitForTransition) {\n    execute(callback);\n    return;\n  }\n\n  const durationPadding = 5;\n  const emulatedDuration = getTransitionDurationFromElement(transitionElement) + durationPadding;\n  let called = false;\n\n  const handler = ({\n    target\n  }) => {\n    if (target !== transitionElement) {\n      return;\n    }\n\n    called = true;\n    transitionElement.removeEventListener(TRANSITION_END, handler);\n    execute(callback);\n  };\n\n  transitionElement.addEventListener(TRANSITION_END, handler);\n  setTimeout(() => {\n    if (!called) {\n      triggerTransitionEnd(transitionElement);\n    }\n  }, emulatedDuration);\n};\n/**\n * Return the previous/next element of a list.\n *\n * @param {array} list    The list of elements\n * @param activeElement   The active element\n * @param shouldGetNext   Choose to get next or previous element\n * @param isCycleAllowed\n * @return {Element|elem} The proper element\n */\n\n\nconst getNextActiveElement = (list, activeElement, shouldGetNext, isCycleAllowed) => {\n  let index = list.indexOf(activeElement); // if the element does not exist in the list return an element depending on the direction and if cycle is allowed\n\n  if (index === -1) {\n    return list[!shouldGetNext && isCycleAllowed ? list.length - 1 : 0];\n  }\n\n  const listLength = list.length;\n  index += shouldGetNext ? 1 : -1;\n\n  if (isCycleAllowed) {\n    index = (index + listLength) % listLength;\n  }\n\n  return list[Math.max(0, Math.min(index, listLength - 1))];\n};\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): dom/event-handler.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst namespaceRegex = /[^.]*(?=\\..*)\\.|.*/;\nconst stripNameRegex = /\\..*/;\nconst stripUidRegex = /::\\d+$/;\nconst eventRegistry = {}; // Events storage\n\nlet uidEvent = 1;\nconst customEvents = {\n  mouseenter: 'mouseover',\n  mouseleave: 'mouseout'\n};\nconst customEventsRegex = /^(mouseenter|mouseleave)/i;\nconst nativeEvents = new Set(['click', 'dblclick', 'mouseup', 'mousedown', 'contextmenu', 'mousewheel', 'DOMMouseScroll', 'mouseover', 'mouseout', 'mousemove', 'selectstart', 'selectend', 'keydown', 'keypress', 'keyup', 'orientationchange', 'touchstart', 'touchmove', 'touchend', 'touchcancel', 'pointerdown', 'pointermove', 'pointerup', 'pointerleave', 'pointercancel', 'gesturestart', 'gesturechange', 'gestureend', 'focus', 'blur', 'change', 'reset', 'select', 'submit', 'focusin', 'focusout', 'load', 'unload', 'beforeunload', 'resize', 'move', 'DOMContentLoaded', 'readystatechange', 'error', 'abort', 'scroll']);\n/**\n * ------------------------------------------------------------------------\n * Private methods\n * ------------------------------------------------------------------------\n */\n\nfunction getUidEvent(element, uid) {\n  return uid && `${uid}::${uidEvent++}` || element.uidEvent || uidEvent++;\n}\n\nfunction getEvent(element) {\n  const uid = getUidEvent(element);\n  element.uidEvent = uid;\n  eventRegistry[uid] = eventRegistry[uid] || {};\n  return eventRegistry[uid];\n}\n\nfunction bootstrapHandler(element, fn) {\n  return function handler(event) {\n    event.delegateTarget = element;\n\n    if (handler.oneOff) {\n      EventHandler.off(element, event.type, fn);\n    }\n\n    return fn.apply(element, [event]);\n  };\n}\n\nfunction bootstrapDelegationHandler(element, selector, fn) {\n  return function handler(event) {\n    const domElements = element.querySelectorAll(selector);\n\n    for (let {\n      target\n    } = event; target && target !== this; target = target.parentNode) {\n      for (let i = domElements.length; i--;) {\n        if (domElements[i] === target) {\n          event.delegateTarget = target;\n\n          if (handler.oneOff) {\n            // eslint-disable-next-line unicorn/consistent-destructuring\n            EventHandler.off(element, event.type, selector, fn);\n          }\n\n          return fn.apply(target, [event]);\n        }\n      }\n    } // To please ESLint\n\n\n    return null;\n  };\n}\n\nfunction findHandler(events, handler, delegationSelector = null) {\n  const uidEventList = Object.keys(events);\n\n  for (let i = 0, len = uidEventList.length; i < len; i++) {\n    const event = events[uidEventList[i]];\n\n    if (event.originalHandler === handler && event.delegationSelector === delegationSelector) {\n      return event;\n    }\n  }\n\n  return null;\n}\n\nfunction normalizeParams(originalTypeEvent, handler, delegationFn) {\n  const delegation = typeof handler === 'string';\n  const originalHandler = delegation ? delegationFn : handler;\n  let typeEvent = getTypeEvent(originalTypeEvent);\n  const isNative = nativeEvents.has(typeEvent);\n\n  if (!isNative) {\n    typeEvent = originalTypeEvent;\n  }\n\n  return [delegation, originalHandler, typeEvent];\n}\n\nfunction addHandler(element, originalTypeEvent, handler, delegationFn, oneOff) {\n  if (typeof originalTypeEvent !== 'string' || !element) {\n    return;\n  }\n\n  if (!handler) {\n    handler = delegationFn;\n    delegationFn = null;\n  } // in case of mouseenter or mouseleave wrap the handler within a function that checks for its DOM position\n  // this prevents the handler from being dispatched the same way as mouseover or mouseout does\n\n\n  if (customEventsRegex.test(originalTypeEvent)) {\n    const wrapFn = fn => {\n      return function (event) {\n        if (!event.relatedTarget || event.relatedTarget !== event.delegateTarget && !event.delegateTarget.contains(event.relatedTarget)) {\n          return fn.call(this, event);\n        }\n      };\n    };\n\n    if (delegationFn) {\n      delegationFn = wrapFn(delegationFn);\n    } else {\n      handler = wrapFn(handler);\n    }\n  }\n\n  const [delegation, originalHandler, typeEvent] = normalizeParams(originalTypeEvent, handler, delegationFn);\n  const events = getEvent(element);\n  const handlers = events[typeEvent] || (events[typeEvent] = {});\n  const previousFn = findHandler(handlers, originalHandler, delegation ? handler : null);\n\n  if (previousFn) {\n    previousFn.oneOff = previousFn.oneOff && oneOff;\n    return;\n  }\n\n  const uid = getUidEvent(originalHandler, originalTypeEvent.replace(namespaceRegex, ''));\n  const fn = delegation ? bootstrapDelegationHandler(element, handler, delegationFn) : bootstrapHandler(element, handler);\n  fn.delegationSelector = delegation ? handler : null;\n  fn.originalHandler = originalHandler;\n  fn.oneOff = oneOff;\n  fn.uidEvent = uid;\n  handlers[uid] = fn;\n  element.addEventListener(typeEvent, fn, delegation);\n}\n\nfunction removeHandler(element, events, typeEvent, handler, delegationSelector) {\n  const fn = findHandler(events[typeEvent], handler, delegationSelector);\n\n  if (!fn) {\n    return;\n  }\n\n  element.removeEventListener(typeEvent, fn, Boolean(delegationSelector));\n  delete events[typeEvent][fn.uidEvent];\n}\n\nfunction removeNamespacedHandlers(element, events, typeEvent, namespace) {\n  const storeElementEvent = events[typeEvent] || {};\n  Object.keys(storeElementEvent).forEach(handlerKey => {\n    if (handlerKey.includes(namespace)) {\n      const event = storeElementEvent[handlerKey];\n      removeHandler(element, events, typeEvent, event.originalHandler, event.delegationSelector);\n    }\n  });\n}\n\nfunction getTypeEvent(event) {\n  // allow to get the native events from namespaced events ('click.bs.button' --> 'click')\n  event = event.replace(stripNameRegex, '');\n  return customEvents[event] || event;\n}\n\nconst EventHandler = {\n  on(element, event, handler, delegationFn) {\n    addHandler(element, event, handler, delegationFn, false);\n  },\n\n  one(element, event, handler, delegationFn) {\n    addHandler(element, event, handler, delegationFn, true);\n  },\n\n  off(element, originalTypeEvent, handler, delegationFn) {\n    if (typeof originalTypeEvent !== 'string' || !element) {\n      return;\n    }\n\n    const [delegation, originalHandler, typeEvent] = normalizeParams(originalTypeEvent, handler, delegationFn);\n    const inNamespace = typeEvent !== originalTypeEvent;\n    const events = getEvent(element);\n    const isNamespace = originalTypeEvent.startsWith('.');\n\n    if (typeof originalHandler !== 'undefined') {\n      // Simplest case: handler is passed, remove that listener ONLY.\n      if (!events || !events[typeEvent]) {\n        return;\n      }\n\n      removeHandler(element, events, typeEvent, originalHandler, delegation ? handler : null);\n      return;\n    }\n\n    if (isNamespace) {\n      Object.keys(events).forEach(elementEvent => {\n        removeNamespacedHandlers(element, events, elementEvent, originalTypeEvent.slice(1));\n      });\n    }\n\n    const storeElementEvent = events[typeEvent] || {};\n    Object.keys(storeElementEvent).forEach(keyHandlers => {\n      const handlerKey = keyHandlers.replace(stripUidRegex, '');\n\n      if (!inNamespace || originalTypeEvent.includes(handlerKey)) {\n        const event = storeElementEvent[keyHandlers];\n        removeHandler(element, events, typeEvent, event.originalHandler, event.delegationSelector);\n      }\n    });\n  },\n\n  trigger(element, event, args) {\n    if (typeof event !== 'string' || !element) {\n      return null;\n    }\n\n    const $ = getjQuery();\n    const typeEvent = getTypeEvent(event);\n    const inNamespace = event !== typeEvent;\n    const isNative = nativeEvents.has(typeEvent);\n    let jQueryEvent;\n    let bubbles = true;\n    let nativeDispatch = true;\n    let defaultPrevented = false;\n    let evt = null;\n\n    if (inNamespace && $) {\n      jQueryEvent = $.Event(event, args);\n      $(element).trigger(jQueryEvent);\n      bubbles = !jQueryEvent.isPropagationStopped();\n      nativeDispatch = !jQueryEvent.isImmediatePropagationStopped();\n      defaultPrevented = jQueryEvent.isDefaultPrevented();\n    }\n\n    if (isNative) {\n      evt = document.createEvent('HTMLEvents');\n      evt.initEvent(typeEvent, bubbles, true);\n    } else {\n      evt = new CustomEvent(event, {\n        bubbles,\n        cancelable: true\n      });\n    } // merge custom information in our event\n\n\n    if (typeof args !== 'undefined') {\n      Object.keys(args).forEach(key => {\n        Object.defineProperty(evt, key, {\n          get() {\n            return args[key];\n          }\n\n        });\n      });\n    }\n\n    if (defaultPrevented) {\n      evt.preventDefault();\n    }\n\n    if (nativeDispatch) {\n      element.dispatchEvent(evt);\n    }\n\n    if (evt.defaultPrevented && typeof jQueryEvent !== 'undefined') {\n      jQueryEvent.preventDefault();\n    }\n\n    return evt;\n  }\n\n};\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): dom/data.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\nconst elementMap = new Map();\nvar Data = {\n  set(element, key, instance) {\n    if (!elementMap.has(element)) {\n      elementMap.set(element, new Map());\n    }\n\n    const instanceMap = elementMap.get(element); // make it clear we only want one instance per element\n    // can be removed later when multiple key/instances are fine to be used\n\n    if (!instanceMap.has(key) && instanceMap.size !== 0) {\n      // eslint-disable-next-line no-console\n      console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(instanceMap.keys())[0]}.`);\n      return;\n    }\n\n    instanceMap.set(key, instance);\n  },\n\n  get(element, key) {\n    if (elementMap.has(element)) {\n      return elementMap.get(element).get(key) || null;\n    }\n\n    return null;\n  },\n\n  remove(element, key) {\n    if (!elementMap.has(element)) {\n      return;\n    }\n\n    const instanceMap = elementMap.get(element);\n    instanceMap.delete(key); // free up element references if there are no instances left for an element\n\n    if (instanceMap.size === 0) {\n      elementMap.delete(element);\n    }\n  }\n\n};\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): base-component.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst VERSION = '5.0.2';\n\nclass BaseComponent {\n  constructor(element) {\n    element = getElement(element);\n\n    if (!element) {\n      return;\n    }\n\n    this._element = element;\n    Data.set(this._element, this.constructor.DATA_KEY, this);\n  }\n\n  dispose() {\n    Data.remove(this._element, this.constructor.DATA_KEY);\n    EventHandler.off(this._element, this.constructor.EVENT_KEY);\n    Object.getOwnPropertyNames(this).forEach(propertyName => {\n      this[propertyName] = null;\n    });\n  }\n\n  _queueCallback(callback, element, isAnimated = true) {\n    executeAfterTransition(callback, element, isAnimated);\n  }\n  /** Static */\n\n\n  static getInstance(element) {\n    return Data.get(element, this.DATA_KEY);\n  }\n\n  static getOrCreateInstance(element, config = {}) {\n    return this.getInstance(element) || new this(element, typeof config === 'object' ? config : null);\n  }\n\n  static get VERSION() {\n    return VERSION;\n  }\n\n  static get NAME() {\n    throw new Error('You have to implement the static method \"NAME\", for each component!');\n  }\n\n  static get DATA_KEY() {\n    return `bs.${this.NAME}`;\n  }\n\n  static get EVENT_KEY() {\n    return `.${this.DATA_KEY}`;\n  }\n\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): alert.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$c = 'alert';\nconst DATA_KEY$b = 'bs.alert';\nconst EVENT_KEY$b = `.${DATA_KEY$b}`;\nconst DATA_API_KEY$8 = '.data-api';\nconst SELECTOR_DISMISS = '[data-bs-dismiss=\"alert\"]';\nconst EVENT_CLOSE = `close${EVENT_KEY$b}`;\nconst EVENT_CLOSED = `closed${EVENT_KEY$b}`;\nconst EVENT_CLICK_DATA_API$7 = `click${EVENT_KEY$b}${DATA_API_KEY$8}`;\nconst CLASS_NAME_ALERT = 'alert';\nconst CLASS_NAME_FADE$6 = 'fade';\nconst CLASS_NAME_SHOW$9 = 'show';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Alert extends BaseComponent {\n  // Getters\n  static get NAME() {\n    return NAME$c;\n  } // Public\n\n\n  close(element) {\n    const rootElement = element ? this._getRootElement(element) : this._element;\n\n    const customEvent = this._triggerCloseEvent(rootElement);\n\n    if (customEvent === null || customEvent.defaultPrevented) {\n      return;\n    }\n\n    this._removeElement(rootElement);\n  } // Private\n\n\n  _getRootElement(element) {\n    return getElementFromSelector(element) || element.closest(`.${CLASS_NAME_ALERT}`);\n  }\n\n  _triggerCloseEvent(element) {\n    return EventHandler.trigger(element, EVENT_CLOSE);\n  }\n\n  _removeElement(element) {\n    element.classList.remove(CLASS_NAME_SHOW$9);\n    const isAnimated = element.classList.contains(CLASS_NAME_FADE$6);\n\n    this._queueCallback(() => this._destroyElement(element), element, isAnimated);\n  }\n\n  _destroyElement(element) {\n    element.remove();\n    EventHandler.trigger(element, EVENT_CLOSED);\n  } // Static\n\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Alert.getOrCreateInstance(this);\n\n      if (config === 'close') {\n        data[config](this);\n      }\n    });\n  }\n\n  static handleDismiss(alertInstance) {\n    return function (event) {\n      if (event) {\n        event.preventDefault();\n      }\n\n      alertInstance.close(this);\n    };\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$7, SELECTOR_DISMISS, Alert.handleDismiss(new Alert()));\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Alert to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Alert);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): button.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$b = 'button';\nconst DATA_KEY$a = 'bs.button';\nconst EVENT_KEY$a = `.${DATA_KEY$a}`;\nconst DATA_API_KEY$7 = '.data-api';\nconst CLASS_NAME_ACTIVE$3 = 'active';\nconst SELECTOR_DATA_TOGGLE$5 = '[data-bs-toggle=\"button\"]';\nconst EVENT_CLICK_DATA_API$6 = `click${EVENT_KEY$a}${DATA_API_KEY$7}`;\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Button extends BaseComponent {\n  // Getters\n  static get NAME() {\n    return NAME$b;\n  } // Public\n\n\n  toggle() {\n    // Toggle class and sync the `aria-pressed` attribute with the return value of the `.toggle()` method\n    this._element.setAttribute('aria-pressed', this._element.classList.toggle(CLASS_NAME_ACTIVE$3));\n  } // Static\n\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Button.getOrCreateInstance(this);\n\n      if (config === 'toggle') {\n        data[config]();\n      }\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$6, SELECTOR_DATA_TOGGLE$5, event => {\n  event.preventDefault();\n  const button = event.target.closest(SELECTOR_DATA_TOGGLE$5);\n  const data = Button.getOrCreateInstance(button);\n  data.toggle();\n});\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Button to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Button);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): dom/manipulator.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\nfunction normalizeData(val) {\n  if (val === 'true') {\n    return true;\n  }\n\n  if (val === 'false') {\n    return false;\n  }\n\n  if (val === Number(val).toString()) {\n    return Number(val);\n  }\n\n  if (val === '' || val === 'null') {\n    return null;\n  }\n\n  return val;\n}\n\nfunction normalizeDataKey(key) {\n  return key.replace(/[A-Z]/g, chr => `-${chr.toLowerCase()}`);\n}\n\nconst Manipulator = {\n  setDataAttribute(element, key, value) {\n    element.setAttribute(`data-bs-${normalizeDataKey(key)}`, value);\n  },\n\n  removeDataAttribute(element, key) {\n    element.removeAttribute(`data-bs-${normalizeDataKey(key)}`);\n  },\n\n  getDataAttributes(element) {\n    if (!element) {\n      return {};\n    }\n\n    const attributes = {};\n    Object.keys(element.dataset).filter(key => key.startsWith('bs')).forEach(key => {\n      let pureKey = key.replace(/^bs/, '');\n      pureKey = pureKey.charAt(0).toLowerCase() + pureKey.slice(1, pureKey.length);\n      attributes[pureKey] = normalizeData(element.dataset[key]);\n    });\n    return attributes;\n  },\n\n  getDataAttribute(element, key) {\n    return normalizeData(element.getAttribute(`data-bs-${normalizeDataKey(key)}`));\n  },\n\n  offset(element) {\n    const rect = element.getBoundingClientRect();\n    return {\n      top: rect.top + document.body.scrollTop,\n      left: rect.left + document.body.scrollLeft\n    };\n  },\n\n  position(element) {\n    return {\n      top: element.offsetTop,\n      left: element.offsetLeft\n    };\n  }\n\n};\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): carousel.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$a = 'carousel';\nconst DATA_KEY$9 = 'bs.carousel';\nconst EVENT_KEY$9 = `.${DATA_KEY$9}`;\nconst DATA_API_KEY$6 = '.data-api';\nconst ARROW_LEFT_KEY = 'ArrowLeft';\nconst ARROW_RIGHT_KEY = 'ArrowRight';\nconst TOUCHEVENT_COMPAT_WAIT = 500; // Time for mouse compat events to fire after touch\n\nconst SWIPE_THRESHOLD = 40;\nconst Default$9 = {\n  interval: 5000,\n  keyboard: true,\n  slide: false,\n  pause: 'hover',\n  wrap: true,\n  touch: true\n};\nconst DefaultType$9 = {\n  interval: '(number|boolean)',\n  keyboard: 'boolean',\n  slide: '(boolean|string)',\n  pause: '(string|boolean)',\n  wrap: 'boolean',\n  touch: 'boolean'\n};\nconst ORDER_NEXT = 'next';\nconst ORDER_PREV = 'prev';\nconst DIRECTION_LEFT = 'left';\nconst DIRECTION_RIGHT = 'right';\nconst KEY_TO_DIRECTION = {\n  [ARROW_LEFT_KEY]: DIRECTION_RIGHT,\n  [ARROW_RIGHT_KEY]: DIRECTION_LEFT\n};\nconst EVENT_SLIDE = `slide${EVENT_KEY$9}`;\nconst EVENT_SLID = `slid${EVENT_KEY$9}`;\nconst EVENT_KEYDOWN = `keydown${EVENT_KEY$9}`;\nconst EVENT_MOUSEENTER = `mouseenter${EVENT_KEY$9}`;\nconst EVENT_MOUSELEAVE = `mouseleave${EVENT_KEY$9}`;\nconst EVENT_TOUCHSTART = `touchstart${EVENT_KEY$9}`;\nconst EVENT_TOUCHMOVE = `touchmove${EVENT_KEY$9}`;\nconst EVENT_TOUCHEND = `touchend${EVENT_KEY$9}`;\nconst EVENT_POINTERDOWN = `pointerdown${EVENT_KEY$9}`;\nconst EVENT_POINTERUP = `pointerup${EVENT_KEY$9}`;\nconst EVENT_DRAG_START = `dragstart${EVENT_KEY$9}`;\nconst EVENT_LOAD_DATA_API$2 = `load${EVENT_KEY$9}${DATA_API_KEY$6}`;\nconst EVENT_CLICK_DATA_API$5 = `click${EVENT_KEY$9}${DATA_API_KEY$6}`;\nconst CLASS_NAME_CAROUSEL = 'carousel';\nconst CLASS_NAME_ACTIVE$2 = 'active';\nconst CLASS_NAME_SLIDE = 'slide';\nconst CLASS_NAME_END = 'carousel-item-end';\nconst CLASS_NAME_START = 'carousel-item-start';\nconst CLASS_NAME_NEXT = 'carousel-item-next';\nconst CLASS_NAME_PREV = 'carousel-item-prev';\nconst CLASS_NAME_POINTER_EVENT = 'pointer-event';\nconst SELECTOR_ACTIVE$1 = '.active';\nconst SELECTOR_ACTIVE_ITEM = '.active.carousel-item';\nconst SELECTOR_ITEM = '.carousel-item';\nconst SELECTOR_ITEM_IMG = '.carousel-item img';\nconst SELECTOR_NEXT_PREV = '.carousel-item-next, .carousel-item-prev';\nconst SELECTOR_INDICATORS = '.carousel-indicators';\nconst SELECTOR_INDICATOR = '[data-bs-target]';\nconst SELECTOR_DATA_SLIDE = '[data-bs-slide], [data-bs-slide-to]';\nconst SELECTOR_DATA_RIDE = '[data-bs-ride=\"carousel\"]';\nconst POINTER_TYPE_TOUCH = 'touch';\nconst POINTER_TYPE_PEN = 'pen';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Carousel extends BaseComponent {\n  constructor(element, config) {\n    super(element);\n    this._items = null;\n    this._interval = null;\n    this._activeElement = null;\n    this._isPaused = false;\n    this._isSliding = false;\n    this.touchTimeout = null;\n    this.touchStartX = 0;\n    this.touchDeltaX = 0;\n    this._config = this._getConfig(config);\n    this._indicatorsElement = SelectorEngine.findOne(SELECTOR_INDICATORS, this._element);\n    this._touchSupported = 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0;\n    this._pointerEvent = Boolean(window.PointerEvent);\n\n    this._addEventListeners();\n  } // Getters\n\n\n  static get Default() {\n    return Default$9;\n  }\n\n  static get NAME() {\n    return NAME$a;\n  } // Public\n\n\n  next() {\n    this._slide(ORDER_NEXT);\n  }\n\n  nextWhenVisible() {\n    // Don't call next when the page isn't visible\n    // or the carousel or its parent isn't visible\n    if (!document.hidden && isVisible(this._element)) {\n      this.next();\n    }\n  }\n\n  prev() {\n    this._slide(ORDER_PREV);\n  }\n\n  pause(event) {\n    if (!event) {\n      this._isPaused = true;\n    }\n\n    if (SelectorEngine.findOne(SELECTOR_NEXT_PREV, this._element)) {\n      triggerTransitionEnd(this._element);\n      this.cycle(true);\n    }\n\n    clearInterval(this._interval);\n    this._interval = null;\n  }\n\n  cycle(event) {\n    if (!event) {\n      this._isPaused = false;\n    }\n\n    if (this._interval) {\n      clearInterval(this._interval);\n      this._interval = null;\n    }\n\n    if (this._config && this._config.interval && !this._isPaused) {\n      this._updateInterval();\n\n      this._interval = setInterval((document.visibilityState ? this.nextWhenVisible : this.next).bind(this), this._config.interval);\n    }\n  }\n\n  to(index) {\n    this._activeElement = SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element);\n\n    const activeIndex = this._getItemIndex(this._activeElement);\n\n    if (index > this._items.length - 1 || index < 0) {\n      return;\n    }\n\n    if (this._isSliding) {\n      EventHandler.one(this._element, EVENT_SLID, () => this.to(index));\n      return;\n    }\n\n    if (activeIndex === index) {\n      this.pause();\n      this.cycle();\n      return;\n    }\n\n    const order = index > activeIndex ? ORDER_NEXT : ORDER_PREV;\n\n    this._slide(order, this._items[index]);\n  } // Private\n\n\n  _getConfig(config) {\n    config = { ...Default$9,\n      ...Manipulator.getDataAttributes(this._element),\n      ...(typeof config === 'object' ? config : {})\n    };\n    typeCheckConfig(NAME$a, config, DefaultType$9);\n    return config;\n  }\n\n  _handleSwipe() {\n    const absDeltax = Math.abs(this.touchDeltaX);\n\n    if (absDeltax <= SWIPE_THRESHOLD) {\n      return;\n    }\n\n    const direction = absDeltax / this.touchDeltaX;\n    this.touchDeltaX = 0;\n\n    if (!direction) {\n      return;\n    }\n\n    this._slide(direction > 0 ? DIRECTION_RIGHT : DIRECTION_LEFT);\n  }\n\n  _addEventListeners() {\n    if (this._config.keyboard) {\n      EventHandler.on(this._element, EVENT_KEYDOWN, event => this._keydown(event));\n    }\n\n    if (this._config.pause === 'hover') {\n      EventHandler.on(this._element, EVENT_MOUSEENTER, event => this.pause(event));\n      EventHandler.on(this._element, EVENT_MOUSELEAVE, event => this.cycle(event));\n    }\n\n    if (this._config.touch && this._touchSupported) {\n      this._addTouchEventListeners();\n    }\n  }\n\n  _addTouchEventListeners() {\n    const start = event => {\n      if (this._pointerEvent && (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH)) {\n        this.touchStartX = event.clientX;\n      } else if (!this._pointerEvent) {\n        this.touchStartX = event.touches[0].clientX;\n      }\n    };\n\n    const move = event => {\n      // ensure swiping with one touch and not pinching\n      this.touchDeltaX = event.touches && event.touches.length > 1 ? 0 : event.touches[0].clientX - this.touchStartX;\n    };\n\n    const end = event => {\n      if (this._pointerEvent && (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH)) {\n        this.touchDeltaX = event.clientX - this.touchStartX;\n      }\n\n      this._handleSwipe();\n\n      if (this._config.pause === 'hover') {\n        // If it's a touch-enabled device, mouseenter/leave are fired as\n        // part of the mouse compatibility events on first tap - the carousel\n        // would stop cycling until user tapped out of it;\n        // here, we listen for touchend, explicitly pause the carousel\n        // (as if it's the second time we tap on it, mouseenter compat event\n        // is NOT fired) and after a timeout (to allow for mouse compatibility\n        // events to fire) we explicitly restart cycling\n        this.pause();\n\n        if (this.touchTimeout) {\n          clearTimeout(this.touchTimeout);\n        }\n\n        this.touchTimeout = setTimeout(event => this.cycle(event), TOUCHEVENT_COMPAT_WAIT + this._config.interval);\n      }\n    };\n\n    SelectorEngine.find(SELECTOR_ITEM_IMG, this._element).forEach(itemImg => {\n      EventHandler.on(itemImg, EVENT_DRAG_START, e => e.preventDefault());\n    });\n\n    if (this._pointerEvent) {\n      EventHandler.on(this._element, EVENT_POINTERDOWN, event => start(event));\n      EventHandler.on(this._element, EVENT_POINTERUP, event => end(event));\n\n      this._element.classList.add(CLASS_NAME_POINTER_EVENT);\n    } else {\n      EventHandler.on(this._element, EVENT_TOUCHSTART, event => start(event));\n      EventHandler.on(this._element, EVENT_TOUCHMOVE, event => move(event));\n      EventHandler.on(this._element, EVENT_TOUCHEND, event => end(event));\n    }\n  }\n\n  _keydown(event) {\n    if (/input|textarea/i.test(event.target.tagName)) {\n      return;\n    }\n\n    const direction = KEY_TO_DIRECTION[event.key];\n\n    if (direction) {\n      event.preventDefault();\n\n      this._slide(direction);\n    }\n  }\n\n  _getItemIndex(element) {\n    this._items = element && element.parentNode ? SelectorEngine.find(SELECTOR_ITEM, element.parentNode) : [];\n    return this._items.indexOf(element);\n  }\n\n  _getItemByOrder(order, activeElement) {\n    const isNext = order === ORDER_NEXT;\n    return getNextActiveElement(this._items, activeElement, isNext, this._config.wrap);\n  }\n\n  _triggerSlideEvent(relatedTarget, eventDirectionName) {\n    const targetIndex = this._getItemIndex(relatedTarget);\n\n    const fromIndex = this._getItemIndex(SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element));\n\n    return EventHandler.trigger(this._element, EVENT_SLIDE, {\n      relatedTarget,\n      direction: eventDirectionName,\n      from: fromIndex,\n      to: targetIndex\n    });\n  }\n\n  _setActiveIndicatorElement(element) {\n    if (this._indicatorsElement) {\n      const activeIndicator = SelectorEngine.findOne(SELECTOR_ACTIVE$1, this._indicatorsElement);\n      activeIndicator.classList.remove(CLASS_NAME_ACTIVE$2);\n      activeIndicator.removeAttribute('aria-current');\n      const indicators = SelectorEngine.find(SELECTOR_INDICATOR, this._indicatorsElement);\n\n      for (let i = 0; i < indicators.length; i++) {\n        if (Number.parseInt(indicators[i].getAttribute('data-bs-slide-to'), 10) === this._getItemIndex(element)) {\n          indicators[i].classList.add(CLASS_NAME_ACTIVE$2);\n          indicators[i].setAttribute('aria-current', 'true');\n          break;\n        }\n      }\n    }\n  }\n\n  _updateInterval() {\n    const element = this._activeElement || SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element);\n\n    if (!element) {\n      return;\n    }\n\n    const elementInterval = Number.parseInt(element.getAttribute('data-bs-interval'), 10);\n\n    if (elementInterval) {\n      this._config.defaultInterval = this._config.defaultInterval || this._config.interval;\n      this._config.interval = elementInterval;\n    } else {\n      this._config.interval = this._config.defaultInterval || this._config.interval;\n    }\n  }\n\n  _slide(directionOrOrder, element) {\n    const order = this._directionToOrder(directionOrOrder);\n\n    const activeElement = SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element);\n\n    const activeElementIndex = this._getItemIndex(activeElement);\n\n    const nextElement = element || this._getItemByOrder(order, activeElement);\n\n    const nextElementIndex = this._getItemIndex(nextElement);\n\n    const isCycling = Boolean(this._interval);\n    const isNext = order === ORDER_NEXT;\n    const directionalClassName = isNext ? CLASS_NAME_START : CLASS_NAME_END;\n    const orderClassName = isNext ? CLASS_NAME_NEXT : CLASS_NAME_PREV;\n\n    const eventDirectionName = this._orderToDirection(order);\n\n    if (nextElement && nextElement.classList.contains(CLASS_NAME_ACTIVE$2)) {\n      this._isSliding = false;\n      return;\n    }\n\n    if (this._isSliding) {\n      return;\n    }\n\n    const slideEvent = this._triggerSlideEvent(nextElement, eventDirectionName);\n\n    if (slideEvent.defaultPrevented) {\n      return;\n    }\n\n    if (!activeElement || !nextElement) {\n      // Some weirdness is happening, so we bail\n      return;\n    }\n\n    this._isSliding = true;\n\n    if (isCycling) {\n      this.pause();\n    }\n\n    this._setActiveIndicatorElement(nextElement);\n\n    this._activeElement = nextElement;\n\n    const triggerSlidEvent = () => {\n      EventHandler.trigger(this._element, EVENT_SLID, {\n        relatedTarget: nextElement,\n        direction: eventDirectionName,\n        from: activeElementIndex,\n        to: nextElementIndex\n      });\n    };\n\n    if (this._element.classList.contains(CLASS_NAME_SLIDE)) {\n      nextElement.classList.add(orderClassName);\n      reflow(nextElement);\n      activeElement.classList.add(directionalClassName);\n      nextElement.classList.add(directionalClassName);\n\n      const completeCallBack = () => {\n        nextElement.classList.remove(directionalClassName, orderClassName);\n        nextElement.classList.add(CLASS_NAME_ACTIVE$2);\n        activeElement.classList.remove(CLASS_NAME_ACTIVE$2, orderClassName, directionalClassName);\n        this._isSliding = false;\n        setTimeout(triggerSlidEvent, 0);\n      };\n\n      this._queueCallback(completeCallBack, activeElement, true);\n    } else {\n      activeElement.classList.remove(CLASS_NAME_ACTIVE$2);\n      nextElement.classList.add(CLASS_NAME_ACTIVE$2);\n      this._isSliding = false;\n      triggerSlidEvent();\n    }\n\n    if (isCycling) {\n      this.cycle();\n    }\n  }\n\n  _directionToOrder(direction) {\n    if (![DIRECTION_RIGHT, DIRECTION_LEFT].includes(direction)) {\n      return direction;\n    }\n\n    if (isRTL()) {\n      return direction === DIRECTION_LEFT ? ORDER_PREV : ORDER_NEXT;\n    }\n\n    return direction === DIRECTION_LEFT ? ORDER_NEXT : ORDER_PREV;\n  }\n\n  _orderToDirection(order) {\n    if (![ORDER_NEXT, ORDER_PREV].includes(order)) {\n      return order;\n    }\n\n    if (isRTL()) {\n      return order === ORDER_PREV ? DIRECTION_LEFT : DIRECTION_RIGHT;\n    }\n\n    return order === ORDER_PREV ? DIRECTION_RIGHT : DIRECTION_LEFT;\n  } // Static\n\n\n  static carouselInterface(element, config) {\n    const data = Carousel.getOrCreateInstance(element, config);\n    let {\n      _config\n    } = data;\n\n    if (typeof config === 'object') {\n      _config = { ..._config,\n        ...config\n      };\n    }\n\n    const action = typeof config === 'string' ? config : _config.slide;\n\n    if (typeof config === 'number') {\n      data.to(config);\n    } else if (typeof action === 'string') {\n      if (typeof data[action] === 'undefined') {\n        throw new TypeError(`No method named \"${action}\"`);\n      }\n\n      data[action]();\n    } else if (_config.interval && _config.ride) {\n      data.pause();\n      data.cycle();\n    }\n  }\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      Carousel.carouselInterface(this, config);\n    });\n  }\n\n  static dataApiClickHandler(event) {\n    const target = getElementFromSelector(this);\n\n    if (!target || !target.classList.contains(CLASS_NAME_CAROUSEL)) {\n      return;\n    }\n\n    const config = { ...Manipulator.getDataAttributes(target),\n      ...Manipulator.getDataAttributes(this)\n    };\n    const slideIndex = this.getAttribute('data-bs-slide-to');\n\n    if (slideIndex) {\n      config.interval = false;\n    }\n\n    Carousel.carouselInterface(target, config);\n\n    if (slideIndex) {\n      Carousel.getInstance(target).to(slideIndex);\n    }\n\n    event.preventDefault();\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$5, SELECTOR_DATA_SLIDE, Carousel.dataApiClickHandler);\nEventHandler.on(window, EVENT_LOAD_DATA_API$2, () => {\n  const carousels = SelectorEngine.find(SELECTOR_DATA_RIDE);\n\n  for (let i = 0, len = carousels.length; i < len; i++) {\n    Carousel.carouselInterface(carousels[i], Carousel.getInstance(carousels[i]));\n  }\n});\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Carousel to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Carousel);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): collapse.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$9 = 'collapse';\nconst DATA_KEY$8 = 'bs.collapse';\nconst EVENT_KEY$8 = `.${DATA_KEY$8}`;\nconst DATA_API_KEY$5 = '.data-api';\nconst Default$8 = {\n  toggle: true,\n  parent: ''\n};\nconst DefaultType$8 = {\n  toggle: 'boolean',\n  parent: '(string|element)'\n};\nconst EVENT_SHOW$5 = `show${EVENT_KEY$8}`;\nconst EVENT_SHOWN$5 = `shown${EVENT_KEY$8}`;\nconst EVENT_HIDE$5 = `hide${EVENT_KEY$8}`;\nconst EVENT_HIDDEN$5 = `hidden${EVENT_KEY$8}`;\nconst EVENT_CLICK_DATA_API$4 = `click${EVENT_KEY$8}${DATA_API_KEY$5}`;\nconst CLASS_NAME_SHOW$8 = 'show';\nconst CLASS_NAME_COLLAPSE = 'collapse';\nconst CLASS_NAME_COLLAPSING = 'collapsing';\nconst CLASS_NAME_COLLAPSED = 'collapsed';\nconst WIDTH = 'width';\nconst HEIGHT = 'height';\nconst SELECTOR_ACTIVES = '.show, .collapsing';\nconst SELECTOR_DATA_TOGGLE$4 = '[data-bs-toggle=\"collapse\"]';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Collapse extends BaseComponent {\n  constructor(element, config) {\n    super(element);\n    this._isTransitioning = false;\n    this._config = this._getConfig(config);\n    this._triggerArray = SelectorEngine.find(`${SELECTOR_DATA_TOGGLE$4}[href=\"#${this._element.id}\"],` + `${SELECTOR_DATA_TOGGLE$4}[data-bs-target=\"#${this._element.id}\"]`);\n    const toggleList = SelectorEngine.find(SELECTOR_DATA_TOGGLE$4);\n\n    for (let i = 0, len = toggleList.length; i < len; i++) {\n      const elem = toggleList[i];\n      const selector = getSelectorFromElement(elem);\n      const filterElement = SelectorEngine.find(selector).filter(foundElem => foundElem === this._element);\n\n      if (selector !== null && filterElement.length) {\n        this._selector = selector;\n\n        this._triggerArray.push(elem);\n      }\n    }\n\n    this._parent = this._config.parent ? this._getParent() : null;\n\n    if (!this._config.parent) {\n      this._addAriaAndCollapsedClass(this._element, this._triggerArray);\n    }\n\n    if (this._config.toggle) {\n      this.toggle();\n    }\n  } // Getters\n\n\n  static get Default() {\n    return Default$8;\n  }\n\n  static get NAME() {\n    return NAME$9;\n  } // Public\n\n\n  toggle() {\n    if (this._element.classList.contains(CLASS_NAME_SHOW$8)) {\n      this.hide();\n    } else {\n      this.show();\n    }\n  }\n\n  show() {\n    if (this._isTransitioning || this._element.classList.contains(CLASS_NAME_SHOW$8)) {\n      return;\n    }\n\n    let actives;\n    let activesData;\n\n    if (this._parent) {\n      actives = SelectorEngine.find(SELECTOR_ACTIVES, this._parent).filter(elem => {\n        if (typeof this._config.parent === 'string') {\n          return elem.getAttribute('data-bs-parent') === this._config.parent;\n        }\n\n        return elem.classList.contains(CLASS_NAME_COLLAPSE);\n      });\n\n      if (actives.length === 0) {\n        actives = null;\n      }\n    }\n\n    const container = SelectorEngine.findOne(this._selector);\n\n    if (actives) {\n      const tempActiveData = actives.find(elem => container !== elem);\n      activesData = tempActiveData ? Collapse.getInstance(tempActiveData) : null;\n\n      if (activesData && activesData._isTransitioning) {\n        return;\n      }\n    }\n\n    const startEvent = EventHandler.trigger(this._element, EVENT_SHOW$5);\n\n    if (startEvent.defaultPrevented) {\n      return;\n    }\n\n    if (actives) {\n      actives.forEach(elemActive => {\n        if (container !== elemActive) {\n          Collapse.collapseInterface(elemActive, 'hide');\n        }\n\n        if (!activesData) {\n          Data.set(elemActive, DATA_KEY$8, null);\n        }\n      });\n    }\n\n    const dimension = this._getDimension();\n\n    this._element.classList.remove(CLASS_NAME_COLLAPSE);\n\n    this._element.classList.add(CLASS_NAME_COLLAPSING);\n\n    this._element.style[dimension] = 0;\n\n    if (this._triggerArray.length) {\n      this._triggerArray.forEach(element => {\n        element.classList.remove(CLASS_NAME_COLLAPSED);\n        element.setAttribute('aria-expanded', true);\n      });\n    }\n\n    this.setTransitioning(true);\n\n    const complete = () => {\n      this._element.classList.remove(CLASS_NAME_COLLAPSING);\n\n      this._element.classList.add(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$8);\n\n      this._element.style[dimension] = '';\n      this.setTransitioning(false);\n      EventHandler.trigger(this._element, EVENT_SHOWN$5);\n    };\n\n    const capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1);\n    const scrollSize = `scroll${capitalizedDimension}`;\n\n    this._queueCallback(complete, this._element, true);\n\n    this._element.style[dimension] = `${this._element[scrollSize]}px`;\n  }\n\n  hide() {\n    if (this._isTransitioning || !this._element.classList.contains(CLASS_NAME_SHOW$8)) {\n      return;\n    }\n\n    const startEvent = EventHandler.trigger(this._element, EVENT_HIDE$5);\n\n    if (startEvent.defaultPrevented) {\n      return;\n    }\n\n    const dimension = this._getDimension();\n\n    this._element.style[dimension] = `${this._element.getBoundingClientRect()[dimension]}px`;\n    reflow(this._element);\n\n    this._element.classList.add(CLASS_NAME_COLLAPSING);\n\n    this._element.classList.remove(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$8);\n\n    const triggerArrayLength = this._triggerArray.length;\n\n    if (triggerArrayLength > 0) {\n      for (let i = 0; i < triggerArrayLength; i++) {\n        const trigger = this._triggerArray[i];\n        const elem = getElementFromSelector(trigger);\n\n        if (elem && !elem.classList.contains(CLASS_NAME_SHOW$8)) {\n          trigger.classList.add(CLASS_NAME_COLLAPSED);\n          trigger.setAttribute('aria-expanded', false);\n        }\n      }\n    }\n\n    this.setTransitioning(true);\n\n    const complete = () => {\n      this.setTransitioning(false);\n\n      this._element.classList.remove(CLASS_NAME_COLLAPSING);\n\n      this._element.classList.add(CLASS_NAME_COLLAPSE);\n\n      EventHandler.trigger(this._element, EVENT_HIDDEN$5);\n    };\n\n    this._element.style[dimension] = '';\n\n    this._queueCallback(complete, this._element, true);\n  }\n\n  setTransitioning(isTransitioning) {\n    this._isTransitioning = isTransitioning;\n  } // Private\n\n\n  _getConfig(config) {\n    config = { ...Default$8,\n      ...config\n    };\n    config.toggle = Boolean(config.toggle); // Coerce string values\n\n    typeCheckConfig(NAME$9, config, DefaultType$8);\n    return config;\n  }\n\n  _getDimension() {\n    return this._element.classList.contains(WIDTH) ? WIDTH : HEIGHT;\n  }\n\n  _getParent() {\n    let {\n      parent\n    } = this._config;\n    parent = getElement(parent);\n    const selector = `${SELECTOR_DATA_TOGGLE$4}[data-bs-parent=\"${parent}\"]`;\n    SelectorEngine.find(selector, parent).forEach(element => {\n      const selected = getElementFromSelector(element);\n\n      this._addAriaAndCollapsedClass(selected, [element]);\n    });\n    return parent;\n  }\n\n  _addAriaAndCollapsedClass(element, triggerArray) {\n    if (!element || !triggerArray.length) {\n      return;\n    }\n\n    const isOpen = element.classList.contains(CLASS_NAME_SHOW$8);\n    triggerArray.forEach(elem => {\n      if (isOpen) {\n        elem.classList.remove(CLASS_NAME_COLLAPSED);\n      } else {\n        elem.classList.add(CLASS_NAME_COLLAPSED);\n      }\n\n      elem.setAttribute('aria-expanded', isOpen);\n    });\n  } // Static\n\n\n  static collapseInterface(element, config) {\n    let data = Collapse.getInstance(element);\n    const _config = { ...Default$8,\n      ...Manipulator.getDataAttributes(element),\n      ...(typeof config === 'object' && config ? config : {})\n    };\n\n    if (!data && _config.toggle && typeof config === 'string' && /show|hide/.test(config)) {\n      _config.toggle = false;\n    }\n\n    if (!data) {\n      data = new Collapse(element, _config);\n    }\n\n    if (typeof config === 'string') {\n      if (typeof data[config] === 'undefined') {\n        throw new TypeError(`No method named \"${config}\"`);\n      }\n\n      data[config]();\n    }\n  }\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      Collapse.collapseInterface(this, config);\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$4, SELECTOR_DATA_TOGGLE$4, function (event) {\n  // preventDefault only for <a> elements (which change the URL) not inside the collapsible element\n  if (event.target.tagName === 'A' || event.delegateTarget && event.delegateTarget.tagName === 'A') {\n    event.preventDefault();\n  }\n\n  const triggerData = Manipulator.getDataAttributes(this);\n  const selector = getSelectorFromElement(this);\n  const selectorElements = SelectorEngine.find(selector);\n  selectorElements.forEach(element => {\n    const data = Collapse.getInstance(element);\n    let config;\n\n    if (data) {\n      // update parent attribute\n      if (data._parent === null && typeof triggerData.parent === 'string') {\n        data._config.parent = triggerData.parent;\n        data._parent = data._getParent();\n      }\n\n      config = 'toggle';\n    } else {\n      config = triggerData;\n    }\n\n    Collapse.collapseInterface(element, config);\n  });\n});\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Collapse to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Collapse);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): dropdown.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$8 = 'dropdown';\nconst DATA_KEY$7 = 'bs.dropdown';\nconst EVENT_KEY$7 = `.${DATA_KEY$7}`;\nconst DATA_API_KEY$4 = '.data-api';\nconst ESCAPE_KEY$2 = 'Escape';\nconst SPACE_KEY = 'Space';\nconst TAB_KEY = 'Tab';\nconst ARROW_UP_KEY = 'ArrowUp';\nconst ARROW_DOWN_KEY = 'ArrowDown';\nconst RIGHT_MOUSE_BUTTON = 2; // MouseEvent.button value for the secondary button, usually the right button\n\nconst REGEXP_KEYDOWN = new RegExp(`${ARROW_UP_KEY}|${ARROW_DOWN_KEY}|${ESCAPE_KEY$2}`);\nconst EVENT_HIDE$4 = `hide${EVENT_KEY$7}`;\nconst EVENT_HIDDEN$4 = `hidden${EVENT_KEY$7}`;\nconst EVENT_SHOW$4 = `show${EVENT_KEY$7}`;\nconst EVENT_SHOWN$4 = `shown${EVENT_KEY$7}`;\nconst EVENT_CLICK = `click${EVENT_KEY$7}`;\nconst EVENT_CLICK_DATA_API$3 = `click${EVENT_KEY$7}${DATA_API_KEY$4}`;\nconst EVENT_KEYDOWN_DATA_API = `keydown${EVENT_KEY$7}${DATA_API_KEY$4}`;\nconst EVENT_KEYUP_DATA_API = `keyup${EVENT_KEY$7}${DATA_API_KEY$4}`;\nconst CLASS_NAME_SHOW$7 = 'show';\nconst CLASS_NAME_DROPUP = 'dropup';\nconst CLASS_NAME_DROPEND = 'dropend';\nconst CLASS_NAME_DROPSTART = 'dropstart';\nconst CLASS_NAME_NAVBAR = 'navbar';\nconst SELECTOR_DATA_TOGGLE$3 = '[data-bs-toggle=\"dropdown\"]';\nconst SELECTOR_MENU = '.dropdown-menu';\nconst SELECTOR_NAVBAR_NAV = '.navbar-nav';\nconst SELECTOR_VISIBLE_ITEMS = '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)';\nconst PLACEMENT_TOP = isRTL() ? 'top-end' : 'top-start';\nconst PLACEMENT_TOPEND = isRTL() ? 'top-start' : 'top-end';\nconst PLACEMENT_BOTTOM = isRTL() ? 'bottom-end' : 'bottom-start';\nconst PLACEMENT_BOTTOMEND = isRTL() ? 'bottom-start' : 'bottom-end';\nconst PLACEMENT_RIGHT = isRTL() ? 'left-start' : 'right-start';\nconst PLACEMENT_LEFT = isRTL() ? 'right-start' : 'left-start';\nconst Default$7 = {\n  offset: [0, 2],\n  boundary: 'clippingParents',\n  reference: 'toggle',\n  display: 'dynamic',\n  popperConfig: null,\n  autoClose: true\n};\nconst DefaultType$7 = {\n  offset: '(array|string|function)',\n  boundary: '(string|element)',\n  reference: '(string|element|object)',\n  display: 'string',\n  popperConfig: '(null|object|function)',\n  autoClose: '(boolean|string)'\n};\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Dropdown extends BaseComponent {\n  constructor(element, config) {\n    super(element);\n    this._popper = null;\n    this._config = this._getConfig(config);\n    this._menu = this._getMenuElement();\n    this._inNavbar = this._detectNavbar();\n\n    this._addEventListeners();\n  } // Getters\n\n\n  static get Default() {\n    return Default$7;\n  }\n\n  static get DefaultType() {\n    return DefaultType$7;\n  }\n\n  static get NAME() {\n    return NAME$8;\n  } // Public\n\n\n  toggle() {\n    if (isDisabled(this._element)) {\n      return;\n    }\n\n    const isActive = this._element.classList.contains(CLASS_NAME_SHOW$7);\n\n    if (isActive) {\n      this.hide();\n      return;\n    }\n\n    this.show();\n  }\n\n  show() {\n    if (isDisabled(this._element) || this._menu.classList.contains(CLASS_NAME_SHOW$7)) {\n      return;\n    }\n\n    const parent = Dropdown.getParentFromElement(this._element);\n    const relatedTarget = {\n      relatedTarget: this._element\n    };\n    const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$4, relatedTarget);\n\n    if (showEvent.defaultPrevented) {\n      return;\n    } // Totally disable Popper for Dropdowns in Navbar\n\n\n    if (this._inNavbar) {\n      Manipulator.setDataAttribute(this._menu, 'popper', 'none');\n    } else {\n      if (typeof Popper === 'undefined') {\n        throw new TypeError('Bootstrap\\'s dropdowns require Popper (https://popper.js.org)');\n      }\n\n      let referenceElement = this._element;\n\n      if (this._config.reference === 'parent') {\n        referenceElement = parent;\n      } else if (isElement(this._config.reference)) {\n        referenceElement = getElement(this._config.reference);\n      } else if (typeof this._config.reference === 'object') {\n        referenceElement = this._config.reference;\n      }\n\n      const popperConfig = this._getPopperConfig();\n\n      const isDisplayStatic = popperConfig.modifiers.find(modifier => modifier.name === 'applyStyles' && modifier.enabled === false);\n      this._popper = Popper.createPopper(referenceElement, this._menu, popperConfig);\n\n      if (isDisplayStatic) {\n        Manipulator.setDataAttribute(this._menu, 'popper', 'static');\n      }\n    } // If this is a touch-enabled device we add extra\n    // empty mouseover listeners to the body's immediate children;\n    // only needed because of broken event delegation on iOS\n    // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n\n\n    if ('ontouchstart' in document.documentElement && !parent.closest(SELECTOR_NAVBAR_NAV)) {\n      [].concat(...document.body.children).forEach(elem => EventHandler.on(elem, 'mouseover', noop));\n    }\n\n    this._element.focus();\n\n    this._element.setAttribute('aria-expanded', true);\n\n    this._menu.classList.toggle(CLASS_NAME_SHOW$7);\n\n    this._element.classList.toggle(CLASS_NAME_SHOW$7);\n\n    EventHandler.trigger(this._element, EVENT_SHOWN$4, relatedTarget);\n  }\n\n  hide() {\n    if (isDisabled(this._element) || !this._menu.classList.contains(CLASS_NAME_SHOW$7)) {\n      return;\n    }\n\n    const relatedTarget = {\n      relatedTarget: this._element\n    };\n\n    this._completeHide(relatedTarget);\n  }\n\n  dispose() {\n    if (this._popper) {\n      this._popper.destroy();\n    }\n\n    super.dispose();\n  }\n\n  update() {\n    this._inNavbar = this._detectNavbar();\n\n    if (this._popper) {\n      this._popper.update();\n    }\n  } // Private\n\n\n  _addEventListeners() {\n    EventHandler.on(this._element, EVENT_CLICK, event => {\n      event.preventDefault();\n      this.toggle();\n    });\n  }\n\n  _completeHide(relatedTarget) {\n    const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$4, relatedTarget);\n\n    if (hideEvent.defaultPrevented) {\n      return;\n    } // If this is a touch-enabled device we remove the extra\n    // empty mouseover listeners we added for iOS support\n\n\n    if ('ontouchstart' in document.documentElement) {\n      [].concat(...document.body.children).forEach(elem => EventHandler.off(elem, 'mouseover', noop));\n    }\n\n    if (this._popper) {\n      this._popper.destroy();\n    }\n\n    this._menu.classList.remove(CLASS_NAME_SHOW$7);\n\n    this._element.classList.remove(CLASS_NAME_SHOW$7);\n\n    this._element.setAttribute('aria-expanded', 'false');\n\n    Manipulator.removeDataAttribute(this._menu, 'popper');\n    EventHandler.trigger(this._element, EVENT_HIDDEN$4, relatedTarget);\n  }\n\n  _getConfig(config) {\n    config = { ...this.constructor.Default,\n      ...Manipulator.getDataAttributes(this._element),\n      ...config\n    };\n    typeCheckConfig(NAME$8, config, this.constructor.DefaultType);\n\n    if (typeof config.reference === 'object' && !isElement(config.reference) && typeof config.reference.getBoundingClientRect !== 'function') {\n      // Popper virtual elements require a getBoundingClientRect method\n      throw new TypeError(`${NAME$8.toUpperCase()}: Option \"reference\" provided type \"object\" without a required \"getBoundingClientRect\" method.`);\n    }\n\n    return config;\n  }\n\n  _getMenuElement() {\n    return SelectorEngine.next(this._element, SELECTOR_MENU)[0];\n  }\n\n  _getPlacement() {\n    const parentDropdown = this._element.parentNode;\n\n    if (parentDropdown.classList.contains(CLASS_NAME_DROPEND)) {\n      return PLACEMENT_RIGHT;\n    }\n\n    if (parentDropdown.classList.contains(CLASS_NAME_DROPSTART)) {\n      return PLACEMENT_LEFT;\n    } // We need to trim the value because custom properties can also include spaces\n\n\n    const isEnd = getComputedStyle(this._menu).getPropertyValue('--bs-position').trim() === 'end';\n\n    if (parentDropdown.classList.contains(CLASS_NAME_DROPUP)) {\n      return isEnd ? PLACEMENT_TOPEND : PLACEMENT_TOP;\n    }\n\n    return isEnd ? PLACEMENT_BOTTOMEND : PLACEMENT_BOTTOM;\n  }\n\n  _detectNavbar() {\n    return this._element.closest(`.${CLASS_NAME_NAVBAR}`) !== null;\n  }\n\n  _getOffset() {\n    const {\n      offset\n    } = this._config;\n\n    if (typeof offset === 'string') {\n      return offset.split(',').map(val => Number.parseInt(val, 10));\n    }\n\n    if (typeof offset === 'function') {\n      return popperData => offset(popperData, this._element);\n    }\n\n    return offset;\n  }\n\n  _getPopperConfig() {\n    const defaultBsPopperConfig = {\n      placement: this._getPlacement(),\n      modifiers: [{\n        name: 'preventOverflow',\n        options: {\n          boundary: this._config.boundary\n        }\n      }, {\n        name: 'offset',\n        options: {\n          offset: this._getOffset()\n        }\n      }]\n    }; // Disable Popper if we have a static display\n\n    if (this._config.display === 'static') {\n      defaultBsPopperConfig.modifiers = [{\n        name: 'applyStyles',\n        enabled: false\n      }];\n    }\n\n    return { ...defaultBsPopperConfig,\n      ...(typeof this._config.popperConfig === 'function' ? this._config.popperConfig(defaultBsPopperConfig) : this._config.popperConfig)\n    };\n  }\n\n  _selectMenuItem({\n    key,\n    target\n  }) {\n    const items = SelectorEngine.find(SELECTOR_VISIBLE_ITEMS, this._menu).filter(isVisible);\n\n    if (!items.length) {\n      return;\n    } // if target isn't included in items (e.g. when expanding the dropdown)\n    // allow cycling to get the last item in case key equals ARROW_UP_KEY\n\n\n    getNextActiveElement(items, target, key === ARROW_DOWN_KEY, !items.includes(target)).focus();\n  } // Static\n\n\n  static dropdownInterface(element, config) {\n    const data = Dropdown.getOrCreateInstance(element, config);\n\n    if (typeof config === 'string') {\n      if (typeof data[config] === 'undefined') {\n        throw new TypeError(`No method named \"${config}\"`);\n      }\n\n      data[config]();\n    }\n  }\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      Dropdown.dropdownInterface(this, config);\n    });\n  }\n\n  static clearMenus(event) {\n    if (event && (event.button === RIGHT_MOUSE_BUTTON || event.type === 'keyup' && event.key !== TAB_KEY)) {\n      return;\n    }\n\n    const toggles = SelectorEngine.find(SELECTOR_DATA_TOGGLE$3);\n\n    for (let i = 0, len = toggles.length; i < len; i++) {\n      const context = Dropdown.getInstance(toggles[i]);\n\n      if (!context || context._config.autoClose === false) {\n        continue;\n      }\n\n      if (!context._element.classList.contains(CLASS_NAME_SHOW$7)) {\n        continue;\n      }\n\n      const relatedTarget = {\n        relatedTarget: context._element\n      };\n\n      if (event) {\n        const composedPath = event.composedPath();\n        const isMenuTarget = composedPath.includes(context._menu);\n\n        if (composedPath.includes(context._element) || context._config.autoClose === 'inside' && !isMenuTarget || context._config.autoClose === 'outside' && isMenuTarget) {\n          continue;\n        } // Tab navigation through the dropdown menu or events from contained inputs shouldn't close the menu\n\n\n        if (context._menu.contains(event.target) && (event.type === 'keyup' && event.key === TAB_KEY || /input|select|option|textarea|form/i.test(event.target.tagName))) {\n          continue;\n        }\n\n        if (event.type === 'click') {\n          relatedTarget.clickEvent = event;\n        }\n      }\n\n      context._completeHide(relatedTarget);\n    }\n  }\n\n  static getParentFromElement(element) {\n    return getElementFromSelector(element) || element.parentNode;\n  }\n\n  static dataApiKeydownHandler(event) {\n    // If not input/textarea:\n    //  - And not a key in REGEXP_KEYDOWN => not a dropdown command\n    // If input/textarea:\n    //  - If space key => not a dropdown command\n    //  - If key is other than escape\n    //    - If key is not up or down => not a dropdown command\n    //    - If trigger inside the menu => not a dropdown command\n    if (/input|textarea/i.test(event.target.tagName) ? event.key === SPACE_KEY || event.key !== ESCAPE_KEY$2 && (event.key !== ARROW_DOWN_KEY && event.key !== ARROW_UP_KEY || event.target.closest(SELECTOR_MENU)) : !REGEXP_KEYDOWN.test(event.key)) {\n      return;\n    }\n\n    const isActive = this.classList.contains(CLASS_NAME_SHOW$7);\n\n    if (!isActive && event.key === ESCAPE_KEY$2) {\n      return;\n    }\n\n    event.preventDefault();\n    event.stopPropagation();\n\n    if (isDisabled(this)) {\n      return;\n    }\n\n    const getToggleButton = () => this.matches(SELECTOR_DATA_TOGGLE$3) ? this : SelectorEngine.prev(this, SELECTOR_DATA_TOGGLE$3)[0];\n\n    if (event.key === ESCAPE_KEY$2) {\n      getToggleButton().focus();\n      Dropdown.clearMenus();\n      return;\n    }\n\n    if (event.key === ARROW_UP_KEY || event.key === ARROW_DOWN_KEY) {\n      if (!isActive) {\n        getToggleButton().click();\n      }\n\n      Dropdown.getInstance(getToggleButton())._selectMenuItem(event);\n\n      return;\n    }\n\n    if (!isActive || event.key === SPACE_KEY) {\n      Dropdown.clearMenus();\n    }\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_DATA_TOGGLE$3, Dropdown.dataApiKeydownHandler);\nEventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown.dataApiKeydownHandler);\nEventHandler.on(document, EVENT_CLICK_DATA_API$3, Dropdown.clearMenus);\nEventHandler.on(document, EVENT_KEYUP_DATA_API, Dropdown.clearMenus);\nEventHandler.on(document, EVENT_CLICK_DATA_API$3, SELECTOR_DATA_TOGGLE$3, function (event) {\n  event.preventDefault();\n  Dropdown.dropdownInterface(this);\n});\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Dropdown to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Dropdown);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): util/scrollBar.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\nconst SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top';\nconst SELECTOR_STICKY_CONTENT = '.sticky-top';\n\nclass ScrollBarHelper {\n  constructor() {\n    this._element = document.body;\n  }\n\n  getWidth() {\n    // https://developer.mozilla.org/en-US/docs/Web/API/Window/innerWidth#usage_notes\n    const documentWidth = document.documentElement.clientWidth;\n    return Math.abs(window.innerWidth - documentWidth);\n  }\n\n  hide() {\n    const width = this.getWidth();\n\n    this._disableOverFlow(); // give padding to element to balance the hidden scrollbar width\n\n\n    this._setElementAttributes(this._element, 'paddingRight', calculatedValue => calculatedValue + width); // trick: We adjust positive paddingRight and negative marginRight to sticky-top elements to keep showing fullwidth\n\n\n    this._setElementAttributes(SELECTOR_FIXED_CONTENT, 'paddingRight', calculatedValue => calculatedValue + width);\n\n    this._setElementAttributes(SELECTOR_STICKY_CONTENT, 'marginRight', calculatedValue => calculatedValue - width);\n  }\n\n  _disableOverFlow() {\n    this._saveInitialAttribute(this._element, 'overflow');\n\n    this._element.style.overflow = 'hidden';\n  }\n\n  _setElementAttributes(selector, styleProp, callback) {\n    const scrollbarWidth = this.getWidth();\n\n    const manipulationCallBack = element => {\n      if (element !== this._element && window.innerWidth > element.clientWidth + scrollbarWidth) {\n        return;\n      }\n\n      this._saveInitialAttribute(element, styleProp);\n\n      const calculatedValue = window.getComputedStyle(element)[styleProp];\n      element.style[styleProp] = `${callback(Number.parseFloat(calculatedValue))}px`;\n    };\n\n    this._applyManipulationCallback(selector, manipulationCallBack);\n  }\n\n  reset() {\n    this._resetElementAttributes(this._element, 'overflow');\n\n    this._resetElementAttributes(this._element, 'paddingRight');\n\n    this._resetElementAttributes(SELECTOR_FIXED_CONTENT, 'paddingRight');\n\n    this._resetElementAttributes(SELECTOR_STICKY_CONTENT, 'marginRight');\n  }\n\n  _saveInitialAttribute(element, styleProp) {\n    const actualValue = element.style[styleProp];\n\n    if (actualValue) {\n      Manipulator.setDataAttribute(element, styleProp, actualValue);\n    }\n  }\n\n  _resetElementAttributes(selector, styleProp) {\n    const manipulationCallBack = element => {\n      const value = Manipulator.getDataAttribute(element, styleProp);\n\n      if (typeof value === 'undefined') {\n        element.style.removeProperty(styleProp);\n      } else {\n        Manipulator.removeDataAttribute(element, styleProp);\n        element.style[styleProp] = value;\n      }\n    };\n\n    this._applyManipulationCallback(selector, manipulationCallBack);\n  }\n\n  _applyManipulationCallback(selector, callBack) {\n    if (isElement(selector)) {\n      callBack(selector);\n    } else {\n      SelectorEngine.find(selector, this._element).forEach(callBack);\n    }\n  }\n\n  isOverflowing() {\n    return this.getWidth() > 0;\n  }\n\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): util/backdrop.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\nconst Default$6 = {\n  isVisible: true,\n  // if false, we use the backdrop helper without adding any element to the dom\n  isAnimated: false,\n  rootElement: 'body',\n  // give the choice to place backdrop under different elements\n  clickCallback: null\n};\nconst DefaultType$6 = {\n  isVisible: 'boolean',\n  isAnimated: 'boolean',\n  rootElement: '(element|string)',\n  clickCallback: '(function|null)'\n};\nconst NAME$7 = 'backdrop';\nconst CLASS_NAME_BACKDROP = 'modal-backdrop';\nconst CLASS_NAME_FADE$5 = 'fade';\nconst CLASS_NAME_SHOW$6 = 'show';\nconst EVENT_MOUSEDOWN = `mousedown.bs.${NAME$7}`;\n\nclass Backdrop {\n  constructor(config) {\n    this._config = this._getConfig(config);\n    this._isAppended = false;\n    this._element = null;\n  }\n\n  show(callback) {\n    if (!this._config.isVisible) {\n      execute(callback);\n      return;\n    }\n\n    this._append();\n\n    if (this._config.isAnimated) {\n      reflow(this._getElement());\n    }\n\n    this._getElement().classList.add(CLASS_NAME_SHOW$6);\n\n    this._emulateAnimation(() => {\n      execute(callback);\n    });\n  }\n\n  hide(callback) {\n    if (!this._config.isVisible) {\n      execute(callback);\n      return;\n    }\n\n    this._getElement().classList.remove(CLASS_NAME_SHOW$6);\n\n    this._emulateAnimation(() => {\n      this.dispose();\n      execute(callback);\n    });\n  } // Private\n\n\n  _getElement() {\n    if (!this._element) {\n      const backdrop = document.createElement('div');\n      backdrop.className = CLASS_NAME_BACKDROP;\n\n      if (this._config.isAnimated) {\n        backdrop.classList.add(CLASS_NAME_FADE$5);\n      }\n\n      this._element = backdrop;\n    }\n\n    return this._element;\n  }\n\n  _getConfig(config) {\n    config = { ...Default$6,\n      ...(typeof config === 'object' ? config : {})\n    }; // use getElement() with the default \"body\" to get a fresh Element on each instantiation\n\n    config.rootElement = getElement(config.rootElement);\n    typeCheckConfig(NAME$7, config, DefaultType$6);\n    return config;\n  }\n\n  _append() {\n    if (this._isAppended) {\n      return;\n    }\n\n    this._config.rootElement.appendChild(this._getElement());\n\n    EventHandler.on(this._getElement(), EVENT_MOUSEDOWN, () => {\n      execute(this._config.clickCallback);\n    });\n    this._isAppended = true;\n  }\n\n  dispose() {\n    if (!this._isAppended) {\n      return;\n    }\n\n    EventHandler.off(this._element, EVENT_MOUSEDOWN);\n\n    this._element.remove();\n\n    this._isAppended = false;\n  }\n\n  _emulateAnimation(callback) {\n    executeAfterTransition(callback, this._getElement(), this._config.isAnimated);\n  }\n\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): modal.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$6 = 'modal';\nconst DATA_KEY$6 = 'bs.modal';\nconst EVENT_KEY$6 = `.${DATA_KEY$6}`;\nconst DATA_API_KEY$3 = '.data-api';\nconst ESCAPE_KEY$1 = 'Escape';\nconst Default$5 = {\n  backdrop: true,\n  keyboard: true,\n  focus: true\n};\nconst DefaultType$5 = {\n  backdrop: '(boolean|string)',\n  keyboard: 'boolean',\n  focus: 'boolean'\n};\nconst EVENT_HIDE$3 = `hide${EVENT_KEY$6}`;\nconst EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY$6}`;\nconst EVENT_HIDDEN$3 = `hidden${EVENT_KEY$6}`;\nconst EVENT_SHOW$3 = `show${EVENT_KEY$6}`;\nconst EVENT_SHOWN$3 = `shown${EVENT_KEY$6}`;\nconst EVENT_FOCUSIN$2 = `focusin${EVENT_KEY$6}`;\nconst EVENT_RESIZE = `resize${EVENT_KEY$6}`;\nconst EVENT_CLICK_DISMISS$2 = `click.dismiss${EVENT_KEY$6}`;\nconst EVENT_KEYDOWN_DISMISS$1 = `keydown.dismiss${EVENT_KEY$6}`;\nconst EVENT_MOUSEUP_DISMISS = `mouseup.dismiss${EVENT_KEY$6}`;\nconst EVENT_MOUSEDOWN_DISMISS = `mousedown.dismiss${EVENT_KEY$6}`;\nconst EVENT_CLICK_DATA_API$2 = `click${EVENT_KEY$6}${DATA_API_KEY$3}`;\nconst CLASS_NAME_OPEN = 'modal-open';\nconst CLASS_NAME_FADE$4 = 'fade';\nconst CLASS_NAME_SHOW$5 = 'show';\nconst CLASS_NAME_STATIC = 'modal-static';\nconst SELECTOR_DIALOG = '.modal-dialog';\nconst SELECTOR_MODAL_BODY = '.modal-body';\nconst SELECTOR_DATA_TOGGLE$2 = '[data-bs-toggle=\"modal\"]';\nconst SELECTOR_DATA_DISMISS$2 = '[data-bs-dismiss=\"modal\"]';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Modal extends BaseComponent {\n  constructor(element, config) {\n    super(element);\n    this._config = this._getConfig(config);\n    this._dialog = SelectorEngine.findOne(SELECTOR_DIALOG, this._element);\n    this._backdrop = this._initializeBackDrop();\n    this._isShown = false;\n    this._ignoreBackdropClick = false;\n    this._isTransitioning = false;\n    this._scrollBar = new ScrollBarHelper();\n  } // Getters\n\n\n  static get Default() {\n    return Default$5;\n  }\n\n  static get NAME() {\n    return NAME$6;\n  } // Public\n\n\n  toggle(relatedTarget) {\n    return this._isShown ? this.hide() : this.show(relatedTarget);\n  }\n\n  show(relatedTarget) {\n    if (this._isShown || this._isTransitioning) {\n      return;\n    }\n\n    const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$3, {\n      relatedTarget\n    });\n\n    if (showEvent.defaultPrevented) {\n      return;\n    }\n\n    this._isShown = true;\n\n    if (this._isAnimated()) {\n      this._isTransitioning = true;\n    }\n\n    this._scrollBar.hide();\n\n    document.body.classList.add(CLASS_NAME_OPEN);\n\n    this._adjustDialog();\n\n    this._setEscapeEvent();\n\n    this._setResizeEvent();\n\n    EventHandler.on(this._element, EVENT_CLICK_DISMISS$2, SELECTOR_DATA_DISMISS$2, event => this.hide(event));\n    EventHandler.on(this._dialog, EVENT_MOUSEDOWN_DISMISS, () => {\n      EventHandler.one(this._element, EVENT_MOUSEUP_DISMISS, event => {\n        if (event.target === this._element) {\n          this._ignoreBackdropClick = true;\n        }\n      });\n    });\n\n    this._showBackdrop(() => this._showElement(relatedTarget));\n  }\n\n  hide(event) {\n    if (event && ['A', 'AREA'].includes(event.target.tagName)) {\n      event.preventDefault();\n    }\n\n    if (!this._isShown || this._isTransitioning) {\n      return;\n    }\n\n    const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$3);\n\n    if (hideEvent.defaultPrevented) {\n      return;\n    }\n\n    this._isShown = false;\n\n    const isAnimated = this._isAnimated();\n\n    if (isAnimated) {\n      this._isTransitioning = true;\n    }\n\n    this._setEscapeEvent();\n\n    this._setResizeEvent();\n\n    EventHandler.off(document, EVENT_FOCUSIN$2);\n\n    this._element.classList.remove(CLASS_NAME_SHOW$5);\n\n    EventHandler.off(this._element, EVENT_CLICK_DISMISS$2);\n    EventHandler.off(this._dialog, EVENT_MOUSEDOWN_DISMISS);\n\n    this._queueCallback(() => this._hideModal(), this._element, isAnimated);\n  }\n\n  dispose() {\n    [window, this._dialog].forEach(htmlElement => EventHandler.off(htmlElement, EVENT_KEY$6));\n\n    this._backdrop.dispose();\n\n    super.dispose();\n    /**\n     * `document` has 2 events `EVENT_FOCUSIN` and `EVENT_CLICK_DATA_API`\n     * Do not move `document` in `htmlElements` array\n     * It will remove `EVENT_CLICK_DATA_API` event that should remain\n     */\n\n    EventHandler.off(document, EVENT_FOCUSIN$2);\n  }\n\n  handleUpdate() {\n    this._adjustDialog();\n  } // Private\n\n\n  _initializeBackDrop() {\n    return new Backdrop({\n      isVisible: Boolean(this._config.backdrop),\n      // 'static' option will be translated to true, and booleans will keep their value\n      isAnimated: this._isAnimated()\n    });\n  }\n\n  _getConfig(config) {\n    config = { ...Default$5,\n      ...Manipulator.getDataAttributes(this._element),\n      ...(typeof config === 'object' ? config : {})\n    };\n    typeCheckConfig(NAME$6, config, DefaultType$5);\n    return config;\n  }\n\n  _showElement(relatedTarget) {\n    const isAnimated = this._isAnimated();\n\n    const modalBody = SelectorEngine.findOne(SELECTOR_MODAL_BODY, this._dialog);\n\n    if (!this._element.parentNode || this._element.parentNode.nodeType !== Node.ELEMENT_NODE) {\n      // Don't move modal's DOM position\n      document.body.appendChild(this._element);\n    }\n\n    this._element.style.display = 'block';\n\n    this._element.removeAttribute('aria-hidden');\n\n    this._element.setAttribute('aria-modal', true);\n\n    this._element.setAttribute('role', 'dialog');\n\n    this._element.scrollTop = 0;\n\n    if (modalBody) {\n      modalBody.scrollTop = 0;\n    }\n\n    if (isAnimated) {\n      reflow(this._element);\n    }\n\n    this._element.classList.add(CLASS_NAME_SHOW$5);\n\n    if (this._config.focus) {\n      this._enforceFocus();\n    }\n\n    const transitionComplete = () => {\n      if (this._config.focus) {\n        this._element.focus();\n      }\n\n      this._isTransitioning = false;\n      EventHandler.trigger(this._element, EVENT_SHOWN$3, {\n        relatedTarget\n      });\n    };\n\n    this._queueCallback(transitionComplete, this._dialog, isAnimated);\n  }\n\n  _enforceFocus() {\n    EventHandler.off(document, EVENT_FOCUSIN$2); // guard against infinite focus loop\n\n    EventHandler.on(document, EVENT_FOCUSIN$2, event => {\n      if (document !== event.target && this._element !== event.target && !this._element.contains(event.target)) {\n        this._element.focus();\n      }\n    });\n  }\n\n  _setEscapeEvent() {\n    if (this._isShown) {\n      EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS$1, event => {\n        if (this._config.keyboard && event.key === ESCAPE_KEY$1) {\n          event.preventDefault();\n          this.hide();\n        } else if (!this._config.keyboard && event.key === ESCAPE_KEY$1) {\n          this._triggerBackdropTransition();\n        }\n      });\n    } else {\n      EventHandler.off(this._element, EVENT_KEYDOWN_DISMISS$1);\n    }\n  }\n\n  _setResizeEvent() {\n    if (this._isShown) {\n      EventHandler.on(window, EVENT_RESIZE, () => this._adjustDialog());\n    } else {\n      EventHandler.off(window, EVENT_RESIZE);\n    }\n  }\n\n  _hideModal() {\n    this._element.style.display = 'none';\n\n    this._element.setAttribute('aria-hidden', true);\n\n    this._element.removeAttribute('aria-modal');\n\n    this._element.removeAttribute('role');\n\n    this._isTransitioning = false;\n\n    this._backdrop.hide(() => {\n      document.body.classList.remove(CLASS_NAME_OPEN);\n\n      this._resetAdjustments();\n\n      this._scrollBar.reset();\n\n      EventHandler.trigger(this._element, EVENT_HIDDEN$3);\n    });\n  }\n\n  _showBackdrop(callback) {\n    EventHandler.on(this._element, EVENT_CLICK_DISMISS$2, event => {\n      if (this._ignoreBackdropClick) {\n        this._ignoreBackdropClick = false;\n        return;\n      }\n\n      if (event.target !== event.currentTarget) {\n        return;\n      }\n\n      if (this._config.backdrop === true) {\n        this.hide();\n      } else if (this._config.backdrop === 'static') {\n        this._triggerBackdropTransition();\n      }\n    });\n\n    this._backdrop.show(callback);\n  }\n\n  _isAnimated() {\n    return this._element.classList.contains(CLASS_NAME_FADE$4);\n  }\n\n  _triggerBackdropTransition() {\n    const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED);\n\n    if (hideEvent.defaultPrevented) {\n      return;\n    }\n\n    const {\n      classList,\n      scrollHeight,\n      style\n    } = this._element;\n    const isModalOverflowing = scrollHeight > document.documentElement.clientHeight; // return if the following background transition hasn't yet completed\n\n    if (!isModalOverflowing && style.overflowY === 'hidden' || classList.contains(CLASS_NAME_STATIC)) {\n      return;\n    }\n\n    if (!isModalOverflowing) {\n      style.overflowY = 'hidden';\n    }\n\n    classList.add(CLASS_NAME_STATIC);\n\n    this._queueCallback(() => {\n      classList.remove(CLASS_NAME_STATIC);\n\n      if (!isModalOverflowing) {\n        this._queueCallback(() => {\n          style.overflowY = '';\n        }, this._dialog);\n      }\n    }, this._dialog);\n\n    this._element.focus();\n  } // ----------------------------------------------------------------------\n  // the following methods are used to handle overflowing modals\n  // ----------------------------------------------------------------------\n\n\n  _adjustDialog() {\n    const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;\n\n    const scrollbarWidth = this._scrollBar.getWidth();\n\n    const isBodyOverflowing = scrollbarWidth > 0;\n\n    if (!isBodyOverflowing && isModalOverflowing && !isRTL() || isBodyOverflowing && !isModalOverflowing && isRTL()) {\n      this._element.style.paddingLeft = `${scrollbarWidth}px`;\n    }\n\n    if (isBodyOverflowing && !isModalOverflowing && !isRTL() || !isBodyOverflowing && isModalOverflowing && isRTL()) {\n      this._element.style.paddingRight = `${scrollbarWidth}px`;\n    }\n  }\n\n  _resetAdjustments() {\n    this._element.style.paddingLeft = '';\n    this._element.style.paddingRight = '';\n  } // Static\n\n\n  static jQueryInterface(config, relatedTarget) {\n    return this.each(function () {\n      const data = Modal.getOrCreateInstance(this, config);\n\n      if (typeof config !== 'string') {\n        return;\n      }\n\n      if (typeof data[config] === 'undefined') {\n        throw new TypeError(`No method named \"${config}\"`);\n      }\n\n      data[config](relatedTarget);\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$2, SELECTOR_DATA_TOGGLE$2, function (event) {\n  const target = getElementFromSelector(this);\n\n  if (['A', 'AREA'].includes(this.tagName)) {\n    event.preventDefault();\n  }\n\n  EventHandler.one(target, EVENT_SHOW$3, showEvent => {\n    if (showEvent.defaultPrevented) {\n      // only register focus restorer if modal will actually get shown\n      return;\n    }\n\n    EventHandler.one(target, EVENT_HIDDEN$3, () => {\n      if (isVisible(this)) {\n        this.focus();\n      }\n    });\n  });\n  const data = Modal.getOrCreateInstance(target);\n  data.toggle(this);\n});\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Modal to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Modal);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): offcanvas.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$5 = 'offcanvas';\nconst DATA_KEY$5 = 'bs.offcanvas';\nconst EVENT_KEY$5 = `.${DATA_KEY$5}`;\nconst DATA_API_KEY$2 = '.data-api';\nconst EVENT_LOAD_DATA_API$1 = `load${EVENT_KEY$5}${DATA_API_KEY$2}`;\nconst ESCAPE_KEY = 'Escape';\nconst Default$4 = {\n  backdrop: true,\n  keyboard: true,\n  scroll: false\n};\nconst DefaultType$4 = {\n  backdrop: 'boolean',\n  keyboard: 'boolean',\n  scroll: 'boolean'\n};\nconst CLASS_NAME_SHOW$4 = 'show';\nconst OPEN_SELECTOR = '.offcanvas.show';\nconst EVENT_SHOW$2 = `show${EVENT_KEY$5}`;\nconst EVENT_SHOWN$2 = `shown${EVENT_KEY$5}`;\nconst EVENT_HIDE$2 = `hide${EVENT_KEY$5}`;\nconst EVENT_HIDDEN$2 = `hidden${EVENT_KEY$5}`;\nconst EVENT_FOCUSIN$1 = `focusin${EVENT_KEY$5}`;\nconst EVENT_CLICK_DATA_API$1 = `click${EVENT_KEY$5}${DATA_API_KEY$2}`;\nconst EVENT_CLICK_DISMISS$1 = `click.dismiss${EVENT_KEY$5}`;\nconst EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY$5}`;\nconst SELECTOR_DATA_DISMISS$1 = '[data-bs-dismiss=\"offcanvas\"]';\nconst SELECTOR_DATA_TOGGLE$1 = '[data-bs-toggle=\"offcanvas\"]';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Offcanvas extends BaseComponent {\n  constructor(element, config) {\n    super(element);\n    this._config = this._getConfig(config);\n    this._isShown = false;\n    this._backdrop = this._initializeBackDrop();\n\n    this._addEventListeners();\n  } // Getters\n\n\n  static get NAME() {\n    return NAME$5;\n  }\n\n  static get Default() {\n    return Default$4;\n  } // Public\n\n\n  toggle(relatedTarget) {\n    return this._isShown ? this.hide() : this.show(relatedTarget);\n  }\n\n  show(relatedTarget) {\n    if (this._isShown) {\n      return;\n    }\n\n    const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$2, {\n      relatedTarget\n    });\n\n    if (showEvent.defaultPrevented) {\n      return;\n    }\n\n    this._isShown = true;\n    this._element.style.visibility = 'visible';\n\n    this._backdrop.show();\n\n    if (!this._config.scroll) {\n      new ScrollBarHelper().hide();\n\n      this._enforceFocusOnElement(this._element);\n    }\n\n    this._element.removeAttribute('aria-hidden');\n\n    this._element.setAttribute('aria-modal', true);\n\n    this._element.setAttribute('role', 'dialog');\n\n    this._element.classList.add(CLASS_NAME_SHOW$4);\n\n    const completeCallBack = () => {\n      EventHandler.trigger(this._element, EVENT_SHOWN$2, {\n        relatedTarget\n      });\n    };\n\n    this._queueCallback(completeCallBack, this._element, true);\n  }\n\n  hide() {\n    if (!this._isShown) {\n      return;\n    }\n\n    const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$2);\n\n    if (hideEvent.defaultPrevented) {\n      return;\n    }\n\n    EventHandler.off(document, EVENT_FOCUSIN$1);\n\n    this._element.blur();\n\n    this._isShown = false;\n\n    this._element.classList.remove(CLASS_NAME_SHOW$4);\n\n    this._backdrop.hide();\n\n    const completeCallback = () => {\n      this._element.setAttribute('aria-hidden', true);\n\n      this._element.removeAttribute('aria-modal');\n\n      this._element.removeAttribute('role');\n\n      this._element.style.visibility = 'hidden';\n\n      if (!this._config.scroll) {\n        new ScrollBarHelper().reset();\n      }\n\n      EventHandler.trigger(this._element, EVENT_HIDDEN$2);\n    };\n\n    this._queueCallback(completeCallback, this._element, true);\n  }\n\n  dispose() {\n    this._backdrop.dispose();\n\n    super.dispose();\n    EventHandler.off(document, EVENT_FOCUSIN$1);\n  } // Private\n\n\n  _getConfig(config) {\n    config = { ...Default$4,\n      ...Manipulator.getDataAttributes(this._element),\n      ...(typeof config === 'object' ? config : {})\n    };\n    typeCheckConfig(NAME$5, config, DefaultType$4);\n    return config;\n  }\n\n  _initializeBackDrop() {\n    return new Backdrop({\n      isVisible: this._config.backdrop,\n      isAnimated: true,\n      rootElement: this._element.parentNode,\n      clickCallback: () => this.hide()\n    });\n  }\n\n  _enforceFocusOnElement(element) {\n    EventHandler.off(document, EVENT_FOCUSIN$1); // guard against infinite focus loop\n\n    EventHandler.on(document, EVENT_FOCUSIN$1, event => {\n      if (document !== event.target && element !== event.target && !element.contains(event.target)) {\n        element.focus();\n      }\n    });\n    element.focus();\n  }\n\n  _addEventListeners() {\n    EventHandler.on(this._element, EVENT_CLICK_DISMISS$1, SELECTOR_DATA_DISMISS$1, () => this.hide());\n    EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS, event => {\n      if (this._config.keyboard && event.key === ESCAPE_KEY) {\n        this.hide();\n      }\n    });\n  } // Static\n\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Offcanvas.getOrCreateInstance(this, config);\n\n      if (typeof config !== 'string') {\n        return;\n      }\n\n      if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n        throw new TypeError(`No method named \"${config}\"`);\n      }\n\n      data[config](this);\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$1, SELECTOR_DATA_TOGGLE$1, function (event) {\n  const target = getElementFromSelector(this);\n\n  if (['A', 'AREA'].includes(this.tagName)) {\n    event.preventDefault();\n  }\n\n  if (isDisabled(this)) {\n    return;\n  }\n\n  EventHandler.one(target, EVENT_HIDDEN$2, () => {\n    // focus on trigger when it is closed\n    if (isVisible(this)) {\n      this.focus();\n    }\n  }); // avoid conflict when clicking a toggler of an offcanvas, while another is open\n\n  const allReadyOpen = SelectorEngine.findOne(OPEN_SELECTOR);\n\n  if (allReadyOpen && allReadyOpen !== target) {\n    Offcanvas.getInstance(allReadyOpen).hide();\n  }\n\n  const data = Offcanvas.getOrCreateInstance(target);\n  data.toggle(this);\n});\nEventHandler.on(window, EVENT_LOAD_DATA_API$1, () => SelectorEngine.find(OPEN_SELECTOR).forEach(el => Offcanvas.getOrCreateInstance(el).show()));\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\ndefineJQueryPlugin(Offcanvas);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): util/sanitizer.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\nconst uriAttrs = new Set(['background', 'cite', 'href', 'itemtype', 'longdesc', 'poster', 'src', 'xlink:href']);\nconst ARIA_ATTRIBUTE_PATTERN = /^aria-[\\w-]*$/i;\n/**\n * A pattern that recognizes a commonly useful subset of URLs that are safe.\n *\n * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts\n */\n\nconst SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file):|[^#&/:?]*(?:[#/?]|$))/i;\n/**\n * A pattern that matches safe data URLs. Only matches image, video and audio types.\n *\n * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts\n */\n\nconst DATA_URL_PATTERN = /^data:(?:image\\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\\/(?:mpeg|mp4|ogg|webm)|audio\\/(?:mp3|oga|ogg|opus));base64,[\\d+/a-z]+=*$/i;\n\nconst allowedAttribute = (attr, allowedAttributeList) => {\n  const attrName = attr.nodeName.toLowerCase();\n\n  if (allowedAttributeList.includes(attrName)) {\n    if (uriAttrs.has(attrName)) {\n      return Boolean(SAFE_URL_PATTERN.test(attr.nodeValue) || DATA_URL_PATTERN.test(attr.nodeValue));\n    }\n\n    return true;\n  }\n\n  const regExp = allowedAttributeList.filter(attrRegex => attrRegex instanceof RegExp); // Check if a regular expression validates the attribute.\n\n  for (let i = 0, len = regExp.length; i < len; i++) {\n    if (regExp[i].test(attrName)) {\n      return true;\n    }\n  }\n\n  return false;\n};\n\nconst DefaultAllowlist = {\n  // Global attributes allowed on any supplied element below.\n  '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],\n  a: ['target', 'href', 'title', 'rel'],\n  area: [],\n  b: [],\n  br: [],\n  col: [],\n  code: [],\n  div: [],\n  em: [],\n  hr: [],\n  h1: [],\n  h2: [],\n  h3: [],\n  h4: [],\n  h5: [],\n  h6: [],\n  i: [],\n  img: ['src', 'srcset', 'alt', 'title', 'width', 'height'],\n  li: [],\n  ol: [],\n  p: [],\n  pre: [],\n  s: [],\n  small: [],\n  span: [],\n  sub: [],\n  sup: [],\n  strong: [],\n  u: [],\n  ul: []\n};\nfunction sanitizeHtml(unsafeHtml, allowList, sanitizeFn) {\n  if (!unsafeHtml.length) {\n    return unsafeHtml;\n  }\n\n  if (sanitizeFn && typeof sanitizeFn === 'function') {\n    return sanitizeFn(unsafeHtml);\n  }\n\n  const domParser = new window.DOMParser();\n  const createdDocument = domParser.parseFromString(unsafeHtml, 'text/html');\n  const allowlistKeys = Object.keys(allowList);\n  const elements = [].concat(...createdDocument.body.querySelectorAll('*'));\n\n  for (let i = 0, len = elements.length; i < len; i++) {\n    const el = elements[i];\n    const elName = el.nodeName.toLowerCase();\n\n    if (!allowlistKeys.includes(elName)) {\n      el.remove();\n      continue;\n    }\n\n    const attributeList = [].concat(...el.attributes);\n    const allowedAttributes = [].concat(allowList['*'] || [], allowList[elName] || []);\n    attributeList.forEach(attr => {\n      if (!allowedAttribute(attr, allowedAttributes)) {\n        el.removeAttribute(attr.nodeName);\n      }\n    });\n  }\n\n  return createdDocument.body.innerHTML;\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): tooltip.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$4 = 'tooltip';\nconst DATA_KEY$4 = 'bs.tooltip';\nconst EVENT_KEY$4 = `.${DATA_KEY$4}`;\nconst CLASS_PREFIX$1 = 'bs-tooltip';\nconst BSCLS_PREFIX_REGEX$1 = new RegExp(`(^|\\\\s)${CLASS_PREFIX$1}\\\\S+`, 'g');\nconst DISALLOWED_ATTRIBUTES = new Set(['sanitize', 'allowList', 'sanitizeFn']);\nconst DefaultType$3 = {\n  animation: 'boolean',\n  template: 'string',\n  title: '(string|element|function)',\n  trigger: 'string',\n  delay: '(number|object)',\n  html: 'boolean',\n  selector: '(string|boolean)',\n  placement: '(string|function)',\n  offset: '(array|string|function)',\n  container: '(string|element|boolean)',\n  fallbackPlacements: 'array',\n  boundary: '(string|element)',\n  customClass: '(string|function)',\n  sanitize: 'boolean',\n  sanitizeFn: '(null|function)',\n  allowList: 'object',\n  popperConfig: '(null|object|function)'\n};\nconst AttachmentMap = {\n  AUTO: 'auto',\n  TOP: 'top',\n  RIGHT: isRTL() ? 'left' : 'right',\n  BOTTOM: 'bottom',\n  LEFT: isRTL() ? 'right' : 'left'\n};\nconst Default$3 = {\n  animation: true,\n  template: '<div class=\"tooltip\" role=\"tooltip\">' + '<div class=\"tooltip-arrow\"></div>' + '<div class=\"tooltip-inner\"></div>' + '</div>',\n  trigger: 'hover focus',\n  title: '',\n  delay: 0,\n  html: false,\n  selector: false,\n  placement: 'top',\n  offset: [0, 0],\n  container: false,\n  fallbackPlacements: ['top', 'right', 'bottom', 'left'],\n  boundary: 'clippingParents',\n  customClass: '',\n  sanitize: true,\n  sanitizeFn: null,\n  allowList: DefaultAllowlist,\n  popperConfig: null\n};\nconst Event$2 = {\n  HIDE: `hide${EVENT_KEY$4}`,\n  HIDDEN: `hidden${EVENT_KEY$4}`,\n  SHOW: `show${EVENT_KEY$4}`,\n  SHOWN: `shown${EVENT_KEY$4}`,\n  INSERTED: `inserted${EVENT_KEY$4}`,\n  CLICK: `click${EVENT_KEY$4}`,\n  FOCUSIN: `focusin${EVENT_KEY$4}`,\n  FOCUSOUT: `focusout${EVENT_KEY$4}`,\n  MOUSEENTER: `mouseenter${EVENT_KEY$4}`,\n  MOUSELEAVE: `mouseleave${EVENT_KEY$4}`\n};\nconst CLASS_NAME_FADE$3 = 'fade';\nconst CLASS_NAME_MODAL = 'modal';\nconst CLASS_NAME_SHOW$3 = 'show';\nconst HOVER_STATE_SHOW = 'show';\nconst HOVER_STATE_OUT = 'out';\nconst SELECTOR_TOOLTIP_INNER = '.tooltip-inner';\nconst TRIGGER_HOVER = 'hover';\nconst TRIGGER_FOCUS = 'focus';\nconst TRIGGER_CLICK = 'click';\nconst TRIGGER_MANUAL = 'manual';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Tooltip extends BaseComponent {\n  constructor(element, config) {\n    if (typeof Popper === 'undefined') {\n      throw new TypeError('Bootstrap\\'s tooltips require Popper (https://popper.js.org)');\n    }\n\n    super(element); // private\n\n    this._isEnabled = true;\n    this._timeout = 0;\n    this._hoverState = '';\n    this._activeTrigger = {};\n    this._popper = null; // Protected\n\n    this._config = this._getConfig(config);\n    this.tip = null;\n\n    this._setListeners();\n  } // Getters\n\n\n  static get Default() {\n    return Default$3;\n  }\n\n  static get NAME() {\n    return NAME$4;\n  }\n\n  static get Event() {\n    return Event$2;\n  }\n\n  static get DefaultType() {\n    return DefaultType$3;\n  } // Public\n\n\n  enable() {\n    this._isEnabled = true;\n  }\n\n  disable() {\n    this._isEnabled = false;\n  }\n\n  toggleEnabled() {\n    this._isEnabled = !this._isEnabled;\n  }\n\n  toggle(event) {\n    if (!this._isEnabled) {\n      return;\n    }\n\n    if (event) {\n      const context = this._initializeOnDelegatedTarget(event);\n\n      context._activeTrigger.click = !context._activeTrigger.click;\n\n      if (context._isWithActiveTrigger()) {\n        context._enter(null, context);\n      } else {\n        context._leave(null, context);\n      }\n    } else {\n      if (this.getTipElement().classList.contains(CLASS_NAME_SHOW$3)) {\n        this._leave(null, this);\n\n        return;\n      }\n\n      this._enter(null, this);\n    }\n  }\n\n  dispose() {\n    clearTimeout(this._timeout);\n    EventHandler.off(this._element.closest(`.${CLASS_NAME_MODAL}`), 'hide.bs.modal', this._hideModalHandler);\n\n    if (this.tip) {\n      this.tip.remove();\n    }\n\n    if (this._popper) {\n      this._popper.destroy();\n    }\n\n    super.dispose();\n  }\n\n  show() {\n    if (this._element.style.display === 'none') {\n      throw new Error('Please use show on visible elements');\n    }\n\n    if (!(this.isWithContent() && this._isEnabled)) {\n      return;\n    }\n\n    const showEvent = EventHandler.trigger(this._element, this.constructor.Event.SHOW);\n    const shadowRoot = findShadowRoot(this._element);\n    const isInTheDom = shadowRoot === null ? this._element.ownerDocument.documentElement.contains(this._element) : shadowRoot.contains(this._element);\n\n    if (showEvent.defaultPrevented || !isInTheDom) {\n      return;\n    }\n\n    const tip = this.getTipElement();\n    const tipId = getUID(this.constructor.NAME);\n    tip.setAttribute('id', tipId);\n\n    this._element.setAttribute('aria-describedby', tipId);\n\n    this.setContent();\n\n    if (this._config.animation) {\n      tip.classList.add(CLASS_NAME_FADE$3);\n    }\n\n    const placement = typeof this._config.placement === 'function' ? this._config.placement.call(this, tip, this._element) : this._config.placement;\n\n    const attachment = this._getAttachment(placement);\n\n    this._addAttachmentClass(attachment);\n\n    const {\n      container\n    } = this._config;\n    Data.set(tip, this.constructor.DATA_KEY, this);\n\n    if (!this._element.ownerDocument.documentElement.contains(this.tip)) {\n      container.appendChild(tip);\n      EventHandler.trigger(this._element, this.constructor.Event.INSERTED);\n    }\n\n    if (this._popper) {\n      this._popper.update();\n    } else {\n      this._popper = Popper.createPopper(this._element, tip, this._getPopperConfig(attachment));\n    }\n\n    tip.classList.add(CLASS_NAME_SHOW$3);\n    const customClass = typeof this._config.customClass === 'function' ? this._config.customClass() : this._config.customClass;\n\n    if (customClass) {\n      tip.classList.add(...customClass.split(' '));\n    } // If this is a touch-enabled device we add extra\n    // empty mouseover listeners to the body's immediate children;\n    // only needed because of broken event delegation on iOS\n    // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n\n\n    if ('ontouchstart' in document.documentElement) {\n      [].concat(...document.body.children).forEach(element => {\n        EventHandler.on(element, 'mouseover', noop);\n      });\n    }\n\n    const complete = () => {\n      const prevHoverState = this._hoverState;\n      this._hoverState = null;\n      EventHandler.trigger(this._element, this.constructor.Event.SHOWN);\n\n      if (prevHoverState === HOVER_STATE_OUT) {\n        this._leave(null, this);\n      }\n    };\n\n    const isAnimated = this.tip.classList.contains(CLASS_NAME_FADE$3);\n\n    this._queueCallback(complete, this.tip, isAnimated);\n  }\n\n  hide() {\n    if (!this._popper) {\n      return;\n    }\n\n    const tip = this.getTipElement();\n\n    const complete = () => {\n      if (this._isWithActiveTrigger()) {\n        return;\n      }\n\n      if (this._hoverState !== HOVER_STATE_SHOW) {\n        tip.remove();\n      }\n\n      this._cleanTipClass();\n\n      this._element.removeAttribute('aria-describedby');\n\n      EventHandler.trigger(this._element, this.constructor.Event.HIDDEN);\n\n      if (this._popper) {\n        this._popper.destroy();\n\n        this._popper = null;\n      }\n    };\n\n    const hideEvent = EventHandler.trigger(this._element, this.constructor.Event.HIDE);\n\n    if (hideEvent.defaultPrevented) {\n      return;\n    }\n\n    tip.classList.remove(CLASS_NAME_SHOW$3); // If this is a touch-enabled device we remove the extra\n    // empty mouseover listeners we added for iOS support\n\n    if ('ontouchstart' in document.documentElement) {\n      [].concat(...document.body.children).forEach(element => EventHandler.off(element, 'mouseover', noop));\n    }\n\n    this._activeTrigger[TRIGGER_CLICK] = false;\n    this._activeTrigger[TRIGGER_FOCUS] = false;\n    this._activeTrigger[TRIGGER_HOVER] = false;\n    const isAnimated = this.tip.classList.contains(CLASS_NAME_FADE$3);\n\n    this._queueCallback(complete, this.tip, isAnimated);\n\n    this._hoverState = '';\n  }\n\n  update() {\n    if (this._popper !== null) {\n      this._popper.update();\n    }\n  } // Protected\n\n\n  isWithContent() {\n    return Boolean(this.getTitle());\n  }\n\n  getTipElement() {\n    if (this.tip) {\n      return this.tip;\n    }\n\n    const element = document.createElement('div');\n    element.innerHTML = this._config.template;\n    this.tip = element.children[0];\n    return this.tip;\n  }\n\n  setContent() {\n    const tip = this.getTipElement();\n    this.setElementContent(SelectorEngine.findOne(SELECTOR_TOOLTIP_INNER, tip), this.getTitle());\n    tip.classList.remove(CLASS_NAME_FADE$3, CLASS_NAME_SHOW$3);\n  }\n\n  setElementContent(element, content) {\n    if (element === null) {\n      return;\n    }\n\n    if (isElement(content)) {\n      content = getElement(content); // content is a DOM node or a jQuery\n\n      if (this._config.html) {\n        if (content.parentNode !== element) {\n          element.innerHTML = '';\n          element.appendChild(content);\n        }\n      } else {\n        element.textContent = content.textContent;\n      }\n\n      return;\n    }\n\n    if (this._config.html) {\n      if (this._config.sanitize) {\n        content = sanitizeHtml(content, this._config.allowList, this._config.sanitizeFn);\n      }\n\n      element.innerHTML = content;\n    } else {\n      element.textContent = content;\n    }\n  }\n\n  getTitle() {\n    let title = this._element.getAttribute('data-bs-original-title');\n\n    if (!title) {\n      title = typeof this._config.title === 'function' ? this._config.title.call(this._element) : this._config.title;\n    }\n\n    return title;\n  }\n\n  updateAttachment(attachment) {\n    if (attachment === 'right') {\n      return 'end';\n    }\n\n    if (attachment === 'left') {\n      return 'start';\n    }\n\n    return attachment;\n  } // Private\n\n\n  _initializeOnDelegatedTarget(event, context) {\n    const dataKey = this.constructor.DATA_KEY;\n    context = context || Data.get(event.delegateTarget, dataKey);\n\n    if (!context) {\n      context = new this.constructor(event.delegateTarget, this._getDelegateConfig());\n      Data.set(event.delegateTarget, dataKey, context);\n    }\n\n    return context;\n  }\n\n  _getOffset() {\n    const {\n      offset\n    } = this._config;\n\n    if (typeof offset === 'string') {\n      return offset.split(',').map(val => Number.parseInt(val, 10));\n    }\n\n    if (typeof offset === 'function') {\n      return popperData => offset(popperData, this._element);\n    }\n\n    return offset;\n  }\n\n  _getPopperConfig(attachment) {\n    const defaultBsPopperConfig = {\n      placement: attachment,\n      modifiers: [{\n        name: 'flip',\n        options: {\n          fallbackPlacements: this._config.fallbackPlacements\n        }\n      }, {\n        name: 'offset',\n        options: {\n          offset: this._getOffset()\n        }\n      }, {\n        name: 'preventOverflow',\n        options: {\n          boundary: this._config.boundary\n        }\n      }, {\n        name: 'arrow',\n        options: {\n          element: `.${this.constructor.NAME}-arrow`\n        }\n      }, {\n        name: 'onChange',\n        enabled: true,\n        phase: 'afterWrite',\n        fn: data => this._handlePopperPlacementChange(data)\n      }],\n      onFirstUpdate: data => {\n        if (data.options.placement !== data.placement) {\n          this._handlePopperPlacementChange(data);\n        }\n      }\n    };\n    return { ...defaultBsPopperConfig,\n      ...(typeof this._config.popperConfig === 'function' ? this._config.popperConfig(defaultBsPopperConfig) : this._config.popperConfig)\n    };\n  }\n\n  _addAttachmentClass(attachment) {\n    this.getTipElement().classList.add(`${CLASS_PREFIX$1}-${this.updateAttachment(attachment)}`);\n  }\n\n  _getAttachment(placement) {\n    return AttachmentMap[placement.toUpperCase()];\n  }\n\n  _setListeners() {\n    const triggers = this._config.trigger.split(' ');\n\n    triggers.forEach(trigger => {\n      if (trigger === 'click') {\n        EventHandler.on(this._element, this.constructor.Event.CLICK, this._config.selector, event => this.toggle(event));\n      } else if (trigger !== TRIGGER_MANUAL) {\n        const eventIn = trigger === TRIGGER_HOVER ? this.constructor.Event.MOUSEENTER : this.constructor.Event.FOCUSIN;\n        const eventOut = trigger === TRIGGER_HOVER ? this.constructor.Event.MOUSELEAVE : this.constructor.Event.FOCUSOUT;\n        EventHandler.on(this._element, eventIn, this._config.selector, event => this._enter(event));\n        EventHandler.on(this._element, eventOut, this._config.selector, event => this._leave(event));\n      }\n    });\n\n    this._hideModalHandler = () => {\n      if (this._element) {\n        this.hide();\n      }\n    };\n\n    EventHandler.on(this._element.closest(`.${CLASS_NAME_MODAL}`), 'hide.bs.modal', this._hideModalHandler);\n\n    if (this._config.selector) {\n      this._config = { ...this._config,\n        trigger: 'manual',\n        selector: ''\n      };\n    } else {\n      this._fixTitle();\n    }\n  }\n\n  _fixTitle() {\n    const title = this._element.getAttribute('title');\n\n    const originalTitleType = typeof this._element.getAttribute('data-bs-original-title');\n\n    if (title || originalTitleType !== 'string') {\n      this._element.setAttribute('data-bs-original-title', title || '');\n\n      if (title && !this._element.getAttribute('aria-label') && !this._element.textContent) {\n        this._element.setAttribute('aria-label', title);\n      }\n\n      this._element.setAttribute('title', '');\n    }\n  }\n\n  _enter(event, context) {\n    context = this._initializeOnDelegatedTarget(event, context);\n\n    if (event) {\n      context._activeTrigger[event.type === 'focusin' ? TRIGGER_FOCUS : TRIGGER_HOVER] = true;\n    }\n\n    if (context.getTipElement().classList.contains(CLASS_NAME_SHOW$3) || context._hoverState === HOVER_STATE_SHOW) {\n      context._hoverState = HOVER_STATE_SHOW;\n      return;\n    }\n\n    clearTimeout(context._timeout);\n    context._hoverState = HOVER_STATE_SHOW;\n\n    if (!context._config.delay || !context._config.delay.show) {\n      context.show();\n      return;\n    }\n\n    context._timeout = setTimeout(() => {\n      if (context._hoverState === HOVER_STATE_SHOW) {\n        context.show();\n      }\n    }, context._config.delay.show);\n  }\n\n  _leave(event, context) {\n    context = this._initializeOnDelegatedTarget(event, context);\n\n    if (event) {\n      context._activeTrigger[event.type === 'focusout' ? TRIGGER_FOCUS : TRIGGER_HOVER] = context._element.contains(event.relatedTarget);\n    }\n\n    if (context._isWithActiveTrigger()) {\n      return;\n    }\n\n    clearTimeout(context._timeout);\n    context._hoverState = HOVER_STATE_OUT;\n\n    if (!context._config.delay || !context._config.delay.hide) {\n      context.hide();\n      return;\n    }\n\n    context._timeout = setTimeout(() => {\n      if (context._hoverState === HOVER_STATE_OUT) {\n        context.hide();\n      }\n    }, context._config.delay.hide);\n  }\n\n  _isWithActiveTrigger() {\n    for (const trigger in this._activeTrigger) {\n      if (this._activeTrigger[trigger]) {\n        return true;\n      }\n    }\n\n    return false;\n  }\n\n  _getConfig(config) {\n    const dataAttributes = Manipulator.getDataAttributes(this._element);\n    Object.keys(dataAttributes).forEach(dataAttr => {\n      if (DISALLOWED_ATTRIBUTES.has(dataAttr)) {\n        delete dataAttributes[dataAttr];\n      }\n    });\n    config = { ...this.constructor.Default,\n      ...dataAttributes,\n      ...(typeof config === 'object' && config ? config : {})\n    };\n    config.container = config.container === false ? document.body : getElement(config.container);\n\n    if (typeof config.delay === 'number') {\n      config.delay = {\n        show: config.delay,\n        hide: config.delay\n      };\n    }\n\n    if (typeof config.title === 'number') {\n      config.title = config.title.toString();\n    }\n\n    if (typeof config.content === 'number') {\n      config.content = config.content.toString();\n    }\n\n    typeCheckConfig(NAME$4, config, this.constructor.DefaultType);\n\n    if (config.sanitize) {\n      config.template = sanitizeHtml(config.template, config.allowList, config.sanitizeFn);\n    }\n\n    return config;\n  }\n\n  _getDelegateConfig() {\n    const config = {};\n\n    if (this._config) {\n      for (const key in this._config) {\n        if (this.constructor.Default[key] !== this._config[key]) {\n          config[key] = this._config[key];\n        }\n      }\n    }\n\n    return config;\n  }\n\n  _cleanTipClass() {\n    const tip = this.getTipElement();\n    const tabClass = tip.getAttribute('class').match(BSCLS_PREFIX_REGEX$1);\n\n    if (tabClass !== null && tabClass.length > 0) {\n      tabClass.map(token => token.trim()).forEach(tClass => tip.classList.remove(tClass));\n    }\n  }\n\n  _handlePopperPlacementChange(popperData) {\n    const {\n      state\n    } = popperData;\n\n    if (!state) {\n      return;\n    }\n\n    this.tip = state.elements.popper;\n\n    this._cleanTipClass();\n\n    this._addAttachmentClass(this._getAttachment(state.placement));\n  } // Static\n\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Tooltip.getOrCreateInstance(this, config);\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config]();\n      }\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Tooltip to jQuery only if jQuery is present\n */\n\n\ndefineJQueryPlugin(Tooltip);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): popover.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$3 = 'popover';\nconst DATA_KEY$3 = 'bs.popover';\nconst EVENT_KEY$3 = `.${DATA_KEY$3}`;\nconst CLASS_PREFIX = 'bs-popover';\nconst BSCLS_PREFIX_REGEX = new RegExp(`(^|\\\\s)${CLASS_PREFIX}\\\\S+`, 'g');\nconst Default$2 = { ...Tooltip.Default,\n  placement: 'right',\n  offset: [0, 8],\n  trigger: 'click',\n  content: '',\n  template: '<div class=\"popover\" role=\"tooltip\">' + '<div class=\"popover-arrow\"></div>' + '<h3 class=\"popover-header\"></h3>' + '<div class=\"popover-body\"></div>' + '</div>'\n};\nconst DefaultType$2 = { ...Tooltip.DefaultType,\n  content: '(string|element|function)'\n};\nconst Event$1 = {\n  HIDE: `hide${EVENT_KEY$3}`,\n  HIDDEN: `hidden${EVENT_KEY$3}`,\n  SHOW: `show${EVENT_KEY$3}`,\n  SHOWN: `shown${EVENT_KEY$3}`,\n  INSERTED: `inserted${EVENT_KEY$3}`,\n  CLICK: `click${EVENT_KEY$3}`,\n  FOCUSIN: `focusin${EVENT_KEY$3}`,\n  FOCUSOUT: `focusout${EVENT_KEY$3}`,\n  MOUSEENTER: `mouseenter${EVENT_KEY$3}`,\n  MOUSELEAVE: `mouseleave${EVENT_KEY$3}`\n};\nconst CLASS_NAME_FADE$2 = 'fade';\nconst CLASS_NAME_SHOW$2 = 'show';\nconst SELECTOR_TITLE = '.popover-header';\nconst SELECTOR_CONTENT = '.popover-body';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Popover extends Tooltip {\n  // Getters\n  static get Default() {\n    return Default$2;\n  }\n\n  static get NAME() {\n    return NAME$3;\n  }\n\n  static get Event() {\n    return Event$1;\n  }\n\n  static get DefaultType() {\n    return DefaultType$2;\n  } // Overrides\n\n\n  isWithContent() {\n    return this.getTitle() || this._getContent();\n  }\n\n  getTipElement() {\n    if (this.tip) {\n      return this.tip;\n    }\n\n    this.tip = super.getTipElement();\n\n    if (!this.getTitle()) {\n      SelectorEngine.findOne(SELECTOR_TITLE, this.tip).remove();\n    }\n\n    if (!this._getContent()) {\n      SelectorEngine.findOne(SELECTOR_CONTENT, this.tip).remove();\n    }\n\n    return this.tip;\n  }\n\n  setContent() {\n    const tip = this.getTipElement(); // we use append for html objects to maintain js events\n\n    this.setElementContent(SelectorEngine.findOne(SELECTOR_TITLE, tip), this.getTitle());\n\n    let content = this._getContent();\n\n    if (typeof content === 'function') {\n      content = content.call(this._element);\n    }\n\n    this.setElementContent(SelectorEngine.findOne(SELECTOR_CONTENT, tip), content);\n    tip.classList.remove(CLASS_NAME_FADE$2, CLASS_NAME_SHOW$2);\n  } // Private\n\n\n  _addAttachmentClass(attachment) {\n    this.getTipElement().classList.add(`${CLASS_PREFIX}-${this.updateAttachment(attachment)}`);\n  }\n\n  _getContent() {\n    return this._element.getAttribute('data-bs-content') || this._config.content;\n  }\n\n  _cleanTipClass() {\n    const tip = this.getTipElement();\n    const tabClass = tip.getAttribute('class').match(BSCLS_PREFIX_REGEX);\n\n    if (tabClass !== null && tabClass.length > 0) {\n      tabClass.map(token => token.trim()).forEach(tClass => tip.classList.remove(tClass));\n    }\n  } // Static\n\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Popover.getOrCreateInstance(this, config);\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config]();\n      }\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Popover to jQuery only if jQuery is present\n */\n\n\ndefineJQueryPlugin(Popover);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): scrollspy.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$2 = 'scrollspy';\nconst DATA_KEY$2 = 'bs.scrollspy';\nconst EVENT_KEY$2 = `.${DATA_KEY$2}`;\nconst DATA_API_KEY$1 = '.data-api';\nconst Default$1 = {\n  offset: 10,\n  method: 'auto',\n  target: ''\n};\nconst DefaultType$1 = {\n  offset: 'number',\n  method: 'string',\n  target: '(string|element)'\n};\nconst EVENT_ACTIVATE = `activate${EVENT_KEY$2}`;\nconst EVENT_SCROLL = `scroll${EVENT_KEY$2}`;\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY$2}${DATA_API_KEY$1}`;\nconst CLASS_NAME_DROPDOWN_ITEM = 'dropdown-item';\nconst CLASS_NAME_ACTIVE$1 = 'active';\nconst SELECTOR_DATA_SPY = '[data-bs-spy=\"scroll\"]';\nconst SELECTOR_NAV_LIST_GROUP$1 = '.nav, .list-group';\nconst SELECTOR_NAV_LINKS = '.nav-link';\nconst SELECTOR_NAV_ITEMS = '.nav-item';\nconst SELECTOR_LIST_ITEMS = '.list-group-item';\nconst SELECTOR_DROPDOWN$1 = '.dropdown';\nconst SELECTOR_DROPDOWN_TOGGLE$1 = '.dropdown-toggle';\nconst METHOD_OFFSET = 'offset';\nconst METHOD_POSITION = 'position';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass ScrollSpy extends BaseComponent {\n  constructor(element, config) {\n    super(element);\n    this._scrollElement = this._element.tagName === 'BODY' ? window : this._element;\n    this._config = this._getConfig(config);\n    this._selector = `${this._config.target} ${SELECTOR_NAV_LINKS}, ${this._config.target} ${SELECTOR_LIST_ITEMS}, ${this._config.target} .${CLASS_NAME_DROPDOWN_ITEM}`;\n    this._offsets = [];\n    this._targets = [];\n    this._activeTarget = null;\n    this._scrollHeight = 0;\n    EventHandler.on(this._scrollElement, EVENT_SCROLL, () => this._process());\n    this.refresh();\n\n    this._process();\n  } // Getters\n\n\n  static get Default() {\n    return Default$1;\n  }\n\n  static get NAME() {\n    return NAME$2;\n  } // Public\n\n\n  refresh() {\n    const autoMethod = this._scrollElement === this._scrollElement.window ? METHOD_OFFSET : METHOD_POSITION;\n    const offsetMethod = this._config.method === 'auto' ? autoMethod : this._config.method;\n    const offsetBase = offsetMethod === METHOD_POSITION ? this._getScrollTop() : 0;\n    this._offsets = [];\n    this._targets = [];\n    this._scrollHeight = this._getScrollHeight();\n    const targets = SelectorEngine.find(this._selector);\n    targets.map(element => {\n      const targetSelector = getSelectorFromElement(element);\n      const target = targetSelector ? SelectorEngine.findOne(targetSelector) : null;\n\n      if (target) {\n        const targetBCR = target.getBoundingClientRect();\n\n        if (targetBCR.width || targetBCR.height) {\n          return [Manipulator[offsetMethod](target).top + offsetBase, targetSelector];\n        }\n      }\n\n      return null;\n    }).filter(item => item).sort((a, b) => a[0] - b[0]).forEach(item => {\n      this._offsets.push(item[0]);\n\n      this._targets.push(item[1]);\n    });\n  }\n\n  dispose() {\n    EventHandler.off(this._scrollElement, EVENT_KEY$2);\n    super.dispose();\n  } // Private\n\n\n  _getConfig(config) {\n    config = { ...Default$1,\n      ...Manipulator.getDataAttributes(this._element),\n      ...(typeof config === 'object' && config ? config : {})\n    };\n\n    if (typeof config.target !== 'string' && isElement(config.target)) {\n      let {\n        id\n      } = config.target;\n\n      if (!id) {\n        id = getUID(NAME$2);\n        config.target.id = id;\n      }\n\n      config.target = `#${id}`;\n    }\n\n    typeCheckConfig(NAME$2, config, DefaultType$1);\n    return config;\n  }\n\n  _getScrollTop() {\n    return this._scrollElement === window ? this._scrollElement.pageYOffset : this._scrollElement.scrollTop;\n  }\n\n  _getScrollHeight() {\n    return this._scrollElement.scrollHeight || Math.max(document.body.scrollHeight, document.documentElement.scrollHeight);\n  }\n\n  _getOffsetHeight() {\n    return this._scrollElement === window ? window.innerHeight : this._scrollElement.getBoundingClientRect().height;\n  }\n\n  _process() {\n    const scrollTop = this._getScrollTop() + this._config.offset;\n\n    const scrollHeight = this._getScrollHeight();\n\n    const maxScroll = this._config.offset + scrollHeight - this._getOffsetHeight();\n\n    if (this._scrollHeight !== scrollHeight) {\n      this.refresh();\n    }\n\n    if (scrollTop >= maxScroll) {\n      const target = this._targets[this._targets.length - 1];\n\n      if (this._activeTarget !== target) {\n        this._activate(target);\n      }\n\n      return;\n    }\n\n    if (this._activeTarget && scrollTop < this._offsets[0] && this._offsets[0] > 0) {\n      this._activeTarget = null;\n\n      this._clear();\n\n      return;\n    }\n\n    for (let i = this._offsets.length; i--;) {\n      const isActiveTarget = this._activeTarget !== this._targets[i] && scrollTop >= this._offsets[i] && (typeof this._offsets[i + 1] === 'undefined' || scrollTop < this._offsets[i + 1]);\n\n      if (isActiveTarget) {\n        this._activate(this._targets[i]);\n      }\n    }\n  }\n\n  _activate(target) {\n    this._activeTarget = target;\n\n    this._clear();\n\n    const queries = this._selector.split(',').map(selector => `${selector}[data-bs-target=\"${target}\"],${selector}[href=\"${target}\"]`);\n\n    const link = SelectorEngine.findOne(queries.join(','));\n\n    if (link.classList.contains(CLASS_NAME_DROPDOWN_ITEM)) {\n      SelectorEngine.findOne(SELECTOR_DROPDOWN_TOGGLE$1, link.closest(SELECTOR_DROPDOWN$1)).classList.add(CLASS_NAME_ACTIVE$1);\n      link.classList.add(CLASS_NAME_ACTIVE$1);\n    } else {\n      // Set triggered link as active\n      link.classList.add(CLASS_NAME_ACTIVE$1);\n      SelectorEngine.parents(link, SELECTOR_NAV_LIST_GROUP$1).forEach(listGroup => {\n        // Set triggered links parents as active\n        // With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor\n        SelectorEngine.prev(listGroup, `${SELECTOR_NAV_LINKS}, ${SELECTOR_LIST_ITEMS}`).forEach(item => item.classList.add(CLASS_NAME_ACTIVE$1)); // Handle special case when .nav-link is inside .nav-item\n\n        SelectorEngine.prev(listGroup, SELECTOR_NAV_ITEMS).forEach(navItem => {\n          SelectorEngine.children(navItem, SELECTOR_NAV_LINKS).forEach(item => item.classList.add(CLASS_NAME_ACTIVE$1));\n        });\n      });\n    }\n\n    EventHandler.trigger(this._scrollElement, EVENT_ACTIVATE, {\n      relatedTarget: target\n    });\n  }\n\n  _clear() {\n    SelectorEngine.find(this._selector).filter(node => node.classList.contains(CLASS_NAME_ACTIVE$1)).forEach(node => node.classList.remove(CLASS_NAME_ACTIVE$1));\n  } // Static\n\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = ScrollSpy.getOrCreateInstance(this, config);\n\n      if (typeof config !== 'string') {\n        return;\n      }\n\n      if (typeof data[config] === 'undefined') {\n        throw new TypeError(`No method named \"${config}\"`);\n      }\n\n      data[config]();\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n  SelectorEngine.find(SELECTOR_DATA_SPY).forEach(spy => new ScrollSpy(spy));\n});\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .ScrollSpy to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(ScrollSpy);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): tab.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$1 = 'tab';\nconst DATA_KEY$1 = 'bs.tab';\nconst EVENT_KEY$1 = `.${DATA_KEY$1}`;\nconst DATA_API_KEY = '.data-api';\nconst EVENT_HIDE$1 = `hide${EVENT_KEY$1}`;\nconst EVENT_HIDDEN$1 = `hidden${EVENT_KEY$1}`;\nconst EVENT_SHOW$1 = `show${EVENT_KEY$1}`;\nconst EVENT_SHOWN$1 = `shown${EVENT_KEY$1}`;\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY$1}${DATA_API_KEY}`;\nconst CLASS_NAME_DROPDOWN_MENU = 'dropdown-menu';\nconst CLASS_NAME_ACTIVE = 'active';\nconst CLASS_NAME_FADE$1 = 'fade';\nconst CLASS_NAME_SHOW$1 = 'show';\nconst SELECTOR_DROPDOWN = '.dropdown';\nconst SELECTOR_NAV_LIST_GROUP = '.nav, .list-group';\nconst SELECTOR_ACTIVE = '.active';\nconst SELECTOR_ACTIVE_UL = ':scope > li > .active';\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"tab\"], [data-bs-toggle=\"pill\"], [data-bs-toggle=\"list\"]';\nconst SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle';\nconst SELECTOR_DROPDOWN_ACTIVE_CHILD = ':scope > .dropdown-menu .active';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Tab extends BaseComponent {\n  // Getters\n  static get NAME() {\n    return NAME$1;\n  } // Public\n\n\n  show() {\n    if (this._element.parentNode && this._element.parentNode.nodeType === Node.ELEMENT_NODE && this._element.classList.contains(CLASS_NAME_ACTIVE)) {\n      return;\n    }\n\n    let previous;\n    const target = getElementFromSelector(this._element);\n\n    const listElement = this._element.closest(SELECTOR_NAV_LIST_GROUP);\n\n    if (listElement) {\n      const itemSelector = listElement.nodeName === 'UL' || listElement.nodeName === 'OL' ? SELECTOR_ACTIVE_UL : SELECTOR_ACTIVE;\n      previous = SelectorEngine.find(itemSelector, listElement);\n      previous = previous[previous.length - 1];\n    }\n\n    const hideEvent = previous ? EventHandler.trigger(previous, EVENT_HIDE$1, {\n      relatedTarget: this._element\n    }) : null;\n    const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$1, {\n      relatedTarget: previous\n    });\n\n    if (showEvent.defaultPrevented || hideEvent !== null && hideEvent.defaultPrevented) {\n      return;\n    }\n\n    this._activate(this._element, listElement);\n\n    const complete = () => {\n      EventHandler.trigger(previous, EVENT_HIDDEN$1, {\n        relatedTarget: this._element\n      });\n      EventHandler.trigger(this._element, EVENT_SHOWN$1, {\n        relatedTarget: previous\n      });\n    };\n\n    if (target) {\n      this._activate(target, target.parentNode, complete);\n    } else {\n      complete();\n    }\n  } // Private\n\n\n  _activate(element, container, callback) {\n    const activeElements = container && (container.nodeName === 'UL' || container.nodeName === 'OL') ? SelectorEngine.find(SELECTOR_ACTIVE_UL, container) : SelectorEngine.children(container, SELECTOR_ACTIVE);\n    const active = activeElements[0];\n    const isTransitioning = callback && active && active.classList.contains(CLASS_NAME_FADE$1);\n\n    const complete = () => this._transitionComplete(element, active, callback);\n\n    if (active && isTransitioning) {\n      active.classList.remove(CLASS_NAME_SHOW$1);\n\n      this._queueCallback(complete, element, true);\n    } else {\n      complete();\n    }\n  }\n\n  _transitionComplete(element, active, callback) {\n    if (active) {\n      active.classList.remove(CLASS_NAME_ACTIVE);\n      const dropdownChild = SelectorEngine.findOne(SELECTOR_DROPDOWN_ACTIVE_CHILD, active.parentNode);\n\n      if (dropdownChild) {\n        dropdownChild.classList.remove(CLASS_NAME_ACTIVE);\n      }\n\n      if (active.getAttribute('role') === 'tab') {\n        active.setAttribute('aria-selected', false);\n      }\n    }\n\n    element.classList.add(CLASS_NAME_ACTIVE);\n\n    if (element.getAttribute('role') === 'tab') {\n      element.setAttribute('aria-selected', true);\n    }\n\n    reflow(element);\n\n    if (element.classList.contains(CLASS_NAME_FADE$1)) {\n      element.classList.add(CLASS_NAME_SHOW$1);\n    }\n\n    let parent = element.parentNode;\n\n    if (parent && parent.nodeName === 'LI') {\n      parent = parent.parentNode;\n    }\n\n    if (parent && parent.classList.contains(CLASS_NAME_DROPDOWN_MENU)) {\n      const dropdownElement = element.closest(SELECTOR_DROPDOWN);\n\n      if (dropdownElement) {\n        SelectorEngine.find(SELECTOR_DROPDOWN_TOGGLE, dropdownElement).forEach(dropdown => dropdown.classList.add(CLASS_NAME_ACTIVE));\n      }\n\n      element.setAttribute('aria-expanded', true);\n    }\n\n    if (callback) {\n      callback();\n    }\n  } // Static\n\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Tab.getOrCreateInstance(this);\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config]();\n      }\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n  if (['A', 'AREA'].includes(this.tagName)) {\n    event.preventDefault();\n  }\n\n  if (isDisabled(this)) {\n    return;\n  }\n\n  const data = Tab.getOrCreateInstance(this);\n  data.show();\n});\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Tab to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Tab);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): toast.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'toast';\nconst DATA_KEY = 'bs.toast';\nconst EVENT_KEY = `.${DATA_KEY}`;\nconst EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY}`;\nconst EVENT_MOUSEOVER = `mouseover${EVENT_KEY}`;\nconst EVENT_MOUSEOUT = `mouseout${EVENT_KEY}`;\nconst EVENT_FOCUSIN = `focusin${EVENT_KEY}`;\nconst EVENT_FOCUSOUT = `focusout${EVENT_KEY}`;\nconst EVENT_HIDE = `hide${EVENT_KEY}`;\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`;\nconst EVENT_SHOW = `show${EVENT_KEY}`;\nconst EVENT_SHOWN = `shown${EVENT_KEY}`;\nconst CLASS_NAME_FADE = 'fade';\nconst CLASS_NAME_HIDE = 'hide';\nconst CLASS_NAME_SHOW = 'show';\nconst CLASS_NAME_SHOWING = 'showing';\nconst DefaultType = {\n  animation: 'boolean',\n  autohide: 'boolean',\n  delay: 'number'\n};\nconst Default = {\n  animation: true,\n  autohide: true,\n  delay: 5000\n};\nconst SELECTOR_DATA_DISMISS = '[data-bs-dismiss=\"toast\"]';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Toast extends BaseComponent {\n  constructor(element, config) {\n    super(element);\n    this._config = this._getConfig(config);\n    this._timeout = null;\n    this._hasMouseInteraction = false;\n    this._hasKeyboardInteraction = false;\n\n    this._setListeners();\n  } // Getters\n\n\n  static get DefaultType() {\n    return DefaultType;\n  }\n\n  static get Default() {\n    return Default;\n  }\n\n  static get NAME() {\n    return NAME;\n  } // Public\n\n\n  show() {\n    const showEvent = EventHandler.trigger(this._element, EVENT_SHOW);\n\n    if (showEvent.defaultPrevented) {\n      return;\n    }\n\n    this._clearTimeout();\n\n    if (this._config.animation) {\n      this._element.classList.add(CLASS_NAME_FADE);\n    }\n\n    const complete = () => {\n      this._element.classList.remove(CLASS_NAME_SHOWING);\n\n      this._element.classList.add(CLASS_NAME_SHOW);\n\n      EventHandler.trigger(this._element, EVENT_SHOWN);\n\n      this._maybeScheduleHide();\n    };\n\n    this._element.classList.remove(CLASS_NAME_HIDE);\n\n    reflow(this._element);\n\n    this._element.classList.add(CLASS_NAME_SHOWING);\n\n    this._queueCallback(complete, this._element, this._config.animation);\n  }\n\n  hide() {\n    if (!this._element.classList.contains(CLASS_NAME_SHOW)) {\n      return;\n    }\n\n    const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE);\n\n    if (hideEvent.defaultPrevented) {\n      return;\n    }\n\n    const complete = () => {\n      this._element.classList.add(CLASS_NAME_HIDE);\n\n      EventHandler.trigger(this._element, EVENT_HIDDEN);\n    };\n\n    this._element.classList.remove(CLASS_NAME_SHOW);\n\n    this._queueCallback(complete, this._element, this._config.animation);\n  }\n\n  dispose() {\n    this._clearTimeout();\n\n    if (this._element.classList.contains(CLASS_NAME_SHOW)) {\n      this._element.classList.remove(CLASS_NAME_SHOW);\n    }\n\n    super.dispose();\n  } // Private\n\n\n  _getConfig(config) {\n    config = { ...Default,\n      ...Manipulator.getDataAttributes(this._element),\n      ...(typeof config === 'object' && config ? config : {})\n    };\n    typeCheckConfig(NAME, config, this.constructor.DefaultType);\n    return config;\n  }\n\n  _maybeScheduleHide() {\n    if (!this._config.autohide) {\n      return;\n    }\n\n    if (this._hasMouseInteraction || this._hasKeyboardInteraction) {\n      return;\n    }\n\n    this._timeout = setTimeout(() => {\n      this.hide();\n    }, this._config.delay);\n  }\n\n  _onInteraction(event, isInteracting) {\n    switch (event.type) {\n      case 'mouseover':\n      case 'mouseout':\n        this._hasMouseInteraction = isInteracting;\n        break;\n\n      case 'focusin':\n      case 'focusout':\n        this._hasKeyboardInteraction = isInteracting;\n        break;\n    }\n\n    if (isInteracting) {\n      this._clearTimeout();\n\n      return;\n    }\n\n    const nextElement = event.relatedTarget;\n\n    if (this._element === nextElement || this._element.contains(nextElement)) {\n      return;\n    }\n\n    this._maybeScheduleHide();\n  }\n\n  _setListeners() {\n    EventHandler.on(this._element, EVENT_CLICK_DISMISS, SELECTOR_DATA_DISMISS, () => this.hide());\n    EventHandler.on(this._element, EVENT_MOUSEOVER, event => this._onInteraction(event, true));\n    EventHandler.on(this._element, EVENT_MOUSEOUT, event => this._onInteraction(event, false));\n    EventHandler.on(this._element, EVENT_FOCUSIN, event => this._onInteraction(event, true));\n    EventHandler.on(this._element, EVENT_FOCUSOUT, event => this._onInteraction(event, false));\n  }\n\n  _clearTimeout() {\n    clearTimeout(this._timeout);\n    this._timeout = null;\n  } // Static\n\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Toast.getOrCreateInstance(this, config);\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config](this);\n      }\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Toast to jQuery only if jQuery is present\n */\n\n\ndefineJQueryPlugin(Toast);\n\nexport { Alert, Button, Carousel, Collapse, Dropdown, Modal, Offcanvas, Popover, ScrollSpy, Tab, Toast, Tooltip };\n//# sourceMappingURL=bootstrap.esm.js.map\n"
  },
  {
    "path": "src/sourceDev.WebApp/SharedThemes/journal/wwwroot/js/jquery.js",
    "content": "/*!\n * jQuery JavaScript Library v3.7.0\n * https://jquery.com/\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license\n * https://jquery.org/license\n *\n * Date: 2023-05-11T18:29Z\n */\n(function (global, factory) {\n\n\t\"use strict\";\n\n\tif (typeof module === \"object\" && typeof module.exports === \"object\") {\n\n\t\t// For CommonJS and CommonJS-like environments where a proper `window`\n\t\t// is present, execute the factory and get jQuery.\n\t\t// For environments that do not have a `window` with a `document`\n\t\t// (such as Node.js), expose a factory as module.exports.\n\t\t// This accentuates the need for the creation of a real `window`.\n\t\t// e.g. var jQuery = require(\"jquery\")(window);\n\t\t// See ticket trac-14549 for more info.\n\t\tmodule.exports = global.document ?\n\t\t\tfactory(global, true) :\n\t\t\tfunction (w) {\n\t\t\t\tif (!w.document) {\n\t\t\t\t\tthrow new Error(\"jQuery requires a window with a document\");\n\t\t\t\t}\n\t\t\t\treturn factory(w);\n\t\t\t};\n\t} else {\n\t\tfactory(global);\n\t}\n\n\t// Pass this if window is not defined yet\n})(typeof window !== \"undefined\" ? window : this, function (window, noGlobal) {\n\n\t// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1\n\t// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode\n\t// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common\n\t// enough that all such attempts are guarded in a try block.\n\t\"use strict\";\n\n\tvar arr = [];\n\n\tvar getProto = Object.getPrototypeOf;\n\n\tvar slice = arr.slice;\n\n\tvar flat = arr.flat ? function (array) {\n\t\treturn arr.flat.call(array);\n\t} : function (array) {\n\t\treturn arr.concat.apply([], array);\n\t};\n\n\n\tvar push = arr.push;\n\n\tvar indexOf = arr.indexOf;\n\n\tvar class2type = {};\n\n\tvar toString = class2type.toString;\n\n\tvar hasOwn = class2type.hasOwnProperty;\n\n\tvar fnToString = hasOwn.toString;\n\n\tvar ObjectFunctionString = fnToString.call(Object);\n\n\tvar support = {};\n\n\tvar isFunction = function isFunction(obj) {\n\n\t\t// Support: Chrome <=57, Firefox <=52\n\t\t// In some browsers, typeof returns \"function\" for HTML <object> elements\n\t\t// (i.e., `typeof document.createElement( \"object\" ) === \"function\"`).\n\t\t// We don't want to classify *any* DOM node as a function.\n\t\t// Support: QtWeb <=3.8.5, WebKit <=534.34, wkhtmltopdf tool <=0.12.5\n\t\t// Plus for old WebKit, typeof returns \"function\" for HTML collections\n\t\t// (e.g., `typeof document.getElementsByTagName(\"div\") === \"function\"`). (gh-4756)\n\t\treturn typeof obj === \"function\" && typeof obj.nodeType !== \"number\" &&\n\t\t\ttypeof obj.item !== \"function\";\n\t};\n\n\n\tvar isWindow = function isWindow(obj) {\n\t\treturn obj != null && obj === obj.window;\n\t};\n\n\n\tvar document = window.document;\n\n\n\n\tvar preservedScriptAttributes = {\n\t\ttype: true,\n\t\tsrc: true,\n\t\tnonce: true,\n\t\tnoModule: true\n\t};\n\n\tfunction DOMEval(code, node, doc) {\n\t\tdoc = doc || document;\n\n\t\tvar i, val,\n\t\t\tscript = doc.createElement(\"script\");\n\n\t\tscript.text = code;\n\t\tif (node) {\n\t\t\tfor (i in preservedScriptAttributes) {\n\n\t\t\t\t// Support: Firefox 64+, Edge 18+\n\t\t\t\t// Some browsers don't support the \"nonce\" property on scripts.\n\t\t\t\t// On the other hand, just using `getAttribute` is not enough as\n\t\t\t\t// the `nonce` attribute is reset to an empty string whenever it\n\t\t\t\t// becomes browsing-context connected.\n\t\t\t\t// See https://github.com/whatwg/html/issues/2369\n\t\t\t\t// See https://html.spec.whatwg.org/#nonce-attributes\n\t\t\t\t// The `node.getAttribute` check was added for the sake of\n\t\t\t\t// `jQuery.globalEval` so that it can fake a nonce-containing node\n\t\t\t\t// via an object.\n\t\t\t\tval = node[i] || node.getAttribute && node.getAttribute(i);\n\t\t\t\tif (val) {\n\t\t\t\t\tscript.setAttribute(i, val);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tdoc.head.appendChild(script).parentNode.removeChild(script);\n\t}\n\n\n\tfunction toType(obj) {\n\t\tif (obj == null) {\n\t\t\treturn obj + \"\";\n\t\t}\n\n\t\t// Support: Android <=2.3 only (functionish RegExp)\n\t\treturn typeof obj === \"object\" || typeof obj === \"function\" ?\n\t\t\tclass2type[toString.call(obj)] || \"object\" :\n\t\t\ttypeof obj;\n\t}\n\t/* global Symbol */\n\t// Defining this global in .eslintrc.json would create a danger of using the global\n\t// unguarded in another place, it seems safer to define global only for this module\n\n\n\n\tvar version = \"3.7.0\",\n\n\t\trhtmlSuffix = /HTML$/i,\n\n\t\t// Define a local copy of jQuery\n\t\tjQuery = function (selector, context) {\n\n\t\t\t// The jQuery object is actually just the init constructor 'enhanced'\n\t\t\t// Need init if jQuery is called (just allow error to be thrown if not included)\n\t\t\treturn new jQuery.fn.init(selector, context);\n\t\t};\n\n\tjQuery.fn = jQuery.prototype = {\n\n\t\t// The current version of jQuery being used\n\t\tjquery: version,\n\n\t\tconstructor: jQuery,\n\n\t\t// The default length of a jQuery object is 0\n\t\tlength: 0,\n\n\t\ttoArray: function () {\n\t\t\treturn slice.call(this);\n\t\t},\n\n\t\t// Get the Nth element in the matched element set OR\n\t\t// Get the whole matched element set as a clean array\n\t\tget: function (num) {\n\n\t\t\t// Return all the elements in a clean array\n\t\t\tif (num == null) {\n\t\t\t\treturn slice.call(this);\n\t\t\t}\n\n\t\t\t// Return just the one element from the set\n\t\t\treturn num < 0 ? this[num + this.length] : this[num];\n\t\t},\n\n\t\t// Take an array of elements and push it onto the stack\n\t\t// (returning the new matched element set)\n\t\tpushStack: function (elems) {\n\n\t\t\t// Build a new jQuery matched element set\n\t\t\tvar ret = jQuery.merge(this.constructor(), elems);\n\n\t\t\t// Add the old object onto the stack (as a reference)\n\t\t\tret.prevObject = this;\n\n\t\t\t// Return the newly-formed element set\n\t\t\treturn ret;\n\t\t},\n\n\t\t// Execute a callback for every element in the matched set.\n\t\teach: function (callback) {\n\t\t\treturn jQuery.each(this, callback);\n\t\t},\n\n\t\tmap: function (callback) {\n\t\t\treturn this.pushStack(jQuery.map(this, function (elem, i) {\n\t\t\t\treturn callback.call(elem, i, elem);\n\t\t\t}));\n\t\t},\n\n\t\tslice: function () {\n\t\t\treturn this.pushStack(slice.apply(this, arguments));\n\t\t},\n\n\t\tfirst: function () {\n\t\t\treturn this.eq(0);\n\t\t},\n\n\t\tlast: function () {\n\t\t\treturn this.eq(-1);\n\t\t},\n\n\t\teven: function () {\n\t\t\treturn this.pushStack(jQuery.grep(this, function (_elem, i) {\n\t\t\t\treturn (i + 1) % 2;\n\t\t\t}));\n\t\t},\n\n\t\todd: function () {\n\t\t\treturn this.pushStack(jQuery.grep(this, function (_elem, i) {\n\t\t\t\treturn i % 2;\n\t\t\t}));\n\t\t},\n\n\t\teq: function (i) {\n\t\t\tvar len = this.length,\n\t\t\t\tj = +i + (i < 0 ? len : 0);\n\t\t\treturn this.pushStack(j >= 0 && j < len ? [this[j]] : []);\n\t\t},\n\n\t\tend: function () {\n\t\t\treturn this.prevObject || this.constructor();\n\t\t},\n\n\t\t// For internal use only.\n\t\t// Behaves like an Array's method, not like a jQuery method.\n\t\tpush: push,\n\t\tsort: arr.sort,\n\t\tsplice: arr.splice\n\t};\n\n\tjQuery.extend = jQuery.fn.extend = function () {\n\t\tvar options, name, src, copy, copyIsArray, clone,\n\t\t\ttarget = arguments[0] || {},\n\t\t\ti = 1,\n\t\t\tlength = arguments.length,\n\t\t\tdeep = false;\n\n\t\t// Handle a deep copy situation\n\t\tif (typeof target === \"boolean\") {\n\t\t\tdeep = target;\n\n\t\t\t// Skip the boolean and the target\n\t\t\ttarget = arguments[i] || {};\n\t\t\ti++;\n\t\t}\n\n\t\t// Handle case when target is a string or something (possible in deep copy)\n\t\tif (typeof target !== \"object\" && !isFunction(target)) {\n\t\t\ttarget = {};\n\t\t}\n\n\t\t// Extend jQuery itself if only one argument is passed\n\t\tif (i === length) {\n\t\t\ttarget = this;\n\t\t\ti--;\n\t\t}\n\n\t\tfor (; i < length; i++) {\n\n\t\t\t// Only deal with non-null/undefined values\n\t\t\tif ((options = arguments[i]) != null) {\n\n\t\t\t\t// Extend the base object\n\t\t\t\tfor (name in options) {\n\t\t\t\t\tcopy = options[name];\n\n\t\t\t\t\t// Prevent Object.prototype pollution\n\t\t\t\t\t// Prevent never-ending loop\n\t\t\t\t\tif (name === \"__proto__\" || target === copy) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\t\tif (deep && copy && (jQuery.isPlainObject(copy) ||\n\t\t\t\t\t\t(copyIsArray = Array.isArray(copy)))) {\n\t\t\t\t\t\tsrc = target[name];\n\n\t\t\t\t\t\t// Ensure proper type for the source value\n\t\t\t\t\t\tif (copyIsArray && !Array.isArray(src)) {\n\t\t\t\t\t\t\tclone = [];\n\t\t\t\t\t\t} else if (!copyIsArray && !jQuery.isPlainObject(src)) {\n\t\t\t\t\t\t\tclone = {};\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tclone = src;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcopyIsArray = false;\n\n\t\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\t\ttarget[name] = jQuery.extend(deep, clone, copy);\n\n\t\t\t\t\t\t// Don't bring in undefined values\n\t\t\t\t\t} else if (copy !== undefined) {\n\t\t\t\t\t\ttarget[name] = copy;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Return the modified object\n\t\treturn target;\n\t};\n\n\tjQuery.extend({\n\n\t\t// Unique for each copy of jQuery on the page\n\t\texpando: \"jQuery\" + (version + Math.random()).replace(/\\D/g, \"\"),\n\n\t\t// Assume jQuery is ready without the ready module\n\t\tisReady: true,\n\n\t\terror: function (msg) {\n\t\t\tthrow new Error(msg);\n\t\t},\n\n\t\tnoop: function () { },\n\n\t\tisPlainObject: function (obj) {\n\t\t\tvar proto, Ctor;\n\n\t\t\t// Detect obvious negatives\n\t\t\t// Use toString instead of jQuery.type to catch host objects\n\t\t\tif (!obj || toString.call(obj) !== \"[object Object]\") {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tproto = getProto(obj);\n\n\t\t\t// Objects with no prototype (e.g., `Object.create( null )`) are plain\n\t\t\tif (!proto) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\t// Objects with prototype are plain iff they were constructed by a global Object function\n\t\t\tCtor = hasOwn.call(proto, \"constructor\") && proto.constructor;\n\t\t\treturn typeof Ctor === \"function\" && fnToString.call(Ctor) === ObjectFunctionString;\n\t\t},\n\n\t\tisEmptyObject: function (obj) {\n\t\t\tvar name;\n\n\t\t\tfor (name in obj) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\n\t\t// Evaluates a script in a provided context; falls back to the global one\n\t\t// if not specified.\n\t\tglobalEval: function (code, options, doc) {\n\t\t\tDOMEval(code, { nonce: options && options.nonce }, doc);\n\t\t},\n\n\t\teach: function (obj, callback) {\n\t\t\tvar length, i = 0;\n\n\t\t\tif (isArrayLike(obj)) {\n\t\t\t\tlength = obj.length;\n\t\t\t\tfor (; i < length; i++) {\n\t\t\t\t\tif (callback.call(obj[i], i, obj[i]) === false) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor (i in obj) {\n\t\t\t\t\tif (callback.call(obj[i], i, obj[i]) === false) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn obj;\n\t\t},\n\n\n\t\t// Retrieve the text value of an array of DOM nodes\n\t\ttext: function (elem) {\n\t\t\tvar node,\n\t\t\t\tret = \"\",\n\t\t\t\ti = 0,\n\t\t\t\tnodeType = elem.nodeType;\n\n\t\t\tif (!nodeType) {\n\n\t\t\t\t// If no nodeType, this is expected to be an array\n\t\t\t\twhile ((node = elem[i++])) {\n\n\t\t\t\t\t// Do not traverse comment nodes\n\t\t\t\t\tret += jQuery.text(node);\n\t\t\t\t}\n\t\t\t} else if (nodeType === 1 || nodeType === 9 || nodeType === 11) {\n\t\t\t\treturn elem.textContent;\n\t\t\t} else if (nodeType === 3 || nodeType === 4) {\n\t\t\t\treturn elem.nodeValue;\n\t\t\t}\n\n\t\t\t// Do not include comment or processing instruction nodes\n\n\t\t\treturn ret;\n\t\t},\n\n\t\t// results is for internal usage only\n\t\tmakeArray: function (arr, results) {\n\t\t\tvar ret = results || [];\n\n\t\t\tif (arr != null) {\n\t\t\t\tif (isArrayLike(Object(arr))) {\n\t\t\t\t\tjQuery.merge(ret,\n\t\t\t\t\t\ttypeof arr === \"string\" ?\n\t\t\t\t\t\t\t[arr] : arr\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\tpush.call(ret, arr);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn ret;\n\t\t},\n\n\t\tinArray: function (elem, arr, i) {\n\t\t\treturn arr == null ? -1 : indexOf.call(arr, elem, i);\n\t\t},\n\n\t\tisXMLDoc: function (elem) {\n\t\t\tvar namespace = elem && elem.namespaceURI,\n\t\t\t\tdocElem = elem && (elem.ownerDocument || elem).documentElement;\n\n\t\t\t// Assume HTML when documentElement doesn't yet exist, such as inside\n\t\t\t// document fragments.\n\t\t\treturn !rhtmlSuffix.test(namespace || docElem && docElem.nodeName || \"HTML\");\n\t\t},\n\n\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\tmerge: function (first, second) {\n\t\t\tvar len = +second.length,\n\t\t\t\tj = 0,\n\t\t\t\ti = first.length;\n\n\t\t\tfor (; j < len; j++) {\n\t\t\t\tfirst[i++] = second[j];\n\t\t\t}\n\n\t\t\tfirst.length = i;\n\n\t\t\treturn first;\n\t\t},\n\n\t\tgrep: function (elems, callback, invert) {\n\t\t\tvar callbackInverse,\n\t\t\t\tmatches = [],\n\t\t\t\ti = 0,\n\t\t\t\tlength = elems.length,\n\t\t\t\tcallbackExpect = !invert;\n\n\t\t\t// Go through the array, only saving the items\n\t\t\t// that pass the validator function\n\t\t\tfor (; i < length; i++) {\n\t\t\t\tcallbackInverse = !callback(elems[i], i);\n\t\t\t\tif (callbackInverse !== callbackExpect) {\n\t\t\t\t\tmatches.push(elems[i]);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn matches;\n\t\t},\n\n\t\t// arg is for internal usage only\n\t\tmap: function (elems, callback, arg) {\n\t\t\tvar length, value,\n\t\t\t\ti = 0,\n\t\t\t\tret = [];\n\n\t\t\t// Go through the array, translating each of the items to their new values\n\t\t\tif (isArrayLike(elems)) {\n\t\t\t\tlength = elems.length;\n\t\t\t\tfor (; i < length; i++) {\n\t\t\t\t\tvalue = callback(elems[i], i, arg);\n\n\t\t\t\t\tif (value != null) {\n\t\t\t\t\t\tret.push(value);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Go through every key on the object,\n\t\t\t} else {\n\t\t\t\tfor (i in elems) {\n\t\t\t\t\tvalue = callback(elems[i], i, arg);\n\n\t\t\t\t\tif (value != null) {\n\t\t\t\t\t\tret.push(value);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Flatten any nested arrays\n\t\t\treturn flat(ret);\n\t\t},\n\n\t\t// A global GUID counter for objects\n\t\tguid: 1,\n\n\t\t// jQuery.support is not used in Core but other projects attach their\n\t\t// properties to it so it needs to exist.\n\t\tsupport: support\n\t});\n\n\tif (typeof Symbol === \"function\") {\n\t\tjQuery.fn[Symbol.iterator] = arr[Symbol.iterator];\n\t}\n\n\t// Populate the class2type map\n\tjQuery.each(\"Boolean Number String Function Array Date RegExp Object Error Symbol\".split(\" \"),\n\t\tfunction (_i, name) {\n\t\t\tclass2type[\"[object \" + name + \"]\"] = name.toLowerCase();\n\t\t});\n\n\tfunction isArrayLike(obj) {\n\n\t\t// Support: real iOS 8.2 only (not reproducible in simulator)\n\t\t// `in` check used to prevent JIT error (gh-2145)\n\t\t// hasOwn isn't used here due to false negatives\n\t\t// regarding Nodelist length in IE\n\t\tvar length = !!obj && \"length\" in obj && obj.length,\n\t\t\ttype = toType(obj);\n\n\t\tif (isFunction(obj) || isWindow(obj)) {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn type === \"array\" || length === 0 ||\n\t\t\ttypeof length === \"number\" && length > 0 && (length - 1) in obj;\n\t}\n\n\n\tfunction nodeName(elem, name) {\n\n\t\treturn elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();\n\n\t}\n\tvar pop = arr.pop;\n\n\n\tvar sort = arr.sort;\n\n\n\tvar splice = arr.splice;\n\n\n\tvar whitespace = \"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\";\n\n\n\tvar rtrimCSS = new RegExp(\n\t\t\"^\" + whitespace + \"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\" + whitespace + \"+$\",\n\t\t\"g\"\n\t);\n\n\n\n\n\t// Note: an element does not contain itself\n\tjQuery.contains = function (a, b) {\n\t\tvar bup = b && b.parentNode;\n\n\t\treturn a === bup || !!(bup && bup.nodeType === 1 && (\n\n\t\t\t// Support: IE 9 - 11+\n\t\t\t// IE doesn't have `contains` on SVG.\n\t\t\ta.contains ?\n\t\t\t\ta.contains(bup) :\n\t\t\t\ta.compareDocumentPosition && a.compareDocumentPosition(bup) & 16\n\t\t));\n\t};\n\n\n\n\n\t// CSS string/identifier serialization\n\t// https://drafts.csswg.org/cssom/#common-serializing-idioms\n\tvar rcssescape = /([\\0-\\x1f\\x7f]|^-?\\d)|^-$|[^\\x80-\\uFFFF\\w-]/g;\n\n\tfunction fcssescape(ch, asCodePoint) {\n\t\tif (asCodePoint) {\n\n\t\t\t// U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER\n\t\t\tif (ch === \"\\0\") {\n\t\t\t\treturn \"\\uFFFD\";\n\t\t\t}\n\n\t\t\t// Control characters and (dependent upon position) numbers get escaped as code points\n\t\t\treturn ch.slice(0, -1) + \"\\\\\" + ch.charCodeAt(ch.length - 1).toString(16) + \" \";\n\t\t}\n\n\t\t// Other potentially-special ASCII characters get backslash-escaped\n\t\treturn \"\\\\\" + ch;\n\t}\n\n\tjQuery.escapeSelector = function (sel) {\n\t\treturn (sel + \"\").replace(rcssescape, fcssescape);\n\t};\n\n\n\n\n\tvar preferredDoc = document,\n\t\tpushNative = push;\n\n\t(function () {\n\n\t\tvar i,\n\t\t\tExpr,\n\t\t\toutermostContext,\n\t\t\tsortInput,\n\t\t\thasDuplicate,\n\t\t\tpush = pushNative,\n\n\t\t\t// Local document vars\n\t\t\tdocument,\n\t\t\tdocumentElement,\n\t\t\tdocumentIsHTML,\n\t\t\trbuggyQSA,\n\t\t\tmatches,\n\n\t\t\t// Instance-specific data\n\t\t\texpando = jQuery.expando,\n\t\t\tdirruns = 0,\n\t\t\tdone = 0,\n\t\t\tclassCache = createCache(),\n\t\t\ttokenCache = createCache(),\n\t\t\tcompilerCache = createCache(),\n\t\t\tnonnativeSelectorCache = createCache(),\n\t\t\tsortOrder = function (a, b) {\n\t\t\t\tif (a === b) {\n\t\t\t\t\thasDuplicate = true;\n\t\t\t\t}\n\t\t\t\treturn 0;\n\t\t\t},\n\n\t\t\tbooleans = \"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|\" +\n\t\t\t\t\"loop|multiple|open|readonly|required|scoped\",\n\n\t\t\t// Regular expressions\n\n\t\t\t// https://www.w3.org/TR/css-syntax-3/#ident-token-diagram\n\t\t\tidentifier = \"(?:\\\\\\\\[\\\\da-fA-F]{1,6}\" + whitespace +\n\t\t\t\t\"?|\\\\\\\\[^\\\\r\\\\n\\\\f]|[\\\\w-]|[^\\0-\\\\x7f])+\",\n\n\t\t\t// Attribute selectors: https://www.w3.org/TR/selectors/#attribute-selectors\n\t\t\tattributes = \"\\\\[\" + whitespace + \"*(\" + identifier + \")(?:\" + whitespace +\n\n\t\t\t\t// Operator (capture 2)\n\t\t\t\t\"*([*^$|!~]?=)\" + whitespace +\n\n\t\t\t\t// \"Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]\"\n\t\t\t\t\"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\" + identifier + \"))|)\" +\n\t\t\t\twhitespace + \"*\\\\]\",\n\n\t\t\tpseudos = \":(\" + identifier + \")(?:\\\\((\" +\n\n\t\t\t\t// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:\n\t\t\t\t// 1. quoted (capture 3; capture 4 or capture 5)\n\t\t\t\t\"('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|\" +\n\n\t\t\t\t// 2. simple (capture 6)\n\t\t\t\t\"((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\" + attributes + \")*)|\" +\n\n\t\t\t\t// 3. anything else (capture 2)\n\t\t\t\t\".*\" +\n\t\t\t\t\")\\\\)|)\",\n\n\t\t\t// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter\n\t\t\trwhitespace = new RegExp(whitespace + \"+\", \"g\"),\n\n\t\t\trcomma = new RegExp(\"^\" + whitespace + \"*,\" + whitespace + \"*\"),\n\t\t\trleadingCombinator = new RegExp(\"^\" + whitespace + \"*([>+~]|\" + whitespace + \")\" +\n\t\t\t\twhitespace + \"*\"),\n\t\t\trdescend = new RegExp(whitespace + \"|>\"),\n\n\t\t\trpseudo = new RegExp(pseudos),\n\t\t\tridentifier = new RegExp(\"^\" + identifier + \"$\"),\n\n\t\t\tmatchExpr = {\n\t\t\t\tID: new RegExp(\"^#(\" + identifier + \")\"),\n\t\t\t\tCLASS: new RegExp(\"^\\\\.(\" + identifier + \")\"),\n\t\t\t\tTAG: new RegExp(\"^(\" + identifier + \"|[*])\"),\n\t\t\t\tATTR: new RegExp(\"^\" + attributes),\n\t\t\t\tPSEUDO: new RegExp(\"^\" + pseudos),\n\t\t\t\tCHILD: new RegExp(\n\t\t\t\t\t\"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\" +\n\t\t\t\t\twhitespace + \"*(even|odd|(([+-]|)(\\\\d*)n|)\" + whitespace + \"*(?:([+-]|)\" +\n\t\t\t\t\twhitespace + \"*(\\\\d+)|))\" + whitespace + \"*\\\\)|)\", \"i\"),\n\t\t\t\tbool: new RegExp(\"^(?:\" + booleans + \")$\", \"i\"),\n\n\t\t\t\t// For use in libraries implementing .is()\n\t\t\t\t// We use this for POS matching in `select`\n\t\t\t\tneedsContext: new RegExp(\"^\" + whitespace +\n\t\t\t\t\t\"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\" + whitespace +\n\t\t\t\t\t\"*((?:-\\\\d)?\\\\d*)\" + whitespace + \"*\\\\)|)(?=[^-]|$)\", \"i\")\n\t\t\t},\n\n\t\t\trinputs = /^(?:input|select|textarea|button)$/i,\n\t\t\trheader = /^h\\d$/i,\n\n\t\t\t// Easily-parseable/retrievable ID or TAG or CLASS selectors\n\t\t\trquickExpr = /^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,\n\n\t\t\trsibling = /[+~]/,\n\n\t\t\t// CSS escapes\n\t\t\t// https://www.w3.org/TR/CSS21/syndata.html#escaped-characters\n\t\t\trunescape = new RegExp(\"\\\\\\\\[\\\\da-fA-F]{1,6}\" + whitespace +\n\t\t\t\t\"?|\\\\\\\\([^\\\\r\\\\n\\\\f])\", \"g\"),\n\t\t\tfunescape = function (escape, nonHex) {\n\t\t\t\tvar high = \"0x\" + escape.slice(1) - 0x10000;\n\n\t\t\t\tif (nonHex) {\n\n\t\t\t\t\t// Strip the backslash prefix from a non-hex escape sequence\n\t\t\t\t\treturn nonHex;\n\t\t\t\t}\n\n\t\t\t\t// Replace a hexadecimal escape sequence with the encoded Unicode code point\n\t\t\t\t// Support: IE <=11+\n\t\t\t\t// For values outside the Basic Multilingual Plane (BMP), manually construct a\n\t\t\t\t// surrogate pair\n\t\t\t\treturn high < 0 ?\n\t\t\t\t\tString.fromCharCode(high + 0x10000) :\n\t\t\t\t\tString.fromCharCode(high >> 10 | 0xD800, high & 0x3FF | 0xDC00);\n\t\t\t},\n\n\t\t\t// Used for iframes; see `setDocument`.\n\t\t\t// Support: IE 9 - 11+, Edge 12 - 18+\n\t\t\t// Removing the function wrapper causes a \"Permission Denied\"\n\t\t\t// error in IE/Edge.\n\t\t\tunloadHandler = function () {\n\t\t\t\tsetDocument();\n\t\t\t},\n\n\t\t\tinDisabledFieldset = addCombinator(\n\t\t\t\tfunction (elem) {\n\t\t\t\t\treturn elem.disabled === true && nodeName(elem, \"fieldset\");\n\t\t\t\t},\n\t\t\t\t{ dir: \"parentNode\", next: \"legend\" }\n\t\t\t);\n\n\t\t// Support: IE <=9 only\n\t\t// Accessing document.activeElement can throw unexpectedly\n\t\t// https://bugs.jquery.com/ticket/13393\n\t\tfunction safeActiveElement() {\n\t\t\ttry {\n\t\t\t\treturn document.activeElement;\n\t\t\t} catch (err) { }\n\t\t}\n\n\t\t// Optimize for push.apply( _, NodeList )\n\t\ttry {\n\t\t\tpush.apply(\n\t\t\t\t(arr = slice.call(preferredDoc.childNodes)),\n\t\t\t\tpreferredDoc.childNodes\n\t\t\t);\n\n\t\t\t// Support: Android <=4.0\n\t\t\t// Detect silently failing push.apply\n\t\t\t// eslint-disable-next-line no-unused-expressions\n\t\t\tarr[preferredDoc.childNodes.length].nodeType;\n\t\t} catch (e) {\n\t\t\tpush = {\n\t\t\t\tapply: function (target, els) {\n\t\t\t\t\tpushNative.apply(target, slice.call(els));\n\t\t\t\t},\n\t\t\t\tcall: function (target) {\n\t\t\t\t\tpushNative.apply(target, slice.call(arguments, 1));\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\n\t\tfunction find(selector, context, results, seed) {\n\t\t\tvar m, i, elem, nid, match, groups, newSelector,\n\t\t\t\tnewContext = context && context.ownerDocument,\n\n\t\t\t\t// nodeType defaults to 9, since context defaults to document\n\t\t\t\tnodeType = context ? context.nodeType : 9;\n\n\t\t\tresults = results || [];\n\n\t\t\t// Return early from calls with invalid selector or context\n\t\t\tif (typeof selector !== \"string\" || !selector ||\n\t\t\t\tnodeType !== 1 && nodeType !== 9 && nodeType !== 11) {\n\n\t\t\t\treturn results;\n\t\t\t}\n\n\t\t\t// Try to shortcut find operations (as opposed to filters) in HTML documents\n\t\t\tif (!seed) {\n\t\t\t\tsetDocument(context);\n\t\t\t\tcontext = context || document;\n\n\t\t\t\tif (documentIsHTML) {\n\n\t\t\t\t\t// If the selector is sufficiently simple, try using a \"get*By*\" DOM method\n\t\t\t\t\t// (excepting DocumentFragment context, where the methods don't exist)\n\t\t\t\t\tif (nodeType !== 11 && (match = rquickExpr.exec(selector))) {\n\n\t\t\t\t\t\t// ID selector\n\t\t\t\t\t\tif ((m = match[1])) {\n\n\t\t\t\t\t\t\t// Document context\n\t\t\t\t\t\t\tif (nodeType === 9) {\n\t\t\t\t\t\t\t\tif ((elem = context.getElementById(m))) {\n\n\t\t\t\t\t\t\t\t\t// Support: IE 9 only\n\t\t\t\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\t\t\t\tif (elem.id === m) {\n\t\t\t\t\t\t\t\t\t\tpush.call(results, elem);\n\t\t\t\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t// Element context\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t// Support: IE 9 only\n\t\t\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\t\t\tif (newContext && (elem = newContext.getElementById(m)) &&\n\t\t\t\t\t\t\t\t\tfind.contains(context, elem) &&\n\t\t\t\t\t\t\t\t\telem.id === m) {\n\n\t\t\t\t\t\t\t\t\tpush.call(results, elem);\n\t\t\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Type selector\n\t\t\t\t\t\t} else if (match[2]) {\n\t\t\t\t\t\t\tpush.apply(results, context.getElementsByTagName(selector));\n\t\t\t\t\t\t\treturn results;\n\n\t\t\t\t\t\t\t// Class selector\n\t\t\t\t\t\t} else if ((m = match[3]) && context.getElementsByClassName) {\n\t\t\t\t\t\t\tpush.apply(results, context.getElementsByClassName(m));\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Take advantage of querySelectorAll\n\t\t\t\t\tif (!nonnativeSelectorCache[selector + \" \"] &&\n\t\t\t\t\t\t(!rbuggyQSA || !rbuggyQSA.test(selector))) {\n\n\t\t\t\t\t\tnewSelector = selector;\n\t\t\t\t\t\tnewContext = context;\n\n\t\t\t\t\t\t// qSA considers elements outside a scoping root when evaluating child or\n\t\t\t\t\t\t// descendant combinators, which is not what we want.\n\t\t\t\t\t\t// In such cases, we work around the behavior by prefixing every selector in the\n\t\t\t\t\t\t// list with an ID selector referencing the scope context.\n\t\t\t\t\t\t// The technique has to be used as well when a leading combinator is used\n\t\t\t\t\t\t// as such selectors are not recognized by querySelectorAll.\n\t\t\t\t\t\t// Thanks to Andrew Dupont for this technique.\n\t\t\t\t\t\tif (nodeType === 1 &&\n\t\t\t\t\t\t\t(rdescend.test(selector) || rleadingCombinator.test(selector))) {\n\n\t\t\t\t\t\t\t// Expand context for sibling selectors\n\t\t\t\t\t\t\tnewContext = rsibling.test(selector) && testContext(context.parentNode) ||\n\t\t\t\t\t\t\t\tcontext;\n\n\t\t\t\t\t\t\t// We can use :scope instead of the ID hack if the browser\n\t\t\t\t\t\t\t// supports it & if we're not changing the context.\n\t\t\t\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when\n\t\t\t\t\t\t\t// strict-comparing two documents; shallow comparisons work.\n\t\t\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\t\t\tif (newContext != context || !support.scope) {\n\n\t\t\t\t\t\t\t\t// Capture the context ID, setting it first if necessary\n\t\t\t\t\t\t\t\tif ((nid = context.getAttribute(\"id\"))) {\n\t\t\t\t\t\t\t\t\tnid = jQuery.escapeSelector(nid);\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tcontext.setAttribute(\"id\", (nid = expando));\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Prefix every selector in the list\n\t\t\t\t\t\t\tgroups = tokenize(selector);\n\t\t\t\t\t\t\ti = groups.length;\n\t\t\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\t\t\tgroups[i] = (nid ? \"#\" + nid : \":scope\") + \" \" +\n\t\t\t\t\t\t\t\t\ttoSelector(groups[i]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tnewSelector = groups.join(\",\");\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tpush.apply(results,\n\t\t\t\t\t\t\t\tnewContext.querySelectorAll(newSelector)\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t} catch (qsaError) {\n\t\t\t\t\t\t\tnonnativeSelectorCache(selector, true);\n\t\t\t\t\t\t} finally {\n\t\t\t\t\t\t\tif (nid === expando) {\n\t\t\t\t\t\t\t\tcontext.removeAttribute(\"id\");\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// All others\n\t\t\treturn select(selector.replace(rtrimCSS, \"$1\"), context, results, seed);\n\t\t}\n\n\t\t/**\n\t\t * Create key-value caches of limited size\n\t\t * @returns {function(string, object)} Returns the Object data after storing it on itself with\n\t\t *\tproperty name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)\n\t\t *\tdeleting the oldest entry\n\t\t */\n\t\tfunction createCache() {\n\t\t\tvar keys = [];\n\n\t\t\tfunction cache(key, value) {\n\n\t\t\t\t// Use (key + \" \") to avoid collision with native prototype properties\n\t\t\t\t// (see https://github.com/jquery/sizzle/issues/157)\n\t\t\t\tif (keys.push(key + \" \") > Expr.cacheLength) {\n\n\t\t\t\t\t// Only keep the most recent entries\n\t\t\t\t\tdelete cache[keys.shift()];\n\t\t\t\t}\n\t\t\t\treturn (cache[key + \" \"] = value);\n\t\t\t}\n\t\t\treturn cache;\n\t\t}\n\n\t\t/**\n\t\t * Mark a function for special use by jQuery selector module\n\t\t * @param {Function} fn The function to mark\n\t\t */\n\t\tfunction markFunction(fn) {\n\t\t\tfn[expando] = true;\n\t\t\treturn fn;\n\t\t}\n\n\t\t/**\n\t\t * Support testing using an element\n\t\t * @param {Function} fn Passed the created element and returns a boolean result\n\t\t */\n\t\tfunction assert(fn) {\n\t\t\tvar el = document.createElement(\"fieldset\");\n\n\t\t\ttry {\n\t\t\t\treturn !!fn(el);\n\t\t\t} catch (e) {\n\t\t\t\treturn false;\n\t\t\t} finally {\n\n\t\t\t\t// Remove from its parent by default\n\t\t\t\tif (el.parentNode) {\n\t\t\t\t\tel.parentNode.removeChild(el);\n\t\t\t\t}\n\n\t\t\t\t// release memory in IE\n\t\t\t\tel = null;\n\t\t\t}\n\t\t}\n\n\t\t/**\n\t\t * Returns a function to use in pseudos for input types\n\t\t * @param {String} type\n\t\t */\n\t\tfunction createInputPseudo(type) {\n\t\t\treturn function (elem) {\n\t\t\t\treturn nodeName(elem, \"input\") && elem.type === type;\n\t\t\t};\n\t\t}\n\n\t\t/**\n\t\t * Returns a function to use in pseudos for buttons\n\t\t * @param {String} type\n\t\t */\n\t\tfunction createButtonPseudo(type) {\n\t\t\treturn function (elem) {\n\t\t\t\treturn (nodeName(elem, \"input\") || nodeName(elem, \"button\")) &&\n\t\t\t\t\telem.type === type;\n\t\t\t};\n\t\t}\n\n\t\t/**\n\t\t * Returns a function to use in pseudos for :enabled/:disabled\n\t\t * @param {Boolean} disabled true for :disabled; false for :enabled\n\t\t */\n\t\tfunction createDisabledPseudo(disabled) {\n\n\t\t\t// Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable\n\t\t\treturn function (elem) {\n\n\t\t\t\t// Only certain elements can match :enabled or :disabled\n\t\t\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled\n\t\t\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled\n\t\t\t\tif (\"form\" in elem) {\n\n\t\t\t\t\t// Check for inherited disabledness on relevant non-disabled elements:\n\t\t\t\t\t// * listed form-associated elements in a disabled fieldset\n\t\t\t\t\t//   https://html.spec.whatwg.org/multipage/forms.html#category-listed\n\t\t\t\t\t//   https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled\n\t\t\t\t\t// * option elements in a disabled optgroup\n\t\t\t\t\t//   https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled\n\t\t\t\t\t// All such elements have a \"form\" property.\n\t\t\t\t\tif (elem.parentNode && elem.disabled === false) {\n\n\t\t\t\t\t\t// Option elements defer to a parent optgroup if present\n\t\t\t\t\t\tif (\"label\" in elem) {\n\t\t\t\t\t\t\tif (\"label\" in elem.parentNode) {\n\t\t\t\t\t\t\t\treturn elem.parentNode.disabled === disabled;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\treturn elem.disabled === disabled;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Support: IE 6 - 11+\n\t\t\t\t\t\t// Use the isDisabled shortcut property to check for disabled fieldset ancestors\n\t\t\t\t\t\treturn elem.isDisabled === disabled ||\n\n\t\t\t\t\t\t\t// Where there is no isDisabled, check manually\n\t\t\t\t\t\t\telem.isDisabled !== !disabled &&\n\t\t\t\t\t\t\tinDisabledFieldset(elem) === disabled;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn elem.disabled === disabled;\n\n\t\t\t\t\t// Try to winnow out elements that can't be disabled before trusting the disabled property.\n\t\t\t\t\t// Some victims get caught in our net (label, legend, menu, track), but it shouldn't\n\t\t\t\t\t// even exist on them, let alone have a boolean value.\n\t\t\t\t} else if (\"label\" in elem) {\n\t\t\t\t\treturn elem.disabled === disabled;\n\t\t\t\t}\n\n\t\t\t\t// Remaining elements are neither :enabled nor :disabled\n\t\t\t\treturn false;\n\t\t\t};\n\t\t}\n\n\t\t/**\n\t\t * Returns a function to use in pseudos for positionals\n\t\t * @param {Function} fn\n\t\t */\n\t\tfunction createPositionalPseudo(fn) {\n\t\t\treturn markFunction(function (argument) {\n\t\t\t\targument = +argument;\n\t\t\t\treturn markFunction(function (seed, matches) {\n\t\t\t\t\tvar j,\n\t\t\t\t\t\tmatchIndexes = fn([], seed.length, argument),\n\t\t\t\t\t\ti = matchIndexes.length;\n\n\t\t\t\t\t// Match elements found at the specified indexes\n\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\tif (seed[(j = matchIndexes[i])]) {\n\t\t\t\t\t\t\tseed[j] = !(matches[j] = seed[j]);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\n\t\t/**\n\t\t * Checks a node for validity as a jQuery selector context\n\t\t * @param {Element|Object=} context\n\t\t * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value\n\t\t */\n\t\tfunction testContext(context) {\n\t\t\treturn context && typeof context.getElementsByTagName !== \"undefined\" && context;\n\t\t}\n\n\t\t/**\n\t\t * Sets document-related variables once based on the current document\n\t\t * @param {Element|Object} [node] An element or document object to use to set the document\n\t\t * @returns {Object} Returns the current document\n\t\t */\n\t\tfunction setDocument(node) {\n\t\t\tvar subWindow,\n\t\t\t\tdoc = node ? node.ownerDocument || node : preferredDoc;\n\n\t\t\t// Return early if doc is invalid or already selected\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tif (doc == document || doc.nodeType !== 9 || !doc.documentElement) {\n\t\t\t\treturn document;\n\t\t\t}\n\n\t\t\t// Update global variables\n\t\t\tdocument = doc;\n\t\t\tdocumentElement = document.documentElement;\n\t\t\tdocumentIsHTML = !jQuery.isXMLDoc(document);\n\n\t\t\t// Support: iOS 7 only, IE 9 - 11+\n\t\t\t// Older browsers didn't support unprefixed `matches`.\n\t\t\tmatches = documentElement.matches ||\n\t\t\t\tdocumentElement.webkitMatchesSelector ||\n\t\t\t\tdocumentElement.msMatchesSelector;\n\n\t\t\t// Support: IE 9 - 11+, Edge 12 - 18+\n\t\t\t// Accessing iframe documents after unload throws \"permission denied\" errors (see trac-13936)\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tif (preferredDoc != document &&\n\t\t\t\t(subWindow = document.defaultView) && subWindow.top !== subWindow) {\n\n\t\t\t\t// Support: IE 9 - 11+, Edge 12 - 18+\n\t\t\t\tsubWindow.addEventListener(\"unload\", unloadHandler);\n\t\t\t}\n\n\t\t\t// Support: IE <10\n\t\t\t// Check if getElementById returns elements by name\n\t\t\t// The broken getElementById methods don't pick up programmatically-set names,\n\t\t\t// so use a roundabout getElementsByName test\n\t\t\tsupport.getById = assert(function (el) {\n\t\t\t\tdocumentElement.appendChild(el).id = jQuery.expando;\n\t\t\t\treturn !document.getElementsByName ||\n\t\t\t\t\t!document.getElementsByName(jQuery.expando).length;\n\t\t\t});\n\n\t\t\t// Support: IE 9 only\n\t\t\t// Check to see if it's possible to do matchesSelector\n\t\t\t// on a disconnected node.\n\t\t\tsupport.disconnectedMatch = assert(function (el) {\n\t\t\t\treturn matches.call(el, \"*\");\n\t\t\t});\n\n\t\t\t// Support: IE 9 - 11+, Edge 12 - 18+\n\t\t\t// IE/Edge don't support the :scope pseudo-class.\n\t\t\tsupport.scope = assert(function () {\n\t\t\t\treturn document.querySelectorAll(\":scope\");\n\t\t\t});\n\n\t\t\t// Support: Chrome 105 - 111 only, Safari 15.4 - 16.3 only\n\t\t\t// Make sure the `:has()` argument is parsed unforgivingly.\n\t\t\t// We include `*` in the test to detect buggy implementations that are\n\t\t\t// _selectively_ forgiving (specifically when the list includes at least\n\t\t\t// one valid selector).\n\t\t\t// Note that we treat complete lack of support for `:has()` as if it were\n\t\t\t// spec-compliant support, which is fine because use of `:has()` in such\n\t\t\t// environments will fail in the qSA path and fall back to jQuery traversal\n\t\t\t// anyway.\n\t\t\tsupport.cssHas = assert(function () {\n\t\t\t\ttry {\n\t\t\t\t\tdocument.querySelector(\":has(*,:jqfake)\");\n\t\t\t\t\treturn false;\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t// ID filter and find\n\t\t\tif (support.getById) {\n\t\t\t\tExpr.filter.ID = function (id) {\n\t\t\t\t\tvar attrId = id.replace(runescape, funescape);\n\t\t\t\t\treturn function (elem) {\n\t\t\t\t\t\treturn elem.getAttribute(\"id\") === attrId;\n\t\t\t\t\t};\n\t\t\t\t};\n\t\t\t\tExpr.find.ID = function (id, context) {\n\t\t\t\t\tif (typeof context.getElementById !== \"undefined\" && documentIsHTML) {\n\t\t\t\t\t\tvar elem = context.getElementById(id);\n\t\t\t\t\t\treturn elem ? [elem] : [];\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t} else {\n\t\t\t\tExpr.filter.ID = function (id) {\n\t\t\t\t\tvar attrId = id.replace(runescape, funescape);\n\t\t\t\t\treturn function (elem) {\n\t\t\t\t\t\tvar node = typeof elem.getAttributeNode !== \"undefined\" &&\n\t\t\t\t\t\t\telem.getAttributeNode(\"id\");\n\t\t\t\t\t\treturn node && node.value === attrId;\n\t\t\t\t\t};\n\t\t\t\t};\n\n\t\t\t\t// Support: IE 6 - 7 only\n\t\t\t\t// getElementById is not reliable as a find shortcut\n\t\t\t\tExpr.find.ID = function (id, context) {\n\t\t\t\t\tif (typeof context.getElementById !== \"undefined\" && documentIsHTML) {\n\t\t\t\t\t\tvar node, i, elems,\n\t\t\t\t\t\t\telem = context.getElementById(id);\n\n\t\t\t\t\t\tif (elem) {\n\n\t\t\t\t\t\t\t// Verify the id attribute\n\t\t\t\t\t\t\tnode = elem.getAttributeNode(\"id\");\n\t\t\t\t\t\t\tif (node && node.value === id) {\n\t\t\t\t\t\t\t\treturn [elem];\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Fall back on getElementsByName\n\t\t\t\t\t\t\telems = context.getElementsByName(id);\n\t\t\t\t\t\t\ti = 0;\n\t\t\t\t\t\t\twhile ((elem = elems[i++])) {\n\t\t\t\t\t\t\t\tnode = elem.getAttributeNode(\"id\");\n\t\t\t\t\t\t\t\tif (node && node.value === id) {\n\t\t\t\t\t\t\t\t\treturn [elem];\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn [];\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\n\t\t\t// Tag\n\t\t\tExpr.find.TAG = function (tag, context) {\n\t\t\t\tif (typeof context.getElementsByTagName !== \"undefined\") {\n\t\t\t\t\treturn context.getElementsByTagName(tag);\n\n\t\t\t\t\t// DocumentFragment nodes don't have gEBTN\n\t\t\t\t} else {\n\t\t\t\t\treturn context.querySelectorAll(tag);\n\t\t\t\t}\n\t\t\t};\n\n\t\t\t// Class\n\t\t\tExpr.find.CLASS = function (className, context) {\n\t\t\t\tif (typeof context.getElementsByClassName !== \"undefined\" && documentIsHTML) {\n\t\t\t\t\treturn context.getElementsByClassName(className);\n\t\t\t\t}\n\t\t\t};\n\n\t\t\t/* QSA/matchesSelector\n\t\t\t---------------------------------------------------------------------- */\n\n\t\t\t// QSA and matchesSelector support\n\n\t\t\trbuggyQSA = [];\n\n\t\t\t// Build QSA regex\n\t\t\t// Regex strategy adopted from Diego Perini\n\t\t\tassert(function (el) {\n\n\t\t\t\tvar input;\n\n\t\t\t\tdocumentElement.appendChild(el).innerHTML =\n\t\t\t\t\t\"<a id='\" + expando + \"' href='' disabled='disabled'></a>\" +\n\t\t\t\t\t\"<select id='\" + expando + \"-\\r\\\\' disabled='disabled'>\" +\n\t\t\t\t\t\"<option selected=''></option></select>\";\n\n\t\t\t\t// Support: iOS <=7 - 8 only\n\t\t\t\t// Boolean attributes and \"value\" are not treated correctly in some XML documents\n\t\t\t\tif (!el.querySelectorAll(\"[selected]\").length) {\n\t\t\t\t\trbuggyQSA.push(\"\\\\[\" + whitespace + \"*(?:value|\" + booleans + \")\");\n\t\t\t\t}\n\n\t\t\t\t// Support: iOS <=7 - 8 only\n\t\t\t\tif (!el.querySelectorAll(\"[id~=\" + expando + \"-]\").length) {\n\t\t\t\t\trbuggyQSA.push(\"~=\");\n\t\t\t\t}\n\n\t\t\t\t// Support: iOS 8 only\n\t\t\t\t// https://bugs.webkit.org/show_bug.cgi?id=136851\n\t\t\t\t// In-page `selector#id sibling-combinator selector` fails\n\t\t\t\tif (!el.querySelectorAll(\"a#\" + expando + \"+*\").length) {\n\t\t\t\t\trbuggyQSA.push(\".#.+[+~]\");\n\t\t\t\t}\n\n\t\t\t\t// Support: Chrome <=105+, Firefox <=104+, Safari <=15.4+\n\t\t\t\t// In some of the document kinds, these selectors wouldn't work natively.\n\t\t\t\t// This is probably OK but for backwards compatibility we want to maintain\n\t\t\t\t// handling them through jQuery traversal in jQuery 3.x.\n\t\t\t\tif (!el.querySelectorAll(\":checked\").length) {\n\t\t\t\t\trbuggyQSA.push(\":checked\");\n\t\t\t\t}\n\n\t\t\t\t// Support: Windows 8 Native Apps\n\t\t\t\t// The type and name attributes are restricted during .innerHTML assignment\n\t\t\t\tinput = document.createElement(\"input\");\n\t\t\t\tinput.setAttribute(\"type\", \"hidden\");\n\t\t\t\tel.appendChild(input).setAttribute(\"name\", \"D\");\n\n\t\t\t\t// Support: IE 9 - 11+\n\t\t\t\t// IE's :disabled selector does not pick up the children of disabled fieldsets\n\t\t\t\t// Support: Chrome <=105+, Firefox <=104+, Safari <=15.4+\n\t\t\t\t// In some of the document kinds, these selectors wouldn't work natively.\n\t\t\t\t// This is probably OK but for backwards compatibility we want to maintain\n\t\t\t\t// handling them through jQuery traversal in jQuery 3.x.\n\t\t\t\tdocumentElement.appendChild(el).disabled = true;\n\t\t\t\tif (el.querySelectorAll(\":disabled\").length !== 2) {\n\t\t\t\t\trbuggyQSA.push(\":enabled\", \":disabled\");\n\t\t\t\t}\n\n\t\t\t\t// Support: IE 11+, Edge 15 - 18+\n\t\t\t\t// IE 11/Edge don't find elements on a `[name='']` query in some cases.\n\t\t\t\t// Adding a temporary attribute to the document before the selection works\n\t\t\t\t// around the issue.\n\t\t\t\t// Interestingly, IE 10 & older don't seem to have the issue.\n\t\t\t\tinput = document.createElement(\"input\");\n\t\t\t\tinput.setAttribute(\"name\", \"\");\n\t\t\t\tel.appendChild(input);\n\t\t\t\tif (!el.querySelectorAll(\"[name='']\").length) {\n\t\t\t\t\trbuggyQSA.push(\"\\\\[\" + whitespace + \"*name\" + whitespace + \"*=\" +\n\t\t\t\t\t\twhitespace + \"*(?:''|\\\"\\\")\");\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tif (!support.cssHas) {\n\n\t\t\t\t// Support: Chrome 105 - 110+, Safari 15.4 - 16.3+\n\t\t\t\t// Our regular `try-catch` mechanism fails to detect natively-unsupported\n\t\t\t\t// pseudo-classes inside `:has()` (such as `:has(:contains(\"Foo\"))`)\n\t\t\t\t// in browsers that parse the `:has()` argument as a forgiving selector list.\n\t\t\t\t// https://drafts.csswg.org/selectors/#relational now requires the argument\n\t\t\t\t// to be parsed unforgivingly, but browsers have not yet fully adjusted.\n\t\t\t\trbuggyQSA.push(\":has\");\n\t\t\t}\n\n\t\t\trbuggyQSA = rbuggyQSA.length && new RegExp(rbuggyQSA.join(\"|\"));\n\n\t\t\t/* Sorting\n\t\t\t---------------------------------------------------------------------- */\n\n\t\t\t// Document order sorting\n\t\t\tsortOrder = function (a, b) {\n\n\t\t\t\t// Flag for duplicate removal\n\t\t\t\tif (a === b) {\n\t\t\t\t\thasDuplicate = true;\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\n\t\t\t\t// Sort on method existence if only one input has compareDocumentPosition\n\t\t\t\tvar compare = !a.compareDocumentPosition - !b.compareDocumentPosition;\n\t\t\t\tif (compare) {\n\t\t\t\t\treturn compare;\n\t\t\t\t}\n\n\t\t\t\t// Calculate position if both inputs belong to the same document\n\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\tcompare = (a.ownerDocument || a) == (b.ownerDocument || b) ?\n\t\t\t\t\ta.compareDocumentPosition(b) :\n\n\t\t\t\t\t// Otherwise we know they are disconnected\n\t\t\t\t\t1;\n\n\t\t\t\t// Disconnected nodes\n\t\t\t\tif (compare & 1 ||\n\t\t\t\t\t(!support.sortDetached && b.compareDocumentPosition(a) === compare)) {\n\n\t\t\t\t\t// Choose the first element that is related to our preferred document\n\t\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\tif (a === document || a.ownerDocument == preferredDoc &&\n\t\t\t\t\t\tfind.contains(preferredDoc, a)) {\n\t\t\t\t\t\treturn -1;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\tif (b === document || b.ownerDocument == preferredDoc &&\n\t\t\t\t\t\tfind.contains(preferredDoc, b)) {\n\t\t\t\t\t\treturn 1;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Maintain original order\n\t\t\t\t\treturn sortInput ?\n\t\t\t\t\t\t(indexOf.call(sortInput, a) - indexOf.call(sortInput, b)) :\n\t\t\t\t\t\t0;\n\t\t\t\t}\n\n\t\t\t\treturn compare & 4 ? -1 : 1;\n\t\t\t};\n\n\t\t\treturn document;\n\t\t}\n\n\t\tfind.matches = function (expr, elements) {\n\t\t\treturn find(expr, null, null, elements);\n\t\t};\n\n\t\tfind.matchesSelector = function (elem, expr) {\n\t\t\tsetDocument(elem);\n\n\t\t\tif (documentIsHTML &&\n\t\t\t\t!nonnativeSelectorCache[expr + \" \"] &&\n\t\t\t\t(!rbuggyQSA || !rbuggyQSA.test(expr))) {\n\n\t\t\t\ttry {\n\t\t\t\t\tvar ret = matches.call(elem, expr);\n\n\t\t\t\t\t// IE 9's matchesSelector returns false on disconnected nodes\n\t\t\t\t\tif (ret || support.disconnectedMatch ||\n\n\t\t\t\t\t\t// As well, disconnected nodes are said to be in a document\n\t\t\t\t\t\t// fragment in IE 9\n\t\t\t\t\t\telem.document && elem.document.nodeType !== 11) {\n\t\t\t\t\t\treturn ret;\n\t\t\t\t\t}\n\t\t\t\t} catch (e) {\n\t\t\t\t\tnonnativeSelectorCache(expr, true);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn find(expr, document, null, [elem]).length > 0;\n\t\t};\n\n\t\tfind.contains = function (context, elem) {\n\n\t\t\t// Set document vars if needed\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tif ((context.ownerDocument || context) != document) {\n\t\t\t\tsetDocument(context);\n\t\t\t}\n\t\t\treturn jQuery.contains(context, elem);\n\t\t};\n\n\n\t\tfind.attr = function (elem, name) {\n\n\t\t\t// Set document vars if needed\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tif ((elem.ownerDocument || elem) != document) {\n\t\t\t\tsetDocument(elem);\n\t\t\t}\n\n\t\t\tvar fn = Expr.attrHandle[name.toLowerCase()],\n\n\t\t\t\t// Don't get fooled by Object.prototype properties (see trac-13807)\n\t\t\t\tval = fn && hasOwn.call(Expr.attrHandle, name.toLowerCase()) ?\n\t\t\t\t\tfn(elem, name, !documentIsHTML) :\n\t\t\t\t\tundefined;\n\n\t\t\tif (val !== undefined) {\n\t\t\t\treturn val;\n\t\t\t}\n\n\t\t\treturn elem.getAttribute(name);\n\t\t};\n\n\t\tfind.error = function (msg) {\n\t\t\tthrow new Error(\"Syntax error, unrecognized expression: \" + msg);\n\t\t};\n\n\t\t/**\n\t\t * Document sorting and removing duplicates\n\t\t * @param {ArrayLike} results\n\t\t */\n\t\tjQuery.uniqueSort = function (results) {\n\t\t\tvar elem,\n\t\t\t\tduplicates = [],\n\t\t\t\tj = 0,\n\t\t\t\ti = 0;\n\n\t\t\t// Unless we *know* we can detect duplicates, assume their presence\n\t\t\t//\n\t\t\t// Support: Android <=4.0+\n\t\t\t// Testing for detecting duplicates is unpredictable so instead assume we can't\n\t\t\t// depend on duplicate detection in all browsers without a stable sort.\n\t\t\thasDuplicate = !support.sortStable;\n\t\t\tsortInput = !support.sortStable && slice.call(results, 0);\n\t\t\tsort.call(results, sortOrder);\n\n\t\t\tif (hasDuplicate) {\n\t\t\t\twhile ((elem = results[i++])) {\n\t\t\t\t\tif (elem === results[i]) {\n\t\t\t\t\t\tj = duplicates.push(i);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\twhile (j--) {\n\t\t\t\t\tsplice.call(results, duplicates[j], 1);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Clear input after sorting to release objects\n\t\t\t// See https://github.com/jquery/sizzle/pull/225\n\t\t\tsortInput = null;\n\n\t\t\treturn results;\n\t\t};\n\n\t\tjQuery.fn.uniqueSort = function () {\n\t\t\treturn this.pushStack(jQuery.uniqueSort(slice.apply(this)));\n\t\t};\n\n\t\tExpr = jQuery.expr = {\n\n\t\t\t// Can be adjusted by the user\n\t\t\tcacheLength: 50,\n\n\t\t\tcreatePseudo: markFunction,\n\n\t\t\tmatch: matchExpr,\n\n\t\t\tattrHandle: {},\n\n\t\t\tfind: {},\n\n\t\t\trelative: {\n\t\t\t\t\">\": { dir: \"parentNode\", first: true },\n\t\t\t\t\" \": { dir: \"parentNode\" },\n\t\t\t\t\"+\": { dir: \"previousSibling\", first: true },\n\t\t\t\t\"~\": { dir: \"previousSibling\" }\n\t\t\t},\n\n\t\t\tpreFilter: {\n\t\t\t\tATTR: function (match) {\n\t\t\t\t\tmatch[1] = match[1].replace(runescape, funescape);\n\n\t\t\t\t\t// Move the given value to match[3] whether quoted or unquoted\n\t\t\t\t\tmatch[3] = (match[3] || match[4] || match[5] || \"\")\n\t\t\t\t\t\t.replace(runescape, funescape);\n\n\t\t\t\t\tif (match[2] === \"~=\") {\n\t\t\t\t\t\tmatch[3] = \" \" + match[3] + \" \";\n\t\t\t\t\t}\n\n\t\t\t\t\treturn match.slice(0, 4);\n\t\t\t\t},\n\n\t\t\t\tCHILD: function (match) {\n\n\t\t\t\t\t/* matches from matchExpr[\"CHILD\"]\n\t\t\t\t\t\t1 type (only|nth|...)\n\t\t\t\t\t\t2 what (child|of-type)\n\t\t\t\t\t\t3 argument (even|odd|\\d*|\\d*n([+-]\\d+)?|...)\n\t\t\t\t\t\t4 xn-component of xn+y argument ([+-]?\\d*n|)\n\t\t\t\t\t\t5 sign of xn-component\n\t\t\t\t\t\t6 x of xn-component\n\t\t\t\t\t\t7 sign of y-component\n\t\t\t\t\t\t8 y of y-component\n\t\t\t\t\t*/\n\t\t\t\t\tmatch[1] = match[1].toLowerCase();\n\n\t\t\t\t\tif (match[1].slice(0, 3) === \"nth\") {\n\n\t\t\t\t\t\t// nth-* requires argument\n\t\t\t\t\t\tif (!match[3]) {\n\t\t\t\t\t\t\tfind.error(match[0]);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// numeric x and y parameters for Expr.filter.CHILD\n\t\t\t\t\t\t// remember that false/true cast respectively to 0/1\n\t\t\t\t\t\tmatch[4] = +(match[4] ?\n\t\t\t\t\t\t\tmatch[5] + (match[6] || 1) :\n\t\t\t\t\t\t\t2 * (match[3] === \"even\" || match[3] === \"odd\")\n\t\t\t\t\t\t);\n\t\t\t\t\t\tmatch[5] = +((match[7] + match[8]) || match[3] === \"odd\");\n\n\t\t\t\t\t\t// other types prohibit arguments\n\t\t\t\t\t} else if (match[3]) {\n\t\t\t\t\t\tfind.error(match[0]);\n\t\t\t\t\t}\n\n\t\t\t\t\treturn match;\n\t\t\t\t},\n\n\t\t\t\tPSEUDO: function (match) {\n\t\t\t\t\tvar excess,\n\t\t\t\t\t\tunquoted = !match[6] && match[2];\n\n\t\t\t\t\tif (matchExpr.CHILD.test(match[0])) {\n\t\t\t\t\t\treturn null;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Accept quoted arguments as-is\n\t\t\t\t\tif (match[3]) {\n\t\t\t\t\t\tmatch[2] = match[4] || match[5] || \"\";\n\n\t\t\t\t\t\t// Strip excess characters from unquoted arguments\n\t\t\t\t\t} else if (unquoted && rpseudo.test(unquoted) &&\n\n\t\t\t\t\t\t// Get excess from tokenize (recursively)\n\t\t\t\t\t\t(excess = tokenize(unquoted, true)) &&\n\n\t\t\t\t\t\t// advance to the next closing parenthesis\n\t\t\t\t\t\t(excess = unquoted.indexOf(\")\", unquoted.length - excess) - unquoted.length)) {\n\n\t\t\t\t\t\t// excess is a negative index\n\t\t\t\t\t\tmatch[0] = match[0].slice(0, excess);\n\t\t\t\t\t\tmatch[2] = unquoted.slice(0, excess);\n\t\t\t\t\t}\n\n\t\t\t\t\t// Return only captures needed by the pseudo filter method (type and argument)\n\t\t\t\t\treturn match.slice(0, 3);\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tfilter: {\n\n\t\t\t\tTAG: function (nodeNameSelector) {\n\t\t\t\t\tvar expectedNodeName = nodeNameSelector.replace(runescape, funescape).toLowerCase();\n\t\t\t\t\treturn nodeNameSelector === \"*\" ?\n\t\t\t\t\t\tfunction () {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t} :\n\t\t\t\t\t\tfunction (elem) {\n\t\t\t\t\t\t\treturn nodeName(elem, expectedNodeName);\n\t\t\t\t\t\t};\n\t\t\t\t},\n\n\t\t\t\tCLASS: function (className) {\n\t\t\t\t\tvar pattern = classCache[className + \" \"];\n\n\t\t\t\t\treturn pattern ||\n\t\t\t\t\t\t(pattern = new RegExp(\"(^|\" + whitespace + \")\" + className +\n\t\t\t\t\t\t\t\"(\" + whitespace + \"|$)\")) &&\n\t\t\t\t\t\tclassCache(className, function (elem) {\n\t\t\t\t\t\t\treturn pattern.test(\n\t\t\t\t\t\t\t\ttypeof elem.className === \"string\" && elem.className ||\n\t\t\t\t\t\t\t\ttypeof elem.getAttribute !== \"undefined\" &&\n\t\t\t\t\t\t\t\telem.getAttribute(\"class\") ||\n\t\t\t\t\t\t\t\t\"\"\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t});\n\t\t\t\t},\n\n\t\t\t\tATTR: function (name, operator, check) {\n\t\t\t\t\treturn function (elem) {\n\t\t\t\t\t\tvar result = find.attr(elem, name);\n\n\t\t\t\t\t\tif (result == null) {\n\t\t\t\t\t\t\treturn operator === \"!=\";\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!operator) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tresult += \"\";\n\n\t\t\t\t\t\tif (operator === \"=\") {\n\t\t\t\t\t\t\treturn result === check;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (operator === \"!=\") {\n\t\t\t\t\t\t\treturn result !== check;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (operator === \"^=\") {\n\t\t\t\t\t\t\treturn check && result.indexOf(check) === 0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (operator === \"*=\") {\n\t\t\t\t\t\t\treturn check && result.indexOf(check) > -1;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (operator === \"$=\") {\n\t\t\t\t\t\t\treturn check && result.slice(-check.length) === check;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (operator === \"~=\") {\n\t\t\t\t\t\t\treturn (\" \" + result.replace(rwhitespace, \" \") + \" \")\n\t\t\t\t\t\t\t\t.indexOf(check) > -1;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (operator === \"|=\") {\n\t\t\t\t\t\t\treturn result === check || result.slice(0, check.length + 1) === check + \"-\";\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t};\n\t\t\t\t},\n\n\t\t\t\tCHILD: function (type, what, _argument, first, last) {\n\t\t\t\t\tvar simple = type.slice(0, 3) !== \"nth\",\n\t\t\t\t\t\tforward = type.slice(-4) !== \"last\",\n\t\t\t\t\t\tofType = what === \"of-type\";\n\n\t\t\t\t\treturn first === 1 && last === 0 ?\n\n\t\t\t\t\t\t// Shortcut for :nth-*(n)\n\t\t\t\t\t\tfunction (elem) {\n\t\t\t\t\t\t\treturn !!elem.parentNode;\n\t\t\t\t\t\t} :\n\n\t\t\t\t\t\tfunction (elem, _context, xml) {\n\t\t\t\t\t\t\tvar cache, outerCache, node, nodeIndex, start,\n\t\t\t\t\t\t\t\tdir = simple !== forward ? \"nextSibling\" : \"previousSibling\",\n\t\t\t\t\t\t\t\tparent = elem.parentNode,\n\t\t\t\t\t\t\t\tname = ofType && elem.nodeName.toLowerCase(),\n\t\t\t\t\t\t\t\tuseCache = !xml && !ofType,\n\t\t\t\t\t\t\t\tdiff = false;\n\n\t\t\t\t\t\t\tif (parent) {\n\n\t\t\t\t\t\t\t\t// :(first|last|only)-(child|of-type)\n\t\t\t\t\t\t\t\tif (simple) {\n\t\t\t\t\t\t\t\t\twhile (dir) {\n\t\t\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\t\t\twhile ((node = node[dir])) {\n\t\t\t\t\t\t\t\t\t\t\tif (ofType ?\n\t\t\t\t\t\t\t\t\t\t\t\tnodeName(node, name) :\n\t\t\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1) {\n\n\t\t\t\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t// Reverse direction for :only-* (if we haven't yet done so)\n\t\t\t\t\t\t\t\t\t\tstart = dir = type === \"only\" && !start && \"nextSibling\";\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tstart = [forward ? parent.firstChild : parent.lastChild];\n\n\t\t\t\t\t\t\t\t// non-xml :nth-child(...) stores cache data on `parent`\n\t\t\t\t\t\t\t\tif (forward && useCache) {\n\n\t\t\t\t\t\t\t\t\t// Seek `elem` from a previously-cached index\n\t\t\t\t\t\t\t\t\touterCache = parent[expando] || (parent[expando] = {});\n\t\t\t\t\t\t\t\t\tcache = outerCache[type] || [];\n\t\t\t\t\t\t\t\t\tnodeIndex = cache[0] === dirruns && cache[1];\n\t\t\t\t\t\t\t\t\tdiff = nodeIndex && cache[2];\n\t\t\t\t\t\t\t\t\tnode = nodeIndex && parent.childNodes[nodeIndex];\n\n\t\t\t\t\t\t\t\t\twhile ((node = ++nodeIndex && node && node[dir] ||\n\n\t\t\t\t\t\t\t\t\t\t// Fallback to seeking `elem` from the start\n\t\t\t\t\t\t\t\t\t\t(diff = nodeIndex = 0) || start.pop())) {\n\n\t\t\t\t\t\t\t\t\t\t// When found, cache indexes on `parent` and break\n\t\t\t\t\t\t\t\t\t\tif (node.nodeType === 1 && ++diff && node === elem) {\n\t\t\t\t\t\t\t\t\t\t\touterCache[type] = [dirruns, nodeIndex, diff];\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t// Use previously-cached element index if available\n\t\t\t\t\t\t\t\t\tif (useCache) {\n\t\t\t\t\t\t\t\t\t\touterCache = elem[expando] || (elem[expando] = {});\n\t\t\t\t\t\t\t\t\t\tcache = outerCache[type] || [];\n\t\t\t\t\t\t\t\t\t\tnodeIndex = cache[0] === dirruns && cache[1];\n\t\t\t\t\t\t\t\t\t\tdiff = nodeIndex;\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// xml :nth-child(...)\n\t\t\t\t\t\t\t\t\t// or :nth-last-child(...) or :nth(-last)?-of-type(...)\n\t\t\t\t\t\t\t\t\tif (diff === false) {\n\n\t\t\t\t\t\t\t\t\t\t// Use the same loop as above to seek `elem` from the start\n\t\t\t\t\t\t\t\t\t\twhile ((node = ++nodeIndex && node && node[dir] ||\n\t\t\t\t\t\t\t\t\t\t\t(diff = nodeIndex = 0) || start.pop())) {\n\n\t\t\t\t\t\t\t\t\t\t\tif ((ofType ?\n\t\t\t\t\t\t\t\t\t\t\t\tnodeName(node, name) :\n\t\t\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1) &&\n\t\t\t\t\t\t\t\t\t\t\t\t++diff) {\n\n\t\t\t\t\t\t\t\t\t\t\t\t// Cache the index of each encountered element\n\t\t\t\t\t\t\t\t\t\t\t\tif (useCache) {\n\t\t\t\t\t\t\t\t\t\t\t\t\touterCache = node[expando] ||\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t(node[expando] = {});\n\t\t\t\t\t\t\t\t\t\t\t\t\touterCache[type] = [dirruns, diff];\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\tif (node === elem) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t// Incorporate the offset, then check against cycle size\n\t\t\t\t\t\t\t\tdiff -= last;\n\t\t\t\t\t\t\t\treturn diff === first || (diff % first === 0 && diff / first >= 0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\t\t\t\t},\n\n\t\t\t\tPSEUDO: function (pseudo, argument) {\n\n\t\t\t\t\t// pseudo-class names are case-insensitive\n\t\t\t\t\t// https://www.w3.org/TR/selectors/#pseudo-classes\n\t\t\t\t\t// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters\n\t\t\t\t\t// Remember that setFilters inherits from pseudos\n\t\t\t\t\tvar args,\n\t\t\t\t\t\tfn = Expr.pseudos[pseudo] || Expr.setFilters[pseudo.toLowerCase()] ||\n\t\t\t\t\t\t\tfind.error(\"unsupported pseudo: \" + pseudo);\n\n\t\t\t\t\t// The user may use createPseudo to indicate that\n\t\t\t\t\t// arguments are needed to create the filter function\n\t\t\t\t\t// just as jQuery does\n\t\t\t\t\tif (fn[expando]) {\n\t\t\t\t\t\treturn fn(argument);\n\t\t\t\t\t}\n\n\t\t\t\t\t// But maintain support for old signatures\n\t\t\t\t\tif (fn.length > 1) {\n\t\t\t\t\t\targs = [pseudo, pseudo, \"\", argument];\n\t\t\t\t\t\treturn Expr.setFilters.hasOwnProperty(pseudo.toLowerCase()) ?\n\t\t\t\t\t\t\tmarkFunction(function (seed, matches) {\n\t\t\t\t\t\t\t\tvar idx,\n\t\t\t\t\t\t\t\t\tmatched = fn(seed, argument),\n\t\t\t\t\t\t\t\t\ti = matched.length;\n\t\t\t\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\t\t\t\tidx = indexOf.call(seed, matched[i]);\n\t\t\t\t\t\t\t\t\tseed[idx] = !(matches[idx] = matched[i]);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}) :\n\t\t\t\t\t\t\tfunction (elem) {\n\t\t\t\t\t\t\t\treturn fn(elem, 0, args);\n\t\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\treturn fn;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tpseudos: {\n\n\t\t\t\t// Potentially complex pseudos\n\t\t\t\tnot: markFunction(function (selector) {\n\n\t\t\t\t\t// Trim the selector passed to compile\n\t\t\t\t\t// to avoid treating leading and trailing\n\t\t\t\t\t// spaces as combinators\n\t\t\t\t\tvar input = [],\n\t\t\t\t\t\tresults = [],\n\t\t\t\t\t\tmatcher = compile(selector.replace(rtrimCSS, \"$1\"));\n\n\t\t\t\t\treturn matcher[expando] ?\n\t\t\t\t\t\tmarkFunction(function (seed, matches, _context, xml) {\n\t\t\t\t\t\t\tvar elem,\n\t\t\t\t\t\t\t\tunmatched = matcher(seed, null, xml, []),\n\t\t\t\t\t\t\t\ti = seed.length;\n\n\t\t\t\t\t\t\t// Match elements unmatched by `matcher`\n\t\t\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\t\t\tif ((elem = unmatched[i])) {\n\t\t\t\t\t\t\t\t\tseed[i] = !(matches[i] = elem);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}) :\n\t\t\t\t\t\tfunction (elem, _context, xml) {\n\t\t\t\t\t\t\tinput[0] = elem;\n\t\t\t\t\t\t\tmatcher(input, null, xml, results);\n\n\t\t\t\t\t\t\t// Don't keep the element\n\t\t\t\t\t\t\t// (see https://github.com/jquery/sizzle/issues/299)\n\t\t\t\t\t\t\tinput[0] = null;\n\t\t\t\t\t\t\treturn !results.pop();\n\t\t\t\t\t\t};\n\t\t\t\t}),\n\n\t\t\t\thas: markFunction(function (selector) {\n\t\t\t\t\treturn function (elem) {\n\t\t\t\t\t\treturn find(selector, elem).length > 0;\n\t\t\t\t\t};\n\t\t\t\t}),\n\n\t\t\t\tcontains: markFunction(function (text) {\n\t\t\t\t\ttext = text.replace(runescape, funescape);\n\t\t\t\t\treturn function (elem) {\n\t\t\t\t\t\treturn (elem.textContent || jQuery.text(elem)).indexOf(text) > -1;\n\t\t\t\t\t};\n\t\t\t\t}),\n\n\t\t\t\t// \"Whether an element is represented by a :lang() selector\n\t\t\t\t// is based solely on the element's language value\n\t\t\t\t// being equal to the identifier C,\n\t\t\t\t// or beginning with the identifier C immediately followed by \"-\".\n\t\t\t\t// The matching of C against the element's language value is performed case-insensitively.\n\t\t\t\t// The identifier C does not have to be a valid language name.\"\n\t\t\t\t// https://www.w3.org/TR/selectors/#lang-pseudo\n\t\t\t\tlang: markFunction(function (lang) {\n\n\t\t\t\t\t// lang value must be a valid identifier\n\t\t\t\t\tif (!ridentifier.test(lang || \"\")) {\n\t\t\t\t\t\tfind.error(\"unsupported lang: \" + lang);\n\t\t\t\t\t}\n\t\t\t\t\tlang = lang.replace(runescape, funescape).toLowerCase();\n\t\t\t\t\treturn function (elem) {\n\t\t\t\t\t\tvar elemLang;\n\t\t\t\t\t\tdo {\n\t\t\t\t\t\t\tif ((elemLang = documentIsHTML ?\n\t\t\t\t\t\t\t\telem.lang :\n\t\t\t\t\t\t\t\telem.getAttribute(\"xml:lang\") || elem.getAttribute(\"lang\"))) {\n\n\t\t\t\t\t\t\t\telemLang = elemLang.toLowerCase();\n\t\t\t\t\t\t\t\treturn elemLang === lang || elemLang.indexOf(lang + \"-\") === 0;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} while ((elem = elem.parentNode) && elem.nodeType === 1);\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t};\n\t\t\t\t}),\n\n\t\t\t\t// Miscellaneous\n\t\t\t\ttarget: function (elem) {\n\t\t\t\t\tvar hash = window.location && window.location.hash;\n\t\t\t\t\treturn hash && hash.slice(1) === elem.id;\n\t\t\t\t},\n\n\t\t\t\troot: function (elem) {\n\t\t\t\t\treturn elem === documentElement;\n\t\t\t\t},\n\n\t\t\t\tfocus: function (elem) {\n\t\t\t\t\treturn elem === safeActiveElement() &&\n\t\t\t\t\t\tdocument.hasFocus() &&\n\t\t\t\t\t\t!!(elem.type || elem.href || ~elem.tabIndex);\n\t\t\t\t},\n\n\t\t\t\t// Boolean properties\n\t\t\t\tenabled: createDisabledPseudo(false),\n\t\t\t\tdisabled: createDisabledPseudo(true),\n\n\t\t\t\tchecked: function (elem) {\n\n\t\t\t\t\t// In CSS3, :checked should return both checked and selected elements\n\t\t\t\t\t// https://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\t\t\treturn (nodeName(elem, \"input\") && !!elem.checked) ||\n\t\t\t\t\t\t(nodeName(elem, \"option\") && !!elem.selected);\n\t\t\t\t},\n\n\t\t\t\tselected: function (elem) {\n\n\t\t\t\t\t// Support: IE <=11+\n\t\t\t\t\t// Accessing the selectedIndex property\n\t\t\t\t\t// forces the browser to treat the default option as\n\t\t\t\t\t// selected when in an optgroup.\n\t\t\t\t\tif (elem.parentNode) {\n\t\t\t\t\t\t// eslint-disable-next-line no-unused-expressions\n\t\t\t\t\t\telem.parentNode.selectedIndex;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn elem.selected === true;\n\t\t\t\t},\n\n\t\t\t\t// Contents\n\t\t\t\tempty: function (elem) {\n\n\t\t\t\t\t// https://www.w3.org/TR/selectors/#empty-pseudo\n\t\t\t\t\t// :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),\n\t\t\t\t\t//   but not by others (comment: 8; processing instruction: 7; etc.)\n\t\t\t\t\t// nodeType < 6 works because attributes (2) do not appear as children\n\t\t\t\t\tfor (elem = elem.firstChild; elem; elem = elem.nextSibling) {\n\t\t\t\t\t\tif (elem.nodeType < 6) {\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn true;\n\t\t\t\t},\n\n\t\t\t\tparent: function (elem) {\n\t\t\t\t\treturn !Expr.pseudos.empty(elem);\n\t\t\t\t},\n\n\t\t\t\t// Element/input types\n\t\t\t\theader: function (elem) {\n\t\t\t\t\treturn rheader.test(elem.nodeName);\n\t\t\t\t},\n\n\t\t\t\tinput: function (elem) {\n\t\t\t\t\treturn rinputs.test(elem.nodeName);\n\t\t\t\t},\n\n\t\t\t\tbutton: function (elem) {\n\t\t\t\t\treturn nodeName(elem, \"input\") && elem.type === \"button\" ||\n\t\t\t\t\t\tnodeName(elem, \"button\");\n\t\t\t\t},\n\n\t\t\t\ttext: function (elem) {\n\t\t\t\t\tvar attr;\n\t\t\t\t\treturn nodeName(elem, \"input\") && elem.type === \"text\" &&\n\n\t\t\t\t\t\t// Support: IE <10 only\n\t\t\t\t\t\t// New HTML5 attribute values (e.g., \"search\") appear\n\t\t\t\t\t\t// with elem.type === \"text\"\n\t\t\t\t\t\t((attr = elem.getAttribute(\"type\")) == null ||\n\t\t\t\t\t\t\tattr.toLowerCase() === \"text\");\n\t\t\t\t},\n\n\t\t\t\t// Position-in-collection\n\t\t\t\tfirst: createPositionalPseudo(function () {\n\t\t\t\t\treturn [0];\n\t\t\t\t}),\n\n\t\t\t\tlast: createPositionalPseudo(function (_matchIndexes, length) {\n\t\t\t\t\treturn [length - 1];\n\t\t\t\t}),\n\n\t\t\t\teq: createPositionalPseudo(function (_matchIndexes, length, argument) {\n\t\t\t\t\treturn [argument < 0 ? argument + length : argument];\n\t\t\t\t}),\n\n\t\t\t\teven: createPositionalPseudo(function (matchIndexes, length) {\n\t\t\t\t\tvar i = 0;\n\t\t\t\t\tfor (; i < length; i += 2) {\n\t\t\t\t\t\tmatchIndexes.push(i);\n\t\t\t\t\t}\n\t\t\t\t\treturn matchIndexes;\n\t\t\t\t}),\n\n\t\t\t\todd: createPositionalPseudo(function (matchIndexes, length) {\n\t\t\t\t\tvar i = 1;\n\t\t\t\t\tfor (; i < length; i += 2) {\n\t\t\t\t\t\tmatchIndexes.push(i);\n\t\t\t\t\t}\n\t\t\t\t\treturn matchIndexes;\n\t\t\t\t}),\n\n\t\t\t\tlt: createPositionalPseudo(function (matchIndexes, length, argument) {\n\t\t\t\t\tvar i;\n\n\t\t\t\t\tif (argument < 0) {\n\t\t\t\t\t\ti = argument + length;\n\t\t\t\t\t} else if (argument > length) {\n\t\t\t\t\t\ti = length;\n\t\t\t\t\t} else {\n\t\t\t\t\t\ti = argument;\n\t\t\t\t\t}\n\n\t\t\t\t\tfor (; --i >= 0;) {\n\t\t\t\t\t\tmatchIndexes.push(i);\n\t\t\t\t\t}\n\t\t\t\t\treturn matchIndexes;\n\t\t\t\t}),\n\n\t\t\t\tgt: createPositionalPseudo(function (matchIndexes, length, argument) {\n\t\t\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\t\t\tfor (; ++i < length;) {\n\t\t\t\t\t\tmatchIndexes.push(i);\n\t\t\t\t\t}\n\t\t\t\t\treturn matchIndexes;\n\t\t\t\t})\n\t\t\t}\n\t\t};\n\n\t\tExpr.pseudos.nth = Expr.pseudos.eq;\n\n\t\t// Add button/input type pseudos\n\t\tfor (i in { radio: true, checkbox: true, file: true, password: true, image: true }) {\n\t\t\tExpr.pseudos[i] = createInputPseudo(i);\n\t\t}\n\t\tfor (i in { submit: true, reset: true }) {\n\t\t\tExpr.pseudos[i] = createButtonPseudo(i);\n\t\t}\n\n\t\t// Easy API for creating new setFilters\n\t\tfunction setFilters() { }\n\t\tsetFilters.prototype = Expr.filters = Expr.pseudos;\n\t\tExpr.setFilters = new setFilters();\n\n\t\tfunction tokenize(selector, parseOnly) {\n\t\t\tvar matched, match, tokens, type,\n\t\t\t\tsoFar, groups, preFilters,\n\t\t\t\tcached = tokenCache[selector + \" \"];\n\n\t\t\tif (cached) {\n\t\t\t\treturn parseOnly ? 0 : cached.slice(0);\n\t\t\t}\n\n\t\t\tsoFar = selector;\n\t\t\tgroups = [];\n\t\t\tpreFilters = Expr.preFilter;\n\n\t\t\twhile (soFar) {\n\n\t\t\t\t// Comma and first run\n\t\t\t\tif (!matched || (match = rcomma.exec(soFar))) {\n\t\t\t\t\tif (match) {\n\n\t\t\t\t\t\t// Don't consume trailing commas as valid\n\t\t\t\t\t\tsoFar = soFar.slice(match[0].length) || soFar;\n\t\t\t\t\t}\n\t\t\t\t\tgroups.push((tokens = []));\n\t\t\t\t}\n\n\t\t\t\tmatched = false;\n\n\t\t\t\t// Combinators\n\t\t\t\tif ((match = rleadingCombinator.exec(soFar))) {\n\t\t\t\t\tmatched = match.shift();\n\t\t\t\t\ttokens.push({\n\t\t\t\t\t\tvalue: matched,\n\n\t\t\t\t\t\t// Cast descendant combinators to space\n\t\t\t\t\t\ttype: match[0].replace(rtrimCSS, \" \")\n\t\t\t\t\t});\n\t\t\t\t\tsoFar = soFar.slice(matched.length);\n\t\t\t\t}\n\n\t\t\t\t// Filters\n\t\t\t\tfor (type in Expr.filter) {\n\t\t\t\t\tif ((match = matchExpr[type].exec(soFar)) && (!preFilters[type] ||\n\t\t\t\t\t\t(match = preFilters[type](match)))) {\n\t\t\t\t\t\tmatched = match.shift();\n\t\t\t\t\t\ttokens.push({\n\t\t\t\t\t\t\tvalue: matched,\n\t\t\t\t\t\t\ttype: type,\n\t\t\t\t\t\t\tmatches: match\n\t\t\t\t\t\t});\n\t\t\t\t\t\tsoFar = soFar.slice(matched.length);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (!matched) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Return the length of the invalid excess\n\t\t\t// if we're just parsing\n\t\t\t// Otherwise, throw an error or return tokens\n\t\t\tif (parseOnly) {\n\t\t\t\treturn soFar.length;\n\t\t\t}\n\n\t\t\treturn soFar ?\n\t\t\t\tfind.error(selector) :\n\n\t\t\t\t// Cache the tokens\n\t\t\t\ttokenCache(selector, groups).slice(0);\n\t\t}\n\n\t\tfunction toSelector(tokens) {\n\t\t\tvar i = 0,\n\t\t\t\tlen = tokens.length,\n\t\t\t\tselector = \"\";\n\t\t\tfor (; i < len; i++) {\n\t\t\t\tselector += tokens[i].value;\n\t\t\t}\n\t\t\treturn selector;\n\t\t}\n\n\t\tfunction addCombinator(matcher, combinator, base) {\n\t\t\tvar dir = combinator.dir,\n\t\t\t\tskip = combinator.next,\n\t\t\t\tkey = skip || dir,\n\t\t\t\tcheckNonElements = base && key === \"parentNode\",\n\t\t\t\tdoneName = done++;\n\n\t\t\treturn combinator.first ?\n\n\t\t\t\t// Check against closest ancestor/preceding element\n\t\t\t\tfunction (elem, context, xml) {\n\t\t\t\t\twhile ((elem = elem[dir])) {\n\t\t\t\t\t\tif (elem.nodeType === 1 || checkNonElements) {\n\t\t\t\t\t\t\treturn matcher(elem, context, xml);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn false;\n\t\t\t\t} :\n\n\t\t\t\t// Check against all ancestor/preceding elements\n\t\t\t\tfunction (elem, context, xml) {\n\t\t\t\t\tvar oldCache, outerCache,\n\t\t\t\t\t\tnewCache = [dirruns, doneName];\n\n\t\t\t\t\t// We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching\n\t\t\t\t\tif (xml) {\n\t\t\t\t\t\twhile ((elem = elem[dir])) {\n\t\t\t\t\t\t\tif (elem.nodeType === 1 || checkNonElements) {\n\t\t\t\t\t\t\t\tif (matcher(elem, context, xml)) {\n\t\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\twhile ((elem = elem[dir])) {\n\t\t\t\t\t\t\tif (elem.nodeType === 1 || checkNonElements) {\n\t\t\t\t\t\t\t\touterCache = elem[expando] || (elem[expando] = {});\n\n\t\t\t\t\t\t\t\tif (skip && nodeName(elem, skip)) {\n\t\t\t\t\t\t\t\t\telem = elem[dir] || elem;\n\t\t\t\t\t\t\t\t} else if ((oldCache = outerCache[key]) &&\n\t\t\t\t\t\t\t\t\toldCache[0] === dirruns && oldCache[1] === doneName) {\n\n\t\t\t\t\t\t\t\t\t// Assign to newCache so results back-propagate to previous elements\n\t\t\t\t\t\t\t\t\treturn (newCache[2] = oldCache[2]);\n\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t// Reuse newcache so results back-propagate to previous elements\n\t\t\t\t\t\t\t\t\touterCache[key] = newCache;\n\n\t\t\t\t\t\t\t\t\t// A match means we're done; a fail means we have to keep checking\n\t\t\t\t\t\t\t\t\tif ((newCache[2] = matcher(elem, context, xml))) {\n\t\t\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn false;\n\t\t\t\t};\n\t\t}\n\n\t\tfunction elementMatcher(matchers) {\n\t\t\treturn matchers.length > 1 ?\n\t\t\t\tfunction (elem, context, xml) {\n\t\t\t\t\tvar i = matchers.length;\n\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\tif (!matchers[i](elem, context, xml)) {\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn true;\n\t\t\t\t} :\n\t\t\t\tmatchers[0];\n\t\t}\n\n\t\tfunction multipleContexts(selector, contexts, results) {\n\t\t\tvar i = 0,\n\t\t\t\tlen = contexts.length;\n\t\t\tfor (; i < len; i++) {\n\t\t\t\tfind(selector, contexts[i], results);\n\t\t\t}\n\t\t\treturn results;\n\t\t}\n\n\t\tfunction condense(unmatched, map, filter, context, xml) {\n\t\t\tvar elem,\n\t\t\t\tnewUnmatched = [],\n\t\t\t\ti = 0,\n\t\t\t\tlen = unmatched.length,\n\t\t\t\tmapped = map != null;\n\n\t\t\tfor (; i < len; i++) {\n\t\t\t\tif ((elem = unmatched[i])) {\n\t\t\t\t\tif (!filter || filter(elem, context, xml)) {\n\t\t\t\t\t\tnewUnmatched.push(elem);\n\t\t\t\t\t\tif (mapped) {\n\t\t\t\t\t\t\tmap.push(i);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn newUnmatched;\n\t\t}\n\n\t\tfunction setMatcher(preFilter, selector, matcher, postFilter, postFinder, postSelector) {\n\t\t\tif (postFilter && !postFilter[expando]) {\n\t\t\t\tpostFilter = setMatcher(postFilter);\n\t\t\t}\n\t\t\tif (postFinder && !postFinder[expando]) {\n\t\t\t\tpostFinder = setMatcher(postFinder, postSelector);\n\t\t\t}\n\t\t\treturn markFunction(function (seed, results, context, xml) {\n\t\t\t\tvar temp, i, elem, matcherOut,\n\t\t\t\t\tpreMap = [],\n\t\t\t\t\tpostMap = [],\n\t\t\t\t\tpreexisting = results.length,\n\n\t\t\t\t\t// Get initial elements from seed or context\n\t\t\t\t\telems = seed ||\n\t\t\t\t\t\tmultipleContexts(selector || \"*\",\n\t\t\t\t\t\t\tcontext.nodeType ? [context] : context, []),\n\n\t\t\t\t\t// Prefilter to get matcher input, preserving a map for seed-results synchronization\n\t\t\t\t\tmatcherIn = preFilter && (seed || !selector) ?\n\t\t\t\t\t\tcondense(elems, preMap, preFilter, context, xml) :\n\t\t\t\t\t\telems;\n\n\t\t\t\tif (matcher) {\n\n\t\t\t\t\t// If we have a postFinder, or filtered seed, or non-seed postFilter\n\t\t\t\t\t// or preexisting results,\n\t\t\t\t\tmatcherOut = postFinder || (seed ? preFilter : preexisting || postFilter) ?\n\n\t\t\t\t\t\t// ...intermediate processing is necessary\n\t\t\t\t\t\t[] :\n\n\t\t\t\t\t\t// ...otherwise use results directly\n\t\t\t\t\t\tresults;\n\n\t\t\t\t\t// Find primary matches\n\t\t\t\t\tmatcher(matcherIn, matcherOut, context, xml);\n\t\t\t\t} else {\n\t\t\t\t\tmatcherOut = matcherIn;\n\t\t\t\t}\n\n\t\t\t\t// Apply postFilter\n\t\t\t\tif (postFilter) {\n\t\t\t\t\ttemp = condense(matcherOut, postMap);\n\t\t\t\t\tpostFilter(temp, [], context, xml);\n\n\t\t\t\t\t// Un-match failing elements by moving them back to matcherIn\n\t\t\t\t\ti = temp.length;\n\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\tif ((elem = temp[i])) {\n\t\t\t\t\t\t\tmatcherOut[postMap[i]] = !(matcherIn[postMap[i]] = elem);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (seed) {\n\t\t\t\t\tif (postFinder || preFilter) {\n\t\t\t\t\t\tif (postFinder) {\n\n\t\t\t\t\t\t\t// Get the final matcherOut by condensing this intermediate into postFinder contexts\n\t\t\t\t\t\t\ttemp = [];\n\t\t\t\t\t\t\ti = matcherOut.length;\n\t\t\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\t\t\tif ((elem = matcherOut[i])) {\n\n\t\t\t\t\t\t\t\t\t// Restore matcherIn since elem is not yet a final match\n\t\t\t\t\t\t\t\t\ttemp.push((matcherIn[i] = elem));\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tpostFinder(null, (matcherOut = []), temp, xml);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Move matched elements from seed to results to keep them synchronized\n\t\t\t\t\t\ti = matcherOut.length;\n\t\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\t\tif ((elem = matcherOut[i]) &&\n\t\t\t\t\t\t\t\t(temp = postFinder ? indexOf.call(seed, elem) : preMap[i]) > -1) {\n\n\t\t\t\t\t\t\t\tseed[temp] = !(results[temp] = elem);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Add elements to results, through postFinder if defined\n\t\t\t\t} else {\n\t\t\t\t\tmatcherOut = condense(\n\t\t\t\t\t\tmatcherOut === results ?\n\t\t\t\t\t\t\tmatcherOut.splice(preexisting, matcherOut.length) :\n\t\t\t\t\t\t\tmatcherOut\n\t\t\t\t\t);\n\t\t\t\t\tif (postFinder) {\n\t\t\t\t\t\tpostFinder(null, results, matcherOut, xml);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tpush.apply(results, matcherOut);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tfunction matcherFromTokens(tokens) {\n\t\t\tvar checkContext, matcher, j,\n\t\t\t\tlen = tokens.length,\n\t\t\t\tleadingRelative = Expr.relative[tokens[0].type],\n\t\t\t\timplicitRelative = leadingRelative || Expr.relative[\" \"],\n\t\t\t\ti = leadingRelative ? 1 : 0,\n\n\t\t\t\t// The foundational matcher ensures that elements are reachable from top-level context(s)\n\t\t\t\tmatchContext = addCombinator(function (elem) {\n\t\t\t\t\treturn elem === checkContext;\n\t\t\t\t}, implicitRelative, true),\n\t\t\t\tmatchAnyContext = addCombinator(function (elem) {\n\t\t\t\t\treturn indexOf.call(checkContext, elem) > -1;\n\t\t\t\t}, implicitRelative, true),\n\t\t\t\tmatchers = [function (elem, context, xml) {\n\n\t\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\tvar ret = (!leadingRelative && (xml || context != outermostContext)) || (\n\t\t\t\t\t\t(checkContext = context).nodeType ?\n\t\t\t\t\t\t\tmatchContext(elem, context, xml) :\n\t\t\t\t\t\t\tmatchAnyContext(elem, context, xml));\n\n\t\t\t\t\t// Avoid hanging onto element\n\t\t\t\t\t// (see https://github.com/jquery/sizzle/issues/299)\n\t\t\t\t\tcheckContext = null;\n\t\t\t\t\treturn ret;\n\t\t\t\t}];\n\n\t\t\tfor (; i < len; i++) {\n\t\t\t\tif ((matcher = Expr.relative[tokens[i].type])) {\n\t\t\t\t\tmatchers = [addCombinator(elementMatcher(matchers), matcher)];\n\t\t\t\t} else {\n\t\t\t\t\tmatcher = Expr.filter[tokens[i].type].apply(null, tokens[i].matches);\n\n\t\t\t\t\t// Return special upon seeing a positional matcher\n\t\t\t\t\tif (matcher[expando]) {\n\n\t\t\t\t\t\t// Find the next relative operator (if any) for proper handling\n\t\t\t\t\t\tj = ++i;\n\t\t\t\t\t\tfor (; j < len; j++) {\n\t\t\t\t\t\t\tif (Expr.relative[tokens[j].type]) {\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn setMatcher(\n\t\t\t\t\t\t\ti > 1 && elementMatcher(matchers),\n\t\t\t\t\t\t\ti > 1 && toSelector(\n\n\t\t\t\t\t\t\t\t// If the preceding token was a descendant combinator, insert an implicit any-element `*`\n\t\t\t\t\t\t\t\ttokens.slice(0, i - 1)\n\t\t\t\t\t\t\t\t\t.concat({ value: tokens[i - 2].type === \" \" ? \"*\" : \"\" })\n\t\t\t\t\t\t\t).replace(rtrimCSS, \"$1\"),\n\t\t\t\t\t\t\tmatcher,\n\t\t\t\t\t\t\ti < j && matcherFromTokens(tokens.slice(i, j)),\n\t\t\t\t\t\t\tj < len && matcherFromTokens((tokens = tokens.slice(j))),\n\t\t\t\t\t\t\tj < len && toSelector(tokens)\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\tmatchers.push(matcher);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn elementMatcher(matchers);\n\t\t}\n\n\t\tfunction matcherFromGroupMatchers(elementMatchers, setMatchers) {\n\t\t\tvar bySet = setMatchers.length > 0,\n\t\t\t\tbyElement = elementMatchers.length > 0,\n\t\t\t\tsuperMatcher = function (seed, context, xml, results, outermost) {\n\t\t\t\t\tvar elem, j, matcher,\n\t\t\t\t\t\tmatchedCount = 0,\n\t\t\t\t\t\ti = \"0\",\n\t\t\t\t\t\tunmatched = seed && [],\n\t\t\t\t\t\tsetMatched = [],\n\t\t\t\t\t\tcontextBackup = outermostContext,\n\n\t\t\t\t\t\t// We must always have either seed elements or outermost context\n\t\t\t\t\t\telems = seed || byElement && Expr.find.TAG(\"*\", outermost),\n\n\t\t\t\t\t\t// Use integer dirruns iff this is the outermost matcher\n\t\t\t\t\t\tdirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1),\n\t\t\t\t\t\tlen = elems.length;\n\n\t\t\t\t\tif (outermost) {\n\n\t\t\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\t\toutermostContext = context == document || context || outermost;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Add elements passing elementMatchers directly to results\n\t\t\t\t\t// Support: iOS <=7 - 9 only\n\t\t\t\t\t// Tolerate NodeList properties (IE: \"length\"; Safari: <number>) matching\n\t\t\t\t\t// elements by id. (see trac-14142)\n\t\t\t\t\tfor (; i !== len && (elem = elems[i]) != null; i++) {\n\t\t\t\t\t\tif (byElement && elem) {\n\t\t\t\t\t\t\tj = 0;\n\n\t\t\t\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\t\t\tif (!context && elem.ownerDocument != document) {\n\t\t\t\t\t\t\t\tsetDocument(elem);\n\t\t\t\t\t\t\t\txml = !documentIsHTML;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\twhile ((matcher = elementMatchers[j++])) {\n\t\t\t\t\t\t\t\tif (matcher(elem, context || document, xml)) {\n\t\t\t\t\t\t\t\t\tpush.call(results, elem);\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (outermost) {\n\t\t\t\t\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Track unmatched elements for set filters\n\t\t\t\t\t\tif (bySet) {\n\n\t\t\t\t\t\t\t// They will have gone through all possible matchers\n\t\t\t\t\t\t\tif ((elem = !matcher && elem)) {\n\t\t\t\t\t\t\t\tmatchedCount--;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Lengthen the array for every element, matched or not\n\t\t\t\t\t\t\tif (seed) {\n\t\t\t\t\t\t\t\tunmatched.push(elem);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// `i` is now the count of elements visited above, and adding it to `matchedCount`\n\t\t\t\t\t// makes the latter nonnegative.\n\t\t\t\t\tmatchedCount += i;\n\n\t\t\t\t\t// Apply set filters to unmatched elements\n\t\t\t\t\t// NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`\n\t\t\t\t\t// equals `i`), unless we didn't visit _any_ elements in the above loop because we have\n\t\t\t\t\t// no element matchers and no seed.\n\t\t\t\t\t// Incrementing an initially-string \"0\" `i` allows `i` to remain a string only in that\n\t\t\t\t\t// case, which will result in a \"00\" `matchedCount` that differs from `i` but is also\n\t\t\t\t\t// numerically zero.\n\t\t\t\t\tif (bySet && i !== matchedCount) {\n\t\t\t\t\t\tj = 0;\n\t\t\t\t\t\twhile ((matcher = setMatchers[j++])) {\n\t\t\t\t\t\t\tmatcher(unmatched, setMatched, context, xml);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (seed) {\n\n\t\t\t\t\t\t\t// Reintegrate element matches to eliminate the need for sorting\n\t\t\t\t\t\t\tif (matchedCount > 0) {\n\t\t\t\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\t\t\t\tif (!(unmatched[i] || setMatched[i])) {\n\t\t\t\t\t\t\t\t\t\tsetMatched[i] = pop.call(results);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Discard index placeholder values to get only actual matches\n\t\t\t\t\t\t\tsetMatched = condense(setMatched);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Add matches to results\n\t\t\t\t\t\tpush.apply(results, setMatched);\n\n\t\t\t\t\t\t// Seedless set matches succeeding multiple successful matchers stipulate sorting\n\t\t\t\t\t\tif (outermost && !seed && setMatched.length > 0 &&\n\t\t\t\t\t\t\t(matchedCount + setMatchers.length) > 1) {\n\n\t\t\t\t\t\t\tjQuery.uniqueSort(results);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Override manipulation of globals by nested matchers\n\t\t\t\t\tif (outermost) {\n\t\t\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\t\t\toutermostContext = contextBackup;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn unmatched;\n\t\t\t\t};\n\n\t\t\treturn bySet ?\n\t\t\t\tmarkFunction(superMatcher) :\n\t\t\t\tsuperMatcher;\n\t\t}\n\n\t\tfunction compile(selector, match /* Internal Use Only */) {\n\t\t\tvar i,\n\t\t\t\tsetMatchers = [],\n\t\t\t\telementMatchers = [],\n\t\t\t\tcached = compilerCache[selector + \" \"];\n\n\t\t\tif (!cached) {\n\n\t\t\t\t// Generate a function of recursive functions that can be used to check each element\n\t\t\t\tif (!match) {\n\t\t\t\t\tmatch = tokenize(selector);\n\t\t\t\t}\n\t\t\t\ti = match.length;\n\t\t\t\twhile (i--) {\n\t\t\t\t\tcached = matcherFromTokens(match[i]);\n\t\t\t\t\tif (cached[expando]) {\n\t\t\t\t\t\tsetMatchers.push(cached);\n\t\t\t\t\t} else {\n\t\t\t\t\t\telementMatchers.push(cached);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Cache the compiled function\n\t\t\t\tcached = compilerCache(selector,\n\t\t\t\t\tmatcherFromGroupMatchers(elementMatchers, setMatchers));\n\n\t\t\t\t// Save selector and tokenization\n\t\t\t\tcached.selector = selector;\n\t\t\t}\n\t\t\treturn cached;\n\t\t}\n\n\t\t/**\n\t\t * A low-level selection function that works with jQuery's compiled\n\t\t *  selector functions\n\t\t * @param {String|Function} selector A selector or a pre-compiled\n\t\t *  selector function built with jQuery selector compile\n\t\t * @param {Element} context\n\t\t * @param {Array} [results]\n\t\t * @param {Array} [seed] A set of elements to match against\n\t\t */\n\t\tfunction select(selector, context, results, seed) {\n\t\t\tvar i, tokens, token, type, find,\n\t\t\t\tcompiled = typeof selector === \"function\" && selector,\n\t\t\t\tmatch = !seed && tokenize((selector = compiled.selector || selector));\n\n\t\t\tresults = results || [];\n\n\t\t\t// Try to minimize operations if there is only one selector in the list and no seed\n\t\t\t// (the latter of which guarantees us context)\n\t\t\tif (match.length === 1) {\n\n\t\t\t\t// Reduce context if the leading compound selector is an ID\n\t\t\t\ttokens = match[0] = match[0].slice(0);\n\t\t\t\tif (tokens.length > 2 && (token = tokens[0]).type === \"ID\" &&\n\t\t\t\t\tcontext.nodeType === 9 && documentIsHTML && Expr.relative[tokens[1].type]) {\n\n\t\t\t\t\tcontext = (Expr.find.ID(\n\t\t\t\t\t\ttoken.matches[0].replace(runescape, funescape),\n\t\t\t\t\t\tcontext\n\t\t\t\t\t) || [])[0];\n\t\t\t\t\tif (!context) {\n\t\t\t\t\t\treturn results;\n\n\t\t\t\t\t\t// Precompiled matchers will still verify ancestry, so step up a level\n\t\t\t\t\t} else if (compiled) {\n\t\t\t\t\t\tcontext = context.parentNode;\n\t\t\t\t\t}\n\n\t\t\t\t\tselector = selector.slice(tokens.shift().value.length);\n\t\t\t\t}\n\n\t\t\t\t// Fetch a seed set for right-to-left matching\n\t\t\t\ti = matchExpr.needsContext.test(selector) ? 0 : tokens.length;\n\t\t\t\twhile (i--) {\n\t\t\t\t\ttoken = tokens[i];\n\n\t\t\t\t\t// Abort if we hit a combinator\n\t\t\t\t\tif (Expr.relative[(type = token.type)]) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tif ((find = Expr.find[type])) {\n\n\t\t\t\t\t\t// Search, expanding context for leading sibling combinators\n\t\t\t\t\t\tif ((seed = find(\n\t\t\t\t\t\t\ttoken.matches[0].replace(runescape, funescape),\n\t\t\t\t\t\t\trsibling.test(tokens[0].type) &&\n\t\t\t\t\t\t\ttestContext(context.parentNode) || context\n\t\t\t\t\t\t))) {\n\n\t\t\t\t\t\t\t// If seed is empty or no tokens remain, we can return early\n\t\t\t\t\t\t\ttokens.splice(i, 1);\n\t\t\t\t\t\t\tselector = seed.length && toSelector(tokens);\n\t\t\t\t\t\t\tif (!selector) {\n\t\t\t\t\t\t\t\tpush.apply(results, seed);\n\t\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Compile and execute a filtering function if one is not provided\n\t\t\t// Provide `match` to avoid retokenization if we modified the selector above\n\t\t\t(compiled || compile(selector, match))(\n\t\t\t\tseed,\n\t\t\t\tcontext,\n\t\t\t\t!documentIsHTML,\n\t\t\t\tresults,\n\t\t\t\t!context || rsibling.test(selector) && testContext(context.parentNode) || context\n\t\t\t);\n\t\t\treturn results;\n\t\t}\n\n\t\t// One-time assignments\n\n\t\t// Support: Android <=4.0 - 4.1+\n\t\t// Sort stability\n\t\tsupport.sortStable = expando.split(\"\").sort(sortOrder).join(\"\") === expando;\n\n\t\t// Initialize against the default document\n\t\tsetDocument();\n\n\t\t// Support: Android <=4.0 - 4.1+\n\t\t// Detached nodes confoundingly follow *each other*\n\t\tsupport.sortDetached = assert(function (el) {\n\n\t\t\t// Should return 1, but returns 4 (following)\n\t\t\treturn el.compareDocumentPosition(document.createElement(\"fieldset\")) & 1;\n\t\t});\n\n\t\tjQuery.find = find;\n\n\t\t// Deprecated\n\t\tjQuery.expr[\":\"] = jQuery.expr.pseudos;\n\t\tjQuery.unique = jQuery.uniqueSort;\n\n\t\t// These have always been private, but they used to be documented\n\t\t// as part of Sizzle so let's maintain them in the 3.x line\n\t\t// for backwards compatibility purposes.\n\t\tfind.compile = compile;\n\t\tfind.select = select;\n\t\tfind.setDocument = setDocument;\n\n\t\tfind.escape = jQuery.escapeSelector;\n\t\tfind.getText = jQuery.text;\n\t\tfind.isXML = jQuery.isXMLDoc;\n\t\tfind.selectors = jQuery.expr;\n\t\tfind.support = jQuery.support;\n\t\tfind.uniqueSort = jQuery.uniqueSort;\n\n\t\t/* eslint-enable */\n\n\t})();\n\n\n\tvar dir = function (elem, dir, until) {\n\t\tvar matched = [],\n\t\t\ttruncate = until !== undefined;\n\n\t\twhile ((elem = elem[dir]) && elem.nodeType !== 9) {\n\t\t\tif (elem.nodeType === 1) {\n\t\t\t\tif (truncate && jQuery(elem).is(until)) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tmatched.push(elem);\n\t\t\t}\n\t\t}\n\t\treturn matched;\n\t};\n\n\n\tvar siblings = function (n, elem) {\n\t\tvar matched = [];\n\n\t\tfor (; n; n = n.nextSibling) {\n\t\t\tif (n.nodeType === 1 && n !== elem) {\n\t\t\t\tmatched.push(n);\n\t\t\t}\n\t\t}\n\n\t\treturn matched;\n\t};\n\n\n\tvar rneedsContext = jQuery.expr.match.needsContext;\n\n\tvar rsingleTag = (/^<([a-z][^\\/\\0>:\\x20\\t\\r\\n\\f]*)[\\x20\\t\\r\\n\\f]*\\/?>(?:<\\/\\1>|)$/i);\n\n\n\n\t// Implement the identical functionality for filter and not\n\tfunction winnow(elements, qualifier, not) {\n\t\tif (isFunction(qualifier)) {\n\t\t\treturn jQuery.grep(elements, function (elem, i) {\n\t\t\t\treturn !!qualifier.call(elem, i, elem) !== not;\n\t\t\t});\n\t\t}\n\n\t\t// Single element\n\t\tif (qualifier.nodeType) {\n\t\t\treturn jQuery.grep(elements, function (elem) {\n\t\t\t\treturn (elem === qualifier) !== not;\n\t\t\t});\n\t\t}\n\n\t\t// Arraylike of elements (jQuery, arguments, Array)\n\t\tif (typeof qualifier !== \"string\") {\n\t\t\treturn jQuery.grep(elements, function (elem) {\n\t\t\t\treturn (indexOf.call(qualifier, elem) > -1) !== not;\n\t\t\t});\n\t\t}\n\n\t\t// Filtered directly for both simple and complex selectors\n\t\treturn jQuery.filter(qualifier, elements, not);\n\t}\n\n\tjQuery.filter = function (expr, elems, not) {\n\t\tvar elem = elems[0];\n\n\t\tif (not) {\n\t\t\texpr = \":not(\" + expr + \")\";\n\t\t}\n\n\t\tif (elems.length === 1 && elem.nodeType === 1) {\n\t\t\treturn jQuery.find.matchesSelector(elem, expr) ? [elem] : [];\n\t\t}\n\n\t\treturn jQuery.find.matches(expr, jQuery.grep(elems, function (elem) {\n\t\t\treturn elem.nodeType === 1;\n\t\t}));\n\t};\n\n\tjQuery.fn.extend({\n\t\tfind: function (selector) {\n\t\t\tvar i, ret,\n\t\t\t\tlen = this.length,\n\t\t\t\tself = this;\n\n\t\t\tif (typeof selector !== \"string\") {\n\t\t\t\treturn this.pushStack(jQuery(selector).filter(function () {\n\t\t\t\t\tfor (i = 0; i < len; i++) {\n\t\t\t\t\t\tif (jQuery.contains(self[i], this)) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}));\n\t\t\t}\n\n\t\t\tret = this.pushStack([]);\n\n\t\t\tfor (i = 0; i < len; i++) {\n\t\t\t\tjQuery.find(selector, self[i], ret);\n\t\t\t}\n\n\t\t\treturn len > 1 ? jQuery.uniqueSort(ret) : ret;\n\t\t},\n\t\tfilter: function (selector) {\n\t\t\treturn this.pushStack(winnow(this, selector || [], false));\n\t\t},\n\t\tnot: function (selector) {\n\t\t\treturn this.pushStack(winnow(this, selector || [], true));\n\t\t},\n\t\tis: function (selector) {\n\t\t\treturn !!winnow(\n\t\t\t\tthis,\n\n\t\t\t\t// If this is a positional/relative selector, check membership in the returned set\n\t\t\t\t// so $(\"p:first\").is(\"p:last\") won't return true for a doc with two \"p\".\n\t\t\t\ttypeof selector === \"string\" && rneedsContext.test(selector) ?\n\t\t\t\t\tjQuery(selector) :\n\t\t\t\t\tselector || [],\n\t\t\t\tfalse\n\t\t\t).length;\n\t\t}\n\t});\n\n\n\t// Initialize a jQuery object\n\n\n\t// A central reference to the root jQuery(document)\n\tvar rootjQuery,\n\n\t\t// A simple way to check for HTML strings\n\t\t// Prioritize #id over <tag> to avoid XSS via location.hash (trac-9521)\n\t\t// Strict HTML recognition (trac-11290: must start with <)\n\t\t// Shortcut simple #id case for speed\n\t\trquickExpr = /^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]+))$/,\n\n\t\tinit = jQuery.fn.init = function (selector, context, root) {\n\t\t\tvar match, elem;\n\n\t\t\t// HANDLE: $(\"\"), $(null), $(undefined), $(false)\n\t\t\tif (!selector) {\n\t\t\t\treturn this;\n\t\t\t}\n\n\t\t\t// Method init() accepts an alternate rootjQuery\n\t\t\t// so migrate can support jQuery.sub (gh-2101)\n\t\t\troot = root || rootjQuery;\n\n\t\t\t// Handle HTML strings\n\t\t\tif (typeof selector === \"string\") {\n\t\t\t\tif (selector[0] === \"<\" &&\n\t\t\t\t\tselector[selector.length - 1] === \">\" &&\n\t\t\t\t\tselector.length >= 3) {\n\n\t\t\t\t\t// Assume that strings that start and end with <> are HTML and skip the regex check\n\t\t\t\t\tmatch = [null, selector, null];\n\n\t\t\t\t} else {\n\t\t\t\t\tmatch = rquickExpr.exec(selector);\n\t\t\t\t}\n\n\t\t\t\t// Match html or make sure no context is specified for #id\n\t\t\t\tif (match && (match[1] || !context)) {\n\n\t\t\t\t\t// HANDLE: $(html) -> $(array)\n\t\t\t\t\tif (match[1]) {\n\t\t\t\t\t\tcontext = context instanceof jQuery ? context[0] : context;\n\n\t\t\t\t\t\t// Option to run scripts is true for back-compat\n\t\t\t\t\t\t// Intentionally let the error be thrown if parseHTML is not present\n\t\t\t\t\t\tjQuery.merge(this, jQuery.parseHTML(\n\t\t\t\t\t\t\tmatch[1],\n\t\t\t\t\t\t\tcontext && context.nodeType ? context.ownerDocument || context : document,\n\t\t\t\t\t\t\ttrue\n\t\t\t\t\t\t));\n\n\t\t\t\t\t\t// HANDLE: $(html, props)\n\t\t\t\t\t\tif (rsingleTag.test(match[1]) && jQuery.isPlainObject(context)) {\n\t\t\t\t\t\t\tfor (match in context) {\n\n\t\t\t\t\t\t\t\t// Properties of context are called as methods if possible\n\t\t\t\t\t\t\t\tif (isFunction(this[match])) {\n\t\t\t\t\t\t\t\t\tthis[match](context[match]);\n\n\t\t\t\t\t\t\t\t\t// ...and otherwise set as attributes\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tthis.attr(match, context[match]);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn this;\n\n\t\t\t\t\t\t// HANDLE: $(#id)\n\t\t\t\t\t} else {\n\t\t\t\t\t\telem = document.getElementById(match[2]);\n\n\t\t\t\t\t\tif (elem) {\n\n\t\t\t\t\t\t\t// Inject the element directly into the jQuery object\n\t\t\t\t\t\t\tthis[0] = elem;\n\t\t\t\t\t\t\tthis.length = 1;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn this;\n\t\t\t\t\t}\n\n\t\t\t\t\t// HANDLE: $(expr, $(...))\n\t\t\t\t} else if (!context || context.jquery) {\n\t\t\t\t\treturn (context || root).find(selector);\n\n\t\t\t\t\t// HANDLE: $(expr, context)\n\t\t\t\t\t// (which is just equivalent to: $(context).find(expr)\n\t\t\t\t} else {\n\t\t\t\t\treturn this.constructor(context).find(selector);\n\t\t\t\t}\n\n\t\t\t\t// HANDLE: $(DOMElement)\n\t\t\t} else if (selector.nodeType) {\n\t\t\t\tthis[0] = selector;\n\t\t\t\tthis.length = 1;\n\t\t\t\treturn this;\n\n\t\t\t\t// HANDLE: $(function)\n\t\t\t\t// Shortcut for document ready\n\t\t\t} else if (isFunction(selector)) {\n\t\t\t\treturn root.ready !== undefined ?\n\t\t\t\t\troot.ready(selector) :\n\n\t\t\t\t\t// Execute immediately if ready is not present\n\t\t\t\t\tselector(jQuery);\n\t\t\t}\n\n\t\t\treturn jQuery.makeArray(selector, this);\n\t\t};\n\n\t// Give the init function the jQuery prototype for later instantiation\n\tinit.prototype = jQuery.fn;\n\n\t// Initialize central reference\n\trootjQuery = jQuery(document);\n\n\n\tvar rparentsprev = /^(?:parents|prev(?:Until|All))/,\n\n\t\t// Methods guaranteed to produce a unique set when starting from a unique set\n\t\tguaranteedUnique = {\n\t\t\tchildren: true,\n\t\t\tcontents: true,\n\t\t\tnext: true,\n\t\t\tprev: true\n\t\t};\n\n\tjQuery.fn.extend({\n\t\thas: function (target) {\n\t\t\tvar targets = jQuery(target, this),\n\t\t\t\tl = targets.length;\n\n\t\t\treturn this.filter(function () {\n\t\t\t\tvar i = 0;\n\t\t\t\tfor (; i < l; i++) {\n\t\t\t\t\tif (jQuery.contains(this, targets[i])) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\tclosest: function (selectors, context) {\n\t\t\tvar cur,\n\t\t\t\ti = 0,\n\t\t\t\tl = this.length,\n\t\t\t\tmatched = [],\n\t\t\t\ttargets = typeof selectors !== \"string\" && jQuery(selectors);\n\n\t\t\t// Positional selectors never match, since there's no _selection_ context\n\t\t\tif (!rneedsContext.test(selectors)) {\n\t\t\t\tfor (; i < l; i++) {\n\t\t\t\t\tfor (cur = this[i]; cur && cur !== context; cur = cur.parentNode) {\n\n\t\t\t\t\t\t// Always skip document fragments\n\t\t\t\t\t\tif (cur.nodeType < 11 && (targets ?\n\t\t\t\t\t\t\ttargets.index(cur) > -1 :\n\n\t\t\t\t\t\t\t// Don't pass non-elements to jQuery#find\n\t\t\t\t\t\t\tcur.nodeType === 1 &&\n\t\t\t\t\t\t\tjQuery.find.matchesSelector(cur, selectors))) {\n\n\t\t\t\t\t\t\tmatched.push(cur);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn this.pushStack(matched.length > 1 ? jQuery.uniqueSort(matched) : matched);\n\t\t},\n\n\t\t// Determine the position of an element within the set\n\t\tindex: function (elem) {\n\n\t\t\t// No argument, return index in parent\n\t\t\tif (!elem) {\n\t\t\t\treturn (this[0] && this[0].parentNode) ? this.first().prevAll().length : -1;\n\t\t\t}\n\n\t\t\t// Index in selector\n\t\t\tif (typeof elem === \"string\") {\n\t\t\t\treturn indexOf.call(jQuery(elem), this[0]);\n\t\t\t}\n\n\t\t\t// Locate the position of the desired element\n\t\t\treturn indexOf.call(this,\n\n\t\t\t\t// If it receives a jQuery object, the first element is used\n\t\t\t\telem.jquery ? elem[0] : elem\n\t\t\t);\n\t\t},\n\n\t\tadd: function (selector, context) {\n\t\t\treturn this.pushStack(\n\t\t\t\tjQuery.uniqueSort(\n\t\t\t\t\tjQuery.merge(this.get(), jQuery(selector, context))\n\t\t\t\t)\n\t\t\t);\n\t\t},\n\n\t\taddBack: function (selector) {\n\t\t\treturn this.add(selector == null ?\n\t\t\t\tthis.prevObject : this.prevObject.filter(selector)\n\t\t\t);\n\t\t}\n\t});\n\n\tfunction sibling(cur, dir) {\n\t\twhile ((cur = cur[dir]) && cur.nodeType !== 1) { }\n\t\treturn cur;\n\t}\n\n\tjQuery.each({\n\t\tparent: function (elem) {\n\t\t\tvar parent = elem.parentNode;\n\t\t\treturn parent && parent.nodeType !== 11 ? parent : null;\n\t\t},\n\t\tparents: function (elem) {\n\t\t\treturn dir(elem, \"parentNode\");\n\t\t},\n\t\tparentsUntil: function (elem, _i, until) {\n\t\t\treturn dir(elem, \"parentNode\", until);\n\t\t},\n\t\tnext: function (elem) {\n\t\t\treturn sibling(elem, \"nextSibling\");\n\t\t},\n\t\tprev: function (elem) {\n\t\t\treturn sibling(elem, \"previousSibling\");\n\t\t},\n\t\tnextAll: function (elem) {\n\t\t\treturn dir(elem, \"nextSibling\");\n\t\t},\n\t\tprevAll: function (elem) {\n\t\t\treturn dir(elem, \"previousSibling\");\n\t\t},\n\t\tnextUntil: function (elem, _i, until) {\n\t\t\treturn dir(elem, \"nextSibling\", until);\n\t\t},\n\t\tprevUntil: function (elem, _i, until) {\n\t\t\treturn dir(elem, \"previousSibling\", until);\n\t\t},\n\t\tsiblings: function (elem) {\n\t\t\treturn siblings((elem.parentNode || {}).firstChild, elem);\n\t\t},\n\t\tchildren: function (elem) {\n\t\t\treturn siblings(elem.firstChild);\n\t\t},\n\t\tcontents: function (elem) {\n\t\t\tif (elem.contentDocument != null &&\n\n\t\t\t\t// Support: IE 11+\n\t\t\t\t// <object> elements with no `data` attribute has an object\n\t\t\t\t// `contentDocument` with a `null` prototype.\n\t\t\t\tgetProto(elem.contentDocument)) {\n\n\t\t\t\treturn elem.contentDocument;\n\t\t\t}\n\n\t\t\t// Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only\n\t\t\t// Treat the template element as a regular one in browsers that\n\t\t\t// don't support it.\n\t\t\tif (nodeName(elem, \"template\")) {\n\t\t\t\telem = elem.content || elem;\n\t\t\t}\n\n\t\t\treturn jQuery.merge([], elem.childNodes);\n\t\t}\n\t}, function (name, fn) {\n\t\tjQuery.fn[name] = function (until, selector) {\n\t\t\tvar matched = jQuery.map(this, fn, until);\n\n\t\t\tif (name.slice(-5) !== \"Until\") {\n\t\t\t\tselector = until;\n\t\t\t}\n\n\t\t\tif (selector && typeof selector === \"string\") {\n\t\t\t\tmatched = jQuery.filter(selector, matched);\n\t\t\t}\n\n\t\t\tif (this.length > 1) {\n\n\t\t\t\t// Remove duplicates\n\t\t\t\tif (!guaranteedUnique[name]) {\n\t\t\t\t\tjQuery.uniqueSort(matched);\n\t\t\t\t}\n\n\t\t\t\t// Reverse order for parents* and prev-derivatives\n\t\t\t\tif (rparentsprev.test(name)) {\n\t\t\t\t\tmatched.reverse();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn this.pushStack(matched);\n\t\t};\n\t});\n\tvar rnothtmlwhite = (/[^\\x20\\t\\r\\n\\f]+/g);\n\n\n\n\t// Convert String-formatted options into Object-formatted ones\n\tfunction createOptions(options) {\n\t\tvar object = {};\n\t\tjQuery.each(options.match(rnothtmlwhite) || [], function (_, flag) {\n\t\t\tobject[flag] = true;\n\t\t});\n\t\treturn object;\n\t}\n\n\t/*\n\t * Create a callback list using the following parameters:\n\t *\n\t *\toptions: an optional list of space-separated options that will change how\n\t *\t\t\tthe callback list behaves or a more traditional option object\n\t *\n\t * By default a callback list will act like an event callback list and can be\n\t * \"fired\" multiple times.\n\t *\n\t * Possible options:\n\t *\n\t *\tonce:\t\t\twill ensure the callback list can only be fired once (like a Deferred)\n\t *\n\t *\tmemory:\t\t\twill keep track of previous values and will call any callback added\n\t *\t\t\t\t\tafter the list has been fired right away with the latest \"memorized\"\n\t *\t\t\t\t\tvalues (like a Deferred)\n\t *\n\t *\tunique:\t\t\twill ensure a callback can only be added once (no duplicate in the list)\n\t *\n\t *\tstopOnFalse:\tinterrupt callings when a callback returns false\n\t *\n\t */\n\tjQuery.Callbacks = function (options) {\n\n\t\t// Convert options from String-formatted to Object-formatted if needed\n\t\t// (we check in cache first)\n\t\toptions = typeof options === \"string\" ?\n\t\t\tcreateOptions(options) :\n\t\t\tjQuery.extend({}, options);\n\n\t\tvar // Flag to know if list is currently firing\n\t\t\tfiring,\n\n\t\t\t// Last fire value for non-forgettable lists\n\t\t\tmemory,\n\n\t\t\t// Flag to know if list was already fired\n\t\t\tfired,\n\n\t\t\t// Flag to prevent firing\n\t\t\tlocked,\n\n\t\t\t// Actual callback list\n\t\t\tlist = [],\n\n\t\t\t// Queue of execution data for repeatable lists\n\t\t\tqueue = [],\n\n\t\t\t// Index of currently firing callback (modified by add/remove as needed)\n\t\t\tfiringIndex = -1,\n\n\t\t\t// Fire callbacks\n\t\t\tfire = function () {\n\n\t\t\t\t// Enforce single-firing\n\t\t\t\tlocked = locked || options.once;\n\n\t\t\t\t// Execute callbacks for all pending executions,\n\t\t\t\t// respecting firingIndex overrides and runtime changes\n\t\t\t\tfired = firing = true;\n\t\t\t\tfor (; queue.length; firingIndex = -1) {\n\t\t\t\t\tmemory = queue.shift();\n\t\t\t\t\twhile (++firingIndex < list.length) {\n\n\t\t\t\t\t\t// Run callback and check for early termination\n\t\t\t\t\t\tif (list[firingIndex].apply(memory[0], memory[1]) === false &&\n\t\t\t\t\t\t\toptions.stopOnFalse) {\n\n\t\t\t\t\t\t\t// Jump to end and forget the data so .add doesn't re-fire\n\t\t\t\t\t\t\tfiringIndex = list.length;\n\t\t\t\t\t\t\tmemory = false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Forget the data if we're done with it\n\t\t\t\tif (!options.memory) {\n\t\t\t\t\tmemory = false;\n\t\t\t\t}\n\n\t\t\t\tfiring = false;\n\n\t\t\t\t// Clean up if we're done firing for good\n\t\t\t\tif (locked) {\n\n\t\t\t\t\t// Keep an empty list if we have data for future add calls\n\t\t\t\t\tif (memory) {\n\t\t\t\t\t\tlist = [];\n\n\t\t\t\t\t\t// Otherwise, this object is spent\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlist = \"\";\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// Actual Callbacks object\n\t\t\tself = {\n\n\t\t\t\t// Add a callback or a collection of callbacks to the list\n\t\t\t\tadd: function () {\n\t\t\t\t\tif (list) {\n\n\t\t\t\t\t\t// If we have memory from a past run, we should fire after adding\n\t\t\t\t\t\tif (memory && !firing) {\n\t\t\t\t\t\t\tfiringIndex = list.length - 1;\n\t\t\t\t\t\t\tqueue.push(memory);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t(function add(args) {\n\t\t\t\t\t\t\tjQuery.each(args, function (_, arg) {\n\t\t\t\t\t\t\t\tif (isFunction(arg)) {\n\t\t\t\t\t\t\t\t\tif (!options.unique || !self.has(arg)) {\n\t\t\t\t\t\t\t\t\t\tlist.push(arg);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} else if (arg && arg.length && toType(arg) !== \"string\") {\n\n\t\t\t\t\t\t\t\t\t// Inspect recursively\n\t\t\t\t\t\t\t\t\tadd(arg);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t})(arguments);\n\n\t\t\t\t\t\tif (memory && !firing) {\n\t\t\t\t\t\t\tfire();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Remove a callback from the list\n\t\t\t\tremove: function () {\n\t\t\t\t\tjQuery.each(arguments, function (_, arg) {\n\t\t\t\t\t\tvar index;\n\t\t\t\t\t\twhile ((index = jQuery.inArray(arg, list, index)) > -1) {\n\t\t\t\t\t\t\tlist.splice(index, 1);\n\n\t\t\t\t\t\t\t// Handle firing indexes\n\t\t\t\t\t\t\tif (index <= firingIndex) {\n\t\t\t\t\t\t\t\tfiringIndex--;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Check if a given callback is in the list.\n\t\t\t\t// If no argument is given, return whether or not list has callbacks attached.\n\t\t\t\thas: function (fn) {\n\t\t\t\t\treturn fn ?\n\t\t\t\t\t\tjQuery.inArray(fn, list) > -1 :\n\t\t\t\t\t\tlist.length > 0;\n\t\t\t\t},\n\n\t\t\t\t// Remove all callbacks from the list\n\t\t\t\tempty: function () {\n\t\t\t\t\tif (list) {\n\t\t\t\t\t\tlist = [];\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Disable .fire and .add\n\t\t\t\t// Abort any current/pending executions\n\t\t\t\t// Clear all callbacks and values\n\t\t\t\tdisable: function () {\n\t\t\t\t\tlocked = queue = [];\n\t\t\t\t\tlist = memory = \"\";\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\t\t\t\tdisabled: function () {\n\t\t\t\t\treturn !list;\n\t\t\t\t},\n\n\t\t\t\t// Disable .fire\n\t\t\t\t// Also disable .add unless we have memory (since it would have no effect)\n\t\t\t\t// Abort any pending executions\n\t\t\t\tlock: function () {\n\t\t\t\t\tlocked = queue = [];\n\t\t\t\t\tif (!memory && !firing) {\n\t\t\t\t\t\tlist = memory = \"\";\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\t\t\t\tlocked: function () {\n\t\t\t\t\treturn !!locked;\n\t\t\t\t},\n\n\t\t\t\t// Call all callbacks with the given context and arguments\n\t\t\t\tfireWith: function (context, args) {\n\t\t\t\t\tif (!locked) {\n\t\t\t\t\t\targs = args || [];\n\t\t\t\t\t\targs = [context, args.slice ? args.slice() : args];\n\t\t\t\t\t\tqueue.push(args);\n\t\t\t\t\t\tif (!firing) {\n\t\t\t\t\t\t\tfire();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Call all the callbacks with the given arguments\n\t\t\t\tfire: function () {\n\t\t\t\t\tself.fireWith(this, arguments);\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// To know if the callbacks have already been called at least once\n\t\t\t\tfired: function () {\n\t\t\t\t\treturn !!fired;\n\t\t\t\t}\n\t\t\t};\n\n\t\treturn self;\n\t};\n\n\n\tfunction Identity(v) {\n\t\treturn v;\n\t}\n\tfunction Thrower(ex) {\n\t\tthrow ex;\n\t}\n\n\tfunction adoptValue(value, resolve, reject, noValue) {\n\t\tvar method;\n\n\t\ttry {\n\n\t\t\t// Check for promise aspect first to privilege synchronous behavior\n\t\t\tif (value && isFunction((method = value.promise))) {\n\t\t\t\tmethod.call(value).done(resolve).fail(reject);\n\n\t\t\t\t// Other thenables\n\t\t\t} else if (value && isFunction((method = value.then))) {\n\t\t\t\tmethod.call(value, resolve, reject);\n\n\t\t\t\t// Other non-thenables\n\t\t\t} else {\n\n\t\t\t\t// Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer:\n\t\t\t\t// * false: [ value ].slice( 0 ) => resolve( value )\n\t\t\t\t// * true: [ value ].slice( 1 ) => resolve()\n\t\t\t\tresolve.apply(undefined, [value].slice(noValue));\n\t\t\t}\n\n\t\t\t// For Promises/A+, convert exceptions into rejections\n\t\t\t// Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in\n\t\t\t// Deferred#then to conditionally suppress rejection.\n\t\t} catch (value) {\n\n\t\t\t// Support: Android 4.0 only\n\t\t\t// Strict mode functions invoked without .call/.apply get global-object context\n\t\t\treject.apply(undefined, [value]);\n\t\t}\n\t}\n\n\tjQuery.extend({\n\n\t\tDeferred: function (func) {\n\t\t\tvar tuples = [\n\n\t\t\t\t// action, add listener, callbacks,\n\t\t\t\t// ... .then handlers, argument index, [final state]\n\t\t\t\t[\"notify\", \"progress\", jQuery.Callbacks(\"memory\"),\n\t\t\t\t\tjQuery.Callbacks(\"memory\"), 2],\n\t\t\t\t[\"resolve\", \"done\", jQuery.Callbacks(\"once memory\"),\n\t\t\t\t\tjQuery.Callbacks(\"once memory\"), 0, \"resolved\"],\n\t\t\t\t[\"reject\", \"fail\", jQuery.Callbacks(\"once memory\"),\n\t\t\t\t\tjQuery.Callbacks(\"once memory\"), 1, \"rejected\"]\n\t\t\t],\n\t\t\t\tstate = \"pending\",\n\t\t\t\tpromise = {\n\t\t\t\t\tstate: function () {\n\t\t\t\t\t\treturn state;\n\t\t\t\t\t},\n\t\t\t\t\talways: function () {\n\t\t\t\t\t\tdeferred.done(arguments).fail(arguments);\n\t\t\t\t\t\treturn this;\n\t\t\t\t\t},\n\t\t\t\t\t\"catch\": function (fn) {\n\t\t\t\t\t\treturn promise.then(null, fn);\n\t\t\t\t\t},\n\n\t\t\t\t\t// Keep pipe for back-compat\n\t\t\t\t\tpipe: function ( /* fnDone, fnFail, fnProgress */) {\n\t\t\t\t\t\tvar fns = arguments;\n\n\t\t\t\t\t\treturn jQuery.Deferred(function (newDefer) {\n\t\t\t\t\t\t\tjQuery.each(tuples, function (_i, tuple) {\n\n\t\t\t\t\t\t\t\t// Map tuples (progress, done, fail) to arguments (done, fail, progress)\n\t\t\t\t\t\t\t\tvar fn = isFunction(fns[tuple[4]]) && fns[tuple[4]];\n\n\t\t\t\t\t\t\t\t// deferred.progress(function() { bind to newDefer or newDefer.notify })\n\t\t\t\t\t\t\t\t// deferred.done(function() { bind to newDefer or newDefer.resolve })\n\t\t\t\t\t\t\t\t// deferred.fail(function() { bind to newDefer or newDefer.reject })\n\t\t\t\t\t\t\t\tdeferred[tuple[1]](function () {\n\t\t\t\t\t\t\t\t\tvar returned = fn && fn.apply(this, arguments);\n\t\t\t\t\t\t\t\t\tif (returned && isFunction(returned.promise)) {\n\t\t\t\t\t\t\t\t\t\treturned.promise()\n\t\t\t\t\t\t\t\t\t\t\t.progress(newDefer.notify)\n\t\t\t\t\t\t\t\t\t\t\t.done(newDefer.resolve)\n\t\t\t\t\t\t\t\t\t\t\t.fail(newDefer.reject);\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tnewDefer[tuple[0] + \"With\"](\n\t\t\t\t\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\t\t\t\t\tfn ? [returned] : arguments\n\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tfns = null;\n\t\t\t\t\t\t}).promise();\n\t\t\t\t\t},\n\t\t\t\t\tthen: function (onFulfilled, onRejected, onProgress) {\n\t\t\t\t\t\tvar maxDepth = 0;\n\t\t\t\t\t\tfunction resolve(depth, deferred, handler, special) {\n\t\t\t\t\t\t\treturn function () {\n\t\t\t\t\t\t\t\tvar that = this,\n\t\t\t\t\t\t\t\t\targs = arguments,\n\t\t\t\t\t\t\t\t\tmightThrow = function () {\n\t\t\t\t\t\t\t\t\t\tvar returned, then;\n\n\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.3\n\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-59\n\t\t\t\t\t\t\t\t\t\t// Ignore double-resolution attempts\n\t\t\t\t\t\t\t\t\t\tif (depth < maxDepth) {\n\t\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\treturned = handler.apply(that, args);\n\n\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.1\n\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-48\n\t\t\t\t\t\t\t\t\t\tif (returned === deferred.promise()) {\n\t\t\t\t\t\t\t\t\t\t\tthrow new TypeError(\"Thenable self-resolution\");\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ sections 2.3.3.1, 3.5\n\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-54\n\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-75\n\t\t\t\t\t\t\t\t\t\t// Retrieve `then` only once\n\t\t\t\t\t\t\t\t\t\tthen = returned &&\n\n\t\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.4\n\t\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-64\n\t\t\t\t\t\t\t\t\t\t\t// Only check objects and functions for thenability\n\t\t\t\t\t\t\t\t\t\t\t(typeof returned === \"object\" ||\n\t\t\t\t\t\t\t\t\t\t\t\ttypeof returned === \"function\") &&\n\t\t\t\t\t\t\t\t\t\t\treturned.then;\n\n\t\t\t\t\t\t\t\t\t\t// Handle a returned thenable\n\t\t\t\t\t\t\t\t\t\tif (isFunction(then)) {\n\n\t\t\t\t\t\t\t\t\t\t\t// Special processors (notify) just wait for resolution\n\t\t\t\t\t\t\t\t\t\t\tif (special) {\n\t\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\t\tresolve(maxDepth, deferred, Identity, special),\n\t\t\t\t\t\t\t\t\t\t\t\t\tresolve(maxDepth, deferred, Thrower, special)\n\t\t\t\t\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t\t\t\t\t// Normal processors (resolve) also hook into progress\n\t\t\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t\t\t// ...and disregard older resolution values\n\t\t\t\t\t\t\t\t\t\t\t\tmaxDepth++;\n\n\t\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\t\tresolve(maxDepth, deferred, Identity, special),\n\t\t\t\t\t\t\t\t\t\t\t\t\tresolve(maxDepth, deferred, Thrower, special),\n\t\t\t\t\t\t\t\t\t\t\t\t\tresolve(maxDepth, deferred, Identity,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tdeferred.notifyWith)\n\t\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t// Handle all other returned values\n\t\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\t\tif (handler !== Identity) {\n\t\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\t\targs = [returned];\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t// Process the value(s)\n\t\t\t\t\t\t\t\t\t\t\t// Default process is resolve\n\t\t\t\t\t\t\t\t\t\t\t(special || deferred.resolveWith)(that, args);\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\n\t\t\t\t\t\t\t\t\t// Only normal processors (resolve) catch and reject exceptions\n\t\t\t\t\t\t\t\t\tprocess = special ?\n\t\t\t\t\t\t\t\t\t\tmightThrow :\n\t\t\t\t\t\t\t\t\t\tfunction () {\n\t\t\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\t\t\tmightThrow();\n\t\t\t\t\t\t\t\t\t\t\t} catch (e) {\n\n\t\t\t\t\t\t\t\t\t\t\t\tif (jQuery.Deferred.exceptionHook) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tjQuery.Deferred.exceptionHook(e,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tprocess.error);\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.4.1\n\t\t\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-61\n\t\t\t\t\t\t\t\t\t\t\t\t// Ignore post-resolution exceptions\n\t\t\t\t\t\t\t\t\t\t\t\tif (depth + 1 >= maxDepth) {\n\n\t\t\t\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\t\t\t\tif (handler !== Thrower) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\targs = [e];\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\t\tdeferred.rejectWith(that, args);\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.1\n\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-57\n\t\t\t\t\t\t\t\t// Re-resolve promises immediately to dodge false rejection from\n\t\t\t\t\t\t\t\t// subsequent errors\n\t\t\t\t\t\t\t\tif (depth) {\n\t\t\t\t\t\t\t\t\tprocess();\n\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t// Call an optional hook to record the error, in case of exception\n\t\t\t\t\t\t\t\t\t// since it's otherwise lost when execution goes async\n\t\t\t\t\t\t\t\t\tif (jQuery.Deferred.getErrorHook) {\n\t\t\t\t\t\t\t\t\t\tprocess.error = jQuery.Deferred.getErrorHook();\n\n\t\t\t\t\t\t\t\t\t\t// The deprecated alias of the above. While the name suggests\n\t\t\t\t\t\t\t\t\t\t// returning the stack, not an error instance, jQuery just passes\n\t\t\t\t\t\t\t\t\t\t// it directly to `console.warn` so both will work; an instance\n\t\t\t\t\t\t\t\t\t\t// just better cooperates with source maps.\n\t\t\t\t\t\t\t\t\t} else if (jQuery.Deferred.getStackHook) {\n\t\t\t\t\t\t\t\t\t\tprocess.error = jQuery.Deferred.getStackHook();\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\twindow.setTimeout(process);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn jQuery.Deferred(function (newDefer) {\n\n\t\t\t\t\t\t\t// progress_handlers.add( ... )\n\t\t\t\t\t\t\ttuples[0][3].add(\n\t\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\t\tisFunction(onProgress) ?\n\t\t\t\t\t\t\t\t\t\tonProgress :\n\t\t\t\t\t\t\t\t\t\tIdentity,\n\t\t\t\t\t\t\t\t\tnewDefer.notifyWith\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t// fulfilled_handlers.add( ... )\n\t\t\t\t\t\t\ttuples[1][3].add(\n\t\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\t\tisFunction(onFulfilled) ?\n\t\t\t\t\t\t\t\t\t\tonFulfilled :\n\t\t\t\t\t\t\t\t\t\tIdentity\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t// rejected_handlers.add( ... )\n\t\t\t\t\t\t\ttuples[2][3].add(\n\t\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\t\tisFunction(onRejected) ?\n\t\t\t\t\t\t\t\t\t\tonRejected :\n\t\t\t\t\t\t\t\t\t\tThrower\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}).promise();\n\t\t\t\t\t},\n\n\t\t\t\t\t// Get a promise for this deferred\n\t\t\t\t\t// If obj is provided, the promise aspect is added to the object\n\t\t\t\t\tpromise: function (obj) {\n\t\t\t\t\t\treturn obj != null ? jQuery.extend(obj, promise) : promise;\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tdeferred = {};\n\n\t\t\t// Add list-specific methods\n\t\t\tjQuery.each(tuples, function (i, tuple) {\n\t\t\t\tvar list = tuple[2],\n\t\t\t\t\tstateString = tuple[5];\n\n\t\t\t\t// promise.progress = list.add\n\t\t\t\t// promise.done = list.add\n\t\t\t\t// promise.fail = list.add\n\t\t\t\tpromise[tuple[1]] = list.add;\n\n\t\t\t\t// Handle state\n\t\t\t\tif (stateString) {\n\t\t\t\t\tlist.add(\n\t\t\t\t\t\tfunction () {\n\n\t\t\t\t\t\t\t// state = \"resolved\" (i.e., fulfilled)\n\t\t\t\t\t\t\t// state = \"rejected\"\n\t\t\t\t\t\t\tstate = stateString;\n\t\t\t\t\t\t},\n\n\t\t\t\t\t\t// rejected_callbacks.disable\n\t\t\t\t\t\t// fulfilled_callbacks.disable\n\t\t\t\t\t\ttuples[3 - i][2].disable,\n\n\t\t\t\t\t\t// rejected_handlers.disable\n\t\t\t\t\t\t// fulfilled_handlers.disable\n\t\t\t\t\t\ttuples[3 - i][3].disable,\n\n\t\t\t\t\t\t// progress_callbacks.lock\n\t\t\t\t\t\ttuples[0][2].lock,\n\n\t\t\t\t\t\t// progress_handlers.lock\n\t\t\t\t\t\ttuples[0][3].lock\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\t// progress_handlers.fire\n\t\t\t\t// fulfilled_handlers.fire\n\t\t\t\t// rejected_handlers.fire\n\t\t\t\tlist.add(tuple[3].fire);\n\n\t\t\t\t// deferred.notify = function() { deferred.notifyWith(...) }\n\t\t\t\t// deferred.resolve = function() { deferred.resolveWith(...) }\n\t\t\t\t// deferred.reject = function() { deferred.rejectWith(...) }\n\t\t\t\tdeferred[tuple[0]] = function () {\n\t\t\t\t\tdeferred[tuple[0] + \"With\"](this === deferred ? undefined : this, arguments);\n\t\t\t\t\treturn this;\n\t\t\t\t};\n\n\t\t\t\t// deferred.notifyWith = list.fireWith\n\t\t\t\t// deferred.resolveWith = list.fireWith\n\t\t\t\t// deferred.rejectWith = list.fireWith\n\t\t\t\tdeferred[tuple[0] + \"With\"] = list.fireWith;\n\t\t\t});\n\n\t\t\t// Make the deferred a promise\n\t\t\tpromise.promise(deferred);\n\n\t\t\t// Call given func if any\n\t\t\tif (func) {\n\t\t\t\tfunc.call(deferred, deferred);\n\t\t\t}\n\n\t\t\t// All done!\n\t\t\treturn deferred;\n\t\t},\n\n\t\t// Deferred helper\n\t\twhen: function (singleValue) {\n\t\t\tvar\n\n\t\t\t\t// count of uncompleted subordinates\n\t\t\t\tremaining = arguments.length,\n\n\t\t\t\t// count of unprocessed arguments\n\t\t\t\ti = remaining,\n\n\t\t\t\t// subordinate fulfillment data\n\t\t\t\tresolveContexts = Array(i),\n\t\t\t\tresolveValues = slice.call(arguments),\n\n\t\t\t\t// the primary Deferred\n\t\t\t\tprimary = jQuery.Deferred(),\n\n\t\t\t\t// subordinate callback factory\n\t\t\t\tupdateFunc = function (i) {\n\t\t\t\t\treturn function (value) {\n\t\t\t\t\t\tresolveContexts[i] = this;\n\t\t\t\t\t\tresolveValues[i] = arguments.length > 1 ? slice.call(arguments) : value;\n\t\t\t\t\t\tif (!(--remaining)) {\n\t\t\t\t\t\t\tprimary.resolveWith(resolveContexts, resolveValues);\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t};\n\n\t\t\t// Single- and empty arguments are adopted like Promise.resolve\n\t\t\tif (remaining <= 1) {\n\t\t\t\tadoptValue(singleValue, primary.done(updateFunc(i)).resolve, primary.reject,\n\t\t\t\t\t!remaining);\n\n\t\t\t\t// Use .then() to unwrap secondary thenables (cf. gh-3000)\n\t\t\t\tif (primary.state() === \"pending\" ||\n\t\t\t\t\tisFunction(resolveValues[i] && resolveValues[i].then)) {\n\n\t\t\t\t\treturn primary.then();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Multiple arguments are aggregated like Promise.all array elements\n\t\t\twhile (i--) {\n\t\t\t\tadoptValue(resolveValues[i], updateFunc(i), primary.reject);\n\t\t\t}\n\n\t\t\treturn primary.promise();\n\t\t}\n\t});\n\n\n\t// These usually indicate a programmer mistake during development,\n\t// warn about them ASAP rather than swallowing them by default.\n\tvar rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;\n\n\t// If `jQuery.Deferred.getErrorHook` is defined, `asyncError` is an error\n\t// captured before the async barrier to get the original error cause\n\t// which may otherwise be hidden.\n\tjQuery.Deferred.exceptionHook = function (error, asyncError) {\n\n\t\t// Support: IE 8 - 9 only\n\t\t// Console exists when dev tools are open, which can happen at any time\n\t\tif (window.console && window.console.warn && error && rerrorNames.test(error.name)) {\n\t\t\twindow.console.warn(\"jQuery.Deferred exception: \" + error.message,\n\t\t\t\terror.stack, asyncError);\n\t\t}\n\t};\n\n\n\n\n\tjQuery.readyException = function (error) {\n\t\twindow.setTimeout(function () {\n\t\t\tthrow error;\n\t\t});\n\t};\n\n\n\n\n\t// The deferred used on DOM ready\n\tvar readyList = jQuery.Deferred();\n\n\tjQuery.fn.ready = function (fn) {\n\n\t\treadyList\n\t\t\t.then(fn)\n\n\t\t\t// Wrap jQuery.readyException in a function so that the lookup\n\t\t\t// happens at the time of error handling instead of callback\n\t\t\t// registration.\n\t\t\t.catch(function (error) {\n\t\t\t\tjQuery.readyException(error);\n\t\t\t});\n\n\t\treturn this;\n\t};\n\n\tjQuery.extend({\n\n\t\t// Is the DOM ready to be used? Set to true once it occurs.\n\t\tisReady: false,\n\n\t\t// A counter to track how many items to wait for before\n\t\t// the ready event fires. See trac-6781\n\t\treadyWait: 1,\n\n\t\t// Handle when the DOM is ready\n\t\tready: function (wait) {\n\n\t\t\t// Abort if there are pending holds or we're already ready\n\t\t\tif (wait === true ? --jQuery.readyWait : jQuery.isReady) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Remember that the DOM is ready\n\t\t\tjQuery.isReady = true;\n\n\t\t\t// If a normal DOM Ready event fired, decrement, and wait if need be\n\t\t\tif (wait !== true && --jQuery.readyWait > 0) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If there are functions bound, to execute\n\t\t\treadyList.resolveWith(document, [jQuery]);\n\t\t}\n\t});\n\n\tjQuery.ready.then = readyList.then;\n\n\t// The ready event handler and self cleanup method\n\tfunction completed() {\n\t\tdocument.removeEventListener(\"DOMContentLoaded\", completed);\n\t\twindow.removeEventListener(\"load\", completed);\n\t\tjQuery.ready();\n\t}\n\n\t// Catch cases where $(document).ready() is called\n\t// after the browser event has already occurred.\n\t// Support: IE <=9 - 10 only\n\t// Older IE sometimes signals \"interactive\" too soon\n\tif (document.readyState === \"complete\" ||\n\t\t(document.readyState !== \"loading\" && !document.documentElement.doScroll)) {\n\n\t\t// Handle it asynchronously to allow scripts the opportunity to delay ready\n\t\twindow.setTimeout(jQuery.ready);\n\n\t} else {\n\n\t\t// Use the handy event callback\n\t\tdocument.addEventListener(\"DOMContentLoaded\", completed);\n\n\t\t// A fallback to window.onload, that will always work\n\t\twindow.addEventListener(\"load\", completed);\n\t}\n\n\n\n\n\t// Multifunctional method to get and set values of a collection\n\t// The value/s can optionally be executed if it's a function\n\tvar access = function (elems, fn, key, value, chainable, emptyGet, raw) {\n\t\tvar i = 0,\n\t\t\tlen = elems.length,\n\t\t\tbulk = key == null;\n\n\t\t// Sets many values\n\t\tif (toType(key) === \"object\") {\n\t\t\tchainable = true;\n\t\t\tfor (i in key) {\n\t\t\t\taccess(elems, fn, i, key[i], true, emptyGet, raw);\n\t\t\t}\n\n\t\t\t// Sets one value\n\t\t} else if (value !== undefined) {\n\t\t\tchainable = true;\n\n\t\t\tif (!isFunction(value)) {\n\t\t\t\traw = true;\n\t\t\t}\n\n\t\t\tif (bulk) {\n\n\t\t\t\t// Bulk operations run against the entire set\n\t\t\t\tif (raw) {\n\t\t\t\t\tfn.call(elems, value);\n\t\t\t\t\tfn = null;\n\n\t\t\t\t\t// ...except when executing function values\n\t\t\t\t} else {\n\t\t\t\t\tbulk = fn;\n\t\t\t\t\tfn = function (elem, _key, value) {\n\t\t\t\t\t\treturn bulk.call(jQuery(elem), value);\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (fn) {\n\t\t\t\tfor (; i < len; i++) {\n\t\t\t\t\tfn(\n\t\t\t\t\t\telems[i], key, raw ?\n\t\t\t\t\t\tvalue :\n\t\t\t\t\t\tvalue.call(elems[i], i, fn(elems[i], key))\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (chainable) {\n\t\t\treturn elems;\n\t\t}\n\n\t\t// Gets\n\t\tif (bulk) {\n\t\t\treturn fn.call(elems);\n\t\t}\n\n\t\treturn len ? fn(elems[0], key) : emptyGet;\n\t};\n\n\n\t// Matches dashed string for camelizing\n\tvar rmsPrefix = /^-ms-/,\n\t\trdashAlpha = /-([a-z])/g;\n\n\t// Used by camelCase as callback to replace()\n\tfunction fcamelCase(_all, letter) {\n\t\treturn letter.toUpperCase();\n\t}\n\n\t// Convert dashed to camelCase; used by the css and data modules\n\t// Support: IE <=9 - 11, Edge 12 - 15\n\t// Microsoft forgot to hump their vendor prefix (trac-9572)\n\tfunction camelCase(string) {\n\t\treturn string.replace(rmsPrefix, \"ms-\").replace(rdashAlpha, fcamelCase);\n\t}\n\tvar acceptData = function (owner) {\n\n\t\t// Accepts only:\n\t\t//  - Node\n\t\t//    - Node.ELEMENT_NODE\n\t\t//    - Node.DOCUMENT_NODE\n\t\t//  - Object\n\t\t//    - Any\n\t\treturn owner.nodeType === 1 || owner.nodeType === 9 || !(+owner.nodeType);\n\t};\n\n\n\n\n\tfunction Data() {\n\t\tthis.expando = jQuery.expando + Data.uid++;\n\t}\n\n\tData.uid = 1;\n\n\tData.prototype = {\n\n\t\tcache: function (owner) {\n\n\t\t\t// Check if the owner object already has a cache\n\t\t\tvar value = owner[this.expando];\n\n\t\t\t// If not, create one\n\t\t\tif (!value) {\n\t\t\t\tvalue = {};\n\n\t\t\t\t// We can accept data for non-element nodes in modern browsers,\n\t\t\t\t// but we should not, see trac-8335.\n\t\t\t\t// Always return an empty object.\n\t\t\t\tif (acceptData(owner)) {\n\n\t\t\t\t\t// If it is a node unlikely to be stringify-ed or looped over\n\t\t\t\t\t// use plain assignment\n\t\t\t\t\tif (owner.nodeType) {\n\t\t\t\t\t\towner[this.expando] = value;\n\n\t\t\t\t\t\t// Otherwise secure it in a non-enumerable property\n\t\t\t\t\t\t// configurable must be true to allow the property to be\n\t\t\t\t\t\t// deleted when data is removed\n\t\t\t\t\t} else {\n\t\t\t\t\t\tObject.defineProperty(owner, this.expando, {\n\t\t\t\t\t\t\tvalue: value,\n\t\t\t\t\t\t\tconfigurable: true\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn value;\n\t\t},\n\t\tset: function (owner, data, value) {\n\t\t\tvar prop,\n\t\t\t\tcache = this.cache(owner);\n\n\t\t\t// Handle: [ owner, key, value ] args\n\t\t\t// Always use camelCase key (gh-2257)\n\t\t\tif (typeof data === \"string\") {\n\t\t\t\tcache[camelCase(data)] = value;\n\n\t\t\t\t// Handle: [ owner, { properties } ] args\n\t\t\t} else {\n\n\t\t\t\t// Copy the properties one-by-one to the cache object\n\t\t\t\tfor (prop in data) {\n\t\t\t\t\tcache[camelCase(prop)] = data[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn cache;\n\t\t},\n\t\tget: function (owner, key) {\n\t\t\treturn key === undefined ?\n\t\t\t\tthis.cache(owner) :\n\n\t\t\t\t// Always use camelCase key (gh-2257)\n\t\t\t\towner[this.expando] && owner[this.expando][camelCase(key)];\n\t\t},\n\t\taccess: function (owner, key, value) {\n\n\t\t\t// In cases where either:\n\t\t\t//\n\t\t\t//   1. No key was specified\n\t\t\t//   2. A string key was specified, but no value provided\n\t\t\t//\n\t\t\t// Take the \"read\" path and allow the get method to determine\n\t\t\t// which value to return, respectively either:\n\t\t\t//\n\t\t\t//   1. The entire cache object\n\t\t\t//   2. The data stored at the key\n\t\t\t//\n\t\t\tif (key === undefined ||\n\t\t\t\t((key && typeof key === \"string\") && value === undefined)) {\n\n\t\t\t\treturn this.get(owner, key);\n\t\t\t}\n\n\t\t\t// When the key is not a string, or both a key and value\n\t\t\t// are specified, set or extend (existing objects) with either:\n\t\t\t//\n\t\t\t//   1. An object of properties\n\t\t\t//   2. A key and value\n\t\t\t//\n\t\t\tthis.set(owner, key, value);\n\n\t\t\t// Since the \"set\" path can have two possible entry points\n\t\t\t// return the expected data based on which path was taken[*]\n\t\t\treturn value !== undefined ? value : key;\n\t\t},\n\t\tremove: function (owner, key) {\n\t\t\tvar i,\n\t\t\t\tcache = owner[this.expando];\n\n\t\t\tif (cache === undefined) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (key !== undefined) {\n\n\t\t\t\t// Support array or space separated string of keys\n\t\t\t\tif (Array.isArray(key)) {\n\n\t\t\t\t\t// If key is an array of keys...\n\t\t\t\t\t// We always set camelCase keys, so remove that.\n\t\t\t\t\tkey = key.map(camelCase);\n\t\t\t\t} else {\n\t\t\t\t\tkey = camelCase(key);\n\n\t\t\t\t\t// If a key with the spaces exists, use it.\n\t\t\t\t\t// Otherwise, create an array by matching non-whitespace\n\t\t\t\t\tkey = key in cache ?\n\t\t\t\t\t\t[key] :\n\t\t\t\t\t\t(key.match(rnothtmlwhite) || []);\n\t\t\t\t}\n\n\t\t\t\ti = key.length;\n\n\t\t\t\twhile (i--) {\n\t\t\t\t\tdelete cache[key[i]];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove the expando if there's no more data\n\t\t\tif (key === undefined || jQuery.isEmptyObject(cache)) {\n\n\t\t\t\t// Support: Chrome <=35 - 45\n\t\t\t\t// Webkit & Blink performance suffers when deleting properties\n\t\t\t\t// from DOM nodes, so set to undefined instead\n\t\t\t\t// https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted)\n\t\t\t\tif (owner.nodeType) {\n\t\t\t\t\towner[this.expando] = undefined;\n\t\t\t\t} else {\n\t\t\t\t\tdelete owner[this.expando];\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\thasData: function (owner) {\n\t\t\tvar cache = owner[this.expando];\n\t\t\treturn cache !== undefined && !jQuery.isEmptyObject(cache);\n\t\t}\n\t};\n\tvar dataPriv = new Data();\n\n\tvar dataUser = new Data();\n\n\n\n\t//\tImplementation Summary\n\t//\n\t//\t1. Enforce API surface and semantic compatibility with 1.9.x branch\n\t//\t2. Improve the module's maintainability by reducing the storage\n\t//\t\tpaths to a single mechanism.\n\t//\t3. Use the same single mechanism to support \"private\" and \"user\" data.\n\t//\t4. _Never_ expose \"private\" data to user code (TODO: Drop _data, _removeData)\n\t//\t5. Avoid exposing implementation details on user objects (eg. expando properties)\n\t//\t6. Provide a clear path for implementation upgrade to WeakMap in 2014\n\n\tvar rbrace = /^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,\n\t\trmultiDash = /[A-Z]/g;\n\n\tfunction getData(data) {\n\t\tif (data === \"true\") {\n\t\t\treturn true;\n\t\t}\n\n\t\tif (data === \"false\") {\n\t\t\treturn false;\n\t\t}\n\n\t\tif (data === \"null\") {\n\t\t\treturn null;\n\t\t}\n\n\t\t// Only convert to a number if it doesn't change the string\n\t\tif (data === +data + \"\") {\n\t\t\treturn +data;\n\t\t}\n\n\t\tif (rbrace.test(data)) {\n\t\t\treturn JSON.parse(data);\n\t\t}\n\n\t\treturn data;\n\t}\n\n\tfunction dataAttr(elem, key, data) {\n\t\tvar name;\n\n\t\t// If nothing was found internally, try to fetch any\n\t\t// data from the HTML5 data-* attribute\n\t\tif (data === undefined && elem.nodeType === 1) {\n\t\t\tname = \"data-\" + key.replace(rmultiDash, \"-$&\").toLowerCase();\n\t\t\tdata = elem.getAttribute(name);\n\n\t\t\tif (typeof data === \"string\") {\n\t\t\t\ttry {\n\t\t\t\t\tdata = getData(data);\n\t\t\t\t} catch (e) { }\n\n\t\t\t\t// Make sure we set the data so it isn't changed later\n\t\t\t\tdataUser.set(elem, key, data);\n\t\t\t} else {\n\t\t\t\tdata = undefined;\n\t\t\t}\n\t\t}\n\t\treturn data;\n\t}\n\n\tjQuery.extend({\n\t\thasData: function (elem) {\n\t\t\treturn dataUser.hasData(elem) || dataPriv.hasData(elem);\n\t\t},\n\n\t\tdata: function (elem, name, data) {\n\t\t\treturn dataUser.access(elem, name, data);\n\t\t},\n\n\t\tremoveData: function (elem, name) {\n\t\t\tdataUser.remove(elem, name);\n\t\t},\n\n\t\t// TODO: Now that all calls to _data and _removeData have been replaced\n\t\t// with direct calls to dataPriv methods, these can be deprecated.\n\t\t_data: function (elem, name, data) {\n\t\t\treturn dataPriv.access(elem, name, data);\n\t\t},\n\n\t\t_removeData: function (elem, name) {\n\t\t\tdataPriv.remove(elem, name);\n\t\t}\n\t});\n\n\tjQuery.fn.extend({\n\t\tdata: function (key, value) {\n\t\t\tvar i, name, data,\n\t\t\t\telem = this[0],\n\t\t\t\tattrs = elem && elem.attributes;\n\n\t\t\t// Gets all values\n\t\t\tif (key === undefined) {\n\t\t\t\tif (this.length) {\n\t\t\t\t\tdata = dataUser.get(elem);\n\n\t\t\t\t\tif (elem.nodeType === 1 && !dataPriv.get(elem, \"hasDataAttrs\")) {\n\t\t\t\t\t\ti = attrs.length;\n\t\t\t\t\t\twhile (i--) {\n\n\t\t\t\t\t\t\t// Support: IE 11 only\n\t\t\t\t\t\t\t// The attrs elements can be null (trac-14894)\n\t\t\t\t\t\t\tif (attrs[i]) {\n\t\t\t\t\t\t\t\tname = attrs[i].name;\n\t\t\t\t\t\t\t\tif (name.indexOf(\"data-\") === 0) {\n\t\t\t\t\t\t\t\t\tname = camelCase(name.slice(5));\n\t\t\t\t\t\t\t\t\tdataAttr(elem, name, data[name]);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdataPriv.set(elem, \"hasDataAttrs\", true);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn data;\n\t\t\t}\n\n\t\t\t// Sets multiple values\n\t\t\tif (typeof key === \"object\") {\n\t\t\t\treturn this.each(function () {\n\t\t\t\t\tdataUser.set(this, key);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn access(this, function (value) {\n\t\t\t\tvar data;\n\n\t\t\t\t// The calling jQuery object (element matches) is not empty\n\t\t\t\t// (and therefore has an element appears at this[ 0 ]) and the\n\t\t\t\t// `value` parameter was not undefined. An empty jQuery object\n\t\t\t\t// will result in `undefined` for elem = this[ 0 ] which will\n\t\t\t\t// throw an exception if an attempt to read a data cache is made.\n\t\t\t\tif (elem && value === undefined) {\n\n\t\t\t\t\t// Attempt to get data from the cache\n\t\t\t\t\t// The key will always be camelCased in Data\n\t\t\t\t\tdata = dataUser.get(elem, key);\n\t\t\t\t\tif (data !== undefined) {\n\t\t\t\t\t\treturn data;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Attempt to \"discover\" the data in\n\t\t\t\t\t// HTML5 custom data-* attrs\n\t\t\t\t\tdata = dataAttr(elem, key);\n\t\t\t\t\tif (data !== undefined) {\n\t\t\t\t\t\treturn data;\n\t\t\t\t\t}\n\n\t\t\t\t\t// We tried really hard, but the data doesn't exist.\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Set the data...\n\t\t\t\tthis.each(function () {\n\n\t\t\t\t\t// We always store the camelCased key\n\t\t\t\t\tdataUser.set(this, key, value);\n\t\t\t\t});\n\t\t\t}, null, value, arguments.length > 1, null, true);\n\t\t},\n\n\t\tremoveData: function (key) {\n\t\t\treturn this.each(function () {\n\t\t\t\tdataUser.remove(this, key);\n\t\t\t});\n\t\t}\n\t});\n\n\n\tjQuery.extend({\n\t\tqueue: function (elem, type, data) {\n\t\t\tvar queue;\n\n\t\t\tif (elem) {\n\t\t\t\ttype = (type || \"fx\") + \"queue\";\n\t\t\t\tqueue = dataPriv.get(elem, type);\n\n\t\t\t\t// Speed up dequeue by getting out quickly if this is just a lookup\n\t\t\t\tif (data) {\n\t\t\t\t\tif (!queue || Array.isArray(data)) {\n\t\t\t\t\t\tqueue = dataPriv.access(elem, type, jQuery.makeArray(data));\n\t\t\t\t\t} else {\n\t\t\t\t\t\tqueue.push(data);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn queue || [];\n\t\t\t}\n\t\t},\n\n\t\tdequeue: function (elem, type) {\n\t\t\ttype = type || \"fx\";\n\n\t\t\tvar queue = jQuery.queue(elem, type),\n\t\t\t\tstartLength = queue.length,\n\t\t\t\tfn = queue.shift(),\n\t\t\t\thooks = jQuery._queueHooks(elem, type),\n\t\t\t\tnext = function () {\n\t\t\t\t\tjQuery.dequeue(elem, type);\n\t\t\t\t};\n\n\t\t\t// If the fx queue is dequeued, always remove the progress sentinel\n\t\t\tif (fn === \"inprogress\") {\n\t\t\t\tfn = queue.shift();\n\t\t\t\tstartLength--;\n\t\t\t}\n\n\t\t\tif (fn) {\n\n\t\t\t\t// Add a progress sentinel to prevent the fx queue from being\n\t\t\t\t// automatically dequeued\n\t\t\t\tif (type === \"fx\") {\n\t\t\t\t\tqueue.unshift(\"inprogress\");\n\t\t\t\t}\n\n\t\t\t\t// Clear up the last queue stop function\n\t\t\t\tdelete hooks.stop;\n\t\t\t\tfn.call(elem, next, hooks);\n\t\t\t}\n\n\t\t\tif (!startLength && hooks) {\n\t\t\t\thooks.empty.fire();\n\t\t\t}\n\t\t},\n\n\t\t// Not public - generate a queueHooks object, or return the current one\n\t\t_queueHooks: function (elem, type) {\n\t\t\tvar key = type + \"queueHooks\";\n\t\t\treturn dataPriv.get(elem, key) || dataPriv.access(elem, key, {\n\t\t\t\tempty: jQuery.Callbacks(\"once memory\").add(function () {\n\t\t\t\t\tdataPriv.remove(elem, [type + \"queue\", key]);\n\t\t\t\t})\n\t\t\t});\n\t\t}\n\t});\n\n\tjQuery.fn.extend({\n\t\tqueue: function (type, data) {\n\t\t\tvar setter = 2;\n\n\t\t\tif (typeof type !== \"string\") {\n\t\t\t\tdata = type;\n\t\t\t\ttype = \"fx\";\n\t\t\t\tsetter--;\n\t\t\t}\n\n\t\t\tif (arguments.length < setter) {\n\t\t\t\treturn jQuery.queue(this[0], type);\n\t\t\t}\n\n\t\t\treturn data === undefined ?\n\t\t\t\tthis :\n\t\t\t\tthis.each(function () {\n\t\t\t\t\tvar queue = jQuery.queue(this, type, data);\n\n\t\t\t\t\t// Ensure a hooks for this queue\n\t\t\t\t\tjQuery._queueHooks(this, type);\n\n\t\t\t\t\tif (type === \"fx\" && queue[0] !== \"inprogress\") {\n\t\t\t\t\t\tjQuery.dequeue(this, type);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t},\n\t\tdequeue: function (type) {\n\t\t\treturn this.each(function () {\n\t\t\t\tjQuery.dequeue(this, type);\n\t\t\t});\n\t\t},\n\t\tclearQueue: function (type) {\n\t\t\treturn this.queue(type || \"fx\", []);\n\t\t},\n\n\t\t// Get a promise resolved when queues of a certain type\n\t\t// are emptied (fx is the type by default)\n\t\tpromise: function (type, obj) {\n\t\t\tvar tmp,\n\t\t\t\tcount = 1,\n\t\t\t\tdefer = jQuery.Deferred(),\n\t\t\t\telements = this,\n\t\t\t\ti = this.length,\n\t\t\t\tresolve = function () {\n\t\t\t\t\tif (!(--count)) {\n\t\t\t\t\t\tdefer.resolveWith(elements, [elements]);\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\tif (typeof type !== \"string\") {\n\t\t\t\tobj = type;\n\t\t\t\ttype = undefined;\n\t\t\t}\n\t\t\ttype = type || \"fx\";\n\n\t\t\twhile (i--) {\n\t\t\t\ttmp = dataPriv.get(elements[i], type + \"queueHooks\");\n\t\t\t\tif (tmp && tmp.empty) {\n\t\t\t\t\tcount++;\n\t\t\t\t\ttmp.empty.add(resolve);\n\t\t\t\t}\n\t\t\t}\n\t\t\tresolve();\n\t\t\treturn defer.promise(obj);\n\t\t}\n\t});\n\tvar pnum = (/[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/).source;\n\n\tvar rcssNum = new RegExp(\"^(?:([+-])=|)(\" + pnum + \")([a-z%]*)$\", \"i\");\n\n\n\tvar cssExpand = [\"Top\", \"Right\", \"Bottom\", \"Left\"];\n\n\tvar documentElement = document.documentElement;\n\n\n\n\tvar isAttached = function (elem) {\n\t\treturn jQuery.contains(elem.ownerDocument, elem);\n\t},\n\t\tcomposed = { composed: true };\n\n\t// Support: IE 9 - 11+, Edge 12 - 18+, iOS 10.0 - 10.2 only\n\t// Check attachment across shadow DOM boundaries when possible (gh-3504)\n\t// Support: iOS 10.0-10.2 only\n\t// Early iOS 10 versions support `attachShadow` but not `getRootNode`,\n\t// leading to errors. We need to check for `getRootNode`.\n\tif (documentElement.getRootNode) {\n\t\tisAttached = function (elem) {\n\t\t\treturn jQuery.contains(elem.ownerDocument, elem) ||\n\t\t\t\telem.getRootNode(composed) === elem.ownerDocument;\n\t\t};\n\t}\n\tvar isHiddenWithinTree = function (elem, el) {\n\n\t\t// isHiddenWithinTree might be called from jQuery#filter function;\n\t\t// in that case, element will be second argument\n\t\telem = el || elem;\n\n\t\t// Inline style trumps all\n\t\treturn elem.style.display === \"none\" ||\n\t\t\telem.style.display === \"\" &&\n\n\t\t\t// Otherwise, check computed style\n\t\t\t// Support: Firefox <=43 - 45\n\t\t\t// Disconnected elements can have computed display: none, so first confirm that elem is\n\t\t\t// in the document.\n\t\t\tisAttached(elem) &&\n\n\t\t\tjQuery.css(elem, \"display\") === \"none\";\n\t};\n\n\n\n\tfunction adjustCSS(elem, prop, valueParts, tween) {\n\t\tvar adjusted, scale,\n\t\t\tmaxIterations = 20,\n\t\t\tcurrentValue = tween ?\n\t\t\t\tfunction () {\n\t\t\t\t\treturn tween.cur();\n\t\t\t\t} :\n\t\t\t\tfunction () {\n\t\t\t\t\treturn jQuery.css(elem, prop, \"\");\n\t\t\t\t},\n\t\t\tinitial = currentValue(),\n\t\t\tunit = valueParts && valueParts[3] || (jQuery.cssNumber[prop] ? \"\" : \"px\"),\n\n\t\t\t// Starting value computation is required for potential unit mismatches\n\t\t\tinitialInUnit = elem.nodeType &&\n\t\t\t\t(jQuery.cssNumber[prop] || unit !== \"px\" && +initial) &&\n\t\t\t\trcssNum.exec(jQuery.css(elem, prop));\n\n\t\tif (initialInUnit && initialInUnit[3] !== unit) {\n\n\t\t\t// Support: Firefox <=54\n\t\t\t// Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144)\n\t\t\tinitial = initial / 2;\n\n\t\t\t// Trust units reported by jQuery.css\n\t\t\tunit = unit || initialInUnit[3];\n\n\t\t\t// Iteratively approximate from a nonzero starting point\n\t\t\tinitialInUnit = +initial || 1;\n\n\t\t\twhile (maxIterations--) {\n\n\t\t\t\t// Evaluate and update our best guess (doubling guesses that zero out).\n\t\t\t\t// Finish if the scale equals or crosses 1 (making the old*new product non-positive).\n\t\t\t\tjQuery.style(elem, prop, initialInUnit + unit);\n\t\t\t\tif ((1 - scale) * (1 - (scale = currentValue() / initial || 0.5)) <= 0) {\n\t\t\t\t\tmaxIterations = 0;\n\t\t\t\t}\n\t\t\t\tinitialInUnit = initialInUnit / scale;\n\n\t\t\t}\n\n\t\t\tinitialInUnit = initialInUnit * 2;\n\t\t\tjQuery.style(elem, prop, initialInUnit + unit);\n\n\t\t\t// Make sure we update the tween properties later on\n\t\t\tvalueParts = valueParts || [];\n\t\t}\n\n\t\tif (valueParts) {\n\t\t\tinitialInUnit = +initialInUnit || +initial || 0;\n\n\t\t\t// Apply relative offset (+=/-=) if specified\n\t\t\tadjusted = valueParts[1] ?\n\t\t\t\tinitialInUnit + (valueParts[1] + 1) * valueParts[2] :\n\t\t\t\t+valueParts[2];\n\t\t\tif (tween) {\n\t\t\t\ttween.unit = unit;\n\t\t\t\ttween.start = initialInUnit;\n\t\t\t\ttween.end = adjusted;\n\t\t\t}\n\t\t}\n\t\treturn adjusted;\n\t}\n\n\n\tvar defaultDisplayMap = {};\n\n\tfunction getDefaultDisplay(elem) {\n\t\tvar temp,\n\t\t\tdoc = elem.ownerDocument,\n\t\t\tnodeName = elem.nodeName,\n\t\t\tdisplay = defaultDisplayMap[nodeName];\n\n\t\tif (display) {\n\t\t\treturn display;\n\t\t}\n\n\t\ttemp = doc.body.appendChild(doc.createElement(nodeName));\n\t\tdisplay = jQuery.css(temp, \"display\");\n\n\t\ttemp.parentNode.removeChild(temp);\n\n\t\tif (display === \"none\") {\n\t\t\tdisplay = \"block\";\n\t\t}\n\t\tdefaultDisplayMap[nodeName] = display;\n\n\t\treturn display;\n\t}\n\n\tfunction showHide(elements, show) {\n\t\tvar display, elem,\n\t\t\tvalues = [],\n\t\t\tindex = 0,\n\t\t\tlength = elements.length;\n\n\t\t// Determine new display value for elements that need to change\n\t\tfor (; index < length; index++) {\n\t\t\telem = elements[index];\n\t\t\tif (!elem.style) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tdisplay = elem.style.display;\n\t\t\tif (show) {\n\n\t\t\t\t// Since we force visibility upon cascade-hidden elements, an immediate (and slow)\n\t\t\t\t// check is required in this first loop unless we have a nonempty display value (either\n\t\t\t\t// inline or about-to-be-restored)\n\t\t\t\tif (display === \"none\") {\n\t\t\t\t\tvalues[index] = dataPriv.get(elem, \"display\") || null;\n\t\t\t\t\tif (!values[index]) {\n\t\t\t\t\t\telem.style.display = \"\";\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (elem.style.display === \"\" && isHiddenWithinTree(elem)) {\n\t\t\t\t\tvalues[index] = getDefaultDisplay(elem);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (display !== \"none\") {\n\t\t\t\t\tvalues[index] = \"none\";\n\n\t\t\t\t\t// Remember what we're overwriting\n\t\t\t\t\tdataPriv.set(elem, \"display\", display);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Set the display of the elements in a second loop to avoid constant reflow\n\t\tfor (index = 0; index < length; index++) {\n\t\t\tif (values[index] != null) {\n\t\t\t\telements[index].style.display = values[index];\n\t\t\t}\n\t\t}\n\n\t\treturn elements;\n\t}\n\n\tjQuery.fn.extend({\n\t\tshow: function () {\n\t\t\treturn showHide(this, true);\n\t\t},\n\t\thide: function () {\n\t\t\treturn showHide(this);\n\t\t},\n\t\ttoggle: function (state) {\n\t\t\tif (typeof state === \"boolean\") {\n\t\t\t\treturn state ? this.show() : this.hide();\n\t\t\t}\n\n\t\t\treturn this.each(function () {\n\t\t\t\tif (isHiddenWithinTree(this)) {\n\t\t\t\t\tjQuery(this).show();\n\t\t\t\t} else {\n\t\t\t\t\tjQuery(this).hide();\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t});\n\tvar rcheckableType = (/^(?:checkbox|radio)$/i);\n\n\tvar rtagName = (/<([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]*)/i);\n\n\tvar rscriptType = (/^$|^module$|\\/(?:java|ecma)script/i);\n\n\n\n\t(function () {\n\t\tvar fragment = document.createDocumentFragment(),\n\t\t\tdiv = fragment.appendChild(document.createElement(\"div\")),\n\t\t\tinput = document.createElement(\"input\");\n\n\t\t// Support: Android 4.0 - 4.3 only\n\t\t// Check state lost if the name is set (trac-11217)\n\t\t// Support: Windows Web Apps (WWA)\n\t\t// `name` and `type` must use .setAttribute for WWA (trac-14901)\n\t\tinput.setAttribute(\"type\", \"radio\");\n\t\tinput.setAttribute(\"checked\", \"checked\");\n\t\tinput.setAttribute(\"name\", \"t\");\n\n\t\tdiv.appendChild(input);\n\n\t\t// Support: Android <=4.1 only\n\t\t// Older WebKit doesn't clone checked state correctly in fragments\n\t\tsupport.checkClone = div.cloneNode(true).cloneNode(true).lastChild.checked;\n\n\t\t// Support: IE <=11 only\n\t\t// Make sure textarea (and checkbox) defaultValue is properly cloned\n\t\tdiv.innerHTML = \"<textarea>x</textarea>\";\n\t\tsupport.noCloneChecked = !!div.cloneNode(true).lastChild.defaultValue;\n\n\t\t// Support: IE <=9 only\n\t\t// IE <=9 replaces <option> tags with their contents when inserted outside of\n\t\t// the select element.\n\t\tdiv.innerHTML = \"<option></option>\";\n\t\tsupport.option = !!div.lastChild;\n\t})();\n\n\n\t// We have to close these tags to support XHTML (trac-13200)\n\tvar wrapMap = {\n\n\t\t// XHTML parsers do not magically insert elements in the\n\t\t// same way that tag soup parsers do. So we cannot shorten\n\t\t// this by omitting <tbody> or other required elements.\n\t\tthead: [1, \"<table>\", \"</table>\"],\n\t\tcol: [2, \"<table><colgroup>\", \"</colgroup></table>\"],\n\t\ttr: [2, \"<table><tbody>\", \"</tbody></table>\"],\n\t\ttd: [3, \"<table><tbody><tr>\", \"</tr></tbody></table>\"],\n\n\t\t_default: [0, \"\", \"\"]\n\t};\n\n\twrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;\n\twrapMap.th = wrapMap.td;\n\n\t// Support: IE <=9 only\n\tif (!support.option) {\n\t\twrapMap.optgroup = wrapMap.option = [1, \"<select multiple='multiple'>\", \"</select>\"];\n\t}\n\n\n\tfunction getAll(context, tag) {\n\n\t\t// Support: IE <=9 - 11 only\n\t\t// Use typeof to avoid zero-argument method invocation on host objects (trac-15151)\n\t\tvar ret;\n\n\t\tif (typeof context.getElementsByTagName !== \"undefined\") {\n\t\t\tret = context.getElementsByTagName(tag || \"*\");\n\n\t\t} else if (typeof context.querySelectorAll !== \"undefined\") {\n\t\t\tret = context.querySelectorAll(tag || \"*\");\n\n\t\t} else {\n\t\t\tret = [];\n\t\t}\n\n\t\tif (tag === undefined || tag && nodeName(context, tag)) {\n\t\t\treturn jQuery.merge([context], ret);\n\t\t}\n\n\t\treturn ret;\n\t}\n\n\n\t// Mark scripts as having already been evaluated\n\tfunction setGlobalEval(elems, refElements) {\n\t\tvar i = 0,\n\t\t\tl = elems.length;\n\n\t\tfor (; i < l; i++) {\n\t\t\tdataPriv.set(\n\t\t\t\telems[i],\n\t\t\t\t\"globalEval\",\n\t\t\t\t!refElements || dataPriv.get(refElements[i], \"globalEval\")\n\t\t\t);\n\t\t}\n\t}\n\n\n\tvar rhtml = /<|&#?\\w+;/;\n\n\tfunction buildFragment(elems, context, scripts, selection, ignored) {\n\t\tvar elem, tmp, tag, wrap, attached, j,\n\t\t\tfragment = context.createDocumentFragment(),\n\t\t\tnodes = [],\n\t\t\ti = 0,\n\t\t\tl = elems.length;\n\n\t\tfor (; i < l; i++) {\n\t\t\telem = elems[i];\n\n\t\t\tif (elem || elem === 0) {\n\n\t\t\t\t// Add nodes directly\n\t\t\t\tif (toType(elem) === \"object\") {\n\n\t\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\t\tjQuery.merge(nodes, elem.nodeType ? [elem] : elem);\n\n\t\t\t\t\t// Convert non-html into a text node\n\t\t\t\t} else if (!rhtml.test(elem)) {\n\t\t\t\t\tnodes.push(context.createTextNode(elem));\n\n\t\t\t\t\t// Convert html into DOM nodes\n\t\t\t\t} else {\n\t\t\t\t\ttmp = tmp || fragment.appendChild(context.createElement(\"div\"));\n\n\t\t\t\t\t// Deserialize a standard representation\n\t\t\t\t\ttag = (rtagName.exec(elem) || [\"\", \"\"])[1].toLowerCase();\n\t\t\t\t\twrap = wrapMap[tag] || wrapMap._default;\n\t\t\t\t\ttmp.innerHTML = wrap[1] + jQuery.htmlPrefilter(elem) + wrap[2];\n\n\t\t\t\t\t// Descend through wrappers to the right content\n\t\t\t\t\tj = wrap[0];\n\t\t\t\t\twhile (j--) {\n\t\t\t\t\t\ttmp = tmp.lastChild;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\t\tjQuery.merge(nodes, tmp.childNodes);\n\n\t\t\t\t\t// Remember the top-level container\n\t\t\t\t\ttmp = fragment.firstChild;\n\n\t\t\t\t\t// Ensure the created nodes are orphaned (trac-12392)\n\t\t\t\t\ttmp.textContent = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Remove wrapper from fragment\n\t\tfragment.textContent = \"\";\n\n\t\ti = 0;\n\t\twhile ((elem = nodes[i++])) {\n\n\t\t\t// Skip elements already in the context collection (trac-4087)\n\t\t\tif (selection && jQuery.inArray(elem, selection) > -1) {\n\t\t\t\tif (ignored) {\n\t\t\t\t\tignored.push(elem);\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tattached = isAttached(elem);\n\n\t\t\t// Append to fragment\n\t\t\ttmp = getAll(fragment.appendChild(elem), \"script\");\n\n\t\t\t// Preserve script evaluation history\n\t\t\tif (attached) {\n\t\t\t\tsetGlobalEval(tmp);\n\t\t\t}\n\n\t\t\t// Capture executables\n\t\t\tif (scripts) {\n\t\t\t\tj = 0;\n\t\t\t\twhile ((elem = tmp[j++])) {\n\t\t\t\t\tif (rscriptType.test(elem.type || \"\")) {\n\t\t\t\t\t\tscripts.push(elem);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn fragment;\n\t}\n\n\n\tvar rtypenamespace = /^([^.]*)(?:\\.(.+)|)/;\n\n\tfunction returnTrue() {\n\t\treturn true;\n\t}\n\n\tfunction returnFalse() {\n\t\treturn false;\n\t}\n\n\tfunction on(elem, types, selector, data, fn, one) {\n\t\tvar origFn, type;\n\n\t\t// Types can be a map of types/handlers\n\t\tif (typeof types === \"object\") {\n\n\t\t\t// ( types-Object, selector, data )\n\t\t\tif (typeof selector !== \"string\") {\n\n\t\t\t\t// ( types-Object, data )\n\t\t\t\tdata = data || selector;\n\t\t\t\tselector = undefined;\n\t\t\t}\n\t\t\tfor (type in types) {\n\t\t\t\ton(elem, type, selector, data, types[type], one);\n\t\t\t}\n\t\t\treturn elem;\n\t\t}\n\n\t\tif (data == null && fn == null) {\n\n\t\t\t// ( types, fn )\n\t\t\tfn = selector;\n\t\t\tdata = selector = undefined;\n\t\t} else if (fn == null) {\n\t\t\tif (typeof selector === \"string\") {\n\n\t\t\t\t// ( types, selector, fn )\n\t\t\t\tfn = data;\n\t\t\t\tdata = undefined;\n\t\t\t} else {\n\n\t\t\t\t// ( types, data, fn )\n\t\t\t\tfn = data;\n\t\t\t\tdata = selector;\n\t\t\t\tselector = undefined;\n\t\t\t}\n\t\t}\n\t\tif (fn === false) {\n\t\t\tfn = returnFalse;\n\t\t} else if (!fn) {\n\t\t\treturn elem;\n\t\t}\n\n\t\tif (one === 1) {\n\t\t\torigFn = fn;\n\t\t\tfn = function (event) {\n\n\t\t\t\t// Can use an empty set, since event contains the info\n\t\t\t\tjQuery().off(event);\n\t\t\t\treturn origFn.apply(this, arguments);\n\t\t\t};\n\n\t\t\t// Use same guid so caller can remove using origFn\n\t\t\tfn.guid = origFn.guid || (origFn.guid = jQuery.guid++);\n\t\t}\n\t\treturn elem.each(function () {\n\t\t\tjQuery.event.add(this, types, fn, data, selector);\n\t\t});\n\t}\n\n\t/*\n\t * Helper functions for managing events -- not part of the public interface.\n\t * Props to Dean Edwards' addEvent library for many of the ideas.\n\t */\n\tjQuery.event = {\n\n\t\tglobal: {},\n\n\t\tadd: function (elem, types, handler, data, selector) {\n\n\t\t\tvar handleObjIn, eventHandle, tmp,\n\t\t\t\tevents, t, handleObj,\n\t\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\t\telemData = dataPriv.get(elem);\n\n\t\t\t// Only attach events to objects that accept data\n\t\t\tif (!acceptData(elem)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Caller can pass in an object of custom data in lieu of the handler\n\t\t\tif (handler.handler) {\n\t\t\t\thandleObjIn = handler;\n\t\t\t\thandler = handleObjIn.handler;\n\t\t\t\tselector = handleObjIn.selector;\n\t\t\t}\n\n\t\t\t// Ensure that invalid selectors throw exceptions at attach time\n\t\t\t// Evaluate against documentElement in case elem is a non-element node (e.g., document)\n\t\t\tif (selector) {\n\t\t\t\tjQuery.find.matchesSelector(documentElement, selector);\n\t\t\t}\n\n\t\t\t// Make sure that the handler has a unique ID, used to find/remove it later\n\t\t\tif (!handler.guid) {\n\t\t\t\thandler.guid = jQuery.guid++;\n\t\t\t}\n\n\t\t\t// Init the element's event structure and main handler, if this is the first\n\t\t\tif (!(events = elemData.events)) {\n\t\t\t\tevents = elemData.events = Object.create(null);\n\t\t\t}\n\t\t\tif (!(eventHandle = elemData.handle)) {\n\t\t\t\teventHandle = elemData.handle = function (e) {\n\n\t\t\t\t\t// Discard the second event of a jQuery.event.trigger() and\n\t\t\t\t\t// when an event is called after a page has unloaded\n\t\t\t\t\treturn typeof jQuery !== \"undefined\" && jQuery.event.triggered !== e.type ?\n\t\t\t\t\t\tjQuery.event.dispatch.apply(elem, arguments) : undefined;\n\t\t\t\t};\n\t\t\t}\n\n\t\t\t// Handle multiple events separated by a space\n\t\t\ttypes = (types || \"\").match(rnothtmlwhite) || [\"\"];\n\t\t\tt = types.length;\n\t\t\twhile (t--) {\n\t\t\t\ttmp = rtypenamespace.exec(types[t]) || [];\n\t\t\t\ttype = origType = tmp[1];\n\t\t\t\tnamespaces = (tmp[2] || \"\").split(\".\").sort();\n\n\t\t\t\t// There *must* be a type, no attaching namespace-only handlers\n\t\t\t\tif (!type) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// If event changes its type, use the special event handlers for the changed type\n\t\t\t\tspecial = jQuery.event.special[type] || {};\n\n\t\t\t\t// If selector defined, determine special event api type, otherwise given type\n\t\t\t\ttype = (selector ? special.delegateType : special.bindType) || type;\n\n\t\t\t\t// Update special based on newly reset type\n\t\t\t\tspecial = jQuery.event.special[type] || {};\n\n\t\t\t\t// handleObj is passed to all event handlers\n\t\t\t\thandleObj = jQuery.extend({\n\t\t\t\t\ttype: type,\n\t\t\t\t\torigType: origType,\n\t\t\t\t\tdata: data,\n\t\t\t\t\thandler: handler,\n\t\t\t\t\tguid: handler.guid,\n\t\t\t\t\tselector: selector,\n\t\t\t\t\tneedsContext: selector && jQuery.expr.match.needsContext.test(selector),\n\t\t\t\t\tnamespace: namespaces.join(\".\")\n\t\t\t\t}, handleObjIn);\n\n\t\t\t\t// Init the event handler queue if we're the first\n\t\t\t\tif (!(handlers = events[type])) {\n\t\t\t\t\thandlers = events[type] = [];\n\t\t\t\t\thandlers.delegateCount = 0;\n\n\t\t\t\t\t// Only use addEventListener if the special events handler returns false\n\t\t\t\t\tif (!special.setup ||\n\t\t\t\t\t\tspecial.setup.call(elem, data, namespaces, eventHandle) === false) {\n\n\t\t\t\t\t\tif (elem.addEventListener) {\n\t\t\t\t\t\t\telem.addEventListener(type, eventHandle);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (special.add) {\n\t\t\t\t\tspecial.add.call(elem, handleObj);\n\n\t\t\t\t\tif (!handleObj.handler.guid) {\n\t\t\t\t\t\thandleObj.handler.guid = handler.guid;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Add to the element's handler list, delegates in front\n\t\t\t\tif (selector) {\n\t\t\t\t\thandlers.splice(handlers.delegateCount++, 0, handleObj);\n\t\t\t\t} else {\n\t\t\t\t\thandlers.push(handleObj);\n\t\t\t\t}\n\n\t\t\t\t// Keep track of which events have ever been used, for event optimization\n\t\t\t\tjQuery.event.global[type] = true;\n\t\t\t}\n\n\t\t},\n\n\t\t// Detach an event or set of events from an element\n\t\tremove: function (elem, types, handler, selector, mappedTypes) {\n\n\t\t\tvar j, origCount, tmp,\n\t\t\t\tevents, t, handleObj,\n\t\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\t\telemData = dataPriv.hasData(elem) && dataPriv.get(elem);\n\n\t\t\tif (!elemData || !(events = elemData.events)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Once for each type.namespace in types; type may be omitted\n\t\t\ttypes = (types || \"\").match(rnothtmlwhite) || [\"\"];\n\t\t\tt = types.length;\n\t\t\twhile (t--) {\n\t\t\t\ttmp = rtypenamespace.exec(types[t]) || [];\n\t\t\t\ttype = origType = tmp[1];\n\t\t\t\tnamespaces = (tmp[2] || \"\").split(\".\").sort();\n\n\t\t\t\t// Unbind all events (on this namespace, if provided) for the element\n\t\t\t\tif (!type) {\n\t\t\t\t\tfor (type in events) {\n\t\t\t\t\t\tjQuery.event.remove(elem, type + types[t], handler, selector, true);\n\t\t\t\t\t}\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tspecial = jQuery.event.special[type] || {};\n\t\t\t\ttype = (selector ? special.delegateType : special.bindType) || type;\n\t\t\t\thandlers = events[type] || [];\n\t\t\t\ttmp = tmp[2] &&\n\t\t\t\t\tnew RegExp(\"(^|\\\\.)\" + namespaces.join(\"\\\\.(?:.*\\\\.|)\") + \"(\\\\.|$)\");\n\n\t\t\t\t// Remove matching events\n\t\t\t\torigCount = j = handlers.length;\n\t\t\t\twhile (j--) {\n\t\t\t\t\thandleObj = handlers[j];\n\n\t\t\t\t\tif ((mappedTypes || origType === handleObj.origType) &&\n\t\t\t\t\t\t(!handler || handler.guid === handleObj.guid) &&\n\t\t\t\t\t\t(!tmp || tmp.test(handleObj.namespace)) &&\n\t\t\t\t\t\t(!selector || selector === handleObj.selector ||\n\t\t\t\t\t\t\tselector === \"**\" && handleObj.selector)) {\n\t\t\t\t\t\thandlers.splice(j, 1);\n\n\t\t\t\t\t\tif (handleObj.selector) {\n\t\t\t\t\t\t\thandlers.delegateCount--;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (special.remove) {\n\t\t\t\t\t\t\tspecial.remove.call(elem, handleObj);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Remove generic event handler if we removed something and no more handlers exist\n\t\t\t\t// (avoids potential for endless recursion during removal of special event handlers)\n\t\t\t\tif (origCount && !handlers.length) {\n\t\t\t\t\tif (!special.teardown ||\n\t\t\t\t\t\tspecial.teardown.call(elem, namespaces, elemData.handle) === false) {\n\n\t\t\t\t\t\tjQuery.removeEvent(elem, type, elemData.handle);\n\t\t\t\t\t}\n\n\t\t\t\t\tdelete events[type];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove data and the expando if it's no longer used\n\t\t\tif (jQuery.isEmptyObject(events)) {\n\t\t\t\tdataPriv.remove(elem, \"handle events\");\n\t\t\t}\n\t\t},\n\n\t\tdispatch: function (nativeEvent) {\n\n\t\t\tvar i, j, ret, matched, handleObj, handlerQueue,\n\t\t\t\targs = new Array(arguments.length),\n\n\t\t\t\t// Make a writable jQuery.Event from the native event object\n\t\t\t\tevent = jQuery.event.fix(nativeEvent),\n\n\t\t\t\thandlers = (\n\t\t\t\t\tdataPriv.get(this, \"events\") || Object.create(null)\n\t\t\t\t)[event.type] || [],\n\t\t\t\tspecial = jQuery.event.special[event.type] || {};\n\n\t\t\t// Use the fix-ed jQuery.Event rather than the (read-only) native event\n\t\t\targs[0] = event;\n\n\t\t\tfor (i = 1; i < arguments.length; i++) {\n\t\t\t\targs[i] = arguments[i];\n\t\t\t}\n\n\t\t\tevent.delegateTarget = this;\n\n\t\t\t// Call the preDispatch hook for the mapped type, and let it bail if desired\n\t\t\tif (special.preDispatch && special.preDispatch.call(this, event) === false) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Determine handlers\n\t\t\thandlerQueue = jQuery.event.handlers.call(this, event, handlers);\n\n\t\t\t// Run delegates first; they may want to stop propagation beneath us\n\t\t\ti = 0;\n\t\t\twhile ((matched = handlerQueue[i++]) && !event.isPropagationStopped()) {\n\t\t\t\tevent.currentTarget = matched.elem;\n\n\t\t\t\tj = 0;\n\t\t\t\twhile ((handleObj = matched.handlers[j++]) &&\n\t\t\t\t\t!event.isImmediatePropagationStopped()) {\n\n\t\t\t\t\t// If the event is namespaced, then each handler is only invoked if it is\n\t\t\t\t\t// specially universal or its namespaces are a superset of the event's.\n\t\t\t\t\tif (!event.rnamespace || handleObj.namespace === false ||\n\t\t\t\t\t\tevent.rnamespace.test(handleObj.namespace)) {\n\n\t\t\t\t\t\tevent.handleObj = handleObj;\n\t\t\t\t\t\tevent.data = handleObj.data;\n\n\t\t\t\t\t\tret = ((jQuery.event.special[handleObj.origType] || {}).handle ||\n\t\t\t\t\t\t\thandleObj.handler).apply(matched.elem, args);\n\n\t\t\t\t\t\tif (ret !== undefined) {\n\t\t\t\t\t\t\tif ((event.result = ret) === false) {\n\t\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Call the postDispatch hook for the mapped type\n\t\t\tif (special.postDispatch) {\n\t\t\t\tspecial.postDispatch.call(this, event);\n\t\t\t}\n\n\t\t\treturn event.result;\n\t\t},\n\n\t\thandlers: function (event, handlers) {\n\t\t\tvar i, handleObj, sel, matchedHandlers, matchedSelectors,\n\t\t\t\thandlerQueue = [],\n\t\t\t\tdelegateCount = handlers.delegateCount,\n\t\t\t\tcur = event.target;\n\n\t\t\t// Find delegate handlers\n\t\t\tif (delegateCount &&\n\n\t\t\t\t// Support: IE <=9\n\t\t\t\t// Black-hole SVG <use> instance trees (trac-13180)\n\t\t\t\tcur.nodeType &&\n\n\t\t\t\t// Support: Firefox <=42\n\t\t\t\t// Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861)\n\t\t\t\t// https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click\n\t\t\t\t// Support: IE 11 only\n\t\t\t\t// ...but not arrow key \"clicks\" of radio inputs, which can have `button` -1 (gh-2343)\n\t\t\t\t!(event.type === \"click\" && event.button >= 1)) {\n\n\t\t\t\tfor (; cur !== this; cur = cur.parentNode || this) {\n\n\t\t\t\t\t// Don't check non-elements (trac-13208)\n\t\t\t\t\t// Don't process clicks on disabled elements (trac-6911, trac-8165, trac-11382, trac-11764)\n\t\t\t\t\tif (cur.nodeType === 1 && !(event.type === \"click\" && cur.disabled === true)) {\n\t\t\t\t\t\tmatchedHandlers = [];\n\t\t\t\t\t\tmatchedSelectors = {};\n\t\t\t\t\t\tfor (i = 0; i < delegateCount; i++) {\n\t\t\t\t\t\t\thandleObj = handlers[i];\n\n\t\t\t\t\t\t\t// Don't conflict with Object.prototype properties (trac-13203)\n\t\t\t\t\t\t\tsel = handleObj.selector + \" \";\n\n\t\t\t\t\t\t\tif (matchedSelectors[sel] === undefined) {\n\t\t\t\t\t\t\t\tmatchedSelectors[sel] = handleObj.needsContext ?\n\t\t\t\t\t\t\t\t\tjQuery(sel, this).index(cur) > -1 :\n\t\t\t\t\t\t\t\t\tjQuery.find(sel, this, null, [cur]).length;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (matchedSelectors[sel]) {\n\t\t\t\t\t\t\t\tmatchedHandlers.push(handleObj);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (matchedHandlers.length) {\n\t\t\t\t\t\t\thandlerQueue.push({ elem: cur, handlers: matchedHandlers });\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Add the remaining (directly-bound) handlers\n\t\t\tcur = this;\n\t\t\tif (delegateCount < handlers.length) {\n\t\t\t\thandlerQueue.push({ elem: cur, handlers: handlers.slice(delegateCount) });\n\t\t\t}\n\n\t\t\treturn handlerQueue;\n\t\t},\n\n\t\taddProp: function (name, hook) {\n\t\t\tObject.defineProperty(jQuery.Event.prototype, name, {\n\t\t\t\tenumerable: true,\n\t\t\t\tconfigurable: true,\n\n\t\t\t\tget: isFunction(hook) ?\n\t\t\t\t\tfunction () {\n\t\t\t\t\t\tif (this.originalEvent) {\n\t\t\t\t\t\t\treturn hook(this.originalEvent);\n\t\t\t\t\t\t}\n\t\t\t\t\t} :\n\t\t\t\t\tfunction () {\n\t\t\t\t\t\tif (this.originalEvent) {\n\t\t\t\t\t\t\treturn this.originalEvent[name];\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\n\t\t\t\tset: function (value) {\n\t\t\t\t\tObject.defineProperty(this, name, {\n\t\t\t\t\t\tenumerable: true,\n\t\t\t\t\t\tconfigurable: true,\n\t\t\t\t\t\twritable: true,\n\t\t\t\t\t\tvalue: value\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\tfix: function (originalEvent) {\n\t\t\treturn originalEvent[jQuery.expando] ?\n\t\t\t\toriginalEvent :\n\t\t\t\tnew jQuery.Event(originalEvent);\n\t\t},\n\n\t\tspecial: {\n\t\t\tload: {\n\n\t\t\t\t// Prevent triggered image.load events from bubbling to window.load\n\t\t\t\tnoBubble: true\n\t\t\t},\n\t\t\tclick: {\n\n\t\t\t\t// Utilize native event to ensure correct state for checkable inputs\n\t\t\t\tsetup: function (data) {\n\n\t\t\t\t\t// For mutual compressibility with _default, replace `this` access with a local var.\n\t\t\t\t\t// `|| data` is dead code meant only to preserve the variable through minification.\n\t\t\t\t\tvar el = this || data;\n\n\t\t\t\t\t// Claim the first handler\n\t\t\t\t\tif (rcheckableType.test(el.type) &&\n\t\t\t\t\t\tel.click && nodeName(el, \"input\")) {\n\n\t\t\t\t\t\t// dataPriv.set( el, \"click\", ... )\n\t\t\t\t\t\tleverageNative(el, \"click\", true);\n\t\t\t\t\t}\n\n\t\t\t\t\t// Return false to allow normal processing in the caller\n\t\t\t\t\treturn false;\n\t\t\t\t},\n\t\t\t\ttrigger: function (data) {\n\n\t\t\t\t\t// For mutual compressibility with _default, replace `this` access with a local var.\n\t\t\t\t\t// `|| data` is dead code meant only to preserve the variable through minification.\n\t\t\t\t\tvar el = this || data;\n\n\t\t\t\t\t// Force setup before triggering a click\n\t\t\t\t\tif (rcheckableType.test(el.type) &&\n\t\t\t\t\t\tel.click && nodeName(el, \"input\")) {\n\n\t\t\t\t\t\tleverageNative(el, \"click\");\n\t\t\t\t\t}\n\n\t\t\t\t\t// Return non-false to allow normal event-path propagation\n\t\t\t\t\treturn true;\n\t\t\t\t},\n\n\t\t\t\t// For cross-browser consistency, suppress native .click() on links\n\t\t\t\t// Also prevent it if we're currently inside a leveraged native-event stack\n\t\t\t\t_default: function (event) {\n\t\t\t\t\tvar target = event.target;\n\t\t\t\t\treturn rcheckableType.test(target.type) &&\n\t\t\t\t\t\ttarget.click && nodeName(target, \"input\") &&\n\t\t\t\t\t\tdataPriv.get(target, \"click\") ||\n\t\t\t\t\t\tnodeName(target, \"a\");\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tbeforeunload: {\n\t\t\t\tpostDispatch: function (event) {\n\n\t\t\t\t\t// Support: Firefox 20+\n\t\t\t\t\t// Firefox doesn't alert if the returnValue field is not set.\n\t\t\t\t\tif (event.result !== undefined && event.originalEvent) {\n\t\t\t\t\t\tevent.originalEvent.returnValue = event.result;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t// Ensure the presence of an event listener that handles manually-triggered\n\t// synthetic events by interrupting progress until reinvoked in response to\n\t// *native* events that it fires directly, ensuring that state changes have\n\t// already occurred before other listeners are invoked.\n\tfunction leverageNative(el, type, isSetup) {\n\n\t\t// Missing `isSetup` indicates a trigger call, which must force setup through jQuery.event.add\n\t\tif (!isSetup) {\n\t\t\tif (dataPriv.get(el, type) === undefined) {\n\t\t\t\tjQuery.event.add(el, type, returnTrue);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\t// Register the controller as a special universal handler for all event namespaces\n\t\tdataPriv.set(el, type, false);\n\t\tjQuery.event.add(el, type, {\n\t\t\tnamespace: false,\n\t\t\thandler: function (event) {\n\t\t\t\tvar result,\n\t\t\t\t\tsaved = dataPriv.get(this, type);\n\n\t\t\t\tif ((event.isTrigger & 1) && this[type]) {\n\n\t\t\t\t\t// Interrupt processing of the outer synthetic .trigger()ed event\n\t\t\t\t\tif (!saved) {\n\n\t\t\t\t\t\t// Store arguments for use when handling the inner native event\n\t\t\t\t\t\t// There will always be at least one argument (an event object), so this array\n\t\t\t\t\t\t// will not be confused with a leftover capture object.\n\t\t\t\t\t\tsaved = slice.call(arguments);\n\t\t\t\t\t\tdataPriv.set(this, type, saved);\n\n\t\t\t\t\t\t// Trigger the native event and capture its result\n\t\t\t\t\t\tthis[type]();\n\t\t\t\t\t\tresult = dataPriv.get(this, type);\n\t\t\t\t\t\tdataPriv.set(this, type, false);\n\n\t\t\t\t\t\tif (saved !== result) {\n\n\t\t\t\t\t\t\t// Cancel the outer synthetic event\n\t\t\t\t\t\t\tevent.stopImmediatePropagation();\n\t\t\t\t\t\t\tevent.preventDefault();\n\n\t\t\t\t\t\t\treturn result;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// If this is an inner synthetic event for an event with a bubbling surrogate\n\t\t\t\t\t\t// (focus or blur), assume that the surrogate already propagated from triggering\n\t\t\t\t\t\t// the native event and prevent that from happening again here.\n\t\t\t\t\t\t// This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the\n\t\t\t\t\t\t// bubbling surrogate propagates *after* the non-bubbling base), but that seems\n\t\t\t\t\t\t// less bad than duplication.\n\t\t\t\t\t} else if ((jQuery.event.special[type] || {}).delegateType) {\n\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t}\n\n\t\t\t\t\t// If this is a native event triggered above, everything is now in order\n\t\t\t\t\t// Fire an inner synthetic event with the original arguments\n\t\t\t\t} else if (saved) {\n\n\t\t\t\t\t// ...and capture the result\n\t\t\t\t\tdataPriv.set(this, type, jQuery.event.trigger(\n\t\t\t\t\t\tsaved[0],\n\t\t\t\t\t\tsaved.slice(1),\n\t\t\t\t\t\tthis\n\t\t\t\t\t));\n\n\t\t\t\t\t// Abort handling of the native event by all jQuery handlers while allowing\n\t\t\t\t\t// native handlers on the same element to run. On target, this is achieved\n\t\t\t\t\t// by stopping immediate propagation just on the jQuery event. However,\n\t\t\t\t\t// the native event is re-wrapped by a jQuery one on each level of the\n\t\t\t\t\t// propagation so the only way to stop it for jQuery is to stop it for\n\t\t\t\t\t// everyone via native `stopPropagation()`. This is not a problem for\n\t\t\t\t\t// focus/blur which don't bubble, but it does also stop click on checkboxes\n\t\t\t\t\t// and radios. We accept this limitation.\n\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\tevent.isImmediatePropagationStopped = returnTrue;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\tjQuery.removeEvent = function (elem, type, handle) {\n\n\t\t// This \"if\" is needed for plain objects\n\t\tif (elem.removeEventListener) {\n\t\t\telem.removeEventListener(type, handle);\n\t\t}\n\t};\n\n\tjQuery.Event = function (src, props) {\n\n\t\t// Allow instantiation without the 'new' keyword\n\t\tif (!(this instanceof jQuery.Event)) {\n\t\t\treturn new jQuery.Event(src, props);\n\t\t}\n\n\t\t// Event object\n\t\tif (src && src.type) {\n\t\t\tthis.originalEvent = src;\n\t\t\tthis.type = src.type;\n\n\t\t\t// Events bubbling up the document may have been marked as prevented\n\t\t\t// by a handler lower down the tree; reflect the correct value.\n\t\t\tthis.isDefaultPrevented = src.defaultPrevented ||\n\t\t\t\tsrc.defaultPrevented === undefined &&\n\n\t\t\t\t// Support: Android <=2.3 only\n\t\t\t\tsrc.returnValue === false ?\n\t\t\t\treturnTrue :\n\t\t\t\treturnFalse;\n\n\t\t\t// Create target properties\n\t\t\t// Support: Safari <=6 - 7 only\n\t\t\t// Target should not be a text node (trac-504, trac-13143)\n\t\t\tthis.target = (src.target && src.target.nodeType === 3) ?\n\t\t\t\tsrc.target.parentNode :\n\t\t\t\tsrc.target;\n\n\t\t\tthis.currentTarget = src.currentTarget;\n\t\t\tthis.relatedTarget = src.relatedTarget;\n\n\t\t\t// Event type\n\t\t} else {\n\t\t\tthis.type = src;\n\t\t}\n\n\t\t// Put explicitly provided properties onto the event object\n\t\tif (props) {\n\t\t\tjQuery.extend(this, props);\n\t\t}\n\n\t\t// Create a timestamp if incoming event doesn't have one\n\t\tthis.timeStamp = src && src.timeStamp || Date.now();\n\n\t\t// Mark it as fixed\n\t\tthis[jQuery.expando] = true;\n\t};\n\n\t// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding\n\t// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html\n\tjQuery.Event.prototype = {\n\t\tconstructor: jQuery.Event,\n\t\tisDefaultPrevented: returnFalse,\n\t\tisPropagationStopped: returnFalse,\n\t\tisImmediatePropagationStopped: returnFalse,\n\t\tisSimulated: false,\n\n\t\tpreventDefault: function () {\n\t\t\tvar e = this.originalEvent;\n\n\t\t\tthis.isDefaultPrevented = returnTrue;\n\n\t\t\tif (e && !this.isSimulated) {\n\t\t\t\te.preventDefault();\n\t\t\t}\n\t\t},\n\t\tstopPropagation: function () {\n\t\t\tvar e = this.originalEvent;\n\n\t\t\tthis.isPropagationStopped = returnTrue;\n\n\t\t\tif (e && !this.isSimulated) {\n\t\t\t\te.stopPropagation();\n\t\t\t}\n\t\t},\n\t\tstopImmediatePropagation: function () {\n\t\t\tvar e = this.originalEvent;\n\n\t\t\tthis.isImmediatePropagationStopped = returnTrue;\n\n\t\t\tif (e && !this.isSimulated) {\n\t\t\t\te.stopImmediatePropagation();\n\t\t\t}\n\n\t\t\tthis.stopPropagation();\n\t\t}\n\t};\n\n\t// Includes all common event props including KeyEvent and MouseEvent specific props\n\tjQuery.each({\n\t\taltKey: true,\n\t\tbubbles: true,\n\t\tcancelable: true,\n\t\tchangedTouches: true,\n\t\tctrlKey: true,\n\t\tdetail: true,\n\t\teventPhase: true,\n\t\tmetaKey: true,\n\t\tpageX: true,\n\t\tpageY: true,\n\t\tshiftKey: true,\n\t\tview: true,\n\t\t\"char\": true,\n\t\tcode: true,\n\t\tcharCode: true,\n\t\tkey: true,\n\t\tkeyCode: true,\n\t\tbutton: true,\n\t\tbuttons: true,\n\t\tclientX: true,\n\t\tclientY: true,\n\t\toffsetX: true,\n\t\toffsetY: true,\n\t\tpointerId: true,\n\t\tpointerType: true,\n\t\tscreenX: true,\n\t\tscreenY: true,\n\t\ttargetTouches: true,\n\t\ttoElement: true,\n\t\ttouches: true,\n\t\twhich: true\n\t}, jQuery.event.addProp);\n\n\tjQuery.each({ focus: \"focusin\", blur: \"focusout\" }, function (type, delegateType) {\n\n\t\tfunction focusMappedHandler(nativeEvent) {\n\t\t\tif (document.documentMode) {\n\n\t\t\t\t// Support: IE 11+\n\t\t\t\t// Attach a single focusin/focusout handler on the document while someone wants\n\t\t\t\t// focus/blur. This is because the former are synchronous in IE while the latter\n\t\t\t\t// are async. In other browsers, all those handlers are invoked synchronously.\n\n\t\t\t\t// `handle` from private data would already wrap the event, but we need\n\t\t\t\t// to change the `type` here.\n\t\t\t\tvar handle = dataPriv.get(this, \"handle\"),\n\t\t\t\t\tevent = jQuery.event.fix(nativeEvent);\n\t\t\t\tevent.type = nativeEvent.type === \"focusin\" ? \"focus\" : \"blur\";\n\t\t\t\tevent.isSimulated = true;\n\n\t\t\t\t// First, handle focusin/focusout\n\t\t\t\thandle(nativeEvent);\n\n\t\t\t\t// ...then, handle focus/blur\n\t\t\t\t//\n\t\t\t\t// focus/blur don't bubble while focusin/focusout do; simulate the former by only\n\t\t\t\t// invoking the handler at the lower level.\n\t\t\t\tif (event.target === event.currentTarget) {\n\n\t\t\t\t\t// The setup part calls `leverageNative`, which, in turn, calls\n\t\t\t\t\t// `jQuery.event.add`, so event handle will already have been set\n\t\t\t\t\t// by this point.\n\t\t\t\t\thandle(event);\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\t// For non-IE browsers, attach a single capturing handler on the document\n\t\t\t\t// while someone wants focusin/focusout.\n\t\t\t\tjQuery.event.simulate(delegateType, nativeEvent.target,\n\t\t\t\t\tjQuery.event.fix(nativeEvent));\n\t\t\t}\n\t\t}\n\n\t\tjQuery.event.special[type] = {\n\n\t\t\t// Utilize native event if possible so blur/focus sequence is correct\n\t\t\tsetup: function () {\n\n\t\t\t\tvar attaches;\n\n\t\t\t\t// Claim the first handler\n\t\t\t\t// dataPriv.set( this, \"focus\", ... )\n\t\t\t\t// dataPriv.set( this, \"blur\", ... )\n\t\t\t\tleverageNative(this, type, true);\n\n\t\t\t\tif (document.documentMode) {\n\n\t\t\t\t\t// Support: IE 9 - 11+\n\t\t\t\t\t// We use the same native handler for focusin & focus (and focusout & blur)\n\t\t\t\t\t// so we need to coordinate setup & teardown parts between those events.\n\t\t\t\t\t// Use `delegateType` as the key as `type` is already used by `leverageNative`.\n\t\t\t\t\tattaches = dataPriv.get(this, delegateType);\n\t\t\t\t\tif (!attaches) {\n\t\t\t\t\t\tthis.addEventListener(delegateType, focusMappedHandler);\n\t\t\t\t\t}\n\t\t\t\t\tdataPriv.set(this, delegateType, (attaches || 0) + 1);\n\t\t\t\t} else {\n\n\t\t\t\t\t// Return false to allow normal processing in the caller\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\t\t\ttrigger: function () {\n\n\t\t\t\t// Force setup before trigger\n\t\t\t\tleverageNative(this, type);\n\n\t\t\t\t// Return non-false to allow normal event-path propagation\n\t\t\t\treturn true;\n\t\t\t},\n\n\t\t\tteardown: function () {\n\t\t\t\tvar attaches;\n\n\t\t\t\tif (document.documentMode) {\n\t\t\t\t\tattaches = dataPriv.get(this, delegateType) - 1;\n\t\t\t\t\tif (!attaches) {\n\t\t\t\t\t\tthis.removeEventListener(delegateType, focusMappedHandler);\n\t\t\t\t\t\tdataPriv.remove(this, delegateType);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdataPriv.set(this, delegateType, attaches);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\n\t\t\t\t\t// Return false to indicate standard teardown should be applied\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// Suppress native focus or blur if we're currently inside\n\t\t\t// a leveraged native-event stack\n\t\t\t_default: function (event) {\n\t\t\t\treturn dataPriv.get(event.target, type);\n\t\t\t},\n\n\t\t\tdelegateType: delegateType\n\t\t};\n\n\t\t// Support: Firefox <=44\n\t\t// Firefox doesn't have focus(in | out) events\n\t\t// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787\n\t\t//\n\t\t// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1\n\t\t// focus(in | out) events fire after focus & blur events,\n\t\t// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order\n\t\t// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857\n\t\t//\n\t\t// Support: IE 9 - 11+\n\t\t// To preserve relative focusin/focus & focusout/blur event order guaranteed on the 3.x branch,\n\t\t// attach a single handler for both events in IE.\n\t\tjQuery.event.special[delegateType] = {\n\t\t\tsetup: function () {\n\n\t\t\t\t// Handle: regular nodes (via `this.ownerDocument`), window\n\t\t\t\t// (via `this.document`) & document (via `this`).\n\t\t\t\tvar doc = this.ownerDocument || this.document || this,\n\t\t\t\t\tdataHolder = document.documentMode ? this : doc,\n\t\t\t\t\tattaches = dataPriv.get(dataHolder, delegateType);\n\n\t\t\t\t// Support: IE 9 - 11+\n\t\t\t\t// We use the same native handler for focusin & focus (and focusout & blur)\n\t\t\t\t// so we need to coordinate setup & teardown parts between those events.\n\t\t\t\t// Use `delegateType` as the key as `type` is already used by `leverageNative`.\n\t\t\t\tif (!attaches) {\n\t\t\t\t\tif (document.documentMode) {\n\t\t\t\t\t\tthis.addEventListener(delegateType, focusMappedHandler);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdoc.addEventListener(type, focusMappedHandler, true);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tdataPriv.set(dataHolder, delegateType, (attaches || 0) + 1);\n\t\t\t},\n\t\t\tteardown: function () {\n\t\t\t\tvar doc = this.ownerDocument || this.document || this,\n\t\t\t\t\tdataHolder = document.documentMode ? this : doc,\n\t\t\t\t\tattaches = dataPriv.get(dataHolder, delegateType) - 1;\n\n\t\t\t\tif (!attaches) {\n\t\t\t\t\tif (document.documentMode) {\n\t\t\t\t\t\tthis.removeEventListener(delegateType, focusMappedHandler);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdoc.removeEventListener(type, focusMappedHandler, true);\n\t\t\t\t\t}\n\t\t\t\t\tdataPriv.remove(dataHolder, delegateType);\n\t\t\t\t} else {\n\t\t\t\t\tdataPriv.set(dataHolder, delegateType, attaches);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t});\n\n\t// Create mouseenter/leave events using mouseover/out and event-time checks\n\t// so that event delegation works in jQuery.\n\t// Do the same for pointerenter/pointerleave and pointerover/pointerout\n\t//\n\t// Support: Safari 7 only\n\t// Safari sends mouseenter too often; see:\n\t// https://bugs.chromium.org/p/chromium/issues/detail?id=470258\n\t// for the description of the bug (it existed in older Chrome versions as well).\n\tjQuery.each({\n\t\tmouseenter: \"mouseover\",\n\t\tmouseleave: \"mouseout\",\n\t\tpointerenter: \"pointerover\",\n\t\tpointerleave: \"pointerout\"\n\t}, function (orig, fix) {\n\t\tjQuery.event.special[orig] = {\n\t\t\tdelegateType: fix,\n\t\t\tbindType: fix,\n\n\t\t\thandle: function (event) {\n\t\t\t\tvar ret,\n\t\t\t\t\ttarget = this,\n\t\t\t\t\trelated = event.relatedTarget,\n\t\t\t\t\thandleObj = event.handleObj;\n\n\t\t\t\t// For mouseenter/leave call the handler if related is outside the target.\n\t\t\t\t// NB: No relatedTarget if the mouse left/entered the browser window\n\t\t\t\tif (!related || (related !== target && !jQuery.contains(target, related))) {\n\t\t\t\t\tevent.type = handleObj.origType;\n\t\t\t\t\tret = handleObj.handler.apply(this, arguments);\n\t\t\t\t\tevent.type = fix;\n\t\t\t\t}\n\t\t\t\treturn ret;\n\t\t\t}\n\t\t};\n\t});\n\n\tjQuery.fn.extend({\n\n\t\ton: function (types, selector, data, fn) {\n\t\t\treturn on(this, types, selector, data, fn);\n\t\t},\n\t\tone: function (types, selector, data, fn) {\n\t\t\treturn on(this, types, selector, data, fn, 1);\n\t\t},\n\t\toff: function (types, selector, fn) {\n\t\t\tvar handleObj, type;\n\t\t\tif (types && types.preventDefault && types.handleObj) {\n\n\t\t\t\t// ( event )  dispatched jQuery.Event\n\t\t\t\thandleObj = types.handleObj;\n\t\t\t\tjQuery(types.delegateTarget).off(\n\t\t\t\t\thandleObj.namespace ?\n\t\t\t\t\t\thandleObj.origType + \".\" + handleObj.namespace :\n\t\t\t\t\t\thandleObj.origType,\n\t\t\t\t\thandleObj.selector,\n\t\t\t\t\thandleObj.handler\n\t\t\t\t);\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\tif (typeof types === \"object\") {\n\n\t\t\t\t// ( types-object [, selector] )\n\t\t\t\tfor (type in types) {\n\t\t\t\t\tthis.off(type, selector, types[type]);\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\tif (selector === false || typeof selector === \"function\") {\n\n\t\t\t\t// ( types [, fn] )\n\t\t\t\tfn = selector;\n\t\t\t\tselector = undefined;\n\t\t\t}\n\t\t\tif (fn === false) {\n\t\t\t\tfn = returnFalse;\n\t\t\t}\n\t\t\treturn this.each(function () {\n\t\t\t\tjQuery.event.remove(this, types, fn, selector);\n\t\t\t});\n\t\t}\n\t});\n\n\n\tvar\n\n\t\t// Support: IE <=10 - 11, Edge 12 - 13 only\n\t\t// In IE/Edge using regex groups here causes severe slowdowns.\n\t\t// See https://connect.microsoft.com/IE/feedback/details/1736512/\n\t\trnoInnerhtml = /<script|<style|<link/i,\n\n\t\t// checked=\"checked\" or checked\n\t\trchecked = /checked\\s*(?:[^=]|=\\s*.checked.)/i,\n\n\t\trcleanScript = /^\\s*<!\\[CDATA\\[|\\]\\]>\\s*$/g;\n\n\t// Prefer a tbody over its parent table for containing new rows\n\tfunction manipulationTarget(elem, content) {\n\t\tif (nodeName(elem, \"table\") &&\n\t\t\tnodeName(content.nodeType !== 11 ? content : content.firstChild, \"tr\")) {\n\n\t\t\treturn jQuery(elem).children(\"tbody\")[0] || elem;\n\t\t}\n\n\t\treturn elem;\n\t}\n\n\t// Replace/restore the type attribute of script elements for safe DOM manipulation\n\tfunction disableScript(elem) {\n\t\telem.type = (elem.getAttribute(\"type\") !== null) + \"/\" + elem.type;\n\t\treturn elem;\n\t}\n\tfunction restoreScript(elem) {\n\t\tif ((elem.type || \"\").slice(0, 5) === \"true/\") {\n\t\t\telem.type = elem.type.slice(5);\n\t\t} else {\n\t\t\telem.removeAttribute(\"type\");\n\t\t}\n\n\t\treturn elem;\n\t}\n\n\tfunction cloneCopyEvent(src, dest) {\n\t\tvar i, l, type, pdataOld, udataOld, udataCur, events;\n\n\t\tif (dest.nodeType !== 1) {\n\t\t\treturn;\n\t\t}\n\n\t\t// 1. Copy private data: events, handlers, etc.\n\t\tif (dataPriv.hasData(src)) {\n\t\t\tpdataOld = dataPriv.get(src);\n\t\t\tevents = pdataOld.events;\n\n\t\t\tif (events) {\n\t\t\t\tdataPriv.remove(dest, \"handle events\");\n\n\t\t\t\tfor (type in events) {\n\t\t\t\t\tfor (i = 0, l = events[type].length; i < l; i++) {\n\t\t\t\t\t\tjQuery.event.add(dest, type, events[type][i]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// 2. Copy user data\n\t\tif (dataUser.hasData(src)) {\n\t\t\tudataOld = dataUser.access(src);\n\t\t\tudataCur = jQuery.extend({}, udataOld);\n\n\t\t\tdataUser.set(dest, udataCur);\n\t\t}\n\t}\n\n\t// Fix IE bugs, see support tests\n\tfunction fixInput(src, dest) {\n\t\tvar nodeName = dest.nodeName.toLowerCase();\n\n\t\t// Fails to persist the checked state of a cloned checkbox or radio button.\n\t\tif (nodeName === \"input\" && rcheckableType.test(src.type)) {\n\t\t\tdest.checked = src.checked;\n\n\t\t\t// Fails to return the selected option to the default selected state when cloning options\n\t\t} else if (nodeName === \"input\" || nodeName === \"textarea\") {\n\t\t\tdest.defaultValue = src.defaultValue;\n\t\t}\n\t}\n\n\tfunction domManip(collection, args, callback, ignored) {\n\n\t\t// Flatten any nested arrays\n\t\targs = flat(args);\n\n\t\tvar fragment, first, scripts, hasScripts, node, doc,\n\t\t\ti = 0,\n\t\t\tl = collection.length,\n\t\t\tiNoClone = l - 1,\n\t\t\tvalue = args[0],\n\t\t\tvalueIsFunction = isFunction(value);\n\n\t\t// We can't cloneNode fragments that contain checked, in WebKit\n\t\tif (valueIsFunction ||\n\t\t\t(l > 1 && typeof value === \"string\" &&\n\t\t\t\t!support.checkClone && rchecked.test(value))) {\n\t\t\treturn collection.each(function (index) {\n\t\t\t\tvar self = collection.eq(index);\n\t\t\t\tif (valueIsFunction) {\n\t\t\t\t\targs[0] = value.call(this, index, self.html());\n\t\t\t\t}\n\t\t\t\tdomManip(self, args, callback, ignored);\n\t\t\t});\n\t\t}\n\n\t\tif (l) {\n\t\t\tfragment = buildFragment(args, collection[0].ownerDocument, false, collection, ignored);\n\t\t\tfirst = fragment.firstChild;\n\n\t\t\tif (fragment.childNodes.length === 1) {\n\t\t\t\tfragment = first;\n\t\t\t}\n\n\t\t\t// Require either new content or an interest in ignored elements to invoke the callback\n\t\t\tif (first || ignored) {\n\t\t\t\tscripts = jQuery.map(getAll(fragment, \"script\"), disableScript);\n\t\t\t\thasScripts = scripts.length;\n\n\t\t\t\t// Use the original fragment for the last item\n\t\t\t\t// instead of the first because it can end up\n\t\t\t\t// being emptied incorrectly in certain situations (trac-8070).\n\t\t\t\tfor (; i < l; i++) {\n\t\t\t\t\tnode = fragment;\n\n\t\t\t\t\tif (i !== iNoClone) {\n\t\t\t\t\t\tnode = jQuery.clone(node, true, true);\n\n\t\t\t\t\t\t// Keep references to cloned scripts for later restoration\n\t\t\t\t\t\tif (hasScripts) {\n\n\t\t\t\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\t\t\t\tjQuery.merge(scripts, getAll(node, \"script\"));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tcallback.call(collection[i], node, i);\n\t\t\t\t}\n\n\t\t\t\tif (hasScripts) {\n\t\t\t\t\tdoc = scripts[scripts.length - 1].ownerDocument;\n\n\t\t\t\t\t// Reenable scripts\n\t\t\t\t\tjQuery.map(scripts, restoreScript);\n\n\t\t\t\t\t// Evaluate executable scripts on first document insertion\n\t\t\t\t\tfor (i = 0; i < hasScripts; i++) {\n\t\t\t\t\t\tnode = scripts[i];\n\t\t\t\t\t\tif (rscriptType.test(node.type || \"\") &&\n\t\t\t\t\t\t\t!dataPriv.access(node, \"globalEval\") &&\n\t\t\t\t\t\t\tjQuery.contains(doc, node)) {\n\n\t\t\t\t\t\t\tif (node.src && (node.type || \"\").toLowerCase() !== \"module\") {\n\n\t\t\t\t\t\t\t\t// Optional AJAX dependency, but won't run scripts if not present\n\t\t\t\t\t\t\t\tif (jQuery._evalUrl && !node.noModule) {\n\t\t\t\t\t\t\t\t\tjQuery._evalUrl(node.src, {\n\t\t\t\t\t\t\t\t\t\tnonce: node.nonce || node.getAttribute(\"nonce\")\n\t\t\t\t\t\t\t\t\t}, doc);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t// Unwrap a CDATA section containing script contents. This shouldn't be\n\t\t\t\t\t\t\t\t// needed as in XML documents they're already not visible when\n\t\t\t\t\t\t\t\t// inspecting element contents and in HTML documents they have no\n\t\t\t\t\t\t\t\t// meaning but we're preserving that logic for backwards compatibility.\n\t\t\t\t\t\t\t\t// This will be removed completely in 4.0. See gh-4904.\n\t\t\t\t\t\t\t\tDOMEval(node.textContent.replace(rcleanScript, \"\"), node, doc);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn collection;\n\t}\n\n\tfunction remove(elem, selector, keepData) {\n\t\tvar node,\n\t\t\tnodes = selector ? jQuery.filter(selector, elem) : elem,\n\t\t\ti = 0;\n\n\t\tfor (; (node = nodes[i]) != null; i++) {\n\t\t\tif (!keepData && node.nodeType === 1) {\n\t\t\t\tjQuery.cleanData(getAll(node));\n\t\t\t}\n\n\t\t\tif (node.parentNode) {\n\t\t\t\tif (keepData && isAttached(node)) {\n\t\t\t\t\tsetGlobalEval(getAll(node, \"script\"));\n\t\t\t\t}\n\t\t\t\tnode.parentNode.removeChild(node);\n\t\t\t}\n\t\t}\n\n\t\treturn elem;\n\t}\n\n\tjQuery.extend({\n\t\thtmlPrefilter: function (html) {\n\t\t\treturn html;\n\t\t},\n\n\t\tclone: function (elem, dataAndEvents, deepDataAndEvents) {\n\t\t\tvar i, l, srcElements, destElements,\n\t\t\t\tclone = elem.cloneNode(true),\n\t\t\t\tinPage = isAttached(elem);\n\n\t\t\t// Fix IE cloning issues\n\t\t\tif (!support.noCloneChecked && (elem.nodeType === 1 || elem.nodeType === 11) &&\n\t\t\t\t!jQuery.isXMLDoc(elem)) {\n\n\t\t\t\t// We eschew jQuery#find here for performance reasons:\n\t\t\t\t// https://jsperf.com/getall-vs-sizzle/2\n\t\t\t\tdestElements = getAll(clone);\n\t\t\t\tsrcElements = getAll(elem);\n\n\t\t\t\tfor (i = 0, l = srcElements.length; i < l; i++) {\n\t\t\t\t\tfixInput(srcElements[i], destElements[i]);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Copy the events from the original to the clone\n\t\t\tif (dataAndEvents) {\n\t\t\t\tif (deepDataAndEvents) {\n\t\t\t\t\tsrcElements = srcElements || getAll(elem);\n\t\t\t\t\tdestElements = destElements || getAll(clone);\n\n\t\t\t\t\tfor (i = 0, l = srcElements.length; i < l; i++) {\n\t\t\t\t\t\tcloneCopyEvent(srcElements[i], destElements[i]);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tcloneCopyEvent(elem, clone);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Preserve script evaluation history\n\t\t\tdestElements = getAll(clone, \"script\");\n\t\t\tif (destElements.length > 0) {\n\t\t\t\tsetGlobalEval(destElements, !inPage && getAll(elem, \"script\"));\n\t\t\t}\n\n\t\t\t// Return the cloned set\n\t\t\treturn clone;\n\t\t},\n\n\t\tcleanData: function (elems) {\n\t\t\tvar data, elem, type,\n\t\t\t\tspecial = jQuery.event.special,\n\t\t\t\ti = 0;\n\n\t\t\tfor (; (elem = elems[i]) !== undefined; i++) {\n\t\t\t\tif (acceptData(elem)) {\n\t\t\t\t\tif ((data = elem[dataPriv.expando])) {\n\t\t\t\t\t\tif (data.events) {\n\t\t\t\t\t\t\tfor (type in data.events) {\n\t\t\t\t\t\t\t\tif (special[type]) {\n\t\t\t\t\t\t\t\t\tjQuery.event.remove(elem, type);\n\n\t\t\t\t\t\t\t\t\t// This is a shortcut to avoid jQuery.event.remove's overhead\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tjQuery.removeEvent(elem, type, data.handle);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\t\telem[dataPriv.expando] = undefined;\n\t\t\t\t\t}\n\t\t\t\t\tif (elem[dataUser.expando]) {\n\n\t\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\t\telem[dataUser.expando] = undefined;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\n\tjQuery.fn.extend({\n\t\tdetach: function (selector) {\n\t\t\treturn remove(this, selector, true);\n\t\t},\n\n\t\tremove: function (selector) {\n\t\t\treturn remove(this, selector);\n\t\t},\n\n\t\ttext: function (value) {\n\t\t\treturn access(this, function (value) {\n\t\t\t\treturn value === undefined ?\n\t\t\t\t\tjQuery.text(this) :\n\t\t\t\t\tthis.empty().each(function () {\n\t\t\t\t\t\tif (this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9) {\n\t\t\t\t\t\t\tthis.textContent = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t}, null, value, arguments.length);\n\t\t},\n\n\t\tappend: function () {\n\t\t\treturn domManip(this, arguments, function (elem) {\n\t\t\t\tif (this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9) {\n\t\t\t\t\tvar target = manipulationTarget(this, elem);\n\t\t\t\t\ttarget.appendChild(elem);\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\tprepend: function () {\n\t\t\treturn domManip(this, arguments, function (elem) {\n\t\t\t\tif (this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9) {\n\t\t\t\t\tvar target = manipulationTarget(this, elem);\n\t\t\t\t\ttarget.insertBefore(elem, target.firstChild);\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\tbefore: function () {\n\t\t\treturn domManip(this, arguments, function (elem) {\n\t\t\t\tif (this.parentNode) {\n\t\t\t\t\tthis.parentNode.insertBefore(elem, this);\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\tafter: function () {\n\t\t\treturn domManip(this, arguments, function (elem) {\n\t\t\t\tif (this.parentNode) {\n\t\t\t\t\tthis.parentNode.insertBefore(elem, this.nextSibling);\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\tempty: function () {\n\t\t\tvar elem,\n\t\t\t\ti = 0;\n\n\t\t\tfor (; (elem = this[i]) != null; i++) {\n\t\t\t\tif (elem.nodeType === 1) {\n\n\t\t\t\t\t// Prevent memory leaks\n\t\t\t\t\tjQuery.cleanData(getAll(elem, false));\n\n\t\t\t\t\t// Remove any remaining nodes\n\t\t\t\t\telem.textContent = \"\";\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn this;\n\t\t},\n\n\t\tclone: function (dataAndEvents, deepDataAndEvents) {\n\t\t\tdataAndEvents = dataAndEvents == null ? false : dataAndEvents;\n\t\t\tdeepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;\n\n\t\t\treturn this.map(function () {\n\t\t\t\treturn jQuery.clone(this, dataAndEvents, deepDataAndEvents);\n\t\t\t});\n\t\t},\n\n\t\thtml: function (value) {\n\t\t\treturn access(this, function (value) {\n\t\t\t\tvar elem = this[0] || {},\n\t\t\t\t\ti = 0,\n\t\t\t\t\tl = this.length;\n\n\t\t\t\tif (value === undefined && elem.nodeType === 1) {\n\t\t\t\t\treturn elem.innerHTML;\n\t\t\t\t}\n\n\t\t\t\t// See if we can take a shortcut and just use innerHTML\n\t\t\t\tif (typeof value === \"string\" && !rnoInnerhtml.test(value) &&\n\t\t\t\t\t!wrapMap[(rtagName.exec(value) || [\"\", \"\"])[1].toLowerCase()]) {\n\n\t\t\t\t\tvalue = jQuery.htmlPrefilter(value);\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tfor (; i < l; i++) {\n\t\t\t\t\t\t\telem = this[i] || {};\n\n\t\t\t\t\t\t\t// Remove element nodes and prevent memory leaks\n\t\t\t\t\t\t\tif (elem.nodeType === 1) {\n\t\t\t\t\t\t\t\tjQuery.cleanData(getAll(elem, false));\n\t\t\t\t\t\t\t\telem.innerHTML = value;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\telem = 0;\n\n\t\t\t\t\t\t// If using innerHTML throws an exception, use the fallback method\n\t\t\t\t\t} catch (e) { }\n\t\t\t\t}\n\n\t\t\t\tif (elem) {\n\t\t\t\t\tthis.empty().append(value);\n\t\t\t\t}\n\t\t\t}, null, value, arguments.length);\n\t\t},\n\n\t\treplaceWith: function () {\n\t\t\tvar ignored = [];\n\n\t\t\t// Make the changes, replacing each non-ignored context element with the new content\n\t\t\treturn domManip(this, arguments, function (elem) {\n\t\t\t\tvar parent = this.parentNode;\n\n\t\t\t\tif (jQuery.inArray(this, ignored) < 0) {\n\t\t\t\t\tjQuery.cleanData(getAll(this));\n\t\t\t\t\tif (parent) {\n\t\t\t\t\t\tparent.replaceChild(elem, this);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Force callback invocation\n\t\t\t}, ignored);\n\t\t}\n\t});\n\n\tjQuery.each({\n\t\tappendTo: \"append\",\n\t\tprependTo: \"prepend\",\n\t\tinsertBefore: \"before\",\n\t\tinsertAfter: \"after\",\n\t\treplaceAll: \"replaceWith\"\n\t}, function (name, original) {\n\t\tjQuery.fn[name] = function (selector) {\n\t\t\tvar elems,\n\t\t\t\tret = [],\n\t\t\t\tinsert = jQuery(selector),\n\t\t\t\tlast = insert.length - 1,\n\t\t\t\ti = 0;\n\n\t\t\tfor (; i <= last; i++) {\n\t\t\t\telems = i === last ? this : this.clone(true);\n\t\t\t\tjQuery(insert[i])[original](elems);\n\n\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t// .get() because push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\tpush.apply(ret, elems.get());\n\t\t\t}\n\n\t\t\treturn this.pushStack(ret);\n\t\t};\n\t});\n\tvar rnumnonpx = new RegExp(\"^(\" + pnum + \")(?!px)[a-z%]+$\", \"i\");\n\n\tvar rcustomProp = /^--/;\n\n\n\tvar getStyles = function (elem) {\n\n\t\t// Support: IE <=11 only, Firefox <=30 (trac-15098, trac-14150)\n\t\t// IE throws on elements created in popups\n\t\t// FF meanwhile throws on frame elements through \"defaultView.getComputedStyle\"\n\t\tvar view = elem.ownerDocument.defaultView;\n\n\t\tif (!view || !view.opener) {\n\t\t\tview = window;\n\t\t}\n\n\t\treturn view.getComputedStyle(elem);\n\t};\n\n\tvar swap = function (elem, options, callback) {\n\t\tvar ret, name,\n\t\t\told = {};\n\n\t\t// Remember the old values, and insert the new ones\n\t\tfor (name in options) {\n\t\t\told[name] = elem.style[name];\n\t\t\telem.style[name] = options[name];\n\t\t}\n\n\t\tret = callback.call(elem);\n\n\t\t// Revert the old values\n\t\tfor (name in options) {\n\t\t\telem.style[name] = old[name];\n\t\t}\n\n\t\treturn ret;\n\t};\n\n\n\tvar rboxStyle = new RegExp(cssExpand.join(\"|\"), \"i\");\n\n\n\n\t(function () {\n\n\t\t// Executing both pixelPosition & boxSizingReliable tests require only one layout\n\t\t// so they're executed at the same time to save the second computation.\n\t\tfunction computeStyleTests() {\n\n\t\t\t// This is a singleton, we need to execute it only once\n\t\t\tif (!div) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tcontainer.style.cssText = \"position:absolute;left:-11111px;width:60px;\" +\n\t\t\t\t\"margin-top:1px;padding:0;border:0\";\n\t\t\tdiv.style.cssText =\n\t\t\t\t\"position:relative;display:block;box-sizing:border-box;overflow:scroll;\" +\n\t\t\t\t\"margin:auto;border:1px;padding:1px;\" +\n\t\t\t\t\"width:60%;top:1%\";\n\t\t\tdocumentElement.appendChild(container).appendChild(div);\n\n\t\t\tvar divStyle = window.getComputedStyle(div);\n\t\t\tpixelPositionVal = divStyle.top !== \"1%\";\n\n\t\t\t// Support: Android 4.0 - 4.3 only, Firefox <=3 - 44\n\t\t\treliableMarginLeftVal = roundPixelMeasures(divStyle.marginLeft) === 12;\n\n\t\t\t// Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3\n\t\t\t// Some styles come back with percentage values, even though they shouldn't\n\t\t\tdiv.style.right = \"60%\";\n\t\t\tpixelBoxStylesVal = roundPixelMeasures(divStyle.right) === 36;\n\n\t\t\t// Support: IE 9 - 11 only\n\t\t\t// Detect misreporting of content dimensions for box-sizing:border-box elements\n\t\t\tboxSizingReliableVal = roundPixelMeasures(divStyle.width) === 36;\n\n\t\t\t// Support: IE 9 only\n\t\t\t// Detect overflow:scroll screwiness (gh-3699)\n\t\t\t// Support: Chrome <=64\n\t\t\t// Don't get tricked when zoom affects offsetWidth (gh-4029)\n\t\t\tdiv.style.position = \"absolute\";\n\t\t\tscrollboxSizeVal = roundPixelMeasures(div.offsetWidth / 3) === 12;\n\n\t\t\tdocumentElement.removeChild(container);\n\n\t\t\t// Nullify the div so it wouldn't be stored in the memory and\n\t\t\t// it will also be a sign that checks already performed\n\t\t\tdiv = null;\n\t\t}\n\n\t\tfunction roundPixelMeasures(measure) {\n\t\t\treturn Math.round(parseFloat(measure));\n\t\t}\n\n\t\tvar pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal,\n\t\t\treliableTrDimensionsVal, reliableMarginLeftVal,\n\t\t\tcontainer = document.createElement(\"div\"),\n\t\t\tdiv = document.createElement(\"div\");\n\n\t\t// Finish early in limited (non-browser) environments\n\t\tif (!div.style) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Support: IE <=9 - 11 only\n\t\t// Style of cloned element affects source element cloned (trac-8908)\n\t\tdiv.style.backgroundClip = \"content-box\";\n\t\tdiv.cloneNode(true).style.backgroundClip = \"\";\n\t\tsupport.clearCloneStyle = div.style.backgroundClip === \"content-box\";\n\n\t\tjQuery.extend(support, {\n\t\t\tboxSizingReliable: function () {\n\t\t\t\tcomputeStyleTests();\n\t\t\t\treturn boxSizingReliableVal;\n\t\t\t},\n\t\t\tpixelBoxStyles: function () {\n\t\t\t\tcomputeStyleTests();\n\t\t\t\treturn pixelBoxStylesVal;\n\t\t\t},\n\t\t\tpixelPosition: function () {\n\t\t\t\tcomputeStyleTests();\n\t\t\t\treturn pixelPositionVal;\n\t\t\t},\n\t\t\treliableMarginLeft: function () {\n\t\t\t\tcomputeStyleTests();\n\t\t\t\treturn reliableMarginLeftVal;\n\t\t\t},\n\t\t\tscrollboxSize: function () {\n\t\t\t\tcomputeStyleTests();\n\t\t\t\treturn scrollboxSizeVal;\n\t\t\t},\n\n\t\t\t// Support: IE 9 - 11+, Edge 15 - 18+\n\t\t\t// IE/Edge misreport `getComputedStyle` of table rows with width/height\n\t\t\t// set in CSS while `offset*` properties report correct values.\n\t\t\t// Behavior in IE 9 is more subtle than in newer versions & it passes\n\t\t\t// some versions of this test; make sure not to make it pass there!\n\t\t\t//\n\t\t\t// Support: Firefox 70+\n\t\t\t// Only Firefox includes border widths\n\t\t\t// in computed dimensions. (gh-4529)\n\t\t\treliableTrDimensions: function () {\n\t\t\t\tvar table, tr, trChild, trStyle;\n\t\t\t\tif (reliableTrDimensionsVal == null) {\n\t\t\t\t\ttable = document.createElement(\"table\");\n\t\t\t\t\ttr = document.createElement(\"tr\");\n\t\t\t\t\ttrChild = document.createElement(\"div\");\n\n\t\t\t\t\ttable.style.cssText = \"position:absolute;left:-11111px;border-collapse:separate\";\n\t\t\t\t\ttr.style.cssText = \"border:1px solid\";\n\n\t\t\t\t\t// Support: Chrome 86+\n\t\t\t\t\t// Height set through cssText does not get applied.\n\t\t\t\t\t// Computed height then comes back as 0.\n\t\t\t\t\ttr.style.height = \"1px\";\n\t\t\t\t\ttrChild.style.height = \"9px\";\n\n\t\t\t\t\t// Support: Android 8 Chrome 86+\n\t\t\t\t\t// In our bodyBackground.html iframe,\n\t\t\t\t\t// display for all div elements is set to \"inline\",\n\t\t\t\t\t// which causes a problem only in Android 8 Chrome 86.\n\t\t\t\t\t// Ensuring the div is display: block\n\t\t\t\t\t// gets around this issue.\n\t\t\t\t\ttrChild.style.display = \"block\";\n\n\t\t\t\t\tdocumentElement\n\t\t\t\t\t\t.appendChild(table)\n\t\t\t\t\t\t.appendChild(tr)\n\t\t\t\t\t\t.appendChild(trChild);\n\n\t\t\t\t\ttrStyle = window.getComputedStyle(tr);\n\t\t\t\t\treliableTrDimensionsVal = (parseInt(trStyle.height, 10) +\n\t\t\t\t\t\tparseInt(trStyle.borderTopWidth, 10) +\n\t\t\t\t\t\tparseInt(trStyle.borderBottomWidth, 10)) === tr.offsetHeight;\n\n\t\t\t\t\tdocumentElement.removeChild(table);\n\t\t\t\t}\n\t\t\t\treturn reliableTrDimensionsVal;\n\t\t\t}\n\t\t});\n\t})();\n\n\n\tfunction curCSS(elem, name, computed) {\n\t\tvar width, minWidth, maxWidth, ret,\n\t\t\tisCustomProp = rcustomProp.test(name),\n\n\t\t\t// Support: Firefox 51+\n\t\t\t// Retrieving style before computed somehow\n\t\t\t// fixes an issue with getting wrong values\n\t\t\t// on detached elements\n\t\t\tstyle = elem.style;\n\n\t\tcomputed = computed || getStyles(elem);\n\n\t\t// getPropertyValue is needed for:\n\t\t//   .css('filter') (IE 9 only, trac-12537)\n\t\t//   .css('--customProperty) (gh-3144)\n\t\tif (computed) {\n\n\t\t\t// Support: IE <=9 - 11+\n\t\t\t// IE only supports `\"float\"` in `getPropertyValue`; in computed styles\n\t\t\t// it's only available as `\"cssFloat\"`. We no longer modify properties\n\t\t\t// sent to `.css()` apart from camelCasing, so we need to check both.\n\t\t\t// Normally, this would create difference in behavior: if\n\t\t\t// `getPropertyValue` returns an empty string, the value returned\n\t\t\t// by `.css()` would be `undefined`. This is usually the case for\n\t\t\t// disconnected elements. However, in IE even disconnected elements\n\t\t\t// with no styles return `\"none\"` for `getPropertyValue( \"float\" )`\n\t\t\tret = computed.getPropertyValue(name) || computed[name];\n\n\t\t\tif (isCustomProp && ret) {\n\n\t\t\t\t// Support: Firefox 105+, Chrome <=105+\n\t\t\t\t// Spec requires trimming whitespace for custom properties (gh-4926).\n\t\t\t\t// Firefox only trims leading whitespace. Chrome just collapses\n\t\t\t\t// both leading & trailing whitespace to a single space.\n\t\t\t\t//\n\t\t\t\t// Fall back to `undefined` if empty string returned.\n\t\t\t\t// This collapses a missing definition with property defined\n\t\t\t\t// and set to an empty string but there's no standard API\n\t\t\t\t// allowing us to differentiate them without a performance penalty\n\t\t\t\t// and returning `undefined` aligns with older jQuery.\n\t\t\t\t//\n\t\t\t\t// rtrimCSS treats U+000D CARRIAGE RETURN and U+000C FORM FEED\n\t\t\t\t// as whitespace while CSS does not, but this is not a problem\n\t\t\t\t// because CSS preprocessing replaces them with U+000A LINE FEED\n\t\t\t\t// (which *is* CSS whitespace)\n\t\t\t\t// https://www.w3.org/TR/css-syntax-3/#input-preprocessing\n\t\t\t\tret = ret.replace(rtrimCSS, \"$1\") || undefined;\n\t\t\t}\n\n\t\t\tif (ret === \"\" && !isAttached(elem)) {\n\t\t\t\tret = jQuery.style(elem, name);\n\t\t\t}\n\n\t\t\t// A tribute to the \"awesome hack by Dean Edwards\"\n\t\t\t// Android Browser returns percentage for some values,\n\t\t\t// but width seems to be reliably pixels.\n\t\t\t// This is against the CSSOM draft spec:\n\t\t\t// https://drafts.csswg.org/cssom/#resolved-values\n\t\t\tif (!support.pixelBoxStyles() && rnumnonpx.test(ret) && rboxStyle.test(name)) {\n\n\t\t\t\t// Remember the original values\n\t\t\t\twidth = style.width;\n\t\t\t\tminWidth = style.minWidth;\n\t\t\t\tmaxWidth = style.maxWidth;\n\n\t\t\t\t// Put in the new values to get a computed value out\n\t\t\t\tstyle.minWidth = style.maxWidth = style.width = ret;\n\t\t\t\tret = computed.width;\n\n\t\t\t\t// Revert the changed values\n\t\t\t\tstyle.width = width;\n\t\t\t\tstyle.minWidth = minWidth;\n\t\t\t\tstyle.maxWidth = maxWidth;\n\t\t\t}\n\t\t}\n\n\t\treturn ret !== undefined ?\n\n\t\t\t// Support: IE <=9 - 11 only\n\t\t\t// IE returns zIndex value as an integer.\n\t\t\tret + \"\" :\n\t\t\tret;\n\t}\n\n\n\tfunction addGetHookIf(conditionFn, hookFn) {\n\n\t\t// Define the hook, we'll check on the first run if it's really needed.\n\t\treturn {\n\t\t\tget: function () {\n\t\t\t\tif (conditionFn()) {\n\n\t\t\t\t\t// Hook not needed (or it's not possible to use it due\n\t\t\t\t\t// to missing dependency), remove it.\n\t\t\t\t\tdelete this.get;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Hook needed; redefine it so that the support test is not executed again.\n\t\t\t\treturn (this.get = hookFn).apply(this, arguments);\n\t\t\t}\n\t\t};\n\t}\n\n\n\tvar cssPrefixes = [\"Webkit\", \"Moz\", \"ms\"],\n\t\temptyStyle = document.createElement(\"div\").style,\n\t\tvendorProps = {};\n\n\t// Return a vendor-prefixed property or undefined\n\tfunction vendorPropName(name) {\n\n\t\t// Check for vendor prefixed names\n\t\tvar capName = name[0].toUpperCase() + name.slice(1),\n\t\t\ti = cssPrefixes.length;\n\n\t\twhile (i--) {\n\t\t\tname = cssPrefixes[i] + capName;\n\t\t\tif (name in emptyStyle) {\n\t\t\t\treturn name;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return a potentially-mapped jQuery.cssProps or vendor prefixed property\n\tfunction finalPropName(name) {\n\t\tvar final = jQuery.cssProps[name] || vendorProps[name];\n\n\t\tif (final) {\n\t\t\treturn final;\n\t\t}\n\t\tif (name in emptyStyle) {\n\t\t\treturn name;\n\t\t}\n\t\treturn vendorProps[name] = vendorPropName(name) || name;\n\t}\n\n\n\tvar\n\n\t\t// Swappable if display is none or starts with table\n\t\t// except \"table\", \"table-cell\", or \"table-caption\"\n\t\t// See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display\n\t\trdisplayswap = /^(none|table(?!-c[ea]).+)/,\n\t\tcssShow = { position: \"absolute\", visibility: \"hidden\", display: \"block\" },\n\t\tcssNormalTransform = {\n\t\t\tletterSpacing: \"0\",\n\t\t\tfontWeight: \"400\"\n\t\t};\n\n\tfunction setPositiveNumber(_elem, value, subtract) {\n\n\t\t// Any relative (+/-) values have already been\n\t\t// normalized at this point\n\t\tvar matches = rcssNum.exec(value);\n\t\treturn matches ?\n\n\t\t\t// Guard against undefined \"subtract\", e.g., when used as in cssHooks\n\t\t\tMath.max(0, matches[2] - (subtract || 0)) + (matches[3] || \"px\") :\n\t\t\tvalue;\n\t}\n\n\tfunction boxModelAdjustment(elem, dimension, box, isBorderBox, styles, computedVal) {\n\t\tvar i = dimension === \"width\" ? 1 : 0,\n\t\t\textra = 0,\n\t\t\tdelta = 0,\n\t\t\tmarginDelta = 0;\n\n\t\t// Adjustment may not be necessary\n\t\tif (box === (isBorderBox ? \"border\" : \"content\")) {\n\t\t\treturn 0;\n\t\t}\n\n\t\tfor (; i < 4; i += 2) {\n\n\t\t\t// Both box models exclude margin\n\t\t\t// Count margin delta separately to only add it after scroll gutter adjustment.\n\t\t\t// This is needed to make negative margins work with `outerHeight( true )` (gh-3982).\n\t\t\tif (box === \"margin\") {\n\t\t\t\tmarginDelta += jQuery.css(elem, box + cssExpand[i], true, styles);\n\t\t\t}\n\n\t\t\t// If we get here with a content-box, we're seeking \"padding\" or \"border\" or \"margin\"\n\t\t\tif (!isBorderBox) {\n\n\t\t\t\t// Add padding\n\t\t\t\tdelta += jQuery.css(elem, \"padding\" + cssExpand[i], true, styles);\n\n\t\t\t\t// For \"border\" or \"margin\", add border\n\t\t\t\tif (box !== \"padding\") {\n\t\t\t\t\tdelta += jQuery.css(elem, \"border\" + cssExpand[i] + \"Width\", true, styles);\n\n\t\t\t\t\t// But still keep track of it otherwise\n\t\t\t\t} else {\n\t\t\t\t\textra += jQuery.css(elem, \"border\" + cssExpand[i] + \"Width\", true, styles);\n\t\t\t\t}\n\n\t\t\t\t// If we get here with a border-box (content + padding + border), we're seeking \"content\" or\n\t\t\t\t// \"padding\" or \"margin\"\n\t\t\t} else {\n\n\t\t\t\t// For \"content\", subtract padding\n\t\t\t\tif (box === \"content\") {\n\t\t\t\t\tdelta -= jQuery.css(elem, \"padding\" + cssExpand[i], true, styles);\n\t\t\t\t}\n\n\t\t\t\t// For \"content\" or \"padding\", subtract border\n\t\t\t\tif (box !== \"margin\") {\n\t\t\t\t\tdelta -= jQuery.css(elem, \"border\" + cssExpand[i] + \"Width\", true, styles);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Account for positive content-box scroll gutter when requested by providing computedVal\n\t\tif (!isBorderBox && computedVal >= 0) {\n\n\t\t\t// offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border\n\t\t\t// Assuming integer scroll gutter, subtract the rest and round down\n\t\t\tdelta += Math.max(0, Math.ceil(\n\t\t\t\telem[\"offset\" + dimension[0].toUpperCase() + dimension.slice(1)] -\n\t\t\t\tcomputedVal -\n\t\t\t\tdelta -\n\t\t\t\textra -\n\t\t\t\t0.5\n\n\t\t\t\t// If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter\n\t\t\t\t// Use an explicit zero to avoid NaN (gh-3964)\n\t\t\t)) || 0;\n\t\t}\n\n\t\treturn delta + marginDelta;\n\t}\n\n\tfunction getWidthOrHeight(elem, dimension, extra) {\n\n\t\t// Start with computed style\n\t\tvar styles = getStyles(elem),\n\n\t\t\t// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322).\n\t\t\t// Fake content-box until we know it's needed to know the true value.\n\t\t\tboxSizingNeeded = !support.boxSizingReliable() || extra,\n\t\t\tisBorderBox = boxSizingNeeded &&\n\t\t\t\tjQuery.css(elem, \"boxSizing\", false, styles) === \"border-box\",\n\t\t\tvalueIsBorderBox = isBorderBox,\n\n\t\t\tval = curCSS(elem, dimension, styles),\n\t\t\toffsetProp = \"offset\" + dimension[0].toUpperCase() + dimension.slice(1);\n\n\t\t// Support: Firefox <=54\n\t\t// Return a confounding non-pixel value or feign ignorance, as appropriate.\n\t\tif (rnumnonpx.test(val)) {\n\t\t\tif (!extra) {\n\t\t\t\treturn val;\n\t\t\t}\n\t\t\tval = \"auto\";\n\t\t}\n\n\n\t\t// Support: IE 9 - 11 only\n\t\t// Use offsetWidth/offsetHeight for when box sizing is unreliable.\n\t\t// In those cases, the computed value can be trusted to be border-box.\n\t\tif ((!support.boxSizingReliable() && isBorderBox ||\n\n\t\t\t// Support: IE 10 - 11+, Edge 15 - 18+\n\t\t\t// IE/Edge misreport `getComputedStyle` of table rows with width/height\n\t\t\t// set in CSS while `offset*` properties report correct values.\n\t\t\t// Interestingly, in some cases IE 9 doesn't suffer from this issue.\n\t\t\t!support.reliableTrDimensions() && nodeName(elem, \"tr\") ||\n\n\t\t\t// Fall back to offsetWidth/offsetHeight when value is \"auto\"\n\t\t\t// This happens for inline elements with no explicit setting (gh-3571)\n\t\t\tval === \"auto\" ||\n\n\t\t\t// Support: Android <=4.1 - 4.3 only\n\t\t\t// Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602)\n\t\t\t!parseFloat(val) && jQuery.css(elem, \"display\", false, styles) === \"inline\") &&\n\n\t\t\t// Make sure the element is visible & connected\n\t\t\telem.getClientRects().length) {\n\n\t\t\tisBorderBox = jQuery.css(elem, \"boxSizing\", false, styles) === \"border-box\";\n\n\t\t\t// Where available, offsetWidth/offsetHeight approximate border box dimensions.\n\t\t\t// Where not available (e.g., SVG), assume unreliable box-sizing and interpret the\n\t\t\t// retrieved value as a content box dimension.\n\t\t\tvalueIsBorderBox = offsetProp in elem;\n\t\t\tif (valueIsBorderBox) {\n\t\t\t\tval = elem[offsetProp];\n\t\t\t}\n\t\t}\n\n\t\t// Normalize \"\" and auto\n\t\tval = parseFloat(val) || 0;\n\n\t\t// Adjust for the element's box model\n\t\treturn (val +\n\t\t\tboxModelAdjustment(\n\t\t\t\telem,\n\t\t\t\tdimension,\n\t\t\t\textra || (isBorderBox ? \"border\" : \"content\"),\n\t\t\t\tvalueIsBorderBox,\n\t\t\t\tstyles,\n\n\t\t\t\t// Provide the current computed size to request scroll gutter calculation (gh-3589)\n\t\t\t\tval\n\t\t\t)\n\t\t) + \"px\";\n\t}\n\n\tjQuery.extend({\n\n\t\t// Add in style property hooks for overriding the default\n\t\t// behavior of getting and setting a style property\n\t\tcssHooks: {\n\t\t\topacity: {\n\t\t\t\tget: function (elem, computed) {\n\t\t\t\t\tif (computed) {\n\n\t\t\t\t\t\t// We should always get a number back from opacity\n\t\t\t\t\t\tvar ret = curCSS(elem, \"opacity\");\n\t\t\t\t\t\treturn ret === \"\" ? \"1\" : ret;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t// Don't automatically add \"px\" to these possibly-unitless properties\n\t\tcssNumber: {\n\t\t\tanimationIterationCount: true,\n\t\t\taspectRatio: true,\n\t\t\tborderImageSlice: true,\n\t\t\tcolumnCount: true,\n\t\t\tflexGrow: true,\n\t\t\tflexShrink: true,\n\t\t\tfontWeight: true,\n\t\t\tgridArea: true,\n\t\t\tgridColumn: true,\n\t\t\tgridColumnEnd: true,\n\t\t\tgridColumnStart: true,\n\t\t\tgridRow: true,\n\t\t\tgridRowEnd: true,\n\t\t\tgridRowStart: true,\n\t\t\tlineHeight: true,\n\t\t\topacity: true,\n\t\t\torder: true,\n\t\t\torphans: true,\n\t\t\tscale: true,\n\t\t\twidows: true,\n\t\t\tzIndex: true,\n\t\t\tzoom: true,\n\n\t\t\t// SVG-related\n\t\t\tfillOpacity: true,\n\t\t\tfloodOpacity: true,\n\t\t\tstopOpacity: true,\n\t\t\tstrokeMiterlimit: true,\n\t\t\tstrokeOpacity: true\n\t\t},\n\n\t\t// Add in properties whose names you wish to fix before\n\t\t// setting or getting the value\n\t\tcssProps: {},\n\n\t\t// Get and set the style property on a DOM Node\n\t\tstyle: function (elem, name, value, extra) {\n\n\t\t\t// Don't set styles on text and comment nodes\n\t\t\tif (!elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Make sure that we're working with the right name\n\t\t\tvar ret, type, hooks,\n\t\t\t\torigName = camelCase(name),\n\t\t\t\tisCustomProp = rcustomProp.test(name),\n\t\t\t\tstyle = elem.style;\n\n\t\t\t// Make sure that we're working with the right name. We don't\n\t\t\t// want to query the value if it is a CSS custom property\n\t\t\t// since they are user-defined.\n\t\t\tif (!isCustomProp) {\n\t\t\t\tname = finalPropName(origName);\n\t\t\t}\n\n\t\t\t// Gets hook for the prefixed version, then unprefixed version\n\t\t\thooks = jQuery.cssHooks[name] || jQuery.cssHooks[origName];\n\n\t\t\t// Check if we're setting a value\n\t\t\tif (value !== undefined) {\n\t\t\t\ttype = typeof value;\n\n\t\t\t\t// Convert \"+=\" or \"-=\" to relative numbers (trac-7345)\n\t\t\t\tif (type === \"string\" && (ret = rcssNum.exec(value)) && ret[1]) {\n\t\t\t\t\tvalue = adjustCSS(elem, name, ret);\n\n\t\t\t\t\t// Fixes bug trac-9237\n\t\t\t\t\ttype = \"number\";\n\t\t\t\t}\n\n\t\t\t\t// Make sure that null and NaN values aren't set (trac-7116)\n\t\t\t\tif (value == null || value !== value) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// If a number was passed in, add the unit (except for certain CSS properties)\n\t\t\t\t// The isCustomProp check can be removed in jQuery 4.0 when we only auto-append\n\t\t\t\t// \"px\" to a few hardcoded values.\n\t\t\t\tif (type === \"number\" && !isCustomProp) {\n\t\t\t\t\tvalue += ret && ret[3] || (jQuery.cssNumber[origName] ? \"\" : \"px\");\n\t\t\t\t}\n\n\t\t\t\t// background-* props affect original clone's values\n\t\t\t\tif (!support.clearCloneStyle && value === \"\" && name.indexOf(\"background\") === 0) {\n\t\t\t\t\tstyle[name] = \"inherit\";\n\t\t\t\t}\n\n\t\t\t\t// If a hook was provided, use that value, otherwise just set the specified value\n\t\t\t\tif (!hooks || !(\"set\" in hooks) ||\n\t\t\t\t\t(value = hooks.set(elem, value, extra)) !== undefined) {\n\n\t\t\t\t\tif (isCustomProp) {\n\t\t\t\t\t\tstyle.setProperty(name, value);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tstyle[name] = value;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\t// If a hook was provided get the non-computed value from there\n\t\t\t\tif (hooks && \"get\" in hooks &&\n\t\t\t\t\t(ret = hooks.get(elem, false, extra)) !== undefined) {\n\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\n\t\t\t\t// Otherwise just get the value from the style object\n\t\t\t\treturn style[name];\n\t\t\t}\n\t\t},\n\n\t\tcss: function (elem, name, extra, styles) {\n\t\t\tvar val, num, hooks,\n\t\t\t\torigName = camelCase(name),\n\t\t\t\tisCustomProp = rcustomProp.test(name);\n\n\t\t\t// Make sure that we're working with the right name. We don't\n\t\t\t// want to modify the value if it is a CSS custom property\n\t\t\t// since they are user-defined.\n\t\t\tif (!isCustomProp) {\n\t\t\t\tname = finalPropName(origName);\n\t\t\t}\n\n\t\t\t// Try prefixed name followed by the unprefixed name\n\t\t\thooks = jQuery.cssHooks[name] || jQuery.cssHooks[origName];\n\n\t\t\t// If a hook was provided get the computed value from there\n\t\t\tif (hooks && \"get\" in hooks) {\n\t\t\t\tval = hooks.get(elem, true, extra);\n\t\t\t}\n\n\t\t\t// Otherwise, if a way to get the computed value exists, use that\n\t\t\tif (val === undefined) {\n\t\t\t\tval = curCSS(elem, name, styles);\n\t\t\t}\n\n\t\t\t// Convert \"normal\" to computed value\n\t\t\tif (val === \"normal\" && name in cssNormalTransform) {\n\t\t\t\tval = cssNormalTransform[name];\n\t\t\t}\n\n\t\t\t// Make numeric if forced or a qualifier was provided and val looks numeric\n\t\t\tif (extra === \"\" || extra) {\n\t\t\t\tnum = parseFloat(val);\n\t\t\t\treturn extra === true || isFinite(num) ? num || 0 : val;\n\t\t\t}\n\n\t\t\treturn val;\n\t\t}\n\t});\n\n\tjQuery.each([\"height\", \"width\"], function (_i, dimension) {\n\t\tjQuery.cssHooks[dimension] = {\n\t\t\tget: function (elem, computed, extra) {\n\t\t\t\tif (computed) {\n\n\t\t\t\t\t// Certain elements can have dimension info if we invisibly show them\n\t\t\t\t\t// but it must have a current display style that would benefit\n\t\t\t\t\treturn rdisplayswap.test(jQuery.css(elem, \"display\")) &&\n\n\t\t\t\t\t\t// Support: Safari 8+\n\t\t\t\t\t\t// Table columns in Safari have non-zero offsetWidth & zero\n\t\t\t\t\t\t// getBoundingClientRect().width unless display is changed.\n\t\t\t\t\t\t// Support: IE <=11 only\n\t\t\t\t\t\t// Running getBoundingClientRect on a disconnected node\n\t\t\t\t\t\t// in IE throws an error.\n\t\t\t\t\t\t(!elem.getClientRects().length || !elem.getBoundingClientRect().width) ?\n\t\t\t\t\t\tswap(elem, cssShow, function () {\n\t\t\t\t\t\t\treturn getWidthOrHeight(elem, dimension, extra);\n\t\t\t\t\t\t}) :\n\t\t\t\t\t\tgetWidthOrHeight(elem, dimension, extra);\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tset: function (elem, value, extra) {\n\t\t\t\tvar matches,\n\t\t\t\t\tstyles = getStyles(elem),\n\n\t\t\t\t\t// Only read styles.position if the test has a chance to fail\n\t\t\t\t\t// to avoid forcing a reflow.\n\t\t\t\t\tscrollboxSizeBuggy = !support.scrollboxSize() &&\n\t\t\t\t\t\tstyles.position === \"absolute\",\n\n\t\t\t\t\t// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991)\n\t\t\t\t\tboxSizingNeeded = scrollboxSizeBuggy || extra,\n\t\t\t\t\tisBorderBox = boxSizingNeeded &&\n\t\t\t\t\t\tjQuery.css(elem, \"boxSizing\", false, styles) === \"border-box\",\n\t\t\t\t\tsubtract = extra ?\n\t\t\t\t\t\tboxModelAdjustment(\n\t\t\t\t\t\t\telem,\n\t\t\t\t\t\t\tdimension,\n\t\t\t\t\t\t\textra,\n\t\t\t\t\t\t\tisBorderBox,\n\t\t\t\t\t\t\tstyles\n\t\t\t\t\t\t) :\n\t\t\t\t\t\t0;\n\n\t\t\t\t// Account for unreliable border-box dimensions by comparing offset* to computed and\n\t\t\t\t// faking a content-box to get border and padding (gh-3699)\n\t\t\t\tif (isBorderBox && scrollboxSizeBuggy) {\n\t\t\t\t\tsubtract -= Math.ceil(\n\t\t\t\t\t\telem[\"offset\" + dimension[0].toUpperCase() + dimension.slice(1)] -\n\t\t\t\t\t\tparseFloat(styles[dimension]) -\n\t\t\t\t\t\tboxModelAdjustment(elem, dimension, \"border\", false, styles) -\n\t\t\t\t\t\t0.5\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\t// Convert to pixels if value adjustment is needed\n\t\t\t\tif (subtract && (matches = rcssNum.exec(value)) &&\n\t\t\t\t\t(matches[3] || \"px\") !== \"px\") {\n\n\t\t\t\t\telem.style[dimension] = value;\n\t\t\t\t\tvalue = jQuery.css(elem, dimension);\n\t\t\t\t}\n\n\t\t\t\treturn setPositiveNumber(elem, value, subtract);\n\t\t\t}\n\t\t};\n\t});\n\n\tjQuery.cssHooks.marginLeft = addGetHookIf(support.reliableMarginLeft,\n\t\tfunction (elem, computed) {\n\t\t\tif (computed) {\n\t\t\t\treturn (parseFloat(curCSS(elem, \"marginLeft\")) ||\n\t\t\t\t\telem.getBoundingClientRect().left -\n\t\t\t\t\tswap(elem, { marginLeft: 0 }, function () {\n\t\t\t\t\t\treturn elem.getBoundingClientRect().left;\n\t\t\t\t\t})\n\t\t\t\t) + \"px\";\n\t\t\t}\n\t\t}\n\t);\n\n\t// These hooks are used by animate to expand properties\n\tjQuery.each({\n\t\tmargin: \"\",\n\t\tpadding: \"\",\n\t\tborder: \"Width\"\n\t}, function (prefix, suffix) {\n\t\tjQuery.cssHooks[prefix + suffix] = {\n\t\t\texpand: function (value) {\n\t\t\t\tvar i = 0,\n\t\t\t\t\texpanded = {},\n\n\t\t\t\t\t// Assumes a single number if not a string\n\t\t\t\t\tparts = typeof value === \"string\" ? value.split(\" \") : [value];\n\n\t\t\t\tfor (; i < 4; i++) {\n\t\t\t\t\texpanded[prefix + cssExpand[i] + suffix] =\n\t\t\t\t\t\tparts[i] || parts[i - 2] || parts[0];\n\t\t\t\t}\n\n\t\t\t\treturn expanded;\n\t\t\t}\n\t\t};\n\n\t\tif (prefix !== \"margin\") {\n\t\t\tjQuery.cssHooks[prefix + suffix].set = setPositiveNumber;\n\t\t}\n\t});\n\n\tjQuery.fn.extend({\n\t\tcss: function (name, value) {\n\t\t\treturn access(this, function (elem, name, value) {\n\t\t\t\tvar styles, len,\n\t\t\t\t\tmap = {},\n\t\t\t\t\ti = 0;\n\n\t\t\t\tif (Array.isArray(name)) {\n\t\t\t\t\tstyles = getStyles(elem);\n\t\t\t\t\tlen = name.length;\n\n\t\t\t\t\tfor (; i < len; i++) {\n\t\t\t\t\t\tmap[name[i]] = jQuery.css(elem, name[i], false, styles);\n\t\t\t\t\t}\n\n\t\t\t\t\treturn map;\n\t\t\t\t}\n\n\t\t\t\treturn value !== undefined ?\n\t\t\t\t\tjQuery.style(elem, name, value) :\n\t\t\t\t\tjQuery.css(elem, name);\n\t\t\t}, name, value, arguments.length > 1);\n\t\t}\n\t});\n\n\n\tfunction Tween(elem, options, prop, end, easing) {\n\t\treturn new Tween.prototype.init(elem, options, prop, end, easing);\n\t}\n\tjQuery.Tween = Tween;\n\n\tTween.prototype = {\n\t\tconstructor: Tween,\n\t\tinit: function (elem, options, prop, end, easing, unit) {\n\t\t\tthis.elem = elem;\n\t\t\tthis.prop = prop;\n\t\t\tthis.easing = easing || jQuery.easing._default;\n\t\t\tthis.options = options;\n\t\t\tthis.start = this.now = this.cur();\n\t\t\tthis.end = end;\n\t\t\tthis.unit = unit || (jQuery.cssNumber[prop] ? \"\" : \"px\");\n\t\t},\n\t\tcur: function () {\n\t\t\tvar hooks = Tween.propHooks[this.prop];\n\n\t\t\treturn hooks && hooks.get ?\n\t\t\t\thooks.get(this) :\n\t\t\t\tTween.propHooks._default.get(this);\n\t\t},\n\t\trun: function (percent) {\n\t\t\tvar eased,\n\t\t\t\thooks = Tween.propHooks[this.prop];\n\n\t\t\tif (this.options.duration) {\n\t\t\t\tthis.pos = eased = jQuery.easing[this.easing](\n\t\t\t\t\tpercent, this.options.duration * percent, 0, 1, this.options.duration\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tthis.pos = eased = percent;\n\t\t\t}\n\t\t\tthis.now = (this.end - this.start) * eased + this.start;\n\n\t\t\tif (this.options.step) {\n\t\t\t\tthis.options.step.call(this.elem, this.now, this);\n\t\t\t}\n\n\t\t\tif (hooks && hooks.set) {\n\t\t\t\thooks.set(this);\n\t\t\t} else {\n\t\t\t\tTween.propHooks._default.set(this);\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t};\n\n\tTween.prototype.init.prototype = Tween.prototype;\n\n\tTween.propHooks = {\n\t\t_default: {\n\t\t\tget: function (tween) {\n\t\t\t\tvar result;\n\n\t\t\t\t// Use a property on the element directly when it is not a DOM element,\n\t\t\t\t// or when there is no matching style property that exists.\n\t\t\t\tif (tween.elem.nodeType !== 1 ||\n\t\t\t\t\ttween.elem[tween.prop] != null && tween.elem.style[tween.prop] == null) {\n\t\t\t\t\treturn tween.elem[tween.prop];\n\t\t\t\t}\n\n\t\t\t\t// Passing an empty string as a 3rd parameter to .css will automatically\n\t\t\t\t// attempt a parseFloat and fallback to a string if the parse fails.\n\t\t\t\t// Simple values such as \"10px\" are parsed to Float;\n\t\t\t\t// complex values such as \"rotate(1rad)\" are returned as-is.\n\t\t\t\tresult = jQuery.css(tween.elem, tween.prop, \"\");\n\n\t\t\t\t// Empty strings, null, undefined and \"auto\" are converted to 0.\n\t\t\t\treturn !result || result === \"auto\" ? 0 : result;\n\t\t\t},\n\t\t\tset: function (tween) {\n\n\t\t\t\t// Use step hook for back compat.\n\t\t\t\t// Use cssHook if its there.\n\t\t\t\t// Use .style if available and use plain properties where available.\n\t\t\t\tif (jQuery.fx.step[tween.prop]) {\n\t\t\t\t\tjQuery.fx.step[tween.prop](tween);\n\t\t\t\t} else if (tween.elem.nodeType === 1 && (\n\t\t\t\t\tjQuery.cssHooks[tween.prop] ||\n\t\t\t\t\ttween.elem.style[finalPropName(tween.prop)] != null)) {\n\t\t\t\t\tjQuery.style(tween.elem, tween.prop, tween.now + tween.unit);\n\t\t\t\t} else {\n\t\t\t\t\ttween.elem[tween.prop] = tween.now;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t// Support: IE <=9 only\n\t// Panic based approach to setting things on disconnected nodes\n\tTween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {\n\t\tset: function (tween) {\n\t\t\tif (tween.elem.nodeType && tween.elem.parentNode) {\n\t\t\t\ttween.elem[tween.prop] = tween.now;\n\t\t\t}\n\t\t}\n\t};\n\n\tjQuery.easing = {\n\t\tlinear: function (p) {\n\t\t\treturn p;\n\t\t},\n\t\tswing: function (p) {\n\t\t\treturn 0.5 - Math.cos(p * Math.PI) / 2;\n\t\t},\n\t\t_default: \"swing\"\n\t};\n\n\tjQuery.fx = Tween.prototype.init;\n\n\t// Back compat <1.8 extension point\n\tjQuery.fx.step = {};\n\n\n\n\n\tvar\n\t\tfxNow, inProgress,\n\t\trfxtypes = /^(?:toggle|show|hide)$/,\n\t\trrun = /queueHooks$/;\n\n\tfunction schedule() {\n\t\tif (inProgress) {\n\t\t\tif (document.hidden === false && window.requestAnimationFrame) {\n\t\t\t\twindow.requestAnimationFrame(schedule);\n\t\t\t} else {\n\t\t\t\twindow.setTimeout(schedule, jQuery.fx.interval);\n\t\t\t}\n\n\t\t\tjQuery.fx.tick();\n\t\t}\n\t}\n\n\t// Animations created synchronously will run synchronously\n\tfunction createFxNow() {\n\t\twindow.setTimeout(function () {\n\t\t\tfxNow = undefined;\n\t\t});\n\t\treturn (fxNow = Date.now());\n\t}\n\n\t// Generate parameters to create a standard animation\n\tfunction genFx(type, includeWidth) {\n\t\tvar which,\n\t\t\ti = 0,\n\t\t\tattrs = { height: type };\n\n\t\t// If we include width, step value is 1 to do all cssExpand values,\n\t\t// otherwise step value is 2 to skip over Left and Right\n\t\tincludeWidth = includeWidth ? 1 : 0;\n\t\tfor (; i < 4; i += 2 - includeWidth) {\n\t\t\twhich = cssExpand[i];\n\t\t\tattrs[\"margin\" + which] = attrs[\"padding\" + which] = type;\n\t\t}\n\n\t\tif (includeWidth) {\n\t\t\tattrs.opacity = attrs.width = type;\n\t\t}\n\n\t\treturn attrs;\n\t}\n\n\tfunction createTween(value, prop, animation) {\n\t\tvar tween,\n\t\t\tcollection = (Animation.tweeners[prop] || []).concat(Animation.tweeners[\"*\"]),\n\t\t\tindex = 0,\n\t\t\tlength = collection.length;\n\t\tfor (; index < length; index++) {\n\t\t\tif ((tween = collection[index].call(animation, prop, value))) {\n\n\t\t\t\t// We're done with this property\n\t\t\t\treturn tween;\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction defaultPrefilter(elem, props, opts) {\n\t\tvar prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display,\n\t\t\tisBox = \"width\" in props || \"height\" in props,\n\t\t\tanim = this,\n\t\t\torig = {},\n\t\t\tstyle = elem.style,\n\t\t\thidden = elem.nodeType && isHiddenWithinTree(elem),\n\t\t\tdataShow = dataPriv.get(elem, \"fxshow\");\n\n\t\t// Queue-skipping animations hijack the fx hooks\n\t\tif (!opts.queue) {\n\t\t\thooks = jQuery._queueHooks(elem, \"fx\");\n\t\t\tif (hooks.unqueued == null) {\n\t\t\t\thooks.unqueued = 0;\n\t\t\t\toldfire = hooks.empty.fire;\n\t\t\t\thooks.empty.fire = function () {\n\t\t\t\t\tif (!hooks.unqueued) {\n\t\t\t\t\t\toldfire();\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t\thooks.unqueued++;\n\n\t\t\tanim.always(function () {\n\n\t\t\t\t// Ensure the complete handler is called before this completes\n\t\t\t\tanim.always(function () {\n\t\t\t\t\thooks.unqueued--;\n\t\t\t\t\tif (!jQuery.queue(elem, \"fx\").length) {\n\t\t\t\t\t\thooks.empty.fire();\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\n\t\t// Detect show/hide animations\n\t\tfor (prop in props) {\n\t\t\tvalue = props[prop];\n\t\t\tif (rfxtypes.test(value)) {\n\t\t\t\tdelete props[prop];\n\t\t\t\ttoggle = toggle || value === \"toggle\";\n\t\t\t\tif (value === (hidden ? \"hide\" : \"show\")) {\n\n\t\t\t\t\t// Pretend to be hidden if this is a \"show\" and\n\t\t\t\t\t// there is still data from a stopped show/hide\n\t\t\t\t\tif (value === \"show\" && dataShow && dataShow[prop] !== undefined) {\n\t\t\t\t\t\thidden = true;\n\n\t\t\t\t\t\t// Ignore all other no-op show/hide data\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\torig[prop] = dataShow && dataShow[prop] || jQuery.style(elem, prop);\n\t\t\t}\n\t\t}\n\n\t\t// Bail out if this is a no-op like .hide().hide()\n\t\tpropTween = !jQuery.isEmptyObject(props);\n\t\tif (!propTween && jQuery.isEmptyObject(orig)) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Restrict \"overflow\" and \"display\" styles during box animations\n\t\tif (isBox && elem.nodeType === 1) {\n\n\t\t\t// Support: IE <=9 - 11, Edge 12 - 15\n\t\t\t// Record all 3 overflow attributes because IE does not infer the shorthand\n\t\t\t// from identically-valued overflowX and overflowY and Edge just mirrors\n\t\t\t// the overflowX value there.\n\t\t\topts.overflow = [style.overflow, style.overflowX, style.overflowY];\n\n\t\t\t// Identify a display type, preferring old show/hide data over the CSS cascade\n\t\t\trestoreDisplay = dataShow && dataShow.display;\n\t\t\tif (restoreDisplay == null) {\n\t\t\t\trestoreDisplay = dataPriv.get(elem, \"display\");\n\t\t\t}\n\t\t\tdisplay = jQuery.css(elem, \"display\");\n\t\t\tif (display === \"none\") {\n\t\t\t\tif (restoreDisplay) {\n\t\t\t\t\tdisplay = restoreDisplay;\n\t\t\t\t} else {\n\n\t\t\t\t\t// Get nonempty value(s) by temporarily forcing visibility\n\t\t\t\t\tshowHide([elem], true);\n\t\t\t\t\trestoreDisplay = elem.style.display || restoreDisplay;\n\t\t\t\t\tdisplay = jQuery.css(elem, \"display\");\n\t\t\t\t\tshowHide([elem]);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Animate inline elements as inline-block\n\t\t\tif (display === \"inline\" || display === \"inline-block\" && restoreDisplay != null) {\n\t\t\t\tif (jQuery.css(elem, \"float\") === \"none\") {\n\n\t\t\t\t\t// Restore the original display value at the end of pure show/hide animations\n\t\t\t\t\tif (!propTween) {\n\t\t\t\t\t\tanim.done(function () {\n\t\t\t\t\t\t\tstyle.display = restoreDisplay;\n\t\t\t\t\t\t});\n\t\t\t\t\t\tif (restoreDisplay == null) {\n\t\t\t\t\t\t\tdisplay = style.display;\n\t\t\t\t\t\t\trestoreDisplay = display === \"none\" ? \"\" : display;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tstyle.display = \"inline-block\";\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (opts.overflow) {\n\t\t\tstyle.overflow = \"hidden\";\n\t\t\tanim.always(function () {\n\t\t\t\tstyle.overflow = opts.overflow[0];\n\t\t\t\tstyle.overflowX = opts.overflow[1];\n\t\t\t\tstyle.overflowY = opts.overflow[2];\n\t\t\t});\n\t\t}\n\n\t\t// Implement show/hide animations\n\t\tpropTween = false;\n\t\tfor (prop in orig) {\n\n\t\t\t// General show/hide setup for this element animation\n\t\t\tif (!propTween) {\n\t\t\t\tif (dataShow) {\n\t\t\t\t\tif (\"hidden\" in dataShow) {\n\t\t\t\t\t\thidden = dataShow.hidden;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tdataShow = dataPriv.access(elem, \"fxshow\", { display: restoreDisplay });\n\t\t\t\t}\n\n\t\t\t\t// Store hidden/visible for toggle so `.stop().toggle()` \"reverses\"\n\t\t\t\tif (toggle) {\n\t\t\t\t\tdataShow.hidden = !hidden;\n\t\t\t\t}\n\n\t\t\t\t// Show elements before animating them\n\t\t\t\tif (hidden) {\n\t\t\t\t\tshowHide([elem], true);\n\t\t\t\t}\n\n\t\t\t\t/* eslint-disable no-loop-func */\n\n\t\t\t\tanim.done(function () {\n\n\t\t\t\t\t/* eslint-enable no-loop-func */\n\n\t\t\t\t\t// The final step of a \"hide\" animation is actually hiding the element\n\t\t\t\t\tif (!hidden) {\n\t\t\t\t\t\tshowHide([elem]);\n\t\t\t\t\t}\n\t\t\t\t\tdataPriv.remove(elem, \"fxshow\");\n\t\t\t\t\tfor (prop in orig) {\n\t\t\t\t\t\tjQuery.style(elem, prop, orig[prop]);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// Per-property setup\n\t\t\tpropTween = createTween(hidden ? dataShow[prop] : 0, prop, anim);\n\t\t\tif (!(prop in dataShow)) {\n\t\t\t\tdataShow[prop] = propTween.start;\n\t\t\t\tif (hidden) {\n\t\t\t\t\tpropTween.end = propTween.start;\n\t\t\t\t\tpropTween.start = 0;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction propFilter(props, specialEasing) {\n\t\tvar index, name, easing, value, hooks;\n\n\t\t// camelCase, specialEasing and expand cssHook pass\n\t\tfor (index in props) {\n\t\t\tname = camelCase(index);\n\t\t\teasing = specialEasing[name];\n\t\t\tvalue = props[index];\n\t\t\tif (Array.isArray(value)) {\n\t\t\t\teasing = value[1];\n\t\t\t\tvalue = props[index] = value[0];\n\t\t\t}\n\n\t\t\tif (index !== name) {\n\t\t\t\tprops[name] = value;\n\t\t\t\tdelete props[index];\n\t\t\t}\n\n\t\t\thooks = jQuery.cssHooks[name];\n\t\t\tif (hooks && \"expand\" in hooks) {\n\t\t\t\tvalue = hooks.expand(value);\n\t\t\t\tdelete props[name];\n\n\t\t\t\t// Not quite $.extend, this won't overwrite existing keys.\n\t\t\t\t// Reusing 'index' because we have the correct \"name\"\n\t\t\t\tfor (index in value) {\n\t\t\t\t\tif (!(index in props)) {\n\t\t\t\t\t\tprops[index] = value[index];\n\t\t\t\t\t\tspecialEasing[index] = easing;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tspecialEasing[name] = easing;\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction Animation(elem, properties, options) {\n\t\tvar result,\n\t\t\tstopped,\n\t\t\tindex = 0,\n\t\t\tlength = Animation.prefilters.length,\n\t\t\tdeferred = jQuery.Deferred().always(function () {\n\n\t\t\t\t// Don't match elem in the :animated selector\n\t\t\t\tdelete tick.elem;\n\t\t\t}),\n\t\t\ttick = function () {\n\t\t\t\tif (stopped) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tvar currentTime = fxNow || createFxNow(),\n\t\t\t\t\tremaining = Math.max(0, animation.startTime + animation.duration - currentTime),\n\n\t\t\t\t\t// Support: Android 2.3 only\n\t\t\t\t\t// Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (trac-12497)\n\t\t\t\t\ttemp = remaining / animation.duration || 0,\n\t\t\t\t\tpercent = 1 - temp,\n\t\t\t\t\tindex = 0,\n\t\t\t\t\tlength = animation.tweens.length;\n\n\t\t\t\tfor (; index < length; index++) {\n\t\t\t\t\tanimation.tweens[index].run(percent);\n\t\t\t\t}\n\n\t\t\t\tdeferred.notifyWith(elem, [animation, percent, remaining]);\n\n\t\t\t\t// If there's more to do, yield\n\t\t\t\tif (percent < 1 && length) {\n\t\t\t\t\treturn remaining;\n\t\t\t\t}\n\n\t\t\t\t// If this was an empty animation, synthesize a final progress notification\n\t\t\t\tif (!length) {\n\t\t\t\t\tdeferred.notifyWith(elem, [animation, 1, 0]);\n\t\t\t\t}\n\n\t\t\t\t// Resolve the animation and report its conclusion\n\t\t\t\tdeferred.resolveWith(elem, [animation]);\n\t\t\t\treturn false;\n\t\t\t},\n\t\t\tanimation = deferred.promise({\n\t\t\t\telem: elem,\n\t\t\t\tprops: jQuery.extend({}, properties),\n\t\t\t\topts: jQuery.extend(true, {\n\t\t\t\t\tspecialEasing: {},\n\t\t\t\t\teasing: jQuery.easing._default\n\t\t\t\t}, options),\n\t\t\t\toriginalProperties: properties,\n\t\t\t\toriginalOptions: options,\n\t\t\t\tstartTime: fxNow || createFxNow(),\n\t\t\t\tduration: options.duration,\n\t\t\t\ttweens: [],\n\t\t\t\tcreateTween: function (prop, end) {\n\t\t\t\t\tvar tween = jQuery.Tween(elem, animation.opts, prop, end,\n\t\t\t\t\t\tanimation.opts.specialEasing[prop] || animation.opts.easing);\n\t\t\t\t\tanimation.tweens.push(tween);\n\t\t\t\t\treturn tween;\n\t\t\t\t},\n\t\t\t\tstop: function (gotoEnd) {\n\t\t\t\t\tvar index = 0,\n\n\t\t\t\t\t\t// If we are going to the end, we want to run all the tweens\n\t\t\t\t\t\t// otherwise we skip this part\n\t\t\t\t\t\tlength = gotoEnd ? animation.tweens.length : 0;\n\t\t\t\t\tif (stopped) {\n\t\t\t\t\t\treturn this;\n\t\t\t\t\t}\n\t\t\t\t\tstopped = true;\n\t\t\t\t\tfor (; index < length; index++) {\n\t\t\t\t\t\tanimation.tweens[index].run(1);\n\t\t\t\t\t}\n\n\t\t\t\t\t// Resolve when we played the last frame; otherwise, reject\n\t\t\t\t\tif (gotoEnd) {\n\t\t\t\t\t\tdeferred.notifyWith(elem, [animation, 1, 0]);\n\t\t\t\t\t\tdeferred.resolveWith(elem, [animation, gotoEnd]);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdeferred.rejectWith(elem, [animation, gotoEnd]);\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t}),\n\t\t\tprops = animation.props;\n\n\t\tpropFilter(props, animation.opts.specialEasing);\n\n\t\tfor (; index < length; index++) {\n\t\t\tresult = Animation.prefilters[index].call(animation, elem, props, animation.opts);\n\t\t\tif (result) {\n\t\t\t\tif (isFunction(result.stop)) {\n\t\t\t\t\tjQuery._queueHooks(animation.elem, animation.opts.queue).stop =\n\t\t\t\t\t\tresult.stop.bind(result);\n\t\t\t\t}\n\t\t\t\treturn result;\n\t\t\t}\n\t\t}\n\n\t\tjQuery.map(props, createTween, animation);\n\n\t\tif (isFunction(animation.opts.start)) {\n\t\t\tanimation.opts.start.call(elem, animation);\n\t\t}\n\n\t\t// Attach callbacks from options\n\t\tanimation\n\t\t\t.progress(animation.opts.progress)\n\t\t\t.done(animation.opts.done, animation.opts.complete)\n\t\t\t.fail(animation.opts.fail)\n\t\t\t.always(animation.opts.always);\n\n\t\tjQuery.fx.timer(\n\t\t\tjQuery.extend(tick, {\n\t\t\t\telem: elem,\n\t\t\t\tanim: animation,\n\t\t\t\tqueue: animation.opts.queue\n\t\t\t})\n\t\t);\n\n\t\treturn animation;\n\t}\n\n\tjQuery.Animation = jQuery.extend(Animation, {\n\n\t\ttweeners: {\n\t\t\t\"*\": [function (prop, value) {\n\t\t\t\tvar tween = this.createTween(prop, value);\n\t\t\t\tadjustCSS(tween.elem, prop, rcssNum.exec(value), tween);\n\t\t\t\treturn tween;\n\t\t\t}]\n\t\t},\n\n\t\ttweener: function (props, callback) {\n\t\t\tif (isFunction(props)) {\n\t\t\t\tcallback = props;\n\t\t\t\tprops = [\"*\"];\n\t\t\t} else {\n\t\t\t\tprops = props.match(rnothtmlwhite);\n\t\t\t}\n\n\t\t\tvar prop,\n\t\t\t\tindex = 0,\n\t\t\t\tlength = props.length;\n\n\t\t\tfor (; index < length; index++) {\n\t\t\t\tprop = props[index];\n\t\t\t\tAnimation.tweeners[prop] = Animation.tweeners[prop] || [];\n\t\t\t\tAnimation.tweeners[prop].unshift(callback);\n\t\t\t}\n\t\t},\n\n\t\tprefilters: [defaultPrefilter],\n\n\t\tprefilter: function (callback, prepend) {\n\t\t\tif (prepend) {\n\t\t\t\tAnimation.prefilters.unshift(callback);\n\t\t\t} else {\n\t\t\t\tAnimation.prefilters.push(callback);\n\t\t\t}\n\t\t}\n\t});\n\n\tjQuery.speed = function (speed, easing, fn) {\n\t\tvar opt = speed && typeof speed === \"object\" ? jQuery.extend({}, speed) : {\n\t\t\tcomplete: fn || !fn && easing ||\n\t\t\t\tisFunction(speed) && speed,\n\t\t\tduration: speed,\n\t\t\teasing: fn && easing || easing && !isFunction(easing) && easing\n\t\t};\n\n\t\t// Go to the end state if fx are off\n\t\tif (jQuery.fx.off) {\n\t\t\topt.duration = 0;\n\n\t\t} else {\n\t\t\tif (typeof opt.duration !== \"number\") {\n\t\t\t\tif (opt.duration in jQuery.fx.speeds) {\n\t\t\t\t\topt.duration = jQuery.fx.speeds[opt.duration];\n\n\t\t\t\t} else {\n\t\t\t\t\topt.duration = jQuery.fx.speeds._default;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Normalize opt.queue - true/undefined/null -> \"fx\"\n\t\tif (opt.queue == null || opt.queue === true) {\n\t\t\topt.queue = \"fx\";\n\t\t}\n\n\t\t// Queueing\n\t\topt.old = opt.complete;\n\n\t\topt.complete = function () {\n\t\t\tif (isFunction(opt.old)) {\n\t\t\t\topt.old.call(this);\n\t\t\t}\n\n\t\t\tif (opt.queue) {\n\t\t\t\tjQuery.dequeue(this, opt.queue);\n\t\t\t}\n\t\t};\n\n\t\treturn opt;\n\t};\n\n\tjQuery.fn.extend({\n\t\tfadeTo: function (speed, to, easing, callback) {\n\n\t\t\t// Show any hidden elements after setting opacity to 0\n\t\t\treturn this.filter(isHiddenWithinTree).css(\"opacity\", 0).show()\n\n\t\t\t\t// Animate to the value specified\n\t\t\t\t.end().animate({ opacity: to }, speed, easing, callback);\n\t\t},\n\t\tanimate: function (prop, speed, easing, callback) {\n\t\t\tvar empty = jQuery.isEmptyObject(prop),\n\t\t\t\toptall = jQuery.speed(speed, easing, callback),\n\t\t\t\tdoAnimation = function () {\n\n\t\t\t\t\t// Operate on a copy of prop so per-property easing won't be lost\n\t\t\t\t\tvar anim = Animation(this, jQuery.extend({}, prop), optall);\n\n\t\t\t\t\t// Empty animations, or finishing resolves immediately\n\t\t\t\t\tif (empty || dataPriv.get(this, \"finish\")) {\n\t\t\t\t\t\tanim.stop(true);\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\tdoAnimation.finish = doAnimation;\n\n\t\t\treturn empty || optall.queue === false ?\n\t\t\t\tthis.each(doAnimation) :\n\t\t\t\tthis.queue(optall.queue, doAnimation);\n\t\t},\n\t\tstop: function (type, clearQueue, gotoEnd) {\n\t\t\tvar stopQueue = function (hooks) {\n\t\t\t\tvar stop = hooks.stop;\n\t\t\t\tdelete hooks.stop;\n\t\t\t\tstop(gotoEnd);\n\t\t\t};\n\n\t\t\tif (typeof type !== \"string\") {\n\t\t\t\tgotoEnd = clearQueue;\n\t\t\t\tclearQueue = type;\n\t\t\t\ttype = undefined;\n\t\t\t}\n\t\t\tif (clearQueue) {\n\t\t\t\tthis.queue(type || \"fx\", []);\n\t\t\t}\n\n\t\t\treturn this.each(function () {\n\t\t\t\tvar dequeue = true,\n\t\t\t\t\tindex = type != null && type + \"queueHooks\",\n\t\t\t\t\ttimers = jQuery.timers,\n\t\t\t\t\tdata = dataPriv.get(this);\n\n\t\t\t\tif (index) {\n\t\t\t\t\tif (data[index] && data[index].stop) {\n\t\t\t\t\t\tstopQueue(data[index]);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tfor (index in data) {\n\t\t\t\t\t\tif (data[index] && data[index].stop && rrun.test(index)) {\n\t\t\t\t\t\t\tstopQueue(data[index]);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tfor (index = timers.length; index--;) {\n\t\t\t\t\tif (timers[index].elem === this &&\n\t\t\t\t\t\t(type == null || timers[index].queue === type)) {\n\n\t\t\t\t\t\ttimers[index].anim.stop(gotoEnd);\n\t\t\t\t\t\tdequeue = false;\n\t\t\t\t\t\ttimers.splice(index, 1);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Start the next in the queue if the last step wasn't forced.\n\t\t\t\t// Timers currently will call their complete callbacks, which\n\t\t\t\t// will dequeue but only if they were gotoEnd.\n\t\t\t\tif (dequeue || !gotoEnd) {\n\t\t\t\t\tjQuery.dequeue(this, type);\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\t\tfinish: function (type) {\n\t\t\tif (type !== false) {\n\t\t\t\ttype = type || \"fx\";\n\t\t\t}\n\t\t\treturn this.each(function () {\n\t\t\t\tvar index,\n\t\t\t\t\tdata = dataPriv.get(this),\n\t\t\t\t\tqueue = data[type + \"queue\"],\n\t\t\t\t\thooks = data[type + \"queueHooks\"],\n\t\t\t\t\ttimers = jQuery.timers,\n\t\t\t\t\tlength = queue ? queue.length : 0;\n\n\t\t\t\t// Enable finishing flag on private data\n\t\t\t\tdata.finish = true;\n\n\t\t\t\t// Empty the queue first\n\t\t\t\tjQuery.queue(this, type, []);\n\n\t\t\t\tif (hooks && hooks.stop) {\n\t\t\t\t\thooks.stop.call(this, true);\n\t\t\t\t}\n\n\t\t\t\t// Look for any active animations, and finish them\n\t\t\t\tfor (index = timers.length; index--;) {\n\t\t\t\t\tif (timers[index].elem === this && timers[index].queue === type) {\n\t\t\t\t\t\ttimers[index].anim.stop(true);\n\t\t\t\t\t\ttimers.splice(index, 1);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Look for any animations in the old queue and finish them\n\t\t\t\tfor (index = 0; index < length; index++) {\n\t\t\t\t\tif (queue[index] && queue[index].finish) {\n\t\t\t\t\t\tqueue[index].finish.call(this);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Turn off finishing flag\n\t\t\t\tdelete data.finish;\n\t\t\t});\n\t\t}\n\t});\n\n\tjQuery.each([\"toggle\", \"show\", \"hide\"], function (_i, name) {\n\t\tvar cssFn = jQuery.fn[name];\n\t\tjQuery.fn[name] = function (speed, easing, callback) {\n\t\t\treturn speed == null || typeof speed === \"boolean\" ?\n\t\t\t\tcssFn.apply(this, arguments) :\n\t\t\t\tthis.animate(genFx(name, true), speed, easing, callback);\n\t\t};\n\t});\n\n\t// Generate shortcuts for custom animations\n\tjQuery.each({\n\t\tslideDown: genFx(\"show\"),\n\t\tslideUp: genFx(\"hide\"),\n\t\tslideToggle: genFx(\"toggle\"),\n\t\tfadeIn: { opacity: \"show\" },\n\t\tfadeOut: { opacity: \"hide\" },\n\t\tfadeToggle: { opacity: \"toggle\" }\n\t}, function (name, props) {\n\t\tjQuery.fn[name] = function (speed, easing, callback) {\n\t\t\treturn this.animate(props, speed, easing, callback);\n\t\t};\n\t});\n\n\tjQuery.timers = [];\n\tjQuery.fx.tick = function () {\n\t\tvar timer,\n\t\t\ti = 0,\n\t\t\ttimers = jQuery.timers;\n\n\t\tfxNow = Date.now();\n\n\t\tfor (; i < timers.length; i++) {\n\t\t\ttimer = timers[i];\n\n\t\t\t// Run the timer and safely remove it when done (allowing for external removal)\n\t\t\tif (!timer() && timers[i] === timer) {\n\t\t\t\ttimers.splice(i--, 1);\n\t\t\t}\n\t\t}\n\n\t\tif (!timers.length) {\n\t\t\tjQuery.fx.stop();\n\t\t}\n\t\tfxNow = undefined;\n\t};\n\n\tjQuery.fx.timer = function (timer) {\n\t\tjQuery.timers.push(timer);\n\t\tjQuery.fx.start();\n\t};\n\n\tjQuery.fx.interval = 13;\n\tjQuery.fx.start = function () {\n\t\tif (inProgress) {\n\t\t\treturn;\n\t\t}\n\n\t\tinProgress = true;\n\t\tschedule();\n\t};\n\n\tjQuery.fx.stop = function () {\n\t\tinProgress = null;\n\t};\n\n\tjQuery.fx.speeds = {\n\t\tslow: 600,\n\t\tfast: 200,\n\n\t\t// Default speed\n\t\t_default: 400\n\t};\n\n\n\t// Based off of the plugin by Clint Helfers, with permission.\n\tjQuery.fn.delay = function (time, type) {\n\t\ttime = jQuery.fx ? jQuery.fx.speeds[time] || time : time;\n\t\ttype = type || \"fx\";\n\n\t\treturn this.queue(type, function (next, hooks) {\n\t\t\tvar timeout = window.setTimeout(next, time);\n\t\t\thooks.stop = function () {\n\t\t\t\twindow.clearTimeout(timeout);\n\t\t\t};\n\t\t});\n\t};\n\n\n\t(function () {\n\t\tvar input = document.createElement(\"input\"),\n\t\t\tselect = document.createElement(\"select\"),\n\t\t\topt = select.appendChild(document.createElement(\"option\"));\n\n\t\tinput.type = \"checkbox\";\n\n\t\t// Support: Android <=4.3 only\n\t\t// Default value for a checkbox should be \"on\"\n\t\tsupport.checkOn = input.value !== \"\";\n\n\t\t// Support: IE <=11 only\n\t\t// Must access selectedIndex to make default options select\n\t\tsupport.optSelected = opt.selected;\n\n\t\t// Support: IE <=11 only\n\t\t// An input loses its value after becoming a radio\n\t\tinput = document.createElement(\"input\");\n\t\tinput.value = \"t\";\n\t\tinput.type = \"radio\";\n\t\tsupport.radioValue = input.value === \"t\";\n\t})();\n\n\n\tvar boolHook,\n\t\tattrHandle = jQuery.expr.attrHandle;\n\n\tjQuery.fn.extend({\n\t\tattr: function (name, value) {\n\t\t\treturn access(this, jQuery.attr, name, value, arguments.length > 1);\n\t\t},\n\n\t\tremoveAttr: function (name) {\n\t\t\treturn this.each(function () {\n\t\t\t\tjQuery.removeAttr(this, name);\n\t\t\t});\n\t\t}\n\t});\n\n\tjQuery.extend({\n\t\tattr: function (elem, name, value) {\n\t\t\tvar ret, hooks,\n\t\t\t\tnType = elem.nodeType;\n\n\t\t\t// Don't get/set attributes on text, comment and attribute nodes\n\t\t\tif (nType === 3 || nType === 8 || nType === 2) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Fallback to prop when attributes are not supported\n\t\t\tif (typeof elem.getAttribute === \"undefined\") {\n\t\t\t\treturn jQuery.prop(elem, name, value);\n\t\t\t}\n\n\t\t\t// Attribute hooks are determined by the lowercase version\n\t\t\t// Grab necessary hook if one is defined\n\t\t\tif (nType !== 1 || !jQuery.isXMLDoc(elem)) {\n\t\t\t\thooks = jQuery.attrHooks[name.toLowerCase()] ||\n\t\t\t\t\t(jQuery.expr.match.bool.test(name) ? boolHook : undefined);\n\t\t\t}\n\n\t\t\tif (value !== undefined) {\n\t\t\t\tif (value === null) {\n\t\t\t\t\tjQuery.removeAttr(elem, name);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (hooks && \"set\" in hooks &&\n\t\t\t\t\t(ret = hooks.set(elem, value, name)) !== undefined) {\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\n\t\t\t\telem.setAttribute(name, value + \"\");\n\t\t\t\treturn value;\n\t\t\t}\n\n\t\t\tif (hooks && \"get\" in hooks && (ret = hooks.get(elem, name)) !== null) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\tret = jQuery.find.attr(elem, name);\n\n\t\t\t// Non-existent attributes return null, we normalize to undefined\n\t\t\treturn ret == null ? undefined : ret;\n\t\t},\n\n\t\tattrHooks: {\n\t\t\ttype: {\n\t\t\t\tset: function (elem, value) {\n\t\t\t\t\tif (!support.radioValue && value === \"radio\" &&\n\t\t\t\t\t\tnodeName(elem, \"input\")) {\n\t\t\t\t\t\tvar val = elem.value;\n\t\t\t\t\t\telem.setAttribute(\"type\", value);\n\t\t\t\t\t\tif (val) {\n\t\t\t\t\t\t\telem.value = val;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn value;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tremoveAttr: function (elem, value) {\n\t\t\tvar name,\n\t\t\t\ti = 0,\n\n\t\t\t\t// Attribute names can contain non-HTML whitespace characters\n\t\t\t\t// https://html.spec.whatwg.org/multipage/syntax.html#attributes-2\n\t\t\t\tattrNames = value && value.match(rnothtmlwhite);\n\n\t\t\tif (attrNames && elem.nodeType === 1) {\n\t\t\t\twhile ((name = attrNames[i++])) {\n\t\t\t\t\telem.removeAttribute(name);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\n\t// Hooks for boolean attributes\n\tboolHook = {\n\t\tset: function (elem, value, name) {\n\t\t\tif (value === false) {\n\n\t\t\t\t// Remove boolean attributes when set to false\n\t\t\t\tjQuery.removeAttr(elem, name);\n\t\t\t} else {\n\t\t\t\telem.setAttribute(name, name);\n\t\t\t}\n\t\t\treturn name;\n\t\t}\n\t};\n\n\tjQuery.each(jQuery.expr.match.bool.source.match(/\\w+/g), function (_i, name) {\n\t\tvar getter = attrHandle[name] || jQuery.find.attr;\n\n\t\tattrHandle[name] = function (elem, name, isXML) {\n\t\t\tvar ret, handle,\n\t\t\t\tlowercaseName = name.toLowerCase();\n\n\t\t\tif (!isXML) {\n\n\t\t\t\t// Avoid an infinite loop by temporarily removing this function from the getter\n\t\t\t\thandle = attrHandle[lowercaseName];\n\t\t\t\tattrHandle[lowercaseName] = ret;\n\t\t\t\tret = getter(elem, name, isXML) != null ?\n\t\t\t\t\tlowercaseName :\n\t\t\t\t\tnull;\n\t\t\t\tattrHandle[lowercaseName] = handle;\n\t\t\t}\n\t\t\treturn ret;\n\t\t};\n\t});\n\n\n\n\n\tvar rfocusable = /^(?:input|select|textarea|button)$/i,\n\t\trclickable = /^(?:a|area)$/i;\n\n\tjQuery.fn.extend({\n\t\tprop: function (name, value) {\n\t\t\treturn access(this, jQuery.prop, name, value, arguments.length > 1);\n\t\t},\n\n\t\tremoveProp: function (name) {\n\t\t\treturn this.each(function () {\n\t\t\t\tdelete this[jQuery.propFix[name] || name];\n\t\t\t});\n\t\t}\n\t});\n\n\tjQuery.extend({\n\t\tprop: function (elem, name, value) {\n\t\t\tvar ret, hooks,\n\t\t\t\tnType = elem.nodeType;\n\n\t\t\t// Don't get/set properties on text, comment and attribute nodes\n\t\t\tif (nType === 3 || nType === 8 || nType === 2) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (nType !== 1 || !jQuery.isXMLDoc(elem)) {\n\n\t\t\t\t// Fix name and attach hooks\n\t\t\t\tname = jQuery.propFix[name] || name;\n\t\t\t\thooks = jQuery.propHooks[name];\n\t\t\t}\n\n\t\t\tif (value !== undefined) {\n\t\t\t\tif (hooks && \"set\" in hooks &&\n\t\t\t\t\t(ret = hooks.set(elem, value, name)) !== undefined) {\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\n\t\t\t\treturn (elem[name] = value);\n\t\t\t}\n\n\t\t\tif (hooks && \"get\" in hooks && (ret = hooks.get(elem, name)) !== null) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\treturn elem[name];\n\t\t},\n\n\t\tpropHooks: {\n\t\t\ttabIndex: {\n\t\t\t\tget: function (elem) {\n\n\t\t\t\t\t// Support: IE <=9 - 11 only\n\t\t\t\t\t// elem.tabIndex doesn't always return the\n\t\t\t\t\t// correct value when it hasn't been explicitly set\n\t\t\t\t\t// Use proper attribute retrieval (trac-12072)\n\t\t\t\t\tvar tabindex = jQuery.find.attr(elem, \"tabindex\");\n\n\t\t\t\t\tif (tabindex) {\n\t\t\t\t\t\treturn parseInt(tabindex, 10);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (\n\t\t\t\t\t\trfocusable.test(elem.nodeName) ||\n\t\t\t\t\t\trclickable.test(elem.nodeName) &&\n\t\t\t\t\t\telem.href\n\t\t\t\t\t) {\n\t\t\t\t\t\treturn 0;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn -1;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tpropFix: {\n\t\t\t\"for\": \"htmlFor\",\n\t\t\t\"class\": \"className\"\n\t\t}\n\t});\n\n\t// Support: IE <=11 only\n\t// Accessing the selectedIndex property\n\t// forces the browser to respect setting selected\n\t// on the option\n\t// The getter ensures a default option is selected\n\t// when in an optgroup\n\t// eslint rule \"no-unused-expressions\" is disabled for this code\n\t// since it considers such accessions noop\n\tif (!support.optSelected) {\n\t\tjQuery.propHooks.selected = {\n\t\t\tget: function (elem) {\n\n\t\t\t\t/* eslint no-unused-expressions: \"off\" */\n\n\t\t\t\tvar parent = elem.parentNode;\n\t\t\t\tif (parent && parent.parentNode) {\n\t\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t\t}\n\t\t\t\treturn null;\n\t\t\t},\n\t\t\tset: function (elem) {\n\n\t\t\t\t/* eslint no-unused-expressions: \"off\" */\n\n\t\t\t\tvar parent = elem.parentNode;\n\t\t\t\tif (parent) {\n\t\t\t\t\tparent.selectedIndex;\n\n\t\t\t\t\tif (parent.parentNode) {\n\t\t\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n\n\tjQuery.each([\n\t\t\"tabIndex\",\n\t\t\"readOnly\",\n\t\t\"maxLength\",\n\t\t\"cellSpacing\",\n\t\t\"cellPadding\",\n\t\t\"rowSpan\",\n\t\t\"colSpan\",\n\t\t\"useMap\",\n\t\t\"frameBorder\",\n\t\t\"contentEditable\"\n\t], function () {\n\t\tjQuery.propFix[this.toLowerCase()] = this;\n\t});\n\n\n\n\n\t// Strip and collapse whitespace according to HTML spec\n\t// https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace\n\tfunction stripAndCollapse(value) {\n\t\tvar tokens = value.match(rnothtmlwhite) || [];\n\t\treturn tokens.join(\" \");\n\t}\n\n\n\tfunction getClass(elem) {\n\t\treturn elem.getAttribute && elem.getAttribute(\"class\") || \"\";\n\t}\n\n\tfunction classesToArray(value) {\n\t\tif (Array.isArray(value)) {\n\t\t\treturn value;\n\t\t}\n\t\tif (typeof value === \"string\") {\n\t\t\treturn value.match(rnothtmlwhite) || [];\n\t\t}\n\t\treturn [];\n\t}\n\n\tjQuery.fn.extend({\n\t\taddClass: function (value) {\n\t\t\tvar classNames, cur, curValue, className, i, finalValue;\n\n\t\t\tif (isFunction(value)) {\n\t\t\t\treturn this.each(function (j) {\n\t\t\t\t\tjQuery(this).addClass(value.call(this, j, getClass(this)));\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tclassNames = classesToArray(value);\n\n\t\t\tif (classNames.length) {\n\t\t\t\treturn this.each(function () {\n\t\t\t\t\tcurValue = getClass(this);\n\t\t\t\t\tcur = this.nodeType === 1 && (\" \" + stripAndCollapse(curValue) + \" \");\n\n\t\t\t\t\tif (cur) {\n\t\t\t\t\t\tfor (i = 0; i < classNames.length; i++) {\n\t\t\t\t\t\t\tclassName = classNames[i];\n\t\t\t\t\t\t\tif (cur.indexOf(\" \" + className + \" \") < 0) {\n\t\t\t\t\t\t\t\tcur += className + \" \";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\t\tfinalValue = stripAndCollapse(cur);\n\t\t\t\t\t\tif (curValue !== finalValue) {\n\t\t\t\t\t\t\tthis.setAttribute(\"class\", finalValue);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn this;\n\t\t},\n\n\t\tremoveClass: function (value) {\n\t\t\tvar classNames, cur, curValue, className, i, finalValue;\n\n\t\t\tif (isFunction(value)) {\n\t\t\t\treturn this.each(function (j) {\n\t\t\t\t\tjQuery(this).removeClass(value.call(this, j, getClass(this)));\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (!arguments.length) {\n\t\t\t\treturn this.attr(\"class\", \"\");\n\t\t\t}\n\n\t\t\tclassNames = classesToArray(value);\n\n\t\t\tif (classNames.length) {\n\t\t\t\treturn this.each(function () {\n\t\t\t\t\tcurValue = getClass(this);\n\n\t\t\t\t\t// This expression is here for better compressibility (see addClass)\n\t\t\t\t\tcur = this.nodeType === 1 && (\" \" + stripAndCollapse(curValue) + \" \");\n\n\t\t\t\t\tif (cur) {\n\t\t\t\t\t\tfor (i = 0; i < classNames.length; i++) {\n\t\t\t\t\t\t\tclassName = classNames[i];\n\n\t\t\t\t\t\t\t// Remove *all* instances\n\t\t\t\t\t\t\twhile (cur.indexOf(\" \" + className + \" \") > -1) {\n\t\t\t\t\t\t\t\tcur = cur.replace(\" \" + className + \" \", \" \");\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\t\tfinalValue = stripAndCollapse(cur);\n\t\t\t\t\t\tif (curValue !== finalValue) {\n\t\t\t\t\t\t\tthis.setAttribute(\"class\", finalValue);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn this;\n\t\t},\n\n\t\ttoggleClass: function (value, stateVal) {\n\t\t\tvar classNames, className, i, self,\n\t\t\t\ttype = typeof value,\n\t\t\t\tisValidValue = type === \"string\" || Array.isArray(value);\n\n\t\t\tif (isFunction(value)) {\n\t\t\t\treturn this.each(function (i) {\n\t\t\t\t\tjQuery(this).toggleClass(\n\t\t\t\t\t\tvalue.call(this, i, getClass(this), stateVal),\n\t\t\t\t\t\tstateVal\n\t\t\t\t\t);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (typeof stateVal === \"boolean\" && isValidValue) {\n\t\t\t\treturn stateVal ? this.addClass(value) : this.removeClass(value);\n\t\t\t}\n\n\t\t\tclassNames = classesToArray(value);\n\n\t\t\treturn this.each(function () {\n\t\t\t\tif (isValidValue) {\n\n\t\t\t\t\t// Toggle individual class names\n\t\t\t\t\tself = jQuery(this);\n\n\t\t\t\t\tfor (i = 0; i < classNames.length; i++) {\n\t\t\t\t\t\tclassName = classNames[i];\n\n\t\t\t\t\t\t// Check each className given, space separated list\n\t\t\t\t\t\tif (self.hasClass(className)) {\n\t\t\t\t\t\t\tself.removeClass(className);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tself.addClass(className);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Toggle whole class name\n\t\t\t\t} else if (value === undefined || type === \"boolean\") {\n\t\t\t\t\tclassName = getClass(this);\n\t\t\t\t\tif (className) {\n\n\t\t\t\t\t\t// Store className if set\n\t\t\t\t\t\tdataPriv.set(this, \"__className__\", className);\n\t\t\t\t\t}\n\n\t\t\t\t\t// If the element has a class name or if we're passed `false`,\n\t\t\t\t\t// then remove the whole classname (if there was one, the above saved it).\n\t\t\t\t\t// Otherwise bring back whatever was previously saved (if anything),\n\t\t\t\t\t// falling back to the empty string if nothing was stored.\n\t\t\t\t\tif (this.setAttribute) {\n\t\t\t\t\t\tthis.setAttribute(\"class\",\n\t\t\t\t\t\t\tclassName || value === false ?\n\t\t\t\t\t\t\t\t\"\" :\n\t\t\t\t\t\t\t\tdataPriv.get(this, \"__className__\") || \"\"\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\thasClass: function (selector) {\n\t\t\tvar className, elem,\n\t\t\t\ti = 0;\n\n\t\t\tclassName = \" \" + selector + \" \";\n\t\t\twhile ((elem = this[i++])) {\n\t\t\t\tif (elem.nodeType === 1 &&\n\t\t\t\t\t(\" \" + stripAndCollapse(getClass(elem)) + \" \").indexOf(className) > -1) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn false;\n\t\t}\n\t});\n\n\n\n\n\tvar rreturn = /\\r/g;\n\n\tjQuery.fn.extend({\n\t\tval: function (value) {\n\t\t\tvar hooks, ret, valueIsFunction,\n\t\t\t\telem = this[0];\n\n\t\t\tif (!arguments.length) {\n\t\t\t\tif (elem) {\n\t\t\t\t\thooks = jQuery.valHooks[elem.type] ||\n\t\t\t\t\t\tjQuery.valHooks[elem.nodeName.toLowerCase()];\n\n\t\t\t\t\tif (hooks &&\n\t\t\t\t\t\t\"get\" in hooks &&\n\t\t\t\t\t\t(ret = hooks.get(elem, \"value\")) !== undefined\n\t\t\t\t\t) {\n\t\t\t\t\t\treturn ret;\n\t\t\t\t\t}\n\n\t\t\t\t\tret = elem.value;\n\n\t\t\t\t\t// Handle most common string cases\n\t\t\t\t\tif (typeof ret === \"string\") {\n\t\t\t\t\t\treturn ret.replace(rreturn, \"\");\n\t\t\t\t\t}\n\n\t\t\t\t\t// Handle cases where value is null/undef or number\n\t\t\t\t\treturn ret == null ? \"\" : ret;\n\t\t\t\t}\n\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvalueIsFunction = isFunction(value);\n\n\t\t\treturn this.each(function (i) {\n\t\t\t\tvar val;\n\n\t\t\t\tif (this.nodeType !== 1) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (valueIsFunction) {\n\t\t\t\t\tval = value.call(this, i, jQuery(this).val());\n\t\t\t\t} else {\n\t\t\t\t\tval = value;\n\t\t\t\t}\n\n\t\t\t\t// Treat null/undefined as \"\"; convert numbers to string\n\t\t\t\tif (val == null) {\n\t\t\t\t\tval = \"\";\n\n\t\t\t\t} else if (typeof val === \"number\") {\n\t\t\t\t\tval += \"\";\n\n\t\t\t\t} else if (Array.isArray(val)) {\n\t\t\t\t\tval = jQuery.map(val, function (value) {\n\t\t\t\t\t\treturn value == null ? \"\" : value + \"\";\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\thooks = jQuery.valHooks[this.type] || jQuery.valHooks[this.nodeName.toLowerCase()];\n\n\t\t\t\t// If set returns undefined, fall back to normal setting\n\t\t\t\tif (!hooks || !(\"set\" in hooks) || hooks.set(this, val, \"value\") === undefined) {\n\t\t\t\t\tthis.value = val;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t});\n\n\tjQuery.extend({\n\t\tvalHooks: {\n\t\t\toption: {\n\t\t\t\tget: function (elem) {\n\n\t\t\t\t\tvar val = jQuery.find.attr(elem, \"value\");\n\t\t\t\t\treturn val != null ?\n\t\t\t\t\t\tval :\n\n\t\t\t\t\t\t// Support: IE <=10 - 11 only\n\t\t\t\t\t\t// option.text throws exceptions (trac-14686, trac-14858)\n\t\t\t\t\t\t// Strip and collapse whitespace\n\t\t\t\t\t\t// https://html.spec.whatwg.org/#strip-and-collapse-whitespace\n\t\t\t\t\t\tstripAndCollapse(jQuery.text(elem));\n\t\t\t\t}\n\t\t\t},\n\t\t\tselect: {\n\t\t\t\tget: function (elem) {\n\t\t\t\t\tvar value, option, i,\n\t\t\t\t\t\toptions = elem.options,\n\t\t\t\t\t\tindex = elem.selectedIndex,\n\t\t\t\t\t\tone = elem.type === \"select-one\",\n\t\t\t\t\t\tvalues = one ? null : [],\n\t\t\t\t\t\tmax = one ? index + 1 : options.length;\n\n\t\t\t\t\tif (index < 0) {\n\t\t\t\t\t\ti = max;\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\ti = one ? index : 0;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Loop through all the selected options\n\t\t\t\t\tfor (; i < max; i++) {\n\t\t\t\t\t\toption = options[i];\n\n\t\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t\t// IE8-9 doesn't update selected after form reset (trac-2551)\n\t\t\t\t\t\tif ((option.selected || i === index) &&\n\n\t\t\t\t\t\t\t// Don't return options that are disabled or in a disabled optgroup\n\t\t\t\t\t\t\t!option.disabled &&\n\t\t\t\t\t\t\t(!option.parentNode.disabled ||\n\t\t\t\t\t\t\t\t!nodeName(option.parentNode, \"optgroup\"))) {\n\n\t\t\t\t\t\t\t// Get the specific value for the option\n\t\t\t\t\t\t\tvalue = jQuery(option).val();\n\n\t\t\t\t\t\t\t// We don't need an array for one selects\n\t\t\t\t\t\t\tif (one) {\n\t\t\t\t\t\t\t\treturn value;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Multi-Selects return an array\n\t\t\t\t\t\t\tvalues.push(value);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn values;\n\t\t\t\t},\n\n\t\t\t\tset: function (elem, value) {\n\t\t\t\t\tvar optionSet, option,\n\t\t\t\t\t\toptions = elem.options,\n\t\t\t\t\t\tvalues = jQuery.makeArray(value),\n\t\t\t\t\t\ti = options.length;\n\n\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\toption = options[i];\n\n\t\t\t\t\t\t/* eslint-disable no-cond-assign */\n\n\t\t\t\t\t\tif (option.selected =\n\t\t\t\t\t\t\tjQuery.inArray(jQuery.valHooks.option.get(option), values) > -1\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\toptionSet = true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t/* eslint-enable no-cond-assign */\n\t\t\t\t\t}\n\n\t\t\t\t\t// Force browsers to behave consistently when non-matching value is set\n\t\t\t\t\tif (!optionSet) {\n\t\t\t\t\t\telem.selectedIndex = -1;\n\t\t\t\t\t}\n\t\t\t\t\treturn values;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\n\t// Radios and checkboxes getter/setter\n\tjQuery.each([\"radio\", \"checkbox\"], function () {\n\t\tjQuery.valHooks[this] = {\n\t\t\tset: function (elem, value) {\n\t\t\t\tif (Array.isArray(value)) {\n\t\t\t\t\treturn (elem.checked = jQuery.inArray(jQuery(elem).val(), value) > -1);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\tif (!support.checkOn) {\n\t\t\tjQuery.valHooks[this].get = function (elem) {\n\t\t\t\treturn elem.getAttribute(\"value\") === null ? \"on\" : elem.value;\n\t\t\t};\n\t\t}\n\t});\n\n\n\n\n\t// Return jQuery for attributes-only inclusion\n\tvar location = window.location;\n\n\tvar nonce = { guid: Date.now() };\n\n\tvar rquery = (/\\?/);\n\n\n\n\t// Cross-browser xml parsing\n\tjQuery.parseXML = function (data) {\n\t\tvar xml, parserErrorElem;\n\t\tif (!data || typeof data !== \"string\") {\n\t\t\treturn null;\n\t\t}\n\n\t\t// Support: IE 9 - 11 only\n\t\t// IE throws on parseFromString with invalid input.\n\t\ttry {\n\t\t\txml = (new window.DOMParser()).parseFromString(data, \"text/xml\");\n\t\t} catch (e) { }\n\n\t\tparserErrorElem = xml && xml.getElementsByTagName(\"parsererror\")[0];\n\t\tif (!xml || parserErrorElem) {\n\t\t\tjQuery.error(\"Invalid XML: \" + (\n\t\t\t\tparserErrorElem ?\n\t\t\t\t\tjQuery.map(parserErrorElem.childNodes, function (el) {\n\t\t\t\t\t\treturn el.textContent;\n\t\t\t\t\t}).join(\"\\n\") :\n\t\t\t\t\tdata\n\t\t\t));\n\t\t}\n\t\treturn xml;\n\t};\n\n\n\tvar rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,\n\t\tstopPropagationCallback = function (e) {\n\t\t\te.stopPropagation();\n\t\t};\n\n\tjQuery.extend(jQuery.event, {\n\n\t\ttrigger: function (event, data, elem, onlyHandlers) {\n\n\t\t\tvar i, cur, tmp, bubbleType, ontype, handle, special, lastElement,\n\t\t\t\teventPath = [elem || document],\n\t\t\t\ttype = hasOwn.call(event, \"type\") ? event.type : event,\n\t\t\t\tnamespaces = hasOwn.call(event, \"namespace\") ? event.namespace.split(\".\") : [];\n\n\t\t\tcur = lastElement = tmp = elem = elem || document;\n\n\t\t\t// Don't do events on text and comment nodes\n\t\t\tif (elem.nodeType === 3 || elem.nodeType === 8) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// focus/blur morphs to focusin/out; ensure we're not firing them right now\n\t\t\tif (rfocusMorph.test(type + jQuery.event.triggered)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (type.indexOf(\".\") > -1) {\n\n\t\t\t\t// Namespaced trigger; create a regexp to match event type in handle()\n\t\t\t\tnamespaces = type.split(\".\");\n\t\t\t\ttype = namespaces.shift();\n\t\t\t\tnamespaces.sort();\n\t\t\t}\n\t\t\tontype = type.indexOf(\":\") < 0 && \"on\" + type;\n\n\t\t\t// Caller can pass in a jQuery.Event object, Object, or just an event type string\n\t\t\tevent = event[jQuery.expando] ?\n\t\t\t\tevent :\n\t\t\t\tnew jQuery.Event(type, typeof event === \"object\" && event);\n\n\t\t\t// Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)\n\t\t\tevent.isTrigger = onlyHandlers ? 2 : 3;\n\t\t\tevent.namespace = namespaces.join(\".\");\n\t\t\tevent.rnamespace = event.namespace ?\n\t\t\t\tnew RegExp(\"(^|\\\\.)\" + namespaces.join(\"\\\\.(?:.*\\\\.|)\") + \"(\\\\.|$)\") :\n\t\t\t\tnull;\n\n\t\t\t// Clean up the event in case it is being reused\n\t\t\tevent.result = undefined;\n\t\t\tif (!event.target) {\n\t\t\t\tevent.target = elem;\n\t\t\t}\n\n\t\t\t// Clone any incoming data and prepend the event, creating the handler arg list\n\t\t\tdata = data == null ?\n\t\t\t\t[event] :\n\t\t\t\tjQuery.makeArray(data, [event]);\n\n\t\t\t// Allow special events to draw outside the lines\n\t\t\tspecial = jQuery.event.special[type] || {};\n\t\t\tif (!onlyHandlers && special.trigger && special.trigger.apply(elem, data) === false) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Determine event propagation path in advance, per W3C events spec (trac-9951)\n\t\t\t// Bubble up to document, then to window; watch for a global ownerDocument var (trac-9724)\n\t\t\tif (!onlyHandlers && !special.noBubble && !isWindow(elem)) {\n\n\t\t\t\tbubbleType = special.delegateType || type;\n\t\t\t\tif (!rfocusMorph.test(bubbleType + type)) {\n\t\t\t\t\tcur = cur.parentNode;\n\t\t\t\t}\n\t\t\t\tfor (; cur; cur = cur.parentNode) {\n\t\t\t\t\teventPath.push(cur);\n\t\t\t\t\ttmp = cur;\n\t\t\t\t}\n\n\t\t\t\t// Only add window if we got to document (e.g., not plain obj or detached DOM)\n\t\t\t\tif (tmp === (elem.ownerDocument || document)) {\n\t\t\t\t\teventPath.push(tmp.defaultView || tmp.parentWindow || window);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Fire handlers on the event path\n\t\t\ti = 0;\n\t\t\twhile ((cur = eventPath[i++]) && !event.isPropagationStopped()) {\n\t\t\t\tlastElement = cur;\n\t\t\t\tevent.type = i > 1 ?\n\t\t\t\t\tbubbleType :\n\t\t\t\t\tspecial.bindType || type;\n\n\t\t\t\t// jQuery handler\n\t\t\t\thandle = (dataPriv.get(cur, \"events\") || Object.create(null))[event.type] &&\n\t\t\t\t\tdataPriv.get(cur, \"handle\");\n\t\t\t\tif (handle) {\n\t\t\t\t\thandle.apply(cur, data);\n\t\t\t\t}\n\n\t\t\t\t// Native handler\n\t\t\t\thandle = ontype && cur[ontype];\n\t\t\t\tif (handle && handle.apply && acceptData(cur)) {\n\t\t\t\t\tevent.result = handle.apply(cur, data);\n\t\t\t\t\tif (event.result === false) {\n\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tevent.type = type;\n\n\t\t\t// If nobody prevented the default action, do it now\n\t\t\tif (!onlyHandlers && !event.isDefaultPrevented()) {\n\n\t\t\t\tif ((!special._default ||\n\t\t\t\t\tspecial._default.apply(eventPath.pop(), data) === false) &&\n\t\t\t\t\tacceptData(elem)) {\n\n\t\t\t\t\t// Call a native DOM method on the target with the same name as the event.\n\t\t\t\t\t// Don't do default actions on window, that's where global variables be (trac-6170)\n\t\t\t\t\tif (ontype && isFunction(elem[type]) && !isWindow(elem)) {\n\n\t\t\t\t\t\t// Don't re-trigger an onFOO event when we call its FOO() method\n\t\t\t\t\t\ttmp = elem[ontype];\n\n\t\t\t\t\t\tif (tmp) {\n\t\t\t\t\t\t\telem[ontype] = null;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Prevent re-triggering of the same event, since we already bubbled it above\n\t\t\t\t\t\tjQuery.event.triggered = type;\n\n\t\t\t\t\t\tif (event.isPropagationStopped()) {\n\t\t\t\t\t\t\tlastElement.addEventListener(type, stopPropagationCallback);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\telem[type]();\n\n\t\t\t\t\t\tif (event.isPropagationStopped()) {\n\t\t\t\t\t\t\tlastElement.removeEventListener(type, stopPropagationCallback);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tjQuery.event.triggered = undefined;\n\n\t\t\t\t\t\tif (tmp) {\n\t\t\t\t\t\t\telem[ontype] = tmp;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn event.result;\n\t\t},\n\n\t\t// Piggyback on a donor event to simulate a different one\n\t\t// Used only for `focus(in | out)` events\n\t\tsimulate: function (type, elem, event) {\n\t\t\tvar e = jQuery.extend(\n\t\t\t\tnew jQuery.Event(),\n\t\t\t\tevent,\n\t\t\t\t{\n\t\t\t\t\ttype: type,\n\t\t\t\t\tisSimulated: true\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tjQuery.event.trigger(e, null, elem);\n\t\t}\n\n\t});\n\n\tjQuery.fn.extend({\n\n\t\ttrigger: function (type, data) {\n\t\t\treturn this.each(function () {\n\t\t\t\tjQuery.event.trigger(type, data, this);\n\t\t\t});\n\t\t},\n\t\ttriggerHandler: function (type, data) {\n\t\t\tvar elem = this[0];\n\t\t\tif (elem) {\n\t\t\t\treturn jQuery.event.trigger(type, data, elem, true);\n\t\t\t}\n\t\t}\n\t});\n\n\n\tvar\n\t\trbracket = /\\[\\]$/,\n\t\trCRLF = /\\r?\\n/g,\n\t\trsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,\n\t\trsubmittable = /^(?:input|select|textarea|keygen)/i;\n\n\tfunction buildParams(prefix, obj, traditional, add) {\n\t\tvar name;\n\n\t\tif (Array.isArray(obj)) {\n\n\t\t\t// Serialize array item.\n\t\t\tjQuery.each(obj, function (i, v) {\n\t\t\t\tif (traditional || rbracket.test(prefix)) {\n\n\t\t\t\t\t// Treat each array item as a scalar.\n\t\t\t\t\tadd(prefix, v);\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// Item is non-scalar (array or object), encode its numeric index.\n\t\t\t\t\tbuildParams(\n\t\t\t\t\t\tprefix + \"[\" + (typeof v === \"object\" && v != null ? i : \"\") + \"]\",\n\t\t\t\t\t\tv,\n\t\t\t\t\t\ttraditional,\n\t\t\t\t\t\tadd\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t});\n\n\t\t} else if (!traditional && toType(obj) === \"object\") {\n\n\t\t\t// Serialize object item.\n\t\t\tfor (name in obj) {\n\t\t\t\tbuildParams(prefix + \"[\" + name + \"]\", obj[name], traditional, add);\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// Serialize scalar item.\n\t\t\tadd(prefix, obj);\n\t\t}\n\t}\n\n\t// Serialize an array of form elements or a set of\n\t// key/values into a query string\n\tjQuery.param = function (a, traditional) {\n\t\tvar prefix,\n\t\t\ts = [],\n\t\t\tadd = function (key, valueOrFunction) {\n\n\t\t\t\t// If value is a function, invoke it and use its return value\n\t\t\t\tvar value = isFunction(valueOrFunction) ?\n\t\t\t\t\tvalueOrFunction() :\n\t\t\t\t\tvalueOrFunction;\n\n\t\t\t\ts[s.length] = encodeURIComponent(key) + \"=\" +\n\t\t\t\t\tencodeURIComponent(value == null ? \"\" : value);\n\t\t\t};\n\n\t\tif (a == null) {\n\t\t\treturn \"\";\n\t\t}\n\n\t\t// If an array was passed in, assume that it is an array of form elements.\n\t\tif (Array.isArray(a) || (a.jquery && !jQuery.isPlainObject(a))) {\n\n\t\t\t// Serialize the form elements\n\t\t\tjQuery.each(a, function () {\n\t\t\t\tadd(this.name, this.value);\n\t\t\t});\n\n\t\t} else {\n\n\t\t\t// If traditional, encode the \"old\" way (the way 1.3.2 or older\n\t\t\t// did it), otherwise encode params recursively.\n\t\t\tfor (prefix in a) {\n\t\t\t\tbuildParams(prefix, a[prefix], traditional, add);\n\t\t\t}\n\t\t}\n\n\t\t// Return the resulting serialization\n\t\treturn s.join(\"&\");\n\t};\n\n\tjQuery.fn.extend({\n\t\tserialize: function () {\n\t\t\treturn jQuery.param(this.serializeArray());\n\t\t},\n\t\tserializeArray: function () {\n\t\t\treturn this.map(function () {\n\n\t\t\t\t// Can add propHook for \"elements\" to filter or add form elements\n\t\t\t\tvar elements = jQuery.prop(this, \"elements\");\n\t\t\t\treturn elements ? jQuery.makeArray(elements) : this;\n\t\t\t}).filter(function () {\n\t\t\t\tvar type = this.type;\n\n\t\t\t\t// Use .is( \":disabled\" ) so that fieldset[disabled] works\n\t\t\t\treturn this.name && !jQuery(this).is(\":disabled\") &&\n\t\t\t\t\trsubmittable.test(this.nodeName) && !rsubmitterTypes.test(type) &&\n\t\t\t\t\t(this.checked || !rcheckableType.test(type));\n\t\t\t}).map(function (_i, elem) {\n\t\t\t\tvar val = jQuery(this).val();\n\n\t\t\t\tif (val == null) {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\n\t\t\t\tif (Array.isArray(val)) {\n\t\t\t\t\treturn jQuery.map(val, function (val) {\n\t\t\t\t\t\treturn { name: elem.name, value: val.replace(rCRLF, \"\\r\\n\") };\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\treturn { name: elem.name, value: val.replace(rCRLF, \"\\r\\n\") };\n\t\t\t}).get();\n\t\t}\n\t});\n\n\n\tvar\n\t\tr20 = /%20/g,\n\t\trhash = /#.*$/,\n\t\trantiCache = /([?&])_=[^&]*/,\n\t\trheaders = /^(.*?):[ \\t]*([^\\r\\n]*)$/mg,\n\n\t\t// trac-7653, trac-8125, trac-8152: local protocol detection\n\t\trlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,\n\t\trnoContent = /^(?:GET|HEAD)$/,\n\t\trprotocol = /^\\/\\//,\n\n\t\t/* Prefilters\n\t\t * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)\n\t\t * 2) These are called:\n\t\t *    - BEFORE asking for a transport\n\t\t *    - AFTER param serialization (s.data is a string if s.processData is true)\n\t\t * 3) key is the dataType\n\t\t * 4) the catchall symbol \"*\" can be used\n\t\t * 5) execution will start with transport dataType and THEN continue down to \"*\" if needed\n\t\t */\n\t\tprefilters = {},\n\n\t\t/* Transports bindings\n\t\t * 1) key is the dataType\n\t\t * 2) the catchall symbol \"*\" can be used\n\t\t * 3) selection will start with transport dataType and THEN go to \"*\" if needed\n\t\t */\n\t\ttransports = {},\n\n\t\t// Avoid comment-prolog char sequence (trac-10098); must appease lint and evade compression\n\t\tallTypes = \"*/\".concat(\"*\"),\n\n\t\t// Anchor tag for parsing the document origin\n\t\toriginAnchor = document.createElement(\"a\");\n\n\toriginAnchor.href = location.href;\n\n\t// Base \"constructor\" for jQuery.ajaxPrefilter and jQuery.ajaxTransport\n\tfunction addToPrefiltersOrTransports(structure) {\n\n\t\t// dataTypeExpression is optional and defaults to \"*\"\n\t\treturn function (dataTypeExpression, func) {\n\n\t\t\tif (typeof dataTypeExpression !== \"string\") {\n\t\t\t\tfunc = dataTypeExpression;\n\t\t\t\tdataTypeExpression = \"*\";\n\t\t\t}\n\n\t\t\tvar dataType,\n\t\t\t\ti = 0,\n\t\t\t\tdataTypes = dataTypeExpression.toLowerCase().match(rnothtmlwhite) || [];\n\n\t\t\tif (isFunction(func)) {\n\n\t\t\t\t// For each dataType in the dataTypeExpression\n\t\t\t\twhile ((dataType = dataTypes[i++])) {\n\n\t\t\t\t\t// Prepend if requested\n\t\t\t\t\tif (dataType[0] === \"+\") {\n\t\t\t\t\t\tdataType = dataType.slice(1) || \"*\";\n\t\t\t\t\t\t(structure[dataType] = structure[dataType] || []).unshift(func);\n\n\t\t\t\t\t\t// Otherwise append\n\t\t\t\t\t} else {\n\t\t\t\t\t\t(structure[dataType] = structure[dataType] || []).push(func);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n\n\t// Base inspection function for prefilters and transports\n\tfunction inspectPrefiltersOrTransports(structure, options, originalOptions, jqXHR) {\n\n\t\tvar inspected = {},\n\t\t\tseekingTransport = (structure === transports);\n\n\t\tfunction inspect(dataType) {\n\t\t\tvar selected;\n\t\t\tinspected[dataType] = true;\n\t\t\tjQuery.each(structure[dataType] || [], function (_, prefilterOrFactory) {\n\t\t\t\tvar dataTypeOrTransport = prefilterOrFactory(options, originalOptions, jqXHR);\n\t\t\t\tif (typeof dataTypeOrTransport === \"string\" &&\n\t\t\t\t\t!seekingTransport && !inspected[dataTypeOrTransport]) {\n\n\t\t\t\t\toptions.dataTypes.unshift(dataTypeOrTransport);\n\t\t\t\t\tinspect(dataTypeOrTransport);\n\t\t\t\t\treturn false;\n\t\t\t\t} else if (seekingTransport) {\n\t\t\t\t\treturn !(selected = dataTypeOrTransport);\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn selected;\n\t\t}\n\n\t\treturn inspect(options.dataTypes[0]) || !inspected[\"*\"] && inspect(\"*\");\n\t}\n\n\t// A special extend for ajax options\n\t// that takes \"flat\" options (not to be deep extended)\n\t// Fixes trac-9887\n\tfunction ajaxExtend(target, src) {\n\t\tvar key, deep,\n\t\t\tflatOptions = jQuery.ajaxSettings.flatOptions || {};\n\n\t\tfor (key in src) {\n\t\t\tif (src[key] !== undefined) {\n\t\t\t\t(flatOptions[key] ? target : (deep || (deep = {})))[key] = src[key];\n\t\t\t}\n\t\t}\n\t\tif (deep) {\n\t\t\tjQuery.extend(true, target, deep);\n\t\t}\n\n\t\treturn target;\n\t}\n\n\t/* Handles responses to an ajax request:\n\t * - finds the right dataType (mediates between content-type and expected dataType)\n\t * - returns the corresponding response\n\t */\n\tfunction ajaxHandleResponses(s, jqXHR, responses) {\n\n\t\tvar ct, type, finalDataType, firstDataType,\n\t\t\tcontents = s.contents,\n\t\t\tdataTypes = s.dataTypes;\n\n\t\t// Remove auto dataType and get content-type in the process\n\t\twhile (dataTypes[0] === \"*\") {\n\t\t\tdataTypes.shift();\n\t\t\tif (ct === undefined) {\n\t\t\t\tct = s.mimeType || jqXHR.getResponseHeader(\"Content-Type\");\n\t\t\t}\n\t\t}\n\n\t\t// Check if we're dealing with a known content-type\n\t\tif (ct) {\n\t\t\tfor (type in contents) {\n\t\t\t\tif (contents[type] && contents[type].test(ct)) {\n\t\t\t\t\tdataTypes.unshift(type);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Check to see if we have a response for the expected dataType\n\t\tif (dataTypes[0] in responses) {\n\t\t\tfinalDataType = dataTypes[0];\n\t\t} else {\n\n\t\t\t// Try convertible dataTypes\n\t\t\tfor (type in responses) {\n\t\t\t\tif (!dataTypes[0] || s.converters[type + \" \" + dataTypes[0]]) {\n\t\t\t\t\tfinalDataType = type;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (!firstDataType) {\n\t\t\t\t\tfirstDataType = type;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Or just use first one\n\t\t\tfinalDataType = finalDataType || firstDataType;\n\t\t}\n\n\t\t// If we found a dataType\n\t\t// We add the dataType to the list if needed\n\t\t// and return the corresponding response\n\t\tif (finalDataType) {\n\t\t\tif (finalDataType !== dataTypes[0]) {\n\t\t\t\tdataTypes.unshift(finalDataType);\n\t\t\t}\n\t\t\treturn responses[finalDataType];\n\t\t}\n\t}\n\n\t/* Chain conversions given the request and the original response\n\t * Also sets the responseXXX fields on the jqXHR instance\n\t */\n\tfunction ajaxConvert(s, response, jqXHR, isSuccess) {\n\t\tvar conv2, current, conv, tmp, prev,\n\t\t\tconverters = {},\n\n\t\t\t// Work with a copy of dataTypes in case we need to modify it for conversion\n\t\t\tdataTypes = s.dataTypes.slice();\n\n\t\t// Create converters map with lowercased keys\n\t\tif (dataTypes[1]) {\n\t\t\tfor (conv in s.converters) {\n\t\t\t\tconverters[conv.toLowerCase()] = s.converters[conv];\n\t\t\t}\n\t\t}\n\n\t\tcurrent = dataTypes.shift();\n\n\t\t// Convert to each sequential dataType\n\t\twhile (current) {\n\n\t\t\tif (s.responseFields[current]) {\n\t\t\t\tjqXHR[s.responseFields[current]] = response;\n\t\t\t}\n\n\t\t\t// Apply the dataFilter if provided\n\t\t\tif (!prev && isSuccess && s.dataFilter) {\n\t\t\t\tresponse = s.dataFilter(response, s.dataType);\n\t\t\t}\n\n\t\t\tprev = current;\n\t\t\tcurrent = dataTypes.shift();\n\n\t\t\tif (current) {\n\n\t\t\t\t// There's only work to do if current dataType is non-auto\n\t\t\t\tif (current === \"*\") {\n\n\t\t\t\t\tcurrent = prev;\n\n\t\t\t\t\t// Convert response if prev dataType is non-auto and differs from current\n\t\t\t\t} else if (prev !== \"*\" && prev !== current) {\n\n\t\t\t\t\t// Seek a direct converter\n\t\t\t\t\tconv = converters[prev + \" \" + current] || converters[\"* \" + current];\n\n\t\t\t\t\t// If none found, seek a pair\n\t\t\t\t\tif (!conv) {\n\t\t\t\t\t\tfor (conv2 in converters) {\n\n\t\t\t\t\t\t\t// If conv2 outputs current\n\t\t\t\t\t\t\ttmp = conv2.split(\" \");\n\t\t\t\t\t\t\tif (tmp[1] === current) {\n\n\t\t\t\t\t\t\t\t// If prev can be converted to accepted input\n\t\t\t\t\t\t\t\tconv = converters[prev + \" \" + tmp[0]] ||\n\t\t\t\t\t\t\t\t\tconverters[\"* \" + tmp[0]];\n\t\t\t\t\t\t\t\tif (conv) {\n\n\t\t\t\t\t\t\t\t\t// Condense equivalence converters\n\t\t\t\t\t\t\t\t\tif (conv === true) {\n\t\t\t\t\t\t\t\t\t\tconv = converters[conv2];\n\n\t\t\t\t\t\t\t\t\t\t// Otherwise, insert the intermediate dataType\n\t\t\t\t\t\t\t\t\t} else if (converters[conv2] !== true) {\n\t\t\t\t\t\t\t\t\t\tcurrent = tmp[0];\n\t\t\t\t\t\t\t\t\t\tdataTypes.unshift(tmp[1]);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Apply converter (if not an equivalence)\n\t\t\t\t\tif (conv !== true) {\n\n\t\t\t\t\t\t// Unless errors are allowed to bubble, catch and return them\n\t\t\t\t\t\tif (conv && s.throws) {\n\t\t\t\t\t\t\tresponse = conv(response);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\tresponse = conv(response);\n\t\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\tstate: \"parsererror\",\n\t\t\t\t\t\t\t\t\terror: conv ? e : \"No conversion from \" + prev + \" to \" + current\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn { state: \"success\", data: response };\n\t}\n\n\tjQuery.extend({\n\n\t\t// Counter for holding the number of active queries\n\t\tactive: 0,\n\n\t\t// Last-Modified header cache for next request\n\t\tlastModified: {},\n\t\tetag: {},\n\n\t\tajaxSettings: {\n\t\t\turl: location.href,\n\t\t\ttype: \"GET\",\n\t\t\tisLocal: rlocalProtocol.test(location.protocol),\n\t\t\tglobal: true,\n\t\t\tprocessData: true,\n\t\t\tasync: true,\n\t\t\tcontentType: \"application/x-www-form-urlencoded; charset=UTF-8\",\n\n\t\t\t/*\n\t\t\ttimeout: 0,\n\t\t\tdata: null,\n\t\t\tdataType: null,\n\t\t\tusername: null,\n\t\t\tpassword: null,\n\t\t\tcache: null,\n\t\t\tthrows: false,\n\t\t\ttraditional: false,\n\t\t\theaders: {},\n\t\t\t*/\n\n\t\t\taccepts: {\n\t\t\t\t\"*\": allTypes,\n\t\t\t\ttext: \"text/plain\",\n\t\t\t\thtml: \"text/html\",\n\t\t\t\txml: \"application/xml, text/xml\",\n\t\t\t\tjson: \"application/json, text/javascript\"\n\t\t\t},\n\n\t\t\tcontents: {\n\t\t\t\txml: /\\bxml\\b/,\n\t\t\t\thtml: /\\bhtml/,\n\t\t\t\tjson: /\\bjson\\b/\n\t\t\t},\n\n\t\t\tresponseFields: {\n\t\t\t\txml: \"responseXML\",\n\t\t\t\ttext: \"responseText\",\n\t\t\t\tjson: \"responseJSON\"\n\t\t\t},\n\n\t\t\t// Data converters\n\t\t\t// Keys separate source (or catchall \"*\") and destination types with a single space\n\t\t\tconverters: {\n\n\t\t\t\t// Convert anything to text\n\t\t\t\t\"* text\": String,\n\n\t\t\t\t// Text to html (true = no transformation)\n\t\t\t\t\"text html\": true,\n\n\t\t\t\t// Evaluate text as a json expression\n\t\t\t\t\"text json\": JSON.parse,\n\n\t\t\t\t// Parse text as xml\n\t\t\t\t\"text xml\": jQuery.parseXML\n\t\t\t},\n\n\t\t\t// For options that shouldn't be deep extended:\n\t\t\t// you can add your own custom options here if\n\t\t\t// and when you create one that shouldn't be\n\t\t\t// deep extended (see ajaxExtend)\n\t\t\tflatOptions: {\n\t\t\t\turl: true,\n\t\t\t\tcontext: true\n\t\t\t}\n\t\t},\n\n\t\t// Creates a full fledged settings object into target\n\t\t// with both ajaxSettings and settings fields.\n\t\t// If target is omitted, writes into ajaxSettings.\n\t\tajaxSetup: function (target, settings) {\n\t\t\treturn settings ?\n\n\t\t\t\t// Building a settings object\n\t\t\t\tajaxExtend(ajaxExtend(target, jQuery.ajaxSettings), settings) :\n\n\t\t\t\t// Extending ajaxSettings\n\t\t\t\tajaxExtend(jQuery.ajaxSettings, target);\n\t\t},\n\n\t\tajaxPrefilter: addToPrefiltersOrTransports(prefilters),\n\t\tajaxTransport: addToPrefiltersOrTransports(transports),\n\n\t\t// Main method\n\t\tajax: function (url, options) {\n\n\t\t\t// If url is an object, simulate pre-1.5 signature\n\t\t\tif (typeof url === \"object\") {\n\t\t\t\toptions = url;\n\t\t\t\turl = undefined;\n\t\t\t}\n\n\t\t\t// Force options to be an object\n\t\t\toptions = options || {};\n\n\t\t\tvar transport,\n\n\t\t\t\t// URL without anti-cache param\n\t\t\t\tcacheURL,\n\n\t\t\t\t// Response headers\n\t\t\t\tresponseHeadersString,\n\t\t\t\tresponseHeaders,\n\n\t\t\t\t// timeout handle\n\t\t\t\ttimeoutTimer,\n\n\t\t\t\t// Url cleanup var\n\t\t\t\turlAnchor,\n\n\t\t\t\t// Request state (becomes false upon send and true upon completion)\n\t\t\t\tcompleted,\n\n\t\t\t\t// To know if global events are to be dispatched\n\t\t\t\tfireGlobals,\n\n\t\t\t\t// Loop variable\n\t\t\t\ti,\n\n\t\t\t\t// uncached part of the url\n\t\t\t\tuncached,\n\n\t\t\t\t// Create the final options object\n\t\t\t\ts = jQuery.ajaxSetup({}, options),\n\n\t\t\t\t// Callbacks context\n\t\t\t\tcallbackContext = s.context || s,\n\n\t\t\t\t// Context for global events is callbackContext if it is a DOM node or jQuery collection\n\t\t\t\tglobalEventContext = s.context &&\n\t\t\t\t\t(callbackContext.nodeType || callbackContext.jquery) ?\n\t\t\t\t\tjQuery(callbackContext) :\n\t\t\t\t\tjQuery.event,\n\n\t\t\t\t// Deferreds\n\t\t\t\tdeferred = jQuery.Deferred(),\n\t\t\t\tcompleteDeferred = jQuery.Callbacks(\"once memory\"),\n\n\t\t\t\t// Status-dependent callbacks\n\t\t\t\tstatusCode = s.statusCode || {},\n\n\t\t\t\t// Headers (they are sent all at once)\n\t\t\t\trequestHeaders = {},\n\t\t\t\trequestHeadersNames = {},\n\n\t\t\t\t// Default abort message\n\t\t\t\tstrAbort = \"canceled\",\n\n\t\t\t\t// Fake xhr\n\t\t\t\tjqXHR = {\n\t\t\t\t\treadyState: 0,\n\n\t\t\t\t\t// Builds headers hashtable if needed\n\t\t\t\t\tgetResponseHeader: function (key) {\n\t\t\t\t\t\tvar match;\n\t\t\t\t\t\tif (completed) {\n\t\t\t\t\t\t\tif (!responseHeaders) {\n\t\t\t\t\t\t\t\tresponseHeaders = {};\n\t\t\t\t\t\t\t\twhile ((match = rheaders.exec(responseHeadersString))) {\n\t\t\t\t\t\t\t\t\tresponseHeaders[match[1].toLowerCase() + \" \"] =\n\t\t\t\t\t\t\t\t\t\t(responseHeaders[match[1].toLowerCase() + \" \"] || [])\n\t\t\t\t\t\t\t\t\t\t\t.concat(match[2]);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tmatch = responseHeaders[key.toLowerCase() + \" \"];\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn match == null ? null : match.join(\", \");\n\t\t\t\t\t},\n\n\t\t\t\t\t// Raw string\n\t\t\t\t\tgetAllResponseHeaders: function () {\n\t\t\t\t\t\treturn completed ? responseHeadersString : null;\n\t\t\t\t\t},\n\n\t\t\t\t\t// Caches the header\n\t\t\t\t\tsetRequestHeader: function (name, value) {\n\t\t\t\t\t\tif (completed == null) {\n\t\t\t\t\t\t\tname = requestHeadersNames[name.toLowerCase()] =\n\t\t\t\t\t\t\t\trequestHeadersNames[name.toLowerCase()] || name;\n\t\t\t\t\t\t\trequestHeaders[name] = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn this;\n\t\t\t\t\t},\n\n\t\t\t\t\t// Overrides response content-type header\n\t\t\t\t\toverrideMimeType: function (type) {\n\t\t\t\t\t\tif (completed == null) {\n\t\t\t\t\t\t\ts.mimeType = type;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn this;\n\t\t\t\t\t},\n\n\t\t\t\t\t// Status-dependent callbacks\n\t\t\t\t\tstatusCode: function (map) {\n\t\t\t\t\t\tvar code;\n\t\t\t\t\t\tif (map) {\n\t\t\t\t\t\t\tif (completed) {\n\n\t\t\t\t\t\t\t\t// Execute the appropriate callbacks\n\t\t\t\t\t\t\t\tjqXHR.always(map[jqXHR.status]);\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t// Lazy-add the new callbacks in a way that preserves old ones\n\t\t\t\t\t\t\t\tfor (code in map) {\n\t\t\t\t\t\t\t\t\tstatusCode[code] = [statusCode[code], map[code]];\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn this;\n\t\t\t\t\t},\n\n\t\t\t\t\t// Cancel the request\n\t\t\t\t\tabort: function (statusText) {\n\t\t\t\t\t\tvar finalText = statusText || strAbort;\n\t\t\t\t\t\tif (transport) {\n\t\t\t\t\t\t\ttransport.abort(finalText);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdone(0, finalText);\n\t\t\t\t\t\treturn this;\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t// Attach deferreds\n\t\t\tdeferred.promise(jqXHR);\n\n\t\t\t// Add protocol if not provided (prefilters might expect it)\n\t\t\t// Handle falsy url in the settings object (trac-10093: consistency with old signature)\n\t\t\t// We also use the url parameter if available\n\t\t\ts.url = ((url || s.url || location.href) + \"\")\n\t\t\t\t.replace(rprotocol, location.protocol + \"//\");\n\n\t\t\t// Alias method option to type as per ticket trac-12004\n\t\t\ts.type = options.method || options.type || s.method || s.type;\n\n\t\t\t// Extract dataTypes list\n\t\t\ts.dataTypes = (s.dataType || \"*\").toLowerCase().match(rnothtmlwhite) || [\"\"];\n\n\t\t\t// A cross-domain request is in order when the origin doesn't match the current origin.\n\t\t\tif (s.crossDomain == null) {\n\t\t\t\turlAnchor = document.createElement(\"a\");\n\n\t\t\t\t// Support: IE <=8 - 11, Edge 12 - 15\n\t\t\t\t// IE throws exception on accessing the href property if url is malformed,\n\t\t\t\t// e.g. http://example.com:80x/\n\t\t\t\ttry {\n\t\t\t\t\turlAnchor.href = s.url;\n\n\t\t\t\t\t// Support: IE <=8 - 11 only\n\t\t\t\t\t// Anchor's host property isn't correctly set when s.url is relative\n\t\t\t\t\turlAnchor.href = urlAnchor.href;\n\t\t\t\t\ts.crossDomain = originAnchor.protocol + \"//\" + originAnchor.host !==\n\t\t\t\t\t\turlAnchor.protocol + \"//\" + urlAnchor.host;\n\t\t\t\t} catch (e) {\n\n\t\t\t\t\t// If there is an error parsing the URL, assume it is crossDomain,\n\t\t\t\t\t// it can be rejected by the transport if it is invalid\n\t\t\t\t\ts.crossDomain = true;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Convert data if not already a string\n\t\t\tif (s.data && s.processData && typeof s.data !== \"string\") {\n\t\t\t\ts.data = jQuery.param(s.data, s.traditional);\n\t\t\t}\n\n\t\t\t// Apply prefilters\n\t\t\tinspectPrefiltersOrTransports(prefilters, s, options, jqXHR);\n\n\t\t\t// If request was aborted inside a prefilter, stop there\n\t\t\tif (completed) {\n\t\t\t\treturn jqXHR;\n\t\t\t}\n\n\t\t\t// We can fire global events as of now if asked to\n\t\t\t// Don't fire events if jQuery.event is undefined in an AMD-usage scenario (trac-15118)\n\t\t\tfireGlobals = jQuery.event && s.global;\n\n\t\t\t// Watch for a new set of requests\n\t\t\tif (fireGlobals && jQuery.active++ === 0) {\n\t\t\t\tjQuery.event.trigger(\"ajaxStart\");\n\t\t\t}\n\n\t\t\t// Uppercase the type\n\t\t\ts.type = s.type.toUpperCase();\n\n\t\t\t// Determine if request has content\n\t\t\ts.hasContent = !rnoContent.test(s.type);\n\n\t\t\t// Save the URL in case we're toying with the If-Modified-Since\n\t\t\t// and/or If-None-Match header later on\n\t\t\t// Remove hash to simplify url manipulation\n\t\t\tcacheURL = s.url.replace(rhash, \"\");\n\n\t\t\t// More options handling for requests with no content\n\t\t\tif (!s.hasContent) {\n\n\t\t\t\t// Remember the hash so we can put it back\n\t\t\t\tuncached = s.url.slice(cacheURL.length);\n\n\t\t\t\t// If data is available and should be processed, append data to url\n\t\t\t\tif (s.data && (s.processData || typeof s.data === \"string\")) {\n\t\t\t\t\tcacheURL += (rquery.test(cacheURL) ? \"&\" : \"?\") + s.data;\n\n\t\t\t\t\t// trac-9682: remove data so that it's not used in an eventual retry\n\t\t\t\t\tdelete s.data;\n\t\t\t\t}\n\n\t\t\t\t// Add or update anti-cache param if needed\n\t\t\t\tif (s.cache === false) {\n\t\t\t\t\tcacheURL = cacheURL.replace(rantiCache, \"$1\");\n\t\t\t\t\tuncached = (rquery.test(cacheURL) ? \"&\" : \"?\") + \"_=\" + (nonce.guid++) +\n\t\t\t\t\t\tuncached;\n\t\t\t\t}\n\n\t\t\t\t// Put hash and anti-cache on the URL that will be requested (gh-1732)\n\t\t\t\ts.url = cacheURL + uncached;\n\n\t\t\t\t// Change '%20' to '+' if this is encoded form body content (gh-2658)\n\t\t\t} else if (s.data && s.processData &&\n\t\t\t\t(s.contentType || \"\").indexOf(\"application/x-www-form-urlencoded\") === 0) {\n\t\t\t\ts.data = s.data.replace(r20, \"+\");\n\t\t\t}\n\n\t\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\t\tif (s.ifModified) {\n\t\t\t\tif (jQuery.lastModified[cacheURL]) {\n\t\t\t\t\tjqXHR.setRequestHeader(\"If-Modified-Since\", jQuery.lastModified[cacheURL]);\n\t\t\t\t}\n\t\t\t\tif (jQuery.etag[cacheURL]) {\n\t\t\t\t\tjqXHR.setRequestHeader(\"If-None-Match\", jQuery.etag[cacheURL]);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Set the correct header, if data is being sent\n\t\t\tif (s.data && s.hasContent && s.contentType !== false || options.contentType) {\n\t\t\t\tjqXHR.setRequestHeader(\"Content-Type\", s.contentType);\n\t\t\t}\n\n\t\t\t// Set the Accepts header for the server, depending on the dataType\n\t\t\tjqXHR.setRequestHeader(\n\t\t\t\t\"Accept\",\n\t\t\t\ts.dataTypes[0] && s.accepts[s.dataTypes[0]] ?\n\t\t\t\t\ts.accepts[s.dataTypes[0]] +\n\t\t\t\t\t(s.dataTypes[0] !== \"*\" ? \", \" + allTypes + \"; q=0.01\" : \"\") :\n\t\t\t\t\ts.accepts[\"*\"]\n\t\t\t);\n\n\t\t\t// Check for headers option\n\t\t\tfor (i in s.headers) {\n\t\t\t\tjqXHR.setRequestHeader(i, s.headers[i]);\n\t\t\t}\n\n\t\t\t// Allow custom headers/mimetypes and early abort\n\t\t\tif (s.beforeSend &&\n\t\t\t\t(s.beforeSend.call(callbackContext, jqXHR, s) === false || completed)) {\n\n\t\t\t\t// Abort if not done already and return\n\t\t\t\treturn jqXHR.abort();\n\t\t\t}\n\n\t\t\t// Aborting is no longer a cancellation\n\t\t\tstrAbort = \"abort\";\n\n\t\t\t// Install callbacks on deferreds\n\t\t\tcompleteDeferred.add(s.complete);\n\t\t\tjqXHR.done(s.success);\n\t\t\tjqXHR.fail(s.error);\n\n\t\t\t// Get transport\n\t\t\ttransport = inspectPrefiltersOrTransports(transports, s, options, jqXHR);\n\n\t\t\t// If no transport, we auto-abort\n\t\t\tif (!transport) {\n\t\t\t\tdone(-1, \"No Transport\");\n\t\t\t} else {\n\t\t\t\tjqXHR.readyState = 1;\n\n\t\t\t\t// Send global event\n\t\t\t\tif (fireGlobals) {\n\t\t\t\t\tglobalEventContext.trigger(\"ajaxSend\", [jqXHR, s]);\n\t\t\t\t}\n\n\t\t\t\t// If request was aborted inside ajaxSend, stop there\n\t\t\t\tif (completed) {\n\t\t\t\t\treturn jqXHR;\n\t\t\t\t}\n\n\t\t\t\t// Timeout\n\t\t\t\tif (s.async && s.timeout > 0) {\n\t\t\t\t\ttimeoutTimer = window.setTimeout(function () {\n\t\t\t\t\t\tjqXHR.abort(\"timeout\");\n\t\t\t\t\t}, s.timeout);\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tcompleted = false;\n\t\t\t\t\ttransport.send(requestHeaders, done);\n\t\t\t\t} catch (e) {\n\n\t\t\t\t\t// Rethrow post-completion exceptions\n\t\t\t\t\tif (completed) {\n\t\t\t\t\t\tthrow e;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Propagate others as results\n\t\t\t\t\tdone(-1, e);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Callback for when everything is done\n\t\t\tfunction done(status, nativeStatusText, responses, headers) {\n\t\t\t\tvar isSuccess, success, error, response, modified,\n\t\t\t\t\tstatusText = nativeStatusText;\n\n\t\t\t\t// Ignore repeat invocations\n\t\t\t\tif (completed) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tcompleted = true;\n\n\t\t\t\t// Clear timeout if it exists\n\t\t\t\tif (timeoutTimer) {\n\t\t\t\t\twindow.clearTimeout(timeoutTimer);\n\t\t\t\t}\n\n\t\t\t\t// Dereference transport for early garbage collection\n\t\t\t\t// (no matter how long the jqXHR object will be used)\n\t\t\t\ttransport = undefined;\n\n\t\t\t\t// Cache response headers\n\t\t\t\tresponseHeadersString = headers || \"\";\n\n\t\t\t\t// Set readyState\n\t\t\t\tjqXHR.readyState = status > 0 ? 4 : 0;\n\n\t\t\t\t// Determine if successful\n\t\t\t\tisSuccess = status >= 200 && status < 300 || status === 304;\n\n\t\t\t\t// Get response data\n\t\t\t\tif (responses) {\n\t\t\t\t\tresponse = ajaxHandleResponses(s, jqXHR, responses);\n\t\t\t\t}\n\n\t\t\t\t// Use a noop converter for missing script but not if jsonp\n\t\t\t\tif (!isSuccess &&\n\t\t\t\t\tjQuery.inArray(\"script\", s.dataTypes) > -1 &&\n\t\t\t\t\tjQuery.inArray(\"json\", s.dataTypes) < 0) {\n\t\t\t\t\ts.converters[\"text script\"] = function () { };\n\t\t\t\t}\n\n\t\t\t\t// Convert no matter what (that way responseXXX fields are always set)\n\t\t\t\tresponse = ajaxConvert(s, response, jqXHR, isSuccess);\n\n\t\t\t\t// If successful, handle type chaining\n\t\t\t\tif (isSuccess) {\n\n\t\t\t\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\t\t\t\tif (s.ifModified) {\n\t\t\t\t\t\tmodified = jqXHR.getResponseHeader(\"Last-Modified\");\n\t\t\t\t\t\tif (modified) {\n\t\t\t\t\t\t\tjQuery.lastModified[cacheURL] = modified;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmodified = jqXHR.getResponseHeader(\"etag\");\n\t\t\t\t\t\tif (modified) {\n\t\t\t\t\t\t\tjQuery.etag[cacheURL] = modified;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// if no content\n\t\t\t\t\tif (status === 204 || s.type === \"HEAD\") {\n\t\t\t\t\t\tstatusText = \"nocontent\";\n\n\t\t\t\t\t\t// if not modified\n\t\t\t\t\t} else if (status === 304) {\n\t\t\t\t\t\tstatusText = \"notmodified\";\n\n\t\t\t\t\t\t// If we have data, let's convert it\n\t\t\t\t\t} else {\n\t\t\t\t\t\tstatusText = response.state;\n\t\t\t\t\t\tsuccess = response.data;\n\t\t\t\t\t\terror = response.error;\n\t\t\t\t\t\tisSuccess = !error;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\n\t\t\t\t\t// Extract error from statusText and normalize for non-aborts\n\t\t\t\t\terror = statusText;\n\t\t\t\t\tif (status || !statusText) {\n\t\t\t\t\t\tstatusText = \"error\";\n\t\t\t\t\t\tif (status < 0) {\n\t\t\t\t\t\t\tstatus = 0;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Set data for the fake xhr object\n\t\t\t\tjqXHR.status = status;\n\t\t\t\tjqXHR.statusText = (nativeStatusText || statusText) + \"\";\n\n\t\t\t\t// Success/Error\n\t\t\t\tif (isSuccess) {\n\t\t\t\t\tdeferred.resolveWith(callbackContext, [success, statusText, jqXHR]);\n\t\t\t\t} else {\n\t\t\t\t\tdeferred.rejectWith(callbackContext, [jqXHR, statusText, error]);\n\t\t\t\t}\n\n\t\t\t\t// Status-dependent callbacks\n\t\t\t\tjqXHR.statusCode(statusCode);\n\t\t\t\tstatusCode = undefined;\n\n\t\t\t\tif (fireGlobals) {\n\t\t\t\t\tglobalEventContext.trigger(isSuccess ? \"ajaxSuccess\" : \"ajaxError\",\n\t\t\t\t\t\t[jqXHR, s, isSuccess ? success : error]);\n\t\t\t\t}\n\n\t\t\t\t// Complete\n\t\t\t\tcompleteDeferred.fireWith(callbackContext, [jqXHR, statusText]);\n\n\t\t\t\tif (fireGlobals) {\n\t\t\t\t\tglobalEventContext.trigger(\"ajaxComplete\", [jqXHR, s]);\n\n\t\t\t\t\t// Handle the global AJAX counter\n\t\t\t\t\tif (!(--jQuery.active)) {\n\t\t\t\t\t\tjQuery.event.trigger(\"ajaxStop\");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn jqXHR;\n\t\t},\n\n\t\tgetJSON: function (url, data, callback) {\n\t\t\treturn jQuery.get(url, data, callback, \"json\");\n\t\t},\n\n\t\tgetScript: function (url, callback) {\n\t\t\treturn jQuery.get(url, undefined, callback, \"script\");\n\t\t}\n\t});\n\n\tjQuery.each([\"get\", \"post\"], function (_i, method) {\n\t\tjQuery[method] = function (url, data, callback, type) {\n\n\t\t\t// Shift arguments if data argument was omitted\n\t\t\tif (isFunction(data)) {\n\t\t\t\ttype = type || callback;\n\t\t\t\tcallback = data;\n\t\t\t\tdata = undefined;\n\t\t\t}\n\n\t\t\t// The url can be an options object (which then must have .url)\n\t\t\treturn jQuery.ajax(jQuery.extend({\n\t\t\t\turl: url,\n\t\t\t\ttype: method,\n\t\t\t\tdataType: type,\n\t\t\t\tdata: data,\n\t\t\t\tsuccess: callback\n\t\t\t}, jQuery.isPlainObject(url) && url));\n\t\t};\n\t});\n\n\tjQuery.ajaxPrefilter(function (s) {\n\t\tvar i;\n\t\tfor (i in s.headers) {\n\t\t\tif (i.toLowerCase() === \"content-type\") {\n\t\t\t\ts.contentType = s.headers[i] || \"\";\n\t\t\t}\n\t\t}\n\t});\n\n\n\tjQuery._evalUrl = function (url, options, doc) {\n\t\treturn jQuery.ajax({\n\t\t\turl: url,\n\n\t\t\t// Make this explicit, since user can override this through ajaxSetup (trac-11264)\n\t\t\ttype: \"GET\",\n\t\t\tdataType: \"script\",\n\t\t\tcache: true,\n\t\t\tasync: false,\n\t\t\tglobal: false,\n\n\t\t\t// Only evaluate the response if it is successful (gh-4126)\n\t\t\t// dataFilter is not invoked for failure responses, so using it instead\n\t\t\t// of the default converter is kludgy but it works.\n\t\t\tconverters: {\n\t\t\t\t\"text script\": function () { }\n\t\t\t},\n\t\t\tdataFilter: function (response) {\n\t\t\t\tjQuery.globalEval(response, options, doc);\n\t\t\t}\n\t\t});\n\t};\n\n\n\tjQuery.fn.extend({\n\t\twrapAll: function (html) {\n\t\t\tvar wrap;\n\n\t\t\tif (this[0]) {\n\t\t\t\tif (isFunction(html)) {\n\t\t\t\t\thtml = html.call(this[0]);\n\t\t\t\t}\n\n\t\t\t\t// The elements to wrap the target around\n\t\t\t\twrap = jQuery(html, this[0].ownerDocument).eq(0).clone(true);\n\n\t\t\t\tif (this[0].parentNode) {\n\t\t\t\t\twrap.insertBefore(this[0]);\n\t\t\t\t}\n\n\t\t\t\twrap.map(function () {\n\t\t\t\t\tvar elem = this;\n\n\t\t\t\t\twhile (elem.firstElementChild) {\n\t\t\t\t\t\telem = elem.firstElementChild;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn elem;\n\t\t\t\t}).append(this);\n\t\t\t}\n\n\t\t\treturn this;\n\t\t},\n\n\t\twrapInner: function (html) {\n\t\t\tif (isFunction(html)) {\n\t\t\t\treturn this.each(function (i) {\n\t\t\t\t\tjQuery(this).wrapInner(html.call(this, i));\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn this.each(function () {\n\t\t\t\tvar self = jQuery(this),\n\t\t\t\t\tcontents = self.contents();\n\n\t\t\t\tif (contents.length) {\n\t\t\t\t\tcontents.wrapAll(html);\n\n\t\t\t\t} else {\n\t\t\t\t\tself.append(html);\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\twrap: function (html) {\n\t\t\tvar htmlIsFunction = isFunction(html);\n\n\t\t\treturn this.each(function (i) {\n\t\t\t\tjQuery(this).wrapAll(htmlIsFunction ? html.call(this, i) : html);\n\t\t\t});\n\t\t},\n\n\t\tunwrap: function (selector) {\n\t\t\tthis.parent(selector).not(\"body\").each(function () {\n\t\t\t\tjQuery(this).replaceWith(this.childNodes);\n\t\t\t});\n\t\t\treturn this;\n\t\t}\n\t});\n\n\n\tjQuery.expr.pseudos.hidden = function (elem) {\n\t\treturn !jQuery.expr.pseudos.visible(elem);\n\t};\n\tjQuery.expr.pseudos.visible = function (elem) {\n\t\treturn !!(elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length);\n\t};\n\n\n\n\n\tjQuery.ajaxSettings.xhr = function () {\n\t\ttry {\n\t\t\treturn new window.XMLHttpRequest();\n\t\t} catch (e) { }\n\t};\n\n\tvar xhrSuccessStatus = {\n\n\t\t// File protocol always yields status code 0, assume 200\n\t\t0: 200,\n\n\t\t// Support: IE <=9 only\n\t\t// trac-1450: sometimes IE returns 1223 when it should be 204\n\t\t1223: 204\n\t},\n\t\txhrSupported = jQuery.ajaxSettings.xhr();\n\n\tsupport.cors = !!xhrSupported && (\"withCredentials\" in xhrSupported);\n\tsupport.ajax = xhrSupported = !!xhrSupported;\n\n\tjQuery.ajaxTransport(function (options) {\n\t\tvar callback, errorCallback;\n\n\t\t// Cross domain only allowed if supported through XMLHttpRequest\n\t\tif (support.cors || xhrSupported && !options.crossDomain) {\n\t\t\treturn {\n\t\t\t\tsend: function (headers, complete) {\n\t\t\t\t\tvar i,\n\t\t\t\t\t\txhr = options.xhr();\n\n\t\t\t\t\txhr.open(\n\t\t\t\t\t\toptions.type,\n\t\t\t\t\t\toptions.url,\n\t\t\t\t\t\toptions.async,\n\t\t\t\t\t\toptions.username,\n\t\t\t\t\t\toptions.password\n\t\t\t\t\t);\n\n\t\t\t\t\t// Apply custom fields if provided\n\t\t\t\t\tif (options.xhrFields) {\n\t\t\t\t\t\tfor (i in options.xhrFields) {\n\t\t\t\t\t\t\txhr[i] = options.xhrFields[i];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Override mime type if needed\n\t\t\t\t\tif (options.mimeType && xhr.overrideMimeType) {\n\t\t\t\t\t\txhr.overrideMimeType(options.mimeType);\n\t\t\t\t\t}\n\n\t\t\t\t\t// X-Requested-With header\n\t\t\t\t\t// For cross-domain requests, seeing as conditions for a preflight are\n\t\t\t\t\t// akin to a jigsaw puzzle, we simply never set it to be sure.\n\t\t\t\t\t// (it can always be set on a per-request basis or even using ajaxSetup)\n\t\t\t\t\t// For same-domain requests, won't change header if already provided.\n\t\t\t\t\tif (!options.crossDomain && !headers[\"X-Requested-With\"]) {\n\t\t\t\t\t\theaders[\"X-Requested-With\"] = \"XMLHttpRequest\";\n\t\t\t\t\t}\n\n\t\t\t\t\t// Set headers\n\t\t\t\t\tfor (i in headers) {\n\t\t\t\t\t\txhr.setRequestHeader(i, headers[i]);\n\t\t\t\t\t}\n\n\t\t\t\t\t// Callback\n\t\t\t\t\tcallback = function (type) {\n\t\t\t\t\t\treturn function () {\n\t\t\t\t\t\t\tif (callback) {\n\t\t\t\t\t\t\t\tcallback = errorCallback = xhr.onload =\n\t\t\t\t\t\t\t\t\txhr.onerror = xhr.onabort = xhr.ontimeout =\n\t\t\t\t\t\t\t\t\txhr.onreadystatechange = null;\n\n\t\t\t\t\t\t\t\tif (type === \"abort\") {\n\t\t\t\t\t\t\t\t\txhr.abort();\n\t\t\t\t\t\t\t\t} else if (type === \"error\") {\n\n\t\t\t\t\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t\t\t\t\t// On a manual native abort, IE9 throws\n\t\t\t\t\t\t\t\t\t// errors on any property access that is not readyState\n\t\t\t\t\t\t\t\t\tif (typeof xhr.status !== \"number\") {\n\t\t\t\t\t\t\t\t\t\tcomplete(0, \"error\");\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tcomplete(\n\n\t\t\t\t\t\t\t\t\t\t\t// File: protocol always yields status 0; see trac-8605, trac-14207\n\t\t\t\t\t\t\t\t\t\t\txhr.status,\n\t\t\t\t\t\t\t\t\t\t\txhr.statusText\n\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tcomplete(\n\t\t\t\t\t\t\t\t\t\txhrSuccessStatus[xhr.status] || xhr.status,\n\t\t\t\t\t\t\t\t\t\txhr.statusText,\n\n\t\t\t\t\t\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t\t\t\t\t\t// IE9 has no XHR2 but throws on binary (trac-11426)\n\t\t\t\t\t\t\t\t\t\t// For XHR2 non-text, let the caller handle it (gh-2498)\n\t\t\t\t\t\t\t\t\t\t(xhr.responseType || \"text\") !== \"text\" ||\n\t\t\t\t\t\t\t\t\t\t\ttypeof xhr.responseText !== \"string\" ?\n\t\t\t\t\t\t\t\t\t\t\t{ binary: xhr.response } :\n\t\t\t\t\t\t\t\t\t\t\t{ text: xhr.responseText },\n\t\t\t\t\t\t\t\t\t\txhr.getAllResponseHeaders()\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\t\t\t\t\t};\n\n\t\t\t\t\t// Listen to events\n\t\t\t\t\txhr.onload = callback();\n\t\t\t\t\terrorCallback = xhr.onerror = xhr.ontimeout = callback(\"error\");\n\n\t\t\t\t\t// Support: IE 9 only\n\t\t\t\t\t// Use onreadystatechange to replace onabort\n\t\t\t\t\t// to handle uncaught aborts\n\t\t\t\t\tif (xhr.onabort !== undefined) {\n\t\t\t\t\t\txhr.onabort = errorCallback;\n\t\t\t\t\t} else {\n\t\t\t\t\t\txhr.onreadystatechange = function () {\n\n\t\t\t\t\t\t\t// Check readyState before timeout as it changes\n\t\t\t\t\t\t\tif (xhr.readyState === 4) {\n\n\t\t\t\t\t\t\t\t// Allow onerror to be called first,\n\t\t\t\t\t\t\t\t// but that will not handle a native abort\n\t\t\t\t\t\t\t\t// Also, save errorCallback to a variable\n\t\t\t\t\t\t\t\t// as xhr.onerror cannot be accessed\n\t\t\t\t\t\t\t\twindow.setTimeout(function () {\n\t\t\t\t\t\t\t\t\tif (callback) {\n\t\t\t\t\t\t\t\t\t\terrorCallback();\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\t// Create the abort callback\n\t\t\t\t\tcallback = callback(\"abort\");\n\n\t\t\t\t\ttry {\n\n\t\t\t\t\t\t// Do send the request (this may raise an exception)\n\t\t\t\t\t\txhr.send(options.hasContent && options.data || null);\n\t\t\t\t\t} catch (e) {\n\n\t\t\t\t\t\t// trac-14683: Only rethrow if this hasn't been notified as an error yet\n\t\t\t\t\t\tif (callback) {\n\t\t\t\t\t\t\tthrow e;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\t\tabort: function () {\n\t\t\t\t\tif (callback) {\n\t\t\t\t\t\tcallback();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t});\n\n\n\n\n\t// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432)\n\tjQuery.ajaxPrefilter(function (s) {\n\t\tif (s.crossDomain) {\n\t\t\ts.contents.script = false;\n\t\t}\n\t});\n\n\t// Install script dataType\n\tjQuery.ajaxSetup({\n\t\taccepts: {\n\t\t\tscript: \"text/javascript, application/javascript, \" +\n\t\t\t\t\"application/ecmascript, application/x-ecmascript\"\n\t\t},\n\t\tcontents: {\n\t\t\tscript: /\\b(?:java|ecma)script\\b/\n\t\t},\n\t\tconverters: {\n\t\t\t\"text script\": function (text) {\n\t\t\t\tjQuery.globalEval(text);\n\t\t\t\treturn text;\n\t\t\t}\n\t\t}\n\t});\n\n\t// Handle cache's special case and crossDomain\n\tjQuery.ajaxPrefilter(\"script\", function (s) {\n\t\tif (s.cache === undefined) {\n\t\t\ts.cache = false;\n\t\t}\n\t\tif (s.crossDomain) {\n\t\t\ts.type = \"GET\";\n\t\t}\n\t});\n\n\t// Bind script tag hack transport\n\tjQuery.ajaxTransport(\"script\", function (s) {\n\n\t\t// This transport only deals with cross domain or forced-by-attrs requests\n\t\tif (s.crossDomain || s.scriptAttrs) {\n\t\t\tvar script, callback;\n\t\t\treturn {\n\t\t\t\tsend: function (_, complete) {\n\t\t\t\t\tscript = jQuery(\"<script>\")\n\t\t\t\t\t\t.attr(s.scriptAttrs || {})\n\t\t\t\t\t\t.prop({ charset: s.scriptCharset, src: s.url })\n\t\t\t\t\t\t.on(\"load error\", callback = function (evt) {\n\t\t\t\t\t\t\tscript.remove();\n\t\t\t\t\t\t\tcallback = null;\n\t\t\t\t\t\t\tif (evt) {\n\t\t\t\t\t\t\t\tcomplete(evt.type === \"error\" ? 404 : 200, evt.type);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\n\t\t\t\t\t// Use native DOM manipulation to avoid our domManip AJAX trickery\n\t\t\t\t\tdocument.head.appendChild(script[0]);\n\t\t\t\t},\n\t\t\t\tabort: function () {\n\t\t\t\t\tif (callback) {\n\t\t\t\t\t\tcallback();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t});\n\n\n\n\n\tvar oldCallbacks = [],\n\t\trjsonp = /(=)\\?(?=&|$)|\\?\\?/;\n\n\t// Default jsonp settings\n\tjQuery.ajaxSetup({\n\t\tjsonp: \"callback\",\n\t\tjsonpCallback: function () {\n\t\t\tvar callback = oldCallbacks.pop() || (jQuery.expando + \"_\" + (nonce.guid++));\n\t\t\tthis[callback] = true;\n\t\t\treturn callback;\n\t\t}\n\t});\n\n\t// Detect, normalize options and install callbacks for jsonp requests\n\tjQuery.ajaxPrefilter(\"json jsonp\", function (s, originalSettings, jqXHR) {\n\n\t\tvar callbackName, overwritten, responseContainer,\n\t\t\tjsonProp = s.jsonp !== false && (rjsonp.test(s.url) ?\n\t\t\t\t\"url\" :\n\t\t\t\ttypeof s.data === \"string\" &&\n\t\t\t\t(s.contentType || \"\")\n\t\t\t\t\t.indexOf(\"application/x-www-form-urlencoded\") === 0 &&\n\t\t\t\trjsonp.test(s.data) && \"data\"\n\t\t\t);\n\n\t\t// Handle iff the expected data type is \"jsonp\" or we have a parameter to set\n\t\tif (jsonProp || s.dataTypes[0] === \"jsonp\") {\n\n\t\t\t// Get callback name, remembering preexisting value associated with it\n\t\t\tcallbackName = s.jsonpCallback = isFunction(s.jsonpCallback) ?\n\t\t\t\ts.jsonpCallback() :\n\t\t\t\ts.jsonpCallback;\n\n\t\t\t// Insert callback into url or form data\n\t\t\tif (jsonProp) {\n\t\t\t\ts[jsonProp] = s[jsonProp].replace(rjsonp, \"$1\" + callbackName);\n\t\t\t} else if (s.jsonp !== false) {\n\t\t\t\ts.url += (rquery.test(s.url) ? \"&\" : \"?\") + s.jsonp + \"=\" + callbackName;\n\t\t\t}\n\n\t\t\t// Use data converter to retrieve json after script execution\n\t\t\ts.converters[\"script json\"] = function () {\n\t\t\t\tif (!responseContainer) {\n\t\t\t\t\tjQuery.error(callbackName + \" was not called\");\n\t\t\t\t}\n\t\t\t\treturn responseContainer[0];\n\t\t\t};\n\n\t\t\t// Force json dataType\n\t\t\ts.dataTypes[0] = \"json\";\n\n\t\t\t// Install callback\n\t\t\toverwritten = window[callbackName];\n\t\t\twindow[callbackName] = function () {\n\t\t\t\tresponseContainer = arguments;\n\t\t\t};\n\n\t\t\t// Clean-up function (fires after converters)\n\t\t\tjqXHR.always(function () {\n\n\t\t\t\t// If previous value didn't exist - remove it\n\t\t\t\tif (overwritten === undefined) {\n\t\t\t\t\tjQuery(window).removeProp(callbackName);\n\n\t\t\t\t\t// Otherwise restore preexisting value\n\t\t\t\t} else {\n\t\t\t\t\twindow[callbackName] = overwritten;\n\t\t\t\t}\n\n\t\t\t\t// Save back as free\n\t\t\t\tif (s[callbackName]) {\n\n\t\t\t\t\t// Make sure that re-using the options doesn't screw things around\n\t\t\t\t\ts.jsonpCallback = originalSettings.jsonpCallback;\n\n\t\t\t\t\t// Save the callback name for future use\n\t\t\t\t\toldCallbacks.push(callbackName);\n\t\t\t\t}\n\n\t\t\t\t// Call if it was a function and we have a response\n\t\t\t\tif (responseContainer && isFunction(overwritten)) {\n\t\t\t\t\toverwritten(responseContainer[0]);\n\t\t\t\t}\n\n\t\t\t\tresponseContainer = overwritten = undefined;\n\t\t\t});\n\n\t\t\t// Delegate to script\n\t\t\treturn \"script\";\n\t\t}\n\t});\n\n\n\n\n\t// Support: Safari 8 only\n\t// In Safari 8 documents created via document.implementation.createHTMLDocument\n\t// collapse sibling forms: the second one becomes a child of the first one.\n\t// Because of that, this security measure has to be disabled in Safari 8.\n\t// https://bugs.webkit.org/show_bug.cgi?id=137337\n\tsupport.createHTMLDocument = (function () {\n\t\tvar body = document.implementation.createHTMLDocument(\"\").body;\n\t\tbody.innerHTML = \"<form></form><form></form>\";\n\t\treturn body.childNodes.length === 2;\n\t})();\n\n\n\t// Argument \"data\" should be string of html\n\t// context (optional): If specified, the fragment will be created in this context,\n\t// defaults to document\n\t// keepScripts (optional): If true, will include scripts passed in the html string\n\tjQuery.parseHTML = function (data, context, keepScripts) {\n\t\tif (typeof data !== \"string\") {\n\t\t\treturn [];\n\t\t}\n\t\tif (typeof context === \"boolean\") {\n\t\t\tkeepScripts = context;\n\t\t\tcontext = false;\n\t\t}\n\n\t\tvar base, parsed, scripts;\n\n\t\tif (!context) {\n\n\t\t\t// Stop scripts or inline event handlers from being executed immediately\n\t\t\t// by using document.implementation\n\t\t\tif (support.createHTMLDocument) {\n\t\t\t\tcontext = document.implementation.createHTMLDocument(\"\");\n\n\t\t\t\t// Set the base href for the created document\n\t\t\t\t// so any parsed elements with URLs\n\t\t\t\t// are based on the document's URL (gh-2965)\n\t\t\t\tbase = context.createElement(\"base\");\n\t\t\t\tbase.href = document.location.href;\n\t\t\t\tcontext.head.appendChild(base);\n\t\t\t} else {\n\t\t\t\tcontext = document;\n\t\t\t}\n\t\t}\n\n\t\tparsed = rsingleTag.exec(data);\n\t\tscripts = !keepScripts && [];\n\n\t\t// Single tag\n\t\tif (parsed) {\n\t\t\treturn [context.createElement(parsed[1])];\n\t\t}\n\n\t\tparsed = buildFragment([data], context, scripts);\n\n\t\tif (scripts && scripts.length) {\n\t\t\tjQuery(scripts).remove();\n\t\t}\n\n\t\treturn jQuery.merge([], parsed.childNodes);\n\t};\n\n\n\t/**\n\t * Load a url into a page\n\t */\n\tjQuery.fn.load = function (url, params, callback) {\n\t\tvar selector, type, response,\n\t\t\tself = this,\n\t\t\toff = url.indexOf(\" \");\n\n\t\tif (off > -1) {\n\t\t\tselector = stripAndCollapse(url.slice(off));\n\t\t\turl = url.slice(0, off);\n\t\t}\n\n\t\t// If it's a function\n\t\tif (isFunction(params)) {\n\n\t\t\t// We assume that it's the callback\n\t\t\tcallback = params;\n\t\t\tparams = undefined;\n\n\t\t\t// Otherwise, build a param string\n\t\t} else if (params && typeof params === \"object\") {\n\t\t\ttype = \"POST\";\n\t\t}\n\n\t\t// If we have elements to modify, make the request\n\t\tif (self.length > 0) {\n\t\t\tjQuery.ajax({\n\t\t\t\turl: url,\n\n\t\t\t\t// If \"type\" variable is undefined, then \"GET\" method will be used.\n\t\t\t\t// Make value of this field explicit since\n\t\t\t\t// user can override it through ajaxSetup method\n\t\t\t\ttype: type || \"GET\",\n\t\t\t\tdataType: \"html\",\n\t\t\t\tdata: params\n\t\t\t}).done(function (responseText) {\n\n\t\t\t\t// Save response for use in complete callback\n\t\t\t\tresponse = arguments;\n\n\t\t\t\tself.html(selector ?\n\n\t\t\t\t\t// If a selector was specified, locate the right elements in a dummy div\n\t\t\t\t\t// Exclude scripts to avoid IE 'Permission Denied' errors\n\t\t\t\t\tjQuery(\"<div>\").append(jQuery.parseHTML(responseText)).find(selector) :\n\n\t\t\t\t\t// Otherwise use the full result\n\t\t\t\t\tresponseText);\n\n\t\t\t\t// If the request succeeds, this function gets \"data\", \"status\", \"jqXHR\"\n\t\t\t\t// but they are ignored because response was set above.\n\t\t\t\t// If it fails, this function gets \"jqXHR\", \"status\", \"error\"\n\t\t\t}).always(callback && function (jqXHR, status) {\n\t\t\t\tself.each(function () {\n\t\t\t\t\tcallback.apply(this, response || [jqXHR.responseText, status, jqXHR]);\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\n\t\treturn this;\n\t};\n\n\n\n\n\tjQuery.expr.pseudos.animated = function (elem) {\n\t\treturn jQuery.grep(jQuery.timers, function (fn) {\n\t\t\treturn elem === fn.elem;\n\t\t}).length;\n\t};\n\n\n\n\n\tjQuery.offset = {\n\t\tsetOffset: function (elem, options, i) {\n\t\t\tvar curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition,\n\t\t\t\tposition = jQuery.css(elem, \"position\"),\n\t\t\t\tcurElem = jQuery(elem),\n\t\t\t\tprops = {};\n\n\t\t\t// Set position first, in-case top/left are set even on static elem\n\t\t\tif (position === \"static\") {\n\t\t\t\telem.style.position = \"relative\";\n\t\t\t}\n\n\t\t\tcurOffset = curElem.offset();\n\t\t\tcurCSSTop = jQuery.css(elem, \"top\");\n\t\t\tcurCSSLeft = jQuery.css(elem, \"left\");\n\t\t\tcalculatePosition = (position === \"absolute\" || position === \"fixed\") &&\n\t\t\t\t(curCSSTop + curCSSLeft).indexOf(\"auto\") > -1;\n\n\t\t\t// Need to be able to calculate position if either\n\t\t\t// top or left is auto and position is either absolute or fixed\n\t\t\tif (calculatePosition) {\n\t\t\t\tcurPosition = curElem.position();\n\t\t\t\tcurTop = curPosition.top;\n\t\t\t\tcurLeft = curPosition.left;\n\n\t\t\t} else {\n\t\t\t\tcurTop = parseFloat(curCSSTop) || 0;\n\t\t\t\tcurLeft = parseFloat(curCSSLeft) || 0;\n\t\t\t}\n\n\t\t\tif (isFunction(options)) {\n\n\t\t\t\t// Use jQuery.extend here to allow modification of coordinates argument (gh-1848)\n\t\t\t\toptions = options.call(elem, i, jQuery.extend({}, curOffset));\n\t\t\t}\n\n\t\t\tif (options.top != null) {\n\t\t\t\tprops.top = (options.top - curOffset.top) + curTop;\n\t\t\t}\n\t\t\tif (options.left != null) {\n\t\t\t\tprops.left = (options.left - curOffset.left) + curLeft;\n\t\t\t}\n\n\t\t\tif (\"using\" in options) {\n\t\t\t\toptions.using.call(elem, props);\n\n\t\t\t} else {\n\t\t\t\tcurElem.css(props);\n\t\t\t}\n\t\t}\n\t};\n\n\tjQuery.fn.extend({\n\n\t\t// offset() relates an element's border box to the document origin\n\t\toffset: function (options) {\n\n\t\t\t// Preserve chaining for setter\n\t\t\tif (arguments.length) {\n\t\t\t\treturn options === undefined ?\n\t\t\t\t\tthis :\n\t\t\t\t\tthis.each(function (i) {\n\t\t\t\t\t\tjQuery.offset.setOffset(this, options, i);\n\t\t\t\t\t});\n\t\t\t}\n\n\t\t\tvar rect, win,\n\t\t\t\telem = this[0];\n\n\t\t\tif (!elem) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Return zeros for disconnected and hidden (display: none) elements (gh-2310)\n\t\t\t// Support: IE <=11 only\n\t\t\t// Running getBoundingClientRect on a\n\t\t\t// disconnected node in IE throws an error\n\t\t\tif (!elem.getClientRects().length) {\n\t\t\t\treturn { top: 0, left: 0 };\n\t\t\t}\n\n\t\t\t// Get document-relative position by adding viewport scroll to viewport-relative gBCR\n\t\t\trect = elem.getBoundingClientRect();\n\t\t\twin = elem.ownerDocument.defaultView;\n\t\t\treturn {\n\t\t\t\ttop: rect.top + win.pageYOffset,\n\t\t\t\tleft: rect.left + win.pageXOffset\n\t\t\t};\n\t\t},\n\n\t\t// position() relates an element's margin box to its offset parent's padding box\n\t\t// This corresponds to the behavior of CSS absolute positioning\n\t\tposition: function () {\n\t\t\tif (!this[0]) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar offsetParent, offset, doc,\n\t\t\t\telem = this[0],\n\t\t\t\tparentOffset = { top: 0, left: 0 };\n\n\t\t\t// position:fixed elements are offset from the viewport, which itself always has zero offset\n\t\t\tif (jQuery.css(elem, \"position\") === \"fixed\") {\n\n\t\t\t\t// Assume position:fixed implies availability of getBoundingClientRect\n\t\t\t\toffset = elem.getBoundingClientRect();\n\n\t\t\t} else {\n\t\t\t\toffset = this.offset();\n\n\t\t\t\t// Account for the *real* offset parent, which can be the document or its root element\n\t\t\t\t// when a statically positioned element is identified\n\t\t\t\tdoc = elem.ownerDocument;\n\t\t\t\toffsetParent = elem.offsetParent || doc.documentElement;\n\t\t\t\twhile (offsetParent &&\n\t\t\t\t\t(offsetParent === doc.body || offsetParent === doc.documentElement) &&\n\t\t\t\t\tjQuery.css(offsetParent, \"position\") === \"static\") {\n\n\t\t\t\t\toffsetParent = offsetParent.parentNode;\n\t\t\t\t}\n\t\t\t\tif (offsetParent && offsetParent !== elem && offsetParent.nodeType === 1) {\n\n\t\t\t\t\t// Incorporate borders into its offset, since they are outside its content origin\n\t\t\t\t\tparentOffset = jQuery(offsetParent).offset();\n\t\t\t\t\tparentOffset.top += jQuery.css(offsetParent, \"borderTopWidth\", true);\n\t\t\t\t\tparentOffset.left += jQuery.css(offsetParent, \"borderLeftWidth\", true);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Subtract parent offsets and element margins\n\t\t\treturn {\n\t\t\t\ttop: offset.top - parentOffset.top - jQuery.css(elem, \"marginTop\", true),\n\t\t\t\tleft: offset.left - parentOffset.left - jQuery.css(elem, \"marginLeft\", true)\n\t\t\t};\n\t\t},\n\n\t\t// This method will return documentElement in the following cases:\n\t\t// 1) For the element inside the iframe without offsetParent, this method will return\n\t\t//    documentElement of the parent window\n\t\t// 2) For the hidden or detached element\n\t\t// 3) For body or html element, i.e. in case of the html node - it will return itself\n\t\t//\n\t\t// but those exceptions were never presented as a real life use-cases\n\t\t// and might be considered as more preferable results.\n\t\t//\n\t\t// This logic, however, is not guaranteed and can change at any point in the future\n\t\toffsetParent: function () {\n\t\t\treturn this.map(function () {\n\t\t\t\tvar offsetParent = this.offsetParent;\n\n\t\t\t\twhile (offsetParent && jQuery.css(offsetParent, \"position\") === \"static\") {\n\t\t\t\t\toffsetParent = offsetParent.offsetParent;\n\t\t\t\t}\n\n\t\t\t\treturn offsetParent || documentElement;\n\t\t\t});\n\t\t}\n\t});\n\n\t// Create scrollLeft and scrollTop methods\n\tjQuery.each({ scrollLeft: \"pageXOffset\", scrollTop: \"pageYOffset\" }, function (method, prop) {\n\t\tvar top = \"pageYOffset\" === prop;\n\n\t\tjQuery.fn[method] = function (val) {\n\t\t\treturn access(this, function (elem, method, val) {\n\n\t\t\t\t// Coalesce documents and windows\n\t\t\t\tvar win;\n\t\t\t\tif (isWindow(elem)) {\n\t\t\t\t\twin = elem;\n\t\t\t\t} else if (elem.nodeType === 9) {\n\t\t\t\t\twin = elem.defaultView;\n\t\t\t\t}\n\n\t\t\t\tif (val === undefined) {\n\t\t\t\t\treturn win ? win[prop] : elem[method];\n\t\t\t\t}\n\n\t\t\t\tif (win) {\n\t\t\t\t\twin.scrollTo(\n\t\t\t\t\t\t!top ? val : win.pageXOffset,\n\t\t\t\t\t\ttop ? val : win.pageYOffset\n\t\t\t\t\t);\n\n\t\t\t\t} else {\n\t\t\t\t\telem[method] = val;\n\t\t\t\t}\n\t\t\t}, method, val, arguments.length);\n\t\t};\n\t});\n\n\t// Support: Safari <=7 - 9.1, Chrome <=37 - 49\n\t// Add the top/left cssHooks using jQuery.fn.position\n\t// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084\n\t// Blink bug: https://bugs.chromium.org/p/chromium/issues/detail?id=589347\n\t// getComputedStyle returns percent when specified for top/left/bottom/right;\n\t// rather than make the css module depend on the offset module, just check for it here\n\tjQuery.each([\"top\", \"left\"], function (_i, prop) {\n\t\tjQuery.cssHooks[prop] = addGetHookIf(support.pixelPosition,\n\t\t\tfunction (elem, computed) {\n\t\t\t\tif (computed) {\n\t\t\t\t\tcomputed = curCSS(elem, prop);\n\n\t\t\t\t\t// If curCSS returns percentage, fallback to offset\n\t\t\t\t\treturn rnumnonpx.test(computed) ?\n\t\t\t\t\t\tjQuery(elem).position()[prop] + \"px\" :\n\t\t\t\t\t\tcomputed;\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\t});\n\n\n\t// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods\n\tjQuery.each({ Height: \"height\", Width: \"width\" }, function (name, type) {\n\t\tjQuery.each({\n\t\t\tpadding: \"inner\" + name,\n\t\t\tcontent: type,\n\t\t\t\"\": \"outer\" + name\n\t\t}, function (defaultExtra, funcName) {\n\n\t\t\t// Margin is only for outerHeight, outerWidth\n\t\t\tjQuery.fn[funcName] = function (margin, value) {\n\t\t\t\tvar chainable = arguments.length && (defaultExtra || typeof margin !== \"boolean\"),\n\t\t\t\t\textra = defaultExtra || (margin === true || value === true ? \"margin\" : \"border\");\n\n\t\t\t\treturn access(this, function (elem, type, value) {\n\t\t\t\t\tvar doc;\n\n\t\t\t\t\tif (isWindow(elem)) {\n\n\t\t\t\t\t\t// $( window ).outerWidth/Height return w/h including scrollbars (gh-1729)\n\t\t\t\t\t\treturn funcName.indexOf(\"outer\") === 0 ?\n\t\t\t\t\t\t\telem[\"inner\" + name] :\n\t\t\t\t\t\t\telem.document.documentElement[\"client\" + name];\n\t\t\t\t\t}\n\n\t\t\t\t\t// Get document width or height\n\t\t\t\t\tif (elem.nodeType === 9) {\n\t\t\t\t\t\tdoc = elem.documentElement;\n\n\t\t\t\t\t\t// Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height],\n\t\t\t\t\t\t// whichever is greatest\n\t\t\t\t\t\treturn Math.max(\n\t\t\t\t\t\t\telem.body[\"scroll\" + name], doc[\"scroll\" + name],\n\t\t\t\t\t\t\telem.body[\"offset\" + name], doc[\"offset\" + name],\n\t\t\t\t\t\t\tdoc[\"client\" + name]\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\n\t\t\t\t\treturn value === undefined ?\n\n\t\t\t\t\t\t// Get width or height on the element, requesting but not forcing parseFloat\n\t\t\t\t\t\tjQuery.css(elem, type, extra) :\n\n\t\t\t\t\t\t// Set width or height on the element\n\t\t\t\t\t\tjQuery.style(elem, type, value, extra);\n\t\t\t\t}, type, chainable ? margin : undefined, chainable);\n\t\t\t};\n\t\t});\n\t});\n\n\n\tjQuery.each([\n\t\t\"ajaxStart\",\n\t\t\"ajaxStop\",\n\t\t\"ajaxComplete\",\n\t\t\"ajaxError\",\n\t\t\"ajaxSuccess\",\n\t\t\"ajaxSend\"\n\t], function (_i, type) {\n\t\tjQuery.fn[type] = function (fn) {\n\t\t\treturn this.on(type, fn);\n\t\t};\n\t});\n\n\n\n\n\tjQuery.fn.extend({\n\n\t\tbind: function (types, data, fn) {\n\t\t\treturn this.on(types, null, data, fn);\n\t\t},\n\t\tunbind: function (types, fn) {\n\t\t\treturn this.off(types, null, fn);\n\t\t},\n\n\t\tdelegate: function (selector, types, data, fn) {\n\t\t\treturn this.on(types, selector, data, fn);\n\t\t},\n\t\tundelegate: function (selector, types, fn) {\n\n\t\t\t// ( namespace ) or ( selector, types [, fn] )\n\t\t\treturn arguments.length === 1 ?\n\t\t\t\tthis.off(selector, \"**\") :\n\t\t\t\tthis.off(types, selector || \"**\", fn);\n\t\t},\n\n\t\thover: function (fnOver, fnOut) {\n\t\t\treturn this.mouseenter(fnOver).mouseleave(fnOut || fnOver);\n\t\t}\n\t});\n\n\tjQuery.each(\n\t\t(\"blur focus focusin focusout resize scroll click dblclick \" +\n\t\t\t\"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave \" +\n\t\t\t\"change select submit keydown keypress keyup contextmenu\").split(\" \"),\n\t\tfunction (_i, name) {\n\n\t\t\t// Handle event binding\n\t\t\tjQuery.fn[name] = function (data, fn) {\n\t\t\t\treturn arguments.length > 0 ?\n\t\t\t\t\tthis.on(name, null, data, fn) :\n\t\t\t\t\tthis.trigger(name);\n\t\t\t};\n\t\t}\n\t);\n\n\n\n\n\t// Support: Android <=4.0 only\n\t// Make sure we trim BOM and NBSP\n\t// Require that the \"whitespace run\" starts from a non-whitespace\n\t// to avoid O(N^2) behavior when the engine would try matching \"\\s+$\" at each space position.\n\tvar rtrim = /^[\\s\\uFEFF\\xA0]+|([^\\s\\uFEFF\\xA0])[\\s\\uFEFF\\xA0]+$/g;\n\n\t// Bind a function to a context, optionally partially applying any\n\t// arguments.\n\t// jQuery.proxy is deprecated to promote standards (specifically Function#bind)\n\t// However, it is not slated for removal any time soon\n\tjQuery.proxy = function (fn, context) {\n\t\tvar tmp, args, proxy;\n\n\t\tif (typeof context === \"string\") {\n\t\t\ttmp = fn[context];\n\t\t\tcontext = fn;\n\t\t\tfn = tmp;\n\t\t}\n\n\t\t// Quick check to determine if target is callable, in the spec\n\t\t// this throws a TypeError, but we will just return undefined.\n\t\tif (!isFunction(fn)) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\t// Simulated bind\n\t\targs = slice.call(arguments, 2);\n\t\tproxy = function () {\n\t\t\treturn fn.apply(context || this, args.concat(slice.call(arguments)));\n\t\t};\n\n\t\t// Set the guid of unique handler to the same of original handler, so it can be removed\n\t\tproxy.guid = fn.guid = fn.guid || jQuery.guid++;\n\n\t\treturn proxy;\n\t};\n\n\tjQuery.holdReady = function (hold) {\n\t\tif (hold) {\n\t\t\tjQuery.readyWait++;\n\t\t} else {\n\t\t\tjQuery.ready(true);\n\t\t}\n\t};\n\tjQuery.isArray = Array.isArray;\n\tjQuery.parseJSON = JSON.parse;\n\tjQuery.nodeName = nodeName;\n\tjQuery.isFunction = isFunction;\n\tjQuery.isWindow = isWindow;\n\tjQuery.camelCase = camelCase;\n\tjQuery.type = toType;\n\n\tjQuery.now = Date.now;\n\n\tjQuery.isNumeric = function (obj) {\n\n\t\t// As of jQuery 3.0, isNumeric is limited to\n\t\t// strings and numbers (primitives or objects)\n\t\t// that can be coerced to finite numbers (gh-2662)\n\t\tvar type = jQuery.type(obj);\n\t\treturn (type === \"number\" || type === \"string\") &&\n\n\t\t\t// parseFloat NaNs numeric-cast false positives (\"\")\n\t\t\t// ...but misinterprets leading-number strings, particularly hex literals (\"0x...\")\n\t\t\t// subtraction forces infinities to NaN\n\t\t\t!isNaN(obj - parseFloat(obj));\n\t};\n\n\tjQuery.trim = function (text) {\n\t\treturn text == null ?\n\t\t\t\"\" :\n\t\t\t(text + \"\").replace(rtrim, \"$1\");\n\t};\n\n\n\n\t// Register as a named AMD module, since jQuery can be concatenated with other\n\t// files that may use define, but not via a proper concatenation script that\n\t// understands anonymous AMD modules. A named AMD is safest and most robust\n\t// way to register. Lowercase jquery is used because AMD module names are\n\t// derived from file names, and jQuery is normally delivered in a lowercase\n\t// file name. Do this after creating the global so that if an AMD module wants\n\t// to call noConflict to hide this version of jQuery, it will work.\n\n\t// Note that for maximum portability, libraries that are not jQuery should\n\t// declare themselves as anonymous modules, and avoid setting a global if an\n\t// AMD loader is present. jQuery is a special case. For more information, see\n\t// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon\n\n\tif (typeof define === \"function\" && define.amd) {\n\t\tdefine(\"jquery\", [], function () {\n\t\t\treturn jQuery;\n\t\t});\n\t}\n\n\n\n\n\tvar\n\n\t\t// Map over jQuery in case of overwrite\n\t\t_jQuery = window.jQuery,\n\n\t\t// Map over the $ in case of overwrite\n\t\t_$ = window.$;\n\n\tjQuery.noConflict = function (deep) {\n\t\tif (window.$ === jQuery) {\n\t\t\twindow.$ = _$;\n\t\t}\n\n\t\tif (deep && window.jQuery === jQuery) {\n\t\t\twindow.jQuery = _jQuery;\n\t\t}\n\n\t\treturn jQuery;\n\t};\n\n\t// Expose jQuery and $ identifiers, even in AMD\n\t// (trac-7102#comment:10, https://github.com/jquery/jquery/pull/557)\n\t// and CommonJS for browser emulators (trac-13566)\n\tif (typeof noGlobal === \"undefined\") {\n\t\twindow.jQuery = window.$ = jQuery;\n\t}\n\n\n\n\n\treturn jQuery;\n});"
  },
  {
    "path": "src/sourceDev.WebApp/SharedThemes/litera/Shared/_Layout.cshtml",
    "content": "﻿@inject ISiteContextResolver siteResolver\n@inject ICoreThemeHelper themeHelper\n@{\n    var themeSettings = themeHelper.GetThemeSettings();\n    @*\n        These settings can be set by a main view to show additional columns.\n        Views that push content into the optional sections SideNav, AsidePrimary, and AsideSecondary\n        are obligated to set the needed viewtate property to true to show the section,\n        otherwise an error will occur.\n        The sideNav column also supports a toggle so it can be hidden and toggled visible even though it renders.\n    *@\n    bool sideNavVisible = true.Equals(ViewData[\"SideNavVisible\"]);\n    string sideNavToggleClass = ViewData[\"SideNavToggle\"]?.ToString() ?? \"collapse\";\n    bool asidePrimaryVisible = true.Equals(ViewData[\"AsidePrimaryVisible\"]);\n    bool asideSecondaryVisible = true.Equals(ViewData[\"AsideSecondaryVisible\"]);\n    var Tenant = await siteResolver.ResolveSite(Context.Request.Host.Host, Context.Request.Path);\n    var siteRoot = \"\";\n    if (!string.IsNullOrWhiteSpace(Tenant.SiteFolderName)) { siteRoot = \"/\" + Tenant.SiteFolderName; }\n    \n}\n<!DOCTYPE html>\n<html lang=\"@CultureInfo.CurrentUICulture.Name\">\n<head>\n    <meta charset=\"utf-8\" />\n    <title>@ViewData[\"Title\"] - @(Tenant?.SiteName ?? \"Sample\")</title>\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1, shrink-to-fit=no\">\n    @RenderSection(\"Meta\", required: false)\n    <environment names=\"Development\">\n        <link rel=\"stylesheet\" href=\"~/css/bootstrap.css\" cs-resolve-theme-resource=\"true\" cs-shared-theme=\"true\" cs-tenant=\"@Tenant\" />\n        <link rel=\"stylesheet\" href=\"~/css/fontawesome-all.min.css\" cs-resolve-theme-resource=\"true\" cs-shared-theme=\"true\" cs-tenant=\"@Tenant\" />\n        <link rel=\"stylesheet\" href=\"~/css/site.css\" cs-resolve-theme-resource=\"true\" cs-shared-theme=\"true\" cs-tenant=\"@Tenant\" asp-append-version=\"true\" />\n    </environment>\n    <environment names=\"Staging,Production\">\n        <link rel=\"stylesheet\" href=\"~/css/bootstrap.min.css\" cs-resolve-theme-resource=\"true\" cs-shared-theme=\"true\" cs-tenant=\"@Tenant\" />\n        <link rel=\"stylesheet\" href=\"~/css/fontawesome-all.min.css\" cs-resolve-theme-resource=\"true\" cs-shared-theme=\"true\" cs-tenant=\"@Tenant\" />\n        <link rel=\"stylesheet\" href=\"~/css/site.min.css\" cs-resolve-theme-resource=\"true\" cs-shared-theme=\"true\" cs-tenant=\"@Tenant\" asp-append-version=\"true\" />\n    </environment>\n    @RenderSection(\"Styles\", required: false)    \n    \n    <google-analytics profile-id=\"@Tenant.GoogleAnalyticsProfileId\" user-id=\"@User.GetUserId()\"></google-analytics>\n    <base href=\"@Context.Request.Path\" />\n</head>\n<body class=\"d-flex flex-column @ViewData[\"BodyClass\"]\">\n    <header class=\"bg-white\">\n        <a id=\"skippy\" class=\"visually-hidden visually-hidden-focusable\" href=\"#content\">\n            <div class=\"container\">\n                <span class=\"skiplink-text\">Skip to main content</span>\n            </div>\n        </a>\n        <div class=\"fixed-top container-fluid brand-header bg-white\">\n            <div class=\"d-flex align-items-center bg-white\">\n                @if (!string.IsNullOrWhiteSpace(Tenant.LogoUrl))\n                {\n                    <div>\n                         <partial name=\"SiteLogoPartial\" model=\"@Tenant\" />\n                    </div>\n                }\n                @if (Tenant.ShowSiteNameLink)\n                {\n                    <div class=\"align-self-center pt-4 pt-sm-0\">\n                         <partial name=\"SiteTitlePartial\" model=\"@Tenant\" />\n                    </div>\n                }\n                @if (!string.IsNullOrWhiteSpace(Tenant.HeaderContent))\n                {\n                    <div class=\"flex-fill align-self-center pt-3 d-none d-sm-block\">\n                        <partial name=\"SiteHeaderPartial\" />\n                    </div>\n                }\n            </div>\n        </div>\n        <nav class=\"navbar navbar-expand-md navbar-dark fixed-top bg-dark pt-0 pb-0\">\n            <button class=\"navbar-toggler\" type=\"button\" data-bs-toggle=\"collapse\" data-bs-target=\"#navbarNavDropdown\" aria-controls=\"navbarNavDropdown\" aria-expanded=\"false\" aria-label=\"Toggle navigation\">\n                <span class=\"navbar-toggler-icon\"></span>\n            </button>\n\n            <div class=\"collapse navbar-collapse bg-dark ps-2\" id=\"navbarNavDropdown\">\n                @await Component.InvokeAsync(\"Navigation\", new { viewName = \"Bootstrap5TopNavWithDropdowns\", filterName = NamedNavigationFilters.TopNav, startingNodeKey = \"\" })\n                <partial name=\"_LoginPartialWithDropdowns\" />\n            </div>\n        </nav>\n    </header>\n    <div id=\"wrapper\" class=\"container-fluid cs-container flex-fill\">\n        @await Component.InvokeAsync(\"Navigation\", new { viewName = \"Bootstrap5Breadcrumbs\", filterName = NamedNavigationFilters.Breadcrumbs, startingNodeKey = \"\" })\n        <div class=\"row\">\n            <main id=\"content\" class=\"col order-3\">\n                <partial name=\"AlertsPartial\" />\n                <partial name=\"_CookieConsentPartial\" />\n                <partial name=\"_AutoLogoutWarningPartial\" />\n                @RenderBody()\n            </main>\n            @if (sideNavVisible)\n            {\n                <nav id=\"sidenavmenu\" class=\" col col-3 order-1 @sideNavToggleClass\">\n                    @RenderSection(\"SideNav\", required: false)\n                </nav>\n\n            }\n            @if (asideSecondaryVisible)\n            {\n                <aside id=\"asideSecondary\" class=\"col col-1 order-2\">\n                    @RenderSection(\"AsideSecondary\", required: false)\n                </aside>\n\n            }\n            @if (asidePrimaryVisible)\n            {\n                <aside id=\"asidePrimary\" class=\"col-12 col-md-3 col-sm-12  col-sm-12 order-4\">\n                    @RenderSection(\"AsidePrimary\", required: false)\n                </aside>\n\n            }\n        </div>\n    </div>\n    <footer class=\"sticky-bottom border pt-2 h-100\">\n        <div class=\"w-100 text-center\">\n            <partial name=\"SiteFooterPartial\" />\n        </div>\n        <div class=\"d-flex flex-wrap flex-grow justify-content-center\">\n            <div class=\"p-2\">\n            <ul class=\"list-unstyled d-flex flex-wrap\">\n                @if (Tenant != null && !string.IsNullOrWhiteSpace(Tenant.PrivacyPolicy))\n                {\n                    <li class=\"border-left ps-2 me-2\">\n                        <a asp-controller=\"Privacy\" asp-action=\"Index\">Privacy Policy</a>\n                    </li>\n                }\n                <li class=\"border-left ps-2 me-2\">\n                    @* you are free to remove the powered by cloudscribe link but we appreciate it if you choose to keep it! *@\n                    <a class=\"text-nowrap\" target=\"_blank\" href=\"https://www.cloudscribe.com/?utm_source=@Context.Request.Host.Value&amp;utm_medium=referral&amp;utm_campaign=poweredbycloudscribe\">Powered by cloudscribe</a>\n                </li>\n            </ul>\n        </div>\n        <div class=\"ps-sm-2  text-center w-100\"><span class=\"text-nowrap\">Copyright &copy; @DateTime.Now.Year</span><span class=\"d-none d-sm-inline\"> - </span><span> @(Tenant?.SiteName ?? \"Sample\")</span></div>\n        <partial name=\"_CookieConsentRevokePartial\" />\n        </div>\n    </footer>\n    @RenderSection(\"Toolbar\", required: false)\n    <environment names=\"Development\">\n        <script src=\"~/js/jquery.js\" cs-resolve-theme-resource=\"true\" cs-shared-theme=\"true\" cs-tenant=\"@Tenant\"></script>\n        <script src=\"~/js/bootstrap.bundle.js\" cs-resolve-theme-resource=\"true\" cs-shared-theme=\"true\" cs-tenant=\"@Tenant\"></script>\n        <script src=\"~/cr/js/bs4.smartmenus.min.js\"></script>\n    </environment>\n    <environment names=\"Staging,Production\">\n        <script src=\"~/js/jquery.min.js\" cs-resolve-theme-resource=\"true\" cs-shared-theme=\"true\" cs-tenant=\"@Tenant\"></script>\n        <script src=\"~/js/bootstrap.bundle.min.js\" cs-resolve-theme-resource=\"true\" cs-shared-theme=\"true\" cs-tenant=\"@Tenant\"></script>\n        <script src=\"~/cr/js/bs4.smartmenus.min.js\"></script>\n    </environment>\n    @RenderSection(\"Bottom\", required: false)\n    @RenderSection(\"Scripts\", required: false)     \n    @Html.RenderResources(\"js\") @*render any js resources declared via helpers in partial views etc*@\n    <add-this profile-id=\"@Tenant.AddThisDotComUsername\" async></add-this>\n</body>\n</html>\n"
  },
  {
    "path": "src/sourceDev.WebApp/SharedThemes/litera/wwwroot/css/_bootswatch.scss",
    "content": "// Litera 5.1.3\n// Bootswatch\n\n// Navbar\n\n.navbar {\n  font-size: $font-size-sm;\n\n  &.bg-dark {\n    background-color: $success !important;\n  }\n\n  &.bg-light {\n    background-color: $white !important;\n    border: 1px solid rgba(0, 0, 0, .1);\n\n    &.navbar-fixed-top {\n      border-width: 0 0 1px;\n    }\n\n    &.navbar-fixed-bottom {\n      border-width: 1px 0 0;\n    }\n  }\n}\n\n// Typography\n\np {\n  font-family: $font-family-serif;\n}\n\nblockquote {\n  font-style: italic;\n}\n\nfooter {\n  font-size: $font-size-sm;\n}\n\n.lead {\n  color: $gray-600;\n  font-family: $font-family-sans-serif;\n}\n\n// Tables\n\ntable,\n.table {\n  font-size: $font-size-sm;\n}\n\n// Navs\n\n.nav,\n.breadcrumb,\n.pagination {\n  font-size: $font-size-sm;\n}\n\n.dropdown-menu {\n  font-size: $font-size-sm;\n}\n\n// Indicators\n\n.alert {\n  color: $white;\n  font-size: $font-size-sm;\n\n  &,\n  p {\n    font-family: $font-family-sans-serif;\n  }\n\n  a,\n  .alert-link {\n    color: $white;\n    font-weight: 400;\n    text-decoration: underline;\n  }\n\n  @each $color, $value in $theme-colors {\n    &-#{$color} {\n      @if $enable-gradients {\n        background: $value linear-gradient($value, mix($body-bg, $value, 15%)) repeat-x;\n      } @else {\n        background-color: $value;\n      }\n    }\n  }\n\n  &-light {\n    &,\n    a,\n    .alert-link {\n      color: $body-color;\n    }\n  }\n}\n\n.badge {\n  &.bg-light {\n    color: $dark;\n  }\n}\n\n// Containers\n\n.list-group {\n  font-size: $font-size-sm;\n}\n"
  },
  {
    "path": "src/sourceDev.WebApp/SharedThemes/litera/wwwroot/css/_variables.scss",
    "content": "// Litera 5.1.3\n// Bootswatch\n\n$theme: \"litera\" !default;\n\n//\n// Color system\n//\n\n$white:    #fff !default;\n$gray-100: #f8f9fa !default;\n$gray-200: #e9ecef !default;\n$gray-300: #ddd !default;\n$gray-400: #ced4da !default;\n$gray-500: #adb5bd !default;\n$gray-600: #868e96 !default;\n$gray-700: #495057 !default;\n$gray-800: #343a40 !default;\n$gray-900: #212529 !default;\n$black:    #000 !default;\n\n$blue:    #4582ec !default;\n$indigo:  #6610f2 !default;\n$purple:  #6f42c1 !default;\n$pink:    #e83e8c !default;\n$red:     #d9534f !default;\n$orange:  #fd7e14 !default;\n$yellow:  #f0ad4e !default;\n$green:   #02b875 !default;\n$teal:    #20c997 !default;\n$cyan:    #17a2b8 !default;\n\n$primary:       $blue !default;\n$secondary:     $gray-500 !default;\n$success:       $green !default;\n$info:          $cyan !default;\n$warning:       $yellow !default;\n$danger:        $red !default;\n$light:         $gray-100 !default;\n$dark:          $gray-800 !default;\n\n$min-contrast-ratio:   1.85 !default;\n\n// Body\n\n$body-color:                $gray-800 !default;\n\n// Fonts\n\n// stylelint-disable value-keyword-case\n$font-family-sans-serif:      -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, \"Noto Sans\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\" !default;\n$font-family-serif:           Georgia, Cambria, \"Times New Roman\", Times, serif !default;\n// stylelint-enable\n\n$font-size-base:              1.1rem !default;\n$headings-font-weight:        700 !default;\n\n// Tables\n\n$table-border-color:          rgba(0, 0, 0, .1) !default;\n\n$table-bg-scale:              0 !default;\n\n// Buttons\n\n$input-btn-padding-y:         .5rem !default;\n$input-btn-padding-x:         1.1rem !default;\n$btn-font-family:             $font-family-sans-serif !default;\n$btn-font-size:               .875rem !default;\n$btn-font-size-sm:            .688rem !default;\n\n$btn-border-radius:           1.078em !default;\n$btn-border-radius-lg:        2.688em !default;\n$btn-border-radius-sm:        .844em !default;\n\n// Forms\n\n$input-border-color:                    rgba(0, 0, 0, .1) !default;\n$input-group-addon-bg:                  $gray-200 !default !default;\n\n// Navbar\n\n$navbar-dark-color:                 rgba($white, .6) !default;\n$navbar-dark-hover-color:           $white !default;\n$navbar-light-hover-color:          $body-color !default;\n$navbar-light-active-color:         $body-color !default;\n\n// Tooltips\n\n$tooltip-font-size:                 11px !default;\n\n// Badges\n\n$badge-font-weight:                 400 !default;\n$badge-padding-y:                   .6em !default;\n$badge-padding-x:                   1.2em !default;\n\n// Alerts\n\n$alert-border-width:                0 !default;\n"
  },
  {
    "path": "src/sourceDev.WebApp/SharedThemes/litera/wwwroot/css/bootstrap.css",
    "content": "/*!\n * Bootswatch v5.1.3\n * Homepage: https://bootswatch.com\n * Copyright 2012-2021 Thomas Park\n * Licensed under MIT\n * Based on Bootstrap\n*/\n/*!\n * Bootstrap v5.1.3 (https://getbootstrap.com/)\n * Copyright 2011-2021 The Bootstrap Authors\n * Copyright 2011-2021 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n:root {\n  --bs-blue: #4582ec;\n  --bs-indigo: #6610f2;\n  --bs-purple: #6f42c1;\n  --bs-pink: #e83e8c;\n  --bs-red: #d9534f;\n  --bs-orange: #fd7e14;\n  --bs-yellow: #f0ad4e;\n  --bs-green: #02b875;\n  --bs-teal: #20c997;\n  --bs-cyan: #17a2b8;\n  --bs-white: #fff;\n  --bs-gray: #868e96;\n  --bs-gray-dark: #343a40;\n  --bs-gray-100: #f8f9fa;\n  --bs-gray-200: #e9ecef;\n  --bs-gray-300: #ddd;\n  --bs-gray-400: #ced4da;\n  --bs-gray-500: #adb5bd;\n  --bs-gray-600: #868e96;\n  --bs-gray-700: #495057;\n  --bs-gray-800: #343a40;\n  --bs-gray-900: #212529;\n  --bs-primary: #4582ec;\n  --bs-secondary: #adb5bd;\n  --bs-success: #02b875;\n  --bs-info: #17a2b8;\n  --bs-warning: #f0ad4e;\n  --bs-danger: #d9534f;\n  --bs-light: #f8f9fa;\n  --bs-dark: #343a40;\n  --bs-primary-rgb: 69, 130, 236;\n  --bs-secondary-rgb: 173, 181, 189;\n  --bs-success-rgb: 2, 184, 117;\n  --bs-info-rgb: 23, 162, 184;\n  --bs-warning-rgb: 240, 173, 78;\n  --bs-danger-rgb: 217, 83, 79;\n  --bs-light-rgb: 248, 249, 250;\n  --bs-dark-rgb: 52, 58, 64;\n  --bs-white-rgb: 255, 255, 255;\n  --bs-black-rgb: 0, 0, 0;\n  --bs-body-color-rgb: 52, 58, 64;\n  --bs-body-bg-rgb: 255, 255, 255;\n  --bs-font-sans-serif: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, \"Noto Sans\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n  --bs-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n  --bs-gradient: linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));\n  --bs-body-font-family: var(--bs-font-sans-serif);\n  --bs-body-font-size: 1.1rem;\n  --bs-body-font-weight: 400;\n  --bs-body-line-height: 1.5;\n  --bs-body-color: #343a40;\n  --bs-body-bg: #fff;\n}\n\n*,\n*::before,\n*::after {\n  box-sizing: border-box;\n}\n\n@media (prefers-reduced-motion: no-preference) {\n  :root {\n    scroll-behavior: smooth;\n  }\n}\n\nbody {\n  margin: 0;\n  font-family: var(--bs-body-font-family);\n  font-size: var(--bs-body-font-size);\n  font-weight: var(--bs-body-font-weight);\n  line-height: var(--bs-body-line-height);\n  color: var(--bs-body-color);\n  text-align: var(--bs-body-text-align);\n  background-color: var(--bs-body-bg);\n  -webkit-text-size-adjust: 100%;\n  -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\n\nhr {\n  margin: 1rem 0;\n  color: inherit;\n  background-color: currentColor;\n  border: 0;\n  opacity: 0.25;\n}\n\nhr:not([size]) {\n  height: 1px;\n}\n\nh1, .h1, h2, .h2, h3, .h3, h4, .h4, h5, .h5, h6, .h6 {\n  margin-top: 0;\n  margin-bottom: 0.5rem;\n  font-weight: 700;\n  line-height: 1.2;\n}\n\nh1, .h1 {\n  font-size: calc(1.4rem + 1.8vw);\n}\n\n@media (min-width: 1200px) {\n  h1, .h1 {\n    font-size: 2.75rem;\n  }\n}\n\nh2, .h2 {\n  font-size: calc(1.345rem + 1.14vw);\n}\n\n@media (min-width: 1200px) {\n  h2, .h2 {\n    font-size: 2.2rem;\n  }\n}\n\nh3, .h3 {\n  font-size: calc(1.3175rem + 0.81vw);\n}\n\n@media (min-width: 1200px) {\n  h3, .h3 {\n    font-size: 1.925rem;\n  }\n}\n\nh4, .h4 {\n  font-size: calc(1.29rem + 0.48vw);\n}\n\n@media (min-width: 1200px) {\n  h4, .h4 {\n    font-size: 1.65rem;\n  }\n}\n\nh5, .h5 {\n  font-size: calc(1.2625rem + 0.15vw);\n}\n\n@media (min-width: 1200px) {\n  h5, .h5 {\n    font-size: 1.375rem;\n  }\n}\n\nh6, .h6 {\n  font-size: 1.1rem;\n}\n\np {\n  margin-top: 0;\n  margin-bottom: 1rem;\n}\n\nabbr[title],\nabbr[data-bs-original-title] {\n  -webkit-text-decoration: underline dotted;\n  text-decoration: underline dotted;\n  cursor: help;\n  -webkit-text-decoration-skip-ink: none;\n  text-decoration-skip-ink: none;\n}\n\naddress {\n  margin-bottom: 1rem;\n  font-style: normal;\n  line-height: inherit;\n}\n\nol,\nul {\n  padding-left: 2rem;\n}\n\nol,\nul,\ndl {\n  margin-top: 0;\n  margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n  margin-bottom: 0;\n}\n\ndt {\n  font-weight: 700;\n}\n\ndd {\n  margin-bottom: .5rem;\n  margin-left: 0;\n}\n\nblockquote {\n  margin: 0 0 1rem;\n}\n\nb,\nstrong {\n  font-weight: bolder;\n}\n\nsmall, .small {\n  font-size: 0.875em;\n}\n\nmark, .mark {\n  padding: 0.2em;\n  background-color: #fcf8e3;\n}\n\nsub,\nsup {\n  position: relative;\n  font-size: 0.75em;\n  line-height: 0;\n  vertical-align: baseline;\n}\n\nsub {\n  bottom: -.25em;\n}\n\nsup {\n  top: -.5em;\n}\n\na {\n  color: #4582ec;\n  text-decoration: underline;\n}\n\na:hover {\n  color: #3768bd;\n}\n\na:not([href]):not([class]), a:not([href]):not([class]):hover {\n  color: inherit;\n  text-decoration: none;\n}\n\npre,\ncode,\nkbd,\nsamp {\n  font-family: var(--bs-font-monospace);\n  font-size: 1em;\n  direction: ltr /* rtl:ignore */;\n  unicode-bidi: bidi-override;\n}\n\npre {\n  display: block;\n  margin-top: 0;\n  margin-bottom: 1rem;\n  overflow: auto;\n  font-size: 0.875em;\n}\n\npre code {\n  font-size: inherit;\n  color: inherit;\n  word-break: normal;\n}\n\ncode {\n  font-size: 0.875em;\n  color: #e83e8c;\n  word-wrap: break-word;\n}\n\na > code {\n  color: inherit;\n}\n\nkbd {\n  padding: 0.2rem 0.4rem;\n  font-size: 0.875em;\n  color: #fff;\n  background-color: #212529;\n  border-radius: 0.2rem;\n}\n\nkbd kbd {\n  padding: 0;\n  font-size: 1em;\n  font-weight: 700;\n}\n\nfigure {\n  margin: 0 0 1rem;\n}\n\nimg,\nsvg {\n  vertical-align: middle;\n}\n\ntable {\n  caption-side: bottom;\n  border-collapse: collapse;\n}\n\ncaption {\n  padding-top: 0.5rem;\n  padding-bottom: 0.5rem;\n  color: #868e96;\n  text-align: left;\n}\n\nth {\n  text-align: inherit;\n  text-align: -webkit-match-parent;\n}\n\nthead,\ntbody,\ntfoot,\ntr,\ntd,\nth {\n  border-color: inherit;\n  border-style: solid;\n  border-width: 0;\n}\n\nlabel {\n  display: inline-block;\n}\n\nbutton {\n  border-radius: 0;\n}\n\nbutton:focus:not(:focus-visible) {\n  outline: 0;\n}\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n  margin: 0;\n  font-family: inherit;\n  font-size: inherit;\n  line-height: inherit;\n}\n\nbutton,\nselect {\n  text-transform: none;\n}\n\n[role=\"button\"] {\n  cursor: pointer;\n}\n\nselect {\n  word-wrap: normal;\n}\n\nselect:disabled {\n  opacity: 1;\n}\n\n[list]::-webkit-calendar-picker-indicator {\n  display: none;\n}\n\nbutton,\n[type=\"button\"],\n[type=\"reset\"],\n[type=\"submit\"] {\n  -webkit-appearance: button;\n}\n\nbutton:not(:disabled),\n[type=\"button\"]:not(:disabled),\n[type=\"reset\"]:not(:disabled),\n[type=\"submit\"]:not(:disabled) {\n  cursor: pointer;\n}\n\n::-moz-focus-inner {\n  padding: 0;\n  border-style: none;\n}\n\ntextarea {\n  resize: vertical;\n}\n\nfieldset {\n  min-width: 0;\n  padding: 0;\n  margin: 0;\n  border: 0;\n}\n\nlegend {\n  float: left;\n  width: 100%;\n  padding: 0;\n  margin-bottom: 0.5rem;\n  font-size: calc(1.275rem + 0.3vw);\n  line-height: inherit;\n}\n\n@media (min-width: 1200px) {\n  legend {\n    font-size: 1.5rem;\n  }\n}\n\nlegend + * {\n  clear: left;\n}\n\n::-webkit-datetime-edit-fields-wrapper,\n::-webkit-datetime-edit-text,\n::-webkit-datetime-edit-minute,\n::-webkit-datetime-edit-hour-field,\n::-webkit-datetime-edit-day-field,\n::-webkit-datetime-edit-month-field,\n::-webkit-datetime-edit-year-field {\n  padding: 0;\n}\n\n::-webkit-inner-spin-button {\n  height: auto;\n}\n\n[type=\"search\"] {\n  outline-offset: -2px;\n  -webkit-appearance: textfield;\n}\n\n/* rtl:raw:\n[type=\"tel\"],\n[type=\"url\"],\n[type=\"email\"],\n[type=\"number\"] {\n  direction: ltr;\n}\n*/\n::-webkit-search-decoration {\n  -webkit-appearance: none;\n}\n\n::-webkit-color-swatch-wrapper {\n  padding: 0;\n}\n\n::file-selector-button {\n  font: inherit;\n}\n\n::-webkit-file-upload-button {\n  font: inherit;\n  -webkit-appearance: button;\n}\n\noutput {\n  display: inline-block;\n}\n\niframe {\n  border: 0;\n}\n\nsummary {\n  display: list-item;\n  cursor: pointer;\n}\n\nprogress {\n  vertical-align: baseline;\n}\n\n[hidden] {\n  display: none !important;\n}\n\n.lead {\n  font-size: calc(1.2625rem + 0.15vw);\n  font-weight: 300;\n}\n\n@media (min-width: 1200px) {\n  .lead {\n    font-size: 1.375rem;\n  }\n}\n\n.display-1 {\n  font-size: calc(1.625rem + 4.5vw);\n  font-weight: 300;\n  line-height: 1.2;\n}\n\n@media (min-width: 1200px) {\n  .display-1 {\n    font-size: 5rem;\n  }\n}\n\n.display-2 {\n  font-size: calc(1.575rem + 3.9vw);\n  font-weight: 300;\n  line-height: 1.2;\n}\n\n@media (min-width: 1200px) {\n  .display-2 {\n    font-size: 4.5rem;\n  }\n}\n\n.display-3 {\n  font-size: calc(1.525rem + 3.3vw);\n  font-weight: 300;\n  line-height: 1.2;\n}\n\n@media (min-width: 1200px) {\n  .display-3 {\n    font-size: 4rem;\n  }\n}\n\n.display-4 {\n  font-size: calc(1.475rem + 2.7vw);\n  font-weight: 300;\n  line-height: 1.2;\n}\n\n@media (min-width: 1200px) {\n  .display-4 {\n    font-size: 3.5rem;\n  }\n}\n\n.display-5 {\n  font-size: calc(1.425rem + 2.1vw);\n  font-weight: 300;\n  line-height: 1.2;\n}\n\n@media (min-width: 1200px) {\n  .display-5 {\n    font-size: 3rem;\n  }\n}\n\n.display-6 {\n  font-size: calc(1.375rem + 1.5vw);\n  font-weight: 300;\n  line-height: 1.2;\n}\n\n@media (min-width: 1200px) {\n  .display-6 {\n    font-size: 2.5rem;\n  }\n}\n\n.list-unstyled {\n  padding-left: 0;\n  list-style: none;\n}\n\n.list-inline {\n  padding-left: 0;\n  list-style: none;\n}\n\n.list-inline-item {\n  display: inline-block;\n}\n\n.list-inline-item:not(:last-child) {\n  margin-right: 0.5rem;\n}\n\n.initialism {\n  font-size: 0.875em;\n  text-transform: uppercase;\n}\n\n.blockquote {\n  margin-bottom: 1rem;\n  font-size: calc(1.2625rem + 0.15vw);\n}\n\n@media (min-width: 1200px) {\n  .blockquote {\n    font-size: 1.375rem;\n  }\n}\n\n.blockquote > :last-child {\n  margin-bottom: 0;\n}\n\n.blockquote-footer {\n  margin-top: -1rem;\n  margin-bottom: 1rem;\n  font-size: 0.875em;\n  color: #868e96;\n}\n\n.blockquote-footer::before {\n  content: \"\\2014\\00A0\";\n}\n\n.img-fluid {\n  max-width: 100%;\n  height: auto;\n}\n\n.img-thumbnail {\n  padding: 0.25rem;\n  background-color: #fff;\n  border: 1px solid #ddd;\n  border-radius: 0.25rem;\n  max-width: 100%;\n  height: auto;\n}\n\n.figure {\n  display: inline-block;\n}\n\n.figure-img {\n  margin-bottom: 0.5rem;\n  line-height: 1;\n}\n\n.figure-caption {\n  font-size: 0.875em;\n  color: #868e96;\n}\n\n.container,\n.container-fluid,\n.container-sm,\n.container-md,\n.container-lg,\n.container-xl,\n.container-xxl {\n  width: 100%;\n  padding-right: var(--bs-gutter-x, 0.75rem);\n  padding-left: var(--bs-gutter-x, 0.75rem);\n  margin-right: auto;\n  margin-left: auto;\n}\n\n@media (min-width: 576px) {\n  .container, .container-sm {\n    max-width: 540px;\n  }\n}\n\n@media (min-width: 768px) {\n  .container, .container-sm, .container-md {\n    max-width: 720px;\n  }\n}\n\n@media (min-width: 992px) {\n  .container, .container-sm, .container-md, .container-lg {\n    max-width: 960px;\n  }\n}\n\n@media (min-width: 1200px) {\n  .container, .container-sm, .container-md, .container-lg, .container-xl {\n    max-width: 1140px;\n  }\n}\n\n@media (min-width: 1400px) {\n  .container, .container-sm, .container-md, .container-lg, .container-xl, .container-xxl {\n    max-width: 1320px;\n  }\n}\n\n.row {\n  --bs-gutter-x: 1.5rem;\n  --bs-gutter-y: 0;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n  flex-wrap: wrap;\n  margin-top: calc(-1 * var(--bs-gutter-y));\n  margin-right: calc(-.5 * var(--bs-gutter-x));\n  margin-left: calc(-.5 * var(--bs-gutter-x));\n}\n\n.row > * {\n  -ms-flex-negative: 0;\n  flex-shrink: 0;\n  width: 100%;\n  max-width: 100%;\n  padding-right: calc(var(--bs-gutter-x) * .5);\n  padding-left: calc(var(--bs-gutter-x) * .5);\n  margin-top: var(--bs-gutter-y);\n}\n\n.col {\n  -ms-flex: 1 0 0%;\n  flex: 1 0 0%;\n}\n\n.row-cols-auto > * {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: auto;\n}\n\n.row-cols-1 > * {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 100%;\n}\n\n.row-cols-2 > * {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 50%;\n}\n\n.row-cols-3 > * {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 33.333333%;\n}\n\n.row-cols-4 > * {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 25%;\n}\n\n.row-cols-5 > * {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 20%;\n}\n\n.row-cols-6 > * {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 16.666667%;\n}\n\n.col-auto {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: auto;\n}\n\n.col-1 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 8.333333%;\n}\n\n.col-2 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 16.666667%;\n}\n\n.col-3 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 25%;\n}\n\n.col-4 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 33.333333%;\n}\n\n.col-5 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 41.666667%;\n}\n\n.col-6 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 50%;\n}\n\n.col-7 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 58.333333%;\n}\n\n.col-8 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 66.666667%;\n}\n\n.col-9 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 75%;\n}\n\n.col-10 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 83.333333%;\n}\n\n.col-11 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 91.666667%;\n}\n\n.col-12 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 100%;\n}\n\n.offset-1 {\n  margin-left: 8.333333%;\n}\n\n.offset-2 {\n  margin-left: 16.666667%;\n}\n\n.offset-3 {\n  margin-left: 25%;\n}\n\n.offset-4 {\n  margin-left: 33.333333%;\n}\n\n.offset-5 {\n  margin-left: 41.666667%;\n}\n\n.offset-6 {\n  margin-left: 50%;\n}\n\n.offset-7 {\n  margin-left: 58.333333%;\n}\n\n.offset-8 {\n  margin-left: 66.666667%;\n}\n\n.offset-9 {\n  margin-left: 75%;\n}\n\n.offset-10 {\n  margin-left: 83.333333%;\n}\n\n.offset-11 {\n  margin-left: 91.666667%;\n}\n\n.g-0,\n.gx-0 {\n  --bs-gutter-x: 0;\n}\n\n.g-0,\n.gy-0 {\n  --bs-gutter-y: 0;\n}\n\n.g-1,\n.gx-1 {\n  --bs-gutter-x: 0.25rem;\n}\n\n.g-1,\n.gy-1 {\n  --bs-gutter-y: 0.25rem;\n}\n\n.g-2,\n.gx-2 {\n  --bs-gutter-x: 0.5rem;\n}\n\n.g-2,\n.gy-2 {\n  --bs-gutter-y: 0.5rem;\n}\n\n.g-3,\n.gx-3 {\n  --bs-gutter-x: 1rem;\n}\n\n.g-3,\n.gy-3 {\n  --bs-gutter-y: 1rem;\n}\n\n.g-4,\n.gx-4 {\n  --bs-gutter-x: 1.5rem;\n}\n\n.g-4,\n.gy-4 {\n  --bs-gutter-y: 1.5rem;\n}\n\n.g-5,\n.gx-5 {\n  --bs-gutter-x: 3rem;\n}\n\n.g-5,\n.gy-5 {\n  --bs-gutter-y: 3rem;\n}\n\n@media (min-width: 576px) {\n  .col-sm {\n    -ms-flex: 1 0 0%;\n    flex: 1 0 0%;\n  }\n  .row-cols-sm-auto > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .row-cols-sm-1 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .row-cols-sm-2 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .row-cols-sm-3 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 33.333333%;\n  }\n  .row-cols-sm-4 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .row-cols-sm-5 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 20%;\n  }\n  .row-cols-sm-6 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 16.666667%;\n  }\n  .col-sm-auto {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .col-sm-1 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 8.333333%;\n  }\n  .col-sm-2 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 16.666667%;\n  }\n  .col-sm-3 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .col-sm-4 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 33.333333%;\n  }\n  .col-sm-5 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 41.666667%;\n  }\n  .col-sm-6 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .col-sm-7 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 58.333333%;\n  }\n  .col-sm-8 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 66.666667%;\n  }\n  .col-sm-9 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 75%;\n  }\n  .col-sm-10 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 83.333333%;\n  }\n  .col-sm-11 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 91.666667%;\n  }\n  .col-sm-12 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .offset-sm-0 {\n    margin-left: 0;\n  }\n  .offset-sm-1 {\n    margin-left: 8.333333%;\n  }\n  .offset-sm-2 {\n    margin-left: 16.666667%;\n  }\n  .offset-sm-3 {\n    margin-left: 25%;\n  }\n  .offset-sm-4 {\n    margin-left: 33.333333%;\n  }\n  .offset-sm-5 {\n    margin-left: 41.666667%;\n  }\n  .offset-sm-6 {\n    margin-left: 50%;\n  }\n  .offset-sm-7 {\n    margin-left: 58.333333%;\n  }\n  .offset-sm-8 {\n    margin-left: 66.666667%;\n  }\n  .offset-sm-9 {\n    margin-left: 75%;\n  }\n  .offset-sm-10 {\n    margin-left: 83.333333%;\n  }\n  .offset-sm-11 {\n    margin-left: 91.666667%;\n  }\n  .g-sm-0,\n  .gx-sm-0 {\n    --bs-gutter-x: 0;\n  }\n  .g-sm-0,\n  .gy-sm-0 {\n    --bs-gutter-y: 0;\n  }\n  .g-sm-1,\n  .gx-sm-1 {\n    --bs-gutter-x: 0.25rem;\n  }\n  .g-sm-1,\n  .gy-sm-1 {\n    --bs-gutter-y: 0.25rem;\n  }\n  .g-sm-2,\n  .gx-sm-2 {\n    --bs-gutter-x: 0.5rem;\n  }\n  .g-sm-2,\n  .gy-sm-2 {\n    --bs-gutter-y: 0.5rem;\n  }\n  .g-sm-3,\n  .gx-sm-3 {\n    --bs-gutter-x: 1rem;\n  }\n  .g-sm-3,\n  .gy-sm-3 {\n    --bs-gutter-y: 1rem;\n  }\n  .g-sm-4,\n  .gx-sm-4 {\n    --bs-gutter-x: 1.5rem;\n  }\n  .g-sm-4,\n  .gy-sm-4 {\n    --bs-gutter-y: 1.5rem;\n  }\n  .g-sm-5,\n  .gx-sm-5 {\n    --bs-gutter-x: 3rem;\n  }\n  .g-sm-5,\n  .gy-sm-5 {\n    --bs-gutter-y: 3rem;\n  }\n}\n\n@media (min-width: 768px) {\n  .col-md {\n    -ms-flex: 1 0 0%;\n    flex: 1 0 0%;\n  }\n  .row-cols-md-auto > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .row-cols-md-1 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .row-cols-md-2 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .row-cols-md-3 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 33.333333%;\n  }\n  .row-cols-md-4 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .row-cols-md-5 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 20%;\n  }\n  .row-cols-md-6 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 16.666667%;\n  }\n  .col-md-auto {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .col-md-1 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 8.333333%;\n  }\n  .col-md-2 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 16.666667%;\n  }\n  .col-md-3 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .col-md-4 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 33.333333%;\n  }\n  .col-md-5 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 41.666667%;\n  }\n  .col-md-6 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .col-md-7 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 58.333333%;\n  }\n  .col-md-8 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 66.666667%;\n  }\n  .col-md-9 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 75%;\n  }\n  .col-md-10 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 83.333333%;\n  }\n  .col-md-11 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 91.666667%;\n  }\n  .col-md-12 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .offset-md-0 {\n    margin-left: 0;\n  }\n  .offset-md-1 {\n    margin-left: 8.333333%;\n  }\n  .offset-md-2 {\n    margin-left: 16.666667%;\n  }\n  .offset-md-3 {\n    margin-left: 25%;\n  }\n  .offset-md-4 {\n    margin-left: 33.333333%;\n  }\n  .offset-md-5 {\n    margin-left: 41.666667%;\n  }\n  .offset-md-6 {\n    margin-left: 50%;\n  }\n  .offset-md-7 {\n    margin-left: 58.333333%;\n  }\n  .offset-md-8 {\n    margin-left: 66.666667%;\n  }\n  .offset-md-9 {\n    margin-left: 75%;\n  }\n  .offset-md-10 {\n    margin-left: 83.333333%;\n  }\n  .offset-md-11 {\n    margin-left: 91.666667%;\n  }\n  .g-md-0,\n  .gx-md-0 {\n    --bs-gutter-x: 0;\n  }\n  .g-md-0,\n  .gy-md-0 {\n    --bs-gutter-y: 0;\n  }\n  .g-md-1,\n  .gx-md-1 {\n    --bs-gutter-x: 0.25rem;\n  }\n  .g-md-1,\n  .gy-md-1 {\n    --bs-gutter-y: 0.25rem;\n  }\n  .g-md-2,\n  .gx-md-2 {\n    --bs-gutter-x: 0.5rem;\n  }\n  .g-md-2,\n  .gy-md-2 {\n    --bs-gutter-y: 0.5rem;\n  }\n  .g-md-3,\n  .gx-md-3 {\n    --bs-gutter-x: 1rem;\n  }\n  .g-md-3,\n  .gy-md-3 {\n    --bs-gutter-y: 1rem;\n  }\n  .g-md-4,\n  .gx-md-4 {\n    --bs-gutter-x: 1.5rem;\n  }\n  .g-md-4,\n  .gy-md-4 {\n    --bs-gutter-y: 1.5rem;\n  }\n  .g-md-5,\n  .gx-md-5 {\n    --bs-gutter-x: 3rem;\n  }\n  .g-md-5,\n  .gy-md-5 {\n    --bs-gutter-y: 3rem;\n  }\n}\n\n@media (min-width: 992px) {\n  .col-lg {\n    -ms-flex: 1 0 0%;\n    flex: 1 0 0%;\n  }\n  .row-cols-lg-auto > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .row-cols-lg-1 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .row-cols-lg-2 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .row-cols-lg-3 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 33.333333%;\n  }\n  .row-cols-lg-4 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .row-cols-lg-5 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 20%;\n  }\n  .row-cols-lg-6 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 16.666667%;\n  }\n  .col-lg-auto {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .col-lg-1 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 8.333333%;\n  }\n  .col-lg-2 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 16.666667%;\n  }\n  .col-lg-3 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .col-lg-4 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 33.333333%;\n  }\n  .col-lg-5 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 41.666667%;\n  }\n  .col-lg-6 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .col-lg-7 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 58.333333%;\n  }\n  .col-lg-8 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 66.666667%;\n  }\n  .col-lg-9 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 75%;\n  }\n  .col-lg-10 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 83.333333%;\n  }\n  .col-lg-11 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 91.666667%;\n  }\n  .col-lg-12 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .offset-lg-0 {\n    margin-left: 0;\n  }\n  .offset-lg-1 {\n    margin-left: 8.333333%;\n  }\n  .offset-lg-2 {\n    margin-left: 16.666667%;\n  }\n  .offset-lg-3 {\n    margin-left: 25%;\n  }\n  .offset-lg-4 {\n    margin-left: 33.333333%;\n  }\n  .offset-lg-5 {\n    margin-left: 41.666667%;\n  }\n  .offset-lg-6 {\n    margin-left: 50%;\n  }\n  .offset-lg-7 {\n    margin-left: 58.333333%;\n  }\n  .offset-lg-8 {\n    margin-left: 66.666667%;\n  }\n  .offset-lg-9 {\n    margin-left: 75%;\n  }\n  .offset-lg-10 {\n    margin-left: 83.333333%;\n  }\n  .offset-lg-11 {\n    margin-left: 91.666667%;\n  }\n  .g-lg-0,\n  .gx-lg-0 {\n    --bs-gutter-x: 0;\n  }\n  .g-lg-0,\n  .gy-lg-0 {\n    --bs-gutter-y: 0;\n  }\n  .g-lg-1,\n  .gx-lg-1 {\n    --bs-gutter-x: 0.25rem;\n  }\n  .g-lg-1,\n  .gy-lg-1 {\n    --bs-gutter-y: 0.25rem;\n  }\n  .g-lg-2,\n  .gx-lg-2 {\n    --bs-gutter-x: 0.5rem;\n  }\n  .g-lg-2,\n  .gy-lg-2 {\n    --bs-gutter-y: 0.5rem;\n  }\n  .g-lg-3,\n  .gx-lg-3 {\n    --bs-gutter-x: 1rem;\n  }\n  .g-lg-3,\n  .gy-lg-3 {\n    --bs-gutter-y: 1rem;\n  }\n  .g-lg-4,\n  .gx-lg-4 {\n    --bs-gutter-x: 1.5rem;\n  }\n  .g-lg-4,\n  .gy-lg-4 {\n    --bs-gutter-y: 1.5rem;\n  }\n  .g-lg-5,\n  .gx-lg-5 {\n    --bs-gutter-x: 3rem;\n  }\n  .g-lg-5,\n  .gy-lg-5 {\n    --bs-gutter-y: 3rem;\n  }\n}\n\n@media (min-width: 1200px) {\n  .col-xl {\n    -ms-flex: 1 0 0%;\n    flex: 1 0 0%;\n  }\n  .row-cols-xl-auto > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .row-cols-xl-1 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .row-cols-xl-2 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .row-cols-xl-3 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 33.333333%;\n  }\n  .row-cols-xl-4 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .row-cols-xl-5 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 20%;\n  }\n  .row-cols-xl-6 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 16.666667%;\n  }\n  .col-xl-auto {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .col-xl-1 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 8.333333%;\n  }\n  .col-xl-2 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 16.666667%;\n  }\n  .col-xl-3 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .col-xl-4 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 33.333333%;\n  }\n  .col-xl-5 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 41.666667%;\n  }\n  .col-xl-6 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .col-xl-7 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 58.333333%;\n  }\n  .col-xl-8 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 66.666667%;\n  }\n  .col-xl-9 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 75%;\n  }\n  .col-xl-10 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 83.333333%;\n  }\n  .col-xl-11 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 91.666667%;\n  }\n  .col-xl-12 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .offset-xl-0 {\n    margin-left: 0;\n  }\n  .offset-xl-1 {\n    margin-left: 8.333333%;\n  }\n  .offset-xl-2 {\n    margin-left: 16.666667%;\n  }\n  .offset-xl-3 {\n    margin-left: 25%;\n  }\n  .offset-xl-4 {\n    margin-left: 33.333333%;\n  }\n  .offset-xl-5 {\n    margin-left: 41.666667%;\n  }\n  .offset-xl-6 {\n    margin-left: 50%;\n  }\n  .offset-xl-7 {\n    margin-left: 58.333333%;\n  }\n  .offset-xl-8 {\n    margin-left: 66.666667%;\n  }\n  .offset-xl-9 {\n    margin-left: 75%;\n  }\n  .offset-xl-10 {\n    margin-left: 83.333333%;\n  }\n  .offset-xl-11 {\n    margin-left: 91.666667%;\n  }\n  .g-xl-0,\n  .gx-xl-0 {\n    --bs-gutter-x: 0;\n  }\n  .g-xl-0,\n  .gy-xl-0 {\n    --bs-gutter-y: 0;\n  }\n  .g-xl-1,\n  .gx-xl-1 {\n    --bs-gutter-x: 0.25rem;\n  }\n  .g-xl-1,\n  .gy-xl-1 {\n    --bs-gutter-y: 0.25rem;\n  }\n  .g-xl-2,\n  .gx-xl-2 {\n    --bs-gutter-x: 0.5rem;\n  }\n  .g-xl-2,\n  .gy-xl-2 {\n    --bs-gutter-y: 0.5rem;\n  }\n  .g-xl-3,\n  .gx-xl-3 {\n    --bs-gutter-x: 1rem;\n  }\n  .g-xl-3,\n  .gy-xl-3 {\n    --bs-gutter-y: 1rem;\n  }\n  .g-xl-4,\n  .gx-xl-4 {\n    --bs-gutter-x: 1.5rem;\n  }\n  .g-xl-4,\n  .gy-xl-4 {\n    --bs-gutter-y: 1.5rem;\n  }\n  .g-xl-5,\n  .gx-xl-5 {\n    --bs-gutter-x: 3rem;\n  }\n  .g-xl-5,\n  .gy-xl-5 {\n    --bs-gutter-y: 3rem;\n  }\n}\n\n@media (min-width: 1400px) {\n  .col-xxl {\n    -ms-flex: 1 0 0%;\n    flex: 1 0 0%;\n  }\n  .row-cols-xxl-auto > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .row-cols-xxl-1 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .row-cols-xxl-2 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .row-cols-xxl-3 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 33.333333%;\n  }\n  .row-cols-xxl-4 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .row-cols-xxl-5 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 20%;\n  }\n  .row-cols-xxl-6 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 16.666667%;\n  }\n  .col-xxl-auto {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .col-xxl-1 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 8.333333%;\n  }\n  .col-xxl-2 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 16.666667%;\n  }\n  .col-xxl-3 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .col-xxl-4 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 33.333333%;\n  }\n  .col-xxl-5 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 41.666667%;\n  }\n  .col-xxl-6 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .col-xxl-7 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 58.333333%;\n  }\n  .col-xxl-8 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 66.666667%;\n  }\n  .col-xxl-9 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 75%;\n  }\n  .col-xxl-10 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 83.333333%;\n  }\n  .col-xxl-11 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 91.666667%;\n  }\n  .col-xxl-12 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .offset-xxl-0 {\n    margin-left: 0;\n  }\n  .offset-xxl-1 {\n    margin-left: 8.333333%;\n  }\n  .offset-xxl-2 {\n    margin-left: 16.666667%;\n  }\n  .offset-xxl-3 {\n    margin-left: 25%;\n  }\n  .offset-xxl-4 {\n    margin-left: 33.333333%;\n  }\n  .offset-xxl-5 {\n    margin-left: 41.666667%;\n  }\n  .offset-xxl-6 {\n    margin-left: 50%;\n  }\n  .offset-xxl-7 {\n    margin-left: 58.333333%;\n  }\n  .offset-xxl-8 {\n    margin-left: 66.666667%;\n  }\n  .offset-xxl-9 {\n    margin-left: 75%;\n  }\n  .offset-xxl-10 {\n    margin-left: 83.333333%;\n  }\n  .offset-xxl-11 {\n    margin-left: 91.666667%;\n  }\n  .g-xxl-0,\n  .gx-xxl-0 {\n    --bs-gutter-x: 0;\n  }\n  .g-xxl-0,\n  .gy-xxl-0 {\n    --bs-gutter-y: 0;\n  }\n  .g-xxl-1,\n  .gx-xxl-1 {\n    --bs-gutter-x: 0.25rem;\n  }\n  .g-xxl-1,\n  .gy-xxl-1 {\n    --bs-gutter-y: 0.25rem;\n  }\n  .g-xxl-2,\n  .gx-xxl-2 {\n    --bs-gutter-x: 0.5rem;\n  }\n  .g-xxl-2,\n  .gy-xxl-2 {\n    --bs-gutter-y: 0.5rem;\n  }\n  .g-xxl-3,\n  .gx-xxl-3 {\n    --bs-gutter-x: 1rem;\n  }\n  .g-xxl-3,\n  .gy-xxl-3 {\n    --bs-gutter-y: 1rem;\n  }\n  .g-xxl-4,\n  .gx-xxl-4 {\n    --bs-gutter-x: 1.5rem;\n  }\n  .g-xxl-4,\n  .gy-xxl-4 {\n    --bs-gutter-y: 1.5rem;\n  }\n  .g-xxl-5,\n  .gx-xxl-5 {\n    --bs-gutter-x: 3rem;\n  }\n  .g-xxl-5,\n  .gy-xxl-5 {\n    --bs-gutter-y: 3rem;\n  }\n}\n\n.table {\n  --bs-table-bg: transparent;\n  --bs-table-accent-bg: transparent;\n  --bs-table-striped-color: #343a40;\n  --bs-table-striped-bg: rgba(0, 0, 0, 0.05);\n  --bs-table-active-color: #343a40;\n  --bs-table-active-bg: rgba(0, 0, 0, 0.1);\n  --bs-table-hover-color: #343a40;\n  --bs-table-hover-bg: rgba(0, 0, 0, 0.075);\n  width: 100%;\n  margin-bottom: 1rem;\n  color: #343a40;\n  vertical-align: top;\n  border-color: rgba(0, 0, 0, 0.1);\n}\n\n.table > :not(caption) > * > * {\n  padding: 0.5rem 0.5rem;\n  background-color: var(--bs-table-bg);\n  border-bottom-width: 1px;\n  box-shadow: inset 0 0 0 9999px var(--bs-table-accent-bg);\n}\n\n.table > tbody {\n  vertical-align: inherit;\n}\n\n.table > thead {\n  vertical-align: bottom;\n}\n\n.table > :not(:first-child) {\n  border-top: 2px solid currentColor;\n}\n\n.caption-top {\n  caption-side: top;\n}\n\n.table-sm > :not(caption) > * > * {\n  padding: 0.25rem 0.25rem;\n}\n\n.table-bordered > :not(caption) > * {\n  border-width: 1px 0;\n}\n\n.table-bordered > :not(caption) > * > * {\n  border-width: 0 1px;\n}\n\n.table-borderless > :not(caption) > * > * {\n  border-bottom-width: 0;\n}\n\n.table-borderless > :not(:first-child) {\n  border-top-width: 0;\n}\n\n.table-striped > tbody > tr:nth-of-type(odd) > * {\n  --bs-table-accent-bg: var(--bs-table-striped-bg);\n  color: var(--bs-table-striped-color);\n}\n\n.table-active {\n  --bs-table-accent-bg: var(--bs-table-active-bg);\n  color: var(--bs-table-active-color);\n}\n\n.table-hover > tbody > tr:hover > * {\n  --bs-table-accent-bg: var(--bs-table-hover-bg);\n  color: var(--bs-table-hover-color);\n}\n\n.table-primary {\n  --bs-table-bg: #4582ec;\n  --bs-table-striped-bg: #4e88ed;\n  --bs-table-striped-color: #fff;\n  --bs-table-active-bg: #588fee;\n  --bs-table-active-color: #fff;\n  --bs-table-hover-bg: #538bed;\n  --bs-table-hover-color: #fff;\n  color: #fff;\n  border-color: #588fee;\n}\n\n.table-secondary {\n  --bs-table-bg: #adb5bd;\n  --bs-table-striped-bg: #b1b9c0;\n  --bs-table-striped-color: #fff;\n  --bs-table-active-bg: #b5bcc4;\n  --bs-table-active-color: #fff;\n  --bs-table-hover-bg: #b3bbc2;\n  --bs-table-hover-color: #fff;\n  color: #fff;\n  border-color: #b5bcc4;\n}\n\n.table-success {\n  --bs-table-bg: #02b875;\n  --bs-table-striped-bg: #0fbc7c;\n  --bs-table-striped-color: #fff;\n  --bs-table-active-bg: #1bbf83;\n  --bs-table-active-color: #fff;\n  --bs-table-hover-bg: #15bd7f;\n  --bs-table-hover-color: #fff;\n  color: #fff;\n  border-color: #1bbf83;\n}\n\n.table-info {\n  --bs-table-bg: #17a2b8;\n  --bs-table-striped-bg: #23a7bc;\n  --bs-table-striped-color: #fff;\n  --bs-table-active-bg: #2eabbf;\n  --bs-table-active-color: #fff;\n  --bs-table-hover-bg: #28a9bd;\n  --bs-table-hover-color: #fff;\n  color: #fff;\n  border-color: #2eabbf;\n}\n\n.table-warning {\n  --bs-table-bg: #f0ad4e;\n  --bs-table-striped-bg: #f1b157;\n  --bs-table-striped-color: #fff;\n  --bs-table-active-bg: #f2b560;\n  --bs-table-active-color: #000;\n  --bs-table-hover-bg: #f1b35b;\n  --bs-table-hover-color: #fff;\n  color: #fff;\n  border-color: #f2b560;\n}\n\n.table-danger {\n  --bs-table-bg: #d9534f;\n  --bs-table-striped-bg: #db5c58;\n  --bs-table-striped-color: #fff;\n  --bs-table-active-bg: #dd6461;\n  --bs-table-active-color: #fff;\n  --bs-table-hover-bg: #dc605c;\n  --bs-table-hover-color: #fff;\n  color: #fff;\n  border-color: #dd6461;\n}\n\n.table-light {\n  --bs-table-bg: #f8f9fa;\n  --bs-table-striped-bg: #ecedee;\n  --bs-table-striped-color: #000;\n  --bs-table-active-bg: #dfe0e1;\n  --bs-table-active-color: #000;\n  --bs-table-hover-bg: #e5e6e7;\n  --bs-table-hover-color: #000;\n  color: #000;\n  border-color: #dfe0e1;\n}\n\n.table-dark {\n  --bs-table-bg: #343a40;\n  --bs-table-striped-bg: #3e444a;\n  --bs-table-striped-color: #fff;\n  --bs-table-active-bg: #484e53;\n  --bs-table-active-color: #fff;\n  --bs-table-hover-bg: #43494e;\n  --bs-table-hover-color: #fff;\n  color: #fff;\n  border-color: #484e53;\n}\n\n.table-responsive {\n  overflow-x: auto;\n  -webkit-overflow-scrolling: touch;\n}\n\n@media (max-width: 575.98px) {\n  .table-responsive-sm {\n    overflow-x: auto;\n    -webkit-overflow-scrolling: touch;\n  }\n}\n\n@media (max-width: 767.98px) {\n  .table-responsive-md {\n    overflow-x: auto;\n    -webkit-overflow-scrolling: touch;\n  }\n}\n\n@media (max-width: 991.98px) {\n  .table-responsive-lg {\n    overflow-x: auto;\n    -webkit-overflow-scrolling: touch;\n  }\n}\n\n@media (max-width: 1199.98px) {\n  .table-responsive-xl {\n    overflow-x: auto;\n    -webkit-overflow-scrolling: touch;\n  }\n}\n\n@media (max-width: 1399.98px) {\n  .table-responsive-xxl {\n    overflow-x: auto;\n    -webkit-overflow-scrolling: touch;\n  }\n}\n\n.form-label {\n  margin-bottom: 0.5rem;\n}\n\n.col-form-label {\n  padding-top: calc(0.5rem + 1px);\n  padding-bottom: calc(0.5rem + 1px);\n  margin-bottom: 0;\n  font-size: inherit;\n  line-height: 1.5;\n}\n\n.col-form-label-lg {\n  padding-top: calc(0.5rem + 1px);\n  padding-bottom: calc(0.5rem + 1px);\n  font-size: calc(1.2625rem + 0.15vw);\n}\n\n@media (min-width: 1200px) {\n  .col-form-label-lg {\n    font-size: 1.375rem;\n  }\n}\n\n.col-form-label-sm {\n  padding-top: calc(0.25rem + 1px);\n  padding-bottom: calc(0.25rem + 1px);\n  font-size: 0.9625rem;\n}\n\n.form-text {\n  margin-top: 0.25rem;\n  font-size: 0.875em;\n  color: #868e96;\n}\n\n.form-control {\n  display: block;\n  width: 100%;\n  padding: 0.5rem 1.1rem;\n  font-size: 1.1rem;\n  font-weight: 400;\n  line-height: 1.5;\n  color: #343a40;\n  background-color: #fff;\n  background-clip: padding-box;\n  border: 1px solid rgba(0, 0, 0, 0.1);\n  -webkit-appearance: none;\n  -moz-appearance: none;\n  appearance: none;\n  border-radius: 0.25rem;\n  transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .form-control {\n    transition: none;\n  }\n}\n\n.form-control[type=\"file\"] {\n  overflow: hidden;\n}\n\n.form-control[type=\"file\"]:not(:disabled):not([readonly]) {\n  cursor: pointer;\n}\n\n.form-control:focus {\n  color: #343a40;\n  background-color: #fff;\n  border-color: #a2c1f6;\n  outline: 0;\n  box-shadow: 0 0 0 0.25rem rgba(69, 130, 236, 0.25);\n}\n\n.form-control::-webkit-date-and-time-value {\n  height: 1.5em;\n}\n\n.form-control::-webkit-input-placeholder {\n  color: #868e96;\n  opacity: 1;\n}\n\n.form-control::-moz-placeholder {\n  color: #868e96;\n  opacity: 1;\n}\n\n.form-control:-ms-input-placeholder {\n  color: #868e96;\n  opacity: 1;\n}\n\n.form-control::-ms-input-placeholder {\n  color: #868e96;\n  opacity: 1;\n}\n\n.form-control::placeholder {\n  color: #868e96;\n  opacity: 1;\n}\n\n.form-control:disabled, .form-control[readonly] {\n  background-color: #e9ecef;\n  opacity: 1;\n}\n\n.form-control::file-selector-button {\n  padding: 0.5rem 1.1rem;\n  margin: -0.5rem -1.1rem;\n  -webkit-margin-end: 1.1rem;\n  -moz-margin-end: 1.1rem;\n  margin-inline-end: 1.1rem;\n  color: #343a40;\n  background-color: #e9ecef;\n  pointer-events: none;\n  border-color: inherit;\n  border-style: solid;\n  border-width: 0;\n  border-inline-end-width: 1px;\n  border-radius: 0;\n  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .form-control::file-selector-button {\n    transition: none;\n  }\n}\n\n.form-control:hover:not(:disabled):not([readonly])::file-selector-button {\n  background-color: #dde0e3;\n}\n\n.form-control::-webkit-file-upload-button {\n  padding: 0.5rem 1.1rem;\n  margin: -0.5rem -1.1rem;\n  -webkit-margin-end: 1.1rem;\n  margin-inline-end: 1.1rem;\n  color: #343a40;\n  background-color: #e9ecef;\n  pointer-events: none;\n  border-color: inherit;\n  border-style: solid;\n  border-width: 0;\n  border-inline-end-width: 1px;\n  border-radius: 0;\n  -webkit-transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .form-control::-webkit-file-upload-button {\n    -webkit-transition: none;\n    transition: none;\n  }\n}\n\n.form-control:hover:not(:disabled):not([readonly])::-webkit-file-upload-button {\n  background-color: #dde0e3;\n}\n\n.form-control-plaintext {\n  display: block;\n  width: 100%;\n  padding: 0.5rem 0;\n  margin-bottom: 0;\n  line-height: 1.5;\n  color: #343a40;\n  background-color: transparent;\n  border: solid transparent;\n  border-width: 1px 0;\n}\n\n.form-control-plaintext.form-control-sm, .form-control-plaintext.form-control-lg {\n  padding-right: 0;\n  padding-left: 0;\n}\n\n.form-control-sm {\n  min-height: calc(1.5em + 0.5rem + 2px);\n  padding: 0.25rem 0.5rem;\n  font-size: 0.9625rem;\n  border-radius: 0.2rem;\n}\n\n.form-control-sm::file-selector-button {\n  padding: 0.25rem 0.5rem;\n  margin: -0.25rem -0.5rem;\n  -webkit-margin-end: 0.5rem;\n  -moz-margin-end: 0.5rem;\n  margin-inline-end: 0.5rem;\n}\n\n.form-control-sm::-webkit-file-upload-button {\n  padding: 0.25rem 0.5rem;\n  margin: -0.25rem -0.5rem;\n  -webkit-margin-end: 0.5rem;\n  margin-inline-end: 0.5rem;\n}\n\n.form-control-lg {\n  min-height: calc(1.5em + 1rem + 2px);\n  padding: 0.5rem 1rem;\n  font-size: calc(1.2625rem + 0.15vw);\n  border-radius: 0.3rem;\n}\n\n@media (min-width: 1200px) {\n  .form-control-lg {\n    font-size: 1.375rem;\n  }\n}\n\n.form-control-lg::file-selector-button {\n  padding: 0.5rem 1rem;\n  margin: -0.5rem -1rem;\n  -webkit-margin-end: 1rem;\n  -moz-margin-end: 1rem;\n  margin-inline-end: 1rem;\n}\n\n.form-control-lg::-webkit-file-upload-button {\n  padding: 0.5rem 1rem;\n  margin: -0.5rem -1rem;\n  -webkit-margin-end: 1rem;\n  margin-inline-end: 1rem;\n}\n\ntextarea.form-control {\n  min-height: calc(1.5em + 1rem + 2px);\n}\n\ntextarea.form-control-sm {\n  min-height: calc(1.5em + 0.5rem + 2px);\n}\n\ntextarea.form-control-lg {\n  min-height: calc(1.5em + 1rem + 2px);\n}\n\n.form-control-color {\n  width: 3rem;\n  height: auto;\n  padding: 0.5rem;\n}\n\n.form-control-color:not(:disabled):not([readonly]) {\n  cursor: pointer;\n}\n\n.form-control-color::-moz-color-swatch {\n  height: 1.5em;\n  border-radius: 0.25rem;\n}\n\n.form-control-color::-webkit-color-swatch {\n  height: 1.5em;\n  border-radius: 0.25rem;\n}\n\n.form-select {\n  display: block;\n  width: 100%;\n  padding: 0.5rem 3.3rem 0.5rem 1.1rem;\n  -moz-padding-start: calc(1.1rem - 3px);\n  font-size: 1.1rem;\n  font-weight: 400;\n  line-height: 1.5;\n  color: #343a40;\n  background-color: #fff;\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e\");\n  background-repeat: no-repeat;\n  background-position: right 1.1rem center;\n  background-size: 16px 12px;\n  border: 1px solid rgba(0, 0, 0, 0.1);\n  border-radius: 0.25rem;\n  transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n  -webkit-appearance: none;\n  -moz-appearance: none;\n  appearance: none;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .form-select {\n    transition: none;\n  }\n}\n\n.form-select:focus {\n  border-color: #a2c1f6;\n  outline: 0;\n  box-shadow: 0 0 0 0.25rem rgba(69, 130, 236, 0.25);\n}\n\n.form-select[multiple], .form-select[size]:not([size=\"1\"]) {\n  padding-right: 1.1rem;\n  background-image: none;\n}\n\n.form-select:disabled {\n  background-color: #e9ecef;\n}\n\n.form-select:-moz-focusring {\n  color: transparent;\n  text-shadow: 0 0 0 #343a40;\n}\n\n.form-select-sm {\n  padding-top: 0.25rem;\n  padding-bottom: 0.25rem;\n  padding-left: 0.5rem;\n  font-size: 0.9625rem;\n  border-radius: 0.2rem;\n}\n\n.form-select-lg {\n  padding-top: 0.5rem;\n  padding-bottom: 0.5rem;\n  padding-left: 1rem;\n  font-size: calc(1.2625rem + 0.15vw);\n  border-radius: 0.3rem;\n}\n\n@media (min-width: 1200px) {\n  .form-select-lg {\n    font-size: 1.375rem;\n  }\n}\n\n.form-check {\n  display: block;\n  min-height: 1.65rem;\n  padding-left: 1.5em;\n  margin-bottom: 0.125rem;\n}\n\n.form-check .form-check-input {\n  float: left;\n  margin-left: -1.5em;\n}\n\n.form-check-input {\n  width: 1em;\n  height: 1em;\n  margin-top: 0.25em;\n  vertical-align: top;\n  background-color: #fff;\n  background-repeat: no-repeat;\n  background-position: center;\n  background-size: contain;\n  border: 1px solid rgba(0, 0, 0, 0.25);\n  -webkit-appearance: none;\n  -moz-appearance: none;\n  appearance: none;\n  -webkit-print-color-adjust: exact;\n  color-adjust: exact;\n}\n\n.form-check-input[type=\"checkbox\"] {\n  border-radius: 0.25em;\n}\n\n.form-check-input[type=\"radio\"] {\n  border-radius: 50%;\n}\n\n.form-check-input:active {\n  -webkit-filter: brightness(90%);\n  filter: brightness(90%);\n}\n\n.form-check-input:focus {\n  border-color: #a2c1f6;\n  outline: 0;\n  box-shadow: 0 0 0 0.25rem rgba(69, 130, 236, 0.25);\n}\n\n.form-check-input:checked {\n  background-color: #4582ec;\n  border-color: #4582ec;\n}\n\n.form-check-input:checked[type=\"checkbox\"] {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10l3 3l6-6'/%3e%3c/svg%3e\");\n}\n\n.form-check-input:checked[type=\"radio\"] {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='2' fill='%23fff'/%3e%3c/svg%3e\");\n}\n\n.form-check-input[type=\"checkbox\"]:indeterminate {\n  background-color: #4582ec;\n  border-color: #4582ec;\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10h8'/%3e%3c/svg%3e\");\n}\n\n.form-check-input:disabled {\n  pointer-events: none;\n  -webkit-filter: none;\n  filter: none;\n  opacity: 0.5;\n}\n\n.form-check-input[disabled] ~ .form-check-label, .form-check-input:disabled ~ .form-check-label {\n  opacity: 0.5;\n}\n\n.form-switch {\n  padding-left: 2.5em;\n}\n\n.form-switch .form-check-input {\n  width: 2em;\n  margin-left: -2.5em;\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%280, 0, 0, 0.25%29'/%3e%3c/svg%3e\");\n  background-position: left center;\n  border-radius: 2em;\n  transition: background-position 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .form-switch .form-check-input {\n    transition: none;\n  }\n}\n\n.form-switch .form-check-input:focus {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23a2c1f6'/%3e%3c/svg%3e\");\n}\n\n.form-switch .form-check-input:checked {\n  background-position: right center;\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e\");\n}\n\n.form-check-inline {\n  display: inline-block;\n  margin-right: 1rem;\n}\n\n.btn-check {\n  position: absolute;\n  clip: rect(0, 0, 0, 0);\n  pointer-events: none;\n}\n\n.btn-check[disabled] + .btn, .btn-check:disabled + .btn {\n  pointer-events: none;\n  -webkit-filter: none;\n  filter: none;\n  opacity: 0.65;\n}\n\n.form-range {\n  width: 100%;\n  height: 1.5rem;\n  padding: 0;\n  background-color: transparent;\n  -webkit-appearance: none;\n  -moz-appearance: none;\n  appearance: none;\n}\n\n.form-range:focus {\n  outline: 0;\n}\n\n.form-range:focus::-webkit-slider-thumb {\n  box-shadow: 0 0 0 1px #fff, 0 0 0 0.25rem rgba(69, 130, 236, 0.25);\n}\n\n.form-range:focus::-moz-range-thumb {\n  box-shadow: 0 0 0 1px #fff, 0 0 0 0.25rem rgba(69, 130, 236, 0.25);\n}\n\n.form-range::-moz-focus-outer {\n  border: 0;\n}\n\n.form-range::-webkit-slider-thumb {\n  width: 1rem;\n  height: 1rem;\n  margin-top: -0.25rem;\n  background-color: #4582ec;\n  border: 0;\n  border-radius: 1rem;\n  -webkit-transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n  transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n  -webkit-appearance: none;\n  appearance: none;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .form-range::-webkit-slider-thumb {\n    -webkit-transition: none;\n    transition: none;\n  }\n}\n\n.form-range::-webkit-slider-thumb:active {\n  background-color: #c7daf9;\n}\n\n.form-range::-webkit-slider-runnable-track {\n  width: 100%;\n  height: 0.5rem;\n  color: transparent;\n  cursor: pointer;\n  background-color: #ddd;\n  border-color: transparent;\n  border-radius: 1rem;\n}\n\n.form-range::-moz-range-thumb {\n  width: 1rem;\n  height: 1rem;\n  background-color: #4582ec;\n  border: 0;\n  border-radius: 1rem;\n  -moz-transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n  transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n  -moz-appearance: none;\n  appearance: none;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .form-range::-moz-range-thumb {\n    -moz-transition: none;\n    transition: none;\n  }\n}\n\n.form-range::-moz-range-thumb:active {\n  background-color: #c7daf9;\n}\n\n.form-range::-moz-range-track {\n  width: 100%;\n  height: 0.5rem;\n  color: transparent;\n  cursor: pointer;\n  background-color: #ddd;\n  border-color: transparent;\n  border-radius: 1rem;\n}\n\n.form-range:disabled {\n  pointer-events: none;\n}\n\n.form-range:disabled::-webkit-slider-thumb {\n  background-color: #adb5bd;\n}\n\n.form-range:disabled::-moz-range-thumb {\n  background-color: #adb5bd;\n}\n\n.form-floating {\n  position: relative;\n}\n\n.form-floating > .form-control,\n.form-floating > .form-select {\n  height: calc(3.5rem + 2px);\n  line-height: 1.25;\n}\n\n.form-floating > label {\n  position: absolute;\n  top: 0;\n  left: 0;\n  height: 100%;\n  padding: 1rem 1.1rem;\n  pointer-events: none;\n  border: 1px solid transparent;\n  -webkit-transform-origin: 0 0;\n  transform-origin: 0 0;\n  transition: opacity 0.1s ease-in-out, -webkit-transform 0.1s ease-in-out;\n  transition: opacity 0.1s ease-in-out, transform 0.1s ease-in-out;\n  transition: opacity 0.1s ease-in-out, transform 0.1s ease-in-out, -webkit-transform 0.1s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .form-floating > label {\n    transition: none;\n  }\n}\n\n.form-floating > .form-control {\n  padding: 1rem 1.1rem;\n}\n\n.form-floating > .form-control::-webkit-input-placeholder {\n  color: transparent;\n}\n\n.form-floating > .form-control::-moz-placeholder {\n  color: transparent;\n}\n\n.form-floating > .form-control:-ms-input-placeholder {\n  color: transparent;\n}\n\n.form-floating > .form-control::-ms-input-placeholder {\n  color: transparent;\n}\n\n.form-floating > .form-control::placeholder {\n  color: transparent;\n}\n\n.form-floating > .form-control:not(:-moz-placeholder-shown) {\n  padding-top: 1.625rem;\n  padding-bottom: 0.625rem;\n}\n\n.form-floating > .form-control:not(:-ms-input-placeholder) {\n  padding-top: 1.625rem;\n  padding-bottom: 0.625rem;\n}\n\n.form-floating > .form-control:focus, .form-floating > .form-control:not(:placeholder-shown) {\n  padding-top: 1.625rem;\n  padding-bottom: 0.625rem;\n}\n\n.form-floating > .form-control:-webkit-autofill {\n  padding-top: 1.625rem;\n  padding-bottom: 0.625rem;\n}\n\n.form-floating > .form-select {\n  padding-top: 1.625rem;\n  padding-bottom: 0.625rem;\n}\n\n.form-floating > .form-control:not(:-moz-placeholder-shown) ~ label {\n  opacity: 0.65;\n  transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);\n}\n\n.form-floating > .form-control:not(:-ms-input-placeholder) ~ label {\n  opacity: 0.65;\n  transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);\n}\n\n.form-floating > .form-control:focus ~ label,\n.form-floating > .form-control:not(:placeholder-shown) ~ label,\n.form-floating > .form-select ~ label {\n  opacity: 0.65;\n  -webkit-transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);\n  transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);\n}\n\n.form-floating > .form-control:-webkit-autofill ~ label {\n  opacity: 0.65;\n  -webkit-transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);\n  transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);\n}\n\n.input-group {\n  position: relative;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n  flex-wrap: wrap;\n  -ms-flex-align: stretch;\n  align-items: stretch;\n  width: 100%;\n}\n\n.input-group > .form-control,\n.input-group > .form-select {\n  position: relative;\n  -ms-flex: 1 1 auto;\n  flex: 1 1 auto;\n  width: 1%;\n  min-width: 0;\n}\n\n.input-group > .form-control:focus,\n.input-group > .form-select:focus {\n  z-index: 3;\n}\n\n.input-group .btn {\n  position: relative;\n  z-index: 2;\n}\n\n.input-group .btn:focus {\n  z-index: 3;\n}\n\n.input-group-text {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-align: center;\n  align-items: center;\n  padding: 0.5rem 1.1rem;\n  font-size: 1.1rem;\n  font-weight: 400;\n  line-height: 1.5;\n  color: #343a40;\n  text-align: center;\n  white-space: nowrap;\n  background-color: #e9ecef;\n  border: 1px solid rgba(0, 0, 0, 0.1);\n  border-radius: 0.25rem;\n}\n\n.input-group-lg > .form-control,\n.input-group-lg > .form-select,\n.input-group-lg > .input-group-text,\n.input-group-lg > .btn {\n  padding: 0.5rem 1rem;\n  font-size: calc(1.2625rem + 0.15vw);\n  border-radius: 0.3rem;\n}\n\n@media (min-width: 1200px) {\n  .input-group-lg > .form-control,\n  .input-group-lg > .form-select,\n  .input-group-lg > .input-group-text,\n  .input-group-lg > .btn {\n    font-size: 1.375rem;\n  }\n}\n\n.input-group-sm > .form-control,\n.input-group-sm > .form-select,\n.input-group-sm > .input-group-text,\n.input-group-sm > .btn {\n  padding: 0.25rem 0.5rem;\n  font-size: 0.9625rem;\n  border-radius: 0.2rem;\n}\n\n.input-group-lg > .form-select,\n.input-group-sm > .form-select {\n  padding-right: 4.4rem;\n}\n\n.input-group:not(.has-validation) > :not(:last-child):not(.dropdown-toggle):not(.dropdown-menu),\n.input-group:not(.has-validation) > .dropdown-toggle:nth-last-child(n + 3) {\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n}\n\n.input-group.has-validation > :nth-last-child(n + 3):not(.dropdown-toggle):not(.dropdown-menu),\n.input-group.has-validation > .dropdown-toggle:nth-last-child(n + 4) {\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n}\n\n.input-group > :not(:first-child):not(.dropdown-menu):not(.valid-tooltip):not(.valid-feedback):not(.invalid-tooltip):not(.invalid-feedback) {\n  margin-left: -1px;\n  border-top-left-radius: 0;\n  border-bottom-left-radius: 0;\n}\n\n.valid-feedback {\n  display: none;\n  width: 100%;\n  margin-top: 0.25rem;\n  font-size: 0.875em;\n  color: #02b875;\n}\n\n.valid-tooltip {\n  position: absolute;\n  top: 100%;\n  z-index: 5;\n  display: none;\n  max-width: 100%;\n  padding: 0.25rem 0.5rem;\n  margin-top: .1rem;\n  font-size: 0.6875rem;\n  color: #fff;\n  background-color: rgba(2, 184, 117, 0.9);\n  border-radius: 0.25rem;\n}\n\n.was-validated :valid ~ .valid-feedback,\n.was-validated :valid ~ .valid-tooltip,\n.is-valid ~ .valid-feedback,\n.is-valid ~ .valid-tooltip {\n  display: block;\n}\n\n.was-validated .form-control:valid, .form-control.is-valid {\n  border-color: #02b875;\n  padding-right: calc(1.5em + 1rem);\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%2302b875' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e\");\n  background-repeat: no-repeat;\n  background-position: right calc(0.375em + 0.25rem) center;\n  background-size: calc(0.75em + 0.5rem) calc(0.75em + 0.5rem);\n}\n\n.was-validated .form-control:valid:focus, .form-control.is-valid:focus {\n  border-color: #02b875;\n  box-shadow: 0 0 0 0.25rem rgba(2, 184, 117, 0.25);\n}\n\n.was-validated textarea.form-control:valid, textarea.form-control.is-valid {\n  padding-right: calc(1.5em + 1rem);\n  background-position: top calc(0.375em + 0.25rem) right calc(0.375em + 0.25rem);\n}\n\n.was-validated .form-select:valid, .form-select.is-valid {\n  border-color: #02b875;\n}\n\n.was-validated .form-select:valid:not([multiple]):not([size]), .was-validated .form-select:valid:not([multiple])[size=\"1\"], .form-select.is-valid:not([multiple]):not([size]), .form-select.is-valid:not([multiple])[size=\"1\"] {\n  padding-right: 6.05rem;\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e\"), url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%2302b875' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e\");\n  background-position: right 1.1rem center, center right 3.3rem;\n  background-size: 16px 12px, calc(0.75em + 0.5rem) calc(0.75em + 0.5rem);\n}\n\n.was-validated .form-select:valid:focus, .form-select.is-valid:focus {\n  border-color: #02b875;\n  box-shadow: 0 0 0 0.25rem rgba(2, 184, 117, 0.25);\n}\n\n.was-validated .form-check-input:valid, .form-check-input.is-valid {\n  border-color: #02b875;\n}\n\n.was-validated .form-check-input:valid:checked, .form-check-input.is-valid:checked {\n  background-color: #02b875;\n}\n\n.was-validated .form-check-input:valid:focus, .form-check-input.is-valid:focus {\n  box-shadow: 0 0 0 0.25rem rgba(2, 184, 117, 0.25);\n}\n\n.was-validated .form-check-input:valid ~ .form-check-label, .form-check-input.is-valid ~ .form-check-label {\n  color: #02b875;\n}\n\n.form-check-inline .form-check-input ~ .valid-feedback {\n  margin-left: .5em;\n}\n\n.was-validated .input-group .form-control:valid, .input-group .form-control.is-valid, .was-validated\n.input-group .form-select:valid,\n.input-group .form-select.is-valid {\n  z-index: 1;\n}\n\n.was-validated .input-group .form-control:valid:focus, .input-group .form-control.is-valid:focus, .was-validated\n.input-group .form-select:valid:focus,\n.input-group .form-select.is-valid:focus {\n  z-index: 3;\n}\n\n.invalid-feedback {\n  display: none;\n  width: 100%;\n  margin-top: 0.25rem;\n  font-size: 0.875em;\n  color: #d9534f;\n}\n\n.invalid-tooltip {\n  position: absolute;\n  top: 100%;\n  z-index: 5;\n  display: none;\n  max-width: 100%;\n  padding: 0.25rem 0.5rem;\n  margin-top: .1rem;\n  font-size: 0.6875rem;\n  color: #fff;\n  background-color: rgba(217, 83, 79, 0.9);\n  border-radius: 0.25rem;\n}\n\n.was-validated :invalid ~ .invalid-feedback,\n.was-validated :invalid ~ .invalid-tooltip,\n.is-invalid ~ .invalid-feedback,\n.is-invalid ~ .invalid-tooltip {\n  display: block;\n}\n\n.was-validated .form-control:invalid, .form-control.is-invalid {\n  border-color: #d9534f;\n  padding-right: calc(1.5em + 1rem);\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23d9534f'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23d9534f' stroke='none'/%3e%3c/svg%3e\");\n  background-repeat: no-repeat;\n  background-position: right calc(0.375em + 0.25rem) center;\n  background-size: calc(0.75em + 0.5rem) calc(0.75em + 0.5rem);\n}\n\n.was-validated .form-control:invalid:focus, .form-control.is-invalid:focus {\n  border-color: #d9534f;\n  box-shadow: 0 0 0 0.25rem rgba(217, 83, 79, 0.25);\n}\n\n.was-validated textarea.form-control:invalid, textarea.form-control.is-invalid {\n  padding-right: calc(1.5em + 1rem);\n  background-position: top calc(0.375em + 0.25rem) right calc(0.375em + 0.25rem);\n}\n\n.was-validated .form-select:invalid, .form-select.is-invalid {\n  border-color: #d9534f;\n}\n\n.was-validated .form-select:invalid:not([multiple]):not([size]), .was-validated .form-select:invalid:not([multiple])[size=\"1\"], .form-select.is-invalid:not([multiple]):not([size]), .form-select.is-invalid:not([multiple])[size=\"1\"] {\n  padding-right: 6.05rem;\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e\"), url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23d9534f'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23d9534f' stroke='none'/%3e%3c/svg%3e\");\n  background-position: right 1.1rem center, center right 3.3rem;\n  background-size: 16px 12px, calc(0.75em + 0.5rem) calc(0.75em + 0.5rem);\n}\n\n.was-validated .form-select:invalid:focus, .form-select.is-invalid:focus {\n  border-color: #d9534f;\n  box-shadow: 0 0 0 0.25rem rgba(217, 83, 79, 0.25);\n}\n\n.was-validated .form-check-input:invalid, .form-check-input.is-invalid {\n  border-color: #d9534f;\n}\n\n.was-validated .form-check-input:invalid:checked, .form-check-input.is-invalid:checked {\n  background-color: #d9534f;\n}\n\n.was-validated .form-check-input:invalid:focus, .form-check-input.is-invalid:focus {\n  box-shadow: 0 0 0 0.25rem rgba(217, 83, 79, 0.25);\n}\n\n.was-validated .form-check-input:invalid ~ .form-check-label, .form-check-input.is-invalid ~ .form-check-label {\n  color: #d9534f;\n}\n\n.form-check-inline .form-check-input ~ .invalid-feedback {\n  margin-left: .5em;\n}\n\n.was-validated .input-group .form-control:invalid, .input-group .form-control.is-invalid, .was-validated\n.input-group .form-select:invalid,\n.input-group .form-select.is-invalid {\n  z-index: 2;\n}\n\n.was-validated .input-group .form-control:invalid:focus, .input-group .form-control.is-invalid:focus, .was-validated\n.input-group .form-select:invalid:focus,\n.input-group .form-select.is-invalid:focus {\n  z-index: 3;\n}\n\n.btn {\n  display: inline-block;\n  font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, \"Noto Sans\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n  font-weight: 400;\n  line-height: 1.5;\n  color: #343a40;\n  text-align: center;\n  text-decoration: none;\n  vertical-align: middle;\n  cursor: pointer;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  user-select: none;\n  background-color: transparent;\n  border: 1px solid transparent;\n  padding: 0.5rem 1.1rem;\n  font-size: 0.875rem;\n  border-radius: 1.078em;\n  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .btn {\n    transition: none;\n  }\n}\n\n.btn:hover {\n  color: #343a40;\n}\n\n.btn-check:focus + .btn, .btn:focus {\n  outline: 0;\n  box-shadow: 0 0 0 0.25rem rgba(69, 130, 236, 0.25);\n}\n\n.btn:disabled, .btn.disabled,\nfieldset:disabled .btn {\n  pointer-events: none;\n  opacity: 0.65;\n}\n\n.btn-primary {\n  color: #fff;\n  background-color: #4582ec;\n  border-color: #4582ec;\n}\n\n.btn-primary:hover {\n  color: #fff;\n  background-color: #3b6fc9;\n  border-color: #3768bd;\n}\n\n.btn-check:focus + .btn-primary, .btn-primary:focus {\n  color: #fff;\n  background-color: #3b6fc9;\n  border-color: #3768bd;\n  box-shadow: 0 0 0 0.25rem rgba(97, 149, 239, 0.5);\n}\n\n.btn-check:checked + .btn-primary,\n.btn-check:active + .btn-primary, .btn-primary:active, .btn-primary.active,\n.show > .btn-primary.dropdown-toggle {\n  color: #fff;\n  background-color: #3768bd;\n  border-color: #3462b1;\n}\n\n.btn-check:checked + .btn-primary:focus,\n.btn-check:active + .btn-primary:focus, .btn-primary:active:focus, .btn-primary.active:focus,\n.show > .btn-primary.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.25rem rgba(97, 149, 239, 0.5);\n}\n\n.btn-primary:disabled, .btn-primary.disabled {\n  color: #fff;\n  background-color: #4582ec;\n  border-color: #4582ec;\n}\n\n.btn-secondary {\n  color: #fff;\n  background-color: #adb5bd;\n  border-color: #adb5bd;\n}\n\n.btn-secondary:hover {\n  color: #fff;\n  background-color: #939aa1;\n  border-color: #8a9197;\n}\n\n.btn-check:focus + .btn-secondary, .btn-secondary:focus {\n  color: #fff;\n  background-color: #939aa1;\n  border-color: #8a9197;\n  box-shadow: 0 0 0 0.25rem rgba(185, 192, 199, 0.5);\n}\n\n.btn-check:checked + .btn-secondary,\n.btn-check:active + .btn-secondary, .btn-secondary:active, .btn-secondary.active,\n.show > .btn-secondary.dropdown-toggle {\n  color: #fff;\n  background-color: #8a9197;\n  border-color: #82888e;\n}\n\n.btn-check:checked + .btn-secondary:focus,\n.btn-check:active + .btn-secondary:focus, .btn-secondary:active:focus, .btn-secondary.active:focus,\n.show > .btn-secondary.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.25rem rgba(185, 192, 199, 0.5);\n}\n\n.btn-secondary:disabled, .btn-secondary.disabled {\n  color: #fff;\n  background-color: #adb5bd;\n  border-color: #adb5bd;\n}\n\n.btn-success {\n  color: #fff;\n  background-color: #02b875;\n  border-color: #02b875;\n}\n\n.btn-success:hover {\n  color: #fff;\n  background-color: #029c63;\n  border-color: #02935e;\n}\n\n.btn-check:focus + .btn-success, .btn-success:focus {\n  color: #fff;\n  background-color: #029c63;\n  border-color: #02935e;\n  box-shadow: 0 0 0 0.25rem rgba(40, 195, 138, 0.5);\n}\n\n.btn-check:checked + .btn-success,\n.btn-check:active + .btn-success, .btn-success:active, .btn-success.active,\n.show > .btn-success.dropdown-toggle {\n  color: #fff;\n  background-color: #02935e;\n  border-color: #028a58;\n}\n\n.btn-check:checked + .btn-success:focus,\n.btn-check:active + .btn-success:focus, .btn-success:active:focus, .btn-success.active:focus,\n.show > .btn-success.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.25rem rgba(40, 195, 138, 0.5);\n}\n\n.btn-success:disabled, .btn-success.disabled {\n  color: #fff;\n  background-color: #02b875;\n  border-color: #02b875;\n}\n\n.btn-info {\n  color: #fff;\n  background-color: #17a2b8;\n  border-color: #17a2b8;\n}\n\n.btn-info:hover {\n  color: #fff;\n  background-color: #148a9c;\n  border-color: #128293;\n}\n\n.btn-check:focus + .btn-info, .btn-info:focus {\n  color: #fff;\n  background-color: #148a9c;\n  border-color: #128293;\n  box-shadow: 0 0 0 0.25rem rgba(58, 176, 195, 0.5);\n}\n\n.btn-check:checked + .btn-info,\n.btn-check:active + .btn-info, .btn-info:active, .btn-info.active,\n.show > .btn-info.dropdown-toggle {\n  color: #fff;\n  background-color: #128293;\n  border-color: #117a8a;\n}\n\n.btn-check:checked + .btn-info:focus,\n.btn-check:active + .btn-info:focus, .btn-info:active:focus, .btn-info.active:focus,\n.show > .btn-info.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.25rem rgba(58, 176, 195, 0.5);\n}\n\n.btn-info:disabled, .btn-info.disabled {\n  color: #fff;\n  background-color: #17a2b8;\n  border-color: #17a2b8;\n}\n\n.btn-warning {\n  color: #fff;\n  background-color: #f0ad4e;\n  border-color: #f0ad4e;\n}\n\n.btn-warning:hover {\n  color: #fff;\n  background-color: #cc9342;\n  border-color: #c08a3e;\n}\n\n.btn-check:focus + .btn-warning, .btn-warning:focus {\n  color: #fff;\n  background-color: #cc9342;\n  border-color: #c08a3e;\n  box-shadow: 0 0 0 0.25rem rgba(242, 185, 105, 0.5);\n}\n\n.btn-check:checked + .btn-warning,\n.btn-check:active + .btn-warning, .btn-warning:active, .btn-warning.active,\n.show > .btn-warning.dropdown-toggle {\n  color: #fff;\n  background-color: #c08a3e;\n  border-color: #b4823b;\n}\n\n.btn-check:checked + .btn-warning:focus,\n.btn-check:active + .btn-warning:focus, .btn-warning:active:focus, .btn-warning.active:focus,\n.show > .btn-warning.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.25rem rgba(242, 185, 105, 0.5);\n}\n\n.btn-warning:disabled, .btn-warning.disabled {\n  color: #fff;\n  background-color: #f0ad4e;\n  border-color: #f0ad4e;\n}\n\n.btn-danger {\n  color: #fff;\n  background-color: #d9534f;\n  border-color: #d9534f;\n}\n\n.btn-danger:hover {\n  color: #fff;\n  background-color: #b84743;\n  border-color: #ae423f;\n}\n\n.btn-check:focus + .btn-danger, .btn-danger:focus {\n  color: #fff;\n  background-color: #b84743;\n  border-color: #ae423f;\n  box-shadow: 0 0 0 0.25rem rgba(223, 109, 105, 0.5);\n}\n\n.btn-check:checked + .btn-danger,\n.btn-check:active + .btn-danger, .btn-danger:active, .btn-danger.active,\n.show > .btn-danger.dropdown-toggle {\n  color: #fff;\n  background-color: #ae423f;\n  border-color: #a33e3b;\n}\n\n.btn-check:checked + .btn-danger:focus,\n.btn-check:active + .btn-danger:focus, .btn-danger:active:focus, .btn-danger.active:focus,\n.show > .btn-danger.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.25rem rgba(223, 109, 105, 0.5);\n}\n\n.btn-danger:disabled, .btn-danger.disabled {\n  color: #fff;\n  background-color: #d9534f;\n  border-color: #d9534f;\n}\n\n.btn-light {\n  color: #000;\n  background-color: #f8f9fa;\n  border-color: #f8f9fa;\n}\n\n.btn-light:hover {\n  color: #000;\n  background-color: #f9fafb;\n  border-color: #f9fafb;\n}\n\n.btn-check:focus + .btn-light, .btn-light:focus {\n  color: #000;\n  background-color: #f9fafb;\n  border-color: #f9fafb;\n  box-shadow: 0 0 0 0.25rem rgba(211, 212, 213, 0.5);\n}\n\n.btn-check:checked + .btn-light,\n.btn-check:active + .btn-light, .btn-light:active, .btn-light.active,\n.show > .btn-light.dropdown-toggle {\n  color: #000;\n  background-color: #f9fafb;\n  border-color: #f9fafb;\n}\n\n.btn-check:checked + .btn-light:focus,\n.btn-check:active + .btn-light:focus, .btn-light:active:focus, .btn-light.active:focus,\n.show > .btn-light.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.25rem rgba(211, 212, 213, 0.5);\n}\n\n.btn-light:disabled, .btn-light.disabled {\n  color: #000;\n  background-color: #f8f9fa;\n  border-color: #f8f9fa;\n}\n\n.btn-dark {\n  color: #fff;\n  background-color: #343a40;\n  border-color: #343a40;\n}\n\n.btn-dark:hover {\n  color: #fff;\n  background-color: #2c3136;\n  border-color: #2a2e33;\n}\n\n.btn-check:focus + .btn-dark, .btn-dark:focus {\n  color: #fff;\n  background-color: #2c3136;\n  border-color: #2a2e33;\n  box-shadow: 0 0 0 0.25rem rgba(82, 88, 93, 0.5);\n}\n\n.btn-check:checked + .btn-dark,\n.btn-check:active + .btn-dark, .btn-dark:active, .btn-dark.active,\n.show > .btn-dark.dropdown-toggle {\n  color: #fff;\n  background-color: #2a2e33;\n  border-color: #272c30;\n}\n\n.btn-check:checked + .btn-dark:focus,\n.btn-check:active + .btn-dark:focus, .btn-dark:active:focus, .btn-dark.active:focus,\n.show > .btn-dark.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.25rem rgba(82, 88, 93, 0.5);\n}\n\n.btn-dark:disabled, .btn-dark.disabled {\n  color: #fff;\n  background-color: #343a40;\n  border-color: #343a40;\n}\n\n.btn-outline-primary {\n  color: #4582ec;\n  border-color: #4582ec;\n}\n\n.btn-outline-primary:hover {\n  color: #fff;\n  background-color: #4582ec;\n  border-color: #4582ec;\n}\n\n.btn-check:focus + .btn-outline-primary, .btn-outline-primary:focus {\n  box-shadow: 0 0 0 0.25rem rgba(69, 130, 236, 0.5);\n}\n\n.btn-check:checked + .btn-outline-primary,\n.btn-check:active + .btn-outline-primary, .btn-outline-primary:active, .btn-outline-primary.active, .btn-outline-primary.dropdown-toggle.show {\n  color: #fff;\n  background-color: #4582ec;\n  border-color: #4582ec;\n}\n\n.btn-check:checked + .btn-outline-primary:focus,\n.btn-check:active + .btn-outline-primary:focus, .btn-outline-primary:active:focus, .btn-outline-primary.active:focus, .btn-outline-primary.dropdown-toggle.show:focus {\n  box-shadow: 0 0 0 0.25rem rgba(69, 130, 236, 0.5);\n}\n\n.btn-outline-primary:disabled, .btn-outline-primary.disabled {\n  color: #4582ec;\n  background-color: transparent;\n}\n\n.btn-outline-secondary {\n  color: #adb5bd;\n  border-color: #adb5bd;\n}\n\n.btn-outline-secondary:hover {\n  color: #fff;\n  background-color: #adb5bd;\n  border-color: #adb5bd;\n}\n\n.btn-check:focus + .btn-outline-secondary, .btn-outline-secondary:focus {\n  box-shadow: 0 0 0 0.25rem rgba(173, 181, 189, 0.5);\n}\n\n.btn-check:checked + .btn-outline-secondary,\n.btn-check:active + .btn-outline-secondary, .btn-outline-secondary:active, .btn-outline-secondary.active, .btn-outline-secondary.dropdown-toggle.show {\n  color: #fff;\n  background-color: #adb5bd;\n  border-color: #adb5bd;\n}\n\n.btn-check:checked + .btn-outline-secondary:focus,\n.btn-check:active + .btn-outline-secondary:focus, .btn-outline-secondary:active:focus, .btn-outline-secondary.active:focus, .btn-outline-secondary.dropdown-toggle.show:focus {\n  box-shadow: 0 0 0 0.25rem rgba(173, 181, 189, 0.5);\n}\n\n.btn-outline-secondary:disabled, .btn-outline-secondary.disabled {\n  color: #adb5bd;\n  background-color: transparent;\n}\n\n.btn-outline-success {\n  color: #02b875;\n  border-color: #02b875;\n}\n\n.btn-outline-success:hover {\n  color: #fff;\n  background-color: #02b875;\n  border-color: #02b875;\n}\n\n.btn-check:focus + .btn-outline-success, .btn-outline-success:focus {\n  box-shadow: 0 0 0 0.25rem rgba(2, 184, 117, 0.5);\n}\n\n.btn-check:checked + .btn-outline-success,\n.btn-check:active + .btn-outline-success, .btn-outline-success:active, .btn-outline-success.active, .btn-outline-success.dropdown-toggle.show {\n  color: #fff;\n  background-color: #02b875;\n  border-color: #02b875;\n}\n\n.btn-check:checked + .btn-outline-success:focus,\n.btn-check:active + .btn-outline-success:focus, .btn-outline-success:active:focus, .btn-outline-success.active:focus, .btn-outline-success.dropdown-toggle.show:focus {\n  box-shadow: 0 0 0 0.25rem rgba(2, 184, 117, 0.5);\n}\n\n.btn-outline-success:disabled, .btn-outline-success.disabled {\n  color: #02b875;\n  background-color: transparent;\n}\n\n.btn-outline-info {\n  color: #17a2b8;\n  border-color: #17a2b8;\n}\n\n.btn-outline-info:hover {\n  color: #fff;\n  background-color: #17a2b8;\n  border-color: #17a2b8;\n}\n\n.btn-check:focus + .btn-outline-info, .btn-outline-info:focus {\n  box-shadow: 0 0 0 0.25rem rgba(23, 162, 184, 0.5);\n}\n\n.btn-check:checked + .btn-outline-info,\n.btn-check:active + .btn-outline-info, .btn-outline-info:active, .btn-outline-info.active, .btn-outline-info.dropdown-toggle.show {\n  color: #fff;\n  background-color: #17a2b8;\n  border-color: #17a2b8;\n}\n\n.btn-check:checked + .btn-outline-info:focus,\n.btn-check:active + .btn-outline-info:focus, .btn-outline-info:active:focus, .btn-outline-info.active:focus, .btn-outline-info.dropdown-toggle.show:focus {\n  box-shadow: 0 0 0 0.25rem rgba(23, 162, 184, 0.5);\n}\n\n.btn-outline-info:disabled, .btn-outline-info.disabled {\n  color: #17a2b8;\n  background-color: transparent;\n}\n\n.btn-outline-warning {\n  color: #f0ad4e;\n  border-color: #f0ad4e;\n}\n\n.btn-outline-warning:hover {\n  color: #fff;\n  background-color: #f0ad4e;\n  border-color: #f0ad4e;\n}\n\n.btn-check:focus + .btn-outline-warning, .btn-outline-warning:focus {\n  box-shadow: 0 0 0 0.25rem rgba(240, 173, 78, 0.5);\n}\n\n.btn-check:checked + .btn-outline-warning,\n.btn-check:active + .btn-outline-warning, .btn-outline-warning:active, .btn-outline-warning.active, .btn-outline-warning.dropdown-toggle.show {\n  color: #fff;\n  background-color: #f0ad4e;\n  border-color: #f0ad4e;\n}\n\n.btn-check:checked + .btn-outline-warning:focus,\n.btn-check:active + .btn-outline-warning:focus, .btn-outline-warning:active:focus, .btn-outline-warning.active:focus, .btn-outline-warning.dropdown-toggle.show:focus {\n  box-shadow: 0 0 0 0.25rem rgba(240, 173, 78, 0.5);\n}\n\n.btn-outline-warning:disabled, .btn-outline-warning.disabled {\n  color: #f0ad4e;\n  background-color: transparent;\n}\n\n.btn-outline-danger {\n  color: #d9534f;\n  border-color: #d9534f;\n}\n\n.btn-outline-danger:hover {\n  color: #fff;\n  background-color: #d9534f;\n  border-color: #d9534f;\n}\n\n.btn-check:focus + .btn-outline-danger, .btn-outline-danger:focus {\n  box-shadow: 0 0 0 0.25rem rgba(217, 83, 79, 0.5);\n}\n\n.btn-check:checked + .btn-outline-danger,\n.btn-check:active + .btn-outline-danger, .btn-outline-danger:active, .btn-outline-danger.active, .btn-outline-danger.dropdown-toggle.show {\n  color: #fff;\n  background-color: #d9534f;\n  border-color: #d9534f;\n}\n\n.btn-check:checked + .btn-outline-danger:focus,\n.btn-check:active + .btn-outline-danger:focus, .btn-outline-danger:active:focus, .btn-outline-danger.active:focus, .btn-outline-danger.dropdown-toggle.show:focus {\n  box-shadow: 0 0 0 0.25rem rgba(217, 83, 79, 0.5);\n}\n\n.btn-outline-danger:disabled, .btn-outline-danger.disabled {\n  color: #d9534f;\n  background-color: transparent;\n}\n\n.btn-outline-light {\n  color: #f8f9fa;\n  border-color: #f8f9fa;\n}\n\n.btn-outline-light:hover {\n  color: #000;\n  background-color: #f8f9fa;\n  border-color: #f8f9fa;\n}\n\n.btn-check:focus + .btn-outline-light, .btn-outline-light:focus {\n  box-shadow: 0 0 0 0.25rem rgba(248, 249, 250, 0.5);\n}\n\n.btn-check:checked + .btn-outline-light,\n.btn-check:active + .btn-outline-light, .btn-outline-light:active, .btn-outline-light.active, .btn-outline-light.dropdown-toggle.show {\n  color: #000;\n  background-color: #f8f9fa;\n  border-color: #f8f9fa;\n}\n\n.btn-check:checked + .btn-outline-light:focus,\n.btn-check:active + .btn-outline-light:focus, .btn-outline-light:active:focus, .btn-outline-light.active:focus, .btn-outline-light.dropdown-toggle.show:focus {\n  box-shadow: 0 0 0 0.25rem rgba(248, 249, 250, 0.5);\n}\n\n.btn-outline-light:disabled, .btn-outline-light.disabled {\n  color: #f8f9fa;\n  background-color: transparent;\n}\n\n.btn-outline-dark {\n  color: #343a40;\n  border-color: #343a40;\n}\n\n.btn-outline-dark:hover {\n  color: #fff;\n  background-color: #343a40;\n  border-color: #343a40;\n}\n\n.btn-check:focus + .btn-outline-dark, .btn-outline-dark:focus {\n  box-shadow: 0 0 0 0.25rem rgba(52, 58, 64, 0.5);\n}\n\n.btn-check:checked + .btn-outline-dark,\n.btn-check:active + .btn-outline-dark, .btn-outline-dark:active, .btn-outline-dark.active, .btn-outline-dark.dropdown-toggle.show {\n  color: #fff;\n  background-color: #343a40;\n  border-color: #343a40;\n}\n\n.btn-check:checked + .btn-outline-dark:focus,\n.btn-check:active + .btn-outline-dark:focus, .btn-outline-dark:active:focus, .btn-outline-dark.active:focus, .btn-outline-dark.dropdown-toggle.show:focus {\n  box-shadow: 0 0 0 0.25rem rgba(52, 58, 64, 0.5);\n}\n\n.btn-outline-dark:disabled, .btn-outline-dark.disabled {\n  color: #343a40;\n  background-color: transparent;\n}\n\n.btn-link {\n  font-weight: 400;\n  color: #4582ec;\n  text-decoration: underline;\n}\n\n.btn-link:hover {\n  color: #3768bd;\n}\n\n.btn-link:disabled, .btn-link.disabled {\n  color: #868e96;\n}\n\n.btn-lg, .btn-group-lg > .btn {\n  padding: 0.5rem 1rem;\n  font-size: calc(1.2625rem + 0.15vw);\n  border-radius: 2.688em;\n}\n\n@media (min-width: 1200px) {\n  .btn-lg, .btn-group-lg > .btn {\n    font-size: 1.375rem;\n  }\n}\n\n.btn-sm, .btn-group-sm > .btn {\n  padding: 0.25rem 0.5rem;\n  font-size: 0.688rem;\n  border-radius: 0.844em;\n}\n\n.fade {\n  transition: opacity 0.15s linear;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .fade {\n    transition: none;\n  }\n}\n\n.fade:not(.show) {\n  opacity: 0;\n}\n\n.collapse:not(.show) {\n  display: none;\n}\n\n.collapsing {\n  height: 0;\n  overflow: hidden;\n  transition: height 0.35s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .collapsing {\n    transition: none;\n  }\n}\n\n.collapsing.collapse-horizontal {\n  width: 0;\n  height: auto;\n  transition: width 0.35s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .collapsing.collapse-horizontal {\n    transition: none;\n  }\n}\n\n.dropup,\n.dropend,\n.dropdown,\n.dropstart {\n  position: relative;\n}\n\n.dropdown-toggle {\n  white-space: nowrap;\n}\n\n.dropdown-toggle::after {\n  display: inline-block;\n  margin-left: 0.255em;\n  vertical-align: 0.255em;\n  content: \"\";\n  border-top: 0.3em solid;\n  border-right: 0.3em solid transparent;\n  border-bottom: 0;\n  border-left: 0.3em solid transparent;\n}\n\n.dropdown-toggle:empty::after {\n  margin-left: 0;\n}\n\n.dropdown-menu {\n  position: absolute;\n  z-index: 1000;\n  display: none;\n  min-width: 10rem;\n  padding: 0.5rem 0;\n  margin: 0;\n  font-size: 1.1rem;\n  color: #343a40;\n  text-align: left;\n  list-style: none;\n  background-color: #fff;\n  background-clip: padding-box;\n  border: 1px solid rgba(0, 0, 0, 0.15);\n  border-radius: 0.25rem;\n}\n\n.dropdown-menu[data-bs-popper] {\n  top: 100%;\n  left: 0;\n  margin-top: 0.125rem;\n}\n\n.dropdown-menu-start {\n  --bs-position: start;\n}\n\n.dropdown-menu-start[data-bs-popper] {\n  right: auto;\n  left: 0;\n}\n\n.dropdown-menu-end {\n  --bs-position: end;\n}\n\n.dropdown-menu-end[data-bs-popper] {\n  right: 0;\n  left: auto;\n}\n\n@media (min-width: 576px) {\n  .dropdown-menu-sm-start {\n    --bs-position: start;\n  }\n  .dropdown-menu-sm-start[data-bs-popper] {\n    right: auto;\n    left: 0;\n  }\n  .dropdown-menu-sm-end {\n    --bs-position: end;\n  }\n  .dropdown-menu-sm-end[data-bs-popper] {\n    right: 0;\n    left: auto;\n  }\n}\n\n@media (min-width: 768px) {\n  .dropdown-menu-md-start {\n    --bs-position: start;\n  }\n  .dropdown-menu-md-start[data-bs-popper] {\n    right: auto;\n    left: 0;\n  }\n  .dropdown-menu-md-end {\n    --bs-position: end;\n  }\n  .dropdown-menu-md-end[data-bs-popper] {\n    right: 0;\n    left: auto;\n  }\n}\n\n@media (min-width: 992px) {\n  .dropdown-menu-lg-start {\n    --bs-position: start;\n  }\n  .dropdown-menu-lg-start[data-bs-popper] {\n    right: auto;\n    left: 0;\n  }\n  .dropdown-menu-lg-end {\n    --bs-position: end;\n  }\n  .dropdown-menu-lg-end[data-bs-popper] {\n    right: 0;\n    left: auto;\n  }\n}\n\n@media (min-width: 1200px) {\n  .dropdown-menu-xl-start {\n    --bs-position: start;\n  }\n  .dropdown-menu-xl-start[data-bs-popper] {\n    right: auto;\n    left: 0;\n  }\n  .dropdown-menu-xl-end {\n    --bs-position: end;\n  }\n  .dropdown-menu-xl-end[data-bs-popper] {\n    right: 0;\n    left: auto;\n  }\n}\n\n@media (min-width: 1400px) {\n  .dropdown-menu-xxl-start {\n    --bs-position: start;\n  }\n  .dropdown-menu-xxl-start[data-bs-popper] {\n    right: auto;\n    left: 0;\n  }\n  .dropdown-menu-xxl-end {\n    --bs-position: end;\n  }\n  .dropdown-menu-xxl-end[data-bs-popper] {\n    right: 0;\n    left: auto;\n  }\n}\n\n.dropup .dropdown-menu[data-bs-popper] {\n  top: auto;\n  bottom: 100%;\n  margin-top: 0;\n  margin-bottom: 0.125rem;\n}\n\n.dropup .dropdown-toggle::after {\n  display: inline-block;\n  margin-left: 0.255em;\n  vertical-align: 0.255em;\n  content: \"\";\n  border-top: 0;\n  border-right: 0.3em solid transparent;\n  border-bottom: 0.3em solid;\n  border-left: 0.3em solid transparent;\n}\n\n.dropup .dropdown-toggle:empty::after {\n  margin-left: 0;\n}\n\n.dropend .dropdown-menu[data-bs-popper] {\n  top: 0;\n  right: auto;\n  left: 100%;\n  margin-top: 0;\n  margin-left: 0.125rem;\n}\n\n.dropend .dropdown-toggle::after {\n  display: inline-block;\n  margin-left: 0.255em;\n  vertical-align: 0.255em;\n  content: \"\";\n  border-top: 0.3em solid transparent;\n  border-right: 0;\n  border-bottom: 0.3em solid transparent;\n  border-left: 0.3em solid;\n}\n\n.dropend .dropdown-toggle:empty::after {\n  margin-left: 0;\n}\n\n.dropend .dropdown-toggle::after {\n  vertical-align: 0;\n}\n\n.dropstart .dropdown-menu[data-bs-popper] {\n  top: 0;\n  right: 100%;\n  left: auto;\n  margin-top: 0;\n  margin-right: 0.125rem;\n}\n\n.dropstart .dropdown-toggle::after {\n  display: inline-block;\n  margin-left: 0.255em;\n  vertical-align: 0.255em;\n  content: \"\";\n}\n\n.dropstart .dropdown-toggle::after {\n  display: none;\n}\n\n.dropstart .dropdown-toggle::before {\n  display: inline-block;\n  margin-right: 0.255em;\n  vertical-align: 0.255em;\n  content: \"\";\n  border-top: 0.3em solid transparent;\n  border-right: 0.3em solid;\n  border-bottom: 0.3em solid transparent;\n}\n\n.dropstart .dropdown-toggle:empty::after {\n  margin-left: 0;\n}\n\n.dropstart .dropdown-toggle::before {\n  vertical-align: 0;\n}\n\n.dropdown-divider {\n  height: 0;\n  margin: 0.5rem 0;\n  overflow: hidden;\n  border-top: 1px solid rgba(0, 0, 0, 0.15);\n}\n\n.dropdown-item {\n  display: block;\n  width: 100%;\n  padding: 0.25rem 1rem;\n  clear: both;\n  font-weight: 400;\n  color: #212529;\n  text-align: inherit;\n  text-decoration: none;\n  white-space: nowrap;\n  background-color: transparent;\n  border: 0;\n}\n\n.dropdown-item:hover, .dropdown-item:focus {\n  color: #1e2125;\n  background-color: #e9ecef;\n}\n\n.dropdown-item.active, .dropdown-item:active {\n  color: #fff;\n  text-decoration: none;\n  background-color: #4582ec;\n}\n\n.dropdown-item.disabled, .dropdown-item:disabled {\n  color: #adb5bd;\n  pointer-events: none;\n  background-color: transparent;\n}\n\n.dropdown-menu.show {\n  display: block;\n}\n\n.dropdown-header {\n  display: block;\n  padding: 0.5rem 1rem;\n  margin-bottom: 0;\n  font-size: 0.9625rem;\n  color: #868e96;\n  white-space: nowrap;\n}\n\n.dropdown-item-text {\n  display: block;\n  padding: 0.25rem 1rem;\n  color: #212529;\n}\n\n.dropdown-menu-dark {\n  color: #ddd;\n  background-color: #343a40;\n  border-color: rgba(0, 0, 0, 0.15);\n}\n\n.dropdown-menu-dark .dropdown-item {\n  color: #ddd;\n}\n\n.dropdown-menu-dark .dropdown-item:hover, .dropdown-menu-dark .dropdown-item:focus {\n  color: #fff;\n  background-color: rgba(255, 255, 255, 0.15);\n}\n\n.dropdown-menu-dark .dropdown-item.active, .dropdown-menu-dark .dropdown-item:active {\n  color: #fff;\n  background-color: #4582ec;\n}\n\n.dropdown-menu-dark .dropdown-item.disabled, .dropdown-menu-dark .dropdown-item:disabled {\n  color: #adb5bd;\n}\n\n.dropdown-menu-dark .dropdown-divider {\n  border-color: rgba(0, 0, 0, 0.15);\n}\n\n.dropdown-menu-dark .dropdown-item-text {\n  color: #ddd;\n}\n\n.dropdown-menu-dark .dropdown-header {\n  color: #adb5bd;\n}\n\n.btn-group,\n.btn-group-vertical {\n  position: relative;\n  display: -ms-inline-flexbox;\n  display: inline-flex;\n  vertical-align: middle;\n}\n\n.btn-group > .btn,\n.btn-group-vertical > .btn {\n  position: relative;\n  -ms-flex: 1 1 auto;\n  flex: 1 1 auto;\n}\n\n.btn-group > .btn-check:checked + .btn,\n.btn-group > .btn-check:focus + .btn,\n.btn-group > .btn:hover,\n.btn-group > .btn:focus,\n.btn-group > .btn:active,\n.btn-group > .btn.active,\n.btn-group-vertical > .btn-check:checked + .btn,\n.btn-group-vertical > .btn-check:focus + .btn,\n.btn-group-vertical > .btn:hover,\n.btn-group-vertical > .btn:focus,\n.btn-group-vertical > .btn:active,\n.btn-group-vertical > .btn.active {\n  z-index: 1;\n}\n\n.btn-toolbar {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n  flex-wrap: wrap;\n  -ms-flex-pack: start;\n  justify-content: flex-start;\n}\n\n.btn-toolbar .input-group {\n  width: auto;\n}\n\n.btn-group > .btn:not(:first-child),\n.btn-group > .btn-group:not(:first-child) {\n  margin-left: -1px;\n}\n\n.btn-group > .btn:not(:last-child):not(.dropdown-toggle),\n.btn-group > .btn-group:not(:last-child) > .btn {\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n}\n\n.btn-group > .btn:nth-child(n + 3),\n.btn-group > :not(.btn-check) + .btn,\n.btn-group > .btn-group:not(:first-child) > .btn {\n  border-top-left-radius: 0;\n  border-bottom-left-radius: 0;\n}\n\n.dropdown-toggle-split {\n  padding-right: 0.825rem;\n  padding-left: 0.825rem;\n}\n\n.dropdown-toggle-split::after,\n.dropup .dropdown-toggle-split::after,\n.dropend .dropdown-toggle-split::after {\n  margin-left: 0;\n}\n\n.dropstart .dropdown-toggle-split::before {\n  margin-right: 0;\n}\n\n.btn-sm + .dropdown-toggle-split, .btn-group-sm > .btn + .dropdown-toggle-split {\n  padding-right: 0.375rem;\n  padding-left: 0.375rem;\n}\n\n.btn-lg + .dropdown-toggle-split, .btn-group-lg > .btn + .dropdown-toggle-split {\n  padding-right: 0.75rem;\n  padding-left: 0.75rem;\n}\n\n.btn-group-vertical {\n  -ms-flex-direction: column;\n  flex-direction: column;\n  -ms-flex-align: start;\n  align-items: flex-start;\n  -ms-flex-pack: center;\n  justify-content: center;\n}\n\n.btn-group-vertical > .btn,\n.btn-group-vertical > .btn-group {\n  width: 100%;\n}\n\n.btn-group-vertical > .btn:not(:first-child),\n.btn-group-vertical > .btn-group:not(:first-child) {\n  margin-top: -1px;\n}\n\n.btn-group-vertical > .btn:not(:last-child):not(.dropdown-toggle),\n.btn-group-vertical > .btn-group:not(:last-child) > .btn {\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 0;\n}\n\n.btn-group-vertical > .btn ~ .btn,\n.btn-group-vertical > .btn-group:not(:first-child) > .btn {\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n}\n\n.nav {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n  flex-wrap: wrap;\n  padding-left: 0;\n  margin-bottom: 0;\n  list-style: none;\n}\n\n.nav-link {\n  display: block;\n  padding: 0.5rem 1rem;\n  color: #4582ec;\n  text-decoration: none;\n  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .nav-link {\n    transition: none;\n  }\n}\n\n.nav-link:hover, .nav-link:focus {\n  color: #3768bd;\n}\n\n.nav-link.disabled {\n  color: #868e96;\n  pointer-events: none;\n  cursor: default;\n}\n\n.nav-tabs {\n  border-bottom: 1px solid #ddd;\n}\n\n.nav-tabs .nav-link {\n  margin-bottom: -1px;\n  background: none;\n  border: 1px solid transparent;\n  border-top-left-radius: 0.25rem;\n  border-top-right-radius: 0.25rem;\n}\n\n.nav-tabs .nav-link:hover, .nav-tabs .nav-link:focus {\n  border-color: #e9ecef #e9ecef #ddd;\n  isolation: isolate;\n}\n\n.nav-tabs .nav-link.disabled {\n  color: #868e96;\n  background-color: transparent;\n  border-color: transparent;\n}\n\n.nav-tabs .nav-link.active,\n.nav-tabs .nav-item.show .nav-link {\n  color: #495057;\n  background-color: #fff;\n  border-color: #ddd #ddd #fff;\n}\n\n.nav-tabs .dropdown-menu {\n  margin-top: -1px;\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n}\n\n.nav-pills .nav-link {\n  background: none;\n  border: 0;\n  border-radius: 0.25rem;\n}\n\n.nav-pills .nav-link.active,\n.nav-pills .show > .nav-link {\n  color: #fff;\n  background-color: #4582ec;\n}\n\n.nav-fill > .nav-link,\n.nav-fill .nav-item {\n  -ms-flex: 1 1 auto;\n  flex: 1 1 auto;\n  text-align: center;\n}\n\n.nav-justified > .nav-link,\n.nav-justified .nav-item {\n  -ms-flex-preferred-size: 0;\n  flex-basis: 0;\n  -ms-flex-positive: 1;\n  flex-grow: 1;\n  text-align: center;\n}\n\n.nav-fill .nav-item .nav-link,\n.nav-justified .nav-item .nav-link {\n  width: 100%;\n}\n\n.tab-content > .tab-pane {\n  display: none;\n}\n\n.tab-content > .active {\n  display: block;\n}\n\n.navbar {\n  position: relative;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n  flex-wrap: wrap;\n  -ms-flex-align: center;\n  align-items: center;\n  -ms-flex-pack: justify;\n  justify-content: space-between;\n  padding-top: 0.5rem;\n  padding-bottom: 0.5rem;\n}\n\n.navbar > .container,\n.navbar > .container-fluid, .navbar > .container-sm, .navbar > .container-md, .navbar > .container-lg, .navbar > .container-xl, .navbar > .container-xxl {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: inherit;\n  flex-wrap: inherit;\n  -ms-flex-align: center;\n  align-items: center;\n  -ms-flex-pack: justify;\n  justify-content: space-between;\n}\n\n.navbar-brand {\n  padding-top: 0.29375rem;\n  padding-bottom: 0.29375rem;\n  margin-right: 1rem;\n  font-size: calc(1.2625rem + 0.15vw);\n  text-decoration: none;\n  white-space: nowrap;\n}\n\n@media (min-width: 1200px) {\n  .navbar-brand {\n    font-size: 1.375rem;\n  }\n}\n\n.navbar-nav {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  padding-left: 0;\n  margin-bottom: 0;\n  list-style: none;\n}\n\n.navbar-nav .nav-link {\n  padding-right: 0;\n  padding-left: 0;\n}\n\n.navbar-nav .dropdown-menu {\n  position: static;\n}\n\n.navbar-text {\n  padding-top: 0.5rem;\n  padding-bottom: 0.5rem;\n}\n\n.navbar-collapse {\n  -ms-flex-preferred-size: 100%;\n  flex-basis: 100%;\n  -ms-flex-positive: 1;\n  flex-grow: 1;\n  -ms-flex-align: center;\n  align-items: center;\n}\n\n.navbar-toggler {\n  padding: 0.25rem 0.75rem;\n  font-size: calc(1.2625rem + 0.15vw);\n  line-height: 1;\n  background-color: transparent;\n  border: 1px solid transparent;\n  border-radius: 1.078em;\n  transition: box-shadow 0.15s ease-in-out;\n}\n\n@media (min-width: 1200px) {\n  .navbar-toggler {\n    font-size: 1.375rem;\n  }\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .navbar-toggler {\n    transition: none;\n  }\n}\n\n.navbar-toggler:hover {\n  text-decoration: none;\n}\n\n.navbar-toggler:focus {\n  text-decoration: none;\n  outline: 0;\n  box-shadow: 0 0 0 0.25rem;\n}\n\n.navbar-toggler-icon {\n  display: inline-block;\n  width: 1.5em;\n  height: 1.5em;\n  vertical-align: middle;\n  background-repeat: no-repeat;\n  background-position: center;\n  background-size: 100%;\n}\n\n.navbar-nav-scroll {\n  max-height: var(--bs-scroll-height, 75vh);\n  overflow-y: auto;\n}\n\n@media (min-width: 576px) {\n  .navbar-expand-sm {\n    -ms-flex-wrap: nowrap;\n    flex-wrap: nowrap;\n    -ms-flex-pack: start;\n    justify-content: flex-start;\n  }\n  .navbar-expand-sm .navbar-nav {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .navbar-expand-sm .navbar-nav .dropdown-menu {\n    position: absolute;\n  }\n  .navbar-expand-sm .navbar-nav .nav-link {\n    padding-right: 0.5rem;\n    padding-left: 0.5rem;\n  }\n  .navbar-expand-sm .navbar-nav-scroll {\n    overflow: visible;\n  }\n  .navbar-expand-sm .navbar-collapse {\n    display: -ms-flexbox !important;\n    display: flex !important;\n    -ms-flex-preferred-size: auto;\n    flex-basis: auto;\n  }\n  .navbar-expand-sm .navbar-toggler {\n    display: none;\n  }\n  .navbar-expand-sm .offcanvas-header {\n    display: none;\n  }\n  .navbar-expand-sm .offcanvas {\n    position: inherit;\n    bottom: 0;\n    z-index: 1000;\n    -ms-flex-positive: 1;\n    flex-grow: 1;\n    visibility: visible !important;\n    background-color: transparent;\n    border-right: 0;\n    border-left: 0;\n    transition: none;\n    -webkit-transform: none;\n    transform: none;\n  }\n  .navbar-expand-sm .offcanvas-top,\n  .navbar-expand-sm .offcanvas-bottom {\n    height: auto;\n    border-top: 0;\n    border-bottom: 0;\n  }\n  .navbar-expand-sm .offcanvas-body {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-positive: 0;\n    flex-grow: 0;\n    padding: 0;\n    overflow-y: visible;\n  }\n}\n\n@media (min-width: 768px) {\n  .navbar-expand-md {\n    -ms-flex-wrap: nowrap;\n    flex-wrap: nowrap;\n    -ms-flex-pack: start;\n    justify-content: flex-start;\n  }\n  .navbar-expand-md .navbar-nav {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .navbar-expand-md .navbar-nav .dropdown-menu {\n    position: absolute;\n  }\n  .navbar-expand-md .navbar-nav .nav-link {\n    padding-right: 0.5rem;\n    padding-left: 0.5rem;\n  }\n  .navbar-expand-md .navbar-nav-scroll {\n    overflow: visible;\n  }\n  .navbar-expand-md .navbar-collapse {\n    display: -ms-flexbox !important;\n    display: flex !important;\n    -ms-flex-preferred-size: auto;\n    flex-basis: auto;\n  }\n  .navbar-expand-md .navbar-toggler {\n    display: none;\n  }\n  .navbar-expand-md .offcanvas-header {\n    display: none;\n  }\n  .navbar-expand-md .offcanvas {\n    position: inherit;\n    bottom: 0;\n    z-index: 1000;\n    -ms-flex-positive: 1;\n    flex-grow: 1;\n    visibility: visible !important;\n    background-color: transparent;\n    border-right: 0;\n    border-left: 0;\n    transition: none;\n    -webkit-transform: none;\n    transform: none;\n  }\n  .navbar-expand-md .offcanvas-top,\n  .navbar-expand-md .offcanvas-bottom {\n    height: auto;\n    border-top: 0;\n    border-bottom: 0;\n  }\n  .navbar-expand-md .offcanvas-body {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-positive: 0;\n    flex-grow: 0;\n    padding: 0;\n    overflow-y: visible;\n  }\n}\n\n@media (min-width: 992px) {\n  .navbar-expand-lg {\n    -ms-flex-wrap: nowrap;\n    flex-wrap: nowrap;\n    -ms-flex-pack: start;\n    justify-content: flex-start;\n  }\n  .navbar-expand-lg .navbar-nav {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .navbar-expand-lg .navbar-nav .dropdown-menu {\n    position: absolute;\n  }\n  .navbar-expand-lg .navbar-nav .nav-link {\n    padding-right: 0.5rem;\n    padding-left: 0.5rem;\n  }\n  .navbar-expand-lg .navbar-nav-scroll {\n    overflow: visible;\n  }\n  .navbar-expand-lg .navbar-collapse {\n    display: -ms-flexbox !important;\n    display: flex !important;\n    -ms-flex-preferred-size: auto;\n    flex-basis: auto;\n  }\n  .navbar-expand-lg .navbar-toggler {\n    display: none;\n  }\n  .navbar-expand-lg .offcanvas-header {\n    display: none;\n  }\n  .navbar-expand-lg .offcanvas {\n    position: inherit;\n    bottom: 0;\n    z-index: 1000;\n    -ms-flex-positive: 1;\n    flex-grow: 1;\n    visibility: visible !important;\n    background-color: transparent;\n    border-right: 0;\n    border-left: 0;\n    transition: none;\n    -webkit-transform: none;\n    transform: none;\n  }\n  .navbar-expand-lg .offcanvas-top,\n  .navbar-expand-lg .offcanvas-bottom {\n    height: auto;\n    border-top: 0;\n    border-bottom: 0;\n  }\n  .navbar-expand-lg .offcanvas-body {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-positive: 0;\n    flex-grow: 0;\n    padding: 0;\n    overflow-y: visible;\n  }\n}\n\n@media (min-width: 1200px) {\n  .navbar-expand-xl {\n    -ms-flex-wrap: nowrap;\n    flex-wrap: nowrap;\n    -ms-flex-pack: start;\n    justify-content: flex-start;\n  }\n  .navbar-expand-xl .navbar-nav {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .navbar-expand-xl .navbar-nav .dropdown-menu {\n    position: absolute;\n  }\n  .navbar-expand-xl .navbar-nav .nav-link {\n    padding-right: 0.5rem;\n    padding-left: 0.5rem;\n  }\n  .navbar-expand-xl .navbar-nav-scroll {\n    overflow: visible;\n  }\n  .navbar-expand-xl .navbar-collapse {\n    display: -ms-flexbox !important;\n    display: flex !important;\n    -ms-flex-preferred-size: auto;\n    flex-basis: auto;\n  }\n  .navbar-expand-xl .navbar-toggler {\n    display: none;\n  }\n  .navbar-expand-xl .offcanvas-header {\n    display: none;\n  }\n  .navbar-expand-xl .offcanvas {\n    position: inherit;\n    bottom: 0;\n    z-index: 1000;\n    -ms-flex-positive: 1;\n    flex-grow: 1;\n    visibility: visible !important;\n    background-color: transparent;\n    border-right: 0;\n    border-left: 0;\n    transition: none;\n    -webkit-transform: none;\n    transform: none;\n  }\n  .navbar-expand-xl .offcanvas-top,\n  .navbar-expand-xl .offcanvas-bottom {\n    height: auto;\n    border-top: 0;\n    border-bottom: 0;\n  }\n  .navbar-expand-xl .offcanvas-body {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-positive: 0;\n    flex-grow: 0;\n    padding: 0;\n    overflow-y: visible;\n  }\n}\n\n@media (min-width: 1400px) {\n  .navbar-expand-xxl {\n    -ms-flex-wrap: nowrap;\n    flex-wrap: nowrap;\n    -ms-flex-pack: start;\n    justify-content: flex-start;\n  }\n  .navbar-expand-xxl .navbar-nav {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .navbar-expand-xxl .navbar-nav .dropdown-menu {\n    position: absolute;\n  }\n  .navbar-expand-xxl .navbar-nav .nav-link {\n    padding-right: 0.5rem;\n    padding-left: 0.5rem;\n  }\n  .navbar-expand-xxl .navbar-nav-scroll {\n    overflow: visible;\n  }\n  .navbar-expand-xxl .navbar-collapse {\n    display: -ms-flexbox !important;\n    display: flex !important;\n    -ms-flex-preferred-size: auto;\n    flex-basis: auto;\n  }\n  .navbar-expand-xxl .navbar-toggler {\n    display: none;\n  }\n  .navbar-expand-xxl .offcanvas-header {\n    display: none;\n  }\n  .navbar-expand-xxl .offcanvas {\n    position: inherit;\n    bottom: 0;\n    z-index: 1000;\n    -ms-flex-positive: 1;\n    flex-grow: 1;\n    visibility: visible !important;\n    background-color: transparent;\n    border-right: 0;\n    border-left: 0;\n    transition: none;\n    -webkit-transform: none;\n    transform: none;\n  }\n  .navbar-expand-xxl .offcanvas-top,\n  .navbar-expand-xxl .offcanvas-bottom {\n    height: auto;\n    border-top: 0;\n    border-bottom: 0;\n  }\n  .navbar-expand-xxl .offcanvas-body {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-positive: 0;\n    flex-grow: 0;\n    padding: 0;\n    overflow-y: visible;\n  }\n}\n\n.navbar-expand {\n  -ms-flex-wrap: nowrap;\n  flex-wrap: nowrap;\n  -ms-flex-pack: start;\n  justify-content: flex-start;\n}\n\n.navbar-expand .navbar-nav {\n  -ms-flex-direction: row;\n  flex-direction: row;\n}\n\n.navbar-expand .navbar-nav .dropdown-menu {\n  position: absolute;\n}\n\n.navbar-expand .navbar-nav .nav-link {\n  padding-right: 0.5rem;\n  padding-left: 0.5rem;\n}\n\n.navbar-expand .navbar-nav-scroll {\n  overflow: visible;\n}\n\n.navbar-expand .navbar-collapse {\n  display: -ms-flexbox !important;\n  display: flex !important;\n  -ms-flex-preferred-size: auto;\n  flex-basis: auto;\n}\n\n.navbar-expand .navbar-toggler {\n  display: none;\n}\n\n.navbar-expand .offcanvas-header {\n  display: none;\n}\n\n.navbar-expand .offcanvas {\n  position: inherit;\n  bottom: 0;\n  z-index: 1000;\n  -ms-flex-positive: 1;\n  flex-grow: 1;\n  visibility: visible !important;\n  background-color: transparent;\n  border-right: 0;\n  border-left: 0;\n  transition: none;\n  -webkit-transform: none;\n  transform: none;\n}\n\n.navbar-expand .offcanvas-top,\n.navbar-expand .offcanvas-bottom {\n  height: auto;\n  border-top: 0;\n  border-bottom: 0;\n}\n\n.navbar-expand .offcanvas-body {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-positive: 0;\n  flex-grow: 0;\n  padding: 0;\n  overflow-y: visible;\n}\n\n.navbar-light .navbar-brand {\n  color: #343a40;\n}\n\n.navbar-light .navbar-brand:hover, .navbar-light .navbar-brand:focus {\n  color: #343a40;\n}\n\n.navbar-light .navbar-nav .nav-link {\n  color: rgba(0, 0, 0, 0.55);\n}\n\n.navbar-light .navbar-nav .nav-link:hover, .navbar-light .navbar-nav .nav-link:focus {\n  color: #343a40;\n}\n\n.navbar-light .navbar-nav .nav-link.disabled {\n  color: rgba(0, 0, 0, 0.3);\n}\n\n.navbar-light .navbar-nav .show > .nav-link,\n.navbar-light .navbar-nav .nav-link.active {\n  color: #343a40;\n}\n\n.navbar-light .navbar-toggler {\n  color: rgba(0, 0, 0, 0.55);\n  border-color: rgba(0, 0, 0, 0.1);\n}\n\n.navbar-light .navbar-toggler-icon {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%280, 0, 0, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e\");\n}\n\n.navbar-light .navbar-text {\n  color: rgba(0, 0, 0, 0.55);\n}\n\n.navbar-light .navbar-text a,\n.navbar-light .navbar-text a:hover,\n.navbar-light .navbar-text a:focus {\n  color: #343a40;\n}\n\n.navbar-dark .navbar-brand {\n  color: #fff;\n}\n\n.navbar-dark .navbar-brand:hover, .navbar-dark .navbar-brand:focus {\n  color: #fff;\n}\n\n.navbar-dark .navbar-nav .nav-link {\n  color: rgba(255, 255, 255, 0.6);\n}\n\n.navbar-dark .navbar-nav .nav-link:hover, .navbar-dark .navbar-nav .nav-link:focus {\n  color: #fff;\n}\n\n.navbar-dark .navbar-nav .nav-link.disabled {\n  color: rgba(255, 255, 255, 0.25);\n}\n\n.navbar-dark .navbar-nav .show > .nav-link,\n.navbar-dark .navbar-nav .nav-link.active {\n  color: #fff;\n}\n\n.navbar-dark .navbar-toggler {\n  color: rgba(255, 255, 255, 0.6);\n  border-color: rgba(255, 255, 255, 0.1);\n}\n\n.navbar-dark .navbar-toggler-icon {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.6%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e\");\n}\n\n.navbar-dark .navbar-text {\n  color: rgba(255, 255, 255, 0.6);\n}\n\n.navbar-dark .navbar-text a,\n.navbar-dark .navbar-text a:hover,\n.navbar-dark .navbar-text a:focus {\n  color: #fff;\n}\n\n.card {\n  position: relative;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  min-width: 0;\n  word-wrap: break-word;\n  background-color: #fff;\n  background-clip: border-box;\n  border: 1px solid rgba(0, 0, 0, 0.125);\n  border-radius: 0.25rem;\n}\n\n.card > hr {\n  margin-right: 0;\n  margin-left: 0;\n}\n\n.card > .list-group {\n  border-top: inherit;\n  border-bottom: inherit;\n}\n\n.card > .list-group:first-child {\n  border-top-width: 0;\n  border-top-left-radius: calc(0.25rem - 1px);\n  border-top-right-radius: calc(0.25rem - 1px);\n}\n\n.card > .list-group:last-child {\n  border-bottom-width: 0;\n  border-bottom-right-radius: calc(0.25rem - 1px);\n  border-bottom-left-radius: calc(0.25rem - 1px);\n}\n\n.card > .card-header + .list-group,\n.card > .list-group + .card-footer {\n  border-top: 0;\n}\n\n.card-body {\n  -ms-flex: 1 1 auto;\n  flex: 1 1 auto;\n  padding: 1rem 1rem;\n}\n\n.card-title {\n  margin-bottom: 0.5rem;\n}\n\n.card-subtitle {\n  margin-top: -0.25rem;\n  margin-bottom: 0;\n}\n\n.card-text:last-child {\n  margin-bottom: 0;\n}\n\n.card-link + .card-link {\n  margin-left: 1rem;\n}\n\n.card-header {\n  padding: 0.5rem 1rem;\n  margin-bottom: 0;\n  background-color: rgba(0, 0, 0, 0.03);\n  border-bottom: 1px solid rgba(0, 0, 0, 0.125);\n}\n\n.card-header:first-child {\n  border-radius: calc(0.25rem - 1px) calc(0.25rem - 1px) 0 0;\n}\n\n.card-footer {\n  padding: 0.5rem 1rem;\n  background-color: rgba(0, 0, 0, 0.03);\n  border-top: 1px solid rgba(0, 0, 0, 0.125);\n}\n\n.card-footer:last-child {\n  border-radius: 0 0 calc(0.25rem - 1px) calc(0.25rem - 1px);\n}\n\n.card-header-tabs {\n  margin-right: -0.5rem;\n  margin-bottom: -0.5rem;\n  margin-left: -0.5rem;\n  border-bottom: 0;\n}\n\n.card-header-pills {\n  margin-right: -0.5rem;\n  margin-left: -0.5rem;\n}\n\n.card-img-overlay {\n  position: absolute;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  padding: 1rem;\n  border-radius: calc(0.25rem - 1px);\n}\n\n.card-img,\n.card-img-top,\n.card-img-bottom {\n  width: 100%;\n}\n\n.card-img,\n.card-img-top {\n  border-top-left-radius: calc(0.25rem - 1px);\n  border-top-right-radius: calc(0.25rem - 1px);\n}\n\n.card-img,\n.card-img-bottom {\n  border-bottom-right-radius: calc(0.25rem - 1px);\n  border-bottom-left-radius: calc(0.25rem - 1px);\n}\n\n.card-group > .card {\n  margin-bottom: 0.75rem;\n}\n\n@media (min-width: 576px) {\n  .card-group {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-flow: row wrap;\n    flex-flow: row wrap;\n  }\n  .card-group > .card {\n    -ms-flex: 1 0 0%;\n    flex: 1 0 0%;\n    margin-bottom: 0;\n  }\n  .card-group > .card + .card {\n    margin-left: 0;\n    border-left: 0;\n  }\n  .card-group > .card:not(:last-child) {\n    border-top-right-radius: 0;\n    border-bottom-right-radius: 0;\n  }\n  .card-group > .card:not(:last-child) .card-img-top,\n  .card-group > .card:not(:last-child) .card-header {\n    border-top-right-radius: 0;\n  }\n  .card-group > .card:not(:last-child) .card-img-bottom,\n  .card-group > .card:not(:last-child) .card-footer {\n    border-bottom-right-radius: 0;\n  }\n  .card-group > .card:not(:first-child) {\n    border-top-left-radius: 0;\n    border-bottom-left-radius: 0;\n  }\n  .card-group > .card:not(:first-child) .card-img-top,\n  .card-group > .card:not(:first-child) .card-header {\n    border-top-left-radius: 0;\n  }\n  .card-group > .card:not(:first-child) .card-img-bottom,\n  .card-group > .card:not(:first-child) .card-footer {\n    border-bottom-left-radius: 0;\n  }\n}\n\n.accordion-button {\n  position: relative;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-align: center;\n  align-items: center;\n  width: 100%;\n  padding: 1rem 1.25rem;\n  font-size: 1.1rem;\n  color: #343a40;\n  text-align: left;\n  background-color: #fff;\n  border: 0;\n  border-radius: 0;\n  overflow-anchor: none;\n  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, border-radius 0.15s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .accordion-button {\n    transition: none;\n  }\n}\n\n.accordion-button:not(.collapsed) {\n  color: #3e75d4;\n  background-color: #ecf3fd;\n  box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.125);\n}\n\n.accordion-button:not(.collapsed)::after {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%233e75d4'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e\");\n  -webkit-transform: rotate(-180deg);\n  transform: rotate(-180deg);\n}\n\n.accordion-button::after {\n  -ms-flex-negative: 0;\n  flex-shrink: 0;\n  width: 1.25rem;\n  height: 1.25rem;\n  margin-left: auto;\n  content: \"\";\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23343a40'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e\");\n  background-repeat: no-repeat;\n  background-size: 1.25rem;\n  transition: -webkit-transform 0.2s ease-in-out;\n  transition: transform 0.2s ease-in-out;\n  transition: transform 0.2s ease-in-out, -webkit-transform 0.2s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .accordion-button::after {\n    transition: none;\n  }\n}\n\n.accordion-button:hover {\n  z-index: 2;\n}\n\n.accordion-button:focus {\n  z-index: 3;\n  border-color: #a2c1f6;\n  outline: 0;\n  box-shadow: 0 0 0 0.25rem rgba(69, 130, 236, 0.25);\n}\n\n.accordion-header {\n  margin-bottom: 0;\n}\n\n.accordion-item {\n  background-color: #fff;\n  border: 1px solid rgba(0, 0, 0, 0.125);\n}\n\n.accordion-item:first-of-type {\n  border-top-left-radius: 0.25rem;\n  border-top-right-radius: 0.25rem;\n}\n\n.accordion-item:first-of-type .accordion-button {\n  border-top-left-radius: calc(0.25rem - 1px);\n  border-top-right-radius: calc(0.25rem - 1px);\n}\n\n.accordion-item:not(:first-of-type) {\n  border-top: 0;\n}\n\n.accordion-item:last-of-type {\n  border-bottom-right-radius: 0.25rem;\n  border-bottom-left-radius: 0.25rem;\n}\n\n.accordion-item:last-of-type .accordion-button.collapsed {\n  border-bottom-right-radius: calc(0.25rem - 1px);\n  border-bottom-left-radius: calc(0.25rem - 1px);\n}\n\n.accordion-item:last-of-type .accordion-collapse {\n  border-bottom-right-radius: 0.25rem;\n  border-bottom-left-radius: 0.25rem;\n}\n\n.accordion-body {\n  padding: 1rem 1.25rem;\n}\n\n.accordion-flush .accordion-collapse {\n  border-width: 0;\n}\n\n.accordion-flush .accordion-item {\n  border-right: 0;\n  border-left: 0;\n  border-radius: 0;\n}\n\n.accordion-flush .accordion-item:first-child {\n  border-top: 0;\n}\n\n.accordion-flush .accordion-item:last-child {\n  border-bottom: 0;\n}\n\n.accordion-flush .accordion-item .accordion-button {\n  border-radius: 0;\n}\n\n.breadcrumb {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n  flex-wrap: wrap;\n  padding: 0 0;\n  margin-bottom: 1rem;\n  list-style: none;\n}\n\n.breadcrumb-item + .breadcrumb-item {\n  padding-left: 0.5rem;\n}\n\n.breadcrumb-item + .breadcrumb-item::before {\n  float: left;\n  padding-right: 0.5rem;\n  color: #868e96;\n  content: var(--bs-breadcrumb-divider, \"/\") /* rtl: var(--bs-breadcrumb-divider, \"/\") */;\n}\n\n.breadcrumb-item.active {\n  color: #868e96;\n}\n\n.pagination {\n  display: -ms-flexbox;\n  display: flex;\n  padding-left: 0;\n  list-style: none;\n}\n\n.page-link {\n  position: relative;\n  display: block;\n  color: #4582ec;\n  text-decoration: none;\n  background-color: #fff;\n  border: 1px solid #ddd;\n  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .page-link {\n    transition: none;\n  }\n}\n\n.page-link:hover {\n  z-index: 2;\n  color: #3768bd;\n  background-color: #e9ecef;\n  border-color: #ddd;\n}\n\n.page-link:focus {\n  z-index: 3;\n  color: #3768bd;\n  background-color: #e9ecef;\n  outline: 0;\n  box-shadow: 0 0 0 0.25rem rgba(69, 130, 236, 0.25);\n}\n\n.page-item:not(:first-child) .page-link {\n  margin-left: -1px;\n}\n\n.page-item.active .page-link {\n  z-index: 3;\n  color: #fff;\n  background-color: #4582ec;\n  border-color: #4582ec;\n}\n\n.page-item.disabled .page-link {\n  color: #868e96;\n  pointer-events: none;\n  background-color: #fff;\n  border-color: #ddd;\n}\n\n.page-link {\n  padding: 0.375rem 0.75rem;\n}\n\n.page-item:first-child .page-link {\n  border-top-left-radius: 0.25rem;\n  border-bottom-left-radius: 0.25rem;\n}\n\n.page-item:last-child .page-link {\n  border-top-right-radius: 0.25rem;\n  border-bottom-right-radius: 0.25rem;\n}\n\n.pagination-lg .page-link {\n  padding: 0.75rem 1.5rem;\n  font-size: calc(1.2625rem + 0.15vw);\n}\n\n@media (min-width: 1200px) {\n  .pagination-lg .page-link {\n    font-size: 1.375rem;\n  }\n}\n\n.pagination-lg .page-item:first-child .page-link {\n  border-top-left-radius: 0.3rem;\n  border-bottom-left-radius: 0.3rem;\n}\n\n.pagination-lg .page-item:last-child .page-link {\n  border-top-right-radius: 0.3rem;\n  border-bottom-right-radius: 0.3rem;\n}\n\n.pagination-sm .page-link {\n  padding: 0.25rem 0.5rem;\n  font-size: 0.9625rem;\n}\n\n.pagination-sm .page-item:first-child .page-link {\n  border-top-left-radius: 0.2rem;\n  border-bottom-left-radius: 0.2rem;\n}\n\n.pagination-sm .page-item:last-child .page-link {\n  border-top-right-radius: 0.2rem;\n  border-bottom-right-radius: 0.2rem;\n}\n\n.badge {\n  display: inline-block;\n  padding: 0.6em 1.2em;\n  font-size: 0.75em;\n  font-weight: 400;\n  line-height: 1;\n  color: #fff;\n  text-align: center;\n  white-space: nowrap;\n  vertical-align: baseline;\n  border-radius: 0.25rem;\n}\n\n.badge:empty {\n  display: none;\n}\n\n.btn .badge {\n  position: relative;\n  top: -1px;\n}\n\n.alert {\n  position: relative;\n  padding: 1rem 1rem;\n  margin-bottom: 1rem;\n  border: 0 solid transparent;\n  border-radius: 0.25rem;\n}\n\n.alert-heading {\n  color: inherit;\n}\n\n.alert-link {\n  font-weight: 700;\n}\n\n.alert-dismissible {\n  padding-right: 3rem;\n}\n\n.alert-dismissible .btn-close {\n  position: absolute;\n  top: 0;\n  right: 0;\n  z-index: 2;\n  padding: 1.25rem 1rem;\n}\n\n.alert-primary {\n  color: #294e8e;\n  background-color: #dae6fb;\n  border-color: #c7daf9;\n}\n\n.alert-primary .alert-link {\n  color: #213e72;\n}\n\n.alert-secondary {\n  color: #686d71;\n  background-color: #eff0f2;\n  border-color: #e6e9eb;\n}\n\n.alert-secondary .alert-link {\n  color: #53575a;\n}\n\n.alert-success {\n  color: #016e46;\n  background-color: #ccf1e3;\n  border-color: #b3ead6;\n}\n\n.alert-success .alert-link {\n  color: #015838;\n}\n\n.alert-info {\n  color: #0e616e;\n  background-color: #d1ecf1;\n  border-color: #b9e3ea;\n}\n\n.alert-info .alert-link {\n  color: #0b4e58;\n}\n\n.alert-warning {\n  color: #90682f;\n  background-color: #fcefdc;\n  border-color: #fbe6ca;\n}\n\n.alert-warning .alert-link {\n  color: #735326;\n}\n\n.alert-danger {\n  color: #82322f;\n  background-color: #f7dddc;\n  border-color: #f4cbca;\n}\n\n.alert-danger .alert-link {\n  color: #682826;\n}\n\n.alert-light {\n  color: #959596;\n  background-color: #fefefe;\n  border-color: #fdfdfe;\n}\n\n.alert-light .alert-link {\n  color: #777778;\n}\n\n.alert-dark {\n  color: #1f2326;\n  background-color: #d6d8d9;\n  border-color: #c2c4c6;\n}\n\n.alert-dark .alert-link {\n  color: #191c1e;\n}\n\n@-webkit-keyframes progress-bar-stripes {\n  0% {\n    background-position-x: 1rem;\n  }\n}\n\n@keyframes progress-bar-stripes {\n  0% {\n    background-position-x: 1rem;\n  }\n}\n\n.progress {\n  display: -ms-flexbox;\n  display: flex;\n  height: 1rem;\n  overflow: hidden;\n  font-size: 0.825rem;\n  background-color: #e9ecef;\n  border-radius: 0.25rem;\n}\n\n.progress-bar {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  -ms-flex-pack: center;\n  justify-content: center;\n  overflow: hidden;\n  color: #fff;\n  text-align: center;\n  white-space: nowrap;\n  background-color: #4582ec;\n  transition: width 0.6s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .progress-bar {\n    transition: none;\n  }\n}\n\n.progress-bar-striped {\n  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-size: 1rem 1rem;\n}\n\n.progress-bar-animated {\n  -webkit-animation: 1s linear infinite progress-bar-stripes;\n  animation: 1s linear infinite progress-bar-stripes;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .progress-bar-animated {\n    -webkit-animation: none;\n    animation: none;\n  }\n}\n\n.list-group {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  padding-left: 0;\n  margin-bottom: 0;\n  border-radius: 0.25rem;\n}\n\n.list-group-numbered {\n  list-style-type: none;\n  counter-reset: section;\n}\n\n.list-group-numbered > li::before {\n  content: counters(section, \".\") \". \";\n  counter-increment: section;\n}\n\n.list-group-item-action {\n  width: 100%;\n  color: #495057;\n  text-align: inherit;\n}\n\n.list-group-item-action:hover, .list-group-item-action:focus {\n  z-index: 1;\n  color: #495057;\n  text-decoration: none;\n  background-color: #f8f9fa;\n}\n\n.list-group-item-action:active {\n  color: #343a40;\n  background-color: #e9ecef;\n}\n\n.list-group-item {\n  position: relative;\n  display: block;\n  padding: 0.5rem 1rem;\n  color: #212529;\n  text-decoration: none;\n  background-color: #fff;\n  border: 1px solid rgba(0, 0, 0, 0.125);\n}\n\n.list-group-item:first-child {\n  border-top-left-radius: inherit;\n  border-top-right-radius: inherit;\n}\n\n.list-group-item:last-child {\n  border-bottom-right-radius: inherit;\n  border-bottom-left-radius: inherit;\n}\n\n.list-group-item.disabled, .list-group-item:disabled {\n  color: #868e96;\n  pointer-events: none;\n  background-color: #fff;\n}\n\n.list-group-item.active {\n  z-index: 2;\n  color: #fff;\n  background-color: #4582ec;\n  border-color: #4582ec;\n}\n\n.list-group-item + .list-group-item {\n  border-top-width: 0;\n}\n\n.list-group-item + .list-group-item.active {\n  margin-top: -1px;\n  border-top-width: 1px;\n}\n\n.list-group-horizontal {\n  -ms-flex-direction: row;\n  flex-direction: row;\n}\n\n.list-group-horizontal > .list-group-item:first-child {\n  border-bottom-left-radius: 0.25rem;\n  border-top-right-radius: 0;\n}\n\n.list-group-horizontal > .list-group-item:last-child {\n  border-top-right-radius: 0.25rem;\n  border-bottom-left-radius: 0;\n}\n\n.list-group-horizontal > .list-group-item.active {\n  margin-top: 0;\n}\n\n.list-group-horizontal > .list-group-item + .list-group-item {\n  border-top-width: 1px;\n  border-left-width: 0;\n}\n\n.list-group-horizontal > .list-group-item + .list-group-item.active {\n  margin-left: -1px;\n  border-left-width: 1px;\n}\n\n@media (min-width: 576px) {\n  .list-group-horizontal-sm {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .list-group-horizontal-sm > .list-group-item:first-child {\n    border-bottom-left-radius: 0.25rem;\n    border-top-right-radius: 0;\n  }\n  .list-group-horizontal-sm > .list-group-item:last-child {\n    border-top-right-radius: 0.25rem;\n    border-bottom-left-radius: 0;\n  }\n  .list-group-horizontal-sm > .list-group-item.active {\n    margin-top: 0;\n  }\n  .list-group-horizontal-sm > .list-group-item + .list-group-item {\n    border-top-width: 1px;\n    border-left-width: 0;\n  }\n  .list-group-horizontal-sm > .list-group-item + .list-group-item.active {\n    margin-left: -1px;\n    border-left-width: 1px;\n  }\n}\n\n@media (min-width: 768px) {\n  .list-group-horizontal-md {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .list-group-horizontal-md > .list-group-item:first-child {\n    border-bottom-left-radius: 0.25rem;\n    border-top-right-radius: 0;\n  }\n  .list-group-horizontal-md > .list-group-item:last-child {\n    border-top-right-radius: 0.25rem;\n    border-bottom-left-radius: 0;\n  }\n  .list-group-horizontal-md > .list-group-item.active {\n    margin-top: 0;\n  }\n  .list-group-horizontal-md > .list-group-item + .list-group-item {\n    border-top-width: 1px;\n    border-left-width: 0;\n  }\n  .list-group-horizontal-md > .list-group-item + .list-group-item.active {\n    margin-left: -1px;\n    border-left-width: 1px;\n  }\n}\n\n@media (min-width: 992px) {\n  .list-group-horizontal-lg {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .list-group-horizontal-lg > .list-group-item:first-child {\n    border-bottom-left-radius: 0.25rem;\n    border-top-right-radius: 0;\n  }\n  .list-group-horizontal-lg > .list-group-item:last-child {\n    border-top-right-radius: 0.25rem;\n    border-bottom-left-radius: 0;\n  }\n  .list-group-horizontal-lg > .list-group-item.active {\n    margin-top: 0;\n  }\n  .list-group-horizontal-lg > .list-group-item + .list-group-item {\n    border-top-width: 1px;\n    border-left-width: 0;\n  }\n  .list-group-horizontal-lg > .list-group-item + .list-group-item.active {\n    margin-left: -1px;\n    border-left-width: 1px;\n  }\n}\n\n@media (min-width: 1200px) {\n  .list-group-horizontal-xl {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .list-group-horizontal-xl > .list-group-item:first-child {\n    border-bottom-left-radius: 0.25rem;\n    border-top-right-radius: 0;\n  }\n  .list-group-horizontal-xl > .list-group-item:last-child {\n    border-top-right-radius: 0.25rem;\n    border-bottom-left-radius: 0;\n  }\n  .list-group-horizontal-xl > .list-group-item.active {\n    margin-top: 0;\n  }\n  .list-group-horizontal-xl > .list-group-item + .list-group-item {\n    border-top-width: 1px;\n    border-left-width: 0;\n  }\n  .list-group-horizontal-xl > .list-group-item + .list-group-item.active {\n    margin-left: -1px;\n    border-left-width: 1px;\n  }\n}\n\n@media (min-width: 1400px) {\n  .list-group-horizontal-xxl {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .list-group-horizontal-xxl > .list-group-item:first-child {\n    border-bottom-left-radius: 0.25rem;\n    border-top-right-radius: 0;\n  }\n  .list-group-horizontal-xxl > .list-group-item:last-child {\n    border-top-right-radius: 0.25rem;\n    border-bottom-left-radius: 0;\n  }\n  .list-group-horizontal-xxl > .list-group-item.active {\n    margin-top: 0;\n  }\n  .list-group-horizontal-xxl > .list-group-item + .list-group-item {\n    border-top-width: 1px;\n    border-left-width: 0;\n  }\n  .list-group-horizontal-xxl > .list-group-item + .list-group-item.active {\n    margin-left: -1px;\n    border-left-width: 1px;\n  }\n}\n\n.list-group-flush {\n  border-radius: 0;\n}\n\n.list-group-flush > .list-group-item {\n  border-width: 0 0 1px;\n}\n\n.list-group-flush > .list-group-item:last-child {\n  border-bottom-width: 0;\n}\n\n.list-group-item-primary {\n  color: #294e8e;\n  background-color: #dae6fb;\n}\n\n.list-group-item-primary.list-group-item-action:hover, .list-group-item-primary.list-group-item-action:focus {\n  color: #294e8e;\n  background-color: #c4cfe2;\n}\n\n.list-group-item-primary.list-group-item-action.active {\n  color: #fff;\n  background-color: #294e8e;\n  border-color: #294e8e;\n}\n\n.list-group-item-secondary {\n  color: #686d71;\n  background-color: #eff0f2;\n}\n\n.list-group-item-secondary.list-group-item-action:hover, .list-group-item-secondary.list-group-item-action:focus {\n  color: #686d71;\n  background-color: #d7d8da;\n}\n\n.list-group-item-secondary.list-group-item-action.active {\n  color: #fff;\n  background-color: #686d71;\n  border-color: #686d71;\n}\n\n.list-group-item-success {\n  color: #016e46;\n  background-color: #ccf1e3;\n}\n\n.list-group-item-success.list-group-item-action:hover, .list-group-item-success.list-group-item-action:focus {\n  color: #016e46;\n  background-color: #b8d9cc;\n}\n\n.list-group-item-success.list-group-item-action.active {\n  color: #fff;\n  background-color: #016e46;\n  border-color: #016e46;\n}\n\n.list-group-item-info {\n  color: #0e616e;\n  background-color: #d1ecf1;\n}\n\n.list-group-item-info.list-group-item-action:hover, .list-group-item-info.list-group-item-action:focus {\n  color: #0e616e;\n  background-color: #bcd4d9;\n}\n\n.list-group-item-info.list-group-item-action.active {\n  color: #fff;\n  background-color: #0e616e;\n  border-color: #0e616e;\n}\n\n.list-group-item-warning {\n  color: #90682f;\n  background-color: #fcefdc;\n}\n\n.list-group-item-warning.list-group-item-action:hover, .list-group-item-warning.list-group-item-action:focus {\n  color: #90682f;\n  background-color: #e3d7c6;\n}\n\n.list-group-item-warning.list-group-item-action.active {\n  color: #fff;\n  background-color: #90682f;\n  border-color: #90682f;\n}\n\n.list-group-item-danger {\n  color: #82322f;\n  background-color: #f7dddc;\n}\n\n.list-group-item-danger.list-group-item-action:hover, .list-group-item-danger.list-group-item-action:focus {\n  color: #82322f;\n  background-color: #dec7c6;\n}\n\n.list-group-item-danger.list-group-item-action.active {\n  color: #fff;\n  background-color: #82322f;\n  border-color: #82322f;\n}\n\n.list-group-item-light {\n  color: #959596;\n  background-color: #fefefe;\n}\n\n.list-group-item-light.list-group-item-action:hover, .list-group-item-light.list-group-item-action:focus {\n  color: #959596;\n  background-color: #e5e5e5;\n}\n\n.list-group-item-light.list-group-item-action.active {\n  color: #fff;\n  background-color: #959596;\n  border-color: #959596;\n}\n\n.list-group-item-dark {\n  color: #1f2326;\n  background-color: #d6d8d9;\n}\n\n.list-group-item-dark.list-group-item-action:hover, .list-group-item-dark.list-group-item-action:focus {\n  color: #1f2326;\n  background-color: #c1c2c3;\n}\n\n.list-group-item-dark.list-group-item-action.active {\n  color: #fff;\n  background-color: #1f2326;\n  border-color: #1f2326;\n}\n\n.btn-close {\n  box-sizing: content-box;\n  width: 1em;\n  height: 1em;\n  padding: 0.25em 0.25em;\n  color: #000;\n  background: transparent url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23000'%3e%3cpath d='M.293.293a1 1 0 011.414 0L8 6.586 14.293.293a1 1 0 111.414 1.414L9.414 8l6.293 6.293a1 1 0 01-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 01-1.414-1.414L6.586 8 .293 1.707a1 1 0 010-1.414z'/%3e%3c/svg%3e\") center/1em auto no-repeat;\n  border: 0;\n  border-radius: 0.25rem;\n  opacity: 0.5;\n}\n\n.btn-close:hover {\n  color: #000;\n  text-decoration: none;\n  opacity: 0.75;\n}\n\n.btn-close:focus {\n  outline: 0;\n  box-shadow: 0 0 0 0.25rem rgba(69, 130, 236, 0.25);\n  opacity: 1;\n}\n\n.btn-close:disabled, .btn-close.disabled {\n  pointer-events: none;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  user-select: none;\n  opacity: 0.25;\n}\n\n.btn-close-white {\n  -webkit-filter: invert(1) grayscale(100%) brightness(200%);\n  filter: invert(1) grayscale(100%) brightness(200%);\n}\n\n.toast {\n  width: 350px;\n  max-width: 100%;\n  font-size: 0.875rem;\n  pointer-events: auto;\n  background-color: rgba(255, 255, 255, 0.85);\n  background-clip: padding-box;\n  border: 1px solid rgba(0, 0, 0, 0.1);\n  box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15);\n  border-radius: 0.25rem;\n}\n\n.toast.showing {\n  opacity: 0;\n}\n\n.toast:not(.show) {\n  display: none;\n}\n\n.toast-container {\n  width: -webkit-max-content;\n  width: -moz-max-content;\n  width: max-content;\n  max-width: 100%;\n  pointer-events: none;\n}\n\n.toast-container > :not(:last-child) {\n  margin-bottom: 0.75rem;\n}\n\n.toast-header {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-align: center;\n  align-items: center;\n  padding: 0.5rem 0.75rem;\n  color: #868e96;\n  background-color: rgba(255, 255, 255, 0.85);\n  background-clip: padding-box;\n  border-bottom: 1px solid rgba(0, 0, 0, 0.05);\n  border-top-left-radius: calc(0.25rem - 1px);\n  border-top-right-radius: calc(0.25rem - 1px);\n}\n\n.toast-header .btn-close {\n  margin-right: -0.375rem;\n  margin-left: 0.75rem;\n}\n\n.toast-body {\n  padding: 0.75rem;\n  word-wrap: break-word;\n}\n\n.modal {\n  position: fixed;\n  top: 0;\n  left: 0;\n  z-index: 1055;\n  display: none;\n  width: 100%;\n  height: 100%;\n  overflow-x: hidden;\n  overflow-y: auto;\n  outline: 0;\n}\n\n.modal-dialog {\n  position: relative;\n  width: auto;\n  margin: 0.5rem;\n  pointer-events: none;\n}\n\n.modal.fade .modal-dialog {\n  transition: -webkit-transform 0.3s ease-out;\n  transition: transform 0.3s ease-out;\n  transition: transform 0.3s ease-out, -webkit-transform 0.3s ease-out;\n  -webkit-transform: translate(0, -50px);\n  transform: translate(0, -50px);\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .modal.fade .modal-dialog {\n    transition: none;\n  }\n}\n\n.modal.show .modal-dialog {\n  -webkit-transform: none;\n  transform: none;\n}\n\n.modal.modal-static .modal-dialog {\n  -webkit-transform: scale(1.02);\n  transform: scale(1.02);\n}\n\n.modal-dialog-scrollable {\n  height: calc(100% - 1rem);\n}\n\n.modal-dialog-scrollable .modal-content {\n  max-height: 100%;\n  overflow: hidden;\n}\n\n.modal-dialog-scrollable .modal-body {\n  overflow-y: auto;\n}\n\n.modal-dialog-centered {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-align: center;\n  align-items: center;\n  min-height: calc(100% - 1rem);\n}\n\n.modal-content {\n  position: relative;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  width: 100%;\n  pointer-events: auto;\n  background-color: #fff;\n  background-clip: padding-box;\n  border: 1px solid rgba(0, 0, 0, 0.2);\n  border-radius: 0.3rem;\n  outline: 0;\n}\n\n.modal-backdrop {\n  position: fixed;\n  top: 0;\n  left: 0;\n  z-index: 1050;\n  width: 100vw;\n  height: 100vh;\n  background-color: #000;\n}\n\n.modal-backdrop.fade {\n  opacity: 0;\n}\n\n.modal-backdrop.show {\n  opacity: 0.5;\n}\n\n.modal-header {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-negative: 0;\n  flex-shrink: 0;\n  -ms-flex-align: center;\n  align-items: center;\n  -ms-flex-pack: justify;\n  justify-content: space-between;\n  padding: 1rem 1rem;\n  border-bottom: 1px solid #ddd;\n  border-top-left-radius: calc(0.3rem - 1px);\n  border-top-right-radius: calc(0.3rem - 1px);\n}\n\n.modal-header .btn-close {\n  padding: 0.5rem 0.5rem;\n  margin: -0.5rem -0.5rem -0.5rem auto;\n}\n\n.modal-title {\n  margin-bottom: 0;\n  line-height: 1.5;\n}\n\n.modal-body {\n  position: relative;\n  -ms-flex: 1 1 auto;\n  flex: 1 1 auto;\n  padding: 1rem;\n}\n\n.modal-footer {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n  flex-wrap: wrap;\n  -ms-flex-negative: 0;\n  flex-shrink: 0;\n  -ms-flex-align: center;\n  align-items: center;\n  -ms-flex-pack: end;\n  justify-content: flex-end;\n  padding: 0.75rem;\n  border-top: 1px solid #ddd;\n  border-bottom-right-radius: calc(0.3rem - 1px);\n  border-bottom-left-radius: calc(0.3rem - 1px);\n}\n\n.modal-footer > * {\n  margin: 0.25rem;\n}\n\n@media (min-width: 576px) {\n  .modal-dialog {\n    max-width: 500px;\n    margin: 1.75rem auto;\n  }\n  .modal-dialog-scrollable {\n    height: calc(100% - 3.5rem);\n  }\n  .modal-dialog-centered {\n    min-height: calc(100% - 3.5rem);\n  }\n  .modal-sm {\n    max-width: 300px;\n  }\n}\n\n@media (min-width: 992px) {\n  .modal-lg,\n  .modal-xl {\n    max-width: 800px;\n  }\n}\n\n@media (min-width: 1200px) {\n  .modal-xl {\n    max-width: 1140px;\n  }\n}\n\n.modal-fullscreen {\n  width: 100vw;\n  max-width: none;\n  height: 100%;\n  margin: 0;\n}\n\n.modal-fullscreen .modal-content {\n  height: 100%;\n  border: 0;\n  border-radius: 0;\n}\n\n.modal-fullscreen .modal-header {\n  border-radius: 0;\n}\n\n.modal-fullscreen .modal-body {\n  overflow-y: auto;\n}\n\n.modal-fullscreen .modal-footer {\n  border-radius: 0;\n}\n\n@media (max-width: 575.98px) {\n  .modal-fullscreen-sm-down {\n    width: 100vw;\n    max-width: none;\n    height: 100%;\n    margin: 0;\n  }\n  .modal-fullscreen-sm-down .modal-content {\n    height: 100%;\n    border: 0;\n    border-radius: 0;\n  }\n  .modal-fullscreen-sm-down .modal-header {\n    border-radius: 0;\n  }\n  .modal-fullscreen-sm-down .modal-body {\n    overflow-y: auto;\n  }\n  .modal-fullscreen-sm-down .modal-footer {\n    border-radius: 0;\n  }\n}\n\n@media (max-width: 767.98px) {\n  .modal-fullscreen-md-down {\n    width: 100vw;\n    max-width: none;\n    height: 100%;\n    margin: 0;\n  }\n  .modal-fullscreen-md-down .modal-content {\n    height: 100%;\n    border: 0;\n    border-radius: 0;\n  }\n  .modal-fullscreen-md-down .modal-header {\n    border-radius: 0;\n  }\n  .modal-fullscreen-md-down .modal-body {\n    overflow-y: auto;\n  }\n  .modal-fullscreen-md-down .modal-footer {\n    border-radius: 0;\n  }\n}\n\n@media (max-width: 991.98px) {\n  .modal-fullscreen-lg-down {\n    width: 100vw;\n    max-width: none;\n    height: 100%;\n    margin: 0;\n  }\n  .modal-fullscreen-lg-down .modal-content {\n    height: 100%;\n    border: 0;\n    border-radius: 0;\n  }\n  .modal-fullscreen-lg-down .modal-header {\n    border-radius: 0;\n  }\n  .modal-fullscreen-lg-down .modal-body {\n    overflow-y: auto;\n  }\n  .modal-fullscreen-lg-down .modal-footer {\n    border-radius: 0;\n  }\n}\n\n@media (max-width: 1199.98px) {\n  .modal-fullscreen-xl-down {\n    width: 100vw;\n    max-width: none;\n    height: 100%;\n    margin: 0;\n  }\n  .modal-fullscreen-xl-down .modal-content {\n    height: 100%;\n    border: 0;\n    border-radius: 0;\n  }\n  .modal-fullscreen-xl-down .modal-header {\n    border-radius: 0;\n  }\n  .modal-fullscreen-xl-down .modal-body {\n    overflow-y: auto;\n  }\n  .modal-fullscreen-xl-down .modal-footer {\n    border-radius: 0;\n  }\n}\n\n@media (max-width: 1399.98px) {\n  .modal-fullscreen-xxl-down {\n    width: 100vw;\n    max-width: none;\n    height: 100%;\n    margin: 0;\n  }\n  .modal-fullscreen-xxl-down .modal-content {\n    height: 100%;\n    border: 0;\n    border-radius: 0;\n  }\n  .modal-fullscreen-xxl-down .modal-header {\n    border-radius: 0;\n  }\n  .modal-fullscreen-xxl-down .modal-body {\n    overflow-y: auto;\n  }\n  .modal-fullscreen-xxl-down .modal-footer {\n    border-radius: 0;\n  }\n}\n\n.tooltip {\n  position: absolute;\n  z-index: 1080;\n  display: block;\n  margin: 0;\n  font-family: var(--bs-font-sans-serif);\n  font-style: normal;\n  font-weight: 400;\n  line-height: 1.5;\n  text-align: left;\n  text-align: start;\n  text-decoration: none;\n  text-shadow: none;\n  text-transform: none;\n  letter-spacing: normal;\n  word-break: normal;\n  word-spacing: normal;\n  white-space: normal;\n  line-break: auto;\n  font-size: 0.6875rem;\n  word-wrap: break-word;\n  opacity: 0;\n}\n\n.tooltip.show {\n  opacity: 0.9;\n}\n\n.tooltip .tooltip-arrow {\n  position: absolute;\n  display: block;\n  width: 0.8rem;\n  height: 0.4rem;\n}\n\n.tooltip .tooltip-arrow::before {\n  position: absolute;\n  content: \"\";\n  border-color: transparent;\n  border-style: solid;\n}\n\n.bs-tooltip-top, .bs-tooltip-auto[data-popper-placement^=\"top\"] {\n  padding: 0.4rem 0;\n}\n\n.bs-tooltip-top .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=\"top\"] .tooltip-arrow {\n  bottom: 0;\n}\n\n.bs-tooltip-top .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=\"top\"] .tooltip-arrow::before {\n  top: -1px;\n  border-width: 0.4rem 0.4rem 0;\n  border-top-color: #000;\n}\n\n.bs-tooltip-end, .bs-tooltip-auto[data-popper-placement^=\"right\"] {\n  padding: 0 0.4rem;\n}\n\n.bs-tooltip-end .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=\"right\"] .tooltip-arrow {\n  left: 0;\n  width: 0.4rem;\n  height: 0.8rem;\n}\n\n.bs-tooltip-end .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=\"right\"] .tooltip-arrow::before {\n  right: -1px;\n  border-width: 0.4rem 0.4rem 0.4rem 0;\n  border-right-color: #000;\n}\n\n.bs-tooltip-bottom, .bs-tooltip-auto[data-popper-placement^=\"bottom\"] {\n  padding: 0.4rem 0;\n}\n\n.bs-tooltip-bottom .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=\"bottom\"] .tooltip-arrow {\n  top: 0;\n}\n\n.bs-tooltip-bottom .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=\"bottom\"] .tooltip-arrow::before {\n  bottom: -1px;\n  border-width: 0 0.4rem 0.4rem;\n  border-bottom-color: #000;\n}\n\n.bs-tooltip-start, .bs-tooltip-auto[data-popper-placement^=\"left\"] {\n  padding: 0 0.4rem;\n}\n\n.bs-tooltip-start .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=\"left\"] .tooltip-arrow {\n  right: 0;\n  width: 0.4rem;\n  height: 0.8rem;\n}\n\n.bs-tooltip-start .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=\"left\"] .tooltip-arrow::before {\n  left: -1px;\n  border-width: 0.4rem 0 0.4rem 0.4rem;\n  border-left-color: #000;\n}\n\n.tooltip-inner {\n  max-width: 200px;\n  padding: 0.25rem 0.5rem;\n  color: #fff;\n  text-align: center;\n  background-color: #000;\n  border-radius: 0.25rem;\n}\n\n.popover {\n  position: absolute;\n  top: 0;\n  left: 0 /* rtl:ignore */;\n  z-index: 1070;\n  display: block;\n  max-width: 276px;\n  font-family: var(--bs-font-sans-serif);\n  font-style: normal;\n  font-weight: 400;\n  line-height: 1.5;\n  text-align: left;\n  text-align: start;\n  text-decoration: none;\n  text-shadow: none;\n  text-transform: none;\n  letter-spacing: normal;\n  word-break: normal;\n  word-spacing: normal;\n  white-space: normal;\n  line-break: auto;\n  font-size: 0.9625rem;\n  word-wrap: break-word;\n  background-color: #fff;\n  background-clip: padding-box;\n  border: 1px solid rgba(0, 0, 0, 0.2);\n  border-radius: 0.3rem;\n}\n\n.popover .popover-arrow {\n  position: absolute;\n  display: block;\n  width: 1rem;\n  height: 0.5rem;\n}\n\n.popover .popover-arrow::before, .popover .popover-arrow::after {\n  position: absolute;\n  display: block;\n  content: \"\";\n  border-color: transparent;\n  border-style: solid;\n}\n\n.bs-popover-top > .popover-arrow, .bs-popover-auto[data-popper-placement^=\"top\"] > .popover-arrow {\n  bottom: calc(-0.5rem - 1px);\n}\n\n.bs-popover-top > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=\"top\"] > .popover-arrow::before {\n  bottom: 0;\n  border-width: 0.5rem 0.5rem 0;\n  border-top-color: rgba(0, 0, 0, 0.25);\n}\n\n.bs-popover-top > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=\"top\"] > .popover-arrow::after {\n  bottom: 1px;\n  border-width: 0.5rem 0.5rem 0;\n  border-top-color: #fff;\n}\n\n.bs-popover-end > .popover-arrow, .bs-popover-auto[data-popper-placement^=\"right\"] > .popover-arrow {\n  left: calc(-0.5rem - 1px);\n  width: 0.5rem;\n  height: 1rem;\n}\n\n.bs-popover-end > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=\"right\"] > .popover-arrow::before {\n  left: 0;\n  border-width: 0.5rem 0.5rem 0.5rem 0;\n  border-right-color: rgba(0, 0, 0, 0.25);\n}\n\n.bs-popover-end > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=\"right\"] > .popover-arrow::after {\n  left: 1px;\n  border-width: 0.5rem 0.5rem 0.5rem 0;\n  border-right-color: #fff;\n}\n\n.bs-popover-bottom > .popover-arrow, .bs-popover-auto[data-popper-placement^=\"bottom\"] > .popover-arrow {\n  top: calc(-0.5rem - 1px);\n}\n\n.bs-popover-bottom > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=\"bottom\"] > .popover-arrow::before {\n  top: 0;\n  border-width: 0 0.5rem 0.5rem 0.5rem;\n  border-bottom-color: rgba(0, 0, 0, 0.25);\n}\n\n.bs-popover-bottom > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=\"bottom\"] > .popover-arrow::after {\n  top: 1px;\n  border-width: 0 0.5rem 0.5rem 0.5rem;\n  border-bottom-color: #fff;\n}\n\n.bs-popover-bottom .popover-header::before, .bs-popover-auto[data-popper-placement^=\"bottom\"] .popover-header::before {\n  position: absolute;\n  top: 0;\n  left: 50%;\n  display: block;\n  width: 1rem;\n  margin-left: -0.5rem;\n  content: \"\";\n  border-bottom: 1px solid #f0f0f0;\n}\n\n.bs-popover-start > .popover-arrow, .bs-popover-auto[data-popper-placement^=\"left\"] > .popover-arrow {\n  right: calc(-0.5rem - 1px);\n  width: 0.5rem;\n  height: 1rem;\n}\n\n.bs-popover-start > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=\"left\"] > .popover-arrow::before {\n  right: 0;\n  border-width: 0.5rem 0 0.5rem 0.5rem;\n  border-left-color: rgba(0, 0, 0, 0.25);\n}\n\n.bs-popover-start > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=\"left\"] > .popover-arrow::after {\n  right: 1px;\n  border-width: 0.5rem 0 0.5rem 0.5rem;\n  border-left-color: #fff;\n}\n\n.popover-header {\n  padding: 0.5rem 1rem;\n  margin-bottom: 0;\n  font-size: 1.1rem;\n  background-color: #f0f0f0;\n  border-bottom: 1px solid rgba(0, 0, 0, 0.2);\n  border-top-left-radius: calc(0.3rem - 1px);\n  border-top-right-radius: calc(0.3rem - 1px);\n}\n\n.popover-header:empty {\n  display: none;\n}\n\n.popover-body {\n  padding: 1rem 1rem;\n  color: #343a40;\n}\n\n.carousel {\n  position: relative;\n}\n\n.carousel.pointer-event {\n  -ms-touch-action: pan-y;\n  touch-action: pan-y;\n}\n\n.carousel-inner {\n  position: relative;\n  width: 100%;\n  overflow: hidden;\n}\n\n.carousel-inner::after {\n  display: block;\n  clear: both;\n  content: \"\";\n}\n\n.carousel-item {\n  position: relative;\n  display: none;\n  float: left;\n  width: 100%;\n  margin-right: -100%;\n  -webkit-backface-visibility: hidden;\n  backface-visibility: hidden;\n  transition: -webkit-transform 0.6s ease-in-out;\n  transition: transform 0.6s ease-in-out;\n  transition: transform 0.6s ease-in-out, -webkit-transform 0.6s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .carousel-item {\n    transition: none;\n  }\n}\n\n.carousel-item.active,\n.carousel-item-next,\n.carousel-item-prev {\n  display: block;\n}\n\n/* rtl:begin:ignore */\n.carousel-item-next:not(.carousel-item-start),\n.active.carousel-item-end {\n  -webkit-transform: translateX(100%);\n  transform: translateX(100%);\n}\n\n.carousel-item-prev:not(.carousel-item-end),\n.active.carousel-item-start {\n  -webkit-transform: translateX(-100%);\n  transform: translateX(-100%);\n}\n\n/* rtl:end:ignore */\n.carousel-fade .carousel-item {\n  opacity: 0;\n  transition-property: opacity;\n  -webkit-transform: none;\n  transform: none;\n}\n\n.carousel-fade .carousel-item.active,\n.carousel-fade .carousel-item-next.carousel-item-start,\n.carousel-fade .carousel-item-prev.carousel-item-end {\n  z-index: 1;\n  opacity: 1;\n}\n\n.carousel-fade .active.carousel-item-start,\n.carousel-fade .active.carousel-item-end {\n  z-index: 0;\n  opacity: 0;\n  transition: opacity 0s 0.6s;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .carousel-fade .active.carousel-item-start,\n  .carousel-fade .active.carousel-item-end {\n    transition: none;\n  }\n}\n\n.carousel-control-prev,\n.carousel-control-next {\n  position: absolute;\n  top: 0;\n  bottom: 0;\n  z-index: 1;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-align: center;\n  align-items: center;\n  -ms-flex-pack: center;\n  justify-content: center;\n  width: 15%;\n  padding: 0;\n  color: #fff;\n  text-align: center;\n  background: none;\n  border: 0;\n  opacity: 0.5;\n  transition: opacity 0.15s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .carousel-control-prev,\n  .carousel-control-next {\n    transition: none;\n  }\n}\n\n.carousel-control-prev:hover, .carousel-control-prev:focus,\n.carousel-control-next:hover,\n.carousel-control-next:focus {\n  color: #fff;\n  text-decoration: none;\n  outline: 0;\n  opacity: 0.9;\n}\n\n.carousel-control-prev {\n  left: 0;\n}\n\n.carousel-control-next {\n  right: 0;\n}\n\n.carousel-control-prev-icon,\n.carousel-control-next-icon {\n  display: inline-block;\n  width: 2rem;\n  height: 2rem;\n  background-repeat: no-repeat;\n  background-position: 50%;\n  background-size: 100% 100%;\n}\n\n/* rtl:options: {\n  \"autoRename\": true,\n  \"stringMap\":[ {\n    \"name\"    : \"prev-next\",\n    \"search\"  : \"prev\",\n    \"replace\" : \"next\"\n  } ]\n} */\n.carousel-control-prev-icon {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0z'/%3e%3c/svg%3e\");\n}\n\n.carousel-control-next-icon {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e\");\n}\n\n.carousel-indicators {\n  position: absolute;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 2;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-pack: center;\n  justify-content: center;\n  padding: 0;\n  margin-right: 15%;\n  margin-bottom: 1rem;\n  margin-left: 15%;\n  list-style: none;\n}\n\n.carousel-indicators [data-bs-target] {\n  box-sizing: content-box;\n  -ms-flex: 0 1 auto;\n  flex: 0 1 auto;\n  width: 30px;\n  height: 3px;\n  padding: 0;\n  margin-right: 3px;\n  margin-left: 3px;\n  text-indent: -999px;\n  cursor: pointer;\n  background-color: #fff;\n  background-clip: padding-box;\n  border: 0;\n  border-top: 10px solid transparent;\n  border-bottom: 10px solid transparent;\n  opacity: 0.5;\n  transition: opacity 0.6s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .carousel-indicators [data-bs-target] {\n    transition: none;\n  }\n}\n\n.carousel-indicators .active {\n  opacity: 1;\n}\n\n.carousel-caption {\n  position: absolute;\n  right: 15%;\n  bottom: 1.25rem;\n  left: 15%;\n  padding-top: 1.25rem;\n  padding-bottom: 1.25rem;\n  color: #fff;\n  text-align: center;\n}\n\n.carousel-dark .carousel-control-prev-icon,\n.carousel-dark .carousel-control-next-icon {\n  -webkit-filter: invert(1) grayscale(100);\n  filter: invert(1) grayscale(100);\n}\n\n.carousel-dark .carousel-indicators [data-bs-target] {\n  background-color: #000;\n}\n\n.carousel-dark .carousel-caption {\n  color: #000;\n}\n\n@-webkit-keyframes spinner-border {\n  to {\n    -webkit-transform: rotate(360deg) /* rtl:ignore */;\n    transform: rotate(360deg) /* rtl:ignore */;\n  }\n}\n\n@keyframes spinner-border {\n  to {\n    -webkit-transform: rotate(360deg) /* rtl:ignore */;\n    transform: rotate(360deg) /* rtl:ignore */;\n  }\n}\n\n.spinner-border {\n  display: inline-block;\n  width: 2rem;\n  height: 2rem;\n  vertical-align: -0.125em;\n  border: 0.25em solid currentColor;\n  border-right-color: transparent;\n  border-radius: 50%;\n  -webkit-animation: 0.75s linear infinite spinner-border;\n  animation: 0.75s linear infinite spinner-border;\n}\n\n.spinner-border-sm {\n  width: 1rem;\n  height: 1rem;\n  border-width: 0.2em;\n}\n\n@-webkit-keyframes spinner-grow {\n  0% {\n    -webkit-transform: scale(0);\n    transform: scale(0);\n  }\n  50% {\n    opacity: 1;\n    -webkit-transform: none;\n    transform: none;\n  }\n}\n\n@keyframes spinner-grow {\n  0% {\n    -webkit-transform: scale(0);\n    transform: scale(0);\n  }\n  50% {\n    opacity: 1;\n    -webkit-transform: none;\n    transform: none;\n  }\n}\n\n.spinner-grow {\n  display: inline-block;\n  width: 2rem;\n  height: 2rem;\n  vertical-align: -0.125em;\n  background-color: currentColor;\n  border-radius: 50%;\n  opacity: 0;\n  -webkit-animation: 0.75s linear infinite spinner-grow;\n  animation: 0.75s linear infinite spinner-grow;\n}\n\n.spinner-grow-sm {\n  width: 1rem;\n  height: 1rem;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .spinner-border,\n  .spinner-grow {\n    -webkit-animation-duration: 1.5s;\n    animation-duration: 1.5s;\n  }\n}\n\n.offcanvas {\n  position: fixed;\n  bottom: 0;\n  z-index: 1045;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  max-width: 100%;\n  visibility: hidden;\n  background-color: #fff;\n  background-clip: padding-box;\n  outline: 0;\n  transition: -webkit-transform 0.3s ease-in-out;\n  transition: transform 0.3s ease-in-out;\n  transition: transform 0.3s ease-in-out, -webkit-transform 0.3s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .offcanvas {\n    transition: none;\n  }\n}\n\n.offcanvas-backdrop {\n  position: fixed;\n  top: 0;\n  left: 0;\n  z-index: 1040;\n  width: 100vw;\n  height: 100vh;\n  background-color: #000;\n}\n\n.offcanvas-backdrop.fade {\n  opacity: 0;\n}\n\n.offcanvas-backdrop.show {\n  opacity: 0.5;\n}\n\n.offcanvas-header {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-align: center;\n  align-items: center;\n  -ms-flex-pack: justify;\n  justify-content: space-between;\n  padding: 1rem 1rem;\n}\n\n.offcanvas-header .btn-close {\n  padding: 0.5rem 0.5rem;\n  margin-top: -0.5rem;\n  margin-right: -0.5rem;\n  margin-bottom: -0.5rem;\n}\n\n.offcanvas-title {\n  margin-bottom: 0;\n  line-height: 1.5;\n}\n\n.offcanvas-body {\n  -ms-flex-positive: 1;\n  flex-grow: 1;\n  padding: 1rem 1rem;\n  overflow-y: auto;\n}\n\n.offcanvas-start {\n  top: 0;\n  left: 0;\n  width: 400px;\n  border-right: 1px solid rgba(0, 0, 0, 0.2);\n  -webkit-transform: translateX(-100%);\n  transform: translateX(-100%);\n}\n\n.offcanvas-end {\n  top: 0;\n  right: 0;\n  width: 400px;\n  border-left: 1px solid rgba(0, 0, 0, 0.2);\n  -webkit-transform: translateX(100%);\n  transform: translateX(100%);\n}\n\n.offcanvas-top {\n  top: 0;\n  right: 0;\n  left: 0;\n  height: 30vh;\n  max-height: 100%;\n  border-bottom: 1px solid rgba(0, 0, 0, 0.2);\n  -webkit-transform: translateY(-100%);\n  transform: translateY(-100%);\n}\n\n.offcanvas-bottom {\n  right: 0;\n  left: 0;\n  height: 30vh;\n  max-height: 100%;\n  border-top: 1px solid rgba(0, 0, 0, 0.2);\n  -webkit-transform: translateY(100%);\n  transform: translateY(100%);\n}\n\n.offcanvas.show {\n  -webkit-transform: none;\n  transform: none;\n}\n\n.placeholder {\n  display: inline-block;\n  min-height: 1em;\n  vertical-align: middle;\n  cursor: wait;\n  background-color: currentColor;\n  opacity: 0.5;\n}\n\n.placeholder.btn::before {\n  display: inline-block;\n  content: \"\";\n}\n\n.placeholder-xs {\n  min-height: .6em;\n}\n\n.placeholder-sm {\n  min-height: .8em;\n}\n\n.placeholder-lg {\n  min-height: 1.2em;\n}\n\n.placeholder-glow .placeholder {\n  -webkit-animation: placeholder-glow 2s ease-in-out infinite;\n  animation: placeholder-glow 2s ease-in-out infinite;\n}\n\n@-webkit-keyframes placeholder-glow {\n  50% {\n    opacity: 0.2;\n  }\n}\n\n@keyframes placeholder-glow {\n  50% {\n    opacity: 0.2;\n  }\n}\n\n.placeholder-wave {\n  -webkit-mask-image: linear-gradient(130deg, #000 55%, rgba(0, 0, 0, 0.8) 75%, #000 95%);\n  mask-image: linear-gradient(130deg, #000 55%, rgba(0, 0, 0, 0.8) 75%, #000 95%);\n  -webkit-mask-size: 200% 100%;\n  mask-size: 200% 100%;\n  -webkit-animation: placeholder-wave 2s linear infinite;\n  animation: placeholder-wave 2s linear infinite;\n}\n\n@-webkit-keyframes placeholder-wave {\n  100% {\n    -webkit-mask-position: -200% 0%;\n    mask-position: -200% 0%;\n  }\n}\n\n@keyframes placeholder-wave {\n  100% {\n    -webkit-mask-position: -200% 0%;\n    mask-position: -200% 0%;\n  }\n}\n\n.clearfix::after {\n  display: block;\n  clear: both;\n  content: \"\";\n}\n\n.link-primary {\n  color: #4582ec;\n}\n\n.link-primary:hover, .link-primary:focus {\n  color: #3768bd;\n}\n\n.link-secondary {\n  color: #adb5bd;\n}\n\n.link-secondary:hover, .link-secondary:focus {\n  color: #8a9197;\n}\n\n.link-success {\n  color: #02b875;\n}\n\n.link-success:hover, .link-success:focus {\n  color: #02935e;\n}\n\n.link-info {\n  color: #17a2b8;\n}\n\n.link-info:hover, .link-info:focus {\n  color: #128293;\n}\n\n.link-warning {\n  color: #f0ad4e;\n}\n\n.link-warning:hover, .link-warning:focus {\n  color: #c08a3e;\n}\n\n.link-danger {\n  color: #d9534f;\n}\n\n.link-danger:hover, .link-danger:focus {\n  color: #ae423f;\n}\n\n.link-light {\n  color: #f8f9fa;\n}\n\n.link-light:hover, .link-light:focus {\n  color: #f9fafb;\n}\n\n.link-dark {\n  color: #343a40;\n}\n\n.link-dark:hover, .link-dark:focus {\n  color: #2a2e33;\n}\n\n.ratio {\n  position: relative;\n  width: 100%;\n}\n\n.ratio::before {\n  display: block;\n  padding-top: var(--bs-aspect-ratio);\n  content: \"\";\n}\n\n.ratio > * {\n  position: absolute;\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n}\n\n.ratio-1x1 {\n  --bs-aspect-ratio: 100%;\n}\n\n.ratio-4x3 {\n  --bs-aspect-ratio: calc(3 / 4 * 100%);\n}\n\n.ratio-16x9 {\n  --bs-aspect-ratio: calc(9 / 16 * 100%);\n}\n\n.ratio-21x9 {\n  --bs-aspect-ratio: calc(9 / 21 * 100%);\n}\n\n.fixed-top {\n  position: fixed;\n  top: 0;\n  right: 0;\n  left: 0;\n  z-index: 1030;\n}\n\n.fixed-bottom {\n  position: fixed;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 1030;\n}\n\n.sticky-top {\n  position: -webkit-sticky;\n  position: sticky;\n  top: 0;\n  z-index: 1020;\n}\n\n@media (min-width: 576px) {\n  .sticky-sm-top {\n    position: -webkit-sticky;\n    position: sticky;\n    top: 0;\n    z-index: 1020;\n  }\n}\n\n@media (min-width: 768px) {\n  .sticky-md-top {\n    position: -webkit-sticky;\n    position: sticky;\n    top: 0;\n    z-index: 1020;\n  }\n}\n\n@media (min-width: 992px) {\n  .sticky-lg-top {\n    position: -webkit-sticky;\n    position: sticky;\n    top: 0;\n    z-index: 1020;\n  }\n}\n\n@media (min-width: 1200px) {\n  .sticky-xl-top {\n    position: -webkit-sticky;\n    position: sticky;\n    top: 0;\n    z-index: 1020;\n  }\n}\n\n@media (min-width: 1400px) {\n  .sticky-xxl-top {\n    position: -webkit-sticky;\n    position: sticky;\n    top: 0;\n    z-index: 1020;\n  }\n}\n\n.hstack {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-direction: row;\n  flex-direction: row;\n  -ms-flex-align: center;\n  align-items: center;\n  -ms-flex-item-align: stretch;\n  align-self: stretch;\n}\n\n.vstack {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex: 1 1 auto;\n  flex: 1 1 auto;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  -ms-flex-item-align: stretch;\n  align-self: stretch;\n}\n\n.visually-hidden,\n.visually-hidden-focusable:not(:focus):not(:focus-within) {\n  position: absolute !important;\n  width: 1px !important;\n  height: 1px !important;\n  padding: 0 !important;\n  margin: -1px !important;\n  overflow: hidden !important;\n  clip: rect(0, 0, 0, 0) !important;\n  white-space: nowrap !important;\n  border: 0 !important;\n}\n\n.stretched-link::after {\n  position: absolute;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 1;\n  content: \"\";\n}\n\n.text-truncate {\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n}\n\n.vr {\n  display: inline-block;\n  -ms-flex-item-align: stretch;\n  align-self: stretch;\n  width: 1px;\n  min-height: 1em;\n  background-color: currentColor;\n  opacity: 0.25;\n}\n\n.align-baseline {\n  vertical-align: baseline !important;\n}\n\n.align-top {\n  vertical-align: top !important;\n}\n\n.align-middle {\n  vertical-align: middle !important;\n}\n\n.align-bottom {\n  vertical-align: bottom !important;\n}\n\n.align-text-bottom {\n  vertical-align: text-bottom !important;\n}\n\n.align-text-top {\n  vertical-align: text-top !important;\n}\n\n.float-start {\n  float: left !important;\n}\n\n.float-end {\n  float: right !important;\n}\n\n.float-none {\n  float: none !important;\n}\n\n.opacity-0 {\n  opacity: 0 !important;\n}\n\n.opacity-25 {\n  opacity: 0.25 !important;\n}\n\n.opacity-50 {\n  opacity: 0.5 !important;\n}\n\n.opacity-75 {\n  opacity: 0.75 !important;\n}\n\n.opacity-100 {\n  opacity: 1 !important;\n}\n\n.overflow-auto {\n  overflow: auto !important;\n}\n\n.overflow-hidden {\n  overflow: hidden !important;\n}\n\n.overflow-visible {\n  overflow: visible !important;\n}\n\n.overflow-scroll {\n  overflow: scroll !important;\n}\n\n.d-inline {\n  display: inline !important;\n}\n\n.d-inline-block {\n  display: inline-block !important;\n}\n\n.d-block {\n  display: block !important;\n}\n\n.d-grid {\n  display: grid !important;\n}\n\n.d-table {\n  display: table !important;\n}\n\n.d-table-row {\n  display: table-row !important;\n}\n\n.d-table-cell {\n  display: table-cell !important;\n}\n\n.d-flex {\n  display: -ms-flexbox !important;\n  display: flex !important;\n}\n\n.d-inline-flex {\n  display: -ms-inline-flexbox !important;\n  display: inline-flex !important;\n}\n\n.d-none {\n  display: none !important;\n}\n\n.shadow {\n  box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15) !important;\n}\n\n.shadow-sm {\n  box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075) !important;\n}\n\n.shadow-lg {\n  box-shadow: 0 1rem 3rem rgba(0, 0, 0, 0.175) !important;\n}\n\n.shadow-none {\n  box-shadow: none !important;\n}\n\n.position-static {\n  position: static !important;\n}\n\n.position-relative {\n  position: relative !important;\n}\n\n.position-absolute {\n  position: absolute !important;\n}\n\n.position-fixed {\n  position: fixed !important;\n}\n\n.position-sticky {\n  position: -webkit-sticky !important;\n  position: sticky !important;\n}\n\n.top-0 {\n  top: 0 !important;\n}\n\n.top-50 {\n  top: 50% !important;\n}\n\n.top-100 {\n  top: 100% !important;\n}\n\n.bottom-0 {\n  bottom: 0 !important;\n}\n\n.bottom-50 {\n  bottom: 50% !important;\n}\n\n.bottom-100 {\n  bottom: 100% !important;\n}\n\n.start-0 {\n  left: 0 !important;\n}\n\n.start-50 {\n  left: 50% !important;\n}\n\n.start-100 {\n  left: 100% !important;\n}\n\n.end-0 {\n  right: 0 !important;\n}\n\n.end-50 {\n  right: 50% !important;\n}\n\n.end-100 {\n  right: 100% !important;\n}\n\n.translate-middle {\n  -webkit-transform: translate(-50%, -50%) !important;\n  transform: translate(-50%, -50%) !important;\n}\n\n.translate-middle-x {\n  -webkit-transform: translateX(-50%) !important;\n  transform: translateX(-50%) !important;\n}\n\n.translate-middle-y {\n  -webkit-transform: translateY(-50%) !important;\n  transform: translateY(-50%) !important;\n}\n\n.border {\n  border: 1px solid #ddd !important;\n}\n\n.border-0 {\n  border: 0 !important;\n}\n\n.border-top {\n  border-top: 1px solid #ddd !important;\n}\n\n.border-top-0 {\n  border-top: 0 !important;\n}\n\n.border-end {\n  border-right: 1px solid #ddd !important;\n}\n\n.border-end-0 {\n  border-right: 0 !important;\n}\n\n.border-bottom {\n  border-bottom: 1px solid #ddd !important;\n}\n\n.border-bottom-0 {\n  border-bottom: 0 !important;\n}\n\n.border-start {\n  border-left: 1px solid #ddd !important;\n}\n\n.border-start-0 {\n  border-left: 0 !important;\n}\n\n.border-primary {\n  border-color: #4582ec !important;\n}\n\n.border-secondary {\n  border-color: #adb5bd !important;\n}\n\n.border-success {\n  border-color: #02b875 !important;\n}\n\n.border-info {\n  border-color: #17a2b8 !important;\n}\n\n.border-warning {\n  border-color: #f0ad4e !important;\n}\n\n.border-danger {\n  border-color: #d9534f !important;\n}\n\n.border-light {\n  border-color: #f8f9fa !important;\n}\n\n.border-dark {\n  border-color: #343a40 !important;\n}\n\n.border-white {\n  border-color: #fff !important;\n}\n\n.border-1 {\n  border-width: 1px !important;\n}\n\n.border-2 {\n  border-width: 2px !important;\n}\n\n.border-3 {\n  border-width: 3px !important;\n}\n\n.border-4 {\n  border-width: 4px !important;\n}\n\n.border-5 {\n  border-width: 5px !important;\n}\n\n.w-25 {\n  width: 25% !important;\n}\n\n.w-50 {\n  width: 50% !important;\n}\n\n.w-75 {\n  width: 75% !important;\n}\n\n.w-100 {\n  width: 100% !important;\n}\n\n.w-auto {\n  width: auto !important;\n}\n\n.mw-100 {\n  max-width: 100% !important;\n}\n\n.vw-100 {\n  width: 100vw !important;\n}\n\n.min-vw-100 {\n  min-width: 100vw !important;\n}\n\n.h-25 {\n  height: 25% !important;\n}\n\n.h-50 {\n  height: 50% !important;\n}\n\n.h-75 {\n  height: 75% !important;\n}\n\n.h-100 {\n  height: 100% !important;\n}\n\n.h-auto {\n  height: auto !important;\n}\n\n.mh-100 {\n  max-height: 100% !important;\n}\n\n.vh-100 {\n  height: 100vh !important;\n}\n\n.min-vh-100 {\n  min-height: 100vh !important;\n}\n\n.flex-fill {\n  -ms-flex: 1 1 auto !important;\n  flex: 1 1 auto !important;\n}\n\n.flex-row {\n  -ms-flex-direction: row !important;\n  flex-direction: row !important;\n}\n\n.flex-column {\n  -ms-flex-direction: column !important;\n  flex-direction: column !important;\n}\n\n.flex-row-reverse {\n  -ms-flex-direction: row-reverse !important;\n  flex-direction: row-reverse !important;\n}\n\n.flex-column-reverse {\n  -ms-flex-direction: column-reverse !important;\n  flex-direction: column-reverse !important;\n}\n\n.flex-grow-0 {\n  -ms-flex-positive: 0 !important;\n  flex-grow: 0 !important;\n}\n\n.flex-grow-1 {\n  -ms-flex-positive: 1 !important;\n  flex-grow: 1 !important;\n}\n\n.flex-shrink-0 {\n  -ms-flex-negative: 0 !important;\n  flex-shrink: 0 !important;\n}\n\n.flex-shrink-1 {\n  -ms-flex-negative: 1 !important;\n  flex-shrink: 1 !important;\n}\n\n.flex-wrap {\n  -ms-flex-wrap: wrap !important;\n  flex-wrap: wrap !important;\n}\n\n.flex-nowrap {\n  -ms-flex-wrap: nowrap !important;\n  flex-wrap: nowrap !important;\n}\n\n.flex-wrap-reverse {\n  -ms-flex-wrap: wrap-reverse !important;\n  flex-wrap: wrap-reverse !important;\n}\n\n.gap-0 {\n  gap: 0 !important;\n}\n\n.gap-1 {\n  gap: 0.25rem !important;\n}\n\n.gap-2 {\n  gap: 0.5rem !important;\n}\n\n.gap-3 {\n  gap: 1rem !important;\n}\n\n.gap-4 {\n  gap: 1.5rem !important;\n}\n\n.gap-5 {\n  gap: 3rem !important;\n}\n\n.justify-content-start {\n  -ms-flex-pack: start !important;\n  justify-content: flex-start !important;\n}\n\n.justify-content-end {\n  -ms-flex-pack: end !important;\n  justify-content: flex-end !important;\n}\n\n.justify-content-center {\n  -ms-flex-pack: center !important;\n  justify-content: center !important;\n}\n\n.justify-content-between {\n  -ms-flex-pack: justify !important;\n  justify-content: space-between !important;\n}\n\n.justify-content-around {\n  -ms-flex-pack: distribute !important;\n  justify-content: space-around !important;\n}\n\n.justify-content-evenly {\n  -ms-flex-pack: space-evenly !important;\n  justify-content: space-evenly !important;\n}\n\n.align-items-start {\n  -ms-flex-align: start !important;\n  align-items: flex-start !important;\n}\n\n.align-items-end {\n  -ms-flex-align: end !important;\n  align-items: flex-end !important;\n}\n\n.align-items-center {\n  -ms-flex-align: center !important;\n  align-items: center !important;\n}\n\n.align-items-baseline {\n  -ms-flex-align: baseline !important;\n  align-items: baseline !important;\n}\n\n.align-items-stretch {\n  -ms-flex-align: stretch !important;\n  align-items: stretch !important;\n}\n\n.align-content-start {\n  -ms-flex-line-pack: start !important;\n  align-content: flex-start !important;\n}\n\n.align-content-end {\n  -ms-flex-line-pack: end !important;\n  align-content: flex-end !important;\n}\n\n.align-content-center {\n  -ms-flex-line-pack: center !important;\n  align-content: center !important;\n}\n\n.align-content-between {\n  -ms-flex-line-pack: justify !important;\n  align-content: space-between !important;\n}\n\n.align-content-around {\n  -ms-flex-line-pack: distribute !important;\n  align-content: space-around !important;\n}\n\n.align-content-stretch {\n  -ms-flex-line-pack: stretch !important;\n  align-content: stretch !important;\n}\n\n.align-self-auto {\n  -ms-flex-item-align: auto !important;\n  align-self: auto !important;\n}\n\n.align-self-start {\n  -ms-flex-item-align: start !important;\n  align-self: flex-start !important;\n}\n\n.align-self-end {\n  -ms-flex-item-align: end !important;\n  align-self: flex-end !important;\n}\n\n.align-self-center {\n  -ms-flex-item-align: center !important;\n  align-self: center !important;\n}\n\n.align-self-baseline {\n  -ms-flex-item-align: baseline !important;\n  align-self: baseline !important;\n}\n\n.align-self-stretch {\n  -ms-flex-item-align: stretch !important;\n  align-self: stretch !important;\n}\n\n.order-first {\n  -ms-flex-order: -1 !important;\n  order: -1 !important;\n}\n\n.order-0 {\n  -ms-flex-order: 0 !important;\n  order: 0 !important;\n}\n\n.order-1 {\n  -ms-flex-order: 1 !important;\n  order: 1 !important;\n}\n\n.order-2 {\n  -ms-flex-order: 2 !important;\n  order: 2 !important;\n}\n\n.order-3 {\n  -ms-flex-order: 3 !important;\n  order: 3 !important;\n}\n\n.order-4 {\n  -ms-flex-order: 4 !important;\n  order: 4 !important;\n}\n\n.order-5 {\n  -ms-flex-order: 5 !important;\n  order: 5 !important;\n}\n\n.order-last {\n  -ms-flex-order: 6 !important;\n  order: 6 !important;\n}\n\n.m-0 {\n  margin: 0 !important;\n}\n\n.m-1 {\n  margin: 0.25rem !important;\n}\n\n.m-2 {\n  margin: 0.5rem !important;\n}\n\n.m-3 {\n  margin: 1rem !important;\n}\n\n.m-4 {\n  margin: 1.5rem !important;\n}\n\n.m-5 {\n  margin: 3rem !important;\n}\n\n.m-auto {\n  margin: auto !important;\n}\n\n.mx-0 {\n  margin-right: 0 !important;\n  margin-left: 0 !important;\n}\n\n.mx-1 {\n  margin-right: 0.25rem !important;\n  margin-left: 0.25rem !important;\n}\n\n.mx-2 {\n  margin-right: 0.5rem !important;\n  margin-left: 0.5rem !important;\n}\n\n.mx-3 {\n  margin-right: 1rem !important;\n  margin-left: 1rem !important;\n}\n\n.mx-4 {\n  margin-right: 1.5rem !important;\n  margin-left: 1.5rem !important;\n}\n\n.mx-5 {\n  margin-right: 3rem !important;\n  margin-left: 3rem !important;\n}\n\n.mx-auto {\n  margin-right: auto !important;\n  margin-left: auto !important;\n}\n\n.my-0 {\n  margin-top: 0 !important;\n  margin-bottom: 0 !important;\n}\n\n.my-1 {\n  margin-top: 0.25rem !important;\n  margin-bottom: 0.25rem !important;\n}\n\n.my-2 {\n  margin-top: 0.5rem !important;\n  margin-bottom: 0.5rem !important;\n}\n\n.my-3 {\n  margin-top: 1rem !important;\n  margin-bottom: 1rem !important;\n}\n\n.my-4 {\n  margin-top: 1.5rem !important;\n  margin-bottom: 1.5rem !important;\n}\n\n.my-5 {\n  margin-top: 3rem !important;\n  margin-bottom: 3rem !important;\n}\n\n.my-auto {\n  margin-top: auto !important;\n  margin-bottom: auto !important;\n}\n\n.mt-0 {\n  margin-top: 0 !important;\n}\n\n.mt-1 {\n  margin-top: 0.25rem !important;\n}\n\n.mt-2 {\n  margin-top: 0.5rem !important;\n}\n\n.mt-3 {\n  margin-top: 1rem !important;\n}\n\n.mt-4 {\n  margin-top: 1.5rem !important;\n}\n\n.mt-5 {\n  margin-top: 3rem !important;\n}\n\n.mt-auto {\n  margin-top: auto !important;\n}\n\n.me-0 {\n  margin-right: 0 !important;\n}\n\n.me-1 {\n  margin-right: 0.25rem !important;\n}\n\n.me-2 {\n  margin-right: 0.5rem !important;\n}\n\n.me-3 {\n  margin-right: 1rem !important;\n}\n\n.me-4 {\n  margin-right: 1.5rem !important;\n}\n\n.me-5 {\n  margin-right: 3rem !important;\n}\n\n.me-auto {\n  margin-right: auto !important;\n}\n\n.mb-0 {\n  margin-bottom: 0 !important;\n}\n\n.mb-1 {\n  margin-bottom: 0.25rem !important;\n}\n\n.mb-2 {\n  margin-bottom: 0.5rem !important;\n}\n\n.mb-3 {\n  margin-bottom: 1rem !important;\n}\n\n.mb-4 {\n  margin-bottom: 1.5rem !important;\n}\n\n.mb-5 {\n  margin-bottom: 3rem !important;\n}\n\n.mb-auto {\n  margin-bottom: auto !important;\n}\n\n.ms-0 {\n  margin-left: 0 !important;\n}\n\n.ms-1 {\n  margin-left: 0.25rem !important;\n}\n\n.ms-2 {\n  margin-left: 0.5rem !important;\n}\n\n.ms-3 {\n  margin-left: 1rem !important;\n}\n\n.ms-4 {\n  margin-left: 1.5rem !important;\n}\n\n.ms-5 {\n  margin-left: 3rem !important;\n}\n\n.ms-auto {\n  margin-left: auto !important;\n}\n\n.p-0 {\n  padding: 0 !important;\n}\n\n.p-1 {\n  padding: 0.25rem !important;\n}\n\n.p-2 {\n  padding: 0.5rem !important;\n}\n\n.p-3 {\n  padding: 1rem !important;\n}\n\n.p-4 {\n  padding: 1.5rem !important;\n}\n\n.p-5 {\n  padding: 3rem !important;\n}\n\n.px-0 {\n  padding-right: 0 !important;\n  padding-left: 0 !important;\n}\n\n.px-1 {\n  padding-right: 0.25rem !important;\n  padding-left: 0.25rem !important;\n}\n\n.px-2 {\n  padding-right: 0.5rem !important;\n  padding-left: 0.5rem !important;\n}\n\n.px-3 {\n  padding-right: 1rem !important;\n  padding-left: 1rem !important;\n}\n\n.px-4 {\n  padding-right: 1.5rem !important;\n  padding-left: 1.5rem !important;\n}\n\n.px-5 {\n  padding-right: 3rem !important;\n  padding-left: 3rem !important;\n}\n\n.py-0 {\n  padding-top: 0 !important;\n  padding-bottom: 0 !important;\n}\n\n.py-1 {\n  padding-top: 0.25rem !important;\n  padding-bottom: 0.25rem !important;\n}\n\n.py-2 {\n  padding-top: 0.5rem !important;\n  padding-bottom: 0.5rem !important;\n}\n\n.py-3 {\n  padding-top: 1rem !important;\n  padding-bottom: 1rem !important;\n}\n\n.py-4 {\n  padding-top: 1.5rem !important;\n  padding-bottom: 1.5rem !important;\n}\n\n.py-5 {\n  padding-top: 3rem !important;\n  padding-bottom: 3rem !important;\n}\n\n.pt-0 {\n  padding-top: 0 !important;\n}\n\n.pt-1 {\n  padding-top: 0.25rem !important;\n}\n\n.pt-2 {\n  padding-top: 0.5rem !important;\n}\n\n.pt-3 {\n  padding-top: 1rem !important;\n}\n\n.pt-4 {\n  padding-top: 1.5rem !important;\n}\n\n.pt-5 {\n  padding-top: 3rem !important;\n}\n\n.pe-0 {\n  padding-right: 0 !important;\n}\n\n.pe-1 {\n  padding-right: 0.25rem !important;\n}\n\n.pe-2 {\n  padding-right: 0.5rem !important;\n}\n\n.pe-3 {\n  padding-right: 1rem !important;\n}\n\n.pe-4 {\n  padding-right: 1.5rem !important;\n}\n\n.pe-5 {\n  padding-right: 3rem !important;\n}\n\n.pb-0 {\n  padding-bottom: 0 !important;\n}\n\n.pb-1 {\n  padding-bottom: 0.25rem !important;\n}\n\n.pb-2 {\n  padding-bottom: 0.5rem !important;\n}\n\n.pb-3 {\n  padding-bottom: 1rem !important;\n}\n\n.pb-4 {\n  padding-bottom: 1.5rem !important;\n}\n\n.pb-5 {\n  padding-bottom: 3rem !important;\n}\n\n.ps-0 {\n  padding-left: 0 !important;\n}\n\n.ps-1 {\n  padding-left: 0.25rem !important;\n}\n\n.ps-2 {\n  padding-left: 0.5rem !important;\n}\n\n.ps-3 {\n  padding-left: 1rem !important;\n}\n\n.ps-4 {\n  padding-left: 1.5rem !important;\n}\n\n.ps-5 {\n  padding-left: 3rem !important;\n}\n\n.font-monospace {\n  font-family: var(--bs-font-monospace) !important;\n}\n\n.fs-1 {\n  font-size: calc(1.4rem + 1.8vw) !important;\n}\n\n.fs-2 {\n  font-size: calc(1.345rem + 1.14vw) !important;\n}\n\n.fs-3 {\n  font-size: calc(1.3175rem + 0.81vw) !important;\n}\n\n.fs-4 {\n  font-size: calc(1.29rem + 0.48vw) !important;\n}\n\n.fs-5 {\n  font-size: calc(1.2625rem + 0.15vw) !important;\n}\n\n.fs-6 {\n  font-size: 1.1rem !important;\n}\n\n.fst-italic {\n  font-style: italic !important;\n}\n\n.fst-normal {\n  font-style: normal !important;\n}\n\n.fw-light {\n  font-weight: 300 !important;\n}\n\n.fw-lighter {\n  font-weight: lighter !important;\n}\n\n.fw-normal {\n  font-weight: 400 !important;\n}\n\n.fw-bold {\n  font-weight: 700 !important;\n}\n\n.fw-bolder {\n  font-weight: bolder !important;\n}\n\n.lh-1 {\n  line-height: 1 !important;\n}\n\n.lh-sm {\n  line-height: 1.25 !important;\n}\n\n.lh-base {\n  line-height: 1.5 !important;\n}\n\n.lh-lg {\n  line-height: 2 !important;\n}\n\n.text-start {\n  text-align: left !important;\n}\n\n.text-end {\n  text-align: right !important;\n}\n\n.text-center {\n  text-align: center !important;\n}\n\n.text-decoration-none {\n  text-decoration: none !important;\n}\n\n.text-decoration-underline {\n  text-decoration: underline !important;\n}\n\n.text-decoration-line-through {\n  text-decoration: line-through !important;\n}\n\n.text-lowercase {\n  text-transform: lowercase !important;\n}\n\n.text-uppercase {\n  text-transform: uppercase !important;\n}\n\n.text-capitalize {\n  text-transform: capitalize !important;\n}\n\n.text-wrap {\n  white-space: normal !important;\n}\n\n.text-nowrap {\n  white-space: nowrap !important;\n}\n\n/* rtl:begin:remove */\n.text-break {\n  word-wrap: break-word !important;\n  word-break: break-word !important;\n}\n\n/* rtl:end:remove */\n.text-primary {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-primary-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-secondary {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-secondary-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-success {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-success-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-info {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-info-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-warning {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-warning-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-danger {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-danger-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-light {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-light-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-dark {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-dark-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-black {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-black-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-white {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-white-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-body {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-body-color-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-muted {\n  --bs-text-opacity: 1;\n  color: #868e96 !important;\n}\n\n.text-black-50 {\n  --bs-text-opacity: 1;\n  color: rgba(0, 0, 0, 0.5) !important;\n}\n\n.text-white-50 {\n  --bs-text-opacity: 1;\n  color: rgba(255, 255, 255, 0.5) !important;\n}\n\n.text-reset {\n  --bs-text-opacity: 1;\n  color: inherit !important;\n}\n\n.text-opacity-25 {\n  --bs-text-opacity: 0.25;\n}\n\n.text-opacity-50 {\n  --bs-text-opacity: 0.5;\n}\n\n.text-opacity-75 {\n  --bs-text-opacity: 0.75;\n}\n\n.text-opacity-100 {\n  --bs-text-opacity: 1;\n}\n\n.bg-primary {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-primary-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-secondary {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-secondary-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-success {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-success-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-info {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-info-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-warning {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-warning-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-danger {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-danger-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-light {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-light-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-dark {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-dark-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-black {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-black-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-white {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-white-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-body {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-body-bg-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-transparent {\n  --bs-bg-opacity: 1;\n  background-color: transparent !important;\n}\n\n.bg-opacity-10 {\n  --bs-bg-opacity: 0.1;\n}\n\n.bg-opacity-25 {\n  --bs-bg-opacity: 0.25;\n}\n\n.bg-opacity-50 {\n  --bs-bg-opacity: 0.5;\n}\n\n.bg-opacity-75 {\n  --bs-bg-opacity: 0.75;\n}\n\n.bg-opacity-100 {\n  --bs-bg-opacity: 1;\n}\n\n.bg-gradient {\n  background-image: var(--bs-gradient) !important;\n}\n\n.user-select-all {\n  -webkit-user-select: all !important;\n  -moz-user-select: all !important;\n  user-select: all !important;\n}\n\n.user-select-auto {\n  -webkit-user-select: auto !important;\n  -moz-user-select: auto !important;\n  -ms-user-select: auto !important;\n  user-select: auto !important;\n}\n\n.user-select-none {\n  -webkit-user-select: none !important;\n  -moz-user-select: none !important;\n  -ms-user-select: none !important;\n  user-select: none !important;\n}\n\n.pe-none {\n  pointer-events: none !important;\n}\n\n.pe-auto {\n  pointer-events: auto !important;\n}\n\n.rounded {\n  border-radius: 0.25rem !important;\n}\n\n.rounded-0 {\n  border-radius: 0 !important;\n}\n\n.rounded-1 {\n  border-radius: 0.2rem !important;\n}\n\n.rounded-2 {\n  border-radius: 0.25rem !important;\n}\n\n.rounded-3 {\n  border-radius: 0.3rem !important;\n}\n\n.rounded-circle {\n  border-radius: 50% !important;\n}\n\n.rounded-pill {\n  border-radius: 50rem !important;\n}\n\n.rounded-top {\n  border-top-left-radius: 0.25rem !important;\n  border-top-right-radius: 0.25rem !important;\n}\n\n.rounded-end {\n  border-top-right-radius: 0.25rem !important;\n  border-bottom-right-radius: 0.25rem !important;\n}\n\n.rounded-bottom {\n  border-bottom-right-radius: 0.25rem !important;\n  border-bottom-left-radius: 0.25rem !important;\n}\n\n.rounded-start {\n  border-bottom-left-radius: 0.25rem !important;\n  border-top-left-radius: 0.25rem !important;\n}\n\n.visible {\n  visibility: visible !important;\n}\n\n.invisible {\n  visibility: hidden !important;\n}\n\n@media (min-width: 576px) {\n  .float-sm-start {\n    float: left !important;\n  }\n  .float-sm-end {\n    float: right !important;\n  }\n  .float-sm-none {\n    float: none !important;\n  }\n  .d-sm-inline {\n    display: inline !important;\n  }\n  .d-sm-inline-block {\n    display: inline-block !important;\n  }\n  .d-sm-block {\n    display: block !important;\n  }\n  .d-sm-grid {\n    display: grid !important;\n  }\n  .d-sm-table {\n    display: table !important;\n  }\n  .d-sm-table-row {\n    display: table-row !important;\n  }\n  .d-sm-table-cell {\n    display: table-cell !important;\n  }\n  .d-sm-flex {\n    display: -ms-flexbox !important;\n    display: flex !important;\n  }\n  .d-sm-inline-flex {\n    display: -ms-inline-flexbox !important;\n    display: inline-flex !important;\n  }\n  .d-sm-none {\n    display: none !important;\n  }\n  .flex-sm-fill {\n    -ms-flex: 1 1 auto !important;\n    flex: 1 1 auto !important;\n  }\n  .flex-sm-row {\n    -ms-flex-direction: row !important;\n    flex-direction: row !important;\n  }\n  .flex-sm-column {\n    -ms-flex-direction: column !important;\n    flex-direction: column !important;\n  }\n  .flex-sm-row-reverse {\n    -ms-flex-direction: row-reverse !important;\n    flex-direction: row-reverse !important;\n  }\n  .flex-sm-column-reverse {\n    -ms-flex-direction: column-reverse !important;\n    flex-direction: column-reverse !important;\n  }\n  .flex-sm-grow-0 {\n    -ms-flex-positive: 0 !important;\n    flex-grow: 0 !important;\n  }\n  .flex-sm-grow-1 {\n    -ms-flex-positive: 1 !important;\n    flex-grow: 1 !important;\n  }\n  .flex-sm-shrink-0 {\n    -ms-flex-negative: 0 !important;\n    flex-shrink: 0 !important;\n  }\n  .flex-sm-shrink-1 {\n    -ms-flex-negative: 1 !important;\n    flex-shrink: 1 !important;\n  }\n  .flex-sm-wrap {\n    -ms-flex-wrap: wrap !important;\n    flex-wrap: wrap !important;\n  }\n  .flex-sm-nowrap {\n    -ms-flex-wrap: nowrap !important;\n    flex-wrap: nowrap !important;\n  }\n  .flex-sm-wrap-reverse {\n    -ms-flex-wrap: wrap-reverse !important;\n    flex-wrap: wrap-reverse !important;\n  }\n  .gap-sm-0 {\n    gap: 0 !important;\n  }\n  .gap-sm-1 {\n    gap: 0.25rem !important;\n  }\n  .gap-sm-2 {\n    gap: 0.5rem !important;\n  }\n  .gap-sm-3 {\n    gap: 1rem !important;\n  }\n  .gap-sm-4 {\n    gap: 1.5rem !important;\n  }\n  .gap-sm-5 {\n    gap: 3rem !important;\n  }\n  .justify-content-sm-start {\n    -ms-flex-pack: start !important;\n    justify-content: flex-start !important;\n  }\n  .justify-content-sm-end {\n    -ms-flex-pack: end !important;\n    justify-content: flex-end !important;\n  }\n  .justify-content-sm-center {\n    -ms-flex-pack: center !important;\n    justify-content: center !important;\n  }\n  .justify-content-sm-between {\n    -ms-flex-pack: justify !important;\n    justify-content: space-between !important;\n  }\n  .justify-content-sm-around {\n    -ms-flex-pack: distribute !important;\n    justify-content: space-around !important;\n  }\n  .justify-content-sm-evenly {\n    -ms-flex-pack: space-evenly !important;\n    justify-content: space-evenly !important;\n  }\n  .align-items-sm-start {\n    -ms-flex-align: start !important;\n    align-items: flex-start !important;\n  }\n  .align-items-sm-end {\n    -ms-flex-align: end !important;\n    align-items: flex-end !important;\n  }\n  .align-items-sm-center {\n    -ms-flex-align: center !important;\n    align-items: center !important;\n  }\n  .align-items-sm-baseline {\n    -ms-flex-align: baseline !important;\n    align-items: baseline !important;\n  }\n  .align-items-sm-stretch {\n    -ms-flex-align: stretch !important;\n    align-items: stretch !important;\n  }\n  .align-content-sm-start {\n    -ms-flex-line-pack: start !important;\n    align-content: flex-start !important;\n  }\n  .align-content-sm-end {\n    -ms-flex-line-pack: end !important;\n    align-content: flex-end !important;\n  }\n  .align-content-sm-center {\n    -ms-flex-line-pack: center !important;\n    align-content: center !important;\n  }\n  .align-content-sm-between {\n    -ms-flex-line-pack: justify !important;\n    align-content: space-between !important;\n  }\n  .align-content-sm-around {\n    -ms-flex-line-pack: distribute !important;\n    align-content: space-around !important;\n  }\n  .align-content-sm-stretch {\n    -ms-flex-line-pack: stretch !important;\n    align-content: stretch !important;\n  }\n  .align-self-sm-auto {\n    -ms-flex-item-align: auto !important;\n    align-self: auto !important;\n  }\n  .align-self-sm-start {\n    -ms-flex-item-align: start !important;\n    align-self: flex-start !important;\n  }\n  .align-self-sm-end {\n    -ms-flex-item-align: end !important;\n    align-self: flex-end !important;\n  }\n  .align-self-sm-center {\n    -ms-flex-item-align: center !important;\n    align-self: center !important;\n  }\n  .align-self-sm-baseline {\n    -ms-flex-item-align: baseline !important;\n    align-self: baseline !important;\n  }\n  .align-self-sm-stretch {\n    -ms-flex-item-align: stretch !important;\n    align-self: stretch !important;\n  }\n  .order-sm-first {\n    -ms-flex-order: -1 !important;\n    order: -1 !important;\n  }\n  .order-sm-0 {\n    -ms-flex-order: 0 !important;\n    order: 0 !important;\n  }\n  .order-sm-1 {\n    -ms-flex-order: 1 !important;\n    order: 1 !important;\n  }\n  .order-sm-2 {\n    -ms-flex-order: 2 !important;\n    order: 2 !important;\n  }\n  .order-sm-3 {\n    -ms-flex-order: 3 !important;\n    order: 3 !important;\n  }\n  .order-sm-4 {\n    -ms-flex-order: 4 !important;\n    order: 4 !important;\n  }\n  .order-sm-5 {\n    -ms-flex-order: 5 !important;\n    order: 5 !important;\n  }\n  .order-sm-last {\n    -ms-flex-order: 6 !important;\n    order: 6 !important;\n  }\n  .m-sm-0 {\n    margin: 0 !important;\n  }\n  .m-sm-1 {\n    margin: 0.25rem !important;\n  }\n  .m-sm-2 {\n    margin: 0.5rem !important;\n  }\n  .m-sm-3 {\n    margin: 1rem !important;\n  }\n  .m-sm-4 {\n    margin: 1.5rem !important;\n  }\n  .m-sm-5 {\n    margin: 3rem !important;\n  }\n  .m-sm-auto {\n    margin: auto !important;\n  }\n  .mx-sm-0 {\n    margin-right: 0 !important;\n    margin-left: 0 !important;\n  }\n  .mx-sm-1 {\n    margin-right: 0.25rem !important;\n    margin-left: 0.25rem !important;\n  }\n  .mx-sm-2 {\n    margin-right: 0.5rem !important;\n    margin-left: 0.5rem !important;\n  }\n  .mx-sm-3 {\n    margin-right: 1rem !important;\n    margin-left: 1rem !important;\n  }\n  .mx-sm-4 {\n    margin-right: 1.5rem !important;\n    margin-left: 1.5rem !important;\n  }\n  .mx-sm-5 {\n    margin-right: 3rem !important;\n    margin-left: 3rem !important;\n  }\n  .mx-sm-auto {\n    margin-right: auto !important;\n    margin-left: auto !important;\n  }\n  .my-sm-0 {\n    margin-top: 0 !important;\n    margin-bottom: 0 !important;\n  }\n  .my-sm-1 {\n    margin-top: 0.25rem !important;\n    margin-bottom: 0.25rem !important;\n  }\n  .my-sm-2 {\n    margin-top: 0.5rem !important;\n    margin-bottom: 0.5rem !important;\n  }\n  .my-sm-3 {\n    margin-top: 1rem !important;\n    margin-bottom: 1rem !important;\n  }\n  .my-sm-4 {\n    margin-top: 1.5rem !important;\n    margin-bottom: 1.5rem !important;\n  }\n  .my-sm-5 {\n    margin-top: 3rem !important;\n    margin-bottom: 3rem !important;\n  }\n  .my-sm-auto {\n    margin-top: auto !important;\n    margin-bottom: auto !important;\n  }\n  .mt-sm-0 {\n    margin-top: 0 !important;\n  }\n  .mt-sm-1 {\n    margin-top: 0.25rem !important;\n  }\n  .mt-sm-2 {\n    margin-top: 0.5rem !important;\n  }\n  .mt-sm-3 {\n    margin-top: 1rem !important;\n  }\n  .mt-sm-4 {\n    margin-top: 1.5rem !important;\n  }\n  .mt-sm-5 {\n    margin-top: 3rem !important;\n  }\n  .mt-sm-auto {\n    margin-top: auto !important;\n  }\n  .me-sm-0 {\n    margin-right: 0 !important;\n  }\n  .me-sm-1 {\n    margin-right: 0.25rem !important;\n  }\n  .me-sm-2 {\n    margin-right: 0.5rem !important;\n  }\n  .me-sm-3 {\n    margin-right: 1rem !important;\n  }\n  .me-sm-4 {\n    margin-right: 1.5rem !important;\n  }\n  .me-sm-5 {\n    margin-right: 3rem !important;\n  }\n  .me-sm-auto {\n    margin-right: auto !important;\n  }\n  .mb-sm-0 {\n    margin-bottom: 0 !important;\n  }\n  .mb-sm-1 {\n    margin-bottom: 0.25rem !important;\n  }\n  .mb-sm-2 {\n    margin-bottom: 0.5rem !important;\n  }\n  .mb-sm-3 {\n    margin-bottom: 1rem !important;\n  }\n  .mb-sm-4 {\n    margin-bottom: 1.5rem !important;\n  }\n  .mb-sm-5 {\n    margin-bottom: 3rem !important;\n  }\n  .mb-sm-auto {\n    margin-bottom: auto !important;\n  }\n  .ms-sm-0 {\n    margin-left: 0 !important;\n  }\n  .ms-sm-1 {\n    margin-left: 0.25rem !important;\n  }\n  .ms-sm-2 {\n    margin-left: 0.5rem !important;\n  }\n  .ms-sm-3 {\n    margin-left: 1rem !important;\n  }\n  .ms-sm-4 {\n    margin-left: 1.5rem !important;\n  }\n  .ms-sm-5 {\n    margin-left: 3rem !important;\n  }\n  .ms-sm-auto {\n    margin-left: auto !important;\n  }\n  .p-sm-0 {\n    padding: 0 !important;\n  }\n  .p-sm-1 {\n    padding: 0.25rem !important;\n  }\n  .p-sm-2 {\n    padding: 0.5rem !important;\n  }\n  .p-sm-3 {\n    padding: 1rem !important;\n  }\n  .p-sm-4 {\n    padding: 1.5rem !important;\n  }\n  .p-sm-5 {\n    padding: 3rem !important;\n  }\n  .px-sm-0 {\n    padding-right: 0 !important;\n    padding-left: 0 !important;\n  }\n  .px-sm-1 {\n    padding-right: 0.25rem !important;\n    padding-left: 0.25rem !important;\n  }\n  .px-sm-2 {\n    padding-right: 0.5rem !important;\n    padding-left: 0.5rem !important;\n  }\n  .px-sm-3 {\n    padding-right: 1rem !important;\n    padding-left: 1rem !important;\n  }\n  .px-sm-4 {\n    padding-right: 1.5rem !important;\n    padding-left: 1.5rem !important;\n  }\n  .px-sm-5 {\n    padding-right: 3rem !important;\n    padding-left: 3rem !important;\n  }\n  .py-sm-0 {\n    padding-top: 0 !important;\n    padding-bottom: 0 !important;\n  }\n  .py-sm-1 {\n    padding-top: 0.25rem !important;\n    padding-bottom: 0.25rem !important;\n  }\n  .py-sm-2 {\n    padding-top: 0.5rem !important;\n    padding-bottom: 0.5rem !important;\n  }\n  .py-sm-3 {\n    padding-top: 1rem !important;\n    padding-bottom: 1rem !important;\n  }\n  .py-sm-4 {\n    padding-top: 1.5rem !important;\n    padding-bottom: 1.5rem !important;\n  }\n  .py-sm-5 {\n    padding-top: 3rem !important;\n    padding-bottom: 3rem !important;\n  }\n  .pt-sm-0 {\n    padding-top: 0 !important;\n  }\n  .pt-sm-1 {\n    padding-top: 0.25rem !important;\n  }\n  .pt-sm-2 {\n    padding-top: 0.5rem !important;\n  }\n  .pt-sm-3 {\n    padding-top: 1rem !important;\n  }\n  .pt-sm-4 {\n    padding-top: 1.5rem !important;\n  }\n  .pt-sm-5 {\n    padding-top: 3rem !important;\n  }\n  .pe-sm-0 {\n    padding-right: 0 !important;\n  }\n  .pe-sm-1 {\n    padding-right: 0.25rem !important;\n  }\n  .pe-sm-2 {\n    padding-right: 0.5rem !important;\n  }\n  .pe-sm-3 {\n    padding-right: 1rem !important;\n  }\n  .pe-sm-4 {\n    padding-right: 1.5rem !important;\n  }\n  .pe-sm-5 {\n    padding-right: 3rem !important;\n  }\n  .pb-sm-0 {\n    padding-bottom: 0 !important;\n  }\n  .pb-sm-1 {\n    padding-bottom: 0.25rem !important;\n  }\n  .pb-sm-2 {\n    padding-bottom: 0.5rem !important;\n  }\n  .pb-sm-3 {\n    padding-bottom: 1rem !important;\n  }\n  .pb-sm-4 {\n    padding-bottom: 1.5rem !important;\n  }\n  .pb-sm-5 {\n    padding-bottom: 3rem !important;\n  }\n  .ps-sm-0 {\n    padding-left: 0 !important;\n  }\n  .ps-sm-1 {\n    padding-left: 0.25rem !important;\n  }\n  .ps-sm-2 {\n    padding-left: 0.5rem !important;\n  }\n  .ps-sm-3 {\n    padding-left: 1rem !important;\n  }\n  .ps-sm-4 {\n    padding-left: 1.5rem !important;\n  }\n  .ps-sm-5 {\n    padding-left: 3rem !important;\n  }\n  .text-sm-start {\n    text-align: left !important;\n  }\n  .text-sm-end {\n    text-align: right !important;\n  }\n  .text-sm-center {\n    text-align: center !important;\n  }\n}\n\n@media (min-width: 768px) {\n  .float-md-start {\n    float: left !important;\n  }\n  .float-md-end {\n    float: right !important;\n  }\n  .float-md-none {\n    float: none !important;\n  }\n  .d-md-inline {\n    display: inline !important;\n  }\n  .d-md-inline-block {\n    display: inline-block !important;\n  }\n  .d-md-block {\n    display: block !important;\n  }\n  .d-md-grid {\n    display: grid !important;\n  }\n  .d-md-table {\n    display: table !important;\n  }\n  .d-md-table-row {\n    display: table-row !important;\n  }\n  .d-md-table-cell {\n    display: table-cell !important;\n  }\n  .d-md-flex {\n    display: -ms-flexbox !important;\n    display: flex !important;\n  }\n  .d-md-inline-flex {\n    display: -ms-inline-flexbox !important;\n    display: inline-flex !important;\n  }\n  .d-md-none {\n    display: none !important;\n  }\n  .flex-md-fill {\n    -ms-flex: 1 1 auto !important;\n    flex: 1 1 auto !important;\n  }\n  .flex-md-row {\n    -ms-flex-direction: row !important;\n    flex-direction: row !important;\n  }\n  .flex-md-column {\n    -ms-flex-direction: column !important;\n    flex-direction: column !important;\n  }\n  .flex-md-row-reverse {\n    -ms-flex-direction: row-reverse !important;\n    flex-direction: row-reverse !important;\n  }\n  .flex-md-column-reverse {\n    -ms-flex-direction: column-reverse !important;\n    flex-direction: column-reverse !important;\n  }\n  .flex-md-grow-0 {\n    -ms-flex-positive: 0 !important;\n    flex-grow: 0 !important;\n  }\n  .flex-md-grow-1 {\n    -ms-flex-positive: 1 !important;\n    flex-grow: 1 !important;\n  }\n  .flex-md-shrink-0 {\n    -ms-flex-negative: 0 !important;\n    flex-shrink: 0 !important;\n  }\n  .flex-md-shrink-1 {\n    -ms-flex-negative: 1 !important;\n    flex-shrink: 1 !important;\n  }\n  .flex-md-wrap {\n    -ms-flex-wrap: wrap !important;\n    flex-wrap: wrap !important;\n  }\n  .flex-md-nowrap {\n    -ms-flex-wrap: nowrap !important;\n    flex-wrap: nowrap !important;\n  }\n  .flex-md-wrap-reverse {\n    -ms-flex-wrap: wrap-reverse !important;\n    flex-wrap: wrap-reverse !important;\n  }\n  .gap-md-0 {\n    gap: 0 !important;\n  }\n  .gap-md-1 {\n    gap: 0.25rem !important;\n  }\n  .gap-md-2 {\n    gap: 0.5rem !important;\n  }\n  .gap-md-3 {\n    gap: 1rem !important;\n  }\n  .gap-md-4 {\n    gap: 1.5rem !important;\n  }\n  .gap-md-5 {\n    gap: 3rem !important;\n  }\n  .justify-content-md-start {\n    -ms-flex-pack: start !important;\n    justify-content: flex-start !important;\n  }\n  .justify-content-md-end {\n    -ms-flex-pack: end !important;\n    justify-content: flex-end !important;\n  }\n  .justify-content-md-center {\n    -ms-flex-pack: center !important;\n    justify-content: center !important;\n  }\n  .justify-content-md-between {\n    -ms-flex-pack: justify !important;\n    justify-content: space-between !important;\n  }\n  .justify-content-md-around {\n    -ms-flex-pack: distribute !important;\n    justify-content: space-around !important;\n  }\n  .justify-content-md-evenly {\n    -ms-flex-pack: space-evenly !important;\n    justify-content: space-evenly !important;\n  }\n  .align-items-md-start {\n    -ms-flex-align: start !important;\n    align-items: flex-start !important;\n  }\n  .align-items-md-end {\n    -ms-flex-align: end !important;\n    align-items: flex-end !important;\n  }\n  .align-items-md-center {\n    -ms-flex-align: center !important;\n    align-items: center !important;\n  }\n  .align-items-md-baseline {\n    -ms-flex-align: baseline !important;\n    align-items: baseline !important;\n  }\n  .align-items-md-stretch {\n    -ms-flex-align: stretch !important;\n    align-items: stretch !important;\n  }\n  .align-content-md-start {\n    -ms-flex-line-pack: start !important;\n    align-content: flex-start !important;\n  }\n  .align-content-md-end {\n    -ms-flex-line-pack: end !important;\n    align-content: flex-end !important;\n  }\n  .align-content-md-center {\n    -ms-flex-line-pack: center !important;\n    align-content: center !important;\n  }\n  .align-content-md-between {\n    -ms-flex-line-pack: justify !important;\n    align-content: space-between !important;\n  }\n  .align-content-md-around {\n    -ms-flex-line-pack: distribute !important;\n    align-content: space-around !important;\n  }\n  .align-content-md-stretch {\n    -ms-flex-line-pack: stretch !important;\n    align-content: stretch !important;\n  }\n  .align-self-md-auto {\n    -ms-flex-item-align: auto !important;\n    align-self: auto !important;\n  }\n  .align-self-md-start {\n    -ms-flex-item-align: start !important;\n    align-self: flex-start !important;\n  }\n  .align-self-md-end {\n    -ms-flex-item-align: end !important;\n    align-self: flex-end !important;\n  }\n  .align-self-md-center {\n    -ms-flex-item-align: center !important;\n    align-self: center !important;\n  }\n  .align-self-md-baseline {\n    -ms-flex-item-align: baseline !important;\n    align-self: baseline !important;\n  }\n  .align-self-md-stretch {\n    -ms-flex-item-align: stretch !important;\n    align-self: stretch !important;\n  }\n  .order-md-first {\n    -ms-flex-order: -1 !important;\n    order: -1 !important;\n  }\n  .order-md-0 {\n    -ms-flex-order: 0 !important;\n    order: 0 !important;\n  }\n  .order-md-1 {\n    -ms-flex-order: 1 !important;\n    order: 1 !important;\n  }\n  .order-md-2 {\n    -ms-flex-order: 2 !important;\n    order: 2 !important;\n  }\n  .order-md-3 {\n    -ms-flex-order: 3 !important;\n    order: 3 !important;\n  }\n  .order-md-4 {\n    -ms-flex-order: 4 !important;\n    order: 4 !important;\n  }\n  .order-md-5 {\n    -ms-flex-order: 5 !important;\n    order: 5 !important;\n  }\n  .order-md-last {\n    -ms-flex-order: 6 !important;\n    order: 6 !important;\n  }\n  .m-md-0 {\n    margin: 0 !important;\n  }\n  .m-md-1 {\n    margin: 0.25rem !important;\n  }\n  .m-md-2 {\n    margin: 0.5rem !important;\n  }\n  .m-md-3 {\n    margin: 1rem !important;\n  }\n  .m-md-4 {\n    margin: 1.5rem !important;\n  }\n  .m-md-5 {\n    margin: 3rem !important;\n  }\n  .m-md-auto {\n    margin: auto !important;\n  }\n  .mx-md-0 {\n    margin-right: 0 !important;\n    margin-left: 0 !important;\n  }\n  .mx-md-1 {\n    margin-right: 0.25rem !important;\n    margin-left: 0.25rem !important;\n  }\n  .mx-md-2 {\n    margin-right: 0.5rem !important;\n    margin-left: 0.5rem !important;\n  }\n  .mx-md-3 {\n    margin-right: 1rem !important;\n    margin-left: 1rem !important;\n  }\n  .mx-md-4 {\n    margin-right: 1.5rem !important;\n    margin-left: 1.5rem !important;\n  }\n  .mx-md-5 {\n    margin-right: 3rem !important;\n    margin-left: 3rem !important;\n  }\n  .mx-md-auto {\n    margin-right: auto !important;\n    margin-left: auto !important;\n  }\n  .my-md-0 {\n    margin-top: 0 !important;\n    margin-bottom: 0 !important;\n  }\n  .my-md-1 {\n    margin-top: 0.25rem !important;\n    margin-bottom: 0.25rem !important;\n  }\n  .my-md-2 {\n    margin-top: 0.5rem !important;\n    margin-bottom: 0.5rem !important;\n  }\n  .my-md-3 {\n    margin-top: 1rem !important;\n    margin-bottom: 1rem !important;\n  }\n  .my-md-4 {\n    margin-top: 1.5rem !important;\n    margin-bottom: 1.5rem !important;\n  }\n  .my-md-5 {\n    margin-top: 3rem !important;\n    margin-bottom: 3rem !important;\n  }\n  .my-md-auto {\n    margin-top: auto !important;\n    margin-bottom: auto !important;\n  }\n  .mt-md-0 {\n    margin-top: 0 !important;\n  }\n  .mt-md-1 {\n    margin-top: 0.25rem !important;\n  }\n  .mt-md-2 {\n    margin-top: 0.5rem !important;\n  }\n  .mt-md-3 {\n    margin-top: 1rem !important;\n  }\n  .mt-md-4 {\n    margin-top: 1.5rem !important;\n  }\n  .mt-md-5 {\n    margin-top: 3rem !important;\n  }\n  .mt-md-auto {\n    margin-top: auto !important;\n  }\n  .me-md-0 {\n    margin-right: 0 !important;\n  }\n  .me-md-1 {\n    margin-right: 0.25rem !important;\n  }\n  .me-md-2 {\n    margin-right: 0.5rem !important;\n  }\n  .me-md-3 {\n    margin-right: 1rem !important;\n  }\n  .me-md-4 {\n    margin-right: 1.5rem !important;\n  }\n  .me-md-5 {\n    margin-right: 3rem !important;\n  }\n  .me-md-auto {\n    margin-right: auto !important;\n  }\n  .mb-md-0 {\n    margin-bottom: 0 !important;\n  }\n  .mb-md-1 {\n    margin-bottom: 0.25rem !important;\n  }\n  .mb-md-2 {\n    margin-bottom: 0.5rem !important;\n  }\n  .mb-md-3 {\n    margin-bottom: 1rem !important;\n  }\n  .mb-md-4 {\n    margin-bottom: 1.5rem !important;\n  }\n  .mb-md-5 {\n    margin-bottom: 3rem !important;\n  }\n  .mb-md-auto {\n    margin-bottom: auto !important;\n  }\n  .ms-md-0 {\n    margin-left: 0 !important;\n  }\n  .ms-md-1 {\n    margin-left: 0.25rem !important;\n  }\n  .ms-md-2 {\n    margin-left: 0.5rem !important;\n  }\n  .ms-md-3 {\n    margin-left: 1rem !important;\n  }\n  .ms-md-4 {\n    margin-left: 1.5rem !important;\n  }\n  .ms-md-5 {\n    margin-left: 3rem !important;\n  }\n  .ms-md-auto {\n    margin-left: auto !important;\n  }\n  .p-md-0 {\n    padding: 0 !important;\n  }\n  .p-md-1 {\n    padding: 0.25rem !important;\n  }\n  .p-md-2 {\n    padding: 0.5rem !important;\n  }\n  .p-md-3 {\n    padding: 1rem !important;\n  }\n  .p-md-4 {\n    padding: 1.5rem !important;\n  }\n  .p-md-5 {\n    padding: 3rem !important;\n  }\n  .px-md-0 {\n    padding-right: 0 !important;\n    padding-left: 0 !important;\n  }\n  .px-md-1 {\n    padding-right: 0.25rem !important;\n    padding-left: 0.25rem !important;\n  }\n  .px-md-2 {\n    padding-right: 0.5rem !important;\n    padding-left: 0.5rem !important;\n  }\n  .px-md-3 {\n    padding-right: 1rem !important;\n    padding-left: 1rem !important;\n  }\n  .px-md-4 {\n    padding-right: 1.5rem !important;\n    padding-left: 1.5rem !important;\n  }\n  .px-md-5 {\n    padding-right: 3rem !important;\n    padding-left: 3rem !important;\n  }\n  .py-md-0 {\n    padding-top: 0 !important;\n    padding-bottom: 0 !important;\n  }\n  .py-md-1 {\n    padding-top: 0.25rem !important;\n    padding-bottom: 0.25rem !important;\n  }\n  .py-md-2 {\n    padding-top: 0.5rem !important;\n    padding-bottom: 0.5rem !important;\n  }\n  .py-md-3 {\n    padding-top: 1rem !important;\n    padding-bottom: 1rem !important;\n  }\n  .py-md-4 {\n    padding-top: 1.5rem !important;\n    padding-bottom: 1.5rem !important;\n  }\n  .py-md-5 {\n    padding-top: 3rem !important;\n    padding-bottom: 3rem !important;\n  }\n  .pt-md-0 {\n    padding-top: 0 !important;\n  }\n  .pt-md-1 {\n    padding-top: 0.25rem !important;\n  }\n  .pt-md-2 {\n    padding-top: 0.5rem !important;\n  }\n  .pt-md-3 {\n    padding-top: 1rem !important;\n  }\n  .pt-md-4 {\n    padding-top: 1.5rem !important;\n  }\n  .pt-md-5 {\n    padding-top: 3rem !important;\n  }\n  .pe-md-0 {\n    padding-right: 0 !important;\n  }\n  .pe-md-1 {\n    padding-right: 0.25rem !important;\n  }\n  .pe-md-2 {\n    padding-right: 0.5rem !important;\n  }\n  .pe-md-3 {\n    padding-right: 1rem !important;\n  }\n  .pe-md-4 {\n    padding-right: 1.5rem !important;\n  }\n  .pe-md-5 {\n    padding-right: 3rem !important;\n  }\n  .pb-md-0 {\n    padding-bottom: 0 !important;\n  }\n  .pb-md-1 {\n    padding-bottom: 0.25rem !important;\n  }\n  .pb-md-2 {\n    padding-bottom: 0.5rem !important;\n  }\n  .pb-md-3 {\n    padding-bottom: 1rem !important;\n  }\n  .pb-md-4 {\n    padding-bottom: 1.5rem !important;\n  }\n  .pb-md-5 {\n    padding-bottom: 3rem !important;\n  }\n  .ps-md-0 {\n    padding-left: 0 !important;\n  }\n  .ps-md-1 {\n    padding-left: 0.25rem !important;\n  }\n  .ps-md-2 {\n    padding-left: 0.5rem !important;\n  }\n  .ps-md-3 {\n    padding-left: 1rem !important;\n  }\n  .ps-md-4 {\n    padding-left: 1.5rem !important;\n  }\n  .ps-md-5 {\n    padding-left: 3rem !important;\n  }\n  .text-md-start {\n    text-align: left !important;\n  }\n  .text-md-end {\n    text-align: right !important;\n  }\n  .text-md-center {\n    text-align: center !important;\n  }\n}\n\n@media (min-width: 992px) {\n  .float-lg-start {\n    float: left !important;\n  }\n  .float-lg-end {\n    float: right !important;\n  }\n  .float-lg-none {\n    float: none !important;\n  }\n  .d-lg-inline {\n    display: inline !important;\n  }\n  .d-lg-inline-block {\n    display: inline-block !important;\n  }\n  .d-lg-block {\n    display: block !important;\n  }\n  .d-lg-grid {\n    display: grid !important;\n  }\n  .d-lg-table {\n    display: table !important;\n  }\n  .d-lg-table-row {\n    display: table-row !important;\n  }\n  .d-lg-table-cell {\n    display: table-cell !important;\n  }\n  .d-lg-flex {\n    display: -ms-flexbox !important;\n    display: flex !important;\n  }\n  .d-lg-inline-flex {\n    display: -ms-inline-flexbox !important;\n    display: inline-flex !important;\n  }\n  .d-lg-none {\n    display: none !important;\n  }\n  .flex-lg-fill {\n    -ms-flex: 1 1 auto !important;\n    flex: 1 1 auto !important;\n  }\n  .flex-lg-row {\n    -ms-flex-direction: row !important;\n    flex-direction: row !important;\n  }\n  .flex-lg-column {\n    -ms-flex-direction: column !important;\n    flex-direction: column !important;\n  }\n  .flex-lg-row-reverse {\n    -ms-flex-direction: row-reverse !important;\n    flex-direction: row-reverse !important;\n  }\n  .flex-lg-column-reverse {\n    -ms-flex-direction: column-reverse !important;\n    flex-direction: column-reverse !important;\n  }\n  .flex-lg-grow-0 {\n    -ms-flex-positive: 0 !important;\n    flex-grow: 0 !important;\n  }\n  .flex-lg-grow-1 {\n    -ms-flex-positive: 1 !important;\n    flex-grow: 1 !important;\n  }\n  .flex-lg-shrink-0 {\n    -ms-flex-negative: 0 !important;\n    flex-shrink: 0 !important;\n  }\n  .flex-lg-shrink-1 {\n    -ms-flex-negative: 1 !important;\n    flex-shrink: 1 !important;\n  }\n  .flex-lg-wrap {\n    -ms-flex-wrap: wrap !important;\n    flex-wrap: wrap !important;\n  }\n  .flex-lg-nowrap {\n    -ms-flex-wrap: nowrap !important;\n    flex-wrap: nowrap !important;\n  }\n  .flex-lg-wrap-reverse {\n    -ms-flex-wrap: wrap-reverse !important;\n    flex-wrap: wrap-reverse !important;\n  }\n  .gap-lg-0 {\n    gap: 0 !important;\n  }\n  .gap-lg-1 {\n    gap: 0.25rem !important;\n  }\n  .gap-lg-2 {\n    gap: 0.5rem !important;\n  }\n  .gap-lg-3 {\n    gap: 1rem !important;\n  }\n  .gap-lg-4 {\n    gap: 1.5rem !important;\n  }\n  .gap-lg-5 {\n    gap: 3rem !important;\n  }\n  .justify-content-lg-start {\n    -ms-flex-pack: start !important;\n    justify-content: flex-start !important;\n  }\n  .justify-content-lg-end {\n    -ms-flex-pack: end !important;\n    justify-content: flex-end !important;\n  }\n  .justify-content-lg-center {\n    -ms-flex-pack: center !important;\n    justify-content: center !important;\n  }\n  .justify-content-lg-between {\n    -ms-flex-pack: justify !important;\n    justify-content: space-between !important;\n  }\n  .justify-content-lg-around {\n    -ms-flex-pack: distribute !important;\n    justify-content: space-around !important;\n  }\n  .justify-content-lg-evenly {\n    -ms-flex-pack: space-evenly !important;\n    justify-content: space-evenly !important;\n  }\n  .align-items-lg-start {\n    -ms-flex-align: start !important;\n    align-items: flex-start !important;\n  }\n  .align-items-lg-end {\n    -ms-flex-align: end !important;\n    align-items: flex-end !important;\n  }\n  .align-items-lg-center {\n    -ms-flex-align: center !important;\n    align-items: center !important;\n  }\n  .align-items-lg-baseline {\n    -ms-flex-align: baseline !important;\n    align-items: baseline !important;\n  }\n  .align-items-lg-stretch {\n    -ms-flex-align: stretch !important;\n    align-items: stretch !important;\n  }\n  .align-content-lg-start {\n    -ms-flex-line-pack: start !important;\n    align-content: flex-start !important;\n  }\n  .align-content-lg-end {\n    -ms-flex-line-pack: end !important;\n    align-content: flex-end !important;\n  }\n  .align-content-lg-center {\n    -ms-flex-line-pack: center !important;\n    align-content: center !important;\n  }\n  .align-content-lg-between {\n    -ms-flex-line-pack: justify !important;\n    align-content: space-between !important;\n  }\n  .align-content-lg-around {\n    -ms-flex-line-pack: distribute !important;\n    align-content: space-around !important;\n  }\n  .align-content-lg-stretch {\n    -ms-flex-line-pack: stretch !important;\n    align-content: stretch !important;\n  }\n  .align-self-lg-auto {\n    -ms-flex-item-align: auto !important;\n    align-self: auto !important;\n  }\n  .align-self-lg-start {\n    -ms-flex-item-align: start !important;\n    align-self: flex-start !important;\n  }\n  .align-self-lg-end {\n    -ms-flex-item-align: end !important;\n    align-self: flex-end !important;\n  }\n  .align-self-lg-center {\n    -ms-flex-item-align: center !important;\n    align-self: center !important;\n  }\n  .align-self-lg-baseline {\n    -ms-flex-item-align: baseline !important;\n    align-self: baseline !important;\n  }\n  .align-self-lg-stretch {\n    -ms-flex-item-align: stretch !important;\n    align-self: stretch !important;\n  }\n  .order-lg-first {\n    -ms-flex-order: -1 !important;\n    order: -1 !important;\n  }\n  .order-lg-0 {\n    -ms-flex-order: 0 !important;\n    order: 0 !important;\n  }\n  .order-lg-1 {\n    -ms-flex-order: 1 !important;\n    order: 1 !important;\n  }\n  .order-lg-2 {\n    -ms-flex-order: 2 !important;\n    order: 2 !important;\n  }\n  .order-lg-3 {\n    -ms-flex-order: 3 !important;\n    order: 3 !important;\n  }\n  .order-lg-4 {\n    -ms-flex-order: 4 !important;\n    order: 4 !important;\n  }\n  .order-lg-5 {\n    -ms-flex-order: 5 !important;\n    order: 5 !important;\n  }\n  .order-lg-last {\n    -ms-flex-order: 6 !important;\n    order: 6 !important;\n  }\n  .m-lg-0 {\n    margin: 0 !important;\n  }\n  .m-lg-1 {\n    margin: 0.25rem !important;\n  }\n  .m-lg-2 {\n    margin: 0.5rem !important;\n  }\n  .m-lg-3 {\n    margin: 1rem !important;\n  }\n  .m-lg-4 {\n    margin: 1.5rem !important;\n  }\n  .m-lg-5 {\n    margin: 3rem !important;\n  }\n  .m-lg-auto {\n    margin: auto !important;\n  }\n  .mx-lg-0 {\n    margin-right: 0 !important;\n    margin-left: 0 !important;\n  }\n  .mx-lg-1 {\n    margin-right: 0.25rem !important;\n    margin-left: 0.25rem !important;\n  }\n  .mx-lg-2 {\n    margin-right: 0.5rem !important;\n    margin-left: 0.5rem !important;\n  }\n  .mx-lg-3 {\n    margin-right: 1rem !important;\n    margin-left: 1rem !important;\n  }\n  .mx-lg-4 {\n    margin-right: 1.5rem !important;\n    margin-left: 1.5rem !important;\n  }\n  .mx-lg-5 {\n    margin-right: 3rem !important;\n    margin-left: 3rem !important;\n  }\n  .mx-lg-auto {\n    margin-right: auto !important;\n    margin-left: auto !important;\n  }\n  .my-lg-0 {\n    margin-top: 0 !important;\n    margin-bottom: 0 !important;\n  }\n  .my-lg-1 {\n    margin-top: 0.25rem !important;\n    margin-bottom: 0.25rem !important;\n  }\n  .my-lg-2 {\n    margin-top: 0.5rem !important;\n    margin-bottom: 0.5rem !important;\n  }\n  .my-lg-3 {\n    margin-top: 1rem !important;\n    margin-bottom: 1rem !important;\n  }\n  .my-lg-4 {\n    margin-top: 1.5rem !important;\n    margin-bottom: 1.5rem !important;\n  }\n  .my-lg-5 {\n    margin-top: 3rem !important;\n    margin-bottom: 3rem !important;\n  }\n  .my-lg-auto {\n    margin-top: auto !important;\n    margin-bottom: auto !important;\n  }\n  .mt-lg-0 {\n    margin-top: 0 !important;\n  }\n  .mt-lg-1 {\n    margin-top: 0.25rem !important;\n  }\n  .mt-lg-2 {\n    margin-top: 0.5rem !important;\n  }\n  .mt-lg-3 {\n    margin-top: 1rem !important;\n  }\n  .mt-lg-4 {\n    margin-top: 1.5rem !important;\n  }\n  .mt-lg-5 {\n    margin-top: 3rem !important;\n  }\n  .mt-lg-auto {\n    margin-top: auto !important;\n  }\n  .me-lg-0 {\n    margin-right: 0 !important;\n  }\n  .me-lg-1 {\n    margin-right: 0.25rem !important;\n  }\n  .me-lg-2 {\n    margin-right: 0.5rem !important;\n  }\n  .me-lg-3 {\n    margin-right: 1rem !important;\n  }\n  .me-lg-4 {\n    margin-right: 1.5rem !important;\n  }\n  .me-lg-5 {\n    margin-right: 3rem !important;\n  }\n  .me-lg-auto {\n    margin-right: auto !important;\n  }\n  .mb-lg-0 {\n    margin-bottom: 0 !important;\n  }\n  .mb-lg-1 {\n    margin-bottom: 0.25rem !important;\n  }\n  .mb-lg-2 {\n    margin-bottom: 0.5rem !important;\n  }\n  .mb-lg-3 {\n    margin-bottom: 1rem !important;\n  }\n  .mb-lg-4 {\n    margin-bottom: 1.5rem !important;\n  }\n  .mb-lg-5 {\n    margin-bottom: 3rem !important;\n  }\n  .mb-lg-auto {\n    margin-bottom: auto !important;\n  }\n  .ms-lg-0 {\n    margin-left: 0 !important;\n  }\n  .ms-lg-1 {\n    margin-left: 0.25rem !important;\n  }\n  .ms-lg-2 {\n    margin-left: 0.5rem !important;\n  }\n  .ms-lg-3 {\n    margin-left: 1rem !important;\n  }\n  .ms-lg-4 {\n    margin-left: 1.5rem !important;\n  }\n  .ms-lg-5 {\n    margin-left: 3rem !important;\n  }\n  .ms-lg-auto {\n    margin-left: auto !important;\n  }\n  .p-lg-0 {\n    padding: 0 !important;\n  }\n  .p-lg-1 {\n    padding: 0.25rem !important;\n  }\n  .p-lg-2 {\n    padding: 0.5rem !important;\n  }\n  .p-lg-3 {\n    padding: 1rem !important;\n  }\n  .p-lg-4 {\n    padding: 1.5rem !important;\n  }\n  .p-lg-5 {\n    padding: 3rem !important;\n  }\n  .px-lg-0 {\n    padding-right: 0 !important;\n    padding-left: 0 !important;\n  }\n  .px-lg-1 {\n    padding-right: 0.25rem !important;\n    padding-left: 0.25rem !important;\n  }\n  .px-lg-2 {\n    padding-right: 0.5rem !important;\n    padding-left: 0.5rem !important;\n  }\n  .px-lg-3 {\n    padding-right: 1rem !important;\n    padding-left: 1rem !important;\n  }\n  .px-lg-4 {\n    padding-right: 1.5rem !important;\n    padding-left: 1.5rem !important;\n  }\n  .px-lg-5 {\n    padding-right: 3rem !important;\n    padding-left: 3rem !important;\n  }\n  .py-lg-0 {\n    padding-top: 0 !important;\n    padding-bottom: 0 !important;\n  }\n  .py-lg-1 {\n    padding-top: 0.25rem !important;\n    padding-bottom: 0.25rem !important;\n  }\n  .py-lg-2 {\n    padding-top: 0.5rem !important;\n    padding-bottom: 0.5rem !important;\n  }\n  .py-lg-3 {\n    padding-top: 1rem !important;\n    padding-bottom: 1rem !important;\n  }\n  .py-lg-4 {\n    padding-top: 1.5rem !important;\n    padding-bottom: 1.5rem !important;\n  }\n  .py-lg-5 {\n    padding-top: 3rem !important;\n    padding-bottom: 3rem !important;\n  }\n  .pt-lg-0 {\n    padding-top: 0 !important;\n  }\n  .pt-lg-1 {\n    padding-top: 0.25rem !important;\n  }\n  .pt-lg-2 {\n    padding-top: 0.5rem !important;\n  }\n  .pt-lg-3 {\n    padding-top: 1rem !important;\n  }\n  .pt-lg-4 {\n    padding-top: 1.5rem !important;\n  }\n  .pt-lg-5 {\n    padding-top: 3rem !important;\n  }\n  .pe-lg-0 {\n    padding-right: 0 !important;\n  }\n  .pe-lg-1 {\n    padding-right: 0.25rem !important;\n  }\n  .pe-lg-2 {\n    padding-right: 0.5rem !important;\n  }\n  .pe-lg-3 {\n    padding-right: 1rem !important;\n  }\n  .pe-lg-4 {\n    padding-right: 1.5rem !important;\n  }\n  .pe-lg-5 {\n    padding-right: 3rem !important;\n  }\n  .pb-lg-0 {\n    padding-bottom: 0 !important;\n  }\n  .pb-lg-1 {\n    padding-bottom: 0.25rem !important;\n  }\n  .pb-lg-2 {\n    padding-bottom: 0.5rem !important;\n  }\n  .pb-lg-3 {\n    padding-bottom: 1rem !important;\n  }\n  .pb-lg-4 {\n    padding-bottom: 1.5rem !important;\n  }\n  .pb-lg-5 {\n    padding-bottom: 3rem !important;\n  }\n  .ps-lg-0 {\n    padding-left: 0 !important;\n  }\n  .ps-lg-1 {\n    padding-left: 0.25rem !important;\n  }\n  .ps-lg-2 {\n    padding-left: 0.5rem !important;\n  }\n  .ps-lg-3 {\n    padding-left: 1rem !important;\n  }\n  .ps-lg-4 {\n    padding-left: 1.5rem !important;\n  }\n  .ps-lg-5 {\n    padding-left: 3rem !important;\n  }\n  .text-lg-start {\n    text-align: left !important;\n  }\n  .text-lg-end {\n    text-align: right !important;\n  }\n  .text-lg-center {\n    text-align: center !important;\n  }\n}\n\n@media (min-width: 1200px) {\n  .float-xl-start {\n    float: left !important;\n  }\n  .float-xl-end {\n    float: right !important;\n  }\n  .float-xl-none {\n    float: none !important;\n  }\n  .d-xl-inline {\n    display: inline !important;\n  }\n  .d-xl-inline-block {\n    display: inline-block !important;\n  }\n  .d-xl-block {\n    display: block !important;\n  }\n  .d-xl-grid {\n    display: grid !important;\n  }\n  .d-xl-table {\n    display: table !important;\n  }\n  .d-xl-table-row {\n    display: table-row !important;\n  }\n  .d-xl-table-cell {\n    display: table-cell !important;\n  }\n  .d-xl-flex {\n    display: -ms-flexbox !important;\n    display: flex !important;\n  }\n  .d-xl-inline-flex {\n    display: -ms-inline-flexbox !important;\n    display: inline-flex !important;\n  }\n  .d-xl-none {\n    display: none !important;\n  }\n  .flex-xl-fill {\n    -ms-flex: 1 1 auto !important;\n    flex: 1 1 auto !important;\n  }\n  .flex-xl-row {\n    -ms-flex-direction: row !important;\n    flex-direction: row !important;\n  }\n  .flex-xl-column {\n    -ms-flex-direction: column !important;\n    flex-direction: column !important;\n  }\n  .flex-xl-row-reverse {\n    -ms-flex-direction: row-reverse !important;\n    flex-direction: row-reverse !important;\n  }\n  .flex-xl-column-reverse {\n    -ms-flex-direction: column-reverse !important;\n    flex-direction: column-reverse !important;\n  }\n  .flex-xl-grow-0 {\n    -ms-flex-positive: 0 !important;\n    flex-grow: 0 !important;\n  }\n  .flex-xl-grow-1 {\n    -ms-flex-positive: 1 !important;\n    flex-grow: 1 !important;\n  }\n  .flex-xl-shrink-0 {\n    -ms-flex-negative: 0 !important;\n    flex-shrink: 0 !important;\n  }\n  .flex-xl-shrink-1 {\n    -ms-flex-negative: 1 !important;\n    flex-shrink: 1 !important;\n  }\n  .flex-xl-wrap {\n    -ms-flex-wrap: wrap !important;\n    flex-wrap: wrap !important;\n  }\n  .flex-xl-nowrap {\n    -ms-flex-wrap: nowrap !important;\n    flex-wrap: nowrap !important;\n  }\n  .flex-xl-wrap-reverse {\n    -ms-flex-wrap: wrap-reverse !important;\n    flex-wrap: wrap-reverse !important;\n  }\n  .gap-xl-0 {\n    gap: 0 !important;\n  }\n  .gap-xl-1 {\n    gap: 0.25rem !important;\n  }\n  .gap-xl-2 {\n    gap: 0.5rem !important;\n  }\n  .gap-xl-3 {\n    gap: 1rem !important;\n  }\n  .gap-xl-4 {\n    gap: 1.5rem !important;\n  }\n  .gap-xl-5 {\n    gap: 3rem !important;\n  }\n  .justify-content-xl-start {\n    -ms-flex-pack: start !important;\n    justify-content: flex-start !important;\n  }\n  .justify-content-xl-end {\n    -ms-flex-pack: end !important;\n    justify-content: flex-end !important;\n  }\n  .justify-content-xl-center {\n    -ms-flex-pack: center !important;\n    justify-content: center !important;\n  }\n  .justify-content-xl-between {\n    -ms-flex-pack: justify !important;\n    justify-content: space-between !important;\n  }\n  .justify-content-xl-around {\n    -ms-flex-pack: distribute !important;\n    justify-content: space-around !important;\n  }\n  .justify-content-xl-evenly {\n    -ms-flex-pack: space-evenly !important;\n    justify-content: space-evenly !important;\n  }\n  .align-items-xl-start {\n    -ms-flex-align: start !important;\n    align-items: flex-start !important;\n  }\n  .align-items-xl-end {\n    -ms-flex-align: end !important;\n    align-items: flex-end !important;\n  }\n  .align-items-xl-center {\n    -ms-flex-align: center !important;\n    align-items: center !important;\n  }\n  .align-items-xl-baseline {\n    -ms-flex-align: baseline !important;\n    align-items: baseline !important;\n  }\n  .align-items-xl-stretch {\n    -ms-flex-align: stretch !important;\n    align-items: stretch !important;\n  }\n  .align-content-xl-start {\n    -ms-flex-line-pack: start !important;\n    align-content: flex-start !important;\n  }\n  .align-content-xl-end {\n    -ms-flex-line-pack: end !important;\n    align-content: flex-end !important;\n  }\n  .align-content-xl-center {\n    -ms-flex-line-pack: center !important;\n    align-content: center !important;\n  }\n  .align-content-xl-between {\n    -ms-flex-line-pack: justify !important;\n    align-content: space-between !important;\n  }\n  .align-content-xl-around {\n    -ms-flex-line-pack: distribute !important;\n    align-content: space-around !important;\n  }\n  .align-content-xl-stretch {\n    -ms-flex-line-pack: stretch !important;\n    align-content: stretch !important;\n  }\n  .align-self-xl-auto {\n    -ms-flex-item-align: auto !important;\n    align-self: auto !important;\n  }\n  .align-self-xl-start {\n    -ms-flex-item-align: start !important;\n    align-self: flex-start !important;\n  }\n  .align-self-xl-end {\n    -ms-flex-item-align: end !important;\n    align-self: flex-end !important;\n  }\n  .align-self-xl-center {\n    -ms-flex-item-align: center !important;\n    align-self: center !important;\n  }\n  .align-self-xl-baseline {\n    -ms-flex-item-align: baseline !important;\n    align-self: baseline !important;\n  }\n  .align-self-xl-stretch {\n    -ms-flex-item-align: stretch !important;\n    align-self: stretch !important;\n  }\n  .order-xl-first {\n    -ms-flex-order: -1 !important;\n    order: -1 !important;\n  }\n  .order-xl-0 {\n    -ms-flex-order: 0 !important;\n    order: 0 !important;\n  }\n  .order-xl-1 {\n    -ms-flex-order: 1 !important;\n    order: 1 !important;\n  }\n  .order-xl-2 {\n    -ms-flex-order: 2 !important;\n    order: 2 !important;\n  }\n  .order-xl-3 {\n    -ms-flex-order: 3 !important;\n    order: 3 !important;\n  }\n  .order-xl-4 {\n    -ms-flex-order: 4 !important;\n    order: 4 !important;\n  }\n  .order-xl-5 {\n    -ms-flex-order: 5 !important;\n    order: 5 !important;\n  }\n  .order-xl-last {\n    -ms-flex-order: 6 !important;\n    order: 6 !important;\n  }\n  .m-xl-0 {\n    margin: 0 !important;\n  }\n  .m-xl-1 {\n    margin: 0.25rem !important;\n  }\n  .m-xl-2 {\n    margin: 0.5rem !important;\n  }\n  .m-xl-3 {\n    margin: 1rem !important;\n  }\n  .m-xl-4 {\n    margin: 1.5rem !important;\n  }\n  .m-xl-5 {\n    margin: 3rem !important;\n  }\n  .m-xl-auto {\n    margin: auto !important;\n  }\n  .mx-xl-0 {\n    margin-right: 0 !important;\n    margin-left: 0 !important;\n  }\n  .mx-xl-1 {\n    margin-right: 0.25rem !important;\n    margin-left: 0.25rem !important;\n  }\n  .mx-xl-2 {\n    margin-right: 0.5rem !important;\n    margin-left: 0.5rem !important;\n  }\n  .mx-xl-3 {\n    margin-right: 1rem !important;\n    margin-left: 1rem !important;\n  }\n  .mx-xl-4 {\n    margin-right: 1.5rem !important;\n    margin-left: 1.5rem !important;\n  }\n  .mx-xl-5 {\n    margin-right: 3rem !important;\n    margin-left: 3rem !important;\n  }\n  .mx-xl-auto {\n    margin-right: auto !important;\n    margin-left: auto !important;\n  }\n  .my-xl-0 {\n    margin-top: 0 !important;\n    margin-bottom: 0 !important;\n  }\n  .my-xl-1 {\n    margin-top: 0.25rem !important;\n    margin-bottom: 0.25rem !important;\n  }\n  .my-xl-2 {\n    margin-top: 0.5rem !important;\n    margin-bottom: 0.5rem !important;\n  }\n  .my-xl-3 {\n    margin-top: 1rem !important;\n    margin-bottom: 1rem !important;\n  }\n  .my-xl-4 {\n    margin-top: 1.5rem !important;\n    margin-bottom: 1.5rem !important;\n  }\n  .my-xl-5 {\n    margin-top: 3rem !important;\n    margin-bottom: 3rem !important;\n  }\n  .my-xl-auto {\n    margin-top: auto !important;\n    margin-bottom: auto !important;\n  }\n  .mt-xl-0 {\n    margin-top: 0 !important;\n  }\n  .mt-xl-1 {\n    margin-top: 0.25rem !important;\n  }\n  .mt-xl-2 {\n    margin-top: 0.5rem !important;\n  }\n  .mt-xl-3 {\n    margin-top: 1rem !important;\n  }\n  .mt-xl-4 {\n    margin-top: 1.5rem !important;\n  }\n  .mt-xl-5 {\n    margin-top: 3rem !important;\n  }\n  .mt-xl-auto {\n    margin-top: auto !important;\n  }\n  .me-xl-0 {\n    margin-right: 0 !important;\n  }\n  .me-xl-1 {\n    margin-right: 0.25rem !important;\n  }\n  .me-xl-2 {\n    margin-right: 0.5rem !important;\n  }\n  .me-xl-3 {\n    margin-right: 1rem !important;\n  }\n  .me-xl-4 {\n    margin-right: 1.5rem !important;\n  }\n  .me-xl-5 {\n    margin-right: 3rem !important;\n  }\n  .me-xl-auto {\n    margin-right: auto !important;\n  }\n  .mb-xl-0 {\n    margin-bottom: 0 !important;\n  }\n  .mb-xl-1 {\n    margin-bottom: 0.25rem !important;\n  }\n  .mb-xl-2 {\n    margin-bottom: 0.5rem !important;\n  }\n  .mb-xl-3 {\n    margin-bottom: 1rem !important;\n  }\n  .mb-xl-4 {\n    margin-bottom: 1.5rem !important;\n  }\n  .mb-xl-5 {\n    margin-bottom: 3rem !important;\n  }\n  .mb-xl-auto {\n    margin-bottom: auto !important;\n  }\n  .ms-xl-0 {\n    margin-left: 0 !important;\n  }\n  .ms-xl-1 {\n    margin-left: 0.25rem !important;\n  }\n  .ms-xl-2 {\n    margin-left: 0.5rem !important;\n  }\n  .ms-xl-3 {\n    margin-left: 1rem !important;\n  }\n  .ms-xl-4 {\n    margin-left: 1.5rem !important;\n  }\n  .ms-xl-5 {\n    margin-left: 3rem !important;\n  }\n  .ms-xl-auto {\n    margin-left: auto !important;\n  }\n  .p-xl-0 {\n    padding: 0 !important;\n  }\n  .p-xl-1 {\n    padding: 0.25rem !important;\n  }\n  .p-xl-2 {\n    padding: 0.5rem !important;\n  }\n  .p-xl-3 {\n    padding: 1rem !important;\n  }\n  .p-xl-4 {\n    padding: 1.5rem !important;\n  }\n  .p-xl-5 {\n    padding: 3rem !important;\n  }\n  .px-xl-0 {\n    padding-right: 0 !important;\n    padding-left: 0 !important;\n  }\n  .px-xl-1 {\n    padding-right: 0.25rem !important;\n    padding-left: 0.25rem !important;\n  }\n  .px-xl-2 {\n    padding-right: 0.5rem !important;\n    padding-left: 0.5rem !important;\n  }\n  .px-xl-3 {\n    padding-right: 1rem !important;\n    padding-left: 1rem !important;\n  }\n  .px-xl-4 {\n    padding-right: 1.5rem !important;\n    padding-left: 1.5rem !important;\n  }\n  .px-xl-5 {\n    padding-right: 3rem !important;\n    padding-left: 3rem !important;\n  }\n  .py-xl-0 {\n    padding-top: 0 !important;\n    padding-bottom: 0 !important;\n  }\n  .py-xl-1 {\n    padding-top: 0.25rem !important;\n    padding-bottom: 0.25rem !important;\n  }\n  .py-xl-2 {\n    padding-top: 0.5rem !important;\n    padding-bottom: 0.5rem !important;\n  }\n  .py-xl-3 {\n    padding-top: 1rem !important;\n    padding-bottom: 1rem !important;\n  }\n  .py-xl-4 {\n    padding-top: 1.5rem !important;\n    padding-bottom: 1.5rem !important;\n  }\n  .py-xl-5 {\n    padding-top: 3rem !important;\n    padding-bottom: 3rem !important;\n  }\n  .pt-xl-0 {\n    padding-top: 0 !important;\n  }\n  .pt-xl-1 {\n    padding-top: 0.25rem !important;\n  }\n  .pt-xl-2 {\n    padding-top: 0.5rem !important;\n  }\n  .pt-xl-3 {\n    padding-top: 1rem !important;\n  }\n  .pt-xl-4 {\n    padding-top: 1.5rem !important;\n  }\n  .pt-xl-5 {\n    padding-top: 3rem !important;\n  }\n  .pe-xl-0 {\n    padding-right: 0 !important;\n  }\n  .pe-xl-1 {\n    padding-right: 0.25rem !important;\n  }\n  .pe-xl-2 {\n    padding-right: 0.5rem !important;\n  }\n  .pe-xl-3 {\n    padding-right: 1rem !important;\n  }\n  .pe-xl-4 {\n    padding-right: 1.5rem !important;\n  }\n  .pe-xl-5 {\n    padding-right: 3rem !important;\n  }\n  .pb-xl-0 {\n    padding-bottom: 0 !important;\n  }\n  .pb-xl-1 {\n    padding-bottom: 0.25rem !important;\n  }\n  .pb-xl-2 {\n    padding-bottom: 0.5rem !important;\n  }\n  .pb-xl-3 {\n    padding-bottom: 1rem !important;\n  }\n  .pb-xl-4 {\n    padding-bottom: 1.5rem !important;\n  }\n  .pb-xl-5 {\n    padding-bottom: 3rem !important;\n  }\n  .ps-xl-0 {\n    padding-left: 0 !important;\n  }\n  .ps-xl-1 {\n    padding-left: 0.25rem !important;\n  }\n  .ps-xl-2 {\n    padding-left: 0.5rem !important;\n  }\n  .ps-xl-3 {\n    padding-left: 1rem !important;\n  }\n  .ps-xl-4 {\n    padding-left: 1.5rem !important;\n  }\n  .ps-xl-5 {\n    padding-left: 3rem !important;\n  }\n  .text-xl-start {\n    text-align: left !important;\n  }\n  .text-xl-end {\n    text-align: right !important;\n  }\n  .text-xl-center {\n    text-align: center !important;\n  }\n}\n\n@media (min-width: 1400px) {\n  .float-xxl-start {\n    float: left !important;\n  }\n  .float-xxl-end {\n    float: right !important;\n  }\n  .float-xxl-none {\n    float: none !important;\n  }\n  .d-xxl-inline {\n    display: inline !important;\n  }\n  .d-xxl-inline-block {\n    display: inline-block !important;\n  }\n  .d-xxl-block {\n    display: block !important;\n  }\n  .d-xxl-grid {\n    display: grid !important;\n  }\n  .d-xxl-table {\n    display: table !important;\n  }\n  .d-xxl-table-row {\n    display: table-row !important;\n  }\n  .d-xxl-table-cell {\n    display: table-cell !important;\n  }\n  .d-xxl-flex {\n    display: -ms-flexbox !important;\n    display: flex !important;\n  }\n  .d-xxl-inline-flex {\n    display: -ms-inline-flexbox !important;\n    display: inline-flex !important;\n  }\n  .d-xxl-none {\n    display: none !important;\n  }\n  .flex-xxl-fill {\n    -ms-flex: 1 1 auto !important;\n    flex: 1 1 auto !important;\n  }\n  .flex-xxl-row {\n    -ms-flex-direction: row !important;\n    flex-direction: row !important;\n  }\n  .flex-xxl-column {\n    -ms-flex-direction: column !important;\n    flex-direction: column !important;\n  }\n  .flex-xxl-row-reverse {\n    -ms-flex-direction: row-reverse !important;\n    flex-direction: row-reverse !important;\n  }\n  .flex-xxl-column-reverse {\n    -ms-flex-direction: column-reverse !important;\n    flex-direction: column-reverse !important;\n  }\n  .flex-xxl-grow-0 {\n    -ms-flex-positive: 0 !important;\n    flex-grow: 0 !important;\n  }\n  .flex-xxl-grow-1 {\n    -ms-flex-positive: 1 !important;\n    flex-grow: 1 !important;\n  }\n  .flex-xxl-shrink-0 {\n    -ms-flex-negative: 0 !important;\n    flex-shrink: 0 !important;\n  }\n  .flex-xxl-shrink-1 {\n    -ms-flex-negative: 1 !important;\n    flex-shrink: 1 !important;\n  }\n  .flex-xxl-wrap {\n    -ms-flex-wrap: wrap !important;\n    flex-wrap: wrap !important;\n  }\n  .flex-xxl-nowrap {\n    -ms-flex-wrap: nowrap !important;\n    flex-wrap: nowrap !important;\n  }\n  .flex-xxl-wrap-reverse {\n    -ms-flex-wrap: wrap-reverse !important;\n    flex-wrap: wrap-reverse !important;\n  }\n  .gap-xxl-0 {\n    gap: 0 !important;\n  }\n  .gap-xxl-1 {\n    gap: 0.25rem !important;\n  }\n  .gap-xxl-2 {\n    gap: 0.5rem !important;\n  }\n  .gap-xxl-3 {\n    gap: 1rem !important;\n  }\n  .gap-xxl-4 {\n    gap: 1.5rem !important;\n  }\n  .gap-xxl-5 {\n    gap: 3rem !important;\n  }\n  .justify-content-xxl-start {\n    -ms-flex-pack: start !important;\n    justify-content: flex-start !important;\n  }\n  .justify-content-xxl-end {\n    -ms-flex-pack: end !important;\n    justify-content: flex-end !important;\n  }\n  .justify-content-xxl-center {\n    -ms-flex-pack: center !important;\n    justify-content: center !important;\n  }\n  .justify-content-xxl-between {\n    -ms-flex-pack: justify !important;\n    justify-content: space-between !important;\n  }\n  .justify-content-xxl-around {\n    -ms-flex-pack: distribute !important;\n    justify-content: space-around !important;\n  }\n  .justify-content-xxl-evenly {\n    -ms-flex-pack: space-evenly !important;\n    justify-content: space-evenly !important;\n  }\n  .align-items-xxl-start {\n    -ms-flex-align: start !important;\n    align-items: flex-start !important;\n  }\n  .align-items-xxl-end {\n    -ms-flex-align: end !important;\n    align-items: flex-end !important;\n  }\n  .align-items-xxl-center {\n    -ms-flex-align: center !important;\n    align-items: center !important;\n  }\n  .align-items-xxl-baseline {\n    -ms-flex-align: baseline !important;\n    align-items: baseline !important;\n  }\n  .align-items-xxl-stretch {\n    -ms-flex-align: stretch !important;\n    align-items: stretch !important;\n  }\n  .align-content-xxl-start {\n    -ms-flex-line-pack: start !important;\n    align-content: flex-start !important;\n  }\n  .align-content-xxl-end {\n    -ms-flex-line-pack: end !important;\n    align-content: flex-end !important;\n  }\n  .align-content-xxl-center {\n    -ms-flex-line-pack: center !important;\n    align-content: center !important;\n  }\n  .align-content-xxl-between {\n    -ms-flex-line-pack: justify !important;\n    align-content: space-between !important;\n  }\n  .align-content-xxl-around {\n    -ms-flex-line-pack: distribute !important;\n    align-content: space-around !important;\n  }\n  .align-content-xxl-stretch {\n    -ms-flex-line-pack: stretch !important;\n    align-content: stretch !important;\n  }\n  .align-self-xxl-auto {\n    -ms-flex-item-align: auto !important;\n    align-self: auto !important;\n  }\n  .align-self-xxl-start {\n    -ms-flex-item-align: start !important;\n    align-self: flex-start !important;\n  }\n  .align-self-xxl-end {\n    -ms-flex-item-align: end !important;\n    align-self: flex-end !important;\n  }\n  .align-self-xxl-center {\n    -ms-flex-item-align: center !important;\n    align-self: center !important;\n  }\n  .align-self-xxl-baseline {\n    -ms-flex-item-align: baseline !important;\n    align-self: baseline !important;\n  }\n  .align-self-xxl-stretch {\n    -ms-flex-item-align: stretch !important;\n    align-self: stretch !important;\n  }\n  .order-xxl-first {\n    -ms-flex-order: -1 !important;\n    order: -1 !important;\n  }\n  .order-xxl-0 {\n    -ms-flex-order: 0 !important;\n    order: 0 !important;\n  }\n  .order-xxl-1 {\n    -ms-flex-order: 1 !important;\n    order: 1 !important;\n  }\n  .order-xxl-2 {\n    -ms-flex-order: 2 !important;\n    order: 2 !important;\n  }\n  .order-xxl-3 {\n    -ms-flex-order: 3 !important;\n    order: 3 !important;\n  }\n  .order-xxl-4 {\n    -ms-flex-order: 4 !important;\n    order: 4 !important;\n  }\n  .order-xxl-5 {\n    -ms-flex-order: 5 !important;\n    order: 5 !important;\n  }\n  .order-xxl-last {\n    -ms-flex-order: 6 !important;\n    order: 6 !important;\n  }\n  .m-xxl-0 {\n    margin: 0 !important;\n  }\n  .m-xxl-1 {\n    margin: 0.25rem !important;\n  }\n  .m-xxl-2 {\n    margin: 0.5rem !important;\n  }\n  .m-xxl-3 {\n    margin: 1rem !important;\n  }\n  .m-xxl-4 {\n    margin: 1.5rem !important;\n  }\n  .m-xxl-5 {\n    margin: 3rem !important;\n  }\n  .m-xxl-auto {\n    margin: auto !important;\n  }\n  .mx-xxl-0 {\n    margin-right: 0 !important;\n    margin-left: 0 !important;\n  }\n  .mx-xxl-1 {\n    margin-right: 0.25rem !important;\n    margin-left: 0.25rem !important;\n  }\n  .mx-xxl-2 {\n    margin-right: 0.5rem !important;\n    margin-left: 0.5rem !important;\n  }\n  .mx-xxl-3 {\n    margin-right: 1rem !important;\n    margin-left: 1rem !important;\n  }\n  .mx-xxl-4 {\n    margin-right: 1.5rem !important;\n    margin-left: 1.5rem !important;\n  }\n  .mx-xxl-5 {\n    margin-right: 3rem !important;\n    margin-left: 3rem !important;\n  }\n  .mx-xxl-auto {\n    margin-right: auto !important;\n    margin-left: auto !important;\n  }\n  .my-xxl-0 {\n    margin-top: 0 !important;\n    margin-bottom: 0 !important;\n  }\n  .my-xxl-1 {\n    margin-top: 0.25rem !important;\n    margin-bottom: 0.25rem !important;\n  }\n  .my-xxl-2 {\n    margin-top: 0.5rem !important;\n    margin-bottom: 0.5rem !important;\n  }\n  .my-xxl-3 {\n    margin-top: 1rem !important;\n    margin-bottom: 1rem !important;\n  }\n  .my-xxl-4 {\n    margin-top: 1.5rem !important;\n    margin-bottom: 1.5rem !important;\n  }\n  .my-xxl-5 {\n    margin-top: 3rem !important;\n    margin-bottom: 3rem !important;\n  }\n  .my-xxl-auto {\n    margin-top: auto !important;\n    margin-bottom: auto !important;\n  }\n  .mt-xxl-0 {\n    margin-top: 0 !important;\n  }\n  .mt-xxl-1 {\n    margin-top: 0.25rem !important;\n  }\n  .mt-xxl-2 {\n    margin-top: 0.5rem !important;\n  }\n  .mt-xxl-3 {\n    margin-top: 1rem !important;\n  }\n  .mt-xxl-4 {\n    margin-top: 1.5rem !important;\n  }\n  .mt-xxl-5 {\n    margin-top: 3rem !important;\n  }\n  .mt-xxl-auto {\n    margin-top: auto !important;\n  }\n  .me-xxl-0 {\n    margin-right: 0 !important;\n  }\n  .me-xxl-1 {\n    margin-right: 0.25rem !important;\n  }\n  .me-xxl-2 {\n    margin-right: 0.5rem !important;\n  }\n  .me-xxl-3 {\n    margin-right: 1rem !important;\n  }\n  .me-xxl-4 {\n    margin-right: 1.5rem !important;\n  }\n  .me-xxl-5 {\n    margin-right: 3rem !important;\n  }\n  .me-xxl-auto {\n    margin-right: auto !important;\n  }\n  .mb-xxl-0 {\n    margin-bottom: 0 !important;\n  }\n  .mb-xxl-1 {\n    margin-bottom: 0.25rem !important;\n  }\n  .mb-xxl-2 {\n    margin-bottom: 0.5rem !important;\n  }\n  .mb-xxl-3 {\n    margin-bottom: 1rem !important;\n  }\n  .mb-xxl-4 {\n    margin-bottom: 1.5rem !important;\n  }\n  .mb-xxl-5 {\n    margin-bottom: 3rem !important;\n  }\n  .mb-xxl-auto {\n    margin-bottom: auto !important;\n  }\n  .ms-xxl-0 {\n    margin-left: 0 !important;\n  }\n  .ms-xxl-1 {\n    margin-left: 0.25rem !important;\n  }\n  .ms-xxl-2 {\n    margin-left: 0.5rem !important;\n  }\n  .ms-xxl-3 {\n    margin-left: 1rem !important;\n  }\n  .ms-xxl-4 {\n    margin-left: 1.5rem !important;\n  }\n  .ms-xxl-5 {\n    margin-left: 3rem !important;\n  }\n  .ms-xxl-auto {\n    margin-left: auto !important;\n  }\n  .p-xxl-0 {\n    padding: 0 !important;\n  }\n  .p-xxl-1 {\n    padding: 0.25rem !important;\n  }\n  .p-xxl-2 {\n    padding: 0.5rem !important;\n  }\n  .p-xxl-3 {\n    padding: 1rem !important;\n  }\n  .p-xxl-4 {\n    padding: 1.5rem !important;\n  }\n  .p-xxl-5 {\n    padding: 3rem !important;\n  }\n  .px-xxl-0 {\n    padding-right: 0 !important;\n    padding-left: 0 !important;\n  }\n  .px-xxl-1 {\n    padding-right: 0.25rem !important;\n    padding-left: 0.25rem !important;\n  }\n  .px-xxl-2 {\n    padding-right: 0.5rem !important;\n    padding-left: 0.5rem !important;\n  }\n  .px-xxl-3 {\n    padding-right: 1rem !important;\n    padding-left: 1rem !important;\n  }\n  .px-xxl-4 {\n    padding-right: 1.5rem !important;\n    padding-left: 1.5rem !important;\n  }\n  .px-xxl-5 {\n    padding-right: 3rem !important;\n    padding-left: 3rem !important;\n  }\n  .py-xxl-0 {\n    padding-top: 0 !important;\n    padding-bottom: 0 !important;\n  }\n  .py-xxl-1 {\n    padding-top: 0.25rem !important;\n    padding-bottom: 0.25rem !important;\n  }\n  .py-xxl-2 {\n    padding-top: 0.5rem !important;\n    padding-bottom: 0.5rem !important;\n  }\n  .py-xxl-3 {\n    padding-top: 1rem !important;\n    padding-bottom: 1rem !important;\n  }\n  .py-xxl-4 {\n    padding-top: 1.5rem !important;\n    padding-bottom: 1.5rem !important;\n  }\n  .py-xxl-5 {\n    padding-top: 3rem !important;\n    padding-bottom: 3rem !important;\n  }\n  .pt-xxl-0 {\n    padding-top: 0 !important;\n  }\n  .pt-xxl-1 {\n    padding-top: 0.25rem !important;\n  }\n  .pt-xxl-2 {\n    padding-top: 0.5rem !important;\n  }\n  .pt-xxl-3 {\n    padding-top: 1rem !important;\n  }\n  .pt-xxl-4 {\n    padding-top: 1.5rem !important;\n  }\n  .pt-xxl-5 {\n    padding-top: 3rem !important;\n  }\n  .pe-xxl-0 {\n    padding-right: 0 !important;\n  }\n  .pe-xxl-1 {\n    padding-right: 0.25rem !important;\n  }\n  .pe-xxl-2 {\n    padding-right: 0.5rem !important;\n  }\n  .pe-xxl-3 {\n    padding-right: 1rem !important;\n  }\n  .pe-xxl-4 {\n    padding-right: 1.5rem !important;\n  }\n  .pe-xxl-5 {\n    padding-right: 3rem !important;\n  }\n  .pb-xxl-0 {\n    padding-bottom: 0 !important;\n  }\n  .pb-xxl-1 {\n    padding-bottom: 0.25rem !important;\n  }\n  .pb-xxl-2 {\n    padding-bottom: 0.5rem !important;\n  }\n  .pb-xxl-3 {\n    padding-bottom: 1rem !important;\n  }\n  .pb-xxl-4 {\n    padding-bottom: 1.5rem !important;\n  }\n  .pb-xxl-5 {\n    padding-bottom: 3rem !important;\n  }\n  .ps-xxl-0 {\n    padding-left: 0 !important;\n  }\n  .ps-xxl-1 {\n    padding-left: 0.25rem !important;\n  }\n  .ps-xxl-2 {\n    padding-left: 0.5rem !important;\n  }\n  .ps-xxl-3 {\n    padding-left: 1rem !important;\n  }\n  .ps-xxl-4 {\n    padding-left: 1.5rem !important;\n  }\n  .ps-xxl-5 {\n    padding-left: 3rem !important;\n  }\n  .text-xxl-start {\n    text-align: left !important;\n  }\n  .text-xxl-end {\n    text-align: right !important;\n  }\n  .text-xxl-center {\n    text-align: center !important;\n  }\n}\n\n@media (min-width: 1200px) {\n  .fs-1 {\n    font-size: 2.75rem !important;\n  }\n  .fs-2 {\n    font-size: 2.2rem !important;\n  }\n  .fs-3 {\n    font-size: 1.925rem !important;\n  }\n  .fs-4 {\n    font-size: 1.65rem !important;\n  }\n  .fs-5 {\n    font-size: 1.375rem !important;\n  }\n}\n\n@media print {\n  .d-print-inline {\n    display: inline !important;\n  }\n  .d-print-inline-block {\n    display: inline-block !important;\n  }\n  .d-print-block {\n    display: block !important;\n  }\n  .d-print-grid {\n    display: grid !important;\n  }\n  .d-print-table {\n    display: table !important;\n  }\n  .d-print-table-row {\n    display: table-row !important;\n  }\n  .d-print-table-cell {\n    display: table-cell !important;\n  }\n  .d-print-flex {\n    display: -ms-flexbox !important;\n    display: flex !important;\n  }\n  .d-print-inline-flex {\n    display: -ms-inline-flexbox !important;\n    display: inline-flex !important;\n  }\n  .d-print-none {\n    display: none !important;\n  }\n}\n\n.navbar {\n  font-size: 0.9625rem;\n}\n\n.navbar.bg-dark {\n  background-color: #02b875 !important;\n}\n\n.navbar.bg-light {\n  background-color: #fff !important;\n  border: 1px solid rgba(0, 0, 0, 0.1);\n}\n\n.navbar.bg-light.navbar-fixed-top {\n  border-width: 0 0 1px;\n}\n\n.navbar.bg-light.navbar-fixed-bottom {\n  border-width: 1px 0 0;\n}\n\np {\n  font-family: Georgia, Cambria, \"Times New Roman\", Times, serif;\n}\n\nblockquote {\n  font-style: italic;\n}\n\nfooter {\n  font-size: 0.9625rem;\n}\n\n.lead {\n  color: #868e96;\n  font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, \"Noto Sans\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n}\n\ntable,\n.table {\n  font-size: 0.9625rem;\n}\n\n.nav,\n.breadcrumb,\n.pagination {\n  font-size: 0.9625rem;\n}\n\n.dropdown-menu {\n  font-size: 0.9625rem;\n}\n\n.alert {\n  color: #fff;\n  font-size: 0.9625rem;\n}\n\n.alert,\n.alert p {\n  font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, \"Noto Sans\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n}\n\n.alert a,\n.alert .alert-link {\n  color: #fff;\n  font-weight: 400;\n  text-decoration: underline;\n}\n\n.alert-primary {\n  background-color: #4582ec;\n}\n\n.alert-secondary {\n  background-color: #adb5bd;\n}\n\n.alert-success {\n  background-color: #02b875;\n}\n\n.alert-info {\n  background-color: #17a2b8;\n}\n\n.alert-warning {\n  background-color: #f0ad4e;\n}\n\n.alert-danger {\n  background-color: #d9534f;\n}\n\n.alert-light {\n  background-color: #f8f9fa;\n}\n\n.alert-dark {\n  background-color: #343a40;\n}\n\n.alert-light,\n.alert-light a,\n.alert-light .alert-link {\n  color: #343a40;\n}\n\n.badge.bg-light {\n  color: #343a40;\n}\n\n.list-group {\n  font-size: 0.9625rem;\n}\n"
  },
  {
    "path": "src/sourceDev.WebApp/SharedThemes/litera/wwwroot/css/fontawesome-all.css",
    "content": "/*!\n * Font Awesome Free 5.0.8 by @fontawesome - https://fontawesome.com\n * License - https://fontawesome.com/license (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)\n */\n.fa,\n.fas,\n.far,\n.fal,\n.fab {\n  -moz-osx-font-smoothing: grayscale;\n  -webkit-font-smoothing: antialiased;\n  display: inline-block;\n  font-style: normal;\n  font-variant: normal;\n  text-rendering: auto;\n  line-height: 1; }\n\n.fa-lg {\n  font-size: 1.33333em;\n  line-height: 0.75em;\n  vertical-align: -.0667em; }\n\n.fa-xs {\n  font-size: .75em; }\n\n.fa-sm {\n  font-size: .875em; }\n\n.fa-1x {\n  font-size: 1em; }\n\n.fa-2x {\n  font-size: 2em; }\n\n.fa-3x {\n  font-size: 3em; }\n\n.fa-4x {\n  font-size: 4em; }\n\n.fa-5x {\n  font-size: 5em; }\n\n.fa-6x {\n  font-size: 6em; }\n\n.fa-7x {\n  font-size: 7em; }\n\n.fa-8x {\n  font-size: 8em; }\n\n.fa-9x {\n  font-size: 9em; }\n\n.fa-10x {\n  font-size: 10em; }\n\n.fa-fw {\n  text-align: center;\n  width: 1.25em; }\n\n.fa-ul {\n  list-style-type: none;\n  margin-left: 2.5em;\n  padding-left: 0; }\n  .fa-ul > li {\n    position: relative; }\n\n.fa-li {\n  left: -2em;\n  position: absolute;\n  text-align: center;\n  width: 2em;\n  line-height: inherit; }\n\n.fa-border {\n  border: solid 0.08em #eee;\n  border-radius: .1em;\n  padding: .2em .25em .15em; }\n\n.fa-pull-left {\n  float: left; }\n\n.fa-pull-right {\n  float: right; }\n\n.fa.fa-pull-left,\n.fas.fa-pull-left,\n.far.fa-pull-left,\n.fal.fa-pull-left,\n.fab.fa-pull-left {\n  margin-right: .3em; }\n\n.fa.fa-pull-right,\n.fas.fa-pull-right,\n.far.fa-pull-right,\n.fal.fa-pull-right,\n.fab.fa-pull-right {\n  margin-left: .3em; }\n\n.fa-spin {\n  -webkit-animation: fa-spin 2s infinite linear;\n          animation: fa-spin 2s infinite linear; }\n\n.fa-pulse {\n  -webkit-animation: fa-spin 1s infinite steps(8);\n          animation: fa-spin 1s infinite steps(8); }\n\n@-webkit-keyframes fa-spin {\n  0% {\n    -webkit-transform: rotate(0deg);\n            transform: rotate(0deg); }\n  100% {\n    -webkit-transform: rotate(360deg);\n            transform: rotate(360deg); } }\n\n@keyframes fa-spin {\n  0% {\n    -webkit-transform: rotate(0deg);\n            transform: rotate(0deg); }\n  100% {\n    -webkit-transform: rotate(360deg);\n            transform: rotate(360deg); } }\n\n.fa-rotate-90 {\n  -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)\";\n  -webkit-transform: rotate(90deg);\n          transform: rotate(90deg); }\n\n.fa-rotate-180 {\n  -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)\";\n  -webkit-transform: rotate(180deg);\n          transform: rotate(180deg); }\n\n.fa-rotate-270 {\n  -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)\";\n  -webkit-transform: rotate(270deg);\n          transform: rotate(270deg); }\n\n.fa-flip-horizontal {\n  -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)\";\n  -webkit-transform: scale(-1, 1);\n          transform: scale(-1, 1); }\n\n.fa-flip-vertical {\n  -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)\";\n  -webkit-transform: scale(1, -1);\n          transform: scale(1, -1); }\n\n.fa-flip-horizontal.fa-flip-vertical {\n  -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)\";\n  -webkit-transform: scale(-1, -1);\n          transform: scale(-1, -1); }\n\n:root .fa-rotate-90,\n:root .fa-rotate-180,\n:root .fa-rotate-270,\n:root .fa-flip-horizontal,\n:root .fa-flip-vertical {\n  -webkit-filter: none;\n          filter: none; }\n\n.fa-stack {\n  display: inline-block;\n  height: 2em;\n  line-height: 2em;\n  position: relative;\n  vertical-align: middle;\n  width: 2em; }\n\n.fa-stack-1x,\n.fa-stack-2x {\n  left: 0;\n  position: absolute;\n  text-align: center;\n  width: 100%; }\n\n.fa-stack-1x {\n  line-height: inherit; }\n\n.fa-stack-2x {\n  font-size: 2em; }\n\n.fa-inverse {\n  color: #fff; }\n\n/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen\nreaders do not read off random characters that represent icons */\n.fa-500px:before {\n  content: \"\\f26e\"; }\n\n.fa-accessible-icon:before {\n  content: \"\\f368\"; }\n\n.fa-accusoft:before {\n  content: \"\\f369\"; }\n\n.fa-address-book:before {\n  content: \"\\f2b9\"; }\n\n.fa-address-card:before {\n  content: \"\\f2bb\"; }\n\n.fa-adjust:before {\n  content: \"\\f042\"; }\n\n.fa-adn:before {\n  content: \"\\f170\"; }\n\n.fa-adversal:before {\n  content: \"\\f36a\"; }\n\n.fa-affiliatetheme:before {\n  content: \"\\f36b\"; }\n\n.fa-algolia:before {\n  content: \"\\f36c\"; }\n\n.fa-align-center:before {\n  content: \"\\f037\"; }\n\n.fa-align-justify:before {\n  content: \"\\f039\"; }\n\n.fa-align-left:before {\n  content: \"\\f036\"; }\n\n.fa-align-right:before {\n  content: \"\\f038\"; }\n\n.fa-amazon:before {\n  content: \"\\f270\"; }\n\n.fa-amazon-pay:before {\n  content: \"\\f42c\"; }\n\n.fa-ambulance:before {\n  content: \"\\f0f9\"; }\n\n.fa-american-sign-language-interpreting:before {\n  content: \"\\f2a3\"; }\n\n.fa-amilia:before {\n  content: \"\\f36d\"; }\n\n.fa-anchor:before {\n  content: \"\\f13d\"; }\n\n.fa-android:before {\n  content: \"\\f17b\"; }\n\n.fa-angellist:before {\n  content: \"\\f209\"; }\n\n.fa-angle-double-down:before {\n  content: \"\\f103\"; }\n\n.fa-angle-double-left:before {\n  content: \"\\f100\"; }\n\n.fa-angle-double-right:before {\n  content: \"\\f101\"; }\n\n.fa-angle-double-up:before {\n  content: \"\\f102\"; }\n\n.fa-angle-down:before {\n  content: \"\\f107\"; }\n\n.fa-angle-left:before {\n  content: \"\\f104\"; }\n\n.fa-angle-right:before {\n  content: \"\\f105\"; }\n\n.fa-angle-up:before {\n  content: \"\\f106\"; }\n\n.fa-angrycreative:before {\n  content: \"\\f36e\"; }\n\n.fa-angular:before {\n  content: \"\\f420\"; }\n\n.fa-app-store:before {\n  content: \"\\f36f\"; }\n\n.fa-app-store-ios:before {\n  content: \"\\f370\"; }\n\n.fa-apper:before {\n  content: \"\\f371\"; }\n\n.fa-apple:before {\n  content: \"\\f179\"; }\n\n.fa-apple-pay:before {\n  content: \"\\f415\"; }\n\n.fa-archive:before {\n  content: \"\\f187\"; }\n\n.fa-arrow-alt-circle-down:before {\n  content: \"\\f358\"; }\n\n.fa-arrow-alt-circle-left:before {\n  content: \"\\f359\"; }\n\n.fa-arrow-alt-circle-right:before {\n  content: \"\\f35a\"; }\n\n.fa-arrow-alt-circle-up:before {\n  content: \"\\f35b\"; }\n\n.fa-arrow-circle-down:before {\n  content: \"\\f0ab\"; }\n\n.fa-arrow-circle-left:before {\n  content: \"\\f0a8\"; }\n\n.fa-arrow-circle-right:before {\n  content: \"\\f0a9\"; }\n\n.fa-arrow-circle-up:before {\n  content: \"\\f0aa\"; }\n\n.fa-arrow-down:before {\n  content: \"\\f063\"; }\n\n.fa-arrow-left:before {\n  content: \"\\f060\"; }\n\n.fa-arrow-right:before {\n  content: \"\\f061\"; }\n\n.fa-arrow-up:before {\n  content: \"\\f062\"; }\n\n.fa-arrows-alt:before {\n  content: \"\\f0b2\"; }\n\n.fa-arrows-alt-h:before {\n  content: \"\\f337\"; }\n\n.fa-arrows-alt-v:before {\n  content: \"\\f338\"; }\n\n.fa-assistive-listening-systems:before {\n  content: \"\\f2a2\"; }\n\n.fa-asterisk:before {\n  content: \"\\f069\"; }\n\n.fa-asymmetrik:before {\n  content: \"\\f372\"; }\n\n.fa-at:before {\n  content: \"\\f1fa\"; }\n\n.fa-audible:before {\n  content: \"\\f373\"; }\n\n.fa-audio-description:before {\n  content: \"\\f29e\"; }\n\n.fa-autoprefixer:before {\n  content: \"\\f41c\"; }\n\n.fa-avianex:before {\n  content: \"\\f374\"; }\n\n.fa-aviato:before {\n  content: \"\\f421\"; }\n\n.fa-aws:before {\n  content: \"\\f375\"; }\n\n.fa-backward:before {\n  content: \"\\f04a\"; }\n\n.fa-balance-scale:before {\n  content: \"\\f24e\"; }\n\n.fa-ban:before {\n  content: \"\\f05e\"; }\n\n.fa-band-aid:before {\n  content: \"\\f462\"; }\n\n.fa-bandcamp:before {\n  content: \"\\f2d5\"; }\n\n.fa-barcode:before {\n  content: \"\\f02a\"; }\n\n.fa-bars:before {\n  content: \"\\f0c9\"; }\n\n.fa-baseball-ball:before {\n  content: \"\\f433\"; }\n\n.fa-basketball-ball:before {\n  content: \"\\f434\"; }\n\n.fa-bath:before {\n  content: \"\\f2cd\"; }\n\n.fa-battery-empty:before {\n  content: \"\\f244\"; }\n\n.fa-battery-full:before {\n  content: \"\\f240\"; }\n\n.fa-battery-half:before {\n  content: \"\\f242\"; }\n\n.fa-battery-quarter:before {\n  content: \"\\f243\"; }\n\n.fa-battery-three-quarters:before {\n  content: \"\\f241\"; }\n\n.fa-bed:before {\n  content: \"\\f236\"; }\n\n.fa-beer:before {\n  content: \"\\f0fc\"; }\n\n.fa-behance:before {\n  content: \"\\f1b4\"; }\n\n.fa-behance-square:before {\n  content: \"\\f1b5\"; }\n\n.fa-bell:before {\n  content: \"\\f0f3\"; }\n\n.fa-bell-slash:before {\n  content: \"\\f1f6\"; }\n\n.fa-bicycle:before {\n  content: \"\\f206\"; }\n\n.fa-bimobject:before {\n  content: \"\\f378\"; }\n\n.fa-binoculars:before {\n  content: \"\\f1e5\"; }\n\n.fa-birthday-cake:before {\n  content: \"\\f1fd\"; }\n\n.fa-bitbucket:before {\n  content: \"\\f171\"; }\n\n.fa-bitcoin:before {\n  content: \"\\f379\"; }\n\n.fa-bity:before {\n  content: \"\\f37a\"; }\n\n.fa-black-tie:before {\n  content: \"\\f27e\"; }\n\n.fa-blackberry:before {\n  content: \"\\f37b\"; }\n\n.fa-blind:before {\n  content: \"\\f29d\"; }\n\n.fa-blogger:before {\n  content: \"\\f37c\"; }\n\n.fa-blogger-b:before {\n  content: \"\\f37d\"; }\n\n.fa-bluetooth:before {\n  content: \"\\f293\"; }\n\n.fa-bluetooth-b:before {\n  content: \"\\f294\"; }\n\n.fa-bold:before {\n  content: \"\\f032\"; }\n\n.fa-bolt:before {\n  content: \"\\f0e7\"; }\n\n.fa-bomb:before {\n  content: \"\\f1e2\"; }\n\n.fa-book:before {\n  content: \"\\f02d\"; }\n\n.fa-bookmark:before {\n  content: \"\\f02e\"; }\n\n.fa-bowling-ball:before {\n  content: \"\\f436\"; }\n\n.fa-box:before {\n  content: \"\\f466\"; }\n\n.fa-boxes:before {\n  content: \"\\f468\"; }\n\n.fa-braille:before {\n  content: \"\\f2a1\"; }\n\n.fa-briefcase:before {\n  content: \"\\f0b1\"; }\n\n.fa-btc:before {\n  content: \"\\f15a\"; }\n\n.fa-bug:before {\n  content: \"\\f188\"; }\n\n.fa-building:before {\n  content: \"\\f1ad\"; }\n\n.fa-bullhorn:before {\n  content: \"\\f0a1\"; }\n\n.fa-bullseye:before {\n  content: \"\\f140\"; }\n\n.fa-buromobelexperte:before {\n  content: \"\\f37f\"; }\n\n.fa-bus:before {\n  content: \"\\f207\"; }\n\n.fa-buysellads:before {\n  content: \"\\f20d\"; }\n\n.fa-calculator:before {\n  content: \"\\f1ec\"; }\n\n.fa-calendar:before {\n  content: \"\\f133\"; }\n\n.fa-calendar-alt:before {\n  content: \"\\f073\"; }\n\n.fa-calendar-check:before {\n  content: \"\\f274\"; }\n\n.fa-calendar-minus:before {\n  content: \"\\f272\"; }\n\n.fa-calendar-plus:before {\n  content: \"\\f271\"; }\n\n.fa-calendar-times:before {\n  content: \"\\f273\"; }\n\n.fa-camera:before {\n  content: \"\\f030\"; }\n\n.fa-camera-retro:before {\n  content: \"\\f083\"; }\n\n.fa-car:before {\n  content: \"\\f1b9\"; }\n\n.fa-caret-down:before {\n  content: \"\\f0d7\"; }\n\n.fa-caret-left:before {\n  content: \"\\f0d9\"; }\n\n.fa-caret-right:before {\n  content: \"\\f0da\"; }\n\n.fa-caret-square-down:before {\n  content: \"\\f150\"; }\n\n.fa-caret-square-left:before {\n  content: \"\\f191\"; }\n\n.fa-caret-square-right:before {\n  content: \"\\f152\"; }\n\n.fa-caret-square-up:before {\n  content: \"\\f151\"; }\n\n.fa-caret-up:before {\n  content: \"\\f0d8\"; }\n\n.fa-cart-arrow-down:before {\n  content: \"\\f218\"; }\n\n.fa-cart-plus:before {\n  content: \"\\f217\"; }\n\n.fa-cc-amazon-pay:before {\n  content: \"\\f42d\"; }\n\n.fa-cc-amex:before {\n  content: \"\\f1f3\"; }\n\n.fa-cc-apple-pay:before {\n  content: \"\\f416\"; }\n\n.fa-cc-diners-club:before {\n  content: \"\\f24c\"; }\n\n.fa-cc-discover:before {\n  content: \"\\f1f2\"; }\n\n.fa-cc-jcb:before {\n  content: \"\\f24b\"; }\n\n.fa-cc-mastercard:before {\n  content: \"\\f1f1\"; }\n\n.fa-cc-paypal:before {\n  content: \"\\f1f4\"; }\n\n.fa-cc-stripe:before {\n  content: \"\\f1f5\"; }\n\n.fa-cc-visa:before {\n  content: \"\\f1f0\"; }\n\n.fa-centercode:before {\n  content: \"\\f380\"; }\n\n.fa-certificate:before {\n  content: \"\\f0a3\"; }\n\n.fa-chart-area:before {\n  content: \"\\f1fe\"; }\n\n.fa-chart-bar:before {\n  content: \"\\f080\"; }\n\n.fa-chart-line:before {\n  content: \"\\f201\"; }\n\n.fa-chart-pie:before {\n  content: \"\\f200\"; }\n\n.fa-check:before {\n  content: \"\\f00c\"; }\n\n.fa-check-circle:before {\n  content: \"\\f058\"; }\n\n.fa-check-square:before {\n  content: \"\\f14a\"; }\n\n.fa-chess:before {\n  content: \"\\f439\"; }\n\n.fa-chess-bishop:before {\n  content: \"\\f43a\"; }\n\n.fa-chess-board:before {\n  content: \"\\f43c\"; }\n\n.fa-chess-king:before {\n  content: \"\\f43f\"; }\n\n.fa-chess-knight:before {\n  content: \"\\f441\"; }\n\n.fa-chess-pawn:before {\n  content: \"\\f443\"; }\n\n.fa-chess-queen:before {\n  content: \"\\f445\"; }\n\n.fa-chess-rook:before {\n  content: \"\\f447\"; }\n\n.fa-chevron-circle-down:before {\n  content: \"\\f13a\"; }\n\n.fa-chevron-circle-left:before {\n  content: \"\\f137\"; }\n\n.fa-chevron-circle-right:before {\n  content: \"\\f138\"; }\n\n.fa-chevron-circle-up:before {\n  content: \"\\f139\"; }\n\n.fa-chevron-down:before {\n  content: \"\\f078\"; }\n\n.fa-chevron-left:before {\n  content: \"\\f053\"; }\n\n.fa-chevron-right:before {\n  content: \"\\f054\"; }\n\n.fa-chevron-up:before {\n  content: \"\\f077\"; }\n\n.fa-child:before {\n  content: \"\\f1ae\"; }\n\n.fa-chrome:before {\n  content: \"\\f268\"; }\n\n.fa-circle:before {\n  content: \"\\f111\"; }\n\n.fa-circle-notch:before {\n  content: \"\\f1ce\"; }\n\n.fa-clipboard:before {\n  content: \"\\f328\"; }\n\n.fa-clipboard-check:before {\n  content: \"\\f46c\"; }\n\n.fa-clipboard-list:before {\n  content: \"\\f46d\"; }\n\n.fa-clock:before {\n  content: \"\\f017\"; }\n\n.fa-clone:before {\n  content: \"\\f24d\"; }\n\n.fa-closed-captioning:before {\n  content: \"\\f20a\"; }\n\n.fa-cloud:before {\n  content: \"\\f0c2\"; }\n\n.fa-cloud-download-alt:before {\n  content: \"\\f381\"; }\n\n.fa-cloud-upload-alt:before {\n  content: \"\\f382\"; }\n\n.fa-cloudscale:before {\n  content: \"\\f383\"; }\n\n.fa-cloudsmith:before {\n  content: \"\\f384\"; }\n\n.fa-cloudversify:before {\n  content: \"\\f385\"; }\n\n.fa-code:before {\n  content: \"\\f121\"; }\n\n.fa-code-branch:before {\n  content: \"\\f126\"; }\n\n.fa-codepen:before {\n  content: \"\\f1cb\"; }\n\n.fa-codiepie:before {\n  content: \"\\f284\"; }\n\n.fa-coffee:before {\n  content: \"\\f0f4\"; }\n\n.fa-cog:before {\n  content: \"\\f013\"; }\n\n.fa-cogs:before {\n  content: \"\\f085\"; }\n\n.fa-columns:before {\n  content: \"\\f0db\"; }\n\n.fa-comment:before {\n  content: \"\\f075\"; }\n\n.fa-comment-alt:before {\n  content: \"\\f27a\"; }\n\n.fa-comments:before {\n  content: \"\\f086\"; }\n\n.fa-compass:before {\n  content: \"\\f14e\"; }\n\n.fa-compress:before {\n  content: \"\\f066\"; }\n\n.fa-connectdevelop:before {\n  content: \"\\f20e\"; }\n\n.fa-contao:before {\n  content: \"\\f26d\"; }\n\n.fa-copy:before {\n  content: \"\\f0c5\"; }\n\n.fa-copyright:before {\n  content: \"\\f1f9\"; }\n\n.fa-cpanel:before {\n  content: \"\\f388\"; }\n\n.fa-creative-commons:before {\n  content: \"\\f25e\"; }\n\n.fa-credit-card:before {\n  content: \"\\f09d\"; }\n\n.fa-crop:before {\n  content: \"\\f125\"; }\n\n.fa-crosshairs:before {\n  content: \"\\f05b\"; }\n\n.fa-css3:before {\n  content: \"\\f13c\"; }\n\n.fa-css3-alt:before {\n  content: \"\\f38b\"; }\n\n.fa-cube:before {\n  content: \"\\f1b2\"; }\n\n.fa-cubes:before {\n  content: \"\\f1b3\"; }\n\n.fa-cut:before {\n  content: \"\\f0c4\"; }\n\n.fa-cuttlefish:before {\n  content: \"\\f38c\"; }\n\n.fa-d-and-d:before {\n  content: \"\\f38d\"; }\n\n.fa-dashcube:before {\n  content: \"\\f210\"; }\n\n.fa-database:before {\n  content: \"\\f1c0\"; }\n\n.fa-deaf:before {\n  content: \"\\f2a4\"; }\n\n.fa-delicious:before {\n  content: \"\\f1a5\"; }\n\n.fa-deploydog:before {\n  content: \"\\f38e\"; }\n\n.fa-deskpro:before {\n  content: \"\\f38f\"; }\n\n.fa-desktop:before {\n  content: \"\\f108\"; }\n\n.fa-deviantart:before {\n  content: \"\\f1bd\"; }\n\n.fa-digg:before {\n  content: \"\\f1a6\"; }\n\n.fa-digital-ocean:before {\n  content: \"\\f391\"; }\n\n.fa-discord:before {\n  content: \"\\f392\"; }\n\n.fa-discourse:before {\n  content: \"\\f393\"; }\n\n.fa-dna:before {\n  content: \"\\f471\"; }\n\n.fa-dochub:before {\n  content: \"\\f394\"; }\n\n.fa-docker:before {\n  content: \"\\f395\"; }\n\n.fa-dollar-sign:before {\n  content: \"\\f155\"; }\n\n.fa-dolly:before {\n  content: \"\\f472\"; }\n\n.fa-dolly-flatbed:before {\n  content: \"\\f474\"; }\n\n.fa-dot-circle:before {\n  content: \"\\f192\"; }\n\n.fa-download:before {\n  content: \"\\f019\"; }\n\n.fa-draft2digital:before {\n  content: \"\\f396\"; }\n\n.fa-dribbble:before {\n  content: \"\\f17d\"; }\n\n.fa-dribbble-square:before {\n  content: \"\\f397\"; }\n\n.fa-dropbox:before {\n  content: \"\\f16b\"; }\n\n.fa-drupal:before {\n  content: \"\\f1a9\"; }\n\n.fa-dyalog:before {\n  content: \"\\f399\"; }\n\n.fa-earlybirds:before {\n  content: \"\\f39a\"; }\n\n.fa-edge:before {\n  content: \"\\f282\"; }\n\n.fa-edit:before {\n  content: \"\\f044\"; }\n\n.fa-eject:before {\n  content: \"\\f052\"; }\n\n.fa-elementor:before {\n  content: \"\\f430\"; }\n\n.fa-ellipsis-h:before {\n  content: \"\\f141\"; }\n\n.fa-ellipsis-v:before {\n  content: \"\\f142\"; }\n\n.fa-ember:before {\n  content: \"\\f423\"; }\n\n.fa-empire:before {\n  content: \"\\f1d1\"; }\n\n.fa-envelope:before {\n  content: \"\\f0e0\"; }\n\n.fa-envelope-open:before {\n  content: \"\\f2b6\"; }\n\n.fa-envelope-square:before {\n  content: \"\\f199\"; }\n\n.fa-envira:before {\n  content: \"\\f299\"; }\n\n.fa-eraser:before {\n  content: \"\\f12d\"; }\n\n.fa-erlang:before {\n  content: \"\\f39d\"; }\n\n.fa-ethereum:before {\n  content: \"\\f42e\"; }\n\n.fa-etsy:before {\n  content: \"\\f2d7\"; }\n\n.fa-euro-sign:before {\n  content: \"\\f153\"; }\n\n.fa-exchange-alt:before {\n  content: \"\\f362\"; }\n\n.fa-exclamation:before {\n  content: \"\\f12a\"; }\n\n.fa-exclamation-circle:before {\n  content: \"\\f06a\"; }\n\n.fa-exclamation-triangle:before {\n  content: \"\\f071\"; }\n\n.fa-expand:before {\n  content: \"\\f065\"; }\n\n.fa-expand-arrows-alt:before {\n  content: \"\\f31e\"; }\n\n.fa-expeditedssl:before {\n  content: \"\\f23e\"; }\n\n.fa-external-link-alt:before {\n  content: \"\\f35d\"; }\n\n.fa-external-link-square-alt:before {\n  content: \"\\f360\"; }\n\n.fa-eye:before {\n  content: \"\\f06e\"; }\n\n.fa-eye-dropper:before {\n  content: \"\\f1fb\"; }\n\n.fa-eye-slash:before {\n  content: \"\\f070\"; }\n\n.fa-facebook:before {\n  content: \"\\f09a\"; }\n\n.fa-facebook-f:before {\n  content: \"\\f39e\"; }\n\n.fa-facebook-messenger:before {\n  content: \"\\f39f\"; }\n\n.fa-facebook-square:before {\n  content: \"\\f082\"; }\n\n.fa-fast-backward:before {\n  content: \"\\f049\"; }\n\n.fa-fast-forward:before {\n  content: \"\\f050\"; }\n\n.fa-fax:before {\n  content: \"\\f1ac\"; }\n\n.fa-female:before {\n  content: \"\\f182\"; }\n\n.fa-fighter-jet:before {\n  content: \"\\f0fb\"; }\n\n.fa-file:before {\n  content: \"\\f15b\"; }\n\n.fa-file-alt:before {\n  content: \"\\f15c\"; }\n\n.fa-file-archive:before {\n  content: \"\\f1c6\"; }\n\n.fa-file-audio:before {\n  content: \"\\f1c7\"; }\n\n.fa-file-code:before {\n  content: \"\\f1c9\"; }\n\n.fa-file-excel:before {\n  content: \"\\f1c3\"; }\n\n.fa-file-image:before {\n  content: \"\\f1c5\"; }\n\n.fa-file-pdf:before {\n  content: \"\\f1c1\"; }\n\n.fa-file-powerpoint:before {\n  content: \"\\f1c4\"; }\n\n.fa-file-video:before {\n  content: \"\\f1c8\"; }\n\n.fa-file-word:before {\n  content: \"\\f1c2\"; }\n\n.fa-film:before {\n  content: \"\\f008\"; }\n\n.fa-filter:before {\n  content: \"\\f0b0\"; }\n\n.fa-fire:before {\n  content: \"\\f06d\"; }\n\n.fa-fire-extinguisher:before {\n  content: \"\\f134\"; }\n\n.fa-firefox:before {\n  content: \"\\f269\"; }\n\n.fa-first-aid:before {\n  content: \"\\f479\"; }\n\n.fa-first-order:before {\n  content: \"\\f2b0\"; }\n\n.fa-firstdraft:before {\n  content: \"\\f3a1\"; }\n\n.fa-flag:before {\n  content: \"\\f024\"; }\n\n.fa-flag-checkered:before {\n  content: \"\\f11e\"; }\n\n.fa-flask:before {\n  content: \"\\f0c3\"; }\n\n.fa-flickr:before {\n  content: \"\\f16e\"; }\n\n.fa-flipboard:before {\n  content: \"\\f44d\"; }\n\n.fa-fly:before {\n  content: \"\\f417\"; }\n\n.fa-folder:before {\n  content: \"\\f07b\"; }\n\n.fa-folder-open:before {\n  content: \"\\f07c\"; }\n\n.fa-font:before {\n  content: \"\\f031\"; }\n\n.fa-font-awesome:before {\n  content: \"\\f2b4\"; }\n\n.fa-font-awesome-alt:before {\n  content: \"\\f35c\"; }\n\n.fa-font-awesome-flag:before {\n  content: \"\\f425\"; }\n\n.fa-fonticons:before {\n  content: \"\\f280\"; }\n\n.fa-fonticons-fi:before {\n  content: \"\\f3a2\"; }\n\n.fa-football-ball:before {\n  content: \"\\f44e\"; }\n\n.fa-fort-awesome:before {\n  content: \"\\f286\"; }\n\n.fa-fort-awesome-alt:before {\n  content: \"\\f3a3\"; }\n\n.fa-forumbee:before {\n  content: \"\\f211\"; }\n\n.fa-forward:before {\n  content: \"\\f04e\"; }\n\n.fa-foursquare:before {\n  content: \"\\f180\"; }\n\n.fa-free-code-camp:before {\n  content: \"\\f2c5\"; }\n\n.fa-freebsd:before {\n  content: \"\\f3a4\"; }\n\n.fa-frown:before {\n  content: \"\\f119\"; }\n\n.fa-futbol:before {\n  content: \"\\f1e3\"; }\n\n.fa-gamepad:before {\n  content: \"\\f11b\"; }\n\n.fa-gavel:before {\n  content: \"\\f0e3\"; }\n\n.fa-gem:before {\n  content: \"\\f3a5\"; }\n\n.fa-genderless:before {\n  content: \"\\f22d\"; }\n\n.fa-get-pocket:before {\n  content: \"\\f265\"; }\n\n.fa-gg:before {\n  content: \"\\f260\"; }\n\n.fa-gg-circle:before {\n  content: \"\\f261\"; }\n\n.fa-gift:before {\n  content: \"\\f06b\"; }\n\n.fa-git:before {\n  content: \"\\f1d3\"; }\n\n.fa-git-square:before {\n  content: \"\\f1d2\"; }\n\n.fa-github:before {\n  content: \"\\f09b\"; }\n\n.fa-github-alt:before {\n  content: \"\\f113\"; }\n\n.fa-github-square:before {\n  content: \"\\f092\"; }\n\n.fa-gitkraken:before {\n  content: \"\\f3a6\"; }\n\n.fa-gitlab:before {\n  content: \"\\f296\"; }\n\n.fa-gitter:before {\n  content: \"\\f426\"; }\n\n.fa-glass-martini:before {\n  content: \"\\f000\"; }\n\n.fa-glide:before {\n  content: \"\\f2a5\"; }\n\n.fa-glide-g:before {\n  content: \"\\f2a6\"; }\n\n.fa-globe:before {\n  content: \"\\f0ac\"; }\n\n.fa-gofore:before {\n  content: \"\\f3a7\"; }\n\n.fa-golf-ball:before {\n  content: \"\\f450\"; }\n\n.fa-goodreads:before {\n  content: \"\\f3a8\"; }\n\n.fa-goodreads-g:before {\n  content: \"\\f3a9\"; }\n\n.fa-google:before {\n  content: \"\\f1a0\"; }\n\n.fa-google-drive:before {\n  content: \"\\f3aa\"; }\n\n.fa-google-play:before {\n  content: \"\\f3ab\"; }\n\n.fa-google-plus:before {\n  content: \"\\f2b3\"; }\n\n.fa-google-plus-g:before {\n  content: \"\\f0d5\"; }\n\n.fa-google-plus-square:before {\n  content: \"\\f0d4\"; }\n\n.fa-google-wallet:before {\n  content: \"\\f1ee\"; }\n\n.fa-graduation-cap:before {\n  content: \"\\f19d\"; }\n\n.fa-gratipay:before {\n  content: \"\\f184\"; }\n\n.fa-grav:before {\n  content: \"\\f2d6\"; }\n\n.fa-gripfire:before {\n  content: \"\\f3ac\"; }\n\n.fa-grunt:before {\n  content: \"\\f3ad\"; }\n\n.fa-gulp:before {\n  content: \"\\f3ae\"; }\n\n.fa-h-square:before {\n  content: \"\\f0fd\"; }\n\n.fa-hacker-news:before {\n  content: \"\\f1d4\"; }\n\n.fa-hacker-news-square:before {\n  content: \"\\f3af\"; }\n\n.fa-hand-lizard:before {\n  content: \"\\f258\"; }\n\n.fa-hand-paper:before {\n  content: \"\\f256\"; }\n\n.fa-hand-peace:before {\n  content: \"\\f25b\"; }\n\n.fa-hand-point-down:before {\n  content: \"\\f0a7\"; }\n\n.fa-hand-point-left:before {\n  content: \"\\f0a5\"; }\n\n.fa-hand-point-right:before {\n  content: \"\\f0a4\"; }\n\n.fa-hand-point-up:before {\n  content: \"\\f0a6\"; }\n\n.fa-hand-pointer:before {\n  content: \"\\f25a\"; }\n\n.fa-hand-rock:before {\n  content: \"\\f255\"; }\n\n.fa-hand-scissors:before {\n  content: \"\\f257\"; }\n\n.fa-hand-spock:before {\n  content: \"\\f259\"; }\n\n.fa-handshake:before {\n  content: \"\\f2b5\"; }\n\n.fa-hashtag:before {\n  content: \"\\f292\"; }\n\n.fa-hdd:before {\n  content: \"\\f0a0\"; }\n\n.fa-heading:before {\n  content: \"\\f1dc\"; }\n\n.fa-headphones:before {\n  content: \"\\f025\"; }\n\n.fa-heart:before {\n  content: \"\\f004\"; }\n\n.fa-heartbeat:before {\n  content: \"\\f21e\"; }\n\n.fa-hips:before {\n  content: \"\\f452\"; }\n\n.fa-hire-a-helper:before {\n  content: \"\\f3b0\"; }\n\n.fa-history:before {\n  content: \"\\f1da\"; }\n\n.fa-hockey-puck:before {\n  content: \"\\f453\"; }\n\n.fa-home:before {\n  content: \"\\f015\"; }\n\n.fa-hooli:before {\n  content: \"\\f427\"; }\n\n.fa-hospital:before {\n  content: \"\\f0f8\"; }\n\n.fa-hospital-symbol:before {\n  content: \"\\f47e\"; }\n\n.fa-hotjar:before {\n  content: \"\\f3b1\"; }\n\n.fa-hourglass:before {\n  content: \"\\f254\"; }\n\n.fa-hourglass-end:before {\n  content: \"\\f253\"; }\n\n.fa-hourglass-half:before {\n  content: \"\\f252\"; }\n\n.fa-hourglass-start:before {\n  content: \"\\f251\"; }\n\n.fa-houzz:before {\n  content: \"\\f27c\"; }\n\n.fa-html5:before {\n  content: \"\\f13b\"; }\n\n.fa-hubspot:before {\n  content: \"\\f3b2\"; }\n\n.fa-i-cursor:before {\n  content: \"\\f246\"; }\n\n.fa-id-badge:before {\n  content: \"\\f2c1\"; }\n\n.fa-id-card:before {\n  content: \"\\f2c2\"; }\n\n.fa-image:before {\n  content: \"\\f03e\"; }\n\n.fa-images:before {\n  content: \"\\f302\"; }\n\n.fa-imdb:before {\n  content: \"\\f2d8\"; }\n\n.fa-inbox:before {\n  content: \"\\f01c\"; }\n\n.fa-indent:before {\n  content: \"\\f03c\"; }\n\n.fa-industry:before {\n  content: \"\\f275\"; }\n\n.fa-info:before {\n  content: \"\\f129\"; }\n\n.fa-info-circle:before {\n  content: \"\\f05a\"; }\n\n.fa-instagram:before {\n  content: \"\\f16d\"; }\n\n.fa-internet-explorer:before {\n  content: \"\\f26b\"; }\n\n.fa-ioxhost:before {\n  content: \"\\f208\"; }\n\n.fa-italic:before {\n  content: \"\\f033\"; }\n\n.fa-itunes:before {\n  content: \"\\f3b4\"; }\n\n.fa-itunes-note:before {\n  content: \"\\f3b5\"; }\n\n.fa-jenkins:before {\n  content: \"\\f3b6\"; }\n\n.fa-joget:before {\n  content: \"\\f3b7\"; }\n\n.fa-joomla:before {\n  content: \"\\f1aa\"; }\n\n.fa-js:before {\n  content: \"\\f3b8\"; }\n\n.fa-js-square:before {\n  content: \"\\f3b9\"; }\n\n.fa-jsfiddle:before {\n  content: \"\\f1cc\"; }\n\n.fa-key:before {\n  content: \"\\f084\"; }\n\n.fa-keyboard:before {\n  content: \"\\f11c\"; }\n\n.fa-keycdn:before {\n  content: \"\\f3ba\"; }\n\n.fa-kickstarter:before {\n  content: \"\\f3bb\"; }\n\n.fa-kickstarter-k:before {\n  content: \"\\f3bc\"; }\n\n.fa-korvue:before {\n  content: \"\\f42f\"; }\n\n.fa-language:before {\n  content: \"\\f1ab\"; }\n\n.fa-laptop:before {\n  content: \"\\f109\"; }\n\n.fa-laravel:before {\n  content: \"\\f3bd\"; }\n\n.fa-lastfm:before {\n  content: \"\\f202\"; }\n\n.fa-lastfm-square:before {\n  content: \"\\f203\"; }\n\n.fa-leaf:before {\n  content: \"\\f06c\"; }\n\n.fa-leanpub:before {\n  content: \"\\f212\"; }\n\n.fa-lemon:before {\n  content: \"\\f094\"; }\n\n.fa-less:before {\n  content: \"\\f41d\"; }\n\n.fa-level-down-alt:before {\n  content: \"\\f3be\"; }\n\n.fa-level-up-alt:before {\n  content: \"\\f3bf\"; }\n\n.fa-life-ring:before {\n  content: \"\\f1cd\"; }\n\n.fa-lightbulb:before {\n  content: \"\\f0eb\"; }\n\n.fa-line:before {\n  content: \"\\f3c0\"; }\n\n.fa-link:before {\n  content: \"\\f0c1\"; }\n\n.fa-linkedin:before {\n  content: \"\\f08c\"; }\n\n.fa-linkedin-in:before {\n  content: \"\\f0e1\"; }\n\n.fa-linode:before {\n  content: \"\\f2b8\"; }\n\n.fa-linux:before {\n  content: \"\\f17c\"; }\n\n.fa-lira-sign:before {\n  content: \"\\f195\"; }\n\n.fa-list:before {\n  content: \"\\f03a\"; }\n\n.fa-list-alt:before {\n  content: \"\\f022\"; }\n\n.fa-list-ol:before {\n  content: \"\\f0cb\"; }\n\n.fa-list-ul:before {\n  content: \"\\f0ca\"; }\n\n.fa-location-arrow:before {\n  content: \"\\f124\"; }\n\n.fa-lock:before {\n  content: \"\\f023\"; }\n\n.fa-lock-open:before {\n  content: \"\\f3c1\"; }\n\n.fa-long-arrow-alt-down:before {\n  content: \"\\f309\"; }\n\n.fa-long-arrow-alt-left:before {\n  content: \"\\f30a\"; }\n\n.fa-long-arrow-alt-right:before {\n  content: \"\\f30b\"; }\n\n.fa-long-arrow-alt-up:before {\n  content: \"\\f30c\"; }\n\n.fa-low-vision:before {\n  content: \"\\f2a8\"; }\n\n.fa-lyft:before {\n  content: \"\\f3c3\"; }\n\n.fa-magento:before {\n  content: \"\\f3c4\"; }\n\n.fa-magic:before {\n  content: \"\\f0d0\"; }\n\n.fa-magnet:before {\n  content: \"\\f076\"; }\n\n.fa-male:before {\n  content: \"\\f183\"; }\n\n.fa-map:before {\n  content: \"\\f279\"; }\n\n.fa-map-marker:before {\n  content: \"\\f041\"; }\n\n.fa-map-marker-alt:before {\n  content: \"\\f3c5\"; }\n\n.fa-map-pin:before {\n  content: \"\\f276\"; }\n\n.fa-map-signs:before {\n  content: \"\\f277\"; }\n\n.fa-mars:before {\n  content: \"\\f222\"; }\n\n.fa-mars-double:before {\n  content: \"\\f227\"; }\n\n.fa-mars-stroke:before {\n  content: \"\\f229\"; }\n\n.fa-mars-stroke-h:before {\n  content: \"\\f22b\"; }\n\n.fa-mars-stroke-v:before {\n  content: \"\\f22a\"; }\n\n.fa-maxcdn:before {\n  content: \"\\f136\"; }\n\n.fa-medapps:before {\n  content: \"\\f3c6\"; }\n\n.fa-medium:before {\n  content: \"\\f23a\"; }\n\n.fa-medium-m:before {\n  content: \"\\f3c7\"; }\n\n.fa-medkit:before {\n  content: \"\\f0fa\"; }\n\n.fa-medrt:before {\n  content: \"\\f3c8\"; }\n\n.fa-meetup:before {\n  content: \"\\f2e0\"; }\n\n.fa-meh:before {\n  content: \"\\f11a\"; }\n\n.fa-mercury:before {\n  content: \"\\f223\"; }\n\n.fa-microchip:before {\n  content: \"\\f2db\"; }\n\n.fa-microphone:before {\n  content: \"\\f130\"; }\n\n.fa-microphone-slash:before {\n  content: \"\\f131\"; }\n\n.fa-microsoft:before {\n  content: \"\\f3ca\"; }\n\n.fa-minus:before {\n  content: \"\\f068\"; }\n\n.fa-minus-circle:before {\n  content: \"\\f056\"; }\n\n.fa-minus-square:before {\n  content: \"\\f146\"; }\n\n.fa-mix:before {\n  content: \"\\f3cb\"; }\n\n.fa-mixcloud:before {\n  content: \"\\f289\"; }\n\n.fa-mizuni:before {\n  content: \"\\f3cc\"; }\n\n.fa-mobile:before {\n  content: \"\\f10b\"; }\n\n.fa-mobile-alt:before {\n  content: \"\\f3cd\"; }\n\n.fa-modx:before {\n  content: \"\\f285\"; }\n\n.fa-monero:before {\n  content: \"\\f3d0\"; }\n\n.fa-money-bill-alt:before {\n  content: \"\\f3d1\"; }\n\n.fa-moon:before {\n  content: \"\\f186\"; }\n\n.fa-motorcycle:before {\n  content: \"\\f21c\"; }\n\n.fa-mouse-pointer:before {\n  content: \"\\f245\"; }\n\n.fa-music:before {\n  content: \"\\f001\"; }\n\n.fa-napster:before {\n  content: \"\\f3d2\"; }\n\n.fa-neuter:before {\n  content: \"\\f22c\"; }\n\n.fa-newspaper:before {\n  content: \"\\f1ea\"; }\n\n.fa-nintendo-switch:before {\n  content: \"\\f418\"; }\n\n.fa-node:before {\n  content: \"\\f419\"; }\n\n.fa-node-js:before {\n  content: \"\\f3d3\"; }\n\n.fa-npm:before {\n  content: \"\\f3d4\"; }\n\n.fa-ns8:before {\n  content: \"\\f3d5\"; }\n\n.fa-nutritionix:before {\n  content: \"\\f3d6\"; }\n\n.fa-object-group:before {\n  content: \"\\f247\"; }\n\n.fa-object-ungroup:before {\n  content: \"\\f248\"; }\n\n.fa-odnoklassniki:before {\n  content: \"\\f263\"; }\n\n.fa-odnoklassniki-square:before {\n  content: \"\\f264\"; }\n\n.fa-opencart:before {\n  content: \"\\f23d\"; }\n\n.fa-openid:before {\n  content: \"\\f19b\"; }\n\n.fa-opera:before {\n  content: \"\\f26a\"; }\n\n.fa-optin-monster:before {\n  content: \"\\f23c\"; }\n\n.fa-osi:before {\n  content: \"\\f41a\"; }\n\n.fa-outdent:before {\n  content: \"\\f03b\"; }\n\n.fa-page4:before {\n  content: \"\\f3d7\"; }\n\n.fa-pagelines:before {\n  content: \"\\f18c\"; }\n\n.fa-paint-brush:before {\n  content: \"\\f1fc\"; }\n\n.fa-palfed:before {\n  content: \"\\f3d8\"; }\n\n.fa-pallet:before {\n  content: \"\\f482\"; }\n\n.fa-paper-plane:before {\n  content: \"\\f1d8\"; }\n\n.fa-paperclip:before {\n  content: \"\\f0c6\"; }\n\n.fa-paragraph:before {\n  content: \"\\f1dd\"; }\n\n.fa-paste:before {\n  content: \"\\f0ea\"; }\n\n.fa-patreon:before {\n  content: \"\\f3d9\"; }\n\n.fa-pause:before {\n  content: \"\\f04c\"; }\n\n.fa-pause-circle:before {\n  content: \"\\f28b\"; }\n\n.fa-paw:before {\n  content: \"\\f1b0\"; }\n\n.fa-paypal:before {\n  content: \"\\f1ed\"; }\n\n.fa-pen-square:before {\n  content: \"\\f14b\"; }\n\n.fa-pencil-alt:before {\n  content: \"\\f303\"; }\n\n.fa-percent:before {\n  content: \"\\f295\"; }\n\n.fa-periscope:before {\n  content: \"\\f3da\"; }\n\n.fa-phabricator:before {\n  content: \"\\f3db\"; }\n\n.fa-phoenix-framework:before {\n  content: \"\\f3dc\"; }\n\n.fa-phone:before {\n  content: \"\\f095\"; }\n\n.fa-phone-square:before {\n  content: \"\\f098\"; }\n\n.fa-phone-volume:before {\n  content: \"\\f2a0\"; }\n\n.fa-php:before {\n  content: \"\\f457\"; }\n\n.fa-pied-piper:before {\n  content: \"\\f2ae\"; }\n\n.fa-pied-piper-alt:before {\n  content: \"\\f1a8\"; }\n\n.fa-pied-piper-pp:before {\n  content: \"\\f1a7\"; }\n\n.fa-pills:before {\n  content: \"\\f484\"; }\n\n.fa-pinterest:before {\n  content: \"\\f0d2\"; }\n\n.fa-pinterest-p:before {\n  content: \"\\f231\"; }\n\n.fa-pinterest-square:before {\n  content: \"\\f0d3\"; }\n\n.fa-plane:before {\n  content: \"\\f072\"; }\n\n.fa-play:before {\n  content: \"\\f04b\"; }\n\n.fa-play-circle:before {\n  content: \"\\f144\"; }\n\n.fa-playstation:before {\n  content: \"\\f3df\"; }\n\n.fa-plug:before {\n  content: \"\\f1e6\"; }\n\n.fa-plus:before {\n  content: \"\\f067\"; }\n\n.fa-plus-circle:before {\n  content: \"\\f055\"; }\n\n.fa-plus-square:before {\n  content: \"\\f0fe\"; }\n\n.fa-podcast:before {\n  content: \"\\f2ce\"; }\n\n.fa-pound-sign:before {\n  content: \"\\f154\"; }\n\n.fa-power-off:before {\n  content: \"\\f011\"; }\n\n.fa-print:before {\n  content: \"\\f02f\"; }\n\n.fa-product-hunt:before {\n  content: \"\\f288\"; }\n\n.fa-pushed:before {\n  content: \"\\f3e1\"; }\n\n.fa-puzzle-piece:before {\n  content: \"\\f12e\"; }\n\n.fa-python:before {\n  content: \"\\f3e2\"; }\n\n.fa-qq:before {\n  content: \"\\f1d6\"; }\n\n.fa-qrcode:before {\n  content: \"\\f029\"; }\n\n.fa-question:before {\n  content: \"\\f128\"; }\n\n.fa-question-circle:before {\n  content: \"\\f059\"; }\n\n.fa-quidditch:before {\n  content: \"\\f458\"; }\n\n.fa-quinscape:before {\n  content: \"\\f459\"; }\n\n.fa-quora:before {\n  content: \"\\f2c4\"; }\n\n.fa-quote-left:before {\n  content: \"\\f10d\"; }\n\n.fa-quote-right:before {\n  content: \"\\f10e\"; }\n\n.fa-random:before {\n  content: \"\\f074\"; }\n\n.fa-ravelry:before {\n  content: \"\\f2d9\"; }\n\n.fa-react:before {\n  content: \"\\f41b\"; }\n\n.fa-rebel:before {\n  content: \"\\f1d0\"; }\n\n.fa-recycle:before {\n  content: \"\\f1b8\"; }\n\n.fa-red-river:before {\n  content: \"\\f3e3\"; }\n\n.fa-reddit:before {\n  content: \"\\f1a1\"; }\n\n.fa-reddit-alien:before {\n  content: \"\\f281\"; }\n\n.fa-reddit-square:before {\n  content: \"\\f1a2\"; }\n\n.fa-redo:before {\n  content: \"\\f01e\"; }\n\n.fa-redo-alt:before {\n  content: \"\\f2f9\"; }\n\n.fa-registered:before {\n  content: \"\\f25d\"; }\n\n.fa-rendact:before {\n  content: \"\\f3e4\"; }\n\n.fa-renren:before {\n  content: \"\\f18b\"; }\n\n.fa-reply:before {\n  content: \"\\f3e5\"; }\n\n.fa-reply-all:before {\n  content: \"\\f122\"; }\n\n.fa-replyd:before {\n  content: \"\\f3e6\"; }\n\n.fa-resolving:before {\n  content: \"\\f3e7\"; }\n\n.fa-retweet:before {\n  content: \"\\f079\"; }\n\n.fa-road:before {\n  content: \"\\f018\"; }\n\n.fa-rocket:before {\n  content: \"\\f135\"; }\n\n.fa-rocketchat:before {\n  content: \"\\f3e8\"; }\n\n.fa-rockrms:before {\n  content: \"\\f3e9\"; }\n\n.fa-rss:before {\n  content: \"\\f09e\"; }\n\n.fa-rss-square:before {\n  content: \"\\f143\"; }\n\n.fa-ruble-sign:before {\n  content: \"\\f158\"; }\n\n.fa-rupee-sign:before {\n  content: \"\\f156\"; }\n\n.fa-safari:before {\n  content: \"\\f267\"; }\n\n.fa-sass:before {\n  content: \"\\f41e\"; }\n\n.fa-save:before {\n  content: \"\\f0c7\"; }\n\n.fa-schlix:before {\n  content: \"\\f3ea\"; }\n\n.fa-scribd:before {\n  content: \"\\f28a\"; }\n\n.fa-search:before {\n  content: \"\\f002\"; }\n\n.fa-search-minus:before {\n  content: \"\\f010\"; }\n\n.fa-search-plus:before {\n  content: \"\\f00e\"; }\n\n.fa-searchengin:before {\n  content: \"\\f3eb\"; }\n\n.fa-sellcast:before {\n  content: \"\\f2da\"; }\n\n.fa-sellsy:before {\n  content: \"\\f213\"; }\n\n.fa-server:before {\n  content: \"\\f233\"; }\n\n.fa-servicestack:before {\n  content: \"\\f3ec\"; }\n\n.fa-share:before {\n  content: \"\\f064\"; }\n\n.fa-share-alt:before {\n  content: \"\\f1e0\"; }\n\n.fa-share-alt-square:before {\n  content: \"\\f1e1\"; }\n\n.fa-share-square:before {\n  content: \"\\f14d\"; }\n\n.fa-shekel-sign:before {\n  content: \"\\f20b\"; }\n\n.fa-shield-alt:before {\n  content: \"\\f3ed\"; }\n\n.fa-ship:before {\n  content: \"\\f21a\"; }\n\n.fa-shipping-fast:before {\n  content: \"\\f48b\"; }\n\n.fa-shirtsinbulk:before {\n  content: \"\\f214\"; }\n\n.fa-shopping-bag:before {\n  content: \"\\f290\"; }\n\n.fa-shopping-basket:before {\n  content: \"\\f291\"; }\n\n.fa-shopping-cart:before {\n  content: \"\\f07a\"; }\n\n.fa-shower:before {\n  content: \"\\f2cc\"; }\n\n.fa-sign-in-alt:before {\n  content: \"\\f2f6\"; }\n\n.fa-sign-language:before {\n  content: \"\\f2a7\"; }\n\n.fa-sign-out-alt:before {\n  content: \"\\f2f5\"; }\n\n.fa-signal:before {\n  content: \"\\f012\"; }\n\n.fa-simplybuilt:before {\n  content: \"\\f215\"; }\n\n.fa-sistrix:before {\n  content: \"\\f3ee\"; }\n\n.fa-sitemap:before {\n  content: \"\\f0e8\"; }\n\n.fa-skyatlas:before {\n  content: \"\\f216\"; }\n\n.fa-skype:before {\n  content: \"\\f17e\"; }\n\n.fa-slack:before {\n  content: \"\\f198\"; }\n\n.fa-slack-hash:before {\n  content: \"\\f3ef\"; }\n\n.fa-sliders-h:before {\n  content: \"\\f1de\"; }\n\n.fa-slideshare:before {\n  content: \"\\f1e7\"; }\n\n.fa-smile:before {\n  content: \"\\f118\"; }\n\n.fa-snapchat:before {\n  content: \"\\f2ab\"; }\n\n.fa-snapchat-ghost:before {\n  content: \"\\f2ac\"; }\n\n.fa-snapchat-square:before {\n  content: \"\\f2ad\"; }\n\n.fa-snowflake:before {\n  content: \"\\f2dc\"; }\n\n.fa-sort:before {\n  content: \"\\f0dc\"; }\n\n.fa-sort-alpha-down:before {\n  content: \"\\f15d\"; }\n\n.fa-sort-alpha-up:before {\n  content: \"\\f15e\"; }\n\n.fa-sort-amount-down:before {\n  content: \"\\f160\"; }\n\n.fa-sort-amount-up:before {\n  content: \"\\f161\"; }\n\n.fa-sort-down:before {\n  content: \"\\f0dd\"; }\n\n.fa-sort-numeric-down:before {\n  content: \"\\f162\"; }\n\n.fa-sort-numeric-up:before {\n  content: \"\\f163\"; }\n\n.fa-sort-up:before {\n  content: \"\\f0de\"; }\n\n.fa-soundcloud:before {\n  content: \"\\f1be\"; }\n\n.fa-space-shuttle:before {\n  content: \"\\f197\"; }\n\n.fa-speakap:before {\n  content: \"\\f3f3\"; }\n\n.fa-spinner:before {\n  content: \"\\f110\"; }\n\n.fa-spotify:before {\n  content: \"\\f1bc\"; }\n\n.fa-square:before {\n  content: \"\\f0c8\"; }\n\n.fa-square-full:before {\n  content: \"\\f45c\"; }\n\n.fa-stack-exchange:before {\n  content: \"\\f18d\"; }\n\n.fa-stack-overflow:before {\n  content: \"\\f16c\"; }\n\n.fa-star:before {\n  content: \"\\f005\"; }\n\n.fa-star-half:before {\n  content: \"\\f089\"; }\n\n.fa-staylinked:before {\n  content: \"\\f3f5\"; }\n\n.fa-steam:before {\n  content: \"\\f1b6\"; }\n\n.fa-steam-square:before {\n  content: \"\\f1b7\"; }\n\n.fa-steam-symbol:before {\n  content: \"\\f3f6\"; }\n\n.fa-step-backward:before {\n  content: \"\\f048\"; }\n\n.fa-step-forward:before {\n  content: \"\\f051\"; }\n\n.fa-stethoscope:before {\n  content: \"\\f0f1\"; }\n\n.fa-sticker-mule:before {\n  content: \"\\f3f7\"; }\n\n.fa-sticky-note:before {\n  content: \"\\f249\"; }\n\n.fa-stop:before {\n  content: \"\\f04d\"; }\n\n.fa-stop-circle:before {\n  content: \"\\f28d\"; }\n\n.fa-stopwatch:before {\n  content: \"\\f2f2\"; }\n\n.fa-strava:before {\n  content: \"\\f428\"; }\n\n.fa-street-view:before {\n  content: \"\\f21d\"; }\n\n.fa-strikethrough:before {\n  content: \"\\f0cc\"; }\n\n.fa-stripe:before {\n  content: \"\\f429\"; }\n\n.fa-stripe-s:before {\n  content: \"\\f42a\"; }\n\n.fa-studiovinari:before {\n  content: \"\\f3f8\"; }\n\n.fa-stumbleupon:before {\n  content: \"\\f1a4\"; }\n\n.fa-stumbleupon-circle:before {\n  content: \"\\f1a3\"; }\n\n.fa-subscript:before {\n  content: \"\\f12c\"; }\n\n.fa-subway:before {\n  content: \"\\f239\"; }\n\n.fa-suitcase:before {\n  content: \"\\f0f2\"; }\n\n.fa-sun:before {\n  content: \"\\f185\"; }\n\n.fa-superpowers:before {\n  content: \"\\f2dd\"; }\n\n.fa-superscript:before {\n  content: \"\\f12b\"; }\n\n.fa-supple:before {\n  content: \"\\f3f9\"; }\n\n.fa-sync:before {\n  content: \"\\f021\"; }\n\n.fa-sync-alt:before {\n  content: \"\\f2f1\"; }\n\n.fa-syringe:before {\n  content: \"\\f48e\"; }\n\n.fa-table:before {\n  content: \"\\f0ce\"; }\n\n.fa-table-tennis:before {\n  content: \"\\f45d\"; }\n\n.fa-tablet:before {\n  content: \"\\f10a\"; }\n\n.fa-tablet-alt:before {\n  content: \"\\f3fa\"; }\n\n.fa-tachometer-alt:before {\n  content: \"\\f3fd\"; }\n\n.fa-tag:before {\n  content: \"\\f02b\"; }\n\n.fa-tags:before {\n  content: \"\\f02c\"; }\n\n.fa-tasks:before {\n  content: \"\\f0ae\"; }\n\n.fa-taxi:before {\n  content: \"\\f1ba\"; }\n\n.fa-telegram:before {\n  content: \"\\f2c6\"; }\n\n.fa-telegram-plane:before {\n  content: \"\\f3fe\"; }\n\n.fa-tencent-weibo:before {\n  content: \"\\f1d5\"; }\n\n.fa-terminal:before {\n  content: \"\\f120\"; }\n\n.fa-text-height:before {\n  content: \"\\f034\"; }\n\n.fa-text-width:before {\n  content: \"\\f035\"; }\n\n.fa-th:before {\n  content: \"\\f00a\"; }\n\n.fa-th-large:before {\n  content: \"\\f009\"; }\n\n.fa-th-list:before {\n  content: \"\\f00b\"; }\n\n.fa-themeisle:before {\n  content: \"\\f2b2\"; }\n\n.fa-thermometer:before {\n  content: \"\\f491\"; }\n\n.fa-thermometer-empty:before {\n  content: \"\\f2cb\"; }\n\n.fa-thermometer-full:before {\n  content: \"\\f2c7\"; }\n\n.fa-thermometer-half:before {\n  content: \"\\f2c9\"; }\n\n.fa-thermometer-quarter:before {\n  content: \"\\f2ca\"; }\n\n.fa-thermometer-three-quarters:before {\n  content: \"\\f2c8\"; }\n\n.fa-thumbs-down:before {\n  content: \"\\f165\"; }\n\n.fa-thumbs-up:before {\n  content: \"\\f164\"; }\n\n.fa-thumbtack:before {\n  content: \"\\f08d\"; }\n\n.fa-ticket-alt:before {\n  content: \"\\f3ff\"; }\n\n.fa-times:before {\n  content: \"\\f00d\"; }\n\n.fa-times-circle:before {\n  content: \"\\f057\"; }\n\n.fa-tint:before {\n  content: \"\\f043\"; }\n\n.fa-toggle-off:before {\n  content: \"\\f204\"; }\n\n.fa-toggle-on:before {\n  content: \"\\f205\"; }\n\n.fa-trademark:before {\n  content: \"\\f25c\"; }\n\n.fa-train:before {\n  content: \"\\f238\"; }\n\n.fa-transgender:before {\n  content: \"\\f224\"; }\n\n.fa-transgender-alt:before {\n  content: \"\\f225\"; }\n\n.fa-trash:before {\n  content: \"\\f1f8\"; }\n\n.fa-trash-alt:before {\n  content: \"\\f2ed\"; }\n\n.fa-tree:before {\n  content: \"\\f1bb\"; }\n\n.fa-trello:before {\n  content: \"\\f181\"; }\n\n.fa-tripadvisor:before {\n  content: \"\\f262\"; }\n\n.fa-trophy:before {\n  content: \"\\f091\"; }\n\n.fa-truck:before {\n  content: \"\\f0d1\"; }\n\n.fa-tty:before {\n  content: \"\\f1e4\"; }\n\n.fa-tumblr:before {\n  content: \"\\f173\"; }\n\n.fa-tumblr-square:before {\n  content: \"\\f174\"; }\n\n.fa-tv:before {\n  content: \"\\f26c\"; }\n\n.fa-twitch:before {\n  content: \"\\f1e8\"; }\n\n.fa-twitter:before {\n  content: \"\\f099\"; }\n\n.fa-twitter-square:before {\n  content: \"\\f081\"; }\n\n.fa-typo3:before {\n  content: \"\\f42b\"; }\n\n.fa-uber:before {\n  content: \"\\f402\"; }\n\n.fa-uikit:before {\n  content: \"\\f403\"; }\n\n.fa-umbrella:before {\n  content: \"\\f0e9\"; }\n\n.fa-underline:before {\n  content: \"\\f0cd\"; }\n\n.fa-undo:before {\n  content: \"\\f0e2\"; }\n\n.fa-undo-alt:before {\n  content: \"\\f2ea\"; }\n\n.fa-uniregistry:before {\n  content: \"\\f404\"; }\n\n.fa-universal-access:before {\n  content: \"\\f29a\"; }\n\n.fa-university:before {\n  content: \"\\f19c\"; }\n\n.fa-unlink:before {\n  content: \"\\f127\"; }\n\n.fa-unlock:before {\n  content: \"\\f09c\"; }\n\n.fa-unlock-alt:before {\n  content: \"\\f13e\"; }\n\n.fa-untappd:before {\n  content: \"\\f405\"; }\n\n.fa-upload:before {\n  content: \"\\f093\"; }\n\n.fa-usb:before {\n  content: \"\\f287\"; }\n\n.fa-user:before {\n  content: \"\\f007\"; }\n\n.fa-user-circle:before {\n  content: \"\\f2bd\"; }\n\n.fa-user-md:before {\n  content: \"\\f0f0\"; }\n\n.fa-user-plus:before {\n  content: \"\\f234\"; }\n\n.fa-user-secret:before {\n  content: \"\\f21b\"; }\n\n.fa-user-times:before {\n  content: \"\\f235\"; }\n\n.fa-users:before {\n  content: \"\\f0c0\"; }\n\n.fa-ussunnah:before {\n  content: \"\\f407\"; }\n\n.fa-utensil-spoon:before {\n  content: \"\\f2e5\"; }\n\n.fa-utensils:before {\n  content: \"\\f2e7\"; }\n\n.fa-vaadin:before {\n  content: \"\\f408\"; }\n\n.fa-venus:before {\n  content: \"\\f221\"; }\n\n.fa-venus-double:before {\n  content: \"\\f226\"; }\n\n.fa-venus-mars:before {\n  content: \"\\f228\"; }\n\n.fa-viacoin:before {\n  content: \"\\f237\"; }\n\n.fa-viadeo:before {\n  content: \"\\f2a9\"; }\n\n.fa-viadeo-square:before {\n  content: \"\\f2aa\"; }\n\n.fa-viber:before {\n  content: \"\\f409\"; }\n\n.fa-video:before {\n  content: \"\\f03d\"; }\n\n.fa-vimeo:before {\n  content: \"\\f40a\"; }\n\n.fa-vimeo-square:before {\n  content: \"\\f194\"; }\n\n.fa-vimeo-v:before {\n  content: \"\\f27d\"; }\n\n.fa-vine:before {\n  content: \"\\f1ca\"; }\n\n.fa-vk:before {\n  content: \"\\f189\"; }\n\n.fa-vnv:before {\n  content: \"\\f40b\"; }\n\n.fa-volleyball-ball:before {\n  content: \"\\f45f\"; }\n\n.fa-volume-down:before {\n  content: \"\\f027\"; }\n\n.fa-volume-off:before {\n  content: \"\\f026\"; }\n\n.fa-volume-up:before {\n  content: \"\\f028\"; }\n\n.fa-vuejs:before {\n  content: \"\\f41f\"; }\n\n.fa-warehouse:before {\n  content: \"\\f494\"; }\n\n.fa-weibo:before {\n  content: \"\\f18a\"; }\n\n.fa-weight:before {\n  content: \"\\f496\"; }\n\n.fa-weixin:before {\n  content: \"\\f1d7\"; }\n\n.fa-whatsapp:before {\n  content: \"\\f232\"; }\n\n.fa-whatsapp-square:before {\n  content: \"\\f40c\"; }\n\n.fa-wheelchair:before {\n  content: \"\\f193\"; }\n\n.fa-whmcs:before {\n  content: \"\\f40d\"; }\n\n.fa-wifi:before {\n  content: \"\\f1eb\"; }\n\n.fa-wikipedia-w:before {\n  content: \"\\f266\"; }\n\n.fa-window-close:before {\n  content: \"\\f410\"; }\n\n.fa-window-maximize:before {\n  content: \"\\f2d0\"; }\n\n.fa-window-minimize:before {\n  content: \"\\f2d1\"; }\n\n.fa-window-restore:before {\n  content: \"\\f2d2\"; }\n\n.fa-windows:before {\n  content: \"\\f17a\"; }\n\n.fa-won-sign:before {\n  content: \"\\f159\"; }\n\n.fa-wordpress:before {\n  content: \"\\f19a\"; }\n\n.fa-wordpress-simple:before {\n  content: \"\\f411\"; }\n\n.fa-wpbeginner:before {\n  content: \"\\f297\"; }\n\n.fa-wpexplorer:before {\n  content: \"\\f2de\"; }\n\n.fa-wpforms:before {\n  content: \"\\f298\"; }\n\n.fa-wrench:before {\n  content: \"\\f0ad\"; }\n\n.fa-xbox:before {\n  content: \"\\f412\"; }\n\n.fa-xing:before {\n  content: \"\\f168\"; }\n\n.fa-xing-square:before {\n  content: \"\\f169\"; }\n\n.fa-y-combinator:before {\n  content: \"\\f23b\"; }\n\n.fa-yahoo:before {\n  content: \"\\f19e\"; }\n\n.fa-yandex:before {\n  content: \"\\f413\"; }\n\n.fa-yandex-international:before {\n  content: \"\\f414\"; }\n\n.fa-yelp:before {\n  content: \"\\f1e9\"; }\n\n.fa-yen-sign:before {\n  content: \"\\f157\"; }\n\n.fa-yoast:before {\n  content: \"\\f2b1\"; }\n\n.fa-youtube:before {\n  content: \"\\f167\"; }\n\n.fa-youtube-square:before {\n  content: \"\\f431\"; }\n\n.sr-only {\n  border: 0;\n  clip: rect(0, 0, 0, 0);\n  height: 1px;\n  margin: -1px;\n  overflow: hidden;\n  padding: 0;\n  position: absolute;\n  width: 1px; }\n\n.sr-only-focusable:active, .sr-only-focusable:focus {\n  clip: auto;\n  height: auto;\n  margin: 0;\n  overflow: visible;\n  position: static;\n  width: auto; }\n@font-face {\n  font-family: 'Font Awesome 5 Brands';\n  font-style: normal;\n  font-weight: normal;\n  src: url(\"../webfonts/fa-brands-400.eot\");\n  src: url(\"../webfonts/fa-brands-400.eot?#iefix\") format(\"embedded-opentype\"), url(\"../webfonts/fa-brands-400.woff2\") format(\"woff2\"), url(\"../webfonts/fa-brands-400.woff\") format(\"woff\"), url(\"../webfonts/fa-brands-400.ttf\") format(\"truetype\"), url(\"../webfonts/fa-brands-400.svg#fontawesome\") format(\"svg\"); }\n\n.fab {\n  font-family: 'Font Awesome 5 Brands'; }\n@font-face {\n  font-family: 'Font Awesome 5 Free';\n  font-style: normal;\n  font-weight: 400;\n  src: url(\"../webfonts/fa-regular-400.eot\");\n  src: url(\"../webfonts/fa-regular-400.eot?#iefix\") format(\"embedded-opentype\"), url(\"../webfonts/fa-regular-400.woff2\") format(\"woff2\"), url(\"../webfonts/fa-regular-400.woff\") format(\"woff\"), url(\"../webfonts/fa-regular-400.ttf\") format(\"truetype\"), url(\"../webfonts/fa-regular-400.svg#fontawesome\") format(\"svg\"); }\n\n.far {\n  font-family: 'Font Awesome 5 Free';\n  font-weight: 400; }\n@font-face {\n  font-family: 'Font Awesome 5 Free';\n  font-style: normal;\n  font-weight: 900;\n  src: url(\"../webfonts/fa-solid-900.eot\");\n  src: url(\"../webfonts/fa-solid-900.eot?#iefix\") format(\"embedded-opentype\"), url(\"../webfonts/fa-solid-900.woff2\") format(\"woff2\"), url(\"../webfonts/fa-solid-900.woff\") format(\"woff\"), url(\"../webfonts/fa-solid-900.ttf\") format(\"truetype\"), url(\"../webfonts/fa-solid-900.svg#fontawesome\") format(\"svg\"); }\n\n.fa,\n.fas {\n  font-family: 'Font Awesome 5 Free';\n  font-weight: 900; }\n"
  },
  {
    "path": "src/sourceDev.WebApp/SharedThemes/litera/wwwroot/css/site.css",
    "content": "﻿html {\n    position: relative;\n    min-height: 100%;\n}\n\nbody {\n    min-height: 100vh;\n    padding-top: 142px;\n}\n\n\n#newPostLink {\n    position: absolute;\n    top: 170px;\n    right: 0px;\n}\n\n#editPostLink {\n    position: absolute;\n    top: 200px;\n    right: 0px;\n}\n\n#unpublishPostLink {\n    position: absolute;\n    top: 230px !important;\n    right: 0px !important;\n}\n\n#pageManagerLink {\n    position: absolute;\n    top: 170px;\n    right: 0px;\n}\n\n#newPageLink {\n    position: absolute;\n    top: 200px;\n    right: 0px;\n}\n\n#editPageLink {\n    position: absolute;\n    top: 230px;\n    right: 0px\n}\n\n#unpublishPageLink {\n    position: absolute;\n    top: 260px !important;\n    right: 0px !important\n}\n\n#sidenavtoggle {\n    position: absolute;\n    top: 220px;\n    right: 5px;\n}\n\n\n@media screen and (max-width: 812px) {\n    #sidenavtoggle,\n    #sidenavmenu {\n        display: none;\n    }\n}\n\n.flex-fill {\n    flex: 1 1 auto !important;\n}\n\n\n.carousel-caption p {\n    font-size: 20px;\n    line-height: 1.4;\n}\n\n@media screen and (max-width: 768px) {\n    .carousel-caption {\n        display: none\n    }\n}\n\n\n\n\nimg, video, iframe {\n    max-width: 100%;\n}\n\ntd img, video, iframe {\n    max-width: none;\n}\n\n\n\n.table td, .table th {\n    vertical-align: inherit;\n}\n\n/******** jquery smartmenu bootstrap 4 ******/\n/* Carets in collapsible mode (make them look like +/- buttons) */\n.navbar-nav.sm-collapsible .sub-arrow {\n    position: absolute;\n    top: 50%;\n    right: 0;\n    margin: -0.7em 0.5em 0 0;\n    border: 1px solid rgba(0, 0, 0, .1);\n    border-radius: .25rem;\n    padding: 0;\n    width: 2em;\n    height: 1.4em;\n    font-size: 1.25rem;\n    line-height: 1.2em;\n    text-align: center;\n}\n\n    .navbar-nav.sm-collapsible .sub-arrow::before {\n        content: '+';\n    }\n\n.navbar-nav.sm-collapsible .show > a > .sub-arrow::before {\n    content: '-';\n}\n\n.navbar-dark .navbar-nav.sm-collapsible .nav-link .sub-arrow {\n    border-color: rgba(255, 255, 255, .1);\n}\n/* make sure there's room for the carets */\n.navbar-nav.sm-collapsible .has-submenu {\n    padding-right: 3em;\n}\n/* keep the carets properly positioned */\n.navbar-nav.sm-collapsible .nav-link,\n.navbar-nav.sm-collapsible .dropdown-item {\n    position: relative;\n}\n\n\n/* Nav carets in expanded mode */\n.navbar-nav:not(.sm-collapsible) .nav-link .sub-arrow {\n    display: inline-block;\n    width: 0;\n    height: 0;\n    margin-left: .255em;\n    vertical-align: .255em;\n    border-top: .3em solid;\n    border-right: .3em solid transparent;\n    border-left: .3em solid transparent;\n}\n/* point the arrows up for .fixed-bottom navbars */\n.fixed-bottom .navbar-nav:not(.sm-collapsible) .nav-link .sub-arrow,\n.fixed-bottom .navbar-nav:not(.sm-collapsible):not([data-sm-skip]) .dropdown-toggle::after {\n    border-top: 0;\n    border-bottom: .3em solid;\n}\n\n\n/* Dropdown carets in expanded mode */\n.navbar-nav:not(.sm-collapsible) .dropdown-item .sub-arrow,\n.navbar-nav:not(.sm-collapsible):not([data-sm-skip]) .dropdown-menu .dropdown-toggle::after {\n    position: absolute;\n    top: 50%;\n    right: 0;\n    width: 0;\n    height: 0;\n    margin-top: -.3em;\n    margin-right: 1em;\n    border-top: .3em solid transparent;\n    border-bottom: .3em solid transparent;\n    border-left: .3em solid;\n}\n/* make sure there's room for the carets */\n.navbar-nav:not(.sm-collapsible) .dropdown-item.has-submenu {\n    padding-right: 2em;\n}\n\n\n/* Scrolling arrows for tall menus */\n.navbar-nav .scroll-up,\n.navbar-nav .scroll-down {\n    position: absolute;\n    display: none;\n    visibility: hidden;\n    height: 20px;\n    overflow: hidden;\n    text-align: center;\n}\n\n.navbar-nav .scroll-up-arrow,\n.navbar-nav .scroll-down-arrow {\n    position: absolute;\n    top: -2px;\n    left: 50%;\n    margin-left: -8px;\n    width: 0;\n    height: 0;\n    overflow: hidden;\n    border-top: 7px solid transparent;\n    border-right: 7px solid transparent;\n    border-bottom: 7px solid;\n    border-left: 7px solid transparent;\n}\n\n.navbar-nav .scroll-down-arrow {\n    top: 6px;\n    border-top: 7px solid;\n    border-right: 7px solid transparent;\n    border-bottom: 7px solid transparent;\n    border-left: 7px solid transparent;\n}\n\n\n/* Add some spacing for 2+ level sub menus in collapsible mode */\n.navbar-nav.sm-collapsible .dropdown-menu .dropdown-menu {\n    margin: .5em;\n}\n\n\n/* Fix SmartMenus sub menus auto width (subMenusMinWidth/subMenusMaxWidth options) */\n.navbar-nav:not([data-sm-skip]) .dropdown-item {\n    white-space: normal;\n}\n\n.navbar-nav:not(.sm-collapsible) .sm-nowrap > li > .dropdown-item {\n    white-space: nowrap;\n}\n/******** end jquery smart menu bootstrap-4 *****************/\n\n.brand-header {\n    height: 100px;\n}\n\nheader .navbar {\n    top: 100px;\n}\n"
  },
  {
    "path": "src/sourceDev.WebApp/SharedThemes/litera/wwwroot/js/bootstrap.bundle.js",
    "content": "/*!\n  * Bootstrap v5.0.2 (https://getbootstrap.com/)\n  * Copyright 2011-2021 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)\n  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n  */\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n  typeof define === 'function' && define.amd ? define(factory) :\n  (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.bootstrap = factory());\n}(this, (function () { 'use strict';\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): dom/selector-engine.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n  const NODE_TEXT = 3;\n  const SelectorEngine = {\n    find(selector, element = document.documentElement) {\n      return [].concat(...Element.prototype.querySelectorAll.call(element, selector));\n    },\n\n    findOne(selector, element = document.documentElement) {\n      return Element.prototype.querySelector.call(element, selector);\n    },\n\n    children(element, selector) {\n      return [].concat(...element.children).filter(child => child.matches(selector));\n    },\n\n    parents(element, selector) {\n      const parents = [];\n      let ancestor = element.parentNode;\n\n      while (ancestor && ancestor.nodeType === Node.ELEMENT_NODE && ancestor.nodeType !== NODE_TEXT) {\n        if (ancestor.matches(selector)) {\n          parents.push(ancestor);\n        }\n\n        ancestor = ancestor.parentNode;\n      }\n\n      return parents;\n    },\n\n    prev(element, selector) {\n      let previous = element.previousElementSibling;\n\n      while (previous) {\n        if (previous.matches(selector)) {\n          return [previous];\n        }\n\n        previous = previous.previousElementSibling;\n      }\n\n      return [];\n    },\n\n    next(element, selector) {\n      let next = element.nextElementSibling;\n\n      while (next) {\n        if (next.matches(selector)) {\n          return [next];\n        }\n\n        next = next.nextElementSibling;\n      }\n\n      return [];\n    }\n\n  };\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): util/index.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n\n  const MAX_UID = 1000000;\n  const MILLISECONDS_MULTIPLIER = 1000;\n  const TRANSITION_END = 'transitionend'; // Shoutout AngusCroll (https://goo.gl/pxwQGp)\n\n  const toType = obj => {\n    if (obj === null || obj === undefined) {\n      return `${obj}`;\n    }\n\n    return {}.toString.call(obj).match(/\\s([a-z]+)/i)[1].toLowerCase();\n  };\n  /**\n   * --------------------------------------------------------------------------\n   * Public Util Api\n   * --------------------------------------------------------------------------\n   */\n\n\n  const getUID = prefix => {\n    do {\n      prefix += Math.floor(Math.random() * MAX_UID);\n    } while (document.getElementById(prefix));\n\n    return prefix;\n  };\n\n  const getSelector = element => {\n    let selector = element.getAttribute('data-bs-target');\n\n    if (!selector || selector === '#') {\n      let hrefAttr = element.getAttribute('href'); // The only valid content that could double as a selector are IDs or classes,\n      // so everything starting with `#` or `.`. If a \"real\" URL is used as the selector,\n      // `document.querySelector` will rightfully complain it is invalid.\n      // See https://github.com/twbs/bootstrap/issues/32273\n\n      if (!hrefAttr || !hrefAttr.includes('#') && !hrefAttr.startsWith('.')) {\n        return null;\n      } // Just in case some CMS puts out a full URL with the anchor appended\n\n\n      if (hrefAttr.includes('#') && !hrefAttr.startsWith('#')) {\n        hrefAttr = `#${hrefAttr.split('#')[1]}`;\n      }\n\n      selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : null;\n    }\n\n    return selector;\n  };\n\n  const getSelectorFromElement = element => {\n    const selector = getSelector(element);\n\n    if (selector) {\n      return document.querySelector(selector) ? selector : null;\n    }\n\n    return null;\n  };\n\n  const getElementFromSelector = element => {\n    const selector = getSelector(element);\n    return selector ? document.querySelector(selector) : null;\n  };\n\n  const getTransitionDurationFromElement = element => {\n    if (!element) {\n      return 0;\n    } // Get transition-duration of the element\n\n\n    let {\n      transitionDuration,\n      transitionDelay\n    } = window.getComputedStyle(element);\n    const floatTransitionDuration = Number.parseFloat(transitionDuration);\n    const floatTransitionDelay = Number.parseFloat(transitionDelay); // Return 0 if element or transition duration is not found\n\n    if (!floatTransitionDuration && !floatTransitionDelay) {\n      return 0;\n    } // If multiple durations are defined, take the first\n\n\n    transitionDuration = transitionDuration.split(',')[0];\n    transitionDelay = transitionDelay.split(',')[0];\n    return (Number.parseFloat(transitionDuration) + Number.parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER;\n  };\n\n  const triggerTransitionEnd = element => {\n    element.dispatchEvent(new Event(TRANSITION_END));\n  };\n\n  const isElement$1 = obj => {\n    if (!obj || typeof obj !== 'object') {\n      return false;\n    }\n\n    if (typeof obj.jquery !== 'undefined') {\n      obj = obj[0];\n    }\n\n    return typeof obj.nodeType !== 'undefined';\n  };\n\n  const getElement = obj => {\n    if (isElement$1(obj)) {\n      // it's a jQuery object or a node element\n      return obj.jquery ? obj[0] : obj;\n    }\n\n    if (typeof obj === 'string' && obj.length > 0) {\n      return SelectorEngine.findOne(obj);\n    }\n\n    return null;\n  };\n\n  const typeCheckConfig = (componentName, config, configTypes) => {\n    Object.keys(configTypes).forEach(property => {\n      const expectedTypes = configTypes[property];\n      const value = config[property];\n      const valueType = value && isElement$1(value) ? 'element' : toType(value);\n\n      if (!new RegExp(expectedTypes).test(valueType)) {\n        throw new TypeError(`${componentName.toUpperCase()}: Option \"${property}\" provided type \"${valueType}\" but expected type \"${expectedTypes}\".`);\n      }\n    });\n  };\n\n  const isVisible = element => {\n    if (!isElement$1(element) || element.getClientRects().length === 0) {\n      return false;\n    }\n\n    return getComputedStyle(element).getPropertyValue('visibility') === 'visible';\n  };\n\n  const isDisabled = element => {\n    if (!element || element.nodeType !== Node.ELEMENT_NODE) {\n      return true;\n    }\n\n    if (element.classList.contains('disabled')) {\n      return true;\n    }\n\n    if (typeof element.disabled !== 'undefined') {\n      return element.disabled;\n    }\n\n    return element.hasAttribute('disabled') && element.getAttribute('disabled') !== 'false';\n  };\n\n  const findShadowRoot = element => {\n    if (!document.documentElement.attachShadow) {\n      return null;\n    } // Can find the shadow root otherwise it'll return the document\n\n\n    if (typeof element.getRootNode === 'function') {\n      const root = element.getRootNode();\n      return root instanceof ShadowRoot ? root : null;\n    }\n\n    if (element instanceof ShadowRoot) {\n      return element;\n    } // when we don't find a shadow root\n\n\n    if (!element.parentNode) {\n      return null;\n    }\n\n    return findShadowRoot(element.parentNode);\n  };\n\n  const noop = () => {};\n\n  const reflow = element => element.offsetHeight;\n\n  const getjQuery = () => {\n    const {\n      jQuery\n    } = window;\n\n    if (jQuery && !document.body.hasAttribute('data-bs-no-jquery')) {\n      return jQuery;\n    }\n\n    return null;\n  };\n\n  const DOMContentLoadedCallbacks = [];\n\n  const onDOMContentLoaded = callback => {\n    if (document.readyState === 'loading') {\n      // add listener on the first call when the document is in loading state\n      if (!DOMContentLoadedCallbacks.length) {\n        document.addEventListener('DOMContentLoaded', () => {\n          DOMContentLoadedCallbacks.forEach(callback => callback());\n        });\n      }\n\n      DOMContentLoadedCallbacks.push(callback);\n    } else {\n      callback();\n    }\n  };\n\n  const isRTL = () => document.documentElement.dir === 'rtl';\n\n  const defineJQueryPlugin = plugin => {\n    onDOMContentLoaded(() => {\n      const $ = getjQuery();\n      /* istanbul ignore if */\n\n      if ($) {\n        const name = plugin.NAME;\n        const JQUERY_NO_CONFLICT = $.fn[name];\n        $.fn[name] = plugin.jQueryInterface;\n        $.fn[name].Constructor = plugin;\n\n        $.fn[name].noConflict = () => {\n          $.fn[name] = JQUERY_NO_CONFLICT;\n          return plugin.jQueryInterface;\n        };\n      }\n    });\n  };\n\n  const execute = callback => {\n    if (typeof callback === 'function') {\n      callback();\n    }\n  };\n\n  const executeAfterTransition = (callback, transitionElement, waitForTransition = true) => {\n    if (!waitForTransition) {\n      execute(callback);\n      return;\n    }\n\n    const durationPadding = 5;\n    const emulatedDuration = getTransitionDurationFromElement(transitionElement) + durationPadding;\n    let called = false;\n\n    const handler = ({\n      target\n    }) => {\n      if (target !== transitionElement) {\n        return;\n      }\n\n      called = true;\n      transitionElement.removeEventListener(TRANSITION_END, handler);\n      execute(callback);\n    };\n\n    transitionElement.addEventListener(TRANSITION_END, handler);\n    setTimeout(() => {\n      if (!called) {\n        triggerTransitionEnd(transitionElement);\n      }\n    }, emulatedDuration);\n  };\n  /**\n   * Return the previous/next element of a list.\n   *\n   * @param {array} list    The list of elements\n   * @param activeElement   The active element\n   * @param shouldGetNext   Choose to get next or previous element\n   * @param isCycleAllowed\n   * @return {Element|elem} The proper element\n   */\n\n\n  const getNextActiveElement = (list, activeElement, shouldGetNext, isCycleAllowed) => {\n    let index = list.indexOf(activeElement); // if the element does not exist in the list return an element depending on the direction and if cycle is allowed\n\n    if (index === -1) {\n      return list[!shouldGetNext && isCycleAllowed ? list.length - 1 : 0];\n    }\n\n    const listLength = list.length;\n    index += shouldGetNext ? 1 : -1;\n\n    if (isCycleAllowed) {\n      index = (index + listLength) % listLength;\n    }\n\n    return list[Math.max(0, Math.min(index, listLength - 1))];\n  };\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): dom/event-handler.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const namespaceRegex = /[^.]*(?=\\..*)\\.|.*/;\n  const stripNameRegex = /\\..*/;\n  const stripUidRegex = /::\\d+$/;\n  const eventRegistry = {}; // Events storage\n\n  let uidEvent = 1;\n  const customEvents = {\n    mouseenter: 'mouseover',\n    mouseleave: 'mouseout'\n  };\n  const customEventsRegex = /^(mouseenter|mouseleave)/i;\n  const nativeEvents = new Set(['click', 'dblclick', 'mouseup', 'mousedown', 'contextmenu', 'mousewheel', 'DOMMouseScroll', 'mouseover', 'mouseout', 'mousemove', 'selectstart', 'selectend', 'keydown', 'keypress', 'keyup', 'orientationchange', 'touchstart', 'touchmove', 'touchend', 'touchcancel', 'pointerdown', 'pointermove', 'pointerup', 'pointerleave', 'pointercancel', 'gesturestart', 'gesturechange', 'gestureend', 'focus', 'blur', 'change', 'reset', 'select', 'submit', 'focusin', 'focusout', 'load', 'unload', 'beforeunload', 'resize', 'move', 'DOMContentLoaded', 'readystatechange', 'error', 'abort', 'scroll']);\n  /**\n   * ------------------------------------------------------------------------\n   * Private methods\n   * ------------------------------------------------------------------------\n   */\n\n  function getUidEvent(element, uid) {\n    return uid && `${uid}::${uidEvent++}` || element.uidEvent || uidEvent++;\n  }\n\n  function getEvent(element) {\n    const uid = getUidEvent(element);\n    element.uidEvent = uid;\n    eventRegistry[uid] = eventRegistry[uid] || {};\n    return eventRegistry[uid];\n  }\n\n  function bootstrapHandler(element, fn) {\n    return function handler(event) {\n      event.delegateTarget = element;\n\n      if (handler.oneOff) {\n        EventHandler.off(element, event.type, fn);\n      }\n\n      return fn.apply(element, [event]);\n    };\n  }\n\n  function bootstrapDelegationHandler(element, selector, fn) {\n    return function handler(event) {\n      const domElements = element.querySelectorAll(selector);\n\n      for (let {\n        target\n      } = event; target && target !== this; target = target.parentNode) {\n        for (let i = domElements.length; i--;) {\n          if (domElements[i] === target) {\n            event.delegateTarget = target;\n\n            if (handler.oneOff) {\n              // eslint-disable-next-line unicorn/consistent-destructuring\n              EventHandler.off(element, event.type, selector, fn);\n            }\n\n            return fn.apply(target, [event]);\n          }\n        }\n      } // To please ESLint\n\n\n      return null;\n    };\n  }\n\n  function findHandler(events, handler, delegationSelector = null) {\n    const uidEventList = Object.keys(events);\n\n    for (let i = 0, len = uidEventList.length; i < len; i++) {\n      const event = events[uidEventList[i]];\n\n      if (event.originalHandler === handler && event.delegationSelector === delegationSelector) {\n        return event;\n      }\n    }\n\n    return null;\n  }\n\n  function normalizeParams(originalTypeEvent, handler, delegationFn) {\n    const delegation = typeof handler === 'string';\n    const originalHandler = delegation ? delegationFn : handler;\n    let typeEvent = getTypeEvent(originalTypeEvent);\n    const isNative = nativeEvents.has(typeEvent);\n\n    if (!isNative) {\n      typeEvent = originalTypeEvent;\n    }\n\n    return [delegation, originalHandler, typeEvent];\n  }\n\n  function addHandler(element, originalTypeEvent, handler, delegationFn, oneOff) {\n    if (typeof originalTypeEvent !== 'string' || !element) {\n      return;\n    }\n\n    if (!handler) {\n      handler = delegationFn;\n      delegationFn = null;\n    } // in case of mouseenter or mouseleave wrap the handler within a function that checks for its DOM position\n    // this prevents the handler from being dispatched the same way as mouseover or mouseout does\n\n\n    if (customEventsRegex.test(originalTypeEvent)) {\n      const wrapFn = fn => {\n        return function (event) {\n          if (!event.relatedTarget || event.relatedTarget !== event.delegateTarget && !event.delegateTarget.contains(event.relatedTarget)) {\n            return fn.call(this, event);\n          }\n        };\n      };\n\n      if (delegationFn) {\n        delegationFn = wrapFn(delegationFn);\n      } else {\n        handler = wrapFn(handler);\n      }\n    }\n\n    const [delegation, originalHandler, typeEvent] = normalizeParams(originalTypeEvent, handler, delegationFn);\n    const events = getEvent(element);\n    const handlers = events[typeEvent] || (events[typeEvent] = {});\n    const previousFn = findHandler(handlers, originalHandler, delegation ? handler : null);\n\n    if (previousFn) {\n      previousFn.oneOff = previousFn.oneOff && oneOff;\n      return;\n    }\n\n    const uid = getUidEvent(originalHandler, originalTypeEvent.replace(namespaceRegex, ''));\n    const fn = delegation ? bootstrapDelegationHandler(element, handler, delegationFn) : bootstrapHandler(element, handler);\n    fn.delegationSelector = delegation ? handler : null;\n    fn.originalHandler = originalHandler;\n    fn.oneOff = oneOff;\n    fn.uidEvent = uid;\n    handlers[uid] = fn;\n    element.addEventListener(typeEvent, fn, delegation);\n  }\n\n  function removeHandler(element, events, typeEvent, handler, delegationSelector) {\n    const fn = findHandler(events[typeEvent], handler, delegationSelector);\n\n    if (!fn) {\n      return;\n    }\n\n    element.removeEventListener(typeEvent, fn, Boolean(delegationSelector));\n    delete events[typeEvent][fn.uidEvent];\n  }\n\n  function removeNamespacedHandlers(element, events, typeEvent, namespace) {\n    const storeElementEvent = events[typeEvent] || {};\n    Object.keys(storeElementEvent).forEach(handlerKey => {\n      if (handlerKey.includes(namespace)) {\n        const event = storeElementEvent[handlerKey];\n        removeHandler(element, events, typeEvent, event.originalHandler, event.delegationSelector);\n      }\n    });\n  }\n\n  function getTypeEvent(event) {\n    // allow to get the native events from namespaced events ('click.bs.button' --> 'click')\n    event = event.replace(stripNameRegex, '');\n    return customEvents[event] || event;\n  }\n\n  const EventHandler = {\n    on(element, event, handler, delegationFn) {\n      addHandler(element, event, handler, delegationFn, false);\n    },\n\n    one(element, event, handler, delegationFn) {\n      addHandler(element, event, handler, delegationFn, true);\n    },\n\n    off(element, originalTypeEvent, handler, delegationFn) {\n      if (typeof originalTypeEvent !== 'string' || !element) {\n        return;\n      }\n\n      const [delegation, originalHandler, typeEvent] = normalizeParams(originalTypeEvent, handler, delegationFn);\n      const inNamespace = typeEvent !== originalTypeEvent;\n      const events = getEvent(element);\n      const isNamespace = originalTypeEvent.startsWith('.');\n\n      if (typeof originalHandler !== 'undefined') {\n        // Simplest case: handler is passed, remove that listener ONLY.\n        if (!events || !events[typeEvent]) {\n          return;\n        }\n\n        removeHandler(element, events, typeEvent, originalHandler, delegation ? handler : null);\n        return;\n      }\n\n      if (isNamespace) {\n        Object.keys(events).forEach(elementEvent => {\n          removeNamespacedHandlers(element, events, elementEvent, originalTypeEvent.slice(1));\n        });\n      }\n\n      const storeElementEvent = events[typeEvent] || {};\n      Object.keys(storeElementEvent).forEach(keyHandlers => {\n        const handlerKey = keyHandlers.replace(stripUidRegex, '');\n\n        if (!inNamespace || originalTypeEvent.includes(handlerKey)) {\n          const event = storeElementEvent[keyHandlers];\n          removeHandler(element, events, typeEvent, event.originalHandler, event.delegationSelector);\n        }\n      });\n    },\n\n    trigger(element, event, args) {\n      if (typeof event !== 'string' || !element) {\n        return null;\n      }\n\n      const $ = getjQuery();\n      const typeEvent = getTypeEvent(event);\n      const inNamespace = event !== typeEvent;\n      const isNative = nativeEvents.has(typeEvent);\n      let jQueryEvent;\n      let bubbles = true;\n      let nativeDispatch = true;\n      let defaultPrevented = false;\n      let evt = null;\n\n      if (inNamespace && $) {\n        jQueryEvent = $.Event(event, args);\n        $(element).trigger(jQueryEvent);\n        bubbles = !jQueryEvent.isPropagationStopped();\n        nativeDispatch = !jQueryEvent.isImmediatePropagationStopped();\n        defaultPrevented = jQueryEvent.isDefaultPrevented();\n      }\n\n      if (isNative) {\n        evt = document.createEvent('HTMLEvents');\n        evt.initEvent(typeEvent, bubbles, true);\n      } else {\n        evt = new CustomEvent(event, {\n          bubbles,\n          cancelable: true\n        });\n      } // merge custom information in our event\n\n\n      if (typeof args !== 'undefined') {\n        Object.keys(args).forEach(key => {\n          Object.defineProperty(evt, key, {\n            get() {\n              return args[key];\n            }\n\n          });\n        });\n      }\n\n      if (defaultPrevented) {\n        evt.preventDefault();\n      }\n\n      if (nativeDispatch) {\n        element.dispatchEvent(evt);\n      }\n\n      if (evt.defaultPrevented && typeof jQueryEvent !== 'undefined') {\n        jQueryEvent.preventDefault();\n      }\n\n      return evt;\n    }\n\n  };\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): dom/data.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n  const elementMap = new Map();\n  var Data = {\n    set(element, key, instance) {\n      if (!elementMap.has(element)) {\n        elementMap.set(element, new Map());\n      }\n\n      const instanceMap = elementMap.get(element); // make it clear we only want one instance per element\n      // can be removed later when multiple key/instances are fine to be used\n\n      if (!instanceMap.has(key) && instanceMap.size !== 0) {\n        // eslint-disable-next-line no-console\n        console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(instanceMap.keys())[0]}.`);\n        return;\n      }\n\n      instanceMap.set(key, instance);\n    },\n\n    get(element, key) {\n      if (elementMap.has(element)) {\n        return elementMap.get(element).get(key) || null;\n      }\n\n      return null;\n    },\n\n    remove(element, key) {\n      if (!elementMap.has(element)) {\n        return;\n      }\n\n      const instanceMap = elementMap.get(element);\n      instanceMap.delete(key); // free up element references if there are no instances left for an element\n\n      if (instanceMap.size === 0) {\n        elementMap.delete(element);\n      }\n    }\n\n  };\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): base-component.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const VERSION = '5.0.2';\n\n  class BaseComponent {\n    constructor(element) {\n      element = getElement(element);\n\n      if (!element) {\n        return;\n      }\n\n      this._element = element;\n      Data.set(this._element, this.constructor.DATA_KEY, this);\n    }\n\n    dispose() {\n      Data.remove(this._element, this.constructor.DATA_KEY);\n      EventHandler.off(this._element, this.constructor.EVENT_KEY);\n      Object.getOwnPropertyNames(this).forEach(propertyName => {\n        this[propertyName] = null;\n      });\n    }\n\n    _queueCallback(callback, element, isAnimated = true) {\n      executeAfterTransition(callback, element, isAnimated);\n    }\n    /** Static */\n\n\n    static getInstance(element) {\n      return Data.get(element, this.DATA_KEY);\n    }\n\n    static getOrCreateInstance(element, config = {}) {\n      return this.getInstance(element) || new this(element, typeof config === 'object' ? config : null);\n    }\n\n    static get VERSION() {\n      return VERSION;\n    }\n\n    static get NAME() {\n      throw new Error('You have to implement the static method \"NAME\", for each component!');\n    }\n\n    static get DATA_KEY() {\n      return `bs.${this.NAME}`;\n    }\n\n    static get EVENT_KEY() {\n      return `.${this.DATA_KEY}`;\n    }\n\n  }\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): alert.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$c = 'alert';\n  const DATA_KEY$b = 'bs.alert';\n  const EVENT_KEY$b = `.${DATA_KEY$b}`;\n  const DATA_API_KEY$8 = '.data-api';\n  const SELECTOR_DISMISS = '[data-bs-dismiss=\"alert\"]';\n  const EVENT_CLOSE = `close${EVENT_KEY$b}`;\n  const EVENT_CLOSED = `closed${EVENT_KEY$b}`;\n  const EVENT_CLICK_DATA_API$7 = `click${EVENT_KEY$b}${DATA_API_KEY$8}`;\n  const CLASS_NAME_ALERT = 'alert';\n  const CLASS_NAME_FADE$6 = 'fade';\n  const CLASS_NAME_SHOW$9 = 'show';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Alert extends BaseComponent {\n    // Getters\n    static get NAME() {\n      return NAME$c;\n    } // Public\n\n\n    close(element) {\n      const rootElement = element ? this._getRootElement(element) : this._element;\n\n      const customEvent = this._triggerCloseEvent(rootElement);\n\n      if (customEvent === null || customEvent.defaultPrevented) {\n        return;\n      }\n\n      this._removeElement(rootElement);\n    } // Private\n\n\n    _getRootElement(element) {\n      return getElementFromSelector(element) || element.closest(`.${CLASS_NAME_ALERT}`);\n    }\n\n    _triggerCloseEvent(element) {\n      return EventHandler.trigger(element, EVENT_CLOSE);\n    }\n\n    _removeElement(element) {\n      element.classList.remove(CLASS_NAME_SHOW$9);\n      const isAnimated = element.classList.contains(CLASS_NAME_FADE$6);\n\n      this._queueCallback(() => this._destroyElement(element), element, isAnimated);\n    }\n\n    _destroyElement(element) {\n      element.remove();\n      EventHandler.trigger(element, EVENT_CLOSED);\n    } // Static\n\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = Alert.getOrCreateInstance(this);\n\n        if (config === 'close') {\n          data[config](this);\n        }\n      });\n    }\n\n    static handleDismiss(alertInstance) {\n      return function (event) {\n        if (event) {\n          event.preventDefault();\n        }\n\n        alertInstance.close(this);\n      };\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(document, EVENT_CLICK_DATA_API$7, SELECTOR_DISMISS, Alert.handleDismiss(new Alert()));\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Alert to jQuery only if jQuery is present\n   */\n\n  defineJQueryPlugin(Alert);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): button.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$b = 'button';\n  const DATA_KEY$a = 'bs.button';\n  const EVENT_KEY$a = `.${DATA_KEY$a}`;\n  const DATA_API_KEY$7 = '.data-api';\n  const CLASS_NAME_ACTIVE$3 = 'active';\n  const SELECTOR_DATA_TOGGLE$5 = '[data-bs-toggle=\"button\"]';\n  const EVENT_CLICK_DATA_API$6 = `click${EVENT_KEY$a}${DATA_API_KEY$7}`;\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Button extends BaseComponent {\n    // Getters\n    static get NAME() {\n      return NAME$b;\n    } // Public\n\n\n    toggle() {\n      // Toggle class and sync the `aria-pressed` attribute with the return value of the `.toggle()` method\n      this._element.setAttribute('aria-pressed', this._element.classList.toggle(CLASS_NAME_ACTIVE$3));\n    } // Static\n\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = Button.getOrCreateInstance(this);\n\n        if (config === 'toggle') {\n          data[config]();\n        }\n      });\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(document, EVENT_CLICK_DATA_API$6, SELECTOR_DATA_TOGGLE$5, event => {\n    event.preventDefault();\n    const button = event.target.closest(SELECTOR_DATA_TOGGLE$5);\n    const data = Button.getOrCreateInstance(button);\n    data.toggle();\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Button to jQuery only if jQuery is present\n   */\n\n  defineJQueryPlugin(Button);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): dom/manipulator.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  function normalizeData(val) {\n    if (val === 'true') {\n      return true;\n    }\n\n    if (val === 'false') {\n      return false;\n    }\n\n    if (val === Number(val).toString()) {\n      return Number(val);\n    }\n\n    if (val === '' || val === 'null') {\n      return null;\n    }\n\n    return val;\n  }\n\n  function normalizeDataKey(key) {\n    return key.replace(/[A-Z]/g, chr => `-${chr.toLowerCase()}`);\n  }\n\n  const Manipulator = {\n    setDataAttribute(element, key, value) {\n      element.setAttribute(`data-bs-${normalizeDataKey(key)}`, value);\n    },\n\n    removeDataAttribute(element, key) {\n      element.removeAttribute(`data-bs-${normalizeDataKey(key)}`);\n    },\n\n    getDataAttributes(element) {\n      if (!element) {\n        return {};\n      }\n\n      const attributes = {};\n      Object.keys(element.dataset).filter(key => key.startsWith('bs')).forEach(key => {\n        let pureKey = key.replace(/^bs/, '');\n        pureKey = pureKey.charAt(0).toLowerCase() + pureKey.slice(1, pureKey.length);\n        attributes[pureKey] = normalizeData(element.dataset[key]);\n      });\n      return attributes;\n    },\n\n    getDataAttribute(element, key) {\n      return normalizeData(element.getAttribute(`data-bs-${normalizeDataKey(key)}`));\n    },\n\n    offset(element) {\n      const rect = element.getBoundingClientRect();\n      return {\n        top: rect.top + document.body.scrollTop,\n        left: rect.left + document.body.scrollLeft\n      };\n    },\n\n    position(element) {\n      return {\n        top: element.offsetTop,\n        left: element.offsetLeft\n      };\n    }\n\n  };\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): carousel.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$a = 'carousel';\n  const DATA_KEY$9 = 'bs.carousel';\n  const EVENT_KEY$9 = `.${DATA_KEY$9}`;\n  const DATA_API_KEY$6 = '.data-api';\n  const ARROW_LEFT_KEY = 'ArrowLeft';\n  const ARROW_RIGHT_KEY = 'ArrowRight';\n  const TOUCHEVENT_COMPAT_WAIT = 500; // Time for mouse compat events to fire after touch\n\n  const SWIPE_THRESHOLD = 40;\n  const Default$9 = {\n    interval: 5000,\n    keyboard: true,\n    slide: false,\n    pause: 'hover',\n    wrap: true,\n    touch: true\n  };\n  const DefaultType$9 = {\n    interval: '(number|boolean)',\n    keyboard: 'boolean',\n    slide: '(boolean|string)',\n    pause: '(string|boolean)',\n    wrap: 'boolean',\n    touch: 'boolean'\n  };\n  const ORDER_NEXT = 'next';\n  const ORDER_PREV = 'prev';\n  const DIRECTION_LEFT = 'left';\n  const DIRECTION_RIGHT = 'right';\n  const KEY_TO_DIRECTION = {\n    [ARROW_LEFT_KEY]: DIRECTION_RIGHT,\n    [ARROW_RIGHT_KEY]: DIRECTION_LEFT\n  };\n  const EVENT_SLIDE = `slide${EVENT_KEY$9}`;\n  const EVENT_SLID = `slid${EVENT_KEY$9}`;\n  const EVENT_KEYDOWN = `keydown${EVENT_KEY$9}`;\n  const EVENT_MOUSEENTER = `mouseenter${EVENT_KEY$9}`;\n  const EVENT_MOUSELEAVE = `mouseleave${EVENT_KEY$9}`;\n  const EVENT_TOUCHSTART = `touchstart${EVENT_KEY$9}`;\n  const EVENT_TOUCHMOVE = `touchmove${EVENT_KEY$9}`;\n  const EVENT_TOUCHEND = `touchend${EVENT_KEY$9}`;\n  const EVENT_POINTERDOWN = `pointerdown${EVENT_KEY$9}`;\n  const EVENT_POINTERUP = `pointerup${EVENT_KEY$9}`;\n  const EVENT_DRAG_START = `dragstart${EVENT_KEY$9}`;\n  const EVENT_LOAD_DATA_API$2 = `load${EVENT_KEY$9}${DATA_API_KEY$6}`;\n  const EVENT_CLICK_DATA_API$5 = `click${EVENT_KEY$9}${DATA_API_KEY$6}`;\n  const CLASS_NAME_CAROUSEL = 'carousel';\n  const CLASS_NAME_ACTIVE$2 = 'active';\n  const CLASS_NAME_SLIDE = 'slide';\n  const CLASS_NAME_END = 'carousel-item-end';\n  const CLASS_NAME_START = 'carousel-item-start';\n  const CLASS_NAME_NEXT = 'carousel-item-next';\n  const CLASS_NAME_PREV = 'carousel-item-prev';\n  const CLASS_NAME_POINTER_EVENT = 'pointer-event';\n  const SELECTOR_ACTIVE$1 = '.active';\n  const SELECTOR_ACTIVE_ITEM = '.active.carousel-item';\n  const SELECTOR_ITEM = '.carousel-item';\n  const SELECTOR_ITEM_IMG = '.carousel-item img';\n  const SELECTOR_NEXT_PREV = '.carousel-item-next, .carousel-item-prev';\n  const SELECTOR_INDICATORS = '.carousel-indicators';\n  const SELECTOR_INDICATOR = '[data-bs-target]';\n  const SELECTOR_DATA_SLIDE = '[data-bs-slide], [data-bs-slide-to]';\n  const SELECTOR_DATA_RIDE = '[data-bs-ride=\"carousel\"]';\n  const POINTER_TYPE_TOUCH = 'touch';\n  const POINTER_TYPE_PEN = 'pen';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Carousel extends BaseComponent {\n    constructor(element, config) {\n      super(element);\n      this._items = null;\n      this._interval = null;\n      this._activeElement = null;\n      this._isPaused = false;\n      this._isSliding = false;\n      this.touchTimeout = null;\n      this.touchStartX = 0;\n      this.touchDeltaX = 0;\n      this._config = this._getConfig(config);\n      this._indicatorsElement = SelectorEngine.findOne(SELECTOR_INDICATORS, this._element);\n      this._touchSupported = 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0;\n      this._pointerEvent = Boolean(window.PointerEvent);\n\n      this._addEventListeners();\n    } // Getters\n\n\n    static get Default() {\n      return Default$9;\n    }\n\n    static get NAME() {\n      return NAME$a;\n    } // Public\n\n\n    next() {\n      this._slide(ORDER_NEXT);\n    }\n\n    nextWhenVisible() {\n      // Don't call next when the page isn't visible\n      // or the carousel or its parent isn't visible\n      if (!document.hidden && isVisible(this._element)) {\n        this.next();\n      }\n    }\n\n    prev() {\n      this._slide(ORDER_PREV);\n    }\n\n    pause(event) {\n      if (!event) {\n        this._isPaused = true;\n      }\n\n      if (SelectorEngine.findOne(SELECTOR_NEXT_PREV, this._element)) {\n        triggerTransitionEnd(this._element);\n        this.cycle(true);\n      }\n\n      clearInterval(this._interval);\n      this._interval = null;\n    }\n\n    cycle(event) {\n      if (!event) {\n        this._isPaused = false;\n      }\n\n      if (this._interval) {\n        clearInterval(this._interval);\n        this._interval = null;\n      }\n\n      if (this._config && this._config.interval && !this._isPaused) {\n        this._updateInterval();\n\n        this._interval = setInterval((document.visibilityState ? this.nextWhenVisible : this.next).bind(this), this._config.interval);\n      }\n    }\n\n    to(index) {\n      this._activeElement = SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element);\n\n      const activeIndex = this._getItemIndex(this._activeElement);\n\n      if (index > this._items.length - 1 || index < 0) {\n        return;\n      }\n\n      if (this._isSliding) {\n        EventHandler.one(this._element, EVENT_SLID, () => this.to(index));\n        return;\n      }\n\n      if (activeIndex === index) {\n        this.pause();\n        this.cycle();\n        return;\n      }\n\n      const order = index > activeIndex ? ORDER_NEXT : ORDER_PREV;\n\n      this._slide(order, this._items[index]);\n    } // Private\n\n\n    _getConfig(config) {\n      config = { ...Default$9,\n        ...Manipulator.getDataAttributes(this._element),\n        ...(typeof config === 'object' ? config : {})\n      };\n      typeCheckConfig(NAME$a, config, DefaultType$9);\n      return config;\n    }\n\n    _handleSwipe() {\n      const absDeltax = Math.abs(this.touchDeltaX);\n\n      if (absDeltax <= SWIPE_THRESHOLD) {\n        return;\n      }\n\n      const direction = absDeltax / this.touchDeltaX;\n      this.touchDeltaX = 0;\n\n      if (!direction) {\n        return;\n      }\n\n      this._slide(direction > 0 ? DIRECTION_RIGHT : DIRECTION_LEFT);\n    }\n\n    _addEventListeners() {\n      if (this._config.keyboard) {\n        EventHandler.on(this._element, EVENT_KEYDOWN, event => this._keydown(event));\n      }\n\n      if (this._config.pause === 'hover') {\n        EventHandler.on(this._element, EVENT_MOUSEENTER, event => this.pause(event));\n        EventHandler.on(this._element, EVENT_MOUSELEAVE, event => this.cycle(event));\n      }\n\n      if (this._config.touch && this._touchSupported) {\n        this._addTouchEventListeners();\n      }\n    }\n\n    _addTouchEventListeners() {\n      const start = event => {\n        if (this._pointerEvent && (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH)) {\n          this.touchStartX = event.clientX;\n        } else if (!this._pointerEvent) {\n          this.touchStartX = event.touches[0].clientX;\n        }\n      };\n\n      const move = event => {\n        // ensure swiping with one touch and not pinching\n        this.touchDeltaX = event.touches && event.touches.length > 1 ? 0 : event.touches[0].clientX - this.touchStartX;\n      };\n\n      const end = event => {\n        if (this._pointerEvent && (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH)) {\n          this.touchDeltaX = event.clientX - this.touchStartX;\n        }\n\n        this._handleSwipe();\n\n        if (this._config.pause === 'hover') {\n          // If it's a touch-enabled device, mouseenter/leave are fired as\n          // part of the mouse compatibility events on first tap - the carousel\n          // would stop cycling until user tapped out of it;\n          // here, we listen for touchend, explicitly pause the carousel\n          // (as if it's the second time we tap on it, mouseenter compat event\n          // is NOT fired) and after a timeout (to allow for mouse compatibility\n          // events to fire) we explicitly restart cycling\n          this.pause();\n\n          if (this.touchTimeout) {\n            clearTimeout(this.touchTimeout);\n          }\n\n          this.touchTimeout = setTimeout(event => this.cycle(event), TOUCHEVENT_COMPAT_WAIT + this._config.interval);\n        }\n      };\n\n      SelectorEngine.find(SELECTOR_ITEM_IMG, this._element).forEach(itemImg => {\n        EventHandler.on(itemImg, EVENT_DRAG_START, e => e.preventDefault());\n      });\n\n      if (this._pointerEvent) {\n        EventHandler.on(this._element, EVENT_POINTERDOWN, event => start(event));\n        EventHandler.on(this._element, EVENT_POINTERUP, event => end(event));\n\n        this._element.classList.add(CLASS_NAME_POINTER_EVENT);\n      } else {\n        EventHandler.on(this._element, EVENT_TOUCHSTART, event => start(event));\n        EventHandler.on(this._element, EVENT_TOUCHMOVE, event => move(event));\n        EventHandler.on(this._element, EVENT_TOUCHEND, event => end(event));\n      }\n    }\n\n    _keydown(event) {\n      if (/input|textarea/i.test(event.target.tagName)) {\n        return;\n      }\n\n      const direction = KEY_TO_DIRECTION[event.key];\n\n      if (direction) {\n        event.preventDefault();\n\n        this._slide(direction);\n      }\n    }\n\n    _getItemIndex(element) {\n      this._items = element && element.parentNode ? SelectorEngine.find(SELECTOR_ITEM, element.parentNode) : [];\n      return this._items.indexOf(element);\n    }\n\n    _getItemByOrder(order, activeElement) {\n      const isNext = order === ORDER_NEXT;\n      return getNextActiveElement(this._items, activeElement, isNext, this._config.wrap);\n    }\n\n    _triggerSlideEvent(relatedTarget, eventDirectionName) {\n      const targetIndex = this._getItemIndex(relatedTarget);\n\n      const fromIndex = this._getItemIndex(SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element));\n\n      return EventHandler.trigger(this._element, EVENT_SLIDE, {\n        relatedTarget,\n        direction: eventDirectionName,\n        from: fromIndex,\n        to: targetIndex\n      });\n    }\n\n    _setActiveIndicatorElement(element) {\n      if (this._indicatorsElement) {\n        const activeIndicator = SelectorEngine.findOne(SELECTOR_ACTIVE$1, this._indicatorsElement);\n        activeIndicator.classList.remove(CLASS_NAME_ACTIVE$2);\n        activeIndicator.removeAttribute('aria-current');\n        const indicators = SelectorEngine.find(SELECTOR_INDICATOR, this._indicatorsElement);\n\n        for (let i = 0; i < indicators.length; i++) {\n          if (Number.parseInt(indicators[i].getAttribute('data-bs-slide-to'), 10) === this._getItemIndex(element)) {\n            indicators[i].classList.add(CLASS_NAME_ACTIVE$2);\n            indicators[i].setAttribute('aria-current', 'true');\n            break;\n          }\n        }\n      }\n    }\n\n    _updateInterval() {\n      const element = this._activeElement || SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element);\n\n      if (!element) {\n        return;\n      }\n\n      const elementInterval = Number.parseInt(element.getAttribute('data-bs-interval'), 10);\n\n      if (elementInterval) {\n        this._config.defaultInterval = this._config.defaultInterval || this._config.interval;\n        this._config.interval = elementInterval;\n      } else {\n        this._config.interval = this._config.defaultInterval || this._config.interval;\n      }\n    }\n\n    _slide(directionOrOrder, element) {\n      const order = this._directionToOrder(directionOrOrder);\n\n      const activeElement = SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element);\n\n      const activeElementIndex = this._getItemIndex(activeElement);\n\n      const nextElement = element || this._getItemByOrder(order, activeElement);\n\n      const nextElementIndex = this._getItemIndex(nextElement);\n\n      const isCycling = Boolean(this._interval);\n      const isNext = order === ORDER_NEXT;\n      const directionalClassName = isNext ? CLASS_NAME_START : CLASS_NAME_END;\n      const orderClassName = isNext ? CLASS_NAME_NEXT : CLASS_NAME_PREV;\n\n      const eventDirectionName = this._orderToDirection(order);\n\n      if (nextElement && nextElement.classList.contains(CLASS_NAME_ACTIVE$2)) {\n        this._isSliding = false;\n        return;\n      }\n\n      if (this._isSliding) {\n        return;\n      }\n\n      const slideEvent = this._triggerSlideEvent(nextElement, eventDirectionName);\n\n      if (slideEvent.defaultPrevented) {\n        return;\n      }\n\n      if (!activeElement || !nextElement) {\n        // Some weirdness is happening, so we bail\n        return;\n      }\n\n      this._isSliding = true;\n\n      if (isCycling) {\n        this.pause();\n      }\n\n      this._setActiveIndicatorElement(nextElement);\n\n      this._activeElement = nextElement;\n\n      const triggerSlidEvent = () => {\n        EventHandler.trigger(this._element, EVENT_SLID, {\n          relatedTarget: nextElement,\n          direction: eventDirectionName,\n          from: activeElementIndex,\n          to: nextElementIndex\n        });\n      };\n\n      if (this._element.classList.contains(CLASS_NAME_SLIDE)) {\n        nextElement.classList.add(orderClassName);\n        reflow(nextElement);\n        activeElement.classList.add(directionalClassName);\n        nextElement.classList.add(directionalClassName);\n\n        const completeCallBack = () => {\n          nextElement.classList.remove(directionalClassName, orderClassName);\n          nextElement.classList.add(CLASS_NAME_ACTIVE$2);\n          activeElement.classList.remove(CLASS_NAME_ACTIVE$2, orderClassName, directionalClassName);\n          this._isSliding = false;\n          setTimeout(triggerSlidEvent, 0);\n        };\n\n        this._queueCallback(completeCallBack, activeElement, true);\n      } else {\n        activeElement.classList.remove(CLASS_NAME_ACTIVE$2);\n        nextElement.classList.add(CLASS_NAME_ACTIVE$2);\n        this._isSliding = false;\n        triggerSlidEvent();\n      }\n\n      if (isCycling) {\n        this.cycle();\n      }\n    }\n\n    _directionToOrder(direction) {\n      if (![DIRECTION_RIGHT, DIRECTION_LEFT].includes(direction)) {\n        return direction;\n      }\n\n      if (isRTL()) {\n        return direction === DIRECTION_LEFT ? ORDER_PREV : ORDER_NEXT;\n      }\n\n      return direction === DIRECTION_LEFT ? ORDER_NEXT : ORDER_PREV;\n    }\n\n    _orderToDirection(order) {\n      if (![ORDER_NEXT, ORDER_PREV].includes(order)) {\n        return order;\n      }\n\n      if (isRTL()) {\n        return order === ORDER_PREV ? DIRECTION_LEFT : DIRECTION_RIGHT;\n      }\n\n      return order === ORDER_PREV ? DIRECTION_RIGHT : DIRECTION_LEFT;\n    } // Static\n\n\n    static carouselInterface(element, config) {\n      const data = Carousel.getOrCreateInstance(element, config);\n      let {\n        _config\n      } = data;\n\n      if (typeof config === 'object') {\n        _config = { ..._config,\n          ...config\n        };\n      }\n\n      const action = typeof config === 'string' ? config : _config.slide;\n\n      if (typeof config === 'number') {\n        data.to(config);\n      } else if (typeof action === 'string') {\n        if (typeof data[action] === 'undefined') {\n          throw new TypeError(`No method named \"${action}\"`);\n        }\n\n        data[action]();\n      } else if (_config.interval && _config.ride) {\n        data.pause();\n        data.cycle();\n      }\n    }\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        Carousel.carouselInterface(this, config);\n      });\n    }\n\n    static dataApiClickHandler(event) {\n      const target = getElementFromSelector(this);\n\n      if (!target || !target.classList.contains(CLASS_NAME_CAROUSEL)) {\n        return;\n      }\n\n      const config = { ...Manipulator.getDataAttributes(target),\n        ...Manipulator.getDataAttributes(this)\n      };\n      const slideIndex = this.getAttribute('data-bs-slide-to');\n\n      if (slideIndex) {\n        config.interval = false;\n      }\n\n      Carousel.carouselInterface(target, config);\n\n      if (slideIndex) {\n        Carousel.getInstance(target).to(slideIndex);\n      }\n\n      event.preventDefault();\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(document, EVENT_CLICK_DATA_API$5, SELECTOR_DATA_SLIDE, Carousel.dataApiClickHandler);\n  EventHandler.on(window, EVENT_LOAD_DATA_API$2, () => {\n    const carousels = SelectorEngine.find(SELECTOR_DATA_RIDE);\n\n    for (let i = 0, len = carousels.length; i < len; i++) {\n      Carousel.carouselInterface(carousels[i], Carousel.getInstance(carousels[i]));\n    }\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Carousel to jQuery only if jQuery is present\n   */\n\n  defineJQueryPlugin(Carousel);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): collapse.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$9 = 'collapse';\n  const DATA_KEY$8 = 'bs.collapse';\n  const EVENT_KEY$8 = `.${DATA_KEY$8}`;\n  const DATA_API_KEY$5 = '.data-api';\n  const Default$8 = {\n    toggle: true,\n    parent: ''\n  };\n  const DefaultType$8 = {\n    toggle: 'boolean',\n    parent: '(string|element)'\n  };\n  const EVENT_SHOW$5 = `show${EVENT_KEY$8}`;\n  const EVENT_SHOWN$5 = `shown${EVENT_KEY$8}`;\n  const EVENT_HIDE$5 = `hide${EVENT_KEY$8}`;\n  const EVENT_HIDDEN$5 = `hidden${EVENT_KEY$8}`;\n  const EVENT_CLICK_DATA_API$4 = `click${EVENT_KEY$8}${DATA_API_KEY$5}`;\n  const CLASS_NAME_SHOW$8 = 'show';\n  const CLASS_NAME_COLLAPSE = 'collapse';\n  const CLASS_NAME_COLLAPSING = 'collapsing';\n  const CLASS_NAME_COLLAPSED = 'collapsed';\n  const WIDTH = 'width';\n  const HEIGHT = 'height';\n  const SELECTOR_ACTIVES = '.show, .collapsing';\n  const SELECTOR_DATA_TOGGLE$4 = '[data-bs-toggle=\"collapse\"]';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Collapse extends BaseComponent {\n    constructor(element, config) {\n      super(element);\n      this._isTransitioning = false;\n      this._config = this._getConfig(config);\n      this._triggerArray = SelectorEngine.find(`${SELECTOR_DATA_TOGGLE$4}[href=\"#${this._element.id}\"],` + `${SELECTOR_DATA_TOGGLE$4}[data-bs-target=\"#${this._element.id}\"]`);\n      const toggleList = SelectorEngine.find(SELECTOR_DATA_TOGGLE$4);\n\n      for (let i = 0, len = toggleList.length; i < len; i++) {\n        const elem = toggleList[i];\n        const selector = getSelectorFromElement(elem);\n        const filterElement = SelectorEngine.find(selector).filter(foundElem => foundElem === this._element);\n\n        if (selector !== null && filterElement.length) {\n          this._selector = selector;\n\n          this._triggerArray.push(elem);\n        }\n      }\n\n      this._parent = this._config.parent ? this._getParent() : null;\n\n      if (!this._config.parent) {\n        this._addAriaAndCollapsedClass(this._element, this._triggerArray);\n      }\n\n      if (this._config.toggle) {\n        this.toggle();\n      }\n    } // Getters\n\n\n    static get Default() {\n      return Default$8;\n    }\n\n    static get NAME() {\n      return NAME$9;\n    } // Public\n\n\n    toggle() {\n      if (this._element.classList.contains(CLASS_NAME_SHOW$8)) {\n        this.hide();\n      } else {\n        this.show();\n      }\n    }\n\n    show() {\n      if (this._isTransitioning || this._element.classList.contains(CLASS_NAME_SHOW$8)) {\n        return;\n      }\n\n      let actives;\n      let activesData;\n\n      if (this._parent) {\n        actives = SelectorEngine.find(SELECTOR_ACTIVES, this._parent).filter(elem => {\n          if (typeof this._config.parent === 'string') {\n            return elem.getAttribute('data-bs-parent') === this._config.parent;\n          }\n\n          return elem.classList.contains(CLASS_NAME_COLLAPSE);\n        });\n\n        if (actives.length === 0) {\n          actives = null;\n        }\n      }\n\n      const container = SelectorEngine.findOne(this._selector);\n\n      if (actives) {\n        const tempActiveData = actives.find(elem => container !== elem);\n        activesData = tempActiveData ? Collapse.getInstance(tempActiveData) : null;\n\n        if (activesData && activesData._isTransitioning) {\n          return;\n        }\n      }\n\n      const startEvent = EventHandler.trigger(this._element, EVENT_SHOW$5);\n\n      if (startEvent.defaultPrevented) {\n        return;\n      }\n\n      if (actives) {\n        actives.forEach(elemActive => {\n          if (container !== elemActive) {\n            Collapse.collapseInterface(elemActive, 'hide');\n          }\n\n          if (!activesData) {\n            Data.set(elemActive, DATA_KEY$8, null);\n          }\n        });\n      }\n\n      const dimension = this._getDimension();\n\n      this._element.classList.remove(CLASS_NAME_COLLAPSE);\n\n      this._element.classList.add(CLASS_NAME_COLLAPSING);\n\n      this._element.style[dimension] = 0;\n\n      if (this._triggerArray.length) {\n        this._triggerArray.forEach(element => {\n          element.classList.remove(CLASS_NAME_COLLAPSED);\n          element.setAttribute('aria-expanded', true);\n        });\n      }\n\n      this.setTransitioning(true);\n\n      const complete = () => {\n        this._element.classList.remove(CLASS_NAME_COLLAPSING);\n\n        this._element.classList.add(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$8);\n\n        this._element.style[dimension] = '';\n        this.setTransitioning(false);\n        EventHandler.trigger(this._element, EVENT_SHOWN$5);\n      };\n\n      const capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1);\n      const scrollSize = `scroll${capitalizedDimension}`;\n\n      this._queueCallback(complete, this._element, true);\n\n      this._element.style[dimension] = `${this._element[scrollSize]}px`;\n    }\n\n    hide() {\n      if (this._isTransitioning || !this._element.classList.contains(CLASS_NAME_SHOW$8)) {\n        return;\n      }\n\n      const startEvent = EventHandler.trigger(this._element, EVENT_HIDE$5);\n\n      if (startEvent.defaultPrevented) {\n        return;\n      }\n\n      const dimension = this._getDimension();\n\n      this._element.style[dimension] = `${this._element.getBoundingClientRect()[dimension]}px`;\n      reflow(this._element);\n\n      this._element.classList.add(CLASS_NAME_COLLAPSING);\n\n      this._element.classList.remove(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$8);\n\n      const triggerArrayLength = this._triggerArray.length;\n\n      if (triggerArrayLength > 0) {\n        for (let i = 0; i < triggerArrayLength; i++) {\n          const trigger = this._triggerArray[i];\n          const elem = getElementFromSelector(trigger);\n\n          if (elem && !elem.classList.contains(CLASS_NAME_SHOW$8)) {\n            trigger.classList.add(CLASS_NAME_COLLAPSED);\n            trigger.setAttribute('aria-expanded', false);\n          }\n        }\n      }\n\n      this.setTransitioning(true);\n\n      const complete = () => {\n        this.setTransitioning(false);\n\n        this._element.classList.remove(CLASS_NAME_COLLAPSING);\n\n        this._element.classList.add(CLASS_NAME_COLLAPSE);\n\n        EventHandler.trigger(this._element, EVENT_HIDDEN$5);\n      };\n\n      this._element.style[dimension] = '';\n\n      this._queueCallback(complete, this._element, true);\n    }\n\n    setTransitioning(isTransitioning) {\n      this._isTransitioning = isTransitioning;\n    } // Private\n\n\n    _getConfig(config) {\n      config = { ...Default$8,\n        ...config\n      };\n      config.toggle = Boolean(config.toggle); // Coerce string values\n\n      typeCheckConfig(NAME$9, config, DefaultType$8);\n      return config;\n    }\n\n    _getDimension() {\n      return this._element.classList.contains(WIDTH) ? WIDTH : HEIGHT;\n    }\n\n    _getParent() {\n      let {\n        parent\n      } = this._config;\n      parent = getElement(parent);\n      const selector = `${SELECTOR_DATA_TOGGLE$4}[data-bs-parent=\"${parent}\"]`;\n      SelectorEngine.find(selector, parent).forEach(element => {\n        const selected = getElementFromSelector(element);\n\n        this._addAriaAndCollapsedClass(selected, [element]);\n      });\n      return parent;\n    }\n\n    _addAriaAndCollapsedClass(element, triggerArray) {\n      if (!element || !triggerArray.length) {\n        return;\n      }\n\n      const isOpen = element.classList.contains(CLASS_NAME_SHOW$8);\n      triggerArray.forEach(elem => {\n        if (isOpen) {\n          elem.classList.remove(CLASS_NAME_COLLAPSED);\n        } else {\n          elem.classList.add(CLASS_NAME_COLLAPSED);\n        }\n\n        elem.setAttribute('aria-expanded', isOpen);\n      });\n    } // Static\n\n\n    static collapseInterface(element, config) {\n      let data = Collapse.getInstance(element);\n      const _config = { ...Default$8,\n        ...Manipulator.getDataAttributes(element),\n        ...(typeof config === 'object' && config ? config : {})\n      };\n\n      if (!data && _config.toggle && typeof config === 'string' && /show|hide/.test(config)) {\n        _config.toggle = false;\n      }\n\n      if (!data) {\n        data = new Collapse(element, _config);\n      }\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config]();\n      }\n    }\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        Collapse.collapseInterface(this, config);\n      });\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(document, EVENT_CLICK_DATA_API$4, SELECTOR_DATA_TOGGLE$4, function (event) {\n    // preventDefault only for <a> elements (which change the URL) not inside the collapsible element\n    if (event.target.tagName === 'A' || event.delegateTarget && event.delegateTarget.tagName === 'A') {\n      event.preventDefault();\n    }\n\n    const triggerData = Manipulator.getDataAttributes(this);\n    const selector = getSelectorFromElement(this);\n    const selectorElements = SelectorEngine.find(selector);\n    selectorElements.forEach(element => {\n      const data = Collapse.getInstance(element);\n      let config;\n\n      if (data) {\n        // update parent attribute\n        if (data._parent === null && typeof triggerData.parent === 'string') {\n          data._config.parent = triggerData.parent;\n          data._parent = data._getParent();\n        }\n\n        config = 'toggle';\n      } else {\n        config = triggerData;\n      }\n\n      Collapse.collapseInterface(element, config);\n    });\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Collapse to jQuery only if jQuery is present\n   */\n\n  defineJQueryPlugin(Collapse);\n\n  var top = 'top';\n  var bottom = 'bottom';\n  var right = 'right';\n  var left = 'left';\n  var auto = 'auto';\n  var basePlacements = [top, bottom, right, left];\n  var start = 'start';\n  var end = 'end';\n  var clippingParents = 'clippingParents';\n  var viewport = 'viewport';\n  var popper = 'popper';\n  var reference = 'reference';\n  var variationPlacements = /*#__PURE__*/basePlacements.reduce(function (acc, placement) {\n    return acc.concat([placement + \"-\" + start, placement + \"-\" + end]);\n  }, []);\n  var placements = /*#__PURE__*/[].concat(basePlacements, [auto]).reduce(function (acc, placement) {\n    return acc.concat([placement, placement + \"-\" + start, placement + \"-\" + end]);\n  }, []); // modifiers that need to read the DOM\n\n  var beforeRead = 'beforeRead';\n  var read = 'read';\n  var afterRead = 'afterRead'; // pure-logic modifiers\n\n  var beforeMain = 'beforeMain';\n  var main = 'main';\n  var afterMain = 'afterMain'; // modifier with the purpose to write to the DOM (or write into a framework state)\n\n  var beforeWrite = 'beforeWrite';\n  var write = 'write';\n  var afterWrite = 'afterWrite';\n  var modifierPhases = [beforeRead, read, afterRead, beforeMain, main, afterMain, beforeWrite, write, afterWrite];\n\n  function getNodeName(element) {\n    return element ? (element.nodeName || '').toLowerCase() : null;\n  }\n\n  function getWindow(node) {\n    if (node == null) {\n      return window;\n    }\n\n    if (node.toString() !== '[object Window]') {\n      var ownerDocument = node.ownerDocument;\n      return ownerDocument ? ownerDocument.defaultView || window : window;\n    }\n\n    return node;\n  }\n\n  function isElement(node) {\n    var OwnElement = getWindow(node).Element;\n    return node instanceof OwnElement || node instanceof Element;\n  }\n\n  function isHTMLElement(node) {\n    var OwnElement = getWindow(node).HTMLElement;\n    return node instanceof OwnElement || node instanceof HTMLElement;\n  }\n\n  function isShadowRoot(node) {\n    // IE 11 has no ShadowRoot\n    if (typeof ShadowRoot === 'undefined') {\n      return false;\n    }\n\n    var OwnElement = getWindow(node).ShadowRoot;\n    return node instanceof OwnElement || node instanceof ShadowRoot;\n  }\n\n  // and applies them to the HTMLElements such as popper and arrow\n\n  function applyStyles(_ref) {\n    var state = _ref.state;\n    Object.keys(state.elements).forEach(function (name) {\n      var style = state.styles[name] || {};\n      var attributes = state.attributes[name] || {};\n      var element = state.elements[name]; // arrow is optional + virtual elements\n\n      if (!isHTMLElement(element) || !getNodeName(element)) {\n        return;\n      } // Flow doesn't support to extend this property, but it's the most\n      // effective way to apply styles to an HTMLElement\n      // $FlowFixMe[cannot-write]\n\n\n      Object.assign(element.style, style);\n      Object.keys(attributes).forEach(function (name) {\n        var value = attributes[name];\n\n        if (value === false) {\n          element.removeAttribute(name);\n        } else {\n          element.setAttribute(name, value === true ? '' : value);\n        }\n      });\n    });\n  }\n\n  function effect$2(_ref2) {\n    var state = _ref2.state;\n    var initialStyles = {\n      popper: {\n        position: state.options.strategy,\n        left: '0',\n        top: '0',\n        margin: '0'\n      },\n      arrow: {\n        position: 'absolute'\n      },\n      reference: {}\n    };\n    Object.assign(state.elements.popper.style, initialStyles.popper);\n    state.styles = initialStyles;\n\n    if (state.elements.arrow) {\n      Object.assign(state.elements.arrow.style, initialStyles.arrow);\n    }\n\n    return function () {\n      Object.keys(state.elements).forEach(function (name) {\n        var element = state.elements[name];\n        var attributes = state.attributes[name] || {};\n        var styleProperties = Object.keys(state.styles.hasOwnProperty(name) ? state.styles[name] : initialStyles[name]); // Set all values to an empty string to unset them\n\n        var style = styleProperties.reduce(function (style, property) {\n          style[property] = '';\n          return style;\n        }, {}); // arrow is optional + virtual elements\n\n        if (!isHTMLElement(element) || !getNodeName(element)) {\n          return;\n        }\n\n        Object.assign(element.style, style);\n        Object.keys(attributes).forEach(function (attribute) {\n          element.removeAttribute(attribute);\n        });\n      });\n    };\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  var applyStyles$1 = {\n    name: 'applyStyles',\n    enabled: true,\n    phase: 'write',\n    fn: applyStyles,\n    effect: effect$2,\n    requires: ['computeStyles']\n  };\n\n  function getBasePlacement(placement) {\n    return placement.split('-')[0];\n  }\n\n  function getBoundingClientRect(element) {\n    var rect = element.getBoundingClientRect();\n    return {\n      width: rect.width,\n      height: rect.height,\n      top: rect.top,\n      right: rect.right,\n      bottom: rect.bottom,\n      left: rect.left,\n      x: rect.left,\n      y: rect.top\n    };\n  }\n\n  // means it doesn't take into account transforms.\n\n  function getLayoutRect(element) {\n    var clientRect = getBoundingClientRect(element); // Use the clientRect sizes if it's not been transformed.\n    // Fixes https://github.com/popperjs/popper-core/issues/1223\n\n    var width = element.offsetWidth;\n    var height = element.offsetHeight;\n\n    if (Math.abs(clientRect.width - width) <= 1) {\n      width = clientRect.width;\n    }\n\n    if (Math.abs(clientRect.height - height) <= 1) {\n      height = clientRect.height;\n    }\n\n    return {\n      x: element.offsetLeft,\n      y: element.offsetTop,\n      width: width,\n      height: height\n    };\n  }\n\n  function contains(parent, child) {\n    var rootNode = child.getRootNode && child.getRootNode(); // First, attempt with faster native method\n\n    if (parent.contains(child)) {\n      return true;\n    } // then fallback to custom implementation with Shadow DOM support\n    else if (rootNode && isShadowRoot(rootNode)) {\n        var next = child;\n\n        do {\n          if (next && parent.isSameNode(next)) {\n            return true;\n          } // $FlowFixMe[prop-missing]: need a better way to handle this...\n\n\n          next = next.parentNode || next.host;\n        } while (next);\n      } // Give up, the result is false\n\n\n    return false;\n  }\n\n  function getComputedStyle$1(element) {\n    return getWindow(element).getComputedStyle(element);\n  }\n\n  function isTableElement(element) {\n    return ['table', 'td', 'th'].indexOf(getNodeName(element)) >= 0;\n  }\n\n  function getDocumentElement(element) {\n    // $FlowFixMe[incompatible-return]: assume body is always available\n    return ((isElement(element) ? element.ownerDocument : // $FlowFixMe[prop-missing]\n    element.document) || window.document).documentElement;\n  }\n\n  function getParentNode(element) {\n    if (getNodeName(element) === 'html') {\n      return element;\n    }\n\n    return (// this is a quicker (but less type safe) way to save quite some bytes from the bundle\n      // $FlowFixMe[incompatible-return]\n      // $FlowFixMe[prop-missing]\n      element.assignedSlot || // step into the shadow DOM of the parent of a slotted node\n      element.parentNode || ( // DOM Element detected\n      isShadowRoot(element) ? element.host : null) || // ShadowRoot detected\n      // $FlowFixMe[incompatible-call]: HTMLElement is a Node\n      getDocumentElement(element) // fallback\n\n    );\n  }\n\n  function getTrueOffsetParent(element) {\n    if (!isHTMLElement(element) || // https://github.com/popperjs/popper-core/issues/837\n    getComputedStyle$1(element).position === 'fixed') {\n      return null;\n    }\n\n    return element.offsetParent;\n  } // `.offsetParent` reports `null` for fixed elements, while absolute elements\n  // return the containing block\n\n\n  function getContainingBlock(element) {\n    var isFirefox = navigator.userAgent.toLowerCase().indexOf('firefox') !== -1;\n    var isIE = navigator.userAgent.indexOf('Trident') !== -1;\n\n    if (isIE && isHTMLElement(element)) {\n      // In IE 9, 10 and 11 fixed elements containing block is always established by the viewport\n      var elementCss = getComputedStyle$1(element);\n\n      if (elementCss.position === 'fixed') {\n        return null;\n      }\n    }\n\n    var currentNode = getParentNode(element);\n\n    while (isHTMLElement(currentNode) && ['html', 'body'].indexOf(getNodeName(currentNode)) < 0) {\n      var css = getComputedStyle$1(currentNode); // This is non-exhaustive but covers the most common CSS properties that\n      // create a containing block.\n      // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n\n      if (css.transform !== 'none' || css.perspective !== 'none' || css.contain === 'paint' || ['transform', 'perspective'].indexOf(css.willChange) !== -1 || isFirefox && css.willChange === 'filter' || isFirefox && css.filter && css.filter !== 'none') {\n        return currentNode;\n      } else {\n        currentNode = currentNode.parentNode;\n      }\n    }\n\n    return null;\n  } // Gets the closest ancestor positioned element. Handles some edge cases,\n  // such as table ancestors and cross browser bugs.\n\n\n  function getOffsetParent(element) {\n    var window = getWindow(element);\n    var offsetParent = getTrueOffsetParent(element);\n\n    while (offsetParent && isTableElement(offsetParent) && getComputedStyle$1(offsetParent).position === 'static') {\n      offsetParent = getTrueOffsetParent(offsetParent);\n    }\n\n    if (offsetParent && (getNodeName(offsetParent) === 'html' || getNodeName(offsetParent) === 'body' && getComputedStyle$1(offsetParent).position === 'static')) {\n      return window;\n    }\n\n    return offsetParent || getContainingBlock(element) || window;\n  }\n\n  function getMainAxisFromPlacement(placement) {\n    return ['top', 'bottom'].indexOf(placement) >= 0 ? 'x' : 'y';\n  }\n\n  var max = Math.max;\n  var min = Math.min;\n  var round = Math.round;\n\n  function within(min$1, value, max$1) {\n    return max(min$1, min(value, max$1));\n  }\n\n  function getFreshSideObject() {\n    return {\n      top: 0,\n      right: 0,\n      bottom: 0,\n      left: 0\n    };\n  }\n\n  function mergePaddingObject(paddingObject) {\n    return Object.assign({}, getFreshSideObject(), paddingObject);\n  }\n\n  function expandToHashMap(value, keys) {\n    return keys.reduce(function (hashMap, key) {\n      hashMap[key] = value;\n      return hashMap;\n    }, {});\n  }\n\n  var toPaddingObject = function toPaddingObject(padding, state) {\n    padding = typeof padding === 'function' ? padding(Object.assign({}, state.rects, {\n      placement: state.placement\n    })) : padding;\n    return mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));\n  };\n\n  function arrow(_ref) {\n    var _state$modifiersData$;\n\n    var state = _ref.state,\n        name = _ref.name,\n        options = _ref.options;\n    var arrowElement = state.elements.arrow;\n    var popperOffsets = state.modifiersData.popperOffsets;\n    var basePlacement = getBasePlacement(state.placement);\n    var axis = getMainAxisFromPlacement(basePlacement);\n    var isVertical = [left, right].indexOf(basePlacement) >= 0;\n    var len = isVertical ? 'height' : 'width';\n\n    if (!arrowElement || !popperOffsets) {\n      return;\n    }\n\n    var paddingObject = toPaddingObject(options.padding, state);\n    var arrowRect = getLayoutRect(arrowElement);\n    var minProp = axis === 'y' ? top : left;\n    var maxProp = axis === 'y' ? bottom : right;\n    var endDiff = state.rects.reference[len] + state.rects.reference[axis] - popperOffsets[axis] - state.rects.popper[len];\n    var startDiff = popperOffsets[axis] - state.rects.reference[axis];\n    var arrowOffsetParent = getOffsetParent(arrowElement);\n    var clientSize = arrowOffsetParent ? axis === 'y' ? arrowOffsetParent.clientHeight || 0 : arrowOffsetParent.clientWidth || 0 : 0;\n    var centerToReference = endDiff / 2 - startDiff / 2; // Make sure the arrow doesn't overflow the popper if the center point is\n    // outside of the popper bounds\n\n    var min = paddingObject[minProp];\n    var max = clientSize - arrowRect[len] - paddingObject[maxProp];\n    var center = clientSize / 2 - arrowRect[len] / 2 + centerToReference;\n    var offset = within(min, center, max); // Prevents breaking syntax highlighting...\n\n    var axisProp = axis;\n    state.modifiersData[name] = (_state$modifiersData$ = {}, _state$modifiersData$[axisProp] = offset, _state$modifiersData$.centerOffset = offset - center, _state$modifiersData$);\n  }\n\n  function effect$1(_ref2) {\n    var state = _ref2.state,\n        options = _ref2.options;\n    var _options$element = options.element,\n        arrowElement = _options$element === void 0 ? '[data-popper-arrow]' : _options$element;\n\n    if (arrowElement == null) {\n      return;\n    } // CSS selector\n\n\n    if (typeof arrowElement === 'string') {\n      arrowElement = state.elements.popper.querySelector(arrowElement);\n\n      if (!arrowElement) {\n        return;\n      }\n    }\n\n    if (!contains(state.elements.popper, arrowElement)) {\n\n      return;\n    }\n\n    state.elements.arrow = arrowElement;\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  var arrow$1 = {\n    name: 'arrow',\n    enabled: true,\n    phase: 'main',\n    fn: arrow,\n    effect: effect$1,\n    requires: ['popperOffsets'],\n    requiresIfExists: ['preventOverflow']\n  };\n\n  var unsetSides = {\n    top: 'auto',\n    right: 'auto',\n    bottom: 'auto',\n    left: 'auto'\n  }; // Round the offsets to the nearest suitable subpixel based on the DPR.\n  // Zooming can change the DPR, but it seems to report a value that will\n  // cleanly divide the values into the appropriate subpixels.\n\n  function roundOffsetsByDPR(_ref) {\n    var x = _ref.x,\n        y = _ref.y;\n    var win = window;\n    var dpr = win.devicePixelRatio || 1;\n    return {\n      x: round(round(x * dpr) / dpr) || 0,\n      y: round(round(y * dpr) / dpr) || 0\n    };\n  }\n\n  function mapToStyles(_ref2) {\n    var _Object$assign2;\n\n    var popper = _ref2.popper,\n        popperRect = _ref2.popperRect,\n        placement = _ref2.placement,\n        offsets = _ref2.offsets,\n        position = _ref2.position,\n        gpuAcceleration = _ref2.gpuAcceleration,\n        adaptive = _ref2.adaptive,\n        roundOffsets = _ref2.roundOffsets;\n\n    var _ref3 = roundOffsets === true ? roundOffsetsByDPR(offsets) : typeof roundOffsets === 'function' ? roundOffsets(offsets) : offsets,\n        _ref3$x = _ref3.x,\n        x = _ref3$x === void 0 ? 0 : _ref3$x,\n        _ref3$y = _ref3.y,\n        y = _ref3$y === void 0 ? 0 : _ref3$y;\n\n    var hasX = offsets.hasOwnProperty('x');\n    var hasY = offsets.hasOwnProperty('y');\n    var sideX = left;\n    var sideY = top;\n    var win = window;\n\n    if (adaptive) {\n      var offsetParent = getOffsetParent(popper);\n      var heightProp = 'clientHeight';\n      var widthProp = 'clientWidth';\n\n      if (offsetParent === getWindow(popper)) {\n        offsetParent = getDocumentElement(popper);\n\n        if (getComputedStyle$1(offsetParent).position !== 'static') {\n          heightProp = 'scrollHeight';\n          widthProp = 'scrollWidth';\n        }\n      } // $FlowFixMe[incompatible-cast]: force type refinement, we compare offsetParent with window above, but Flow doesn't detect it\n\n\n      offsetParent = offsetParent;\n\n      if (placement === top) {\n        sideY = bottom; // $FlowFixMe[prop-missing]\n\n        y -= offsetParent[heightProp] - popperRect.height;\n        y *= gpuAcceleration ? 1 : -1;\n      }\n\n      if (placement === left) {\n        sideX = right; // $FlowFixMe[prop-missing]\n\n        x -= offsetParent[widthProp] - popperRect.width;\n        x *= gpuAcceleration ? 1 : -1;\n      }\n    }\n\n    var commonStyles = Object.assign({\n      position: position\n    }, adaptive && unsetSides);\n\n    if (gpuAcceleration) {\n      var _Object$assign;\n\n      return Object.assign({}, commonStyles, (_Object$assign = {}, _Object$assign[sideY] = hasY ? '0' : '', _Object$assign[sideX] = hasX ? '0' : '', _Object$assign.transform = (win.devicePixelRatio || 1) < 2 ? \"translate(\" + x + \"px, \" + y + \"px)\" : \"translate3d(\" + x + \"px, \" + y + \"px, 0)\", _Object$assign));\n    }\n\n    return Object.assign({}, commonStyles, (_Object$assign2 = {}, _Object$assign2[sideY] = hasY ? y + \"px\" : '', _Object$assign2[sideX] = hasX ? x + \"px\" : '', _Object$assign2.transform = '', _Object$assign2));\n  }\n\n  function computeStyles(_ref4) {\n    var state = _ref4.state,\n        options = _ref4.options;\n    var _options$gpuAccelerat = options.gpuAcceleration,\n        gpuAcceleration = _options$gpuAccelerat === void 0 ? true : _options$gpuAccelerat,\n        _options$adaptive = options.adaptive,\n        adaptive = _options$adaptive === void 0 ? true : _options$adaptive,\n        _options$roundOffsets = options.roundOffsets,\n        roundOffsets = _options$roundOffsets === void 0 ? true : _options$roundOffsets;\n\n    var commonStyles = {\n      placement: getBasePlacement(state.placement),\n      popper: state.elements.popper,\n      popperRect: state.rects.popper,\n      gpuAcceleration: gpuAcceleration\n    };\n\n    if (state.modifiersData.popperOffsets != null) {\n      state.styles.popper = Object.assign({}, state.styles.popper, mapToStyles(Object.assign({}, commonStyles, {\n        offsets: state.modifiersData.popperOffsets,\n        position: state.options.strategy,\n        adaptive: adaptive,\n        roundOffsets: roundOffsets\n      })));\n    }\n\n    if (state.modifiersData.arrow != null) {\n      state.styles.arrow = Object.assign({}, state.styles.arrow, mapToStyles(Object.assign({}, commonStyles, {\n        offsets: state.modifiersData.arrow,\n        position: 'absolute',\n        adaptive: false,\n        roundOffsets: roundOffsets\n      })));\n    }\n\n    state.attributes.popper = Object.assign({}, state.attributes.popper, {\n      'data-popper-placement': state.placement\n    });\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  var computeStyles$1 = {\n    name: 'computeStyles',\n    enabled: true,\n    phase: 'beforeWrite',\n    fn: computeStyles,\n    data: {}\n  };\n\n  var passive = {\n    passive: true\n  };\n\n  function effect(_ref) {\n    var state = _ref.state,\n        instance = _ref.instance,\n        options = _ref.options;\n    var _options$scroll = options.scroll,\n        scroll = _options$scroll === void 0 ? true : _options$scroll,\n        _options$resize = options.resize,\n        resize = _options$resize === void 0 ? true : _options$resize;\n    var window = getWindow(state.elements.popper);\n    var scrollParents = [].concat(state.scrollParents.reference, state.scrollParents.popper);\n\n    if (scroll) {\n      scrollParents.forEach(function (scrollParent) {\n        scrollParent.addEventListener('scroll', instance.update, passive);\n      });\n    }\n\n    if (resize) {\n      window.addEventListener('resize', instance.update, passive);\n    }\n\n    return function () {\n      if (scroll) {\n        scrollParents.forEach(function (scrollParent) {\n          scrollParent.removeEventListener('scroll', instance.update, passive);\n        });\n      }\n\n      if (resize) {\n        window.removeEventListener('resize', instance.update, passive);\n      }\n    };\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  var eventListeners = {\n    name: 'eventListeners',\n    enabled: true,\n    phase: 'write',\n    fn: function fn() {},\n    effect: effect,\n    data: {}\n  };\n\n  var hash$1 = {\n    left: 'right',\n    right: 'left',\n    bottom: 'top',\n    top: 'bottom'\n  };\n  function getOppositePlacement(placement) {\n    return placement.replace(/left|right|bottom|top/g, function (matched) {\n      return hash$1[matched];\n    });\n  }\n\n  var hash = {\n    start: 'end',\n    end: 'start'\n  };\n  function getOppositeVariationPlacement(placement) {\n    return placement.replace(/start|end/g, function (matched) {\n      return hash[matched];\n    });\n  }\n\n  function getWindowScroll(node) {\n    var win = getWindow(node);\n    var scrollLeft = win.pageXOffset;\n    var scrollTop = win.pageYOffset;\n    return {\n      scrollLeft: scrollLeft,\n      scrollTop: scrollTop\n    };\n  }\n\n  function getWindowScrollBarX(element) {\n    // If <html> has a CSS width greater than the viewport, then this will be\n    // incorrect for RTL.\n    // Popper 1 is broken in this case and never had a bug report so let's assume\n    // it's not an issue. I don't think anyone ever specifies width on <html>\n    // anyway.\n    // Browsers where the left scrollbar doesn't cause an issue report `0` for\n    // this (e.g. Edge 2019, IE11, Safari)\n    return getBoundingClientRect(getDocumentElement(element)).left + getWindowScroll(element).scrollLeft;\n  }\n\n  function getViewportRect(element) {\n    var win = getWindow(element);\n    var html = getDocumentElement(element);\n    var visualViewport = win.visualViewport;\n    var width = html.clientWidth;\n    var height = html.clientHeight;\n    var x = 0;\n    var y = 0; // NB: This isn't supported on iOS <= 12. If the keyboard is open, the popper\n    // can be obscured underneath it.\n    // Also, `html.clientHeight` adds the bottom bar height in Safari iOS, even\n    // if it isn't open, so if this isn't available, the popper will be detected\n    // to overflow the bottom of the screen too early.\n\n    if (visualViewport) {\n      width = visualViewport.width;\n      height = visualViewport.height; // Uses Layout Viewport (like Chrome; Safari does not currently)\n      // In Chrome, it returns a value very close to 0 (+/-) but contains rounding\n      // errors due to floating point numbers, so we need to check precision.\n      // Safari returns a number <= 0, usually < -1 when pinch-zoomed\n      // Feature detection fails in mobile emulation mode in Chrome.\n      // Math.abs(win.innerWidth / visualViewport.scale - visualViewport.width) <\n      // 0.001\n      // Fallback here: \"Not Safari\" userAgent\n\n      if (!/^((?!chrome|android).)*safari/i.test(navigator.userAgent)) {\n        x = visualViewport.offsetLeft;\n        y = visualViewport.offsetTop;\n      }\n    }\n\n    return {\n      width: width,\n      height: height,\n      x: x + getWindowScrollBarX(element),\n      y: y\n    };\n  }\n\n  // of the `<html>` and `<body>` rect bounds if horizontally scrollable\n\n  function getDocumentRect(element) {\n    var _element$ownerDocumen;\n\n    var html = getDocumentElement(element);\n    var winScroll = getWindowScroll(element);\n    var body = (_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body;\n    var width = max(html.scrollWidth, html.clientWidth, body ? body.scrollWidth : 0, body ? body.clientWidth : 0);\n    var height = max(html.scrollHeight, html.clientHeight, body ? body.scrollHeight : 0, body ? body.clientHeight : 0);\n    var x = -winScroll.scrollLeft + getWindowScrollBarX(element);\n    var y = -winScroll.scrollTop;\n\n    if (getComputedStyle$1(body || html).direction === 'rtl') {\n      x += max(html.clientWidth, body ? body.clientWidth : 0) - width;\n    }\n\n    return {\n      width: width,\n      height: height,\n      x: x,\n      y: y\n    };\n  }\n\n  function isScrollParent(element) {\n    // Firefox wants us to check `-x` and `-y` variations as well\n    var _getComputedStyle = getComputedStyle$1(element),\n        overflow = _getComputedStyle.overflow,\n        overflowX = _getComputedStyle.overflowX,\n        overflowY = _getComputedStyle.overflowY;\n\n    return /auto|scroll|overlay|hidden/.test(overflow + overflowY + overflowX);\n  }\n\n  function getScrollParent(node) {\n    if (['html', 'body', '#document'].indexOf(getNodeName(node)) >= 0) {\n      // $FlowFixMe[incompatible-return]: assume body is always available\n      return node.ownerDocument.body;\n    }\n\n    if (isHTMLElement(node) && isScrollParent(node)) {\n      return node;\n    }\n\n    return getScrollParent(getParentNode(node));\n  }\n\n  /*\n  given a DOM element, return the list of all scroll parents, up the list of ancesors\n  until we get to the top window object. This list is what we attach scroll listeners\n  to, because if any of these parent elements scroll, we'll need to re-calculate the\n  reference element's position.\n  */\n\n  function listScrollParents(element, list) {\n    var _element$ownerDocumen;\n\n    if (list === void 0) {\n      list = [];\n    }\n\n    var scrollParent = getScrollParent(element);\n    var isBody = scrollParent === ((_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body);\n    var win = getWindow(scrollParent);\n    var target = isBody ? [win].concat(win.visualViewport || [], isScrollParent(scrollParent) ? scrollParent : []) : scrollParent;\n    var updatedList = list.concat(target);\n    return isBody ? updatedList : // $FlowFixMe[incompatible-call]: isBody tells us target will be an HTMLElement here\n    updatedList.concat(listScrollParents(getParentNode(target)));\n  }\n\n  function rectToClientRect(rect) {\n    return Object.assign({}, rect, {\n      left: rect.x,\n      top: rect.y,\n      right: rect.x + rect.width,\n      bottom: rect.y + rect.height\n    });\n  }\n\n  function getInnerBoundingClientRect(element) {\n    var rect = getBoundingClientRect(element);\n    rect.top = rect.top + element.clientTop;\n    rect.left = rect.left + element.clientLeft;\n    rect.bottom = rect.top + element.clientHeight;\n    rect.right = rect.left + element.clientWidth;\n    rect.width = element.clientWidth;\n    rect.height = element.clientHeight;\n    rect.x = rect.left;\n    rect.y = rect.top;\n    return rect;\n  }\n\n  function getClientRectFromMixedType(element, clippingParent) {\n    return clippingParent === viewport ? rectToClientRect(getViewportRect(element)) : isHTMLElement(clippingParent) ? getInnerBoundingClientRect(clippingParent) : rectToClientRect(getDocumentRect(getDocumentElement(element)));\n  } // A \"clipping parent\" is an overflowable container with the characteristic of\n  // clipping (or hiding) overflowing elements with a position different from\n  // `initial`\n\n\n  function getClippingParents(element) {\n    var clippingParents = listScrollParents(getParentNode(element));\n    var canEscapeClipping = ['absolute', 'fixed'].indexOf(getComputedStyle$1(element).position) >= 0;\n    var clipperElement = canEscapeClipping && isHTMLElement(element) ? getOffsetParent(element) : element;\n\n    if (!isElement(clipperElement)) {\n      return [];\n    } // $FlowFixMe[incompatible-return]: https://github.com/facebook/flow/issues/1414\n\n\n    return clippingParents.filter(function (clippingParent) {\n      return isElement(clippingParent) && contains(clippingParent, clipperElement) && getNodeName(clippingParent) !== 'body';\n    });\n  } // Gets the maximum area that the element is visible in due to any number of\n  // clipping parents\n\n\n  function getClippingRect(element, boundary, rootBoundary) {\n    var mainClippingParents = boundary === 'clippingParents' ? getClippingParents(element) : [].concat(boundary);\n    var clippingParents = [].concat(mainClippingParents, [rootBoundary]);\n    var firstClippingParent = clippingParents[0];\n    var clippingRect = clippingParents.reduce(function (accRect, clippingParent) {\n      var rect = getClientRectFromMixedType(element, clippingParent);\n      accRect.top = max(rect.top, accRect.top);\n      accRect.right = min(rect.right, accRect.right);\n      accRect.bottom = min(rect.bottom, accRect.bottom);\n      accRect.left = max(rect.left, accRect.left);\n      return accRect;\n    }, getClientRectFromMixedType(element, firstClippingParent));\n    clippingRect.width = clippingRect.right - clippingRect.left;\n    clippingRect.height = clippingRect.bottom - clippingRect.top;\n    clippingRect.x = clippingRect.left;\n    clippingRect.y = clippingRect.top;\n    return clippingRect;\n  }\n\n  function getVariation(placement) {\n    return placement.split('-')[1];\n  }\n\n  function computeOffsets(_ref) {\n    var reference = _ref.reference,\n        element = _ref.element,\n        placement = _ref.placement;\n    var basePlacement = placement ? getBasePlacement(placement) : null;\n    var variation = placement ? getVariation(placement) : null;\n    var commonX = reference.x + reference.width / 2 - element.width / 2;\n    var commonY = reference.y + reference.height / 2 - element.height / 2;\n    var offsets;\n\n    switch (basePlacement) {\n      case top:\n        offsets = {\n          x: commonX,\n          y: reference.y - element.height\n        };\n        break;\n\n      case bottom:\n        offsets = {\n          x: commonX,\n          y: reference.y + reference.height\n        };\n        break;\n\n      case right:\n        offsets = {\n          x: reference.x + reference.width,\n          y: commonY\n        };\n        break;\n\n      case left:\n        offsets = {\n          x: reference.x - element.width,\n          y: commonY\n        };\n        break;\n\n      default:\n        offsets = {\n          x: reference.x,\n          y: reference.y\n        };\n    }\n\n    var mainAxis = basePlacement ? getMainAxisFromPlacement(basePlacement) : null;\n\n    if (mainAxis != null) {\n      var len = mainAxis === 'y' ? 'height' : 'width';\n\n      switch (variation) {\n        case start:\n          offsets[mainAxis] = offsets[mainAxis] - (reference[len] / 2 - element[len] / 2);\n          break;\n\n        case end:\n          offsets[mainAxis] = offsets[mainAxis] + (reference[len] / 2 - element[len] / 2);\n          break;\n      }\n    }\n\n    return offsets;\n  }\n\n  function detectOverflow(state, options) {\n    if (options === void 0) {\n      options = {};\n    }\n\n    var _options = options,\n        _options$placement = _options.placement,\n        placement = _options$placement === void 0 ? state.placement : _options$placement,\n        _options$boundary = _options.boundary,\n        boundary = _options$boundary === void 0 ? clippingParents : _options$boundary,\n        _options$rootBoundary = _options.rootBoundary,\n        rootBoundary = _options$rootBoundary === void 0 ? viewport : _options$rootBoundary,\n        _options$elementConte = _options.elementContext,\n        elementContext = _options$elementConte === void 0 ? popper : _options$elementConte,\n        _options$altBoundary = _options.altBoundary,\n        altBoundary = _options$altBoundary === void 0 ? false : _options$altBoundary,\n        _options$padding = _options.padding,\n        padding = _options$padding === void 0 ? 0 : _options$padding;\n    var paddingObject = mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));\n    var altContext = elementContext === popper ? reference : popper;\n    var referenceElement = state.elements.reference;\n    var popperRect = state.rects.popper;\n    var element = state.elements[altBoundary ? altContext : elementContext];\n    var clippingClientRect = getClippingRect(isElement(element) ? element : element.contextElement || getDocumentElement(state.elements.popper), boundary, rootBoundary);\n    var referenceClientRect = getBoundingClientRect(referenceElement);\n    var popperOffsets = computeOffsets({\n      reference: referenceClientRect,\n      element: popperRect,\n      strategy: 'absolute',\n      placement: placement\n    });\n    var popperClientRect = rectToClientRect(Object.assign({}, popperRect, popperOffsets));\n    var elementClientRect = elementContext === popper ? popperClientRect : referenceClientRect; // positive = overflowing the clipping rect\n    // 0 or negative = within the clipping rect\n\n    var overflowOffsets = {\n      top: clippingClientRect.top - elementClientRect.top + paddingObject.top,\n      bottom: elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom,\n      left: clippingClientRect.left - elementClientRect.left + paddingObject.left,\n      right: elementClientRect.right - clippingClientRect.right + paddingObject.right\n    };\n    var offsetData = state.modifiersData.offset; // Offsets can be applied only to the popper element\n\n    if (elementContext === popper && offsetData) {\n      var offset = offsetData[placement];\n      Object.keys(overflowOffsets).forEach(function (key) {\n        var multiply = [right, bottom].indexOf(key) >= 0 ? 1 : -1;\n        var axis = [top, bottom].indexOf(key) >= 0 ? 'y' : 'x';\n        overflowOffsets[key] += offset[axis] * multiply;\n      });\n    }\n\n    return overflowOffsets;\n  }\n\n  function computeAutoPlacement(state, options) {\n    if (options === void 0) {\n      options = {};\n    }\n\n    var _options = options,\n        placement = _options.placement,\n        boundary = _options.boundary,\n        rootBoundary = _options.rootBoundary,\n        padding = _options.padding,\n        flipVariations = _options.flipVariations,\n        _options$allowedAutoP = _options.allowedAutoPlacements,\n        allowedAutoPlacements = _options$allowedAutoP === void 0 ? placements : _options$allowedAutoP;\n    var variation = getVariation(placement);\n    var placements$1 = variation ? flipVariations ? variationPlacements : variationPlacements.filter(function (placement) {\n      return getVariation(placement) === variation;\n    }) : basePlacements;\n    var allowedPlacements = placements$1.filter(function (placement) {\n      return allowedAutoPlacements.indexOf(placement) >= 0;\n    });\n\n    if (allowedPlacements.length === 0) {\n      allowedPlacements = placements$1;\n    } // $FlowFixMe[incompatible-type]: Flow seems to have problems with two array unions...\n\n\n    var overflows = allowedPlacements.reduce(function (acc, placement) {\n      acc[placement] = detectOverflow(state, {\n        placement: placement,\n        boundary: boundary,\n        rootBoundary: rootBoundary,\n        padding: padding\n      })[getBasePlacement(placement)];\n      return acc;\n    }, {});\n    return Object.keys(overflows).sort(function (a, b) {\n      return overflows[a] - overflows[b];\n    });\n  }\n\n  function getExpandedFallbackPlacements(placement) {\n    if (getBasePlacement(placement) === auto) {\n      return [];\n    }\n\n    var oppositePlacement = getOppositePlacement(placement);\n    return [getOppositeVariationPlacement(placement), oppositePlacement, getOppositeVariationPlacement(oppositePlacement)];\n  }\n\n  function flip(_ref) {\n    var state = _ref.state,\n        options = _ref.options,\n        name = _ref.name;\n\n    if (state.modifiersData[name]._skip) {\n      return;\n    }\n\n    var _options$mainAxis = options.mainAxis,\n        checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\n        _options$altAxis = options.altAxis,\n        checkAltAxis = _options$altAxis === void 0 ? true : _options$altAxis,\n        specifiedFallbackPlacements = options.fallbackPlacements,\n        padding = options.padding,\n        boundary = options.boundary,\n        rootBoundary = options.rootBoundary,\n        altBoundary = options.altBoundary,\n        _options$flipVariatio = options.flipVariations,\n        flipVariations = _options$flipVariatio === void 0 ? true : _options$flipVariatio,\n        allowedAutoPlacements = options.allowedAutoPlacements;\n    var preferredPlacement = state.options.placement;\n    var basePlacement = getBasePlacement(preferredPlacement);\n    var isBasePlacement = basePlacement === preferredPlacement;\n    var fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipVariations ? [getOppositePlacement(preferredPlacement)] : getExpandedFallbackPlacements(preferredPlacement));\n    var placements = [preferredPlacement].concat(fallbackPlacements).reduce(function (acc, placement) {\n      return acc.concat(getBasePlacement(placement) === auto ? computeAutoPlacement(state, {\n        placement: placement,\n        boundary: boundary,\n        rootBoundary: rootBoundary,\n        padding: padding,\n        flipVariations: flipVariations,\n        allowedAutoPlacements: allowedAutoPlacements\n      }) : placement);\n    }, []);\n    var referenceRect = state.rects.reference;\n    var popperRect = state.rects.popper;\n    var checksMap = new Map();\n    var makeFallbackChecks = true;\n    var firstFittingPlacement = placements[0];\n\n    for (var i = 0; i < placements.length; i++) {\n      var placement = placements[i];\n\n      var _basePlacement = getBasePlacement(placement);\n\n      var isStartVariation = getVariation(placement) === start;\n      var isVertical = [top, bottom].indexOf(_basePlacement) >= 0;\n      var len = isVertical ? 'width' : 'height';\n      var overflow = detectOverflow(state, {\n        placement: placement,\n        boundary: boundary,\n        rootBoundary: rootBoundary,\n        altBoundary: altBoundary,\n        padding: padding\n      });\n      var mainVariationSide = isVertical ? isStartVariation ? right : left : isStartVariation ? bottom : top;\n\n      if (referenceRect[len] > popperRect[len]) {\n        mainVariationSide = getOppositePlacement(mainVariationSide);\n      }\n\n      var altVariationSide = getOppositePlacement(mainVariationSide);\n      var checks = [];\n\n      if (checkMainAxis) {\n        checks.push(overflow[_basePlacement] <= 0);\n      }\n\n      if (checkAltAxis) {\n        checks.push(overflow[mainVariationSide] <= 0, overflow[altVariationSide] <= 0);\n      }\n\n      if (checks.every(function (check) {\n        return check;\n      })) {\n        firstFittingPlacement = placement;\n        makeFallbackChecks = false;\n        break;\n      }\n\n      checksMap.set(placement, checks);\n    }\n\n    if (makeFallbackChecks) {\n      // `2` may be desired in some cases – research later\n      var numberOfChecks = flipVariations ? 3 : 1;\n\n      var _loop = function _loop(_i) {\n        var fittingPlacement = placements.find(function (placement) {\n          var checks = checksMap.get(placement);\n\n          if (checks) {\n            return checks.slice(0, _i).every(function (check) {\n              return check;\n            });\n          }\n        });\n\n        if (fittingPlacement) {\n          firstFittingPlacement = fittingPlacement;\n          return \"break\";\n        }\n      };\n\n      for (var _i = numberOfChecks; _i > 0; _i--) {\n        var _ret = _loop(_i);\n\n        if (_ret === \"break\") break;\n      }\n    }\n\n    if (state.placement !== firstFittingPlacement) {\n      state.modifiersData[name]._skip = true;\n      state.placement = firstFittingPlacement;\n      state.reset = true;\n    }\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  var flip$1 = {\n    name: 'flip',\n    enabled: true,\n    phase: 'main',\n    fn: flip,\n    requiresIfExists: ['offset'],\n    data: {\n      _skip: false\n    }\n  };\n\n  function getSideOffsets(overflow, rect, preventedOffsets) {\n    if (preventedOffsets === void 0) {\n      preventedOffsets = {\n        x: 0,\n        y: 0\n      };\n    }\n\n    return {\n      top: overflow.top - rect.height - preventedOffsets.y,\n      right: overflow.right - rect.width + preventedOffsets.x,\n      bottom: overflow.bottom - rect.height + preventedOffsets.y,\n      left: overflow.left - rect.width - preventedOffsets.x\n    };\n  }\n\n  function isAnySideFullyClipped(overflow) {\n    return [top, right, bottom, left].some(function (side) {\n      return overflow[side] >= 0;\n    });\n  }\n\n  function hide(_ref) {\n    var state = _ref.state,\n        name = _ref.name;\n    var referenceRect = state.rects.reference;\n    var popperRect = state.rects.popper;\n    var preventedOffsets = state.modifiersData.preventOverflow;\n    var referenceOverflow = detectOverflow(state, {\n      elementContext: 'reference'\n    });\n    var popperAltOverflow = detectOverflow(state, {\n      altBoundary: true\n    });\n    var referenceClippingOffsets = getSideOffsets(referenceOverflow, referenceRect);\n    var popperEscapeOffsets = getSideOffsets(popperAltOverflow, popperRect, preventedOffsets);\n    var isReferenceHidden = isAnySideFullyClipped(referenceClippingOffsets);\n    var hasPopperEscaped = isAnySideFullyClipped(popperEscapeOffsets);\n    state.modifiersData[name] = {\n      referenceClippingOffsets: referenceClippingOffsets,\n      popperEscapeOffsets: popperEscapeOffsets,\n      isReferenceHidden: isReferenceHidden,\n      hasPopperEscaped: hasPopperEscaped\n    };\n    state.attributes.popper = Object.assign({}, state.attributes.popper, {\n      'data-popper-reference-hidden': isReferenceHidden,\n      'data-popper-escaped': hasPopperEscaped\n    });\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  var hide$1 = {\n    name: 'hide',\n    enabled: true,\n    phase: 'main',\n    requiresIfExists: ['preventOverflow'],\n    fn: hide\n  };\n\n  function distanceAndSkiddingToXY(placement, rects, offset) {\n    var basePlacement = getBasePlacement(placement);\n    var invertDistance = [left, top].indexOf(basePlacement) >= 0 ? -1 : 1;\n\n    var _ref = typeof offset === 'function' ? offset(Object.assign({}, rects, {\n      placement: placement\n    })) : offset,\n        skidding = _ref[0],\n        distance = _ref[1];\n\n    skidding = skidding || 0;\n    distance = (distance || 0) * invertDistance;\n    return [left, right].indexOf(basePlacement) >= 0 ? {\n      x: distance,\n      y: skidding\n    } : {\n      x: skidding,\n      y: distance\n    };\n  }\n\n  function offset(_ref2) {\n    var state = _ref2.state,\n        options = _ref2.options,\n        name = _ref2.name;\n    var _options$offset = options.offset,\n        offset = _options$offset === void 0 ? [0, 0] : _options$offset;\n    var data = placements.reduce(function (acc, placement) {\n      acc[placement] = distanceAndSkiddingToXY(placement, state.rects, offset);\n      return acc;\n    }, {});\n    var _data$state$placement = data[state.placement],\n        x = _data$state$placement.x,\n        y = _data$state$placement.y;\n\n    if (state.modifiersData.popperOffsets != null) {\n      state.modifiersData.popperOffsets.x += x;\n      state.modifiersData.popperOffsets.y += y;\n    }\n\n    state.modifiersData[name] = data;\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  var offset$1 = {\n    name: 'offset',\n    enabled: true,\n    phase: 'main',\n    requires: ['popperOffsets'],\n    fn: offset\n  };\n\n  function popperOffsets(_ref) {\n    var state = _ref.state,\n        name = _ref.name;\n    // Offsets are the actual position the popper needs to have to be\n    // properly positioned near its reference element\n    // This is the most basic placement, and will be adjusted by\n    // the modifiers in the next step\n    state.modifiersData[name] = computeOffsets({\n      reference: state.rects.reference,\n      element: state.rects.popper,\n      strategy: 'absolute',\n      placement: state.placement\n    });\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  var popperOffsets$1 = {\n    name: 'popperOffsets',\n    enabled: true,\n    phase: 'read',\n    fn: popperOffsets,\n    data: {}\n  };\n\n  function getAltAxis(axis) {\n    return axis === 'x' ? 'y' : 'x';\n  }\n\n  function preventOverflow(_ref) {\n    var state = _ref.state,\n        options = _ref.options,\n        name = _ref.name;\n    var _options$mainAxis = options.mainAxis,\n        checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\n        _options$altAxis = options.altAxis,\n        checkAltAxis = _options$altAxis === void 0 ? false : _options$altAxis,\n        boundary = options.boundary,\n        rootBoundary = options.rootBoundary,\n        altBoundary = options.altBoundary,\n        padding = options.padding,\n        _options$tether = options.tether,\n        tether = _options$tether === void 0 ? true : _options$tether,\n        _options$tetherOffset = options.tetherOffset,\n        tetherOffset = _options$tetherOffset === void 0 ? 0 : _options$tetherOffset;\n    var overflow = detectOverflow(state, {\n      boundary: boundary,\n      rootBoundary: rootBoundary,\n      padding: padding,\n      altBoundary: altBoundary\n    });\n    var basePlacement = getBasePlacement(state.placement);\n    var variation = getVariation(state.placement);\n    var isBasePlacement = !variation;\n    var mainAxis = getMainAxisFromPlacement(basePlacement);\n    var altAxis = getAltAxis(mainAxis);\n    var popperOffsets = state.modifiersData.popperOffsets;\n    var referenceRect = state.rects.reference;\n    var popperRect = state.rects.popper;\n    var tetherOffsetValue = typeof tetherOffset === 'function' ? tetherOffset(Object.assign({}, state.rects, {\n      placement: state.placement\n    })) : tetherOffset;\n    var data = {\n      x: 0,\n      y: 0\n    };\n\n    if (!popperOffsets) {\n      return;\n    }\n\n    if (checkMainAxis || checkAltAxis) {\n      var mainSide = mainAxis === 'y' ? top : left;\n      var altSide = mainAxis === 'y' ? bottom : right;\n      var len = mainAxis === 'y' ? 'height' : 'width';\n      var offset = popperOffsets[mainAxis];\n      var min$1 = popperOffsets[mainAxis] + overflow[mainSide];\n      var max$1 = popperOffsets[mainAxis] - overflow[altSide];\n      var additive = tether ? -popperRect[len] / 2 : 0;\n      var minLen = variation === start ? referenceRect[len] : popperRect[len];\n      var maxLen = variation === start ? -popperRect[len] : -referenceRect[len]; // We need to include the arrow in the calculation so the arrow doesn't go\n      // outside the reference bounds\n\n      var arrowElement = state.elements.arrow;\n      var arrowRect = tether && arrowElement ? getLayoutRect(arrowElement) : {\n        width: 0,\n        height: 0\n      };\n      var arrowPaddingObject = state.modifiersData['arrow#persistent'] ? state.modifiersData['arrow#persistent'].padding : getFreshSideObject();\n      var arrowPaddingMin = arrowPaddingObject[mainSide];\n      var arrowPaddingMax = arrowPaddingObject[altSide]; // If the reference length is smaller than the arrow length, we don't want\n      // to include its full size in the calculation. If the reference is small\n      // and near the edge of a boundary, the popper can overflow even if the\n      // reference is not overflowing as well (e.g. virtual elements with no\n      // width or height)\n\n      var arrowLen = within(0, referenceRect[len], arrowRect[len]);\n      var minOffset = isBasePlacement ? referenceRect[len] / 2 - additive - arrowLen - arrowPaddingMin - tetherOffsetValue : minLen - arrowLen - arrowPaddingMin - tetherOffsetValue;\n      var maxOffset = isBasePlacement ? -referenceRect[len] / 2 + additive + arrowLen + arrowPaddingMax + tetherOffsetValue : maxLen + arrowLen + arrowPaddingMax + tetherOffsetValue;\n      var arrowOffsetParent = state.elements.arrow && getOffsetParent(state.elements.arrow);\n      var clientOffset = arrowOffsetParent ? mainAxis === 'y' ? arrowOffsetParent.clientTop || 0 : arrowOffsetParent.clientLeft || 0 : 0;\n      var offsetModifierValue = state.modifiersData.offset ? state.modifiersData.offset[state.placement][mainAxis] : 0;\n      var tetherMin = popperOffsets[mainAxis] + minOffset - offsetModifierValue - clientOffset;\n      var tetherMax = popperOffsets[mainAxis] + maxOffset - offsetModifierValue;\n\n      if (checkMainAxis) {\n        var preventedOffset = within(tether ? min(min$1, tetherMin) : min$1, offset, tether ? max(max$1, tetherMax) : max$1);\n        popperOffsets[mainAxis] = preventedOffset;\n        data[mainAxis] = preventedOffset - offset;\n      }\n\n      if (checkAltAxis) {\n        var _mainSide = mainAxis === 'x' ? top : left;\n\n        var _altSide = mainAxis === 'x' ? bottom : right;\n\n        var _offset = popperOffsets[altAxis];\n\n        var _min = _offset + overflow[_mainSide];\n\n        var _max = _offset - overflow[_altSide];\n\n        var _preventedOffset = within(tether ? min(_min, tetherMin) : _min, _offset, tether ? max(_max, tetherMax) : _max);\n\n        popperOffsets[altAxis] = _preventedOffset;\n        data[altAxis] = _preventedOffset - _offset;\n      }\n    }\n\n    state.modifiersData[name] = data;\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  var preventOverflow$1 = {\n    name: 'preventOverflow',\n    enabled: true,\n    phase: 'main',\n    fn: preventOverflow,\n    requiresIfExists: ['offset']\n  };\n\n  function getHTMLElementScroll(element) {\n    return {\n      scrollLeft: element.scrollLeft,\n      scrollTop: element.scrollTop\n    };\n  }\n\n  function getNodeScroll(node) {\n    if (node === getWindow(node) || !isHTMLElement(node)) {\n      return getWindowScroll(node);\n    } else {\n      return getHTMLElementScroll(node);\n    }\n  }\n\n  // Composite means it takes into account transforms as well as layout.\n\n  function getCompositeRect(elementOrVirtualElement, offsetParent, isFixed) {\n    if (isFixed === void 0) {\n      isFixed = false;\n    }\n\n    var documentElement = getDocumentElement(offsetParent);\n    var rect = getBoundingClientRect(elementOrVirtualElement);\n    var isOffsetParentAnElement = isHTMLElement(offsetParent);\n    var scroll = {\n      scrollLeft: 0,\n      scrollTop: 0\n    };\n    var offsets = {\n      x: 0,\n      y: 0\n    };\n\n    if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {\n      if (getNodeName(offsetParent) !== 'body' || // https://github.com/popperjs/popper-core/issues/1078\n      isScrollParent(documentElement)) {\n        scroll = getNodeScroll(offsetParent);\n      }\n\n      if (isHTMLElement(offsetParent)) {\n        offsets = getBoundingClientRect(offsetParent);\n        offsets.x += offsetParent.clientLeft;\n        offsets.y += offsetParent.clientTop;\n      } else if (documentElement) {\n        offsets.x = getWindowScrollBarX(documentElement);\n      }\n    }\n\n    return {\n      x: rect.left + scroll.scrollLeft - offsets.x,\n      y: rect.top + scroll.scrollTop - offsets.y,\n      width: rect.width,\n      height: rect.height\n    };\n  }\n\n  function order(modifiers) {\n    var map = new Map();\n    var visited = new Set();\n    var result = [];\n    modifiers.forEach(function (modifier) {\n      map.set(modifier.name, modifier);\n    }); // On visiting object, check for its dependencies and visit them recursively\n\n    function sort(modifier) {\n      visited.add(modifier.name);\n      var requires = [].concat(modifier.requires || [], modifier.requiresIfExists || []);\n      requires.forEach(function (dep) {\n        if (!visited.has(dep)) {\n          var depModifier = map.get(dep);\n\n          if (depModifier) {\n            sort(depModifier);\n          }\n        }\n      });\n      result.push(modifier);\n    }\n\n    modifiers.forEach(function (modifier) {\n      if (!visited.has(modifier.name)) {\n        // check for visited object\n        sort(modifier);\n      }\n    });\n    return result;\n  }\n\n  function orderModifiers(modifiers) {\n    // order based on dependencies\n    var orderedModifiers = order(modifiers); // order based on phase\n\n    return modifierPhases.reduce(function (acc, phase) {\n      return acc.concat(orderedModifiers.filter(function (modifier) {\n        return modifier.phase === phase;\n      }));\n    }, []);\n  }\n\n  function debounce(fn) {\n    var pending;\n    return function () {\n      if (!pending) {\n        pending = new Promise(function (resolve) {\n          Promise.resolve().then(function () {\n            pending = undefined;\n            resolve(fn());\n          });\n        });\n      }\n\n      return pending;\n    };\n  }\n\n  function mergeByName(modifiers) {\n    var merged = modifiers.reduce(function (merged, current) {\n      var existing = merged[current.name];\n      merged[current.name] = existing ? Object.assign({}, existing, current, {\n        options: Object.assign({}, existing.options, current.options),\n        data: Object.assign({}, existing.data, current.data)\n      }) : current;\n      return merged;\n    }, {}); // IE11 does not support Object.values\n\n    return Object.keys(merged).map(function (key) {\n      return merged[key];\n    });\n  }\n\n  var DEFAULT_OPTIONS = {\n    placement: 'bottom',\n    modifiers: [],\n    strategy: 'absolute'\n  };\n\n  function areValidElements() {\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    return !args.some(function (element) {\n      return !(element && typeof element.getBoundingClientRect === 'function');\n    });\n  }\n\n  function popperGenerator(generatorOptions) {\n    if (generatorOptions === void 0) {\n      generatorOptions = {};\n    }\n\n    var _generatorOptions = generatorOptions,\n        _generatorOptions$def = _generatorOptions.defaultModifiers,\n        defaultModifiers = _generatorOptions$def === void 0 ? [] : _generatorOptions$def,\n        _generatorOptions$def2 = _generatorOptions.defaultOptions,\n        defaultOptions = _generatorOptions$def2 === void 0 ? DEFAULT_OPTIONS : _generatorOptions$def2;\n    return function createPopper(reference, popper, options) {\n      if (options === void 0) {\n        options = defaultOptions;\n      }\n\n      var state = {\n        placement: 'bottom',\n        orderedModifiers: [],\n        options: Object.assign({}, DEFAULT_OPTIONS, defaultOptions),\n        modifiersData: {},\n        elements: {\n          reference: reference,\n          popper: popper\n        },\n        attributes: {},\n        styles: {}\n      };\n      var effectCleanupFns = [];\n      var isDestroyed = false;\n      var instance = {\n        state: state,\n        setOptions: function setOptions(options) {\n          cleanupModifierEffects();\n          state.options = Object.assign({}, defaultOptions, state.options, options);\n          state.scrollParents = {\n            reference: isElement(reference) ? listScrollParents(reference) : reference.contextElement ? listScrollParents(reference.contextElement) : [],\n            popper: listScrollParents(popper)\n          }; // Orders the modifiers based on their dependencies and `phase`\n          // properties\n\n          var orderedModifiers = orderModifiers(mergeByName([].concat(defaultModifiers, state.options.modifiers))); // Strip out disabled modifiers\n\n          state.orderedModifiers = orderedModifiers.filter(function (m) {\n            return m.enabled;\n          }); // Validate the provided modifiers so that the consumer will get warned\n\n          runModifierEffects();\n          return instance.update();\n        },\n        // Sync update – it will always be executed, even if not necessary. This\n        // is useful for low frequency updates where sync behavior simplifies the\n        // logic.\n        // For high frequency updates (e.g. `resize` and `scroll` events), always\n        // prefer the async Popper#update method\n        forceUpdate: function forceUpdate() {\n          if (isDestroyed) {\n            return;\n          }\n\n          var _state$elements = state.elements,\n              reference = _state$elements.reference,\n              popper = _state$elements.popper; // Don't proceed if `reference` or `popper` are not valid elements\n          // anymore\n\n          if (!areValidElements(reference, popper)) {\n\n            return;\n          } // Store the reference and popper rects to be read by modifiers\n\n\n          state.rects = {\n            reference: getCompositeRect(reference, getOffsetParent(popper), state.options.strategy === 'fixed'),\n            popper: getLayoutRect(popper)\n          }; // Modifiers have the ability to reset the current update cycle. The\n          // most common use case for this is the `flip` modifier changing the\n          // placement, which then needs to re-run all the modifiers, because the\n          // logic was previously ran for the previous placement and is therefore\n          // stale/incorrect\n\n          state.reset = false;\n          state.placement = state.options.placement; // On each update cycle, the `modifiersData` property for each modifier\n          // is filled with the initial data specified by the modifier. This means\n          // it doesn't persist and is fresh on each update.\n          // To ensure persistent data, use `${name}#persistent`\n\n          state.orderedModifiers.forEach(function (modifier) {\n            return state.modifiersData[modifier.name] = Object.assign({}, modifier.data);\n          });\n\n          for (var index = 0; index < state.orderedModifiers.length; index++) {\n\n            if (state.reset === true) {\n              state.reset = false;\n              index = -1;\n              continue;\n            }\n\n            var _state$orderedModifie = state.orderedModifiers[index],\n                fn = _state$orderedModifie.fn,\n                _state$orderedModifie2 = _state$orderedModifie.options,\n                _options = _state$orderedModifie2 === void 0 ? {} : _state$orderedModifie2,\n                name = _state$orderedModifie.name;\n\n            if (typeof fn === 'function') {\n              state = fn({\n                state: state,\n                options: _options,\n                name: name,\n                instance: instance\n              }) || state;\n            }\n          }\n        },\n        // Async and optimistically optimized update – it will not be executed if\n        // not necessary (debounced to run at most once-per-tick)\n        update: debounce(function () {\n          return new Promise(function (resolve) {\n            instance.forceUpdate();\n            resolve(state);\n          });\n        }),\n        destroy: function destroy() {\n          cleanupModifierEffects();\n          isDestroyed = true;\n        }\n      };\n\n      if (!areValidElements(reference, popper)) {\n\n        return instance;\n      }\n\n      instance.setOptions(options).then(function (state) {\n        if (!isDestroyed && options.onFirstUpdate) {\n          options.onFirstUpdate(state);\n        }\n      }); // Modifiers have the ability to execute arbitrary code before the first\n      // update cycle runs. They will be executed in the same order as the update\n      // cycle. This is useful when a modifier adds some persistent data that\n      // other modifiers need to use, but the modifier is run after the dependent\n      // one.\n\n      function runModifierEffects() {\n        state.orderedModifiers.forEach(function (_ref3) {\n          var name = _ref3.name,\n              _ref3$options = _ref3.options,\n              options = _ref3$options === void 0 ? {} : _ref3$options,\n              effect = _ref3.effect;\n\n          if (typeof effect === 'function') {\n            var cleanupFn = effect({\n              state: state,\n              name: name,\n              instance: instance,\n              options: options\n            });\n\n            var noopFn = function noopFn() {};\n\n            effectCleanupFns.push(cleanupFn || noopFn);\n          }\n        });\n      }\n\n      function cleanupModifierEffects() {\n        effectCleanupFns.forEach(function (fn) {\n          return fn();\n        });\n        effectCleanupFns = [];\n      }\n\n      return instance;\n    };\n  }\n  var createPopper$2 = /*#__PURE__*/popperGenerator(); // eslint-disable-next-line import/no-unused-modules\n\n  var defaultModifiers$1 = [eventListeners, popperOffsets$1, computeStyles$1, applyStyles$1];\n  var createPopper$1 = /*#__PURE__*/popperGenerator({\n    defaultModifiers: defaultModifiers$1\n  }); // eslint-disable-next-line import/no-unused-modules\n\n  var defaultModifiers = [eventListeners, popperOffsets$1, computeStyles$1, applyStyles$1, offset$1, flip$1, preventOverflow$1, arrow$1, hide$1];\n  var createPopper = /*#__PURE__*/popperGenerator({\n    defaultModifiers: defaultModifiers\n  }); // eslint-disable-next-line import/no-unused-modules\n\n  var Popper = /*#__PURE__*/Object.freeze({\n    __proto__: null,\n    popperGenerator: popperGenerator,\n    detectOverflow: detectOverflow,\n    createPopperBase: createPopper$2,\n    createPopper: createPopper,\n    createPopperLite: createPopper$1,\n    top: top,\n    bottom: bottom,\n    right: right,\n    left: left,\n    auto: auto,\n    basePlacements: basePlacements,\n    start: start,\n    end: end,\n    clippingParents: clippingParents,\n    viewport: viewport,\n    popper: popper,\n    reference: reference,\n    variationPlacements: variationPlacements,\n    placements: placements,\n    beforeRead: beforeRead,\n    read: read,\n    afterRead: afterRead,\n    beforeMain: beforeMain,\n    main: main,\n    afterMain: afterMain,\n    beforeWrite: beforeWrite,\n    write: write,\n    afterWrite: afterWrite,\n    modifierPhases: modifierPhases,\n    applyStyles: applyStyles$1,\n    arrow: arrow$1,\n    computeStyles: computeStyles$1,\n    eventListeners: eventListeners,\n    flip: flip$1,\n    hide: hide$1,\n    offset: offset$1,\n    popperOffsets: popperOffsets$1,\n    preventOverflow: preventOverflow$1\n  });\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): dropdown.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$8 = 'dropdown';\n  const DATA_KEY$7 = 'bs.dropdown';\n  const EVENT_KEY$7 = `.${DATA_KEY$7}`;\n  const DATA_API_KEY$4 = '.data-api';\n  const ESCAPE_KEY$2 = 'Escape';\n  const SPACE_KEY = 'Space';\n  const TAB_KEY = 'Tab';\n  const ARROW_UP_KEY = 'ArrowUp';\n  const ARROW_DOWN_KEY = 'ArrowDown';\n  const RIGHT_MOUSE_BUTTON = 2; // MouseEvent.button value for the secondary button, usually the right button\n\n  const REGEXP_KEYDOWN = new RegExp(`${ARROW_UP_KEY}|${ARROW_DOWN_KEY}|${ESCAPE_KEY$2}`);\n  const EVENT_HIDE$4 = `hide${EVENT_KEY$7}`;\n  const EVENT_HIDDEN$4 = `hidden${EVENT_KEY$7}`;\n  const EVENT_SHOW$4 = `show${EVENT_KEY$7}`;\n  const EVENT_SHOWN$4 = `shown${EVENT_KEY$7}`;\n  const EVENT_CLICK = `click${EVENT_KEY$7}`;\n  const EVENT_CLICK_DATA_API$3 = `click${EVENT_KEY$7}${DATA_API_KEY$4}`;\n  const EVENT_KEYDOWN_DATA_API = `keydown${EVENT_KEY$7}${DATA_API_KEY$4}`;\n  const EVENT_KEYUP_DATA_API = `keyup${EVENT_KEY$7}${DATA_API_KEY$4}`;\n  const CLASS_NAME_SHOW$7 = 'show';\n  const CLASS_NAME_DROPUP = 'dropup';\n  const CLASS_NAME_DROPEND = 'dropend';\n  const CLASS_NAME_DROPSTART = 'dropstart';\n  const CLASS_NAME_NAVBAR = 'navbar';\n  const SELECTOR_DATA_TOGGLE$3 = '[data-bs-toggle=\"dropdown\"]';\n  const SELECTOR_MENU = '.dropdown-menu';\n  const SELECTOR_NAVBAR_NAV = '.navbar-nav';\n  const SELECTOR_VISIBLE_ITEMS = '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)';\n  const PLACEMENT_TOP = isRTL() ? 'top-end' : 'top-start';\n  const PLACEMENT_TOPEND = isRTL() ? 'top-start' : 'top-end';\n  const PLACEMENT_BOTTOM = isRTL() ? 'bottom-end' : 'bottom-start';\n  const PLACEMENT_BOTTOMEND = isRTL() ? 'bottom-start' : 'bottom-end';\n  const PLACEMENT_RIGHT = isRTL() ? 'left-start' : 'right-start';\n  const PLACEMENT_LEFT = isRTL() ? 'right-start' : 'left-start';\n  const Default$7 = {\n    offset: [0, 2],\n    boundary: 'clippingParents',\n    reference: 'toggle',\n    display: 'dynamic',\n    popperConfig: null,\n    autoClose: true\n  };\n  const DefaultType$7 = {\n    offset: '(array|string|function)',\n    boundary: '(string|element)',\n    reference: '(string|element|object)',\n    display: 'string',\n    popperConfig: '(null|object|function)',\n    autoClose: '(boolean|string)'\n  };\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Dropdown extends BaseComponent {\n    constructor(element, config) {\n      super(element);\n      this._popper = null;\n      this._config = this._getConfig(config);\n      this._menu = this._getMenuElement();\n      this._inNavbar = this._detectNavbar();\n\n      this._addEventListeners();\n    } // Getters\n\n\n    static get Default() {\n      return Default$7;\n    }\n\n    static get DefaultType() {\n      return DefaultType$7;\n    }\n\n    static get NAME() {\n      return NAME$8;\n    } // Public\n\n\n    toggle() {\n      if (isDisabled(this._element)) {\n        return;\n      }\n\n      const isActive = this._element.classList.contains(CLASS_NAME_SHOW$7);\n\n      if (isActive) {\n        this.hide();\n        return;\n      }\n\n      this.show();\n    }\n\n    show() {\n      if (isDisabled(this._element) || this._menu.classList.contains(CLASS_NAME_SHOW$7)) {\n        return;\n      }\n\n      const parent = Dropdown.getParentFromElement(this._element);\n      const relatedTarget = {\n        relatedTarget: this._element\n      };\n      const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$4, relatedTarget);\n\n      if (showEvent.defaultPrevented) {\n        return;\n      } // Totally disable Popper for Dropdowns in Navbar\n\n\n      if (this._inNavbar) {\n        Manipulator.setDataAttribute(this._menu, 'popper', 'none');\n      } else {\n        if (typeof Popper === 'undefined') {\n          throw new TypeError('Bootstrap\\'s dropdowns require Popper (https://popper.js.org)');\n        }\n\n        let referenceElement = this._element;\n\n        if (this._config.reference === 'parent') {\n          referenceElement = parent;\n        } else if (isElement$1(this._config.reference)) {\n          referenceElement = getElement(this._config.reference);\n        } else if (typeof this._config.reference === 'object') {\n          referenceElement = this._config.reference;\n        }\n\n        const popperConfig = this._getPopperConfig();\n\n        const isDisplayStatic = popperConfig.modifiers.find(modifier => modifier.name === 'applyStyles' && modifier.enabled === false);\n        this._popper = createPopper(referenceElement, this._menu, popperConfig);\n\n        if (isDisplayStatic) {\n          Manipulator.setDataAttribute(this._menu, 'popper', 'static');\n        }\n      } // If this is a touch-enabled device we add extra\n      // empty mouseover listeners to the body's immediate children;\n      // only needed because of broken event delegation on iOS\n      // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n\n\n      if ('ontouchstart' in document.documentElement && !parent.closest(SELECTOR_NAVBAR_NAV)) {\n        [].concat(...document.body.children).forEach(elem => EventHandler.on(elem, 'mouseover', noop));\n      }\n\n      this._element.focus();\n\n      this._element.setAttribute('aria-expanded', true);\n\n      this._menu.classList.toggle(CLASS_NAME_SHOW$7);\n\n      this._element.classList.toggle(CLASS_NAME_SHOW$7);\n\n      EventHandler.trigger(this._element, EVENT_SHOWN$4, relatedTarget);\n    }\n\n    hide() {\n      if (isDisabled(this._element) || !this._menu.classList.contains(CLASS_NAME_SHOW$7)) {\n        return;\n      }\n\n      const relatedTarget = {\n        relatedTarget: this._element\n      };\n\n      this._completeHide(relatedTarget);\n    }\n\n    dispose() {\n      if (this._popper) {\n        this._popper.destroy();\n      }\n\n      super.dispose();\n    }\n\n    update() {\n      this._inNavbar = this._detectNavbar();\n\n      if (this._popper) {\n        this._popper.update();\n      }\n    } // Private\n\n\n    _addEventListeners() {\n      EventHandler.on(this._element, EVENT_CLICK, event => {\n        event.preventDefault();\n        this.toggle();\n      });\n    }\n\n    _completeHide(relatedTarget) {\n      const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$4, relatedTarget);\n\n      if (hideEvent.defaultPrevented) {\n        return;\n      } // If this is a touch-enabled device we remove the extra\n      // empty mouseover listeners we added for iOS support\n\n\n      if ('ontouchstart' in document.documentElement) {\n        [].concat(...document.body.children).forEach(elem => EventHandler.off(elem, 'mouseover', noop));\n      }\n\n      if (this._popper) {\n        this._popper.destroy();\n      }\n\n      this._menu.classList.remove(CLASS_NAME_SHOW$7);\n\n      this._element.classList.remove(CLASS_NAME_SHOW$7);\n\n      this._element.setAttribute('aria-expanded', 'false');\n\n      Manipulator.removeDataAttribute(this._menu, 'popper');\n      EventHandler.trigger(this._element, EVENT_HIDDEN$4, relatedTarget);\n    }\n\n    _getConfig(config) {\n      config = { ...this.constructor.Default,\n        ...Manipulator.getDataAttributes(this._element),\n        ...config\n      };\n      typeCheckConfig(NAME$8, config, this.constructor.DefaultType);\n\n      if (typeof config.reference === 'object' && !isElement$1(config.reference) && typeof config.reference.getBoundingClientRect !== 'function') {\n        // Popper virtual elements require a getBoundingClientRect method\n        throw new TypeError(`${NAME$8.toUpperCase()}: Option \"reference\" provided type \"object\" without a required \"getBoundingClientRect\" method.`);\n      }\n\n      return config;\n    }\n\n    _getMenuElement() {\n      return SelectorEngine.next(this._element, SELECTOR_MENU)[0];\n    }\n\n    _getPlacement() {\n      const parentDropdown = this._element.parentNode;\n\n      if (parentDropdown.classList.contains(CLASS_NAME_DROPEND)) {\n        return PLACEMENT_RIGHT;\n      }\n\n      if (parentDropdown.classList.contains(CLASS_NAME_DROPSTART)) {\n        return PLACEMENT_LEFT;\n      } // We need to trim the value because custom properties can also include spaces\n\n\n      const isEnd = getComputedStyle(this._menu).getPropertyValue('--bs-position').trim() === 'end';\n\n      if (parentDropdown.classList.contains(CLASS_NAME_DROPUP)) {\n        return isEnd ? PLACEMENT_TOPEND : PLACEMENT_TOP;\n      }\n\n      return isEnd ? PLACEMENT_BOTTOMEND : PLACEMENT_BOTTOM;\n    }\n\n    _detectNavbar() {\n      return this._element.closest(`.${CLASS_NAME_NAVBAR}`) !== null;\n    }\n\n    _getOffset() {\n      const {\n        offset\n      } = this._config;\n\n      if (typeof offset === 'string') {\n        return offset.split(',').map(val => Number.parseInt(val, 10));\n      }\n\n      if (typeof offset === 'function') {\n        return popperData => offset(popperData, this._element);\n      }\n\n      return offset;\n    }\n\n    _getPopperConfig() {\n      const defaultBsPopperConfig = {\n        placement: this._getPlacement(),\n        modifiers: [{\n          name: 'preventOverflow',\n          options: {\n            boundary: this._config.boundary\n          }\n        }, {\n          name: 'offset',\n          options: {\n            offset: this._getOffset()\n          }\n        }]\n      }; // Disable Popper if we have a static display\n\n      if (this._config.display === 'static') {\n        defaultBsPopperConfig.modifiers = [{\n          name: 'applyStyles',\n          enabled: false\n        }];\n      }\n\n      return { ...defaultBsPopperConfig,\n        ...(typeof this._config.popperConfig === 'function' ? this._config.popperConfig(defaultBsPopperConfig) : this._config.popperConfig)\n      };\n    }\n\n    _selectMenuItem({\n      key,\n      target\n    }) {\n      const items = SelectorEngine.find(SELECTOR_VISIBLE_ITEMS, this._menu).filter(isVisible);\n\n      if (!items.length) {\n        return;\n      } // if target isn't included in items (e.g. when expanding the dropdown)\n      // allow cycling to get the last item in case key equals ARROW_UP_KEY\n\n\n      getNextActiveElement(items, target, key === ARROW_DOWN_KEY, !items.includes(target)).focus();\n    } // Static\n\n\n    static dropdownInterface(element, config) {\n      const data = Dropdown.getOrCreateInstance(element, config);\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config]();\n      }\n    }\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        Dropdown.dropdownInterface(this, config);\n      });\n    }\n\n    static clearMenus(event) {\n      if (event && (event.button === RIGHT_MOUSE_BUTTON || event.type === 'keyup' && event.key !== TAB_KEY)) {\n        return;\n      }\n\n      const toggles = SelectorEngine.find(SELECTOR_DATA_TOGGLE$3);\n\n      for (let i = 0, len = toggles.length; i < len; i++) {\n        const context = Dropdown.getInstance(toggles[i]);\n\n        if (!context || context._config.autoClose === false) {\n          continue;\n        }\n\n        if (!context._element.classList.contains(CLASS_NAME_SHOW$7)) {\n          continue;\n        }\n\n        const relatedTarget = {\n          relatedTarget: context._element\n        };\n\n        if (event) {\n          const composedPath = event.composedPath();\n          const isMenuTarget = composedPath.includes(context._menu);\n\n          if (composedPath.includes(context._element) || context._config.autoClose === 'inside' && !isMenuTarget || context._config.autoClose === 'outside' && isMenuTarget) {\n            continue;\n          } // Tab navigation through the dropdown menu or events from contained inputs shouldn't close the menu\n\n\n          if (context._menu.contains(event.target) && (event.type === 'keyup' && event.key === TAB_KEY || /input|select|option|textarea|form/i.test(event.target.tagName))) {\n            continue;\n          }\n\n          if (event.type === 'click') {\n            relatedTarget.clickEvent = event;\n          }\n        }\n\n        context._completeHide(relatedTarget);\n      }\n    }\n\n    static getParentFromElement(element) {\n      return getElementFromSelector(element) || element.parentNode;\n    }\n\n    static dataApiKeydownHandler(event) {\n      // If not input/textarea:\n      //  - And not a key in REGEXP_KEYDOWN => not a dropdown command\n      // If input/textarea:\n      //  - If space key => not a dropdown command\n      //  - If key is other than escape\n      //    - If key is not up or down => not a dropdown command\n      //    - If trigger inside the menu => not a dropdown command\n      if (/input|textarea/i.test(event.target.tagName) ? event.key === SPACE_KEY || event.key !== ESCAPE_KEY$2 && (event.key !== ARROW_DOWN_KEY && event.key !== ARROW_UP_KEY || event.target.closest(SELECTOR_MENU)) : !REGEXP_KEYDOWN.test(event.key)) {\n        return;\n      }\n\n      const isActive = this.classList.contains(CLASS_NAME_SHOW$7);\n\n      if (!isActive && event.key === ESCAPE_KEY$2) {\n        return;\n      }\n\n      event.preventDefault();\n      event.stopPropagation();\n\n      if (isDisabled(this)) {\n        return;\n      }\n\n      const getToggleButton = () => this.matches(SELECTOR_DATA_TOGGLE$3) ? this : SelectorEngine.prev(this, SELECTOR_DATA_TOGGLE$3)[0];\n\n      if (event.key === ESCAPE_KEY$2) {\n        getToggleButton().focus();\n        Dropdown.clearMenus();\n        return;\n      }\n\n      if (event.key === ARROW_UP_KEY || event.key === ARROW_DOWN_KEY) {\n        if (!isActive) {\n          getToggleButton().click();\n        }\n\n        Dropdown.getInstance(getToggleButton())._selectMenuItem(event);\n\n        return;\n      }\n\n      if (!isActive || event.key === SPACE_KEY) {\n        Dropdown.clearMenus();\n      }\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_DATA_TOGGLE$3, Dropdown.dataApiKeydownHandler);\n  EventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown.dataApiKeydownHandler);\n  EventHandler.on(document, EVENT_CLICK_DATA_API$3, Dropdown.clearMenus);\n  EventHandler.on(document, EVENT_KEYUP_DATA_API, Dropdown.clearMenus);\n  EventHandler.on(document, EVENT_CLICK_DATA_API$3, SELECTOR_DATA_TOGGLE$3, function (event) {\n    event.preventDefault();\n    Dropdown.dropdownInterface(this);\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Dropdown to jQuery only if jQuery is present\n   */\n\n  defineJQueryPlugin(Dropdown);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): util/scrollBar.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  const SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top';\n  const SELECTOR_STICKY_CONTENT = '.sticky-top';\n\n  class ScrollBarHelper {\n    constructor() {\n      this._element = document.body;\n    }\n\n    getWidth() {\n      // https://developer.mozilla.org/en-US/docs/Web/API/Window/innerWidth#usage_notes\n      const documentWidth = document.documentElement.clientWidth;\n      return Math.abs(window.innerWidth - documentWidth);\n    }\n\n    hide() {\n      const width = this.getWidth();\n\n      this._disableOverFlow(); // give padding to element to balance the hidden scrollbar width\n\n\n      this._setElementAttributes(this._element, 'paddingRight', calculatedValue => calculatedValue + width); // trick: We adjust positive paddingRight and negative marginRight to sticky-top elements to keep showing fullwidth\n\n\n      this._setElementAttributes(SELECTOR_FIXED_CONTENT, 'paddingRight', calculatedValue => calculatedValue + width);\n\n      this._setElementAttributes(SELECTOR_STICKY_CONTENT, 'marginRight', calculatedValue => calculatedValue - width);\n    }\n\n    _disableOverFlow() {\n      this._saveInitialAttribute(this._element, 'overflow');\n\n      this._element.style.overflow = 'hidden';\n    }\n\n    _setElementAttributes(selector, styleProp, callback) {\n      const scrollbarWidth = this.getWidth();\n\n      const manipulationCallBack = element => {\n        if (element !== this._element && window.innerWidth > element.clientWidth + scrollbarWidth) {\n          return;\n        }\n\n        this._saveInitialAttribute(element, styleProp);\n\n        const calculatedValue = window.getComputedStyle(element)[styleProp];\n        element.style[styleProp] = `${callback(Number.parseFloat(calculatedValue))}px`;\n      };\n\n      this._applyManipulationCallback(selector, manipulationCallBack);\n    }\n\n    reset() {\n      this._resetElementAttributes(this._element, 'overflow');\n\n      this._resetElementAttributes(this._element, 'paddingRight');\n\n      this._resetElementAttributes(SELECTOR_FIXED_CONTENT, 'paddingRight');\n\n      this._resetElementAttributes(SELECTOR_STICKY_CONTENT, 'marginRight');\n    }\n\n    _saveInitialAttribute(element, styleProp) {\n      const actualValue = element.style[styleProp];\n\n      if (actualValue) {\n        Manipulator.setDataAttribute(element, styleProp, actualValue);\n      }\n    }\n\n    _resetElementAttributes(selector, styleProp) {\n      const manipulationCallBack = element => {\n        const value = Manipulator.getDataAttribute(element, styleProp);\n\n        if (typeof value === 'undefined') {\n          element.style.removeProperty(styleProp);\n        } else {\n          Manipulator.removeDataAttribute(element, styleProp);\n          element.style[styleProp] = value;\n        }\n      };\n\n      this._applyManipulationCallback(selector, manipulationCallBack);\n    }\n\n    _applyManipulationCallback(selector, callBack) {\n      if (isElement$1(selector)) {\n        callBack(selector);\n      } else {\n        SelectorEngine.find(selector, this._element).forEach(callBack);\n      }\n    }\n\n    isOverflowing() {\n      return this.getWidth() > 0;\n    }\n\n  }\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): util/backdrop.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  const Default$6 = {\n    isVisible: true,\n    // if false, we use the backdrop helper without adding any element to the dom\n    isAnimated: false,\n    rootElement: 'body',\n    // give the choice to place backdrop under different elements\n    clickCallback: null\n  };\n  const DefaultType$6 = {\n    isVisible: 'boolean',\n    isAnimated: 'boolean',\n    rootElement: '(element|string)',\n    clickCallback: '(function|null)'\n  };\n  const NAME$7 = 'backdrop';\n  const CLASS_NAME_BACKDROP = 'modal-backdrop';\n  const CLASS_NAME_FADE$5 = 'fade';\n  const CLASS_NAME_SHOW$6 = 'show';\n  const EVENT_MOUSEDOWN = `mousedown.bs.${NAME$7}`;\n\n  class Backdrop {\n    constructor(config) {\n      this._config = this._getConfig(config);\n      this._isAppended = false;\n      this._element = null;\n    }\n\n    show(callback) {\n      if (!this._config.isVisible) {\n        execute(callback);\n        return;\n      }\n\n      this._append();\n\n      if (this._config.isAnimated) {\n        reflow(this._getElement());\n      }\n\n      this._getElement().classList.add(CLASS_NAME_SHOW$6);\n\n      this._emulateAnimation(() => {\n        execute(callback);\n      });\n    }\n\n    hide(callback) {\n      if (!this._config.isVisible) {\n        execute(callback);\n        return;\n      }\n\n      this._getElement().classList.remove(CLASS_NAME_SHOW$6);\n\n      this._emulateAnimation(() => {\n        this.dispose();\n        execute(callback);\n      });\n    } // Private\n\n\n    _getElement() {\n      if (!this._element) {\n        const backdrop = document.createElement('div');\n        backdrop.className = CLASS_NAME_BACKDROP;\n\n        if (this._config.isAnimated) {\n          backdrop.classList.add(CLASS_NAME_FADE$5);\n        }\n\n        this._element = backdrop;\n      }\n\n      return this._element;\n    }\n\n    _getConfig(config) {\n      config = { ...Default$6,\n        ...(typeof config === 'object' ? config : {})\n      }; // use getElement() with the default \"body\" to get a fresh Element on each instantiation\n\n      config.rootElement = getElement(config.rootElement);\n      typeCheckConfig(NAME$7, config, DefaultType$6);\n      return config;\n    }\n\n    _append() {\n      if (this._isAppended) {\n        return;\n      }\n\n      this._config.rootElement.appendChild(this._getElement());\n\n      EventHandler.on(this._getElement(), EVENT_MOUSEDOWN, () => {\n        execute(this._config.clickCallback);\n      });\n      this._isAppended = true;\n    }\n\n    dispose() {\n      if (!this._isAppended) {\n        return;\n      }\n\n      EventHandler.off(this._element, EVENT_MOUSEDOWN);\n\n      this._element.remove();\n\n      this._isAppended = false;\n    }\n\n    _emulateAnimation(callback) {\n      executeAfterTransition(callback, this._getElement(), this._config.isAnimated);\n    }\n\n  }\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): modal.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$6 = 'modal';\n  const DATA_KEY$6 = 'bs.modal';\n  const EVENT_KEY$6 = `.${DATA_KEY$6}`;\n  const DATA_API_KEY$3 = '.data-api';\n  const ESCAPE_KEY$1 = 'Escape';\n  const Default$5 = {\n    backdrop: true,\n    keyboard: true,\n    focus: true\n  };\n  const DefaultType$5 = {\n    backdrop: '(boolean|string)',\n    keyboard: 'boolean',\n    focus: 'boolean'\n  };\n  const EVENT_HIDE$3 = `hide${EVENT_KEY$6}`;\n  const EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY$6}`;\n  const EVENT_HIDDEN$3 = `hidden${EVENT_KEY$6}`;\n  const EVENT_SHOW$3 = `show${EVENT_KEY$6}`;\n  const EVENT_SHOWN$3 = `shown${EVENT_KEY$6}`;\n  const EVENT_FOCUSIN$2 = `focusin${EVENT_KEY$6}`;\n  const EVENT_RESIZE = `resize${EVENT_KEY$6}`;\n  const EVENT_CLICK_DISMISS$2 = `click.dismiss${EVENT_KEY$6}`;\n  const EVENT_KEYDOWN_DISMISS$1 = `keydown.dismiss${EVENT_KEY$6}`;\n  const EVENT_MOUSEUP_DISMISS = `mouseup.dismiss${EVENT_KEY$6}`;\n  const EVENT_MOUSEDOWN_DISMISS = `mousedown.dismiss${EVENT_KEY$6}`;\n  const EVENT_CLICK_DATA_API$2 = `click${EVENT_KEY$6}${DATA_API_KEY$3}`;\n  const CLASS_NAME_OPEN = 'modal-open';\n  const CLASS_NAME_FADE$4 = 'fade';\n  const CLASS_NAME_SHOW$5 = 'show';\n  const CLASS_NAME_STATIC = 'modal-static';\n  const SELECTOR_DIALOG = '.modal-dialog';\n  const SELECTOR_MODAL_BODY = '.modal-body';\n  const SELECTOR_DATA_TOGGLE$2 = '[data-bs-toggle=\"modal\"]';\n  const SELECTOR_DATA_DISMISS$2 = '[data-bs-dismiss=\"modal\"]';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Modal extends BaseComponent {\n    constructor(element, config) {\n      super(element);\n      this._config = this._getConfig(config);\n      this._dialog = SelectorEngine.findOne(SELECTOR_DIALOG, this._element);\n      this._backdrop = this._initializeBackDrop();\n      this._isShown = false;\n      this._ignoreBackdropClick = false;\n      this._isTransitioning = false;\n      this._scrollBar = new ScrollBarHelper();\n    } // Getters\n\n\n    static get Default() {\n      return Default$5;\n    }\n\n    static get NAME() {\n      return NAME$6;\n    } // Public\n\n\n    toggle(relatedTarget) {\n      return this._isShown ? this.hide() : this.show(relatedTarget);\n    }\n\n    show(relatedTarget) {\n      if (this._isShown || this._isTransitioning) {\n        return;\n      }\n\n      const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$3, {\n        relatedTarget\n      });\n\n      if (showEvent.defaultPrevented) {\n        return;\n      }\n\n      this._isShown = true;\n\n      if (this._isAnimated()) {\n        this._isTransitioning = true;\n      }\n\n      this._scrollBar.hide();\n\n      document.body.classList.add(CLASS_NAME_OPEN);\n\n      this._adjustDialog();\n\n      this._setEscapeEvent();\n\n      this._setResizeEvent();\n\n      EventHandler.on(this._element, EVENT_CLICK_DISMISS$2, SELECTOR_DATA_DISMISS$2, event => this.hide(event));\n      EventHandler.on(this._dialog, EVENT_MOUSEDOWN_DISMISS, () => {\n        EventHandler.one(this._element, EVENT_MOUSEUP_DISMISS, event => {\n          if (event.target === this._element) {\n            this._ignoreBackdropClick = true;\n          }\n        });\n      });\n\n      this._showBackdrop(() => this._showElement(relatedTarget));\n    }\n\n    hide(event) {\n      if (event && ['A', 'AREA'].includes(event.target.tagName)) {\n        event.preventDefault();\n      }\n\n      if (!this._isShown || this._isTransitioning) {\n        return;\n      }\n\n      const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$3);\n\n      if (hideEvent.defaultPrevented) {\n        return;\n      }\n\n      this._isShown = false;\n\n      const isAnimated = this._isAnimated();\n\n      if (isAnimated) {\n        this._isTransitioning = true;\n      }\n\n      this._setEscapeEvent();\n\n      this._setResizeEvent();\n\n      EventHandler.off(document, EVENT_FOCUSIN$2);\n\n      this._element.classList.remove(CLASS_NAME_SHOW$5);\n\n      EventHandler.off(this._element, EVENT_CLICK_DISMISS$2);\n      EventHandler.off(this._dialog, EVENT_MOUSEDOWN_DISMISS);\n\n      this._queueCallback(() => this._hideModal(), this._element, isAnimated);\n    }\n\n    dispose() {\n      [window, this._dialog].forEach(htmlElement => EventHandler.off(htmlElement, EVENT_KEY$6));\n\n      this._backdrop.dispose();\n\n      super.dispose();\n      /**\n       * `document` has 2 events `EVENT_FOCUSIN` and `EVENT_CLICK_DATA_API`\n       * Do not move `document` in `htmlElements` array\n       * It will remove `EVENT_CLICK_DATA_API` event that should remain\n       */\n\n      EventHandler.off(document, EVENT_FOCUSIN$2);\n    }\n\n    handleUpdate() {\n      this._adjustDialog();\n    } // Private\n\n\n    _initializeBackDrop() {\n      return new Backdrop({\n        isVisible: Boolean(this._config.backdrop),\n        // 'static' option will be translated to true, and booleans will keep their value\n        isAnimated: this._isAnimated()\n      });\n    }\n\n    _getConfig(config) {\n      config = { ...Default$5,\n        ...Manipulator.getDataAttributes(this._element),\n        ...(typeof config === 'object' ? config : {})\n      };\n      typeCheckConfig(NAME$6, config, DefaultType$5);\n      return config;\n    }\n\n    _showElement(relatedTarget) {\n      const isAnimated = this._isAnimated();\n\n      const modalBody = SelectorEngine.findOne(SELECTOR_MODAL_BODY, this._dialog);\n\n      if (!this._element.parentNode || this._element.parentNode.nodeType !== Node.ELEMENT_NODE) {\n        // Don't move modal's DOM position\n        document.body.appendChild(this._element);\n      }\n\n      this._element.style.display = 'block';\n\n      this._element.removeAttribute('aria-hidden');\n\n      this._element.setAttribute('aria-modal', true);\n\n      this._element.setAttribute('role', 'dialog');\n\n      this._element.scrollTop = 0;\n\n      if (modalBody) {\n        modalBody.scrollTop = 0;\n      }\n\n      if (isAnimated) {\n        reflow(this._element);\n      }\n\n      this._element.classList.add(CLASS_NAME_SHOW$5);\n\n      if (this._config.focus) {\n        this._enforceFocus();\n      }\n\n      const transitionComplete = () => {\n        if (this._config.focus) {\n          this._element.focus();\n        }\n\n        this._isTransitioning = false;\n        EventHandler.trigger(this._element, EVENT_SHOWN$3, {\n          relatedTarget\n        });\n      };\n\n      this._queueCallback(transitionComplete, this._dialog, isAnimated);\n    }\n\n    _enforceFocus() {\n      EventHandler.off(document, EVENT_FOCUSIN$2); // guard against infinite focus loop\n\n      EventHandler.on(document, EVENT_FOCUSIN$2, event => {\n        if (document !== event.target && this._element !== event.target && !this._element.contains(event.target)) {\n          this._element.focus();\n        }\n      });\n    }\n\n    _setEscapeEvent() {\n      if (this._isShown) {\n        EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS$1, event => {\n          if (this._config.keyboard && event.key === ESCAPE_KEY$1) {\n            event.preventDefault();\n            this.hide();\n          } else if (!this._config.keyboard && event.key === ESCAPE_KEY$1) {\n            this._triggerBackdropTransition();\n          }\n        });\n      } else {\n        EventHandler.off(this._element, EVENT_KEYDOWN_DISMISS$1);\n      }\n    }\n\n    _setResizeEvent() {\n      if (this._isShown) {\n        EventHandler.on(window, EVENT_RESIZE, () => this._adjustDialog());\n      } else {\n        EventHandler.off(window, EVENT_RESIZE);\n      }\n    }\n\n    _hideModal() {\n      this._element.style.display = 'none';\n\n      this._element.setAttribute('aria-hidden', true);\n\n      this._element.removeAttribute('aria-modal');\n\n      this._element.removeAttribute('role');\n\n      this._isTransitioning = false;\n\n      this._backdrop.hide(() => {\n        document.body.classList.remove(CLASS_NAME_OPEN);\n\n        this._resetAdjustments();\n\n        this._scrollBar.reset();\n\n        EventHandler.trigger(this._element, EVENT_HIDDEN$3);\n      });\n    }\n\n    _showBackdrop(callback) {\n      EventHandler.on(this._element, EVENT_CLICK_DISMISS$2, event => {\n        if (this._ignoreBackdropClick) {\n          this._ignoreBackdropClick = false;\n          return;\n        }\n\n        if (event.target !== event.currentTarget) {\n          return;\n        }\n\n        if (this._config.backdrop === true) {\n          this.hide();\n        } else if (this._config.backdrop === 'static') {\n          this._triggerBackdropTransition();\n        }\n      });\n\n      this._backdrop.show(callback);\n    }\n\n    _isAnimated() {\n      return this._element.classList.contains(CLASS_NAME_FADE$4);\n    }\n\n    _triggerBackdropTransition() {\n      const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED);\n\n      if (hideEvent.defaultPrevented) {\n        return;\n      }\n\n      const {\n        classList,\n        scrollHeight,\n        style\n      } = this._element;\n      const isModalOverflowing = scrollHeight > document.documentElement.clientHeight; // return if the following background transition hasn't yet completed\n\n      if (!isModalOverflowing && style.overflowY === 'hidden' || classList.contains(CLASS_NAME_STATIC)) {\n        return;\n      }\n\n      if (!isModalOverflowing) {\n        style.overflowY = 'hidden';\n      }\n\n      classList.add(CLASS_NAME_STATIC);\n\n      this._queueCallback(() => {\n        classList.remove(CLASS_NAME_STATIC);\n\n        if (!isModalOverflowing) {\n          this._queueCallback(() => {\n            style.overflowY = '';\n          }, this._dialog);\n        }\n      }, this._dialog);\n\n      this._element.focus();\n    } // ----------------------------------------------------------------------\n    // the following methods are used to handle overflowing modals\n    // ----------------------------------------------------------------------\n\n\n    _adjustDialog() {\n      const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;\n\n      const scrollbarWidth = this._scrollBar.getWidth();\n\n      const isBodyOverflowing = scrollbarWidth > 0;\n\n      if (!isBodyOverflowing && isModalOverflowing && !isRTL() || isBodyOverflowing && !isModalOverflowing && isRTL()) {\n        this._element.style.paddingLeft = `${scrollbarWidth}px`;\n      }\n\n      if (isBodyOverflowing && !isModalOverflowing && !isRTL() || !isBodyOverflowing && isModalOverflowing && isRTL()) {\n        this._element.style.paddingRight = `${scrollbarWidth}px`;\n      }\n    }\n\n    _resetAdjustments() {\n      this._element.style.paddingLeft = '';\n      this._element.style.paddingRight = '';\n    } // Static\n\n\n    static jQueryInterface(config, relatedTarget) {\n      return this.each(function () {\n        const data = Modal.getOrCreateInstance(this, config);\n\n        if (typeof config !== 'string') {\n          return;\n        }\n\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config](relatedTarget);\n      });\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(document, EVENT_CLICK_DATA_API$2, SELECTOR_DATA_TOGGLE$2, function (event) {\n    const target = getElementFromSelector(this);\n\n    if (['A', 'AREA'].includes(this.tagName)) {\n      event.preventDefault();\n    }\n\n    EventHandler.one(target, EVENT_SHOW$3, showEvent => {\n      if (showEvent.defaultPrevented) {\n        // only register focus restorer if modal will actually get shown\n        return;\n      }\n\n      EventHandler.one(target, EVENT_HIDDEN$3, () => {\n        if (isVisible(this)) {\n          this.focus();\n        }\n      });\n    });\n    const data = Modal.getOrCreateInstance(target);\n    data.toggle(this);\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Modal to jQuery only if jQuery is present\n   */\n\n  defineJQueryPlugin(Modal);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): offcanvas.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$5 = 'offcanvas';\n  const DATA_KEY$5 = 'bs.offcanvas';\n  const EVENT_KEY$5 = `.${DATA_KEY$5}`;\n  const DATA_API_KEY$2 = '.data-api';\n  const EVENT_LOAD_DATA_API$1 = `load${EVENT_KEY$5}${DATA_API_KEY$2}`;\n  const ESCAPE_KEY = 'Escape';\n  const Default$4 = {\n    backdrop: true,\n    keyboard: true,\n    scroll: false\n  };\n  const DefaultType$4 = {\n    backdrop: 'boolean',\n    keyboard: 'boolean',\n    scroll: 'boolean'\n  };\n  const CLASS_NAME_SHOW$4 = 'show';\n  const OPEN_SELECTOR = '.offcanvas.show';\n  const EVENT_SHOW$2 = `show${EVENT_KEY$5}`;\n  const EVENT_SHOWN$2 = `shown${EVENT_KEY$5}`;\n  const EVENT_HIDE$2 = `hide${EVENT_KEY$5}`;\n  const EVENT_HIDDEN$2 = `hidden${EVENT_KEY$5}`;\n  const EVENT_FOCUSIN$1 = `focusin${EVENT_KEY$5}`;\n  const EVENT_CLICK_DATA_API$1 = `click${EVENT_KEY$5}${DATA_API_KEY$2}`;\n  const EVENT_CLICK_DISMISS$1 = `click.dismiss${EVENT_KEY$5}`;\n  const EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY$5}`;\n  const SELECTOR_DATA_DISMISS$1 = '[data-bs-dismiss=\"offcanvas\"]';\n  const SELECTOR_DATA_TOGGLE$1 = '[data-bs-toggle=\"offcanvas\"]';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Offcanvas extends BaseComponent {\n    constructor(element, config) {\n      super(element);\n      this._config = this._getConfig(config);\n      this._isShown = false;\n      this._backdrop = this._initializeBackDrop();\n\n      this._addEventListeners();\n    } // Getters\n\n\n    static get NAME() {\n      return NAME$5;\n    }\n\n    static get Default() {\n      return Default$4;\n    } // Public\n\n\n    toggle(relatedTarget) {\n      return this._isShown ? this.hide() : this.show(relatedTarget);\n    }\n\n    show(relatedTarget) {\n      if (this._isShown) {\n        return;\n      }\n\n      const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$2, {\n        relatedTarget\n      });\n\n      if (showEvent.defaultPrevented) {\n        return;\n      }\n\n      this._isShown = true;\n      this._element.style.visibility = 'visible';\n\n      this._backdrop.show();\n\n      if (!this._config.scroll) {\n        new ScrollBarHelper().hide();\n\n        this._enforceFocusOnElement(this._element);\n      }\n\n      this._element.removeAttribute('aria-hidden');\n\n      this._element.setAttribute('aria-modal', true);\n\n      this._element.setAttribute('role', 'dialog');\n\n      this._element.classList.add(CLASS_NAME_SHOW$4);\n\n      const completeCallBack = () => {\n        EventHandler.trigger(this._element, EVENT_SHOWN$2, {\n          relatedTarget\n        });\n      };\n\n      this._queueCallback(completeCallBack, this._element, true);\n    }\n\n    hide() {\n      if (!this._isShown) {\n        return;\n      }\n\n      const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$2);\n\n      if (hideEvent.defaultPrevented) {\n        return;\n      }\n\n      EventHandler.off(document, EVENT_FOCUSIN$1);\n\n      this._element.blur();\n\n      this._isShown = false;\n\n      this._element.classList.remove(CLASS_NAME_SHOW$4);\n\n      this._backdrop.hide();\n\n      const completeCallback = () => {\n        this._element.setAttribute('aria-hidden', true);\n\n        this._element.removeAttribute('aria-modal');\n\n        this._element.removeAttribute('role');\n\n        this._element.style.visibility = 'hidden';\n\n        if (!this._config.scroll) {\n          new ScrollBarHelper().reset();\n        }\n\n        EventHandler.trigger(this._element, EVENT_HIDDEN$2);\n      };\n\n      this._queueCallback(completeCallback, this._element, true);\n    }\n\n    dispose() {\n      this._backdrop.dispose();\n\n      super.dispose();\n      EventHandler.off(document, EVENT_FOCUSIN$1);\n    } // Private\n\n\n    _getConfig(config) {\n      config = { ...Default$4,\n        ...Manipulator.getDataAttributes(this._element),\n        ...(typeof config === 'object' ? config : {})\n      };\n      typeCheckConfig(NAME$5, config, DefaultType$4);\n      return config;\n    }\n\n    _initializeBackDrop() {\n      return new Backdrop({\n        isVisible: this._config.backdrop,\n        isAnimated: true,\n        rootElement: this._element.parentNode,\n        clickCallback: () => this.hide()\n      });\n    }\n\n    _enforceFocusOnElement(element) {\n      EventHandler.off(document, EVENT_FOCUSIN$1); // guard against infinite focus loop\n\n      EventHandler.on(document, EVENT_FOCUSIN$1, event => {\n        if (document !== event.target && element !== event.target && !element.contains(event.target)) {\n          element.focus();\n        }\n      });\n      element.focus();\n    }\n\n    _addEventListeners() {\n      EventHandler.on(this._element, EVENT_CLICK_DISMISS$1, SELECTOR_DATA_DISMISS$1, () => this.hide());\n      EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS, event => {\n        if (this._config.keyboard && event.key === ESCAPE_KEY) {\n          this.hide();\n        }\n      });\n    } // Static\n\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = Offcanvas.getOrCreateInstance(this, config);\n\n        if (typeof config !== 'string') {\n          return;\n        }\n\n        if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config](this);\n      });\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(document, EVENT_CLICK_DATA_API$1, SELECTOR_DATA_TOGGLE$1, function (event) {\n    const target = getElementFromSelector(this);\n\n    if (['A', 'AREA'].includes(this.tagName)) {\n      event.preventDefault();\n    }\n\n    if (isDisabled(this)) {\n      return;\n    }\n\n    EventHandler.one(target, EVENT_HIDDEN$2, () => {\n      // focus on trigger when it is closed\n      if (isVisible(this)) {\n        this.focus();\n      }\n    }); // avoid conflict when clicking a toggler of an offcanvas, while another is open\n\n    const allReadyOpen = SelectorEngine.findOne(OPEN_SELECTOR);\n\n    if (allReadyOpen && allReadyOpen !== target) {\n      Offcanvas.getInstance(allReadyOpen).hide();\n    }\n\n    const data = Offcanvas.getOrCreateInstance(target);\n    data.toggle(this);\n  });\n  EventHandler.on(window, EVENT_LOAD_DATA_API$1, () => SelectorEngine.find(OPEN_SELECTOR).forEach(el => Offcanvas.getOrCreateInstance(el).show()));\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   */\n\n  defineJQueryPlugin(Offcanvas);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): util/sanitizer.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  const uriAttrs = new Set(['background', 'cite', 'href', 'itemtype', 'longdesc', 'poster', 'src', 'xlink:href']);\n  const ARIA_ATTRIBUTE_PATTERN = /^aria-[\\w-]*$/i;\n  /**\n   * A pattern that recognizes a commonly useful subset of URLs that are safe.\n   *\n   * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts\n   */\n\n  const SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file):|[^#&/:?]*(?:[#/?]|$))/i;\n  /**\n   * A pattern that matches safe data URLs. Only matches image, video and audio types.\n   *\n   * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts\n   */\n\n  const DATA_URL_PATTERN = /^data:(?:image\\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\\/(?:mpeg|mp4|ogg|webm)|audio\\/(?:mp3|oga|ogg|opus));base64,[\\d+/a-z]+=*$/i;\n\n  const allowedAttribute = (attr, allowedAttributeList) => {\n    const attrName = attr.nodeName.toLowerCase();\n\n    if (allowedAttributeList.includes(attrName)) {\n      if (uriAttrs.has(attrName)) {\n        return Boolean(SAFE_URL_PATTERN.test(attr.nodeValue) || DATA_URL_PATTERN.test(attr.nodeValue));\n      }\n\n      return true;\n    }\n\n    const regExp = allowedAttributeList.filter(attrRegex => attrRegex instanceof RegExp); // Check if a regular expression validates the attribute.\n\n    for (let i = 0, len = regExp.length; i < len; i++) {\n      if (regExp[i].test(attrName)) {\n        return true;\n      }\n    }\n\n    return false;\n  };\n\n  const DefaultAllowlist = {\n    // Global attributes allowed on any supplied element below.\n    '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],\n    a: ['target', 'href', 'title', 'rel'],\n    area: [],\n    b: [],\n    br: [],\n    col: [],\n    code: [],\n    div: [],\n    em: [],\n    hr: [],\n    h1: [],\n    h2: [],\n    h3: [],\n    h4: [],\n    h5: [],\n    h6: [],\n    i: [],\n    img: ['src', 'srcset', 'alt', 'title', 'width', 'height'],\n    li: [],\n    ol: [],\n    p: [],\n    pre: [],\n    s: [],\n    small: [],\n    span: [],\n    sub: [],\n    sup: [],\n    strong: [],\n    u: [],\n    ul: []\n  };\n  function sanitizeHtml(unsafeHtml, allowList, sanitizeFn) {\n    if (!unsafeHtml.length) {\n      return unsafeHtml;\n    }\n\n    if (sanitizeFn && typeof sanitizeFn === 'function') {\n      return sanitizeFn(unsafeHtml);\n    }\n\n    const domParser = new window.DOMParser();\n    const createdDocument = domParser.parseFromString(unsafeHtml, 'text/html');\n    const allowlistKeys = Object.keys(allowList);\n    const elements = [].concat(...createdDocument.body.querySelectorAll('*'));\n\n    for (let i = 0, len = elements.length; i < len; i++) {\n      const el = elements[i];\n      const elName = el.nodeName.toLowerCase();\n\n      if (!allowlistKeys.includes(elName)) {\n        el.remove();\n        continue;\n      }\n\n      const attributeList = [].concat(...el.attributes);\n      const allowedAttributes = [].concat(allowList['*'] || [], allowList[elName] || []);\n      attributeList.forEach(attr => {\n        if (!allowedAttribute(attr, allowedAttributes)) {\n          el.removeAttribute(attr.nodeName);\n        }\n      });\n    }\n\n    return createdDocument.body.innerHTML;\n  }\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): tooltip.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$4 = 'tooltip';\n  const DATA_KEY$4 = 'bs.tooltip';\n  const EVENT_KEY$4 = `.${DATA_KEY$4}`;\n  const CLASS_PREFIX$1 = 'bs-tooltip';\n  const BSCLS_PREFIX_REGEX$1 = new RegExp(`(^|\\\\s)${CLASS_PREFIX$1}\\\\S+`, 'g');\n  const DISALLOWED_ATTRIBUTES = new Set(['sanitize', 'allowList', 'sanitizeFn']);\n  const DefaultType$3 = {\n    animation: 'boolean',\n    template: 'string',\n    title: '(string|element|function)',\n    trigger: 'string',\n    delay: '(number|object)',\n    html: 'boolean',\n    selector: '(string|boolean)',\n    placement: '(string|function)',\n    offset: '(array|string|function)',\n    container: '(string|element|boolean)',\n    fallbackPlacements: 'array',\n    boundary: '(string|element)',\n    customClass: '(string|function)',\n    sanitize: 'boolean',\n    sanitizeFn: '(null|function)',\n    allowList: 'object',\n    popperConfig: '(null|object|function)'\n  };\n  const AttachmentMap = {\n    AUTO: 'auto',\n    TOP: 'top',\n    RIGHT: isRTL() ? 'left' : 'right',\n    BOTTOM: 'bottom',\n    LEFT: isRTL() ? 'right' : 'left'\n  };\n  const Default$3 = {\n    animation: true,\n    template: '<div class=\"tooltip\" role=\"tooltip\">' + '<div class=\"tooltip-arrow\"></div>' + '<div class=\"tooltip-inner\"></div>' + '</div>',\n    trigger: 'hover focus',\n    title: '',\n    delay: 0,\n    html: false,\n    selector: false,\n    placement: 'top',\n    offset: [0, 0],\n    container: false,\n    fallbackPlacements: ['top', 'right', 'bottom', 'left'],\n    boundary: 'clippingParents',\n    customClass: '',\n    sanitize: true,\n    sanitizeFn: null,\n    allowList: DefaultAllowlist,\n    popperConfig: null\n  };\n  const Event$2 = {\n    HIDE: `hide${EVENT_KEY$4}`,\n    HIDDEN: `hidden${EVENT_KEY$4}`,\n    SHOW: `show${EVENT_KEY$4}`,\n    SHOWN: `shown${EVENT_KEY$4}`,\n    INSERTED: `inserted${EVENT_KEY$4}`,\n    CLICK: `click${EVENT_KEY$4}`,\n    FOCUSIN: `focusin${EVENT_KEY$4}`,\n    FOCUSOUT: `focusout${EVENT_KEY$4}`,\n    MOUSEENTER: `mouseenter${EVENT_KEY$4}`,\n    MOUSELEAVE: `mouseleave${EVENT_KEY$4}`\n  };\n  const CLASS_NAME_FADE$3 = 'fade';\n  const CLASS_NAME_MODAL = 'modal';\n  const CLASS_NAME_SHOW$3 = 'show';\n  const HOVER_STATE_SHOW = 'show';\n  const HOVER_STATE_OUT = 'out';\n  const SELECTOR_TOOLTIP_INNER = '.tooltip-inner';\n  const TRIGGER_HOVER = 'hover';\n  const TRIGGER_FOCUS = 'focus';\n  const TRIGGER_CLICK = 'click';\n  const TRIGGER_MANUAL = 'manual';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Tooltip extends BaseComponent {\n    constructor(element, config) {\n      if (typeof Popper === 'undefined') {\n        throw new TypeError('Bootstrap\\'s tooltips require Popper (https://popper.js.org)');\n      }\n\n      super(element); // private\n\n      this._isEnabled = true;\n      this._timeout = 0;\n      this._hoverState = '';\n      this._activeTrigger = {};\n      this._popper = null; // Protected\n\n      this._config = this._getConfig(config);\n      this.tip = null;\n\n      this._setListeners();\n    } // Getters\n\n\n    static get Default() {\n      return Default$3;\n    }\n\n    static get NAME() {\n      return NAME$4;\n    }\n\n    static get Event() {\n      return Event$2;\n    }\n\n    static get DefaultType() {\n      return DefaultType$3;\n    } // Public\n\n\n    enable() {\n      this._isEnabled = true;\n    }\n\n    disable() {\n      this._isEnabled = false;\n    }\n\n    toggleEnabled() {\n      this._isEnabled = !this._isEnabled;\n    }\n\n    toggle(event) {\n      if (!this._isEnabled) {\n        return;\n      }\n\n      if (event) {\n        const context = this._initializeOnDelegatedTarget(event);\n\n        context._activeTrigger.click = !context._activeTrigger.click;\n\n        if (context._isWithActiveTrigger()) {\n          context._enter(null, context);\n        } else {\n          context._leave(null, context);\n        }\n      } else {\n        if (this.getTipElement().classList.contains(CLASS_NAME_SHOW$3)) {\n          this._leave(null, this);\n\n          return;\n        }\n\n        this._enter(null, this);\n      }\n    }\n\n    dispose() {\n      clearTimeout(this._timeout);\n      EventHandler.off(this._element.closest(`.${CLASS_NAME_MODAL}`), 'hide.bs.modal', this._hideModalHandler);\n\n      if (this.tip) {\n        this.tip.remove();\n      }\n\n      if (this._popper) {\n        this._popper.destroy();\n      }\n\n      super.dispose();\n    }\n\n    show() {\n      if (this._element.style.display === 'none') {\n        throw new Error('Please use show on visible elements');\n      }\n\n      if (!(this.isWithContent() && this._isEnabled)) {\n        return;\n      }\n\n      const showEvent = EventHandler.trigger(this._element, this.constructor.Event.SHOW);\n      const shadowRoot = findShadowRoot(this._element);\n      const isInTheDom = shadowRoot === null ? this._element.ownerDocument.documentElement.contains(this._element) : shadowRoot.contains(this._element);\n\n      if (showEvent.defaultPrevented || !isInTheDom) {\n        return;\n      }\n\n      const tip = this.getTipElement();\n      const tipId = getUID(this.constructor.NAME);\n      tip.setAttribute('id', tipId);\n\n      this._element.setAttribute('aria-describedby', tipId);\n\n      this.setContent();\n\n      if (this._config.animation) {\n        tip.classList.add(CLASS_NAME_FADE$3);\n      }\n\n      const placement = typeof this._config.placement === 'function' ? this._config.placement.call(this, tip, this._element) : this._config.placement;\n\n      const attachment = this._getAttachment(placement);\n\n      this._addAttachmentClass(attachment);\n\n      const {\n        container\n      } = this._config;\n      Data.set(tip, this.constructor.DATA_KEY, this);\n\n      if (!this._element.ownerDocument.documentElement.contains(this.tip)) {\n        container.appendChild(tip);\n        EventHandler.trigger(this._element, this.constructor.Event.INSERTED);\n      }\n\n      if (this._popper) {\n        this._popper.update();\n      } else {\n        this._popper = createPopper(this._element, tip, this._getPopperConfig(attachment));\n      }\n\n      tip.classList.add(CLASS_NAME_SHOW$3);\n      const customClass = typeof this._config.customClass === 'function' ? this._config.customClass() : this._config.customClass;\n\n      if (customClass) {\n        tip.classList.add(...customClass.split(' '));\n      } // If this is a touch-enabled device we add extra\n      // empty mouseover listeners to the body's immediate children;\n      // only needed because of broken event delegation on iOS\n      // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n\n\n      if ('ontouchstart' in document.documentElement) {\n        [].concat(...document.body.children).forEach(element => {\n          EventHandler.on(element, 'mouseover', noop);\n        });\n      }\n\n      const complete = () => {\n        const prevHoverState = this._hoverState;\n        this._hoverState = null;\n        EventHandler.trigger(this._element, this.constructor.Event.SHOWN);\n\n        if (prevHoverState === HOVER_STATE_OUT) {\n          this._leave(null, this);\n        }\n      };\n\n      const isAnimated = this.tip.classList.contains(CLASS_NAME_FADE$3);\n\n      this._queueCallback(complete, this.tip, isAnimated);\n    }\n\n    hide() {\n      if (!this._popper) {\n        return;\n      }\n\n      const tip = this.getTipElement();\n\n      const complete = () => {\n        if (this._isWithActiveTrigger()) {\n          return;\n        }\n\n        if (this._hoverState !== HOVER_STATE_SHOW) {\n          tip.remove();\n        }\n\n        this._cleanTipClass();\n\n        this._element.removeAttribute('aria-describedby');\n\n        EventHandler.trigger(this._element, this.constructor.Event.HIDDEN);\n\n        if (this._popper) {\n          this._popper.destroy();\n\n          this._popper = null;\n        }\n      };\n\n      const hideEvent = EventHandler.trigger(this._element, this.constructor.Event.HIDE);\n\n      if (hideEvent.defaultPrevented) {\n        return;\n      }\n\n      tip.classList.remove(CLASS_NAME_SHOW$3); // If this is a touch-enabled device we remove the extra\n      // empty mouseover listeners we added for iOS support\n\n      if ('ontouchstart' in document.documentElement) {\n        [].concat(...document.body.children).forEach(element => EventHandler.off(element, 'mouseover', noop));\n      }\n\n      this._activeTrigger[TRIGGER_CLICK] = false;\n      this._activeTrigger[TRIGGER_FOCUS] = false;\n      this._activeTrigger[TRIGGER_HOVER] = false;\n      const isAnimated = this.tip.classList.contains(CLASS_NAME_FADE$3);\n\n      this._queueCallback(complete, this.tip, isAnimated);\n\n      this._hoverState = '';\n    }\n\n    update() {\n      if (this._popper !== null) {\n        this._popper.update();\n      }\n    } // Protected\n\n\n    isWithContent() {\n      return Boolean(this.getTitle());\n    }\n\n    getTipElement() {\n      if (this.tip) {\n        return this.tip;\n      }\n\n      const element = document.createElement('div');\n      element.innerHTML = this._config.template;\n      this.tip = element.children[0];\n      return this.tip;\n    }\n\n    setContent() {\n      const tip = this.getTipElement();\n      this.setElementContent(SelectorEngine.findOne(SELECTOR_TOOLTIP_INNER, tip), this.getTitle());\n      tip.classList.remove(CLASS_NAME_FADE$3, CLASS_NAME_SHOW$3);\n    }\n\n    setElementContent(element, content) {\n      if (element === null) {\n        return;\n      }\n\n      if (isElement$1(content)) {\n        content = getElement(content); // content is a DOM node or a jQuery\n\n        if (this._config.html) {\n          if (content.parentNode !== element) {\n            element.innerHTML = '';\n            element.appendChild(content);\n          }\n        } else {\n          element.textContent = content.textContent;\n        }\n\n        return;\n      }\n\n      if (this._config.html) {\n        if (this._config.sanitize) {\n          content = sanitizeHtml(content, this._config.allowList, this._config.sanitizeFn);\n        }\n\n        element.innerHTML = content;\n      } else {\n        element.textContent = content;\n      }\n    }\n\n    getTitle() {\n      let title = this._element.getAttribute('data-bs-original-title');\n\n      if (!title) {\n        title = typeof this._config.title === 'function' ? this._config.title.call(this._element) : this._config.title;\n      }\n\n      return title;\n    }\n\n    updateAttachment(attachment) {\n      if (attachment === 'right') {\n        return 'end';\n      }\n\n      if (attachment === 'left') {\n        return 'start';\n      }\n\n      return attachment;\n    } // Private\n\n\n    _initializeOnDelegatedTarget(event, context) {\n      const dataKey = this.constructor.DATA_KEY;\n      context = context || Data.get(event.delegateTarget, dataKey);\n\n      if (!context) {\n        context = new this.constructor(event.delegateTarget, this._getDelegateConfig());\n        Data.set(event.delegateTarget, dataKey, context);\n      }\n\n      return context;\n    }\n\n    _getOffset() {\n      const {\n        offset\n      } = this._config;\n\n      if (typeof offset === 'string') {\n        return offset.split(',').map(val => Number.parseInt(val, 10));\n      }\n\n      if (typeof offset === 'function') {\n        return popperData => offset(popperData, this._element);\n      }\n\n      return offset;\n    }\n\n    _getPopperConfig(attachment) {\n      const defaultBsPopperConfig = {\n        placement: attachment,\n        modifiers: [{\n          name: 'flip',\n          options: {\n            fallbackPlacements: this._config.fallbackPlacements\n          }\n        }, {\n          name: 'offset',\n          options: {\n            offset: this._getOffset()\n          }\n        }, {\n          name: 'preventOverflow',\n          options: {\n            boundary: this._config.boundary\n          }\n        }, {\n          name: 'arrow',\n          options: {\n            element: `.${this.constructor.NAME}-arrow`\n          }\n        }, {\n          name: 'onChange',\n          enabled: true,\n          phase: 'afterWrite',\n          fn: data => this._handlePopperPlacementChange(data)\n        }],\n        onFirstUpdate: data => {\n          if (data.options.placement !== data.placement) {\n            this._handlePopperPlacementChange(data);\n          }\n        }\n      };\n      return { ...defaultBsPopperConfig,\n        ...(typeof this._config.popperConfig === 'function' ? this._config.popperConfig(defaultBsPopperConfig) : this._config.popperConfig)\n      };\n    }\n\n    _addAttachmentClass(attachment) {\n      this.getTipElement().classList.add(`${CLASS_PREFIX$1}-${this.updateAttachment(attachment)}`);\n    }\n\n    _getAttachment(placement) {\n      return AttachmentMap[placement.toUpperCase()];\n    }\n\n    _setListeners() {\n      const triggers = this._config.trigger.split(' ');\n\n      triggers.forEach(trigger => {\n        if (trigger === 'click') {\n          EventHandler.on(this._element, this.constructor.Event.CLICK, this._config.selector, event => this.toggle(event));\n        } else if (trigger !== TRIGGER_MANUAL) {\n          const eventIn = trigger === TRIGGER_HOVER ? this.constructor.Event.MOUSEENTER : this.constructor.Event.FOCUSIN;\n          const eventOut = trigger === TRIGGER_HOVER ? this.constructor.Event.MOUSELEAVE : this.constructor.Event.FOCUSOUT;\n          EventHandler.on(this._element, eventIn, this._config.selector, event => this._enter(event));\n          EventHandler.on(this._element, eventOut, this._config.selector, event => this._leave(event));\n        }\n      });\n\n      this._hideModalHandler = () => {\n        if (this._element) {\n          this.hide();\n        }\n      };\n\n      EventHandler.on(this._element.closest(`.${CLASS_NAME_MODAL}`), 'hide.bs.modal', this._hideModalHandler);\n\n      if (this._config.selector) {\n        this._config = { ...this._config,\n          trigger: 'manual',\n          selector: ''\n        };\n      } else {\n        this._fixTitle();\n      }\n    }\n\n    _fixTitle() {\n      const title = this._element.getAttribute('title');\n\n      const originalTitleType = typeof this._element.getAttribute('data-bs-original-title');\n\n      if (title || originalTitleType !== 'string') {\n        this._element.setAttribute('data-bs-original-title', title || '');\n\n        if (title && !this._element.getAttribute('aria-label') && !this._element.textContent) {\n          this._element.setAttribute('aria-label', title);\n        }\n\n        this._element.setAttribute('title', '');\n      }\n    }\n\n    _enter(event, context) {\n      context = this._initializeOnDelegatedTarget(event, context);\n\n      if (event) {\n        context._activeTrigger[event.type === 'focusin' ? TRIGGER_FOCUS : TRIGGER_HOVER] = true;\n      }\n\n      if (context.getTipElement().classList.contains(CLASS_NAME_SHOW$3) || context._hoverState === HOVER_STATE_SHOW) {\n        context._hoverState = HOVER_STATE_SHOW;\n        return;\n      }\n\n      clearTimeout(context._timeout);\n      context._hoverState = HOVER_STATE_SHOW;\n\n      if (!context._config.delay || !context._config.delay.show) {\n        context.show();\n        return;\n      }\n\n      context._timeout = setTimeout(() => {\n        if (context._hoverState === HOVER_STATE_SHOW) {\n          context.show();\n        }\n      }, context._config.delay.show);\n    }\n\n    _leave(event, context) {\n      context = this._initializeOnDelegatedTarget(event, context);\n\n      if (event) {\n        context._activeTrigger[event.type === 'focusout' ? TRIGGER_FOCUS : TRIGGER_HOVER] = context._element.contains(event.relatedTarget);\n      }\n\n      if (context._isWithActiveTrigger()) {\n        return;\n      }\n\n      clearTimeout(context._timeout);\n      context._hoverState = HOVER_STATE_OUT;\n\n      if (!context._config.delay || !context._config.delay.hide) {\n        context.hide();\n        return;\n      }\n\n      context._timeout = setTimeout(() => {\n        if (context._hoverState === HOVER_STATE_OUT) {\n          context.hide();\n        }\n      }, context._config.delay.hide);\n    }\n\n    _isWithActiveTrigger() {\n      for (const trigger in this._activeTrigger) {\n        if (this._activeTrigger[trigger]) {\n          return true;\n        }\n      }\n\n      return false;\n    }\n\n    _getConfig(config) {\n      const dataAttributes = Manipulator.getDataAttributes(this._element);\n      Object.keys(dataAttributes).forEach(dataAttr => {\n        if (DISALLOWED_ATTRIBUTES.has(dataAttr)) {\n          delete dataAttributes[dataAttr];\n        }\n      });\n      config = { ...this.constructor.Default,\n        ...dataAttributes,\n        ...(typeof config === 'object' && config ? config : {})\n      };\n      config.container = config.container === false ? document.body : getElement(config.container);\n\n      if (typeof config.delay === 'number') {\n        config.delay = {\n          show: config.delay,\n          hide: config.delay\n        };\n      }\n\n      if (typeof config.title === 'number') {\n        config.title = config.title.toString();\n      }\n\n      if (typeof config.content === 'number') {\n        config.content = config.content.toString();\n      }\n\n      typeCheckConfig(NAME$4, config, this.constructor.DefaultType);\n\n      if (config.sanitize) {\n        config.template = sanitizeHtml(config.template, config.allowList, config.sanitizeFn);\n      }\n\n      return config;\n    }\n\n    _getDelegateConfig() {\n      const config = {};\n\n      if (this._config) {\n        for (const key in this._config) {\n          if (this.constructor.Default[key] !== this._config[key]) {\n            config[key] = this._config[key];\n          }\n        }\n      }\n\n      return config;\n    }\n\n    _cleanTipClass() {\n      const tip = this.getTipElement();\n      const tabClass = tip.getAttribute('class').match(BSCLS_PREFIX_REGEX$1);\n\n      if (tabClass !== null && tabClass.length > 0) {\n        tabClass.map(token => token.trim()).forEach(tClass => tip.classList.remove(tClass));\n      }\n    }\n\n    _handlePopperPlacementChange(popperData) {\n      const {\n        state\n      } = popperData;\n\n      if (!state) {\n        return;\n      }\n\n      this.tip = state.elements.popper;\n\n      this._cleanTipClass();\n\n      this._addAttachmentClass(this._getAttachment(state.placement));\n    } // Static\n\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = Tooltip.getOrCreateInstance(this, config);\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(`No method named \"${config}\"`);\n          }\n\n          data[config]();\n        }\n      });\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Tooltip to jQuery only if jQuery is present\n   */\n\n\n  defineJQueryPlugin(Tooltip);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): popover.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$3 = 'popover';\n  const DATA_KEY$3 = 'bs.popover';\n  const EVENT_KEY$3 = `.${DATA_KEY$3}`;\n  const CLASS_PREFIX = 'bs-popover';\n  const BSCLS_PREFIX_REGEX = new RegExp(`(^|\\\\s)${CLASS_PREFIX}\\\\S+`, 'g');\n  const Default$2 = { ...Tooltip.Default,\n    placement: 'right',\n    offset: [0, 8],\n    trigger: 'click',\n    content: '',\n    template: '<div class=\"popover\" role=\"tooltip\">' + '<div class=\"popover-arrow\"></div>' + '<h3 class=\"popover-header\"></h3>' + '<div class=\"popover-body\"></div>' + '</div>'\n  };\n  const DefaultType$2 = { ...Tooltip.DefaultType,\n    content: '(string|element|function)'\n  };\n  const Event$1 = {\n    HIDE: `hide${EVENT_KEY$3}`,\n    HIDDEN: `hidden${EVENT_KEY$3}`,\n    SHOW: `show${EVENT_KEY$3}`,\n    SHOWN: `shown${EVENT_KEY$3}`,\n    INSERTED: `inserted${EVENT_KEY$3}`,\n    CLICK: `click${EVENT_KEY$3}`,\n    FOCUSIN: `focusin${EVENT_KEY$3}`,\n    FOCUSOUT: `focusout${EVENT_KEY$3}`,\n    MOUSEENTER: `mouseenter${EVENT_KEY$3}`,\n    MOUSELEAVE: `mouseleave${EVENT_KEY$3}`\n  };\n  const CLASS_NAME_FADE$2 = 'fade';\n  const CLASS_NAME_SHOW$2 = 'show';\n  const SELECTOR_TITLE = '.popover-header';\n  const SELECTOR_CONTENT = '.popover-body';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Popover extends Tooltip {\n    // Getters\n    static get Default() {\n      return Default$2;\n    }\n\n    static get NAME() {\n      return NAME$3;\n    }\n\n    static get Event() {\n      return Event$1;\n    }\n\n    static get DefaultType() {\n      return DefaultType$2;\n    } // Overrides\n\n\n    isWithContent() {\n      return this.getTitle() || this._getContent();\n    }\n\n    getTipElement() {\n      if (this.tip) {\n        return this.tip;\n      }\n\n      this.tip = super.getTipElement();\n\n      if (!this.getTitle()) {\n        SelectorEngine.findOne(SELECTOR_TITLE, this.tip).remove();\n      }\n\n      if (!this._getContent()) {\n        SelectorEngine.findOne(SELECTOR_CONTENT, this.tip).remove();\n      }\n\n      return this.tip;\n    }\n\n    setContent() {\n      const tip = this.getTipElement(); // we use append for html objects to maintain js events\n\n      this.setElementContent(SelectorEngine.findOne(SELECTOR_TITLE, tip), this.getTitle());\n\n      let content = this._getContent();\n\n      if (typeof content === 'function') {\n        content = content.call(this._element);\n      }\n\n      this.setElementContent(SelectorEngine.findOne(SELECTOR_CONTENT, tip), content);\n      tip.classList.remove(CLASS_NAME_FADE$2, CLASS_NAME_SHOW$2);\n    } // Private\n\n\n    _addAttachmentClass(attachment) {\n      this.getTipElement().classList.add(`${CLASS_PREFIX}-${this.updateAttachment(attachment)}`);\n    }\n\n    _getContent() {\n      return this._element.getAttribute('data-bs-content') || this._config.content;\n    }\n\n    _cleanTipClass() {\n      const tip = this.getTipElement();\n      const tabClass = tip.getAttribute('class').match(BSCLS_PREFIX_REGEX);\n\n      if (tabClass !== null && tabClass.length > 0) {\n        tabClass.map(token => token.trim()).forEach(tClass => tip.classList.remove(tClass));\n      }\n    } // Static\n\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = Popover.getOrCreateInstance(this, config);\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(`No method named \"${config}\"`);\n          }\n\n          data[config]();\n        }\n      });\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Popover to jQuery only if jQuery is present\n   */\n\n\n  defineJQueryPlugin(Popover);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): scrollspy.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$2 = 'scrollspy';\n  const DATA_KEY$2 = 'bs.scrollspy';\n  const EVENT_KEY$2 = `.${DATA_KEY$2}`;\n  const DATA_API_KEY$1 = '.data-api';\n  const Default$1 = {\n    offset: 10,\n    method: 'auto',\n    target: ''\n  };\n  const DefaultType$1 = {\n    offset: 'number',\n    method: 'string',\n    target: '(string|element)'\n  };\n  const EVENT_ACTIVATE = `activate${EVENT_KEY$2}`;\n  const EVENT_SCROLL = `scroll${EVENT_KEY$2}`;\n  const EVENT_LOAD_DATA_API = `load${EVENT_KEY$2}${DATA_API_KEY$1}`;\n  const CLASS_NAME_DROPDOWN_ITEM = 'dropdown-item';\n  const CLASS_NAME_ACTIVE$1 = 'active';\n  const SELECTOR_DATA_SPY = '[data-bs-spy=\"scroll\"]';\n  const SELECTOR_NAV_LIST_GROUP$1 = '.nav, .list-group';\n  const SELECTOR_NAV_LINKS = '.nav-link';\n  const SELECTOR_NAV_ITEMS = '.nav-item';\n  const SELECTOR_LIST_ITEMS = '.list-group-item';\n  const SELECTOR_DROPDOWN$1 = '.dropdown';\n  const SELECTOR_DROPDOWN_TOGGLE$1 = '.dropdown-toggle';\n  const METHOD_OFFSET = 'offset';\n  const METHOD_POSITION = 'position';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class ScrollSpy extends BaseComponent {\n    constructor(element, config) {\n      super(element);\n      this._scrollElement = this._element.tagName === 'BODY' ? window : this._element;\n      this._config = this._getConfig(config);\n      this._selector = `${this._config.target} ${SELECTOR_NAV_LINKS}, ${this._config.target} ${SELECTOR_LIST_ITEMS}, ${this._config.target} .${CLASS_NAME_DROPDOWN_ITEM}`;\n      this._offsets = [];\n      this._targets = [];\n      this._activeTarget = null;\n      this._scrollHeight = 0;\n      EventHandler.on(this._scrollElement, EVENT_SCROLL, () => this._process());\n      this.refresh();\n\n      this._process();\n    } // Getters\n\n\n    static get Default() {\n      return Default$1;\n    }\n\n    static get NAME() {\n      return NAME$2;\n    } // Public\n\n\n    refresh() {\n      const autoMethod = this._scrollElement === this._scrollElement.window ? METHOD_OFFSET : METHOD_POSITION;\n      const offsetMethod = this._config.method === 'auto' ? autoMethod : this._config.method;\n      const offsetBase = offsetMethod === METHOD_POSITION ? this._getScrollTop() : 0;\n      this._offsets = [];\n      this._targets = [];\n      this._scrollHeight = this._getScrollHeight();\n      const targets = SelectorEngine.find(this._selector);\n      targets.map(element => {\n        const targetSelector = getSelectorFromElement(element);\n        const target = targetSelector ? SelectorEngine.findOne(targetSelector) : null;\n\n        if (target) {\n          const targetBCR = target.getBoundingClientRect();\n\n          if (targetBCR.width || targetBCR.height) {\n            return [Manipulator[offsetMethod](target).top + offsetBase, targetSelector];\n          }\n        }\n\n        return null;\n      }).filter(item => item).sort((a, b) => a[0] - b[0]).forEach(item => {\n        this._offsets.push(item[0]);\n\n        this._targets.push(item[1]);\n      });\n    }\n\n    dispose() {\n      EventHandler.off(this._scrollElement, EVENT_KEY$2);\n      super.dispose();\n    } // Private\n\n\n    _getConfig(config) {\n      config = { ...Default$1,\n        ...Manipulator.getDataAttributes(this._element),\n        ...(typeof config === 'object' && config ? config : {})\n      };\n\n      if (typeof config.target !== 'string' && isElement$1(config.target)) {\n        let {\n          id\n        } = config.target;\n\n        if (!id) {\n          id = getUID(NAME$2);\n          config.target.id = id;\n        }\n\n        config.target = `#${id}`;\n      }\n\n      typeCheckConfig(NAME$2, config, DefaultType$1);\n      return config;\n    }\n\n    _getScrollTop() {\n      return this._scrollElement === window ? this._scrollElement.pageYOffset : this._scrollElement.scrollTop;\n    }\n\n    _getScrollHeight() {\n      return this._scrollElement.scrollHeight || Math.max(document.body.scrollHeight, document.documentElement.scrollHeight);\n    }\n\n    _getOffsetHeight() {\n      return this._scrollElement === window ? window.innerHeight : this._scrollElement.getBoundingClientRect().height;\n    }\n\n    _process() {\n      const scrollTop = this._getScrollTop() + this._config.offset;\n\n      const scrollHeight = this._getScrollHeight();\n\n      const maxScroll = this._config.offset + scrollHeight - this._getOffsetHeight();\n\n      if (this._scrollHeight !== scrollHeight) {\n        this.refresh();\n      }\n\n      if (scrollTop >= maxScroll) {\n        const target = this._targets[this._targets.length - 1];\n\n        if (this._activeTarget !== target) {\n          this._activate(target);\n        }\n\n        return;\n      }\n\n      if (this._activeTarget && scrollTop < this._offsets[0] && this._offsets[0] > 0) {\n        this._activeTarget = null;\n\n        this._clear();\n\n        return;\n      }\n\n      for (let i = this._offsets.length; i--;) {\n        const isActiveTarget = this._activeTarget !== this._targets[i] && scrollTop >= this._offsets[i] && (typeof this._offsets[i + 1] === 'undefined' || scrollTop < this._offsets[i + 1]);\n\n        if (isActiveTarget) {\n          this._activate(this._targets[i]);\n        }\n      }\n    }\n\n    _activate(target) {\n      this._activeTarget = target;\n\n      this._clear();\n\n      const queries = this._selector.split(',').map(selector => `${selector}[data-bs-target=\"${target}\"],${selector}[href=\"${target}\"]`);\n\n      const link = SelectorEngine.findOne(queries.join(','));\n\n      if (link.classList.contains(CLASS_NAME_DROPDOWN_ITEM)) {\n        SelectorEngine.findOne(SELECTOR_DROPDOWN_TOGGLE$1, link.closest(SELECTOR_DROPDOWN$1)).classList.add(CLASS_NAME_ACTIVE$1);\n        link.classList.add(CLASS_NAME_ACTIVE$1);\n      } else {\n        // Set triggered link as active\n        link.classList.add(CLASS_NAME_ACTIVE$1);\n        SelectorEngine.parents(link, SELECTOR_NAV_LIST_GROUP$1).forEach(listGroup => {\n          // Set triggered links parents as active\n          // With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor\n          SelectorEngine.prev(listGroup, `${SELECTOR_NAV_LINKS}, ${SELECTOR_LIST_ITEMS}`).forEach(item => item.classList.add(CLASS_NAME_ACTIVE$1)); // Handle special case when .nav-link is inside .nav-item\n\n          SelectorEngine.prev(listGroup, SELECTOR_NAV_ITEMS).forEach(navItem => {\n            SelectorEngine.children(navItem, SELECTOR_NAV_LINKS).forEach(item => item.classList.add(CLASS_NAME_ACTIVE$1));\n          });\n        });\n      }\n\n      EventHandler.trigger(this._scrollElement, EVENT_ACTIVATE, {\n        relatedTarget: target\n      });\n    }\n\n    _clear() {\n      SelectorEngine.find(this._selector).filter(node => node.classList.contains(CLASS_NAME_ACTIVE$1)).forEach(node => node.classList.remove(CLASS_NAME_ACTIVE$1));\n    } // Static\n\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = ScrollSpy.getOrCreateInstance(this, config);\n\n        if (typeof config !== 'string') {\n          return;\n        }\n\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config]();\n      });\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n    SelectorEngine.find(SELECTOR_DATA_SPY).forEach(spy => new ScrollSpy(spy));\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .ScrollSpy to jQuery only if jQuery is present\n   */\n\n  defineJQueryPlugin(ScrollSpy);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): tab.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$1 = 'tab';\n  const DATA_KEY$1 = 'bs.tab';\n  const EVENT_KEY$1 = `.${DATA_KEY$1}`;\n  const DATA_API_KEY = '.data-api';\n  const EVENT_HIDE$1 = `hide${EVENT_KEY$1}`;\n  const EVENT_HIDDEN$1 = `hidden${EVENT_KEY$1}`;\n  const EVENT_SHOW$1 = `show${EVENT_KEY$1}`;\n  const EVENT_SHOWN$1 = `shown${EVENT_KEY$1}`;\n  const EVENT_CLICK_DATA_API = `click${EVENT_KEY$1}${DATA_API_KEY}`;\n  const CLASS_NAME_DROPDOWN_MENU = 'dropdown-menu';\n  const CLASS_NAME_ACTIVE = 'active';\n  const CLASS_NAME_FADE$1 = 'fade';\n  const CLASS_NAME_SHOW$1 = 'show';\n  const SELECTOR_DROPDOWN = '.dropdown';\n  const SELECTOR_NAV_LIST_GROUP = '.nav, .list-group';\n  const SELECTOR_ACTIVE = '.active';\n  const SELECTOR_ACTIVE_UL = ':scope > li > .active';\n  const SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"tab\"], [data-bs-toggle=\"pill\"], [data-bs-toggle=\"list\"]';\n  const SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle';\n  const SELECTOR_DROPDOWN_ACTIVE_CHILD = ':scope > .dropdown-menu .active';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Tab extends BaseComponent {\n    // Getters\n    static get NAME() {\n      return NAME$1;\n    } // Public\n\n\n    show() {\n      if (this._element.parentNode && this._element.parentNode.nodeType === Node.ELEMENT_NODE && this._element.classList.contains(CLASS_NAME_ACTIVE)) {\n        return;\n      }\n\n      let previous;\n      const target = getElementFromSelector(this._element);\n\n      const listElement = this._element.closest(SELECTOR_NAV_LIST_GROUP);\n\n      if (listElement) {\n        const itemSelector = listElement.nodeName === 'UL' || listElement.nodeName === 'OL' ? SELECTOR_ACTIVE_UL : SELECTOR_ACTIVE;\n        previous = SelectorEngine.find(itemSelector, listElement);\n        previous = previous[previous.length - 1];\n      }\n\n      const hideEvent = previous ? EventHandler.trigger(previous, EVENT_HIDE$1, {\n        relatedTarget: this._element\n      }) : null;\n      const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$1, {\n        relatedTarget: previous\n      });\n\n      if (showEvent.defaultPrevented || hideEvent !== null && hideEvent.defaultPrevented) {\n        return;\n      }\n\n      this._activate(this._element, listElement);\n\n      const complete = () => {\n        EventHandler.trigger(previous, EVENT_HIDDEN$1, {\n          relatedTarget: this._element\n        });\n        EventHandler.trigger(this._element, EVENT_SHOWN$1, {\n          relatedTarget: previous\n        });\n      };\n\n      if (target) {\n        this._activate(target, target.parentNode, complete);\n      } else {\n        complete();\n      }\n    } // Private\n\n\n    _activate(element, container, callback) {\n      const activeElements = container && (container.nodeName === 'UL' || container.nodeName === 'OL') ? SelectorEngine.find(SELECTOR_ACTIVE_UL, container) : SelectorEngine.children(container, SELECTOR_ACTIVE);\n      const active = activeElements[0];\n      const isTransitioning = callback && active && active.classList.contains(CLASS_NAME_FADE$1);\n\n      const complete = () => this._transitionComplete(element, active, callback);\n\n      if (active && isTransitioning) {\n        active.classList.remove(CLASS_NAME_SHOW$1);\n\n        this._queueCallback(complete, element, true);\n      } else {\n        complete();\n      }\n    }\n\n    _transitionComplete(element, active, callback) {\n      if (active) {\n        active.classList.remove(CLASS_NAME_ACTIVE);\n        const dropdownChild = SelectorEngine.findOne(SELECTOR_DROPDOWN_ACTIVE_CHILD, active.parentNode);\n\n        if (dropdownChild) {\n          dropdownChild.classList.remove(CLASS_NAME_ACTIVE);\n        }\n\n        if (active.getAttribute('role') === 'tab') {\n          active.setAttribute('aria-selected', false);\n        }\n      }\n\n      element.classList.add(CLASS_NAME_ACTIVE);\n\n      if (element.getAttribute('role') === 'tab') {\n        element.setAttribute('aria-selected', true);\n      }\n\n      reflow(element);\n\n      if (element.classList.contains(CLASS_NAME_FADE$1)) {\n        element.classList.add(CLASS_NAME_SHOW$1);\n      }\n\n      let parent = element.parentNode;\n\n      if (parent && parent.nodeName === 'LI') {\n        parent = parent.parentNode;\n      }\n\n      if (parent && parent.classList.contains(CLASS_NAME_DROPDOWN_MENU)) {\n        const dropdownElement = element.closest(SELECTOR_DROPDOWN);\n\n        if (dropdownElement) {\n          SelectorEngine.find(SELECTOR_DROPDOWN_TOGGLE, dropdownElement).forEach(dropdown => dropdown.classList.add(CLASS_NAME_ACTIVE));\n        }\n\n        element.setAttribute('aria-expanded', true);\n      }\n\n      if (callback) {\n        callback();\n      }\n    } // Static\n\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = Tab.getOrCreateInstance(this);\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(`No method named \"${config}\"`);\n          }\n\n          data[config]();\n        }\n      });\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n    if (['A', 'AREA'].includes(this.tagName)) {\n      event.preventDefault();\n    }\n\n    if (isDisabled(this)) {\n      return;\n    }\n\n    const data = Tab.getOrCreateInstance(this);\n    data.show();\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Tab to jQuery only if jQuery is present\n   */\n\n  defineJQueryPlugin(Tab);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): toast.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME = 'toast';\n  const DATA_KEY = 'bs.toast';\n  const EVENT_KEY = `.${DATA_KEY}`;\n  const EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY}`;\n  const EVENT_MOUSEOVER = `mouseover${EVENT_KEY}`;\n  const EVENT_MOUSEOUT = `mouseout${EVENT_KEY}`;\n  const EVENT_FOCUSIN = `focusin${EVENT_KEY}`;\n  const EVENT_FOCUSOUT = `focusout${EVENT_KEY}`;\n  const EVENT_HIDE = `hide${EVENT_KEY}`;\n  const EVENT_HIDDEN = `hidden${EVENT_KEY}`;\n  const EVENT_SHOW = `show${EVENT_KEY}`;\n  const EVENT_SHOWN = `shown${EVENT_KEY}`;\n  const CLASS_NAME_FADE = 'fade';\n  const CLASS_NAME_HIDE = 'hide';\n  const CLASS_NAME_SHOW = 'show';\n  const CLASS_NAME_SHOWING = 'showing';\n  const DefaultType = {\n    animation: 'boolean',\n    autohide: 'boolean',\n    delay: 'number'\n  };\n  const Default = {\n    animation: true,\n    autohide: true,\n    delay: 5000\n  };\n  const SELECTOR_DATA_DISMISS = '[data-bs-dismiss=\"toast\"]';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Toast extends BaseComponent {\n    constructor(element, config) {\n      super(element);\n      this._config = this._getConfig(config);\n      this._timeout = null;\n      this._hasMouseInteraction = false;\n      this._hasKeyboardInteraction = false;\n\n      this._setListeners();\n    } // Getters\n\n\n    static get DefaultType() {\n      return DefaultType;\n    }\n\n    static get Default() {\n      return Default;\n    }\n\n    static get NAME() {\n      return NAME;\n    } // Public\n\n\n    show() {\n      const showEvent = EventHandler.trigger(this._element, EVENT_SHOW);\n\n      if (showEvent.defaultPrevented) {\n        return;\n      }\n\n      this._clearTimeout();\n\n      if (this._config.animation) {\n        this._element.classList.add(CLASS_NAME_FADE);\n      }\n\n      const complete = () => {\n        this._element.classList.remove(CLASS_NAME_SHOWING);\n\n        this._element.classList.add(CLASS_NAME_SHOW);\n\n        EventHandler.trigger(this._element, EVENT_SHOWN);\n\n        this._maybeScheduleHide();\n      };\n\n      this._element.classList.remove(CLASS_NAME_HIDE);\n\n      reflow(this._element);\n\n      this._element.classList.add(CLASS_NAME_SHOWING);\n\n      this._queueCallback(complete, this._element, this._config.animation);\n    }\n\n    hide() {\n      if (!this._element.classList.contains(CLASS_NAME_SHOW)) {\n        return;\n      }\n\n      const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE);\n\n      if (hideEvent.defaultPrevented) {\n        return;\n      }\n\n      const complete = () => {\n        this._element.classList.add(CLASS_NAME_HIDE);\n\n        EventHandler.trigger(this._element, EVENT_HIDDEN);\n      };\n\n      this._element.classList.remove(CLASS_NAME_SHOW);\n\n      this._queueCallback(complete, this._element, this._config.animation);\n    }\n\n    dispose() {\n      this._clearTimeout();\n\n      if (this._element.classList.contains(CLASS_NAME_SHOW)) {\n        this._element.classList.remove(CLASS_NAME_SHOW);\n      }\n\n      super.dispose();\n    } // Private\n\n\n    _getConfig(config) {\n      config = { ...Default,\n        ...Manipulator.getDataAttributes(this._element),\n        ...(typeof config === 'object' && config ? config : {})\n      };\n      typeCheckConfig(NAME, config, this.constructor.DefaultType);\n      return config;\n    }\n\n    _maybeScheduleHide() {\n      if (!this._config.autohide) {\n        return;\n      }\n\n      if (this._hasMouseInteraction || this._hasKeyboardInteraction) {\n        return;\n      }\n\n      this._timeout = setTimeout(() => {\n        this.hide();\n      }, this._config.delay);\n    }\n\n    _onInteraction(event, isInteracting) {\n      switch (event.type) {\n        case 'mouseover':\n        case 'mouseout':\n          this._hasMouseInteraction = isInteracting;\n          break;\n\n        case 'focusin':\n        case 'focusout':\n          this._hasKeyboardInteraction = isInteracting;\n          break;\n      }\n\n      if (isInteracting) {\n        this._clearTimeout();\n\n        return;\n      }\n\n      const nextElement = event.relatedTarget;\n\n      if (this._element === nextElement || this._element.contains(nextElement)) {\n        return;\n      }\n\n      this._maybeScheduleHide();\n    }\n\n    _setListeners() {\n      EventHandler.on(this._element, EVENT_CLICK_DISMISS, SELECTOR_DATA_DISMISS, () => this.hide());\n      EventHandler.on(this._element, EVENT_MOUSEOVER, event => this._onInteraction(event, true));\n      EventHandler.on(this._element, EVENT_MOUSEOUT, event => this._onInteraction(event, false));\n      EventHandler.on(this._element, EVENT_FOCUSIN, event => this._onInteraction(event, true));\n      EventHandler.on(this._element, EVENT_FOCUSOUT, event => this._onInteraction(event, false));\n    }\n\n    _clearTimeout() {\n      clearTimeout(this._timeout);\n      this._timeout = null;\n    } // Static\n\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = Toast.getOrCreateInstance(this, config);\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(`No method named \"${config}\"`);\n          }\n\n          data[config](this);\n        }\n      });\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Toast to jQuery only if jQuery is present\n   */\n\n\n  defineJQueryPlugin(Toast);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): index.umd.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  var index_umd = {\n    Alert,\n    Button,\n    Carousel,\n    Collapse,\n    Dropdown,\n    Modal,\n    Offcanvas,\n    Popover,\n    ScrollSpy,\n    Tab,\n    Toast,\n    Tooltip\n  };\n\n  return index_umd;\n\n})));\n//# sourceMappingURL=bootstrap.bundle.js.map\n"
  },
  {
    "path": "src/sourceDev.WebApp/SharedThemes/litera/wwwroot/js/bootstrap.esm.js",
    "content": "/*!\n  * Bootstrap v5.0.2 (https://getbootstrap.com/)\n  * Copyright 2011-2021 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)\n  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n  */\nimport * as Popper from '@popperjs/core';\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): dom/selector-engine.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\nconst NODE_TEXT = 3;\nconst SelectorEngine = {\n  find(selector, element = document.documentElement) {\n    return [].concat(...Element.prototype.querySelectorAll.call(element, selector));\n  },\n\n  findOne(selector, element = document.documentElement) {\n    return Element.prototype.querySelector.call(element, selector);\n  },\n\n  children(element, selector) {\n    return [].concat(...element.children).filter(child => child.matches(selector));\n  },\n\n  parents(element, selector) {\n    const parents = [];\n    let ancestor = element.parentNode;\n\n    while (ancestor && ancestor.nodeType === Node.ELEMENT_NODE && ancestor.nodeType !== NODE_TEXT) {\n      if (ancestor.matches(selector)) {\n        parents.push(ancestor);\n      }\n\n      ancestor = ancestor.parentNode;\n    }\n\n    return parents;\n  },\n\n  prev(element, selector) {\n    let previous = element.previousElementSibling;\n\n    while (previous) {\n      if (previous.matches(selector)) {\n        return [previous];\n      }\n\n      previous = previous.previousElementSibling;\n    }\n\n    return [];\n  },\n\n  next(element, selector) {\n    let next = element.nextElementSibling;\n\n    while (next) {\n      if (next.matches(selector)) {\n        return [next];\n      }\n\n      next = next.nextElementSibling;\n    }\n\n    return [];\n  }\n\n};\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): util/index.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst MAX_UID = 1000000;\nconst MILLISECONDS_MULTIPLIER = 1000;\nconst TRANSITION_END = 'transitionend'; // Shoutout AngusCroll (https://goo.gl/pxwQGp)\n\nconst toType = obj => {\n  if (obj === null || obj === undefined) {\n    return `${obj}`;\n  }\n\n  return {}.toString.call(obj).match(/\\s([a-z]+)/i)[1].toLowerCase();\n};\n/**\n * --------------------------------------------------------------------------\n * Public Util Api\n * --------------------------------------------------------------------------\n */\n\n\nconst getUID = prefix => {\n  do {\n    prefix += Math.floor(Math.random() * MAX_UID);\n  } while (document.getElementById(prefix));\n\n  return prefix;\n};\n\nconst getSelector = element => {\n  let selector = element.getAttribute('data-bs-target');\n\n  if (!selector || selector === '#') {\n    let hrefAttr = element.getAttribute('href'); // The only valid content that could double as a selector are IDs or classes,\n    // so everything starting with `#` or `.`. If a \"real\" URL is used as the selector,\n    // `document.querySelector` will rightfully complain it is invalid.\n    // See https://github.com/twbs/bootstrap/issues/32273\n\n    if (!hrefAttr || !hrefAttr.includes('#') && !hrefAttr.startsWith('.')) {\n      return null;\n    } // Just in case some CMS puts out a full URL with the anchor appended\n\n\n    if (hrefAttr.includes('#') && !hrefAttr.startsWith('#')) {\n      hrefAttr = `#${hrefAttr.split('#')[1]}`;\n    }\n\n    selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : null;\n  }\n\n  return selector;\n};\n\nconst getSelectorFromElement = element => {\n  const selector = getSelector(element);\n\n  if (selector) {\n    return document.querySelector(selector) ? selector : null;\n  }\n\n  return null;\n};\n\nconst getElementFromSelector = element => {\n  const selector = getSelector(element);\n  return selector ? document.querySelector(selector) : null;\n};\n\nconst getTransitionDurationFromElement = element => {\n  if (!element) {\n    return 0;\n  } // Get transition-duration of the element\n\n\n  let {\n    transitionDuration,\n    transitionDelay\n  } = window.getComputedStyle(element);\n  const floatTransitionDuration = Number.parseFloat(transitionDuration);\n  const floatTransitionDelay = Number.parseFloat(transitionDelay); // Return 0 if element or transition duration is not found\n\n  if (!floatTransitionDuration && !floatTransitionDelay) {\n    return 0;\n  } // If multiple durations are defined, take the first\n\n\n  transitionDuration = transitionDuration.split(',')[0];\n  transitionDelay = transitionDelay.split(',')[0];\n  return (Number.parseFloat(transitionDuration) + Number.parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER;\n};\n\nconst triggerTransitionEnd = element => {\n  element.dispatchEvent(new Event(TRANSITION_END));\n};\n\nconst isElement = obj => {\n  if (!obj || typeof obj !== 'object') {\n    return false;\n  }\n\n  if (typeof obj.jquery !== 'undefined') {\n    obj = obj[0];\n  }\n\n  return typeof obj.nodeType !== 'undefined';\n};\n\nconst getElement = obj => {\n  if (isElement(obj)) {\n    // it's a jQuery object or a node element\n    return obj.jquery ? obj[0] : obj;\n  }\n\n  if (typeof obj === 'string' && obj.length > 0) {\n    return SelectorEngine.findOne(obj);\n  }\n\n  return null;\n};\n\nconst typeCheckConfig = (componentName, config, configTypes) => {\n  Object.keys(configTypes).forEach(property => {\n    const expectedTypes = configTypes[property];\n    const value = config[property];\n    const valueType = value && isElement(value) ? 'element' : toType(value);\n\n    if (!new RegExp(expectedTypes).test(valueType)) {\n      throw new TypeError(`${componentName.toUpperCase()}: Option \"${property}\" provided type \"${valueType}\" but expected type \"${expectedTypes}\".`);\n    }\n  });\n};\n\nconst isVisible = element => {\n  if (!isElement(element) || element.getClientRects().length === 0) {\n    return false;\n  }\n\n  return getComputedStyle(element).getPropertyValue('visibility') === 'visible';\n};\n\nconst isDisabled = element => {\n  if (!element || element.nodeType !== Node.ELEMENT_NODE) {\n    return true;\n  }\n\n  if (element.classList.contains('disabled')) {\n    return true;\n  }\n\n  if (typeof element.disabled !== 'undefined') {\n    return element.disabled;\n  }\n\n  return element.hasAttribute('disabled') && element.getAttribute('disabled') !== 'false';\n};\n\nconst findShadowRoot = element => {\n  if (!document.documentElement.attachShadow) {\n    return null;\n  } // Can find the shadow root otherwise it'll return the document\n\n\n  if (typeof element.getRootNode === 'function') {\n    const root = element.getRootNode();\n    return root instanceof ShadowRoot ? root : null;\n  }\n\n  if (element instanceof ShadowRoot) {\n    return element;\n  } // when we don't find a shadow root\n\n\n  if (!element.parentNode) {\n    return null;\n  }\n\n  return findShadowRoot(element.parentNode);\n};\n\nconst noop = () => {};\n\nconst reflow = element => element.offsetHeight;\n\nconst getjQuery = () => {\n  const {\n    jQuery\n  } = window;\n\n  if (jQuery && !document.body.hasAttribute('data-bs-no-jquery')) {\n    return jQuery;\n  }\n\n  return null;\n};\n\nconst DOMContentLoadedCallbacks = [];\n\nconst onDOMContentLoaded = callback => {\n  if (document.readyState === 'loading') {\n    // add listener on the first call when the document is in loading state\n    if (!DOMContentLoadedCallbacks.length) {\n      document.addEventListener('DOMContentLoaded', () => {\n        DOMContentLoadedCallbacks.forEach(callback => callback());\n      });\n    }\n\n    DOMContentLoadedCallbacks.push(callback);\n  } else {\n    callback();\n  }\n};\n\nconst isRTL = () => document.documentElement.dir === 'rtl';\n\nconst defineJQueryPlugin = plugin => {\n  onDOMContentLoaded(() => {\n    const $ = getjQuery();\n    /* istanbul ignore if */\n\n    if ($) {\n      const name = plugin.NAME;\n      const JQUERY_NO_CONFLICT = $.fn[name];\n      $.fn[name] = plugin.jQueryInterface;\n      $.fn[name].Constructor = plugin;\n\n      $.fn[name].noConflict = () => {\n        $.fn[name] = JQUERY_NO_CONFLICT;\n        return plugin.jQueryInterface;\n      };\n    }\n  });\n};\n\nconst execute = callback => {\n  if (typeof callback === 'function') {\n    callback();\n  }\n};\n\nconst executeAfterTransition = (callback, transitionElement, waitForTransition = true) => {\n  if (!waitForTransition) {\n    execute(callback);\n    return;\n  }\n\n  const durationPadding = 5;\n  const emulatedDuration = getTransitionDurationFromElement(transitionElement) + durationPadding;\n  let called = false;\n\n  const handler = ({\n    target\n  }) => {\n    if (target !== transitionElement) {\n      return;\n    }\n\n    called = true;\n    transitionElement.removeEventListener(TRANSITION_END, handler);\n    execute(callback);\n  };\n\n  transitionElement.addEventListener(TRANSITION_END, handler);\n  setTimeout(() => {\n    if (!called) {\n      triggerTransitionEnd(transitionElement);\n    }\n  }, emulatedDuration);\n};\n/**\n * Return the previous/next element of a list.\n *\n * @param {array} list    The list of elements\n * @param activeElement   The active element\n * @param shouldGetNext   Choose to get next or previous element\n * @param isCycleAllowed\n * @return {Element|elem} The proper element\n */\n\n\nconst getNextActiveElement = (list, activeElement, shouldGetNext, isCycleAllowed) => {\n  let index = list.indexOf(activeElement); // if the element does not exist in the list return an element depending on the direction and if cycle is allowed\n\n  if (index === -1) {\n    return list[!shouldGetNext && isCycleAllowed ? list.length - 1 : 0];\n  }\n\n  const listLength = list.length;\n  index += shouldGetNext ? 1 : -1;\n\n  if (isCycleAllowed) {\n    index = (index + listLength) % listLength;\n  }\n\n  return list[Math.max(0, Math.min(index, listLength - 1))];\n};\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): dom/event-handler.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst namespaceRegex = /[^.]*(?=\\..*)\\.|.*/;\nconst stripNameRegex = /\\..*/;\nconst stripUidRegex = /::\\d+$/;\nconst eventRegistry = {}; // Events storage\n\nlet uidEvent = 1;\nconst customEvents = {\n  mouseenter: 'mouseover',\n  mouseleave: 'mouseout'\n};\nconst customEventsRegex = /^(mouseenter|mouseleave)/i;\nconst nativeEvents = new Set(['click', 'dblclick', 'mouseup', 'mousedown', 'contextmenu', 'mousewheel', 'DOMMouseScroll', 'mouseover', 'mouseout', 'mousemove', 'selectstart', 'selectend', 'keydown', 'keypress', 'keyup', 'orientationchange', 'touchstart', 'touchmove', 'touchend', 'touchcancel', 'pointerdown', 'pointermove', 'pointerup', 'pointerleave', 'pointercancel', 'gesturestart', 'gesturechange', 'gestureend', 'focus', 'blur', 'change', 'reset', 'select', 'submit', 'focusin', 'focusout', 'load', 'unload', 'beforeunload', 'resize', 'move', 'DOMContentLoaded', 'readystatechange', 'error', 'abort', 'scroll']);\n/**\n * ------------------------------------------------------------------------\n * Private methods\n * ------------------------------------------------------------------------\n */\n\nfunction getUidEvent(element, uid) {\n  return uid && `${uid}::${uidEvent++}` || element.uidEvent || uidEvent++;\n}\n\nfunction getEvent(element) {\n  const uid = getUidEvent(element);\n  element.uidEvent = uid;\n  eventRegistry[uid] = eventRegistry[uid] || {};\n  return eventRegistry[uid];\n}\n\nfunction bootstrapHandler(element, fn) {\n  return function handler(event) {\n    event.delegateTarget = element;\n\n    if (handler.oneOff) {\n      EventHandler.off(element, event.type, fn);\n    }\n\n    return fn.apply(element, [event]);\n  };\n}\n\nfunction bootstrapDelegationHandler(element, selector, fn) {\n  return function handler(event) {\n    const domElements = element.querySelectorAll(selector);\n\n    for (let {\n      target\n    } = event; target && target !== this; target = target.parentNode) {\n      for (let i = domElements.length; i--;) {\n        if (domElements[i] === target) {\n          event.delegateTarget = target;\n\n          if (handler.oneOff) {\n            // eslint-disable-next-line unicorn/consistent-destructuring\n            EventHandler.off(element, event.type, selector, fn);\n          }\n\n          return fn.apply(target, [event]);\n        }\n      }\n    } // To please ESLint\n\n\n    return null;\n  };\n}\n\nfunction findHandler(events, handler, delegationSelector = null) {\n  const uidEventList = Object.keys(events);\n\n  for (let i = 0, len = uidEventList.length; i < len; i++) {\n    const event = events[uidEventList[i]];\n\n    if (event.originalHandler === handler && event.delegationSelector === delegationSelector) {\n      return event;\n    }\n  }\n\n  return null;\n}\n\nfunction normalizeParams(originalTypeEvent, handler, delegationFn) {\n  const delegation = typeof handler === 'string';\n  const originalHandler = delegation ? delegationFn : handler;\n  let typeEvent = getTypeEvent(originalTypeEvent);\n  const isNative = nativeEvents.has(typeEvent);\n\n  if (!isNative) {\n    typeEvent = originalTypeEvent;\n  }\n\n  return [delegation, originalHandler, typeEvent];\n}\n\nfunction addHandler(element, originalTypeEvent, handler, delegationFn, oneOff) {\n  if (typeof originalTypeEvent !== 'string' || !element) {\n    return;\n  }\n\n  if (!handler) {\n    handler = delegationFn;\n    delegationFn = null;\n  } // in case of mouseenter or mouseleave wrap the handler within a function that checks for its DOM position\n  // this prevents the handler from being dispatched the same way as mouseover or mouseout does\n\n\n  if (customEventsRegex.test(originalTypeEvent)) {\n    const wrapFn = fn => {\n      return function (event) {\n        if (!event.relatedTarget || event.relatedTarget !== event.delegateTarget && !event.delegateTarget.contains(event.relatedTarget)) {\n          return fn.call(this, event);\n        }\n      };\n    };\n\n    if (delegationFn) {\n      delegationFn = wrapFn(delegationFn);\n    } else {\n      handler = wrapFn(handler);\n    }\n  }\n\n  const [delegation, originalHandler, typeEvent] = normalizeParams(originalTypeEvent, handler, delegationFn);\n  const events = getEvent(element);\n  const handlers = events[typeEvent] || (events[typeEvent] = {});\n  const previousFn = findHandler(handlers, originalHandler, delegation ? handler : null);\n\n  if (previousFn) {\n    previousFn.oneOff = previousFn.oneOff && oneOff;\n    return;\n  }\n\n  const uid = getUidEvent(originalHandler, originalTypeEvent.replace(namespaceRegex, ''));\n  const fn = delegation ? bootstrapDelegationHandler(element, handler, delegationFn) : bootstrapHandler(element, handler);\n  fn.delegationSelector = delegation ? handler : null;\n  fn.originalHandler = originalHandler;\n  fn.oneOff = oneOff;\n  fn.uidEvent = uid;\n  handlers[uid] = fn;\n  element.addEventListener(typeEvent, fn, delegation);\n}\n\nfunction removeHandler(element, events, typeEvent, handler, delegationSelector) {\n  const fn = findHandler(events[typeEvent], handler, delegationSelector);\n\n  if (!fn) {\n    return;\n  }\n\n  element.removeEventListener(typeEvent, fn, Boolean(delegationSelector));\n  delete events[typeEvent][fn.uidEvent];\n}\n\nfunction removeNamespacedHandlers(element, events, typeEvent, namespace) {\n  const storeElementEvent = events[typeEvent] || {};\n  Object.keys(storeElementEvent).forEach(handlerKey => {\n    if (handlerKey.includes(namespace)) {\n      const event = storeElementEvent[handlerKey];\n      removeHandler(element, events, typeEvent, event.originalHandler, event.delegationSelector);\n    }\n  });\n}\n\nfunction getTypeEvent(event) {\n  // allow to get the native events from namespaced events ('click.bs.button' --> 'click')\n  event = event.replace(stripNameRegex, '');\n  return customEvents[event] || event;\n}\n\nconst EventHandler = {\n  on(element, event, handler, delegationFn) {\n    addHandler(element, event, handler, delegationFn, false);\n  },\n\n  one(element, event, handler, delegationFn) {\n    addHandler(element, event, handler, delegationFn, true);\n  },\n\n  off(element, originalTypeEvent, handler, delegationFn) {\n    if (typeof originalTypeEvent !== 'string' || !element) {\n      return;\n    }\n\n    const [delegation, originalHandler, typeEvent] = normalizeParams(originalTypeEvent, handler, delegationFn);\n    const inNamespace = typeEvent !== originalTypeEvent;\n    const events = getEvent(element);\n    const isNamespace = originalTypeEvent.startsWith('.');\n\n    if (typeof originalHandler !== 'undefined') {\n      // Simplest case: handler is passed, remove that listener ONLY.\n      if (!events || !events[typeEvent]) {\n        return;\n      }\n\n      removeHandler(element, events, typeEvent, originalHandler, delegation ? handler : null);\n      return;\n    }\n\n    if (isNamespace) {\n      Object.keys(events).forEach(elementEvent => {\n        removeNamespacedHandlers(element, events, elementEvent, originalTypeEvent.slice(1));\n      });\n    }\n\n    const storeElementEvent = events[typeEvent] || {};\n    Object.keys(storeElementEvent).forEach(keyHandlers => {\n      const handlerKey = keyHandlers.replace(stripUidRegex, '');\n\n      if (!inNamespace || originalTypeEvent.includes(handlerKey)) {\n        const event = storeElementEvent[keyHandlers];\n        removeHandler(element, events, typeEvent, event.originalHandler, event.delegationSelector);\n      }\n    });\n  },\n\n  trigger(element, event, args) {\n    if (typeof event !== 'string' || !element) {\n      return null;\n    }\n\n    const $ = getjQuery();\n    const typeEvent = getTypeEvent(event);\n    const inNamespace = event !== typeEvent;\n    const isNative = nativeEvents.has(typeEvent);\n    let jQueryEvent;\n    let bubbles = true;\n    let nativeDispatch = true;\n    let defaultPrevented = false;\n    let evt = null;\n\n    if (inNamespace && $) {\n      jQueryEvent = $.Event(event, args);\n      $(element).trigger(jQueryEvent);\n      bubbles = !jQueryEvent.isPropagationStopped();\n      nativeDispatch = !jQueryEvent.isImmediatePropagationStopped();\n      defaultPrevented = jQueryEvent.isDefaultPrevented();\n    }\n\n    if (isNative) {\n      evt = document.createEvent('HTMLEvents');\n      evt.initEvent(typeEvent, bubbles, true);\n    } else {\n      evt = new CustomEvent(event, {\n        bubbles,\n        cancelable: true\n      });\n    } // merge custom information in our event\n\n\n    if (typeof args !== 'undefined') {\n      Object.keys(args).forEach(key => {\n        Object.defineProperty(evt, key, {\n          get() {\n            return args[key];\n          }\n\n        });\n      });\n    }\n\n    if (defaultPrevented) {\n      evt.preventDefault();\n    }\n\n    if (nativeDispatch) {\n      element.dispatchEvent(evt);\n    }\n\n    if (evt.defaultPrevented && typeof jQueryEvent !== 'undefined') {\n      jQueryEvent.preventDefault();\n    }\n\n    return evt;\n  }\n\n};\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): dom/data.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\nconst elementMap = new Map();\nvar Data = {\n  set(element, key, instance) {\n    if (!elementMap.has(element)) {\n      elementMap.set(element, new Map());\n    }\n\n    const instanceMap = elementMap.get(element); // make it clear we only want one instance per element\n    // can be removed later when multiple key/instances are fine to be used\n\n    if (!instanceMap.has(key) && instanceMap.size !== 0) {\n      // eslint-disable-next-line no-console\n      console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(instanceMap.keys())[0]}.`);\n      return;\n    }\n\n    instanceMap.set(key, instance);\n  },\n\n  get(element, key) {\n    if (elementMap.has(element)) {\n      return elementMap.get(element).get(key) || null;\n    }\n\n    return null;\n  },\n\n  remove(element, key) {\n    if (!elementMap.has(element)) {\n      return;\n    }\n\n    const instanceMap = elementMap.get(element);\n    instanceMap.delete(key); // free up element references if there are no instances left for an element\n\n    if (instanceMap.size === 0) {\n      elementMap.delete(element);\n    }\n  }\n\n};\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): base-component.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst VERSION = '5.0.2';\n\nclass BaseComponent {\n  constructor(element) {\n    element = getElement(element);\n\n    if (!element) {\n      return;\n    }\n\n    this._element = element;\n    Data.set(this._element, this.constructor.DATA_KEY, this);\n  }\n\n  dispose() {\n    Data.remove(this._element, this.constructor.DATA_KEY);\n    EventHandler.off(this._element, this.constructor.EVENT_KEY);\n    Object.getOwnPropertyNames(this).forEach(propertyName => {\n      this[propertyName] = null;\n    });\n  }\n\n  _queueCallback(callback, element, isAnimated = true) {\n    executeAfterTransition(callback, element, isAnimated);\n  }\n  /** Static */\n\n\n  static getInstance(element) {\n    return Data.get(element, this.DATA_KEY);\n  }\n\n  static getOrCreateInstance(element, config = {}) {\n    return this.getInstance(element) || new this(element, typeof config === 'object' ? config : null);\n  }\n\n  static get VERSION() {\n    return VERSION;\n  }\n\n  static get NAME() {\n    throw new Error('You have to implement the static method \"NAME\", for each component!');\n  }\n\n  static get DATA_KEY() {\n    return `bs.${this.NAME}`;\n  }\n\n  static get EVENT_KEY() {\n    return `.${this.DATA_KEY}`;\n  }\n\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): alert.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$c = 'alert';\nconst DATA_KEY$b = 'bs.alert';\nconst EVENT_KEY$b = `.${DATA_KEY$b}`;\nconst DATA_API_KEY$8 = '.data-api';\nconst SELECTOR_DISMISS = '[data-bs-dismiss=\"alert\"]';\nconst EVENT_CLOSE = `close${EVENT_KEY$b}`;\nconst EVENT_CLOSED = `closed${EVENT_KEY$b}`;\nconst EVENT_CLICK_DATA_API$7 = `click${EVENT_KEY$b}${DATA_API_KEY$8}`;\nconst CLASS_NAME_ALERT = 'alert';\nconst CLASS_NAME_FADE$6 = 'fade';\nconst CLASS_NAME_SHOW$9 = 'show';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Alert extends BaseComponent {\n  // Getters\n  static get NAME() {\n    return NAME$c;\n  } // Public\n\n\n  close(element) {\n    const rootElement = element ? this._getRootElement(element) : this._element;\n\n    const customEvent = this._triggerCloseEvent(rootElement);\n\n    if (customEvent === null || customEvent.defaultPrevented) {\n      return;\n    }\n\n    this._removeElement(rootElement);\n  } // Private\n\n\n  _getRootElement(element) {\n    return getElementFromSelector(element) || element.closest(`.${CLASS_NAME_ALERT}`);\n  }\n\n  _triggerCloseEvent(element) {\n    return EventHandler.trigger(element, EVENT_CLOSE);\n  }\n\n  _removeElement(element) {\n    element.classList.remove(CLASS_NAME_SHOW$9);\n    const isAnimated = element.classList.contains(CLASS_NAME_FADE$6);\n\n    this._queueCallback(() => this._destroyElement(element), element, isAnimated);\n  }\n\n  _destroyElement(element) {\n    element.remove();\n    EventHandler.trigger(element, EVENT_CLOSED);\n  } // Static\n\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Alert.getOrCreateInstance(this);\n\n      if (config === 'close') {\n        data[config](this);\n      }\n    });\n  }\n\n  static handleDismiss(alertInstance) {\n    return function (event) {\n      if (event) {\n        event.preventDefault();\n      }\n\n      alertInstance.close(this);\n    };\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$7, SELECTOR_DISMISS, Alert.handleDismiss(new Alert()));\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Alert to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Alert);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): button.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$b = 'button';\nconst DATA_KEY$a = 'bs.button';\nconst EVENT_KEY$a = `.${DATA_KEY$a}`;\nconst DATA_API_KEY$7 = '.data-api';\nconst CLASS_NAME_ACTIVE$3 = 'active';\nconst SELECTOR_DATA_TOGGLE$5 = '[data-bs-toggle=\"button\"]';\nconst EVENT_CLICK_DATA_API$6 = `click${EVENT_KEY$a}${DATA_API_KEY$7}`;\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Button extends BaseComponent {\n  // Getters\n  static get NAME() {\n    return NAME$b;\n  } // Public\n\n\n  toggle() {\n    // Toggle class and sync the `aria-pressed` attribute with the return value of the `.toggle()` method\n    this._element.setAttribute('aria-pressed', this._element.classList.toggle(CLASS_NAME_ACTIVE$3));\n  } // Static\n\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Button.getOrCreateInstance(this);\n\n      if (config === 'toggle') {\n        data[config]();\n      }\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$6, SELECTOR_DATA_TOGGLE$5, event => {\n  event.preventDefault();\n  const button = event.target.closest(SELECTOR_DATA_TOGGLE$5);\n  const data = Button.getOrCreateInstance(button);\n  data.toggle();\n});\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Button to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Button);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): dom/manipulator.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\nfunction normalizeData(val) {\n  if (val === 'true') {\n    return true;\n  }\n\n  if (val === 'false') {\n    return false;\n  }\n\n  if (val === Number(val).toString()) {\n    return Number(val);\n  }\n\n  if (val === '' || val === 'null') {\n    return null;\n  }\n\n  return val;\n}\n\nfunction normalizeDataKey(key) {\n  return key.replace(/[A-Z]/g, chr => `-${chr.toLowerCase()}`);\n}\n\nconst Manipulator = {\n  setDataAttribute(element, key, value) {\n    element.setAttribute(`data-bs-${normalizeDataKey(key)}`, value);\n  },\n\n  removeDataAttribute(element, key) {\n    element.removeAttribute(`data-bs-${normalizeDataKey(key)}`);\n  },\n\n  getDataAttributes(element) {\n    if (!element) {\n      return {};\n    }\n\n    const attributes = {};\n    Object.keys(element.dataset).filter(key => key.startsWith('bs')).forEach(key => {\n      let pureKey = key.replace(/^bs/, '');\n      pureKey = pureKey.charAt(0).toLowerCase() + pureKey.slice(1, pureKey.length);\n      attributes[pureKey] = normalizeData(element.dataset[key]);\n    });\n    return attributes;\n  },\n\n  getDataAttribute(element, key) {\n    return normalizeData(element.getAttribute(`data-bs-${normalizeDataKey(key)}`));\n  },\n\n  offset(element) {\n    const rect = element.getBoundingClientRect();\n    return {\n      top: rect.top + document.body.scrollTop,\n      left: rect.left + document.body.scrollLeft\n    };\n  },\n\n  position(element) {\n    return {\n      top: element.offsetTop,\n      left: element.offsetLeft\n    };\n  }\n\n};\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): carousel.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$a = 'carousel';\nconst DATA_KEY$9 = 'bs.carousel';\nconst EVENT_KEY$9 = `.${DATA_KEY$9}`;\nconst DATA_API_KEY$6 = '.data-api';\nconst ARROW_LEFT_KEY = 'ArrowLeft';\nconst ARROW_RIGHT_KEY = 'ArrowRight';\nconst TOUCHEVENT_COMPAT_WAIT = 500; // Time for mouse compat events to fire after touch\n\nconst SWIPE_THRESHOLD = 40;\nconst Default$9 = {\n  interval: 5000,\n  keyboard: true,\n  slide: false,\n  pause: 'hover',\n  wrap: true,\n  touch: true\n};\nconst DefaultType$9 = {\n  interval: '(number|boolean)',\n  keyboard: 'boolean',\n  slide: '(boolean|string)',\n  pause: '(string|boolean)',\n  wrap: 'boolean',\n  touch: 'boolean'\n};\nconst ORDER_NEXT = 'next';\nconst ORDER_PREV = 'prev';\nconst DIRECTION_LEFT = 'left';\nconst DIRECTION_RIGHT = 'right';\nconst KEY_TO_DIRECTION = {\n  [ARROW_LEFT_KEY]: DIRECTION_RIGHT,\n  [ARROW_RIGHT_KEY]: DIRECTION_LEFT\n};\nconst EVENT_SLIDE = `slide${EVENT_KEY$9}`;\nconst EVENT_SLID = `slid${EVENT_KEY$9}`;\nconst EVENT_KEYDOWN = `keydown${EVENT_KEY$9}`;\nconst EVENT_MOUSEENTER = `mouseenter${EVENT_KEY$9}`;\nconst EVENT_MOUSELEAVE = `mouseleave${EVENT_KEY$9}`;\nconst EVENT_TOUCHSTART = `touchstart${EVENT_KEY$9}`;\nconst EVENT_TOUCHMOVE = `touchmove${EVENT_KEY$9}`;\nconst EVENT_TOUCHEND = `touchend${EVENT_KEY$9}`;\nconst EVENT_POINTERDOWN = `pointerdown${EVENT_KEY$9}`;\nconst EVENT_POINTERUP = `pointerup${EVENT_KEY$9}`;\nconst EVENT_DRAG_START = `dragstart${EVENT_KEY$9}`;\nconst EVENT_LOAD_DATA_API$2 = `load${EVENT_KEY$9}${DATA_API_KEY$6}`;\nconst EVENT_CLICK_DATA_API$5 = `click${EVENT_KEY$9}${DATA_API_KEY$6}`;\nconst CLASS_NAME_CAROUSEL = 'carousel';\nconst CLASS_NAME_ACTIVE$2 = 'active';\nconst CLASS_NAME_SLIDE = 'slide';\nconst CLASS_NAME_END = 'carousel-item-end';\nconst CLASS_NAME_START = 'carousel-item-start';\nconst CLASS_NAME_NEXT = 'carousel-item-next';\nconst CLASS_NAME_PREV = 'carousel-item-prev';\nconst CLASS_NAME_POINTER_EVENT = 'pointer-event';\nconst SELECTOR_ACTIVE$1 = '.active';\nconst SELECTOR_ACTIVE_ITEM = '.active.carousel-item';\nconst SELECTOR_ITEM = '.carousel-item';\nconst SELECTOR_ITEM_IMG = '.carousel-item img';\nconst SELECTOR_NEXT_PREV = '.carousel-item-next, .carousel-item-prev';\nconst SELECTOR_INDICATORS = '.carousel-indicators';\nconst SELECTOR_INDICATOR = '[data-bs-target]';\nconst SELECTOR_DATA_SLIDE = '[data-bs-slide], [data-bs-slide-to]';\nconst SELECTOR_DATA_RIDE = '[data-bs-ride=\"carousel\"]';\nconst POINTER_TYPE_TOUCH = 'touch';\nconst POINTER_TYPE_PEN = 'pen';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Carousel extends BaseComponent {\n  constructor(element, config) {\n    super(element);\n    this._items = null;\n    this._interval = null;\n    this._activeElement = null;\n    this._isPaused = false;\n    this._isSliding = false;\n    this.touchTimeout = null;\n    this.touchStartX = 0;\n    this.touchDeltaX = 0;\n    this._config = this._getConfig(config);\n    this._indicatorsElement = SelectorEngine.findOne(SELECTOR_INDICATORS, this._element);\n    this._touchSupported = 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0;\n    this._pointerEvent = Boolean(window.PointerEvent);\n\n    this._addEventListeners();\n  } // Getters\n\n\n  static get Default() {\n    return Default$9;\n  }\n\n  static get NAME() {\n    return NAME$a;\n  } // Public\n\n\n  next() {\n    this._slide(ORDER_NEXT);\n  }\n\n  nextWhenVisible() {\n    // Don't call next when the page isn't visible\n    // or the carousel or its parent isn't visible\n    if (!document.hidden && isVisible(this._element)) {\n      this.next();\n    }\n  }\n\n  prev() {\n    this._slide(ORDER_PREV);\n  }\n\n  pause(event) {\n    if (!event) {\n      this._isPaused = true;\n    }\n\n    if (SelectorEngine.findOne(SELECTOR_NEXT_PREV, this._element)) {\n      triggerTransitionEnd(this._element);\n      this.cycle(true);\n    }\n\n    clearInterval(this._interval);\n    this._interval = null;\n  }\n\n  cycle(event) {\n    if (!event) {\n      this._isPaused = false;\n    }\n\n    if (this._interval) {\n      clearInterval(this._interval);\n      this._interval = null;\n    }\n\n    if (this._config && this._config.interval && !this._isPaused) {\n      this._updateInterval();\n\n      this._interval = setInterval((document.visibilityState ? this.nextWhenVisible : this.next).bind(this), this._config.interval);\n    }\n  }\n\n  to(index) {\n    this._activeElement = SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element);\n\n    const activeIndex = this._getItemIndex(this._activeElement);\n\n    if (index > this._items.length - 1 || index < 0) {\n      return;\n    }\n\n    if (this._isSliding) {\n      EventHandler.one(this._element, EVENT_SLID, () => this.to(index));\n      return;\n    }\n\n    if (activeIndex === index) {\n      this.pause();\n      this.cycle();\n      return;\n    }\n\n    const order = index > activeIndex ? ORDER_NEXT : ORDER_PREV;\n\n    this._slide(order, this._items[index]);\n  } // Private\n\n\n  _getConfig(config) {\n    config = { ...Default$9,\n      ...Manipulator.getDataAttributes(this._element),\n      ...(typeof config === 'object' ? config : {})\n    };\n    typeCheckConfig(NAME$a, config, DefaultType$9);\n    return config;\n  }\n\n  _handleSwipe() {\n    const absDeltax = Math.abs(this.touchDeltaX);\n\n    if (absDeltax <= SWIPE_THRESHOLD) {\n      return;\n    }\n\n    const direction = absDeltax / this.touchDeltaX;\n    this.touchDeltaX = 0;\n\n    if (!direction) {\n      return;\n    }\n\n    this._slide(direction > 0 ? DIRECTION_RIGHT : DIRECTION_LEFT);\n  }\n\n  _addEventListeners() {\n    if (this._config.keyboard) {\n      EventHandler.on(this._element, EVENT_KEYDOWN, event => this._keydown(event));\n    }\n\n    if (this._config.pause === 'hover') {\n      EventHandler.on(this._element, EVENT_MOUSEENTER, event => this.pause(event));\n      EventHandler.on(this._element, EVENT_MOUSELEAVE, event => this.cycle(event));\n    }\n\n    if (this._config.touch && this._touchSupported) {\n      this._addTouchEventListeners();\n    }\n  }\n\n  _addTouchEventListeners() {\n    const start = event => {\n      if (this._pointerEvent && (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH)) {\n        this.touchStartX = event.clientX;\n      } else if (!this._pointerEvent) {\n        this.touchStartX = event.touches[0].clientX;\n      }\n    };\n\n    const move = event => {\n      // ensure swiping with one touch and not pinching\n      this.touchDeltaX = event.touches && event.touches.length > 1 ? 0 : event.touches[0].clientX - this.touchStartX;\n    };\n\n    const end = event => {\n      if (this._pointerEvent && (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH)) {\n        this.touchDeltaX = event.clientX - this.touchStartX;\n      }\n\n      this._handleSwipe();\n\n      if (this._config.pause === 'hover') {\n        // If it's a touch-enabled device, mouseenter/leave are fired as\n        // part of the mouse compatibility events on first tap - the carousel\n        // would stop cycling until user tapped out of it;\n        // here, we listen for touchend, explicitly pause the carousel\n        // (as if it's the second time we tap on it, mouseenter compat event\n        // is NOT fired) and after a timeout (to allow for mouse compatibility\n        // events to fire) we explicitly restart cycling\n        this.pause();\n\n        if (this.touchTimeout) {\n          clearTimeout(this.touchTimeout);\n        }\n\n        this.touchTimeout = setTimeout(event => this.cycle(event), TOUCHEVENT_COMPAT_WAIT + this._config.interval);\n      }\n    };\n\n    SelectorEngine.find(SELECTOR_ITEM_IMG, this._element).forEach(itemImg => {\n      EventHandler.on(itemImg, EVENT_DRAG_START, e => e.preventDefault());\n    });\n\n    if (this._pointerEvent) {\n      EventHandler.on(this._element, EVENT_POINTERDOWN, event => start(event));\n      EventHandler.on(this._element, EVENT_POINTERUP, event => end(event));\n\n      this._element.classList.add(CLASS_NAME_POINTER_EVENT);\n    } else {\n      EventHandler.on(this._element, EVENT_TOUCHSTART, event => start(event));\n      EventHandler.on(this._element, EVENT_TOUCHMOVE, event => move(event));\n      EventHandler.on(this._element, EVENT_TOUCHEND, event => end(event));\n    }\n  }\n\n  _keydown(event) {\n    if (/input|textarea/i.test(event.target.tagName)) {\n      return;\n    }\n\n    const direction = KEY_TO_DIRECTION[event.key];\n\n    if (direction) {\n      event.preventDefault();\n\n      this._slide(direction);\n    }\n  }\n\n  _getItemIndex(element) {\n    this._items = element && element.parentNode ? SelectorEngine.find(SELECTOR_ITEM, element.parentNode) : [];\n    return this._items.indexOf(element);\n  }\n\n  _getItemByOrder(order, activeElement) {\n    const isNext = order === ORDER_NEXT;\n    return getNextActiveElement(this._items, activeElement, isNext, this._config.wrap);\n  }\n\n  _triggerSlideEvent(relatedTarget, eventDirectionName) {\n    const targetIndex = this._getItemIndex(relatedTarget);\n\n    const fromIndex = this._getItemIndex(SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element));\n\n    return EventHandler.trigger(this._element, EVENT_SLIDE, {\n      relatedTarget,\n      direction: eventDirectionName,\n      from: fromIndex,\n      to: targetIndex\n    });\n  }\n\n  _setActiveIndicatorElement(element) {\n    if (this._indicatorsElement) {\n      const activeIndicator = SelectorEngine.findOne(SELECTOR_ACTIVE$1, this._indicatorsElement);\n      activeIndicator.classList.remove(CLASS_NAME_ACTIVE$2);\n      activeIndicator.removeAttribute('aria-current');\n      const indicators = SelectorEngine.find(SELECTOR_INDICATOR, this._indicatorsElement);\n\n      for (let i = 0; i < indicators.length; i++) {\n        if (Number.parseInt(indicators[i].getAttribute('data-bs-slide-to'), 10) === this._getItemIndex(element)) {\n          indicators[i].classList.add(CLASS_NAME_ACTIVE$2);\n          indicators[i].setAttribute('aria-current', 'true');\n          break;\n        }\n      }\n    }\n  }\n\n  _updateInterval() {\n    const element = this._activeElement || SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element);\n\n    if (!element) {\n      return;\n    }\n\n    const elementInterval = Number.parseInt(element.getAttribute('data-bs-interval'), 10);\n\n    if (elementInterval) {\n      this._config.defaultInterval = this._config.defaultInterval || this._config.interval;\n      this._config.interval = elementInterval;\n    } else {\n      this._config.interval = this._config.defaultInterval || this._config.interval;\n    }\n  }\n\n  _slide(directionOrOrder, element) {\n    const order = this._directionToOrder(directionOrOrder);\n\n    const activeElement = SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element);\n\n    const activeElementIndex = this._getItemIndex(activeElement);\n\n    const nextElement = element || this._getItemByOrder(order, activeElement);\n\n    const nextElementIndex = this._getItemIndex(nextElement);\n\n    const isCycling = Boolean(this._interval);\n    const isNext = order === ORDER_NEXT;\n    const directionalClassName = isNext ? CLASS_NAME_START : CLASS_NAME_END;\n    const orderClassName = isNext ? CLASS_NAME_NEXT : CLASS_NAME_PREV;\n\n    const eventDirectionName = this._orderToDirection(order);\n\n    if (nextElement && nextElement.classList.contains(CLASS_NAME_ACTIVE$2)) {\n      this._isSliding = false;\n      return;\n    }\n\n    if (this._isSliding) {\n      return;\n    }\n\n    const slideEvent = this._triggerSlideEvent(nextElement, eventDirectionName);\n\n    if (slideEvent.defaultPrevented) {\n      return;\n    }\n\n    if (!activeElement || !nextElement) {\n      // Some weirdness is happening, so we bail\n      return;\n    }\n\n    this._isSliding = true;\n\n    if (isCycling) {\n      this.pause();\n    }\n\n    this._setActiveIndicatorElement(nextElement);\n\n    this._activeElement = nextElement;\n\n    const triggerSlidEvent = () => {\n      EventHandler.trigger(this._element, EVENT_SLID, {\n        relatedTarget: nextElement,\n        direction: eventDirectionName,\n        from: activeElementIndex,\n        to: nextElementIndex\n      });\n    };\n\n    if (this._element.classList.contains(CLASS_NAME_SLIDE)) {\n      nextElement.classList.add(orderClassName);\n      reflow(nextElement);\n      activeElement.classList.add(directionalClassName);\n      nextElement.classList.add(directionalClassName);\n\n      const completeCallBack = () => {\n        nextElement.classList.remove(directionalClassName, orderClassName);\n        nextElement.classList.add(CLASS_NAME_ACTIVE$2);\n        activeElement.classList.remove(CLASS_NAME_ACTIVE$2, orderClassName, directionalClassName);\n        this._isSliding = false;\n        setTimeout(triggerSlidEvent, 0);\n      };\n\n      this._queueCallback(completeCallBack, activeElement, true);\n    } else {\n      activeElement.classList.remove(CLASS_NAME_ACTIVE$2);\n      nextElement.classList.add(CLASS_NAME_ACTIVE$2);\n      this._isSliding = false;\n      triggerSlidEvent();\n    }\n\n    if (isCycling) {\n      this.cycle();\n    }\n  }\n\n  _directionToOrder(direction) {\n    if (![DIRECTION_RIGHT, DIRECTION_LEFT].includes(direction)) {\n      return direction;\n    }\n\n    if (isRTL()) {\n      return direction === DIRECTION_LEFT ? ORDER_PREV : ORDER_NEXT;\n    }\n\n    return direction === DIRECTION_LEFT ? ORDER_NEXT : ORDER_PREV;\n  }\n\n  _orderToDirection(order) {\n    if (![ORDER_NEXT, ORDER_PREV].includes(order)) {\n      return order;\n    }\n\n    if (isRTL()) {\n      return order === ORDER_PREV ? DIRECTION_LEFT : DIRECTION_RIGHT;\n    }\n\n    return order === ORDER_PREV ? DIRECTION_RIGHT : DIRECTION_LEFT;\n  } // Static\n\n\n  static carouselInterface(element, config) {\n    const data = Carousel.getOrCreateInstance(element, config);\n    let {\n      _config\n    } = data;\n\n    if (typeof config === 'object') {\n      _config = { ..._config,\n        ...config\n      };\n    }\n\n    const action = typeof config === 'string' ? config : _config.slide;\n\n    if (typeof config === 'number') {\n      data.to(config);\n    } else if (typeof action === 'string') {\n      if (typeof data[action] === 'undefined') {\n        throw new TypeError(`No method named \"${action}\"`);\n      }\n\n      data[action]();\n    } else if (_config.interval && _config.ride) {\n      data.pause();\n      data.cycle();\n    }\n  }\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      Carousel.carouselInterface(this, config);\n    });\n  }\n\n  static dataApiClickHandler(event) {\n    const target = getElementFromSelector(this);\n\n    if (!target || !target.classList.contains(CLASS_NAME_CAROUSEL)) {\n      return;\n    }\n\n    const config = { ...Manipulator.getDataAttributes(target),\n      ...Manipulator.getDataAttributes(this)\n    };\n    const slideIndex = this.getAttribute('data-bs-slide-to');\n\n    if (slideIndex) {\n      config.interval = false;\n    }\n\n    Carousel.carouselInterface(target, config);\n\n    if (slideIndex) {\n      Carousel.getInstance(target).to(slideIndex);\n    }\n\n    event.preventDefault();\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$5, SELECTOR_DATA_SLIDE, Carousel.dataApiClickHandler);\nEventHandler.on(window, EVENT_LOAD_DATA_API$2, () => {\n  const carousels = SelectorEngine.find(SELECTOR_DATA_RIDE);\n\n  for (let i = 0, len = carousels.length; i < len; i++) {\n    Carousel.carouselInterface(carousels[i], Carousel.getInstance(carousels[i]));\n  }\n});\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Carousel to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Carousel);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): collapse.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$9 = 'collapse';\nconst DATA_KEY$8 = 'bs.collapse';\nconst EVENT_KEY$8 = `.${DATA_KEY$8}`;\nconst DATA_API_KEY$5 = '.data-api';\nconst Default$8 = {\n  toggle: true,\n  parent: ''\n};\nconst DefaultType$8 = {\n  toggle: 'boolean',\n  parent: '(string|element)'\n};\nconst EVENT_SHOW$5 = `show${EVENT_KEY$8}`;\nconst EVENT_SHOWN$5 = `shown${EVENT_KEY$8}`;\nconst EVENT_HIDE$5 = `hide${EVENT_KEY$8}`;\nconst EVENT_HIDDEN$5 = `hidden${EVENT_KEY$8}`;\nconst EVENT_CLICK_DATA_API$4 = `click${EVENT_KEY$8}${DATA_API_KEY$5}`;\nconst CLASS_NAME_SHOW$8 = 'show';\nconst CLASS_NAME_COLLAPSE = 'collapse';\nconst CLASS_NAME_COLLAPSING = 'collapsing';\nconst CLASS_NAME_COLLAPSED = 'collapsed';\nconst WIDTH = 'width';\nconst HEIGHT = 'height';\nconst SELECTOR_ACTIVES = '.show, .collapsing';\nconst SELECTOR_DATA_TOGGLE$4 = '[data-bs-toggle=\"collapse\"]';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Collapse extends BaseComponent {\n  constructor(element, config) {\n    super(element);\n    this._isTransitioning = false;\n    this._config = this._getConfig(config);\n    this._triggerArray = SelectorEngine.find(`${SELECTOR_DATA_TOGGLE$4}[href=\"#${this._element.id}\"],` + `${SELECTOR_DATA_TOGGLE$4}[data-bs-target=\"#${this._element.id}\"]`);\n    const toggleList = SelectorEngine.find(SELECTOR_DATA_TOGGLE$4);\n\n    for (let i = 0, len = toggleList.length; i < len; i++) {\n      const elem = toggleList[i];\n      const selector = getSelectorFromElement(elem);\n      const filterElement = SelectorEngine.find(selector).filter(foundElem => foundElem === this._element);\n\n      if (selector !== null && filterElement.length) {\n        this._selector = selector;\n\n        this._triggerArray.push(elem);\n      }\n    }\n\n    this._parent = this._config.parent ? this._getParent() : null;\n\n    if (!this._config.parent) {\n      this._addAriaAndCollapsedClass(this._element, this._triggerArray);\n    }\n\n    if (this._config.toggle) {\n      this.toggle();\n    }\n  } // Getters\n\n\n  static get Default() {\n    return Default$8;\n  }\n\n  static get NAME() {\n    return NAME$9;\n  } // Public\n\n\n  toggle() {\n    if (this._element.classList.contains(CLASS_NAME_SHOW$8)) {\n      this.hide();\n    } else {\n      this.show();\n    }\n  }\n\n  show() {\n    if (this._isTransitioning || this._element.classList.contains(CLASS_NAME_SHOW$8)) {\n      return;\n    }\n\n    let actives;\n    let activesData;\n\n    if (this._parent) {\n      actives = SelectorEngine.find(SELECTOR_ACTIVES, this._parent).filter(elem => {\n        if (typeof this._config.parent === 'string') {\n          return elem.getAttribute('data-bs-parent') === this._config.parent;\n        }\n\n        return elem.classList.contains(CLASS_NAME_COLLAPSE);\n      });\n\n      if (actives.length === 0) {\n        actives = null;\n      }\n    }\n\n    const container = SelectorEngine.findOne(this._selector);\n\n    if (actives) {\n      const tempActiveData = actives.find(elem => container !== elem);\n      activesData = tempActiveData ? Collapse.getInstance(tempActiveData) : null;\n\n      if (activesData && activesData._isTransitioning) {\n        return;\n      }\n    }\n\n    const startEvent = EventHandler.trigger(this._element, EVENT_SHOW$5);\n\n    if (startEvent.defaultPrevented) {\n      return;\n    }\n\n    if (actives) {\n      actives.forEach(elemActive => {\n        if (container !== elemActive) {\n          Collapse.collapseInterface(elemActive, 'hide');\n        }\n\n        if (!activesData) {\n          Data.set(elemActive, DATA_KEY$8, null);\n        }\n      });\n    }\n\n    const dimension = this._getDimension();\n\n    this._element.classList.remove(CLASS_NAME_COLLAPSE);\n\n    this._element.classList.add(CLASS_NAME_COLLAPSING);\n\n    this._element.style[dimension] = 0;\n\n    if (this._triggerArray.length) {\n      this._triggerArray.forEach(element => {\n        element.classList.remove(CLASS_NAME_COLLAPSED);\n        element.setAttribute('aria-expanded', true);\n      });\n    }\n\n    this.setTransitioning(true);\n\n    const complete = () => {\n      this._element.classList.remove(CLASS_NAME_COLLAPSING);\n\n      this._element.classList.add(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$8);\n\n      this._element.style[dimension] = '';\n      this.setTransitioning(false);\n      EventHandler.trigger(this._element, EVENT_SHOWN$5);\n    };\n\n    const capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1);\n    const scrollSize = `scroll${capitalizedDimension}`;\n\n    this._queueCallback(complete, this._element, true);\n\n    this._element.style[dimension] = `${this._element[scrollSize]}px`;\n  }\n\n  hide() {\n    if (this._isTransitioning || !this._element.classList.contains(CLASS_NAME_SHOW$8)) {\n      return;\n    }\n\n    const startEvent = EventHandler.trigger(this._element, EVENT_HIDE$5);\n\n    if (startEvent.defaultPrevented) {\n      return;\n    }\n\n    const dimension = this._getDimension();\n\n    this._element.style[dimension] = `${this._element.getBoundingClientRect()[dimension]}px`;\n    reflow(this._element);\n\n    this._element.classList.add(CLASS_NAME_COLLAPSING);\n\n    this._element.classList.remove(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$8);\n\n    const triggerArrayLength = this._triggerArray.length;\n\n    if (triggerArrayLength > 0) {\n      for (let i = 0; i < triggerArrayLength; i++) {\n        const trigger = this._triggerArray[i];\n        const elem = getElementFromSelector(trigger);\n\n        if (elem && !elem.classList.contains(CLASS_NAME_SHOW$8)) {\n          trigger.classList.add(CLASS_NAME_COLLAPSED);\n          trigger.setAttribute('aria-expanded', false);\n        }\n      }\n    }\n\n    this.setTransitioning(true);\n\n    const complete = () => {\n      this.setTransitioning(false);\n\n      this._element.classList.remove(CLASS_NAME_COLLAPSING);\n\n      this._element.classList.add(CLASS_NAME_COLLAPSE);\n\n      EventHandler.trigger(this._element, EVENT_HIDDEN$5);\n    };\n\n    this._element.style[dimension] = '';\n\n    this._queueCallback(complete, this._element, true);\n  }\n\n  setTransitioning(isTransitioning) {\n    this._isTransitioning = isTransitioning;\n  } // Private\n\n\n  _getConfig(config) {\n    config = { ...Default$8,\n      ...config\n    };\n    config.toggle = Boolean(config.toggle); // Coerce string values\n\n    typeCheckConfig(NAME$9, config, DefaultType$8);\n    return config;\n  }\n\n  _getDimension() {\n    return this._element.classList.contains(WIDTH) ? WIDTH : HEIGHT;\n  }\n\n  _getParent() {\n    let {\n      parent\n    } = this._config;\n    parent = getElement(parent);\n    const selector = `${SELECTOR_DATA_TOGGLE$4}[data-bs-parent=\"${parent}\"]`;\n    SelectorEngine.find(selector, parent).forEach(element => {\n      const selected = getElementFromSelector(element);\n\n      this._addAriaAndCollapsedClass(selected, [element]);\n    });\n    return parent;\n  }\n\n  _addAriaAndCollapsedClass(element, triggerArray) {\n    if (!element || !triggerArray.length) {\n      return;\n    }\n\n    const isOpen = element.classList.contains(CLASS_NAME_SHOW$8);\n    triggerArray.forEach(elem => {\n      if (isOpen) {\n        elem.classList.remove(CLASS_NAME_COLLAPSED);\n      } else {\n        elem.classList.add(CLASS_NAME_COLLAPSED);\n      }\n\n      elem.setAttribute('aria-expanded', isOpen);\n    });\n  } // Static\n\n\n  static collapseInterface(element, config) {\n    let data = Collapse.getInstance(element);\n    const _config = { ...Default$8,\n      ...Manipulator.getDataAttributes(element),\n      ...(typeof config === 'object' && config ? config : {})\n    };\n\n    if (!data && _config.toggle && typeof config === 'string' && /show|hide/.test(config)) {\n      _config.toggle = false;\n    }\n\n    if (!data) {\n      data = new Collapse(element, _config);\n    }\n\n    if (typeof config === 'string') {\n      if (typeof data[config] === 'undefined') {\n        throw new TypeError(`No method named \"${config}\"`);\n      }\n\n      data[config]();\n    }\n  }\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      Collapse.collapseInterface(this, config);\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$4, SELECTOR_DATA_TOGGLE$4, function (event) {\n  // preventDefault only for <a> elements (which change the URL) not inside the collapsible element\n  if (event.target.tagName === 'A' || event.delegateTarget && event.delegateTarget.tagName === 'A') {\n    event.preventDefault();\n  }\n\n  const triggerData = Manipulator.getDataAttributes(this);\n  const selector = getSelectorFromElement(this);\n  const selectorElements = SelectorEngine.find(selector);\n  selectorElements.forEach(element => {\n    const data = Collapse.getInstance(element);\n    let config;\n\n    if (data) {\n      // update parent attribute\n      if (data._parent === null && typeof triggerData.parent === 'string') {\n        data._config.parent = triggerData.parent;\n        data._parent = data._getParent();\n      }\n\n      config = 'toggle';\n    } else {\n      config = triggerData;\n    }\n\n    Collapse.collapseInterface(element, config);\n  });\n});\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Collapse to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Collapse);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): dropdown.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$8 = 'dropdown';\nconst DATA_KEY$7 = 'bs.dropdown';\nconst EVENT_KEY$7 = `.${DATA_KEY$7}`;\nconst DATA_API_KEY$4 = '.data-api';\nconst ESCAPE_KEY$2 = 'Escape';\nconst SPACE_KEY = 'Space';\nconst TAB_KEY = 'Tab';\nconst ARROW_UP_KEY = 'ArrowUp';\nconst ARROW_DOWN_KEY = 'ArrowDown';\nconst RIGHT_MOUSE_BUTTON = 2; // MouseEvent.button value for the secondary button, usually the right button\n\nconst REGEXP_KEYDOWN = new RegExp(`${ARROW_UP_KEY}|${ARROW_DOWN_KEY}|${ESCAPE_KEY$2}`);\nconst EVENT_HIDE$4 = `hide${EVENT_KEY$7}`;\nconst EVENT_HIDDEN$4 = `hidden${EVENT_KEY$7}`;\nconst EVENT_SHOW$4 = `show${EVENT_KEY$7}`;\nconst EVENT_SHOWN$4 = `shown${EVENT_KEY$7}`;\nconst EVENT_CLICK = `click${EVENT_KEY$7}`;\nconst EVENT_CLICK_DATA_API$3 = `click${EVENT_KEY$7}${DATA_API_KEY$4}`;\nconst EVENT_KEYDOWN_DATA_API = `keydown${EVENT_KEY$7}${DATA_API_KEY$4}`;\nconst EVENT_KEYUP_DATA_API = `keyup${EVENT_KEY$7}${DATA_API_KEY$4}`;\nconst CLASS_NAME_SHOW$7 = 'show';\nconst CLASS_NAME_DROPUP = 'dropup';\nconst CLASS_NAME_DROPEND = 'dropend';\nconst CLASS_NAME_DROPSTART = 'dropstart';\nconst CLASS_NAME_NAVBAR = 'navbar';\nconst SELECTOR_DATA_TOGGLE$3 = '[data-bs-toggle=\"dropdown\"]';\nconst SELECTOR_MENU = '.dropdown-menu';\nconst SELECTOR_NAVBAR_NAV = '.navbar-nav';\nconst SELECTOR_VISIBLE_ITEMS = '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)';\nconst PLACEMENT_TOP = isRTL() ? 'top-end' : 'top-start';\nconst PLACEMENT_TOPEND = isRTL() ? 'top-start' : 'top-end';\nconst PLACEMENT_BOTTOM = isRTL() ? 'bottom-end' : 'bottom-start';\nconst PLACEMENT_BOTTOMEND = isRTL() ? 'bottom-start' : 'bottom-end';\nconst PLACEMENT_RIGHT = isRTL() ? 'left-start' : 'right-start';\nconst PLACEMENT_LEFT = isRTL() ? 'right-start' : 'left-start';\nconst Default$7 = {\n  offset: [0, 2],\n  boundary: 'clippingParents',\n  reference: 'toggle',\n  display: 'dynamic',\n  popperConfig: null,\n  autoClose: true\n};\nconst DefaultType$7 = {\n  offset: '(array|string|function)',\n  boundary: '(string|element)',\n  reference: '(string|element|object)',\n  display: 'string',\n  popperConfig: '(null|object|function)',\n  autoClose: '(boolean|string)'\n};\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Dropdown extends BaseComponent {\n  constructor(element, config) {\n    super(element);\n    this._popper = null;\n    this._config = this._getConfig(config);\n    this._menu = this._getMenuElement();\n    this._inNavbar = this._detectNavbar();\n\n    this._addEventListeners();\n  } // Getters\n\n\n  static get Default() {\n    return Default$7;\n  }\n\n  static get DefaultType() {\n    return DefaultType$7;\n  }\n\n  static get NAME() {\n    return NAME$8;\n  } // Public\n\n\n  toggle() {\n    if (isDisabled(this._element)) {\n      return;\n    }\n\n    const isActive = this._element.classList.contains(CLASS_NAME_SHOW$7);\n\n    if (isActive) {\n      this.hide();\n      return;\n    }\n\n    this.show();\n  }\n\n  show() {\n    if (isDisabled(this._element) || this._menu.classList.contains(CLASS_NAME_SHOW$7)) {\n      return;\n    }\n\n    const parent = Dropdown.getParentFromElement(this._element);\n    const relatedTarget = {\n      relatedTarget: this._element\n    };\n    const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$4, relatedTarget);\n\n    if (showEvent.defaultPrevented) {\n      return;\n    } // Totally disable Popper for Dropdowns in Navbar\n\n\n    if (this._inNavbar) {\n      Manipulator.setDataAttribute(this._menu, 'popper', 'none');\n    } else {\n      if (typeof Popper === 'undefined') {\n        throw new TypeError('Bootstrap\\'s dropdowns require Popper (https://popper.js.org)');\n      }\n\n      let referenceElement = this._element;\n\n      if (this._config.reference === 'parent') {\n        referenceElement = parent;\n      } else if (isElement(this._config.reference)) {\n        referenceElement = getElement(this._config.reference);\n      } else if (typeof this._config.reference === 'object') {\n        referenceElement = this._config.reference;\n      }\n\n      const popperConfig = this._getPopperConfig();\n\n      const isDisplayStatic = popperConfig.modifiers.find(modifier => modifier.name === 'applyStyles' && modifier.enabled === false);\n      this._popper = Popper.createPopper(referenceElement, this._menu, popperConfig);\n\n      if (isDisplayStatic) {\n        Manipulator.setDataAttribute(this._menu, 'popper', 'static');\n      }\n    } // If this is a touch-enabled device we add extra\n    // empty mouseover listeners to the body's immediate children;\n    // only needed because of broken event delegation on iOS\n    // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n\n\n    if ('ontouchstart' in document.documentElement && !parent.closest(SELECTOR_NAVBAR_NAV)) {\n      [].concat(...document.body.children).forEach(elem => EventHandler.on(elem, 'mouseover', noop));\n    }\n\n    this._element.focus();\n\n    this._element.setAttribute('aria-expanded', true);\n\n    this._menu.classList.toggle(CLASS_NAME_SHOW$7);\n\n    this._element.classList.toggle(CLASS_NAME_SHOW$7);\n\n    EventHandler.trigger(this._element, EVENT_SHOWN$4, relatedTarget);\n  }\n\n  hide() {\n    if (isDisabled(this._element) || !this._menu.classList.contains(CLASS_NAME_SHOW$7)) {\n      return;\n    }\n\n    const relatedTarget = {\n      relatedTarget: this._element\n    };\n\n    this._completeHide(relatedTarget);\n  }\n\n  dispose() {\n    if (this._popper) {\n      this._popper.destroy();\n    }\n\n    super.dispose();\n  }\n\n  update() {\n    this._inNavbar = this._detectNavbar();\n\n    if (this._popper) {\n      this._popper.update();\n    }\n  } // Private\n\n\n  _addEventListeners() {\n    EventHandler.on(this._element, EVENT_CLICK, event => {\n      event.preventDefault();\n      this.toggle();\n    });\n  }\n\n  _completeHide(relatedTarget) {\n    const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$4, relatedTarget);\n\n    if (hideEvent.defaultPrevented) {\n      return;\n    } // If this is a touch-enabled device we remove the extra\n    // empty mouseover listeners we added for iOS support\n\n\n    if ('ontouchstart' in document.documentElement) {\n      [].concat(...document.body.children).forEach(elem => EventHandler.off(elem, 'mouseover', noop));\n    }\n\n    if (this._popper) {\n      this._popper.destroy();\n    }\n\n    this._menu.classList.remove(CLASS_NAME_SHOW$7);\n\n    this._element.classList.remove(CLASS_NAME_SHOW$7);\n\n    this._element.setAttribute('aria-expanded', 'false');\n\n    Manipulator.removeDataAttribute(this._menu, 'popper');\n    EventHandler.trigger(this._element, EVENT_HIDDEN$4, relatedTarget);\n  }\n\n  _getConfig(config) {\n    config = { ...this.constructor.Default,\n      ...Manipulator.getDataAttributes(this._element),\n      ...config\n    };\n    typeCheckConfig(NAME$8, config, this.constructor.DefaultType);\n\n    if (typeof config.reference === 'object' && !isElement(config.reference) && typeof config.reference.getBoundingClientRect !== 'function') {\n      // Popper virtual elements require a getBoundingClientRect method\n      throw new TypeError(`${NAME$8.toUpperCase()}: Option \"reference\" provided type \"object\" without a required \"getBoundingClientRect\" method.`);\n    }\n\n    return config;\n  }\n\n  _getMenuElement() {\n    return SelectorEngine.next(this._element, SELECTOR_MENU)[0];\n  }\n\n  _getPlacement() {\n    const parentDropdown = this._element.parentNode;\n\n    if (parentDropdown.classList.contains(CLASS_NAME_DROPEND)) {\n      return PLACEMENT_RIGHT;\n    }\n\n    if (parentDropdown.classList.contains(CLASS_NAME_DROPSTART)) {\n      return PLACEMENT_LEFT;\n    } // We need to trim the value because custom properties can also include spaces\n\n\n    const isEnd = getComputedStyle(this._menu).getPropertyValue('--bs-position').trim() === 'end';\n\n    if (parentDropdown.classList.contains(CLASS_NAME_DROPUP)) {\n      return isEnd ? PLACEMENT_TOPEND : PLACEMENT_TOP;\n    }\n\n    return isEnd ? PLACEMENT_BOTTOMEND : PLACEMENT_BOTTOM;\n  }\n\n  _detectNavbar() {\n    return this._element.closest(`.${CLASS_NAME_NAVBAR}`) !== null;\n  }\n\n  _getOffset() {\n    const {\n      offset\n    } = this._config;\n\n    if (typeof offset === 'string') {\n      return offset.split(',').map(val => Number.parseInt(val, 10));\n    }\n\n    if (typeof offset === 'function') {\n      return popperData => offset(popperData, this._element);\n    }\n\n    return offset;\n  }\n\n  _getPopperConfig() {\n    const defaultBsPopperConfig = {\n      placement: this._getPlacement(),\n      modifiers: [{\n        name: 'preventOverflow',\n        options: {\n          boundary: this._config.boundary\n        }\n      }, {\n        name: 'offset',\n        options: {\n          offset: this._getOffset()\n        }\n      }]\n    }; // Disable Popper if we have a static display\n\n    if (this._config.display === 'static') {\n      defaultBsPopperConfig.modifiers = [{\n        name: 'applyStyles',\n        enabled: false\n      }];\n    }\n\n    return { ...defaultBsPopperConfig,\n      ...(typeof this._config.popperConfig === 'function' ? this._config.popperConfig(defaultBsPopperConfig) : this._config.popperConfig)\n    };\n  }\n\n  _selectMenuItem({\n    key,\n    target\n  }) {\n    const items = SelectorEngine.find(SELECTOR_VISIBLE_ITEMS, this._menu).filter(isVisible);\n\n    if (!items.length) {\n      return;\n    } // if target isn't included in items (e.g. when expanding the dropdown)\n    // allow cycling to get the last item in case key equals ARROW_UP_KEY\n\n\n    getNextActiveElement(items, target, key === ARROW_DOWN_KEY, !items.includes(target)).focus();\n  } // Static\n\n\n  static dropdownInterface(element, config) {\n    const data = Dropdown.getOrCreateInstance(element, config);\n\n    if (typeof config === 'string') {\n      if (typeof data[config] === 'undefined') {\n        throw new TypeError(`No method named \"${config}\"`);\n      }\n\n      data[config]();\n    }\n  }\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      Dropdown.dropdownInterface(this, config);\n    });\n  }\n\n  static clearMenus(event) {\n    if (event && (event.button === RIGHT_MOUSE_BUTTON || event.type === 'keyup' && event.key !== TAB_KEY)) {\n      return;\n    }\n\n    const toggles = SelectorEngine.find(SELECTOR_DATA_TOGGLE$3);\n\n    for (let i = 0, len = toggles.length; i < len; i++) {\n      const context = Dropdown.getInstance(toggles[i]);\n\n      if (!context || context._config.autoClose === false) {\n        continue;\n      }\n\n      if (!context._element.classList.contains(CLASS_NAME_SHOW$7)) {\n        continue;\n      }\n\n      const relatedTarget = {\n        relatedTarget: context._element\n      };\n\n      if (event) {\n        const composedPath = event.composedPath();\n        const isMenuTarget = composedPath.includes(context._menu);\n\n        if (composedPath.includes(context._element) || context._config.autoClose === 'inside' && !isMenuTarget || context._config.autoClose === 'outside' && isMenuTarget) {\n          continue;\n        } // Tab navigation through the dropdown menu or events from contained inputs shouldn't close the menu\n\n\n        if (context._menu.contains(event.target) && (event.type === 'keyup' && event.key === TAB_KEY || /input|select|option|textarea|form/i.test(event.target.tagName))) {\n          continue;\n        }\n\n        if (event.type === 'click') {\n          relatedTarget.clickEvent = event;\n        }\n      }\n\n      context._completeHide(relatedTarget);\n    }\n  }\n\n  static getParentFromElement(element) {\n    return getElementFromSelector(element) || element.parentNode;\n  }\n\n  static dataApiKeydownHandler(event) {\n    // If not input/textarea:\n    //  - And not a key in REGEXP_KEYDOWN => not a dropdown command\n    // If input/textarea:\n    //  - If space key => not a dropdown command\n    //  - If key is other than escape\n    //    - If key is not up or down => not a dropdown command\n    //    - If trigger inside the menu => not a dropdown command\n    if (/input|textarea/i.test(event.target.tagName) ? event.key === SPACE_KEY || event.key !== ESCAPE_KEY$2 && (event.key !== ARROW_DOWN_KEY && event.key !== ARROW_UP_KEY || event.target.closest(SELECTOR_MENU)) : !REGEXP_KEYDOWN.test(event.key)) {\n      return;\n    }\n\n    const isActive = this.classList.contains(CLASS_NAME_SHOW$7);\n\n    if (!isActive && event.key === ESCAPE_KEY$2) {\n      return;\n    }\n\n    event.preventDefault();\n    event.stopPropagation();\n\n    if (isDisabled(this)) {\n      return;\n    }\n\n    const getToggleButton = () => this.matches(SELECTOR_DATA_TOGGLE$3) ? this : SelectorEngine.prev(this, SELECTOR_DATA_TOGGLE$3)[0];\n\n    if (event.key === ESCAPE_KEY$2) {\n      getToggleButton().focus();\n      Dropdown.clearMenus();\n      return;\n    }\n\n    if (event.key === ARROW_UP_KEY || event.key === ARROW_DOWN_KEY) {\n      if (!isActive) {\n        getToggleButton().click();\n      }\n\n      Dropdown.getInstance(getToggleButton())._selectMenuItem(event);\n\n      return;\n    }\n\n    if (!isActive || event.key === SPACE_KEY) {\n      Dropdown.clearMenus();\n    }\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_DATA_TOGGLE$3, Dropdown.dataApiKeydownHandler);\nEventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown.dataApiKeydownHandler);\nEventHandler.on(document, EVENT_CLICK_DATA_API$3, Dropdown.clearMenus);\nEventHandler.on(document, EVENT_KEYUP_DATA_API, Dropdown.clearMenus);\nEventHandler.on(document, EVENT_CLICK_DATA_API$3, SELECTOR_DATA_TOGGLE$3, function (event) {\n  event.preventDefault();\n  Dropdown.dropdownInterface(this);\n});\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Dropdown to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Dropdown);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): util/scrollBar.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\nconst SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top';\nconst SELECTOR_STICKY_CONTENT = '.sticky-top';\n\nclass ScrollBarHelper {\n  constructor() {\n    this._element = document.body;\n  }\n\n  getWidth() {\n    // https://developer.mozilla.org/en-US/docs/Web/API/Window/innerWidth#usage_notes\n    const documentWidth = document.documentElement.clientWidth;\n    return Math.abs(window.innerWidth - documentWidth);\n  }\n\n  hide() {\n    const width = this.getWidth();\n\n    this._disableOverFlow(); // give padding to element to balance the hidden scrollbar width\n\n\n    this._setElementAttributes(this._element, 'paddingRight', calculatedValue => calculatedValue + width); // trick: We adjust positive paddingRight and negative marginRight to sticky-top elements to keep showing fullwidth\n\n\n    this._setElementAttributes(SELECTOR_FIXED_CONTENT, 'paddingRight', calculatedValue => calculatedValue + width);\n\n    this._setElementAttributes(SELECTOR_STICKY_CONTENT, 'marginRight', calculatedValue => calculatedValue - width);\n  }\n\n  _disableOverFlow() {\n    this._saveInitialAttribute(this._element, 'overflow');\n\n    this._element.style.overflow = 'hidden';\n  }\n\n  _setElementAttributes(selector, styleProp, callback) {\n    const scrollbarWidth = this.getWidth();\n\n    const manipulationCallBack = element => {\n      if (element !== this._element && window.innerWidth > element.clientWidth + scrollbarWidth) {\n        return;\n      }\n\n      this._saveInitialAttribute(element, styleProp);\n\n      const calculatedValue = window.getComputedStyle(element)[styleProp];\n      element.style[styleProp] = `${callback(Number.parseFloat(calculatedValue))}px`;\n    };\n\n    this._applyManipulationCallback(selector, manipulationCallBack);\n  }\n\n  reset() {\n    this._resetElementAttributes(this._element, 'overflow');\n\n    this._resetElementAttributes(this._element, 'paddingRight');\n\n    this._resetElementAttributes(SELECTOR_FIXED_CONTENT, 'paddingRight');\n\n    this._resetElementAttributes(SELECTOR_STICKY_CONTENT, 'marginRight');\n  }\n\n  _saveInitialAttribute(element, styleProp) {\n    const actualValue = element.style[styleProp];\n\n    if (actualValue) {\n      Manipulator.setDataAttribute(element, styleProp, actualValue);\n    }\n  }\n\n  _resetElementAttributes(selector, styleProp) {\n    const manipulationCallBack = element => {\n      const value = Manipulator.getDataAttribute(element, styleProp);\n\n      if (typeof value === 'undefined') {\n        element.style.removeProperty(styleProp);\n      } else {\n        Manipulator.removeDataAttribute(element, styleProp);\n        element.style[styleProp] = value;\n      }\n    };\n\n    this._applyManipulationCallback(selector, manipulationCallBack);\n  }\n\n  _applyManipulationCallback(selector, callBack) {\n    if (isElement(selector)) {\n      callBack(selector);\n    } else {\n      SelectorEngine.find(selector, this._element).forEach(callBack);\n    }\n  }\n\n  isOverflowing() {\n    return this.getWidth() > 0;\n  }\n\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): util/backdrop.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\nconst Default$6 = {\n  isVisible: true,\n  // if false, we use the backdrop helper without adding any element to the dom\n  isAnimated: false,\n  rootElement: 'body',\n  // give the choice to place backdrop under different elements\n  clickCallback: null\n};\nconst DefaultType$6 = {\n  isVisible: 'boolean',\n  isAnimated: 'boolean',\n  rootElement: '(element|string)',\n  clickCallback: '(function|null)'\n};\nconst NAME$7 = 'backdrop';\nconst CLASS_NAME_BACKDROP = 'modal-backdrop';\nconst CLASS_NAME_FADE$5 = 'fade';\nconst CLASS_NAME_SHOW$6 = 'show';\nconst EVENT_MOUSEDOWN = `mousedown.bs.${NAME$7}`;\n\nclass Backdrop {\n  constructor(config) {\n    this._config = this._getConfig(config);\n    this._isAppended = false;\n    this._element = null;\n  }\n\n  show(callback) {\n    if (!this._config.isVisible) {\n      execute(callback);\n      return;\n    }\n\n    this._append();\n\n    if (this._config.isAnimated) {\n      reflow(this._getElement());\n    }\n\n    this._getElement().classList.add(CLASS_NAME_SHOW$6);\n\n    this._emulateAnimation(() => {\n      execute(callback);\n    });\n  }\n\n  hide(callback) {\n    if (!this._config.isVisible) {\n      execute(callback);\n      return;\n    }\n\n    this._getElement().classList.remove(CLASS_NAME_SHOW$6);\n\n    this._emulateAnimation(() => {\n      this.dispose();\n      execute(callback);\n    });\n  } // Private\n\n\n  _getElement() {\n    if (!this._element) {\n      const backdrop = document.createElement('div');\n      backdrop.className = CLASS_NAME_BACKDROP;\n\n      if (this._config.isAnimated) {\n        backdrop.classList.add(CLASS_NAME_FADE$5);\n      }\n\n      this._element = backdrop;\n    }\n\n    return this._element;\n  }\n\n  _getConfig(config) {\n    config = { ...Default$6,\n      ...(typeof config === 'object' ? config : {})\n    }; // use getElement() with the default \"body\" to get a fresh Element on each instantiation\n\n    config.rootElement = getElement(config.rootElement);\n    typeCheckConfig(NAME$7, config, DefaultType$6);\n    return config;\n  }\n\n  _append() {\n    if (this._isAppended) {\n      return;\n    }\n\n    this._config.rootElement.appendChild(this._getElement());\n\n    EventHandler.on(this._getElement(), EVENT_MOUSEDOWN, () => {\n      execute(this._config.clickCallback);\n    });\n    this._isAppended = true;\n  }\n\n  dispose() {\n    if (!this._isAppended) {\n      return;\n    }\n\n    EventHandler.off(this._element, EVENT_MOUSEDOWN);\n\n    this._element.remove();\n\n    this._isAppended = false;\n  }\n\n  _emulateAnimation(callback) {\n    executeAfterTransition(callback, this._getElement(), this._config.isAnimated);\n  }\n\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): modal.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$6 = 'modal';\nconst DATA_KEY$6 = 'bs.modal';\nconst EVENT_KEY$6 = `.${DATA_KEY$6}`;\nconst DATA_API_KEY$3 = '.data-api';\nconst ESCAPE_KEY$1 = 'Escape';\nconst Default$5 = {\n  backdrop: true,\n  keyboard: true,\n  focus: true\n};\nconst DefaultType$5 = {\n  backdrop: '(boolean|string)',\n  keyboard: 'boolean',\n  focus: 'boolean'\n};\nconst EVENT_HIDE$3 = `hide${EVENT_KEY$6}`;\nconst EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY$6}`;\nconst EVENT_HIDDEN$3 = `hidden${EVENT_KEY$6}`;\nconst EVENT_SHOW$3 = `show${EVENT_KEY$6}`;\nconst EVENT_SHOWN$3 = `shown${EVENT_KEY$6}`;\nconst EVENT_FOCUSIN$2 = `focusin${EVENT_KEY$6}`;\nconst EVENT_RESIZE = `resize${EVENT_KEY$6}`;\nconst EVENT_CLICK_DISMISS$2 = `click.dismiss${EVENT_KEY$6}`;\nconst EVENT_KEYDOWN_DISMISS$1 = `keydown.dismiss${EVENT_KEY$6}`;\nconst EVENT_MOUSEUP_DISMISS = `mouseup.dismiss${EVENT_KEY$6}`;\nconst EVENT_MOUSEDOWN_DISMISS = `mousedown.dismiss${EVENT_KEY$6}`;\nconst EVENT_CLICK_DATA_API$2 = `click${EVENT_KEY$6}${DATA_API_KEY$3}`;\nconst CLASS_NAME_OPEN = 'modal-open';\nconst CLASS_NAME_FADE$4 = 'fade';\nconst CLASS_NAME_SHOW$5 = 'show';\nconst CLASS_NAME_STATIC = 'modal-static';\nconst SELECTOR_DIALOG = '.modal-dialog';\nconst SELECTOR_MODAL_BODY = '.modal-body';\nconst SELECTOR_DATA_TOGGLE$2 = '[data-bs-toggle=\"modal\"]';\nconst SELECTOR_DATA_DISMISS$2 = '[data-bs-dismiss=\"modal\"]';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Modal extends BaseComponent {\n  constructor(element, config) {\n    super(element);\n    this._config = this._getConfig(config);\n    this._dialog = SelectorEngine.findOne(SELECTOR_DIALOG, this._element);\n    this._backdrop = this._initializeBackDrop();\n    this._isShown = false;\n    this._ignoreBackdropClick = false;\n    this._isTransitioning = false;\n    this._scrollBar = new ScrollBarHelper();\n  } // Getters\n\n\n  static get Default() {\n    return Default$5;\n  }\n\n  static get NAME() {\n    return NAME$6;\n  } // Public\n\n\n  toggle(relatedTarget) {\n    return this._isShown ? this.hide() : this.show(relatedTarget);\n  }\n\n  show(relatedTarget) {\n    if (this._isShown || this._isTransitioning) {\n      return;\n    }\n\n    const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$3, {\n      relatedTarget\n    });\n\n    if (showEvent.defaultPrevented) {\n      return;\n    }\n\n    this._isShown = true;\n\n    if (this._isAnimated()) {\n      this._isTransitioning = true;\n    }\n\n    this._scrollBar.hide();\n\n    document.body.classList.add(CLASS_NAME_OPEN);\n\n    this._adjustDialog();\n\n    this._setEscapeEvent();\n\n    this._setResizeEvent();\n\n    EventHandler.on(this._element, EVENT_CLICK_DISMISS$2, SELECTOR_DATA_DISMISS$2, event => this.hide(event));\n    EventHandler.on(this._dialog, EVENT_MOUSEDOWN_DISMISS, () => {\n      EventHandler.one(this._element, EVENT_MOUSEUP_DISMISS, event => {\n        if (event.target === this._element) {\n          this._ignoreBackdropClick = true;\n        }\n      });\n    });\n\n    this._showBackdrop(() => this._showElement(relatedTarget));\n  }\n\n  hide(event) {\n    if (event && ['A', 'AREA'].includes(event.target.tagName)) {\n      event.preventDefault();\n    }\n\n    if (!this._isShown || this._isTransitioning) {\n      return;\n    }\n\n    const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$3);\n\n    if (hideEvent.defaultPrevented) {\n      return;\n    }\n\n    this._isShown = false;\n\n    const isAnimated = this._isAnimated();\n\n    if (isAnimated) {\n      this._isTransitioning = true;\n    }\n\n    this._setEscapeEvent();\n\n    this._setResizeEvent();\n\n    EventHandler.off(document, EVENT_FOCUSIN$2);\n\n    this._element.classList.remove(CLASS_NAME_SHOW$5);\n\n    EventHandler.off(this._element, EVENT_CLICK_DISMISS$2);\n    EventHandler.off(this._dialog, EVENT_MOUSEDOWN_DISMISS);\n\n    this._queueCallback(() => this._hideModal(), this._element, isAnimated);\n  }\n\n  dispose() {\n    [window, this._dialog].forEach(htmlElement => EventHandler.off(htmlElement, EVENT_KEY$6));\n\n    this._backdrop.dispose();\n\n    super.dispose();\n    /**\n     * `document` has 2 events `EVENT_FOCUSIN` and `EVENT_CLICK_DATA_API`\n     * Do not move `document` in `htmlElements` array\n     * It will remove `EVENT_CLICK_DATA_API` event that should remain\n     */\n\n    EventHandler.off(document, EVENT_FOCUSIN$2);\n  }\n\n  handleUpdate() {\n    this._adjustDialog();\n  } // Private\n\n\n  _initializeBackDrop() {\n    return new Backdrop({\n      isVisible: Boolean(this._config.backdrop),\n      // 'static' option will be translated to true, and booleans will keep their value\n      isAnimated: this._isAnimated()\n    });\n  }\n\n  _getConfig(config) {\n    config = { ...Default$5,\n      ...Manipulator.getDataAttributes(this._element),\n      ...(typeof config === 'object' ? config : {})\n    };\n    typeCheckConfig(NAME$6, config, DefaultType$5);\n    return config;\n  }\n\n  _showElement(relatedTarget) {\n    const isAnimated = this._isAnimated();\n\n    const modalBody = SelectorEngine.findOne(SELECTOR_MODAL_BODY, this._dialog);\n\n    if (!this._element.parentNode || this._element.parentNode.nodeType !== Node.ELEMENT_NODE) {\n      // Don't move modal's DOM position\n      document.body.appendChild(this._element);\n    }\n\n    this._element.style.display = 'block';\n\n    this._element.removeAttribute('aria-hidden');\n\n    this._element.setAttribute('aria-modal', true);\n\n    this._element.setAttribute('role', 'dialog');\n\n    this._element.scrollTop = 0;\n\n    if (modalBody) {\n      modalBody.scrollTop = 0;\n    }\n\n    if (isAnimated) {\n      reflow(this._element);\n    }\n\n    this._element.classList.add(CLASS_NAME_SHOW$5);\n\n    if (this._config.focus) {\n      this._enforceFocus();\n    }\n\n    const transitionComplete = () => {\n      if (this._config.focus) {\n        this._element.focus();\n      }\n\n      this._isTransitioning = false;\n      EventHandler.trigger(this._element, EVENT_SHOWN$3, {\n        relatedTarget\n      });\n    };\n\n    this._queueCallback(transitionComplete, this._dialog, isAnimated);\n  }\n\n  _enforceFocus() {\n    EventHandler.off(document, EVENT_FOCUSIN$2); // guard against infinite focus loop\n\n    EventHandler.on(document, EVENT_FOCUSIN$2, event => {\n      if (document !== event.target && this._element !== event.target && !this._element.contains(event.target)) {\n        this._element.focus();\n      }\n    });\n  }\n\n  _setEscapeEvent() {\n    if (this._isShown) {\n      EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS$1, event => {\n        if (this._config.keyboard && event.key === ESCAPE_KEY$1) {\n          event.preventDefault();\n          this.hide();\n        } else if (!this._config.keyboard && event.key === ESCAPE_KEY$1) {\n          this._triggerBackdropTransition();\n        }\n      });\n    } else {\n      EventHandler.off(this._element, EVENT_KEYDOWN_DISMISS$1);\n    }\n  }\n\n  _setResizeEvent() {\n    if (this._isShown) {\n      EventHandler.on(window, EVENT_RESIZE, () => this._adjustDialog());\n    } else {\n      EventHandler.off(window, EVENT_RESIZE);\n    }\n  }\n\n  _hideModal() {\n    this._element.style.display = 'none';\n\n    this._element.setAttribute('aria-hidden', true);\n\n    this._element.removeAttribute('aria-modal');\n\n    this._element.removeAttribute('role');\n\n    this._isTransitioning = false;\n\n    this._backdrop.hide(() => {\n      document.body.classList.remove(CLASS_NAME_OPEN);\n\n      this._resetAdjustments();\n\n      this._scrollBar.reset();\n\n      EventHandler.trigger(this._element, EVENT_HIDDEN$3);\n    });\n  }\n\n  _showBackdrop(callback) {\n    EventHandler.on(this._element, EVENT_CLICK_DISMISS$2, event => {\n      if (this._ignoreBackdropClick) {\n        this._ignoreBackdropClick = false;\n        return;\n      }\n\n      if (event.target !== event.currentTarget) {\n        return;\n      }\n\n      if (this._config.backdrop === true) {\n        this.hide();\n      } else if (this._config.backdrop === 'static') {\n        this._triggerBackdropTransition();\n      }\n    });\n\n    this._backdrop.show(callback);\n  }\n\n  _isAnimated() {\n    return this._element.classList.contains(CLASS_NAME_FADE$4);\n  }\n\n  _triggerBackdropTransition() {\n    const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED);\n\n    if (hideEvent.defaultPrevented) {\n      return;\n    }\n\n    const {\n      classList,\n      scrollHeight,\n      style\n    } = this._element;\n    const isModalOverflowing = scrollHeight > document.documentElement.clientHeight; // return if the following background transition hasn't yet completed\n\n    if (!isModalOverflowing && style.overflowY === 'hidden' || classList.contains(CLASS_NAME_STATIC)) {\n      return;\n    }\n\n    if (!isModalOverflowing) {\n      style.overflowY = 'hidden';\n    }\n\n    classList.add(CLASS_NAME_STATIC);\n\n    this._queueCallback(() => {\n      classList.remove(CLASS_NAME_STATIC);\n\n      if (!isModalOverflowing) {\n        this._queueCallback(() => {\n          style.overflowY = '';\n        }, this._dialog);\n      }\n    }, this._dialog);\n\n    this._element.focus();\n  } // ----------------------------------------------------------------------\n  // the following methods are used to handle overflowing modals\n  // ----------------------------------------------------------------------\n\n\n  _adjustDialog() {\n    const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;\n\n    const scrollbarWidth = this._scrollBar.getWidth();\n\n    const isBodyOverflowing = scrollbarWidth > 0;\n\n    if (!isBodyOverflowing && isModalOverflowing && !isRTL() || isBodyOverflowing && !isModalOverflowing && isRTL()) {\n      this._element.style.paddingLeft = `${scrollbarWidth}px`;\n    }\n\n    if (isBodyOverflowing && !isModalOverflowing && !isRTL() || !isBodyOverflowing && isModalOverflowing && isRTL()) {\n      this._element.style.paddingRight = `${scrollbarWidth}px`;\n    }\n  }\n\n  _resetAdjustments() {\n    this._element.style.paddingLeft = '';\n    this._element.style.paddingRight = '';\n  } // Static\n\n\n  static jQueryInterface(config, relatedTarget) {\n    return this.each(function () {\n      const data = Modal.getOrCreateInstance(this, config);\n\n      if (typeof config !== 'string') {\n        return;\n      }\n\n      if (typeof data[config] === 'undefined') {\n        throw new TypeError(`No method named \"${config}\"`);\n      }\n\n      data[config](relatedTarget);\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$2, SELECTOR_DATA_TOGGLE$2, function (event) {\n  const target = getElementFromSelector(this);\n\n  if (['A', 'AREA'].includes(this.tagName)) {\n    event.preventDefault();\n  }\n\n  EventHandler.one(target, EVENT_SHOW$3, showEvent => {\n    if (showEvent.defaultPrevented) {\n      // only register focus restorer if modal will actually get shown\n      return;\n    }\n\n    EventHandler.one(target, EVENT_HIDDEN$3, () => {\n      if (isVisible(this)) {\n        this.focus();\n      }\n    });\n  });\n  const data = Modal.getOrCreateInstance(target);\n  data.toggle(this);\n});\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Modal to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Modal);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): offcanvas.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$5 = 'offcanvas';\nconst DATA_KEY$5 = 'bs.offcanvas';\nconst EVENT_KEY$5 = `.${DATA_KEY$5}`;\nconst DATA_API_KEY$2 = '.data-api';\nconst EVENT_LOAD_DATA_API$1 = `load${EVENT_KEY$5}${DATA_API_KEY$2}`;\nconst ESCAPE_KEY = 'Escape';\nconst Default$4 = {\n  backdrop: true,\n  keyboard: true,\n  scroll: false\n};\nconst DefaultType$4 = {\n  backdrop: 'boolean',\n  keyboard: 'boolean',\n  scroll: 'boolean'\n};\nconst CLASS_NAME_SHOW$4 = 'show';\nconst OPEN_SELECTOR = '.offcanvas.show';\nconst EVENT_SHOW$2 = `show${EVENT_KEY$5}`;\nconst EVENT_SHOWN$2 = `shown${EVENT_KEY$5}`;\nconst EVENT_HIDE$2 = `hide${EVENT_KEY$5}`;\nconst EVENT_HIDDEN$2 = `hidden${EVENT_KEY$5}`;\nconst EVENT_FOCUSIN$1 = `focusin${EVENT_KEY$5}`;\nconst EVENT_CLICK_DATA_API$1 = `click${EVENT_KEY$5}${DATA_API_KEY$2}`;\nconst EVENT_CLICK_DISMISS$1 = `click.dismiss${EVENT_KEY$5}`;\nconst EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY$5}`;\nconst SELECTOR_DATA_DISMISS$1 = '[data-bs-dismiss=\"offcanvas\"]';\nconst SELECTOR_DATA_TOGGLE$1 = '[data-bs-toggle=\"offcanvas\"]';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Offcanvas extends BaseComponent {\n  constructor(element, config) {\n    super(element);\n    this._config = this._getConfig(config);\n    this._isShown = false;\n    this._backdrop = this._initializeBackDrop();\n\n    this._addEventListeners();\n  } // Getters\n\n\n  static get NAME() {\n    return NAME$5;\n  }\n\n  static get Default() {\n    return Default$4;\n  } // Public\n\n\n  toggle(relatedTarget) {\n    return this._isShown ? this.hide() : this.show(relatedTarget);\n  }\n\n  show(relatedTarget) {\n    if (this._isShown) {\n      return;\n    }\n\n    const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$2, {\n      relatedTarget\n    });\n\n    if (showEvent.defaultPrevented) {\n      return;\n    }\n\n    this._isShown = true;\n    this._element.style.visibility = 'visible';\n\n    this._backdrop.show();\n\n    if (!this._config.scroll) {\n      new ScrollBarHelper().hide();\n\n      this._enforceFocusOnElement(this._element);\n    }\n\n    this._element.removeAttribute('aria-hidden');\n\n    this._element.setAttribute('aria-modal', true);\n\n    this._element.setAttribute('role', 'dialog');\n\n    this._element.classList.add(CLASS_NAME_SHOW$4);\n\n    const completeCallBack = () => {\n      EventHandler.trigger(this._element, EVENT_SHOWN$2, {\n        relatedTarget\n      });\n    };\n\n    this._queueCallback(completeCallBack, this._element, true);\n  }\n\n  hide() {\n    if (!this._isShown) {\n      return;\n    }\n\n    const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$2);\n\n    if (hideEvent.defaultPrevented) {\n      return;\n    }\n\n    EventHandler.off(document, EVENT_FOCUSIN$1);\n\n    this._element.blur();\n\n    this._isShown = false;\n\n    this._element.classList.remove(CLASS_NAME_SHOW$4);\n\n    this._backdrop.hide();\n\n    const completeCallback = () => {\n      this._element.setAttribute('aria-hidden', true);\n\n      this._element.removeAttribute('aria-modal');\n\n      this._element.removeAttribute('role');\n\n      this._element.style.visibility = 'hidden';\n\n      if (!this._config.scroll) {\n        new ScrollBarHelper().reset();\n      }\n\n      EventHandler.trigger(this._element, EVENT_HIDDEN$2);\n    };\n\n    this._queueCallback(completeCallback, this._element, true);\n  }\n\n  dispose() {\n    this._backdrop.dispose();\n\n    super.dispose();\n    EventHandler.off(document, EVENT_FOCUSIN$1);\n  } // Private\n\n\n  _getConfig(config) {\n    config = { ...Default$4,\n      ...Manipulator.getDataAttributes(this._element),\n      ...(typeof config === 'object' ? config : {})\n    };\n    typeCheckConfig(NAME$5, config, DefaultType$4);\n    return config;\n  }\n\n  _initializeBackDrop() {\n    return new Backdrop({\n      isVisible: this._config.backdrop,\n      isAnimated: true,\n      rootElement: this._element.parentNode,\n      clickCallback: () => this.hide()\n    });\n  }\n\n  _enforceFocusOnElement(element) {\n    EventHandler.off(document, EVENT_FOCUSIN$1); // guard against infinite focus loop\n\n    EventHandler.on(document, EVENT_FOCUSIN$1, event => {\n      if (document !== event.target && element !== event.target && !element.contains(event.target)) {\n        element.focus();\n      }\n    });\n    element.focus();\n  }\n\n  _addEventListeners() {\n    EventHandler.on(this._element, EVENT_CLICK_DISMISS$1, SELECTOR_DATA_DISMISS$1, () => this.hide());\n    EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS, event => {\n      if (this._config.keyboard && event.key === ESCAPE_KEY) {\n        this.hide();\n      }\n    });\n  } // Static\n\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Offcanvas.getOrCreateInstance(this, config);\n\n      if (typeof config !== 'string') {\n        return;\n      }\n\n      if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n        throw new TypeError(`No method named \"${config}\"`);\n      }\n\n      data[config](this);\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$1, SELECTOR_DATA_TOGGLE$1, function (event) {\n  const target = getElementFromSelector(this);\n\n  if (['A', 'AREA'].includes(this.tagName)) {\n    event.preventDefault();\n  }\n\n  if (isDisabled(this)) {\n    return;\n  }\n\n  EventHandler.one(target, EVENT_HIDDEN$2, () => {\n    // focus on trigger when it is closed\n    if (isVisible(this)) {\n      this.focus();\n    }\n  }); // avoid conflict when clicking a toggler of an offcanvas, while another is open\n\n  const allReadyOpen = SelectorEngine.findOne(OPEN_SELECTOR);\n\n  if (allReadyOpen && allReadyOpen !== target) {\n    Offcanvas.getInstance(allReadyOpen).hide();\n  }\n\n  const data = Offcanvas.getOrCreateInstance(target);\n  data.toggle(this);\n});\nEventHandler.on(window, EVENT_LOAD_DATA_API$1, () => SelectorEngine.find(OPEN_SELECTOR).forEach(el => Offcanvas.getOrCreateInstance(el).show()));\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\ndefineJQueryPlugin(Offcanvas);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): util/sanitizer.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\nconst uriAttrs = new Set(['background', 'cite', 'href', 'itemtype', 'longdesc', 'poster', 'src', 'xlink:href']);\nconst ARIA_ATTRIBUTE_PATTERN = /^aria-[\\w-]*$/i;\n/**\n * A pattern that recognizes a commonly useful subset of URLs that are safe.\n *\n * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts\n */\n\nconst SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file):|[^#&/:?]*(?:[#/?]|$))/i;\n/**\n * A pattern that matches safe data URLs. Only matches image, video and audio types.\n *\n * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts\n */\n\nconst DATA_URL_PATTERN = /^data:(?:image\\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\\/(?:mpeg|mp4|ogg|webm)|audio\\/(?:mp3|oga|ogg|opus));base64,[\\d+/a-z]+=*$/i;\n\nconst allowedAttribute = (attr, allowedAttributeList) => {\n  const attrName = attr.nodeName.toLowerCase();\n\n  if (allowedAttributeList.includes(attrName)) {\n    if (uriAttrs.has(attrName)) {\n      return Boolean(SAFE_URL_PATTERN.test(attr.nodeValue) || DATA_URL_PATTERN.test(attr.nodeValue));\n    }\n\n    return true;\n  }\n\n  const regExp = allowedAttributeList.filter(attrRegex => attrRegex instanceof RegExp); // Check if a regular expression validates the attribute.\n\n  for (let i = 0, len = regExp.length; i < len; i++) {\n    if (regExp[i].test(attrName)) {\n      return true;\n    }\n  }\n\n  return false;\n};\n\nconst DefaultAllowlist = {\n  // Global attributes allowed on any supplied element below.\n  '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],\n  a: ['target', 'href', 'title', 'rel'],\n  area: [],\n  b: [],\n  br: [],\n  col: [],\n  code: [],\n  div: [],\n  em: [],\n  hr: [],\n  h1: [],\n  h2: [],\n  h3: [],\n  h4: [],\n  h5: [],\n  h6: [],\n  i: [],\n  img: ['src', 'srcset', 'alt', 'title', 'width', 'height'],\n  li: [],\n  ol: [],\n  p: [],\n  pre: [],\n  s: [],\n  small: [],\n  span: [],\n  sub: [],\n  sup: [],\n  strong: [],\n  u: [],\n  ul: []\n};\nfunction sanitizeHtml(unsafeHtml, allowList, sanitizeFn) {\n  if (!unsafeHtml.length) {\n    return unsafeHtml;\n  }\n\n  if (sanitizeFn && typeof sanitizeFn === 'function') {\n    return sanitizeFn(unsafeHtml);\n  }\n\n  const domParser = new window.DOMParser();\n  const createdDocument = domParser.parseFromString(unsafeHtml, 'text/html');\n  const allowlistKeys = Object.keys(allowList);\n  const elements = [].concat(...createdDocument.body.querySelectorAll('*'));\n\n  for (let i = 0, len = elements.length; i < len; i++) {\n    const el = elements[i];\n    const elName = el.nodeName.toLowerCase();\n\n    if (!allowlistKeys.includes(elName)) {\n      el.remove();\n      continue;\n    }\n\n    const attributeList = [].concat(...el.attributes);\n    const allowedAttributes = [].concat(allowList['*'] || [], allowList[elName] || []);\n    attributeList.forEach(attr => {\n      if (!allowedAttribute(attr, allowedAttributes)) {\n        el.removeAttribute(attr.nodeName);\n      }\n    });\n  }\n\n  return createdDocument.body.innerHTML;\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): tooltip.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$4 = 'tooltip';\nconst DATA_KEY$4 = 'bs.tooltip';\nconst EVENT_KEY$4 = `.${DATA_KEY$4}`;\nconst CLASS_PREFIX$1 = 'bs-tooltip';\nconst BSCLS_PREFIX_REGEX$1 = new RegExp(`(^|\\\\s)${CLASS_PREFIX$1}\\\\S+`, 'g');\nconst DISALLOWED_ATTRIBUTES = new Set(['sanitize', 'allowList', 'sanitizeFn']);\nconst DefaultType$3 = {\n  animation: 'boolean',\n  template: 'string',\n  title: '(string|element|function)',\n  trigger: 'string',\n  delay: '(number|object)',\n  html: 'boolean',\n  selector: '(string|boolean)',\n  placement: '(string|function)',\n  offset: '(array|string|function)',\n  container: '(string|element|boolean)',\n  fallbackPlacements: 'array',\n  boundary: '(string|element)',\n  customClass: '(string|function)',\n  sanitize: 'boolean',\n  sanitizeFn: '(null|function)',\n  allowList: 'object',\n  popperConfig: '(null|object|function)'\n};\nconst AttachmentMap = {\n  AUTO: 'auto',\n  TOP: 'top',\n  RIGHT: isRTL() ? 'left' : 'right',\n  BOTTOM: 'bottom',\n  LEFT: isRTL() ? 'right' : 'left'\n};\nconst Default$3 = {\n  animation: true,\n  template: '<div class=\"tooltip\" role=\"tooltip\">' + '<div class=\"tooltip-arrow\"></div>' + '<div class=\"tooltip-inner\"></div>' + '</div>',\n  trigger: 'hover focus',\n  title: '',\n  delay: 0,\n  html: false,\n  selector: false,\n  placement: 'top',\n  offset: [0, 0],\n  container: false,\n  fallbackPlacements: ['top', 'right', 'bottom', 'left'],\n  boundary: 'clippingParents',\n  customClass: '',\n  sanitize: true,\n  sanitizeFn: null,\n  allowList: DefaultAllowlist,\n  popperConfig: null\n};\nconst Event$2 = {\n  HIDE: `hide${EVENT_KEY$4}`,\n  HIDDEN: `hidden${EVENT_KEY$4}`,\n  SHOW: `show${EVENT_KEY$4}`,\n  SHOWN: `shown${EVENT_KEY$4}`,\n  INSERTED: `inserted${EVENT_KEY$4}`,\n  CLICK: `click${EVENT_KEY$4}`,\n  FOCUSIN: `focusin${EVENT_KEY$4}`,\n  FOCUSOUT: `focusout${EVENT_KEY$4}`,\n  MOUSEENTER: `mouseenter${EVENT_KEY$4}`,\n  MOUSELEAVE: `mouseleave${EVENT_KEY$4}`\n};\nconst CLASS_NAME_FADE$3 = 'fade';\nconst CLASS_NAME_MODAL = 'modal';\nconst CLASS_NAME_SHOW$3 = 'show';\nconst HOVER_STATE_SHOW = 'show';\nconst HOVER_STATE_OUT = 'out';\nconst SELECTOR_TOOLTIP_INNER = '.tooltip-inner';\nconst TRIGGER_HOVER = 'hover';\nconst TRIGGER_FOCUS = 'focus';\nconst TRIGGER_CLICK = 'click';\nconst TRIGGER_MANUAL = 'manual';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Tooltip extends BaseComponent {\n  constructor(element, config) {\n    if (typeof Popper === 'undefined') {\n      throw new TypeError('Bootstrap\\'s tooltips require Popper (https://popper.js.org)');\n    }\n\n    super(element); // private\n\n    this._isEnabled = true;\n    this._timeout = 0;\n    this._hoverState = '';\n    this._activeTrigger = {};\n    this._popper = null; // Protected\n\n    this._config = this._getConfig(config);\n    this.tip = null;\n\n    this._setListeners();\n  } // Getters\n\n\n  static get Default() {\n    return Default$3;\n  }\n\n  static get NAME() {\n    return NAME$4;\n  }\n\n  static get Event() {\n    return Event$2;\n  }\n\n  static get DefaultType() {\n    return DefaultType$3;\n  } // Public\n\n\n  enable() {\n    this._isEnabled = true;\n  }\n\n  disable() {\n    this._isEnabled = false;\n  }\n\n  toggleEnabled() {\n    this._isEnabled = !this._isEnabled;\n  }\n\n  toggle(event) {\n    if (!this._isEnabled) {\n      return;\n    }\n\n    if (event) {\n      const context = this._initializeOnDelegatedTarget(event);\n\n      context._activeTrigger.click = !context._activeTrigger.click;\n\n      if (context._isWithActiveTrigger()) {\n        context._enter(null, context);\n      } else {\n        context._leave(null, context);\n      }\n    } else {\n      if (this.getTipElement().classList.contains(CLASS_NAME_SHOW$3)) {\n        this._leave(null, this);\n\n        return;\n      }\n\n      this._enter(null, this);\n    }\n  }\n\n  dispose() {\n    clearTimeout(this._timeout);\n    EventHandler.off(this._element.closest(`.${CLASS_NAME_MODAL}`), 'hide.bs.modal', this._hideModalHandler);\n\n    if (this.tip) {\n      this.tip.remove();\n    }\n\n    if (this._popper) {\n      this._popper.destroy();\n    }\n\n    super.dispose();\n  }\n\n  show() {\n    if (this._element.style.display === 'none') {\n      throw new Error('Please use show on visible elements');\n    }\n\n    if (!(this.isWithContent() && this._isEnabled)) {\n      return;\n    }\n\n    const showEvent = EventHandler.trigger(this._element, this.constructor.Event.SHOW);\n    const shadowRoot = findShadowRoot(this._element);\n    const isInTheDom = shadowRoot === null ? this._element.ownerDocument.documentElement.contains(this._element) : shadowRoot.contains(this._element);\n\n    if (showEvent.defaultPrevented || !isInTheDom) {\n      return;\n    }\n\n    const tip = this.getTipElement();\n    const tipId = getUID(this.constructor.NAME);\n    tip.setAttribute('id', tipId);\n\n    this._element.setAttribute('aria-describedby', tipId);\n\n    this.setContent();\n\n    if (this._config.animation) {\n      tip.classList.add(CLASS_NAME_FADE$3);\n    }\n\n    const placement = typeof this._config.placement === 'function' ? this._config.placement.call(this, tip, this._element) : this._config.placement;\n\n    const attachment = this._getAttachment(placement);\n\n    this._addAttachmentClass(attachment);\n\n    const {\n      container\n    } = this._config;\n    Data.set(tip, this.constructor.DATA_KEY, this);\n\n    if (!this._element.ownerDocument.documentElement.contains(this.tip)) {\n      container.appendChild(tip);\n      EventHandler.trigger(this._element, this.constructor.Event.INSERTED);\n    }\n\n    if (this._popper) {\n      this._popper.update();\n    } else {\n      this._popper = Popper.createPopper(this._element, tip, this._getPopperConfig(attachment));\n    }\n\n    tip.classList.add(CLASS_NAME_SHOW$3);\n    const customClass = typeof this._config.customClass === 'function' ? this._config.customClass() : this._config.customClass;\n\n    if (customClass) {\n      tip.classList.add(...customClass.split(' '));\n    } // If this is a touch-enabled device we add extra\n    // empty mouseover listeners to the body's immediate children;\n    // only needed because of broken event delegation on iOS\n    // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n\n\n    if ('ontouchstart' in document.documentElement) {\n      [].concat(...document.body.children).forEach(element => {\n        EventHandler.on(element, 'mouseover', noop);\n      });\n    }\n\n    const complete = () => {\n      const prevHoverState = this._hoverState;\n      this._hoverState = null;\n      EventHandler.trigger(this._element, this.constructor.Event.SHOWN);\n\n      if (prevHoverState === HOVER_STATE_OUT) {\n        this._leave(null, this);\n      }\n    };\n\n    const isAnimated = this.tip.classList.contains(CLASS_NAME_FADE$3);\n\n    this._queueCallback(complete, this.tip, isAnimated);\n  }\n\n  hide() {\n    if (!this._popper) {\n      return;\n    }\n\n    const tip = this.getTipElement();\n\n    const complete = () => {\n      if (this._isWithActiveTrigger()) {\n        return;\n      }\n\n      if (this._hoverState !== HOVER_STATE_SHOW) {\n        tip.remove();\n      }\n\n      this._cleanTipClass();\n\n      this._element.removeAttribute('aria-describedby');\n\n      EventHandler.trigger(this._element, this.constructor.Event.HIDDEN);\n\n      if (this._popper) {\n        this._popper.destroy();\n\n        this._popper = null;\n      }\n    };\n\n    const hideEvent = EventHandler.trigger(this._element, this.constructor.Event.HIDE);\n\n    if (hideEvent.defaultPrevented) {\n      return;\n    }\n\n    tip.classList.remove(CLASS_NAME_SHOW$3); // If this is a touch-enabled device we remove the extra\n    // empty mouseover listeners we added for iOS support\n\n    if ('ontouchstart' in document.documentElement) {\n      [].concat(...document.body.children).forEach(element => EventHandler.off(element, 'mouseover', noop));\n    }\n\n    this._activeTrigger[TRIGGER_CLICK] = false;\n    this._activeTrigger[TRIGGER_FOCUS] = false;\n    this._activeTrigger[TRIGGER_HOVER] = false;\n    const isAnimated = this.tip.classList.contains(CLASS_NAME_FADE$3);\n\n    this._queueCallback(complete, this.tip, isAnimated);\n\n    this._hoverState = '';\n  }\n\n  update() {\n    if (this._popper !== null) {\n      this._popper.update();\n    }\n  } // Protected\n\n\n  isWithContent() {\n    return Boolean(this.getTitle());\n  }\n\n  getTipElement() {\n    if (this.tip) {\n      return this.tip;\n    }\n\n    const element = document.createElement('div');\n    element.innerHTML = this._config.template;\n    this.tip = element.children[0];\n    return this.tip;\n  }\n\n  setContent() {\n    const tip = this.getTipElement();\n    this.setElementContent(SelectorEngine.findOne(SELECTOR_TOOLTIP_INNER, tip), this.getTitle());\n    tip.classList.remove(CLASS_NAME_FADE$3, CLASS_NAME_SHOW$3);\n  }\n\n  setElementContent(element, content) {\n    if (element === null) {\n      return;\n    }\n\n    if (isElement(content)) {\n      content = getElement(content); // content is a DOM node or a jQuery\n\n      if (this._config.html) {\n        if (content.parentNode !== element) {\n          element.innerHTML = '';\n          element.appendChild(content);\n        }\n      } else {\n        element.textContent = content.textContent;\n      }\n\n      return;\n    }\n\n    if (this._config.html) {\n      if (this._config.sanitize) {\n        content = sanitizeHtml(content, this._config.allowList, this._config.sanitizeFn);\n      }\n\n      element.innerHTML = content;\n    } else {\n      element.textContent = content;\n    }\n  }\n\n  getTitle() {\n    let title = this._element.getAttribute('data-bs-original-title');\n\n    if (!title) {\n      title = typeof this._config.title === 'function' ? this._config.title.call(this._element) : this._config.title;\n    }\n\n    return title;\n  }\n\n  updateAttachment(attachment) {\n    if (attachment === 'right') {\n      return 'end';\n    }\n\n    if (attachment === 'left') {\n      return 'start';\n    }\n\n    return attachment;\n  } // Private\n\n\n  _initializeOnDelegatedTarget(event, context) {\n    const dataKey = this.constructor.DATA_KEY;\n    context = context || Data.get(event.delegateTarget, dataKey);\n\n    if (!context) {\n      context = new this.constructor(event.delegateTarget, this._getDelegateConfig());\n      Data.set(event.delegateTarget, dataKey, context);\n    }\n\n    return context;\n  }\n\n  _getOffset() {\n    const {\n      offset\n    } = this._config;\n\n    if (typeof offset === 'string') {\n      return offset.split(',').map(val => Number.parseInt(val, 10));\n    }\n\n    if (typeof offset === 'function') {\n      return popperData => offset(popperData, this._element);\n    }\n\n    return offset;\n  }\n\n  _getPopperConfig(attachment) {\n    const defaultBsPopperConfig = {\n      placement: attachment,\n      modifiers: [{\n        name: 'flip',\n        options: {\n          fallbackPlacements: this._config.fallbackPlacements\n        }\n      }, {\n        name: 'offset',\n        options: {\n          offset: this._getOffset()\n        }\n      }, {\n        name: 'preventOverflow',\n        options: {\n          boundary: this._config.boundary\n        }\n      }, {\n        name: 'arrow',\n        options: {\n          element: `.${this.constructor.NAME}-arrow`\n        }\n      }, {\n        name: 'onChange',\n        enabled: true,\n        phase: 'afterWrite',\n        fn: data => this._handlePopperPlacementChange(data)\n      }],\n      onFirstUpdate: data => {\n        if (data.options.placement !== data.placement) {\n          this._handlePopperPlacementChange(data);\n        }\n      }\n    };\n    return { ...defaultBsPopperConfig,\n      ...(typeof this._config.popperConfig === 'function' ? this._config.popperConfig(defaultBsPopperConfig) : this._config.popperConfig)\n    };\n  }\n\n  _addAttachmentClass(attachment) {\n    this.getTipElement().classList.add(`${CLASS_PREFIX$1}-${this.updateAttachment(attachment)}`);\n  }\n\n  _getAttachment(placement) {\n    return AttachmentMap[placement.toUpperCase()];\n  }\n\n  _setListeners() {\n    const triggers = this._config.trigger.split(' ');\n\n    triggers.forEach(trigger => {\n      if (trigger === 'click') {\n        EventHandler.on(this._element, this.constructor.Event.CLICK, this._config.selector, event => this.toggle(event));\n      } else if (trigger !== TRIGGER_MANUAL) {\n        const eventIn = trigger === TRIGGER_HOVER ? this.constructor.Event.MOUSEENTER : this.constructor.Event.FOCUSIN;\n        const eventOut = trigger === TRIGGER_HOVER ? this.constructor.Event.MOUSELEAVE : this.constructor.Event.FOCUSOUT;\n        EventHandler.on(this._element, eventIn, this._config.selector, event => this._enter(event));\n        EventHandler.on(this._element, eventOut, this._config.selector, event => this._leave(event));\n      }\n    });\n\n    this._hideModalHandler = () => {\n      if (this._element) {\n        this.hide();\n      }\n    };\n\n    EventHandler.on(this._element.closest(`.${CLASS_NAME_MODAL}`), 'hide.bs.modal', this._hideModalHandler);\n\n    if (this._config.selector) {\n      this._config = { ...this._config,\n        trigger: 'manual',\n        selector: ''\n      };\n    } else {\n      this._fixTitle();\n    }\n  }\n\n  _fixTitle() {\n    const title = this._element.getAttribute('title');\n\n    const originalTitleType = typeof this._element.getAttribute('data-bs-original-title');\n\n    if (title || originalTitleType !== 'string') {\n      this._element.setAttribute('data-bs-original-title', title || '');\n\n      if (title && !this._element.getAttribute('aria-label') && !this._element.textContent) {\n        this._element.setAttribute('aria-label', title);\n      }\n\n      this._element.setAttribute('title', '');\n    }\n  }\n\n  _enter(event, context) {\n    context = this._initializeOnDelegatedTarget(event, context);\n\n    if (event) {\n      context._activeTrigger[event.type === 'focusin' ? TRIGGER_FOCUS : TRIGGER_HOVER] = true;\n    }\n\n    if (context.getTipElement().classList.contains(CLASS_NAME_SHOW$3) || context._hoverState === HOVER_STATE_SHOW) {\n      context._hoverState = HOVER_STATE_SHOW;\n      return;\n    }\n\n    clearTimeout(context._timeout);\n    context._hoverState = HOVER_STATE_SHOW;\n\n    if (!context._config.delay || !context._config.delay.show) {\n      context.show();\n      return;\n    }\n\n    context._timeout = setTimeout(() => {\n      if (context._hoverState === HOVER_STATE_SHOW) {\n        context.show();\n      }\n    }, context._config.delay.show);\n  }\n\n  _leave(event, context) {\n    context = this._initializeOnDelegatedTarget(event, context);\n\n    if (event) {\n      context._activeTrigger[event.type === 'focusout' ? TRIGGER_FOCUS : TRIGGER_HOVER] = context._element.contains(event.relatedTarget);\n    }\n\n    if (context._isWithActiveTrigger()) {\n      return;\n    }\n\n    clearTimeout(context._timeout);\n    context._hoverState = HOVER_STATE_OUT;\n\n    if (!context._config.delay || !context._config.delay.hide) {\n      context.hide();\n      return;\n    }\n\n    context._timeout = setTimeout(() => {\n      if (context._hoverState === HOVER_STATE_OUT) {\n        context.hide();\n      }\n    }, context._config.delay.hide);\n  }\n\n  _isWithActiveTrigger() {\n    for (const trigger in this._activeTrigger) {\n      if (this._activeTrigger[trigger]) {\n        return true;\n      }\n    }\n\n    return false;\n  }\n\n  _getConfig(config) {\n    const dataAttributes = Manipulator.getDataAttributes(this._element);\n    Object.keys(dataAttributes).forEach(dataAttr => {\n      if (DISALLOWED_ATTRIBUTES.has(dataAttr)) {\n        delete dataAttributes[dataAttr];\n      }\n    });\n    config = { ...this.constructor.Default,\n      ...dataAttributes,\n      ...(typeof config === 'object' && config ? config : {})\n    };\n    config.container = config.container === false ? document.body : getElement(config.container);\n\n    if (typeof config.delay === 'number') {\n      config.delay = {\n        show: config.delay,\n        hide: config.delay\n      };\n    }\n\n    if (typeof config.title === 'number') {\n      config.title = config.title.toString();\n    }\n\n    if (typeof config.content === 'number') {\n      config.content = config.content.toString();\n    }\n\n    typeCheckConfig(NAME$4, config, this.constructor.DefaultType);\n\n    if (config.sanitize) {\n      config.template = sanitizeHtml(config.template, config.allowList, config.sanitizeFn);\n    }\n\n    return config;\n  }\n\n  _getDelegateConfig() {\n    const config = {};\n\n    if (this._config) {\n      for (const key in this._config) {\n        if (this.constructor.Default[key] !== this._config[key]) {\n          config[key] = this._config[key];\n        }\n      }\n    }\n\n    return config;\n  }\n\n  _cleanTipClass() {\n    const tip = this.getTipElement();\n    const tabClass = tip.getAttribute('class').match(BSCLS_PREFIX_REGEX$1);\n\n    if (tabClass !== null && tabClass.length > 0) {\n      tabClass.map(token => token.trim()).forEach(tClass => tip.classList.remove(tClass));\n    }\n  }\n\n  _handlePopperPlacementChange(popperData) {\n    const {\n      state\n    } = popperData;\n\n    if (!state) {\n      return;\n    }\n\n    this.tip = state.elements.popper;\n\n    this._cleanTipClass();\n\n    this._addAttachmentClass(this._getAttachment(state.placement));\n  } // Static\n\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Tooltip.getOrCreateInstance(this, config);\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config]();\n      }\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Tooltip to jQuery only if jQuery is present\n */\n\n\ndefineJQueryPlugin(Tooltip);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): popover.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$3 = 'popover';\nconst DATA_KEY$3 = 'bs.popover';\nconst EVENT_KEY$3 = `.${DATA_KEY$3}`;\nconst CLASS_PREFIX = 'bs-popover';\nconst BSCLS_PREFIX_REGEX = new RegExp(`(^|\\\\s)${CLASS_PREFIX}\\\\S+`, 'g');\nconst Default$2 = { ...Tooltip.Default,\n  placement: 'right',\n  offset: [0, 8],\n  trigger: 'click',\n  content: '',\n  template: '<div class=\"popover\" role=\"tooltip\">' + '<div class=\"popover-arrow\"></div>' + '<h3 class=\"popover-header\"></h3>' + '<div class=\"popover-body\"></div>' + '</div>'\n};\nconst DefaultType$2 = { ...Tooltip.DefaultType,\n  content: '(string|element|function)'\n};\nconst Event$1 = {\n  HIDE: `hide${EVENT_KEY$3}`,\n  HIDDEN: `hidden${EVENT_KEY$3}`,\n  SHOW: `show${EVENT_KEY$3}`,\n  SHOWN: `shown${EVENT_KEY$3}`,\n  INSERTED: `inserted${EVENT_KEY$3}`,\n  CLICK: `click${EVENT_KEY$3}`,\n  FOCUSIN: `focusin${EVENT_KEY$3}`,\n  FOCUSOUT: `focusout${EVENT_KEY$3}`,\n  MOUSEENTER: `mouseenter${EVENT_KEY$3}`,\n  MOUSELEAVE: `mouseleave${EVENT_KEY$3}`\n};\nconst CLASS_NAME_FADE$2 = 'fade';\nconst CLASS_NAME_SHOW$2 = 'show';\nconst SELECTOR_TITLE = '.popover-header';\nconst SELECTOR_CONTENT = '.popover-body';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Popover extends Tooltip {\n  // Getters\n  static get Default() {\n    return Default$2;\n  }\n\n  static get NAME() {\n    return NAME$3;\n  }\n\n  static get Event() {\n    return Event$1;\n  }\n\n  static get DefaultType() {\n    return DefaultType$2;\n  } // Overrides\n\n\n  isWithContent() {\n    return this.getTitle() || this._getContent();\n  }\n\n  getTipElement() {\n    if (this.tip) {\n      return this.tip;\n    }\n\n    this.tip = super.getTipElement();\n\n    if (!this.getTitle()) {\n      SelectorEngine.findOne(SELECTOR_TITLE, this.tip).remove();\n    }\n\n    if (!this._getContent()) {\n      SelectorEngine.findOne(SELECTOR_CONTENT, this.tip).remove();\n    }\n\n    return this.tip;\n  }\n\n  setContent() {\n    const tip = this.getTipElement(); // we use append for html objects to maintain js events\n\n    this.setElementContent(SelectorEngine.findOne(SELECTOR_TITLE, tip), this.getTitle());\n\n    let content = this._getContent();\n\n    if (typeof content === 'function') {\n      content = content.call(this._element);\n    }\n\n    this.setElementContent(SelectorEngine.findOne(SELECTOR_CONTENT, tip), content);\n    tip.classList.remove(CLASS_NAME_FADE$2, CLASS_NAME_SHOW$2);\n  } // Private\n\n\n  _addAttachmentClass(attachment) {\n    this.getTipElement().classList.add(`${CLASS_PREFIX}-${this.updateAttachment(attachment)}`);\n  }\n\n  _getContent() {\n    return this._element.getAttribute('data-bs-content') || this._config.content;\n  }\n\n  _cleanTipClass() {\n    const tip = this.getTipElement();\n    const tabClass = tip.getAttribute('class').match(BSCLS_PREFIX_REGEX);\n\n    if (tabClass !== null && tabClass.length > 0) {\n      tabClass.map(token => token.trim()).forEach(tClass => tip.classList.remove(tClass));\n    }\n  } // Static\n\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Popover.getOrCreateInstance(this, config);\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config]();\n      }\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Popover to jQuery only if jQuery is present\n */\n\n\ndefineJQueryPlugin(Popover);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): scrollspy.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$2 = 'scrollspy';\nconst DATA_KEY$2 = 'bs.scrollspy';\nconst EVENT_KEY$2 = `.${DATA_KEY$2}`;\nconst DATA_API_KEY$1 = '.data-api';\nconst Default$1 = {\n  offset: 10,\n  method: 'auto',\n  target: ''\n};\nconst DefaultType$1 = {\n  offset: 'number',\n  method: 'string',\n  target: '(string|element)'\n};\nconst EVENT_ACTIVATE = `activate${EVENT_KEY$2}`;\nconst EVENT_SCROLL = `scroll${EVENT_KEY$2}`;\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY$2}${DATA_API_KEY$1}`;\nconst CLASS_NAME_DROPDOWN_ITEM = 'dropdown-item';\nconst CLASS_NAME_ACTIVE$1 = 'active';\nconst SELECTOR_DATA_SPY = '[data-bs-spy=\"scroll\"]';\nconst SELECTOR_NAV_LIST_GROUP$1 = '.nav, .list-group';\nconst SELECTOR_NAV_LINKS = '.nav-link';\nconst SELECTOR_NAV_ITEMS = '.nav-item';\nconst SELECTOR_LIST_ITEMS = '.list-group-item';\nconst SELECTOR_DROPDOWN$1 = '.dropdown';\nconst SELECTOR_DROPDOWN_TOGGLE$1 = '.dropdown-toggle';\nconst METHOD_OFFSET = 'offset';\nconst METHOD_POSITION = 'position';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass ScrollSpy extends BaseComponent {\n  constructor(element, config) {\n    super(element);\n    this._scrollElement = this._element.tagName === 'BODY' ? window : this._element;\n    this._config = this._getConfig(config);\n    this._selector = `${this._config.target} ${SELECTOR_NAV_LINKS}, ${this._config.target} ${SELECTOR_LIST_ITEMS}, ${this._config.target} .${CLASS_NAME_DROPDOWN_ITEM}`;\n    this._offsets = [];\n    this._targets = [];\n    this._activeTarget = null;\n    this._scrollHeight = 0;\n    EventHandler.on(this._scrollElement, EVENT_SCROLL, () => this._process());\n    this.refresh();\n\n    this._process();\n  } // Getters\n\n\n  static get Default() {\n    return Default$1;\n  }\n\n  static get NAME() {\n    return NAME$2;\n  } // Public\n\n\n  refresh() {\n    const autoMethod = this._scrollElement === this._scrollElement.window ? METHOD_OFFSET : METHOD_POSITION;\n    const offsetMethod = this._config.method === 'auto' ? autoMethod : this._config.method;\n    const offsetBase = offsetMethod === METHOD_POSITION ? this._getScrollTop() : 0;\n    this._offsets = [];\n    this._targets = [];\n    this._scrollHeight = this._getScrollHeight();\n    const targets = SelectorEngine.find(this._selector);\n    targets.map(element => {\n      const targetSelector = getSelectorFromElement(element);\n      const target = targetSelector ? SelectorEngine.findOne(targetSelector) : null;\n\n      if (target) {\n        const targetBCR = target.getBoundingClientRect();\n\n        if (targetBCR.width || targetBCR.height) {\n          return [Manipulator[offsetMethod](target).top + offsetBase, targetSelector];\n        }\n      }\n\n      return null;\n    }).filter(item => item).sort((a, b) => a[0] - b[0]).forEach(item => {\n      this._offsets.push(item[0]);\n\n      this._targets.push(item[1]);\n    });\n  }\n\n  dispose() {\n    EventHandler.off(this._scrollElement, EVENT_KEY$2);\n    super.dispose();\n  } // Private\n\n\n  _getConfig(config) {\n    config = { ...Default$1,\n      ...Manipulator.getDataAttributes(this._element),\n      ...(typeof config === 'object' && config ? config : {})\n    };\n\n    if (typeof config.target !== 'string' && isElement(config.target)) {\n      let {\n        id\n      } = config.target;\n\n      if (!id) {\n        id = getUID(NAME$2);\n        config.target.id = id;\n      }\n\n      config.target = `#${id}`;\n    }\n\n    typeCheckConfig(NAME$2, config, DefaultType$1);\n    return config;\n  }\n\n  _getScrollTop() {\n    return this._scrollElement === window ? this._scrollElement.pageYOffset : this._scrollElement.scrollTop;\n  }\n\n  _getScrollHeight() {\n    return this._scrollElement.scrollHeight || Math.max(document.body.scrollHeight, document.documentElement.scrollHeight);\n  }\n\n  _getOffsetHeight() {\n    return this._scrollElement === window ? window.innerHeight : this._scrollElement.getBoundingClientRect().height;\n  }\n\n  _process() {\n    const scrollTop = this._getScrollTop() + this._config.offset;\n\n    const scrollHeight = this._getScrollHeight();\n\n    const maxScroll = this._config.offset + scrollHeight - this._getOffsetHeight();\n\n    if (this._scrollHeight !== scrollHeight) {\n      this.refresh();\n    }\n\n    if (scrollTop >= maxScroll) {\n      const target = this._targets[this._targets.length - 1];\n\n      if (this._activeTarget !== target) {\n        this._activate(target);\n      }\n\n      return;\n    }\n\n    if (this._activeTarget && scrollTop < this._offsets[0] && this._offsets[0] > 0) {\n      this._activeTarget = null;\n\n      this._clear();\n\n      return;\n    }\n\n    for (let i = this._offsets.length; i--;) {\n      const isActiveTarget = this._activeTarget !== this._targets[i] && scrollTop >= this._offsets[i] && (typeof this._offsets[i + 1] === 'undefined' || scrollTop < this._offsets[i + 1]);\n\n      if (isActiveTarget) {\n        this._activate(this._targets[i]);\n      }\n    }\n  }\n\n  _activate(target) {\n    this._activeTarget = target;\n\n    this._clear();\n\n    const queries = this._selector.split(',').map(selector => `${selector}[data-bs-target=\"${target}\"],${selector}[href=\"${target}\"]`);\n\n    const link = SelectorEngine.findOne(queries.join(','));\n\n    if (link.classList.contains(CLASS_NAME_DROPDOWN_ITEM)) {\n      SelectorEngine.findOne(SELECTOR_DROPDOWN_TOGGLE$1, link.closest(SELECTOR_DROPDOWN$1)).classList.add(CLASS_NAME_ACTIVE$1);\n      link.classList.add(CLASS_NAME_ACTIVE$1);\n    } else {\n      // Set triggered link as active\n      link.classList.add(CLASS_NAME_ACTIVE$1);\n      SelectorEngine.parents(link, SELECTOR_NAV_LIST_GROUP$1).forEach(listGroup => {\n        // Set triggered links parents as active\n        // With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor\n        SelectorEngine.prev(listGroup, `${SELECTOR_NAV_LINKS}, ${SELECTOR_LIST_ITEMS}`).forEach(item => item.classList.add(CLASS_NAME_ACTIVE$1)); // Handle special case when .nav-link is inside .nav-item\n\n        SelectorEngine.prev(listGroup, SELECTOR_NAV_ITEMS).forEach(navItem => {\n          SelectorEngine.children(navItem, SELECTOR_NAV_LINKS).forEach(item => item.classList.add(CLASS_NAME_ACTIVE$1));\n        });\n      });\n    }\n\n    EventHandler.trigger(this._scrollElement, EVENT_ACTIVATE, {\n      relatedTarget: target\n    });\n  }\n\n  _clear() {\n    SelectorEngine.find(this._selector).filter(node => node.classList.contains(CLASS_NAME_ACTIVE$1)).forEach(node => node.classList.remove(CLASS_NAME_ACTIVE$1));\n  } // Static\n\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = ScrollSpy.getOrCreateInstance(this, config);\n\n      if (typeof config !== 'string') {\n        return;\n      }\n\n      if (typeof data[config] === 'undefined') {\n        throw new TypeError(`No method named \"${config}\"`);\n      }\n\n      data[config]();\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n  SelectorEngine.find(SELECTOR_DATA_SPY).forEach(spy => new ScrollSpy(spy));\n});\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .ScrollSpy to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(ScrollSpy);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): tab.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$1 = 'tab';\nconst DATA_KEY$1 = 'bs.tab';\nconst EVENT_KEY$1 = `.${DATA_KEY$1}`;\nconst DATA_API_KEY = '.data-api';\nconst EVENT_HIDE$1 = `hide${EVENT_KEY$1}`;\nconst EVENT_HIDDEN$1 = `hidden${EVENT_KEY$1}`;\nconst EVENT_SHOW$1 = `show${EVENT_KEY$1}`;\nconst EVENT_SHOWN$1 = `shown${EVENT_KEY$1}`;\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY$1}${DATA_API_KEY}`;\nconst CLASS_NAME_DROPDOWN_MENU = 'dropdown-menu';\nconst CLASS_NAME_ACTIVE = 'active';\nconst CLASS_NAME_FADE$1 = 'fade';\nconst CLASS_NAME_SHOW$1 = 'show';\nconst SELECTOR_DROPDOWN = '.dropdown';\nconst SELECTOR_NAV_LIST_GROUP = '.nav, .list-group';\nconst SELECTOR_ACTIVE = '.active';\nconst SELECTOR_ACTIVE_UL = ':scope > li > .active';\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"tab\"], [data-bs-toggle=\"pill\"], [data-bs-toggle=\"list\"]';\nconst SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle';\nconst SELECTOR_DROPDOWN_ACTIVE_CHILD = ':scope > .dropdown-menu .active';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Tab extends BaseComponent {\n  // Getters\n  static get NAME() {\n    return NAME$1;\n  } // Public\n\n\n  show() {\n    if (this._element.parentNode && this._element.parentNode.nodeType === Node.ELEMENT_NODE && this._element.classList.contains(CLASS_NAME_ACTIVE)) {\n      return;\n    }\n\n    let previous;\n    const target = getElementFromSelector(this._element);\n\n    const listElement = this._element.closest(SELECTOR_NAV_LIST_GROUP);\n\n    if (listElement) {\n      const itemSelector = listElement.nodeName === 'UL' || listElement.nodeName === 'OL' ? SELECTOR_ACTIVE_UL : SELECTOR_ACTIVE;\n      previous = SelectorEngine.find(itemSelector, listElement);\n      previous = previous[previous.length - 1];\n    }\n\n    const hideEvent = previous ? EventHandler.trigger(previous, EVENT_HIDE$1, {\n      relatedTarget: this._element\n    }) : null;\n    const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$1, {\n      relatedTarget: previous\n    });\n\n    if (showEvent.defaultPrevented || hideEvent !== null && hideEvent.defaultPrevented) {\n      return;\n    }\n\n    this._activate(this._element, listElement);\n\n    const complete = () => {\n      EventHandler.trigger(previous, EVENT_HIDDEN$1, {\n        relatedTarget: this._element\n      });\n      EventHandler.trigger(this._element, EVENT_SHOWN$1, {\n        relatedTarget: previous\n      });\n    };\n\n    if (target) {\n      this._activate(target, target.parentNode, complete);\n    } else {\n      complete();\n    }\n  } // Private\n\n\n  _activate(element, container, callback) {\n    const activeElements = container && (container.nodeName === 'UL' || container.nodeName === 'OL') ? SelectorEngine.find(SELECTOR_ACTIVE_UL, container) : SelectorEngine.children(container, SELECTOR_ACTIVE);\n    const active = activeElements[0];\n    const isTransitioning = callback && active && active.classList.contains(CLASS_NAME_FADE$1);\n\n    const complete = () => this._transitionComplete(element, active, callback);\n\n    if (active && isTransitioning) {\n      active.classList.remove(CLASS_NAME_SHOW$1);\n\n      this._queueCallback(complete, element, true);\n    } else {\n      complete();\n    }\n  }\n\n  _transitionComplete(element, active, callback) {\n    if (active) {\n      active.classList.remove(CLASS_NAME_ACTIVE);\n      const dropdownChild = SelectorEngine.findOne(SELECTOR_DROPDOWN_ACTIVE_CHILD, active.parentNode);\n\n      if (dropdownChild) {\n        dropdownChild.classList.remove(CLASS_NAME_ACTIVE);\n      }\n\n      if (active.getAttribute('role') === 'tab') {\n        active.setAttribute('aria-selected', false);\n      }\n    }\n\n    element.classList.add(CLASS_NAME_ACTIVE);\n\n    if (element.getAttribute('role') === 'tab') {\n      element.setAttribute('aria-selected', true);\n    }\n\n    reflow(element);\n\n    if (element.classList.contains(CLASS_NAME_FADE$1)) {\n      element.classList.add(CLASS_NAME_SHOW$1);\n    }\n\n    let parent = element.parentNode;\n\n    if (parent && parent.nodeName === 'LI') {\n      parent = parent.parentNode;\n    }\n\n    if (parent && parent.classList.contains(CLASS_NAME_DROPDOWN_MENU)) {\n      const dropdownElement = element.closest(SELECTOR_DROPDOWN);\n\n      if (dropdownElement) {\n        SelectorEngine.find(SELECTOR_DROPDOWN_TOGGLE, dropdownElement).forEach(dropdown => dropdown.classList.add(CLASS_NAME_ACTIVE));\n      }\n\n      element.setAttribute('aria-expanded', true);\n    }\n\n    if (callback) {\n      callback();\n    }\n  } // Static\n\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Tab.getOrCreateInstance(this);\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config]();\n      }\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n  if (['A', 'AREA'].includes(this.tagName)) {\n    event.preventDefault();\n  }\n\n  if (isDisabled(this)) {\n    return;\n  }\n\n  const data = Tab.getOrCreateInstance(this);\n  data.show();\n});\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Tab to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Tab);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): toast.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'toast';\nconst DATA_KEY = 'bs.toast';\nconst EVENT_KEY = `.${DATA_KEY}`;\nconst EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY}`;\nconst EVENT_MOUSEOVER = `mouseover${EVENT_KEY}`;\nconst EVENT_MOUSEOUT = `mouseout${EVENT_KEY}`;\nconst EVENT_FOCUSIN = `focusin${EVENT_KEY}`;\nconst EVENT_FOCUSOUT = `focusout${EVENT_KEY}`;\nconst EVENT_HIDE = `hide${EVENT_KEY}`;\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`;\nconst EVENT_SHOW = `show${EVENT_KEY}`;\nconst EVENT_SHOWN = `shown${EVENT_KEY}`;\nconst CLASS_NAME_FADE = 'fade';\nconst CLASS_NAME_HIDE = 'hide';\nconst CLASS_NAME_SHOW = 'show';\nconst CLASS_NAME_SHOWING = 'showing';\nconst DefaultType = {\n  animation: 'boolean',\n  autohide: 'boolean',\n  delay: 'number'\n};\nconst Default = {\n  animation: true,\n  autohide: true,\n  delay: 5000\n};\nconst SELECTOR_DATA_DISMISS = '[data-bs-dismiss=\"toast\"]';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Toast extends BaseComponent {\n  constructor(element, config) {\n    super(element);\n    this._config = this._getConfig(config);\n    this._timeout = null;\n    this._hasMouseInteraction = false;\n    this._hasKeyboardInteraction = false;\n\n    this._setListeners();\n  } // Getters\n\n\n  static get DefaultType() {\n    return DefaultType;\n  }\n\n  static get Default() {\n    return Default;\n  }\n\n  static get NAME() {\n    return NAME;\n  } // Public\n\n\n  show() {\n    const showEvent = EventHandler.trigger(this._element, EVENT_SHOW);\n\n    if (showEvent.defaultPrevented) {\n      return;\n    }\n\n    this._clearTimeout();\n\n    if (this._config.animation) {\n      this._element.classList.add(CLASS_NAME_FADE);\n    }\n\n    const complete = () => {\n      this._element.classList.remove(CLASS_NAME_SHOWING);\n\n      this._element.classList.add(CLASS_NAME_SHOW);\n\n      EventHandler.trigger(this._element, EVENT_SHOWN);\n\n      this._maybeScheduleHide();\n    };\n\n    this._element.classList.remove(CLASS_NAME_HIDE);\n\n    reflow(this._element);\n\n    this._element.classList.add(CLASS_NAME_SHOWING);\n\n    this._queueCallback(complete, this._element, this._config.animation);\n  }\n\n  hide() {\n    if (!this._element.classList.contains(CLASS_NAME_SHOW)) {\n      return;\n    }\n\n    const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE);\n\n    if (hideEvent.defaultPrevented) {\n      return;\n    }\n\n    const complete = () => {\n      this._element.classList.add(CLASS_NAME_HIDE);\n\n      EventHandler.trigger(this._element, EVENT_HIDDEN);\n    };\n\n    this._element.classList.remove(CLASS_NAME_SHOW);\n\n    this._queueCallback(complete, this._element, this._config.animation);\n  }\n\n  dispose() {\n    this._clearTimeout();\n\n    if (this._element.classList.contains(CLASS_NAME_SHOW)) {\n      this._element.classList.remove(CLASS_NAME_SHOW);\n    }\n\n    super.dispose();\n  } // Private\n\n\n  _getConfig(config) {\n    config = { ...Default,\n      ...Manipulator.getDataAttributes(this._element),\n      ...(typeof config === 'object' && config ? config : {})\n    };\n    typeCheckConfig(NAME, config, this.constructor.DefaultType);\n    return config;\n  }\n\n  _maybeScheduleHide() {\n    if (!this._config.autohide) {\n      return;\n    }\n\n    if (this._hasMouseInteraction || this._hasKeyboardInteraction) {\n      return;\n    }\n\n    this._timeout = setTimeout(() => {\n      this.hide();\n    }, this._config.delay);\n  }\n\n  _onInteraction(event, isInteracting) {\n    switch (event.type) {\n      case 'mouseover':\n      case 'mouseout':\n        this._hasMouseInteraction = isInteracting;\n        break;\n\n      case 'focusin':\n      case 'focusout':\n        this._hasKeyboardInteraction = isInteracting;\n        break;\n    }\n\n    if (isInteracting) {\n      this._clearTimeout();\n\n      return;\n    }\n\n    const nextElement = event.relatedTarget;\n\n    if (this._element === nextElement || this._element.contains(nextElement)) {\n      return;\n    }\n\n    this._maybeScheduleHide();\n  }\n\n  _setListeners() {\n    EventHandler.on(this._element, EVENT_CLICK_DISMISS, SELECTOR_DATA_DISMISS, () => this.hide());\n    EventHandler.on(this._element, EVENT_MOUSEOVER, event => this._onInteraction(event, true));\n    EventHandler.on(this._element, EVENT_MOUSEOUT, event => this._onInteraction(event, false));\n    EventHandler.on(this._element, EVENT_FOCUSIN, event => this._onInteraction(event, true));\n    EventHandler.on(this._element, EVENT_FOCUSOUT, event => this._onInteraction(event, false));\n  }\n\n  _clearTimeout() {\n    clearTimeout(this._timeout);\n    this._timeout = null;\n  } // Static\n\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Toast.getOrCreateInstance(this, config);\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config](this);\n      }\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Toast to jQuery only if jQuery is present\n */\n\n\ndefineJQueryPlugin(Toast);\n\nexport { Alert, Button, Carousel, Collapse, Dropdown, Modal, Offcanvas, Popover, ScrollSpy, Tab, Toast, Tooltip };\n//# sourceMappingURL=bootstrap.esm.js.map\n"
  },
  {
    "path": "src/sourceDev.WebApp/SharedThemes/litera/wwwroot/js/jquery.js",
    "content": "/*!\n * jQuery JavaScript Library v3.7.0\n * https://jquery.com/\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license\n * https://jquery.org/license\n *\n * Date: 2023-05-11T18:29Z\n */\n(function (global, factory) {\n\n\t\"use strict\";\n\n\tif (typeof module === \"object\" && typeof module.exports === \"object\") {\n\n\t\t// For CommonJS and CommonJS-like environments where a proper `window`\n\t\t// is present, execute the factory and get jQuery.\n\t\t// For environments that do not have a `window` with a `document`\n\t\t// (such as Node.js), expose a factory as module.exports.\n\t\t// This accentuates the need for the creation of a real `window`.\n\t\t// e.g. var jQuery = require(\"jquery\")(window);\n\t\t// See ticket trac-14549 for more info.\n\t\tmodule.exports = global.document ?\n\t\t\tfactory(global, true) :\n\t\t\tfunction (w) {\n\t\t\t\tif (!w.document) {\n\t\t\t\t\tthrow new Error(\"jQuery requires a window with a document\");\n\t\t\t\t}\n\t\t\t\treturn factory(w);\n\t\t\t};\n\t} else {\n\t\tfactory(global);\n\t}\n\n\t// Pass this if window is not defined yet\n})(typeof window !== \"undefined\" ? window : this, function (window, noGlobal) {\n\n\t// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1\n\t// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode\n\t// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common\n\t// enough that all such attempts are guarded in a try block.\n\t\"use strict\";\n\n\tvar arr = [];\n\n\tvar getProto = Object.getPrototypeOf;\n\n\tvar slice = arr.slice;\n\n\tvar flat = arr.flat ? function (array) {\n\t\treturn arr.flat.call(array);\n\t} : function (array) {\n\t\treturn arr.concat.apply([], array);\n\t};\n\n\n\tvar push = arr.push;\n\n\tvar indexOf = arr.indexOf;\n\n\tvar class2type = {};\n\n\tvar toString = class2type.toString;\n\n\tvar hasOwn = class2type.hasOwnProperty;\n\n\tvar fnToString = hasOwn.toString;\n\n\tvar ObjectFunctionString = fnToString.call(Object);\n\n\tvar support = {};\n\n\tvar isFunction = function isFunction(obj) {\n\n\t\t// Support: Chrome <=57, Firefox <=52\n\t\t// In some browsers, typeof returns \"function\" for HTML <object> elements\n\t\t// (i.e., `typeof document.createElement( \"object\" ) === \"function\"`).\n\t\t// We don't want to classify *any* DOM node as a function.\n\t\t// Support: QtWeb <=3.8.5, WebKit <=534.34, wkhtmltopdf tool <=0.12.5\n\t\t// Plus for old WebKit, typeof returns \"function\" for HTML collections\n\t\t// (e.g., `typeof document.getElementsByTagName(\"div\") === \"function\"`). (gh-4756)\n\t\treturn typeof obj === \"function\" && typeof obj.nodeType !== \"number\" &&\n\t\t\ttypeof obj.item !== \"function\";\n\t};\n\n\n\tvar isWindow = function isWindow(obj) {\n\t\treturn obj != null && obj === obj.window;\n\t};\n\n\n\tvar document = window.document;\n\n\n\n\tvar preservedScriptAttributes = {\n\t\ttype: true,\n\t\tsrc: true,\n\t\tnonce: true,\n\t\tnoModule: true\n\t};\n\n\tfunction DOMEval(code, node, doc) {\n\t\tdoc = doc || document;\n\n\t\tvar i, val,\n\t\t\tscript = doc.createElement(\"script\");\n\n\t\tscript.text = code;\n\t\tif (node) {\n\t\t\tfor (i in preservedScriptAttributes) {\n\n\t\t\t\t// Support: Firefox 64+, Edge 18+\n\t\t\t\t// Some browsers don't support the \"nonce\" property on scripts.\n\t\t\t\t// On the other hand, just using `getAttribute` is not enough as\n\t\t\t\t// the `nonce` attribute is reset to an empty string whenever it\n\t\t\t\t// becomes browsing-context connected.\n\t\t\t\t// See https://github.com/whatwg/html/issues/2369\n\t\t\t\t// See https://html.spec.whatwg.org/#nonce-attributes\n\t\t\t\t// The `node.getAttribute` check was added for the sake of\n\t\t\t\t// `jQuery.globalEval` so that it can fake a nonce-containing node\n\t\t\t\t// via an object.\n\t\t\t\tval = node[i] || node.getAttribute && node.getAttribute(i);\n\t\t\t\tif (val) {\n\t\t\t\t\tscript.setAttribute(i, val);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tdoc.head.appendChild(script).parentNode.removeChild(script);\n\t}\n\n\n\tfunction toType(obj) {\n\t\tif (obj == null) {\n\t\t\treturn obj + \"\";\n\t\t}\n\n\t\t// Support: Android <=2.3 only (functionish RegExp)\n\t\treturn typeof obj === \"object\" || typeof obj === \"function\" ?\n\t\t\tclass2type[toString.call(obj)] || \"object\" :\n\t\t\ttypeof obj;\n\t}\n\t/* global Symbol */\n\t// Defining this global in .eslintrc.json would create a danger of using the global\n\t// unguarded in another place, it seems safer to define global only for this module\n\n\n\n\tvar version = \"3.7.0\",\n\n\t\trhtmlSuffix = /HTML$/i,\n\n\t\t// Define a local copy of jQuery\n\t\tjQuery = function (selector, context) {\n\n\t\t\t// The jQuery object is actually just the init constructor 'enhanced'\n\t\t\t// Need init if jQuery is called (just allow error to be thrown if not included)\n\t\t\treturn new jQuery.fn.init(selector, context);\n\t\t};\n\n\tjQuery.fn = jQuery.prototype = {\n\n\t\t// The current version of jQuery being used\n\t\tjquery: version,\n\n\t\tconstructor: jQuery,\n\n\t\t// The default length of a jQuery object is 0\n\t\tlength: 0,\n\n\t\ttoArray: function () {\n\t\t\treturn slice.call(this);\n\t\t},\n\n\t\t// Get the Nth element in the matched element set OR\n\t\t// Get the whole matched element set as a clean array\n\t\tget: function (num) {\n\n\t\t\t// Return all the elements in a clean array\n\t\t\tif (num == null) {\n\t\t\t\treturn slice.call(this);\n\t\t\t}\n\n\t\t\t// Return just the one element from the set\n\t\t\treturn num < 0 ? this[num + this.length] : this[num];\n\t\t},\n\n\t\t// Take an array of elements and push it onto the stack\n\t\t// (returning the new matched element set)\n\t\tpushStack: function (elems) {\n\n\t\t\t// Build a new jQuery matched element set\n\t\t\tvar ret = jQuery.merge(this.constructor(), elems);\n\n\t\t\t// Add the old object onto the stack (as a reference)\n\t\t\tret.prevObject = this;\n\n\t\t\t// Return the newly-formed element set\n\t\t\treturn ret;\n\t\t},\n\n\t\t// Execute a callback for every element in the matched set.\n\t\teach: function (callback) {\n\t\t\treturn jQuery.each(this, callback);\n\t\t},\n\n\t\tmap: function (callback) {\n\t\t\treturn this.pushStack(jQuery.map(this, function (elem, i) {\n\t\t\t\treturn callback.call(elem, i, elem);\n\t\t\t}));\n\t\t},\n\n\t\tslice: function () {\n\t\t\treturn this.pushStack(slice.apply(this, arguments));\n\t\t},\n\n\t\tfirst: function () {\n\t\t\treturn this.eq(0);\n\t\t},\n\n\t\tlast: function () {\n\t\t\treturn this.eq(-1);\n\t\t},\n\n\t\teven: function () {\n\t\t\treturn this.pushStack(jQuery.grep(this, function (_elem, i) {\n\t\t\t\treturn (i + 1) % 2;\n\t\t\t}));\n\t\t},\n\n\t\todd: function () {\n\t\t\treturn this.pushStack(jQuery.grep(this, function (_elem, i) {\n\t\t\t\treturn i % 2;\n\t\t\t}));\n\t\t},\n\n\t\teq: function (i) {\n\t\t\tvar len = this.length,\n\t\t\t\tj = +i + (i < 0 ? len : 0);\n\t\t\treturn this.pushStack(j >= 0 && j < len ? [this[j]] : []);\n\t\t},\n\n\t\tend: function () {\n\t\t\treturn this.prevObject || this.constructor();\n\t\t},\n\n\t\t// For internal use only.\n\t\t// Behaves like an Array's method, not like a jQuery method.\n\t\tpush: push,\n\t\tsort: arr.sort,\n\t\tsplice: arr.splice\n\t};\n\n\tjQuery.extend = jQuery.fn.extend = function () {\n\t\tvar options, name, src, copy, copyIsArray, clone,\n\t\t\ttarget = arguments[0] || {},\n\t\t\ti = 1,\n\t\t\tlength = arguments.length,\n\t\t\tdeep = false;\n\n\t\t// Handle a deep copy situation\n\t\tif (typeof target === \"boolean\") {\n\t\t\tdeep = target;\n\n\t\t\t// Skip the boolean and the target\n\t\t\ttarget = arguments[i] || {};\n\t\t\ti++;\n\t\t}\n\n\t\t// Handle case when target is a string or something (possible in deep copy)\n\t\tif (typeof target !== \"object\" && !isFunction(target)) {\n\t\t\ttarget = {};\n\t\t}\n\n\t\t// Extend jQuery itself if only one argument is passed\n\t\tif (i === length) {\n\t\t\ttarget = this;\n\t\t\ti--;\n\t\t}\n\n\t\tfor (; i < length; i++) {\n\n\t\t\t// Only deal with non-null/undefined values\n\t\t\tif ((options = arguments[i]) != null) {\n\n\t\t\t\t// Extend the base object\n\t\t\t\tfor (name in options) {\n\t\t\t\t\tcopy = options[name];\n\n\t\t\t\t\t// Prevent Object.prototype pollution\n\t\t\t\t\t// Prevent never-ending loop\n\t\t\t\t\tif (name === \"__proto__\" || target === copy) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\t\tif (deep && copy && (jQuery.isPlainObject(copy) ||\n\t\t\t\t\t\t(copyIsArray = Array.isArray(copy)))) {\n\t\t\t\t\t\tsrc = target[name];\n\n\t\t\t\t\t\t// Ensure proper type for the source value\n\t\t\t\t\t\tif (copyIsArray && !Array.isArray(src)) {\n\t\t\t\t\t\t\tclone = [];\n\t\t\t\t\t\t} else if (!copyIsArray && !jQuery.isPlainObject(src)) {\n\t\t\t\t\t\t\tclone = {};\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tclone = src;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcopyIsArray = false;\n\n\t\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\t\ttarget[name] = jQuery.extend(deep, clone, copy);\n\n\t\t\t\t\t\t// Don't bring in undefined values\n\t\t\t\t\t} else if (copy !== undefined) {\n\t\t\t\t\t\ttarget[name] = copy;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Return the modified object\n\t\treturn target;\n\t};\n\n\tjQuery.extend({\n\n\t\t// Unique for each copy of jQuery on the page\n\t\texpando: \"jQuery\" + (version + Math.random()).replace(/\\D/g, \"\"),\n\n\t\t// Assume jQuery is ready without the ready module\n\t\tisReady: true,\n\n\t\terror: function (msg) {\n\t\t\tthrow new Error(msg);\n\t\t},\n\n\t\tnoop: function () { },\n\n\t\tisPlainObject: function (obj) {\n\t\t\tvar proto, Ctor;\n\n\t\t\t// Detect obvious negatives\n\t\t\t// Use toString instead of jQuery.type to catch host objects\n\t\t\tif (!obj || toString.call(obj) !== \"[object Object]\") {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tproto = getProto(obj);\n\n\t\t\t// Objects with no prototype (e.g., `Object.create( null )`) are plain\n\t\t\tif (!proto) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\t// Objects with prototype are plain iff they were constructed by a global Object function\n\t\t\tCtor = hasOwn.call(proto, \"constructor\") && proto.constructor;\n\t\t\treturn typeof Ctor === \"function\" && fnToString.call(Ctor) === ObjectFunctionString;\n\t\t},\n\n\t\tisEmptyObject: function (obj) {\n\t\t\tvar name;\n\n\t\t\tfor (name in obj) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\n\t\t// Evaluates a script in a provided context; falls back to the global one\n\t\t// if not specified.\n\t\tglobalEval: function (code, options, doc) {\n\t\t\tDOMEval(code, { nonce: options && options.nonce }, doc);\n\t\t},\n\n\t\teach: function (obj, callback) {\n\t\t\tvar length, i = 0;\n\n\t\t\tif (isArrayLike(obj)) {\n\t\t\t\tlength = obj.length;\n\t\t\t\tfor (; i < length; i++) {\n\t\t\t\t\tif (callback.call(obj[i], i, obj[i]) === false) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor (i in obj) {\n\t\t\t\t\tif (callback.call(obj[i], i, obj[i]) === false) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn obj;\n\t\t},\n\n\n\t\t// Retrieve the text value of an array of DOM nodes\n\t\ttext: function (elem) {\n\t\t\tvar node,\n\t\t\t\tret = \"\",\n\t\t\t\ti = 0,\n\t\t\t\tnodeType = elem.nodeType;\n\n\t\t\tif (!nodeType) {\n\n\t\t\t\t// If no nodeType, this is expected to be an array\n\t\t\t\twhile ((node = elem[i++])) {\n\n\t\t\t\t\t// Do not traverse comment nodes\n\t\t\t\t\tret += jQuery.text(node);\n\t\t\t\t}\n\t\t\t} else if (nodeType === 1 || nodeType === 9 || nodeType === 11) {\n\t\t\t\treturn elem.textContent;\n\t\t\t} else if (nodeType === 3 || nodeType === 4) {\n\t\t\t\treturn elem.nodeValue;\n\t\t\t}\n\n\t\t\t// Do not include comment or processing instruction nodes\n\n\t\t\treturn ret;\n\t\t},\n\n\t\t// results is for internal usage only\n\t\tmakeArray: function (arr, results) {\n\t\t\tvar ret = results || [];\n\n\t\t\tif (arr != null) {\n\t\t\t\tif (isArrayLike(Object(arr))) {\n\t\t\t\t\tjQuery.merge(ret,\n\t\t\t\t\t\ttypeof arr === \"string\" ?\n\t\t\t\t\t\t\t[arr] : arr\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\tpush.call(ret, arr);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn ret;\n\t\t},\n\n\t\tinArray: function (elem, arr, i) {\n\t\t\treturn arr == null ? -1 : indexOf.call(arr, elem, i);\n\t\t},\n\n\t\tisXMLDoc: function (elem) {\n\t\t\tvar namespace = elem && elem.namespaceURI,\n\t\t\t\tdocElem = elem && (elem.ownerDocument || elem).documentElement;\n\n\t\t\t// Assume HTML when documentElement doesn't yet exist, such as inside\n\t\t\t// document fragments.\n\t\t\treturn !rhtmlSuffix.test(namespace || docElem && docElem.nodeName || \"HTML\");\n\t\t},\n\n\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\tmerge: function (first, second) {\n\t\t\tvar len = +second.length,\n\t\t\t\tj = 0,\n\t\t\t\ti = first.length;\n\n\t\t\tfor (; j < len; j++) {\n\t\t\t\tfirst[i++] = second[j];\n\t\t\t}\n\n\t\t\tfirst.length = i;\n\n\t\t\treturn first;\n\t\t},\n\n\t\tgrep: function (elems, callback, invert) {\n\t\t\tvar callbackInverse,\n\t\t\t\tmatches = [],\n\t\t\t\ti = 0,\n\t\t\t\tlength = elems.length,\n\t\t\t\tcallbackExpect = !invert;\n\n\t\t\t// Go through the array, only saving the items\n\t\t\t// that pass the validator function\n\t\t\tfor (; i < length; i++) {\n\t\t\t\tcallbackInverse = !callback(elems[i], i);\n\t\t\t\tif (callbackInverse !== callbackExpect) {\n\t\t\t\t\tmatches.push(elems[i]);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn matches;\n\t\t},\n\n\t\t// arg is for internal usage only\n\t\tmap: function (elems, callback, arg) {\n\t\t\tvar length, value,\n\t\t\t\ti = 0,\n\t\t\t\tret = [];\n\n\t\t\t// Go through the array, translating each of the items to their new values\n\t\t\tif (isArrayLike(elems)) {\n\t\t\t\tlength = elems.length;\n\t\t\t\tfor (; i < length; i++) {\n\t\t\t\t\tvalue = callback(elems[i], i, arg);\n\n\t\t\t\t\tif (value != null) {\n\t\t\t\t\t\tret.push(value);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Go through every key on the object,\n\t\t\t} else {\n\t\t\t\tfor (i in elems) {\n\t\t\t\t\tvalue = callback(elems[i], i, arg);\n\n\t\t\t\t\tif (value != null) {\n\t\t\t\t\t\tret.push(value);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Flatten any nested arrays\n\t\t\treturn flat(ret);\n\t\t},\n\n\t\t// A global GUID counter for objects\n\t\tguid: 1,\n\n\t\t// jQuery.support is not used in Core but other projects attach their\n\t\t// properties to it so it needs to exist.\n\t\tsupport: support\n\t});\n\n\tif (typeof Symbol === \"function\") {\n\t\tjQuery.fn[Symbol.iterator] = arr[Symbol.iterator];\n\t}\n\n\t// Populate the class2type map\n\tjQuery.each(\"Boolean Number String Function Array Date RegExp Object Error Symbol\".split(\" \"),\n\t\tfunction (_i, name) {\n\t\t\tclass2type[\"[object \" + name + \"]\"] = name.toLowerCase();\n\t\t});\n\n\tfunction isArrayLike(obj) {\n\n\t\t// Support: real iOS 8.2 only (not reproducible in simulator)\n\t\t// `in` check used to prevent JIT error (gh-2145)\n\t\t// hasOwn isn't used here due to false negatives\n\t\t// regarding Nodelist length in IE\n\t\tvar length = !!obj && \"length\" in obj && obj.length,\n\t\t\ttype = toType(obj);\n\n\t\tif (isFunction(obj) || isWindow(obj)) {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn type === \"array\" || length === 0 ||\n\t\t\ttypeof length === \"number\" && length > 0 && (length - 1) in obj;\n\t}\n\n\n\tfunction nodeName(elem, name) {\n\n\t\treturn elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();\n\n\t}\n\tvar pop = arr.pop;\n\n\n\tvar sort = arr.sort;\n\n\n\tvar splice = arr.splice;\n\n\n\tvar whitespace = \"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\";\n\n\n\tvar rtrimCSS = new RegExp(\n\t\t\"^\" + whitespace + \"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\" + whitespace + \"+$\",\n\t\t\"g\"\n\t);\n\n\n\n\n\t// Note: an element does not contain itself\n\tjQuery.contains = function (a, b) {\n\t\tvar bup = b && b.parentNode;\n\n\t\treturn a === bup || !!(bup && bup.nodeType === 1 && (\n\n\t\t\t// Support: IE 9 - 11+\n\t\t\t// IE doesn't have `contains` on SVG.\n\t\t\ta.contains ?\n\t\t\t\ta.contains(bup) :\n\t\t\t\ta.compareDocumentPosition && a.compareDocumentPosition(bup) & 16\n\t\t));\n\t};\n\n\n\n\n\t// CSS string/identifier serialization\n\t// https://drafts.csswg.org/cssom/#common-serializing-idioms\n\tvar rcssescape = /([\\0-\\x1f\\x7f]|^-?\\d)|^-$|[^\\x80-\\uFFFF\\w-]/g;\n\n\tfunction fcssescape(ch, asCodePoint) {\n\t\tif (asCodePoint) {\n\n\t\t\t// U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER\n\t\t\tif (ch === \"\\0\") {\n\t\t\t\treturn \"\\uFFFD\";\n\t\t\t}\n\n\t\t\t// Control characters and (dependent upon position) numbers get escaped as code points\n\t\t\treturn ch.slice(0, -1) + \"\\\\\" + ch.charCodeAt(ch.length - 1).toString(16) + \" \";\n\t\t}\n\n\t\t// Other potentially-special ASCII characters get backslash-escaped\n\t\treturn \"\\\\\" + ch;\n\t}\n\n\tjQuery.escapeSelector = function (sel) {\n\t\treturn (sel + \"\").replace(rcssescape, fcssescape);\n\t};\n\n\n\n\n\tvar preferredDoc = document,\n\t\tpushNative = push;\n\n\t(function () {\n\n\t\tvar i,\n\t\t\tExpr,\n\t\t\toutermostContext,\n\t\t\tsortInput,\n\t\t\thasDuplicate,\n\t\t\tpush = pushNative,\n\n\t\t\t// Local document vars\n\t\t\tdocument,\n\t\t\tdocumentElement,\n\t\t\tdocumentIsHTML,\n\t\t\trbuggyQSA,\n\t\t\tmatches,\n\n\t\t\t// Instance-specific data\n\t\t\texpando = jQuery.expando,\n\t\t\tdirruns = 0,\n\t\t\tdone = 0,\n\t\t\tclassCache = createCache(),\n\t\t\ttokenCache = createCache(),\n\t\t\tcompilerCache = createCache(),\n\t\t\tnonnativeSelectorCache = createCache(),\n\t\t\tsortOrder = function (a, b) {\n\t\t\t\tif (a === b) {\n\t\t\t\t\thasDuplicate = true;\n\t\t\t\t}\n\t\t\t\treturn 0;\n\t\t\t},\n\n\t\t\tbooleans = \"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|\" +\n\t\t\t\t\"loop|multiple|open|readonly|required|scoped\",\n\n\t\t\t// Regular expressions\n\n\t\t\t// https://www.w3.org/TR/css-syntax-3/#ident-token-diagram\n\t\t\tidentifier = \"(?:\\\\\\\\[\\\\da-fA-F]{1,6}\" + whitespace +\n\t\t\t\t\"?|\\\\\\\\[^\\\\r\\\\n\\\\f]|[\\\\w-]|[^\\0-\\\\x7f])+\",\n\n\t\t\t// Attribute selectors: https://www.w3.org/TR/selectors/#attribute-selectors\n\t\t\tattributes = \"\\\\[\" + whitespace + \"*(\" + identifier + \")(?:\" + whitespace +\n\n\t\t\t\t// Operator (capture 2)\n\t\t\t\t\"*([*^$|!~]?=)\" + whitespace +\n\n\t\t\t\t// \"Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]\"\n\t\t\t\t\"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\" + identifier + \"))|)\" +\n\t\t\t\twhitespace + \"*\\\\]\",\n\n\t\t\tpseudos = \":(\" + identifier + \")(?:\\\\((\" +\n\n\t\t\t\t// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:\n\t\t\t\t// 1. quoted (capture 3; capture 4 or capture 5)\n\t\t\t\t\"('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|\" +\n\n\t\t\t\t// 2. simple (capture 6)\n\t\t\t\t\"((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\" + attributes + \")*)|\" +\n\n\t\t\t\t// 3. anything else (capture 2)\n\t\t\t\t\".*\" +\n\t\t\t\t\")\\\\)|)\",\n\n\t\t\t// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter\n\t\t\trwhitespace = new RegExp(whitespace + \"+\", \"g\"),\n\n\t\t\trcomma = new RegExp(\"^\" + whitespace + \"*,\" + whitespace + \"*\"),\n\t\t\trleadingCombinator = new RegExp(\"^\" + whitespace + \"*([>+~]|\" + whitespace + \")\" +\n\t\t\t\twhitespace + \"*\"),\n\t\t\trdescend = new RegExp(whitespace + \"|>\"),\n\n\t\t\trpseudo = new RegExp(pseudos),\n\t\t\tridentifier = new RegExp(\"^\" + identifier + \"$\"),\n\n\t\t\tmatchExpr = {\n\t\t\t\tID: new RegExp(\"^#(\" + identifier + \")\"),\n\t\t\t\tCLASS: new RegExp(\"^\\\\.(\" + identifier + \")\"),\n\t\t\t\tTAG: new RegExp(\"^(\" + identifier + \"|[*])\"),\n\t\t\t\tATTR: new RegExp(\"^\" + attributes),\n\t\t\t\tPSEUDO: new RegExp(\"^\" + pseudos),\n\t\t\t\tCHILD: new RegExp(\n\t\t\t\t\t\"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\" +\n\t\t\t\t\twhitespace + \"*(even|odd|(([+-]|)(\\\\d*)n|)\" + whitespace + \"*(?:([+-]|)\" +\n\t\t\t\t\twhitespace + \"*(\\\\d+)|))\" + whitespace + \"*\\\\)|)\", \"i\"),\n\t\t\t\tbool: new RegExp(\"^(?:\" + booleans + \")$\", \"i\"),\n\n\t\t\t\t// For use in libraries implementing .is()\n\t\t\t\t// We use this for POS matching in `select`\n\t\t\t\tneedsContext: new RegExp(\"^\" + whitespace +\n\t\t\t\t\t\"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\" + whitespace +\n\t\t\t\t\t\"*((?:-\\\\d)?\\\\d*)\" + whitespace + \"*\\\\)|)(?=[^-]|$)\", \"i\")\n\t\t\t},\n\n\t\t\trinputs = /^(?:input|select|textarea|button)$/i,\n\t\t\trheader = /^h\\d$/i,\n\n\t\t\t// Easily-parseable/retrievable ID or TAG or CLASS selectors\n\t\t\trquickExpr = /^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,\n\n\t\t\trsibling = /[+~]/,\n\n\t\t\t// CSS escapes\n\t\t\t// https://www.w3.org/TR/CSS21/syndata.html#escaped-characters\n\t\t\trunescape = new RegExp(\"\\\\\\\\[\\\\da-fA-F]{1,6}\" + whitespace +\n\t\t\t\t\"?|\\\\\\\\([^\\\\r\\\\n\\\\f])\", \"g\"),\n\t\t\tfunescape = function (escape, nonHex) {\n\t\t\t\tvar high = \"0x\" + escape.slice(1) - 0x10000;\n\n\t\t\t\tif (nonHex) {\n\n\t\t\t\t\t// Strip the backslash prefix from a non-hex escape sequence\n\t\t\t\t\treturn nonHex;\n\t\t\t\t}\n\n\t\t\t\t// Replace a hexadecimal escape sequence with the encoded Unicode code point\n\t\t\t\t// Support: IE <=11+\n\t\t\t\t// For values outside the Basic Multilingual Plane (BMP), manually construct a\n\t\t\t\t// surrogate pair\n\t\t\t\treturn high < 0 ?\n\t\t\t\t\tString.fromCharCode(high + 0x10000) :\n\t\t\t\t\tString.fromCharCode(high >> 10 | 0xD800, high & 0x3FF | 0xDC00);\n\t\t\t},\n\n\t\t\t// Used for iframes; see `setDocument`.\n\t\t\t// Support: IE 9 - 11+, Edge 12 - 18+\n\t\t\t// Removing the function wrapper causes a \"Permission Denied\"\n\t\t\t// error in IE/Edge.\n\t\t\tunloadHandler = function () {\n\t\t\t\tsetDocument();\n\t\t\t},\n\n\t\t\tinDisabledFieldset = addCombinator(\n\t\t\t\tfunction (elem) {\n\t\t\t\t\treturn elem.disabled === true && nodeName(elem, \"fieldset\");\n\t\t\t\t},\n\t\t\t\t{ dir: \"parentNode\", next: \"legend\" }\n\t\t\t);\n\n\t\t// Support: IE <=9 only\n\t\t// Accessing document.activeElement can throw unexpectedly\n\t\t// https://bugs.jquery.com/ticket/13393\n\t\tfunction safeActiveElement() {\n\t\t\ttry {\n\t\t\t\treturn document.activeElement;\n\t\t\t} catch (err) { }\n\t\t}\n\n\t\t// Optimize for push.apply( _, NodeList )\n\t\ttry {\n\t\t\tpush.apply(\n\t\t\t\t(arr = slice.call(preferredDoc.childNodes)),\n\t\t\t\tpreferredDoc.childNodes\n\t\t\t);\n\n\t\t\t// Support: Android <=4.0\n\t\t\t// Detect silently failing push.apply\n\t\t\t// eslint-disable-next-line no-unused-expressions\n\t\t\tarr[preferredDoc.childNodes.length].nodeType;\n\t\t} catch (e) {\n\t\t\tpush = {\n\t\t\t\tapply: function (target, els) {\n\t\t\t\t\tpushNative.apply(target, slice.call(els));\n\t\t\t\t},\n\t\t\t\tcall: function (target) {\n\t\t\t\t\tpushNative.apply(target, slice.call(arguments, 1));\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\n\t\tfunction find(selector, context, results, seed) {\n\t\t\tvar m, i, elem, nid, match, groups, newSelector,\n\t\t\t\tnewContext = context && context.ownerDocument,\n\n\t\t\t\t// nodeType defaults to 9, since context defaults to document\n\t\t\t\tnodeType = context ? context.nodeType : 9;\n\n\t\t\tresults = results || [];\n\n\t\t\t// Return early from calls with invalid selector or context\n\t\t\tif (typeof selector !== \"string\" || !selector ||\n\t\t\t\tnodeType !== 1 && nodeType !== 9 && nodeType !== 11) {\n\n\t\t\t\treturn results;\n\t\t\t}\n\n\t\t\t// Try to shortcut find operations (as opposed to filters) in HTML documents\n\t\t\tif (!seed) {\n\t\t\t\tsetDocument(context);\n\t\t\t\tcontext = context || document;\n\n\t\t\t\tif (documentIsHTML) {\n\n\t\t\t\t\t// If the selector is sufficiently simple, try using a \"get*By*\" DOM method\n\t\t\t\t\t// (excepting DocumentFragment context, where the methods don't exist)\n\t\t\t\t\tif (nodeType !== 11 && (match = rquickExpr.exec(selector))) {\n\n\t\t\t\t\t\t// ID selector\n\t\t\t\t\t\tif ((m = match[1])) {\n\n\t\t\t\t\t\t\t// Document context\n\t\t\t\t\t\t\tif (nodeType === 9) {\n\t\t\t\t\t\t\t\tif ((elem = context.getElementById(m))) {\n\n\t\t\t\t\t\t\t\t\t// Support: IE 9 only\n\t\t\t\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\t\t\t\tif (elem.id === m) {\n\t\t\t\t\t\t\t\t\t\tpush.call(results, elem);\n\t\t\t\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t// Element context\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t// Support: IE 9 only\n\t\t\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\t\t\tif (newContext && (elem = newContext.getElementById(m)) &&\n\t\t\t\t\t\t\t\t\tfind.contains(context, elem) &&\n\t\t\t\t\t\t\t\t\telem.id === m) {\n\n\t\t\t\t\t\t\t\t\tpush.call(results, elem);\n\t\t\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Type selector\n\t\t\t\t\t\t} else if (match[2]) {\n\t\t\t\t\t\t\tpush.apply(results, context.getElementsByTagName(selector));\n\t\t\t\t\t\t\treturn results;\n\n\t\t\t\t\t\t\t// Class selector\n\t\t\t\t\t\t} else if ((m = match[3]) && context.getElementsByClassName) {\n\t\t\t\t\t\t\tpush.apply(results, context.getElementsByClassName(m));\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Take advantage of querySelectorAll\n\t\t\t\t\tif (!nonnativeSelectorCache[selector + \" \"] &&\n\t\t\t\t\t\t(!rbuggyQSA || !rbuggyQSA.test(selector))) {\n\n\t\t\t\t\t\tnewSelector = selector;\n\t\t\t\t\t\tnewContext = context;\n\n\t\t\t\t\t\t// qSA considers elements outside a scoping root when evaluating child or\n\t\t\t\t\t\t// descendant combinators, which is not what we want.\n\t\t\t\t\t\t// In such cases, we work around the behavior by prefixing every selector in the\n\t\t\t\t\t\t// list with an ID selector referencing the scope context.\n\t\t\t\t\t\t// The technique has to be used as well when a leading combinator is used\n\t\t\t\t\t\t// as such selectors are not recognized by querySelectorAll.\n\t\t\t\t\t\t// Thanks to Andrew Dupont for this technique.\n\t\t\t\t\t\tif (nodeType === 1 &&\n\t\t\t\t\t\t\t(rdescend.test(selector) || rleadingCombinator.test(selector))) {\n\n\t\t\t\t\t\t\t// Expand context for sibling selectors\n\t\t\t\t\t\t\tnewContext = rsibling.test(selector) && testContext(context.parentNode) ||\n\t\t\t\t\t\t\t\tcontext;\n\n\t\t\t\t\t\t\t// We can use :scope instead of the ID hack if the browser\n\t\t\t\t\t\t\t// supports it & if we're not changing the context.\n\t\t\t\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when\n\t\t\t\t\t\t\t// strict-comparing two documents; shallow comparisons work.\n\t\t\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\t\t\tif (newContext != context || !support.scope) {\n\n\t\t\t\t\t\t\t\t// Capture the context ID, setting it first if necessary\n\t\t\t\t\t\t\t\tif ((nid = context.getAttribute(\"id\"))) {\n\t\t\t\t\t\t\t\t\tnid = jQuery.escapeSelector(nid);\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tcontext.setAttribute(\"id\", (nid = expando));\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Prefix every selector in the list\n\t\t\t\t\t\t\tgroups = tokenize(selector);\n\t\t\t\t\t\t\ti = groups.length;\n\t\t\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\t\t\tgroups[i] = (nid ? \"#\" + nid : \":scope\") + \" \" +\n\t\t\t\t\t\t\t\t\ttoSelector(groups[i]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tnewSelector = groups.join(\",\");\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tpush.apply(results,\n\t\t\t\t\t\t\t\tnewContext.querySelectorAll(newSelector)\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t} catch (qsaError) {\n\t\t\t\t\t\t\tnonnativeSelectorCache(selector, true);\n\t\t\t\t\t\t} finally {\n\t\t\t\t\t\t\tif (nid === expando) {\n\t\t\t\t\t\t\t\tcontext.removeAttribute(\"id\");\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// All others\n\t\t\treturn select(selector.replace(rtrimCSS, \"$1\"), context, results, seed);\n\t\t}\n\n\t\t/**\n\t\t * Create key-value caches of limited size\n\t\t * @returns {function(string, object)} Returns the Object data after storing it on itself with\n\t\t *\tproperty name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)\n\t\t *\tdeleting the oldest entry\n\t\t */\n\t\tfunction createCache() {\n\t\t\tvar keys = [];\n\n\t\t\tfunction cache(key, value) {\n\n\t\t\t\t// Use (key + \" \") to avoid collision with native prototype properties\n\t\t\t\t// (see https://github.com/jquery/sizzle/issues/157)\n\t\t\t\tif (keys.push(key + \" \") > Expr.cacheLength) {\n\n\t\t\t\t\t// Only keep the most recent entries\n\t\t\t\t\tdelete cache[keys.shift()];\n\t\t\t\t}\n\t\t\t\treturn (cache[key + \" \"] = value);\n\t\t\t}\n\t\t\treturn cache;\n\t\t}\n\n\t\t/**\n\t\t * Mark a function for special use by jQuery selector module\n\t\t * @param {Function} fn The function to mark\n\t\t */\n\t\tfunction markFunction(fn) {\n\t\t\tfn[expando] = true;\n\t\t\treturn fn;\n\t\t}\n\n\t\t/**\n\t\t * Support testing using an element\n\t\t * @param {Function} fn Passed the created element and returns a boolean result\n\t\t */\n\t\tfunction assert(fn) {\n\t\t\tvar el = document.createElement(\"fieldset\");\n\n\t\t\ttry {\n\t\t\t\treturn !!fn(el);\n\t\t\t} catch (e) {\n\t\t\t\treturn false;\n\t\t\t} finally {\n\n\t\t\t\t// Remove from its parent by default\n\t\t\t\tif (el.parentNode) {\n\t\t\t\t\tel.parentNode.removeChild(el);\n\t\t\t\t}\n\n\t\t\t\t// release memory in IE\n\t\t\t\tel = null;\n\t\t\t}\n\t\t}\n\n\t\t/**\n\t\t * Returns a function to use in pseudos for input types\n\t\t * @param {String} type\n\t\t */\n\t\tfunction createInputPseudo(type) {\n\t\t\treturn function (elem) {\n\t\t\t\treturn nodeName(elem, \"input\") && elem.type === type;\n\t\t\t};\n\t\t}\n\n\t\t/**\n\t\t * Returns a function to use in pseudos for buttons\n\t\t * @param {String} type\n\t\t */\n\t\tfunction createButtonPseudo(type) {\n\t\t\treturn function (elem) {\n\t\t\t\treturn (nodeName(elem, \"input\") || nodeName(elem, \"button\")) &&\n\t\t\t\t\telem.type === type;\n\t\t\t};\n\t\t}\n\n\t\t/**\n\t\t * Returns a function to use in pseudos for :enabled/:disabled\n\t\t * @param {Boolean} disabled true for :disabled; false for :enabled\n\t\t */\n\t\tfunction createDisabledPseudo(disabled) {\n\n\t\t\t// Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable\n\t\t\treturn function (elem) {\n\n\t\t\t\t// Only certain elements can match :enabled or :disabled\n\t\t\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled\n\t\t\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled\n\t\t\t\tif (\"form\" in elem) {\n\n\t\t\t\t\t// Check for inherited disabledness on relevant non-disabled elements:\n\t\t\t\t\t// * listed form-associated elements in a disabled fieldset\n\t\t\t\t\t//   https://html.spec.whatwg.org/multipage/forms.html#category-listed\n\t\t\t\t\t//   https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled\n\t\t\t\t\t// * option elements in a disabled optgroup\n\t\t\t\t\t//   https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled\n\t\t\t\t\t// All such elements have a \"form\" property.\n\t\t\t\t\tif (elem.parentNode && elem.disabled === false) {\n\n\t\t\t\t\t\t// Option elements defer to a parent optgroup if present\n\t\t\t\t\t\tif (\"label\" in elem) {\n\t\t\t\t\t\t\tif (\"label\" in elem.parentNode) {\n\t\t\t\t\t\t\t\treturn elem.parentNode.disabled === disabled;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\treturn elem.disabled === disabled;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Support: IE 6 - 11+\n\t\t\t\t\t\t// Use the isDisabled shortcut property to check for disabled fieldset ancestors\n\t\t\t\t\t\treturn elem.isDisabled === disabled ||\n\n\t\t\t\t\t\t\t// Where there is no isDisabled, check manually\n\t\t\t\t\t\t\telem.isDisabled !== !disabled &&\n\t\t\t\t\t\t\tinDisabledFieldset(elem) === disabled;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn elem.disabled === disabled;\n\n\t\t\t\t\t// Try to winnow out elements that can't be disabled before trusting the disabled property.\n\t\t\t\t\t// Some victims get caught in our net (label, legend, menu, track), but it shouldn't\n\t\t\t\t\t// even exist on them, let alone have a boolean value.\n\t\t\t\t} else if (\"label\" in elem) {\n\t\t\t\t\treturn elem.disabled === disabled;\n\t\t\t\t}\n\n\t\t\t\t// Remaining elements are neither :enabled nor :disabled\n\t\t\t\treturn false;\n\t\t\t};\n\t\t}\n\n\t\t/**\n\t\t * Returns a function to use in pseudos for positionals\n\t\t * @param {Function} fn\n\t\t */\n\t\tfunction createPositionalPseudo(fn) {\n\t\t\treturn markFunction(function (argument) {\n\t\t\t\targument = +argument;\n\t\t\t\treturn markFunction(function (seed, matches) {\n\t\t\t\t\tvar j,\n\t\t\t\t\t\tmatchIndexes = fn([], seed.length, argument),\n\t\t\t\t\t\ti = matchIndexes.length;\n\n\t\t\t\t\t// Match elements found at the specified indexes\n\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\tif (seed[(j = matchIndexes[i])]) {\n\t\t\t\t\t\t\tseed[j] = !(matches[j] = seed[j]);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\n\t\t/**\n\t\t * Checks a node for validity as a jQuery selector context\n\t\t * @param {Element|Object=} context\n\t\t * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value\n\t\t */\n\t\tfunction testContext(context) {\n\t\t\treturn context && typeof context.getElementsByTagName !== \"undefined\" && context;\n\t\t}\n\n\t\t/**\n\t\t * Sets document-related variables once based on the current document\n\t\t * @param {Element|Object} [node] An element or document object to use to set the document\n\t\t * @returns {Object} Returns the current document\n\t\t */\n\t\tfunction setDocument(node) {\n\t\t\tvar subWindow,\n\t\t\t\tdoc = node ? node.ownerDocument || node : preferredDoc;\n\n\t\t\t// Return early if doc is invalid or already selected\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tif (doc == document || doc.nodeType !== 9 || !doc.documentElement) {\n\t\t\t\treturn document;\n\t\t\t}\n\n\t\t\t// Update global variables\n\t\t\tdocument = doc;\n\t\t\tdocumentElement = document.documentElement;\n\t\t\tdocumentIsHTML = !jQuery.isXMLDoc(document);\n\n\t\t\t// Support: iOS 7 only, IE 9 - 11+\n\t\t\t// Older browsers didn't support unprefixed `matches`.\n\t\t\tmatches = documentElement.matches ||\n\t\t\t\tdocumentElement.webkitMatchesSelector ||\n\t\t\t\tdocumentElement.msMatchesSelector;\n\n\t\t\t// Support: IE 9 - 11+, Edge 12 - 18+\n\t\t\t// Accessing iframe documents after unload throws \"permission denied\" errors (see trac-13936)\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tif (preferredDoc != document &&\n\t\t\t\t(subWindow = document.defaultView) && subWindow.top !== subWindow) {\n\n\t\t\t\t// Support: IE 9 - 11+, Edge 12 - 18+\n\t\t\t\tsubWindow.addEventListener(\"unload\", unloadHandler);\n\t\t\t}\n\n\t\t\t// Support: IE <10\n\t\t\t// Check if getElementById returns elements by name\n\t\t\t// The broken getElementById methods don't pick up programmatically-set names,\n\t\t\t// so use a roundabout getElementsByName test\n\t\t\tsupport.getById = assert(function (el) {\n\t\t\t\tdocumentElement.appendChild(el).id = jQuery.expando;\n\t\t\t\treturn !document.getElementsByName ||\n\t\t\t\t\t!document.getElementsByName(jQuery.expando).length;\n\t\t\t});\n\n\t\t\t// Support: IE 9 only\n\t\t\t// Check to see if it's possible to do matchesSelector\n\t\t\t// on a disconnected node.\n\t\t\tsupport.disconnectedMatch = assert(function (el) {\n\t\t\t\treturn matches.call(el, \"*\");\n\t\t\t});\n\n\t\t\t// Support: IE 9 - 11+, Edge 12 - 18+\n\t\t\t// IE/Edge don't support the :scope pseudo-class.\n\t\t\tsupport.scope = assert(function () {\n\t\t\t\treturn document.querySelectorAll(\":scope\");\n\t\t\t});\n\n\t\t\t// Support: Chrome 105 - 111 only, Safari 15.4 - 16.3 only\n\t\t\t// Make sure the `:has()` argument is parsed unforgivingly.\n\t\t\t// We include `*` in the test to detect buggy implementations that are\n\t\t\t// _selectively_ forgiving (specifically when the list includes at least\n\t\t\t// one valid selector).\n\t\t\t// Note that we treat complete lack of support for `:has()` as if it were\n\t\t\t// spec-compliant support, which is fine because use of `:has()` in such\n\t\t\t// environments will fail in the qSA path and fall back to jQuery traversal\n\t\t\t// anyway.\n\t\t\tsupport.cssHas = assert(function () {\n\t\t\t\ttry {\n\t\t\t\t\tdocument.querySelector(\":has(*,:jqfake)\");\n\t\t\t\t\treturn false;\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t// ID filter and find\n\t\t\tif (support.getById) {\n\t\t\t\tExpr.filter.ID = function (id) {\n\t\t\t\t\tvar attrId = id.replace(runescape, funescape);\n\t\t\t\t\treturn function (elem) {\n\t\t\t\t\t\treturn elem.getAttribute(\"id\") === attrId;\n\t\t\t\t\t};\n\t\t\t\t};\n\t\t\t\tExpr.find.ID = function (id, context) {\n\t\t\t\t\tif (typeof context.getElementById !== \"undefined\" && documentIsHTML) {\n\t\t\t\t\t\tvar elem = context.getElementById(id);\n\t\t\t\t\t\treturn elem ? [elem] : [];\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t} else {\n\t\t\t\tExpr.filter.ID = function (id) {\n\t\t\t\t\tvar attrId = id.replace(runescape, funescape);\n\t\t\t\t\treturn function (elem) {\n\t\t\t\t\t\tvar node = typeof elem.getAttributeNode !== \"undefined\" &&\n\t\t\t\t\t\t\telem.getAttributeNode(\"id\");\n\t\t\t\t\t\treturn node && node.value === attrId;\n\t\t\t\t\t};\n\t\t\t\t};\n\n\t\t\t\t// Support: IE 6 - 7 only\n\t\t\t\t// getElementById is not reliable as a find shortcut\n\t\t\t\tExpr.find.ID = function (id, context) {\n\t\t\t\t\tif (typeof context.getElementById !== \"undefined\" && documentIsHTML) {\n\t\t\t\t\t\tvar node, i, elems,\n\t\t\t\t\t\t\telem = context.getElementById(id);\n\n\t\t\t\t\t\tif (elem) {\n\n\t\t\t\t\t\t\t// Verify the id attribute\n\t\t\t\t\t\t\tnode = elem.getAttributeNode(\"id\");\n\t\t\t\t\t\t\tif (node && node.value === id) {\n\t\t\t\t\t\t\t\treturn [elem];\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Fall back on getElementsByName\n\t\t\t\t\t\t\telems = context.getElementsByName(id);\n\t\t\t\t\t\t\ti = 0;\n\t\t\t\t\t\t\twhile ((elem = elems[i++])) {\n\t\t\t\t\t\t\t\tnode = elem.getAttributeNode(\"id\");\n\t\t\t\t\t\t\t\tif (node && node.value === id) {\n\t\t\t\t\t\t\t\t\treturn [elem];\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn [];\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\n\t\t\t// Tag\n\t\t\tExpr.find.TAG = function (tag, context) {\n\t\t\t\tif (typeof context.getElementsByTagName !== \"undefined\") {\n\t\t\t\t\treturn context.getElementsByTagName(tag);\n\n\t\t\t\t\t// DocumentFragment nodes don't have gEBTN\n\t\t\t\t} else {\n\t\t\t\t\treturn context.querySelectorAll(tag);\n\t\t\t\t}\n\t\t\t};\n\n\t\t\t// Class\n\t\t\tExpr.find.CLASS = function (className, context) {\n\t\t\t\tif (typeof context.getElementsByClassName !== \"undefined\" && documentIsHTML) {\n\t\t\t\t\treturn context.getElementsByClassName(className);\n\t\t\t\t}\n\t\t\t};\n\n\t\t\t/* QSA/matchesSelector\n\t\t\t---------------------------------------------------------------------- */\n\n\t\t\t// QSA and matchesSelector support\n\n\t\t\trbuggyQSA = [];\n\n\t\t\t// Build QSA regex\n\t\t\t// Regex strategy adopted from Diego Perini\n\t\t\tassert(function (el) {\n\n\t\t\t\tvar input;\n\n\t\t\t\tdocumentElement.appendChild(el).innerHTML =\n\t\t\t\t\t\"<a id='\" + expando + \"' href='' disabled='disabled'></a>\" +\n\t\t\t\t\t\"<select id='\" + expando + \"-\\r\\\\' disabled='disabled'>\" +\n\t\t\t\t\t\"<option selected=''></option></select>\";\n\n\t\t\t\t// Support: iOS <=7 - 8 only\n\t\t\t\t// Boolean attributes and \"value\" are not treated correctly in some XML documents\n\t\t\t\tif (!el.querySelectorAll(\"[selected]\").length) {\n\t\t\t\t\trbuggyQSA.push(\"\\\\[\" + whitespace + \"*(?:value|\" + booleans + \")\");\n\t\t\t\t}\n\n\t\t\t\t// Support: iOS <=7 - 8 only\n\t\t\t\tif (!el.querySelectorAll(\"[id~=\" + expando + \"-]\").length) {\n\t\t\t\t\trbuggyQSA.push(\"~=\");\n\t\t\t\t}\n\n\t\t\t\t// Support: iOS 8 only\n\t\t\t\t// https://bugs.webkit.org/show_bug.cgi?id=136851\n\t\t\t\t// In-page `selector#id sibling-combinator selector` fails\n\t\t\t\tif (!el.querySelectorAll(\"a#\" + expando + \"+*\").length) {\n\t\t\t\t\trbuggyQSA.push(\".#.+[+~]\");\n\t\t\t\t}\n\n\t\t\t\t// Support: Chrome <=105+, Firefox <=104+, Safari <=15.4+\n\t\t\t\t// In some of the document kinds, these selectors wouldn't work natively.\n\t\t\t\t// This is probably OK but for backwards compatibility we want to maintain\n\t\t\t\t// handling them through jQuery traversal in jQuery 3.x.\n\t\t\t\tif (!el.querySelectorAll(\":checked\").length) {\n\t\t\t\t\trbuggyQSA.push(\":checked\");\n\t\t\t\t}\n\n\t\t\t\t// Support: Windows 8 Native Apps\n\t\t\t\t// The type and name attributes are restricted during .innerHTML assignment\n\t\t\t\tinput = document.createElement(\"input\");\n\t\t\t\tinput.setAttribute(\"type\", \"hidden\");\n\t\t\t\tel.appendChild(input).setAttribute(\"name\", \"D\");\n\n\t\t\t\t// Support: IE 9 - 11+\n\t\t\t\t// IE's :disabled selector does not pick up the children of disabled fieldsets\n\t\t\t\t// Support: Chrome <=105+, Firefox <=104+, Safari <=15.4+\n\t\t\t\t// In some of the document kinds, these selectors wouldn't work natively.\n\t\t\t\t// This is probably OK but for backwards compatibility we want to maintain\n\t\t\t\t// handling them through jQuery traversal in jQuery 3.x.\n\t\t\t\tdocumentElement.appendChild(el).disabled = true;\n\t\t\t\tif (el.querySelectorAll(\":disabled\").length !== 2) {\n\t\t\t\t\trbuggyQSA.push(\":enabled\", \":disabled\");\n\t\t\t\t}\n\n\t\t\t\t// Support: IE 11+, Edge 15 - 18+\n\t\t\t\t// IE 11/Edge don't find elements on a `[name='']` query in some cases.\n\t\t\t\t// Adding a temporary attribute to the document before the selection works\n\t\t\t\t// around the issue.\n\t\t\t\t// Interestingly, IE 10 & older don't seem to have the issue.\n\t\t\t\tinput = document.createElement(\"input\");\n\t\t\t\tinput.setAttribute(\"name\", \"\");\n\t\t\t\tel.appendChild(input);\n\t\t\t\tif (!el.querySelectorAll(\"[name='']\").length) {\n\t\t\t\t\trbuggyQSA.push(\"\\\\[\" + whitespace + \"*name\" + whitespace + \"*=\" +\n\t\t\t\t\t\twhitespace + \"*(?:''|\\\"\\\")\");\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tif (!support.cssHas) {\n\n\t\t\t\t// Support: Chrome 105 - 110+, Safari 15.4 - 16.3+\n\t\t\t\t// Our regular `try-catch` mechanism fails to detect natively-unsupported\n\t\t\t\t// pseudo-classes inside `:has()` (such as `:has(:contains(\"Foo\"))`)\n\t\t\t\t// in browsers that parse the `:has()` argument as a forgiving selector list.\n\t\t\t\t// https://drafts.csswg.org/selectors/#relational now requires the argument\n\t\t\t\t// to be parsed unforgivingly, but browsers have not yet fully adjusted.\n\t\t\t\trbuggyQSA.push(\":has\");\n\t\t\t}\n\n\t\t\trbuggyQSA = rbuggyQSA.length && new RegExp(rbuggyQSA.join(\"|\"));\n\n\t\t\t/* Sorting\n\t\t\t---------------------------------------------------------------------- */\n\n\t\t\t// Document order sorting\n\t\t\tsortOrder = function (a, b) {\n\n\t\t\t\t// Flag for duplicate removal\n\t\t\t\tif (a === b) {\n\t\t\t\t\thasDuplicate = true;\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\n\t\t\t\t// Sort on method existence if only one input has compareDocumentPosition\n\t\t\t\tvar compare = !a.compareDocumentPosition - !b.compareDocumentPosition;\n\t\t\t\tif (compare) {\n\t\t\t\t\treturn compare;\n\t\t\t\t}\n\n\t\t\t\t// Calculate position if both inputs belong to the same document\n\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\tcompare = (a.ownerDocument || a) == (b.ownerDocument || b) ?\n\t\t\t\t\ta.compareDocumentPosition(b) :\n\n\t\t\t\t\t// Otherwise we know they are disconnected\n\t\t\t\t\t1;\n\n\t\t\t\t// Disconnected nodes\n\t\t\t\tif (compare & 1 ||\n\t\t\t\t\t(!support.sortDetached && b.compareDocumentPosition(a) === compare)) {\n\n\t\t\t\t\t// Choose the first element that is related to our preferred document\n\t\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\tif (a === document || a.ownerDocument == preferredDoc &&\n\t\t\t\t\t\tfind.contains(preferredDoc, a)) {\n\t\t\t\t\t\treturn -1;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\tif (b === document || b.ownerDocument == preferredDoc &&\n\t\t\t\t\t\tfind.contains(preferredDoc, b)) {\n\t\t\t\t\t\treturn 1;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Maintain original order\n\t\t\t\t\treturn sortInput ?\n\t\t\t\t\t\t(indexOf.call(sortInput, a) - indexOf.call(sortInput, b)) :\n\t\t\t\t\t\t0;\n\t\t\t\t}\n\n\t\t\t\treturn compare & 4 ? -1 : 1;\n\t\t\t};\n\n\t\t\treturn document;\n\t\t}\n\n\t\tfind.matches = function (expr, elements) {\n\t\t\treturn find(expr, null, null, elements);\n\t\t};\n\n\t\tfind.matchesSelector = function (elem, expr) {\n\t\t\tsetDocument(elem);\n\n\t\t\tif (documentIsHTML &&\n\t\t\t\t!nonnativeSelectorCache[expr + \" \"] &&\n\t\t\t\t(!rbuggyQSA || !rbuggyQSA.test(expr))) {\n\n\t\t\t\ttry {\n\t\t\t\t\tvar ret = matches.call(elem, expr);\n\n\t\t\t\t\t// IE 9's matchesSelector returns false on disconnected nodes\n\t\t\t\t\tif (ret || support.disconnectedMatch ||\n\n\t\t\t\t\t\t// As well, disconnected nodes are said to be in a document\n\t\t\t\t\t\t// fragment in IE 9\n\t\t\t\t\t\telem.document && elem.document.nodeType !== 11) {\n\t\t\t\t\t\treturn ret;\n\t\t\t\t\t}\n\t\t\t\t} catch (e) {\n\t\t\t\t\tnonnativeSelectorCache(expr, true);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn find(expr, document, null, [elem]).length > 0;\n\t\t};\n\n\t\tfind.contains = function (context, elem) {\n\n\t\t\t// Set document vars if needed\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tif ((context.ownerDocument || context) != document) {\n\t\t\t\tsetDocument(context);\n\t\t\t}\n\t\t\treturn jQuery.contains(context, elem);\n\t\t};\n\n\n\t\tfind.attr = function (elem, name) {\n\n\t\t\t// Set document vars if needed\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tif ((elem.ownerDocument || elem) != document) {\n\t\t\t\tsetDocument(elem);\n\t\t\t}\n\n\t\t\tvar fn = Expr.attrHandle[name.toLowerCase()],\n\n\t\t\t\t// Don't get fooled by Object.prototype properties (see trac-13807)\n\t\t\t\tval = fn && hasOwn.call(Expr.attrHandle, name.toLowerCase()) ?\n\t\t\t\t\tfn(elem, name, !documentIsHTML) :\n\t\t\t\t\tundefined;\n\n\t\t\tif (val !== undefined) {\n\t\t\t\treturn val;\n\t\t\t}\n\n\t\t\treturn elem.getAttribute(name);\n\t\t};\n\n\t\tfind.error = function (msg) {\n\t\t\tthrow new Error(\"Syntax error, unrecognized expression: \" + msg);\n\t\t};\n\n\t\t/**\n\t\t * Document sorting and removing duplicates\n\t\t * @param {ArrayLike} results\n\t\t */\n\t\tjQuery.uniqueSort = function (results) {\n\t\t\tvar elem,\n\t\t\t\tduplicates = [],\n\t\t\t\tj = 0,\n\t\t\t\ti = 0;\n\n\t\t\t// Unless we *know* we can detect duplicates, assume their presence\n\t\t\t//\n\t\t\t// Support: Android <=4.0+\n\t\t\t// Testing for detecting duplicates is unpredictable so instead assume we can't\n\t\t\t// depend on duplicate detection in all browsers without a stable sort.\n\t\t\thasDuplicate = !support.sortStable;\n\t\t\tsortInput = !support.sortStable && slice.call(results, 0);\n\t\t\tsort.call(results, sortOrder);\n\n\t\t\tif (hasDuplicate) {\n\t\t\t\twhile ((elem = results[i++])) {\n\t\t\t\t\tif (elem === results[i]) {\n\t\t\t\t\t\tj = duplicates.push(i);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\twhile (j--) {\n\t\t\t\t\tsplice.call(results, duplicates[j], 1);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Clear input after sorting to release objects\n\t\t\t// See https://github.com/jquery/sizzle/pull/225\n\t\t\tsortInput = null;\n\n\t\t\treturn results;\n\t\t};\n\n\t\tjQuery.fn.uniqueSort = function () {\n\t\t\treturn this.pushStack(jQuery.uniqueSort(slice.apply(this)));\n\t\t};\n\n\t\tExpr = jQuery.expr = {\n\n\t\t\t// Can be adjusted by the user\n\t\t\tcacheLength: 50,\n\n\t\t\tcreatePseudo: markFunction,\n\n\t\t\tmatch: matchExpr,\n\n\t\t\tattrHandle: {},\n\n\t\t\tfind: {},\n\n\t\t\trelative: {\n\t\t\t\t\">\": { dir: \"parentNode\", first: true },\n\t\t\t\t\" \": { dir: \"parentNode\" },\n\t\t\t\t\"+\": { dir: \"previousSibling\", first: true },\n\t\t\t\t\"~\": { dir: \"previousSibling\" }\n\t\t\t},\n\n\t\t\tpreFilter: {\n\t\t\t\tATTR: function (match) {\n\t\t\t\t\tmatch[1] = match[1].replace(runescape, funescape);\n\n\t\t\t\t\t// Move the given value to match[3] whether quoted or unquoted\n\t\t\t\t\tmatch[3] = (match[3] || match[4] || match[5] || \"\")\n\t\t\t\t\t\t.replace(runescape, funescape);\n\n\t\t\t\t\tif (match[2] === \"~=\") {\n\t\t\t\t\t\tmatch[3] = \" \" + match[3] + \" \";\n\t\t\t\t\t}\n\n\t\t\t\t\treturn match.slice(0, 4);\n\t\t\t\t},\n\n\t\t\t\tCHILD: function (match) {\n\n\t\t\t\t\t/* matches from matchExpr[\"CHILD\"]\n\t\t\t\t\t\t1 type (only|nth|...)\n\t\t\t\t\t\t2 what (child|of-type)\n\t\t\t\t\t\t3 argument (even|odd|\\d*|\\d*n([+-]\\d+)?|...)\n\t\t\t\t\t\t4 xn-component of xn+y argument ([+-]?\\d*n|)\n\t\t\t\t\t\t5 sign of xn-component\n\t\t\t\t\t\t6 x of xn-component\n\t\t\t\t\t\t7 sign of y-component\n\t\t\t\t\t\t8 y of y-component\n\t\t\t\t\t*/\n\t\t\t\t\tmatch[1] = match[1].toLowerCase();\n\n\t\t\t\t\tif (match[1].slice(0, 3) === \"nth\") {\n\n\t\t\t\t\t\t// nth-* requires argument\n\t\t\t\t\t\tif (!match[3]) {\n\t\t\t\t\t\t\tfind.error(match[0]);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// numeric x and y parameters for Expr.filter.CHILD\n\t\t\t\t\t\t// remember that false/true cast respectively to 0/1\n\t\t\t\t\t\tmatch[4] = +(match[4] ?\n\t\t\t\t\t\t\tmatch[5] + (match[6] || 1) :\n\t\t\t\t\t\t\t2 * (match[3] === \"even\" || match[3] === \"odd\")\n\t\t\t\t\t\t);\n\t\t\t\t\t\tmatch[5] = +((match[7] + match[8]) || match[3] === \"odd\");\n\n\t\t\t\t\t\t// other types prohibit arguments\n\t\t\t\t\t} else if (match[3]) {\n\t\t\t\t\t\tfind.error(match[0]);\n\t\t\t\t\t}\n\n\t\t\t\t\treturn match;\n\t\t\t\t},\n\n\t\t\t\tPSEUDO: function (match) {\n\t\t\t\t\tvar excess,\n\t\t\t\t\t\tunquoted = !match[6] && match[2];\n\n\t\t\t\t\tif (matchExpr.CHILD.test(match[0])) {\n\t\t\t\t\t\treturn null;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Accept quoted arguments as-is\n\t\t\t\t\tif (match[3]) {\n\t\t\t\t\t\tmatch[2] = match[4] || match[5] || \"\";\n\n\t\t\t\t\t\t// Strip excess characters from unquoted arguments\n\t\t\t\t\t} else if (unquoted && rpseudo.test(unquoted) &&\n\n\t\t\t\t\t\t// Get excess from tokenize (recursively)\n\t\t\t\t\t\t(excess = tokenize(unquoted, true)) &&\n\n\t\t\t\t\t\t// advance to the next closing parenthesis\n\t\t\t\t\t\t(excess = unquoted.indexOf(\")\", unquoted.length - excess) - unquoted.length)) {\n\n\t\t\t\t\t\t// excess is a negative index\n\t\t\t\t\t\tmatch[0] = match[0].slice(0, excess);\n\t\t\t\t\t\tmatch[2] = unquoted.slice(0, excess);\n\t\t\t\t\t}\n\n\t\t\t\t\t// Return only captures needed by the pseudo filter method (type and argument)\n\t\t\t\t\treturn match.slice(0, 3);\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tfilter: {\n\n\t\t\t\tTAG: function (nodeNameSelector) {\n\t\t\t\t\tvar expectedNodeName = nodeNameSelector.replace(runescape, funescape).toLowerCase();\n\t\t\t\t\treturn nodeNameSelector === \"*\" ?\n\t\t\t\t\t\tfunction () {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t} :\n\t\t\t\t\t\tfunction (elem) {\n\t\t\t\t\t\t\treturn nodeName(elem, expectedNodeName);\n\t\t\t\t\t\t};\n\t\t\t\t},\n\n\t\t\t\tCLASS: function (className) {\n\t\t\t\t\tvar pattern = classCache[className + \" \"];\n\n\t\t\t\t\treturn pattern ||\n\t\t\t\t\t\t(pattern = new RegExp(\"(^|\" + whitespace + \")\" + className +\n\t\t\t\t\t\t\t\"(\" + whitespace + \"|$)\")) &&\n\t\t\t\t\t\tclassCache(className, function (elem) {\n\t\t\t\t\t\t\treturn pattern.test(\n\t\t\t\t\t\t\t\ttypeof elem.className === \"string\" && elem.className ||\n\t\t\t\t\t\t\t\ttypeof elem.getAttribute !== \"undefined\" &&\n\t\t\t\t\t\t\t\telem.getAttribute(\"class\") ||\n\t\t\t\t\t\t\t\t\"\"\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t});\n\t\t\t\t},\n\n\t\t\t\tATTR: function (name, operator, check) {\n\t\t\t\t\treturn function (elem) {\n\t\t\t\t\t\tvar result = find.attr(elem, name);\n\n\t\t\t\t\t\tif (result == null) {\n\t\t\t\t\t\t\treturn operator === \"!=\";\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!operator) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tresult += \"\";\n\n\t\t\t\t\t\tif (operator === \"=\") {\n\t\t\t\t\t\t\treturn result === check;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (operator === \"!=\") {\n\t\t\t\t\t\t\treturn result !== check;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (operator === \"^=\") {\n\t\t\t\t\t\t\treturn check && result.indexOf(check) === 0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (operator === \"*=\") {\n\t\t\t\t\t\t\treturn check && result.indexOf(check) > -1;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (operator === \"$=\") {\n\t\t\t\t\t\t\treturn check && result.slice(-check.length) === check;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (operator === \"~=\") {\n\t\t\t\t\t\t\treturn (\" \" + result.replace(rwhitespace, \" \") + \" \")\n\t\t\t\t\t\t\t\t.indexOf(check) > -1;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (operator === \"|=\") {\n\t\t\t\t\t\t\treturn result === check || result.slice(0, check.length + 1) === check + \"-\";\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t};\n\t\t\t\t},\n\n\t\t\t\tCHILD: function (type, what, _argument, first, last) {\n\t\t\t\t\tvar simple = type.slice(0, 3) !== \"nth\",\n\t\t\t\t\t\tforward = type.slice(-4) !== \"last\",\n\t\t\t\t\t\tofType = what === \"of-type\";\n\n\t\t\t\t\treturn first === 1 && last === 0 ?\n\n\t\t\t\t\t\t// Shortcut for :nth-*(n)\n\t\t\t\t\t\tfunction (elem) {\n\t\t\t\t\t\t\treturn !!elem.parentNode;\n\t\t\t\t\t\t} :\n\n\t\t\t\t\t\tfunction (elem, _context, xml) {\n\t\t\t\t\t\t\tvar cache, outerCache, node, nodeIndex, start,\n\t\t\t\t\t\t\t\tdir = simple !== forward ? \"nextSibling\" : \"previousSibling\",\n\t\t\t\t\t\t\t\tparent = elem.parentNode,\n\t\t\t\t\t\t\t\tname = ofType && elem.nodeName.toLowerCase(),\n\t\t\t\t\t\t\t\tuseCache = !xml && !ofType,\n\t\t\t\t\t\t\t\tdiff = false;\n\n\t\t\t\t\t\t\tif (parent) {\n\n\t\t\t\t\t\t\t\t// :(first|last|only)-(child|of-type)\n\t\t\t\t\t\t\t\tif (simple) {\n\t\t\t\t\t\t\t\t\twhile (dir) {\n\t\t\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\t\t\twhile ((node = node[dir])) {\n\t\t\t\t\t\t\t\t\t\t\tif (ofType ?\n\t\t\t\t\t\t\t\t\t\t\t\tnodeName(node, name) :\n\t\t\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1) {\n\n\t\t\t\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t// Reverse direction for :only-* (if we haven't yet done so)\n\t\t\t\t\t\t\t\t\t\tstart = dir = type === \"only\" && !start && \"nextSibling\";\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tstart = [forward ? parent.firstChild : parent.lastChild];\n\n\t\t\t\t\t\t\t\t// non-xml :nth-child(...) stores cache data on `parent`\n\t\t\t\t\t\t\t\tif (forward && useCache) {\n\n\t\t\t\t\t\t\t\t\t// Seek `elem` from a previously-cached index\n\t\t\t\t\t\t\t\t\touterCache = parent[expando] || (parent[expando] = {});\n\t\t\t\t\t\t\t\t\tcache = outerCache[type] || [];\n\t\t\t\t\t\t\t\t\tnodeIndex = cache[0] === dirruns && cache[1];\n\t\t\t\t\t\t\t\t\tdiff = nodeIndex && cache[2];\n\t\t\t\t\t\t\t\t\tnode = nodeIndex && parent.childNodes[nodeIndex];\n\n\t\t\t\t\t\t\t\t\twhile ((node = ++nodeIndex && node && node[dir] ||\n\n\t\t\t\t\t\t\t\t\t\t// Fallback to seeking `elem` from the start\n\t\t\t\t\t\t\t\t\t\t(diff = nodeIndex = 0) || start.pop())) {\n\n\t\t\t\t\t\t\t\t\t\t// When found, cache indexes on `parent` and break\n\t\t\t\t\t\t\t\t\t\tif (node.nodeType === 1 && ++diff && node === elem) {\n\t\t\t\t\t\t\t\t\t\t\touterCache[type] = [dirruns, nodeIndex, diff];\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t// Use previously-cached element index if available\n\t\t\t\t\t\t\t\t\tif (useCache) {\n\t\t\t\t\t\t\t\t\t\touterCache = elem[expando] || (elem[expando] = {});\n\t\t\t\t\t\t\t\t\t\tcache = outerCache[type] || [];\n\t\t\t\t\t\t\t\t\t\tnodeIndex = cache[0] === dirruns && cache[1];\n\t\t\t\t\t\t\t\t\t\tdiff = nodeIndex;\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// xml :nth-child(...)\n\t\t\t\t\t\t\t\t\t// or :nth-last-child(...) or :nth(-last)?-of-type(...)\n\t\t\t\t\t\t\t\t\tif (diff === false) {\n\n\t\t\t\t\t\t\t\t\t\t// Use the same loop as above to seek `elem` from the start\n\t\t\t\t\t\t\t\t\t\twhile ((node = ++nodeIndex && node && node[dir] ||\n\t\t\t\t\t\t\t\t\t\t\t(diff = nodeIndex = 0) || start.pop())) {\n\n\t\t\t\t\t\t\t\t\t\t\tif ((ofType ?\n\t\t\t\t\t\t\t\t\t\t\t\tnodeName(node, name) :\n\t\t\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1) &&\n\t\t\t\t\t\t\t\t\t\t\t\t++diff) {\n\n\t\t\t\t\t\t\t\t\t\t\t\t// Cache the index of each encountered element\n\t\t\t\t\t\t\t\t\t\t\t\tif (useCache) {\n\t\t\t\t\t\t\t\t\t\t\t\t\touterCache = node[expando] ||\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t(node[expando] = {});\n\t\t\t\t\t\t\t\t\t\t\t\t\touterCache[type] = [dirruns, diff];\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\tif (node === elem) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t// Incorporate the offset, then check against cycle size\n\t\t\t\t\t\t\t\tdiff -= last;\n\t\t\t\t\t\t\t\treturn diff === first || (diff % first === 0 && diff / first >= 0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\t\t\t\t},\n\n\t\t\t\tPSEUDO: function (pseudo, argument) {\n\n\t\t\t\t\t// pseudo-class names are case-insensitive\n\t\t\t\t\t// https://www.w3.org/TR/selectors/#pseudo-classes\n\t\t\t\t\t// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters\n\t\t\t\t\t// Remember that setFilters inherits from pseudos\n\t\t\t\t\tvar args,\n\t\t\t\t\t\tfn = Expr.pseudos[pseudo] || Expr.setFilters[pseudo.toLowerCase()] ||\n\t\t\t\t\t\t\tfind.error(\"unsupported pseudo: \" + pseudo);\n\n\t\t\t\t\t// The user may use createPseudo to indicate that\n\t\t\t\t\t// arguments are needed to create the filter function\n\t\t\t\t\t// just as jQuery does\n\t\t\t\t\tif (fn[expando]) {\n\t\t\t\t\t\treturn fn(argument);\n\t\t\t\t\t}\n\n\t\t\t\t\t// But maintain support for old signatures\n\t\t\t\t\tif (fn.length > 1) {\n\t\t\t\t\t\targs = [pseudo, pseudo, \"\", argument];\n\t\t\t\t\t\treturn Expr.setFilters.hasOwnProperty(pseudo.toLowerCase()) ?\n\t\t\t\t\t\t\tmarkFunction(function (seed, matches) {\n\t\t\t\t\t\t\t\tvar idx,\n\t\t\t\t\t\t\t\t\tmatched = fn(seed, argument),\n\t\t\t\t\t\t\t\t\ti = matched.length;\n\t\t\t\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\t\t\t\tidx = indexOf.call(seed, matched[i]);\n\t\t\t\t\t\t\t\t\tseed[idx] = !(matches[idx] = matched[i]);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}) :\n\t\t\t\t\t\t\tfunction (elem) {\n\t\t\t\t\t\t\t\treturn fn(elem, 0, args);\n\t\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\treturn fn;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tpseudos: {\n\n\t\t\t\t// Potentially complex pseudos\n\t\t\t\tnot: markFunction(function (selector) {\n\n\t\t\t\t\t// Trim the selector passed to compile\n\t\t\t\t\t// to avoid treating leading and trailing\n\t\t\t\t\t// spaces as combinators\n\t\t\t\t\tvar input = [],\n\t\t\t\t\t\tresults = [],\n\t\t\t\t\t\tmatcher = compile(selector.replace(rtrimCSS, \"$1\"));\n\n\t\t\t\t\treturn matcher[expando] ?\n\t\t\t\t\t\tmarkFunction(function (seed, matches, _context, xml) {\n\t\t\t\t\t\t\tvar elem,\n\t\t\t\t\t\t\t\tunmatched = matcher(seed, null, xml, []),\n\t\t\t\t\t\t\t\ti = seed.length;\n\n\t\t\t\t\t\t\t// Match elements unmatched by `matcher`\n\t\t\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\t\t\tif ((elem = unmatched[i])) {\n\t\t\t\t\t\t\t\t\tseed[i] = !(matches[i] = elem);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}) :\n\t\t\t\t\t\tfunction (elem, _context, xml) {\n\t\t\t\t\t\t\tinput[0] = elem;\n\t\t\t\t\t\t\tmatcher(input, null, xml, results);\n\n\t\t\t\t\t\t\t// Don't keep the element\n\t\t\t\t\t\t\t// (see https://github.com/jquery/sizzle/issues/299)\n\t\t\t\t\t\t\tinput[0] = null;\n\t\t\t\t\t\t\treturn !results.pop();\n\t\t\t\t\t\t};\n\t\t\t\t}),\n\n\t\t\t\thas: markFunction(function (selector) {\n\t\t\t\t\treturn function (elem) {\n\t\t\t\t\t\treturn find(selector, elem).length > 0;\n\t\t\t\t\t};\n\t\t\t\t}),\n\n\t\t\t\tcontains: markFunction(function (text) {\n\t\t\t\t\ttext = text.replace(runescape, funescape);\n\t\t\t\t\treturn function (elem) {\n\t\t\t\t\t\treturn (elem.textContent || jQuery.text(elem)).indexOf(text) > -1;\n\t\t\t\t\t};\n\t\t\t\t}),\n\n\t\t\t\t// \"Whether an element is represented by a :lang() selector\n\t\t\t\t// is based solely on the element's language value\n\t\t\t\t// being equal to the identifier C,\n\t\t\t\t// or beginning with the identifier C immediately followed by \"-\".\n\t\t\t\t// The matching of C against the element's language value is performed case-insensitively.\n\t\t\t\t// The identifier C does not have to be a valid language name.\"\n\t\t\t\t// https://www.w3.org/TR/selectors/#lang-pseudo\n\t\t\t\tlang: markFunction(function (lang) {\n\n\t\t\t\t\t// lang value must be a valid identifier\n\t\t\t\t\tif (!ridentifier.test(lang || \"\")) {\n\t\t\t\t\t\tfind.error(\"unsupported lang: \" + lang);\n\t\t\t\t\t}\n\t\t\t\t\tlang = lang.replace(runescape, funescape).toLowerCase();\n\t\t\t\t\treturn function (elem) {\n\t\t\t\t\t\tvar elemLang;\n\t\t\t\t\t\tdo {\n\t\t\t\t\t\t\tif ((elemLang = documentIsHTML ?\n\t\t\t\t\t\t\t\telem.lang :\n\t\t\t\t\t\t\t\telem.getAttribute(\"xml:lang\") || elem.getAttribute(\"lang\"))) {\n\n\t\t\t\t\t\t\t\telemLang = elemLang.toLowerCase();\n\t\t\t\t\t\t\t\treturn elemLang === lang || elemLang.indexOf(lang + \"-\") === 0;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} while ((elem = elem.parentNode) && elem.nodeType === 1);\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t};\n\t\t\t\t}),\n\n\t\t\t\t// Miscellaneous\n\t\t\t\ttarget: function (elem) {\n\t\t\t\t\tvar hash = window.location && window.location.hash;\n\t\t\t\t\treturn hash && hash.slice(1) === elem.id;\n\t\t\t\t},\n\n\t\t\t\troot: function (elem) {\n\t\t\t\t\treturn elem === documentElement;\n\t\t\t\t},\n\n\t\t\t\tfocus: function (elem) {\n\t\t\t\t\treturn elem === safeActiveElement() &&\n\t\t\t\t\t\tdocument.hasFocus() &&\n\t\t\t\t\t\t!!(elem.type || elem.href || ~elem.tabIndex);\n\t\t\t\t},\n\n\t\t\t\t// Boolean properties\n\t\t\t\tenabled: createDisabledPseudo(false),\n\t\t\t\tdisabled: createDisabledPseudo(true),\n\n\t\t\t\tchecked: function (elem) {\n\n\t\t\t\t\t// In CSS3, :checked should return both checked and selected elements\n\t\t\t\t\t// https://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\t\t\treturn (nodeName(elem, \"input\") && !!elem.checked) ||\n\t\t\t\t\t\t(nodeName(elem, \"option\") && !!elem.selected);\n\t\t\t\t},\n\n\t\t\t\tselected: function (elem) {\n\n\t\t\t\t\t// Support: IE <=11+\n\t\t\t\t\t// Accessing the selectedIndex property\n\t\t\t\t\t// forces the browser to treat the default option as\n\t\t\t\t\t// selected when in an optgroup.\n\t\t\t\t\tif (elem.parentNode) {\n\t\t\t\t\t\t// eslint-disable-next-line no-unused-expressions\n\t\t\t\t\t\telem.parentNode.selectedIndex;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn elem.selected === true;\n\t\t\t\t},\n\n\t\t\t\t// Contents\n\t\t\t\tempty: function (elem) {\n\n\t\t\t\t\t// https://www.w3.org/TR/selectors/#empty-pseudo\n\t\t\t\t\t// :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),\n\t\t\t\t\t//   but not by others (comment: 8; processing instruction: 7; etc.)\n\t\t\t\t\t// nodeType < 6 works because attributes (2) do not appear as children\n\t\t\t\t\tfor (elem = elem.firstChild; elem; elem = elem.nextSibling) {\n\t\t\t\t\t\tif (elem.nodeType < 6) {\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn true;\n\t\t\t\t},\n\n\t\t\t\tparent: function (elem) {\n\t\t\t\t\treturn !Expr.pseudos.empty(elem);\n\t\t\t\t},\n\n\t\t\t\t// Element/input types\n\t\t\t\theader: function (elem) {\n\t\t\t\t\treturn rheader.test(elem.nodeName);\n\t\t\t\t},\n\n\t\t\t\tinput: function (elem) {\n\t\t\t\t\treturn rinputs.test(elem.nodeName);\n\t\t\t\t},\n\n\t\t\t\tbutton: function (elem) {\n\t\t\t\t\treturn nodeName(elem, \"input\") && elem.type === \"button\" ||\n\t\t\t\t\t\tnodeName(elem, \"button\");\n\t\t\t\t},\n\n\t\t\t\ttext: function (elem) {\n\t\t\t\t\tvar attr;\n\t\t\t\t\treturn nodeName(elem, \"input\") && elem.type === \"text\" &&\n\n\t\t\t\t\t\t// Support: IE <10 only\n\t\t\t\t\t\t// New HTML5 attribute values (e.g., \"search\") appear\n\t\t\t\t\t\t// with elem.type === \"text\"\n\t\t\t\t\t\t((attr = elem.getAttribute(\"type\")) == null ||\n\t\t\t\t\t\t\tattr.toLowerCase() === \"text\");\n\t\t\t\t},\n\n\t\t\t\t// Position-in-collection\n\t\t\t\tfirst: createPositionalPseudo(function () {\n\t\t\t\t\treturn [0];\n\t\t\t\t}),\n\n\t\t\t\tlast: createPositionalPseudo(function (_matchIndexes, length) {\n\t\t\t\t\treturn [length - 1];\n\t\t\t\t}),\n\n\t\t\t\teq: createPositionalPseudo(function (_matchIndexes, length, argument) {\n\t\t\t\t\treturn [argument < 0 ? argument + length : argument];\n\t\t\t\t}),\n\n\t\t\t\teven: createPositionalPseudo(function (matchIndexes, length) {\n\t\t\t\t\tvar i = 0;\n\t\t\t\t\tfor (; i < length; i += 2) {\n\t\t\t\t\t\tmatchIndexes.push(i);\n\t\t\t\t\t}\n\t\t\t\t\treturn matchIndexes;\n\t\t\t\t}),\n\n\t\t\t\todd: createPositionalPseudo(function (matchIndexes, length) {\n\t\t\t\t\tvar i = 1;\n\t\t\t\t\tfor (; i < length; i += 2) {\n\t\t\t\t\t\tmatchIndexes.push(i);\n\t\t\t\t\t}\n\t\t\t\t\treturn matchIndexes;\n\t\t\t\t}),\n\n\t\t\t\tlt: createPositionalPseudo(function (matchIndexes, length, argument) {\n\t\t\t\t\tvar i;\n\n\t\t\t\t\tif (argument < 0) {\n\t\t\t\t\t\ti = argument + length;\n\t\t\t\t\t} else if (argument > length) {\n\t\t\t\t\t\ti = length;\n\t\t\t\t\t} else {\n\t\t\t\t\t\ti = argument;\n\t\t\t\t\t}\n\n\t\t\t\t\tfor (; --i >= 0;) {\n\t\t\t\t\t\tmatchIndexes.push(i);\n\t\t\t\t\t}\n\t\t\t\t\treturn matchIndexes;\n\t\t\t\t}),\n\n\t\t\t\tgt: createPositionalPseudo(function (matchIndexes, length, argument) {\n\t\t\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\t\t\tfor (; ++i < length;) {\n\t\t\t\t\t\tmatchIndexes.push(i);\n\t\t\t\t\t}\n\t\t\t\t\treturn matchIndexes;\n\t\t\t\t})\n\t\t\t}\n\t\t};\n\n\t\tExpr.pseudos.nth = Expr.pseudos.eq;\n\n\t\t// Add button/input type pseudos\n\t\tfor (i in { radio: true, checkbox: true, file: true, password: true, image: true }) {\n\t\t\tExpr.pseudos[i] = createInputPseudo(i);\n\t\t}\n\t\tfor (i in { submit: true, reset: true }) {\n\t\t\tExpr.pseudos[i] = createButtonPseudo(i);\n\t\t}\n\n\t\t// Easy API for creating new setFilters\n\t\tfunction setFilters() { }\n\t\tsetFilters.prototype = Expr.filters = Expr.pseudos;\n\t\tExpr.setFilters = new setFilters();\n\n\t\tfunction tokenize(selector, parseOnly) {\n\t\t\tvar matched, match, tokens, type,\n\t\t\t\tsoFar, groups, preFilters,\n\t\t\t\tcached = tokenCache[selector + \" \"];\n\n\t\t\tif (cached) {\n\t\t\t\treturn parseOnly ? 0 : cached.slice(0);\n\t\t\t}\n\n\t\t\tsoFar = selector;\n\t\t\tgroups = [];\n\t\t\tpreFilters = Expr.preFilter;\n\n\t\t\twhile (soFar) {\n\n\t\t\t\t// Comma and first run\n\t\t\t\tif (!matched || (match = rcomma.exec(soFar))) {\n\t\t\t\t\tif (match) {\n\n\t\t\t\t\t\t// Don't consume trailing commas as valid\n\t\t\t\t\t\tsoFar = soFar.slice(match[0].length) || soFar;\n\t\t\t\t\t}\n\t\t\t\t\tgroups.push((tokens = []));\n\t\t\t\t}\n\n\t\t\t\tmatched = false;\n\n\t\t\t\t// Combinators\n\t\t\t\tif ((match = rleadingCombinator.exec(soFar))) {\n\t\t\t\t\tmatched = match.shift();\n\t\t\t\t\ttokens.push({\n\t\t\t\t\t\tvalue: matched,\n\n\t\t\t\t\t\t// Cast descendant combinators to space\n\t\t\t\t\t\ttype: match[0].replace(rtrimCSS, \" \")\n\t\t\t\t\t});\n\t\t\t\t\tsoFar = soFar.slice(matched.length);\n\t\t\t\t}\n\n\t\t\t\t// Filters\n\t\t\t\tfor (type in Expr.filter) {\n\t\t\t\t\tif ((match = matchExpr[type].exec(soFar)) && (!preFilters[type] ||\n\t\t\t\t\t\t(match = preFilters[type](match)))) {\n\t\t\t\t\t\tmatched = match.shift();\n\t\t\t\t\t\ttokens.push({\n\t\t\t\t\t\t\tvalue: matched,\n\t\t\t\t\t\t\ttype: type,\n\t\t\t\t\t\t\tmatches: match\n\t\t\t\t\t\t});\n\t\t\t\t\t\tsoFar = soFar.slice(matched.length);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (!matched) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Return the length of the invalid excess\n\t\t\t// if we're just parsing\n\t\t\t// Otherwise, throw an error or return tokens\n\t\t\tif (parseOnly) {\n\t\t\t\treturn soFar.length;\n\t\t\t}\n\n\t\t\treturn soFar ?\n\t\t\t\tfind.error(selector) :\n\n\t\t\t\t// Cache the tokens\n\t\t\t\ttokenCache(selector, groups).slice(0);\n\t\t}\n\n\t\tfunction toSelector(tokens) {\n\t\t\tvar i = 0,\n\t\t\t\tlen = tokens.length,\n\t\t\t\tselector = \"\";\n\t\t\tfor (; i < len; i++) {\n\t\t\t\tselector += tokens[i].value;\n\t\t\t}\n\t\t\treturn selector;\n\t\t}\n\n\t\tfunction addCombinator(matcher, combinator, base) {\n\t\t\tvar dir = combinator.dir,\n\t\t\t\tskip = combinator.next,\n\t\t\t\tkey = skip || dir,\n\t\t\t\tcheckNonElements = base && key === \"parentNode\",\n\t\t\t\tdoneName = done++;\n\n\t\t\treturn combinator.first ?\n\n\t\t\t\t// Check against closest ancestor/preceding element\n\t\t\t\tfunction (elem, context, xml) {\n\t\t\t\t\twhile ((elem = elem[dir])) {\n\t\t\t\t\t\tif (elem.nodeType === 1 || checkNonElements) {\n\t\t\t\t\t\t\treturn matcher(elem, context, xml);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn false;\n\t\t\t\t} :\n\n\t\t\t\t// Check against all ancestor/preceding elements\n\t\t\t\tfunction (elem, context, xml) {\n\t\t\t\t\tvar oldCache, outerCache,\n\t\t\t\t\t\tnewCache = [dirruns, doneName];\n\n\t\t\t\t\t// We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching\n\t\t\t\t\tif (xml) {\n\t\t\t\t\t\twhile ((elem = elem[dir])) {\n\t\t\t\t\t\t\tif (elem.nodeType === 1 || checkNonElements) {\n\t\t\t\t\t\t\t\tif (matcher(elem, context, xml)) {\n\t\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\twhile ((elem = elem[dir])) {\n\t\t\t\t\t\t\tif (elem.nodeType === 1 || checkNonElements) {\n\t\t\t\t\t\t\t\touterCache = elem[expando] || (elem[expando] = {});\n\n\t\t\t\t\t\t\t\tif (skip && nodeName(elem, skip)) {\n\t\t\t\t\t\t\t\t\telem = elem[dir] || elem;\n\t\t\t\t\t\t\t\t} else if ((oldCache = outerCache[key]) &&\n\t\t\t\t\t\t\t\t\toldCache[0] === dirruns && oldCache[1] === doneName) {\n\n\t\t\t\t\t\t\t\t\t// Assign to newCache so results back-propagate to previous elements\n\t\t\t\t\t\t\t\t\treturn (newCache[2] = oldCache[2]);\n\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t// Reuse newcache so results back-propagate to previous elements\n\t\t\t\t\t\t\t\t\touterCache[key] = newCache;\n\n\t\t\t\t\t\t\t\t\t// A match means we're done; a fail means we have to keep checking\n\t\t\t\t\t\t\t\t\tif ((newCache[2] = matcher(elem, context, xml))) {\n\t\t\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn false;\n\t\t\t\t};\n\t\t}\n\n\t\tfunction elementMatcher(matchers) {\n\t\t\treturn matchers.length > 1 ?\n\t\t\t\tfunction (elem, context, xml) {\n\t\t\t\t\tvar i = matchers.length;\n\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\tif (!matchers[i](elem, context, xml)) {\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn true;\n\t\t\t\t} :\n\t\t\t\tmatchers[0];\n\t\t}\n\n\t\tfunction multipleContexts(selector, contexts, results) {\n\t\t\tvar i = 0,\n\t\t\t\tlen = contexts.length;\n\t\t\tfor (; i < len; i++) {\n\t\t\t\tfind(selector, contexts[i], results);\n\t\t\t}\n\t\t\treturn results;\n\t\t}\n\n\t\tfunction condense(unmatched, map, filter, context, xml) {\n\t\t\tvar elem,\n\t\t\t\tnewUnmatched = [],\n\t\t\t\ti = 0,\n\t\t\t\tlen = unmatched.length,\n\t\t\t\tmapped = map != null;\n\n\t\t\tfor (; i < len; i++) {\n\t\t\t\tif ((elem = unmatched[i])) {\n\t\t\t\t\tif (!filter || filter(elem, context, xml)) {\n\t\t\t\t\t\tnewUnmatched.push(elem);\n\t\t\t\t\t\tif (mapped) {\n\t\t\t\t\t\t\tmap.push(i);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn newUnmatched;\n\t\t}\n\n\t\tfunction setMatcher(preFilter, selector, matcher, postFilter, postFinder, postSelector) {\n\t\t\tif (postFilter && !postFilter[expando]) {\n\t\t\t\tpostFilter = setMatcher(postFilter);\n\t\t\t}\n\t\t\tif (postFinder && !postFinder[expando]) {\n\t\t\t\tpostFinder = setMatcher(postFinder, postSelector);\n\t\t\t}\n\t\t\treturn markFunction(function (seed, results, context, xml) {\n\t\t\t\tvar temp, i, elem, matcherOut,\n\t\t\t\t\tpreMap = [],\n\t\t\t\t\tpostMap = [],\n\t\t\t\t\tpreexisting = results.length,\n\n\t\t\t\t\t// Get initial elements from seed or context\n\t\t\t\t\telems = seed ||\n\t\t\t\t\t\tmultipleContexts(selector || \"*\",\n\t\t\t\t\t\t\tcontext.nodeType ? [context] : context, []),\n\n\t\t\t\t\t// Prefilter to get matcher input, preserving a map for seed-results synchronization\n\t\t\t\t\tmatcherIn = preFilter && (seed || !selector) ?\n\t\t\t\t\t\tcondense(elems, preMap, preFilter, context, xml) :\n\t\t\t\t\t\telems;\n\n\t\t\t\tif (matcher) {\n\n\t\t\t\t\t// If we have a postFinder, or filtered seed, or non-seed postFilter\n\t\t\t\t\t// or preexisting results,\n\t\t\t\t\tmatcherOut = postFinder || (seed ? preFilter : preexisting || postFilter) ?\n\n\t\t\t\t\t\t// ...intermediate processing is necessary\n\t\t\t\t\t\t[] :\n\n\t\t\t\t\t\t// ...otherwise use results directly\n\t\t\t\t\t\tresults;\n\n\t\t\t\t\t// Find primary matches\n\t\t\t\t\tmatcher(matcherIn, matcherOut, context, xml);\n\t\t\t\t} else {\n\t\t\t\t\tmatcherOut = matcherIn;\n\t\t\t\t}\n\n\t\t\t\t// Apply postFilter\n\t\t\t\tif (postFilter) {\n\t\t\t\t\ttemp = condense(matcherOut, postMap);\n\t\t\t\t\tpostFilter(temp, [], context, xml);\n\n\t\t\t\t\t// Un-match failing elements by moving them back to matcherIn\n\t\t\t\t\ti = temp.length;\n\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\tif ((elem = temp[i])) {\n\t\t\t\t\t\t\tmatcherOut[postMap[i]] = !(matcherIn[postMap[i]] = elem);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (seed) {\n\t\t\t\t\tif (postFinder || preFilter) {\n\t\t\t\t\t\tif (postFinder) {\n\n\t\t\t\t\t\t\t// Get the final matcherOut by condensing this intermediate into postFinder contexts\n\t\t\t\t\t\t\ttemp = [];\n\t\t\t\t\t\t\ti = matcherOut.length;\n\t\t\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\t\t\tif ((elem = matcherOut[i])) {\n\n\t\t\t\t\t\t\t\t\t// Restore matcherIn since elem is not yet a final match\n\t\t\t\t\t\t\t\t\ttemp.push((matcherIn[i] = elem));\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tpostFinder(null, (matcherOut = []), temp, xml);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Move matched elements from seed to results to keep them synchronized\n\t\t\t\t\t\ti = matcherOut.length;\n\t\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\t\tif ((elem = matcherOut[i]) &&\n\t\t\t\t\t\t\t\t(temp = postFinder ? indexOf.call(seed, elem) : preMap[i]) > -1) {\n\n\t\t\t\t\t\t\t\tseed[temp] = !(results[temp] = elem);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Add elements to results, through postFinder if defined\n\t\t\t\t} else {\n\t\t\t\t\tmatcherOut = condense(\n\t\t\t\t\t\tmatcherOut === results ?\n\t\t\t\t\t\t\tmatcherOut.splice(preexisting, matcherOut.length) :\n\t\t\t\t\t\t\tmatcherOut\n\t\t\t\t\t);\n\t\t\t\t\tif (postFinder) {\n\t\t\t\t\t\tpostFinder(null, results, matcherOut, xml);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tpush.apply(results, matcherOut);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tfunction matcherFromTokens(tokens) {\n\t\t\tvar checkContext, matcher, j,\n\t\t\t\tlen = tokens.length,\n\t\t\t\tleadingRelative = Expr.relative[tokens[0].type],\n\t\t\t\timplicitRelative = leadingRelative || Expr.relative[\" \"],\n\t\t\t\ti = leadingRelative ? 1 : 0,\n\n\t\t\t\t// The foundational matcher ensures that elements are reachable from top-level context(s)\n\t\t\t\tmatchContext = addCombinator(function (elem) {\n\t\t\t\t\treturn elem === checkContext;\n\t\t\t\t}, implicitRelative, true),\n\t\t\t\tmatchAnyContext = addCombinator(function (elem) {\n\t\t\t\t\treturn indexOf.call(checkContext, elem) > -1;\n\t\t\t\t}, implicitRelative, true),\n\t\t\t\tmatchers = [function (elem, context, xml) {\n\n\t\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\tvar ret = (!leadingRelative && (xml || context != outermostContext)) || (\n\t\t\t\t\t\t(checkContext = context).nodeType ?\n\t\t\t\t\t\t\tmatchContext(elem, context, xml) :\n\t\t\t\t\t\t\tmatchAnyContext(elem, context, xml));\n\n\t\t\t\t\t// Avoid hanging onto element\n\t\t\t\t\t// (see https://github.com/jquery/sizzle/issues/299)\n\t\t\t\t\tcheckContext = null;\n\t\t\t\t\treturn ret;\n\t\t\t\t}];\n\n\t\t\tfor (; i < len; i++) {\n\t\t\t\tif ((matcher = Expr.relative[tokens[i].type])) {\n\t\t\t\t\tmatchers = [addCombinator(elementMatcher(matchers), matcher)];\n\t\t\t\t} else {\n\t\t\t\t\tmatcher = Expr.filter[tokens[i].type].apply(null, tokens[i].matches);\n\n\t\t\t\t\t// Return special upon seeing a positional matcher\n\t\t\t\t\tif (matcher[expando]) {\n\n\t\t\t\t\t\t// Find the next relative operator (if any) for proper handling\n\t\t\t\t\t\tj = ++i;\n\t\t\t\t\t\tfor (; j < len; j++) {\n\t\t\t\t\t\t\tif (Expr.relative[tokens[j].type]) {\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn setMatcher(\n\t\t\t\t\t\t\ti > 1 && elementMatcher(matchers),\n\t\t\t\t\t\t\ti > 1 && toSelector(\n\n\t\t\t\t\t\t\t\t// If the preceding token was a descendant combinator, insert an implicit any-element `*`\n\t\t\t\t\t\t\t\ttokens.slice(0, i - 1)\n\t\t\t\t\t\t\t\t\t.concat({ value: tokens[i - 2].type === \" \" ? \"*\" : \"\" })\n\t\t\t\t\t\t\t).replace(rtrimCSS, \"$1\"),\n\t\t\t\t\t\t\tmatcher,\n\t\t\t\t\t\t\ti < j && matcherFromTokens(tokens.slice(i, j)),\n\t\t\t\t\t\t\tj < len && matcherFromTokens((tokens = tokens.slice(j))),\n\t\t\t\t\t\t\tj < len && toSelector(tokens)\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\tmatchers.push(matcher);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn elementMatcher(matchers);\n\t\t}\n\n\t\tfunction matcherFromGroupMatchers(elementMatchers, setMatchers) {\n\t\t\tvar bySet = setMatchers.length > 0,\n\t\t\t\tbyElement = elementMatchers.length > 0,\n\t\t\t\tsuperMatcher = function (seed, context, xml, results, outermost) {\n\t\t\t\t\tvar elem, j, matcher,\n\t\t\t\t\t\tmatchedCount = 0,\n\t\t\t\t\t\ti = \"0\",\n\t\t\t\t\t\tunmatched = seed && [],\n\t\t\t\t\t\tsetMatched = [],\n\t\t\t\t\t\tcontextBackup = outermostContext,\n\n\t\t\t\t\t\t// We must always have either seed elements or outermost context\n\t\t\t\t\t\telems = seed || byElement && Expr.find.TAG(\"*\", outermost),\n\n\t\t\t\t\t\t// Use integer dirruns iff this is the outermost matcher\n\t\t\t\t\t\tdirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1),\n\t\t\t\t\t\tlen = elems.length;\n\n\t\t\t\t\tif (outermost) {\n\n\t\t\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\t\toutermostContext = context == document || context || outermost;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Add elements passing elementMatchers directly to results\n\t\t\t\t\t// Support: iOS <=7 - 9 only\n\t\t\t\t\t// Tolerate NodeList properties (IE: \"length\"; Safari: <number>) matching\n\t\t\t\t\t// elements by id. (see trac-14142)\n\t\t\t\t\tfor (; i !== len && (elem = elems[i]) != null; i++) {\n\t\t\t\t\t\tif (byElement && elem) {\n\t\t\t\t\t\t\tj = 0;\n\n\t\t\t\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\t\t\tif (!context && elem.ownerDocument != document) {\n\t\t\t\t\t\t\t\tsetDocument(elem);\n\t\t\t\t\t\t\t\txml = !documentIsHTML;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\twhile ((matcher = elementMatchers[j++])) {\n\t\t\t\t\t\t\t\tif (matcher(elem, context || document, xml)) {\n\t\t\t\t\t\t\t\t\tpush.call(results, elem);\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (outermost) {\n\t\t\t\t\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Track unmatched elements for set filters\n\t\t\t\t\t\tif (bySet) {\n\n\t\t\t\t\t\t\t// They will have gone through all possible matchers\n\t\t\t\t\t\t\tif ((elem = !matcher && elem)) {\n\t\t\t\t\t\t\t\tmatchedCount--;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Lengthen the array for every element, matched or not\n\t\t\t\t\t\t\tif (seed) {\n\t\t\t\t\t\t\t\tunmatched.push(elem);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// `i` is now the count of elements visited above, and adding it to `matchedCount`\n\t\t\t\t\t// makes the latter nonnegative.\n\t\t\t\t\tmatchedCount += i;\n\n\t\t\t\t\t// Apply set filters to unmatched elements\n\t\t\t\t\t// NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`\n\t\t\t\t\t// equals `i`), unless we didn't visit _any_ elements in the above loop because we have\n\t\t\t\t\t// no element matchers and no seed.\n\t\t\t\t\t// Incrementing an initially-string \"0\" `i` allows `i` to remain a string only in that\n\t\t\t\t\t// case, which will result in a \"00\" `matchedCount` that differs from `i` but is also\n\t\t\t\t\t// numerically zero.\n\t\t\t\t\tif (bySet && i !== matchedCount) {\n\t\t\t\t\t\tj = 0;\n\t\t\t\t\t\twhile ((matcher = setMatchers[j++])) {\n\t\t\t\t\t\t\tmatcher(unmatched, setMatched, context, xml);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (seed) {\n\n\t\t\t\t\t\t\t// Reintegrate element matches to eliminate the need for sorting\n\t\t\t\t\t\t\tif (matchedCount > 0) {\n\t\t\t\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\t\t\t\tif (!(unmatched[i] || setMatched[i])) {\n\t\t\t\t\t\t\t\t\t\tsetMatched[i] = pop.call(results);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Discard index placeholder values to get only actual matches\n\t\t\t\t\t\t\tsetMatched = condense(setMatched);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Add matches to results\n\t\t\t\t\t\tpush.apply(results, setMatched);\n\n\t\t\t\t\t\t// Seedless set matches succeeding multiple successful matchers stipulate sorting\n\t\t\t\t\t\tif (outermost && !seed && setMatched.length > 0 &&\n\t\t\t\t\t\t\t(matchedCount + setMatchers.length) > 1) {\n\n\t\t\t\t\t\t\tjQuery.uniqueSort(results);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Override manipulation of globals by nested matchers\n\t\t\t\t\tif (outermost) {\n\t\t\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\t\t\toutermostContext = contextBackup;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn unmatched;\n\t\t\t\t};\n\n\t\t\treturn bySet ?\n\t\t\t\tmarkFunction(superMatcher) :\n\t\t\t\tsuperMatcher;\n\t\t}\n\n\t\tfunction compile(selector, match /* Internal Use Only */) {\n\t\t\tvar i,\n\t\t\t\tsetMatchers = [],\n\t\t\t\telementMatchers = [],\n\t\t\t\tcached = compilerCache[selector + \" \"];\n\n\t\t\tif (!cached) {\n\n\t\t\t\t// Generate a function of recursive functions that can be used to check each element\n\t\t\t\tif (!match) {\n\t\t\t\t\tmatch = tokenize(selector);\n\t\t\t\t}\n\t\t\t\ti = match.length;\n\t\t\t\twhile (i--) {\n\t\t\t\t\tcached = matcherFromTokens(match[i]);\n\t\t\t\t\tif (cached[expando]) {\n\t\t\t\t\t\tsetMatchers.push(cached);\n\t\t\t\t\t} else {\n\t\t\t\t\t\telementMatchers.push(cached);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Cache the compiled function\n\t\t\t\tcached = compilerCache(selector,\n\t\t\t\t\tmatcherFromGroupMatchers(elementMatchers, setMatchers));\n\n\t\t\t\t// Save selector and tokenization\n\t\t\t\tcached.selector = selector;\n\t\t\t}\n\t\t\treturn cached;\n\t\t}\n\n\t\t/**\n\t\t * A low-level selection function that works with jQuery's compiled\n\t\t *  selector functions\n\t\t * @param {String|Function} selector A selector or a pre-compiled\n\t\t *  selector function built with jQuery selector compile\n\t\t * @param {Element} context\n\t\t * @param {Array} [results]\n\t\t * @param {Array} [seed] A set of elements to match against\n\t\t */\n\t\tfunction select(selector, context, results, seed) {\n\t\t\tvar i, tokens, token, type, find,\n\t\t\t\tcompiled = typeof selector === \"function\" && selector,\n\t\t\t\tmatch = !seed && tokenize((selector = compiled.selector || selector));\n\n\t\t\tresults = results || [];\n\n\t\t\t// Try to minimize operations if there is only one selector in the list and no seed\n\t\t\t// (the latter of which guarantees us context)\n\t\t\tif (match.length === 1) {\n\n\t\t\t\t// Reduce context if the leading compound selector is an ID\n\t\t\t\ttokens = match[0] = match[0].slice(0);\n\t\t\t\tif (tokens.length > 2 && (token = tokens[0]).type === \"ID\" &&\n\t\t\t\t\tcontext.nodeType === 9 && documentIsHTML && Expr.relative[tokens[1].type]) {\n\n\t\t\t\t\tcontext = (Expr.find.ID(\n\t\t\t\t\t\ttoken.matches[0].replace(runescape, funescape),\n\t\t\t\t\t\tcontext\n\t\t\t\t\t) || [])[0];\n\t\t\t\t\tif (!context) {\n\t\t\t\t\t\treturn results;\n\n\t\t\t\t\t\t// Precompiled matchers will still verify ancestry, so step up a level\n\t\t\t\t\t} else if (compiled) {\n\t\t\t\t\t\tcontext = context.parentNode;\n\t\t\t\t\t}\n\n\t\t\t\t\tselector = selector.slice(tokens.shift().value.length);\n\t\t\t\t}\n\n\t\t\t\t// Fetch a seed set for right-to-left matching\n\t\t\t\ti = matchExpr.needsContext.test(selector) ? 0 : tokens.length;\n\t\t\t\twhile (i--) {\n\t\t\t\t\ttoken = tokens[i];\n\n\t\t\t\t\t// Abort if we hit a combinator\n\t\t\t\t\tif (Expr.relative[(type = token.type)]) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tif ((find = Expr.find[type])) {\n\n\t\t\t\t\t\t// Search, expanding context for leading sibling combinators\n\t\t\t\t\t\tif ((seed = find(\n\t\t\t\t\t\t\ttoken.matches[0].replace(runescape, funescape),\n\t\t\t\t\t\t\trsibling.test(tokens[0].type) &&\n\t\t\t\t\t\t\ttestContext(context.parentNode) || context\n\t\t\t\t\t\t))) {\n\n\t\t\t\t\t\t\t// If seed is empty or no tokens remain, we can return early\n\t\t\t\t\t\t\ttokens.splice(i, 1);\n\t\t\t\t\t\t\tselector = seed.length && toSelector(tokens);\n\t\t\t\t\t\t\tif (!selector) {\n\t\t\t\t\t\t\t\tpush.apply(results, seed);\n\t\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Compile and execute a filtering function if one is not provided\n\t\t\t// Provide `match` to avoid retokenization if we modified the selector above\n\t\t\t(compiled || compile(selector, match))(\n\t\t\t\tseed,\n\t\t\t\tcontext,\n\t\t\t\t!documentIsHTML,\n\t\t\t\tresults,\n\t\t\t\t!context || rsibling.test(selector) && testContext(context.parentNode) || context\n\t\t\t);\n\t\t\treturn results;\n\t\t}\n\n\t\t// One-time assignments\n\n\t\t// Support: Android <=4.0 - 4.1+\n\t\t// Sort stability\n\t\tsupport.sortStable = expando.split(\"\").sort(sortOrder).join(\"\") === expando;\n\n\t\t// Initialize against the default document\n\t\tsetDocument();\n\n\t\t// Support: Android <=4.0 - 4.1+\n\t\t// Detached nodes confoundingly follow *each other*\n\t\tsupport.sortDetached = assert(function (el) {\n\n\t\t\t// Should return 1, but returns 4 (following)\n\t\t\treturn el.compareDocumentPosition(document.createElement(\"fieldset\")) & 1;\n\t\t});\n\n\t\tjQuery.find = find;\n\n\t\t// Deprecated\n\t\tjQuery.expr[\":\"] = jQuery.expr.pseudos;\n\t\tjQuery.unique = jQuery.uniqueSort;\n\n\t\t// These have always been private, but they used to be documented\n\t\t// as part of Sizzle so let's maintain them in the 3.x line\n\t\t// for backwards compatibility purposes.\n\t\tfind.compile = compile;\n\t\tfind.select = select;\n\t\tfind.setDocument = setDocument;\n\n\t\tfind.escape = jQuery.escapeSelector;\n\t\tfind.getText = jQuery.text;\n\t\tfind.isXML = jQuery.isXMLDoc;\n\t\tfind.selectors = jQuery.expr;\n\t\tfind.support = jQuery.support;\n\t\tfind.uniqueSort = jQuery.uniqueSort;\n\n\t\t/* eslint-enable */\n\n\t})();\n\n\n\tvar dir = function (elem, dir, until) {\n\t\tvar matched = [],\n\t\t\ttruncate = until !== undefined;\n\n\t\twhile ((elem = elem[dir]) && elem.nodeType !== 9) {\n\t\t\tif (elem.nodeType === 1) {\n\t\t\t\tif (truncate && jQuery(elem).is(until)) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tmatched.push(elem);\n\t\t\t}\n\t\t}\n\t\treturn matched;\n\t};\n\n\n\tvar siblings = function (n, elem) {\n\t\tvar matched = [];\n\n\t\tfor (; n; n = n.nextSibling) {\n\t\t\tif (n.nodeType === 1 && n !== elem) {\n\t\t\t\tmatched.push(n);\n\t\t\t}\n\t\t}\n\n\t\treturn matched;\n\t};\n\n\n\tvar rneedsContext = jQuery.expr.match.needsContext;\n\n\tvar rsingleTag = (/^<([a-z][^\\/\\0>:\\x20\\t\\r\\n\\f]*)[\\x20\\t\\r\\n\\f]*\\/?>(?:<\\/\\1>|)$/i);\n\n\n\n\t// Implement the identical functionality for filter and not\n\tfunction winnow(elements, qualifier, not) {\n\t\tif (isFunction(qualifier)) {\n\t\t\treturn jQuery.grep(elements, function (elem, i) {\n\t\t\t\treturn !!qualifier.call(elem, i, elem) !== not;\n\t\t\t});\n\t\t}\n\n\t\t// Single element\n\t\tif (qualifier.nodeType) {\n\t\t\treturn jQuery.grep(elements, function (elem) {\n\t\t\t\treturn (elem === qualifier) !== not;\n\t\t\t});\n\t\t}\n\n\t\t// Arraylike of elements (jQuery, arguments, Array)\n\t\tif (typeof qualifier !== \"string\") {\n\t\t\treturn jQuery.grep(elements, function (elem) {\n\t\t\t\treturn (indexOf.call(qualifier, elem) > -1) !== not;\n\t\t\t});\n\t\t}\n\n\t\t// Filtered directly for both simple and complex selectors\n\t\treturn jQuery.filter(qualifier, elements, not);\n\t}\n\n\tjQuery.filter = function (expr, elems, not) {\n\t\tvar elem = elems[0];\n\n\t\tif (not) {\n\t\t\texpr = \":not(\" + expr + \")\";\n\t\t}\n\n\t\tif (elems.length === 1 && elem.nodeType === 1) {\n\t\t\treturn jQuery.find.matchesSelector(elem, expr) ? [elem] : [];\n\t\t}\n\n\t\treturn jQuery.find.matches(expr, jQuery.grep(elems, function (elem) {\n\t\t\treturn elem.nodeType === 1;\n\t\t}));\n\t};\n\n\tjQuery.fn.extend({\n\t\tfind: function (selector) {\n\t\t\tvar i, ret,\n\t\t\t\tlen = this.length,\n\t\t\t\tself = this;\n\n\t\t\tif (typeof selector !== \"string\") {\n\t\t\t\treturn this.pushStack(jQuery(selector).filter(function () {\n\t\t\t\t\tfor (i = 0; i < len; i++) {\n\t\t\t\t\t\tif (jQuery.contains(self[i], this)) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}));\n\t\t\t}\n\n\t\t\tret = this.pushStack([]);\n\n\t\t\tfor (i = 0; i < len; i++) {\n\t\t\t\tjQuery.find(selector, self[i], ret);\n\t\t\t}\n\n\t\t\treturn len > 1 ? jQuery.uniqueSort(ret) : ret;\n\t\t},\n\t\tfilter: function (selector) {\n\t\t\treturn this.pushStack(winnow(this, selector || [], false));\n\t\t},\n\t\tnot: function (selector) {\n\t\t\treturn this.pushStack(winnow(this, selector || [], true));\n\t\t},\n\t\tis: function (selector) {\n\t\t\treturn !!winnow(\n\t\t\t\tthis,\n\n\t\t\t\t// If this is a positional/relative selector, check membership in the returned set\n\t\t\t\t// so $(\"p:first\").is(\"p:last\") won't return true for a doc with two \"p\".\n\t\t\t\ttypeof selector === \"string\" && rneedsContext.test(selector) ?\n\t\t\t\t\tjQuery(selector) :\n\t\t\t\t\tselector || [],\n\t\t\t\tfalse\n\t\t\t).length;\n\t\t}\n\t});\n\n\n\t// Initialize a jQuery object\n\n\n\t// A central reference to the root jQuery(document)\n\tvar rootjQuery,\n\n\t\t// A simple way to check for HTML strings\n\t\t// Prioritize #id over <tag> to avoid XSS via location.hash (trac-9521)\n\t\t// Strict HTML recognition (trac-11290: must start with <)\n\t\t// Shortcut simple #id case for speed\n\t\trquickExpr = /^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]+))$/,\n\n\t\tinit = jQuery.fn.init = function (selector, context, root) {\n\t\t\tvar match, elem;\n\n\t\t\t// HANDLE: $(\"\"), $(null), $(undefined), $(false)\n\t\t\tif (!selector) {\n\t\t\t\treturn this;\n\t\t\t}\n\n\t\t\t// Method init() accepts an alternate rootjQuery\n\t\t\t// so migrate can support jQuery.sub (gh-2101)\n\t\t\troot = root || rootjQuery;\n\n\t\t\t// Handle HTML strings\n\t\t\tif (typeof selector === \"string\") {\n\t\t\t\tif (selector[0] === \"<\" &&\n\t\t\t\t\tselector[selector.length - 1] === \">\" &&\n\t\t\t\t\tselector.length >= 3) {\n\n\t\t\t\t\t// Assume that strings that start and end with <> are HTML and skip the regex check\n\t\t\t\t\tmatch = [null, selector, null];\n\n\t\t\t\t} else {\n\t\t\t\t\tmatch = rquickExpr.exec(selector);\n\t\t\t\t}\n\n\t\t\t\t// Match html or make sure no context is specified for #id\n\t\t\t\tif (match && (match[1] || !context)) {\n\n\t\t\t\t\t// HANDLE: $(html) -> $(array)\n\t\t\t\t\tif (match[1]) {\n\t\t\t\t\t\tcontext = context instanceof jQuery ? context[0] : context;\n\n\t\t\t\t\t\t// Option to run scripts is true for back-compat\n\t\t\t\t\t\t// Intentionally let the error be thrown if parseHTML is not present\n\t\t\t\t\t\tjQuery.merge(this, jQuery.parseHTML(\n\t\t\t\t\t\t\tmatch[1],\n\t\t\t\t\t\t\tcontext && context.nodeType ? context.ownerDocument || context : document,\n\t\t\t\t\t\t\ttrue\n\t\t\t\t\t\t));\n\n\t\t\t\t\t\t// HANDLE: $(html, props)\n\t\t\t\t\t\tif (rsingleTag.test(match[1]) && jQuery.isPlainObject(context)) {\n\t\t\t\t\t\t\tfor (match in context) {\n\n\t\t\t\t\t\t\t\t// Properties of context are called as methods if possible\n\t\t\t\t\t\t\t\tif (isFunction(this[match])) {\n\t\t\t\t\t\t\t\t\tthis[match](context[match]);\n\n\t\t\t\t\t\t\t\t\t// ...and otherwise set as attributes\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tthis.attr(match, context[match]);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn this;\n\n\t\t\t\t\t\t// HANDLE: $(#id)\n\t\t\t\t\t} else {\n\t\t\t\t\t\telem = document.getElementById(match[2]);\n\n\t\t\t\t\t\tif (elem) {\n\n\t\t\t\t\t\t\t// Inject the element directly into the jQuery object\n\t\t\t\t\t\t\tthis[0] = elem;\n\t\t\t\t\t\t\tthis.length = 1;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn this;\n\t\t\t\t\t}\n\n\t\t\t\t\t// HANDLE: $(expr, $(...))\n\t\t\t\t} else if (!context || context.jquery) {\n\t\t\t\t\treturn (context || root).find(selector);\n\n\t\t\t\t\t// HANDLE: $(expr, context)\n\t\t\t\t\t// (which is just equivalent to: $(context).find(expr)\n\t\t\t\t} else {\n\t\t\t\t\treturn this.constructor(context).find(selector);\n\t\t\t\t}\n\n\t\t\t\t// HANDLE: $(DOMElement)\n\t\t\t} else if (selector.nodeType) {\n\t\t\t\tthis[0] = selector;\n\t\t\t\tthis.length = 1;\n\t\t\t\treturn this;\n\n\t\t\t\t// HANDLE: $(function)\n\t\t\t\t// Shortcut for document ready\n\t\t\t} else if (isFunction(selector)) {\n\t\t\t\treturn root.ready !== undefined ?\n\t\t\t\t\troot.ready(selector) :\n\n\t\t\t\t\t// Execute immediately if ready is not present\n\t\t\t\t\tselector(jQuery);\n\t\t\t}\n\n\t\t\treturn jQuery.makeArray(selector, this);\n\t\t};\n\n\t// Give the init function the jQuery prototype for later instantiation\n\tinit.prototype = jQuery.fn;\n\n\t// Initialize central reference\n\trootjQuery = jQuery(document);\n\n\n\tvar rparentsprev = /^(?:parents|prev(?:Until|All))/,\n\n\t\t// Methods guaranteed to produce a unique set when starting from a unique set\n\t\tguaranteedUnique = {\n\t\t\tchildren: true,\n\t\t\tcontents: true,\n\t\t\tnext: true,\n\t\t\tprev: true\n\t\t};\n\n\tjQuery.fn.extend({\n\t\thas: function (target) {\n\t\t\tvar targets = jQuery(target, this),\n\t\t\t\tl = targets.length;\n\n\t\t\treturn this.filter(function () {\n\t\t\t\tvar i = 0;\n\t\t\t\tfor (; i < l; i++) {\n\t\t\t\t\tif (jQuery.contains(this, targets[i])) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\tclosest: function (selectors, context) {\n\t\t\tvar cur,\n\t\t\t\ti = 0,\n\t\t\t\tl = this.length,\n\t\t\t\tmatched = [],\n\t\t\t\ttargets = typeof selectors !== \"string\" && jQuery(selectors);\n\n\t\t\t// Positional selectors never match, since there's no _selection_ context\n\t\t\tif (!rneedsContext.test(selectors)) {\n\t\t\t\tfor (; i < l; i++) {\n\t\t\t\t\tfor (cur = this[i]; cur && cur !== context; cur = cur.parentNode) {\n\n\t\t\t\t\t\t// Always skip document fragments\n\t\t\t\t\t\tif (cur.nodeType < 11 && (targets ?\n\t\t\t\t\t\t\ttargets.index(cur) > -1 :\n\n\t\t\t\t\t\t\t// Don't pass non-elements to jQuery#find\n\t\t\t\t\t\t\tcur.nodeType === 1 &&\n\t\t\t\t\t\t\tjQuery.find.matchesSelector(cur, selectors))) {\n\n\t\t\t\t\t\t\tmatched.push(cur);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn this.pushStack(matched.length > 1 ? jQuery.uniqueSort(matched) : matched);\n\t\t},\n\n\t\t// Determine the position of an element within the set\n\t\tindex: function (elem) {\n\n\t\t\t// No argument, return index in parent\n\t\t\tif (!elem) {\n\t\t\t\treturn (this[0] && this[0].parentNode) ? this.first().prevAll().length : -1;\n\t\t\t}\n\n\t\t\t// Index in selector\n\t\t\tif (typeof elem === \"string\") {\n\t\t\t\treturn indexOf.call(jQuery(elem), this[0]);\n\t\t\t}\n\n\t\t\t// Locate the position of the desired element\n\t\t\treturn indexOf.call(this,\n\n\t\t\t\t// If it receives a jQuery object, the first element is used\n\t\t\t\telem.jquery ? elem[0] : elem\n\t\t\t);\n\t\t},\n\n\t\tadd: function (selector, context) {\n\t\t\treturn this.pushStack(\n\t\t\t\tjQuery.uniqueSort(\n\t\t\t\t\tjQuery.merge(this.get(), jQuery(selector, context))\n\t\t\t\t)\n\t\t\t);\n\t\t},\n\n\t\taddBack: function (selector) {\n\t\t\treturn this.add(selector == null ?\n\t\t\t\tthis.prevObject : this.prevObject.filter(selector)\n\t\t\t);\n\t\t}\n\t});\n\n\tfunction sibling(cur, dir) {\n\t\twhile ((cur = cur[dir]) && cur.nodeType !== 1) { }\n\t\treturn cur;\n\t}\n\n\tjQuery.each({\n\t\tparent: function (elem) {\n\t\t\tvar parent = elem.parentNode;\n\t\t\treturn parent && parent.nodeType !== 11 ? parent : null;\n\t\t},\n\t\tparents: function (elem) {\n\t\t\treturn dir(elem, \"parentNode\");\n\t\t},\n\t\tparentsUntil: function (elem, _i, until) {\n\t\t\treturn dir(elem, \"parentNode\", until);\n\t\t},\n\t\tnext: function (elem) {\n\t\t\treturn sibling(elem, \"nextSibling\");\n\t\t},\n\t\tprev: function (elem) {\n\t\t\treturn sibling(elem, \"previousSibling\");\n\t\t},\n\t\tnextAll: function (elem) {\n\t\t\treturn dir(elem, \"nextSibling\");\n\t\t},\n\t\tprevAll: function (elem) {\n\t\t\treturn dir(elem, \"previousSibling\");\n\t\t},\n\t\tnextUntil: function (elem, _i, until) {\n\t\t\treturn dir(elem, \"nextSibling\", until);\n\t\t},\n\t\tprevUntil: function (elem, _i, until) {\n\t\t\treturn dir(elem, \"previousSibling\", until);\n\t\t},\n\t\tsiblings: function (elem) {\n\t\t\treturn siblings((elem.parentNode || {}).firstChild, elem);\n\t\t},\n\t\tchildren: function (elem) {\n\t\t\treturn siblings(elem.firstChild);\n\t\t},\n\t\tcontents: function (elem) {\n\t\t\tif (elem.contentDocument != null &&\n\n\t\t\t\t// Support: IE 11+\n\t\t\t\t// <object> elements with no `data` attribute has an object\n\t\t\t\t// `contentDocument` with a `null` prototype.\n\t\t\t\tgetProto(elem.contentDocument)) {\n\n\t\t\t\treturn elem.contentDocument;\n\t\t\t}\n\n\t\t\t// Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only\n\t\t\t// Treat the template element as a regular one in browsers that\n\t\t\t// don't support it.\n\t\t\tif (nodeName(elem, \"template\")) {\n\t\t\t\telem = elem.content || elem;\n\t\t\t}\n\n\t\t\treturn jQuery.merge([], elem.childNodes);\n\t\t}\n\t}, function (name, fn) {\n\t\tjQuery.fn[name] = function (until, selector) {\n\t\t\tvar matched = jQuery.map(this, fn, until);\n\n\t\t\tif (name.slice(-5) !== \"Until\") {\n\t\t\t\tselector = until;\n\t\t\t}\n\n\t\t\tif (selector && typeof selector === \"string\") {\n\t\t\t\tmatched = jQuery.filter(selector, matched);\n\t\t\t}\n\n\t\t\tif (this.length > 1) {\n\n\t\t\t\t// Remove duplicates\n\t\t\t\tif (!guaranteedUnique[name]) {\n\t\t\t\t\tjQuery.uniqueSort(matched);\n\t\t\t\t}\n\n\t\t\t\t// Reverse order for parents* and prev-derivatives\n\t\t\t\tif (rparentsprev.test(name)) {\n\t\t\t\t\tmatched.reverse();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn this.pushStack(matched);\n\t\t};\n\t});\n\tvar rnothtmlwhite = (/[^\\x20\\t\\r\\n\\f]+/g);\n\n\n\n\t// Convert String-formatted options into Object-formatted ones\n\tfunction createOptions(options) {\n\t\tvar object = {};\n\t\tjQuery.each(options.match(rnothtmlwhite) || [], function (_, flag) {\n\t\t\tobject[flag] = true;\n\t\t});\n\t\treturn object;\n\t}\n\n\t/*\n\t * Create a callback list using the following parameters:\n\t *\n\t *\toptions: an optional list of space-separated options that will change how\n\t *\t\t\tthe callback list behaves or a more traditional option object\n\t *\n\t * By default a callback list will act like an event callback list and can be\n\t * \"fired\" multiple times.\n\t *\n\t * Possible options:\n\t *\n\t *\tonce:\t\t\twill ensure the callback list can only be fired once (like a Deferred)\n\t *\n\t *\tmemory:\t\t\twill keep track of previous values and will call any callback added\n\t *\t\t\t\t\tafter the list has been fired right away with the latest \"memorized\"\n\t *\t\t\t\t\tvalues (like a Deferred)\n\t *\n\t *\tunique:\t\t\twill ensure a callback can only be added once (no duplicate in the list)\n\t *\n\t *\tstopOnFalse:\tinterrupt callings when a callback returns false\n\t *\n\t */\n\tjQuery.Callbacks = function (options) {\n\n\t\t// Convert options from String-formatted to Object-formatted if needed\n\t\t// (we check in cache first)\n\t\toptions = typeof options === \"string\" ?\n\t\t\tcreateOptions(options) :\n\t\t\tjQuery.extend({}, options);\n\n\t\tvar // Flag to know if list is currently firing\n\t\t\tfiring,\n\n\t\t\t// Last fire value for non-forgettable lists\n\t\t\tmemory,\n\n\t\t\t// Flag to know if list was already fired\n\t\t\tfired,\n\n\t\t\t// Flag to prevent firing\n\t\t\tlocked,\n\n\t\t\t// Actual callback list\n\t\t\tlist = [],\n\n\t\t\t// Queue of execution data for repeatable lists\n\t\t\tqueue = [],\n\n\t\t\t// Index of currently firing callback (modified by add/remove as needed)\n\t\t\tfiringIndex = -1,\n\n\t\t\t// Fire callbacks\n\t\t\tfire = function () {\n\n\t\t\t\t// Enforce single-firing\n\t\t\t\tlocked = locked || options.once;\n\n\t\t\t\t// Execute callbacks for all pending executions,\n\t\t\t\t// respecting firingIndex overrides and runtime changes\n\t\t\t\tfired = firing = true;\n\t\t\t\tfor (; queue.length; firingIndex = -1) {\n\t\t\t\t\tmemory = queue.shift();\n\t\t\t\t\twhile (++firingIndex < list.length) {\n\n\t\t\t\t\t\t// Run callback and check for early termination\n\t\t\t\t\t\tif (list[firingIndex].apply(memory[0], memory[1]) === false &&\n\t\t\t\t\t\t\toptions.stopOnFalse) {\n\n\t\t\t\t\t\t\t// Jump to end and forget the data so .add doesn't re-fire\n\t\t\t\t\t\t\tfiringIndex = list.length;\n\t\t\t\t\t\t\tmemory = false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Forget the data if we're done with it\n\t\t\t\tif (!options.memory) {\n\t\t\t\t\tmemory = false;\n\t\t\t\t}\n\n\t\t\t\tfiring = false;\n\n\t\t\t\t// Clean up if we're done firing for good\n\t\t\t\tif (locked) {\n\n\t\t\t\t\t// Keep an empty list if we have data for future add calls\n\t\t\t\t\tif (memory) {\n\t\t\t\t\t\tlist = [];\n\n\t\t\t\t\t\t// Otherwise, this object is spent\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlist = \"\";\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// Actual Callbacks object\n\t\t\tself = {\n\n\t\t\t\t// Add a callback or a collection of callbacks to the list\n\t\t\t\tadd: function () {\n\t\t\t\t\tif (list) {\n\n\t\t\t\t\t\t// If we have memory from a past run, we should fire after adding\n\t\t\t\t\t\tif (memory && !firing) {\n\t\t\t\t\t\t\tfiringIndex = list.length - 1;\n\t\t\t\t\t\t\tqueue.push(memory);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t(function add(args) {\n\t\t\t\t\t\t\tjQuery.each(args, function (_, arg) {\n\t\t\t\t\t\t\t\tif (isFunction(arg)) {\n\t\t\t\t\t\t\t\t\tif (!options.unique || !self.has(arg)) {\n\t\t\t\t\t\t\t\t\t\tlist.push(arg);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} else if (arg && arg.length && toType(arg) !== \"string\") {\n\n\t\t\t\t\t\t\t\t\t// Inspect recursively\n\t\t\t\t\t\t\t\t\tadd(arg);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t})(arguments);\n\n\t\t\t\t\t\tif (memory && !firing) {\n\t\t\t\t\t\t\tfire();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Remove a callback from the list\n\t\t\t\tremove: function () {\n\t\t\t\t\tjQuery.each(arguments, function (_, arg) {\n\t\t\t\t\t\tvar index;\n\t\t\t\t\t\twhile ((index = jQuery.inArray(arg, list, index)) > -1) {\n\t\t\t\t\t\t\tlist.splice(index, 1);\n\n\t\t\t\t\t\t\t// Handle firing indexes\n\t\t\t\t\t\t\tif (index <= firingIndex) {\n\t\t\t\t\t\t\t\tfiringIndex--;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Check if a given callback is in the list.\n\t\t\t\t// If no argument is given, return whether or not list has callbacks attached.\n\t\t\t\thas: function (fn) {\n\t\t\t\t\treturn fn ?\n\t\t\t\t\t\tjQuery.inArray(fn, list) > -1 :\n\t\t\t\t\t\tlist.length > 0;\n\t\t\t\t},\n\n\t\t\t\t// Remove all callbacks from the list\n\t\t\t\tempty: function () {\n\t\t\t\t\tif (list) {\n\t\t\t\t\t\tlist = [];\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Disable .fire and .add\n\t\t\t\t// Abort any current/pending executions\n\t\t\t\t// Clear all callbacks and values\n\t\t\t\tdisable: function () {\n\t\t\t\t\tlocked = queue = [];\n\t\t\t\t\tlist = memory = \"\";\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\t\t\t\tdisabled: function () {\n\t\t\t\t\treturn !list;\n\t\t\t\t},\n\n\t\t\t\t// Disable .fire\n\t\t\t\t// Also disable .add unless we have memory (since it would have no effect)\n\t\t\t\t// Abort any pending executions\n\t\t\t\tlock: function () {\n\t\t\t\t\tlocked = queue = [];\n\t\t\t\t\tif (!memory && !firing) {\n\t\t\t\t\t\tlist = memory = \"\";\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\t\t\t\tlocked: function () {\n\t\t\t\t\treturn !!locked;\n\t\t\t\t},\n\n\t\t\t\t// Call all callbacks with the given context and arguments\n\t\t\t\tfireWith: function (context, args) {\n\t\t\t\t\tif (!locked) {\n\t\t\t\t\t\targs = args || [];\n\t\t\t\t\t\targs = [context, args.slice ? args.slice() : args];\n\t\t\t\t\t\tqueue.push(args);\n\t\t\t\t\t\tif (!firing) {\n\t\t\t\t\t\t\tfire();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Call all the callbacks with the given arguments\n\t\t\t\tfire: function () {\n\t\t\t\t\tself.fireWith(this, arguments);\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// To know if the callbacks have already been called at least once\n\t\t\t\tfired: function () {\n\t\t\t\t\treturn !!fired;\n\t\t\t\t}\n\t\t\t};\n\n\t\treturn self;\n\t};\n\n\n\tfunction Identity(v) {\n\t\treturn v;\n\t}\n\tfunction Thrower(ex) {\n\t\tthrow ex;\n\t}\n\n\tfunction adoptValue(value, resolve, reject, noValue) {\n\t\tvar method;\n\n\t\ttry {\n\n\t\t\t// Check for promise aspect first to privilege synchronous behavior\n\t\t\tif (value && isFunction((method = value.promise))) {\n\t\t\t\tmethod.call(value).done(resolve).fail(reject);\n\n\t\t\t\t// Other thenables\n\t\t\t} else if (value && isFunction((method = value.then))) {\n\t\t\t\tmethod.call(value, resolve, reject);\n\n\t\t\t\t// Other non-thenables\n\t\t\t} else {\n\n\t\t\t\t// Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer:\n\t\t\t\t// * false: [ value ].slice( 0 ) => resolve( value )\n\t\t\t\t// * true: [ value ].slice( 1 ) => resolve()\n\t\t\t\tresolve.apply(undefined, [value].slice(noValue));\n\t\t\t}\n\n\t\t\t// For Promises/A+, convert exceptions into rejections\n\t\t\t// Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in\n\t\t\t// Deferred#then to conditionally suppress rejection.\n\t\t} catch (value) {\n\n\t\t\t// Support: Android 4.0 only\n\t\t\t// Strict mode functions invoked without .call/.apply get global-object context\n\t\t\treject.apply(undefined, [value]);\n\t\t}\n\t}\n\n\tjQuery.extend({\n\n\t\tDeferred: function (func) {\n\t\t\tvar tuples = [\n\n\t\t\t\t// action, add listener, callbacks,\n\t\t\t\t// ... .then handlers, argument index, [final state]\n\t\t\t\t[\"notify\", \"progress\", jQuery.Callbacks(\"memory\"),\n\t\t\t\t\tjQuery.Callbacks(\"memory\"), 2],\n\t\t\t\t[\"resolve\", \"done\", jQuery.Callbacks(\"once memory\"),\n\t\t\t\t\tjQuery.Callbacks(\"once memory\"), 0, \"resolved\"],\n\t\t\t\t[\"reject\", \"fail\", jQuery.Callbacks(\"once memory\"),\n\t\t\t\t\tjQuery.Callbacks(\"once memory\"), 1, \"rejected\"]\n\t\t\t],\n\t\t\t\tstate = \"pending\",\n\t\t\t\tpromise = {\n\t\t\t\t\tstate: function () {\n\t\t\t\t\t\treturn state;\n\t\t\t\t\t},\n\t\t\t\t\talways: function () {\n\t\t\t\t\t\tdeferred.done(arguments).fail(arguments);\n\t\t\t\t\t\treturn this;\n\t\t\t\t\t},\n\t\t\t\t\t\"catch\": function (fn) {\n\t\t\t\t\t\treturn promise.then(null, fn);\n\t\t\t\t\t},\n\n\t\t\t\t\t// Keep pipe for back-compat\n\t\t\t\t\tpipe: function ( /* fnDone, fnFail, fnProgress */) {\n\t\t\t\t\t\tvar fns = arguments;\n\n\t\t\t\t\t\treturn jQuery.Deferred(function (newDefer) {\n\t\t\t\t\t\t\tjQuery.each(tuples, function (_i, tuple) {\n\n\t\t\t\t\t\t\t\t// Map tuples (progress, done, fail) to arguments (done, fail, progress)\n\t\t\t\t\t\t\t\tvar fn = isFunction(fns[tuple[4]]) && fns[tuple[4]];\n\n\t\t\t\t\t\t\t\t// deferred.progress(function() { bind to newDefer or newDefer.notify })\n\t\t\t\t\t\t\t\t// deferred.done(function() { bind to newDefer or newDefer.resolve })\n\t\t\t\t\t\t\t\t// deferred.fail(function() { bind to newDefer or newDefer.reject })\n\t\t\t\t\t\t\t\tdeferred[tuple[1]](function () {\n\t\t\t\t\t\t\t\t\tvar returned = fn && fn.apply(this, arguments);\n\t\t\t\t\t\t\t\t\tif (returned && isFunction(returned.promise)) {\n\t\t\t\t\t\t\t\t\t\treturned.promise()\n\t\t\t\t\t\t\t\t\t\t\t.progress(newDefer.notify)\n\t\t\t\t\t\t\t\t\t\t\t.done(newDefer.resolve)\n\t\t\t\t\t\t\t\t\t\t\t.fail(newDefer.reject);\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tnewDefer[tuple[0] + \"With\"](\n\t\t\t\t\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\t\t\t\t\tfn ? [returned] : arguments\n\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tfns = null;\n\t\t\t\t\t\t}).promise();\n\t\t\t\t\t},\n\t\t\t\t\tthen: function (onFulfilled, onRejected, onProgress) {\n\t\t\t\t\t\tvar maxDepth = 0;\n\t\t\t\t\t\tfunction resolve(depth, deferred, handler, special) {\n\t\t\t\t\t\t\treturn function () {\n\t\t\t\t\t\t\t\tvar that = this,\n\t\t\t\t\t\t\t\t\targs = arguments,\n\t\t\t\t\t\t\t\t\tmightThrow = function () {\n\t\t\t\t\t\t\t\t\t\tvar returned, then;\n\n\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.3\n\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-59\n\t\t\t\t\t\t\t\t\t\t// Ignore double-resolution attempts\n\t\t\t\t\t\t\t\t\t\tif (depth < maxDepth) {\n\t\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\treturned = handler.apply(that, args);\n\n\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.1\n\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-48\n\t\t\t\t\t\t\t\t\t\tif (returned === deferred.promise()) {\n\t\t\t\t\t\t\t\t\t\t\tthrow new TypeError(\"Thenable self-resolution\");\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ sections 2.3.3.1, 3.5\n\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-54\n\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-75\n\t\t\t\t\t\t\t\t\t\t// Retrieve `then` only once\n\t\t\t\t\t\t\t\t\t\tthen = returned &&\n\n\t\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.4\n\t\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-64\n\t\t\t\t\t\t\t\t\t\t\t// Only check objects and functions for thenability\n\t\t\t\t\t\t\t\t\t\t\t(typeof returned === \"object\" ||\n\t\t\t\t\t\t\t\t\t\t\t\ttypeof returned === \"function\") &&\n\t\t\t\t\t\t\t\t\t\t\treturned.then;\n\n\t\t\t\t\t\t\t\t\t\t// Handle a returned thenable\n\t\t\t\t\t\t\t\t\t\tif (isFunction(then)) {\n\n\t\t\t\t\t\t\t\t\t\t\t// Special processors (notify) just wait for resolution\n\t\t\t\t\t\t\t\t\t\t\tif (special) {\n\t\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\t\tresolve(maxDepth, deferred, Identity, special),\n\t\t\t\t\t\t\t\t\t\t\t\t\tresolve(maxDepth, deferred, Thrower, special)\n\t\t\t\t\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t\t\t\t\t// Normal processors (resolve) also hook into progress\n\t\t\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t\t\t// ...and disregard older resolution values\n\t\t\t\t\t\t\t\t\t\t\t\tmaxDepth++;\n\n\t\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\t\tresolve(maxDepth, deferred, Identity, special),\n\t\t\t\t\t\t\t\t\t\t\t\t\tresolve(maxDepth, deferred, Thrower, special),\n\t\t\t\t\t\t\t\t\t\t\t\t\tresolve(maxDepth, deferred, Identity,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tdeferred.notifyWith)\n\t\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t// Handle all other returned values\n\t\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\t\tif (handler !== Identity) {\n\t\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\t\targs = [returned];\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t// Process the value(s)\n\t\t\t\t\t\t\t\t\t\t\t// Default process is resolve\n\t\t\t\t\t\t\t\t\t\t\t(special || deferred.resolveWith)(that, args);\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\n\t\t\t\t\t\t\t\t\t// Only normal processors (resolve) catch and reject exceptions\n\t\t\t\t\t\t\t\t\tprocess = special ?\n\t\t\t\t\t\t\t\t\t\tmightThrow :\n\t\t\t\t\t\t\t\t\t\tfunction () {\n\t\t\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\t\t\tmightThrow();\n\t\t\t\t\t\t\t\t\t\t\t} catch (e) {\n\n\t\t\t\t\t\t\t\t\t\t\t\tif (jQuery.Deferred.exceptionHook) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tjQuery.Deferred.exceptionHook(e,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tprocess.error);\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.4.1\n\t\t\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-61\n\t\t\t\t\t\t\t\t\t\t\t\t// Ignore post-resolution exceptions\n\t\t\t\t\t\t\t\t\t\t\t\tif (depth + 1 >= maxDepth) {\n\n\t\t\t\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\t\t\t\tif (handler !== Thrower) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\targs = [e];\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\t\tdeferred.rejectWith(that, args);\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.1\n\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-57\n\t\t\t\t\t\t\t\t// Re-resolve promises immediately to dodge false rejection from\n\t\t\t\t\t\t\t\t// subsequent errors\n\t\t\t\t\t\t\t\tif (depth) {\n\t\t\t\t\t\t\t\t\tprocess();\n\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t// Call an optional hook to record the error, in case of exception\n\t\t\t\t\t\t\t\t\t// since it's otherwise lost when execution goes async\n\t\t\t\t\t\t\t\t\tif (jQuery.Deferred.getErrorHook) {\n\t\t\t\t\t\t\t\t\t\tprocess.error = jQuery.Deferred.getErrorHook();\n\n\t\t\t\t\t\t\t\t\t\t// The deprecated alias of the above. While the name suggests\n\t\t\t\t\t\t\t\t\t\t// returning the stack, not an error instance, jQuery just passes\n\t\t\t\t\t\t\t\t\t\t// it directly to `console.warn` so both will work; an instance\n\t\t\t\t\t\t\t\t\t\t// just better cooperates with source maps.\n\t\t\t\t\t\t\t\t\t} else if (jQuery.Deferred.getStackHook) {\n\t\t\t\t\t\t\t\t\t\tprocess.error = jQuery.Deferred.getStackHook();\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\twindow.setTimeout(process);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn jQuery.Deferred(function (newDefer) {\n\n\t\t\t\t\t\t\t// progress_handlers.add( ... )\n\t\t\t\t\t\t\ttuples[0][3].add(\n\t\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\t\tisFunction(onProgress) ?\n\t\t\t\t\t\t\t\t\t\tonProgress :\n\t\t\t\t\t\t\t\t\t\tIdentity,\n\t\t\t\t\t\t\t\t\tnewDefer.notifyWith\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t// fulfilled_handlers.add( ... )\n\t\t\t\t\t\t\ttuples[1][3].add(\n\t\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\t\tisFunction(onFulfilled) ?\n\t\t\t\t\t\t\t\t\t\tonFulfilled :\n\t\t\t\t\t\t\t\t\t\tIdentity\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t// rejected_handlers.add( ... )\n\t\t\t\t\t\t\ttuples[2][3].add(\n\t\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\t\tisFunction(onRejected) ?\n\t\t\t\t\t\t\t\t\t\tonRejected :\n\t\t\t\t\t\t\t\t\t\tThrower\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}).promise();\n\t\t\t\t\t},\n\n\t\t\t\t\t// Get a promise for this deferred\n\t\t\t\t\t// If obj is provided, the promise aspect is added to the object\n\t\t\t\t\tpromise: function (obj) {\n\t\t\t\t\t\treturn obj != null ? jQuery.extend(obj, promise) : promise;\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tdeferred = {};\n\n\t\t\t// Add list-specific methods\n\t\t\tjQuery.each(tuples, function (i, tuple) {\n\t\t\t\tvar list = tuple[2],\n\t\t\t\t\tstateString = tuple[5];\n\n\t\t\t\t// promise.progress = list.add\n\t\t\t\t// promise.done = list.add\n\t\t\t\t// promise.fail = list.add\n\t\t\t\tpromise[tuple[1]] = list.add;\n\n\t\t\t\t// Handle state\n\t\t\t\tif (stateString) {\n\t\t\t\t\tlist.add(\n\t\t\t\t\t\tfunction () {\n\n\t\t\t\t\t\t\t// state = \"resolved\" (i.e., fulfilled)\n\t\t\t\t\t\t\t// state = \"rejected\"\n\t\t\t\t\t\t\tstate = stateString;\n\t\t\t\t\t\t},\n\n\t\t\t\t\t\t// rejected_callbacks.disable\n\t\t\t\t\t\t// fulfilled_callbacks.disable\n\t\t\t\t\t\ttuples[3 - i][2].disable,\n\n\t\t\t\t\t\t// rejected_handlers.disable\n\t\t\t\t\t\t// fulfilled_handlers.disable\n\t\t\t\t\t\ttuples[3 - i][3].disable,\n\n\t\t\t\t\t\t// progress_callbacks.lock\n\t\t\t\t\t\ttuples[0][2].lock,\n\n\t\t\t\t\t\t// progress_handlers.lock\n\t\t\t\t\t\ttuples[0][3].lock\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\t// progress_handlers.fire\n\t\t\t\t// fulfilled_handlers.fire\n\t\t\t\t// rejected_handlers.fire\n\t\t\t\tlist.add(tuple[3].fire);\n\n\t\t\t\t// deferred.notify = function() { deferred.notifyWith(...) }\n\t\t\t\t// deferred.resolve = function() { deferred.resolveWith(...) }\n\t\t\t\t// deferred.reject = function() { deferred.rejectWith(...) }\n\t\t\t\tdeferred[tuple[0]] = function () {\n\t\t\t\t\tdeferred[tuple[0] + \"With\"](this === deferred ? undefined : this, arguments);\n\t\t\t\t\treturn this;\n\t\t\t\t};\n\n\t\t\t\t// deferred.notifyWith = list.fireWith\n\t\t\t\t// deferred.resolveWith = list.fireWith\n\t\t\t\t// deferred.rejectWith = list.fireWith\n\t\t\t\tdeferred[tuple[0] + \"With\"] = list.fireWith;\n\t\t\t});\n\n\t\t\t// Make the deferred a promise\n\t\t\tpromise.promise(deferred);\n\n\t\t\t// Call given func if any\n\t\t\tif (func) {\n\t\t\t\tfunc.call(deferred, deferred);\n\t\t\t}\n\n\t\t\t// All done!\n\t\t\treturn deferred;\n\t\t},\n\n\t\t// Deferred helper\n\t\twhen: function (singleValue) {\n\t\t\tvar\n\n\t\t\t\t// count of uncompleted subordinates\n\t\t\t\tremaining = arguments.length,\n\n\t\t\t\t// count of unprocessed arguments\n\t\t\t\ti = remaining,\n\n\t\t\t\t// subordinate fulfillment data\n\t\t\t\tresolveContexts = Array(i),\n\t\t\t\tresolveValues = slice.call(arguments),\n\n\t\t\t\t// the primary Deferred\n\t\t\t\tprimary = jQuery.Deferred(),\n\n\t\t\t\t// subordinate callback factory\n\t\t\t\tupdateFunc = function (i) {\n\t\t\t\t\treturn function (value) {\n\t\t\t\t\t\tresolveContexts[i] = this;\n\t\t\t\t\t\tresolveValues[i] = arguments.length > 1 ? slice.call(arguments) : value;\n\t\t\t\t\t\tif (!(--remaining)) {\n\t\t\t\t\t\t\tprimary.resolveWith(resolveContexts, resolveValues);\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t};\n\n\t\t\t// Single- and empty arguments are adopted like Promise.resolve\n\t\t\tif (remaining <= 1) {\n\t\t\t\tadoptValue(singleValue, primary.done(updateFunc(i)).resolve, primary.reject,\n\t\t\t\t\t!remaining);\n\n\t\t\t\t// Use .then() to unwrap secondary thenables (cf. gh-3000)\n\t\t\t\tif (primary.state() === \"pending\" ||\n\t\t\t\t\tisFunction(resolveValues[i] && resolveValues[i].then)) {\n\n\t\t\t\t\treturn primary.then();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Multiple arguments are aggregated like Promise.all array elements\n\t\t\twhile (i--) {\n\t\t\t\tadoptValue(resolveValues[i], updateFunc(i), primary.reject);\n\t\t\t}\n\n\t\t\treturn primary.promise();\n\t\t}\n\t});\n\n\n\t// These usually indicate a programmer mistake during development,\n\t// warn about them ASAP rather than swallowing them by default.\n\tvar rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;\n\n\t// If `jQuery.Deferred.getErrorHook` is defined, `asyncError` is an error\n\t// captured before the async barrier to get the original error cause\n\t// which may otherwise be hidden.\n\tjQuery.Deferred.exceptionHook = function (error, asyncError) {\n\n\t\t// Support: IE 8 - 9 only\n\t\t// Console exists when dev tools are open, which can happen at any time\n\t\tif (window.console && window.console.warn && error && rerrorNames.test(error.name)) {\n\t\t\twindow.console.warn(\"jQuery.Deferred exception: \" + error.message,\n\t\t\t\terror.stack, asyncError);\n\t\t}\n\t};\n\n\n\n\n\tjQuery.readyException = function (error) {\n\t\twindow.setTimeout(function () {\n\t\t\tthrow error;\n\t\t});\n\t};\n\n\n\n\n\t// The deferred used on DOM ready\n\tvar readyList = jQuery.Deferred();\n\n\tjQuery.fn.ready = function (fn) {\n\n\t\treadyList\n\t\t\t.then(fn)\n\n\t\t\t// Wrap jQuery.readyException in a function so that the lookup\n\t\t\t// happens at the time of error handling instead of callback\n\t\t\t// registration.\n\t\t\t.catch(function (error) {\n\t\t\t\tjQuery.readyException(error);\n\t\t\t});\n\n\t\treturn this;\n\t};\n\n\tjQuery.extend({\n\n\t\t// Is the DOM ready to be used? Set to true once it occurs.\n\t\tisReady: false,\n\n\t\t// A counter to track how many items to wait for before\n\t\t// the ready event fires. See trac-6781\n\t\treadyWait: 1,\n\n\t\t// Handle when the DOM is ready\n\t\tready: function (wait) {\n\n\t\t\t// Abort if there are pending holds or we're already ready\n\t\t\tif (wait === true ? --jQuery.readyWait : jQuery.isReady) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Remember that the DOM is ready\n\t\t\tjQuery.isReady = true;\n\n\t\t\t// If a normal DOM Ready event fired, decrement, and wait if need be\n\t\t\tif (wait !== true && --jQuery.readyWait > 0) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If there are functions bound, to execute\n\t\t\treadyList.resolveWith(document, [jQuery]);\n\t\t}\n\t});\n\n\tjQuery.ready.then = readyList.then;\n\n\t// The ready event handler and self cleanup method\n\tfunction completed() {\n\t\tdocument.removeEventListener(\"DOMContentLoaded\", completed);\n\t\twindow.removeEventListener(\"load\", completed);\n\t\tjQuery.ready();\n\t}\n\n\t// Catch cases where $(document).ready() is called\n\t// after the browser event has already occurred.\n\t// Support: IE <=9 - 10 only\n\t// Older IE sometimes signals \"interactive\" too soon\n\tif (document.readyState === \"complete\" ||\n\t\t(document.readyState !== \"loading\" && !document.documentElement.doScroll)) {\n\n\t\t// Handle it asynchronously to allow scripts the opportunity to delay ready\n\t\twindow.setTimeout(jQuery.ready);\n\n\t} else {\n\n\t\t// Use the handy event callback\n\t\tdocument.addEventListener(\"DOMContentLoaded\", completed);\n\n\t\t// A fallback to window.onload, that will always work\n\t\twindow.addEventListener(\"load\", completed);\n\t}\n\n\n\n\n\t// Multifunctional method to get and set values of a collection\n\t// The value/s can optionally be executed if it's a function\n\tvar access = function (elems, fn, key, value, chainable, emptyGet, raw) {\n\t\tvar i = 0,\n\t\t\tlen = elems.length,\n\t\t\tbulk = key == null;\n\n\t\t// Sets many values\n\t\tif (toType(key) === \"object\") {\n\t\t\tchainable = true;\n\t\t\tfor (i in key) {\n\t\t\t\taccess(elems, fn, i, key[i], true, emptyGet, raw);\n\t\t\t}\n\n\t\t\t// Sets one value\n\t\t} else if (value !== undefined) {\n\t\t\tchainable = true;\n\n\t\t\tif (!isFunction(value)) {\n\t\t\t\traw = true;\n\t\t\t}\n\n\t\t\tif (bulk) {\n\n\t\t\t\t// Bulk operations run against the entire set\n\t\t\t\tif (raw) {\n\t\t\t\t\tfn.call(elems, value);\n\t\t\t\t\tfn = null;\n\n\t\t\t\t\t// ...except when executing function values\n\t\t\t\t} else {\n\t\t\t\t\tbulk = fn;\n\t\t\t\t\tfn = function (elem, _key, value) {\n\t\t\t\t\t\treturn bulk.call(jQuery(elem), value);\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (fn) {\n\t\t\t\tfor (; i < len; i++) {\n\t\t\t\t\tfn(\n\t\t\t\t\t\telems[i], key, raw ?\n\t\t\t\t\t\tvalue :\n\t\t\t\t\t\tvalue.call(elems[i], i, fn(elems[i], key))\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (chainable) {\n\t\t\treturn elems;\n\t\t}\n\n\t\t// Gets\n\t\tif (bulk) {\n\t\t\treturn fn.call(elems);\n\t\t}\n\n\t\treturn len ? fn(elems[0], key) : emptyGet;\n\t};\n\n\n\t// Matches dashed string for camelizing\n\tvar rmsPrefix = /^-ms-/,\n\t\trdashAlpha = /-([a-z])/g;\n\n\t// Used by camelCase as callback to replace()\n\tfunction fcamelCase(_all, letter) {\n\t\treturn letter.toUpperCase();\n\t}\n\n\t// Convert dashed to camelCase; used by the css and data modules\n\t// Support: IE <=9 - 11, Edge 12 - 15\n\t// Microsoft forgot to hump their vendor prefix (trac-9572)\n\tfunction camelCase(string) {\n\t\treturn string.replace(rmsPrefix, \"ms-\").replace(rdashAlpha, fcamelCase);\n\t}\n\tvar acceptData = function (owner) {\n\n\t\t// Accepts only:\n\t\t//  - Node\n\t\t//    - Node.ELEMENT_NODE\n\t\t//    - Node.DOCUMENT_NODE\n\t\t//  - Object\n\t\t//    - Any\n\t\treturn owner.nodeType === 1 || owner.nodeType === 9 || !(+owner.nodeType);\n\t};\n\n\n\n\n\tfunction Data() {\n\t\tthis.expando = jQuery.expando + Data.uid++;\n\t}\n\n\tData.uid = 1;\n\n\tData.prototype = {\n\n\t\tcache: function (owner) {\n\n\t\t\t// Check if the owner object already has a cache\n\t\t\tvar value = owner[this.expando];\n\n\t\t\t// If not, create one\n\t\t\tif (!value) {\n\t\t\t\tvalue = {};\n\n\t\t\t\t// We can accept data for non-element nodes in modern browsers,\n\t\t\t\t// but we should not, see trac-8335.\n\t\t\t\t// Always return an empty object.\n\t\t\t\tif (acceptData(owner)) {\n\n\t\t\t\t\t// If it is a node unlikely to be stringify-ed or looped over\n\t\t\t\t\t// use plain assignment\n\t\t\t\t\tif (owner.nodeType) {\n\t\t\t\t\t\towner[this.expando] = value;\n\n\t\t\t\t\t\t// Otherwise secure it in a non-enumerable property\n\t\t\t\t\t\t// configurable must be true to allow the property to be\n\t\t\t\t\t\t// deleted when data is removed\n\t\t\t\t\t} else {\n\t\t\t\t\t\tObject.defineProperty(owner, this.expando, {\n\t\t\t\t\t\t\tvalue: value,\n\t\t\t\t\t\t\tconfigurable: true\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn value;\n\t\t},\n\t\tset: function (owner, data, value) {\n\t\t\tvar prop,\n\t\t\t\tcache = this.cache(owner);\n\n\t\t\t// Handle: [ owner, key, value ] args\n\t\t\t// Always use camelCase key (gh-2257)\n\t\t\tif (typeof data === \"string\") {\n\t\t\t\tcache[camelCase(data)] = value;\n\n\t\t\t\t// Handle: [ owner, { properties } ] args\n\t\t\t} else {\n\n\t\t\t\t// Copy the properties one-by-one to the cache object\n\t\t\t\tfor (prop in data) {\n\t\t\t\t\tcache[camelCase(prop)] = data[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn cache;\n\t\t},\n\t\tget: function (owner, key) {\n\t\t\treturn key === undefined ?\n\t\t\t\tthis.cache(owner) :\n\n\t\t\t\t// Always use camelCase key (gh-2257)\n\t\t\t\towner[this.expando] && owner[this.expando][camelCase(key)];\n\t\t},\n\t\taccess: function (owner, key, value) {\n\n\t\t\t// In cases where either:\n\t\t\t//\n\t\t\t//   1. No key was specified\n\t\t\t//   2. A string key was specified, but no value provided\n\t\t\t//\n\t\t\t// Take the \"read\" path and allow the get method to determine\n\t\t\t// which value to return, respectively either:\n\t\t\t//\n\t\t\t//   1. The entire cache object\n\t\t\t//   2. The data stored at the key\n\t\t\t//\n\t\t\tif (key === undefined ||\n\t\t\t\t((key && typeof key === \"string\") && value === undefined)) {\n\n\t\t\t\treturn this.get(owner, key);\n\t\t\t}\n\n\t\t\t// When the key is not a string, or both a key and value\n\t\t\t// are specified, set or extend (existing objects) with either:\n\t\t\t//\n\t\t\t//   1. An object of properties\n\t\t\t//   2. A key and value\n\t\t\t//\n\t\t\tthis.set(owner, key, value);\n\n\t\t\t// Since the \"set\" path can have two possible entry points\n\t\t\t// return the expected data based on which path was taken[*]\n\t\t\treturn value !== undefined ? value : key;\n\t\t},\n\t\tremove: function (owner, key) {\n\t\t\tvar i,\n\t\t\t\tcache = owner[this.expando];\n\n\t\t\tif (cache === undefined) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (key !== undefined) {\n\n\t\t\t\t// Support array or space separated string of keys\n\t\t\t\tif (Array.isArray(key)) {\n\n\t\t\t\t\t// If key is an array of keys...\n\t\t\t\t\t// We always set camelCase keys, so remove that.\n\t\t\t\t\tkey = key.map(camelCase);\n\t\t\t\t} else {\n\t\t\t\t\tkey = camelCase(key);\n\n\t\t\t\t\t// If a key with the spaces exists, use it.\n\t\t\t\t\t// Otherwise, create an array by matching non-whitespace\n\t\t\t\t\tkey = key in cache ?\n\t\t\t\t\t\t[key] :\n\t\t\t\t\t\t(key.match(rnothtmlwhite) || []);\n\t\t\t\t}\n\n\t\t\t\ti = key.length;\n\n\t\t\t\twhile (i--) {\n\t\t\t\t\tdelete cache[key[i]];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove the expando if there's no more data\n\t\t\tif (key === undefined || jQuery.isEmptyObject(cache)) {\n\n\t\t\t\t// Support: Chrome <=35 - 45\n\t\t\t\t// Webkit & Blink performance suffers when deleting properties\n\t\t\t\t// from DOM nodes, so set to undefined instead\n\t\t\t\t// https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted)\n\t\t\t\tif (owner.nodeType) {\n\t\t\t\t\towner[this.expando] = undefined;\n\t\t\t\t} else {\n\t\t\t\t\tdelete owner[this.expando];\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\thasData: function (owner) {\n\t\t\tvar cache = owner[this.expando];\n\t\t\treturn cache !== undefined && !jQuery.isEmptyObject(cache);\n\t\t}\n\t};\n\tvar dataPriv = new Data();\n\n\tvar dataUser = new Data();\n\n\n\n\t//\tImplementation Summary\n\t//\n\t//\t1. Enforce API surface and semantic compatibility with 1.9.x branch\n\t//\t2. Improve the module's maintainability by reducing the storage\n\t//\t\tpaths to a single mechanism.\n\t//\t3. Use the same single mechanism to support \"private\" and \"user\" data.\n\t//\t4. _Never_ expose \"private\" data to user code (TODO: Drop _data, _removeData)\n\t//\t5. Avoid exposing implementation details on user objects (eg. expando properties)\n\t//\t6. Provide a clear path for implementation upgrade to WeakMap in 2014\n\n\tvar rbrace = /^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,\n\t\trmultiDash = /[A-Z]/g;\n\n\tfunction getData(data) {\n\t\tif (data === \"true\") {\n\t\t\treturn true;\n\t\t}\n\n\t\tif (data === \"false\") {\n\t\t\treturn false;\n\t\t}\n\n\t\tif (data === \"null\") {\n\t\t\treturn null;\n\t\t}\n\n\t\t// Only convert to a number if it doesn't change the string\n\t\tif (data === +data + \"\") {\n\t\t\treturn +data;\n\t\t}\n\n\t\tif (rbrace.test(data)) {\n\t\t\treturn JSON.parse(data);\n\t\t}\n\n\t\treturn data;\n\t}\n\n\tfunction dataAttr(elem, key, data) {\n\t\tvar name;\n\n\t\t// If nothing was found internally, try to fetch any\n\t\t// data from the HTML5 data-* attribute\n\t\tif (data === undefined && elem.nodeType === 1) {\n\t\t\tname = \"data-\" + key.replace(rmultiDash, \"-$&\").toLowerCase();\n\t\t\tdata = elem.getAttribute(name);\n\n\t\t\tif (typeof data === \"string\") {\n\t\t\t\ttry {\n\t\t\t\t\tdata = getData(data);\n\t\t\t\t} catch (e) { }\n\n\t\t\t\t// Make sure we set the data so it isn't changed later\n\t\t\t\tdataUser.set(elem, key, data);\n\t\t\t} else {\n\t\t\t\tdata = undefined;\n\t\t\t}\n\t\t}\n\t\treturn data;\n\t}\n\n\tjQuery.extend({\n\t\thasData: function (elem) {\n\t\t\treturn dataUser.hasData(elem) || dataPriv.hasData(elem);\n\t\t},\n\n\t\tdata: function (elem, name, data) {\n\t\t\treturn dataUser.access(elem, name, data);\n\t\t},\n\n\t\tremoveData: function (elem, name) {\n\t\t\tdataUser.remove(elem, name);\n\t\t},\n\n\t\t// TODO: Now that all calls to _data and _removeData have been replaced\n\t\t// with direct calls to dataPriv methods, these can be deprecated.\n\t\t_data: function (elem, name, data) {\n\t\t\treturn dataPriv.access(elem, name, data);\n\t\t},\n\n\t\t_removeData: function (elem, name) {\n\t\t\tdataPriv.remove(elem, name);\n\t\t}\n\t});\n\n\tjQuery.fn.extend({\n\t\tdata: function (key, value) {\n\t\t\tvar i, name, data,\n\t\t\t\telem = this[0],\n\t\t\t\tattrs = elem && elem.attributes;\n\n\t\t\t// Gets all values\n\t\t\tif (key === undefined) {\n\t\t\t\tif (this.length) {\n\t\t\t\t\tdata = dataUser.get(elem);\n\n\t\t\t\t\tif (elem.nodeType === 1 && !dataPriv.get(elem, \"hasDataAttrs\")) {\n\t\t\t\t\t\ti = attrs.length;\n\t\t\t\t\t\twhile (i--) {\n\n\t\t\t\t\t\t\t// Support: IE 11 only\n\t\t\t\t\t\t\t// The attrs elements can be null (trac-14894)\n\t\t\t\t\t\t\tif (attrs[i]) {\n\t\t\t\t\t\t\t\tname = attrs[i].name;\n\t\t\t\t\t\t\t\tif (name.indexOf(\"data-\") === 0) {\n\t\t\t\t\t\t\t\t\tname = camelCase(name.slice(5));\n\t\t\t\t\t\t\t\t\tdataAttr(elem, name, data[name]);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdataPriv.set(elem, \"hasDataAttrs\", true);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn data;\n\t\t\t}\n\n\t\t\t// Sets multiple values\n\t\t\tif (typeof key === \"object\") {\n\t\t\t\treturn this.each(function () {\n\t\t\t\t\tdataUser.set(this, key);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn access(this, function (value) {\n\t\t\t\tvar data;\n\n\t\t\t\t// The calling jQuery object (element matches) is not empty\n\t\t\t\t// (and therefore has an element appears at this[ 0 ]) and the\n\t\t\t\t// `value` parameter was not undefined. An empty jQuery object\n\t\t\t\t// will result in `undefined` for elem = this[ 0 ] which will\n\t\t\t\t// throw an exception if an attempt to read a data cache is made.\n\t\t\t\tif (elem && value === undefined) {\n\n\t\t\t\t\t// Attempt to get data from the cache\n\t\t\t\t\t// The key will always be camelCased in Data\n\t\t\t\t\tdata = dataUser.get(elem, key);\n\t\t\t\t\tif (data !== undefined) {\n\t\t\t\t\t\treturn data;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Attempt to \"discover\" the data in\n\t\t\t\t\t// HTML5 custom data-* attrs\n\t\t\t\t\tdata = dataAttr(elem, key);\n\t\t\t\t\tif (data !== undefined) {\n\t\t\t\t\t\treturn data;\n\t\t\t\t\t}\n\n\t\t\t\t\t// We tried really hard, but the data doesn't exist.\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Set the data...\n\t\t\t\tthis.each(function () {\n\n\t\t\t\t\t// We always store the camelCased key\n\t\t\t\t\tdataUser.set(this, key, value);\n\t\t\t\t});\n\t\t\t}, null, value, arguments.length > 1, null, true);\n\t\t},\n\n\t\tremoveData: function (key) {\n\t\t\treturn this.each(function () {\n\t\t\t\tdataUser.remove(this, key);\n\t\t\t});\n\t\t}\n\t});\n\n\n\tjQuery.extend({\n\t\tqueue: function (elem, type, data) {\n\t\t\tvar queue;\n\n\t\t\tif (elem) {\n\t\t\t\ttype = (type || \"fx\") + \"queue\";\n\t\t\t\tqueue = dataPriv.get(elem, type);\n\n\t\t\t\t// Speed up dequeue by getting out quickly if this is just a lookup\n\t\t\t\tif (data) {\n\t\t\t\t\tif (!queue || Array.isArray(data)) {\n\t\t\t\t\t\tqueue = dataPriv.access(elem, type, jQuery.makeArray(data));\n\t\t\t\t\t} else {\n\t\t\t\t\t\tqueue.push(data);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn queue || [];\n\t\t\t}\n\t\t},\n\n\t\tdequeue: function (elem, type) {\n\t\t\ttype = type || \"fx\";\n\n\t\t\tvar queue = jQuery.queue(elem, type),\n\t\t\t\tstartLength = queue.length,\n\t\t\t\tfn = queue.shift(),\n\t\t\t\thooks = jQuery._queueHooks(elem, type),\n\t\t\t\tnext = function () {\n\t\t\t\t\tjQuery.dequeue(elem, type);\n\t\t\t\t};\n\n\t\t\t// If the fx queue is dequeued, always remove the progress sentinel\n\t\t\tif (fn === \"inprogress\") {\n\t\t\t\tfn = queue.shift();\n\t\t\t\tstartLength--;\n\t\t\t}\n\n\t\t\tif (fn) {\n\n\t\t\t\t// Add a progress sentinel to prevent the fx queue from being\n\t\t\t\t// automatically dequeued\n\t\t\t\tif (type === \"fx\") {\n\t\t\t\t\tqueue.unshift(\"inprogress\");\n\t\t\t\t}\n\n\t\t\t\t// Clear up the last queue stop function\n\t\t\t\tdelete hooks.stop;\n\t\t\t\tfn.call(elem, next, hooks);\n\t\t\t}\n\n\t\t\tif (!startLength && hooks) {\n\t\t\t\thooks.empty.fire();\n\t\t\t}\n\t\t},\n\n\t\t// Not public - generate a queueHooks object, or return the current one\n\t\t_queueHooks: function (elem, type) {\n\t\t\tvar key = type + \"queueHooks\";\n\t\t\treturn dataPriv.get(elem, key) || dataPriv.access(elem, key, {\n\t\t\t\tempty: jQuery.Callbacks(\"once memory\").add(function () {\n\t\t\t\t\tdataPriv.remove(elem, [type + \"queue\", key]);\n\t\t\t\t})\n\t\t\t});\n\t\t}\n\t});\n\n\tjQuery.fn.extend({\n\t\tqueue: function (type, data) {\n\t\t\tvar setter = 2;\n\n\t\t\tif (typeof type !== \"string\") {\n\t\t\t\tdata = type;\n\t\t\t\ttype = \"fx\";\n\t\t\t\tsetter--;\n\t\t\t}\n\n\t\t\tif (arguments.length < setter) {\n\t\t\t\treturn jQuery.queue(this[0], type);\n\t\t\t}\n\n\t\t\treturn data === undefined ?\n\t\t\t\tthis :\n\t\t\t\tthis.each(function () {\n\t\t\t\t\tvar queue = jQuery.queue(this, type, data);\n\n\t\t\t\t\t// Ensure a hooks for this queue\n\t\t\t\t\tjQuery._queueHooks(this, type);\n\n\t\t\t\t\tif (type === \"fx\" && queue[0] !== \"inprogress\") {\n\t\t\t\t\t\tjQuery.dequeue(this, type);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t},\n\t\tdequeue: function (type) {\n\t\t\treturn this.each(function () {\n\t\t\t\tjQuery.dequeue(this, type);\n\t\t\t});\n\t\t},\n\t\tclearQueue: function (type) {\n\t\t\treturn this.queue(type || \"fx\", []);\n\t\t},\n\n\t\t// Get a promise resolved when queues of a certain type\n\t\t// are emptied (fx is the type by default)\n\t\tpromise: function (type, obj) {\n\t\t\tvar tmp,\n\t\t\t\tcount = 1,\n\t\t\t\tdefer = jQuery.Deferred(),\n\t\t\t\telements = this,\n\t\t\t\ti = this.length,\n\t\t\t\tresolve = function () {\n\t\t\t\t\tif (!(--count)) {\n\t\t\t\t\t\tdefer.resolveWith(elements, [elements]);\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\tif (typeof type !== \"string\") {\n\t\t\t\tobj = type;\n\t\t\t\ttype = undefined;\n\t\t\t}\n\t\t\ttype = type || \"fx\";\n\n\t\t\twhile (i--) {\n\t\t\t\ttmp = dataPriv.get(elements[i], type + \"queueHooks\");\n\t\t\t\tif (tmp && tmp.empty) {\n\t\t\t\t\tcount++;\n\t\t\t\t\ttmp.empty.add(resolve);\n\t\t\t\t}\n\t\t\t}\n\t\t\tresolve();\n\t\t\treturn defer.promise(obj);\n\t\t}\n\t});\n\tvar pnum = (/[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/).source;\n\n\tvar rcssNum = new RegExp(\"^(?:([+-])=|)(\" + pnum + \")([a-z%]*)$\", \"i\");\n\n\n\tvar cssExpand = [\"Top\", \"Right\", \"Bottom\", \"Left\"];\n\n\tvar documentElement = document.documentElement;\n\n\n\n\tvar isAttached = function (elem) {\n\t\treturn jQuery.contains(elem.ownerDocument, elem);\n\t},\n\t\tcomposed = { composed: true };\n\n\t// Support: IE 9 - 11+, Edge 12 - 18+, iOS 10.0 - 10.2 only\n\t// Check attachment across shadow DOM boundaries when possible (gh-3504)\n\t// Support: iOS 10.0-10.2 only\n\t// Early iOS 10 versions support `attachShadow` but not `getRootNode`,\n\t// leading to errors. We need to check for `getRootNode`.\n\tif (documentElement.getRootNode) {\n\t\tisAttached = function (elem) {\n\t\t\treturn jQuery.contains(elem.ownerDocument, elem) ||\n\t\t\t\telem.getRootNode(composed) === elem.ownerDocument;\n\t\t};\n\t}\n\tvar isHiddenWithinTree = function (elem, el) {\n\n\t\t// isHiddenWithinTree might be called from jQuery#filter function;\n\t\t// in that case, element will be second argument\n\t\telem = el || elem;\n\n\t\t// Inline style trumps all\n\t\treturn elem.style.display === \"none\" ||\n\t\t\telem.style.display === \"\" &&\n\n\t\t\t// Otherwise, check computed style\n\t\t\t// Support: Firefox <=43 - 45\n\t\t\t// Disconnected elements can have computed display: none, so first confirm that elem is\n\t\t\t// in the document.\n\t\t\tisAttached(elem) &&\n\n\t\t\tjQuery.css(elem, \"display\") === \"none\";\n\t};\n\n\n\n\tfunction adjustCSS(elem, prop, valueParts, tween) {\n\t\tvar adjusted, scale,\n\t\t\tmaxIterations = 20,\n\t\t\tcurrentValue = tween ?\n\t\t\t\tfunction () {\n\t\t\t\t\treturn tween.cur();\n\t\t\t\t} :\n\t\t\t\tfunction () {\n\t\t\t\t\treturn jQuery.css(elem, prop, \"\");\n\t\t\t\t},\n\t\t\tinitial = currentValue(),\n\t\t\tunit = valueParts && valueParts[3] || (jQuery.cssNumber[prop] ? \"\" : \"px\"),\n\n\t\t\t// Starting value computation is required for potential unit mismatches\n\t\t\tinitialInUnit = elem.nodeType &&\n\t\t\t\t(jQuery.cssNumber[prop] || unit !== \"px\" && +initial) &&\n\t\t\t\trcssNum.exec(jQuery.css(elem, prop));\n\n\t\tif (initialInUnit && initialInUnit[3] !== unit) {\n\n\t\t\t// Support: Firefox <=54\n\t\t\t// Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144)\n\t\t\tinitial = initial / 2;\n\n\t\t\t// Trust units reported by jQuery.css\n\t\t\tunit = unit || initialInUnit[3];\n\n\t\t\t// Iteratively approximate from a nonzero starting point\n\t\t\tinitialInUnit = +initial || 1;\n\n\t\t\twhile (maxIterations--) {\n\n\t\t\t\t// Evaluate and update our best guess (doubling guesses that zero out).\n\t\t\t\t// Finish if the scale equals or crosses 1 (making the old*new product non-positive).\n\t\t\t\tjQuery.style(elem, prop, initialInUnit + unit);\n\t\t\t\tif ((1 - scale) * (1 - (scale = currentValue() / initial || 0.5)) <= 0) {\n\t\t\t\t\tmaxIterations = 0;\n\t\t\t\t}\n\t\t\t\tinitialInUnit = initialInUnit / scale;\n\n\t\t\t}\n\n\t\t\tinitialInUnit = initialInUnit * 2;\n\t\t\tjQuery.style(elem, prop, initialInUnit + unit);\n\n\t\t\t// Make sure we update the tween properties later on\n\t\t\tvalueParts = valueParts || [];\n\t\t}\n\n\t\tif (valueParts) {\n\t\t\tinitialInUnit = +initialInUnit || +initial || 0;\n\n\t\t\t// Apply relative offset (+=/-=) if specified\n\t\t\tadjusted = valueParts[1] ?\n\t\t\t\tinitialInUnit + (valueParts[1] + 1) * valueParts[2] :\n\t\t\t\t+valueParts[2];\n\t\t\tif (tween) {\n\t\t\t\ttween.unit = unit;\n\t\t\t\ttween.start = initialInUnit;\n\t\t\t\ttween.end = adjusted;\n\t\t\t}\n\t\t}\n\t\treturn adjusted;\n\t}\n\n\n\tvar defaultDisplayMap = {};\n\n\tfunction getDefaultDisplay(elem) {\n\t\tvar temp,\n\t\t\tdoc = elem.ownerDocument,\n\t\t\tnodeName = elem.nodeName,\n\t\t\tdisplay = defaultDisplayMap[nodeName];\n\n\t\tif (display) {\n\t\t\treturn display;\n\t\t}\n\n\t\ttemp = doc.body.appendChild(doc.createElement(nodeName));\n\t\tdisplay = jQuery.css(temp, \"display\");\n\n\t\ttemp.parentNode.removeChild(temp);\n\n\t\tif (display === \"none\") {\n\t\t\tdisplay = \"block\";\n\t\t}\n\t\tdefaultDisplayMap[nodeName] = display;\n\n\t\treturn display;\n\t}\n\n\tfunction showHide(elements, show) {\n\t\tvar display, elem,\n\t\t\tvalues = [],\n\t\t\tindex = 0,\n\t\t\tlength = elements.length;\n\n\t\t// Determine new display value for elements that need to change\n\t\tfor (; index < length; index++) {\n\t\t\telem = elements[index];\n\t\t\tif (!elem.style) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tdisplay = elem.style.display;\n\t\t\tif (show) {\n\n\t\t\t\t// Since we force visibility upon cascade-hidden elements, an immediate (and slow)\n\t\t\t\t// check is required in this first loop unless we have a nonempty display value (either\n\t\t\t\t// inline or about-to-be-restored)\n\t\t\t\tif (display === \"none\") {\n\t\t\t\t\tvalues[index] = dataPriv.get(elem, \"display\") || null;\n\t\t\t\t\tif (!values[index]) {\n\t\t\t\t\t\telem.style.display = \"\";\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (elem.style.display === \"\" && isHiddenWithinTree(elem)) {\n\t\t\t\t\tvalues[index] = getDefaultDisplay(elem);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (display !== \"none\") {\n\t\t\t\t\tvalues[index] = \"none\";\n\n\t\t\t\t\t// Remember what we're overwriting\n\t\t\t\t\tdataPriv.set(elem, \"display\", display);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Set the display of the elements in a second loop to avoid constant reflow\n\t\tfor (index = 0; index < length; index++) {\n\t\t\tif (values[index] != null) {\n\t\t\t\telements[index].style.display = values[index];\n\t\t\t}\n\t\t}\n\n\t\treturn elements;\n\t}\n\n\tjQuery.fn.extend({\n\t\tshow: function () {\n\t\t\treturn showHide(this, true);\n\t\t},\n\t\thide: function () {\n\t\t\treturn showHide(this);\n\t\t},\n\t\ttoggle: function (state) {\n\t\t\tif (typeof state === \"boolean\") {\n\t\t\t\treturn state ? this.show() : this.hide();\n\t\t\t}\n\n\t\t\treturn this.each(function () {\n\t\t\t\tif (isHiddenWithinTree(this)) {\n\t\t\t\t\tjQuery(this).show();\n\t\t\t\t} else {\n\t\t\t\t\tjQuery(this).hide();\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t});\n\tvar rcheckableType = (/^(?:checkbox|radio)$/i);\n\n\tvar rtagName = (/<([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]*)/i);\n\n\tvar rscriptType = (/^$|^module$|\\/(?:java|ecma)script/i);\n\n\n\n\t(function () {\n\t\tvar fragment = document.createDocumentFragment(),\n\t\t\tdiv = fragment.appendChild(document.createElement(\"div\")),\n\t\t\tinput = document.createElement(\"input\");\n\n\t\t// Support: Android 4.0 - 4.3 only\n\t\t// Check state lost if the name is set (trac-11217)\n\t\t// Support: Windows Web Apps (WWA)\n\t\t// `name` and `type` must use .setAttribute for WWA (trac-14901)\n\t\tinput.setAttribute(\"type\", \"radio\");\n\t\tinput.setAttribute(\"checked\", \"checked\");\n\t\tinput.setAttribute(\"name\", \"t\");\n\n\t\tdiv.appendChild(input);\n\n\t\t// Support: Android <=4.1 only\n\t\t// Older WebKit doesn't clone checked state correctly in fragments\n\t\tsupport.checkClone = div.cloneNode(true).cloneNode(true).lastChild.checked;\n\n\t\t// Support: IE <=11 only\n\t\t// Make sure textarea (and checkbox) defaultValue is properly cloned\n\t\tdiv.innerHTML = \"<textarea>x</textarea>\";\n\t\tsupport.noCloneChecked = !!div.cloneNode(true).lastChild.defaultValue;\n\n\t\t// Support: IE <=9 only\n\t\t// IE <=9 replaces <option> tags with their contents when inserted outside of\n\t\t// the select element.\n\t\tdiv.innerHTML = \"<option></option>\";\n\t\tsupport.option = !!div.lastChild;\n\t})();\n\n\n\t// We have to close these tags to support XHTML (trac-13200)\n\tvar wrapMap = {\n\n\t\t// XHTML parsers do not magically insert elements in the\n\t\t// same way that tag soup parsers do. So we cannot shorten\n\t\t// this by omitting <tbody> or other required elements.\n\t\tthead: [1, \"<table>\", \"</table>\"],\n\t\tcol: [2, \"<table><colgroup>\", \"</colgroup></table>\"],\n\t\ttr: [2, \"<table><tbody>\", \"</tbody></table>\"],\n\t\ttd: [3, \"<table><tbody><tr>\", \"</tr></tbody></table>\"],\n\n\t\t_default: [0, \"\", \"\"]\n\t};\n\n\twrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;\n\twrapMap.th = wrapMap.td;\n\n\t// Support: IE <=9 only\n\tif (!support.option) {\n\t\twrapMap.optgroup = wrapMap.option = [1, \"<select multiple='multiple'>\", \"</select>\"];\n\t}\n\n\n\tfunction getAll(context, tag) {\n\n\t\t// Support: IE <=9 - 11 only\n\t\t// Use typeof to avoid zero-argument method invocation on host objects (trac-15151)\n\t\tvar ret;\n\n\t\tif (typeof context.getElementsByTagName !== \"undefined\") {\n\t\t\tret = context.getElementsByTagName(tag || \"*\");\n\n\t\t} else if (typeof context.querySelectorAll !== \"undefined\") {\n\t\t\tret = context.querySelectorAll(tag || \"*\");\n\n\t\t} else {\n\t\t\tret = [];\n\t\t}\n\n\t\tif (tag === undefined || tag && nodeName(context, tag)) {\n\t\t\treturn jQuery.merge([context], ret);\n\t\t}\n\n\t\treturn ret;\n\t}\n\n\n\t// Mark scripts as having already been evaluated\n\tfunction setGlobalEval(elems, refElements) {\n\t\tvar i = 0,\n\t\t\tl = elems.length;\n\n\t\tfor (; i < l; i++) {\n\t\t\tdataPriv.set(\n\t\t\t\telems[i],\n\t\t\t\t\"globalEval\",\n\t\t\t\t!refElements || dataPriv.get(refElements[i], \"globalEval\")\n\t\t\t);\n\t\t}\n\t}\n\n\n\tvar rhtml = /<|&#?\\w+;/;\n\n\tfunction buildFragment(elems, context, scripts, selection, ignored) {\n\t\tvar elem, tmp, tag, wrap, attached, j,\n\t\t\tfragment = context.createDocumentFragment(),\n\t\t\tnodes = [],\n\t\t\ti = 0,\n\t\t\tl = elems.length;\n\n\t\tfor (; i < l; i++) {\n\t\t\telem = elems[i];\n\n\t\t\tif (elem || elem === 0) {\n\n\t\t\t\t// Add nodes directly\n\t\t\t\tif (toType(elem) === \"object\") {\n\n\t\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\t\tjQuery.merge(nodes, elem.nodeType ? [elem] : elem);\n\n\t\t\t\t\t// Convert non-html into a text node\n\t\t\t\t} else if (!rhtml.test(elem)) {\n\t\t\t\t\tnodes.push(context.createTextNode(elem));\n\n\t\t\t\t\t// Convert html into DOM nodes\n\t\t\t\t} else {\n\t\t\t\t\ttmp = tmp || fragment.appendChild(context.createElement(\"div\"));\n\n\t\t\t\t\t// Deserialize a standard representation\n\t\t\t\t\ttag = (rtagName.exec(elem) || [\"\", \"\"])[1].toLowerCase();\n\t\t\t\t\twrap = wrapMap[tag] || wrapMap._default;\n\t\t\t\t\ttmp.innerHTML = wrap[1] + jQuery.htmlPrefilter(elem) + wrap[2];\n\n\t\t\t\t\t// Descend through wrappers to the right content\n\t\t\t\t\tj = wrap[0];\n\t\t\t\t\twhile (j--) {\n\t\t\t\t\t\ttmp = tmp.lastChild;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\t\tjQuery.merge(nodes, tmp.childNodes);\n\n\t\t\t\t\t// Remember the top-level container\n\t\t\t\t\ttmp = fragment.firstChild;\n\n\t\t\t\t\t// Ensure the created nodes are orphaned (trac-12392)\n\t\t\t\t\ttmp.textContent = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Remove wrapper from fragment\n\t\tfragment.textContent = \"\";\n\n\t\ti = 0;\n\t\twhile ((elem = nodes[i++])) {\n\n\t\t\t// Skip elements already in the context collection (trac-4087)\n\t\t\tif (selection && jQuery.inArray(elem, selection) > -1) {\n\t\t\t\tif (ignored) {\n\t\t\t\t\tignored.push(elem);\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tattached = isAttached(elem);\n\n\t\t\t// Append to fragment\n\t\t\ttmp = getAll(fragment.appendChild(elem), \"script\");\n\n\t\t\t// Preserve script evaluation history\n\t\t\tif (attached) {\n\t\t\t\tsetGlobalEval(tmp);\n\t\t\t}\n\n\t\t\t// Capture executables\n\t\t\tif (scripts) {\n\t\t\t\tj = 0;\n\t\t\t\twhile ((elem = tmp[j++])) {\n\t\t\t\t\tif (rscriptType.test(elem.type || \"\")) {\n\t\t\t\t\t\tscripts.push(elem);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn fragment;\n\t}\n\n\n\tvar rtypenamespace = /^([^.]*)(?:\\.(.+)|)/;\n\n\tfunction returnTrue() {\n\t\treturn true;\n\t}\n\n\tfunction returnFalse() {\n\t\treturn false;\n\t}\n\n\tfunction on(elem, types, selector, data, fn, one) {\n\t\tvar origFn, type;\n\n\t\t// Types can be a map of types/handlers\n\t\tif (typeof types === \"object\") {\n\n\t\t\t// ( types-Object, selector, data )\n\t\t\tif (typeof selector !== \"string\") {\n\n\t\t\t\t// ( types-Object, data )\n\t\t\t\tdata = data || selector;\n\t\t\t\tselector = undefined;\n\t\t\t}\n\t\t\tfor (type in types) {\n\t\t\t\ton(elem, type, selector, data, types[type], one);\n\t\t\t}\n\t\t\treturn elem;\n\t\t}\n\n\t\tif (data == null && fn == null) {\n\n\t\t\t// ( types, fn )\n\t\t\tfn = selector;\n\t\t\tdata = selector = undefined;\n\t\t} else if (fn == null) {\n\t\t\tif (typeof selector === \"string\") {\n\n\t\t\t\t// ( types, selector, fn )\n\t\t\t\tfn = data;\n\t\t\t\tdata = undefined;\n\t\t\t} else {\n\n\t\t\t\t// ( types, data, fn )\n\t\t\t\tfn = data;\n\t\t\t\tdata = selector;\n\t\t\t\tselector = undefined;\n\t\t\t}\n\t\t}\n\t\tif (fn === false) {\n\t\t\tfn = returnFalse;\n\t\t} else if (!fn) {\n\t\t\treturn elem;\n\t\t}\n\n\t\tif (one === 1) {\n\t\t\torigFn = fn;\n\t\t\tfn = function (event) {\n\n\t\t\t\t// Can use an empty set, since event contains the info\n\t\t\t\tjQuery().off(event);\n\t\t\t\treturn origFn.apply(this, arguments);\n\t\t\t};\n\n\t\t\t// Use same guid so caller can remove using origFn\n\t\t\tfn.guid = origFn.guid || (origFn.guid = jQuery.guid++);\n\t\t}\n\t\treturn elem.each(function () {\n\t\t\tjQuery.event.add(this, types, fn, data, selector);\n\t\t});\n\t}\n\n\t/*\n\t * Helper functions for managing events -- not part of the public interface.\n\t * Props to Dean Edwards' addEvent library for many of the ideas.\n\t */\n\tjQuery.event = {\n\n\t\tglobal: {},\n\n\t\tadd: function (elem, types, handler, data, selector) {\n\n\t\t\tvar handleObjIn, eventHandle, tmp,\n\t\t\t\tevents, t, handleObj,\n\t\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\t\telemData = dataPriv.get(elem);\n\n\t\t\t// Only attach events to objects that accept data\n\t\t\tif (!acceptData(elem)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Caller can pass in an object of custom data in lieu of the handler\n\t\t\tif (handler.handler) {\n\t\t\t\thandleObjIn = handler;\n\t\t\t\thandler = handleObjIn.handler;\n\t\t\t\tselector = handleObjIn.selector;\n\t\t\t}\n\n\t\t\t// Ensure that invalid selectors throw exceptions at attach time\n\t\t\t// Evaluate against documentElement in case elem is a non-element node (e.g., document)\n\t\t\tif (selector) {\n\t\t\t\tjQuery.find.matchesSelector(documentElement, selector);\n\t\t\t}\n\n\t\t\t// Make sure that the handler has a unique ID, used to find/remove it later\n\t\t\tif (!handler.guid) {\n\t\t\t\thandler.guid = jQuery.guid++;\n\t\t\t}\n\n\t\t\t// Init the element's event structure and main handler, if this is the first\n\t\t\tif (!(events = elemData.events)) {\n\t\t\t\tevents = elemData.events = Object.create(null);\n\t\t\t}\n\t\t\tif (!(eventHandle = elemData.handle)) {\n\t\t\t\teventHandle = elemData.handle = function (e) {\n\n\t\t\t\t\t// Discard the second event of a jQuery.event.trigger() and\n\t\t\t\t\t// when an event is called after a page has unloaded\n\t\t\t\t\treturn typeof jQuery !== \"undefined\" && jQuery.event.triggered !== e.type ?\n\t\t\t\t\t\tjQuery.event.dispatch.apply(elem, arguments) : undefined;\n\t\t\t\t};\n\t\t\t}\n\n\t\t\t// Handle multiple events separated by a space\n\t\t\ttypes = (types || \"\").match(rnothtmlwhite) || [\"\"];\n\t\t\tt = types.length;\n\t\t\twhile (t--) {\n\t\t\t\ttmp = rtypenamespace.exec(types[t]) || [];\n\t\t\t\ttype = origType = tmp[1];\n\t\t\t\tnamespaces = (tmp[2] || \"\").split(\".\").sort();\n\n\t\t\t\t// There *must* be a type, no attaching namespace-only handlers\n\t\t\t\tif (!type) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// If event changes its type, use the special event handlers for the changed type\n\t\t\t\tspecial = jQuery.event.special[type] || {};\n\n\t\t\t\t// If selector defined, determine special event api type, otherwise given type\n\t\t\t\ttype = (selector ? special.delegateType : special.bindType) || type;\n\n\t\t\t\t// Update special based on newly reset type\n\t\t\t\tspecial = jQuery.event.special[type] || {};\n\n\t\t\t\t// handleObj is passed to all event handlers\n\t\t\t\thandleObj = jQuery.extend({\n\t\t\t\t\ttype: type,\n\t\t\t\t\torigType: origType,\n\t\t\t\t\tdata: data,\n\t\t\t\t\thandler: handler,\n\t\t\t\t\tguid: handler.guid,\n\t\t\t\t\tselector: selector,\n\t\t\t\t\tneedsContext: selector && jQuery.expr.match.needsContext.test(selector),\n\t\t\t\t\tnamespace: namespaces.join(\".\")\n\t\t\t\t}, handleObjIn);\n\n\t\t\t\t// Init the event handler queue if we're the first\n\t\t\t\tif (!(handlers = events[type])) {\n\t\t\t\t\thandlers = events[type] = [];\n\t\t\t\t\thandlers.delegateCount = 0;\n\n\t\t\t\t\t// Only use addEventListener if the special events handler returns false\n\t\t\t\t\tif (!special.setup ||\n\t\t\t\t\t\tspecial.setup.call(elem, data, namespaces, eventHandle) === false) {\n\n\t\t\t\t\t\tif (elem.addEventListener) {\n\t\t\t\t\t\t\telem.addEventListener(type, eventHandle);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (special.add) {\n\t\t\t\t\tspecial.add.call(elem, handleObj);\n\n\t\t\t\t\tif (!handleObj.handler.guid) {\n\t\t\t\t\t\thandleObj.handler.guid = handler.guid;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Add to the element's handler list, delegates in front\n\t\t\t\tif (selector) {\n\t\t\t\t\thandlers.splice(handlers.delegateCount++, 0, handleObj);\n\t\t\t\t} else {\n\t\t\t\t\thandlers.push(handleObj);\n\t\t\t\t}\n\n\t\t\t\t// Keep track of which events have ever been used, for event optimization\n\t\t\t\tjQuery.event.global[type] = true;\n\t\t\t}\n\n\t\t},\n\n\t\t// Detach an event or set of events from an element\n\t\tremove: function (elem, types, handler, selector, mappedTypes) {\n\n\t\t\tvar j, origCount, tmp,\n\t\t\t\tevents, t, handleObj,\n\t\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\t\telemData = dataPriv.hasData(elem) && dataPriv.get(elem);\n\n\t\t\tif (!elemData || !(events = elemData.events)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Once for each type.namespace in types; type may be omitted\n\t\t\ttypes = (types || \"\").match(rnothtmlwhite) || [\"\"];\n\t\t\tt = types.length;\n\t\t\twhile (t--) {\n\t\t\t\ttmp = rtypenamespace.exec(types[t]) || [];\n\t\t\t\ttype = origType = tmp[1];\n\t\t\t\tnamespaces = (tmp[2] || \"\").split(\".\").sort();\n\n\t\t\t\t// Unbind all events (on this namespace, if provided) for the element\n\t\t\t\tif (!type) {\n\t\t\t\t\tfor (type in events) {\n\t\t\t\t\t\tjQuery.event.remove(elem, type + types[t], handler, selector, true);\n\t\t\t\t\t}\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tspecial = jQuery.event.special[type] || {};\n\t\t\t\ttype = (selector ? special.delegateType : special.bindType) || type;\n\t\t\t\thandlers = events[type] || [];\n\t\t\t\ttmp = tmp[2] &&\n\t\t\t\t\tnew RegExp(\"(^|\\\\.)\" + namespaces.join(\"\\\\.(?:.*\\\\.|)\") + \"(\\\\.|$)\");\n\n\t\t\t\t// Remove matching events\n\t\t\t\torigCount = j = handlers.length;\n\t\t\t\twhile (j--) {\n\t\t\t\t\thandleObj = handlers[j];\n\n\t\t\t\t\tif ((mappedTypes || origType === handleObj.origType) &&\n\t\t\t\t\t\t(!handler || handler.guid === handleObj.guid) &&\n\t\t\t\t\t\t(!tmp || tmp.test(handleObj.namespace)) &&\n\t\t\t\t\t\t(!selector || selector === handleObj.selector ||\n\t\t\t\t\t\t\tselector === \"**\" && handleObj.selector)) {\n\t\t\t\t\t\thandlers.splice(j, 1);\n\n\t\t\t\t\t\tif (handleObj.selector) {\n\t\t\t\t\t\t\thandlers.delegateCount--;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (special.remove) {\n\t\t\t\t\t\t\tspecial.remove.call(elem, handleObj);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Remove generic event handler if we removed something and no more handlers exist\n\t\t\t\t// (avoids potential for endless recursion during removal of special event handlers)\n\t\t\t\tif (origCount && !handlers.length) {\n\t\t\t\t\tif (!special.teardown ||\n\t\t\t\t\t\tspecial.teardown.call(elem, namespaces, elemData.handle) === false) {\n\n\t\t\t\t\t\tjQuery.removeEvent(elem, type, elemData.handle);\n\t\t\t\t\t}\n\n\t\t\t\t\tdelete events[type];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove data and the expando if it's no longer used\n\t\t\tif (jQuery.isEmptyObject(events)) {\n\t\t\t\tdataPriv.remove(elem, \"handle events\");\n\t\t\t}\n\t\t},\n\n\t\tdispatch: function (nativeEvent) {\n\n\t\t\tvar i, j, ret, matched, handleObj, handlerQueue,\n\t\t\t\targs = new Array(arguments.length),\n\n\t\t\t\t// Make a writable jQuery.Event from the native event object\n\t\t\t\tevent = jQuery.event.fix(nativeEvent),\n\n\t\t\t\thandlers = (\n\t\t\t\t\tdataPriv.get(this, \"events\") || Object.create(null)\n\t\t\t\t)[event.type] || [],\n\t\t\t\tspecial = jQuery.event.special[event.type] || {};\n\n\t\t\t// Use the fix-ed jQuery.Event rather than the (read-only) native event\n\t\t\targs[0] = event;\n\n\t\t\tfor (i = 1; i < arguments.length; i++) {\n\t\t\t\targs[i] = arguments[i];\n\t\t\t}\n\n\t\t\tevent.delegateTarget = this;\n\n\t\t\t// Call the preDispatch hook for the mapped type, and let it bail if desired\n\t\t\tif (special.preDispatch && special.preDispatch.call(this, event) === false) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Determine handlers\n\t\t\thandlerQueue = jQuery.event.handlers.call(this, event, handlers);\n\n\t\t\t// Run delegates first; they may want to stop propagation beneath us\n\t\t\ti = 0;\n\t\t\twhile ((matched = handlerQueue[i++]) && !event.isPropagationStopped()) {\n\t\t\t\tevent.currentTarget = matched.elem;\n\n\t\t\t\tj = 0;\n\t\t\t\twhile ((handleObj = matched.handlers[j++]) &&\n\t\t\t\t\t!event.isImmediatePropagationStopped()) {\n\n\t\t\t\t\t// If the event is namespaced, then each handler is only invoked if it is\n\t\t\t\t\t// specially universal or its namespaces are a superset of the event's.\n\t\t\t\t\tif (!event.rnamespace || handleObj.namespace === false ||\n\t\t\t\t\t\tevent.rnamespace.test(handleObj.namespace)) {\n\n\t\t\t\t\t\tevent.handleObj = handleObj;\n\t\t\t\t\t\tevent.data = handleObj.data;\n\n\t\t\t\t\t\tret = ((jQuery.event.special[handleObj.origType] || {}).handle ||\n\t\t\t\t\t\t\thandleObj.handler).apply(matched.elem, args);\n\n\t\t\t\t\t\tif (ret !== undefined) {\n\t\t\t\t\t\t\tif ((event.result = ret) === false) {\n\t\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Call the postDispatch hook for the mapped type\n\t\t\tif (special.postDispatch) {\n\t\t\t\tspecial.postDispatch.call(this, event);\n\t\t\t}\n\n\t\t\treturn event.result;\n\t\t},\n\n\t\thandlers: function (event, handlers) {\n\t\t\tvar i, handleObj, sel, matchedHandlers, matchedSelectors,\n\t\t\t\thandlerQueue = [],\n\t\t\t\tdelegateCount = handlers.delegateCount,\n\t\t\t\tcur = event.target;\n\n\t\t\t// Find delegate handlers\n\t\t\tif (delegateCount &&\n\n\t\t\t\t// Support: IE <=9\n\t\t\t\t// Black-hole SVG <use> instance trees (trac-13180)\n\t\t\t\tcur.nodeType &&\n\n\t\t\t\t// Support: Firefox <=42\n\t\t\t\t// Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861)\n\t\t\t\t// https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click\n\t\t\t\t// Support: IE 11 only\n\t\t\t\t// ...but not arrow key \"clicks\" of radio inputs, which can have `button` -1 (gh-2343)\n\t\t\t\t!(event.type === \"click\" && event.button >= 1)) {\n\n\t\t\t\tfor (; cur !== this; cur = cur.parentNode || this) {\n\n\t\t\t\t\t// Don't check non-elements (trac-13208)\n\t\t\t\t\t// Don't process clicks on disabled elements (trac-6911, trac-8165, trac-11382, trac-11764)\n\t\t\t\t\tif (cur.nodeType === 1 && !(event.type === \"click\" && cur.disabled === true)) {\n\t\t\t\t\t\tmatchedHandlers = [];\n\t\t\t\t\t\tmatchedSelectors = {};\n\t\t\t\t\t\tfor (i = 0; i < delegateCount; i++) {\n\t\t\t\t\t\t\thandleObj = handlers[i];\n\n\t\t\t\t\t\t\t// Don't conflict with Object.prototype properties (trac-13203)\n\t\t\t\t\t\t\tsel = handleObj.selector + \" \";\n\n\t\t\t\t\t\t\tif (matchedSelectors[sel] === undefined) {\n\t\t\t\t\t\t\t\tmatchedSelectors[sel] = handleObj.needsContext ?\n\t\t\t\t\t\t\t\t\tjQuery(sel, this).index(cur) > -1 :\n\t\t\t\t\t\t\t\t\tjQuery.find(sel, this, null, [cur]).length;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (matchedSelectors[sel]) {\n\t\t\t\t\t\t\t\tmatchedHandlers.push(handleObj);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (matchedHandlers.length) {\n\t\t\t\t\t\t\thandlerQueue.push({ elem: cur, handlers: matchedHandlers });\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Add the remaining (directly-bound) handlers\n\t\t\tcur = this;\n\t\t\tif (delegateCount < handlers.length) {\n\t\t\t\thandlerQueue.push({ elem: cur, handlers: handlers.slice(delegateCount) });\n\t\t\t}\n\n\t\t\treturn handlerQueue;\n\t\t},\n\n\t\taddProp: function (name, hook) {\n\t\t\tObject.defineProperty(jQuery.Event.prototype, name, {\n\t\t\t\tenumerable: true,\n\t\t\t\tconfigurable: true,\n\n\t\t\t\tget: isFunction(hook) ?\n\t\t\t\t\tfunction () {\n\t\t\t\t\t\tif (this.originalEvent) {\n\t\t\t\t\t\t\treturn hook(this.originalEvent);\n\t\t\t\t\t\t}\n\t\t\t\t\t} :\n\t\t\t\t\tfunction () {\n\t\t\t\t\t\tif (this.originalEvent) {\n\t\t\t\t\t\t\treturn this.originalEvent[name];\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\n\t\t\t\tset: function (value) {\n\t\t\t\t\tObject.defineProperty(this, name, {\n\t\t\t\t\t\tenumerable: true,\n\t\t\t\t\t\tconfigurable: true,\n\t\t\t\t\t\twritable: true,\n\t\t\t\t\t\tvalue: value\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\tfix: function (originalEvent) {\n\t\t\treturn originalEvent[jQuery.expando] ?\n\t\t\t\toriginalEvent :\n\t\t\t\tnew jQuery.Event(originalEvent);\n\t\t},\n\n\t\tspecial: {\n\t\t\tload: {\n\n\t\t\t\t// Prevent triggered image.load events from bubbling to window.load\n\t\t\t\tnoBubble: true\n\t\t\t},\n\t\t\tclick: {\n\n\t\t\t\t// Utilize native event to ensure correct state for checkable inputs\n\t\t\t\tsetup: function (data) {\n\n\t\t\t\t\t// For mutual compressibility with _default, replace `this` access with a local var.\n\t\t\t\t\t// `|| data` is dead code meant only to preserve the variable through minification.\n\t\t\t\t\tvar el = this || data;\n\n\t\t\t\t\t// Claim the first handler\n\t\t\t\t\tif (rcheckableType.test(el.type) &&\n\t\t\t\t\t\tel.click && nodeName(el, \"input\")) {\n\n\t\t\t\t\t\t// dataPriv.set( el, \"click\", ... )\n\t\t\t\t\t\tleverageNative(el, \"click\", true);\n\t\t\t\t\t}\n\n\t\t\t\t\t// Return false to allow normal processing in the caller\n\t\t\t\t\treturn false;\n\t\t\t\t},\n\t\t\t\ttrigger: function (data) {\n\n\t\t\t\t\t// For mutual compressibility with _default, replace `this` access with a local var.\n\t\t\t\t\t// `|| data` is dead code meant only to preserve the variable through minification.\n\t\t\t\t\tvar el = this || data;\n\n\t\t\t\t\t// Force setup before triggering a click\n\t\t\t\t\tif (rcheckableType.test(el.type) &&\n\t\t\t\t\t\tel.click && nodeName(el, \"input\")) {\n\n\t\t\t\t\t\tleverageNative(el, \"click\");\n\t\t\t\t\t}\n\n\t\t\t\t\t// Return non-false to allow normal event-path propagation\n\t\t\t\t\treturn true;\n\t\t\t\t},\n\n\t\t\t\t// For cross-browser consistency, suppress native .click() on links\n\t\t\t\t// Also prevent it if we're currently inside a leveraged native-event stack\n\t\t\t\t_default: function (event) {\n\t\t\t\t\tvar target = event.target;\n\t\t\t\t\treturn rcheckableType.test(target.type) &&\n\t\t\t\t\t\ttarget.click && nodeName(target, \"input\") &&\n\t\t\t\t\t\tdataPriv.get(target, \"click\") ||\n\t\t\t\t\t\tnodeName(target, \"a\");\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tbeforeunload: {\n\t\t\t\tpostDispatch: function (event) {\n\n\t\t\t\t\t// Support: Firefox 20+\n\t\t\t\t\t// Firefox doesn't alert if the returnValue field is not set.\n\t\t\t\t\tif (event.result !== undefined && event.originalEvent) {\n\t\t\t\t\t\tevent.originalEvent.returnValue = event.result;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t// Ensure the presence of an event listener that handles manually-triggered\n\t// synthetic events by interrupting progress until reinvoked in response to\n\t// *native* events that it fires directly, ensuring that state changes have\n\t// already occurred before other listeners are invoked.\n\tfunction leverageNative(el, type, isSetup) {\n\n\t\t// Missing `isSetup` indicates a trigger call, which must force setup through jQuery.event.add\n\t\tif (!isSetup) {\n\t\t\tif (dataPriv.get(el, type) === undefined) {\n\t\t\t\tjQuery.event.add(el, type, returnTrue);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\t// Register the controller as a special universal handler for all event namespaces\n\t\tdataPriv.set(el, type, false);\n\t\tjQuery.event.add(el, type, {\n\t\t\tnamespace: false,\n\t\t\thandler: function (event) {\n\t\t\t\tvar result,\n\t\t\t\t\tsaved = dataPriv.get(this, type);\n\n\t\t\t\tif ((event.isTrigger & 1) && this[type]) {\n\n\t\t\t\t\t// Interrupt processing of the outer synthetic .trigger()ed event\n\t\t\t\t\tif (!saved) {\n\n\t\t\t\t\t\t// Store arguments for use when handling the inner native event\n\t\t\t\t\t\t// There will always be at least one argument (an event object), so this array\n\t\t\t\t\t\t// will not be confused with a leftover capture object.\n\t\t\t\t\t\tsaved = slice.call(arguments);\n\t\t\t\t\t\tdataPriv.set(this, type, saved);\n\n\t\t\t\t\t\t// Trigger the native event and capture its result\n\t\t\t\t\t\tthis[type]();\n\t\t\t\t\t\tresult = dataPriv.get(this, type);\n\t\t\t\t\t\tdataPriv.set(this, type, false);\n\n\t\t\t\t\t\tif (saved !== result) {\n\n\t\t\t\t\t\t\t// Cancel the outer synthetic event\n\t\t\t\t\t\t\tevent.stopImmediatePropagation();\n\t\t\t\t\t\t\tevent.preventDefault();\n\n\t\t\t\t\t\t\treturn result;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// If this is an inner synthetic event for an event with a bubbling surrogate\n\t\t\t\t\t\t// (focus or blur), assume that the surrogate already propagated from triggering\n\t\t\t\t\t\t// the native event and prevent that from happening again here.\n\t\t\t\t\t\t// This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the\n\t\t\t\t\t\t// bubbling surrogate propagates *after* the non-bubbling base), but that seems\n\t\t\t\t\t\t// less bad than duplication.\n\t\t\t\t\t} else if ((jQuery.event.special[type] || {}).delegateType) {\n\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t}\n\n\t\t\t\t\t// If this is a native event triggered above, everything is now in order\n\t\t\t\t\t// Fire an inner synthetic event with the original arguments\n\t\t\t\t} else if (saved) {\n\n\t\t\t\t\t// ...and capture the result\n\t\t\t\t\tdataPriv.set(this, type, jQuery.event.trigger(\n\t\t\t\t\t\tsaved[0],\n\t\t\t\t\t\tsaved.slice(1),\n\t\t\t\t\t\tthis\n\t\t\t\t\t));\n\n\t\t\t\t\t// Abort handling of the native event by all jQuery handlers while allowing\n\t\t\t\t\t// native handlers on the same element to run. On target, this is achieved\n\t\t\t\t\t// by stopping immediate propagation just on the jQuery event. However,\n\t\t\t\t\t// the native event is re-wrapped by a jQuery one on each level of the\n\t\t\t\t\t// propagation so the only way to stop it for jQuery is to stop it for\n\t\t\t\t\t// everyone via native `stopPropagation()`. This is not a problem for\n\t\t\t\t\t// focus/blur which don't bubble, but it does also stop click on checkboxes\n\t\t\t\t\t// and radios. We accept this limitation.\n\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\tevent.isImmediatePropagationStopped = returnTrue;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\tjQuery.removeEvent = function (elem, type, handle) {\n\n\t\t// This \"if\" is needed for plain objects\n\t\tif (elem.removeEventListener) {\n\t\t\telem.removeEventListener(type, handle);\n\t\t}\n\t};\n\n\tjQuery.Event = function (src, props) {\n\n\t\t// Allow instantiation without the 'new' keyword\n\t\tif (!(this instanceof jQuery.Event)) {\n\t\t\treturn new jQuery.Event(src, props);\n\t\t}\n\n\t\t// Event object\n\t\tif (src && src.type) {\n\t\t\tthis.originalEvent = src;\n\t\t\tthis.type = src.type;\n\n\t\t\t// Events bubbling up the document may have been marked as prevented\n\t\t\t// by a handler lower down the tree; reflect the correct value.\n\t\t\tthis.isDefaultPrevented = src.defaultPrevented ||\n\t\t\t\tsrc.defaultPrevented === undefined &&\n\n\t\t\t\t// Support: Android <=2.3 only\n\t\t\t\tsrc.returnValue === false ?\n\t\t\t\treturnTrue :\n\t\t\t\treturnFalse;\n\n\t\t\t// Create target properties\n\t\t\t// Support: Safari <=6 - 7 only\n\t\t\t// Target should not be a text node (trac-504, trac-13143)\n\t\t\tthis.target = (src.target && src.target.nodeType === 3) ?\n\t\t\t\tsrc.target.parentNode :\n\t\t\t\tsrc.target;\n\n\t\t\tthis.currentTarget = src.currentTarget;\n\t\t\tthis.relatedTarget = src.relatedTarget;\n\n\t\t\t// Event type\n\t\t} else {\n\t\t\tthis.type = src;\n\t\t}\n\n\t\t// Put explicitly provided properties onto the event object\n\t\tif (props) {\n\t\t\tjQuery.extend(this, props);\n\t\t}\n\n\t\t// Create a timestamp if incoming event doesn't have one\n\t\tthis.timeStamp = src && src.timeStamp || Date.now();\n\n\t\t// Mark it as fixed\n\t\tthis[jQuery.expando] = true;\n\t};\n\n\t// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding\n\t// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html\n\tjQuery.Event.prototype = {\n\t\tconstructor: jQuery.Event,\n\t\tisDefaultPrevented: returnFalse,\n\t\tisPropagationStopped: returnFalse,\n\t\tisImmediatePropagationStopped: returnFalse,\n\t\tisSimulated: false,\n\n\t\tpreventDefault: function () {\n\t\t\tvar e = this.originalEvent;\n\n\t\t\tthis.isDefaultPrevented = returnTrue;\n\n\t\t\tif (e && !this.isSimulated) {\n\t\t\t\te.preventDefault();\n\t\t\t}\n\t\t},\n\t\tstopPropagation: function () {\n\t\t\tvar e = this.originalEvent;\n\n\t\t\tthis.isPropagationStopped = returnTrue;\n\n\t\t\tif (e && !this.isSimulated) {\n\t\t\t\te.stopPropagation();\n\t\t\t}\n\t\t},\n\t\tstopImmediatePropagation: function () {\n\t\t\tvar e = this.originalEvent;\n\n\t\t\tthis.isImmediatePropagationStopped = returnTrue;\n\n\t\t\tif (e && !this.isSimulated) {\n\t\t\t\te.stopImmediatePropagation();\n\t\t\t}\n\n\t\t\tthis.stopPropagation();\n\t\t}\n\t};\n\n\t// Includes all common event props including KeyEvent and MouseEvent specific props\n\tjQuery.each({\n\t\taltKey: true,\n\t\tbubbles: true,\n\t\tcancelable: true,\n\t\tchangedTouches: true,\n\t\tctrlKey: true,\n\t\tdetail: true,\n\t\teventPhase: true,\n\t\tmetaKey: true,\n\t\tpageX: true,\n\t\tpageY: true,\n\t\tshiftKey: true,\n\t\tview: true,\n\t\t\"char\": true,\n\t\tcode: true,\n\t\tcharCode: true,\n\t\tkey: true,\n\t\tkeyCode: true,\n\t\tbutton: true,\n\t\tbuttons: true,\n\t\tclientX: true,\n\t\tclientY: true,\n\t\toffsetX: true,\n\t\toffsetY: true,\n\t\tpointerId: true,\n\t\tpointerType: true,\n\t\tscreenX: true,\n\t\tscreenY: true,\n\t\ttargetTouches: true,\n\t\ttoElement: true,\n\t\ttouches: true,\n\t\twhich: true\n\t}, jQuery.event.addProp);\n\n\tjQuery.each({ focus: \"focusin\", blur: \"focusout\" }, function (type, delegateType) {\n\n\t\tfunction focusMappedHandler(nativeEvent) {\n\t\t\tif (document.documentMode) {\n\n\t\t\t\t// Support: IE 11+\n\t\t\t\t// Attach a single focusin/focusout handler on the document while someone wants\n\t\t\t\t// focus/blur. This is because the former are synchronous in IE while the latter\n\t\t\t\t// are async. In other browsers, all those handlers are invoked synchronously.\n\n\t\t\t\t// `handle` from private data would already wrap the event, but we need\n\t\t\t\t// to change the `type` here.\n\t\t\t\tvar handle = dataPriv.get(this, \"handle\"),\n\t\t\t\t\tevent = jQuery.event.fix(nativeEvent);\n\t\t\t\tevent.type = nativeEvent.type === \"focusin\" ? \"focus\" : \"blur\";\n\t\t\t\tevent.isSimulated = true;\n\n\t\t\t\t// First, handle focusin/focusout\n\t\t\t\thandle(nativeEvent);\n\n\t\t\t\t// ...then, handle focus/blur\n\t\t\t\t//\n\t\t\t\t// focus/blur don't bubble while focusin/focusout do; simulate the former by only\n\t\t\t\t// invoking the handler at the lower level.\n\t\t\t\tif (event.target === event.currentTarget) {\n\n\t\t\t\t\t// The setup part calls `leverageNative`, which, in turn, calls\n\t\t\t\t\t// `jQuery.event.add`, so event handle will already have been set\n\t\t\t\t\t// by this point.\n\t\t\t\t\thandle(event);\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\t// For non-IE browsers, attach a single capturing handler on the document\n\t\t\t\t// while someone wants focusin/focusout.\n\t\t\t\tjQuery.event.simulate(delegateType, nativeEvent.target,\n\t\t\t\t\tjQuery.event.fix(nativeEvent));\n\t\t\t}\n\t\t}\n\n\t\tjQuery.event.special[type] = {\n\n\t\t\t// Utilize native event if possible so blur/focus sequence is correct\n\t\t\tsetup: function () {\n\n\t\t\t\tvar attaches;\n\n\t\t\t\t// Claim the first handler\n\t\t\t\t// dataPriv.set( this, \"focus\", ... )\n\t\t\t\t// dataPriv.set( this, \"blur\", ... )\n\t\t\t\tleverageNative(this, type, true);\n\n\t\t\t\tif (document.documentMode) {\n\n\t\t\t\t\t// Support: IE 9 - 11+\n\t\t\t\t\t// We use the same native handler for focusin & focus (and focusout & blur)\n\t\t\t\t\t// so we need to coordinate setup & teardown parts between those events.\n\t\t\t\t\t// Use `delegateType` as the key as `type` is already used by `leverageNative`.\n\t\t\t\t\tattaches = dataPriv.get(this, delegateType);\n\t\t\t\t\tif (!attaches) {\n\t\t\t\t\t\tthis.addEventListener(delegateType, focusMappedHandler);\n\t\t\t\t\t}\n\t\t\t\t\tdataPriv.set(this, delegateType, (attaches || 0) + 1);\n\t\t\t\t} else {\n\n\t\t\t\t\t// Return false to allow normal processing in the caller\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\t\t\ttrigger: function () {\n\n\t\t\t\t// Force setup before trigger\n\t\t\t\tleverageNative(this, type);\n\n\t\t\t\t// Return non-false to allow normal event-path propagation\n\t\t\t\treturn true;\n\t\t\t},\n\n\t\t\tteardown: function () {\n\t\t\t\tvar attaches;\n\n\t\t\t\tif (document.documentMode) {\n\t\t\t\t\tattaches = dataPriv.get(this, delegateType) - 1;\n\t\t\t\t\tif (!attaches) {\n\t\t\t\t\t\tthis.removeEventListener(delegateType, focusMappedHandler);\n\t\t\t\t\t\tdataPriv.remove(this, delegateType);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdataPriv.set(this, delegateType, attaches);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\n\t\t\t\t\t// Return false to indicate standard teardown should be applied\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// Suppress native focus or blur if we're currently inside\n\t\t\t// a leveraged native-event stack\n\t\t\t_default: function (event) {\n\t\t\t\treturn dataPriv.get(event.target, type);\n\t\t\t},\n\n\t\t\tdelegateType: delegateType\n\t\t};\n\n\t\t// Support: Firefox <=44\n\t\t// Firefox doesn't have focus(in | out) events\n\t\t// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787\n\t\t//\n\t\t// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1\n\t\t// focus(in | out) events fire after focus & blur events,\n\t\t// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order\n\t\t// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857\n\t\t//\n\t\t// Support: IE 9 - 11+\n\t\t// To preserve relative focusin/focus & focusout/blur event order guaranteed on the 3.x branch,\n\t\t// attach a single handler for both events in IE.\n\t\tjQuery.event.special[delegateType] = {\n\t\t\tsetup: function () {\n\n\t\t\t\t// Handle: regular nodes (via `this.ownerDocument`), window\n\t\t\t\t// (via `this.document`) & document (via `this`).\n\t\t\t\tvar doc = this.ownerDocument || this.document || this,\n\t\t\t\t\tdataHolder = document.documentMode ? this : doc,\n\t\t\t\t\tattaches = dataPriv.get(dataHolder, delegateType);\n\n\t\t\t\t// Support: IE 9 - 11+\n\t\t\t\t// We use the same native handler for focusin & focus (and focusout & blur)\n\t\t\t\t// so we need to coordinate setup & teardown parts between those events.\n\t\t\t\t// Use `delegateType` as the key as `type` is already used by `leverageNative`.\n\t\t\t\tif (!attaches) {\n\t\t\t\t\tif (document.documentMode) {\n\t\t\t\t\t\tthis.addEventListener(delegateType, focusMappedHandler);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdoc.addEventListener(type, focusMappedHandler, true);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tdataPriv.set(dataHolder, delegateType, (attaches || 0) + 1);\n\t\t\t},\n\t\t\tteardown: function () {\n\t\t\t\tvar doc = this.ownerDocument || this.document || this,\n\t\t\t\t\tdataHolder = document.documentMode ? this : doc,\n\t\t\t\t\tattaches = dataPriv.get(dataHolder, delegateType) - 1;\n\n\t\t\t\tif (!attaches) {\n\t\t\t\t\tif (document.documentMode) {\n\t\t\t\t\t\tthis.removeEventListener(delegateType, focusMappedHandler);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdoc.removeEventListener(type, focusMappedHandler, true);\n\t\t\t\t\t}\n\t\t\t\t\tdataPriv.remove(dataHolder, delegateType);\n\t\t\t\t} else {\n\t\t\t\t\tdataPriv.set(dataHolder, delegateType, attaches);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t});\n\n\t// Create mouseenter/leave events using mouseover/out and event-time checks\n\t// so that event delegation works in jQuery.\n\t// Do the same for pointerenter/pointerleave and pointerover/pointerout\n\t//\n\t// Support: Safari 7 only\n\t// Safari sends mouseenter too often; see:\n\t// https://bugs.chromium.org/p/chromium/issues/detail?id=470258\n\t// for the description of the bug (it existed in older Chrome versions as well).\n\tjQuery.each({\n\t\tmouseenter: \"mouseover\",\n\t\tmouseleave: \"mouseout\",\n\t\tpointerenter: \"pointerover\",\n\t\tpointerleave: \"pointerout\"\n\t}, function (orig, fix) {\n\t\tjQuery.event.special[orig] = {\n\t\t\tdelegateType: fix,\n\t\t\tbindType: fix,\n\n\t\t\thandle: function (event) {\n\t\t\t\tvar ret,\n\t\t\t\t\ttarget = this,\n\t\t\t\t\trelated = event.relatedTarget,\n\t\t\t\t\thandleObj = event.handleObj;\n\n\t\t\t\t// For mouseenter/leave call the handler if related is outside the target.\n\t\t\t\t// NB: No relatedTarget if the mouse left/entered the browser window\n\t\t\t\tif (!related || (related !== target && !jQuery.contains(target, related))) {\n\t\t\t\t\tevent.type = handleObj.origType;\n\t\t\t\t\tret = handleObj.handler.apply(this, arguments);\n\t\t\t\t\tevent.type = fix;\n\t\t\t\t}\n\t\t\t\treturn ret;\n\t\t\t}\n\t\t};\n\t});\n\n\tjQuery.fn.extend({\n\n\t\ton: function (types, selector, data, fn) {\n\t\t\treturn on(this, types, selector, data, fn);\n\t\t},\n\t\tone: function (types, selector, data, fn) {\n\t\t\treturn on(this, types, selector, data, fn, 1);\n\t\t},\n\t\toff: function (types, selector, fn) {\n\t\t\tvar handleObj, type;\n\t\t\tif (types && types.preventDefault && types.handleObj) {\n\n\t\t\t\t// ( event )  dispatched jQuery.Event\n\t\t\t\thandleObj = types.handleObj;\n\t\t\t\tjQuery(types.delegateTarget).off(\n\t\t\t\t\thandleObj.namespace ?\n\t\t\t\t\t\thandleObj.origType + \".\" + handleObj.namespace :\n\t\t\t\t\t\thandleObj.origType,\n\t\t\t\t\thandleObj.selector,\n\t\t\t\t\thandleObj.handler\n\t\t\t\t);\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\tif (typeof types === \"object\") {\n\n\t\t\t\t// ( types-object [, selector] )\n\t\t\t\tfor (type in types) {\n\t\t\t\t\tthis.off(type, selector, types[type]);\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\tif (selector === false || typeof selector === \"function\") {\n\n\t\t\t\t// ( types [, fn] )\n\t\t\t\tfn = selector;\n\t\t\t\tselector = undefined;\n\t\t\t}\n\t\t\tif (fn === false) {\n\t\t\t\tfn = returnFalse;\n\t\t\t}\n\t\t\treturn this.each(function () {\n\t\t\t\tjQuery.event.remove(this, types, fn, selector);\n\t\t\t});\n\t\t}\n\t});\n\n\n\tvar\n\n\t\t// Support: IE <=10 - 11, Edge 12 - 13 only\n\t\t// In IE/Edge using regex groups here causes severe slowdowns.\n\t\t// See https://connect.microsoft.com/IE/feedback/details/1736512/\n\t\trnoInnerhtml = /<script|<style|<link/i,\n\n\t\t// checked=\"checked\" or checked\n\t\trchecked = /checked\\s*(?:[^=]|=\\s*.checked.)/i,\n\n\t\trcleanScript = /^\\s*<!\\[CDATA\\[|\\]\\]>\\s*$/g;\n\n\t// Prefer a tbody over its parent table for containing new rows\n\tfunction manipulationTarget(elem, content) {\n\t\tif (nodeName(elem, \"table\") &&\n\t\t\tnodeName(content.nodeType !== 11 ? content : content.firstChild, \"tr\")) {\n\n\t\t\treturn jQuery(elem).children(\"tbody\")[0] || elem;\n\t\t}\n\n\t\treturn elem;\n\t}\n\n\t// Replace/restore the type attribute of script elements for safe DOM manipulation\n\tfunction disableScript(elem) {\n\t\telem.type = (elem.getAttribute(\"type\") !== null) + \"/\" + elem.type;\n\t\treturn elem;\n\t}\n\tfunction restoreScript(elem) {\n\t\tif ((elem.type || \"\").slice(0, 5) === \"true/\") {\n\t\t\telem.type = elem.type.slice(5);\n\t\t} else {\n\t\t\telem.removeAttribute(\"type\");\n\t\t}\n\n\t\treturn elem;\n\t}\n\n\tfunction cloneCopyEvent(src, dest) {\n\t\tvar i, l, type, pdataOld, udataOld, udataCur, events;\n\n\t\tif (dest.nodeType !== 1) {\n\t\t\treturn;\n\t\t}\n\n\t\t// 1. Copy private data: events, handlers, etc.\n\t\tif (dataPriv.hasData(src)) {\n\t\t\tpdataOld = dataPriv.get(src);\n\t\t\tevents = pdataOld.events;\n\n\t\t\tif (events) {\n\t\t\t\tdataPriv.remove(dest, \"handle events\");\n\n\t\t\t\tfor (type in events) {\n\t\t\t\t\tfor (i = 0, l = events[type].length; i < l; i++) {\n\t\t\t\t\t\tjQuery.event.add(dest, type, events[type][i]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// 2. Copy user data\n\t\tif (dataUser.hasData(src)) {\n\t\t\tudataOld = dataUser.access(src);\n\t\t\tudataCur = jQuery.extend({}, udataOld);\n\n\t\t\tdataUser.set(dest, udataCur);\n\t\t}\n\t}\n\n\t// Fix IE bugs, see support tests\n\tfunction fixInput(src, dest) {\n\t\tvar nodeName = dest.nodeName.toLowerCase();\n\n\t\t// Fails to persist the checked state of a cloned checkbox or radio button.\n\t\tif (nodeName === \"input\" && rcheckableType.test(src.type)) {\n\t\t\tdest.checked = src.checked;\n\n\t\t\t// Fails to return the selected option to the default selected state when cloning options\n\t\t} else if (nodeName === \"input\" || nodeName === \"textarea\") {\n\t\t\tdest.defaultValue = src.defaultValue;\n\t\t}\n\t}\n\n\tfunction domManip(collection, args, callback, ignored) {\n\n\t\t// Flatten any nested arrays\n\t\targs = flat(args);\n\n\t\tvar fragment, first, scripts, hasScripts, node, doc,\n\t\t\ti = 0,\n\t\t\tl = collection.length,\n\t\t\tiNoClone = l - 1,\n\t\t\tvalue = args[0],\n\t\t\tvalueIsFunction = isFunction(value);\n\n\t\t// We can't cloneNode fragments that contain checked, in WebKit\n\t\tif (valueIsFunction ||\n\t\t\t(l > 1 && typeof value === \"string\" &&\n\t\t\t\t!support.checkClone && rchecked.test(value))) {\n\t\t\treturn collection.each(function (index) {\n\t\t\t\tvar self = collection.eq(index);\n\t\t\t\tif (valueIsFunction) {\n\t\t\t\t\targs[0] = value.call(this, index, self.html());\n\t\t\t\t}\n\t\t\t\tdomManip(self, args, callback, ignored);\n\t\t\t});\n\t\t}\n\n\t\tif (l) {\n\t\t\tfragment = buildFragment(args, collection[0].ownerDocument, false, collection, ignored);\n\t\t\tfirst = fragment.firstChild;\n\n\t\t\tif (fragment.childNodes.length === 1) {\n\t\t\t\tfragment = first;\n\t\t\t}\n\n\t\t\t// Require either new content or an interest in ignored elements to invoke the callback\n\t\t\tif (first || ignored) {\n\t\t\t\tscripts = jQuery.map(getAll(fragment, \"script\"), disableScript);\n\t\t\t\thasScripts = scripts.length;\n\n\t\t\t\t// Use the original fragment for the last item\n\t\t\t\t// instead of the first because it can end up\n\t\t\t\t// being emptied incorrectly in certain situations (trac-8070).\n\t\t\t\tfor (; i < l; i++) {\n\t\t\t\t\tnode = fragment;\n\n\t\t\t\t\tif (i !== iNoClone) {\n\t\t\t\t\t\tnode = jQuery.clone(node, true, true);\n\n\t\t\t\t\t\t// Keep references to cloned scripts for later restoration\n\t\t\t\t\t\tif (hasScripts) {\n\n\t\t\t\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\t\t\t\tjQuery.merge(scripts, getAll(node, \"script\"));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tcallback.call(collection[i], node, i);\n\t\t\t\t}\n\n\t\t\t\tif (hasScripts) {\n\t\t\t\t\tdoc = scripts[scripts.length - 1].ownerDocument;\n\n\t\t\t\t\t// Reenable scripts\n\t\t\t\t\tjQuery.map(scripts, restoreScript);\n\n\t\t\t\t\t// Evaluate executable scripts on first document insertion\n\t\t\t\t\tfor (i = 0; i < hasScripts; i++) {\n\t\t\t\t\t\tnode = scripts[i];\n\t\t\t\t\t\tif (rscriptType.test(node.type || \"\") &&\n\t\t\t\t\t\t\t!dataPriv.access(node, \"globalEval\") &&\n\t\t\t\t\t\t\tjQuery.contains(doc, node)) {\n\n\t\t\t\t\t\t\tif (node.src && (node.type || \"\").toLowerCase() !== \"module\") {\n\n\t\t\t\t\t\t\t\t// Optional AJAX dependency, but won't run scripts if not present\n\t\t\t\t\t\t\t\tif (jQuery._evalUrl && !node.noModule) {\n\t\t\t\t\t\t\t\t\tjQuery._evalUrl(node.src, {\n\t\t\t\t\t\t\t\t\t\tnonce: node.nonce || node.getAttribute(\"nonce\")\n\t\t\t\t\t\t\t\t\t}, doc);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t// Unwrap a CDATA section containing script contents. This shouldn't be\n\t\t\t\t\t\t\t\t// needed as in XML documents they're already not visible when\n\t\t\t\t\t\t\t\t// inspecting element contents and in HTML documents they have no\n\t\t\t\t\t\t\t\t// meaning but we're preserving that logic for backwards compatibility.\n\t\t\t\t\t\t\t\t// This will be removed completely in 4.0. See gh-4904.\n\t\t\t\t\t\t\t\tDOMEval(node.textContent.replace(rcleanScript, \"\"), node, doc);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn collection;\n\t}\n\n\tfunction remove(elem, selector, keepData) {\n\t\tvar node,\n\t\t\tnodes = selector ? jQuery.filter(selector, elem) : elem,\n\t\t\ti = 0;\n\n\t\tfor (; (node = nodes[i]) != null; i++) {\n\t\t\tif (!keepData && node.nodeType === 1) {\n\t\t\t\tjQuery.cleanData(getAll(node));\n\t\t\t}\n\n\t\t\tif (node.parentNode) {\n\t\t\t\tif (keepData && isAttached(node)) {\n\t\t\t\t\tsetGlobalEval(getAll(node, \"script\"));\n\t\t\t\t}\n\t\t\t\tnode.parentNode.removeChild(node);\n\t\t\t}\n\t\t}\n\n\t\treturn elem;\n\t}\n\n\tjQuery.extend({\n\t\thtmlPrefilter: function (html) {\n\t\t\treturn html;\n\t\t},\n\n\t\tclone: function (elem, dataAndEvents, deepDataAndEvents) {\n\t\t\tvar i, l, srcElements, destElements,\n\t\t\t\tclone = elem.cloneNode(true),\n\t\t\t\tinPage = isAttached(elem);\n\n\t\t\t// Fix IE cloning issues\n\t\t\tif (!support.noCloneChecked && (elem.nodeType === 1 || elem.nodeType === 11) &&\n\t\t\t\t!jQuery.isXMLDoc(elem)) {\n\n\t\t\t\t// We eschew jQuery#find here for performance reasons:\n\t\t\t\t// https://jsperf.com/getall-vs-sizzle/2\n\t\t\t\tdestElements = getAll(clone);\n\t\t\t\tsrcElements = getAll(elem);\n\n\t\t\t\tfor (i = 0, l = srcElements.length; i < l; i++) {\n\t\t\t\t\tfixInput(srcElements[i], destElements[i]);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Copy the events from the original to the clone\n\t\t\tif (dataAndEvents) {\n\t\t\t\tif (deepDataAndEvents) {\n\t\t\t\t\tsrcElements = srcElements || getAll(elem);\n\t\t\t\t\tdestElements = destElements || getAll(clone);\n\n\t\t\t\t\tfor (i = 0, l = srcElements.length; i < l; i++) {\n\t\t\t\t\t\tcloneCopyEvent(srcElements[i], destElements[i]);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tcloneCopyEvent(elem, clone);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Preserve script evaluation history\n\t\t\tdestElements = getAll(clone, \"script\");\n\t\t\tif (destElements.length > 0) {\n\t\t\t\tsetGlobalEval(destElements, !inPage && getAll(elem, \"script\"));\n\t\t\t}\n\n\t\t\t// Return the cloned set\n\t\t\treturn clone;\n\t\t},\n\n\t\tcleanData: function (elems) {\n\t\t\tvar data, elem, type,\n\t\t\t\tspecial = jQuery.event.special,\n\t\t\t\ti = 0;\n\n\t\t\tfor (; (elem = elems[i]) !== undefined; i++) {\n\t\t\t\tif (acceptData(elem)) {\n\t\t\t\t\tif ((data = elem[dataPriv.expando])) {\n\t\t\t\t\t\tif (data.events) {\n\t\t\t\t\t\t\tfor (type in data.events) {\n\t\t\t\t\t\t\t\tif (special[type]) {\n\t\t\t\t\t\t\t\t\tjQuery.event.remove(elem, type);\n\n\t\t\t\t\t\t\t\t\t// This is a shortcut to avoid jQuery.event.remove's overhead\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tjQuery.removeEvent(elem, type, data.handle);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\t\telem[dataPriv.expando] = undefined;\n\t\t\t\t\t}\n\t\t\t\t\tif (elem[dataUser.expando]) {\n\n\t\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\t\telem[dataUser.expando] = undefined;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\n\tjQuery.fn.extend({\n\t\tdetach: function (selector) {\n\t\t\treturn remove(this, selector, true);\n\t\t},\n\n\t\tremove: function (selector) {\n\t\t\treturn remove(this, selector);\n\t\t},\n\n\t\ttext: function (value) {\n\t\t\treturn access(this, function (value) {\n\t\t\t\treturn value === undefined ?\n\t\t\t\t\tjQuery.text(this) :\n\t\t\t\t\tthis.empty().each(function () {\n\t\t\t\t\t\tif (this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9) {\n\t\t\t\t\t\t\tthis.textContent = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t}, null, value, arguments.length);\n\t\t},\n\n\t\tappend: function () {\n\t\t\treturn domManip(this, arguments, function (elem) {\n\t\t\t\tif (this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9) {\n\t\t\t\t\tvar target = manipulationTarget(this, elem);\n\t\t\t\t\ttarget.appendChild(elem);\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\tprepend: function () {\n\t\t\treturn domManip(this, arguments, function (elem) {\n\t\t\t\tif (this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9) {\n\t\t\t\t\tvar target = manipulationTarget(this, elem);\n\t\t\t\t\ttarget.insertBefore(elem, target.firstChild);\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\tbefore: function () {\n\t\t\treturn domManip(this, arguments, function (elem) {\n\t\t\t\tif (this.parentNode) {\n\t\t\t\t\tthis.parentNode.insertBefore(elem, this);\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\tafter: function () {\n\t\t\treturn domManip(this, arguments, function (elem) {\n\t\t\t\tif (this.parentNode) {\n\t\t\t\t\tthis.parentNode.insertBefore(elem, this.nextSibling);\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\tempty: function () {\n\t\t\tvar elem,\n\t\t\t\ti = 0;\n\n\t\t\tfor (; (elem = this[i]) != null; i++) {\n\t\t\t\tif (elem.nodeType === 1) {\n\n\t\t\t\t\t// Prevent memory leaks\n\t\t\t\t\tjQuery.cleanData(getAll(elem, false));\n\n\t\t\t\t\t// Remove any remaining nodes\n\t\t\t\t\telem.textContent = \"\";\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn this;\n\t\t},\n\n\t\tclone: function (dataAndEvents, deepDataAndEvents) {\n\t\t\tdataAndEvents = dataAndEvents == null ? false : dataAndEvents;\n\t\t\tdeepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;\n\n\t\t\treturn this.map(function () {\n\t\t\t\treturn jQuery.clone(this, dataAndEvents, deepDataAndEvents);\n\t\t\t});\n\t\t},\n\n\t\thtml: function (value) {\n\t\t\treturn access(this, function (value) {\n\t\t\t\tvar elem = this[0] || {},\n\t\t\t\t\ti = 0,\n\t\t\t\t\tl = this.length;\n\n\t\t\t\tif (value === undefined && elem.nodeType === 1) {\n\t\t\t\t\treturn elem.innerHTML;\n\t\t\t\t}\n\n\t\t\t\t// See if we can take a shortcut and just use innerHTML\n\t\t\t\tif (typeof value === \"string\" && !rnoInnerhtml.test(value) &&\n\t\t\t\t\t!wrapMap[(rtagName.exec(value) || [\"\", \"\"])[1].toLowerCase()]) {\n\n\t\t\t\t\tvalue = jQuery.htmlPrefilter(value);\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tfor (; i < l; i++) {\n\t\t\t\t\t\t\telem = this[i] || {};\n\n\t\t\t\t\t\t\t// Remove element nodes and prevent memory leaks\n\t\t\t\t\t\t\tif (elem.nodeType === 1) {\n\t\t\t\t\t\t\t\tjQuery.cleanData(getAll(elem, false));\n\t\t\t\t\t\t\t\telem.innerHTML = value;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\telem = 0;\n\n\t\t\t\t\t\t// If using innerHTML throws an exception, use the fallback method\n\t\t\t\t\t} catch (e) { }\n\t\t\t\t}\n\n\t\t\t\tif (elem) {\n\t\t\t\t\tthis.empty().append(value);\n\t\t\t\t}\n\t\t\t}, null, value, arguments.length);\n\t\t},\n\n\t\treplaceWith: function () {\n\t\t\tvar ignored = [];\n\n\t\t\t// Make the changes, replacing each non-ignored context element with the new content\n\t\t\treturn domManip(this, arguments, function (elem) {\n\t\t\t\tvar parent = this.parentNode;\n\n\t\t\t\tif (jQuery.inArray(this, ignored) < 0) {\n\t\t\t\t\tjQuery.cleanData(getAll(this));\n\t\t\t\t\tif (parent) {\n\t\t\t\t\t\tparent.replaceChild(elem, this);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Force callback invocation\n\t\t\t}, ignored);\n\t\t}\n\t});\n\n\tjQuery.each({\n\t\tappendTo: \"append\",\n\t\tprependTo: \"prepend\",\n\t\tinsertBefore: \"before\",\n\t\tinsertAfter: \"after\",\n\t\treplaceAll: \"replaceWith\"\n\t}, function (name, original) {\n\t\tjQuery.fn[name] = function (selector) {\n\t\t\tvar elems,\n\t\t\t\tret = [],\n\t\t\t\tinsert = jQuery(selector),\n\t\t\t\tlast = insert.length - 1,\n\t\t\t\ti = 0;\n\n\t\t\tfor (; i <= last; i++) {\n\t\t\t\telems = i === last ? this : this.clone(true);\n\t\t\t\tjQuery(insert[i])[original](elems);\n\n\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t// .get() because push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\tpush.apply(ret, elems.get());\n\t\t\t}\n\n\t\t\treturn this.pushStack(ret);\n\t\t};\n\t});\n\tvar rnumnonpx = new RegExp(\"^(\" + pnum + \")(?!px)[a-z%]+$\", \"i\");\n\n\tvar rcustomProp = /^--/;\n\n\n\tvar getStyles = function (elem) {\n\n\t\t// Support: IE <=11 only, Firefox <=30 (trac-15098, trac-14150)\n\t\t// IE throws on elements created in popups\n\t\t// FF meanwhile throws on frame elements through \"defaultView.getComputedStyle\"\n\t\tvar view = elem.ownerDocument.defaultView;\n\n\t\tif (!view || !view.opener) {\n\t\t\tview = window;\n\t\t}\n\n\t\treturn view.getComputedStyle(elem);\n\t};\n\n\tvar swap = function (elem, options, callback) {\n\t\tvar ret, name,\n\t\t\told = {};\n\n\t\t// Remember the old values, and insert the new ones\n\t\tfor (name in options) {\n\t\t\told[name] = elem.style[name];\n\t\t\telem.style[name] = options[name];\n\t\t}\n\n\t\tret = callback.call(elem);\n\n\t\t// Revert the old values\n\t\tfor (name in options) {\n\t\t\telem.style[name] = old[name];\n\t\t}\n\n\t\treturn ret;\n\t};\n\n\n\tvar rboxStyle = new RegExp(cssExpand.join(\"|\"), \"i\");\n\n\n\n\t(function () {\n\n\t\t// Executing both pixelPosition & boxSizingReliable tests require only one layout\n\t\t// so they're executed at the same time to save the second computation.\n\t\tfunction computeStyleTests() {\n\n\t\t\t// This is a singleton, we need to execute it only once\n\t\t\tif (!div) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tcontainer.style.cssText = \"position:absolute;left:-11111px;width:60px;\" +\n\t\t\t\t\"margin-top:1px;padding:0;border:0\";\n\t\t\tdiv.style.cssText =\n\t\t\t\t\"position:relative;display:block;box-sizing:border-box;overflow:scroll;\" +\n\t\t\t\t\"margin:auto;border:1px;padding:1px;\" +\n\t\t\t\t\"width:60%;top:1%\";\n\t\t\tdocumentElement.appendChild(container).appendChild(div);\n\n\t\t\tvar divStyle = window.getComputedStyle(div);\n\t\t\tpixelPositionVal = divStyle.top !== \"1%\";\n\n\t\t\t// Support: Android 4.0 - 4.3 only, Firefox <=3 - 44\n\t\t\treliableMarginLeftVal = roundPixelMeasures(divStyle.marginLeft) === 12;\n\n\t\t\t// Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3\n\t\t\t// Some styles come back with percentage values, even though they shouldn't\n\t\t\tdiv.style.right = \"60%\";\n\t\t\tpixelBoxStylesVal = roundPixelMeasures(divStyle.right) === 36;\n\n\t\t\t// Support: IE 9 - 11 only\n\t\t\t// Detect misreporting of content dimensions for box-sizing:border-box elements\n\t\t\tboxSizingReliableVal = roundPixelMeasures(divStyle.width) === 36;\n\n\t\t\t// Support: IE 9 only\n\t\t\t// Detect overflow:scroll screwiness (gh-3699)\n\t\t\t// Support: Chrome <=64\n\t\t\t// Don't get tricked when zoom affects offsetWidth (gh-4029)\n\t\t\tdiv.style.position = \"absolute\";\n\t\t\tscrollboxSizeVal = roundPixelMeasures(div.offsetWidth / 3) === 12;\n\n\t\t\tdocumentElement.removeChild(container);\n\n\t\t\t// Nullify the div so it wouldn't be stored in the memory and\n\t\t\t// it will also be a sign that checks already performed\n\t\t\tdiv = null;\n\t\t}\n\n\t\tfunction roundPixelMeasures(measure) {\n\t\t\treturn Math.round(parseFloat(measure));\n\t\t}\n\n\t\tvar pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal,\n\t\t\treliableTrDimensionsVal, reliableMarginLeftVal,\n\t\t\tcontainer = document.createElement(\"div\"),\n\t\t\tdiv = document.createElement(\"div\");\n\n\t\t// Finish early in limited (non-browser) environments\n\t\tif (!div.style) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Support: IE <=9 - 11 only\n\t\t// Style of cloned element affects source element cloned (trac-8908)\n\t\tdiv.style.backgroundClip = \"content-box\";\n\t\tdiv.cloneNode(true).style.backgroundClip = \"\";\n\t\tsupport.clearCloneStyle = div.style.backgroundClip === \"content-box\";\n\n\t\tjQuery.extend(support, {\n\t\t\tboxSizingReliable: function () {\n\t\t\t\tcomputeStyleTests();\n\t\t\t\treturn boxSizingReliableVal;\n\t\t\t},\n\t\t\tpixelBoxStyles: function () {\n\t\t\t\tcomputeStyleTests();\n\t\t\t\treturn pixelBoxStylesVal;\n\t\t\t},\n\t\t\tpixelPosition: function () {\n\t\t\t\tcomputeStyleTests();\n\t\t\t\treturn pixelPositionVal;\n\t\t\t},\n\t\t\treliableMarginLeft: function () {\n\t\t\t\tcomputeStyleTests();\n\t\t\t\treturn reliableMarginLeftVal;\n\t\t\t},\n\t\t\tscrollboxSize: function () {\n\t\t\t\tcomputeStyleTests();\n\t\t\t\treturn scrollboxSizeVal;\n\t\t\t},\n\n\t\t\t// Support: IE 9 - 11+, Edge 15 - 18+\n\t\t\t// IE/Edge misreport `getComputedStyle` of table rows with width/height\n\t\t\t// set in CSS while `offset*` properties report correct values.\n\t\t\t// Behavior in IE 9 is more subtle than in newer versions & it passes\n\t\t\t// some versions of this test; make sure not to make it pass there!\n\t\t\t//\n\t\t\t// Support: Firefox 70+\n\t\t\t// Only Firefox includes border widths\n\t\t\t// in computed dimensions. (gh-4529)\n\t\t\treliableTrDimensions: function () {\n\t\t\t\tvar table, tr, trChild, trStyle;\n\t\t\t\tif (reliableTrDimensionsVal == null) {\n\t\t\t\t\ttable = document.createElement(\"table\");\n\t\t\t\t\ttr = document.createElement(\"tr\");\n\t\t\t\t\ttrChild = document.createElement(\"div\");\n\n\t\t\t\t\ttable.style.cssText = \"position:absolute;left:-11111px;border-collapse:separate\";\n\t\t\t\t\ttr.style.cssText = \"border:1px solid\";\n\n\t\t\t\t\t// Support: Chrome 86+\n\t\t\t\t\t// Height set through cssText does not get applied.\n\t\t\t\t\t// Computed height then comes back as 0.\n\t\t\t\t\ttr.style.height = \"1px\";\n\t\t\t\t\ttrChild.style.height = \"9px\";\n\n\t\t\t\t\t// Support: Android 8 Chrome 86+\n\t\t\t\t\t// In our bodyBackground.html iframe,\n\t\t\t\t\t// display for all div elements is set to \"inline\",\n\t\t\t\t\t// which causes a problem only in Android 8 Chrome 86.\n\t\t\t\t\t// Ensuring the div is display: block\n\t\t\t\t\t// gets around this issue.\n\t\t\t\t\ttrChild.style.display = \"block\";\n\n\t\t\t\t\tdocumentElement\n\t\t\t\t\t\t.appendChild(table)\n\t\t\t\t\t\t.appendChild(tr)\n\t\t\t\t\t\t.appendChild(trChild);\n\n\t\t\t\t\ttrStyle = window.getComputedStyle(tr);\n\t\t\t\t\treliableTrDimensionsVal = (parseInt(trStyle.height, 10) +\n\t\t\t\t\t\tparseInt(trStyle.borderTopWidth, 10) +\n\t\t\t\t\t\tparseInt(trStyle.borderBottomWidth, 10)) === tr.offsetHeight;\n\n\t\t\t\t\tdocumentElement.removeChild(table);\n\t\t\t\t}\n\t\t\t\treturn reliableTrDimensionsVal;\n\t\t\t}\n\t\t});\n\t})();\n\n\n\tfunction curCSS(elem, name, computed) {\n\t\tvar width, minWidth, maxWidth, ret,\n\t\t\tisCustomProp = rcustomProp.test(name),\n\n\t\t\t// Support: Firefox 51+\n\t\t\t// Retrieving style before computed somehow\n\t\t\t// fixes an issue with getting wrong values\n\t\t\t// on detached elements\n\t\t\tstyle = elem.style;\n\n\t\tcomputed = computed || getStyles(elem);\n\n\t\t// getPropertyValue is needed for:\n\t\t//   .css('filter') (IE 9 only, trac-12537)\n\t\t//   .css('--customProperty) (gh-3144)\n\t\tif (computed) {\n\n\t\t\t// Support: IE <=9 - 11+\n\t\t\t// IE only supports `\"float\"` in `getPropertyValue`; in computed styles\n\t\t\t// it's only available as `\"cssFloat\"`. We no longer modify properties\n\t\t\t// sent to `.css()` apart from camelCasing, so we need to check both.\n\t\t\t// Normally, this would create difference in behavior: if\n\t\t\t// `getPropertyValue` returns an empty string, the value returned\n\t\t\t// by `.css()` would be `undefined`. This is usually the case for\n\t\t\t// disconnected elements. However, in IE even disconnected elements\n\t\t\t// with no styles return `\"none\"` for `getPropertyValue( \"float\" )`\n\t\t\tret = computed.getPropertyValue(name) || computed[name];\n\n\t\t\tif (isCustomProp && ret) {\n\n\t\t\t\t// Support: Firefox 105+, Chrome <=105+\n\t\t\t\t// Spec requires trimming whitespace for custom properties (gh-4926).\n\t\t\t\t// Firefox only trims leading whitespace. Chrome just collapses\n\t\t\t\t// both leading & trailing whitespace to a single space.\n\t\t\t\t//\n\t\t\t\t// Fall back to `undefined` if empty string returned.\n\t\t\t\t// This collapses a missing definition with property defined\n\t\t\t\t// and set to an empty string but there's no standard API\n\t\t\t\t// allowing us to differentiate them without a performance penalty\n\t\t\t\t// and returning `undefined` aligns with older jQuery.\n\t\t\t\t//\n\t\t\t\t// rtrimCSS treats U+000D CARRIAGE RETURN and U+000C FORM FEED\n\t\t\t\t// as whitespace while CSS does not, but this is not a problem\n\t\t\t\t// because CSS preprocessing replaces them with U+000A LINE FEED\n\t\t\t\t// (which *is* CSS whitespace)\n\t\t\t\t// https://www.w3.org/TR/css-syntax-3/#input-preprocessing\n\t\t\t\tret = ret.replace(rtrimCSS, \"$1\") || undefined;\n\t\t\t}\n\n\t\t\tif (ret === \"\" && !isAttached(elem)) {\n\t\t\t\tret = jQuery.style(elem, name);\n\t\t\t}\n\n\t\t\t// A tribute to the \"awesome hack by Dean Edwards\"\n\t\t\t// Android Browser returns percentage for some values,\n\t\t\t// but width seems to be reliably pixels.\n\t\t\t// This is against the CSSOM draft spec:\n\t\t\t// https://drafts.csswg.org/cssom/#resolved-values\n\t\t\tif (!support.pixelBoxStyles() && rnumnonpx.test(ret) && rboxStyle.test(name)) {\n\n\t\t\t\t// Remember the original values\n\t\t\t\twidth = style.width;\n\t\t\t\tminWidth = style.minWidth;\n\t\t\t\tmaxWidth = style.maxWidth;\n\n\t\t\t\t// Put in the new values to get a computed value out\n\t\t\t\tstyle.minWidth = style.maxWidth = style.width = ret;\n\t\t\t\tret = computed.width;\n\n\t\t\t\t// Revert the changed values\n\t\t\t\tstyle.width = width;\n\t\t\t\tstyle.minWidth = minWidth;\n\t\t\t\tstyle.maxWidth = maxWidth;\n\t\t\t}\n\t\t}\n\n\t\treturn ret !== undefined ?\n\n\t\t\t// Support: IE <=9 - 11 only\n\t\t\t// IE returns zIndex value as an integer.\n\t\t\tret + \"\" :\n\t\t\tret;\n\t}\n\n\n\tfunction addGetHookIf(conditionFn, hookFn) {\n\n\t\t// Define the hook, we'll check on the first run if it's really needed.\n\t\treturn {\n\t\t\tget: function () {\n\t\t\t\tif (conditionFn()) {\n\n\t\t\t\t\t// Hook not needed (or it's not possible to use it due\n\t\t\t\t\t// to missing dependency), remove it.\n\t\t\t\t\tdelete this.get;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Hook needed; redefine it so that the support test is not executed again.\n\t\t\t\treturn (this.get = hookFn).apply(this, arguments);\n\t\t\t}\n\t\t};\n\t}\n\n\n\tvar cssPrefixes = [\"Webkit\", \"Moz\", \"ms\"],\n\t\temptyStyle = document.createElement(\"div\").style,\n\t\tvendorProps = {};\n\n\t// Return a vendor-prefixed property or undefined\n\tfunction vendorPropName(name) {\n\n\t\t// Check for vendor prefixed names\n\t\tvar capName = name[0].toUpperCase() + name.slice(1),\n\t\t\ti = cssPrefixes.length;\n\n\t\twhile (i--) {\n\t\t\tname = cssPrefixes[i] + capName;\n\t\t\tif (name in emptyStyle) {\n\t\t\t\treturn name;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return a potentially-mapped jQuery.cssProps or vendor prefixed property\n\tfunction finalPropName(name) {\n\t\tvar final = jQuery.cssProps[name] || vendorProps[name];\n\n\t\tif (final) {\n\t\t\treturn final;\n\t\t}\n\t\tif (name in emptyStyle) {\n\t\t\treturn name;\n\t\t}\n\t\treturn vendorProps[name] = vendorPropName(name) || name;\n\t}\n\n\n\tvar\n\n\t\t// Swappable if display is none or starts with table\n\t\t// except \"table\", \"table-cell\", or \"table-caption\"\n\t\t// See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display\n\t\trdisplayswap = /^(none|table(?!-c[ea]).+)/,\n\t\tcssShow = { position: \"absolute\", visibility: \"hidden\", display: \"block\" },\n\t\tcssNormalTransform = {\n\t\t\tletterSpacing: \"0\",\n\t\t\tfontWeight: \"400\"\n\t\t};\n\n\tfunction setPositiveNumber(_elem, value, subtract) {\n\n\t\t// Any relative (+/-) values have already been\n\t\t// normalized at this point\n\t\tvar matches = rcssNum.exec(value);\n\t\treturn matches ?\n\n\t\t\t// Guard against undefined \"subtract\", e.g., when used as in cssHooks\n\t\t\tMath.max(0, matches[2] - (subtract || 0)) + (matches[3] || \"px\") :\n\t\t\tvalue;\n\t}\n\n\tfunction boxModelAdjustment(elem, dimension, box, isBorderBox, styles, computedVal) {\n\t\tvar i = dimension === \"width\" ? 1 : 0,\n\t\t\textra = 0,\n\t\t\tdelta = 0,\n\t\t\tmarginDelta = 0;\n\n\t\t// Adjustment may not be necessary\n\t\tif (box === (isBorderBox ? \"border\" : \"content\")) {\n\t\t\treturn 0;\n\t\t}\n\n\t\tfor (; i < 4; i += 2) {\n\n\t\t\t// Both box models exclude margin\n\t\t\t// Count margin delta separately to only add it after scroll gutter adjustment.\n\t\t\t// This is needed to make negative margins work with `outerHeight( true )` (gh-3982).\n\t\t\tif (box === \"margin\") {\n\t\t\t\tmarginDelta += jQuery.css(elem, box + cssExpand[i], true, styles);\n\t\t\t}\n\n\t\t\t// If we get here with a content-box, we're seeking \"padding\" or \"border\" or \"margin\"\n\t\t\tif (!isBorderBox) {\n\n\t\t\t\t// Add padding\n\t\t\t\tdelta += jQuery.css(elem, \"padding\" + cssExpand[i], true, styles);\n\n\t\t\t\t// For \"border\" or \"margin\", add border\n\t\t\t\tif (box !== \"padding\") {\n\t\t\t\t\tdelta += jQuery.css(elem, \"border\" + cssExpand[i] + \"Width\", true, styles);\n\n\t\t\t\t\t// But still keep track of it otherwise\n\t\t\t\t} else {\n\t\t\t\t\textra += jQuery.css(elem, \"border\" + cssExpand[i] + \"Width\", true, styles);\n\t\t\t\t}\n\n\t\t\t\t// If we get here with a border-box (content + padding + border), we're seeking \"content\" or\n\t\t\t\t// \"padding\" or \"margin\"\n\t\t\t} else {\n\n\t\t\t\t// For \"content\", subtract padding\n\t\t\t\tif (box === \"content\") {\n\t\t\t\t\tdelta -= jQuery.css(elem, \"padding\" + cssExpand[i], true, styles);\n\t\t\t\t}\n\n\t\t\t\t// For \"content\" or \"padding\", subtract border\n\t\t\t\tif (box !== \"margin\") {\n\t\t\t\t\tdelta -= jQuery.css(elem, \"border\" + cssExpand[i] + \"Width\", true, styles);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Account for positive content-box scroll gutter when requested by providing computedVal\n\t\tif (!isBorderBox && computedVal >= 0) {\n\n\t\t\t// offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border\n\t\t\t// Assuming integer scroll gutter, subtract the rest and round down\n\t\t\tdelta += Math.max(0, Math.ceil(\n\t\t\t\telem[\"offset\" + dimension[0].toUpperCase() + dimension.slice(1)] -\n\t\t\t\tcomputedVal -\n\t\t\t\tdelta -\n\t\t\t\textra -\n\t\t\t\t0.5\n\n\t\t\t\t// If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter\n\t\t\t\t// Use an explicit zero to avoid NaN (gh-3964)\n\t\t\t)) || 0;\n\t\t}\n\n\t\treturn delta + marginDelta;\n\t}\n\n\tfunction getWidthOrHeight(elem, dimension, extra) {\n\n\t\t// Start with computed style\n\t\tvar styles = getStyles(elem),\n\n\t\t\t// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322).\n\t\t\t// Fake content-box until we know it's needed to know the true value.\n\t\t\tboxSizingNeeded = !support.boxSizingReliable() || extra,\n\t\t\tisBorderBox = boxSizingNeeded &&\n\t\t\t\tjQuery.css(elem, \"boxSizing\", false, styles) === \"border-box\",\n\t\t\tvalueIsBorderBox = isBorderBox,\n\n\t\t\tval = curCSS(elem, dimension, styles),\n\t\t\toffsetProp = \"offset\" + dimension[0].toUpperCase() + dimension.slice(1);\n\n\t\t// Support: Firefox <=54\n\t\t// Return a confounding non-pixel value or feign ignorance, as appropriate.\n\t\tif (rnumnonpx.test(val)) {\n\t\t\tif (!extra) {\n\t\t\t\treturn val;\n\t\t\t}\n\t\t\tval = \"auto\";\n\t\t}\n\n\n\t\t// Support: IE 9 - 11 only\n\t\t// Use offsetWidth/offsetHeight for when box sizing is unreliable.\n\t\t// In those cases, the computed value can be trusted to be border-box.\n\t\tif ((!support.boxSizingReliable() && isBorderBox ||\n\n\t\t\t// Support: IE 10 - 11+, Edge 15 - 18+\n\t\t\t// IE/Edge misreport `getComputedStyle` of table rows with width/height\n\t\t\t// set in CSS while `offset*` properties report correct values.\n\t\t\t// Interestingly, in some cases IE 9 doesn't suffer from this issue.\n\t\t\t!support.reliableTrDimensions() && nodeName(elem, \"tr\") ||\n\n\t\t\t// Fall back to offsetWidth/offsetHeight when value is \"auto\"\n\t\t\t// This happens for inline elements with no explicit setting (gh-3571)\n\t\t\tval === \"auto\" ||\n\n\t\t\t// Support: Android <=4.1 - 4.3 only\n\t\t\t// Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602)\n\t\t\t!parseFloat(val) && jQuery.css(elem, \"display\", false, styles) === \"inline\") &&\n\n\t\t\t// Make sure the element is visible & connected\n\t\t\telem.getClientRects().length) {\n\n\t\t\tisBorderBox = jQuery.css(elem, \"boxSizing\", false, styles) === \"border-box\";\n\n\t\t\t// Where available, offsetWidth/offsetHeight approximate border box dimensions.\n\t\t\t// Where not available (e.g., SVG), assume unreliable box-sizing and interpret the\n\t\t\t// retrieved value as a content box dimension.\n\t\t\tvalueIsBorderBox = offsetProp in elem;\n\t\t\tif (valueIsBorderBox) {\n\t\t\t\tval = elem[offsetProp];\n\t\t\t}\n\t\t}\n\n\t\t// Normalize \"\" and auto\n\t\tval = parseFloat(val) || 0;\n\n\t\t// Adjust for the element's box model\n\t\treturn (val +\n\t\t\tboxModelAdjustment(\n\t\t\t\telem,\n\t\t\t\tdimension,\n\t\t\t\textra || (isBorderBox ? \"border\" : \"content\"),\n\t\t\t\tvalueIsBorderBox,\n\t\t\t\tstyles,\n\n\t\t\t\t// Provide the current computed size to request scroll gutter calculation (gh-3589)\n\t\t\t\tval\n\t\t\t)\n\t\t) + \"px\";\n\t}\n\n\tjQuery.extend({\n\n\t\t// Add in style property hooks for overriding the default\n\t\t// behavior of getting and setting a style property\n\t\tcssHooks: {\n\t\t\topacity: {\n\t\t\t\tget: function (elem, computed) {\n\t\t\t\t\tif (computed) {\n\n\t\t\t\t\t\t// We should always get a number back from opacity\n\t\t\t\t\t\tvar ret = curCSS(elem, \"opacity\");\n\t\t\t\t\t\treturn ret === \"\" ? \"1\" : ret;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t// Don't automatically add \"px\" to these possibly-unitless properties\n\t\tcssNumber: {\n\t\t\tanimationIterationCount: true,\n\t\t\taspectRatio: true,\n\t\t\tborderImageSlice: true,\n\t\t\tcolumnCount: true,\n\t\t\tflexGrow: true,\n\t\t\tflexShrink: true,\n\t\t\tfontWeight: true,\n\t\t\tgridArea: true,\n\t\t\tgridColumn: true,\n\t\t\tgridColumnEnd: true,\n\t\t\tgridColumnStart: true,\n\t\t\tgridRow: true,\n\t\t\tgridRowEnd: true,\n\t\t\tgridRowStart: true,\n\t\t\tlineHeight: true,\n\t\t\topacity: true,\n\t\t\torder: true,\n\t\t\torphans: true,\n\t\t\tscale: true,\n\t\t\twidows: true,\n\t\t\tzIndex: true,\n\t\t\tzoom: true,\n\n\t\t\t// SVG-related\n\t\t\tfillOpacity: true,\n\t\t\tfloodOpacity: true,\n\t\t\tstopOpacity: true,\n\t\t\tstrokeMiterlimit: true,\n\t\t\tstrokeOpacity: true\n\t\t},\n\n\t\t// Add in properties whose names you wish to fix before\n\t\t// setting or getting the value\n\t\tcssProps: {},\n\n\t\t// Get and set the style property on a DOM Node\n\t\tstyle: function (elem, name, value, extra) {\n\n\t\t\t// Don't set styles on text and comment nodes\n\t\t\tif (!elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Make sure that we're working with the right name\n\t\t\tvar ret, type, hooks,\n\t\t\t\torigName = camelCase(name),\n\t\t\t\tisCustomProp = rcustomProp.test(name),\n\t\t\t\tstyle = elem.style;\n\n\t\t\t// Make sure that we're working with the right name. We don't\n\t\t\t// want to query the value if it is a CSS custom property\n\t\t\t// since they are user-defined.\n\t\t\tif (!isCustomProp) {\n\t\t\t\tname = finalPropName(origName);\n\t\t\t}\n\n\t\t\t// Gets hook for the prefixed version, then unprefixed version\n\t\t\thooks = jQuery.cssHooks[name] || jQuery.cssHooks[origName];\n\n\t\t\t// Check if we're setting a value\n\t\t\tif (value !== undefined) {\n\t\t\t\ttype = typeof value;\n\n\t\t\t\t// Convert \"+=\" or \"-=\" to relative numbers (trac-7345)\n\t\t\t\tif (type === \"string\" && (ret = rcssNum.exec(value)) && ret[1]) {\n\t\t\t\t\tvalue = adjustCSS(elem, name, ret);\n\n\t\t\t\t\t// Fixes bug trac-9237\n\t\t\t\t\ttype = \"number\";\n\t\t\t\t}\n\n\t\t\t\t// Make sure that null and NaN values aren't set (trac-7116)\n\t\t\t\tif (value == null || value !== value) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// If a number was passed in, add the unit (except for certain CSS properties)\n\t\t\t\t// The isCustomProp check can be removed in jQuery 4.0 when we only auto-append\n\t\t\t\t// \"px\" to a few hardcoded values.\n\t\t\t\tif (type === \"number\" && !isCustomProp) {\n\t\t\t\t\tvalue += ret && ret[3] || (jQuery.cssNumber[origName] ? \"\" : \"px\");\n\t\t\t\t}\n\n\t\t\t\t// background-* props affect original clone's values\n\t\t\t\tif (!support.clearCloneStyle && value === \"\" && name.indexOf(\"background\") === 0) {\n\t\t\t\t\tstyle[name] = \"inherit\";\n\t\t\t\t}\n\n\t\t\t\t// If a hook was provided, use that value, otherwise just set the specified value\n\t\t\t\tif (!hooks || !(\"set\" in hooks) ||\n\t\t\t\t\t(value = hooks.set(elem, value, extra)) !== undefined) {\n\n\t\t\t\t\tif (isCustomProp) {\n\t\t\t\t\t\tstyle.setProperty(name, value);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tstyle[name] = value;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\t// If a hook was provided get the non-computed value from there\n\t\t\t\tif (hooks && \"get\" in hooks &&\n\t\t\t\t\t(ret = hooks.get(elem, false, extra)) !== undefined) {\n\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\n\t\t\t\t// Otherwise just get the value from the style object\n\t\t\t\treturn style[name];\n\t\t\t}\n\t\t},\n\n\t\tcss: function (elem, name, extra, styles) {\n\t\t\tvar val, num, hooks,\n\t\t\t\torigName = camelCase(name),\n\t\t\t\tisCustomProp = rcustomProp.test(name);\n\n\t\t\t// Make sure that we're working with the right name. We don't\n\t\t\t// want to modify the value if it is a CSS custom property\n\t\t\t// since they are user-defined.\n\t\t\tif (!isCustomProp) {\n\t\t\t\tname = finalPropName(origName);\n\t\t\t}\n\n\t\t\t// Try prefixed name followed by the unprefixed name\n\t\t\thooks = jQuery.cssHooks[name] || jQuery.cssHooks[origName];\n\n\t\t\t// If a hook was provided get the computed value from there\n\t\t\tif (hooks && \"get\" in hooks) {\n\t\t\t\tval = hooks.get(elem, true, extra);\n\t\t\t}\n\n\t\t\t// Otherwise, if a way to get the computed value exists, use that\n\t\t\tif (val === undefined) {\n\t\t\t\tval = curCSS(elem, name, styles);\n\t\t\t}\n\n\t\t\t// Convert \"normal\" to computed value\n\t\t\tif (val === \"normal\" && name in cssNormalTransform) {\n\t\t\t\tval = cssNormalTransform[name];\n\t\t\t}\n\n\t\t\t// Make numeric if forced or a qualifier was provided and val looks numeric\n\t\t\tif (extra === \"\" || extra) {\n\t\t\t\tnum = parseFloat(val);\n\t\t\t\treturn extra === true || isFinite(num) ? num || 0 : val;\n\t\t\t}\n\n\t\t\treturn val;\n\t\t}\n\t});\n\n\tjQuery.each([\"height\", \"width\"], function (_i, dimension) {\n\t\tjQuery.cssHooks[dimension] = {\n\t\t\tget: function (elem, computed, extra) {\n\t\t\t\tif (computed) {\n\n\t\t\t\t\t// Certain elements can have dimension info if we invisibly show them\n\t\t\t\t\t// but it must have a current display style that would benefit\n\t\t\t\t\treturn rdisplayswap.test(jQuery.css(elem, \"display\")) &&\n\n\t\t\t\t\t\t// Support: Safari 8+\n\t\t\t\t\t\t// Table columns in Safari have non-zero offsetWidth & zero\n\t\t\t\t\t\t// getBoundingClientRect().width unless display is changed.\n\t\t\t\t\t\t// Support: IE <=11 only\n\t\t\t\t\t\t// Running getBoundingClientRect on a disconnected node\n\t\t\t\t\t\t// in IE throws an error.\n\t\t\t\t\t\t(!elem.getClientRects().length || !elem.getBoundingClientRect().width) ?\n\t\t\t\t\t\tswap(elem, cssShow, function () {\n\t\t\t\t\t\t\treturn getWidthOrHeight(elem, dimension, extra);\n\t\t\t\t\t\t}) :\n\t\t\t\t\t\tgetWidthOrHeight(elem, dimension, extra);\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tset: function (elem, value, extra) {\n\t\t\t\tvar matches,\n\t\t\t\t\tstyles = getStyles(elem),\n\n\t\t\t\t\t// Only read styles.position if the test has a chance to fail\n\t\t\t\t\t// to avoid forcing a reflow.\n\t\t\t\t\tscrollboxSizeBuggy = !support.scrollboxSize() &&\n\t\t\t\t\t\tstyles.position === \"absolute\",\n\n\t\t\t\t\t// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991)\n\t\t\t\t\tboxSizingNeeded = scrollboxSizeBuggy || extra,\n\t\t\t\t\tisBorderBox = boxSizingNeeded &&\n\t\t\t\t\t\tjQuery.css(elem, \"boxSizing\", false, styles) === \"border-box\",\n\t\t\t\t\tsubtract = extra ?\n\t\t\t\t\t\tboxModelAdjustment(\n\t\t\t\t\t\t\telem,\n\t\t\t\t\t\t\tdimension,\n\t\t\t\t\t\t\textra,\n\t\t\t\t\t\t\tisBorderBox,\n\t\t\t\t\t\t\tstyles\n\t\t\t\t\t\t) :\n\t\t\t\t\t\t0;\n\n\t\t\t\t// Account for unreliable border-box dimensions by comparing offset* to computed and\n\t\t\t\t// faking a content-box to get border and padding (gh-3699)\n\t\t\t\tif (isBorderBox && scrollboxSizeBuggy) {\n\t\t\t\t\tsubtract -= Math.ceil(\n\t\t\t\t\t\telem[\"offset\" + dimension[0].toUpperCase() + dimension.slice(1)] -\n\t\t\t\t\t\tparseFloat(styles[dimension]) -\n\t\t\t\t\t\tboxModelAdjustment(elem, dimension, \"border\", false, styles) -\n\t\t\t\t\t\t0.5\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\t// Convert to pixels if value adjustment is needed\n\t\t\t\tif (subtract && (matches = rcssNum.exec(value)) &&\n\t\t\t\t\t(matches[3] || \"px\") !== \"px\") {\n\n\t\t\t\t\telem.style[dimension] = value;\n\t\t\t\t\tvalue = jQuery.css(elem, dimension);\n\t\t\t\t}\n\n\t\t\t\treturn setPositiveNumber(elem, value, subtract);\n\t\t\t}\n\t\t};\n\t});\n\n\tjQuery.cssHooks.marginLeft = addGetHookIf(support.reliableMarginLeft,\n\t\tfunction (elem, computed) {\n\t\t\tif (computed) {\n\t\t\t\treturn (parseFloat(curCSS(elem, \"marginLeft\")) ||\n\t\t\t\t\telem.getBoundingClientRect().left -\n\t\t\t\t\tswap(elem, { marginLeft: 0 }, function () {\n\t\t\t\t\t\treturn elem.getBoundingClientRect().left;\n\t\t\t\t\t})\n\t\t\t\t) + \"px\";\n\t\t\t}\n\t\t}\n\t);\n\n\t// These hooks are used by animate to expand properties\n\tjQuery.each({\n\t\tmargin: \"\",\n\t\tpadding: \"\",\n\t\tborder: \"Width\"\n\t}, function (prefix, suffix) {\n\t\tjQuery.cssHooks[prefix + suffix] = {\n\t\t\texpand: function (value) {\n\t\t\t\tvar i = 0,\n\t\t\t\t\texpanded = {},\n\n\t\t\t\t\t// Assumes a single number if not a string\n\t\t\t\t\tparts = typeof value === \"string\" ? value.split(\" \") : [value];\n\n\t\t\t\tfor (; i < 4; i++) {\n\t\t\t\t\texpanded[prefix + cssExpand[i] + suffix] =\n\t\t\t\t\t\tparts[i] || parts[i - 2] || parts[0];\n\t\t\t\t}\n\n\t\t\t\treturn expanded;\n\t\t\t}\n\t\t};\n\n\t\tif (prefix !== \"margin\") {\n\t\t\tjQuery.cssHooks[prefix + suffix].set = setPositiveNumber;\n\t\t}\n\t});\n\n\tjQuery.fn.extend({\n\t\tcss: function (name, value) {\n\t\t\treturn access(this, function (elem, name, value) {\n\t\t\t\tvar styles, len,\n\t\t\t\t\tmap = {},\n\t\t\t\t\ti = 0;\n\n\t\t\t\tif (Array.isArray(name)) {\n\t\t\t\t\tstyles = getStyles(elem);\n\t\t\t\t\tlen = name.length;\n\n\t\t\t\t\tfor (; i < len; i++) {\n\t\t\t\t\t\tmap[name[i]] = jQuery.css(elem, name[i], false, styles);\n\t\t\t\t\t}\n\n\t\t\t\t\treturn map;\n\t\t\t\t}\n\n\t\t\t\treturn value !== undefined ?\n\t\t\t\t\tjQuery.style(elem, name, value) :\n\t\t\t\t\tjQuery.css(elem, name);\n\t\t\t}, name, value, arguments.length > 1);\n\t\t}\n\t});\n\n\n\tfunction Tween(elem, options, prop, end, easing) {\n\t\treturn new Tween.prototype.init(elem, options, prop, end, easing);\n\t}\n\tjQuery.Tween = Tween;\n\n\tTween.prototype = {\n\t\tconstructor: Tween,\n\t\tinit: function (elem, options, prop, end, easing, unit) {\n\t\t\tthis.elem = elem;\n\t\t\tthis.prop = prop;\n\t\t\tthis.easing = easing || jQuery.easing._default;\n\t\t\tthis.options = options;\n\t\t\tthis.start = this.now = this.cur();\n\t\t\tthis.end = end;\n\t\t\tthis.unit = unit || (jQuery.cssNumber[prop] ? \"\" : \"px\");\n\t\t},\n\t\tcur: function () {\n\t\t\tvar hooks = Tween.propHooks[this.prop];\n\n\t\t\treturn hooks && hooks.get ?\n\t\t\t\thooks.get(this) :\n\t\t\t\tTween.propHooks._default.get(this);\n\t\t},\n\t\trun: function (percent) {\n\t\t\tvar eased,\n\t\t\t\thooks = Tween.propHooks[this.prop];\n\n\t\t\tif (this.options.duration) {\n\t\t\t\tthis.pos = eased = jQuery.easing[this.easing](\n\t\t\t\t\tpercent, this.options.duration * percent, 0, 1, this.options.duration\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tthis.pos = eased = percent;\n\t\t\t}\n\t\t\tthis.now = (this.end - this.start) * eased + this.start;\n\n\t\t\tif (this.options.step) {\n\t\t\t\tthis.options.step.call(this.elem, this.now, this);\n\t\t\t}\n\n\t\t\tif (hooks && hooks.set) {\n\t\t\t\thooks.set(this);\n\t\t\t} else {\n\t\t\t\tTween.propHooks._default.set(this);\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t};\n\n\tTween.prototype.init.prototype = Tween.prototype;\n\n\tTween.propHooks = {\n\t\t_default: {\n\t\t\tget: function (tween) {\n\t\t\t\tvar result;\n\n\t\t\t\t// Use a property on the element directly when it is not a DOM element,\n\t\t\t\t// or when there is no matching style property that exists.\n\t\t\t\tif (tween.elem.nodeType !== 1 ||\n\t\t\t\t\ttween.elem[tween.prop] != null && tween.elem.style[tween.prop] == null) {\n\t\t\t\t\treturn tween.elem[tween.prop];\n\t\t\t\t}\n\n\t\t\t\t// Passing an empty string as a 3rd parameter to .css will automatically\n\t\t\t\t// attempt a parseFloat and fallback to a string if the parse fails.\n\t\t\t\t// Simple values such as \"10px\" are parsed to Float;\n\t\t\t\t// complex values such as \"rotate(1rad)\" are returned as-is.\n\t\t\t\tresult = jQuery.css(tween.elem, tween.prop, \"\");\n\n\t\t\t\t// Empty strings, null, undefined and \"auto\" are converted to 0.\n\t\t\t\treturn !result || result === \"auto\" ? 0 : result;\n\t\t\t},\n\t\t\tset: function (tween) {\n\n\t\t\t\t// Use step hook for back compat.\n\t\t\t\t// Use cssHook if its there.\n\t\t\t\t// Use .style if available and use plain properties where available.\n\t\t\t\tif (jQuery.fx.step[tween.prop]) {\n\t\t\t\t\tjQuery.fx.step[tween.prop](tween);\n\t\t\t\t} else if (tween.elem.nodeType === 1 && (\n\t\t\t\t\tjQuery.cssHooks[tween.prop] ||\n\t\t\t\t\ttween.elem.style[finalPropName(tween.prop)] != null)) {\n\t\t\t\t\tjQuery.style(tween.elem, tween.prop, tween.now + tween.unit);\n\t\t\t\t} else {\n\t\t\t\t\ttween.elem[tween.prop] = tween.now;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t// Support: IE <=9 only\n\t// Panic based approach to setting things on disconnected nodes\n\tTween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {\n\t\tset: function (tween) {\n\t\t\tif (tween.elem.nodeType && tween.elem.parentNode) {\n\t\t\t\ttween.elem[tween.prop] = tween.now;\n\t\t\t}\n\t\t}\n\t};\n\n\tjQuery.easing = {\n\t\tlinear: function (p) {\n\t\t\treturn p;\n\t\t},\n\t\tswing: function (p) {\n\t\t\treturn 0.5 - Math.cos(p * Math.PI) / 2;\n\t\t},\n\t\t_default: \"swing\"\n\t};\n\n\tjQuery.fx = Tween.prototype.init;\n\n\t// Back compat <1.8 extension point\n\tjQuery.fx.step = {};\n\n\n\n\n\tvar\n\t\tfxNow, inProgress,\n\t\trfxtypes = /^(?:toggle|show|hide)$/,\n\t\trrun = /queueHooks$/;\n\n\tfunction schedule() {\n\t\tif (inProgress) {\n\t\t\tif (document.hidden === false && window.requestAnimationFrame) {\n\t\t\t\twindow.requestAnimationFrame(schedule);\n\t\t\t} else {\n\t\t\t\twindow.setTimeout(schedule, jQuery.fx.interval);\n\t\t\t}\n\n\t\t\tjQuery.fx.tick();\n\t\t}\n\t}\n\n\t// Animations created synchronously will run synchronously\n\tfunction createFxNow() {\n\t\twindow.setTimeout(function () {\n\t\t\tfxNow = undefined;\n\t\t});\n\t\treturn (fxNow = Date.now());\n\t}\n\n\t// Generate parameters to create a standard animation\n\tfunction genFx(type, includeWidth) {\n\t\tvar which,\n\t\t\ti = 0,\n\t\t\tattrs = { height: type };\n\n\t\t// If we include width, step value is 1 to do all cssExpand values,\n\t\t// otherwise step value is 2 to skip over Left and Right\n\t\tincludeWidth = includeWidth ? 1 : 0;\n\t\tfor (; i < 4; i += 2 - includeWidth) {\n\t\t\twhich = cssExpand[i];\n\t\t\tattrs[\"margin\" + which] = attrs[\"padding\" + which] = type;\n\t\t}\n\n\t\tif (includeWidth) {\n\t\t\tattrs.opacity = attrs.width = type;\n\t\t}\n\n\t\treturn attrs;\n\t}\n\n\tfunction createTween(value, prop, animation) {\n\t\tvar tween,\n\t\t\tcollection = (Animation.tweeners[prop] || []).concat(Animation.tweeners[\"*\"]),\n\t\t\tindex = 0,\n\t\t\tlength = collection.length;\n\t\tfor (; index < length; index++) {\n\t\t\tif ((tween = collection[index].call(animation, prop, value))) {\n\n\t\t\t\t// We're done with this property\n\t\t\t\treturn tween;\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction defaultPrefilter(elem, props, opts) {\n\t\tvar prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display,\n\t\t\tisBox = \"width\" in props || \"height\" in props,\n\t\t\tanim = this,\n\t\t\torig = {},\n\t\t\tstyle = elem.style,\n\t\t\thidden = elem.nodeType && isHiddenWithinTree(elem),\n\t\t\tdataShow = dataPriv.get(elem, \"fxshow\");\n\n\t\t// Queue-skipping animations hijack the fx hooks\n\t\tif (!opts.queue) {\n\t\t\thooks = jQuery._queueHooks(elem, \"fx\");\n\t\t\tif (hooks.unqueued == null) {\n\t\t\t\thooks.unqueued = 0;\n\t\t\t\toldfire = hooks.empty.fire;\n\t\t\t\thooks.empty.fire = function () {\n\t\t\t\t\tif (!hooks.unqueued) {\n\t\t\t\t\t\toldfire();\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t\thooks.unqueued++;\n\n\t\t\tanim.always(function () {\n\n\t\t\t\t// Ensure the complete handler is called before this completes\n\t\t\t\tanim.always(function () {\n\t\t\t\t\thooks.unqueued--;\n\t\t\t\t\tif (!jQuery.queue(elem, \"fx\").length) {\n\t\t\t\t\t\thooks.empty.fire();\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\n\t\t// Detect show/hide animations\n\t\tfor (prop in props) {\n\t\t\tvalue = props[prop];\n\t\t\tif (rfxtypes.test(value)) {\n\t\t\t\tdelete props[prop];\n\t\t\t\ttoggle = toggle || value === \"toggle\";\n\t\t\t\tif (value === (hidden ? \"hide\" : \"show\")) {\n\n\t\t\t\t\t// Pretend to be hidden if this is a \"show\" and\n\t\t\t\t\t// there is still data from a stopped show/hide\n\t\t\t\t\tif (value === \"show\" && dataShow && dataShow[prop] !== undefined) {\n\t\t\t\t\t\thidden = true;\n\n\t\t\t\t\t\t// Ignore all other no-op show/hide data\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\torig[prop] = dataShow && dataShow[prop] || jQuery.style(elem, prop);\n\t\t\t}\n\t\t}\n\n\t\t// Bail out if this is a no-op like .hide().hide()\n\t\tpropTween = !jQuery.isEmptyObject(props);\n\t\tif (!propTween && jQuery.isEmptyObject(orig)) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Restrict \"overflow\" and \"display\" styles during box animations\n\t\tif (isBox && elem.nodeType === 1) {\n\n\t\t\t// Support: IE <=9 - 11, Edge 12 - 15\n\t\t\t// Record all 3 overflow attributes because IE does not infer the shorthand\n\t\t\t// from identically-valued overflowX and overflowY and Edge just mirrors\n\t\t\t// the overflowX value there.\n\t\t\topts.overflow = [style.overflow, style.overflowX, style.overflowY];\n\n\t\t\t// Identify a display type, preferring old show/hide data over the CSS cascade\n\t\t\trestoreDisplay = dataShow && dataShow.display;\n\t\t\tif (restoreDisplay == null) {\n\t\t\t\trestoreDisplay = dataPriv.get(elem, \"display\");\n\t\t\t}\n\t\t\tdisplay = jQuery.css(elem, \"display\");\n\t\t\tif (display === \"none\") {\n\t\t\t\tif (restoreDisplay) {\n\t\t\t\t\tdisplay = restoreDisplay;\n\t\t\t\t} else {\n\n\t\t\t\t\t// Get nonempty value(s) by temporarily forcing visibility\n\t\t\t\t\tshowHide([elem], true);\n\t\t\t\t\trestoreDisplay = elem.style.display || restoreDisplay;\n\t\t\t\t\tdisplay = jQuery.css(elem, \"display\");\n\t\t\t\t\tshowHide([elem]);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Animate inline elements as inline-block\n\t\t\tif (display === \"inline\" || display === \"inline-block\" && restoreDisplay != null) {\n\t\t\t\tif (jQuery.css(elem, \"float\") === \"none\") {\n\n\t\t\t\t\t// Restore the original display value at the end of pure show/hide animations\n\t\t\t\t\tif (!propTween) {\n\t\t\t\t\t\tanim.done(function () {\n\t\t\t\t\t\t\tstyle.display = restoreDisplay;\n\t\t\t\t\t\t});\n\t\t\t\t\t\tif (restoreDisplay == null) {\n\t\t\t\t\t\t\tdisplay = style.display;\n\t\t\t\t\t\t\trestoreDisplay = display === \"none\" ? \"\" : display;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tstyle.display = \"inline-block\";\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (opts.overflow) {\n\t\t\tstyle.overflow = \"hidden\";\n\t\t\tanim.always(function () {\n\t\t\t\tstyle.overflow = opts.overflow[0];\n\t\t\t\tstyle.overflowX = opts.overflow[1];\n\t\t\t\tstyle.overflowY = opts.overflow[2];\n\t\t\t});\n\t\t}\n\n\t\t// Implement show/hide animations\n\t\tpropTween = false;\n\t\tfor (prop in orig) {\n\n\t\t\t// General show/hide setup for this element animation\n\t\t\tif (!propTween) {\n\t\t\t\tif (dataShow) {\n\t\t\t\t\tif (\"hidden\" in dataShow) {\n\t\t\t\t\t\thidden = dataShow.hidden;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tdataShow = dataPriv.access(elem, \"fxshow\", { display: restoreDisplay });\n\t\t\t\t}\n\n\t\t\t\t// Store hidden/visible for toggle so `.stop().toggle()` \"reverses\"\n\t\t\t\tif (toggle) {\n\t\t\t\t\tdataShow.hidden = !hidden;\n\t\t\t\t}\n\n\t\t\t\t// Show elements before animating them\n\t\t\t\tif (hidden) {\n\t\t\t\t\tshowHide([elem], true);\n\t\t\t\t}\n\n\t\t\t\t/* eslint-disable no-loop-func */\n\n\t\t\t\tanim.done(function () {\n\n\t\t\t\t\t/* eslint-enable no-loop-func */\n\n\t\t\t\t\t// The final step of a \"hide\" animation is actually hiding the element\n\t\t\t\t\tif (!hidden) {\n\t\t\t\t\t\tshowHide([elem]);\n\t\t\t\t\t}\n\t\t\t\t\tdataPriv.remove(elem, \"fxshow\");\n\t\t\t\t\tfor (prop in orig) {\n\t\t\t\t\t\tjQuery.style(elem, prop, orig[prop]);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// Per-property setup\n\t\t\tpropTween = createTween(hidden ? dataShow[prop] : 0, prop, anim);\n\t\t\tif (!(prop in dataShow)) {\n\t\t\t\tdataShow[prop] = propTween.start;\n\t\t\t\tif (hidden) {\n\t\t\t\t\tpropTween.end = propTween.start;\n\t\t\t\t\tpropTween.start = 0;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction propFilter(props, specialEasing) {\n\t\tvar index, name, easing, value, hooks;\n\n\t\t// camelCase, specialEasing and expand cssHook pass\n\t\tfor (index in props) {\n\t\t\tname = camelCase(index);\n\t\t\teasing = specialEasing[name];\n\t\t\tvalue = props[index];\n\t\t\tif (Array.isArray(value)) {\n\t\t\t\teasing = value[1];\n\t\t\t\tvalue = props[index] = value[0];\n\t\t\t}\n\n\t\t\tif (index !== name) {\n\t\t\t\tprops[name] = value;\n\t\t\t\tdelete props[index];\n\t\t\t}\n\n\t\t\thooks = jQuery.cssHooks[name];\n\t\t\tif (hooks && \"expand\" in hooks) {\n\t\t\t\tvalue = hooks.expand(value);\n\t\t\t\tdelete props[name];\n\n\t\t\t\t// Not quite $.extend, this won't overwrite existing keys.\n\t\t\t\t// Reusing 'index' because we have the correct \"name\"\n\t\t\t\tfor (index in value) {\n\t\t\t\t\tif (!(index in props)) {\n\t\t\t\t\t\tprops[index] = value[index];\n\t\t\t\t\t\tspecialEasing[index] = easing;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tspecialEasing[name] = easing;\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction Animation(elem, properties, options) {\n\t\tvar result,\n\t\t\tstopped,\n\t\t\tindex = 0,\n\t\t\tlength = Animation.prefilters.length,\n\t\t\tdeferred = jQuery.Deferred().always(function () {\n\n\t\t\t\t// Don't match elem in the :animated selector\n\t\t\t\tdelete tick.elem;\n\t\t\t}),\n\t\t\ttick = function () {\n\t\t\t\tif (stopped) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tvar currentTime = fxNow || createFxNow(),\n\t\t\t\t\tremaining = Math.max(0, animation.startTime + animation.duration - currentTime),\n\n\t\t\t\t\t// Support: Android 2.3 only\n\t\t\t\t\t// Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (trac-12497)\n\t\t\t\t\ttemp = remaining / animation.duration || 0,\n\t\t\t\t\tpercent = 1 - temp,\n\t\t\t\t\tindex = 0,\n\t\t\t\t\tlength = animation.tweens.length;\n\n\t\t\t\tfor (; index < length; index++) {\n\t\t\t\t\tanimation.tweens[index].run(percent);\n\t\t\t\t}\n\n\t\t\t\tdeferred.notifyWith(elem, [animation, percent, remaining]);\n\n\t\t\t\t// If there's more to do, yield\n\t\t\t\tif (percent < 1 && length) {\n\t\t\t\t\treturn remaining;\n\t\t\t\t}\n\n\t\t\t\t// If this was an empty animation, synthesize a final progress notification\n\t\t\t\tif (!length) {\n\t\t\t\t\tdeferred.notifyWith(elem, [animation, 1, 0]);\n\t\t\t\t}\n\n\t\t\t\t// Resolve the animation and report its conclusion\n\t\t\t\tdeferred.resolveWith(elem, [animation]);\n\t\t\t\treturn false;\n\t\t\t},\n\t\t\tanimation = deferred.promise({\n\t\t\t\telem: elem,\n\t\t\t\tprops: jQuery.extend({}, properties),\n\t\t\t\topts: jQuery.extend(true, {\n\t\t\t\t\tspecialEasing: {},\n\t\t\t\t\teasing: jQuery.easing._default\n\t\t\t\t}, options),\n\t\t\t\toriginalProperties: properties,\n\t\t\t\toriginalOptions: options,\n\t\t\t\tstartTime: fxNow || createFxNow(),\n\t\t\t\tduration: options.duration,\n\t\t\t\ttweens: [],\n\t\t\t\tcreateTween: function (prop, end) {\n\t\t\t\t\tvar tween = jQuery.Tween(elem, animation.opts, prop, end,\n\t\t\t\t\t\tanimation.opts.specialEasing[prop] || animation.opts.easing);\n\t\t\t\t\tanimation.tweens.push(tween);\n\t\t\t\t\treturn tween;\n\t\t\t\t},\n\t\t\t\tstop: function (gotoEnd) {\n\t\t\t\t\tvar index = 0,\n\n\t\t\t\t\t\t// If we are going to the end, we want to run all the tweens\n\t\t\t\t\t\t// otherwise we skip this part\n\t\t\t\t\t\tlength = gotoEnd ? animation.tweens.length : 0;\n\t\t\t\t\tif (stopped) {\n\t\t\t\t\t\treturn this;\n\t\t\t\t\t}\n\t\t\t\t\tstopped = true;\n\t\t\t\t\tfor (; index < length; index++) {\n\t\t\t\t\t\tanimation.tweens[index].run(1);\n\t\t\t\t\t}\n\n\t\t\t\t\t// Resolve when we played the last frame; otherwise, reject\n\t\t\t\t\tif (gotoEnd) {\n\t\t\t\t\t\tdeferred.notifyWith(elem, [animation, 1, 0]);\n\t\t\t\t\t\tdeferred.resolveWith(elem, [animation, gotoEnd]);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdeferred.rejectWith(elem, [animation, gotoEnd]);\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t}),\n\t\t\tprops = animation.props;\n\n\t\tpropFilter(props, animation.opts.specialEasing);\n\n\t\tfor (; index < length; index++) {\n\t\t\tresult = Animation.prefilters[index].call(animation, elem, props, animation.opts);\n\t\t\tif (result) {\n\t\t\t\tif (isFunction(result.stop)) {\n\t\t\t\t\tjQuery._queueHooks(animation.elem, animation.opts.queue).stop =\n\t\t\t\t\t\tresult.stop.bind(result);\n\t\t\t\t}\n\t\t\t\treturn result;\n\t\t\t}\n\t\t}\n\n\t\tjQuery.map(props, createTween, animation);\n\n\t\tif (isFunction(animation.opts.start)) {\n\t\t\tanimation.opts.start.call(elem, animation);\n\t\t}\n\n\t\t// Attach callbacks from options\n\t\tanimation\n\t\t\t.progress(animation.opts.progress)\n\t\t\t.done(animation.opts.done, animation.opts.complete)\n\t\t\t.fail(animation.opts.fail)\n\t\t\t.always(animation.opts.always);\n\n\t\tjQuery.fx.timer(\n\t\t\tjQuery.extend(tick, {\n\t\t\t\telem: elem,\n\t\t\t\tanim: animation,\n\t\t\t\tqueue: animation.opts.queue\n\t\t\t})\n\t\t);\n\n\t\treturn animation;\n\t}\n\n\tjQuery.Animation = jQuery.extend(Animation, {\n\n\t\ttweeners: {\n\t\t\t\"*\": [function (prop, value) {\n\t\t\t\tvar tween = this.createTween(prop, value);\n\t\t\t\tadjustCSS(tween.elem, prop, rcssNum.exec(value), tween);\n\t\t\t\treturn tween;\n\t\t\t}]\n\t\t},\n\n\t\ttweener: function (props, callback) {\n\t\t\tif (isFunction(props)) {\n\t\t\t\tcallback = props;\n\t\t\t\tprops = [\"*\"];\n\t\t\t} else {\n\t\t\t\tprops = props.match(rnothtmlwhite);\n\t\t\t}\n\n\t\t\tvar prop,\n\t\t\t\tindex = 0,\n\t\t\t\tlength = props.length;\n\n\t\t\tfor (; index < length; index++) {\n\t\t\t\tprop = props[index];\n\t\t\t\tAnimation.tweeners[prop] = Animation.tweeners[prop] || [];\n\t\t\t\tAnimation.tweeners[prop].unshift(callback);\n\t\t\t}\n\t\t},\n\n\t\tprefilters: [defaultPrefilter],\n\n\t\tprefilter: function (callback, prepend) {\n\t\t\tif (prepend) {\n\t\t\t\tAnimation.prefilters.unshift(callback);\n\t\t\t} else {\n\t\t\t\tAnimation.prefilters.push(callback);\n\t\t\t}\n\t\t}\n\t});\n\n\tjQuery.speed = function (speed, easing, fn) {\n\t\tvar opt = speed && typeof speed === \"object\" ? jQuery.extend({}, speed) : {\n\t\t\tcomplete: fn || !fn && easing ||\n\t\t\t\tisFunction(speed) && speed,\n\t\t\tduration: speed,\n\t\t\teasing: fn && easing || easing && !isFunction(easing) && easing\n\t\t};\n\n\t\t// Go to the end state if fx are off\n\t\tif (jQuery.fx.off) {\n\t\t\topt.duration = 0;\n\n\t\t} else {\n\t\t\tif (typeof opt.duration !== \"number\") {\n\t\t\t\tif (opt.duration in jQuery.fx.speeds) {\n\t\t\t\t\topt.duration = jQuery.fx.speeds[opt.duration];\n\n\t\t\t\t} else {\n\t\t\t\t\topt.duration = jQuery.fx.speeds._default;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Normalize opt.queue - true/undefined/null -> \"fx\"\n\t\tif (opt.queue == null || opt.queue === true) {\n\t\t\topt.queue = \"fx\";\n\t\t}\n\n\t\t// Queueing\n\t\topt.old = opt.complete;\n\n\t\topt.complete = function () {\n\t\t\tif (isFunction(opt.old)) {\n\t\t\t\topt.old.call(this);\n\t\t\t}\n\n\t\t\tif (opt.queue) {\n\t\t\t\tjQuery.dequeue(this, opt.queue);\n\t\t\t}\n\t\t};\n\n\t\treturn opt;\n\t};\n\n\tjQuery.fn.extend({\n\t\tfadeTo: function (speed, to, easing, callback) {\n\n\t\t\t// Show any hidden elements after setting opacity to 0\n\t\t\treturn this.filter(isHiddenWithinTree).css(\"opacity\", 0).show()\n\n\t\t\t\t// Animate to the value specified\n\t\t\t\t.end().animate({ opacity: to }, speed, easing, callback);\n\t\t},\n\t\tanimate: function (prop, speed, easing, callback) {\n\t\t\tvar empty = jQuery.isEmptyObject(prop),\n\t\t\t\toptall = jQuery.speed(speed, easing, callback),\n\t\t\t\tdoAnimation = function () {\n\n\t\t\t\t\t// Operate on a copy of prop so per-property easing won't be lost\n\t\t\t\t\tvar anim = Animation(this, jQuery.extend({}, prop), optall);\n\n\t\t\t\t\t// Empty animations, or finishing resolves immediately\n\t\t\t\t\tif (empty || dataPriv.get(this, \"finish\")) {\n\t\t\t\t\t\tanim.stop(true);\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\tdoAnimation.finish = doAnimation;\n\n\t\t\treturn empty || optall.queue === false ?\n\t\t\t\tthis.each(doAnimation) :\n\t\t\t\tthis.queue(optall.queue, doAnimation);\n\t\t},\n\t\tstop: function (type, clearQueue, gotoEnd) {\n\t\t\tvar stopQueue = function (hooks) {\n\t\t\t\tvar stop = hooks.stop;\n\t\t\t\tdelete hooks.stop;\n\t\t\t\tstop(gotoEnd);\n\t\t\t};\n\n\t\t\tif (typeof type !== \"string\") {\n\t\t\t\tgotoEnd = clearQueue;\n\t\t\t\tclearQueue = type;\n\t\t\t\ttype = undefined;\n\t\t\t}\n\t\t\tif (clearQueue) {\n\t\t\t\tthis.queue(type || \"fx\", []);\n\t\t\t}\n\n\t\t\treturn this.each(function () {\n\t\t\t\tvar dequeue = true,\n\t\t\t\t\tindex = type != null && type + \"queueHooks\",\n\t\t\t\t\ttimers = jQuery.timers,\n\t\t\t\t\tdata = dataPriv.get(this);\n\n\t\t\t\tif (index) {\n\t\t\t\t\tif (data[index] && data[index].stop) {\n\t\t\t\t\t\tstopQueue(data[index]);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tfor (index in data) {\n\t\t\t\t\t\tif (data[index] && data[index].stop && rrun.test(index)) {\n\t\t\t\t\t\t\tstopQueue(data[index]);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tfor (index = timers.length; index--;) {\n\t\t\t\t\tif (timers[index].elem === this &&\n\t\t\t\t\t\t(type == null || timers[index].queue === type)) {\n\n\t\t\t\t\t\ttimers[index].anim.stop(gotoEnd);\n\t\t\t\t\t\tdequeue = false;\n\t\t\t\t\t\ttimers.splice(index, 1);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Start the next in the queue if the last step wasn't forced.\n\t\t\t\t// Timers currently will call their complete callbacks, which\n\t\t\t\t// will dequeue but only if they were gotoEnd.\n\t\t\t\tif (dequeue || !gotoEnd) {\n\t\t\t\t\tjQuery.dequeue(this, type);\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\t\tfinish: function (type) {\n\t\t\tif (type !== false) {\n\t\t\t\ttype = type || \"fx\";\n\t\t\t}\n\t\t\treturn this.each(function () {\n\t\t\t\tvar index,\n\t\t\t\t\tdata = dataPriv.get(this),\n\t\t\t\t\tqueue = data[type + \"queue\"],\n\t\t\t\t\thooks = data[type + \"queueHooks\"],\n\t\t\t\t\ttimers = jQuery.timers,\n\t\t\t\t\tlength = queue ? queue.length : 0;\n\n\t\t\t\t// Enable finishing flag on private data\n\t\t\t\tdata.finish = true;\n\n\t\t\t\t// Empty the queue first\n\t\t\t\tjQuery.queue(this, type, []);\n\n\t\t\t\tif (hooks && hooks.stop) {\n\t\t\t\t\thooks.stop.call(this, true);\n\t\t\t\t}\n\n\t\t\t\t// Look for any active animations, and finish them\n\t\t\t\tfor (index = timers.length; index--;) {\n\t\t\t\t\tif (timers[index].elem === this && timers[index].queue === type) {\n\t\t\t\t\t\ttimers[index].anim.stop(true);\n\t\t\t\t\t\ttimers.splice(index, 1);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Look for any animations in the old queue and finish them\n\t\t\t\tfor (index = 0; index < length; index++) {\n\t\t\t\t\tif (queue[index] && queue[index].finish) {\n\t\t\t\t\t\tqueue[index].finish.call(this);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Turn off finishing flag\n\t\t\t\tdelete data.finish;\n\t\t\t});\n\t\t}\n\t});\n\n\tjQuery.each([\"toggle\", \"show\", \"hide\"], function (_i, name) {\n\t\tvar cssFn = jQuery.fn[name];\n\t\tjQuery.fn[name] = function (speed, easing, callback) {\n\t\t\treturn speed == null || typeof speed === \"boolean\" ?\n\t\t\t\tcssFn.apply(this, arguments) :\n\t\t\t\tthis.animate(genFx(name, true), speed, easing, callback);\n\t\t};\n\t});\n\n\t// Generate shortcuts for custom animations\n\tjQuery.each({\n\t\tslideDown: genFx(\"show\"),\n\t\tslideUp: genFx(\"hide\"),\n\t\tslideToggle: genFx(\"toggle\"),\n\t\tfadeIn: { opacity: \"show\" },\n\t\tfadeOut: { opacity: \"hide\" },\n\t\tfadeToggle: { opacity: \"toggle\" }\n\t}, function (name, props) {\n\t\tjQuery.fn[name] = function (speed, easing, callback) {\n\t\t\treturn this.animate(props, speed, easing, callback);\n\t\t};\n\t});\n\n\tjQuery.timers = [];\n\tjQuery.fx.tick = function () {\n\t\tvar timer,\n\t\t\ti = 0,\n\t\t\ttimers = jQuery.timers;\n\n\t\tfxNow = Date.now();\n\n\t\tfor (; i < timers.length; i++) {\n\t\t\ttimer = timers[i];\n\n\t\t\t// Run the timer and safely remove it when done (allowing for external removal)\n\t\t\tif (!timer() && timers[i] === timer) {\n\t\t\t\ttimers.splice(i--, 1);\n\t\t\t}\n\t\t}\n\n\t\tif (!timers.length) {\n\t\t\tjQuery.fx.stop();\n\t\t}\n\t\tfxNow = undefined;\n\t};\n\n\tjQuery.fx.timer = function (timer) {\n\t\tjQuery.timers.push(timer);\n\t\tjQuery.fx.start();\n\t};\n\n\tjQuery.fx.interval = 13;\n\tjQuery.fx.start = function () {\n\t\tif (inProgress) {\n\t\t\treturn;\n\t\t}\n\n\t\tinProgress = true;\n\t\tschedule();\n\t};\n\n\tjQuery.fx.stop = function () {\n\t\tinProgress = null;\n\t};\n\n\tjQuery.fx.speeds = {\n\t\tslow: 600,\n\t\tfast: 200,\n\n\t\t// Default speed\n\t\t_default: 400\n\t};\n\n\n\t// Based off of the plugin by Clint Helfers, with permission.\n\tjQuery.fn.delay = function (time, type) {\n\t\ttime = jQuery.fx ? jQuery.fx.speeds[time] || time : time;\n\t\ttype = type || \"fx\";\n\n\t\treturn this.queue(type, function (next, hooks) {\n\t\t\tvar timeout = window.setTimeout(next, time);\n\t\t\thooks.stop = function () {\n\t\t\t\twindow.clearTimeout(timeout);\n\t\t\t};\n\t\t});\n\t};\n\n\n\t(function () {\n\t\tvar input = document.createElement(\"input\"),\n\t\t\tselect = document.createElement(\"select\"),\n\t\t\topt = select.appendChild(document.createElement(\"option\"));\n\n\t\tinput.type = \"checkbox\";\n\n\t\t// Support: Android <=4.3 only\n\t\t// Default value for a checkbox should be \"on\"\n\t\tsupport.checkOn = input.value !== \"\";\n\n\t\t// Support: IE <=11 only\n\t\t// Must access selectedIndex to make default options select\n\t\tsupport.optSelected = opt.selected;\n\n\t\t// Support: IE <=11 only\n\t\t// An input loses its value after becoming a radio\n\t\tinput = document.createElement(\"input\");\n\t\tinput.value = \"t\";\n\t\tinput.type = \"radio\";\n\t\tsupport.radioValue = input.value === \"t\";\n\t})();\n\n\n\tvar boolHook,\n\t\tattrHandle = jQuery.expr.attrHandle;\n\n\tjQuery.fn.extend({\n\t\tattr: function (name, value) {\n\t\t\treturn access(this, jQuery.attr, name, value, arguments.length > 1);\n\t\t},\n\n\t\tremoveAttr: function (name) {\n\t\t\treturn this.each(function () {\n\t\t\t\tjQuery.removeAttr(this, name);\n\t\t\t});\n\t\t}\n\t});\n\n\tjQuery.extend({\n\t\tattr: function (elem, name, value) {\n\t\t\tvar ret, hooks,\n\t\t\t\tnType = elem.nodeType;\n\n\t\t\t// Don't get/set attributes on text, comment and attribute nodes\n\t\t\tif (nType === 3 || nType === 8 || nType === 2) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Fallback to prop when attributes are not supported\n\t\t\tif (typeof elem.getAttribute === \"undefined\") {\n\t\t\t\treturn jQuery.prop(elem, name, value);\n\t\t\t}\n\n\t\t\t// Attribute hooks are determined by the lowercase version\n\t\t\t// Grab necessary hook if one is defined\n\t\t\tif (nType !== 1 || !jQuery.isXMLDoc(elem)) {\n\t\t\t\thooks = jQuery.attrHooks[name.toLowerCase()] ||\n\t\t\t\t\t(jQuery.expr.match.bool.test(name) ? boolHook : undefined);\n\t\t\t}\n\n\t\t\tif (value !== undefined) {\n\t\t\t\tif (value === null) {\n\t\t\t\t\tjQuery.removeAttr(elem, name);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (hooks && \"set\" in hooks &&\n\t\t\t\t\t(ret = hooks.set(elem, value, name)) !== undefined) {\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\n\t\t\t\telem.setAttribute(name, value + \"\");\n\t\t\t\treturn value;\n\t\t\t}\n\n\t\t\tif (hooks && \"get\" in hooks && (ret = hooks.get(elem, name)) !== null) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\tret = jQuery.find.attr(elem, name);\n\n\t\t\t// Non-existent attributes return null, we normalize to undefined\n\t\t\treturn ret == null ? undefined : ret;\n\t\t},\n\n\t\tattrHooks: {\n\t\t\ttype: {\n\t\t\t\tset: function (elem, value) {\n\t\t\t\t\tif (!support.radioValue && value === \"radio\" &&\n\t\t\t\t\t\tnodeName(elem, \"input\")) {\n\t\t\t\t\t\tvar val = elem.value;\n\t\t\t\t\t\telem.setAttribute(\"type\", value);\n\t\t\t\t\t\tif (val) {\n\t\t\t\t\t\t\telem.value = val;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn value;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tremoveAttr: function (elem, value) {\n\t\t\tvar name,\n\t\t\t\ti = 0,\n\n\t\t\t\t// Attribute names can contain non-HTML whitespace characters\n\t\t\t\t// https://html.spec.whatwg.org/multipage/syntax.html#attributes-2\n\t\t\t\tattrNames = value && value.match(rnothtmlwhite);\n\n\t\t\tif (attrNames && elem.nodeType === 1) {\n\t\t\t\twhile ((name = attrNames[i++])) {\n\t\t\t\t\telem.removeAttribute(name);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\n\t// Hooks for boolean attributes\n\tboolHook = {\n\t\tset: function (elem, value, name) {\n\t\t\tif (value === false) {\n\n\t\t\t\t// Remove boolean attributes when set to false\n\t\t\t\tjQuery.removeAttr(elem, name);\n\t\t\t} else {\n\t\t\t\telem.setAttribute(name, name);\n\t\t\t}\n\t\t\treturn name;\n\t\t}\n\t};\n\n\tjQuery.each(jQuery.expr.match.bool.source.match(/\\w+/g), function (_i, name) {\n\t\tvar getter = attrHandle[name] || jQuery.find.attr;\n\n\t\tattrHandle[name] = function (elem, name, isXML) {\n\t\t\tvar ret, handle,\n\t\t\t\tlowercaseName = name.toLowerCase();\n\n\t\t\tif (!isXML) {\n\n\t\t\t\t// Avoid an infinite loop by temporarily removing this function from the getter\n\t\t\t\thandle = attrHandle[lowercaseName];\n\t\t\t\tattrHandle[lowercaseName] = ret;\n\t\t\t\tret = getter(elem, name, isXML) != null ?\n\t\t\t\t\tlowercaseName :\n\t\t\t\t\tnull;\n\t\t\t\tattrHandle[lowercaseName] = handle;\n\t\t\t}\n\t\t\treturn ret;\n\t\t};\n\t});\n\n\n\n\n\tvar rfocusable = /^(?:input|select|textarea|button)$/i,\n\t\trclickable = /^(?:a|area)$/i;\n\n\tjQuery.fn.extend({\n\t\tprop: function (name, value) {\n\t\t\treturn access(this, jQuery.prop, name, value, arguments.length > 1);\n\t\t},\n\n\t\tremoveProp: function (name) {\n\t\t\treturn this.each(function () {\n\t\t\t\tdelete this[jQuery.propFix[name] || name];\n\t\t\t});\n\t\t}\n\t});\n\n\tjQuery.extend({\n\t\tprop: function (elem, name, value) {\n\t\t\tvar ret, hooks,\n\t\t\t\tnType = elem.nodeType;\n\n\t\t\t// Don't get/set properties on text, comment and attribute nodes\n\t\t\tif (nType === 3 || nType === 8 || nType === 2) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (nType !== 1 || !jQuery.isXMLDoc(elem)) {\n\n\t\t\t\t// Fix name and attach hooks\n\t\t\t\tname = jQuery.propFix[name] || name;\n\t\t\t\thooks = jQuery.propHooks[name];\n\t\t\t}\n\n\t\t\tif (value !== undefined) {\n\t\t\t\tif (hooks && \"set\" in hooks &&\n\t\t\t\t\t(ret = hooks.set(elem, value, name)) !== undefined) {\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\n\t\t\t\treturn (elem[name] = value);\n\t\t\t}\n\n\t\t\tif (hooks && \"get\" in hooks && (ret = hooks.get(elem, name)) !== null) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\treturn elem[name];\n\t\t},\n\n\t\tpropHooks: {\n\t\t\ttabIndex: {\n\t\t\t\tget: function (elem) {\n\n\t\t\t\t\t// Support: IE <=9 - 11 only\n\t\t\t\t\t// elem.tabIndex doesn't always return the\n\t\t\t\t\t// correct value when it hasn't been explicitly set\n\t\t\t\t\t// Use proper attribute retrieval (trac-12072)\n\t\t\t\t\tvar tabindex = jQuery.find.attr(elem, \"tabindex\");\n\n\t\t\t\t\tif (tabindex) {\n\t\t\t\t\t\treturn parseInt(tabindex, 10);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (\n\t\t\t\t\t\trfocusable.test(elem.nodeName) ||\n\t\t\t\t\t\trclickable.test(elem.nodeName) &&\n\t\t\t\t\t\telem.href\n\t\t\t\t\t) {\n\t\t\t\t\t\treturn 0;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn -1;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tpropFix: {\n\t\t\t\"for\": \"htmlFor\",\n\t\t\t\"class\": \"className\"\n\t\t}\n\t});\n\n\t// Support: IE <=11 only\n\t// Accessing the selectedIndex property\n\t// forces the browser to respect setting selected\n\t// on the option\n\t// The getter ensures a default option is selected\n\t// when in an optgroup\n\t// eslint rule \"no-unused-expressions\" is disabled for this code\n\t// since it considers such accessions noop\n\tif (!support.optSelected) {\n\t\tjQuery.propHooks.selected = {\n\t\t\tget: function (elem) {\n\n\t\t\t\t/* eslint no-unused-expressions: \"off\" */\n\n\t\t\t\tvar parent = elem.parentNode;\n\t\t\t\tif (parent && parent.parentNode) {\n\t\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t\t}\n\t\t\t\treturn null;\n\t\t\t},\n\t\t\tset: function (elem) {\n\n\t\t\t\t/* eslint no-unused-expressions: \"off\" */\n\n\t\t\t\tvar parent = elem.parentNode;\n\t\t\t\tif (parent) {\n\t\t\t\t\tparent.selectedIndex;\n\n\t\t\t\t\tif (parent.parentNode) {\n\t\t\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n\n\tjQuery.each([\n\t\t\"tabIndex\",\n\t\t\"readOnly\",\n\t\t\"maxLength\",\n\t\t\"cellSpacing\",\n\t\t\"cellPadding\",\n\t\t\"rowSpan\",\n\t\t\"colSpan\",\n\t\t\"useMap\",\n\t\t\"frameBorder\",\n\t\t\"contentEditable\"\n\t], function () {\n\t\tjQuery.propFix[this.toLowerCase()] = this;\n\t});\n\n\n\n\n\t// Strip and collapse whitespace according to HTML spec\n\t// https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace\n\tfunction stripAndCollapse(value) {\n\t\tvar tokens = value.match(rnothtmlwhite) || [];\n\t\treturn tokens.join(\" \");\n\t}\n\n\n\tfunction getClass(elem) {\n\t\treturn elem.getAttribute && elem.getAttribute(\"class\") || \"\";\n\t}\n\n\tfunction classesToArray(value) {\n\t\tif (Array.isArray(value)) {\n\t\t\treturn value;\n\t\t}\n\t\tif (typeof value === \"string\") {\n\t\t\treturn value.match(rnothtmlwhite) || [];\n\t\t}\n\t\treturn [];\n\t}\n\n\tjQuery.fn.extend({\n\t\taddClass: function (value) {\n\t\t\tvar classNames, cur, curValue, className, i, finalValue;\n\n\t\t\tif (isFunction(value)) {\n\t\t\t\treturn this.each(function (j) {\n\t\t\t\t\tjQuery(this).addClass(value.call(this, j, getClass(this)));\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tclassNames = classesToArray(value);\n\n\t\t\tif (classNames.length) {\n\t\t\t\treturn this.each(function () {\n\t\t\t\t\tcurValue = getClass(this);\n\t\t\t\t\tcur = this.nodeType === 1 && (\" \" + stripAndCollapse(curValue) + \" \");\n\n\t\t\t\t\tif (cur) {\n\t\t\t\t\t\tfor (i = 0; i < classNames.length; i++) {\n\t\t\t\t\t\t\tclassName = classNames[i];\n\t\t\t\t\t\t\tif (cur.indexOf(\" \" + className + \" \") < 0) {\n\t\t\t\t\t\t\t\tcur += className + \" \";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\t\tfinalValue = stripAndCollapse(cur);\n\t\t\t\t\t\tif (curValue !== finalValue) {\n\t\t\t\t\t\t\tthis.setAttribute(\"class\", finalValue);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn this;\n\t\t},\n\n\t\tremoveClass: function (value) {\n\t\t\tvar classNames, cur, curValue, className, i, finalValue;\n\n\t\t\tif (isFunction(value)) {\n\t\t\t\treturn this.each(function (j) {\n\t\t\t\t\tjQuery(this).removeClass(value.call(this, j, getClass(this)));\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (!arguments.length) {\n\t\t\t\treturn this.attr(\"class\", \"\");\n\t\t\t}\n\n\t\t\tclassNames = classesToArray(value);\n\n\t\t\tif (classNames.length) {\n\t\t\t\treturn this.each(function () {\n\t\t\t\t\tcurValue = getClass(this);\n\n\t\t\t\t\t// This expression is here for better compressibility (see addClass)\n\t\t\t\t\tcur = this.nodeType === 1 && (\" \" + stripAndCollapse(curValue) + \" \");\n\n\t\t\t\t\tif (cur) {\n\t\t\t\t\t\tfor (i = 0; i < classNames.length; i++) {\n\t\t\t\t\t\t\tclassName = classNames[i];\n\n\t\t\t\t\t\t\t// Remove *all* instances\n\t\t\t\t\t\t\twhile (cur.indexOf(\" \" + className + \" \") > -1) {\n\t\t\t\t\t\t\t\tcur = cur.replace(\" \" + className + \" \", \" \");\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\t\tfinalValue = stripAndCollapse(cur);\n\t\t\t\t\t\tif (curValue !== finalValue) {\n\t\t\t\t\t\t\tthis.setAttribute(\"class\", finalValue);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn this;\n\t\t},\n\n\t\ttoggleClass: function (value, stateVal) {\n\t\t\tvar classNames, className, i, self,\n\t\t\t\ttype = typeof value,\n\t\t\t\tisValidValue = type === \"string\" || Array.isArray(value);\n\n\t\t\tif (isFunction(value)) {\n\t\t\t\treturn this.each(function (i) {\n\t\t\t\t\tjQuery(this).toggleClass(\n\t\t\t\t\t\tvalue.call(this, i, getClass(this), stateVal),\n\t\t\t\t\t\tstateVal\n\t\t\t\t\t);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (typeof stateVal === \"boolean\" && isValidValue) {\n\t\t\t\treturn stateVal ? this.addClass(value) : this.removeClass(value);\n\t\t\t}\n\n\t\t\tclassNames = classesToArray(value);\n\n\t\t\treturn this.each(function () {\n\t\t\t\tif (isValidValue) {\n\n\t\t\t\t\t// Toggle individual class names\n\t\t\t\t\tself = jQuery(this);\n\n\t\t\t\t\tfor (i = 0; i < classNames.length; i++) {\n\t\t\t\t\t\tclassName = classNames[i];\n\n\t\t\t\t\t\t// Check each className given, space separated list\n\t\t\t\t\t\tif (self.hasClass(className)) {\n\t\t\t\t\t\t\tself.removeClass(className);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tself.addClass(className);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Toggle whole class name\n\t\t\t\t} else if (value === undefined || type === \"boolean\") {\n\t\t\t\t\tclassName = getClass(this);\n\t\t\t\t\tif (className) {\n\n\t\t\t\t\t\t// Store className if set\n\t\t\t\t\t\tdataPriv.set(this, \"__className__\", className);\n\t\t\t\t\t}\n\n\t\t\t\t\t// If the element has a class name or if we're passed `false`,\n\t\t\t\t\t// then remove the whole classname (if there was one, the above saved it).\n\t\t\t\t\t// Otherwise bring back whatever was previously saved (if anything),\n\t\t\t\t\t// falling back to the empty string if nothing was stored.\n\t\t\t\t\tif (this.setAttribute) {\n\t\t\t\t\t\tthis.setAttribute(\"class\",\n\t\t\t\t\t\t\tclassName || value === false ?\n\t\t\t\t\t\t\t\t\"\" :\n\t\t\t\t\t\t\t\tdataPriv.get(this, \"__className__\") || \"\"\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\thasClass: function (selector) {\n\t\t\tvar className, elem,\n\t\t\t\ti = 0;\n\n\t\t\tclassName = \" \" + selector + \" \";\n\t\t\twhile ((elem = this[i++])) {\n\t\t\t\tif (elem.nodeType === 1 &&\n\t\t\t\t\t(\" \" + stripAndCollapse(getClass(elem)) + \" \").indexOf(className) > -1) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn false;\n\t\t}\n\t});\n\n\n\n\n\tvar rreturn = /\\r/g;\n\n\tjQuery.fn.extend({\n\t\tval: function (value) {\n\t\t\tvar hooks, ret, valueIsFunction,\n\t\t\t\telem = this[0];\n\n\t\t\tif (!arguments.length) {\n\t\t\t\tif (elem) {\n\t\t\t\t\thooks = jQuery.valHooks[elem.type] ||\n\t\t\t\t\t\tjQuery.valHooks[elem.nodeName.toLowerCase()];\n\n\t\t\t\t\tif (hooks &&\n\t\t\t\t\t\t\"get\" in hooks &&\n\t\t\t\t\t\t(ret = hooks.get(elem, \"value\")) !== undefined\n\t\t\t\t\t) {\n\t\t\t\t\t\treturn ret;\n\t\t\t\t\t}\n\n\t\t\t\t\tret = elem.value;\n\n\t\t\t\t\t// Handle most common string cases\n\t\t\t\t\tif (typeof ret === \"string\") {\n\t\t\t\t\t\treturn ret.replace(rreturn, \"\");\n\t\t\t\t\t}\n\n\t\t\t\t\t// Handle cases where value is null/undef or number\n\t\t\t\t\treturn ret == null ? \"\" : ret;\n\t\t\t\t}\n\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvalueIsFunction = isFunction(value);\n\n\t\t\treturn this.each(function (i) {\n\t\t\t\tvar val;\n\n\t\t\t\tif (this.nodeType !== 1) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (valueIsFunction) {\n\t\t\t\t\tval = value.call(this, i, jQuery(this).val());\n\t\t\t\t} else {\n\t\t\t\t\tval = value;\n\t\t\t\t}\n\n\t\t\t\t// Treat null/undefined as \"\"; convert numbers to string\n\t\t\t\tif (val == null) {\n\t\t\t\t\tval = \"\";\n\n\t\t\t\t} else if (typeof val === \"number\") {\n\t\t\t\t\tval += \"\";\n\n\t\t\t\t} else if (Array.isArray(val)) {\n\t\t\t\t\tval = jQuery.map(val, function (value) {\n\t\t\t\t\t\treturn value == null ? \"\" : value + \"\";\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\thooks = jQuery.valHooks[this.type] || jQuery.valHooks[this.nodeName.toLowerCase()];\n\n\t\t\t\t// If set returns undefined, fall back to normal setting\n\t\t\t\tif (!hooks || !(\"set\" in hooks) || hooks.set(this, val, \"value\") === undefined) {\n\t\t\t\t\tthis.value = val;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t});\n\n\tjQuery.extend({\n\t\tvalHooks: {\n\t\t\toption: {\n\t\t\t\tget: function (elem) {\n\n\t\t\t\t\tvar val = jQuery.find.attr(elem, \"value\");\n\t\t\t\t\treturn val != null ?\n\t\t\t\t\t\tval :\n\n\t\t\t\t\t\t// Support: IE <=10 - 11 only\n\t\t\t\t\t\t// option.text throws exceptions (trac-14686, trac-14858)\n\t\t\t\t\t\t// Strip and collapse whitespace\n\t\t\t\t\t\t// https://html.spec.whatwg.org/#strip-and-collapse-whitespace\n\t\t\t\t\t\tstripAndCollapse(jQuery.text(elem));\n\t\t\t\t}\n\t\t\t},\n\t\t\tselect: {\n\t\t\t\tget: function (elem) {\n\t\t\t\t\tvar value, option, i,\n\t\t\t\t\t\toptions = elem.options,\n\t\t\t\t\t\tindex = elem.selectedIndex,\n\t\t\t\t\t\tone = elem.type === \"select-one\",\n\t\t\t\t\t\tvalues = one ? null : [],\n\t\t\t\t\t\tmax = one ? index + 1 : options.length;\n\n\t\t\t\t\tif (index < 0) {\n\t\t\t\t\t\ti = max;\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\ti = one ? index : 0;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Loop through all the selected options\n\t\t\t\t\tfor (; i < max; i++) {\n\t\t\t\t\t\toption = options[i];\n\n\t\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t\t// IE8-9 doesn't update selected after form reset (trac-2551)\n\t\t\t\t\t\tif ((option.selected || i === index) &&\n\n\t\t\t\t\t\t\t// Don't return options that are disabled or in a disabled optgroup\n\t\t\t\t\t\t\t!option.disabled &&\n\t\t\t\t\t\t\t(!option.parentNode.disabled ||\n\t\t\t\t\t\t\t\t!nodeName(option.parentNode, \"optgroup\"))) {\n\n\t\t\t\t\t\t\t// Get the specific value for the option\n\t\t\t\t\t\t\tvalue = jQuery(option).val();\n\n\t\t\t\t\t\t\t// We don't need an array for one selects\n\t\t\t\t\t\t\tif (one) {\n\t\t\t\t\t\t\t\treturn value;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Multi-Selects return an array\n\t\t\t\t\t\t\tvalues.push(value);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn values;\n\t\t\t\t},\n\n\t\t\t\tset: function (elem, value) {\n\t\t\t\t\tvar optionSet, option,\n\t\t\t\t\t\toptions = elem.options,\n\t\t\t\t\t\tvalues = jQuery.makeArray(value),\n\t\t\t\t\t\ti = options.length;\n\n\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\toption = options[i];\n\n\t\t\t\t\t\t/* eslint-disable no-cond-assign */\n\n\t\t\t\t\t\tif (option.selected =\n\t\t\t\t\t\t\tjQuery.inArray(jQuery.valHooks.option.get(option), values) > -1\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\toptionSet = true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t/* eslint-enable no-cond-assign */\n\t\t\t\t\t}\n\n\t\t\t\t\t// Force browsers to behave consistently when non-matching value is set\n\t\t\t\t\tif (!optionSet) {\n\t\t\t\t\t\telem.selectedIndex = -1;\n\t\t\t\t\t}\n\t\t\t\t\treturn values;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\n\t// Radios and checkboxes getter/setter\n\tjQuery.each([\"radio\", \"checkbox\"], function () {\n\t\tjQuery.valHooks[this] = {\n\t\t\tset: function (elem, value) {\n\t\t\t\tif (Array.isArray(value)) {\n\t\t\t\t\treturn (elem.checked = jQuery.inArray(jQuery(elem).val(), value) > -1);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\tif (!support.checkOn) {\n\t\t\tjQuery.valHooks[this].get = function (elem) {\n\t\t\t\treturn elem.getAttribute(\"value\") === null ? \"on\" : elem.value;\n\t\t\t};\n\t\t}\n\t});\n\n\n\n\n\t// Return jQuery for attributes-only inclusion\n\tvar location = window.location;\n\n\tvar nonce = { guid: Date.now() };\n\n\tvar rquery = (/\\?/);\n\n\n\n\t// Cross-browser xml parsing\n\tjQuery.parseXML = function (data) {\n\t\tvar xml, parserErrorElem;\n\t\tif (!data || typeof data !== \"string\") {\n\t\t\treturn null;\n\t\t}\n\n\t\t// Support: IE 9 - 11 only\n\t\t// IE throws on parseFromString with invalid input.\n\t\ttry {\n\t\t\txml = (new window.DOMParser()).parseFromString(data, \"text/xml\");\n\t\t} catch (e) { }\n\n\t\tparserErrorElem = xml && xml.getElementsByTagName(\"parsererror\")[0];\n\t\tif (!xml || parserErrorElem) {\n\t\t\tjQuery.error(\"Invalid XML: \" + (\n\t\t\t\tparserErrorElem ?\n\t\t\t\t\tjQuery.map(parserErrorElem.childNodes, function (el) {\n\t\t\t\t\t\treturn el.textContent;\n\t\t\t\t\t}).join(\"\\n\") :\n\t\t\t\t\tdata\n\t\t\t));\n\t\t}\n\t\treturn xml;\n\t};\n\n\n\tvar rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,\n\t\tstopPropagationCallback = function (e) {\n\t\t\te.stopPropagation();\n\t\t};\n\n\tjQuery.extend(jQuery.event, {\n\n\t\ttrigger: function (event, data, elem, onlyHandlers) {\n\n\t\t\tvar i, cur, tmp, bubbleType, ontype, handle, special, lastElement,\n\t\t\t\teventPath = [elem || document],\n\t\t\t\ttype = hasOwn.call(event, \"type\") ? event.type : event,\n\t\t\t\tnamespaces = hasOwn.call(event, \"namespace\") ? event.namespace.split(\".\") : [];\n\n\t\t\tcur = lastElement = tmp = elem = elem || document;\n\n\t\t\t// Don't do events on text and comment nodes\n\t\t\tif (elem.nodeType === 3 || elem.nodeType === 8) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// focus/blur morphs to focusin/out; ensure we're not firing them right now\n\t\t\tif (rfocusMorph.test(type + jQuery.event.triggered)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (type.indexOf(\".\") > -1) {\n\n\t\t\t\t// Namespaced trigger; create a regexp to match event type in handle()\n\t\t\t\tnamespaces = type.split(\".\");\n\t\t\t\ttype = namespaces.shift();\n\t\t\t\tnamespaces.sort();\n\t\t\t}\n\t\t\tontype = type.indexOf(\":\") < 0 && \"on\" + type;\n\n\t\t\t// Caller can pass in a jQuery.Event object, Object, or just an event type string\n\t\t\tevent = event[jQuery.expando] ?\n\t\t\t\tevent :\n\t\t\t\tnew jQuery.Event(type, typeof event === \"object\" && event);\n\n\t\t\t// Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)\n\t\t\tevent.isTrigger = onlyHandlers ? 2 : 3;\n\t\t\tevent.namespace = namespaces.join(\".\");\n\t\t\tevent.rnamespace = event.namespace ?\n\t\t\t\tnew RegExp(\"(^|\\\\.)\" + namespaces.join(\"\\\\.(?:.*\\\\.|)\") + \"(\\\\.|$)\") :\n\t\t\t\tnull;\n\n\t\t\t// Clean up the event in case it is being reused\n\t\t\tevent.result = undefined;\n\t\t\tif (!event.target) {\n\t\t\t\tevent.target = elem;\n\t\t\t}\n\n\t\t\t// Clone any incoming data and prepend the event, creating the handler arg list\n\t\t\tdata = data == null ?\n\t\t\t\t[event] :\n\t\t\t\tjQuery.makeArray(data, [event]);\n\n\t\t\t// Allow special events to draw outside the lines\n\t\t\tspecial = jQuery.event.special[type] || {};\n\t\t\tif (!onlyHandlers && special.trigger && special.trigger.apply(elem, data) === false) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Determine event propagation path in advance, per W3C events spec (trac-9951)\n\t\t\t// Bubble up to document, then to window; watch for a global ownerDocument var (trac-9724)\n\t\t\tif (!onlyHandlers && !special.noBubble && !isWindow(elem)) {\n\n\t\t\t\tbubbleType = special.delegateType || type;\n\t\t\t\tif (!rfocusMorph.test(bubbleType + type)) {\n\t\t\t\t\tcur = cur.parentNode;\n\t\t\t\t}\n\t\t\t\tfor (; cur; cur = cur.parentNode) {\n\t\t\t\t\teventPath.push(cur);\n\t\t\t\t\ttmp = cur;\n\t\t\t\t}\n\n\t\t\t\t// Only add window if we got to document (e.g., not plain obj or detached DOM)\n\t\t\t\tif (tmp === (elem.ownerDocument || document)) {\n\t\t\t\t\teventPath.push(tmp.defaultView || tmp.parentWindow || window);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Fire handlers on the event path\n\t\t\ti = 0;\n\t\t\twhile ((cur = eventPath[i++]) && !event.isPropagationStopped()) {\n\t\t\t\tlastElement = cur;\n\t\t\t\tevent.type = i > 1 ?\n\t\t\t\t\tbubbleType :\n\t\t\t\t\tspecial.bindType || type;\n\n\t\t\t\t// jQuery handler\n\t\t\t\thandle = (dataPriv.get(cur, \"events\") || Object.create(null))[event.type] &&\n\t\t\t\t\tdataPriv.get(cur, \"handle\");\n\t\t\t\tif (handle) {\n\t\t\t\t\thandle.apply(cur, data);\n\t\t\t\t}\n\n\t\t\t\t// Native handler\n\t\t\t\thandle = ontype && cur[ontype];\n\t\t\t\tif (handle && handle.apply && acceptData(cur)) {\n\t\t\t\t\tevent.result = handle.apply(cur, data);\n\t\t\t\t\tif (event.result === false) {\n\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tevent.type = type;\n\n\t\t\t// If nobody prevented the default action, do it now\n\t\t\tif (!onlyHandlers && !event.isDefaultPrevented()) {\n\n\t\t\t\tif ((!special._default ||\n\t\t\t\t\tspecial._default.apply(eventPath.pop(), data) === false) &&\n\t\t\t\t\tacceptData(elem)) {\n\n\t\t\t\t\t// Call a native DOM method on the target with the same name as the event.\n\t\t\t\t\t// Don't do default actions on window, that's where global variables be (trac-6170)\n\t\t\t\t\tif (ontype && isFunction(elem[type]) && !isWindow(elem)) {\n\n\t\t\t\t\t\t// Don't re-trigger an onFOO event when we call its FOO() method\n\t\t\t\t\t\ttmp = elem[ontype];\n\n\t\t\t\t\t\tif (tmp) {\n\t\t\t\t\t\t\telem[ontype] = null;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Prevent re-triggering of the same event, since we already bubbled it above\n\t\t\t\t\t\tjQuery.event.triggered = type;\n\n\t\t\t\t\t\tif (event.isPropagationStopped()) {\n\t\t\t\t\t\t\tlastElement.addEventListener(type, stopPropagationCallback);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\telem[type]();\n\n\t\t\t\t\t\tif (event.isPropagationStopped()) {\n\t\t\t\t\t\t\tlastElement.removeEventListener(type, stopPropagationCallback);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tjQuery.event.triggered = undefined;\n\n\t\t\t\t\t\tif (tmp) {\n\t\t\t\t\t\t\telem[ontype] = tmp;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn event.result;\n\t\t},\n\n\t\t// Piggyback on a donor event to simulate a different one\n\t\t// Used only for `focus(in | out)` events\n\t\tsimulate: function (type, elem, event) {\n\t\t\tvar e = jQuery.extend(\n\t\t\t\tnew jQuery.Event(),\n\t\t\t\tevent,\n\t\t\t\t{\n\t\t\t\t\ttype: type,\n\t\t\t\t\tisSimulated: true\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tjQuery.event.trigger(e, null, elem);\n\t\t}\n\n\t});\n\n\tjQuery.fn.extend({\n\n\t\ttrigger: function (type, data) {\n\t\t\treturn this.each(function () {\n\t\t\t\tjQuery.event.trigger(type, data, this);\n\t\t\t});\n\t\t},\n\t\ttriggerHandler: function (type, data) {\n\t\t\tvar elem = this[0];\n\t\t\tif (elem) {\n\t\t\t\treturn jQuery.event.trigger(type, data, elem, true);\n\t\t\t}\n\t\t}\n\t});\n\n\n\tvar\n\t\trbracket = /\\[\\]$/,\n\t\trCRLF = /\\r?\\n/g,\n\t\trsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,\n\t\trsubmittable = /^(?:input|select|textarea|keygen)/i;\n\n\tfunction buildParams(prefix, obj, traditional, add) {\n\t\tvar name;\n\n\t\tif (Array.isArray(obj)) {\n\n\t\t\t// Serialize array item.\n\t\t\tjQuery.each(obj, function (i, v) {\n\t\t\t\tif (traditional || rbracket.test(prefix)) {\n\n\t\t\t\t\t// Treat each array item as a scalar.\n\t\t\t\t\tadd(prefix, v);\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// Item is non-scalar (array or object), encode its numeric index.\n\t\t\t\t\tbuildParams(\n\t\t\t\t\t\tprefix + \"[\" + (typeof v === \"object\" && v != null ? i : \"\") + \"]\",\n\t\t\t\t\t\tv,\n\t\t\t\t\t\ttraditional,\n\t\t\t\t\t\tadd\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t});\n\n\t\t} else if (!traditional && toType(obj) === \"object\") {\n\n\t\t\t// Serialize object item.\n\t\t\tfor (name in obj) {\n\t\t\t\tbuildParams(prefix + \"[\" + name + \"]\", obj[name], traditional, add);\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// Serialize scalar item.\n\t\t\tadd(prefix, obj);\n\t\t}\n\t}\n\n\t// Serialize an array of form elements or a set of\n\t// key/values into a query string\n\tjQuery.param = function (a, traditional) {\n\t\tvar prefix,\n\t\t\ts = [],\n\t\t\tadd = function (key, valueOrFunction) {\n\n\t\t\t\t// If value is a function, invoke it and use its return value\n\t\t\t\tvar value = isFunction(valueOrFunction) ?\n\t\t\t\t\tvalueOrFunction() :\n\t\t\t\t\tvalueOrFunction;\n\n\t\t\t\ts[s.length] = encodeURIComponent(key) + \"=\" +\n\t\t\t\t\tencodeURIComponent(value == null ? \"\" : value);\n\t\t\t};\n\n\t\tif (a == null) {\n\t\t\treturn \"\";\n\t\t}\n\n\t\t// If an array was passed in, assume that it is an array of form elements.\n\t\tif (Array.isArray(a) || (a.jquery && !jQuery.isPlainObject(a))) {\n\n\t\t\t// Serialize the form elements\n\t\t\tjQuery.each(a, function () {\n\t\t\t\tadd(this.name, this.value);\n\t\t\t});\n\n\t\t} else {\n\n\t\t\t// If traditional, encode the \"old\" way (the way 1.3.2 or older\n\t\t\t// did it), otherwise encode params recursively.\n\t\t\tfor (prefix in a) {\n\t\t\t\tbuildParams(prefix, a[prefix], traditional, add);\n\t\t\t}\n\t\t}\n\n\t\t// Return the resulting serialization\n\t\treturn s.join(\"&\");\n\t};\n\n\tjQuery.fn.extend({\n\t\tserialize: function () {\n\t\t\treturn jQuery.param(this.serializeArray());\n\t\t},\n\t\tserializeArray: function () {\n\t\t\treturn this.map(function () {\n\n\t\t\t\t// Can add propHook for \"elements\" to filter or add form elements\n\t\t\t\tvar elements = jQuery.prop(this, \"elements\");\n\t\t\t\treturn elements ? jQuery.makeArray(elements) : this;\n\t\t\t}).filter(function () {\n\t\t\t\tvar type = this.type;\n\n\t\t\t\t// Use .is( \":disabled\" ) so that fieldset[disabled] works\n\t\t\t\treturn this.name && !jQuery(this).is(\":disabled\") &&\n\t\t\t\t\trsubmittable.test(this.nodeName) && !rsubmitterTypes.test(type) &&\n\t\t\t\t\t(this.checked || !rcheckableType.test(type));\n\t\t\t}).map(function (_i, elem) {\n\t\t\t\tvar val = jQuery(this).val();\n\n\t\t\t\tif (val == null) {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\n\t\t\t\tif (Array.isArray(val)) {\n\t\t\t\t\treturn jQuery.map(val, function (val) {\n\t\t\t\t\t\treturn { name: elem.name, value: val.replace(rCRLF, \"\\r\\n\") };\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\treturn { name: elem.name, value: val.replace(rCRLF, \"\\r\\n\") };\n\t\t\t}).get();\n\t\t}\n\t});\n\n\n\tvar\n\t\tr20 = /%20/g,\n\t\trhash = /#.*$/,\n\t\trantiCache = /([?&])_=[^&]*/,\n\t\trheaders = /^(.*?):[ \\t]*([^\\r\\n]*)$/mg,\n\n\t\t// trac-7653, trac-8125, trac-8152: local protocol detection\n\t\trlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,\n\t\trnoContent = /^(?:GET|HEAD)$/,\n\t\trprotocol = /^\\/\\//,\n\n\t\t/* Prefilters\n\t\t * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)\n\t\t * 2) These are called:\n\t\t *    - BEFORE asking for a transport\n\t\t *    - AFTER param serialization (s.data is a string if s.processData is true)\n\t\t * 3) key is the dataType\n\t\t * 4) the catchall symbol \"*\" can be used\n\t\t * 5) execution will start with transport dataType and THEN continue down to \"*\" if needed\n\t\t */\n\t\tprefilters = {},\n\n\t\t/* Transports bindings\n\t\t * 1) key is the dataType\n\t\t * 2) the catchall symbol \"*\" can be used\n\t\t * 3) selection will start with transport dataType and THEN go to \"*\" if needed\n\t\t */\n\t\ttransports = {},\n\n\t\t// Avoid comment-prolog char sequence (trac-10098); must appease lint and evade compression\n\t\tallTypes = \"*/\".concat(\"*\"),\n\n\t\t// Anchor tag for parsing the document origin\n\t\toriginAnchor = document.createElement(\"a\");\n\n\toriginAnchor.href = location.href;\n\n\t// Base \"constructor\" for jQuery.ajaxPrefilter and jQuery.ajaxTransport\n\tfunction addToPrefiltersOrTransports(structure) {\n\n\t\t// dataTypeExpression is optional and defaults to \"*\"\n\t\treturn function (dataTypeExpression, func) {\n\n\t\t\tif (typeof dataTypeExpression !== \"string\") {\n\t\t\t\tfunc = dataTypeExpression;\n\t\t\t\tdataTypeExpression = \"*\";\n\t\t\t}\n\n\t\t\tvar dataType,\n\t\t\t\ti = 0,\n\t\t\t\tdataTypes = dataTypeExpression.toLowerCase().match(rnothtmlwhite) || [];\n\n\t\t\tif (isFunction(func)) {\n\n\t\t\t\t// For each dataType in the dataTypeExpression\n\t\t\t\twhile ((dataType = dataTypes[i++])) {\n\n\t\t\t\t\t// Prepend if requested\n\t\t\t\t\tif (dataType[0] === \"+\") {\n\t\t\t\t\t\tdataType = dataType.slice(1) || \"*\";\n\t\t\t\t\t\t(structure[dataType] = structure[dataType] || []).unshift(func);\n\n\t\t\t\t\t\t// Otherwise append\n\t\t\t\t\t} else {\n\t\t\t\t\t\t(structure[dataType] = structure[dataType] || []).push(func);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n\n\t// Base inspection function for prefilters and transports\n\tfunction inspectPrefiltersOrTransports(structure, options, originalOptions, jqXHR) {\n\n\t\tvar inspected = {},\n\t\t\tseekingTransport = (structure === transports);\n\n\t\tfunction inspect(dataType) {\n\t\t\tvar selected;\n\t\t\tinspected[dataType] = true;\n\t\t\tjQuery.each(structure[dataType] || [], function (_, prefilterOrFactory) {\n\t\t\t\tvar dataTypeOrTransport = prefilterOrFactory(options, originalOptions, jqXHR);\n\t\t\t\tif (typeof dataTypeOrTransport === \"string\" &&\n\t\t\t\t\t!seekingTransport && !inspected[dataTypeOrTransport]) {\n\n\t\t\t\t\toptions.dataTypes.unshift(dataTypeOrTransport);\n\t\t\t\t\tinspect(dataTypeOrTransport);\n\t\t\t\t\treturn false;\n\t\t\t\t} else if (seekingTransport) {\n\t\t\t\t\treturn !(selected = dataTypeOrTransport);\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn selected;\n\t\t}\n\n\t\treturn inspect(options.dataTypes[0]) || !inspected[\"*\"] && inspect(\"*\");\n\t}\n\n\t// A special extend for ajax options\n\t// that takes \"flat\" options (not to be deep extended)\n\t// Fixes trac-9887\n\tfunction ajaxExtend(target, src) {\n\t\tvar key, deep,\n\t\t\tflatOptions = jQuery.ajaxSettings.flatOptions || {};\n\n\t\tfor (key in src) {\n\t\t\tif (src[key] !== undefined) {\n\t\t\t\t(flatOptions[key] ? target : (deep || (deep = {})))[key] = src[key];\n\t\t\t}\n\t\t}\n\t\tif (deep) {\n\t\t\tjQuery.extend(true, target, deep);\n\t\t}\n\n\t\treturn target;\n\t}\n\n\t/* Handles responses to an ajax request:\n\t * - finds the right dataType (mediates between content-type and expected dataType)\n\t * - returns the corresponding response\n\t */\n\tfunction ajaxHandleResponses(s, jqXHR, responses) {\n\n\t\tvar ct, type, finalDataType, firstDataType,\n\t\t\tcontents = s.contents,\n\t\t\tdataTypes = s.dataTypes;\n\n\t\t// Remove auto dataType and get content-type in the process\n\t\twhile (dataTypes[0] === \"*\") {\n\t\t\tdataTypes.shift();\n\t\t\tif (ct === undefined) {\n\t\t\t\tct = s.mimeType || jqXHR.getResponseHeader(\"Content-Type\");\n\t\t\t}\n\t\t}\n\n\t\t// Check if we're dealing with a known content-type\n\t\tif (ct) {\n\t\t\tfor (type in contents) {\n\t\t\t\tif (contents[type] && contents[type].test(ct)) {\n\t\t\t\t\tdataTypes.unshift(type);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Check to see if we have a response for the expected dataType\n\t\tif (dataTypes[0] in responses) {\n\t\t\tfinalDataType = dataTypes[0];\n\t\t} else {\n\n\t\t\t// Try convertible dataTypes\n\t\t\tfor (type in responses) {\n\t\t\t\tif (!dataTypes[0] || s.converters[type + \" \" + dataTypes[0]]) {\n\t\t\t\t\tfinalDataType = type;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (!firstDataType) {\n\t\t\t\t\tfirstDataType = type;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Or just use first one\n\t\t\tfinalDataType = finalDataType || firstDataType;\n\t\t}\n\n\t\t// If we found a dataType\n\t\t// We add the dataType to the list if needed\n\t\t// and return the corresponding response\n\t\tif (finalDataType) {\n\t\t\tif (finalDataType !== dataTypes[0]) {\n\t\t\t\tdataTypes.unshift(finalDataType);\n\t\t\t}\n\t\t\treturn responses[finalDataType];\n\t\t}\n\t}\n\n\t/* Chain conversions given the request and the original response\n\t * Also sets the responseXXX fields on the jqXHR instance\n\t */\n\tfunction ajaxConvert(s, response, jqXHR, isSuccess) {\n\t\tvar conv2, current, conv, tmp, prev,\n\t\t\tconverters = {},\n\n\t\t\t// Work with a copy of dataTypes in case we need to modify it for conversion\n\t\t\tdataTypes = s.dataTypes.slice();\n\n\t\t// Create converters map with lowercased keys\n\t\tif (dataTypes[1]) {\n\t\t\tfor (conv in s.converters) {\n\t\t\t\tconverters[conv.toLowerCase()] = s.converters[conv];\n\t\t\t}\n\t\t}\n\n\t\tcurrent = dataTypes.shift();\n\n\t\t// Convert to each sequential dataType\n\t\twhile (current) {\n\n\t\t\tif (s.responseFields[current]) {\n\t\t\t\tjqXHR[s.responseFields[current]] = response;\n\t\t\t}\n\n\t\t\t// Apply the dataFilter if provided\n\t\t\tif (!prev && isSuccess && s.dataFilter) {\n\t\t\t\tresponse = s.dataFilter(response, s.dataType);\n\t\t\t}\n\n\t\t\tprev = current;\n\t\t\tcurrent = dataTypes.shift();\n\n\t\t\tif (current) {\n\n\t\t\t\t// There's only work to do if current dataType is non-auto\n\t\t\t\tif (current === \"*\") {\n\n\t\t\t\t\tcurrent = prev;\n\n\t\t\t\t\t// Convert response if prev dataType is non-auto and differs from current\n\t\t\t\t} else if (prev !== \"*\" && prev !== current) {\n\n\t\t\t\t\t// Seek a direct converter\n\t\t\t\t\tconv = converters[prev + \" \" + current] || converters[\"* \" + current];\n\n\t\t\t\t\t// If none found, seek a pair\n\t\t\t\t\tif (!conv) {\n\t\t\t\t\t\tfor (conv2 in converters) {\n\n\t\t\t\t\t\t\t// If conv2 outputs current\n\t\t\t\t\t\t\ttmp = conv2.split(\" \");\n\t\t\t\t\t\t\tif (tmp[1] === current) {\n\n\t\t\t\t\t\t\t\t// If prev can be converted to accepted input\n\t\t\t\t\t\t\t\tconv = converters[prev + \" \" + tmp[0]] ||\n\t\t\t\t\t\t\t\t\tconverters[\"* \" + tmp[0]];\n\t\t\t\t\t\t\t\tif (conv) {\n\n\t\t\t\t\t\t\t\t\t// Condense equivalence converters\n\t\t\t\t\t\t\t\t\tif (conv === true) {\n\t\t\t\t\t\t\t\t\t\tconv = converters[conv2];\n\n\t\t\t\t\t\t\t\t\t\t// Otherwise, insert the intermediate dataType\n\t\t\t\t\t\t\t\t\t} else if (converters[conv2] !== true) {\n\t\t\t\t\t\t\t\t\t\tcurrent = tmp[0];\n\t\t\t\t\t\t\t\t\t\tdataTypes.unshift(tmp[1]);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Apply converter (if not an equivalence)\n\t\t\t\t\tif (conv !== true) {\n\n\t\t\t\t\t\t// Unless errors are allowed to bubble, catch and return them\n\t\t\t\t\t\tif (conv && s.throws) {\n\t\t\t\t\t\t\tresponse = conv(response);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\tresponse = conv(response);\n\t\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\tstate: \"parsererror\",\n\t\t\t\t\t\t\t\t\terror: conv ? e : \"No conversion from \" + prev + \" to \" + current\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn { state: \"success\", data: response };\n\t}\n\n\tjQuery.extend({\n\n\t\t// Counter for holding the number of active queries\n\t\tactive: 0,\n\n\t\t// Last-Modified header cache for next request\n\t\tlastModified: {},\n\t\tetag: {},\n\n\t\tajaxSettings: {\n\t\t\turl: location.href,\n\t\t\ttype: \"GET\",\n\t\t\tisLocal: rlocalProtocol.test(location.protocol),\n\t\t\tglobal: true,\n\t\t\tprocessData: true,\n\t\t\tasync: true,\n\t\t\tcontentType: \"application/x-www-form-urlencoded; charset=UTF-8\",\n\n\t\t\t/*\n\t\t\ttimeout: 0,\n\t\t\tdata: null,\n\t\t\tdataType: null,\n\t\t\tusername: null,\n\t\t\tpassword: null,\n\t\t\tcache: null,\n\t\t\tthrows: false,\n\t\t\ttraditional: false,\n\t\t\theaders: {},\n\t\t\t*/\n\n\t\t\taccepts: {\n\t\t\t\t\"*\": allTypes,\n\t\t\t\ttext: \"text/plain\",\n\t\t\t\thtml: \"text/html\",\n\t\t\t\txml: \"application/xml, text/xml\",\n\t\t\t\tjson: \"application/json, text/javascript\"\n\t\t\t},\n\n\t\t\tcontents: {\n\t\t\t\txml: /\\bxml\\b/,\n\t\t\t\thtml: /\\bhtml/,\n\t\t\t\tjson: /\\bjson\\b/\n\t\t\t},\n\n\t\t\tresponseFields: {\n\t\t\t\txml: \"responseXML\",\n\t\t\t\ttext: \"responseText\",\n\t\t\t\tjson: \"responseJSON\"\n\t\t\t},\n\n\t\t\t// Data converters\n\t\t\t// Keys separate source (or catchall \"*\") and destination types with a single space\n\t\t\tconverters: {\n\n\t\t\t\t// Convert anything to text\n\t\t\t\t\"* text\": String,\n\n\t\t\t\t// Text to html (true = no transformation)\n\t\t\t\t\"text html\": true,\n\n\t\t\t\t// Evaluate text as a json expression\n\t\t\t\t\"text json\": JSON.parse,\n\n\t\t\t\t// Parse text as xml\n\t\t\t\t\"text xml\": jQuery.parseXML\n\t\t\t},\n\n\t\t\t// For options that shouldn't be deep extended:\n\t\t\t// you can add your own custom options here if\n\t\t\t// and when you create one that shouldn't be\n\t\t\t// deep extended (see ajaxExtend)\n\t\t\tflatOptions: {\n\t\t\t\turl: true,\n\t\t\t\tcontext: true\n\t\t\t}\n\t\t},\n\n\t\t// Creates a full fledged settings object into target\n\t\t// with both ajaxSettings and settings fields.\n\t\t// If target is omitted, writes into ajaxSettings.\n\t\tajaxSetup: function (target, settings) {\n\t\t\treturn settings ?\n\n\t\t\t\t// Building a settings object\n\t\t\t\tajaxExtend(ajaxExtend(target, jQuery.ajaxSettings), settings) :\n\n\t\t\t\t// Extending ajaxSettings\n\t\t\t\tajaxExtend(jQuery.ajaxSettings, target);\n\t\t},\n\n\t\tajaxPrefilter: addToPrefiltersOrTransports(prefilters),\n\t\tajaxTransport: addToPrefiltersOrTransports(transports),\n\n\t\t// Main method\n\t\tajax: function (url, options) {\n\n\t\t\t// If url is an object, simulate pre-1.5 signature\n\t\t\tif (typeof url === \"object\") {\n\t\t\t\toptions = url;\n\t\t\t\turl = undefined;\n\t\t\t}\n\n\t\t\t// Force options to be an object\n\t\t\toptions = options || {};\n\n\t\t\tvar transport,\n\n\t\t\t\t// URL without anti-cache param\n\t\t\t\tcacheURL,\n\n\t\t\t\t// Response headers\n\t\t\t\tresponseHeadersString,\n\t\t\t\tresponseHeaders,\n\n\t\t\t\t// timeout handle\n\t\t\t\ttimeoutTimer,\n\n\t\t\t\t// Url cleanup var\n\t\t\t\turlAnchor,\n\n\t\t\t\t// Request state (becomes false upon send and true upon completion)\n\t\t\t\tcompleted,\n\n\t\t\t\t// To know if global events are to be dispatched\n\t\t\t\tfireGlobals,\n\n\t\t\t\t// Loop variable\n\t\t\t\ti,\n\n\t\t\t\t// uncached part of the url\n\t\t\t\tuncached,\n\n\t\t\t\t// Create the final options object\n\t\t\t\ts = jQuery.ajaxSetup({}, options),\n\n\t\t\t\t// Callbacks context\n\t\t\t\tcallbackContext = s.context || s,\n\n\t\t\t\t// Context for global events is callbackContext if it is a DOM node or jQuery collection\n\t\t\t\tglobalEventContext = s.context &&\n\t\t\t\t\t(callbackContext.nodeType || callbackContext.jquery) ?\n\t\t\t\t\tjQuery(callbackContext) :\n\t\t\t\t\tjQuery.event,\n\n\t\t\t\t// Deferreds\n\t\t\t\tdeferred = jQuery.Deferred(),\n\t\t\t\tcompleteDeferred = jQuery.Callbacks(\"once memory\"),\n\n\t\t\t\t// Status-dependent callbacks\n\t\t\t\tstatusCode = s.statusCode || {},\n\n\t\t\t\t// Headers (they are sent all at once)\n\t\t\t\trequestHeaders = {},\n\t\t\t\trequestHeadersNames = {},\n\n\t\t\t\t// Default abort message\n\t\t\t\tstrAbort = \"canceled\",\n\n\t\t\t\t// Fake xhr\n\t\t\t\tjqXHR = {\n\t\t\t\t\treadyState: 0,\n\n\t\t\t\t\t// Builds headers hashtable if needed\n\t\t\t\t\tgetResponseHeader: function (key) {\n\t\t\t\t\t\tvar match;\n\t\t\t\t\t\tif (completed) {\n\t\t\t\t\t\t\tif (!responseHeaders) {\n\t\t\t\t\t\t\t\tresponseHeaders = {};\n\t\t\t\t\t\t\t\twhile ((match = rheaders.exec(responseHeadersString))) {\n\t\t\t\t\t\t\t\t\tresponseHeaders[match[1].toLowerCase() + \" \"] =\n\t\t\t\t\t\t\t\t\t\t(responseHeaders[match[1].toLowerCase() + \" \"] || [])\n\t\t\t\t\t\t\t\t\t\t\t.concat(match[2]);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tmatch = responseHeaders[key.toLowerCase() + \" \"];\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn match == null ? null : match.join(\", \");\n\t\t\t\t\t},\n\n\t\t\t\t\t// Raw string\n\t\t\t\t\tgetAllResponseHeaders: function () {\n\t\t\t\t\t\treturn completed ? responseHeadersString : null;\n\t\t\t\t\t},\n\n\t\t\t\t\t// Caches the header\n\t\t\t\t\tsetRequestHeader: function (name, value) {\n\t\t\t\t\t\tif (completed == null) {\n\t\t\t\t\t\t\tname = requestHeadersNames[name.toLowerCase()] =\n\t\t\t\t\t\t\t\trequestHeadersNames[name.toLowerCase()] || name;\n\t\t\t\t\t\t\trequestHeaders[name] = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn this;\n\t\t\t\t\t},\n\n\t\t\t\t\t// Overrides response content-type header\n\t\t\t\t\toverrideMimeType: function (type) {\n\t\t\t\t\t\tif (completed == null) {\n\t\t\t\t\t\t\ts.mimeType = type;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn this;\n\t\t\t\t\t},\n\n\t\t\t\t\t// Status-dependent callbacks\n\t\t\t\t\tstatusCode: function (map) {\n\t\t\t\t\t\tvar code;\n\t\t\t\t\t\tif (map) {\n\t\t\t\t\t\t\tif (completed) {\n\n\t\t\t\t\t\t\t\t// Execute the appropriate callbacks\n\t\t\t\t\t\t\t\tjqXHR.always(map[jqXHR.status]);\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t// Lazy-add the new callbacks in a way that preserves old ones\n\t\t\t\t\t\t\t\tfor (code in map) {\n\t\t\t\t\t\t\t\t\tstatusCode[code] = [statusCode[code], map[code]];\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn this;\n\t\t\t\t\t},\n\n\t\t\t\t\t// Cancel the request\n\t\t\t\t\tabort: function (statusText) {\n\t\t\t\t\t\tvar finalText = statusText || strAbort;\n\t\t\t\t\t\tif (transport) {\n\t\t\t\t\t\t\ttransport.abort(finalText);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdone(0, finalText);\n\t\t\t\t\t\treturn this;\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t// Attach deferreds\n\t\t\tdeferred.promise(jqXHR);\n\n\t\t\t// Add protocol if not provided (prefilters might expect it)\n\t\t\t// Handle falsy url in the settings object (trac-10093: consistency with old signature)\n\t\t\t// We also use the url parameter if available\n\t\t\ts.url = ((url || s.url || location.href) + \"\")\n\t\t\t\t.replace(rprotocol, location.protocol + \"//\");\n\n\t\t\t// Alias method option to type as per ticket trac-12004\n\t\t\ts.type = options.method || options.type || s.method || s.type;\n\n\t\t\t// Extract dataTypes list\n\t\t\ts.dataTypes = (s.dataType || \"*\").toLowerCase().match(rnothtmlwhite) || [\"\"];\n\n\t\t\t// A cross-domain request is in order when the origin doesn't match the current origin.\n\t\t\tif (s.crossDomain == null) {\n\t\t\t\turlAnchor = document.createElement(\"a\");\n\n\t\t\t\t// Support: IE <=8 - 11, Edge 12 - 15\n\t\t\t\t// IE throws exception on accessing the href property if url is malformed,\n\t\t\t\t// e.g. http://example.com:80x/\n\t\t\t\ttry {\n\t\t\t\t\turlAnchor.href = s.url;\n\n\t\t\t\t\t// Support: IE <=8 - 11 only\n\t\t\t\t\t// Anchor's host property isn't correctly set when s.url is relative\n\t\t\t\t\turlAnchor.href = urlAnchor.href;\n\t\t\t\t\ts.crossDomain = originAnchor.protocol + \"//\" + originAnchor.host !==\n\t\t\t\t\t\turlAnchor.protocol + \"//\" + urlAnchor.host;\n\t\t\t\t} catch (e) {\n\n\t\t\t\t\t// If there is an error parsing the URL, assume it is crossDomain,\n\t\t\t\t\t// it can be rejected by the transport if it is invalid\n\t\t\t\t\ts.crossDomain = true;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Convert data if not already a string\n\t\t\tif (s.data && s.processData && typeof s.data !== \"string\") {\n\t\t\t\ts.data = jQuery.param(s.data, s.traditional);\n\t\t\t}\n\n\t\t\t// Apply prefilters\n\t\t\tinspectPrefiltersOrTransports(prefilters, s, options, jqXHR);\n\n\t\t\t// If request was aborted inside a prefilter, stop there\n\t\t\tif (completed) {\n\t\t\t\treturn jqXHR;\n\t\t\t}\n\n\t\t\t// We can fire global events as of now if asked to\n\t\t\t// Don't fire events if jQuery.event is undefined in an AMD-usage scenario (trac-15118)\n\t\t\tfireGlobals = jQuery.event && s.global;\n\n\t\t\t// Watch for a new set of requests\n\t\t\tif (fireGlobals && jQuery.active++ === 0) {\n\t\t\t\tjQuery.event.trigger(\"ajaxStart\");\n\t\t\t}\n\n\t\t\t// Uppercase the type\n\t\t\ts.type = s.type.toUpperCase();\n\n\t\t\t// Determine if request has content\n\t\t\ts.hasContent = !rnoContent.test(s.type);\n\n\t\t\t// Save the URL in case we're toying with the If-Modified-Since\n\t\t\t// and/or If-None-Match header later on\n\t\t\t// Remove hash to simplify url manipulation\n\t\t\tcacheURL = s.url.replace(rhash, \"\");\n\n\t\t\t// More options handling for requests with no content\n\t\t\tif (!s.hasContent) {\n\n\t\t\t\t// Remember the hash so we can put it back\n\t\t\t\tuncached = s.url.slice(cacheURL.length);\n\n\t\t\t\t// If data is available and should be processed, append data to url\n\t\t\t\tif (s.data && (s.processData || typeof s.data === \"string\")) {\n\t\t\t\t\tcacheURL += (rquery.test(cacheURL) ? \"&\" : \"?\") + s.data;\n\n\t\t\t\t\t// trac-9682: remove data so that it's not used in an eventual retry\n\t\t\t\t\tdelete s.data;\n\t\t\t\t}\n\n\t\t\t\t// Add or update anti-cache param if needed\n\t\t\t\tif (s.cache === false) {\n\t\t\t\t\tcacheURL = cacheURL.replace(rantiCache, \"$1\");\n\t\t\t\t\tuncached = (rquery.test(cacheURL) ? \"&\" : \"?\") + \"_=\" + (nonce.guid++) +\n\t\t\t\t\t\tuncached;\n\t\t\t\t}\n\n\t\t\t\t// Put hash and anti-cache on the URL that will be requested (gh-1732)\n\t\t\t\ts.url = cacheURL + uncached;\n\n\t\t\t\t// Change '%20' to '+' if this is encoded form body content (gh-2658)\n\t\t\t} else if (s.data && s.processData &&\n\t\t\t\t(s.contentType || \"\").indexOf(\"application/x-www-form-urlencoded\") === 0) {\n\t\t\t\ts.data = s.data.replace(r20, \"+\");\n\t\t\t}\n\n\t\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\t\tif (s.ifModified) {\n\t\t\t\tif (jQuery.lastModified[cacheURL]) {\n\t\t\t\t\tjqXHR.setRequestHeader(\"If-Modified-Since\", jQuery.lastModified[cacheURL]);\n\t\t\t\t}\n\t\t\t\tif (jQuery.etag[cacheURL]) {\n\t\t\t\t\tjqXHR.setRequestHeader(\"If-None-Match\", jQuery.etag[cacheURL]);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Set the correct header, if data is being sent\n\t\t\tif (s.data && s.hasContent && s.contentType !== false || options.contentType) {\n\t\t\t\tjqXHR.setRequestHeader(\"Content-Type\", s.contentType);\n\t\t\t}\n\n\t\t\t// Set the Accepts header for the server, depending on the dataType\n\t\t\tjqXHR.setRequestHeader(\n\t\t\t\t\"Accept\",\n\t\t\t\ts.dataTypes[0] && s.accepts[s.dataTypes[0]] ?\n\t\t\t\t\ts.accepts[s.dataTypes[0]] +\n\t\t\t\t\t(s.dataTypes[0] !== \"*\" ? \", \" + allTypes + \"; q=0.01\" : \"\") :\n\t\t\t\t\ts.accepts[\"*\"]\n\t\t\t);\n\n\t\t\t// Check for headers option\n\t\t\tfor (i in s.headers) {\n\t\t\t\tjqXHR.setRequestHeader(i, s.headers[i]);\n\t\t\t}\n\n\t\t\t// Allow custom headers/mimetypes and early abort\n\t\t\tif (s.beforeSend &&\n\t\t\t\t(s.beforeSend.call(callbackContext, jqXHR, s) === false || completed)) {\n\n\t\t\t\t// Abort if not done already and return\n\t\t\t\treturn jqXHR.abort();\n\t\t\t}\n\n\t\t\t// Aborting is no longer a cancellation\n\t\t\tstrAbort = \"abort\";\n\n\t\t\t// Install callbacks on deferreds\n\t\t\tcompleteDeferred.add(s.complete);\n\t\t\tjqXHR.done(s.success);\n\t\t\tjqXHR.fail(s.error);\n\n\t\t\t// Get transport\n\t\t\ttransport = inspectPrefiltersOrTransports(transports, s, options, jqXHR);\n\n\t\t\t// If no transport, we auto-abort\n\t\t\tif (!transport) {\n\t\t\t\tdone(-1, \"No Transport\");\n\t\t\t} else {\n\t\t\t\tjqXHR.readyState = 1;\n\n\t\t\t\t// Send global event\n\t\t\t\tif (fireGlobals) {\n\t\t\t\t\tglobalEventContext.trigger(\"ajaxSend\", [jqXHR, s]);\n\t\t\t\t}\n\n\t\t\t\t// If request was aborted inside ajaxSend, stop there\n\t\t\t\tif (completed) {\n\t\t\t\t\treturn jqXHR;\n\t\t\t\t}\n\n\t\t\t\t// Timeout\n\t\t\t\tif (s.async && s.timeout > 0) {\n\t\t\t\t\ttimeoutTimer = window.setTimeout(function () {\n\t\t\t\t\t\tjqXHR.abort(\"timeout\");\n\t\t\t\t\t}, s.timeout);\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tcompleted = false;\n\t\t\t\t\ttransport.send(requestHeaders, done);\n\t\t\t\t} catch (e) {\n\n\t\t\t\t\t// Rethrow post-completion exceptions\n\t\t\t\t\tif (completed) {\n\t\t\t\t\t\tthrow e;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Propagate others as results\n\t\t\t\t\tdone(-1, e);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Callback for when everything is done\n\t\t\tfunction done(status, nativeStatusText, responses, headers) {\n\t\t\t\tvar isSuccess, success, error, response, modified,\n\t\t\t\t\tstatusText = nativeStatusText;\n\n\t\t\t\t// Ignore repeat invocations\n\t\t\t\tif (completed) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tcompleted = true;\n\n\t\t\t\t// Clear timeout if it exists\n\t\t\t\tif (timeoutTimer) {\n\t\t\t\t\twindow.clearTimeout(timeoutTimer);\n\t\t\t\t}\n\n\t\t\t\t// Dereference transport for early garbage collection\n\t\t\t\t// (no matter how long the jqXHR object will be used)\n\t\t\t\ttransport = undefined;\n\n\t\t\t\t// Cache response headers\n\t\t\t\tresponseHeadersString = headers || \"\";\n\n\t\t\t\t// Set readyState\n\t\t\t\tjqXHR.readyState = status > 0 ? 4 : 0;\n\n\t\t\t\t// Determine if successful\n\t\t\t\tisSuccess = status >= 200 && status < 300 || status === 304;\n\n\t\t\t\t// Get response data\n\t\t\t\tif (responses) {\n\t\t\t\t\tresponse = ajaxHandleResponses(s, jqXHR, responses);\n\t\t\t\t}\n\n\t\t\t\t// Use a noop converter for missing script but not if jsonp\n\t\t\t\tif (!isSuccess &&\n\t\t\t\t\tjQuery.inArray(\"script\", s.dataTypes) > -1 &&\n\t\t\t\t\tjQuery.inArray(\"json\", s.dataTypes) < 0) {\n\t\t\t\t\ts.converters[\"text script\"] = function () { };\n\t\t\t\t}\n\n\t\t\t\t// Convert no matter what (that way responseXXX fields are always set)\n\t\t\t\tresponse = ajaxConvert(s, response, jqXHR, isSuccess);\n\n\t\t\t\t// If successful, handle type chaining\n\t\t\t\tif (isSuccess) {\n\n\t\t\t\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\t\t\t\tif (s.ifModified) {\n\t\t\t\t\t\tmodified = jqXHR.getResponseHeader(\"Last-Modified\");\n\t\t\t\t\t\tif (modified) {\n\t\t\t\t\t\t\tjQuery.lastModified[cacheURL] = modified;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmodified = jqXHR.getResponseHeader(\"etag\");\n\t\t\t\t\t\tif (modified) {\n\t\t\t\t\t\t\tjQuery.etag[cacheURL] = modified;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// if no content\n\t\t\t\t\tif (status === 204 || s.type === \"HEAD\") {\n\t\t\t\t\t\tstatusText = \"nocontent\";\n\n\t\t\t\t\t\t// if not modified\n\t\t\t\t\t} else if (status === 304) {\n\t\t\t\t\t\tstatusText = \"notmodified\";\n\n\t\t\t\t\t\t// If we have data, let's convert it\n\t\t\t\t\t} else {\n\t\t\t\t\t\tstatusText = response.state;\n\t\t\t\t\t\tsuccess = response.data;\n\t\t\t\t\t\terror = response.error;\n\t\t\t\t\t\tisSuccess = !error;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\n\t\t\t\t\t// Extract error from statusText and normalize for non-aborts\n\t\t\t\t\terror = statusText;\n\t\t\t\t\tif (status || !statusText) {\n\t\t\t\t\t\tstatusText = \"error\";\n\t\t\t\t\t\tif (status < 0) {\n\t\t\t\t\t\t\tstatus = 0;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Set data for the fake xhr object\n\t\t\t\tjqXHR.status = status;\n\t\t\t\tjqXHR.statusText = (nativeStatusText || statusText) + \"\";\n\n\t\t\t\t// Success/Error\n\t\t\t\tif (isSuccess) {\n\t\t\t\t\tdeferred.resolveWith(callbackContext, [success, statusText, jqXHR]);\n\t\t\t\t} else {\n\t\t\t\t\tdeferred.rejectWith(callbackContext, [jqXHR, statusText, error]);\n\t\t\t\t}\n\n\t\t\t\t// Status-dependent callbacks\n\t\t\t\tjqXHR.statusCode(statusCode);\n\t\t\t\tstatusCode = undefined;\n\n\t\t\t\tif (fireGlobals) {\n\t\t\t\t\tglobalEventContext.trigger(isSuccess ? \"ajaxSuccess\" : \"ajaxError\",\n\t\t\t\t\t\t[jqXHR, s, isSuccess ? success : error]);\n\t\t\t\t}\n\n\t\t\t\t// Complete\n\t\t\t\tcompleteDeferred.fireWith(callbackContext, [jqXHR, statusText]);\n\n\t\t\t\tif (fireGlobals) {\n\t\t\t\t\tglobalEventContext.trigger(\"ajaxComplete\", [jqXHR, s]);\n\n\t\t\t\t\t// Handle the global AJAX counter\n\t\t\t\t\tif (!(--jQuery.active)) {\n\t\t\t\t\t\tjQuery.event.trigger(\"ajaxStop\");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn jqXHR;\n\t\t},\n\n\t\tgetJSON: function (url, data, callback) {\n\t\t\treturn jQuery.get(url, data, callback, \"json\");\n\t\t},\n\n\t\tgetScript: function (url, callback) {\n\t\t\treturn jQuery.get(url, undefined, callback, \"script\");\n\t\t}\n\t});\n\n\tjQuery.each([\"get\", \"post\"], function (_i, method) {\n\t\tjQuery[method] = function (url, data, callback, type) {\n\n\t\t\t// Shift arguments if data argument was omitted\n\t\t\tif (isFunction(data)) {\n\t\t\t\ttype = type || callback;\n\t\t\t\tcallback = data;\n\t\t\t\tdata = undefined;\n\t\t\t}\n\n\t\t\t// The url can be an options object (which then must have .url)\n\t\t\treturn jQuery.ajax(jQuery.extend({\n\t\t\t\turl: url,\n\t\t\t\ttype: method,\n\t\t\t\tdataType: type,\n\t\t\t\tdata: data,\n\t\t\t\tsuccess: callback\n\t\t\t}, jQuery.isPlainObject(url) && url));\n\t\t};\n\t});\n\n\tjQuery.ajaxPrefilter(function (s) {\n\t\tvar i;\n\t\tfor (i in s.headers) {\n\t\t\tif (i.toLowerCase() === \"content-type\") {\n\t\t\t\ts.contentType = s.headers[i] || \"\";\n\t\t\t}\n\t\t}\n\t});\n\n\n\tjQuery._evalUrl = function (url, options, doc) {\n\t\treturn jQuery.ajax({\n\t\t\turl: url,\n\n\t\t\t// Make this explicit, since user can override this through ajaxSetup (trac-11264)\n\t\t\ttype: \"GET\",\n\t\t\tdataType: \"script\",\n\t\t\tcache: true,\n\t\t\tasync: false,\n\t\t\tglobal: false,\n\n\t\t\t// Only evaluate the response if it is successful (gh-4126)\n\t\t\t// dataFilter is not invoked for failure responses, so using it instead\n\t\t\t// of the default converter is kludgy but it works.\n\t\t\tconverters: {\n\t\t\t\t\"text script\": function () { }\n\t\t\t},\n\t\t\tdataFilter: function (response) {\n\t\t\t\tjQuery.globalEval(response, options, doc);\n\t\t\t}\n\t\t});\n\t};\n\n\n\tjQuery.fn.extend({\n\t\twrapAll: function (html) {\n\t\t\tvar wrap;\n\n\t\t\tif (this[0]) {\n\t\t\t\tif (isFunction(html)) {\n\t\t\t\t\thtml = html.call(this[0]);\n\t\t\t\t}\n\n\t\t\t\t// The elements to wrap the target around\n\t\t\t\twrap = jQuery(html, this[0].ownerDocument).eq(0).clone(true);\n\n\t\t\t\tif (this[0].parentNode) {\n\t\t\t\t\twrap.insertBefore(this[0]);\n\t\t\t\t}\n\n\t\t\t\twrap.map(function () {\n\t\t\t\t\tvar elem = this;\n\n\t\t\t\t\twhile (elem.firstElementChild) {\n\t\t\t\t\t\telem = elem.firstElementChild;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn elem;\n\t\t\t\t}).append(this);\n\t\t\t}\n\n\t\t\treturn this;\n\t\t},\n\n\t\twrapInner: function (html) {\n\t\t\tif (isFunction(html)) {\n\t\t\t\treturn this.each(function (i) {\n\t\t\t\t\tjQuery(this).wrapInner(html.call(this, i));\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn this.each(function () {\n\t\t\t\tvar self = jQuery(this),\n\t\t\t\t\tcontents = self.contents();\n\n\t\t\t\tif (contents.length) {\n\t\t\t\t\tcontents.wrapAll(html);\n\n\t\t\t\t} else {\n\t\t\t\t\tself.append(html);\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\twrap: function (html) {\n\t\t\tvar htmlIsFunction = isFunction(html);\n\n\t\t\treturn this.each(function (i) {\n\t\t\t\tjQuery(this).wrapAll(htmlIsFunction ? html.call(this, i) : html);\n\t\t\t});\n\t\t},\n\n\t\tunwrap: function (selector) {\n\t\t\tthis.parent(selector).not(\"body\").each(function () {\n\t\t\t\tjQuery(this).replaceWith(this.childNodes);\n\t\t\t});\n\t\t\treturn this;\n\t\t}\n\t});\n\n\n\tjQuery.expr.pseudos.hidden = function (elem) {\n\t\treturn !jQuery.expr.pseudos.visible(elem);\n\t};\n\tjQuery.expr.pseudos.visible = function (elem) {\n\t\treturn !!(elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length);\n\t};\n\n\n\n\n\tjQuery.ajaxSettings.xhr = function () {\n\t\ttry {\n\t\t\treturn new window.XMLHttpRequest();\n\t\t} catch (e) { }\n\t};\n\n\tvar xhrSuccessStatus = {\n\n\t\t// File protocol always yields status code 0, assume 200\n\t\t0: 200,\n\n\t\t// Support: IE <=9 only\n\t\t// trac-1450: sometimes IE returns 1223 when it should be 204\n\t\t1223: 204\n\t},\n\t\txhrSupported = jQuery.ajaxSettings.xhr();\n\n\tsupport.cors = !!xhrSupported && (\"withCredentials\" in xhrSupported);\n\tsupport.ajax = xhrSupported = !!xhrSupported;\n\n\tjQuery.ajaxTransport(function (options) {\n\t\tvar callback, errorCallback;\n\n\t\t// Cross domain only allowed if supported through XMLHttpRequest\n\t\tif (support.cors || xhrSupported && !options.crossDomain) {\n\t\t\treturn {\n\t\t\t\tsend: function (headers, complete) {\n\t\t\t\t\tvar i,\n\t\t\t\t\t\txhr = options.xhr();\n\n\t\t\t\t\txhr.open(\n\t\t\t\t\t\toptions.type,\n\t\t\t\t\t\toptions.url,\n\t\t\t\t\t\toptions.async,\n\t\t\t\t\t\toptions.username,\n\t\t\t\t\t\toptions.password\n\t\t\t\t\t);\n\n\t\t\t\t\t// Apply custom fields if provided\n\t\t\t\t\tif (options.xhrFields) {\n\t\t\t\t\t\tfor (i in options.xhrFields) {\n\t\t\t\t\t\t\txhr[i] = options.xhrFields[i];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Override mime type if needed\n\t\t\t\t\tif (options.mimeType && xhr.overrideMimeType) {\n\t\t\t\t\t\txhr.overrideMimeType(options.mimeType);\n\t\t\t\t\t}\n\n\t\t\t\t\t// X-Requested-With header\n\t\t\t\t\t// For cross-domain requests, seeing as conditions for a preflight are\n\t\t\t\t\t// akin to a jigsaw puzzle, we simply never set it to be sure.\n\t\t\t\t\t// (it can always be set on a per-request basis or even using ajaxSetup)\n\t\t\t\t\t// For same-domain requests, won't change header if already provided.\n\t\t\t\t\tif (!options.crossDomain && !headers[\"X-Requested-With\"]) {\n\t\t\t\t\t\theaders[\"X-Requested-With\"] = \"XMLHttpRequest\";\n\t\t\t\t\t}\n\n\t\t\t\t\t// Set headers\n\t\t\t\t\tfor (i in headers) {\n\t\t\t\t\t\txhr.setRequestHeader(i, headers[i]);\n\t\t\t\t\t}\n\n\t\t\t\t\t// Callback\n\t\t\t\t\tcallback = function (type) {\n\t\t\t\t\t\treturn function () {\n\t\t\t\t\t\t\tif (callback) {\n\t\t\t\t\t\t\t\tcallback = errorCallback = xhr.onload =\n\t\t\t\t\t\t\t\t\txhr.onerror = xhr.onabort = xhr.ontimeout =\n\t\t\t\t\t\t\t\t\txhr.onreadystatechange = null;\n\n\t\t\t\t\t\t\t\tif (type === \"abort\") {\n\t\t\t\t\t\t\t\t\txhr.abort();\n\t\t\t\t\t\t\t\t} else if (type === \"error\") {\n\n\t\t\t\t\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t\t\t\t\t// On a manual native abort, IE9 throws\n\t\t\t\t\t\t\t\t\t// errors on any property access that is not readyState\n\t\t\t\t\t\t\t\t\tif (typeof xhr.status !== \"number\") {\n\t\t\t\t\t\t\t\t\t\tcomplete(0, \"error\");\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tcomplete(\n\n\t\t\t\t\t\t\t\t\t\t\t// File: protocol always yields status 0; see trac-8605, trac-14207\n\t\t\t\t\t\t\t\t\t\t\txhr.status,\n\t\t\t\t\t\t\t\t\t\t\txhr.statusText\n\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tcomplete(\n\t\t\t\t\t\t\t\t\t\txhrSuccessStatus[xhr.status] || xhr.status,\n\t\t\t\t\t\t\t\t\t\txhr.statusText,\n\n\t\t\t\t\t\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t\t\t\t\t\t// IE9 has no XHR2 but throws on binary (trac-11426)\n\t\t\t\t\t\t\t\t\t\t// For XHR2 non-text, let the caller handle it (gh-2498)\n\t\t\t\t\t\t\t\t\t\t(xhr.responseType || \"text\") !== \"text\" ||\n\t\t\t\t\t\t\t\t\t\t\ttypeof xhr.responseText !== \"string\" ?\n\t\t\t\t\t\t\t\t\t\t\t{ binary: xhr.response } :\n\t\t\t\t\t\t\t\t\t\t\t{ text: xhr.responseText },\n\t\t\t\t\t\t\t\t\t\txhr.getAllResponseHeaders()\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\t\t\t\t\t};\n\n\t\t\t\t\t// Listen to events\n\t\t\t\t\txhr.onload = callback();\n\t\t\t\t\terrorCallback = xhr.onerror = xhr.ontimeout = callback(\"error\");\n\n\t\t\t\t\t// Support: IE 9 only\n\t\t\t\t\t// Use onreadystatechange to replace onabort\n\t\t\t\t\t// to handle uncaught aborts\n\t\t\t\t\tif (xhr.onabort !== undefined) {\n\t\t\t\t\t\txhr.onabort = errorCallback;\n\t\t\t\t\t} else {\n\t\t\t\t\t\txhr.onreadystatechange = function () {\n\n\t\t\t\t\t\t\t// Check readyState before timeout as it changes\n\t\t\t\t\t\t\tif (xhr.readyState === 4) {\n\n\t\t\t\t\t\t\t\t// Allow onerror to be called first,\n\t\t\t\t\t\t\t\t// but that will not handle a native abort\n\t\t\t\t\t\t\t\t// Also, save errorCallback to a variable\n\t\t\t\t\t\t\t\t// as xhr.onerror cannot be accessed\n\t\t\t\t\t\t\t\twindow.setTimeout(function () {\n\t\t\t\t\t\t\t\t\tif (callback) {\n\t\t\t\t\t\t\t\t\t\terrorCallback();\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\t// Create the abort callback\n\t\t\t\t\tcallback = callback(\"abort\");\n\n\t\t\t\t\ttry {\n\n\t\t\t\t\t\t// Do send the request (this may raise an exception)\n\t\t\t\t\t\txhr.send(options.hasContent && options.data || null);\n\t\t\t\t\t} catch (e) {\n\n\t\t\t\t\t\t// trac-14683: Only rethrow if this hasn't been notified as an error yet\n\t\t\t\t\t\tif (callback) {\n\t\t\t\t\t\t\tthrow e;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\t\tabort: function () {\n\t\t\t\t\tif (callback) {\n\t\t\t\t\t\tcallback();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t});\n\n\n\n\n\t// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432)\n\tjQuery.ajaxPrefilter(function (s) {\n\t\tif (s.crossDomain) {\n\t\t\ts.contents.script = false;\n\t\t}\n\t});\n\n\t// Install script dataType\n\tjQuery.ajaxSetup({\n\t\taccepts: {\n\t\t\tscript: \"text/javascript, application/javascript, \" +\n\t\t\t\t\"application/ecmascript, application/x-ecmascript\"\n\t\t},\n\t\tcontents: {\n\t\t\tscript: /\\b(?:java|ecma)script\\b/\n\t\t},\n\t\tconverters: {\n\t\t\t\"text script\": function (text) {\n\t\t\t\tjQuery.globalEval(text);\n\t\t\t\treturn text;\n\t\t\t}\n\t\t}\n\t});\n\n\t// Handle cache's special case and crossDomain\n\tjQuery.ajaxPrefilter(\"script\", function (s) {\n\t\tif (s.cache === undefined) {\n\t\t\ts.cache = false;\n\t\t}\n\t\tif (s.crossDomain) {\n\t\t\ts.type = \"GET\";\n\t\t}\n\t});\n\n\t// Bind script tag hack transport\n\tjQuery.ajaxTransport(\"script\", function (s) {\n\n\t\t// This transport only deals with cross domain or forced-by-attrs requests\n\t\tif (s.crossDomain || s.scriptAttrs) {\n\t\t\tvar script, callback;\n\t\t\treturn {\n\t\t\t\tsend: function (_, complete) {\n\t\t\t\t\tscript = jQuery(\"<script>\")\n\t\t\t\t\t\t.attr(s.scriptAttrs || {})\n\t\t\t\t\t\t.prop({ charset: s.scriptCharset, src: s.url })\n\t\t\t\t\t\t.on(\"load error\", callback = function (evt) {\n\t\t\t\t\t\t\tscript.remove();\n\t\t\t\t\t\t\tcallback = null;\n\t\t\t\t\t\t\tif (evt) {\n\t\t\t\t\t\t\t\tcomplete(evt.type === \"error\" ? 404 : 200, evt.type);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\n\t\t\t\t\t// Use native DOM manipulation to avoid our domManip AJAX trickery\n\t\t\t\t\tdocument.head.appendChild(script[0]);\n\t\t\t\t},\n\t\t\t\tabort: function () {\n\t\t\t\t\tif (callback) {\n\t\t\t\t\t\tcallback();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t});\n\n\n\n\n\tvar oldCallbacks = [],\n\t\trjsonp = /(=)\\?(?=&|$)|\\?\\?/;\n\n\t// Default jsonp settings\n\tjQuery.ajaxSetup({\n\t\tjsonp: \"callback\",\n\t\tjsonpCallback: function () {\n\t\t\tvar callback = oldCallbacks.pop() || (jQuery.expando + \"_\" + (nonce.guid++));\n\t\t\tthis[callback] = true;\n\t\t\treturn callback;\n\t\t}\n\t});\n\n\t// Detect, normalize options and install callbacks for jsonp requests\n\tjQuery.ajaxPrefilter(\"json jsonp\", function (s, originalSettings, jqXHR) {\n\n\t\tvar callbackName, overwritten, responseContainer,\n\t\t\tjsonProp = s.jsonp !== false && (rjsonp.test(s.url) ?\n\t\t\t\t\"url\" :\n\t\t\t\ttypeof s.data === \"string\" &&\n\t\t\t\t(s.contentType || \"\")\n\t\t\t\t\t.indexOf(\"application/x-www-form-urlencoded\") === 0 &&\n\t\t\t\trjsonp.test(s.data) && \"data\"\n\t\t\t);\n\n\t\t// Handle iff the expected data type is \"jsonp\" or we have a parameter to set\n\t\tif (jsonProp || s.dataTypes[0] === \"jsonp\") {\n\n\t\t\t// Get callback name, remembering preexisting value associated with it\n\t\t\tcallbackName = s.jsonpCallback = isFunction(s.jsonpCallback) ?\n\t\t\t\ts.jsonpCallback() :\n\t\t\t\ts.jsonpCallback;\n\n\t\t\t// Insert callback into url or form data\n\t\t\tif (jsonProp) {\n\t\t\t\ts[jsonProp] = s[jsonProp].replace(rjsonp, \"$1\" + callbackName);\n\t\t\t} else if (s.jsonp !== false) {\n\t\t\t\ts.url += (rquery.test(s.url) ? \"&\" : \"?\") + s.jsonp + \"=\" + callbackName;\n\t\t\t}\n\n\t\t\t// Use data converter to retrieve json after script execution\n\t\t\ts.converters[\"script json\"] = function () {\n\t\t\t\tif (!responseContainer) {\n\t\t\t\t\tjQuery.error(callbackName + \" was not called\");\n\t\t\t\t}\n\t\t\t\treturn responseContainer[0];\n\t\t\t};\n\n\t\t\t// Force json dataType\n\t\t\ts.dataTypes[0] = \"json\";\n\n\t\t\t// Install callback\n\t\t\toverwritten = window[callbackName];\n\t\t\twindow[callbackName] = function () {\n\t\t\t\tresponseContainer = arguments;\n\t\t\t};\n\n\t\t\t// Clean-up function (fires after converters)\n\t\t\tjqXHR.always(function () {\n\n\t\t\t\t// If previous value didn't exist - remove it\n\t\t\t\tif (overwritten === undefined) {\n\t\t\t\t\tjQuery(window).removeProp(callbackName);\n\n\t\t\t\t\t// Otherwise restore preexisting value\n\t\t\t\t} else {\n\t\t\t\t\twindow[callbackName] = overwritten;\n\t\t\t\t}\n\n\t\t\t\t// Save back as free\n\t\t\t\tif (s[callbackName]) {\n\n\t\t\t\t\t// Make sure that re-using the options doesn't screw things around\n\t\t\t\t\ts.jsonpCallback = originalSettings.jsonpCallback;\n\n\t\t\t\t\t// Save the callback name for future use\n\t\t\t\t\toldCallbacks.push(callbackName);\n\t\t\t\t}\n\n\t\t\t\t// Call if it was a function and we have a response\n\t\t\t\tif (responseContainer && isFunction(overwritten)) {\n\t\t\t\t\toverwritten(responseContainer[0]);\n\t\t\t\t}\n\n\t\t\t\tresponseContainer = overwritten = undefined;\n\t\t\t});\n\n\t\t\t// Delegate to script\n\t\t\treturn \"script\";\n\t\t}\n\t});\n\n\n\n\n\t// Support: Safari 8 only\n\t// In Safari 8 documents created via document.implementation.createHTMLDocument\n\t// collapse sibling forms: the second one becomes a child of the first one.\n\t// Because of that, this security measure has to be disabled in Safari 8.\n\t// https://bugs.webkit.org/show_bug.cgi?id=137337\n\tsupport.createHTMLDocument = (function () {\n\t\tvar body = document.implementation.createHTMLDocument(\"\").body;\n\t\tbody.innerHTML = \"<form></form><form></form>\";\n\t\treturn body.childNodes.length === 2;\n\t})();\n\n\n\t// Argument \"data\" should be string of html\n\t// context (optional): If specified, the fragment will be created in this context,\n\t// defaults to document\n\t// keepScripts (optional): If true, will include scripts passed in the html string\n\tjQuery.parseHTML = function (data, context, keepScripts) {\n\t\tif (typeof data !== \"string\") {\n\t\t\treturn [];\n\t\t}\n\t\tif (typeof context === \"boolean\") {\n\t\t\tkeepScripts = context;\n\t\t\tcontext = false;\n\t\t}\n\n\t\tvar base, parsed, scripts;\n\n\t\tif (!context) {\n\n\t\t\t// Stop scripts or inline event handlers from being executed immediately\n\t\t\t// by using document.implementation\n\t\t\tif (support.createHTMLDocument) {\n\t\t\t\tcontext = document.implementation.createHTMLDocument(\"\");\n\n\t\t\t\t// Set the base href for the created document\n\t\t\t\t// so any parsed elements with URLs\n\t\t\t\t// are based on the document's URL (gh-2965)\n\t\t\t\tbase = context.createElement(\"base\");\n\t\t\t\tbase.href = document.location.href;\n\t\t\t\tcontext.head.appendChild(base);\n\t\t\t} else {\n\t\t\t\tcontext = document;\n\t\t\t}\n\t\t}\n\n\t\tparsed = rsingleTag.exec(data);\n\t\tscripts = !keepScripts && [];\n\n\t\t// Single tag\n\t\tif (parsed) {\n\t\t\treturn [context.createElement(parsed[1])];\n\t\t}\n\n\t\tparsed = buildFragment([data], context, scripts);\n\n\t\tif (scripts && scripts.length) {\n\t\t\tjQuery(scripts).remove();\n\t\t}\n\n\t\treturn jQuery.merge([], parsed.childNodes);\n\t};\n\n\n\t/**\n\t * Load a url into a page\n\t */\n\tjQuery.fn.load = function (url, params, callback) {\n\t\tvar selector, type, response,\n\t\t\tself = this,\n\t\t\toff = url.indexOf(\" \");\n\n\t\tif (off > -1) {\n\t\t\tselector = stripAndCollapse(url.slice(off));\n\t\t\turl = url.slice(0, off);\n\t\t}\n\n\t\t// If it's a function\n\t\tif (isFunction(params)) {\n\n\t\t\t// We assume that it's the callback\n\t\t\tcallback = params;\n\t\t\tparams = undefined;\n\n\t\t\t// Otherwise, build a param string\n\t\t} else if (params && typeof params === \"object\") {\n\t\t\ttype = \"POST\";\n\t\t}\n\n\t\t// If we have elements to modify, make the request\n\t\tif (self.length > 0) {\n\t\t\tjQuery.ajax({\n\t\t\t\turl: url,\n\n\t\t\t\t// If \"type\" variable is undefined, then \"GET\" method will be used.\n\t\t\t\t// Make value of this field explicit since\n\t\t\t\t// user can override it through ajaxSetup method\n\t\t\t\ttype: type || \"GET\",\n\t\t\t\tdataType: \"html\",\n\t\t\t\tdata: params\n\t\t\t}).done(function (responseText) {\n\n\t\t\t\t// Save response for use in complete callback\n\t\t\t\tresponse = arguments;\n\n\t\t\t\tself.html(selector ?\n\n\t\t\t\t\t// If a selector was specified, locate the right elements in a dummy div\n\t\t\t\t\t// Exclude scripts to avoid IE 'Permission Denied' errors\n\t\t\t\t\tjQuery(\"<div>\").append(jQuery.parseHTML(responseText)).find(selector) :\n\n\t\t\t\t\t// Otherwise use the full result\n\t\t\t\t\tresponseText);\n\n\t\t\t\t// If the request succeeds, this function gets \"data\", \"status\", \"jqXHR\"\n\t\t\t\t// but they are ignored because response was set above.\n\t\t\t\t// If it fails, this function gets \"jqXHR\", \"status\", \"error\"\n\t\t\t}).always(callback && function (jqXHR, status) {\n\t\t\t\tself.each(function () {\n\t\t\t\t\tcallback.apply(this, response || [jqXHR.responseText, status, jqXHR]);\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\n\t\treturn this;\n\t};\n\n\n\n\n\tjQuery.expr.pseudos.animated = function (elem) {\n\t\treturn jQuery.grep(jQuery.timers, function (fn) {\n\t\t\treturn elem === fn.elem;\n\t\t}).length;\n\t};\n\n\n\n\n\tjQuery.offset = {\n\t\tsetOffset: function (elem, options, i) {\n\t\t\tvar curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition,\n\t\t\t\tposition = jQuery.css(elem, \"position\"),\n\t\t\t\tcurElem = jQuery(elem),\n\t\t\t\tprops = {};\n\n\t\t\t// Set position first, in-case top/left are set even on static elem\n\t\t\tif (position === \"static\") {\n\t\t\t\telem.style.position = \"relative\";\n\t\t\t}\n\n\t\t\tcurOffset = curElem.offset();\n\t\t\tcurCSSTop = jQuery.css(elem, \"top\");\n\t\t\tcurCSSLeft = jQuery.css(elem, \"left\");\n\t\t\tcalculatePosition = (position === \"absolute\" || position === \"fixed\") &&\n\t\t\t\t(curCSSTop + curCSSLeft).indexOf(\"auto\") > -1;\n\n\t\t\t// Need to be able to calculate position if either\n\t\t\t// top or left is auto and position is either absolute or fixed\n\t\t\tif (calculatePosition) {\n\t\t\t\tcurPosition = curElem.position();\n\t\t\t\tcurTop = curPosition.top;\n\t\t\t\tcurLeft = curPosition.left;\n\n\t\t\t} else {\n\t\t\t\tcurTop = parseFloat(curCSSTop) || 0;\n\t\t\t\tcurLeft = parseFloat(curCSSLeft) || 0;\n\t\t\t}\n\n\t\t\tif (isFunction(options)) {\n\n\t\t\t\t// Use jQuery.extend here to allow modification of coordinates argument (gh-1848)\n\t\t\t\toptions = options.call(elem, i, jQuery.extend({}, curOffset));\n\t\t\t}\n\n\t\t\tif (options.top != null) {\n\t\t\t\tprops.top = (options.top - curOffset.top) + curTop;\n\t\t\t}\n\t\t\tif (options.left != null) {\n\t\t\t\tprops.left = (options.left - curOffset.left) + curLeft;\n\t\t\t}\n\n\t\t\tif (\"using\" in options) {\n\t\t\t\toptions.using.call(elem, props);\n\n\t\t\t} else {\n\t\t\t\tcurElem.css(props);\n\t\t\t}\n\t\t}\n\t};\n\n\tjQuery.fn.extend({\n\n\t\t// offset() relates an element's border box to the document origin\n\t\toffset: function (options) {\n\n\t\t\t// Preserve chaining for setter\n\t\t\tif (arguments.length) {\n\t\t\t\treturn options === undefined ?\n\t\t\t\t\tthis :\n\t\t\t\t\tthis.each(function (i) {\n\t\t\t\t\t\tjQuery.offset.setOffset(this, options, i);\n\t\t\t\t\t});\n\t\t\t}\n\n\t\t\tvar rect, win,\n\t\t\t\telem = this[0];\n\n\t\t\tif (!elem) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Return zeros for disconnected and hidden (display: none) elements (gh-2310)\n\t\t\t// Support: IE <=11 only\n\t\t\t// Running getBoundingClientRect on a\n\t\t\t// disconnected node in IE throws an error\n\t\t\tif (!elem.getClientRects().length) {\n\t\t\t\treturn { top: 0, left: 0 };\n\t\t\t}\n\n\t\t\t// Get document-relative position by adding viewport scroll to viewport-relative gBCR\n\t\t\trect = elem.getBoundingClientRect();\n\t\t\twin = elem.ownerDocument.defaultView;\n\t\t\treturn {\n\t\t\t\ttop: rect.top + win.pageYOffset,\n\t\t\t\tleft: rect.left + win.pageXOffset\n\t\t\t};\n\t\t},\n\n\t\t// position() relates an element's margin box to its offset parent's padding box\n\t\t// This corresponds to the behavior of CSS absolute positioning\n\t\tposition: function () {\n\t\t\tif (!this[0]) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar offsetParent, offset, doc,\n\t\t\t\telem = this[0],\n\t\t\t\tparentOffset = { top: 0, left: 0 };\n\n\t\t\t// position:fixed elements are offset from the viewport, which itself always has zero offset\n\t\t\tif (jQuery.css(elem, \"position\") === \"fixed\") {\n\n\t\t\t\t// Assume position:fixed implies availability of getBoundingClientRect\n\t\t\t\toffset = elem.getBoundingClientRect();\n\n\t\t\t} else {\n\t\t\t\toffset = this.offset();\n\n\t\t\t\t// Account for the *real* offset parent, which can be the document or its root element\n\t\t\t\t// when a statically positioned element is identified\n\t\t\t\tdoc = elem.ownerDocument;\n\t\t\t\toffsetParent = elem.offsetParent || doc.documentElement;\n\t\t\t\twhile (offsetParent &&\n\t\t\t\t\t(offsetParent === doc.body || offsetParent === doc.documentElement) &&\n\t\t\t\t\tjQuery.css(offsetParent, \"position\") === \"static\") {\n\n\t\t\t\t\toffsetParent = offsetParent.parentNode;\n\t\t\t\t}\n\t\t\t\tif (offsetParent && offsetParent !== elem && offsetParent.nodeType === 1) {\n\n\t\t\t\t\t// Incorporate borders into its offset, since they are outside its content origin\n\t\t\t\t\tparentOffset = jQuery(offsetParent).offset();\n\t\t\t\t\tparentOffset.top += jQuery.css(offsetParent, \"borderTopWidth\", true);\n\t\t\t\t\tparentOffset.left += jQuery.css(offsetParent, \"borderLeftWidth\", true);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Subtract parent offsets and element margins\n\t\t\treturn {\n\t\t\t\ttop: offset.top - parentOffset.top - jQuery.css(elem, \"marginTop\", true),\n\t\t\t\tleft: offset.left - parentOffset.left - jQuery.css(elem, \"marginLeft\", true)\n\t\t\t};\n\t\t},\n\n\t\t// This method will return documentElement in the following cases:\n\t\t// 1) For the element inside the iframe without offsetParent, this method will return\n\t\t//    documentElement of the parent window\n\t\t// 2) For the hidden or detached element\n\t\t// 3) For body or html element, i.e. in case of the html node - it will return itself\n\t\t//\n\t\t// but those exceptions were never presented as a real life use-cases\n\t\t// and might be considered as more preferable results.\n\t\t//\n\t\t// This logic, however, is not guaranteed and can change at any point in the future\n\t\toffsetParent: function () {\n\t\t\treturn this.map(function () {\n\t\t\t\tvar offsetParent = this.offsetParent;\n\n\t\t\t\twhile (offsetParent && jQuery.css(offsetParent, \"position\") === \"static\") {\n\t\t\t\t\toffsetParent = offsetParent.offsetParent;\n\t\t\t\t}\n\n\t\t\t\treturn offsetParent || documentElement;\n\t\t\t});\n\t\t}\n\t});\n\n\t// Create scrollLeft and scrollTop methods\n\tjQuery.each({ scrollLeft: \"pageXOffset\", scrollTop: \"pageYOffset\" }, function (method, prop) {\n\t\tvar top = \"pageYOffset\" === prop;\n\n\t\tjQuery.fn[method] = function (val) {\n\t\t\treturn access(this, function (elem, method, val) {\n\n\t\t\t\t// Coalesce documents and windows\n\t\t\t\tvar win;\n\t\t\t\tif (isWindow(elem)) {\n\t\t\t\t\twin = elem;\n\t\t\t\t} else if (elem.nodeType === 9) {\n\t\t\t\t\twin = elem.defaultView;\n\t\t\t\t}\n\n\t\t\t\tif (val === undefined) {\n\t\t\t\t\treturn win ? win[prop] : elem[method];\n\t\t\t\t}\n\n\t\t\t\tif (win) {\n\t\t\t\t\twin.scrollTo(\n\t\t\t\t\t\t!top ? val : win.pageXOffset,\n\t\t\t\t\t\ttop ? val : win.pageYOffset\n\t\t\t\t\t);\n\n\t\t\t\t} else {\n\t\t\t\t\telem[method] = val;\n\t\t\t\t}\n\t\t\t}, method, val, arguments.length);\n\t\t};\n\t});\n\n\t// Support: Safari <=7 - 9.1, Chrome <=37 - 49\n\t// Add the top/left cssHooks using jQuery.fn.position\n\t// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084\n\t// Blink bug: https://bugs.chromium.org/p/chromium/issues/detail?id=589347\n\t// getComputedStyle returns percent when specified for top/left/bottom/right;\n\t// rather than make the css module depend on the offset module, just check for it here\n\tjQuery.each([\"top\", \"left\"], function (_i, prop) {\n\t\tjQuery.cssHooks[prop] = addGetHookIf(support.pixelPosition,\n\t\t\tfunction (elem, computed) {\n\t\t\t\tif (computed) {\n\t\t\t\t\tcomputed = curCSS(elem, prop);\n\n\t\t\t\t\t// If curCSS returns percentage, fallback to offset\n\t\t\t\t\treturn rnumnonpx.test(computed) ?\n\t\t\t\t\t\tjQuery(elem).position()[prop] + \"px\" :\n\t\t\t\t\t\tcomputed;\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\t});\n\n\n\t// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods\n\tjQuery.each({ Height: \"height\", Width: \"width\" }, function (name, type) {\n\t\tjQuery.each({\n\t\t\tpadding: \"inner\" + name,\n\t\t\tcontent: type,\n\t\t\t\"\": \"outer\" + name\n\t\t}, function (defaultExtra, funcName) {\n\n\t\t\t// Margin is only for outerHeight, outerWidth\n\t\t\tjQuery.fn[funcName] = function (margin, value) {\n\t\t\t\tvar chainable = arguments.length && (defaultExtra || typeof margin !== \"boolean\"),\n\t\t\t\t\textra = defaultExtra || (margin === true || value === true ? \"margin\" : \"border\");\n\n\t\t\t\treturn access(this, function (elem, type, value) {\n\t\t\t\t\tvar doc;\n\n\t\t\t\t\tif (isWindow(elem)) {\n\n\t\t\t\t\t\t// $( window ).outerWidth/Height return w/h including scrollbars (gh-1729)\n\t\t\t\t\t\treturn funcName.indexOf(\"outer\") === 0 ?\n\t\t\t\t\t\t\telem[\"inner\" + name] :\n\t\t\t\t\t\t\telem.document.documentElement[\"client\" + name];\n\t\t\t\t\t}\n\n\t\t\t\t\t// Get document width or height\n\t\t\t\t\tif (elem.nodeType === 9) {\n\t\t\t\t\t\tdoc = elem.documentElement;\n\n\t\t\t\t\t\t// Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height],\n\t\t\t\t\t\t// whichever is greatest\n\t\t\t\t\t\treturn Math.max(\n\t\t\t\t\t\t\telem.body[\"scroll\" + name], doc[\"scroll\" + name],\n\t\t\t\t\t\t\telem.body[\"offset\" + name], doc[\"offset\" + name],\n\t\t\t\t\t\t\tdoc[\"client\" + name]\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\n\t\t\t\t\treturn value === undefined ?\n\n\t\t\t\t\t\t// Get width or height on the element, requesting but not forcing parseFloat\n\t\t\t\t\t\tjQuery.css(elem, type, extra) :\n\n\t\t\t\t\t\t// Set width or height on the element\n\t\t\t\t\t\tjQuery.style(elem, type, value, extra);\n\t\t\t\t}, type, chainable ? margin : undefined, chainable);\n\t\t\t};\n\t\t});\n\t});\n\n\n\tjQuery.each([\n\t\t\"ajaxStart\",\n\t\t\"ajaxStop\",\n\t\t\"ajaxComplete\",\n\t\t\"ajaxError\",\n\t\t\"ajaxSuccess\",\n\t\t\"ajaxSend\"\n\t], function (_i, type) {\n\t\tjQuery.fn[type] = function (fn) {\n\t\t\treturn this.on(type, fn);\n\t\t};\n\t});\n\n\n\n\n\tjQuery.fn.extend({\n\n\t\tbind: function (types, data, fn) {\n\t\t\treturn this.on(types, null, data, fn);\n\t\t},\n\t\tunbind: function (types, fn) {\n\t\t\treturn this.off(types, null, fn);\n\t\t},\n\n\t\tdelegate: function (selector, types, data, fn) {\n\t\t\treturn this.on(types, selector, data, fn);\n\t\t},\n\t\tundelegate: function (selector, types, fn) {\n\n\t\t\t// ( namespace ) or ( selector, types [, fn] )\n\t\t\treturn arguments.length === 1 ?\n\t\t\t\tthis.off(selector, \"**\") :\n\t\t\t\tthis.off(types, selector || \"**\", fn);\n\t\t},\n\n\t\thover: function (fnOver, fnOut) {\n\t\t\treturn this.mouseenter(fnOver).mouseleave(fnOut || fnOver);\n\t\t}\n\t});\n\n\tjQuery.each(\n\t\t(\"blur focus focusin focusout resize scroll click dblclick \" +\n\t\t\t\"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave \" +\n\t\t\t\"change select submit keydown keypress keyup contextmenu\").split(\" \"),\n\t\tfunction (_i, name) {\n\n\t\t\t// Handle event binding\n\t\t\tjQuery.fn[name] = function (data, fn) {\n\t\t\t\treturn arguments.length > 0 ?\n\t\t\t\t\tthis.on(name, null, data, fn) :\n\t\t\t\t\tthis.trigger(name);\n\t\t\t};\n\t\t}\n\t);\n\n\n\n\n\t// Support: Android <=4.0 only\n\t// Make sure we trim BOM and NBSP\n\t// Require that the \"whitespace run\" starts from a non-whitespace\n\t// to avoid O(N^2) behavior when the engine would try matching \"\\s+$\" at each space position.\n\tvar rtrim = /^[\\s\\uFEFF\\xA0]+|([^\\s\\uFEFF\\xA0])[\\s\\uFEFF\\xA0]+$/g;\n\n\t// Bind a function to a context, optionally partially applying any\n\t// arguments.\n\t// jQuery.proxy is deprecated to promote standards (specifically Function#bind)\n\t// However, it is not slated for removal any time soon\n\tjQuery.proxy = function (fn, context) {\n\t\tvar tmp, args, proxy;\n\n\t\tif (typeof context === \"string\") {\n\t\t\ttmp = fn[context];\n\t\t\tcontext = fn;\n\t\t\tfn = tmp;\n\t\t}\n\n\t\t// Quick check to determine if target is callable, in the spec\n\t\t// this throws a TypeError, but we will just return undefined.\n\t\tif (!isFunction(fn)) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\t// Simulated bind\n\t\targs = slice.call(arguments, 2);\n\t\tproxy = function () {\n\t\t\treturn fn.apply(context || this, args.concat(slice.call(arguments)));\n\t\t};\n\n\t\t// Set the guid of unique handler to the same of original handler, so it can be removed\n\t\tproxy.guid = fn.guid = fn.guid || jQuery.guid++;\n\n\t\treturn proxy;\n\t};\n\n\tjQuery.holdReady = function (hold) {\n\t\tif (hold) {\n\t\t\tjQuery.readyWait++;\n\t\t} else {\n\t\t\tjQuery.ready(true);\n\t\t}\n\t};\n\tjQuery.isArray = Array.isArray;\n\tjQuery.parseJSON = JSON.parse;\n\tjQuery.nodeName = nodeName;\n\tjQuery.isFunction = isFunction;\n\tjQuery.isWindow = isWindow;\n\tjQuery.camelCase = camelCase;\n\tjQuery.type = toType;\n\n\tjQuery.now = Date.now;\n\n\tjQuery.isNumeric = function (obj) {\n\n\t\t// As of jQuery 3.0, isNumeric is limited to\n\t\t// strings and numbers (primitives or objects)\n\t\t// that can be coerced to finite numbers (gh-2662)\n\t\tvar type = jQuery.type(obj);\n\t\treturn (type === \"number\" || type === \"string\") &&\n\n\t\t\t// parseFloat NaNs numeric-cast false positives (\"\")\n\t\t\t// ...but misinterprets leading-number strings, particularly hex literals (\"0x...\")\n\t\t\t// subtraction forces infinities to NaN\n\t\t\t!isNaN(obj - parseFloat(obj));\n\t};\n\n\tjQuery.trim = function (text) {\n\t\treturn text == null ?\n\t\t\t\"\" :\n\t\t\t(text + \"\").replace(rtrim, \"$1\");\n\t};\n\n\n\n\t// Register as a named AMD module, since jQuery can be concatenated with other\n\t// files that may use define, but not via a proper concatenation script that\n\t// understands anonymous AMD modules. A named AMD is safest and most robust\n\t// way to register. Lowercase jquery is used because AMD module names are\n\t// derived from file names, and jQuery is normally delivered in a lowercase\n\t// file name. Do this after creating the global so that if an AMD module wants\n\t// to call noConflict to hide this version of jQuery, it will work.\n\n\t// Note that for maximum portability, libraries that are not jQuery should\n\t// declare themselves as anonymous modules, and avoid setting a global if an\n\t// AMD loader is present. jQuery is a special case. For more information, see\n\t// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon\n\n\tif (typeof define === \"function\" && define.amd) {\n\t\tdefine(\"jquery\", [], function () {\n\t\t\treturn jQuery;\n\t\t});\n\t}\n\n\n\n\n\tvar\n\n\t\t// Map over jQuery in case of overwrite\n\t\t_jQuery = window.jQuery,\n\n\t\t// Map over the $ in case of overwrite\n\t\t_$ = window.$;\n\n\tjQuery.noConflict = function (deep) {\n\t\tif (window.$ === jQuery) {\n\t\t\twindow.$ = _$;\n\t\t}\n\n\t\tif (deep && window.jQuery === jQuery) {\n\t\t\twindow.jQuery = _jQuery;\n\t\t}\n\n\t\treturn jQuery;\n\t};\n\n\t// Expose jQuery and $ identifiers, even in AMD\n\t// (trac-7102#comment:10, https://github.com/jquery/jquery/pull/557)\n\t// and CommonJS for browser emulators (trac-13566)\n\tif (typeof noGlobal === \"undefined\") {\n\t\twindow.jQuery = window.$ = jQuery;\n\t}\n\n\n\n\n\treturn jQuery;\n});"
  },
  {
    "path": "src/sourceDev.WebApp/SharedThemes/lumen/Shared/_Layout.cshtml",
    "content": "﻿@inject ISiteContextResolver siteResolver\n@inject ICoreThemeHelper themeHelper\n@{\n    var themeSettings = themeHelper.GetThemeSettings();\n    @*\n        These settings can be set by a main view to show additional columns.\n        Views that push content into the optional sections SideNav, AsidePrimary, and AsideSecondary\n        are obligated to set the needed viewtate property to true to show the section,\n        otherwise an error will occur.\n        The sideNav column also supports a toggle so it can be hidden and toggled visible even though it renders.\n    *@\n    bool sideNavVisible = true.Equals(ViewData[\"SideNavVisible\"]);\n    string sideNavToggleClass = ViewData[\"SideNavToggle\"]?.ToString() ?? \"collapse\";\n    bool asidePrimaryVisible = true.Equals(ViewData[\"AsidePrimaryVisible\"]);\n    bool asideSecondaryVisible = true.Equals(ViewData[\"AsideSecondaryVisible\"]);\n    var Tenant = await siteResolver.ResolveSite(Context.Request.Host.Host, Context.Request.Path);\n    var siteRoot = \"\";\n    if (!string.IsNullOrWhiteSpace(Tenant.SiteFolderName)) { siteRoot = \"/\" + Tenant.SiteFolderName; }\n    \n}\n<!DOCTYPE html>\n<html lang=\"@CultureInfo.CurrentUICulture.Name\">\n<head>\n    <meta charset=\"utf-8\" />\n    <title>@ViewData[\"Title\"] - @(Tenant?.SiteName ?? \"Sample\")</title>\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1, shrink-to-fit=no\">\n    @RenderSection(\"Meta\", required: false)\n    <environment names=\"Development\">\n        <link rel=\"stylesheet\" href=\"~/css/bootstrap.css\" cs-resolve-theme-resource=\"true\" cs-shared-theme=\"true\" cs-tenant=\"@Tenant\" />\n        <link rel=\"stylesheet\" href=\"~/css/fontawesome-all.min.css\" cs-resolve-theme-resource=\"true\" cs-shared-theme=\"true\" cs-tenant=\"@Tenant\" />\n        <link rel=\"stylesheet\" href=\"~/css/site.css\" cs-resolve-theme-resource=\"true\" cs-shared-theme=\"true\" cs-tenant=\"@Tenant\" asp-append-version=\"true\" />\n    </environment>\n    <environment names=\"Staging,Production\">\n        <link rel=\"stylesheet\" href=\"~/css/bootstrap.min.css\" cs-resolve-theme-resource=\"true\" cs-shared-theme=\"true\" cs-tenant=\"@Tenant\" />\n        <link rel=\"stylesheet\" href=\"~/css/fontawesome-all.min.css\" cs-resolve-theme-resource=\"true\" cs-shared-theme=\"true\" cs-tenant=\"@Tenant\" />\n        <link rel=\"stylesheet\" href=\"~/css/site.min.css\" cs-resolve-theme-resource=\"true\" cs-shared-theme=\"true\" cs-tenant=\"@Tenant\" asp-append-version=\"true\" />\n    </environment>\n    @RenderSection(\"Styles\", required: false)    \n    \n    <google-analytics profile-id=\"@Tenant.GoogleAnalyticsProfileId\" user-id=\"@User.GetUserId()\"></google-analytics>\n    <base href=\"@Context.Request.Path\" />\n</head>\n<body class=\"d-flex flex-column @ViewData[\"BodyClass\"]\">\n    <header class=\"bg-white\">\n        <a id=\"skippy\" class=\"visually-hidden visually-hidden-focusable\" href=\"#content\">\n            <div class=\"container\">\n                <span class=\"skiplink-text\">Skip to main content</span>\n            </div>\n        </a>\n        <div class=\"fixed-top container-fluid brand-header bg-white\">\n            <div class=\"d-flex align-items-center bg-white\">\n                @if (!string.IsNullOrWhiteSpace(Tenant.LogoUrl))\n                {\n                    <div>\n                         <partial name=\"SiteLogoPartial\" model=\"@Tenant\" />\n                    </div>\n                }\n                @if (Tenant.ShowSiteNameLink)\n                {\n                    <div class=\"align-self-center pt-4 pt-sm-0\">\n                         <partial name=\"SiteTitlePartial\" model=\"@Tenant\" />\n                    </div>\n                }\n                @if (!string.IsNullOrWhiteSpace(Tenant.HeaderContent))\n                {\n                    <div class=\"flex-fill align-self-center pt-3 d-none d-sm-block\">\n                        <partial name=\"SiteHeaderPartial\" />\n                    </div>\n                }\n            </div>\n        </div>\n        <nav class=\"navbar navbar-expand-md navbar-dark fixed-top bg-dark pt-0 pb-0\">\n            <button class=\"navbar-toggler\" type=\"button\" data-bs-toggle=\"collapse\" data-bs-target=\"#navbarNavDropdown\" aria-controls=\"navbarNavDropdown\" aria-expanded=\"false\" aria-label=\"Toggle navigation\">\n                <span class=\"navbar-toggler-icon\"></span>\n            </button>\n\n            <div class=\"collapse navbar-collapse bg-dark ps-2\" id=\"navbarNavDropdown\">\n                @await Component.InvokeAsync(\"Navigation\", new { viewName = \"Bootstrap5TopNavWithDropdowns\", filterName = NamedNavigationFilters.TopNav, startingNodeKey = \"\" })\n                <partial name=\"_LoginPartialWithDropdowns\" />\n            </div>\n        </nav>\n    </header>\n    <div id=\"wrapper\" class=\"container-fluid cs-container flex-fill\">\n        @await Component.InvokeAsync(\"Navigation\", new { viewName = \"Bootstrap5Breadcrumbs\", filterName = NamedNavigationFilters.Breadcrumbs, startingNodeKey = \"\" })\n        <div class=\"row\">\n            <main id=\"content\" class=\"col order-3\">\n                <partial name=\"AlertsPartial\" />\n                <partial name=\"_CookieConsentPartial\" />\n                <partial name=\"_AutoLogoutWarningPartial\" />\n                @RenderBody()\n            </main>\n            @if (sideNavVisible)\n            {\n                <nav id=\"sidenavmenu\" class=\" col col-3 order-1 @sideNavToggleClass\">\n                    @RenderSection(\"SideNav\", required: false)\n                </nav>\n\n            }\n            @if (asideSecondaryVisible)\n            {\n                <aside id=\"asideSecondary\" class=\"col col-1 order-2\">\n                    @RenderSection(\"AsideSecondary\", required: false)\n                </aside>\n\n            }\n            @if (asidePrimaryVisible)\n            {\n                <aside id=\"asidePrimary\" class=\"col-12 col-md-3 col-sm-12  col-sm-12 order-4\">\n                    @RenderSection(\"AsidePrimary\", required: false)\n                </aside>\n\n            }\n        </div>\n    </div>\n    <footer class=\"sticky-bottom border pt-2 h-100 flex-wrap flex-grow justify-content-center\">\n        <div class=\"w-100 text-center\">\n            <partial name=\"SiteFooterPartial\" />\n        </div>\n        <div class=\"d-flex flex-wrap flex-grow justify-content-center\">\n            <div class=\"p-2\">\n            <ul class=\"list-unstyled d-flex flex-wrap\">\n                @if (Tenant != null && !string.IsNullOrWhiteSpace(Tenant.PrivacyPolicy))\n                {\n                    <li class=\"border-left ps-2 me-2\">\n                        <a asp-controller=\"Privacy\" asp-action=\"Index\">Privacy Policy</a>\n                    </li>\n                }\n                <li class=\"border-left ps-2 me-2\">\n                    @* you are free to remove the powered by cloudscribe link but we appreciate it if you choose to keep it! *@\n                    <a class=\"text-nowrap\" target=\"_blank\" href=\"https://www.cloudscribe.com/?utm_source=@Context.Request.Host.Value&amp;utm_medium=referral&amp;utm_campaign=poweredbycloudscribe\">Powered by cloudscribe</a>\n                </li>\n            </ul>\n        </div>\n         <div class=\"ps-sm-2  text-center w-100\"><span class=\"text-nowrap\">Copyright &copy; @DateTime.Now.Year</span><span class=\"d-none d-sm-inline\"> - </span><span> @(Tenant?.SiteName ?? \"Sample\")</span></div>\n        <partial name=\"_CookieConsentRevokePartial\" />\n        </div>\n    </footer>\n    @RenderSection(\"Toolbar\", required: false)\n    <environment names=\"Development\">\n        <script src=\"~/js/jquery.js\" cs-resolve-theme-resource=\"true\" cs-shared-theme=\"true\" cs-tenant=\"@Tenant\"></script>\n        <script src=\"~/js/bootstrap.bundle.js\" cs-resolve-theme-resource=\"true\" cs-shared-theme=\"true\" cs-tenant=\"@Tenant\"></script>\n        <script src=\"~/cr/js/bs4.smartmenus.min.js\"></script>\n    </environment>\n    <environment names=\"Staging,Production\">\n        <script src=\"~/js/jquery.min.js\" cs-resolve-theme-resource=\"true\" cs-shared-theme=\"true\" cs-tenant=\"@Tenant\"></script>\n        <script src=\"~/js/bootstrap.bundle.min.js\" cs-resolve-theme-resource=\"true\" cs-shared-theme=\"true\" cs-tenant=\"@Tenant\"></script>\n        <script src=\"~/cr/js/bs4.smartmenus.min.js\"></script>\n    </environment>\n    @RenderSection(\"Bottom\", required: false)\n    @RenderSection(\"Scripts\", required: false)     \n    @Html.RenderResources(\"js\") @*render any js resources declared via helpers in partial views etc*@\n    <add-this profile-id=\"@Tenant.AddThisDotComUsername\" async></add-this>\n</body>\n</html>\n"
  },
  {
    "path": "src/sourceDev.WebApp/SharedThemes/lumen/wwwroot/css/_bootswatch.scss",
    "content": "// Lumen 5.1.3\n// Bootswatch\n\n\n// Variables\n\n$web-font-path: \"https://fonts.googleapis.com/css2?family=Source+Sans+Pro:ital,wght@0,300;0,400;0,700;1,400&display=swap\" !default;\n@if $web-font-path {\n  @import url($web-font-path);\n}\n\n// Mixins\n\n@mixin shadow($width: 4px){\n  border-style: solid;\n  border-width: 0 1px $width 1px;\n}\n\n// Navbar\n\n.navbar {\n  @include shadow();\n\n  @each $color, $value in $theme-colors {\n    &.bg-#{$color} {\n      border-color: shade-color($value, 10%);\n    }\n  }\n}\n\n// Buttons\n\n.btn {\n  @include shadow();\n  text-transform: uppercase;\n\n  &:not(.disabled):hover {\n    margin-top: 1px;\n    border-bottom-width: 3px;\n  }\n\n  &:not(.disabled):active {\n    margin-top: 2px;\n    border-bottom-width: 2px;\n    @include box-shadow(none);\n  }\n\n  @each $color, $value in $theme-colors {\n    &-#{$color} {\n      &:hover,\n      &:active,\n      &:focus {\n        background-color: $value;\n      }\n\n      &,\n      &:not(.disabled):hover,\n      &:not(.disabled):active,\n      &:focus {\n        border-color: shade-color($value, 10%);\n      }\n    }\n  }\n}\n\n[class*=\"btn-outline\"] {\n  border-top-width: 1px;\n}\n\n.btn-group-vertical {\n  .btn + .btn {\n    &:hover {\n      margin-top: -1px;\n      border-top-width: 1px;\n    }\n\n    &:active {\n      margin-top: -1px;\n      border-top-width: 2px;\n    }\n  }\n}\n\n// Typography\n\n.text-secondary {\n  color: $gray-700 !important;\n}\n\n.blockquote-footer {\n  color: $gray-600;\n}\n\n// Forms\n\n.form-control {\n  box-shadow: inset 0 2px 0 rgba(0, 0, 0, .075);\n}\n\n// Navs\n\n.nav {\n  .open > a,\n  .open > a:hover,\n  .open > a:focus {\n    border-color: transparent;\n  }\n}\n\n.nav-tabs {\n  .nav-link {\n    color: $body-color;\n\n    &,\n    &.disabled,\n    &.disabled:hover,\n    &.disabled:focus {\n      margin-top: 6px;\n      border-color: $nav-tabs-border-color;\n      transition: padding-bottom .2s ease-in-out, margin-top .2s ease-in-out, border-bottom .2s ease-in-out;\n    }\n\n    &:not(.disabled):hover,\n    &:not(.disabled):focus,\n    &.active {\n      padding-bottom: add(.5rem, 6px);\n      border-bottom-color: transparent;\n      margin-top: 0;\n    }\n  }\n\n  &.nav-justified > li {\n    vertical-align: bottom;\n  }\n}\n\n.dropdown-menu {\n  margin-top: 0;\n  @include shadow();\n  border-top-width: 1px;\n  @include box-shadow(none);\n}\n\n.breadcrumb {\n  border-color: shade-color($breadcrumb-bg, 10%);\n  @include shadow();\n}\n\n.pagination {\n  > li > a,\n  > li > span {\n    position: relative;\n    top: 0;\n    @include shadow();\n    color: $pagination-color;\n    font-weight: 700;\n    text-transform: uppercase;\n\n    &:hover,\n    &:focus {\n      top: 1px;\n      border-bottom-width: 3px;\n      text-decoration: none;\n    }\n\n    &:active {\n      top: 2px;\n      border-bottom-width: 2px;\n    }\n  }\n\n  > .disabled > a,\n  > .disabled > span {\n    &:hover {\n      top: 0;\n      @include shadow();\n    }\n\n    &:active {\n      top: 0;\n      @include shadow();\n    }\n  }\n}\n\n.pager {\n  > li > a,\n  > li > span,\n  > .disabled > a,\n  > .disabled > span {\n    &,\n    &:hover,\n    &:active {\n      border-left-width: 2px;\n      border-right-width: 2px;\n    }\n  }\n}\n\n// Indicators\n\n.btn-close {\n  text-decoration: none;\n  opacity: .4;\n\n  &:hover,\n  &:focus {\n    opacity: 1;\n  }\n}\n\n.alert {\n  color: $white;\n  @include shadow();\n\n  &-primary {\n    background-color: $primary;\n    border-color: shade-color($primary, 10%);\n  }\n\n  &-secondary {\n    background-color: $secondary;\n    border-color: shade-color($secondary, 10%);\n  }\n\n  &-success {\n    background-color: $success;\n    border-color: shade-color($success, 10%);\n  }\n\n  &-info {\n    background-color: $info;\n    border-color: shade-color($info, 10%);\n  }\n\n  &-danger {\n    background-color: $danger;\n    border-color: shade-color($danger, 10%);\n  }\n\n  &-warning {\n    background-color: $warning;\n    border-color: shade-color($warning, 10%);\n  }\n\n  &-dark {\n    background-color: $dark;\n    border-color: shade-color($dark, 10%);\n  }\n\n  &-light {\n    background-color: $light;\n    border-color: shade-color($light, 10%);\n  }\n\n  .alert-link {\n    font-weight: 400;\n    color: $white;\n    text-decoration: underline;\n  }\n\n  &-secondary,\n  &-light {\n    &,\n    a,\n    .alert-link {\n      color: $body-color;\n    }\n  }\n}\n\n.badge {\n  &.bg-secondary,\n  &.bg-light {\n    color: $dark;\n  }\n}\n\n// Containers\n\na.list-group-item {\n  &-success {\n    &.active {\n      background-color: $success;\n    }\n\n    &.active:hover,\n    &.active:focus {\n      background-color: shade-color($success, 10%);\n    }\n  }\n\n  &-warning {\n    &.active {\n      background-color: $warning;\n    }\n\n    &.active:hover,\n    &.active:focus {\n      background-color: shade-color($warning, 10%);\n    }\n  }\n\n  &-danger {\n    &.active {\n      background-color: $danger;\n    }\n\n    &.active:hover,\n    &.active:focus {\n      background-color: shade-color($danger, 10%);\n    }\n  }\n}\n\n.modal,\n.toast {\n  .btn-close {\n    background-image: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23000'><path d='M.293.293a1 1 0 011.414 0L8 6.586 14.293.293a1 1 0 111.414 1.414L9.414 8l6.293 6.293a1 1 0 01-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 01-1.414-1.414L6.586 8 .293 1.707a1 1 0 010-1.414z'/></svg>\");\n  }\n}\n"
  },
  {
    "path": "src/sourceDev.WebApp/SharedThemes/lumen/wwwroot/css/_variables.scss",
    "content": "// Lumen 5.1.3\n// Bootswatch\n\n$theme: \"lumen\" !default;\n\n//\n// Color system\n//\n\n$white:    #fff !default;\n$gray-100: #f6f6f6 !default;\n$gray-200: #f0f0f0 !default;\n$gray-300: #dee2e6 !default;\n$gray-400: #ced4da !default;\n$gray-500: #adb5bd !default;\n$gray-600: #999 !default;\n$gray-700: #555 !default;\n$gray-800: #333 !default;\n$gray-900: #222 !default;\n$black:    #000 !default;\n\n$blue:    #158cba !default;\n$indigo:  #6610f2 !default;\n$purple:  #6f42c1 !default;\n$pink:    #e83e8c !default;\n$red:     #ff4136 !default;\n$orange:  #fd7e14 !default;\n$yellow:  #ff851b !default;\n$green:   #28b62c !default;\n$teal:    #20c997 !default;\n$cyan:    #75caeb !default;\n\n$primary:       $blue !default;\n$secondary:     $gray-200 !default;\n$success:       $green !default;\n$info:          $cyan !default;\n$warning:       $yellow !default;\n$danger:        $red !default;\n$light:         $gray-100 !default;\n$dark:          $gray-700 !default;\n\n$min-contrast-ratio:   1.75 !default;\n\n// Fonts\n\n// stylelint-disable-next-line value-keyword-case\n$font-family-sans-serif:      \"Source Sans Pro\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\" !default;\n\n// Tables\n\n$table-bg-scale:              0 !default;\n\n// Buttons\n\n$btn-font-weight:             700 !default;\n\n// Dropdowns\n\n$dropdown-link-color:         rgba(0, 0, 0, .5) !default;\n\n// Navs\n\n$nav-tabs-border-color:             $gray-200 !default;\n$nav-tabs-link-hover-border-color:  $nav-tabs-border-color !default;\n$nav-tabs-link-active-color:        $gray-900 !default;\n$nav-tabs-link-active-border-color: $nav-tabs-border-color !default;\n\n// Pagination\n\n$pagination-color:                  $gray-700 !default;\n$pagination-bg:                     $gray-200 !default;\n$pagination-hover-color:            $pagination-color !default;\n$pagination-hover-bg:               $pagination-bg !default;\n$pagination-active-border-color:    darken($primary, 5%) !default;\n$pagination-disabled-color:         $gray-600 !default;\n$pagination-disabled-bg:            $pagination-bg !default;\n\n// Breadcrumbs\n\n$breadcrumb-padding-y:              .375rem !default;\n$breadcrumb-padding-x:              .75rem !default;\n$breadcrumb-bg:                     $pagination-bg !default;\n$breadcrumb-border-radius:          .25rem !default;\n\n// Modals\n\n$modal-content-border-color:        rgba($black, .1) !default;\n\n// Close\n\n$btn-close-color:            $white !default;\n$btn-close-opacity:          .4 !default;\n$btn-close-hover-opacity:    1 !default;\n"
  },
  {
    "path": "src/sourceDev.WebApp/SharedThemes/lumen/wwwroot/css/bootstrap.css",
    "content": "/*!\n * Bootswatch v5.1.3\n * Homepage: https://bootswatch.com\n * Copyright 2012-2021 Thomas Park\n * Licensed under MIT\n * Based on Bootstrap\n*/\n/*!\n * Bootstrap v5.1.3 (https://getbootstrap.com/)\n * Copyright 2011-2021 The Bootstrap Authors\n * Copyright 2011-2021 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n@import url(\"https://fonts.googleapis.com/css2?family=Source+Sans+Pro:ital,wght@0,300;0,400;0,700;1,400&display=swap\");\n:root {\n  --bs-blue: #158cba;\n  --bs-indigo: #6610f2;\n  --bs-purple: #6f42c1;\n  --bs-pink: #e83e8c;\n  --bs-red: #ff4136;\n  --bs-orange: #fd7e14;\n  --bs-yellow: #ff851b;\n  --bs-green: #28b62c;\n  --bs-teal: #20c997;\n  --bs-cyan: #75caeb;\n  --bs-white: #fff;\n  --bs-gray: #999;\n  --bs-gray-dark: #333;\n  --bs-gray-100: #f6f6f6;\n  --bs-gray-200: #f0f0f0;\n  --bs-gray-300: #dee2e6;\n  --bs-gray-400: #ced4da;\n  --bs-gray-500: #adb5bd;\n  --bs-gray-600: #999;\n  --bs-gray-700: #555;\n  --bs-gray-800: #333;\n  --bs-gray-900: #222;\n  --bs-primary: #158cba;\n  --bs-secondary: #f0f0f0;\n  --bs-success: #28b62c;\n  --bs-info: #75caeb;\n  --bs-warning: #ff851b;\n  --bs-danger: #ff4136;\n  --bs-light: #f6f6f6;\n  --bs-dark: #555;\n  --bs-primary-rgb: 21, 140, 186;\n  --bs-secondary-rgb: 240, 240, 240;\n  --bs-success-rgb: 40, 182, 44;\n  --bs-info-rgb: 117, 202, 235;\n  --bs-warning-rgb: 255, 133, 27;\n  --bs-danger-rgb: 255, 65, 54;\n  --bs-light-rgb: 246, 246, 246;\n  --bs-dark-rgb: 85, 85, 85;\n  --bs-white-rgb: 255, 255, 255;\n  --bs-black-rgb: 0, 0, 0;\n  --bs-body-color-rgb: 34, 34, 34;\n  --bs-body-bg-rgb: 255, 255, 255;\n  --bs-font-sans-serif: \"Source Sans Pro\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\";\n  --bs-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n  --bs-gradient: linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));\n  --bs-body-font-family: var(--bs-font-sans-serif);\n  --bs-body-font-size: 1rem;\n  --bs-body-font-weight: 400;\n  --bs-body-line-height: 1.5;\n  --bs-body-color: #222;\n  --bs-body-bg: #fff;\n}\n\n*,\n*::before,\n*::after {\n  box-sizing: border-box;\n}\n\n@media (prefers-reduced-motion: no-preference) {\n  :root {\n    scroll-behavior: smooth;\n  }\n}\n\nbody {\n  margin: 0;\n  font-family: var(--bs-body-font-family);\n  font-size: var(--bs-body-font-size);\n  font-weight: var(--bs-body-font-weight);\n  line-height: var(--bs-body-line-height);\n  color: var(--bs-body-color);\n  text-align: var(--bs-body-text-align);\n  background-color: var(--bs-body-bg);\n  -webkit-text-size-adjust: 100%;\n  -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\n\nhr {\n  margin: 1rem 0;\n  color: inherit;\n  background-color: currentColor;\n  border: 0;\n  opacity: 0.25;\n}\n\nhr:not([size]) {\n  height: 1px;\n}\n\nh1, .h1, h2, .h2, h3, .h3, h4, .h4, h5, .h5, h6, .h6 {\n  margin-top: 0;\n  margin-bottom: 0.5rem;\n  font-weight: 500;\n  line-height: 1.2;\n}\n\nh1, .h1 {\n  font-size: calc(1.375rem + 1.5vw);\n}\n\n@media (min-width: 1200px) {\n  h1, .h1 {\n    font-size: 2.5rem;\n  }\n}\n\nh2, .h2 {\n  font-size: calc(1.325rem + 0.9vw);\n}\n\n@media (min-width: 1200px) {\n  h2, .h2 {\n    font-size: 2rem;\n  }\n}\n\nh3, .h3 {\n  font-size: calc(1.3rem + 0.6vw);\n}\n\n@media (min-width: 1200px) {\n  h3, .h3 {\n    font-size: 1.75rem;\n  }\n}\n\nh4, .h4 {\n  font-size: calc(1.275rem + 0.3vw);\n}\n\n@media (min-width: 1200px) {\n  h4, .h4 {\n    font-size: 1.5rem;\n  }\n}\n\nh5, .h5 {\n  font-size: 1.25rem;\n}\n\nh6, .h6 {\n  font-size: 1rem;\n}\n\np {\n  margin-top: 0;\n  margin-bottom: 1rem;\n}\n\nabbr[title],\nabbr[data-bs-original-title] {\n  -webkit-text-decoration: underline dotted;\n  text-decoration: underline dotted;\n  cursor: help;\n  -webkit-text-decoration-skip-ink: none;\n  text-decoration-skip-ink: none;\n}\n\naddress {\n  margin-bottom: 1rem;\n  font-style: normal;\n  line-height: inherit;\n}\n\nol,\nul {\n  padding-left: 2rem;\n}\n\nol,\nul,\ndl {\n  margin-top: 0;\n  margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n  margin-bottom: 0;\n}\n\ndt {\n  font-weight: 700;\n}\n\ndd {\n  margin-bottom: .5rem;\n  margin-left: 0;\n}\n\nblockquote {\n  margin: 0 0 1rem;\n}\n\nb,\nstrong {\n  font-weight: bolder;\n}\n\nsmall, .small {\n  font-size: 0.875em;\n}\n\nmark, .mark {\n  padding: 0.2em;\n  background-color: #fcf8e3;\n}\n\nsub,\nsup {\n  position: relative;\n  font-size: 0.75em;\n  line-height: 0;\n  vertical-align: baseline;\n}\n\nsub {\n  bottom: -.25em;\n}\n\nsup {\n  top: -.5em;\n}\n\na {\n  color: #158cba;\n  text-decoration: underline;\n}\n\na:hover {\n  color: #117095;\n}\n\na:not([href]):not([class]), a:not([href]):not([class]):hover {\n  color: inherit;\n  text-decoration: none;\n}\n\npre,\ncode,\nkbd,\nsamp {\n  font-family: var(--bs-font-monospace);\n  font-size: 1em;\n  direction: ltr /* rtl:ignore */;\n  unicode-bidi: bidi-override;\n}\n\npre {\n  display: block;\n  margin-top: 0;\n  margin-bottom: 1rem;\n  overflow: auto;\n  font-size: 0.875em;\n}\n\npre code {\n  font-size: inherit;\n  color: inherit;\n  word-break: normal;\n}\n\ncode {\n  font-size: 0.875em;\n  color: #e83e8c;\n  word-wrap: break-word;\n}\n\na > code {\n  color: inherit;\n}\n\nkbd {\n  padding: 0.2rem 0.4rem;\n  font-size: 0.875em;\n  color: #fff;\n  background-color: #222;\n  border-radius: 0.2rem;\n}\n\nkbd kbd {\n  padding: 0;\n  font-size: 1em;\n  font-weight: 700;\n}\n\nfigure {\n  margin: 0 0 1rem;\n}\n\nimg,\nsvg {\n  vertical-align: middle;\n}\n\ntable {\n  caption-side: bottom;\n  border-collapse: collapse;\n}\n\ncaption {\n  padding-top: 0.5rem;\n  padding-bottom: 0.5rem;\n  color: #999;\n  text-align: left;\n}\n\nth {\n  text-align: inherit;\n  text-align: -webkit-match-parent;\n}\n\nthead,\ntbody,\ntfoot,\ntr,\ntd,\nth {\n  border-color: inherit;\n  border-style: solid;\n  border-width: 0;\n}\n\nlabel {\n  display: inline-block;\n}\n\nbutton {\n  border-radius: 0;\n}\n\nbutton:focus:not(:focus-visible) {\n  outline: 0;\n}\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n  margin: 0;\n  font-family: inherit;\n  font-size: inherit;\n  line-height: inherit;\n}\n\nbutton,\nselect {\n  text-transform: none;\n}\n\n[role=\"button\"] {\n  cursor: pointer;\n}\n\nselect {\n  word-wrap: normal;\n}\n\nselect:disabled {\n  opacity: 1;\n}\n\n[list]::-webkit-calendar-picker-indicator {\n  display: none;\n}\n\nbutton,\n[type=\"button\"],\n[type=\"reset\"],\n[type=\"submit\"] {\n  -webkit-appearance: button;\n}\n\nbutton:not(:disabled),\n[type=\"button\"]:not(:disabled),\n[type=\"reset\"]:not(:disabled),\n[type=\"submit\"]:not(:disabled) {\n  cursor: pointer;\n}\n\n::-moz-focus-inner {\n  padding: 0;\n  border-style: none;\n}\n\ntextarea {\n  resize: vertical;\n}\n\nfieldset {\n  min-width: 0;\n  padding: 0;\n  margin: 0;\n  border: 0;\n}\n\nlegend {\n  float: left;\n  width: 100%;\n  padding: 0;\n  margin-bottom: 0.5rem;\n  font-size: calc(1.275rem + 0.3vw);\n  line-height: inherit;\n}\n\n@media (min-width: 1200px) {\n  legend {\n    font-size: 1.5rem;\n  }\n}\n\nlegend + * {\n  clear: left;\n}\n\n::-webkit-datetime-edit-fields-wrapper,\n::-webkit-datetime-edit-text,\n::-webkit-datetime-edit-minute,\n::-webkit-datetime-edit-hour-field,\n::-webkit-datetime-edit-day-field,\n::-webkit-datetime-edit-month-field,\n::-webkit-datetime-edit-year-field {\n  padding: 0;\n}\n\n::-webkit-inner-spin-button {\n  height: auto;\n}\n\n[type=\"search\"] {\n  outline-offset: -2px;\n  -webkit-appearance: textfield;\n}\n\n/* rtl:raw:\n[type=\"tel\"],\n[type=\"url\"],\n[type=\"email\"],\n[type=\"number\"] {\n  direction: ltr;\n}\n*/\n::-webkit-search-decoration {\n  -webkit-appearance: none;\n}\n\n::-webkit-color-swatch-wrapper {\n  padding: 0;\n}\n\n::file-selector-button {\n  font: inherit;\n}\n\n::-webkit-file-upload-button {\n  font: inherit;\n  -webkit-appearance: button;\n}\n\noutput {\n  display: inline-block;\n}\n\niframe {\n  border: 0;\n}\n\nsummary {\n  display: list-item;\n  cursor: pointer;\n}\n\nprogress {\n  vertical-align: baseline;\n}\n\n[hidden] {\n  display: none !important;\n}\n\n.lead {\n  font-size: 1.25rem;\n  font-weight: 300;\n}\n\n.display-1 {\n  font-size: calc(1.625rem + 4.5vw);\n  font-weight: 300;\n  line-height: 1.2;\n}\n\n@media (min-width: 1200px) {\n  .display-1 {\n    font-size: 5rem;\n  }\n}\n\n.display-2 {\n  font-size: calc(1.575rem + 3.9vw);\n  font-weight: 300;\n  line-height: 1.2;\n}\n\n@media (min-width: 1200px) {\n  .display-2 {\n    font-size: 4.5rem;\n  }\n}\n\n.display-3 {\n  font-size: calc(1.525rem + 3.3vw);\n  font-weight: 300;\n  line-height: 1.2;\n}\n\n@media (min-width: 1200px) {\n  .display-3 {\n    font-size: 4rem;\n  }\n}\n\n.display-4 {\n  font-size: calc(1.475rem + 2.7vw);\n  font-weight: 300;\n  line-height: 1.2;\n}\n\n@media (min-width: 1200px) {\n  .display-4 {\n    font-size: 3.5rem;\n  }\n}\n\n.display-5 {\n  font-size: calc(1.425rem + 2.1vw);\n  font-weight: 300;\n  line-height: 1.2;\n}\n\n@media (min-width: 1200px) {\n  .display-5 {\n    font-size: 3rem;\n  }\n}\n\n.display-6 {\n  font-size: calc(1.375rem + 1.5vw);\n  font-weight: 300;\n  line-height: 1.2;\n}\n\n@media (min-width: 1200px) {\n  .display-6 {\n    font-size: 2.5rem;\n  }\n}\n\n.list-unstyled {\n  padding-left: 0;\n  list-style: none;\n}\n\n.list-inline {\n  padding-left: 0;\n  list-style: none;\n}\n\n.list-inline-item {\n  display: inline-block;\n}\n\n.list-inline-item:not(:last-child) {\n  margin-right: 0.5rem;\n}\n\n.initialism {\n  font-size: 0.875em;\n  text-transform: uppercase;\n}\n\n.blockquote {\n  margin-bottom: 1rem;\n  font-size: 1.25rem;\n}\n\n.blockquote > :last-child {\n  margin-bottom: 0;\n}\n\n.blockquote-footer {\n  margin-top: -1rem;\n  margin-bottom: 1rem;\n  font-size: 0.875em;\n  color: #999;\n}\n\n.blockquote-footer::before {\n  content: \"\\2014\\00A0\";\n}\n\n.img-fluid {\n  max-width: 100%;\n  height: auto;\n}\n\n.img-thumbnail {\n  padding: 0.25rem;\n  background-color: #fff;\n  border: 1px solid #dee2e6;\n  border-radius: 0.25rem;\n  max-width: 100%;\n  height: auto;\n}\n\n.figure {\n  display: inline-block;\n}\n\n.figure-img {\n  margin-bottom: 0.5rem;\n  line-height: 1;\n}\n\n.figure-caption {\n  font-size: 0.875em;\n  color: #999;\n}\n\n.container,\n.container-fluid,\n.container-sm,\n.container-md,\n.container-lg,\n.container-xl,\n.container-xxl {\n  width: 100%;\n  padding-right: var(--bs-gutter-x, 0.75rem);\n  padding-left: var(--bs-gutter-x, 0.75rem);\n  margin-right: auto;\n  margin-left: auto;\n}\n\n@media (min-width: 576px) {\n  .container, .container-sm {\n    max-width: 540px;\n  }\n}\n\n@media (min-width: 768px) {\n  .container, .container-sm, .container-md {\n    max-width: 720px;\n  }\n}\n\n@media (min-width: 992px) {\n  .container, .container-sm, .container-md, .container-lg {\n    max-width: 960px;\n  }\n}\n\n@media (min-width: 1200px) {\n  .container, .container-sm, .container-md, .container-lg, .container-xl {\n    max-width: 1140px;\n  }\n}\n\n@media (min-width: 1400px) {\n  .container, .container-sm, .container-md, .container-lg, .container-xl, .container-xxl {\n    max-width: 1320px;\n  }\n}\n\n.row {\n  --bs-gutter-x: 1.5rem;\n  --bs-gutter-y: 0;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n  flex-wrap: wrap;\n  margin-top: calc(-1 * var(--bs-gutter-y));\n  margin-right: calc(-.5 * var(--bs-gutter-x));\n  margin-left: calc(-.5 * var(--bs-gutter-x));\n}\n\n.row > * {\n  -ms-flex-negative: 0;\n  flex-shrink: 0;\n  width: 100%;\n  max-width: 100%;\n  padding-right: calc(var(--bs-gutter-x) * .5);\n  padding-left: calc(var(--bs-gutter-x) * .5);\n  margin-top: var(--bs-gutter-y);\n}\n\n.col {\n  -ms-flex: 1 0 0%;\n  flex: 1 0 0%;\n}\n\n.row-cols-auto > * {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: auto;\n}\n\n.row-cols-1 > * {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 100%;\n}\n\n.row-cols-2 > * {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 50%;\n}\n\n.row-cols-3 > * {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 33.333333%;\n}\n\n.row-cols-4 > * {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 25%;\n}\n\n.row-cols-5 > * {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 20%;\n}\n\n.row-cols-6 > * {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 16.666667%;\n}\n\n.col-auto {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: auto;\n}\n\n.col-1 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 8.333333%;\n}\n\n.col-2 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 16.666667%;\n}\n\n.col-3 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 25%;\n}\n\n.col-4 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 33.333333%;\n}\n\n.col-5 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 41.666667%;\n}\n\n.col-6 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 50%;\n}\n\n.col-7 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 58.333333%;\n}\n\n.col-8 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 66.666667%;\n}\n\n.col-9 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 75%;\n}\n\n.col-10 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 83.333333%;\n}\n\n.col-11 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 91.666667%;\n}\n\n.col-12 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 100%;\n}\n\n.offset-1 {\n  margin-left: 8.333333%;\n}\n\n.offset-2 {\n  margin-left: 16.666667%;\n}\n\n.offset-3 {\n  margin-left: 25%;\n}\n\n.offset-4 {\n  margin-left: 33.333333%;\n}\n\n.offset-5 {\n  margin-left: 41.666667%;\n}\n\n.offset-6 {\n  margin-left: 50%;\n}\n\n.offset-7 {\n  margin-left: 58.333333%;\n}\n\n.offset-8 {\n  margin-left: 66.666667%;\n}\n\n.offset-9 {\n  margin-left: 75%;\n}\n\n.offset-10 {\n  margin-left: 83.333333%;\n}\n\n.offset-11 {\n  margin-left: 91.666667%;\n}\n\n.g-0,\n.gx-0 {\n  --bs-gutter-x: 0;\n}\n\n.g-0,\n.gy-0 {\n  --bs-gutter-y: 0;\n}\n\n.g-1,\n.gx-1 {\n  --bs-gutter-x: 0.25rem;\n}\n\n.g-1,\n.gy-1 {\n  --bs-gutter-y: 0.25rem;\n}\n\n.g-2,\n.gx-2 {\n  --bs-gutter-x: 0.5rem;\n}\n\n.g-2,\n.gy-2 {\n  --bs-gutter-y: 0.5rem;\n}\n\n.g-3,\n.gx-3 {\n  --bs-gutter-x: 1rem;\n}\n\n.g-3,\n.gy-3 {\n  --bs-gutter-y: 1rem;\n}\n\n.g-4,\n.gx-4 {\n  --bs-gutter-x: 1.5rem;\n}\n\n.g-4,\n.gy-4 {\n  --bs-gutter-y: 1.5rem;\n}\n\n.g-5,\n.gx-5 {\n  --bs-gutter-x: 3rem;\n}\n\n.g-5,\n.gy-5 {\n  --bs-gutter-y: 3rem;\n}\n\n@media (min-width: 576px) {\n  .col-sm {\n    -ms-flex: 1 0 0%;\n    flex: 1 0 0%;\n  }\n  .row-cols-sm-auto > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .row-cols-sm-1 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .row-cols-sm-2 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .row-cols-sm-3 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 33.333333%;\n  }\n  .row-cols-sm-4 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .row-cols-sm-5 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 20%;\n  }\n  .row-cols-sm-6 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 16.666667%;\n  }\n  .col-sm-auto {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .col-sm-1 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 8.333333%;\n  }\n  .col-sm-2 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 16.666667%;\n  }\n  .col-sm-3 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .col-sm-4 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 33.333333%;\n  }\n  .col-sm-5 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 41.666667%;\n  }\n  .col-sm-6 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .col-sm-7 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 58.333333%;\n  }\n  .col-sm-8 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 66.666667%;\n  }\n  .col-sm-9 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 75%;\n  }\n  .col-sm-10 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 83.333333%;\n  }\n  .col-sm-11 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 91.666667%;\n  }\n  .col-sm-12 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .offset-sm-0 {\n    margin-left: 0;\n  }\n  .offset-sm-1 {\n    margin-left: 8.333333%;\n  }\n  .offset-sm-2 {\n    margin-left: 16.666667%;\n  }\n  .offset-sm-3 {\n    margin-left: 25%;\n  }\n  .offset-sm-4 {\n    margin-left: 33.333333%;\n  }\n  .offset-sm-5 {\n    margin-left: 41.666667%;\n  }\n  .offset-sm-6 {\n    margin-left: 50%;\n  }\n  .offset-sm-7 {\n    margin-left: 58.333333%;\n  }\n  .offset-sm-8 {\n    margin-left: 66.666667%;\n  }\n  .offset-sm-9 {\n    margin-left: 75%;\n  }\n  .offset-sm-10 {\n    margin-left: 83.333333%;\n  }\n  .offset-sm-11 {\n    margin-left: 91.666667%;\n  }\n  .g-sm-0,\n  .gx-sm-0 {\n    --bs-gutter-x: 0;\n  }\n  .g-sm-0,\n  .gy-sm-0 {\n    --bs-gutter-y: 0;\n  }\n  .g-sm-1,\n  .gx-sm-1 {\n    --bs-gutter-x: 0.25rem;\n  }\n  .g-sm-1,\n  .gy-sm-1 {\n    --bs-gutter-y: 0.25rem;\n  }\n  .g-sm-2,\n  .gx-sm-2 {\n    --bs-gutter-x: 0.5rem;\n  }\n  .g-sm-2,\n  .gy-sm-2 {\n    --bs-gutter-y: 0.5rem;\n  }\n  .g-sm-3,\n  .gx-sm-3 {\n    --bs-gutter-x: 1rem;\n  }\n  .g-sm-3,\n  .gy-sm-3 {\n    --bs-gutter-y: 1rem;\n  }\n  .g-sm-4,\n  .gx-sm-4 {\n    --bs-gutter-x: 1.5rem;\n  }\n  .g-sm-4,\n  .gy-sm-4 {\n    --bs-gutter-y: 1.5rem;\n  }\n  .g-sm-5,\n  .gx-sm-5 {\n    --bs-gutter-x: 3rem;\n  }\n  .g-sm-5,\n  .gy-sm-5 {\n    --bs-gutter-y: 3rem;\n  }\n}\n\n@media (min-width: 768px) {\n  .col-md {\n    -ms-flex: 1 0 0%;\n    flex: 1 0 0%;\n  }\n  .row-cols-md-auto > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .row-cols-md-1 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .row-cols-md-2 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .row-cols-md-3 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 33.333333%;\n  }\n  .row-cols-md-4 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .row-cols-md-5 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 20%;\n  }\n  .row-cols-md-6 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 16.666667%;\n  }\n  .col-md-auto {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .col-md-1 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 8.333333%;\n  }\n  .col-md-2 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 16.666667%;\n  }\n  .col-md-3 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .col-md-4 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 33.333333%;\n  }\n  .col-md-5 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 41.666667%;\n  }\n  .col-md-6 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .col-md-7 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 58.333333%;\n  }\n  .col-md-8 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 66.666667%;\n  }\n  .col-md-9 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 75%;\n  }\n  .col-md-10 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 83.333333%;\n  }\n  .col-md-11 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 91.666667%;\n  }\n  .col-md-12 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .offset-md-0 {\n    margin-left: 0;\n  }\n  .offset-md-1 {\n    margin-left: 8.333333%;\n  }\n  .offset-md-2 {\n    margin-left: 16.666667%;\n  }\n  .offset-md-3 {\n    margin-left: 25%;\n  }\n  .offset-md-4 {\n    margin-left: 33.333333%;\n  }\n  .offset-md-5 {\n    margin-left: 41.666667%;\n  }\n  .offset-md-6 {\n    margin-left: 50%;\n  }\n  .offset-md-7 {\n    margin-left: 58.333333%;\n  }\n  .offset-md-8 {\n    margin-left: 66.666667%;\n  }\n  .offset-md-9 {\n    margin-left: 75%;\n  }\n  .offset-md-10 {\n    margin-left: 83.333333%;\n  }\n  .offset-md-11 {\n    margin-left: 91.666667%;\n  }\n  .g-md-0,\n  .gx-md-0 {\n    --bs-gutter-x: 0;\n  }\n  .g-md-0,\n  .gy-md-0 {\n    --bs-gutter-y: 0;\n  }\n  .g-md-1,\n  .gx-md-1 {\n    --bs-gutter-x: 0.25rem;\n  }\n  .g-md-1,\n  .gy-md-1 {\n    --bs-gutter-y: 0.25rem;\n  }\n  .g-md-2,\n  .gx-md-2 {\n    --bs-gutter-x: 0.5rem;\n  }\n  .g-md-2,\n  .gy-md-2 {\n    --bs-gutter-y: 0.5rem;\n  }\n  .g-md-3,\n  .gx-md-3 {\n    --bs-gutter-x: 1rem;\n  }\n  .g-md-3,\n  .gy-md-3 {\n    --bs-gutter-y: 1rem;\n  }\n  .g-md-4,\n  .gx-md-4 {\n    --bs-gutter-x: 1.5rem;\n  }\n  .g-md-4,\n  .gy-md-4 {\n    --bs-gutter-y: 1.5rem;\n  }\n  .g-md-5,\n  .gx-md-5 {\n    --bs-gutter-x: 3rem;\n  }\n  .g-md-5,\n  .gy-md-5 {\n    --bs-gutter-y: 3rem;\n  }\n}\n\n@media (min-width: 992px) {\n  .col-lg {\n    -ms-flex: 1 0 0%;\n    flex: 1 0 0%;\n  }\n  .row-cols-lg-auto > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .row-cols-lg-1 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .row-cols-lg-2 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .row-cols-lg-3 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 33.333333%;\n  }\n  .row-cols-lg-4 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .row-cols-lg-5 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 20%;\n  }\n  .row-cols-lg-6 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 16.666667%;\n  }\n  .col-lg-auto {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .col-lg-1 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 8.333333%;\n  }\n  .col-lg-2 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 16.666667%;\n  }\n  .col-lg-3 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .col-lg-4 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 33.333333%;\n  }\n  .col-lg-5 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 41.666667%;\n  }\n  .col-lg-6 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .col-lg-7 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 58.333333%;\n  }\n  .col-lg-8 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 66.666667%;\n  }\n  .col-lg-9 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 75%;\n  }\n  .col-lg-10 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 83.333333%;\n  }\n  .col-lg-11 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 91.666667%;\n  }\n  .col-lg-12 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .offset-lg-0 {\n    margin-left: 0;\n  }\n  .offset-lg-1 {\n    margin-left: 8.333333%;\n  }\n  .offset-lg-2 {\n    margin-left: 16.666667%;\n  }\n  .offset-lg-3 {\n    margin-left: 25%;\n  }\n  .offset-lg-4 {\n    margin-left: 33.333333%;\n  }\n  .offset-lg-5 {\n    margin-left: 41.666667%;\n  }\n  .offset-lg-6 {\n    margin-left: 50%;\n  }\n  .offset-lg-7 {\n    margin-left: 58.333333%;\n  }\n  .offset-lg-8 {\n    margin-left: 66.666667%;\n  }\n  .offset-lg-9 {\n    margin-left: 75%;\n  }\n  .offset-lg-10 {\n    margin-left: 83.333333%;\n  }\n  .offset-lg-11 {\n    margin-left: 91.666667%;\n  }\n  .g-lg-0,\n  .gx-lg-0 {\n    --bs-gutter-x: 0;\n  }\n  .g-lg-0,\n  .gy-lg-0 {\n    --bs-gutter-y: 0;\n  }\n  .g-lg-1,\n  .gx-lg-1 {\n    --bs-gutter-x: 0.25rem;\n  }\n  .g-lg-1,\n  .gy-lg-1 {\n    --bs-gutter-y: 0.25rem;\n  }\n  .g-lg-2,\n  .gx-lg-2 {\n    --bs-gutter-x: 0.5rem;\n  }\n  .g-lg-2,\n  .gy-lg-2 {\n    --bs-gutter-y: 0.5rem;\n  }\n  .g-lg-3,\n  .gx-lg-3 {\n    --bs-gutter-x: 1rem;\n  }\n  .g-lg-3,\n  .gy-lg-3 {\n    --bs-gutter-y: 1rem;\n  }\n  .g-lg-4,\n  .gx-lg-4 {\n    --bs-gutter-x: 1.5rem;\n  }\n  .g-lg-4,\n  .gy-lg-4 {\n    --bs-gutter-y: 1.5rem;\n  }\n  .g-lg-5,\n  .gx-lg-5 {\n    --bs-gutter-x: 3rem;\n  }\n  .g-lg-5,\n  .gy-lg-5 {\n    --bs-gutter-y: 3rem;\n  }\n}\n\n@media (min-width: 1200px) {\n  .col-xl {\n    -ms-flex: 1 0 0%;\n    flex: 1 0 0%;\n  }\n  .row-cols-xl-auto > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .row-cols-xl-1 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .row-cols-xl-2 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .row-cols-xl-3 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 33.333333%;\n  }\n  .row-cols-xl-4 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .row-cols-xl-5 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 20%;\n  }\n  .row-cols-xl-6 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 16.666667%;\n  }\n  .col-xl-auto {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .col-xl-1 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 8.333333%;\n  }\n  .col-xl-2 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 16.666667%;\n  }\n  .col-xl-3 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .col-xl-4 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 33.333333%;\n  }\n  .col-xl-5 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 41.666667%;\n  }\n  .col-xl-6 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .col-xl-7 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 58.333333%;\n  }\n  .col-xl-8 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 66.666667%;\n  }\n  .col-xl-9 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 75%;\n  }\n  .col-xl-10 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 83.333333%;\n  }\n  .col-xl-11 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 91.666667%;\n  }\n  .col-xl-12 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .offset-xl-0 {\n    margin-left: 0;\n  }\n  .offset-xl-1 {\n    margin-left: 8.333333%;\n  }\n  .offset-xl-2 {\n    margin-left: 16.666667%;\n  }\n  .offset-xl-3 {\n    margin-left: 25%;\n  }\n  .offset-xl-4 {\n    margin-left: 33.333333%;\n  }\n  .offset-xl-5 {\n    margin-left: 41.666667%;\n  }\n  .offset-xl-6 {\n    margin-left: 50%;\n  }\n  .offset-xl-7 {\n    margin-left: 58.333333%;\n  }\n  .offset-xl-8 {\n    margin-left: 66.666667%;\n  }\n  .offset-xl-9 {\n    margin-left: 75%;\n  }\n  .offset-xl-10 {\n    margin-left: 83.333333%;\n  }\n  .offset-xl-11 {\n    margin-left: 91.666667%;\n  }\n  .g-xl-0,\n  .gx-xl-0 {\n    --bs-gutter-x: 0;\n  }\n  .g-xl-0,\n  .gy-xl-0 {\n    --bs-gutter-y: 0;\n  }\n  .g-xl-1,\n  .gx-xl-1 {\n    --bs-gutter-x: 0.25rem;\n  }\n  .g-xl-1,\n  .gy-xl-1 {\n    --bs-gutter-y: 0.25rem;\n  }\n  .g-xl-2,\n  .gx-xl-2 {\n    --bs-gutter-x: 0.5rem;\n  }\n  .g-xl-2,\n  .gy-xl-2 {\n    --bs-gutter-y: 0.5rem;\n  }\n  .g-xl-3,\n  .gx-xl-3 {\n    --bs-gutter-x: 1rem;\n  }\n  .g-xl-3,\n  .gy-xl-3 {\n    --bs-gutter-y: 1rem;\n  }\n  .g-xl-4,\n  .gx-xl-4 {\n    --bs-gutter-x: 1.5rem;\n  }\n  .g-xl-4,\n  .gy-xl-4 {\n    --bs-gutter-y: 1.5rem;\n  }\n  .g-xl-5,\n  .gx-xl-5 {\n    --bs-gutter-x: 3rem;\n  }\n  .g-xl-5,\n  .gy-xl-5 {\n    --bs-gutter-y: 3rem;\n  }\n}\n\n@media (min-width: 1400px) {\n  .col-xxl {\n    -ms-flex: 1 0 0%;\n    flex: 1 0 0%;\n  }\n  .row-cols-xxl-auto > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .row-cols-xxl-1 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .row-cols-xxl-2 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .row-cols-xxl-3 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 33.333333%;\n  }\n  .row-cols-xxl-4 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .row-cols-xxl-5 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 20%;\n  }\n  .row-cols-xxl-6 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 16.666667%;\n  }\n  .col-xxl-auto {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .col-xxl-1 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 8.333333%;\n  }\n  .col-xxl-2 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 16.666667%;\n  }\n  .col-xxl-3 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .col-xxl-4 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 33.333333%;\n  }\n  .col-xxl-5 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 41.666667%;\n  }\n  .col-xxl-6 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .col-xxl-7 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 58.333333%;\n  }\n  .col-xxl-8 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 66.666667%;\n  }\n  .col-xxl-9 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 75%;\n  }\n  .col-xxl-10 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 83.333333%;\n  }\n  .col-xxl-11 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 91.666667%;\n  }\n  .col-xxl-12 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .offset-xxl-0 {\n    margin-left: 0;\n  }\n  .offset-xxl-1 {\n    margin-left: 8.333333%;\n  }\n  .offset-xxl-2 {\n    margin-left: 16.666667%;\n  }\n  .offset-xxl-3 {\n    margin-left: 25%;\n  }\n  .offset-xxl-4 {\n    margin-left: 33.333333%;\n  }\n  .offset-xxl-5 {\n    margin-left: 41.666667%;\n  }\n  .offset-xxl-6 {\n    margin-left: 50%;\n  }\n  .offset-xxl-7 {\n    margin-left: 58.333333%;\n  }\n  .offset-xxl-8 {\n    margin-left: 66.666667%;\n  }\n  .offset-xxl-9 {\n    margin-left: 75%;\n  }\n  .offset-xxl-10 {\n    margin-left: 83.333333%;\n  }\n  .offset-xxl-11 {\n    margin-left: 91.666667%;\n  }\n  .g-xxl-0,\n  .gx-xxl-0 {\n    --bs-gutter-x: 0;\n  }\n  .g-xxl-0,\n  .gy-xxl-0 {\n    --bs-gutter-y: 0;\n  }\n  .g-xxl-1,\n  .gx-xxl-1 {\n    --bs-gutter-x: 0.25rem;\n  }\n  .g-xxl-1,\n  .gy-xxl-1 {\n    --bs-gutter-y: 0.25rem;\n  }\n  .g-xxl-2,\n  .gx-xxl-2 {\n    --bs-gutter-x: 0.5rem;\n  }\n  .g-xxl-2,\n  .gy-xxl-2 {\n    --bs-gutter-y: 0.5rem;\n  }\n  .g-xxl-3,\n  .gx-xxl-3 {\n    --bs-gutter-x: 1rem;\n  }\n  .g-xxl-3,\n  .gy-xxl-3 {\n    --bs-gutter-y: 1rem;\n  }\n  .g-xxl-4,\n  .gx-xxl-4 {\n    --bs-gutter-x: 1.5rem;\n  }\n  .g-xxl-4,\n  .gy-xxl-4 {\n    --bs-gutter-y: 1.5rem;\n  }\n  .g-xxl-5,\n  .gx-xxl-5 {\n    --bs-gutter-x: 3rem;\n  }\n  .g-xxl-5,\n  .gy-xxl-5 {\n    --bs-gutter-y: 3rem;\n  }\n}\n\n.table {\n  --bs-table-bg: transparent;\n  --bs-table-accent-bg: transparent;\n  --bs-table-striped-color: #222;\n  --bs-table-striped-bg: rgba(0, 0, 0, 0.05);\n  --bs-table-active-color: #222;\n  --bs-table-active-bg: rgba(0, 0, 0, 0.1);\n  --bs-table-hover-color: #222;\n  --bs-table-hover-bg: rgba(0, 0, 0, 0.075);\n  width: 100%;\n  margin-bottom: 1rem;\n  color: #222;\n  vertical-align: top;\n  border-color: #dee2e6;\n}\n\n.table > :not(caption) > * > * {\n  padding: 0.5rem 0.5rem;\n  background-color: var(--bs-table-bg);\n  border-bottom-width: 1px;\n  box-shadow: inset 0 0 0 9999px var(--bs-table-accent-bg);\n}\n\n.table > tbody {\n  vertical-align: inherit;\n}\n\n.table > thead {\n  vertical-align: bottom;\n}\n\n.table > :not(:first-child) {\n  border-top: 2px solid currentColor;\n}\n\n.caption-top {\n  caption-side: top;\n}\n\n.table-sm > :not(caption) > * > * {\n  padding: 0.25rem 0.25rem;\n}\n\n.table-bordered > :not(caption) > * {\n  border-width: 1px 0;\n}\n\n.table-bordered > :not(caption) > * > * {\n  border-width: 0 1px;\n}\n\n.table-borderless > :not(caption) > * > * {\n  border-bottom-width: 0;\n}\n\n.table-borderless > :not(:first-child) {\n  border-top-width: 0;\n}\n\n.table-striped > tbody > tr:nth-of-type(odd) > * {\n  --bs-table-accent-bg: var(--bs-table-striped-bg);\n  color: var(--bs-table-striped-color);\n}\n\n.table-active {\n  --bs-table-accent-bg: var(--bs-table-active-bg);\n  color: var(--bs-table-active-color);\n}\n\n.table-hover > tbody > tr:hover > * {\n  --bs-table-accent-bg: var(--bs-table-hover-bg);\n  color: var(--bs-table-hover-color);\n}\n\n.table-primary {\n  --bs-table-bg: #158cba;\n  --bs-table-striped-bg: #2192bd;\n  --bs-table-striped-color: #fff;\n  --bs-table-active-bg: #2c98c1;\n  --bs-table-active-color: #fff;\n  --bs-table-hover-bg: #2795bf;\n  --bs-table-hover-color: #fff;\n  color: #fff;\n  border-color: #2c98c1;\n}\n\n.table-secondary {\n  --bs-table-bg: #f0f0f0;\n  --bs-table-striped-bg: #e4e4e4;\n  --bs-table-striped-color: #000;\n  --bs-table-active-bg: #d8d8d8;\n  --bs-table-active-color: #000;\n  --bs-table-hover-bg: #dedede;\n  --bs-table-hover-color: #000;\n  color: #000;\n  border-color: #d8d8d8;\n}\n\n.table-success {\n  --bs-table-bg: #28b62c;\n  --bs-table-striped-bg: #33ba37;\n  --bs-table-striped-color: #fff;\n  --bs-table-active-bg: #3ebd41;\n  --bs-table-active-color: #fff;\n  --bs-table-hover-bg: #38bb3c;\n  --bs-table-hover-color: #fff;\n  color: #fff;\n  border-color: #3ebd41;\n}\n\n.table-info {\n  --bs-table-bg: #75caeb;\n  --bs-table-striped-bg: #7ccdec;\n  --bs-table-striped-color: #fff;\n  --bs-table-active-bg: #83cfed;\n  --bs-table-active-color: #000;\n  --bs-table-hover-bg: #7fceed;\n  --bs-table-hover-color: #fff;\n  color: #fff;\n  border-color: #83cfed;\n}\n\n.table-warning {\n  --bs-table-bg: #ff851b;\n  --bs-table-striped-bg: #ff8b26;\n  --bs-table-striped-color: #fff;\n  --bs-table-active-bg: #ff9132;\n  --bs-table-active-color: #fff;\n  --bs-table-hover-bg: #ff8e2c;\n  --bs-table-hover-color: #fff;\n  color: #fff;\n  border-color: #ff9132;\n}\n\n.table-danger {\n  --bs-table-bg: #ff4136;\n  --bs-table-striped-bg: #ff4b40;\n  --bs-table-striped-color: #fff;\n  --bs-table-active-bg: #ff544a;\n  --bs-table-active-color: #fff;\n  --bs-table-hover-bg: #ff4f45;\n  --bs-table-hover-color: #fff;\n  color: #fff;\n  border-color: #ff544a;\n}\n\n.table-light {\n  --bs-table-bg: #f6f6f6;\n  --bs-table-striped-bg: #eaeaea;\n  --bs-table-striped-color: #000;\n  --bs-table-active-bg: #dddddd;\n  --bs-table-active-color: #000;\n  --bs-table-hover-bg: #e4e4e4;\n  --bs-table-hover-color: #000;\n  color: #000;\n  border-color: #dddddd;\n}\n\n.table-dark {\n  --bs-table-bg: #555;\n  --bs-table-striped-bg: #5e5e5e;\n  --bs-table-striped-color: #fff;\n  --bs-table-active-bg: #666666;\n  --bs-table-active-color: #fff;\n  --bs-table-hover-bg: #626262;\n  --bs-table-hover-color: #fff;\n  color: #fff;\n  border-color: #666666;\n}\n\n.table-responsive {\n  overflow-x: auto;\n  -webkit-overflow-scrolling: touch;\n}\n\n@media (max-width: 575.98px) {\n  .table-responsive-sm {\n    overflow-x: auto;\n    -webkit-overflow-scrolling: touch;\n  }\n}\n\n@media (max-width: 767.98px) {\n  .table-responsive-md {\n    overflow-x: auto;\n    -webkit-overflow-scrolling: touch;\n  }\n}\n\n@media (max-width: 991.98px) {\n  .table-responsive-lg {\n    overflow-x: auto;\n    -webkit-overflow-scrolling: touch;\n  }\n}\n\n@media (max-width: 1199.98px) {\n  .table-responsive-xl {\n    overflow-x: auto;\n    -webkit-overflow-scrolling: touch;\n  }\n}\n\n@media (max-width: 1399.98px) {\n  .table-responsive-xxl {\n    overflow-x: auto;\n    -webkit-overflow-scrolling: touch;\n  }\n}\n\n.form-label {\n  margin-bottom: 0.5rem;\n}\n\n.col-form-label {\n  padding-top: calc(0.375rem + 1px);\n  padding-bottom: calc(0.375rem + 1px);\n  margin-bottom: 0;\n  font-size: inherit;\n  line-height: 1.5;\n}\n\n.col-form-label-lg {\n  padding-top: calc(0.5rem + 1px);\n  padding-bottom: calc(0.5rem + 1px);\n  font-size: 1.25rem;\n}\n\n.col-form-label-sm {\n  padding-top: calc(0.25rem + 1px);\n  padding-bottom: calc(0.25rem + 1px);\n  font-size: 0.875rem;\n}\n\n.form-text {\n  margin-top: 0.25rem;\n  font-size: 0.875em;\n  color: #999;\n}\n\n.form-control {\n  display: block;\n  width: 100%;\n  padding: 0.375rem 0.75rem;\n  font-size: 1rem;\n  font-weight: 400;\n  line-height: 1.5;\n  color: #222;\n  background-color: #fff;\n  background-clip: padding-box;\n  border: 1px solid #ced4da;\n  -webkit-appearance: none;\n  -moz-appearance: none;\n  appearance: none;\n  border-radius: 0.25rem;\n  transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .form-control {\n    transition: none;\n  }\n}\n\n.form-control[type=\"file\"] {\n  overflow: hidden;\n}\n\n.form-control[type=\"file\"]:not(:disabled):not([readonly]) {\n  cursor: pointer;\n}\n\n.form-control:focus {\n  color: #222;\n  background-color: #fff;\n  border-color: #8ac6dd;\n  outline: 0;\n  box-shadow: 0 0 0 0.25rem rgba(21, 140, 186, 0.25);\n}\n\n.form-control::-webkit-date-and-time-value {\n  height: 1.5em;\n}\n\n.form-control::-webkit-input-placeholder {\n  color: #999;\n  opacity: 1;\n}\n\n.form-control::-moz-placeholder {\n  color: #999;\n  opacity: 1;\n}\n\n.form-control:-ms-input-placeholder {\n  color: #999;\n  opacity: 1;\n}\n\n.form-control::-ms-input-placeholder {\n  color: #999;\n  opacity: 1;\n}\n\n.form-control::placeholder {\n  color: #999;\n  opacity: 1;\n}\n\n.form-control:disabled, .form-control[readonly] {\n  background-color: #f0f0f0;\n  opacity: 1;\n}\n\n.form-control::file-selector-button {\n  padding: 0.375rem 0.75rem;\n  margin: -0.375rem -0.75rem;\n  -webkit-margin-end: 0.75rem;\n  -moz-margin-end: 0.75rem;\n  margin-inline-end: 0.75rem;\n  color: #222;\n  background-color: #f0f0f0;\n  pointer-events: none;\n  border-color: inherit;\n  border-style: solid;\n  border-width: 0;\n  border-inline-end-width: 1px;\n  border-radius: 0;\n  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .form-control::file-selector-button {\n    transition: none;\n  }\n}\n\n.form-control:hover:not(:disabled):not([readonly])::file-selector-button {\n  background-color: #e4e4e4;\n}\n\n.form-control::-webkit-file-upload-button {\n  padding: 0.375rem 0.75rem;\n  margin: -0.375rem -0.75rem;\n  -webkit-margin-end: 0.75rem;\n  margin-inline-end: 0.75rem;\n  color: #222;\n  background-color: #f0f0f0;\n  pointer-events: none;\n  border-color: inherit;\n  border-style: solid;\n  border-width: 0;\n  border-inline-end-width: 1px;\n  border-radius: 0;\n  -webkit-transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .form-control::-webkit-file-upload-button {\n    -webkit-transition: none;\n    transition: none;\n  }\n}\n\n.form-control:hover:not(:disabled):not([readonly])::-webkit-file-upload-button {\n  background-color: #e4e4e4;\n}\n\n.form-control-plaintext {\n  display: block;\n  width: 100%;\n  padding: 0.375rem 0;\n  margin-bottom: 0;\n  line-height: 1.5;\n  color: #222;\n  background-color: transparent;\n  border: solid transparent;\n  border-width: 1px 0;\n}\n\n.form-control-plaintext.form-control-sm, .form-control-plaintext.form-control-lg {\n  padding-right: 0;\n  padding-left: 0;\n}\n\n.form-control-sm {\n  min-height: calc(1.5em + 0.5rem + 2px);\n  padding: 0.25rem 0.5rem;\n  font-size: 0.875rem;\n  border-radius: 0.2rem;\n}\n\n.form-control-sm::file-selector-button {\n  padding: 0.25rem 0.5rem;\n  margin: -0.25rem -0.5rem;\n  -webkit-margin-end: 0.5rem;\n  -moz-margin-end: 0.5rem;\n  margin-inline-end: 0.5rem;\n}\n\n.form-control-sm::-webkit-file-upload-button {\n  padding: 0.25rem 0.5rem;\n  margin: -0.25rem -0.5rem;\n  -webkit-margin-end: 0.5rem;\n  margin-inline-end: 0.5rem;\n}\n\n.form-control-lg {\n  min-height: calc(1.5em + 1rem + 2px);\n  padding: 0.5rem 1rem;\n  font-size: 1.25rem;\n  border-radius: 0.3rem;\n}\n\n.form-control-lg::file-selector-button {\n  padding: 0.5rem 1rem;\n  margin: -0.5rem -1rem;\n  -webkit-margin-end: 1rem;\n  -moz-margin-end: 1rem;\n  margin-inline-end: 1rem;\n}\n\n.form-control-lg::-webkit-file-upload-button {\n  padding: 0.5rem 1rem;\n  margin: -0.5rem -1rem;\n  -webkit-margin-end: 1rem;\n  margin-inline-end: 1rem;\n}\n\ntextarea.form-control {\n  min-height: calc(1.5em + 0.75rem + 2px);\n}\n\ntextarea.form-control-sm {\n  min-height: calc(1.5em + 0.5rem + 2px);\n}\n\ntextarea.form-control-lg {\n  min-height: calc(1.5em + 1rem + 2px);\n}\n\n.form-control-color {\n  width: 3rem;\n  height: auto;\n  padding: 0.375rem;\n}\n\n.form-control-color:not(:disabled):not([readonly]) {\n  cursor: pointer;\n}\n\n.form-control-color::-moz-color-swatch {\n  height: 1.5em;\n  border-radius: 0.25rem;\n}\n\n.form-control-color::-webkit-color-swatch {\n  height: 1.5em;\n  border-radius: 0.25rem;\n}\n\n.form-select {\n  display: block;\n  width: 100%;\n  padding: 0.375rem 2.25rem 0.375rem 0.75rem;\n  -moz-padding-start: calc(0.75rem - 3px);\n  font-size: 1rem;\n  font-weight: 400;\n  line-height: 1.5;\n  color: #222;\n  background-color: #fff;\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23333' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e\");\n  background-repeat: no-repeat;\n  background-position: right 0.75rem center;\n  background-size: 16px 12px;\n  border: 1px solid #ced4da;\n  border-radius: 0.25rem;\n  transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n  -webkit-appearance: none;\n  -moz-appearance: none;\n  appearance: none;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .form-select {\n    transition: none;\n  }\n}\n\n.form-select:focus {\n  border-color: #8ac6dd;\n  outline: 0;\n  box-shadow: 0 0 0 0.25rem rgba(21, 140, 186, 0.25);\n}\n\n.form-select[multiple], .form-select[size]:not([size=\"1\"]) {\n  padding-right: 0.75rem;\n  background-image: none;\n}\n\n.form-select:disabled {\n  background-color: #f0f0f0;\n}\n\n.form-select:-moz-focusring {\n  color: transparent;\n  text-shadow: 0 0 0 #222;\n}\n\n.form-select-sm {\n  padding-top: 0.25rem;\n  padding-bottom: 0.25rem;\n  padding-left: 0.5rem;\n  font-size: 0.875rem;\n  border-radius: 0.2rem;\n}\n\n.form-select-lg {\n  padding-top: 0.5rem;\n  padding-bottom: 0.5rem;\n  padding-left: 1rem;\n  font-size: 1.25rem;\n  border-radius: 0.3rem;\n}\n\n.form-check {\n  display: block;\n  min-height: 1.5rem;\n  padding-left: 1.5em;\n  margin-bottom: 0.125rem;\n}\n\n.form-check .form-check-input {\n  float: left;\n  margin-left: -1.5em;\n}\n\n.form-check-input {\n  width: 1em;\n  height: 1em;\n  margin-top: 0.25em;\n  vertical-align: top;\n  background-color: #fff;\n  background-repeat: no-repeat;\n  background-position: center;\n  background-size: contain;\n  border: 1px solid rgba(0, 0, 0, 0.25);\n  -webkit-appearance: none;\n  -moz-appearance: none;\n  appearance: none;\n  -webkit-print-color-adjust: exact;\n  color-adjust: exact;\n}\n\n.form-check-input[type=\"checkbox\"] {\n  border-radius: 0.25em;\n}\n\n.form-check-input[type=\"radio\"] {\n  border-radius: 50%;\n}\n\n.form-check-input:active {\n  -webkit-filter: brightness(90%);\n  filter: brightness(90%);\n}\n\n.form-check-input:focus {\n  border-color: #8ac6dd;\n  outline: 0;\n  box-shadow: 0 0 0 0.25rem rgba(21, 140, 186, 0.25);\n}\n\n.form-check-input:checked {\n  background-color: #158cba;\n  border-color: #158cba;\n}\n\n.form-check-input:checked[type=\"checkbox\"] {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10l3 3l6-6'/%3e%3c/svg%3e\");\n}\n\n.form-check-input:checked[type=\"radio\"] {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='2' fill='%23fff'/%3e%3c/svg%3e\");\n}\n\n.form-check-input[type=\"checkbox\"]:indeterminate {\n  background-color: #158cba;\n  border-color: #158cba;\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10h8'/%3e%3c/svg%3e\");\n}\n\n.form-check-input:disabled {\n  pointer-events: none;\n  -webkit-filter: none;\n  filter: none;\n  opacity: 0.5;\n}\n\n.form-check-input[disabled] ~ .form-check-label, .form-check-input:disabled ~ .form-check-label {\n  opacity: 0.5;\n}\n\n.form-switch {\n  padding-left: 2.5em;\n}\n\n.form-switch .form-check-input {\n  width: 2em;\n  margin-left: -2.5em;\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%280, 0, 0, 0.25%29'/%3e%3c/svg%3e\");\n  background-position: left center;\n  border-radius: 2em;\n  transition: background-position 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .form-switch .form-check-input {\n    transition: none;\n  }\n}\n\n.form-switch .form-check-input:focus {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%238ac6dd'/%3e%3c/svg%3e\");\n}\n\n.form-switch .form-check-input:checked {\n  background-position: right center;\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e\");\n}\n\n.form-check-inline {\n  display: inline-block;\n  margin-right: 1rem;\n}\n\n.btn-check {\n  position: absolute;\n  clip: rect(0, 0, 0, 0);\n  pointer-events: none;\n}\n\n.btn-check[disabled] + .btn, .btn-check:disabled + .btn {\n  pointer-events: none;\n  -webkit-filter: none;\n  filter: none;\n  opacity: 0.65;\n}\n\n.form-range {\n  width: 100%;\n  height: 1.5rem;\n  padding: 0;\n  background-color: transparent;\n  -webkit-appearance: none;\n  -moz-appearance: none;\n  appearance: none;\n}\n\n.form-range:focus {\n  outline: 0;\n}\n\n.form-range:focus::-webkit-slider-thumb {\n  box-shadow: 0 0 0 1px #fff, 0 0 0 0.25rem rgba(21, 140, 186, 0.25);\n}\n\n.form-range:focus::-moz-range-thumb {\n  box-shadow: 0 0 0 1px #fff, 0 0 0 0.25rem rgba(21, 140, 186, 0.25);\n}\n\n.form-range::-moz-focus-outer {\n  border: 0;\n}\n\n.form-range::-webkit-slider-thumb {\n  width: 1rem;\n  height: 1rem;\n  margin-top: -0.25rem;\n  background-color: #158cba;\n  border: 0;\n  border-radius: 1rem;\n  -webkit-transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n  transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n  -webkit-appearance: none;\n  appearance: none;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .form-range::-webkit-slider-thumb {\n    -webkit-transition: none;\n    transition: none;\n  }\n}\n\n.form-range::-webkit-slider-thumb:active {\n  background-color: #b9ddea;\n}\n\n.form-range::-webkit-slider-runnable-track {\n  width: 100%;\n  height: 0.5rem;\n  color: transparent;\n  cursor: pointer;\n  background-color: #dee2e6;\n  border-color: transparent;\n  border-radius: 1rem;\n}\n\n.form-range::-moz-range-thumb {\n  width: 1rem;\n  height: 1rem;\n  background-color: #158cba;\n  border: 0;\n  border-radius: 1rem;\n  -moz-transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n  transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n  -moz-appearance: none;\n  appearance: none;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .form-range::-moz-range-thumb {\n    -moz-transition: none;\n    transition: none;\n  }\n}\n\n.form-range::-moz-range-thumb:active {\n  background-color: #b9ddea;\n}\n\n.form-range::-moz-range-track {\n  width: 100%;\n  height: 0.5rem;\n  color: transparent;\n  cursor: pointer;\n  background-color: #dee2e6;\n  border-color: transparent;\n  border-radius: 1rem;\n}\n\n.form-range:disabled {\n  pointer-events: none;\n}\n\n.form-range:disabled::-webkit-slider-thumb {\n  background-color: #adb5bd;\n}\n\n.form-range:disabled::-moz-range-thumb {\n  background-color: #adb5bd;\n}\n\n.form-floating {\n  position: relative;\n}\n\n.form-floating > .form-control,\n.form-floating > .form-select {\n  height: calc(3.5rem + 2px);\n  line-height: 1.25;\n}\n\n.form-floating > label {\n  position: absolute;\n  top: 0;\n  left: 0;\n  height: 100%;\n  padding: 1rem 0.75rem;\n  pointer-events: none;\n  border: 1px solid transparent;\n  -webkit-transform-origin: 0 0;\n  transform-origin: 0 0;\n  transition: opacity 0.1s ease-in-out, -webkit-transform 0.1s ease-in-out;\n  transition: opacity 0.1s ease-in-out, transform 0.1s ease-in-out;\n  transition: opacity 0.1s ease-in-out, transform 0.1s ease-in-out, -webkit-transform 0.1s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .form-floating > label {\n    transition: none;\n  }\n}\n\n.form-floating > .form-control {\n  padding: 1rem 0.75rem;\n}\n\n.form-floating > .form-control::-webkit-input-placeholder {\n  color: transparent;\n}\n\n.form-floating > .form-control::-moz-placeholder {\n  color: transparent;\n}\n\n.form-floating > .form-control:-ms-input-placeholder {\n  color: transparent;\n}\n\n.form-floating > .form-control::-ms-input-placeholder {\n  color: transparent;\n}\n\n.form-floating > .form-control::placeholder {\n  color: transparent;\n}\n\n.form-floating > .form-control:not(:-moz-placeholder-shown) {\n  padding-top: 1.625rem;\n  padding-bottom: 0.625rem;\n}\n\n.form-floating > .form-control:not(:-ms-input-placeholder) {\n  padding-top: 1.625rem;\n  padding-bottom: 0.625rem;\n}\n\n.form-floating > .form-control:focus, .form-floating > .form-control:not(:placeholder-shown) {\n  padding-top: 1.625rem;\n  padding-bottom: 0.625rem;\n}\n\n.form-floating > .form-control:-webkit-autofill {\n  padding-top: 1.625rem;\n  padding-bottom: 0.625rem;\n}\n\n.form-floating > .form-select {\n  padding-top: 1.625rem;\n  padding-bottom: 0.625rem;\n}\n\n.form-floating > .form-control:not(:-moz-placeholder-shown) ~ label {\n  opacity: 0.65;\n  transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);\n}\n\n.form-floating > .form-control:not(:-ms-input-placeholder) ~ label {\n  opacity: 0.65;\n  transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);\n}\n\n.form-floating > .form-control:focus ~ label,\n.form-floating > .form-control:not(:placeholder-shown) ~ label,\n.form-floating > .form-select ~ label {\n  opacity: 0.65;\n  -webkit-transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);\n  transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);\n}\n\n.form-floating > .form-control:-webkit-autofill ~ label {\n  opacity: 0.65;\n  -webkit-transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);\n  transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);\n}\n\n.input-group {\n  position: relative;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n  flex-wrap: wrap;\n  -ms-flex-align: stretch;\n  align-items: stretch;\n  width: 100%;\n}\n\n.input-group > .form-control,\n.input-group > .form-select {\n  position: relative;\n  -ms-flex: 1 1 auto;\n  flex: 1 1 auto;\n  width: 1%;\n  min-width: 0;\n}\n\n.input-group > .form-control:focus,\n.input-group > .form-select:focus {\n  z-index: 3;\n}\n\n.input-group .btn {\n  position: relative;\n  z-index: 2;\n}\n\n.input-group .btn:focus {\n  z-index: 3;\n}\n\n.input-group-text {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-align: center;\n  align-items: center;\n  padding: 0.375rem 0.75rem;\n  font-size: 1rem;\n  font-weight: 400;\n  line-height: 1.5;\n  color: #222;\n  text-align: center;\n  white-space: nowrap;\n  background-color: #f0f0f0;\n  border: 1px solid #ced4da;\n  border-radius: 0.25rem;\n}\n\n.input-group-lg > .form-control,\n.input-group-lg > .form-select,\n.input-group-lg > .input-group-text,\n.input-group-lg > .btn {\n  padding: 0.5rem 1rem;\n  font-size: 1.25rem;\n  border-radius: 0.3rem;\n}\n\n.input-group-sm > .form-control,\n.input-group-sm > .form-select,\n.input-group-sm > .input-group-text,\n.input-group-sm > .btn {\n  padding: 0.25rem 0.5rem;\n  font-size: 0.875rem;\n  border-radius: 0.2rem;\n}\n\n.input-group-lg > .form-select,\n.input-group-sm > .form-select {\n  padding-right: 3rem;\n}\n\n.input-group:not(.has-validation) > :not(:last-child):not(.dropdown-toggle):not(.dropdown-menu),\n.input-group:not(.has-validation) > .dropdown-toggle:nth-last-child(n + 3) {\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n}\n\n.input-group.has-validation > :nth-last-child(n + 3):not(.dropdown-toggle):not(.dropdown-menu),\n.input-group.has-validation > .dropdown-toggle:nth-last-child(n + 4) {\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n}\n\n.input-group > :not(:first-child):not(.dropdown-menu):not(.valid-tooltip):not(.valid-feedback):not(.invalid-tooltip):not(.invalid-feedback) {\n  margin-left: -1px;\n  border-top-left-radius: 0;\n  border-bottom-left-radius: 0;\n}\n\n.valid-feedback {\n  display: none;\n  width: 100%;\n  margin-top: 0.25rem;\n  font-size: 0.875em;\n  color: #28b62c;\n}\n\n.valid-tooltip {\n  position: absolute;\n  top: 100%;\n  z-index: 5;\n  display: none;\n  max-width: 100%;\n  padding: 0.25rem 0.5rem;\n  margin-top: .1rem;\n  font-size: 0.875rem;\n  color: #fff;\n  background-color: rgba(40, 182, 44, 0.9);\n  border-radius: 0.25rem;\n}\n\n.was-validated :valid ~ .valid-feedback,\n.was-validated :valid ~ .valid-tooltip,\n.is-valid ~ .valid-feedback,\n.is-valid ~ .valid-tooltip {\n  display: block;\n}\n\n.was-validated .form-control:valid, .form-control.is-valid {\n  border-color: #28b62c;\n  padding-right: calc(1.5em + 0.75rem);\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%2328b62c' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e\");\n  background-repeat: no-repeat;\n  background-position: right calc(0.375em + 0.1875rem) center;\n  background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n\n.was-validated .form-control:valid:focus, .form-control.is-valid:focus {\n  border-color: #28b62c;\n  box-shadow: 0 0 0 0.25rem rgba(40, 182, 44, 0.25);\n}\n\n.was-validated textarea.form-control:valid, textarea.form-control.is-valid {\n  padding-right: calc(1.5em + 0.75rem);\n  background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem);\n}\n\n.was-validated .form-select:valid, .form-select.is-valid {\n  border-color: #28b62c;\n}\n\n.was-validated .form-select:valid:not([multiple]):not([size]), .was-validated .form-select:valid:not([multiple])[size=\"1\"], .form-select.is-valid:not([multiple]):not([size]), .form-select.is-valid:not([multiple])[size=\"1\"] {\n  padding-right: 4.125rem;\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23333' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e\"), url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%2328b62c' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e\");\n  background-position: right 0.75rem center, center right 2.25rem;\n  background-size: 16px 12px, calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n\n.was-validated .form-select:valid:focus, .form-select.is-valid:focus {\n  border-color: #28b62c;\n  box-shadow: 0 0 0 0.25rem rgba(40, 182, 44, 0.25);\n}\n\n.was-validated .form-check-input:valid, .form-check-input.is-valid {\n  border-color: #28b62c;\n}\n\n.was-validated .form-check-input:valid:checked, .form-check-input.is-valid:checked {\n  background-color: #28b62c;\n}\n\n.was-validated .form-check-input:valid:focus, .form-check-input.is-valid:focus {\n  box-shadow: 0 0 0 0.25rem rgba(40, 182, 44, 0.25);\n}\n\n.was-validated .form-check-input:valid ~ .form-check-label, .form-check-input.is-valid ~ .form-check-label {\n  color: #28b62c;\n}\n\n.form-check-inline .form-check-input ~ .valid-feedback {\n  margin-left: .5em;\n}\n\n.was-validated .input-group .form-control:valid, .input-group .form-control.is-valid, .was-validated\n.input-group .form-select:valid,\n.input-group .form-select.is-valid {\n  z-index: 1;\n}\n\n.was-validated .input-group .form-control:valid:focus, .input-group .form-control.is-valid:focus, .was-validated\n.input-group .form-select:valid:focus,\n.input-group .form-select.is-valid:focus {\n  z-index: 3;\n}\n\n.invalid-feedback {\n  display: none;\n  width: 100%;\n  margin-top: 0.25rem;\n  font-size: 0.875em;\n  color: #ff4136;\n}\n\n.invalid-tooltip {\n  position: absolute;\n  top: 100%;\n  z-index: 5;\n  display: none;\n  max-width: 100%;\n  padding: 0.25rem 0.5rem;\n  margin-top: .1rem;\n  font-size: 0.875rem;\n  color: #fff;\n  background-color: rgba(255, 65, 54, 0.9);\n  border-radius: 0.25rem;\n}\n\n.was-validated :invalid ~ .invalid-feedback,\n.was-validated :invalid ~ .invalid-tooltip,\n.is-invalid ~ .invalid-feedback,\n.is-invalid ~ .invalid-tooltip {\n  display: block;\n}\n\n.was-validated .form-control:invalid, .form-control.is-invalid {\n  border-color: #ff4136;\n  padding-right: calc(1.5em + 0.75rem);\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23ff4136'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23ff4136' stroke='none'/%3e%3c/svg%3e\");\n  background-repeat: no-repeat;\n  background-position: right calc(0.375em + 0.1875rem) center;\n  background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n\n.was-validated .form-control:invalid:focus, .form-control.is-invalid:focus {\n  border-color: #ff4136;\n  box-shadow: 0 0 0 0.25rem rgba(255, 65, 54, 0.25);\n}\n\n.was-validated textarea.form-control:invalid, textarea.form-control.is-invalid {\n  padding-right: calc(1.5em + 0.75rem);\n  background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem);\n}\n\n.was-validated .form-select:invalid, .form-select.is-invalid {\n  border-color: #ff4136;\n}\n\n.was-validated .form-select:invalid:not([multiple]):not([size]), .was-validated .form-select:invalid:not([multiple])[size=\"1\"], .form-select.is-invalid:not([multiple]):not([size]), .form-select.is-invalid:not([multiple])[size=\"1\"] {\n  padding-right: 4.125rem;\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23333' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e\"), url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23ff4136'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23ff4136' stroke='none'/%3e%3c/svg%3e\");\n  background-position: right 0.75rem center, center right 2.25rem;\n  background-size: 16px 12px, calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n\n.was-validated .form-select:invalid:focus, .form-select.is-invalid:focus {\n  border-color: #ff4136;\n  box-shadow: 0 0 0 0.25rem rgba(255, 65, 54, 0.25);\n}\n\n.was-validated .form-check-input:invalid, .form-check-input.is-invalid {\n  border-color: #ff4136;\n}\n\n.was-validated .form-check-input:invalid:checked, .form-check-input.is-invalid:checked {\n  background-color: #ff4136;\n}\n\n.was-validated .form-check-input:invalid:focus, .form-check-input.is-invalid:focus {\n  box-shadow: 0 0 0 0.25rem rgba(255, 65, 54, 0.25);\n}\n\n.was-validated .form-check-input:invalid ~ .form-check-label, .form-check-input.is-invalid ~ .form-check-label {\n  color: #ff4136;\n}\n\n.form-check-inline .form-check-input ~ .invalid-feedback {\n  margin-left: .5em;\n}\n\n.was-validated .input-group .form-control:invalid, .input-group .form-control.is-invalid, .was-validated\n.input-group .form-select:invalid,\n.input-group .form-select.is-invalid {\n  z-index: 2;\n}\n\n.was-validated .input-group .form-control:invalid:focus, .input-group .form-control.is-invalid:focus, .was-validated\n.input-group .form-select:invalid:focus,\n.input-group .form-select.is-invalid:focus {\n  z-index: 3;\n}\n\n.btn {\n  display: inline-block;\n  font-weight: 700;\n  line-height: 1.5;\n  color: #222;\n  text-align: center;\n  text-decoration: none;\n  vertical-align: middle;\n  cursor: pointer;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  user-select: none;\n  background-color: transparent;\n  border: 1px solid transparent;\n  padding: 0.375rem 0.75rem;\n  font-size: 1rem;\n  border-radius: 0.25rem;\n  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .btn {\n    transition: none;\n  }\n}\n\n.btn:hover {\n  color: #222;\n}\n\n.btn-check:focus + .btn, .btn:focus {\n  outline: 0;\n  box-shadow: 0 0 0 0.25rem rgba(21, 140, 186, 0.25);\n}\n\n.btn:disabled, .btn.disabled,\nfieldset:disabled .btn {\n  pointer-events: none;\n  opacity: 0.65;\n}\n\n.btn-primary {\n  color: #fff;\n  background-color: #158cba;\n  border-color: #158cba;\n}\n\n.btn-primary:hover {\n  color: #fff;\n  background-color: #12779e;\n  border-color: #117095;\n}\n\n.btn-check:focus + .btn-primary, .btn-primary:focus {\n  color: #fff;\n  background-color: #12779e;\n  border-color: #117095;\n  box-shadow: 0 0 0 0.25rem rgba(56, 157, 196, 0.5);\n}\n\n.btn-check:checked + .btn-primary,\n.btn-check:active + .btn-primary, .btn-primary:active, .btn-primary.active,\n.show > .btn-primary.dropdown-toggle {\n  color: #fff;\n  background-color: #117095;\n  border-color: #10698c;\n}\n\n.btn-check:checked + .btn-primary:focus,\n.btn-check:active + .btn-primary:focus, .btn-primary:active:focus, .btn-primary.active:focus,\n.show > .btn-primary.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.25rem rgba(56, 157, 196, 0.5);\n}\n\n.btn-primary:disabled, .btn-primary.disabled {\n  color: #fff;\n  background-color: #158cba;\n  border-color: #158cba;\n}\n\n.btn-secondary {\n  color: #000;\n  background-color: #f0f0f0;\n  border-color: #f0f0f0;\n}\n\n.btn-secondary:hover {\n  color: #000;\n  background-color: #f2f2f2;\n  border-color: #f2f2f2;\n}\n\n.btn-check:focus + .btn-secondary, .btn-secondary:focus {\n  color: #000;\n  background-color: #f2f2f2;\n  border-color: #f2f2f2;\n  box-shadow: 0 0 0 0.25rem rgba(204, 204, 204, 0.5);\n}\n\n.btn-check:checked + .btn-secondary,\n.btn-check:active + .btn-secondary, .btn-secondary:active, .btn-secondary.active,\n.show > .btn-secondary.dropdown-toggle {\n  color: #000;\n  background-color: #f3f3f3;\n  border-color: #f2f2f2;\n}\n\n.btn-check:checked + .btn-secondary:focus,\n.btn-check:active + .btn-secondary:focus, .btn-secondary:active:focus, .btn-secondary.active:focus,\n.show > .btn-secondary.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.25rem rgba(204, 204, 204, 0.5);\n}\n\n.btn-secondary:disabled, .btn-secondary.disabled {\n  color: #000;\n  background-color: #f0f0f0;\n  border-color: #f0f0f0;\n}\n\n.btn-success {\n  color: #fff;\n  background-color: #28b62c;\n  border-color: #28b62c;\n}\n\n.btn-success:hover {\n  color: #fff;\n  background-color: #229b25;\n  border-color: #209223;\n}\n\n.btn-check:focus + .btn-success, .btn-success:focus {\n  color: #fff;\n  background-color: #229b25;\n  border-color: #209223;\n  box-shadow: 0 0 0 0.25rem rgba(72, 193, 76, 0.5);\n}\n\n.btn-check:checked + .btn-success,\n.btn-check:active + .btn-success, .btn-success:active, .btn-success.active,\n.show > .btn-success.dropdown-toggle {\n  color: #fff;\n  background-color: #209223;\n  border-color: #1e8921;\n}\n\n.btn-check:checked + .btn-success:focus,\n.btn-check:active + .btn-success:focus, .btn-success:active:focus, .btn-success.active:focus,\n.show > .btn-success.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.25rem rgba(72, 193, 76, 0.5);\n}\n\n.btn-success:disabled, .btn-success.disabled {\n  color: #fff;\n  background-color: #28b62c;\n  border-color: #28b62c;\n}\n\n.btn-info {\n  color: #fff;\n  background-color: #75caeb;\n  border-color: #75caeb;\n}\n\n.btn-info:hover {\n  color: #fff;\n  background-color: #63acc8;\n  border-color: #5ea2bc;\n}\n\n.btn-check:focus + .btn-info, .btn-info:focus {\n  color: #fff;\n  background-color: #63acc8;\n  border-color: #5ea2bc;\n  box-shadow: 0 0 0 0.25rem rgba(138, 210, 238, 0.5);\n}\n\n.btn-check:checked + .btn-info,\n.btn-check:active + .btn-info, .btn-info:active, .btn-info.active,\n.show > .btn-info.dropdown-toggle {\n  color: #fff;\n  background-color: #5ea2bc;\n  border-color: #5898b0;\n}\n\n.btn-check:checked + .btn-info:focus,\n.btn-check:active + .btn-info:focus, .btn-info:active:focus, .btn-info.active:focus,\n.show > .btn-info.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.25rem rgba(138, 210, 238, 0.5);\n}\n\n.btn-info:disabled, .btn-info.disabled {\n  color: #fff;\n  background-color: #75caeb;\n  border-color: #75caeb;\n}\n\n.btn-warning {\n  color: #fff;\n  background-color: #ff851b;\n  border-color: #ff851b;\n}\n\n.btn-warning:hover {\n  color: #fff;\n  background-color: #d97117;\n  border-color: #cc6a16;\n}\n\n.btn-check:focus + .btn-warning, .btn-warning:focus {\n  color: #fff;\n  background-color: #d97117;\n  border-color: #cc6a16;\n  box-shadow: 0 0 0 0.25rem rgba(255, 151, 61, 0.5);\n}\n\n.btn-check:checked + .btn-warning,\n.btn-check:active + .btn-warning, .btn-warning:active, .btn-warning.active,\n.show > .btn-warning.dropdown-toggle {\n  color: #fff;\n  background-color: #cc6a16;\n  border-color: #bf6414;\n}\n\n.btn-check:checked + .btn-warning:focus,\n.btn-check:active + .btn-warning:focus, .btn-warning:active:focus, .btn-warning.active:focus,\n.show > .btn-warning.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.25rem rgba(255, 151, 61, 0.5);\n}\n\n.btn-warning:disabled, .btn-warning.disabled {\n  color: #fff;\n  background-color: #ff851b;\n  border-color: #ff851b;\n}\n\n.btn-danger {\n  color: #fff;\n  background-color: #ff4136;\n  border-color: #ff4136;\n}\n\n.btn-danger:hover {\n  color: #fff;\n  background-color: #d9372e;\n  border-color: #cc342b;\n}\n\n.btn-check:focus + .btn-danger, .btn-danger:focus {\n  color: #fff;\n  background-color: #d9372e;\n  border-color: #cc342b;\n  box-shadow: 0 0 0 0.25rem rgba(255, 94, 84, 0.5);\n}\n\n.btn-check:checked + .btn-danger,\n.btn-check:active + .btn-danger, .btn-danger:active, .btn-danger.active,\n.show > .btn-danger.dropdown-toggle {\n  color: #fff;\n  background-color: #cc342b;\n  border-color: #bf3129;\n}\n\n.btn-check:checked + .btn-danger:focus,\n.btn-check:active + .btn-danger:focus, .btn-danger:active:focus, .btn-danger.active:focus,\n.show > .btn-danger.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.25rem rgba(255, 94, 84, 0.5);\n}\n\n.btn-danger:disabled, .btn-danger.disabled {\n  color: #fff;\n  background-color: #ff4136;\n  border-color: #ff4136;\n}\n\n.btn-light {\n  color: #000;\n  background-color: #f6f6f6;\n  border-color: #f6f6f6;\n}\n\n.btn-light:hover {\n  color: #000;\n  background-color: #f7f7f7;\n  border-color: #f7f7f7;\n}\n\n.btn-check:focus + .btn-light, .btn-light:focus {\n  color: #000;\n  background-color: #f7f7f7;\n  border-color: #f7f7f7;\n  box-shadow: 0 0 0 0.25rem rgba(209, 209, 209, 0.5);\n}\n\n.btn-check:checked + .btn-light,\n.btn-check:active + .btn-light, .btn-light:active, .btn-light.active,\n.show > .btn-light.dropdown-toggle {\n  color: #000;\n  background-color: #f8f8f8;\n  border-color: #f7f7f7;\n}\n\n.btn-check:checked + .btn-light:focus,\n.btn-check:active + .btn-light:focus, .btn-light:active:focus, .btn-light.active:focus,\n.show > .btn-light.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.25rem rgba(209, 209, 209, 0.5);\n}\n\n.btn-light:disabled, .btn-light.disabled {\n  color: #000;\n  background-color: #f6f6f6;\n  border-color: #f6f6f6;\n}\n\n.btn-dark {\n  color: #fff;\n  background-color: #555;\n  border-color: #555;\n}\n\n.btn-dark:hover {\n  color: #fff;\n  background-color: #484848;\n  border-color: #444444;\n}\n\n.btn-check:focus + .btn-dark, .btn-dark:focus {\n  color: #fff;\n  background-color: #484848;\n  border-color: #444444;\n  box-shadow: 0 0 0 0.25rem rgba(111, 111, 111, 0.5);\n}\n\n.btn-check:checked + .btn-dark,\n.btn-check:active + .btn-dark, .btn-dark:active, .btn-dark.active,\n.show > .btn-dark.dropdown-toggle {\n  color: #fff;\n  background-color: #444444;\n  border-color: #404040;\n}\n\n.btn-check:checked + .btn-dark:focus,\n.btn-check:active + .btn-dark:focus, .btn-dark:active:focus, .btn-dark.active:focus,\n.show > .btn-dark.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.25rem rgba(111, 111, 111, 0.5);\n}\n\n.btn-dark:disabled, .btn-dark.disabled {\n  color: #fff;\n  background-color: #555;\n  border-color: #555;\n}\n\n.btn-outline-primary {\n  color: #158cba;\n  border-color: #158cba;\n}\n\n.btn-outline-primary:hover {\n  color: #fff;\n  background-color: #158cba;\n  border-color: #158cba;\n}\n\n.btn-check:focus + .btn-outline-primary, .btn-outline-primary:focus {\n  box-shadow: 0 0 0 0.25rem rgba(21, 140, 186, 0.5);\n}\n\n.btn-check:checked + .btn-outline-primary,\n.btn-check:active + .btn-outline-primary, .btn-outline-primary:active, .btn-outline-primary.active, .btn-outline-primary.dropdown-toggle.show {\n  color: #fff;\n  background-color: #158cba;\n  border-color: #158cba;\n}\n\n.btn-check:checked + .btn-outline-primary:focus,\n.btn-check:active + .btn-outline-primary:focus, .btn-outline-primary:active:focus, .btn-outline-primary.active:focus, .btn-outline-primary.dropdown-toggle.show:focus {\n  box-shadow: 0 0 0 0.25rem rgba(21, 140, 186, 0.5);\n}\n\n.btn-outline-primary:disabled, .btn-outline-primary.disabled {\n  color: #158cba;\n  background-color: transparent;\n}\n\n.btn-outline-secondary {\n  color: #f0f0f0;\n  border-color: #f0f0f0;\n}\n\n.btn-outline-secondary:hover {\n  color: #000;\n  background-color: #f0f0f0;\n  border-color: #f0f0f0;\n}\n\n.btn-check:focus + .btn-outline-secondary, .btn-outline-secondary:focus {\n  box-shadow: 0 0 0 0.25rem rgba(240, 240, 240, 0.5);\n}\n\n.btn-check:checked + .btn-outline-secondary,\n.btn-check:active + .btn-outline-secondary, .btn-outline-secondary:active, .btn-outline-secondary.active, .btn-outline-secondary.dropdown-toggle.show {\n  color: #000;\n  background-color: #f0f0f0;\n  border-color: #f0f0f0;\n}\n\n.btn-check:checked + .btn-outline-secondary:focus,\n.btn-check:active + .btn-outline-secondary:focus, .btn-outline-secondary:active:focus, .btn-outline-secondary.active:focus, .btn-outline-secondary.dropdown-toggle.show:focus {\n  box-shadow: 0 0 0 0.25rem rgba(240, 240, 240, 0.5);\n}\n\n.btn-outline-secondary:disabled, .btn-outline-secondary.disabled {\n  color: #f0f0f0;\n  background-color: transparent;\n}\n\n.btn-outline-success {\n  color: #28b62c;\n  border-color: #28b62c;\n}\n\n.btn-outline-success:hover {\n  color: #fff;\n  background-color: #28b62c;\n  border-color: #28b62c;\n}\n\n.btn-check:focus + .btn-outline-success, .btn-outline-success:focus {\n  box-shadow: 0 0 0 0.25rem rgba(40, 182, 44, 0.5);\n}\n\n.btn-check:checked + .btn-outline-success,\n.btn-check:active + .btn-outline-success, .btn-outline-success:active, .btn-outline-success.active, .btn-outline-success.dropdown-toggle.show {\n  color: #fff;\n  background-color: #28b62c;\n  border-color: #28b62c;\n}\n\n.btn-check:checked + .btn-outline-success:focus,\n.btn-check:active + .btn-outline-success:focus, .btn-outline-success:active:focus, .btn-outline-success.active:focus, .btn-outline-success.dropdown-toggle.show:focus {\n  box-shadow: 0 0 0 0.25rem rgba(40, 182, 44, 0.5);\n}\n\n.btn-outline-success:disabled, .btn-outline-success.disabled {\n  color: #28b62c;\n  background-color: transparent;\n}\n\n.btn-outline-info {\n  color: #75caeb;\n  border-color: #75caeb;\n}\n\n.btn-outline-info:hover {\n  color: #fff;\n  background-color: #75caeb;\n  border-color: #75caeb;\n}\n\n.btn-check:focus + .btn-outline-info, .btn-outline-info:focus {\n  box-shadow: 0 0 0 0.25rem rgba(117, 202, 235, 0.5);\n}\n\n.btn-check:checked + .btn-outline-info,\n.btn-check:active + .btn-outline-info, .btn-outline-info:active, .btn-outline-info.active, .btn-outline-info.dropdown-toggle.show {\n  color: #fff;\n  background-color: #75caeb;\n  border-color: #75caeb;\n}\n\n.btn-check:checked + .btn-outline-info:focus,\n.btn-check:active + .btn-outline-info:focus, .btn-outline-info:active:focus, .btn-outline-info.active:focus, .btn-outline-info.dropdown-toggle.show:focus {\n  box-shadow: 0 0 0 0.25rem rgba(117, 202, 235, 0.5);\n}\n\n.btn-outline-info:disabled, .btn-outline-info.disabled {\n  color: #75caeb;\n  background-color: transparent;\n}\n\n.btn-outline-warning {\n  color: #ff851b;\n  border-color: #ff851b;\n}\n\n.btn-outline-warning:hover {\n  color: #fff;\n  background-color: #ff851b;\n  border-color: #ff851b;\n}\n\n.btn-check:focus + .btn-outline-warning, .btn-outline-warning:focus {\n  box-shadow: 0 0 0 0.25rem rgba(255, 133, 27, 0.5);\n}\n\n.btn-check:checked + .btn-outline-warning,\n.btn-check:active + .btn-outline-warning, .btn-outline-warning:active, .btn-outline-warning.active, .btn-outline-warning.dropdown-toggle.show {\n  color: #fff;\n  background-color: #ff851b;\n  border-color: #ff851b;\n}\n\n.btn-check:checked + .btn-outline-warning:focus,\n.btn-check:active + .btn-outline-warning:focus, .btn-outline-warning:active:focus, .btn-outline-warning.active:focus, .btn-outline-warning.dropdown-toggle.show:focus {\n  box-shadow: 0 0 0 0.25rem rgba(255, 133, 27, 0.5);\n}\n\n.btn-outline-warning:disabled, .btn-outline-warning.disabled {\n  color: #ff851b;\n  background-color: transparent;\n}\n\n.btn-outline-danger {\n  color: #ff4136;\n  border-color: #ff4136;\n}\n\n.btn-outline-danger:hover {\n  color: #fff;\n  background-color: #ff4136;\n  border-color: #ff4136;\n}\n\n.btn-check:focus + .btn-outline-danger, .btn-outline-danger:focus {\n  box-shadow: 0 0 0 0.25rem rgba(255, 65, 54, 0.5);\n}\n\n.btn-check:checked + .btn-outline-danger,\n.btn-check:active + .btn-outline-danger, .btn-outline-danger:active, .btn-outline-danger.active, .btn-outline-danger.dropdown-toggle.show {\n  color: #fff;\n  background-color: #ff4136;\n  border-color: #ff4136;\n}\n\n.btn-check:checked + .btn-outline-danger:focus,\n.btn-check:active + .btn-outline-danger:focus, .btn-outline-danger:active:focus, .btn-outline-danger.active:focus, .btn-outline-danger.dropdown-toggle.show:focus {\n  box-shadow: 0 0 0 0.25rem rgba(255, 65, 54, 0.5);\n}\n\n.btn-outline-danger:disabled, .btn-outline-danger.disabled {\n  color: #ff4136;\n  background-color: transparent;\n}\n\n.btn-outline-light {\n  color: #f6f6f6;\n  border-color: #f6f6f6;\n}\n\n.btn-outline-light:hover {\n  color: #000;\n  background-color: #f6f6f6;\n  border-color: #f6f6f6;\n}\n\n.btn-check:focus + .btn-outline-light, .btn-outline-light:focus {\n  box-shadow: 0 0 0 0.25rem rgba(246, 246, 246, 0.5);\n}\n\n.btn-check:checked + .btn-outline-light,\n.btn-check:active + .btn-outline-light, .btn-outline-light:active, .btn-outline-light.active, .btn-outline-light.dropdown-toggle.show {\n  color: #000;\n  background-color: #f6f6f6;\n  border-color: #f6f6f6;\n}\n\n.btn-check:checked + .btn-outline-light:focus,\n.btn-check:active + .btn-outline-light:focus, .btn-outline-light:active:focus, .btn-outline-light.active:focus, .btn-outline-light.dropdown-toggle.show:focus {\n  box-shadow: 0 0 0 0.25rem rgba(246, 246, 246, 0.5);\n}\n\n.btn-outline-light:disabled, .btn-outline-light.disabled {\n  color: #f6f6f6;\n  background-color: transparent;\n}\n\n.btn-outline-dark {\n  color: #555;\n  border-color: #555;\n}\n\n.btn-outline-dark:hover {\n  color: #fff;\n  background-color: #555;\n  border-color: #555;\n}\n\n.btn-check:focus + .btn-outline-dark, .btn-outline-dark:focus {\n  box-shadow: 0 0 0 0.25rem rgba(85, 85, 85, 0.5);\n}\n\n.btn-check:checked + .btn-outline-dark,\n.btn-check:active + .btn-outline-dark, .btn-outline-dark:active, .btn-outline-dark.active, .btn-outline-dark.dropdown-toggle.show {\n  color: #fff;\n  background-color: #555;\n  border-color: #555;\n}\n\n.btn-check:checked + .btn-outline-dark:focus,\n.btn-check:active + .btn-outline-dark:focus, .btn-outline-dark:active:focus, .btn-outline-dark.active:focus, .btn-outline-dark.dropdown-toggle.show:focus {\n  box-shadow: 0 0 0 0.25rem rgba(85, 85, 85, 0.5);\n}\n\n.btn-outline-dark:disabled, .btn-outline-dark.disabled {\n  color: #555;\n  background-color: transparent;\n}\n\n.btn-link {\n  font-weight: 400;\n  color: #158cba;\n  text-decoration: underline;\n}\n\n.btn-link:hover {\n  color: #117095;\n}\n\n.btn-link:disabled, .btn-link.disabled {\n  color: #999;\n}\n\n.btn-lg, .btn-group-lg > .btn {\n  padding: 0.5rem 1rem;\n  font-size: 1.25rem;\n  border-radius: 0.3rem;\n}\n\n.btn-sm, .btn-group-sm > .btn {\n  padding: 0.25rem 0.5rem;\n  font-size: 0.875rem;\n  border-radius: 0.2rem;\n}\n\n.fade {\n  transition: opacity 0.15s linear;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .fade {\n    transition: none;\n  }\n}\n\n.fade:not(.show) {\n  opacity: 0;\n}\n\n.collapse:not(.show) {\n  display: none;\n}\n\n.collapsing {\n  height: 0;\n  overflow: hidden;\n  transition: height 0.35s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .collapsing {\n    transition: none;\n  }\n}\n\n.collapsing.collapse-horizontal {\n  width: 0;\n  height: auto;\n  transition: width 0.35s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .collapsing.collapse-horizontal {\n    transition: none;\n  }\n}\n\n.dropup,\n.dropend,\n.dropdown,\n.dropstart {\n  position: relative;\n}\n\n.dropdown-toggle {\n  white-space: nowrap;\n}\n\n.dropdown-toggle::after {\n  display: inline-block;\n  margin-left: 0.255em;\n  vertical-align: 0.255em;\n  content: \"\";\n  border-top: 0.3em solid;\n  border-right: 0.3em solid transparent;\n  border-bottom: 0;\n  border-left: 0.3em solid transparent;\n}\n\n.dropdown-toggle:empty::after {\n  margin-left: 0;\n}\n\n.dropdown-menu {\n  position: absolute;\n  z-index: 1000;\n  display: none;\n  min-width: 10rem;\n  padding: 0.5rem 0;\n  margin: 0;\n  font-size: 1rem;\n  color: #222;\n  text-align: left;\n  list-style: none;\n  background-color: #fff;\n  background-clip: padding-box;\n  border: 1px solid rgba(0, 0, 0, 0.15);\n  border-radius: 0.25rem;\n}\n\n.dropdown-menu[data-bs-popper] {\n  top: 100%;\n  left: 0;\n  margin-top: 0.125rem;\n}\n\n.dropdown-menu-start {\n  --bs-position: start;\n}\n\n.dropdown-menu-start[data-bs-popper] {\n  right: auto;\n  left: 0;\n}\n\n.dropdown-menu-end {\n  --bs-position: end;\n}\n\n.dropdown-menu-end[data-bs-popper] {\n  right: 0;\n  left: auto;\n}\n\n@media (min-width: 576px) {\n  .dropdown-menu-sm-start {\n    --bs-position: start;\n  }\n  .dropdown-menu-sm-start[data-bs-popper] {\n    right: auto;\n    left: 0;\n  }\n  .dropdown-menu-sm-end {\n    --bs-position: end;\n  }\n  .dropdown-menu-sm-end[data-bs-popper] {\n    right: 0;\n    left: auto;\n  }\n}\n\n@media (min-width: 768px) {\n  .dropdown-menu-md-start {\n    --bs-position: start;\n  }\n  .dropdown-menu-md-start[data-bs-popper] {\n    right: auto;\n    left: 0;\n  }\n  .dropdown-menu-md-end {\n    --bs-position: end;\n  }\n  .dropdown-menu-md-end[data-bs-popper] {\n    right: 0;\n    left: auto;\n  }\n}\n\n@media (min-width: 992px) {\n  .dropdown-menu-lg-start {\n    --bs-position: start;\n  }\n  .dropdown-menu-lg-start[data-bs-popper] {\n    right: auto;\n    left: 0;\n  }\n  .dropdown-menu-lg-end {\n    --bs-position: end;\n  }\n  .dropdown-menu-lg-end[data-bs-popper] {\n    right: 0;\n    left: auto;\n  }\n}\n\n@media (min-width: 1200px) {\n  .dropdown-menu-xl-start {\n    --bs-position: start;\n  }\n  .dropdown-menu-xl-start[data-bs-popper] {\n    right: auto;\n    left: 0;\n  }\n  .dropdown-menu-xl-end {\n    --bs-position: end;\n  }\n  .dropdown-menu-xl-end[data-bs-popper] {\n    right: 0;\n    left: auto;\n  }\n}\n\n@media (min-width: 1400px) {\n  .dropdown-menu-xxl-start {\n    --bs-position: start;\n  }\n  .dropdown-menu-xxl-start[data-bs-popper] {\n    right: auto;\n    left: 0;\n  }\n  .dropdown-menu-xxl-end {\n    --bs-position: end;\n  }\n  .dropdown-menu-xxl-end[data-bs-popper] {\n    right: 0;\n    left: auto;\n  }\n}\n\n.dropup .dropdown-menu[data-bs-popper] {\n  top: auto;\n  bottom: 100%;\n  margin-top: 0;\n  margin-bottom: 0.125rem;\n}\n\n.dropup .dropdown-toggle::after {\n  display: inline-block;\n  margin-left: 0.255em;\n  vertical-align: 0.255em;\n  content: \"\";\n  border-top: 0;\n  border-right: 0.3em solid transparent;\n  border-bottom: 0.3em solid;\n  border-left: 0.3em solid transparent;\n}\n\n.dropup .dropdown-toggle:empty::after {\n  margin-left: 0;\n}\n\n.dropend .dropdown-menu[data-bs-popper] {\n  top: 0;\n  right: auto;\n  left: 100%;\n  margin-top: 0;\n  margin-left: 0.125rem;\n}\n\n.dropend .dropdown-toggle::after {\n  display: inline-block;\n  margin-left: 0.255em;\n  vertical-align: 0.255em;\n  content: \"\";\n  border-top: 0.3em solid transparent;\n  border-right: 0;\n  border-bottom: 0.3em solid transparent;\n  border-left: 0.3em solid;\n}\n\n.dropend .dropdown-toggle:empty::after {\n  margin-left: 0;\n}\n\n.dropend .dropdown-toggle::after {\n  vertical-align: 0;\n}\n\n.dropstart .dropdown-menu[data-bs-popper] {\n  top: 0;\n  right: 100%;\n  left: auto;\n  margin-top: 0;\n  margin-right: 0.125rem;\n}\n\n.dropstart .dropdown-toggle::after {\n  display: inline-block;\n  margin-left: 0.255em;\n  vertical-align: 0.255em;\n  content: \"\";\n}\n\n.dropstart .dropdown-toggle::after {\n  display: none;\n}\n\n.dropstart .dropdown-toggle::before {\n  display: inline-block;\n  margin-right: 0.255em;\n  vertical-align: 0.255em;\n  content: \"\";\n  border-top: 0.3em solid transparent;\n  border-right: 0.3em solid;\n  border-bottom: 0.3em solid transparent;\n}\n\n.dropstart .dropdown-toggle:empty::after {\n  margin-left: 0;\n}\n\n.dropstart .dropdown-toggle::before {\n  vertical-align: 0;\n}\n\n.dropdown-divider {\n  height: 0;\n  margin: 0.5rem 0;\n  overflow: hidden;\n  border-top: 1px solid rgba(0, 0, 0, 0.15);\n}\n\n.dropdown-item {\n  display: block;\n  width: 100%;\n  padding: 0.25rem 1rem;\n  clear: both;\n  font-weight: 400;\n  color: rgba(0, 0, 0, 0.5);\n  text-align: inherit;\n  text-decoration: none;\n  white-space: nowrap;\n  background-color: transparent;\n  border: 0;\n}\n\n.dropdown-item:hover, .dropdown-item:focus {\n  color: rgba(0, 0, 0, 0.55);\n  background-color: #f0f0f0;\n}\n\n.dropdown-item.active, .dropdown-item:active {\n  color: #fff;\n  text-decoration: none;\n  background-color: #158cba;\n}\n\n.dropdown-item.disabled, .dropdown-item:disabled {\n  color: #adb5bd;\n  pointer-events: none;\n  background-color: transparent;\n}\n\n.dropdown-menu.show {\n  display: block;\n}\n\n.dropdown-header {\n  display: block;\n  padding: 0.5rem 1rem;\n  margin-bottom: 0;\n  font-size: 0.875rem;\n  color: #999;\n  white-space: nowrap;\n}\n\n.dropdown-item-text {\n  display: block;\n  padding: 0.25rem 1rem;\n  color: rgba(0, 0, 0, 0.5);\n}\n\n.dropdown-menu-dark {\n  color: #dee2e6;\n  background-color: #333;\n  border-color: rgba(0, 0, 0, 0.15);\n}\n\n.dropdown-menu-dark .dropdown-item {\n  color: #dee2e6;\n}\n\n.dropdown-menu-dark .dropdown-item:hover, .dropdown-menu-dark .dropdown-item:focus {\n  color: #fff;\n  background-color: rgba(255, 255, 255, 0.15);\n}\n\n.dropdown-menu-dark .dropdown-item.active, .dropdown-menu-dark .dropdown-item:active {\n  color: #fff;\n  background-color: #158cba;\n}\n\n.dropdown-menu-dark .dropdown-item.disabled, .dropdown-menu-dark .dropdown-item:disabled {\n  color: #adb5bd;\n}\n\n.dropdown-menu-dark .dropdown-divider {\n  border-color: rgba(0, 0, 0, 0.15);\n}\n\n.dropdown-menu-dark .dropdown-item-text {\n  color: #dee2e6;\n}\n\n.dropdown-menu-dark .dropdown-header {\n  color: #adb5bd;\n}\n\n.btn-group,\n.btn-group-vertical {\n  position: relative;\n  display: -ms-inline-flexbox;\n  display: inline-flex;\n  vertical-align: middle;\n}\n\n.btn-group > .btn,\n.btn-group-vertical > .btn {\n  position: relative;\n  -ms-flex: 1 1 auto;\n  flex: 1 1 auto;\n}\n\n.btn-group > .btn-check:checked + .btn,\n.btn-group > .btn-check:focus + .btn,\n.btn-group > .btn:hover,\n.btn-group > .btn:focus,\n.btn-group > .btn:active,\n.btn-group > .btn.active,\n.btn-group-vertical > .btn-check:checked + .btn,\n.btn-group-vertical > .btn-check:focus + .btn,\n.btn-group-vertical > .btn:hover,\n.btn-group-vertical > .btn:focus,\n.btn-group-vertical > .btn:active,\n.btn-group-vertical > .btn.active {\n  z-index: 1;\n}\n\n.btn-toolbar {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n  flex-wrap: wrap;\n  -ms-flex-pack: start;\n  justify-content: flex-start;\n}\n\n.btn-toolbar .input-group {\n  width: auto;\n}\n\n.btn-group > .btn:not(:first-child),\n.btn-group > .btn-group:not(:first-child) {\n  margin-left: -1px;\n}\n\n.btn-group > .btn:not(:last-child):not(.dropdown-toggle),\n.btn-group > .btn-group:not(:last-child) > .btn {\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n}\n\n.btn-group > .btn:nth-child(n + 3),\n.btn-group > :not(.btn-check) + .btn,\n.btn-group > .btn-group:not(:first-child) > .btn {\n  border-top-left-radius: 0;\n  border-bottom-left-radius: 0;\n}\n\n.dropdown-toggle-split {\n  padding-right: 0.5625rem;\n  padding-left: 0.5625rem;\n}\n\n.dropdown-toggle-split::after,\n.dropup .dropdown-toggle-split::after,\n.dropend .dropdown-toggle-split::after {\n  margin-left: 0;\n}\n\n.dropstart .dropdown-toggle-split::before {\n  margin-right: 0;\n}\n\n.btn-sm + .dropdown-toggle-split, .btn-group-sm > .btn + .dropdown-toggle-split {\n  padding-right: 0.375rem;\n  padding-left: 0.375rem;\n}\n\n.btn-lg + .dropdown-toggle-split, .btn-group-lg > .btn + .dropdown-toggle-split {\n  padding-right: 0.75rem;\n  padding-left: 0.75rem;\n}\n\n.btn-group-vertical {\n  -ms-flex-direction: column;\n  flex-direction: column;\n  -ms-flex-align: start;\n  align-items: flex-start;\n  -ms-flex-pack: center;\n  justify-content: center;\n}\n\n.btn-group-vertical > .btn,\n.btn-group-vertical > .btn-group {\n  width: 100%;\n}\n\n.btn-group-vertical > .btn:not(:first-child),\n.btn-group-vertical > .btn-group:not(:first-child) {\n  margin-top: -1px;\n}\n\n.btn-group-vertical > .btn:not(:last-child):not(.dropdown-toggle),\n.btn-group-vertical > .btn-group:not(:last-child) > .btn {\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 0;\n}\n\n.btn-group-vertical > .btn ~ .btn,\n.btn-group-vertical > .btn-group:not(:first-child) > .btn {\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n}\n\n.nav {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n  flex-wrap: wrap;\n  padding-left: 0;\n  margin-bottom: 0;\n  list-style: none;\n}\n\n.nav-link {\n  display: block;\n  padding: 0.5rem 1rem;\n  color: #158cba;\n  text-decoration: none;\n  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .nav-link {\n    transition: none;\n  }\n}\n\n.nav-link:hover, .nav-link:focus {\n  color: #117095;\n}\n\n.nav-link.disabled {\n  color: #999;\n  pointer-events: none;\n  cursor: default;\n}\n\n.nav-tabs {\n  border-bottom: 1px solid #f0f0f0;\n}\n\n.nav-tabs .nav-link {\n  margin-bottom: -1px;\n  background: none;\n  border: 1px solid transparent;\n  border-top-left-radius: 0.25rem;\n  border-top-right-radius: 0.25rem;\n}\n\n.nav-tabs .nav-link:hover, .nav-tabs .nav-link:focus {\n  border-color: #f0f0f0;\n  isolation: isolate;\n}\n\n.nav-tabs .nav-link.disabled {\n  color: #999;\n  background-color: transparent;\n  border-color: transparent;\n}\n\n.nav-tabs .nav-link.active,\n.nav-tabs .nav-item.show .nav-link {\n  color: #222;\n  background-color: #fff;\n  border-color: #f0f0f0;\n}\n\n.nav-tabs .dropdown-menu {\n  margin-top: -1px;\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n}\n\n.nav-pills .nav-link {\n  background: none;\n  border: 0;\n  border-radius: 0.25rem;\n}\n\n.nav-pills .nav-link.active,\n.nav-pills .show > .nav-link {\n  color: #fff;\n  background-color: #158cba;\n}\n\n.nav-fill > .nav-link,\n.nav-fill .nav-item {\n  -ms-flex: 1 1 auto;\n  flex: 1 1 auto;\n  text-align: center;\n}\n\n.nav-justified > .nav-link,\n.nav-justified .nav-item {\n  -ms-flex-preferred-size: 0;\n  flex-basis: 0;\n  -ms-flex-positive: 1;\n  flex-grow: 1;\n  text-align: center;\n}\n\n.nav-fill .nav-item .nav-link,\n.nav-justified .nav-item .nav-link {\n  width: 100%;\n}\n\n.tab-content > .tab-pane {\n  display: none;\n}\n\n.tab-content > .active {\n  display: block;\n}\n\n.navbar {\n  position: relative;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n  flex-wrap: wrap;\n  -ms-flex-align: center;\n  align-items: center;\n  -ms-flex-pack: justify;\n  justify-content: space-between;\n  padding-top: 0.5rem;\n  padding-bottom: 0.5rem;\n}\n\n.navbar > .container,\n.navbar > .container-fluid, .navbar > .container-sm, .navbar > .container-md, .navbar > .container-lg, .navbar > .container-xl, .navbar > .container-xxl {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: inherit;\n  flex-wrap: inherit;\n  -ms-flex-align: center;\n  align-items: center;\n  -ms-flex-pack: justify;\n  justify-content: space-between;\n}\n\n.navbar-brand {\n  padding-top: 0.3125rem;\n  padding-bottom: 0.3125rem;\n  margin-right: 1rem;\n  font-size: 1.25rem;\n  text-decoration: none;\n  white-space: nowrap;\n}\n\n.navbar-nav {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  padding-left: 0;\n  margin-bottom: 0;\n  list-style: none;\n}\n\n.navbar-nav .nav-link {\n  padding-right: 0;\n  padding-left: 0;\n}\n\n.navbar-nav .dropdown-menu {\n  position: static;\n}\n\n.navbar-text {\n  padding-top: 0.5rem;\n  padding-bottom: 0.5rem;\n}\n\n.navbar-collapse {\n  -ms-flex-preferred-size: 100%;\n  flex-basis: 100%;\n  -ms-flex-positive: 1;\n  flex-grow: 1;\n  -ms-flex-align: center;\n  align-items: center;\n}\n\n.navbar-toggler {\n  padding: 0.25rem 0.75rem;\n  font-size: 1.25rem;\n  line-height: 1;\n  background-color: transparent;\n  border: 1px solid transparent;\n  border-radius: 0.25rem;\n  transition: box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .navbar-toggler {\n    transition: none;\n  }\n}\n\n.navbar-toggler:hover {\n  text-decoration: none;\n}\n\n.navbar-toggler:focus {\n  text-decoration: none;\n  outline: 0;\n  box-shadow: 0 0 0 0.25rem;\n}\n\n.navbar-toggler-icon {\n  display: inline-block;\n  width: 1.5em;\n  height: 1.5em;\n  vertical-align: middle;\n  background-repeat: no-repeat;\n  background-position: center;\n  background-size: 100%;\n}\n\n.navbar-nav-scroll {\n  max-height: var(--bs-scroll-height, 75vh);\n  overflow-y: auto;\n}\n\n@media (min-width: 576px) {\n  .navbar-expand-sm {\n    -ms-flex-wrap: nowrap;\n    flex-wrap: nowrap;\n    -ms-flex-pack: start;\n    justify-content: flex-start;\n  }\n  .navbar-expand-sm .navbar-nav {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .navbar-expand-sm .navbar-nav .dropdown-menu {\n    position: absolute;\n  }\n  .navbar-expand-sm .navbar-nav .nav-link {\n    padding-right: 0.5rem;\n    padding-left: 0.5rem;\n  }\n  .navbar-expand-sm .navbar-nav-scroll {\n    overflow: visible;\n  }\n  .navbar-expand-sm .navbar-collapse {\n    display: -ms-flexbox !important;\n    display: flex !important;\n    -ms-flex-preferred-size: auto;\n    flex-basis: auto;\n  }\n  .navbar-expand-sm .navbar-toggler {\n    display: none;\n  }\n  .navbar-expand-sm .offcanvas-header {\n    display: none;\n  }\n  .navbar-expand-sm .offcanvas {\n    position: inherit;\n    bottom: 0;\n    z-index: 1000;\n    -ms-flex-positive: 1;\n    flex-grow: 1;\n    visibility: visible !important;\n    background-color: transparent;\n    border-right: 0;\n    border-left: 0;\n    transition: none;\n    -webkit-transform: none;\n    transform: none;\n  }\n  .navbar-expand-sm .offcanvas-top,\n  .navbar-expand-sm .offcanvas-bottom {\n    height: auto;\n    border-top: 0;\n    border-bottom: 0;\n  }\n  .navbar-expand-sm .offcanvas-body {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-positive: 0;\n    flex-grow: 0;\n    padding: 0;\n    overflow-y: visible;\n  }\n}\n\n@media (min-width: 768px) {\n  .navbar-expand-md {\n    -ms-flex-wrap: nowrap;\n    flex-wrap: nowrap;\n    -ms-flex-pack: start;\n    justify-content: flex-start;\n  }\n  .navbar-expand-md .navbar-nav {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .navbar-expand-md .navbar-nav .dropdown-menu {\n    position: absolute;\n  }\n  .navbar-expand-md .navbar-nav .nav-link {\n    padding-right: 0.5rem;\n    padding-left: 0.5rem;\n  }\n  .navbar-expand-md .navbar-nav-scroll {\n    overflow: visible;\n  }\n  .navbar-expand-md .navbar-collapse {\n    display: -ms-flexbox !important;\n    display: flex !important;\n    -ms-flex-preferred-size: auto;\n    flex-basis: auto;\n  }\n  .navbar-expand-md .navbar-toggler {\n    display: none;\n  }\n  .navbar-expand-md .offcanvas-header {\n    display: none;\n  }\n  .navbar-expand-md .offcanvas {\n    position: inherit;\n    bottom: 0;\n    z-index: 1000;\n    -ms-flex-positive: 1;\n    flex-grow: 1;\n    visibility: visible !important;\n    background-color: transparent;\n    border-right: 0;\n    border-left: 0;\n    transition: none;\n    -webkit-transform: none;\n    transform: none;\n  }\n  .navbar-expand-md .offcanvas-top,\n  .navbar-expand-md .offcanvas-bottom {\n    height: auto;\n    border-top: 0;\n    border-bottom: 0;\n  }\n  .navbar-expand-md .offcanvas-body {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-positive: 0;\n    flex-grow: 0;\n    padding: 0;\n    overflow-y: visible;\n  }\n}\n\n@media (min-width: 992px) {\n  .navbar-expand-lg {\n    -ms-flex-wrap: nowrap;\n    flex-wrap: nowrap;\n    -ms-flex-pack: start;\n    justify-content: flex-start;\n  }\n  .navbar-expand-lg .navbar-nav {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .navbar-expand-lg .navbar-nav .dropdown-menu {\n    position: absolute;\n  }\n  .navbar-expand-lg .navbar-nav .nav-link {\n    padding-right: 0.5rem;\n    padding-left: 0.5rem;\n  }\n  .navbar-expand-lg .navbar-nav-scroll {\n    overflow: visible;\n  }\n  .navbar-expand-lg .navbar-collapse {\n    display: -ms-flexbox !important;\n    display: flex !important;\n    -ms-flex-preferred-size: auto;\n    flex-basis: auto;\n  }\n  .navbar-expand-lg .navbar-toggler {\n    display: none;\n  }\n  .navbar-expand-lg .offcanvas-header {\n    display: none;\n  }\n  .navbar-expand-lg .offcanvas {\n    position: inherit;\n    bottom: 0;\n    z-index: 1000;\n    -ms-flex-positive: 1;\n    flex-grow: 1;\n    visibility: visible !important;\n    background-color: transparent;\n    border-right: 0;\n    border-left: 0;\n    transition: none;\n    -webkit-transform: none;\n    transform: none;\n  }\n  .navbar-expand-lg .offcanvas-top,\n  .navbar-expand-lg .offcanvas-bottom {\n    height: auto;\n    border-top: 0;\n    border-bottom: 0;\n  }\n  .navbar-expand-lg .offcanvas-body {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-positive: 0;\n    flex-grow: 0;\n    padding: 0;\n    overflow-y: visible;\n  }\n}\n\n@media (min-width: 1200px) {\n  .navbar-expand-xl {\n    -ms-flex-wrap: nowrap;\n    flex-wrap: nowrap;\n    -ms-flex-pack: start;\n    justify-content: flex-start;\n  }\n  .navbar-expand-xl .navbar-nav {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .navbar-expand-xl .navbar-nav .dropdown-menu {\n    position: absolute;\n  }\n  .navbar-expand-xl .navbar-nav .nav-link {\n    padding-right: 0.5rem;\n    padding-left: 0.5rem;\n  }\n  .navbar-expand-xl .navbar-nav-scroll {\n    overflow: visible;\n  }\n  .navbar-expand-xl .navbar-collapse {\n    display: -ms-flexbox !important;\n    display: flex !important;\n    -ms-flex-preferred-size: auto;\n    flex-basis: auto;\n  }\n  .navbar-expand-xl .navbar-toggler {\n    display: none;\n  }\n  .navbar-expand-xl .offcanvas-header {\n    display: none;\n  }\n  .navbar-expand-xl .offcanvas {\n    position: inherit;\n    bottom: 0;\n    z-index: 1000;\n    -ms-flex-positive: 1;\n    flex-grow: 1;\n    visibility: visible !important;\n    background-color: transparent;\n    border-right: 0;\n    border-left: 0;\n    transition: none;\n    -webkit-transform: none;\n    transform: none;\n  }\n  .navbar-expand-xl .offcanvas-top,\n  .navbar-expand-xl .offcanvas-bottom {\n    height: auto;\n    border-top: 0;\n    border-bottom: 0;\n  }\n  .navbar-expand-xl .offcanvas-body {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-positive: 0;\n    flex-grow: 0;\n    padding: 0;\n    overflow-y: visible;\n  }\n}\n\n@media (min-width: 1400px) {\n  .navbar-expand-xxl {\n    -ms-flex-wrap: nowrap;\n    flex-wrap: nowrap;\n    -ms-flex-pack: start;\n    justify-content: flex-start;\n  }\n  .navbar-expand-xxl .navbar-nav {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .navbar-expand-xxl .navbar-nav .dropdown-menu {\n    position: absolute;\n  }\n  .navbar-expand-xxl .navbar-nav .nav-link {\n    padding-right: 0.5rem;\n    padding-left: 0.5rem;\n  }\n  .navbar-expand-xxl .navbar-nav-scroll {\n    overflow: visible;\n  }\n  .navbar-expand-xxl .navbar-collapse {\n    display: -ms-flexbox !important;\n    display: flex !important;\n    -ms-flex-preferred-size: auto;\n    flex-basis: auto;\n  }\n  .navbar-expand-xxl .navbar-toggler {\n    display: none;\n  }\n  .navbar-expand-xxl .offcanvas-header {\n    display: none;\n  }\n  .navbar-expand-xxl .offcanvas {\n    position: inherit;\n    bottom: 0;\n    z-index: 1000;\n    -ms-flex-positive: 1;\n    flex-grow: 1;\n    visibility: visible !important;\n    background-color: transparent;\n    border-right: 0;\n    border-left: 0;\n    transition: none;\n    -webkit-transform: none;\n    transform: none;\n  }\n  .navbar-expand-xxl .offcanvas-top,\n  .navbar-expand-xxl .offcanvas-bottom {\n    height: auto;\n    border-top: 0;\n    border-bottom: 0;\n  }\n  .navbar-expand-xxl .offcanvas-body {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-positive: 0;\n    flex-grow: 0;\n    padding: 0;\n    overflow-y: visible;\n  }\n}\n\n.navbar-expand {\n  -ms-flex-wrap: nowrap;\n  flex-wrap: nowrap;\n  -ms-flex-pack: start;\n  justify-content: flex-start;\n}\n\n.navbar-expand .navbar-nav {\n  -ms-flex-direction: row;\n  flex-direction: row;\n}\n\n.navbar-expand .navbar-nav .dropdown-menu {\n  position: absolute;\n}\n\n.navbar-expand .navbar-nav .nav-link {\n  padding-right: 0.5rem;\n  padding-left: 0.5rem;\n}\n\n.navbar-expand .navbar-nav-scroll {\n  overflow: visible;\n}\n\n.navbar-expand .navbar-collapse {\n  display: -ms-flexbox !important;\n  display: flex !important;\n  -ms-flex-preferred-size: auto;\n  flex-basis: auto;\n}\n\n.navbar-expand .navbar-toggler {\n  display: none;\n}\n\n.navbar-expand .offcanvas-header {\n  display: none;\n}\n\n.navbar-expand .offcanvas {\n  position: inherit;\n  bottom: 0;\n  z-index: 1000;\n  -ms-flex-positive: 1;\n  flex-grow: 1;\n  visibility: visible !important;\n  background-color: transparent;\n  border-right: 0;\n  border-left: 0;\n  transition: none;\n  -webkit-transform: none;\n  transform: none;\n}\n\n.navbar-expand .offcanvas-top,\n.navbar-expand .offcanvas-bottom {\n  height: auto;\n  border-top: 0;\n  border-bottom: 0;\n}\n\n.navbar-expand .offcanvas-body {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-positive: 0;\n  flex-grow: 0;\n  padding: 0;\n  overflow-y: visible;\n}\n\n.navbar-light .navbar-brand {\n  color: rgba(0, 0, 0, 0.9);\n}\n\n.navbar-light .navbar-brand:hover, .navbar-light .navbar-brand:focus {\n  color: rgba(0, 0, 0, 0.9);\n}\n\n.navbar-light .navbar-nav .nav-link {\n  color: rgba(0, 0, 0, 0.55);\n}\n\n.navbar-light .navbar-nav .nav-link:hover, .navbar-light .navbar-nav .nav-link:focus {\n  color: rgba(0, 0, 0, 0.7);\n}\n\n.navbar-light .navbar-nav .nav-link.disabled {\n  color: rgba(0, 0, 0, 0.3);\n}\n\n.navbar-light .navbar-nav .show > .nav-link,\n.navbar-light .navbar-nav .nav-link.active {\n  color: rgba(0, 0, 0, 0.9);\n}\n\n.navbar-light .navbar-toggler {\n  color: rgba(0, 0, 0, 0.55);\n  border-color: rgba(0, 0, 0, 0.1);\n}\n\n.navbar-light .navbar-toggler-icon {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%280, 0, 0, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e\");\n}\n\n.navbar-light .navbar-text {\n  color: rgba(0, 0, 0, 0.55);\n}\n\n.navbar-light .navbar-text a,\n.navbar-light .navbar-text a:hover,\n.navbar-light .navbar-text a:focus {\n  color: rgba(0, 0, 0, 0.9);\n}\n\n.navbar-dark .navbar-brand {\n  color: #fff;\n}\n\n.navbar-dark .navbar-brand:hover, .navbar-dark .navbar-brand:focus {\n  color: #fff;\n}\n\n.navbar-dark .navbar-nav .nav-link {\n  color: rgba(255, 255, 255, 0.55);\n}\n\n.navbar-dark .navbar-nav .nav-link:hover, .navbar-dark .navbar-nav .nav-link:focus {\n  color: rgba(255, 255, 255, 0.75);\n}\n\n.navbar-dark .navbar-nav .nav-link.disabled {\n  color: rgba(255, 255, 255, 0.25);\n}\n\n.navbar-dark .navbar-nav .show > .nav-link,\n.navbar-dark .navbar-nav .nav-link.active {\n  color: #fff;\n}\n\n.navbar-dark .navbar-toggler {\n  color: rgba(255, 255, 255, 0.55);\n  border-color: rgba(255, 255, 255, 0.1);\n}\n\n.navbar-dark .navbar-toggler-icon {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e\");\n}\n\n.navbar-dark .navbar-text {\n  color: rgba(255, 255, 255, 0.55);\n}\n\n.navbar-dark .navbar-text a,\n.navbar-dark .navbar-text a:hover,\n.navbar-dark .navbar-text a:focus {\n  color: #fff;\n}\n\n.card {\n  position: relative;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  min-width: 0;\n  word-wrap: break-word;\n  background-color: #fff;\n  background-clip: border-box;\n  border: 1px solid rgba(0, 0, 0, 0.125);\n  border-radius: 0.25rem;\n}\n\n.card > hr {\n  margin-right: 0;\n  margin-left: 0;\n}\n\n.card > .list-group {\n  border-top: inherit;\n  border-bottom: inherit;\n}\n\n.card > .list-group:first-child {\n  border-top-width: 0;\n  border-top-left-radius: calc(0.25rem - 1px);\n  border-top-right-radius: calc(0.25rem - 1px);\n}\n\n.card > .list-group:last-child {\n  border-bottom-width: 0;\n  border-bottom-right-radius: calc(0.25rem - 1px);\n  border-bottom-left-radius: calc(0.25rem - 1px);\n}\n\n.card > .card-header + .list-group,\n.card > .list-group + .card-footer {\n  border-top: 0;\n}\n\n.card-body {\n  -ms-flex: 1 1 auto;\n  flex: 1 1 auto;\n  padding: 1rem 1rem;\n}\n\n.card-title {\n  margin-bottom: 0.5rem;\n}\n\n.card-subtitle {\n  margin-top: -0.25rem;\n  margin-bottom: 0;\n}\n\n.card-text:last-child {\n  margin-bottom: 0;\n}\n\n.card-link + .card-link {\n  margin-left: 1rem;\n}\n\n.card-header {\n  padding: 0.5rem 1rem;\n  margin-bottom: 0;\n  background-color: rgba(0, 0, 0, 0.03);\n  border-bottom: 1px solid rgba(0, 0, 0, 0.125);\n}\n\n.card-header:first-child {\n  border-radius: calc(0.25rem - 1px) calc(0.25rem - 1px) 0 0;\n}\n\n.card-footer {\n  padding: 0.5rem 1rem;\n  background-color: rgba(0, 0, 0, 0.03);\n  border-top: 1px solid rgba(0, 0, 0, 0.125);\n}\n\n.card-footer:last-child {\n  border-radius: 0 0 calc(0.25rem - 1px) calc(0.25rem - 1px);\n}\n\n.card-header-tabs {\n  margin-right: -0.5rem;\n  margin-bottom: -0.5rem;\n  margin-left: -0.5rem;\n  border-bottom: 0;\n}\n\n.card-header-pills {\n  margin-right: -0.5rem;\n  margin-left: -0.5rem;\n}\n\n.card-img-overlay {\n  position: absolute;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  padding: 1rem;\n  border-radius: calc(0.25rem - 1px);\n}\n\n.card-img,\n.card-img-top,\n.card-img-bottom {\n  width: 100%;\n}\n\n.card-img,\n.card-img-top {\n  border-top-left-radius: calc(0.25rem - 1px);\n  border-top-right-radius: calc(0.25rem - 1px);\n}\n\n.card-img,\n.card-img-bottom {\n  border-bottom-right-radius: calc(0.25rem - 1px);\n  border-bottom-left-radius: calc(0.25rem - 1px);\n}\n\n.card-group > .card {\n  margin-bottom: 0.75rem;\n}\n\n@media (min-width: 576px) {\n  .card-group {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-flow: row wrap;\n    flex-flow: row wrap;\n  }\n  .card-group > .card {\n    -ms-flex: 1 0 0%;\n    flex: 1 0 0%;\n    margin-bottom: 0;\n  }\n  .card-group > .card + .card {\n    margin-left: 0;\n    border-left: 0;\n  }\n  .card-group > .card:not(:last-child) {\n    border-top-right-radius: 0;\n    border-bottom-right-radius: 0;\n  }\n  .card-group > .card:not(:last-child) .card-img-top,\n  .card-group > .card:not(:last-child) .card-header {\n    border-top-right-radius: 0;\n  }\n  .card-group > .card:not(:last-child) .card-img-bottom,\n  .card-group > .card:not(:last-child) .card-footer {\n    border-bottom-right-radius: 0;\n  }\n  .card-group > .card:not(:first-child) {\n    border-top-left-radius: 0;\n    border-bottom-left-radius: 0;\n  }\n  .card-group > .card:not(:first-child) .card-img-top,\n  .card-group > .card:not(:first-child) .card-header {\n    border-top-left-radius: 0;\n  }\n  .card-group > .card:not(:first-child) .card-img-bottom,\n  .card-group > .card:not(:first-child) .card-footer {\n    border-bottom-left-radius: 0;\n  }\n}\n\n.accordion-button {\n  position: relative;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-align: center;\n  align-items: center;\n  width: 100%;\n  padding: 1rem 1.25rem;\n  font-size: 1rem;\n  color: #222;\n  text-align: left;\n  background-color: #fff;\n  border: 0;\n  border-radius: 0;\n  overflow-anchor: none;\n  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, border-radius 0.15s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .accordion-button {\n    transition: none;\n  }\n}\n\n.accordion-button:not(.collapsed) {\n  color: #137ea7;\n  background-color: #e8f4f8;\n  box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.125);\n}\n\n.accordion-button:not(.collapsed)::after {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23137ea7'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e\");\n  -webkit-transform: rotate(-180deg);\n  transform: rotate(-180deg);\n}\n\n.accordion-button::after {\n  -ms-flex-negative: 0;\n  flex-shrink: 0;\n  width: 1.25rem;\n  height: 1.25rem;\n  margin-left: auto;\n  content: \"\";\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23222'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e\");\n  background-repeat: no-repeat;\n  background-size: 1.25rem;\n  transition: -webkit-transform 0.2s ease-in-out;\n  transition: transform 0.2s ease-in-out;\n  transition: transform 0.2s ease-in-out, -webkit-transform 0.2s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .accordion-button::after {\n    transition: none;\n  }\n}\n\n.accordion-button:hover {\n  z-index: 2;\n}\n\n.accordion-button:focus {\n  z-index: 3;\n  border-color: #8ac6dd;\n  outline: 0;\n  box-shadow: 0 0 0 0.25rem rgba(21, 140, 186, 0.25);\n}\n\n.accordion-header {\n  margin-bottom: 0;\n}\n\n.accordion-item {\n  background-color: #fff;\n  border: 1px solid rgba(0, 0, 0, 0.125);\n}\n\n.accordion-item:first-of-type {\n  border-top-left-radius: 0.25rem;\n  border-top-right-radius: 0.25rem;\n}\n\n.accordion-item:first-of-type .accordion-button {\n  border-top-left-radius: calc(0.25rem - 1px);\n  border-top-right-radius: calc(0.25rem - 1px);\n}\n\n.accordion-item:not(:first-of-type) {\n  border-top: 0;\n}\n\n.accordion-item:last-of-type {\n  border-bottom-right-radius: 0.25rem;\n  border-bottom-left-radius: 0.25rem;\n}\n\n.accordion-item:last-of-type .accordion-button.collapsed {\n  border-bottom-right-radius: calc(0.25rem - 1px);\n  border-bottom-left-radius: calc(0.25rem - 1px);\n}\n\n.accordion-item:last-of-type .accordion-collapse {\n  border-bottom-right-radius: 0.25rem;\n  border-bottom-left-radius: 0.25rem;\n}\n\n.accordion-body {\n  padding: 1rem 1.25rem;\n}\n\n.accordion-flush .accordion-collapse {\n  border-width: 0;\n}\n\n.accordion-flush .accordion-item {\n  border-right: 0;\n  border-left: 0;\n  border-radius: 0;\n}\n\n.accordion-flush .accordion-item:first-child {\n  border-top: 0;\n}\n\n.accordion-flush .accordion-item:last-child {\n  border-bottom: 0;\n}\n\n.accordion-flush .accordion-item .accordion-button {\n  border-radius: 0;\n}\n\n.breadcrumb {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n  flex-wrap: wrap;\n  padding: 0.375rem 0.75rem;\n  margin-bottom: 1rem;\n  list-style: none;\n  background-color: #f0f0f0;\n  border-radius: 0.25rem;\n}\n\n.breadcrumb-item + .breadcrumb-item {\n  padding-left: 0.5rem;\n}\n\n.breadcrumb-item + .breadcrumb-item::before {\n  float: left;\n  padding-right: 0.5rem;\n  color: #999;\n  content: var(--bs-breadcrumb-divider, \"/\") /* rtl: var(--bs-breadcrumb-divider, \"/\") */;\n}\n\n.breadcrumb-item.active {\n  color: #999;\n}\n\n.pagination {\n  display: -ms-flexbox;\n  display: flex;\n  padding-left: 0;\n  list-style: none;\n}\n\n.page-link {\n  position: relative;\n  display: block;\n  color: #555;\n  text-decoration: none;\n  background-color: #f0f0f0;\n  border: 1px solid #dee2e6;\n  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .page-link {\n    transition: none;\n  }\n}\n\n.page-link:hover {\n  z-index: 2;\n  color: #555;\n  background-color: #f0f0f0;\n  border-color: #dee2e6;\n}\n\n.page-link:focus {\n  z-index: 3;\n  color: #117095;\n  background-color: #f0f0f0;\n  outline: 0;\n  box-shadow: 0 0 0 0.25rem rgba(21, 140, 186, 0.25);\n}\n\n.page-item:not(:first-child) .page-link {\n  margin-left: -1px;\n}\n\n.page-item.active .page-link {\n  z-index: 3;\n  color: #fff;\n  background-color: #158cba;\n  border-color: #127ba3;\n}\n\n.page-item.disabled .page-link {\n  color: #999;\n  pointer-events: none;\n  background-color: #f0f0f0;\n  border-color: #dee2e6;\n}\n\n.page-link {\n  padding: 0.375rem 0.75rem;\n}\n\n.page-item:first-child .page-link {\n  border-top-left-radius: 0.25rem;\n  border-bottom-left-radius: 0.25rem;\n}\n\n.page-item:last-child .page-link {\n  border-top-right-radius: 0.25rem;\n  border-bottom-right-radius: 0.25rem;\n}\n\n.pagination-lg .page-link {\n  padding: 0.75rem 1.5rem;\n  font-size: 1.25rem;\n}\n\n.pagination-lg .page-item:first-child .page-link {\n  border-top-left-radius: 0.3rem;\n  border-bottom-left-radius: 0.3rem;\n}\n\n.pagination-lg .page-item:last-child .page-link {\n  border-top-right-radius: 0.3rem;\n  border-bottom-right-radius: 0.3rem;\n}\n\n.pagination-sm .page-link {\n  padding: 0.25rem 0.5rem;\n  font-size: 0.875rem;\n}\n\n.pagination-sm .page-item:first-child .page-link {\n  border-top-left-radius: 0.2rem;\n  border-bottom-left-radius: 0.2rem;\n}\n\n.pagination-sm .page-item:last-child .page-link {\n  border-top-right-radius: 0.2rem;\n  border-bottom-right-radius: 0.2rem;\n}\n\n.badge {\n  display: inline-block;\n  padding: 0.35em 0.65em;\n  font-size: 0.75em;\n  font-weight: 700;\n  line-height: 1;\n  color: #fff;\n  text-align: center;\n  white-space: nowrap;\n  vertical-align: baseline;\n  border-radius: 0.25rem;\n}\n\n.badge:empty {\n  display: none;\n}\n\n.btn .badge {\n  position: relative;\n  top: -1px;\n}\n\n.alert {\n  position: relative;\n  padding: 1rem 1rem;\n  margin-bottom: 1rem;\n  border: 1px solid transparent;\n  border-radius: 0.25rem;\n}\n\n.alert-heading {\n  color: inherit;\n}\n\n.alert-link {\n  font-weight: 700;\n}\n\n.alert-dismissible {\n  padding-right: 3rem;\n}\n\n.alert-dismissible .btn-close {\n  position: absolute;\n  top: 0;\n  right: 0;\n  z-index: 2;\n  padding: 1.25rem 1rem;\n}\n\n.alert-primary {\n  color: #0d5470;\n  background-color: #d0e8f1;\n  border-color: #b9ddea;\n}\n\n.alert-primary .alert-link {\n  color: #0a435a;\n}\n\n.alert-secondary {\n  color: #909090;\n  background-color: #fcfcfc;\n  border-color: #fbfbfb;\n}\n\n.alert-secondary .alert-link {\n  color: #737373;\n}\n\n.alert-success {\n  color: #186d1a;\n  background-color: #d4f0d5;\n  border-color: #bfe9c0;\n}\n\n.alert-success .alert-link {\n  color: #135715;\n}\n\n.alert-info {\n  color: #46798d;\n  background-color: #e3f4fb;\n  border-color: #d6eff9;\n}\n\n.alert-info .alert-link {\n  color: #386171;\n}\n\n.alert-warning {\n  color: #995010;\n  background-color: #ffe7d1;\n  border-color: #ffdabb;\n}\n\n.alert-warning .alert-link {\n  color: #7a400d;\n}\n\n.alert-danger {\n  color: #992720;\n  background-color: #ffd9d7;\n  border-color: #ffc6c3;\n}\n\n.alert-danger .alert-link {\n  color: #7a1f1a;\n}\n\n.alert-light {\n  color: #949494;\n  background-color: #fdfdfd;\n  border-color: #fcfcfc;\n}\n\n.alert-light .alert-link {\n  color: #767676;\n}\n\n.alert-dark {\n  color: #333333;\n  background-color: #dddddd;\n  border-color: #cccccc;\n}\n\n.alert-dark .alert-link {\n  color: #292929;\n}\n\n@-webkit-keyframes progress-bar-stripes {\n  0% {\n    background-position-x: 1rem;\n  }\n}\n\n@keyframes progress-bar-stripes {\n  0% {\n    background-position-x: 1rem;\n  }\n}\n\n.progress {\n  display: -ms-flexbox;\n  display: flex;\n  height: 1rem;\n  overflow: hidden;\n  font-size: 0.75rem;\n  background-color: #f0f0f0;\n  border-radius: 0.25rem;\n}\n\n.progress-bar {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  -ms-flex-pack: center;\n  justify-content: center;\n  overflow: hidden;\n  color: #fff;\n  text-align: center;\n  white-space: nowrap;\n  background-color: #158cba;\n  transition: width 0.6s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .progress-bar {\n    transition: none;\n  }\n}\n\n.progress-bar-striped {\n  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-size: 1rem 1rem;\n}\n\n.progress-bar-animated {\n  -webkit-animation: 1s linear infinite progress-bar-stripes;\n  animation: 1s linear infinite progress-bar-stripes;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .progress-bar-animated {\n    -webkit-animation: none;\n    animation: none;\n  }\n}\n\n.list-group {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  padding-left: 0;\n  margin-bottom: 0;\n  border-radius: 0.25rem;\n}\n\n.list-group-numbered {\n  list-style-type: none;\n  counter-reset: section;\n}\n\n.list-group-numbered > li::before {\n  content: counters(section, \".\") \". \";\n  counter-increment: section;\n}\n\n.list-group-item-action {\n  width: 100%;\n  color: #555;\n  text-align: inherit;\n}\n\n.list-group-item-action:hover, .list-group-item-action:focus {\n  z-index: 1;\n  color: #555;\n  text-decoration: none;\n  background-color: #f6f6f6;\n}\n\n.list-group-item-action:active {\n  color: #222;\n  background-color: #f0f0f0;\n}\n\n.list-group-item {\n  position: relative;\n  display: block;\n  padding: 0.5rem 1rem;\n  color: #222;\n  text-decoration: none;\n  background-color: #fff;\n  border: 1px solid rgba(0, 0, 0, 0.125);\n}\n\n.list-group-item:first-child {\n  border-top-left-radius: inherit;\n  border-top-right-radius: inherit;\n}\n\n.list-group-item:last-child {\n  border-bottom-right-radius: inherit;\n  border-bottom-left-radius: inherit;\n}\n\n.list-group-item.disabled, .list-group-item:disabled {\n  color: #999;\n  pointer-events: none;\n  background-color: #fff;\n}\n\n.list-group-item.active {\n  z-index: 2;\n  color: #fff;\n  background-color: #158cba;\n  border-color: #158cba;\n}\n\n.list-group-item + .list-group-item {\n  border-top-width: 0;\n}\n\n.list-group-item + .list-group-item.active {\n  margin-top: -1px;\n  border-top-width: 1px;\n}\n\n.list-group-horizontal {\n  -ms-flex-direction: row;\n  flex-direction: row;\n}\n\n.list-group-horizontal > .list-group-item:first-child {\n  border-bottom-left-radius: 0.25rem;\n  border-top-right-radius: 0;\n}\n\n.list-group-horizontal > .list-group-item:last-child {\n  border-top-right-radius: 0.25rem;\n  border-bottom-left-radius: 0;\n}\n\n.list-group-horizontal > .list-group-item.active {\n  margin-top: 0;\n}\n\n.list-group-horizontal > .list-group-item + .list-group-item {\n  border-top-width: 1px;\n  border-left-width: 0;\n}\n\n.list-group-horizontal > .list-group-item + .list-group-item.active {\n  margin-left: -1px;\n  border-left-width: 1px;\n}\n\n@media (min-width: 576px) {\n  .list-group-horizontal-sm {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .list-group-horizontal-sm > .list-group-item:first-child {\n    border-bottom-left-radius: 0.25rem;\n    border-top-right-radius: 0;\n  }\n  .list-group-horizontal-sm > .list-group-item:last-child {\n    border-top-right-radius: 0.25rem;\n    border-bottom-left-radius: 0;\n  }\n  .list-group-horizontal-sm > .list-group-item.active {\n    margin-top: 0;\n  }\n  .list-group-horizontal-sm > .list-group-item + .list-group-item {\n    border-top-width: 1px;\n    border-left-width: 0;\n  }\n  .list-group-horizontal-sm > .list-group-item + .list-group-item.active {\n    margin-left: -1px;\n    border-left-width: 1px;\n  }\n}\n\n@media (min-width: 768px) {\n  .list-group-horizontal-md {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .list-group-horizontal-md > .list-group-item:first-child {\n    border-bottom-left-radius: 0.25rem;\n    border-top-right-radius: 0;\n  }\n  .list-group-horizontal-md > .list-group-item:last-child {\n    border-top-right-radius: 0.25rem;\n    border-bottom-left-radius: 0;\n  }\n  .list-group-horizontal-md > .list-group-item.active {\n    margin-top: 0;\n  }\n  .list-group-horizontal-md > .list-group-item + .list-group-item {\n    border-top-width: 1px;\n    border-left-width: 0;\n  }\n  .list-group-horizontal-md > .list-group-item + .list-group-item.active {\n    margin-left: -1px;\n    border-left-width: 1px;\n  }\n}\n\n@media (min-width: 992px) {\n  .list-group-horizontal-lg {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .list-group-horizontal-lg > .list-group-item:first-child {\n    border-bottom-left-radius: 0.25rem;\n    border-top-right-radius: 0;\n  }\n  .list-group-horizontal-lg > .list-group-item:last-child {\n    border-top-right-radius: 0.25rem;\n    border-bottom-left-radius: 0;\n  }\n  .list-group-horizontal-lg > .list-group-item.active {\n    margin-top: 0;\n  }\n  .list-group-horizontal-lg > .list-group-item + .list-group-item {\n    border-top-width: 1px;\n    border-left-width: 0;\n  }\n  .list-group-horizontal-lg > .list-group-item + .list-group-item.active {\n    margin-left: -1px;\n    border-left-width: 1px;\n  }\n}\n\n@media (min-width: 1200px) {\n  .list-group-horizontal-xl {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .list-group-horizontal-xl > .list-group-item:first-child {\n    border-bottom-left-radius: 0.25rem;\n    border-top-right-radius: 0;\n  }\n  .list-group-horizontal-xl > .list-group-item:last-child {\n    border-top-right-radius: 0.25rem;\n    border-bottom-left-radius: 0;\n  }\n  .list-group-horizontal-xl > .list-group-item.active {\n    margin-top: 0;\n  }\n  .list-group-horizontal-xl > .list-group-item + .list-group-item {\n    border-top-width: 1px;\n    border-left-width: 0;\n  }\n  .list-group-horizontal-xl > .list-group-item + .list-group-item.active {\n    margin-left: -1px;\n    border-left-width: 1px;\n  }\n}\n\n@media (min-width: 1400px) {\n  .list-group-horizontal-xxl {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .list-group-horizontal-xxl > .list-group-item:first-child {\n    border-bottom-left-radius: 0.25rem;\n    border-top-right-radius: 0;\n  }\n  .list-group-horizontal-xxl > .list-group-item:last-child {\n    border-top-right-radius: 0.25rem;\n    border-bottom-left-radius: 0;\n  }\n  .list-group-horizontal-xxl > .list-group-item.active {\n    margin-top: 0;\n  }\n  .list-group-horizontal-xxl > .list-group-item + .list-group-item {\n    border-top-width: 1px;\n    border-left-width: 0;\n  }\n  .list-group-horizontal-xxl > .list-group-item + .list-group-item.active {\n    margin-left: -1px;\n    border-left-width: 1px;\n  }\n}\n\n.list-group-flush {\n  border-radius: 0;\n}\n\n.list-group-flush > .list-group-item {\n  border-width: 0 0 1px;\n}\n\n.list-group-flush > .list-group-item:last-child {\n  border-bottom-width: 0;\n}\n\n.list-group-item-primary {\n  color: #0d5470;\n  background-color: #d0e8f1;\n}\n\n.list-group-item-primary.list-group-item-action:hover, .list-group-item-primary.list-group-item-action:focus {\n  color: #0d5470;\n  background-color: #bbd1d9;\n}\n\n.list-group-item-primary.list-group-item-action.active {\n  color: #fff;\n  background-color: #0d5470;\n  border-color: #0d5470;\n}\n\n.list-group-item-secondary {\n  color: #909090;\n  background-color: #fcfcfc;\n}\n\n.list-group-item-secondary.list-group-item-action:hover, .list-group-item-secondary.list-group-item-action:focus {\n  color: #909090;\n  background-color: #e3e3e3;\n}\n\n.list-group-item-secondary.list-group-item-action.active {\n  color: #fff;\n  background-color: #909090;\n  border-color: #909090;\n}\n\n.list-group-item-success {\n  color: #186d1a;\n  background-color: #d4f0d5;\n}\n\n.list-group-item-success.list-group-item-action:hover, .list-group-item-success.list-group-item-action:focus {\n  color: #186d1a;\n  background-color: #bfd8c0;\n}\n\n.list-group-item-success.list-group-item-action.active {\n  color: #fff;\n  background-color: #186d1a;\n  border-color: #186d1a;\n}\n\n.list-group-item-info {\n  color: #46798d;\n  background-color: #e3f4fb;\n}\n\n.list-group-item-info.list-group-item-action:hover, .list-group-item-info.list-group-item-action:focus {\n  color: #46798d;\n  background-color: #ccdce2;\n}\n\n.list-group-item-info.list-group-item-action.active {\n  color: #fff;\n  background-color: #46798d;\n  border-color: #46798d;\n}\n\n.list-group-item-warning {\n  color: #995010;\n  background-color: #ffe7d1;\n}\n\n.list-group-item-warning.list-group-item-action:hover, .list-group-item-warning.list-group-item-action:focus {\n  color: #995010;\n  background-color: #e6d0bc;\n}\n\n.list-group-item-warning.list-group-item-action.active {\n  color: #fff;\n  background-color: #995010;\n  border-color: #995010;\n}\n\n.list-group-item-danger {\n  color: #992720;\n  background-color: #ffd9d7;\n}\n\n.list-group-item-danger.list-group-item-action:hover, .list-group-item-danger.list-group-item-action:focus {\n  color: #992720;\n  background-color: #e6c3c2;\n}\n\n.list-group-item-danger.list-group-item-action.active {\n  color: #fff;\n  background-color: #992720;\n  border-color: #992720;\n}\n\n.list-group-item-light {\n  color: #949494;\n  background-color: #fdfdfd;\n}\n\n.list-group-item-light.list-group-item-action:hover, .list-group-item-light.list-group-item-action:focus {\n  color: #949494;\n  background-color: #e4e4e4;\n}\n\n.list-group-item-light.list-group-item-action.active {\n  color: #fff;\n  background-color: #949494;\n  border-color: #949494;\n}\n\n.list-group-item-dark {\n  color: #333333;\n  background-color: #dddddd;\n}\n\n.list-group-item-dark.list-group-item-action:hover, .list-group-item-dark.list-group-item-action:focus {\n  color: #333333;\n  background-color: #c7c7c7;\n}\n\n.list-group-item-dark.list-group-item-action.active {\n  color: #fff;\n  background-color: #333333;\n  border-color: #333333;\n}\n\n.btn-close {\n  box-sizing: content-box;\n  width: 1em;\n  height: 1em;\n  padding: 0.25em 0.25em;\n  color: #fff;\n  background: transparent url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M.293.293a1 1 0 011.414 0L8 6.586 14.293.293a1 1 0 111.414 1.414L9.414 8l6.293 6.293a1 1 0 01-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 01-1.414-1.414L6.586 8 .293 1.707a1 1 0 010-1.414z'/%3e%3c/svg%3e\") center/1em auto no-repeat;\n  border: 0;\n  border-radius: 0.25rem;\n  opacity: 0.4;\n}\n\n.btn-close:hover {\n  color: #fff;\n  text-decoration: none;\n  opacity: 1;\n}\n\n.btn-close:focus {\n  outline: 0;\n  box-shadow: 0 0 0 0.25rem rgba(21, 140, 186, 0.25);\n  opacity: 1;\n}\n\n.btn-close:disabled, .btn-close.disabled {\n  pointer-events: none;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  user-select: none;\n  opacity: 0.25;\n}\n\n.btn-close-white {\n  -webkit-filter: invert(1) grayscale(100%) brightness(200%);\n  filter: invert(1) grayscale(100%) brightness(200%);\n}\n\n.toast {\n  width: 350px;\n  max-width: 100%;\n  font-size: 0.875rem;\n  pointer-events: auto;\n  background-color: rgba(255, 255, 255, 0.85);\n  background-clip: padding-box;\n  border: 1px solid rgba(0, 0, 0, 0.1);\n  box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15);\n  border-radius: 0.25rem;\n}\n\n.toast.showing {\n  opacity: 0;\n}\n\n.toast:not(.show) {\n  display: none;\n}\n\n.toast-container {\n  width: -webkit-max-content;\n  width: -moz-max-content;\n  width: max-content;\n  max-width: 100%;\n  pointer-events: none;\n}\n\n.toast-container > :not(:last-child) {\n  margin-bottom: 0.75rem;\n}\n\n.toast-header {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-align: center;\n  align-items: center;\n  padding: 0.5rem 0.75rem;\n  color: #999;\n  background-color: rgba(255, 255, 255, 0.85);\n  background-clip: padding-box;\n  border-bottom: 1px solid rgba(0, 0, 0, 0.05);\n  border-top-left-radius: calc(0.25rem - 1px);\n  border-top-right-radius: calc(0.25rem - 1px);\n}\n\n.toast-header .btn-close {\n  margin-right: -0.375rem;\n  margin-left: 0.75rem;\n}\n\n.toast-body {\n  padding: 0.75rem;\n  word-wrap: break-word;\n}\n\n.modal {\n  position: fixed;\n  top: 0;\n  left: 0;\n  z-index: 1055;\n  display: none;\n  width: 100%;\n  height: 100%;\n  overflow-x: hidden;\n  overflow-y: auto;\n  outline: 0;\n}\n\n.modal-dialog {\n  position: relative;\n  width: auto;\n  margin: 0.5rem;\n  pointer-events: none;\n}\n\n.modal.fade .modal-dialog {\n  transition: -webkit-transform 0.3s ease-out;\n  transition: transform 0.3s ease-out;\n  transition: transform 0.3s ease-out, -webkit-transform 0.3s ease-out;\n  -webkit-transform: translate(0, -50px);\n  transform: translate(0, -50px);\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .modal.fade .modal-dialog {\n    transition: none;\n  }\n}\n\n.modal.show .modal-dialog {\n  -webkit-transform: none;\n  transform: none;\n}\n\n.modal.modal-static .modal-dialog {\n  -webkit-transform: scale(1.02);\n  transform: scale(1.02);\n}\n\n.modal-dialog-scrollable {\n  height: calc(100% - 1rem);\n}\n\n.modal-dialog-scrollable .modal-content {\n  max-height: 100%;\n  overflow: hidden;\n}\n\n.modal-dialog-scrollable .modal-body {\n  overflow-y: auto;\n}\n\n.modal-dialog-centered {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-align: center;\n  align-items: center;\n  min-height: calc(100% - 1rem);\n}\n\n.modal-content {\n  position: relative;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  width: 100%;\n  pointer-events: auto;\n  background-color: #fff;\n  background-clip: padding-box;\n  border: 1px solid rgba(0, 0, 0, 0.1);\n  border-radius: 0.3rem;\n  outline: 0;\n}\n\n.modal-backdrop {\n  position: fixed;\n  top: 0;\n  left: 0;\n  z-index: 1050;\n  width: 100vw;\n  height: 100vh;\n  background-color: #000;\n}\n\n.modal-backdrop.fade {\n  opacity: 0;\n}\n\n.modal-backdrop.show {\n  opacity: 0.5;\n}\n\n.modal-header {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-negative: 0;\n  flex-shrink: 0;\n  -ms-flex-align: center;\n  align-items: center;\n  -ms-flex-pack: justify;\n  justify-content: space-between;\n  padding: 1rem 1rem;\n  border-bottom: 1px solid #dee2e6;\n  border-top-left-radius: calc(0.3rem - 1px);\n  border-top-right-radius: calc(0.3rem - 1px);\n}\n\n.modal-header .btn-close {\n  padding: 0.5rem 0.5rem;\n  margin: -0.5rem -0.5rem -0.5rem auto;\n}\n\n.modal-title {\n  margin-bottom: 0;\n  line-height: 1.5;\n}\n\n.modal-body {\n  position: relative;\n  -ms-flex: 1 1 auto;\n  flex: 1 1 auto;\n  padding: 1rem;\n}\n\n.modal-footer {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n  flex-wrap: wrap;\n  -ms-flex-negative: 0;\n  flex-shrink: 0;\n  -ms-flex-align: center;\n  align-items: center;\n  -ms-flex-pack: end;\n  justify-content: flex-end;\n  padding: 0.75rem;\n  border-top: 1px solid #dee2e6;\n  border-bottom-right-radius: calc(0.3rem - 1px);\n  border-bottom-left-radius: calc(0.3rem - 1px);\n}\n\n.modal-footer > * {\n  margin: 0.25rem;\n}\n\n@media (min-width: 576px) {\n  .modal-dialog {\n    max-width: 500px;\n    margin: 1.75rem auto;\n  }\n  .modal-dialog-scrollable {\n    height: calc(100% - 3.5rem);\n  }\n  .modal-dialog-centered {\n    min-height: calc(100% - 3.5rem);\n  }\n  .modal-sm {\n    max-width: 300px;\n  }\n}\n\n@media (min-width: 992px) {\n  .modal-lg,\n  .modal-xl {\n    max-width: 800px;\n  }\n}\n\n@media (min-width: 1200px) {\n  .modal-xl {\n    max-width: 1140px;\n  }\n}\n\n.modal-fullscreen {\n  width: 100vw;\n  max-width: none;\n  height: 100%;\n  margin: 0;\n}\n\n.modal-fullscreen .modal-content {\n  height: 100%;\n  border: 0;\n  border-radius: 0;\n}\n\n.modal-fullscreen .modal-header {\n  border-radius: 0;\n}\n\n.modal-fullscreen .modal-body {\n  overflow-y: auto;\n}\n\n.modal-fullscreen .modal-footer {\n  border-radius: 0;\n}\n\n@media (max-width: 575.98px) {\n  .modal-fullscreen-sm-down {\n    width: 100vw;\n    max-width: none;\n    height: 100%;\n    margin: 0;\n  }\n  .modal-fullscreen-sm-down .modal-content {\n    height: 100%;\n    border: 0;\n    border-radius: 0;\n  }\n  .modal-fullscreen-sm-down .modal-header {\n    border-radius: 0;\n  }\n  .modal-fullscreen-sm-down .modal-body {\n    overflow-y: auto;\n  }\n  .modal-fullscreen-sm-down .modal-footer {\n    border-radius: 0;\n  }\n}\n\n@media (max-width: 767.98px) {\n  .modal-fullscreen-md-down {\n    width: 100vw;\n    max-width: none;\n    height: 100%;\n    margin: 0;\n  }\n  .modal-fullscreen-md-down .modal-content {\n    height: 100%;\n    border: 0;\n    border-radius: 0;\n  }\n  .modal-fullscreen-md-down .modal-header {\n    border-radius: 0;\n  }\n  .modal-fullscreen-md-down .modal-body {\n    overflow-y: auto;\n  }\n  .modal-fullscreen-md-down .modal-footer {\n    border-radius: 0;\n  }\n}\n\n@media (max-width: 991.98px) {\n  .modal-fullscreen-lg-down {\n    width: 100vw;\n    max-width: none;\n    height: 100%;\n    margin: 0;\n  }\n  .modal-fullscreen-lg-down .modal-content {\n    height: 100%;\n    border: 0;\n    border-radius: 0;\n  }\n  .modal-fullscreen-lg-down .modal-header {\n    border-radius: 0;\n  }\n  .modal-fullscreen-lg-down .modal-body {\n    overflow-y: auto;\n  }\n  .modal-fullscreen-lg-down .modal-footer {\n    border-radius: 0;\n  }\n}\n\n@media (max-width: 1199.98px) {\n  .modal-fullscreen-xl-down {\n    width: 100vw;\n    max-width: none;\n    height: 100%;\n    margin: 0;\n  }\n  .modal-fullscreen-xl-down .modal-content {\n    height: 100%;\n    border: 0;\n    border-radius: 0;\n  }\n  .modal-fullscreen-xl-down .modal-header {\n    border-radius: 0;\n  }\n  .modal-fullscreen-xl-down .modal-body {\n    overflow-y: auto;\n  }\n  .modal-fullscreen-xl-down .modal-footer {\n    border-radius: 0;\n  }\n}\n\n@media (max-width: 1399.98px) {\n  .modal-fullscreen-xxl-down {\n    width: 100vw;\n    max-width: none;\n    height: 100%;\n    margin: 0;\n  }\n  .modal-fullscreen-xxl-down .modal-content {\n    height: 100%;\n    border: 0;\n    border-radius: 0;\n  }\n  .modal-fullscreen-xxl-down .modal-header {\n    border-radius: 0;\n  }\n  .modal-fullscreen-xxl-down .modal-body {\n    overflow-y: auto;\n  }\n  .modal-fullscreen-xxl-down .modal-footer {\n    border-radius: 0;\n  }\n}\n\n.tooltip {\n  position: absolute;\n  z-index: 1080;\n  display: block;\n  margin: 0;\n  font-family: var(--bs-font-sans-serif);\n  font-style: normal;\n  font-weight: 400;\n  line-height: 1.5;\n  text-align: left;\n  text-align: start;\n  text-decoration: none;\n  text-shadow: none;\n  text-transform: none;\n  letter-spacing: normal;\n  word-break: normal;\n  word-spacing: normal;\n  white-space: normal;\n  line-break: auto;\n  font-size: 0.875rem;\n  word-wrap: break-word;\n  opacity: 0;\n}\n\n.tooltip.show {\n  opacity: 0.9;\n}\n\n.tooltip .tooltip-arrow {\n  position: absolute;\n  display: block;\n  width: 0.8rem;\n  height: 0.4rem;\n}\n\n.tooltip .tooltip-arrow::before {\n  position: absolute;\n  content: \"\";\n  border-color: transparent;\n  border-style: solid;\n}\n\n.bs-tooltip-top, .bs-tooltip-auto[data-popper-placement^=\"top\"] {\n  padding: 0.4rem 0;\n}\n\n.bs-tooltip-top .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=\"top\"] .tooltip-arrow {\n  bottom: 0;\n}\n\n.bs-tooltip-top .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=\"top\"] .tooltip-arrow::before {\n  top: -1px;\n  border-width: 0.4rem 0.4rem 0;\n  border-top-color: #000;\n}\n\n.bs-tooltip-end, .bs-tooltip-auto[data-popper-placement^=\"right\"] {\n  padding: 0 0.4rem;\n}\n\n.bs-tooltip-end .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=\"right\"] .tooltip-arrow {\n  left: 0;\n  width: 0.4rem;\n  height: 0.8rem;\n}\n\n.bs-tooltip-end .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=\"right\"] .tooltip-arrow::before {\n  right: -1px;\n  border-width: 0.4rem 0.4rem 0.4rem 0;\n  border-right-color: #000;\n}\n\n.bs-tooltip-bottom, .bs-tooltip-auto[data-popper-placement^=\"bottom\"] {\n  padding: 0.4rem 0;\n}\n\n.bs-tooltip-bottom .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=\"bottom\"] .tooltip-arrow {\n  top: 0;\n}\n\n.bs-tooltip-bottom .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=\"bottom\"] .tooltip-arrow::before {\n  bottom: -1px;\n  border-width: 0 0.4rem 0.4rem;\n  border-bottom-color: #000;\n}\n\n.bs-tooltip-start, .bs-tooltip-auto[data-popper-placement^=\"left\"] {\n  padding: 0 0.4rem;\n}\n\n.bs-tooltip-start .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=\"left\"] .tooltip-arrow {\n  right: 0;\n  width: 0.4rem;\n  height: 0.8rem;\n}\n\n.bs-tooltip-start .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=\"left\"] .tooltip-arrow::before {\n  left: -1px;\n  border-width: 0.4rem 0 0.4rem 0.4rem;\n  border-left-color: #000;\n}\n\n.tooltip-inner {\n  max-width: 200px;\n  padding: 0.25rem 0.5rem;\n  color: #fff;\n  text-align: center;\n  background-color: #000;\n  border-radius: 0.25rem;\n}\n\n.popover {\n  position: absolute;\n  top: 0;\n  left: 0 /* rtl:ignore */;\n  z-index: 1070;\n  display: block;\n  max-width: 276px;\n  font-family: var(--bs-font-sans-serif);\n  font-style: normal;\n  font-weight: 400;\n  line-height: 1.5;\n  text-align: left;\n  text-align: start;\n  text-decoration: none;\n  text-shadow: none;\n  text-transform: none;\n  letter-spacing: normal;\n  word-break: normal;\n  word-spacing: normal;\n  white-space: normal;\n  line-break: auto;\n  font-size: 0.875rem;\n  word-wrap: break-word;\n  background-color: #fff;\n  background-clip: padding-box;\n  border: 1px solid rgba(0, 0, 0, 0.2);\n  border-radius: 0.3rem;\n}\n\n.popover .popover-arrow {\n  position: absolute;\n  display: block;\n  width: 1rem;\n  height: 0.5rem;\n}\n\n.popover .popover-arrow::before, .popover .popover-arrow::after {\n  position: absolute;\n  display: block;\n  content: \"\";\n  border-color: transparent;\n  border-style: solid;\n}\n\n.bs-popover-top > .popover-arrow, .bs-popover-auto[data-popper-placement^=\"top\"] > .popover-arrow {\n  bottom: calc(-0.5rem - 1px);\n}\n\n.bs-popover-top > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=\"top\"] > .popover-arrow::before {\n  bottom: 0;\n  border-width: 0.5rem 0.5rem 0;\n  border-top-color: rgba(0, 0, 0, 0.25);\n}\n\n.bs-popover-top > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=\"top\"] > .popover-arrow::after {\n  bottom: 1px;\n  border-width: 0.5rem 0.5rem 0;\n  border-top-color: #fff;\n}\n\n.bs-popover-end > .popover-arrow, .bs-popover-auto[data-popper-placement^=\"right\"] > .popover-arrow {\n  left: calc(-0.5rem - 1px);\n  width: 0.5rem;\n  height: 1rem;\n}\n\n.bs-popover-end > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=\"right\"] > .popover-arrow::before {\n  left: 0;\n  border-width: 0.5rem 0.5rem 0.5rem 0;\n  border-right-color: rgba(0, 0, 0, 0.25);\n}\n\n.bs-popover-end > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=\"right\"] > .popover-arrow::after {\n  left: 1px;\n  border-width: 0.5rem 0.5rem 0.5rem 0;\n  border-right-color: #fff;\n}\n\n.bs-popover-bottom > .popover-arrow, .bs-popover-auto[data-popper-placement^=\"bottom\"] > .popover-arrow {\n  top: calc(-0.5rem - 1px);\n}\n\n.bs-popover-bottom > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=\"bottom\"] > .popover-arrow::before {\n  top: 0;\n  border-width: 0 0.5rem 0.5rem 0.5rem;\n  border-bottom-color: rgba(0, 0, 0, 0.25);\n}\n\n.bs-popover-bottom > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=\"bottom\"] > .popover-arrow::after {\n  top: 1px;\n  border-width: 0 0.5rem 0.5rem 0.5rem;\n  border-bottom-color: #fff;\n}\n\n.bs-popover-bottom .popover-header::before, .bs-popover-auto[data-popper-placement^=\"bottom\"] .popover-header::before {\n  position: absolute;\n  top: 0;\n  left: 50%;\n  display: block;\n  width: 1rem;\n  margin-left: -0.5rem;\n  content: \"\";\n  border-bottom: 1px solid #f0f0f0;\n}\n\n.bs-popover-start > .popover-arrow, .bs-popover-auto[data-popper-placement^=\"left\"] > .popover-arrow {\n  right: calc(-0.5rem - 1px);\n  width: 0.5rem;\n  height: 1rem;\n}\n\n.bs-popover-start > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=\"left\"] > .popover-arrow::before {\n  right: 0;\n  border-width: 0.5rem 0 0.5rem 0.5rem;\n  border-left-color: rgba(0, 0, 0, 0.25);\n}\n\n.bs-popover-start > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=\"left\"] > .popover-arrow::after {\n  right: 1px;\n  border-width: 0.5rem 0 0.5rem 0.5rem;\n  border-left-color: #fff;\n}\n\n.popover-header {\n  padding: 0.5rem 1rem;\n  margin-bottom: 0;\n  font-size: 1rem;\n  background-color: #f0f0f0;\n  border-bottom: 1px solid rgba(0, 0, 0, 0.2);\n  border-top-left-radius: calc(0.3rem - 1px);\n  border-top-right-radius: calc(0.3rem - 1px);\n}\n\n.popover-header:empty {\n  display: none;\n}\n\n.popover-body {\n  padding: 1rem 1rem;\n  color: #222;\n}\n\n.carousel {\n  position: relative;\n}\n\n.carousel.pointer-event {\n  -ms-touch-action: pan-y;\n  touch-action: pan-y;\n}\n\n.carousel-inner {\n  position: relative;\n  width: 100%;\n  overflow: hidden;\n}\n\n.carousel-inner::after {\n  display: block;\n  clear: both;\n  content: \"\";\n}\n\n.carousel-item {\n  position: relative;\n  display: none;\n  float: left;\n  width: 100%;\n  margin-right: -100%;\n  -webkit-backface-visibility: hidden;\n  backface-visibility: hidden;\n  transition: -webkit-transform 0.6s ease-in-out;\n  transition: transform 0.6s ease-in-out;\n  transition: transform 0.6s ease-in-out, -webkit-transform 0.6s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .carousel-item {\n    transition: none;\n  }\n}\n\n.carousel-item.active,\n.carousel-item-next,\n.carousel-item-prev {\n  display: block;\n}\n\n/* rtl:begin:ignore */\n.carousel-item-next:not(.carousel-item-start),\n.active.carousel-item-end {\n  -webkit-transform: translateX(100%);\n  transform: translateX(100%);\n}\n\n.carousel-item-prev:not(.carousel-item-end),\n.active.carousel-item-start {\n  -webkit-transform: translateX(-100%);\n  transform: translateX(-100%);\n}\n\n/* rtl:end:ignore */\n.carousel-fade .carousel-item {\n  opacity: 0;\n  transition-property: opacity;\n  -webkit-transform: none;\n  transform: none;\n}\n\n.carousel-fade .carousel-item.active,\n.carousel-fade .carousel-item-next.carousel-item-start,\n.carousel-fade .carousel-item-prev.carousel-item-end {\n  z-index: 1;\n  opacity: 1;\n}\n\n.carousel-fade .active.carousel-item-start,\n.carousel-fade .active.carousel-item-end {\n  z-index: 0;\n  opacity: 0;\n  transition: opacity 0s 0.6s;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .carousel-fade .active.carousel-item-start,\n  .carousel-fade .active.carousel-item-end {\n    transition: none;\n  }\n}\n\n.carousel-control-prev,\n.carousel-control-next {\n  position: absolute;\n  top: 0;\n  bottom: 0;\n  z-index: 1;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-align: center;\n  align-items: center;\n  -ms-flex-pack: center;\n  justify-content: center;\n  width: 15%;\n  padding: 0;\n  color: #fff;\n  text-align: center;\n  background: none;\n  border: 0;\n  opacity: 0.5;\n  transition: opacity 0.15s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .carousel-control-prev,\n  .carousel-control-next {\n    transition: none;\n  }\n}\n\n.carousel-control-prev:hover, .carousel-control-prev:focus,\n.carousel-control-next:hover,\n.carousel-control-next:focus {\n  color: #fff;\n  text-decoration: none;\n  outline: 0;\n  opacity: 0.9;\n}\n\n.carousel-control-prev {\n  left: 0;\n}\n\n.carousel-control-next {\n  right: 0;\n}\n\n.carousel-control-prev-icon,\n.carousel-control-next-icon {\n  display: inline-block;\n  width: 2rem;\n  height: 2rem;\n  background-repeat: no-repeat;\n  background-position: 50%;\n  background-size: 100% 100%;\n}\n\n/* rtl:options: {\n  \"autoRename\": true,\n  \"stringMap\":[ {\n    \"name\"    : \"prev-next\",\n    \"search\"  : \"prev\",\n    \"replace\" : \"next\"\n  } ]\n} */\n.carousel-control-prev-icon {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0z'/%3e%3c/svg%3e\");\n}\n\n.carousel-control-next-icon {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e\");\n}\n\n.carousel-indicators {\n  position: absolute;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 2;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-pack: center;\n  justify-content: center;\n  padding: 0;\n  margin-right: 15%;\n  margin-bottom: 1rem;\n  margin-left: 15%;\n  list-style: none;\n}\n\n.carousel-indicators [data-bs-target] {\n  box-sizing: content-box;\n  -ms-flex: 0 1 auto;\n  flex: 0 1 auto;\n  width: 30px;\n  height: 3px;\n  padding: 0;\n  margin-right: 3px;\n  margin-left: 3px;\n  text-indent: -999px;\n  cursor: pointer;\n  background-color: #fff;\n  background-clip: padding-box;\n  border: 0;\n  border-top: 10px solid transparent;\n  border-bottom: 10px solid transparent;\n  opacity: 0.5;\n  transition: opacity 0.6s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .carousel-indicators [data-bs-target] {\n    transition: none;\n  }\n}\n\n.carousel-indicators .active {\n  opacity: 1;\n}\n\n.carousel-caption {\n  position: absolute;\n  right: 15%;\n  bottom: 1.25rem;\n  left: 15%;\n  padding-top: 1.25rem;\n  padding-bottom: 1.25rem;\n  color: #fff;\n  text-align: center;\n}\n\n.carousel-dark .carousel-control-prev-icon,\n.carousel-dark .carousel-control-next-icon {\n  -webkit-filter: invert(1) grayscale(100);\n  filter: invert(1) grayscale(100);\n}\n\n.carousel-dark .carousel-indicators [data-bs-target] {\n  background-color: #000;\n}\n\n.carousel-dark .carousel-caption {\n  color: #000;\n}\n\n@-webkit-keyframes spinner-border {\n  to {\n    -webkit-transform: rotate(360deg) /* rtl:ignore */;\n    transform: rotate(360deg) /* rtl:ignore */;\n  }\n}\n\n@keyframes spinner-border {\n  to {\n    -webkit-transform: rotate(360deg) /* rtl:ignore */;\n    transform: rotate(360deg) /* rtl:ignore */;\n  }\n}\n\n.spinner-border {\n  display: inline-block;\n  width: 2rem;\n  height: 2rem;\n  vertical-align: -0.125em;\n  border: 0.25em solid currentColor;\n  border-right-color: transparent;\n  border-radius: 50%;\n  -webkit-animation: 0.75s linear infinite spinner-border;\n  animation: 0.75s linear infinite spinner-border;\n}\n\n.spinner-border-sm {\n  width: 1rem;\n  height: 1rem;\n  border-width: 0.2em;\n}\n\n@-webkit-keyframes spinner-grow {\n  0% {\n    -webkit-transform: scale(0);\n    transform: scale(0);\n  }\n  50% {\n    opacity: 1;\n    -webkit-transform: none;\n    transform: none;\n  }\n}\n\n@keyframes spinner-grow {\n  0% {\n    -webkit-transform: scale(0);\n    transform: scale(0);\n  }\n  50% {\n    opacity: 1;\n    -webkit-transform: none;\n    transform: none;\n  }\n}\n\n.spinner-grow {\n  display: inline-block;\n  width: 2rem;\n  height: 2rem;\n  vertical-align: -0.125em;\n  background-color: currentColor;\n  border-radius: 50%;\n  opacity: 0;\n  -webkit-animation: 0.75s linear infinite spinner-grow;\n  animation: 0.75s linear infinite spinner-grow;\n}\n\n.spinner-grow-sm {\n  width: 1rem;\n  height: 1rem;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .spinner-border,\n  .spinner-grow {\n    -webkit-animation-duration: 1.5s;\n    animation-duration: 1.5s;\n  }\n}\n\n.offcanvas {\n  position: fixed;\n  bottom: 0;\n  z-index: 1045;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  max-width: 100%;\n  visibility: hidden;\n  background-color: #fff;\n  background-clip: padding-box;\n  outline: 0;\n  transition: -webkit-transform 0.3s ease-in-out;\n  transition: transform 0.3s ease-in-out;\n  transition: transform 0.3s ease-in-out, -webkit-transform 0.3s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .offcanvas {\n    transition: none;\n  }\n}\n\n.offcanvas-backdrop {\n  position: fixed;\n  top: 0;\n  left: 0;\n  z-index: 1040;\n  width: 100vw;\n  height: 100vh;\n  background-color: #000;\n}\n\n.offcanvas-backdrop.fade {\n  opacity: 0;\n}\n\n.offcanvas-backdrop.show {\n  opacity: 0.5;\n}\n\n.offcanvas-header {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-align: center;\n  align-items: center;\n  -ms-flex-pack: justify;\n  justify-content: space-between;\n  padding: 1rem 1rem;\n}\n\n.offcanvas-header .btn-close {\n  padding: 0.5rem 0.5rem;\n  margin-top: -0.5rem;\n  margin-right: -0.5rem;\n  margin-bottom: -0.5rem;\n}\n\n.offcanvas-title {\n  margin-bottom: 0;\n  line-height: 1.5;\n}\n\n.offcanvas-body {\n  -ms-flex-positive: 1;\n  flex-grow: 1;\n  padding: 1rem 1rem;\n  overflow-y: auto;\n}\n\n.offcanvas-start {\n  top: 0;\n  left: 0;\n  width: 400px;\n  border-right: 1px solid rgba(0, 0, 0, 0.1);\n  -webkit-transform: translateX(-100%);\n  transform: translateX(-100%);\n}\n\n.offcanvas-end {\n  top: 0;\n  right: 0;\n  width: 400px;\n  border-left: 1px solid rgba(0, 0, 0, 0.1);\n  -webkit-transform: translateX(100%);\n  transform: translateX(100%);\n}\n\n.offcanvas-top {\n  top: 0;\n  right: 0;\n  left: 0;\n  height: 30vh;\n  max-height: 100%;\n  border-bottom: 1px solid rgba(0, 0, 0, 0.1);\n  -webkit-transform: translateY(-100%);\n  transform: translateY(-100%);\n}\n\n.offcanvas-bottom {\n  right: 0;\n  left: 0;\n  height: 30vh;\n  max-height: 100%;\n  border-top: 1px solid rgba(0, 0, 0, 0.1);\n  -webkit-transform: translateY(100%);\n  transform: translateY(100%);\n}\n\n.offcanvas.show {\n  -webkit-transform: none;\n  transform: none;\n}\n\n.placeholder {\n  display: inline-block;\n  min-height: 1em;\n  vertical-align: middle;\n  cursor: wait;\n  background-color: currentColor;\n  opacity: 0.5;\n}\n\n.placeholder.btn::before {\n  display: inline-block;\n  content: \"\";\n}\n\n.placeholder-xs {\n  min-height: .6em;\n}\n\n.placeholder-sm {\n  min-height: .8em;\n}\n\n.placeholder-lg {\n  min-height: 1.2em;\n}\n\n.placeholder-glow .placeholder {\n  -webkit-animation: placeholder-glow 2s ease-in-out infinite;\n  animation: placeholder-glow 2s ease-in-out infinite;\n}\n\n@-webkit-keyframes placeholder-glow {\n  50% {\n    opacity: 0.2;\n  }\n}\n\n@keyframes placeholder-glow {\n  50% {\n    opacity: 0.2;\n  }\n}\n\n.placeholder-wave {\n  -webkit-mask-image: linear-gradient(130deg, #000 55%, rgba(0, 0, 0, 0.8) 75%, #000 95%);\n  mask-image: linear-gradient(130deg, #000 55%, rgba(0, 0, 0, 0.8) 75%, #000 95%);\n  -webkit-mask-size: 200% 100%;\n  mask-size: 200% 100%;\n  -webkit-animation: placeholder-wave 2s linear infinite;\n  animation: placeholder-wave 2s linear infinite;\n}\n\n@-webkit-keyframes placeholder-wave {\n  100% {\n    -webkit-mask-position: -200% 0%;\n    mask-position: -200% 0%;\n  }\n}\n\n@keyframes placeholder-wave {\n  100% {\n    -webkit-mask-position: -200% 0%;\n    mask-position: -200% 0%;\n  }\n}\n\n.clearfix::after {\n  display: block;\n  clear: both;\n  content: \"\";\n}\n\n.link-primary {\n  color: #158cba;\n}\n\n.link-primary:hover, .link-primary:focus {\n  color: #117095;\n}\n\n.link-secondary {\n  color: #f0f0f0;\n}\n\n.link-secondary:hover, .link-secondary:focus {\n  color: #f3f3f3;\n}\n\n.link-success {\n  color: #28b62c;\n}\n\n.link-success:hover, .link-success:focus {\n  color: #209223;\n}\n\n.link-info {\n  color: #75caeb;\n}\n\n.link-info:hover, .link-info:focus {\n  color: #5ea2bc;\n}\n\n.link-warning {\n  color: #ff851b;\n}\n\n.link-warning:hover, .link-warning:focus {\n  color: #cc6a16;\n}\n\n.link-danger {\n  color: #ff4136;\n}\n\n.link-danger:hover, .link-danger:focus {\n  color: #cc342b;\n}\n\n.link-light {\n  color: #f6f6f6;\n}\n\n.link-light:hover, .link-light:focus {\n  color: #f8f8f8;\n}\n\n.link-dark {\n  color: #555;\n}\n\n.link-dark:hover, .link-dark:focus {\n  color: #444444;\n}\n\n.ratio {\n  position: relative;\n  width: 100%;\n}\n\n.ratio::before {\n  display: block;\n  padding-top: var(--bs-aspect-ratio);\n  content: \"\";\n}\n\n.ratio > * {\n  position: absolute;\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n}\n\n.ratio-1x1 {\n  --bs-aspect-ratio: 100%;\n}\n\n.ratio-4x3 {\n  --bs-aspect-ratio: calc(3 / 4 * 100%);\n}\n\n.ratio-16x9 {\n  --bs-aspect-ratio: calc(9 / 16 * 100%);\n}\n\n.ratio-21x9 {\n  --bs-aspect-ratio: calc(9 / 21 * 100%);\n}\n\n.fixed-top {\n  position: fixed;\n  top: 0;\n  right: 0;\n  left: 0;\n  z-index: 1030;\n}\n\n.fixed-bottom {\n  position: fixed;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 1030;\n}\n\n.sticky-top {\n  position: -webkit-sticky;\n  position: sticky;\n  top: 0;\n  z-index: 1020;\n}\n\n@media (min-width: 576px) {\n  .sticky-sm-top {\n    position: -webkit-sticky;\n    position: sticky;\n    top: 0;\n    z-index: 1020;\n  }\n}\n\n@media (min-width: 768px) {\n  .sticky-md-top {\n    position: -webkit-sticky;\n    position: sticky;\n    top: 0;\n    z-index: 1020;\n  }\n}\n\n@media (min-width: 992px) {\n  .sticky-lg-top {\n    position: -webkit-sticky;\n    position: sticky;\n    top: 0;\n    z-index: 1020;\n  }\n}\n\n@media (min-width: 1200px) {\n  .sticky-xl-top {\n    position: -webkit-sticky;\n    position: sticky;\n    top: 0;\n    z-index: 1020;\n  }\n}\n\n@media (min-width: 1400px) {\n  .sticky-xxl-top {\n    position: -webkit-sticky;\n    position: sticky;\n    top: 0;\n    z-index: 1020;\n  }\n}\n\n.hstack {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-direction: row;\n  flex-direction: row;\n  -ms-flex-align: center;\n  align-items: center;\n  -ms-flex-item-align: stretch;\n  align-self: stretch;\n}\n\n.vstack {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex: 1 1 auto;\n  flex: 1 1 auto;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  -ms-flex-item-align: stretch;\n  align-self: stretch;\n}\n\n.visually-hidden,\n.visually-hidden-focusable:not(:focus):not(:focus-within) {\n  position: absolute !important;\n  width: 1px !important;\n  height: 1px !important;\n  padding: 0 !important;\n  margin: -1px !important;\n  overflow: hidden !important;\n  clip: rect(0, 0, 0, 0) !important;\n  white-space: nowrap !important;\n  border: 0 !important;\n}\n\n.stretched-link::after {\n  position: absolute;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 1;\n  content: \"\";\n}\n\n.text-truncate {\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n}\n\n.vr {\n  display: inline-block;\n  -ms-flex-item-align: stretch;\n  align-self: stretch;\n  width: 1px;\n  min-height: 1em;\n  background-color: currentColor;\n  opacity: 0.25;\n}\n\n.align-baseline {\n  vertical-align: baseline !important;\n}\n\n.align-top {\n  vertical-align: top !important;\n}\n\n.align-middle {\n  vertical-align: middle !important;\n}\n\n.align-bottom {\n  vertical-align: bottom !important;\n}\n\n.align-text-bottom {\n  vertical-align: text-bottom !important;\n}\n\n.align-text-top {\n  vertical-align: text-top !important;\n}\n\n.float-start {\n  float: left !important;\n}\n\n.float-end {\n  float: right !important;\n}\n\n.float-none {\n  float: none !important;\n}\n\n.opacity-0 {\n  opacity: 0 !important;\n}\n\n.opacity-25 {\n  opacity: 0.25 !important;\n}\n\n.opacity-50 {\n  opacity: 0.5 !important;\n}\n\n.opacity-75 {\n  opacity: 0.75 !important;\n}\n\n.opacity-100 {\n  opacity: 1 !important;\n}\n\n.overflow-auto {\n  overflow: auto !important;\n}\n\n.overflow-hidden {\n  overflow: hidden !important;\n}\n\n.overflow-visible {\n  overflow: visible !important;\n}\n\n.overflow-scroll {\n  overflow: scroll !important;\n}\n\n.d-inline {\n  display: inline !important;\n}\n\n.d-inline-block {\n  display: inline-block !important;\n}\n\n.d-block {\n  display: block !important;\n}\n\n.d-grid {\n  display: grid !important;\n}\n\n.d-table {\n  display: table !important;\n}\n\n.d-table-row {\n  display: table-row !important;\n}\n\n.d-table-cell {\n  display: table-cell !important;\n}\n\n.d-flex {\n  display: -ms-flexbox !important;\n  display: flex !important;\n}\n\n.d-inline-flex {\n  display: -ms-inline-flexbox !important;\n  display: inline-flex !important;\n}\n\n.d-none {\n  display: none !important;\n}\n\n.shadow {\n  box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15) !important;\n}\n\n.shadow-sm {\n  box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075) !important;\n}\n\n.shadow-lg {\n  box-shadow: 0 1rem 3rem rgba(0, 0, 0, 0.175) !important;\n}\n\n.shadow-none {\n  box-shadow: none !important;\n}\n\n.position-static {\n  position: static !important;\n}\n\n.position-relative {\n  position: relative !important;\n}\n\n.position-absolute {\n  position: absolute !important;\n}\n\n.position-fixed {\n  position: fixed !important;\n}\n\n.position-sticky {\n  position: -webkit-sticky !important;\n  position: sticky !important;\n}\n\n.top-0 {\n  top: 0 !important;\n}\n\n.top-50 {\n  top: 50% !important;\n}\n\n.top-100 {\n  top: 100% !important;\n}\n\n.bottom-0 {\n  bottom: 0 !important;\n}\n\n.bottom-50 {\n  bottom: 50% !important;\n}\n\n.bottom-100 {\n  bottom: 100% !important;\n}\n\n.start-0 {\n  left: 0 !important;\n}\n\n.start-50 {\n  left: 50% !important;\n}\n\n.start-100 {\n  left: 100% !important;\n}\n\n.end-0 {\n  right: 0 !important;\n}\n\n.end-50 {\n  right: 50% !important;\n}\n\n.end-100 {\n  right: 100% !important;\n}\n\n.translate-middle {\n  -webkit-transform: translate(-50%, -50%) !important;\n  transform: translate(-50%, -50%) !important;\n}\n\n.translate-middle-x {\n  -webkit-transform: translateX(-50%) !important;\n  transform: translateX(-50%) !important;\n}\n\n.translate-middle-y {\n  -webkit-transform: translateY(-50%) !important;\n  transform: translateY(-50%) !important;\n}\n\n.border {\n  border: 1px solid #dee2e6 !important;\n}\n\n.border-0 {\n  border: 0 !important;\n}\n\n.border-top {\n  border-top: 1px solid #dee2e6 !important;\n}\n\n.border-top-0 {\n  border-top: 0 !important;\n}\n\n.border-end {\n  border-right: 1px solid #dee2e6 !important;\n}\n\n.border-end-0 {\n  border-right: 0 !important;\n}\n\n.border-bottom {\n  border-bottom: 1px solid #dee2e6 !important;\n}\n\n.border-bottom-0 {\n  border-bottom: 0 !important;\n}\n\n.border-start {\n  border-left: 1px solid #dee2e6 !important;\n}\n\n.border-start-0 {\n  border-left: 0 !important;\n}\n\n.border-primary {\n  border-color: #158cba !important;\n}\n\n.border-secondary {\n  border-color: #f0f0f0 !important;\n}\n\n.border-success {\n  border-color: #28b62c !important;\n}\n\n.border-info {\n  border-color: #75caeb !important;\n}\n\n.border-warning {\n  border-color: #ff851b !important;\n}\n\n.border-danger {\n  border-color: #ff4136 !important;\n}\n\n.border-light {\n  border-color: #f6f6f6 !important;\n}\n\n.border-dark {\n  border-color: #555 !important;\n}\n\n.border-white {\n  border-color: #fff !important;\n}\n\n.border-1 {\n  border-width: 1px !important;\n}\n\n.border-2 {\n  border-width: 2px !important;\n}\n\n.border-3 {\n  border-width: 3px !important;\n}\n\n.border-4 {\n  border-width: 4px !important;\n}\n\n.border-5 {\n  border-width: 5px !important;\n}\n\n.w-25 {\n  width: 25% !important;\n}\n\n.w-50 {\n  width: 50% !important;\n}\n\n.w-75 {\n  width: 75% !important;\n}\n\n.w-100 {\n  width: 100% !important;\n}\n\n.w-auto {\n  width: auto !important;\n}\n\n.mw-100 {\n  max-width: 100% !important;\n}\n\n.vw-100 {\n  width: 100vw !important;\n}\n\n.min-vw-100 {\n  min-width: 100vw !important;\n}\n\n.h-25 {\n  height: 25% !important;\n}\n\n.h-50 {\n  height: 50% !important;\n}\n\n.h-75 {\n  height: 75% !important;\n}\n\n.h-100 {\n  height: 100% !important;\n}\n\n.h-auto {\n  height: auto !important;\n}\n\n.mh-100 {\n  max-height: 100% !important;\n}\n\n.vh-100 {\n  height: 100vh !important;\n}\n\n.min-vh-100 {\n  min-height: 100vh !important;\n}\n\n.flex-fill {\n  -ms-flex: 1 1 auto !important;\n  flex: 1 1 auto !important;\n}\n\n.flex-row {\n  -ms-flex-direction: row !important;\n  flex-direction: row !important;\n}\n\n.flex-column {\n  -ms-flex-direction: column !important;\n  flex-direction: column !important;\n}\n\n.flex-row-reverse {\n  -ms-flex-direction: row-reverse !important;\n  flex-direction: row-reverse !important;\n}\n\n.flex-column-reverse {\n  -ms-flex-direction: column-reverse !important;\n  flex-direction: column-reverse !important;\n}\n\n.flex-grow-0 {\n  -ms-flex-positive: 0 !important;\n  flex-grow: 0 !important;\n}\n\n.flex-grow-1 {\n  -ms-flex-positive: 1 !important;\n  flex-grow: 1 !important;\n}\n\n.flex-shrink-0 {\n  -ms-flex-negative: 0 !important;\n  flex-shrink: 0 !important;\n}\n\n.flex-shrink-1 {\n  -ms-flex-negative: 1 !important;\n  flex-shrink: 1 !important;\n}\n\n.flex-wrap {\n  -ms-flex-wrap: wrap !important;\n  flex-wrap: wrap !important;\n}\n\n.flex-nowrap {\n  -ms-flex-wrap: nowrap !important;\n  flex-wrap: nowrap !important;\n}\n\n.flex-wrap-reverse {\n  -ms-flex-wrap: wrap-reverse !important;\n  flex-wrap: wrap-reverse !important;\n}\n\n.gap-0 {\n  gap: 0 !important;\n}\n\n.gap-1 {\n  gap: 0.25rem !important;\n}\n\n.gap-2 {\n  gap: 0.5rem !important;\n}\n\n.gap-3 {\n  gap: 1rem !important;\n}\n\n.gap-4 {\n  gap: 1.5rem !important;\n}\n\n.gap-5 {\n  gap: 3rem !important;\n}\n\n.justify-content-start {\n  -ms-flex-pack: start !important;\n  justify-content: flex-start !important;\n}\n\n.justify-content-end {\n  -ms-flex-pack: end !important;\n  justify-content: flex-end !important;\n}\n\n.justify-content-center {\n  -ms-flex-pack: center !important;\n  justify-content: center !important;\n}\n\n.justify-content-between {\n  -ms-flex-pack: justify !important;\n  justify-content: space-between !important;\n}\n\n.justify-content-around {\n  -ms-flex-pack: distribute !important;\n  justify-content: space-around !important;\n}\n\n.justify-content-evenly {\n  -ms-flex-pack: space-evenly !important;\n  justify-content: space-evenly !important;\n}\n\n.align-items-start {\n  -ms-flex-align: start !important;\n  align-items: flex-start !important;\n}\n\n.align-items-end {\n  -ms-flex-align: end !important;\n  align-items: flex-end !important;\n}\n\n.align-items-center {\n  -ms-flex-align: center !important;\n  align-items: center !important;\n}\n\n.align-items-baseline {\n  -ms-flex-align: baseline !important;\n  align-items: baseline !important;\n}\n\n.align-items-stretch {\n  -ms-flex-align: stretch !important;\n  align-items: stretch !important;\n}\n\n.align-content-start {\n  -ms-flex-line-pack: start !important;\n  align-content: flex-start !important;\n}\n\n.align-content-end {\n  -ms-flex-line-pack: end !important;\n  align-content: flex-end !important;\n}\n\n.align-content-center {\n  -ms-flex-line-pack: center !important;\n  align-content: center !important;\n}\n\n.align-content-between {\n  -ms-flex-line-pack: justify !important;\n  align-content: space-between !important;\n}\n\n.align-content-around {\n  -ms-flex-line-pack: distribute !important;\n  align-content: space-around !important;\n}\n\n.align-content-stretch {\n  -ms-flex-line-pack: stretch !important;\n  align-content: stretch !important;\n}\n\n.align-self-auto {\n  -ms-flex-item-align: auto !important;\n  align-self: auto !important;\n}\n\n.align-self-start {\n  -ms-flex-item-align: start !important;\n  align-self: flex-start !important;\n}\n\n.align-self-end {\n  -ms-flex-item-align: end !important;\n  align-self: flex-end !important;\n}\n\n.align-self-center {\n  -ms-flex-item-align: center !important;\n  align-self: center !important;\n}\n\n.align-self-baseline {\n  -ms-flex-item-align: baseline !important;\n  align-self: baseline !important;\n}\n\n.align-self-stretch {\n  -ms-flex-item-align: stretch !important;\n  align-self: stretch !important;\n}\n\n.order-first {\n  -ms-flex-order: -1 !important;\n  order: -1 !important;\n}\n\n.order-0 {\n  -ms-flex-order: 0 !important;\n  order: 0 !important;\n}\n\n.order-1 {\n  -ms-flex-order: 1 !important;\n  order: 1 !important;\n}\n\n.order-2 {\n  -ms-flex-order: 2 !important;\n  order: 2 !important;\n}\n\n.order-3 {\n  -ms-flex-order: 3 !important;\n  order: 3 !important;\n}\n\n.order-4 {\n  -ms-flex-order: 4 !important;\n  order: 4 !important;\n}\n\n.order-5 {\n  -ms-flex-order: 5 !important;\n  order: 5 !important;\n}\n\n.order-last {\n  -ms-flex-order: 6 !important;\n  order: 6 !important;\n}\n\n.m-0 {\n  margin: 0 !important;\n}\n\n.m-1 {\n  margin: 0.25rem !important;\n}\n\n.m-2 {\n  margin: 0.5rem !important;\n}\n\n.m-3 {\n  margin: 1rem !important;\n}\n\n.m-4 {\n  margin: 1.5rem !important;\n}\n\n.m-5 {\n  margin: 3rem !important;\n}\n\n.m-auto {\n  margin: auto !important;\n}\n\n.mx-0 {\n  margin-right: 0 !important;\n  margin-left: 0 !important;\n}\n\n.mx-1 {\n  margin-right: 0.25rem !important;\n  margin-left: 0.25rem !important;\n}\n\n.mx-2 {\n  margin-right: 0.5rem !important;\n  margin-left: 0.5rem !important;\n}\n\n.mx-3 {\n  margin-right: 1rem !important;\n  margin-left: 1rem !important;\n}\n\n.mx-4 {\n  margin-right: 1.5rem !important;\n  margin-left: 1.5rem !important;\n}\n\n.mx-5 {\n  margin-right: 3rem !important;\n  margin-left: 3rem !important;\n}\n\n.mx-auto {\n  margin-right: auto !important;\n  margin-left: auto !important;\n}\n\n.my-0 {\n  margin-top: 0 !important;\n  margin-bottom: 0 !important;\n}\n\n.my-1 {\n  margin-top: 0.25rem !important;\n  margin-bottom: 0.25rem !important;\n}\n\n.my-2 {\n  margin-top: 0.5rem !important;\n  margin-bottom: 0.5rem !important;\n}\n\n.my-3 {\n  margin-top: 1rem !important;\n  margin-bottom: 1rem !important;\n}\n\n.my-4 {\n  margin-top: 1.5rem !important;\n  margin-bottom: 1.5rem !important;\n}\n\n.my-5 {\n  margin-top: 3rem !important;\n  margin-bottom: 3rem !important;\n}\n\n.my-auto {\n  margin-top: auto !important;\n  margin-bottom: auto !important;\n}\n\n.mt-0 {\n  margin-top: 0 !important;\n}\n\n.mt-1 {\n  margin-top: 0.25rem !important;\n}\n\n.mt-2 {\n  margin-top: 0.5rem !important;\n}\n\n.mt-3 {\n  margin-top: 1rem !important;\n}\n\n.mt-4 {\n  margin-top: 1.5rem !important;\n}\n\n.mt-5 {\n  margin-top: 3rem !important;\n}\n\n.mt-auto {\n  margin-top: auto !important;\n}\n\n.me-0 {\n  margin-right: 0 !important;\n}\n\n.me-1 {\n  margin-right: 0.25rem !important;\n}\n\n.me-2 {\n  margin-right: 0.5rem !important;\n}\n\n.me-3 {\n  margin-right: 1rem !important;\n}\n\n.me-4 {\n  margin-right: 1.5rem !important;\n}\n\n.me-5 {\n  margin-right: 3rem !important;\n}\n\n.me-auto {\n  margin-right: auto !important;\n}\n\n.mb-0 {\n  margin-bottom: 0 !important;\n}\n\n.mb-1 {\n  margin-bottom: 0.25rem !important;\n}\n\n.mb-2 {\n  margin-bottom: 0.5rem !important;\n}\n\n.mb-3 {\n  margin-bottom: 1rem !important;\n}\n\n.mb-4 {\n  margin-bottom: 1.5rem !important;\n}\n\n.mb-5 {\n  margin-bottom: 3rem !important;\n}\n\n.mb-auto {\n  margin-bottom: auto !important;\n}\n\n.ms-0 {\n  margin-left: 0 !important;\n}\n\n.ms-1 {\n  margin-left: 0.25rem !important;\n}\n\n.ms-2 {\n  margin-left: 0.5rem !important;\n}\n\n.ms-3 {\n  margin-left: 1rem !important;\n}\n\n.ms-4 {\n  margin-left: 1.5rem !important;\n}\n\n.ms-5 {\n  margin-left: 3rem !important;\n}\n\n.ms-auto {\n  margin-left: auto !important;\n}\n\n.p-0 {\n  padding: 0 !important;\n}\n\n.p-1 {\n  padding: 0.25rem !important;\n}\n\n.p-2 {\n  padding: 0.5rem !important;\n}\n\n.p-3 {\n  padding: 1rem !important;\n}\n\n.p-4 {\n  padding: 1.5rem !important;\n}\n\n.p-5 {\n  padding: 3rem !important;\n}\n\n.px-0 {\n  padding-right: 0 !important;\n  padding-left: 0 !important;\n}\n\n.px-1 {\n  padding-right: 0.25rem !important;\n  padding-left: 0.25rem !important;\n}\n\n.px-2 {\n  padding-right: 0.5rem !important;\n  padding-left: 0.5rem !important;\n}\n\n.px-3 {\n  padding-right: 1rem !important;\n  padding-left: 1rem !important;\n}\n\n.px-4 {\n  padding-right: 1.5rem !important;\n  padding-left: 1.5rem !important;\n}\n\n.px-5 {\n  padding-right: 3rem !important;\n  padding-left: 3rem !important;\n}\n\n.py-0 {\n  padding-top: 0 !important;\n  padding-bottom: 0 !important;\n}\n\n.py-1 {\n  padding-top: 0.25rem !important;\n  padding-bottom: 0.25rem !important;\n}\n\n.py-2 {\n  padding-top: 0.5rem !important;\n  padding-bottom: 0.5rem !important;\n}\n\n.py-3 {\n  padding-top: 1rem !important;\n  padding-bottom: 1rem !important;\n}\n\n.py-4 {\n  padding-top: 1.5rem !important;\n  padding-bottom: 1.5rem !important;\n}\n\n.py-5 {\n  padding-top: 3rem !important;\n  padding-bottom: 3rem !important;\n}\n\n.pt-0 {\n  padding-top: 0 !important;\n}\n\n.pt-1 {\n  padding-top: 0.25rem !important;\n}\n\n.pt-2 {\n  padding-top: 0.5rem !important;\n}\n\n.pt-3 {\n  padding-top: 1rem !important;\n}\n\n.pt-4 {\n  padding-top: 1.5rem !important;\n}\n\n.pt-5 {\n  padding-top: 3rem !important;\n}\n\n.pe-0 {\n  padding-right: 0 !important;\n}\n\n.pe-1 {\n  padding-right: 0.25rem !important;\n}\n\n.pe-2 {\n  padding-right: 0.5rem !important;\n}\n\n.pe-3 {\n  padding-right: 1rem !important;\n}\n\n.pe-4 {\n  padding-right: 1.5rem !important;\n}\n\n.pe-5 {\n  padding-right: 3rem !important;\n}\n\n.pb-0 {\n  padding-bottom: 0 !important;\n}\n\n.pb-1 {\n  padding-bottom: 0.25rem !important;\n}\n\n.pb-2 {\n  padding-bottom: 0.5rem !important;\n}\n\n.pb-3 {\n  padding-bottom: 1rem !important;\n}\n\n.pb-4 {\n  padding-bottom: 1.5rem !important;\n}\n\n.pb-5 {\n  padding-bottom: 3rem !important;\n}\n\n.ps-0 {\n  padding-left: 0 !important;\n}\n\n.ps-1 {\n  padding-left: 0.25rem !important;\n}\n\n.ps-2 {\n  padding-left: 0.5rem !important;\n}\n\n.ps-3 {\n  padding-left: 1rem !important;\n}\n\n.ps-4 {\n  padding-left: 1.5rem !important;\n}\n\n.ps-5 {\n  padding-left: 3rem !important;\n}\n\n.font-monospace {\n  font-family: var(--bs-font-monospace) !important;\n}\n\n.fs-1 {\n  font-size: calc(1.375rem + 1.5vw) !important;\n}\n\n.fs-2 {\n  font-size: calc(1.325rem + 0.9vw) !important;\n}\n\n.fs-3 {\n  font-size: calc(1.3rem + 0.6vw) !important;\n}\n\n.fs-4 {\n  font-size: calc(1.275rem + 0.3vw) !important;\n}\n\n.fs-5 {\n  font-size: 1.25rem !important;\n}\n\n.fs-6 {\n  font-size: 1rem !important;\n}\n\n.fst-italic {\n  font-style: italic !important;\n}\n\n.fst-normal {\n  font-style: normal !important;\n}\n\n.fw-light {\n  font-weight: 300 !important;\n}\n\n.fw-lighter {\n  font-weight: lighter !important;\n}\n\n.fw-normal {\n  font-weight: 400 !important;\n}\n\n.fw-bold {\n  font-weight: 700 !important;\n}\n\n.fw-bolder {\n  font-weight: bolder !important;\n}\n\n.lh-1 {\n  line-height: 1 !important;\n}\n\n.lh-sm {\n  line-height: 1.25 !important;\n}\n\n.lh-base {\n  line-height: 1.5 !important;\n}\n\n.lh-lg {\n  line-height: 2 !important;\n}\n\n.text-start {\n  text-align: left !important;\n}\n\n.text-end {\n  text-align: right !important;\n}\n\n.text-center {\n  text-align: center !important;\n}\n\n.text-decoration-none {\n  text-decoration: none !important;\n}\n\n.text-decoration-underline {\n  text-decoration: underline !important;\n}\n\n.text-decoration-line-through {\n  text-decoration: line-through !important;\n}\n\n.text-lowercase {\n  text-transform: lowercase !important;\n}\n\n.text-uppercase {\n  text-transform: uppercase !important;\n}\n\n.text-capitalize {\n  text-transform: capitalize !important;\n}\n\n.text-wrap {\n  white-space: normal !important;\n}\n\n.text-nowrap {\n  white-space: nowrap !important;\n}\n\n/* rtl:begin:remove */\n.text-break {\n  word-wrap: break-word !important;\n  word-break: break-word !important;\n}\n\n/* rtl:end:remove */\n.text-primary {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-primary-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-secondary {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-secondary-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-success {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-success-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-info {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-info-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-warning {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-warning-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-danger {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-danger-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-light {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-light-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-dark {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-dark-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-black {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-black-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-white {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-white-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-body {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-body-color-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-muted {\n  --bs-text-opacity: 1;\n  color: #999 !important;\n}\n\n.text-black-50 {\n  --bs-text-opacity: 1;\n  color: rgba(0, 0, 0, 0.5) !important;\n}\n\n.text-white-50 {\n  --bs-text-opacity: 1;\n  color: rgba(255, 255, 255, 0.5) !important;\n}\n\n.text-reset {\n  --bs-text-opacity: 1;\n  color: inherit !important;\n}\n\n.text-opacity-25 {\n  --bs-text-opacity: 0.25;\n}\n\n.text-opacity-50 {\n  --bs-text-opacity: 0.5;\n}\n\n.text-opacity-75 {\n  --bs-text-opacity: 0.75;\n}\n\n.text-opacity-100 {\n  --bs-text-opacity: 1;\n}\n\n.bg-primary {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-primary-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-secondary {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-secondary-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-success {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-success-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-info {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-info-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-warning {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-warning-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-danger {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-danger-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-light {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-light-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-dark {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-dark-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-black {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-black-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-white {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-white-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-body {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-body-bg-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-transparent {\n  --bs-bg-opacity: 1;\n  background-color: transparent !important;\n}\n\n.bg-opacity-10 {\n  --bs-bg-opacity: 0.1;\n}\n\n.bg-opacity-25 {\n  --bs-bg-opacity: 0.25;\n}\n\n.bg-opacity-50 {\n  --bs-bg-opacity: 0.5;\n}\n\n.bg-opacity-75 {\n  --bs-bg-opacity: 0.75;\n}\n\n.bg-opacity-100 {\n  --bs-bg-opacity: 1;\n}\n\n.bg-gradient {\n  background-image: var(--bs-gradient) !important;\n}\n\n.user-select-all {\n  -webkit-user-select: all !important;\n  -moz-user-select: all !important;\n  user-select: all !important;\n}\n\n.user-select-auto {\n  -webkit-user-select: auto !important;\n  -moz-user-select: auto !important;\n  -ms-user-select: auto !important;\n  user-select: auto !important;\n}\n\n.user-select-none {\n  -webkit-user-select: none !important;\n  -moz-user-select: none !important;\n  -ms-user-select: none !important;\n  user-select: none !important;\n}\n\n.pe-none {\n  pointer-events: none !important;\n}\n\n.pe-auto {\n  pointer-events: auto !important;\n}\n\n.rounded {\n  border-radius: 0.25rem !important;\n}\n\n.rounded-0 {\n  border-radius: 0 !important;\n}\n\n.rounded-1 {\n  border-radius: 0.2rem !important;\n}\n\n.rounded-2 {\n  border-radius: 0.25rem !important;\n}\n\n.rounded-3 {\n  border-radius: 0.3rem !important;\n}\n\n.rounded-circle {\n  border-radius: 50% !important;\n}\n\n.rounded-pill {\n  border-radius: 50rem !important;\n}\n\n.rounded-top {\n  border-top-left-radius: 0.25rem !important;\n  border-top-right-radius: 0.25rem !important;\n}\n\n.rounded-end {\n  border-top-right-radius: 0.25rem !important;\n  border-bottom-right-radius: 0.25rem !important;\n}\n\n.rounded-bottom {\n  border-bottom-right-radius: 0.25rem !important;\n  border-bottom-left-radius: 0.25rem !important;\n}\n\n.rounded-start {\n  border-bottom-left-radius: 0.25rem !important;\n  border-top-left-radius: 0.25rem !important;\n}\n\n.visible {\n  visibility: visible !important;\n}\n\n.invisible {\n  visibility: hidden !important;\n}\n\n@media (min-width: 576px) {\n  .float-sm-start {\n    float: left !important;\n  }\n  .float-sm-end {\n    float: right !important;\n  }\n  .float-sm-none {\n    float: none !important;\n  }\n  .d-sm-inline {\n    display: inline !important;\n  }\n  .d-sm-inline-block {\n    display: inline-block !important;\n  }\n  .d-sm-block {\n    display: block !important;\n  }\n  .d-sm-grid {\n    display: grid !important;\n  }\n  .d-sm-table {\n    display: table !important;\n  }\n  .d-sm-table-row {\n    display: table-row !important;\n  }\n  .d-sm-table-cell {\n    display: table-cell !important;\n  }\n  .d-sm-flex {\n    display: -ms-flexbox !important;\n    display: flex !important;\n  }\n  .d-sm-inline-flex {\n    display: -ms-inline-flexbox !important;\n    display: inline-flex !important;\n  }\n  .d-sm-none {\n    display: none !important;\n  }\n  .flex-sm-fill {\n    -ms-flex: 1 1 auto !important;\n    flex: 1 1 auto !important;\n  }\n  .flex-sm-row {\n    -ms-flex-direction: row !important;\n    flex-direction: row !important;\n  }\n  .flex-sm-column {\n    -ms-flex-direction: column !important;\n    flex-direction: column !important;\n  }\n  .flex-sm-row-reverse {\n    -ms-flex-direction: row-reverse !important;\n    flex-direction: row-reverse !important;\n  }\n  .flex-sm-column-reverse {\n    -ms-flex-direction: column-reverse !important;\n    flex-direction: column-reverse !important;\n  }\n  .flex-sm-grow-0 {\n    -ms-flex-positive: 0 !important;\n    flex-grow: 0 !important;\n  }\n  .flex-sm-grow-1 {\n    -ms-flex-positive: 1 !important;\n    flex-grow: 1 !important;\n  }\n  .flex-sm-shrink-0 {\n    -ms-flex-negative: 0 !important;\n    flex-shrink: 0 !important;\n  }\n  .flex-sm-shrink-1 {\n    -ms-flex-negative: 1 !important;\n    flex-shrink: 1 !important;\n  }\n  .flex-sm-wrap {\n    -ms-flex-wrap: wrap !important;\n    flex-wrap: wrap !important;\n  }\n  .flex-sm-nowrap {\n    -ms-flex-wrap: nowrap !important;\n    flex-wrap: nowrap !important;\n  }\n  .flex-sm-wrap-reverse {\n    -ms-flex-wrap: wrap-reverse !important;\n    flex-wrap: wrap-reverse !important;\n  }\n  .gap-sm-0 {\n    gap: 0 !important;\n  }\n  .gap-sm-1 {\n    gap: 0.25rem !important;\n  }\n  .gap-sm-2 {\n    gap: 0.5rem !important;\n  }\n  .gap-sm-3 {\n    gap: 1rem !important;\n  }\n  .gap-sm-4 {\n    gap: 1.5rem !important;\n  }\n  .gap-sm-5 {\n    gap: 3rem !important;\n  }\n  .justify-content-sm-start {\n    -ms-flex-pack: start !important;\n    justify-content: flex-start !important;\n  }\n  .justify-content-sm-end {\n    -ms-flex-pack: end !important;\n    justify-content: flex-end !important;\n  }\n  .justify-content-sm-center {\n    -ms-flex-pack: center !important;\n    justify-content: center !important;\n  }\n  .justify-content-sm-between {\n    -ms-flex-pack: justify !important;\n    justify-content: space-between !important;\n  }\n  .justify-content-sm-around {\n    -ms-flex-pack: distribute !important;\n    justify-content: space-around !important;\n  }\n  .justify-content-sm-evenly {\n    -ms-flex-pack: space-evenly !important;\n    justify-content: space-evenly !important;\n  }\n  .align-items-sm-start {\n    -ms-flex-align: start !important;\n    align-items: flex-start !important;\n  }\n  .align-items-sm-end {\n    -ms-flex-align: end !important;\n    align-items: flex-end !important;\n  }\n  .align-items-sm-center {\n    -ms-flex-align: center !important;\n    align-items: center !important;\n  }\n  .align-items-sm-baseline {\n    -ms-flex-align: baseline !important;\n    align-items: baseline !important;\n  }\n  .align-items-sm-stretch {\n    -ms-flex-align: stretch !important;\n    align-items: stretch !important;\n  }\n  .align-content-sm-start {\n    -ms-flex-line-pack: start !important;\n    align-content: flex-start !important;\n  }\n  .align-content-sm-end {\n    -ms-flex-line-pack: end !important;\n    align-content: flex-end !important;\n  }\n  .align-content-sm-center {\n    -ms-flex-line-pack: center !important;\n    align-content: center !important;\n  }\n  .align-content-sm-between {\n    -ms-flex-line-pack: justify !important;\n    align-content: space-between !important;\n  }\n  .align-content-sm-around {\n    -ms-flex-line-pack: distribute !important;\n    align-content: space-around !important;\n  }\n  .align-content-sm-stretch {\n    -ms-flex-line-pack: stretch !important;\n    align-content: stretch !important;\n  }\n  .align-self-sm-auto {\n    -ms-flex-item-align: auto !important;\n    align-self: auto !important;\n  }\n  .align-self-sm-start {\n    -ms-flex-item-align: start !important;\n    align-self: flex-start !important;\n  }\n  .align-self-sm-end {\n    -ms-flex-item-align: end !important;\n    align-self: flex-end !important;\n  }\n  .align-self-sm-center {\n    -ms-flex-item-align: center !important;\n    align-self: center !important;\n  }\n  .align-self-sm-baseline {\n    -ms-flex-item-align: baseline !important;\n    align-self: baseline !important;\n  }\n  .align-self-sm-stretch {\n    -ms-flex-item-align: stretch !important;\n    align-self: stretch !important;\n  }\n  .order-sm-first {\n    -ms-flex-order: -1 !important;\n    order: -1 !important;\n  }\n  .order-sm-0 {\n    -ms-flex-order: 0 !important;\n    order: 0 !important;\n  }\n  .order-sm-1 {\n    -ms-flex-order: 1 !important;\n    order: 1 !important;\n  }\n  .order-sm-2 {\n    -ms-flex-order: 2 !important;\n    order: 2 !important;\n  }\n  .order-sm-3 {\n    -ms-flex-order: 3 !important;\n    order: 3 !important;\n  }\n  .order-sm-4 {\n    -ms-flex-order: 4 !important;\n    order: 4 !important;\n  }\n  .order-sm-5 {\n    -ms-flex-order: 5 !important;\n    order: 5 !important;\n  }\n  .order-sm-last {\n    -ms-flex-order: 6 !important;\n    order: 6 !important;\n  }\n  .m-sm-0 {\n    margin: 0 !important;\n  }\n  .m-sm-1 {\n    margin: 0.25rem !important;\n  }\n  .m-sm-2 {\n    margin: 0.5rem !important;\n  }\n  .m-sm-3 {\n    margin: 1rem !important;\n  }\n  .m-sm-4 {\n    margin: 1.5rem !important;\n  }\n  .m-sm-5 {\n    margin: 3rem !important;\n  }\n  .m-sm-auto {\n    margin: auto !important;\n  }\n  .mx-sm-0 {\n    margin-right: 0 !important;\n    margin-left: 0 !important;\n  }\n  .mx-sm-1 {\n    margin-right: 0.25rem !important;\n    margin-left: 0.25rem !important;\n  }\n  .mx-sm-2 {\n    margin-right: 0.5rem !important;\n    margin-left: 0.5rem !important;\n  }\n  .mx-sm-3 {\n    margin-right: 1rem !important;\n    margin-left: 1rem !important;\n  }\n  .mx-sm-4 {\n    margin-right: 1.5rem !important;\n    margin-left: 1.5rem !important;\n  }\n  .mx-sm-5 {\n    margin-right: 3rem !important;\n    margin-left: 3rem !important;\n  }\n  .mx-sm-auto {\n    margin-right: auto !important;\n    margin-left: auto !important;\n  }\n  .my-sm-0 {\n    margin-top: 0 !important;\n    margin-bottom: 0 !important;\n  }\n  .my-sm-1 {\n    margin-top: 0.25rem !important;\n    margin-bottom: 0.25rem !important;\n  }\n  .my-sm-2 {\n    margin-top: 0.5rem !important;\n    margin-bottom: 0.5rem !important;\n  }\n  .my-sm-3 {\n    margin-top: 1rem !important;\n    margin-bottom: 1rem !important;\n  }\n  .my-sm-4 {\n    margin-top: 1.5rem !important;\n    margin-bottom: 1.5rem !important;\n  }\n  .my-sm-5 {\n    margin-top: 3rem !important;\n    margin-bottom: 3rem !important;\n  }\n  .my-sm-auto {\n    margin-top: auto !important;\n    margin-bottom: auto !important;\n  }\n  .mt-sm-0 {\n    margin-top: 0 !important;\n  }\n  .mt-sm-1 {\n    margin-top: 0.25rem !important;\n  }\n  .mt-sm-2 {\n    margin-top: 0.5rem !important;\n  }\n  .mt-sm-3 {\n    margin-top: 1rem !important;\n  }\n  .mt-sm-4 {\n    margin-top: 1.5rem !important;\n  }\n  .mt-sm-5 {\n    margin-top: 3rem !important;\n  }\n  .mt-sm-auto {\n    margin-top: auto !important;\n  }\n  .me-sm-0 {\n    margin-right: 0 !important;\n  }\n  .me-sm-1 {\n    margin-right: 0.25rem !important;\n  }\n  .me-sm-2 {\n    margin-right: 0.5rem !important;\n  }\n  .me-sm-3 {\n    margin-right: 1rem !important;\n  }\n  .me-sm-4 {\n    margin-right: 1.5rem !important;\n  }\n  .me-sm-5 {\n    margin-right: 3rem !important;\n  }\n  .me-sm-auto {\n    margin-right: auto !important;\n  }\n  .mb-sm-0 {\n    margin-bottom: 0 !important;\n  }\n  .mb-sm-1 {\n    margin-bottom: 0.25rem !important;\n  }\n  .mb-sm-2 {\n    margin-bottom: 0.5rem !important;\n  }\n  .mb-sm-3 {\n    margin-bottom: 1rem !important;\n  }\n  .mb-sm-4 {\n    margin-bottom: 1.5rem !important;\n  }\n  .mb-sm-5 {\n    margin-bottom: 3rem !important;\n  }\n  .mb-sm-auto {\n    margin-bottom: auto !important;\n  }\n  .ms-sm-0 {\n    margin-left: 0 !important;\n  }\n  .ms-sm-1 {\n    margin-left: 0.25rem !important;\n  }\n  .ms-sm-2 {\n    margin-left: 0.5rem !important;\n  }\n  .ms-sm-3 {\n    margin-left: 1rem !important;\n  }\n  .ms-sm-4 {\n    margin-left: 1.5rem !important;\n  }\n  .ms-sm-5 {\n    margin-left: 3rem !important;\n  }\n  .ms-sm-auto {\n    margin-left: auto !important;\n  }\n  .p-sm-0 {\n    padding: 0 !important;\n  }\n  .p-sm-1 {\n    padding: 0.25rem !important;\n  }\n  .p-sm-2 {\n    padding: 0.5rem !important;\n  }\n  .p-sm-3 {\n    padding: 1rem !important;\n  }\n  .p-sm-4 {\n    padding: 1.5rem !important;\n  }\n  .p-sm-5 {\n    padding: 3rem !important;\n  }\n  .px-sm-0 {\n    padding-right: 0 !important;\n    padding-left: 0 !important;\n  }\n  .px-sm-1 {\n    padding-right: 0.25rem !important;\n    padding-left: 0.25rem !important;\n  }\n  .px-sm-2 {\n    padding-right: 0.5rem !important;\n    padding-left: 0.5rem !important;\n  }\n  .px-sm-3 {\n    padding-right: 1rem !important;\n    padding-left: 1rem !important;\n  }\n  .px-sm-4 {\n    padding-right: 1.5rem !important;\n    padding-left: 1.5rem !important;\n  }\n  .px-sm-5 {\n    padding-right: 3rem !important;\n    padding-left: 3rem !important;\n  }\n  .py-sm-0 {\n    padding-top: 0 !important;\n    padding-bottom: 0 !important;\n  }\n  .py-sm-1 {\n    padding-top: 0.25rem !important;\n    padding-bottom: 0.25rem !important;\n  }\n  .py-sm-2 {\n    padding-top: 0.5rem !important;\n    padding-bottom: 0.5rem !important;\n  }\n  .py-sm-3 {\n    padding-top: 1rem !important;\n    padding-bottom: 1rem !important;\n  }\n  .py-sm-4 {\n    padding-top: 1.5rem !important;\n    padding-bottom: 1.5rem !important;\n  }\n  .py-sm-5 {\n    padding-top: 3rem !important;\n    padding-bottom: 3rem !important;\n  }\n  .pt-sm-0 {\n    padding-top: 0 !important;\n  }\n  .pt-sm-1 {\n    padding-top: 0.25rem !important;\n  }\n  .pt-sm-2 {\n    padding-top: 0.5rem !important;\n  }\n  .pt-sm-3 {\n    padding-top: 1rem !important;\n  }\n  .pt-sm-4 {\n    padding-top: 1.5rem !important;\n  }\n  .pt-sm-5 {\n    padding-top: 3rem !important;\n  }\n  .pe-sm-0 {\n    padding-right: 0 !important;\n  }\n  .pe-sm-1 {\n    padding-right: 0.25rem !important;\n  }\n  .pe-sm-2 {\n    padding-right: 0.5rem !important;\n  }\n  .pe-sm-3 {\n    padding-right: 1rem !important;\n  }\n  .pe-sm-4 {\n    padding-right: 1.5rem !important;\n  }\n  .pe-sm-5 {\n    padding-right: 3rem !important;\n  }\n  .pb-sm-0 {\n    padding-bottom: 0 !important;\n  }\n  .pb-sm-1 {\n    padding-bottom: 0.25rem !important;\n  }\n  .pb-sm-2 {\n    padding-bottom: 0.5rem !important;\n  }\n  .pb-sm-3 {\n    padding-bottom: 1rem !important;\n  }\n  .pb-sm-4 {\n    padding-bottom: 1.5rem !important;\n  }\n  .pb-sm-5 {\n    padding-bottom: 3rem !important;\n  }\n  .ps-sm-0 {\n    padding-left: 0 !important;\n  }\n  .ps-sm-1 {\n    padding-left: 0.25rem !important;\n  }\n  .ps-sm-2 {\n    padding-left: 0.5rem !important;\n  }\n  .ps-sm-3 {\n    padding-left: 1rem !important;\n  }\n  .ps-sm-4 {\n    padding-left: 1.5rem !important;\n  }\n  .ps-sm-5 {\n    padding-left: 3rem !important;\n  }\n  .text-sm-start {\n    text-align: left !important;\n  }\n  .text-sm-end {\n    text-align: right !important;\n  }\n  .text-sm-center {\n    text-align: center !important;\n  }\n}\n\n@media (min-width: 768px) {\n  .float-md-start {\n    float: left !important;\n  }\n  .float-md-end {\n    float: right !important;\n  }\n  .float-md-none {\n    float: none !important;\n  }\n  .d-md-inline {\n    display: inline !important;\n  }\n  .d-md-inline-block {\n    display: inline-block !important;\n  }\n  .d-md-block {\n    display: block !important;\n  }\n  .d-md-grid {\n    display: grid !important;\n  }\n  .d-md-table {\n    display: table !important;\n  }\n  .d-md-table-row {\n    display: table-row !important;\n  }\n  .d-md-table-cell {\n    display: table-cell !important;\n  }\n  .d-md-flex {\n    display: -ms-flexbox !important;\n    display: flex !important;\n  }\n  .d-md-inline-flex {\n    display: -ms-inline-flexbox !important;\n    display: inline-flex !important;\n  }\n  .d-md-none {\n    display: none !important;\n  }\n  .flex-md-fill {\n    -ms-flex: 1 1 auto !important;\n    flex: 1 1 auto !important;\n  }\n  .flex-md-row {\n    -ms-flex-direction: row !important;\n    flex-direction: row !important;\n  }\n  .flex-md-column {\n    -ms-flex-direction: column !important;\n    flex-direction: column !important;\n  }\n  .flex-md-row-reverse {\n    -ms-flex-direction: row-reverse !important;\n    flex-direction: row-reverse !important;\n  }\n  .flex-md-column-reverse {\n    -ms-flex-direction: column-reverse !important;\n    flex-direction: column-reverse !important;\n  }\n  .flex-md-grow-0 {\n    -ms-flex-positive: 0 !important;\n    flex-grow: 0 !important;\n  }\n  .flex-md-grow-1 {\n    -ms-flex-positive: 1 !important;\n    flex-grow: 1 !important;\n  }\n  .flex-md-shrink-0 {\n    -ms-flex-negative: 0 !important;\n    flex-shrink: 0 !important;\n  }\n  .flex-md-shrink-1 {\n    -ms-flex-negative: 1 !important;\n    flex-shrink: 1 !important;\n  }\n  .flex-md-wrap {\n    -ms-flex-wrap: wrap !important;\n    flex-wrap: wrap !important;\n  }\n  .flex-md-nowrap {\n    -ms-flex-wrap: nowrap !important;\n    flex-wrap: nowrap !important;\n  }\n  .flex-md-wrap-reverse {\n    -ms-flex-wrap: wrap-reverse !important;\n    flex-wrap: wrap-reverse !important;\n  }\n  .gap-md-0 {\n    gap: 0 !important;\n  }\n  .gap-md-1 {\n    gap: 0.25rem !important;\n  }\n  .gap-md-2 {\n    gap: 0.5rem !important;\n  }\n  .gap-md-3 {\n    gap: 1rem !important;\n  }\n  .gap-md-4 {\n    gap: 1.5rem !important;\n  }\n  .gap-md-5 {\n    gap: 3rem !important;\n  }\n  .justify-content-md-start {\n    -ms-flex-pack: start !important;\n    justify-content: flex-start !important;\n  }\n  .justify-content-md-end {\n    -ms-flex-pack: end !important;\n    justify-content: flex-end !important;\n  }\n  .justify-content-md-center {\n    -ms-flex-pack: center !important;\n    justify-content: center !important;\n  }\n  .justify-content-md-between {\n    -ms-flex-pack: justify !important;\n    justify-content: space-between !important;\n  }\n  .justify-content-md-around {\n    -ms-flex-pack: distribute !important;\n    justify-content: space-around !important;\n  }\n  .justify-content-md-evenly {\n    -ms-flex-pack: space-evenly !important;\n    justify-content: space-evenly !important;\n  }\n  .align-items-md-start {\n    -ms-flex-align: start !important;\n    align-items: flex-start !important;\n  }\n  .align-items-md-end {\n    -ms-flex-align: end !important;\n    align-items: flex-end !important;\n  }\n  .align-items-md-center {\n    -ms-flex-align: center !important;\n    align-items: center !important;\n  }\n  .align-items-md-baseline {\n    -ms-flex-align: baseline !important;\n    align-items: baseline !important;\n  }\n  .align-items-md-stretch {\n    -ms-flex-align: stretch !important;\n    align-items: stretch !important;\n  }\n  .align-content-md-start {\n    -ms-flex-line-pack: start !important;\n    align-content: flex-start !important;\n  }\n  .align-content-md-end {\n    -ms-flex-line-pack: end !important;\n    align-content: flex-end !important;\n  }\n  .align-content-md-center {\n    -ms-flex-line-pack: center !important;\n    align-content: center !important;\n  }\n  .align-content-md-between {\n    -ms-flex-line-pack: justify !important;\n    align-content: space-between !important;\n  }\n  .align-content-md-around {\n    -ms-flex-line-pack: distribute !important;\n    align-content: space-around !important;\n  }\n  .align-content-md-stretch {\n    -ms-flex-line-pack: stretch !important;\n    align-content: stretch !important;\n  }\n  .align-self-md-auto {\n    -ms-flex-item-align: auto !important;\n    align-self: auto !important;\n  }\n  .align-self-md-start {\n    -ms-flex-item-align: start !important;\n    align-self: flex-start !important;\n  }\n  .align-self-md-end {\n    -ms-flex-item-align: end !important;\n    align-self: flex-end !important;\n  }\n  .align-self-md-center {\n    -ms-flex-item-align: center !important;\n    align-self: center !important;\n  }\n  .align-self-md-baseline {\n    -ms-flex-item-align: baseline !important;\n    align-self: baseline !important;\n  }\n  .align-self-md-stretch {\n    -ms-flex-item-align: stretch !important;\n    align-self: stretch !important;\n  }\n  .order-md-first {\n    -ms-flex-order: -1 !important;\n    order: -1 !important;\n  }\n  .order-md-0 {\n    -ms-flex-order: 0 !important;\n    order: 0 !important;\n  }\n  .order-md-1 {\n    -ms-flex-order: 1 !important;\n    order: 1 !important;\n  }\n  .order-md-2 {\n    -ms-flex-order: 2 !important;\n    order: 2 !important;\n  }\n  .order-md-3 {\n    -ms-flex-order: 3 !important;\n    order: 3 !important;\n  }\n  .order-md-4 {\n    -ms-flex-order: 4 !important;\n    order: 4 !important;\n  }\n  .order-md-5 {\n    -ms-flex-order: 5 !important;\n    order: 5 !important;\n  }\n  .order-md-last {\n    -ms-flex-order: 6 !important;\n    order: 6 !important;\n  }\n  .m-md-0 {\n    margin: 0 !important;\n  }\n  .m-md-1 {\n    margin: 0.25rem !important;\n  }\n  .m-md-2 {\n    margin: 0.5rem !important;\n  }\n  .m-md-3 {\n    margin: 1rem !important;\n  }\n  .m-md-4 {\n    margin: 1.5rem !important;\n  }\n  .m-md-5 {\n    margin: 3rem !important;\n  }\n  .m-md-auto {\n    margin: auto !important;\n  }\n  .mx-md-0 {\n    margin-right: 0 !important;\n    margin-left: 0 !important;\n  }\n  .mx-md-1 {\n    margin-right: 0.25rem !important;\n    margin-left: 0.25rem !important;\n  }\n  .mx-md-2 {\n    margin-right: 0.5rem !important;\n    margin-left: 0.5rem !important;\n  }\n  .mx-md-3 {\n    margin-right: 1rem !important;\n    margin-left: 1rem !important;\n  }\n  .mx-md-4 {\n    margin-right: 1.5rem !important;\n    margin-left: 1.5rem !important;\n  }\n  .mx-md-5 {\n    margin-right: 3rem !important;\n    margin-left: 3rem !important;\n  }\n  .mx-md-auto {\n    margin-right: auto !important;\n    margin-left: auto !important;\n  }\n  .my-md-0 {\n    margin-top: 0 !important;\n    margin-bottom: 0 !important;\n  }\n  .my-md-1 {\n    margin-top: 0.25rem !important;\n    margin-bottom: 0.25rem !important;\n  }\n  .my-md-2 {\n    margin-top: 0.5rem !important;\n    margin-bottom: 0.5rem !important;\n  }\n  .my-md-3 {\n    margin-top: 1rem !important;\n    margin-bottom: 1rem !important;\n  }\n  .my-md-4 {\n    margin-top: 1.5rem !important;\n    margin-bottom: 1.5rem !important;\n  }\n  .my-md-5 {\n    margin-top: 3rem !important;\n    margin-bottom: 3rem !important;\n  }\n  .my-md-auto {\n    margin-top: auto !important;\n    margin-bottom: auto !important;\n  }\n  .mt-md-0 {\n    margin-top: 0 !important;\n  }\n  .mt-md-1 {\n    margin-top: 0.25rem !important;\n  }\n  .mt-md-2 {\n    margin-top: 0.5rem !important;\n  }\n  .mt-md-3 {\n    margin-top: 1rem !important;\n  }\n  .mt-md-4 {\n    margin-top: 1.5rem !important;\n  }\n  .mt-md-5 {\n    margin-top: 3rem !important;\n  }\n  .mt-md-auto {\n    margin-top: auto !important;\n  }\n  .me-md-0 {\n    margin-right: 0 !important;\n  }\n  .me-md-1 {\n    margin-right: 0.25rem !important;\n  }\n  .me-md-2 {\n    margin-right: 0.5rem !important;\n  }\n  .me-md-3 {\n    margin-right: 1rem !important;\n  }\n  .me-md-4 {\n    margin-right: 1.5rem !important;\n  }\n  .me-md-5 {\n    margin-right: 3rem !important;\n  }\n  .me-md-auto {\n    margin-right: auto !important;\n  }\n  .mb-md-0 {\n    margin-bottom: 0 !important;\n  }\n  .mb-md-1 {\n    margin-bottom: 0.25rem !important;\n  }\n  .mb-md-2 {\n    margin-bottom: 0.5rem !important;\n  }\n  .mb-md-3 {\n    margin-bottom: 1rem !important;\n  }\n  .mb-md-4 {\n    margin-bottom: 1.5rem !important;\n  }\n  .mb-md-5 {\n    margin-bottom: 3rem !important;\n  }\n  .mb-md-auto {\n    margin-bottom: auto !important;\n  }\n  .ms-md-0 {\n    margin-left: 0 !important;\n  }\n  .ms-md-1 {\n    margin-left: 0.25rem !important;\n  }\n  .ms-md-2 {\n    margin-left: 0.5rem !important;\n  }\n  .ms-md-3 {\n    margin-left: 1rem !important;\n  }\n  .ms-md-4 {\n    margin-left: 1.5rem !important;\n  }\n  .ms-md-5 {\n    margin-left: 3rem !important;\n  }\n  .ms-md-auto {\n    margin-left: auto !important;\n  }\n  .p-md-0 {\n    padding: 0 !important;\n  }\n  .p-md-1 {\n    padding: 0.25rem !important;\n  }\n  .p-md-2 {\n    padding: 0.5rem !important;\n  }\n  .p-md-3 {\n    padding: 1rem !important;\n  }\n  .p-md-4 {\n    padding: 1.5rem !important;\n  }\n  .p-md-5 {\n    padding: 3rem !important;\n  }\n  .px-md-0 {\n    padding-right: 0 !important;\n    padding-left: 0 !important;\n  }\n  .px-md-1 {\n    padding-right: 0.25rem !important;\n    padding-left: 0.25rem !important;\n  }\n  .px-md-2 {\n    padding-right: 0.5rem !important;\n    padding-left: 0.5rem !important;\n  }\n  .px-md-3 {\n    padding-right: 1rem !important;\n    padding-left: 1rem !important;\n  }\n  .px-md-4 {\n    padding-right: 1.5rem !important;\n    padding-left: 1.5rem !important;\n  }\n  .px-md-5 {\n    padding-right: 3rem !important;\n    padding-left: 3rem !important;\n  }\n  .py-md-0 {\n    padding-top: 0 !important;\n    padding-bottom: 0 !important;\n  }\n  .py-md-1 {\n    padding-top: 0.25rem !important;\n    padding-bottom: 0.25rem !important;\n  }\n  .py-md-2 {\n    padding-top: 0.5rem !important;\n    padding-bottom: 0.5rem !important;\n  }\n  .py-md-3 {\n    padding-top: 1rem !important;\n    padding-bottom: 1rem !important;\n  }\n  .py-md-4 {\n    padding-top: 1.5rem !important;\n    padding-bottom: 1.5rem !important;\n  }\n  .py-md-5 {\n    padding-top: 3rem !important;\n    padding-bottom: 3rem !important;\n  }\n  .pt-md-0 {\n    padding-top: 0 !important;\n  }\n  .pt-md-1 {\n    padding-top: 0.25rem !important;\n  }\n  .pt-md-2 {\n    padding-top: 0.5rem !important;\n  }\n  .pt-md-3 {\n    padding-top: 1rem !important;\n  }\n  .pt-md-4 {\n    padding-top: 1.5rem !important;\n  }\n  .pt-md-5 {\n    padding-top: 3rem !important;\n  }\n  .pe-md-0 {\n    padding-right: 0 !important;\n  }\n  .pe-md-1 {\n    padding-right: 0.25rem !important;\n  }\n  .pe-md-2 {\n    padding-right: 0.5rem !important;\n  }\n  .pe-md-3 {\n    padding-right: 1rem !important;\n  }\n  .pe-md-4 {\n    padding-right: 1.5rem !important;\n  }\n  .pe-md-5 {\n    padding-right: 3rem !important;\n  }\n  .pb-md-0 {\n    padding-bottom: 0 !important;\n  }\n  .pb-md-1 {\n    padding-bottom: 0.25rem !important;\n  }\n  .pb-md-2 {\n    padding-bottom: 0.5rem !important;\n  }\n  .pb-md-3 {\n    padding-bottom: 1rem !important;\n  }\n  .pb-md-4 {\n    padding-bottom: 1.5rem !important;\n  }\n  .pb-md-5 {\n    padding-bottom: 3rem !important;\n  }\n  .ps-md-0 {\n    padding-left: 0 !important;\n  }\n  .ps-md-1 {\n    padding-left: 0.25rem !important;\n  }\n  .ps-md-2 {\n    padding-left: 0.5rem !important;\n  }\n  .ps-md-3 {\n    padding-left: 1rem !important;\n  }\n  .ps-md-4 {\n    padding-left: 1.5rem !important;\n  }\n  .ps-md-5 {\n    padding-left: 3rem !important;\n  }\n  .text-md-start {\n    text-align: left !important;\n  }\n  .text-md-end {\n    text-align: right !important;\n  }\n  .text-md-center {\n    text-align: center !important;\n  }\n}\n\n@media (min-width: 992px) {\n  .float-lg-start {\n    float: left !important;\n  }\n  .float-lg-end {\n    float: right !important;\n  }\n  .float-lg-none {\n    float: none !important;\n  }\n  .d-lg-inline {\n    display: inline !important;\n  }\n  .d-lg-inline-block {\n    display: inline-block !important;\n  }\n  .d-lg-block {\n    display: block !important;\n  }\n  .d-lg-grid {\n    display: grid !important;\n  }\n  .d-lg-table {\n    display: table !important;\n  }\n  .d-lg-table-row {\n    display: table-row !important;\n  }\n  .d-lg-table-cell {\n    display: table-cell !important;\n  }\n  .d-lg-flex {\n    display: -ms-flexbox !important;\n    display: flex !important;\n  }\n  .d-lg-inline-flex {\n    display: -ms-inline-flexbox !important;\n    display: inline-flex !important;\n  }\n  .d-lg-none {\n    display: none !important;\n  }\n  .flex-lg-fill {\n    -ms-flex: 1 1 auto !important;\n    flex: 1 1 auto !important;\n  }\n  .flex-lg-row {\n    -ms-flex-direction: row !important;\n    flex-direction: row !important;\n  }\n  .flex-lg-column {\n    -ms-flex-direction: column !important;\n    flex-direction: column !important;\n  }\n  .flex-lg-row-reverse {\n    -ms-flex-direction: row-reverse !important;\n    flex-direction: row-reverse !important;\n  }\n  .flex-lg-column-reverse {\n    -ms-flex-direction: column-reverse !important;\n    flex-direction: column-reverse !important;\n  }\n  .flex-lg-grow-0 {\n    -ms-flex-positive: 0 !important;\n    flex-grow: 0 !important;\n  }\n  .flex-lg-grow-1 {\n    -ms-flex-positive: 1 !important;\n    flex-grow: 1 !important;\n  }\n  .flex-lg-shrink-0 {\n    -ms-flex-negative: 0 !important;\n    flex-shrink: 0 !important;\n  }\n  .flex-lg-shrink-1 {\n    -ms-flex-negative: 1 !important;\n    flex-shrink: 1 !important;\n  }\n  .flex-lg-wrap {\n    -ms-flex-wrap: wrap !important;\n    flex-wrap: wrap !important;\n  }\n  .flex-lg-nowrap {\n    -ms-flex-wrap: nowrap !important;\n    flex-wrap: nowrap !important;\n  }\n  .flex-lg-wrap-reverse {\n    -ms-flex-wrap: wrap-reverse !important;\n    flex-wrap: wrap-reverse !important;\n  }\n  .gap-lg-0 {\n    gap: 0 !important;\n  }\n  .gap-lg-1 {\n    gap: 0.25rem !important;\n  }\n  .gap-lg-2 {\n    gap: 0.5rem !important;\n  }\n  .gap-lg-3 {\n    gap: 1rem !important;\n  }\n  .gap-lg-4 {\n    gap: 1.5rem !important;\n  }\n  .gap-lg-5 {\n    gap: 3rem !important;\n  }\n  .justify-content-lg-start {\n    -ms-flex-pack: start !important;\n    justify-content: flex-start !important;\n  }\n  .justify-content-lg-end {\n    -ms-flex-pack: end !important;\n    justify-content: flex-end !important;\n  }\n  .justify-content-lg-center {\n    -ms-flex-pack: center !important;\n    justify-content: center !important;\n  }\n  .justify-content-lg-between {\n    -ms-flex-pack: justify !important;\n    justify-content: space-between !important;\n  }\n  .justify-content-lg-around {\n    -ms-flex-pack: distribute !important;\n    justify-content: space-around !important;\n  }\n  .justify-content-lg-evenly {\n    -ms-flex-pack: space-evenly !important;\n    justify-content: space-evenly !important;\n  }\n  .align-items-lg-start {\n    -ms-flex-align: start !important;\n    align-items: flex-start !important;\n  }\n  .align-items-lg-end {\n    -ms-flex-align: end !important;\n    align-items: flex-end !important;\n  }\n  .align-items-lg-center {\n    -ms-flex-align: center !important;\n    align-items: center !important;\n  }\n  .align-items-lg-baseline {\n    -ms-flex-align: baseline !important;\n    align-items: baseline !important;\n  }\n  .align-items-lg-stretch {\n    -ms-flex-align: stretch !important;\n    align-items: stretch !important;\n  }\n  .align-content-lg-start {\n    -ms-flex-line-pack: start !important;\n    align-content: flex-start !important;\n  }\n  .align-content-lg-end {\n    -ms-flex-line-pack: end !important;\n    align-content: flex-end !important;\n  }\n  .align-content-lg-center {\n    -ms-flex-line-pack: center !important;\n    align-content: center !important;\n  }\n  .align-content-lg-between {\n    -ms-flex-line-pack: justify !important;\n    align-content: space-between !important;\n  }\n  .align-content-lg-around {\n    -ms-flex-line-pack: distribute !important;\n    align-content: space-around !important;\n  }\n  .align-content-lg-stretch {\n    -ms-flex-line-pack: stretch !important;\n    align-content: stretch !important;\n  }\n  .align-self-lg-auto {\n    -ms-flex-item-align: auto !important;\n    align-self: auto !important;\n  }\n  .align-self-lg-start {\n    -ms-flex-item-align: start !important;\n    align-self: flex-start !important;\n  }\n  .align-self-lg-end {\n    -ms-flex-item-align: end !important;\n    align-self: flex-end !important;\n  }\n  .align-self-lg-center {\n    -ms-flex-item-align: center !important;\n    align-self: center !important;\n  }\n  .align-self-lg-baseline {\n    -ms-flex-item-align: baseline !important;\n    align-self: baseline !important;\n  }\n  .align-self-lg-stretch {\n    -ms-flex-item-align: stretch !important;\n    align-self: stretch !important;\n  }\n  .order-lg-first {\n    -ms-flex-order: -1 !important;\n    order: -1 !important;\n  }\n  .order-lg-0 {\n    -ms-flex-order: 0 !important;\n    order: 0 !important;\n  }\n  .order-lg-1 {\n    -ms-flex-order: 1 !important;\n    order: 1 !important;\n  }\n  .order-lg-2 {\n    -ms-flex-order: 2 !important;\n    order: 2 !important;\n  }\n  .order-lg-3 {\n    -ms-flex-order: 3 !important;\n    order: 3 !important;\n  }\n  .order-lg-4 {\n    -ms-flex-order: 4 !important;\n    order: 4 !important;\n  }\n  .order-lg-5 {\n    -ms-flex-order: 5 !important;\n    order: 5 !important;\n  }\n  .order-lg-last {\n    -ms-flex-order: 6 !important;\n    order: 6 !important;\n  }\n  .m-lg-0 {\n    margin: 0 !important;\n  }\n  .m-lg-1 {\n    margin: 0.25rem !important;\n  }\n  .m-lg-2 {\n    margin: 0.5rem !important;\n  }\n  .m-lg-3 {\n    margin: 1rem !important;\n  }\n  .m-lg-4 {\n    margin: 1.5rem !important;\n  }\n  .m-lg-5 {\n    margin: 3rem !important;\n  }\n  .m-lg-auto {\n    margin: auto !important;\n  }\n  .mx-lg-0 {\n    margin-right: 0 !important;\n    margin-left: 0 !important;\n  }\n  .mx-lg-1 {\n    margin-right: 0.25rem !important;\n    margin-left: 0.25rem !important;\n  }\n  .mx-lg-2 {\n    margin-right: 0.5rem !important;\n    margin-left: 0.5rem !important;\n  }\n  .mx-lg-3 {\n    margin-right: 1rem !important;\n    margin-left: 1rem !important;\n  }\n  .mx-lg-4 {\n    margin-right: 1.5rem !important;\n    margin-left: 1.5rem !important;\n  }\n  .mx-lg-5 {\n    margin-right: 3rem !important;\n    margin-left: 3rem !important;\n  }\n  .mx-lg-auto {\n    margin-right: auto !important;\n    margin-left: auto !important;\n  }\n  .my-lg-0 {\n    margin-top: 0 !important;\n    margin-bottom: 0 !important;\n  }\n  .my-lg-1 {\n    margin-top: 0.25rem !important;\n    margin-bottom: 0.25rem !important;\n  }\n  .my-lg-2 {\n    margin-top: 0.5rem !important;\n    margin-bottom: 0.5rem !important;\n  }\n  .my-lg-3 {\n    margin-top: 1rem !important;\n    margin-bottom: 1rem !important;\n  }\n  .my-lg-4 {\n    margin-top: 1.5rem !important;\n    margin-bottom: 1.5rem !important;\n  }\n  .my-lg-5 {\n    margin-top: 3rem !important;\n    margin-bottom: 3rem !important;\n  }\n  .my-lg-auto {\n    margin-top: auto !important;\n    margin-bottom: auto !important;\n  }\n  .mt-lg-0 {\n    margin-top: 0 !important;\n  }\n  .mt-lg-1 {\n    margin-top: 0.25rem !important;\n  }\n  .mt-lg-2 {\n    margin-top: 0.5rem !important;\n  }\n  .mt-lg-3 {\n    margin-top: 1rem !important;\n  }\n  .mt-lg-4 {\n    margin-top: 1.5rem !important;\n  }\n  .mt-lg-5 {\n    margin-top: 3rem !important;\n  }\n  .mt-lg-auto {\n    margin-top: auto !important;\n  }\n  .me-lg-0 {\n    margin-right: 0 !important;\n  }\n  .me-lg-1 {\n    margin-right: 0.25rem !important;\n  }\n  .me-lg-2 {\n    margin-right: 0.5rem !important;\n  }\n  .me-lg-3 {\n    margin-right: 1rem !important;\n  }\n  .me-lg-4 {\n    margin-right: 1.5rem !important;\n  }\n  .me-lg-5 {\n    margin-right: 3rem !important;\n  }\n  .me-lg-auto {\n    margin-right: auto !important;\n  }\n  .mb-lg-0 {\n    margin-bottom: 0 !important;\n  }\n  .mb-lg-1 {\n    margin-bottom: 0.25rem !important;\n  }\n  .mb-lg-2 {\n    margin-bottom: 0.5rem !important;\n  }\n  .mb-lg-3 {\n    margin-bottom: 1rem !important;\n  }\n  .mb-lg-4 {\n    margin-bottom: 1.5rem !important;\n  }\n  .mb-lg-5 {\n    margin-bottom: 3rem !important;\n  }\n  .mb-lg-auto {\n    margin-bottom: auto !important;\n  }\n  .ms-lg-0 {\n    margin-left: 0 !important;\n  }\n  .ms-lg-1 {\n    margin-left: 0.25rem !important;\n  }\n  .ms-lg-2 {\n    margin-left: 0.5rem !important;\n  }\n  .ms-lg-3 {\n    margin-left: 1rem !important;\n  }\n  .ms-lg-4 {\n    margin-left: 1.5rem !important;\n  }\n  .ms-lg-5 {\n    margin-left: 3rem !important;\n  }\n  .ms-lg-auto {\n    margin-left: auto !important;\n  }\n  .p-lg-0 {\n    padding: 0 !important;\n  }\n  .p-lg-1 {\n    padding: 0.25rem !important;\n  }\n  .p-lg-2 {\n    padding: 0.5rem !important;\n  }\n  .p-lg-3 {\n    padding: 1rem !important;\n  }\n  .p-lg-4 {\n    padding: 1.5rem !important;\n  }\n  .p-lg-5 {\n    padding: 3rem !important;\n  }\n  .px-lg-0 {\n    padding-right: 0 !important;\n    padding-left: 0 !important;\n  }\n  .px-lg-1 {\n    padding-right: 0.25rem !important;\n    padding-left: 0.25rem !important;\n  }\n  .px-lg-2 {\n    padding-right: 0.5rem !important;\n    padding-left: 0.5rem !important;\n  }\n  .px-lg-3 {\n    padding-right: 1rem !important;\n    padding-left: 1rem !important;\n  }\n  .px-lg-4 {\n    padding-right: 1.5rem !important;\n    padding-left: 1.5rem !important;\n  }\n  .px-lg-5 {\n    padding-right: 3rem !important;\n    padding-left: 3rem !important;\n  }\n  .py-lg-0 {\n    padding-top: 0 !important;\n    padding-bottom: 0 !important;\n  }\n  .py-lg-1 {\n    padding-top: 0.25rem !important;\n    padding-bottom: 0.25rem !important;\n  }\n  .py-lg-2 {\n    padding-top: 0.5rem !important;\n    padding-bottom: 0.5rem !important;\n  }\n  .py-lg-3 {\n    padding-top: 1rem !important;\n    padding-bottom: 1rem !important;\n  }\n  .py-lg-4 {\n    padding-top: 1.5rem !important;\n    padding-bottom: 1.5rem !important;\n  }\n  .py-lg-5 {\n    padding-top: 3rem !important;\n    padding-bottom: 3rem !important;\n  }\n  .pt-lg-0 {\n    padding-top: 0 !important;\n  }\n  .pt-lg-1 {\n    padding-top: 0.25rem !important;\n  }\n  .pt-lg-2 {\n    padding-top: 0.5rem !important;\n  }\n  .pt-lg-3 {\n    padding-top: 1rem !important;\n  }\n  .pt-lg-4 {\n    padding-top: 1.5rem !important;\n  }\n  .pt-lg-5 {\n    padding-top: 3rem !important;\n  }\n  .pe-lg-0 {\n    padding-right: 0 !important;\n  }\n  .pe-lg-1 {\n    padding-right: 0.25rem !important;\n  }\n  .pe-lg-2 {\n    padding-right: 0.5rem !important;\n  }\n  .pe-lg-3 {\n    padding-right: 1rem !important;\n  }\n  .pe-lg-4 {\n    padding-right: 1.5rem !important;\n  }\n  .pe-lg-5 {\n    padding-right: 3rem !important;\n  }\n  .pb-lg-0 {\n    padding-bottom: 0 !important;\n  }\n  .pb-lg-1 {\n    padding-bottom: 0.25rem !important;\n  }\n  .pb-lg-2 {\n    padding-bottom: 0.5rem !important;\n  }\n  .pb-lg-3 {\n    padding-bottom: 1rem !important;\n  }\n  .pb-lg-4 {\n    padding-bottom: 1.5rem !important;\n  }\n  .pb-lg-5 {\n    padding-bottom: 3rem !important;\n  }\n  .ps-lg-0 {\n    padding-left: 0 !important;\n  }\n  .ps-lg-1 {\n    padding-left: 0.25rem !important;\n  }\n  .ps-lg-2 {\n    padding-left: 0.5rem !important;\n  }\n  .ps-lg-3 {\n    padding-left: 1rem !important;\n  }\n  .ps-lg-4 {\n    padding-left: 1.5rem !important;\n  }\n  .ps-lg-5 {\n    padding-left: 3rem !important;\n  }\n  .text-lg-start {\n    text-align: left !important;\n  }\n  .text-lg-end {\n    text-align: right !important;\n  }\n  .text-lg-center {\n    text-align: center !important;\n  }\n}\n\n@media (min-width: 1200px) {\n  .float-xl-start {\n    float: left !important;\n  }\n  .float-xl-end {\n    float: right !important;\n  }\n  .float-xl-none {\n    float: none !important;\n  }\n  .d-xl-inline {\n    display: inline !important;\n  }\n  .d-xl-inline-block {\n    display: inline-block !important;\n  }\n  .d-xl-block {\n    display: block !important;\n  }\n  .d-xl-grid {\n    display: grid !important;\n  }\n  .d-xl-table {\n    display: table !important;\n  }\n  .d-xl-table-row {\n    display: table-row !important;\n  }\n  .d-xl-table-cell {\n    display: table-cell !important;\n  }\n  .d-xl-flex {\n    display: -ms-flexbox !important;\n    display: flex !important;\n  }\n  .d-xl-inline-flex {\n    display: -ms-inline-flexbox !important;\n    display: inline-flex !important;\n  }\n  .d-xl-none {\n    display: none !important;\n  }\n  .flex-xl-fill {\n    -ms-flex: 1 1 auto !important;\n    flex: 1 1 auto !important;\n  }\n  .flex-xl-row {\n    -ms-flex-direction: row !important;\n    flex-direction: row !important;\n  }\n  .flex-xl-column {\n    -ms-flex-direction: column !important;\n    flex-direction: column !important;\n  }\n  .flex-xl-row-reverse {\n    -ms-flex-direction: row-reverse !important;\n    flex-direction: row-reverse !important;\n  }\n  .flex-xl-column-reverse {\n    -ms-flex-direction: column-reverse !important;\n    flex-direction: column-reverse !important;\n  }\n  .flex-xl-grow-0 {\n    -ms-flex-positive: 0 !important;\n    flex-grow: 0 !important;\n  }\n  .flex-xl-grow-1 {\n    -ms-flex-positive: 1 !important;\n    flex-grow: 1 !important;\n  }\n  .flex-xl-shrink-0 {\n    -ms-flex-negative: 0 !important;\n    flex-shrink: 0 !important;\n  }\n  .flex-xl-shrink-1 {\n    -ms-flex-negative: 1 !important;\n    flex-shrink: 1 !important;\n  }\n  .flex-xl-wrap {\n    -ms-flex-wrap: wrap !important;\n    flex-wrap: wrap !important;\n  }\n  .flex-xl-nowrap {\n    -ms-flex-wrap: nowrap !important;\n    flex-wrap: nowrap !important;\n  }\n  .flex-xl-wrap-reverse {\n    -ms-flex-wrap: wrap-reverse !important;\n    flex-wrap: wrap-reverse !important;\n  }\n  .gap-xl-0 {\n    gap: 0 !important;\n  }\n  .gap-xl-1 {\n    gap: 0.25rem !important;\n  }\n  .gap-xl-2 {\n    gap: 0.5rem !important;\n  }\n  .gap-xl-3 {\n    gap: 1rem !important;\n  }\n  .gap-xl-4 {\n    gap: 1.5rem !important;\n  }\n  .gap-xl-5 {\n    gap: 3rem !important;\n  }\n  .justify-content-xl-start {\n    -ms-flex-pack: start !important;\n    justify-content: flex-start !important;\n  }\n  .justify-content-xl-end {\n    -ms-flex-pack: end !important;\n    justify-content: flex-end !important;\n  }\n  .justify-content-xl-center {\n    -ms-flex-pack: center !important;\n    justify-content: center !important;\n  }\n  .justify-content-xl-between {\n    -ms-flex-pack: justify !important;\n    justify-content: space-between !important;\n  }\n  .justify-content-xl-around {\n    -ms-flex-pack: distribute !important;\n    justify-content: space-around !important;\n  }\n  .justify-content-xl-evenly {\n    -ms-flex-pack: space-evenly !important;\n    justify-content: space-evenly !important;\n  }\n  .align-items-xl-start {\n    -ms-flex-align: start !important;\n    align-items: flex-start !important;\n  }\n  .align-items-xl-end {\n    -ms-flex-align: end !important;\n    align-items: flex-end !important;\n  }\n  .align-items-xl-center {\n    -ms-flex-align: center !important;\n    align-items: center !important;\n  }\n  .align-items-xl-baseline {\n    -ms-flex-align: baseline !important;\n    align-items: baseline !important;\n  }\n  .align-items-xl-stretch {\n    -ms-flex-align: stretch !important;\n    align-items: stretch !important;\n  }\n  .align-content-xl-start {\n    -ms-flex-line-pack: start !important;\n    align-content: flex-start !important;\n  }\n  .align-content-xl-end {\n    -ms-flex-line-pack: end !important;\n    align-content: flex-end !important;\n  }\n  .align-content-xl-center {\n    -ms-flex-line-pack: center !important;\n    align-content: center !important;\n  }\n  .align-content-xl-between {\n    -ms-flex-line-pack: justify !important;\n    align-content: space-between !important;\n  }\n  .align-content-xl-around {\n    -ms-flex-line-pack: distribute !important;\n    align-content: space-around !important;\n  }\n  .align-content-xl-stretch {\n    -ms-flex-line-pack: stretch !important;\n    align-content: stretch !important;\n  }\n  .align-self-xl-auto {\n    -ms-flex-item-align: auto !important;\n    align-self: auto !important;\n  }\n  .align-self-xl-start {\n    -ms-flex-item-align: start !important;\n    align-self: flex-start !important;\n  }\n  .align-self-xl-end {\n    -ms-flex-item-align: end !important;\n    align-self: flex-end !important;\n  }\n  .align-self-xl-center {\n    -ms-flex-item-align: center !important;\n    align-self: center !important;\n  }\n  .align-self-xl-baseline {\n    -ms-flex-item-align: baseline !important;\n    align-self: baseline !important;\n  }\n  .align-self-xl-stretch {\n    -ms-flex-item-align: stretch !important;\n    align-self: stretch !important;\n  }\n  .order-xl-first {\n    -ms-flex-order: -1 !important;\n    order: -1 !important;\n  }\n  .order-xl-0 {\n    -ms-flex-order: 0 !important;\n    order: 0 !important;\n  }\n  .order-xl-1 {\n    -ms-flex-order: 1 !important;\n    order: 1 !important;\n  }\n  .order-xl-2 {\n    -ms-flex-order: 2 !important;\n    order: 2 !important;\n  }\n  .order-xl-3 {\n    -ms-flex-order: 3 !important;\n    order: 3 !important;\n  }\n  .order-xl-4 {\n    -ms-flex-order: 4 !important;\n    order: 4 !important;\n  }\n  .order-xl-5 {\n    -ms-flex-order: 5 !important;\n    order: 5 !important;\n  }\n  .order-xl-last {\n    -ms-flex-order: 6 !important;\n    order: 6 !important;\n  }\n  .m-xl-0 {\n    margin: 0 !important;\n  }\n  .m-xl-1 {\n    margin: 0.25rem !important;\n  }\n  .m-xl-2 {\n    margin: 0.5rem !important;\n  }\n  .m-xl-3 {\n    margin: 1rem !important;\n  }\n  .m-xl-4 {\n    margin: 1.5rem !important;\n  }\n  .m-xl-5 {\n    margin: 3rem !important;\n  }\n  .m-xl-auto {\n    margin: auto !important;\n  }\n  .mx-xl-0 {\n    margin-right: 0 !important;\n    margin-left: 0 !important;\n  }\n  .mx-xl-1 {\n    margin-right: 0.25rem !important;\n    margin-left: 0.25rem !important;\n  }\n  .mx-xl-2 {\n    margin-right: 0.5rem !important;\n    margin-left: 0.5rem !important;\n  }\n  .mx-xl-3 {\n    margin-right: 1rem !important;\n    margin-left: 1rem !important;\n  }\n  .mx-xl-4 {\n    margin-right: 1.5rem !important;\n    margin-left: 1.5rem !important;\n  }\n  .mx-xl-5 {\n    margin-right: 3rem !important;\n    margin-left: 3rem !important;\n  }\n  .mx-xl-auto {\n    margin-right: auto !important;\n    margin-left: auto !important;\n  }\n  .my-xl-0 {\n    margin-top: 0 !important;\n    margin-bottom: 0 !important;\n  }\n  .my-xl-1 {\n    margin-top: 0.25rem !important;\n    margin-bottom: 0.25rem !important;\n  }\n  .my-xl-2 {\n    margin-top: 0.5rem !important;\n    margin-bottom: 0.5rem !important;\n  }\n  .my-xl-3 {\n    margin-top: 1rem !important;\n    margin-bottom: 1rem !important;\n  }\n  .my-xl-4 {\n    margin-top: 1.5rem !important;\n    margin-bottom: 1.5rem !important;\n  }\n  .my-xl-5 {\n    margin-top: 3rem !important;\n    margin-bottom: 3rem !important;\n  }\n  .my-xl-auto {\n    margin-top: auto !important;\n    margin-bottom: auto !important;\n  }\n  .mt-xl-0 {\n    margin-top: 0 !important;\n  }\n  .mt-xl-1 {\n    margin-top: 0.25rem !important;\n  }\n  .mt-xl-2 {\n    margin-top: 0.5rem !important;\n  }\n  .mt-xl-3 {\n    margin-top: 1rem !important;\n  }\n  .mt-xl-4 {\n    margin-top: 1.5rem !important;\n  }\n  .mt-xl-5 {\n    margin-top: 3rem !important;\n  }\n  .mt-xl-auto {\n    margin-top: auto !important;\n  }\n  .me-xl-0 {\n    margin-right: 0 !important;\n  }\n  .me-xl-1 {\n    margin-right: 0.25rem !important;\n  }\n  .me-xl-2 {\n    margin-right: 0.5rem !important;\n  }\n  .me-xl-3 {\n    margin-right: 1rem !important;\n  }\n  .me-xl-4 {\n    margin-right: 1.5rem !important;\n  }\n  .me-xl-5 {\n    margin-right: 3rem !important;\n  }\n  .me-xl-auto {\n    margin-right: auto !important;\n  }\n  .mb-xl-0 {\n    margin-bottom: 0 !important;\n  }\n  .mb-xl-1 {\n    margin-bottom: 0.25rem !important;\n  }\n  .mb-xl-2 {\n    margin-bottom: 0.5rem !important;\n  }\n  .mb-xl-3 {\n    margin-bottom: 1rem !important;\n  }\n  .mb-xl-4 {\n    margin-bottom: 1.5rem !important;\n  }\n  .mb-xl-5 {\n    margin-bottom: 3rem !important;\n  }\n  .mb-xl-auto {\n    margin-bottom: auto !important;\n  }\n  .ms-xl-0 {\n    margin-left: 0 !important;\n  }\n  .ms-xl-1 {\n    margin-left: 0.25rem !important;\n  }\n  .ms-xl-2 {\n    margin-left: 0.5rem !important;\n  }\n  .ms-xl-3 {\n    margin-left: 1rem !important;\n  }\n  .ms-xl-4 {\n    margin-left: 1.5rem !important;\n  }\n  .ms-xl-5 {\n    margin-left: 3rem !important;\n  }\n  .ms-xl-auto {\n    margin-left: auto !important;\n  }\n  .p-xl-0 {\n    padding: 0 !important;\n  }\n  .p-xl-1 {\n    padding: 0.25rem !important;\n  }\n  .p-xl-2 {\n    padding: 0.5rem !important;\n  }\n  .p-xl-3 {\n    padding: 1rem !important;\n  }\n  .p-xl-4 {\n    padding: 1.5rem !important;\n  }\n  .p-xl-5 {\n    padding: 3rem !important;\n  }\n  .px-xl-0 {\n    padding-right: 0 !important;\n    padding-left: 0 !important;\n  }\n  .px-xl-1 {\n    padding-right: 0.25rem !important;\n    padding-left: 0.25rem !important;\n  }\n  .px-xl-2 {\n    padding-right: 0.5rem !important;\n    padding-left: 0.5rem !important;\n  }\n  .px-xl-3 {\n    padding-right: 1rem !important;\n    padding-left: 1rem !important;\n  }\n  .px-xl-4 {\n    padding-right: 1.5rem !important;\n    padding-left: 1.5rem !important;\n  }\n  .px-xl-5 {\n    padding-right: 3rem !important;\n    padding-left: 3rem !important;\n  }\n  .py-xl-0 {\n    padding-top: 0 !important;\n    padding-bottom: 0 !important;\n  }\n  .py-xl-1 {\n    padding-top: 0.25rem !important;\n    padding-bottom: 0.25rem !important;\n  }\n  .py-xl-2 {\n    padding-top: 0.5rem !important;\n    padding-bottom: 0.5rem !important;\n  }\n  .py-xl-3 {\n    padding-top: 1rem !important;\n    padding-bottom: 1rem !important;\n  }\n  .py-xl-4 {\n    padding-top: 1.5rem !important;\n    padding-bottom: 1.5rem !important;\n  }\n  .py-xl-5 {\n    padding-top: 3rem !important;\n    padding-bottom: 3rem !important;\n  }\n  .pt-xl-0 {\n    padding-top: 0 !important;\n  }\n  .pt-xl-1 {\n    padding-top: 0.25rem !important;\n  }\n  .pt-xl-2 {\n    padding-top: 0.5rem !important;\n  }\n  .pt-xl-3 {\n    padding-top: 1rem !important;\n  }\n  .pt-xl-4 {\n    padding-top: 1.5rem !important;\n  }\n  .pt-xl-5 {\n    padding-top: 3rem !important;\n  }\n  .pe-xl-0 {\n    padding-right: 0 !important;\n  }\n  .pe-xl-1 {\n    padding-right: 0.25rem !important;\n  }\n  .pe-xl-2 {\n    padding-right: 0.5rem !important;\n  }\n  .pe-xl-3 {\n    padding-right: 1rem !important;\n  }\n  .pe-xl-4 {\n    padding-right: 1.5rem !important;\n  }\n  .pe-xl-5 {\n    padding-right: 3rem !important;\n  }\n  .pb-xl-0 {\n    padding-bottom: 0 !important;\n  }\n  .pb-xl-1 {\n    padding-bottom: 0.25rem !important;\n  }\n  .pb-xl-2 {\n    padding-bottom: 0.5rem !important;\n  }\n  .pb-xl-3 {\n    padding-bottom: 1rem !important;\n  }\n  .pb-xl-4 {\n    padding-bottom: 1.5rem !important;\n  }\n  .pb-xl-5 {\n    padding-bottom: 3rem !important;\n  }\n  .ps-xl-0 {\n    padding-left: 0 !important;\n  }\n  .ps-xl-1 {\n    padding-left: 0.25rem !important;\n  }\n  .ps-xl-2 {\n    padding-left: 0.5rem !important;\n  }\n  .ps-xl-3 {\n    padding-left: 1rem !important;\n  }\n  .ps-xl-4 {\n    padding-left: 1.5rem !important;\n  }\n  .ps-xl-5 {\n    padding-left: 3rem !important;\n  }\n  .text-xl-start {\n    text-align: left !important;\n  }\n  .text-xl-end {\n    text-align: right !important;\n  }\n  .text-xl-center {\n    text-align: center !important;\n  }\n}\n\n@media (min-width: 1400px) {\n  .float-xxl-start {\n    float: left !important;\n  }\n  .float-xxl-end {\n    float: right !important;\n  }\n  .float-xxl-none {\n    float: none !important;\n  }\n  .d-xxl-inline {\n    display: inline !important;\n  }\n  .d-xxl-inline-block {\n    display: inline-block !important;\n  }\n  .d-xxl-block {\n    display: block !important;\n  }\n  .d-xxl-grid {\n    display: grid !important;\n  }\n  .d-xxl-table {\n    display: table !important;\n  }\n  .d-xxl-table-row {\n    display: table-row !important;\n  }\n  .d-xxl-table-cell {\n    display: table-cell !important;\n  }\n  .d-xxl-flex {\n    display: -ms-flexbox !important;\n    display: flex !important;\n  }\n  .d-xxl-inline-flex {\n    display: -ms-inline-flexbox !important;\n    display: inline-flex !important;\n  }\n  .d-xxl-none {\n    display: none !important;\n  }\n  .flex-xxl-fill {\n    -ms-flex: 1 1 auto !important;\n    flex: 1 1 auto !important;\n  }\n  .flex-xxl-row {\n    -ms-flex-direction: row !important;\n    flex-direction: row !important;\n  }\n  .flex-xxl-column {\n    -ms-flex-direction: column !important;\n    flex-direction: column !important;\n  }\n  .flex-xxl-row-reverse {\n    -ms-flex-direction: row-reverse !important;\n    flex-direction: row-reverse !important;\n  }\n  .flex-xxl-column-reverse {\n    -ms-flex-direction: column-reverse !important;\n    flex-direction: column-reverse !important;\n  }\n  .flex-xxl-grow-0 {\n    -ms-flex-positive: 0 !important;\n    flex-grow: 0 !important;\n  }\n  .flex-xxl-grow-1 {\n    -ms-flex-positive: 1 !important;\n    flex-grow: 1 !important;\n  }\n  .flex-xxl-shrink-0 {\n    -ms-flex-negative: 0 !important;\n    flex-shrink: 0 !important;\n  }\n  .flex-xxl-shrink-1 {\n    -ms-flex-negative: 1 !important;\n    flex-shrink: 1 !important;\n  }\n  .flex-xxl-wrap {\n    -ms-flex-wrap: wrap !important;\n    flex-wrap: wrap !important;\n  }\n  .flex-xxl-nowrap {\n    -ms-flex-wrap: nowrap !important;\n    flex-wrap: nowrap !important;\n  }\n  .flex-xxl-wrap-reverse {\n    -ms-flex-wrap: wrap-reverse !important;\n    flex-wrap: wrap-reverse !important;\n  }\n  .gap-xxl-0 {\n    gap: 0 !important;\n  }\n  .gap-xxl-1 {\n    gap: 0.25rem !important;\n  }\n  .gap-xxl-2 {\n    gap: 0.5rem !important;\n  }\n  .gap-xxl-3 {\n    gap: 1rem !important;\n  }\n  .gap-xxl-4 {\n    gap: 1.5rem !important;\n  }\n  .gap-xxl-5 {\n    gap: 3rem !important;\n  }\n  .justify-content-xxl-start {\n    -ms-flex-pack: start !important;\n    justify-content: flex-start !important;\n  }\n  .justify-content-xxl-end {\n    -ms-flex-pack: end !important;\n    justify-content: flex-end !important;\n  }\n  .justify-content-xxl-center {\n    -ms-flex-pack: center !important;\n    justify-content: center !important;\n  }\n  .justify-content-xxl-between {\n    -ms-flex-pack: justify !important;\n    justify-content: space-between !important;\n  }\n  .justify-content-xxl-around {\n    -ms-flex-pack: distribute !important;\n    justify-content: space-around !important;\n  }\n  .justify-content-xxl-evenly {\n    -ms-flex-pack: space-evenly !important;\n    justify-content: space-evenly !important;\n  }\n  .align-items-xxl-start {\n    -ms-flex-align: start !important;\n    align-items: flex-start !important;\n  }\n  .align-items-xxl-end {\n    -ms-flex-align: end !important;\n    align-items: flex-end !important;\n  }\n  .align-items-xxl-center {\n    -ms-flex-align: center !important;\n    align-items: center !important;\n  }\n  .align-items-xxl-baseline {\n    -ms-flex-align: baseline !important;\n    align-items: baseline !important;\n  }\n  .align-items-xxl-stretch {\n    -ms-flex-align: stretch !important;\n    align-items: stretch !important;\n  }\n  .align-content-xxl-start {\n    -ms-flex-line-pack: start !important;\n    align-content: flex-start !important;\n  }\n  .align-content-xxl-end {\n    -ms-flex-line-pack: end !important;\n    align-content: flex-end !important;\n  }\n  .align-content-xxl-center {\n    -ms-flex-line-pack: center !important;\n    align-content: center !important;\n  }\n  .align-content-xxl-between {\n    -ms-flex-line-pack: justify !important;\n    align-content: space-between !important;\n  }\n  .align-content-xxl-around {\n    -ms-flex-line-pack: distribute !important;\n    align-content: space-around !important;\n  }\n  .align-content-xxl-stretch {\n    -ms-flex-line-pack: stretch !important;\n    align-content: stretch !important;\n  }\n  .align-self-xxl-auto {\n    -ms-flex-item-align: auto !important;\n    align-self: auto !important;\n  }\n  .align-self-xxl-start {\n    -ms-flex-item-align: start !important;\n    align-self: flex-start !important;\n  }\n  .align-self-xxl-end {\n    -ms-flex-item-align: end !important;\n    align-self: flex-end !important;\n  }\n  .align-self-xxl-center {\n    -ms-flex-item-align: center !important;\n    align-self: center !important;\n  }\n  .align-self-xxl-baseline {\n    -ms-flex-item-align: baseline !important;\n    align-self: baseline !important;\n  }\n  .align-self-xxl-stretch {\n    -ms-flex-item-align: stretch !important;\n    align-self: stretch !important;\n  }\n  .order-xxl-first {\n    -ms-flex-order: -1 !important;\n    order: -1 !important;\n  }\n  .order-xxl-0 {\n    -ms-flex-order: 0 !important;\n    order: 0 !important;\n  }\n  .order-xxl-1 {\n    -ms-flex-order: 1 !important;\n    order: 1 !important;\n  }\n  .order-xxl-2 {\n    -ms-flex-order: 2 !important;\n    order: 2 !important;\n  }\n  .order-xxl-3 {\n    -ms-flex-order: 3 !important;\n    order: 3 !important;\n  }\n  .order-xxl-4 {\n    -ms-flex-order: 4 !important;\n    order: 4 !important;\n  }\n  .order-xxl-5 {\n    -ms-flex-order: 5 !important;\n    order: 5 !important;\n  }\n  .order-xxl-last {\n    -ms-flex-order: 6 !important;\n    order: 6 !important;\n  }\n  .m-xxl-0 {\n    margin: 0 !important;\n  }\n  .m-xxl-1 {\n    margin: 0.25rem !important;\n  }\n  .m-xxl-2 {\n    margin: 0.5rem !important;\n  }\n  .m-xxl-3 {\n    margin: 1rem !important;\n  }\n  .m-xxl-4 {\n    margin: 1.5rem !important;\n  }\n  .m-xxl-5 {\n    margin: 3rem !important;\n  }\n  .m-xxl-auto {\n    margin: auto !important;\n  }\n  .mx-xxl-0 {\n    margin-right: 0 !important;\n    margin-left: 0 !important;\n  }\n  .mx-xxl-1 {\n    margin-right: 0.25rem !important;\n    margin-left: 0.25rem !important;\n  }\n  .mx-xxl-2 {\n    margin-right: 0.5rem !important;\n    margin-left: 0.5rem !important;\n  }\n  .mx-xxl-3 {\n    margin-right: 1rem !important;\n    margin-left: 1rem !important;\n  }\n  .mx-xxl-4 {\n    margin-right: 1.5rem !important;\n    margin-left: 1.5rem !important;\n  }\n  .mx-xxl-5 {\n    margin-right: 3rem !important;\n    margin-left: 3rem !important;\n  }\n  .mx-xxl-auto {\n    margin-right: auto !important;\n    margin-left: auto !important;\n  }\n  .my-xxl-0 {\n    margin-top: 0 !important;\n    margin-bottom: 0 !important;\n  }\n  .my-xxl-1 {\n    margin-top: 0.25rem !important;\n    margin-bottom: 0.25rem !important;\n  }\n  .my-xxl-2 {\n    margin-top: 0.5rem !important;\n    margin-bottom: 0.5rem !important;\n  }\n  .my-xxl-3 {\n    margin-top: 1rem !important;\n    margin-bottom: 1rem !important;\n  }\n  .my-xxl-4 {\n    margin-top: 1.5rem !important;\n    margin-bottom: 1.5rem !important;\n  }\n  .my-xxl-5 {\n    margin-top: 3rem !important;\n    margin-bottom: 3rem !important;\n  }\n  .my-xxl-auto {\n    margin-top: auto !important;\n    margin-bottom: auto !important;\n  }\n  .mt-xxl-0 {\n    margin-top: 0 !important;\n  }\n  .mt-xxl-1 {\n    margin-top: 0.25rem !important;\n  }\n  .mt-xxl-2 {\n    margin-top: 0.5rem !important;\n  }\n  .mt-xxl-3 {\n    margin-top: 1rem !important;\n  }\n  .mt-xxl-4 {\n    margin-top: 1.5rem !important;\n  }\n  .mt-xxl-5 {\n    margin-top: 3rem !important;\n  }\n  .mt-xxl-auto {\n    margin-top: auto !important;\n  }\n  .me-xxl-0 {\n    margin-right: 0 !important;\n  }\n  .me-xxl-1 {\n    margin-right: 0.25rem !important;\n  }\n  .me-xxl-2 {\n    margin-right: 0.5rem !important;\n  }\n  .me-xxl-3 {\n    margin-right: 1rem !important;\n  }\n  .me-xxl-4 {\n    margin-right: 1.5rem !important;\n  }\n  .me-xxl-5 {\n    margin-right: 3rem !important;\n  }\n  .me-xxl-auto {\n    margin-right: auto !important;\n  }\n  .mb-xxl-0 {\n    margin-bottom: 0 !important;\n  }\n  .mb-xxl-1 {\n    margin-bottom: 0.25rem !important;\n  }\n  .mb-xxl-2 {\n    margin-bottom: 0.5rem !important;\n  }\n  .mb-xxl-3 {\n    margin-bottom: 1rem !important;\n  }\n  .mb-xxl-4 {\n    margin-bottom: 1.5rem !important;\n  }\n  .mb-xxl-5 {\n    margin-bottom: 3rem !important;\n  }\n  .mb-xxl-auto {\n    margin-bottom: auto !important;\n  }\n  .ms-xxl-0 {\n    margin-left: 0 !important;\n  }\n  .ms-xxl-1 {\n    margin-left: 0.25rem !important;\n  }\n  .ms-xxl-2 {\n    margin-left: 0.5rem !important;\n  }\n  .ms-xxl-3 {\n    margin-left: 1rem !important;\n  }\n  .ms-xxl-4 {\n    margin-left: 1.5rem !important;\n  }\n  .ms-xxl-5 {\n    margin-left: 3rem !important;\n  }\n  .ms-xxl-auto {\n    margin-left: auto !important;\n  }\n  .p-xxl-0 {\n    padding: 0 !important;\n  }\n  .p-xxl-1 {\n    padding: 0.25rem !important;\n  }\n  .p-xxl-2 {\n    padding: 0.5rem !important;\n  }\n  .p-xxl-3 {\n    padding: 1rem !important;\n  }\n  .p-xxl-4 {\n    padding: 1.5rem !important;\n  }\n  .p-xxl-5 {\n    padding: 3rem !important;\n  }\n  .px-xxl-0 {\n    padding-right: 0 !important;\n    padding-left: 0 !important;\n  }\n  .px-xxl-1 {\n    padding-right: 0.25rem !important;\n    padding-left: 0.25rem !important;\n  }\n  .px-xxl-2 {\n    padding-right: 0.5rem !important;\n    padding-left: 0.5rem !important;\n  }\n  .px-xxl-3 {\n    padding-right: 1rem !important;\n    padding-left: 1rem !important;\n  }\n  .px-xxl-4 {\n    padding-right: 1.5rem !important;\n    padding-left: 1.5rem !important;\n  }\n  .px-xxl-5 {\n    padding-right: 3rem !important;\n    padding-left: 3rem !important;\n  }\n  .py-xxl-0 {\n    padding-top: 0 !important;\n    padding-bottom: 0 !important;\n  }\n  .py-xxl-1 {\n    padding-top: 0.25rem !important;\n    padding-bottom: 0.25rem !important;\n  }\n  .py-xxl-2 {\n    padding-top: 0.5rem !important;\n    padding-bottom: 0.5rem !important;\n  }\n  .py-xxl-3 {\n    padding-top: 1rem !important;\n    padding-bottom: 1rem !important;\n  }\n  .py-xxl-4 {\n    padding-top: 1.5rem !important;\n    padding-bottom: 1.5rem !important;\n  }\n  .py-xxl-5 {\n    padding-top: 3rem !important;\n    padding-bottom: 3rem !important;\n  }\n  .pt-xxl-0 {\n    padding-top: 0 !important;\n  }\n  .pt-xxl-1 {\n    padding-top: 0.25rem !important;\n  }\n  .pt-xxl-2 {\n    padding-top: 0.5rem !important;\n  }\n  .pt-xxl-3 {\n    padding-top: 1rem !important;\n  }\n  .pt-xxl-4 {\n    padding-top: 1.5rem !important;\n  }\n  .pt-xxl-5 {\n    padding-top: 3rem !important;\n  }\n  .pe-xxl-0 {\n    padding-right: 0 !important;\n  }\n  .pe-xxl-1 {\n    padding-right: 0.25rem !important;\n  }\n  .pe-xxl-2 {\n    padding-right: 0.5rem !important;\n  }\n  .pe-xxl-3 {\n    padding-right: 1rem !important;\n  }\n  .pe-xxl-4 {\n    padding-right: 1.5rem !important;\n  }\n  .pe-xxl-5 {\n    padding-right: 3rem !important;\n  }\n  .pb-xxl-0 {\n    padding-bottom: 0 !important;\n  }\n  .pb-xxl-1 {\n    padding-bottom: 0.25rem !important;\n  }\n  .pb-xxl-2 {\n    padding-bottom: 0.5rem !important;\n  }\n  .pb-xxl-3 {\n    padding-bottom: 1rem !important;\n  }\n  .pb-xxl-4 {\n    padding-bottom: 1.5rem !important;\n  }\n  .pb-xxl-5 {\n    padding-bottom: 3rem !important;\n  }\n  .ps-xxl-0 {\n    padding-left: 0 !important;\n  }\n  .ps-xxl-1 {\n    padding-left: 0.25rem !important;\n  }\n  .ps-xxl-2 {\n    padding-left: 0.5rem !important;\n  }\n  .ps-xxl-3 {\n    padding-left: 1rem !important;\n  }\n  .ps-xxl-4 {\n    padding-left: 1.5rem !important;\n  }\n  .ps-xxl-5 {\n    padding-left: 3rem !important;\n  }\n  .text-xxl-start {\n    text-align: left !important;\n  }\n  .text-xxl-end {\n    text-align: right !important;\n  }\n  .text-xxl-center {\n    text-align: center !important;\n  }\n}\n\n@media (min-width: 1200px) {\n  .fs-1 {\n    font-size: 2.5rem !important;\n  }\n  .fs-2 {\n    font-size: 2rem !important;\n  }\n  .fs-3 {\n    font-size: 1.75rem !important;\n  }\n  .fs-4 {\n    font-size: 1.5rem !important;\n  }\n}\n\n@media print {\n  .d-print-inline {\n    display: inline !important;\n  }\n  .d-print-inline-block {\n    display: inline-block !important;\n  }\n  .d-print-block {\n    display: block !important;\n  }\n  .d-print-grid {\n    display: grid !important;\n  }\n  .d-print-table {\n    display: table !important;\n  }\n  .d-print-table-row {\n    display: table-row !important;\n  }\n  .d-print-table-cell {\n    display: table-cell !important;\n  }\n  .d-print-flex {\n    display: -ms-flexbox !important;\n    display: flex !important;\n  }\n  .d-print-inline-flex {\n    display: -ms-inline-flexbox !important;\n    display: inline-flex !important;\n  }\n  .d-print-none {\n    display: none !important;\n  }\n}\n\n.navbar {\n  border-style: solid;\n  border-width: 0 1px 4px 1px;\n}\n\n.navbar.bg-primary {\n  border-color: #137ea7;\n}\n\n.navbar.bg-secondary {\n  border-color: #d8d8d8;\n}\n\n.navbar.bg-success {\n  border-color: #24a428;\n}\n\n.navbar.bg-info {\n  border-color: #69b6d4;\n}\n\n.navbar.bg-warning {\n  border-color: #e67818;\n}\n\n.navbar.bg-danger {\n  border-color: #e63b31;\n}\n\n.navbar.bg-light {\n  border-color: #dddddd;\n}\n\n.navbar.bg-dark {\n  border-color: #4d4d4d;\n}\n\n.btn {\n  border-style: solid;\n  border-width: 0 1px 4px 1px;\n  text-transform: uppercase;\n}\n\n.btn:not(.disabled):hover {\n  margin-top: 1px;\n  border-bottom-width: 3px;\n}\n\n.btn:not(.disabled):active {\n  margin-top: 2px;\n  border-bottom-width: 2px;\n}\n\n.btn-primary:hover, .btn-primary:active, .btn-primary:focus {\n  background-color: #158cba;\n}\n\n.btn-primary, .btn-primary:not(.disabled):hover, .btn-primary:not(.disabled):active, .btn-primary:focus {\n  border-color: #137ea7;\n}\n\n.btn-secondary:hover, .btn-secondary:active, .btn-secondary:focus {\n  background-color: #f0f0f0;\n}\n\n.btn-secondary, .btn-secondary:not(.disabled):hover, .btn-secondary:not(.disabled):active, .btn-secondary:focus {\n  border-color: #d8d8d8;\n}\n\n.btn-success:hover, .btn-success:active, .btn-success:focus {\n  background-color: #28b62c;\n}\n\n.btn-success, .btn-success:not(.disabled):hover, .btn-success:not(.disabled):active, .btn-success:focus {\n  border-color: #24a428;\n}\n\n.btn-info:hover, .btn-info:active, .btn-info:focus {\n  background-color: #75caeb;\n}\n\n.btn-info, .btn-info:not(.disabled):hover, .btn-info:not(.disabled):active, .btn-info:focus {\n  border-color: #69b6d4;\n}\n\n.btn-warning:hover, .btn-warning:active, .btn-warning:focus {\n  background-color: #ff851b;\n}\n\n.btn-warning, .btn-warning:not(.disabled):hover, .btn-warning:not(.disabled):active, .btn-warning:focus {\n  border-color: #e67818;\n}\n\n.btn-danger:hover, .btn-danger:active, .btn-danger:focus {\n  background-color: #ff4136;\n}\n\n.btn-danger, .btn-danger:not(.disabled):hover, .btn-danger:not(.disabled):active, .btn-danger:focus {\n  border-color: #e63b31;\n}\n\n.btn-light:hover, .btn-light:active, .btn-light:focus {\n  background-color: #f6f6f6;\n}\n\n.btn-light, .btn-light:not(.disabled):hover, .btn-light:not(.disabled):active, .btn-light:focus {\n  border-color: #dddddd;\n}\n\n.btn-dark:hover, .btn-dark:active, .btn-dark:focus {\n  background-color: #555;\n}\n\n.btn-dark, .btn-dark:not(.disabled):hover, .btn-dark:not(.disabled):active, .btn-dark:focus {\n  border-color: #4d4d4d;\n}\n\n[class*=\"btn-outline\"] {\n  border-top-width: 1px;\n}\n\n.btn-group-vertical .btn + .btn:hover {\n  margin-top: -1px;\n  border-top-width: 1px;\n}\n\n.btn-group-vertical .btn + .btn:active {\n  margin-top: -1px;\n  border-top-width: 2px;\n}\n\n.text-secondary {\n  color: #555 !important;\n}\n\n.blockquote-footer {\n  color: #999;\n}\n\n.form-control {\n  box-shadow: inset 0 2px 0 rgba(0, 0, 0, 0.075);\n}\n\n.nav .open > a,\n.nav .open > a:hover,\n.nav .open > a:focus {\n  border-color: transparent;\n}\n\n.nav-tabs .nav-link {\n  color: #222;\n}\n\n.nav-tabs .nav-link, .nav-tabs .nav-link.disabled, .nav-tabs .nav-link.disabled:hover, .nav-tabs .nav-link.disabled:focus {\n  margin-top: 6px;\n  border-color: #f0f0f0;\n  transition: padding-bottom .2s ease-in-out, margin-top .2s ease-in-out, border-bottom .2s ease-in-out;\n}\n\n.nav-tabs .nav-link:not(.disabled):hover, .nav-tabs .nav-link:not(.disabled):focus, .nav-tabs .nav-link.active {\n  padding-bottom: calc(0.5rem + 6px);\n  border-bottom-color: transparent;\n  margin-top: 0;\n}\n\n.nav-tabs.nav-justified > li {\n  vertical-align: bottom;\n}\n\n.dropdown-menu {\n  margin-top: 0;\n  border-style: solid;\n  border-width: 0 1px 4px 1px;\n  border-top-width: 1px;\n}\n\n.breadcrumb {\n  border-color: #d8d8d8;\n  border-style: solid;\n  border-width: 0 1px 4px 1px;\n}\n\n.pagination > li > a,\n.pagination > li > span {\n  position: relative;\n  top: 0;\n  border-style: solid;\n  border-width: 0 1px 4px 1px;\n  color: #555;\n  font-weight: 700;\n  text-transform: uppercase;\n}\n\n.pagination > li > a:hover, .pagination > li > a:focus,\n.pagination > li > span:hover,\n.pagination > li > span:focus {\n  top: 1px;\n  border-bottom-width: 3px;\n  text-decoration: none;\n}\n\n.pagination > li > a:active,\n.pagination > li > span:active {\n  top: 2px;\n  border-bottom-width: 2px;\n}\n\n.pagination > .disabled > a:hover,\n.pagination > .disabled > span:hover {\n  top: 0;\n  border-style: solid;\n  border-width: 0 1px 4px 1px;\n}\n\n.pagination > .disabled > a:active,\n.pagination > .disabled > span:active {\n  top: 0;\n  border-style: solid;\n  border-width: 0 1px 4px 1px;\n}\n\n.pager > li > a, .pager > li > a:hover, .pager > li > a:active,\n.pager > li > span,\n.pager > li > span:hover,\n.pager > li > span:active,\n.pager > .disabled > a,\n.pager > .disabled > a:hover,\n.pager > .disabled > a:active,\n.pager > .disabled > span,\n.pager > .disabled > span:hover,\n.pager > .disabled > span:active {\n  border-left-width: 2px;\n  border-right-width: 2px;\n}\n\n.btn-close {\n  text-decoration: none;\n  opacity: .4;\n}\n\n.btn-close:hover, .btn-close:focus {\n  opacity: 1;\n}\n\n.alert {\n  color: #fff;\n  border-style: solid;\n  border-width: 0 1px 4px 1px;\n}\n\n.alert-primary {\n  background-color: #158cba;\n  border-color: #137ea7;\n}\n\n.alert-secondary {\n  background-color: #f0f0f0;\n  border-color: #d8d8d8;\n}\n\n.alert-success {\n  background-color: #28b62c;\n  border-color: #24a428;\n}\n\n.alert-info {\n  background-color: #75caeb;\n  border-color: #69b6d4;\n}\n\n.alert-danger {\n  background-color: #ff4136;\n  border-color: #e63b31;\n}\n\n.alert-warning {\n  background-color: #ff851b;\n  border-color: #e67818;\n}\n\n.alert-dark {\n  background-color: #555;\n  border-color: #4d4d4d;\n}\n\n.alert-light {\n  background-color: #f6f6f6;\n  border-color: #dddddd;\n}\n\n.alert .alert-link {\n  font-weight: 400;\n  color: #fff;\n  text-decoration: underline;\n}\n\n.alert-secondary,\n.alert-secondary a,\n.alert-secondary .alert-link, .alert-light,\n.alert-light a,\n.alert-light .alert-link {\n  color: #222;\n}\n\n.badge.bg-secondary, .badge.bg-light {\n  color: #555;\n}\n\na.list-group-item-success.active {\n  background-color: #28b62c;\n}\n\na.list-group-item-success.active:hover, a.list-group-item-success.active:focus {\n  background-color: #24a428;\n}\n\na.list-group-item-warning.active {\n  background-color: #ff851b;\n}\n\na.list-group-item-warning.active:hover, a.list-group-item-warning.active:focus {\n  background-color: #e67818;\n}\n\na.list-group-item-danger.active {\n  background-color: #ff4136;\n}\n\na.list-group-item-danger.active:hover, a.list-group-item-danger.active:focus {\n  background-color: #e63b31;\n}\n\n.modal .btn-close,\n.toast .btn-close {\n  background-image: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23000'><path d='M.293.293a1 1 0 011.414 0L8 6.586 14.293.293a1 1 0 111.414 1.414L9.414 8l6.293 6.293a1 1 0 01-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 01-1.414-1.414L6.586 8 .293 1.707a1 1 0 010-1.414z'/></svg>\");\n}\n"
  },
  {
    "path": "src/sourceDev.WebApp/SharedThemes/lumen/wwwroot/css/fontawesome-all.css",
    "content": "/*!\n * Font Awesome Free 5.0.8 by @fontawesome - https://fontawesome.com\n * License - https://fontawesome.com/license (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)\n */\n.fa,\n.fas,\n.far,\n.fal,\n.fab {\n  -moz-osx-font-smoothing: grayscale;\n  -webkit-font-smoothing: antialiased;\n  display: inline-block;\n  font-style: normal;\n  font-variant: normal;\n  text-rendering: auto;\n  line-height: 1; }\n\n.fa-lg {\n  font-size: 1.33333em;\n  line-height: 0.75em;\n  vertical-align: -.0667em; }\n\n.fa-xs {\n  font-size: .75em; }\n\n.fa-sm {\n  font-size: .875em; }\n\n.fa-1x {\n  font-size: 1em; }\n\n.fa-2x {\n  font-size: 2em; }\n\n.fa-3x {\n  font-size: 3em; }\n\n.fa-4x {\n  font-size: 4em; }\n\n.fa-5x {\n  font-size: 5em; }\n\n.fa-6x {\n  font-size: 6em; }\n\n.fa-7x {\n  font-size: 7em; }\n\n.fa-8x {\n  font-size: 8em; }\n\n.fa-9x {\n  font-size: 9em; }\n\n.fa-10x {\n  font-size: 10em; }\n\n.fa-fw {\n  text-align: center;\n  width: 1.25em; }\n\n.fa-ul {\n  list-style-type: none;\n  margin-left: 2.5em;\n  padding-left: 0; }\n  .fa-ul > li {\n    position: relative; }\n\n.fa-li {\n  left: -2em;\n  position: absolute;\n  text-align: center;\n  width: 2em;\n  line-height: inherit; }\n\n.fa-border {\n  border: solid 0.08em #eee;\n  border-radius: .1em;\n  padding: .2em .25em .15em; }\n\n.fa-pull-left {\n  float: left; }\n\n.fa-pull-right {\n  float: right; }\n\n.fa.fa-pull-left,\n.fas.fa-pull-left,\n.far.fa-pull-left,\n.fal.fa-pull-left,\n.fab.fa-pull-left {\n  margin-right: .3em; }\n\n.fa.fa-pull-right,\n.fas.fa-pull-right,\n.far.fa-pull-right,\n.fal.fa-pull-right,\n.fab.fa-pull-right {\n  margin-left: .3em; }\n\n.fa-spin {\n  -webkit-animation: fa-spin 2s infinite linear;\n          animation: fa-spin 2s infinite linear; }\n\n.fa-pulse {\n  -webkit-animation: fa-spin 1s infinite steps(8);\n          animation: fa-spin 1s infinite steps(8); }\n\n@-webkit-keyframes fa-spin {\n  0% {\n    -webkit-transform: rotate(0deg);\n            transform: rotate(0deg); }\n  100% {\n    -webkit-transform: rotate(360deg);\n            transform: rotate(360deg); } }\n\n@keyframes fa-spin {\n  0% {\n    -webkit-transform: rotate(0deg);\n            transform: rotate(0deg); }\n  100% {\n    -webkit-transform: rotate(360deg);\n            transform: rotate(360deg); } }\n\n.fa-rotate-90 {\n  -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)\";\n  -webkit-transform: rotate(90deg);\n          transform: rotate(90deg); }\n\n.fa-rotate-180 {\n  -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)\";\n  -webkit-transform: rotate(180deg);\n          transform: rotate(180deg); }\n\n.fa-rotate-270 {\n  -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)\";\n  -webkit-transform: rotate(270deg);\n          transform: rotate(270deg); }\n\n.fa-flip-horizontal {\n  -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)\";\n  -webkit-transform: scale(-1, 1);\n          transform: scale(-1, 1); }\n\n.fa-flip-vertical {\n  -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)\";\n  -webkit-transform: scale(1, -1);\n          transform: scale(1, -1); }\n\n.fa-flip-horizontal.fa-flip-vertical {\n  -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)\";\n  -webkit-transform: scale(-1, -1);\n          transform: scale(-1, -1); }\n\n:root .fa-rotate-90,\n:root .fa-rotate-180,\n:root .fa-rotate-270,\n:root .fa-flip-horizontal,\n:root .fa-flip-vertical {\n  -webkit-filter: none;\n          filter: none; }\n\n.fa-stack {\n  display: inline-block;\n  height: 2em;\n  line-height: 2em;\n  position: relative;\n  vertical-align: middle;\n  width: 2em; }\n\n.fa-stack-1x,\n.fa-stack-2x {\n  left: 0;\n  position: absolute;\n  text-align: center;\n  width: 100%; }\n\n.fa-stack-1x {\n  line-height: inherit; }\n\n.fa-stack-2x {\n  font-size: 2em; }\n\n.fa-inverse {\n  color: #fff; }\n\n/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen\nreaders do not read off random characters that represent icons */\n.fa-500px:before {\n  content: \"\\f26e\"; }\n\n.fa-accessible-icon:before {\n  content: \"\\f368\"; }\n\n.fa-accusoft:before {\n  content: \"\\f369\"; }\n\n.fa-address-book:before {\n  content: \"\\f2b9\"; }\n\n.fa-address-card:before {\n  content: \"\\f2bb\"; }\n\n.fa-adjust:before {\n  content: \"\\f042\"; }\n\n.fa-adn:before {\n  content: \"\\f170\"; }\n\n.fa-adversal:before {\n  content: \"\\f36a\"; }\n\n.fa-affiliatetheme:before {\n  content: \"\\f36b\"; }\n\n.fa-algolia:before {\n  content: \"\\f36c\"; }\n\n.fa-align-center:before {\n  content: \"\\f037\"; }\n\n.fa-align-justify:before {\n  content: \"\\f039\"; }\n\n.fa-align-left:before {\n  content: \"\\f036\"; }\n\n.fa-align-right:before {\n  content: \"\\f038\"; }\n\n.fa-amazon:before {\n  content: \"\\f270\"; }\n\n.fa-amazon-pay:before {\n  content: \"\\f42c\"; }\n\n.fa-ambulance:before {\n  content: \"\\f0f9\"; }\n\n.fa-american-sign-language-interpreting:before {\n  content: \"\\f2a3\"; }\n\n.fa-amilia:before {\n  content: \"\\f36d\"; }\n\n.fa-anchor:before {\n  content: \"\\f13d\"; }\n\n.fa-android:before {\n  content: \"\\f17b\"; }\n\n.fa-angellist:before {\n  content: \"\\f209\"; }\n\n.fa-angle-double-down:before {\n  content: \"\\f103\"; }\n\n.fa-angle-double-left:before {\n  content: \"\\f100\"; }\n\n.fa-angle-double-right:before {\n  content: \"\\f101\"; }\n\n.fa-angle-double-up:before {\n  content: \"\\f102\"; }\n\n.fa-angle-down:before {\n  content: \"\\f107\"; }\n\n.fa-angle-left:before {\n  content: \"\\f104\"; }\n\n.fa-angle-right:before {\n  content: \"\\f105\"; }\n\n.fa-angle-up:before {\n  content: \"\\f106\"; }\n\n.fa-angrycreative:before {\n  content: \"\\f36e\"; }\n\n.fa-angular:before {\n  content: \"\\f420\"; }\n\n.fa-app-store:before {\n  content: \"\\f36f\"; }\n\n.fa-app-store-ios:before {\n  content: \"\\f370\"; }\n\n.fa-apper:before {\n  content: \"\\f371\"; }\n\n.fa-apple:before {\n  content: \"\\f179\"; }\n\n.fa-apple-pay:before {\n  content: \"\\f415\"; }\n\n.fa-archive:before {\n  content: \"\\f187\"; }\n\n.fa-arrow-alt-circle-down:before {\n  content: \"\\f358\"; }\n\n.fa-arrow-alt-circle-left:before {\n  content: \"\\f359\"; }\n\n.fa-arrow-alt-circle-right:before {\n  content: \"\\f35a\"; }\n\n.fa-arrow-alt-circle-up:before {\n  content: \"\\f35b\"; }\n\n.fa-arrow-circle-down:before {\n  content: \"\\f0ab\"; }\n\n.fa-arrow-circle-left:before {\n  content: \"\\f0a8\"; }\n\n.fa-arrow-circle-right:before {\n  content: \"\\f0a9\"; }\n\n.fa-arrow-circle-up:before {\n  content: \"\\f0aa\"; }\n\n.fa-arrow-down:before {\n  content: \"\\f063\"; }\n\n.fa-arrow-left:before {\n  content: \"\\f060\"; }\n\n.fa-arrow-right:before {\n  content: \"\\f061\"; }\n\n.fa-arrow-up:before {\n  content: \"\\f062\"; }\n\n.fa-arrows-alt:before {\n  content: \"\\f0b2\"; }\n\n.fa-arrows-alt-h:before {\n  content: \"\\f337\"; }\n\n.fa-arrows-alt-v:before {\n  content: \"\\f338\"; }\n\n.fa-assistive-listening-systems:before {\n  content: \"\\f2a2\"; }\n\n.fa-asterisk:before {\n  content: \"\\f069\"; }\n\n.fa-asymmetrik:before {\n  content: \"\\f372\"; }\n\n.fa-at:before {\n  content: \"\\f1fa\"; }\n\n.fa-audible:before {\n  content: \"\\f373\"; }\n\n.fa-audio-description:before {\n  content: \"\\f29e\"; }\n\n.fa-autoprefixer:before {\n  content: \"\\f41c\"; }\n\n.fa-avianex:before {\n  content: \"\\f374\"; }\n\n.fa-aviato:before {\n  content: \"\\f421\"; }\n\n.fa-aws:before {\n  content: \"\\f375\"; }\n\n.fa-backward:before {\n  content: \"\\f04a\"; }\n\n.fa-balance-scale:before {\n  content: \"\\f24e\"; }\n\n.fa-ban:before {\n  content: \"\\f05e\"; }\n\n.fa-band-aid:before {\n  content: \"\\f462\"; }\n\n.fa-bandcamp:before {\n  content: \"\\f2d5\"; }\n\n.fa-barcode:before {\n  content: \"\\f02a\"; }\n\n.fa-bars:before {\n  content: \"\\f0c9\"; }\n\n.fa-baseball-ball:before {\n  content: \"\\f433\"; }\n\n.fa-basketball-ball:before {\n  content: \"\\f434\"; }\n\n.fa-bath:before {\n  content: \"\\f2cd\"; }\n\n.fa-battery-empty:before {\n  content: \"\\f244\"; }\n\n.fa-battery-full:before {\n  content: \"\\f240\"; }\n\n.fa-battery-half:before {\n  content: \"\\f242\"; }\n\n.fa-battery-quarter:before {\n  content: \"\\f243\"; }\n\n.fa-battery-three-quarters:before {\n  content: \"\\f241\"; }\n\n.fa-bed:before {\n  content: \"\\f236\"; }\n\n.fa-beer:before {\n  content: \"\\f0fc\"; }\n\n.fa-behance:before {\n  content: \"\\f1b4\"; }\n\n.fa-behance-square:before {\n  content: \"\\f1b5\"; }\n\n.fa-bell:before {\n  content: \"\\f0f3\"; }\n\n.fa-bell-slash:before {\n  content: \"\\f1f6\"; }\n\n.fa-bicycle:before {\n  content: \"\\f206\"; }\n\n.fa-bimobject:before {\n  content: \"\\f378\"; }\n\n.fa-binoculars:before {\n  content: \"\\f1e5\"; }\n\n.fa-birthday-cake:before {\n  content: \"\\f1fd\"; }\n\n.fa-bitbucket:before {\n  content: \"\\f171\"; }\n\n.fa-bitcoin:before {\n  content: \"\\f379\"; }\n\n.fa-bity:before {\n  content: \"\\f37a\"; }\n\n.fa-black-tie:before {\n  content: \"\\f27e\"; }\n\n.fa-blackberry:before {\n  content: \"\\f37b\"; }\n\n.fa-blind:before {\n  content: \"\\f29d\"; }\n\n.fa-blogger:before {\n  content: \"\\f37c\"; }\n\n.fa-blogger-b:before {\n  content: \"\\f37d\"; }\n\n.fa-bluetooth:before {\n  content: \"\\f293\"; }\n\n.fa-bluetooth-b:before {\n  content: \"\\f294\"; }\n\n.fa-bold:before {\n  content: \"\\f032\"; }\n\n.fa-bolt:before {\n  content: \"\\f0e7\"; }\n\n.fa-bomb:before {\n  content: \"\\f1e2\"; }\n\n.fa-book:before {\n  content: \"\\f02d\"; }\n\n.fa-bookmark:before {\n  content: \"\\f02e\"; }\n\n.fa-bowling-ball:before {\n  content: \"\\f436\"; }\n\n.fa-box:before {\n  content: \"\\f466\"; }\n\n.fa-boxes:before {\n  content: \"\\f468\"; }\n\n.fa-braille:before {\n  content: \"\\f2a1\"; }\n\n.fa-briefcase:before {\n  content: \"\\f0b1\"; }\n\n.fa-btc:before {\n  content: \"\\f15a\"; }\n\n.fa-bug:before {\n  content: \"\\f188\"; }\n\n.fa-building:before {\n  content: \"\\f1ad\"; }\n\n.fa-bullhorn:before {\n  content: \"\\f0a1\"; }\n\n.fa-bullseye:before {\n  content: \"\\f140\"; }\n\n.fa-buromobelexperte:before {\n  content: \"\\f37f\"; }\n\n.fa-bus:before {\n  content: \"\\f207\"; }\n\n.fa-buysellads:before {\n  content: \"\\f20d\"; }\n\n.fa-calculator:before {\n  content: \"\\f1ec\"; }\n\n.fa-calendar:before {\n  content: \"\\f133\"; }\n\n.fa-calendar-alt:before {\n  content: \"\\f073\"; }\n\n.fa-calendar-check:before {\n  content: \"\\f274\"; }\n\n.fa-calendar-minus:before {\n  content: \"\\f272\"; }\n\n.fa-calendar-plus:before {\n  content: \"\\f271\"; }\n\n.fa-calendar-times:before {\n  content: \"\\f273\"; }\n\n.fa-camera:before {\n  content: \"\\f030\"; }\n\n.fa-camera-retro:before {\n  content: \"\\f083\"; }\n\n.fa-car:before {\n  content: \"\\f1b9\"; }\n\n.fa-caret-down:before {\n  content: \"\\f0d7\"; }\n\n.fa-caret-left:before {\n  content: \"\\f0d9\"; }\n\n.fa-caret-right:before {\n  content: \"\\f0da\"; }\n\n.fa-caret-square-down:before {\n  content: \"\\f150\"; }\n\n.fa-caret-square-left:before {\n  content: \"\\f191\"; }\n\n.fa-caret-square-right:before {\n  content: \"\\f152\"; }\n\n.fa-caret-square-up:before {\n  content: \"\\f151\"; }\n\n.fa-caret-up:before {\n  content: \"\\f0d8\"; }\n\n.fa-cart-arrow-down:before {\n  content: \"\\f218\"; }\n\n.fa-cart-plus:before {\n  content: \"\\f217\"; }\n\n.fa-cc-amazon-pay:before {\n  content: \"\\f42d\"; }\n\n.fa-cc-amex:before {\n  content: \"\\f1f3\"; }\n\n.fa-cc-apple-pay:before {\n  content: \"\\f416\"; }\n\n.fa-cc-diners-club:before {\n  content: \"\\f24c\"; }\n\n.fa-cc-discover:before {\n  content: \"\\f1f2\"; }\n\n.fa-cc-jcb:before {\n  content: \"\\f24b\"; }\n\n.fa-cc-mastercard:before {\n  content: \"\\f1f1\"; }\n\n.fa-cc-paypal:before {\n  content: \"\\f1f4\"; }\n\n.fa-cc-stripe:before {\n  content: \"\\f1f5\"; }\n\n.fa-cc-visa:before {\n  content: \"\\f1f0\"; }\n\n.fa-centercode:before {\n  content: \"\\f380\"; }\n\n.fa-certificate:before {\n  content: \"\\f0a3\"; }\n\n.fa-chart-area:before {\n  content: \"\\f1fe\"; }\n\n.fa-chart-bar:before {\n  content: \"\\f080\"; }\n\n.fa-chart-line:before {\n  content: \"\\f201\"; }\n\n.fa-chart-pie:before {\n  content: \"\\f200\"; }\n\n.fa-check:before {\n  content: \"\\f00c\"; }\n\n.fa-check-circle:before {\n  content: \"\\f058\"; }\n\n.fa-check-square:before {\n  content: \"\\f14a\"; }\n\n.fa-chess:before {\n  content: \"\\f439\"; }\n\n.fa-chess-bishop:before {\n  content: \"\\f43a\"; }\n\n.fa-chess-board:before {\n  content: \"\\f43c\"; }\n\n.fa-chess-king:before {\n  content: \"\\f43f\"; }\n\n.fa-chess-knight:before {\n  content: \"\\f441\"; }\n\n.fa-chess-pawn:before {\n  content: \"\\f443\"; }\n\n.fa-chess-queen:before {\n  content: \"\\f445\"; }\n\n.fa-chess-rook:before {\n  content: \"\\f447\"; }\n\n.fa-chevron-circle-down:before {\n  content: \"\\f13a\"; }\n\n.fa-chevron-circle-left:before {\n  content: \"\\f137\"; }\n\n.fa-chevron-circle-right:before {\n  content: \"\\f138\"; }\n\n.fa-chevron-circle-up:before {\n  content: \"\\f139\"; }\n\n.fa-chevron-down:before {\n  content: \"\\f078\"; }\n\n.fa-chevron-left:before {\n  content: \"\\f053\"; }\n\n.fa-chevron-right:before {\n  content: \"\\f054\"; }\n\n.fa-chevron-up:before {\n  content: \"\\f077\"; }\n\n.fa-child:before {\n  content: \"\\f1ae\"; }\n\n.fa-chrome:before {\n  content: \"\\f268\"; }\n\n.fa-circle:before {\n  content: \"\\f111\"; }\n\n.fa-circle-notch:before {\n  content: \"\\f1ce\"; }\n\n.fa-clipboard:before {\n  content: \"\\f328\"; }\n\n.fa-clipboard-check:before {\n  content: \"\\f46c\"; }\n\n.fa-clipboard-list:before {\n  content: \"\\f46d\"; }\n\n.fa-clock:before {\n  content: \"\\f017\"; }\n\n.fa-clone:before {\n  content: \"\\f24d\"; }\n\n.fa-closed-captioning:before {\n  content: \"\\f20a\"; }\n\n.fa-cloud:before {\n  content: \"\\f0c2\"; }\n\n.fa-cloud-download-alt:before {\n  content: \"\\f381\"; }\n\n.fa-cloud-upload-alt:before {\n  content: \"\\f382\"; }\n\n.fa-cloudscale:before {\n  content: \"\\f383\"; }\n\n.fa-cloudsmith:before {\n  content: \"\\f384\"; }\n\n.fa-cloudversify:before {\n  content: \"\\f385\"; }\n\n.fa-code:before {\n  content: \"\\f121\"; }\n\n.fa-code-branch:before {\n  content: \"\\f126\"; }\n\n.fa-codepen:before {\n  content: \"\\f1cb\"; }\n\n.fa-codiepie:before {\n  content: \"\\f284\"; }\n\n.fa-coffee:before {\n  content: \"\\f0f4\"; }\n\n.fa-cog:before {\n  content: \"\\f013\"; }\n\n.fa-cogs:before {\n  content: \"\\f085\"; }\n\n.fa-columns:before {\n  content: \"\\f0db\"; }\n\n.fa-comment:before {\n  content: \"\\f075\"; }\n\n.fa-comment-alt:before {\n  content: \"\\f27a\"; }\n\n.fa-comments:before {\n  content: \"\\f086\"; }\n\n.fa-compass:before {\n  content: \"\\f14e\"; }\n\n.fa-compress:before {\n  content: \"\\f066\"; }\n\n.fa-connectdevelop:before {\n  content: \"\\f20e\"; }\n\n.fa-contao:before {\n  content: \"\\f26d\"; }\n\n.fa-copy:before {\n  content: \"\\f0c5\"; }\n\n.fa-copyright:before {\n  content: \"\\f1f9\"; }\n\n.fa-cpanel:before {\n  content: \"\\f388\"; }\n\n.fa-creative-commons:before {\n  content: \"\\f25e\"; }\n\n.fa-credit-card:before {\n  content: \"\\f09d\"; }\n\n.fa-crop:before {\n  content: \"\\f125\"; }\n\n.fa-crosshairs:before {\n  content: \"\\f05b\"; }\n\n.fa-css3:before {\n  content: \"\\f13c\"; }\n\n.fa-css3-alt:before {\n  content: \"\\f38b\"; }\n\n.fa-cube:before {\n  content: \"\\f1b2\"; }\n\n.fa-cubes:before {\n  content: \"\\f1b3\"; }\n\n.fa-cut:before {\n  content: \"\\f0c4\"; }\n\n.fa-cuttlefish:before {\n  content: \"\\f38c\"; }\n\n.fa-d-and-d:before {\n  content: \"\\f38d\"; }\n\n.fa-dashcube:before {\n  content: \"\\f210\"; }\n\n.fa-database:before {\n  content: \"\\f1c0\"; }\n\n.fa-deaf:before {\n  content: \"\\f2a4\"; }\n\n.fa-delicious:before {\n  content: \"\\f1a5\"; }\n\n.fa-deploydog:before {\n  content: \"\\f38e\"; }\n\n.fa-deskpro:before {\n  content: \"\\f38f\"; }\n\n.fa-desktop:before {\n  content: \"\\f108\"; }\n\n.fa-deviantart:before {\n  content: \"\\f1bd\"; }\n\n.fa-digg:before {\n  content: \"\\f1a6\"; }\n\n.fa-digital-ocean:before {\n  content: \"\\f391\"; }\n\n.fa-discord:before {\n  content: \"\\f392\"; }\n\n.fa-discourse:before {\n  content: \"\\f393\"; }\n\n.fa-dna:before {\n  content: \"\\f471\"; }\n\n.fa-dochub:before {\n  content: \"\\f394\"; }\n\n.fa-docker:before {\n  content: \"\\f395\"; }\n\n.fa-dollar-sign:before {\n  content: \"\\f155\"; }\n\n.fa-dolly:before {\n  content: \"\\f472\"; }\n\n.fa-dolly-flatbed:before {\n  content: \"\\f474\"; }\n\n.fa-dot-circle:before {\n  content: \"\\f192\"; }\n\n.fa-download:before {\n  content: \"\\f019\"; }\n\n.fa-draft2digital:before {\n  content: \"\\f396\"; }\n\n.fa-dribbble:before {\n  content: \"\\f17d\"; }\n\n.fa-dribbble-square:before {\n  content: \"\\f397\"; }\n\n.fa-dropbox:before {\n  content: \"\\f16b\"; }\n\n.fa-drupal:before {\n  content: \"\\f1a9\"; }\n\n.fa-dyalog:before {\n  content: \"\\f399\"; }\n\n.fa-earlybirds:before {\n  content: \"\\f39a\"; }\n\n.fa-edge:before {\n  content: \"\\f282\"; }\n\n.fa-edit:before {\n  content: \"\\f044\"; }\n\n.fa-eject:before {\n  content: \"\\f052\"; }\n\n.fa-elementor:before {\n  content: \"\\f430\"; }\n\n.fa-ellipsis-h:before {\n  content: \"\\f141\"; }\n\n.fa-ellipsis-v:before {\n  content: \"\\f142\"; }\n\n.fa-ember:before {\n  content: \"\\f423\"; }\n\n.fa-empire:before {\n  content: \"\\f1d1\"; }\n\n.fa-envelope:before {\n  content: \"\\f0e0\"; }\n\n.fa-envelope-open:before {\n  content: \"\\f2b6\"; }\n\n.fa-envelope-square:before {\n  content: \"\\f199\"; }\n\n.fa-envira:before {\n  content: \"\\f299\"; }\n\n.fa-eraser:before {\n  content: \"\\f12d\"; }\n\n.fa-erlang:before {\n  content: \"\\f39d\"; }\n\n.fa-ethereum:before {\n  content: \"\\f42e\"; }\n\n.fa-etsy:before {\n  content: \"\\f2d7\"; }\n\n.fa-euro-sign:before {\n  content: \"\\f153\"; }\n\n.fa-exchange-alt:before {\n  content: \"\\f362\"; }\n\n.fa-exclamation:before {\n  content: \"\\f12a\"; }\n\n.fa-exclamation-circle:before {\n  content: \"\\f06a\"; }\n\n.fa-exclamation-triangle:before {\n  content: \"\\f071\"; }\n\n.fa-expand:before {\n  content: \"\\f065\"; }\n\n.fa-expand-arrows-alt:before {\n  content: \"\\f31e\"; }\n\n.fa-expeditedssl:before {\n  content: \"\\f23e\"; }\n\n.fa-external-link-alt:before {\n  content: \"\\f35d\"; }\n\n.fa-external-link-square-alt:before {\n  content: \"\\f360\"; }\n\n.fa-eye:before {\n  content: \"\\f06e\"; }\n\n.fa-eye-dropper:before {\n  content: \"\\f1fb\"; }\n\n.fa-eye-slash:before {\n  content: \"\\f070\"; }\n\n.fa-facebook:before {\n  content: \"\\f09a\"; }\n\n.fa-facebook-f:before {\n  content: \"\\f39e\"; }\n\n.fa-facebook-messenger:before {\n  content: \"\\f39f\"; }\n\n.fa-facebook-square:before {\n  content: \"\\f082\"; }\n\n.fa-fast-backward:before {\n  content: \"\\f049\"; }\n\n.fa-fast-forward:before {\n  content: \"\\f050\"; }\n\n.fa-fax:before {\n  content: \"\\f1ac\"; }\n\n.fa-female:before {\n  content: \"\\f182\"; }\n\n.fa-fighter-jet:before {\n  content: \"\\f0fb\"; }\n\n.fa-file:before {\n  content: \"\\f15b\"; }\n\n.fa-file-alt:before {\n  content: \"\\f15c\"; }\n\n.fa-file-archive:before {\n  content: \"\\f1c6\"; }\n\n.fa-file-audio:before {\n  content: \"\\f1c7\"; }\n\n.fa-file-code:before {\n  content: \"\\f1c9\"; }\n\n.fa-file-excel:before {\n  content: \"\\f1c3\"; }\n\n.fa-file-image:before {\n  content: \"\\f1c5\"; }\n\n.fa-file-pdf:before {\n  content: \"\\f1c1\"; }\n\n.fa-file-powerpoint:before {\n  content: \"\\f1c4\"; }\n\n.fa-file-video:before {\n  content: \"\\f1c8\"; }\n\n.fa-file-word:before {\n  content: \"\\f1c2\"; }\n\n.fa-film:before {\n  content: \"\\f008\"; }\n\n.fa-filter:before {\n  content: \"\\f0b0\"; }\n\n.fa-fire:before {\n  content: \"\\f06d\"; }\n\n.fa-fire-extinguisher:before {\n  content: \"\\f134\"; }\n\n.fa-firefox:before {\n  content: \"\\f269\"; }\n\n.fa-first-aid:before {\n  content: \"\\f479\"; }\n\n.fa-first-order:before {\n  content: \"\\f2b0\"; }\n\n.fa-firstdraft:before {\n  content: \"\\f3a1\"; }\n\n.fa-flag:before {\n  content: \"\\f024\"; }\n\n.fa-flag-checkered:before {\n  content: \"\\f11e\"; }\n\n.fa-flask:before {\n  content: \"\\f0c3\"; }\n\n.fa-flickr:before {\n  content: \"\\f16e\"; }\n\n.fa-flipboard:before {\n  content: \"\\f44d\"; }\n\n.fa-fly:before {\n  content: \"\\f417\"; }\n\n.fa-folder:before {\n  content: \"\\f07b\"; }\n\n.fa-folder-open:before {\n  content: \"\\f07c\"; }\n\n.fa-font:before {\n  content: \"\\f031\"; }\n\n.fa-font-awesome:before {\n  content: \"\\f2b4\"; }\n\n.fa-font-awesome-alt:before {\n  content: \"\\f35c\"; }\n\n.fa-font-awesome-flag:before {\n  content: \"\\f425\"; }\n\n.fa-fonticons:before {\n  content: \"\\f280\"; }\n\n.fa-fonticons-fi:before {\n  content: \"\\f3a2\"; }\n\n.fa-football-ball:before {\n  content: \"\\f44e\"; }\n\n.fa-fort-awesome:before {\n  content: \"\\f286\"; }\n\n.fa-fort-awesome-alt:before {\n  content: \"\\f3a3\"; }\n\n.fa-forumbee:before {\n  content: \"\\f211\"; }\n\n.fa-forward:before {\n  content: \"\\f04e\"; }\n\n.fa-foursquare:before {\n  content: \"\\f180\"; }\n\n.fa-free-code-camp:before {\n  content: \"\\f2c5\"; }\n\n.fa-freebsd:before {\n  content: \"\\f3a4\"; }\n\n.fa-frown:before {\n  content: \"\\f119\"; }\n\n.fa-futbol:before {\n  content: \"\\f1e3\"; }\n\n.fa-gamepad:before {\n  content: \"\\f11b\"; }\n\n.fa-gavel:before {\n  content: \"\\f0e3\"; }\n\n.fa-gem:before {\n  content: \"\\f3a5\"; }\n\n.fa-genderless:before {\n  content: \"\\f22d\"; }\n\n.fa-get-pocket:before {\n  content: \"\\f265\"; }\n\n.fa-gg:before {\n  content: \"\\f260\"; }\n\n.fa-gg-circle:before {\n  content: \"\\f261\"; }\n\n.fa-gift:before {\n  content: \"\\f06b\"; }\n\n.fa-git:before {\n  content: \"\\f1d3\"; }\n\n.fa-git-square:before {\n  content: \"\\f1d2\"; }\n\n.fa-github:before {\n  content: \"\\f09b\"; }\n\n.fa-github-alt:before {\n  content: \"\\f113\"; }\n\n.fa-github-square:before {\n  content: \"\\f092\"; }\n\n.fa-gitkraken:before {\n  content: \"\\f3a6\"; }\n\n.fa-gitlab:before {\n  content: \"\\f296\"; }\n\n.fa-gitter:before {\n  content: \"\\f426\"; }\n\n.fa-glass-martini:before {\n  content: \"\\f000\"; }\n\n.fa-glide:before {\n  content: \"\\f2a5\"; }\n\n.fa-glide-g:before {\n  content: \"\\f2a6\"; }\n\n.fa-globe:before {\n  content: \"\\f0ac\"; }\n\n.fa-gofore:before {\n  content: \"\\f3a7\"; }\n\n.fa-golf-ball:before {\n  content: \"\\f450\"; }\n\n.fa-goodreads:before {\n  content: \"\\f3a8\"; }\n\n.fa-goodreads-g:before {\n  content: \"\\f3a9\"; }\n\n.fa-google:before {\n  content: \"\\f1a0\"; }\n\n.fa-google-drive:before {\n  content: \"\\f3aa\"; }\n\n.fa-google-play:before {\n  content: \"\\f3ab\"; }\n\n.fa-google-plus:before {\n  content: \"\\f2b3\"; }\n\n.fa-google-plus-g:before {\n  content: \"\\f0d5\"; }\n\n.fa-google-plus-square:before {\n  content: \"\\f0d4\"; }\n\n.fa-google-wallet:before {\n  content: \"\\f1ee\"; }\n\n.fa-graduation-cap:before {\n  content: \"\\f19d\"; }\n\n.fa-gratipay:before {\n  content: \"\\f184\"; }\n\n.fa-grav:before {\n  content: \"\\f2d6\"; }\n\n.fa-gripfire:before {\n  content: \"\\f3ac\"; }\n\n.fa-grunt:before {\n  content: \"\\f3ad\"; }\n\n.fa-gulp:before {\n  content: \"\\f3ae\"; }\n\n.fa-h-square:before {\n  content: \"\\f0fd\"; }\n\n.fa-hacker-news:before {\n  content: \"\\f1d4\"; }\n\n.fa-hacker-news-square:before {\n  content: \"\\f3af\"; }\n\n.fa-hand-lizard:before {\n  content: \"\\f258\"; }\n\n.fa-hand-paper:before {\n  content: \"\\f256\"; }\n\n.fa-hand-peace:before {\n  content: \"\\f25b\"; }\n\n.fa-hand-point-down:before {\n  content: \"\\f0a7\"; }\n\n.fa-hand-point-left:before {\n  content: \"\\f0a5\"; }\n\n.fa-hand-point-right:before {\n  content: \"\\f0a4\"; }\n\n.fa-hand-point-up:before {\n  content: \"\\f0a6\"; }\n\n.fa-hand-pointer:before {\n  content: \"\\f25a\"; }\n\n.fa-hand-rock:before {\n  content: \"\\f255\"; }\n\n.fa-hand-scissors:before {\n  content: \"\\f257\"; }\n\n.fa-hand-spock:before {\n  content: \"\\f259\"; }\n\n.fa-handshake:before {\n  content: \"\\f2b5\"; }\n\n.fa-hashtag:before {\n  content: \"\\f292\"; }\n\n.fa-hdd:before {\n  content: \"\\f0a0\"; }\n\n.fa-heading:before {\n  content: \"\\f1dc\"; }\n\n.fa-headphones:before {\n  content: \"\\f025\"; }\n\n.fa-heart:before {\n  content: \"\\f004\"; }\n\n.fa-heartbeat:before {\n  content: \"\\f21e\"; }\n\n.fa-hips:before {\n  content: \"\\f452\"; }\n\n.fa-hire-a-helper:before {\n  content: \"\\f3b0\"; }\n\n.fa-history:before {\n  content: \"\\f1da\"; }\n\n.fa-hockey-puck:before {\n  content: \"\\f453\"; }\n\n.fa-home:before {\n  content: \"\\f015\"; }\n\n.fa-hooli:before {\n  content: \"\\f427\"; }\n\n.fa-hospital:before {\n  content: \"\\f0f8\"; }\n\n.fa-hospital-symbol:before {\n  content: \"\\f47e\"; }\n\n.fa-hotjar:before {\n  content: \"\\f3b1\"; }\n\n.fa-hourglass:before {\n  content: \"\\f254\"; }\n\n.fa-hourglass-end:before {\n  content: \"\\f253\"; }\n\n.fa-hourglass-half:before {\n  content: \"\\f252\"; }\n\n.fa-hourglass-start:before {\n  content: \"\\f251\"; }\n\n.fa-houzz:before {\n  content: \"\\f27c\"; }\n\n.fa-html5:before {\n  content: \"\\f13b\"; }\n\n.fa-hubspot:before {\n  content: \"\\f3b2\"; }\n\n.fa-i-cursor:before {\n  content: \"\\f246\"; }\n\n.fa-id-badge:before {\n  content: \"\\f2c1\"; }\n\n.fa-id-card:before {\n  content: \"\\f2c2\"; }\n\n.fa-image:before {\n  content: \"\\f03e\"; }\n\n.fa-images:before {\n  content: \"\\f302\"; }\n\n.fa-imdb:before {\n  content: \"\\f2d8\"; }\n\n.fa-inbox:before {\n  content: \"\\f01c\"; }\n\n.fa-indent:before {\n  content: \"\\f03c\"; }\n\n.fa-industry:before {\n  content: \"\\f275\"; }\n\n.fa-info:before {\n  content: \"\\f129\"; }\n\n.fa-info-circle:before {\n  content: \"\\f05a\"; }\n\n.fa-instagram:before {\n  content: \"\\f16d\"; }\n\n.fa-internet-explorer:before {\n  content: \"\\f26b\"; }\n\n.fa-ioxhost:before {\n  content: \"\\f208\"; }\n\n.fa-italic:before {\n  content: \"\\f033\"; }\n\n.fa-itunes:before {\n  content: \"\\f3b4\"; }\n\n.fa-itunes-note:before {\n  content: \"\\f3b5\"; }\n\n.fa-jenkins:before {\n  content: \"\\f3b6\"; }\n\n.fa-joget:before {\n  content: \"\\f3b7\"; }\n\n.fa-joomla:before {\n  content: \"\\f1aa\"; }\n\n.fa-js:before {\n  content: \"\\f3b8\"; }\n\n.fa-js-square:before {\n  content: \"\\f3b9\"; }\n\n.fa-jsfiddle:before {\n  content: \"\\f1cc\"; }\n\n.fa-key:before {\n  content: \"\\f084\"; }\n\n.fa-keyboard:before {\n  content: \"\\f11c\"; }\n\n.fa-keycdn:before {\n  content: \"\\f3ba\"; }\n\n.fa-kickstarter:before {\n  content: \"\\f3bb\"; }\n\n.fa-kickstarter-k:before {\n  content: \"\\f3bc\"; }\n\n.fa-korvue:before {\n  content: \"\\f42f\"; }\n\n.fa-language:before {\n  content: \"\\f1ab\"; }\n\n.fa-laptop:before {\n  content: \"\\f109\"; }\n\n.fa-laravel:before {\n  content: \"\\f3bd\"; }\n\n.fa-lastfm:before {\n  content: \"\\f202\"; }\n\n.fa-lastfm-square:before {\n  content: \"\\f203\"; }\n\n.fa-leaf:before {\n  content: \"\\f06c\"; }\n\n.fa-leanpub:before {\n  content: \"\\f212\"; }\n\n.fa-lemon:before {\n  content: \"\\f094\"; }\n\n.fa-less:before {\n  content: \"\\f41d\"; }\n\n.fa-level-down-alt:before {\n  content: \"\\f3be\"; }\n\n.fa-level-up-alt:before {\n  content: \"\\f3bf\"; }\n\n.fa-life-ring:before {\n  content: \"\\f1cd\"; }\n\n.fa-lightbulb:before {\n  content: \"\\f0eb\"; }\n\n.fa-line:before {\n  content: \"\\f3c0\"; }\n\n.fa-link:before {\n  content: \"\\f0c1\"; }\n\n.fa-linkedin:before {\n  content: \"\\f08c\"; }\n\n.fa-linkedin-in:before {\n  content: \"\\f0e1\"; }\n\n.fa-linode:before {\n  content: \"\\f2b8\"; }\n\n.fa-linux:before {\n  content: \"\\f17c\"; }\n\n.fa-lira-sign:before {\n  content: \"\\f195\"; }\n\n.fa-list:before {\n  content: \"\\f03a\"; }\n\n.fa-list-alt:before {\n  content: \"\\f022\"; }\n\n.fa-list-ol:before {\n  content: \"\\f0cb\"; }\n\n.fa-list-ul:before {\n  content: \"\\f0ca\"; }\n\n.fa-location-arrow:before {\n  content: \"\\f124\"; }\n\n.fa-lock:before {\n  content: \"\\f023\"; }\n\n.fa-lock-open:before {\n  content: \"\\f3c1\"; }\n\n.fa-long-arrow-alt-down:before {\n  content: \"\\f309\"; }\n\n.fa-long-arrow-alt-left:before {\n  content: \"\\f30a\"; }\n\n.fa-long-arrow-alt-right:before {\n  content: \"\\f30b\"; }\n\n.fa-long-arrow-alt-up:before {\n  content: \"\\f30c\"; }\n\n.fa-low-vision:before {\n  content: \"\\f2a8\"; }\n\n.fa-lyft:before {\n  content: \"\\f3c3\"; }\n\n.fa-magento:before {\n  content: \"\\f3c4\"; }\n\n.fa-magic:before {\n  content: \"\\f0d0\"; }\n\n.fa-magnet:before {\n  content: \"\\f076\"; }\n\n.fa-male:before {\n  content: \"\\f183\"; }\n\n.fa-map:before {\n  content: \"\\f279\"; }\n\n.fa-map-marker:before {\n  content: \"\\f041\"; }\n\n.fa-map-marker-alt:before {\n  content: \"\\f3c5\"; }\n\n.fa-map-pin:before {\n  content: \"\\f276\"; }\n\n.fa-map-signs:before {\n  content: \"\\f277\"; }\n\n.fa-mars:before {\n  content: \"\\f222\"; }\n\n.fa-mars-double:before {\n  content: \"\\f227\"; }\n\n.fa-mars-stroke:before {\n  content: \"\\f229\"; }\n\n.fa-mars-stroke-h:before {\n  content: \"\\f22b\"; }\n\n.fa-mars-stroke-v:before {\n  content: \"\\f22a\"; }\n\n.fa-maxcdn:before {\n  content: \"\\f136\"; }\n\n.fa-medapps:before {\n  content: \"\\f3c6\"; }\n\n.fa-medium:before {\n  content: \"\\f23a\"; }\n\n.fa-medium-m:before {\n  content: \"\\f3c7\"; }\n\n.fa-medkit:before {\n  content: \"\\f0fa\"; }\n\n.fa-medrt:before {\n  content: \"\\f3c8\"; }\n\n.fa-meetup:before {\n  content: \"\\f2e0\"; }\n\n.fa-meh:before {\n  content: \"\\f11a\"; }\n\n.fa-mercury:before {\n  content: \"\\f223\"; }\n\n.fa-microchip:before {\n  content: \"\\f2db\"; }\n\n.fa-microphone:before {\n  content: \"\\f130\"; }\n\n.fa-microphone-slash:before {\n  content: \"\\f131\"; }\n\n.fa-microsoft:before {\n  content: \"\\f3ca\"; }\n\n.fa-minus:before {\n  content: \"\\f068\"; }\n\n.fa-minus-circle:before {\n  content: \"\\f056\"; }\n\n.fa-minus-square:before {\n  content: \"\\f146\"; }\n\n.fa-mix:before {\n  content: \"\\f3cb\"; }\n\n.fa-mixcloud:before {\n  content: \"\\f289\"; }\n\n.fa-mizuni:before {\n  content: \"\\f3cc\"; }\n\n.fa-mobile:before {\n  content: \"\\f10b\"; }\n\n.fa-mobile-alt:before {\n  content: \"\\f3cd\"; }\n\n.fa-modx:before {\n  content: \"\\f285\"; }\n\n.fa-monero:before {\n  content: \"\\f3d0\"; }\n\n.fa-money-bill-alt:before {\n  content: \"\\f3d1\"; }\n\n.fa-moon:before {\n  content: \"\\f186\"; }\n\n.fa-motorcycle:before {\n  content: \"\\f21c\"; }\n\n.fa-mouse-pointer:before {\n  content: \"\\f245\"; }\n\n.fa-music:before {\n  content: \"\\f001\"; }\n\n.fa-napster:before {\n  content: \"\\f3d2\"; }\n\n.fa-neuter:before {\n  content: \"\\f22c\"; }\n\n.fa-newspaper:before {\n  content: \"\\f1ea\"; }\n\n.fa-nintendo-switch:before {\n  content: \"\\f418\"; }\n\n.fa-node:before {\n  content: \"\\f419\"; }\n\n.fa-node-js:before {\n  content: \"\\f3d3\"; }\n\n.fa-npm:before {\n  content: \"\\f3d4\"; }\n\n.fa-ns8:before {\n  content: \"\\f3d5\"; }\n\n.fa-nutritionix:before {\n  content: \"\\f3d6\"; }\n\n.fa-object-group:before {\n  content: \"\\f247\"; }\n\n.fa-object-ungroup:before {\n  content: \"\\f248\"; }\n\n.fa-odnoklassniki:before {\n  content: \"\\f263\"; }\n\n.fa-odnoklassniki-square:before {\n  content: \"\\f264\"; }\n\n.fa-opencart:before {\n  content: \"\\f23d\"; }\n\n.fa-openid:before {\n  content: \"\\f19b\"; }\n\n.fa-opera:before {\n  content: \"\\f26a\"; }\n\n.fa-optin-monster:before {\n  content: \"\\f23c\"; }\n\n.fa-osi:before {\n  content: \"\\f41a\"; }\n\n.fa-outdent:before {\n  content: \"\\f03b\"; }\n\n.fa-page4:before {\n  content: \"\\f3d7\"; }\n\n.fa-pagelines:before {\n  content: \"\\f18c\"; }\n\n.fa-paint-brush:before {\n  content: \"\\f1fc\"; }\n\n.fa-palfed:before {\n  content: \"\\f3d8\"; }\n\n.fa-pallet:before {\n  content: \"\\f482\"; }\n\n.fa-paper-plane:before {\n  content: \"\\f1d8\"; }\n\n.fa-paperclip:before {\n  content: \"\\f0c6\"; }\n\n.fa-paragraph:before {\n  content: \"\\f1dd\"; }\n\n.fa-paste:before {\n  content: \"\\f0ea\"; }\n\n.fa-patreon:before {\n  content: \"\\f3d9\"; }\n\n.fa-pause:before {\n  content: \"\\f04c\"; }\n\n.fa-pause-circle:before {\n  content: \"\\f28b\"; }\n\n.fa-paw:before {\n  content: \"\\f1b0\"; }\n\n.fa-paypal:before {\n  content: \"\\f1ed\"; }\n\n.fa-pen-square:before {\n  content: \"\\f14b\"; }\n\n.fa-pencil-alt:before {\n  content: \"\\f303\"; }\n\n.fa-percent:before {\n  content: \"\\f295\"; }\n\n.fa-periscope:before {\n  content: \"\\f3da\"; }\n\n.fa-phabricator:before {\n  content: \"\\f3db\"; }\n\n.fa-phoenix-framework:before {\n  content: \"\\f3dc\"; }\n\n.fa-phone:before {\n  content: \"\\f095\"; }\n\n.fa-phone-square:before {\n  content: \"\\f098\"; }\n\n.fa-phone-volume:before {\n  content: \"\\f2a0\"; }\n\n.fa-php:before {\n  content: \"\\f457\"; }\n\n.fa-pied-piper:before {\n  content: \"\\f2ae\"; }\n\n.fa-pied-piper-alt:before {\n  content: \"\\f1a8\"; }\n\n.fa-pied-piper-pp:before {\n  content: \"\\f1a7\"; }\n\n.fa-pills:before {\n  content: \"\\f484\"; }\n\n.fa-pinterest:before {\n  content: \"\\f0d2\"; }\n\n.fa-pinterest-p:before {\n  content: \"\\f231\"; }\n\n.fa-pinterest-square:before {\n  content: \"\\f0d3\"; }\n\n.fa-plane:before {\n  content: \"\\f072\"; }\n\n.fa-play:before {\n  content: \"\\f04b\"; }\n\n.fa-play-circle:before {\n  content: \"\\f144\"; }\n\n.fa-playstation:before {\n  content: \"\\f3df\"; }\n\n.fa-plug:before {\n  content: \"\\f1e6\"; }\n\n.fa-plus:before {\n  content: \"\\f067\"; }\n\n.fa-plus-circle:before {\n  content: \"\\f055\"; }\n\n.fa-plus-square:before {\n  content: \"\\f0fe\"; }\n\n.fa-podcast:before {\n  content: \"\\f2ce\"; }\n\n.fa-pound-sign:before {\n  content: \"\\f154\"; }\n\n.fa-power-off:before {\n  content: \"\\f011\"; }\n\n.fa-print:before {\n  content: \"\\f02f\"; }\n\n.fa-product-hunt:before {\n  content: \"\\f288\"; }\n\n.fa-pushed:before {\n  content: \"\\f3e1\"; }\n\n.fa-puzzle-piece:before {\n  content: \"\\f12e\"; }\n\n.fa-python:before {\n  content: \"\\f3e2\"; }\n\n.fa-qq:before {\n  content: \"\\f1d6\"; }\n\n.fa-qrcode:before {\n  content: \"\\f029\"; }\n\n.fa-question:before {\n  content: \"\\f128\"; }\n\n.fa-question-circle:before {\n  content: \"\\f059\"; }\n\n.fa-quidditch:before {\n  content: \"\\f458\"; }\n\n.fa-quinscape:before {\n  content: \"\\f459\"; }\n\n.fa-quora:before {\n  content: \"\\f2c4\"; }\n\n.fa-quote-left:before {\n  content: \"\\f10d\"; }\n\n.fa-quote-right:before {\n  content: \"\\f10e\"; }\n\n.fa-random:before {\n  content: \"\\f074\"; }\n\n.fa-ravelry:before {\n  content: \"\\f2d9\"; }\n\n.fa-react:before {\n  content: \"\\f41b\"; }\n\n.fa-rebel:before {\n  content: \"\\f1d0\"; }\n\n.fa-recycle:before {\n  content: \"\\f1b8\"; }\n\n.fa-red-river:before {\n  content: \"\\f3e3\"; }\n\n.fa-reddit:before {\n  content: \"\\f1a1\"; }\n\n.fa-reddit-alien:before {\n  content: \"\\f281\"; }\n\n.fa-reddit-square:before {\n  content: \"\\f1a2\"; }\n\n.fa-redo:before {\n  content: \"\\f01e\"; }\n\n.fa-redo-alt:before {\n  content: \"\\f2f9\"; }\n\n.fa-registered:before {\n  content: \"\\f25d\"; }\n\n.fa-rendact:before {\n  content: \"\\f3e4\"; }\n\n.fa-renren:before {\n  content: \"\\f18b\"; }\n\n.fa-reply:before {\n  content: \"\\f3e5\"; }\n\n.fa-reply-all:before {\n  content: \"\\f122\"; }\n\n.fa-replyd:before {\n  content: \"\\f3e6\"; }\n\n.fa-resolving:before {\n  content: \"\\f3e7\"; }\n\n.fa-retweet:before {\n  content: \"\\f079\"; }\n\n.fa-road:before {\n  content: \"\\f018\"; }\n\n.fa-rocket:before {\n  content: \"\\f135\"; }\n\n.fa-rocketchat:before {\n  content: \"\\f3e8\"; }\n\n.fa-rockrms:before {\n  content: \"\\f3e9\"; }\n\n.fa-rss:before {\n  content: \"\\f09e\"; }\n\n.fa-rss-square:before {\n  content: \"\\f143\"; }\n\n.fa-ruble-sign:before {\n  content: \"\\f158\"; }\n\n.fa-rupee-sign:before {\n  content: \"\\f156\"; }\n\n.fa-safari:before {\n  content: \"\\f267\"; }\n\n.fa-sass:before {\n  content: \"\\f41e\"; }\n\n.fa-save:before {\n  content: \"\\f0c7\"; }\n\n.fa-schlix:before {\n  content: \"\\f3ea\"; }\n\n.fa-scribd:before {\n  content: \"\\f28a\"; }\n\n.fa-search:before {\n  content: \"\\f002\"; }\n\n.fa-search-minus:before {\n  content: \"\\f010\"; }\n\n.fa-search-plus:before {\n  content: \"\\f00e\"; }\n\n.fa-searchengin:before {\n  content: \"\\f3eb\"; }\n\n.fa-sellcast:before {\n  content: \"\\f2da\"; }\n\n.fa-sellsy:before {\n  content: \"\\f213\"; }\n\n.fa-server:before {\n  content: \"\\f233\"; }\n\n.fa-servicestack:before {\n  content: \"\\f3ec\"; }\n\n.fa-share:before {\n  content: \"\\f064\"; }\n\n.fa-share-alt:before {\n  content: \"\\f1e0\"; }\n\n.fa-share-alt-square:before {\n  content: \"\\f1e1\"; }\n\n.fa-share-square:before {\n  content: \"\\f14d\"; }\n\n.fa-shekel-sign:before {\n  content: \"\\f20b\"; }\n\n.fa-shield-alt:before {\n  content: \"\\f3ed\"; }\n\n.fa-ship:before {\n  content: \"\\f21a\"; }\n\n.fa-shipping-fast:before {\n  content: \"\\f48b\"; }\n\n.fa-shirtsinbulk:before {\n  content: \"\\f214\"; }\n\n.fa-shopping-bag:before {\n  content: \"\\f290\"; }\n\n.fa-shopping-basket:before {\n  content: \"\\f291\"; }\n\n.fa-shopping-cart:before {\n  content: \"\\f07a\"; }\n\n.fa-shower:before {\n  content: \"\\f2cc\"; }\n\n.fa-sign-in-alt:before {\n  content: \"\\f2f6\"; }\n\n.fa-sign-language:before {\n  content: \"\\f2a7\"; }\n\n.fa-sign-out-alt:before {\n  content: \"\\f2f5\"; }\n\n.fa-signal:before {\n  content: \"\\f012\"; }\n\n.fa-simplybuilt:before {\n  content: \"\\f215\"; }\n\n.fa-sistrix:before {\n  content: \"\\f3ee\"; }\n\n.fa-sitemap:before {\n  content: \"\\f0e8\"; }\n\n.fa-skyatlas:before {\n  content: \"\\f216\"; }\n\n.fa-skype:before {\n  content: \"\\f17e\"; }\n\n.fa-slack:before {\n  content: \"\\f198\"; }\n\n.fa-slack-hash:before {\n  content: \"\\f3ef\"; }\n\n.fa-sliders-h:before {\n  content: \"\\f1de\"; }\n\n.fa-slideshare:before {\n  content: \"\\f1e7\"; }\n\n.fa-smile:before {\n  content: \"\\f118\"; }\n\n.fa-snapchat:before {\n  content: \"\\f2ab\"; }\n\n.fa-snapchat-ghost:before {\n  content: \"\\f2ac\"; }\n\n.fa-snapchat-square:before {\n  content: \"\\f2ad\"; }\n\n.fa-snowflake:before {\n  content: \"\\f2dc\"; }\n\n.fa-sort:before {\n  content: \"\\f0dc\"; }\n\n.fa-sort-alpha-down:before {\n  content: \"\\f15d\"; }\n\n.fa-sort-alpha-up:before {\n  content: \"\\f15e\"; }\n\n.fa-sort-amount-down:before {\n  content: \"\\f160\"; }\n\n.fa-sort-amount-up:before {\n  content: \"\\f161\"; }\n\n.fa-sort-down:before {\n  content: \"\\f0dd\"; }\n\n.fa-sort-numeric-down:before {\n  content: \"\\f162\"; }\n\n.fa-sort-numeric-up:before {\n  content: \"\\f163\"; }\n\n.fa-sort-up:before {\n  content: \"\\f0de\"; }\n\n.fa-soundcloud:before {\n  content: \"\\f1be\"; }\n\n.fa-space-shuttle:before {\n  content: \"\\f197\"; }\n\n.fa-speakap:before {\n  content: \"\\f3f3\"; }\n\n.fa-spinner:before {\n  content: \"\\f110\"; }\n\n.fa-spotify:before {\n  content: \"\\f1bc\"; }\n\n.fa-square:before {\n  content: \"\\f0c8\"; }\n\n.fa-square-full:before {\n  content: \"\\f45c\"; }\n\n.fa-stack-exchange:before {\n  content: \"\\f18d\"; }\n\n.fa-stack-overflow:before {\n  content: \"\\f16c\"; }\n\n.fa-star:before {\n  content: \"\\f005\"; }\n\n.fa-star-half:before {\n  content: \"\\f089\"; }\n\n.fa-staylinked:before {\n  content: \"\\f3f5\"; }\n\n.fa-steam:before {\n  content: \"\\f1b6\"; }\n\n.fa-steam-square:before {\n  content: \"\\f1b7\"; }\n\n.fa-steam-symbol:before {\n  content: \"\\f3f6\"; }\n\n.fa-step-backward:before {\n  content: \"\\f048\"; }\n\n.fa-step-forward:before {\n  content: \"\\f051\"; }\n\n.fa-stethoscope:before {\n  content: \"\\f0f1\"; }\n\n.fa-sticker-mule:before {\n  content: \"\\f3f7\"; }\n\n.fa-sticky-note:before {\n  content: \"\\f249\"; }\n\n.fa-stop:before {\n  content: \"\\f04d\"; }\n\n.fa-stop-circle:before {\n  content: \"\\f28d\"; }\n\n.fa-stopwatch:before {\n  content: \"\\f2f2\"; }\n\n.fa-strava:before {\n  content: \"\\f428\"; }\n\n.fa-street-view:before {\n  content: \"\\f21d\"; }\n\n.fa-strikethrough:before {\n  content: \"\\f0cc\"; }\n\n.fa-stripe:before {\n  content: \"\\f429\"; }\n\n.fa-stripe-s:before {\n  content: \"\\f42a\"; }\n\n.fa-studiovinari:before {\n  content: \"\\f3f8\"; }\n\n.fa-stumbleupon:before {\n  content: \"\\f1a4\"; }\n\n.fa-stumbleupon-circle:before {\n  content: \"\\f1a3\"; }\n\n.fa-subscript:before {\n  content: \"\\f12c\"; }\n\n.fa-subway:before {\n  content: \"\\f239\"; }\n\n.fa-suitcase:before {\n  content: \"\\f0f2\"; }\n\n.fa-sun:before {\n  content: \"\\f185\"; }\n\n.fa-superpowers:before {\n  content: \"\\f2dd\"; }\n\n.fa-superscript:before {\n  content: \"\\f12b\"; }\n\n.fa-supple:before {\n  content: \"\\f3f9\"; }\n\n.fa-sync:before {\n  content: \"\\f021\"; }\n\n.fa-sync-alt:before {\n  content: \"\\f2f1\"; }\n\n.fa-syringe:before {\n  content: \"\\f48e\"; }\n\n.fa-table:before {\n  content: \"\\f0ce\"; }\n\n.fa-table-tennis:before {\n  content: \"\\f45d\"; }\n\n.fa-tablet:before {\n  content: \"\\f10a\"; }\n\n.fa-tablet-alt:before {\n  content: \"\\f3fa\"; }\n\n.fa-tachometer-alt:before {\n  content: \"\\f3fd\"; }\n\n.fa-tag:before {\n  content: \"\\f02b\"; }\n\n.fa-tags:before {\n  content: \"\\f02c\"; }\n\n.fa-tasks:before {\n  content: \"\\f0ae\"; }\n\n.fa-taxi:before {\n  content: \"\\f1ba\"; }\n\n.fa-telegram:before {\n  content: \"\\f2c6\"; }\n\n.fa-telegram-plane:before {\n  content: \"\\f3fe\"; }\n\n.fa-tencent-weibo:before {\n  content: \"\\f1d5\"; }\n\n.fa-terminal:before {\n  content: \"\\f120\"; }\n\n.fa-text-height:before {\n  content: \"\\f034\"; }\n\n.fa-text-width:before {\n  content: \"\\f035\"; }\n\n.fa-th:before {\n  content: \"\\f00a\"; }\n\n.fa-th-large:before {\n  content: \"\\f009\"; }\n\n.fa-th-list:before {\n  content: \"\\f00b\"; }\n\n.fa-themeisle:before {\n  content: \"\\f2b2\"; }\n\n.fa-thermometer:before {\n  content: \"\\f491\"; }\n\n.fa-thermometer-empty:before {\n  content: \"\\f2cb\"; }\n\n.fa-thermometer-full:before {\n  content: \"\\f2c7\"; }\n\n.fa-thermometer-half:before {\n  content: \"\\f2c9\"; }\n\n.fa-thermometer-quarter:before {\n  content: \"\\f2ca\"; }\n\n.fa-thermometer-three-quarters:before {\n  content: \"\\f2c8\"; }\n\n.fa-thumbs-down:before {\n  content: \"\\f165\"; }\n\n.fa-thumbs-up:before {\n  content: \"\\f164\"; }\n\n.fa-thumbtack:before {\n  content: \"\\f08d\"; }\n\n.fa-ticket-alt:before {\n  content: \"\\f3ff\"; }\n\n.fa-times:before {\n  content: \"\\f00d\"; }\n\n.fa-times-circle:before {\n  content: \"\\f057\"; }\n\n.fa-tint:before {\n  content: \"\\f043\"; }\n\n.fa-toggle-off:before {\n  content: \"\\f204\"; }\n\n.fa-toggle-on:before {\n  content: \"\\f205\"; }\n\n.fa-trademark:before {\n  content: \"\\f25c\"; }\n\n.fa-train:before {\n  content: \"\\f238\"; }\n\n.fa-transgender:before {\n  content: \"\\f224\"; }\n\n.fa-transgender-alt:before {\n  content: \"\\f225\"; }\n\n.fa-trash:before {\n  content: \"\\f1f8\"; }\n\n.fa-trash-alt:before {\n  content: \"\\f2ed\"; }\n\n.fa-tree:before {\n  content: \"\\f1bb\"; }\n\n.fa-trello:before {\n  content: \"\\f181\"; }\n\n.fa-tripadvisor:before {\n  content: \"\\f262\"; }\n\n.fa-trophy:before {\n  content: \"\\f091\"; }\n\n.fa-truck:before {\n  content: \"\\f0d1\"; }\n\n.fa-tty:before {\n  content: \"\\f1e4\"; }\n\n.fa-tumblr:before {\n  content: \"\\f173\"; }\n\n.fa-tumblr-square:before {\n  content: \"\\f174\"; }\n\n.fa-tv:before {\n  content: \"\\f26c\"; }\n\n.fa-twitch:before {\n  content: \"\\f1e8\"; }\n\n.fa-twitter:before {\n  content: \"\\f099\"; }\n\n.fa-twitter-square:before {\n  content: \"\\f081\"; }\n\n.fa-typo3:before {\n  content: \"\\f42b\"; }\n\n.fa-uber:before {\n  content: \"\\f402\"; }\n\n.fa-uikit:before {\n  content: \"\\f403\"; }\n\n.fa-umbrella:before {\n  content: \"\\f0e9\"; }\n\n.fa-underline:before {\n  content: \"\\f0cd\"; }\n\n.fa-undo:before {\n  content: \"\\f0e2\"; }\n\n.fa-undo-alt:before {\n  content: \"\\f2ea\"; }\n\n.fa-uniregistry:before {\n  content: \"\\f404\"; }\n\n.fa-universal-access:before {\n  content: \"\\f29a\"; }\n\n.fa-university:before {\n  content: \"\\f19c\"; }\n\n.fa-unlink:before {\n  content: \"\\f127\"; }\n\n.fa-unlock:before {\n  content: \"\\f09c\"; }\n\n.fa-unlock-alt:before {\n  content: \"\\f13e\"; }\n\n.fa-untappd:before {\n  content: \"\\f405\"; }\n\n.fa-upload:before {\n  content: \"\\f093\"; }\n\n.fa-usb:before {\n  content: \"\\f287\"; }\n\n.fa-user:before {\n  content: \"\\f007\"; }\n\n.fa-user-circle:before {\n  content: \"\\f2bd\"; }\n\n.fa-user-md:before {\n  content: \"\\f0f0\"; }\n\n.fa-user-plus:before {\n  content: \"\\f234\"; }\n\n.fa-user-secret:before {\n  content: \"\\f21b\"; }\n\n.fa-user-times:before {\n  content: \"\\f235\"; }\n\n.fa-users:before {\n  content: \"\\f0c0\"; }\n\n.fa-ussunnah:before {\n  content: \"\\f407\"; }\n\n.fa-utensil-spoon:before {\n  content: \"\\f2e5\"; }\n\n.fa-utensils:before {\n  content: \"\\f2e7\"; }\n\n.fa-vaadin:before {\n  content: \"\\f408\"; }\n\n.fa-venus:before {\n  content: \"\\f221\"; }\n\n.fa-venus-double:before {\n  content: \"\\f226\"; }\n\n.fa-venus-mars:before {\n  content: \"\\f228\"; }\n\n.fa-viacoin:before {\n  content: \"\\f237\"; }\n\n.fa-viadeo:before {\n  content: \"\\f2a9\"; }\n\n.fa-viadeo-square:before {\n  content: \"\\f2aa\"; }\n\n.fa-viber:before {\n  content: \"\\f409\"; }\n\n.fa-video:before {\n  content: \"\\f03d\"; }\n\n.fa-vimeo:before {\n  content: \"\\f40a\"; }\n\n.fa-vimeo-square:before {\n  content: \"\\f194\"; }\n\n.fa-vimeo-v:before {\n  content: \"\\f27d\"; }\n\n.fa-vine:before {\n  content: \"\\f1ca\"; }\n\n.fa-vk:before {\n  content: \"\\f189\"; }\n\n.fa-vnv:before {\n  content: \"\\f40b\"; }\n\n.fa-volleyball-ball:before {\n  content: \"\\f45f\"; }\n\n.fa-volume-down:before {\n  content: \"\\f027\"; }\n\n.fa-volume-off:before {\n  content: \"\\f026\"; }\n\n.fa-volume-up:before {\n  content: \"\\f028\"; }\n\n.fa-vuejs:before {\n  content: \"\\f41f\"; }\n\n.fa-warehouse:before {\n  content: \"\\f494\"; }\n\n.fa-weibo:before {\n  content: \"\\f18a\"; }\n\n.fa-weight:before {\n  content: \"\\f496\"; }\n\n.fa-weixin:before {\n  content: \"\\f1d7\"; }\n\n.fa-whatsapp:before {\n  content: \"\\f232\"; }\n\n.fa-whatsapp-square:before {\n  content: \"\\f40c\"; }\n\n.fa-wheelchair:before {\n  content: \"\\f193\"; }\n\n.fa-whmcs:before {\n  content: \"\\f40d\"; }\n\n.fa-wifi:before {\n  content: \"\\f1eb\"; }\n\n.fa-wikipedia-w:before {\n  content: \"\\f266\"; }\n\n.fa-window-close:before {\n  content: \"\\f410\"; }\n\n.fa-window-maximize:before {\n  content: \"\\f2d0\"; }\n\n.fa-window-minimize:before {\n  content: \"\\f2d1\"; }\n\n.fa-window-restore:before {\n  content: \"\\f2d2\"; }\n\n.fa-windows:before {\n  content: \"\\f17a\"; }\n\n.fa-won-sign:before {\n  content: \"\\f159\"; }\n\n.fa-wordpress:before {\n  content: \"\\f19a\"; }\n\n.fa-wordpress-simple:before {\n  content: \"\\f411\"; }\n\n.fa-wpbeginner:before {\n  content: \"\\f297\"; }\n\n.fa-wpexplorer:before {\n  content: \"\\f2de\"; }\n\n.fa-wpforms:before {\n  content: \"\\f298\"; }\n\n.fa-wrench:before {\n  content: \"\\f0ad\"; }\n\n.fa-xbox:before {\n  content: \"\\f412\"; }\n\n.fa-xing:before {\n  content: \"\\f168\"; }\n\n.fa-xing-square:before {\n  content: \"\\f169\"; }\n\n.fa-y-combinator:before {\n  content: \"\\f23b\"; }\n\n.fa-yahoo:before {\n  content: \"\\f19e\"; }\n\n.fa-yandex:before {\n  content: \"\\f413\"; }\n\n.fa-yandex-international:before {\n  content: \"\\f414\"; }\n\n.fa-yelp:before {\n  content: \"\\f1e9\"; }\n\n.fa-yen-sign:before {\n  content: \"\\f157\"; }\n\n.fa-yoast:before {\n  content: \"\\f2b1\"; }\n\n.fa-youtube:before {\n  content: \"\\f167\"; }\n\n.fa-youtube-square:before {\n  content: \"\\f431\"; }\n\n.sr-only {\n  border: 0;\n  clip: rect(0, 0, 0, 0);\n  height: 1px;\n  margin: -1px;\n  overflow: hidden;\n  padding: 0;\n  position: absolute;\n  width: 1px; }\n\n.sr-only-focusable:active, .sr-only-focusable:focus {\n  clip: auto;\n  height: auto;\n  margin: 0;\n  overflow: visible;\n  position: static;\n  width: auto; }\n@font-face {\n  font-family: 'Font Awesome 5 Brands';\n  font-style: normal;\n  font-weight: normal;\n  src: url(\"../webfonts/fa-brands-400.eot\");\n  src: url(\"../webfonts/fa-brands-400.eot?#iefix\") format(\"embedded-opentype\"), url(\"../webfonts/fa-brands-400.woff2\") format(\"woff2\"), url(\"../webfonts/fa-brands-400.woff\") format(\"woff\"), url(\"../webfonts/fa-brands-400.ttf\") format(\"truetype\"), url(\"../webfonts/fa-brands-400.svg#fontawesome\") format(\"svg\"); }\n\n.fab {\n  font-family: 'Font Awesome 5 Brands'; }\n@font-face {\n  font-family: 'Font Awesome 5 Free';\n  font-style: normal;\n  font-weight: 400;\n  src: url(\"../webfonts/fa-regular-400.eot\");\n  src: url(\"../webfonts/fa-regular-400.eot?#iefix\") format(\"embedded-opentype\"), url(\"../webfonts/fa-regular-400.woff2\") format(\"woff2\"), url(\"../webfonts/fa-regular-400.woff\") format(\"woff\"), url(\"../webfonts/fa-regular-400.ttf\") format(\"truetype\"), url(\"../webfonts/fa-regular-400.svg#fontawesome\") format(\"svg\"); }\n\n.far {\n  font-family: 'Font Awesome 5 Free';\n  font-weight: 400; }\n@font-face {\n  font-family: 'Font Awesome 5 Free';\n  font-style: normal;\n  font-weight: 900;\n  src: url(\"../webfonts/fa-solid-900.eot\");\n  src: url(\"../webfonts/fa-solid-900.eot?#iefix\") format(\"embedded-opentype\"), url(\"../webfonts/fa-solid-900.woff2\") format(\"woff2\"), url(\"../webfonts/fa-solid-900.woff\") format(\"woff\"), url(\"../webfonts/fa-solid-900.ttf\") format(\"truetype\"), url(\"../webfonts/fa-solid-900.svg#fontawesome\") format(\"svg\"); }\n\n.fa,\n.fas {\n  font-family: 'Font Awesome 5 Free';\n  font-weight: 900; }\n"
  },
  {
    "path": "src/sourceDev.WebApp/SharedThemes/lumen/wwwroot/css/site.css",
    "content": "﻿html {\n    position: relative;\n    min-height: 100%;\n}\n\nbody {\n    min-height: 100vh;\n    padding-top: 148px;\n}\n\n#newPostLink {\n    position: absolute;\n    top: 170px;\n    right: 0px;\n}\n\n#editPostLink {\n    position: absolute;\n    top: 200px;\n    right: 0px;\n}\n\n#unpublishPostLink {\n    position: absolute;\n    top: 230px !important;\n    right: 0px !important;\n}\n\n#pageManagerLink {\n    position: absolute;\n    top: 170px;\n    right: 0px;\n}\n\n#newPageLink {\n    position: absolute;\n    top: 200px;\n    right: 0px;\n}\n\n#editPageLink {\n    position: absolute;\n    top: 230px;\n    right: 0px\n}\n\n#unpublishPageLink {\n    position: absolute;\n    top: 260px !important;\n    right: 0px !important\n}\n\n#sidenavtoggle {\n    position: absolute;\n    top: 220px;\n    right: 5px;\n}\n\n\n@media screen and (max-width: 812px) {\n    #sidenavtoggle,\n    #sidenavmenu {\n        display: none;\n    }\n}\n\n.flex-fill {\n    flex: 1 1 auto !important;\n}\n\n\n.carousel-caption p {\n    font-size: 20px;\n    line-height: 1.4;\n}\n\n@media screen and (max-width: 768px) {\n    .carousel-caption {\n        display: none\n    }\n}\n\n\n\n\nimg, video, iframe {\n    max-width: 100%;\n}\n\ntd img, video, iframe {\n    max-width: none;\n}\n\n\n\n.table td, .table th {\n    vertical-align: inherit;\n}\n\n/******** jquery smartmenu bootstrap 4 ******/\n/* Carets in collapsible mode (make them look like +/- buttons) */\n.navbar-nav.sm-collapsible .sub-arrow {\n    position: absolute;\n    top: 50%;\n    right: 0;\n    margin: -0.7em 0.5em 0 0;\n    border: 1px solid rgba(0, 0, 0, .1);\n    border-radius: .25rem;\n    padding: 0;\n    width: 2em;\n    height: 1.4em;\n    font-size: 1.25rem;\n    line-height: 1.2em;\n    text-align: center;\n}\n\n    .navbar-nav.sm-collapsible .sub-arrow::before {\n        content: '+';\n    }\n\n.navbar-nav.sm-collapsible .show > a > .sub-arrow::before {\n    content: '-';\n}\n\n.navbar-dark .navbar-nav.sm-collapsible .nav-link .sub-arrow {\n    border-color: rgba(255, 255, 255, .1);\n}\n/* make sure there's room for the carets */\n.navbar-nav.sm-collapsible .has-submenu {\n    padding-right: 3em;\n}\n/* keep the carets properly positioned */\n.navbar-nav.sm-collapsible .nav-link,\n.navbar-nav.sm-collapsible .dropdown-item {\n    position: relative;\n}\n\n\n/* Nav carets in expanded mode */\n.navbar-nav:not(.sm-collapsible) .nav-link .sub-arrow {\n    display: inline-block;\n    width: 0;\n    height: 0;\n    margin-left: .255em;\n    vertical-align: .255em;\n    border-top: .3em solid;\n    border-right: .3em solid transparent;\n    border-left: .3em solid transparent;\n}\n/* point the arrows up for .fixed-bottom navbars */\n.fixed-bottom .navbar-nav:not(.sm-collapsible) .nav-link .sub-arrow,\n.fixed-bottom .navbar-nav:not(.sm-collapsible):not([data-sm-skip]) .dropdown-toggle::after {\n    border-top: 0;\n    border-bottom: .3em solid;\n}\n\n\n/* Dropdown carets in expanded mode */\n.navbar-nav:not(.sm-collapsible) .dropdown-item .sub-arrow,\n.navbar-nav:not(.sm-collapsible):not([data-sm-skip]) .dropdown-menu .dropdown-toggle::after {\n    position: absolute;\n    top: 50%;\n    right: 0;\n    width: 0;\n    height: 0;\n    margin-top: -.3em;\n    margin-right: 1em;\n    border-top: .3em solid transparent;\n    border-bottom: .3em solid transparent;\n    border-left: .3em solid;\n}\n/* make sure there's room for the carets */\n.navbar-nav:not(.sm-collapsible) .dropdown-item.has-submenu {\n    padding-right: 2em;\n}\n\n\n/* Scrolling arrows for tall menus */\n.navbar-nav .scroll-up,\n.navbar-nav .scroll-down {\n    position: absolute;\n    display: none;\n    visibility: hidden;\n    height: 20px;\n    overflow: hidden;\n    text-align: center;\n}\n\n.navbar-nav .scroll-up-arrow,\n.navbar-nav .scroll-down-arrow {\n    position: absolute;\n    top: -2px;\n    left: 50%;\n    margin-left: -8px;\n    width: 0;\n    height: 0;\n    overflow: hidden;\n    border-top: 7px solid transparent;\n    border-right: 7px solid transparent;\n    border-bottom: 7px solid;\n    border-left: 7px solid transparent;\n}\n\n.navbar-nav .scroll-down-arrow {\n    top: 6px;\n    border-top: 7px solid;\n    border-right: 7px solid transparent;\n    border-bottom: 7px solid transparent;\n    border-left: 7px solid transparent;\n}\n\n\n/* Add some spacing for 2+ level sub menus in collapsible mode */\n.navbar-nav.sm-collapsible .dropdown-menu .dropdown-menu {\n    margin: .5em;\n}\n\n\n/* Fix SmartMenus sub menus auto width (subMenusMinWidth/subMenusMaxWidth options) */\n.navbar-nav:not([data-sm-skip]) .dropdown-item {\n    white-space: normal;\n}\n\n.navbar-nav:not(.sm-collapsible) .sm-nowrap > li > .dropdown-item {\n    white-space: nowrap;\n}\n/******** end jquery smart menu bootstrap-4 *****************/\n\n.brand-header {\n    height: 100px;\n}\n\nheader .navbar {\n    top: 100px;\n}\n"
  },
  {
    "path": "src/sourceDev.WebApp/SharedThemes/lumen/wwwroot/js/bootstrap.bundle.js",
    "content": "/*!\n  * Bootstrap v5.0.2 (https://getbootstrap.com/)\n  * Copyright 2011-2021 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)\n  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n  */\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n  typeof define === 'function' && define.amd ? define(factory) :\n  (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.bootstrap = factory());\n}(this, (function () { 'use strict';\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): dom/selector-engine.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n  const NODE_TEXT = 3;\n  const SelectorEngine = {\n    find(selector, element = document.documentElement) {\n      return [].concat(...Element.prototype.querySelectorAll.call(element, selector));\n    },\n\n    findOne(selector, element = document.documentElement) {\n      return Element.prototype.querySelector.call(element, selector);\n    },\n\n    children(element, selector) {\n      return [].concat(...element.children).filter(child => child.matches(selector));\n    },\n\n    parents(element, selector) {\n      const parents = [];\n      let ancestor = element.parentNode;\n\n      while (ancestor && ancestor.nodeType === Node.ELEMENT_NODE && ancestor.nodeType !== NODE_TEXT) {\n        if (ancestor.matches(selector)) {\n          parents.push(ancestor);\n        }\n\n        ancestor = ancestor.parentNode;\n      }\n\n      return parents;\n    },\n\n    prev(element, selector) {\n      let previous = element.previousElementSibling;\n\n      while (previous) {\n        if (previous.matches(selector)) {\n          return [previous];\n        }\n\n        previous = previous.previousElementSibling;\n      }\n\n      return [];\n    },\n\n    next(element, selector) {\n      let next = element.nextElementSibling;\n\n      while (next) {\n        if (next.matches(selector)) {\n          return [next];\n        }\n\n        next = next.nextElementSibling;\n      }\n\n      return [];\n    }\n\n  };\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): util/index.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n\n  const MAX_UID = 1000000;\n  const MILLISECONDS_MULTIPLIER = 1000;\n  const TRANSITION_END = 'transitionend'; // Shoutout AngusCroll (https://goo.gl/pxwQGp)\n\n  const toType = obj => {\n    if (obj === null || obj === undefined) {\n      return `${obj}`;\n    }\n\n    return {}.toString.call(obj).match(/\\s([a-z]+)/i)[1].toLowerCase();\n  };\n  /**\n   * --------------------------------------------------------------------------\n   * Public Util Api\n   * --------------------------------------------------------------------------\n   */\n\n\n  const getUID = prefix => {\n    do {\n      prefix += Math.floor(Math.random() * MAX_UID);\n    } while (document.getElementById(prefix));\n\n    return prefix;\n  };\n\n  const getSelector = element => {\n    let selector = element.getAttribute('data-bs-target');\n\n    if (!selector || selector === '#') {\n      let hrefAttr = element.getAttribute('href'); // The only valid content that could double as a selector are IDs or classes,\n      // so everything starting with `#` or `.`. If a \"real\" URL is used as the selector,\n      // `document.querySelector` will rightfully complain it is invalid.\n      // See https://github.com/twbs/bootstrap/issues/32273\n\n      if (!hrefAttr || !hrefAttr.includes('#') && !hrefAttr.startsWith('.')) {\n        return null;\n      } // Just in case some CMS puts out a full URL with the anchor appended\n\n\n      if (hrefAttr.includes('#') && !hrefAttr.startsWith('#')) {\n        hrefAttr = `#${hrefAttr.split('#')[1]}`;\n      }\n\n      selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : null;\n    }\n\n    return selector;\n  };\n\n  const getSelectorFromElement = element => {\n    const selector = getSelector(element);\n\n    if (selector) {\n      return document.querySelector(selector) ? selector : null;\n    }\n\n    return null;\n  };\n\n  const getElementFromSelector = element => {\n    const selector = getSelector(element);\n    return selector ? document.querySelector(selector) : null;\n  };\n\n  const getTransitionDurationFromElement = element => {\n    if (!element) {\n      return 0;\n    } // Get transition-duration of the element\n\n\n    let {\n      transitionDuration,\n      transitionDelay\n    } = window.getComputedStyle(element);\n    const floatTransitionDuration = Number.parseFloat(transitionDuration);\n    const floatTransitionDelay = Number.parseFloat(transitionDelay); // Return 0 if element or transition duration is not found\n\n    if (!floatTransitionDuration && !floatTransitionDelay) {\n      return 0;\n    } // If multiple durations are defined, take the first\n\n\n    transitionDuration = transitionDuration.split(',')[0];\n    transitionDelay = transitionDelay.split(',')[0];\n    return (Number.parseFloat(transitionDuration) + Number.parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER;\n  };\n\n  const triggerTransitionEnd = element => {\n    element.dispatchEvent(new Event(TRANSITION_END));\n  };\n\n  const isElement$1 = obj => {\n    if (!obj || typeof obj !== 'object') {\n      return false;\n    }\n\n    if (typeof obj.jquery !== 'undefined') {\n      obj = obj[0];\n    }\n\n    return typeof obj.nodeType !== 'undefined';\n  };\n\n  const getElement = obj => {\n    if (isElement$1(obj)) {\n      // it's a jQuery object or a node element\n      return obj.jquery ? obj[0] : obj;\n    }\n\n    if (typeof obj === 'string' && obj.length > 0) {\n      return SelectorEngine.findOne(obj);\n    }\n\n    return null;\n  };\n\n  const typeCheckConfig = (componentName, config, configTypes) => {\n    Object.keys(configTypes).forEach(property => {\n      const expectedTypes = configTypes[property];\n      const value = config[property];\n      const valueType = value && isElement$1(value) ? 'element' : toType(value);\n\n      if (!new RegExp(expectedTypes).test(valueType)) {\n        throw new TypeError(`${componentName.toUpperCase()}: Option \"${property}\" provided type \"${valueType}\" but expected type \"${expectedTypes}\".`);\n      }\n    });\n  };\n\n  const isVisible = element => {\n    if (!isElement$1(element) || element.getClientRects().length === 0) {\n      return false;\n    }\n\n    return getComputedStyle(element).getPropertyValue('visibility') === 'visible';\n  };\n\n  const isDisabled = element => {\n    if (!element || element.nodeType !== Node.ELEMENT_NODE) {\n      return true;\n    }\n\n    if (element.classList.contains('disabled')) {\n      return true;\n    }\n\n    if (typeof element.disabled !== 'undefined') {\n      return element.disabled;\n    }\n\n    return element.hasAttribute('disabled') && element.getAttribute('disabled') !== 'false';\n  };\n\n  const findShadowRoot = element => {\n    if (!document.documentElement.attachShadow) {\n      return null;\n    } // Can find the shadow root otherwise it'll return the document\n\n\n    if (typeof element.getRootNode === 'function') {\n      const root = element.getRootNode();\n      return root instanceof ShadowRoot ? root : null;\n    }\n\n    if (element instanceof ShadowRoot) {\n      return element;\n    } // when we don't find a shadow root\n\n\n    if (!element.parentNode) {\n      return null;\n    }\n\n    return findShadowRoot(element.parentNode);\n  };\n\n  const noop = () => {};\n\n  const reflow = element => element.offsetHeight;\n\n  const getjQuery = () => {\n    const {\n      jQuery\n    } = window;\n\n    if (jQuery && !document.body.hasAttribute('data-bs-no-jquery')) {\n      return jQuery;\n    }\n\n    return null;\n  };\n\n  const DOMContentLoadedCallbacks = [];\n\n  const onDOMContentLoaded = callback => {\n    if (document.readyState === 'loading') {\n      // add listener on the first call when the document is in loading state\n      if (!DOMContentLoadedCallbacks.length) {\n        document.addEventListener('DOMContentLoaded', () => {\n          DOMContentLoadedCallbacks.forEach(callback => callback());\n        });\n      }\n\n      DOMContentLoadedCallbacks.push(callback);\n    } else {\n      callback();\n    }\n  };\n\n  const isRTL = () => document.documentElement.dir === 'rtl';\n\n  const defineJQueryPlugin = plugin => {\n    onDOMContentLoaded(() => {\n      const $ = getjQuery();\n      /* istanbul ignore if */\n\n      if ($) {\n        const name = plugin.NAME;\n        const JQUERY_NO_CONFLICT = $.fn[name];\n        $.fn[name] = plugin.jQueryInterface;\n        $.fn[name].Constructor = plugin;\n\n        $.fn[name].noConflict = () => {\n          $.fn[name] = JQUERY_NO_CONFLICT;\n          return plugin.jQueryInterface;\n        };\n      }\n    });\n  };\n\n  const execute = callback => {\n    if (typeof callback === 'function') {\n      callback();\n    }\n  };\n\n  const executeAfterTransition = (callback, transitionElement, waitForTransition = true) => {\n    if (!waitForTransition) {\n      execute(callback);\n      return;\n    }\n\n    const durationPadding = 5;\n    const emulatedDuration = getTransitionDurationFromElement(transitionElement) + durationPadding;\n    let called = false;\n\n    const handler = ({\n      target\n    }) => {\n      if (target !== transitionElement) {\n        return;\n      }\n\n      called = true;\n      transitionElement.removeEventListener(TRANSITION_END, handler);\n      execute(callback);\n    };\n\n    transitionElement.addEventListener(TRANSITION_END, handler);\n    setTimeout(() => {\n      if (!called) {\n        triggerTransitionEnd(transitionElement);\n      }\n    }, emulatedDuration);\n  };\n  /**\n   * Return the previous/next element of a list.\n   *\n   * @param {array} list    The list of elements\n   * @param activeElement   The active element\n   * @param shouldGetNext   Choose to get next or previous element\n   * @param isCycleAllowed\n   * @return {Element|elem} The proper element\n   */\n\n\n  const getNextActiveElement = (list, activeElement, shouldGetNext, isCycleAllowed) => {\n    let index = list.indexOf(activeElement); // if the element does not exist in the list return an element depending on the direction and if cycle is allowed\n\n    if (index === -1) {\n      return list[!shouldGetNext && isCycleAllowed ? list.length - 1 : 0];\n    }\n\n    const listLength = list.length;\n    index += shouldGetNext ? 1 : -1;\n\n    if (isCycleAllowed) {\n      index = (index + listLength) % listLength;\n    }\n\n    return list[Math.max(0, Math.min(index, listLength - 1))];\n  };\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): dom/event-handler.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const namespaceRegex = /[^.]*(?=\\..*)\\.|.*/;\n  const stripNameRegex = /\\..*/;\n  const stripUidRegex = /::\\d+$/;\n  const eventRegistry = {}; // Events storage\n\n  let uidEvent = 1;\n  const customEvents = {\n    mouseenter: 'mouseover',\n    mouseleave: 'mouseout'\n  };\n  const customEventsRegex = /^(mouseenter|mouseleave)/i;\n  const nativeEvents = new Set(['click', 'dblclick', 'mouseup', 'mousedown', 'contextmenu', 'mousewheel', 'DOMMouseScroll', 'mouseover', 'mouseout', 'mousemove', 'selectstart', 'selectend', 'keydown', 'keypress', 'keyup', 'orientationchange', 'touchstart', 'touchmove', 'touchend', 'touchcancel', 'pointerdown', 'pointermove', 'pointerup', 'pointerleave', 'pointercancel', 'gesturestart', 'gesturechange', 'gestureend', 'focus', 'blur', 'change', 'reset', 'select', 'submit', 'focusin', 'focusout', 'load', 'unload', 'beforeunload', 'resize', 'move', 'DOMContentLoaded', 'readystatechange', 'error', 'abort', 'scroll']);\n  /**\n   * ------------------------------------------------------------------------\n   * Private methods\n   * ------------------------------------------------------------------------\n   */\n\n  function getUidEvent(element, uid) {\n    return uid && `${uid}::${uidEvent++}` || element.uidEvent || uidEvent++;\n  }\n\n  function getEvent(element) {\n    const uid = getUidEvent(element);\n    element.uidEvent = uid;\n    eventRegistry[uid] = eventRegistry[uid] || {};\n    return eventRegistry[uid];\n  }\n\n  function bootstrapHandler(element, fn) {\n    return function handler(event) {\n      event.delegateTarget = element;\n\n      if (handler.oneOff) {\n        EventHandler.off(element, event.type, fn);\n      }\n\n      return fn.apply(element, [event]);\n    };\n  }\n\n  function bootstrapDelegationHandler(element, selector, fn) {\n    return function handler(event) {\n      const domElements = element.querySelectorAll(selector);\n\n      for (let {\n        target\n      } = event; target && target !== this; target = target.parentNode) {\n        for (let i = domElements.length; i--;) {\n          if (domElements[i] === target) {\n            event.delegateTarget = target;\n\n            if (handler.oneOff) {\n              // eslint-disable-next-line unicorn/consistent-destructuring\n              EventHandler.off(element, event.type, selector, fn);\n            }\n\n            return fn.apply(target, [event]);\n          }\n        }\n      } // To please ESLint\n\n\n      return null;\n    };\n  }\n\n  function findHandler(events, handler, delegationSelector = null) {\n    const uidEventList = Object.keys(events);\n\n    for (let i = 0, len = uidEventList.length; i < len; i++) {\n      const event = events[uidEventList[i]];\n\n      if (event.originalHandler === handler && event.delegationSelector === delegationSelector) {\n        return event;\n      }\n    }\n\n    return null;\n  }\n\n  function normalizeParams(originalTypeEvent, handler, delegationFn) {\n    const delegation = typeof handler === 'string';\n    const originalHandler = delegation ? delegationFn : handler;\n    let typeEvent = getTypeEvent(originalTypeEvent);\n    const isNative = nativeEvents.has(typeEvent);\n\n    if (!isNative) {\n      typeEvent = originalTypeEvent;\n    }\n\n    return [delegation, originalHandler, typeEvent];\n  }\n\n  function addHandler(element, originalTypeEvent, handler, delegationFn, oneOff) {\n    if (typeof originalTypeEvent !== 'string' || !element) {\n      return;\n    }\n\n    if (!handler) {\n      handler = delegationFn;\n      delegationFn = null;\n    } // in case of mouseenter or mouseleave wrap the handler within a function that checks for its DOM position\n    // this prevents the handler from being dispatched the same way as mouseover or mouseout does\n\n\n    if (customEventsRegex.test(originalTypeEvent)) {\n      const wrapFn = fn => {\n        return function (event) {\n          if (!event.relatedTarget || event.relatedTarget !== event.delegateTarget && !event.delegateTarget.contains(event.relatedTarget)) {\n            return fn.call(this, event);\n          }\n        };\n      };\n\n      if (delegationFn) {\n        delegationFn = wrapFn(delegationFn);\n      } else {\n        handler = wrapFn(handler);\n      }\n    }\n\n    const [delegation, originalHandler, typeEvent] = normalizeParams(originalTypeEvent, handler, delegationFn);\n    const events = getEvent(element);\n    const handlers = events[typeEvent] || (events[typeEvent] = {});\n    const previousFn = findHandler(handlers, originalHandler, delegation ? handler : null);\n\n    if (previousFn) {\n      previousFn.oneOff = previousFn.oneOff && oneOff;\n      return;\n    }\n\n    const uid = getUidEvent(originalHandler, originalTypeEvent.replace(namespaceRegex, ''));\n    const fn = delegation ? bootstrapDelegationHandler(element, handler, delegationFn) : bootstrapHandler(element, handler);\n    fn.delegationSelector = delegation ? handler : null;\n    fn.originalHandler = originalHandler;\n    fn.oneOff = oneOff;\n    fn.uidEvent = uid;\n    handlers[uid] = fn;\n    element.addEventListener(typeEvent, fn, delegation);\n  }\n\n  function removeHandler(element, events, typeEvent, handler, delegationSelector) {\n    const fn = findHandler(events[typeEvent], handler, delegationSelector);\n\n    if (!fn) {\n      return;\n    }\n\n    element.removeEventListener(typeEvent, fn, Boolean(delegationSelector));\n    delete events[typeEvent][fn.uidEvent];\n  }\n\n  function removeNamespacedHandlers(element, events, typeEvent, namespace) {\n    const storeElementEvent = events[typeEvent] || {};\n    Object.keys(storeElementEvent).forEach(handlerKey => {\n      if (handlerKey.includes(namespace)) {\n        const event = storeElementEvent[handlerKey];\n        removeHandler(element, events, typeEvent, event.originalHandler, event.delegationSelector);\n      }\n    });\n  }\n\n  function getTypeEvent(event) {\n    // allow to get the native events from namespaced events ('click.bs.button' --> 'click')\n    event = event.replace(stripNameRegex, '');\n    return customEvents[event] || event;\n  }\n\n  const EventHandler = {\n    on(element, event, handler, delegationFn) {\n      addHandler(element, event, handler, delegationFn, false);\n    },\n\n    one(element, event, handler, delegationFn) {\n      addHandler(element, event, handler, delegationFn, true);\n    },\n\n    off(element, originalTypeEvent, handler, delegationFn) {\n      if (typeof originalTypeEvent !== 'string' || !element) {\n        return;\n      }\n\n      const [delegation, originalHandler, typeEvent] = normalizeParams(originalTypeEvent, handler, delegationFn);\n      const inNamespace = typeEvent !== originalTypeEvent;\n      const events = getEvent(element);\n      const isNamespace = originalTypeEvent.startsWith('.');\n\n      if (typeof originalHandler !== 'undefined') {\n        // Simplest case: handler is passed, remove that listener ONLY.\n        if (!events || !events[typeEvent]) {\n          return;\n        }\n\n        removeHandler(element, events, typeEvent, originalHandler, delegation ? handler : null);\n        return;\n      }\n\n      if (isNamespace) {\n        Object.keys(events).forEach(elementEvent => {\n          removeNamespacedHandlers(element, events, elementEvent, originalTypeEvent.slice(1));\n        });\n      }\n\n      const storeElementEvent = events[typeEvent] || {};\n      Object.keys(storeElementEvent).forEach(keyHandlers => {\n        const handlerKey = keyHandlers.replace(stripUidRegex, '');\n\n        if (!inNamespace || originalTypeEvent.includes(handlerKey)) {\n          const event = storeElementEvent[keyHandlers];\n          removeHandler(element, events, typeEvent, event.originalHandler, event.delegationSelector);\n        }\n      });\n    },\n\n    trigger(element, event, args) {\n      if (typeof event !== 'string' || !element) {\n        return null;\n      }\n\n      const $ = getjQuery();\n      const typeEvent = getTypeEvent(event);\n      const inNamespace = event !== typeEvent;\n      const isNative = nativeEvents.has(typeEvent);\n      let jQueryEvent;\n      let bubbles = true;\n      let nativeDispatch = true;\n      let defaultPrevented = false;\n      let evt = null;\n\n      if (inNamespace && $) {\n        jQueryEvent = $.Event(event, args);\n        $(element).trigger(jQueryEvent);\n        bubbles = !jQueryEvent.isPropagationStopped();\n        nativeDispatch = !jQueryEvent.isImmediatePropagationStopped();\n        defaultPrevented = jQueryEvent.isDefaultPrevented();\n      }\n\n      if (isNative) {\n        evt = document.createEvent('HTMLEvents');\n        evt.initEvent(typeEvent, bubbles, true);\n      } else {\n        evt = new CustomEvent(event, {\n          bubbles,\n          cancelable: true\n        });\n      } // merge custom information in our event\n\n\n      if (typeof args !== 'undefined') {\n        Object.keys(args).forEach(key => {\n          Object.defineProperty(evt, key, {\n            get() {\n              return args[key];\n            }\n\n          });\n        });\n      }\n\n      if (defaultPrevented) {\n        evt.preventDefault();\n      }\n\n      if (nativeDispatch) {\n        element.dispatchEvent(evt);\n      }\n\n      if (evt.defaultPrevented && typeof jQueryEvent !== 'undefined') {\n        jQueryEvent.preventDefault();\n      }\n\n      return evt;\n    }\n\n  };\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): dom/data.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n  const elementMap = new Map();\n  var Data = {\n    set(element, key, instance) {\n      if (!elementMap.has(element)) {\n        elementMap.set(element, new Map());\n      }\n\n      const instanceMap = elementMap.get(element); // make it clear we only want one instance per element\n      // can be removed later when multiple key/instances are fine to be used\n\n      if (!instanceMap.has(key) && instanceMap.size !== 0) {\n        // eslint-disable-next-line no-console\n        console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(instanceMap.keys())[0]}.`);\n        return;\n      }\n\n      instanceMap.set(key, instance);\n    },\n\n    get(element, key) {\n      if (elementMap.has(element)) {\n        return elementMap.get(element).get(key) || null;\n      }\n\n      return null;\n    },\n\n    remove(element, key) {\n      if (!elementMap.has(element)) {\n        return;\n      }\n\n      const instanceMap = elementMap.get(element);\n      instanceMap.delete(key); // free up element references if there are no instances left for an element\n\n      if (instanceMap.size === 0) {\n        elementMap.delete(element);\n      }\n    }\n\n  };\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): base-component.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const VERSION = '5.0.2';\n\n  class BaseComponent {\n    constructor(element) {\n      element = getElement(element);\n\n      if (!element) {\n        return;\n      }\n\n      this._element = element;\n      Data.set(this._element, this.constructor.DATA_KEY, this);\n    }\n\n    dispose() {\n      Data.remove(this._element, this.constructor.DATA_KEY);\n      EventHandler.off(this._element, this.constructor.EVENT_KEY);\n      Object.getOwnPropertyNames(this).forEach(propertyName => {\n        this[propertyName] = null;\n      });\n    }\n\n    _queueCallback(callback, element, isAnimated = true) {\n      executeAfterTransition(callback, element, isAnimated);\n    }\n    /** Static */\n\n\n    static getInstance(element) {\n      return Data.get(element, this.DATA_KEY);\n    }\n\n    static getOrCreateInstance(element, config = {}) {\n      return this.getInstance(element) || new this(element, typeof config === 'object' ? config : null);\n    }\n\n    static get VERSION() {\n      return VERSION;\n    }\n\n    static get NAME() {\n      throw new Error('You have to implement the static method \"NAME\", for each component!');\n    }\n\n    static get DATA_KEY() {\n      return `bs.${this.NAME}`;\n    }\n\n    static get EVENT_KEY() {\n      return `.${this.DATA_KEY}`;\n    }\n\n  }\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): alert.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$c = 'alert';\n  const DATA_KEY$b = 'bs.alert';\n  const EVENT_KEY$b = `.${DATA_KEY$b}`;\n  const DATA_API_KEY$8 = '.data-api';\n  const SELECTOR_DISMISS = '[data-bs-dismiss=\"alert\"]';\n  const EVENT_CLOSE = `close${EVENT_KEY$b}`;\n  const EVENT_CLOSED = `closed${EVENT_KEY$b}`;\n  const EVENT_CLICK_DATA_API$7 = `click${EVENT_KEY$b}${DATA_API_KEY$8}`;\n  const CLASS_NAME_ALERT = 'alert';\n  const CLASS_NAME_FADE$6 = 'fade';\n  const CLASS_NAME_SHOW$9 = 'show';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Alert extends BaseComponent {\n    // Getters\n    static get NAME() {\n      return NAME$c;\n    } // Public\n\n\n    close(element) {\n      const rootElement = element ? this._getRootElement(element) : this._element;\n\n      const customEvent = this._triggerCloseEvent(rootElement);\n\n      if (customEvent === null || customEvent.defaultPrevented) {\n        return;\n      }\n\n      this._removeElement(rootElement);\n    } // Private\n\n\n    _getRootElement(element) {\n      return getElementFromSelector(element) || element.closest(`.${CLASS_NAME_ALERT}`);\n    }\n\n    _triggerCloseEvent(element) {\n      return EventHandler.trigger(element, EVENT_CLOSE);\n    }\n\n    _removeElement(element) {\n      element.classList.remove(CLASS_NAME_SHOW$9);\n      const isAnimated = element.classList.contains(CLASS_NAME_FADE$6);\n\n      this._queueCallback(() => this._destroyElement(element), element, isAnimated);\n    }\n\n    _destroyElement(element) {\n      element.remove();\n      EventHandler.trigger(element, EVENT_CLOSED);\n    } // Static\n\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = Alert.getOrCreateInstance(this);\n\n        if (config === 'close') {\n          data[config](this);\n        }\n      });\n    }\n\n    static handleDismiss(alertInstance) {\n      return function (event) {\n        if (event) {\n          event.preventDefault();\n        }\n\n        alertInstance.close(this);\n      };\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(document, EVENT_CLICK_DATA_API$7, SELECTOR_DISMISS, Alert.handleDismiss(new Alert()));\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Alert to jQuery only if jQuery is present\n   */\n\n  defineJQueryPlugin(Alert);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): button.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$b = 'button';\n  const DATA_KEY$a = 'bs.button';\n  const EVENT_KEY$a = `.${DATA_KEY$a}`;\n  const DATA_API_KEY$7 = '.data-api';\n  const CLASS_NAME_ACTIVE$3 = 'active';\n  const SELECTOR_DATA_TOGGLE$5 = '[data-bs-toggle=\"button\"]';\n  const EVENT_CLICK_DATA_API$6 = `click${EVENT_KEY$a}${DATA_API_KEY$7}`;\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Button extends BaseComponent {\n    // Getters\n    static get NAME() {\n      return NAME$b;\n    } // Public\n\n\n    toggle() {\n      // Toggle class and sync the `aria-pressed` attribute with the return value of the `.toggle()` method\n      this._element.setAttribute('aria-pressed', this._element.classList.toggle(CLASS_NAME_ACTIVE$3));\n    } // Static\n\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = Button.getOrCreateInstance(this);\n\n        if (config === 'toggle') {\n          data[config]();\n        }\n      });\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(document, EVENT_CLICK_DATA_API$6, SELECTOR_DATA_TOGGLE$5, event => {\n    event.preventDefault();\n    const button = event.target.closest(SELECTOR_DATA_TOGGLE$5);\n    const data = Button.getOrCreateInstance(button);\n    data.toggle();\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Button to jQuery only if jQuery is present\n   */\n\n  defineJQueryPlugin(Button);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): dom/manipulator.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  function normalizeData(val) {\n    if (val === 'true') {\n      return true;\n    }\n\n    if (val === 'false') {\n      return false;\n    }\n\n    if (val === Number(val).toString()) {\n      return Number(val);\n    }\n\n    if (val === '' || val === 'null') {\n      return null;\n    }\n\n    return val;\n  }\n\n  function normalizeDataKey(key) {\n    return key.replace(/[A-Z]/g, chr => `-${chr.toLowerCase()}`);\n  }\n\n  const Manipulator = {\n    setDataAttribute(element, key, value) {\n      element.setAttribute(`data-bs-${normalizeDataKey(key)}`, value);\n    },\n\n    removeDataAttribute(element, key) {\n      element.removeAttribute(`data-bs-${normalizeDataKey(key)}`);\n    },\n\n    getDataAttributes(element) {\n      if (!element) {\n        return {};\n      }\n\n      const attributes = {};\n      Object.keys(element.dataset).filter(key => key.startsWith('bs')).forEach(key => {\n        let pureKey = key.replace(/^bs/, '');\n        pureKey = pureKey.charAt(0).toLowerCase() + pureKey.slice(1, pureKey.length);\n        attributes[pureKey] = normalizeData(element.dataset[key]);\n      });\n      return attributes;\n    },\n\n    getDataAttribute(element, key) {\n      return normalizeData(element.getAttribute(`data-bs-${normalizeDataKey(key)}`));\n    },\n\n    offset(element) {\n      const rect = element.getBoundingClientRect();\n      return {\n        top: rect.top + document.body.scrollTop,\n        left: rect.left + document.body.scrollLeft\n      };\n    },\n\n    position(element) {\n      return {\n        top: element.offsetTop,\n        left: element.offsetLeft\n      };\n    }\n\n  };\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): carousel.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$a = 'carousel';\n  const DATA_KEY$9 = 'bs.carousel';\n  const EVENT_KEY$9 = `.${DATA_KEY$9}`;\n  const DATA_API_KEY$6 = '.data-api';\n  const ARROW_LEFT_KEY = 'ArrowLeft';\n  const ARROW_RIGHT_KEY = 'ArrowRight';\n  const TOUCHEVENT_COMPAT_WAIT = 500; // Time for mouse compat events to fire after touch\n\n  const SWIPE_THRESHOLD = 40;\n  const Default$9 = {\n    interval: 5000,\n    keyboard: true,\n    slide: false,\n    pause: 'hover',\n    wrap: true,\n    touch: true\n  };\n  const DefaultType$9 = {\n    interval: '(number|boolean)',\n    keyboard: 'boolean',\n    slide: '(boolean|string)',\n    pause: '(string|boolean)',\n    wrap: 'boolean',\n    touch: 'boolean'\n  };\n  const ORDER_NEXT = 'next';\n  const ORDER_PREV = 'prev';\n  const DIRECTION_LEFT = 'left';\n  const DIRECTION_RIGHT = 'right';\n  const KEY_TO_DIRECTION = {\n    [ARROW_LEFT_KEY]: DIRECTION_RIGHT,\n    [ARROW_RIGHT_KEY]: DIRECTION_LEFT\n  };\n  const EVENT_SLIDE = `slide${EVENT_KEY$9}`;\n  const EVENT_SLID = `slid${EVENT_KEY$9}`;\n  const EVENT_KEYDOWN = `keydown${EVENT_KEY$9}`;\n  const EVENT_MOUSEENTER = `mouseenter${EVENT_KEY$9}`;\n  const EVENT_MOUSELEAVE = `mouseleave${EVENT_KEY$9}`;\n  const EVENT_TOUCHSTART = `touchstart${EVENT_KEY$9}`;\n  const EVENT_TOUCHMOVE = `touchmove${EVENT_KEY$9}`;\n  const EVENT_TOUCHEND = `touchend${EVENT_KEY$9}`;\n  const EVENT_POINTERDOWN = `pointerdown${EVENT_KEY$9}`;\n  const EVENT_POINTERUP = `pointerup${EVENT_KEY$9}`;\n  const EVENT_DRAG_START = `dragstart${EVENT_KEY$9}`;\n  const EVENT_LOAD_DATA_API$2 = `load${EVENT_KEY$9}${DATA_API_KEY$6}`;\n  const EVENT_CLICK_DATA_API$5 = `click${EVENT_KEY$9}${DATA_API_KEY$6}`;\n  const CLASS_NAME_CAROUSEL = 'carousel';\n  const CLASS_NAME_ACTIVE$2 = 'active';\n  const CLASS_NAME_SLIDE = 'slide';\n  const CLASS_NAME_END = 'carousel-item-end';\n  const CLASS_NAME_START = 'carousel-item-start';\n  const CLASS_NAME_NEXT = 'carousel-item-next';\n  const CLASS_NAME_PREV = 'carousel-item-prev';\n  const CLASS_NAME_POINTER_EVENT = 'pointer-event';\n  const SELECTOR_ACTIVE$1 = '.active';\n  const SELECTOR_ACTIVE_ITEM = '.active.carousel-item';\n  const SELECTOR_ITEM = '.carousel-item';\n  const SELECTOR_ITEM_IMG = '.carousel-item img';\n  const SELECTOR_NEXT_PREV = '.carousel-item-next, .carousel-item-prev';\n  const SELECTOR_INDICATORS = '.carousel-indicators';\n  const SELECTOR_INDICATOR = '[data-bs-target]';\n  const SELECTOR_DATA_SLIDE = '[data-bs-slide], [data-bs-slide-to]';\n  const SELECTOR_DATA_RIDE = '[data-bs-ride=\"carousel\"]';\n  const POINTER_TYPE_TOUCH = 'touch';\n  const POINTER_TYPE_PEN = 'pen';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Carousel extends BaseComponent {\n    constructor(element, config) {\n      super(element);\n      this._items = null;\n      this._interval = null;\n      this._activeElement = null;\n      this._isPaused = false;\n      this._isSliding = false;\n      this.touchTimeout = null;\n      this.touchStartX = 0;\n      this.touchDeltaX = 0;\n      this._config = this._getConfig(config);\n      this._indicatorsElement = SelectorEngine.findOne(SELECTOR_INDICATORS, this._element);\n      this._touchSupported = 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0;\n      this._pointerEvent = Boolean(window.PointerEvent);\n\n      this._addEventListeners();\n    } // Getters\n\n\n    static get Default() {\n      return Default$9;\n    }\n\n    static get NAME() {\n      return NAME$a;\n    } // Public\n\n\n    next() {\n      this._slide(ORDER_NEXT);\n    }\n\n    nextWhenVisible() {\n      // Don't call next when the page isn't visible\n      // or the carousel or its parent isn't visible\n      if (!document.hidden && isVisible(this._element)) {\n        this.next();\n      }\n    }\n\n    prev() {\n      this._slide(ORDER_PREV);\n    }\n\n    pause(event) {\n      if (!event) {\n        this._isPaused = true;\n      }\n\n      if (SelectorEngine.findOne(SELECTOR_NEXT_PREV, this._element)) {\n        triggerTransitionEnd(this._element);\n        this.cycle(true);\n      }\n\n      clearInterval(this._interval);\n      this._interval = null;\n    }\n\n    cycle(event) {\n      if (!event) {\n        this._isPaused = false;\n      }\n\n      if (this._interval) {\n        clearInterval(this._interval);\n        this._interval = null;\n      }\n\n      if (this._config && this._config.interval && !this._isPaused) {\n        this._updateInterval();\n\n        this._interval = setInterval((document.visibilityState ? this.nextWhenVisible : this.next).bind(this), this._config.interval);\n      }\n    }\n\n    to(index) {\n      this._activeElement = SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element);\n\n      const activeIndex = this._getItemIndex(this._activeElement);\n\n      if (index > this._items.length - 1 || index < 0) {\n        return;\n      }\n\n      if (this._isSliding) {\n        EventHandler.one(this._element, EVENT_SLID, () => this.to(index));\n        return;\n      }\n\n      if (activeIndex === index) {\n        this.pause();\n        this.cycle();\n        return;\n      }\n\n      const order = index > activeIndex ? ORDER_NEXT : ORDER_PREV;\n\n      this._slide(order, this._items[index]);\n    } // Private\n\n\n    _getConfig(config) {\n      config = { ...Default$9,\n        ...Manipulator.getDataAttributes(this._element),\n        ...(typeof config === 'object' ? config : {})\n      };\n      typeCheckConfig(NAME$a, config, DefaultType$9);\n      return config;\n    }\n\n    _handleSwipe() {\n      const absDeltax = Math.abs(this.touchDeltaX);\n\n      if (absDeltax <= SWIPE_THRESHOLD) {\n        return;\n      }\n\n      const direction = absDeltax / this.touchDeltaX;\n      this.touchDeltaX = 0;\n\n      if (!direction) {\n        return;\n      }\n\n      this._slide(direction > 0 ? DIRECTION_RIGHT : DIRECTION_LEFT);\n    }\n\n    _addEventListeners() {\n      if (this._config.keyboard) {\n        EventHandler.on(this._element, EVENT_KEYDOWN, event => this._keydown(event));\n      }\n\n      if (this._config.pause === 'hover') {\n        EventHandler.on(this._element, EVENT_MOUSEENTER, event => this.pause(event));\n        EventHandler.on(this._element, EVENT_MOUSELEAVE, event => this.cycle(event));\n      }\n\n      if (this._config.touch && this._touchSupported) {\n        this._addTouchEventListeners();\n      }\n    }\n\n    _addTouchEventListeners() {\n      const start = event => {\n        if (this._pointerEvent && (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH)) {\n          this.touchStartX = event.clientX;\n        } else if (!this._pointerEvent) {\n          this.touchStartX = event.touches[0].clientX;\n        }\n      };\n\n      const move = event => {\n        // ensure swiping with one touch and not pinching\n        this.touchDeltaX = event.touches && event.touches.length > 1 ? 0 : event.touches[0].clientX - this.touchStartX;\n      };\n\n      const end = event => {\n        if (this._pointerEvent && (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH)) {\n          this.touchDeltaX = event.clientX - this.touchStartX;\n        }\n\n        this._handleSwipe();\n\n        if (this._config.pause === 'hover') {\n          // If it's a touch-enabled device, mouseenter/leave are fired as\n          // part of the mouse compatibility events on first tap - the carousel\n          // would stop cycling until user tapped out of it;\n          // here, we listen for touchend, explicitly pause the carousel\n          // (as if it's the second time we tap on it, mouseenter compat event\n          // is NOT fired) and after a timeout (to allow for mouse compatibility\n          // events to fire) we explicitly restart cycling\n          this.pause();\n\n          if (this.touchTimeout) {\n            clearTimeout(this.touchTimeout);\n          }\n\n          this.touchTimeout = setTimeout(event => this.cycle(event), TOUCHEVENT_COMPAT_WAIT + this._config.interval);\n        }\n      };\n\n      SelectorEngine.find(SELECTOR_ITEM_IMG, this._element).forEach(itemImg => {\n        EventHandler.on(itemImg, EVENT_DRAG_START, e => e.preventDefault());\n      });\n\n      if (this._pointerEvent) {\n        EventHandler.on(this._element, EVENT_POINTERDOWN, event => start(event));\n        EventHandler.on(this._element, EVENT_POINTERUP, event => end(event));\n\n        this._element.classList.add(CLASS_NAME_POINTER_EVENT);\n      } else {\n        EventHandler.on(this._element, EVENT_TOUCHSTART, event => start(event));\n        EventHandler.on(this._element, EVENT_TOUCHMOVE, event => move(event));\n        EventHandler.on(this._element, EVENT_TOUCHEND, event => end(event));\n      }\n    }\n\n    _keydown(event) {\n      if (/input|textarea/i.test(event.target.tagName)) {\n        return;\n      }\n\n      const direction = KEY_TO_DIRECTION[event.key];\n\n      if (direction) {\n        event.preventDefault();\n\n        this._slide(direction);\n      }\n    }\n\n    _getItemIndex(element) {\n      this._items = element && element.parentNode ? SelectorEngine.find(SELECTOR_ITEM, element.parentNode) : [];\n      return this._items.indexOf(element);\n    }\n\n    _getItemByOrder(order, activeElement) {\n      const isNext = order === ORDER_NEXT;\n      return getNextActiveElement(this._items, activeElement, isNext, this._config.wrap);\n    }\n\n    _triggerSlideEvent(relatedTarget, eventDirectionName) {\n      const targetIndex = this._getItemIndex(relatedTarget);\n\n      const fromIndex = this._getItemIndex(SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element));\n\n      return EventHandler.trigger(this._element, EVENT_SLIDE, {\n        relatedTarget,\n        direction: eventDirectionName,\n        from: fromIndex,\n        to: targetIndex\n      });\n    }\n\n    _setActiveIndicatorElement(element) {\n      if (this._indicatorsElement) {\n        const activeIndicator = SelectorEngine.findOne(SELECTOR_ACTIVE$1, this._indicatorsElement);\n        activeIndicator.classList.remove(CLASS_NAME_ACTIVE$2);\n        activeIndicator.removeAttribute('aria-current');\n        const indicators = SelectorEngine.find(SELECTOR_INDICATOR, this._indicatorsElement);\n\n        for (let i = 0; i < indicators.length; i++) {\n          if (Number.parseInt(indicators[i].getAttribute('data-bs-slide-to'), 10) === this._getItemIndex(element)) {\n            indicators[i].classList.add(CLASS_NAME_ACTIVE$2);\n            indicators[i].setAttribute('aria-current', 'true');\n            break;\n          }\n        }\n      }\n    }\n\n    _updateInterval() {\n      const element = this._activeElement || SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element);\n\n      if (!element) {\n        return;\n      }\n\n      const elementInterval = Number.parseInt(element.getAttribute('data-bs-interval'), 10);\n\n      if (elementInterval) {\n        this._config.defaultInterval = this._config.defaultInterval || this._config.interval;\n        this._config.interval = elementInterval;\n      } else {\n        this._config.interval = this._config.defaultInterval || this._config.interval;\n      }\n    }\n\n    _slide(directionOrOrder, element) {\n      const order = this._directionToOrder(directionOrOrder);\n\n      const activeElement = SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element);\n\n      const activeElementIndex = this._getItemIndex(activeElement);\n\n      const nextElement = element || this._getItemByOrder(order, activeElement);\n\n      const nextElementIndex = this._getItemIndex(nextElement);\n\n      const isCycling = Boolean(this._interval);\n      const isNext = order === ORDER_NEXT;\n      const directionalClassName = isNext ? CLASS_NAME_START : CLASS_NAME_END;\n      const orderClassName = isNext ? CLASS_NAME_NEXT : CLASS_NAME_PREV;\n\n      const eventDirectionName = this._orderToDirection(order);\n\n      if (nextElement && nextElement.classList.contains(CLASS_NAME_ACTIVE$2)) {\n        this._isSliding = false;\n        return;\n      }\n\n      if (this._isSliding) {\n        return;\n      }\n\n      const slideEvent = this._triggerSlideEvent(nextElement, eventDirectionName);\n\n      if (slideEvent.defaultPrevented) {\n        return;\n      }\n\n      if (!activeElement || !nextElement) {\n        // Some weirdness is happening, so we bail\n        return;\n      }\n\n      this._isSliding = true;\n\n      if (isCycling) {\n        this.pause();\n      }\n\n      this._setActiveIndicatorElement(nextElement);\n\n      this._activeElement = nextElement;\n\n      const triggerSlidEvent = () => {\n        EventHandler.trigger(this._element, EVENT_SLID, {\n          relatedTarget: nextElement,\n          direction: eventDirectionName,\n          from: activeElementIndex,\n          to: nextElementIndex\n        });\n      };\n\n      if (this._element.classList.contains(CLASS_NAME_SLIDE)) {\n        nextElement.classList.add(orderClassName);\n        reflow(nextElement);\n        activeElement.classList.add(directionalClassName);\n        nextElement.classList.add(directionalClassName);\n\n        const completeCallBack = () => {\n          nextElement.classList.remove(directionalClassName, orderClassName);\n          nextElement.classList.add(CLASS_NAME_ACTIVE$2);\n          activeElement.classList.remove(CLASS_NAME_ACTIVE$2, orderClassName, directionalClassName);\n          this._isSliding = false;\n          setTimeout(triggerSlidEvent, 0);\n        };\n\n        this._queueCallback(completeCallBack, activeElement, true);\n      } else {\n        activeElement.classList.remove(CLASS_NAME_ACTIVE$2);\n        nextElement.classList.add(CLASS_NAME_ACTIVE$2);\n        this._isSliding = false;\n        triggerSlidEvent();\n      }\n\n      if (isCycling) {\n        this.cycle();\n      }\n    }\n\n    _directionToOrder(direction) {\n      if (![DIRECTION_RIGHT, DIRECTION_LEFT].includes(direction)) {\n        return direction;\n      }\n\n      if (isRTL()) {\n        return direction === DIRECTION_LEFT ? ORDER_PREV : ORDER_NEXT;\n      }\n\n      return direction === DIRECTION_LEFT ? ORDER_NEXT : ORDER_PREV;\n    }\n\n    _orderToDirection(order) {\n      if (![ORDER_NEXT, ORDER_PREV].includes(order)) {\n        return order;\n      }\n\n      if (isRTL()) {\n        return order === ORDER_PREV ? DIRECTION_LEFT : DIRECTION_RIGHT;\n      }\n\n      return order === ORDER_PREV ? DIRECTION_RIGHT : DIRECTION_LEFT;\n    } // Static\n\n\n    static carouselInterface(element, config) {\n      const data = Carousel.getOrCreateInstance(element, config);\n      let {\n        _config\n      } = data;\n\n      if (typeof config === 'object') {\n        _config = { ..._config,\n          ...config\n        };\n      }\n\n      const action = typeof config === 'string' ? config : _config.slide;\n\n      if (typeof config === 'number') {\n        data.to(config);\n      } else if (typeof action === 'string') {\n        if (typeof data[action] === 'undefined') {\n          throw new TypeError(`No method named \"${action}\"`);\n        }\n\n        data[action]();\n      } else if (_config.interval && _config.ride) {\n        data.pause();\n        data.cycle();\n      }\n    }\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        Carousel.carouselInterface(this, config);\n      });\n    }\n\n    static dataApiClickHandler(event) {\n      const target = getElementFromSelector(this);\n\n      if (!target || !target.classList.contains(CLASS_NAME_CAROUSEL)) {\n        return;\n      }\n\n      const config = { ...Manipulator.getDataAttributes(target),\n        ...Manipulator.getDataAttributes(this)\n      };\n      const slideIndex = this.getAttribute('data-bs-slide-to');\n\n      if (slideIndex) {\n        config.interval = false;\n      }\n\n      Carousel.carouselInterface(target, config);\n\n      if (slideIndex) {\n        Carousel.getInstance(target).to(slideIndex);\n      }\n\n      event.preventDefault();\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(document, EVENT_CLICK_DATA_API$5, SELECTOR_DATA_SLIDE, Carousel.dataApiClickHandler);\n  EventHandler.on(window, EVENT_LOAD_DATA_API$2, () => {\n    const carousels = SelectorEngine.find(SELECTOR_DATA_RIDE);\n\n    for (let i = 0, len = carousels.length; i < len; i++) {\n      Carousel.carouselInterface(carousels[i], Carousel.getInstance(carousels[i]));\n    }\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Carousel to jQuery only if jQuery is present\n   */\n\n  defineJQueryPlugin(Carousel);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): collapse.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$9 = 'collapse';\n  const DATA_KEY$8 = 'bs.collapse';\n  const EVENT_KEY$8 = `.${DATA_KEY$8}`;\n  const DATA_API_KEY$5 = '.data-api';\n  const Default$8 = {\n    toggle: true,\n    parent: ''\n  };\n  const DefaultType$8 = {\n    toggle: 'boolean',\n    parent: '(string|element)'\n  };\n  const EVENT_SHOW$5 = `show${EVENT_KEY$8}`;\n  const EVENT_SHOWN$5 = `shown${EVENT_KEY$8}`;\n  const EVENT_HIDE$5 = `hide${EVENT_KEY$8}`;\n  const EVENT_HIDDEN$5 = `hidden${EVENT_KEY$8}`;\n  const EVENT_CLICK_DATA_API$4 = `click${EVENT_KEY$8}${DATA_API_KEY$5}`;\n  const CLASS_NAME_SHOW$8 = 'show';\n  const CLASS_NAME_COLLAPSE = 'collapse';\n  const CLASS_NAME_COLLAPSING = 'collapsing';\n  const CLASS_NAME_COLLAPSED = 'collapsed';\n  const WIDTH = 'width';\n  const HEIGHT = 'height';\n  const SELECTOR_ACTIVES = '.show, .collapsing';\n  const SELECTOR_DATA_TOGGLE$4 = '[data-bs-toggle=\"collapse\"]';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Collapse extends BaseComponent {\n    constructor(element, config) {\n      super(element);\n      this._isTransitioning = false;\n      this._config = this._getConfig(config);\n      this._triggerArray = SelectorEngine.find(`${SELECTOR_DATA_TOGGLE$4}[href=\"#${this._element.id}\"],` + `${SELECTOR_DATA_TOGGLE$4}[data-bs-target=\"#${this._element.id}\"]`);\n      const toggleList = SelectorEngine.find(SELECTOR_DATA_TOGGLE$4);\n\n      for (let i = 0, len = toggleList.length; i < len; i++) {\n        const elem = toggleList[i];\n        const selector = getSelectorFromElement(elem);\n        const filterElement = SelectorEngine.find(selector).filter(foundElem => foundElem === this._element);\n\n        if (selector !== null && filterElement.length) {\n          this._selector = selector;\n\n          this._triggerArray.push(elem);\n        }\n      }\n\n      this._parent = this._config.parent ? this._getParent() : null;\n\n      if (!this._config.parent) {\n        this._addAriaAndCollapsedClass(this._element, this._triggerArray);\n      }\n\n      if (this._config.toggle) {\n        this.toggle();\n      }\n    } // Getters\n\n\n    static get Default() {\n      return Default$8;\n    }\n\n    static get NAME() {\n      return NAME$9;\n    } // Public\n\n\n    toggle() {\n      if (this._element.classList.contains(CLASS_NAME_SHOW$8)) {\n        this.hide();\n      } else {\n        this.show();\n      }\n    }\n\n    show() {\n      if (this._isTransitioning || this._element.classList.contains(CLASS_NAME_SHOW$8)) {\n        return;\n      }\n\n      let actives;\n      let activesData;\n\n      if (this._parent) {\n        actives = SelectorEngine.find(SELECTOR_ACTIVES, this._parent).filter(elem => {\n          if (typeof this._config.parent === 'string') {\n            return elem.getAttribute('data-bs-parent') === this._config.parent;\n          }\n\n          return elem.classList.contains(CLASS_NAME_COLLAPSE);\n        });\n\n        if (actives.length === 0) {\n          actives = null;\n        }\n      }\n\n      const container = SelectorEngine.findOne(this._selector);\n\n      if (actives) {\n        const tempActiveData = actives.find(elem => container !== elem);\n        activesData = tempActiveData ? Collapse.getInstance(tempActiveData) : null;\n\n        if (activesData && activesData._isTransitioning) {\n          return;\n        }\n      }\n\n      const startEvent = EventHandler.trigger(this._element, EVENT_SHOW$5);\n\n      if (startEvent.defaultPrevented) {\n        return;\n      }\n\n      if (actives) {\n        actives.forEach(elemActive => {\n          if (container !== elemActive) {\n            Collapse.collapseInterface(elemActive, 'hide');\n          }\n\n          if (!activesData) {\n            Data.set(elemActive, DATA_KEY$8, null);\n          }\n        });\n      }\n\n      const dimension = this._getDimension();\n\n      this._element.classList.remove(CLASS_NAME_COLLAPSE);\n\n      this._element.classList.add(CLASS_NAME_COLLAPSING);\n\n      this._element.style[dimension] = 0;\n\n      if (this._triggerArray.length) {\n        this._triggerArray.forEach(element => {\n          element.classList.remove(CLASS_NAME_COLLAPSED);\n          element.setAttribute('aria-expanded', true);\n        });\n      }\n\n      this.setTransitioning(true);\n\n      const complete = () => {\n        this._element.classList.remove(CLASS_NAME_COLLAPSING);\n\n        this._element.classList.add(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$8);\n\n        this._element.style[dimension] = '';\n        this.setTransitioning(false);\n        EventHandler.trigger(this._element, EVENT_SHOWN$5);\n      };\n\n      const capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1);\n      const scrollSize = `scroll${capitalizedDimension}`;\n\n      this._queueCallback(complete, this._element, true);\n\n      this._element.style[dimension] = `${this._element[scrollSize]}px`;\n    }\n\n    hide() {\n      if (this._isTransitioning || !this._element.classList.contains(CLASS_NAME_SHOW$8)) {\n        return;\n      }\n\n      const startEvent = EventHandler.trigger(this._element, EVENT_HIDE$5);\n\n      if (startEvent.defaultPrevented) {\n        return;\n      }\n\n      const dimension = this._getDimension();\n\n      this._element.style[dimension] = `${this._element.getBoundingClientRect()[dimension]}px`;\n      reflow(this._element);\n\n      this._element.classList.add(CLASS_NAME_COLLAPSING);\n\n      this._element.classList.remove(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$8);\n\n      const triggerArrayLength = this._triggerArray.length;\n\n      if (triggerArrayLength > 0) {\n        for (let i = 0; i < triggerArrayLength; i++) {\n          const trigger = this._triggerArray[i];\n          const elem = getElementFromSelector(trigger);\n\n          if (elem && !elem.classList.contains(CLASS_NAME_SHOW$8)) {\n            trigger.classList.add(CLASS_NAME_COLLAPSED);\n            trigger.setAttribute('aria-expanded', false);\n          }\n        }\n      }\n\n      this.setTransitioning(true);\n\n      const complete = () => {\n        this.setTransitioning(false);\n\n        this._element.classList.remove(CLASS_NAME_COLLAPSING);\n\n        this._element.classList.add(CLASS_NAME_COLLAPSE);\n\n        EventHandler.trigger(this._element, EVENT_HIDDEN$5);\n      };\n\n      this._element.style[dimension] = '';\n\n      this._queueCallback(complete, this._element, true);\n    }\n\n    setTransitioning(isTransitioning) {\n      this._isTransitioning = isTransitioning;\n    } // Private\n\n\n    _getConfig(config) {\n      config = { ...Default$8,\n        ...config\n      };\n      config.toggle = Boolean(config.toggle); // Coerce string values\n\n      typeCheckConfig(NAME$9, config, DefaultType$8);\n      return config;\n    }\n\n    _getDimension() {\n      return this._element.classList.contains(WIDTH) ? WIDTH : HEIGHT;\n    }\n\n    _getParent() {\n      let {\n        parent\n      } = this._config;\n      parent = getElement(parent);\n      const selector = `${SELECTOR_DATA_TOGGLE$4}[data-bs-parent=\"${parent}\"]`;\n      SelectorEngine.find(selector, parent).forEach(element => {\n        const selected = getElementFromSelector(element);\n\n        this._addAriaAndCollapsedClass(selected, [element]);\n      });\n      return parent;\n    }\n\n    _addAriaAndCollapsedClass(element, triggerArray) {\n      if (!element || !triggerArray.length) {\n        return;\n      }\n\n      const isOpen = element.classList.contains(CLASS_NAME_SHOW$8);\n      triggerArray.forEach(elem => {\n        if (isOpen) {\n          elem.classList.remove(CLASS_NAME_COLLAPSED);\n        } else {\n          elem.classList.add(CLASS_NAME_COLLAPSED);\n        }\n\n        elem.setAttribute('aria-expanded', isOpen);\n      });\n    } // Static\n\n\n    static collapseInterface(element, config) {\n      let data = Collapse.getInstance(element);\n      const _config = { ...Default$8,\n        ...Manipulator.getDataAttributes(element),\n        ...(typeof config === 'object' && config ? config : {})\n      };\n\n      if (!data && _config.toggle && typeof config === 'string' && /show|hide/.test(config)) {\n        _config.toggle = false;\n      }\n\n      if (!data) {\n        data = new Collapse(element, _config);\n      }\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config]();\n      }\n    }\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        Collapse.collapseInterface(this, config);\n      });\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(document, EVENT_CLICK_DATA_API$4, SELECTOR_DATA_TOGGLE$4, function (event) {\n    // preventDefault only for <a> elements (which change the URL) not inside the collapsible element\n    if (event.target.tagName === 'A' || event.delegateTarget && event.delegateTarget.tagName === 'A') {\n      event.preventDefault();\n    }\n\n    const triggerData = Manipulator.getDataAttributes(this);\n    const selector = getSelectorFromElement(this);\n    const selectorElements = SelectorEngine.find(selector);\n    selectorElements.forEach(element => {\n      const data = Collapse.getInstance(element);\n      let config;\n\n      if (data) {\n        // update parent attribute\n        if (data._parent === null && typeof triggerData.parent === 'string') {\n          data._config.parent = triggerData.parent;\n          data._parent = data._getParent();\n        }\n\n        config = 'toggle';\n      } else {\n        config = triggerData;\n      }\n\n      Collapse.collapseInterface(element, config);\n    });\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Collapse to jQuery only if jQuery is present\n   */\n\n  defineJQueryPlugin(Collapse);\n\n  var top = 'top';\n  var bottom = 'bottom';\n  var right = 'right';\n  var left = 'left';\n  var auto = 'auto';\n  var basePlacements = [top, bottom, right, left];\n  var start = 'start';\n  var end = 'end';\n  var clippingParents = 'clippingParents';\n  var viewport = 'viewport';\n  var popper = 'popper';\n  var reference = 'reference';\n  var variationPlacements = /*#__PURE__*/basePlacements.reduce(function (acc, placement) {\n    return acc.concat([placement + \"-\" + start, placement + \"-\" + end]);\n  }, []);\n  var placements = /*#__PURE__*/[].concat(basePlacements, [auto]).reduce(function (acc, placement) {\n    return acc.concat([placement, placement + \"-\" + start, placement + \"-\" + end]);\n  }, []); // modifiers that need to read the DOM\n\n  var beforeRead = 'beforeRead';\n  var read = 'read';\n  var afterRead = 'afterRead'; // pure-logic modifiers\n\n  var beforeMain = 'beforeMain';\n  var main = 'main';\n  var afterMain = 'afterMain'; // modifier with the purpose to write to the DOM (or write into a framework state)\n\n  var beforeWrite = 'beforeWrite';\n  var write = 'write';\n  var afterWrite = 'afterWrite';\n  var modifierPhases = [beforeRead, read, afterRead, beforeMain, main, afterMain, beforeWrite, write, afterWrite];\n\n  function getNodeName(element) {\n    return element ? (element.nodeName || '').toLowerCase() : null;\n  }\n\n  function getWindow(node) {\n    if (node == null) {\n      return window;\n    }\n\n    if (node.toString() !== '[object Window]') {\n      var ownerDocument = node.ownerDocument;\n      return ownerDocument ? ownerDocument.defaultView || window : window;\n    }\n\n    return node;\n  }\n\n  function isElement(node) {\n    var OwnElement = getWindow(node).Element;\n    return node instanceof OwnElement || node instanceof Element;\n  }\n\n  function isHTMLElement(node) {\n    var OwnElement = getWindow(node).HTMLElement;\n    return node instanceof OwnElement || node instanceof HTMLElement;\n  }\n\n  function isShadowRoot(node) {\n    // IE 11 has no ShadowRoot\n    if (typeof ShadowRoot === 'undefined') {\n      return false;\n    }\n\n    var OwnElement = getWindow(node).ShadowRoot;\n    return node instanceof OwnElement || node instanceof ShadowRoot;\n  }\n\n  // and applies them to the HTMLElements such as popper and arrow\n\n  function applyStyles(_ref) {\n    var state = _ref.state;\n    Object.keys(state.elements).forEach(function (name) {\n      var style = state.styles[name] || {};\n      var attributes = state.attributes[name] || {};\n      var element = state.elements[name]; // arrow is optional + virtual elements\n\n      if (!isHTMLElement(element) || !getNodeName(element)) {\n        return;\n      } // Flow doesn't support to extend this property, but it's the most\n      // effective way to apply styles to an HTMLElement\n      // $FlowFixMe[cannot-write]\n\n\n      Object.assign(element.style, style);\n      Object.keys(attributes).forEach(function (name) {\n        var value = attributes[name];\n\n        if (value === false) {\n          element.removeAttribute(name);\n        } else {\n          element.setAttribute(name, value === true ? '' : value);\n        }\n      });\n    });\n  }\n\n  function effect$2(_ref2) {\n    var state = _ref2.state;\n    var initialStyles = {\n      popper: {\n        position: state.options.strategy,\n        left: '0',\n        top: '0',\n        margin: '0'\n      },\n      arrow: {\n        position: 'absolute'\n      },\n      reference: {}\n    };\n    Object.assign(state.elements.popper.style, initialStyles.popper);\n    state.styles = initialStyles;\n\n    if (state.elements.arrow) {\n      Object.assign(state.elements.arrow.style, initialStyles.arrow);\n    }\n\n    return function () {\n      Object.keys(state.elements).forEach(function (name) {\n        var element = state.elements[name];\n        var attributes = state.attributes[name] || {};\n        var styleProperties = Object.keys(state.styles.hasOwnProperty(name) ? state.styles[name] : initialStyles[name]); // Set all values to an empty string to unset them\n\n        var style = styleProperties.reduce(function (style, property) {\n          style[property] = '';\n          return style;\n        }, {}); // arrow is optional + virtual elements\n\n        if (!isHTMLElement(element) || !getNodeName(element)) {\n          return;\n        }\n\n        Object.assign(element.style, style);\n        Object.keys(attributes).forEach(function (attribute) {\n          element.removeAttribute(attribute);\n        });\n      });\n    };\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  var applyStyles$1 = {\n    name: 'applyStyles',\n    enabled: true,\n    phase: 'write',\n    fn: applyStyles,\n    effect: effect$2,\n    requires: ['computeStyles']\n  };\n\n  function getBasePlacement(placement) {\n    return placement.split('-')[0];\n  }\n\n  function getBoundingClientRect(element) {\n    var rect = element.getBoundingClientRect();\n    return {\n      width: rect.width,\n      height: rect.height,\n      top: rect.top,\n      right: rect.right,\n      bottom: rect.bottom,\n      left: rect.left,\n      x: rect.left,\n      y: rect.top\n    };\n  }\n\n  // means it doesn't take into account transforms.\n\n  function getLayoutRect(element) {\n    var clientRect = getBoundingClientRect(element); // Use the clientRect sizes if it's not been transformed.\n    // Fixes https://github.com/popperjs/popper-core/issues/1223\n\n    var width = element.offsetWidth;\n    var height = element.offsetHeight;\n\n    if (Math.abs(clientRect.width - width) <= 1) {\n      width = clientRect.width;\n    }\n\n    if (Math.abs(clientRect.height - height) <= 1) {\n      height = clientRect.height;\n    }\n\n    return {\n      x: element.offsetLeft,\n      y: element.offsetTop,\n      width: width,\n      height: height\n    };\n  }\n\n  function contains(parent, child) {\n    var rootNode = child.getRootNode && child.getRootNode(); // First, attempt with faster native method\n\n    if (parent.contains(child)) {\n      return true;\n    } // then fallback to custom implementation with Shadow DOM support\n    else if (rootNode && isShadowRoot(rootNode)) {\n        var next = child;\n\n        do {\n          if (next && parent.isSameNode(next)) {\n            return true;\n          } // $FlowFixMe[prop-missing]: need a better way to handle this...\n\n\n          next = next.parentNode || next.host;\n        } while (next);\n      } // Give up, the result is false\n\n\n    return false;\n  }\n\n  function getComputedStyle$1(element) {\n    return getWindow(element).getComputedStyle(element);\n  }\n\n  function isTableElement(element) {\n    return ['table', 'td', 'th'].indexOf(getNodeName(element)) >= 0;\n  }\n\n  function getDocumentElement(element) {\n    // $FlowFixMe[incompatible-return]: assume body is always available\n    return ((isElement(element) ? element.ownerDocument : // $FlowFixMe[prop-missing]\n    element.document) || window.document).documentElement;\n  }\n\n  function getParentNode(element) {\n    if (getNodeName(element) === 'html') {\n      return element;\n    }\n\n    return (// this is a quicker (but less type safe) way to save quite some bytes from the bundle\n      // $FlowFixMe[incompatible-return]\n      // $FlowFixMe[prop-missing]\n      element.assignedSlot || // step into the shadow DOM of the parent of a slotted node\n      element.parentNode || ( // DOM Element detected\n      isShadowRoot(element) ? element.host : null) || // ShadowRoot detected\n      // $FlowFixMe[incompatible-call]: HTMLElement is a Node\n      getDocumentElement(element) // fallback\n\n    );\n  }\n\n  function getTrueOffsetParent(element) {\n    if (!isHTMLElement(element) || // https://github.com/popperjs/popper-core/issues/837\n    getComputedStyle$1(element).position === 'fixed') {\n      return null;\n    }\n\n    return element.offsetParent;\n  } // `.offsetParent` reports `null` for fixed elements, while absolute elements\n  // return the containing block\n\n\n  function getContainingBlock(element) {\n    var isFirefox = navigator.userAgent.toLowerCase().indexOf('firefox') !== -1;\n    var isIE = navigator.userAgent.indexOf('Trident') !== -1;\n\n    if (isIE && isHTMLElement(element)) {\n      // In IE 9, 10 and 11 fixed elements containing block is always established by the viewport\n      var elementCss = getComputedStyle$1(element);\n\n      if (elementCss.position === 'fixed') {\n        return null;\n      }\n    }\n\n    var currentNode = getParentNode(element);\n\n    while (isHTMLElement(currentNode) && ['html', 'body'].indexOf(getNodeName(currentNode)) < 0) {\n      var css = getComputedStyle$1(currentNode); // This is non-exhaustive but covers the most common CSS properties that\n      // create a containing block.\n      // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n\n      if (css.transform !== 'none' || css.perspective !== 'none' || css.contain === 'paint' || ['transform', 'perspective'].indexOf(css.willChange) !== -1 || isFirefox && css.willChange === 'filter' || isFirefox && css.filter && css.filter !== 'none') {\n        return currentNode;\n      } else {\n        currentNode = currentNode.parentNode;\n      }\n    }\n\n    return null;\n  } // Gets the closest ancestor positioned element. Handles some edge cases,\n  // such as table ancestors and cross browser bugs.\n\n\n  function getOffsetParent(element) {\n    var window = getWindow(element);\n    var offsetParent = getTrueOffsetParent(element);\n\n    while (offsetParent && isTableElement(offsetParent) && getComputedStyle$1(offsetParent).position === 'static') {\n      offsetParent = getTrueOffsetParent(offsetParent);\n    }\n\n    if (offsetParent && (getNodeName(offsetParent) === 'html' || getNodeName(offsetParent) === 'body' && getComputedStyle$1(offsetParent).position === 'static')) {\n      return window;\n    }\n\n    return offsetParent || getContainingBlock(element) || window;\n  }\n\n  function getMainAxisFromPlacement(placement) {\n    return ['top', 'bottom'].indexOf(placement) >= 0 ? 'x' : 'y';\n  }\n\n  var max = Math.max;\n  var min = Math.min;\n  var round = Math.round;\n\n  function within(min$1, value, max$1) {\n    return max(min$1, min(value, max$1));\n  }\n\n  function getFreshSideObject() {\n    return {\n      top: 0,\n      right: 0,\n      bottom: 0,\n      left: 0\n    };\n  }\n\n  function mergePaddingObject(paddingObject) {\n    return Object.assign({}, getFreshSideObject(), paddingObject);\n  }\n\n  function expandToHashMap(value, keys) {\n    return keys.reduce(function (hashMap, key) {\n      hashMap[key] = value;\n      return hashMap;\n    }, {});\n  }\n\n  var toPaddingObject = function toPaddingObject(padding, state) {\n    padding = typeof padding === 'function' ? padding(Object.assign({}, state.rects, {\n      placement: state.placement\n    })) : padding;\n    return mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));\n  };\n\n  function arrow(_ref) {\n    var _state$modifiersData$;\n\n    var state = _ref.state,\n        name = _ref.name,\n        options = _ref.options;\n    var arrowElement = state.elements.arrow;\n    var popperOffsets = state.modifiersData.popperOffsets;\n    var basePlacement = getBasePlacement(state.placement);\n    var axis = getMainAxisFromPlacement(basePlacement);\n    var isVertical = [left, right].indexOf(basePlacement) >= 0;\n    var len = isVertical ? 'height' : 'width';\n\n    if (!arrowElement || !popperOffsets) {\n      return;\n    }\n\n    var paddingObject = toPaddingObject(options.padding, state);\n    var arrowRect = getLayoutRect(arrowElement);\n    var minProp = axis === 'y' ? top : left;\n    var maxProp = axis === 'y' ? bottom : right;\n    var endDiff = state.rects.reference[len] + state.rects.reference[axis] - popperOffsets[axis] - state.rects.popper[len];\n    var startDiff = popperOffsets[axis] - state.rects.reference[axis];\n    var arrowOffsetParent = getOffsetParent(arrowElement);\n    var clientSize = arrowOffsetParent ? axis === 'y' ? arrowOffsetParent.clientHeight || 0 : arrowOffsetParent.clientWidth || 0 : 0;\n    var centerToReference = endDiff / 2 - startDiff / 2; // Make sure the arrow doesn't overflow the popper if the center point is\n    // outside of the popper bounds\n\n    var min = paddingObject[minProp];\n    var max = clientSize - arrowRect[len] - paddingObject[maxProp];\n    var center = clientSize / 2 - arrowRect[len] / 2 + centerToReference;\n    var offset = within(min, center, max); // Prevents breaking syntax highlighting...\n\n    var axisProp = axis;\n    state.modifiersData[name] = (_state$modifiersData$ = {}, _state$modifiersData$[axisProp] = offset, _state$modifiersData$.centerOffset = offset - center, _state$modifiersData$);\n  }\n\n  function effect$1(_ref2) {\n    var state = _ref2.state,\n        options = _ref2.options;\n    var _options$element = options.element,\n        arrowElement = _options$element === void 0 ? '[data-popper-arrow]' : _options$element;\n\n    if (arrowElement == null) {\n      return;\n    } // CSS selector\n\n\n    if (typeof arrowElement === 'string') {\n      arrowElement = state.elements.popper.querySelector(arrowElement);\n\n      if (!arrowElement) {\n        return;\n      }\n    }\n\n    if (!contains(state.elements.popper, arrowElement)) {\n\n      return;\n    }\n\n    state.elements.arrow = arrowElement;\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  var arrow$1 = {\n    name: 'arrow',\n    enabled: true,\n    phase: 'main',\n    fn: arrow,\n    effect: effect$1,\n    requires: ['popperOffsets'],\n    requiresIfExists: ['preventOverflow']\n  };\n\n  var unsetSides = {\n    top: 'auto',\n    right: 'auto',\n    bottom: 'auto',\n    left: 'auto'\n  }; // Round the offsets to the nearest suitable subpixel based on the DPR.\n  // Zooming can change the DPR, but it seems to report a value that will\n  // cleanly divide the values into the appropriate subpixels.\n\n  function roundOffsetsByDPR(_ref) {\n    var x = _ref.x,\n        y = _ref.y;\n    var win = window;\n    var dpr = win.devicePixelRatio || 1;\n    return {\n      x: round(round(x * dpr) / dpr) || 0,\n      y: round(round(y * dpr) / dpr) || 0\n    };\n  }\n\n  function mapToStyles(_ref2) {\n    var _Object$assign2;\n\n    var popper = _ref2.popper,\n        popperRect = _ref2.popperRect,\n        placement = _ref2.placement,\n        offsets = _ref2.offsets,\n        position = _ref2.position,\n        gpuAcceleration = _ref2.gpuAcceleration,\n        adaptive = _ref2.adaptive,\n        roundOffsets = _ref2.roundOffsets;\n\n    var _ref3 = roundOffsets === true ? roundOffsetsByDPR(offsets) : typeof roundOffsets === 'function' ? roundOffsets(offsets) : offsets,\n        _ref3$x = _ref3.x,\n        x = _ref3$x === void 0 ? 0 : _ref3$x,\n        _ref3$y = _ref3.y,\n        y = _ref3$y === void 0 ? 0 : _ref3$y;\n\n    var hasX = offsets.hasOwnProperty('x');\n    var hasY = offsets.hasOwnProperty('y');\n    var sideX = left;\n    var sideY = top;\n    var win = window;\n\n    if (adaptive) {\n      var offsetParent = getOffsetParent(popper);\n      var heightProp = 'clientHeight';\n      var widthProp = 'clientWidth';\n\n      if (offsetParent === getWindow(popper)) {\n        offsetParent = getDocumentElement(popper);\n\n        if (getComputedStyle$1(offsetParent).position !== 'static') {\n          heightProp = 'scrollHeight';\n          widthProp = 'scrollWidth';\n        }\n      } // $FlowFixMe[incompatible-cast]: force type refinement, we compare offsetParent with window above, but Flow doesn't detect it\n\n\n      offsetParent = offsetParent;\n\n      if (placement === top) {\n        sideY = bottom; // $FlowFixMe[prop-missing]\n\n        y -= offsetParent[heightProp] - popperRect.height;\n        y *= gpuAcceleration ? 1 : -1;\n      }\n\n      if (placement === left) {\n        sideX = right; // $FlowFixMe[prop-missing]\n\n        x -= offsetParent[widthProp] - popperRect.width;\n        x *= gpuAcceleration ? 1 : -1;\n      }\n    }\n\n    var commonStyles = Object.assign({\n      position: position\n    }, adaptive && unsetSides);\n\n    if (gpuAcceleration) {\n      var _Object$assign;\n\n      return Object.assign({}, commonStyles, (_Object$assign = {}, _Object$assign[sideY] = hasY ? '0' : '', _Object$assign[sideX] = hasX ? '0' : '', _Object$assign.transform = (win.devicePixelRatio || 1) < 2 ? \"translate(\" + x + \"px, \" + y + \"px)\" : \"translate3d(\" + x + \"px, \" + y + \"px, 0)\", _Object$assign));\n    }\n\n    return Object.assign({}, commonStyles, (_Object$assign2 = {}, _Object$assign2[sideY] = hasY ? y + \"px\" : '', _Object$assign2[sideX] = hasX ? x + \"px\" : '', _Object$assign2.transform = '', _Object$assign2));\n  }\n\n  function computeStyles(_ref4) {\n    var state = _ref4.state,\n        options = _ref4.options;\n    var _options$gpuAccelerat = options.gpuAcceleration,\n        gpuAcceleration = _options$gpuAccelerat === void 0 ? true : _options$gpuAccelerat,\n        _options$adaptive = options.adaptive,\n        adaptive = _options$adaptive === void 0 ? true : _options$adaptive,\n        _options$roundOffsets = options.roundOffsets,\n        roundOffsets = _options$roundOffsets === void 0 ? true : _options$roundOffsets;\n\n    var commonStyles = {\n      placement: getBasePlacement(state.placement),\n      popper: state.elements.popper,\n      popperRect: state.rects.popper,\n      gpuAcceleration: gpuAcceleration\n    };\n\n    if (state.modifiersData.popperOffsets != null) {\n      state.styles.popper = Object.assign({}, state.styles.popper, mapToStyles(Object.assign({}, commonStyles, {\n        offsets: state.modifiersData.popperOffsets,\n        position: state.options.strategy,\n        adaptive: adaptive,\n        roundOffsets: roundOffsets\n      })));\n    }\n\n    if (state.modifiersData.arrow != null) {\n      state.styles.arrow = Object.assign({}, state.styles.arrow, mapToStyles(Object.assign({}, commonStyles, {\n        offsets: state.modifiersData.arrow,\n        position: 'absolute',\n        adaptive: false,\n        roundOffsets: roundOffsets\n      })));\n    }\n\n    state.attributes.popper = Object.assign({}, state.attributes.popper, {\n      'data-popper-placement': state.placement\n    });\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  var computeStyles$1 = {\n    name: 'computeStyles',\n    enabled: true,\n    phase: 'beforeWrite',\n    fn: computeStyles,\n    data: {}\n  };\n\n  var passive = {\n    passive: true\n  };\n\n  function effect(_ref) {\n    var state = _ref.state,\n        instance = _ref.instance,\n        options = _ref.options;\n    var _options$scroll = options.scroll,\n        scroll = _options$scroll === void 0 ? true : _options$scroll,\n        _options$resize = options.resize,\n        resize = _options$resize === void 0 ? true : _options$resize;\n    var window = getWindow(state.elements.popper);\n    var scrollParents = [].concat(state.scrollParents.reference, state.scrollParents.popper);\n\n    if (scroll) {\n      scrollParents.forEach(function (scrollParent) {\n        scrollParent.addEventListener('scroll', instance.update, passive);\n      });\n    }\n\n    if (resize) {\n      window.addEventListener('resize', instance.update, passive);\n    }\n\n    return function () {\n      if (scroll) {\n        scrollParents.forEach(function (scrollParent) {\n          scrollParent.removeEventListener('scroll', instance.update, passive);\n        });\n      }\n\n      if (resize) {\n        window.removeEventListener('resize', instance.update, passive);\n      }\n    };\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  var eventListeners = {\n    name: 'eventListeners',\n    enabled: true,\n    phase: 'write',\n    fn: function fn() {},\n    effect: effect,\n    data: {}\n  };\n\n  var hash$1 = {\n    left: 'right',\n    right: 'left',\n    bottom: 'top',\n    top: 'bottom'\n  };\n  function getOppositePlacement(placement) {\n    return placement.replace(/left|right|bottom|top/g, function (matched) {\n      return hash$1[matched];\n    });\n  }\n\n  var hash = {\n    start: 'end',\n    end: 'start'\n  };\n  function getOppositeVariationPlacement(placement) {\n    return placement.replace(/start|end/g, function (matched) {\n      return hash[matched];\n    });\n  }\n\n  function getWindowScroll(node) {\n    var win = getWindow(node);\n    var scrollLeft = win.pageXOffset;\n    var scrollTop = win.pageYOffset;\n    return {\n      scrollLeft: scrollLeft,\n      scrollTop: scrollTop\n    };\n  }\n\n  function getWindowScrollBarX(element) {\n    // If <html> has a CSS width greater than the viewport, then this will be\n    // incorrect for RTL.\n    // Popper 1 is broken in this case and never had a bug report so let's assume\n    // it's not an issue. I don't think anyone ever specifies width on <html>\n    // anyway.\n    // Browsers where the left scrollbar doesn't cause an issue report `0` for\n    // this (e.g. Edge 2019, IE11, Safari)\n    return getBoundingClientRect(getDocumentElement(element)).left + getWindowScroll(element).scrollLeft;\n  }\n\n  function getViewportRect(element) {\n    var win = getWindow(element);\n    var html = getDocumentElement(element);\n    var visualViewport = win.visualViewport;\n    var width = html.clientWidth;\n    var height = html.clientHeight;\n    var x = 0;\n    var y = 0; // NB: This isn't supported on iOS <= 12. If the keyboard is open, the popper\n    // can be obscured underneath it.\n    // Also, `html.clientHeight` adds the bottom bar height in Safari iOS, even\n    // if it isn't open, so if this isn't available, the popper will be detected\n    // to overflow the bottom of the screen too early.\n\n    if (visualViewport) {\n      width = visualViewport.width;\n      height = visualViewport.height; // Uses Layout Viewport (like Chrome; Safari does not currently)\n      // In Chrome, it returns a value very close to 0 (+/-) but contains rounding\n      // errors due to floating point numbers, so we need to check precision.\n      // Safari returns a number <= 0, usually < -1 when pinch-zoomed\n      // Feature detection fails in mobile emulation mode in Chrome.\n      // Math.abs(win.innerWidth / visualViewport.scale - visualViewport.width) <\n      // 0.001\n      // Fallback here: \"Not Safari\" userAgent\n\n      if (!/^((?!chrome|android).)*safari/i.test(navigator.userAgent)) {\n        x = visualViewport.offsetLeft;\n        y = visualViewport.offsetTop;\n      }\n    }\n\n    return {\n      width: width,\n      height: height,\n      x: x + getWindowScrollBarX(element),\n      y: y\n    };\n  }\n\n  // of the `<html>` and `<body>` rect bounds if horizontally scrollable\n\n  function getDocumentRect(element) {\n    var _element$ownerDocumen;\n\n    var html = getDocumentElement(element);\n    var winScroll = getWindowScroll(element);\n    var body = (_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body;\n    var width = max(html.scrollWidth, html.clientWidth, body ? body.scrollWidth : 0, body ? body.clientWidth : 0);\n    var height = max(html.scrollHeight, html.clientHeight, body ? body.scrollHeight : 0, body ? body.clientHeight : 0);\n    var x = -winScroll.scrollLeft + getWindowScrollBarX(element);\n    var y = -winScroll.scrollTop;\n\n    if (getComputedStyle$1(body || html).direction === 'rtl') {\n      x += max(html.clientWidth, body ? body.clientWidth : 0) - width;\n    }\n\n    return {\n      width: width,\n      height: height,\n      x: x,\n      y: y\n    };\n  }\n\n  function isScrollParent(element) {\n    // Firefox wants us to check `-x` and `-y` variations as well\n    var _getComputedStyle = getComputedStyle$1(element),\n        overflow = _getComputedStyle.overflow,\n        overflowX = _getComputedStyle.overflowX,\n        overflowY = _getComputedStyle.overflowY;\n\n    return /auto|scroll|overlay|hidden/.test(overflow + overflowY + overflowX);\n  }\n\n  function getScrollParent(node) {\n    if (['html', 'body', '#document'].indexOf(getNodeName(node)) >= 0) {\n      // $FlowFixMe[incompatible-return]: assume body is always available\n      return node.ownerDocument.body;\n    }\n\n    if (isHTMLElement(node) && isScrollParent(node)) {\n      return node;\n    }\n\n    return getScrollParent(getParentNode(node));\n  }\n\n  /*\n  given a DOM element, return the list of all scroll parents, up the list of ancesors\n  until we get to the top window object. This list is what we attach scroll listeners\n  to, because if any of these parent elements scroll, we'll need to re-calculate the\n  reference element's position.\n  */\n\n  function listScrollParents(element, list) {\n    var _element$ownerDocumen;\n\n    if (list === void 0) {\n      list = [];\n    }\n\n    var scrollParent = getScrollParent(element);\n    var isBody = scrollParent === ((_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body);\n    var win = getWindow(scrollParent);\n    var target = isBody ? [win].concat(win.visualViewport || [], isScrollParent(scrollParent) ? scrollParent : []) : scrollParent;\n    var updatedList = list.concat(target);\n    return isBody ? updatedList : // $FlowFixMe[incompatible-call]: isBody tells us target will be an HTMLElement here\n    updatedList.concat(listScrollParents(getParentNode(target)));\n  }\n\n  function rectToClientRect(rect) {\n    return Object.assign({}, rect, {\n      left: rect.x,\n      top: rect.y,\n      right: rect.x + rect.width,\n      bottom: rect.y + rect.height\n    });\n  }\n\n  function getInnerBoundingClientRect(element) {\n    var rect = getBoundingClientRect(element);\n    rect.top = rect.top + element.clientTop;\n    rect.left = rect.left + element.clientLeft;\n    rect.bottom = rect.top + element.clientHeight;\n    rect.right = rect.left + element.clientWidth;\n    rect.width = element.clientWidth;\n    rect.height = element.clientHeight;\n    rect.x = rect.left;\n    rect.y = rect.top;\n    return rect;\n  }\n\n  function getClientRectFromMixedType(element, clippingParent) {\n    return clippingParent === viewport ? rectToClientRect(getViewportRect(element)) : isHTMLElement(clippingParent) ? getInnerBoundingClientRect(clippingParent) : rectToClientRect(getDocumentRect(getDocumentElement(element)));\n  } // A \"clipping parent\" is an overflowable container with the characteristic of\n  // clipping (or hiding) overflowing elements with a position different from\n  // `initial`\n\n\n  function getClippingParents(element) {\n    var clippingParents = listScrollParents(getParentNode(element));\n    var canEscapeClipping = ['absolute', 'fixed'].indexOf(getComputedStyle$1(element).position) >= 0;\n    var clipperElement = canEscapeClipping && isHTMLElement(element) ? getOffsetParent(element) : element;\n\n    if (!isElement(clipperElement)) {\n      return [];\n    } // $FlowFixMe[incompatible-return]: https://github.com/facebook/flow/issues/1414\n\n\n    return clippingParents.filter(function (clippingParent) {\n      return isElement(clippingParent) && contains(clippingParent, clipperElement) && getNodeName(clippingParent) !== 'body';\n    });\n  } // Gets the maximum area that the element is visible in due to any number of\n  // clipping parents\n\n\n  function getClippingRect(element, boundary, rootBoundary) {\n    var mainClippingParents = boundary === 'clippingParents' ? getClippingParents(element) : [].concat(boundary);\n    var clippingParents = [].concat(mainClippingParents, [rootBoundary]);\n    var firstClippingParent = clippingParents[0];\n    var clippingRect = clippingParents.reduce(function (accRect, clippingParent) {\n      var rect = getClientRectFromMixedType(element, clippingParent);\n      accRect.top = max(rect.top, accRect.top);\n      accRect.right = min(rect.right, accRect.right);\n      accRect.bottom = min(rect.bottom, accRect.bottom);\n      accRect.left = max(rect.left, accRect.left);\n      return accRect;\n    }, getClientRectFromMixedType(element, firstClippingParent));\n    clippingRect.width = clippingRect.right - clippingRect.left;\n    clippingRect.height = clippingRect.bottom - clippingRect.top;\n    clippingRect.x = clippingRect.left;\n    clippingRect.y = clippingRect.top;\n    return clippingRect;\n  }\n\n  function getVariation(placement) {\n    return placement.split('-')[1];\n  }\n\n  function computeOffsets(_ref) {\n    var reference = _ref.reference,\n        element = _ref.element,\n        placement = _ref.placement;\n    var basePlacement = placement ? getBasePlacement(placement) : null;\n    var variation = placement ? getVariation(placement) : null;\n    var commonX = reference.x + reference.width / 2 - element.width / 2;\n    var commonY = reference.y + reference.height / 2 - element.height / 2;\n    var offsets;\n\n    switch (basePlacement) {\n      case top:\n        offsets = {\n          x: commonX,\n          y: reference.y - element.height\n        };\n        break;\n\n      case bottom:\n        offsets = {\n          x: commonX,\n          y: reference.y + reference.height\n        };\n        break;\n\n      case right:\n        offsets = {\n          x: reference.x + reference.width,\n          y: commonY\n        };\n        break;\n\n      case left:\n        offsets = {\n          x: reference.x - element.width,\n          y: commonY\n        };\n        break;\n\n      default:\n        offsets = {\n          x: reference.x,\n          y: reference.y\n        };\n    }\n\n    var mainAxis = basePlacement ? getMainAxisFromPlacement(basePlacement) : null;\n\n    if (mainAxis != null) {\n      var len = mainAxis === 'y' ? 'height' : 'width';\n\n      switch (variation) {\n        case start:\n          offsets[mainAxis] = offsets[mainAxis] - (reference[len] / 2 - element[len] / 2);\n          break;\n\n        case end:\n          offsets[mainAxis] = offsets[mainAxis] + (reference[len] / 2 - element[len] / 2);\n          break;\n      }\n    }\n\n    return offsets;\n  }\n\n  function detectOverflow(state, options) {\n    if (options === void 0) {\n      options = {};\n    }\n\n    var _options = options,\n        _options$placement = _options.placement,\n        placement = _options$placement === void 0 ? state.placement : _options$placement,\n        _options$boundary = _options.boundary,\n        boundary = _options$boundary === void 0 ? clippingParents : _options$boundary,\n        _options$rootBoundary = _options.rootBoundary,\n        rootBoundary = _options$rootBoundary === void 0 ? viewport : _options$rootBoundary,\n        _options$elementConte = _options.elementContext,\n        elementContext = _options$elementConte === void 0 ? popper : _options$elementConte,\n        _options$altBoundary = _options.altBoundary,\n        altBoundary = _options$altBoundary === void 0 ? false : _options$altBoundary,\n        _options$padding = _options.padding,\n        padding = _options$padding === void 0 ? 0 : _options$padding;\n    var paddingObject = mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));\n    var altContext = elementContext === popper ? reference : popper;\n    var referenceElement = state.elements.reference;\n    var popperRect = state.rects.popper;\n    var element = state.elements[altBoundary ? altContext : elementContext];\n    var clippingClientRect = getClippingRect(isElement(element) ? element : element.contextElement || getDocumentElement(state.elements.popper), boundary, rootBoundary);\n    var referenceClientRect = getBoundingClientRect(referenceElement);\n    var popperOffsets = computeOffsets({\n      reference: referenceClientRect,\n      element: popperRect,\n      strategy: 'absolute',\n      placement: placement\n    });\n    var popperClientRect = rectToClientRect(Object.assign({}, popperRect, popperOffsets));\n    var elementClientRect = elementContext === popper ? popperClientRect : referenceClientRect; // positive = overflowing the clipping rect\n    // 0 or negative = within the clipping rect\n\n    var overflowOffsets = {\n      top: clippingClientRect.top - elementClientRect.top + paddingObject.top,\n      bottom: elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom,\n      left: clippingClientRect.left - elementClientRect.left + paddingObject.left,\n      right: elementClientRect.right - clippingClientRect.right + paddingObject.right\n    };\n    var offsetData = state.modifiersData.offset; // Offsets can be applied only to the popper element\n\n    if (elementContext === popper && offsetData) {\n      var offset = offsetData[placement];\n      Object.keys(overflowOffsets).forEach(function (key) {\n        var multiply = [right, bottom].indexOf(key) >= 0 ? 1 : -1;\n        var axis = [top, bottom].indexOf(key) >= 0 ? 'y' : 'x';\n        overflowOffsets[key] += offset[axis] * multiply;\n      });\n    }\n\n    return overflowOffsets;\n  }\n\n  function computeAutoPlacement(state, options) {\n    if (options === void 0) {\n      options = {};\n    }\n\n    var _options = options,\n        placement = _options.placement,\n        boundary = _options.boundary,\n        rootBoundary = _options.rootBoundary,\n        padding = _options.padding,\n        flipVariations = _options.flipVariations,\n        _options$allowedAutoP = _options.allowedAutoPlacements,\n        allowedAutoPlacements = _options$allowedAutoP === void 0 ? placements : _options$allowedAutoP;\n    var variation = getVariation(placement);\n    var placements$1 = variation ? flipVariations ? variationPlacements : variationPlacements.filter(function (placement) {\n      return getVariation(placement) === variation;\n    }) : basePlacements;\n    var allowedPlacements = placements$1.filter(function (placement) {\n      return allowedAutoPlacements.indexOf(placement) >= 0;\n    });\n\n    if (allowedPlacements.length === 0) {\n      allowedPlacements = placements$1;\n    } // $FlowFixMe[incompatible-type]: Flow seems to have problems with two array unions...\n\n\n    var overflows = allowedPlacements.reduce(function (acc, placement) {\n      acc[placement] = detectOverflow(state, {\n        placement: placement,\n        boundary: boundary,\n        rootBoundary: rootBoundary,\n        padding: padding\n      })[getBasePlacement(placement)];\n      return acc;\n    }, {});\n    return Object.keys(overflows).sort(function (a, b) {\n      return overflows[a] - overflows[b];\n    });\n  }\n\n  function getExpandedFallbackPlacements(placement) {\n    if (getBasePlacement(placement) === auto) {\n      return [];\n    }\n\n    var oppositePlacement = getOppositePlacement(placement);\n    return [getOppositeVariationPlacement(placement), oppositePlacement, getOppositeVariationPlacement(oppositePlacement)];\n  }\n\n  function flip(_ref) {\n    var state = _ref.state,\n        options = _ref.options,\n        name = _ref.name;\n\n    if (state.modifiersData[name]._skip) {\n      return;\n    }\n\n    var _options$mainAxis = options.mainAxis,\n        checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\n        _options$altAxis = options.altAxis,\n        checkAltAxis = _options$altAxis === void 0 ? true : _options$altAxis,\n        specifiedFallbackPlacements = options.fallbackPlacements,\n        padding = options.padding,\n        boundary = options.boundary,\n        rootBoundary = options.rootBoundary,\n        altBoundary = options.altBoundary,\n        _options$flipVariatio = options.flipVariations,\n        flipVariations = _options$flipVariatio === void 0 ? true : _options$flipVariatio,\n        allowedAutoPlacements = options.allowedAutoPlacements;\n    var preferredPlacement = state.options.placement;\n    var basePlacement = getBasePlacement(preferredPlacement);\n    var isBasePlacement = basePlacement === preferredPlacement;\n    var fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipVariations ? [getOppositePlacement(preferredPlacement)] : getExpandedFallbackPlacements(preferredPlacement));\n    var placements = [preferredPlacement].concat(fallbackPlacements).reduce(function (acc, placement) {\n      return acc.concat(getBasePlacement(placement) === auto ? computeAutoPlacement(state, {\n        placement: placement,\n        boundary: boundary,\n        rootBoundary: rootBoundary,\n        padding: padding,\n        flipVariations: flipVariations,\n        allowedAutoPlacements: allowedAutoPlacements\n      }) : placement);\n    }, []);\n    var referenceRect = state.rects.reference;\n    var popperRect = state.rects.popper;\n    var checksMap = new Map();\n    var makeFallbackChecks = true;\n    var firstFittingPlacement = placements[0];\n\n    for (var i = 0; i < placements.length; i++) {\n      var placement = placements[i];\n\n      var _basePlacement = getBasePlacement(placement);\n\n      var isStartVariation = getVariation(placement) === start;\n      var isVertical = [top, bottom].indexOf(_basePlacement) >= 0;\n      var len = isVertical ? 'width' : 'height';\n      var overflow = detectOverflow(state, {\n        placement: placement,\n        boundary: boundary,\n        rootBoundary: rootBoundary,\n        altBoundary: altBoundary,\n        padding: padding\n      });\n      var mainVariationSide = isVertical ? isStartVariation ? right : left : isStartVariation ? bottom : top;\n\n      if (referenceRect[len] > popperRect[len]) {\n        mainVariationSide = getOppositePlacement(mainVariationSide);\n      }\n\n      var altVariationSide = getOppositePlacement(mainVariationSide);\n      var checks = [];\n\n      if (checkMainAxis) {\n        checks.push(overflow[_basePlacement] <= 0);\n      }\n\n      if (checkAltAxis) {\n        checks.push(overflow[mainVariationSide] <= 0, overflow[altVariationSide] <= 0);\n      }\n\n      if (checks.every(function (check) {\n        return check;\n      })) {\n        firstFittingPlacement = placement;\n        makeFallbackChecks = false;\n        break;\n      }\n\n      checksMap.set(placement, checks);\n    }\n\n    if (makeFallbackChecks) {\n      // `2` may be desired in some cases – research later\n      var numberOfChecks = flipVariations ? 3 : 1;\n\n      var _loop = function _loop(_i) {\n        var fittingPlacement = placements.find(function (placement) {\n          var checks = checksMap.get(placement);\n\n          if (checks) {\n            return checks.slice(0, _i).every(function (check) {\n              return check;\n            });\n          }\n        });\n\n        if (fittingPlacement) {\n          firstFittingPlacement = fittingPlacement;\n          return \"break\";\n        }\n      };\n\n      for (var _i = numberOfChecks; _i > 0; _i--) {\n        var _ret = _loop(_i);\n\n        if (_ret === \"break\") break;\n      }\n    }\n\n    if (state.placement !== firstFittingPlacement) {\n      state.modifiersData[name]._skip = true;\n      state.placement = firstFittingPlacement;\n      state.reset = true;\n    }\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  var flip$1 = {\n    name: 'flip',\n    enabled: true,\n    phase: 'main',\n    fn: flip,\n    requiresIfExists: ['offset'],\n    data: {\n      _skip: false\n    }\n  };\n\n  function getSideOffsets(overflow, rect, preventedOffsets) {\n    if (preventedOffsets === void 0) {\n      preventedOffsets = {\n        x: 0,\n        y: 0\n      };\n    }\n\n    return {\n      top: overflow.top - rect.height - preventedOffsets.y,\n      right: overflow.right - rect.width + preventedOffsets.x,\n      bottom: overflow.bottom - rect.height + preventedOffsets.y,\n      left: overflow.left - rect.width - preventedOffsets.x\n    };\n  }\n\n  function isAnySideFullyClipped(overflow) {\n    return [top, right, bottom, left].some(function (side) {\n      return overflow[side] >= 0;\n    });\n  }\n\n  function hide(_ref) {\n    var state = _ref.state,\n        name = _ref.name;\n    var referenceRect = state.rects.reference;\n    var popperRect = state.rects.popper;\n    var preventedOffsets = state.modifiersData.preventOverflow;\n    var referenceOverflow = detectOverflow(state, {\n      elementContext: 'reference'\n    });\n    var popperAltOverflow = detectOverflow(state, {\n      altBoundary: true\n    });\n    var referenceClippingOffsets = getSideOffsets(referenceOverflow, referenceRect);\n    var popperEscapeOffsets = getSideOffsets(popperAltOverflow, popperRect, preventedOffsets);\n    var isReferenceHidden = isAnySideFullyClipped(referenceClippingOffsets);\n    var hasPopperEscaped = isAnySideFullyClipped(popperEscapeOffsets);\n    state.modifiersData[name] = {\n      referenceClippingOffsets: referenceClippingOffsets,\n      popperEscapeOffsets: popperEscapeOffsets,\n      isReferenceHidden: isReferenceHidden,\n      hasPopperEscaped: hasPopperEscaped\n    };\n    state.attributes.popper = Object.assign({}, state.attributes.popper, {\n      'data-popper-reference-hidden': isReferenceHidden,\n      'data-popper-escaped': hasPopperEscaped\n    });\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  var hide$1 = {\n    name: 'hide',\n    enabled: true,\n    phase: 'main',\n    requiresIfExists: ['preventOverflow'],\n    fn: hide\n  };\n\n  function distanceAndSkiddingToXY(placement, rects, offset) {\n    var basePlacement = getBasePlacement(placement);\n    var invertDistance = [left, top].indexOf(basePlacement) >= 0 ? -1 : 1;\n\n    var _ref = typeof offset === 'function' ? offset(Object.assign({}, rects, {\n      placement: placement\n    })) : offset,\n        skidding = _ref[0],\n        distance = _ref[1];\n\n    skidding = skidding || 0;\n    distance = (distance || 0) * invertDistance;\n    return [left, right].indexOf(basePlacement) >= 0 ? {\n      x: distance,\n      y: skidding\n    } : {\n      x: skidding,\n      y: distance\n    };\n  }\n\n  function offset(_ref2) {\n    var state = _ref2.state,\n        options = _ref2.options,\n        name = _ref2.name;\n    var _options$offset = options.offset,\n        offset = _options$offset === void 0 ? [0, 0] : _options$offset;\n    var data = placements.reduce(function (acc, placement) {\n      acc[placement] = distanceAndSkiddingToXY(placement, state.rects, offset);\n      return acc;\n    }, {});\n    var _data$state$placement = data[state.placement],\n        x = _data$state$placement.x,\n        y = _data$state$placement.y;\n\n    if (state.modifiersData.popperOffsets != null) {\n      state.modifiersData.popperOffsets.x += x;\n      state.modifiersData.popperOffsets.y += y;\n    }\n\n    state.modifiersData[name] = data;\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  var offset$1 = {\n    name: 'offset',\n    enabled: true,\n    phase: 'main',\n    requires: ['popperOffsets'],\n    fn: offset\n  };\n\n  function popperOffsets(_ref) {\n    var state = _ref.state,\n        name = _ref.name;\n    // Offsets are the actual position the popper needs to have to be\n    // properly positioned near its reference element\n    // This is the most basic placement, and will be adjusted by\n    // the modifiers in the next step\n    state.modifiersData[name] = computeOffsets({\n      reference: state.rects.reference,\n      element: state.rects.popper,\n      strategy: 'absolute',\n      placement: state.placement\n    });\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  var popperOffsets$1 = {\n    name: 'popperOffsets',\n    enabled: true,\n    phase: 'read',\n    fn: popperOffsets,\n    data: {}\n  };\n\n  function getAltAxis(axis) {\n    return axis === 'x' ? 'y' : 'x';\n  }\n\n  function preventOverflow(_ref) {\n    var state = _ref.state,\n        options = _ref.options,\n        name = _ref.name;\n    var _options$mainAxis = options.mainAxis,\n        checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\n        _options$altAxis = options.altAxis,\n        checkAltAxis = _options$altAxis === void 0 ? false : _options$altAxis,\n        boundary = options.boundary,\n        rootBoundary = options.rootBoundary,\n        altBoundary = options.altBoundary,\n        padding = options.padding,\n        _options$tether = options.tether,\n        tether = _options$tether === void 0 ? true : _options$tether,\n        _options$tetherOffset = options.tetherOffset,\n        tetherOffset = _options$tetherOffset === void 0 ? 0 : _options$tetherOffset;\n    var overflow = detectOverflow(state, {\n      boundary: boundary,\n      rootBoundary: rootBoundary,\n      padding: padding,\n      altBoundary: altBoundary\n    });\n    var basePlacement = getBasePlacement(state.placement);\n    var variation = getVariation(state.placement);\n    var isBasePlacement = !variation;\n    var mainAxis = getMainAxisFromPlacement(basePlacement);\n    var altAxis = getAltAxis(mainAxis);\n    var popperOffsets = state.modifiersData.popperOffsets;\n    var referenceRect = state.rects.reference;\n    var popperRect = state.rects.popper;\n    var tetherOffsetValue = typeof tetherOffset === 'function' ? tetherOffset(Object.assign({}, state.rects, {\n      placement: state.placement\n    })) : tetherOffset;\n    var data = {\n      x: 0,\n      y: 0\n    };\n\n    if (!popperOffsets) {\n      return;\n    }\n\n    if (checkMainAxis || checkAltAxis) {\n      var mainSide = mainAxis === 'y' ? top : left;\n      var altSide = mainAxis === 'y' ? bottom : right;\n      var len = mainAxis === 'y' ? 'height' : 'width';\n      var offset = popperOffsets[mainAxis];\n      var min$1 = popperOffsets[mainAxis] + overflow[mainSide];\n      var max$1 = popperOffsets[mainAxis] - overflow[altSide];\n      var additive = tether ? -popperRect[len] / 2 : 0;\n      var minLen = variation === start ? referenceRect[len] : popperRect[len];\n      var maxLen = variation === start ? -popperRect[len] : -referenceRect[len]; // We need to include the arrow in the calculation so the arrow doesn't go\n      // outside the reference bounds\n\n      var arrowElement = state.elements.arrow;\n      var arrowRect = tether && arrowElement ? getLayoutRect(arrowElement) : {\n        width: 0,\n        height: 0\n      };\n      var arrowPaddingObject = state.modifiersData['arrow#persistent'] ? state.modifiersData['arrow#persistent'].padding : getFreshSideObject();\n      var arrowPaddingMin = arrowPaddingObject[mainSide];\n      var arrowPaddingMax = arrowPaddingObject[altSide]; // If the reference length is smaller than the arrow length, we don't want\n      // to include its full size in the calculation. If the reference is small\n      // and near the edge of a boundary, the popper can overflow even if the\n      // reference is not overflowing as well (e.g. virtual elements with no\n      // width or height)\n\n      var arrowLen = within(0, referenceRect[len], arrowRect[len]);\n      var minOffset = isBasePlacement ? referenceRect[len] / 2 - additive - arrowLen - arrowPaddingMin - tetherOffsetValue : minLen - arrowLen - arrowPaddingMin - tetherOffsetValue;\n      var maxOffset = isBasePlacement ? -referenceRect[len] / 2 + additive + arrowLen + arrowPaddingMax + tetherOffsetValue : maxLen + arrowLen + arrowPaddingMax + tetherOffsetValue;\n      var arrowOffsetParent = state.elements.arrow && getOffsetParent(state.elements.arrow);\n      var clientOffset = arrowOffsetParent ? mainAxis === 'y' ? arrowOffsetParent.clientTop || 0 : arrowOffsetParent.clientLeft || 0 : 0;\n      var offsetModifierValue = state.modifiersData.offset ? state.modifiersData.offset[state.placement][mainAxis] : 0;\n      var tetherMin = popperOffsets[mainAxis] + minOffset - offsetModifierValue - clientOffset;\n      var tetherMax = popperOffsets[mainAxis] + maxOffset - offsetModifierValue;\n\n      if (checkMainAxis) {\n        var preventedOffset = within(tether ? min(min$1, tetherMin) : min$1, offset, tether ? max(max$1, tetherMax) : max$1);\n        popperOffsets[mainAxis] = preventedOffset;\n        data[mainAxis] = preventedOffset - offset;\n      }\n\n      if (checkAltAxis) {\n        var _mainSide = mainAxis === 'x' ? top : left;\n\n        var _altSide = mainAxis === 'x' ? bottom : right;\n\n        var _offset = popperOffsets[altAxis];\n\n        var _min = _offset + overflow[_mainSide];\n\n        var _max = _offset - overflow[_altSide];\n\n        var _preventedOffset = within(tether ? min(_min, tetherMin) : _min, _offset, tether ? max(_max, tetherMax) : _max);\n\n        popperOffsets[altAxis] = _preventedOffset;\n        data[altAxis] = _preventedOffset - _offset;\n      }\n    }\n\n    state.modifiersData[name] = data;\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  var preventOverflow$1 = {\n    name: 'preventOverflow',\n    enabled: true,\n    phase: 'main',\n    fn: preventOverflow,\n    requiresIfExists: ['offset']\n  };\n\n  function getHTMLElementScroll(element) {\n    return {\n      scrollLeft: element.scrollLeft,\n      scrollTop: element.scrollTop\n    };\n  }\n\n  function getNodeScroll(node) {\n    if (node === getWindow(node) || !isHTMLElement(node)) {\n      return getWindowScroll(node);\n    } else {\n      return getHTMLElementScroll(node);\n    }\n  }\n\n  // Composite means it takes into account transforms as well as layout.\n\n  function getCompositeRect(elementOrVirtualElement, offsetParent, isFixed) {\n    if (isFixed === void 0) {\n      isFixed = false;\n    }\n\n    var documentElement = getDocumentElement(offsetParent);\n    var rect = getBoundingClientRect(elementOrVirtualElement);\n    var isOffsetParentAnElement = isHTMLElement(offsetParent);\n    var scroll = {\n      scrollLeft: 0,\n      scrollTop: 0\n    };\n    var offsets = {\n      x: 0,\n      y: 0\n    };\n\n    if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {\n      if (getNodeName(offsetParent) !== 'body' || // https://github.com/popperjs/popper-core/issues/1078\n      isScrollParent(documentElement)) {\n        scroll = getNodeScroll(offsetParent);\n      }\n\n      if (isHTMLElement(offsetParent)) {\n        offsets = getBoundingClientRect(offsetParent);\n        offsets.x += offsetParent.clientLeft;\n        offsets.y += offsetParent.clientTop;\n      } else if (documentElement) {\n        offsets.x = getWindowScrollBarX(documentElement);\n      }\n    }\n\n    return {\n      x: rect.left + scroll.scrollLeft - offsets.x,\n      y: rect.top + scroll.scrollTop - offsets.y,\n      width: rect.width,\n      height: rect.height\n    };\n  }\n\n  function order(modifiers) {\n    var map = new Map();\n    var visited = new Set();\n    var result = [];\n    modifiers.forEach(function (modifier) {\n      map.set(modifier.name, modifier);\n    }); // On visiting object, check for its dependencies and visit them recursively\n\n    function sort(modifier) {\n      visited.add(modifier.name);\n      var requires = [].concat(modifier.requires || [], modifier.requiresIfExists || []);\n      requires.forEach(function (dep) {\n        if (!visited.has(dep)) {\n          var depModifier = map.get(dep);\n\n          if (depModifier) {\n            sort(depModifier);\n          }\n        }\n      });\n      result.push(modifier);\n    }\n\n    modifiers.forEach(function (modifier) {\n      if (!visited.has(modifier.name)) {\n        // check for visited object\n        sort(modifier);\n      }\n    });\n    return result;\n  }\n\n  function orderModifiers(modifiers) {\n    // order based on dependencies\n    var orderedModifiers = order(modifiers); // order based on phase\n\n    return modifierPhases.reduce(function (acc, phase) {\n      return acc.concat(orderedModifiers.filter(function (modifier) {\n        return modifier.phase === phase;\n      }));\n    }, []);\n  }\n\n  function debounce(fn) {\n    var pending;\n    return function () {\n      if (!pending) {\n        pending = new Promise(function (resolve) {\n          Promise.resolve().then(function () {\n            pending = undefined;\n            resolve(fn());\n          });\n        });\n      }\n\n      return pending;\n    };\n  }\n\n  function mergeByName(modifiers) {\n    var merged = modifiers.reduce(function (merged, current) {\n      var existing = merged[current.name];\n      merged[current.name] = existing ? Object.assign({}, existing, current, {\n        options: Object.assign({}, existing.options, current.options),\n        data: Object.assign({}, existing.data, current.data)\n      }) : current;\n      return merged;\n    }, {}); // IE11 does not support Object.values\n\n    return Object.keys(merged).map(function (key) {\n      return merged[key];\n    });\n  }\n\n  var DEFAULT_OPTIONS = {\n    placement: 'bottom',\n    modifiers: [],\n    strategy: 'absolute'\n  };\n\n  function areValidElements() {\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    return !args.some(function (element) {\n      return !(element && typeof element.getBoundingClientRect === 'function');\n    });\n  }\n\n  function popperGenerator(generatorOptions) {\n    if (generatorOptions === void 0) {\n      generatorOptions = {};\n    }\n\n    var _generatorOptions = generatorOptions,\n        _generatorOptions$def = _generatorOptions.defaultModifiers,\n        defaultModifiers = _generatorOptions$def === void 0 ? [] : _generatorOptions$def,\n        _generatorOptions$def2 = _generatorOptions.defaultOptions,\n        defaultOptions = _generatorOptions$def2 === void 0 ? DEFAULT_OPTIONS : _generatorOptions$def2;\n    return function createPopper(reference, popper, options) {\n      if (options === void 0) {\n        options = defaultOptions;\n      }\n\n      var state = {\n        placement: 'bottom',\n        orderedModifiers: [],\n        options: Object.assign({}, DEFAULT_OPTIONS, defaultOptions),\n        modifiersData: {},\n        elements: {\n          reference: reference,\n          popper: popper\n        },\n        attributes: {},\n        styles: {}\n      };\n      var effectCleanupFns = [];\n      var isDestroyed = false;\n      var instance = {\n        state: state,\n        setOptions: function setOptions(options) {\n          cleanupModifierEffects();\n          state.options = Object.assign({}, defaultOptions, state.options, options);\n          state.scrollParents = {\n            reference: isElement(reference) ? listScrollParents(reference) : reference.contextElement ? listScrollParents(reference.contextElement) : [],\n            popper: listScrollParents(popper)\n          }; // Orders the modifiers based on their dependencies and `phase`\n          // properties\n\n          var orderedModifiers = orderModifiers(mergeByName([].concat(defaultModifiers, state.options.modifiers))); // Strip out disabled modifiers\n\n          state.orderedModifiers = orderedModifiers.filter(function (m) {\n            return m.enabled;\n          }); // Validate the provided modifiers so that the consumer will get warned\n\n          runModifierEffects();\n          return instance.update();\n        },\n        // Sync update – it will always be executed, even if not necessary. This\n        // is useful for low frequency updates where sync behavior simplifies the\n        // logic.\n        // For high frequency updates (e.g. `resize` and `scroll` events), always\n        // prefer the async Popper#update method\n        forceUpdate: function forceUpdate() {\n          if (isDestroyed) {\n            return;\n          }\n\n          var _state$elements = state.elements,\n              reference = _state$elements.reference,\n              popper = _state$elements.popper; // Don't proceed if `reference` or `popper` are not valid elements\n          // anymore\n\n          if (!areValidElements(reference, popper)) {\n\n            return;\n          } // Store the reference and popper rects to be read by modifiers\n\n\n          state.rects = {\n            reference: getCompositeRect(reference, getOffsetParent(popper), state.options.strategy === 'fixed'),\n            popper: getLayoutRect(popper)\n          }; // Modifiers have the ability to reset the current update cycle. The\n          // most common use case for this is the `flip` modifier changing the\n          // placement, which then needs to re-run all the modifiers, because the\n          // logic was previously ran for the previous placement and is therefore\n          // stale/incorrect\n\n          state.reset = false;\n          state.placement = state.options.placement; // On each update cycle, the `modifiersData` property for each modifier\n          // is filled with the initial data specified by the modifier. This means\n          // it doesn't persist and is fresh on each update.\n          // To ensure persistent data, use `${name}#persistent`\n\n          state.orderedModifiers.forEach(function (modifier) {\n            return state.modifiersData[modifier.name] = Object.assign({}, modifier.data);\n          });\n\n          for (var index = 0; index < state.orderedModifiers.length; index++) {\n\n            if (state.reset === true) {\n              state.reset = false;\n              index = -1;\n              continue;\n            }\n\n            var _state$orderedModifie = state.orderedModifiers[index],\n                fn = _state$orderedModifie.fn,\n                _state$orderedModifie2 = _state$orderedModifie.options,\n                _options = _state$orderedModifie2 === void 0 ? {} : _state$orderedModifie2,\n                name = _state$orderedModifie.name;\n\n            if (typeof fn === 'function') {\n              state = fn({\n                state: state,\n                options: _options,\n                name: name,\n                instance: instance\n              }) || state;\n            }\n          }\n        },\n        // Async and optimistically optimized update – it will not be executed if\n        // not necessary (debounced to run at most once-per-tick)\n        update: debounce(function () {\n          return new Promise(function (resolve) {\n            instance.forceUpdate();\n            resolve(state);\n          });\n        }),\n        destroy: function destroy() {\n          cleanupModifierEffects();\n          isDestroyed = true;\n        }\n      };\n\n      if (!areValidElements(reference, popper)) {\n\n        return instance;\n      }\n\n      instance.setOptions(options).then(function (state) {\n        if (!isDestroyed && options.onFirstUpdate) {\n          options.onFirstUpdate(state);\n        }\n      }); // Modifiers have the ability to execute arbitrary code before the first\n      // update cycle runs. They will be executed in the same order as the update\n      // cycle. This is useful when a modifier adds some persistent data that\n      // other modifiers need to use, but the modifier is run after the dependent\n      // one.\n\n      function runModifierEffects() {\n        state.orderedModifiers.forEach(function (_ref3) {\n          var name = _ref3.name,\n              _ref3$options = _ref3.options,\n              options = _ref3$options === void 0 ? {} : _ref3$options,\n              effect = _ref3.effect;\n\n          if (typeof effect === 'function') {\n            var cleanupFn = effect({\n              state: state,\n              name: name,\n              instance: instance,\n              options: options\n            });\n\n            var noopFn = function noopFn() {};\n\n            effectCleanupFns.push(cleanupFn || noopFn);\n          }\n        });\n      }\n\n      function cleanupModifierEffects() {\n        effectCleanupFns.forEach(function (fn) {\n          return fn();\n        });\n        effectCleanupFns = [];\n      }\n\n      return instance;\n    };\n  }\n  var createPopper$2 = /*#__PURE__*/popperGenerator(); // eslint-disable-next-line import/no-unused-modules\n\n  var defaultModifiers$1 = [eventListeners, popperOffsets$1, computeStyles$1, applyStyles$1];\n  var createPopper$1 = /*#__PURE__*/popperGenerator({\n    defaultModifiers: defaultModifiers$1\n  }); // eslint-disable-next-line import/no-unused-modules\n\n  var defaultModifiers = [eventListeners, popperOffsets$1, computeStyles$1, applyStyles$1, offset$1, flip$1, preventOverflow$1, arrow$1, hide$1];\n  var createPopper = /*#__PURE__*/popperGenerator({\n    defaultModifiers: defaultModifiers\n  }); // eslint-disable-next-line import/no-unused-modules\n\n  var Popper = /*#__PURE__*/Object.freeze({\n    __proto__: null,\n    popperGenerator: popperGenerator,\n    detectOverflow: detectOverflow,\n    createPopperBase: createPopper$2,\n    createPopper: createPopper,\n    createPopperLite: createPopper$1,\n    top: top,\n    bottom: bottom,\n    right: right,\n    left: left,\n    auto: auto,\n    basePlacements: basePlacements,\n    start: start,\n    end: end,\n    clippingParents: clippingParents,\n    viewport: viewport,\n    popper: popper,\n    reference: reference,\n    variationPlacements: variationPlacements,\n    placements: placements,\n    beforeRead: beforeRead,\n    read: read,\n    afterRead: afterRead,\n    beforeMain: beforeMain,\n    main: main,\n    afterMain: afterMain,\n    beforeWrite: beforeWrite,\n    write: write,\n    afterWrite: afterWrite,\n    modifierPhases: modifierPhases,\n    applyStyles: applyStyles$1,\n    arrow: arrow$1,\n    computeStyles: computeStyles$1,\n    eventListeners: eventListeners,\n    flip: flip$1,\n    hide: hide$1,\n    offset: offset$1,\n    popperOffsets: popperOffsets$1,\n    preventOverflow: preventOverflow$1\n  });\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): dropdown.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$8 = 'dropdown';\n  const DATA_KEY$7 = 'bs.dropdown';\n  const EVENT_KEY$7 = `.${DATA_KEY$7}`;\n  const DATA_API_KEY$4 = '.data-api';\n  const ESCAPE_KEY$2 = 'Escape';\n  const SPACE_KEY = 'Space';\n  const TAB_KEY = 'Tab';\n  const ARROW_UP_KEY = 'ArrowUp';\n  const ARROW_DOWN_KEY = 'ArrowDown';\n  const RIGHT_MOUSE_BUTTON = 2; // MouseEvent.button value for the secondary button, usually the right button\n\n  const REGEXP_KEYDOWN = new RegExp(`${ARROW_UP_KEY}|${ARROW_DOWN_KEY}|${ESCAPE_KEY$2}`);\n  const EVENT_HIDE$4 = `hide${EVENT_KEY$7}`;\n  const EVENT_HIDDEN$4 = `hidden${EVENT_KEY$7}`;\n  const EVENT_SHOW$4 = `show${EVENT_KEY$7}`;\n  const EVENT_SHOWN$4 = `shown${EVENT_KEY$7}`;\n  const EVENT_CLICK = `click${EVENT_KEY$7}`;\n  const EVENT_CLICK_DATA_API$3 = `click${EVENT_KEY$7}${DATA_API_KEY$4}`;\n  const EVENT_KEYDOWN_DATA_API = `keydown${EVENT_KEY$7}${DATA_API_KEY$4}`;\n  const EVENT_KEYUP_DATA_API = `keyup${EVENT_KEY$7}${DATA_API_KEY$4}`;\n  const CLASS_NAME_SHOW$7 = 'show';\n  const CLASS_NAME_DROPUP = 'dropup';\n  const CLASS_NAME_DROPEND = 'dropend';\n  const CLASS_NAME_DROPSTART = 'dropstart';\n  const CLASS_NAME_NAVBAR = 'navbar';\n  const SELECTOR_DATA_TOGGLE$3 = '[data-bs-toggle=\"dropdown\"]';\n  const SELECTOR_MENU = '.dropdown-menu';\n  const SELECTOR_NAVBAR_NAV = '.navbar-nav';\n  const SELECTOR_VISIBLE_ITEMS = '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)';\n  const PLACEMENT_TOP = isRTL() ? 'top-end' : 'top-start';\n  const PLACEMENT_TOPEND = isRTL() ? 'top-start' : 'top-end';\n  const PLACEMENT_BOTTOM = isRTL() ? 'bottom-end' : 'bottom-start';\n  const PLACEMENT_BOTTOMEND = isRTL() ? 'bottom-start' : 'bottom-end';\n  const PLACEMENT_RIGHT = isRTL() ? 'left-start' : 'right-start';\n  const PLACEMENT_LEFT = isRTL() ? 'right-start' : 'left-start';\n  const Default$7 = {\n    offset: [0, 2],\n    boundary: 'clippingParents',\n    reference: 'toggle',\n    display: 'dynamic',\n    popperConfig: null,\n    autoClose: true\n  };\n  const DefaultType$7 = {\n    offset: '(array|string|function)',\n    boundary: '(string|element)',\n    reference: '(string|element|object)',\n    display: 'string',\n    popperConfig: '(null|object|function)',\n    autoClose: '(boolean|string)'\n  };\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Dropdown extends BaseComponent {\n    constructor(element, config) {\n      super(element);\n      this._popper = null;\n      this._config = this._getConfig(config);\n      this._menu = this._getMenuElement();\n      this._inNavbar = this._detectNavbar();\n\n      this._addEventListeners();\n    } // Getters\n\n\n    static get Default() {\n      return Default$7;\n    }\n\n    static get DefaultType() {\n      return DefaultType$7;\n    }\n\n    static get NAME() {\n      return NAME$8;\n    } // Public\n\n\n    toggle() {\n      if (isDisabled(this._element)) {\n        return;\n      }\n\n      const isActive = this._element.classList.contains(CLASS_NAME_SHOW$7);\n\n      if (isActive) {\n        this.hide();\n        return;\n      }\n\n      this.show();\n    }\n\n    show() {\n      if (isDisabled(this._element) || this._menu.classList.contains(CLASS_NAME_SHOW$7)) {\n        return;\n      }\n\n      const parent = Dropdown.getParentFromElement(this._element);\n      const relatedTarget = {\n        relatedTarget: this._element\n      };\n      const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$4, relatedTarget);\n\n      if (showEvent.defaultPrevented) {\n        return;\n      } // Totally disable Popper for Dropdowns in Navbar\n\n\n      if (this._inNavbar) {\n        Manipulator.setDataAttribute(this._menu, 'popper', 'none');\n      } else {\n        if (typeof Popper === 'undefined') {\n          throw new TypeError('Bootstrap\\'s dropdowns require Popper (https://popper.js.org)');\n        }\n\n        let referenceElement = this._element;\n\n        if (this._config.reference === 'parent') {\n          referenceElement = parent;\n        } else if (isElement$1(this._config.reference)) {\n          referenceElement = getElement(this._config.reference);\n        } else if (typeof this._config.reference === 'object') {\n          referenceElement = this._config.reference;\n        }\n\n        const popperConfig = this._getPopperConfig();\n\n        const isDisplayStatic = popperConfig.modifiers.find(modifier => modifier.name === 'applyStyles' && modifier.enabled === false);\n        this._popper = createPopper(referenceElement, this._menu, popperConfig);\n\n        if (isDisplayStatic) {\n          Manipulator.setDataAttribute(this._menu, 'popper', 'static');\n        }\n      } // If this is a touch-enabled device we add extra\n      // empty mouseover listeners to the body's immediate children;\n      // only needed because of broken event delegation on iOS\n      // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n\n\n      if ('ontouchstart' in document.documentElement && !parent.closest(SELECTOR_NAVBAR_NAV)) {\n        [].concat(...document.body.children).forEach(elem => EventHandler.on(elem, 'mouseover', noop));\n      }\n\n      this._element.focus();\n\n      this._element.setAttribute('aria-expanded', true);\n\n      this._menu.classList.toggle(CLASS_NAME_SHOW$7);\n\n      this._element.classList.toggle(CLASS_NAME_SHOW$7);\n\n      EventHandler.trigger(this._element, EVENT_SHOWN$4, relatedTarget);\n    }\n\n    hide() {\n      if (isDisabled(this._element) || !this._menu.classList.contains(CLASS_NAME_SHOW$7)) {\n        return;\n      }\n\n      const relatedTarget = {\n        relatedTarget: this._element\n      };\n\n      this._completeHide(relatedTarget);\n    }\n\n    dispose() {\n      if (this._popper) {\n        this._popper.destroy();\n      }\n\n      super.dispose();\n    }\n\n    update() {\n      this._inNavbar = this._detectNavbar();\n\n      if (this._popper) {\n        this._popper.update();\n      }\n    } // Private\n\n\n    _addEventListeners() {\n      EventHandler.on(this._element, EVENT_CLICK, event => {\n        event.preventDefault();\n        this.toggle();\n      });\n    }\n\n    _completeHide(relatedTarget) {\n      const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$4, relatedTarget);\n\n      if (hideEvent.defaultPrevented) {\n        return;\n      } // If this is a touch-enabled device we remove the extra\n      // empty mouseover listeners we added for iOS support\n\n\n      if ('ontouchstart' in document.documentElement) {\n        [].concat(...document.body.children).forEach(elem => EventHandler.off(elem, 'mouseover', noop));\n      }\n\n      if (this._popper) {\n        this._popper.destroy();\n      }\n\n      this._menu.classList.remove(CLASS_NAME_SHOW$7);\n\n      this._element.classList.remove(CLASS_NAME_SHOW$7);\n\n      this._element.setAttribute('aria-expanded', 'false');\n\n      Manipulator.removeDataAttribute(this._menu, 'popper');\n      EventHandler.trigger(this._element, EVENT_HIDDEN$4, relatedTarget);\n    }\n\n    _getConfig(config) {\n      config = { ...this.constructor.Default,\n        ...Manipulator.getDataAttributes(this._element),\n        ...config\n      };\n      typeCheckConfig(NAME$8, config, this.constructor.DefaultType);\n\n      if (typeof config.reference === 'object' && !isElement$1(config.reference) && typeof config.reference.getBoundingClientRect !== 'function') {\n        // Popper virtual elements require a getBoundingClientRect method\n        throw new TypeError(`${NAME$8.toUpperCase()}: Option \"reference\" provided type \"object\" without a required \"getBoundingClientRect\" method.`);\n      }\n\n      return config;\n    }\n\n    _getMenuElement() {\n      return SelectorEngine.next(this._element, SELECTOR_MENU)[0];\n    }\n\n    _getPlacement() {\n      const parentDropdown = this._element.parentNode;\n\n      if (parentDropdown.classList.contains(CLASS_NAME_DROPEND)) {\n        return PLACEMENT_RIGHT;\n      }\n\n      if (parentDropdown.classList.contains(CLASS_NAME_DROPSTART)) {\n        return PLACEMENT_LEFT;\n      } // We need to trim the value because custom properties can also include spaces\n\n\n      const isEnd = getComputedStyle(this._menu).getPropertyValue('--bs-position').trim() === 'end';\n\n      if (parentDropdown.classList.contains(CLASS_NAME_DROPUP)) {\n        return isEnd ? PLACEMENT_TOPEND : PLACEMENT_TOP;\n      }\n\n      return isEnd ? PLACEMENT_BOTTOMEND : PLACEMENT_BOTTOM;\n    }\n\n    _detectNavbar() {\n      return this._element.closest(`.${CLASS_NAME_NAVBAR}`) !== null;\n    }\n\n    _getOffset() {\n      const {\n        offset\n      } = this._config;\n\n      if (typeof offset === 'string') {\n        return offset.split(',').map(val => Number.parseInt(val, 10));\n      }\n\n      if (typeof offset === 'function') {\n        return popperData => offset(popperData, this._element);\n      }\n\n      return offset;\n    }\n\n    _getPopperConfig() {\n      const defaultBsPopperConfig = {\n        placement: this._getPlacement(),\n        modifiers: [{\n          name: 'preventOverflow',\n          options: {\n            boundary: this._config.boundary\n          }\n        }, {\n          name: 'offset',\n          options: {\n            offset: this._getOffset()\n          }\n        }]\n      }; // Disable Popper if we have a static display\n\n      if (this._config.display === 'static') {\n        defaultBsPopperConfig.modifiers = [{\n          name: 'applyStyles',\n          enabled: false\n        }];\n      }\n\n      return { ...defaultBsPopperConfig,\n        ...(typeof this._config.popperConfig === 'function' ? this._config.popperConfig(defaultBsPopperConfig) : this._config.popperConfig)\n      };\n    }\n\n    _selectMenuItem({\n      key,\n      target\n    }) {\n      const items = SelectorEngine.find(SELECTOR_VISIBLE_ITEMS, this._menu).filter(isVisible);\n\n      if (!items.length) {\n        return;\n      } // if target isn't included in items (e.g. when expanding the dropdown)\n      // allow cycling to get the last item in case key equals ARROW_UP_KEY\n\n\n      getNextActiveElement(items, target, key === ARROW_DOWN_KEY, !items.includes(target)).focus();\n    } // Static\n\n\n    static dropdownInterface(element, config) {\n      const data = Dropdown.getOrCreateInstance(element, config);\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config]();\n      }\n    }\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        Dropdown.dropdownInterface(this, config);\n      });\n    }\n\n    static clearMenus(event) {\n      if (event && (event.button === RIGHT_MOUSE_BUTTON || event.type === 'keyup' && event.key !== TAB_KEY)) {\n        return;\n      }\n\n      const toggles = SelectorEngine.find(SELECTOR_DATA_TOGGLE$3);\n\n      for (let i = 0, len = toggles.length; i < len; i++) {\n        const context = Dropdown.getInstance(toggles[i]);\n\n        if (!context || context._config.autoClose === false) {\n          continue;\n        }\n\n        if (!context._element.classList.contains(CLASS_NAME_SHOW$7)) {\n          continue;\n        }\n\n        const relatedTarget = {\n          relatedTarget: context._element\n        };\n\n        if (event) {\n          const composedPath = event.composedPath();\n          const isMenuTarget = composedPath.includes(context._menu);\n\n          if (composedPath.includes(context._element) || context._config.autoClose === 'inside' && !isMenuTarget || context._config.autoClose === 'outside' && isMenuTarget) {\n            continue;\n          } // Tab navigation through the dropdown menu or events from contained inputs shouldn't close the menu\n\n\n          if (context._menu.contains(event.target) && (event.type === 'keyup' && event.key === TAB_KEY || /input|select|option|textarea|form/i.test(event.target.tagName))) {\n            continue;\n          }\n\n          if (event.type === 'click') {\n            relatedTarget.clickEvent = event;\n          }\n        }\n\n        context._completeHide(relatedTarget);\n      }\n    }\n\n    static getParentFromElement(element) {\n      return getElementFromSelector(element) || element.parentNode;\n    }\n\n    static dataApiKeydownHandler(event) {\n      // If not input/textarea:\n      //  - And not a key in REGEXP_KEYDOWN => not a dropdown command\n      // If input/textarea:\n      //  - If space key => not a dropdown command\n      //  - If key is other than escape\n      //    - If key is not up or down => not a dropdown command\n      //    - If trigger inside the menu => not a dropdown command\n      if (/input|textarea/i.test(event.target.tagName) ? event.key === SPACE_KEY || event.key !== ESCAPE_KEY$2 && (event.key !== ARROW_DOWN_KEY && event.key !== ARROW_UP_KEY || event.target.closest(SELECTOR_MENU)) : !REGEXP_KEYDOWN.test(event.key)) {\n        return;\n      }\n\n      const isActive = this.classList.contains(CLASS_NAME_SHOW$7);\n\n      if (!isActive && event.key === ESCAPE_KEY$2) {\n        return;\n      }\n\n      event.preventDefault();\n      event.stopPropagation();\n\n      if (isDisabled(this)) {\n        return;\n      }\n\n      const getToggleButton = () => this.matches(SELECTOR_DATA_TOGGLE$3) ? this : SelectorEngine.prev(this, SELECTOR_DATA_TOGGLE$3)[0];\n\n      if (event.key === ESCAPE_KEY$2) {\n        getToggleButton().focus();\n        Dropdown.clearMenus();\n        return;\n      }\n\n      if (event.key === ARROW_UP_KEY || event.key === ARROW_DOWN_KEY) {\n        if (!isActive) {\n          getToggleButton().click();\n        }\n\n        Dropdown.getInstance(getToggleButton())._selectMenuItem(event);\n\n        return;\n      }\n\n      if (!isActive || event.key === SPACE_KEY) {\n        Dropdown.clearMenus();\n      }\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_DATA_TOGGLE$3, Dropdown.dataApiKeydownHandler);\n  EventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown.dataApiKeydownHandler);\n  EventHandler.on(document, EVENT_CLICK_DATA_API$3, Dropdown.clearMenus);\n  EventHandler.on(document, EVENT_KEYUP_DATA_API, Dropdown.clearMenus);\n  EventHandler.on(document, EVENT_CLICK_DATA_API$3, SELECTOR_DATA_TOGGLE$3, function (event) {\n    event.preventDefault();\n    Dropdown.dropdownInterface(this);\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Dropdown to jQuery only if jQuery is present\n   */\n\n  defineJQueryPlugin(Dropdown);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): util/scrollBar.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  const SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top';\n  const SELECTOR_STICKY_CONTENT = '.sticky-top';\n\n  class ScrollBarHelper {\n    constructor() {\n      this._element = document.body;\n    }\n\n    getWidth() {\n      // https://developer.mozilla.org/en-US/docs/Web/API/Window/innerWidth#usage_notes\n      const documentWidth = document.documentElement.clientWidth;\n      return Math.abs(window.innerWidth - documentWidth);\n    }\n\n    hide() {\n      const width = this.getWidth();\n\n      this._disableOverFlow(); // give padding to element to balance the hidden scrollbar width\n\n\n      this._setElementAttributes(this._element, 'paddingRight', calculatedValue => calculatedValue + width); // trick: We adjust positive paddingRight and negative marginRight to sticky-top elements to keep showing fullwidth\n\n\n      this._setElementAttributes(SELECTOR_FIXED_CONTENT, 'paddingRight', calculatedValue => calculatedValue + width);\n\n      this._setElementAttributes(SELECTOR_STICKY_CONTENT, 'marginRight', calculatedValue => calculatedValue - width);\n    }\n\n    _disableOverFlow() {\n      this._saveInitialAttribute(this._element, 'overflow');\n\n      this._element.style.overflow = 'hidden';\n    }\n\n    _setElementAttributes(selector, styleProp, callback) {\n      const scrollbarWidth = this.getWidth();\n\n      const manipulationCallBack = element => {\n        if (element !== this._element && window.innerWidth > element.clientWidth + scrollbarWidth) {\n          return;\n        }\n\n        this._saveInitialAttribute(element, styleProp);\n\n        const calculatedValue = window.getComputedStyle(element)[styleProp];\n        element.style[styleProp] = `${callback(Number.parseFloat(calculatedValue))}px`;\n      };\n\n      this._applyManipulationCallback(selector, manipulationCallBack);\n    }\n\n    reset() {\n      this._resetElementAttributes(this._element, 'overflow');\n\n      this._resetElementAttributes(this._element, 'paddingRight');\n\n      this._resetElementAttributes(SELECTOR_FIXED_CONTENT, 'paddingRight');\n\n      this._resetElementAttributes(SELECTOR_STICKY_CONTENT, 'marginRight');\n    }\n\n    _saveInitialAttribute(element, styleProp) {\n      const actualValue = element.style[styleProp];\n\n      if (actualValue) {\n        Manipulator.setDataAttribute(element, styleProp, actualValue);\n      }\n    }\n\n    _resetElementAttributes(selector, styleProp) {\n      const manipulationCallBack = element => {\n        const value = Manipulator.getDataAttribute(element, styleProp);\n\n        if (typeof value === 'undefined') {\n          element.style.removeProperty(styleProp);\n        } else {\n          Manipulator.removeDataAttribute(element, styleProp);\n          element.style[styleProp] = value;\n        }\n      };\n\n      this._applyManipulationCallback(selector, manipulationCallBack);\n    }\n\n    _applyManipulationCallback(selector, callBack) {\n      if (isElement$1(selector)) {\n        callBack(selector);\n      } else {\n        SelectorEngine.find(selector, this._element).forEach(callBack);\n      }\n    }\n\n    isOverflowing() {\n      return this.getWidth() > 0;\n    }\n\n  }\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): util/backdrop.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  const Default$6 = {\n    isVisible: true,\n    // if false, we use the backdrop helper without adding any element to the dom\n    isAnimated: false,\n    rootElement: 'body',\n    // give the choice to place backdrop under different elements\n    clickCallback: null\n  };\n  const DefaultType$6 = {\n    isVisible: 'boolean',\n    isAnimated: 'boolean',\n    rootElement: '(element|string)',\n    clickCallback: '(function|null)'\n  };\n  const NAME$7 = 'backdrop';\n  const CLASS_NAME_BACKDROP = 'modal-backdrop';\n  const CLASS_NAME_FADE$5 = 'fade';\n  const CLASS_NAME_SHOW$6 = 'show';\n  const EVENT_MOUSEDOWN = `mousedown.bs.${NAME$7}`;\n\n  class Backdrop {\n    constructor(config) {\n      this._config = this._getConfig(config);\n      this._isAppended = false;\n      this._element = null;\n    }\n\n    show(callback) {\n      if (!this._config.isVisible) {\n        execute(callback);\n        return;\n      }\n\n      this._append();\n\n      if (this._config.isAnimated) {\n        reflow(this._getElement());\n      }\n\n      this._getElement().classList.add(CLASS_NAME_SHOW$6);\n\n      this._emulateAnimation(() => {\n        execute(callback);\n      });\n    }\n\n    hide(callback) {\n      if (!this._config.isVisible) {\n        execute(callback);\n        return;\n      }\n\n      this._getElement().classList.remove(CLASS_NAME_SHOW$6);\n\n      this._emulateAnimation(() => {\n        this.dispose();\n        execute(callback);\n      });\n    } // Private\n\n\n    _getElement() {\n      if (!this._element) {\n        const backdrop = document.createElement('div');\n        backdrop.className = CLASS_NAME_BACKDROP;\n\n        if (this._config.isAnimated) {\n          backdrop.classList.add(CLASS_NAME_FADE$5);\n        }\n\n        this._element = backdrop;\n      }\n\n      return this._element;\n    }\n\n    _getConfig(config) {\n      config = { ...Default$6,\n        ...(typeof config === 'object' ? config : {})\n      }; // use getElement() with the default \"body\" to get a fresh Element on each instantiation\n\n      config.rootElement = getElement(config.rootElement);\n      typeCheckConfig(NAME$7, config, DefaultType$6);\n      return config;\n    }\n\n    _append() {\n      if (this._isAppended) {\n        return;\n      }\n\n      this._config.rootElement.appendChild(this._getElement());\n\n      EventHandler.on(this._getElement(), EVENT_MOUSEDOWN, () => {\n        execute(this._config.clickCallback);\n      });\n      this._isAppended = true;\n    }\n\n    dispose() {\n      if (!this._isAppended) {\n        return;\n      }\n\n      EventHandler.off(this._element, EVENT_MOUSEDOWN);\n\n      this._element.remove();\n\n      this._isAppended = false;\n    }\n\n    _emulateAnimation(callback) {\n      executeAfterTransition(callback, this._getElement(), this._config.isAnimated);\n    }\n\n  }\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): modal.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$6 = 'modal';\n  const DATA_KEY$6 = 'bs.modal';\n  const EVENT_KEY$6 = `.${DATA_KEY$6}`;\n  const DATA_API_KEY$3 = '.data-api';\n  const ESCAPE_KEY$1 = 'Escape';\n  const Default$5 = {\n    backdrop: true,\n    keyboard: true,\n    focus: true\n  };\n  const DefaultType$5 = {\n    backdrop: '(boolean|string)',\n    keyboard: 'boolean',\n    focus: 'boolean'\n  };\n  const EVENT_HIDE$3 = `hide${EVENT_KEY$6}`;\n  const EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY$6}`;\n  const EVENT_HIDDEN$3 = `hidden${EVENT_KEY$6}`;\n  const EVENT_SHOW$3 = `show${EVENT_KEY$6}`;\n  const EVENT_SHOWN$3 = `shown${EVENT_KEY$6}`;\n  const EVENT_FOCUSIN$2 = `focusin${EVENT_KEY$6}`;\n  const EVENT_RESIZE = `resize${EVENT_KEY$6}`;\n  const EVENT_CLICK_DISMISS$2 = `click.dismiss${EVENT_KEY$6}`;\n  const EVENT_KEYDOWN_DISMISS$1 = `keydown.dismiss${EVENT_KEY$6}`;\n  const EVENT_MOUSEUP_DISMISS = `mouseup.dismiss${EVENT_KEY$6}`;\n  const EVENT_MOUSEDOWN_DISMISS = `mousedown.dismiss${EVENT_KEY$6}`;\n  const EVENT_CLICK_DATA_API$2 = `click${EVENT_KEY$6}${DATA_API_KEY$3}`;\n  const CLASS_NAME_OPEN = 'modal-open';\n  const CLASS_NAME_FADE$4 = 'fade';\n  const CLASS_NAME_SHOW$5 = 'show';\n  const CLASS_NAME_STATIC = 'modal-static';\n  const SELECTOR_DIALOG = '.modal-dialog';\n  const SELECTOR_MODAL_BODY = '.modal-body';\n  const SELECTOR_DATA_TOGGLE$2 = '[data-bs-toggle=\"modal\"]';\n  const SELECTOR_DATA_DISMISS$2 = '[data-bs-dismiss=\"modal\"]';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Modal extends BaseComponent {\n    constructor(element, config) {\n      super(element);\n      this._config = this._getConfig(config);\n      this._dialog = SelectorEngine.findOne(SELECTOR_DIALOG, this._element);\n      this._backdrop = this._initializeBackDrop();\n      this._isShown = false;\n      this._ignoreBackdropClick = false;\n      this._isTransitioning = false;\n      this._scrollBar = new ScrollBarHelper();\n    } // Getters\n\n\n    static get Default() {\n      return Default$5;\n    }\n\n    static get NAME() {\n      return NAME$6;\n    } // Public\n\n\n    toggle(relatedTarget) {\n      return this._isShown ? this.hide() : this.show(relatedTarget);\n    }\n\n    show(relatedTarget) {\n      if (this._isShown || this._isTransitioning) {\n        return;\n      }\n\n      const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$3, {\n        relatedTarget\n      });\n\n      if (showEvent.defaultPrevented) {\n        return;\n      }\n\n      this._isShown = true;\n\n      if (this._isAnimated()) {\n        this._isTransitioning = true;\n      }\n\n      this._scrollBar.hide();\n\n      document.body.classList.add(CLASS_NAME_OPEN);\n\n      this._adjustDialog();\n\n      this._setEscapeEvent();\n\n      this._setResizeEvent();\n\n      EventHandler.on(this._element, EVENT_CLICK_DISMISS$2, SELECTOR_DATA_DISMISS$2, event => this.hide(event));\n      EventHandler.on(this._dialog, EVENT_MOUSEDOWN_DISMISS, () => {\n        EventHandler.one(this._element, EVENT_MOUSEUP_DISMISS, event => {\n          if (event.target === this._element) {\n            this._ignoreBackdropClick = true;\n          }\n        });\n      });\n\n      this._showBackdrop(() => this._showElement(relatedTarget));\n    }\n\n    hide(event) {\n      if (event && ['A', 'AREA'].includes(event.target.tagName)) {\n        event.preventDefault();\n      }\n\n      if (!this._isShown || this._isTransitioning) {\n        return;\n      }\n\n      const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$3);\n\n      if (hideEvent.defaultPrevented) {\n        return;\n      }\n\n      this._isShown = false;\n\n      const isAnimated = this._isAnimated();\n\n      if (isAnimated) {\n        this._isTransitioning = true;\n      }\n\n      this._setEscapeEvent();\n\n      this._setResizeEvent();\n\n      EventHandler.off(document, EVENT_FOCUSIN$2);\n\n      this._element.classList.remove(CLASS_NAME_SHOW$5);\n\n      EventHandler.off(this._element, EVENT_CLICK_DISMISS$2);\n      EventHandler.off(this._dialog, EVENT_MOUSEDOWN_DISMISS);\n\n      this._queueCallback(() => this._hideModal(), this._element, isAnimated);\n    }\n\n    dispose() {\n      [window, this._dialog].forEach(htmlElement => EventHandler.off(htmlElement, EVENT_KEY$6));\n\n      this._backdrop.dispose();\n\n      super.dispose();\n      /**\n       * `document` has 2 events `EVENT_FOCUSIN` and `EVENT_CLICK_DATA_API`\n       * Do not move `document` in `htmlElements` array\n       * It will remove `EVENT_CLICK_DATA_API` event that should remain\n       */\n\n      EventHandler.off(document, EVENT_FOCUSIN$2);\n    }\n\n    handleUpdate() {\n      this._adjustDialog();\n    } // Private\n\n\n    _initializeBackDrop() {\n      return new Backdrop({\n        isVisible: Boolean(this._config.backdrop),\n        // 'static' option will be translated to true, and booleans will keep their value\n        isAnimated: this._isAnimated()\n      });\n    }\n\n    _getConfig(config) {\n      config = { ...Default$5,\n        ...Manipulator.getDataAttributes(this._element),\n        ...(typeof config === 'object' ? config : {})\n      };\n      typeCheckConfig(NAME$6, config, DefaultType$5);\n      return config;\n    }\n\n    _showElement(relatedTarget) {\n      const isAnimated = this._isAnimated();\n\n      const modalBody = SelectorEngine.findOne(SELECTOR_MODAL_BODY, this._dialog);\n\n      if (!this._element.parentNode || this._element.parentNode.nodeType !== Node.ELEMENT_NODE) {\n        // Don't move modal's DOM position\n        document.body.appendChild(this._element);\n      }\n\n      this._element.style.display = 'block';\n\n      this._element.removeAttribute('aria-hidden');\n\n      this._element.setAttribute('aria-modal', true);\n\n      this._element.setAttribute('role', 'dialog');\n\n      this._element.scrollTop = 0;\n\n      if (modalBody) {\n        modalBody.scrollTop = 0;\n      }\n\n      if (isAnimated) {\n        reflow(this._element);\n      }\n\n      this._element.classList.add(CLASS_NAME_SHOW$5);\n\n      if (this._config.focus) {\n        this._enforceFocus();\n      }\n\n      const transitionComplete = () => {\n        if (this._config.focus) {\n          this._element.focus();\n        }\n\n        this._isTransitioning = false;\n        EventHandler.trigger(this._element, EVENT_SHOWN$3, {\n          relatedTarget\n        });\n      };\n\n      this._queueCallback(transitionComplete, this._dialog, isAnimated);\n    }\n\n    _enforceFocus() {\n      EventHandler.off(document, EVENT_FOCUSIN$2); // guard against infinite focus loop\n\n      EventHandler.on(document, EVENT_FOCUSIN$2, event => {\n        if (document !== event.target && this._element !== event.target && !this._element.contains(event.target)) {\n          this._element.focus();\n        }\n      });\n    }\n\n    _setEscapeEvent() {\n      if (this._isShown) {\n        EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS$1, event => {\n          if (this._config.keyboard && event.key === ESCAPE_KEY$1) {\n            event.preventDefault();\n            this.hide();\n          } else if (!this._config.keyboard && event.key === ESCAPE_KEY$1) {\n            this._triggerBackdropTransition();\n          }\n        });\n      } else {\n        EventHandler.off(this._element, EVENT_KEYDOWN_DISMISS$1);\n      }\n    }\n\n    _setResizeEvent() {\n      if (this._isShown) {\n        EventHandler.on(window, EVENT_RESIZE, () => this._adjustDialog());\n      } else {\n        EventHandler.off(window, EVENT_RESIZE);\n      }\n    }\n\n    _hideModal() {\n      this._element.style.display = 'none';\n\n      this._element.setAttribute('aria-hidden', true);\n\n      this._element.removeAttribute('aria-modal');\n\n      this._element.removeAttribute('role');\n\n      this._isTransitioning = false;\n\n      this._backdrop.hide(() => {\n        document.body.classList.remove(CLASS_NAME_OPEN);\n\n        this._resetAdjustments();\n\n        this._scrollBar.reset();\n\n        EventHandler.trigger(this._element, EVENT_HIDDEN$3);\n      });\n    }\n\n    _showBackdrop(callback) {\n      EventHandler.on(this._element, EVENT_CLICK_DISMISS$2, event => {\n        if (this._ignoreBackdropClick) {\n          this._ignoreBackdropClick = false;\n          return;\n        }\n\n        if (event.target !== event.currentTarget) {\n          return;\n        }\n\n        if (this._config.backdrop === true) {\n          this.hide();\n        } else if (this._config.backdrop === 'static') {\n          this._triggerBackdropTransition();\n        }\n      });\n\n      this._backdrop.show(callback);\n    }\n\n    _isAnimated() {\n      return this._element.classList.contains(CLASS_NAME_FADE$4);\n    }\n\n    _triggerBackdropTransition() {\n      const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED);\n\n      if (hideEvent.defaultPrevented) {\n        return;\n      }\n\n      const {\n        classList,\n        scrollHeight,\n        style\n      } = this._element;\n      const isModalOverflowing = scrollHeight > document.documentElement.clientHeight; // return if the following background transition hasn't yet completed\n\n      if (!isModalOverflowing && style.overflowY === 'hidden' || classList.contains(CLASS_NAME_STATIC)) {\n        return;\n      }\n\n      if (!isModalOverflowing) {\n        style.overflowY = 'hidden';\n      }\n\n      classList.add(CLASS_NAME_STATIC);\n\n      this._queueCallback(() => {\n        classList.remove(CLASS_NAME_STATIC);\n\n        if (!isModalOverflowing) {\n          this._queueCallback(() => {\n            style.overflowY = '';\n          }, this._dialog);\n        }\n      }, this._dialog);\n\n      this._element.focus();\n    } // ----------------------------------------------------------------------\n    // the following methods are used to handle overflowing modals\n    // ----------------------------------------------------------------------\n\n\n    _adjustDialog() {\n      const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;\n\n      const scrollbarWidth = this._scrollBar.getWidth();\n\n      const isBodyOverflowing = scrollbarWidth > 0;\n\n      if (!isBodyOverflowing && isModalOverflowing && !isRTL() || isBodyOverflowing && !isModalOverflowing && isRTL()) {\n        this._element.style.paddingLeft = `${scrollbarWidth}px`;\n      }\n\n      if (isBodyOverflowing && !isModalOverflowing && !isRTL() || !isBodyOverflowing && isModalOverflowing && isRTL()) {\n        this._element.style.paddingRight = `${scrollbarWidth}px`;\n      }\n    }\n\n    _resetAdjustments() {\n      this._element.style.paddingLeft = '';\n      this._element.style.paddingRight = '';\n    } // Static\n\n\n    static jQueryInterface(config, relatedTarget) {\n      return this.each(function () {\n        const data = Modal.getOrCreateInstance(this, config);\n\n        if (typeof config !== 'string') {\n          return;\n        }\n\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config](relatedTarget);\n      });\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(document, EVENT_CLICK_DATA_API$2, SELECTOR_DATA_TOGGLE$2, function (event) {\n    const target = getElementFromSelector(this);\n\n    if (['A', 'AREA'].includes(this.tagName)) {\n      event.preventDefault();\n    }\n\n    EventHandler.one(target, EVENT_SHOW$3, showEvent => {\n      if (showEvent.defaultPrevented) {\n        // only register focus restorer if modal will actually get shown\n        return;\n      }\n\n      EventHandler.one(target, EVENT_HIDDEN$3, () => {\n        if (isVisible(this)) {\n          this.focus();\n        }\n      });\n    });\n    const data = Modal.getOrCreateInstance(target);\n    data.toggle(this);\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Modal to jQuery only if jQuery is present\n   */\n\n  defineJQueryPlugin(Modal);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): offcanvas.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$5 = 'offcanvas';\n  const DATA_KEY$5 = 'bs.offcanvas';\n  const EVENT_KEY$5 = `.${DATA_KEY$5}`;\n  const DATA_API_KEY$2 = '.data-api';\n  const EVENT_LOAD_DATA_API$1 = `load${EVENT_KEY$5}${DATA_API_KEY$2}`;\n  const ESCAPE_KEY = 'Escape';\n  const Default$4 = {\n    backdrop: true,\n    keyboard: true,\n    scroll: false\n  };\n  const DefaultType$4 = {\n    backdrop: 'boolean',\n    keyboard: 'boolean',\n    scroll: 'boolean'\n  };\n  const CLASS_NAME_SHOW$4 = 'show';\n  const OPEN_SELECTOR = '.offcanvas.show';\n  const EVENT_SHOW$2 = `show${EVENT_KEY$5}`;\n  const EVENT_SHOWN$2 = `shown${EVENT_KEY$5}`;\n  const EVENT_HIDE$2 = `hide${EVENT_KEY$5}`;\n  const EVENT_HIDDEN$2 = `hidden${EVENT_KEY$5}`;\n  const EVENT_FOCUSIN$1 = `focusin${EVENT_KEY$5}`;\n  const EVENT_CLICK_DATA_API$1 = `click${EVENT_KEY$5}${DATA_API_KEY$2}`;\n  const EVENT_CLICK_DISMISS$1 = `click.dismiss${EVENT_KEY$5}`;\n  const EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY$5}`;\n  const SELECTOR_DATA_DISMISS$1 = '[data-bs-dismiss=\"offcanvas\"]';\n  const SELECTOR_DATA_TOGGLE$1 = '[data-bs-toggle=\"offcanvas\"]';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Offcanvas extends BaseComponent {\n    constructor(element, config) {\n      super(element);\n      this._config = this._getConfig(config);\n      this._isShown = false;\n      this._backdrop = this._initializeBackDrop();\n\n      this._addEventListeners();\n    } // Getters\n\n\n    static get NAME() {\n      return NAME$5;\n    }\n\n    static get Default() {\n      return Default$4;\n    } // Public\n\n\n    toggle(relatedTarget) {\n      return this._isShown ? this.hide() : this.show(relatedTarget);\n    }\n\n    show(relatedTarget) {\n      if (this._isShown) {\n        return;\n      }\n\n      const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$2, {\n        relatedTarget\n      });\n\n      if (showEvent.defaultPrevented) {\n        return;\n      }\n\n      this._isShown = true;\n      this._element.style.visibility = 'visible';\n\n      this._backdrop.show();\n\n      if (!this._config.scroll) {\n        new ScrollBarHelper().hide();\n\n        this._enforceFocusOnElement(this._element);\n      }\n\n      this._element.removeAttribute('aria-hidden');\n\n      this._element.setAttribute('aria-modal', true);\n\n      this._element.setAttribute('role', 'dialog');\n\n      this._element.classList.add(CLASS_NAME_SHOW$4);\n\n      const completeCallBack = () => {\n        EventHandler.trigger(this._element, EVENT_SHOWN$2, {\n          relatedTarget\n        });\n      };\n\n      this._queueCallback(completeCallBack, this._element, true);\n    }\n\n    hide() {\n      if (!this._isShown) {\n        return;\n      }\n\n      const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$2);\n\n      if (hideEvent.defaultPrevented) {\n        return;\n      }\n\n      EventHandler.off(document, EVENT_FOCUSIN$1);\n\n      this._element.blur();\n\n      this._isShown = false;\n\n      this._element.classList.remove(CLASS_NAME_SHOW$4);\n\n      this._backdrop.hide();\n\n      const completeCallback = () => {\n        this._element.setAttribute('aria-hidden', true);\n\n        this._element.removeAttribute('aria-modal');\n\n        this._element.removeAttribute('role');\n\n        this._element.style.visibility = 'hidden';\n\n        if (!this._config.scroll) {\n          new ScrollBarHelper().reset();\n        }\n\n        EventHandler.trigger(this._element, EVENT_HIDDEN$2);\n      };\n\n      this._queueCallback(completeCallback, this._element, true);\n    }\n\n    dispose() {\n      this._backdrop.dispose();\n\n      super.dispose();\n      EventHandler.off(document, EVENT_FOCUSIN$1);\n    } // Private\n\n\n    _getConfig(config) {\n      config = { ...Default$4,\n        ...Manipulator.getDataAttributes(this._element),\n        ...(typeof config === 'object' ? config : {})\n      };\n      typeCheckConfig(NAME$5, config, DefaultType$4);\n      return config;\n    }\n\n    _initializeBackDrop() {\n      return new Backdrop({\n        isVisible: this._config.backdrop,\n        isAnimated: true,\n        rootElement: this._element.parentNode,\n        clickCallback: () => this.hide()\n      });\n    }\n\n    _enforceFocusOnElement(element) {\n      EventHandler.off(document, EVENT_FOCUSIN$1); // guard against infinite focus loop\n\n      EventHandler.on(document, EVENT_FOCUSIN$1, event => {\n        if (document !== event.target && element !== event.target && !element.contains(event.target)) {\n          element.focus();\n        }\n      });\n      element.focus();\n    }\n\n    _addEventListeners() {\n      EventHandler.on(this._element, EVENT_CLICK_DISMISS$1, SELECTOR_DATA_DISMISS$1, () => this.hide());\n      EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS, event => {\n        if (this._config.keyboard && event.key === ESCAPE_KEY) {\n          this.hide();\n        }\n      });\n    } // Static\n\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = Offcanvas.getOrCreateInstance(this, config);\n\n        if (typeof config !== 'string') {\n          return;\n        }\n\n        if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config](this);\n      });\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(document, EVENT_CLICK_DATA_API$1, SELECTOR_DATA_TOGGLE$1, function (event) {\n    const target = getElementFromSelector(this);\n\n    if (['A', 'AREA'].includes(this.tagName)) {\n      event.preventDefault();\n    }\n\n    if (isDisabled(this)) {\n      return;\n    }\n\n    EventHandler.one(target, EVENT_HIDDEN$2, () => {\n      // focus on trigger when it is closed\n      if (isVisible(this)) {\n        this.focus();\n      }\n    }); // avoid conflict when clicking a toggler of an offcanvas, while another is open\n\n    const allReadyOpen = SelectorEngine.findOne(OPEN_SELECTOR);\n\n    if (allReadyOpen && allReadyOpen !== target) {\n      Offcanvas.getInstance(allReadyOpen).hide();\n    }\n\n    const data = Offcanvas.getOrCreateInstance(target);\n    data.toggle(this);\n  });\n  EventHandler.on(window, EVENT_LOAD_DATA_API$1, () => SelectorEngine.find(OPEN_SELECTOR).forEach(el => Offcanvas.getOrCreateInstance(el).show()));\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   */\n\n  defineJQueryPlugin(Offcanvas);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): util/sanitizer.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  const uriAttrs = new Set(['background', 'cite', 'href', 'itemtype', 'longdesc', 'poster', 'src', 'xlink:href']);\n  const ARIA_ATTRIBUTE_PATTERN = /^aria-[\\w-]*$/i;\n  /**\n   * A pattern that recognizes a commonly useful subset of URLs that are safe.\n   *\n   * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts\n   */\n\n  const SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file):|[^#&/:?]*(?:[#/?]|$))/i;\n  /**\n   * A pattern that matches safe data URLs. Only matches image, video and audio types.\n   *\n   * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts\n   */\n\n  const DATA_URL_PATTERN = /^data:(?:image\\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\\/(?:mpeg|mp4|ogg|webm)|audio\\/(?:mp3|oga|ogg|opus));base64,[\\d+/a-z]+=*$/i;\n\n  const allowedAttribute = (attr, allowedAttributeList) => {\n    const attrName = attr.nodeName.toLowerCase();\n\n    if (allowedAttributeList.includes(attrName)) {\n      if (uriAttrs.has(attrName)) {\n        return Boolean(SAFE_URL_PATTERN.test(attr.nodeValue) || DATA_URL_PATTERN.test(attr.nodeValue));\n      }\n\n      return true;\n    }\n\n    const regExp = allowedAttributeList.filter(attrRegex => attrRegex instanceof RegExp); // Check if a regular expression validates the attribute.\n\n    for (let i = 0, len = regExp.length; i < len; i++) {\n      if (regExp[i].test(attrName)) {\n        return true;\n      }\n    }\n\n    return false;\n  };\n\n  const DefaultAllowlist = {\n    // Global attributes allowed on any supplied element below.\n    '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],\n    a: ['target', 'href', 'title', 'rel'],\n    area: [],\n    b: [],\n    br: [],\n    col: [],\n    code: [],\n    div: [],\n    em: [],\n    hr: [],\n    h1: [],\n    h2: [],\n    h3: [],\n    h4: [],\n    h5: [],\n    h6: [],\n    i: [],\n    img: ['src', 'srcset', 'alt', 'title', 'width', 'height'],\n    li: [],\n    ol: [],\n    p: [],\n    pre: [],\n    s: [],\n    small: [],\n    span: [],\n    sub: [],\n    sup: [],\n    strong: [],\n    u: [],\n    ul: []\n  };\n  function sanitizeHtml(unsafeHtml, allowList, sanitizeFn) {\n    if (!unsafeHtml.length) {\n      return unsafeHtml;\n    }\n\n    if (sanitizeFn && typeof sanitizeFn === 'function') {\n      return sanitizeFn(unsafeHtml);\n    }\n\n    const domParser = new window.DOMParser();\n    const createdDocument = domParser.parseFromString(unsafeHtml, 'text/html');\n    const allowlistKeys = Object.keys(allowList);\n    const elements = [].concat(...createdDocument.body.querySelectorAll('*'));\n\n    for (let i = 0, len = elements.length; i < len; i++) {\n      const el = elements[i];\n      const elName = el.nodeName.toLowerCase();\n\n      if (!allowlistKeys.includes(elName)) {\n        el.remove();\n        continue;\n      }\n\n      const attributeList = [].concat(...el.attributes);\n      const allowedAttributes = [].concat(allowList['*'] || [], allowList[elName] || []);\n      attributeList.forEach(attr => {\n        if (!allowedAttribute(attr, allowedAttributes)) {\n          el.removeAttribute(attr.nodeName);\n        }\n      });\n    }\n\n    return createdDocument.body.innerHTML;\n  }\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): tooltip.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$4 = 'tooltip';\n  const DATA_KEY$4 = 'bs.tooltip';\n  const EVENT_KEY$4 = `.${DATA_KEY$4}`;\n  const CLASS_PREFIX$1 = 'bs-tooltip';\n  const BSCLS_PREFIX_REGEX$1 = new RegExp(`(^|\\\\s)${CLASS_PREFIX$1}\\\\S+`, 'g');\n  const DISALLOWED_ATTRIBUTES = new Set(['sanitize', 'allowList', 'sanitizeFn']);\n  const DefaultType$3 = {\n    animation: 'boolean',\n    template: 'string',\n    title: '(string|element|function)',\n    trigger: 'string',\n    delay: '(number|object)',\n    html: 'boolean',\n    selector: '(string|boolean)',\n    placement: '(string|function)',\n    offset: '(array|string|function)',\n    container: '(string|element|boolean)',\n    fallbackPlacements: 'array',\n    boundary: '(string|element)',\n    customClass: '(string|function)',\n    sanitize: 'boolean',\n    sanitizeFn: '(null|function)',\n    allowList: 'object',\n    popperConfig: '(null|object|function)'\n  };\n  const AttachmentMap = {\n    AUTO: 'auto',\n    TOP: 'top',\n    RIGHT: isRTL() ? 'left' : 'right',\n    BOTTOM: 'bottom',\n    LEFT: isRTL() ? 'right' : 'left'\n  };\n  const Default$3 = {\n    animation: true,\n    template: '<div class=\"tooltip\" role=\"tooltip\">' + '<div class=\"tooltip-arrow\"></div>' + '<div class=\"tooltip-inner\"></div>' + '</div>',\n    trigger: 'hover focus',\n    title: '',\n    delay: 0,\n    html: false,\n    selector: false,\n    placement: 'top',\n    offset: [0, 0],\n    container: false,\n    fallbackPlacements: ['top', 'right', 'bottom', 'left'],\n    boundary: 'clippingParents',\n    customClass: '',\n    sanitize: true,\n    sanitizeFn: null,\n    allowList: DefaultAllowlist,\n    popperConfig: null\n  };\n  const Event$2 = {\n    HIDE: `hide${EVENT_KEY$4}`,\n    HIDDEN: `hidden${EVENT_KEY$4}`,\n    SHOW: `show${EVENT_KEY$4}`,\n    SHOWN: `shown${EVENT_KEY$4}`,\n    INSERTED: `inserted${EVENT_KEY$4}`,\n    CLICK: `click${EVENT_KEY$4}`,\n    FOCUSIN: `focusin${EVENT_KEY$4}`,\n    FOCUSOUT: `focusout${EVENT_KEY$4}`,\n    MOUSEENTER: `mouseenter${EVENT_KEY$4}`,\n    MOUSELEAVE: `mouseleave${EVENT_KEY$4}`\n  };\n  const CLASS_NAME_FADE$3 = 'fade';\n  const CLASS_NAME_MODAL = 'modal';\n  const CLASS_NAME_SHOW$3 = 'show';\n  const HOVER_STATE_SHOW = 'show';\n  const HOVER_STATE_OUT = 'out';\n  const SELECTOR_TOOLTIP_INNER = '.tooltip-inner';\n  const TRIGGER_HOVER = 'hover';\n  const TRIGGER_FOCUS = 'focus';\n  const TRIGGER_CLICK = 'click';\n  const TRIGGER_MANUAL = 'manual';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Tooltip extends BaseComponent {\n    constructor(element, config) {\n      if (typeof Popper === 'undefined') {\n        throw new TypeError('Bootstrap\\'s tooltips require Popper (https://popper.js.org)');\n      }\n\n      super(element); // private\n\n      this._isEnabled = true;\n      this._timeout = 0;\n      this._hoverState = '';\n      this._activeTrigger = {};\n      this._popper = null; // Protected\n\n      this._config = this._getConfig(config);\n      this.tip = null;\n\n      this._setListeners();\n    } // Getters\n\n\n    static get Default() {\n      return Default$3;\n    }\n\n    static get NAME() {\n      return NAME$4;\n    }\n\n    static get Event() {\n      return Event$2;\n    }\n\n    static get DefaultType() {\n      return DefaultType$3;\n    } // Public\n\n\n    enable() {\n      this._isEnabled = true;\n    }\n\n    disable() {\n      this._isEnabled = false;\n    }\n\n    toggleEnabled() {\n      this._isEnabled = !this._isEnabled;\n    }\n\n    toggle(event) {\n      if (!this._isEnabled) {\n        return;\n      }\n\n      if (event) {\n        const context = this._initializeOnDelegatedTarget(event);\n\n        context._activeTrigger.click = !context._activeTrigger.click;\n\n        if (context._isWithActiveTrigger()) {\n          context._enter(null, context);\n        } else {\n          context._leave(null, context);\n        }\n      } else {\n        if (this.getTipElement().classList.contains(CLASS_NAME_SHOW$3)) {\n          this._leave(null, this);\n\n          return;\n        }\n\n        this._enter(null, this);\n      }\n    }\n\n    dispose() {\n      clearTimeout(this._timeout);\n      EventHandler.off(this._element.closest(`.${CLASS_NAME_MODAL}`), 'hide.bs.modal', this._hideModalHandler);\n\n      if (this.tip) {\n        this.tip.remove();\n      }\n\n      if (this._popper) {\n        this._popper.destroy();\n      }\n\n      super.dispose();\n    }\n\n    show() {\n      if (this._element.style.display === 'none') {\n        throw new Error('Please use show on visible elements');\n      }\n\n      if (!(this.isWithContent() && this._isEnabled)) {\n        return;\n      }\n\n      const showEvent = EventHandler.trigger(this._element, this.constructor.Event.SHOW);\n      const shadowRoot = findShadowRoot(this._element);\n      const isInTheDom = shadowRoot === null ? this._element.ownerDocument.documentElement.contains(this._element) : shadowRoot.contains(this._element);\n\n      if (showEvent.defaultPrevented || !isInTheDom) {\n        return;\n      }\n\n      const tip = this.getTipElement();\n      const tipId = getUID(this.constructor.NAME);\n      tip.setAttribute('id', tipId);\n\n      this._element.setAttribute('aria-describedby', tipId);\n\n      this.setContent();\n\n      if (this._config.animation) {\n        tip.classList.add(CLASS_NAME_FADE$3);\n      }\n\n      const placement = typeof this._config.placement === 'function' ? this._config.placement.call(this, tip, this._element) : this._config.placement;\n\n      const attachment = this._getAttachment(placement);\n\n      this._addAttachmentClass(attachment);\n\n      const {\n        container\n      } = this._config;\n      Data.set(tip, this.constructor.DATA_KEY, this);\n\n      if (!this._element.ownerDocument.documentElement.contains(this.tip)) {\n        container.appendChild(tip);\n        EventHandler.trigger(this._element, this.constructor.Event.INSERTED);\n      }\n\n      if (this._popper) {\n        this._popper.update();\n      } else {\n        this._popper = createPopper(this._element, tip, this._getPopperConfig(attachment));\n      }\n\n      tip.classList.add(CLASS_NAME_SHOW$3);\n      const customClass = typeof this._config.customClass === 'function' ? this._config.customClass() : this._config.customClass;\n\n      if (customClass) {\n        tip.classList.add(...customClass.split(' '));\n      } // If this is a touch-enabled device we add extra\n      // empty mouseover listeners to the body's immediate children;\n      // only needed because of broken event delegation on iOS\n      // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n\n\n      if ('ontouchstart' in document.documentElement) {\n        [].concat(...document.body.children).forEach(element => {\n          EventHandler.on(element, 'mouseover', noop);\n        });\n      }\n\n      const complete = () => {\n        const prevHoverState = this._hoverState;\n        this._hoverState = null;\n        EventHandler.trigger(this._element, this.constructor.Event.SHOWN);\n\n        if (prevHoverState === HOVER_STATE_OUT) {\n          this._leave(null, this);\n        }\n      };\n\n      const isAnimated = this.tip.classList.contains(CLASS_NAME_FADE$3);\n\n      this._queueCallback(complete, this.tip, isAnimated);\n    }\n\n    hide() {\n      if (!this._popper) {\n        return;\n      }\n\n      const tip = this.getTipElement();\n\n      const complete = () => {\n        if (this._isWithActiveTrigger()) {\n          return;\n        }\n\n        if (this._hoverState !== HOVER_STATE_SHOW) {\n          tip.remove();\n        }\n\n        this._cleanTipClass();\n\n        this._element.removeAttribute('aria-describedby');\n\n        EventHandler.trigger(this._element, this.constructor.Event.HIDDEN);\n\n        if (this._popper) {\n          this._popper.destroy();\n\n          this._popper = null;\n        }\n      };\n\n      const hideEvent = EventHandler.trigger(this._element, this.constructor.Event.HIDE);\n\n      if (hideEvent.defaultPrevented) {\n        return;\n      }\n\n      tip.classList.remove(CLASS_NAME_SHOW$3); // If this is a touch-enabled device we remove the extra\n      // empty mouseover listeners we added for iOS support\n\n      if ('ontouchstart' in document.documentElement) {\n        [].concat(...document.body.children).forEach(element => EventHandler.off(element, 'mouseover', noop));\n      }\n\n      this._activeTrigger[TRIGGER_CLICK] = false;\n      this._activeTrigger[TRIGGER_FOCUS] = false;\n      this._activeTrigger[TRIGGER_HOVER] = false;\n      const isAnimated = this.tip.classList.contains(CLASS_NAME_FADE$3);\n\n      this._queueCallback(complete, this.tip, isAnimated);\n\n      this._hoverState = '';\n    }\n\n    update() {\n      if (this._popper !== null) {\n        this._popper.update();\n      }\n    } // Protected\n\n\n    isWithContent() {\n      return Boolean(this.getTitle());\n    }\n\n    getTipElement() {\n      if (this.tip) {\n        return this.tip;\n      }\n\n      const element = document.createElement('div');\n      element.innerHTML = this._config.template;\n      this.tip = element.children[0];\n      return this.tip;\n    }\n\n    setContent() {\n      const tip = this.getTipElement();\n      this.setElementContent(SelectorEngine.findOne(SELECTOR_TOOLTIP_INNER, tip), this.getTitle());\n      tip.classList.remove(CLASS_NAME_FADE$3, CLASS_NAME_SHOW$3);\n    }\n\n    setElementContent(element, content) {\n      if (element === null) {\n        return;\n      }\n\n      if (isElement$1(content)) {\n        content = getElement(content); // content is a DOM node or a jQuery\n\n        if (this._config.html) {\n          if (content.parentNode !== element) {\n            element.innerHTML = '';\n            element.appendChild(content);\n          }\n        } else {\n          element.textContent = content.textContent;\n        }\n\n        return;\n      }\n\n      if (this._config.html) {\n        if (this._config.sanitize) {\n          content = sanitizeHtml(content, this._config.allowList, this._config.sanitizeFn);\n        }\n\n        element.innerHTML = content;\n      } else {\n        element.textContent = content;\n      }\n    }\n\n    getTitle() {\n      let title = this._element.getAttribute('data-bs-original-title');\n\n      if (!title) {\n        title = typeof this._config.title === 'function' ? this._config.title.call(this._element) : this._config.title;\n      }\n\n      return title;\n    }\n\n    updateAttachment(attachment) {\n      if (attachment === 'right') {\n        return 'end';\n      }\n\n      if (attachment === 'left') {\n        return 'start';\n      }\n\n      return attachment;\n    } // Private\n\n\n    _initializeOnDelegatedTarget(event, context) {\n      const dataKey = this.constructor.DATA_KEY;\n      context = context || Data.get(event.delegateTarget, dataKey);\n\n      if (!context) {\n        context = new this.constructor(event.delegateTarget, this._getDelegateConfig());\n        Data.set(event.delegateTarget, dataKey, context);\n      }\n\n      return context;\n    }\n\n    _getOffset() {\n      const {\n        offset\n      } = this._config;\n\n      if (typeof offset === 'string') {\n        return offset.split(',').map(val => Number.parseInt(val, 10));\n      }\n\n      if (typeof offset === 'function') {\n        return popperData => offset(popperData, this._element);\n      }\n\n      return offset;\n    }\n\n    _getPopperConfig(attachment) {\n      const defaultBsPopperConfig = {\n        placement: attachment,\n        modifiers: [{\n          name: 'flip',\n          options: {\n            fallbackPlacements: this._config.fallbackPlacements\n          }\n        }, {\n          name: 'offset',\n          options: {\n            offset: this._getOffset()\n          }\n        }, {\n          name: 'preventOverflow',\n          options: {\n            boundary: this._config.boundary\n          }\n        }, {\n          name: 'arrow',\n          options: {\n            element: `.${this.constructor.NAME}-arrow`\n          }\n        }, {\n          name: 'onChange',\n          enabled: true,\n          phase: 'afterWrite',\n          fn: data => this._handlePopperPlacementChange(data)\n        }],\n        onFirstUpdate: data => {\n          if (data.options.placement !== data.placement) {\n            this._handlePopperPlacementChange(data);\n          }\n        }\n      };\n      return { ...defaultBsPopperConfig,\n        ...(typeof this._config.popperConfig === 'function' ? this._config.popperConfig(defaultBsPopperConfig) : this._config.popperConfig)\n      };\n    }\n\n    _addAttachmentClass(attachment) {\n      this.getTipElement().classList.add(`${CLASS_PREFIX$1}-${this.updateAttachment(attachment)}`);\n    }\n\n    _getAttachment(placement) {\n      return AttachmentMap[placement.toUpperCase()];\n    }\n\n    _setListeners() {\n      const triggers = this._config.trigger.split(' ');\n\n      triggers.forEach(trigger => {\n        if (trigger === 'click') {\n          EventHandler.on(this._element, this.constructor.Event.CLICK, this._config.selector, event => this.toggle(event));\n        } else if (trigger !== TRIGGER_MANUAL) {\n          const eventIn = trigger === TRIGGER_HOVER ? this.constructor.Event.MOUSEENTER : this.constructor.Event.FOCUSIN;\n          const eventOut = trigger === TRIGGER_HOVER ? this.constructor.Event.MOUSELEAVE : this.constructor.Event.FOCUSOUT;\n          EventHandler.on(this._element, eventIn, this._config.selector, event => this._enter(event));\n          EventHandler.on(this._element, eventOut, this._config.selector, event => this._leave(event));\n        }\n      });\n\n      this._hideModalHandler = () => {\n        if (this._element) {\n          this.hide();\n        }\n      };\n\n      EventHandler.on(this._element.closest(`.${CLASS_NAME_MODAL}`), 'hide.bs.modal', this._hideModalHandler);\n\n      if (this._config.selector) {\n        this._config = { ...this._config,\n          trigger: 'manual',\n          selector: ''\n        };\n      } else {\n        this._fixTitle();\n      }\n    }\n\n    _fixTitle() {\n      const title = this._element.getAttribute('title');\n\n      const originalTitleType = typeof this._element.getAttribute('data-bs-original-title');\n\n      if (title || originalTitleType !== 'string') {\n        this._element.setAttribute('data-bs-original-title', title || '');\n\n        if (title && !this._element.getAttribute('aria-label') && !this._element.textContent) {\n          this._element.setAttribute('aria-label', title);\n        }\n\n        this._element.setAttribute('title', '');\n      }\n    }\n\n    _enter(event, context) {\n      context = this._initializeOnDelegatedTarget(event, context);\n\n      if (event) {\n        context._activeTrigger[event.type === 'focusin' ? TRIGGER_FOCUS : TRIGGER_HOVER] = true;\n      }\n\n      if (context.getTipElement().classList.contains(CLASS_NAME_SHOW$3) || context._hoverState === HOVER_STATE_SHOW) {\n        context._hoverState = HOVER_STATE_SHOW;\n        return;\n      }\n\n      clearTimeout(context._timeout);\n      context._hoverState = HOVER_STATE_SHOW;\n\n      if (!context._config.delay || !context._config.delay.show) {\n        context.show();\n        return;\n      }\n\n      context._timeout = setTimeout(() => {\n        if (context._hoverState === HOVER_STATE_SHOW) {\n          context.show();\n        }\n      }, context._config.delay.show);\n    }\n\n    _leave(event, context) {\n      context = this._initializeOnDelegatedTarget(event, context);\n\n      if (event) {\n        context._activeTrigger[event.type === 'focusout' ? TRIGGER_FOCUS : TRIGGER_HOVER] = context._element.contains(event.relatedTarget);\n      }\n\n      if (context._isWithActiveTrigger()) {\n        return;\n      }\n\n      clearTimeout(context._timeout);\n      context._hoverState = HOVER_STATE_OUT;\n\n      if (!context._config.delay || !context._config.delay.hide) {\n        context.hide();\n        return;\n      }\n\n      context._timeout = setTimeout(() => {\n        if (context._hoverState === HOVER_STATE_OUT) {\n          context.hide();\n        }\n      }, context._config.delay.hide);\n    }\n\n    _isWithActiveTrigger() {\n      for (const trigger in this._activeTrigger) {\n        if (this._activeTrigger[trigger]) {\n          return true;\n        }\n      }\n\n      return false;\n    }\n\n    _getConfig(config) {\n      const dataAttributes = Manipulator.getDataAttributes(this._element);\n      Object.keys(dataAttributes).forEach(dataAttr => {\n        if (DISALLOWED_ATTRIBUTES.has(dataAttr)) {\n          delete dataAttributes[dataAttr];\n        }\n      });\n      config = { ...this.constructor.Default,\n        ...dataAttributes,\n        ...(typeof config === 'object' && config ? config : {})\n      };\n      config.container = config.container === false ? document.body : getElement(config.container);\n\n      if (typeof config.delay === 'number') {\n        config.delay = {\n          show: config.delay,\n          hide: config.delay\n        };\n      }\n\n      if (typeof config.title === 'number') {\n        config.title = config.title.toString();\n      }\n\n      if (typeof config.content === 'number') {\n        config.content = config.content.toString();\n      }\n\n      typeCheckConfig(NAME$4, config, this.constructor.DefaultType);\n\n      if (config.sanitize) {\n        config.template = sanitizeHtml(config.template, config.allowList, config.sanitizeFn);\n      }\n\n      return config;\n    }\n\n    _getDelegateConfig() {\n      const config = {};\n\n      if (this._config) {\n        for (const key in this._config) {\n          if (this.constructor.Default[key] !== this._config[key]) {\n            config[key] = this._config[key];\n          }\n        }\n      }\n\n      return config;\n    }\n\n    _cleanTipClass() {\n      const tip = this.getTipElement();\n      const tabClass = tip.getAttribute('class').match(BSCLS_PREFIX_REGEX$1);\n\n      if (tabClass !== null && tabClass.length > 0) {\n        tabClass.map(token => token.trim()).forEach(tClass => tip.classList.remove(tClass));\n      }\n    }\n\n    _handlePopperPlacementChange(popperData) {\n      const {\n        state\n      } = popperData;\n\n      if (!state) {\n        return;\n      }\n\n      this.tip = state.elements.popper;\n\n      this._cleanTipClass();\n\n      this._addAttachmentClass(this._getAttachment(state.placement));\n    } // Static\n\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = Tooltip.getOrCreateInstance(this, config);\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(`No method named \"${config}\"`);\n          }\n\n          data[config]();\n        }\n      });\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Tooltip to jQuery only if jQuery is present\n   */\n\n\n  defineJQueryPlugin(Tooltip);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): popover.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$3 = 'popover';\n  const DATA_KEY$3 = 'bs.popover';\n  const EVENT_KEY$3 = `.${DATA_KEY$3}`;\n  const CLASS_PREFIX = 'bs-popover';\n  const BSCLS_PREFIX_REGEX = new RegExp(`(^|\\\\s)${CLASS_PREFIX}\\\\S+`, 'g');\n  const Default$2 = { ...Tooltip.Default,\n    placement: 'right',\n    offset: [0, 8],\n    trigger: 'click',\n    content: '',\n    template: '<div class=\"popover\" role=\"tooltip\">' + '<div class=\"popover-arrow\"></div>' + '<h3 class=\"popover-header\"></h3>' + '<div class=\"popover-body\"></div>' + '</div>'\n  };\n  const DefaultType$2 = { ...Tooltip.DefaultType,\n    content: '(string|element|function)'\n  };\n  const Event$1 = {\n    HIDE: `hide${EVENT_KEY$3}`,\n    HIDDEN: `hidden${EVENT_KEY$3}`,\n    SHOW: `show${EVENT_KEY$3}`,\n    SHOWN: `shown${EVENT_KEY$3}`,\n    INSERTED: `inserted${EVENT_KEY$3}`,\n    CLICK: `click${EVENT_KEY$3}`,\n    FOCUSIN: `focusin${EVENT_KEY$3}`,\n    FOCUSOUT: `focusout${EVENT_KEY$3}`,\n    MOUSEENTER: `mouseenter${EVENT_KEY$3}`,\n    MOUSELEAVE: `mouseleave${EVENT_KEY$3}`\n  };\n  const CLASS_NAME_FADE$2 = 'fade';\n  const CLASS_NAME_SHOW$2 = 'show';\n  const SELECTOR_TITLE = '.popover-header';\n  const SELECTOR_CONTENT = '.popover-body';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Popover extends Tooltip {\n    // Getters\n    static get Default() {\n      return Default$2;\n    }\n\n    static get NAME() {\n      return NAME$3;\n    }\n\n    static get Event() {\n      return Event$1;\n    }\n\n    static get DefaultType() {\n      return DefaultType$2;\n    } // Overrides\n\n\n    isWithContent() {\n      return this.getTitle() || this._getContent();\n    }\n\n    getTipElement() {\n      if (this.tip) {\n        return this.tip;\n      }\n\n      this.tip = super.getTipElement();\n\n      if (!this.getTitle()) {\n        SelectorEngine.findOne(SELECTOR_TITLE, this.tip).remove();\n      }\n\n      if (!this._getContent()) {\n        SelectorEngine.findOne(SELECTOR_CONTENT, this.tip).remove();\n      }\n\n      return this.tip;\n    }\n\n    setContent() {\n      const tip = this.getTipElement(); // we use append for html objects to maintain js events\n\n      this.setElementContent(SelectorEngine.findOne(SELECTOR_TITLE, tip), this.getTitle());\n\n      let content = this._getContent();\n\n      if (typeof content === 'function') {\n        content = content.call(this._element);\n      }\n\n      this.setElementContent(SelectorEngine.findOne(SELECTOR_CONTENT, tip), content);\n      tip.classList.remove(CLASS_NAME_FADE$2, CLASS_NAME_SHOW$2);\n    } // Private\n\n\n    _addAttachmentClass(attachment) {\n      this.getTipElement().classList.add(`${CLASS_PREFIX}-${this.updateAttachment(attachment)}`);\n    }\n\n    _getContent() {\n      return this._element.getAttribute('data-bs-content') || this._config.content;\n    }\n\n    _cleanTipClass() {\n      const tip = this.getTipElement();\n      const tabClass = tip.getAttribute('class').match(BSCLS_PREFIX_REGEX);\n\n      if (tabClass !== null && tabClass.length > 0) {\n        tabClass.map(token => token.trim()).forEach(tClass => tip.classList.remove(tClass));\n      }\n    } // Static\n\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = Popover.getOrCreateInstance(this, config);\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(`No method named \"${config}\"`);\n          }\n\n          data[config]();\n        }\n      });\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Popover to jQuery only if jQuery is present\n   */\n\n\n  defineJQueryPlugin(Popover);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): scrollspy.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$2 = 'scrollspy';\n  const DATA_KEY$2 = 'bs.scrollspy';\n  const EVENT_KEY$2 = `.${DATA_KEY$2}`;\n  const DATA_API_KEY$1 = '.data-api';\n  const Default$1 = {\n    offset: 10,\n    method: 'auto',\n    target: ''\n  };\n  const DefaultType$1 = {\n    offset: 'number',\n    method: 'string',\n    target: '(string|element)'\n  };\n  const EVENT_ACTIVATE = `activate${EVENT_KEY$2}`;\n  const EVENT_SCROLL = `scroll${EVENT_KEY$2}`;\n  const EVENT_LOAD_DATA_API = `load${EVENT_KEY$2}${DATA_API_KEY$1}`;\n  const CLASS_NAME_DROPDOWN_ITEM = 'dropdown-item';\n  const CLASS_NAME_ACTIVE$1 = 'active';\n  const SELECTOR_DATA_SPY = '[data-bs-spy=\"scroll\"]';\n  const SELECTOR_NAV_LIST_GROUP$1 = '.nav, .list-group';\n  const SELECTOR_NAV_LINKS = '.nav-link';\n  const SELECTOR_NAV_ITEMS = '.nav-item';\n  const SELECTOR_LIST_ITEMS = '.list-group-item';\n  const SELECTOR_DROPDOWN$1 = '.dropdown';\n  const SELECTOR_DROPDOWN_TOGGLE$1 = '.dropdown-toggle';\n  const METHOD_OFFSET = 'offset';\n  const METHOD_POSITION = 'position';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class ScrollSpy extends BaseComponent {\n    constructor(element, config) {\n      super(element);\n      this._scrollElement = this._element.tagName === 'BODY' ? window : this._element;\n      this._config = this._getConfig(config);\n      this._selector = `${this._config.target} ${SELECTOR_NAV_LINKS}, ${this._config.target} ${SELECTOR_LIST_ITEMS}, ${this._config.target} .${CLASS_NAME_DROPDOWN_ITEM}`;\n      this._offsets = [];\n      this._targets = [];\n      this._activeTarget = null;\n      this._scrollHeight = 0;\n      EventHandler.on(this._scrollElement, EVENT_SCROLL, () => this._process());\n      this.refresh();\n\n      this._process();\n    } // Getters\n\n\n    static get Default() {\n      return Default$1;\n    }\n\n    static get NAME() {\n      return NAME$2;\n    } // Public\n\n\n    refresh() {\n      const autoMethod = this._scrollElement === this._scrollElement.window ? METHOD_OFFSET : METHOD_POSITION;\n      const offsetMethod = this._config.method === 'auto' ? autoMethod : this._config.method;\n      const offsetBase = offsetMethod === METHOD_POSITION ? this._getScrollTop() : 0;\n      this._offsets = [];\n      this._targets = [];\n      this._scrollHeight = this._getScrollHeight();\n      const targets = SelectorEngine.find(this._selector);\n      targets.map(element => {\n        const targetSelector = getSelectorFromElement(element);\n        const target = targetSelector ? SelectorEngine.findOne(targetSelector) : null;\n\n        if (target) {\n          const targetBCR = target.getBoundingClientRect();\n\n          if (targetBCR.width || targetBCR.height) {\n            return [Manipulator[offsetMethod](target).top + offsetBase, targetSelector];\n          }\n        }\n\n        return null;\n      }).filter(item => item).sort((a, b) => a[0] - b[0]).forEach(item => {\n        this._offsets.push(item[0]);\n\n        this._targets.push(item[1]);\n      });\n    }\n\n    dispose() {\n      EventHandler.off(this._scrollElement, EVENT_KEY$2);\n      super.dispose();\n    } // Private\n\n\n    _getConfig(config) {\n      config = { ...Default$1,\n        ...Manipulator.getDataAttributes(this._element),\n        ...(typeof config === 'object' && config ? config : {})\n      };\n\n      if (typeof config.target !== 'string' && isElement$1(config.target)) {\n        let {\n          id\n        } = config.target;\n\n        if (!id) {\n          id = getUID(NAME$2);\n          config.target.id = id;\n        }\n\n        config.target = `#${id}`;\n      }\n\n      typeCheckConfig(NAME$2, config, DefaultType$1);\n      return config;\n    }\n\n    _getScrollTop() {\n      return this._scrollElement === window ? this._scrollElement.pageYOffset : this._scrollElement.scrollTop;\n    }\n\n    _getScrollHeight() {\n      return this._scrollElement.scrollHeight || Math.max(document.body.scrollHeight, document.documentElement.scrollHeight);\n    }\n\n    _getOffsetHeight() {\n      return this._scrollElement === window ? window.innerHeight : this._scrollElement.getBoundingClientRect().height;\n    }\n\n    _process() {\n      const scrollTop = this._getScrollTop() + this._config.offset;\n\n      const scrollHeight = this._getScrollHeight();\n\n      const maxScroll = this._config.offset + scrollHeight - this._getOffsetHeight();\n\n      if (this._scrollHeight !== scrollHeight) {\n        this.refresh();\n      }\n\n      if (scrollTop >= maxScroll) {\n        const target = this._targets[this._targets.length - 1];\n\n        if (this._activeTarget !== target) {\n          this._activate(target);\n        }\n\n        return;\n      }\n\n      if (this._activeTarget && scrollTop < this._offsets[0] && this._offsets[0] > 0) {\n        this._activeTarget = null;\n\n        this._clear();\n\n        return;\n      }\n\n      for (let i = this._offsets.length; i--;) {\n        const isActiveTarget = this._activeTarget !== this._targets[i] && scrollTop >= this._offsets[i] && (typeof this._offsets[i + 1] === 'undefined' || scrollTop < this._offsets[i + 1]);\n\n        if (isActiveTarget) {\n          this._activate(this._targets[i]);\n        }\n      }\n    }\n\n    _activate(target) {\n      this._activeTarget = target;\n\n      this._clear();\n\n      const queries = this._selector.split(',').map(selector => `${selector}[data-bs-target=\"${target}\"],${selector}[href=\"${target}\"]`);\n\n      const link = SelectorEngine.findOne(queries.join(','));\n\n      if (link.classList.contains(CLASS_NAME_DROPDOWN_ITEM)) {\n        SelectorEngine.findOne(SELECTOR_DROPDOWN_TOGGLE$1, link.closest(SELECTOR_DROPDOWN$1)).classList.add(CLASS_NAME_ACTIVE$1);\n        link.classList.add(CLASS_NAME_ACTIVE$1);\n      } else {\n        // Set triggered link as active\n        link.classList.add(CLASS_NAME_ACTIVE$1);\n        SelectorEngine.parents(link, SELECTOR_NAV_LIST_GROUP$1).forEach(listGroup => {\n          // Set triggered links parents as active\n          // With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor\n          SelectorEngine.prev(listGroup, `${SELECTOR_NAV_LINKS}, ${SELECTOR_LIST_ITEMS}`).forEach(item => item.classList.add(CLASS_NAME_ACTIVE$1)); // Handle special case when .nav-link is inside .nav-item\n\n          SelectorEngine.prev(listGroup, SELECTOR_NAV_ITEMS).forEach(navItem => {\n            SelectorEngine.children(navItem, SELECTOR_NAV_LINKS).forEach(item => item.classList.add(CLASS_NAME_ACTIVE$1));\n          });\n        });\n      }\n\n      EventHandler.trigger(this._scrollElement, EVENT_ACTIVATE, {\n        relatedTarget: target\n      });\n    }\n\n    _clear() {\n      SelectorEngine.find(this._selector).filter(node => node.classList.contains(CLASS_NAME_ACTIVE$1)).forEach(node => node.classList.remove(CLASS_NAME_ACTIVE$1));\n    } // Static\n\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = ScrollSpy.getOrCreateInstance(this, config);\n\n        if (typeof config !== 'string') {\n          return;\n        }\n\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config]();\n      });\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n    SelectorEngine.find(SELECTOR_DATA_SPY).forEach(spy => new ScrollSpy(spy));\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .ScrollSpy to jQuery only if jQuery is present\n   */\n\n  defineJQueryPlugin(ScrollSpy);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): tab.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$1 = 'tab';\n  const DATA_KEY$1 = 'bs.tab';\n  const EVENT_KEY$1 = `.${DATA_KEY$1}`;\n  const DATA_API_KEY = '.data-api';\n  const EVENT_HIDE$1 = `hide${EVENT_KEY$1}`;\n  const EVENT_HIDDEN$1 = `hidden${EVENT_KEY$1}`;\n  const EVENT_SHOW$1 = `show${EVENT_KEY$1}`;\n  const EVENT_SHOWN$1 = `shown${EVENT_KEY$1}`;\n  const EVENT_CLICK_DATA_API = `click${EVENT_KEY$1}${DATA_API_KEY}`;\n  const CLASS_NAME_DROPDOWN_MENU = 'dropdown-menu';\n  const CLASS_NAME_ACTIVE = 'active';\n  const CLASS_NAME_FADE$1 = 'fade';\n  const CLASS_NAME_SHOW$1 = 'show';\n  const SELECTOR_DROPDOWN = '.dropdown';\n  const SELECTOR_NAV_LIST_GROUP = '.nav, .list-group';\n  const SELECTOR_ACTIVE = '.active';\n  const SELECTOR_ACTIVE_UL = ':scope > li > .active';\n  const SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"tab\"], [data-bs-toggle=\"pill\"], [data-bs-toggle=\"list\"]';\n  const SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle';\n  const SELECTOR_DROPDOWN_ACTIVE_CHILD = ':scope > .dropdown-menu .active';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Tab extends BaseComponent {\n    // Getters\n    static get NAME() {\n      return NAME$1;\n    } // Public\n\n\n    show() {\n      if (this._element.parentNode && this._element.parentNode.nodeType === Node.ELEMENT_NODE && this._element.classList.contains(CLASS_NAME_ACTIVE)) {\n        return;\n      }\n\n      let previous;\n      const target = getElementFromSelector(this._element);\n\n      const listElement = this._element.closest(SELECTOR_NAV_LIST_GROUP);\n\n      if (listElement) {\n        const itemSelector = listElement.nodeName === 'UL' || listElement.nodeName === 'OL' ? SELECTOR_ACTIVE_UL : SELECTOR_ACTIVE;\n        previous = SelectorEngine.find(itemSelector, listElement);\n        previous = previous[previous.length - 1];\n      }\n\n      const hideEvent = previous ? EventHandler.trigger(previous, EVENT_HIDE$1, {\n        relatedTarget: this._element\n      }) : null;\n      const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$1, {\n        relatedTarget: previous\n      });\n\n      if (showEvent.defaultPrevented || hideEvent !== null && hideEvent.defaultPrevented) {\n        return;\n      }\n\n      this._activate(this._element, listElement);\n\n      const complete = () => {\n        EventHandler.trigger(previous, EVENT_HIDDEN$1, {\n          relatedTarget: this._element\n        });\n        EventHandler.trigger(this._element, EVENT_SHOWN$1, {\n          relatedTarget: previous\n        });\n      };\n\n      if (target) {\n        this._activate(target, target.parentNode, complete);\n      } else {\n        complete();\n      }\n    } // Private\n\n\n    _activate(element, container, callback) {\n      const activeElements = container && (container.nodeName === 'UL' || container.nodeName === 'OL') ? SelectorEngine.find(SELECTOR_ACTIVE_UL, container) : SelectorEngine.children(container, SELECTOR_ACTIVE);\n      const active = activeElements[0];\n      const isTransitioning = callback && active && active.classList.contains(CLASS_NAME_FADE$1);\n\n      const complete = () => this._transitionComplete(element, active, callback);\n\n      if (active && isTransitioning) {\n        active.classList.remove(CLASS_NAME_SHOW$1);\n\n        this._queueCallback(complete, element, true);\n      } else {\n        complete();\n      }\n    }\n\n    _transitionComplete(element, active, callback) {\n      if (active) {\n        active.classList.remove(CLASS_NAME_ACTIVE);\n        const dropdownChild = SelectorEngine.findOne(SELECTOR_DROPDOWN_ACTIVE_CHILD, active.parentNode);\n\n        if (dropdownChild) {\n          dropdownChild.classList.remove(CLASS_NAME_ACTIVE);\n        }\n\n        if (active.getAttribute('role') === 'tab') {\n          active.setAttribute('aria-selected', false);\n        }\n      }\n\n      element.classList.add(CLASS_NAME_ACTIVE);\n\n      if (element.getAttribute('role') === 'tab') {\n        element.setAttribute('aria-selected', true);\n      }\n\n      reflow(element);\n\n      if (element.classList.contains(CLASS_NAME_FADE$1)) {\n        element.classList.add(CLASS_NAME_SHOW$1);\n      }\n\n      let parent = element.parentNode;\n\n      if (parent && parent.nodeName === 'LI') {\n        parent = parent.parentNode;\n      }\n\n      if (parent && parent.classList.contains(CLASS_NAME_DROPDOWN_MENU)) {\n        const dropdownElement = element.closest(SELECTOR_DROPDOWN);\n\n        if (dropdownElement) {\n          SelectorEngine.find(SELECTOR_DROPDOWN_TOGGLE, dropdownElement).forEach(dropdown => dropdown.classList.add(CLASS_NAME_ACTIVE));\n        }\n\n        element.setAttribute('aria-expanded', true);\n      }\n\n      if (callback) {\n        callback();\n      }\n    } // Static\n\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = Tab.getOrCreateInstance(this);\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(`No method named \"${config}\"`);\n          }\n\n          data[config]();\n        }\n      });\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n    if (['A', 'AREA'].includes(this.tagName)) {\n      event.preventDefault();\n    }\n\n    if (isDisabled(this)) {\n      return;\n    }\n\n    const data = Tab.getOrCreateInstance(this);\n    data.show();\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Tab to jQuery only if jQuery is present\n   */\n\n  defineJQueryPlugin(Tab);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): toast.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME = 'toast';\n  const DATA_KEY = 'bs.toast';\n  const EVENT_KEY = `.${DATA_KEY}`;\n  const EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY}`;\n  const EVENT_MOUSEOVER = `mouseover${EVENT_KEY}`;\n  const EVENT_MOUSEOUT = `mouseout${EVENT_KEY}`;\n  const EVENT_FOCUSIN = `focusin${EVENT_KEY}`;\n  const EVENT_FOCUSOUT = `focusout${EVENT_KEY}`;\n  const EVENT_HIDE = `hide${EVENT_KEY}`;\n  const EVENT_HIDDEN = `hidden${EVENT_KEY}`;\n  const EVENT_SHOW = `show${EVENT_KEY}`;\n  const EVENT_SHOWN = `shown${EVENT_KEY}`;\n  const CLASS_NAME_FADE = 'fade';\n  const CLASS_NAME_HIDE = 'hide';\n  const CLASS_NAME_SHOW = 'show';\n  const CLASS_NAME_SHOWING = 'showing';\n  const DefaultType = {\n    animation: 'boolean',\n    autohide: 'boolean',\n    delay: 'number'\n  };\n  const Default = {\n    animation: true,\n    autohide: true,\n    delay: 5000\n  };\n  const SELECTOR_DATA_DISMISS = '[data-bs-dismiss=\"toast\"]';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Toast extends BaseComponent {\n    constructor(element, config) {\n      super(element);\n      this._config = this._getConfig(config);\n      this._timeout = null;\n      this._hasMouseInteraction = false;\n      this._hasKeyboardInteraction = false;\n\n      this._setListeners();\n    } // Getters\n\n\n    static get DefaultType() {\n      return DefaultType;\n    }\n\n    static get Default() {\n      return Default;\n    }\n\n    static get NAME() {\n      return NAME;\n    } // Public\n\n\n    show() {\n      const showEvent = EventHandler.trigger(this._element, EVENT_SHOW);\n\n      if (showEvent.defaultPrevented) {\n        return;\n      }\n\n      this._clearTimeout();\n\n      if (this._config.animation) {\n        this._element.classList.add(CLASS_NAME_FADE);\n      }\n\n      const complete = () => {\n        this._element.classList.remove(CLASS_NAME_SHOWING);\n\n        this._element.classList.add(CLASS_NAME_SHOW);\n\n        EventHandler.trigger(this._element, EVENT_SHOWN);\n\n        this._maybeScheduleHide();\n      };\n\n      this._element.classList.remove(CLASS_NAME_HIDE);\n\n      reflow(this._element);\n\n      this._element.classList.add(CLASS_NAME_SHOWING);\n\n      this._queueCallback(complete, this._element, this._config.animation);\n    }\n\n    hide() {\n      if (!this._element.classList.contains(CLASS_NAME_SHOW)) {\n        return;\n      }\n\n      const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE);\n\n      if (hideEvent.defaultPrevented) {\n        return;\n      }\n\n      const complete = () => {\n        this._element.classList.add(CLASS_NAME_HIDE);\n\n        EventHandler.trigger(this._element, EVENT_HIDDEN);\n      };\n\n      this._element.classList.remove(CLASS_NAME_SHOW);\n\n      this._queueCallback(complete, this._element, this._config.animation);\n    }\n\n    dispose() {\n      this._clearTimeout();\n\n      if (this._element.classList.contains(CLASS_NAME_SHOW)) {\n        this._element.classList.remove(CLASS_NAME_SHOW);\n      }\n\n      super.dispose();\n    } // Private\n\n\n    _getConfig(config) {\n      config = { ...Default,\n        ...Manipulator.getDataAttributes(this._element),\n        ...(typeof config === 'object' && config ? config : {})\n      };\n      typeCheckConfig(NAME, config, this.constructor.DefaultType);\n      return config;\n    }\n\n    _maybeScheduleHide() {\n      if (!this._config.autohide) {\n        return;\n      }\n\n      if (this._hasMouseInteraction || this._hasKeyboardInteraction) {\n        return;\n      }\n\n      this._timeout = setTimeout(() => {\n        this.hide();\n      }, this._config.delay);\n    }\n\n    _onInteraction(event, isInteracting) {\n      switch (event.type) {\n        case 'mouseover':\n        case 'mouseout':\n          this._hasMouseInteraction = isInteracting;\n          break;\n\n        case 'focusin':\n        case 'focusout':\n          this._hasKeyboardInteraction = isInteracting;\n          break;\n      }\n\n      if (isInteracting) {\n        this._clearTimeout();\n\n        return;\n      }\n\n      const nextElement = event.relatedTarget;\n\n      if (this._element === nextElement || this._element.contains(nextElement)) {\n        return;\n      }\n\n      this._maybeScheduleHide();\n    }\n\n    _setListeners() {\n      EventHandler.on(this._element, EVENT_CLICK_DISMISS, SELECTOR_DATA_DISMISS, () => this.hide());\n      EventHandler.on(this._element, EVENT_MOUSEOVER, event => this._onInteraction(event, true));\n      EventHandler.on(this._element, EVENT_MOUSEOUT, event => this._onInteraction(event, false));\n      EventHandler.on(this._element, EVENT_FOCUSIN, event => this._onInteraction(event, true));\n      EventHandler.on(this._element, EVENT_FOCUSOUT, event => this._onInteraction(event, false));\n    }\n\n    _clearTimeout() {\n      clearTimeout(this._timeout);\n      this._timeout = null;\n    } // Static\n\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = Toast.getOrCreateInstance(this, config);\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(`No method named \"${config}\"`);\n          }\n\n          data[config](this);\n        }\n      });\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Toast to jQuery only if jQuery is present\n   */\n\n\n  defineJQueryPlugin(Toast);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): index.umd.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  var index_umd = {\n    Alert,\n    Button,\n    Carousel,\n    Collapse,\n    Dropdown,\n    Modal,\n    Offcanvas,\n    Popover,\n    ScrollSpy,\n    Tab,\n    Toast,\n    Tooltip\n  };\n\n  return index_umd;\n\n})));\n//# sourceMappingURL=bootstrap.bundle.js.map\n"
  },
  {
    "path": "src/sourceDev.WebApp/SharedThemes/lumen/wwwroot/js/bootstrap.esm.js",
    "content": "/*!\n  * Bootstrap v5.0.2 (https://getbootstrap.com/)\n  * Copyright 2011-2021 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)\n  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n  */\nimport * as Popper from '@popperjs/core';\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): dom/selector-engine.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\nconst NODE_TEXT = 3;\nconst SelectorEngine = {\n  find(selector, element = document.documentElement) {\n    return [].concat(...Element.prototype.querySelectorAll.call(element, selector));\n  },\n\n  findOne(selector, element = document.documentElement) {\n    return Element.prototype.querySelector.call(element, selector);\n  },\n\n  children(element, selector) {\n    return [].concat(...element.children).filter(child => child.matches(selector));\n  },\n\n  parents(element, selector) {\n    const parents = [];\n    let ancestor = element.parentNode;\n\n    while (ancestor && ancestor.nodeType === Node.ELEMENT_NODE && ancestor.nodeType !== NODE_TEXT) {\n      if (ancestor.matches(selector)) {\n        parents.push(ancestor);\n      }\n\n      ancestor = ancestor.parentNode;\n    }\n\n    return parents;\n  },\n\n  prev(element, selector) {\n    let previous = element.previousElementSibling;\n\n    while (previous) {\n      if (previous.matches(selector)) {\n        return [previous];\n      }\n\n      previous = previous.previousElementSibling;\n    }\n\n    return [];\n  },\n\n  next(element, selector) {\n    let next = element.nextElementSibling;\n\n    while (next) {\n      if (next.matches(selector)) {\n        return [next];\n      }\n\n      next = next.nextElementSibling;\n    }\n\n    return [];\n  }\n\n};\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): util/index.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst MAX_UID = 1000000;\nconst MILLISECONDS_MULTIPLIER = 1000;\nconst TRANSITION_END = 'transitionend'; // Shoutout AngusCroll (https://goo.gl/pxwQGp)\n\nconst toType = obj => {\n  if (obj === null || obj === undefined) {\n    return `${obj}`;\n  }\n\n  return {}.toString.call(obj).match(/\\s([a-z]+)/i)[1].toLowerCase();\n};\n/**\n * --------------------------------------------------------------------------\n * Public Util Api\n * --------------------------------------------------------------------------\n */\n\n\nconst getUID = prefix => {\n  do {\n    prefix += Math.floor(Math.random() * MAX_UID);\n  } while (document.getElementById(prefix));\n\n  return prefix;\n};\n\nconst getSelector = element => {\n  let selector = element.getAttribute('data-bs-target');\n\n  if (!selector || selector === '#') {\n    let hrefAttr = element.getAttribute('href'); // The only valid content that could double as a selector are IDs or classes,\n    // so everything starting with `#` or `.`. If a \"real\" URL is used as the selector,\n    // `document.querySelector` will rightfully complain it is invalid.\n    // See https://github.com/twbs/bootstrap/issues/32273\n\n    if (!hrefAttr || !hrefAttr.includes('#') && !hrefAttr.startsWith('.')) {\n      return null;\n    } // Just in case some CMS puts out a full URL with the anchor appended\n\n\n    if (hrefAttr.includes('#') && !hrefAttr.startsWith('#')) {\n      hrefAttr = `#${hrefAttr.split('#')[1]}`;\n    }\n\n    selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : null;\n  }\n\n  return selector;\n};\n\nconst getSelectorFromElement = element => {\n  const selector = getSelector(element);\n\n  if (selector) {\n    return document.querySelector(selector) ? selector : null;\n  }\n\n  return null;\n};\n\nconst getElementFromSelector = element => {\n  const selector = getSelector(element);\n  return selector ? document.querySelector(selector) : null;\n};\n\nconst getTransitionDurationFromElement = element => {\n  if (!element) {\n    return 0;\n  } // Get transition-duration of the element\n\n\n  let {\n    transitionDuration,\n    transitionDelay\n  } = window.getComputedStyle(element);\n  const floatTransitionDuration = Number.parseFloat(transitionDuration);\n  const floatTransitionDelay = Number.parseFloat(transitionDelay); // Return 0 if element or transition duration is not found\n\n  if (!floatTransitionDuration && !floatTransitionDelay) {\n    return 0;\n  } // If multiple durations are defined, take the first\n\n\n  transitionDuration = transitionDuration.split(',')[0];\n  transitionDelay = transitionDelay.split(',')[0];\n  return (Number.parseFloat(transitionDuration) + Number.parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER;\n};\n\nconst triggerTransitionEnd = element => {\n  element.dispatchEvent(new Event(TRANSITION_END));\n};\n\nconst isElement = obj => {\n  if (!obj || typeof obj !== 'object') {\n    return false;\n  }\n\n  if (typeof obj.jquery !== 'undefined') {\n    obj = obj[0];\n  }\n\n  return typeof obj.nodeType !== 'undefined';\n};\n\nconst getElement = obj => {\n  if (isElement(obj)) {\n    // it's a jQuery object or a node element\n    return obj.jquery ? obj[0] : obj;\n  }\n\n  if (typeof obj === 'string' && obj.length > 0) {\n    return SelectorEngine.findOne(obj);\n  }\n\n  return null;\n};\n\nconst typeCheckConfig = (componentName, config, configTypes) => {\n  Object.keys(configTypes).forEach(property => {\n    const expectedTypes = configTypes[property];\n    const value = config[property];\n    const valueType = value && isElement(value) ? 'element' : toType(value);\n\n    if (!new RegExp(expectedTypes).test(valueType)) {\n      throw new TypeError(`${componentName.toUpperCase()}: Option \"${property}\" provided type \"${valueType}\" but expected type \"${expectedTypes}\".`);\n    }\n  });\n};\n\nconst isVisible = element => {\n  if (!isElement(element) || element.getClientRects().length === 0) {\n    return false;\n  }\n\n  return getComputedStyle(element).getPropertyValue('visibility') === 'visible';\n};\n\nconst isDisabled = element => {\n  if (!element || element.nodeType !== Node.ELEMENT_NODE) {\n    return true;\n  }\n\n  if (element.classList.contains('disabled')) {\n    return true;\n  }\n\n  if (typeof element.disabled !== 'undefined') {\n    return element.disabled;\n  }\n\n  return element.hasAttribute('disabled') && element.getAttribute('disabled') !== 'false';\n};\n\nconst findShadowRoot = element => {\n  if (!document.documentElement.attachShadow) {\n    return null;\n  } // Can find the shadow root otherwise it'll return the document\n\n\n  if (typeof element.getRootNode === 'function') {\n    const root = element.getRootNode();\n    return root instanceof ShadowRoot ? root : null;\n  }\n\n  if (element instanceof ShadowRoot) {\n    return element;\n  } // when we don't find a shadow root\n\n\n  if (!element.parentNode) {\n    return null;\n  }\n\n  return findShadowRoot(element.parentNode);\n};\n\nconst noop = () => {};\n\nconst reflow = element => element.offsetHeight;\n\nconst getjQuery = () => {\n  const {\n    jQuery\n  } = window;\n\n  if (jQuery && !document.body.hasAttribute('data-bs-no-jquery')) {\n    return jQuery;\n  }\n\n  return null;\n};\n\nconst DOMContentLoadedCallbacks = [];\n\nconst onDOMContentLoaded = callback => {\n  if (document.readyState === 'loading') {\n    // add listener on the first call when the document is in loading state\n    if (!DOMContentLoadedCallbacks.length) {\n      document.addEventListener('DOMContentLoaded', () => {\n        DOMContentLoadedCallbacks.forEach(callback => callback());\n      });\n    }\n\n    DOMContentLoadedCallbacks.push(callback);\n  } else {\n    callback();\n  }\n};\n\nconst isRTL = () => document.documentElement.dir === 'rtl';\n\nconst defineJQueryPlugin = plugin => {\n  onDOMContentLoaded(() => {\n    const $ = getjQuery();\n    /* istanbul ignore if */\n\n    if ($) {\n      const name = plugin.NAME;\n      const JQUERY_NO_CONFLICT = $.fn[name];\n      $.fn[name] = plugin.jQueryInterface;\n      $.fn[name].Constructor = plugin;\n\n      $.fn[name].noConflict = () => {\n        $.fn[name] = JQUERY_NO_CONFLICT;\n        return plugin.jQueryInterface;\n      };\n    }\n  });\n};\n\nconst execute = callback => {\n  if (typeof callback === 'function') {\n    callback();\n  }\n};\n\nconst executeAfterTransition = (callback, transitionElement, waitForTransition = true) => {\n  if (!waitForTransition) {\n    execute(callback);\n    return;\n  }\n\n  const durationPadding = 5;\n  const emulatedDuration = getTransitionDurationFromElement(transitionElement) + durationPadding;\n  let called = false;\n\n  const handler = ({\n    target\n  }) => {\n    if (target !== transitionElement) {\n      return;\n    }\n\n    called = true;\n    transitionElement.removeEventListener(TRANSITION_END, handler);\n    execute(callback);\n  };\n\n  transitionElement.addEventListener(TRANSITION_END, handler);\n  setTimeout(() => {\n    if (!called) {\n      triggerTransitionEnd(transitionElement);\n    }\n  }, emulatedDuration);\n};\n/**\n * Return the previous/next element of a list.\n *\n * @param {array} list    The list of elements\n * @param activeElement   The active element\n * @param shouldGetNext   Choose to get next or previous element\n * @param isCycleAllowed\n * @return {Element|elem} The proper element\n */\n\n\nconst getNextActiveElement = (list, activeElement, shouldGetNext, isCycleAllowed) => {\n  let index = list.indexOf(activeElement); // if the element does not exist in the list return an element depending on the direction and if cycle is allowed\n\n  if (index === -1) {\n    return list[!shouldGetNext && isCycleAllowed ? list.length - 1 : 0];\n  }\n\n  const listLength = list.length;\n  index += shouldGetNext ? 1 : -1;\n\n  if (isCycleAllowed) {\n    index = (index + listLength) % listLength;\n  }\n\n  return list[Math.max(0, Math.min(index, listLength - 1))];\n};\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): dom/event-handler.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst namespaceRegex = /[^.]*(?=\\..*)\\.|.*/;\nconst stripNameRegex = /\\..*/;\nconst stripUidRegex = /::\\d+$/;\nconst eventRegistry = {}; // Events storage\n\nlet uidEvent = 1;\nconst customEvents = {\n  mouseenter: 'mouseover',\n  mouseleave: 'mouseout'\n};\nconst customEventsRegex = /^(mouseenter|mouseleave)/i;\nconst nativeEvents = new Set(['click', 'dblclick', 'mouseup', 'mousedown', 'contextmenu', 'mousewheel', 'DOMMouseScroll', 'mouseover', 'mouseout', 'mousemove', 'selectstart', 'selectend', 'keydown', 'keypress', 'keyup', 'orientationchange', 'touchstart', 'touchmove', 'touchend', 'touchcancel', 'pointerdown', 'pointermove', 'pointerup', 'pointerleave', 'pointercancel', 'gesturestart', 'gesturechange', 'gestureend', 'focus', 'blur', 'change', 'reset', 'select', 'submit', 'focusin', 'focusout', 'load', 'unload', 'beforeunload', 'resize', 'move', 'DOMContentLoaded', 'readystatechange', 'error', 'abort', 'scroll']);\n/**\n * ------------------------------------------------------------------------\n * Private methods\n * ------------------------------------------------------------------------\n */\n\nfunction getUidEvent(element, uid) {\n  return uid && `${uid}::${uidEvent++}` || element.uidEvent || uidEvent++;\n}\n\nfunction getEvent(element) {\n  const uid = getUidEvent(element);\n  element.uidEvent = uid;\n  eventRegistry[uid] = eventRegistry[uid] || {};\n  return eventRegistry[uid];\n}\n\nfunction bootstrapHandler(element, fn) {\n  return function handler(event) {\n    event.delegateTarget = element;\n\n    if (handler.oneOff) {\n      EventHandler.off(element, event.type, fn);\n    }\n\n    return fn.apply(element, [event]);\n  };\n}\n\nfunction bootstrapDelegationHandler(element, selector, fn) {\n  return function handler(event) {\n    const domElements = element.querySelectorAll(selector);\n\n    for (let {\n      target\n    } = event; target && target !== this; target = target.parentNode) {\n      for (let i = domElements.length; i--;) {\n        if (domElements[i] === target) {\n          event.delegateTarget = target;\n\n          if (handler.oneOff) {\n            // eslint-disable-next-line unicorn/consistent-destructuring\n            EventHandler.off(element, event.type, selector, fn);\n          }\n\n          return fn.apply(target, [event]);\n        }\n      }\n    } // To please ESLint\n\n\n    return null;\n  };\n}\n\nfunction findHandler(events, handler, delegationSelector = null) {\n  const uidEventList = Object.keys(events);\n\n  for (let i = 0, len = uidEventList.length; i < len; i++) {\n    const event = events[uidEventList[i]];\n\n    if (event.originalHandler === handler && event.delegationSelector === delegationSelector) {\n      return event;\n    }\n  }\n\n  return null;\n}\n\nfunction normalizeParams(originalTypeEvent, handler, delegationFn) {\n  const delegation = typeof handler === 'string';\n  const originalHandler = delegation ? delegationFn : handler;\n  let typeEvent = getTypeEvent(originalTypeEvent);\n  const isNative = nativeEvents.has(typeEvent);\n\n  if (!isNative) {\n    typeEvent = originalTypeEvent;\n  }\n\n  return [delegation, originalHandler, typeEvent];\n}\n\nfunction addHandler(element, originalTypeEvent, handler, delegationFn, oneOff) {\n  if (typeof originalTypeEvent !== 'string' || !element) {\n    return;\n  }\n\n  if (!handler) {\n    handler = delegationFn;\n    delegationFn = null;\n  } // in case of mouseenter or mouseleave wrap the handler within a function that checks for its DOM position\n  // this prevents the handler from being dispatched the same way as mouseover or mouseout does\n\n\n  if (customEventsRegex.test(originalTypeEvent)) {\n    const wrapFn = fn => {\n      return function (event) {\n        if (!event.relatedTarget || event.relatedTarget !== event.delegateTarget && !event.delegateTarget.contains(event.relatedTarget)) {\n          return fn.call(this, event);\n        }\n      };\n    };\n\n    if (delegationFn) {\n      delegationFn = wrapFn(delegationFn);\n    } else {\n      handler = wrapFn(handler);\n    }\n  }\n\n  const [delegation, originalHandler, typeEvent] = normalizeParams(originalTypeEvent, handler, delegationFn);\n  const events = getEvent(element);\n  const handlers = events[typeEvent] || (events[typeEvent] = {});\n  const previousFn = findHandler(handlers, originalHandler, delegation ? handler : null);\n\n  if (previousFn) {\n    previousFn.oneOff = previousFn.oneOff && oneOff;\n    return;\n  }\n\n  const uid = getUidEvent(originalHandler, originalTypeEvent.replace(namespaceRegex, ''));\n  const fn = delegation ? bootstrapDelegationHandler(element, handler, delegationFn) : bootstrapHandler(element, handler);\n  fn.delegationSelector = delegation ? handler : null;\n  fn.originalHandler = originalHandler;\n  fn.oneOff = oneOff;\n  fn.uidEvent = uid;\n  handlers[uid] = fn;\n  element.addEventListener(typeEvent, fn, delegation);\n}\n\nfunction removeHandler(element, events, typeEvent, handler, delegationSelector) {\n  const fn = findHandler(events[typeEvent], handler, delegationSelector);\n\n  if (!fn) {\n    return;\n  }\n\n  element.removeEventListener(typeEvent, fn, Boolean(delegationSelector));\n  delete events[typeEvent][fn.uidEvent];\n}\n\nfunction removeNamespacedHandlers(element, events, typeEvent, namespace) {\n  const storeElementEvent = events[typeEvent] || {};\n  Object.keys(storeElementEvent).forEach(handlerKey => {\n    if (handlerKey.includes(namespace)) {\n      const event = storeElementEvent[handlerKey];\n      removeHandler(element, events, typeEvent, event.originalHandler, event.delegationSelector);\n    }\n  });\n}\n\nfunction getTypeEvent(event) {\n  // allow to get the native events from namespaced events ('click.bs.button' --> 'click')\n  event = event.replace(stripNameRegex, '');\n  return customEvents[event] || event;\n}\n\nconst EventHandler = {\n  on(element, event, handler, delegationFn) {\n    addHandler(element, event, handler, delegationFn, false);\n  },\n\n  one(element, event, handler, delegationFn) {\n    addHandler(element, event, handler, delegationFn, true);\n  },\n\n  off(element, originalTypeEvent, handler, delegationFn) {\n    if (typeof originalTypeEvent !== 'string' || !element) {\n      return;\n    }\n\n    const [delegation, originalHandler, typeEvent] = normalizeParams(originalTypeEvent, handler, delegationFn);\n    const inNamespace = typeEvent !== originalTypeEvent;\n    const events = getEvent(element);\n    const isNamespace = originalTypeEvent.startsWith('.');\n\n    if (typeof originalHandler !== 'undefined') {\n      // Simplest case: handler is passed, remove that listener ONLY.\n      if (!events || !events[typeEvent]) {\n        return;\n      }\n\n      removeHandler(element, events, typeEvent, originalHandler, delegation ? handler : null);\n      return;\n    }\n\n    if (isNamespace) {\n      Object.keys(events).forEach(elementEvent => {\n        removeNamespacedHandlers(element, events, elementEvent, originalTypeEvent.slice(1));\n      });\n    }\n\n    const storeElementEvent = events[typeEvent] || {};\n    Object.keys(storeElementEvent).forEach(keyHandlers => {\n      const handlerKey = keyHandlers.replace(stripUidRegex, '');\n\n      if (!inNamespace || originalTypeEvent.includes(handlerKey)) {\n        const event = storeElementEvent[keyHandlers];\n        removeHandler(element, events, typeEvent, event.originalHandler, event.delegationSelector);\n      }\n    });\n  },\n\n  trigger(element, event, args) {\n    if (typeof event !== 'string' || !element) {\n      return null;\n    }\n\n    const $ = getjQuery();\n    const typeEvent = getTypeEvent(event);\n    const inNamespace = event !== typeEvent;\n    const isNative = nativeEvents.has(typeEvent);\n    let jQueryEvent;\n    let bubbles = true;\n    let nativeDispatch = true;\n    let defaultPrevented = false;\n    let evt = null;\n\n    if (inNamespace && $) {\n      jQueryEvent = $.Event(event, args);\n      $(element).trigger(jQueryEvent);\n      bubbles = !jQueryEvent.isPropagationStopped();\n      nativeDispatch = !jQueryEvent.isImmediatePropagationStopped();\n      defaultPrevented = jQueryEvent.isDefaultPrevented();\n    }\n\n    if (isNative) {\n      evt = document.createEvent('HTMLEvents');\n      evt.initEvent(typeEvent, bubbles, true);\n    } else {\n      evt = new CustomEvent(event, {\n        bubbles,\n        cancelable: true\n      });\n    } // merge custom information in our event\n\n\n    if (typeof args !== 'undefined') {\n      Object.keys(args).forEach(key => {\n        Object.defineProperty(evt, key, {\n          get() {\n            return args[key];\n          }\n\n        });\n      });\n    }\n\n    if (defaultPrevented) {\n      evt.preventDefault();\n    }\n\n    if (nativeDispatch) {\n      element.dispatchEvent(evt);\n    }\n\n    if (evt.defaultPrevented && typeof jQueryEvent !== 'undefined') {\n      jQueryEvent.preventDefault();\n    }\n\n    return evt;\n  }\n\n};\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): dom/data.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\nconst elementMap = new Map();\nvar Data = {\n  set(element, key, instance) {\n    if (!elementMap.has(element)) {\n      elementMap.set(element, new Map());\n    }\n\n    const instanceMap = elementMap.get(element); // make it clear we only want one instance per element\n    // can be removed later when multiple key/instances are fine to be used\n\n    if (!instanceMap.has(key) && instanceMap.size !== 0) {\n      // eslint-disable-next-line no-console\n      console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(instanceMap.keys())[0]}.`);\n      return;\n    }\n\n    instanceMap.set(key, instance);\n  },\n\n  get(element, key) {\n    if (elementMap.has(element)) {\n      return elementMap.get(element).get(key) || null;\n    }\n\n    return null;\n  },\n\n  remove(element, key) {\n    if (!elementMap.has(element)) {\n      return;\n    }\n\n    const instanceMap = elementMap.get(element);\n    instanceMap.delete(key); // free up element references if there are no instances left for an element\n\n    if (instanceMap.size === 0) {\n      elementMap.delete(element);\n    }\n  }\n\n};\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): base-component.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst VERSION = '5.0.2';\n\nclass BaseComponent {\n  constructor(element) {\n    element = getElement(element);\n\n    if (!element) {\n      return;\n    }\n\n    this._element = element;\n    Data.set(this._element, this.constructor.DATA_KEY, this);\n  }\n\n  dispose() {\n    Data.remove(this._element, this.constructor.DATA_KEY);\n    EventHandler.off(this._element, this.constructor.EVENT_KEY);\n    Object.getOwnPropertyNames(this).forEach(propertyName => {\n      this[propertyName] = null;\n    });\n  }\n\n  _queueCallback(callback, element, isAnimated = true) {\n    executeAfterTransition(callback, element, isAnimated);\n  }\n  /** Static */\n\n\n  static getInstance(element) {\n    return Data.get(element, this.DATA_KEY);\n  }\n\n  static getOrCreateInstance(element, config = {}) {\n    return this.getInstance(element) || new this(element, typeof config === 'object' ? config : null);\n  }\n\n  static get VERSION() {\n    return VERSION;\n  }\n\n  static get NAME() {\n    throw new Error('You have to implement the static method \"NAME\", for each component!');\n  }\n\n  static get DATA_KEY() {\n    return `bs.${this.NAME}`;\n  }\n\n  static get EVENT_KEY() {\n    return `.${this.DATA_KEY}`;\n  }\n\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): alert.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$c = 'alert';\nconst DATA_KEY$b = 'bs.alert';\nconst EVENT_KEY$b = `.${DATA_KEY$b}`;\nconst DATA_API_KEY$8 = '.data-api';\nconst SELECTOR_DISMISS = '[data-bs-dismiss=\"alert\"]';\nconst EVENT_CLOSE = `close${EVENT_KEY$b}`;\nconst EVENT_CLOSED = `closed${EVENT_KEY$b}`;\nconst EVENT_CLICK_DATA_API$7 = `click${EVENT_KEY$b}${DATA_API_KEY$8}`;\nconst CLASS_NAME_ALERT = 'alert';\nconst CLASS_NAME_FADE$6 = 'fade';\nconst CLASS_NAME_SHOW$9 = 'show';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Alert extends BaseComponent {\n  // Getters\n  static get NAME() {\n    return NAME$c;\n  } // Public\n\n\n  close(element) {\n    const rootElement = element ? this._getRootElement(element) : this._element;\n\n    const customEvent = this._triggerCloseEvent(rootElement);\n\n    if (customEvent === null || customEvent.defaultPrevented) {\n      return;\n    }\n\n    this._removeElement(rootElement);\n  } // Private\n\n\n  _getRootElement(element) {\n    return getElementFromSelector(element) || element.closest(`.${CLASS_NAME_ALERT}`);\n  }\n\n  _triggerCloseEvent(element) {\n    return EventHandler.trigger(element, EVENT_CLOSE);\n  }\n\n  _removeElement(element) {\n    element.classList.remove(CLASS_NAME_SHOW$9);\n    const isAnimated = element.classList.contains(CLASS_NAME_FADE$6);\n\n    this._queueCallback(() => this._destroyElement(element), element, isAnimated);\n  }\n\n  _destroyElement(element) {\n    element.remove();\n    EventHandler.trigger(element, EVENT_CLOSED);\n  } // Static\n\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Alert.getOrCreateInstance(this);\n\n      if (config === 'close') {\n        data[config](this);\n      }\n    });\n  }\n\n  static handleDismiss(alertInstance) {\n    return function (event) {\n      if (event) {\n        event.preventDefault();\n      }\n\n      alertInstance.close(this);\n    };\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$7, SELECTOR_DISMISS, Alert.handleDismiss(new Alert()));\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Alert to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Alert);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): button.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$b = 'button';\nconst DATA_KEY$a = 'bs.button';\nconst EVENT_KEY$a = `.${DATA_KEY$a}`;\nconst DATA_API_KEY$7 = '.data-api';\nconst CLASS_NAME_ACTIVE$3 = 'active';\nconst SELECTOR_DATA_TOGGLE$5 = '[data-bs-toggle=\"button\"]';\nconst EVENT_CLICK_DATA_API$6 = `click${EVENT_KEY$a}${DATA_API_KEY$7}`;\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Button extends BaseComponent {\n  // Getters\n  static get NAME() {\n    return NAME$b;\n  } // Public\n\n\n  toggle() {\n    // Toggle class and sync the `aria-pressed` attribute with the return value of the `.toggle()` method\n    this._element.setAttribute('aria-pressed', this._element.classList.toggle(CLASS_NAME_ACTIVE$3));\n  } // Static\n\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Button.getOrCreateInstance(this);\n\n      if (config === 'toggle') {\n        data[config]();\n      }\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$6, SELECTOR_DATA_TOGGLE$5, event => {\n  event.preventDefault();\n  const button = event.target.closest(SELECTOR_DATA_TOGGLE$5);\n  const data = Button.getOrCreateInstance(button);\n  data.toggle();\n});\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Button to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Button);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): dom/manipulator.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\nfunction normalizeData(val) {\n  if (val === 'true') {\n    return true;\n  }\n\n  if (val === 'false') {\n    return false;\n  }\n\n  if (val === Number(val).toString()) {\n    return Number(val);\n  }\n\n  if (val === '' || val === 'null') {\n    return null;\n  }\n\n  return val;\n}\n\nfunction normalizeDataKey(key) {\n  return key.replace(/[A-Z]/g, chr => `-${chr.toLowerCase()}`);\n}\n\nconst Manipulator = {\n  setDataAttribute(element, key, value) {\n    element.setAttribute(`data-bs-${normalizeDataKey(key)}`, value);\n  },\n\n  removeDataAttribute(element, key) {\n    element.removeAttribute(`data-bs-${normalizeDataKey(key)}`);\n  },\n\n  getDataAttributes(element) {\n    if (!element) {\n      return {};\n    }\n\n    const attributes = {};\n    Object.keys(element.dataset).filter(key => key.startsWith('bs')).forEach(key => {\n      let pureKey = key.replace(/^bs/, '');\n      pureKey = pureKey.charAt(0).toLowerCase() + pureKey.slice(1, pureKey.length);\n      attributes[pureKey] = normalizeData(element.dataset[key]);\n    });\n    return attributes;\n  },\n\n  getDataAttribute(element, key) {\n    return normalizeData(element.getAttribute(`data-bs-${normalizeDataKey(key)}`));\n  },\n\n  offset(element) {\n    const rect = element.getBoundingClientRect();\n    return {\n      top: rect.top + document.body.scrollTop,\n      left: rect.left + document.body.scrollLeft\n    };\n  },\n\n  position(element) {\n    return {\n      top: element.offsetTop,\n      left: element.offsetLeft\n    };\n  }\n\n};\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): carousel.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$a = 'carousel';\nconst DATA_KEY$9 = 'bs.carousel';\nconst EVENT_KEY$9 = `.${DATA_KEY$9}`;\nconst DATA_API_KEY$6 = '.data-api';\nconst ARROW_LEFT_KEY = 'ArrowLeft';\nconst ARROW_RIGHT_KEY = 'ArrowRight';\nconst TOUCHEVENT_COMPAT_WAIT = 500; // Time for mouse compat events to fire after touch\n\nconst SWIPE_THRESHOLD = 40;\nconst Default$9 = {\n  interval: 5000,\n  keyboard: true,\n  slide: false,\n  pause: 'hover',\n  wrap: true,\n  touch: true\n};\nconst DefaultType$9 = {\n  interval: '(number|boolean)',\n  keyboard: 'boolean',\n  slide: '(boolean|string)',\n  pause: '(string|boolean)',\n  wrap: 'boolean',\n  touch: 'boolean'\n};\nconst ORDER_NEXT = 'next';\nconst ORDER_PREV = 'prev';\nconst DIRECTION_LEFT = 'left';\nconst DIRECTION_RIGHT = 'right';\nconst KEY_TO_DIRECTION = {\n  [ARROW_LEFT_KEY]: DIRECTION_RIGHT,\n  [ARROW_RIGHT_KEY]: DIRECTION_LEFT\n};\nconst EVENT_SLIDE = `slide${EVENT_KEY$9}`;\nconst EVENT_SLID = `slid${EVENT_KEY$9}`;\nconst EVENT_KEYDOWN = `keydown${EVENT_KEY$9}`;\nconst EVENT_MOUSEENTER = `mouseenter${EVENT_KEY$9}`;\nconst EVENT_MOUSELEAVE = `mouseleave${EVENT_KEY$9}`;\nconst EVENT_TOUCHSTART = `touchstart${EVENT_KEY$9}`;\nconst EVENT_TOUCHMOVE = `touchmove${EVENT_KEY$9}`;\nconst EVENT_TOUCHEND = `touchend${EVENT_KEY$9}`;\nconst EVENT_POINTERDOWN = `pointerdown${EVENT_KEY$9}`;\nconst EVENT_POINTERUP = `pointerup${EVENT_KEY$9}`;\nconst EVENT_DRAG_START = `dragstart${EVENT_KEY$9}`;\nconst EVENT_LOAD_DATA_API$2 = `load${EVENT_KEY$9}${DATA_API_KEY$6}`;\nconst EVENT_CLICK_DATA_API$5 = `click${EVENT_KEY$9}${DATA_API_KEY$6}`;\nconst CLASS_NAME_CAROUSEL = 'carousel';\nconst CLASS_NAME_ACTIVE$2 = 'active';\nconst CLASS_NAME_SLIDE = 'slide';\nconst CLASS_NAME_END = 'carousel-item-end';\nconst CLASS_NAME_START = 'carousel-item-start';\nconst CLASS_NAME_NEXT = 'carousel-item-next';\nconst CLASS_NAME_PREV = 'carousel-item-prev';\nconst CLASS_NAME_POINTER_EVENT = 'pointer-event';\nconst SELECTOR_ACTIVE$1 = '.active';\nconst SELECTOR_ACTIVE_ITEM = '.active.carousel-item';\nconst SELECTOR_ITEM = '.carousel-item';\nconst SELECTOR_ITEM_IMG = '.carousel-item img';\nconst SELECTOR_NEXT_PREV = '.carousel-item-next, .carousel-item-prev';\nconst SELECTOR_INDICATORS = '.carousel-indicators';\nconst SELECTOR_INDICATOR = '[data-bs-target]';\nconst SELECTOR_DATA_SLIDE = '[data-bs-slide], [data-bs-slide-to]';\nconst SELECTOR_DATA_RIDE = '[data-bs-ride=\"carousel\"]';\nconst POINTER_TYPE_TOUCH = 'touch';\nconst POINTER_TYPE_PEN = 'pen';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Carousel extends BaseComponent {\n  constructor(element, config) {\n    super(element);\n    this._items = null;\n    this._interval = null;\n    this._activeElement = null;\n    this._isPaused = false;\n    this._isSliding = false;\n    this.touchTimeout = null;\n    this.touchStartX = 0;\n    this.touchDeltaX = 0;\n    this._config = this._getConfig(config);\n    this._indicatorsElement = SelectorEngine.findOne(SELECTOR_INDICATORS, this._element);\n    this._touchSupported = 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0;\n    this._pointerEvent = Boolean(window.PointerEvent);\n\n    this._addEventListeners();\n  } // Getters\n\n\n  static get Default() {\n    return Default$9;\n  }\n\n  static get NAME() {\n    return NAME$a;\n  } // Public\n\n\n  next() {\n    this._slide(ORDER_NEXT);\n  }\n\n  nextWhenVisible() {\n    // Don't call next when the page isn't visible\n    // or the carousel or its parent isn't visible\n    if (!document.hidden && isVisible(this._element)) {\n      this.next();\n    }\n  }\n\n  prev() {\n    this._slide(ORDER_PREV);\n  }\n\n  pause(event) {\n    if (!event) {\n      this._isPaused = true;\n    }\n\n    if (SelectorEngine.findOne(SELECTOR_NEXT_PREV, this._element)) {\n      triggerTransitionEnd(this._element);\n      this.cycle(true);\n    }\n\n    clearInterval(this._interval);\n    this._interval = null;\n  }\n\n  cycle(event) {\n    if (!event) {\n      this._isPaused = false;\n    }\n\n    if (this._interval) {\n      clearInterval(this._interval);\n      this._interval = null;\n    }\n\n    if (this._config && this._config.interval && !this._isPaused) {\n      this._updateInterval();\n\n      this._interval = setInterval((document.visibilityState ? this.nextWhenVisible : this.next).bind(this), this._config.interval);\n    }\n  }\n\n  to(index) {\n    this._activeElement = SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element);\n\n    const activeIndex = this._getItemIndex(this._activeElement);\n\n    if (index > this._items.length - 1 || index < 0) {\n      return;\n    }\n\n    if (this._isSliding) {\n      EventHandler.one(this._element, EVENT_SLID, () => this.to(index));\n      return;\n    }\n\n    if (activeIndex === index) {\n      this.pause();\n      this.cycle();\n      return;\n    }\n\n    const order = index > activeIndex ? ORDER_NEXT : ORDER_PREV;\n\n    this._slide(order, this._items[index]);\n  } // Private\n\n\n  _getConfig(config) {\n    config = { ...Default$9,\n      ...Manipulator.getDataAttributes(this._element),\n      ...(typeof config === 'object' ? config : {})\n    };\n    typeCheckConfig(NAME$a, config, DefaultType$9);\n    return config;\n  }\n\n  _handleSwipe() {\n    const absDeltax = Math.abs(this.touchDeltaX);\n\n    if (absDeltax <= SWIPE_THRESHOLD) {\n      return;\n    }\n\n    const direction = absDeltax / this.touchDeltaX;\n    this.touchDeltaX = 0;\n\n    if (!direction) {\n      return;\n    }\n\n    this._slide(direction > 0 ? DIRECTION_RIGHT : DIRECTION_LEFT);\n  }\n\n  _addEventListeners() {\n    if (this._config.keyboard) {\n      EventHandler.on(this._element, EVENT_KEYDOWN, event => this._keydown(event));\n    }\n\n    if (this._config.pause === 'hover') {\n      EventHandler.on(this._element, EVENT_MOUSEENTER, event => this.pause(event));\n      EventHandler.on(this._element, EVENT_MOUSELEAVE, event => this.cycle(event));\n    }\n\n    if (this._config.touch && this._touchSupported) {\n      this._addTouchEventListeners();\n    }\n  }\n\n  _addTouchEventListeners() {\n    const start = event => {\n      if (this._pointerEvent && (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH)) {\n        this.touchStartX = event.clientX;\n      } else if (!this._pointerEvent) {\n        this.touchStartX = event.touches[0].clientX;\n      }\n    };\n\n    const move = event => {\n      // ensure swiping with one touch and not pinching\n      this.touchDeltaX = event.touches && event.touches.length > 1 ? 0 : event.touches[0].clientX - this.touchStartX;\n    };\n\n    const end = event => {\n      if (this._pointerEvent && (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH)) {\n        this.touchDeltaX = event.clientX - this.touchStartX;\n      }\n\n      this._handleSwipe();\n\n      if (this._config.pause === 'hover') {\n        // If it's a touch-enabled device, mouseenter/leave are fired as\n        // part of the mouse compatibility events on first tap - the carousel\n        // would stop cycling until user tapped out of it;\n        // here, we listen for touchend, explicitly pause the carousel\n        // (as if it's the second time we tap on it, mouseenter compat event\n        // is NOT fired) and after a timeout (to allow for mouse compatibility\n        // events to fire) we explicitly restart cycling\n        this.pause();\n\n        if (this.touchTimeout) {\n          clearTimeout(this.touchTimeout);\n        }\n\n        this.touchTimeout = setTimeout(event => this.cycle(event), TOUCHEVENT_COMPAT_WAIT + this._config.interval);\n      }\n    };\n\n    SelectorEngine.find(SELECTOR_ITEM_IMG, this._element).forEach(itemImg => {\n      EventHandler.on(itemImg, EVENT_DRAG_START, e => e.preventDefault());\n    });\n\n    if (this._pointerEvent) {\n      EventHandler.on(this._element, EVENT_POINTERDOWN, event => start(event));\n      EventHandler.on(this._element, EVENT_POINTERUP, event => end(event));\n\n      this._element.classList.add(CLASS_NAME_POINTER_EVENT);\n    } else {\n      EventHandler.on(this._element, EVENT_TOUCHSTART, event => start(event));\n      EventHandler.on(this._element, EVENT_TOUCHMOVE, event => move(event));\n      EventHandler.on(this._element, EVENT_TOUCHEND, event => end(event));\n    }\n  }\n\n  _keydown(event) {\n    if (/input|textarea/i.test(event.target.tagName)) {\n      return;\n    }\n\n    const direction = KEY_TO_DIRECTION[event.key];\n\n    if (direction) {\n      event.preventDefault();\n\n      this._slide(direction);\n    }\n  }\n\n  _getItemIndex(element) {\n    this._items = element && element.parentNode ? SelectorEngine.find(SELECTOR_ITEM, element.parentNode) : [];\n    return this._items.indexOf(element);\n  }\n\n  _getItemByOrder(order, activeElement) {\n    const isNext = order === ORDER_NEXT;\n    return getNextActiveElement(this._items, activeElement, isNext, this._config.wrap);\n  }\n\n  _triggerSlideEvent(relatedTarget, eventDirectionName) {\n    const targetIndex = this._getItemIndex(relatedTarget);\n\n    const fromIndex = this._getItemIndex(SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element));\n\n    return EventHandler.trigger(this._element, EVENT_SLIDE, {\n      relatedTarget,\n      direction: eventDirectionName,\n      from: fromIndex,\n      to: targetIndex\n    });\n  }\n\n  _setActiveIndicatorElement(element) {\n    if (this._indicatorsElement) {\n      const activeIndicator = SelectorEngine.findOne(SELECTOR_ACTIVE$1, this._indicatorsElement);\n      activeIndicator.classList.remove(CLASS_NAME_ACTIVE$2);\n      activeIndicator.removeAttribute('aria-current');\n      const indicators = SelectorEngine.find(SELECTOR_INDICATOR, this._indicatorsElement);\n\n      for (let i = 0; i < indicators.length; i++) {\n        if (Number.parseInt(indicators[i].getAttribute('data-bs-slide-to'), 10) === this._getItemIndex(element)) {\n          indicators[i].classList.add(CLASS_NAME_ACTIVE$2);\n          indicators[i].setAttribute('aria-current', 'true');\n          break;\n        }\n      }\n    }\n  }\n\n  _updateInterval() {\n    const element = this._activeElement || SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element);\n\n    if (!element) {\n      return;\n    }\n\n    const elementInterval = Number.parseInt(element.getAttribute('data-bs-interval'), 10);\n\n    if (elementInterval) {\n      this._config.defaultInterval = this._config.defaultInterval || this._config.interval;\n      this._config.interval = elementInterval;\n    } else {\n      this._config.interval = this._config.defaultInterval || this._config.interval;\n    }\n  }\n\n  _slide(directionOrOrder, element) {\n    const order = this._directionToOrder(directionOrOrder);\n\n    const activeElement = SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element);\n\n    const activeElementIndex = this._getItemIndex(activeElement);\n\n    const nextElement = element || this._getItemByOrder(order, activeElement);\n\n    const nextElementIndex = this._getItemIndex(nextElement);\n\n    const isCycling = Boolean(this._interval);\n    const isNext = order === ORDER_NEXT;\n    const directionalClassName = isNext ? CLASS_NAME_START : CLASS_NAME_END;\n    const orderClassName = isNext ? CLASS_NAME_NEXT : CLASS_NAME_PREV;\n\n    const eventDirectionName = this._orderToDirection(order);\n\n    if (nextElement && nextElement.classList.contains(CLASS_NAME_ACTIVE$2)) {\n      this._isSliding = false;\n      return;\n    }\n\n    if (this._isSliding) {\n      return;\n    }\n\n    const slideEvent = this._triggerSlideEvent(nextElement, eventDirectionName);\n\n    if (slideEvent.defaultPrevented) {\n      return;\n    }\n\n    if (!activeElement || !nextElement) {\n      // Some weirdness is happening, so we bail\n      return;\n    }\n\n    this._isSliding = true;\n\n    if (isCycling) {\n      this.pause();\n    }\n\n    this._setActiveIndicatorElement(nextElement);\n\n    this._activeElement = nextElement;\n\n    const triggerSlidEvent = () => {\n      EventHandler.trigger(this._element, EVENT_SLID, {\n        relatedTarget: nextElement,\n        direction: eventDirectionName,\n        from: activeElementIndex,\n        to: nextElementIndex\n      });\n    };\n\n    if (this._element.classList.contains(CLASS_NAME_SLIDE)) {\n      nextElement.classList.add(orderClassName);\n      reflow(nextElement);\n      activeElement.classList.add(directionalClassName);\n      nextElement.classList.add(directionalClassName);\n\n      const completeCallBack = () => {\n        nextElement.classList.remove(directionalClassName, orderClassName);\n        nextElement.classList.add(CLASS_NAME_ACTIVE$2);\n        activeElement.classList.remove(CLASS_NAME_ACTIVE$2, orderClassName, directionalClassName);\n        this._isSliding = false;\n        setTimeout(triggerSlidEvent, 0);\n      };\n\n      this._queueCallback(completeCallBack, activeElement, true);\n    } else {\n      activeElement.classList.remove(CLASS_NAME_ACTIVE$2);\n      nextElement.classList.add(CLASS_NAME_ACTIVE$2);\n      this._isSliding = false;\n      triggerSlidEvent();\n    }\n\n    if (isCycling) {\n      this.cycle();\n    }\n  }\n\n  _directionToOrder(direction) {\n    if (![DIRECTION_RIGHT, DIRECTION_LEFT].includes(direction)) {\n      return direction;\n    }\n\n    if (isRTL()) {\n      return direction === DIRECTION_LEFT ? ORDER_PREV : ORDER_NEXT;\n    }\n\n    return direction === DIRECTION_LEFT ? ORDER_NEXT : ORDER_PREV;\n  }\n\n  _orderToDirection(order) {\n    if (![ORDER_NEXT, ORDER_PREV].includes(order)) {\n      return order;\n    }\n\n    if (isRTL()) {\n      return order === ORDER_PREV ? DIRECTION_LEFT : DIRECTION_RIGHT;\n    }\n\n    return order === ORDER_PREV ? DIRECTION_RIGHT : DIRECTION_LEFT;\n  } // Static\n\n\n  static carouselInterface(element, config) {\n    const data = Carousel.getOrCreateInstance(element, config);\n    let {\n      _config\n    } = data;\n\n    if (typeof config === 'object') {\n      _config = { ..._config,\n        ...config\n      };\n    }\n\n    const action = typeof config === 'string' ? config : _config.slide;\n\n    if (typeof config === 'number') {\n      data.to(config);\n    } else if (typeof action === 'string') {\n      if (typeof data[action] === 'undefined') {\n        throw new TypeError(`No method named \"${action}\"`);\n      }\n\n      data[action]();\n    } else if (_config.interval && _config.ride) {\n      data.pause();\n      data.cycle();\n    }\n  }\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      Carousel.carouselInterface(this, config);\n    });\n  }\n\n  static dataApiClickHandler(event) {\n    const target = getElementFromSelector(this);\n\n    if (!target || !target.classList.contains(CLASS_NAME_CAROUSEL)) {\n      return;\n    }\n\n    const config = { ...Manipulator.getDataAttributes(target),\n      ...Manipulator.getDataAttributes(this)\n    };\n    const slideIndex = this.getAttribute('data-bs-slide-to');\n\n    if (slideIndex) {\n      config.interval = false;\n    }\n\n    Carousel.carouselInterface(target, config);\n\n    if (slideIndex) {\n      Carousel.getInstance(target).to(slideIndex);\n    }\n\n    event.preventDefault();\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$5, SELECTOR_DATA_SLIDE, Carousel.dataApiClickHandler);\nEventHandler.on(window, EVENT_LOAD_DATA_API$2, () => {\n  const carousels = SelectorEngine.find(SELECTOR_DATA_RIDE);\n\n  for (let i = 0, len = carousels.length; i < len; i++) {\n    Carousel.carouselInterface(carousels[i], Carousel.getInstance(carousels[i]));\n  }\n});\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Carousel to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Carousel);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): collapse.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$9 = 'collapse';\nconst DATA_KEY$8 = 'bs.collapse';\nconst EVENT_KEY$8 = `.${DATA_KEY$8}`;\nconst DATA_API_KEY$5 = '.data-api';\nconst Default$8 = {\n  toggle: true,\n  parent: ''\n};\nconst DefaultType$8 = {\n  toggle: 'boolean',\n  parent: '(string|element)'\n};\nconst EVENT_SHOW$5 = `show${EVENT_KEY$8}`;\nconst EVENT_SHOWN$5 = `shown${EVENT_KEY$8}`;\nconst EVENT_HIDE$5 = `hide${EVENT_KEY$8}`;\nconst EVENT_HIDDEN$5 = `hidden${EVENT_KEY$8}`;\nconst EVENT_CLICK_DATA_API$4 = `click${EVENT_KEY$8}${DATA_API_KEY$5}`;\nconst CLASS_NAME_SHOW$8 = 'show';\nconst CLASS_NAME_COLLAPSE = 'collapse';\nconst CLASS_NAME_COLLAPSING = 'collapsing';\nconst CLASS_NAME_COLLAPSED = 'collapsed';\nconst WIDTH = 'width';\nconst HEIGHT = 'height';\nconst SELECTOR_ACTIVES = '.show, .collapsing';\nconst SELECTOR_DATA_TOGGLE$4 = '[data-bs-toggle=\"collapse\"]';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Collapse extends BaseComponent {\n  constructor(element, config) {\n    super(element);\n    this._isTransitioning = false;\n    this._config = this._getConfig(config);\n    this._triggerArray = SelectorEngine.find(`${SELECTOR_DATA_TOGGLE$4}[href=\"#${this._element.id}\"],` + `${SELECTOR_DATA_TOGGLE$4}[data-bs-target=\"#${this._element.id}\"]`);\n    const toggleList = SelectorEngine.find(SELECTOR_DATA_TOGGLE$4);\n\n    for (let i = 0, len = toggleList.length; i < len; i++) {\n      const elem = toggleList[i];\n      const selector = getSelectorFromElement(elem);\n      const filterElement = SelectorEngine.find(selector).filter(foundElem => foundElem === this._element);\n\n      if (selector !== null && filterElement.length) {\n        this._selector = selector;\n\n        this._triggerArray.push(elem);\n      }\n    }\n\n    this._parent = this._config.parent ? this._getParent() : null;\n\n    if (!this._config.parent) {\n      this._addAriaAndCollapsedClass(this._element, this._triggerArray);\n    }\n\n    if (this._config.toggle) {\n      this.toggle();\n    }\n  } // Getters\n\n\n  static get Default() {\n    return Default$8;\n  }\n\n  static get NAME() {\n    return NAME$9;\n  } // Public\n\n\n  toggle() {\n    if (this._element.classList.contains(CLASS_NAME_SHOW$8)) {\n      this.hide();\n    } else {\n      this.show();\n    }\n  }\n\n  show() {\n    if (this._isTransitioning || this._element.classList.contains(CLASS_NAME_SHOW$8)) {\n      return;\n    }\n\n    let actives;\n    let activesData;\n\n    if (this._parent) {\n      actives = SelectorEngine.find(SELECTOR_ACTIVES, this._parent).filter(elem => {\n        if (typeof this._config.parent === 'string') {\n          return elem.getAttribute('data-bs-parent') === this._config.parent;\n        }\n\n        return elem.classList.contains(CLASS_NAME_COLLAPSE);\n      });\n\n      if (actives.length === 0) {\n        actives = null;\n      }\n    }\n\n    const container = SelectorEngine.findOne(this._selector);\n\n    if (actives) {\n      const tempActiveData = actives.find(elem => container !== elem);\n      activesData = tempActiveData ? Collapse.getInstance(tempActiveData) : null;\n\n      if (activesData && activesData._isTransitioning) {\n        return;\n      }\n    }\n\n    const startEvent = EventHandler.trigger(this._element, EVENT_SHOW$5);\n\n    if (startEvent.defaultPrevented) {\n      return;\n    }\n\n    if (actives) {\n      actives.forEach(elemActive => {\n        if (container !== elemActive) {\n          Collapse.collapseInterface(elemActive, 'hide');\n        }\n\n        if (!activesData) {\n          Data.set(elemActive, DATA_KEY$8, null);\n        }\n      });\n    }\n\n    const dimension = this._getDimension();\n\n    this._element.classList.remove(CLASS_NAME_COLLAPSE);\n\n    this._element.classList.add(CLASS_NAME_COLLAPSING);\n\n    this._element.style[dimension] = 0;\n\n    if (this._triggerArray.length) {\n      this._triggerArray.forEach(element => {\n        element.classList.remove(CLASS_NAME_COLLAPSED);\n        element.setAttribute('aria-expanded', true);\n      });\n    }\n\n    this.setTransitioning(true);\n\n    const complete = () => {\n      this._element.classList.remove(CLASS_NAME_COLLAPSING);\n\n      this._element.classList.add(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$8);\n\n      this._element.style[dimension] = '';\n      this.setTransitioning(false);\n      EventHandler.trigger(this._element, EVENT_SHOWN$5);\n    };\n\n    const capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1);\n    const scrollSize = `scroll${capitalizedDimension}`;\n\n    this._queueCallback(complete, this._element, true);\n\n    this._element.style[dimension] = `${this._element[scrollSize]}px`;\n  }\n\n  hide() {\n    if (this._isTransitioning || !this._element.classList.contains(CLASS_NAME_SHOW$8)) {\n      return;\n    }\n\n    const startEvent = EventHandler.trigger(this._element, EVENT_HIDE$5);\n\n    if (startEvent.defaultPrevented) {\n      return;\n    }\n\n    const dimension = this._getDimension();\n\n    this._element.style[dimension] = `${this._element.getBoundingClientRect()[dimension]}px`;\n    reflow(this._element);\n\n    this._element.classList.add(CLASS_NAME_COLLAPSING);\n\n    this._element.classList.remove(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$8);\n\n    const triggerArrayLength = this._triggerArray.length;\n\n    if (triggerArrayLength > 0) {\n      for (let i = 0; i < triggerArrayLength; i++) {\n        const trigger = this._triggerArray[i];\n        const elem = getElementFromSelector(trigger);\n\n        if (elem && !elem.classList.contains(CLASS_NAME_SHOW$8)) {\n          trigger.classList.add(CLASS_NAME_COLLAPSED);\n          trigger.setAttribute('aria-expanded', false);\n        }\n      }\n    }\n\n    this.setTransitioning(true);\n\n    const complete = () => {\n      this.setTransitioning(false);\n\n      this._element.classList.remove(CLASS_NAME_COLLAPSING);\n\n      this._element.classList.add(CLASS_NAME_COLLAPSE);\n\n      EventHandler.trigger(this._element, EVENT_HIDDEN$5);\n    };\n\n    this._element.style[dimension] = '';\n\n    this._queueCallback(complete, this._element, true);\n  }\n\n  setTransitioning(isTransitioning) {\n    this._isTransitioning = isTransitioning;\n  } // Private\n\n\n  _getConfig(config) {\n    config = { ...Default$8,\n      ...config\n    };\n    config.toggle = Boolean(config.toggle); // Coerce string values\n\n    typeCheckConfig(NAME$9, config, DefaultType$8);\n    return config;\n  }\n\n  _getDimension() {\n    return this._element.classList.contains(WIDTH) ? WIDTH : HEIGHT;\n  }\n\n  _getParent() {\n    let {\n      parent\n    } = this._config;\n    parent = getElement(parent);\n    const selector = `${SELECTOR_DATA_TOGGLE$4}[data-bs-parent=\"${parent}\"]`;\n    SelectorEngine.find(selector, parent).forEach(element => {\n      const selected = getElementFromSelector(element);\n\n      this._addAriaAndCollapsedClass(selected, [element]);\n    });\n    return parent;\n  }\n\n  _addAriaAndCollapsedClass(element, triggerArray) {\n    if (!element || !triggerArray.length) {\n      return;\n    }\n\n    const isOpen = element.classList.contains(CLASS_NAME_SHOW$8);\n    triggerArray.forEach(elem => {\n      if (isOpen) {\n        elem.classList.remove(CLASS_NAME_COLLAPSED);\n      } else {\n        elem.classList.add(CLASS_NAME_COLLAPSED);\n      }\n\n      elem.setAttribute('aria-expanded', isOpen);\n    });\n  } // Static\n\n\n  static collapseInterface(element, config) {\n    let data = Collapse.getInstance(element);\n    const _config = { ...Default$8,\n      ...Manipulator.getDataAttributes(element),\n      ...(typeof config === 'object' && config ? config : {})\n    };\n\n    if (!data && _config.toggle && typeof config === 'string' && /show|hide/.test(config)) {\n      _config.toggle = false;\n    }\n\n    if (!data) {\n      data = new Collapse(element, _config);\n    }\n\n    if (typeof config === 'string') {\n      if (typeof data[config] === 'undefined') {\n        throw new TypeError(`No method named \"${config}\"`);\n      }\n\n      data[config]();\n    }\n  }\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      Collapse.collapseInterface(this, config);\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$4, SELECTOR_DATA_TOGGLE$4, function (event) {\n  // preventDefault only for <a> elements (which change the URL) not inside the collapsible element\n  if (event.target.tagName === 'A' || event.delegateTarget && event.delegateTarget.tagName === 'A') {\n    event.preventDefault();\n  }\n\n  const triggerData = Manipulator.getDataAttributes(this);\n  const selector = getSelectorFromElement(this);\n  const selectorElements = SelectorEngine.find(selector);\n  selectorElements.forEach(element => {\n    const data = Collapse.getInstance(element);\n    let config;\n\n    if (data) {\n      // update parent attribute\n      if (data._parent === null && typeof triggerData.parent === 'string') {\n        data._config.parent = triggerData.parent;\n        data._parent = data._getParent();\n      }\n\n      config = 'toggle';\n    } else {\n      config = triggerData;\n    }\n\n    Collapse.collapseInterface(element, config);\n  });\n});\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Collapse to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Collapse);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): dropdown.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$8 = 'dropdown';\nconst DATA_KEY$7 = 'bs.dropdown';\nconst EVENT_KEY$7 = `.${DATA_KEY$7}`;\nconst DATA_API_KEY$4 = '.data-api';\nconst ESCAPE_KEY$2 = 'Escape';\nconst SPACE_KEY = 'Space';\nconst TAB_KEY = 'Tab';\nconst ARROW_UP_KEY = 'ArrowUp';\nconst ARROW_DOWN_KEY = 'ArrowDown';\nconst RIGHT_MOUSE_BUTTON = 2; // MouseEvent.button value for the secondary button, usually the right button\n\nconst REGEXP_KEYDOWN = new RegExp(`${ARROW_UP_KEY}|${ARROW_DOWN_KEY}|${ESCAPE_KEY$2}`);\nconst EVENT_HIDE$4 = `hide${EVENT_KEY$7}`;\nconst EVENT_HIDDEN$4 = `hidden${EVENT_KEY$7}`;\nconst EVENT_SHOW$4 = `show${EVENT_KEY$7}`;\nconst EVENT_SHOWN$4 = `shown${EVENT_KEY$7}`;\nconst EVENT_CLICK = `click${EVENT_KEY$7}`;\nconst EVENT_CLICK_DATA_API$3 = `click${EVENT_KEY$7}${DATA_API_KEY$4}`;\nconst EVENT_KEYDOWN_DATA_API = `keydown${EVENT_KEY$7}${DATA_API_KEY$4}`;\nconst EVENT_KEYUP_DATA_API = `keyup${EVENT_KEY$7}${DATA_API_KEY$4}`;\nconst CLASS_NAME_SHOW$7 = 'show';\nconst CLASS_NAME_DROPUP = 'dropup';\nconst CLASS_NAME_DROPEND = 'dropend';\nconst CLASS_NAME_DROPSTART = 'dropstart';\nconst CLASS_NAME_NAVBAR = 'navbar';\nconst SELECTOR_DATA_TOGGLE$3 = '[data-bs-toggle=\"dropdown\"]';\nconst SELECTOR_MENU = '.dropdown-menu';\nconst SELECTOR_NAVBAR_NAV = '.navbar-nav';\nconst SELECTOR_VISIBLE_ITEMS = '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)';\nconst PLACEMENT_TOP = isRTL() ? 'top-end' : 'top-start';\nconst PLACEMENT_TOPEND = isRTL() ? 'top-start' : 'top-end';\nconst PLACEMENT_BOTTOM = isRTL() ? 'bottom-end' : 'bottom-start';\nconst PLACEMENT_BOTTOMEND = isRTL() ? 'bottom-start' : 'bottom-end';\nconst PLACEMENT_RIGHT = isRTL() ? 'left-start' : 'right-start';\nconst PLACEMENT_LEFT = isRTL() ? 'right-start' : 'left-start';\nconst Default$7 = {\n  offset: [0, 2],\n  boundary: 'clippingParents',\n  reference: 'toggle',\n  display: 'dynamic',\n  popperConfig: null,\n  autoClose: true\n};\nconst DefaultType$7 = {\n  offset: '(array|string|function)',\n  boundary: '(string|element)',\n  reference: '(string|element|object)',\n  display: 'string',\n  popperConfig: '(null|object|function)',\n  autoClose: '(boolean|string)'\n};\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Dropdown extends BaseComponent {\n  constructor(element, config) {\n    super(element);\n    this._popper = null;\n    this._config = this._getConfig(config);\n    this._menu = this._getMenuElement();\n    this._inNavbar = this._detectNavbar();\n\n    this._addEventListeners();\n  } // Getters\n\n\n  static get Default() {\n    return Default$7;\n  }\n\n  static get DefaultType() {\n    return DefaultType$7;\n  }\n\n  static get NAME() {\n    return NAME$8;\n  } // Public\n\n\n  toggle() {\n    if (isDisabled(this._element)) {\n      return;\n    }\n\n    const isActive = this._element.classList.contains(CLASS_NAME_SHOW$7);\n\n    if (isActive) {\n      this.hide();\n      return;\n    }\n\n    this.show();\n  }\n\n  show() {\n    if (isDisabled(this._element) || this._menu.classList.contains(CLASS_NAME_SHOW$7)) {\n      return;\n    }\n\n    const parent = Dropdown.getParentFromElement(this._element);\n    const relatedTarget = {\n      relatedTarget: this._element\n    };\n    const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$4, relatedTarget);\n\n    if (showEvent.defaultPrevented) {\n      return;\n    } // Totally disable Popper for Dropdowns in Navbar\n\n\n    if (this._inNavbar) {\n      Manipulator.setDataAttribute(this._menu, 'popper', 'none');\n    } else {\n      if (typeof Popper === 'undefined') {\n        throw new TypeError('Bootstrap\\'s dropdowns require Popper (https://popper.js.org)');\n      }\n\n      let referenceElement = this._element;\n\n      if (this._config.reference === 'parent') {\n        referenceElement = parent;\n      } else if (isElement(this._config.reference)) {\n        referenceElement = getElement(this._config.reference);\n      } else if (typeof this._config.reference === 'object') {\n        referenceElement = this._config.reference;\n      }\n\n      const popperConfig = this._getPopperConfig();\n\n      const isDisplayStatic = popperConfig.modifiers.find(modifier => modifier.name === 'applyStyles' && modifier.enabled === false);\n      this._popper = Popper.createPopper(referenceElement, this._menu, popperConfig);\n\n      if (isDisplayStatic) {\n        Manipulator.setDataAttribute(this._menu, 'popper', 'static');\n      }\n    } // If this is a touch-enabled device we add extra\n    // empty mouseover listeners to the body's immediate children;\n    // only needed because of broken event delegation on iOS\n    // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n\n\n    if ('ontouchstart' in document.documentElement && !parent.closest(SELECTOR_NAVBAR_NAV)) {\n      [].concat(...document.body.children).forEach(elem => EventHandler.on(elem, 'mouseover', noop));\n    }\n\n    this._element.focus();\n\n    this._element.setAttribute('aria-expanded', true);\n\n    this._menu.classList.toggle(CLASS_NAME_SHOW$7);\n\n    this._element.classList.toggle(CLASS_NAME_SHOW$7);\n\n    EventHandler.trigger(this._element, EVENT_SHOWN$4, relatedTarget);\n  }\n\n  hide() {\n    if (isDisabled(this._element) || !this._menu.classList.contains(CLASS_NAME_SHOW$7)) {\n      return;\n    }\n\n    const relatedTarget = {\n      relatedTarget: this._element\n    };\n\n    this._completeHide(relatedTarget);\n  }\n\n  dispose() {\n    if (this._popper) {\n      this._popper.destroy();\n    }\n\n    super.dispose();\n  }\n\n  update() {\n    this._inNavbar = this._detectNavbar();\n\n    if (this._popper) {\n      this._popper.update();\n    }\n  } // Private\n\n\n  _addEventListeners() {\n    EventHandler.on(this._element, EVENT_CLICK, event => {\n      event.preventDefault();\n      this.toggle();\n    });\n  }\n\n  _completeHide(relatedTarget) {\n    const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$4, relatedTarget);\n\n    if (hideEvent.defaultPrevented) {\n      return;\n    } // If this is a touch-enabled device we remove the extra\n    // empty mouseover listeners we added for iOS support\n\n\n    if ('ontouchstart' in document.documentElement) {\n      [].concat(...document.body.children).forEach(elem => EventHandler.off(elem, 'mouseover', noop));\n    }\n\n    if (this._popper) {\n      this._popper.destroy();\n    }\n\n    this._menu.classList.remove(CLASS_NAME_SHOW$7);\n\n    this._element.classList.remove(CLASS_NAME_SHOW$7);\n\n    this._element.setAttribute('aria-expanded', 'false');\n\n    Manipulator.removeDataAttribute(this._menu, 'popper');\n    EventHandler.trigger(this._element, EVENT_HIDDEN$4, relatedTarget);\n  }\n\n  _getConfig(config) {\n    config = { ...this.constructor.Default,\n      ...Manipulator.getDataAttributes(this._element),\n      ...config\n    };\n    typeCheckConfig(NAME$8, config, this.constructor.DefaultType);\n\n    if (typeof config.reference === 'object' && !isElement(config.reference) && typeof config.reference.getBoundingClientRect !== 'function') {\n      // Popper virtual elements require a getBoundingClientRect method\n      throw new TypeError(`${NAME$8.toUpperCase()}: Option \"reference\" provided type \"object\" without a required \"getBoundingClientRect\" method.`);\n    }\n\n    return config;\n  }\n\n  _getMenuElement() {\n    return SelectorEngine.next(this._element, SELECTOR_MENU)[0];\n  }\n\n  _getPlacement() {\n    const parentDropdown = this._element.parentNode;\n\n    if (parentDropdown.classList.contains(CLASS_NAME_DROPEND)) {\n      return PLACEMENT_RIGHT;\n    }\n\n    if (parentDropdown.classList.contains(CLASS_NAME_DROPSTART)) {\n      return PLACEMENT_LEFT;\n    } // We need to trim the value because custom properties can also include spaces\n\n\n    const isEnd = getComputedStyle(this._menu).getPropertyValue('--bs-position').trim() === 'end';\n\n    if (parentDropdown.classList.contains(CLASS_NAME_DROPUP)) {\n      return isEnd ? PLACEMENT_TOPEND : PLACEMENT_TOP;\n    }\n\n    return isEnd ? PLACEMENT_BOTTOMEND : PLACEMENT_BOTTOM;\n  }\n\n  _detectNavbar() {\n    return this._element.closest(`.${CLASS_NAME_NAVBAR}`) !== null;\n  }\n\n  _getOffset() {\n    const {\n      offset\n    } = this._config;\n\n    if (typeof offset === 'string') {\n      return offset.split(',').map(val => Number.parseInt(val, 10));\n    }\n\n    if (typeof offset === 'function') {\n      return popperData => offset(popperData, this._element);\n    }\n\n    return offset;\n  }\n\n  _getPopperConfig() {\n    const defaultBsPopperConfig = {\n      placement: this._getPlacement(),\n      modifiers: [{\n        name: 'preventOverflow',\n        options: {\n          boundary: this._config.boundary\n        }\n      }, {\n        name: 'offset',\n        options: {\n          offset: this._getOffset()\n        }\n      }]\n    }; // Disable Popper if we have a static display\n\n    if (this._config.display === 'static') {\n      defaultBsPopperConfig.modifiers = [{\n        name: 'applyStyles',\n        enabled: false\n      }];\n    }\n\n    return { ...defaultBsPopperConfig,\n      ...(typeof this._config.popperConfig === 'function' ? this._config.popperConfig(defaultBsPopperConfig) : this._config.popperConfig)\n    };\n  }\n\n  _selectMenuItem({\n    key,\n    target\n  }) {\n    const items = SelectorEngine.find(SELECTOR_VISIBLE_ITEMS, this._menu).filter(isVisible);\n\n    if (!items.length) {\n      return;\n    } // if target isn't included in items (e.g. when expanding the dropdown)\n    // allow cycling to get the last item in case key equals ARROW_UP_KEY\n\n\n    getNextActiveElement(items, target, key === ARROW_DOWN_KEY, !items.includes(target)).focus();\n  } // Static\n\n\n  static dropdownInterface(element, config) {\n    const data = Dropdown.getOrCreateInstance(element, config);\n\n    if (typeof config === 'string') {\n      if (typeof data[config] === 'undefined') {\n        throw new TypeError(`No method named \"${config}\"`);\n      }\n\n      data[config]();\n    }\n  }\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      Dropdown.dropdownInterface(this, config);\n    });\n  }\n\n  static clearMenus(event) {\n    if (event && (event.button === RIGHT_MOUSE_BUTTON || event.type === 'keyup' && event.key !== TAB_KEY)) {\n      return;\n    }\n\n    const toggles = SelectorEngine.find(SELECTOR_DATA_TOGGLE$3);\n\n    for (let i = 0, len = toggles.length; i < len; i++) {\n      const context = Dropdown.getInstance(toggles[i]);\n\n      if (!context || context._config.autoClose === false) {\n        continue;\n      }\n\n      if (!context._element.classList.contains(CLASS_NAME_SHOW$7)) {\n        continue;\n      }\n\n      const relatedTarget = {\n        relatedTarget: context._element\n      };\n\n      if (event) {\n        const composedPath = event.composedPath();\n        const isMenuTarget = composedPath.includes(context._menu);\n\n        if (composedPath.includes(context._element) || context._config.autoClose === 'inside' && !isMenuTarget || context._config.autoClose === 'outside' && isMenuTarget) {\n          continue;\n        } // Tab navigation through the dropdown menu or events from contained inputs shouldn't close the menu\n\n\n        if (context._menu.contains(event.target) && (event.type === 'keyup' && event.key === TAB_KEY || /input|select|option|textarea|form/i.test(event.target.tagName))) {\n          continue;\n        }\n\n        if (event.type === 'click') {\n          relatedTarget.clickEvent = event;\n        }\n      }\n\n      context._completeHide(relatedTarget);\n    }\n  }\n\n  static getParentFromElement(element) {\n    return getElementFromSelector(element) || element.parentNode;\n  }\n\n  static dataApiKeydownHandler(event) {\n    // If not input/textarea:\n    //  - And not a key in REGEXP_KEYDOWN => not a dropdown command\n    // If input/textarea:\n    //  - If space key => not a dropdown command\n    //  - If key is other than escape\n    //    - If key is not up or down => not a dropdown command\n    //    - If trigger inside the menu => not a dropdown command\n    if (/input|textarea/i.test(event.target.tagName) ? event.key === SPACE_KEY || event.key !== ESCAPE_KEY$2 && (event.key !== ARROW_DOWN_KEY && event.key !== ARROW_UP_KEY || event.target.closest(SELECTOR_MENU)) : !REGEXP_KEYDOWN.test(event.key)) {\n      return;\n    }\n\n    const isActive = this.classList.contains(CLASS_NAME_SHOW$7);\n\n    if (!isActive && event.key === ESCAPE_KEY$2) {\n      return;\n    }\n\n    event.preventDefault();\n    event.stopPropagation();\n\n    if (isDisabled(this)) {\n      return;\n    }\n\n    const getToggleButton = () => this.matches(SELECTOR_DATA_TOGGLE$3) ? this : SelectorEngine.prev(this, SELECTOR_DATA_TOGGLE$3)[0];\n\n    if (event.key === ESCAPE_KEY$2) {\n      getToggleButton().focus();\n      Dropdown.clearMenus();\n      return;\n    }\n\n    if (event.key === ARROW_UP_KEY || event.key === ARROW_DOWN_KEY) {\n      if (!isActive) {\n        getToggleButton().click();\n      }\n\n      Dropdown.getInstance(getToggleButton())._selectMenuItem(event);\n\n      return;\n    }\n\n    if (!isActive || event.key === SPACE_KEY) {\n      Dropdown.clearMenus();\n    }\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_DATA_TOGGLE$3, Dropdown.dataApiKeydownHandler);\nEventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown.dataApiKeydownHandler);\nEventHandler.on(document, EVENT_CLICK_DATA_API$3, Dropdown.clearMenus);\nEventHandler.on(document, EVENT_KEYUP_DATA_API, Dropdown.clearMenus);\nEventHandler.on(document, EVENT_CLICK_DATA_API$3, SELECTOR_DATA_TOGGLE$3, function (event) {\n  event.preventDefault();\n  Dropdown.dropdownInterface(this);\n});\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Dropdown to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Dropdown);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): util/scrollBar.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\nconst SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top';\nconst SELECTOR_STICKY_CONTENT = '.sticky-top';\n\nclass ScrollBarHelper {\n  constructor() {\n    this._element = document.body;\n  }\n\n  getWidth() {\n    // https://developer.mozilla.org/en-US/docs/Web/API/Window/innerWidth#usage_notes\n    const documentWidth = document.documentElement.clientWidth;\n    return Math.abs(window.innerWidth - documentWidth);\n  }\n\n  hide() {\n    const width = this.getWidth();\n\n    this._disableOverFlow(); // give padding to element to balance the hidden scrollbar width\n\n\n    this._setElementAttributes(this._element, 'paddingRight', calculatedValue => calculatedValue + width); // trick: We adjust positive paddingRight and negative marginRight to sticky-top elements to keep showing fullwidth\n\n\n    this._setElementAttributes(SELECTOR_FIXED_CONTENT, 'paddingRight', calculatedValue => calculatedValue + width);\n\n    this._setElementAttributes(SELECTOR_STICKY_CONTENT, 'marginRight', calculatedValue => calculatedValue - width);\n  }\n\n  _disableOverFlow() {\n    this._saveInitialAttribute(this._element, 'overflow');\n\n    this._element.style.overflow = 'hidden';\n  }\n\n  _setElementAttributes(selector, styleProp, callback) {\n    const scrollbarWidth = this.getWidth();\n\n    const manipulationCallBack = element => {\n      if (element !== this._element && window.innerWidth > element.clientWidth + scrollbarWidth) {\n        return;\n      }\n\n      this._saveInitialAttribute(element, styleProp);\n\n      const calculatedValue = window.getComputedStyle(element)[styleProp];\n      element.style[styleProp] = `${callback(Number.parseFloat(calculatedValue))}px`;\n    };\n\n    this._applyManipulationCallback(selector, manipulationCallBack);\n  }\n\n  reset() {\n    this._resetElementAttributes(this._element, 'overflow');\n\n    this._resetElementAttributes(this._element, 'paddingRight');\n\n    this._resetElementAttributes(SELECTOR_FIXED_CONTENT, 'paddingRight');\n\n    this._resetElementAttributes(SELECTOR_STICKY_CONTENT, 'marginRight');\n  }\n\n  _saveInitialAttribute(element, styleProp) {\n    const actualValue = element.style[styleProp];\n\n    if (actualValue) {\n      Manipulator.setDataAttribute(element, styleProp, actualValue);\n    }\n  }\n\n  _resetElementAttributes(selector, styleProp) {\n    const manipulationCallBack = element => {\n      const value = Manipulator.getDataAttribute(element, styleProp);\n\n      if (typeof value === 'undefined') {\n        element.style.removeProperty(styleProp);\n      } else {\n        Manipulator.removeDataAttribute(element, styleProp);\n        element.style[styleProp] = value;\n      }\n    };\n\n    this._applyManipulationCallback(selector, manipulationCallBack);\n  }\n\n  _applyManipulationCallback(selector, callBack) {\n    if (isElement(selector)) {\n      callBack(selector);\n    } else {\n      SelectorEngine.find(selector, this._element).forEach(callBack);\n    }\n  }\n\n  isOverflowing() {\n    return this.getWidth() > 0;\n  }\n\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): util/backdrop.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\nconst Default$6 = {\n  isVisible: true,\n  // if false, we use the backdrop helper without adding any element to the dom\n  isAnimated: false,\n  rootElement: 'body',\n  // give the choice to place backdrop under different elements\n  clickCallback: null\n};\nconst DefaultType$6 = {\n  isVisible: 'boolean',\n  isAnimated: 'boolean',\n  rootElement: '(element|string)',\n  clickCallback: '(function|null)'\n};\nconst NAME$7 = 'backdrop';\nconst CLASS_NAME_BACKDROP = 'modal-backdrop';\nconst CLASS_NAME_FADE$5 = 'fade';\nconst CLASS_NAME_SHOW$6 = 'show';\nconst EVENT_MOUSEDOWN = `mousedown.bs.${NAME$7}`;\n\nclass Backdrop {\n  constructor(config) {\n    this._config = this._getConfig(config);\n    this._isAppended = false;\n    this._element = null;\n  }\n\n  show(callback) {\n    if (!this._config.isVisible) {\n      execute(callback);\n      return;\n    }\n\n    this._append();\n\n    if (this._config.isAnimated) {\n      reflow(this._getElement());\n    }\n\n    this._getElement().classList.add(CLASS_NAME_SHOW$6);\n\n    this._emulateAnimation(() => {\n      execute(callback);\n    });\n  }\n\n  hide(callback) {\n    if (!this._config.isVisible) {\n      execute(callback);\n      return;\n    }\n\n    this._getElement().classList.remove(CLASS_NAME_SHOW$6);\n\n    this._emulateAnimation(() => {\n      this.dispose();\n      execute(callback);\n    });\n  } // Private\n\n\n  _getElement() {\n    if (!this._element) {\n      const backdrop = document.createElement('div');\n      backdrop.className = CLASS_NAME_BACKDROP;\n\n      if (this._config.isAnimated) {\n        backdrop.classList.add(CLASS_NAME_FADE$5);\n      }\n\n      this._element = backdrop;\n    }\n\n    return this._element;\n  }\n\n  _getConfig(config) {\n    config = { ...Default$6,\n      ...(typeof config === 'object' ? config : {})\n    }; // use getElement() with the default \"body\" to get a fresh Element on each instantiation\n\n    config.rootElement = getElement(config.rootElement);\n    typeCheckConfig(NAME$7, config, DefaultType$6);\n    return config;\n  }\n\n  _append() {\n    if (this._isAppended) {\n      return;\n    }\n\n    this._config.rootElement.appendChild(this._getElement());\n\n    EventHandler.on(this._getElement(), EVENT_MOUSEDOWN, () => {\n      execute(this._config.clickCallback);\n    });\n    this._isAppended = true;\n  }\n\n  dispose() {\n    if (!this._isAppended) {\n      return;\n    }\n\n    EventHandler.off(this._element, EVENT_MOUSEDOWN);\n\n    this._element.remove();\n\n    this._isAppended = false;\n  }\n\n  _emulateAnimation(callback) {\n    executeAfterTransition(callback, this._getElement(), this._config.isAnimated);\n  }\n\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): modal.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$6 = 'modal';\nconst DATA_KEY$6 = 'bs.modal';\nconst EVENT_KEY$6 = `.${DATA_KEY$6}`;\nconst DATA_API_KEY$3 = '.data-api';\nconst ESCAPE_KEY$1 = 'Escape';\nconst Default$5 = {\n  backdrop: true,\n  keyboard: true,\n  focus: true\n};\nconst DefaultType$5 = {\n  backdrop: '(boolean|string)',\n  keyboard: 'boolean',\n  focus: 'boolean'\n};\nconst EVENT_HIDE$3 = `hide${EVENT_KEY$6}`;\nconst EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY$6}`;\nconst EVENT_HIDDEN$3 = `hidden${EVENT_KEY$6}`;\nconst EVENT_SHOW$3 = `show${EVENT_KEY$6}`;\nconst EVENT_SHOWN$3 = `shown${EVENT_KEY$6}`;\nconst EVENT_FOCUSIN$2 = `focusin${EVENT_KEY$6}`;\nconst EVENT_RESIZE = `resize${EVENT_KEY$6}`;\nconst EVENT_CLICK_DISMISS$2 = `click.dismiss${EVENT_KEY$6}`;\nconst EVENT_KEYDOWN_DISMISS$1 = `keydown.dismiss${EVENT_KEY$6}`;\nconst EVENT_MOUSEUP_DISMISS = `mouseup.dismiss${EVENT_KEY$6}`;\nconst EVENT_MOUSEDOWN_DISMISS = `mousedown.dismiss${EVENT_KEY$6}`;\nconst EVENT_CLICK_DATA_API$2 = `click${EVENT_KEY$6}${DATA_API_KEY$3}`;\nconst CLASS_NAME_OPEN = 'modal-open';\nconst CLASS_NAME_FADE$4 = 'fade';\nconst CLASS_NAME_SHOW$5 = 'show';\nconst CLASS_NAME_STATIC = 'modal-static';\nconst SELECTOR_DIALOG = '.modal-dialog';\nconst SELECTOR_MODAL_BODY = '.modal-body';\nconst SELECTOR_DATA_TOGGLE$2 = '[data-bs-toggle=\"modal\"]';\nconst SELECTOR_DATA_DISMISS$2 = '[data-bs-dismiss=\"modal\"]';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Modal extends BaseComponent {\n  constructor(element, config) {\n    super(element);\n    this._config = this._getConfig(config);\n    this._dialog = SelectorEngine.findOne(SELECTOR_DIALOG, this._element);\n    this._backdrop = this._initializeBackDrop();\n    this._isShown = false;\n    this._ignoreBackdropClick = false;\n    this._isTransitioning = false;\n    this._scrollBar = new ScrollBarHelper();\n  } // Getters\n\n\n  static get Default() {\n    return Default$5;\n  }\n\n  static get NAME() {\n    return NAME$6;\n  } // Public\n\n\n  toggle(relatedTarget) {\n    return this._isShown ? this.hide() : this.show(relatedTarget);\n  }\n\n  show(relatedTarget) {\n    if (this._isShown || this._isTransitioning) {\n      return;\n    }\n\n    const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$3, {\n      relatedTarget\n    });\n\n    if (showEvent.defaultPrevented) {\n      return;\n    }\n\n    this._isShown = true;\n\n    if (this._isAnimated()) {\n      this._isTransitioning = true;\n    }\n\n    this._scrollBar.hide();\n\n    document.body.classList.add(CLASS_NAME_OPEN);\n\n    this._adjustDialog();\n\n    this._setEscapeEvent();\n\n    this._setResizeEvent();\n\n    EventHandler.on(this._element, EVENT_CLICK_DISMISS$2, SELECTOR_DATA_DISMISS$2, event => this.hide(event));\n    EventHandler.on(this._dialog, EVENT_MOUSEDOWN_DISMISS, () => {\n      EventHandler.one(this._element, EVENT_MOUSEUP_DISMISS, event => {\n        if (event.target === this._element) {\n          this._ignoreBackdropClick = true;\n        }\n      });\n    });\n\n    this._showBackdrop(() => this._showElement(relatedTarget));\n  }\n\n  hide(event) {\n    if (event && ['A', 'AREA'].includes(event.target.tagName)) {\n      event.preventDefault();\n    }\n\n    if (!this._isShown || this._isTransitioning) {\n      return;\n    }\n\n    const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$3);\n\n    if (hideEvent.defaultPrevented) {\n      return;\n    }\n\n    this._isShown = false;\n\n    const isAnimated = this._isAnimated();\n\n    if (isAnimated) {\n      this._isTransitioning = true;\n    }\n\n    this._setEscapeEvent();\n\n    this._setResizeEvent();\n\n    EventHandler.off(document, EVENT_FOCUSIN$2);\n\n    this._element.classList.remove(CLASS_NAME_SHOW$5);\n\n    EventHandler.off(this._element, EVENT_CLICK_DISMISS$2);\n    EventHandler.off(this._dialog, EVENT_MOUSEDOWN_DISMISS);\n\n    this._queueCallback(() => this._hideModal(), this._element, isAnimated);\n  }\n\n  dispose() {\n    [window, this._dialog].forEach(htmlElement => EventHandler.off(htmlElement, EVENT_KEY$6));\n\n    this._backdrop.dispose();\n\n    super.dispose();\n    /**\n     * `document` has 2 events `EVENT_FOCUSIN` and `EVENT_CLICK_DATA_API`\n     * Do not move `document` in `htmlElements` array\n     * It will remove `EVENT_CLICK_DATA_API` event that should remain\n     */\n\n    EventHandler.off(document, EVENT_FOCUSIN$2);\n  }\n\n  handleUpdate() {\n    this._adjustDialog();\n  } // Private\n\n\n  _initializeBackDrop() {\n    return new Backdrop({\n      isVisible: Boolean(this._config.backdrop),\n      // 'static' option will be translated to true, and booleans will keep their value\n      isAnimated: this._isAnimated()\n    });\n  }\n\n  _getConfig(config) {\n    config = { ...Default$5,\n      ...Manipulator.getDataAttributes(this._element),\n      ...(typeof config === 'object' ? config : {})\n    };\n    typeCheckConfig(NAME$6, config, DefaultType$5);\n    return config;\n  }\n\n  _showElement(relatedTarget) {\n    const isAnimated = this._isAnimated();\n\n    const modalBody = SelectorEngine.findOne(SELECTOR_MODAL_BODY, this._dialog);\n\n    if (!this._element.parentNode || this._element.parentNode.nodeType !== Node.ELEMENT_NODE) {\n      // Don't move modal's DOM position\n      document.body.appendChild(this._element);\n    }\n\n    this._element.style.display = 'block';\n\n    this._element.removeAttribute('aria-hidden');\n\n    this._element.setAttribute('aria-modal', true);\n\n    this._element.setAttribute('role', 'dialog');\n\n    this._element.scrollTop = 0;\n\n    if (modalBody) {\n      modalBody.scrollTop = 0;\n    }\n\n    if (isAnimated) {\n      reflow(this._element);\n    }\n\n    this._element.classList.add(CLASS_NAME_SHOW$5);\n\n    if (this._config.focus) {\n      this._enforceFocus();\n    }\n\n    const transitionComplete = () => {\n      if (this._config.focus) {\n        this._element.focus();\n      }\n\n      this._isTransitioning = false;\n      EventHandler.trigger(this._element, EVENT_SHOWN$3, {\n        relatedTarget\n      });\n    };\n\n    this._queueCallback(transitionComplete, this._dialog, isAnimated);\n  }\n\n  _enforceFocus() {\n    EventHandler.off(document, EVENT_FOCUSIN$2); // guard against infinite focus loop\n\n    EventHandler.on(document, EVENT_FOCUSIN$2, event => {\n      if (document !== event.target && this._element !== event.target && !this._element.contains(event.target)) {\n        this._element.focus();\n      }\n    });\n  }\n\n  _setEscapeEvent() {\n    if (this._isShown) {\n      EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS$1, event => {\n        if (this._config.keyboard && event.key === ESCAPE_KEY$1) {\n          event.preventDefault();\n          this.hide();\n        } else if (!this._config.keyboard && event.key === ESCAPE_KEY$1) {\n          this._triggerBackdropTransition();\n        }\n      });\n    } else {\n      EventHandler.off(this._element, EVENT_KEYDOWN_DISMISS$1);\n    }\n  }\n\n  _setResizeEvent() {\n    if (this._isShown) {\n      EventHandler.on(window, EVENT_RESIZE, () => this._adjustDialog());\n    } else {\n      EventHandler.off(window, EVENT_RESIZE);\n    }\n  }\n\n  _hideModal() {\n    this._element.style.display = 'none';\n\n    this._element.setAttribute('aria-hidden', true);\n\n    this._element.removeAttribute('aria-modal');\n\n    this._element.removeAttribute('role');\n\n    this._isTransitioning = false;\n\n    this._backdrop.hide(() => {\n      document.body.classList.remove(CLASS_NAME_OPEN);\n\n      this._resetAdjustments();\n\n      this._scrollBar.reset();\n\n      EventHandler.trigger(this._element, EVENT_HIDDEN$3);\n    });\n  }\n\n  _showBackdrop(callback) {\n    EventHandler.on(this._element, EVENT_CLICK_DISMISS$2, event => {\n      if (this._ignoreBackdropClick) {\n        this._ignoreBackdropClick = false;\n        return;\n      }\n\n      if (event.target !== event.currentTarget) {\n        return;\n      }\n\n      if (this._config.backdrop === true) {\n        this.hide();\n      } else if (this._config.backdrop === 'static') {\n        this._triggerBackdropTransition();\n      }\n    });\n\n    this._backdrop.show(callback);\n  }\n\n  _isAnimated() {\n    return this._element.classList.contains(CLASS_NAME_FADE$4);\n  }\n\n  _triggerBackdropTransition() {\n    const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED);\n\n    if (hideEvent.defaultPrevented) {\n      return;\n    }\n\n    const {\n      classList,\n      scrollHeight,\n      style\n    } = this._element;\n    const isModalOverflowing = scrollHeight > document.documentElement.clientHeight; // return if the following background transition hasn't yet completed\n\n    if (!isModalOverflowing && style.overflowY === 'hidden' || classList.contains(CLASS_NAME_STATIC)) {\n      return;\n    }\n\n    if (!isModalOverflowing) {\n      style.overflowY = 'hidden';\n    }\n\n    classList.add(CLASS_NAME_STATIC);\n\n    this._queueCallback(() => {\n      classList.remove(CLASS_NAME_STATIC);\n\n      if (!isModalOverflowing) {\n        this._queueCallback(() => {\n          style.overflowY = '';\n        }, this._dialog);\n      }\n    }, this._dialog);\n\n    this._element.focus();\n  } // ----------------------------------------------------------------------\n  // the following methods are used to handle overflowing modals\n  // ----------------------------------------------------------------------\n\n\n  _adjustDialog() {\n    const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;\n\n    const scrollbarWidth = this._scrollBar.getWidth();\n\n    const isBodyOverflowing = scrollbarWidth > 0;\n\n    if (!isBodyOverflowing && isModalOverflowing && !isRTL() || isBodyOverflowing && !isModalOverflowing && isRTL()) {\n      this._element.style.paddingLeft = `${scrollbarWidth}px`;\n    }\n\n    if (isBodyOverflowing && !isModalOverflowing && !isRTL() || !isBodyOverflowing && isModalOverflowing && isRTL()) {\n      this._element.style.paddingRight = `${scrollbarWidth}px`;\n    }\n  }\n\n  _resetAdjustments() {\n    this._element.style.paddingLeft = '';\n    this._element.style.paddingRight = '';\n  } // Static\n\n\n  static jQueryInterface(config, relatedTarget) {\n    return this.each(function () {\n      const data = Modal.getOrCreateInstance(this, config);\n\n      if (typeof config !== 'string') {\n        return;\n      }\n\n      if (typeof data[config] === 'undefined') {\n        throw new TypeError(`No method named \"${config}\"`);\n      }\n\n      data[config](relatedTarget);\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$2, SELECTOR_DATA_TOGGLE$2, function (event) {\n  const target = getElementFromSelector(this);\n\n  if (['A', 'AREA'].includes(this.tagName)) {\n    event.preventDefault();\n  }\n\n  EventHandler.one(target, EVENT_SHOW$3, showEvent => {\n    if (showEvent.defaultPrevented) {\n      // only register focus restorer if modal will actually get shown\n      return;\n    }\n\n    EventHandler.one(target, EVENT_HIDDEN$3, () => {\n      if (isVisible(this)) {\n        this.focus();\n      }\n    });\n  });\n  const data = Modal.getOrCreateInstance(target);\n  data.toggle(this);\n});\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Modal to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Modal);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): offcanvas.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$5 = 'offcanvas';\nconst DATA_KEY$5 = 'bs.offcanvas';\nconst EVENT_KEY$5 = `.${DATA_KEY$5}`;\nconst DATA_API_KEY$2 = '.data-api';\nconst EVENT_LOAD_DATA_API$1 = `load${EVENT_KEY$5}${DATA_API_KEY$2}`;\nconst ESCAPE_KEY = 'Escape';\nconst Default$4 = {\n  backdrop: true,\n  keyboard: true,\n  scroll: false\n};\nconst DefaultType$4 = {\n  backdrop: 'boolean',\n  keyboard: 'boolean',\n  scroll: 'boolean'\n};\nconst CLASS_NAME_SHOW$4 = 'show';\nconst OPEN_SELECTOR = '.offcanvas.show';\nconst EVENT_SHOW$2 = `show${EVENT_KEY$5}`;\nconst EVENT_SHOWN$2 = `shown${EVENT_KEY$5}`;\nconst EVENT_HIDE$2 = `hide${EVENT_KEY$5}`;\nconst EVENT_HIDDEN$2 = `hidden${EVENT_KEY$5}`;\nconst EVENT_FOCUSIN$1 = `focusin${EVENT_KEY$5}`;\nconst EVENT_CLICK_DATA_API$1 = `click${EVENT_KEY$5}${DATA_API_KEY$2}`;\nconst EVENT_CLICK_DISMISS$1 = `click.dismiss${EVENT_KEY$5}`;\nconst EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY$5}`;\nconst SELECTOR_DATA_DISMISS$1 = '[data-bs-dismiss=\"offcanvas\"]';\nconst SELECTOR_DATA_TOGGLE$1 = '[data-bs-toggle=\"offcanvas\"]';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Offcanvas extends BaseComponent {\n  constructor(element, config) {\n    super(element);\n    this._config = this._getConfig(config);\n    this._isShown = false;\n    this._backdrop = this._initializeBackDrop();\n\n    this._addEventListeners();\n  } // Getters\n\n\n  static get NAME() {\n    return NAME$5;\n  }\n\n  static get Default() {\n    return Default$4;\n  } // Public\n\n\n  toggle(relatedTarget) {\n    return this._isShown ? this.hide() : this.show(relatedTarget);\n  }\n\n  show(relatedTarget) {\n    if (this._isShown) {\n      return;\n    }\n\n    const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$2, {\n      relatedTarget\n    });\n\n    if (showEvent.defaultPrevented) {\n      return;\n    }\n\n    this._isShown = true;\n    this._element.style.visibility = 'visible';\n\n    this._backdrop.show();\n\n    if (!this._config.scroll) {\n      new ScrollBarHelper().hide();\n\n      this._enforceFocusOnElement(this._element);\n    }\n\n    this._element.removeAttribute('aria-hidden');\n\n    this._element.setAttribute('aria-modal', true);\n\n    this._element.setAttribute('role', 'dialog');\n\n    this._element.classList.add(CLASS_NAME_SHOW$4);\n\n    const completeCallBack = () => {\n      EventHandler.trigger(this._element, EVENT_SHOWN$2, {\n        relatedTarget\n      });\n    };\n\n    this._queueCallback(completeCallBack, this._element, true);\n  }\n\n  hide() {\n    if (!this._isShown) {\n      return;\n    }\n\n    const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$2);\n\n    if (hideEvent.defaultPrevented) {\n      return;\n    }\n\n    EventHandler.off(document, EVENT_FOCUSIN$1);\n\n    this._element.blur();\n\n    this._isShown = false;\n\n    this._element.classList.remove(CLASS_NAME_SHOW$4);\n\n    this._backdrop.hide();\n\n    const completeCallback = () => {\n      this._element.setAttribute('aria-hidden', true);\n\n      this._element.removeAttribute('aria-modal');\n\n      this._element.removeAttribute('role');\n\n      this._element.style.visibility = 'hidden';\n\n      if (!this._config.scroll) {\n        new ScrollBarHelper().reset();\n      }\n\n      EventHandler.trigger(this._element, EVENT_HIDDEN$2);\n    };\n\n    this._queueCallback(completeCallback, this._element, true);\n  }\n\n  dispose() {\n    this._backdrop.dispose();\n\n    super.dispose();\n    EventHandler.off(document, EVENT_FOCUSIN$1);\n  } // Private\n\n\n  _getConfig(config) {\n    config = { ...Default$4,\n      ...Manipulator.getDataAttributes(this._element),\n      ...(typeof config === 'object' ? config : {})\n    };\n    typeCheckConfig(NAME$5, config, DefaultType$4);\n    return config;\n  }\n\n  _initializeBackDrop() {\n    return new Backdrop({\n      isVisible: this._config.backdrop,\n      isAnimated: true,\n      rootElement: this._element.parentNode,\n      clickCallback: () => this.hide()\n    });\n  }\n\n  _enforceFocusOnElement(element) {\n    EventHandler.off(document, EVENT_FOCUSIN$1); // guard against infinite focus loop\n\n    EventHandler.on(document, EVENT_FOCUSIN$1, event => {\n      if (document !== event.target && element !== event.target && !element.contains(event.target)) {\n        element.focus();\n      }\n    });\n    element.focus();\n  }\n\n  _addEventListeners() {\n    EventHandler.on(this._element, EVENT_CLICK_DISMISS$1, SELECTOR_DATA_DISMISS$1, () => this.hide());\n    EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS, event => {\n      if (this._config.keyboard && event.key === ESCAPE_KEY) {\n        this.hide();\n      }\n    });\n  } // Static\n\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Offcanvas.getOrCreateInstance(this, config);\n\n      if (typeof config !== 'string') {\n        return;\n      }\n\n      if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n        throw new TypeError(`No method named \"${config}\"`);\n      }\n\n      data[config](this);\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$1, SELECTOR_DATA_TOGGLE$1, function (event) {\n  const target = getElementFromSelector(this);\n\n  if (['A', 'AREA'].includes(this.tagName)) {\n    event.preventDefault();\n  }\n\n  if (isDisabled(this)) {\n    return;\n  }\n\n  EventHandler.one(target, EVENT_HIDDEN$2, () => {\n    // focus on trigger when it is closed\n    if (isVisible(this)) {\n      this.focus();\n    }\n  }); // avoid conflict when clicking a toggler of an offcanvas, while another is open\n\n  const allReadyOpen = SelectorEngine.findOne(OPEN_SELECTOR);\n\n  if (allReadyOpen && allReadyOpen !== target) {\n    Offcanvas.getInstance(allReadyOpen).hide();\n  }\n\n  const data = Offcanvas.getOrCreateInstance(target);\n  data.toggle(this);\n});\nEventHandler.on(window, EVENT_LOAD_DATA_API$1, () => SelectorEngine.find(OPEN_SELECTOR).forEach(el => Offcanvas.getOrCreateInstance(el).show()));\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\ndefineJQueryPlugin(Offcanvas);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): util/sanitizer.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\nconst uriAttrs = new Set(['background', 'cite', 'href', 'itemtype', 'longdesc', 'poster', 'src', 'xlink:href']);\nconst ARIA_ATTRIBUTE_PATTERN = /^aria-[\\w-]*$/i;\n/**\n * A pattern that recognizes a commonly useful subset of URLs that are safe.\n *\n * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts\n */\n\nconst SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file):|[^#&/:?]*(?:[#/?]|$))/i;\n/**\n * A pattern that matches safe data URLs. Only matches image, video and audio types.\n *\n * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts\n */\n\nconst DATA_URL_PATTERN = /^data:(?:image\\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\\/(?:mpeg|mp4|ogg|webm)|audio\\/(?:mp3|oga|ogg|opus));base64,[\\d+/a-z]+=*$/i;\n\nconst allowedAttribute = (attr, allowedAttributeList) => {\n  const attrName = attr.nodeName.toLowerCase();\n\n  if (allowedAttributeList.includes(attrName)) {\n    if (uriAttrs.has(attrName)) {\n      return Boolean(SAFE_URL_PATTERN.test(attr.nodeValue) || DATA_URL_PATTERN.test(attr.nodeValue));\n    }\n\n    return true;\n  }\n\n  const regExp = allowedAttributeList.filter(attrRegex => attrRegex instanceof RegExp); // Check if a regular expression validates the attribute.\n\n  for (let i = 0, len = regExp.length; i < len; i++) {\n    if (regExp[i].test(attrName)) {\n      return true;\n    }\n  }\n\n  return false;\n};\n\nconst DefaultAllowlist = {\n  // Global attributes allowed on any supplied element below.\n  '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],\n  a: ['target', 'href', 'title', 'rel'],\n  area: [],\n  b: [],\n  br: [],\n  col: [],\n  code: [],\n  div: [],\n  em: [],\n  hr: [],\n  h1: [],\n  h2: [],\n  h3: [],\n  h4: [],\n  h5: [],\n  h6: [],\n  i: [],\n  img: ['src', 'srcset', 'alt', 'title', 'width', 'height'],\n  li: [],\n  ol: [],\n  p: [],\n  pre: [],\n  s: [],\n  small: [],\n  span: [],\n  sub: [],\n  sup: [],\n  strong: [],\n  u: [],\n  ul: []\n};\nfunction sanitizeHtml(unsafeHtml, allowList, sanitizeFn) {\n  if (!unsafeHtml.length) {\n    return unsafeHtml;\n  }\n\n  if (sanitizeFn && typeof sanitizeFn === 'function') {\n    return sanitizeFn(unsafeHtml);\n  }\n\n  const domParser = new window.DOMParser();\n  const createdDocument = domParser.parseFromString(unsafeHtml, 'text/html');\n  const allowlistKeys = Object.keys(allowList);\n  const elements = [].concat(...createdDocument.body.querySelectorAll('*'));\n\n  for (let i = 0, len = elements.length; i < len; i++) {\n    const el = elements[i];\n    const elName = el.nodeName.toLowerCase();\n\n    if (!allowlistKeys.includes(elName)) {\n      el.remove();\n      continue;\n    }\n\n    const attributeList = [].concat(...el.attributes);\n    const allowedAttributes = [].concat(allowList['*'] || [], allowList[elName] || []);\n    attributeList.forEach(attr => {\n      if (!allowedAttribute(attr, allowedAttributes)) {\n        el.removeAttribute(attr.nodeName);\n      }\n    });\n  }\n\n  return createdDocument.body.innerHTML;\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): tooltip.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$4 = 'tooltip';\nconst DATA_KEY$4 = 'bs.tooltip';\nconst EVENT_KEY$4 = `.${DATA_KEY$4}`;\nconst CLASS_PREFIX$1 = 'bs-tooltip';\nconst BSCLS_PREFIX_REGEX$1 = new RegExp(`(^|\\\\s)${CLASS_PREFIX$1}\\\\S+`, 'g');\nconst DISALLOWED_ATTRIBUTES = new Set(['sanitize', 'allowList', 'sanitizeFn']);\nconst DefaultType$3 = {\n  animation: 'boolean',\n  template: 'string',\n  title: '(string|element|function)',\n  trigger: 'string',\n  delay: '(number|object)',\n  html: 'boolean',\n  selector: '(string|boolean)',\n  placement: '(string|function)',\n  offset: '(array|string|function)',\n  container: '(string|element|boolean)',\n  fallbackPlacements: 'array',\n  boundary: '(string|element)',\n  customClass: '(string|function)',\n  sanitize: 'boolean',\n  sanitizeFn: '(null|function)',\n  allowList: 'object',\n  popperConfig: '(null|object|function)'\n};\nconst AttachmentMap = {\n  AUTO: 'auto',\n  TOP: 'top',\n  RIGHT: isRTL() ? 'left' : 'right',\n  BOTTOM: 'bottom',\n  LEFT: isRTL() ? 'right' : 'left'\n};\nconst Default$3 = {\n  animation: true,\n  template: '<div class=\"tooltip\" role=\"tooltip\">' + '<div class=\"tooltip-arrow\"></div>' + '<div class=\"tooltip-inner\"></div>' + '</div>',\n  trigger: 'hover focus',\n  title: '',\n  delay: 0,\n  html: false,\n  selector: false,\n  placement: 'top',\n  offset: [0, 0],\n  container: false,\n  fallbackPlacements: ['top', 'right', 'bottom', 'left'],\n  boundary: 'clippingParents',\n  customClass: '',\n  sanitize: true,\n  sanitizeFn: null,\n  allowList: DefaultAllowlist,\n  popperConfig: null\n};\nconst Event$2 = {\n  HIDE: `hide${EVENT_KEY$4}`,\n  HIDDEN: `hidden${EVENT_KEY$4}`,\n  SHOW: `show${EVENT_KEY$4}`,\n  SHOWN: `shown${EVENT_KEY$4}`,\n  INSERTED: `inserted${EVENT_KEY$4}`,\n  CLICK: `click${EVENT_KEY$4}`,\n  FOCUSIN: `focusin${EVENT_KEY$4}`,\n  FOCUSOUT: `focusout${EVENT_KEY$4}`,\n  MOUSEENTER: `mouseenter${EVENT_KEY$4}`,\n  MOUSELEAVE: `mouseleave${EVENT_KEY$4}`\n};\nconst CLASS_NAME_FADE$3 = 'fade';\nconst CLASS_NAME_MODAL = 'modal';\nconst CLASS_NAME_SHOW$3 = 'show';\nconst HOVER_STATE_SHOW = 'show';\nconst HOVER_STATE_OUT = 'out';\nconst SELECTOR_TOOLTIP_INNER = '.tooltip-inner';\nconst TRIGGER_HOVER = 'hover';\nconst TRIGGER_FOCUS = 'focus';\nconst TRIGGER_CLICK = 'click';\nconst TRIGGER_MANUAL = 'manual';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Tooltip extends BaseComponent {\n  constructor(element, config) {\n    if (typeof Popper === 'undefined') {\n      throw new TypeError('Bootstrap\\'s tooltips require Popper (https://popper.js.org)');\n    }\n\n    super(element); // private\n\n    this._isEnabled = true;\n    this._timeout = 0;\n    this._hoverState = '';\n    this._activeTrigger = {};\n    this._popper = null; // Protected\n\n    this._config = this._getConfig(config);\n    this.tip = null;\n\n    this._setListeners();\n  } // Getters\n\n\n  static get Default() {\n    return Default$3;\n  }\n\n  static get NAME() {\n    return NAME$4;\n  }\n\n  static get Event() {\n    return Event$2;\n  }\n\n  static get DefaultType() {\n    return DefaultType$3;\n  } // Public\n\n\n  enable() {\n    this._isEnabled = true;\n  }\n\n  disable() {\n    this._isEnabled = false;\n  }\n\n  toggleEnabled() {\n    this._isEnabled = !this._isEnabled;\n  }\n\n  toggle(event) {\n    if (!this._isEnabled) {\n      return;\n    }\n\n    if (event) {\n      const context = this._initializeOnDelegatedTarget(event);\n\n      context._activeTrigger.click = !context._activeTrigger.click;\n\n      if (context._isWithActiveTrigger()) {\n        context._enter(null, context);\n      } else {\n        context._leave(null, context);\n      }\n    } else {\n      if (this.getTipElement().classList.contains(CLASS_NAME_SHOW$3)) {\n        this._leave(null, this);\n\n        return;\n      }\n\n      this._enter(null, this);\n    }\n  }\n\n  dispose() {\n    clearTimeout(this._timeout);\n    EventHandler.off(this._element.closest(`.${CLASS_NAME_MODAL}`), 'hide.bs.modal', this._hideModalHandler);\n\n    if (this.tip) {\n      this.tip.remove();\n    }\n\n    if (this._popper) {\n      this._popper.destroy();\n    }\n\n    super.dispose();\n  }\n\n  show() {\n    if (this._element.style.display === 'none') {\n      throw new Error('Please use show on visible elements');\n    }\n\n    if (!(this.isWithContent() && this._isEnabled)) {\n      return;\n    }\n\n    const showEvent = EventHandler.trigger(this._element, this.constructor.Event.SHOW);\n    const shadowRoot = findShadowRoot(this._element);\n    const isInTheDom = shadowRoot === null ? this._element.ownerDocument.documentElement.contains(this._element) : shadowRoot.contains(this._element);\n\n    if (showEvent.defaultPrevented || !isInTheDom) {\n      return;\n    }\n\n    const tip = this.getTipElement();\n    const tipId = getUID(this.constructor.NAME);\n    tip.setAttribute('id', tipId);\n\n    this._element.setAttribute('aria-describedby', tipId);\n\n    this.setContent();\n\n    if (this._config.animation) {\n      tip.classList.add(CLASS_NAME_FADE$3);\n    }\n\n    const placement = typeof this._config.placement === 'function' ? this._config.placement.call(this, tip, this._element) : this._config.placement;\n\n    const attachment = this._getAttachment(placement);\n\n    this._addAttachmentClass(attachment);\n\n    const {\n      container\n    } = this._config;\n    Data.set(tip, this.constructor.DATA_KEY, this);\n\n    if (!this._element.ownerDocument.documentElement.contains(this.tip)) {\n      container.appendChild(tip);\n      EventHandler.trigger(this._element, this.constructor.Event.INSERTED);\n    }\n\n    if (this._popper) {\n      this._popper.update();\n    } else {\n      this._popper = Popper.createPopper(this._element, tip, this._getPopperConfig(attachment));\n    }\n\n    tip.classList.add(CLASS_NAME_SHOW$3);\n    const customClass = typeof this._config.customClass === 'function' ? this._config.customClass() : this._config.customClass;\n\n    if (customClass) {\n      tip.classList.add(...customClass.split(' '));\n    } // If this is a touch-enabled device we add extra\n    // empty mouseover listeners to the body's immediate children;\n    // only needed because of broken event delegation on iOS\n    // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n\n\n    if ('ontouchstart' in document.documentElement) {\n      [].concat(...document.body.children).forEach(element => {\n        EventHandler.on(element, 'mouseover', noop);\n      });\n    }\n\n    const complete = () => {\n      const prevHoverState = this._hoverState;\n      this._hoverState = null;\n      EventHandler.trigger(this._element, this.constructor.Event.SHOWN);\n\n      if (prevHoverState === HOVER_STATE_OUT) {\n        this._leave(null, this);\n      }\n    };\n\n    const isAnimated = this.tip.classList.contains(CLASS_NAME_FADE$3);\n\n    this._queueCallback(complete, this.tip, isAnimated);\n  }\n\n  hide() {\n    if (!this._popper) {\n      return;\n    }\n\n    const tip = this.getTipElement();\n\n    const complete = () => {\n      if (this._isWithActiveTrigger()) {\n        return;\n      }\n\n      if (this._hoverState !== HOVER_STATE_SHOW) {\n        tip.remove();\n      }\n\n      this._cleanTipClass();\n\n      this._element.removeAttribute('aria-describedby');\n\n      EventHandler.trigger(this._element, this.constructor.Event.HIDDEN);\n\n      if (this._popper) {\n        this._popper.destroy();\n\n        this._popper = null;\n      }\n    };\n\n    const hideEvent = EventHandler.trigger(this._element, this.constructor.Event.HIDE);\n\n    if (hideEvent.defaultPrevented) {\n      return;\n    }\n\n    tip.classList.remove(CLASS_NAME_SHOW$3); // If this is a touch-enabled device we remove the extra\n    // empty mouseover listeners we added for iOS support\n\n    if ('ontouchstart' in document.documentElement) {\n      [].concat(...document.body.children).forEach(element => EventHandler.off(element, 'mouseover', noop));\n    }\n\n    this._activeTrigger[TRIGGER_CLICK] = false;\n    this._activeTrigger[TRIGGER_FOCUS] = false;\n    this._activeTrigger[TRIGGER_HOVER] = false;\n    const isAnimated = this.tip.classList.contains(CLASS_NAME_FADE$3);\n\n    this._queueCallback(complete, this.tip, isAnimated);\n\n    this._hoverState = '';\n  }\n\n  update() {\n    if (this._popper !== null) {\n      this._popper.update();\n    }\n  } // Protected\n\n\n  isWithContent() {\n    return Boolean(this.getTitle());\n  }\n\n  getTipElement() {\n    if (this.tip) {\n      return this.tip;\n    }\n\n    const element = document.createElement('div');\n    element.innerHTML = this._config.template;\n    this.tip = element.children[0];\n    return this.tip;\n  }\n\n  setContent() {\n    const tip = this.getTipElement();\n    this.setElementContent(SelectorEngine.findOne(SELECTOR_TOOLTIP_INNER, tip), this.getTitle());\n    tip.classList.remove(CLASS_NAME_FADE$3, CLASS_NAME_SHOW$3);\n  }\n\n  setElementContent(element, content) {\n    if (element === null) {\n      return;\n    }\n\n    if (isElement(content)) {\n      content = getElement(content); // content is a DOM node or a jQuery\n\n      if (this._config.html) {\n        if (content.parentNode !== element) {\n          element.innerHTML = '';\n          element.appendChild(content);\n        }\n      } else {\n        element.textContent = content.textContent;\n      }\n\n      return;\n    }\n\n    if (this._config.html) {\n      if (this._config.sanitize) {\n        content = sanitizeHtml(content, this._config.allowList, this._config.sanitizeFn);\n      }\n\n      element.innerHTML = content;\n    } else {\n      element.textContent = content;\n    }\n  }\n\n  getTitle() {\n    let title = this._element.getAttribute('data-bs-original-title');\n\n    if (!title) {\n      title = typeof this._config.title === 'function' ? this._config.title.call(this._element) : this._config.title;\n    }\n\n    return title;\n  }\n\n  updateAttachment(attachment) {\n    if (attachment === 'right') {\n      return 'end';\n    }\n\n    if (attachment === 'left') {\n      return 'start';\n    }\n\n    return attachment;\n  } // Private\n\n\n  _initializeOnDelegatedTarget(event, context) {\n    const dataKey = this.constructor.DATA_KEY;\n    context = context || Data.get(event.delegateTarget, dataKey);\n\n    if (!context) {\n      context = new this.constructor(event.delegateTarget, this._getDelegateConfig());\n      Data.set(event.delegateTarget, dataKey, context);\n    }\n\n    return context;\n  }\n\n  _getOffset() {\n    const {\n      offset\n    } = this._config;\n\n    if (typeof offset === 'string') {\n      return offset.split(',').map(val => Number.parseInt(val, 10));\n    }\n\n    if (typeof offset === 'function') {\n      return popperData => offset(popperData, this._element);\n    }\n\n    return offset;\n  }\n\n  _getPopperConfig(attachment) {\n    const defaultBsPopperConfig = {\n      placement: attachment,\n      modifiers: [{\n        name: 'flip',\n        options: {\n          fallbackPlacements: this._config.fallbackPlacements\n        }\n      }, {\n        name: 'offset',\n        options: {\n          offset: this._getOffset()\n        }\n      }, {\n        name: 'preventOverflow',\n        options: {\n          boundary: this._config.boundary\n        }\n      }, {\n        name: 'arrow',\n        options: {\n          element: `.${this.constructor.NAME}-arrow`\n        }\n      }, {\n        name: 'onChange',\n        enabled: true,\n        phase: 'afterWrite',\n        fn: data => this._handlePopperPlacementChange(data)\n      }],\n      onFirstUpdate: data => {\n        if (data.options.placement !== data.placement) {\n          this._handlePopperPlacementChange(data);\n        }\n      }\n    };\n    return { ...defaultBsPopperConfig,\n      ...(typeof this._config.popperConfig === 'function' ? this._config.popperConfig(defaultBsPopperConfig) : this._config.popperConfig)\n    };\n  }\n\n  _addAttachmentClass(attachment) {\n    this.getTipElement().classList.add(`${CLASS_PREFIX$1}-${this.updateAttachment(attachment)}`);\n  }\n\n  _getAttachment(placement) {\n    return AttachmentMap[placement.toUpperCase()];\n  }\n\n  _setListeners() {\n    const triggers = this._config.trigger.split(' ');\n\n    triggers.forEach(trigger => {\n      if (trigger === 'click') {\n        EventHandler.on(this._element, this.constructor.Event.CLICK, this._config.selector, event => this.toggle(event));\n      } else if (trigger !== TRIGGER_MANUAL) {\n        const eventIn = trigger === TRIGGER_HOVER ? this.constructor.Event.MOUSEENTER : this.constructor.Event.FOCUSIN;\n        const eventOut = trigger === TRIGGER_HOVER ? this.constructor.Event.MOUSELEAVE : this.constructor.Event.FOCUSOUT;\n        EventHandler.on(this._element, eventIn, this._config.selector, event => this._enter(event));\n        EventHandler.on(this._element, eventOut, this._config.selector, event => this._leave(event));\n      }\n    });\n\n    this._hideModalHandler = () => {\n      if (this._element) {\n        this.hide();\n      }\n    };\n\n    EventHandler.on(this._element.closest(`.${CLASS_NAME_MODAL}`), 'hide.bs.modal', this._hideModalHandler);\n\n    if (this._config.selector) {\n      this._config = { ...this._config,\n        trigger: 'manual',\n        selector: ''\n      };\n    } else {\n      this._fixTitle();\n    }\n  }\n\n  _fixTitle() {\n    const title = this._element.getAttribute('title');\n\n    const originalTitleType = typeof this._element.getAttribute('data-bs-original-title');\n\n    if (title || originalTitleType !== 'string') {\n      this._element.setAttribute('data-bs-original-title', title || '');\n\n      if (title && !this._element.getAttribute('aria-label') && !this._element.textContent) {\n        this._element.setAttribute('aria-label', title);\n      }\n\n      this._element.setAttribute('title', '');\n    }\n  }\n\n  _enter(event, context) {\n    context = this._initializeOnDelegatedTarget(event, context);\n\n    if (event) {\n      context._activeTrigger[event.type === 'focusin' ? TRIGGER_FOCUS : TRIGGER_HOVER] = true;\n    }\n\n    if (context.getTipElement().classList.contains(CLASS_NAME_SHOW$3) || context._hoverState === HOVER_STATE_SHOW) {\n      context._hoverState = HOVER_STATE_SHOW;\n      return;\n    }\n\n    clearTimeout(context._timeout);\n    context._hoverState = HOVER_STATE_SHOW;\n\n    if (!context._config.delay || !context._config.delay.show) {\n      context.show();\n      return;\n    }\n\n    context._timeout = setTimeout(() => {\n      if (context._hoverState === HOVER_STATE_SHOW) {\n        context.show();\n      }\n    }, context._config.delay.show);\n  }\n\n  _leave(event, context) {\n    context = this._initializeOnDelegatedTarget(event, context);\n\n    if (event) {\n      context._activeTrigger[event.type === 'focusout' ? TRIGGER_FOCUS : TRIGGER_HOVER] = context._element.contains(event.relatedTarget);\n    }\n\n    if (context._isWithActiveTrigger()) {\n      return;\n    }\n\n    clearTimeout(context._timeout);\n    context._hoverState = HOVER_STATE_OUT;\n\n    if (!context._config.delay || !context._config.delay.hide) {\n      context.hide();\n      return;\n    }\n\n    context._timeout = setTimeout(() => {\n      if (context._hoverState === HOVER_STATE_OUT) {\n        context.hide();\n      }\n    }, context._config.delay.hide);\n  }\n\n  _isWithActiveTrigger() {\n    for (const trigger in this._activeTrigger) {\n      if (this._activeTrigger[trigger]) {\n        return true;\n      }\n    }\n\n    return false;\n  }\n\n  _getConfig(config) {\n    const dataAttributes = Manipulator.getDataAttributes(this._element);\n    Object.keys(dataAttributes).forEach(dataAttr => {\n      if (DISALLOWED_ATTRIBUTES.has(dataAttr)) {\n        delete dataAttributes[dataAttr];\n      }\n    });\n    config = { ...this.constructor.Default,\n      ...dataAttributes,\n      ...(typeof config === 'object' && config ? config : {})\n    };\n    config.container = config.container === false ? document.body : getElement(config.container);\n\n    if (typeof config.delay === 'number') {\n      config.delay = {\n        show: config.delay,\n        hide: config.delay\n      };\n    }\n\n    if (typeof config.title === 'number') {\n      config.title = config.title.toString();\n    }\n\n    if (typeof config.content === 'number') {\n      config.content = config.content.toString();\n    }\n\n    typeCheckConfig(NAME$4, config, this.constructor.DefaultType);\n\n    if (config.sanitize) {\n      config.template = sanitizeHtml(config.template, config.allowList, config.sanitizeFn);\n    }\n\n    return config;\n  }\n\n  _getDelegateConfig() {\n    const config = {};\n\n    if (this._config) {\n      for (const key in this._config) {\n        if (this.constructor.Default[key] !== this._config[key]) {\n          config[key] = this._config[key];\n        }\n      }\n    }\n\n    return config;\n  }\n\n  _cleanTipClass() {\n    const tip = this.getTipElement();\n    const tabClass = tip.getAttribute('class').match(BSCLS_PREFIX_REGEX$1);\n\n    if (tabClass !== null && tabClass.length > 0) {\n      tabClass.map(token => token.trim()).forEach(tClass => tip.classList.remove(tClass));\n    }\n  }\n\n  _handlePopperPlacementChange(popperData) {\n    const {\n      state\n    } = popperData;\n\n    if (!state) {\n      return;\n    }\n\n    this.tip = state.elements.popper;\n\n    this._cleanTipClass();\n\n    this._addAttachmentClass(this._getAttachment(state.placement));\n  } // Static\n\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Tooltip.getOrCreateInstance(this, config);\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config]();\n      }\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Tooltip to jQuery only if jQuery is present\n */\n\n\ndefineJQueryPlugin(Tooltip);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): popover.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$3 = 'popover';\nconst DATA_KEY$3 = 'bs.popover';\nconst EVENT_KEY$3 = `.${DATA_KEY$3}`;\nconst CLASS_PREFIX = 'bs-popover';\nconst BSCLS_PREFIX_REGEX = new RegExp(`(^|\\\\s)${CLASS_PREFIX}\\\\S+`, 'g');\nconst Default$2 = { ...Tooltip.Default,\n  placement: 'right',\n  offset: [0, 8],\n  trigger: 'click',\n  content: '',\n  template: '<div class=\"popover\" role=\"tooltip\">' + '<div class=\"popover-arrow\"></div>' + '<h3 class=\"popover-header\"></h3>' + '<div class=\"popover-body\"></div>' + '</div>'\n};\nconst DefaultType$2 = { ...Tooltip.DefaultType,\n  content: '(string|element|function)'\n};\nconst Event$1 = {\n  HIDE: `hide${EVENT_KEY$3}`,\n  HIDDEN: `hidden${EVENT_KEY$3}`,\n  SHOW: `show${EVENT_KEY$3}`,\n  SHOWN: `shown${EVENT_KEY$3}`,\n  INSERTED: `inserted${EVENT_KEY$3}`,\n  CLICK: `click${EVENT_KEY$3}`,\n  FOCUSIN: `focusin${EVENT_KEY$3}`,\n  FOCUSOUT: `focusout${EVENT_KEY$3}`,\n  MOUSEENTER: `mouseenter${EVENT_KEY$3}`,\n  MOUSELEAVE: `mouseleave${EVENT_KEY$3}`\n};\nconst CLASS_NAME_FADE$2 = 'fade';\nconst CLASS_NAME_SHOW$2 = 'show';\nconst SELECTOR_TITLE = '.popover-header';\nconst SELECTOR_CONTENT = '.popover-body';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Popover extends Tooltip {\n  // Getters\n  static get Default() {\n    return Default$2;\n  }\n\n  static get NAME() {\n    return NAME$3;\n  }\n\n  static get Event() {\n    return Event$1;\n  }\n\n  static get DefaultType() {\n    return DefaultType$2;\n  } // Overrides\n\n\n  isWithContent() {\n    return this.getTitle() || this._getContent();\n  }\n\n  getTipElement() {\n    if (this.tip) {\n      return this.tip;\n    }\n\n    this.tip = super.getTipElement();\n\n    if (!this.getTitle()) {\n      SelectorEngine.findOne(SELECTOR_TITLE, this.tip).remove();\n    }\n\n    if (!this._getContent()) {\n      SelectorEngine.findOne(SELECTOR_CONTENT, this.tip).remove();\n    }\n\n    return this.tip;\n  }\n\n  setContent() {\n    const tip = this.getTipElement(); // we use append for html objects to maintain js events\n\n    this.setElementContent(SelectorEngine.findOne(SELECTOR_TITLE, tip), this.getTitle());\n\n    let content = this._getContent();\n\n    if (typeof content === 'function') {\n      content = content.call(this._element);\n    }\n\n    this.setElementContent(SelectorEngine.findOne(SELECTOR_CONTENT, tip), content);\n    tip.classList.remove(CLASS_NAME_FADE$2, CLASS_NAME_SHOW$2);\n  } // Private\n\n\n  _addAttachmentClass(attachment) {\n    this.getTipElement().classList.add(`${CLASS_PREFIX}-${this.updateAttachment(attachment)}`);\n  }\n\n  _getContent() {\n    return this._element.getAttribute('data-bs-content') || this._config.content;\n  }\n\n  _cleanTipClass() {\n    const tip = this.getTipElement();\n    const tabClass = tip.getAttribute('class').match(BSCLS_PREFIX_REGEX);\n\n    if (tabClass !== null && tabClass.length > 0) {\n      tabClass.map(token => token.trim()).forEach(tClass => tip.classList.remove(tClass));\n    }\n  } // Static\n\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Popover.getOrCreateInstance(this, config);\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config]();\n      }\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Popover to jQuery only if jQuery is present\n */\n\n\ndefineJQueryPlugin(Popover);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): scrollspy.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$2 = 'scrollspy';\nconst DATA_KEY$2 = 'bs.scrollspy';\nconst EVENT_KEY$2 = `.${DATA_KEY$2}`;\nconst DATA_API_KEY$1 = '.data-api';\nconst Default$1 = {\n  offset: 10,\n  method: 'auto',\n  target: ''\n};\nconst DefaultType$1 = {\n  offset: 'number',\n  method: 'string',\n  target: '(string|element)'\n};\nconst EVENT_ACTIVATE = `activate${EVENT_KEY$2}`;\nconst EVENT_SCROLL = `scroll${EVENT_KEY$2}`;\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY$2}${DATA_API_KEY$1}`;\nconst CLASS_NAME_DROPDOWN_ITEM = 'dropdown-item';\nconst CLASS_NAME_ACTIVE$1 = 'active';\nconst SELECTOR_DATA_SPY = '[data-bs-spy=\"scroll\"]';\nconst SELECTOR_NAV_LIST_GROUP$1 = '.nav, .list-group';\nconst SELECTOR_NAV_LINKS = '.nav-link';\nconst SELECTOR_NAV_ITEMS = '.nav-item';\nconst SELECTOR_LIST_ITEMS = '.list-group-item';\nconst SELECTOR_DROPDOWN$1 = '.dropdown';\nconst SELECTOR_DROPDOWN_TOGGLE$1 = '.dropdown-toggle';\nconst METHOD_OFFSET = 'offset';\nconst METHOD_POSITION = 'position';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass ScrollSpy extends BaseComponent {\n  constructor(element, config) {\n    super(element);\n    this._scrollElement = this._element.tagName === 'BODY' ? window : this._element;\n    this._config = this._getConfig(config);\n    this._selector = `${this._config.target} ${SELECTOR_NAV_LINKS}, ${this._config.target} ${SELECTOR_LIST_ITEMS}, ${this._config.target} .${CLASS_NAME_DROPDOWN_ITEM}`;\n    this._offsets = [];\n    this._targets = [];\n    this._activeTarget = null;\n    this._scrollHeight = 0;\n    EventHandler.on(this._scrollElement, EVENT_SCROLL, () => this._process());\n    this.refresh();\n\n    this._process();\n  } // Getters\n\n\n  static get Default() {\n    return Default$1;\n  }\n\n  static get NAME() {\n    return NAME$2;\n  } // Public\n\n\n  refresh() {\n    const autoMethod = this._scrollElement === this._scrollElement.window ? METHOD_OFFSET : METHOD_POSITION;\n    const offsetMethod = this._config.method === 'auto' ? autoMethod : this._config.method;\n    const offsetBase = offsetMethod === METHOD_POSITION ? this._getScrollTop() : 0;\n    this._offsets = [];\n    this._targets = [];\n    this._scrollHeight = this._getScrollHeight();\n    const targets = SelectorEngine.find(this._selector);\n    targets.map(element => {\n      const targetSelector = getSelectorFromElement(element);\n      const target = targetSelector ? SelectorEngine.findOne(targetSelector) : null;\n\n      if (target) {\n        const targetBCR = target.getBoundingClientRect();\n\n        if (targetBCR.width || targetBCR.height) {\n          return [Manipulator[offsetMethod](target).top + offsetBase, targetSelector];\n        }\n      }\n\n      return null;\n    }).filter(item => item).sort((a, b) => a[0] - b[0]).forEach(item => {\n      this._offsets.push(item[0]);\n\n      this._targets.push(item[1]);\n    });\n  }\n\n  dispose() {\n    EventHandler.off(this._scrollElement, EVENT_KEY$2);\n    super.dispose();\n  } // Private\n\n\n  _getConfig(config) {\n    config = { ...Default$1,\n      ...Manipulator.getDataAttributes(this._element),\n      ...(typeof config === 'object' && config ? config : {})\n    };\n\n    if (typeof config.target !== 'string' && isElement(config.target)) {\n      let {\n        id\n      } = config.target;\n\n      if (!id) {\n        id = getUID(NAME$2);\n        config.target.id = id;\n      }\n\n      config.target = `#${id}`;\n    }\n\n    typeCheckConfig(NAME$2, config, DefaultType$1);\n    return config;\n  }\n\n  _getScrollTop() {\n    return this._scrollElement === window ? this._scrollElement.pageYOffset : this._scrollElement.scrollTop;\n  }\n\n  _getScrollHeight() {\n    return this._scrollElement.scrollHeight || Math.max(document.body.scrollHeight, document.documentElement.scrollHeight);\n  }\n\n  _getOffsetHeight() {\n    return this._scrollElement === window ? window.innerHeight : this._scrollElement.getBoundingClientRect().height;\n  }\n\n  _process() {\n    const scrollTop = this._getScrollTop() + this._config.offset;\n\n    const scrollHeight = this._getScrollHeight();\n\n    const maxScroll = this._config.offset + scrollHeight - this._getOffsetHeight();\n\n    if (this._scrollHeight !== scrollHeight) {\n      this.refresh();\n    }\n\n    if (scrollTop >= maxScroll) {\n      const target = this._targets[this._targets.length - 1];\n\n      if (this._activeTarget !== target) {\n        this._activate(target);\n      }\n\n      return;\n    }\n\n    if (this._activeTarget && scrollTop < this._offsets[0] && this._offsets[0] > 0) {\n      this._activeTarget = null;\n\n      this._clear();\n\n      return;\n    }\n\n    for (let i = this._offsets.length; i--;) {\n      const isActiveTarget = this._activeTarget !== this._targets[i] && scrollTop >= this._offsets[i] && (typeof this._offsets[i + 1] === 'undefined' || scrollTop < this._offsets[i + 1]);\n\n      if (isActiveTarget) {\n        this._activate(this._targets[i]);\n      }\n    }\n  }\n\n  _activate(target) {\n    this._activeTarget = target;\n\n    this._clear();\n\n    const queries = this._selector.split(',').map(selector => `${selector}[data-bs-target=\"${target}\"],${selector}[href=\"${target}\"]`);\n\n    const link = SelectorEngine.findOne(queries.join(','));\n\n    if (link.classList.contains(CLASS_NAME_DROPDOWN_ITEM)) {\n      SelectorEngine.findOne(SELECTOR_DROPDOWN_TOGGLE$1, link.closest(SELECTOR_DROPDOWN$1)).classList.add(CLASS_NAME_ACTIVE$1);\n      link.classList.add(CLASS_NAME_ACTIVE$1);\n    } else {\n      // Set triggered link as active\n      link.classList.add(CLASS_NAME_ACTIVE$1);\n      SelectorEngine.parents(link, SELECTOR_NAV_LIST_GROUP$1).forEach(listGroup => {\n        // Set triggered links parents as active\n        // With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor\n        SelectorEngine.prev(listGroup, `${SELECTOR_NAV_LINKS}, ${SELECTOR_LIST_ITEMS}`).forEach(item => item.classList.add(CLASS_NAME_ACTIVE$1)); // Handle special case when .nav-link is inside .nav-item\n\n        SelectorEngine.prev(listGroup, SELECTOR_NAV_ITEMS).forEach(navItem => {\n          SelectorEngine.children(navItem, SELECTOR_NAV_LINKS).forEach(item => item.classList.add(CLASS_NAME_ACTIVE$1));\n        });\n      });\n    }\n\n    EventHandler.trigger(this._scrollElement, EVENT_ACTIVATE, {\n      relatedTarget: target\n    });\n  }\n\n  _clear() {\n    SelectorEngine.find(this._selector).filter(node => node.classList.contains(CLASS_NAME_ACTIVE$1)).forEach(node => node.classList.remove(CLASS_NAME_ACTIVE$1));\n  } // Static\n\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = ScrollSpy.getOrCreateInstance(this, config);\n\n      if (typeof config !== 'string') {\n        return;\n      }\n\n      if (typeof data[config] === 'undefined') {\n        throw new TypeError(`No method named \"${config}\"`);\n      }\n\n      data[config]();\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n  SelectorEngine.find(SELECTOR_DATA_SPY).forEach(spy => new ScrollSpy(spy));\n});\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .ScrollSpy to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(ScrollSpy);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): tab.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$1 = 'tab';\nconst DATA_KEY$1 = 'bs.tab';\nconst EVENT_KEY$1 = `.${DATA_KEY$1}`;\nconst DATA_API_KEY = '.data-api';\nconst EVENT_HIDE$1 = `hide${EVENT_KEY$1}`;\nconst EVENT_HIDDEN$1 = `hidden${EVENT_KEY$1}`;\nconst EVENT_SHOW$1 = `show${EVENT_KEY$1}`;\nconst EVENT_SHOWN$1 = `shown${EVENT_KEY$1}`;\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY$1}${DATA_API_KEY}`;\nconst CLASS_NAME_DROPDOWN_MENU = 'dropdown-menu';\nconst CLASS_NAME_ACTIVE = 'active';\nconst CLASS_NAME_FADE$1 = 'fade';\nconst CLASS_NAME_SHOW$1 = 'show';\nconst SELECTOR_DROPDOWN = '.dropdown';\nconst SELECTOR_NAV_LIST_GROUP = '.nav, .list-group';\nconst SELECTOR_ACTIVE = '.active';\nconst SELECTOR_ACTIVE_UL = ':scope > li > .active';\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"tab\"], [data-bs-toggle=\"pill\"], [data-bs-toggle=\"list\"]';\nconst SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle';\nconst SELECTOR_DROPDOWN_ACTIVE_CHILD = ':scope > .dropdown-menu .active';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Tab extends BaseComponent {\n  // Getters\n  static get NAME() {\n    return NAME$1;\n  } // Public\n\n\n  show() {\n    if (this._element.parentNode && this._element.parentNode.nodeType === Node.ELEMENT_NODE && this._element.classList.contains(CLASS_NAME_ACTIVE)) {\n      return;\n    }\n\n    let previous;\n    const target = getElementFromSelector(this._element);\n\n    const listElement = this._element.closest(SELECTOR_NAV_LIST_GROUP);\n\n    if (listElement) {\n      const itemSelector = listElement.nodeName === 'UL' || listElement.nodeName === 'OL' ? SELECTOR_ACTIVE_UL : SELECTOR_ACTIVE;\n      previous = SelectorEngine.find(itemSelector, listElement);\n      previous = previous[previous.length - 1];\n    }\n\n    const hideEvent = previous ? EventHandler.trigger(previous, EVENT_HIDE$1, {\n      relatedTarget: this._element\n    }) : null;\n    const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$1, {\n      relatedTarget: previous\n    });\n\n    if (showEvent.defaultPrevented || hideEvent !== null && hideEvent.defaultPrevented) {\n      return;\n    }\n\n    this._activate(this._element, listElement);\n\n    const complete = () => {\n      EventHandler.trigger(previous, EVENT_HIDDEN$1, {\n        relatedTarget: this._element\n      });\n      EventHandler.trigger(this._element, EVENT_SHOWN$1, {\n        relatedTarget: previous\n      });\n    };\n\n    if (target) {\n      this._activate(target, target.parentNode, complete);\n    } else {\n      complete();\n    }\n  } // Private\n\n\n  _activate(element, container, callback) {\n    const activeElements = container && (container.nodeName === 'UL' || container.nodeName === 'OL') ? SelectorEngine.find(SELECTOR_ACTIVE_UL, container) : SelectorEngine.children(container, SELECTOR_ACTIVE);\n    const active = activeElements[0];\n    const isTransitioning = callback && active && active.classList.contains(CLASS_NAME_FADE$1);\n\n    const complete = () => this._transitionComplete(element, active, callback);\n\n    if (active && isTransitioning) {\n      active.classList.remove(CLASS_NAME_SHOW$1);\n\n      this._queueCallback(complete, element, true);\n    } else {\n      complete();\n    }\n  }\n\n  _transitionComplete(element, active, callback) {\n    if (active) {\n      active.classList.remove(CLASS_NAME_ACTIVE);\n      const dropdownChild = SelectorEngine.findOne(SELECTOR_DROPDOWN_ACTIVE_CHILD, active.parentNode);\n\n      if (dropdownChild) {\n        dropdownChild.classList.remove(CLASS_NAME_ACTIVE);\n      }\n\n      if (active.getAttribute('role') === 'tab') {\n        active.setAttribute('aria-selected', false);\n      }\n    }\n\n    element.classList.add(CLASS_NAME_ACTIVE);\n\n    if (element.getAttribute('role') === 'tab') {\n      element.setAttribute('aria-selected', true);\n    }\n\n    reflow(element);\n\n    if (element.classList.contains(CLASS_NAME_FADE$1)) {\n      element.classList.add(CLASS_NAME_SHOW$1);\n    }\n\n    let parent = element.parentNode;\n\n    if (parent && parent.nodeName === 'LI') {\n      parent = parent.parentNode;\n    }\n\n    if (parent && parent.classList.contains(CLASS_NAME_DROPDOWN_MENU)) {\n      const dropdownElement = element.closest(SELECTOR_DROPDOWN);\n\n      if (dropdownElement) {\n        SelectorEngine.find(SELECTOR_DROPDOWN_TOGGLE, dropdownElement).forEach(dropdown => dropdown.classList.add(CLASS_NAME_ACTIVE));\n      }\n\n      element.setAttribute('aria-expanded', true);\n    }\n\n    if (callback) {\n      callback();\n    }\n  } // Static\n\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Tab.getOrCreateInstance(this);\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config]();\n      }\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n  if (['A', 'AREA'].includes(this.tagName)) {\n    event.preventDefault();\n  }\n\n  if (isDisabled(this)) {\n    return;\n  }\n\n  const data = Tab.getOrCreateInstance(this);\n  data.show();\n});\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Tab to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Tab);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): toast.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'toast';\nconst DATA_KEY = 'bs.toast';\nconst EVENT_KEY = `.${DATA_KEY}`;\nconst EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY}`;\nconst EVENT_MOUSEOVER = `mouseover${EVENT_KEY}`;\nconst EVENT_MOUSEOUT = `mouseout${EVENT_KEY}`;\nconst EVENT_FOCUSIN = `focusin${EVENT_KEY}`;\nconst EVENT_FOCUSOUT = `focusout${EVENT_KEY}`;\nconst EVENT_HIDE = `hide${EVENT_KEY}`;\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`;\nconst EVENT_SHOW = `show${EVENT_KEY}`;\nconst EVENT_SHOWN = `shown${EVENT_KEY}`;\nconst CLASS_NAME_FADE = 'fade';\nconst CLASS_NAME_HIDE = 'hide';\nconst CLASS_NAME_SHOW = 'show';\nconst CLASS_NAME_SHOWING = 'showing';\nconst DefaultType = {\n  animation: 'boolean',\n  autohide: 'boolean',\n  delay: 'number'\n};\nconst Default = {\n  animation: true,\n  autohide: true,\n  delay: 5000\n};\nconst SELECTOR_DATA_DISMISS = '[data-bs-dismiss=\"toast\"]';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Toast extends BaseComponent {\n  constructor(element, config) {\n    super(element);\n    this._config = this._getConfig(config);\n    this._timeout = null;\n    this._hasMouseInteraction = false;\n    this._hasKeyboardInteraction = false;\n\n    this._setListeners();\n  } // Getters\n\n\n  static get DefaultType() {\n    return DefaultType;\n  }\n\n  static get Default() {\n    return Default;\n  }\n\n  static get NAME() {\n    return NAME;\n  } // Public\n\n\n  show() {\n    const showEvent = EventHandler.trigger(this._element, EVENT_SHOW);\n\n    if (showEvent.defaultPrevented) {\n      return;\n    }\n\n    this._clearTimeout();\n\n    if (this._config.animation) {\n      this._element.classList.add(CLASS_NAME_FADE);\n    }\n\n    const complete = () => {\n      this._element.classList.remove(CLASS_NAME_SHOWING);\n\n      this._element.classList.add(CLASS_NAME_SHOW);\n\n      EventHandler.trigger(this._element, EVENT_SHOWN);\n\n      this._maybeScheduleHide();\n    };\n\n    this._element.classList.remove(CLASS_NAME_HIDE);\n\n    reflow(this._element);\n\n    this._element.classList.add(CLASS_NAME_SHOWING);\n\n    this._queueCallback(complete, this._element, this._config.animation);\n  }\n\n  hide() {\n    if (!this._element.classList.contains(CLASS_NAME_SHOW)) {\n      return;\n    }\n\n    const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE);\n\n    if (hideEvent.defaultPrevented) {\n      return;\n    }\n\n    const complete = () => {\n      this._element.classList.add(CLASS_NAME_HIDE);\n\n      EventHandler.trigger(this._element, EVENT_HIDDEN);\n    };\n\n    this._element.classList.remove(CLASS_NAME_SHOW);\n\n    this._queueCallback(complete, this._element, this._config.animation);\n  }\n\n  dispose() {\n    this._clearTimeout();\n\n    if (this._element.classList.contains(CLASS_NAME_SHOW)) {\n      this._element.classList.remove(CLASS_NAME_SHOW);\n    }\n\n    super.dispose();\n  } // Private\n\n\n  _getConfig(config) {\n    config = { ...Default,\n      ...Manipulator.getDataAttributes(this._element),\n      ...(typeof config === 'object' && config ? config : {})\n    };\n    typeCheckConfig(NAME, config, this.constructor.DefaultType);\n    return config;\n  }\n\n  _maybeScheduleHide() {\n    if (!this._config.autohide) {\n      return;\n    }\n\n    if (this._hasMouseInteraction || this._hasKeyboardInteraction) {\n      return;\n    }\n\n    this._timeout = setTimeout(() => {\n      this.hide();\n    }, this._config.delay);\n  }\n\n  _onInteraction(event, isInteracting) {\n    switch (event.type) {\n      case 'mouseover':\n      case 'mouseout':\n        this._hasMouseInteraction = isInteracting;\n        break;\n\n      case 'focusin':\n      case 'focusout':\n        this._hasKeyboardInteraction = isInteracting;\n        break;\n    }\n\n    if (isInteracting) {\n      this._clearTimeout();\n\n      return;\n    }\n\n    const nextElement = event.relatedTarget;\n\n    if (this._element === nextElement || this._element.contains(nextElement)) {\n      return;\n    }\n\n    this._maybeScheduleHide();\n  }\n\n  _setListeners() {\n    EventHandler.on(this._element, EVENT_CLICK_DISMISS, SELECTOR_DATA_DISMISS, () => this.hide());\n    EventHandler.on(this._element, EVENT_MOUSEOVER, event => this._onInteraction(event, true));\n    EventHandler.on(this._element, EVENT_MOUSEOUT, event => this._onInteraction(event, false));\n    EventHandler.on(this._element, EVENT_FOCUSIN, event => this._onInteraction(event, true));\n    EventHandler.on(this._element, EVENT_FOCUSOUT, event => this._onInteraction(event, false));\n  }\n\n  _clearTimeout() {\n    clearTimeout(this._timeout);\n    this._timeout = null;\n  } // Static\n\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Toast.getOrCreateInstance(this, config);\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config](this);\n      }\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Toast to jQuery only if jQuery is present\n */\n\n\ndefineJQueryPlugin(Toast);\n\nexport { Alert, Button, Carousel, Collapse, Dropdown, Modal, Offcanvas, Popover, ScrollSpy, Tab, Toast, Tooltip };\n//# sourceMappingURL=bootstrap.esm.js.map\n"
  },
  {
    "path": "src/sourceDev.WebApp/SharedThemes/lumen/wwwroot/js/jquery.js",
    "content": "/*!\n * jQuery JavaScript Library v3.7.0\n * https://jquery.com/\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license\n * https://jquery.org/license\n *\n * Date: 2023-05-11T18:29Z\n */\n(function (global, factory) {\n\n\t\"use strict\";\n\n\tif (typeof module === \"object\" && typeof module.exports === \"object\") {\n\n\t\t// For CommonJS and CommonJS-like environments where a proper `window`\n\t\t// is present, execute the factory and get jQuery.\n\t\t// For environments that do not have a `window` with a `document`\n\t\t// (such as Node.js), expose a factory as module.exports.\n\t\t// This accentuates the need for the creation of a real `window`.\n\t\t// e.g. var jQuery = require(\"jquery\")(window);\n\t\t// See ticket trac-14549 for more info.\n\t\tmodule.exports = global.document ?\n\t\t\tfactory(global, true) :\n\t\t\tfunction (w) {\n\t\t\t\tif (!w.document) {\n\t\t\t\t\tthrow new Error(\"jQuery requires a window with a document\");\n\t\t\t\t}\n\t\t\t\treturn factory(w);\n\t\t\t};\n\t} else {\n\t\tfactory(global);\n\t}\n\n\t// Pass this if window is not defined yet\n})(typeof window !== \"undefined\" ? window : this, function (window, noGlobal) {\n\n\t// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1\n\t// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode\n\t// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common\n\t// enough that all such attempts are guarded in a try block.\n\t\"use strict\";\n\n\tvar arr = [];\n\n\tvar getProto = Object.getPrototypeOf;\n\n\tvar slice = arr.slice;\n\n\tvar flat = arr.flat ? function (array) {\n\t\treturn arr.flat.call(array);\n\t} : function (array) {\n\t\treturn arr.concat.apply([], array);\n\t};\n\n\n\tvar push = arr.push;\n\n\tvar indexOf = arr.indexOf;\n\n\tvar class2type = {};\n\n\tvar toString = class2type.toString;\n\n\tvar hasOwn = class2type.hasOwnProperty;\n\n\tvar fnToString = hasOwn.toString;\n\n\tvar ObjectFunctionString = fnToString.call(Object);\n\n\tvar support = {};\n\n\tvar isFunction = function isFunction(obj) {\n\n\t\t// Support: Chrome <=57, Firefox <=52\n\t\t// In some browsers, typeof returns \"function\" for HTML <object> elements\n\t\t// (i.e., `typeof document.createElement( \"object\" ) === \"function\"`).\n\t\t// We don't want to classify *any* DOM node as a function.\n\t\t// Support: QtWeb <=3.8.5, WebKit <=534.34, wkhtmltopdf tool <=0.12.5\n\t\t// Plus for old WebKit, typeof returns \"function\" for HTML collections\n\t\t// (e.g., `typeof document.getElementsByTagName(\"div\") === \"function\"`). (gh-4756)\n\t\treturn typeof obj === \"function\" && typeof obj.nodeType !== \"number\" &&\n\t\t\ttypeof obj.item !== \"function\";\n\t};\n\n\n\tvar isWindow = function isWindow(obj) {\n\t\treturn obj != null && obj === obj.window;\n\t};\n\n\n\tvar document = window.document;\n\n\n\n\tvar preservedScriptAttributes = {\n\t\ttype: true,\n\t\tsrc: true,\n\t\tnonce: true,\n\t\tnoModule: true\n\t};\n\n\tfunction DOMEval(code, node, doc) {\n\t\tdoc = doc || document;\n\n\t\tvar i, val,\n\t\t\tscript = doc.createElement(\"script\");\n\n\t\tscript.text = code;\n\t\tif (node) {\n\t\t\tfor (i in preservedScriptAttributes) {\n\n\t\t\t\t// Support: Firefox 64+, Edge 18+\n\t\t\t\t// Some browsers don't support the \"nonce\" property on scripts.\n\t\t\t\t// On the other hand, just using `getAttribute` is not enough as\n\t\t\t\t// the `nonce` attribute is reset to an empty string whenever it\n\t\t\t\t// becomes browsing-context connected.\n\t\t\t\t// See https://github.com/whatwg/html/issues/2369\n\t\t\t\t// See https://html.spec.whatwg.org/#nonce-attributes\n\t\t\t\t// The `node.getAttribute` check was added for the sake of\n\t\t\t\t// `jQuery.globalEval` so that it can fake a nonce-containing node\n\t\t\t\t// via an object.\n\t\t\t\tval = node[i] || node.getAttribute && node.getAttribute(i);\n\t\t\t\tif (val) {\n\t\t\t\t\tscript.setAttribute(i, val);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tdoc.head.appendChild(script).parentNode.removeChild(script);\n\t}\n\n\n\tfunction toType(obj) {\n\t\tif (obj == null) {\n\t\t\treturn obj + \"\";\n\t\t}\n\n\t\t// Support: Android <=2.3 only (functionish RegExp)\n\t\treturn typeof obj === \"object\" || typeof obj === \"function\" ?\n\t\t\tclass2type[toString.call(obj)] || \"object\" :\n\t\t\ttypeof obj;\n\t}\n\t/* global Symbol */\n\t// Defining this global in .eslintrc.json would create a danger of using the global\n\t// unguarded in another place, it seems safer to define global only for this module\n\n\n\n\tvar version = \"3.7.0\",\n\n\t\trhtmlSuffix = /HTML$/i,\n\n\t\t// Define a local copy of jQuery\n\t\tjQuery = function (selector, context) {\n\n\t\t\t// The jQuery object is actually just the init constructor 'enhanced'\n\t\t\t// Need init if jQuery is called (just allow error to be thrown if not included)\n\t\t\treturn new jQuery.fn.init(selector, context);\n\t\t};\n\n\tjQuery.fn = jQuery.prototype = {\n\n\t\t// The current version of jQuery being used\n\t\tjquery: version,\n\n\t\tconstructor: jQuery,\n\n\t\t// The default length of a jQuery object is 0\n\t\tlength: 0,\n\n\t\ttoArray: function () {\n\t\t\treturn slice.call(this);\n\t\t},\n\n\t\t// Get the Nth element in the matched element set OR\n\t\t// Get the whole matched element set as a clean array\n\t\tget: function (num) {\n\n\t\t\t// Return all the elements in a clean array\n\t\t\tif (num == null) {\n\t\t\t\treturn slice.call(this);\n\t\t\t}\n\n\t\t\t// Return just the one element from the set\n\t\t\treturn num < 0 ? this[num + this.length] : this[num];\n\t\t},\n\n\t\t// Take an array of elements and push it onto the stack\n\t\t// (returning the new matched element set)\n\t\tpushStack: function (elems) {\n\n\t\t\t// Build a new jQuery matched element set\n\t\t\tvar ret = jQuery.merge(this.constructor(), elems);\n\n\t\t\t// Add the old object onto the stack (as a reference)\n\t\t\tret.prevObject = this;\n\n\t\t\t// Return the newly-formed element set\n\t\t\treturn ret;\n\t\t},\n\n\t\t// Execute a callback for every element in the matched set.\n\t\teach: function (callback) {\n\t\t\treturn jQuery.each(this, callback);\n\t\t},\n\n\t\tmap: function (callback) {\n\t\t\treturn this.pushStack(jQuery.map(this, function (elem, i) {\n\t\t\t\treturn callback.call(elem, i, elem);\n\t\t\t}));\n\t\t},\n\n\t\tslice: function () {\n\t\t\treturn this.pushStack(slice.apply(this, arguments));\n\t\t},\n\n\t\tfirst: function () {\n\t\t\treturn this.eq(0);\n\t\t},\n\n\t\tlast: function () {\n\t\t\treturn this.eq(-1);\n\t\t},\n\n\t\teven: function () {\n\t\t\treturn this.pushStack(jQuery.grep(this, function (_elem, i) {\n\t\t\t\treturn (i + 1) % 2;\n\t\t\t}));\n\t\t},\n\n\t\todd: function () {\n\t\t\treturn this.pushStack(jQuery.grep(this, function (_elem, i) {\n\t\t\t\treturn i % 2;\n\t\t\t}));\n\t\t},\n\n\t\teq: function (i) {\n\t\t\tvar len = this.length,\n\t\t\t\tj = +i + (i < 0 ? len : 0);\n\t\t\treturn this.pushStack(j >= 0 && j < len ? [this[j]] : []);\n\t\t},\n\n\t\tend: function () {\n\t\t\treturn this.prevObject || this.constructor();\n\t\t},\n\n\t\t// For internal use only.\n\t\t// Behaves like an Array's method, not like a jQuery method.\n\t\tpush: push,\n\t\tsort: arr.sort,\n\t\tsplice: arr.splice\n\t};\n\n\tjQuery.extend = jQuery.fn.extend = function () {\n\t\tvar options, name, src, copy, copyIsArray, clone,\n\t\t\ttarget = arguments[0] || {},\n\t\t\ti = 1,\n\t\t\tlength = arguments.length,\n\t\t\tdeep = false;\n\n\t\t// Handle a deep copy situation\n\t\tif (typeof target === \"boolean\") {\n\t\t\tdeep = target;\n\n\t\t\t// Skip the boolean and the target\n\t\t\ttarget = arguments[i] || {};\n\t\t\ti++;\n\t\t}\n\n\t\t// Handle case when target is a string or something (possible in deep copy)\n\t\tif (typeof target !== \"object\" && !isFunction(target)) {\n\t\t\ttarget = {};\n\t\t}\n\n\t\t// Extend jQuery itself if only one argument is passed\n\t\tif (i === length) {\n\t\t\ttarget = this;\n\t\t\ti--;\n\t\t}\n\n\t\tfor (; i < length; i++) {\n\n\t\t\t// Only deal with non-null/undefined values\n\t\t\tif ((options = arguments[i]) != null) {\n\n\t\t\t\t// Extend the base object\n\t\t\t\tfor (name in options) {\n\t\t\t\t\tcopy = options[name];\n\n\t\t\t\t\t// Prevent Object.prototype pollution\n\t\t\t\t\t// Prevent never-ending loop\n\t\t\t\t\tif (name === \"__proto__\" || target === copy) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\t\tif (deep && copy && (jQuery.isPlainObject(copy) ||\n\t\t\t\t\t\t(copyIsArray = Array.isArray(copy)))) {\n\t\t\t\t\t\tsrc = target[name];\n\n\t\t\t\t\t\t// Ensure proper type for the source value\n\t\t\t\t\t\tif (copyIsArray && !Array.isArray(src)) {\n\t\t\t\t\t\t\tclone = [];\n\t\t\t\t\t\t} else if (!copyIsArray && !jQuery.isPlainObject(src)) {\n\t\t\t\t\t\t\tclone = {};\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tclone = src;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcopyIsArray = false;\n\n\t\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\t\ttarget[name] = jQuery.extend(deep, clone, copy);\n\n\t\t\t\t\t\t// Don't bring in undefined values\n\t\t\t\t\t} else if (copy !== undefined) {\n\t\t\t\t\t\ttarget[name] = copy;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Return the modified object\n\t\treturn target;\n\t};\n\n\tjQuery.extend({\n\n\t\t// Unique for each copy of jQuery on the page\n\t\texpando: \"jQuery\" + (version + Math.random()).replace(/\\D/g, \"\"),\n\n\t\t// Assume jQuery is ready without the ready module\n\t\tisReady: true,\n\n\t\terror: function (msg) {\n\t\t\tthrow new Error(msg);\n\t\t},\n\n\t\tnoop: function () { },\n\n\t\tisPlainObject: function (obj) {\n\t\t\tvar proto, Ctor;\n\n\t\t\t// Detect obvious negatives\n\t\t\t// Use toString instead of jQuery.type to catch host objects\n\t\t\tif (!obj || toString.call(obj) !== \"[object Object]\") {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tproto = getProto(obj);\n\n\t\t\t// Objects with no prototype (e.g., `Object.create( null )`) are plain\n\t\t\tif (!proto) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\t// Objects with prototype are plain iff they were constructed by a global Object function\n\t\t\tCtor = hasOwn.call(proto, \"constructor\") && proto.constructor;\n\t\t\treturn typeof Ctor === \"function\" && fnToString.call(Ctor) === ObjectFunctionString;\n\t\t},\n\n\t\tisEmptyObject: function (obj) {\n\t\t\tvar name;\n\n\t\t\tfor (name in obj) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\n\t\t// Evaluates a script in a provided context; falls back to the global one\n\t\t// if not specified.\n\t\tglobalEval: function (code, options, doc) {\n\t\t\tDOMEval(code, { nonce: options && options.nonce }, doc);\n\t\t},\n\n\t\teach: function (obj, callback) {\n\t\t\tvar length, i = 0;\n\n\t\t\tif (isArrayLike(obj)) {\n\t\t\t\tlength = obj.length;\n\t\t\t\tfor (; i < length; i++) {\n\t\t\t\t\tif (callback.call(obj[i], i, obj[i]) === false) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor (i in obj) {\n\t\t\t\t\tif (callback.call(obj[i], i, obj[i]) === false) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn obj;\n\t\t},\n\n\n\t\t// Retrieve the text value of an array of DOM nodes\n\t\ttext: function (elem) {\n\t\t\tvar node,\n\t\t\t\tret = \"\",\n\t\t\t\ti = 0,\n\t\t\t\tnodeType = elem.nodeType;\n\n\t\t\tif (!nodeType) {\n\n\t\t\t\t// If no nodeType, this is expected to be an array\n\t\t\t\twhile ((node = elem[i++])) {\n\n\t\t\t\t\t// Do not traverse comment nodes\n\t\t\t\t\tret += jQuery.text(node);\n\t\t\t\t}\n\t\t\t} else if (nodeType === 1 || nodeType === 9 || nodeType === 11) {\n\t\t\t\treturn elem.textContent;\n\t\t\t} else if (nodeType === 3 || nodeType === 4) {\n\t\t\t\treturn elem.nodeValue;\n\t\t\t}\n\n\t\t\t// Do not include comment or processing instruction nodes\n\n\t\t\treturn ret;\n\t\t},\n\n\t\t// results is for internal usage only\n\t\tmakeArray: function (arr, results) {\n\t\t\tvar ret = results || [];\n\n\t\t\tif (arr != null) {\n\t\t\t\tif (isArrayLike(Object(arr))) {\n\t\t\t\t\tjQuery.merge(ret,\n\t\t\t\t\t\ttypeof arr === \"string\" ?\n\t\t\t\t\t\t\t[arr] : arr\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\tpush.call(ret, arr);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn ret;\n\t\t},\n\n\t\tinArray: function (elem, arr, i) {\n\t\t\treturn arr == null ? -1 : indexOf.call(arr, elem, i);\n\t\t},\n\n\t\tisXMLDoc: function (elem) {\n\t\t\tvar namespace = elem && elem.namespaceURI,\n\t\t\t\tdocElem = elem && (elem.ownerDocument || elem).documentElement;\n\n\t\t\t// Assume HTML when documentElement doesn't yet exist, such as inside\n\t\t\t// document fragments.\n\t\t\treturn !rhtmlSuffix.test(namespace || docElem && docElem.nodeName || \"HTML\");\n\t\t},\n\n\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\tmerge: function (first, second) {\n\t\t\tvar len = +second.length,\n\t\t\t\tj = 0,\n\t\t\t\ti = first.length;\n\n\t\t\tfor (; j < len; j++) {\n\t\t\t\tfirst[i++] = second[j];\n\t\t\t}\n\n\t\t\tfirst.length = i;\n\n\t\t\treturn first;\n\t\t},\n\n\t\tgrep: function (elems, callback, invert) {\n\t\t\tvar callbackInverse,\n\t\t\t\tmatches = [],\n\t\t\t\ti = 0,\n\t\t\t\tlength = elems.length,\n\t\t\t\tcallbackExpect = !invert;\n\n\t\t\t// Go through the array, only saving the items\n\t\t\t// that pass the validator function\n\t\t\tfor (; i < length; i++) {\n\t\t\t\tcallbackInverse = !callback(elems[i], i);\n\t\t\t\tif (callbackInverse !== callbackExpect) {\n\t\t\t\t\tmatches.push(elems[i]);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn matches;\n\t\t},\n\n\t\t// arg is for internal usage only\n\t\tmap: function (elems, callback, arg) {\n\t\t\tvar length, value,\n\t\t\t\ti = 0,\n\t\t\t\tret = [];\n\n\t\t\t// Go through the array, translating each of the items to their new values\n\t\t\tif (isArrayLike(elems)) {\n\t\t\t\tlength = elems.length;\n\t\t\t\tfor (; i < length; i++) {\n\t\t\t\t\tvalue = callback(elems[i], i, arg);\n\n\t\t\t\t\tif (value != null) {\n\t\t\t\t\t\tret.push(value);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Go through every key on the object,\n\t\t\t} else {\n\t\t\t\tfor (i in elems) {\n\t\t\t\t\tvalue = callback(elems[i], i, arg);\n\n\t\t\t\t\tif (value != null) {\n\t\t\t\t\t\tret.push(value);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Flatten any nested arrays\n\t\t\treturn flat(ret);\n\t\t},\n\n\t\t// A global GUID counter for objects\n\t\tguid: 1,\n\n\t\t// jQuery.support is not used in Core but other projects attach their\n\t\t// properties to it so it needs to exist.\n\t\tsupport: support\n\t});\n\n\tif (typeof Symbol === \"function\") {\n\t\tjQuery.fn[Symbol.iterator] = arr[Symbol.iterator];\n\t}\n\n\t// Populate the class2type map\n\tjQuery.each(\"Boolean Number String Function Array Date RegExp Object Error Symbol\".split(\" \"),\n\t\tfunction (_i, name) {\n\t\t\tclass2type[\"[object \" + name + \"]\"] = name.toLowerCase();\n\t\t});\n\n\tfunction isArrayLike(obj) {\n\n\t\t// Support: real iOS 8.2 only (not reproducible in simulator)\n\t\t// `in` check used to prevent JIT error (gh-2145)\n\t\t// hasOwn isn't used here due to false negatives\n\t\t// regarding Nodelist length in IE\n\t\tvar length = !!obj && \"length\" in obj && obj.length,\n\t\t\ttype = toType(obj);\n\n\t\tif (isFunction(obj) || isWindow(obj)) {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn type === \"array\" || length === 0 ||\n\t\t\ttypeof length === \"number\" && length > 0 && (length - 1) in obj;\n\t}\n\n\n\tfunction nodeName(elem, name) {\n\n\t\treturn elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();\n\n\t}\n\tvar pop = arr.pop;\n\n\n\tvar sort = arr.sort;\n\n\n\tvar splice = arr.splice;\n\n\n\tvar whitespace = \"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\";\n\n\n\tvar rtrimCSS = new RegExp(\n\t\t\"^\" + whitespace + \"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\" + whitespace + \"+$\",\n\t\t\"g\"\n\t);\n\n\n\n\n\t// Note: an element does not contain itself\n\tjQuery.contains = function (a, b) {\n\t\tvar bup = b && b.parentNode;\n\n\t\treturn a === bup || !!(bup && bup.nodeType === 1 && (\n\n\t\t\t// Support: IE 9 - 11+\n\t\t\t// IE doesn't have `contains` on SVG.\n\t\t\ta.contains ?\n\t\t\t\ta.contains(bup) :\n\t\t\t\ta.compareDocumentPosition && a.compareDocumentPosition(bup) & 16\n\t\t));\n\t};\n\n\n\n\n\t// CSS string/identifier serialization\n\t// https://drafts.csswg.org/cssom/#common-serializing-idioms\n\tvar rcssescape = /([\\0-\\x1f\\x7f]|^-?\\d)|^-$|[^\\x80-\\uFFFF\\w-]/g;\n\n\tfunction fcssescape(ch, asCodePoint) {\n\t\tif (asCodePoint) {\n\n\t\t\t// U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER\n\t\t\tif (ch === \"\\0\") {\n\t\t\t\treturn \"\\uFFFD\";\n\t\t\t}\n\n\t\t\t// Control characters and (dependent upon position) numbers get escaped as code points\n\t\t\treturn ch.slice(0, -1) + \"\\\\\" + ch.charCodeAt(ch.length - 1).toString(16) + \" \";\n\t\t}\n\n\t\t// Other potentially-special ASCII characters get backslash-escaped\n\t\treturn \"\\\\\" + ch;\n\t}\n\n\tjQuery.escapeSelector = function (sel) {\n\t\treturn (sel + \"\").replace(rcssescape, fcssescape);\n\t};\n\n\n\n\n\tvar preferredDoc = document,\n\t\tpushNative = push;\n\n\t(function () {\n\n\t\tvar i,\n\t\t\tExpr,\n\t\t\toutermostContext,\n\t\t\tsortInput,\n\t\t\thasDuplicate,\n\t\t\tpush = pushNative,\n\n\t\t\t// Local document vars\n\t\t\tdocument,\n\t\t\tdocumentElement,\n\t\t\tdocumentIsHTML,\n\t\t\trbuggyQSA,\n\t\t\tmatches,\n\n\t\t\t// Instance-specific data\n\t\t\texpando = jQuery.expando,\n\t\t\tdirruns = 0,\n\t\t\tdone = 0,\n\t\t\tclassCache = createCache(),\n\t\t\ttokenCache = createCache(),\n\t\t\tcompilerCache = createCache(),\n\t\t\tnonnativeSelectorCache = createCache(),\n\t\t\tsortOrder = function (a, b) {\n\t\t\t\tif (a === b) {\n\t\t\t\t\thasDuplicate = true;\n\t\t\t\t}\n\t\t\t\treturn 0;\n\t\t\t},\n\n\t\t\tbooleans = \"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|\" +\n\t\t\t\t\"loop|multiple|open|readonly|required|scoped\",\n\n\t\t\t// Regular expressions\n\n\t\t\t// https://www.w3.org/TR/css-syntax-3/#ident-token-diagram\n\t\t\tidentifier = \"(?:\\\\\\\\[\\\\da-fA-F]{1,6}\" + whitespace +\n\t\t\t\t\"?|\\\\\\\\[^\\\\r\\\\n\\\\f]|[\\\\w-]|[^\\0-\\\\x7f])+\",\n\n\t\t\t// Attribute selectors: https://www.w3.org/TR/selectors/#attribute-selectors\n\t\t\tattributes = \"\\\\[\" + whitespace + \"*(\" + identifier + \")(?:\" + whitespace +\n\n\t\t\t\t// Operator (capture 2)\n\t\t\t\t\"*([*^$|!~]?=)\" + whitespace +\n\n\t\t\t\t// \"Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]\"\n\t\t\t\t\"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\" + identifier + \"))|)\" +\n\t\t\t\twhitespace + \"*\\\\]\",\n\n\t\t\tpseudos = \":(\" + identifier + \")(?:\\\\((\" +\n\n\t\t\t\t// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:\n\t\t\t\t// 1. quoted (capture 3; capture 4 or capture 5)\n\t\t\t\t\"('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|\" +\n\n\t\t\t\t// 2. simple (capture 6)\n\t\t\t\t\"((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\" + attributes + \")*)|\" +\n\n\t\t\t\t// 3. anything else (capture 2)\n\t\t\t\t\".*\" +\n\t\t\t\t\")\\\\)|)\",\n\n\t\t\t// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter\n\t\t\trwhitespace = new RegExp(whitespace + \"+\", \"g\"),\n\n\t\t\trcomma = new RegExp(\"^\" + whitespace + \"*,\" + whitespace + \"*\"),\n\t\t\trleadingCombinator = new RegExp(\"^\" + whitespace + \"*([>+~]|\" + whitespace + \")\" +\n\t\t\t\twhitespace + \"*\"),\n\t\t\trdescend = new RegExp(whitespace + \"|>\"),\n\n\t\t\trpseudo = new RegExp(pseudos),\n\t\t\tridentifier = new RegExp(\"^\" + identifier + \"$\"),\n\n\t\t\tmatchExpr = {\n\t\t\t\tID: new RegExp(\"^#(\" + identifier + \")\"),\n\t\t\t\tCLASS: new RegExp(\"^\\\\.(\" + identifier + \")\"),\n\t\t\t\tTAG: new RegExp(\"^(\" + identifier + \"|[*])\"),\n\t\t\t\tATTR: new RegExp(\"^\" + attributes),\n\t\t\t\tPSEUDO: new RegExp(\"^\" + pseudos),\n\t\t\t\tCHILD: new RegExp(\n\t\t\t\t\t\"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\" +\n\t\t\t\t\twhitespace + \"*(even|odd|(([+-]|)(\\\\d*)n|)\" + whitespace + \"*(?:([+-]|)\" +\n\t\t\t\t\twhitespace + \"*(\\\\d+)|))\" + whitespace + \"*\\\\)|)\", \"i\"),\n\t\t\t\tbool: new RegExp(\"^(?:\" + booleans + \")$\", \"i\"),\n\n\t\t\t\t// For use in libraries implementing .is()\n\t\t\t\t// We use this for POS matching in `select`\n\t\t\t\tneedsContext: new RegExp(\"^\" + whitespace +\n\t\t\t\t\t\"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\" + whitespace +\n\t\t\t\t\t\"*((?:-\\\\d)?\\\\d*)\" + whitespace + \"*\\\\)|)(?=[^-]|$)\", \"i\")\n\t\t\t},\n\n\t\t\trinputs = /^(?:input|select|textarea|button)$/i,\n\t\t\trheader = /^h\\d$/i,\n\n\t\t\t// Easily-parseable/retrievable ID or TAG or CLASS selectors\n\t\t\trquickExpr = /^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,\n\n\t\t\trsibling = /[+~]/,\n\n\t\t\t// CSS escapes\n\t\t\t// https://www.w3.org/TR/CSS21/syndata.html#escaped-characters\n\t\t\trunescape = new RegExp(\"\\\\\\\\[\\\\da-fA-F]{1,6}\" + whitespace +\n\t\t\t\t\"?|\\\\\\\\([^\\\\r\\\\n\\\\f])\", \"g\"),\n\t\t\tfunescape = function (escape, nonHex) {\n\t\t\t\tvar high = \"0x\" + escape.slice(1) - 0x10000;\n\n\t\t\t\tif (nonHex) {\n\n\t\t\t\t\t// Strip the backslash prefix from a non-hex escape sequence\n\t\t\t\t\treturn nonHex;\n\t\t\t\t}\n\n\t\t\t\t// Replace a hexadecimal escape sequence with the encoded Unicode code point\n\t\t\t\t// Support: IE <=11+\n\t\t\t\t// For values outside the Basic Multilingual Plane (BMP), manually construct a\n\t\t\t\t// surrogate pair\n\t\t\t\treturn high < 0 ?\n\t\t\t\t\tString.fromCharCode(high + 0x10000) :\n\t\t\t\t\tString.fromCharCode(high >> 10 | 0xD800, high & 0x3FF | 0xDC00);\n\t\t\t},\n\n\t\t\t// Used for iframes; see `setDocument`.\n\t\t\t// Support: IE 9 - 11+, Edge 12 - 18+\n\t\t\t// Removing the function wrapper causes a \"Permission Denied\"\n\t\t\t// error in IE/Edge.\n\t\t\tunloadHandler = function () {\n\t\t\t\tsetDocument();\n\t\t\t},\n\n\t\t\tinDisabledFieldset = addCombinator(\n\t\t\t\tfunction (elem) {\n\t\t\t\t\treturn elem.disabled === true && nodeName(elem, \"fieldset\");\n\t\t\t\t},\n\t\t\t\t{ dir: \"parentNode\", next: \"legend\" }\n\t\t\t);\n\n\t\t// Support: IE <=9 only\n\t\t// Accessing document.activeElement can throw unexpectedly\n\t\t// https://bugs.jquery.com/ticket/13393\n\t\tfunction safeActiveElement() {\n\t\t\ttry {\n\t\t\t\treturn document.activeElement;\n\t\t\t} catch (err) { }\n\t\t}\n\n\t\t// Optimize for push.apply( _, NodeList )\n\t\ttry {\n\t\t\tpush.apply(\n\t\t\t\t(arr = slice.call(preferredDoc.childNodes)),\n\t\t\t\tpreferredDoc.childNodes\n\t\t\t);\n\n\t\t\t// Support: Android <=4.0\n\t\t\t// Detect silently failing push.apply\n\t\t\t// eslint-disable-next-line no-unused-expressions\n\t\t\tarr[preferredDoc.childNodes.length].nodeType;\n\t\t} catch (e) {\n\t\t\tpush = {\n\t\t\t\tapply: function (target, els) {\n\t\t\t\t\tpushNative.apply(target, slice.call(els));\n\t\t\t\t},\n\t\t\t\tcall: function (target) {\n\t\t\t\t\tpushNative.apply(target, slice.call(arguments, 1));\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\n\t\tfunction find(selector, context, results, seed) {\n\t\t\tvar m, i, elem, nid, match, groups, newSelector,\n\t\t\t\tnewContext = context && context.ownerDocument,\n\n\t\t\t\t// nodeType defaults to 9, since context defaults to document\n\t\t\t\tnodeType = context ? context.nodeType : 9;\n\n\t\t\tresults = results || [];\n\n\t\t\t// Return early from calls with invalid selector or context\n\t\t\tif (typeof selector !== \"string\" || !selector ||\n\t\t\t\tnodeType !== 1 && nodeType !== 9 && nodeType !== 11) {\n\n\t\t\t\treturn results;\n\t\t\t}\n\n\t\t\t// Try to shortcut find operations (as opposed to filters) in HTML documents\n\t\t\tif (!seed) {\n\t\t\t\tsetDocument(context);\n\t\t\t\tcontext = context || document;\n\n\t\t\t\tif (documentIsHTML) {\n\n\t\t\t\t\t// If the selector is sufficiently simple, try using a \"get*By*\" DOM method\n\t\t\t\t\t// (excepting DocumentFragment context, where the methods don't exist)\n\t\t\t\t\tif (nodeType !== 11 && (match = rquickExpr.exec(selector))) {\n\n\t\t\t\t\t\t// ID selector\n\t\t\t\t\t\tif ((m = match[1])) {\n\n\t\t\t\t\t\t\t// Document context\n\t\t\t\t\t\t\tif (nodeType === 9) {\n\t\t\t\t\t\t\t\tif ((elem = context.getElementById(m))) {\n\n\t\t\t\t\t\t\t\t\t// Support: IE 9 only\n\t\t\t\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\t\t\t\tif (elem.id === m) {\n\t\t\t\t\t\t\t\t\t\tpush.call(results, elem);\n\t\t\t\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t// Element context\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t// Support: IE 9 only\n\t\t\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\t\t\tif (newContext && (elem = newContext.getElementById(m)) &&\n\t\t\t\t\t\t\t\t\tfind.contains(context, elem) &&\n\t\t\t\t\t\t\t\t\telem.id === m) {\n\n\t\t\t\t\t\t\t\t\tpush.call(results, elem);\n\t\t\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Type selector\n\t\t\t\t\t\t} else if (match[2]) {\n\t\t\t\t\t\t\tpush.apply(results, context.getElementsByTagName(selector));\n\t\t\t\t\t\t\treturn results;\n\n\t\t\t\t\t\t\t// Class selector\n\t\t\t\t\t\t} else if ((m = match[3]) && context.getElementsByClassName) {\n\t\t\t\t\t\t\tpush.apply(results, context.getElementsByClassName(m));\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Take advantage of querySelectorAll\n\t\t\t\t\tif (!nonnativeSelectorCache[selector + \" \"] &&\n\t\t\t\t\t\t(!rbuggyQSA || !rbuggyQSA.test(selector))) {\n\n\t\t\t\t\t\tnewSelector = selector;\n\t\t\t\t\t\tnewContext = context;\n\n\t\t\t\t\t\t// qSA considers elements outside a scoping root when evaluating child or\n\t\t\t\t\t\t// descendant combinators, which is not what we want.\n\t\t\t\t\t\t// In such cases, we work around the behavior by prefixing every selector in the\n\t\t\t\t\t\t// list with an ID selector referencing the scope context.\n\t\t\t\t\t\t// The technique has to be used as well when a leading combinator is used\n\t\t\t\t\t\t// as such selectors are not recognized by querySelectorAll.\n\t\t\t\t\t\t// Thanks to Andrew Dupont for this technique.\n\t\t\t\t\t\tif (nodeType === 1 &&\n\t\t\t\t\t\t\t(rdescend.test(selector) || rleadingCombinator.test(selector))) {\n\n\t\t\t\t\t\t\t// Expand context for sibling selectors\n\t\t\t\t\t\t\tnewContext = rsibling.test(selector) && testContext(context.parentNode) ||\n\t\t\t\t\t\t\t\tcontext;\n\n\t\t\t\t\t\t\t// We can use :scope instead of the ID hack if the browser\n\t\t\t\t\t\t\t// supports it & if we're not changing the context.\n\t\t\t\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when\n\t\t\t\t\t\t\t// strict-comparing two documents; shallow comparisons work.\n\t\t\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\t\t\tif (newContext != context || !support.scope) {\n\n\t\t\t\t\t\t\t\t// Capture the context ID, setting it first if necessary\n\t\t\t\t\t\t\t\tif ((nid = context.getAttribute(\"id\"))) {\n\t\t\t\t\t\t\t\t\tnid = jQuery.escapeSelector(nid);\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tcontext.setAttribute(\"id\", (nid = expando));\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Prefix every selector in the list\n\t\t\t\t\t\t\tgroups = tokenize(selector);\n\t\t\t\t\t\t\ti = groups.length;\n\t\t\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\t\t\tgroups[i] = (nid ? \"#\" + nid : \":scope\") + \" \" +\n\t\t\t\t\t\t\t\t\ttoSelector(groups[i]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tnewSelector = groups.join(\",\");\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tpush.apply(results,\n\t\t\t\t\t\t\t\tnewContext.querySelectorAll(newSelector)\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t} catch (qsaError) {\n\t\t\t\t\t\t\tnonnativeSelectorCache(selector, true);\n\t\t\t\t\t\t} finally {\n\t\t\t\t\t\t\tif (nid === expando) {\n\t\t\t\t\t\t\t\tcontext.removeAttribute(\"id\");\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// All others\n\t\t\treturn select(selector.replace(rtrimCSS, \"$1\"), context, results, seed);\n\t\t}\n\n\t\t/**\n\t\t * Create key-value caches of limited size\n\t\t * @returns {function(string, object)} Returns the Object data after storing it on itself with\n\t\t *\tproperty name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)\n\t\t *\tdeleting the oldest entry\n\t\t */\n\t\tfunction createCache() {\n\t\t\tvar keys = [];\n\n\t\t\tfunction cache(key, value) {\n\n\t\t\t\t// Use (key + \" \") to avoid collision with native prototype properties\n\t\t\t\t// (see https://github.com/jquery/sizzle/issues/157)\n\t\t\t\tif (keys.push(key + \" \") > Expr.cacheLength) {\n\n\t\t\t\t\t// Only keep the most recent entries\n\t\t\t\t\tdelete cache[keys.shift()];\n\t\t\t\t}\n\t\t\t\treturn (cache[key + \" \"] = value);\n\t\t\t}\n\t\t\treturn cache;\n\t\t}\n\n\t\t/**\n\t\t * Mark a function for special use by jQuery selector module\n\t\t * @param {Function} fn The function to mark\n\t\t */\n\t\tfunction markFunction(fn) {\n\t\t\tfn[expando] = true;\n\t\t\treturn fn;\n\t\t}\n\n\t\t/**\n\t\t * Support testing using an element\n\t\t * @param {Function} fn Passed the created element and returns a boolean result\n\t\t */\n\t\tfunction assert(fn) {\n\t\t\tvar el = document.createElement(\"fieldset\");\n\n\t\t\ttry {\n\t\t\t\treturn !!fn(el);\n\t\t\t} catch (e) {\n\t\t\t\treturn false;\n\t\t\t} finally {\n\n\t\t\t\t// Remove from its parent by default\n\t\t\t\tif (el.parentNode) {\n\t\t\t\t\tel.parentNode.removeChild(el);\n\t\t\t\t}\n\n\t\t\t\t// release memory in IE\n\t\t\t\tel = null;\n\t\t\t}\n\t\t}\n\n\t\t/**\n\t\t * Returns a function to use in pseudos for input types\n\t\t * @param {String} type\n\t\t */\n\t\tfunction createInputPseudo(type) {\n\t\t\treturn function (elem) {\n\t\t\t\treturn nodeName(elem, \"input\") && elem.type === type;\n\t\t\t};\n\t\t}\n\n\t\t/**\n\t\t * Returns a function to use in pseudos for buttons\n\t\t * @param {String} type\n\t\t */\n\t\tfunction createButtonPseudo(type) {\n\t\t\treturn function (elem) {\n\t\t\t\treturn (nodeName(elem, \"input\") || nodeName(elem, \"button\")) &&\n\t\t\t\t\telem.type === type;\n\t\t\t};\n\t\t}\n\n\t\t/**\n\t\t * Returns a function to use in pseudos for :enabled/:disabled\n\t\t * @param {Boolean} disabled true for :disabled; false for :enabled\n\t\t */\n\t\tfunction createDisabledPseudo(disabled) {\n\n\t\t\t// Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable\n\t\t\treturn function (elem) {\n\n\t\t\t\t// Only certain elements can match :enabled or :disabled\n\t\t\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled\n\t\t\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled\n\t\t\t\tif (\"form\" in elem) {\n\n\t\t\t\t\t// Check for inherited disabledness on relevant non-disabled elements:\n\t\t\t\t\t// * listed form-associated elements in a disabled fieldset\n\t\t\t\t\t//   https://html.spec.whatwg.org/multipage/forms.html#category-listed\n\t\t\t\t\t//   https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled\n\t\t\t\t\t// * option elements in a disabled optgroup\n\t\t\t\t\t//   https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled\n\t\t\t\t\t// All such elements have a \"form\" property.\n\t\t\t\t\tif (elem.parentNode && elem.disabled === false) {\n\n\t\t\t\t\t\t// Option elements defer to a parent optgroup if present\n\t\t\t\t\t\tif (\"label\" in elem) {\n\t\t\t\t\t\t\tif (\"label\" in elem.parentNode) {\n\t\t\t\t\t\t\t\treturn elem.parentNode.disabled === disabled;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\treturn elem.disabled === disabled;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Support: IE 6 - 11+\n\t\t\t\t\t\t// Use the isDisabled shortcut property to check for disabled fieldset ancestors\n\t\t\t\t\t\treturn elem.isDisabled === disabled ||\n\n\t\t\t\t\t\t\t// Where there is no isDisabled, check manually\n\t\t\t\t\t\t\telem.isDisabled !== !disabled &&\n\t\t\t\t\t\t\tinDisabledFieldset(elem) === disabled;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn elem.disabled === disabled;\n\n\t\t\t\t\t// Try to winnow out elements that can't be disabled before trusting the disabled property.\n\t\t\t\t\t// Some victims get caught in our net (label, legend, menu, track), but it shouldn't\n\t\t\t\t\t// even exist on them, let alone have a boolean value.\n\t\t\t\t} else if (\"label\" in elem) {\n\t\t\t\t\treturn elem.disabled === disabled;\n\t\t\t\t}\n\n\t\t\t\t// Remaining elements are neither :enabled nor :disabled\n\t\t\t\treturn false;\n\t\t\t};\n\t\t}\n\n\t\t/**\n\t\t * Returns a function to use in pseudos for positionals\n\t\t * @param {Function} fn\n\t\t */\n\t\tfunction createPositionalPseudo(fn) {\n\t\t\treturn markFunction(function (argument) {\n\t\t\t\targument = +argument;\n\t\t\t\treturn markFunction(function (seed, matches) {\n\t\t\t\t\tvar j,\n\t\t\t\t\t\tmatchIndexes = fn([], seed.length, argument),\n\t\t\t\t\t\ti = matchIndexes.length;\n\n\t\t\t\t\t// Match elements found at the specified indexes\n\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\tif (seed[(j = matchIndexes[i])]) {\n\t\t\t\t\t\t\tseed[j] = !(matches[j] = seed[j]);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\n\t\t/**\n\t\t * Checks a node for validity as a jQuery selector context\n\t\t * @param {Element|Object=} context\n\t\t * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value\n\t\t */\n\t\tfunction testContext(context) {\n\t\t\treturn context && typeof context.getElementsByTagName !== \"undefined\" && context;\n\t\t}\n\n\t\t/**\n\t\t * Sets document-related variables once based on the current document\n\t\t * @param {Element|Object} [node] An element or document object to use to set the document\n\t\t * @returns {Object} Returns the current document\n\t\t */\n\t\tfunction setDocument(node) {\n\t\t\tvar subWindow,\n\t\t\t\tdoc = node ? node.ownerDocument || node : preferredDoc;\n\n\t\t\t// Return early if doc is invalid or already selected\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tif (doc == document || doc.nodeType !== 9 || !doc.documentElement) {\n\t\t\t\treturn document;\n\t\t\t}\n\n\t\t\t// Update global variables\n\t\t\tdocument = doc;\n\t\t\tdocumentElement = document.documentElement;\n\t\t\tdocumentIsHTML = !jQuery.isXMLDoc(document);\n\n\t\t\t// Support: iOS 7 only, IE 9 - 11+\n\t\t\t// Older browsers didn't support unprefixed `matches`.\n\t\t\tmatches = documentElement.matches ||\n\t\t\t\tdocumentElement.webkitMatchesSelector ||\n\t\t\t\tdocumentElement.msMatchesSelector;\n\n\t\t\t// Support: IE 9 - 11+, Edge 12 - 18+\n\t\t\t// Accessing iframe documents after unload throws \"permission denied\" errors (see trac-13936)\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tif (preferredDoc != document &&\n\t\t\t\t(subWindow = document.defaultView) && subWindow.top !== subWindow) {\n\n\t\t\t\t// Support: IE 9 - 11+, Edge 12 - 18+\n\t\t\t\tsubWindow.addEventListener(\"unload\", unloadHandler);\n\t\t\t}\n\n\t\t\t// Support: IE <10\n\t\t\t// Check if getElementById returns elements by name\n\t\t\t// The broken getElementById methods don't pick up programmatically-set names,\n\t\t\t// so use a roundabout getElementsByName test\n\t\t\tsupport.getById = assert(function (el) {\n\t\t\t\tdocumentElement.appendChild(el).id = jQuery.expando;\n\t\t\t\treturn !document.getElementsByName ||\n\t\t\t\t\t!document.getElementsByName(jQuery.expando).length;\n\t\t\t});\n\n\t\t\t// Support: IE 9 only\n\t\t\t// Check to see if it's possible to do matchesSelector\n\t\t\t// on a disconnected node.\n\t\t\tsupport.disconnectedMatch = assert(function (el) {\n\t\t\t\treturn matches.call(el, \"*\");\n\t\t\t});\n\n\t\t\t// Support: IE 9 - 11+, Edge 12 - 18+\n\t\t\t// IE/Edge don't support the :scope pseudo-class.\n\t\t\tsupport.scope = assert(function () {\n\t\t\t\treturn document.querySelectorAll(\":scope\");\n\t\t\t});\n\n\t\t\t// Support: Chrome 105 - 111 only, Safari 15.4 - 16.3 only\n\t\t\t// Make sure the `:has()` argument is parsed unforgivingly.\n\t\t\t// We include `*` in the test to detect buggy implementations that are\n\t\t\t// _selectively_ forgiving (specifically when the list includes at least\n\t\t\t// one valid selector).\n\t\t\t// Note that we treat complete lack of support for `:has()` as if it were\n\t\t\t// spec-compliant support, which is fine because use of `:has()` in such\n\t\t\t// environments will fail in the qSA path and fall back to jQuery traversal\n\t\t\t// anyway.\n\t\t\tsupport.cssHas = assert(function () {\n\t\t\t\ttry {\n\t\t\t\t\tdocument.querySelector(\":has(*,:jqfake)\");\n\t\t\t\t\treturn false;\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t// ID filter and find\n\t\t\tif (support.getById) {\n\t\t\t\tExpr.filter.ID = function (id) {\n\t\t\t\t\tvar attrId = id.replace(runescape, funescape);\n\t\t\t\t\treturn function (elem) {\n\t\t\t\t\t\treturn elem.getAttribute(\"id\") === attrId;\n\t\t\t\t\t};\n\t\t\t\t};\n\t\t\t\tExpr.find.ID = function (id, context) {\n\t\t\t\t\tif (typeof context.getElementById !== \"undefined\" && documentIsHTML) {\n\t\t\t\t\t\tvar elem = context.getElementById(id);\n\t\t\t\t\t\treturn elem ? [elem] : [];\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t} else {\n\t\t\t\tExpr.filter.ID = function (id) {\n\t\t\t\t\tvar attrId = id.replace(runescape, funescape);\n\t\t\t\t\treturn function (elem) {\n\t\t\t\t\t\tvar node = typeof elem.getAttributeNode !== \"undefined\" &&\n\t\t\t\t\t\t\telem.getAttributeNode(\"id\");\n\t\t\t\t\t\treturn node && node.value === attrId;\n\t\t\t\t\t};\n\t\t\t\t};\n\n\t\t\t\t// Support: IE 6 - 7 only\n\t\t\t\t// getElementById is not reliable as a find shortcut\n\t\t\t\tExpr.find.ID = function (id, context) {\n\t\t\t\t\tif (typeof context.getElementById !== \"undefined\" && documentIsHTML) {\n\t\t\t\t\t\tvar node, i, elems,\n\t\t\t\t\t\t\telem = context.getElementById(id);\n\n\t\t\t\t\t\tif (elem) {\n\n\t\t\t\t\t\t\t// Verify the id attribute\n\t\t\t\t\t\t\tnode = elem.getAttributeNode(\"id\");\n\t\t\t\t\t\t\tif (node && node.value === id) {\n\t\t\t\t\t\t\t\treturn [elem];\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Fall back on getElementsByName\n\t\t\t\t\t\t\telems = context.getElementsByName(id);\n\t\t\t\t\t\t\ti = 0;\n\t\t\t\t\t\t\twhile ((elem = elems[i++])) {\n\t\t\t\t\t\t\t\tnode = elem.getAttributeNode(\"id\");\n\t\t\t\t\t\t\t\tif (node && node.value === id) {\n\t\t\t\t\t\t\t\t\treturn [elem];\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn [];\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\n\t\t\t// Tag\n\t\t\tExpr.find.TAG = function (tag, context) {\n\t\t\t\tif (typeof context.getElementsByTagName !== \"undefined\") {\n\t\t\t\t\treturn context.getElementsByTagName(tag);\n\n\t\t\t\t\t// DocumentFragment nodes don't have gEBTN\n\t\t\t\t} else {\n\t\t\t\t\treturn context.querySelectorAll(tag);\n\t\t\t\t}\n\t\t\t};\n\n\t\t\t// Class\n\t\t\tExpr.find.CLASS = function (className, context) {\n\t\t\t\tif (typeof context.getElementsByClassName !== \"undefined\" && documentIsHTML) {\n\t\t\t\t\treturn context.getElementsByClassName(className);\n\t\t\t\t}\n\t\t\t};\n\n\t\t\t/* QSA/matchesSelector\n\t\t\t---------------------------------------------------------------------- */\n\n\t\t\t// QSA and matchesSelector support\n\n\t\t\trbuggyQSA = [];\n\n\t\t\t// Build QSA regex\n\t\t\t// Regex strategy adopted from Diego Perini\n\t\t\tassert(function (el) {\n\n\t\t\t\tvar input;\n\n\t\t\t\tdocumentElement.appendChild(el).innerHTML =\n\t\t\t\t\t\"<a id='\" + expando + \"' href='' disabled='disabled'></a>\" +\n\t\t\t\t\t\"<select id='\" + expando + \"-\\r\\\\' disabled='disabled'>\" +\n\t\t\t\t\t\"<option selected=''></option></select>\";\n\n\t\t\t\t// Support: iOS <=7 - 8 only\n\t\t\t\t// Boolean attributes and \"value\" are not treated correctly in some XML documents\n\t\t\t\tif (!el.querySelectorAll(\"[selected]\").length) {\n\t\t\t\t\trbuggyQSA.push(\"\\\\[\" + whitespace + \"*(?:value|\" + booleans + \")\");\n\t\t\t\t}\n\n\t\t\t\t// Support: iOS <=7 - 8 only\n\t\t\t\tif (!el.querySelectorAll(\"[id~=\" + expando + \"-]\").length) {\n\t\t\t\t\trbuggyQSA.push(\"~=\");\n\t\t\t\t}\n\n\t\t\t\t// Support: iOS 8 only\n\t\t\t\t// https://bugs.webkit.org/show_bug.cgi?id=136851\n\t\t\t\t// In-page `selector#id sibling-combinator selector` fails\n\t\t\t\tif (!el.querySelectorAll(\"a#\" + expando + \"+*\").length) {\n\t\t\t\t\trbuggyQSA.push(\".#.+[+~]\");\n\t\t\t\t}\n\n\t\t\t\t// Support: Chrome <=105+, Firefox <=104+, Safari <=15.4+\n\t\t\t\t// In some of the document kinds, these selectors wouldn't work natively.\n\t\t\t\t// This is probably OK but for backwards compatibility we want to maintain\n\t\t\t\t// handling them through jQuery traversal in jQuery 3.x.\n\t\t\t\tif (!el.querySelectorAll(\":checked\").length) {\n\t\t\t\t\trbuggyQSA.push(\":checked\");\n\t\t\t\t}\n\n\t\t\t\t// Support: Windows 8 Native Apps\n\t\t\t\t// The type and name attributes are restricted during .innerHTML assignment\n\t\t\t\tinput = document.createElement(\"input\");\n\t\t\t\tinput.setAttribute(\"type\", \"hidden\");\n\t\t\t\tel.appendChild(input).setAttribute(\"name\", \"D\");\n\n\t\t\t\t// Support: IE 9 - 11+\n\t\t\t\t// IE's :disabled selector does not pick up the children of disabled fieldsets\n\t\t\t\t// Support: Chrome <=105+, Firefox <=104+, Safari <=15.4+\n\t\t\t\t// In some of the document kinds, these selectors wouldn't work natively.\n\t\t\t\t// This is probably OK but for backwards compatibility we want to maintain\n\t\t\t\t// handling them through jQuery traversal in jQuery 3.x.\n\t\t\t\tdocumentElement.appendChild(el).disabled = true;\n\t\t\t\tif (el.querySelectorAll(\":disabled\").length !== 2) {\n\t\t\t\t\trbuggyQSA.push(\":enabled\", \":disabled\");\n\t\t\t\t}\n\n\t\t\t\t// Support: IE 11+, Edge 15 - 18+\n\t\t\t\t// IE 11/Edge don't find elements on a `[name='']` query in some cases.\n\t\t\t\t// Adding a temporary attribute to the document before the selection works\n\t\t\t\t// around the issue.\n\t\t\t\t// Interestingly, IE 10 & older don't seem to have the issue.\n\t\t\t\tinput = document.createElement(\"input\");\n\t\t\t\tinput.setAttribute(\"name\", \"\");\n\t\t\t\tel.appendChild(input);\n\t\t\t\tif (!el.querySelectorAll(\"[name='']\").length) {\n\t\t\t\t\trbuggyQSA.push(\"\\\\[\" + whitespace + \"*name\" + whitespace + \"*=\" +\n\t\t\t\t\t\twhitespace + \"*(?:''|\\\"\\\")\");\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tif (!support.cssHas) {\n\n\t\t\t\t// Support: Chrome 105 - 110+, Safari 15.4 - 16.3+\n\t\t\t\t// Our regular `try-catch` mechanism fails to detect natively-unsupported\n\t\t\t\t// pseudo-classes inside `:has()` (such as `:has(:contains(\"Foo\"))`)\n\t\t\t\t// in browsers that parse the `:has()` argument as a forgiving selector list.\n\t\t\t\t// https://drafts.csswg.org/selectors/#relational now requires the argument\n\t\t\t\t// to be parsed unforgivingly, but browsers have not yet fully adjusted.\n\t\t\t\trbuggyQSA.push(\":has\");\n\t\t\t}\n\n\t\t\trbuggyQSA = rbuggyQSA.length && new RegExp(rbuggyQSA.join(\"|\"));\n\n\t\t\t/* Sorting\n\t\t\t---------------------------------------------------------------------- */\n\n\t\t\t// Document order sorting\n\t\t\tsortOrder = function (a, b) {\n\n\t\t\t\t// Flag for duplicate removal\n\t\t\t\tif (a === b) {\n\t\t\t\t\thasDuplicate = true;\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\n\t\t\t\t// Sort on method existence if only one input has compareDocumentPosition\n\t\t\t\tvar compare = !a.compareDocumentPosition - !b.compareDocumentPosition;\n\t\t\t\tif (compare) {\n\t\t\t\t\treturn compare;\n\t\t\t\t}\n\n\t\t\t\t// Calculate position if both inputs belong to the same document\n\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\tcompare = (a.ownerDocument || a) == (b.ownerDocument || b) ?\n\t\t\t\t\ta.compareDocumentPosition(b) :\n\n\t\t\t\t\t// Otherwise we know they are disconnected\n\t\t\t\t\t1;\n\n\t\t\t\t// Disconnected nodes\n\t\t\t\tif (compare & 1 ||\n\t\t\t\t\t(!support.sortDetached && b.compareDocumentPosition(a) === compare)) {\n\n\t\t\t\t\t// Choose the first element that is related to our preferred document\n\t\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\tif (a === document || a.ownerDocument == preferredDoc &&\n\t\t\t\t\t\tfind.contains(preferredDoc, a)) {\n\t\t\t\t\t\treturn -1;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\tif (b === document || b.ownerDocument == preferredDoc &&\n\t\t\t\t\t\tfind.contains(preferredDoc, b)) {\n\t\t\t\t\t\treturn 1;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Maintain original order\n\t\t\t\t\treturn sortInput ?\n\t\t\t\t\t\t(indexOf.call(sortInput, a) - indexOf.call(sortInput, b)) :\n\t\t\t\t\t\t0;\n\t\t\t\t}\n\n\t\t\t\treturn compare & 4 ? -1 : 1;\n\t\t\t};\n\n\t\t\treturn document;\n\t\t}\n\n\t\tfind.matches = function (expr, elements) {\n\t\t\treturn find(expr, null, null, elements);\n\t\t};\n\n\t\tfind.matchesSelector = function (elem, expr) {\n\t\t\tsetDocument(elem);\n\n\t\t\tif (documentIsHTML &&\n\t\t\t\t!nonnativeSelectorCache[expr + \" \"] &&\n\t\t\t\t(!rbuggyQSA || !rbuggyQSA.test(expr))) {\n\n\t\t\t\ttry {\n\t\t\t\t\tvar ret = matches.call(elem, expr);\n\n\t\t\t\t\t// IE 9's matchesSelector returns false on disconnected nodes\n\t\t\t\t\tif (ret || support.disconnectedMatch ||\n\n\t\t\t\t\t\t// As well, disconnected nodes are said to be in a document\n\t\t\t\t\t\t// fragment in IE 9\n\t\t\t\t\t\telem.document && elem.document.nodeType !== 11) {\n\t\t\t\t\t\treturn ret;\n\t\t\t\t\t}\n\t\t\t\t} catch (e) {\n\t\t\t\t\tnonnativeSelectorCache(expr, true);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn find(expr, document, null, [elem]).length > 0;\n\t\t};\n\n\t\tfind.contains = function (context, elem) {\n\n\t\t\t// Set document vars if needed\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tif ((context.ownerDocument || context) != document) {\n\t\t\t\tsetDocument(context);\n\t\t\t}\n\t\t\treturn jQuery.contains(context, elem);\n\t\t};\n\n\n\t\tfind.attr = function (elem, name) {\n\n\t\t\t// Set document vars if needed\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tif ((elem.ownerDocument || elem) != document) {\n\t\t\t\tsetDocument(elem);\n\t\t\t}\n\n\t\t\tvar fn = Expr.attrHandle[name.toLowerCase()],\n\n\t\t\t\t// Don't get fooled by Object.prototype properties (see trac-13807)\n\t\t\t\tval = fn && hasOwn.call(Expr.attrHandle, name.toLowerCase()) ?\n\t\t\t\t\tfn(elem, name, !documentIsHTML) :\n\t\t\t\t\tundefined;\n\n\t\t\tif (val !== undefined) {\n\t\t\t\treturn val;\n\t\t\t}\n\n\t\t\treturn elem.getAttribute(name);\n\t\t};\n\n\t\tfind.error = function (msg) {\n\t\t\tthrow new Error(\"Syntax error, unrecognized expression: \" + msg);\n\t\t};\n\n\t\t/**\n\t\t * Document sorting and removing duplicates\n\t\t * @param {ArrayLike} results\n\t\t */\n\t\tjQuery.uniqueSort = function (results) {\n\t\t\tvar elem,\n\t\t\t\tduplicates = [],\n\t\t\t\tj = 0,\n\t\t\t\ti = 0;\n\n\t\t\t// Unless we *know* we can detect duplicates, assume their presence\n\t\t\t//\n\t\t\t// Support: Android <=4.0+\n\t\t\t// Testing for detecting duplicates is unpredictable so instead assume we can't\n\t\t\t// depend on duplicate detection in all browsers without a stable sort.\n\t\t\thasDuplicate = !support.sortStable;\n\t\t\tsortInput = !support.sortStable && slice.call(results, 0);\n\t\t\tsort.call(results, sortOrder);\n\n\t\t\tif (hasDuplicate) {\n\t\t\t\twhile ((elem = results[i++])) {\n\t\t\t\t\tif (elem === results[i]) {\n\t\t\t\t\t\tj = duplicates.push(i);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\twhile (j--) {\n\t\t\t\t\tsplice.call(results, duplicates[j], 1);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Clear input after sorting to release objects\n\t\t\t// See https://github.com/jquery/sizzle/pull/225\n\t\t\tsortInput = null;\n\n\t\t\treturn results;\n\t\t};\n\n\t\tjQuery.fn.uniqueSort = function () {\n\t\t\treturn this.pushStack(jQuery.uniqueSort(slice.apply(this)));\n\t\t};\n\n\t\tExpr = jQuery.expr = {\n\n\t\t\t// Can be adjusted by the user\n\t\t\tcacheLength: 50,\n\n\t\t\tcreatePseudo: markFunction,\n\n\t\t\tmatch: matchExpr,\n\n\t\t\tattrHandle: {},\n\n\t\t\tfind: {},\n\n\t\t\trelative: {\n\t\t\t\t\">\": { dir: \"parentNode\", first: true },\n\t\t\t\t\" \": { dir: \"parentNode\" },\n\t\t\t\t\"+\": { dir: \"previousSibling\", first: true },\n\t\t\t\t\"~\": { dir: \"previousSibling\" }\n\t\t\t},\n\n\t\t\tpreFilter: {\n\t\t\t\tATTR: function (match) {\n\t\t\t\t\tmatch[1] = match[1].replace(runescape, funescape);\n\n\t\t\t\t\t// Move the given value to match[3] whether quoted or unquoted\n\t\t\t\t\tmatch[3] = (match[3] || match[4] || match[5] || \"\")\n\t\t\t\t\t\t.replace(runescape, funescape);\n\n\t\t\t\t\tif (match[2] === \"~=\") {\n\t\t\t\t\t\tmatch[3] = \" \" + match[3] + \" \";\n\t\t\t\t\t}\n\n\t\t\t\t\treturn match.slice(0, 4);\n\t\t\t\t},\n\n\t\t\t\tCHILD: function (match) {\n\n\t\t\t\t\t/* matches from matchExpr[\"CHILD\"]\n\t\t\t\t\t\t1 type (only|nth|...)\n\t\t\t\t\t\t2 what (child|of-type)\n\t\t\t\t\t\t3 argument (even|odd|\\d*|\\d*n([+-]\\d+)?|...)\n\t\t\t\t\t\t4 xn-component of xn+y argument ([+-]?\\d*n|)\n\t\t\t\t\t\t5 sign of xn-component\n\t\t\t\t\t\t6 x of xn-component\n\t\t\t\t\t\t7 sign of y-component\n\t\t\t\t\t\t8 y of y-component\n\t\t\t\t\t*/\n\t\t\t\t\tmatch[1] = match[1].toLowerCase();\n\n\t\t\t\t\tif (match[1].slice(0, 3) === \"nth\") {\n\n\t\t\t\t\t\t// nth-* requires argument\n\t\t\t\t\t\tif (!match[3]) {\n\t\t\t\t\t\t\tfind.error(match[0]);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// numeric x and y parameters for Expr.filter.CHILD\n\t\t\t\t\t\t// remember that false/true cast respectively to 0/1\n\t\t\t\t\t\tmatch[4] = +(match[4] ?\n\t\t\t\t\t\t\tmatch[5] + (match[6] || 1) :\n\t\t\t\t\t\t\t2 * (match[3] === \"even\" || match[3] === \"odd\")\n\t\t\t\t\t\t);\n\t\t\t\t\t\tmatch[5] = +((match[7] + match[8]) || match[3] === \"odd\");\n\n\t\t\t\t\t\t// other types prohibit arguments\n\t\t\t\t\t} else if (match[3]) {\n\t\t\t\t\t\tfind.error(match[0]);\n\t\t\t\t\t}\n\n\t\t\t\t\treturn match;\n\t\t\t\t},\n\n\t\t\t\tPSEUDO: function (match) {\n\t\t\t\t\tvar excess,\n\t\t\t\t\t\tunquoted = !match[6] && match[2];\n\n\t\t\t\t\tif (matchExpr.CHILD.test(match[0])) {\n\t\t\t\t\t\treturn null;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Accept quoted arguments as-is\n\t\t\t\t\tif (match[3]) {\n\t\t\t\t\t\tmatch[2] = match[4] || match[5] || \"\";\n\n\t\t\t\t\t\t// Strip excess characters from unquoted arguments\n\t\t\t\t\t} else if (unquoted && rpseudo.test(unquoted) &&\n\n\t\t\t\t\t\t// Get excess from tokenize (recursively)\n\t\t\t\t\t\t(excess = tokenize(unquoted, true)) &&\n\n\t\t\t\t\t\t// advance to the next closing parenthesis\n\t\t\t\t\t\t(excess = unquoted.indexOf(\")\", unquoted.length - excess) - unquoted.length)) {\n\n\t\t\t\t\t\t// excess is a negative index\n\t\t\t\t\t\tmatch[0] = match[0].slice(0, excess);\n\t\t\t\t\t\tmatch[2] = unquoted.slice(0, excess);\n\t\t\t\t\t}\n\n\t\t\t\t\t// Return only captures needed by the pseudo filter method (type and argument)\n\t\t\t\t\treturn match.slice(0, 3);\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tfilter: {\n\n\t\t\t\tTAG: function (nodeNameSelector) {\n\t\t\t\t\tvar expectedNodeName = nodeNameSelector.replace(runescape, funescape).toLowerCase();\n\t\t\t\t\treturn nodeNameSelector === \"*\" ?\n\t\t\t\t\t\tfunction () {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t} :\n\t\t\t\t\t\tfunction (elem) {\n\t\t\t\t\t\t\treturn nodeName(elem, expectedNodeName);\n\t\t\t\t\t\t};\n\t\t\t\t},\n\n\t\t\t\tCLASS: function (className) {\n\t\t\t\t\tvar pattern = classCache[className + \" \"];\n\n\t\t\t\t\treturn pattern ||\n\t\t\t\t\t\t(pattern = new RegExp(\"(^|\" + whitespace + \")\" + className +\n\t\t\t\t\t\t\t\"(\" + whitespace + \"|$)\")) &&\n\t\t\t\t\t\tclassCache(className, function (elem) {\n\t\t\t\t\t\t\treturn pattern.test(\n\t\t\t\t\t\t\t\ttypeof elem.className === \"string\" && elem.className ||\n\t\t\t\t\t\t\t\ttypeof elem.getAttribute !== \"undefined\" &&\n\t\t\t\t\t\t\t\telem.getAttribute(\"class\") ||\n\t\t\t\t\t\t\t\t\"\"\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t});\n\t\t\t\t},\n\n\t\t\t\tATTR: function (name, operator, check) {\n\t\t\t\t\treturn function (elem) {\n\t\t\t\t\t\tvar result = find.attr(elem, name);\n\n\t\t\t\t\t\tif (result == null) {\n\t\t\t\t\t\t\treturn operator === \"!=\";\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!operator) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tresult += \"\";\n\n\t\t\t\t\t\tif (operator === \"=\") {\n\t\t\t\t\t\t\treturn result === check;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (operator === \"!=\") {\n\t\t\t\t\t\t\treturn result !== check;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (operator === \"^=\") {\n\t\t\t\t\t\t\treturn check && result.indexOf(check) === 0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (operator === \"*=\") {\n\t\t\t\t\t\t\treturn check && result.indexOf(check) > -1;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (operator === \"$=\") {\n\t\t\t\t\t\t\treturn check && result.slice(-check.length) === check;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (operator === \"~=\") {\n\t\t\t\t\t\t\treturn (\" \" + result.replace(rwhitespace, \" \") + \" \")\n\t\t\t\t\t\t\t\t.indexOf(check) > -1;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (operator === \"|=\") {\n\t\t\t\t\t\t\treturn result === check || result.slice(0, check.length + 1) === check + \"-\";\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t};\n\t\t\t\t},\n\n\t\t\t\tCHILD: function (type, what, _argument, first, last) {\n\t\t\t\t\tvar simple = type.slice(0, 3) !== \"nth\",\n\t\t\t\t\t\tforward = type.slice(-4) !== \"last\",\n\t\t\t\t\t\tofType = what === \"of-type\";\n\n\t\t\t\t\treturn first === 1 && last === 0 ?\n\n\t\t\t\t\t\t// Shortcut for :nth-*(n)\n\t\t\t\t\t\tfunction (elem) {\n\t\t\t\t\t\t\treturn !!elem.parentNode;\n\t\t\t\t\t\t} :\n\n\t\t\t\t\t\tfunction (elem, _context, xml) {\n\t\t\t\t\t\t\tvar cache, outerCache, node, nodeIndex, start,\n\t\t\t\t\t\t\t\tdir = simple !== forward ? \"nextSibling\" : \"previousSibling\",\n\t\t\t\t\t\t\t\tparent = elem.parentNode,\n\t\t\t\t\t\t\t\tname = ofType && elem.nodeName.toLowerCase(),\n\t\t\t\t\t\t\t\tuseCache = !xml && !ofType,\n\t\t\t\t\t\t\t\tdiff = false;\n\n\t\t\t\t\t\t\tif (parent) {\n\n\t\t\t\t\t\t\t\t// :(first|last|only)-(child|of-type)\n\t\t\t\t\t\t\t\tif (simple) {\n\t\t\t\t\t\t\t\t\twhile (dir) {\n\t\t\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\t\t\twhile ((node = node[dir])) {\n\t\t\t\t\t\t\t\t\t\t\tif (ofType ?\n\t\t\t\t\t\t\t\t\t\t\t\tnodeName(node, name) :\n\t\t\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1) {\n\n\t\t\t\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t// Reverse direction for :only-* (if we haven't yet done so)\n\t\t\t\t\t\t\t\t\t\tstart = dir = type === \"only\" && !start && \"nextSibling\";\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tstart = [forward ? parent.firstChild : parent.lastChild];\n\n\t\t\t\t\t\t\t\t// non-xml :nth-child(...) stores cache data on `parent`\n\t\t\t\t\t\t\t\tif (forward && useCache) {\n\n\t\t\t\t\t\t\t\t\t// Seek `elem` from a previously-cached index\n\t\t\t\t\t\t\t\t\touterCache = parent[expando] || (parent[expando] = {});\n\t\t\t\t\t\t\t\t\tcache = outerCache[type] || [];\n\t\t\t\t\t\t\t\t\tnodeIndex = cache[0] === dirruns && cache[1];\n\t\t\t\t\t\t\t\t\tdiff = nodeIndex && cache[2];\n\t\t\t\t\t\t\t\t\tnode = nodeIndex && parent.childNodes[nodeIndex];\n\n\t\t\t\t\t\t\t\t\twhile ((node = ++nodeIndex && node && node[dir] ||\n\n\t\t\t\t\t\t\t\t\t\t// Fallback to seeking `elem` from the start\n\t\t\t\t\t\t\t\t\t\t(diff = nodeIndex = 0) || start.pop())) {\n\n\t\t\t\t\t\t\t\t\t\t// When found, cache indexes on `parent` and break\n\t\t\t\t\t\t\t\t\t\tif (node.nodeType === 1 && ++diff && node === elem) {\n\t\t\t\t\t\t\t\t\t\t\touterCache[type] = [dirruns, nodeIndex, diff];\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t// Use previously-cached element index if available\n\t\t\t\t\t\t\t\t\tif (useCache) {\n\t\t\t\t\t\t\t\t\t\touterCache = elem[expando] || (elem[expando] = {});\n\t\t\t\t\t\t\t\t\t\tcache = outerCache[type] || [];\n\t\t\t\t\t\t\t\t\t\tnodeIndex = cache[0] === dirruns && cache[1];\n\t\t\t\t\t\t\t\t\t\tdiff = nodeIndex;\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// xml :nth-child(...)\n\t\t\t\t\t\t\t\t\t// or :nth-last-child(...) or :nth(-last)?-of-type(...)\n\t\t\t\t\t\t\t\t\tif (diff === false) {\n\n\t\t\t\t\t\t\t\t\t\t// Use the same loop as above to seek `elem` from the start\n\t\t\t\t\t\t\t\t\t\twhile ((node = ++nodeIndex && node && node[dir] ||\n\t\t\t\t\t\t\t\t\t\t\t(diff = nodeIndex = 0) || start.pop())) {\n\n\t\t\t\t\t\t\t\t\t\t\tif ((ofType ?\n\t\t\t\t\t\t\t\t\t\t\t\tnodeName(node, name) :\n\t\t\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1) &&\n\t\t\t\t\t\t\t\t\t\t\t\t++diff) {\n\n\t\t\t\t\t\t\t\t\t\t\t\t// Cache the index of each encountered element\n\t\t\t\t\t\t\t\t\t\t\t\tif (useCache) {\n\t\t\t\t\t\t\t\t\t\t\t\t\touterCache = node[expando] ||\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t(node[expando] = {});\n\t\t\t\t\t\t\t\t\t\t\t\t\touterCache[type] = [dirruns, diff];\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\tif (node === elem) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t// Incorporate the offset, then check against cycle size\n\t\t\t\t\t\t\t\tdiff -= last;\n\t\t\t\t\t\t\t\treturn diff === first || (diff % first === 0 && diff / first >= 0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\t\t\t\t},\n\n\t\t\t\tPSEUDO: function (pseudo, argument) {\n\n\t\t\t\t\t// pseudo-class names are case-insensitive\n\t\t\t\t\t// https://www.w3.org/TR/selectors/#pseudo-classes\n\t\t\t\t\t// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters\n\t\t\t\t\t// Remember that setFilters inherits from pseudos\n\t\t\t\t\tvar args,\n\t\t\t\t\t\tfn = Expr.pseudos[pseudo] || Expr.setFilters[pseudo.toLowerCase()] ||\n\t\t\t\t\t\t\tfind.error(\"unsupported pseudo: \" + pseudo);\n\n\t\t\t\t\t// The user may use createPseudo to indicate that\n\t\t\t\t\t// arguments are needed to create the filter function\n\t\t\t\t\t// just as jQuery does\n\t\t\t\t\tif (fn[expando]) {\n\t\t\t\t\t\treturn fn(argument);\n\t\t\t\t\t}\n\n\t\t\t\t\t// But maintain support for old signatures\n\t\t\t\t\tif (fn.length > 1) {\n\t\t\t\t\t\targs = [pseudo, pseudo, \"\", argument];\n\t\t\t\t\t\treturn Expr.setFilters.hasOwnProperty(pseudo.toLowerCase()) ?\n\t\t\t\t\t\t\tmarkFunction(function (seed, matches) {\n\t\t\t\t\t\t\t\tvar idx,\n\t\t\t\t\t\t\t\t\tmatched = fn(seed, argument),\n\t\t\t\t\t\t\t\t\ti = matched.length;\n\t\t\t\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\t\t\t\tidx = indexOf.call(seed, matched[i]);\n\t\t\t\t\t\t\t\t\tseed[idx] = !(matches[idx] = matched[i]);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}) :\n\t\t\t\t\t\t\tfunction (elem) {\n\t\t\t\t\t\t\t\treturn fn(elem, 0, args);\n\t\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\treturn fn;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tpseudos: {\n\n\t\t\t\t// Potentially complex pseudos\n\t\t\t\tnot: markFunction(function (selector) {\n\n\t\t\t\t\t// Trim the selector passed to compile\n\t\t\t\t\t// to avoid treating leading and trailing\n\t\t\t\t\t// spaces as combinators\n\t\t\t\t\tvar input = [],\n\t\t\t\t\t\tresults = [],\n\t\t\t\t\t\tmatcher = compile(selector.replace(rtrimCSS, \"$1\"));\n\n\t\t\t\t\treturn matcher[expando] ?\n\t\t\t\t\t\tmarkFunction(function (seed, matches, _context, xml) {\n\t\t\t\t\t\t\tvar elem,\n\t\t\t\t\t\t\t\tunmatched = matcher(seed, null, xml, []),\n\t\t\t\t\t\t\t\ti = seed.length;\n\n\t\t\t\t\t\t\t// Match elements unmatched by `matcher`\n\t\t\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\t\t\tif ((elem = unmatched[i])) {\n\t\t\t\t\t\t\t\t\tseed[i] = !(matches[i] = elem);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}) :\n\t\t\t\t\t\tfunction (elem, _context, xml) {\n\t\t\t\t\t\t\tinput[0] = elem;\n\t\t\t\t\t\t\tmatcher(input, null, xml, results);\n\n\t\t\t\t\t\t\t// Don't keep the element\n\t\t\t\t\t\t\t// (see https://github.com/jquery/sizzle/issues/299)\n\t\t\t\t\t\t\tinput[0] = null;\n\t\t\t\t\t\t\treturn !results.pop();\n\t\t\t\t\t\t};\n\t\t\t\t}),\n\n\t\t\t\thas: markFunction(function (selector) {\n\t\t\t\t\treturn function (elem) {\n\t\t\t\t\t\treturn find(selector, elem).length > 0;\n\t\t\t\t\t};\n\t\t\t\t}),\n\n\t\t\t\tcontains: markFunction(function (text) {\n\t\t\t\t\ttext = text.replace(runescape, funescape);\n\t\t\t\t\treturn function (elem) {\n\t\t\t\t\t\treturn (elem.textContent || jQuery.text(elem)).indexOf(text) > -1;\n\t\t\t\t\t};\n\t\t\t\t}),\n\n\t\t\t\t// \"Whether an element is represented by a :lang() selector\n\t\t\t\t// is based solely on the element's language value\n\t\t\t\t// being equal to the identifier C,\n\t\t\t\t// or beginning with the identifier C immediately followed by \"-\".\n\t\t\t\t// The matching of C against the element's language value is performed case-insensitively.\n\t\t\t\t// The identifier C does not have to be a valid language name.\"\n\t\t\t\t// https://www.w3.org/TR/selectors/#lang-pseudo\n\t\t\t\tlang: markFunction(function (lang) {\n\n\t\t\t\t\t// lang value must be a valid identifier\n\t\t\t\t\tif (!ridentifier.test(lang || \"\")) {\n\t\t\t\t\t\tfind.error(\"unsupported lang: \" + lang);\n\t\t\t\t\t}\n\t\t\t\t\tlang = lang.replace(runescape, funescape).toLowerCase();\n\t\t\t\t\treturn function (elem) {\n\t\t\t\t\t\tvar elemLang;\n\t\t\t\t\t\tdo {\n\t\t\t\t\t\t\tif ((elemLang = documentIsHTML ?\n\t\t\t\t\t\t\t\telem.lang :\n\t\t\t\t\t\t\t\telem.getAttribute(\"xml:lang\") || elem.getAttribute(\"lang\"))) {\n\n\t\t\t\t\t\t\t\telemLang = elemLang.toLowerCase();\n\t\t\t\t\t\t\t\treturn elemLang === lang || elemLang.indexOf(lang + \"-\") === 0;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} while ((elem = elem.parentNode) && elem.nodeType === 1);\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t};\n\t\t\t\t}),\n\n\t\t\t\t// Miscellaneous\n\t\t\t\ttarget: function (elem) {\n\t\t\t\t\tvar hash = window.location && window.location.hash;\n\t\t\t\t\treturn hash && hash.slice(1) === elem.id;\n\t\t\t\t},\n\n\t\t\t\troot: function (elem) {\n\t\t\t\t\treturn elem === documentElement;\n\t\t\t\t},\n\n\t\t\t\tfocus: function (elem) {\n\t\t\t\t\treturn elem === safeActiveElement() &&\n\t\t\t\t\t\tdocument.hasFocus() &&\n\t\t\t\t\t\t!!(elem.type || elem.href || ~elem.tabIndex);\n\t\t\t\t},\n\n\t\t\t\t// Boolean properties\n\t\t\t\tenabled: createDisabledPseudo(false),\n\t\t\t\tdisabled: createDisabledPseudo(true),\n\n\t\t\t\tchecked: function (elem) {\n\n\t\t\t\t\t// In CSS3, :checked should return both checked and selected elements\n\t\t\t\t\t// https://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\t\t\treturn (nodeName(elem, \"input\") && !!elem.checked) ||\n\t\t\t\t\t\t(nodeName(elem, \"option\") && !!elem.selected);\n\t\t\t\t},\n\n\t\t\t\tselected: function (elem) {\n\n\t\t\t\t\t// Support: IE <=11+\n\t\t\t\t\t// Accessing the selectedIndex property\n\t\t\t\t\t// forces the browser to treat the default option as\n\t\t\t\t\t// selected when in an optgroup.\n\t\t\t\t\tif (elem.parentNode) {\n\t\t\t\t\t\t// eslint-disable-next-line no-unused-expressions\n\t\t\t\t\t\telem.parentNode.selectedIndex;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn elem.selected === true;\n\t\t\t\t},\n\n\t\t\t\t// Contents\n\t\t\t\tempty: function (elem) {\n\n\t\t\t\t\t// https://www.w3.org/TR/selectors/#empty-pseudo\n\t\t\t\t\t// :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),\n\t\t\t\t\t//   but not by others (comment: 8; processing instruction: 7; etc.)\n\t\t\t\t\t// nodeType < 6 works because attributes (2) do not appear as children\n\t\t\t\t\tfor (elem = elem.firstChild; elem; elem = elem.nextSibling) {\n\t\t\t\t\t\tif (elem.nodeType < 6) {\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn true;\n\t\t\t\t},\n\n\t\t\t\tparent: function (elem) {\n\t\t\t\t\treturn !Expr.pseudos.empty(elem);\n\t\t\t\t},\n\n\t\t\t\t// Element/input types\n\t\t\t\theader: function (elem) {\n\t\t\t\t\treturn rheader.test(elem.nodeName);\n\t\t\t\t},\n\n\t\t\t\tinput: function (elem) {\n\t\t\t\t\treturn rinputs.test(elem.nodeName);\n\t\t\t\t},\n\n\t\t\t\tbutton: function (elem) {\n\t\t\t\t\treturn nodeName(elem, \"input\") && elem.type === \"button\" ||\n\t\t\t\t\t\tnodeName(elem, \"button\");\n\t\t\t\t},\n\n\t\t\t\ttext: function (elem) {\n\t\t\t\t\tvar attr;\n\t\t\t\t\treturn nodeName(elem, \"input\") && elem.type === \"text\" &&\n\n\t\t\t\t\t\t// Support: IE <10 only\n\t\t\t\t\t\t// New HTML5 attribute values (e.g., \"search\") appear\n\t\t\t\t\t\t// with elem.type === \"text\"\n\t\t\t\t\t\t((attr = elem.getAttribute(\"type\")) == null ||\n\t\t\t\t\t\t\tattr.toLowerCase() === \"text\");\n\t\t\t\t},\n\n\t\t\t\t// Position-in-collection\n\t\t\t\tfirst: createPositionalPseudo(function () {\n\t\t\t\t\treturn [0];\n\t\t\t\t}),\n\n\t\t\t\tlast: createPositionalPseudo(function (_matchIndexes, length) {\n\t\t\t\t\treturn [length - 1];\n\t\t\t\t}),\n\n\t\t\t\teq: createPositionalPseudo(function (_matchIndexes, length, argument) {\n\t\t\t\t\treturn [argument < 0 ? argument + length : argument];\n\t\t\t\t}),\n\n\t\t\t\teven: createPositionalPseudo(function (matchIndexes, length) {\n\t\t\t\t\tvar i = 0;\n\t\t\t\t\tfor (; i < length; i += 2) {\n\t\t\t\t\t\tmatchIndexes.push(i);\n\t\t\t\t\t}\n\t\t\t\t\treturn matchIndexes;\n\t\t\t\t}),\n\n\t\t\t\todd: createPositionalPseudo(function (matchIndexes, length) {\n\t\t\t\t\tvar i = 1;\n\t\t\t\t\tfor (; i < length; i += 2) {\n\t\t\t\t\t\tmatchIndexes.push(i);\n\t\t\t\t\t}\n\t\t\t\t\treturn matchIndexes;\n\t\t\t\t}),\n\n\t\t\t\tlt: createPositionalPseudo(function (matchIndexes, length, argument) {\n\t\t\t\t\tvar i;\n\n\t\t\t\t\tif (argument < 0) {\n\t\t\t\t\t\ti = argument + length;\n\t\t\t\t\t} else if (argument > length) {\n\t\t\t\t\t\ti = length;\n\t\t\t\t\t} else {\n\t\t\t\t\t\ti = argument;\n\t\t\t\t\t}\n\n\t\t\t\t\tfor (; --i >= 0;) {\n\t\t\t\t\t\tmatchIndexes.push(i);\n\t\t\t\t\t}\n\t\t\t\t\treturn matchIndexes;\n\t\t\t\t}),\n\n\t\t\t\tgt: createPositionalPseudo(function (matchIndexes, length, argument) {\n\t\t\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\t\t\tfor (; ++i < length;) {\n\t\t\t\t\t\tmatchIndexes.push(i);\n\t\t\t\t\t}\n\t\t\t\t\treturn matchIndexes;\n\t\t\t\t})\n\t\t\t}\n\t\t};\n\n\t\tExpr.pseudos.nth = Expr.pseudos.eq;\n\n\t\t// Add button/input type pseudos\n\t\tfor (i in { radio: true, checkbox: true, file: true, password: true, image: true }) {\n\t\t\tExpr.pseudos[i] = createInputPseudo(i);\n\t\t}\n\t\tfor (i in { submit: true, reset: true }) {\n\t\t\tExpr.pseudos[i] = createButtonPseudo(i);\n\t\t}\n\n\t\t// Easy API for creating new setFilters\n\t\tfunction setFilters() { }\n\t\tsetFilters.prototype = Expr.filters = Expr.pseudos;\n\t\tExpr.setFilters = new setFilters();\n\n\t\tfunction tokenize(selector, parseOnly) {\n\t\t\tvar matched, match, tokens, type,\n\t\t\t\tsoFar, groups, preFilters,\n\t\t\t\tcached = tokenCache[selector + \" \"];\n\n\t\t\tif (cached) {\n\t\t\t\treturn parseOnly ? 0 : cached.slice(0);\n\t\t\t}\n\n\t\t\tsoFar = selector;\n\t\t\tgroups = [];\n\t\t\tpreFilters = Expr.preFilter;\n\n\t\t\twhile (soFar) {\n\n\t\t\t\t// Comma and first run\n\t\t\t\tif (!matched || (match = rcomma.exec(soFar))) {\n\t\t\t\t\tif (match) {\n\n\t\t\t\t\t\t// Don't consume trailing commas as valid\n\t\t\t\t\t\tsoFar = soFar.slice(match[0].length) || soFar;\n\t\t\t\t\t}\n\t\t\t\t\tgroups.push((tokens = []));\n\t\t\t\t}\n\n\t\t\t\tmatched = false;\n\n\t\t\t\t// Combinators\n\t\t\t\tif ((match = rleadingCombinator.exec(soFar))) {\n\t\t\t\t\tmatched = match.shift();\n\t\t\t\t\ttokens.push({\n\t\t\t\t\t\tvalue: matched,\n\n\t\t\t\t\t\t// Cast descendant combinators to space\n\t\t\t\t\t\ttype: match[0].replace(rtrimCSS, \" \")\n\t\t\t\t\t});\n\t\t\t\t\tsoFar = soFar.slice(matched.length);\n\t\t\t\t}\n\n\t\t\t\t// Filters\n\t\t\t\tfor (type in Expr.filter) {\n\t\t\t\t\tif ((match = matchExpr[type].exec(soFar)) && (!preFilters[type] ||\n\t\t\t\t\t\t(match = preFilters[type](match)))) {\n\t\t\t\t\t\tmatched = match.shift();\n\t\t\t\t\t\ttokens.push({\n\t\t\t\t\t\t\tvalue: matched,\n\t\t\t\t\t\t\ttype: type,\n\t\t\t\t\t\t\tmatches: match\n\t\t\t\t\t\t});\n\t\t\t\t\t\tsoFar = soFar.slice(matched.length);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (!matched) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Return the length of the invalid excess\n\t\t\t// if we're just parsing\n\t\t\t// Otherwise, throw an error or return tokens\n\t\t\tif (parseOnly) {\n\t\t\t\treturn soFar.length;\n\t\t\t}\n\n\t\t\treturn soFar ?\n\t\t\t\tfind.error(selector) :\n\n\t\t\t\t// Cache the tokens\n\t\t\t\ttokenCache(selector, groups).slice(0);\n\t\t}\n\n\t\tfunction toSelector(tokens) {\n\t\t\tvar i = 0,\n\t\t\t\tlen = tokens.length,\n\t\t\t\tselector = \"\";\n\t\t\tfor (; i < len; i++) {\n\t\t\t\tselector += tokens[i].value;\n\t\t\t}\n\t\t\treturn selector;\n\t\t}\n\n\t\tfunction addCombinator(matcher, combinator, base) {\n\t\t\tvar dir = combinator.dir,\n\t\t\t\tskip = combinator.next,\n\t\t\t\tkey = skip || dir,\n\t\t\t\tcheckNonElements = base && key === \"parentNode\",\n\t\t\t\tdoneName = done++;\n\n\t\t\treturn combinator.first ?\n\n\t\t\t\t// Check against closest ancestor/preceding element\n\t\t\t\tfunction (elem, context, xml) {\n\t\t\t\t\twhile ((elem = elem[dir])) {\n\t\t\t\t\t\tif (elem.nodeType === 1 || checkNonElements) {\n\t\t\t\t\t\t\treturn matcher(elem, context, xml);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn false;\n\t\t\t\t} :\n\n\t\t\t\t// Check against all ancestor/preceding elements\n\t\t\t\tfunction (elem, context, xml) {\n\t\t\t\t\tvar oldCache, outerCache,\n\t\t\t\t\t\tnewCache = [dirruns, doneName];\n\n\t\t\t\t\t// We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching\n\t\t\t\t\tif (xml) {\n\t\t\t\t\t\twhile ((elem = elem[dir])) {\n\t\t\t\t\t\t\tif (elem.nodeType === 1 || checkNonElements) {\n\t\t\t\t\t\t\t\tif (matcher(elem, context, xml)) {\n\t\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\twhile ((elem = elem[dir])) {\n\t\t\t\t\t\t\tif (elem.nodeType === 1 || checkNonElements) {\n\t\t\t\t\t\t\t\touterCache = elem[expando] || (elem[expando] = {});\n\n\t\t\t\t\t\t\t\tif (skip && nodeName(elem, skip)) {\n\t\t\t\t\t\t\t\t\telem = elem[dir] || elem;\n\t\t\t\t\t\t\t\t} else if ((oldCache = outerCache[key]) &&\n\t\t\t\t\t\t\t\t\toldCache[0] === dirruns && oldCache[1] === doneName) {\n\n\t\t\t\t\t\t\t\t\t// Assign to newCache so results back-propagate to previous elements\n\t\t\t\t\t\t\t\t\treturn (newCache[2] = oldCache[2]);\n\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t// Reuse newcache so results back-propagate to previous elements\n\t\t\t\t\t\t\t\t\touterCache[key] = newCache;\n\n\t\t\t\t\t\t\t\t\t// A match means we're done; a fail means we have to keep checking\n\t\t\t\t\t\t\t\t\tif ((newCache[2] = matcher(elem, context, xml))) {\n\t\t\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn false;\n\t\t\t\t};\n\t\t}\n\n\t\tfunction elementMatcher(matchers) {\n\t\t\treturn matchers.length > 1 ?\n\t\t\t\tfunction (elem, context, xml) {\n\t\t\t\t\tvar i = matchers.length;\n\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\tif (!matchers[i](elem, context, xml)) {\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn true;\n\t\t\t\t} :\n\t\t\t\tmatchers[0];\n\t\t}\n\n\t\tfunction multipleContexts(selector, contexts, results) {\n\t\t\tvar i = 0,\n\t\t\t\tlen = contexts.length;\n\t\t\tfor (; i < len; i++) {\n\t\t\t\tfind(selector, contexts[i], results);\n\t\t\t}\n\t\t\treturn results;\n\t\t}\n\n\t\tfunction condense(unmatched, map, filter, context, xml) {\n\t\t\tvar elem,\n\t\t\t\tnewUnmatched = [],\n\t\t\t\ti = 0,\n\t\t\t\tlen = unmatched.length,\n\t\t\t\tmapped = map != null;\n\n\t\t\tfor (; i < len; i++) {\n\t\t\t\tif ((elem = unmatched[i])) {\n\t\t\t\t\tif (!filter || filter(elem, context, xml)) {\n\t\t\t\t\t\tnewUnmatched.push(elem);\n\t\t\t\t\t\tif (mapped) {\n\t\t\t\t\t\t\tmap.push(i);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn newUnmatched;\n\t\t}\n\n\t\tfunction setMatcher(preFilter, selector, matcher, postFilter, postFinder, postSelector) {\n\t\t\tif (postFilter && !postFilter[expando]) {\n\t\t\t\tpostFilter = setMatcher(postFilter);\n\t\t\t}\n\t\t\tif (postFinder && !postFinder[expando]) {\n\t\t\t\tpostFinder = setMatcher(postFinder, postSelector);\n\t\t\t}\n\t\t\treturn markFunction(function (seed, results, context, xml) {\n\t\t\t\tvar temp, i, elem, matcherOut,\n\t\t\t\t\tpreMap = [],\n\t\t\t\t\tpostMap = [],\n\t\t\t\t\tpreexisting = results.length,\n\n\t\t\t\t\t// Get initial elements from seed or context\n\t\t\t\t\telems = seed ||\n\t\t\t\t\t\tmultipleContexts(selector || \"*\",\n\t\t\t\t\t\t\tcontext.nodeType ? [context] : context, []),\n\n\t\t\t\t\t// Prefilter to get matcher input, preserving a map for seed-results synchronization\n\t\t\t\t\tmatcherIn = preFilter && (seed || !selector) ?\n\t\t\t\t\t\tcondense(elems, preMap, preFilter, context, xml) :\n\t\t\t\t\t\telems;\n\n\t\t\t\tif (matcher) {\n\n\t\t\t\t\t// If we have a postFinder, or filtered seed, or non-seed postFilter\n\t\t\t\t\t// or preexisting results,\n\t\t\t\t\tmatcherOut = postFinder || (seed ? preFilter : preexisting || postFilter) ?\n\n\t\t\t\t\t\t// ...intermediate processing is necessary\n\t\t\t\t\t\t[] :\n\n\t\t\t\t\t\t// ...otherwise use results directly\n\t\t\t\t\t\tresults;\n\n\t\t\t\t\t// Find primary matches\n\t\t\t\t\tmatcher(matcherIn, matcherOut, context, xml);\n\t\t\t\t} else {\n\t\t\t\t\tmatcherOut = matcherIn;\n\t\t\t\t}\n\n\t\t\t\t// Apply postFilter\n\t\t\t\tif (postFilter) {\n\t\t\t\t\ttemp = condense(matcherOut, postMap);\n\t\t\t\t\tpostFilter(temp, [], context, xml);\n\n\t\t\t\t\t// Un-match failing elements by moving them back to matcherIn\n\t\t\t\t\ti = temp.length;\n\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\tif ((elem = temp[i])) {\n\t\t\t\t\t\t\tmatcherOut[postMap[i]] = !(matcherIn[postMap[i]] = elem);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (seed) {\n\t\t\t\t\tif (postFinder || preFilter) {\n\t\t\t\t\t\tif (postFinder) {\n\n\t\t\t\t\t\t\t// Get the final matcherOut by condensing this intermediate into postFinder contexts\n\t\t\t\t\t\t\ttemp = [];\n\t\t\t\t\t\t\ti = matcherOut.length;\n\t\t\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\t\t\tif ((elem = matcherOut[i])) {\n\n\t\t\t\t\t\t\t\t\t// Restore matcherIn since elem is not yet a final match\n\t\t\t\t\t\t\t\t\ttemp.push((matcherIn[i] = elem));\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tpostFinder(null, (matcherOut = []), temp, xml);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Move matched elements from seed to results to keep them synchronized\n\t\t\t\t\t\ti = matcherOut.length;\n\t\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\t\tif ((elem = matcherOut[i]) &&\n\t\t\t\t\t\t\t\t(temp = postFinder ? indexOf.call(seed, elem) : preMap[i]) > -1) {\n\n\t\t\t\t\t\t\t\tseed[temp] = !(results[temp] = elem);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Add elements to results, through postFinder if defined\n\t\t\t\t} else {\n\t\t\t\t\tmatcherOut = condense(\n\t\t\t\t\t\tmatcherOut === results ?\n\t\t\t\t\t\t\tmatcherOut.splice(preexisting, matcherOut.length) :\n\t\t\t\t\t\t\tmatcherOut\n\t\t\t\t\t);\n\t\t\t\t\tif (postFinder) {\n\t\t\t\t\t\tpostFinder(null, results, matcherOut, xml);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tpush.apply(results, matcherOut);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tfunction matcherFromTokens(tokens) {\n\t\t\tvar checkContext, matcher, j,\n\t\t\t\tlen = tokens.length,\n\t\t\t\tleadingRelative = Expr.relative[tokens[0].type],\n\t\t\t\timplicitRelative = leadingRelative || Expr.relative[\" \"],\n\t\t\t\ti = leadingRelative ? 1 : 0,\n\n\t\t\t\t// The foundational matcher ensures that elements are reachable from top-level context(s)\n\t\t\t\tmatchContext = addCombinator(function (elem) {\n\t\t\t\t\treturn elem === checkContext;\n\t\t\t\t}, implicitRelative, true),\n\t\t\t\tmatchAnyContext = addCombinator(function (elem) {\n\t\t\t\t\treturn indexOf.call(checkContext, elem) > -1;\n\t\t\t\t}, implicitRelative, true),\n\t\t\t\tmatchers = [function (elem, context, xml) {\n\n\t\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\tvar ret = (!leadingRelative && (xml || context != outermostContext)) || (\n\t\t\t\t\t\t(checkContext = context).nodeType ?\n\t\t\t\t\t\t\tmatchContext(elem, context, xml) :\n\t\t\t\t\t\t\tmatchAnyContext(elem, context, xml));\n\n\t\t\t\t\t// Avoid hanging onto element\n\t\t\t\t\t// (see https://github.com/jquery/sizzle/issues/299)\n\t\t\t\t\tcheckContext = null;\n\t\t\t\t\treturn ret;\n\t\t\t\t}];\n\n\t\t\tfor (; i < len; i++) {\n\t\t\t\tif ((matcher = Expr.relative[tokens[i].type])) {\n\t\t\t\t\tmatchers = [addCombinator(elementMatcher(matchers), matcher)];\n\t\t\t\t} else {\n\t\t\t\t\tmatcher = Expr.filter[tokens[i].type].apply(null, tokens[i].matches);\n\n\t\t\t\t\t// Return special upon seeing a positional matcher\n\t\t\t\t\tif (matcher[expando]) {\n\n\t\t\t\t\t\t// Find the next relative operator (if any) for proper handling\n\t\t\t\t\t\tj = ++i;\n\t\t\t\t\t\tfor (; j < len; j++) {\n\t\t\t\t\t\t\tif (Expr.relative[tokens[j].type]) {\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn setMatcher(\n\t\t\t\t\t\t\ti > 1 && elementMatcher(matchers),\n\t\t\t\t\t\t\ti > 1 && toSelector(\n\n\t\t\t\t\t\t\t\t// If the preceding token was a descendant combinator, insert an implicit any-element `*`\n\t\t\t\t\t\t\t\ttokens.slice(0, i - 1)\n\t\t\t\t\t\t\t\t\t.concat({ value: tokens[i - 2].type === \" \" ? \"*\" : \"\" })\n\t\t\t\t\t\t\t).replace(rtrimCSS, \"$1\"),\n\t\t\t\t\t\t\tmatcher,\n\t\t\t\t\t\t\ti < j && matcherFromTokens(tokens.slice(i, j)),\n\t\t\t\t\t\t\tj < len && matcherFromTokens((tokens = tokens.slice(j))),\n\t\t\t\t\t\t\tj < len && toSelector(tokens)\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\tmatchers.push(matcher);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn elementMatcher(matchers);\n\t\t}\n\n\t\tfunction matcherFromGroupMatchers(elementMatchers, setMatchers) {\n\t\t\tvar bySet = setMatchers.length > 0,\n\t\t\t\tbyElement = elementMatchers.length > 0,\n\t\t\t\tsuperMatcher = function (seed, context, xml, results, outermost) {\n\t\t\t\t\tvar elem, j, matcher,\n\t\t\t\t\t\tmatchedCount = 0,\n\t\t\t\t\t\ti = \"0\",\n\t\t\t\t\t\tunmatched = seed && [],\n\t\t\t\t\t\tsetMatched = [],\n\t\t\t\t\t\tcontextBackup = outermostContext,\n\n\t\t\t\t\t\t// We must always have either seed elements or outermost context\n\t\t\t\t\t\telems = seed || byElement && Expr.find.TAG(\"*\", outermost),\n\n\t\t\t\t\t\t// Use integer dirruns iff this is the outermost matcher\n\t\t\t\t\t\tdirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1),\n\t\t\t\t\t\tlen = elems.length;\n\n\t\t\t\t\tif (outermost) {\n\n\t\t\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\t\toutermostContext = context == document || context || outermost;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Add elements passing elementMatchers directly to results\n\t\t\t\t\t// Support: iOS <=7 - 9 only\n\t\t\t\t\t// Tolerate NodeList properties (IE: \"length\"; Safari: <number>) matching\n\t\t\t\t\t// elements by id. (see trac-14142)\n\t\t\t\t\tfor (; i !== len && (elem = elems[i]) != null; i++) {\n\t\t\t\t\t\tif (byElement && elem) {\n\t\t\t\t\t\t\tj = 0;\n\n\t\t\t\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\t\t\tif (!context && elem.ownerDocument != document) {\n\t\t\t\t\t\t\t\tsetDocument(elem);\n\t\t\t\t\t\t\t\txml = !documentIsHTML;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\twhile ((matcher = elementMatchers[j++])) {\n\t\t\t\t\t\t\t\tif (matcher(elem, context || document, xml)) {\n\t\t\t\t\t\t\t\t\tpush.call(results, elem);\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (outermost) {\n\t\t\t\t\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Track unmatched elements for set filters\n\t\t\t\t\t\tif (bySet) {\n\n\t\t\t\t\t\t\t// They will have gone through all possible matchers\n\t\t\t\t\t\t\tif ((elem = !matcher && elem)) {\n\t\t\t\t\t\t\t\tmatchedCount--;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Lengthen the array for every element, matched or not\n\t\t\t\t\t\t\tif (seed) {\n\t\t\t\t\t\t\t\tunmatched.push(elem);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// `i` is now the count of elements visited above, and adding it to `matchedCount`\n\t\t\t\t\t// makes the latter nonnegative.\n\t\t\t\t\tmatchedCount += i;\n\n\t\t\t\t\t// Apply set filters to unmatched elements\n\t\t\t\t\t// NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`\n\t\t\t\t\t// equals `i`), unless we didn't visit _any_ elements in the above loop because we have\n\t\t\t\t\t// no element matchers and no seed.\n\t\t\t\t\t// Incrementing an initially-string \"0\" `i` allows `i` to remain a string only in that\n\t\t\t\t\t// case, which will result in a \"00\" `matchedCount` that differs from `i` but is also\n\t\t\t\t\t// numerically zero.\n\t\t\t\t\tif (bySet && i !== matchedCount) {\n\t\t\t\t\t\tj = 0;\n\t\t\t\t\t\twhile ((matcher = setMatchers[j++])) {\n\t\t\t\t\t\t\tmatcher(unmatched, setMatched, context, xml);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (seed) {\n\n\t\t\t\t\t\t\t// Reintegrate element matches to eliminate the need for sorting\n\t\t\t\t\t\t\tif (matchedCount > 0) {\n\t\t\t\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\t\t\t\tif (!(unmatched[i] || setMatched[i])) {\n\t\t\t\t\t\t\t\t\t\tsetMatched[i] = pop.call(results);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Discard index placeholder values to get only actual matches\n\t\t\t\t\t\t\tsetMatched = condense(setMatched);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Add matches to results\n\t\t\t\t\t\tpush.apply(results, setMatched);\n\n\t\t\t\t\t\t// Seedless set matches succeeding multiple successful matchers stipulate sorting\n\t\t\t\t\t\tif (outermost && !seed && setMatched.length > 0 &&\n\t\t\t\t\t\t\t(matchedCount + setMatchers.length) > 1) {\n\n\t\t\t\t\t\t\tjQuery.uniqueSort(results);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Override manipulation of globals by nested matchers\n\t\t\t\t\tif (outermost) {\n\t\t\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\t\t\toutermostContext = contextBackup;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn unmatched;\n\t\t\t\t};\n\n\t\t\treturn bySet ?\n\t\t\t\tmarkFunction(superMatcher) :\n\t\t\t\tsuperMatcher;\n\t\t}\n\n\t\tfunction compile(selector, match /* Internal Use Only */) {\n\t\t\tvar i,\n\t\t\t\tsetMatchers = [],\n\t\t\t\telementMatchers = [],\n\t\t\t\tcached = compilerCache[selector + \" \"];\n\n\t\t\tif (!cached) {\n\n\t\t\t\t// Generate a function of recursive functions that can be used to check each element\n\t\t\t\tif (!match) {\n\t\t\t\t\tmatch = tokenize(selector);\n\t\t\t\t}\n\t\t\t\ti = match.length;\n\t\t\t\twhile (i--) {\n\t\t\t\t\tcached = matcherFromTokens(match[i]);\n\t\t\t\t\tif (cached[expando]) {\n\t\t\t\t\t\tsetMatchers.push(cached);\n\t\t\t\t\t} else {\n\t\t\t\t\t\telementMatchers.push(cached);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Cache the compiled function\n\t\t\t\tcached = compilerCache(selector,\n\t\t\t\t\tmatcherFromGroupMatchers(elementMatchers, setMatchers));\n\n\t\t\t\t// Save selector and tokenization\n\t\t\t\tcached.selector = selector;\n\t\t\t}\n\t\t\treturn cached;\n\t\t}\n\n\t\t/**\n\t\t * A low-level selection function that works with jQuery's compiled\n\t\t *  selector functions\n\t\t * @param {String|Function} selector A selector or a pre-compiled\n\t\t *  selector function built with jQuery selector compile\n\t\t * @param {Element} context\n\t\t * @param {Array} [results]\n\t\t * @param {Array} [seed] A set of elements to match against\n\t\t */\n\t\tfunction select(selector, context, results, seed) {\n\t\t\tvar i, tokens, token, type, find,\n\t\t\t\tcompiled = typeof selector === \"function\" && selector,\n\t\t\t\tmatch = !seed && tokenize((selector = compiled.selector || selector));\n\n\t\t\tresults = results || [];\n\n\t\t\t// Try to minimize operations if there is only one selector in the list and no seed\n\t\t\t// (the latter of which guarantees us context)\n\t\t\tif (match.length === 1) {\n\n\t\t\t\t// Reduce context if the leading compound selector is an ID\n\t\t\t\ttokens = match[0] = match[0].slice(0);\n\t\t\t\tif (tokens.length > 2 && (token = tokens[0]).type === \"ID\" &&\n\t\t\t\t\tcontext.nodeType === 9 && documentIsHTML && Expr.relative[tokens[1].type]) {\n\n\t\t\t\t\tcontext = (Expr.find.ID(\n\t\t\t\t\t\ttoken.matches[0].replace(runescape, funescape),\n\t\t\t\t\t\tcontext\n\t\t\t\t\t) || [])[0];\n\t\t\t\t\tif (!context) {\n\t\t\t\t\t\treturn results;\n\n\t\t\t\t\t\t// Precompiled matchers will still verify ancestry, so step up a level\n\t\t\t\t\t} else if (compiled) {\n\t\t\t\t\t\tcontext = context.parentNode;\n\t\t\t\t\t}\n\n\t\t\t\t\tselector = selector.slice(tokens.shift().value.length);\n\t\t\t\t}\n\n\t\t\t\t// Fetch a seed set for right-to-left matching\n\t\t\t\ti = matchExpr.needsContext.test(selector) ? 0 : tokens.length;\n\t\t\t\twhile (i--) {\n\t\t\t\t\ttoken = tokens[i];\n\n\t\t\t\t\t// Abort if we hit a combinator\n\t\t\t\t\tif (Expr.relative[(type = token.type)]) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tif ((find = Expr.find[type])) {\n\n\t\t\t\t\t\t// Search, expanding context for leading sibling combinators\n\t\t\t\t\t\tif ((seed = find(\n\t\t\t\t\t\t\ttoken.matches[0].replace(runescape, funescape),\n\t\t\t\t\t\t\trsibling.test(tokens[0].type) &&\n\t\t\t\t\t\t\ttestContext(context.parentNode) || context\n\t\t\t\t\t\t))) {\n\n\t\t\t\t\t\t\t// If seed is empty or no tokens remain, we can return early\n\t\t\t\t\t\t\ttokens.splice(i, 1);\n\t\t\t\t\t\t\tselector = seed.length && toSelector(tokens);\n\t\t\t\t\t\t\tif (!selector) {\n\t\t\t\t\t\t\t\tpush.apply(results, seed);\n\t\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Compile and execute a filtering function if one is not provided\n\t\t\t// Provide `match` to avoid retokenization if we modified the selector above\n\t\t\t(compiled || compile(selector, match))(\n\t\t\t\tseed,\n\t\t\t\tcontext,\n\t\t\t\t!documentIsHTML,\n\t\t\t\tresults,\n\t\t\t\t!context || rsibling.test(selector) && testContext(context.parentNode) || context\n\t\t\t);\n\t\t\treturn results;\n\t\t}\n\n\t\t// One-time assignments\n\n\t\t// Support: Android <=4.0 - 4.1+\n\t\t// Sort stability\n\t\tsupport.sortStable = expando.split(\"\").sort(sortOrder).join(\"\") === expando;\n\n\t\t// Initialize against the default document\n\t\tsetDocument();\n\n\t\t// Support: Android <=4.0 - 4.1+\n\t\t// Detached nodes confoundingly follow *each other*\n\t\tsupport.sortDetached = assert(function (el) {\n\n\t\t\t// Should return 1, but returns 4 (following)\n\t\t\treturn el.compareDocumentPosition(document.createElement(\"fieldset\")) & 1;\n\t\t});\n\n\t\tjQuery.find = find;\n\n\t\t// Deprecated\n\t\tjQuery.expr[\":\"] = jQuery.expr.pseudos;\n\t\tjQuery.unique = jQuery.uniqueSort;\n\n\t\t// These have always been private, but they used to be documented\n\t\t// as part of Sizzle so let's maintain them in the 3.x line\n\t\t// for backwards compatibility purposes.\n\t\tfind.compile = compile;\n\t\tfind.select = select;\n\t\tfind.setDocument = setDocument;\n\n\t\tfind.escape = jQuery.escapeSelector;\n\t\tfind.getText = jQuery.text;\n\t\tfind.isXML = jQuery.isXMLDoc;\n\t\tfind.selectors = jQuery.expr;\n\t\tfind.support = jQuery.support;\n\t\tfind.uniqueSort = jQuery.uniqueSort;\n\n\t\t/* eslint-enable */\n\n\t})();\n\n\n\tvar dir = function (elem, dir, until) {\n\t\tvar matched = [],\n\t\t\ttruncate = until !== undefined;\n\n\t\twhile ((elem = elem[dir]) && elem.nodeType !== 9) {\n\t\t\tif (elem.nodeType === 1) {\n\t\t\t\tif (truncate && jQuery(elem).is(until)) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tmatched.push(elem);\n\t\t\t}\n\t\t}\n\t\treturn matched;\n\t};\n\n\n\tvar siblings = function (n, elem) {\n\t\tvar matched = [];\n\n\t\tfor (; n; n = n.nextSibling) {\n\t\t\tif (n.nodeType === 1 && n !== elem) {\n\t\t\t\tmatched.push(n);\n\t\t\t}\n\t\t}\n\n\t\treturn matched;\n\t};\n\n\n\tvar rneedsContext = jQuery.expr.match.needsContext;\n\n\tvar rsingleTag = (/^<([a-z][^\\/\\0>:\\x20\\t\\r\\n\\f]*)[\\x20\\t\\r\\n\\f]*\\/?>(?:<\\/\\1>|)$/i);\n\n\n\n\t// Implement the identical functionality for filter and not\n\tfunction winnow(elements, qualifier, not) {\n\t\tif (isFunction(qualifier)) {\n\t\t\treturn jQuery.grep(elements, function (elem, i) {\n\t\t\t\treturn !!qualifier.call(elem, i, elem) !== not;\n\t\t\t});\n\t\t}\n\n\t\t// Single element\n\t\tif (qualifier.nodeType) {\n\t\t\treturn jQuery.grep(elements, function (elem) {\n\t\t\t\treturn (elem === qualifier) !== not;\n\t\t\t});\n\t\t}\n\n\t\t// Arraylike of elements (jQuery, arguments, Array)\n\t\tif (typeof qualifier !== \"string\") {\n\t\t\treturn jQuery.grep(elements, function (elem) {\n\t\t\t\treturn (indexOf.call(qualifier, elem) > -1) !== not;\n\t\t\t});\n\t\t}\n\n\t\t// Filtered directly for both simple and complex selectors\n\t\treturn jQuery.filter(qualifier, elements, not);\n\t}\n\n\tjQuery.filter = function (expr, elems, not) {\n\t\tvar elem = elems[0];\n\n\t\tif (not) {\n\t\t\texpr = \":not(\" + expr + \")\";\n\t\t}\n\n\t\tif (elems.length === 1 && elem.nodeType === 1) {\n\t\t\treturn jQuery.find.matchesSelector(elem, expr) ? [elem] : [];\n\t\t}\n\n\t\treturn jQuery.find.matches(expr, jQuery.grep(elems, function (elem) {\n\t\t\treturn elem.nodeType === 1;\n\t\t}));\n\t};\n\n\tjQuery.fn.extend({\n\t\tfind: function (selector) {\n\t\t\tvar i, ret,\n\t\t\t\tlen = this.length,\n\t\t\t\tself = this;\n\n\t\t\tif (typeof selector !== \"string\") {\n\t\t\t\treturn this.pushStack(jQuery(selector).filter(function () {\n\t\t\t\t\tfor (i = 0; i < len; i++) {\n\t\t\t\t\t\tif (jQuery.contains(self[i], this)) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}));\n\t\t\t}\n\n\t\t\tret = this.pushStack([]);\n\n\t\t\tfor (i = 0; i < len; i++) {\n\t\t\t\tjQuery.find(selector, self[i], ret);\n\t\t\t}\n\n\t\t\treturn len > 1 ? jQuery.uniqueSort(ret) : ret;\n\t\t},\n\t\tfilter: function (selector) {\n\t\t\treturn this.pushStack(winnow(this, selector || [], false));\n\t\t},\n\t\tnot: function (selector) {\n\t\t\treturn this.pushStack(winnow(this, selector || [], true));\n\t\t},\n\t\tis: function (selector) {\n\t\t\treturn !!winnow(\n\t\t\t\tthis,\n\n\t\t\t\t// If this is a positional/relative selector, check membership in the returned set\n\t\t\t\t// so $(\"p:first\").is(\"p:last\") won't return true for a doc with two \"p\".\n\t\t\t\ttypeof selector === \"string\" && rneedsContext.test(selector) ?\n\t\t\t\t\tjQuery(selector) :\n\t\t\t\t\tselector || [],\n\t\t\t\tfalse\n\t\t\t).length;\n\t\t}\n\t});\n\n\n\t// Initialize a jQuery object\n\n\n\t// A central reference to the root jQuery(document)\n\tvar rootjQuery,\n\n\t\t// A simple way to check for HTML strings\n\t\t// Prioritize #id over <tag> to avoid XSS via location.hash (trac-9521)\n\t\t// Strict HTML recognition (trac-11290: must start with <)\n\t\t// Shortcut simple #id case for speed\n\t\trquickExpr = /^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]+))$/,\n\n\t\tinit = jQuery.fn.init = function (selector, context, root) {\n\t\t\tvar match, elem;\n\n\t\t\t// HANDLE: $(\"\"), $(null), $(undefined), $(false)\n\t\t\tif (!selector) {\n\t\t\t\treturn this;\n\t\t\t}\n\n\t\t\t// Method init() accepts an alternate rootjQuery\n\t\t\t// so migrate can support jQuery.sub (gh-2101)\n\t\t\troot = root || rootjQuery;\n\n\t\t\t// Handle HTML strings\n\t\t\tif (typeof selector === \"string\") {\n\t\t\t\tif (selector[0] === \"<\" &&\n\t\t\t\t\tselector[selector.length - 1] === \">\" &&\n\t\t\t\t\tselector.length >= 3) {\n\n\t\t\t\t\t// Assume that strings that start and end with <> are HTML and skip the regex check\n\t\t\t\t\tmatch = [null, selector, null];\n\n\t\t\t\t} else {\n\t\t\t\t\tmatch = rquickExpr.exec(selector);\n\t\t\t\t}\n\n\t\t\t\t// Match html or make sure no context is specified for #id\n\t\t\t\tif (match && (match[1] || !context)) {\n\n\t\t\t\t\t// HANDLE: $(html) -> $(array)\n\t\t\t\t\tif (match[1]) {\n\t\t\t\t\t\tcontext = context instanceof jQuery ? context[0] : context;\n\n\t\t\t\t\t\t// Option to run scripts is true for back-compat\n\t\t\t\t\t\t// Intentionally let the error be thrown if parseHTML is not present\n\t\t\t\t\t\tjQuery.merge(this, jQuery.parseHTML(\n\t\t\t\t\t\t\tmatch[1],\n\t\t\t\t\t\t\tcontext && context.nodeType ? context.ownerDocument || context : document,\n\t\t\t\t\t\t\ttrue\n\t\t\t\t\t\t));\n\n\t\t\t\t\t\t// HANDLE: $(html, props)\n\t\t\t\t\t\tif (rsingleTag.test(match[1]) && jQuery.isPlainObject(context)) {\n\t\t\t\t\t\t\tfor (match in context) {\n\n\t\t\t\t\t\t\t\t// Properties of context are called as methods if possible\n\t\t\t\t\t\t\t\tif (isFunction(this[match])) {\n\t\t\t\t\t\t\t\t\tthis[match](context[match]);\n\n\t\t\t\t\t\t\t\t\t// ...and otherwise set as attributes\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tthis.attr(match, context[match]);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn this;\n\n\t\t\t\t\t\t// HANDLE: $(#id)\n\t\t\t\t\t} else {\n\t\t\t\t\t\telem = document.getElementById(match[2]);\n\n\t\t\t\t\t\tif (elem) {\n\n\t\t\t\t\t\t\t// Inject the element directly into the jQuery object\n\t\t\t\t\t\t\tthis[0] = elem;\n\t\t\t\t\t\t\tthis.length = 1;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn this;\n\t\t\t\t\t}\n\n\t\t\t\t\t// HANDLE: $(expr, $(...))\n\t\t\t\t} else if (!context || context.jquery) {\n\t\t\t\t\treturn (context || root).find(selector);\n\n\t\t\t\t\t// HANDLE: $(expr, context)\n\t\t\t\t\t// (which is just equivalent to: $(context).find(expr)\n\t\t\t\t} else {\n\t\t\t\t\treturn this.constructor(context).find(selector);\n\t\t\t\t}\n\n\t\t\t\t// HANDLE: $(DOMElement)\n\t\t\t} else if (selector.nodeType) {\n\t\t\t\tthis[0] = selector;\n\t\t\t\tthis.length = 1;\n\t\t\t\treturn this;\n\n\t\t\t\t// HANDLE: $(function)\n\t\t\t\t// Shortcut for document ready\n\t\t\t} else if (isFunction(selector)) {\n\t\t\t\treturn root.ready !== undefined ?\n\t\t\t\t\troot.ready(selector) :\n\n\t\t\t\t\t// Execute immediately if ready is not present\n\t\t\t\t\tselector(jQuery);\n\t\t\t}\n\n\t\t\treturn jQuery.makeArray(selector, this);\n\t\t};\n\n\t// Give the init function the jQuery prototype for later instantiation\n\tinit.prototype = jQuery.fn;\n\n\t// Initialize central reference\n\trootjQuery = jQuery(document);\n\n\n\tvar rparentsprev = /^(?:parents|prev(?:Until|All))/,\n\n\t\t// Methods guaranteed to produce a unique set when starting from a unique set\n\t\tguaranteedUnique = {\n\t\t\tchildren: true,\n\t\t\tcontents: true,\n\t\t\tnext: true,\n\t\t\tprev: true\n\t\t};\n\n\tjQuery.fn.extend({\n\t\thas: function (target) {\n\t\t\tvar targets = jQuery(target, this),\n\t\t\t\tl = targets.length;\n\n\t\t\treturn this.filter(function () {\n\t\t\t\tvar i = 0;\n\t\t\t\tfor (; i < l; i++) {\n\t\t\t\t\tif (jQuery.contains(this, targets[i])) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\tclosest: function (selectors, context) {\n\t\t\tvar cur,\n\t\t\t\ti = 0,\n\t\t\t\tl = this.length,\n\t\t\t\tmatched = [],\n\t\t\t\ttargets = typeof selectors !== \"string\" && jQuery(selectors);\n\n\t\t\t// Positional selectors never match, since there's no _selection_ context\n\t\t\tif (!rneedsContext.test(selectors)) {\n\t\t\t\tfor (; i < l; i++) {\n\t\t\t\t\tfor (cur = this[i]; cur && cur !== context; cur = cur.parentNode) {\n\n\t\t\t\t\t\t// Always skip document fragments\n\t\t\t\t\t\tif (cur.nodeType < 11 && (targets ?\n\t\t\t\t\t\t\ttargets.index(cur) > -1 :\n\n\t\t\t\t\t\t\t// Don't pass non-elements to jQuery#find\n\t\t\t\t\t\t\tcur.nodeType === 1 &&\n\t\t\t\t\t\t\tjQuery.find.matchesSelector(cur, selectors))) {\n\n\t\t\t\t\t\t\tmatched.push(cur);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn this.pushStack(matched.length > 1 ? jQuery.uniqueSort(matched) : matched);\n\t\t},\n\n\t\t// Determine the position of an element within the set\n\t\tindex: function (elem) {\n\n\t\t\t// No argument, return index in parent\n\t\t\tif (!elem) {\n\t\t\t\treturn (this[0] && this[0].parentNode) ? this.first().prevAll().length : -1;\n\t\t\t}\n\n\t\t\t// Index in selector\n\t\t\tif (typeof elem === \"string\") {\n\t\t\t\treturn indexOf.call(jQuery(elem), this[0]);\n\t\t\t}\n\n\t\t\t// Locate the position of the desired element\n\t\t\treturn indexOf.call(this,\n\n\t\t\t\t// If it receives a jQuery object, the first element is used\n\t\t\t\telem.jquery ? elem[0] : elem\n\t\t\t);\n\t\t},\n\n\t\tadd: function (selector, context) {\n\t\t\treturn this.pushStack(\n\t\t\t\tjQuery.uniqueSort(\n\t\t\t\t\tjQuery.merge(this.get(), jQuery(selector, context))\n\t\t\t\t)\n\t\t\t);\n\t\t},\n\n\t\taddBack: function (selector) {\n\t\t\treturn this.add(selector == null ?\n\t\t\t\tthis.prevObject : this.prevObject.filter(selector)\n\t\t\t);\n\t\t}\n\t});\n\n\tfunction sibling(cur, dir) {\n\t\twhile ((cur = cur[dir]) && cur.nodeType !== 1) { }\n\t\treturn cur;\n\t}\n\n\tjQuery.each({\n\t\tparent: function (elem) {\n\t\t\tvar parent = elem.parentNode;\n\t\t\treturn parent && parent.nodeType !== 11 ? parent : null;\n\t\t},\n\t\tparents: function (elem) {\n\t\t\treturn dir(elem, \"parentNode\");\n\t\t},\n\t\tparentsUntil: function (elem, _i, until) {\n\t\t\treturn dir(elem, \"parentNode\", until);\n\t\t},\n\t\tnext: function (elem) {\n\t\t\treturn sibling(elem, \"nextSibling\");\n\t\t},\n\t\tprev: function (elem) {\n\t\t\treturn sibling(elem, \"previousSibling\");\n\t\t},\n\t\tnextAll: function (elem) {\n\t\t\treturn dir(elem, \"nextSibling\");\n\t\t},\n\t\tprevAll: function (elem) {\n\t\t\treturn dir(elem, \"previousSibling\");\n\t\t},\n\t\tnextUntil: function (elem, _i, until) {\n\t\t\treturn dir(elem, \"nextSibling\", until);\n\t\t},\n\t\tprevUntil: function (elem, _i, until) {\n\t\t\treturn dir(elem, \"previousSibling\", until);\n\t\t},\n\t\tsiblings: function (elem) {\n\t\t\treturn siblings((elem.parentNode || {}).firstChild, elem);\n\t\t},\n\t\tchildren: function (elem) {\n\t\t\treturn siblings(elem.firstChild);\n\t\t},\n\t\tcontents: function (elem) {\n\t\t\tif (elem.contentDocument != null &&\n\n\t\t\t\t// Support: IE 11+\n\t\t\t\t// <object> elements with no `data` attribute has an object\n\t\t\t\t// `contentDocument` with a `null` prototype.\n\t\t\t\tgetProto(elem.contentDocument)) {\n\n\t\t\t\treturn elem.contentDocument;\n\t\t\t}\n\n\t\t\t// Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only\n\t\t\t// Treat the template element as a regular one in browsers that\n\t\t\t// don't support it.\n\t\t\tif (nodeName(elem, \"template\")) {\n\t\t\t\telem = elem.content || elem;\n\t\t\t}\n\n\t\t\treturn jQuery.merge([], elem.childNodes);\n\t\t}\n\t}, function (name, fn) {\n\t\tjQuery.fn[name] = function (until, selector) {\n\t\t\tvar matched = jQuery.map(this, fn, until);\n\n\t\t\tif (name.slice(-5) !== \"Until\") {\n\t\t\t\tselector = until;\n\t\t\t}\n\n\t\t\tif (selector && typeof selector === \"string\") {\n\t\t\t\tmatched = jQuery.filter(selector, matched);\n\t\t\t}\n\n\t\t\tif (this.length > 1) {\n\n\t\t\t\t// Remove duplicates\n\t\t\t\tif (!guaranteedUnique[name]) {\n\t\t\t\t\tjQuery.uniqueSort(matched);\n\t\t\t\t}\n\n\t\t\t\t// Reverse order for parents* and prev-derivatives\n\t\t\t\tif (rparentsprev.test(name)) {\n\t\t\t\t\tmatched.reverse();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn this.pushStack(matched);\n\t\t};\n\t});\n\tvar rnothtmlwhite = (/[^\\x20\\t\\r\\n\\f]+/g);\n\n\n\n\t// Convert String-formatted options into Object-formatted ones\n\tfunction createOptions(options) {\n\t\tvar object = {};\n\t\tjQuery.each(options.match(rnothtmlwhite) || [], function (_, flag) {\n\t\t\tobject[flag] = true;\n\t\t});\n\t\treturn object;\n\t}\n\n\t/*\n\t * Create a callback list using the following parameters:\n\t *\n\t *\toptions: an optional list of space-separated options that will change how\n\t *\t\t\tthe callback list behaves or a more traditional option object\n\t *\n\t * By default a callback list will act like an event callback list and can be\n\t * \"fired\" multiple times.\n\t *\n\t * Possible options:\n\t *\n\t *\tonce:\t\t\twill ensure the callback list can only be fired once (like a Deferred)\n\t *\n\t *\tmemory:\t\t\twill keep track of previous values and will call any callback added\n\t *\t\t\t\t\tafter the list has been fired right away with the latest \"memorized\"\n\t *\t\t\t\t\tvalues (like a Deferred)\n\t *\n\t *\tunique:\t\t\twill ensure a callback can only be added once (no duplicate in the list)\n\t *\n\t *\tstopOnFalse:\tinterrupt callings when a callback returns false\n\t *\n\t */\n\tjQuery.Callbacks = function (options) {\n\n\t\t// Convert options from String-formatted to Object-formatted if needed\n\t\t// (we check in cache first)\n\t\toptions = typeof options === \"string\" ?\n\t\t\tcreateOptions(options) :\n\t\t\tjQuery.extend({}, options);\n\n\t\tvar // Flag to know if list is currently firing\n\t\t\tfiring,\n\n\t\t\t// Last fire value for non-forgettable lists\n\t\t\tmemory,\n\n\t\t\t// Flag to know if list was already fired\n\t\t\tfired,\n\n\t\t\t// Flag to prevent firing\n\t\t\tlocked,\n\n\t\t\t// Actual callback list\n\t\t\tlist = [],\n\n\t\t\t// Queue of execution data for repeatable lists\n\t\t\tqueue = [],\n\n\t\t\t// Index of currently firing callback (modified by add/remove as needed)\n\t\t\tfiringIndex = -1,\n\n\t\t\t// Fire callbacks\n\t\t\tfire = function () {\n\n\t\t\t\t// Enforce single-firing\n\t\t\t\tlocked = locked || options.once;\n\n\t\t\t\t// Execute callbacks for all pending executions,\n\t\t\t\t// respecting firingIndex overrides and runtime changes\n\t\t\t\tfired = firing = true;\n\t\t\t\tfor (; queue.length; firingIndex = -1) {\n\t\t\t\t\tmemory = queue.shift();\n\t\t\t\t\twhile (++firingIndex < list.length) {\n\n\t\t\t\t\t\t// Run callback and check for early termination\n\t\t\t\t\t\tif (list[firingIndex].apply(memory[0], memory[1]) === false &&\n\t\t\t\t\t\t\toptions.stopOnFalse) {\n\n\t\t\t\t\t\t\t// Jump to end and forget the data so .add doesn't re-fire\n\t\t\t\t\t\t\tfiringIndex = list.length;\n\t\t\t\t\t\t\tmemory = false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Forget the data if we're done with it\n\t\t\t\tif (!options.memory) {\n\t\t\t\t\tmemory = false;\n\t\t\t\t}\n\n\t\t\t\tfiring = false;\n\n\t\t\t\t// Clean up if we're done firing for good\n\t\t\t\tif (locked) {\n\n\t\t\t\t\t// Keep an empty list if we have data for future add calls\n\t\t\t\t\tif (memory) {\n\t\t\t\t\t\tlist = [];\n\n\t\t\t\t\t\t// Otherwise, this object is spent\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlist = \"\";\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// Actual Callbacks object\n\t\t\tself = {\n\n\t\t\t\t// Add a callback or a collection of callbacks to the list\n\t\t\t\tadd: function () {\n\t\t\t\t\tif (list) {\n\n\t\t\t\t\t\t// If we have memory from a past run, we should fire after adding\n\t\t\t\t\t\tif (memory && !firing) {\n\t\t\t\t\t\t\tfiringIndex = list.length - 1;\n\t\t\t\t\t\t\tqueue.push(memory);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t(function add(args) {\n\t\t\t\t\t\t\tjQuery.each(args, function (_, arg) {\n\t\t\t\t\t\t\t\tif (isFunction(arg)) {\n\t\t\t\t\t\t\t\t\tif (!options.unique || !self.has(arg)) {\n\t\t\t\t\t\t\t\t\t\tlist.push(arg);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} else if (arg && arg.length && toType(arg) !== \"string\") {\n\n\t\t\t\t\t\t\t\t\t// Inspect recursively\n\t\t\t\t\t\t\t\t\tadd(arg);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t})(arguments);\n\n\t\t\t\t\t\tif (memory && !firing) {\n\t\t\t\t\t\t\tfire();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Remove a callback from the list\n\t\t\t\tremove: function () {\n\t\t\t\t\tjQuery.each(arguments, function (_, arg) {\n\t\t\t\t\t\tvar index;\n\t\t\t\t\t\twhile ((index = jQuery.inArray(arg, list, index)) > -1) {\n\t\t\t\t\t\t\tlist.splice(index, 1);\n\n\t\t\t\t\t\t\t// Handle firing indexes\n\t\t\t\t\t\t\tif (index <= firingIndex) {\n\t\t\t\t\t\t\t\tfiringIndex--;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Check if a given callback is in the list.\n\t\t\t\t// If no argument is given, return whether or not list has callbacks attached.\n\t\t\t\thas: function (fn) {\n\t\t\t\t\treturn fn ?\n\t\t\t\t\t\tjQuery.inArray(fn, list) > -1 :\n\t\t\t\t\t\tlist.length > 0;\n\t\t\t\t},\n\n\t\t\t\t// Remove all callbacks from the list\n\t\t\t\tempty: function () {\n\t\t\t\t\tif (list) {\n\t\t\t\t\t\tlist = [];\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Disable .fire and .add\n\t\t\t\t// Abort any current/pending executions\n\t\t\t\t// Clear all callbacks and values\n\t\t\t\tdisable: function () {\n\t\t\t\t\tlocked = queue = [];\n\t\t\t\t\tlist = memory = \"\";\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\t\t\t\tdisabled: function () {\n\t\t\t\t\treturn !list;\n\t\t\t\t},\n\n\t\t\t\t// Disable .fire\n\t\t\t\t// Also disable .add unless we have memory (since it would have no effect)\n\t\t\t\t// Abort any pending executions\n\t\t\t\tlock: function () {\n\t\t\t\t\tlocked = queue = [];\n\t\t\t\t\tif (!memory && !firing) {\n\t\t\t\t\t\tlist = memory = \"\";\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\t\t\t\tlocked: function () {\n\t\t\t\t\treturn !!locked;\n\t\t\t\t},\n\n\t\t\t\t// Call all callbacks with the given context and arguments\n\t\t\t\tfireWith: function (context, args) {\n\t\t\t\t\tif (!locked) {\n\t\t\t\t\t\targs = args || [];\n\t\t\t\t\t\targs = [context, args.slice ? args.slice() : args];\n\t\t\t\t\t\tqueue.push(args);\n\t\t\t\t\t\tif (!firing) {\n\t\t\t\t\t\t\tfire();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Call all the callbacks with the given arguments\n\t\t\t\tfire: function () {\n\t\t\t\t\tself.fireWith(this, arguments);\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// To know if the callbacks have already been called at least once\n\t\t\t\tfired: function () {\n\t\t\t\t\treturn !!fired;\n\t\t\t\t}\n\t\t\t};\n\n\t\treturn self;\n\t};\n\n\n\tfunction Identity(v) {\n\t\treturn v;\n\t}\n\tfunction Thrower(ex) {\n\t\tthrow ex;\n\t}\n\n\tfunction adoptValue(value, resolve, reject, noValue) {\n\t\tvar method;\n\n\t\ttry {\n\n\t\t\t// Check for promise aspect first to privilege synchronous behavior\n\t\t\tif (value && isFunction((method = value.promise))) {\n\t\t\t\tmethod.call(value).done(resolve).fail(reject);\n\n\t\t\t\t// Other thenables\n\t\t\t} else if (value && isFunction((method = value.then))) {\n\t\t\t\tmethod.call(value, resolve, reject);\n\n\t\t\t\t// Other non-thenables\n\t\t\t} else {\n\n\t\t\t\t// Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer:\n\t\t\t\t// * false: [ value ].slice( 0 ) => resolve( value )\n\t\t\t\t// * true: [ value ].slice( 1 ) => resolve()\n\t\t\t\tresolve.apply(undefined, [value].slice(noValue));\n\t\t\t}\n\n\t\t\t// For Promises/A+, convert exceptions into rejections\n\t\t\t// Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in\n\t\t\t// Deferred#then to conditionally suppress rejection.\n\t\t} catch (value) {\n\n\t\t\t// Support: Android 4.0 only\n\t\t\t// Strict mode functions invoked without .call/.apply get global-object context\n\t\t\treject.apply(undefined, [value]);\n\t\t}\n\t}\n\n\tjQuery.extend({\n\n\t\tDeferred: function (func) {\n\t\t\tvar tuples = [\n\n\t\t\t\t// action, add listener, callbacks,\n\t\t\t\t// ... .then handlers, argument index, [final state]\n\t\t\t\t[\"notify\", \"progress\", jQuery.Callbacks(\"memory\"),\n\t\t\t\t\tjQuery.Callbacks(\"memory\"), 2],\n\t\t\t\t[\"resolve\", \"done\", jQuery.Callbacks(\"once memory\"),\n\t\t\t\t\tjQuery.Callbacks(\"once memory\"), 0, \"resolved\"],\n\t\t\t\t[\"reject\", \"fail\", jQuery.Callbacks(\"once memory\"),\n\t\t\t\t\tjQuery.Callbacks(\"once memory\"), 1, \"rejected\"]\n\t\t\t],\n\t\t\t\tstate = \"pending\",\n\t\t\t\tpromise = {\n\t\t\t\t\tstate: function () {\n\t\t\t\t\t\treturn state;\n\t\t\t\t\t},\n\t\t\t\t\talways: function () {\n\t\t\t\t\t\tdeferred.done(arguments).fail(arguments);\n\t\t\t\t\t\treturn this;\n\t\t\t\t\t},\n\t\t\t\t\t\"catch\": function (fn) {\n\t\t\t\t\t\treturn promise.then(null, fn);\n\t\t\t\t\t},\n\n\t\t\t\t\t// Keep pipe for back-compat\n\t\t\t\t\tpipe: function ( /* fnDone, fnFail, fnProgress */) {\n\t\t\t\t\t\tvar fns = arguments;\n\n\t\t\t\t\t\treturn jQuery.Deferred(function (newDefer) {\n\t\t\t\t\t\t\tjQuery.each(tuples, function (_i, tuple) {\n\n\t\t\t\t\t\t\t\t// Map tuples (progress, done, fail) to arguments (done, fail, progress)\n\t\t\t\t\t\t\t\tvar fn = isFunction(fns[tuple[4]]) && fns[tuple[4]];\n\n\t\t\t\t\t\t\t\t// deferred.progress(function() { bind to newDefer or newDefer.notify })\n\t\t\t\t\t\t\t\t// deferred.done(function() { bind to newDefer or newDefer.resolve })\n\t\t\t\t\t\t\t\t// deferred.fail(function() { bind to newDefer or newDefer.reject })\n\t\t\t\t\t\t\t\tdeferred[tuple[1]](function () {\n\t\t\t\t\t\t\t\t\tvar returned = fn && fn.apply(this, arguments);\n\t\t\t\t\t\t\t\t\tif (returned && isFunction(returned.promise)) {\n\t\t\t\t\t\t\t\t\t\treturned.promise()\n\t\t\t\t\t\t\t\t\t\t\t.progress(newDefer.notify)\n\t\t\t\t\t\t\t\t\t\t\t.done(newDefer.resolve)\n\t\t\t\t\t\t\t\t\t\t\t.fail(newDefer.reject);\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tnewDefer[tuple[0] + \"With\"](\n\t\t\t\t\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\t\t\t\t\tfn ? [returned] : arguments\n\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tfns = null;\n\t\t\t\t\t\t}).promise();\n\t\t\t\t\t},\n\t\t\t\t\tthen: function (onFulfilled, onRejected, onProgress) {\n\t\t\t\t\t\tvar maxDepth = 0;\n\t\t\t\t\t\tfunction resolve(depth, deferred, handler, special) {\n\t\t\t\t\t\t\treturn function () {\n\t\t\t\t\t\t\t\tvar that = this,\n\t\t\t\t\t\t\t\t\targs = arguments,\n\t\t\t\t\t\t\t\t\tmightThrow = function () {\n\t\t\t\t\t\t\t\t\t\tvar returned, then;\n\n\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.3\n\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-59\n\t\t\t\t\t\t\t\t\t\t// Ignore double-resolution attempts\n\t\t\t\t\t\t\t\t\t\tif (depth < maxDepth) {\n\t\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\treturned = handler.apply(that, args);\n\n\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.1\n\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-48\n\t\t\t\t\t\t\t\t\t\tif (returned === deferred.promise()) {\n\t\t\t\t\t\t\t\t\t\t\tthrow new TypeError(\"Thenable self-resolution\");\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ sections 2.3.3.1, 3.5\n\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-54\n\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-75\n\t\t\t\t\t\t\t\t\t\t// Retrieve `then` only once\n\t\t\t\t\t\t\t\t\t\tthen = returned &&\n\n\t\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.4\n\t\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-64\n\t\t\t\t\t\t\t\t\t\t\t// Only check objects and functions for thenability\n\t\t\t\t\t\t\t\t\t\t\t(typeof returned === \"object\" ||\n\t\t\t\t\t\t\t\t\t\t\t\ttypeof returned === \"function\") &&\n\t\t\t\t\t\t\t\t\t\t\treturned.then;\n\n\t\t\t\t\t\t\t\t\t\t// Handle a returned thenable\n\t\t\t\t\t\t\t\t\t\tif (isFunction(then)) {\n\n\t\t\t\t\t\t\t\t\t\t\t// Special processors (notify) just wait for resolution\n\t\t\t\t\t\t\t\t\t\t\tif (special) {\n\t\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\t\tresolve(maxDepth, deferred, Identity, special),\n\t\t\t\t\t\t\t\t\t\t\t\t\tresolve(maxDepth, deferred, Thrower, special)\n\t\t\t\t\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t\t\t\t\t// Normal processors (resolve) also hook into progress\n\t\t\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t\t\t// ...and disregard older resolution values\n\t\t\t\t\t\t\t\t\t\t\t\tmaxDepth++;\n\n\t\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\t\tresolve(maxDepth, deferred, Identity, special),\n\t\t\t\t\t\t\t\t\t\t\t\t\tresolve(maxDepth, deferred, Thrower, special),\n\t\t\t\t\t\t\t\t\t\t\t\t\tresolve(maxDepth, deferred, Identity,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tdeferred.notifyWith)\n\t\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t// Handle all other returned values\n\t\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\t\tif (handler !== Identity) {\n\t\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\t\targs = [returned];\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t// Process the value(s)\n\t\t\t\t\t\t\t\t\t\t\t// Default process is resolve\n\t\t\t\t\t\t\t\t\t\t\t(special || deferred.resolveWith)(that, args);\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\n\t\t\t\t\t\t\t\t\t// Only normal processors (resolve) catch and reject exceptions\n\t\t\t\t\t\t\t\t\tprocess = special ?\n\t\t\t\t\t\t\t\t\t\tmightThrow :\n\t\t\t\t\t\t\t\t\t\tfunction () {\n\t\t\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\t\t\tmightThrow();\n\t\t\t\t\t\t\t\t\t\t\t} catch (e) {\n\n\t\t\t\t\t\t\t\t\t\t\t\tif (jQuery.Deferred.exceptionHook) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tjQuery.Deferred.exceptionHook(e,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tprocess.error);\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.4.1\n\t\t\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-61\n\t\t\t\t\t\t\t\t\t\t\t\t// Ignore post-resolution exceptions\n\t\t\t\t\t\t\t\t\t\t\t\tif (depth + 1 >= maxDepth) {\n\n\t\t\t\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\t\t\t\tif (handler !== Thrower) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\targs = [e];\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\t\tdeferred.rejectWith(that, args);\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.1\n\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-57\n\t\t\t\t\t\t\t\t// Re-resolve promises immediately to dodge false rejection from\n\t\t\t\t\t\t\t\t// subsequent errors\n\t\t\t\t\t\t\t\tif (depth) {\n\t\t\t\t\t\t\t\t\tprocess();\n\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t// Call an optional hook to record the error, in case of exception\n\t\t\t\t\t\t\t\t\t// since it's otherwise lost when execution goes async\n\t\t\t\t\t\t\t\t\tif (jQuery.Deferred.getErrorHook) {\n\t\t\t\t\t\t\t\t\t\tprocess.error = jQuery.Deferred.getErrorHook();\n\n\t\t\t\t\t\t\t\t\t\t// The deprecated alias of the above. While the name suggests\n\t\t\t\t\t\t\t\t\t\t// returning the stack, not an error instance, jQuery just passes\n\t\t\t\t\t\t\t\t\t\t// it directly to `console.warn` so both will work; an instance\n\t\t\t\t\t\t\t\t\t\t// just better cooperates with source maps.\n\t\t\t\t\t\t\t\t\t} else if (jQuery.Deferred.getStackHook) {\n\t\t\t\t\t\t\t\t\t\tprocess.error = jQuery.Deferred.getStackHook();\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\twindow.setTimeout(process);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn jQuery.Deferred(function (newDefer) {\n\n\t\t\t\t\t\t\t// progress_handlers.add( ... )\n\t\t\t\t\t\t\ttuples[0][3].add(\n\t\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\t\tisFunction(onProgress) ?\n\t\t\t\t\t\t\t\t\t\tonProgress :\n\t\t\t\t\t\t\t\t\t\tIdentity,\n\t\t\t\t\t\t\t\t\tnewDefer.notifyWith\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t// fulfilled_handlers.add( ... )\n\t\t\t\t\t\t\ttuples[1][3].add(\n\t\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\t\tisFunction(onFulfilled) ?\n\t\t\t\t\t\t\t\t\t\tonFulfilled :\n\t\t\t\t\t\t\t\t\t\tIdentity\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t// rejected_handlers.add( ... )\n\t\t\t\t\t\t\ttuples[2][3].add(\n\t\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\t\tisFunction(onRejected) ?\n\t\t\t\t\t\t\t\t\t\tonRejected :\n\t\t\t\t\t\t\t\t\t\tThrower\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}).promise();\n\t\t\t\t\t},\n\n\t\t\t\t\t// Get a promise for this deferred\n\t\t\t\t\t// If obj is provided, the promise aspect is added to the object\n\t\t\t\t\tpromise: function (obj) {\n\t\t\t\t\t\treturn obj != null ? jQuery.extend(obj, promise) : promise;\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tdeferred = {};\n\n\t\t\t// Add list-specific methods\n\t\t\tjQuery.each(tuples, function (i, tuple) {\n\t\t\t\tvar list = tuple[2],\n\t\t\t\t\tstateString = tuple[5];\n\n\t\t\t\t// promise.progress = list.add\n\t\t\t\t// promise.done = list.add\n\t\t\t\t// promise.fail = list.add\n\t\t\t\tpromise[tuple[1]] = list.add;\n\n\t\t\t\t// Handle state\n\t\t\t\tif (stateString) {\n\t\t\t\t\tlist.add(\n\t\t\t\t\t\tfunction () {\n\n\t\t\t\t\t\t\t// state = \"resolved\" (i.e., fulfilled)\n\t\t\t\t\t\t\t// state = \"rejected\"\n\t\t\t\t\t\t\tstate = stateString;\n\t\t\t\t\t\t},\n\n\t\t\t\t\t\t// rejected_callbacks.disable\n\t\t\t\t\t\t// fulfilled_callbacks.disable\n\t\t\t\t\t\ttuples[3 - i][2].disable,\n\n\t\t\t\t\t\t// rejected_handlers.disable\n\t\t\t\t\t\t// fulfilled_handlers.disable\n\t\t\t\t\t\ttuples[3 - i][3].disable,\n\n\t\t\t\t\t\t// progress_callbacks.lock\n\t\t\t\t\t\ttuples[0][2].lock,\n\n\t\t\t\t\t\t// progress_handlers.lock\n\t\t\t\t\t\ttuples[0][3].lock\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\t// progress_handlers.fire\n\t\t\t\t// fulfilled_handlers.fire\n\t\t\t\t// rejected_handlers.fire\n\t\t\t\tlist.add(tuple[3].fire);\n\n\t\t\t\t// deferred.notify = function() { deferred.notifyWith(...) }\n\t\t\t\t// deferred.resolve = function() { deferred.resolveWith(...) }\n\t\t\t\t// deferred.reject = function() { deferred.rejectWith(...) }\n\t\t\t\tdeferred[tuple[0]] = function () {\n\t\t\t\t\tdeferred[tuple[0] + \"With\"](this === deferred ? undefined : this, arguments);\n\t\t\t\t\treturn this;\n\t\t\t\t};\n\n\t\t\t\t// deferred.notifyWith = list.fireWith\n\t\t\t\t// deferred.resolveWith = list.fireWith\n\t\t\t\t// deferred.rejectWith = list.fireWith\n\t\t\t\tdeferred[tuple[0] + \"With\"] = list.fireWith;\n\t\t\t});\n\n\t\t\t// Make the deferred a promise\n\t\t\tpromise.promise(deferred);\n\n\t\t\t// Call given func if any\n\t\t\tif (func) {\n\t\t\t\tfunc.call(deferred, deferred);\n\t\t\t}\n\n\t\t\t// All done!\n\t\t\treturn deferred;\n\t\t},\n\n\t\t// Deferred helper\n\t\twhen: function (singleValue) {\n\t\t\tvar\n\n\t\t\t\t// count of uncompleted subordinates\n\t\t\t\tremaining = arguments.length,\n\n\t\t\t\t// count of unprocessed arguments\n\t\t\t\ti = remaining,\n\n\t\t\t\t// subordinate fulfillment data\n\t\t\t\tresolveContexts = Array(i),\n\t\t\t\tresolveValues = slice.call(arguments),\n\n\t\t\t\t// the primary Deferred\n\t\t\t\tprimary = jQuery.Deferred(),\n\n\t\t\t\t// subordinate callback factory\n\t\t\t\tupdateFunc = function (i) {\n\t\t\t\t\treturn function (value) {\n\t\t\t\t\t\tresolveContexts[i] = this;\n\t\t\t\t\t\tresolveValues[i] = arguments.length > 1 ? slice.call(arguments) : value;\n\t\t\t\t\t\tif (!(--remaining)) {\n\t\t\t\t\t\t\tprimary.resolveWith(resolveContexts, resolveValues);\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t};\n\n\t\t\t// Single- and empty arguments are adopted like Promise.resolve\n\t\t\tif (remaining <= 1) {\n\t\t\t\tadoptValue(singleValue, primary.done(updateFunc(i)).resolve, primary.reject,\n\t\t\t\t\t!remaining);\n\n\t\t\t\t// Use .then() to unwrap secondary thenables (cf. gh-3000)\n\t\t\t\tif (primary.state() === \"pending\" ||\n\t\t\t\t\tisFunction(resolveValues[i] && resolveValues[i].then)) {\n\n\t\t\t\t\treturn primary.then();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Multiple arguments are aggregated like Promise.all array elements\n\t\t\twhile (i--) {\n\t\t\t\tadoptValue(resolveValues[i], updateFunc(i), primary.reject);\n\t\t\t}\n\n\t\t\treturn primary.promise();\n\t\t}\n\t});\n\n\n\t// These usually indicate a programmer mistake during development,\n\t// warn about them ASAP rather than swallowing them by default.\n\tvar rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;\n\n\t// If `jQuery.Deferred.getErrorHook` is defined, `asyncError` is an error\n\t// captured before the async barrier to get the original error cause\n\t// which may otherwise be hidden.\n\tjQuery.Deferred.exceptionHook = function (error, asyncError) {\n\n\t\t// Support: IE 8 - 9 only\n\t\t// Console exists when dev tools are open, which can happen at any time\n\t\tif (window.console && window.console.warn && error && rerrorNames.test(error.name)) {\n\t\t\twindow.console.warn(\"jQuery.Deferred exception: \" + error.message,\n\t\t\t\terror.stack, asyncError);\n\t\t}\n\t};\n\n\n\n\n\tjQuery.readyException = function (error) {\n\t\twindow.setTimeout(function () {\n\t\t\tthrow error;\n\t\t});\n\t};\n\n\n\n\n\t// The deferred used on DOM ready\n\tvar readyList = jQuery.Deferred();\n\n\tjQuery.fn.ready = function (fn) {\n\n\t\treadyList\n\t\t\t.then(fn)\n\n\t\t\t// Wrap jQuery.readyException in a function so that the lookup\n\t\t\t// happens at the time of error handling instead of callback\n\t\t\t// registration.\n\t\t\t.catch(function (error) {\n\t\t\t\tjQuery.readyException(error);\n\t\t\t});\n\n\t\treturn this;\n\t};\n\n\tjQuery.extend({\n\n\t\t// Is the DOM ready to be used? Set to true once it occurs.\n\t\tisReady: false,\n\n\t\t// A counter to track how many items to wait for before\n\t\t// the ready event fires. See trac-6781\n\t\treadyWait: 1,\n\n\t\t// Handle when the DOM is ready\n\t\tready: function (wait) {\n\n\t\t\t// Abort if there are pending holds or we're already ready\n\t\t\tif (wait === true ? --jQuery.readyWait : jQuery.isReady) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Remember that the DOM is ready\n\t\t\tjQuery.isReady = true;\n\n\t\t\t// If a normal DOM Ready event fired, decrement, and wait if need be\n\t\t\tif (wait !== true && --jQuery.readyWait > 0) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If there are functions bound, to execute\n\t\t\treadyList.resolveWith(document, [jQuery]);\n\t\t}\n\t});\n\n\tjQuery.ready.then = readyList.then;\n\n\t// The ready event handler and self cleanup method\n\tfunction completed() {\n\t\tdocument.removeEventListener(\"DOMContentLoaded\", completed);\n\t\twindow.removeEventListener(\"load\", completed);\n\t\tjQuery.ready();\n\t}\n\n\t// Catch cases where $(document).ready() is called\n\t// after the browser event has already occurred.\n\t// Support: IE <=9 - 10 only\n\t// Older IE sometimes signals \"interactive\" too soon\n\tif (document.readyState === \"complete\" ||\n\t\t(document.readyState !== \"loading\" && !document.documentElement.doScroll)) {\n\n\t\t// Handle it asynchronously to allow scripts the opportunity to delay ready\n\t\twindow.setTimeout(jQuery.ready);\n\n\t} else {\n\n\t\t// Use the handy event callback\n\t\tdocument.addEventListener(\"DOMContentLoaded\", completed);\n\n\t\t// A fallback to window.onload, that will always work\n\t\twindow.addEventListener(\"load\", completed);\n\t}\n\n\n\n\n\t// Multifunctional method to get and set values of a collection\n\t// The value/s can optionally be executed if it's a function\n\tvar access = function (elems, fn, key, value, chainable, emptyGet, raw) {\n\t\tvar i = 0,\n\t\t\tlen = elems.length,\n\t\t\tbulk = key == null;\n\n\t\t// Sets many values\n\t\tif (toType(key) === \"object\") {\n\t\t\tchainable = true;\n\t\t\tfor (i in key) {\n\t\t\t\taccess(elems, fn, i, key[i], true, emptyGet, raw);\n\t\t\t}\n\n\t\t\t// Sets one value\n\t\t} else if (value !== undefined) {\n\t\t\tchainable = true;\n\n\t\t\tif (!isFunction(value)) {\n\t\t\t\traw = true;\n\t\t\t}\n\n\t\t\tif (bulk) {\n\n\t\t\t\t// Bulk operations run against the entire set\n\t\t\t\tif (raw) {\n\t\t\t\t\tfn.call(elems, value);\n\t\t\t\t\tfn = null;\n\n\t\t\t\t\t// ...except when executing function values\n\t\t\t\t} else {\n\t\t\t\t\tbulk = fn;\n\t\t\t\t\tfn = function (elem, _key, value) {\n\t\t\t\t\t\treturn bulk.call(jQuery(elem), value);\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (fn) {\n\t\t\t\tfor (; i < len; i++) {\n\t\t\t\t\tfn(\n\t\t\t\t\t\telems[i], key, raw ?\n\t\t\t\t\t\tvalue :\n\t\t\t\t\t\tvalue.call(elems[i], i, fn(elems[i], key))\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (chainable) {\n\t\t\treturn elems;\n\t\t}\n\n\t\t// Gets\n\t\tif (bulk) {\n\t\t\treturn fn.call(elems);\n\t\t}\n\n\t\treturn len ? fn(elems[0], key) : emptyGet;\n\t};\n\n\n\t// Matches dashed string for camelizing\n\tvar rmsPrefix = /^-ms-/,\n\t\trdashAlpha = /-([a-z])/g;\n\n\t// Used by camelCase as callback to replace()\n\tfunction fcamelCase(_all, letter) {\n\t\treturn letter.toUpperCase();\n\t}\n\n\t// Convert dashed to camelCase; used by the css and data modules\n\t// Support: IE <=9 - 11, Edge 12 - 15\n\t// Microsoft forgot to hump their vendor prefix (trac-9572)\n\tfunction camelCase(string) {\n\t\treturn string.replace(rmsPrefix, \"ms-\").replace(rdashAlpha, fcamelCase);\n\t}\n\tvar acceptData = function (owner) {\n\n\t\t// Accepts only:\n\t\t//  - Node\n\t\t//    - Node.ELEMENT_NODE\n\t\t//    - Node.DOCUMENT_NODE\n\t\t//  - Object\n\t\t//    - Any\n\t\treturn owner.nodeType === 1 || owner.nodeType === 9 || !(+owner.nodeType);\n\t};\n\n\n\n\n\tfunction Data() {\n\t\tthis.expando = jQuery.expando + Data.uid++;\n\t}\n\n\tData.uid = 1;\n\n\tData.prototype = {\n\n\t\tcache: function (owner) {\n\n\t\t\t// Check if the owner object already has a cache\n\t\t\tvar value = owner[this.expando];\n\n\t\t\t// If not, create one\n\t\t\tif (!value) {\n\t\t\t\tvalue = {};\n\n\t\t\t\t// We can accept data for non-element nodes in modern browsers,\n\t\t\t\t// but we should not, see trac-8335.\n\t\t\t\t// Always return an empty object.\n\t\t\t\tif (acceptData(owner)) {\n\n\t\t\t\t\t// If it is a node unlikely to be stringify-ed or looped over\n\t\t\t\t\t// use plain assignment\n\t\t\t\t\tif (owner.nodeType) {\n\t\t\t\t\t\towner[this.expando] = value;\n\n\t\t\t\t\t\t// Otherwise secure it in a non-enumerable property\n\t\t\t\t\t\t// configurable must be true to allow the property to be\n\t\t\t\t\t\t// deleted when data is removed\n\t\t\t\t\t} else {\n\t\t\t\t\t\tObject.defineProperty(owner, this.expando, {\n\t\t\t\t\t\t\tvalue: value,\n\t\t\t\t\t\t\tconfigurable: true\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn value;\n\t\t},\n\t\tset: function (owner, data, value) {\n\t\t\tvar prop,\n\t\t\t\tcache = this.cache(owner);\n\n\t\t\t// Handle: [ owner, key, value ] args\n\t\t\t// Always use camelCase key (gh-2257)\n\t\t\tif (typeof data === \"string\") {\n\t\t\t\tcache[camelCase(data)] = value;\n\n\t\t\t\t// Handle: [ owner, { properties } ] args\n\t\t\t} else {\n\n\t\t\t\t// Copy the properties one-by-one to the cache object\n\t\t\t\tfor (prop in data) {\n\t\t\t\t\tcache[camelCase(prop)] = data[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn cache;\n\t\t},\n\t\tget: function (owner, key) {\n\t\t\treturn key === undefined ?\n\t\t\t\tthis.cache(owner) :\n\n\t\t\t\t// Always use camelCase key (gh-2257)\n\t\t\t\towner[this.expando] && owner[this.expando][camelCase(key)];\n\t\t},\n\t\taccess: function (owner, key, value) {\n\n\t\t\t// In cases where either:\n\t\t\t//\n\t\t\t//   1. No key was specified\n\t\t\t//   2. A string key was specified, but no value provided\n\t\t\t//\n\t\t\t// Take the \"read\" path and allow the get method to determine\n\t\t\t// which value to return, respectively either:\n\t\t\t//\n\t\t\t//   1. The entire cache object\n\t\t\t//   2. The data stored at the key\n\t\t\t//\n\t\t\tif (key === undefined ||\n\t\t\t\t((key && typeof key === \"string\") && value === undefined)) {\n\n\t\t\t\treturn this.get(owner, key);\n\t\t\t}\n\n\t\t\t// When the key is not a string, or both a key and value\n\t\t\t// are specified, set or extend (existing objects) with either:\n\t\t\t//\n\t\t\t//   1. An object of properties\n\t\t\t//   2. A key and value\n\t\t\t//\n\t\t\tthis.set(owner, key, value);\n\n\t\t\t// Since the \"set\" path can have two possible entry points\n\t\t\t// return the expected data based on which path was taken[*]\n\t\t\treturn value !== undefined ? value : key;\n\t\t},\n\t\tremove: function (owner, key) {\n\t\t\tvar i,\n\t\t\t\tcache = owner[this.expando];\n\n\t\t\tif (cache === undefined) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (key !== undefined) {\n\n\t\t\t\t// Support array or space separated string of keys\n\t\t\t\tif (Array.isArray(key)) {\n\n\t\t\t\t\t// If key is an array of keys...\n\t\t\t\t\t// We always set camelCase keys, so remove that.\n\t\t\t\t\tkey = key.map(camelCase);\n\t\t\t\t} else {\n\t\t\t\t\tkey = camelCase(key);\n\n\t\t\t\t\t// If a key with the spaces exists, use it.\n\t\t\t\t\t// Otherwise, create an array by matching non-whitespace\n\t\t\t\t\tkey = key in cache ?\n\t\t\t\t\t\t[key] :\n\t\t\t\t\t\t(key.match(rnothtmlwhite) || []);\n\t\t\t\t}\n\n\t\t\t\ti = key.length;\n\n\t\t\t\twhile (i--) {\n\t\t\t\t\tdelete cache[key[i]];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove the expando if there's no more data\n\t\t\tif (key === undefined || jQuery.isEmptyObject(cache)) {\n\n\t\t\t\t// Support: Chrome <=35 - 45\n\t\t\t\t// Webkit & Blink performance suffers when deleting properties\n\t\t\t\t// from DOM nodes, so set to undefined instead\n\t\t\t\t// https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted)\n\t\t\t\tif (owner.nodeType) {\n\t\t\t\t\towner[this.expando] = undefined;\n\t\t\t\t} else {\n\t\t\t\t\tdelete owner[this.expando];\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\thasData: function (owner) {\n\t\t\tvar cache = owner[this.expando];\n\t\t\treturn cache !== undefined && !jQuery.isEmptyObject(cache);\n\t\t}\n\t};\n\tvar dataPriv = new Data();\n\n\tvar dataUser = new Data();\n\n\n\n\t//\tImplementation Summary\n\t//\n\t//\t1. Enforce API surface and semantic compatibility with 1.9.x branch\n\t//\t2. Improve the module's maintainability by reducing the storage\n\t//\t\tpaths to a single mechanism.\n\t//\t3. Use the same single mechanism to support \"private\" and \"user\" data.\n\t//\t4. _Never_ expose \"private\" data to user code (TODO: Drop _data, _removeData)\n\t//\t5. Avoid exposing implementation details on user objects (eg. expando properties)\n\t//\t6. Provide a clear path for implementation upgrade to WeakMap in 2014\n\n\tvar rbrace = /^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,\n\t\trmultiDash = /[A-Z]/g;\n\n\tfunction getData(data) {\n\t\tif (data === \"true\") {\n\t\t\treturn true;\n\t\t}\n\n\t\tif (data === \"false\") {\n\t\t\treturn false;\n\t\t}\n\n\t\tif (data === \"null\") {\n\t\t\treturn null;\n\t\t}\n\n\t\t// Only convert to a number if it doesn't change the string\n\t\tif (data === +data + \"\") {\n\t\t\treturn +data;\n\t\t}\n\n\t\tif (rbrace.test(data)) {\n\t\t\treturn JSON.parse(data);\n\t\t}\n\n\t\treturn data;\n\t}\n\n\tfunction dataAttr(elem, key, data) {\n\t\tvar name;\n\n\t\t// If nothing was found internally, try to fetch any\n\t\t// data from the HTML5 data-* attribute\n\t\tif (data === undefined && elem.nodeType === 1) {\n\t\t\tname = \"data-\" + key.replace(rmultiDash, \"-$&\").toLowerCase();\n\t\t\tdata = elem.getAttribute(name);\n\n\t\t\tif (typeof data === \"string\") {\n\t\t\t\ttry {\n\t\t\t\t\tdata = getData(data);\n\t\t\t\t} catch (e) { }\n\n\t\t\t\t// Make sure we set the data so it isn't changed later\n\t\t\t\tdataUser.set(elem, key, data);\n\t\t\t} else {\n\t\t\t\tdata = undefined;\n\t\t\t}\n\t\t}\n\t\treturn data;\n\t}\n\n\tjQuery.extend({\n\t\thasData: function (elem) {\n\t\t\treturn dataUser.hasData(elem) || dataPriv.hasData(elem);\n\t\t},\n\n\t\tdata: function (elem, name, data) {\n\t\t\treturn dataUser.access(elem, name, data);\n\t\t},\n\n\t\tremoveData: function (elem, name) {\n\t\t\tdataUser.remove(elem, name);\n\t\t},\n\n\t\t// TODO: Now that all calls to _data and _removeData have been replaced\n\t\t// with direct calls to dataPriv methods, these can be deprecated.\n\t\t_data: function (elem, name, data) {\n\t\t\treturn dataPriv.access(elem, name, data);\n\t\t},\n\n\t\t_removeData: function (elem, name) {\n\t\t\tdataPriv.remove(elem, name);\n\t\t}\n\t});\n\n\tjQuery.fn.extend({\n\t\tdata: function (key, value) {\n\t\t\tvar i, name, data,\n\t\t\t\telem = this[0],\n\t\t\t\tattrs = elem && elem.attributes;\n\n\t\t\t// Gets all values\n\t\t\tif (key === undefined) {\n\t\t\t\tif (this.length) {\n\t\t\t\t\tdata = dataUser.get(elem);\n\n\t\t\t\t\tif (elem.nodeType === 1 && !dataPriv.get(elem, \"hasDataAttrs\")) {\n\t\t\t\t\t\ti = attrs.length;\n\t\t\t\t\t\twhile (i--) {\n\n\t\t\t\t\t\t\t// Support: IE 11 only\n\t\t\t\t\t\t\t// The attrs elements can be null (trac-14894)\n\t\t\t\t\t\t\tif (attrs[i]) {\n\t\t\t\t\t\t\t\tname = attrs[i].name;\n\t\t\t\t\t\t\t\tif (name.indexOf(\"data-\") === 0) {\n\t\t\t\t\t\t\t\t\tname = camelCase(name.slice(5));\n\t\t\t\t\t\t\t\t\tdataAttr(elem, name, data[name]);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdataPriv.set(elem, \"hasDataAttrs\", true);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn data;\n\t\t\t}\n\n\t\t\t// Sets multiple values\n\t\t\tif (typeof key === \"object\") {\n\t\t\t\treturn this.each(function () {\n\t\t\t\t\tdataUser.set(this, key);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn access(this, function (value) {\n\t\t\t\tvar data;\n\n\t\t\t\t// The calling jQuery object (element matches) is not empty\n\t\t\t\t// (and therefore has an element appears at this[ 0 ]) and the\n\t\t\t\t// `value` parameter was not undefined. An empty jQuery object\n\t\t\t\t// will result in `undefined` for elem = this[ 0 ] which will\n\t\t\t\t// throw an exception if an attempt to read a data cache is made.\n\t\t\t\tif (elem && value === undefined) {\n\n\t\t\t\t\t// Attempt to get data from the cache\n\t\t\t\t\t// The key will always be camelCased in Data\n\t\t\t\t\tdata = dataUser.get(elem, key);\n\t\t\t\t\tif (data !== undefined) {\n\t\t\t\t\t\treturn data;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Attempt to \"discover\" the data in\n\t\t\t\t\t// HTML5 custom data-* attrs\n\t\t\t\t\tdata = dataAttr(elem, key);\n\t\t\t\t\tif (data !== undefined) {\n\t\t\t\t\t\treturn data;\n\t\t\t\t\t}\n\n\t\t\t\t\t// We tried really hard, but the data doesn't exist.\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Set the data...\n\t\t\t\tthis.each(function () {\n\n\t\t\t\t\t// We always store the camelCased key\n\t\t\t\t\tdataUser.set(this, key, value);\n\t\t\t\t});\n\t\t\t}, null, value, arguments.length > 1, null, true);\n\t\t},\n\n\t\tremoveData: function (key) {\n\t\t\treturn this.each(function () {\n\t\t\t\tdataUser.remove(this, key);\n\t\t\t});\n\t\t}\n\t});\n\n\n\tjQuery.extend({\n\t\tqueue: function (elem, type, data) {\n\t\t\tvar queue;\n\n\t\t\tif (elem) {\n\t\t\t\ttype = (type || \"fx\") + \"queue\";\n\t\t\t\tqueue = dataPriv.get(elem, type);\n\n\t\t\t\t// Speed up dequeue by getting out quickly if this is just a lookup\n\t\t\t\tif (data) {\n\t\t\t\t\tif (!queue || Array.isArray(data)) {\n\t\t\t\t\t\tqueue = dataPriv.access(elem, type, jQuery.makeArray(data));\n\t\t\t\t\t} else {\n\t\t\t\t\t\tqueue.push(data);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn queue || [];\n\t\t\t}\n\t\t},\n\n\t\tdequeue: function (elem, type) {\n\t\t\ttype = type || \"fx\";\n\n\t\t\tvar queue = jQuery.queue(elem, type),\n\t\t\t\tstartLength = queue.length,\n\t\t\t\tfn = queue.shift(),\n\t\t\t\thooks = jQuery._queueHooks(elem, type),\n\t\t\t\tnext = function () {\n\t\t\t\t\tjQuery.dequeue(elem, type);\n\t\t\t\t};\n\n\t\t\t// If the fx queue is dequeued, always remove the progress sentinel\n\t\t\tif (fn === \"inprogress\") {\n\t\t\t\tfn = queue.shift();\n\t\t\t\tstartLength--;\n\t\t\t}\n\n\t\t\tif (fn) {\n\n\t\t\t\t// Add a progress sentinel to prevent the fx queue from being\n\t\t\t\t// automatically dequeued\n\t\t\t\tif (type === \"fx\") {\n\t\t\t\t\tqueue.unshift(\"inprogress\");\n\t\t\t\t}\n\n\t\t\t\t// Clear up the last queue stop function\n\t\t\t\tdelete hooks.stop;\n\t\t\t\tfn.call(elem, next, hooks);\n\t\t\t}\n\n\t\t\tif (!startLength && hooks) {\n\t\t\t\thooks.empty.fire();\n\t\t\t}\n\t\t},\n\n\t\t// Not public - generate a queueHooks object, or return the current one\n\t\t_queueHooks: function (elem, type) {\n\t\t\tvar key = type + \"queueHooks\";\n\t\t\treturn dataPriv.get(elem, key) || dataPriv.access(elem, key, {\n\t\t\t\tempty: jQuery.Callbacks(\"once memory\").add(function () {\n\t\t\t\t\tdataPriv.remove(elem, [type + \"queue\", key]);\n\t\t\t\t})\n\t\t\t});\n\t\t}\n\t});\n\n\tjQuery.fn.extend({\n\t\tqueue: function (type, data) {\n\t\t\tvar setter = 2;\n\n\t\t\tif (typeof type !== \"string\") {\n\t\t\t\tdata = type;\n\t\t\t\ttype = \"fx\";\n\t\t\t\tsetter--;\n\t\t\t}\n\n\t\t\tif (arguments.length < setter) {\n\t\t\t\treturn jQuery.queue(this[0], type);\n\t\t\t}\n\n\t\t\treturn data === undefined ?\n\t\t\t\tthis :\n\t\t\t\tthis.each(function () {\n\t\t\t\t\tvar queue = jQuery.queue(this, type, data);\n\n\t\t\t\t\t// Ensure a hooks for this queue\n\t\t\t\t\tjQuery._queueHooks(this, type);\n\n\t\t\t\t\tif (type === \"fx\" && queue[0] !== \"inprogress\") {\n\t\t\t\t\t\tjQuery.dequeue(this, type);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t},\n\t\tdequeue: function (type) {\n\t\t\treturn this.each(function () {\n\t\t\t\tjQuery.dequeue(this, type);\n\t\t\t});\n\t\t},\n\t\tclearQueue: function (type) {\n\t\t\treturn this.queue(type || \"fx\", []);\n\t\t},\n\n\t\t// Get a promise resolved when queues of a certain type\n\t\t// are emptied (fx is the type by default)\n\t\tpromise: function (type, obj) {\n\t\t\tvar tmp,\n\t\t\t\tcount = 1,\n\t\t\t\tdefer = jQuery.Deferred(),\n\t\t\t\telements = this,\n\t\t\t\ti = this.length,\n\t\t\t\tresolve = function () {\n\t\t\t\t\tif (!(--count)) {\n\t\t\t\t\t\tdefer.resolveWith(elements, [elements]);\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\tif (typeof type !== \"string\") {\n\t\t\t\tobj = type;\n\t\t\t\ttype = undefined;\n\t\t\t}\n\t\t\ttype = type || \"fx\";\n\n\t\t\twhile (i--) {\n\t\t\t\ttmp = dataPriv.get(elements[i], type + \"queueHooks\");\n\t\t\t\tif (tmp && tmp.empty) {\n\t\t\t\t\tcount++;\n\t\t\t\t\ttmp.empty.add(resolve);\n\t\t\t\t}\n\t\t\t}\n\t\t\tresolve();\n\t\t\treturn defer.promise(obj);\n\t\t}\n\t});\n\tvar pnum = (/[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/).source;\n\n\tvar rcssNum = new RegExp(\"^(?:([+-])=|)(\" + pnum + \")([a-z%]*)$\", \"i\");\n\n\n\tvar cssExpand = [\"Top\", \"Right\", \"Bottom\", \"Left\"];\n\n\tvar documentElement = document.documentElement;\n\n\n\n\tvar isAttached = function (elem) {\n\t\treturn jQuery.contains(elem.ownerDocument, elem);\n\t},\n\t\tcomposed = { composed: true };\n\n\t// Support: IE 9 - 11+, Edge 12 - 18+, iOS 10.0 - 10.2 only\n\t// Check attachment across shadow DOM boundaries when possible (gh-3504)\n\t// Support: iOS 10.0-10.2 only\n\t// Early iOS 10 versions support `attachShadow` but not `getRootNode`,\n\t// leading to errors. We need to check for `getRootNode`.\n\tif (documentElement.getRootNode) {\n\t\tisAttached = function (elem) {\n\t\t\treturn jQuery.contains(elem.ownerDocument, elem) ||\n\t\t\t\telem.getRootNode(composed) === elem.ownerDocument;\n\t\t};\n\t}\n\tvar isHiddenWithinTree = function (elem, el) {\n\n\t\t// isHiddenWithinTree might be called from jQuery#filter function;\n\t\t// in that case, element will be second argument\n\t\telem = el || elem;\n\n\t\t// Inline style trumps all\n\t\treturn elem.style.display === \"none\" ||\n\t\t\telem.style.display === \"\" &&\n\n\t\t\t// Otherwise, check computed style\n\t\t\t// Support: Firefox <=43 - 45\n\t\t\t// Disconnected elements can have computed display: none, so first confirm that elem is\n\t\t\t// in the document.\n\t\t\tisAttached(elem) &&\n\n\t\t\tjQuery.css(elem, \"display\") === \"none\";\n\t};\n\n\n\n\tfunction adjustCSS(elem, prop, valueParts, tween) {\n\t\tvar adjusted, scale,\n\t\t\tmaxIterations = 20,\n\t\t\tcurrentValue = tween ?\n\t\t\t\tfunction () {\n\t\t\t\t\treturn tween.cur();\n\t\t\t\t} :\n\t\t\t\tfunction () {\n\t\t\t\t\treturn jQuery.css(elem, prop, \"\");\n\t\t\t\t},\n\t\t\tinitial = currentValue(),\n\t\t\tunit = valueParts && valueParts[3] || (jQuery.cssNumber[prop] ? \"\" : \"px\"),\n\n\t\t\t// Starting value computation is required for potential unit mismatches\n\t\t\tinitialInUnit = elem.nodeType &&\n\t\t\t\t(jQuery.cssNumber[prop] || unit !== \"px\" && +initial) &&\n\t\t\t\trcssNum.exec(jQuery.css(elem, prop));\n\n\t\tif (initialInUnit && initialInUnit[3] !== unit) {\n\n\t\t\t// Support: Firefox <=54\n\t\t\t// Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144)\n\t\t\tinitial = initial / 2;\n\n\t\t\t// Trust units reported by jQuery.css\n\t\t\tunit = unit || initialInUnit[3];\n\n\t\t\t// Iteratively approximate from a nonzero starting point\n\t\t\tinitialInUnit = +initial || 1;\n\n\t\t\twhile (maxIterations--) {\n\n\t\t\t\t// Evaluate and update our best guess (doubling guesses that zero out).\n\t\t\t\t// Finish if the scale equals or crosses 1 (making the old*new product non-positive).\n\t\t\t\tjQuery.style(elem, prop, initialInUnit + unit);\n\t\t\t\tif ((1 - scale) * (1 - (scale = currentValue() / initial || 0.5)) <= 0) {\n\t\t\t\t\tmaxIterations = 0;\n\t\t\t\t}\n\t\t\t\tinitialInUnit = initialInUnit / scale;\n\n\t\t\t}\n\n\t\t\tinitialInUnit = initialInUnit * 2;\n\t\t\tjQuery.style(elem, prop, initialInUnit + unit);\n\n\t\t\t// Make sure we update the tween properties later on\n\t\t\tvalueParts = valueParts || [];\n\t\t}\n\n\t\tif (valueParts) {\n\t\t\tinitialInUnit = +initialInUnit || +initial || 0;\n\n\t\t\t// Apply relative offset (+=/-=) if specified\n\t\t\tadjusted = valueParts[1] ?\n\t\t\t\tinitialInUnit + (valueParts[1] + 1) * valueParts[2] :\n\t\t\t\t+valueParts[2];\n\t\t\tif (tween) {\n\t\t\t\ttween.unit = unit;\n\t\t\t\ttween.start = initialInUnit;\n\t\t\t\ttween.end = adjusted;\n\t\t\t}\n\t\t}\n\t\treturn adjusted;\n\t}\n\n\n\tvar defaultDisplayMap = {};\n\n\tfunction getDefaultDisplay(elem) {\n\t\tvar temp,\n\t\t\tdoc = elem.ownerDocument,\n\t\t\tnodeName = elem.nodeName,\n\t\t\tdisplay = defaultDisplayMap[nodeName];\n\n\t\tif (display) {\n\t\t\treturn display;\n\t\t}\n\n\t\ttemp = doc.body.appendChild(doc.createElement(nodeName));\n\t\tdisplay = jQuery.css(temp, \"display\");\n\n\t\ttemp.parentNode.removeChild(temp);\n\n\t\tif (display === \"none\") {\n\t\t\tdisplay = \"block\";\n\t\t}\n\t\tdefaultDisplayMap[nodeName] = display;\n\n\t\treturn display;\n\t}\n\n\tfunction showHide(elements, show) {\n\t\tvar display, elem,\n\t\t\tvalues = [],\n\t\t\tindex = 0,\n\t\t\tlength = elements.length;\n\n\t\t// Determine new display value for elements that need to change\n\t\tfor (; index < length; index++) {\n\t\t\telem = elements[index];\n\t\t\tif (!elem.style) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tdisplay = elem.style.display;\n\t\t\tif (show) {\n\n\t\t\t\t// Since we force visibility upon cascade-hidden elements, an immediate (and slow)\n\t\t\t\t// check is required in this first loop unless we have a nonempty display value (either\n\t\t\t\t// inline or about-to-be-restored)\n\t\t\t\tif (display === \"none\") {\n\t\t\t\t\tvalues[index] = dataPriv.get(elem, \"display\") || null;\n\t\t\t\t\tif (!values[index]) {\n\t\t\t\t\t\telem.style.display = \"\";\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (elem.style.display === \"\" && isHiddenWithinTree(elem)) {\n\t\t\t\t\tvalues[index] = getDefaultDisplay(elem);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (display !== \"none\") {\n\t\t\t\t\tvalues[index] = \"none\";\n\n\t\t\t\t\t// Remember what we're overwriting\n\t\t\t\t\tdataPriv.set(elem, \"display\", display);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Set the display of the elements in a second loop to avoid constant reflow\n\t\tfor (index = 0; index < length; index++) {\n\t\t\tif (values[index] != null) {\n\t\t\t\telements[index].style.display = values[index];\n\t\t\t}\n\t\t}\n\n\t\treturn elements;\n\t}\n\n\tjQuery.fn.extend({\n\t\tshow: function () {\n\t\t\treturn showHide(this, true);\n\t\t},\n\t\thide: function () {\n\t\t\treturn showHide(this);\n\t\t},\n\t\ttoggle: function (state) {\n\t\t\tif (typeof state === \"boolean\") {\n\t\t\t\treturn state ? this.show() : this.hide();\n\t\t\t}\n\n\t\t\treturn this.each(function () {\n\t\t\t\tif (isHiddenWithinTree(this)) {\n\t\t\t\t\tjQuery(this).show();\n\t\t\t\t} else {\n\t\t\t\t\tjQuery(this).hide();\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t});\n\tvar rcheckableType = (/^(?:checkbox|radio)$/i);\n\n\tvar rtagName = (/<([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]*)/i);\n\n\tvar rscriptType = (/^$|^module$|\\/(?:java|ecma)script/i);\n\n\n\n\t(function () {\n\t\tvar fragment = document.createDocumentFragment(),\n\t\t\tdiv = fragment.appendChild(document.createElement(\"div\")),\n\t\t\tinput = document.createElement(\"input\");\n\n\t\t// Support: Android 4.0 - 4.3 only\n\t\t// Check state lost if the name is set (trac-11217)\n\t\t// Support: Windows Web Apps (WWA)\n\t\t// `name` and `type` must use .setAttribute for WWA (trac-14901)\n\t\tinput.setAttribute(\"type\", \"radio\");\n\t\tinput.setAttribute(\"checked\", \"checked\");\n\t\tinput.setAttribute(\"name\", \"t\");\n\n\t\tdiv.appendChild(input);\n\n\t\t// Support: Android <=4.1 only\n\t\t// Older WebKit doesn't clone checked state correctly in fragments\n\t\tsupport.checkClone = div.cloneNode(true).cloneNode(true).lastChild.checked;\n\n\t\t// Support: IE <=11 only\n\t\t// Make sure textarea (and checkbox) defaultValue is properly cloned\n\t\tdiv.innerHTML = \"<textarea>x</textarea>\";\n\t\tsupport.noCloneChecked = !!div.cloneNode(true).lastChild.defaultValue;\n\n\t\t// Support: IE <=9 only\n\t\t// IE <=9 replaces <option> tags with their contents when inserted outside of\n\t\t// the select element.\n\t\tdiv.innerHTML = \"<option></option>\";\n\t\tsupport.option = !!div.lastChild;\n\t})();\n\n\n\t// We have to close these tags to support XHTML (trac-13200)\n\tvar wrapMap = {\n\n\t\t// XHTML parsers do not magically insert elements in the\n\t\t// same way that tag soup parsers do. So we cannot shorten\n\t\t// this by omitting <tbody> or other required elements.\n\t\tthead: [1, \"<table>\", \"</table>\"],\n\t\tcol: [2, \"<table><colgroup>\", \"</colgroup></table>\"],\n\t\ttr: [2, \"<table><tbody>\", \"</tbody></table>\"],\n\t\ttd: [3, \"<table><tbody><tr>\", \"</tr></tbody></table>\"],\n\n\t\t_default: [0, \"\", \"\"]\n\t};\n\n\twrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;\n\twrapMap.th = wrapMap.td;\n\n\t// Support: IE <=9 only\n\tif (!support.option) {\n\t\twrapMap.optgroup = wrapMap.option = [1, \"<select multiple='multiple'>\", \"</select>\"];\n\t}\n\n\n\tfunction getAll(context, tag) {\n\n\t\t// Support: IE <=9 - 11 only\n\t\t// Use typeof to avoid zero-argument method invocation on host objects (trac-15151)\n\t\tvar ret;\n\n\t\tif (typeof context.getElementsByTagName !== \"undefined\") {\n\t\t\tret = context.getElementsByTagName(tag || \"*\");\n\n\t\t} else if (typeof context.querySelectorAll !== \"undefined\") {\n\t\t\tret = context.querySelectorAll(tag || \"*\");\n\n\t\t} else {\n\t\t\tret = [];\n\t\t}\n\n\t\tif (tag === undefined || tag && nodeName(context, tag)) {\n\t\t\treturn jQuery.merge([context], ret);\n\t\t}\n\n\t\treturn ret;\n\t}\n\n\n\t// Mark scripts as having already been evaluated\n\tfunction setGlobalEval(elems, refElements) {\n\t\tvar i = 0,\n\t\t\tl = elems.length;\n\n\t\tfor (; i < l; i++) {\n\t\t\tdataPriv.set(\n\t\t\t\telems[i],\n\t\t\t\t\"globalEval\",\n\t\t\t\t!refElements || dataPriv.get(refElements[i], \"globalEval\")\n\t\t\t);\n\t\t}\n\t}\n\n\n\tvar rhtml = /<|&#?\\w+;/;\n\n\tfunction buildFragment(elems, context, scripts, selection, ignored) {\n\t\tvar elem, tmp, tag, wrap, attached, j,\n\t\t\tfragment = context.createDocumentFragment(),\n\t\t\tnodes = [],\n\t\t\ti = 0,\n\t\t\tl = elems.length;\n\n\t\tfor (; i < l; i++) {\n\t\t\telem = elems[i];\n\n\t\t\tif (elem || elem === 0) {\n\n\t\t\t\t// Add nodes directly\n\t\t\t\tif (toType(elem) === \"object\") {\n\n\t\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\t\tjQuery.merge(nodes, elem.nodeType ? [elem] : elem);\n\n\t\t\t\t\t// Convert non-html into a text node\n\t\t\t\t} else if (!rhtml.test(elem)) {\n\t\t\t\t\tnodes.push(context.createTextNode(elem));\n\n\t\t\t\t\t// Convert html into DOM nodes\n\t\t\t\t} else {\n\t\t\t\t\ttmp = tmp || fragment.appendChild(context.createElement(\"div\"));\n\n\t\t\t\t\t// Deserialize a standard representation\n\t\t\t\t\ttag = (rtagName.exec(elem) || [\"\", \"\"])[1].toLowerCase();\n\t\t\t\t\twrap = wrapMap[tag] || wrapMap._default;\n\t\t\t\t\ttmp.innerHTML = wrap[1] + jQuery.htmlPrefilter(elem) + wrap[2];\n\n\t\t\t\t\t// Descend through wrappers to the right content\n\t\t\t\t\tj = wrap[0];\n\t\t\t\t\twhile (j--) {\n\t\t\t\t\t\ttmp = tmp.lastChild;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\t\tjQuery.merge(nodes, tmp.childNodes);\n\n\t\t\t\t\t// Remember the top-level container\n\t\t\t\t\ttmp = fragment.firstChild;\n\n\t\t\t\t\t// Ensure the created nodes are orphaned (trac-12392)\n\t\t\t\t\ttmp.textContent = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Remove wrapper from fragment\n\t\tfragment.textContent = \"\";\n\n\t\ti = 0;\n\t\twhile ((elem = nodes[i++])) {\n\n\t\t\t// Skip elements already in the context collection (trac-4087)\n\t\t\tif (selection && jQuery.inArray(elem, selection) > -1) {\n\t\t\t\tif (ignored) {\n\t\t\t\t\tignored.push(elem);\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tattached = isAttached(elem);\n\n\t\t\t// Append to fragment\n\t\t\ttmp = getAll(fragment.appendChild(elem), \"script\");\n\n\t\t\t// Preserve script evaluation history\n\t\t\tif (attached) {\n\t\t\t\tsetGlobalEval(tmp);\n\t\t\t}\n\n\t\t\t// Capture executables\n\t\t\tif (scripts) {\n\t\t\t\tj = 0;\n\t\t\t\twhile ((elem = tmp[j++])) {\n\t\t\t\t\tif (rscriptType.test(elem.type || \"\")) {\n\t\t\t\t\t\tscripts.push(elem);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn fragment;\n\t}\n\n\n\tvar rtypenamespace = /^([^.]*)(?:\\.(.+)|)/;\n\n\tfunction returnTrue() {\n\t\treturn true;\n\t}\n\n\tfunction returnFalse() {\n\t\treturn false;\n\t}\n\n\tfunction on(elem, types, selector, data, fn, one) {\n\t\tvar origFn, type;\n\n\t\t// Types can be a map of types/handlers\n\t\tif (typeof types === \"object\") {\n\n\t\t\t// ( types-Object, selector, data )\n\t\t\tif (typeof selector !== \"string\") {\n\n\t\t\t\t// ( types-Object, data )\n\t\t\t\tdata = data || selector;\n\t\t\t\tselector = undefined;\n\t\t\t}\n\t\t\tfor (type in types) {\n\t\t\t\ton(elem, type, selector, data, types[type], one);\n\t\t\t}\n\t\t\treturn elem;\n\t\t}\n\n\t\tif (data == null && fn == null) {\n\n\t\t\t// ( types, fn )\n\t\t\tfn = selector;\n\t\t\tdata = selector = undefined;\n\t\t} else if (fn == null) {\n\t\t\tif (typeof selector === \"string\") {\n\n\t\t\t\t// ( types, selector, fn )\n\t\t\t\tfn = data;\n\t\t\t\tdata = undefined;\n\t\t\t} else {\n\n\t\t\t\t// ( types, data, fn )\n\t\t\t\tfn = data;\n\t\t\t\tdata = selector;\n\t\t\t\tselector = undefined;\n\t\t\t}\n\t\t}\n\t\tif (fn === false) {\n\t\t\tfn = returnFalse;\n\t\t} else if (!fn) {\n\t\t\treturn elem;\n\t\t}\n\n\t\tif (one === 1) {\n\t\t\torigFn = fn;\n\t\t\tfn = function (event) {\n\n\t\t\t\t// Can use an empty set, since event contains the info\n\t\t\t\tjQuery().off(event);\n\t\t\t\treturn origFn.apply(this, arguments);\n\t\t\t};\n\n\t\t\t// Use same guid so caller can remove using origFn\n\t\t\tfn.guid = origFn.guid || (origFn.guid = jQuery.guid++);\n\t\t}\n\t\treturn elem.each(function () {\n\t\t\tjQuery.event.add(this, types, fn, data, selector);\n\t\t});\n\t}\n\n\t/*\n\t * Helper functions for managing events -- not part of the public interface.\n\t * Props to Dean Edwards' addEvent library for many of the ideas.\n\t */\n\tjQuery.event = {\n\n\t\tglobal: {},\n\n\t\tadd: function (elem, types, handler, data, selector) {\n\n\t\t\tvar handleObjIn, eventHandle, tmp,\n\t\t\t\tevents, t, handleObj,\n\t\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\t\telemData = dataPriv.get(elem);\n\n\t\t\t// Only attach events to objects that accept data\n\t\t\tif (!acceptData(elem)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Caller can pass in an object of custom data in lieu of the handler\n\t\t\tif (handler.handler) {\n\t\t\t\thandleObjIn = handler;\n\t\t\t\thandler = handleObjIn.handler;\n\t\t\t\tselector = handleObjIn.selector;\n\t\t\t}\n\n\t\t\t// Ensure that invalid selectors throw exceptions at attach time\n\t\t\t// Evaluate against documentElement in case elem is a non-element node (e.g., document)\n\t\t\tif (selector) {\n\t\t\t\tjQuery.find.matchesSelector(documentElement, selector);\n\t\t\t}\n\n\t\t\t// Make sure that the handler has a unique ID, used to find/remove it later\n\t\t\tif (!handler.guid) {\n\t\t\t\thandler.guid = jQuery.guid++;\n\t\t\t}\n\n\t\t\t// Init the element's event structure and main handler, if this is the first\n\t\t\tif (!(events = elemData.events)) {\n\t\t\t\tevents = elemData.events = Object.create(null);\n\t\t\t}\n\t\t\tif (!(eventHandle = elemData.handle)) {\n\t\t\t\teventHandle = elemData.handle = function (e) {\n\n\t\t\t\t\t// Discard the second event of a jQuery.event.trigger() and\n\t\t\t\t\t// when an event is called after a page has unloaded\n\t\t\t\t\treturn typeof jQuery !== \"undefined\" && jQuery.event.triggered !== e.type ?\n\t\t\t\t\t\tjQuery.event.dispatch.apply(elem, arguments) : undefined;\n\t\t\t\t};\n\t\t\t}\n\n\t\t\t// Handle multiple events separated by a space\n\t\t\ttypes = (types || \"\").match(rnothtmlwhite) || [\"\"];\n\t\t\tt = types.length;\n\t\t\twhile (t--) {\n\t\t\t\ttmp = rtypenamespace.exec(types[t]) || [];\n\t\t\t\ttype = origType = tmp[1];\n\t\t\t\tnamespaces = (tmp[2] || \"\").split(\".\").sort();\n\n\t\t\t\t// There *must* be a type, no attaching namespace-only handlers\n\t\t\t\tif (!type) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// If event changes its type, use the special event handlers for the changed type\n\t\t\t\tspecial = jQuery.event.special[type] || {};\n\n\t\t\t\t// If selector defined, determine special event api type, otherwise given type\n\t\t\t\ttype = (selector ? special.delegateType : special.bindType) || type;\n\n\t\t\t\t// Update special based on newly reset type\n\t\t\t\tspecial = jQuery.event.special[type] || {};\n\n\t\t\t\t// handleObj is passed to all event handlers\n\t\t\t\thandleObj = jQuery.extend({\n\t\t\t\t\ttype: type,\n\t\t\t\t\torigType: origType,\n\t\t\t\t\tdata: data,\n\t\t\t\t\thandler: handler,\n\t\t\t\t\tguid: handler.guid,\n\t\t\t\t\tselector: selector,\n\t\t\t\t\tneedsContext: selector && jQuery.expr.match.needsContext.test(selector),\n\t\t\t\t\tnamespace: namespaces.join(\".\")\n\t\t\t\t}, handleObjIn);\n\n\t\t\t\t// Init the event handler queue if we're the first\n\t\t\t\tif (!(handlers = events[type])) {\n\t\t\t\t\thandlers = events[type] = [];\n\t\t\t\t\thandlers.delegateCount = 0;\n\n\t\t\t\t\t// Only use addEventListener if the special events handler returns false\n\t\t\t\t\tif (!special.setup ||\n\t\t\t\t\t\tspecial.setup.call(elem, data, namespaces, eventHandle) === false) {\n\n\t\t\t\t\t\tif (elem.addEventListener) {\n\t\t\t\t\t\t\telem.addEventListener(type, eventHandle);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (special.add) {\n\t\t\t\t\tspecial.add.call(elem, handleObj);\n\n\t\t\t\t\tif (!handleObj.handler.guid) {\n\t\t\t\t\t\thandleObj.handler.guid = handler.guid;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Add to the element's handler list, delegates in front\n\t\t\t\tif (selector) {\n\t\t\t\t\thandlers.splice(handlers.delegateCount++, 0, handleObj);\n\t\t\t\t} else {\n\t\t\t\t\thandlers.push(handleObj);\n\t\t\t\t}\n\n\t\t\t\t// Keep track of which events have ever been used, for event optimization\n\t\t\t\tjQuery.event.global[type] = true;\n\t\t\t}\n\n\t\t},\n\n\t\t// Detach an event or set of events from an element\n\t\tremove: function (elem, types, handler, selector, mappedTypes) {\n\n\t\t\tvar j, origCount, tmp,\n\t\t\t\tevents, t, handleObj,\n\t\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\t\telemData = dataPriv.hasData(elem) && dataPriv.get(elem);\n\n\t\t\tif (!elemData || !(events = elemData.events)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Once for each type.namespace in types; type may be omitted\n\t\t\ttypes = (types || \"\").match(rnothtmlwhite) || [\"\"];\n\t\t\tt = types.length;\n\t\t\twhile (t--) {\n\t\t\t\ttmp = rtypenamespace.exec(types[t]) || [];\n\t\t\t\ttype = origType = tmp[1];\n\t\t\t\tnamespaces = (tmp[2] || \"\").split(\".\").sort();\n\n\t\t\t\t// Unbind all events (on this namespace, if provided) for the element\n\t\t\t\tif (!type) {\n\t\t\t\t\tfor (type in events) {\n\t\t\t\t\t\tjQuery.event.remove(elem, type + types[t], handler, selector, true);\n\t\t\t\t\t}\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tspecial = jQuery.event.special[type] || {};\n\t\t\t\ttype = (selector ? special.delegateType : special.bindType) || type;\n\t\t\t\thandlers = events[type] || [];\n\t\t\t\ttmp = tmp[2] &&\n\t\t\t\t\tnew RegExp(\"(^|\\\\.)\" + namespaces.join(\"\\\\.(?:.*\\\\.|)\") + \"(\\\\.|$)\");\n\n\t\t\t\t// Remove matching events\n\t\t\t\torigCount = j = handlers.length;\n\t\t\t\twhile (j--) {\n\t\t\t\t\thandleObj = handlers[j];\n\n\t\t\t\t\tif ((mappedTypes || origType === handleObj.origType) &&\n\t\t\t\t\t\t(!handler || handler.guid === handleObj.guid) &&\n\t\t\t\t\t\t(!tmp || tmp.test(handleObj.namespace)) &&\n\t\t\t\t\t\t(!selector || selector === handleObj.selector ||\n\t\t\t\t\t\t\tselector === \"**\" && handleObj.selector)) {\n\t\t\t\t\t\thandlers.splice(j, 1);\n\n\t\t\t\t\t\tif (handleObj.selector) {\n\t\t\t\t\t\t\thandlers.delegateCount--;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (special.remove) {\n\t\t\t\t\t\t\tspecial.remove.call(elem, handleObj);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Remove generic event handler if we removed something and no more handlers exist\n\t\t\t\t// (avoids potential for endless recursion during removal of special event handlers)\n\t\t\t\tif (origCount && !handlers.length) {\n\t\t\t\t\tif (!special.teardown ||\n\t\t\t\t\t\tspecial.teardown.call(elem, namespaces, elemData.handle) === false) {\n\n\t\t\t\t\t\tjQuery.removeEvent(elem, type, elemData.handle);\n\t\t\t\t\t}\n\n\t\t\t\t\tdelete events[type];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove data and the expando if it's no longer used\n\t\t\tif (jQuery.isEmptyObject(events)) {\n\t\t\t\tdataPriv.remove(elem, \"handle events\");\n\t\t\t}\n\t\t},\n\n\t\tdispatch: function (nativeEvent) {\n\n\t\t\tvar i, j, ret, matched, handleObj, handlerQueue,\n\t\t\t\targs = new Array(arguments.length),\n\n\t\t\t\t// Make a writable jQuery.Event from the native event object\n\t\t\t\tevent = jQuery.event.fix(nativeEvent),\n\n\t\t\t\thandlers = (\n\t\t\t\t\tdataPriv.get(this, \"events\") || Object.create(null)\n\t\t\t\t)[event.type] || [],\n\t\t\t\tspecial = jQuery.event.special[event.type] || {};\n\n\t\t\t// Use the fix-ed jQuery.Event rather than the (read-only) native event\n\t\t\targs[0] = event;\n\n\t\t\tfor (i = 1; i < arguments.length; i++) {\n\t\t\t\targs[i] = arguments[i];\n\t\t\t}\n\n\t\t\tevent.delegateTarget = this;\n\n\t\t\t// Call the preDispatch hook for the mapped type, and let it bail if desired\n\t\t\tif (special.preDispatch && special.preDispatch.call(this, event) === false) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Determine handlers\n\t\t\thandlerQueue = jQuery.event.handlers.call(this, event, handlers);\n\n\t\t\t// Run delegates first; they may want to stop propagation beneath us\n\t\t\ti = 0;\n\t\t\twhile ((matched = handlerQueue[i++]) && !event.isPropagationStopped()) {\n\t\t\t\tevent.currentTarget = matched.elem;\n\n\t\t\t\tj = 0;\n\t\t\t\twhile ((handleObj = matched.handlers[j++]) &&\n\t\t\t\t\t!event.isImmediatePropagationStopped()) {\n\n\t\t\t\t\t// If the event is namespaced, then each handler is only invoked if it is\n\t\t\t\t\t// specially universal or its namespaces are a superset of the event's.\n\t\t\t\t\tif (!event.rnamespace || handleObj.namespace === false ||\n\t\t\t\t\t\tevent.rnamespace.test(handleObj.namespace)) {\n\n\t\t\t\t\t\tevent.handleObj = handleObj;\n\t\t\t\t\t\tevent.data = handleObj.data;\n\n\t\t\t\t\t\tret = ((jQuery.event.special[handleObj.origType] || {}).handle ||\n\t\t\t\t\t\t\thandleObj.handler).apply(matched.elem, args);\n\n\t\t\t\t\t\tif (ret !== undefined) {\n\t\t\t\t\t\t\tif ((event.result = ret) === false) {\n\t\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Call the postDispatch hook for the mapped type\n\t\t\tif (special.postDispatch) {\n\t\t\t\tspecial.postDispatch.call(this, event);\n\t\t\t}\n\n\t\t\treturn event.result;\n\t\t},\n\n\t\thandlers: function (event, handlers) {\n\t\t\tvar i, handleObj, sel, matchedHandlers, matchedSelectors,\n\t\t\t\thandlerQueue = [],\n\t\t\t\tdelegateCount = handlers.delegateCount,\n\t\t\t\tcur = event.target;\n\n\t\t\t// Find delegate handlers\n\t\t\tif (delegateCount &&\n\n\t\t\t\t// Support: IE <=9\n\t\t\t\t// Black-hole SVG <use> instance trees (trac-13180)\n\t\t\t\tcur.nodeType &&\n\n\t\t\t\t// Support: Firefox <=42\n\t\t\t\t// Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861)\n\t\t\t\t// https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click\n\t\t\t\t// Support: IE 11 only\n\t\t\t\t// ...but not arrow key \"clicks\" of radio inputs, which can have `button` -1 (gh-2343)\n\t\t\t\t!(event.type === \"click\" && event.button >= 1)) {\n\n\t\t\t\tfor (; cur !== this; cur = cur.parentNode || this) {\n\n\t\t\t\t\t// Don't check non-elements (trac-13208)\n\t\t\t\t\t// Don't process clicks on disabled elements (trac-6911, trac-8165, trac-11382, trac-11764)\n\t\t\t\t\tif (cur.nodeType === 1 && !(event.type === \"click\" && cur.disabled === true)) {\n\t\t\t\t\t\tmatchedHandlers = [];\n\t\t\t\t\t\tmatchedSelectors = {};\n\t\t\t\t\t\tfor (i = 0; i < delegateCount; i++) {\n\t\t\t\t\t\t\thandleObj = handlers[i];\n\n\t\t\t\t\t\t\t// Don't conflict with Object.prototype properties (trac-13203)\n\t\t\t\t\t\t\tsel = handleObj.selector + \" \";\n\n\t\t\t\t\t\t\tif (matchedSelectors[sel] === undefined) {\n\t\t\t\t\t\t\t\tmatchedSelectors[sel] = handleObj.needsContext ?\n\t\t\t\t\t\t\t\t\tjQuery(sel, this).index(cur) > -1 :\n\t\t\t\t\t\t\t\t\tjQuery.find(sel, this, null, [cur]).length;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (matchedSelectors[sel]) {\n\t\t\t\t\t\t\t\tmatchedHandlers.push(handleObj);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (matchedHandlers.length) {\n\t\t\t\t\t\t\thandlerQueue.push({ elem: cur, handlers: matchedHandlers });\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Add the remaining (directly-bound) handlers\n\t\t\tcur = this;\n\t\t\tif (delegateCount < handlers.length) {\n\t\t\t\thandlerQueue.push({ elem: cur, handlers: handlers.slice(delegateCount) });\n\t\t\t}\n\n\t\t\treturn handlerQueue;\n\t\t},\n\n\t\taddProp: function (name, hook) {\n\t\t\tObject.defineProperty(jQuery.Event.prototype, name, {\n\t\t\t\tenumerable: true,\n\t\t\t\tconfigurable: true,\n\n\t\t\t\tget: isFunction(hook) ?\n\t\t\t\t\tfunction () {\n\t\t\t\t\t\tif (this.originalEvent) {\n\t\t\t\t\t\t\treturn hook(this.originalEvent);\n\t\t\t\t\t\t}\n\t\t\t\t\t} :\n\t\t\t\t\tfunction () {\n\t\t\t\t\t\tif (this.originalEvent) {\n\t\t\t\t\t\t\treturn this.originalEvent[name];\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\n\t\t\t\tset: function (value) {\n\t\t\t\t\tObject.defineProperty(this, name, {\n\t\t\t\t\t\tenumerable: true,\n\t\t\t\t\t\tconfigurable: true,\n\t\t\t\t\t\twritable: true,\n\t\t\t\t\t\tvalue: value\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\tfix: function (originalEvent) {\n\t\t\treturn originalEvent[jQuery.expando] ?\n\t\t\t\toriginalEvent :\n\t\t\t\tnew jQuery.Event(originalEvent);\n\t\t},\n\n\t\tspecial: {\n\t\t\tload: {\n\n\t\t\t\t// Prevent triggered image.load events from bubbling to window.load\n\t\t\t\tnoBubble: true\n\t\t\t},\n\t\t\tclick: {\n\n\t\t\t\t// Utilize native event to ensure correct state for checkable inputs\n\t\t\t\tsetup: function (data) {\n\n\t\t\t\t\t// For mutual compressibility with _default, replace `this` access with a local var.\n\t\t\t\t\t// `|| data` is dead code meant only to preserve the variable through minification.\n\t\t\t\t\tvar el = this || data;\n\n\t\t\t\t\t// Claim the first handler\n\t\t\t\t\tif (rcheckableType.test(el.type) &&\n\t\t\t\t\t\tel.click && nodeName(el, \"input\")) {\n\n\t\t\t\t\t\t// dataPriv.set( el, \"click\", ... )\n\t\t\t\t\t\tleverageNative(el, \"click\", true);\n\t\t\t\t\t}\n\n\t\t\t\t\t// Return false to allow normal processing in the caller\n\t\t\t\t\treturn false;\n\t\t\t\t},\n\t\t\t\ttrigger: function (data) {\n\n\t\t\t\t\t// For mutual compressibility with _default, replace `this` access with a local var.\n\t\t\t\t\t// `|| data` is dead code meant only to preserve the variable through minification.\n\t\t\t\t\tvar el = this || data;\n\n\t\t\t\t\t// Force setup before triggering a click\n\t\t\t\t\tif (rcheckableType.test(el.type) &&\n\t\t\t\t\t\tel.click && nodeName(el, \"input\")) {\n\n\t\t\t\t\t\tleverageNative(el, \"click\");\n\t\t\t\t\t}\n\n\t\t\t\t\t// Return non-false to allow normal event-path propagation\n\t\t\t\t\treturn true;\n\t\t\t\t},\n\n\t\t\t\t// For cross-browser consistency, suppress native .click() on links\n\t\t\t\t// Also prevent it if we're currently inside a leveraged native-event stack\n\t\t\t\t_default: function (event) {\n\t\t\t\t\tvar target = event.target;\n\t\t\t\t\treturn rcheckableType.test(target.type) &&\n\t\t\t\t\t\ttarget.click && nodeName(target, \"input\") &&\n\t\t\t\t\t\tdataPriv.get(target, \"click\") ||\n\t\t\t\t\t\tnodeName(target, \"a\");\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tbeforeunload: {\n\t\t\t\tpostDispatch: function (event) {\n\n\t\t\t\t\t// Support: Firefox 20+\n\t\t\t\t\t// Firefox doesn't alert if the returnValue field is not set.\n\t\t\t\t\tif (event.result !== undefined && event.originalEvent) {\n\t\t\t\t\t\tevent.originalEvent.returnValue = event.result;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t// Ensure the presence of an event listener that handles manually-triggered\n\t// synthetic events by interrupting progress until reinvoked in response to\n\t// *native* events that it fires directly, ensuring that state changes have\n\t// already occurred before other listeners are invoked.\n\tfunction leverageNative(el, type, isSetup) {\n\n\t\t// Missing `isSetup` indicates a trigger call, which must force setup through jQuery.event.add\n\t\tif (!isSetup) {\n\t\t\tif (dataPriv.get(el, type) === undefined) {\n\t\t\t\tjQuery.event.add(el, type, returnTrue);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\t// Register the controller as a special universal handler for all event namespaces\n\t\tdataPriv.set(el, type, false);\n\t\tjQuery.event.add(el, type, {\n\t\t\tnamespace: false,\n\t\t\thandler: function (event) {\n\t\t\t\tvar result,\n\t\t\t\t\tsaved = dataPriv.get(this, type);\n\n\t\t\t\tif ((event.isTrigger & 1) && this[type]) {\n\n\t\t\t\t\t// Interrupt processing of the outer synthetic .trigger()ed event\n\t\t\t\t\tif (!saved) {\n\n\t\t\t\t\t\t// Store arguments for use when handling the inner native event\n\t\t\t\t\t\t// There will always be at least one argument (an event object), so this array\n\t\t\t\t\t\t// will not be confused with a leftover capture object.\n\t\t\t\t\t\tsaved = slice.call(arguments);\n\t\t\t\t\t\tdataPriv.set(this, type, saved);\n\n\t\t\t\t\t\t// Trigger the native event and capture its result\n\t\t\t\t\t\tthis[type]();\n\t\t\t\t\t\tresult = dataPriv.get(this, type);\n\t\t\t\t\t\tdataPriv.set(this, type, false);\n\n\t\t\t\t\t\tif (saved !== result) {\n\n\t\t\t\t\t\t\t// Cancel the outer synthetic event\n\t\t\t\t\t\t\tevent.stopImmediatePropagation();\n\t\t\t\t\t\t\tevent.preventDefault();\n\n\t\t\t\t\t\t\treturn result;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// If this is an inner synthetic event for an event with a bubbling surrogate\n\t\t\t\t\t\t// (focus or blur), assume that the surrogate already propagated from triggering\n\t\t\t\t\t\t// the native event and prevent that from happening again here.\n\t\t\t\t\t\t// This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the\n\t\t\t\t\t\t// bubbling surrogate propagates *after* the non-bubbling base), but that seems\n\t\t\t\t\t\t// less bad than duplication.\n\t\t\t\t\t} else if ((jQuery.event.special[type] || {}).delegateType) {\n\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t}\n\n\t\t\t\t\t// If this is a native event triggered above, everything is now in order\n\t\t\t\t\t// Fire an inner synthetic event with the original arguments\n\t\t\t\t} else if (saved) {\n\n\t\t\t\t\t// ...and capture the result\n\t\t\t\t\tdataPriv.set(this, type, jQuery.event.trigger(\n\t\t\t\t\t\tsaved[0],\n\t\t\t\t\t\tsaved.slice(1),\n\t\t\t\t\t\tthis\n\t\t\t\t\t));\n\n\t\t\t\t\t// Abort handling of the native event by all jQuery handlers while allowing\n\t\t\t\t\t// native handlers on the same element to run. On target, this is achieved\n\t\t\t\t\t// by stopping immediate propagation just on the jQuery event. However,\n\t\t\t\t\t// the native event is re-wrapped by a jQuery one on each level of the\n\t\t\t\t\t// propagation so the only way to stop it for jQuery is to stop it for\n\t\t\t\t\t// everyone via native `stopPropagation()`. This is not a problem for\n\t\t\t\t\t// focus/blur which don't bubble, but it does also stop click on checkboxes\n\t\t\t\t\t// and radios. We accept this limitation.\n\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\tevent.isImmediatePropagationStopped = returnTrue;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\tjQuery.removeEvent = function (elem, type, handle) {\n\n\t\t// This \"if\" is needed for plain objects\n\t\tif (elem.removeEventListener) {\n\t\t\telem.removeEventListener(type, handle);\n\t\t}\n\t};\n\n\tjQuery.Event = function (src, props) {\n\n\t\t// Allow instantiation without the 'new' keyword\n\t\tif (!(this instanceof jQuery.Event)) {\n\t\t\treturn new jQuery.Event(src, props);\n\t\t}\n\n\t\t// Event object\n\t\tif (src && src.type) {\n\t\t\tthis.originalEvent = src;\n\t\t\tthis.type = src.type;\n\n\t\t\t// Events bubbling up the document may have been marked as prevented\n\t\t\t// by a handler lower down the tree; reflect the correct value.\n\t\t\tthis.isDefaultPrevented = src.defaultPrevented ||\n\t\t\t\tsrc.defaultPrevented === undefined &&\n\n\t\t\t\t// Support: Android <=2.3 only\n\t\t\t\tsrc.returnValue === false ?\n\t\t\t\treturnTrue :\n\t\t\t\treturnFalse;\n\n\t\t\t// Create target properties\n\t\t\t// Support: Safari <=6 - 7 only\n\t\t\t// Target should not be a text node (trac-504, trac-13143)\n\t\t\tthis.target = (src.target && src.target.nodeType === 3) ?\n\t\t\t\tsrc.target.parentNode :\n\t\t\t\tsrc.target;\n\n\t\t\tthis.currentTarget = src.currentTarget;\n\t\t\tthis.relatedTarget = src.relatedTarget;\n\n\t\t\t// Event type\n\t\t} else {\n\t\t\tthis.type = src;\n\t\t}\n\n\t\t// Put explicitly provided properties onto the event object\n\t\tif (props) {\n\t\t\tjQuery.extend(this, props);\n\t\t}\n\n\t\t// Create a timestamp if incoming event doesn't have one\n\t\tthis.timeStamp = src && src.timeStamp || Date.now();\n\n\t\t// Mark it as fixed\n\t\tthis[jQuery.expando] = true;\n\t};\n\n\t// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding\n\t// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html\n\tjQuery.Event.prototype = {\n\t\tconstructor: jQuery.Event,\n\t\tisDefaultPrevented: returnFalse,\n\t\tisPropagationStopped: returnFalse,\n\t\tisImmediatePropagationStopped: returnFalse,\n\t\tisSimulated: false,\n\n\t\tpreventDefault: function () {\n\t\t\tvar e = this.originalEvent;\n\n\t\t\tthis.isDefaultPrevented = returnTrue;\n\n\t\t\tif (e && !this.isSimulated) {\n\t\t\t\te.preventDefault();\n\t\t\t}\n\t\t},\n\t\tstopPropagation: function () {\n\t\t\tvar e = this.originalEvent;\n\n\t\t\tthis.isPropagationStopped = returnTrue;\n\n\t\t\tif (e && !this.isSimulated) {\n\t\t\t\te.stopPropagation();\n\t\t\t}\n\t\t},\n\t\tstopImmediatePropagation: function () {\n\t\t\tvar e = this.originalEvent;\n\n\t\t\tthis.isImmediatePropagationStopped = returnTrue;\n\n\t\t\tif (e && !this.isSimulated) {\n\t\t\t\te.stopImmediatePropagation();\n\t\t\t}\n\n\t\t\tthis.stopPropagation();\n\t\t}\n\t};\n\n\t// Includes all common event props including KeyEvent and MouseEvent specific props\n\tjQuery.each({\n\t\taltKey: true,\n\t\tbubbles: true,\n\t\tcancelable: true,\n\t\tchangedTouches: true,\n\t\tctrlKey: true,\n\t\tdetail: true,\n\t\teventPhase: true,\n\t\tmetaKey: true,\n\t\tpageX: true,\n\t\tpageY: true,\n\t\tshiftKey: true,\n\t\tview: true,\n\t\t\"char\": true,\n\t\tcode: true,\n\t\tcharCode: true,\n\t\tkey: true,\n\t\tkeyCode: true,\n\t\tbutton: true,\n\t\tbuttons: true,\n\t\tclientX: true,\n\t\tclientY: true,\n\t\toffsetX: true,\n\t\toffsetY: true,\n\t\tpointerId: true,\n\t\tpointerType: true,\n\t\tscreenX: true,\n\t\tscreenY: true,\n\t\ttargetTouches: true,\n\t\ttoElement: true,\n\t\ttouches: true,\n\t\twhich: true\n\t}, jQuery.event.addProp);\n\n\tjQuery.each({ focus: \"focusin\", blur: \"focusout\" }, function (type, delegateType) {\n\n\t\tfunction focusMappedHandler(nativeEvent) {\n\t\t\tif (document.documentMode) {\n\n\t\t\t\t// Support: IE 11+\n\t\t\t\t// Attach a single focusin/focusout handler on the document while someone wants\n\t\t\t\t// focus/blur. This is because the former are synchronous in IE while the latter\n\t\t\t\t// are async. In other browsers, all those handlers are invoked synchronously.\n\n\t\t\t\t// `handle` from private data would already wrap the event, but we need\n\t\t\t\t// to change the `type` here.\n\t\t\t\tvar handle = dataPriv.get(this, \"handle\"),\n\t\t\t\t\tevent = jQuery.event.fix(nativeEvent);\n\t\t\t\tevent.type = nativeEvent.type === \"focusin\" ? \"focus\" : \"blur\";\n\t\t\t\tevent.isSimulated = true;\n\n\t\t\t\t// First, handle focusin/focusout\n\t\t\t\thandle(nativeEvent);\n\n\t\t\t\t// ...then, handle focus/blur\n\t\t\t\t//\n\t\t\t\t// focus/blur don't bubble while focusin/focusout do; simulate the former by only\n\t\t\t\t// invoking the handler at the lower level.\n\t\t\t\tif (event.target === event.currentTarget) {\n\n\t\t\t\t\t// The setup part calls `leverageNative`, which, in turn, calls\n\t\t\t\t\t// `jQuery.event.add`, so event handle will already have been set\n\t\t\t\t\t// by this point.\n\t\t\t\t\thandle(event);\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\t// For non-IE browsers, attach a single capturing handler on the document\n\t\t\t\t// while someone wants focusin/focusout.\n\t\t\t\tjQuery.event.simulate(delegateType, nativeEvent.target,\n\t\t\t\t\tjQuery.event.fix(nativeEvent));\n\t\t\t}\n\t\t}\n\n\t\tjQuery.event.special[type] = {\n\n\t\t\t// Utilize native event if possible so blur/focus sequence is correct\n\t\t\tsetup: function () {\n\n\t\t\t\tvar attaches;\n\n\t\t\t\t// Claim the first handler\n\t\t\t\t// dataPriv.set( this, \"focus\", ... )\n\t\t\t\t// dataPriv.set( this, \"blur\", ... )\n\t\t\t\tleverageNative(this, type, true);\n\n\t\t\t\tif (document.documentMode) {\n\n\t\t\t\t\t// Support: IE 9 - 11+\n\t\t\t\t\t// We use the same native handler for focusin & focus (and focusout & blur)\n\t\t\t\t\t// so we need to coordinate setup & teardown parts between those events.\n\t\t\t\t\t// Use `delegateType` as the key as `type` is already used by `leverageNative`.\n\t\t\t\t\tattaches = dataPriv.get(this, delegateType);\n\t\t\t\t\tif (!attaches) {\n\t\t\t\t\t\tthis.addEventListener(delegateType, focusMappedHandler);\n\t\t\t\t\t}\n\t\t\t\t\tdataPriv.set(this, delegateType, (attaches || 0) + 1);\n\t\t\t\t} else {\n\n\t\t\t\t\t// Return false to allow normal processing in the caller\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\t\t\ttrigger: function () {\n\n\t\t\t\t// Force setup before trigger\n\t\t\t\tleverageNative(this, type);\n\n\t\t\t\t// Return non-false to allow normal event-path propagation\n\t\t\t\treturn true;\n\t\t\t},\n\n\t\t\tteardown: function () {\n\t\t\t\tvar attaches;\n\n\t\t\t\tif (document.documentMode) {\n\t\t\t\t\tattaches = dataPriv.get(this, delegateType) - 1;\n\t\t\t\t\tif (!attaches) {\n\t\t\t\t\t\tthis.removeEventListener(delegateType, focusMappedHandler);\n\t\t\t\t\t\tdataPriv.remove(this, delegateType);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdataPriv.set(this, delegateType, attaches);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\n\t\t\t\t\t// Return false to indicate standard teardown should be applied\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// Suppress native focus or blur if we're currently inside\n\t\t\t// a leveraged native-event stack\n\t\t\t_default: function (event) {\n\t\t\t\treturn dataPriv.get(event.target, type);\n\t\t\t},\n\n\t\t\tdelegateType: delegateType\n\t\t};\n\n\t\t// Support: Firefox <=44\n\t\t// Firefox doesn't have focus(in | out) events\n\t\t// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787\n\t\t//\n\t\t// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1\n\t\t// focus(in | out) events fire after focus & blur events,\n\t\t// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order\n\t\t// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857\n\t\t//\n\t\t// Support: IE 9 - 11+\n\t\t// To preserve relative focusin/focus & focusout/blur event order guaranteed on the 3.x branch,\n\t\t// attach a single handler for both events in IE.\n\t\tjQuery.event.special[delegateType] = {\n\t\t\tsetup: function () {\n\n\t\t\t\t// Handle: regular nodes (via `this.ownerDocument`), window\n\t\t\t\t// (via `this.document`) & document (via `this`).\n\t\t\t\tvar doc = this.ownerDocument || this.document || this,\n\t\t\t\t\tdataHolder = document.documentMode ? this : doc,\n\t\t\t\t\tattaches = dataPriv.get(dataHolder, delegateType);\n\n\t\t\t\t// Support: IE 9 - 11+\n\t\t\t\t// We use the same native handler for focusin & focus (and focusout & blur)\n\t\t\t\t// so we need to coordinate setup & teardown parts between those events.\n\t\t\t\t// Use `delegateType` as the key as `type` is already used by `leverageNative`.\n\t\t\t\tif (!attaches) {\n\t\t\t\t\tif (document.documentMode) {\n\t\t\t\t\t\tthis.addEventListener(delegateType, focusMappedHandler);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdoc.addEventListener(type, focusMappedHandler, true);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tdataPriv.set(dataHolder, delegateType, (attaches || 0) + 1);\n\t\t\t},\n\t\t\tteardown: function () {\n\t\t\t\tvar doc = this.ownerDocument || this.document || this,\n\t\t\t\t\tdataHolder = document.documentMode ? this : doc,\n\t\t\t\t\tattaches = dataPriv.get(dataHolder, delegateType) - 1;\n\n\t\t\t\tif (!attaches) {\n\t\t\t\t\tif (document.documentMode) {\n\t\t\t\t\t\tthis.removeEventListener(delegateType, focusMappedHandler);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdoc.removeEventListener(type, focusMappedHandler, true);\n\t\t\t\t\t}\n\t\t\t\t\tdataPriv.remove(dataHolder, delegateType);\n\t\t\t\t} else {\n\t\t\t\t\tdataPriv.set(dataHolder, delegateType, attaches);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t});\n\n\t// Create mouseenter/leave events using mouseover/out and event-time checks\n\t// so that event delegation works in jQuery.\n\t// Do the same for pointerenter/pointerleave and pointerover/pointerout\n\t//\n\t// Support: Safari 7 only\n\t// Safari sends mouseenter too often; see:\n\t// https://bugs.chromium.org/p/chromium/issues/detail?id=470258\n\t// for the description of the bug (it existed in older Chrome versions as well).\n\tjQuery.each({\n\t\tmouseenter: \"mouseover\",\n\t\tmouseleave: \"mouseout\",\n\t\tpointerenter: \"pointerover\",\n\t\tpointerleave: \"pointerout\"\n\t}, function (orig, fix) {\n\t\tjQuery.event.special[orig] = {\n\t\t\tdelegateType: fix,\n\t\t\tbindType: fix,\n\n\t\t\thandle: function (event) {\n\t\t\t\tvar ret,\n\t\t\t\t\ttarget = this,\n\t\t\t\t\trelated = event.relatedTarget,\n\t\t\t\t\thandleObj = event.handleObj;\n\n\t\t\t\t// For mouseenter/leave call the handler if related is outside the target.\n\t\t\t\t// NB: No relatedTarget if the mouse left/entered the browser window\n\t\t\t\tif (!related || (related !== target && !jQuery.contains(target, related))) {\n\t\t\t\t\tevent.type = handleObj.origType;\n\t\t\t\t\tret = handleObj.handler.apply(this, arguments);\n\t\t\t\t\tevent.type = fix;\n\t\t\t\t}\n\t\t\t\treturn ret;\n\t\t\t}\n\t\t};\n\t});\n\n\tjQuery.fn.extend({\n\n\t\ton: function (types, selector, data, fn) {\n\t\t\treturn on(this, types, selector, data, fn);\n\t\t},\n\t\tone: function (types, selector, data, fn) {\n\t\t\treturn on(this, types, selector, data, fn, 1);\n\t\t},\n\t\toff: function (types, selector, fn) {\n\t\t\tvar handleObj, type;\n\t\t\tif (types && types.preventDefault && types.handleObj) {\n\n\t\t\t\t// ( event )  dispatched jQuery.Event\n\t\t\t\thandleObj = types.handleObj;\n\t\t\t\tjQuery(types.delegateTarget).off(\n\t\t\t\t\thandleObj.namespace ?\n\t\t\t\t\t\thandleObj.origType + \".\" + handleObj.namespace :\n\t\t\t\t\t\thandleObj.origType,\n\t\t\t\t\thandleObj.selector,\n\t\t\t\t\thandleObj.handler\n\t\t\t\t);\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\tif (typeof types === \"object\") {\n\n\t\t\t\t// ( types-object [, selector] )\n\t\t\t\tfor (type in types) {\n\t\t\t\t\tthis.off(type, selector, types[type]);\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\tif (selector === false || typeof selector === \"function\") {\n\n\t\t\t\t// ( types [, fn] )\n\t\t\t\tfn = selector;\n\t\t\t\tselector = undefined;\n\t\t\t}\n\t\t\tif (fn === false) {\n\t\t\t\tfn = returnFalse;\n\t\t\t}\n\t\t\treturn this.each(function () {\n\t\t\t\tjQuery.event.remove(this, types, fn, selector);\n\t\t\t});\n\t\t}\n\t});\n\n\n\tvar\n\n\t\t// Support: IE <=10 - 11, Edge 12 - 13 only\n\t\t// In IE/Edge using regex groups here causes severe slowdowns.\n\t\t// See https://connect.microsoft.com/IE/feedback/details/1736512/\n\t\trnoInnerhtml = /<script|<style|<link/i,\n\n\t\t// checked=\"checked\" or checked\n\t\trchecked = /checked\\s*(?:[^=]|=\\s*.checked.)/i,\n\n\t\trcleanScript = /^\\s*<!\\[CDATA\\[|\\]\\]>\\s*$/g;\n\n\t// Prefer a tbody over its parent table for containing new rows\n\tfunction manipulationTarget(elem, content) {\n\t\tif (nodeName(elem, \"table\") &&\n\t\t\tnodeName(content.nodeType !== 11 ? content : content.firstChild, \"tr\")) {\n\n\t\t\treturn jQuery(elem).children(\"tbody\")[0] || elem;\n\t\t}\n\n\t\treturn elem;\n\t}\n\n\t// Replace/restore the type attribute of script elements for safe DOM manipulation\n\tfunction disableScript(elem) {\n\t\telem.type = (elem.getAttribute(\"type\") !== null) + \"/\" + elem.type;\n\t\treturn elem;\n\t}\n\tfunction restoreScript(elem) {\n\t\tif ((elem.type || \"\").slice(0, 5) === \"true/\") {\n\t\t\telem.type = elem.type.slice(5);\n\t\t} else {\n\t\t\telem.removeAttribute(\"type\");\n\t\t}\n\n\t\treturn elem;\n\t}\n\n\tfunction cloneCopyEvent(src, dest) {\n\t\tvar i, l, type, pdataOld, udataOld, udataCur, events;\n\n\t\tif (dest.nodeType !== 1) {\n\t\t\treturn;\n\t\t}\n\n\t\t// 1. Copy private data: events, handlers, etc.\n\t\tif (dataPriv.hasData(src)) {\n\t\t\tpdataOld = dataPriv.get(src);\n\t\t\tevents = pdataOld.events;\n\n\t\t\tif (events) {\n\t\t\t\tdataPriv.remove(dest, \"handle events\");\n\n\t\t\t\tfor (type in events) {\n\t\t\t\t\tfor (i = 0, l = events[type].length; i < l; i++) {\n\t\t\t\t\t\tjQuery.event.add(dest, type, events[type][i]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// 2. Copy user data\n\t\tif (dataUser.hasData(src)) {\n\t\t\tudataOld = dataUser.access(src);\n\t\t\tudataCur = jQuery.extend({}, udataOld);\n\n\t\t\tdataUser.set(dest, udataCur);\n\t\t}\n\t}\n\n\t// Fix IE bugs, see support tests\n\tfunction fixInput(src, dest) {\n\t\tvar nodeName = dest.nodeName.toLowerCase();\n\n\t\t// Fails to persist the checked state of a cloned checkbox or radio button.\n\t\tif (nodeName === \"input\" && rcheckableType.test(src.type)) {\n\t\t\tdest.checked = src.checked;\n\n\t\t\t// Fails to return the selected option to the default selected state when cloning options\n\t\t} else if (nodeName === \"input\" || nodeName === \"textarea\") {\n\t\t\tdest.defaultValue = src.defaultValue;\n\t\t}\n\t}\n\n\tfunction domManip(collection, args, callback, ignored) {\n\n\t\t// Flatten any nested arrays\n\t\targs = flat(args);\n\n\t\tvar fragment, first, scripts, hasScripts, node, doc,\n\t\t\ti = 0,\n\t\t\tl = collection.length,\n\t\t\tiNoClone = l - 1,\n\t\t\tvalue = args[0],\n\t\t\tvalueIsFunction = isFunction(value);\n\n\t\t// We can't cloneNode fragments that contain checked, in WebKit\n\t\tif (valueIsFunction ||\n\t\t\t(l > 1 && typeof value === \"string\" &&\n\t\t\t\t!support.checkClone && rchecked.test(value))) {\n\t\t\treturn collection.each(function (index) {\n\t\t\t\tvar self = collection.eq(index);\n\t\t\t\tif (valueIsFunction) {\n\t\t\t\t\targs[0] = value.call(this, index, self.html());\n\t\t\t\t}\n\t\t\t\tdomManip(self, args, callback, ignored);\n\t\t\t});\n\t\t}\n\n\t\tif (l) {\n\t\t\tfragment = buildFragment(args, collection[0].ownerDocument, false, collection, ignored);\n\t\t\tfirst = fragment.firstChild;\n\n\t\t\tif (fragment.childNodes.length === 1) {\n\t\t\t\tfragment = first;\n\t\t\t}\n\n\t\t\t// Require either new content or an interest in ignored elements to invoke the callback\n\t\t\tif (first || ignored) {\n\t\t\t\tscripts = jQuery.map(getAll(fragment, \"script\"), disableScript);\n\t\t\t\thasScripts = scripts.length;\n\n\t\t\t\t// Use the original fragment for the last item\n\t\t\t\t// instead of the first because it can end up\n\t\t\t\t// being emptied incorrectly in certain situations (trac-8070).\n\t\t\t\tfor (; i < l; i++) {\n\t\t\t\t\tnode = fragment;\n\n\t\t\t\t\tif (i !== iNoClone) {\n\t\t\t\t\t\tnode = jQuery.clone(node, true, true);\n\n\t\t\t\t\t\t// Keep references to cloned scripts for later restoration\n\t\t\t\t\t\tif (hasScripts) {\n\n\t\t\t\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\t\t\t\tjQuery.merge(scripts, getAll(node, \"script\"));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tcallback.call(collection[i], node, i);\n\t\t\t\t}\n\n\t\t\t\tif (hasScripts) {\n\t\t\t\t\tdoc = scripts[scripts.length - 1].ownerDocument;\n\n\t\t\t\t\t// Reenable scripts\n\t\t\t\t\tjQuery.map(scripts, restoreScript);\n\n\t\t\t\t\t// Evaluate executable scripts on first document insertion\n\t\t\t\t\tfor (i = 0; i < hasScripts; i++) {\n\t\t\t\t\t\tnode = scripts[i];\n\t\t\t\t\t\tif (rscriptType.test(node.type || \"\") &&\n\t\t\t\t\t\t\t!dataPriv.access(node, \"globalEval\") &&\n\t\t\t\t\t\t\tjQuery.contains(doc, node)) {\n\n\t\t\t\t\t\t\tif (node.src && (node.type || \"\").toLowerCase() !== \"module\") {\n\n\t\t\t\t\t\t\t\t// Optional AJAX dependency, but won't run scripts if not present\n\t\t\t\t\t\t\t\tif (jQuery._evalUrl && !node.noModule) {\n\t\t\t\t\t\t\t\t\tjQuery._evalUrl(node.src, {\n\t\t\t\t\t\t\t\t\t\tnonce: node.nonce || node.getAttribute(\"nonce\")\n\t\t\t\t\t\t\t\t\t}, doc);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t// Unwrap a CDATA section containing script contents. This shouldn't be\n\t\t\t\t\t\t\t\t// needed as in XML documents they're already not visible when\n\t\t\t\t\t\t\t\t// inspecting element contents and in HTML documents they have no\n\t\t\t\t\t\t\t\t// meaning but we're preserving that logic for backwards compatibility.\n\t\t\t\t\t\t\t\t// This will be removed completely in 4.0. See gh-4904.\n\t\t\t\t\t\t\t\tDOMEval(node.textContent.replace(rcleanScript, \"\"), node, doc);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn collection;\n\t}\n\n\tfunction remove(elem, selector, keepData) {\n\t\tvar node,\n\t\t\tnodes = selector ? jQuery.filter(selector, elem) : elem,\n\t\t\ti = 0;\n\n\t\tfor (; (node = nodes[i]) != null; i++) {\n\t\t\tif (!keepData && node.nodeType === 1) {\n\t\t\t\tjQuery.cleanData(getAll(node));\n\t\t\t}\n\n\t\t\tif (node.parentNode) {\n\t\t\t\tif (keepData && isAttached(node)) {\n\t\t\t\t\tsetGlobalEval(getAll(node, \"script\"));\n\t\t\t\t}\n\t\t\t\tnode.parentNode.removeChild(node);\n\t\t\t}\n\t\t}\n\n\t\treturn elem;\n\t}\n\n\tjQuery.extend({\n\t\thtmlPrefilter: function (html) {\n\t\t\treturn html;\n\t\t},\n\n\t\tclone: function (elem, dataAndEvents, deepDataAndEvents) {\n\t\t\tvar i, l, srcElements, destElements,\n\t\t\t\tclone = elem.cloneNode(true),\n\t\t\t\tinPage = isAttached(elem);\n\n\t\t\t// Fix IE cloning issues\n\t\t\tif (!support.noCloneChecked && (elem.nodeType === 1 || elem.nodeType === 11) &&\n\t\t\t\t!jQuery.isXMLDoc(elem)) {\n\n\t\t\t\t// We eschew jQuery#find here for performance reasons:\n\t\t\t\t// https://jsperf.com/getall-vs-sizzle/2\n\t\t\t\tdestElements = getAll(clone);\n\t\t\t\tsrcElements = getAll(elem);\n\n\t\t\t\tfor (i = 0, l = srcElements.length; i < l; i++) {\n\t\t\t\t\tfixInput(srcElements[i], destElements[i]);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Copy the events from the original to the clone\n\t\t\tif (dataAndEvents) {\n\t\t\t\tif (deepDataAndEvents) {\n\t\t\t\t\tsrcElements = srcElements || getAll(elem);\n\t\t\t\t\tdestElements = destElements || getAll(clone);\n\n\t\t\t\t\tfor (i = 0, l = srcElements.length; i < l; i++) {\n\t\t\t\t\t\tcloneCopyEvent(srcElements[i], destElements[i]);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tcloneCopyEvent(elem, clone);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Preserve script evaluation history\n\t\t\tdestElements = getAll(clone, \"script\");\n\t\t\tif (destElements.length > 0) {\n\t\t\t\tsetGlobalEval(destElements, !inPage && getAll(elem, \"script\"));\n\t\t\t}\n\n\t\t\t// Return the cloned set\n\t\t\treturn clone;\n\t\t},\n\n\t\tcleanData: function (elems) {\n\t\t\tvar data, elem, type,\n\t\t\t\tspecial = jQuery.event.special,\n\t\t\t\ti = 0;\n\n\t\t\tfor (; (elem = elems[i]) !== undefined; i++) {\n\t\t\t\tif (acceptData(elem)) {\n\t\t\t\t\tif ((data = elem[dataPriv.expando])) {\n\t\t\t\t\t\tif (data.events) {\n\t\t\t\t\t\t\tfor (type in data.events) {\n\t\t\t\t\t\t\t\tif (special[type]) {\n\t\t\t\t\t\t\t\t\tjQuery.event.remove(elem, type);\n\n\t\t\t\t\t\t\t\t\t// This is a shortcut to avoid jQuery.event.remove's overhead\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tjQuery.removeEvent(elem, type, data.handle);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\t\telem[dataPriv.expando] = undefined;\n\t\t\t\t\t}\n\t\t\t\t\tif (elem[dataUser.expando]) {\n\n\t\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\t\telem[dataUser.expando] = undefined;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\n\tjQuery.fn.extend({\n\t\tdetach: function (selector) {\n\t\t\treturn remove(this, selector, true);\n\t\t},\n\n\t\tremove: function (selector) {\n\t\t\treturn remove(this, selector);\n\t\t},\n\n\t\ttext: function (value) {\n\t\t\treturn access(this, function (value) {\n\t\t\t\treturn value === undefined ?\n\t\t\t\t\tjQuery.text(this) :\n\t\t\t\t\tthis.empty().each(function () {\n\t\t\t\t\t\tif (this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9) {\n\t\t\t\t\t\t\tthis.textContent = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t}, null, value, arguments.length);\n\t\t},\n\n\t\tappend: function () {\n\t\t\treturn domManip(this, arguments, function (elem) {\n\t\t\t\tif (this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9) {\n\t\t\t\t\tvar target = manipulationTarget(this, elem);\n\t\t\t\t\ttarget.appendChild(elem);\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\tprepend: function () {\n\t\t\treturn domManip(this, arguments, function (elem) {\n\t\t\t\tif (this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9) {\n\t\t\t\t\tvar target = manipulationTarget(this, elem);\n\t\t\t\t\ttarget.insertBefore(elem, target.firstChild);\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\tbefore: function () {\n\t\t\treturn domManip(this, arguments, function (elem) {\n\t\t\t\tif (this.parentNode) {\n\t\t\t\t\tthis.parentNode.insertBefore(elem, this);\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\tafter: function () {\n\t\t\treturn domManip(this, arguments, function (elem) {\n\t\t\t\tif (this.parentNode) {\n\t\t\t\t\tthis.parentNode.insertBefore(elem, this.nextSibling);\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\tempty: function () {\n\t\t\tvar elem,\n\t\t\t\ti = 0;\n\n\t\t\tfor (; (elem = this[i]) != null; i++) {\n\t\t\t\tif (elem.nodeType === 1) {\n\n\t\t\t\t\t// Prevent memory leaks\n\t\t\t\t\tjQuery.cleanData(getAll(elem, false));\n\n\t\t\t\t\t// Remove any remaining nodes\n\t\t\t\t\telem.textContent = \"\";\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn this;\n\t\t},\n\n\t\tclone: function (dataAndEvents, deepDataAndEvents) {\n\t\t\tdataAndEvents = dataAndEvents == null ? false : dataAndEvents;\n\t\t\tdeepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;\n\n\t\t\treturn this.map(function () {\n\t\t\t\treturn jQuery.clone(this, dataAndEvents, deepDataAndEvents);\n\t\t\t});\n\t\t},\n\n\t\thtml: function (value) {\n\t\t\treturn access(this, function (value) {\n\t\t\t\tvar elem = this[0] || {},\n\t\t\t\t\ti = 0,\n\t\t\t\t\tl = this.length;\n\n\t\t\t\tif (value === undefined && elem.nodeType === 1) {\n\t\t\t\t\treturn elem.innerHTML;\n\t\t\t\t}\n\n\t\t\t\t// See if we can take a shortcut and just use innerHTML\n\t\t\t\tif (typeof value === \"string\" && !rnoInnerhtml.test(value) &&\n\t\t\t\t\t!wrapMap[(rtagName.exec(value) || [\"\", \"\"])[1].toLowerCase()]) {\n\n\t\t\t\t\tvalue = jQuery.htmlPrefilter(value);\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tfor (; i < l; i++) {\n\t\t\t\t\t\t\telem = this[i] || {};\n\n\t\t\t\t\t\t\t// Remove element nodes and prevent memory leaks\n\t\t\t\t\t\t\tif (elem.nodeType === 1) {\n\t\t\t\t\t\t\t\tjQuery.cleanData(getAll(elem, false));\n\t\t\t\t\t\t\t\telem.innerHTML = value;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\telem = 0;\n\n\t\t\t\t\t\t// If using innerHTML throws an exception, use the fallback method\n\t\t\t\t\t} catch (e) { }\n\t\t\t\t}\n\n\t\t\t\tif (elem) {\n\t\t\t\t\tthis.empty().append(value);\n\t\t\t\t}\n\t\t\t}, null, value, arguments.length);\n\t\t},\n\n\t\treplaceWith: function () {\n\t\t\tvar ignored = [];\n\n\t\t\t// Make the changes, replacing each non-ignored context element with the new content\n\t\t\treturn domManip(this, arguments, function (elem) {\n\t\t\t\tvar parent = this.parentNode;\n\n\t\t\t\tif (jQuery.inArray(this, ignored) < 0) {\n\t\t\t\t\tjQuery.cleanData(getAll(this));\n\t\t\t\t\tif (parent) {\n\t\t\t\t\t\tparent.replaceChild(elem, this);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Force callback invocation\n\t\t\t}, ignored);\n\t\t}\n\t});\n\n\tjQuery.each({\n\t\tappendTo: \"append\",\n\t\tprependTo: \"prepend\",\n\t\tinsertBefore: \"before\",\n\t\tinsertAfter: \"after\",\n\t\treplaceAll: \"replaceWith\"\n\t}, function (name, original) {\n\t\tjQuery.fn[name] = function (selector) {\n\t\t\tvar elems,\n\t\t\t\tret = [],\n\t\t\t\tinsert = jQuery(selector),\n\t\t\t\tlast = insert.length - 1,\n\t\t\t\ti = 0;\n\n\t\t\tfor (; i <= last; i++) {\n\t\t\t\telems = i === last ? this : this.clone(true);\n\t\t\t\tjQuery(insert[i])[original](elems);\n\n\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t// .get() because push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\tpush.apply(ret, elems.get());\n\t\t\t}\n\n\t\t\treturn this.pushStack(ret);\n\t\t};\n\t});\n\tvar rnumnonpx = new RegExp(\"^(\" + pnum + \")(?!px)[a-z%]+$\", \"i\");\n\n\tvar rcustomProp = /^--/;\n\n\n\tvar getStyles = function (elem) {\n\n\t\t// Support: IE <=11 only, Firefox <=30 (trac-15098, trac-14150)\n\t\t// IE throws on elements created in popups\n\t\t// FF meanwhile throws on frame elements through \"defaultView.getComputedStyle\"\n\t\tvar view = elem.ownerDocument.defaultView;\n\n\t\tif (!view || !view.opener) {\n\t\t\tview = window;\n\t\t}\n\n\t\treturn view.getComputedStyle(elem);\n\t};\n\n\tvar swap = function (elem, options, callback) {\n\t\tvar ret, name,\n\t\t\told = {};\n\n\t\t// Remember the old values, and insert the new ones\n\t\tfor (name in options) {\n\t\t\told[name] = elem.style[name];\n\t\t\telem.style[name] = options[name];\n\t\t}\n\n\t\tret = callback.call(elem);\n\n\t\t// Revert the old values\n\t\tfor (name in options) {\n\t\t\telem.style[name] = old[name];\n\t\t}\n\n\t\treturn ret;\n\t};\n\n\n\tvar rboxStyle = new RegExp(cssExpand.join(\"|\"), \"i\");\n\n\n\n\t(function () {\n\n\t\t// Executing both pixelPosition & boxSizingReliable tests require only one layout\n\t\t// so they're executed at the same time to save the second computation.\n\t\tfunction computeStyleTests() {\n\n\t\t\t// This is a singleton, we need to execute it only once\n\t\t\tif (!div) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tcontainer.style.cssText = \"position:absolute;left:-11111px;width:60px;\" +\n\t\t\t\t\"margin-top:1px;padding:0;border:0\";\n\t\t\tdiv.style.cssText =\n\t\t\t\t\"position:relative;display:block;box-sizing:border-box;overflow:scroll;\" +\n\t\t\t\t\"margin:auto;border:1px;padding:1px;\" +\n\t\t\t\t\"width:60%;top:1%\";\n\t\t\tdocumentElement.appendChild(container).appendChild(div);\n\n\t\t\tvar divStyle = window.getComputedStyle(div);\n\t\t\tpixelPositionVal = divStyle.top !== \"1%\";\n\n\t\t\t// Support: Android 4.0 - 4.3 only, Firefox <=3 - 44\n\t\t\treliableMarginLeftVal = roundPixelMeasures(divStyle.marginLeft) === 12;\n\n\t\t\t// Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3\n\t\t\t// Some styles come back with percentage values, even though they shouldn't\n\t\t\tdiv.style.right = \"60%\";\n\t\t\tpixelBoxStylesVal = roundPixelMeasures(divStyle.right) === 36;\n\n\t\t\t// Support: IE 9 - 11 only\n\t\t\t// Detect misreporting of content dimensions for box-sizing:border-box elements\n\t\t\tboxSizingReliableVal = roundPixelMeasures(divStyle.width) === 36;\n\n\t\t\t// Support: IE 9 only\n\t\t\t// Detect overflow:scroll screwiness (gh-3699)\n\t\t\t// Support: Chrome <=64\n\t\t\t// Don't get tricked when zoom affects offsetWidth (gh-4029)\n\t\t\tdiv.style.position = \"absolute\";\n\t\t\tscrollboxSizeVal = roundPixelMeasures(div.offsetWidth / 3) === 12;\n\n\t\t\tdocumentElement.removeChild(container);\n\n\t\t\t// Nullify the div so it wouldn't be stored in the memory and\n\t\t\t// it will also be a sign that checks already performed\n\t\t\tdiv = null;\n\t\t}\n\n\t\tfunction roundPixelMeasures(measure) {\n\t\t\treturn Math.round(parseFloat(measure));\n\t\t}\n\n\t\tvar pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal,\n\t\t\treliableTrDimensionsVal, reliableMarginLeftVal,\n\t\t\tcontainer = document.createElement(\"div\"),\n\t\t\tdiv = document.createElement(\"div\");\n\n\t\t// Finish early in limited (non-browser) environments\n\t\tif (!div.style) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Support: IE <=9 - 11 only\n\t\t// Style of cloned element affects source element cloned (trac-8908)\n\t\tdiv.style.backgroundClip = \"content-box\";\n\t\tdiv.cloneNode(true).style.backgroundClip = \"\";\n\t\tsupport.clearCloneStyle = div.style.backgroundClip === \"content-box\";\n\n\t\tjQuery.extend(support, {\n\t\t\tboxSizingReliable: function () {\n\t\t\t\tcomputeStyleTests();\n\t\t\t\treturn boxSizingReliableVal;\n\t\t\t},\n\t\t\tpixelBoxStyles: function () {\n\t\t\t\tcomputeStyleTests();\n\t\t\t\treturn pixelBoxStylesVal;\n\t\t\t},\n\t\t\tpixelPosition: function () {\n\t\t\t\tcomputeStyleTests();\n\t\t\t\treturn pixelPositionVal;\n\t\t\t},\n\t\t\treliableMarginLeft: function () {\n\t\t\t\tcomputeStyleTests();\n\t\t\t\treturn reliableMarginLeftVal;\n\t\t\t},\n\t\t\tscrollboxSize: function () {\n\t\t\t\tcomputeStyleTests();\n\t\t\t\treturn scrollboxSizeVal;\n\t\t\t},\n\n\t\t\t// Support: IE 9 - 11+, Edge 15 - 18+\n\t\t\t// IE/Edge misreport `getComputedStyle` of table rows with width/height\n\t\t\t// set in CSS while `offset*` properties report correct values.\n\t\t\t// Behavior in IE 9 is more subtle than in newer versions & it passes\n\t\t\t// some versions of this test; make sure not to make it pass there!\n\t\t\t//\n\t\t\t// Support: Firefox 70+\n\t\t\t// Only Firefox includes border widths\n\t\t\t// in computed dimensions. (gh-4529)\n\t\t\treliableTrDimensions: function () {\n\t\t\t\tvar table, tr, trChild, trStyle;\n\t\t\t\tif (reliableTrDimensionsVal == null) {\n\t\t\t\t\ttable = document.createElement(\"table\");\n\t\t\t\t\ttr = document.createElement(\"tr\");\n\t\t\t\t\ttrChild = document.createElement(\"div\");\n\n\t\t\t\t\ttable.style.cssText = \"position:absolute;left:-11111px;border-collapse:separate\";\n\t\t\t\t\ttr.style.cssText = \"border:1px solid\";\n\n\t\t\t\t\t// Support: Chrome 86+\n\t\t\t\t\t// Height set through cssText does not get applied.\n\t\t\t\t\t// Computed height then comes back as 0.\n\t\t\t\t\ttr.style.height = \"1px\";\n\t\t\t\t\ttrChild.style.height = \"9px\";\n\n\t\t\t\t\t// Support: Android 8 Chrome 86+\n\t\t\t\t\t// In our bodyBackground.html iframe,\n\t\t\t\t\t// display for all div elements is set to \"inline\",\n\t\t\t\t\t// which causes a problem only in Android 8 Chrome 86.\n\t\t\t\t\t// Ensuring the div is display: block\n\t\t\t\t\t// gets around this issue.\n\t\t\t\t\ttrChild.style.display = \"block\";\n\n\t\t\t\t\tdocumentElement\n\t\t\t\t\t\t.appendChild(table)\n\t\t\t\t\t\t.appendChild(tr)\n\t\t\t\t\t\t.appendChild(trChild);\n\n\t\t\t\t\ttrStyle = window.getComputedStyle(tr);\n\t\t\t\t\treliableTrDimensionsVal = (parseInt(trStyle.height, 10) +\n\t\t\t\t\t\tparseInt(trStyle.borderTopWidth, 10) +\n\t\t\t\t\t\tparseInt(trStyle.borderBottomWidth, 10)) === tr.offsetHeight;\n\n\t\t\t\t\tdocumentElement.removeChild(table);\n\t\t\t\t}\n\t\t\t\treturn reliableTrDimensionsVal;\n\t\t\t}\n\t\t});\n\t})();\n\n\n\tfunction curCSS(elem, name, computed) {\n\t\tvar width, minWidth, maxWidth, ret,\n\t\t\tisCustomProp = rcustomProp.test(name),\n\n\t\t\t// Support: Firefox 51+\n\t\t\t// Retrieving style before computed somehow\n\t\t\t// fixes an issue with getting wrong values\n\t\t\t// on detached elements\n\t\t\tstyle = elem.style;\n\n\t\tcomputed = computed || getStyles(elem);\n\n\t\t// getPropertyValue is needed for:\n\t\t//   .css('filter') (IE 9 only, trac-12537)\n\t\t//   .css('--customProperty) (gh-3144)\n\t\tif (computed) {\n\n\t\t\t// Support: IE <=9 - 11+\n\t\t\t// IE only supports `\"float\"` in `getPropertyValue`; in computed styles\n\t\t\t// it's only available as `\"cssFloat\"`. We no longer modify properties\n\t\t\t// sent to `.css()` apart from camelCasing, so we need to check both.\n\t\t\t// Normally, this would create difference in behavior: if\n\t\t\t// `getPropertyValue` returns an empty string, the value returned\n\t\t\t// by `.css()` would be `undefined`. This is usually the case for\n\t\t\t// disconnected elements. However, in IE even disconnected elements\n\t\t\t// with no styles return `\"none\"` for `getPropertyValue( \"float\" )`\n\t\t\tret = computed.getPropertyValue(name) || computed[name];\n\n\t\t\tif (isCustomProp && ret) {\n\n\t\t\t\t// Support: Firefox 105+, Chrome <=105+\n\t\t\t\t// Spec requires trimming whitespace for custom properties (gh-4926).\n\t\t\t\t// Firefox only trims leading whitespace. Chrome just collapses\n\t\t\t\t// both leading & trailing whitespace to a single space.\n\t\t\t\t//\n\t\t\t\t// Fall back to `undefined` if empty string returned.\n\t\t\t\t// This collapses a missing definition with property defined\n\t\t\t\t// and set to an empty string but there's no standard API\n\t\t\t\t// allowing us to differentiate them without a performance penalty\n\t\t\t\t// and returning `undefined` aligns with older jQuery.\n\t\t\t\t//\n\t\t\t\t// rtrimCSS treats U+000D CARRIAGE RETURN and U+000C FORM FEED\n\t\t\t\t// as whitespace while CSS does not, but this is not a problem\n\t\t\t\t// because CSS preprocessing replaces them with U+000A LINE FEED\n\t\t\t\t// (which *is* CSS whitespace)\n\t\t\t\t// https://www.w3.org/TR/css-syntax-3/#input-preprocessing\n\t\t\t\tret = ret.replace(rtrimCSS, \"$1\") || undefined;\n\t\t\t}\n\n\t\t\tif (ret === \"\" && !isAttached(elem)) {\n\t\t\t\tret = jQuery.style(elem, name);\n\t\t\t}\n\n\t\t\t// A tribute to the \"awesome hack by Dean Edwards\"\n\t\t\t// Android Browser returns percentage for some values,\n\t\t\t// but width seems to be reliably pixels.\n\t\t\t// This is against the CSSOM draft spec:\n\t\t\t// https://drafts.csswg.org/cssom/#resolved-values\n\t\t\tif (!support.pixelBoxStyles() && rnumnonpx.test(ret) && rboxStyle.test(name)) {\n\n\t\t\t\t// Remember the original values\n\t\t\t\twidth = style.width;\n\t\t\t\tminWidth = style.minWidth;\n\t\t\t\tmaxWidth = style.maxWidth;\n\n\t\t\t\t// Put in the new values to get a computed value out\n\t\t\t\tstyle.minWidth = style.maxWidth = style.width = ret;\n\t\t\t\tret = computed.width;\n\n\t\t\t\t// Revert the changed values\n\t\t\t\tstyle.width = width;\n\t\t\t\tstyle.minWidth = minWidth;\n\t\t\t\tstyle.maxWidth = maxWidth;\n\t\t\t}\n\t\t}\n\n\t\treturn ret !== undefined ?\n\n\t\t\t// Support: IE <=9 - 11 only\n\t\t\t// IE returns zIndex value as an integer.\n\t\t\tret + \"\" :\n\t\t\tret;\n\t}\n\n\n\tfunction addGetHookIf(conditionFn, hookFn) {\n\n\t\t// Define the hook, we'll check on the first run if it's really needed.\n\t\treturn {\n\t\t\tget: function () {\n\t\t\t\tif (conditionFn()) {\n\n\t\t\t\t\t// Hook not needed (or it's not possible to use it due\n\t\t\t\t\t// to missing dependency), remove it.\n\t\t\t\t\tdelete this.get;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Hook needed; redefine it so that the support test is not executed again.\n\t\t\t\treturn (this.get = hookFn).apply(this, arguments);\n\t\t\t}\n\t\t};\n\t}\n\n\n\tvar cssPrefixes = [\"Webkit\", \"Moz\", \"ms\"],\n\t\temptyStyle = document.createElement(\"div\").style,\n\t\tvendorProps = {};\n\n\t// Return a vendor-prefixed property or undefined\n\tfunction vendorPropName(name) {\n\n\t\t// Check for vendor prefixed names\n\t\tvar capName = name[0].toUpperCase() + name.slice(1),\n\t\t\ti = cssPrefixes.length;\n\n\t\twhile (i--) {\n\t\t\tname = cssPrefixes[i] + capName;\n\t\t\tif (name in emptyStyle) {\n\t\t\t\treturn name;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return a potentially-mapped jQuery.cssProps or vendor prefixed property\n\tfunction finalPropName(name) {\n\t\tvar final = jQuery.cssProps[name] || vendorProps[name];\n\n\t\tif (final) {\n\t\t\treturn final;\n\t\t}\n\t\tif (name in emptyStyle) {\n\t\t\treturn name;\n\t\t}\n\t\treturn vendorProps[name] = vendorPropName(name) || name;\n\t}\n\n\n\tvar\n\n\t\t// Swappable if display is none or starts with table\n\t\t// except \"table\", \"table-cell\", or \"table-caption\"\n\t\t// See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display\n\t\trdisplayswap = /^(none|table(?!-c[ea]).+)/,\n\t\tcssShow = { position: \"absolute\", visibility: \"hidden\", display: \"block\" },\n\t\tcssNormalTransform = {\n\t\t\tletterSpacing: \"0\",\n\t\t\tfontWeight: \"400\"\n\t\t};\n\n\tfunction setPositiveNumber(_elem, value, subtract) {\n\n\t\t// Any relative (+/-) values have already been\n\t\t// normalized at this point\n\t\tvar matches = rcssNum.exec(value);\n\t\treturn matches ?\n\n\t\t\t// Guard against undefined \"subtract\", e.g., when used as in cssHooks\n\t\t\tMath.max(0, matches[2] - (subtract || 0)) + (matches[3] || \"px\") :\n\t\t\tvalue;\n\t}\n\n\tfunction boxModelAdjustment(elem, dimension, box, isBorderBox, styles, computedVal) {\n\t\tvar i = dimension === \"width\" ? 1 : 0,\n\t\t\textra = 0,\n\t\t\tdelta = 0,\n\t\t\tmarginDelta = 0;\n\n\t\t// Adjustment may not be necessary\n\t\tif (box === (isBorderBox ? \"border\" : \"content\")) {\n\t\t\treturn 0;\n\t\t}\n\n\t\tfor (; i < 4; i += 2) {\n\n\t\t\t// Both box models exclude margin\n\t\t\t// Count margin delta separately to only add it after scroll gutter adjustment.\n\t\t\t// This is needed to make negative margins work with `outerHeight( true )` (gh-3982).\n\t\t\tif (box === \"margin\") {\n\t\t\t\tmarginDelta += jQuery.css(elem, box + cssExpand[i], true, styles);\n\t\t\t}\n\n\t\t\t// If we get here with a content-box, we're seeking \"padding\" or \"border\" or \"margin\"\n\t\t\tif (!isBorderBox) {\n\n\t\t\t\t// Add padding\n\t\t\t\tdelta += jQuery.css(elem, \"padding\" + cssExpand[i], true, styles);\n\n\t\t\t\t// For \"border\" or \"margin\", add border\n\t\t\t\tif (box !== \"padding\") {\n\t\t\t\t\tdelta += jQuery.css(elem, \"border\" + cssExpand[i] + \"Width\", true, styles);\n\n\t\t\t\t\t// But still keep track of it otherwise\n\t\t\t\t} else {\n\t\t\t\t\textra += jQuery.css(elem, \"border\" + cssExpand[i] + \"Width\", true, styles);\n\t\t\t\t}\n\n\t\t\t\t// If we get here with a border-box (content + padding + border), we're seeking \"content\" or\n\t\t\t\t// \"padding\" or \"margin\"\n\t\t\t} else {\n\n\t\t\t\t// For \"content\", subtract padding\n\t\t\t\tif (box === \"content\") {\n\t\t\t\t\tdelta -= jQuery.css(elem, \"padding\" + cssExpand[i], true, styles);\n\t\t\t\t}\n\n\t\t\t\t// For \"content\" or \"padding\", subtract border\n\t\t\t\tif (box !== \"margin\") {\n\t\t\t\t\tdelta -= jQuery.css(elem, \"border\" + cssExpand[i] + \"Width\", true, styles);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Account for positive content-box scroll gutter when requested by providing computedVal\n\t\tif (!isBorderBox && computedVal >= 0) {\n\n\t\t\t// offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border\n\t\t\t// Assuming integer scroll gutter, subtract the rest and round down\n\t\t\tdelta += Math.max(0, Math.ceil(\n\t\t\t\telem[\"offset\" + dimension[0].toUpperCase() + dimension.slice(1)] -\n\t\t\t\tcomputedVal -\n\t\t\t\tdelta -\n\t\t\t\textra -\n\t\t\t\t0.5\n\n\t\t\t\t// If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter\n\t\t\t\t// Use an explicit zero to avoid NaN (gh-3964)\n\t\t\t)) || 0;\n\t\t}\n\n\t\treturn delta + marginDelta;\n\t}\n\n\tfunction getWidthOrHeight(elem, dimension, extra) {\n\n\t\t// Start with computed style\n\t\tvar styles = getStyles(elem),\n\n\t\t\t// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322).\n\t\t\t// Fake content-box until we know it's needed to know the true value.\n\t\t\tboxSizingNeeded = !support.boxSizingReliable() || extra,\n\t\t\tisBorderBox = boxSizingNeeded &&\n\t\t\t\tjQuery.css(elem, \"boxSizing\", false, styles) === \"border-box\",\n\t\t\tvalueIsBorderBox = isBorderBox,\n\n\t\t\tval = curCSS(elem, dimension, styles),\n\t\t\toffsetProp = \"offset\" + dimension[0].toUpperCase() + dimension.slice(1);\n\n\t\t// Support: Firefox <=54\n\t\t// Return a confounding non-pixel value or feign ignorance, as appropriate.\n\t\tif (rnumnonpx.test(val)) {\n\t\t\tif (!extra) {\n\t\t\t\treturn val;\n\t\t\t}\n\t\t\tval = \"auto\";\n\t\t}\n\n\n\t\t// Support: IE 9 - 11 only\n\t\t// Use offsetWidth/offsetHeight for when box sizing is unreliable.\n\t\t// In those cases, the computed value can be trusted to be border-box.\n\t\tif ((!support.boxSizingReliable() && isBorderBox ||\n\n\t\t\t// Support: IE 10 - 11+, Edge 15 - 18+\n\t\t\t// IE/Edge misreport `getComputedStyle` of table rows with width/height\n\t\t\t// set in CSS while `offset*` properties report correct values.\n\t\t\t// Interestingly, in some cases IE 9 doesn't suffer from this issue.\n\t\t\t!support.reliableTrDimensions() && nodeName(elem, \"tr\") ||\n\n\t\t\t// Fall back to offsetWidth/offsetHeight when value is \"auto\"\n\t\t\t// This happens for inline elements with no explicit setting (gh-3571)\n\t\t\tval === \"auto\" ||\n\n\t\t\t// Support: Android <=4.1 - 4.3 only\n\t\t\t// Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602)\n\t\t\t!parseFloat(val) && jQuery.css(elem, \"display\", false, styles) === \"inline\") &&\n\n\t\t\t// Make sure the element is visible & connected\n\t\t\telem.getClientRects().length) {\n\n\t\t\tisBorderBox = jQuery.css(elem, \"boxSizing\", false, styles) === \"border-box\";\n\n\t\t\t// Where available, offsetWidth/offsetHeight approximate border box dimensions.\n\t\t\t// Where not available (e.g., SVG), assume unreliable box-sizing and interpret the\n\t\t\t// retrieved value as a content box dimension.\n\t\t\tvalueIsBorderBox = offsetProp in elem;\n\t\t\tif (valueIsBorderBox) {\n\t\t\t\tval = elem[offsetProp];\n\t\t\t}\n\t\t}\n\n\t\t// Normalize \"\" and auto\n\t\tval = parseFloat(val) || 0;\n\n\t\t// Adjust for the element's box model\n\t\treturn (val +\n\t\t\tboxModelAdjustment(\n\t\t\t\telem,\n\t\t\t\tdimension,\n\t\t\t\textra || (isBorderBox ? \"border\" : \"content\"),\n\t\t\t\tvalueIsBorderBox,\n\t\t\t\tstyles,\n\n\t\t\t\t// Provide the current computed size to request scroll gutter calculation (gh-3589)\n\t\t\t\tval\n\t\t\t)\n\t\t) + \"px\";\n\t}\n\n\tjQuery.extend({\n\n\t\t// Add in style property hooks for overriding the default\n\t\t// behavior of getting and setting a style property\n\t\tcssHooks: {\n\t\t\topacity: {\n\t\t\t\tget: function (elem, computed) {\n\t\t\t\t\tif (computed) {\n\n\t\t\t\t\t\t// We should always get a number back from opacity\n\t\t\t\t\t\tvar ret = curCSS(elem, \"opacity\");\n\t\t\t\t\t\treturn ret === \"\" ? \"1\" : ret;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t// Don't automatically add \"px\" to these possibly-unitless properties\n\t\tcssNumber: {\n\t\t\tanimationIterationCount: true,\n\t\t\taspectRatio: true,\n\t\t\tborderImageSlice: true,\n\t\t\tcolumnCount: true,\n\t\t\tflexGrow: true,\n\t\t\tflexShrink: true,\n\t\t\tfontWeight: true,\n\t\t\tgridArea: true,\n\t\t\tgridColumn: true,\n\t\t\tgridColumnEnd: true,\n\t\t\tgridColumnStart: true,\n\t\t\tgridRow: true,\n\t\t\tgridRowEnd: true,\n\t\t\tgridRowStart: true,\n\t\t\tlineHeight: true,\n\t\t\topacity: true,\n\t\t\torder: true,\n\t\t\torphans: true,\n\t\t\tscale: true,\n\t\t\twidows: true,\n\t\t\tzIndex: true,\n\t\t\tzoom: true,\n\n\t\t\t// SVG-related\n\t\t\tfillOpacity: true,\n\t\t\tfloodOpacity: true,\n\t\t\tstopOpacity: true,\n\t\t\tstrokeMiterlimit: true,\n\t\t\tstrokeOpacity: true\n\t\t},\n\n\t\t// Add in properties whose names you wish to fix before\n\t\t// setting or getting the value\n\t\tcssProps: {},\n\n\t\t// Get and set the style property on a DOM Node\n\t\tstyle: function (elem, name, value, extra) {\n\n\t\t\t// Don't set styles on text and comment nodes\n\t\t\tif (!elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Make sure that we're working with the right name\n\t\t\tvar ret, type, hooks,\n\t\t\t\torigName = camelCase(name),\n\t\t\t\tisCustomProp = rcustomProp.test(name),\n\t\t\t\tstyle = elem.style;\n\n\t\t\t// Make sure that we're working with the right name. We don't\n\t\t\t// want to query the value if it is a CSS custom property\n\t\t\t// since they are user-defined.\n\t\t\tif (!isCustomProp) {\n\t\t\t\tname = finalPropName(origName);\n\t\t\t}\n\n\t\t\t// Gets hook for the prefixed version, then unprefixed version\n\t\t\thooks = jQuery.cssHooks[name] || jQuery.cssHooks[origName];\n\n\t\t\t// Check if we're setting a value\n\t\t\tif (value !== undefined) {\n\t\t\t\ttype = typeof value;\n\n\t\t\t\t// Convert \"+=\" or \"-=\" to relative numbers (trac-7345)\n\t\t\t\tif (type === \"string\" && (ret = rcssNum.exec(value)) && ret[1]) {\n\t\t\t\t\tvalue = adjustCSS(elem, name, ret);\n\n\t\t\t\t\t// Fixes bug trac-9237\n\t\t\t\t\ttype = \"number\";\n\t\t\t\t}\n\n\t\t\t\t// Make sure that null and NaN values aren't set (trac-7116)\n\t\t\t\tif (value == null || value !== value) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// If a number was passed in, add the unit (except for certain CSS properties)\n\t\t\t\t// The isCustomProp check can be removed in jQuery 4.0 when we only auto-append\n\t\t\t\t// \"px\" to a few hardcoded values.\n\t\t\t\tif (type === \"number\" && !isCustomProp) {\n\t\t\t\t\tvalue += ret && ret[3] || (jQuery.cssNumber[origName] ? \"\" : \"px\");\n\t\t\t\t}\n\n\t\t\t\t// background-* props affect original clone's values\n\t\t\t\tif (!support.clearCloneStyle && value === \"\" && name.indexOf(\"background\") === 0) {\n\t\t\t\t\tstyle[name] = \"inherit\";\n\t\t\t\t}\n\n\t\t\t\t// If a hook was provided, use that value, otherwise just set the specified value\n\t\t\t\tif (!hooks || !(\"set\" in hooks) ||\n\t\t\t\t\t(value = hooks.set(elem, value, extra)) !== undefined) {\n\n\t\t\t\t\tif (isCustomProp) {\n\t\t\t\t\t\tstyle.setProperty(name, value);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tstyle[name] = value;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\t// If a hook was provided get the non-computed value from there\n\t\t\t\tif (hooks && \"get\" in hooks &&\n\t\t\t\t\t(ret = hooks.get(elem, false, extra)) !== undefined) {\n\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\n\t\t\t\t// Otherwise just get the value from the style object\n\t\t\t\treturn style[name];\n\t\t\t}\n\t\t},\n\n\t\tcss: function (elem, name, extra, styles) {\n\t\t\tvar val, num, hooks,\n\t\t\t\torigName = camelCase(name),\n\t\t\t\tisCustomProp = rcustomProp.test(name);\n\n\t\t\t// Make sure that we're working with the right name. We don't\n\t\t\t// want to modify the value if it is a CSS custom property\n\t\t\t// since they are user-defined.\n\t\t\tif (!isCustomProp) {\n\t\t\t\tname = finalPropName(origName);\n\t\t\t}\n\n\t\t\t// Try prefixed name followed by the unprefixed name\n\t\t\thooks = jQuery.cssHooks[name] || jQuery.cssHooks[origName];\n\n\t\t\t// If a hook was provided get the computed value from there\n\t\t\tif (hooks && \"get\" in hooks) {\n\t\t\t\tval = hooks.get(elem, true, extra);\n\t\t\t}\n\n\t\t\t// Otherwise, if a way to get the computed value exists, use that\n\t\t\tif (val === undefined) {\n\t\t\t\tval = curCSS(elem, name, styles);\n\t\t\t}\n\n\t\t\t// Convert \"normal\" to computed value\n\t\t\tif (val === \"normal\" && name in cssNormalTransform) {\n\t\t\t\tval = cssNormalTransform[name];\n\t\t\t}\n\n\t\t\t// Make numeric if forced or a qualifier was provided and val looks numeric\n\t\t\tif (extra === \"\" || extra) {\n\t\t\t\tnum = parseFloat(val);\n\t\t\t\treturn extra === true || isFinite(num) ? num || 0 : val;\n\t\t\t}\n\n\t\t\treturn val;\n\t\t}\n\t});\n\n\tjQuery.each([\"height\", \"width\"], function (_i, dimension) {\n\t\tjQuery.cssHooks[dimension] = {\n\t\t\tget: function (elem, computed, extra) {\n\t\t\t\tif (computed) {\n\n\t\t\t\t\t// Certain elements can have dimension info if we invisibly show them\n\t\t\t\t\t// but it must have a current display style that would benefit\n\t\t\t\t\treturn rdisplayswap.test(jQuery.css(elem, \"display\")) &&\n\n\t\t\t\t\t\t// Support: Safari 8+\n\t\t\t\t\t\t// Table columns in Safari have non-zero offsetWidth & zero\n\t\t\t\t\t\t// getBoundingClientRect().width unless display is changed.\n\t\t\t\t\t\t// Support: IE <=11 only\n\t\t\t\t\t\t// Running getBoundingClientRect on a disconnected node\n\t\t\t\t\t\t// in IE throws an error.\n\t\t\t\t\t\t(!elem.getClientRects().length || !elem.getBoundingClientRect().width) ?\n\t\t\t\t\t\tswap(elem, cssShow, function () {\n\t\t\t\t\t\t\treturn getWidthOrHeight(elem, dimension, extra);\n\t\t\t\t\t\t}) :\n\t\t\t\t\t\tgetWidthOrHeight(elem, dimension, extra);\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tset: function (elem, value, extra) {\n\t\t\t\tvar matches,\n\t\t\t\t\tstyles = getStyles(elem),\n\n\t\t\t\t\t// Only read styles.position if the test has a chance to fail\n\t\t\t\t\t// to avoid forcing a reflow.\n\t\t\t\t\tscrollboxSizeBuggy = !support.scrollboxSize() &&\n\t\t\t\t\t\tstyles.position === \"absolute\",\n\n\t\t\t\t\t// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991)\n\t\t\t\t\tboxSizingNeeded = scrollboxSizeBuggy || extra,\n\t\t\t\t\tisBorderBox = boxSizingNeeded &&\n\t\t\t\t\t\tjQuery.css(elem, \"boxSizing\", false, styles) === \"border-box\",\n\t\t\t\t\tsubtract = extra ?\n\t\t\t\t\t\tboxModelAdjustment(\n\t\t\t\t\t\t\telem,\n\t\t\t\t\t\t\tdimension,\n\t\t\t\t\t\t\textra,\n\t\t\t\t\t\t\tisBorderBox,\n\t\t\t\t\t\t\tstyles\n\t\t\t\t\t\t) :\n\t\t\t\t\t\t0;\n\n\t\t\t\t// Account for unreliable border-box dimensions by comparing offset* to computed and\n\t\t\t\t// faking a content-box to get border and padding (gh-3699)\n\t\t\t\tif (isBorderBox && scrollboxSizeBuggy) {\n\t\t\t\t\tsubtract -= Math.ceil(\n\t\t\t\t\t\telem[\"offset\" + dimension[0].toUpperCase() + dimension.slice(1)] -\n\t\t\t\t\t\tparseFloat(styles[dimension]) -\n\t\t\t\t\t\tboxModelAdjustment(elem, dimension, \"border\", false, styles) -\n\t\t\t\t\t\t0.5\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\t// Convert to pixels if value adjustment is needed\n\t\t\t\tif (subtract && (matches = rcssNum.exec(value)) &&\n\t\t\t\t\t(matches[3] || \"px\") !== \"px\") {\n\n\t\t\t\t\telem.style[dimension] = value;\n\t\t\t\t\tvalue = jQuery.css(elem, dimension);\n\t\t\t\t}\n\n\t\t\t\treturn setPositiveNumber(elem, value, subtract);\n\t\t\t}\n\t\t};\n\t});\n\n\tjQuery.cssHooks.marginLeft = addGetHookIf(support.reliableMarginLeft,\n\t\tfunction (elem, computed) {\n\t\t\tif (computed) {\n\t\t\t\treturn (parseFloat(curCSS(elem, \"marginLeft\")) ||\n\t\t\t\t\telem.getBoundingClientRect().left -\n\t\t\t\t\tswap(elem, { marginLeft: 0 }, function () {\n\t\t\t\t\t\treturn elem.getBoundingClientRect().left;\n\t\t\t\t\t})\n\t\t\t\t) + \"px\";\n\t\t\t}\n\t\t}\n\t);\n\n\t// These hooks are used by animate to expand properties\n\tjQuery.each({\n\t\tmargin: \"\",\n\t\tpadding: \"\",\n\t\tborder: \"Width\"\n\t}, function (prefix, suffix) {\n\t\tjQuery.cssHooks[prefix + suffix] = {\n\t\t\texpand: function (value) {\n\t\t\t\tvar i = 0,\n\t\t\t\t\texpanded = {},\n\n\t\t\t\t\t// Assumes a single number if not a string\n\t\t\t\t\tparts = typeof value === \"string\" ? value.split(\" \") : [value];\n\n\t\t\t\tfor (; i < 4; i++) {\n\t\t\t\t\texpanded[prefix + cssExpand[i] + suffix] =\n\t\t\t\t\t\tparts[i] || parts[i - 2] || parts[0];\n\t\t\t\t}\n\n\t\t\t\treturn expanded;\n\t\t\t}\n\t\t};\n\n\t\tif (prefix !== \"margin\") {\n\t\t\tjQuery.cssHooks[prefix + suffix].set = setPositiveNumber;\n\t\t}\n\t});\n\n\tjQuery.fn.extend({\n\t\tcss: function (name, value) {\n\t\t\treturn access(this, function (elem, name, value) {\n\t\t\t\tvar styles, len,\n\t\t\t\t\tmap = {},\n\t\t\t\t\ti = 0;\n\n\t\t\t\tif (Array.isArray(name)) {\n\t\t\t\t\tstyles = getStyles(elem);\n\t\t\t\t\tlen = name.length;\n\n\t\t\t\t\tfor (; i < len; i++) {\n\t\t\t\t\t\tmap[name[i]] = jQuery.css(elem, name[i], false, styles);\n\t\t\t\t\t}\n\n\t\t\t\t\treturn map;\n\t\t\t\t}\n\n\t\t\t\treturn value !== undefined ?\n\t\t\t\t\tjQuery.style(elem, name, value) :\n\t\t\t\t\tjQuery.css(elem, name);\n\t\t\t}, name, value, arguments.length > 1);\n\t\t}\n\t});\n\n\n\tfunction Tween(elem, options, prop, end, easing) {\n\t\treturn new Tween.prototype.init(elem, options, prop, end, easing);\n\t}\n\tjQuery.Tween = Tween;\n\n\tTween.prototype = {\n\t\tconstructor: Tween,\n\t\tinit: function (elem, options, prop, end, easing, unit) {\n\t\t\tthis.elem = elem;\n\t\t\tthis.prop = prop;\n\t\t\tthis.easing = easing || jQuery.easing._default;\n\t\t\tthis.options = options;\n\t\t\tthis.start = this.now = this.cur();\n\t\t\tthis.end = end;\n\t\t\tthis.unit = unit || (jQuery.cssNumber[prop] ? \"\" : \"px\");\n\t\t},\n\t\tcur: function () {\n\t\t\tvar hooks = Tween.propHooks[this.prop];\n\n\t\t\treturn hooks && hooks.get ?\n\t\t\t\thooks.get(this) :\n\t\t\t\tTween.propHooks._default.get(this);\n\t\t},\n\t\trun: function (percent) {\n\t\t\tvar eased,\n\t\t\t\thooks = Tween.propHooks[this.prop];\n\n\t\t\tif (this.options.duration) {\n\t\t\t\tthis.pos = eased = jQuery.easing[this.easing](\n\t\t\t\t\tpercent, this.options.duration * percent, 0, 1, this.options.duration\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tthis.pos = eased = percent;\n\t\t\t}\n\t\t\tthis.now = (this.end - this.start) * eased + this.start;\n\n\t\t\tif (this.options.step) {\n\t\t\t\tthis.options.step.call(this.elem, this.now, this);\n\t\t\t}\n\n\t\t\tif (hooks && hooks.set) {\n\t\t\t\thooks.set(this);\n\t\t\t} else {\n\t\t\t\tTween.propHooks._default.set(this);\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t};\n\n\tTween.prototype.init.prototype = Tween.prototype;\n\n\tTween.propHooks = {\n\t\t_default: {\n\t\t\tget: function (tween) {\n\t\t\t\tvar result;\n\n\t\t\t\t// Use a property on the element directly when it is not a DOM element,\n\t\t\t\t// or when there is no matching style property that exists.\n\t\t\t\tif (tween.elem.nodeType !== 1 ||\n\t\t\t\t\ttween.elem[tween.prop] != null && tween.elem.style[tween.prop] == null) {\n\t\t\t\t\treturn tween.elem[tween.prop];\n\t\t\t\t}\n\n\t\t\t\t// Passing an empty string as a 3rd parameter to .css will automatically\n\t\t\t\t// attempt a parseFloat and fallback to a string if the parse fails.\n\t\t\t\t// Simple values such as \"10px\" are parsed to Float;\n\t\t\t\t// complex values such as \"rotate(1rad)\" are returned as-is.\n\t\t\t\tresult = jQuery.css(tween.elem, tween.prop, \"\");\n\n\t\t\t\t// Empty strings, null, undefined and \"auto\" are converted to 0.\n\t\t\t\treturn !result || result === \"auto\" ? 0 : result;\n\t\t\t},\n\t\t\tset: function (tween) {\n\n\t\t\t\t// Use step hook for back compat.\n\t\t\t\t// Use cssHook if its there.\n\t\t\t\t// Use .style if available and use plain properties where available.\n\t\t\t\tif (jQuery.fx.step[tween.prop]) {\n\t\t\t\t\tjQuery.fx.step[tween.prop](tween);\n\t\t\t\t} else if (tween.elem.nodeType === 1 && (\n\t\t\t\t\tjQuery.cssHooks[tween.prop] ||\n\t\t\t\t\ttween.elem.style[finalPropName(tween.prop)] != null)) {\n\t\t\t\t\tjQuery.style(tween.elem, tween.prop, tween.now + tween.unit);\n\t\t\t\t} else {\n\t\t\t\t\ttween.elem[tween.prop] = tween.now;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t// Support: IE <=9 only\n\t// Panic based approach to setting things on disconnected nodes\n\tTween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {\n\t\tset: function (tween) {\n\t\t\tif (tween.elem.nodeType && tween.elem.parentNode) {\n\t\t\t\ttween.elem[tween.prop] = tween.now;\n\t\t\t}\n\t\t}\n\t};\n\n\tjQuery.easing = {\n\t\tlinear: function (p) {\n\t\t\treturn p;\n\t\t},\n\t\tswing: function (p) {\n\t\t\treturn 0.5 - Math.cos(p * Math.PI) / 2;\n\t\t},\n\t\t_default: \"swing\"\n\t};\n\n\tjQuery.fx = Tween.prototype.init;\n\n\t// Back compat <1.8 extension point\n\tjQuery.fx.step = {};\n\n\n\n\n\tvar\n\t\tfxNow, inProgress,\n\t\trfxtypes = /^(?:toggle|show|hide)$/,\n\t\trrun = /queueHooks$/;\n\n\tfunction schedule() {\n\t\tif (inProgress) {\n\t\t\tif (document.hidden === false && window.requestAnimationFrame) {\n\t\t\t\twindow.requestAnimationFrame(schedule);\n\t\t\t} else {\n\t\t\t\twindow.setTimeout(schedule, jQuery.fx.interval);\n\t\t\t}\n\n\t\t\tjQuery.fx.tick();\n\t\t}\n\t}\n\n\t// Animations created synchronously will run synchronously\n\tfunction createFxNow() {\n\t\twindow.setTimeout(function () {\n\t\t\tfxNow = undefined;\n\t\t});\n\t\treturn (fxNow = Date.now());\n\t}\n\n\t// Generate parameters to create a standard animation\n\tfunction genFx(type, includeWidth) {\n\t\tvar which,\n\t\t\ti = 0,\n\t\t\tattrs = { height: type };\n\n\t\t// If we include width, step value is 1 to do all cssExpand values,\n\t\t// otherwise step value is 2 to skip over Left and Right\n\t\tincludeWidth = includeWidth ? 1 : 0;\n\t\tfor (; i < 4; i += 2 - includeWidth) {\n\t\t\twhich = cssExpand[i];\n\t\t\tattrs[\"margin\" + which] = attrs[\"padding\" + which] = type;\n\t\t}\n\n\t\tif (includeWidth) {\n\t\t\tattrs.opacity = attrs.width = type;\n\t\t}\n\n\t\treturn attrs;\n\t}\n\n\tfunction createTween(value, prop, animation) {\n\t\tvar tween,\n\t\t\tcollection = (Animation.tweeners[prop] || []).concat(Animation.tweeners[\"*\"]),\n\t\t\tindex = 0,\n\t\t\tlength = collection.length;\n\t\tfor (; index < length; index++) {\n\t\t\tif ((tween = collection[index].call(animation, prop, value))) {\n\n\t\t\t\t// We're done with this property\n\t\t\t\treturn tween;\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction defaultPrefilter(elem, props, opts) {\n\t\tvar prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display,\n\t\t\tisBox = \"width\" in props || \"height\" in props,\n\t\t\tanim = this,\n\t\t\torig = {},\n\t\t\tstyle = elem.style,\n\t\t\thidden = elem.nodeType && isHiddenWithinTree(elem),\n\t\t\tdataShow = dataPriv.get(elem, \"fxshow\");\n\n\t\t// Queue-skipping animations hijack the fx hooks\n\t\tif (!opts.queue) {\n\t\t\thooks = jQuery._queueHooks(elem, \"fx\");\n\t\t\tif (hooks.unqueued == null) {\n\t\t\t\thooks.unqueued = 0;\n\t\t\t\toldfire = hooks.empty.fire;\n\t\t\t\thooks.empty.fire = function () {\n\t\t\t\t\tif (!hooks.unqueued) {\n\t\t\t\t\t\toldfire();\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t\thooks.unqueued++;\n\n\t\t\tanim.always(function () {\n\n\t\t\t\t// Ensure the complete handler is called before this completes\n\t\t\t\tanim.always(function () {\n\t\t\t\t\thooks.unqueued--;\n\t\t\t\t\tif (!jQuery.queue(elem, \"fx\").length) {\n\t\t\t\t\t\thooks.empty.fire();\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\n\t\t// Detect show/hide animations\n\t\tfor (prop in props) {\n\t\t\tvalue = props[prop];\n\t\t\tif (rfxtypes.test(value)) {\n\t\t\t\tdelete props[prop];\n\t\t\t\ttoggle = toggle || value === \"toggle\";\n\t\t\t\tif (value === (hidden ? \"hide\" : \"show\")) {\n\n\t\t\t\t\t// Pretend to be hidden if this is a \"show\" and\n\t\t\t\t\t// there is still data from a stopped show/hide\n\t\t\t\t\tif (value === \"show\" && dataShow && dataShow[prop] !== undefined) {\n\t\t\t\t\t\thidden = true;\n\n\t\t\t\t\t\t// Ignore all other no-op show/hide data\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\torig[prop] = dataShow && dataShow[prop] || jQuery.style(elem, prop);\n\t\t\t}\n\t\t}\n\n\t\t// Bail out if this is a no-op like .hide().hide()\n\t\tpropTween = !jQuery.isEmptyObject(props);\n\t\tif (!propTween && jQuery.isEmptyObject(orig)) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Restrict \"overflow\" and \"display\" styles during box animations\n\t\tif (isBox && elem.nodeType === 1) {\n\n\t\t\t// Support: IE <=9 - 11, Edge 12 - 15\n\t\t\t// Record all 3 overflow attributes because IE does not infer the shorthand\n\t\t\t// from identically-valued overflowX and overflowY and Edge just mirrors\n\t\t\t// the overflowX value there.\n\t\t\topts.overflow = [style.overflow, style.overflowX, style.overflowY];\n\n\t\t\t// Identify a display type, preferring old show/hide data over the CSS cascade\n\t\t\trestoreDisplay = dataShow && dataShow.display;\n\t\t\tif (restoreDisplay == null) {\n\t\t\t\trestoreDisplay = dataPriv.get(elem, \"display\");\n\t\t\t}\n\t\t\tdisplay = jQuery.css(elem, \"display\");\n\t\t\tif (display === \"none\") {\n\t\t\t\tif (restoreDisplay) {\n\t\t\t\t\tdisplay = restoreDisplay;\n\t\t\t\t} else {\n\n\t\t\t\t\t// Get nonempty value(s) by temporarily forcing visibility\n\t\t\t\t\tshowHide([elem], true);\n\t\t\t\t\trestoreDisplay = elem.style.display || restoreDisplay;\n\t\t\t\t\tdisplay = jQuery.css(elem, \"display\");\n\t\t\t\t\tshowHide([elem]);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Animate inline elements as inline-block\n\t\t\tif (display === \"inline\" || display === \"inline-block\" && restoreDisplay != null) {\n\t\t\t\tif (jQuery.css(elem, \"float\") === \"none\") {\n\n\t\t\t\t\t// Restore the original display value at the end of pure show/hide animations\n\t\t\t\t\tif (!propTween) {\n\t\t\t\t\t\tanim.done(function () {\n\t\t\t\t\t\t\tstyle.display = restoreDisplay;\n\t\t\t\t\t\t});\n\t\t\t\t\t\tif (restoreDisplay == null) {\n\t\t\t\t\t\t\tdisplay = style.display;\n\t\t\t\t\t\t\trestoreDisplay = display === \"none\" ? \"\" : display;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tstyle.display = \"inline-block\";\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (opts.overflow) {\n\t\t\tstyle.overflow = \"hidden\";\n\t\t\tanim.always(function () {\n\t\t\t\tstyle.overflow = opts.overflow[0];\n\t\t\t\tstyle.overflowX = opts.overflow[1];\n\t\t\t\tstyle.overflowY = opts.overflow[2];\n\t\t\t});\n\t\t}\n\n\t\t// Implement show/hide animations\n\t\tpropTween = false;\n\t\tfor (prop in orig) {\n\n\t\t\t// General show/hide setup for this element animation\n\t\t\tif (!propTween) {\n\t\t\t\tif (dataShow) {\n\t\t\t\t\tif (\"hidden\" in dataShow) {\n\t\t\t\t\t\thidden = dataShow.hidden;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tdataShow = dataPriv.access(elem, \"fxshow\", { display: restoreDisplay });\n\t\t\t\t}\n\n\t\t\t\t// Store hidden/visible for toggle so `.stop().toggle()` \"reverses\"\n\t\t\t\tif (toggle) {\n\t\t\t\t\tdataShow.hidden = !hidden;\n\t\t\t\t}\n\n\t\t\t\t// Show elements before animating them\n\t\t\t\tif (hidden) {\n\t\t\t\t\tshowHide([elem], true);\n\t\t\t\t}\n\n\t\t\t\t/* eslint-disable no-loop-func */\n\n\t\t\t\tanim.done(function () {\n\n\t\t\t\t\t/* eslint-enable no-loop-func */\n\n\t\t\t\t\t// The final step of a \"hide\" animation is actually hiding the element\n\t\t\t\t\tif (!hidden) {\n\t\t\t\t\t\tshowHide([elem]);\n\t\t\t\t\t}\n\t\t\t\t\tdataPriv.remove(elem, \"fxshow\");\n\t\t\t\t\tfor (prop in orig) {\n\t\t\t\t\t\tjQuery.style(elem, prop, orig[prop]);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// Per-property setup\n\t\t\tpropTween = createTween(hidden ? dataShow[prop] : 0, prop, anim);\n\t\t\tif (!(prop in dataShow)) {\n\t\t\t\tdataShow[prop] = propTween.start;\n\t\t\t\tif (hidden) {\n\t\t\t\t\tpropTween.end = propTween.start;\n\t\t\t\t\tpropTween.start = 0;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction propFilter(props, specialEasing) {\n\t\tvar index, name, easing, value, hooks;\n\n\t\t// camelCase, specialEasing and expand cssHook pass\n\t\tfor (index in props) {\n\t\t\tname = camelCase(index);\n\t\t\teasing = specialEasing[name];\n\t\t\tvalue = props[index];\n\t\t\tif (Array.isArray(value)) {\n\t\t\t\teasing = value[1];\n\t\t\t\tvalue = props[index] = value[0];\n\t\t\t}\n\n\t\t\tif (index !== name) {\n\t\t\t\tprops[name] = value;\n\t\t\t\tdelete props[index];\n\t\t\t}\n\n\t\t\thooks = jQuery.cssHooks[name];\n\t\t\tif (hooks && \"expand\" in hooks) {\n\t\t\t\tvalue = hooks.expand(value);\n\t\t\t\tdelete props[name];\n\n\t\t\t\t// Not quite $.extend, this won't overwrite existing keys.\n\t\t\t\t// Reusing 'index' because we have the correct \"name\"\n\t\t\t\tfor (index in value) {\n\t\t\t\t\tif (!(index in props)) {\n\t\t\t\t\t\tprops[index] = value[index];\n\t\t\t\t\t\tspecialEasing[index] = easing;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tspecialEasing[name] = easing;\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction Animation(elem, properties, options) {\n\t\tvar result,\n\t\t\tstopped,\n\t\t\tindex = 0,\n\t\t\tlength = Animation.prefilters.length,\n\t\t\tdeferred = jQuery.Deferred().always(function () {\n\n\t\t\t\t// Don't match elem in the :animated selector\n\t\t\t\tdelete tick.elem;\n\t\t\t}),\n\t\t\ttick = function () {\n\t\t\t\tif (stopped) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tvar currentTime = fxNow || createFxNow(),\n\t\t\t\t\tremaining = Math.max(0, animation.startTime + animation.duration - currentTime),\n\n\t\t\t\t\t// Support: Android 2.3 only\n\t\t\t\t\t// Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (trac-12497)\n\t\t\t\t\ttemp = remaining / animation.duration || 0,\n\t\t\t\t\tpercent = 1 - temp,\n\t\t\t\t\tindex = 0,\n\t\t\t\t\tlength = animation.tweens.length;\n\n\t\t\t\tfor (; index < length; index++) {\n\t\t\t\t\tanimation.tweens[index].run(percent);\n\t\t\t\t}\n\n\t\t\t\tdeferred.notifyWith(elem, [animation, percent, remaining]);\n\n\t\t\t\t// If there's more to do, yield\n\t\t\t\tif (percent < 1 && length) {\n\t\t\t\t\treturn remaining;\n\t\t\t\t}\n\n\t\t\t\t// If this was an empty animation, synthesize a final progress notification\n\t\t\t\tif (!length) {\n\t\t\t\t\tdeferred.notifyWith(elem, [animation, 1, 0]);\n\t\t\t\t}\n\n\t\t\t\t// Resolve the animation and report its conclusion\n\t\t\t\tdeferred.resolveWith(elem, [animation]);\n\t\t\t\treturn false;\n\t\t\t},\n\t\t\tanimation = deferred.promise({\n\t\t\t\telem: elem,\n\t\t\t\tprops: jQuery.extend({}, properties),\n\t\t\t\topts: jQuery.extend(true, {\n\t\t\t\t\tspecialEasing: {},\n\t\t\t\t\teasing: jQuery.easing._default\n\t\t\t\t}, options),\n\t\t\t\toriginalProperties: properties,\n\t\t\t\toriginalOptions: options,\n\t\t\t\tstartTime: fxNow || createFxNow(),\n\t\t\t\tduration: options.duration,\n\t\t\t\ttweens: [],\n\t\t\t\tcreateTween: function (prop, end) {\n\t\t\t\t\tvar tween = jQuery.Tween(elem, animation.opts, prop, end,\n\t\t\t\t\t\tanimation.opts.specialEasing[prop] || animation.opts.easing);\n\t\t\t\t\tanimation.tweens.push(tween);\n\t\t\t\t\treturn tween;\n\t\t\t\t},\n\t\t\t\tstop: function (gotoEnd) {\n\t\t\t\t\tvar index = 0,\n\n\t\t\t\t\t\t// If we are going to the end, we want to run all the tweens\n\t\t\t\t\t\t// otherwise we skip this part\n\t\t\t\t\t\tlength = gotoEnd ? animation.tweens.length : 0;\n\t\t\t\t\tif (stopped) {\n\t\t\t\t\t\treturn this;\n\t\t\t\t\t}\n\t\t\t\t\tstopped = true;\n\t\t\t\t\tfor (; index < length; index++) {\n\t\t\t\t\t\tanimation.tweens[index].run(1);\n\t\t\t\t\t}\n\n\t\t\t\t\t// Resolve when we played the last frame; otherwise, reject\n\t\t\t\t\tif (gotoEnd) {\n\t\t\t\t\t\tdeferred.notifyWith(elem, [animation, 1, 0]);\n\t\t\t\t\t\tdeferred.resolveWith(elem, [animation, gotoEnd]);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdeferred.rejectWith(elem, [animation, gotoEnd]);\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t}),\n\t\t\tprops = animation.props;\n\n\t\tpropFilter(props, animation.opts.specialEasing);\n\n\t\tfor (; index < length; index++) {\n\t\t\tresult = Animation.prefilters[index].call(animation, elem, props, animation.opts);\n\t\t\tif (result) {\n\t\t\t\tif (isFunction(result.stop)) {\n\t\t\t\t\tjQuery._queueHooks(animation.elem, animation.opts.queue).stop =\n\t\t\t\t\t\tresult.stop.bind(result);\n\t\t\t\t}\n\t\t\t\treturn result;\n\t\t\t}\n\t\t}\n\n\t\tjQuery.map(props, createTween, animation);\n\n\t\tif (isFunction(animation.opts.start)) {\n\t\t\tanimation.opts.start.call(elem, animation);\n\t\t}\n\n\t\t// Attach callbacks from options\n\t\tanimation\n\t\t\t.progress(animation.opts.progress)\n\t\t\t.done(animation.opts.done, animation.opts.complete)\n\t\t\t.fail(animation.opts.fail)\n\t\t\t.always(animation.opts.always);\n\n\t\tjQuery.fx.timer(\n\t\t\tjQuery.extend(tick, {\n\t\t\t\telem: elem,\n\t\t\t\tanim: animation,\n\t\t\t\tqueue: animation.opts.queue\n\t\t\t})\n\t\t);\n\n\t\treturn animation;\n\t}\n\n\tjQuery.Animation = jQuery.extend(Animation, {\n\n\t\ttweeners: {\n\t\t\t\"*\": [function (prop, value) {\n\t\t\t\tvar tween = this.createTween(prop, value);\n\t\t\t\tadjustCSS(tween.elem, prop, rcssNum.exec(value), tween);\n\t\t\t\treturn tween;\n\t\t\t}]\n\t\t},\n\n\t\ttweener: function (props, callback) {\n\t\t\tif (isFunction(props)) {\n\t\t\t\tcallback = props;\n\t\t\t\tprops = [\"*\"];\n\t\t\t} else {\n\t\t\t\tprops = props.match(rnothtmlwhite);\n\t\t\t}\n\n\t\t\tvar prop,\n\t\t\t\tindex = 0,\n\t\t\t\tlength = props.length;\n\n\t\t\tfor (; index < length; index++) {\n\t\t\t\tprop = props[index];\n\t\t\t\tAnimation.tweeners[prop] = Animation.tweeners[prop] || [];\n\t\t\t\tAnimation.tweeners[prop].unshift(callback);\n\t\t\t}\n\t\t},\n\n\t\tprefilters: [defaultPrefilter],\n\n\t\tprefilter: function (callback, prepend) {\n\t\t\tif (prepend) {\n\t\t\t\tAnimation.prefilters.unshift(callback);\n\t\t\t} else {\n\t\t\t\tAnimation.prefilters.push(callback);\n\t\t\t}\n\t\t}\n\t});\n\n\tjQuery.speed = function (speed, easing, fn) {\n\t\tvar opt = speed && typeof speed === \"object\" ? jQuery.extend({}, speed) : {\n\t\t\tcomplete: fn || !fn && easing ||\n\t\t\t\tisFunction(speed) && speed,\n\t\t\tduration: speed,\n\t\t\teasing: fn && easing || easing && !isFunction(easing) && easing\n\t\t};\n\n\t\t// Go to the end state if fx are off\n\t\tif (jQuery.fx.off) {\n\t\t\topt.duration = 0;\n\n\t\t} else {\n\t\t\tif (typeof opt.duration !== \"number\") {\n\t\t\t\tif (opt.duration in jQuery.fx.speeds) {\n\t\t\t\t\topt.duration = jQuery.fx.speeds[opt.duration];\n\n\t\t\t\t} else {\n\t\t\t\t\topt.duration = jQuery.fx.speeds._default;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Normalize opt.queue - true/undefined/null -> \"fx\"\n\t\tif (opt.queue == null || opt.queue === true) {\n\t\t\topt.queue = \"fx\";\n\t\t}\n\n\t\t// Queueing\n\t\topt.old = opt.complete;\n\n\t\topt.complete = function () {\n\t\t\tif (isFunction(opt.old)) {\n\t\t\t\topt.old.call(this);\n\t\t\t}\n\n\t\t\tif (opt.queue) {\n\t\t\t\tjQuery.dequeue(this, opt.queue);\n\t\t\t}\n\t\t};\n\n\t\treturn opt;\n\t};\n\n\tjQuery.fn.extend({\n\t\tfadeTo: function (speed, to, easing, callback) {\n\n\t\t\t// Show any hidden elements after setting opacity to 0\n\t\t\treturn this.filter(isHiddenWithinTree).css(\"opacity\", 0).show()\n\n\t\t\t\t// Animate to the value specified\n\t\t\t\t.end().animate({ opacity: to }, speed, easing, callback);\n\t\t},\n\t\tanimate: function (prop, speed, easing, callback) {\n\t\t\tvar empty = jQuery.isEmptyObject(prop),\n\t\t\t\toptall = jQuery.speed(speed, easing, callback),\n\t\t\t\tdoAnimation = function () {\n\n\t\t\t\t\t// Operate on a copy of prop so per-property easing won't be lost\n\t\t\t\t\tvar anim = Animation(this, jQuery.extend({}, prop), optall);\n\n\t\t\t\t\t// Empty animations, or finishing resolves immediately\n\t\t\t\t\tif (empty || dataPriv.get(this, \"finish\")) {\n\t\t\t\t\t\tanim.stop(true);\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\tdoAnimation.finish = doAnimation;\n\n\t\t\treturn empty || optall.queue === false ?\n\t\t\t\tthis.each(doAnimation) :\n\t\t\t\tthis.queue(optall.queue, doAnimation);\n\t\t},\n\t\tstop: function (type, clearQueue, gotoEnd) {\n\t\t\tvar stopQueue = function (hooks) {\n\t\t\t\tvar stop = hooks.stop;\n\t\t\t\tdelete hooks.stop;\n\t\t\t\tstop(gotoEnd);\n\t\t\t};\n\n\t\t\tif (typeof type !== \"string\") {\n\t\t\t\tgotoEnd = clearQueue;\n\t\t\t\tclearQueue = type;\n\t\t\t\ttype = undefined;\n\t\t\t}\n\t\t\tif (clearQueue) {\n\t\t\t\tthis.queue(type || \"fx\", []);\n\t\t\t}\n\n\t\t\treturn this.each(function () {\n\t\t\t\tvar dequeue = true,\n\t\t\t\t\tindex = type != null && type + \"queueHooks\",\n\t\t\t\t\ttimers = jQuery.timers,\n\t\t\t\t\tdata = dataPriv.get(this);\n\n\t\t\t\tif (index) {\n\t\t\t\t\tif (data[index] && data[index].stop) {\n\t\t\t\t\t\tstopQueue(data[index]);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tfor (index in data) {\n\t\t\t\t\t\tif (data[index] && data[index].stop && rrun.test(index)) {\n\t\t\t\t\t\t\tstopQueue(data[index]);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tfor (index = timers.length; index--;) {\n\t\t\t\t\tif (timers[index].elem === this &&\n\t\t\t\t\t\t(type == null || timers[index].queue === type)) {\n\n\t\t\t\t\t\ttimers[index].anim.stop(gotoEnd);\n\t\t\t\t\t\tdequeue = false;\n\t\t\t\t\t\ttimers.splice(index, 1);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Start the next in the queue if the last step wasn't forced.\n\t\t\t\t// Timers currently will call their complete callbacks, which\n\t\t\t\t// will dequeue but only if they were gotoEnd.\n\t\t\t\tif (dequeue || !gotoEnd) {\n\t\t\t\t\tjQuery.dequeue(this, type);\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\t\tfinish: function (type) {\n\t\t\tif (type !== false) {\n\t\t\t\ttype = type || \"fx\";\n\t\t\t}\n\t\t\treturn this.each(function () {\n\t\t\t\tvar index,\n\t\t\t\t\tdata = dataPriv.get(this),\n\t\t\t\t\tqueue = data[type + \"queue\"],\n\t\t\t\t\thooks = data[type + \"queueHooks\"],\n\t\t\t\t\ttimers = jQuery.timers,\n\t\t\t\t\tlength = queue ? queue.length : 0;\n\n\t\t\t\t// Enable finishing flag on private data\n\t\t\t\tdata.finish = true;\n\n\t\t\t\t// Empty the queue first\n\t\t\t\tjQuery.queue(this, type, []);\n\n\t\t\t\tif (hooks && hooks.stop) {\n\t\t\t\t\thooks.stop.call(this, true);\n\t\t\t\t}\n\n\t\t\t\t// Look for any active animations, and finish them\n\t\t\t\tfor (index = timers.length; index--;) {\n\t\t\t\t\tif (timers[index].elem === this && timers[index].queue === type) {\n\t\t\t\t\t\ttimers[index].anim.stop(true);\n\t\t\t\t\t\ttimers.splice(index, 1);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Look for any animations in the old queue and finish them\n\t\t\t\tfor (index = 0; index < length; index++) {\n\t\t\t\t\tif (queue[index] && queue[index].finish) {\n\t\t\t\t\t\tqueue[index].finish.call(this);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Turn off finishing flag\n\t\t\t\tdelete data.finish;\n\t\t\t});\n\t\t}\n\t});\n\n\tjQuery.each([\"toggle\", \"show\", \"hide\"], function (_i, name) {\n\t\tvar cssFn = jQuery.fn[name];\n\t\tjQuery.fn[name] = function (speed, easing, callback) {\n\t\t\treturn speed == null || typeof speed === \"boolean\" ?\n\t\t\t\tcssFn.apply(this, arguments) :\n\t\t\t\tthis.animate(genFx(name, true), speed, easing, callback);\n\t\t};\n\t});\n\n\t// Generate shortcuts for custom animations\n\tjQuery.each({\n\t\tslideDown: genFx(\"show\"),\n\t\tslideUp: genFx(\"hide\"),\n\t\tslideToggle: genFx(\"toggle\"),\n\t\tfadeIn: { opacity: \"show\" },\n\t\tfadeOut: { opacity: \"hide\" },\n\t\tfadeToggle: { opacity: \"toggle\" }\n\t}, function (name, props) {\n\t\tjQuery.fn[name] = function (speed, easing, callback) {\n\t\t\treturn this.animate(props, speed, easing, callback);\n\t\t};\n\t});\n\n\tjQuery.timers = [];\n\tjQuery.fx.tick = function () {\n\t\tvar timer,\n\t\t\ti = 0,\n\t\t\ttimers = jQuery.timers;\n\n\t\tfxNow = Date.now();\n\n\t\tfor (; i < timers.length; i++) {\n\t\t\ttimer = timers[i];\n\n\t\t\t// Run the timer and safely remove it when done (allowing for external removal)\n\t\t\tif (!timer() && timers[i] === timer) {\n\t\t\t\ttimers.splice(i--, 1);\n\t\t\t}\n\t\t}\n\n\t\tif (!timers.length) {\n\t\t\tjQuery.fx.stop();\n\t\t}\n\t\tfxNow = undefined;\n\t};\n\n\tjQuery.fx.timer = function (timer) {\n\t\tjQuery.timers.push(timer);\n\t\tjQuery.fx.start();\n\t};\n\n\tjQuery.fx.interval = 13;\n\tjQuery.fx.start = function () {\n\t\tif (inProgress) {\n\t\t\treturn;\n\t\t}\n\n\t\tinProgress = true;\n\t\tschedule();\n\t};\n\n\tjQuery.fx.stop = function () {\n\t\tinProgress = null;\n\t};\n\n\tjQuery.fx.speeds = {\n\t\tslow: 600,\n\t\tfast: 200,\n\n\t\t// Default speed\n\t\t_default: 400\n\t};\n\n\n\t// Based off of the plugin by Clint Helfers, with permission.\n\tjQuery.fn.delay = function (time, type) {\n\t\ttime = jQuery.fx ? jQuery.fx.speeds[time] || time : time;\n\t\ttype = type || \"fx\";\n\n\t\treturn this.queue(type, function (next, hooks) {\n\t\t\tvar timeout = window.setTimeout(next, time);\n\t\t\thooks.stop = function () {\n\t\t\t\twindow.clearTimeout(timeout);\n\t\t\t};\n\t\t});\n\t};\n\n\n\t(function () {\n\t\tvar input = document.createElement(\"input\"),\n\t\t\tselect = document.createElement(\"select\"),\n\t\t\topt = select.appendChild(document.createElement(\"option\"));\n\n\t\tinput.type = \"checkbox\";\n\n\t\t// Support: Android <=4.3 only\n\t\t// Default value for a checkbox should be \"on\"\n\t\tsupport.checkOn = input.value !== \"\";\n\n\t\t// Support: IE <=11 only\n\t\t// Must access selectedIndex to make default options select\n\t\tsupport.optSelected = opt.selected;\n\n\t\t// Support: IE <=11 only\n\t\t// An input loses its value after becoming a radio\n\t\tinput = document.createElement(\"input\");\n\t\tinput.value = \"t\";\n\t\tinput.type = \"radio\";\n\t\tsupport.radioValue = input.value === \"t\";\n\t})();\n\n\n\tvar boolHook,\n\t\tattrHandle = jQuery.expr.attrHandle;\n\n\tjQuery.fn.extend({\n\t\tattr: function (name, value) {\n\t\t\treturn access(this, jQuery.attr, name, value, arguments.length > 1);\n\t\t},\n\n\t\tremoveAttr: function (name) {\n\t\t\treturn this.each(function () {\n\t\t\t\tjQuery.removeAttr(this, name);\n\t\t\t});\n\t\t}\n\t});\n\n\tjQuery.extend({\n\t\tattr: function (elem, name, value) {\n\t\t\tvar ret, hooks,\n\t\t\t\tnType = elem.nodeType;\n\n\t\t\t// Don't get/set attributes on text, comment and attribute nodes\n\t\t\tif (nType === 3 || nType === 8 || nType === 2) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Fallback to prop when attributes are not supported\n\t\t\tif (typeof elem.getAttribute === \"undefined\") {\n\t\t\t\treturn jQuery.prop(elem, name, value);\n\t\t\t}\n\n\t\t\t// Attribute hooks are determined by the lowercase version\n\t\t\t// Grab necessary hook if one is defined\n\t\t\tif (nType !== 1 || !jQuery.isXMLDoc(elem)) {\n\t\t\t\thooks = jQuery.attrHooks[name.toLowerCase()] ||\n\t\t\t\t\t(jQuery.expr.match.bool.test(name) ? boolHook : undefined);\n\t\t\t}\n\n\t\t\tif (value !== undefined) {\n\t\t\t\tif (value === null) {\n\t\t\t\t\tjQuery.removeAttr(elem, name);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (hooks && \"set\" in hooks &&\n\t\t\t\t\t(ret = hooks.set(elem, value, name)) !== undefined) {\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\n\t\t\t\telem.setAttribute(name, value + \"\");\n\t\t\t\treturn value;\n\t\t\t}\n\n\t\t\tif (hooks && \"get\" in hooks && (ret = hooks.get(elem, name)) !== null) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\tret = jQuery.find.attr(elem, name);\n\n\t\t\t// Non-existent attributes return null, we normalize to undefined\n\t\t\treturn ret == null ? undefined : ret;\n\t\t},\n\n\t\tattrHooks: {\n\t\t\ttype: {\n\t\t\t\tset: function (elem, value) {\n\t\t\t\t\tif (!support.radioValue && value === \"radio\" &&\n\t\t\t\t\t\tnodeName(elem, \"input\")) {\n\t\t\t\t\t\tvar val = elem.value;\n\t\t\t\t\t\telem.setAttribute(\"type\", value);\n\t\t\t\t\t\tif (val) {\n\t\t\t\t\t\t\telem.value = val;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn value;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tremoveAttr: function (elem, value) {\n\t\t\tvar name,\n\t\t\t\ti = 0,\n\n\t\t\t\t// Attribute names can contain non-HTML whitespace characters\n\t\t\t\t// https://html.spec.whatwg.org/multipage/syntax.html#attributes-2\n\t\t\t\tattrNames = value && value.match(rnothtmlwhite);\n\n\t\t\tif (attrNames && elem.nodeType === 1) {\n\t\t\t\twhile ((name = attrNames[i++])) {\n\t\t\t\t\telem.removeAttribute(name);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\n\t// Hooks for boolean attributes\n\tboolHook = {\n\t\tset: function (elem, value, name) {\n\t\t\tif (value === false) {\n\n\t\t\t\t// Remove boolean attributes when set to false\n\t\t\t\tjQuery.removeAttr(elem, name);\n\t\t\t} else {\n\t\t\t\telem.setAttribute(name, name);\n\t\t\t}\n\t\t\treturn name;\n\t\t}\n\t};\n\n\tjQuery.each(jQuery.expr.match.bool.source.match(/\\w+/g), function (_i, name) {\n\t\tvar getter = attrHandle[name] || jQuery.find.attr;\n\n\t\tattrHandle[name] = function (elem, name, isXML) {\n\t\t\tvar ret, handle,\n\t\t\t\tlowercaseName = name.toLowerCase();\n\n\t\t\tif (!isXML) {\n\n\t\t\t\t// Avoid an infinite loop by temporarily removing this function from the getter\n\t\t\t\thandle = attrHandle[lowercaseName];\n\t\t\t\tattrHandle[lowercaseName] = ret;\n\t\t\t\tret = getter(elem, name, isXML) != null ?\n\t\t\t\t\tlowercaseName :\n\t\t\t\t\tnull;\n\t\t\t\tattrHandle[lowercaseName] = handle;\n\t\t\t}\n\t\t\treturn ret;\n\t\t};\n\t});\n\n\n\n\n\tvar rfocusable = /^(?:input|select|textarea|button)$/i,\n\t\trclickable = /^(?:a|area)$/i;\n\n\tjQuery.fn.extend({\n\t\tprop: function (name, value) {\n\t\t\treturn access(this, jQuery.prop, name, value, arguments.length > 1);\n\t\t},\n\n\t\tremoveProp: function (name) {\n\t\t\treturn this.each(function () {\n\t\t\t\tdelete this[jQuery.propFix[name] || name];\n\t\t\t});\n\t\t}\n\t});\n\n\tjQuery.extend({\n\t\tprop: function (elem, name, value) {\n\t\t\tvar ret, hooks,\n\t\t\t\tnType = elem.nodeType;\n\n\t\t\t// Don't get/set properties on text, comment and attribute nodes\n\t\t\tif (nType === 3 || nType === 8 || nType === 2) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (nType !== 1 || !jQuery.isXMLDoc(elem)) {\n\n\t\t\t\t// Fix name and attach hooks\n\t\t\t\tname = jQuery.propFix[name] || name;\n\t\t\t\thooks = jQuery.propHooks[name];\n\t\t\t}\n\n\t\t\tif (value !== undefined) {\n\t\t\t\tif (hooks && \"set\" in hooks &&\n\t\t\t\t\t(ret = hooks.set(elem, value, name)) !== undefined) {\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\n\t\t\t\treturn (elem[name] = value);\n\t\t\t}\n\n\t\t\tif (hooks && \"get\" in hooks && (ret = hooks.get(elem, name)) !== null) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\treturn elem[name];\n\t\t},\n\n\t\tpropHooks: {\n\t\t\ttabIndex: {\n\t\t\t\tget: function (elem) {\n\n\t\t\t\t\t// Support: IE <=9 - 11 only\n\t\t\t\t\t// elem.tabIndex doesn't always return the\n\t\t\t\t\t// correct value when it hasn't been explicitly set\n\t\t\t\t\t// Use proper attribute retrieval (trac-12072)\n\t\t\t\t\tvar tabindex = jQuery.find.attr(elem, \"tabindex\");\n\n\t\t\t\t\tif (tabindex) {\n\t\t\t\t\t\treturn parseInt(tabindex, 10);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (\n\t\t\t\t\t\trfocusable.test(elem.nodeName) ||\n\t\t\t\t\t\trclickable.test(elem.nodeName) &&\n\t\t\t\t\t\telem.href\n\t\t\t\t\t) {\n\t\t\t\t\t\treturn 0;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn -1;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tpropFix: {\n\t\t\t\"for\": \"htmlFor\",\n\t\t\t\"class\": \"className\"\n\t\t}\n\t});\n\n\t// Support: IE <=11 only\n\t// Accessing the selectedIndex property\n\t// forces the browser to respect setting selected\n\t// on the option\n\t// The getter ensures a default option is selected\n\t// when in an optgroup\n\t// eslint rule \"no-unused-expressions\" is disabled for this code\n\t// since it considers such accessions noop\n\tif (!support.optSelected) {\n\t\tjQuery.propHooks.selected = {\n\t\t\tget: function (elem) {\n\n\t\t\t\t/* eslint no-unused-expressions: \"off\" */\n\n\t\t\t\tvar parent = elem.parentNode;\n\t\t\t\tif (parent && parent.parentNode) {\n\t\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t\t}\n\t\t\t\treturn null;\n\t\t\t},\n\t\t\tset: function (elem) {\n\n\t\t\t\t/* eslint no-unused-expressions: \"off\" */\n\n\t\t\t\tvar parent = elem.parentNode;\n\t\t\t\tif (parent) {\n\t\t\t\t\tparent.selectedIndex;\n\n\t\t\t\t\tif (parent.parentNode) {\n\t\t\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n\n\tjQuery.each([\n\t\t\"tabIndex\",\n\t\t\"readOnly\",\n\t\t\"maxLength\",\n\t\t\"cellSpacing\",\n\t\t\"cellPadding\",\n\t\t\"rowSpan\",\n\t\t\"colSpan\",\n\t\t\"useMap\",\n\t\t\"frameBorder\",\n\t\t\"contentEditable\"\n\t], function () {\n\t\tjQuery.propFix[this.toLowerCase()] = this;\n\t});\n\n\n\n\n\t// Strip and collapse whitespace according to HTML spec\n\t// https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace\n\tfunction stripAndCollapse(value) {\n\t\tvar tokens = value.match(rnothtmlwhite) || [];\n\t\treturn tokens.join(\" \");\n\t}\n\n\n\tfunction getClass(elem) {\n\t\treturn elem.getAttribute && elem.getAttribute(\"class\") || \"\";\n\t}\n\n\tfunction classesToArray(value) {\n\t\tif (Array.isArray(value)) {\n\t\t\treturn value;\n\t\t}\n\t\tif (typeof value === \"string\") {\n\t\t\treturn value.match(rnothtmlwhite) || [];\n\t\t}\n\t\treturn [];\n\t}\n\n\tjQuery.fn.extend({\n\t\taddClass: function (value) {\n\t\t\tvar classNames, cur, curValue, className, i, finalValue;\n\n\t\t\tif (isFunction(value)) {\n\t\t\t\treturn this.each(function (j) {\n\t\t\t\t\tjQuery(this).addClass(value.call(this, j, getClass(this)));\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tclassNames = classesToArray(value);\n\n\t\t\tif (classNames.length) {\n\t\t\t\treturn this.each(function () {\n\t\t\t\t\tcurValue = getClass(this);\n\t\t\t\t\tcur = this.nodeType === 1 && (\" \" + stripAndCollapse(curValue) + \" \");\n\n\t\t\t\t\tif (cur) {\n\t\t\t\t\t\tfor (i = 0; i < classNames.length; i++) {\n\t\t\t\t\t\t\tclassName = classNames[i];\n\t\t\t\t\t\t\tif (cur.indexOf(\" \" + className + \" \") < 0) {\n\t\t\t\t\t\t\t\tcur += className + \" \";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\t\tfinalValue = stripAndCollapse(cur);\n\t\t\t\t\t\tif (curValue !== finalValue) {\n\t\t\t\t\t\t\tthis.setAttribute(\"class\", finalValue);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn this;\n\t\t},\n\n\t\tremoveClass: function (value) {\n\t\t\tvar classNames, cur, curValue, className, i, finalValue;\n\n\t\t\tif (isFunction(value)) {\n\t\t\t\treturn this.each(function (j) {\n\t\t\t\t\tjQuery(this).removeClass(value.call(this, j, getClass(this)));\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (!arguments.length) {\n\t\t\t\treturn this.attr(\"class\", \"\");\n\t\t\t}\n\n\t\t\tclassNames = classesToArray(value);\n\n\t\t\tif (classNames.length) {\n\t\t\t\treturn this.each(function () {\n\t\t\t\t\tcurValue = getClass(this);\n\n\t\t\t\t\t// This expression is here for better compressibility (see addClass)\n\t\t\t\t\tcur = this.nodeType === 1 && (\" \" + stripAndCollapse(curValue) + \" \");\n\n\t\t\t\t\tif (cur) {\n\t\t\t\t\t\tfor (i = 0; i < classNames.length; i++) {\n\t\t\t\t\t\t\tclassName = classNames[i];\n\n\t\t\t\t\t\t\t// Remove *all* instances\n\t\t\t\t\t\t\twhile (cur.indexOf(\" \" + className + \" \") > -1) {\n\t\t\t\t\t\t\t\tcur = cur.replace(\" \" + className + \" \", \" \");\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\t\tfinalValue = stripAndCollapse(cur);\n\t\t\t\t\t\tif (curValue !== finalValue) {\n\t\t\t\t\t\t\tthis.setAttribute(\"class\", finalValue);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn this;\n\t\t},\n\n\t\ttoggleClass: function (value, stateVal) {\n\t\t\tvar classNames, className, i, self,\n\t\t\t\ttype = typeof value,\n\t\t\t\tisValidValue = type === \"string\" || Array.isArray(value);\n\n\t\t\tif (isFunction(value)) {\n\t\t\t\treturn this.each(function (i) {\n\t\t\t\t\tjQuery(this).toggleClass(\n\t\t\t\t\t\tvalue.call(this, i, getClass(this), stateVal),\n\t\t\t\t\t\tstateVal\n\t\t\t\t\t);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (typeof stateVal === \"boolean\" && isValidValue) {\n\t\t\t\treturn stateVal ? this.addClass(value) : this.removeClass(value);\n\t\t\t}\n\n\t\t\tclassNames = classesToArray(value);\n\n\t\t\treturn this.each(function () {\n\t\t\t\tif (isValidValue) {\n\n\t\t\t\t\t// Toggle individual class names\n\t\t\t\t\tself = jQuery(this);\n\n\t\t\t\t\tfor (i = 0; i < classNames.length; i++) {\n\t\t\t\t\t\tclassName = classNames[i];\n\n\t\t\t\t\t\t// Check each className given, space separated list\n\t\t\t\t\t\tif (self.hasClass(className)) {\n\t\t\t\t\t\t\tself.removeClass(className);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tself.addClass(className);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Toggle whole class name\n\t\t\t\t} else if (value === undefined || type === \"boolean\") {\n\t\t\t\t\tclassName = getClass(this);\n\t\t\t\t\tif (className) {\n\n\t\t\t\t\t\t// Store className if set\n\t\t\t\t\t\tdataPriv.set(this, \"__className__\", className);\n\t\t\t\t\t}\n\n\t\t\t\t\t// If the element has a class name or if we're passed `false`,\n\t\t\t\t\t// then remove the whole classname (if there was one, the above saved it).\n\t\t\t\t\t// Otherwise bring back whatever was previously saved (if anything),\n\t\t\t\t\t// falling back to the empty string if nothing was stored.\n\t\t\t\t\tif (this.setAttribute) {\n\t\t\t\t\t\tthis.setAttribute(\"class\",\n\t\t\t\t\t\t\tclassName || value === false ?\n\t\t\t\t\t\t\t\t\"\" :\n\t\t\t\t\t\t\t\tdataPriv.get(this, \"__className__\") || \"\"\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\thasClass: function (selector) {\n\t\t\tvar className, elem,\n\t\t\t\ti = 0;\n\n\t\t\tclassName = \" \" + selector + \" \";\n\t\t\twhile ((elem = this[i++])) {\n\t\t\t\tif (elem.nodeType === 1 &&\n\t\t\t\t\t(\" \" + stripAndCollapse(getClass(elem)) + \" \").indexOf(className) > -1) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn false;\n\t\t}\n\t});\n\n\n\n\n\tvar rreturn = /\\r/g;\n\n\tjQuery.fn.extend({\n\t\tval: function (value) {\n\t\t\tvar hooks, ret, valueIsFunction,\n\t\t\t\telem = this[0];\n\n\t\t\tif (!arguments.length) {\n\t\t\t\tif (elem) {\n\t\t\t\t\thooks = jQuery.valHooks[elem.type] ||\n\t\t\t\t\t\tjQuery.valHooks[elem.nodeName.toLowerCase()];\n\n\t\t\t\t\tif (hooks &&\n\t\t\t\t\t\t\"get\" in hooks &&\n\t\t\t\t\t\t(ret = hooks.get(elem, \"value\")) !== undefined\n\t\t\t\t\t) {\n\t\t\t\t\t\treturn ret;\n\t\t\t\t\t}\n\n\t\t\t\t\tret = elem.value;\n\n\t\t\t\t\t// Handle most common string cases\n\t\t\t\t\tif (typeof ret === \"string\") {\n\t\t\t\t\t\treturn ret.replace(rreturn, \"\");\n\t\t\t\t\t}\n\n\t\t\t\t\t// Handle cases where value is null/undef or number\n\t\t\t\t\treturn ret == null ? \"\" : ret;\n\t\t\t\t}\n\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvalueIsFunction = isFunction(value);\n\n\t\t\treturn this.each(function (i) {\n\t\t\t\tvar val;\n\n\t\t\t\tif (this.nodeType !== 1) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (valueIsFunction) {\n\t\t\t\t\tval = value.call(this, i, jQuery(this).val());\n\t\t\t\t} else {\n\t\t\t\t\tval = value;\n\t\t\t\t}\n\n\t\t\t\t// Treat null/undefined as \"\"; convert numbers to string\n\t\t\t\tif (val == null) {\n\t\t\t\t\tval = \"\";\n\n\t\t\t\t} else if (typeof val === \"number\") {\n\t\t\t\t\tval += \"\";\n\n\t\t\t\t} else if (Array.isArray(val)) {\n\t\t\t\t\tval = jQuery.map(val, function (value) {\n\t\t\t\t\t\treturn value == null ? \"\" : value + \"\";\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\thooks = jQuery.valHooks[this.type] || jQuery.valHooks[this.nodeName.toLowerCase()];\n\n\t\t\t\t// If set returns undefined, fall back to normal setting\n\t\t\t\tif (!hooks || !(\"set\" in hooks) || hooks.set(this, val, \"value\") === undefined) {\n\t\t\t\t\tthis.value = val;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t});\n\n\tjQuery.extend({\n\t\tvalHooks: {\n\t\t\toption: {\n\t\t\t\tget: function (elem) {\n\n\t\t\t\t\tvar val = jQuery.find.attr(elem, \"value\");\n\t\t\t\t\treturn val != null ?\n\t\t\t\t\t\tval :\n\n\t\t\t\t\t\t// Support: IE <=10 - 11 only\n\t\t\t\t\t\t// option.text throws exceptions (trac-14686, trac-14858)\n\t\t\t\t\t\t// Strip and collapse whitespace\n\t\t\t\t\t\t// https://html.spec.whatwg.org/#strip-and-collapse-whitespace\n\t\t\t\t\t\tstripAndCollapse(jQuery.text(elem));\n\t\t\t\t}\n\t\t\t},\n\t\t\tselect: {\n\t\t\t\tget: function (elem) {\n\t\t\t\t\tvar value, option, i,\n\t\t\t\t\t\toptions = elem.options,\n\t\t\t\t\t\tindex = elem.selectedIndex,\n\t\t\t\t\t\tone = elem.type === \"select-one\",\n\t\t\t\t\t\tvalues = one ? null : [],\n\t\t\t\t\t\tmax = one ? index + 1 : options.length;\n\n\t\t\t\t\tif (index < 0) {\n\t\t\t\t\t\ti = max;\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\ti = one ? index : 0;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Loop through all the selected options\n\t\t\t\t\tfor (; i < max; i++) {\n\t\t\t\t\t\toption = options[i];\n\n\t\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t\t// IE8-9 doesn't update selected after form reset (trac-2551)\n\t\t\t\t\t\tif ((option.selected || i === index) &&\n\n\t\t\t\t\t\t\t// Don't return options that are disabled or in a disabled optgroup\n\t\t\t\t\t\t\t!option.disabled &&\n\t\t\t\t\t\t\t(!option.parentNode.disabled ||\n\t\t\t\t\t\t\t\t!nodeName(option.parentNode, \"optgroup\"))) {\n\n\t\t\t\t\t\t\t// Get the specific value for the option\n\t\t\t\t\t\t\tvalue = jQuery(option).val();\n\n\t\t\t\t\t\t\t// We don't need an array for one selects\n\t\t\t\t\t\t\tif (one) {\n\t\t\t\t\t\t\t\treturn value;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Multi-Selects return an array\n\t\t\t\t\t\t\tvalues.push(value);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn values;\n\t\t\t\t},\n\n\t\t\t\tset: function (elem, value) {\n\t\t\t\t\tvar optionSet, option,\n\t\t\t\t\t\toptions = elem.options,\n\t\t\t\t\t\tvalues = jQuery.makeArray(value),\n\t\t\t\t\t\ti = options.length;\n\n\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\toption = options[i];\n\n\t\t\t\t\t\t/* eslint-disable no-cond-assign */\n\n\t\t\t\t\t\tif (option.selected =\n\t\t\t\t\t\t\tjQuery.inArray(jQuery.valHooks.option.get(option), values) > -1\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\toptionSet = true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t/* eslint-enable no-cond-assign */\n\t\t\t\t\t}\n\n\t\t\t\t\t// Force browsers to behave consistently when non-matching value is set\n\t\t\t\t\tif (!optionSet) {\n\t\t\t\t\t\telem.selectedIndex = -1;\n\t\t\t\t\t}\n\t\t\t\t\treturn values;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\n\t// Radios and checkboxes getter/setter\n\tjQuery.each([\"radio\", \"checkbox\"], function () {\n\t\tjQuery.valHooks[this] = {\n\t\t\tset: function (elem, value) {\n\t\t\t\tif (Array.isArray(value)) {\n\t\t\t\t\treturn (elem.checked = jQuery.inArray(jQuery(elem).val(), value) > -1);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\tif (!support.checkOn) {\n\t\t\tjQuery.valHooks[this].get = function (elem) {\n\t\t\t\treturn elem.getAttribute(\"value\") === null ? \"on\" : elem.value;\n\t\t\t};\n\t\t}\n\t});\n\n\n\n\n\t// Return jQuery for attributes-only inclusion\n\tvar location = window.location;\n\n\tvar nonce = { guid: Date.now() };\n\n\tvar rquery = (/\\?/);\n\n\n\n\t// Cross-browser xml parsing\n\tjQuery.parseXML = function (data) {\n\t\tvar xml, parserErrorElem;\n\t\tif (!data || typeof data !== \"string\") {\n\t\t\treturn null;\n\t\t}\n\n\t\t// Support: IE 9 - 11 only\n\t\t// IE throws on parseFromString with invalid input.\n\t\ttry {\n\t\t\txml = (new window.DOMParser()).parseFromString(data, \"text/xml\");\n\t\t} catch (e) { }\n\n\t\tparserErrorElem = xml && xml.getElementsByTagName(\"parsererror\")[0];\n\t\tif (!xml || parserErrorElem) {\n\t\t\tjQuery.error(\"Invalid XML: \" + (\n\t\t\t\tparserErrorElem ?\n\t\t\t\t\tjQuery.map(parserErrorElem.childNodes, function (el) {\n\t\t\t\t\t\treturn el.textContent;\n\t\t\t\t\t}).join(\"\\n\") :\n\t\t\t\t\tdata\n\t\t\t));\n\t\t}\n\t\treturn xml;\n\t};\n\n\n\tvar rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,\n\t\tstopPropagationCallback = function (e) {\n\t\t\te.stopPropagation();\n\t\t};\n\n\tjQuery.extend(jQuery.event, {\n\n\t\ttrigger: function (event, data, elem, onlyHandlers) {\n\n\t\t\tvar i, cur, tmp, bubbleType, ontype, handle, special, lastElement,\n\t\t\t\teventPath = [elem || document],\n\t\t\t\ttype = hasOwn.call(event, \"type\") ? event.type : event,\n\t\t\t\tnamespaces = hasOwn.call(event, \"namespace\") ? event.namespace.split(\".\") : [];\n\n\t\t\tcur = lastElement = tmp = elem = elem || document;\n\n\t\t\t// Don't do events on text and comment nodes\n\t\t\tif (elem.nodeType === 3 || elem.nodeType === 8) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// focus/blur morphs to focusin/out; ensure we're not firing them right now\n\t\t\tif (rfocusMorph.test(type + jQuery.event.triggered)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (type.indexOf(\".\") > -1) {\n\n\t\t\t\t// Namespaced trigger; create a regexp to match event type in handle()\n\t\t\t\tnamespaces = type.split(\".\");\n\t\t\t\ttype = namespaces.shift();\n\t\t\t\tnamespaces.sort();\n\t\t\t}\n\t\t\tontype = type.indexOf(\":\") < 0 && \"on\" + type;\n\n\t\t\t// Caller can pass in a jQuery.Event object, Object, or just an event type string\n\t\t\tevent = event[jQuery.expando] ?\n\t\t\t\tevent :\n\t\t\t\tnew jQuery.Event(type, typeof event === \"object\" && event);\n\n\t\t\t// Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)\n\t\t\tevent.isTrigger = onlyHandlers ? 2 : 3;\n\t\t\tevent.namespace = namespaces.join(\".\");\n\t\t\tevent.rnamespace = event.namespace ?\n\t\t\t\tnew RegExp(\"(^|\\\\.)\" + namespaces.join(\"\\\\.(?:.*\\\\.|)\") + \"(\\\\.|$)\") :\n\t\t\t\tnull;\n\n\t\t\t// Clean up the event in case it is being reused\n\t\t\tevent.result = undefined;\n\t\t\tif (!event.target) {\n\t\t\t\tevent.target = elem;\n\t\t\t}\n\n\t\t\t// Clone any incoming data and prepend the event, creating the handler arg list\n\t\t\tdata = data == null ?\n\t\t\t\t[event] :\n\t\t\t\tjQuery.makeArray(data, [event]);\n\n\t\t\t// Allow special events to draw outside the lines\n\t\t\tspecial = jQuery.event.special[type] || {};\n\t\t\tif (!onlyHandlers && special.trigger && special.trigger.apply(elem, data) === false) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Determine event propagation path in advance, per W3C events spec (trac-9951)\n\t\t\t// Bubble up to document, then to window; watch for a global ownerDocument var (trac-9724)\n\t\t\tif (!onlyHandlers && !special.noBubble && !isWindow(elem)) {\n\n\t\t\t\tbubbleType = special.delegateType || type;\n\t\t\t\tif (!rfocusMorph.test(bubbleType + type)) {\n\t\t\t\t\tcur = cur.parentNode;\n\t\t\t\t}\n\t\t\t\tfor (; cur; cur = cur.parentNode) {\n\t\t\t\t\teventPath.push(cur);\n\t\t\t\t\ttmp = cur;\n\t\t\t\t}\n\n\t\t\t\t// Only add window if we got to document (e.g., not plain obj or detached DOM)\n\t\t\t\tif (tmp === (elem.ownerDocument || document)) {\n\t\t\t\t\teventPath.push(tmp.defaultView || tmp.parentWindow || window);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Fire handlers on the event path\n\t\t\ti = 0;\n\t\t\twhile ((cur = eventPath[i++]) && !event.isPropagationStopped()) {\n\t\t\t\tlastElement = cur;\n\t\t\t\tevent.type = i > 1 ?\n\t\t\t\t\tbubbleType :\n\t\t\t\t\tspecial.bindType || type;\n\n\t\t\t\t// jQuery handler\n\t\t\t\thandle = (dataPriv.get(cur, \"events\") || Object.create(null))[event.type] &&\n\t\t\t\t\tdataPriv.get(cur, \"handle\");\n\t\t\t\tif (handle) {\n\t\t\t\t\thandle.apply(cur, data);\n\t\t\t\t}\n\n\t\t\t\t// Native handler\n\t\t\t\thandle = ontype && cur[ontype];\n\t\t\t\tif (handle && handle.apply && acceptData(cur)) {\n\t\t\t\t\tevent.result = handle.apply(cur, data);\n\t\t\t\t\tif (event.result === false) {\n\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tevent.type = type;\n\n\t\t\t// If nobody prevented the default action, do it now\n\t\t\tif (!onlyHandlers && !event.isDefaultPrevented()) {\n\n\t\t\t\tif ((!special._default ||\n\t\t\t\t\tspecial._default.apply(eventPath.pop(), data) === false) &&\n\t\t\t\t\tacceptData(elem)) {\n\n\t\t\t\t\t// Call a native DOM method on the target with the same name as the event.\n\t\t\t\t\t// Don't do default actions on window, that's where global variables be (trac-6170)\n\t\t\t\t\tif (ontype && isFunction(elem[type]) && !isWindow(elem)) {\n\n\t\t\t\t\t\t// Don't re-trigger an onFOO event when we call its FOO() method\n\t\t\t\t\t\ttmp = elem[ontype];\n\n\t\t\t\t\t\tif (tmp) {\n\t\t\t\t\t\t\telem[ontype] = null;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Prevent re-triggering of the same event, since we already bubbled it above\n\t\t\t\t\t\tjQuery.event.triggered = type;\n\n\t\t\t\t\t\tif (event.isPropagationStopped()) {\n\t\t\t\t\t\t\tlastElement.addEventListener(type, stopPropagationCallback);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\telem[type]();\n\n\t\t\t\t\t\tif (event.isPropagationStopped()) {\n\t\t\t\t\t\t\tlastElement.removeEventListener(type, stopPropagationCallback);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tjQuery.event.triggered = undefined;\n\n\t\t\t\t\t\tif (tmp) {\n\t\t\t\t\t\t\telem[ontype] = tmp;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn event.result;\n\t\t},\n\n\t\t// Piggyback on a donor event to simulate a different one\n\t\t// Used only for `focus(in | out)` events\n\t\tsimulate: function (type, elem, event) {\n\t\t\tvar e = jQuery.extend(\n\t\t\t\tnew jQuery.Event(),\n\t\t\t\tevent,\n\t\t\t\t{\n\t\t\t\t\ttype: type,\n\t\t\t\t\tisSimulated: true\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tjQuery.event.trigger(e, null, elem);\n\t\t}\n\n\t});\n\n\tjQuery.fn.extend({\n\n\t\ttrigger: function (type, data) {\n\t\t\treturn this.each(function () {\n\t\t\t\tjQuery.event.trigger(type, data, this);\n\t\t\t});\n\t\t},\n\t\ttriggerHandler: function (type, data) {\n\t\t\tvar elem = this[0];\n\t\t\tif (elem) {\n\t\t\t\treturn jQuery.event.trigger(type, data, elem, true);\n\t\t\t}\n\t\t}\n\t});\n\n\n\tvar\n\t\trbracket = /\\[\\]$/,\n\t\trCRLF = /\\r?\\n/g,\n\t\trsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,\n\t\trsubmittable = /^(?:input|select|textarea|keygen)/i;\n\n\tfunction buildParams(prefix, obj, traditional, add) {\n\t\tvar name;\n\n\t\tif (Array.isArray(obj)) {\n\n\t\t\t// Serialize array item.\n\t\t\tjQuery.each(obj, function (i, v) {\n\t\t\t\tif (traditional || rbracket.test(prefix)) {\n\n\t\t\t\t\t// Treat each array item as a scalar.\n\t\t\t\t\tadd(prefix, v);\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// Item is non-scalar (array or object), encode its numeric index.\n\t\t\t\t\tbuildParams(\n\t\t\t\t\t\tprefix + \"[\" + (typeof v === \"object\" && v != null ? i : \"\") + \"]\",\n\t\t\t\t\t\tv,\n\t\t\t\t\t\ttraditional,\n\t\t\t\t\t\tadd\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t});\n\n\t\t} else if (!traditional && toType(obj) === \"object\") {\n\n\t\t\t// Serialize object item.\n\t\t\tfor (name in obj) {\n\t\t\t\tbuildParams(prefix + \"[\" + name + \"]\", obj[name], traditional, add);\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// Serialize scalar item.\n\t\t\tadd(prefix, obj);\n\t\t}\n\t}\n\n\t// Serialize an array of form elements or a set of\n\t// key/values into a query string\n\tjQuery.param = function (a, traditional) {\n\t\tvar prefix,\n\t\t\ts = [],\n\t\t\tadd = function (key, valueOrFunction) {\n\n\t\t\t\t// If value is a function, invoke it and use its return value\n\t\t\t\tvar value = isFunction(valueOrFunction) ?\n\t\t\t\t\tvalueOrFunction() :\n\t\t\t\t\tvalueOrFunction;\n\n\t\t\t\ts[s.length] = encodeURIComponent(key) + \"=\" +\n\t\t\t\t\tencodeURIComponent(value == null ? \"\" : value);\n\t\t\t};\n\n\t\tif (a == null) {\n\t\t\treturn \"\";\n\t\t}\n\n\t\t// If an array was passed in, assume that it is an array of form elements.\n\t\tif (Array.isArray(a) || (a.jquery && !jQuery.isPlainObject(a))) {\n\n\t\t\t// Serialize the form elements\n\t\t\tjQuery.each(a, function () {\n\t\t\t\tadd(this.name, this.value);\n\t\t\t});\n\n\t\t} else {\n\n\t\t\t// If traditional, encode the \"old\" way (the way 1.3.2 or older\n\t\t\t// did it), otherwise encode params recursively.\n\t\t\tfor (prefix in a) {\n\t\t\t\tbuildParams(prefix, a[prefix], traditional, add);\n\t\t\t}\n\t\t}\n\n\t\t// Return the resulting serialization\n\t\treturn s.join(\"&\");\n\t};\n\n\tjQuery.fn.extend({\n\t\tserialize: function () {\n\t\t\treturn jQuery.param(this.serializeArray());\n\t\t},\n\t\tserializeArray: function () {\n\t\t\treturn this.map(function () {\n\n\t\t\t\t// Can add propHook for \"elements\" to filter or add form elements\n\t\t\t\tvar elements = jQuery.prop(this, \"elements\");\n\t\t\t\treturn elements ? jQuery.makeArray(elements) : this;\n\t\t\t}).filter(function () {\n\t\t\t\tvar type = this.type;\n\n\t\t\t\t// Use .is( \":disabled\" ) so that fieldset[disabled] works\n\t\t\t\treturn this.name && !jQuery(this).is(\":disabled\") &&\n\t\t\t\t\trsubmittable.test(this.nodeName) && !rsubmitterTypes.test(type) &&\n\t\t\t\t\t(this.checked || !rcheckableType.test(type));\n\t\t\t}).map(function (_i, elem) {\n\t\t\t\tvar val = jQuery(this).val();\n\n\t\t\t\tif (val == null) {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\n\t\t\t\tif (Array.isArray(val)) {\n\t\t\t\t\treturn jQuery.map(val, function (val) {\n\t\t\t\t\t\treturn { name: elem.name, value: val.replace(rCRLF, \"\\r\\n\") };\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\treturn { name: elem.name, value: val.replace(rCRLF, \"\\r\\n\") };\n\t\t\t}).get();\n\t\t}\n\t});\n\n\n\tvar\n\t\tr20 = /%20/g,\n\t\trhash = /#.*$/,\n\t\trantiCache = /([?&])_=[^&]*/,\n\t\trheaders = /^(.*?):[ \\t]*([^\\r\\n]*)$/mg,\n\n\t\t// trac-7653, trac-8125, trac-8152: local protocol detection\n\t\trlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,\n\t\trnoContent = /^(?:GET|HEAD)$/,\n\t\trprotocol = /^\\/\\//,\n\n\t\t/* Prefilters\n\t\t * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)\n\t\t * 2) These are called:\n\t\t *    - BEFORE asking for a transport\n\t\t *    - AFTER param serialization (s.data is a string if s.processData is true)\n\t\t * 3) key is the dataType\n\t\t * 4) the catchall symbol \"*\" can be used\n\t\t * 5) execution will start with transport dataType and THEN continue down to \"*\" if needed\n\t\t */\n\t\tprefilters = {},\n\n\t\t/* Transports bindings\n\t\t * 1) key is the dataType\n\t\t * 2) the catchall symbol \"*\" can be used\n\t\t * 3) selection will start with transport dataType and THEN go to \"*\" if needed\n\t\t */\n\t\ttransports = {},\n\n\t\t// Avoid comment-prolog char sequence (trac-10098); must appease lint and evade compression\n\t\tallTypes = \"*/\".concat(\"*\"),\n\n\t\t// Anchor tag for parsing the document origin\n\t\toriginAnchor = document.createElement(\"a\");\n\n\toriginAnchor.href = location.href;\n\n\t// Base \"constructor\" for jQuery.ajaxPrefilter and jQuery.ajaxTransport\n\tfunction addToPrefiltersOrTransports(structure) {\n\n\t\t// dataTypeExpression is optional and defaults to \"*\"\n\t\treturn function (dataTypeExpression, func) {\n\n\t\t\tif (typeof dataTypeExpression !== \"string\") {\n\t\t\t\tfunc = dataTypeExpression;\n\t\t\t\tdataTypeExpression = \"*\";\n\t\t\t}\n\n\t\t\tvar dataType,\n\t\t\t\ti = 0,\n\t\t\t\tdataTypes = dataTypeExpression.toLowerCase().match(rnothtmlwhite) || [];\n\n\t\t\tif (isFunction(func)) {\n\n\t\t\t\t// For each dataType in the dataTypeExpression\n\t\t\t\twhile ((dataType = dataTypes[i++])) {\n\n\t\t\t\t\t// Prepend if requested\n\t\t\t\t\tif (dataType[0] === \"+\") {\n\t\t\t\t\t\tdataType = dataType.slice(1) || \"*\";\n\t\t\t\t\t\t(structure[dataType] = structure[dataType] || []).unshift(func);\n\n\t\t\t\t\t\t// Otherwise append\n\t\t\t\t\t} else {\n\t\t\t\t\t\t(structure[dataType] = structure[dataType] || []).push(func);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n\n\t// Base inspection function for prefilters and transports\n\tfunction inspectPrefiltersOrTransports(structure, options, originalOptions, jqXHR) {\n\n\t\tvar inspected = {},\n\t\t\tseekingTransport = (structure === transports);\n\n\t\tfunction inspect(dataType) {\n\t\t\tvar selected;\n\t\t\tinspected[dataType] = true;\n\t\t\tjQuery.each(structure[dataType] || [], function (_, prefilterOrFactory) {\n\t\t\t\tvar dataTypeOrTransport = prefilterOrFactory(options, originalOptions, jqXHR);\n\t\t\t\tif (typeof dataTypeOrTransport === \"string\" &&\n\t\t\t\t\t!seekingTransport && !inspected[dataTypeOrTransport]) {\n\n\t\t\t\t\toptions.dataTypes.unshift(dataTypeOrTransport);\n\t\t\t\t\tinspect(dataTypeOrTransport);\n\t\t\t\t\treturn false;\n\t\t\t\t} else if (seekingTransport) {\n\t\t\t\t\treturn !(selected = dataTypeOrTransport);\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn selected;\n\t\t}\n\n\t\treturn inspect(options.dataTypes[0]) || !inspected[\"*\"] && inspect(\"*\");\n\t}\n\n\t// A special extend for ajax options\n\t// that takes \"flat\" options (not to be deep extended)\n\t// Fixes trac-9887\n\tfunction ajaxExtend(target, src) {\n\t\tvar key, deep,\n\t\t\tflatOptions = jQuery.ajaxSettings.flatOptions || {};\n\n\t\tfor (key in src) {\n\t\t\tif (src[key] !== undefined) {\n\t\t\t\t(flatOptions[key] ? target : (deep || (deep = {})))[key] = src[key];\n\t\t\t}\n\t\t}\n\t\tif (deep) {\n\t\t\tjQuery.extend(true, target, deep);\n\t\t}\n\n\t\treturn target;\n\t}\n\n\t/* Handles responses to an ajax request:\n\t * - finds the right dataType (mediates between content-type and expected dataType)\n\t * - returns the corresponding response\n\t */\n\tfunction ajaxHandleResponses(s, jqXHR, responses) {\n\n\t\tvar ct, type, finalDataType, firstDataType,\n\t\t\tcontents = s.contents,\n\t\t\tdataTypes = s.dataTypes;\n\n\t\t// Remove auto dataType and get content-type in the process\n\t\twhile (dataTypes[0] === \"*\") {\n\t\t\tdataTypes.shift();\n\t\t\tif (ct === undefined) {\n\t\t\t\tct = s.mimeType || jqXHR.getResponseHeader(\"Content-Type\");\n\t\t\t}\n\t\t}\n\n\t\t// Check if we're dealing with a known content-type\n\t\tif (ct) {\n\t\t\tfor (type in contents) {\n\t\t\t\tif (contents[type] && contents[type].test(ct)) {\n\t\t\t\t\tdataTypes.unshift(type);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Check to see if we have a response for the expected dataType\n\t\tif (dataTypes[0] in responses) {\n\t\t\tfinalDataType = dataTypes[0];\n\t\t} else {\n\n\t\t\t// Try convertible dataTypes\n\t\t\tfor (type in responses) {\n\t\t\t\tif (!dataTypes[0] || s.converters[type + \" \" + dataTypes[0]]) {\n\t\t\t\t\tfinalDataType = type;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (!firstDataType) {\n\t\t\t\t\tfirstDataType = type;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Or just use first one\n\t\t\tfinalDataType = finalDataType || firstDataType;\n\t\t}\n\n\t\t// If we found a dataType\n\t\t// We add the dataType to the list if needed\n\t\t// and return the corresponding response\n\t\tif (finalDataType) {\n\t\t\tif (finalDataType !== dataTypes[0]) {\n\t\t\t\tdataTypes.unshift(finalDataType);\n\t\t\t}\n\t\t\treturn responses[finalDataType];\n\t\t}\n\t}\n\n\t/* Chain conversions given the request and the original response\n\t * Also sets the responseXXX fields on the jqXHR instance\n\t */\n\tfunction ajaxConvert(s, response, jqXHR, isSuccess) {\n\t\tvar conv2, current, conv, tmp, prev,\n\t\t\tconverters = {},\n\n\t\t\t// Work with a copy of dataTypes in case we need to modify it for conversion\n\t\t\tdataTypes = s.dataTypes.slice();\n\n\t\t// Create converters map with lowercased keys\n\t\tif (dataTypes[1]) {\n\t\t\tfor (conv in s.converters) {\n\t\t\t\tconverters[conv.toLowerCase()] = s.converters[conv];\n\t\t\t}\n\t\t}\n\n\t\tcurrent = dataTypes.shift();\n\n\t\t// Convert to each sequential dataType\n\t\twhile (current) {\n\n\t\t\tif (s.responseFields[current]) {\n\t\t\t\tjqXHR[s.responseFields[current]] = response;\n\t\t\t}\n\n\t\t\t// Apply the dataFilter if provided\n\t\t\tif (!prev && isSuccess && s.dataFilter) {\n\t\t\t\tresponse = s.dataFilter(response, s.dataType);\n\t\t\t}\n\n\t\t\tprev = current;\n\t\t\tcurrent = dataTypes.shift();\n\n\t\t\tif (current) {\n\n\t\t\t\t// There's only work to do if current dataType is non-auto\n\t\t\t\tif (current === \"*\") {\n\n\t\t\t\t\tcurrent = prev;\n\n\t\t\t\t\t// Convert response if prev dataType is non-auto and differs from current\n\t\t\t\t} else if (prev !== \"*\" && prev !== current) {\n\n\t\t\t\t\t// Seek a direct converter\n\t\t\t\t\tconv = converters[prev + \" \" + current] || converters[\"* \" + current];\n\n\t\t\t\t\t// If none found, seek a pair\n\t\t\t\t\tif (!conv) {\n\t\t\t\t\t\tfor (conv2 in converters) {\n\n\t\t\t\t\t\t\t// If conv2 outputs current\n\t\t\t\t\t\t\ttmp = conv2.split(\" \");\n\t\t\t\t\t\t\tif (tmp[1] === current) {\n\n\t\t\t\t\t\t\t\t// If prev can be converted to accepted input\n\t\t\t\t\t\t\t\tconv = converters[prev + \" \" + tmp[0]] ||\n\t\t\t\t\t\t\t\t\tconverters[\"* \" + tmp[0]];\n\t\t\t\t\t\t\t\tif (conv) {\n\n\t\t\t\t\t\t\t\t\t// Condense equivalence converters\n\t\t\t\t\t\t\t\t\tif (conv === true) {\n\t\t\t\t\t\t\t\t\t\tconv = converters[conv2];\n\n\t\t\t\t\t\t\t\t\t\t// Otherwise, insert the intermediate dataType\n\t\t\t\t\t\t\t\t\t} else if (converters[conv2] !== true) {\n\t\t\t\t\t\t\t\t\t\tcurrent = tmp[0];\n\t\t\t\t\t\t\t\t\t\tdataTypes.unshift(tmp[1]);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Apply converter (if not an equivalence)\n\t\t\t\t\tif (conv !== true) {\n\n\t\t\t\t\t\t// Unless errors are allowed to bubble, catch and return them\n\t\t\t\t\t\tif (conv && s.throws) {\n\t\t\t\t\t\t\tresponse = conv(response);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\tresponse = conv(response);\n\t\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\tstate: \"parsererror\",\n\t\t\t\t\t\t\t\t\terror: conv ? e : \"No conversion from \" + prev + \" to \" + current\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn { state: \"success\", data: response };\n\t}\n\n\tjQuery.extend({\n\n\t\t// Counter for holding the number of active queries\n\t\tactive: 0,\n\n\t\t// Last-Modified header cache for next request\n\t\tlastModified: {},\n\t\tetag: {},\n\n\t\tajaxSettings: {\n\t\t\turl: location.href,\n\t\t\ttype: \"GET\",\n\t\t\tisLocal: rlocalProtocol.test(location.protocol),\n\t\t\tglobal: true,\n\t\t\tprocessData: true,\n\t\t\tasync: true,\n\t\t\tcontentType: \"application/x-www-form-urlencoded; charset=UTF-8\",\n\n\t\t\t/*\n\t\t\ttimeout: 0,\n\t\t\tdata: null,\n\t\t\tdataType: null,\n\t\t\tusername: null,\n\t\t\tpassword: null,\n\t\t\tcache: null,\n\t\t\tthrows: false,\n\t\t\ttraditional: false,\n\t\t\theaders: {},\n\t\t\t*/\n\n\t\t\taccepts: {\n\t\t\t\t\"*\": allTypes,\n\t\t\t\ttext: \"text/plain\",\n\t\t\t\thtml: \"text/html\",\n\t\t\t\txml: \"application/xml, text/xml\",\n\t\t\t\tjson: \"application/json, text/javascript\"\n\t\t\t},\n\n\t\t\tcontents: {\n\t\t\t\txml: /\\bxml\\b/,\n\t\t\t\thtml: /\\bhtml/,\n\t\t\t\tjson: /\\bjson\\b/\n\t\t\t},\n\n\t\t\tresponseFields: {\n\t\t\t\txml: \"responseXML\",\n\t\t\t\ttext: \"responseText\",\n\t\t\t\tjson: \"responseJSON\"\n\t\t\t},\n\n\t\t\t// Data converters\n\t\t\t// Keys separate source (or catchall \"*\") and destination types with a single space\n\t\t\tconverters: {\n\n\t\t\t\t// Convert anything to text\n\t\t\t\t\"* text\": String,\n\n\t\t\t\t// Text to html (true = no transformation)\n\t\t\t\t\"text html\": true,\n\n\t\t\t\t// Evaluate text as a json expression\n\t\t\t\t\"text json\": JSON.parse,\n\n\t\t\t\t// Parse text as xml\n\t\t\t\t\"text xml\": jQuery.parseXML\n\t\t\t},\n\n\t\t\t// For options that shouldn't be deep extended:\n\t\t\t// you can add your own custom options here if\n\t\t\t// and when you create one that shouldn't be\n\t\t\t// deep extended (see ajaxExtend)\n\t\t\tflatOptions: {\n\t\t\t\turl: true,\n\t\t\t\tcontext: true\n\t\t\t}\n\t\t},\n\n\t\t// Creates a full fledged settings object into target\n\t\t// with both ajaxSettings and settings fields.\n\t\t// If target is omitted, writes into ajaxSettings.\n\t\tajaxSetup: function (target, settings) {\n\t\t\treturn settings ?\n\n\t\t\t\t// Building a settings object\n\t\t\t\tajaxExtend(ajaxExtend(target, jQuery.ajaxSettings), settings) :\n\n\t\t\t\t// Extending ajaxSettings\n\t\t\t\tajaxExtend(jQuery.ajaxSettings, target);\n\t\t},\n\n\t\tajaxPrefilter: addToPrefiltersOrTransports(prefilters),\n\t\tajaxTransport: addToPrefiltersOrTransports(transports),\n\n\t\t// Main method\n\t\tajax: function (url, options) {\n\n\t\t\t// If url is an object, simulate pre-1.5 signature\n\t\t\tif (typeof url === \"object\") {\n\t\t\t\toptions = url;\n\t\t\t\turl = undefined;\n\t\t\t}\n\n\t\t\t// Force options to be an object\n\t\t\toptions = options || {};\n\n\t\t\tvar transport,\n\n\t\t\t\t// URL without anti-cache param\n\t\t\t\tcacheURL,\n\n\t\t\t\t// Response headers\n\t\t\t\tresponseHeadersString,\n\t\t\t\tresponseHeaders,\n\n\t\t\t\t// timeout handle\n\t\t\t\ttimeoutTimer,\n\n\t\t\t\t// Url cleanup var\n\t\t\t\turlAnchor,\n\n\t\t\t\t// Request state (becomes false upon send and true upon completion)\n\t\t\t\tcompleted,\n\n\t\t\t\t// To know if global events are to be dispatched\n\t\t\t\tfireGlobals,\n\n\t\t\t\t// Loop variable\n\t\t\t\ti,\n\n\t\t\t\t// uncached part of the url\n\t\t\t\tuncached,\n\n\t\t\t\t// Create the final options object\n\t\t\t\ts = jQuery.ajaxSetup({}, options),\n\n\t\t\t\t// Callbacks context\n\t\t\t\tcallbackContext = s.context || s,\n\n\t\t\t\t// Context for global events is callbackContext if it is a DOM node or jQuery collection\n\t\t\t\tglobalEventContext = s.context &&\n\t\t\t\t\t(callbackContext.nodeType || callbackContext.jquery) ?\n\t\t\t\t\tjQuery(callbackContext) :\n\t\t\t\t\tjQuery.event,\n\n\t\t\t\t// Deferreds\n\t\t\t\tdeferred = jQuery.Deferred(),\n\t\t\t\tcompleteDeferred = jQuery.Callbacks(\"once memory\"),\n\n\t\t\t\t// Status-dependent callbacks\n\t\t\t\tstatusCode = s.statusCode || {},\n\n\t\t\t\t// Headers (they are sent all at once)\n\t\t\t\trequestHeaders = {},\n\t\t\t\trequestHeadersNames = {},\n\n\t\t\t\t// Default abort message\n\t\t\t\tstrAbort = \"canceled\",\n\n\t\t\t\t// Fake xhr\n\t\t\t\tjqXHR = {\n\t\t\t\t\treadyState: 0,\n\n\t\t\t\t\t// Builds headers hashtable if needed\n\t\t\t\t\tgetResponseHeader: function (key) {\n\t\t\t\t\t\tvar match;\n\t\t\t\t\t\tif (completed) {\n\t\t\t\t\t\t\tif (!responseHeaders) {\n\t\t\t\t\t\t\t\tresponseHeaders = {};\n\t\t\t\t\t\t\t\twhile ((match = rheaders.exec(responseHeadersString))) {\n\t\t\t\t\t\t\t\t\tresponseHeaders[match[1].toLowerCase() + \" \"] =\n\t\t\t\t\t\t\t\t\t\t(responseHeaders[match[1].toLowerCase() + \" \"] || [])\n\t\t\t\t\t\t\t\t\t\t\t.concat(match[2]);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tmatch = responseHeaders[key.toLowerCase() + \" \"];\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn match == null ? null : match.join(\", \");\n\t\t\t\t\t},\n\n\t\t\t\t\t// Raw string\n\t\t\t\t\tgetAllResponseHeaders: function () {\n\t\t\t\t\t\treturn completed ? responseHeadersString : null;\n\t\t\t\t\t},\n\n\t\t\t\t\t// Caches the header\n\t\t\t\t\tsetRequestHeader: function (name, value) {\n\t\t\t\t\t\tif (completed == null) {\n\t\t\t\t\t\t\tname = requestHeadersNames[name.toLowerCase()] =\n\t\t\t\t\t\t\t\trequestHeadersNames[name.toLowerCase()] || name;\n\t\t\t\t\t\t\trequestHeaders[name] = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn this;\n\t\t\t\t\t},\n\n\t\t\t\t\t// Overrides response content-type header\n\t\t\t\t\toverrideMimeType: function (type) {\n\t\t\t\t\t\tif (completed == null) {\n\t\t\t\t\t\t\ts.mimeType = type;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn this;\n\t\t\t\t\t},\n\n\t\t\t\t\t// Status-dependent callbacks\n\t\t\t\t\tstatusCode: function (map) {\n\t\t\t\t\t\tvar code;\n\t\t\t\t\t\tif (map) {\n\t\t\t\t\t\t\tif (completed) {\n\n\t\t\t\t\t\t\t\t// Execute the appropriate callbacks\n\t\t\t\t\t\t\t\tjqXHR.always(map[jqXHR.status]);\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t// Lazy-add the new callbacks in a way that preserves old ones\n\t\t\t\t\t\t\t\tfor (code in map) {\n\t\t\t\t\t\t\t\t\tstatusCode[code] = [statusCode[code], map[code]];\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn this;\n\t\t\t\t\t},\n\n\t\t\t\t\t// Cancel the request\n\t\t\t\t\tabort: function (statusText) {\n\t\t\t\t\t\tvar finalText = statusText || strAbort;\n\t\t\t\t\t\tif (transport) {\n\t\t\t\t\t\t\ttransport.abort(finalText);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdone(0, finalText);\n\t\t\t\t\t\treturn this;\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t// Attach deferreds\n\t\t\tdeferred.promise(jqXHR);\n\n\t\t\t// Add protocol if not provided (prefilters might expect it)\n\t\t\t// Handle falsy url in the settings object (trac-10093: consistency with old signature)\n\t\t\t// We also use the url parameter if available\n\t\t\ts.url = ((url || s.url || location.href) + \"\")\n\t\t\t\t.replace(rprotocol, location.protocol + \"//\");\n\n\t\t\t// Alias method option to type as per ticket trac-12004\n\t\t\ts.type = options.method || options.type || s.method || s.type;\n\n\t\t\t// Extract dataTypes list\n\t\t\ts.dataTypes = (s.dataType || \"*\").toLowerCase().match(rnothtmlwhite) || [\"\"];\n\n\t\t\t// A cross-domain request is in order when the origin doesn't match the current origin.\n\t\t\tif (s.crossDomain == null) {\n\t\t\t\turlAnchor = document.createElement(\"a\");\n\n\t\t\t\t// Support: IE <=8 - 11, Edge 12 - 15\n\t\t\t\t// IE throws exception on accessing the href property if url is malformed,\n\t\t\t\t// e.g. http://example.com:80x/\n\t\t\t\ttry {\n\t\t\t\t\turlAnchor.href = s.url;\n\n\t\t\t\t\t// Support: IE <=8 - 11 only\n\t\t\t\t\t// Anchor's host property isn't correctly set when s.url is relative\n\t\t\t\t\turlAnchor.href = urlAnchor.href;\n\t\t\t\t\ts.crossDomain = originAnchor.protocol + \"//\" + originAnchor.host !==\n\t\t\t\t\t\turlAnchor.protocol + \"//\" + urlAnchor.host;\n\t\t\t\t} catch (e) {\n\n\t\t\t\t\t// If there is an error parsing the URL, assume it is crossDomain,\n\t\t\t\t\t// it can be rejected by the transport if it is invalid\n\t\t\t\t\ts.crossDomain = true;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Convert data if not already a string\n\t\t\tif (s.data && s.processData && typeof s.data !== \"string\") {\n\t\t\t\ts.data = jQuery.param(s.data, s.traditional);\n\t\t\t}\n\n\t\t\t// Apply prefilters\n\t\t\tinspectPrefiltersOrTransports(prefilters, s, options, jqXHR);\n\n\t\t\t// If request was aborted inside a prefilter, stop there\n\t\t\tif (completed) {\n\t\t\t\treturn jqXHR;\n\t\t\t}\n\n\t\t\t// We can fire global events as of now if asked to\n\t\t\t// Don't fire events if jQuery.event is undefined in an AMD-usage scenario (trac-15118)\n\t\t\tfireGlobals = jQuery.event && s.global;\n\n\t\t\t// Watch for a new set of requests\n\t\t\tif (fireGlobals && jQuery.active++ === 0) {\n\t\t\t\tjQuery.event.trigger(\"ajaxStart\");\n\t\t\t}\n\n\t\t\t// Uppercase the type\n\t\t\ts.type = s.type.toUpperCase();\n\n\t\t\t// Determine if request has content\n\t\t\ts.hasContent = !rnoContent.test(s.type);\n\n\t\t\t// Save the URL in case we're toying with the If-Modified-Since\n\t\t\t// and/or If-None-Match header later on\n\t\t\t// Remove hash to simplify url manipulation\n\t\t\tcacheURL = s.url.replace(rhash, \"\");\n\n\t\t\t// More options handling for requests with no content\n\t\t\tif (!s.hasContent) {\n\n\t\t\t\t// Remember the hash so we can put it back\n\t\t\t\tuncached = s.url.slice(cacheURL.length);\n\n\t\t\t\t// If data is available and should be processed, append data to url\n\t\t\t\tif (s.data && (s.processData || typeof s.data === \"string\")) {\n\t\t\t\t\tcacheURL += (rquery.test(cacheURL) ? \"&\" : \"?\") + s.data;\n\n\t\t\t\t\t// trac-9682: remove data so that it's not used in an eventual retry\n\t\t\t\t\tdelete s.data;\n\t\t\t\t}\n\n\t\t\t\t// Add or update anti-cache param if needed\n\t\t\t\tif (s.cache === false) {\n\t\t\t\t\tcacheURL = cacheURL.replace(rantiCache, \"$1\");\n\t\t\t\t\tuncached = (rquery.test(cacheURL) ? \"&\" : \"?\") + \"_=\" + (nonce.guid++) +\n\t\t\t\t\t\tuncached;\n\t\t\t\t}\n\n\t\t\t\t// Put hash and anti-cache on the URL that will be requested (gh-1732)\n\t\t\t\ts.url = cacheURL + uncached;\n\n\t\t\t\t// Change '%20' to '+' if this is encoded form body content (gh-2658)\n\t\t\t} else if (s.data && s.processData &&\n\t\t\t\t(s.contentType || \"\").indexOf(\"application/x-www-form-urlencoded\") === 0) {\n\t\t\t\ts.data = s.data.replace(r20, \"+\");\n\t\t\t}\n\n\t\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\t\tif (s.ifModified) {\n\t\t\t\tif (jQuery.lastModified[cacheURL]) {\n\t\t\t\t\tjqXHR.setRequestHeader(\"If-Modified-Since\", jQuery.lastModified[cacheURL]);\n\t\t\t\t}\n\t\t\t\tif (jQuery.etag[cacheURL]) {\n\t\t\t\t\tjqXHR.setRequestHeader(\"If-None-Match\", jQuery.etag[cacheURL]);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Set the correct header, if data is being sent\n\t\t\tif (s.data && s.hasContent && s.contentType !== false || options.contentType) {\n\t\t\t\tjqXHR.setRequestHeader(\"Content-Type\", s.contentType);\n\t\t\t}\n\n\t\t\t// Set the Accepts header for the server, depending on the dataType\n\t\t\tjqXHR.setRequestHeader(\n\t\t\t\t\"Accept\",\n\t\t\t\ts.dataTypes[0] && s.accepts[s.dataTypes[0]] ?\n\t\t\t\t\ts.accepts[s.dataTypes[0]] +\n\t\t\t\t\t(s.dataTypes[0] !== \"*\" ? \", \" + allTypes + \"; q=0.01\" : \"\") :\n\t\t\t\t\ts.accepts[\"*\"]\n\t\t\t);\n\n\t\t\t// Check for headers option\n\t\t\tfor (i in s.headers) {\n\t\t\t\tjqXHR.setRequestHeader(i, s.headers[i]);\n\t\t\t}\n\n\t\t\t// Allow custom headers/mimetypes and early abort\n\t\t\tif (s.beforeSend &&\n\t\t\t\t(s.beforeSend.call(callbackContext, jqXHR, s) === false || completed)) {\n\n\t\t\t\t// Abort if not done already and return\n\t\t\t\treturn jqXHR.abort();\n\t\t\t}\n\n\t\t\t// Aborting is no longer a cancellation\n\t\t\tstrAbort = \"abort\";\n\n\t\t\t// Install callbacks on deferreds\n\t\t\tcompleteDeferred.add(s.complete);\n\t\t\tjqXHR.done(s.success);\n\t\t\tjqXHR.fail(s.error);\n\n\t\t\t// Get transport\n\t\t\ttransport = inspectPrefiltersOrTransports(transports, s, options, jqXHR);\n\n\t\t\t// If no transport, we auto-abort\n\t\t\tif (!transport) {\n\t\t\t\tdone(-1, \"No Transport\");\n\t\t\t} else {\n\t\t\t\tjqXHR.readyState = 1;\n\n\t\t\t\t// Send global event\n\t\t\t\tif (fireGlobals) {\n\t\t\t\t\tglobalEventContext.trigger(\"ajaxSend\", [jqXHR, s]);\n\t\t\t\t}\n\n\t\t\t\t// If request was aborted inside ajaxSend, stop there\n\t\t\t\tif (completed) {\n\t\t\t\t\treturn jqXHR;\n\t\t\t\t}\n\n\t\t\t\t// Timeout\n\t\t\t\tif (s.async && s.timeout > 0) {\n\t\t\t\t\ttimeoutTimer = window.setTimeout(function () {\n\t\t\t\t\t\tjqXHR.abort(\"timeout\");\n\t\t\t\t\t}, s.timeout);\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tcompleted = false;\n\t\t\t\t\ttransport.send(requestHeaders, done);\n\t\t\t\t} catch (e) {\n\n\t\t\t\t\t// Rethrow post-completion exceptions\n\t\t\t\t\tif (completed) {\n\t\t\t\t\t\tthrow e;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Propagate others as results\n\t\t\t\t\tdone(-1, e);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Callback for when everything is done\n\t\t\tfunction done(status, nativeStatusText, responses, headers) {\n\t\t\t\tvar isSuccess, success, error, response, modified,\n\t\t\t\t\tstatusText = nativeStatusText;\n\n\t\t\t\t// Ignore repeat invocations\n\t\t\t\tif (completed) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tcompleted = true;\n\n\t\t\t\t// Clear timeout if it exists\n\t\t\t\tif (timeoutTimer) {\n\t\t\t\t\twindow.clearTimeout(timeoutTimer);\n\t\t\t\t}\n\n\t\t\t\t// Dereference transport for early garbage collection\n\t\t\t\t// (no matter how long the jqXHR object will be used)\n\t\t\t\ttransport = undefined;\n\n\t\t\t\t// Cache response headers\n\t\t\t\tresponseHeadersString = headers || \"\";\n\n\t\t\t\t// Set readyState\n\t\t\t\tjqXHR.readyState = status > 0 ? 4 : 0;\n\n\t\t\t\t// Determine if successful\n\t\t\t\tisSuccess = status >= 200 && status < 300 || status === 304;\n\n\t\t\t\t// Get response data\n\t\t\t\tif (responses) {\n\t\t\t\t\tresponse = ajaxHandleResponses(s, jqXHR, responses);\n\t\t\t\t}\n\n\t\t\t\t// Use a noop converter for missing script but not if jsonp\n\t\t\t\tif (!isSuccess &&\n\t\t\t\t\tjQuery.inArray(\"script\", s.dataTypes) > -1 &&\n\t\t\t\t\tjQuery.inArray(\"json\", s.dataTypes) < 0) {\n\t\t\t\t\ts.converters[\"text script\"] = function () { };\n\t\t\t\t}\n\n\t\t\t\t// Convert no matter what (that way responseXXX fields are always set)\n\t\t\t\tresponse = ajaxConvert(s, response, jqXHR, isSuccess);\n\n\t\t\t\t// If successful, handle type chaining\n\t\t\t\tif (isSuccess) {\n\n\t\t\t\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\t\t\t\tif (s.ifModified) {\n\t\t\t\t\t\tmodified = jqXHR.getResponseHeader(\"Last-Modified\");\n\t\t\t\t\t\tif (modified) {\n\t\t\t\t\t\t\tjQuery.lastModified[cacheURL] = modified;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmodified = jqXHR.getResponseHeader(\"etag\");\n\t\t\t\t\t\tif (modified) {\n\t\t\t\t\t\t\tjQuery.etag[cacheURL] = modified;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// if no content\n\t\t\t\t\tif (status === 204 || s.type === \"HEAD\") {\n\t\t\t\t\t\tstatusText = \"nocontent\";\n\n\t\t\t\t\t\t// if not modified\n\t\t\t\t\t} else if (status === 304) {\n\t\t\t\t\t\tstatusText = \"notmodified\";\n\n\t\t\t\t\t\t// If we have data, let's convert it\n\t\t\t\t\t} else {\n\t\t\t\t\t\tstatusText = response.state;\n\t\t\t\t\t\tsuccess = response.data;\n\t\t\t\t\t\terror = response.error;\n\t\t\t\t\t\tisSuccess = !error;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\n\t\t\t\t\t// Extract error from statusText and normalize for non-aborts\n\t\t\t\t\terror = statusText;\n\t\t\t\t\tif (status || !statusText) {\n\t\t\t\t\t\tstatusText = \"error\";\n\t\t\t\t\t\tif (status < 0) {\n\t\t\t\t\t\t\tstatus = 0;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Set data for the fake xhr object\n\t\t\t\tjqXHR.status = status;\n\t\t\t\tjqXHR.statusText = (nativeStatusText || statusText) + \"\";\n\n\t\t\t\t// Success/Error\n\t\t\t\tif (isSuccess) {\n\t\t\t\t\tdeferred.resolveWith(callbackContext, [success, statusText, jqXHR]);\n\t\t\t\t} else {\n\t\t\t\t\tdeferred.rejectWith(callbackContext, [jqXHR, statusText, error]);\n\t\t\t\t}\n\n\t\t\t\t// Status-dependent callbacks\n\t\t\t\tjqXHR.statusCode(statusCode);\n\t\t\t\tstatusCode = undefined;\n\n\t\t\t\tif (fireGlobals) {\n\t\t\t\t\tglobalEventContext.trigger(isSuccess ? \"ajaxSuccess\" : \"ajaxError\",\n\t\t\t\t\t\t[jqXHR, s, isSuccess ? success : error]);\n\t\t\t\t}\n\n\t\t\t\t// Complete\n\t\t\t\tcompleteDeferred.fireWith(callbackContext, [jqXHR, statusText]);\n\n\t\t\t\tif (fireGlobals) {\n\t\t\t\t\tglobalEventContext.trigger(\"ajaxComplete\", [jqXHR, s]);\n\n\t\t\t\t\t// Handle the global AJAX counter\n\t\t\t\t\tif (!(--jQuery.active)) {\n\t\t\t\t\t\tjQuery.event.trigger(\"ajaxStop\");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn jqXHR;\n\t\t},\n\n\t\tgetJSON: function (url, data, callback) {\n\t\t\treturn jQuery.get(url, data, callback, \"json\");\n\t\t},\n\n\t\tgetScript: function (url, callback) {\n\t\t\treturn jQuery.get(url, undefined, callback, \"script\");\n\t\t}\n\t});\n\n\tjQuery.each([\"get\", \"post\"], function (_i, method) {\n\t\tjQuery[method] = function (url, data, callback, type) {\n\n\t\t\t// Shift arguments if data argument was omitted\n\t\t\tif (isFunction(data)) {\n\t\t\t\ttype = type || callback;\n\t\t\t\tcallback = data;\n\t\t\t\tdata = undefined;\n\t\t\t}\n\n\t\t\t// The url can be an options object (which then must have .url)\n\t\t\treturn jQuery.ajax(jQuery.extend({\n\t\t\t\turl: url,\n\t\t\t\ttype: method,\n\t\t\t\tdataType: type,\n\t\t\t\tdata: data,\n\t\t\t\tsuccess: callback\n\t\t\t}, jQuery.isPlainObject(url) && url));\n\t\t};\n\t});\n\n\tjQuery.ajaxPrefilter(function (s) {\n\t\tvar i;\n\t\tfor (i in s.headers) {\n\t\t\tif (i.toLowerCase() === \"content-type\") {\n\t\t\t\ts.contentType = s.headers[i] || \"\";\n\t\t\t}\n\t\t}\n\t});\n\n\n\tjQuery._evalUrl = function (url, options, doc) {\n\t\treturn jQuery.ajax({\n\t\t\turl: url,\n\n\t\t\t// Make this explicit, since user can override this through ajaxSetup (trac-11264)\n\t\t\ttype: \"GET\",\n\t\t\tdataType: \"script\",\n\t\t\tcache: true,\n\t\t\tasync: false,\n\t\t\tglobal: false,\n\n\t\t\t// Only evaluate the response if it is successful (gh-4126)\n\t\t\t// dataFilter is not invoked for failure responses, so using it instead\n\t\t\t// of the default converter is kludgy but it works.\n\t\t\tconverters: {\n\t\t\t\t\"text script\": function () { }\n\t\t\t},\n\t\t\tdataFilter: function (response) {\n\t\t\t\tjQuery.globalEval(response, options, doc);\n\t\t\t}\n\t\t});\n\t};\n\n\n\tjQuery.fn.extend({\n\t\twrapAll: function (html) {\n\t\t\tvar wrap;\n\n\t\t\tif (this[0]) {\n\t\t\t\tif (isFunction(html)) {\n\t\t\t\t\thtml = html.call(this[0]);\n\t\t\t\t}\n\n\t\t\t\t// The elements to wrap the target around\n\t\t\t\twrap = jQuery(html, this[0].ownerDocument).eq(0).clone(true);\n\n\t\t\t\tif (this[0].parentNode) {\n\t\t\t\t\twrap.insertBefore(this[0]);\n\t\t\t\t}\n\n\t\t\t\twrap.map(function () {\n\t\t\t\t\tvar elem = this;\n\n\t\t\t\t\twhile (elem.firstElementChild) {\n\t\t\t\t\t\telem = elem.firstElementChild;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn elem;\n\t\t\t\t}).append(this);\n\t\t\t}\n\n\t\t\treturn this;\n\t\t},\n\n\t\twrapInner: function (html) {\n\t\t\tif (isFunction(html)) {\n\t\t\t\treturn this.each(function (i) {\n\t\t\t\t\tjQuery(this).wrapInner(html.call(this, i));\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn this.each(function () {\n\t\t\t\tvar self = jQuery(this),\n\t\t\t\t\tcontents = self.contents();\n\n\t\t\t\tif (contents.length) {\n\t\t\t\t\tcontents.wrapAll(html);\n\n\t\t\t\t} else {\n\t\t\t\t\tself.append(html);\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\twrap: function (html) {\n\t\t\tvar htmlIsFunction = isFunction(html);\n\n\t\t\treturn this.each(function (i) {\n\t\t\t\tjQuery(this).wrapAll(htmlIsFunction ? html.call(this, i) : html);\n\t\t\t});\n\t\t},\n\n\t\tunwrap: function (selector) {\n\t\t\tthis.parent(selector).not(\"body\").each(function () {\n\t\t\t\tjQuery(this).replaceWith(this.childNodes);\n\t\t\t});\n\t\t\treturn this;\n\t\t}\n\t});\n\n\n\tjQuery.expr.pseudos.hidden = function (elem) {\n\t\treturn !jQuery.expr.pseudos.visible(elem);\n\t};\n\tjQuery.expr.pseudos.visible = function (elem) {\n\t\treturn !!(elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length);\n\t};\n\n\n\n\n\tjQuery.ajaxSettings.xhr = function () {\n\t\ttry {\n\t\t\treturn new window.XMLHttpRequest();\n\t\t} catch (e) { }\n\t};\n\n\tvar xhrSuccessStatus = {\n\n\t\t// File protocol always yields status code 0, assume 200\n\t\t0: 200,\n\n\t\t// Support: IE <=9 only\n\t\t// trac-1450: sometimes IE returns 1223 when it should be 204\n\t\t1223: 204\n\t},\n\t\txhrSupported = jQuery.ajaxSettings.xhr();\n\n\tsupport.cors = !!xhrSupported && (\"withCredentials\" in xhrSupported);\n\tsupport.ajax = xhrSupported = !!xhrSupported;\n\n\tjQuery.ajaxTransport(function (options) {\n\t\tvar callback, errorCallback;\n\n\t\t// Cross domain only allowed if supported through XMLHttpRequest\n\t\tif (support.cors || xhrSupported && !options.crossDomain) {\n\t\t\treturn {\n\t\t\t\tsend: function (headers, complete) {\n\t\t\t\t\tvar i,\n\t\t\t\t\t\txhr = options.xhr();\n\n\t\t\t\t\txhr.open(\n\t\t\t\t\t\toptions.type,\n\t\t\t\t\t\toptions.url,\n\t\t\t\t\t\toptions.async,\n\t\t\t\t\t\toptions.username,\n\t\t\t\t\t\toptions.password\n\t\t\t\t\t);\n\n\t\t\t\t\t// Apply custom fields if provided\n\t\t\t\t\tif (options.xhrFields) {\n\t\t\t\t\t\tfor (i in options.xhrFields) {\n\t\t\t\t\t\t\txhr[i] = options.xhrFields[i];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Override mime type if needed\n\t\t\t\t\tif (options.mimeType && xhr.overrideMimeType) {\n\t\t\t\t\t\txhr.overrideMimeType(options.mimeType);\n\t\t\t\t\t}\n\n\t\t\t\t\t// X-Requested-With header\n\t\t\t\t\t// For cross-domain requests, seeing as conditions for a preflight are\n\t\t\t\t\t// akin to a jigsaw puzzle, we simply never set it to be sure.\n\t\t\t\t\t// (it can always be set on a per-request basis or even using ajaxSetup)\n\t\t\t\t\t// For same-domain requests, won't change header if already provided.\n\t\t\t\t\tif (!options.crossDomain && !headers[\"X-Requested-With\"]) {\n\t\t\t\t\t\theaders[\"X-Requested-With\"] = \"XMLHttpRequest\";\n\t\t\t\t\t}\n\n\t\t\t\t\t// Set headers\n\t\t\t\t\tfor (i in headers) {\n\t\t\t\t\t\txhr.setRequestHeader(i, headers[i]);\n\t\t\t\t\t}\n\n\t\t\t\t\t// Callback\n\t\t\t\t\tcallback = function (type) {\n\t\t\t\t\t\treturn function () {\n\t\t\t\t\t\t\tif (callback) {\n\t\t\t\t\t\t\t\tcallback = errorCallback = xhr.onload =\n\t\t\t\t\t\t\t\t\txhr.onerror = xhr.onabort = xhr.ontimeout =\n\t\t\t\t\t\t\t\t\txhr.onreadystatechange = null;\n\n\t\t\t\t\t\t\t\tif (type === \"abort\") {\n\t\t\t\t\t\t\t\t\txhr.abort();\n\t\t\t\t\t\t\t\t} else if (type === \"error\") {\n\n\t\t\t\t\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t\t\t\t\t// On a manual native abort, IE9 throws\n\t\t\t\t\t\t\t\t\t// errors on any property access that is not readyState\n\t\t\t\t\t\t\t\t\tif (typeof xhr.status !== \"number\") {\n\t\t\t\t\t\t\t\t\t\tcomplete(0, \"error\");\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tcomplete(\n\n\t\t\t\t\t\t\t\t\t\t\t// File: protocol always yields status 0; see trac-8605, trac-14207\n\t\t\t\t\t\t\t\t\t\t\txhr.status,\n\t\t\t\t\t\t\t\t\t\t\txhr.statusText\n\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tcomplete(\n\t\t\t\t\t\t\t\t\t\txhrSuccessStatus[xhr.status] || xhr.status,\n\t\t\t\t\t\t\t\t\t\txhr.statusText,\n\n\t\t\t\t\t\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t\t\t\t\t\t// IE9 has no XHR2 but throws on binary (trac-11426)\n\t\t\t\t\t\t\t\t\t\t// For XHR2 non-text, let the caller handle it (gh-2498)\n\t\t\t\t\t\t\t\t\t\t(xhr.responseType || \"text\") !== \"text\" ||\n\t\t\t\t\t\t\t\t\t\t\ttypeof xhr.responseText !== \"string\" ?\n\t\t\t\t\t\t\t\t\t\t\t{ binary: xhr.response } :\n\t\t\t\t\t\t\t\t\t\t\t{ text: xhr.responseText },\n\t\t\t\t\t\t\t\t\t\txhr.getAllResponseHeaders()\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\t\t\t\t\t};\n\n\t\t\t\t\t// Listen to events\n\t\t\t\t\txhr.onload = callback();\n\t\t\t\t\terrorCallback = xhr.onerror = xhr.ontimeout = callback(\"error\");\n\n\t\t\t\t\t// Support: IE 9 only\n\t\t\t\t\t// Use onreadystatechange to replace onabort\n\t\t\t\t\t// to handle uncaught aborts\n\t\t\t\t\tif (xhr.onabort !== undefined) {\n\t\t\t\t\t\txhr.onabort = errorCallback;\n\t\t\t\t\t} else {\n\t\t\t\t\t\txhr.onreadystatechange = function () {\n\n\t\t\t\t\t\t\t// Check readyState before timeout as it changes\n\t\t\t\t\t\t\tif (xhr.readyState === 4) {\n\n\t\t\t\t\t\t\t\t// Allow onerror to be called first,\n\t\t\t\t\t\t\t\t// but that will not handle a native abort\n\t\t\t\t\t\t\t\t// Also, save errorCallback to a variable\n\t\t\t\t\t\t\t\t// as xhr.onerror cannot be accessed\n\t\t\t\t\t\t\t\twindow.setTimeout(function () {\n\t\t\t\t\t\t\t\t\tif (callback) {\n\t\t\t\t\t\t\t\t\t\terrorCallback();\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\t// Create the abort callback\n\t\t\t\t\tcallback = callback(\"abort\");\n\n\t\t\t\t\ttry {\n\n\t\t\t\t\t\t// Do send the request (this may raise an exception)\n\t\t\t\t\t\txhr.send(options.hasContent && options.data || null);\n\t\t\t\t\t} catch (e) {\n\n\t\t\t\t\t\t// trac-14683: Only rethrow if this hasn't been notified as an error yet\n\t\t\t\t\t\tif (callback) {\n\t\t\t\t\t\t\tthrow e;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\t\tabort: function () {\n\t\t\t\t\tif (callback) {\n\t\t\t\t\t\tcallback();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t});\n\n\n\n\n\t// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432)\n\tjQuery.ajaxPrefilter(function (s) {\n\t\tif (s.crossDomain) {\n\t\t\ts.contents.script = false;\n\t\t}\n\t});\n\n\t// Install script dataType\n\tjQuery.ajaxSetup({\n\t\taccepts: {\n\t\t\tscript: \"text/javascript, application/javascript, \" +\n\t\t\t\t\"application/ecmascript, application/x-ecmascript\"\n\t\t},\n\t\tcontents: {\n\t\t\tscript: /\\b(?:java|ecma)script\\b/\n\t\t},\n\t\tconverters: {\n\t\t\t\"text script\": function (text) {\n\t\t\t\tjQuery.globalEval(text);\n\t\t\t\treturn text;\n\t\t\t}\n\t\t}\n\t});\n\n\t// Handle cache's special case and crossDomain\n\tjQuery.ajaxPrefilter(\"script\", function (s) {\n\t\tif (s.cache === undefined) {\n\t\t\ts.cache = false;\n\t\t}\n\t\tif (s.crossDomain) {\n\t\t\ts.type = \"GET\";\n\t\t}\n\t});\n\n\t// Bind script tag hack transport\n\tjQuery.ajaxTransport(\"script\", function (s) {\n\n\t\t// This transport only deals with cross domain or forced-by-attrs requests\n\t\tif (s.crossDomain || s.scriptAttrs) {\n\t\t\tvar script, callback;\n\t\t\treturn {\n\t\t\t\tsend: function (_, complete) {\n\t\t\t\t\tscript = jQuery(\"<script>\")\n\t\t\t\t\t\t.attr(s.scriptAttrs || {})\n\t\t\t\t\t\t.prop({ charset: s.scriptCharset, src: s.url })\n\t\t\t\t\t\t.on(\"load error\", callback = function (evt) {\n\t\t\t\t\t\t\tscript.remove();\n\t\t\t\t\t\t\tcallback = null;\n\t\t\t\t\t\t\tif (evt) {\n\t\t\t\t\t\t\t\tcomplete(evt.type === \"error\" ? 404 : 200, evt.type);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\n\t\t\t\t\t// Use native DOM manipulation to avoid our domManip AJAX trickery\n\t\t\t\t\tdocument.head.appendChild(script[0]);\n\t\t\t\t},\n\t\t\t\tabort: function () {\n\t\t\t\t\tif (callback) {\n\t\t\t\t\t\tcallback();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t});\n\n\n\n\n\tvar oldCallbacks = [],\n\t\trjsonp = /(=)\\?(?=&|$)|\\?\\?/;\n\n\t// Default jsonp settings\n\tjQuery.ajaxSetup({\n\t\tjsonp: \"callback\",\n\t\tjsonpCallback: function () {\n\t\t\tvar callback = oldCallbacks.pop() || (jQuery.expando + \"_\" + (nonce.guid++));\n\t\t\tthis[callback] = true;\n\t\t\treturn callback;\n\t\t}\n\t});\n\n\t// Detect, normalize options and install callbacks for jsonp requests\n\tjQuery.ajaxPrefilter(\"json jsonp\", function (s, originalSettings, jqXHR) {\n\n\t\tvar callbackName, overwritten, responseContainer,\n\t\t\tjsonProp = s.jsonp !== false && (rjsonp.test(s.url) ?\n\t\t\t\t\"url\" :\n\t\t\t\ttypeof s.data === \"string\" &&\n\t\t\t\t(s.contentType || \"\")\n\t\t\t\t\t.indexOf(\"application/x-www-form-urlencoded\") === 0 &&\n\t\t\t\trjsonp.test(s.data) && \"data\"\n\t\t\t);\n\n\t\t// Handle iff the expected data type is \"jsonp\" or we have a parameter to set\n\t\tif (jsonProp || s.dataTypes[0] === \"jsonp\") {\n\n\t\t\t// Get callback name, remembering preexisting value associated with it\n\t\t\tcallbackName = s.jsonpCallback = isFunction(s.jsonpCallback) ?\n\t\t\t\ts.jsonpCallback() :\n\t\t\t\ts.jsonpCallback;\n\n\t\t\t// Insert callback into url or form data\n\t\t\tif (jsonProp) {\n\t\t\t\ts[jsonProp] = s[jsonProp].replace(rjsonp, \"$1\" + callbackName);\n\t\t\t} else if (s.jsonp !== false) {\n\t\t\t\ts.url += (rquery.test(s.url) ? \"&\" : \"?\") + s.jsonp + \"=\" + callbackName;\n\t\t\t}\n\n\t\t\t// Use data converter to retrieve json after script execution\n\t\t\ts.converters[\"script json\"] = function () {\n\t\t\t\tif (!responseContainer) {\n\t\t\t\t\tjQuery.error(callbackName + \" was not called\");\n\t\t\t\t}\n\t\t\t\treturn responseContainer[0];\n\t\t\t};\n\n\t\t\t// Force json dataType\n\t\t\ts.dataTypes[0] = \"json\";\n\n\t\t\t// Install callback\n\t\t\toverwritten = window[callbackName];\n\t\t\twindow[callbackName] = function () {\n\t\t\t\tresponseContainer = arguments;\n\t\t\t};\n\n\t\t\t// Clean-up function (fires after converters)\n\t\t\tjqXHR.always(function () {\n\n\t\t\t\t// If previous value didn't exist - remove it\n\t\t\t\tif (overwritten === undefined) {\n\t\t\t\t\tjQuery(window).removeProp(callbackName);\n\n\t\t\t\t\t// Otherwise restore preexisting value\n\t\t\t\t} else {\n\t\t\t\t\twindow[callbackName] = overwritten;\n\t\t\t\t}\n\n\t\t\t\t// Save back as free\n\t\t\t\tif (s[callbackName]) {\n\n\t\t\t\t\t// Make sure that re-using the options doesn't screw things around\n\t\t\t\t\ts.jsonpCallback = originalSettings.jsonpCallback;\n\n\t\t\t\t\t// Save the callback name for future use\n\t\t\t\t\toldCallbacks.push(callbackName);\n\t\t\t\t}\n\n\t\t\t\t// Call if it was a function and we have a response\n\t\t\t\tif (responseContainer && isFunction(overwritten)) {\n\t\t\t\t\toverwritten(responseContainer[0]);\n\t\t\t\t}\n\n\t\t\t\tresponseContainer = overwritten = undefined;\n\t\t\t});\n\n\t\t\t// Delegate to script\n\t\t\treturn \"script\";\n\t\t}\n\t});\n\n\n\n\n\t// Support: Safari 8 only\n\t// In Safari 8 documents created via document.implementation.createHTMLDocument\n\t// collapse sibling forms: the second one becomes a child of the first one.\n\t// Because of that, this security measure has to be disabled in Safari 8.\n\t// https://bugs.webkit.org/show_bug.cgi?id=137337\n\tsupport.createHTMLDocument = (function () {\n\t\tvar body = document.implementation.createHTMLDocument(\"\").body;\n\t\tbody.innerHTML = \"<form></form><form></form>\";\n\t\treturn body.childNodes.length === 2;\n\t})();\n\n\n\t// Argument \"data\" should be string of html\n\t// context (optional): If specified, the fragment will be created in this context,\n\t// defaults to document\n\t// keepScripts (optional): If true, will include scripts passed in the html string\n\tjQuery.parseHTML = function (data, context, keepScripts) {\n\t\tif (typeof data !== \"string\") {\n\t\t\treturn [];\n\t\t}\n\t\tif (typeof context === \"boolean\") {\n\t\t\tkeepScripts = context;\n\t\t\tcontext = false;\n\t\t}\n\n\t\tvar base, parsed, scripts;\n\n\t\tif (!context) {\n\n\t\t\t// Stop scripts or inline event handlers from being executed immediately\n\t\t\t// by using document.implementation\n\t\t\tif (support.createHTMLDocument) {\n\t\t\t\tcontext = document.implementation.createHTMLDocument(\"\");\n\n\t\t\t\t// Set the base href for the created document\n\t\t\t\t// so any parsed elements with URLs\n\t\t\t\t// are based on the document's URL (gh-2965)\n\t\t\t\tbase = context.createElement(\"base\");\n\t\t\t\tbase.href = document.location.href;\n\t\t\t\tcontext.head.appendChild(base);\n\t\t\t} else {\n\t\t\t\tcontext = document;\n\t\t\t}\n\t\t}\n\n\t\tparsed = rsingleTag.exec(data);\n\t\tscripts = !keepScripts && [];\n\n\t\t// Single tag\n\t\tif (parsed) {\n\t\t\treturn [context.createElement(parsed[1])];\n\t\t}\n\n\t\tparsed = buildFragment([data], context, scripts);\n\n\t\tif (scripts && scripts.length) {\n\t\t\tjQuery(scripts).remove();\n\t\t}\n\n\t\treturn jQuery.merge([], parsed.childNodes);\n\t};\n\n\n\t/**\n\t * Load a url into a page\n\t */\n\tjQuery.fn.load = function (url, params, callback) {\n\t\tvar selector, type, response,\n\t\t\tself = this,\n\t\t\toff = url.indexOf(\" \");\n\n\t\tif (off > -1) {\n\t\t\tselector = stripAndCollapse(url.slice(off));\n\t\t\turl = url.slice(0, off);\n\t\t}\n\n\t\t// If it's a function\n\t\tif (isFunction(params)) {\n\n\t\t\t// We assume that it's the callback\n\t\t\tcallback = params;\n\t\t\tparams = undefined;\n\n\t\t\t// Otherwise, build a param string\n\t\t} else if (params && typeof params === \"object\") {\n\t\t\ttype = \"POST\";\n\t\t}\n\n\t\t// If we have elements to modify, make the request\n\t\tif (self.length > 0) {\n\t\t\tjQuery.ajax({\n\t\t\t\turl: url,\n\n\t\t\t\t// If \"type\" variable is undefined, then \"GET\" method will be used.\n\t\t\t\t// Make value of this field explicit since\n\t\t\t\t// user can override it through ajaxSetup method\n\t\t\t\ttype: type || \"GET\",\n\t\t\t\tdataType: \"html\",\n\t\t\t\tdata: params\n\t\t\t}).done(function (responseText) {\n\n\t\t\t\t// Save response for use in complete callback\n\t\t\t\tresponse = arguments;\n\n\t\t\t\tself.html(selector ?\n\n\t\t\t\t\t// If a selector was specified, locate the right elements in a dummy div\n\t\t\t\t\t// Exclude scripts to avoid IE 'Permission Denied' errors\n\t\t\t\t\tjQuery(\"<div>\").append(jQuery.parseHTML(responseText)).find(selector) :\n\n\t\t\t\t\t// Otherwise use the full result\n\t\t\t\t\tresponseText);\n\n\t\t\t\t// If the request succeeds, this function gets \"data\", \"status\", \"jqXHR\"\n\t\t\t\t// but they are ignored because response was set above.\n\t\t\t\t// If it fails, this function gets \"jqXHR\", \"status\", \"error\"\n\t\t\t}).always(callback && function (jqXHR, status) {\n\t\t\t\tself.each(function () {\n\t\t\t\t\tcallback.apply(this, response || [jqXHR.responseText, status, jqXHR]);\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\n\t\treturn this;\n\t};\n\n\n\n\n\tjQuery.expr.pseudos.animated = function (elem) {\n\t\treturn jQuery.grep(jQuery.timers, function (fn) {\n\t\t\treturn elem === fn.elem;\n\t\t}).length;\n\t};\n\n\n\n\n\tjQuery.offset = {\n\t\tsetOffset: function (elem, options, i) {\n\t\t\tvar curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition,\n\t\t\t\tposition = jQuery.css(elem, \"position\"),\n\t\t\t\tcurElem = jQuery(elem),\n\t\t\t\tprops = {};\n\n\t\t\t// Set position first, in-case top/left are set even on static elem\n\t\t\tif (position === \"static\") {\n\t\t\t\telem.style.position = \"relative\";\n\t\t\t}\n\n\t\t\tcurOffset = curElem.offset();\n\t\t\tcurCSSTop = jQuery.css(elem, \"top\");\n\t\t\tcurCSSLeft = jQuery.css(elem, \"left\");\n\t\t\tcalculatePosition = (position === \"absolute\" || position === \"fixed\") &&\n\t\t\t\t(curCSSTop + curCSSLeft).indexOf(\"auto\") > -1;\n\n\t\t\t// Need to be able to calculate position if either\n\t\t\t// top or left is auto and position is either absolute or fixed\n\t\t\tif (calculatePosition) {\n\t\t\t\tcurPosition = curElem.position();\n\t\t\t\tcurTop = curPosition.top;\n\t\t\t\tcurLeft = curPosition.left;\n\n\t\t\t} else {\n\t\t\t\tcurTop = parseFloat(curCSSTop) || 0;\n\t\t\t\tcurLeft = parseFloat(curCSSLeft) || 0;\n\t\t\t}\n\n\t\t\tif (isFunction(options)) {\n\n\t\t\t\t// Use jQuery.extend here to allow modification of coordinates argument (gh-1848)\n\t\t\t\toptions = options.call(elem, i, jQuery.extend({}, curOffset));\n\t\t\t}\n\n\t\t\tif (options.top != null) {\n\t\t\t\tprops.top = (options.top - curOffset.top) + curTop;\n\t\t\t}\n\t\t\tif (options.left != null) {\n\t\t\t\tprops.left = (options.left - curOffset.left) + curLeft;\n\t\t\t}\n\n\t\t\tif (\"using\" in options) {\n\t\t\t\toptions.using.call(elem, props);\n\n\t\t\t} else {\n\t\t\t\tcurElem.css(props);\n\t\t\t}\n\t\t}\n\t};\n\n\tjQuery.fn.extend({\n\n\t\t// offset() relates an element's border box to the document origin\n\t\toffset: function (options) {\n\n\t\t\t// Preserve chaining for setter\n\t\t\tif (arguments.length) {\n\t\t\t\treturn options === undefined ?\n\t\t\t\t\tthis :\n\t\t\t\t\tthis.each(function (i) {\n\t\t\t\t\t\tjQuery.offset.setOffset(this, options, i);\n\t\t\t\t\t});\n\t\t\t}\n\n\t\t\tvar rect, win,\n\t\t\t\telem = this[0];\n\n\t\t\tif (!elem) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Return zeros for disconnected and hidden (display: none) elements (gh-2310)\n\t\t\t// Support: IE <=11 only\n\t\t\t// Running getBoundingClientRect on a\n\t\t\t// disconnected node in IE throws an error\n\t\t\tif (!elem.getClientRects().length) {\n\t\t\t\treturn { top: 0, left: 0 };\n\t\t\t}\n\n\t\t\t// Get document-relative position by adding viewport scroll to viewport-relative gBCR\n\t\t\trect = elem.getBoundingClientRect();\n\t\t\twin = elem.ownerDocument.defaultView;\n\t\t\treturn {\n\t\t\t\ttop: rect.top + win.pageYOffset,\n\t\t\t\tleft: rect.left + win.pageXOffset\n\t\t\t};\n\t\t},\n\n\t\t// position() relates an element's margin box to its offset parent's padding box\n\t\t// This corresponds to the behavior of CSS absolute positioning\n\t\tposition: function () {\n\t\t\tif (!this[0]) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar offsetParent, offset, doc,\n\t\t\t\telem = this[0],\n\t\t\t\tparentOffset = { top: 0, left: 0 };\n\n\t\t\t// position:fixed elements are offset from the viewport, which itself always has zero offset\n\t\t\tif (jQuery.css(elem, \"position\") === \"fixed\") {\n\n\t\t\t\t// Assume position:fixed implies availability of getBoundingClientRect\n\t\t\t\toffset = elem.getBoundingClientRect();\n\n\t\t\t} else {\n\t\t\t\toffset = this.offset();\n\n\t\t\t\t// Account for the *real* offset parent, which can be the document or its root element\n\t\t\t\t// when a statically positioned element is identified\n\t\t\t\tdoc = elem.ownerDocument;\n\t\t\t\toffsetParent = elem.offsetParent || doc.documentElement;\n\t\t\t\twhile (offsetParent &&\n\t\t\t\t\t(offsetParent === doc.body || offsetParent === doc.documentElement) &&\n\t\t\t\t\tjQuery.css(offsetParent, \"position\") === \"static\") {\n\n\t\t\t\t\toffsetParent = offsetParent.parentNode;\n\t\t\t\t}\n\t\t\t\tif (offsetParent && offsetParent !== elem && offsetParent.nodeType === 1) {\n\n\t\t\t\t\t// Incorporate borders into its offset, since they are outside its content origin\n\t\t\t\t\tparentOffset = jQuery(offsetParent).offset();\n\t\t\t\t\tparentOffset.top += jQuery.css(offsetParent, \"borderTopWidth\", true);\n\t\t\t\t\tparentOffset.left += jQuery.css(offsetParent, \"borderLeftWidth\", true);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Subtract parent offsets and element margins\n\t\t\treturn {\n\t\t\t\ttop: offset.top - parentOffset.top - jQuery.css(elem, \"marginTop\", true),\n\t\t\t\tleft: offset.left - parentOffset.left - jQuery.css(elem, \"marginLeft\", true)\n\t\t\t};\n\t\t},\n\n\t\t// This method will return documentElement in the following cases:\n\t\t// 1) For the element inside the iframe without offsetParent, this method will return\n\t\t//    documentElement of the parent window\n\t\t// 2) For the hidden or detached element\n\t\t// 3) For body or html element, i.e. in case of the html node - it will return itself\n\t\t//\n\t\t// but those exceptions were never presented as a real life use-cases\n\t\t// and might be considered as more preferable results.\n\t\t//\n\t\t// This logic, however, is not guaranteed and can change at any point in the future\n\t\toffsetParent: function () {\n\t\t\treturn this.map(function () {\n\t\t\t\tvar offsetParent = this.offsetParent;\n\n\t\t\t\twhile (offsetParent && jQuery.css(offsetParent, \"position\") === \"static\") {\n\t\t\t\t\toffsetParent = offsetParent.offsetParent;\n\t\t\t\t}\n\n\t\t\t\treturn offsetParent || documentElement;\n\t\t\t});\n\t\t}\n\t});\n\n\t// Create scrollLeft and scrollTop methods\n\tjQuery.each({ scrollLeft: \"pageXOffset\", scrollTop: \"pageYOffset\" }, function (method, prop) {\n\t\tvar top = \"pageYOffset\" === prop;\n\n\t\tjQuery.fn[method] = function (val) {\n\t\t\treturn access(this, function (elem, method, val) {\n\n\t\t\t\t// Coalesce documents and windows\n\t\t\t\tvar win;\n\t\t\t\tif (isWindow(elem)) {\n\t\t\t\t\twin = elem;\n\t\t\t\t} else if (elem.nodeType === 9) {\n\t\t\t\t\twin = elem.defaultView;\n\t\t\t\t}\n\n\t\t\t\tif (val === undefined) {\n\t\t\t\t\treturn win ? win[prop] : elem[method];\n\t\t\t\t}\n\n\t\t\t\tif (win) {\n\t\t\t\t\twin.scrollTo(\n\t\t\t\t\t\t!top ? val : win.pageXOffset,\n\t\t\t\t\t\ttop ? val : win.pageYOffset\n\t\t\t\t\t);\n\n\t\t\t\t} else {\n\t\t\t\t\telem[method] = val;\n\t\t\t\t}\n\t\t\t}, method, val, arguments.length);\n\t\t};\n\t});\n\n\t// Support: Safari <=7 - 9.1, Chrome <=37 - 49\n\t// Add the top/left cssHooks using jQuery.fn.position\n\t// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084\n\t// Blink bug: https://bugs.chromium.org/p/chromium/issues/detail?id=589347\n\t// getComputedStyle returns percent when specified for top/left/bottom/right;\n\t// rather than make the css module depend on the offset module, just check for it here\n\tjQuery.each([\"top\", \"left\"], function (_i, prop) {\n\t\tjQuery.cssHooks[prop] = addGetHookIf(support.pixelPosition,\n\t\t\tfunction (elem, computed) {\n\t\t\t\tif (computed) {\n\t\t\t\t\tcomputed = curCSS(elem, prop);\n\n\t\t\t\t\t// If curCSS returns percentage, fallback to offset\n\t\t\t\t\treturn rnumnonpx.test(computed) ?\n\t\t\t\t\t\tjQuery(elem).position()[prop] + \"px\" :\n\t\t\t\t\t\tcomputed;\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\t});\n\n\n\t// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods\n\tjQuery.each({ Height: \"height\", Width: \"width\" }, function (name, type) {\n\t\tjQuery.each({\n\t\t\tpadding: \"inner\" + name,\n\t\t\tcontent: type,\n\t\t\t\"\": \"outer\" + name\n\t\t}, function (defaultExtra, funcName) {\n\n\t\t\t// Margin is only for outerHeight, outerWidth\n\t\t\tjQuery.fn[funcName] = function (margin, value) {\n\t\t\t\tvar chainable = arguments.length && (defaultExtra || typeof margin !== \"boolean\"),\n\t\t\t\t\textra = defaultExtra || (margin === true || value === true ? \"margin\" : \"border\");\n\n\t\t\t\treturn access(this, function (elem, type, value) {\n\t\t\t\t\tvar doc;\n\n\t\t\t\t\tif (isWindow(elem)) {\n\n\t\t\t\t\t\t// $( window ).outerWidth/Height return w/h including scrollbars (gh-1729)\n\t\t\t\t\t\treturn funcName.indexOf(\"outer\") === 0 ?\n\t\t\t\t\t\t\telem[\"inner\" + name] :\n\t\t\t\t\t\t\telem.document.documentElement[\"client\" + name];\n\t\t\t\t\t}\n\n\t\t\t\t\t// Get document width or height\n\t\t\t\t\tif (elem.nodeType === 9) {\n\t\t\t\t\t\tdoc = elem.documentElement;\n\n\t\t\t\t\t\t// Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height],\n\t\t\t\t\t\t// whichever is greatest\n\t\t\t\t\t\treturn Math.max(\n\t\t\t\t\t\t\telem.body[\"scroll\" + name], doc[\"scroll\" + name],\n\t\t\t\t\t\t\telem.body[\"offset\" + name], doc[\"offset\" + name],\n\t\t\t\t\t\t\tdoc[\"client\" + name]\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\n\t\t\t\t\treturn value === undefined ?\n\n\t\t\t\t\t\t// Get width or height on the element, requesting but not forcing parseFloat\n\t\t\t\t\t\tjQuery.css(elem, type, extra) :\n\n\t\t\t\t\t\t// Set width or height on the element\n\t\t\t\t\t\tjQuery.style(elem, type, value, extra);\n\t\t\t\t}, type, chainable ? margin : undefined, chainable);\n\t\t\t};\n\t\t});\n\t});\n\n\n\tjQuery.each([\n\t\t\"ajaxStart\",\n\t\t\"ajaxStop\",\n\t\t\"ajaxComplete\",\n\t\t\"ajaxError\",\n\t\t\"ajaxSuccess\",\n\t\t\"ajaxSend\"\n\t], function (_i, type) {\n\t\tjQuery.fn[type] = function (fn) {\n\t\t\treturn this.on(type, fn);\n\t\t};\n\t});\n\n\n\n\n\tjQuery.fn.extend({\n\n\t\tbind: function (types, data, fn) {\n\t\t\treturn this.on(types, null, data, fn);\n\t\t},\n\t\tunbind: function (types, fn) {\n\t\t\treturn this.off(types, null, fn);\n\t\t},\n\n\t\tdelegate: function (selector, types, data, fn) {\n\t\t\treturn this.on(types, selector, data, fn);\n\t\t},\n\t\tundelegate: function (selector, types, fn) {\n\n\t\t\t// ( namespace ) or ( selector, types [, fn] )\n\t\t\treturn arguments.length === 1 ?\n\t\t\t\tthis.off(selector, \"**\") :\n\t\t\t\tthis.off(types, selector || \"**\", fn);\n\t\t},\n\n\t\thover: function (fnOver, fnOut) {\n\t\t\treturn this.mouseenter(fnOver).mouseleave(fnOut || fnOver);\n\t\t}\n\t});\n\n\tjQuery.each(\n\t\t(\"blur focus focusin focusout resize scroll click dblclick \" +\n\t\t\t\"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave \" +\n\t\t\t\"change select submit keydown keypress keyup contextmenu\").split(\" \"),\n\t\tfunction (_i, name) {\n\n\t\t\t// Handle event binding\n\t\t\tjQuery.fn[name] = function (data, fn) {\n\t\t\t\treturn arguments.length > 0 ?\n\t\t\t\t\tthis.on(name, null, data, fn) :\n\t\t\t\t\tthis.trigger(name);\n\t\t\t};\n\t\t}\n\t);\n\n\n\n\n\t// Support: Android <=4.0 only\n\t// Make sure we trim BOM and NBSP\n\t// Require that the \"whitespace run\" starts from a non-whitespace\n\t// to avoid O(N^2) behavior when the engine would try matching \"\\s+$\" at each space position.\n\tvar rtrim = /^[\\s\\uFEFF\\xA0]+|([^\\s\\uFEFF\\xA0])[\\s\\uFEFF\\xA0]+$/g;\n\n\t// Bind a function to a context, optionally partially applying any\n\t// arguments.\n\t// jQuery.proxy is deprecated to promote standards (specifically Function#bind)\n\t// However, it is not slated for removal any time soon\n\tjQuery.proxy = function (fn, context) {\n\t\tvar tmp, args, proxy;\n\n\t\tif (typeof context === \"string\") {\n\t\t\ttmp = fn[context];\n\t\t\tcontext = fn;\n\t\t\tfn = tmp;\n\t\t}\n\n\t\t// Quick check to determine if target is callable, in the spec\n\t\t// this throws a TypeError, but we will just return undefined.\n\t\tif (!isFunction(fn)) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\t// Simulated bind\n\t\targs = slice.call(arguments, 2);\n\t\tproxy = function () {\n\t\t\treturn fn.apply(context || this, args.concat(slice.call(arguments)));\n\t\t};\n\n\t\t// Set the guid of unique handler to the same of original handler, so it can be removed\n\t\tproxy.guid = fn.guid = fn.guid || jQuery.guid++;\n\n\t\treturn proxy;\n\t};\n\n\tjQuery.holdReady = function (hold) {\n\t\tif (hold) {\n\t\t\tjQuery.readyWait++;\n\t\t} else {\n\t\t\tjQuery.ready(true);\n\t\t}\n\t};\n\tjQuery.isArray = Array.isArray;\n\tjQuery.parseJSON = JSON.parse;\n\tjQuery.nodeName = nodeName;\n\tjQuery.isFunction = isFunction;\n\tjQuery.isWindow = isWindow;\n\tjQuery.camelCase = camelCase;\n\tjQuery.type = toType;\n\n\tjQuery.now = Date.now;\n\n\tjQuery.isNumeric = function (obj) {\n\n\t\t// As of jQuery 3.0, isNumeric is limited to\n\t\t// strings and numbers (primitives or objects)\n\t\t// that can be coerced to finite numbers (gh-2662)\n\t\tvar type = jQuery.type(obj);\n\t\treturn (type === \"number\" || type === \"string\") &&\n\n\t\t\t// parseFloat NaNs numeric-cast false positives (\"\")\n\t\t\t// ...but misinterprets leading-number strings, particularly hex literals (\"0x...\")\n\t\t\t// subtraction forces infinities to NaN\n\t\t\t!isNaN(obj - parseFloat(obj));\n\t};\n\n\tjQuery.trim = function (text) {\n\t\treturn text == null ?\n\t\t\t\"\" :\n\t\t\t(text + \"\").replace(rtrim, \"$1\");\n\t};\n\n\n\n\t// Register as a named AMD module, since jQuery can be concatenated with other\n\t// files that may use define, but not via a proper concatenation script that\n\t// understands anonymous AMD modules. A named AMD is safest and most robust\n\t// way to register. Lowercase jquery is used because AMD module names are\n\t// derived from file names, and jQuery is normally delivered in a lowercase\n\t// file name. Do this after creating the global so that if an AMD module wants\n\t// to call noConflict to hide this version of jQuery, it will work.\n\n\t// Note that for maximum portability, libraries that are not jQuery should\n\t// declare themselves as anonymous modules, and avoid setting a global if an\n\t// AMD loader is present. jQuery is a special case. For more information, see\n\t// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon\n\n\tif (typeof define === \"function\" && define.amd) {\n\t\tdefine(\"jquery\", [], function () {\n\t\t\treturn jQuery;\n\t\t});\n\t}\n\n\n\n\n\tvar\n\n\t\t// Map over jQuery in case of overwrite\n\t\t_jQuery = window.jQuery,\n\n\t\t// Map over the $ in case of overwrite\n\t\t_$ = window.$;\n\n\tjQuery.noConflict = function (deep) {\n\t\tif (window.$ === jQuery) {\n\t\t\twindow.$ = _$;\n\t\t}\n\n\t\tif (deep && window.jQuery === jQuery) {\n\t\t\twindow.jQuery = _jQuery;\n\t\t}\n\n\t\treturn jQuery;\n\t};\n\n\t// Expose jQuery and $ identifiers, even in AMD\n\t// (trac-7102#comment:10, https://github.com/jquery/jquery/pull/557)\n\t// and CommonJS for browser emulators (trac-13566)\n\tif (typeof noGlobal === \"undefined\") {\n\t\twindow.jQuery = window.$ = jQuery;\n\t}\n\n\n\n\n\treturn jQuery;\n});"
  },
  {
    "path": "src/sourceDev.WebApp/SharedThemes/lux/Shared/_Layout.cshtml",
    "content": "﻿@inject ISiteContextResolver siteResolver\n@inject ICoreThemeHelper themeHelper\n@{\n    var themeSettings = themeHelper.GetThemeSettings();\n    @*\n        These settings can be set by a main view to show additional columns.\n        Views that push content into the optional sections SideNav, AsidePrimary, and AsideSecondary\n        are obligated to set the needed viewtate property to true to show the section,\n        otherwise an error will occur.\n        The sideNav column also supports a toggle so it can be hidden and toggled visible even though it renders.\n    *@\n    bool sideNavVisible = true.Equals(ViewData[\"SideNavVisible\"]);\n    string sideNavToggleClass = ViewData[\"SideNavToggle\"]?.ToString() ?? \"collapse\";\n    bool asidePrimaryVisible = true.Equals(ViewData[\"AsidePrimaryVisible\"]);\n    bool asideSecondaryVisible = true.Equals(ViewData[\"AsideSecondaryVisible\"]);\n    var Tenant = await siteResolver.ResolveSite(Context.Request.Host.Host, Context.Request.Path);\n    var siteRoot = \"\";\n    if (!string.IsNullOrWhiteSpace(Tenant.SiteFolderName)) { siteRoot = \"/\" + Tenant.SiteFolderName; }\n    \n}\n<!DOCTYPE html>\n<html lang=\"@CultureInfo.CurrentUICulture.Name\">\n<head>\n    <meta charset=\"utf-8\" />\n    <title>@ViewData[\"Title\"] - @(Tenant?.SiteName ?? \"Sample\")</title>\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1, shrink-to-fit=no\">\n    @RenderSection(\"Meta\", required: false)\n    <environment names=\"Development\">\n        <link rel=\"stylesheet\" href=\"~/css/bootstrap.css\" cs-resolve-theme-resource=\"true\" cs-shared-theme=\"true\" cs-tenant=\"@Tenant\" />\n        <link rel=\"stylesheet\" href=\"~/css/fontawesome-all.min.css\" cs-resolve-theme-resource=\"true\" cs-shared-theme=\"true\" cs-tenant=\"@Tenant\" />\n        <link rel=\"stylesheet\" href=\"~/css/site.css\" cs-resolve-theme-resource=\"true\" cs-shared-theme=\"true\" cs-tenant=\"@Tenant\" asp-append-version=\"true\" />\n    </environment>\n    <environment names=\"Staging,Production\">\n        <link rel=\"stylesheet\" href=\"~/css/bootstrap.min.css\" cs-resolve-theme-resource=\"true\" cs-shared-theme=\"true\" cs-tenant=\"@Tenant\" />\n        <link rel=\"stylesheet\" href=\"~/css/fontawesome-all.min.css\" cs-resolve-theme-resource=\"true\" cs-shared-theme=\"true\" cs-tenant=\"@Tenant\" />\n        <link rel=\"stylesheet\" href=\"~/css/site.min.css\" cs-resolve-theme-resource=\"true\" cs-shared-theme=\"true\" cs-tenant=\"@Tenant\" asp-append-version=\"true\" />\n    </environment>\n    @RenderSection(\"Styles\", required: false)    \n    \n    <google-analytics profile-id=\"@Tenant.GoogleAnalyticsProfileId\" user-id=\"@User.GetUserId()\"></google-analytics>\n    <base href=\"@Context.Request.Path\" />\n</head>\n<body class=\"d-flex flex-column @ViewData[\"BodyClass\"]\">\n    <header class=\"bg-white\">\n        <a id=\"skippy\" class=\"visually-hidden visually-hidden-focusable\" href=\"#content\">\n            <div class=\"container\">\n                <span class=\"skiplink-text\">Skip to main content</span>\n            </div>\n        </a>\n        <div class=\"fixed-top container-fluid brand-header bg-white\">\n            <div class=\"d-flex align-items-center bg-white\">\n                @if (!string.IsNullOrWhiteSpace(Tenant.LogoUrl))\n                {\n                    <div>\n                         <partial name=\"SiteLogoPartial\" model=\"@Tenant\" />\n                    </div>\n                }\n                @if (Tenant.ShowSiteNameLink)\n                {\n                    <div class=\"align-self-center pt-4 pt-sm-0\">\n                         <partial name=\"SiteTitlePartial\" model=\"@Tenant\" />\n                    </div>\n                }\n                @if (!string.IsNullOrWhiteSpace(Tenant.HeaderContent))\n                {\n                    <div class=\"flex-fill align-self-center pt-3 d-none d-sm-block\">\n                        <partial name=\"SiteHeaderPartial\" />\n                    </div>\n                }\n            </div>\n        </div>\n        <nav class=\"navbar navbar-expand-md navbar-dark fixed-top bg-dark pt-0 pb-0\">\n            <button class=\"navbar-toggler\" type=\"button\" data-bs-toggle=\"collapse\" data-bs-target=\"#navbarNavDropdown\" aria-controls=\"navbarNavDropdown\" aria-expanded=\"false\" aria-label=\"Toggle navigation\">\n                <span class=\"navbar-toggler-icon\"></span>\n            </button>\n\n            <div class=\"collapse navbar-collapse bg-dark ps-2\" id=\"navbarNavDropdown\">\n                @await Component.InvokeAsync(\"Navigation\", new { viewName = \"Bootstrap5TopNavWithDropdowns\", filterName = NamedNavigationFilters.TopNav, startingNodeKey = \"\" })\n                <partial name=\"_LoginPartialWithDropdowns\" />\n            </div>\n        </nav>\n    </header>\n    <div id=\"wrapper\" class=\"container-fluid cs-container flex-fill\">\n        @await Component.InvokeAsync(\"Navigation\", new { viewName = \"Bootstrap5Breadcrumbs\", filterName = NamedNavigationFilters.Breadcrumbs, startingNodeKey = \"\" })\n        <div class=\"row\">\n            <main id=\"content\" class=\"col order-3\">\n                <partial name=\"AlertsPartial\" />\n                <partial name=\"_CookieConsentPartial\" />\n                <partial name=\"_AutoLogoutWarningPartial\" />\n                @RenderBody()\n            </main>\n            @if (sideNavVisible)\n            {\n                <nav id=\"sidenavmenu\" class=\" col col-3 order-1 @sideNavToggleClass\">\n                    @RenderSection(\"SideNav\", required: false)\n                </nav>\n\n            }\n            @if (asideSecondaryVisible)\n            {\n                <aside id=\"asideSecondary\" class=\"col col-1 order-2\">\n                    @RenderSection(\"AsideSecondary\", required: false)\n                </aside>\n\n            }\n            @if (asidePrimaryVisible)\n            {\n                <aside id=\"asidePrimary\" class=\"col-12 col-md-3 col-sm-12  col-sm-12 order-4\">\n                    @RenderSection(\"AsidePrimary\", required: false)\n                </aside>\n\n            }\n        </div>\n    </div>\n    <footer class=\"sticky-bottom border pt-2 h-100\">\n        <div class=\"w-100 text-center\">\n            <partial name=\"SiteFooterPartial\" />\n        </div>\n        <div class=\"d-flex flex-wrap flex-grow justify-content-center\">\n            <div class=\"p-2\">\n            <ul class=\"list-unstyled d-md-flex flex-wrap\">\n                @if (Tenant != null && !string.IsNullOrWhiteSpace(Tenant.PrivacyPolicy))\n                {\n                    <li class=\"ps-sm-2 me-sm-2\">\n                        <a asp-controller=\"Privacy\" asp-action=\"Index\">Privacy Policy</a>\n                    </li>\n                }\n                <li class=\"ps-sm-2 me-sm-2\">\n                    @* you are free to remove the powered by cloudscribe link but we appreciate it if you choose to keep it! *@\n                    <a class=\"text-nowrap\" target=\"_blank\" href=\"https://www.cloudscribe.com/?utm_source=@Context.Request.Host.Value&amp;utm_medium=referral&amp;utm_campaign=poweredbycloudscribe\">Powered by cloudscribe</a>\n                </li>\n            </ul>\n        </div>\n        <div class=\"ps-sm-2  text-center w-100\"><span class=\"text-nowrap\">Copyright &copy; @DateTime.Now.Year</span><span class=\"d-none d-sm-inline\"> - </span><span> @(Tenant?.SiteName ?? \"Sample\")</span></div>\n        <partial name=\"_CookieConsentRevokePartial\" />\n        </div>\n    </footer>\n    @RenderSection(\"Toolbar\", required: false)\n    <environment names=\"Development\">\n        <script src=\"~/js/jquery.js\" cs-resolve-theme-resource=\"true\" cs-shared-theme=\"true\" cs-tenant=\"@Tenant\"></script>\n        <script src=\"~/js/bootstrap.bundle.js\" cs-resolve-theme-resource=\"true\" cs-shared-theme=\"true\" cs-tenant=\"@Tenant\"></script>\n        <script src=\"~/cr/js/bs4.smartmenus.min.js\"></script>\n    </environment>\n    <environment names=\"Staging,Production\">\n        <script src=\"~/js/jquery.min.js\" cs-resolve-theme-resource=\"true\" cs-shared-theme=\"true\" cs-tenant=\"@Tenant\"></script>\n        <script src=\"~/js/bootstrap.bundle.min.js\" cs-resolve-theme-resource=\"true\" cs-shared-theme=\"true\" cs-tenant=\"@Tenant\"></script>\n        <script src=\"~/cr/js/bs4.smartmenus.min.js\"></script>\n    </environment>\n    @RenderSection(\"Bottom\", required: false)\n    @RenderSection(\"Scripts\", required: false)     \n    @Html.RenderResources(\"js\") @*render any js resources declared via helpers in partial views etc*@\n    <add-this profile-id=\"@Tenant.AddThisDotComUsername\" async></add-this>\n</body>\n</html>\n"
  },
  {
    "path": "src/sourceDev.WebApp/SharedThemes/lux/wwwroot/css/_bootswatch.scss",
    "content": "// Lux 5.1.3\n// Bootswatch\n\n\n// Variables\n\n$web-font-path: \"https://fonts.googleapis.com/css2?family=Nunito+Sans:wght@400;600&display=swap\" !default;\n@if $web-font-path {\n  @import url($web-font-path);\n}\n\n// Navbar\n\n.navbar {\n  font-size: $font-size-sm;\n  text-transform: uppercase;\n  font-weight: 600;\n\n  &-nav {\n    .nav-link {\n      padding-top: .715rem;\n      padding-bottom: .715rem;\n    }\n  }\n\n  &-brand {\n    margin-right: 2rem;\n  }\n}\n\n.bg-primary {\n  background-color: theme-color(\"primary\") !important;\n}\n\n.bg-light {\n  border: 1px solid rgba(0, 0, 0, .1);\n\n  &.navbar-fixed-top {\n    border-width: 0 0 1px;\n  }\n\n  &.navbar-bottom-top {\n    border-width: 1px 0 0;\n  }\n}\n\n.nav-item {\n  margin-right: 2rem;\n}\n\n// Buttons\n\n.btn {\n  font-size: $font-size-sm;\n  text-transform: uppercase;\n\n  &-sm {\n    font-size: 10px;\n  }\n\n  &-warning {\n    &,\n    &:hover,\n    &:not([disabled]):not(.disabled):active,\n    &:focus {\n      color: $white;\n    }\n  }\n}\n\n.btn-outline-secondary {\n  border-color: $gray-600;\n  color: $gray-600;\n\n  &:not([disabled]):not(.disabled):hover,\n  &:not([disabled]):not(.disabled):focus,\n  &:not([disabled]):not(.disabled):active {\n    background-color: $gray-400;\n    border-color: $gray-400;\n    color: $white;\n  }\n\n  &:not([disabled]):not(.disabled):focus {\n    box-shadow: 0 0 0 .2rem rgba($gray-400, .5);\n  }\n}\n\n[class*=\"btn-outline-\"] {\n  border-width: 2px;\n}\n\n.border-secondary {\n  border: 1px solid $gray-400 !important;\n}\n\n// Typography\n\nbody {\n  font-weight: 200;\n  letter-spacing: 1px;\n}\n\nh1,\nh2,\nh3,\nh4,\nh5,\nh6 {\n  text-transform: uppercase;\n  letter-spacing: 3px;\n}\n\n.text-secondary {\n  color: $body-color !important;\n}\n\n// Tables\n\nth {\n  font-size: $font-size-sm;\n  text-transform: uppercase;\n}\n\n.table {\n  th,\n  td {\n    padding: 1.5rem;\n  }\n\n  &-sm {\n    th,\n    td {\n      padding: .75rem;\n    }\n  }\n}\n\n// Navs\n\n.dropdown-menu {\n  font-size: $font-size-sm;\n  text-transform: none;\n}\n\n// Indicators\n\n.badge {\n  padding-top: .28rem;\n\n  &-pill {\n    border-radius: 10rem;\n  }\n\n  &.bg-secondary,\n  &.bg-light {\n    color: $dark;\n  }\n}\n\n// Containers\n\n.list-group-item {\n  h1,\n  h2,\n  h3,\n  h4,\n  h5,\n  h6,\n  .h1,\n  .h2,\n  .h3,\n  .h4,\n  .h5,\n  .h6 {\n    color: inherit;\n  }\n}\n\n.card {\n  &-title,\n  &-header {\n    color: inherit;\n  }\n}\n"
  },
  {
    "path": "src/sourceDev.WebApp/SharedThemes/lux/wwwroot/css/_variables.scss",
    "content": "// Lux 5.1.3\n// Bootswatch\n\n$theme: \"lux\" !default;\n\n//\n// Color system\n//\n\n$white:    #fff !default;\n$gray-100: #f8f9fa !default;\n$gray-200: #f7f7f9 !default;\n$gray-300: #eceeef !default;\n$gray-400: #ced4da !default;\n$gray-500: #adb5bd !default;\n$gray-600: #919aa1 !default;\n$gray-700: #55595c !default;\n$gray-800: #343a40 !default;\n$gray-900: #1a1a1a !default;\n$black:    #000 !default;\n\n$blue:    #007bff !default;\n$indigo:  #6610f2 !default;\n$purple:  #6f42c1 !default;\n$pink:    #e83e8c !default;\n$red:     #d9534f !default;\n$orange:  #fd7e14 !default;\n$yellow:  #f0ad4e !default;\n$green:   #4bbf73 !default;\n$teal:    #20c997 !default;\n$cyan:    #1f9bcf !default;\n\n$primary:       $gray-900 !default;\n$secondary:     $white !default;\n$success:       $green !default;\n$info:          $cyan !default;\n$warning:       $yellow !default;\n$danger:        $red !default;\n$light:         $white !default;\n$dark:          $gray-800 !default;\n\n$min-contrast-ratio:   2.3 !default;\n\n// Options\n\n$enable-rounded:            false !default;\n\n// Body\n\n$body-color:                $gray-700 !default;\n\n// Fonts\n\n// stylelint-disable-next-line value-keyword-case\n$font-family-sans-serif:      \"Nunito Sans\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\" !default;\n$h1-font-size:                2rem !default;\n$h2-font-size:                1.75rem !default;\n$h3-font-size:                1.5rem !default;\n$h4-font-size:                1.25rem !default;\n$h5-font-size:                1rem !default;\n$h6-font-size:                .75rem !default;\n$headings-font-weight:        600 !default;\n$headings-color:              $gray-900 !default;\n\n// Tables\n\n$table-border-color:          rgba(0, 0, 0, .05) !default;\n\n// Buttons + Forms\n\n$input-btn-border-width:      0 !default;\n\n// Buttons\n\n$btn-line-height:             1.5rem !default;\n$input-btn-padding-y:         .75rem !default;\n$input-btn-padding-x:         1.5rem !default;\n$input-btn-padding-y-sm:      .5rem !default;\n$input-btn-padding-x-sm:      1rem !default;\n$input-btn-padding-y-lg:      2rem !default;\n$input-btn-padding-x-lg:      2rem !default;\n$btn-font-weight:             600 !default;\n\n// Forms\n\n$input-line-height:                     1.5 !default;\n$input-bg:                              $gray-200 !default;\n$input-disabled-bg:                     $gray-300 !default;\n$input-group-addon-bg:                  $gray-300 !default;\n\n// Navbar\n\n$navbar-padding-y:                  1.5rem !default;\n$navbar-dark-hover-color:           $white !default;\n$navbar-light-color:                rgba($black, .3) !default;\n$navbar-light-hover-color:          $gray-900 !default;\n$navbar-light-active-color:         $gray-900 !default;\n\n// Pagination\n\n$pagination-border-color:           transparent !default;\n$pagination-hover-border-color:     $pagination-border-color !default;\n$pagination-disabled-border-color:  $pagination-border-color !default;\n"
  },
  {
    "path": "src/sourceDev.WebApp/SharedThemes/lux/wwwroot/css/bootstrap.css",
    "content": "/*!\n * Bootswatch v5.1.3\n * Homepage: https://bootswatch.com\n * Copyright 2012-2021 Thomas Park\n * Licensed under MIT\n * Based on Bootstrap\n*/\n/*!\n * Bootstrap v5.1.3 (https://getbootstrap.com/)\n * Copyright 2011-2021 The Bootstrap Authors\n * Copyright 2011-2021 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n@import url(\"https://fonts.googleapis.com/css2?family=Nunito+Sans:wght@400;600&display=swap\");\n:root {\n  --bs-blue: #007bff;\n  --bs-indigo: #6610f2;\n  --bs-purple: #6f42c1;\n  --bs-pink: #e83e8c;\n  --bs-red: #d9534f;\n  --bs-orange: #fd7e14;\n  --bs-yellow: #f0ad4e;\n  --bs-green: #4bbf73;\n  --bs-teal: #20c997;\n  --bs-cyan: #1f9bcf;\n  --bs-white: #fff;\n  --bs-gray: #919aa1;\n  --bs-gray-dark: #343a40;\n  --bs-gray-100: #f8f9fa;\n  --bs-gray-200: #f7f7f9;\n  --bs-gray-300: #eceeef;\n  --bs-gray-400: #ced4da;\n  --bs-gray-500: #adb5bd;\n  --bs-gray-600: #919aa1;\n  --bs-gray-700: #55595c;\n  --bs-gray-800: #343a40;\n  --bs-gray-900: #1a1a1a;\n  --bs-primary: #1a1a1a;\n  --bs-secondary: #fff;\n  --bs-success: #4bbf73;\n  --bs-info: #1f9bcf;\n  --bs-warning: #f0ad4e;\n  --bs-danger: #d9534f;\n  --bs-light: #fff;\n  --bs-dark: #343a40;\n  --bs-primary-rgb: 26, 26, 26;\n  --bs-secondary-rgb: 255, 255, 255;\n  --bs-success-rgb: 75, 191, 115;\n  --bs-info-rgb: 31, 155, 207;\n  --bs-warning-rgb: 240, 173, 78;\n  --bs-danger-rgb: 217, 83, 79;\n  --bs-light-rgb: 255, 255, 255;\n  --bs-dark-rgb: 52, 58, 64;\n  --bs-white-rgb: 255, 255, 255;\n  --bs-black-rgb: 0, 0, 0;\n  --bs-body-color-rgb: 85, 89, 92;\n  --bs-body-bg-rgb: 255, 255, 255;\n  --bs-font-sans-serif: \"Nunito Sans\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\";\n  --bs-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n  --bs-gradient: linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));\n  --bs-body-font-family: var(--bs-font-sans-serif);\n  --bs-body-font-size: 1rem;\n  --bs-body-font-weight: 400;\n  --bs-body-line-height: 1.5;\n  --bs-body-color: #55595c;\n  --bs-body-bg: #fff;\n}\n\n*,\n*::before,\n*::after {\n  box-sizing: border-box;\n}\n\n@media (prefers-reduced-motion: no-preference) {\n  :root {\n    scroll-behavior: smooth;\n  }\n}\n\nbody {\n  margin: 0;\n  font-family: var(--bs-body-font-family);\n  font-size: var(--bs-body-font-size);\n  font-weight: var(--bs-body-font-weight);\n  line-height: var(--bs-body-line-height);\n  color: var(--bs-body-color);\n  text-align: var(--bs-body-text-align);\n  background-color: var(--bs-body-bg);\n  -webkit-text-size-adjust: 100%;\n  -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\n\nhr {\n  margin: 1rem 0;\n  color: inherit;\n  background-color: currentColor;\n  border: 0;\n  opacity: 0.25;\n}\n\nhr:not([size]) {\n  height: 1px;\n}\n\nh1, .h1, h2, .h2, h3, .h3, h4, .h4, h5, .h5, h6, .h6 {\n  margin-top: 0;\n  margin-bottom: 0.5rem;\n  font-weight: 600;\n  line-height: 1.2;\n  color: #1a1a1a;\n}\n\nh1, .h1 {\n  font-size: calc(1.325rem + 0.9vw);\n}\n\n@media (min-width: 1200px) {\n  h1, .h1 {\n    font-size: 2rem;\n  }\n}\n\nh2, .h2 {\n  font-size: calc(1.3rem + 0.6vw);\n}\n\n@media (min-width: 1200px) {\n  h2, .h2 {\n    font-size: 1.75rem;\n  }\n}\n\nh3, .h3 {\n  font-size: calc(1.275rem + 0.3vw);\n}\n\n@media (min-width: 1200px) {\n  h3, .h3 {\n    font-size: 1.5rem;\n  }\n}\n\nh4, .h4 {\n  font-size: 1.25rem;\n}\n\nh5, .h5 {\n  font-size: 1rem;\n}\n\nh6, .h6 {\n  font-size: 0.75rem;\n}\n\np {\n  margin-top: 0;\n  margin-bottom: 1rem;\n}\n\nabbr[title],\nabbr[data-bs-original-title] {\n  -webkit-text-decoration: underline dotted;\n  text-decoration: underline dotted;\n  cursor: help;\n  -webkit-text-decoration-skip-ink: none;\n  text-decoration-skip-ink: none;\n}\n\naddress {\n  margin-bottom: 1rem;\n  font-style: normal;\n  line-height: inherit;\n}\n\nol,\nul {\n  padding-left: 2rem;\n}\n\nol,\nul,\ndl {\n  margin-top: 0;\n  margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n  margin-bottom: 0;\n}\n\ndt {\n  font-weight: 700;\n}\n\ndd {\n  margin-bottom: .5rem;\n  margin-left: 0;\n}\n\nblockquote {\n  margin: 0 0 1rem;\n}\n\nb,\nstrong {\n  font-weight: bolder;\n}\n\nsmall, .small {\n  font-size: 0.875em;\n}\n\nmark, .mark {\n  padding: 0.2em;\n  background-color: #fcf8e3;\n}\n\nsub,\nsup {\n  position: relative;\n  font-size: 0.75em;\n  line-height: 0;\n  vertical-align: baseline;\n}\n\nsub {\n  bottom: -.25em;\n}\n\nsup {\n  top: -.5em;\n}\n\na {\n  color: #1a1a1a;\n  text-decoration: underline;\n}\n\na:hover {\n  color: #151515;\n}\n\na:not([href]):not([class]), a:not([href]):not([class]):hover {\n  color: inherit;\n  text-decoration: none;\n}\n\npre,\ncode,\nkbd,\nsamp {\n  font-family: var(--bs-font-monospace);\n  font-size: 1em;\n  direction: ltr /* rtl:ignore */;\n  unicode-bidi: bidi-override;\n}\n\npre {\n  display: block;\n  margin-top: 0;\n  margin-bottom: 1rem;\n  overflow: auto;\n  font-size: 0.875em;\n}\n\npre code {\n  font-size: inherit;\n  color: inherit;\n  word-break: normal;\n}\n\ncode {\n  font-size: 0.875em;\n  color: #e83e8c;\n  word-wrap: break-word;\n}\n\na > code {\n  color: inherit;\n}\n\nkbd {\n  padding: 0.2rem 0.4rem;\n  font-size: 0.875em;\n  color: #fff;\n  background-color: #1a1a1a;\n}\n\nkbd kbd {\n  padding: 0;\n  font-size: 1em;\n  font-weight: 700;\n}\n\nfigure {\n  margin: 0 0 1rem;\n}\n\nimg,\nsvg {\n  vertical-align: middle;\n}\n\ntable {\n  caption-side: bottom;\n  border-collapse: collapse;\n}\n\ncaption {\n  padding-top: 0.5rem;\n  padding-bottom: 0.5rem;\n  color: #919aa1;\n  text-align: left;\n}\n\nth {\n  text-align: inherit;\n  text-align: -webkit-match-parent;\n}\n\nthead,\ntbody,\ntfoot,\ntr,\ntd,\nth {\n  border-color: inherit;\n  border-style: solid;\n  border-width: 0;\n}\n\nlabel {\n  display: inline-block;\n}\n\nbutton {\n  border-radius: 0;\n}\n\nbutton:focus:not(:focus-visible) {\n  outline: 0;\n}\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n  margin: 0;\n  font-family: inherit;\n  font-size: inherit;\n  line-height: inherit;\n}\n\nbutton,\nselect {\n  text-transform: none;\n}\n\n[role=\"button\"] {\n  cursor: pointer;\n}\n\nselect {\n  word-wrap: normal;\n}\n\nselect:disabled {\n  opacity: 1;\n}\n\n[list]::-webkit-calendar-picker-indicator {\n  display: none;\n}\n\nbutton,\n[type=\"button\"],\n[type=\"reset\"],\n[type=\"submit\"] {\n  -webkit-appearance: button;\n}\n\nbutton:not(:disabled),\n[type=\"button\"]:not(:disabled),\n[type=\"reset\"]:not(:disabled),\n[type=\"submit\"]:not(:disabled) {\n  cursor: pointer;\n}\n\n::-moz-focus-inner {\n  padding: 0;\n  border-style: none;\n}\n\ntextarea {\n  resize: vertical;\n}\n\nfieldset {\n  min-width: 0;\n  padding: 0;\n  margin: 0;\n  border: 0;\n}\n\nlegend {\n  float: left;\n  width: 100%;\n  padding: 0;\n  margin-bottom: 0.5rem;\n  font-size: calc(1.275rem + 0.3vw);\n  line-height: inherit;\n}\n\n@media (min-width: 1200px) {\n  legend {\n    font-size: 1.5rem;\n  }\n}\n\nlegend + * {\n  clear: left;\n}\n\n::-webkit-datetime-edit-fields-wrapper,\n::-webkit-datetime-edit-text,\n::-webkit-datetime-edit-minute,\n::-webkit-datetime-edit-hour-field,\n::-webkit-datetime-edit-day-field,\n::-webkit-datetime-edit-month-field,\n::-webkit-datetime-edit-year-field {\n  padding: 0;\n}\n\n::-webkit-inner-spin-button {\n  height: auto;\n}\n\n[type=\"search\"] {\n  outline-offset: -2px;\n  -webkit-appearance: textfield;\n}\n\n/* rtl:raw:\n[type=\"tel\"],\n[type=\"url\"],\n[type=\"email\"],\n[type=\"number\"] {\n  direction: ltr;\n}\n*/\n::-webkit-search-decoration {\n  -webkit-appearance: none;\n}\n\n::-webkit-color-swatch-wrapper {\n  padding: 0;\n}\n\n::file-selector-button {\n  font: inherit;\n}\n\n::-webkit-file-upload-button {\n  font: inherit;\n  -webkit-appearance: button;\n}\n\noutput {\n  display: inline-block;\n}\n\niframe {\n  border: 0;\n}\n\nsummary {\n  display: list-item;\n  cursor: pointer;\n}\n\nprogress {\n  vertical-align: baseline;\n}\n\n[hidden] {\n  display: none !important;\n}\n\n.lead {\n  font-size: 1.25rem;\n  font-weight: 300;\n}\n\n.display-1 {\n  font-size: calc(1.625rem + 4.5vw);\n  font-weight: 300;\n  line-height: 1.2;\n}\n\n@media (min-width: 1200px) {\n  .display-1 {\n    font-size: 5rem;\n  }\n}\n\n.display-2 {\n  font-size: calc(1.575rem + 3.9vw);\n  font-weight: 300;\n  line-height: 1.2;\n}\n\n@media (min-width: 1200px) {\n  .display-2 {\n    font-size: 4.5rem;\n  }\n}\n\n.display-3 {\n  font-size: calc(1.525rem + 3.3vw);\n  font-weight: 300;\n  line-height: 1.2;\n}\n\n@media (min-width: 1200px) {\n  .display-3 {\n    font-size: 4rem;\n  }\n}\n\n.display-4 {\n  font-size: calc(1.475rem + 2.7vw);\n  font-weight: 300;\n  line-height: 1.2;\n}\n\n@media (min-width: 1200px) {\n  .display-4 {\n    font-size: 3.5rem;\n  }\n}\n\n.display-5 {\n  font-size: calc(1.425rem + 2.1vw);\n  font-weight: 300;\n  line-height: 1.2;\n}\n\n@media (min-width: 1200px) {\n  .display-5 {\n    font-size: 3rem;\n  }\n}\n\n.display-6 {\n  font-size: calc(1.375rem + 1.5vw);\n  font-weight: 300;\n  line-height: 1.2;\n}\n\n@media (min-width: 1200px) {\n  .display-6 {\n    font-size: 2.5rem;\n  }\n}\n\n.list-unstyled {\n  padding-left: 0;\n  list-style: none;\n}\n\n.list-inline {\n  padding-left: 0;\n  list-style: none;\n}\n\n.list-inline-item {\n  display: inline-block;\n}\n\n.list-inline-item:not(:last-child) {\n  margin-right: 0.5rem;\n}\n\n.initialism {\n  font-size: 0.875em;\n  text-transform: uppercase;\n}\n\n.blockquote {\n  margin-bottom: 1rem;\n  font-size: 1.25rem;\n}\n\n.blockquote > :last-child {\n  margin-bottom: 0;\n}\n\n.blockquote-footer {\n  margin-top: -1rem;\n  margin-bottom: 1rem;\n  font-size: 0.875em;\n  color: #919aa1;\n}\n\n.blockquote-footer::before {\n  content: \"\\2014\\00A0\";\n}\n\n.img-fluid {\n  max-width: 100%;\n  height: auto;\n}\n\n.img-thumbnail {\n  padding: 0.25rem;\n  background-color: #fff;\n  border: 1px solid #eceeef;\n  max-width: 100%;\n  height: auto;\n}\n\n.figure {\n  display: inline-block;\n}\n\n.figure-img {\n  margin-bottom: 0.5rem;\n  line-height: 1;\n}\n\n.figure-caption {\n  font-size: 0.875em;\n  color: #919aa1;\n}\n\n.container,\n.container-fluid,\n.container-sm,\n.container-md,\n.container-lg,\n.container-xl,\n.container-xxl {\n  width: 100%;\n  padding-right: var(--bs-gutter-x, 0.75rem);\n  padding-left: var(--bs-gutter-x, 0.75rem);\n  margin-right: auto;\n  margin-left: auto;\n}\n\n@media (min-width: 576px) {\n  .container, .container-sm {\n    max-width: 540px;\n  }\n}\n\n@media (min-width: 768px) {\n  .container, .container-sm, .container-md {\n    max-width: 720px;\n  }\n}\n\n@media (min-width: 992px) {\n  .container, .container-sm, .container-md, .container-lg {\n    max-width: 960px;\n  }\n}\n\n@media (min-width: 1200px) {\n  .container, .container-sm, .container-md, .container-lg, .container-xl {\n    max-width: 1140px;\n  }\n}\n\n@media (min-width: 1400px) {\n  .container, .container-sm, .container-md, .container-lg, .container-xl, .container-xxl {\n    max-width: 1320px;\n  }\n}\n\n.row {\n  --bs-gutter-x: 1.5rem;\n  --bs-gutter-y: 0;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n  flex-wrap: wrap;\n  margin-top: calc(-1 * var(--bs-gutter-y));\n  margin-right: calc(-.5 * var(--bs-gutter-x));\n  margin-left: calc(-.5 * var(--bs-gutter-x));\n}\n\n.row > * {\n  -ms-flex-negative: 0;\n  flex-shrink: 0;\n  width: 100%;\n  max-width: 100%;\n  padding-right: calc(var(--bs-gutter-x) * .5);\n  padding-left: calc(var(--bs-gutter-x) * .5);\n  margin-top: var(--bs-gutter-y);\n}\n\n.col {\n  -ms-flex: 1 0 0%;\n  flex: 1 0 0%;\n}\n\n.row-cols-auto > * {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: auto;\n}\n\n.row-cols-1 > * {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 100%;\n}\n\n.row-cols-2 > * {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 50%;\n}\n\n.row-cols-3 > * {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 33.333333%;\n}\n\n.row-cols-4 > * {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 25%;\n}\n\n.row-cols-5 > * {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 20%;\n}\n\n.row-cols-6 > * {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 16.666667%;\n}\n\n.col-auto {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: auto;\n}\n\n.col-1 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 8.333333%;\n}\n\n.col-2 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 16.666667%;\n}\n\n.col-3 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 25%;\n}\n\n.col-4 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 33.333333%;\n}\n\n.col-5 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 41.666667%;\n}\n\n.col-6 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 50%;\n}\n\n.col-7 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 58.333333%;\n}\n\n.col-8 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 66.666667%;\n}\n\n.col-9 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 75%;\n}\n\n.col-10 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 83.333333%;\n}\n\n.col-11 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 91.666667%;\n}\n\n.col-12 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 100%;\n}\n\n.offset-1 {\n  margin-left: 8.333333%;\n}\n\n.offset-2 {\n  margin-left: 16.666667%;\n}\n\n.offset-3 {\n  margin-left: 25%;\n}\n\n.offset-4 {\n  margin-left: 33.333333%;\n}\n\n.offset-5 {\n  margin-left: 41.666667%;\n}\n\n.offset-6 {\n  margin-left: 50%;\n}\n\n.offset-7 {\n  margin-left: 58.333333%;\n}\n\n.offset-8 {\n  margin-left: 66.666667%;\n}\n\n.offset-9 {\n  margin-left: 75%;\n}\n\n.offset-10 {\n  margin-left: 83.333333%;\n}\n\n.offset-11 {\n  margin-left: 91.666667%;\n}\n\n.g-0,\n.gx-0 {\n  --bs-gutter-x: 0;\n}\n\n.g-0,\n.gy-0 {\n  --bs-gutter-y: 0;\n}\n\n.g-1,\n.gx-1 {\n  --bs-gutter-x: 0.25rem;\n}\n\n.g-1,\n.gy-1 {\n  --bs-gutter-y: 0.25rem;\n}\n\n.g-2,\n.gx-2 {\n  --bs-gutter-x: 0.5rem;\n}\n\n.g-2,\n.gy-2 {\n  --bs-gutter-y: 0.5rem;\n}\n\n.g-3,\n.gx-3 {\n  --bs-gutter-x: 1rem;\n}\n\n.g-3,\n.gy-3 {\n  --bs-gutter-y: 1rem;\n}\n\n.g-4,\n.gx-4 {\n  --bs-gutter-x: 1.5rem;\n}\n\n.g-4,\n.gy-4 {\n  --bs-gutter-y: 1.5rem;\n}\n\n.g-5,\n.gx-5 {\n  --bs-gutter-x: 3rem;\n}\n\n.g-5,\n.gy-5 {\n  --bs-gutter-y: 3rem;\n}\n\n@media (min-width: 576px) {\n  .col-sm {\n    -ms-flex: 1 0 0%;\n    flex: 1 0 0%;\n  }\n  .row-cols-sm-auto > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .row-cols-sm-1 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .row-cols-sm-2 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .row-cols-sm-3 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 33.333333%;\n  }\n  .row-cols-sm-4 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .row-cols-sm-5 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 20%;\n  }\n  .row-cols-sm-6 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 16.666667%;\n  }\n  .col-sm-auto {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .col-sm-1 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 8.333333%;\n  }\n  .col-sm-2 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 16.666667%;\n  }\n  .col-sm-3 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .col-sm-4 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 33.333333%;\n  }\n  .col-sm-5 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 41.666667%;\n  }\n  .col-sm-6 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .col-sm-7 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 58.333333%;\n  }\n  .col-sm-8 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 66.666667%;\n  }\n  .col-sm-9 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 75%;\n  }\n  .col-sm-10 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 83.333333%;\n  }\n  .col-sm-11 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 91.666667%;\n  }\n  .col-sm-12 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .offset-sm-0 {\n    margin-left: 0;\n  }\n  .offset-sm-1 {\n    margin-left: 8.333333%;\n  }\n  .offset-sm-2 {\n    margin-left: 16.666667%;\n  }\n  .offset-sm-3 {\n    margin-left: 25%;\n  }\n  .offset-sm-4 {\n    margin-left: 33.333333%;\n  }\n  .offset-sm-5 {\n    margin-left: 41.666667%;\n  }\n  .offset-sm-6 {\n    margin-left: 50%;\n  }\n  .offset-sm-7 {\n    margin-left: 58.333333%;\n  }\n  .offset-sm-8 {\n    margin-left: 66.666667%;\n  }\n  .offset-sm-9 {\n    margin-left: 75%;\n  }\n  .offset-sm-10 {\n    margin-left: 83.333333%;\n  }\n  .offset-sm-11 {\n    margin-left: 91.666667%;\n  }\n  .g-sm-0,\n  .gx-sm-0 {\n    --bs-gutter-x: 0;\n  }\n  .g-sm-0,\n  .gy-sm-0 {\n    --bs-gutter-y: 0;\n  }\n  .g-sm-1,\n  .gx-sm-1 {\n    --bs-gutter-x: 0.25rem;\n  }\n  .g-sm-1,\n  .gy-sm-1 {\n    --bs-gutter-y: 0.25rem;\n  }\n  .g-sm-2,\n  .gx-sm-2 {\n    --bs-gutter-x: 0.5rem;\n  }\n  .g-sm-2,\n  .gy-sm-2 {\n    --bs-gutter-y: 0.5rem;\n  }\n  .g-sm-3,\n  .gx-sm-3 {\n    --bs-gutter-x: 1rem;\n  }\n  .g-sm-3,\n  .gy-sm-3 {\n    --bs-gutter-y: 1rem;\n  }\n  .g-sm-4,\n  .gx-sm-4 {\n    --bs-gutter-x: 1.5rem;\n  }\n  .g-sm-4,\n  .gy-sm-4 {\n    --bs-gutter-y: 1.5rem;\n  }\n  .g-sm-5,\n  .gx-sm-5 {\n    --bs-gutter-x: 3rem;\n  }\n  .g-sm-5,\n  .gy-sm-5 {\n    --bs-gutter-y: 3rem;\n  }\n}\n\n@media (min-width: 768px) {\n  .col-md {\n    -ms-flex: 1 0 0%;\n    flex: 1 0 0%;\n  }\n  .row-cols-md-auto > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .row-cols-md-1 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .row-cols-md-2 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .row-cols-md-3 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 33.333333%;\n  }\n  .row-cols-md-4 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .row-cols-md-5 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 20%;\n  }\n  .row-cols-md-6 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 16.666667%;\n  }\n  .col-md-auto {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .col-md-1 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 8.333333%;\n  }\n  .col-md-2 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 16.666667%;\n  }\n  .col-md-3 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .col-md-4 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 33.333333%;\n  }\n  .col-md-5 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 41.666667%;\n  }\n  .col-md-6 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .col-md-7 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 58.333333%;\n  }\n  .col-md-8 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 66.666667%;\n  }\n  .col-md-9 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 75%;\n  }\n  .col-md-10 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 83.333333%;\n  }\n  .col-md-11 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 91.666667%;\n  }\n  .col-md-12 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .offset-md-0 {\n    margin-left: 0;\n  }\n  .offset-md-1 {\n    margin-left: 8.333333%;\n  }\n  .offset-md-2 {\n    margin-left: 16.666667%;\n  }\n  .offset-md-3 {\n    margin-left: 25%;\n  }\n  .offset-md-4 {\n    margin-left: 33.333333%;\n  }\n  .offset-md-5 {\n    margin-left: 41.666667%;\n  }\n  .offset-md-6 {\n    margin-left: 50%;\n  }\n  .offset-md-7 {\n    margin-left: 58.333333%;\n  }\n  .offset-md-8 {\n    margin-left: 66.666667%;\n  }\n  .offset-md-9 {\n    margin-left: 75%;\n  }\n  .offset-md-10 {\n    margin-left: 83.333333%;\n  }\n  .offset-md-11 {\n    margin-left: 91.666667%;\n  }\n  .g-md-0,\n  .gx-md-0 {\n    --bs-gutter-x: 0;\n  }\n  .g-md-0,\n  .gy-md-0 {\n    --bs-gutter-y: 0;\n  }\n  .g-md-1,\n  .gx-md-1 {\n    --bs-gutter-x: 0.25rem;\n  }\n  .g-md-1,\n  .gy-md-1 {\n    --bs-gutter-y: 0.25rem;\n  }\n  .g-md-2,\n  .gx-md-2 {\n    --bs-gutter-x: 0.5rem;\n  }\n  .g-md-2,\n  .gy-md-2 {\n    --bs-gutter-y: 0.5rem;\n  }\n  .g-md-3,\n  .gx-md-3 {\n    --bs-gutter-x: 1rem;\n  }\n  .g-md-3,\n  .gy-md-3 {\n    --bs-gutter-y: 1rem;\n  }\n  .g-md-4,\n  .gx-md-4 {\n    --bs-gutter-x: 1.5rem;\n  }\n  .g-md-4,\n  .gy-md-4 {\n    --bs-gutter-y: 1.5rem;\n  }\n  .g-md-5,\n  .gx-md-5 {\n    --bs-gutter-x: 3rem;\n  }\n  .g-md-5,\n  .gy-md-5 {\n    --bs-gutter-y: 3rem;\n  }\n}\n\n@media (min-width: 992px) {\n  .col-lg {\n    -ms-flex: 1 0 0%;\n    flex: 1 0 0%;\n  }\n  .row-cols-lg-auto > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .row-cols-lg-1 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .row-cols-lg-2 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .row-cols-lg-3 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 33.333333%;\n  }\n  .row-cols-lg-4 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .row-cols-lg-5 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 20%;\n  }\n  .row-cols-lg-6 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 16.666667%;\n  }\n  .col-lg-auto {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .col-lg-1 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 8.333333%;\n  }\n  .col-lg-2 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 16.666667%;\n  }\n  .col-lg-3 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .col-lg-4 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 33.333333%;\n  }\n  .col-lg-5 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 41.666667%;\n  }\n  .col-lg-6 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .col-lg-7 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 58.333333%;\n  }\n  .col-lg-8 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 66.666667%;\n  }\n  .col-lg-9 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 75%;\n  }\n  .col-lg-10 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 83.333333%;\n  }\n  .col-lg-11 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 91.666667%;\n  }\n  .col-lg-12 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .offset-lg-0 {\n    margin-left: 0;\n  }\n  .offset-lg-1 {\n    margin-left: 8.333333%;\n  }\n  .offset-lg-2 {\n    margin-left: 16.666667%;\n  }\n  .offset-lg-3 {\n    margin-left: 25%;\n  }\n  .offset-lg-4 {\n    margin-left: 33.333333%;\n  }\n  .offset-lg-5 {\n    margin-left: 41.666667%;\n  }\n  .offset-lg-6 {\n    margin-left: 50%;\n  }\n  .offset-lg-7 {\n    margin-left: 58.333333%;\n  }\n  .offset-lg-8 {\n    margin-left: 66.666667%;\n  }\n  .offset-lg-9 {\n    margin-left: 75%;\n  }\n  .offset-lg-10 {\n    margin-left: 83.333333%;\n  }\n  .offset-lg-11 {\n    margin-left: 91.666667%;\n  }\n  .g-lg-0,\n  .gx-lg-0 {\n    --bs-gutter-x: 0;\n  }\n  .g-lg-0,\n  .gy-lg-0 {\n    --bs-gutter-y: 0;\n  }\n  .g-lg-1,\n  .gx-lg-1 {\n    --bs-gutter-x: 0.25rem;\n  }\n  .g-lg-1,\n  .gy-lg-1 {\n    --bs-gutter-y: 0.25rem;\n  }\n  .g-lg-2,\n  .gx-lg-2 {\n    --bs-gutter-x: 0.5rem;\n  }\n  .g-lg-2,\n  .gy-lg-2 {\n    --bs-gutter-y: 0.5rem;\n  }\n  .g-lg-3,\n  .gx-lg-3 {\n    --bs-gutter-x: 1rem;\n  }\n  .g-lg-3,\n  .gy-lg-3 {\n    --bs-gutter-y: 1rem;\n  }\n  .g-lg-4,\n  .gx-lg-4 {\n    --bs-gutter-x: 1.5rem;\n  }\n  .g-lg-4,\n  .gy-lg-4 {\n    --bs-gutter-y: 1.5rem;\n  }\n  .g-lg-5,\n  .gx-lg-5 {\n    --bs-gutter-x: 3rem;\n  }\n  .g-lg-5,\n  .gy-lg-5 {\n    --bs-gutter-y: 3rem;\n  }\n}\n\n@media (min-width: 1200px) {\n  .col-xl {\n    -ms-flex: 1 0 0%;\n    flex: 1 0 0%;\n  }\n  .row-cols-xl-auto > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .row-cols-xl-1 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .row-cols-xl-2 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .row-cols-xl-3 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 33.333333%;\n  }\n  .row-cols-xl-4 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .row-cols-xl-5 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 20%;\n  }\n  .row-cols-xl-6 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 16.666667%;\n  }\n  .col-xl-auto {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .col-xl-1 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 8.333333%;\n  }\n  .col-xl-2 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 16.666667%;\n  }\n  .col-xl-3 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .col-xl-4 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 33.333333%;\n  }\n  .col-xl-5 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 41.666667%;\n  }\n  .col-xl-6 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .col-xl-7 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 58.333333%;\n  }\n  .col-xl-8 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 66.666667%;\n  }\n  .col-xl-9 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 75%;\n  }\n  .col-xl-10 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 83.333333%;\n  }\n  .col-xl-11 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 91.666667%;\n  }\n  .col-xl-12 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .offset-xl-0 {\n    margin-left: 0;\n  }\n  .offset-xl-1 {\n    margin-left: 8.333333%;\n  }\n  .offset-xl-2 {\n    margin-left: 16.666667%;\n  }\n  .offset-xl-3 {\n    margin-left: 25%;\n  }\n  .offset-xl-4 {\n    margin-left: 33.333333%;\n  }\n  .offset-xl-5 {\n    margin-left: 41.666667%;\n  }\n  .offset-xl-6 {\n    margin-left: 50%;\n  }\n  .offset-xl-7 {\n    margin-left: 58.333333%;\n  }\n  .offset-xl-8 {\n    margin-left: 66.666667%;\n  }\n  .offset-xl-9 {\n    margin-left: 75%;\n  }\n  .offset-xl-10 {\n    margin-left: 83.333333%;\n  }\n  .offset-xl-11 {\n    margin-left: 91.666667%;\n  }\n  .g-xl-0,\n  .gx-xl-0 {\n    --bs-gutter-x: 0;\n  }\n  .g-xl-0,\n  .gy-xl-0 {\n    --bs-gutter-y: 0;\n  }\n  .g-xl-1,\n  .gx-xl-1 {\n    --bs-gutter-x: 0.25rem;\n  }\n  .g-xl-1,\n  .gy-xl-1 {\n    --bs-gutter-y: 0.25rem;\n  }\n  .g-xl-2,\n  .gx-xl-2 {\n    --bs-gutter-x: 0.5rem;\n  }\n  .g-xl-2,\n  .gy-xl-2 {\n    --bs-gutter-y: 0.5rem;\n  }\n  .g-xl-3,\n  .gx-xl-3 {\n    --bs-gutter-x: 1rem;\n  }\n  .g-xl-3,\n  .gy-xl-3 {\n    --bs-gutter-y: 1rem;\n  }\n  .g-xl-4,\n  .gx-xl-4 {\n    --bs-gutter-x: 1.5rem;\n  }\n  .g-xl-4,\n  .gy-xl-4 {\n    --bs-gutter-y: 1.5rem;\n  }\n  .g-xl-5,\n  .gx-xl-5 {\n    --bs-gutter-x: 3rem;\n  }\n  .g-xl-5,\n  .gy-xl-5 {\n    --bs-gutter-y: 3rem;\n  }\n}\n\n@media (min-width: 1400px) {\n  .col-xxl {\n    -ms-flex: 1 0 0%;\n    flex: 1 0 0%;\n  }\n  .row-cols-xxl-auto > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .row-cols-xxl-1 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .row-cols-xxl-2 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .row-cols-xxl-3 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 33.333333%;\n  }\n  .row-cols-xxl-4 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .row-cols-xxl-5 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 20%;\n  }\n  .row-cols-xxl-6 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 16.666667%;\n  }\n  .col-xxl-auto {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .col-xxl-1 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 8.333333%;\n  }\n  .col-xxl-2 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 16.666667%;\n  }\n  .col-xxl-3 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .col-xxl-4 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 33.333333%;\n  }\n  .col-xxl-5 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 41.666667%;\n  }\n  .col-xxl-6 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .col-xxl-7 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 58.333333%;\n  }\n  .col-xxl-8 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 66.666667%;\n  }\n  .col-xxl-9 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 75%;\n  }\n  .col-xxl-10 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 83.333333%;\n  }\n  .col-xxl-11 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 91.666667%;\n  }\n  .col-xxl-12 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .offset-xxl-0 {\n    margin-left: 0;\n  }\n  .offset-xxl-1 {\n    margin-left: 8.333333%;\n  }\n  .offset-xxl-2 {\n    margin-left: 16.666667%;\n  }\n  .offset-xxl-3 {\n    margin-left: 25%;\n  }\n  .offset-xxl-4 {\n    margin-left: 33.333333%;\n  }\n  .offset-xxl-5 {\n    margin-left: 41.666667%;\n  }\n  .offset-xxl-6 {\n    margin-left: 50%;\n  }\n  .offset-xxl-7 {\n    margin-left: 58.333333%;\n  }\n  .offset-xxl-8 {\n    margin-left: 66.666667%;\n  }\n  .offset-xxl-9 {\n    margin-left: 75%;\n  }\n  .offset-xxl-10 {\n    margin-left: 83.333333%;\n  }\n  .offset-xxl-11 {\n    margin-left: 91.666667%;\n  }\n  .g-xxl-0,\n  .gx-xxl-0 {\n    --bs-gutter-x: 0;\n  }\n  .g-xxl-0,\n  .gy-xxl-0 {\n    --bs-gutter-y: 0;\n  }\n  .g-xxl-1,\n  .gx-xxl-1 {\n    --bs-gutter-x: 0.25rem;\n  }\n  .g-xxl-1,\n  .gy-xxl-1 {\n    --bs-gutter-y: 0.25rem;\n  }\n  .g-xxl-2,\n  .gx-xxl-2 {\n    --bs-gutter-x: 0.5rem;\n  }\n  .g-xxl-2,\n  .gy-xxl-2 {\n    --bs-gutter-y: 0.5rem;\n  }\n  .g-xxl-3,\n  .gx-xxl-3 {\n    --bs-gutter-x: 1rem;\n  }\n  .g-xxl-3,\n  .gy-xxl-3 {\n    --bs-gutter-y: 1rem;\n  }\n  .g-xxl-4,\n  .gx-xxl-4 {\n    --bs-gutter-x: 1.5rem;\n  }\n  .g-xxl-4,\n  .gy-xxl-4 {\n    --bs-gutter-y: 1.5rem;\n  }\n  .g-xxl-5,\n  .gx-xxl-5 {\n    --bs-gutter-x: 3rem;\n  }\n  .g-xxl-5,\n  .gy-xxl-5 {\n    --bs-gutter-y: 3rem;\n  }\n}\n\n.table {\n  --bs-table-bg: transparent;\n  --bs-table-accent-bg: transparent;\n  --bs-table-striped-color: #55595c;\n  --bs-table-striped-bg: rgba(0, 0, 0, 0.05);\n  --bs-table-active-color: #55595c;\n  --bs-table-active-bg: rgba(0, 0, 0, 0.1);\n  --bs-table-hover-color: #55595c;\n  --bs-table-hover-bg: rgba(0, 0, 0, 0.075);\n  width: 100%;\n  margin-bottom: 1rem;\n  color: #55595c;\n  vertical-align: top;\n  border-color: rgba(0, 0, 0, 0.05);\n}\n\n.table > :not(caption) > * > * {\n  padding: 0.5rem 0.5rem;\n  background-color: var(--bs-table-bg);\n  border-bottom-width: 1px;\n  box-shadow: inset 0 0 0 9999px var(--bs-table-accent-bg);\n}\n\n.table > tbody {\n  vertical-align: inherit;\n}\n\n.table > thead {\n  vertical-align: bottom;\n}\n\n.table > :not(:first-child) {\n  border-top: 2px solid currentColor;\n}\n\n.caption-top {\n  caption-side: top;\n}\n\n.table-sm > :not(caption) > * > * {\n  padding: 0.25rem 0.25rem;\n}\n\n.table-bordered > :not(caption) > * {\n  border-width: 1px 0;\n}\n\n.table-bordered > :not(caption) > * > * {\n  border-width: 0 1px;\n}\n\n.table-borderless > :not(caption) > * > * {\n  border-bottom-width: 0;\n}\n\n.table-borderless > :not(:first-child) {\n  border-top-width: 0;\n}\n\n.table-striped > tbody > tr:nth-of-type(odd) > * {\n  --bs-table-accent-bg: var(--bs-table-striped-bg);\n  color: var(--bs-table-striped-color);\n}\n\n.table-active {\n  --bs-table-accent-bg: var(--bs-table-active-bg);\n  color: var(--bs-table-active-color);\n}\n\n.table-hover > tbody > tr:hover > * {\n  --bs-table-accent-bg: var(--bs-table-hover-bg);\n  color: var(--bs-table-hover-color);\n}\n\n.table-primary {\n  --bs-table-bg: #d1d1d1;\n  --bs-table-striped-bg: #c7c7c7;\n  --bs-table-striped-color: #000;\n  --bs-table-active-bg: #bcbcbc;\n  --bs-table-active-color: #000;\n  --bs-table-hover-bg: #c1c1c1;\n  --bs-table-hover-color: #000;\n  color: #000;\n  border-color: #bcbcbc;\n}\n\n.table-secondary {\n  --bs-table-bg: white;\n  --bs-table-striped-bg: #f2f2f2;\n  --bs-table-striped-color: #000;\n  --bs-table-active-bg: #e6e6e6;\n  --bs-table-active-color: #000;\n  --bs-table-hover-bg: #ececec;\n  --bs-table-hover-color: #000;\n  color: #000;\n  border-color: #e6e6e6;\n}\n\n.table-success {\n  --bs-table-bg: #dbf2e3;\n  --bs-table-striped-bg: #d0e6d8;\n  --bs-table-striped-color: #000;\n  --bs-table-active-bg: #c5dacc;\n  --bs-table-active-color: #000;\n  --bs-table-hover-bg: #cbe0d2;\n  --bs-table-hover-color: #000;\n  color: #000;\n  border-color: #c5dacc;\n}\n\n.table-info {\n  --bs-table-bg: #d2ebf5;\n  --bs-table-striped-bg: #c8dfe9;\n  --bs-table-striped-color: #000;\n  --bs-table-active-bg: #bdd4dd;\n  --bs-table-active-color: #000;\n  --bs-table-hover-bg: #c2d9e3;\n  --bs-table-hover-color: #000;\n  color: #000;\n  border-color: #bdd4dd;\n}\n\n.table-warning {\n  --bs-table-bg: #fcefdc;\n  --bs-table-striped-bg: #efe3d1;\n  --bs-table-striped-color: #000;\n  --bs-table-active-bg: #e3d7c6;\n  --bs-table-active-color: #000;\n  --bs-table-hover-bg: #e9ddcc;\n  --bs-table-hover-color: #000;\n  color: #000;\n  border-color: #e3d7c6;\n}\n\n.table-danger {\n  --bs-table-bg: #f7dddc;\n  --bs-table-striped-bg: #ebd2d1;\n  --bs-table-striped-color: #000;\n  --bs-table-active-bg: #dec7c6;\n  --bs-table-active-color: #000;\n  --bs-table-hover-bg: #e4cccc;\n  --bs-table-hover-color: #000;\n  color: #000;\n  border-color: #dec7c6;\n}\n\n.table-light {\n  --bs-table-bg: #fff;\n  --bs-table-striped-bg: #f2f2f2;\n  --bs-table-striped-color: #000;\n  --bs-table-active-bg: #e6e6e6;\n  --bs-table-active-color: #000;\n  --bs-table-hover-bg: #ececec;\n  --bs-table-hover-color: #000;\n  color: #000;\n  border-color: #e6e6e6;\n}\n\n.table-dark {\n  --bs-table-bg: #343a40;\n  --bs-table-striped-bg: #3e444a;\n  --bs-table-striped-color: #fff;\n  --bs-table-active-bg: #484e53;\n  --bs-table-active-color: #fff;\n  --bs-table-hover-bg: #43494e;\n  --bs-table-hover-color: #fff;\n  color: #fff;\n  border-color: #484e53;\n}\n\n.table-responsive {\n  overflow-x: auto;\n  -webkit-overflow-scrolling: touch;\n}\n\n@media (max-width: 575.98px) {\n  .table-responsive-sm {\n    overflow-x: auto;\n    -webkit-overflow-scrolling: touch;\n  }\n}\n\n@media (max-width: 767.98px) {\n  .table-responsive-md {\n    overflow-x: auto;\n    -webkit-overflow-scrolling: touch;\n  }\n}\n\n@media (max-width: 991.98px) {\n  .table-responsive-lg {\n    overflow-x: auto;\n    -webkit-overflow-scrolling: touch;\n  }\n}\n\n@media (max-width: 1199.98px) {\n  .table-responsive-xl {\n    overflow-x: auto;\n    -webkit-overflow-scrolling: touch;\n  }\n}\n\n@media (max-width: 1399.98px) {\n  .table-responsive-xxl {\n    overflow-x: auto;\n    -webkit-overflow-scrolling: touch;\n  }\n}\n\n.form-label {\n  margin-bottom: 0.5rem;\n}\n\n.col-form-label {\n  padding-top: 0.75rem;\n  padding-bottom: 0.75rem;\n  margin-bottom: 0;\n  font-size: inherit;\n  line-height: 1.5;\n}\n\n.col-form-label-lg {\n  padding-top: 2rem;\n  padding-bottom: 2rem;\n  font-size: 1.25rem;\n}\n\n.col-form-label-sm {\n  padding-top: 0.5rem;\n  padding-bottom: 0.5rem;\n  font-size: 0.875rem;\n}\n\n.form-text {\n  margin-top: 0.25rem;\n  font-size: 0.875em;\n  color: #919aa1;\n}\n\n.form-control {\n  display: block;\n  width: 100%;\n  padding: 0.75rem 1.5rem;\n  font-size: 1rem;\n  font-weight: 400;\n  line-height: 1.5;\n  color: #55595c;\n  background-color: #f7f7f9;\n  background-clip: padding-box;\n  border: 0 solid #ced4da;\n  -webkit-appearance: none;\n  -moz-appearance: none;\n  appearance: none;\n  border-radius: 0;\n  transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .form-control {\n    transition: none;\n  }\n}\n\n.form-control[type=\"file\"] {\n  overflow: hidden;\n}\n\n.form-control[type=\"file\"]:not(:disabled):not([readonly]) {\n  cursor: pointer;\n}\n\n.form-control:focus {\n  color: #55595c;\n  background-color: #f7f7f9;\n  border-color: #8d8d8d;\n  outline: 0;\n  box-shadow: 0 0 0 0.25rem rgba(26, 26, 26, 0.25);\n}\n\n.form-control::-webkit-date-and-time-value {\n  height: 1.5em;\n}\n\n.form-control::-webkit-input-placeholder {\n  color: #919aa1;\n  opacity: 1;\n}\n\n.form-control::-moz-placeholder {\n  color: #919aa1;\n  opacity: 1;\n}\n\n.form-control:-ms-input-placeholder {\n  color: #919aa1;\n  opacity: 1;\n}\n\n.form-control::-ms-input-placeholder {\n  color: #919aa1;\n  opacity: 1;\n}\n\n.form-control::placeholder {\n  color: #919aa1;\n  opacity: 1;\n}\n\n.form-control:disabled, .form-control[readonly] {\n  background-color: #eceeef;\n  opacity: 1;\n}\n\n.form-control::file-selector-button {\n  padding: 0.75rem 1.5rem;\n  margin: -0.75rem -1.5rem;\n  -webkit-margin-end: 1.5rem;\n  -moz-margin-end: 1.5rem;\n  margin-inline-end: 1.5rem;\n  color: #55595c;\n  background-color: #eceeef;\n  pointer-events: none;\n  border-color: inherit;\n  border-style: solid;\n  border-width: 0;\n  border-inline-end-width: 0;\n  border-radius: 0;\n  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .form-control::file-selector-button {\n    transition: none;\n  }\n}\n\n.form-control:hover:not(:disabled):not([readonly])::file-selector-button {\n  background-color: #e0e2e3;\n}\n\n.form-control::-webkit-file-upload-button {\n  padding: 0.75rem 1.5rem;\n  margin: -0.75rem -1.5rem;\n  -webkit-margin-end: 1.5rem;\n  margin-inline-end: 1.5rem;\n  color: #55595c;\n  background-color: #eceeef;\n  pointer-events: none;\n  border-color: inherit;\n  border-style: solid;\n  border-width: 0;\n  border-inline-end-width: 0;\n  border-radius: 0;\n  -webkit-transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .form-control::-webkit-file-upload-button {\n    -webkit-transition: none;\n    transition: none;\n  }\n}\n\n.form-control:hover:not(:disabled):not([readonly])::-webkit-file-upload-button {\n  background-color: #e0e2e3;\n}\n\n.form-control-plaintext {\n  display: block;\n  width: 100%;\n  padding: 0.75rem 0;\n  margin-bottom: 0;\n  line-height: 1.5;\n  color: #55595c;\n  background-color: transparent;\n  border: solid transparent;\n  border-width: 0 0;\n}\n\n.form-control-plaintext.form-control-sm, .form-control-plaintext.form-control-lg {\n  padding-right: 0;\n  padding-left: 0;\n}\n\n.form-control-sm {\n  min-height: calc(1.5em + 1rem);\n  padding: 0.5rem 1rem;\n  font-size: 0.875rem;\n}\n\n.form-control-sm::file-selector-button {\n  padding: 0.5rem 1rem;\n  margin: -0.5rem -1rem;\n  -webkit-margin-end: 1rem;\n  -moz-margin-end: 1rem;\n  margin-inline-end: 1rem;\n}\n\n.form-control-sm::-webkit-file-upload-button {\n  padding: 0.5rem 1rem;\n  margin: -0.5rem -1rem;\n  -webkit-margin-end: 1rem;\n  margin-inline-end: 1rem;\n}\n\n.form-control-lg {\n  min-height: calc(1.5em + 4rem);\n  padding: 2rem 2rem;\n  font-size: 1.25rem;\n}\n\n.form-control-lg::file-selector-button {\n  padding: 2rem 2rem;\n  margin: -2rem -2rem;\n  -webkit-margin-end: 2rem;\n  -moz-margin-end: 2rem;\n  margin-inline-end: 2rem;\n}\n\n.form-control-lg::-webkit-file-upload-button {\n  padding: 2rem 2rem;\n  margin: -2rem -2rem;\n  -webkit-margin-end: 2rem;\n  margin-inline-end: 2rem;\n}\n\ntextarea.form-control {\n  min-height: calc(1.5em + 1.5rem);\n}\n\ntextarea.form-control-sm {\n  min-height: calc(1.5em + 1rem);\n}\n\ntextarea.form-control-lg {\n  min-height: calc(1.5em + 4rem);\n}\n\n.form-control-color {\n  width: 3rem;\n  height: auto;\n  padding: 0.75rem;\n}\n\n.form-control-color:not(:disabled):not([readonly]) {\n  cursor: pointer;\n}\n\n.form-control-color::-moz-color-swatch {\n  height: 1.5em;\n}\n\n.form-control-color::-webkit-color-swatch {\n  height: 1.5em;\n}\n\n.form-select {\n  display: block;\n  width: 100%;\n  padding: 0.75rem 4.5rem 0.75rem 1.5rem;\n  -moz-padding-start: calc(1.5rem - 3px);\n  font-size: 1rem;\n  font-weight: 400;\n  line-height: 1.5;\n  color: #55595c;\n  background-color: #f7f7f9;\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e\");\n  background-repeat: no-repeat;\n  background-position: right 1.5rem center;\n  background-size: 16px 12px;\n  border: 0 solid #ced4da;\n  border-radius: 0;\n  transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n  -webkit-appearance: none;\n  -moz-appearance: none;\n  appearance: none;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .form-select {\n    transition: none;\n  }\n}\n\n.form-select:focus {\n  border-color: #8d8d8d;\n  outline: 0;\n  box-shadow: 0 0 0 0.25rem rgba(26, 26, 26, 0.25);\n}\n\n.form-select[multiple], .form-select[size]:not([size=\"1\"]) {\n  padding-right: 1.5rem;\n  background-image: none;\n}\n\n.form-select:disabled {\n  background-color: #f7f7f9;\n}\n\n.form-select:-moz-focusring {\n  color: transparent;\n  text-shadow: 0 0 0 #55595c;\n}\n\n.form-select-sm {\n  padding-top: 0.5rem;\n  padding-bottom: 0.5rem;\n  padding-left: 1rem;\n  font-size: 0.875rem;\n}\n\n.form-select-lg {\n  padding-top: 2rem;\n  padding-bottom: 2rem;\n  padding-left: 2rem;\n  font-size: 1.25rem;\n}\n\n.form-check {\n  display: block;\n  min-height: 1.5rem;\n  padding-left: 1.5em;\n  margin-bottom: 0.125rem;\n}\n\n.form-check .form-check-input {\n  float: left;\n  margin-left: -1.5em;\n}\n\n.form-check-input {\n  width: 1em;\n  height: 1em;\n  margin-top: 0.25em;\n  vertical-align: top;\n  background-color: #f7f7f9;\n  background-repeat: no-repeat;\n  background-position: center;\n  background-size: contain;\n  border: 1px solid rgba(0, 0, 0, 0.25);\n  -webkit-appearance: none;\n  -moz-appearance: none;\n  appearance: none;\n  -webkit-print-color-adjust: exact;\n  color-adjust: exact;\n}\n\n.form-check-input[type=\"radio\"] {\n  border-radius: 50%;\n}\n\n.form-check-input:active {\n  -webkit-filter: brightness(90%);\n  filter: brightness(90%);\n}\n\n.form-check-input:focus {\n  border-color: #8d8d8d;\n  outline: 0;\n  box-shadow: 0 0 0 0.25rem rgba(26, 26, 26, 0.25);\n}\n\n.form-check-input:checked {\n  background-color: #1a1a1a;\n  border-color: #1a1a1a;\n}\n\n.form-check-input:checked[type=\"checkbox\"] {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10l3 3l6-6'/%3e%3c/svg%3e\");\n}\n\n.form-check-input:checked[type=\"radio\"] {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='2' fill='%23fff'/%3e%3c/svg%3e\");\n}\n\n.form-check-input[type=\"checkbox\"]:indeterminate {\n  background-color: #1a1a1a;\n  border-color: #1a1a1a;\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10h8'/%3e%3c/svg%3e\");\n}\n\n.form-check-input:disabled {\n  pointer-events: none;\n  -webkit-filter: none;\n  filter: none;\n  opacity: 0.5;\n}\n\n.form-check-input[disabled] ~ .form-check-label, .form-check-input:disabled ~ .form-check-label {\n  opacity: 0.5;\n}\n\n.form-switch {\n  padding-left: 2.5em;\n}\n\n.form-switch .form-check-input {\n  width: 2em;\n  margin-left: -2.5em;\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%280, 0, 0, 0.25%29'/%3e%3c/svg%3e\");\n  background-position: left center;\n  transition: background-position 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .form-switch .form-check-input {\n    transition: none;\n  }\n}\n\n.form-switch .form-check-input:focus {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%238d8d8d'/%3e%3c/svg%3e\");\n}\n\n.form-switch .form-check-input:checked {\n  background-position: right center;\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e\");\n}\n\n.form-check-inline {\n  display: inline-block;\n  margin-right: 1rem;\n}\n\n.btn-check {\n  position: absolute;\n  clip: rect(0, 0, 0, 0);\n  pointer-events: none;\n}\n\n.btn-check[disabled] + .btn, .btn-check:disabled + .btn {\n  pointer-events: none;\n  -webkit-filter: none;\n  filter: none;\n  opacity: 0.65;\n}\n\n.form-range {\n  width: 100%;\n  height: 1.5rem;\n  padding: 0;\n  background-color: transparent;\n  -webkit-appearance: none;\n  -moz-appearance: none;\n  appearance: none;\n}\n\n.form-range:focus {\n  outline: 0;\n}\n\n.form-range:focus::-webkit-slider-thumb {\n  box-shadow: 0 0 0 1px #fff, 0 0 0 0.25rem rgba(26, 26, 26, 0.25);\n}\n\n.form-range:focus::-moz-range-thumb {\n  box-shadow: 0 0 0 1px #fff, 0 0 0 0.25rem rgba(26, 26, 26, 0.25);\n}\n\n.form-range::-moz-focus-outer {\n  border: 0;\n}\n\n.form-range::-webkit-slider-thumb {\n  width: 1rem;\n  height: 1rem;\n  margin-top: -0.25rem;\n  background-color: #1a1a1a;\n  border: 0;\n  -webkit-transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n  transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n  -webkit-appearance: none;\n  appearance: none;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .form-range::-webkit-slider-thumb {\n    -webkit-transition: none;\n    transition: none;\n  }\n}\n\n.form-range::-webkit-slider-thumb:active {\n  background-color: #bababa;\n}\n\n.form-range::-webkit-slider-runnable-track {\n  width: 100%;\n  height: 0.5rem;\n  color: transparent;\n  cursor: pointer;\n  background-color: #eceeef;\n  border-color: transparent;\n}\n\n.form-range::-moz-range-thumb {\n  width: 1rem;\n  height: 1rem;\n  background-color: #1a1a1a;\n  border: 0;\n  -moz-transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n  transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n  -moz-appearance: none;\n  appearance: none;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .form-range::-moz-range-thumb {\n    -moz-transition: none;\n    transition: none;\n  }\n}\n\n.form-range::-moz-range-thumb:active {\n  background-color: #bababa;\n}\n\n.form-range::-moz-range-track {\n  width: 100%;\n  height: 0.5rem;\n  color: transparent;\n  cursor: pointer;\n  background-color: #eceeef;\n  border-color: transparent;\n}\n\n.form-range:disabled {\n  pointer-events: none;\n}\n\n.form-range:disabled::-webkit-slider-thumb {\n  background-color: #adb5bd;\n}\n\n.form-range:disabled::-moz-range-thumb {\n  background-color: #adb5bd;\n}\n\n.form-floating {\n  position: relative;\n}\n\n.form-floating > .form-control,\n.form-floating > .form-select {\n  height: 3.5rem;\n  line-height: 1.25;\n}\n\n.form-floating > label {\n  position: absolute;\n  top: 0;\n  left: 0;\n  height: 100%;\n  padding: 1rem 1.5rem;\n  pointer-events: none;\n  border: 0 solid transparent;\n  -webkit-transform-origin: 0 0;\n  transform-origin: 0 0;\n  transition: opacity 0.1s ease-in-out, -webkit-transform 0.1s ease-in-out;\n  transition: opacity 0.1s ease-in-out, transform 0.1s ease-in-out;\n  transition: opacity 0.1s ease-in-out, transform 0.1s ease-in-out, -webkit-transform 0.1s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .form-floating > label {\n    transition: none;\n  }\n}\n\n.form-floating > .form-control {\n  padding: 1rem 1.5rem;\n}\n\n.form-floating > .form-control::-webkit-input-placeholder {\n  color: transparent;\n}\n\n.form-floating > .form-control::-moz-placeholder {\n  color: transparent;\n}\n\n.form-floating > .form-control:-ms-input-placeholder {\n  color: transparent;\n}\n\n.form-floating > .form-control::-ms-input-placeholder {\n  color: transparent;\n}\n\n.form-floating > .form-control::placeholder {\n  color: transparent;\n}\n\n.form-floating > .form-control:not(:-moz-placeholder-shown) {\n  padding-top: 1.625rem;\n  padding-bottom: 0.625rem;\n}\n\n.form-floating > .form-control:not(:-ms-input-placeholder) {\n  padding-top: 1.625rem;\n  padding-bottom: 0.625rem;\n}\n\n.form-floating > .form-control:focus, .form-floating > .form-control:not(:placeholder-shown) {\n  padding-top: 1.625rem;\n  padding-bottom: 0.625rem;\n}\n\n.form-floating > .form-control:-webkit-autofill {\n  padding-top: 1.625rem;\n  padding-bottom: 0.625rem;\n}\n\n.form-floating > .form-select {\n  padding-top: 1.625rem;\n  padding-bottom: 0.625rem;\n}\n\n.form-floating > .form-control:not(:-moz-placeholder-shown) ~ label {\n  opacity: 0.65;\n  transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);\n}\n\n.form-floating > .form-control:not(:-ms-input-placeholder) ~ label {\n  opacity: 0.65;\n  transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);\n}\n\n.form-floating > .form-control:focus ~ label,\n.form-floating > .form-control:not(:placeholder-shown) ~ label,\n.form-floating > .form-select ~ label {\n  opacity: 0.65;\n  -webkit-transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);\n  transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);\n}\n\n.form-floating > .form-control:-webkit-autofill ~ label {\n  opacity: 0.65;\n  -webkit-transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);\n  transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);\n}\n\n.input-group {\n  position: relative;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n  flex-wrap: wrap;\n  -ms-flex-align: stretch;\n  align-items: stretch;\n  width: 100%;\n}\n\n.input-group > .form-control,\n.input-group > .form-select {\n  position: relative;\n  -ms-flex: 1 1 auto;\n  flex: 1 1 auto;\n  width: 1%;\n  min-width: 0;\n}\n\n.input-group > .form-control:focus,\n.input-group > .form-select:focus {\n  z-index: 3;\n}\n\n.input-group .btn {\n  position: relative;\n  z-index: 2;\n}\n\n.input-group .btn:focus {\n  z-index: 3;\n}\n\n.input-group-text {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-align: center;\n  align-items: center;\n  padding: 0.75rem 1.5rem;\n  font-size: 1rem;\n  font-weight: 400;\n  line-height: 1.5;\n  color: #55595c;\n  text-align: center;\n  white-space: nowrap;\n  background-color: #eceeef;\n  border: 0 solid #ced4da;\n}\n\n.input-group-lg > .form-control,\n.input-group-lg > .form-select,\n.input-group-lg > .input-group-text,\n.input-group-lg > .btn {\n  padding: 2rem 2rem;\n  font-size: 1.25rem;\n}\n\n.input-group-sm > .form-control,\n.input-group-sm > .form-select,\n.input-group-sm > .input-group-text,\n.input-group-sm > .btn {\n  padding: 0.5rem 1rem;\n  font-size: 0.875rem;\n}\n\n.input-group-lg > .form-select,\n.input-group-sm > .form-select {\n  padding-right: 6rem;\n}\n\n.input-group > :not(:first-child):not(.dropdown-menu):not(.valid-tooltip):not(.valid-feedback):not(.invalid-tooltip):not(.invalid-feedback) {\n  margin-left: 0;\n}\n\n.valid-feedback {\n  display: none;\n  width: 100%;\n  margin-top: 0.25rem;\n  font-size: 0.875em;\n  color: #4bbf73;\n}\n\n.valid-tooltip {\n  position: absolute;\n  top: 100%;\n  z-index: 5;\n  display: none;\n  max-width: 100%;\n  padding: 0.25rem 0.5rem;\n  margin-top: .1rem;\n  font-size: 0.875rem;\n  color: #fff;\n  background-color: rgba(75, 191, 115, 0.9);\n}\n\n.was-validated :valid ~ .valid-feedback,\n.was-validated :valid ~ .valid-tooltip,\n.is-valid ~ .valid-feedback,\n.is-valid ~ .valid-tooltip {\n  display: block;\n}\n\n.was-validated .form-control:valid, .form-control.is-valid {\n  border-color: #4bbf73;\n  padding-right: calc(1.5em + 1.5rem);\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%234bbf73' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e\");\n  background-repeat: no-repeat;\n  background-position: right calc(0.375em + 0.375rem) center;\n  background-size: calc(0.75em + 0.75rem) calc(0.75em + 0.75rem);\n}\n\n.was-validated .form-control:valid:focus, .form-control.is-valid:focus {\n  border-color: #4bbf73;\n  box-shadow: 0 0 0 0.25rem rgba(75, 191, 115, 0.25);\n}\n\n.was-validated textarea.form-control:valid, textarea.form-control.is-valid {\n  padding-right: calc(1.5em + 1.5rem);\n  background-position: top calc(0.375em + 0.375rem) right calc(0.375em + 0.375rem);\n}\n\n.was-validated .form-select:valid, .form-select.is-valid {\n  border-color: #4bbf73;\n}\n\n.was-validated .form-select:valid:not([multiple]):not([size]), .was-validated .form-select:valid:not([multiple])[size=\"1\"], .form-select.is-valid:not([multiple]):not([size]), .form-select.is-valid:not([multiple])[size=\"1\"] {\n  padding-right: 8.25rem;\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e\"), url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%234bbf73' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e\");\n  background-position: right 1.5rem center, center right 4.5rem;\n  background-size: 16px 12px, calc(0.75em + 0.75rem) calc(0.75em + 0.75rem);\n}\n\n.was-validated .form-select:valid:focus, .form-select.is-valid:focus {\n  border-color: #4bbf73;\n  box-shadow: 0 0 0 0.25rem rgba(75, 191, 115, 0.25);\n}\n\n.was-validated .form-check-input:valid, .form-check-input.is-valid {\n  border-color: #4bbf73;\n}\n\n.was-validated .form-check-input:valid:checked, .form-check-input.is-valid:checked {\n  background-color: #4bbf73;\n}\n\n.was-validated .form-check-input:valid:focus, .form-check-input.is-valid:focus {\n  box-shadow: 0 0 0 0.25rem rgba(75, 191, 115, 0.25);\n}\n\n.was-validated .form-check-input:valid ~ .form-check-label, .form-check-input.is-valid ~ .form-check-label {\n  color: #4bbf73;\n}\n\n.form-check-inline .form-check-input ~ .valid-feedback {\n  margin-left: .5em;\n}\n\n.was-validated .input-group .form-control:valid, .input-group .form-control.is-valid, .was-validated\n.input-group .form-select:valid,\n.input-group .form-select.is-valid {\n  z-index: 1;\n}\n\n.was-validated .input-group .form-control:valid:focus, .input-group .form-control.is-valid:focus, .was-validated\n.input-group .form-select:valid:focus,\n.input-group .form-select.is-valid:focus {\n  z-index: 3;\n}\n\n.invalid-feedback {\n  display: none;\n  width: 100%;\n  margin-top: 0.25rem;\n  font-size: 0.875em;\n  color: #d9534f;\n}\n\n.invalid-tooltip {\n  position: absolute;\n  top: 100%;\n  z-index: 5;\n  display: none;\n  max-width: 100%;\n  padding: 0.25rem 0.5rem;\n  margin-top: .1rem;\n  font-size: 0.875rem;\n  color: #fff;\n  background-color: rgba(217, 83, 79, 0.9);\n}\n\n.was-validated :invalid ~ .invalid-feedback,\n.was-validated :invalid ~ .invalid-tooltip,\n.is-invalid ~ .invalid-feedback,\n.is-invalid ~ .invalid-tooltip {\n  display: block;\n}\n\n.was-validated .form-control:invalid, .form-control.is-invalid {\n  border-color: #d9534f;\n  padding-right: calc(1.5em + 1.5rem);\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23d9534f'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23d9534f' stroke='none'/%3e%3c/svg%3e\");\n  background-repeat: no-repeat;\n  background-position: right calc(0.375em + 0.375rem) center;\n  background-size: calc(0.75em + 0.75rem) calc(0.75em + 0.75rem);\n}\n\n.was-validated .form-control:invalid:focus, .form-control.is-invalid:focus {\n  border-color: #d9534f;\n  box-shadow: 0 0 0 0.25rem rgba(217, 83, 79, 0.25);\n}\n\n.was-validated textarea.form-control:invalid, textarea.form-control.is-invalid {\n  padding-right: calc(1.5em + 1.5rem);\n  background-position: top calc(0.375em + 0.375rem) right calc(0.375em + 0.375rem);\n}\n\n.was-validated .form-select:invalid, .form-select.is-invalid {\n  border-color: #d9534f;\n}\n\n.was-validated .form-select:invalid:not([multiple]):not([size]), .was-validated .form-select:invalid:not([multiple])[size=\"1\"], .form-select.is-invalid:not([multiple]):not([size]), .form-select.is-invalid:not([multiple])[size=\"1\"] {\n  padding-right: 8.25rem;\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e\"), url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23d9534f'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23d9534f' stroke='none'/%3e%3c/svg%3e\");\n  background-position: right 1.5rem center, center right 4.5rem;\n  background-size: 16px 12px, calc(0.75em + 0.75rem) calc(0.75em + 0.75rem);\n}\n\n.was-validated .form-select:invalid:focus, .form-select.is-invalid:focus {\n  border-color: #d9534f;\n  box-shadow: 0 0 0 0.25rem rgba(217, 83, 79, 0.25);\n}\n\n.was-validated .form-check-input:invalid, .form-check-input.is-invalid {\n  border-color: #d9534f;\n}\n\n.was-validated .form-check-input:invalid:checked, .form-check-input.is-invalid:checked {\n  background-color: #d9534f;\n}\n\n.was-validated .form-check-input:invalid:focus, .form-check-input.is-invalid:focus {\n  box-shadow: 0 0 0 0.25rem rgba(217, 83, 79, 0.25);\n}\n\n.was-validated .form-check-input:invalid ~ .form-check-label, .form-check-input.is-invalid ~ .form-check-label {\n  color: #d9534f;\n}\n\n.form-check-inline .form-check-input ~ .invalid-feedback {\n  margin-left: .5em;\n}\n\n.was-validated .input-group .form-control:invalid, .input-group .form-control.is-invalid, .was-validated\n.input-group .form-select:invalid,\n.input-group .form-select.is-invalid {\n  z-index: 2;\n}\n\n.was-validated .input-group .form-control:invalid:focus, .input-group .form-control.is-invalid:focus, .was-validated\n.input-group .form-select:invalid:focus,\n.input-group .form-select.is-invalid:focus {\n  z-index: 3;\n}\n\n.btn {\n  display: inline-block;\n  font-weight: 600;\n  line-height: 1.5rem;\n  color: #55595c;\n  text-align: center;\n  text-decoration: none;\n  vertical-align: middle;\n  cursor: pointer;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  user-select: none;\n  background-color: transparent;\n  border: 0 solid transparent;\n  padding: 0.75rem 1.5rem;\n  font-size: 1rem;\n  border-radius: 0;\n  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .btn {\n    transition: none;\n  }\n}\n\n.btn:hover {\n  color: #55595c;\n}\n\n.btn-check:focus + .btn, .btn:focus {\n  outline: 0;\n  box-shadow: 0 0 0 0.25rem rgba(26, 26, 26, 0.25);\n}\n\n.btn:disabled, .btn.disabled,\nfieldset:disabled .btn {\n  pointer-events: none;\n  opacity: 0.65;\n}\n\n.btn-primary {\n  color: #fff;\n  background-color: #1a1a1a;\n  border-color: #1a1a1a;\n}\n\n.btn-primary:hover {\n  color: #fff;\n  background-color: #161616;\n  border-color: #151515;\n}\n\n.btn-check:focus + .btn-primary, .btn-primary:focus {\n  color: #fff;\n  background-color: #161616;\n  border-color: #151515;\n  box-shadow: 0 0 0 0.25rem rgba(60, 60, 60, 0.5);\n}\n\n.btn-check:checked + .btn-primary,\n.btn-check:active + .btn-primary, .btn-primary:active, .btn-primary.active,\n.show > .btn-primary.dropdown-toggle {\n  color: #fff;\n  background-color: #151515;\n  border-color: #141414;\n}\n\n.btn-check:checked + .btn-primary:focus,\n.btn-check:active + .btn-primary:focus, .btn-primary:active:focus, .btn-primary.active:focus,\n.show > .btn-primary.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.25rem rgba(60, 60, 60, 0.5);\n}\n\n.btn-primary:disabled, .btn-primary.disabled {\n  color: #fff;\n  background-color: #1a1a1a;\n  border-color: #1a1a1a;\n}\n\n.btn-secondary {\n  color: #000;\n  background-color: #fff;\n  border-color: #fff;\n}\n\n.btn-secondary:hover {\n  color: #000;\n  background-color: white;\n  border-color: white;\n}\n\n.btn-check:focus + .btn-secondary, .btn-secondary:focus {\n  color: #000;\n  background-color: white;\n  border-color: white;\n  box-shadow: 0 0 0 0.25rem rgba(217, 217, 217, 0.5);\n}\n\n.btn-check:checked + .btn-secondary,\n.btn-check:active + .btn-secondary, .btn-secondary:active, .btn-secondary.active,\n.show > .btn-secondary.dropdown-toggle {\n  color: #000;\n  background-color: white;\n  border-color: white;\n}\n\n.btn-check:checked + .btn-secondary:focus,\n.btn-check:active + .btn-secondary:focus, .btn-secondary:active:focus, .btn-secondary.active:focus,\n.show > .btn-secondary.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.25rem rgba(217, 217, 217, 0.5);\n}\n\n.btn-secondary:disabled, .btn-secondary.disabled {\n  color: #000;\n  background-color: #fff;\n  border-color: #fff;\n}\n\n.btn-success {\n  color: #fff;\n  background-color: #4bbf73;\n  border-color: #4bbf73;\n}\n\n.btn-success:hover {\n  color: #fff;\n  background-color: #40a262;\n  border-color: #3c995c;\n}\n\n.btn-check:focus + .btn-success, .btn-success:focus {\n  color: #fff;\n  background-color: #40a262;\n  border-color: #3c995c;\n  box-shadow: 0 0 0 0.25rem rgba(102, 201, 136, 0.5);\n}\n\n.btn-check:checked + .btn-success,\n.btn-check:active + .btn-success, .btn-success:active, .btn-success.active,\n.show > .btn-success.dropdown-toggle {\n  color: #fff;\n  background-color: #3c995c;\n  border-color: #388f56;\n}\n\n.btn-check:checked + .btn-success:focus,\n.btn-check:active + .btn-success:focus, .btn-success:active:focus, .btn-success.active:focus,\n.show > .btn-success.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.25rem rgba(102, 201, 136, 0.5);\n}\n\n.btn-success:disabled, .btn-success.disabled {\n  color: #fff;\n  background-color: #4bbf73;\n  border-color: #4bbf73;\n}\n\n.btn-info {\n  color: #fff;\n  background-color: #1f9bcf;\n  border-color: #1f9bcf;\n}\n\n.btn-info:hover {\n  color: #fff;\n  background-color: #1a84b0;\n  border-color: #197ca6;\n}\n\n.btn-check:focus + .btn-info, .btn-info:focus {\n  color: #fff;\n  background-color: #1a84b0;\n  border-color: #197ca6;\n  box-shadow: 0 0 0 0.25rem rgba(65, 170, 214, 0.5);\n}\n\n.btn-check:checked + .btn-info,\n.btn-check:active + .btn-info, .btn-info:active, .btn-info.active,\n.show > .btn-info.dropdown-toggle {\n  color: #fff;\n  background-color: #197ca6;\n  border-color: #17749b;\n}\n\n.btn-check:checked + .btn-info:focus,\n.btn-check:active + .btn-info:focus, .btn-info:active:focus, .btn-info.active:focus,\n.show > .btn-info.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.25rem rgba(65, 170, 214, 0.5);\n}\n\n.btn-info:disabled, .btn-info.disabled {\n  color: #fff;\n  background-color: #1f9bcf;\n  border-color: #1f9bcf;\n}\n\n.btn-warning {\n  color: #000;\n  background-color: #f0ad4e;\n  border-color: #f0ad4e;\n}\n\n.btn-warning:hover {\n  color: #000;\n  background-color: #f2b969;\n  border-color: #f2b560;\n}\n\n.btn-check:focus + .btn-warning, .btn-warning:focus {\n  color: #000;\n  background-color: #f2b969;\n  border-color: #f2b560;\n  box-shadow: 0 0 0 0.25rem rgba(204, 147, 66, 0.5);\n}\n\n.btn-check:checked + .btn-warning,\n.btn-check:active + .btn-warning, .btn-warning:active, .btn-warning.active,\n.show > .btn-warning.dropdown-toggle {\n  color: #000;\n  background-color: #f3bd71;\n  border-color: #f2b560;\n}\n\n.btn-check:checked + .btn-warning:focus,\n.btn-check:active + .btn-warning:focus, .btn-warning:active:focus, .btn-warning.active:focus,\n.show > .btn-warning.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.25rem rgba(204, 147, 66, 0.5);\n}\n\n.btn-warning:disabled, .btn-warning.disabled {\n  color: #000;\n  background-color: #f0ad4e;\n  border-color: #f0ad4e;\n}\n\n.btn-danger {\n  color: #fff;\n  background-color: #d9534f;\n  border-color: #d9534f;\n}\n\n.btn-danger:hover {\n  color: #fff;\n  background-color: #b84743;\n  border-color: #ae423f;\n}\n\n.btn-check:focus + .btn-danger, .btn-danger:focus {\n  color: #fff;\n  background-color: #b84743;\n  border-color: #ae423f;\n  box-shadow: 0 0 0 0.25rem rgba(223, 109, 105, 0.5);\n}\n\n.btn-check:checked + .btn-danger,\n.btn-check:active + .btn-danger, .btn-danger:active, .btn-danger.active,\n.show > .btn-danger.dropdown-toggle {\n  color: #fff;\n  background-color: #ae423f;\n  border-color: #a33e3b;\n}\n\n.btn-check:checked + .btn-danger:focus,\n.btn-check:active + .btn-danger:focus, .btn-danger:active:focus, .btn-danger.active:focus,\n.show > .btn-danger.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.25rem rgba(223, 109, 105, 0.5);\n}\n\n.btn-danger:disabled, .btn-danger.disabled {\n  color: #fff;\n  background-color: #d9534f;\n  border-color: #d9534f;\n}\n\n.btn-light {\n  color: #000;\n  background-color: #fff;\n  border-color: #fff;\n}\n\n.btn-light:hover {\n  color: #000;\n  background-color: white;\n  border-color: white;\n}\n\n.btn-check:focus + .btn-light, .btn-light:focus {\n  color: #000;\n  background-color: white;\n  border-color: white;\n  box-shadow: 0 0 0 0.25rem rgba(217, 217, 217, 0.5);\n}\n\n.btn-check:checked + .btn-light,\n.btn-check:active + .btn-light, .btn-light:active, .btn-light.active,\n.show > .btn-light.dropdown-toggle {\n  color: #000;\n  background-color: white;\n  border-color: white;\n}\n\n.btn-check:checked + .btn-light:focus,\n.btn-check:active + .btn-light:focus, .btn-light:active:focus, .btn-light.active:focus,\n.show > .btn-light.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.25rem rgba(217, 217, 217, 0.5);\n}\n\n.btn-light:disabled, .btn-light.disabled {\n  color: #000;\n  background-color: #fff;\n  border-color: #fff;\n}\n\n.btn-dark {\n  color: #fff;\n  background-color: #343a40;\n  border-color: #343a40;\n}\n\n.btn-dark:hover {\n  color: #fff;\n  background-color: #2c3136;\n  border-color: #2a2e33;\n}\n\n.btn-check:focus + .btn-dark, .btn-dark:focus {\n  color: #fff;\n  background-color: #2c3136;\n  border-color: #2a2e33;\n  box-shadow: 0 0 0 0.25rem rgba(82, 88, 93, 0.5);\n}\n\n.btn-check:checked + .btn-dark,\n.btn-check:active + .btn-dark, .btn-dark:active, .btn-dark.active,\n.show > .btn-dark.dropdown-toggle {\n  color: #fff;\n  background-color: #2a2e33;\n  border-color: #272c30;\n}\n\n.btn-check:checked + .btn-dark:focus,\n.btn-check:active + .btn-dark:focus, .btn-dark:active:focus, .btn-dark.active:focus,\n.show > .btn-dark.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.25rem rgba(82, 88, 93, 0.5);\n}\n\n.btn-dark:disabled, .btn-dark.disabled {\n  color: #fff;\n  background-color: #343a40;\n  border-color: #343a40;\n}\n\n.btn-outline-primary {\n  color: #1a1a1a;\n  border-color: #1a1a1a;\n}\n\n.btn-outline-primary:hover {\n  color: #fff;\n  background-color: #1a1a1a;\n  border-color: #1a1a1a;\n}\n\n.btn-check:focus + .btn-outline-primary, .btn-outline-primary:focus {\n  box-shadow: 0 0 0 0.25rem rgba(26, 26, 26, 0.5);\n}\n\n.btn-check:checked + .btn-outline-primary,\n.btn-check:active + .btn-outline-primary, .btn-outline-primary:active, .btn-outline-primary.active, .btn-outline-primary.dropdown-toggle.show {\n  color: #fff;\n  background-color: #1a1a1a;\n  border-color: #1a1a1a;\n}\n\n.btn-check:checked + .btn-outline-primary:focus,\n.btn-check:active + .btn-outline-primary:focus, .btn-outline-primary:active:focus, .btn-outline-primary.active:focus, .btn-outline-primary.dropdown-toggle.show:focus {\n  box-shadow: 0 0 0 0.25rem rgba(26, 26, 26, 0.5);\n}\n\n.btn-outline-primary:disabled, .btn-outline-primary.disabled {\n  color: #1a1a1a;\n  background-color: transparent;\n}\n\n.btn-outline-secondary {\n  color: #fff;\n  border-color: #fff;\n}\n\n.btn-outline-secondary:hover {\n  color: #000;\n  background-color: #fff;\n  border-color: #fff;\n}\n\n.btn-check:focus + .btn-outline-secondary, .btn-outline-secondary:focus {\n  box-shadow: 0 0 0 0.25rem rgba(255, 255, 255, 0.5);\n}\n\n.btn-check:checked + .btn-outline-secondary,\n.btn-check:active + .btn-outline-secondary, .btn-outline-secondary:active, .btn-outline-secondary.active, .btn-outline-secondary.dropdown-toggle.show {\n  color: #000;\n  background-color: #fff;\n  border-color: #fff;\n}\n\n.btn-check:checked + .btn-outline-secondary:focus,\n.btn-check:active + .btn-outline-secondary:focus, .btn-outline-secondary:active:focus, .btn-outline-secondary.active:focus, .btn-outline-secondary.dropdown-toggle.show:focus {\n  box-shadow: 0 0 0 0.25rem rgba(255, 255, 255, 0.5);\n}\n\n.btn-outline-secondary:disabled, .btn-outline-secondary.disabled {\n  color: #fff;\n  background-color: transparent;\n}\n\n.btn-outline-success {\n  color: #4bbf73;\n  border-color: #4bbf73;\n}\n\n.btn-outline-success:hover {\n  color: #fff;\n  background-color: #4bbf73;\n  border-color: #4bbf73;\n}\n\n.btn-check:focus + .btn-outline-success, .btn-outline-success:focus {\n  box-shadow: 0 0 0 0.25rem rgba(75, 191, 115, 0.5);\n}\n\n.btn-check:checked + .btn-outline-success,\n.btn-check:active + .btn-outline-success, .btn-outline-success:active, .btn-outline-success.active, .btn-outline-success.dropdown-toggle.show {\n  color: #fff;\n  background-color: #4bbf73;\n  border-color: #4bbf73;\n}\n\n.btn-check:checked + .btn-outline-success:focus,\n.btn-check:active + .btn-outline-success:focus, .btn-outline-success:active:focus, .btn-outline-success.active:focus, .btn-outline-success.dropdown-toggle.show:focus {\n  box-shadow: 0 0 0 0.25rem rgba(75, 191, 115, 0.5);\n}\n\n.btn-outline-success:disabled, .btn-outline-success.disabled {\n  color: #4bbf73;\n  background-color: transparent;\n}\n\n.btn-outline-info {\n  color: #1f9bcf;\n  border-color: #1f9bcf;\n}\n\n.btn-outline-info:hover {\n  color: #fff;\n  background-color: #1f9bcf;\n  border-color: #1f9bcf;\n}\n\n.btn-check:focus + .btn-outline-info, .btn-outline-info:focus {\n  box-shadow: 0 0 0 0.25rem rgba(31, 155, 207, 0.5);\n}\n\n.btn-check:checked + .btn-outline-info,\n.btn-check:active + .btn-outline-info, .btn-outline-info:active, .btn-outline-info.active, .btn-outline-info.dropdown-toggle.show {\n  color: #fff;\n  background-color: #1f9bcf;\n  border-color: #1f9bcf;\n}\n\n.btn-check:checked + .btn-outline-info:focus,\n.btn-check:active + .btn-outline-info:focus, .btn-outline-info:active:focus, .btn-outline-info.active:focus, .btn-outline-info.dropdown-toggle.show:focus {\n  box-shadow: 0 0 0 0.25rem rgba(31, 155, 207, 0.5);\n}\n\n.btn-outline-info:disabled, .btn-outline-info.disabled {\n  color: #1f9bcf;\n  background-color: transparent;\n}\n\n.btn-outline-warning {\n  color: #f0ad4e;\n  border-color: #f0ad4e;\n}\n\n.btn-outline-warning:hover {\n  color: #000;\n  background-color: #f0ad4e;\n  border-color: #f0ad4e;\n}\n\n.btn-check:focus + .btn-outline-warning, .btn-outline-warning:focus {\n  box-shadow: 0 0 0 0.25rem rgba(240, 173, 78, 0.5);\n}\n\n.btn-check:checked + .btn-outline-warning,\n.btn-check:active + .btn-outline-warning, .btn-outline-warning:active, .btn-outline-warning.active, .btn-outline-warning.dropdown-toggle.show {\n  color: #000;\n  background-color: #f0ad4e;\n  border-color: #f0ad4e;\n}\n\n.btn-check:checked + .btn-outline-warning:focus,\n.btn-check:active + .btn-outline-warning:focus, .btn-outline-warning:active:focus, .btn-outline-warning.active:focus, .btn-outline-warning.dropdown-toggle.show:focus {\n  box-shadow: 0 0 0 0.25rem rgba(240, 173, 78, 0.5);\n}\n\n.btn-outline-warning:disabled, .btn-outline-warning.disabled {\n  color: #f0ad4e;\n  background-color: transparent;\n}\n\n.btn-outline-danger {\n  color: #d9534f;\n  border-color: #d9534f;\n}\n\n.btn-outline-danger:hover {\n  color: #fff;\n  background-color: #d9534f;\n  border-color: #d9534f;\n}\n\n.btn-check:focus + .btn-outline-danger, .btn-outline-danger:focus {\n  box-shadow: 0 0 0 0.25rem rgba(217, 83, 79, 0.5);\n}\n\n.btn-check:checked + .btn-outline-danger,\n.btn-check:active + .btn-outline-danger, .btn-outline-danger:active, .btn-outline-danger.active, .btn-outline-danger.dropdown-toggle.show {\n  color: #fff;\n  background-color: #d9534f;\n  border-color: #d9534f;\n}\n\n.btn-check:checked + .btn-outline-danger:focus,\n.btn-check:active + .btn-outline-danger:focus, .btn-outline-danger:active:focus, .btn-outline-danger.active:focus, .btn-outline-danger.dropdown-toggle.show:focus {\n  box-shadow: 0 0 0 0.25rem rgba(217, 83, 79, 0.5);\n}\n\n.btn-outline-danger:disabled, .btn-outline-danger.disabled {\n  color: #d9534f;\n  background-color: transparent;\n}\n\n.btn-outline-light {\n  color: #fff;\n  border-color: #fff;\n}\n\n.btn-outline-light:hover {\n  color: #000;\n  background-color: #fff;\n  border-color: #fff;\n}\n\n.btn-check:focus + .btn-outline-light, .btn-outline-light:focus {\n  box-shadow: 0 0 0 0.25rem rgba(255, 255, 255, 0.5);\n}\n\n.btn-check:checked + .btn-outline-light,\n.btn-check:active + .btn-outline-light, .btn-outline-light:active, .btn-outline-light.active, .btn-outline-light.dropdown-toggle.show {\n  color: #000;\n  background-color: #fff;\n  border-color: #fff;\n}\n\n.btn-check:checked + .btn-outline-light:focus,\n.btn-check:active + .btn-outline-light:focus, .btn-outline-light:active:focus, .btn-outline-light.active:focus, .btn-outline-light.dropdown-toggle.show:focus {\n  box-shadow: 0 0 0 0.25rem rgba(255, 255, 255, 0.5);\n}\n\n.btn-outline-light:disabled, .btn-outline-light.disabled {\n  color: #fff;\n  background-color: transparent;\n}\n\n.btn-outline-dark {\n  color: #343a40;\n  border-color: #343a40;\n}\n\n.btn-outline-dark:hover {\n  color: #fff;\n  background-color: #343a40;\n  border-color: #343a40;\n}\n\n.btn-check:focus + .btn-outline-dark, .btn-outline-dark:focus {\n  box-shadow: 0 0 0 0.25rem rgba(52, 58, 64, 0.5);\n}\n\n.btn-check:checked + .btn-outline-dark,\n.btn-check:active + .btn-outline-dark, .btn-outline-dark:active, .btn-outline-dark.active, .btn-outline-dark.dropdown-toggle.show {\n  color: #fff;\n  background-color: #343a40;\n  border-color: #343a40;\n}\n\n.btn-check:checked + .btn-outline-dark:focus,\n.btn-check:active + .btn-outline-dark:focus, .btn-outline-dark:active:focus, .btn-outline-dark.active:focus, .btn-outline-dark.dropdown-toggle.show:focus {\n  box-shadow: 0 0 0 0.25rem rgba(52, 58, 64, 0.5);\n}\n\n.btn-outline-dark:disabled, .btn-outline-dark.disabled {\n  color: #343a40;\n  background-color: transparent;\n}\n\n.btn-link {\n  font-weight: 400;\n  color: #1a1a1a;\n  text-decoration: underline;\n}\n\n.btn-link:hover {\n  color: #151515;\n}\n\n.btn-link:disabled, .btn-link.disabled {\n  color: #919aa1;\n}\n\n.btn-lg, .btn-group-lg > .btn {\n  padding: 2rem 2rem;\n  font-size: 1.25rem;\n  border-radius: 0;\n}\n\n.btn-sm, .btn-group-sm > .btn {\n  padding: 0.5rem 1rem;\n  font-size: 0.875rem;\n  border-radius: 0;\n}\n\n.fade {\n  transition: opacity 0.15s linear;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .fade {\n    transition: none;\n  }\n}\n\n.fade:not(.show) {\n  opacity: 0;\n}\n\n.collapse:not(.show) {\n  display: none;\n}\n\n.collapsing {\n  height: 0;\n  overflow: hidden;\n  transition: height 0.35s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .collapsing {\n    transition: none;\n  }\n}\n\n.collapsing.collapse-horizontal {\n  width: 0;\n  height: auto;\n  transition: width 0.35s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .collapsing.collapse-horizontal {\n    transition: none;\n  }\n}\n\n.dropup,\n.dropend,\n.dropdown,\n.dropstart {\n  position: relative;\n}\n\n.dropdown-toggle {\n  white-space: nowrap;\n}\n\n.dropdown-toggle::after {\n  display: inline-block;\n  margin-left: 0.255em;\n  vertical-align: 0.255em;\n  content: \"\";\n  border-top: 0.3em solid;\n  border-right: 0.3em solid transparent;\n  border-bottom: 0;\n  border-left: 0.3em solid transparent;\n}\n\n.dropdown-toggle:empty::after {\n  margin-left: 0;\n}\n\n.dropdown-menu {\n  position: absolute;\n  z-index: 1000;\n  display: none;\n  min-width: 10rem;\n  padding: 0.5rem 0;\n  margin: 0;\n  font-size: 1rem;\n  color: #55595c;\n  text-align: left;\n  list-style: none;\n  background-color: #fff;\n  background-clip: padding-box;\n  border: 1px solid rgba(0, 0, 0, 0.15);\n}\n\n.dropdown-menu[data-bs-popper] {\n  top: 100%;\n  left: 0;\n  margin-top: 0.125rem;\n}\n\n.dropdown-menu-start {\n  --bs-position: start;\n}\n\n.dropdown-menu-start[data-bs-popper] {\n  right: auto;\n  left: 0;\n}\n\n.dropdown-menu-end {\n  --bs-position: end;\n}\n\n.dropdown-menu-end[data-bs-popper] {\n  right: 0;\n  left: auto;\n}\n\n@media (min-width: 576px) {\n  .dropdown-menu-sm-start {\n    --bs-position: start;\n  }\n  .dropdown-menu-sm-start[data-bs-popper] {\n    right: auto;\n    left: 0;\n  }\n  .dropdown-menu-sm-end {\n    --bs-position: end;\n  }\n  .dropdown-menu-sm-end[data-bs-popper] {\n    right: 0;\n    left: auto;\n  }\n}\n\n@media (min-width: 768px) {\n  .dropdown-menu-md-start {\n    --bs-position: start;\n  }\n  .dropdown-menu-md-start[data-bs-popper] {\n    right: auto;\n    left: 0;\n  }\n  .dropdown-menu-md-end {\n    --bs-position: end;\n  }\n  .dropdown-menu-md-end[data-bs-popper] {\n    right: 0;\n    left: auto;\n  }\n}\n\n@media (min-width: 992px) {\n  .dropdown-menu-lg-start {\n    --bs-position: start;\n  }\n  .dropdown-menu-lg-start[data-bs-popper] {\n    right: auto;\n    left: 0;\n  }\n  .dropdown-menu-lg-end {\n    --bs-position: end;\n  }\n  .dropdown-menu-lg-end[data-bs-popper] {\n    right: 0;\n    left: auto;\n  }\n}\n\n@media (min-width: 1200px) {\n  .dropdown-menu-xl-start {\n    --bs-position: start;\n  }\n  .dropdown-menu-xl-start[data-bs-popper] {\n    right: auto;\n    left: 0;\n  }\n  .dropdown-menu-xl-end {\n    --bs-position: end;\n  }\n  .dropdown-menu-xl-end[data-bs-popper] {\n    right: 0;\n    left: auto;\n  }\n}\n\n@media (min-width: 1400px) {\n  .dropdown-menu-xxl-start {\n    --bs-position: start;\n  }\n  .dropdown-menu-xxl-start[data-bs-popper] {\n    right: auto;\n    left: 0;\n  }\n  .dropdown-menu-xxl-end {\n    --bs-position: end;\n  }\n  .dropdown-menu-xxl-end[data-bs-popper] {\n    right: 0;\n    left: auto;\n  }\n}\n\n.dropup .dropdown-menu[data-bs-popper] {\n  top: auto;\n  bottom: 100%;\n  margin-top: 0;\n  margin-bottom: 0.125rem;\n}\n\n.dropup .dropdown-toggle::after {\n  display: inline-block;\n  margin-left: 0.255em;\n  vertical-align: 0.255em;\n  content: \"\";\n  border-top: 0;\n  border-right: 0.3em solid transparent;\n  border-bottom: 0.3em solid;\n  border-left: 0.3em solid transparent;\n}\n\n.dropup .dropdown-toggle:empty::after {\n  margin-left: 0;\n}\n\n.dropend .dropdown-menu[data-bs-popper] {\n  top: 0;\n  right: auto;\n  left: 100%;\n  margin-top: 0;\n  margin-left: 0.125rem;\n}\n\n.dropend .dropdown-toggle::after {\n  display: inline-block;\n  margin-left: 0.255em;\n  vertical-align: 0.255em;\n  content: \"\";\n  border-top: 0.3em solid transparent;\n  border-right: 0;\n  border-bottom: 0.3em solid transparent;\n  border-left: 0.3em solid;\n}\n\n.dropend .dropdown-toggle:empty::after {\n  margin-left: 0;\n}\n\n.dropend .dropdown-toggle::after {\n  vertical-align: 0;\n}\n\n.dropstart .dropdown-menu[data-bs-popper] {\n  top: 0;\n  right: 100%;\n  left: auto;\n  margin-top: 0;\n  margin-right: 0.125rem;\n}\n\n.dropstart .dropdown-toggle::after {\n  display: inline-block;\n  margin-left: 0.255em;\n  vertical-align: 0.255em;\n  content: \"\";\n}\n\n.dropstart .dropdown-toggle::after {\n  display: none;\n}\n\n.dropstart .dropdown-toggle::before {\n  display: inline-block;\n  margin-right: 0.255em;\n  vertical-align: 0.255em;\n  content: \"\";\n  border-top: 0.3em solid transparent;\n  border-right: 0.3em solid;\n  border-bottom: 0.3em solid transparent;\n}\n\n.dropstart .dropdown-toggle:empty::after {\n  margin-left: 0;\n}\n\n.dropstart .dropdown-toggle::before {\n  vertical-align: 0;\n}\n\n.dropdown-divider {\n  height: 0;\n  margin: 0.5rem 0;\n  overflow: hidden;\n  border-top: 1px solid rgba(0, 0, 0, 0.15);\n}\n\n.dropdown-item {\n  display: block;\n  width: 100%;\n  padding: 0.25rem 1rem;\n  clear: both;\n  font-weight: 400;\n  color: #1a1a1a;\n  text-align: inherit;\n  text-decoration: none;\n  white-space: nowrap;\n  background-color: transparent;\n  border: 0;\n}\n\n.dropdown-item:hover, .dropdown-item:focus {\n  color: #171717;\n  background-color: #f7f7f9;\n}\n\n.dropdown-item.active, .dropdown-item:active {\n  color: #fff;\n  text-decoration: none;\n  background-color: #1a1a1a;\n}\n\n.dropdown-item.disabled, .dropdown-item:disabled {\n  color: #adb5bd;\n  pointer-events: none;\n  background-color: transparent;\n}\n\n.dropdown-menu.show {\n  display: block;\n}\n\n.dropdown-header {\n  display: block;\n  padding: 0.5rem 1rem;\n  margin-bottom: 0;\n  font-size: 0.875rem;\n  color: #919aa1;\n  white-space: nowrap;\n}\n\n.dropdown-item-text {\n  display: block;\n  padding: 0.25rem 1rem;\n  color: #1a1a1a;\n}\n\n.dropdown-menu-dark {\n  color: #eceeef;\n  background-color: #343a40;\n  border-color: rgba(0, 0, 0, 0.15);\n}\n\n.dropdown-menu-dark .dropdown-item {\n  color: #eceeef;\n}\n\n.dropdown-menu-dark .dropdown-item:hover, .dropdown-menu-dark .dropdown-item:focus {\n  color: #fff;\n  background-color: rgba(255, 255, 255, 0.15);\n}\n\n.dropdown-menu-dark .dropdown-item.active, .dropdown-menu-dark .dropdown-item:active {\n  color: #fff;\n  background-color: #1a1a1a;\n}\n\n.dropdown-menu-dark .dropdown-item.disabled, .dropdown-menu-dark .dropdown-item:disabled {\n  color: #adb5bd;\n}\n\n.dropdown-menu-dark .dropdown-divider {\n  border-color: rgba(0, 0, 0, 0.15);\n}\n\n.dropdown-menu-dark .dropdown-item-text {\n  color: #eceeef;\n}\n\n.dropdown-menu-dark .dropdown-header {\n  color: #adb5bd;\n}\n\n.btn-group,\n.btn-group-vertical {\n  position: relative;\n  display: -ms-inline-flexbox;\n  display: inline-flex;\n  vertical-align: middle;\n}\n\n.btn-group > .btn,\n.btn-group-vertical > .btn {\n  position: relative;\n  -ms-flex: 1 1 auto;\n  flex: 1 1 auto;\n}\n\n.btn-group > .btn-check:checked + .btn,\n.btn-group > .btn-check:focus + .btn,\n.btn-group > .btn:hover,\n.btn-group > .btn:focus,\n.btn-group > .btn:active,\n.btn-group > .btn.active,\n.btn-group-vertical > .btn-check:checked + .btn,\n.btn-group-vertical > .btn-check:focus + .btn,\n.btn-group-vertical > .btn:hover,\n.btn-group-vertical > .btn:focus,\n.btn-group-vertical > .btn:active,\n.btn-group-vertical > .btn.active {\n  z-index: 1;\n}\n\n.btn-toolbar {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n  flex-wrap: wrap;\n  -ms-flex-pack: start;\n  justify-content: flex-start;\n}\n\n.btn-toolbar .input-group {\n  width: auto;\n}\n\n.btn-group > .btn:not(:first-child),\n.btn-group > .btn-group:not(:first-child) {\n  margin-left: 0;\n}\n\n.dropdown-toggle-split {\n  padding-right: 1.125rem;\n  padding-left: 1.125rem;\n}\n\n.dropdown-toggle-split::after,\n.dropup .dropdown-toggle-split::after,\n.dropend .dropdown-toggle-split::after {\n  margin-left: 0;\n}\n\n.dropstart .dropdown-toggle-split::before {\n  margin-right: 0;\n}\n\n.btn-sm + .dropdown-toggle-split, .btn-group-sm > .btn + .dropdown-toggle-split {\n  padding-right: 0.75rem;\n  padding-left: 0.75rem;\n}\n\n.btn-lg + .dropdown-toggle-split, .btn-group-lg > .btn + .dropdown-toggle-split {\n  padding-right: 1.5rem;\n  padding-left: 1.5rem;\n}\n\n.btn-group-vertical {\n  -ms-flex-direction: column;\n  flex-direction: column;\n  -ms-flex-align: start;\n  align-items: flex-start;\n  -ms-flex-pack: center;\n  justify-content: center;\n}\n\n.btn-group-vertical > .btn,\n.btn-group-vertical > .btn-group {\n  width: 100%;\n}\n\n.btn-group-vertical > .btn:not(:first-child),\n.btn-group-vertical > .btn-group:not(:first-child) {\n  margin-top: 0;\n}\n\n.nav {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n  flex-wrap: wrap;\n  padding-left: 0;\n  margin-bottom: 0;\n  list-style: none;\n}\n\n.nav-link {\n  display: block;\n  padding: 0.5rem 1rem;\n  color: #1a1a1a;\n  text-decoration: none;\n  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .nav-link {\n    transition: none;\n  }\n}\n\n.nav-link:hover, .nav-link:focus {\n  color: #151515;\n}\n\n.nav-link.disabled {\n  color: #919aa1;\n  pointer-events: none;\n  cursor: default;\n}\n\n.nav-tabs {\n  border-bottom: 1px solid #eceeef;\n}\n\n.nav-tabs .nav-link {\n  margin-bottom: -1px;\n  background: none;\n  border: 1px solid transparent;\n}\n\n.nav-tabs .nav-link:hover, .nav-tabs .nav-link:focus {\n  border-color: #f7f7f9 #f7f7f9 #eceeef;\n  isolation: isolate;\n}\n\n.nav-tabs .nav-link.disabled {\n  color: #919aa1;\n  background-color: transparent;\n  border-color: transparent;\n}\n\n.nav-tabs .nav-link.active,\n.nav-tabs .nav-item.show .nav-link {\n  color: #55595c;\n  background-color: #fff;\n  border-color: #eceeef #eceeef #fff;\n}\n\n.nav-tabs .dropdown-menu {\n  margin-top: -1px;\n}\n\n.nav-pills .nav-link {\n  background: none;\n  border: 0;\n}\n\n.nav-pills .nav-link.active,\n.nav-pills .show > .nav-link {\n  color: #fff;\n  background-color: #1a1a1a;\n}\n\n.nav-fill > .nav-link,\n.nav-fill .nav-item {\n  -ms-flex: 1 1 auto;\n  flex: 1 1 auto;\n  text-align: center;\n}\n\n.nav-justified > .nav-link,\n.nav-justified .nav-item {\n  -ms-flex-preferred-size: 0;\n  flex-basis: 0;\n  -ms-flex-positive: 1;\n  flex-grow: 1;\n  text-align: center;\n}\n\n.nav-fill .nav-item .nav-link,\n.nav-justified .nav-item .nav-link {\n  width: 100%;\n}\n\n.tab-content > .tab-pane {\n  display: none;\n}\n\n.tab-content > .active {\n  display: block;\n}\n\n.navbar {\n  position: relative;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n  flex-wrap: wrap;\n  -ms-flex-align: center;\n  align-items: center;\n  -ms-flex-pack: justify;\n  justify-content: space-between;\n  padding-top: 1.5rem;\n  padding-bottom: 1.5rem;\n}\n\n.navbar > .container,\n.navbar > .container-fluid, .navbar > .container-sm, .navbar > .container-md, .navbar > .container-lg, .navbar > .container-xl, .navbar > .container-xxl {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: inherit;\n  flex-wrap: inherit;\n  -ms-flex-align: center;\n  align-items: center;\n  -ms-flex-pack: justify;\n  justify-content: space-between;\n}\n\n.navbar-brand {\n  padding-top: 0.3125rem;\n  padding-bottom: 0.3125rem;\n  margin-right: 1rem;\n  font-size: 1.25rem;\n  text-decoration: none;\n  white-space: nowrap;\n}\n\n.navbar-nav {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  padding-left: 0;\n  margin-bottom: 0;\n  list-style: none;\n}\n\n.navbar-nav .nav-link {\n  padding-right: 0;\n  padding-left: 0;\n}\n\n.navbar-nav .dropdown-menu {\n  position: static;\n}\n\n.navbar-text {\n  padding-top: 0.5rem;\n  padding-bottom: 0.5rem;\n}\n\n.navbar-collapse {\n  -ms-flex-preferred-size: 100%;\n  flex-basis: 100%;\n  -ms-flex-positive: 1;\n  flex-grow: 1;\n  -ms-flex-align: center;\n  align-items: center;\n}\n\n.navbar-toggler {\n  padding: 0.25rem 0.75rem;\n  font-size: 1.25rem;\n  line-height: 1;\n  background-color: transparent;\n  border: 1px solid transparent;\n  transition: box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .navbar-toggler {\n    transition: none;\n  }\n}\n\n.navbar-toggler:hover {\n  text-decoration: none;\n}\n\n.navbar-toggler:focus {\n  text-decoration: none;\n  outline: 0;\n  box-shadow: 0 0 0 0.25rem;\n}\n\n.navbar-toggler-icon {\n  display: inline-block;\n  width: 1.5em;\n  height: 1.5em;\n  vertical-align: middle;\n  background-repeat: no-repeat;\n  background-position: center;\n  background-size: 100%;\n}\n\n.navbar-nav-scroll {\n  max-height: var(--bs-scroll-height, 75vh);\n  overflow-y: auto;\n}\n\n@media (min-width: 576px) {\n  .navbar-expand-sm {\n    -ms-flex-wrap: nowrap;\n    flex-wrap: nowrap;\n    -ms-flex-pack: start;\n    justify-content: flex-start;\n  }\n  .navbar-expand-sm .navbar-nav {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .navbar-expand-sm .navbar-nav .dropdown-menu {\n    position: absolute;\n  }\n  .navbar-expand-sm .navbar-nav .nav-link {\n    padding-right: 0.5rem;\n    padding-left: 0.5rem;\n  }\n  .navbar-expand-sm .navbar-nav-scroll {\n    overflow: visible;\n  }\n  .navbar-expand-sm .navbar-collapse {\n    display: -ms-flexbox !important;\n    display: flex !important;\n    -ms-flex-preferred-size: auto;\n    flex-basis: auto;\n  }\n  .navbar-expand-sm .navbar-toggler {\n    display: none;\n  }\n  .navbar-expand-sm .offcanvas-header {\n    display: none;\n  }\n  .navbar-expand-sm .offcanvas {\n    position: inherit;\n    bottom: 0;\n    z-index: 1000;\n    -ms-flex-positive: 1;\n    flex-grow: 1;\n    visibility: visible !important;\n    background-color: transparent;\n    border-right: 0;\n    border-left: 0;\n    transition: none;\n    -webkit-transform: none;\n    transform: none;\n  }\n  .navbar-expand-sm .offcanvas-top,\n  .navbar-expand-sm .offcanvas-bottom {\n    height: auto;\n    border-top: 0;\n    border-bottom: 0;\n  }\n  .navbar-expand-sm .offcanvas-body {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-positive: 0;\n    flex-grow: 0;\n    padding: 0;\n    overflow-y: visible;\n  }\n}\n\n@media (min-width: 768px) {\n  .navbar-expand-md {\n    -ms-flex-wrap: nowrap;\n    flex-wrap: nowrap;\n    -ms-flex-pack: start;\n    justify-content: flex-start;\n  }\n  .navbar-expand-md .navbar-nav {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .navbar-expand-md .navbar-nav .dropdown-menu {\n    position: absolute;\n  }\n  .navbar-expand-md .navbar-nav .nav-link {\n    padding-right: 0.5rem;\n    padding-left: 0.5rem;\n  }\n  .navbar-expand-md .navbar-nav-scroll {\n    overflow: visible;\n  }\n  .navbar-expand-md .navbar-collapse {\n    display: -ms-flexbox !important;\n    display: flex !important;\n    -ms-flex-preferred-size: auto;\n    flex-basis: auto;\n  }\n  .navbar-expand-md .navbar-toggler {\n    display: none;\n  }\n  .navbar-expand-md .offcanvas-header {\n    display: none;\n  }\n  .navbar-expand-md .offcanvas {\n    position: inherit;\n    bottom: 0;\n    z-index: 1000;\n    -ms-flex-positive: 1;\n    flex-grow: 1;\n    visibility: visible !important;\n    background-color: transparent;\n    border-right: 0;\n    border-left: 0;\n    transition: none;\n    -webkit-transform: none;\n    transform: none;\n  }\n  .navbar-expand-md .offcanvas-top,\n  .navbar-expand-md .offcanvas-bottom {\n    height: auto;\n    border-top: 0;\n    border-bottom: 0;\n  }\n  .navbar-expand-md .offcanvas-body {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-positive: 0;\n    flex-grow: 0;\n    padding: 0;\n    overflow-y: visible;\n  }\n}\n\n@media (min-width: 992px) {\n  .navbar-expand-lg {\n    -ms-flex-wrap: nowrap;\n    flex-wrap: nowrap;\n    -ms-flex-pack: start;\n    justify-content: flex-start;\n  }\n  .navbar-expand-lg .navbar-nav {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .navbar-expand-lg .navbar-nav .dropdown-menu {\n    position: absolute;\n  }\n  .navbar-expand-lg .navbar-nav .nav-link {\n    padding-right: 0.5rem;\n    padding-left: 0.5rem;\n  }\n  .navbar-expand-lg .navbar-nav-scroll {\n    overflow: visible;\n  }\n  .navbar-expand-lg .navbar-collapse {\n    display: -ms-flexbox !important;\n    display: flex !important;\n    -ms-flex-preferred-size: auto;\n    flex-basis: auto;\n  }\n  .navbar-expand-lg .navbar-toggler {\n    display: none;\n  }\n  .navbar-expand-lg .offcanvas-header {\n    display: none;\n  }\n  .navbar-expand-lg .offcanvas {\n    position: inherit;\n    bottom: 0;\n    z-index: 1000;\n    -ms-flex-positive: 1;\n    flex-grow: 1;\n    visibility: visible !important;\n    background-color: transparent;\n    border-right: 0;\n    border-left: 0;\n    transition: none;\n    -webkit-transform: none;\n    transform: none;\n  }\n  .navbar-expand-lg .offcanvas-top,\n  .navbar-expand-lg .offcanvas-bottom {\n    height: auto;\n    border-top: 0;\n    border-bottom: 0;\n  }\n  .navbar-expand-lg .offcanvas-body {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-positive: 0;\n    flex-grow: 0;\n    padding: 0;\n    overflow-y: visible;\n  }\n}\n\n@media (min-width: 1200px) {\n  .navbar-expand-xl {\n    -ms-flex-wrap: nowrap;\n    flex-wrap: nowrap;\n    -ms-flex-pack: start;\n    justify-content: flex-start;\n  }\n  .navbar-expand-xl .navbar-nav {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .navbar-expand-xl .navbar-nav .dropdown-menu {\n    position: absolute;\n  }\n  .navbar-expand-xl .navbar-nav .nav-link {\n    padding-right: 0.5rem;\n    padding-left: 0.5rem;\n  }\n  .navbar-expand-xl .navbar-nav-scroll {\n    overflow: visible;\n  }\n  .navbar-expand-xl .navbar-collapse {\n    display: -ms-flexbox !important;\n    display: flex !important;\n    -ms-flex-preferred-size: auto;\n    flex-basis: auto;\n  }\n  .navbar-expand-xl .navbar-toggler {\n    display: none;\n  }\n  .navbar-expand-xl .offcanvas-header {\n    display: none;\n  }\n  .navbar-expand-xl .offcanvas {\n    position: inherit;\n    bottom: 0;\n    z-index: 1000;\n    -ms-flex-positive: 1;\n    flex-grow: 1;\n    visibility: visible !important;\n    background-color: transparent;\n    border-right: 0;\n    border-left: 0;\n    transition: none;\n    -webkit-transform: none;\n    transform: none;\n  }\n  .navbar-expand-xl .offcanvas-top,\n  .navbar-expand-xl .offcanvas-bottom {\n    height: auto;\n    border-top: 0;\n    border-bottom: 0;\n  }\n  .navbar-expand-xl .offcanvas-body {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-positive: 0;\n    flex-grow: 0;\n    padding: 0;\n    overflow-y: visible;\n  }\n}\n\n@media (min-width: 1400px) {\n  .navbar-expand-xxl {\n    -ms-flex-wrap: nowrap;\n    flex-wrap: nowrap;\n    -ms-flex-pack: start;\n    justify-content: flex-start;\n  }\n  .navbar-expand-xxl .navbar-nav {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .navbar-expand-xxl .navbar-nav .dropdown-menu {\n    position: absolute;\n  }\n  .navbar-expand-xxl .navbar-nav .nav-link {\n    padding-right: 0.5rem;\n    padding-left: 0.5rem;\n  }\n  .navbar-expand-xxl .navbar-nav-scroll {\n    overflow: visible;\n  }\n  .navbar-expand-xxl .navbar-collapse {\n    display: -ms-flexbox !important;\n    display: flex !important;\n    -ms-flex-preferred-size: auto;\n    flex-basis: auto;\n  }\n  .navbar-expand-xxl .navbar-toggler {\n    display: none;\n  }\n  .navbar-expand-xxl .offcanvas-header {\n    display: none;\n  }\n  .navbar-expand-xxl .offcanvas {\n    position: inherit;\n    bottom: 0;\n    z-index: 1000;\n    -ms-flex-positive: 1;\n    flex-grow: 1;\n    visibility: visible !important;\n    background-color: transparent;\n    border-right: 0;\n    border-left: 0;\n    transition: none;\n    -webkit-transform: none;\n    transform: none;\n  }\n  .navbar-expand-xxl .offcanvas-top,\n  .navbar-expand-xxl .offcanvas-bottom {\n    height: auto;\n    border-top: 0;\n    border-bottom: 0;\n  }\n  .navbar-expand-xxl .offcanvas-body {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-positive: 0;\n    flex-grow: 0;\n    padding: 0;\n    overflow-y: visible;\n  }\n}\n\n.navbar-expand {\n  -ms-flex-wrap: nowrap;\n  flex-wrap: nowrap;\n  -ms-flex-pack: start;\n  justify-content: flex-start;\n}\n\n.navbar-expand .navbar-nav {\n  -ms-flex-direction: row;\n  flex-direction: row;\n}\n\n.navbar-expand .navbar-nav .dropdown-menu {\n  position: absolute;\n}\n\n.navbar-expand .navbar-nav .nav-link {\n  padding-right: 0.5rem;\n  padding-left: 0.5rem;\n}\n\n.navbar-expand .navbar-nav-scroll {\n  overflow: visible;\n}\n\n.navbar-expand .navbar-collapse {\n  display: -ms-flexbox !important;\n  display: flex !important;\n  -ms-flex-preferred-size: auto;\n  flex-basis: auto;\n}\n\n.navbar-expand .navbar-toggler {\n  display: none;\n}\n\n.navbar-expand .offcanvas-header {\n  display: none;\n}\n\n.navbar-expand .offcanvas {\n  position: inherit;\n  bottom: 0;\n  z-index: 1000;\n  -ms-flex-positive: 1;\n  flex-grow: 1;\n  visibility: visible !important;\n  background-color: transparent;\n  border-right: 0;\n  border-left: 0;\n  transition: none;\n  -webkit-transform: none;\n  transform: none;\n}\n\n.navbar-expand .offcanvas-top,\n.navbar-expand .offcanvas-bottom {\n  height: auto;\n  border-top: 0;\n  border-bottom: 0;\n}\n\n.navbar-expand .offcanvas-body {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-positive: 0;\n  flex-grow: 0;\n  padding: 0;\n  overflow-y: visible;\n}\n\n.navbar-light .navbar-brand {\n  color: #1a1a1a;\n}\n\n.navbar-light .navbar-brand:hover, .navbar-light .navbar-brand:focus {\n  color: #1a1a1a;\n}\n\n.navbar-light .navbar-nav .nav-link {\n  color: rgba(0, 0, 0, 0.3);\n}\n\n.navbar-light .navbar-nav .nav-link:hover, .navbar-light .navbar-nav .nav-link:focus {\n  color: #1a1a1a;\n}\n\n.navbar-light .navbar-nav .nav-link.disabled {\n  color: rgba(0, 0, 0, 0.3);\n}\n\n.navbar-light .navbar-nav .show > .nav-link,\n.navbar-light .navbar-nav .nav-link.active {\n  color: #1a1a1a;\n}\n\n.navbar-light .navbar-toggler {\n  color: rgba(0, 0, 0, 0.3);\n  border-color: rgba(0, 0, 0, 0.1);\n}\n\n.navbar-light .navbar-toggler-icon {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%280, 0, 0, 0.3%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e\");\n}\n\n.navbar-light .navbar-text {\n  color: rgba(0, 0, 0, 0.3);\n}\n\n.navbar-light .navbar-text a,\n.navbar-light .navbar-text a:hover,\n.navbar-light .navbar-text a:focus {\n  color: #1a1a1a;\n}\n\n.navbar-dark .navbar-brand {\n  color: #fff;\n}\n\n.navbar-dark .navbar-brand:hover, .navbar-dark .navbar-brand:focus {\n  color: #fff;\n}\n\n.navbar-dark .navbar-nav .nav-link {\n  color: rgba(255, 255, 255, 0.55);\n}\n\n.navbar-dark .navbar-nav .nav-link:hover, .navbar-dark .navbar-nav .nav-link:focus {\n  color: #fff;\n}\n\n.navbar-dark .navbar-nav .nav-link.disabled {\n  color: rgba(255, 255, 255, 0.25);\n}\n\n.navbar-dark .navbar-nav .show > .nav-link,\n.navbar-dark .navbar-nav .nav-link.active {\n  color: #fff;\n}\n\n.navbar-dark .navbar-toggler {\n  color: rgba(255, 255, 255, 0.55);\n  border-color: rgba(255, 255, 255, 0.1);\n}\n\n.navbar-dark .navbar-toggler-icon {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e\");\n}\n\n.navbar-dark .navbar-text {\n  color: rgba(255, 255, 255, 0.55);\n}\n\n.navbar-dark .navbar-text a,\n.navbar-dark .navbar-text a:hover,\n.navbar-dark .navbar-text a:focus {\n  color: #fff;\n}\n\n.card {\n  position: relative;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  min-width: 0;\n  word-wrap: break-word;\n  background-color: #fff;\n  background-clip: border-box;\n  border: 1px solid rgba(0, 0, 0, 0.125);\n}\n\n.card > hr {\n  margin-right: 0;\n  margin-left: 0;\n}\n\n.card > .list-group {\n  border-top: inherit;\n  border-bottom: inherit;\n}\n\n.card > .list-group:first-child {\n  border-top-width: 0;\n}\n\n.card > .list-group:last-child {\n  border-bottom-width: 0;\n}\n\n.card > .card-header + .list-group,\n.card > .list-group + .card-footer {\n  border-top: 0;\n}\n\n.card-body {\n  -ms-flex: 1 1 auto;\n  flex: 1 1 auto;\n  padding: 1rem 1rem;\n}\n\n.card-title {\n  margin-bottom: 0.5rem;\n}\n\n.card-subtitle {\n  margin-top: -0.25rem;\n  margin-bottom: 0;\n}\n\n.card-text:last-child {\n  margin-bottom: 0;\n}\n\n.card-link + .card-link {\n  margin-left: 1rem;\n}\n\n.card-header {\n  padding: 0.5rem 1rem;\n  margin-bottom: 0;\n  background-color: rgba(0, 0, 0, 0.03);\n  border-bottom: 1px solid rgba(0, 0, 0, 0.125);\n}\n\n.card-footer {\n  padding: 0.5rem 1rem;\n  background-color: rgba(0, 0, 0, 0.03);\n  border-top: 1px solid rgba(0, 0, 0, 0.125);\n}\n\n.card-header-tabs {\n  margin-right: -0.5rem;\n  margin-bottom: -0.5rem;\n  margin-left: -0.5rem;\n  border-bottom: 0;\n}\n\n.card-header-pills {\n  margin-right: -0.5rem;\n  margin-left: -0.5rem;\n}\n\n.card-img-overlay {\n  position: absolute;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  padding: 1rem;\n}\n\n.card-img,\n.card-img-top,\n.card-img-bottom {\n  width: 100%;\n}\n\n.card-group > .card {\n  margin-bottom: 0.75rem;\n}\n\n@media (min-width: 576px) {\n  .card-group {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-flow: row wrap;\n    flex-flow: row wrap;\n  }\n  .card-group > .card {\n    -ms-flex: 1 0 0%;\n    flex: 1 0 0%;\n    margin-bottom: 0;\n  }\n  .card-group > .card + .card {\n    margin-left: 0;\n    border-left: 0;\n  }\n}\n\n.accordion-button {\n  position: relative;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-align: center;\n  align-items: center;\n  width: 100%;\n  padding: 1rem 1.25rem;\n  font-size: 1rem;\n  color: #55595c;\n  text-align: left;\n  background-color: #fff;\n  border: 0;\n  overflow-anchor: none;\n  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, border-radius 0.15s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .accordion-button {\n    transition: none;\n  }\n}\n\n.accordion-button:not(.collapsed) {\n  color: #171717;\n  background-color: #e8e8e8;\n  box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.125);\n}\n\n.accordion-button:not(.collapsed)::after {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23171717'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e\");\n  -webkit-transform: rotate(-180deg);\n  transform: rotate(-180deg);\n}\n\n.accordion-button::after {\n  -ms-flex-negative: 0;\n  flex-shrink: 0;\n  width: 1.25rem;\n  height: 1.25rem;\n  margin-left: auto;\n  content: \"\";\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%2355595c'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e\");\n  background-repeat: no-repeat;\n  background-size: 1.25rem;\n  transition: -webkit-transform 0.2s ease-in-out;\n  transition: transform 0.2s ease-in-out;\n  transition: transform 0.2s ease-in-out, -webkit-transform 0.2s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .accordion-button::after {\n    transition: none;\n  }\n}\n\n.accordion-button:hover {\n  z-index: 2;\n}\n\n.accordion-button:focus {\n  z-index: 3;\n  border-color: #8d8d8d;\n  outline: 0;\n  box-shadow: 0 0 0 0.25rem rgba(26, 26, 26, 0.25);\n}\n\n.accordion-header {\n  margin-bottom: 0;\n}\n\n.accordion-item {\n  background-color: #fff;\n  border: 1px solid rgba(0, 0, 0, 0.125);\n}\n\n.accordion-item:not(:first-of-type) {\n  border-top: 0;\n}\n\n.accordion-body {\n  padding: 1rem 1.25rem;\n}\n\n.accordion-flush .accordion-collapse {\n  border-width: 0;\n}\n\n.accordion-flush .accordion-item {\n  border-right: 0;\n  border-left: 0;\n}\n\n.accordion-flush .accordion-item:first-child {\n  border-top: 0;\n}\n\n.accordion-flush .accordion-item:last-child {\n  border-bottom: 0;\n}\n\n.breadcrumb {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n  flex-wrap: wrap;\n  padding: 0 0;\n  margin-bottom: 1rem;\n  list-style: none;\n}\n\n.breadcrumb-item + .breadcrumb-item {\n  padding-left: 0.5rem;\n}\n\n.breadcrumb-item + .breadcrumb-item::before {\n  float: left;\n  padding-right: 0.5rem;\n  color: #919aa1;\n  content: var(--bs-breadcrumb-divider, \"/\") /* rtl: var(--bs-breadcrumb-divider, \"/\") */;\n}\n\n.breadcrumb-item.active {\n  color: #919aa1;\n}\n\n.pagination {\n  display: -ms-flexbox;\n  display: flex;\n  padding-left: 0;\n  list-style: none;\n}\n\n.page-link {\n  position: relative;\n  display: block;\n  color: #1a1a1a;\n  text-decoration: none;\n  background-color: #fff;\n  border: 1px solid transparent;\n  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .page-link {\n    transition: none;\n  }\n}\n\n.page-link:hover {\n  z-index: 2;\n  color: #151515;\n  background-color: #f7f7f9;\n  border-color: transparent;\n}\n\n.page-link:focus {\n  z-index: 3;\n  color: #151515;\n  background-color: #f7f7f9;\n  outline: 0;\n  box-shadow: 0 0 0 0.25rem rgba(26, 26, 26, 0.25);\n}\n\n.page-item:not(:first-child) .page-link {\n  margin-left: -1px;\n}\n\n.page-item.active .page-link {\n  z-index: 3;\n  color: #fff;\n  background-color: #1a1a1a;\n  border-color: #1a1a1a;\n}\n\n.page-item.disabled .page-link {\n  color: #919aa1;\n  pointer-events: none;\n  background-color: #fff;\n  border-color: transparent;\n}\n\n.page-link {\n  padding: 0.375rem 0.75rem;\n}\n\n.pagination-lg .page-link {\n  padding: 0.75rem 1.5rem;\n  font-size: 1.25rem;\n}\n\n.pagination-sm .page-link {\n  padding: 0.25rem 0.5rem;\n  font-size: 0.875rem;\n}\n\n.badge {\n  display: inline-block;\n  padding: 0.35em 0.65em;\n  font-size: 0.75em;\n  font-weight: 700;\n  line-height: 1;\n  color: #fff;\n  text-align: center;\n  white-space: nowrap;\n  vertical-align: baseline;\n}\n\n.badge:empty {\n  display: none;\n}\n\n.btn .badge {\n  position: relative;\n  top: -1px;\n}\n\n.alert {\n  position: relative;\n  padding: 1rem 1rem;\n  margin-bottom: 1rem;\n  border: 1px solid transparent;\n}\n\n.alert-heading {\n  color: inherit;\n}\n\n.alert-link {\n  font-weight: 700;\n}\n\n.alert-dismissible {\n  padding-right: 3rem;\n}\n\n.alert-dismissible .btn-close {\n  position: absolute;\n  top: 0;\n  right: 0;\n  z-index: 2;\n  padding: 1.25rem 1rem;\n}\n\n.alert-primary {\n  color: #101010;\n  background-color: #d1d1d1;\n  border-color: #bababa;\n}\n\n.alert-primary .alert-link {\n  color: #0d0d0d;\n}\n\n.alert-secondary {\n  color: #999999;\n  background-color: white;\n  border-color: white;\n}\n\n.alert-secondary .alert-link {\n  color: #7a7a7a;\n}\n\n.alert-success {\n  color: #2d7345;\n  background-color: #dbf2e3;\n  border-color: #c9ecd5;\n}\n\n.alert-success .alert-link {\n  color: #245c37;\n}\n\n.alert-info {\n  color: #135d7c;\n  background-color: #d2ebf5;\n  border-color: #bce1f1;\n}\n\n.alert-info .alert-link {\n  color: #0f4a63;\n}\n\n.alert-warning {\n  color: #90682f;\n  background-color: #fcefdc;\n  border-color: #fbe6ca;\n}\n\n.alert-warning .alert-link {\n  color: #735326;\n}\n\n.alert-danger {\n  color: #82322f;\n  background-color: #f7dddc;\n  border-color: #f4cbca;\n}\n\n.alert-danger .alert-link {\n  color: #682826;\n}\n\n.alert-light {\n  color: #999999;\n  background-color: white;\n  border-color: white;\n}\n\n.alert-light .alert-link {\n  color: #7a7a7a;\n}\n\n.alert-dark {\n  color: #1f2326;\n  background-color: #d6d8d9;\n  border-color: #c2c4c6;\n}\n\n.alert-dark .alert-link {\n  color: #191c1e;\n}\n\n@-webkit-keyframes progress-bar-stripes {\n  0% {\n    background-position-x: 1rem;\n  }\n}\n\n@keyframes progress-bar-stripes {\n  0% {\n    background-position-x: 1rem;\n  }\n}\n\n.progress {\n  display: -ms-flexbox;\n  display: flex;\n  height: 1rem;\n  overflow: hidden;\n  font-size: 0.75rem;\n  background-color: #f7f7f9;\n}\n\n.progress-bar {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  -ms-flex-pack: center;\n  justify-content: center;\n  overflow: hidden;\n  color: #fff;\n  text-align: center;\n  white-space: nowrap;\n  background-color: #1a1a1a;\n  transition: width 0.6s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .progress-bar {\n    transition: none;\n  }\n}\n\n.progress-bar-striped {\n  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-size: 1rem 1rem;\n}\n\n.progress-bar-animated {\n  -webkit-animation: 1s linear infinite progress-bar-stripes;\n  animation: 1s linear infinite progress-bar-stripes;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .progress-bar-animated {\n    -webkit-animation: none;\n    animation: none;\n  }\n}\n\n.list-group {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  padding-left: 0;\n  margin-bottom: 0;\n}\n\n.list-group-numbered {\n  list-style-type: none;\n  counter-reset: section;\n}\n\n.list-group-numbered > li::before {\n  content: counters(section, \".\") \". \";\n  counter-increment: section;\n}\n\n.list-group-item-action {\n  width: 100%;\n  color: #55595c;\n  text-align: inherit;\n}\n\n.list-group-item-action:hover, .list-group-item-action:focus {\n  z-index: 1;\n  color: #55595c;\n  text-decoration: none;\n  background-color: #f8f9fa;\n}\n\n.list-group-item-action:active {\n  color: #55595c;\n  background-color: #f7f7f9;\n}\n\n.list-group-item {\n  position: relative;\n  display: block;\n  padding: 0.5rem 1rem;\n  color: #1a1a1a;\n  text-decoration: none;\n  background-color: #fff;\n  border: 1px solid rgba(0, 0, 0, 0.125);\n}\n\n.list-group-item.disabled, .list-group-item:disabled {\n  color: #919aa1;\n  pointer-events: none;\n  background-color: #fff;\n}\n\n.list-group-item.active {\n  z-index: 2;\n  color: #fff;\n  background-color: #1a1a1a;\n  border-color: #1a1a1a;\n}\n\n.list-group-item + .list-group-item {\n  border-top-width: 0;\n}\n\n.list-group-item + .list-group-item.active {\n  margin-top: -1px;\n  border-top-width: 1px;\n}\n\n.list-group-horizontal {\n  -ms-flex-direction: row;\n  flex-direction: row;\n}\n\n.list-group-horizontal > .list-group-item.active {\n  margin-top: 0;\n}\n\n.list-group-horizontal > .list-group-item + .list-group-item {\n  border-top-width: 1px;\n  border-left-width: 0;\n}\n\n.list-group-horizontal > .list-group-item + .list-group-item.active {\n  margin-left: -1px;\n  border-left-width: 1px;\n}\n\n@media (min-width: 576px) {\n  .list-group-horizontal-sm {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .list-group-horizontal-sm > .list-group-item.active {\n    margin-top: 0;\n  }\n  .list-group-horizontal-sm > .list-group-item + .list-group-item {\n    border-top-width: 1px;\n    border-left-width: 0;\n  }\n  .list-group-horizontal-sm > .list-group-item + .list-group-item.active {\n    margin-left: -1px;\n    border-left-width: 1px;\n  }\n}\n\n@media (min-width: 768px) {\n  .list-group-horizontal-md {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .list-group-horizontal-md > .list-group-item.active {\n    margin-top: 0;\n  }\n  .list-group-horizontal-md > .list-group-item + .list-group-item {\n    border-top-width: 1px;\n    border-left-width: 0;\n  }\n  .list-group-horizontal-md > .list-group-item + .list-group-item.active {\n    margin-left: -1px;\n    border-left-width: 1px;\n  }\n}\n\n@media (min-width: 992px) {\n  .list-group-horizontal-lg {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .list-group-horizontal-lg > .list-group-item.active {\n    margin-top: 0;\n  }\n  .list-group-horizontal-lg > .list-group-item + .list-group-item {\n    border-top-width: 1px;\n    border-left-width: 0;\n  }\n  .list-group-horizontal-lg > .list-group-item + .list-group-item.active {\n    margin-left: -1px;\n    border-left-width: 1px;\n  }\n}\n\n@media (min-width: 1200px) {\n  .list-group-horizontal-xl {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .list-group-horizontal-xl > .list-group-item.active {\n    margin-top: 0;\n  }\n  .list-group-horizontal-xl > .list-group-item + .list-group-item {\n    border-top-width: 1px;\n    border-left-width: 0;\n  }\n  .list-group-horizontal-xl > .list-group-item + .list-group-item.active {\n    margin-left: -1px;\n    border-left-width: 1px;\n  }\n}\n\n@media (min-width: 1400px) {\n  .list-group-horizontal-xxl {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .list-group-horizontal-xxl > .list-group-item.active {\n    margin-top: 0;\n  }\n  .list-group-horizontal-xxl > .list-group-item + .list-group-item {\n    border-top-width: 1px;\n    border-left-width: 0;\n  }\n  .list-group-horizontal-xxl > .list-group-item + .list-group-item.active {\n    margin-left: -1px;\n    border-left-width: 1px;\n  }\n}\n\n.list-group-flush > .list-group-item {\n  border-width: 0 0 1px;\n}\n\n.list-group-flush > .list-group-item:last-child {\n  border-bottom-width: 0;\n}\n\n.list-group-item-primary {\n  color: #101010;\n  background-color: #d1d1d1;\n}\n\n.list-group-item-primary.list-group-item-action:hover, .list-group-item-primary.list-group-item-action:focus {\n  color: #101010;\n  background-color: #bcbcbc;\n}\n\n.list-group-item-primary.list-group-item-action.active {\n  color: #fff;\n  background-color: #101010;\n  border-color: #101010;\n}\n\n.list-group-item-secondary {\n  color: #999999;\n  background-color: white;\n}\n\n.list-group-item-secondary.list-group-item-action:hover, .list-group-item-secondary.list-group-item-action:focus {\n  color: #999999;\n  background-color: #e6e6e6;\n}\n\n.list-group-item-secondary.list-group-item-action.active {\n  color: #fff;\n  background-color: #999999;\n  border-color: #999999;\n}\n\n.list-group-item-success {\n  color: #2d7345;\n  background-color: #dbf2e3;\n}\n\n.list-group-item-success.list-group-item-action:hover, .list-group-item-success.list-group-item-action:focus {\n  color: #2d7345;\n  background-color: #c5dacc;\n}\n\n.list-group-item-success.list-group-item-action.active {\n  color: #fff;\n  background-color: #2d7345;\n  border-color: #2d7345;\n}\n\n.list-group-item-info {\n  color: #135d7c;\n  background-color: #d2ebf5;\n}\n\n.list-group-item-info.list-group-item-action:hover, .list-group-item-info.list-group-item-action:focus {\n  color: #135d7c;\n  background-color: #bdd4dd;\n}\n\n.list-group-item-info.list-group-item-action.active {\n  color: #fff;\n  background-color: #135d7c;\n  border-color: #135d7c;\n}\n\n.list-group-item-warning {\n  color: #90682f;\n  background-color: #fcefdc;\n}\n\n.list-group-item-warning.list-group-item-action:hover, .list-group-item-warning.list-group-item-action:focus {\n  color: #90682f;\n  background-color: #e3d7c6;\n}\n\n.list-group-item-warning.list-group-item-action.active {\n  color: #fff;\n  background-color: #90682f;\n  border-color: #90682f;\n}\n\n.list-group-item-danger {\n  color: #82322f;\n  background-color: #f7dddc;\n}\n\n.list-group-item-danger.list-group-item-action:hover, .list-group-item-danger.list-group-item-action:focus {\n  color: #82322f;\n  background-color: #dec7c6;\n}\n\n.list-group-item-danger.list-group-item-action.active {\n  color: #fff;\n  background-color: #82322f;\n  border-color: #82322f;\n}\n\n.list-group-item-light {\n  color: #999999;\n  background-color: white;\n}\n\n.list-group-item-light.list-group-item-action:hover, .list-group-item-light.list-group-item-action:focus {\n  color: #999999;\n  background-color: #e6e6e6;\n}\n\n.list-group-item-light.list-group-item-action.active {\n  color: #fff;\n  background-color: #999999;\n  border-color: #999999;\n}\n\n.list-group-item-dark {\n  color: #1f2326;\n  background-color: #d6d8d9;\n}\n\n.list-group-item-dark.list-group-item-action:hover, .list-group-item-dark.list-group-item-action:focus {\n  color: #1f2326;\n  background-color: #c1c2c3;\n}\n\n.list-group-item-dark.list-group-item-action.active {\n  color: #fff;\n  background-color: #1f2326;\n  border-color: #1f2326;\n}\n\n.btn-close {\n  box-sizing: content-box;\n  width: 1em;\n  height: 1em;\n  padding: 0.25em 0.25em;\n  color: #000;\n  background: transparent url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23000'%3e%3cpath d='M.293.293a1 1 0 011.414 0L8 6.586 14.293.293a1 1 0 111.414 1.414L9.414 8l6.293 6.293a1 1 0 01-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 01-1.414-1.414L6.586 8 .293 1.707a1 1 0 010-1.414z'/%3e%3c/svg%3e\") center/1em auto no-repeat;\n  border: 0;\n  opacity: 0.5;\n}\n\n.btn-close:hover {\n  color: #000;\n  text-decoration: none;\n  opacity: 0.75;\n}\n\n.btn-close:focus {\n  outline: 0;\n  box-shadow: 0 0 0 0.25rem rgba(26, 26, 26, 0.25);\n  opacity: 1;\n}\n\n.btn-close:disabled, .btn-close.disabled {\n  pointer-events: none;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  user-select: none;\n  opacity: 0.25;\n}\n\n.btn-close-white {\n  -webkit-filter: invert(1) grayscale(100%) brightness(200%);\n  filter: invert(1) grayscale(100%) brightness(200%);\n}\n\n.toast {\n  width: 350px;\n  max-width: 100%;\n  font-size: 0.875rem;\n  pointer-events: auto;\n  background-color: rgba(255, 255, 255, 0.85);\n  background-clip: padding-box;\n  border: 1px solid rgba(0, 0, 0, 0.1);\n  box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15);\n}\n\n.toast.showing {\n  opacity: 0;\n}\n\n.toast:not(.show) {\n  display: none;\n}\n\n.toast-container {\n  width: -webkit-max-content;\n  width: -moz-max-content;\n  width: max-content;\n  max-width: 100%;\n  pointer-events: none;\n}\n\n.toast-container > :not(:last-child) {\n  margin-bottom: 0.75rem;\n}\n\n.toast-header {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-align: center;\n  align-items: center;\n  padding: 0.5rem 0.75rem;\n  color: #919aa1;\n  background-color: rgba(255, 255, 255, 0.85);\n  background-clip: padding-box;\n  border-bottom: 1px solid rgba(0, 0, 0, 0.05);\n}\n\n.toast-header .btn-close {\n  margin-right: -0.375rem;\n  margin-left: 0.75rem;\n}\n\n.toast-body {\n  padding: 0.75rem;\n  word-wrap: break-word;\n}\n\n.modal {\n  position: fixed;\n  top: 0;\n  left: 0;\n  z-index: 1055;\n  display: none;\n  width: 100%;\n  height: 100%;\n  overflow-x: hidden;\n  overflow-y: auto;\n  outline: 0;\n}\n\n.modal-dialog {\n  position: relative;\n  width: auto;\n  margin: 0.5rem;\n  pointer-events: none;\n}\n\n.modal.fade .modal-dialog {\n  transition: -webkit-transform 0.3s ease-out;\n  transition: transform 0.3s ease-out;\n  transition: transform 0.3s ease-out, -webkit-transform 0.3s ease-out;\n  -webkit-transform: translate(0, -50px);\n  transform: translate(0, -50px);\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .modal.fade .modal-dialog {\n    transition: none;\n  }\n}\n\n.modal.show .modal-dialog {\n  -webkit-transform: none;\n  transform: none;\n}\n\n.modal.modal-static .modal-dialog {\n  -webkit-transform: scale(1.02);\n  transform: scale(1.02);\n}\n\n.modal-dialog-scrollable {\n  height: calc(100% - 1rem);\n}\n\n.modal-dialog-scrollable .modal-content {\n  max-height: 100%;\n  overflow: hidden;\n}\n\n.modal-dialog-scrollable .modal-body {\n  overflow-y: auto;\n}\n\n.modal-dialog-centered {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-align: center;\n  align-items: center;\n  min-height: calc(100% - 1rem);\n}\n\n.modal-content {\n  position: relative;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  width: 100%;\n  pointer-events: auto;\n  background-color: #fff;\n  background-clip: padding-box;\n  border: 1px solid rgba(0, 0, 0, 0.2);\n  outline: 0;\n}\n\n.modal-backdrop {\n  position: fixed;\n  top: 0;\n  left: 0;\n  z-index: 1050;\n  width: 100vw;\n  height: 100vh;\n  background-color: #000;\n}\n\n.modal-backdrop.fade {\n  opacity: 0;\n}\n\n.modal-backdrop.show {\n  opacity: 0.5;\n}\n\n.modal-header {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-negative: 0;\n  flex-shrink: 0;\n  -ms-flex-align: center;\n  align-items: center;\n  -ms-flex-pack: justify;\n  justify-content: space-between;\n  padding: 1rem 1rem;\n  border-bottom: 1px solid #eceeef;\n}\n\n.modal-header .btn-close {\n  padding: 0.5rem 0.5rem;\n  margin: -0.5rem -0.5rem -0.5rem auto;\n}\n\n.modal-title {\n  margin-bottom: 0;\n  line-height: 1.5;\n}\n\n.modal-body {\n  position: relative;\n  -ms-flex: 1 1 auto;\n  flex: 1 1 auto;\n  padding: 1rem;\n}\n\n.modal-footer {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n  flex-wrap: wrap;\n  -ms-flex-negative: 0;\n  flex-shrink: 0;\n  -ms-flex-align: center;\n  align-items: center;\n  -ms-flex-pack: end;\n  justify-content: flex-end;\n  padding: 0.75rem;\n  border-top: 1px solid #eceeef;\n}\n\n.modal-footer > * {\n  margin: 0.25rem;\n}\n\n@media (min-width: 576px) {\n  .modal-dialog {\n    max-width: 500px;\n    margin: 1.75rem auto;\n  }\n  .modal-dialog-scrollable {\n    height: calc(100% - 3.5rem);\n  }\n  .modal-dialog-centered {\n    min-height: calc(100% - 3.5rem);\n  }\n  .modal-sm {\n    max-width: 300px;\n  }\n}\n\n@media (min-width: 992px) {\n  .modal-lg,\n  .modal-xl {\n    max-width: 800px;\n  }\n}\n\n@media (min-width: 1200px) {\n  .modal-xl {\n    max-width: 1140px;\n  }\n}\n\n.modal-fullscreen {\n  width: 100vw;\n  max-width: none;\n  height: 100%;\n  margin: 0;\n}\n\n.modal-fullscreen .modal-content {\n  height: 100%;\n  border: 0;\n}\n\n.modal-fullscreen .modal-body {\n  overflow-y: auto;\n}\n\n@media (max-width: 575.98px) {\n  .modal-fullscreen-sm-down {\n    width: 100vw;\n    max-width: none;\n    height: 100%;\n    margin: 0;\n  }\n  .modal-fullscreen-sm-down .modal-content {\n    height: 100%;\n    border: 0;\n  }\n  .modal-fullscreen-sm-down .modal-body {\n    overflow-y: auto;\n  }\n}\n\n@media (max-width: 767.98px) {\n  .modal-fullscreen-md-down {\n    width: 100vw;\n    max-width: none;\n    height: 100%;\n    margin: 0;\n  }\n  .modal-fullscreen-md-down .modal-content {\n    height: 100%;\n    border: 0;\n  }\n  .modal-fullscreen-md-down .modal-body {\n    overflow-y: auto;\n  }\n}\n\n@media (max-width: 991.98px) {\n  .modal-fullscreen-lg-down {\n    width: 100vw;\n    max-width: none;\n    height: 100%;\n    margin: 0;\n  }\n  .modal-fullscreen-lg-down .modal-content {\n    height: 100%;\n    border: 0;\n  }\n  .modal-fullscreen-lg-down .modal-body {\n    overflow-y: auto;\n  }\n}\n\n@media (max-width: 1199.98px) {\n  .modal-fullscreen-xl-down {\n    width: 100vw;\n    max-width: none;\n    height: 100%;\n    margin: 0;\n  }\n  .modal-fullscreen-xl-down .modal-content {\n    height: 100%;\n    border: 0;\n  }\n  .modal-fullscreen-xl-down .modal-body {\n    overflow-y: auto;\n  }\n}\n\n@media (max-width: 1399.98px) {\n  .modal-fullscreen-xxl-down {\n    width: 100vw;\n    max-width: none;\n    height: 100%;\n    margin: 0;\n  }\n  .modal-fullscreen-xxl-down .modal-content {\n    height: 100%;\n    border: 0;\n  }\n  .modal-fullscreen-xxl-down .modal-body {\n    overflow-y: auto;\n  }\n}\n\n.tooltip {\n  position: absolute;\n  z-index: 1080;\n  display: block;\n  margin: 0;\n  font-family: var(--bs-font-sans-serif);\n  font-style: normal;\n  font-weight: 400;\n  line-height: 1.5;\n  text-align: left;\n  text-align: start;\n  text-decoration: none;\n  text-shadow: none;\n  text-transform: none;\n  letter-spacing: normal;\n  word-break: normal;\n  word-spacing: normal;\n  white-space: normal;\n  line-break: auto;\n  font-size: 0.875rem;\n  word-wrap: break-word;\n  opacity: 0;\n}\n\n.tooltip.show {\n  opacity: 0.9;\n}\n\n.tooltip .tooltip-arrow {\n  position: absolute;\n  display: block;\n  width: 0.8rem;\n  height: 0.4rem;\n}\n\n.tooltip .tooltip-arrow::before {\n  position: absolute;\n  content: \"\";\n  border-color: transparent;\n  border-style: solid;\n}\n\n.bs-tooltip-top, .bs-tooltip-auto[data-popper-placement^=\"top\"] {\n  padding: 0.4rem 0;\n}\n\n.bs-tooltip-top .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=\"top\"] .tooltip-arrow {\n  bottom: 0;\n}\n\n.bs-tooltip-top .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=\"top\"] .tooltip-arrow::before {\n  top: -1px;\n  border-width: 0.4rem 0.4rem 0;\n  border-top-color: #000;\n}\n\n.bs-tooltip-end, .bs-tooltip-auto[data-popper-placement^=\"right\"] {\n  padding: 0 0.4rem;\n}\n\n.bs-tooltip-end .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=\"right\"] .tooltip-arrow {\n  left: 0;\n  width: 0.4rem;\n  height: 0.8rem;\n}\n\n.bs-tooltip-end .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=\"right\"] .tooltip-arrow::before {\n  right: -1px;\n  border-width: 0.4rem 0.4rem 0.4rem 0;\n  border-right-color: #000;\n}\n\n.bs-tooltip-bottom, .bs-tooltip-auto[data-popper-placement^=\"bottom\"] {\n  padding: 0.4rem 0;\n}\n\n.bs-tooltip-bottom .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=\"bottom\"] .tooltip-arrow {\n  top: 0;\n}\n\n.bs-tooltip-bottom .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=\"bottom\"] .tooltip-arrow::before {\n  bottom: -1px;\n  border-width: 0 0.4rem 0.4rem;\n  border-bottom-color: #000;\n}\n\n.bs-tooltip-start, .bs-tooltip-auto[data-popper-placement^=\"left\"] {\n  padding: 0 0.4rem;\n}\n\n.bs-tooltip-start .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=\"left\"] .tooltip-arrow {\n  right: 0;\n  width: 0.4rem;\n  height: 0.8rem;\n}\n\n.bs-tooltip-start .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=\"left\"] .tooltip-arrow::before {\n  left: -1px;\n  border-width: 0.4rem 0 0.4rem 0.4rem;\n  border-left-color: #000;\n}\n\n.tooltip-inner {\n  max-width: 200px;\n  padding: 0.25rem 0.5rem;\n  color: #fff;\n  text-align: center;\n  background-color: #000;\n}\n\n.popover {\n  position: absolute;\n  top: 0;\n  left: 0 /* rtl:ignore */;\n  z-index: 1070;\n  display: block;\n  max-width: 276px;\n  font-family: var(--bs-font-sans-serif);\n  font-style: normal;\n  font-weight: 400;\n  line-height: 1.5;\n  text-align: left;\n  text-align: start;\n  text-decoration: none;\n  text-shadow: none;\n  text-transform: none;\n  letter-spacing: normal;\n  word-break: normal;\n  word-spacing: normal;\n  white-space: normal;\n  line-break: auto;\n  font-size: 0.875rem;\n  word-wrap: break-word;\n  background-color: #fff;\n  background-clip: padding-box;\n  border: 1px solid rgba(0, 0, 0, 0.2);\n}\n\n.popover .popover-arrow {\n  position: absolute;\n  display: block;\n  width: 1rem;\n  height: 0.5rem;\n}\n\n.popover .popover-arrow::before, .popover .popover-arrow::after {\n  position: absolute;\n  display: block;\n  content: \"\";\n  border-color: transparent;\n  border-style: solid;\n}\n\n.bs-popover-top > .popover-arrow, .bs-popover-auto[data-popper-placement^=\"top\"] > .popover-arrow {\n  bottom: calc(-0.5rem - 1px);\n}\n\n.bs-popover-top > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=\"top\"] > .popover-arrow::before {\n  bottom: 0;\n  border-width: 0.5rem 0.5rem 0;\n  border-top-color: rgba(0, 0, 0, 0.25);\n}\n\n.bs-popover-top > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=\"top\"] > .popover-arrow::after {\n  bottom: 1px;\n  border-width: 0.5rem 0.5rem 0;\n  border-top-color: #fff;\n}\n\n.bs-popover-end > .popover-arrow, .bs-popover-auto[data-popper-placement^=\"right\"] > .popover-arrow {\n  left: calc(-0.5rem - 1px);\n  width: 0.5rem;\n  height: 1rem;\n}\n\n.bs-popover-end > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=\"right\"] > .popover-arrow::before {\n  left: 0;\n  border-width: 0.5rem 0.5rem 0.5rem 0;\n  border-right-color: rgba(0, 0, 0, 0.25);\n}\n\n.bs-popover-end > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=\"right\"] > .popover-arrow::after {\n  left: 1px;\n  border-width: 0.5rem 0.5rem 0.5rem 0;\n  border-right-color: #fff;\n}\n\n.bs-popover-bottom > .popover-arrow, .bs-popover-auto[data-popper-placement^=\"bottom\"] > .popover-arrow {\n  top: calc(-0.5rem - 1px);\n}\n\n.bs-popover-bottom > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=\"bottom\"] > .popover-arrow::before {\n  top: 0;\n  border-width: 0 0.5rem 0.5rem 0.5rem;\n  border-bottom-color: rgba(0, 0, 0, 0.25);\n}\n\n.bs-popover-bottom > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=\"bottom\"] > .popover-arrow::after {\n  top: 1px;\n  border-width: 0 0.5rem 0.5rem 0.5rem;\n  border-bottom-color: #fff;\n}\n\n.bs-popover-bottom .popover-header::before, .bs-popover-auto[data-popper-placement^=\"bottom\"] .popover-header::before {\n  position: absolute;\n  top: 0;\n  left: 50%;\n  display: block;\n  width: 1rem;\n  margin-left: -0.5rem;\n  content: \"\";\n  border-bottom: 1px solid #f0f0f0;\n}\n\n.bs-popover-start > .popover-arrow, .bs-popover-auto[data-popper-placement^=\"left\"] > .popover-arrow {\n  right: calc(-0.5rem - 1px);\n  width: 0.5rem;\n  height: 1rem;\n}\n\n.bs-popover-start > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=\"left\"] > .popover-arrow::before {\n  right: 0;\n  border-width: 0.5rem 0 0.5rem 0.5rem;\n  border-left-color: rgba(0, 0, 0, 0.25);\n}\n\n.bs-popover-start > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=\"left\"] > .popover-arrow::after {\n  right: 1px;\n  border-width: 0.5rem 0 0.5rem 0.5rem;\n  border-left-color: #fff;\n}\n\n.popover-header {\n  padding: 0.5rem 1rem;\n  margin-bottom: 0;\n  font-size: 1rem;\n  color: #1a1a1a;\n  background-color: #f0f0f0;\n  border-bottom: 1px solid rgba(0, 0, 0, 0.2);\n}\n\n.popover-header:empty {\n  display: none;\n}\n\n.popover-body {\n  padding: 1rem 1rem;\n  color: #55595c;\n}\n\n.carousel {\n  position: relative;\n}\n\n.carousel.pointer-event {\n  -ms-touch-action: pan-y;\n  touch-action: pan-y;\n}\n\n.carousel-inner {\n  position: relative;\n  width: 100%;\n  overflow: hidden;\n}\n\n.carousel-inner::after {\n  display: block;\n  clear: both;\n  content: \"\";\n}\n\n.carousel-item {\n  position: relative;\n  display: none;\n  float: left;\n  width: 100%;\n  margin-right: -100%;\n  -webkit-backface-visibility: hidden;\n  backface-visibility: hidden;\n  transition: -webkit-transform 0.6s ease-in-out;\n  transition: transform 0.6s ease-in-out;\n  transition: transform 0.6s ease-in-out, -webkit-transform 0.6s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .carousel-item {\n    transition: none;\n  }\n}\n\n.carousel-item.active,\n.carousel-item-next,\n.carousel-item-prev {\n  display: block;\n}\n\n/* rtl:begin:ignore */\n.carousel-item-next:not(.carousel-item-start),\n.active.carousel-item-end {\n  -webkit-transform: translateX(100%);\n  transform: translateX(100%);\n}\n\n.carousel-item-prev:not(.carousel-item-end),\n.active.carousel-item-start {\n  -webkit-transform: translateX(-100%);\n  transform: translateX(-100%);\n}\n\n/* rtl:end:ignore */\n.carousel-fade .carousel-item {\n  opacity: 0;\n  transition-property: opacity;\n  -webkit-transform: none;\n  transform: none;\n}\n\n.carousel-fade .carousel-item.active,\n.carousel-fade .carousel-item-next.carousel-item-start,\n.carousel-fade .carousel-item-prev.carousel-item-end {\n  z-index: 1;\n  opacity: 1;\n}\n\n.carousel-fade .active.carousel-item-start,\n.carousel-fade .active.carousel-item-end {\n  z-index: 0;\n  opacity: 0;\n  transition: opacity 0s 0.6s;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .carousel-fade .active.carousel-item-start,\n  .carousel-fade .active.carousel-item-end {\n    transition: none;\n  }\n}\n\n.carousel-control-prev,\n.carousel-control-next {\n  position: absolute;\n  top: 0;\n  bottom: 0;\n  z-index: 1;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-align: center;\n  align-items: center;\n  -ms-flex-pack: center;\n  justify-content: center;\n  width: 15%;\n  padding: 0;\n  color: #fff;\n  text-align: center;\n  background: none;\n  border: 0;\n  opacity: 0.5;\n  transition: opacity 0.15s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .carousel-control-prev,\n  .carousel-control-next {\n    transition: none;\n  }\n}\n\n.carousel-control-prev:hover, .carousel-control-prev:focus,\n.carousel-control-next:hover,\n.carousel-control-next:focus {\n  color: #fff;\n  text-decoration: none;\n  outline: 0;\n  opacity: 0.9;\n}\n\n.carousel-control-prev {\n  left: 0;\n}\n\n.carousel-control-next {\n  right: 0;\n}\n\n.carousel-control-prev-icon,\n.carousel-control-next-icon {\n  display: inline-block;\n  width: 2rem;\n  height: 2rem;\n  background-repeat: no-repeat;\n  background-position: 50%;\n  background-size: 100% 100%;\n}\n\n/* rtl:options: {\n  \"autoRename\": true,\n  \"stringMap\":[ {\n    \"name\"    : \"prev-next\",\n    \"search\"  : \"prev\",\n    \"replace\" : \"next\"\n  } ]\n} */\n.carousel-control-prev-icon {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0z'/%3e%3c/svg%3e\");\n}\n\n.carousel-control-next-icon {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e\");\n}\n\n.carousel-indicators {\n  position: absolute;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 2;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-pack: center;\n  justify-content: center;\n  padding: 0;\n  margin-right: 15%;\n  margin-bottom: 1rem;\n  margin-left: 15%;\n  list-style: none;\n}\n\n.carousel-indicators [data-bs-target] {\n  box-sizing: content-box;\n  -ms-flex: 0 1 auto;\n  flex: 0 1 auto;\n  width: 30px;\n  height: 3px;\n  padding: 0;\n  margin-right: 3px;\n  margin-left: 3px;\n  text-indent: -999px;\n  cursor: pointer;\n  background-color: #fff;\n  background-clip: padding-box;\n  border: 0;\n  border-top: 10px solid transparent;\n  border-bottom: 10px solid transparent;\n  opacity: 0.5;\n  transition: opacity 0.6s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .carousel-indicators [data-bs-target] {\n    transition: none;\n  }\n}\n\n.carousel-indicators .active {\n  opacity: 1;\n}\n\n.carousel-caption {\n  position: absolute;\n  right: 15%;\n  bottom: 1.25rem;\n  left: 15%;\n  padding-top: 1.25rem;\n  padding-bottom: 1.25rem;\n  color: #fff;\n  text-align: center;\n}\n\n.carousel-dark .carousel-control-prev-icon,\n.carousel-dark .carousel-control-next-icon {\n  -webkit-filter: invert(1) grayscale(100);\n  filter: invert(1) grayscale(100);\n}\n\n.carousel-dark .carousel-indicators [data-bs-target] {\n  background-color: #000;\n}\n\n.carousel-dark .carousel-caption {\n  color: #000;\n}\n\n@-webkit-keyframes spinner-border {\n  to {\n    -webkit-transform: rotate(360deg) /* rtl:ignore */;\n    transform: rotate(360deg) /* rtl:ignore */;\n  }\n}\n\n@keyframes spinner-border {\n  to {\n    -webkit-transform: rotate(360deg) /* rtl:ignore */;\n    transform: rotate(360deg) /* rtl:ignore */;\n  }\n}\n\n.spinner-border {\n  display: inline-block;\n  width: 2rem;\n  height: 2rem;\n  vertical-align: -0.125em;\n  border: 0.25em solid currentColor;\n  border-right-color: transparent;\n  border-radius: 50%;\n  -webkit-animation: 0.75s linear infinite spinner-border;\n  animation: 0.75s linear infinite spinner-border;\n}\n\n.spinner-border-sm {\n  width: 1rem;\n  height: 1rem;\n  border-width: 0.2em;\n}\n\n@-webkit-keyframes spinner-grow {\n  0% {\n    -webkit-transform: scale(0);\n    transform: scale(0);\n  }\n  50% {\n    opacity: 1;\n    -webkit-transform: none;\n    transform: none;\n  }\n}\n\n@keyframes spinner-grow {\n  0% {\n    -webkit-transform: scale(0);\n    transform: scale(0);\n  }\n  50% {\n    opacity: 1;\n    -webkit-transform: none;\n    transform: none;\n  }\n}\n\n.spinner-grow {\n  display: inline-block;\n  width: 2rem;\n  height: 2rem;\n  vertical-align: -0.125em;\n  background-color: currentColor;\n  border-radius: 50%;\n  opacity: 0;\n  -webkit-animation: 0.75s linear infinite spinner-grow;\n  animation: 0.75s linear infinite spinner-grow;\n}\n\n.spinner-grow-sm {\n  width: 1rem;\n  height: 1rem;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .spinner-border,\n  .spinner-grow {\n    -webkit-animation-duration: 1.5s;\n    animation-duration: 1.5s;\n  }\n}\n\n.offcanvas {\n  position: fixed;\n  bottom: 0;\n  z-index: 1045;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  max-width: 100%;\n  visibility: hidden;\n  background-color: #fff;\n  background-clip: padding-box;\n  outline: 0;\n  transition: -webkit-transform 0.3s ease-in-out;\n  transition: transform 0.3s ease-in-out;\n  transition: transform 0.3s ease-in-out, -webkit-transform 0.3s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .offcanvas {\n    transition: none;\n  }\n}\n\n.offcanvas-backdrop {\n  position: fixed;\n  top: 0;\n  left: 0;\n  z-index: 1040;\n  width: 100vw;\n  height: 100vh;\n  background-color: #000;\n}\n\n.offcanvas-backdrop.fade {\n  opacity: 0;\n}\n\n.offcanvas-backdrop.show {\n  opacity: 0.5;\n}\n\n.offcanvas-header {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-align: center;\n  align-items: center;\n  -ms-flex-pack: justify;\n  justify-content: space-between;\n  padding: 1rem 1rem;\n}\n\n.offcanvas-header .btn-close {\n  padding: 0.5rem 0.5rem;\n  margin-top: -0.5rem;\n  margin-right: -0.5rem;\n  margin-bottom: -0.5rem;\n}\n\n.offcanvas-title {\n  margin-bottom: 0;\n  line-height: 1.5;\n}\n\n.offcanvas-body {\n  -ms-flex-positive: 1;\n  flex-grow: 1;\n  padding: 1rem 1rem;\n  overflow-y: auto;\n}\n\n.offcanvas-start {\n  top: 0;\n  left: 0;\n  width: 400px;\n  border-right: 1px solid rgba(0, 0, 0, 0.2);\n  -webkit-transform: translateX(-100%);\n  transform: translateX(-100%);\n}\n\n.offcanvas-end {\n  top: 0;\n  right: 0;\n  width: 400px;\n  border-left: 1px solid rgba(0, 0, 0, 0.2);\n  -webkit-transform: translateX(100%);\n  transform: translateX(100%);\n}\n\n.offcanvas-top {\n  top: 0;\n  right: 0;\n  left: 0;\n  height: 30vh;\n  max-height: 100%;\n  border-bottom: 1px solid rgba(0, 0, 0, 0.2);\n  -webkit-transform: translateY(-100%);\n  transform: translateY(-100%);\n}\n\n.offcanvas-bottom {\n  right: 0;\n  left: 0;\n  height: 30vh;\n  max-height: 100%;\n  border-top: 1px solid rgba(0, 0, 0, 0.2);\n  -webkit-transform: translateY(100%);\n  transform: translateY(100%);\n}\n\n.offcanvas.show {\n  -webkit-transform: none;\n  transform: none;\n}\n\n.placeholder {\n  display: inline-block;\n  min-height: 1em;\n  vertical-align: middle;\n  cursor: wait;\n  background-color: currentColor;\n  opacity: 0.5;\n}\n\n.placeholder.btn::before {\n  display: inline-block;\n  content: \"\";\n}\n\n.placeholder-xs {\n  min-height: .6em;\n}\n\n.placeholder-sm {\n  min-height: .8em;\n}\n\n.placeholder-lg {\n  min-height: 1.2em;\n}\n\n.placeholder-glow .placeholder {\n  -webkit-animation: placeholder-glow 2s ease-in-out infinite;\n  animation: placeholder-glow 2s ease-in-out infinite;\n}\n\n@-webkit-keyframes placeholder-glow {\n  50% {\n    opacity: 0.2;\n  }\n}\n\n@keyframes placeholder-glow {\n  50% {\n    opacity: 0.2;\n  }\n}\n\n.placeholder-wave {\n  -webkit-mask-image: linear-gradient(130deg, #000 55%, rgba(0, 0, 0, 0.8) 75%, #000 95%);\n  mask-image: linear-gradient(130deg, #000 55%, rgba(0, 0, 0, 0.8) 75%, #000 95%);\n  -webkit-mask-size: 200% 100%;\n  mask-size: 200% 100%;\n  -webkit-animation: placeholder-wave 2s linear infinite;\n  animation: placeholder-wave 2s linear infinite;\n}\n\n@-webkit-keyframes placeholder-wave {\n  100% {\n    -webkit-mask-position: -200% 0%;\n    mask-position: -200% 0%;\n  }\n}\n\n@keyframes placeholder-wave {\n  100% {\n    -webkit-mask-position: -200% 0%;\n    mask-position: -200% 0%;\n  }\n}\n\n.clearfix::after {\n  display: block;\n  clear: both;\n  content: \"\";\n}\n\n.link-primary {\n  color: #1a1a1a;\n}\n\n.link-primary:hover, .link-primary:focus {\n  color: #151515;\n}\n\n.link-secondary {\n  color: #fff;\n}\n\n.link-secondary:hover, .link-secondary:focus {\n  color: white;\n}\n\n.link-success {\n  color: #4bbf73;\n}\n\n.link-success:hover, .link-success:focus {\n  color: #3c995c;\n}\n\n.link-info {\n  color: #1f9bcf;\n}\n\n.link-info:hover, .link-info:focus {\n  color: #197ca6;\n}\n\n.link-warning {\n  color: #f0ad4e;\n}\n\n.link-warning:hover, .link-warning:focus {\n  color: #f3bd71;\n}\n\n.link-danger {\n  color: #d9534f;\n}\n\n.link-danger:hover, .link-danger:focus {\n  color: #ae423f;\n}\n\n.link-light {\n  color: #fff;\n}\n\n.link-light:hover, .link-light:focus {\n  color: white;\n}\n\n.link-dark {\n  color: #343a40;\n}\n\n.link-dark:hover, .link-dark:focus {\n  color: #2a2e33;\n}\n\n.ratio {\n  position: relative;\n  width: 100%;\n}\n\n.ratio::before {\n  display: block;\n  padding-top: var(--bs-aspect-ratio);\n  content: \"\";\n}\n\n.ratio > * {\n  position: absolute;\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n}\n\n.ratio-1x1 {\n  --bs-aspect-ratio: 100%;\n}\n\n.ratio-4x3 {\n  --bs-aspect-ratio: calc(3 / 4 * 100%);\n}\n\n.ratio-16x9 {\n  --bs-aspect-ratio: calc(9 / 16 * 100%);\n}\n\n.ratio-21x9 {\n  --bs-aspect-ratio: calc(9 / 21 * 100%);\n}\n\n.fixed-top {\n  position: fixed;\n  top: 0;\n  right: 0;\n  left: 0;\n  z-index: 1030;\n}\n\n.fixed-bottom {\n  position: fixed;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 1030;\n}\n\n.sticky-top {\n  position: -webkit-sticky;\n  position: sticky;\n  top: 0;\n  z-index: 1020;\n}\n\n@media (min-width: 576px) {\n  .sticky-sm-top {\n    position: -webkit-sticky;\n    position: sticky;\n    top: 0;\n    z-index: 1020;\n  }\n}\n\n@media (min-width: 768px) {\n  .sticky-md-top {\n    position: -webkit-sticky;\n    position: sticky;\n    top: 0;\n    z-index: 1020;\n  }\n}\n\n@media (min-width: 992px) {\n  .sticky-lg-top {\n    position: -webkit-sticky;\n    position: sticky;\n    top: 0;\n    z-index: 1020;\n  }\n}\n\n@media (min-width: 1200px) {\n  .sticky-xl-top {\n    position: -webkit-sticky;\n    position: sticky;\n    top: 0;\n    z-index: 1020;\n  }\n}\n\n@media (min-width: 1400px) {\n  .sticky-xxl-top {\n    position: -webkit-sticky;\n    position: sticky;\n    top: 0;\n    z-index: 1020;\n  }\n}\n\n.hstack {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-direction: row;\n  flex-direction: row;\n  -ms-flex-align: center;\n  align-items: center;\n  -ms-flex-item-align: stretch;\n  align-self: stretch;\n}\n\n.vstack {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex: 1 1 auto;\n  flex: 1 1 auto;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  -ms-flex-item-align: stretch;\n  align-self: stretch;\n}\n\n.visually-hidden,\n.visually-hidden-focusable:not(:focus):not(:focus-within) {\n  position: absolute !important;\n  width: 1px !important;\n  height: 1px !important;\n  padding: 0 !important;\n  margin: -1px !important;\n  overflow: hidden !important;\n  clip: rect(0, 0, 0, 0) !important;\n  white-space: nowrap !important;\n  border: 0 !important;\n}\n\n.stretched-link::after {\n  position: absolute;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 1;\n  content: \"\";\n}\n\n.text-truncate {\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n}\n\n.vr {\n  display: inline-block;\n  -ms-flex-item-align: stretch;\n  align-self: stretch;\n  width: 1px;\n  min-height: 1em;\n  background-color: currentColor;\n  opacity: 0.25;\n}\n\n.align-baseline {\n  vertical-align: baseline !important;\n}\n\n.align-top {\n  vertical-align: top !important;\n}\n\n.align-middle {\n  vertical-align: middle !important;\n}\n\n.align-bottom {\n  vertical-align: bottom !important;\n}\n\n.align-text-bottom {\n  vertical-align: text-bottom !important;\n}\n\n.align-text-top {\n  vertical-align: text-top !important;\n}\n\n.float-start {\n  float: left !important;\n}\n\n.float-end {\n  float: right !important;\n}\n\n.float-none {\n  float: none !important;\n}\n\n.opacity-0 {\n  opacity: 0 !important;\n}\n\n.opacity-25 {\n  opacity: 0.25 !important;\n}\n\n.opacity-50 {\n  opacity: 0.5 !important;\n}\n\n.opacity-75 {\n  opacity: 0.75 !important;\n}\n\n.opacity-100 {\n  opacity: 1 !important;\n}\n\n.overflow-auto {\n  overflow: auto !important;\n}\n\n.overflow-hidden {\n  overflow: hidden !important;\n}\n\n.overflow-visible {\n  overflow: visible !important;\n}\n\n.overflow-scroll {\n  overflow: scroll !important;\n}\n\n.d-inline {\n  display: inline !important;\n}\n\n.d-inline-block {\n  display: inline-block !important;\n}\n\n.d-block {\n  display: block !important;\n}\n\n.d-grid {\n  display: grid !important;\n}\n\n.d-table {\n  display: table !important;\n}\n\n.d-table-row {\n  display: table-row !important;\n}\n\n.d-table-cell {\n  display: table-cell !important;\n}\n\n.d-flex {\n  display: -ms-flexbox !important;\n  display: flex !important;\n}\n\n.d-inline-flex {\n  display: -ms-inline-flexbox !important;\n  display: inline-flex !important;\n}\n\n.d-none {\n  display: none !important;\n}\n\n.shadow {\n  box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15) !important;\n}\n\n.shadow-sm {\n  box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075) !important;\n}\n\n.shadow-lg {\n  box-shadow: 0 1rem 3rem rgba(0, 0, 0, 0.175) !important;\n}\n\n.shadow-none {\n  box-shadow: none !important;\n}\n\n.position-static {\n  position: static !important;\n}\n\n.position-relative {\n  position: relative !important;\n}\n\n.position-absolute {\n  position: absolute !important;\n}\n\n.position-fixed {\n  position: fixed !important;\n}\n\n.position-sticky {\n  position: -webkit-sticky !important;\n  position: sticky !important;\n}\n\n.top-0 {\n  top: 0 !important;\n}\n\n.top-50 {\n  top: 50% !important;\n}\n\n.top-100 {\n  top: 100% !important;\n}\n\n.bottom-0 {\n  bottom: 0 !important;\n}\n\n.bottom-50 {\n  bottom: 50% !important;\n}\n\n.bottom-100 {\n  bottom: 100% !important;\n}\n\n.start-0 {\n  left: 0 !important;\n}\n\n.start-50 {\n  left: 50% !important;\n}\n\n.start-100 {\n  left: 100% !important;\n}\n\n.end-0 {\n  right: 0 !important;\n}\n\n.end-50 {\n  right: 50% !important;\n}\n\n.end-100 {\n  right: 100% !important;\n}\n\n.translate-middle {\n  -webkit-transform: translate(-50%, -50%) !important;\n  transform: translate(-50%, -50%) !important;\n}\n\n.translate-middle-x {\n  -webkit-transform: translateX(-50%) !important;\n  transform: translateX(-50%) !important;\n}\n\n.translate-middle-y {\n  -webkit-transform: translateY(-50%) !important;\n  transform: translateY(-50%) !important;\n}\n\n.border {\n  border: 1px solid #eceeef !important;\n}\n\n.border-0 {\n  border: 0 !important;\n}\n\n.border-top {\n  border-top: 1px solid #eceeef !important;\n}\n\n.border-top-0 {\n  border-top: 0 !important;\n}\n\n.border-end {\n  border-right: 1px solid #eceeef !important;\n}\n\n.border-end-0 {\n  border-right: 0 !important;\n}\n\n.border-bottom {\n  border-bottom: 1px solid #eceeef !important;\n}\n\n.border-bottom-0 {\n  border-bottom: 0 !important;\n}\n\n.border-start {\n  border-left: 1px solid #eceeef !important;\n}\n\n.border-start-0 {\n  border-left: 0 !important;\n}\n\n.border-primary {\n  border-color: #1a1a1a !important;\n}\n\n.border-secondary {\n  border-color: #fff !important;\n}\n\n.border-success {\n  border-color: #4bbf73 !important;\n}\n\n.border-info {\n  border-color: #1f9bcf !important;\n}\n\n.border-warning {\n  border-color: #f0ad4e !important;\n}\n\n.border-danger {\n  border-color: #d9534f !important;\n}\n\n.border-light {\n  border-color: #fff !important;\n}\n\n.border-dark {\n  border-color: #343a40 !important;\n}\n\n.border-white {\n  border-color: #fff !important;\n}\n\n.border-1 {\n  border-width: 1px !important;\n}\n\n.border-2 {\n  border-width: 2px !important;\n}\n\n.border-3 {\n  border-width: 3px !important;\n}\n\n.border-4 {\n  border-width: 4px !important;\n}\n\n.border-5 {\n  border-width: 5px !important;\n}\n\n.w-25 {\n  width: 25% !important;\n}\n\n.w-50 {\n  width: 50% !important;\n}\n\n.w-75 {\n  width: 75% !important;\n}\n\n.w-100 {\n  width: 100% !important;\n}\n\n.w-auto {\n  width: auto !important;\n}\n\n.mw-100 {\n  max-width: 100% !important;\n}\n\n.vw-100 {\n  width: 100vw !important;\n}\n\n.min-vw-100 {\n  min-width: 100vw !important;\n}\n\n.h-25 {\n  height: 25% !important;\n}\n\n.h-50 {\n  height: 50% !important;\n}\n\n.h-75 {\n  height: 75% !important;\n}\n\n.h-100 {\n  height: 100% !important;\n}\n\n.h-auto {\n  height: auto !important;\n}\n\n.mh-100 {\n  max-height: 100% !important;\n}\n\n.vh-100 {\n  height: 100vh !important;\n}\n\n.min-vh-100 {\n  min-height: 100vh !important;\n}\n\n.flex-fill {\n  -ms-flex: 1 1 auto !important;\n  flex: 1 1 auto !important;\n}\n\n.flex-row {\n  -ms-flex-direction: row !important;\n  flex-direction: row !important;\n}\n\n.flex-column {\n  -ms-flex-direction: column !important;\n  flex-direction: column !important;\n}\n\n.flex-row-reverse {\n  -ms-flex-direction: row-reverse !important;\n  flex-direction: row-reverse !important;\n}\n\n.flex-column-reverse {\n  -ms-flex-direction: column-reverse !important;\n  flex-direction: column-reverse !important;\n}\n\n.flex-grow-0 {\n  -ms-flex-positive: 0 !important;\n  flex-grow: 0 !important;\n}\n\n.flex-grow-1 {\n  -ms-flex-positive: 1 !important;\n  flex-grow: 1 !important;\n}\n\n.flex-shrink-0 {\n  -ms-flex-negative: 0 !important;\n  flex-shrink: 0 !important;\n}\n\n.flex-shrink-1 {\n  -ms-flex-negative: 1 !important;\n  flex-shrink: 1 !important;\n}\n\n.flex-wrap {\n  -ms-flex-wrap: wrap !important;\n  flex-wrap: wrap !important;\n}\n\n.flex-nowrap {\n  -ms-flex-wrap: nowrap !important;\n  flex-wrap: nowrap !important;\n}\n\n.flex-wrap-reverse {\n  -ms-flex-wrap: wrap-reverse !important;\n  flex-wrap: wrap-reverse !important;\n}\n\n.gap-0 {\n  gap: 0 !important;\n}\n\n.gap-1 {\n  gap: 0.25rem !important;\n}\n\n.gap-2 {\n  gap: 0.5rem !important;\n}\n\n.gap-3 {\n  gap: 1rem !important;\n}\n\n.gap-4 {\n  gap: 1.5rem !important;\n}\n\n.gap-5 {\n  gap: 3rem !important;\n}\n\n.justify-content-start {\n  -ms-flex-pack: start !important;\n  justify-content: flex-start !important;\n}\n\n.justify-content-end {\n  -ms-flex-pack: end !important;\n  justify-content: flex-end !important;\n}\n\n.justify-content-center {\n  -ms-flex-pack: center !important;\n  justify-content: center !important;\n}\n\n.justify-content-between {\n  -ms-flex-pack: justify !important;\n  justify-content: space-between !important;\n}\n\n.justify-content-around {\n  -ms-flex-pack: distribute !important;\n  justify-content: space-around !important;\n}\n\n.justify-content-evenly {\n  -ms-flex-pack: space-evenly !important;\n  justify-content: space-evenly !important;\n}\n\n.align-items-start {\n  -ms-flex-align: start !important;\n  align-items: flex-start !important;\n}\n\n.align-items-end {\n  -ms-flex-align: end !important;\n  align-items: flex-end !important;\n}\n\n.align-items-center {\n  -ms-flex-align: center !important;\n  align-items: center !important;\n}\n\n.align-items-baseline {\n  -ms-flex-align: baseline !important;\n  align-items: baseline !important;\n}\n\n.align-items-stretch {\n  -ms-flex-align: stretch !important;\n  align-items: stretch !important;\n}\n\n.align-content-start {\n  -ms-flex-line-pack: start !important;\n  align-content: flex-start !important;\n}\n\n.align-content-end {\n  -ms-flex-line-pack: end !important;\n  align-content: flex-end !important;\n}\n\n.align-content-center {\n  -ms-flex-line-pack: center !important;\n  align-content: center !important;\n}\n\n.align-content-between {\n  -ms-flex-line-pack: justify !important;\n  align-content: space-between !important;\n}\n\n.align-content-around {\n  -ms-flex-line-pack: distribute !important;\n  align-content: space-around !important;\n}\n\n.align-content-stretch {\n  -ms-flex-line-pack: stretch !important;\n  align-content: stretch !important;\n}\n\n.align-self-auto {\n  -ms-flex-item-align: auto !important;\n  align-self: auto !important;\n}\n\n.align-self-start {\n  -ms-flex-item-align: start !important;\n  align-self: flex-start !important;\n}\n\n.align-self-end {\n  -ms-flex-item-align: end !important;\n  align-self: flex-end !important;\n}\n\n.align-self-center {\n  -ms-flex-item-align: center !important;\n  align-self: center !important;\n}\n\n.align-self-baseline {\n  -ms-flex-item-align: baseline !important;\n  align-self: baseline !important;\n}\n\n.align-self-stretch {\n  -ms-flex-item-align: stretch !important;\n  align-self: stretch !important;\n}\n\n.order-first {\n  -ms-flex-order: -1 !important;\n  order: -1 !important;\n}\n\n.order-0 {\n  -ms-flex-order: 0 !important;\n  order: 0 !important;\n}\n\n.order-1 {\n  -ms-flex-order: 1 !important;\n  order: 1 !important;\n}\n\n.order-2 {\n  -ms-flex-order: 2 !important;\n  order: 2 !important;\n}\n\n.order-3 {\n  -ms-flex-order: 3 !important;\n  order: 3 !important;\n}\n\n.order-4 {\n  -ms-flex-order: 4 !important;\n  order: 4 !important;\n}\n\n.order-5 {\n  -ms-flex-order: 5 !important;\n  order: 5 !important;\n}\n\n.order-last {\n  -ms-flex-order: 6 !important;\n  order: 6 !important;\n}\n\n.m-0 {\n  margin: 0 !important;\n}\n\n.m-1 {\n  margin: 0.25rem !important;\n}\n\n.m-2 {\n  margin: 0.5rem !important;\n}\n\n.m-3 {\n  margin: 1rem !important;\n}\n\n.m-4 {\n  margin: 1.5rem !important;\n}\n\n.m-5 {\n  margin: 3rem !important;\n}\n\n.m-auto {\n  margin: auto !important;\n}\n\n.mx-0 {\n  margin-right: 0 !important;\n  margin-left: 0 !important;\n}\n\n.mx-1 {\n  margin-right: 0.25rem !important;\n  margin-left: 0.25rem !important;\n}\n\n.mx-2 {\n  margin-right: 0.5rem !important;\n  margin-left: 0.5rem !important;\n}\n\n.mx-3 {\n  margin-right: 1rem !important;\n  margin-left: 1rem !important;\n}\n\n.mx-4 {\n  margin-right: 1.5rem !important;\n  margin-left: 1.5rem !important;\n}\n\n.mx-5 {\n  margin-right: 3rem !important;\n  margin-left: 3rem !important;\n}\n\n.mx-auto {\n  margin-right: auto !important;\n  margin-left: auto !important;\n}\n\n.my-0 {\n  margin-top: 0 !important;\n  margin-bottom: 0 !important;\n}\n\n.my-1 {\n  margin-top: 0.25rem !important;\n  margin-bottom: 0.25rem !important;\n}\n\n.my-2 {\n  margin-top: 0.5rem !important;\n  margin-bottom: 0.5rem !important;\n}\n\n.my-3 {\n  margin-top: 1rem !important;\n  margin-bottom: 1rem !important;\n}\n\n.my-4 {\n  margin-top: 1.5rem !important;\n  margin-bottom: 1.5rem !important;\n}\n\n.my-5 {\n  margin-top: 3rem !important;\n  margin-bottom: 3rem !important;\n}\n\n.my-auto {\n  margin-top: auto !important;\n  margin-bottom: auto !important;\n}\n\n.mt-0 {\n  margin-top: 0 !important;\n}\n\n.mt-1 {\n  margin-top: 0.25rem !important;\n}\n\n.mt-2 {\n  margin-top: 0.5rem !important;\n}\n\n.mt-3 {\n  margin-top: 1rem !important;\n}\n\n.mt-4 {\n  margin-top: 1.5rem !important;\n}\n\n.mt-5 {\n  margin-top: 3rem !important;\n}\n\n.mt-auto {\n  margin-top: auto !important;\n}\n\n.me-0 {\n  margin-right: 0 !important;\n}\n\n.me-1 {\n  margin-right: 0.25rem !important;\n}\n\n.me-2 {\n  margin-right: 0.5rem !important;\n}\n\n.me-3 {\n  margin-right: 1rem !important;\n}\n\n.me-4 {\n  margin-right: 1.5rem !important;\n}\n\n.me-5 {\n  margin-right: 3rem !important;\n}\n\n.me-auto {\n  margin-right: auto !important;\n}\n\n.mb-0 {\n  margin-bottom: 0 !important;\n}\n\n.mb-1 {\n  margin-bottom: 0.25rem !important;\n}\n\n.mb-2 {\n  margin-bottom: 0.5rem !important;\n}\n\n.mb-3 {\n  margin-bottom: 1rem !important;\n}\n\n.mb-4 {\n  margin-bottom: 1.5rem !important;\n}\n\n.mb-5 {\n  margin-bottom: 3rem !important;\n}\n\n.mb-auto {\n  margin-bottom: auto !important;\n}\n\n.ms-0 {\n  margin-left: 0 !important;\n}\n\n.ms-1 {\n  margin-left: 0.25rem !important;\n}\n\n.ms-2 {\n  margin-left: 0.5rem !important;\n}\n\n.ms-3 {\n  margin-left: 1rem !important;\n}\n\n.ms-4 {\n  margin-left: 1.5rem !important;\n}\n\n.ms-5 {\n  margin-left: 3rem !important;\n}\n\n.ms-auto {\n  margin-left: auto !important;\n}\n\n.p-0 {\n  padding: 0 !important;\n}\n\n.p-1 {\n  padding: 0.25rem !important;\n}\n\n.p-2 {\n  padding: 0.5rem !important;\n}\n\n.p-3 {\n  padding: 1rem !important;\n}\n\n.p-4 {\n  padding: 1.5rem !important;\n}\n\n.p-5 {\n  padding: 3rem !important;\n}\n\n.px-0 {\n  padding-right: 0 !important;\n  padding-left: 0 !important;\n}\n\n.px-1 {\n  padding-right: 0.25rem !important;\n  padding-left: 0.25rem !important;\n}\n\n.px-2 {\n  padding-right: 0.5rem !important;\n  padding-left: 0.5rem !important;\n}\n\n.px-3 {\n  padding-right: 1rem !important;\n  padding-left: 1rem !important;\n}\n\n.px-4 {\n  padding-right: 1.5rem !important;\n  padding-left: 1.5rem !important;\n}\n\n.px-5 {\n  padding-right: 3rem !important;\n  padding-left: 3rem !important;\n}\n\n.py-0 {\n  padding-top: 0 !important;\n  padding-bottom: 0 !important;\n}\n\n.py-1 {\n  padding-top: 0.25rem !important;\n  padding-bottom: 0.25rem !important;\n}\n\n.py-2 {\n  padding-top: 0.5rem !important;\n  padding-bottom: 0.5rem !important;\n}\n\n.py-3 {\n  padding-top: 1rem !important;\n  padding-bottom: 1rem !important;\n}\n\n.py-4 {\n  padding-top: 1.5rem !important;\n  padding-bottom: 1.5rem !important;\n}\n\n.py-5 {\n  padding-top: 3rem !important;\n  padding-bottom: 3rem !important;\n}\n\n.pt-0 {\n  padding-top: 0 !important;\n}\n\n.pt-1 {\n  padding-top: 0.25rem !important;\n}\n\n.pt-2 {\n  padding-top: 0.5rem !important;\n}\n\n.pt-3 {\n  padding-top: 1rem !important;\n}\n\n.pt-4 {\n  padding-top: 1.5rem !important;\n}\n\n.pt-5 {\n  padding-top: 3rem !important;\n}\n\n.pe-0 {\n  padding-right: 0 !important;\n}\n\n.pe-1 {\n  padding-right: 0.25rem !important;\n}\n\n.pe-2 {\n  padding-right: 0.5rem !important;\n}\n\n.pe-3 {\n  padding-right: 1rem !important;\n}\n\n.pe-4 {\n  padding-right: 1.5rem !important;\n}\n\n.pe-5 {\n  padding-right: 3rem !important;\n}\n\n.pb-0 {\n  padding-bottom: 0 !important;\n}\n\n.pb-1 {\n  padding-bottom: 0.25rem !important;\n}\n\n.pb-2 {\n  padding-bottom: 0.5rem !important;\n}\n\n.pb-3 {\n  padding-bottom: 1rem !important;\n}\n\n.pb-4 {\n  padding-bottom: 1.5rem !important;\n}\n\n.pb-5 {\n  padding-bottom: 3rem !important;\n}\n\n.ps-0 {\n  padding-left: 0 !important;\n}\n\n.ps-1 {\n  padding-left: 0.25rem !important;\n}\n\n.ps-2 {\n  padding-left: 0.5rem !important;\n}\n\n.ps-3 {\n  padding-left: 1rem !important;\n}\n\n.ps-4 {\n  padding-left: 1.5rem !important;\n}\n\n.ps-5 {\n  padding-left: 3rem !important;\n}\n\n.font-monospace {\n  font-family: var(--bs-font-monospace) !important;\n}\n\n.fs-1 {\n  font-size: calc(1.325rem + 0.9vw) !important;\n}\n\n.fs-2 {\n  font-size: calc(1.3rem + 0.6vw) !important;\n}\n\n.fs-3 {\n  font-size: calc(1.275rem + 0.3vw) !important;\n}\n\n.fs-4 {\n  font-size: 1.25rem !important;\n}\n\n.fs-5 {\n  font-size: 1rem !important;\n}\n\n.fs-6 {\n  font-size: 0.75rem !important;\n}\n\n.fst-italic {\n  font-style: italic !important;\n}\n\n.fst-normal {\n  font-style: normal !important;\n}\n\n.fw-light {\n  font-weight: 300 !important;\n}\n\n.fw-lighter {\n  font-weight: lighter !important;\n}\n\n.fw-normal {\n  font-weight: 400 !important;\n}\n\n.fw-bold {\n  font-weight: 700 !important;\n}\n\n.fw-bolder {\n  font-weight: bolder !important;\n}\n\n.lh-1 {\n  line-height: 1 !important;\n}\n\n.lh-sm {\n  line-height: 1.25 !important;\n}\n\n.lh-base {\n  line-height: 1.5 !important;\n}\n\n.lh-lg {\n  line-height: 2 !important;\n}\n\n.text-start {\n  text-align: left !important;\n}\n\n.text-end {\n  text-align: right !important;\n}\n\n.text-center {\n  text-align: center !important;\n}\n\n.text-decoration-none {\n  text-decoration: none !important;\n}\n\n.text-decoration-underline {\n  text-decoration: underline !important;\n}\n\n.text-decoration-line-through {\n  text-decoration: line-through !important;\n}\n\n.text-lowercase {\n  text-transform: lowercase !important;\n}\n\n.text-uppercase {\n  text-transform: uppercase !important;\n}\n\n.text-capitalize {\n  text-transform: capitalize !important;\n}\n\n.text-wrap {\n  white-space: normal !important;\n}\n\n.text-nowrap {\n  white-space: nowrap !important;\n}\n\n/* rtl:begin:remove */\n.text-break {\n  word-wrap: break-word !important;\n  word-break: break-word !important;\n}\n\n/* rtl:end:remove */\n.text-primary {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-primary-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-secondary {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-secondary-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-success {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-success-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-info {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-info-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-warning {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-warning-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-danger {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-danger-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-light {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-light-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-dark {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-dark-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-black {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-black-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-white {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-white-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-body {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-body-color-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-muted {\n  --bs-text-opacity: 1;\n  color: #919aa1 !important;\n}\n\n.text-black-50 {\n  --bs-text-opacity: 1;\n  color: rgba(0, 0, 0, 0.5) !important;\n}\n\n.text-white-50 {\n  --bs-text-opacity: 1;\n  color: rgba(255, 255, 255, 0.5) !important;\n}\n\n.text-reset {\n  --bs-text-opacity: 1;\n  color: inherit !important;\n}\n\n.text-opacity-25 {\n  --bs-text-opacity: 0.25;\n}\n\n.text-opacity-50 {\n  --bs-text-opacity: 0.5;\n}\n\n.text-opacity-75 {\n  --bs-text-opacity: 0.75;\n}\n\n.text-opacity-100 {\n  --bs-text-opacity: 1;\n}\n\n.bg-primary {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-primary-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-secondary {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-secondary-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-success {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-success-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-info {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-info-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-warning {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-warning-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-danger {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-danger-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-light {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-light-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-dark {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-dark-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-black {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-black-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-white {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-white-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-body {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-body-bg-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-transparent {\n  --bs-bg-opacity: 1;\n  background-color: transparent !important;\n}\n\n.bg-opacity-10 {\n  --bs-bg-opacity: 0.1;\n}\n\n.bg-opacity-25 {\n  --bs-bg-opacity: 0.25;\n}\n\n.bg-opacity-50 {\n  --bs-bg-opacity: 0.5;\n}\n\n.bg-opacity-75 {\n  --bs-bg-opacity: 0.75;\n}\n\n.bg-opacity-100 {\n  --bs-bg-opacity: 1;\n}\n\n.bg-gradient {\n  background-image: var(--bs-gradient) !important;\n}\n\n.user-select-all {\n  -webkit-user-select: all !important;\n  -moz-user-select: all !important;\n  user-select: all !important;\n}\n\n.user-select-auto {\n  -webkit-user-select: auto !important;\n  -moz-user-select: auto !important;\n  -ms-user-select: auto !important;\n  user-select: auto !important;\n}\n\n.user-select-none {\n  -webkit-user-select: none !important;\n  -moz-user-select: none !important;\n  -ms-user-select: none !important;\n  user-select: none !important;\n}\n\n.pe-none {\n  pointer-events: none !important;\n}\n\n.pe-auto {\n  pointer-events: auto !important;\n}\n\n.rounded {\n  border-radius: 0.25rem !important;\n}\n\n.rounded-0 {\n  border-radius: 0 !important;\n}\n\n.rounded-1 {\n  border-radius: 0.2rem !important;\n}\n\n.rounded-2 {\n  border-radius: 0.25rem !important;\n}\n\n.rounded-3 {\n  border-radius: 0.3rem !important;\n}\n\n.rounded-circle {\n  border-radius: 50% !important;\n}\n\n.rounded-pill {\n  border-radius: 50rem !important;\n}\n\n.rounded-top {\n  border-top-left-radius: 0.25rem !important;\n  border-top-right-radius: 0.25rem !important;\n}\n\n.rounded-end {\n  border-top-right-radius: 0.25rem !important;\n  border-bottom-right-radius: 0.25rem !important;\n}\n\n.rounded-bottom {\n  border-bottom-right-radius: 0.25rem !important;\n  border-bottom-left-radius: 0.25rem !important;\n}\n\n.rounded-start {\n  border-bottom-left-radius: 0.25rem !important;\n  border-top-left-radius: 0.25rem !important;\n}\n\n.visible {\n  visibility: visible !important;\n}\n\n.invisible {\n  visibility: hidden !important;\n}\n\n@media (min-width: 576px) {\n  .float-sm-start {\n    float: left !important;\n  }\n  .float-sm-end {\n    float: right !important;\n  }\n  .float-sm-none {\n    float: none !important;\n  }\n  .d-sm-inline {\n    display: inline !important;\n  }\n  .d-sm-inline-block {\n    display: inline-block !important;\n  }\n  .d-sm-block {\n    display: block !important;\n  }\n  .d-sm-grid {\n    display: grid !important;\n  }\n  .d-sm-table {\n    display: table !important;\n  }\n  .d-sm-table-row {\n    display: table-row !important;\n  }\n  .d-sm-table-cell {\n    display: table-cell !important;\n  }\n  .d-sm-flex {\n    display: -ms-flexbox !important;\n    display: flex !important;\n  }\n  .d-sm-inline-flex {\n    display: -ms-inline-flexbox !important;\n    display: inline-flex !important;\n  }\n  .d-sm-none {\n    display: none !important;\n  }\n  .flex-sm-fill {\n    -ms-flex: 1 1 auto !important;\n    flex: 1 1 auto !important;\n  }\n  .flex-sm-row {\n    -ms-flex-direction: row !important;\n    flex-direction: row !important;\n  }\n  .flex-sm-column {\n    -ms-flex-direction: column !important;\n    flex-direction: column !important;\n  }\n  .flex-sm-row-reverse {\n    -ms-flex-direction: row-reverse !important;\n    flex-direction: row-reverse !important;\n  }\n  .flex-sm-column-reverse {\n    -ms-flex-direction: column-reverse !important;\n    flex-direction: column-reverse !important;\n  }\n  .flex-sm-grow-0 {\n    -ms-flex-positive: 0 !important;\n    flex-grow: 0 !important;\n  }\n  .flex-sm-grow-1 {\n    -ms-flex-positive: 1 !important;\n    flex-grow: 1 !important;\n  }\n  .flex-sm-shrink-0 {\n    -ms-flex-negative: 0 !important;\n    flex-shrink: 0 !important;\n  }\n  .flex-sm-shrink-1 {\n    -ms-flex-negative: 1 !important;\n    flex-shrink: 1 !important;\n  }\n  .flex-sm-wrap {\n    -ms-flex-wrap: wrap !important;\n    flex-wrap: wrap !important;\n  }\n  .flex-sm-nowrap {\n    -ms-flex-wrap: nowrap !important;\n    flex-wrap: nowrap !important;\n  }\n  .flex-sm-wrap-reverse {\n    -ms-flex-wrap: wrap-reverse !important;\n    flex-wrap: wrap-reverse !important;\n  }\n  .gap-sm-0 {\n    gap: 0 !important;\n  }\n  .gap-sm-1 {\n    gap: 0.25rem !important;\n  }\n  .gap-sm-2 {\n    gap: 0.5rem !important;\n  }\n  .gap-sm-3 {\n    gap: 1rem !important;\n  }\n  .gap-sm-4 {\n    gap: 1.5rem !important;\n  }\n  .gap-sm-5 {\n    gap: 3rem !important;\n  }\n  .justify-content-sm-start {\n    -ms-flex-pack: start !important;\n    justify-content: flex-start !important;\n  }\n  .justify-content-sm-end {\n    -ms-flex-pack: end !important;\n    justify-content: flex-end !important;\n  }\n  .justify-content-sm-center {\n    -ms-flex-pack: center !important;\n    justify-content: center !important;\n  }\n  .justify-content-sm-between {\n    -ms-flex-pack: justify !important;\n    justify-content: space-between !important;\n  }\n  .justify-content-sm-around {\n    -ms-flex-pack: distribute !important;\n    justify-content: space-around !important;\n  }\n  .justify-content-sm-evenly {\n    -ms-flex-pack: space-evenly !important;\n    justify-content: space-evenly !important;\n  }\n  .align-items-sm-start {\n    -ms-flex-align: start !important;\n    align-items: flex-start !important;\n  }\n  .align-items-sm-end {\n    -ms-flex-align: end !important;\n    align-items: flex-end !important;\n  }\n  .align-items-sm-center {\n    -ms-flex-align: center !important;\n    align-items: center !important;\n  }\n  .align-items-sm-baseline {\n    -ms-flex-align: baseline !important;\n    align-items: baseline !important;\n  }\n  .align-items-sm-stretch {\n    -ms-flex-align: stretch !important;\n    align-items: stretch !important;\n  }\n  .align-content-sm-start {\n    -ms-flex-line-pack: start !important;\n    align-content: flex-start !important;\n  }\n  .align-content-sm-end {\n    -ms-flex-line-pack: end !important;\n    align-content: flex-end !important;\n  }\n  .align-content-sm-center {\n    -ms-flex-line-pack: center !important;\n    align-content: center !important;\n  }\n  .align-content-sm-between {\n    -ms-flex-line-pack: justify !important;\n    align-content: space-between !important;\n  }\n  .align-content-sm-around {\n    -ms-flex-line-pack: distribute !important;\n    align-content: space-around !important;\n  }\n  .align-content-sm-stretch {\n    -ms-flex-line-pack: stretch !important;\n    align-content: stretch !important;\n  }\n  .align-self-sm-auto {\n    -ms-flex-item-align: auto !important;\n    align-self: auto !important;\n  }\n  .align-self-sm-start {\n    -ms-flex-item-align: start !important;\n    align-self: flex-start !important;\n  }\n  .align-self-sm-end {\n    -ms-flex-item-align: end !important;\n    align-self: flex-end !important;\n  }\n  .align-self-sm-center {\n    -ms-flex-item-align: center !important;\n    align-self: center !important;\n  }\n  .align-self-sm-baseline {\n    -ms-flex-item-align: baseline !important;\n    align-self: baseline !important;\n  }\n  .align-self-sm-stretch {\n    -ms-flex-item-align: stretch !important;\n    align-self: stretch !important;\n  }\n  .order-sm-first {\n    -ms-flex-order: -1 !important;\n    order: -1 !important;\n  }\n  .order-sm-0 {\n    -ms-flex-order: 0 !important;\n    order: 0 !important;\n  }\n  .order-sm-1 {\n    -ms-flex-order: 1 !important;\n    order: 1 !important;\n  }\n  .order-sm-2 {\n    -ms-flex-order: 2 !important;\n    order: 2 !important;\n  }\n  .order-sm-3 {\n    -ms-flex-order: 3 !important;\n    order: 3 !important;\n  }\n  .order-sm-4 {\n    -ms-flex-order: 4 !important;\n    order: 4 !important;\n  }\n  .order-sm-5 {\n    -ms-flex-order: 5 !important;\n    order: 5 !important;\n  }\n  .order-sm-last {\n    -ms-flex-order: 6 !important;\n    order: 6 !important;\n  }\n  .m-sm-0 {\n    margin: 0 !important;\n  }\n  .m-sm-1 {\n    margin: 0.25rem !important;\n  }\n  .m-sm-2 {\n    margin: 0.5rem !important;\n  }\n  .m-sm-3 {\n    margin: 1rem !important;\n  }\n  .m-sm-4 {\n    margin: 1.5rem !important;\n  }\n  .m-sm-5 {\n    margin: 3rem !important;\n  }\n  .m-sm-auto {\n    margin: auto !important;\n  }\n  .mx-sm-0 {\n    margin-right: 0 !important;\n    margin-left: 0 !important;\n  }\n  .mx-sm-1 {\n    margin-right: 0.25rem !important;\n    margin-left: 0.25rem !important;\n  }\n  .mx-sm-2 {\n    margin-right: 0.5rem !important;\n    margin-left: 0.5rem !important;\n  }\n  .mx-sm-3 {\n    margin-right: 1rem !important;\n    margin-left: 1rem !important;\n  }\n  .mx-sm-4 {\n    margin-right: 1.5rem !important;\n    margin-left: 1.5rem !important;\n  }\n  .mx-sm-5 {\n    margin-right: 3rem !important;\n    margin-left: 3rem !important;\n  }\n  .mx-sm-auto {\n    margin-right: auto !important;\n    margin-left: auto !important;\n  }\n  .my-sm-0 {\n    margin-top: 0 !important;\n    margin-bottom: 0 !important;\n  }\n  .my-sm-1 {\n    margin-top: 0.25rem !important;\n    margin-bottom: 0.25rem !important;\n  }\n  .my-sm-2 {\n    margin-top: 0.5rem !important;\n    margin-bottom: 0.5rem !important;\n  }\n  .my-sm-3 {\n    margin-top: 1rem !important;\n    margin-bottom: 1rem !important;\n  }\n  .my-sm-4 {\n    margin-top: 1.5rem !important;\n    margin-bottom: 1.5rem !important;\n  }\n  .my-sm-5 {\n    margin-top: 3rem !important;\n    margin-bottom: 3rem !important;\n  }\n  .my-sm-auto {\n    margin-top: auto !important;\n    margin-bottom: auto !important;\n  }\n  .mt-sm-0 {\n    margin-top: 0 !important;\n  }\n  .mt-sm-1 {\n    margin-top: 0.25rem !important;\n  }\n  .mt-sm-2 {\n    margin-top: 0.5rem !important;\n  }\n  .mt-sm-3 {\n    margin-top: 1rem !important;\n  }\n  .mt-sm-4 {\n    margin-top: 1.5rem !important;\n  }\n  .mt-sm-5 {\n    margin-top: 3rem !important;\n  }\n  .mt-sm-auto {\n    margin-top: auto !important;\n  }\n  .me-sm-0 {\n    margin-right: 0 !important;\n  }\n  .me-sm-1 {\n    margin-right: 0.25rem !important;\n  }\n  .me-sm-2 {\n    margin-right: 0.5rem !important;\n  }\n  .me-sm-3 {\n    margin-right: 1rem !important;\n  }\n  .me-sm-4 {\n    margin-right: 1.5rem !important;\n  }\n  .me-sm-5 {\n    margin-right: 3rem !important;\n  }\n  .me-sm-auto {\n    margin-right: auto !important;\n  }\n  .mb-sm-0 {\n    margin-bottom: 0 !important;\n  }\n  .mb-sm-1 {\n    margin-bottom: 0.25rem !important;\n  }\n  .mb-sm-2 {\n    margin-bottom: 0.5rem !important;\n  }\n  .mb-sm-3 {\n    margin-bottom: 1rem !important;\n  }\n  .mb-sm-4 {\n    margin-bottom: 1.5rem !important;\n  }\n  .mb-sm-5 {\n    margin-bottom: 3rem !important;\n  }\n  .mb-sm-auto {\n    margin-bottom: auto !important;\n  }\n  .ms-sm-0 {\n    margin-left: 0 !important;\n  }\n  .ms-sm-1 {\n    margin-left: 0.25rem !important;\n  }\n  .ms-sm-2 {\n    margin-left: 0.5rem !important;\n  }\n  .ms-sm-3 {\n    margin-left: 1rem !important;\n  }\n  .ms-sm-4 {\n    margin-left: 1.5rem !important;\n  }\n  .ms-sm-5 {\n    margin-left: 3rem !important;\n  }\n  .ms-sm-auto {\n    margin-left: auto !important;\n  }\n  .p-sm-0 {\n    padding: 0 !important;\n  }\n  .p-sm-1 {\n    padding: 0.25rem !important;\n  }\n  .p-sm-2 {\n    padding: 0.5rem !important;\n  }\n  .p-sm-3 {\n    padding: 1rem !important;\n  }\n  .p-sm-4 {\n    padding: 1.5rem !important;\n  }\n  .p-sm-5 {\n    padding: 3rem !important;\n  }\n  .px-sm-0 {\n    padding-right: 0 !important;\n    padding-left: 0 !important;\n  }\n  .px-sm-1 {\n    padding-right: 0.25rem !important;\n    padding-left: 0.25rem !important;\n  }\n  .px-sm-2 {\n    padding-right: 0.5rem !important;\n    padding-left: 0.5rem !important;\n  }\n  .px-sm-3 {\n    padding-right: 1rem !important;\n    padding-left: 1rem !important;\n  }\n  .px-sm-4 {\n    padding-right: 1.5rem !important;\n    padding-left: 1.5rem !important;\n  }\n  .px-sm-5 {\n    padding-right: 3rem !important;\n    padding-left: 3rem !important;\n  }\n  .py-sm-0 {\n    padding-top: 0 !important;\n    padding-bottom: 0 !important;\n  }\n  .py-sm-1 {\n    padding-top: 0.25rem !important;\n    padding-bottom: 0.25rem !important;\n  }\n  .py-sm-2 {\n    padding-top: 0.5rem !important;\n    padding-bottom: 0.5rem !important;\n  }\n  .py-sm-3 {\n    padding-top: 1rem !important;\n    padding-bottom: 1rem !important;\n  }\n  .py-sm-4 {\n    padding-top: 1.5rem !important;\n    padding-bottom: 1.5rem !important;\n  }\n  .py-sm-5 {\n    padding-top: 3rem !important;\n    padding-bottom: 3rem !important;\n  }\n  .pt-sm-0 {\n    padding-top: 0 !important;\n  }\n  .pt-sm-1 {\n    padding-top: 0.25rem !important;\n  }\n  .pt-sm-2 {\n    padding-top: 0.5rem !important;\n  }\n  .pt-sm-3 {\n    padding-top: 1rem !important;\n  }\n  .pt-sm-4 {\n    padding-top: 1.5rem !important;\n  }\n  .pt-sm-5 {\n    padding-top: 3rem !important;\n  }\n  .pe-sm-0 {\n    padding-right: 0 !important;\n  }\n  .pe-sm-1 {\n    padding-right: 0.25rem !important;\n  }\n  .pe-sm-2 {\n    padding-right: 0.5rem !important;\n  }\n  .pe-sm-3 {\n    padding-right: 1rem !important;\n  }\n  .pe-sm-4 {\n    padding-right: 1.5rem !important;\n  }\n  .pe-sm-5 {\n    padding-right: 3rem !important;\n  }\n  .pb-sm-0 {\n    padding-bottom: 0 !important;\n  }\n  .pb-sm-1 {\n    padding-bottom: 0.25rem !important;\n  }\n  .pb-sm-2 {\n    padding-bottom: 0.5rem !important;\n  }\n  .pb-sm-3 {\n    padding-bottom: 1rem !important;\n  }\n  .pb-sm-4 {\n    padding-bottom: 1.5rem !important;\n  }\n  .pb-sm-5 {\n    padding-bottom: 3rem !important;\n  }\n  .ps-sm-0 {\n    padding-left: 0 !important;\n  }\n  .ps-sm-1 {\n    padding-left: 0.25rem !important;\n  }\n  .ps-sm-2 {\n    padding-left: 0.5rem !important;\n  }\n  .ps-sm-3 {\n    padding-left: 1rem !important;\n  }\n  .ps-sm-4 {\n    padding-left: 1.5rem !important;\n  }\n  .ps-sm-5 {\n    padding-left: 3rem !important;\n  }\n  .text-sm-start {\n    text-align: left !important;\n  }\n  .text-sm-end {\n    text-align: right !important;\n  }\n  .text-sm-center {\n    text-align: center !important;\n  }\n}\n\n@media (min-width: 768px) {\n  .float-md-start {\n    float: left !important;\n  }\n  .float-md-end {\n    float: right !important;\n  }\n  .float-md-none {\n    float: none !important;\n  }\n  .d-md-inline {\n    display: inline !important;\n  }\n  .d-md-inline-block {\n    display: inline-block !important;\n  }\n  .d-md-block {\n    display: block !important;\n  }\n  .d-md-grid {\n    display: grid !important;\n  }\n  .d-md-table {\n    display: table !important;\n  }\n  .d-md-table-row {\n    display: table-row !important;\n  }\n  .d-md-table-cell {\n    display: table-cell !important;\n  }\n  .d-md-flex {\n    display: -ms-flexbox !important;\n    display: flex !important;\n  }\n  .d-md-inline-flex {\n    display: -ms-inline-flexbox !important;\n    display: inline-flex !important;\n  }\n  .d-md-none {\n    display: none !important;\n  }\n  .flex-md-fill {\n    -ms-flex: 1 1 auto !important;\n    flex: 1 1 auto !important;\n  }\n  .flex-md-row {\n    -ms-flex-direction: row !important;\n    flex-direction: row !important;\n  }\n  .flex-md-column {\n    -ms-flex-direction: column !important;\n    flex-direction: column !important;\n  }\n  .flex-md-row-reverse {\n    -ms-flex-direction: row-reverse !important;\n    flex-direction: row-reverse !important;\n  }\n  .flex-md-column-reverse {\n    -ms-flex-direction: column-reverse !important;\n    flex-direction: column-reverse !important;\n  }\n  .flex-md-grow-0 {\n    -ms-flex-positive: 0 !important;\n    flex-grow: 0 !important;\n  }\n  .flex-md-grow-1 {\n    -ms-flex-positive: 1 !important;\n    flex-grow: 1 !important;\n  }\n  .flex-md-shrink-0 {\n    -ms-flex-negative: 0 !important;\n    flex-shrink: 0 !important;\n  }\n  .flex-md-shrink-1 {\n    -ms-flex-negative: 1 !important;\n    flex-shrink: 1 !important;\n  }\n  .flex-md-wrap {\n    -ms-flex-wrap: wrap !important;\n    flex-wrap: wrap !important;\n  }\n  .flex-md-nowrap {\n    -ms-flex-wrap: nowrap !important;\n    flex-wrap: nowrap !important;\n  }\n  .flex-md-wrap-reverse {\n    -ms-flex-wrap: wrap-reverse !important;\n    flex-wrap: wrap-reverse !important;\n  }\n  .gap-md-0 {\n    gap: 0 !important;\n  }\n  .gap-md-1 {\n    gap: 0.25rem !important;\n  }\n  .gap-md-2 {\n    gap: 0.5rem !important;\n  }\n  .gap-md-3 {\n    gap: 1rem !important;\n  }\n  .gap-md-4 {\n    gap: 1.5rem !important;\n  }\n  .gap-md-5 {\n    gap: 3rem !important;\n  }\n  .justify-content-md-start {\n    -ms-flex-pack: start !important;\n    justify-content: flex-start !important;\n  }\n  .justify-content-md-end {\n    -ms-flex-pack: end !important;\n    justify-content: flex-end !important;\n  }\n  .justify-content-md-center {\n    -ms-flex-pack: center !important;\n    justify-content: center !important;\n  }\n  .justify-content-md-between {\n    -ms-flex-pack: justify !important;\n    justify-content: space-between !important;\n  }\n  .justify-content-md-around {\n    -ms-flex-pack: distribute !important;\n    justify-content: space-around !important;\n  }\n  .justify-content-md-evenly {\n    -ms-flex-pack: space-evenly !important;\n    justify-content: space-evenly !important;\n  }\n  .align-items-md-start {\n    -ms-flex-align: start !important;\n    align-items: flex-start !important;\n  }\n  .align-items-md-end {\n    -ms-flex-align: end !important;\n    align-items: flex-end !important;\n  }\n  .align-items-md-center {\n    -ms-flex-align: center !important;\n    align-items: center !important;\n  }\n  .align-items-md-baseline {\n    -ms-flex-align: baseline !important;\n    align-items: baseline !important;\n  }\n  .align-items-md-stretch {\n    -ms-flex-align: stretch !important;\n    align-items: stretch !important;\n  }\n  .align-content-md-start {\n    -ms-flex-line-pack: start !important;\n    align-content: flex-start !important;\n  }\n  .align-content-md-end {\n    -ms-flex-line-pack: end !important;\n    align-content: flex-end !important;\n  }\n  .align-content-md-center {\n    -ms-flex-line-pack: center !important;\n    align-content: center !important;\n  }\n  .align-content-md-between {\n    -ms-flex-line-pack: justify !important;\n    align-content: space-between !important;\n  }\n  .align-content-md-around {\n    -ms-flex-line-pack: distribute !important;\n    align-content: space-around !important;\n  }\n  .align-content-md-stretch {\n    -ms-flex-line-pack: stretch !important;\n    align-content: stretch !important;\n  }\n  .align-self-md-auto {\n    -ms-flex-item-align: auto !important;\n    align-self: auto !important;\n  }\n  .align-self-md-start {\n    -ms-flex-item-align: start !important;\n    align-self: flex-start !important;\n  }\n  .align-self-md-end {\n    -ms-flex-item-align: end !important;\n    align-self: flex-end !important;\n  }\n  .align-self-md-center {\n    -ms-flex-item-align: center !important;\n    align-self: center !important;\n  }\n  .align-self-md-baseline {\n    -ms-flex-item-align: baseline !important;\n    align-self: baseline !important;\n  }\n  .align-self-md-stretch {\n    -ms-flex-item-align: stretch !important;\n    align-self: stretch !important;\n  }\n  .order-md-first {\n    -ms-flex-order: -1 !important;\n    order: -1 !important;\n  }\n  .order-md-0 {\n    -ms-flex-order: 0 !important;\n    order: 0 !important;\n  }\n  .order-md-1 {\n    -ms-flex-order: 1 !important;\n    order: 1 !important;\n  }\n  .order-md-2 {\n    -ms-flex-order: 2 !important;\n    order: 2 !important;\n  }\n  .order-md-3 {\n    -ms-flex-order: 3 !important;\n    order: 3 !important;\n  }\n  .order-md-4 {\n    -ms-flex-order: 4 !important;\n    order: 4 !important;\n  }\n  .order-md-5 {\n    -ms-flex-order: 5 !important;\n    order: 5 !important;\n  }\n  .order-md-last {\n    -ms-flex-order: 6 !important;\n    order: 6 !important;\n  }\n  .m-md-0 {\n    margin: 0 !important;\n  }\n  .m-md-1 {\n    margin: 0.25rem !important;\n  }\n  .m-md-2 {\n    margin: 0.5rem !important;\n  }\n  .m-md-3 {\n    margin: 1rem !important;\n  }\n  .m-md-4 {\n    margin: 1.5rem !important;\n  }\n  .m-md-5 {\n    margin: 3rem !important;\n  }\n  .m-md-auto {\n    margin: auto !important;\n  }\n  .mx-md-0 {\n    margin-right: 0 !important;\n    margin-left: 0 !important;\n  }\n  .mx-md-1 {\n    margin-right: 0.25rem !important;\n    margin-left: 0.25rem !important;\n  }\n  .mx-md-2 {\n    margin-right: 0.5rem !important;\n    margin-left: 0.5rem !important;\n  }\n  .mx-md-3 {\n    margin-right: 1rem !important;\n    margin-left: 1rem !important;\n  }\n  .mx-md-4 {\n    margin-right: 1.5rem !important;\n    margin-left: 1.5rem !important;\n  }\n  .mx-md-5 {\n    margin-right: 3rem !important;\n    margin-left: 3rem !important;\n  }\n  .mx-md-auto {\n    margin-right: auto !important;\n    margin-left: auto !important;\n  }\n  .my-md-0 {\n    margin-top: 0 !important;\n    margin-bottom: 0 !important;\n  }\n  .my-md-1 {\n    margin-top: 0.25rem !important;\n    margin-bottom: 0.25rem !important;\n  }\n  .my-md-2 {\n    margin-top: 0.5rem !important;\n    margin-bottom: 0.5rem !important;\n  }\n  .my-md-3 {\n    margin-top: 1rem !important;\n    margin-bottom: 1rem !important;\n  }\n  .my-md-4 {\n    margin-top: 1.5rem !important;\n    margin-bottom: 1.5rem !important;\n  }\n  .my-md-5 {\n    margin-top: 3rem !important;\n    margin-bottom: 3rem !important;\n  }\n  .my-md-auto {\n    margin-top: auto !important;\n    margin-bottom: auto !important;\n  }\n  .mt-md-0 {\n    margin-top: 0 !important;\n  }\n  .mt-md-1 {\n    margin-top: 0.25rem !important;\n  }\n  .mt-md-2 {\n    margin-top: 0.5rem !important;\n  }\n  .mt-md-3 {\n    margin-top: 1rem !important;\n  }\n  .mt-md-4 {\n    margin-top: 1.5rem !important;\n  }\n  .mt-md-5 {\n    margin-top: 3rem !important;\n  }\n  .mt-md-auto {\n    margin-top: auto !important;\n  }\n  .me-md-0 {\n    margin-right: 0 !important;\n  }\n  .me-md-1 {\n    margin-right: 0.25rem !important;\n  }\n  .me-md-2 {\n    margin-right: 0.5rem !important;\n  }\n  .me-md-3 {\n    margin-right: 1rem !important;\n  }\n  .me-md-4 {\n    margin-right: 1.5rem !important;\n  }\n  .me-md-5 {\n    margin-right: 3rem !important;\n  }\n  .me-md-auto {\n    margin-right: auto !important;\n  }\n  .mb-md-0 {\n    margin-bottom: 0 !important;\n  }\n  .mb-md-1 {\n    margin-bottom: 0.25rem !important;\n  }\n  .mb-md-2 {\n    margin-bottom: 0.5rem !important;\n  }\n  .mb-md-3 {\n    margin-bottom: 1rem !important;\n  }\n  .mb-md-4 {\n    margin-bottom: 1.5rem !important;\n  }\n  .mb-md-5 {\n    margin-bottom: 3rem !important;\n  }\n  .mb-md-auto {\n    margin-bottom: auto !important;\n  }\n  .ms-md-0 {\n    margin-left: 0 !important;\n  }\n  .ms-md-1 {\n    margin-left: 0.25rem !important;\n  }\n  .ms-md-2 {\n    margin-left: 0.5rem !important;\n  }\n  .ms-md-3 {\n    margin-left: 1rem !important;\n  }\n  .ms-md-4 {\n    margin-left: 1.5rem !important;\n  }\n  .ms-md-5 {\n    margin-left: 3rem !important;\n  }\n  .ms-md-auto {\n    margin-left: auto !important;\n  }\n  .p-md-0 {\n    padding: 0 !important;\n  }\n  .p-md-1 {\n    padding: 0.25rem !important;\n  }\n  .p-md-2 {\n    padding: 0.5rem !important;\n  }\n  .p-md-3 {\n    padding: 1rem !important;\n  }\n  .p-md-4 {\n    padding: 1.5rem !important;\n  }\n  .p-md-5 {\n    padding: 3rem !important;\n  }\n  .px-md-0 {\n    padding-right: 0 !important;\n    padding-left: 0 !important;\n  }\n  .px-md-1 {\n    padding-right: 0.25rem !important;\n    padding-left: 0.25rem !important;\n  }\n  .px-md-2 {\n    padding-right: 0.5rem !important;\n    padding-left: 0.5rem !important;\n  }\n  .px-md-3 {\n    padding-right: 1rem !important;\n    padding-left: 1rem !important;\n  }\n  .px-md-4 {\n    padding-right: 1.5rem !important;\n    padding-left: 1.5rem !important;\n  }\n  .px-md-5 {\n    padding-right: 3rem !important;\n    padding-left: 3rem !important;\n  }\n  .py-md-0 {\n    padding-top: 0 !important;\n    padding-bottom: 0 !important;\n  }\n  .py-md-1 {\n    padding-top: 0.25rem !important;\n    padding-bottom: 0.25rem !important;\n  }\n  .py-md-2 {\n    padding-top: 0.5rem !important;\n    padding-bottom: 0.5rem !important;\n  }\n  .py-md-3 {\n    padding-top: 1rem !important;\n    padding-bottom: 1rem !important;\n  }\n  .py-md-4 {\n    padding-top: 1.5rem !important;\n    padding-bottom: 1.5rem !important;\n  }\n  .py-md-5 {\n    padding-top: 3rem !important;\n    padding-bottom: 3rem !important;\n  }\n  .pt-md-0 {\n    padding-top: 0 !important;\n  }\n  .pt-md-1 {\n    padding-top: 0.25rem !important;\n  }\n  .pt-md-2 {\n    padding-top: 0.5rem !important;\n  }\n  .pt-md-3 {\n    padding-top: 1rem !important;\n  }\n  .pt-md-4 {\n    padding-top: 1.5rem !important;\n  }\n  .pt-md-5 {\n    padding-top: 3rem !important;\n  }\n  .pe-md-0 {\n    padding-right: 0 !important;\n  }\n  .pe-md-1 {\n    padding-right: 0.25rem !important;\n  }\n  .pe-md-2 {\n    padding-right: 0.5rem !important;\n  }\n  .pe-md-3 {\n    padding-right: 1rem !important;\n  }\n  .pe-md-4 {\n    padding-right: 1.5rem !important;\n  }\n  .pe-md-5 {\n    padding-right: 3rem !important;\n  }\n  .pb-md-0 {\n    padding-bottom: 0 !important;\n  }\n  .pb-md-1 {\n    padding-bottom: 0.25rem !important;\n  }\n  .pb-md-2 {\n    padding-bottom: 0.5rem !important;\n  }\n  .pb-md-3 {\n    padding-bottom: 1rem !important;\n  }\n  .pb-md-4 {\n    padding-bottom: 1.5rem !important;\n  }\n  .pb-md-5 {\n    padding-bottom: 3rem !important;\n  }\n  .ps-md-0 {\n    padding-left: 0 !important;\n  }\n  .ps-md-1 {\n    padding-left: 0.25rem !important;\n  }\n  .ps-md-2 {\n    padding-left: 0.5rem !important;\n  }\n  .ps-md-3 {\n    padding-left: 1rem !important;\n  }\n  .ps-md-4 {\n    padding-left: 1.5rem !important;\n  }\n  .ps-md-5 {\n    padding-left: 3rem !important;\n  }\n  .text-md-start {\n    text-align: left !important;\n  }\n  .text-md-end {\n    text-align: right !important;\n  }\n  .text-md-center {\n    text-align: center !important;\n  }\n}\n\n@media (min-width: 992px) {\n  .float-lg-start {\n    float: left !important;\n  }\n  .float-lg-end {\n    float: right !important;\n  }\n  .float-lg-none {\n    float: none !important;\n  }\n  .d-lg-inline {\n    display: inline !important;\n  }\n  .d-lg-inline-block {\n    display: inline-block !important;\n  }\n  .d-lg-block {\n    display: block !important;\n  }\n  .d-lg-grid {\n    display: grid !important;\n  }\n  .d-lg-table {\n    display: table !important;\n  }\n  .d-lg-table-row {\n    display: table-row !important;\n  }\n  .d-lg-table-cell {\n    display: table-cell !important;\n  }\n  .d-lg-flex {\n    display: -ms-flexbox !important;\n    display: flex !important;\n  }\n  .d-lg-inline-flex {\n    display: -ms-inline-flexbox !important;\n    display: inline-flex !important;\n  }\n  .d-lg-none {\n    display: none !important;\n  }\n  .flex-lg-fill {\n    -ms-flex: 1 1 auto !important;\n    flex: 1 1 auto !important;\n  }\n  .flex-lg-row {\n    -ms-flex-direction: row !important;\n    flex-direction: row !important;\n  }\n  .flex-lg-column {\n    -ms-flex-direction: column !important;\n    flex-direction: column !important;\n  }\n  .flex-lg-row-reverse {\n    -ms-flex-direction: row-reverse !important;\n    flex-direction: row-reverse !important;\n  }\n  .flex-lg-column-reverse {\n    -ms-flex-direction: column-reverse !important;\n    flex-direction: column-reverse !important;\n  }\n  .flex-lg-grow-0 {\n    -ms-flex-positive: 0 !important;\n    flex-grow: 0 !important;\n  }\n  .flex-lg-grow-1 {\n    -ms-flex-positive: 1 !important;\n    flex-grow: 1 !important;\n  }\n  .flex-lg-shrink-0 {\n    -ms-flex-negative: 0 !important;\n    flex-shrink: 0 !important;\n  }\n  .flex-lg-shrink-1 {\n    -ms-flex-negative: 1 !important;\n    flex-shrink: 1 !important;\n  }\n  .flex-lg-wrap {\n    -ms-flex-wrap: wrap !important;\n    flex-wrap: wrap !important;\n  }\n  .flex-lg-nowrap {\n    -ms-flex-wrap: nowrap !important;\n    flex-wrap: nowrap !important;\n  }\n  .flex-lg-wrap-reverse {\n    -ms-flex-wrap: wrap-reverse !important;\n    flex-wrap: wrap-reverse !important;\n  }\n  .gap-lg-0 {\n    gap: 0 !important;\n  }\n  .gap-lg-1 {\n    gap: 0.25rem !important;\n  }\n  .gap-lg-2 {\n    gap: 0.5rem !important;\n  }\n  .gap-lg-3 {\n    gap: 1rem !important;\n  }\n  .gap-lg-4 {\n    gap: 1.5rem !important;\n  }\n  .gap-lg-5 {\n    gap: 3rem !important;\n  }\n  .justify-content-lg-start {\n    -ms-flex-pack: start !important;\n    justify-content: flex-start !important;\n  }\n  .justify-content-lg-end {\n    -ms-flex-pack: end !important;\n    justify-content: flex-end !important;\n  }\n  .justify-content-lg-center {\n    -ms-flex-pack: center !important;\n    justify-content: center !important;\n  }\n  .justify-content-lg-between {\n    -ms-flex-pack: justify !important;\n    justify-content: space-between !important;\n  }\n  .justify-content-lg-around {\n    -ms-flex-pack: distribute !important;\n    justify-content: space-around !important;\n  }\n  .justify-content-lg-evenly {\n    -ms-flex-pack: space-evenly !important;\n    justify-content: space-evenly !important;\n  }\n  .align-items-lg-start {\n    -ms-flex-align: start !important;\n    align-items: flex-start !important;\n  }\n  .align-items-lg-end {\n    -ms-flex-align: end !important;\n    align-items: flex-end !important;\n  }\n  .align-items-lg-center {\n    -ms-flex-align: center !important;\n    align-items: center !important;\n  }\n  .align-items-lg-baseline {\n    -ms-flex-align: baseline !important;\n    align-items: baseline !important;\n  }\n  .align-items-lg-stretch {\n    -ms-flex-align: stretch !important;\n    align-items: stretch !important;\n  }\n  .align-content-lg-start {\n    -ms-flex-line-pack: start !important;\n    align-content: flex-start !important;\n  }\n  .align-content-lg-end {\n    -ms-flex-line-pack: end !important;\n    align-content: flex-end !important;\n  }\n  .align-content-lg-center {\n    -ms-flex-line-pack: center !important;\n    align-content: center !important;\n  }\n  .align-content-lg-between {\n    -ms-flex-line-pack: justify !important;\n    align-content: space-between !important;\n  }\n  .align-content-lg-around {\n    -ms-flex-line-pack: distribute !important;\n    align-content: space-around !important;\n  }\n  .align-content-lg-stretch {\n    -ms-flex-line-pack: stretch !important;\n    align-content: stretch !important;\n  }\n  .align-self-lg-auto {\n    -ms-flex-item-align: auto !important;\n    align-self: auto !important;\n  }\n  .align-self-lg-start {\n    -ms-flex-item-align: start !important;\n    align-self: flex-start !important;\n  }\n  .align-self-lg-end {\n    -ms-flex-item-align: end !important;\n    align-self: flex-end !important;\n  }\n  .align-self-lg-center {\n    -ms-flex-item-align: center !important;\n    align-self: center !important;\n  }\n  .align-self-lg-baseline {\n    -ms-flex-item-align: baseline !important;\n    align-self: baseline !important;\n  }\n  .align-self-lg-stretch {\n    -ms-flex-item-align: stretch !important;\n    align-self: stretch !important;\n  }\n  .order-lg-first {\n    -ms-flex-order: -1 !important;\n    order: -1 !important;\n  }\n  .order-lg-0 {\n    -ms-flex-order: 0 !important;\n    order: 0 !important;\n  }\n  .order-lg-1 {\n    -ms-flex-order: 1 !important;\n    order: 1 !important;\n  }\n  .order-lg-2 {\n    -ms-flex-order: 2 !important;\n    order: 2 !important;\n  }\n  .order-lg-3 {\n    -ms-flex-order: 3 !important;\n    order: 3 !important;\n  }\n  .order-lg-4 {\n    -ms-flex-order: 4 !important;\n    order: 4 !important;\n  }\n  .order-lg-5 {\n    -ms-flex-order: 5 !important;\n    order: 5 !important;\n  }\n  .order-lg-last {\n    -ms-flex-order: 6 !important;\n    order: 6 !important;\n  }\n  .m-lg-0 {\n    margin: 0 !important;\n  }\n  .m-lg-1 {\n    margin: 0.25rem !important;\n  }\n  .m-lg-2 {\n    margin: 0.5rem !important;\n  }\n  .m-lg-3 {\n    margin: 1rem !important;\n  }\n  .m-lg-4 {\n    margin: 1.5rem !important;\n  }\n  .m-lg-5 {\n    margin: 3rem !important;\n  }\n  .m-lg-auto {\n    margin: auto !important;\n  }\n  .mx-lg-0 {\n    margin-right: 0 !important;\n    margin-left: 0 !important;\n  }\n  .mx-lg-1 {\n    margin-right: 0.25rem !important;\n    margin-left: 0.25rem !important;\n  }\n  .mx-lg-2 {\n    margin-right: 0.5rem !important;\n    margin-left: 0.5rem !important;\n  }\n  .mx-lg-3 {\n    margin-right: 1rem !important;\n    margin-left: 1rem !important;\n  }\n  .mx-lg-4 {\n    margin-right: 1.5rem !important;\n    margin-left: 1.5rem !important;\n  }\n  .mx-lg-5 {\n    margin-right: 3rem !important;\n    margin-left: 3rem !important;\n  }\n  .mx-lg-auto {\n    margin-right: auto !important;\n    margin-left: auto !important;\n  }\n  .my-lg-0 {\n    margin-top: 0 !important;\n    margin-bottom: 0 !important;\n  }\n  .my-lg-1 {\n    margin-top: 0.25rem !important;\n    margin-bottom: 0.25rem !important;\n  }\n  .my-lg-2 {\n    margin-top: 0.5rem !important;\n    margin-bottom: 0.5rem !important;\n  }\n  .my-lg-3 {\n    margin-top: 1rem !important;\n    margin-bottom: 1rem !important;\n  }\n  .my-lg-4 {\n    margin-top: 1.5rem !important;\n    margin-bottom: 1.5rem !important;\n  }\n  .my-lg-5 {\n    margin-top: 3rem !important;\n    margin-bottom: 3rem !important;\n  }\n  .my-lg-auto {\n    margin-top: auto !important;\n    margin-bottom: auto !important;\n  }\n  .mt-lg-0 {\n    margin-top: 0 !important;\n  }\n  .mt-lg-1 {\n    margin-top: 0.25rem !important;\n  }\n  .mt-lg-2 {\n    margin-top: 0.5rem !important;\n  }\n  .mt-lg-3 {\n    margin-top: 1rem !important;\n  }\n  .mt-lg-4 {\n    margin-top: 1.5rem !important;\n  }\n  .mt-lg-5 {\n    margin-top: 3rem !important;\n  }\n  .mt-lg-auto {\n    margin-top: auto !important;\n  }\n  .me-lg-0 {\n    margin-right: 0 !important;\n  }\n  .me-lg-1 {\n    margin-right: 0.25rem !important;\n  }\n  .me-lg-2 {\n    margin-right: 0.5rem !important;\n  }\n  .me-lg-3 {\n    margin-right: 1rem !important;\n  }\n  .me-lg-4 {\n    margin-right: 1.5rem !important;\n  }\n  .me-lg-5 {\n    margin-right: 3rem !important;\n  }\n  .me-lg-auto {\n    margin-right: auto !important;\n  }\n  .mb-lg-0 {\n    margin-bottom: 0 !important;\n  }\n  .mb-lg-1 {\n    margin-bottom: 0.25rem !important;\n  }\n  .mb-lg-2 {\n    margin-bottom: 0.5rem !important;\n  }\n  .mb-lg-3 {\n    margin-bottom: 1rem !important;\n  }\n  .mb-lg-4 {\n    margin-bottom: 1.5rem !important;\n  }\n  .mb-lg-5 {\n    margin-bottom: 3rem !important;\n  }\n  .mb-lg-auto {\n    margin-bottom: auto !important;\n  }\n  .ms-lg-0 {\n    margin-left: 0 !important;\n  }\n  .ms-lg-1 {\n    margin-left: 0.25rem !important;\n  }\n  .ms-lg-2 {\n    margin-left: 0.5rem !important;\n  }\n  .ms-lg-3 {\n    margin-left: 1rem !important;\n  }\n  .ms-lg-4 {\n    margin-left: 1.5rem !important;\n  }\n  .ms-lg-5 {\n    margin-left: 3rem !important;\n  }\n  .ms-lg-auto {\n    margin-left: auto !important;\n  }\n  .p-lg-0 {\n    padding: 0 !important;\n  }\n  .p-lg-1 {\n    padding: 0.25rem !important;\n  }\n  .p-lg-2 {\n    padding: 0.5rem !important;\n  }\n  .p-lg-3 {\n    padding: 1rem !important;\n  }\n  .p-lg-4 {\n    padding: 1.5rem !important;\n  }\n  .p-lg-5 {\n    padding: 3rem !important;\n  }\n  .px-lg-0 {\n    padding-right: 0 !important;\n    padding-left: 0 !important;\n  }\n  .px-lg-1 {\n    padding-right: 0.25rem !important;\n    padding-left: 0.25rem !important;\n  }\n  .px-lg-2 {\n    padding-right: 0.5rem !important;\n    padding-left: 0.5rem !important;\n  }\n  .px-lg-3 {\n    padding-right: 1rem !important;\n    padding-left: 1rem !important;\n  }\n  .px-lg-4 {\n    padding-right: 1.5rem !important;\n    padding-left: 1.5rem !important;\n  }\n  .px-lg-5 {\n    padding-right: 3rem !important;\n    padding-left: 3rem !important;\n  }\n  .py-lg-0 {\n    padding-top: 0 !important;\n    padding-bottom: 0 !important;\n  }\n  .py-lg-1 {\n    padding-top: 0.25rem !important;\n    padding-bottom: 0.25rem !important;\n  }\n  .py-lg-2 {\n    padding-top: 0.5rem !important;\n    padding-bottom: 0.5rem !important;\n  }\n  .py-lg-3 {\n    padding-top: 1rem !important;\n    padding-bottom: 1rem !important;\n  }\n  .py-lg-4 {\n    padding-top: 1.5rem !important;\n    padding-bottom: 1.5rem !important;\n  }\n  .py-lg-5 {\n    padding-top: 3rem !important;\n    padding-bottom: 3rem !important;\n  }\n  .pt-lg-0 {\n    padding-top: 0 !important;\n  }\n  .pt-lg-1 {\n    padding-top: 0.25rem !important;\n  }\n  .pt-lg-2 {\n    padding-top: 0.5rem !important;\n  }\n  .pt-lg-3 {\n    padding-top: 1rem !important;\n  }\n  .pt-lg-4 {\n    padding-top: 1.5rem !important;\n  }\n  .pt-lg-5 {\n    padding-top: 3rem !important;\n  }\n  .pe-lg-0 {\n    padding-right: 0 !important;\n  }\n  .pe-lg-1 {\n    padding-right: 0.25rem !important;\n  }\n  .pe-lg-2 {\n    padding-right: 0.5rem !important;\n  }\n  .pe-lg-3 {\n    padding-right: 1rem !important;\n  }\n  .pe-lg-4 {\n    padding-right: 1.5rem !important;\n  }\n  .pe-lg-5 {\n    padding-right: 3rem !important;\n  }\n  .pb-lg-0 {\n    padding-bottom: 0 !important;\n  }\n  .pb-lg-1 {\n    padding-bottom: 0.25rem !important;\n  }\n  .pb-lg-2 {\n    padding-bottom: 0.5rem !important;\n  }\n  .pb-lg-3 {\n    padding-bottom: 1rem !important;\n  }\n  .pb-lg-4 {\n    padding-bottom: 1.5rem !important;\n  }\n  .pb-lg-5 {\n    padding-bottom: 3rem !important;\n  }\n  .ps-lg-0 {\n    padding-left: 0 !important;\n  }\n  .ps-lg-1 {\n    padding-left: 0.25rem !important;\n  }\n  .ps-lg-2 {\n    padding-left: 0.5rem !important;\n  }\n  .ps-lg-3 {\n    padding-left: 1rem !important;\n  }\n  .ps-lg-4 {\n    padding-left: 1.5rem !important;\n  }\n  .ps-lg-5 {\n    padding-left: 3rem !important;\n  }\n  .text-lg-start {\n    text-align: left !important;\n  }\n  .text-lg-end {\n    text-align: right !important;\n  }\n  .text-lg-center {\n    text-align: center !important;\n  }\n}\n\n@media (min-width: 1200px) {\n  .float-xl-start {\n    float: left !important;\n  }\n  .float-xl-end {\n    float: right !important;\n  }\n  .float-xl-none {\n    float: none !important;\n  }\n  .d-xl-inline {\n    display: inline !important;\n  }\n  .d-xl-inline-block {\n    display: inline-block !important;\n  }\n  .d-xl-block {\n    display: block !important;\n  }\n  .d-xl-grid {\n    display: grid !important;\n  }\n  .d-xl-table {\n    display: table !important;\n  }\n  .d-xl-table-row {\n    display: table-row !important;\n  }\n  .d-xl-table-cell {\n    display: table-cell !important;\n  }\n  .d-xl-flex {\n    display: -ms-flexbox !important;\n    display: flex !important;\n  }\n  .d-xl-inline-flex {\n    display: -ms-inline-flexbox !important;\n    display: inline-flex !important;\n  }\n  .d-xl-none {\n    display: none !important;\n  }\n  .flex-xl-fill {\n    -ms-flex: 1 1 auto !important;\n    flex: 1 1 auto !important;\n  }\n  .flex-xl-row {\n    -ms-flex-direction: row !important;\n    flex-direction: row !important;\n  }\n  .flex-xl-column {\n    -ms-flex-direction: column !important;\n    flex-direction: column !important;\n  }\n  .flex-xl-row-reverse {\n    -ms-flex-direction: row-reverse !important;\n    flex-direction: row-reverse !important;\n  }\n  .flex-xl-column-reverse {\n    -ms-flex-direction: column-reverse !important;\n    flex-direction: column-reverse !important;\n  }\n  .flex-xl-grow-0 {\n    -ms-flex-positive: 0 !important;\n    flex-grow: 0 !important;\n  }\n  .flex-xl-grow-1 {\n    -ms-flex-positive: 1 !important;\n    flex-grow: 1 !important;\n  }\n  .flex-xl-shrink-0 {\n    -ms-flex-negative: 0 !important;\n    flex-shrink: 0 !important;\n  }\n  .flex-xl-shrink-1 {\n    -ms-flex-negative: 1 !important;\n    flex-shrink: 1 !important;\n  }\n  .flex-xl-wrap {\n    -ms-flex-wrap: wrap !important;\n    flex-wrap: wrap !important;\n  }\n  .flex-xl-nowrap {\n    -ms-flex-wrap: nowrap !important;\n    flex-wrap: nowrap !important;\n  }\n  .flex-xl-wrap-reverse {\n    -ms-flex-wrap: wrap-reverse !important;\n    flex-wrap: wrap-reverse !important;\n  }\n  .gap-xl-0 {\n    gap: 0 !important;\n  }\n  .gap-xl-1 {\n    gap: 0.25rem !important;\n  }\n  .gap-xl-2 {\n    gap: 0.5rem !important;\n  }\n  .gap-xl-3 {\n    gap: 1rem !important;\n  }\n  .gap-xl-4 {\n    gap: 1.5rem !important;\n  }\n  .gap-xl-5 {\n    gap: 3rem !important;\n  }\n  .justify-content-xl-start {\n    -ms-flex-pack: start !important;\n    justify-content: flex-start !important;\n  }\n  .justify-content-xl-end {\n    -ms-flex-pack: end !important;\n    justify-content: flex-end !important;\n  }\n  .justify-content-xl-center {\n    -ms-flex-pack: center !important;\n    justify-content: center !important;\n  }\n  .justify-content-xl-between {\n    -ms-flex-pack: justify !important;\n    justify-content: space-between !important;\n  }\n  .justify-content-xl-around {\n    -ms-flex-pack: distribute !important;\n    justify-content: space-around !important;\n  }\n  .justify-content-xl-evenly {\n    -ms-flex-pack: space-evenly !important;\n    justify-content: space-evenly !important;\n  }\n  .align-items-xl-start {\n    -ms-flex-align: start !important;\n    align-items: flex-start !important;\n  }\n  .align-items-xl-end {\n    -ms-flex-align: end !important;\n    align-items: flex-end !important;\n  }\n  .align-items-xl-center {\n    -ms-flex-align: center !important;\n    align-items: center !important;\n  }\n  .align-items-xl-baseline {\n    -ms-flex-align: baseline !important;\n    align-items: baseline !important;\n  }\n  .align-items-xl-stretch {\n    -ms-flex-align: stretch !important;\n    align-items: stretch !important;\n  }\n  .align-content-xl-start {\n    -ms-flex-line-pack: start !important;\n    align-content: flex-start !important;\n  }\n  .align-content-xl-end {\n    -ms-flex-line-pack: end !important;\n    align-content: flex-end !important;\n  }\n  .align-content-xl-center {\n    -ms-flex-line-pack: center !important;\n    align-content: center !important;\n  }\n  .align-content-xl-between {\n    -ms-flex-line-pack: justify !important;\n    align-content: space-between !important;\n  }\n  .align-content-xl-around {\n    -ms-flex-line-pack: distribute !important;\n    align-content: space-around !important;\n  }\n  .align-content-xl-stretch {\n    -ms-flex-line-pack: stretch !important;\n    align-content: stretch !important;\n  }\n  .align-self-xl-auto {\n    -ms-flex-item-align: auto !important;\n    align-self: auto !important;\n  }\n  .align-self-xl-start {\n    -ms-flex-item-align: start !important;\n    align-self: flex-start !important;\n  }\n  .align-self-xl-end {\n    -ms-flex-item-align: end !important;\n    align-self: flex-end !important;\n  }\n  .align-self-xl-center {\n    -ms-flex-item-align: center !important;\n    align-self: center !important;\n  }\n  .align-self-xl-baseline {\n    -ms-flex-item-align: baseline !important;\n    align-self: baseline !important;\n  }\n  .align-self-xl-stretch {\n    -ms-flex-item-align: stretch !important;\n    align-self: stretch !important;\n  }\n  .order-xl-first {\n    -ms-flex-order: -1 !important;\n    order: -1 !important;\n  }\n  .order-xl-0 {\n    -ms-flex-order: 0 !important;\n    order: 0 !important;\n  }\n  .order-xl-1 {\n    -ms-flex-order: 1 !important;\n    order: 1 !important;\n  }\n  .order-xl-2 {\n    -ms-flex-order: 2 !important;\n    order: 2 !important;\n  }\n  .order-xl-3 {\n    -ms-flex-order: 3 !important;\n    order: 3 !important;\n  }\n  .order-xl-4 {\n    -ms-flex-order: 4 !important;\n    order: 4 !important;\n  }\n  .order-xl-5 {\n    -ms-flex-order: 5 !important;\n    order: 5 !important;\n  }\n  .order-xl-last {\n    -ms-flex-order: 6 !important;\n    order: 6 !important;\n  }\n  .m-xl-0 {\n    margin: 0 !important;\n  }\n  .m-xl-1 {\n    margin: 0.25rem !important;\n  }\n  .m-xl-2 {\n    margin: 0.5rem !important;\n  }\n  .m-xl-3 {\n    margin: 1rem !important;\n  }\n  .m-xl-4 {\n    margin: 1.5rem !important;\n  }\n  .m-xl-5 {\n    margin: 3rem !important;\n  }\n  .m-xl-auto {\n    margin: auto !important;\n  }\n  .mx-xl-0 {\n    margin-right: 0 !important;\n    margin-left: 0 !important;\n  }\n  .mx-xl-1 {\n    margin-right: 0.25rem !important;\n    margin-left: 0.25rem !important;\n  }\n  .mx-xl-2 {\n    margin-right: 0.5rem !important;\n    margin-left: 0.5rem !important;\n  }\n  .mx-xl-3 {\n    margin-right: 1rem !important;\n    margin-left: 1rem !important;\n  }\n  .mx-xl-4 {\n    margin-right: 1.5rem !important;\n    margin-left: 1.5rem !important;\n  }\n  .mx-xl-5 {\n    margin-right: 3rem !important;\n    margin-left: 3rem !important;\n  }\n  .mx-xl-auto {\n    margin-right: auto !important;\n    margin-left: auto !important;\n  }\n  .my-xl-0 {\n    margin-top: 0 !important;\n    margin-bottom: 0 !important;\n  }\n  .my-xl-1 {\n    margin-top: 0.25rem !important;\n    margin-bottom: 0.25rem !important;\n  }\n  .my-xl-2 {\n    margin-top: 0.5rem !important;\n    margin-bottom: 0.5rem !important;\n  }\n  .my-xl-3 {\n    margin-top: 1rem !important;\n    margin-bottom: 1rem !important;\n  }\n  .my-xl-4 {\n    margin-top: 1.5rem !important;\n    margin-bottom: 1.5rem !important;\n  }\n  .my-xl-5 {\n    margin-top: 3rem !important;\n    margin-bottom: 3rem !important;\n  }\n  .my-xl-auto {\n    margin-top: auto !important;\n    margin-bottom: auto !important;\n  }\n  .mt-xl-0 {\n    margin-top: 0 !important;\n  }\n  .mt-xl-1 {\n    margin-top: 0.25rem !important;\n  }\n  .mt-xl-2 {\n    margin-top: 0.5rem !important;\n  }\n  .mt-xl-3 {\n    margin-top: 1rem !important;\n  }\n  .mt-xl-4 {\n    margin-top: 1.5rem !important;\n  }\n  .mt-xl-5 {\n    margin-top: 3rem !important;\n  }\n  .mt-xl-auto {\n    margin-top: auto !important;\n  }\n  .me-xl-0 {\n    margin-right: 0 !important;\n  }\n  .me-xl-1 {\n    margin-right: 0.25rem !important;\n  }\n  .me-xl-2 {\n    margin-right: 0.5rem !important;\n  }\n  .me-xl-3 {\n    margin-right: 1rem !important;\n  }\n  .me-xl-4 {\n    margin-right: 1.5rem !important;\n  }\n  .me-xl-5 {\n    margin-right: 3rem !important;\n  }\n  .me-xl-auto {\n    margin-right: auto !important;\n  }\n  .mb-xl-0 {\n    margin-bottom: 0 !important;\n  }\n  .mb-xl-1 {\n    margin-bottom: 0.25rem !important;\n  }\n  .mb-xl-2 {\n    margin-bottom: 0.5rem !important;\n  }\n  .mb-xl-3 {\n    margin-bottom: 1rem !important;\n  }\n  .mb-xl-4 {\n    margin-bottom: 1.5rem !important;\n  }\n  .mb-xl-5 {\n    margin-bottom: 3rem !important;\n  }\n  .mb-xl-auto {\n    margin-bottom: auto !important;\n  }\n  .ms-xl-0 {\n    margin-left: 0 !important;\n  }\n  .ms-xl-1 {\n    margin-left: 0.25rem !important;\n  }\n  .ms-xl-2 {\n    margin-left: 0.5rem !important;\n  }\n  .ms-xl-3 {\n    margin-left: 1rem !important;\n  }\n  .ms-xl-4 {\n    margin-left: 1.5rem !important;\n  }\n  .ms-xl-5 {\n    margin-left: 3rem !important;\n  }\n  .ms-xl-auto {\n    margin-left: auto !important;\n  }\n  .p-xl-0 {\n    padding: 0 !important;\n  }\n  .p-xl-1 {\n    padding: 0.25rem !important;\n  }\n  .p-xl-2 {\n    padding: 0.5rem !important;\n  }\n  .p-xl-3 {\n    padding: 1rem !important;\n  }\n  .p-xl-4 {\n    padding: 1.5rem !important;\n  }\n  .p-xl-5 {\n    padding: 3rem !important;\n  }\n  .px-xl-0 {\n    padding-right: 0 !important;\n    padding-left: 0 !important;\n  }\n  .px-xl-1 {\n    padding-right: 0.25rem !important;\n    padding-left: 0.25rem !important;\n  }\n  .px-xl-2 {\n    padding-right: 0.5rem !important;\n    padding-left: 0.5rem !important;\n  }\n  .px-xl-3 {\n    padding-right: 1rem !important;\n    padding-left: 1rem !important;\n  }\n  .px-xl-4 {\n    padding-right: 1.5rem !important;\n    padding-left: 1.5rem !important;\n  }\n  .px-xl-5 {\n    padding-right: 3rem !important;\n    padding-left: 3rem !important;\n  }\n  .py-xl-0 {\n    padding-top: 0 !important;\n    padding-bottom: 0 !important;\n  }\n  .py-xl-1 {\n    padding-top: 0.25rem !important;\n    padding-bottom: 0.25rem !important;\n  }\n  .py-xl-2 {\n    padding-top: 0.5rem !important;\n    padding-bottom: 0.5rem !important;\n  }\n  .py-xl-3 {\n    padding-top: 1rem !important;\n    padding-bottom: 1rem !important;\n  }\n  .py-xl-4 {\n    padding-top: 1.5rem !important;\n    padding-bottom: 1.5rem !important;\n  }\n  .py-xl-5 {\n    padding-top: 3rem !important;\n    padding-bottom: 3rem !important;\n  }\n  .pt-xl-0 {\n    padding-top: 0 !important;\n  }\n  .pt-xl-1 {\n    padding-top: 0.25rem !important;\n  }\n  .pt-xl-2 {\n    padding-top: 0.5rem !important;\n  }\n  .pt-xl-3 {\n    padding-top: 1rem !important;\n  }\n  .pt-xl-4 {\n    padding-top: 1.5rem !important;\n  }\n  .pt-xl-5 {\n    padding-top: 3rem !important;\n  }\n  .pe-xl-0 {\n    padding-right: 0 !important;\n  }\n  .pe-xl-1 {\n    padding-right: 0.25rem !important;\n  }\n  .pe-xl-2 {\n    padding-right: 0.5rem !important;\n  }\n  .pe-xl-3 {\n    padding-right: 1rem !important;\n  }\n  .pe-xl-4 {\n    padding-right: 1.5rem !important;\n  }\n  .pe-xl-5 {\n    padding-right: 3rem !important;\n  }\n  .pb-xl-0 {\n    padding-bottom: 0 !important;\n  }\n  .pb-xl-1 {\n    padding-bottom: 0.25rem !important;\n  }\n  .pb-xl-2 {\n    padding-bottom: 0.5rem !important;\n  }\n  .pb-xl-3 {\n    padding-bottom: 1rem !important;\n  }\n  .pb-xl-4 {\n    padding-bottom: 1.5rem !important;\n  }\n  .pb-xl-5 {\n    padding-bottom: 3rem !important;\n  }\n  .ps-xl-0 {\n    padding-left: 0 !important;\n  }\n  .ps-xl-1 {\n    padding-left: 0.25rem !important;\n  }\n  .ps-xl-2 {\n    padding-left: 0.5rem !important;\n  }\n  .ps-xl-3 {\n    padding-left: 1rem !important;\n  }\n  .ps-xl-4 {\n    padding-left: 1.5rem !important;\n  }\n  .ps-xl-5 {\n    padding-left: 3rem !important;\n  }\n  .text-xl-start {\n    text-align: left !important;\n  }\n  .text-xl-end {\n    text-align: right !important;\n  }\n  .text-xl-center {\n    text-align: center !important;\n  }\n}\n\n@media (min-width: 1400px) {\n  .float-xxl-start {\n    float: left !important;\n  }\n  .float-xxl-end {\n    float: right !important;\n  }\n  .float-xxl-none {\n    float: none !important;\n  }\n  .d-xxl-inline {\n    display: inline !important;\n  }\n  .d-xxl-inline-block {\n    display: inline-block !important;\n  }\n  .d-xxl-block {\n    display: block !important;\n  }\n  .d-xxl-grid {\n    display: grid !important;\n  }\n  .d-xxl-table {\n    display: table !important;\n  }\n  .d-xxl-table-row {\n    display: table-row !important;\n  }\n  .d-xxl-table-cell {\n    display: table-cell !important;\n  }\n  .d-xxl-flex {\n    display: -ms-flexbox !important;\n    display: flex !important;\n  }\n  .d-xxl-inline-flex {\n    display: -ms-inline-flexbox !important;\n    display: inline-flex !important;\n  }\n  .d-xxl-none {\n    display: none !important;\n  }\n  .flex-xxl-fill {\n    -ms-flex: 1 1 auto !important;\n    flex: 1 1 auto !important;\n  }\n  .flex-xxl-row {\n    -ms-flex-direction: row !important;\n    flex-direction: row !important;\n  }\n  .flex-xxl-column {\n    -ms-flex-direction: column !important;\n    flex-direction: column !important;\n  }\n  .flex-xxl-row-reverse {\n    -ms-flex-direction: row-reverse !important;\n    flex-direction: row-reverse !important;\n  }\n  .flex-xxl-column-reverse {\n    -ms-flex-direction: column-reverse !important;\n    flex-direction: column-reverse !important;\n  }\n  .flex-xxl-grow-0 {\n    -ms-flex-positive: 0 !important;\n    flex-grow: 0 !important;\n  }\n  .flex-xxl-grow-1 {\n    -ms-flex-positive: 1 !important;\n    flex-grow: 1 !important;\n  }\n  .flex-xxl-shrink-0 {\n    -ms-flex-negative: 0 !important;\n    flex-shrink: 0 !important;\n  }\n  .flex-xxl-shrink-1 {\n    -ms-flex-negative: 1 !important;\n    flex-shrink: 1 !important;\n  }\n  .flex-xxl-wrap {\n    -ms-flex-wrap: wrap !important;\n    flex-wrap: wrap !important;\n  }\n  .flex-xxl-nowrap {\n    -ms-flex-wrap: nowrap !important;\n    flex-wrap: nowrap !important;\n  }\n  .flex-xxl-wrap-reverse {\n    -ms-flex-wrap: wrap-reverse !important;\n    flex-wrap: wrap-reverse !important;\n  }\n  .gap-xxl-0 {\n    gap: 0 !important;\n  }\n  .gap-xxl-1 {\n    gap: 0.25rem !important;\n  }\n  .gap-xxl-2 {\n    gap: 0.5rem !important;\n  }\n  .gap-xxl-3 {\n    gap: 1rem !important;\n  }\n  .gap-xxl-4 {\n    gap: 1.5rem !important;\n  }\n  .gap-xxl-5 {\n    gap: 3rem !important;\n  }\n  .justify-content-xxl-start {\n    -ms-flex-pack: start !important;\n    justify-content: flex-start !important;\n  }\n  .justify-content-xxl-end {\n    -ms-flex-pack: end !important;\n    justify-content: flex-end !important;\n  }\n  .justify-content-xxl-center {\n    -ms-flex-pack: center !important;\n    justify-content: center !important;\n  }\n  .justify-content-xxl-between {\n    -ms-flex-pack: justify !important;\n    justify-content: space-between !important;\n  }\n  .justify-content-xxl-around {\n    -ms-flex-pack: distribute !important;\n    justify-content: space-around !important;\n  }\n  .justify-content-xxl-evenly {\n    -ms-flex-pack: space-evenly !important;\n    justify-content: space-evenly !important;\n  }\n  .align-items-xxl-start {\n    -ms-flex-align: start !important;\n    align-items: flex-start !important;\n  }\n  .align-items-xxl-end {\n    -ms-flex-align: end !important;\n    align-items: flex-end !important;\n  }\n  .align-items-xxl-center {\n    -ms-flex-align: center !important;\n    align-items: center !important;\n  }\n  .align-items-xxl-baseline {\n    -ms-flex-align: baseline !important;\n    align-items: baseline !important;\n  }\n  .align-items-xxl-stretch {\n    -ms-flex-align: stretch !important;\n    align-items: stretch !important;\n  }\n  .align-content-xxl-start {\n    -ms-flex-line-pack: start !important;\n    align-content: flex-start !important;\n  }\n  .align-content-xxl-end {\n    -ms-flex-line-pack: end !important;\n    align-content: flex-end !important;\n  }\n  .align-content-xxl-center {\n    -ms-flex-line-pack: center !important;\n    align-content: center !important;\n  }\n  .align-content-xxl-between {\n    -ms-flex-line-pack: justify !important;\n    align-content: space-between !important;\n  }\n  .align-content-xxl-around {\n    -ms-flex-line-pack: distribute !important;\n    align-content: space-around !important;\n  }\n  .align-content-xxl-stretch {\n    -ms-flex-line-pack: stretch !important;\n    align-content: stretch !important;\n  }\n  .align-self-xxl-auto {\n    -ms-flex-item-align: auto !important;\n    align-self: auto !important;\n  }\n  .align-self-xxl-start {\n    -ms-flex-item-align: start !important;\n    align-self: flex-start !important;\n  }\n  .align-self-xxl-end {\n    -ms-flex-item-align: end !important;\n    align-self: flex-end !important;\n  }\n  .align-self-xxl-center {\n    -ms-flex-item-align: center !important;\n    align-self: center !important;\n  }\n  .align-self-xxl-baseline {\n    -ms-flex-item-align: baseline !important;\n    align-self: baseline !important;\n  }\n  .align-self-xxl-stretch {\n    -ms-flex-item-align: stretch !important;\n    align-self: stretch !important;\n  }\n  .order-xxl-first {\n    -ms-flex-order: -1 !important;\n    order: -1 !important;\n  }\n  .order-xxl-0 {\n    -ms-flex-order: 0 !important;\n    order: 0 !important;\n  }\n  .order-xxl-1 {\n    -ms-flex-order: 1 !important;\n    order: 1 !important;\n  }\n  .order-xxl-2 {\n    -ms-flex-order: 2 !important;\n    order: 2 !important;\n  }\n  .order-xxl-3 {\n    -ms-flex-order: 3 !important;\n    order: 3 !important;\n  }\n  .order-xxl-4 {\n    -ms-flex-order: 4 !important;\n    order: 4 !important;\n  }\n  .order-xxl-5 {\n    -ms-flex-order: 5 !important;\n    order: 5 !important;\n  }\n  .order-xxl-last {\n    -ms-flex-order: 6 !important;\n    order: 6 !important;\n  }\n  .m-xxl-0 {\n    margin: 0 !important;\n  }\n  .m-xxl-1 {\n    margin: 0.25rem !important;\n  }\n  .m-xxl-2 {\n    margin: 0.5rem !important;\n  }\n  .m-xxl-3 {\n    margin: 1rem !important;\n  }\n  .m-xxl-4 {\n    margin: 1.5rem !important;\n  }\n  .m-xxl-5 {\n    margin: 3rem !important;\n  }\n  .m-xxl-auto {\n    margin: auto !important;\n  }\n  .mx-xxl-0 {\n    margin-right: 0 !important;\n    margin-left: 0 !important;\n  }\n  .mx-xxl-1 {\n    margin-right: 0.25rem !important;\n    margin-left: 0.25rem !important;\n  }\n  .mx-xxl-2 {\n    margin-right: 0.5rem !important;\n    margin-left: 0.5rem !important;\n  }\n  .mx-xxl-3 {\n    margin-right: 1rem !important;\n    margin-left: 1rem !important;\n  }\n  .mx-xxl-4 {\n    margin-right: 1.5rem !important;\n    margin-left: 1.5rem !important;\n  }\n  .mx-xxl-5 {\n    margin-right: 3rem !important;\n    margin-left: 3rem !important;\n  }\n  .mx-xxl-auto {\n    margin-right: auto !important;\n    margin-left: auto !important;\n  }\n  .my-xxl-0 {\n    margin-top: 0 !important;\n    margin-bottom: 0 !important;\n  }\n  .my-xxl-1 {\n    margin-top: 0.25rem !important;\n    margin-bottom: 0.25rem !important;\n  }\n  .my-xxl-2 {\n    margin-top: 0.5rem !important;\n    margin-bottom: 0.5rem !important;\n  }\n  .my-xxl-3 {\n    margin-top: 1rem !important;\n    margin-bottom: 1rem !important;\n  }\n  .my-xxl-4 {\n    margin-top: 1.5rem !important;\n    margin-bottom: 1.5rem !important;\n  }\n  .my-xxl-5 {\n    margin-top: 3rem !important;\n    margin-bottom: 3rem !important;\n  }\n  .my-xxl-auto {\n    margin-top: auto !important;\n    margin-bottom: auto !important;\n  }\n  .mt-xxl-0 {\n    margin-top: 0 !important;\n  }\n  .mt-xxl-1 {\n    margin-top: 0.25rem !important;\n  }\n  .mt-xxl-2 {\n    margin-top: 0.5rem !important;\n  }\n  .mt-xxl-3 {\n    margin-top: 1rem !important;\n  }\n  .mt-xxl-4 {\n    margin-top: 1.5rem !important;\n  }\n  .mt-xxl-5 {\n    margin-top: 3rem !important;\n  }\n  .mt-xxl-auto {\n    margin-top: auto !important;\n  }\n  .me-xxl-0 {\n    margin-right: 0 !important;\n  }\n  .me-xxl-1 {\n    margin-right: 0.25rem !important;\n  }\n  .me-xxl-2 {\n    margin-right: 0.5rem !important;\n  }\n  .me-xxl-3 {\n    margin-right: 1rem !important;\n  }\n  .me-xxl-4 {\n    margin-right: 1.5rem !important;\n  }\n  .me-xxl-5 {\n    margin-right: 3rem !important;\n  }\n  .me-xxl-auto {\n    margin-right: auto !important;\n  }\n  .mb-xxl-0 {\n    margin-bottom: 0 !important;\n  }\n  .mb-xxl-1 {\n    margin-bottom: 0.25rem !important;\n  }\n  .mb-xxl-2 {\n    margin-bottom: 0.5rem !important;\n  }\n  .mb-xxl-3 {\n    margin-bottom: 1rem !important;\n  }\n  .mb-xxl-4 {\n    margin-bottom: 1.5rem !important;\n  }\n  .mb-xxl-5 {\n    margin-bottom: 3rem !important;\n  }\n  .mb-xxl-auto {\n    margin-bottom: auto !important;\n  }\n  .ms-xxl-0 {\n    margin-left: 0 !important;\n  }\n  .ms-xxl-1 {\n    margin-left: 0.25rem !important;\n  }\n  .ms-xxl-2 {\n    margin-left: 0.5rem !important;\n  }\n  .ms-xxl-3 {\n    margin-left: 1rem !important;\n  }\n  .ms-xxl-4 {\n    margin-left: 1.5rem !important;\n  }\n  .ms-xxl-5 {\n    margin-left: 3rem !important;\n  }\n  .ms-xxl-auto {\n    margin-left: auto !important;\n  }\n  .p-xxl-0 {\n    padding: 0 !important;\n  }\n  .p-xxl-1 {\n    padding: 0.25rem !important;\n  }\n  .p-xxl-2 {\n    padding: 0.5rem !important;\n  }\n  .p-xxl-3 {\n    padding: 1rem !important;\n  }\n  .p-xxl-4 {\n    padding: 1.5rem !important;\n  }\n  .p-xxl-5 {\n    padding: 3rem !important;\n  }\n  .px-xxl-0 {\n    padding-right: 0 !important;\n    padding-left: 0 !important;\n  }\n  .px-xxl-1 {\n    padding-right: 0.25rem !important;\n    padding-left: 0.25rem !important;\n  }\n  .px-xxl-2 {\n    padding-right: 0.5rem !important;\n    padding-left: 0.5rem !important;\n  }\n  .px-xxl-3 {\n    padding-right: 1rem !important;\n    padding-left: 1rem !important;\n  }\n  .px-xxl-4 {\n    padding-right: 1.5rem !important;\n    padding-left: 1.5rem !important;\n  }\n  .px-xxl-5 {\n    padding-right: 3rem !important;\n    padding-left: 3rem !important;\n  }\n  .py-xxl-0 {\n    padding-top: 0 !important;\n    padding-bottom: 0 !important;\n  }\n  .py-xxl-1 {\n    padding-top: 0.25rem !important;\n    padding-bottom: 0.25rem !important;\n  }\n  .py-xxl-2 {\n    padding-top: 0.5rem !important;\n    padding-bottom: 0.5rem !important;\n  }\n  .py-xxl-3 {\n    padding-top: 1rem !important;\n    padding-bottom: 1rem !important;\n  }\n  .py-xxl-4 {\n    padding-top: 1.5rem !important;\n    padding-bottom: 1.5rem !important;\n  }\n  .py-xxl-5 {\n    padding-top: 3rem !important;\n    padding-bottom: 3rem !important;\n  }\n  .pt-xxl-0 {\n    padding-top: 0 !important;\n  }\n  .pt-xxl-1 {\n    padding-top: 0.25rem !important;\n  }\n  .pt-xxl-2 {\n    padding-top: 0.5rem !important;\n  }\n  .pt-xxl-3 {\n    padding-top: 1rem !important;\n  }\n  .pt-xxl-4 {\n    padding-top: 1.5rem !important;\n  }\n  .pt-xxl-5 {\n    padding-top: 3rem !important;\n  }\n  .pe-xxl-0 {\n    padding-right: 0 !important;\n  }\n  .pe-xxl-1 {\n    padding-right: 0.25rem !important;\n  }\n  .pe-xxl-2 {\n    padding-right: 0.5rem !important;\n  }\n  .pe-xxl-3 {\n    padding-right: 1rem !important;\n  }\n  .pe-xxl-4 {\n    padding-right: 1.5rem !important;\n  }\n  .pe-xxl-5 {\n    padding-right: 3rem !important;\n  }\n  .pb-xxl-0 {\n    padding-bottom: 0 !important;\n  }\n  .pb-xxl-1 {\n    padding-bottom: 0.25rem !important;\n  }\n  .pb-xxl-2 {\n    padding-bottom: 0.5rem !important;\n  }\n  .pb-xxl-3 {\n    padding-bottom: 1rem !important;\n  }\n  .pb-xxl-4 {\n    padding-bottom: 1.5rem !important;\n  }\n  .pb-xxl-5 {\n    padding-bottom: 3rem !important;\n  }\n  .ps-xxl-0 {\n    padding-left: 0 !important;\n  }\n  .ps-xxl-1 {\n    padding-left: 0.25rem !important;\n  }\n  .ps-xxl-2 {\n    padding-left: 0.5rem !important;\n  }\n  .ps-xxl-3 {\n    padding-left: 1rem !important;\n  }\n  .ps-xxl-4 {\n    padding-left: 1.5rem !important;\n  }\n  .ps-xxl-5 {\n    padding-left: 3rem !important;\n  }\n  .text-xxl-start {\n    text-align: left !important;\n  }\n  .text-xxl-end {\n    text-align: right !important;\n  }\n  .text-xxl-center {\n    text-align: center !important;\n  }\n}\n\n@media (min-width: 1200px) {\n  .fs-1 {\n    font-size: 2rem !important;\n  }\n  .fs-2 {\n    font-size: 1.75rem !important;\n  }\n  .fs-3 {\n    font-size: 1.5rem !important;\n  }\n}\n\n@media print {\n  .d-print-inline {\n    display: inline !important;\n  }\n  .d-print-inline-block {\n    display: inline-block !important;\n  }\n  .d-print-block {\n    display: block !important;\n  }\n  .d-print-grid {\n    display: grid !important;\n  }\n  .d-print-table {\n    display: table !important;\n  }\n  .d-print-table-row {\n    display: table-row !important;\n  }\n  .d-print-table-cell {\n    display: table-cell !important;\n  }\n  .d-print-flex {\n    display: -ms-flexbox !important;\n    display: flex !important;\n  }\n  .d-print-inline-flex {\n    display: -ms-inline-flexbox !important;\n    display: inline-flex !important;\n  }\n  .d-print-none {\n    display: none !important;\n  }\n}\n\n.navbar {\n  font-size: 0.875rem;\n  text-transform: uppercase;\n  font-weight: 600;\n}\n\n.navbar-nav .nav-link {\n  padding-top: .715rem;\n  padding-bottom: .715rem;\n}\n\n.navbar-brand {\n  margin-right: 2rem;\n}\n\n.bg-primary {\n  background-color: theme-color(\"primary\") !important;\n}\n\n.bg-light {\n  border: 1px solid rgba(0, 0, 0, 0.1);\n}\n\n.bg-light.navbar-fixed-top {\n  border-width: 0 0 1px;\n}\n\n.bg-light.navbar-bottom-top {\n  border-width: 1px 0 0;\n}\n\n.nav-item {\n  margin-right: 2rem;\n}\n\n.btn {\n  font-size: 0.875rem;\n  text-transform: uppercase;\n}\n\n.btn-sm, .btn-group-sm > .btn {\n  font-size: 10px;\n}\n\n.btn-warning, .btn-warning:hover, .btn-warning:not([disabled]):not(.disabled):active, .btn-warning:focus {\n  color: #fff;\n}\n\n.btn-outline-secondary {\n  border-color: #919aa1;\n  color: #919aa1;\n}\n\n.btn-outline-secondary:not([disabled]):not(.disabled):hover, .btn-outline-secondary:not([disabled]):not(.disabled):focus, .btn-outline-secondary:not([disabled]):not(.disabled):active {\n  background-color: #ced4da;\n  border-color: #ced4da;\n  color: #fff;\n}\n\n.btn-outline-secondary:not([disabled]):not(.disabled):focus {\n  box-shadow: 0 0 0 0.2rem rgba(206, 212, 218, 0.5);\n}\n\n[class*=\"btn-outline-\"] {\n  border-width: 2px;\n}\n\n.border-secondary {\n  border: 1px solid #ced4da !important;\n}\n\nbody {\n  font-weight: 200;\n  letter-spacing: 1px;\n}\n\nh1, .h1, h2, .h2, h3, .h3, h4, .h4, h5, .h5, h6, .h6 {\n  text-transform: uppercase;\n  letter-spacing: 3px;\n}\n\n.text-secondary {\n  color: #55595c !important;\n}\n\nth {\n  font-size: 0.875rem;\n  text-transform: uppercase;\n}\n\n.table th,\n.table td {\n  padding: 1.5rem;\n}\n\n.table-sm th,\n.table-sm td {\n  padding: .75rem;\n}\n\n.dropdown-menu {\n  font-size: 0.875rem;\n  text-transform: none;\n}\n\n.badge {\n  padding-top: .28rem;\n}\n\n.badge-pill {\n  border-radius: 10rem;\n}\n\n.badge.bg-secondary, .badge.bg-light {\n  color: #343a40;\n}\n\n.list-group-item h1, .list-group-item .h1,\n.list-group-item h2,\n.list-group-item .h2,\n.list-group-item h3,\n.list-group-item .h3,\n.list-group-item h4,\n.list-group-item .h4,\n.list-group-item h5,\n.list-group-item .h5,\n.list-group-item h6,\n.list-group-item .h6,\n.list-group-item .h1,\n.list-group-item .h2,\n.list-group-item .h3,\n.list-group-item .h4,\n.list-group-item .h5,\n.list-group-item .h6 {\n  color: inherit;\n}\n\n.card-title, .card-header {\n  color: inherit;\n}\n"
  },
  {
    "path": "src/sourceDev.WebApp/SharedThemes/lux/wwwroot/css/fontawesome-all.css",
    "content": "/*!\n * Font Awesome Free 5.0.8 by @fontawesome - https://fontawesome.com\n * License - https://fontawesome.com/license (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)\n */\n.fa,\n.fas,\n.far,\n.fal,\n.fab {\n  -moz-osx-font-smoothing: grayscale;\n  -webkit-font-smoothing: antialiased;\n  display: inline-block;\n  font-style: normal;\n  font-variant: normal;\n  text-rendering: auto;\n  line-height: 1; }\n\n.fa-lg {\n  font-size: 1.33333em;\n  line-height: 0.75em;\n  vertical-align: -.0667em; }\n\n.fa-xs {\n  font-size: .75em; }\n\n.fa-sm {\n  font-size: .875em; }\n\n.fa-1x {\n  font-size: 1em; }\n\n.fa-2x {\n  font-size: 2em; }\n\n.fa-3x {\n  font-size: 3em; }\n\n.fa-4x {\n  font-size: 4em; }\n\n.fa-5x {\n  font-size: 5em; }\n\n.fa-6x {\n  font-size: 6em; }\n\n.fa-7x {\n  font-size: 7em; }\n\n.fa-8x {\n  font-size: 8em; }\n\n.fa-9x {\n  font-size: 9em; }\n\n.fa-10x {\n  font-size: 10em; }\n\n.fa-fw {\n  text-align: center;\n  width: 1.25em; }\n\n.fa-ul {\n  list-style-type: none;\n  margin-left: 2.5em;\n  padding-left: 0; }\n  .fa-ul > li {\n    position: relative; }\n\n.fa-li {\n  left: -2em;\n  position: absolute;\n  text-align: center;\n  width: 2em;\n  line-height: inherit; }\n\n.fa-border {\n  border: solid 0.08em #eee;\n  border-radius: .1em;\n  padding: .2em .25em .15em; }\n\n.fa-pull-left {\n  float: left; }\n\n.fa-pull-right {\n  float: right; }\n\n.fa.fa-pull-left,\n.fas.fa-pull-left,\n.far.fa-pull-left,\n.fal.fa-pull-left,\n.fab.fa-pull-left {\n  margin-right: .3em; }\n\n.fa.fa-pull-right,\n.fas.fa-pull-right,\n.far.fa-pull-right,\n.fal.fa-pull-right,\n.fab.fa-pull-right {\n  margin-left: .3em; }\n\n.fa-spin {\n  -webkit-animation: fa-spin 2s infinite linear;\n          animation: fa-spin 2s infinite linear; }\n\n.fa-pulse {\n  -webkit-animation: fa-spin 1s infinite steps(8);\n          animation: fa-spin 1s infinite steps(8); }\n\n@-webkit-keyframes fa-spin {\n  0% {\n    -webkit-transform: rotate(0deg);\n            transform: rotate(0deg); }\n  100% {\n    -webkit-transform: rotate(360deg);\n            transform: rotate(360deg); } }\n\n@keyframes fa-spin {\n  0% {\n    -webkit-transform: rotate(0deg);\n            transform: rotate(0deg); }\n  100% {\n    -webkit-transform: rotate(360deg);\n            transform: rotate(360deg); } }\n\n.fa-rotate-90 {\n  -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)\";\n  -webkit-transform: rotate(90deg);\n          transform: rotate(90deg); }\n\n.fa-rotate-180 {\n  -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)\";\n  -webkit-transform: rotate(180deg);\n          transform: rotate(180deg); }\n\n.fa-rotate-270 {\n  -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)\";\n  -webkit-transform: rotate(270deg);\n          transform: rotate(270deg); }\n\n.fa-flip-horizontal {\n  -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)\";\n  -webkit-transform: scale(-1, 1);\n          transform: scale(-1, 1); }\n\n.fa-flip-vertical {\n  -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)\";\n  -webkit-transform: scale(1, -1);\n          transform: scale(1, -1); }\n\n.fa-flip-horizontal.fa-flip-vertical {\n  -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)\";\n  -webkit-transform: scale(-1, -1);\n          transform: scale(-1, -1); }\n\n:root .fa-rotate-90,\n:root .fa-rotate-180,\n:root .fa-rotate-270,\n:root .fa-flip-horizontal,\n:root .fa-flip-vertical {\n  -webkit-filter: none;\n          filter: none; }\n\n.fa-stack {\n  display: inline-block;\n  height: 2em;\n  line-height: 2em;\n  position: relative;\n  vertical-align: middle;\n  width: 2em; }\n\n.fa-stack-1x,\n.fa-stack-2x {\n  left: 0;\n  position: absolute;\n  text-align: center;\n  width: 100%; }\n\n.fa-stack-1x {\n  line-height: inherit; }\n\n.fa-stack-2x {\n  font-size: 2em; }\n\n.fa-inverse {\n  color: #fff; }\n\n/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen\nreaders do not read off random characters that represent icons */\n.fa-500px:before {\n  content: \"\\f26e\"; }\n\n.fa-accessible-icon:before {\n  content: \"\\f368\"; }\n\n.fa-accusoft:before {\n  content: \"\\f369\"; }\n\n.fa-address-book:before {\n  content: \"\\f2b9\"; }\n\n.fa-address-card:before {\n  content: \"\\f2bb\"; }\n\n.fa-adjust:before {\n  content: \"\\f042\"; }\n\n.fa-adn:before {\n  content: \"\\f170\"; }\n\n.fa-adversal:before {\n  content: \"\\f36a\"; }\n\n.fa-affiliatetheme:before {\n  content: \"\\f36b\"; }\n\n.fa-algolia:before {\n  content: \"\\f36c\"; }\n\n.fa-align-center:before {\n  content: \"\\f037\"; }\n\n.fa-align-justify:before {\n  content: \"\\f039\"; }\n\n.fa-align-left:before {\n  content: \"\\f036\"; }\n\n.fa-align-right:before {\n  content: \"\\f038\"; }\n\n.fa-amazon:before {\n  content: \"\\f270\"; }\n\n.fa-amazon-pay:before {\n  content: \"\\f42c\"; }\n\n.fa-ambulance:before {\n  content: \"\\f0f9\"; }\n\n.fa-american-sign-language-interpreting:before {\n  content: \"\\f2a3\"; }\n\n.fa-amilia:before {\n  content: \"\\f36d\"; }\n\n.fa-anchor:before {\n  content: \"\\f13d\"; }\n\n.fa-android:before {\n  content: \"\\f17b\"; }\n\n.fa-angellist:before {\n  content: \"\\f209\"; }\n\n.fa-angle-double-down:before {\n  content: \"\\f103\"; }\n\n.fa-angle-double-left:before {\n  content: \"\\f100\"; }\n\n.fa-angle-double-right:before {\n  content: \"\\f101\"; }\n\n.fa-angle-double-up:before {\n  content: \"\\f102\"; }\n\n.fa-angle-down:before {\n  content: \"\\f107\"; }\n\n.fa-angle-left:before {\n  content: \"\\f104\"; }\n\n.fa-angle-right:before {\n  content: \"\\f105\"; }\n\n.fa-angle-up:before {\n  content: \"\\f106\"; }\n\n.fa-angrycreative:before {\n  content: \"\\f36e\"; }\n\n.fa-angular:before {\n  content: \"\\f420\"; }\n\n.fa-app-store:before {\n  content: \"\\f36f\"; }\n\n.fa-app-store-ios:before {\n  content: \"\\f370\"; }\n\n.fa-apper:before {\n  content: \"\\f371\"; }\n\n.fa-apple:before {\n  content: \"\\f179\"; }\n\n.fa-apple-pay:before {\n  content: \"\\f415\"; }\n\n.fa-archive:before {\n  content: \"\\f187\"; }\n\n.fa-arrow-alt-circle-down:before {\n  content: \"\\f358\"; }\n\n.fa-arrow-alt-circle-left:before {\n  content: \"\\f359\"; }\n\n.fa-arrow-alt-circle-right:before {\n  content: \"\\f35a\"; }\n\n.fa-arrow-alt-circle-up:before {\n  content: \"\\f35b\"; }\n\n.fa-arrow-circle-down:before {\n  content: \"\\f0ab\"; }\n\n.fa-arrow-circle-left:before {\n  content: \"\\f0a8\"; }\n\n.fa-arrow-circle-right:before {\n  content: \"\\f0a9\"; }\n\n.fa-arrow-circle-up:before {\n  content: \"\\f0aa\"; }\n\n.fa-arrow-down:before {\n  content: \"\\f063\"; }\n\n.fa-arrow-left:before {\n  content: \"\\f060\"; }\n\n.fa-arrow-right:before {\n  content: \"\\f061\"; }\n\n.fa-arrow-up:before {\n  content: \"\\f062\"; }\n\n.fa-arrows-alt:before {\n  content: \"\\f0b2\"; }\n\n.fa-arrows-alt-h:before {\n  content: \"\\f337\"; }\n\n.fa-arrows-alt-v:before {\n  content: \"\\f338\"; }\n\n.fa-assistive-listening-systems:before {\n  content: \"\\f2a2\"; }\n\n.fa-asterisk:before {\n  content: \"\\f069\"; }\n\n.fa-asymmetrik:before {\n  content: \"\\f372\"; }\n\n.fa-at:before {\n  content: \"\\f1fa\"; }\n\n.fa-audible:before {\n  content: \"\\f373\"; }\n\n.fa-audio-description:before {\n  content: \"\\f29e\"; }\n\n.fa-autoprefixer:before {\n  content: \"\\f41c\"; }\n\n.fa-avianex:before {\n  content: \"\\f374\"; }\n\n.fa-aviato:before {\n  content: \"\\f421\"; }\n\n.fa-aws:before {\n  content: \"\\f375\"; }\n\n.fa-backward:before {\n  content: \"\\f04a\"; }\n\n.fa-balance-scale:before {\n  content: \"\\f24e\"; }\n\n.fa-ban:before {\n  content: \"\\f05e\"; }\n\n.fa-band-aid:before {\n  content: \"\\f462\"; }\n\n.fa-bandcamp:before {\n  content: \"\\f2d5\"; }\n\n.fa-barcode:before {\n  content: \"\\f02a\"; }\n\n.fa-bars:before {\n  content: \"\\f0c9\"; }\n\n.fa-baseball-ball:before {\n  content: \"\\f433\"; }\n\n.fa-basketball-ball:before {\n  content: \"\\f434\"; }\n\n.fa-bath:before {\n  content: \"\\f2cd\"; }\n\n.fa-battery-empty:before {\n  content: \"\\f244\"; }\n\n.fa-battery-full:before {\n  content: \"\\f240\"; }\n\n.fa-battery-half:before {\n  content: \"\\f242\"; }\n\n.fa-battery-quarter:before {\n  content: \"\\f243\"; }\n\n.fa-battery-three-quarters:before {\n  content: \"\\f241\"; }\n\n.fa-bed:before {\n  content: \"\\f236\"; }\n\n.fa-beer:before {\n  content: \"\\f0fc\"; }\n\n.fa-behance:before {\n  content: \"\\f1b4\"; }\n\n.fa-behance-square:before {\n  content: \"\\f1b5\"; }\n\n.fa-bell:before {\n  content: \"\\f0f3\"; }\n\n.fa-bell-slash:before {\n  content: \"\\f1f6\"; }\n\n.fa-bicycle:before {\n  content: \"\\f206\"; }\n\n.fa-bimobject:before {\n  content: \"\\f378\"; }\n\n.fa-binoculars:before {\n  content: \"\\f1e5\"; }\n\n.fa-birthday-cake:before {\n  content: \"\\f1fd\"; }\n\n.fa-bitbucket:before {\n  content: \"\\f171\"; }\n\n.fa-bitcoin:before {\n  content: \"\\f379\"; }\n\n.fa-bity:before {\n  content: \"\\f37a\"; }\n\n.fa-black-tie:before {\n  content: \"\\f27e\"; }\n\n.fa-blackberry:before {\n  content: \"\\f37b\"; }\n\n.fa-blind:before {\n  content: \"\\f29d\"; }\n\n.fa-blogger:before {\n  content: \"\\f37c\"; }\n\n.fa-blogger-b:before {\n  content: \"\\f37d\"; }\n\n.fa-bluetooth:before {\n  content: \"\\f293\"; }\n\n.fa-bluetooth-b:before {\n  content: \"\\f294\"; }\n\n.fa-bold:before {\n  content: \"\\f032\"; }\n\n.fa-bolt:before {\n  content: \"\\f0e7\"; }\n\n.fa-bomb:before {\n  content: \"\\f1e2\"; }\n\n.fa-book:before {\n  content: \"\\f02d\"; }\n\n.fa-bookmark:before {\n  content: \"\\f02e\"; }\n\n.fa-bowling-ball:before {\n  content: \"\\f436\"; }\n\n.fa-box:before {\n  content: \"\\f466\"; }\n\n.fa-boxes:before {\n  content: \"\\f468\"; }\n\n.fa-braille:before {\n  content: \"\\f2a1\"; }\n\n.fa-briefcase:before {\n  content: \"\\f0b1\"; }\n\n.fa-btc:before {\n  content: \"\\f15a\"; }\n\n.fa-bug:before {\n  content: \"\\f188\"; }\n\n.fa-building:before {\n  content: \"\\f1ad\"; }\n\n.fa-bullhorn:before {\n  content: \"\\f0a1\"; }\n\n.fa-bullseye:before {\n  content: \"\\f140\"; }\n\n.fa-buromobelexperte:before {\n  content: \"\\f37f\"; }\n\n.fa-bus:before {\n  content: \"\\f207\"; }\n\n.fa-buysellads:before {\n  content: \"\\f20d\"; }\n\n.fa-calculator:before {\n  content: \"\\f1ec\"; }\n\n.fa-calendar:before {\n  content: \"\\f133\"; }\n\n.fa-calendar-alt:before {\n  content: \"\\f073\"; }\n\n.fa-calendar-check:before {\n  content: \"\\f274\"; }\n\n.fa-calendar-minus:before {\n  content: \"\\f272\"; }\n\n.fa-calendar-plus:before {\n  content: \"\\f271\"; }\n\n.fa-calendar-times:before {\n  content: \"\\f273\"; }\n\n.fa-camera:before {\n  content: \"\\f030\"; }\n\n.fa-camera-retro:before {\n  content: \"\\f083\"; }\n\n.fa-car:before {\n  content: \"\\f1b9\"; }\n\n.fa-caret-down:before {\n  content: \"\\f0d7\"; }\n\n.fa-caret-left:before {\n  content: \"\\f0d9\"; }\n\n.fa-caret-right:before {\n  content: \"\\f0da\"; }\n\n.fa-caret-square-down:before {\n  content: \"\\f150\"; }\n\n.fa-caret-square-left:before {\n  content: \"\\f191\"; }\n\n.fa-caret-square-right:before {\n  content: \"\\f152\"; }\n\n.fa-caret-square-up:before {\n  content: \"\\f151\"; }\n\n.fa-caret-up:before {\n  content: \"\\f0d8\"; }\n\n.fa-cart-arrow-down:before {\n  content: \"\\f218\"; }\n\n.fa-cart-plus:before {\n  content: \"\\f217\"; }\n\n.fa-cc-amazon-pay:before {\n  content: \"\\f42d\"; }\n\n.fa-cc-amex:before {\n  content: \"\\f1f3\"; }\n\n.fa-cc-apple-pay:before {\n  content: \"\\f416\"; }\n\n.fa-cc-diners-club:before {\n  content: \"\\f24c\"; }\n\n.fa-cc-discover:before {\n  content: \"\\f1f2\"; }\n\n.fa-cc-jcb:before {\n  content: \"\\f24b\"; }\n\n.fa-cc-mastercard:before {\n  content: \"\\f1f1\"; }\n\n.fa-cc-paypal:before {\n  content: \"\\f1f4\"; }\n\n.fa-cc-stripe:before {\n  content: \"\\f1f5\"; }\n\n.fa-cc-visa:before {\n  content: \"\\f1f0\"; }\n\n.fa-centercode:before {\n  content: \"\\f380\"; }\n\n.fa-certificate:before {\n  content: \"\\f0a3\"; }\n\n.fa-chart-area:before {\n  content: \"\\f1fe\"; }\n\n.fa-chart-bar:before {\n  content: \"\\f080\"; }\n\n.fa-chart-line:before {\n  content: \"\\f201\"; }\n\n.fa-chart-pie:before {\n  content: \"\\f200\"; }\n\n.fa-check:before {\n  content: \"\\f00c\"; }\n\n.fa-check-circle:before {\n  content: \"\\f058\"; }\n\n.fa-check-square:before {\n  content: \"\\f14a\"; }\n\n.fa-chess:before {\n  content: \"\\f439\"; }\n\n.fa-chess-bishop:before {\n  content: \"\\f43a\"; }\n\n.fa-chess-board:before {\n  content: \"\\f43c\"; }\n\n.fa-chess-king:before {\n  content: \"\\f43f\"; }\n\n.fa-chess-knight:before {\n  content: \"\\f441\"; }\n\n.fa-chess-pawn:before {\n  content: \"\\f443\"; }\n\n.fa-chess-queen:before {\n  content: \"\\f445\"; }\n\n.fa-chess-rook:before {\n  content: \"\\f447\"; }\n\n.fa-chevron-circle-down:before {\n  content: \"\\f13a\"; }\n\n.fa-chevron-circle-left:before {\n  content: \"\\f137\"; }\n\n.fa-chevron-circle-right:before {\n  content: \"\\f138\"; }\n\n.fa-chevron-circle-up:before {\n  content: \"\\f139\"; }\n\n.fa-chevron-down:before {\n  content: \"\\f078\"; }\n\n.fa-chevron-left:before {\n  content: \"\\f053\"; }\n\n.fa-chevron-right:before {\n  content: \"\\f054\"; }\n\n.fa-chevron-up:before {\n  content: \"\\f077\"; }\n\n.fa-child:before {\n  content: \"\\f1ae\"; }\n\n.fa-chrome:before {\n  content: \"\\f268\"; }\n\n.fa-circle:before {\n  content: \"\\f111\"; }\n\n.fa-circle-notch:before {\n  content: \"\\f1ce\"; }\n\n.fa-clipboard:before {\n  content: \"\\f328\"; }\n\n.fa-clipboard-check:before {\n  content: \"\\f46c\"; }\n\n.fa-clipboard-list:before {\n  content: \"\\f46d\"; }\n\n.fa-clock:before {\n  content: \"\\f017\"; }\n\n.fa-clone:before {\n  content: \"\\f24d\"; }\n\n.fa-closed-captioning:before {\n  content: \"\\f20a\"; }\n\n.fa-cloud:before {\n  content: \"\\f0c2\"; }\n\n.fa-cloud-download-alt:before {\n  content: \"\\f381\"; }\n\n.fa-cloud-upload-alt:before {\n  content: \"\\f382\"; }\n\n.fa-cloudscale:before {\n  content: \"\\f383\"; }\n\n.fa-cloudsmith:before {\n  content: \"\\f384\"; }\n\n.fa-cloudversify:before {\n  content: \"\\f385\"; }\n\n.fa-code:before {\n  content: \"\\f121\"; }\n\n.fa-code-branch:before {\n  content: \"\\f126\"; }\n\n.fa-codepen:before {\n  content: \"\\f1cb\"; }\n\n.fa-codiepie:before {\n  content: \"\\f284\"; }\n\n.fa-coffee:before {\n  content: \"\\f0f4\"; }\n\n.fa-cog:before {\n  content: \"\\f013\"; }\n\n.fa-cogs:before {\n  content: \"\\f085\"; }\n\n.fa-columns:before {\n  content: \"\\f0db\"; }\n\n.fa-comment:before {\n  content: \"\\f075\"; }\n\n.fa-comment-alt:before {\n  content: \"\\f27a\"; }\n\n.fa-comments:before {\n  content: \"\\f086\"; }\n\n.fa-compass:before {\n  content: \"\\f14e\"; }\n\n.fa-compress:before {\n  content: \"\\f066\"; }\n\n.fa-connectdevelop:before {\n  content: \"\\f20e\"; }\n\n.fa-contao:before {\n  content: \"\\f26d\"; }\n\n.fa-copy:before {\n  content: \"\\f0c5\"; }\n\n.fa-copyright:before {\n  content: \"\\f1f9\"; }\n\n.fa-cpanel:before {\n  content: \"\\f388\"; }\n\n.fa-creative-commons:before {\n  content: \"\\f25e\"; }\n\n.fa-credit-card:before {\n  content: \"\\f09d\"; }\n\n.fa-crop:before {\n  content: \"\\f125\"; }\n\n.fa-crosshairs:before {\n  content: \"\\f05b\"; }\n\n.fa-css3:before {\n  content: \"\\f13c\"; }\n\n.fa-css3-alt:before {\n  content: \"\\f38b\"; }\n\n.fa-cube:before {\n  content: \"\\f1b2\"; }\n\n.fa-cubes:before {\n  content: \"\\f1b3\"; }\n\n.fa-cut:before {\n  content: \"\\f0c4\"; }\n\n.fa-cuttlefish:before {\n  content: \"\\f38c\"; }\n\n.fa-d-and-d:before {\n  content: \"\\f38d\"; }\n\n.fa-dashcube:before {\n  content: \"\\f210\"; }\n\n.fa-database:before {\n  content: \"\\f1c0\"; }\n\n.fa-deaf:before {\n  content: \"\\f2a4\"; }\n\n.fa-delicious:before {\n  content: \"\\f1a5\"; }\n\n.fa-deploydog:before {\n  content: \"\\f38e\"; }\n\n.fa-deskpro:before {\n  content: \"\\f38f\"; }\n\n.fa-desktop:before {\n  content: \"\\f108\"; }\n\n.fa-deviantart:before {\n  content: \"\\f1bd\"; }\n\n.fa-digg:before {\n  content: \"\\f1a6\"; }\n\n.fa-digital-ocean:before {\n  content: \"\\f391\"; }\n\n.fa-discord:before {\n  content: \"\\f392\"; }\n\n.fa-discourse:before {\n  content: \"\\f393\"; }\n\n.fa-dna:before {\n  content: \"\\f471\"; }\n\n.fa-dochub:before {\n  content: \"\\f394\"; }\n\n.fa-docker:before {\n  content: \"\\f395\"; }\n\n.fa-dollar-sign:before {\n  content: \"\\f155\"; }\n\n.fa-dolly:before {\n  content: \"\\f472\"; }\n\n.fa-dolly-flatbed:before {\n  content: \"\\f474\"; }\n\n.fa-dot-circle:before {\n  content: \"\\f192\"; }\n\n.fa-download:before {\n  content: \"\\f019\"; }\n\n.fa-draft2digital:before {\n  content: \"\\f396\"; }\n\n.fa-dribbble:before {\n  content: \"\\f17d\"; }\n\n.fa-dribbble-square:before {\n  content: \"\\f397\"; }\n\n.fa-dropbox:before {\n  content: \"\\f16b\"; }\n\n.fa-drupal:before {\n  content: \"\\f1a9\"; }\n\n.fa-dyalog:before {\n  content: \"\\f399\"; }\n\n.fa-earlybirds:before {\n  content: \"\\f39a\"; }\n\n.fa-edge:before {\n  content: \"\\f282\"; }\n\n.fa-edit:before {\n  content: \"\\f044\"; }\n\n.fa-eject:before {\n  content: \"\\f052\"; }\n\n.fa-elementor:before {\n  content: \"\\f430\"; }\n\n.fa-ellipsis-h:before {\n  content: \"\\f141\"; }\n\n.fa-ellipsis-v:before {\n  content: \"\\f142\"; }\n\n.fa-ember:before {\n  content: \"\\f423\"; }\n\n.fa-empire:before {\n  content: \"\\f1d1\"; }\n\n.fa-envelope:before {\n  content: \"\\f0e0\"; }\n\n.fa-envelope-open:before {\n  content: \"\\f2b6\"; }\n\n.fa-envelope-square:before {\n  content: \"\\f199\"; }\n\n.fa-envira:before {\n  content: \"\\f299\"; }\n\n.fa-eraser:before {\n  content: \"\\f12d\"; }\n\n.fa-erlang:before {\n  content: \"\\f39d\"; }\n\n.fa-ethereum:before {\n  content: \"\\f42e\"; }\n\n.fa-etsy:before {\n  content: \"\\f2d7\"; }\n\n.fa-euro-sign:before {\n  content: \"\\f153\"; }\n\n.fa-exchange-alt:before {\n  content: \"\\f362\"; }\n\n.fa-exclamation:before {\n  content: \"\\f12a\"; }\n\n.fa-exclamation-circle:before {\n  content: \"\\f06a\"; }\n\n.fa-exclamation-triangle:before {\n  content: \"\\f071\"; }\n\n.fa-expand:before {\n  content: \"\\f065\"; }\n\n.fa-expand-arrows-alt:before {\n  content: \"\\f31e\"; }\n\n.fa-expeditedssl:before {\n  content: \"\\f23e\"; }\n\n.fa-external-link-alt:before {\n  content: \"\\f35d\"; }\n\n.fa-external-link-square-alt:before {\n  content: \"\\f360\"; }\n\n.fa-eye:before {\n  content: \"\\f06e\"; }\n\n.fa-eye-dropper:before {\n  content: \"\\f1fb\"; }\n\n.fa-eye-slash:before {\n  content: \"\\f070\"; }\n\n.fa-facebook:before {\n  content: \"\\f09a\"; }\n\n.fa-facebook-f:before {\n  content: \"\\f39e\"; }\n\n.fa-facebook-messenger:before {\n  content: \"\\f39f\"; }\n\n.fa-facebook-square:before {\n  content: \"\\f082\"; }\n\n.fa-fast-backward:before {\n  content: \"\\f049\"; }\n\n.fa-fast-forward:before {\n  content: \"\\f050\"; }\n\n.fa-fax:before {\n  content: \"\\f1ac\"; }\n\n.fa-female:before {\n  content: \"\\f182\"; }\n\n.fa-fighter-jet:before {\n  content: \"\\f0fb\"; }\n\n.fa-file:before {\n  content: \"\\f15b\"; }\n\n.fa-file-alt:before {\n  content: \"\\f15c\"; }\n\n.fa-file-archive:before {\n  content: \"\\f1c6\"; }\n\n.fa-file-audio:before {\n  content: \"\\f1c7\"; }\n\n.fa-file-code:before {\n  content: \"\\f1c9\"; }\n\n.fa-file-excel:before {\n  content: \"\\f1c3\"; }\n\n.fa-file-image:before {\n  content: \"\\f1c5\"; }\n\n.fa-file-pdf:before {\n  content: \"\\f1c1\"; }\n\n.fa-file-powerpoint:before {\n  content: \"\\f1c4\"; }\n\n.fa-file-video:before {\n  content: \"\\f1c8\"; }\n\n.fa-file-word:before {\n  content: \"\\f1c2\"; }\n\n.fa-film:before {\n  content: \"\\f008\"; }\n\n.fa-filter:before {\n  content: \"\\f0b0\"; }\n\n.fa-fire:before {\n  content: \"\\f06d\"; }\n\n.fa-fire-extinguisher:before {\n  content: \"\\f134\"; }\n\n.fa-firefox:before {\n  content: \"\\f269\"; }\n\n.fa-first-aid:before {\n  content: \"\\f479\"; }\n\n.fa-first-order:before {\n  content: \"\\f2b0\"; }\n\n.fa-firstdraft:before {\n  content: \"\\f3a1\"; }\n\n.fa-flag:before {\n  content: \"\\f024\"; }\n\n.fa-flag-checkered:before {\n  content: \"\\f11e\"; }\n\n.fa-flask:before {\n  content: \"\\f0c3\"; }\n\n.fa-flickr:before {\n  content: \"\\f16e\"; }\n\n.fa-flipboard:before {\n  content: \"\\f44d\"; }\n\n.fa-fly:before {\n  content: \"\\f417\"; }\n\n.fa-folder:before {\n  content: \"\\f07b\"; }\n\n.fa-folder-open:before {\n  content: \"\\f07c\"; }\n\n.fa-font:before {\n  content: \"\\f031\"; }\n\n.fa-font-awesome:before {\n  content: \"\\f2b4\"; }\n\n.fa-font-awesome-alt:before {\n  content: \"\\f35c\"; }\n\n.fa-font-awesome-flag:before {\n  content: \"\\f425\"; }\n\n.fa-fonticons:before {\n  content: \"\\f280\"; }\n\n.fa-fonticons-fi:before {\n  content: \"\\f3a2\"; }\n\n.fa-football-ball:before {\n  content: \"\\f44e\"; }\n\n.fa-fort-awesome:before {\n  content: \"\\f286\"; }\n\n.fa-fort-awesome-alt:before {\n  content: \"\\f3a3\"; }\n\n.fa-forumbee:before {\n  content: \"\\f211\"; }\n\n.fa-forward:before {\n  content: \"\\f04e\"; }\n\n.fa-foursquare:before {\n  content: \"\\f180\"; }\n\n.fa-free-code-camp:before {\n  content: \"\\f2c5\"; }\n\n.fa-freebsd:before {\n  content: \"\\f3a4\"; }\n\n.fa-frown:before {\n  content: \"\\f119\"; }\n\n.fa-futbol:before {\n  content: \"\\f1e3\"; }\n\n.fa-gamepad:before {\n  content: \"\\f11b\"; }\n\n.fa-gavel:before {\n  content: \"\\f0e3\"; }\n\n.fa-gem:before {\n  content: \"\\f3a5\"; }\n\n.fa-genderless:before {\n  content: \"\\f22d\"; }\n\n.fa-get-pocket:before {\n  content: \"\\f265\"; }\n\n.fa-gg:before {\n  content: \"\\f260\"; }\n\n.fa-gg-circle:before {\n  content: \"\\f261\"; }\n\n.fa-gift:before {\n  content: \"\\f06b\"; }\n\n.fa-git:before {\n  content: \"\\f1d3\"; }\n\n.fa-git-square:before {\n  content: \"\\f1d2\"; }\n\n.fa-github:before {\n  content: \"\\f09b\"; }\n\n.fa-github-alt:before {\n  content: \"\\f113\"; }\n\n.fa-github-square:before {\n  content: \"\\f092\"; }\n\n.fa-gitkraken:before {\n  content: \"\\f3a6\"; }\n\n.fa-gitlab:before {\n  content: \"\\f296\"; }\n\n.fa-gitter:before {\n  content: \"\\f426\"; }\n\n.fa-glass-martini:before {\n  content: \"\\f000\"; }\n\n.fa-glide:before {\n  content: \"\\f2a5\"; }\n\n.fa-glide-g:before {\n  content: \"\\f2a6\"; }\n\n.fa-globe:before {\n  content: \"\\f0ac\"; }\n\n.fa-gofore:before {\n  content: \"\\f3a7\"; }\n\n.fa-golf-ball:before {\n  content: \"\\f450\"; }\n\n.fa-goodreads:before {\n  content: \"\\f3a8\"; }\n\n.fa-goodreads-g:before {\n  content: \"\\f3a9\"; }\n\n.fa-google:before {\n  content: \"\\f1a0\"; }\n\n.fa-google-drive:before {\n  content: \"\\f3aa\"; }\n\n.fa-google-play:before {\n  content: \"\\f3ab\"; }\n\n.fa-google-plus:before {\n  content: \"\\f2b3\"; }\n\n.fa-google-plus-g:before {\n  content: \"\\f0d5\"; }\n\n.fa-google-plus-square:before {\n  content: \"\\f0d4\"; }\n\n.fa-google-wallet:before {\n  content: \"\\f1ee\"; }\n\n.fa-graduation-cap:before {\n  content: \"\\f19d\"; }\n\n.fa-gratipay:before {\n  content: \"\\f184\"; }\n\n.fa-grav:before {\n  content: \"\\f2d6\"; }\n\n.fa-gripfire:before {\n  content: \"\\f3ac\"; }\n\n.fa-grunt:before {\n  content: \"\\f3ad\"; }\n\n.fa-gulp:before {\n  content: \"\\f3ae\"; }\n\n.fa-h-square:before {\n  content: \"\\f0fd\"; }\n\n.fa-hacker-news:before {\n  content: \"\\f1d4\"; }\n\n.fa-hacker-news-square:before {\n  content: \"\\f3af\"; }\n\n.fa-hand-lizard:before {\n  content: \"\\f258\"; }\n\n.fa-hand-paper:before {\n  content: \"\\f256\"; }\n\n.fa-hand-peace:before {\n  content: \"\\f25b\"; }\n\n.fa-hand-point-down:before {\n  content: \"\\f0a7\"; }\n\n.fa-hand-point-left:before {\n  content: \"\\f0a5\"; }\n\n.fa-hand-point-right:before {\n  content: \"\\f0a4\"; }\n\n.fa-hand-point-up:before {\n  content: \"\\f0a6\"; }\n\n.fa-hand-pointer:before {\n  content: \"\\f25a\"; }\n\n.fa-hand-rock:before {\n  content: \"\\f255\"; }\n\n.fa-hand-scissors:before {\n  content: \"\\f257\"; }\n\n.fa-hand-spock:before {\n  content: \"\\f259\"; }\n\n.fa-handshake:before {\n  content: \"\\f2b5\"; }\n\n.fa-hashtag:before {\n  content: \"\\f292\"; }\n\n.fa-hdd:before {\n  content: \"\\f0a0\"; }\n\n.fa-heading:before {\n  content: \"\\f1dc\"; }\n\n.fa-headphones:before {\n  content: \"\\f025\"; }\n\n.fa-heart:before {\n  content: \"\\f004\"; }\n\n.fa-heartbeat:before {\n  content: \"\\f21e\"; }\n\n.fa-hips:before {\n  content: \"\\f452\"; }\n\n.fa-hire-a-helper:before {\n  content: \"\\f3b0\"; }\n\n.fa-history:before {\n  content: \"\\f1da\"; }\n\n.fa-hockey-puck:before {\n  content: \"\\f453\"; }\n\n.fa-home:before {\n  content: \"\\f015\"; }\n\n.fa-hooli:before {\n  content: \"\\f427\"; }\n\n.fa-hospital:before {\n  content: \"\\f0f8\"; }\n\n.fa-hospital-symbol:before {\n  content: \"\\f47e\"; }\n\n.fa-hotjar:before {\n  content: \"\\f3b1\"; }\n\n.fa-hourglass:before {\n  content: \"\\f254\"; }\n\n.fa-hourglass-end:before {\n  content: \"\\f253\"; }\n\n.fa-hourglass-half:before {\n  content: \"\\f252\"; }\n\n.fa-hourglass-start:before {\n  content: \"\\f251\"; }\n\n.fa-houzz:before {\n  content: \"\\f27c\"; }\n\n.fa-html5:before {\n  content: \"\\f13b\"; }\n\n.fa-hubspot:before {\n  content: \"\\f3b2\"; }\n\n.fa-i-cursor:before {\n  content: \"\\f246\"; }\n\n.fa-id-badge:before {\n  content: \"\\f2c1\"; }\n\n.fa-id-card:before {\n  content: \"\\f2c2\"; }\n\n.fa-image:before {\n  content: \"\\f03e\"; }\n\n.fa-images:before {\n  content: \"\\f302\"; }\n\n.fa-imdb:before {\n  content: \"\\f2d8\"; }\n\n.fa-inbox:before {\n  content: \"\\f01c\"; }\n\n.fa-indent:before {\n  content: \"\\f03c\"; }\n\n.fa-industry:before {\n  content: \"\\f275\"; }\n\n.fa-info:before {\n  content: \"\\f129\"; }\n\n.fa-info-circle:before {\n  content: \"\\f05a\"; }\n\n.fa-instagram:before {\n  content: \"\\f16d\"; }\n\n.fa-internet-explorer:before {\n  content: \"\\f26b\"; }\n\n.fa-ioxhost:before {\n  content: \"\\f208\"; }\n\n.fa-italic:before {\n  content: \"\\f033\"; }\n\n.fa-itunes:before {\n  content: \"\\f3b4\"; }\n\n.fa-itunes-note:before {\n  content: \"\\f3b5\"; }\n\n.fa-jenkins:before {\n  content: \"\\f3b6\"; }\n\n.fa-joget:before {\n  content: \"\\f3b7\"; }\n\n.fa-joomla:before {\n  content: \"\\f1aa\"; }\n\n.fa-js:before {\n  content: \"\\f3b8\"; }\n\n.fa-js-square:before {\n  content: \"\\f3b9\"; }\n\n.fa-jsfiddle:before {\n  content: \"\\f1cc\"; }\n\n.fa-key:before {\n  content: \"\\f084\"; }\n\n.fa-keyboard:before {\n  content: \"\\f11c\"; }\n\n.fa-keycdn:before {\n  content: \"\\f3ba\"; }\n\n.fa-kickstarter:before {\n  content: \"\\f3bb\"; }\n\n.fa-kickstarter-k:before {\n  content: \"\\f3bc\"; }\n\n.fa-korvue:before {\n  content: \"\\f42f\"; }\n\n.fa-language:before {\n  content: \"\\f1ab\"; }\n\n.fa-laptop:before {\n  content: \"\\f109\"; }\n\n.fa-laravel:before {\n  content: \"\\f3bd\"; }\n\n.fa-lastfm:before {\n  content: \"\\f202\"; }\n\n.fa-lastfm-square:before {\n  content: \"\\f203\"; }\n\n.fa-leaf:before {\n  content: \"\\f06c\"; }\n\n.fa-leanpub:before {\n  content: \"\\f212\"; }\n\n.fa-lemon:before {\n  content: \"\\f094\"; }\n\n.fa-less:before {\n  content: \"\\f41d\"; }\n\n.fa-level-down-alt:before {\n  content: \"\\f3be\"; }\n\n.fa-level-up-alt:before {\n  content: \"\\f3bf\"; }\n\n.fa-life-ring:before {\n  content: \"\\f1cd\"; }\n\n.fa-lightbulb:before {\n  content: \"\\f0eb\"; }\n\n.fa-line:before {\n  content: \"\\f3c0\"; }\n\n.fa-link:before {\n  content: \"\\f0c1\"; }\n\n.fa-linkedin:before {\n  content: \"\\f08c\"; }\n\n.fa-linkedin-in:before {\n  content: \"\\f0e1\"; }\n\n.fa-linode:before {\n  content: \"\\f2b8\"; }\n\n.fa-linux:before {\n  content: \"\\f17c\"; }\n\n.fa-lira-sign:before {\n  content: \"\\f195\"; }\n\n.fa-list:before {\n  content: \"\\f03a\"; }\n\n.fa-list-alt:before {\n  content: \"\\f022\"; }\n\n.fa-list-ol:before {\n  content: \"\\f0cb\"; }\n\n.fa-list-ul:before {\n  content: \"\\f0ca\"; }\n\n.fa-location-arrow:before {\n  content: \"\\f124\"; }\n\n.fa-lock:before {\n  content: \"\\f023\"; }\n\n.fa-lock-open:before {\n  content: \"\\f3c1\"; }\n\n.fa-long-arrow-alt-down:before {\n  content: \"\\f309\"; }\n\n.fa-long-arrow-alt-left:before {\n  content: \"\\f30a\"; }\n\n.fa-long-arrow-alt-right:before {\n  content: \"\\f30b\"; }\n\n.fa-long-arrow-alt-up:before {\n  content: \"\\f30c\"; }\n\n.fa-low-vision:before {\n  content: \"\\f2a8\"; }\n\n.fa-lyft:before {\n  content: \"\\f3c3\"; }\n\n.fa-magento:before {\n  content: \"\\f3c4\"; }\n\n.fa-magic:before {\n  content: \"\\f0d0\"; }\n\n.fa-magnet:before {\n  content: \"\\f076\"; }\n\n.fa-male:before {\n  content: \"\\f183\"; }\n\n.fa-map:before {\n  content: \"\\f279\"; }\n\n.fa-map-marker:before {\n  content: \"\\f041\"; }\n\n.fa-map-marker-alt:before {\n  content: \"\\f3c5\"; }\n\n.fa-map-pin:before {\n  content: \"\\f276\"; }\n\n.fa-map-signs:before {\n  content: \"\\f277\"; }\n\n.fa-mars:before {\n  content: \"\\f222\"; }\n\n.fa-mars-double:before {\n  content: \"\\f227\"; }\n\n.fa-mars-stroke:before {\n  content: \"\\f229\"; }\n\n.fa-mars-stroke-h:before {\n  content: \"\\f22b\"; }\n\n.fa-mars-stroke-v:before {\n  content: \"\\f22a\"; }\n\n.fa-maxcdn:before {\n  content: \"\\f136\"; }\n\n.fa-medapps:before {\n  content: \"\\f3c6\"; }\n\n.fa-medium:before {\n  content: \"\\f23a\"; }\n\n.fa-medium-m:before {\n  content: \"\\f3c7\"; }\n\n.fa-medkit:before {\n  content: \"\\f0fa\"; }\n\n.fa-medrt:before {\n  content: \"\\f3c8\"; }\n\n.fa-meetup:before {\n  content: \"\\f2e0\"; }\n\n.fa-meh:before {\n  content: \"\\f11a\"; }\n\n.fa-mercury:before {\n  content: \"\\f223\"; }\n\n.fa-microchip:before {\n  content: \"\\f2db\"; }\n\n.fa-microphone:before {\n  content: \"\\f130\"; }\n\n.fa-microphone-slash:before {\n  content: \"\\f131\"; }\n\n.fa-microsoft:before {\n  content: \"\\f3ca\"; }\n\n.fa-minus:before {\n  content: \"\\f068\"; }\n\n.fa-minus-circle:before {\n  content: \"\\f056\"; }\n\n.fa-minus-square:before {\n  content: \"\\f146\"; }\n\n.fa-mix:before {\n  content: \"\\f3cb\"; }\n\n.fa-mixcloud:before {\n  content: \"\\f289\"; }\n\n.fa-mizuni:before {\n  content: \"\\f3cc\"; }\n\n.fa-mobile:before {\n  content: \"\\f10b\"; }\n\n.fa-mobile-alt:before {\n  content: \"\\f3cd\"; }\n\n.fa-modx:before {\n  content: \"\\f285\"; }\n\n.fa-monero:before {\n  content: \"\\f3d0\"; }\n\n.fa-money-bill-alt:before {\n  content: \"\\f3d1\"; }\n\n.fa-moon:before {\n  content: \"\\f186\"; }\n\n.fa-motorcycle:before {\n  content: \"\\f21c\"; }\n\n.fa-mouse-pointer:before {\n  content: \"\\f245\"; }\n\n.fa-music:before {\n  content: \"\\f001\"; }\n\n.fa-napster:before {\n  content: \"\\f3d2\"; }\n\n.fa-neuter:before {\n  content: \"\\f22c\"; }\n\n.fa-newspaper:before {\n  content: \"\\f1ea\"; }\n\n.fa-nintendo-switch:before {\n  content: \"\\f418\"; }\n\n.fa-node:before {\n  content: \"\\f419\"; }\n\n.fa-node-js:before {\n  content: \"\\f3d3\"; }\n\n.fa-npm:before {\n  content: \"\\f3d4\"; }\n\n.fa-ns8:before {\n  content: \"\\f3d5\"; }\n\n.fa-nutritionix:before {\n  content: \"\\f3d6\"; }\n\n.fa-object-group:before {\n  content: \"\\f247\"; }\n\n.fa-object-ungroup:before {\n  content: \"\\f248\"; }\n\n.fa-odnoklassniki:before {\n  content: \"\\f263\"; }\n\n.fa-odnoklassniki-square:before {\n  content: \"\\f264\"; }\n\n.fa-opencart:before {\n  content: \"\\f23d\"; }\n\n.fa-openid:before {\n  content: \"\\f19b\"; }\n\n.fa-opera:before {\n  content: \"\\f26a\"; }\n\n.fa-optin-monster:before {\n  content: \"\\f23c\"; }\n\n.fa-osi:before {\n  content: \"\\f41a\"; }\n\n.fa-outdent:before {\n  content: \"\\f03b\"; }\n\n.fa-page4:before {\n  content: \"\\f3d7\"; }\n\n.fa-pagelines:before {\n  content: \"\\f18c\"; }\n\n.fa-paint-brush:before {\n  content: \"\\f1fc\"; }\n\n.fa-palfed:before {\n  content: \"\\f3d8\"; }\n\n.fa-pallet:before {\n  content: \"\\f482\"; }\n\n.fa-paper-plane:before {\n  content: \"\\f1d8\"; }\n\n.fa-paperclip:before {\n  content: \"\\f0c6\"; }\n\n.fa-paragraph:before {\n  content: \"\\f1dd\"; }\n\n.fa-paste:before {\n  content: \"\\f0ea\"; }\n\n.fa-patreon:before {\n  content: \"\\f3d9\"; }\n\n.fa-pause:before {\n  content: \"\\f04c\"; }\n\n.fa-pause-circle:before {\n  content: \"\\f28b\"; }\n\n.fa-paw:before {\n  content: \"\\f1b0\"; }\n\n.fa-paypal:before {\n  content: \"\\f1ed\"; }\n\n.fa-pen-square:before {\n  content: \"\\f14b\"; }\n\n.fa-pencil-alt:before {\n  content: \"\\f303\"; }\n\n.fa-percent:before {\n  content: \"\\f295\"; }\n\n.fa-periscope:before {\n  content: \"\\f3da\"; }\n\n.fa-phabricator:before {\n  content: \"\\f3db\"; }\n\n.fa-phoenix-framework:before {\n  content: \"\\f3dc\"; }\n\n.fa-phone:before {\n  content: \"\\f095\"; }\n\n.fa-phone-square:before {\n  content: \"\\f098\"; }\n\n.fa-phone-volume:before {\n  content: \"\\f2a0\"; }\n\n.fa-php:before {\n  content: \"\\f457\"; }\n\n.fa-pied-piper:before {\n  content: \"\\f2ae\"; }\n\n.fa-pied-piper-alt:before {\n  content: \"\\f1a8\"; }\n\n.fa-pied-piper-pp:before {\n  content: \"\\f1a7\"; }\n\n.fa-pills:before {\n  content: \"\\f484\"; }\n\n.fa-pinterest:before {\n  content: \"\\f0d2\"; }\n\n.fa-pinterest-p:before {\n  content: \"\\f231\"; }\n\n.fa-pinterest-square:before {\n  content: \"\\f0d3\"; }\n\n.fa-plane:before {\n  content: \"\\f072\"; }\n\n.fa-play:before {\n  content: \"\\f04b\"; }\n\n.fa-play-circle:before {\n  content: \"\\f144\"; }\n\n.fa-playstation:before {\n  content: \"\\f3df\"; }\n\n.fa-plug:before {\n  content: \"\\f1e6\"; }\n\n.fa-plus:before {\n  content: \"\\f067\"; }\n\n.fa-plus-circle:before {\n  content: \"\\f055\"; }\n\n.fa-plus-square:before {\n  content: \"\\f0fe\"; }\n\n.fa-podcast:before {\n  content: \"\\f2ce\"; }\n\n.fa-pound-sign:before {\n  content: \"\\f154\"; }\n\n.fa-power-off:before {\n  content: \"\\f011\"; }\n\n.fa-print:before {\n  content: \"\\f02f\"; }\n\n.fa-product-hunt:before {\n  content: \"\\f288\"; }\n\n.fa-pushed:before {\n  content: \"\\f3e1\"; }\n\n.fa-puzzle-piece:before {\n  content: \"\\f12e\"; }\n\n.fa-python:before {\n  content: \"\\f3e2\"; }\n\n.fa-qq:before {\n  content: \"\\f1d6\"; }\n\n.fa-qrcode:before {\n  content: \"\\f029\"; }\n\n.fa-question:before {\n  content: \"\\f128\"; }\n\n.fa-question-circle:before {\n  content: \"\\f059\"; }\n\n.fa-quidditch:before {\n  content: \"\\f458\"; }\n\n.fa-quinscape:before {\n  content: \"\\f459\"; }\n\n.fa-quora:before {\n  content: \"\\f2c4\"; }\n\n.fa-quote-left:before {\n  content: \"\\f10d\"; }\n\n.fa-quote-right:before {\n  content: \"\\f10e\"; }\n\n.fa-random:before {\n  content: \"\\f074\"; }\n\n.fa-ravelry:before {\n  content: \"\\f2d9\"; }\n\n.fa-react:before {\n  content: \"\\f41b\"; }\n\n.fa-rebel:before {\n  content: \"\\f1d0\"; }\n\n.fa-recycle:before {\n  content: \"\\f1b8\"; }\n\n.fa-red-river:before {\n  content: \"\\f3e3\"; }\n\n.fa-reddit:before {\n  content: \"\\f1a1\"; }\n\n.fa-reddit-alien:before {\n  content: \"\\f281\"; }\n\n.fa-reddit-square:before {\n  content: \"\\f1a2\"; }\n\n.fa-redo:before {\n  content: \"\\f01e\"; }\n\n.fa-redo-alt:before {\n  content: \"\\f2f9\"; }\n\n.fa-registered:before {\n  content: \"\\f25d\"; }\n\n.fa-rendact:before {\n  content: \"\\f3e4\"; }\n\n.fa-renren:before {\n  content: \"\\f18b\"; }\n\n.fa-reply:before {\n  content: \"\\f3e5\"; }\n\n.fa-reply-all:before {\n  content: \"\\f122\"; }\n\n.fa-replyd:before {\n  content: \"\\f3e6\"; }\n\n.fa-resolving:before {\n  content: \"\\f3e7\"; }\n\n.fa-retweet:before {\n  content: \"\\f079\"; }\n\n.fa-road:before {\n  content: \"\\f018\"; }\n\n.fa-rocket:before {\n  content: \"\\f135\"; }\n\n.fa-rocketchat:before {\n  content: \"\\f3e8\"; }\n\n.fa-rockrms:before {\n  content: \"\\f3e9\"; }\n\n.fa-rss:before {\n  content: \"\\f09e\"; }\n\n.fa-rss-square:before {\n  content: \"\\f143\"; }\n\n.fa-ruble-sign:before {\n  content: \"\\f158\"; }\n\n.fa-rupee-sign:before {\n  content: \"\\f156\"; }\n\n.fa-safari:before {\n  content: \"\\f267\"; }\n\n.fa-sass:before {\n  content: \"\\f41e\"; }\n\n.fa-save:before {\n  content: \"\\f0c7\"; }\n\n.fa-schlix:before {\n  content: \"\\f3ea\"; }\n\n.fa-scribd:before {\n  content: \"\\f28a\"; }\n\n.fa-search:before {\n  content: \"\\f002\"; }\n\n.fa-search-minus:before {\n  content: \"\\f010\"; }\n\n.fa-search-plus:before {\n  content: \"\\f00e\"; }\n\n.fa-searchengin:before {\n  content: \"\\f3eb\"; }\n\n.fa-sellcast:before {\n  content: \"\\f2da\"; }\n\n.fa-sellsy:before {\n  content: \"\\f213\"; }\n\n.fa-server:before {\n  content: \"\\f233\"; }\n\n.fa-servicestack:before {\n  content: \"\\f3ec\"; }\n\n.fa-share:before {\n  content: \"\\f064\"; }\n\n.fa-share-alt:before {\n  content: \"\\f1e0\"; }\n\n.fa-share-alt-square:before {\n  content: \"\\f1e1\"; }\n\n.fa-share-square:before {\n  content: \"\\f14d\"; }\n\n.fa-shekel-sign:before {\n  content: \"\\f20b\"; }\n\n.fa-shield-alt:before {\n  content: \"\\f3ed\"; }\n\n.fa-ship:before {\n  content: \"\\f21a\"; }\n\n.fa-shipping-fast:before {\n  content: \"\\f48b\"; }\n\n.fa-shirtsinbulk:before {\n  content: \"\\f214\"; }\n\n.fa-shopping-bag:before {\n  content: \"\\f290\"; }\n\n.fa-shopping-basket:before {\n  content: \"\\f291\"; }\n\n.fa-shopping-cart:before {\n  content: \"\\f07a\"; }\n\n.fa-shower:before {\n  content: \"\\f2cc\"; }\n\n.fa-sign-in-alt:before {\n  content: \"\\f2f6\"; }\n\n.fa-sign-language:before {\n  content: \"\\f2a7\"; }\n\n.fa-sign-out-alt:before {\n  content: \"\\f2f5\"; }\n\n.fa-signal:before {\n  content: \"\\f012\"; }\n\n.fa-simplybuilt:before {\n  content: \"\\f215\"; }\n\n.fa-sistrix:before {\n  content: \"\\f3ee\"; }\n\n.fa-sitemap:before {\n  content: \"\\f0e8\"; }\n\n.fa-skyatlas:before {\n  content: \"\\f216\"; }\n\n.fa-skype:before {\n  content: \"\\f17e\"; }\n\n.fa-slack:before {\n  content: \"\\f198\"; }\n\n.fa-slack-hash:before {\n  content: \"\\f3ef\"; }\n\n.fa-sliders-h:before {\n  content: \"\\f1de\"; }\n\n.fa-slideshare:before {\n  content: \"\\f1e7\"; }\n\n.fa-smile:before {\n  content: \"\\f118\"; }\n\n.fa-snapchat:before {\n  content: \"\\f2ab\"; }\n\n.fa-snapchat-ghost:before {\n  content: \"\\f2ac\"; }\n\n.fa-snapchat-square:before {\n  content: \"\\f2ad\"; }\n\n.fa-snowflake:before {\n  content: \"\\f2dc\"; }\n\n.fa-sort:before {\n  content: \"\\f0dc\"; }\n\n.fa-sort-alpha-down:before {\n  content: \"\\f15d\"; }\n\n.fa-sort-alpha-up:before {\n  content: \"\\f15e\"; }\n\n.fa-sort-amount-down:before {\n  content: \"\\f160\"; }\n\n.fa-sort-amount-up:before {\n  content: \"\\f161\"; }\n\n.fa-sort-down:before {\n  content: \"\\f0dd\"; }\n\n.fa-sort-numeric-down:before {\n  content: \"\\f162\"; }\n\n.fa-sort-numeric-up:before {\n  content: \"\\f163\"; }\n\n.fa-sort-up:before {\n  content: \"\\f0de\"; }\n\n.fa-soundcloud:before {\n  content: \"\\f1be\"; }\n\n.fa-space-shuttle:before {\n  content: \"\\f197\"; }\n\n.fa-speakap:before {\n  content: \"\\f3f3\"; }\n\n.fa-spinner:before {\n  content: \"\\f110\"; }\n\n.fa-spotify:before {\n  content: \"\\f1bc\"; }\n\n.fa-square:before {\n  content: \"\\f0c8\"; }\n\n.fa-square-full:before {\n  content: \"\\f45c\"; }\n\n.fa-stack-exchange:before {\n  content: \"\\f18d\"; }\n\n.fa-stack-overflow:before {\n  content: \"\\f16c\"; }\n\n.fa-star:before {\n  content: \"\\f005\"; }\n\n.fa-star-half:before {\n  content: \"\\f089\"; }\n\n.fa-staylinked:before {\n  content: \"\\f3f5\"; }\n\n.fa-steam:before {\n  content: \"\\f1b6\"; }\n\n.fa-steam-square:before {\n  content: \"\\f1b7\"; }\n\n.fa-steam-symbol:before {\n  content: \"\\f3f6\"; }\n\n.fa-step-backward:before {\n  content: \"\\f048\"; }\n\n.fa-step-forward:before {\n  content: \"\\f051\"; }\n\n.fa-stethoscope:before {\n  content: \"\\f0f1\"; }\n\n.fa-sticker-mule:before {\n  content: \"\\f3f7\"; }\n\n.fa-sticky-note:before {\n  content: \"\\f249\"; }\n\n.fa-stop:before {\n  content: \"\\f04d\"; }\n\n.fa-stop-circle:before {\n  content: \"\\f28d\"; }\n\n.fa-stopwatch:before {\n  content: \"\\f2f2\"; }\n\n.fa-strava:before {\n  content: \"\\f428\"; }\n\n.fa-street-view:before {\n  content: \"\\f21d\"; }\n\n.fa-strikethrough:before {\n  content: \"\\f0cc\"; }\n\n.fa-stripe:before {\n  content: \"\\f429\"; }\n\n.fa-stripe-s:before {\n  content: \"\\f42a\"; }\n\n.fa-studiovinari:before {\n  content: \"\\f3f8\"; }\n\n.fa-stumbleupon:before {\n  content: \"\\f1a4\"; }\n\n.fa-stumbleupon-circle:before {\n  content: \"\\f1a3\"; }\n\n.fa-subscript:before {\n  content: \"\\f12c\"; }\n\n.fa-subway:before {\n  content: \"\\f239\"; }\n\n.fa-suitcase:before {\n  content: \"\\f0f2\"; }\n\n.fa-sun:before {\n  content: \"\\f185\"; }\n\n.fa-superpowers:before {\n  content: \"\\f2dd\"; }\n\n.fa-superscript:before {\n  content: \"\\f12b\"; }\n\n.fa-supple:before {\n  content: \"\\f3f9\"; }\n\n.fa-sync:before {\n  content: \"\\f021\"; }\n\n.fa-sync-alt:before {\n  content: \"\\f2f1\"; }\n\n.fa-syringe:before {\n  content: \"\\f48e\"; }\n\n.fa-table:before {\n  content: \"\\f0ce\"; }\n\n.fa-table-tennis:before {\n  content: \"\\f45d\"; }\n\n.fa-tablet:before {\n  content: \"\\f10a\"; }\n\n.fa-tablet-alt:before {\n  content: \"\\f3fa\"; }\n\n.fa-tachometer-alt:before {\n  content: \"\\f3fd\"; }\n\n.fa-tag:before {\n  content: \"\\f02b\"; }\n\n.fa-tags:before {\n  content: \"\\f02c\"; }\n\n.fa-tasks:before {\n  content: \"\\f0ae\"; }\n\n.fa-taxi:before {\n  content: \"\\f1ba\"; }\n\n.fa-telegram:before {\n  content: \"\\f2c6\"; }\n\n.fa-telegram-plane:before {\n  content: \"\\f3fe\"; }\n\n.fa-tencent-weibo:before {\n  content: \"\\f1d5\"; }\n\n.fa-terminal:before {\n  content: \"\\f120\"; }\n\n.fa-text-height:before {\n  content: \"\\f034\"; }\n\n.fa-text-width:before {\n  content: \"\\f035\"; }\n\n.fa-th:before {\n  content: \"\\f00a\"; }\n\n.fa-th-large:before {\n  content: \"\\f009\"; }\n\n.fa-th-list:before {\n  content: \"\\f00b\"; }\n\n.fa-themeisle:before {\n  content: \"\\f2b2\"; }\n\n.fa-thermometer:before {\n  content: \"\\f491\"; }\n\n.fa-thermometer-empty:before {\n  content: \"\\f2cb\"; }\n\n.fa-thermometer-full:before {\n  content: \"\\f2c7\"; }\n\n.fa-thermometer-half:before {\n  content: \"\\f2c9\"; }\n\n.fa-thermometer-quarter:before {\n  content: \"\\f2ca\"; }\n\n.fa-thermometer-three-quarters:before {\n  content: \"\\f2c8\"; }\n\n.fa-thumbs-down:before {\n  content: \"\\f165\"; }\n\n.fa-thumbs-up:before {\n  content: \"\\f164\"; }\n\n.fa-thumbtack:before {\n  content: \"\\f08d\"; }\n\n.fa-ticket-alt:before {\n  content: \"\\f3ff\"; }\n\n.fa-times:before {\n  content: \"\\f00d\"; }\n\n.fa-times-circle:before {\n  content: \"\\f057\"; }\n\n.fa-tint:before {\n  content: \"\\f043\"; }\n\n.fa-toggle-off:before {\n  content: \"\\f204\"; }\n\n.fa-toggle-on:before {\n  content: \"\\f205\"; }\n\n.fa-trademark:before {\n  content: \"\\f25c\"; }\n\n.fa-train:before {\n  content: \"\\f238\"; }\n\n.fa-transgender:before {\n  content: \"\\f224\"; }\n\n.fa-transgender-alt:before {\n  content: \"\\f225\"; }\n\n.fa-trash:before {\n  content: \"\\f1f8\"; }\n\n.fa-trash-alt:before {\n  content: \"\\f2ed\"; }\n\n.fa-tree:before {\n  content: \"\\f1bb\"; }\n\n.fa-trello:before {\n  content: \"\\f181\"; }\n\n.fa-tripadvisor:before {\n  content: \"\\f262\"; }\n\n.fa-trophy:before {\n  content: \"\\f091\"; }\n\n.fa-truck:before {\n  content: \"\\f0d1\"; }\n\n.fa-tty:before {\n  content: \"\\f1e4\"; }\n\n.fa-tumblr:before {\n  content: \"\\f173\"; }\n\n.fa-tumblr-square:before {\n  content: \"\\f174\"; }\n\n.fa-tv:before {\n  content: \"\\f26c\"; }\n\n.fa-twitch:before {\n  content: \"\\f1e8\"; }\n\n.fa-twitter:before {\n  content: \"\\f099\"; }\n\n.fa-twitter-square:before {\n  content: \"\\f081\"; }\n\n.fa-typo3:before {\n  content: \"\\f42b\"; }\n\n.fa-uber:before {\n  content: \"\\f402\"; }\n\n.fa-uikit:before {\n  content: \"\\f403\"; }\n\n.fa-umbrella:before {\n  content: \"\\f0e9\"; }\n\n.fa-underline:before {\n  content: \"\\f0cd\"; }\n\n.fa-undo:before {\n  content: \"\\f0e2\"; }\n\n.fa-undo-alt:before {\n  content: \"\\f2ea\"; }\n\n.fa-uniregistry:before {\n  content: \"\\f404\"; }\n\n.fa-universal-access:before {\n  content: \"\\f29a\"; }\n\n.fa-university:before {\n  content: \"\\f19c\"; }\n\n.fa-unlink:before {\n  content: \"\\f127\"; }\n\n.fa-unlock:before {\n  content: \"\\f09c\"; }\n\n.fa-unlock-alt:before {\n  content: \"\\f13e\"; }\n\n.fa-untappd:before {\n  content: \"\\f405\"; }\n\n.fa-upload:before {\n  content: \"\\f093\"; }\n\n.fa-usb:before {\n  content: \"\\f287\"; }\n\n.fa-user:before {\n  content: \"\\f007\"; }\n\n.fa-user-circle:before {\n  content: \"\\f2bd\"; }\n\n.fa-user-md:before {\n  content: \"\\f0f0\"; }\n\n.fa-user-plus:before {\n  content: \"\\f234\"; }\n\n.fa-user-secret:before {\n  content: \"\\f21b\"; }\n\n.fa-user-times:before {\n  content: \"\\f235\"; }\n\n.fa-users:before {\n  content: \"\\f0c0\"; }\n\n.fa-ussunnah:before {\n  content: \"\\f407\"; }\n\n.fa-utensil-spoon:before {\n  content: \"\\f2e5\"; }\n\n.fa-utensils:before {\n  content: \"\\f2e7\"; }\n\n.fa-vaadin:before {\n  content: \"\\f408\"; }\n\n.fa-venus:before {\n  content: \"\\f221\"; }\n\n.fa-venus-double:before {\n  content: \"\\f226\"; }\n\n.fa-venus-mars:before {\n  content: \"\\f228\"; }\n\n.fa-viacoin:before {\n  content: \"\\f237\"; }\n\n.fa-viadeo:before {\n  content: \"\\f2a9\"; }\n\n.fa-viadeo-square:before {\n  content: \"\\f2aa\"; }\n\n.fa-viber:before {\n  content: \"\\f409\"; }\n\n.fa-video:before {\n  content: \"\\f03d\"; }\n\n.fa-vimeo:before {\n  content: \"\\f40a\"; }\n\n.fa-vimeo-square:before {\n  content: \"\\f194\"; }\n\n.fa-vimeo-v:before {\n  content: \"\\f27d\"; }\n\n.fa-vine:before {\n  content: \"\\f1ca\"; }\n\n.fa-vk:before {\n  content: \"\\f189\"; }\n\n.fa-vnv:before {\n  content: \"\\f40b\"; }\n\n.fa-volleyball-ball:before {\n  content: \"\\f45f\"; }\n\n.fa-volume-down:before {\n  content: \"\\f027\"; }\n\n.fa-volume-off:before {\n  content: \"\\f026\"; }\n\n.fa-volume-up:before {\n  content: \"\\f028\"; }\n\n.fa-vuejs:before {\n  content: \"\\f41f\"; }\n\n.fa-warehouse:before {\n  content: \"\\f494\"; }\n\n.fa-weibo:before {\n  content: \"\\f18a\"; }\n\n.fa-weight:before {\n  content: \"\\f496\"; }\n\n.fa-weixin:before {\n  content: \"\\f1d7\"; }\n\n.fa-whatsapp:before {\n  content: \"\\f232\"; }\n\n.fa-whatsapp-square:before {\n  content: \"\\f40c\"; }\n\n.fa-wheelchair:before {\n  content: \"\\f193\"; }\n\n.fa-whmcs:before {\n  content: \"\\f40d\"; }\n\n.fa-wifi:before {\n  content: \"\\f1eb\"; }\n\n.fa-wikipedia-w:before {\n  content: \"\\f266\"; }\n\n.fa-window-close:before {\n  content: \"\\f410\"; }\n\n.fa-window-maximize:before {\n  content: \"\\f2d0\"; }\n\n.fa-window-minimize:before {\n  content: \"\\f2d1\"; }\n\n.fa-window-restore:before {\n  content: \"\\f2d2\"; }\n\n.fa-windows:before {\n  content: \"\\f17a\"; }\n\n.fa-won-sign:before {\n  content: \"\\f159\"; }\n\n.fa-wordpress:before {\n  content: \"\\f19a\"; }\n\n.fa-wordpress-simple:before {\n  content: \"\\f411\"; }\n\n.fa-wpbeginner:before {\n  content: \"\\f297\"; }\n\n.fa-wpexplorer:before {\n  content: \"\\f2de\"; }\n\n.fa-wpforms:before {\n  content: \"\\f298\"; }\n\n.fa-wrench:before {\n  content: \"\\f0ad\"; }\n\n.fa-xbox:before {\n  content: \"\\f412\"; }\n\n.fa-xing:before {\n  content: \"\\f168\"; }\n\n.fa-xing-square:before {\n  content: \"\\f169\"; }\n\n.fa-y-combinator:before {\n  content: \"\\f23b\"; }\n\n.fa-yahoo:before {\n  content: \"\\f19e\"; }\n\n.fa-yandex:before {\n  content: \"\\f413\"; }\n\n.fa-yandex-international:before {\n  content: \"\\f414\"; }\n\n.fa-yelp:before {\n  content: \"\\f1e9\"; }\n\n.fa-yen-sign:before {\n  content: \"\\f157\"; }\n\n.fa-yoast:before {\n  content: \"\\f2b1\"; }\n\n.fa-youtube:before {\n  content: \"\\f167\"; }\n\n.fa-youtube-square:before {\n  content: \"\\f431\"; }\n\n.sr-only {\n  border: 0;\n  clip: rect(0, 0, 0, 0);\n  height: 1px;\n  margin: -1px;\n  overflow: hidden;\n  padding: 0;\n  position: absolute;\n  width: 1px; }\n\n.sr-only-focusable:active, .sr-only-focusable:focus {\n  clip: auto;\n  height: auto;\n  margin: 0;\n  overflow: visible;\n  position: static;\n  width: auto; }\n@font-face {\n  font-family: 'Font Awesome 5 Brands';\n  font-style: normal;\n  font-weight: normal;\n  src: url(\"../webfonts/fa-brands-400.eot\");\n  src: url(\"../webfonts/fa-brands-400.eot?#iefix\") format(\"embedded-opentype\"), url(\"../webfonts/fa-brands-400.woff2\") format(\"woff2\"), url(\"../webfonts/fa-brands-400.woff\") format(\"woff\"), url(\"../webfonts/fa-brands-400.ttf\") format(\"truetype\"), url(\"../webfonts/fa-brands-400.svg#fontawesome\") format(\"svg\"); }\n\n.fab {\n  font-family: 'Font Awesome 5 Brands'; }\n@font-face {\n  font-family: 'Font Awesome 5 Free';\n  font-style: normal;\n  font-weight: 400;\n  src: url(\"../webfonts/fa-regular-400.eot\");\n  src: url(\"../webfonts/fa-regular-400.eot?#iefix\") format(\"embedded-opentype\"), url(\"../webfonts/fa-regular-400.woff2\") format(\"woff2\"), url(\"../webfonts/fa-regular-400.woff\") format(\"woff\"), url(\"../webfonts/fa-regular-400.ttf\") format(\"truetype\"), url(\"../webfonts/fa-regular-400.svg#fontawesome\") format(\"svg\"); }\n\n.far {\n  font-family: 'Font Awesome 5 Free';\n  font-weight: 400; }\n@font-face {\n  font-family: 'Font Awesome 5 Free';\n  font-style: normal;\n  font-weight: 900;\n  src: url(\"../webfonts/fa-solid-900.eot\");\n  src: url(\"../webfonts/fa-solid-900.eot?#iefix\") format(\"embedded-opentype\"), url(\"../webfonts/fa-solid-900.woff2\") format(\"woff2\"), url(\"../webfonts/fa-solid-900.woff\") format(\"woff\"), url(\"../webfonts/fa-solid-900.ttf\") format(\"truetype\"), url(\"../webfonts/fa-solid-900.svg#fontawesome\") format(\"svg\"); }\n\n.fa,\n.fas {\n  font-family: 'Font Awesome 5 Free';\n  font-weight: 900; }\n"
  },
  {
    "path": "src/sourceDev.WebApp/SharedThemes/lux/wwwroot/css/site.css",
    "content": "﻿html {\n    position: relative;\n    min-height: 100%;\n}\n\nbody {\n    min-height: 100vh;\n    padding-top: 155px;\n}\n\n#newPostLink {\n    position: absolute;\n    top: 170px;\n    right: 0px;\n}\n\n#editPostLink {\n    position: absolute;\n    top: 200px;\n    right: 0px;\n}\n\n#unpublishPostLink {\n    position: absolute;\n    top: 230px !important;\n    right: 0px !important;\n}\n\n#pageManagerLink {\n    position: absolute;\n    top: 170px;\n    right: 0px;\n}\n\n#newPageLink {\n    position: absolute;\n    top: 200px;\n    right: 0px;\n}\n\n#editPageLink {\n    position: absolute;\n    top: 230px;\n    right: 0px\n}\n\n#unpublishPageLink {\n    position: absolute;\n    top: 260px !important;\n    right: 0px !important\n}\n\n#sidenavtoggle {\n    position: absolute;\n    top: 220px;\n    right: 5px;\n}\n\n\n@media screen and (max-width: 812px) {\n    #sidenavtoggle,\n    #sidenavmenu {\n        display: none;\n    }\n}\n\n.flex-fill {\n    flex: 1 1 auto !important;\n}\n\n\n.carousel-caption p {\n    font-size: 20px;\n    line-height: 1.4;\n}\n\n@media screen and (max-width: 768px) {\n    .carousel-caption {\n        display: none\n    }\n}\n\n\n\n\nimg, video, iframe {\n    max-width: 100%;\n}\n\ntd img, video, iframe {\n    max-width: none;\n}\n\n\n\n.table td, .table th {\n    vertical-align: inherit;\n}\n\n/******** jquery smartmenu bootstrap 4 ******/\n/* Carets in collapsible mode (make them look like +/- buttons) */\n.navbar-nav.sm-collapsible .sub-arrow {\n    position: absolute;\n    top: 50%;\n    right: 0;\n    margin: -0.7em 0.5em 0 0;\n    border: 1px solid rgba(0, 0, 0, .1);\n    border-radius: .25rem;\n    padding: 0;\n    width: 2em;\n    height: 1.4em;\n    font-size: 1.25rem;\n    line-height: 1.2em;\n    text-align: center;\n}\n\n    .navbar-nav.sm-collapsible .sub-arrow::before {\n        content: '+';\n    }\n\n.navbar-nav.sm-collapsible .show > a > .sub-arrow::before {\n    content: '-';\n}\n\n.navbar-dark .navbar-nav.sm-collapsible .nav-link .sub-arrow {\n    border-color: rgba(255, 255, 255, .1);\n}\n/* make sure there's room for the carets */\n.navbar-nav.sm-collapsible .has-submenu {\n    padding-right: 3em;\n}\n/* keep the carets properly positioned */\n.navbar-nav.sm-collapsible .nav-link,\n.navbar-nav.sm-collapsible .dropdown-item {\n    position: relative;\n}\n\n\n/* Nav carets in expanded mode */\n.navbar-nav:not(.sm-collapsible) .nav-link .sub-arrow {\n    display: inline-block;\n    width: 0;\n    height: 0;\n    margin-left: .255em;\n    vertical-align: .255em;\n    border-top: .3em solid;\n    border-right: .3em solid transparent;\n    border-left: .3em solid transparent;\n}\n/* point the arrows up for .fixed-bottom navbars */\n.fixed-bottom .navbar-nav:not(.sm-collapsible) .nav-link .sub-arrow,\n.fixed-bottom .navbar-nav:not(.sm-collapsible):not([data-sm-skip]) .dropdown-toggle::after {\n    border-top: 0;\n    border-bottom: .3em solid;\n}\n\n\n/* Dropdown carets in expanded mode */\n.navbar-nav:not(.sm-collapsible) .dropdown-item .sub-arrow,\n.navbar-nav:not(.sm-collapsible):not([data-sm-skip]) .dropdown-menu .dropdown-toggle::after {\n    position: absolute;\n    top: 50%;\n    right: 0;\n    width: 0;\n    height: 0;\n    margin-top: -.3em;\n    margin-right: 1em;\n    border-top: .3em solid transparent;\n    border-bottom: .3em solid transparent;\n    border-left: .3em solid;\n}\n/* make sure there's room for the carets */\n.navbar-nav:not(.sm-collapsible) .dropdown-item.has-submenu {\n    padding-right: 2em;\n}\n\n\n/* Scrolling arrows for tall menus */\n.navbar-nav .scroll-up,\n.navbar-nav .scroll-down {\n    position: absolute;\n    display: none;\n    visibility: hidden;\n    height: 20px;\n    overflow: hidden;\n    text-align: center;\n}\n\n.navbar-nav .scroll-up-arrow,\n.navbar-nav .scroll-down-arrow {\n    position: absolute;\n    top: -2px;\n    left: 50%;\n    margin-left: -8px;\n    width: 0;\n    height: 0;\n    overflow: hidden;\n    border-top: 7px solid transparent;\n    border-right: 7px solid transparent;\n    border-bottom: 7px solid;\n    border-left: 7px solid transparent;\n}\n\n.navbar-nav .scroll-down-arrow {\n    top: 6px;\n    border-top: 7px solid;\n    border-right: 7px solid transparent;\n    border-bottom: 7px solid transparent;\n    border-left: 7px solid transparent;\n}\n\n\n/* Add some spacing for 2+ level sub menus in collapsible mode */\n.navbar-nav.sm-collapsible .dropdown-menu .dropdown-menu {\n    margin: .5em;\n}\n\n\n/* Fix SmartMenus sub menus auto width (subMenusMinWidth/subMenusMaxWidth options) */\n.navbar-nav:not([data-sm-skip]) .dropdown-item {\n    white-space: normal;\n}\n\n.navbar-nav:not(.sm-collapsible) .sm-nowrap > li > .dropdown-item {\n    white-space: nowrap;\n}\n/******** end jquery smart menu bootstrap-4 *****************/\n\n.brand-header {\n    height: 100px;\n}\n\nheader .navbar {\n    top: 100px;\n}\n"
  },
  {
    "path": "src/sourceDev.WebApp/SharedThemes/lux/wwwroot/js/bootstrap.bundle.js",
    "content": "/*!\n  * Bootstrap v5.0.2 (https://getbootstrap.com/)\n  * Copyright 2011-2021 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)\n  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n  */\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n  typeof define === 'function' && define.amd ? define(factory) :\n  (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.bootstrap = factory());\n}(this, (function () { 'use strict';\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): dom/selector-engine.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n  const NODE_TEXT = 3;\n  const SelectorEngine = {\n    find(selector, element = document.documentElement) {\n      return [].concat(...Element.prototype.querySelectorAll.call(element, selector));\n    },\n\n    findOne(selector, element = document.documentElement) {\n      return Element.prototype.querySelector.call(element, selector);\n    },\n\n    children(element, selector) {\n      return [].concat(...element.children).filter(child => child.matches(selector));\n    },\n\n    parents(element, selector) {\n      const parents = [];\n      let ancestor = element.parentNode;\n\n      while (ancestor && ancestor.nodeType === Node.ELEMENT_NODE && ancestor.nodeType !== NODE_TEXT) {\n        if (ancestor.matches(selector)) {\n          parents.push(ancestor);\n        }\n\n        ancestor = ancestor.parentNode;\n      }\n\n      return parents;\n    },\n\n    prev(element, selector) {\n      let previous = element.previousElementSibling;\n\n      while (previous) {\n        if (previous.matches(selector)) {\n          return [previous];\n        }\n\n        previous = previous.previousElementSibling;\n      }\n\n      return [];\n    },\n\n    next(element, selector) {\n      let next = element.nextElementSibling;\n\n      while (next) {\n        if (next.matches(selector)) {\n          return [next];\n        }\n\n        next = next.nextElementSibling;\n      }\n\n      return [];\n    }\n\n  };\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): util/index.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n\n  const MAX_UID = 1000000;\n  const MILLISECONDS_MULTIPLIER = 1000;\n  const TRANSITION_END = 'transitionend'; // Shoutout AngusCroll (https://goo.gl/pxwQGp)\n\n  const toType = obj => {\n    if (obj === null || obj === undefined) {\n      return `${obj}`;\n    }\n\n    return {}.toString.call(obj).match(/\\s([a-z]+)/i)[1].toLowerCase();\n  };\n  /**\n   * --------------------------------------------------------------------------\n   * Public Util Api\n   * --------------------------------------------------------------------------\n   */\n\n\n  const getUID = prefix => {\n    do {\n      prefix += Math.floor(Math.random() * MAX_UID);\n    } while (document.getElementById(prefix));\n\n    return prefix;\n  };\n\n  const getSelector = element => {\n    let selector = element.getAttribute('data-bs-target');\n\n    if (!selector || selector === '#') {\n      let hrefAttr = element.getAttribute('href'); // The only valid content that could double as a selector are IDs or classes,\n      // so everything starting with `#` or `.`. If a \"real\" URL is used as the selector,\n      // `document.querySelector` will rightfully complain it is invalid.\n      // See https://github.com/twbs/bootstrap/issues/32273\n\n      if (!hrefAttr || !hrefAttr.includes('#') && !hrefAttr.startsWith('.')) {\n        return null;\n      } // Just in case some CMS puts out a full URL with the anchor appended\n\n\n      if (hrefAttr.includes('#') && !hrefAttr.startsWith('#')) {\n        hrefAttr = `#${hrefAttr.split('#')[1]}`;\n      }\n\n      selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : null;\n    }\n\n    return selector;\n  };\n\n  const getSelectorFromElement = element => {\n    const selector = getSelector(element);\n\n    if (selector) {\n      return document.querySelector(selector) ? selector : null;\n    }\n\n    return null;\n  };\n\n  const getElementFromSelector = element => {\n    const selector = getSelector(element);\n    return selector ? document.querySelector(selector) : null;\n  };\n\n  const getTransitionDurationFromElement = element => {\n    if (!element) {\n      return 0;\n    } // Get transition-duration of the element\n\n\n    let {\n      transitionDuration,\n      transitionDelay\n    } = window.getComputedStyle(element);\n    const floatTransitionDuration = Number.parseFloat(transitionDuration);\n    const floatTransitionDelay = Number.parseFloat(transitionDelay); // Return 0 if element or transition duration is not found\n\n    if (!floatTransitionDuration && !floatTransitionDelay) {\n      return 0;\n    } // If multiple durations are defined, take the first\n\n\n    transitionDuration = transitionDuration.split(',')[0];\n    transitionDelay = transitionDelay.split(',')[0];\n    return (Number.parseFloat(transitionDuration) + Number.parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER;\n  };\n\n  const triggerTransitionEnd = element => {\n    element.dispatchEvent(new Event(TRANSITION_END));\n  };\n\n  const isElement$1 = obj => {\n    if (!obj || typeof obj !== 'object') {\n      return false;\n    }\n\n    if (typeof obj.jquery !== 'undefined') {\n      obj = obj[0];\n    }\n\n    return typeof obj.nodeType !== 'undefined';\n  };\n\n  const getElement = obj => {\n    if (isElement$1(obj)) {\n      // it's a jQuery object or a node element\n      return obj.jquery ? obj[0] : obj;\n    }\n\n    if (typeof obj === 'string' && obj.length > 0) {\n      return SelectorEngine.findOne(obj);\n    }\n\n    return null;\n  };\n\n  const typeCheckConfig = (componentName, config, configTypes) => {\n    Object.keys(configTypes).forEach(property => {\n      const expectedTypes = configTypes[property];\n      const value = config[property];\n      const valueType = value && isElement$1(value) ? 'element' : toType(value);\n\n      if (!new RegExp(expectedTypes).test(valueType)) {\n        throw new TypeError(`${componentName.toUpperCase()}: Option \"${property}\" provided type \"${valueType}\" but expected type \"${expectedTypes}\".`);\n      }\n    });\n  };\n\n  const isVisible = element => {\n    if (!isElement$1(element) || element.getClientRects().length === 0) {\n      return false;\n    }\n\n    return getComputedStyle(element).getPropertyValue('visibility') === 'visible';\n  };\n\n  const isDisabled = element => {\n    if (!element || element.nodeType !== Node.ELEMENT_NODE) {\n      return true;\n    }\n\n    if (element.classList.contains('disabled')) {\n      return true;\n    }\n\n    if (typeof element.disabled !== 'undefined') {\n      return element.disabled;\n    }\n\n    return element.hasAttribute('disabled') && element.getAttribute('disabled') !== 'false';\n  };\n\n  const findShadowRoot = element => {\n    if (!document.documentElement.attachShadow) {\n      return null;\n    } // Can find the shadow root otherwise it'll return the document\n\n\n    if (typeof element.getRootNode === 'function') {\n      const root = element.getRootNode();\n      return root instanceof ShadowRoot ? root : null;\n    }\n\n    if (element instanceof ShadowRoot) {\n      return element;\n    } // when we don't find a shadow root\n\n\n    if (!element.parentNode) {\n      return null;\n    }\n\n    return findShadowRoot(element.parentNode);\n  };\n\n  const noop = () => {};\n\n  const reflow = element => element.offsetHeight;\n\n  const getjQuery = () => {\n    const {\n      jQuery\n    } = window;\n\n    if (jQuery && !document.body.hasAttribute('data-bs-no-jquery')) {\n      return jQuery;\n    }\n\n    return null;\n  };\n\n  const DOMContentLoadedCallbacks = [];\n\n  const onDOMContentLoaded = callback => {\n    if (document.readyState === 'loading') {\n      // add listener on the first call when the document is in loading state\n      if (!DOMContentLoadedCallbacks.length) {\n        document.addEventListener('DOMContentLoaded', () => {\n          DOMContentLoadedCallbacks.forEach(callback => callback());\n        });\n      }\n\n      DOMContentLoadedCallbacks.push(callback);\n    } else {\n      callback();\n    }\n  };\n\n  const isRTL = () => document.documentElement.dir === 'rtl';\n\n  const defineJQueryPlugin = plugin => {\n    onDOMContentLoaded(() => {\n      const $ = getjQuery();\n      /* istanbul ignore if */\n\n      if ($) {\n        const name = plugin.NAME;\n        const JQUERY_NO_CONFLICT = $.fn[name];\n        $.fn[name] = plugin.jQueryInterface;\n        $.fn[name].Constructor = plugin;\n\n        $.fn[name].noConflict = () => {\n          $.fn[name] = JQUERY_NO_CONFLICT;\n          return plugin.jQueryInterface;\n        };\n      }\n    });\n  };\n\n  const execute = callback => {\n    if (typeof callback === 'function') {\n      callback();\n    }\n  };\n\n  const executeAfterTransition = (callback, transitionElement, waitForTransition = true) => {\n    if (!waitForTransition) {\n      execute(callback);\n      return;\n    }\n\n    const durationPadding = 5;\n    const emulatedDuration = getTransitionDurationFromElement(transitionElement) + durationPadding;\n    let called = false;\n\n    const handler = ({\n      target\n    }) => {\n      if (target !== transitionElement) {\n        return;\n      }\n\n      called = true;\n      transitionElement.removeEventListener(TRANSITION_END, handler);\n      execute(callback);\n    };\n\n    transitionElement.addEventListener(TRANSITION_END, handler);\n    setTimeout(() => {\n      if (!called) {\n        triggerTransitionEnd(transitionElement);\n      }\n    }, emulatedDuration);\n  };\n  /**\n   * Return the previous/next element of a list.\n   *\n   * @param {array} list    The list of elements\n   * @param activeElement   The active element\n   * @param shouldGetNext   Choose to get next or previous element\n   * @param isCycleAllowed\n   * @return {Element|elem} The proper element\n   */\n\n\n  const getNextActiveElement = (list, activeElement, shouldGetNext, isCycleAllowed) => {\n    let index = list.indexOf(activeElement); // if the element does not exist in the list return an element depending on the direction and if cycle is allowed\n\n    if (index === -1) {\n      return list[!shouldGetNext && isCycleAllowed ? list.length - 1 : 0];\n    }\n\n    const listLength = list.length;\n    index += shouldGetNext ? 1 : -1;\n\n    if (isCycleAllowed) {\n      index = (index + listLength) % listLength;\n    }\n\n    return list[Math.max(0, Math.min(index, listLength - 1))];\n  };\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): dom/event-handler.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const namespaceRegex = /[^.]*(?=\\..*)\\.|.*/;\n  const stripNameRegex = /\\..*/;\n  const stripUidRegex = /::\\d+$/;\n  const eventRegistry = {}; // Events storage\n\n  let uidEvent = 1;\n  const customEvents = {\n    mouseenter: 'mouseover',\n    mouseleave: 'mouseout'\n  };\n  const customEventsRegex = /^(mouseenter|mouseleave)/i;\n  const nativeEvents = new Set(['click', 'dblclick', 'mouseup', 'mousedown', 'contextmenu', 'mousewheel', 'DOMMouseScroll', 'mouseover', 'mouseout', 'mousemove', 'selectstart', 'selectend', 'keydown', 'keypress', 'keyup', 'orientationchange', 'touchstart', 'touchmove', 'touchend', 'touchcancel', 'pointerdown', 'pointermove', 'pointerup', 'pointerleave', 'pointercancel', 'gesturestart', 'gesturechange', 'gestureend', 'focus', 'blur', 'change', 'reset', 'select', 'submit', 'focusin', 'focusout', 'load', 'unload', 'beforeunload', 'resize', 'move', 'DOMContentLoaded', 'readystatechange', 'error', 'abort', 'scroll']);\n  /**\n   * ------------------------------------------------------------------------\n   * Private methods\n   * ------------------------------------------------------------------------\n   */\n\n  function getUidEvent(element, uid) {\n    return uid && `${uid}::${uidEvent++}` || element.uidEvent || uidEvent++;\n  }\n\n  function getEvent(element) {\n    const uid = getUidEvent(element);\n    element.uidEvent = uid;\n    eventRegistry[uid] = eventRegistry[uid] || {};\n    return eventRegistry[uid];\n  }\n\n  function bootstrapHandler(element, fn) {\n    return function handler(event) {\n      event.delegateTarget = element;\n\n      if (handler.oneOff) {\n        EventHandler.off(element, event.type, fn);\n      }\n\n      return fn.apply(element, [event]);\n    };\n  }\n\n  function bootstrapDelegationHandler(element, selector, fn) {\n    return function handler(event) {\n      const domElements = element.querySelectorAll(selector);\n\n      for (let {\n        target\n      } = event; target && target !== this; target = target.parentNode) {\n        for (let i = domElements.length; i--;) {\n          if (domElements[i] === target) {\n            event.delegateTarget = target;\n\n            if (handler.oneOff) {\n              // eslint-disable-next-line unicorn/consistent-destructuring\n              EventHandler.off(element, event.type, selector, fn);\n            }\n\n            return fn.apply(target, [event]);\n          }\n        }\n      } // To please ESLint\n\n\n      return null;\n    };\n  }\n\n  function findHandler(events, handler, delegationSelector = null) {\n    const uidEventList = Object.keys(events);\n\n    for (let i = 0, len = uidEventList.length; i < len; i++) {\n      const event = events[uidEventList[i]];\n\n      if (event.originalHandler === handler && event.delegationSelector === delegationSelector) {\n        return event;\n      }\n    }\n\n    return null;\n  }\n\n  function normalizeParams(originalTypeEvent, handler, delegationFn) {\n    const delegation = typeof handler === 'string';\n    const originalHandler = delegation ? delegationFn : handler;\n    let typeEvent = getTypeEvent(originalTypeEvent);\n    const isNative = nativeEvents.has(typeEvent);\n\n    if (!isNative) {\n      typeEvent = originalTypeEvent;\n    }\n\n    return [delegation, originalHandler, typeEvent];\n  }\n\n  function addHandler(element, originalTypeEvent, handler, delegationFn, oneOff) {\n    if (typeof originalTypeEvent !== 'string' || !element) {\n      return;\n    }\n\n    if (!handler) {\n      handler = delegationFn;\n      delegationFn = null;\n    } // in case of mouseenter or mouseleave wrap the handler within a function that checks for its DOM position\n    // this prevents the handler from being dispatched the same way as mouseover or mouseout does\n\n\n    if (customEventsRegex.test(originalTypeEvent)) {\n      const wrapFn = fn => {\n        return function (event) {\n          if (!event.relatedTarget || event.relatedTarget !== event.delegateTarget && !event.delegateTarget.contains(event.relatedTarget)) {\n            return fn.call(this, event);\n          }\n        };\n      };\n\n      if (delegationFn) {\n        delegationFn = wrapFn(delegationFn);\n      } else {\n        handler = wrapFn(handler);\n      }\n    }\n\n    const [delegation, originalHandler, typeEvent] = normalizeParams(originalTypeEvent, handler, delegationFn);\n    const events = getEvent(element);\n    const handlers = events[typeEvent] || (events[typeEvent] = {});\n    const previousFn = findHandler(handlers, originalHandler, delegation ? handler : null);\n\n    if (previousFn) {\n      previousFn.oneOff = previousFn.oneOff && oneOff;\n      return;\n    }\n\n    const uid = getUidEvent(originalHandler, originalTypeEvent.replace(namespaceRegex, ''));\n    const fn = delegation ? bootstrapDelegationHandler(element, handler, delegationFn) : bootstrapHandler(element, handler);\n    fn.delegationSelector = delegation ? handler : null;\n    fn.originalHandler = originalHandler;\n    fn.oneOff = oneOff;\n    fn.uidEvent = uid;\n    handlers[uid] = fn;\n    element.addEventListener(typeEvent, fn, delegation);\n  }\n\n  function removeHandler(element, events, typeEvent, handler, delegationSelector) {\n    const fn = findHandler(events[typeEvent], handler, delegationSelector);\n\n    if (!fn) {\n      return;\n    }\n\n    element.removeEventListener(typeEvent, fn, Boolean(delegationSelector));\n    delete events[typeEvent][fn.uidEvent];\n  }\n\n  function removeNamespacedHandlers(element, events, typeEvent, namespace) {\n    const storeElementEvent = events[typeEvent] || {};\n    Object.keys(storeElementEvent).forEach(handlerKey => {\n      if (handlerKey.includes(namespace)) {\n        const event = storeElementEvent[handlerKey];\n        removeHandler(element, events, typeEvent, event.originalHandler, event.delegationSelector);\n      }\n    });\n  }\n\n  function getTypeEvent(event) {\n    // allow to get the native events from namespaced events ('click.bs.button' --> 'click')\n    event = event.replace(stripNameRegex, '');\n    return customEvents[event] || event;\n  }\n\n  const EventHandler = {\n    on(element, event, handler, delegationFn) {\n      addHandler(element, event, handler, delegationFn, false);\n    },\n\n    one(element, event, handler, delegationFn) {\n      addHandler(element, event, handler, delegationFn, true);\n    },\n\n    off(element, originalTypeEvent, handler, delegationFn) {\n      if (typeof originalTypeEvent !== 'string' || !element) {\n        return;\n      }\n\n      const [delegation, originalHandler, typeEvent] = normalizeParams(originalTypeEvent, handler, delegationFn);\n      const inNamespace = typeEvent !== originalTypeEvent;\n      const events = getEvent(element);\n      const isNamespace = originalTypeEvent.startsWith('.');\n\n      if (typeof originalHandler !== 'undefined') {\n        // Simplest case: handler is passed, remove that listener ONLY.\n        if (!events || !events[typeEvent]) {\n          return;\n        }\n\n        removeHandler(element, events, typeEvent, originalHandler, delegation ? handler : null);\n        return;\n      }\n\n      if (isNamespace) {\n        Object.keys(events).forEach(elementEvent => {\n          removeNamespacedHandlers(element, events, elementEvent, originalTypeEvent.slice(1));\n        });\n      }\n\n      const storeElementEvent = events[typeEvent] || {};\n      Object.keys(storeElementEvent).forEach(keyHandlers => {\n        const handlerKey = keyHandlers.replace(stripUidRegex, '');\n\n        if (!inNamespace || originalTypeEvent.includes(handlerKey)) {\n          const event = storeElementEvent[keyHandlers];\n          removeHandler(element, events, typeEvent, event.originalHandler, event.delegationSelector);\n        }\n      });\n    },\n\n    trigger(element, event, args) {\n      if (typeof event !== 'string' || !element) {\n        return null;\n      }\n\n      const $ = getjQuery();\n      const typeEvent = getTypeEvent(event);\n      const inNamespace = event !== typeEvent;\n      const isNative = nativeEvents.has(typeEvent);\n      let jQueryEvent;\n      let bubbles = true;\n      let nativeDispatch = true;\n      let defaultPrevented = false;\n      let evt = null;\n\n      if (inNamespace && $) {\n        jQueryEvent = $.Event(event, args);\n        $(element).trigger(jQueryEvent);\n        bubbles = !jQueryEvent.isPropagationStopped();\n        nativeDispatch = !jQueryEvent.isImmediatePropagationStopped();\n        defaultPrevented = jQueryEvent.isDefaultPrevented();\n      }\n\n      if (isNative) {\n        evt = document.createEvent('HTMLEvents');\n        evt.initEvent(typeEvent, bubbles, true);\n      } else {\n        evt = new CustomEvent(event, {\n          bubbles,\n          cancelable: true\n        });\n      } // merge custom information in our event\n\n\n      if (typeof args !== 'undefined') {\n        Object.keys(args).forEach(key => {\n          Object.defineProperty(evt, key, {\n            get() {\n              return args[key];\n            }\n\n          });\n        });\n      }\n\n      if (defaultPrevented) {\n        evt.preventDefault();\n      }\n\n      if (nativeDispatch) {\n        element.dispatchEvent(evt);\n      }\n\n      if (evt.defaultPrevented && typeof jQueryEvent !== 'undefined') {\n        jQueryEvent.preventDefault();\n      }\n\n      return evt;\n    }\n\n  };\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): dom/data.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n  const elementMap = new Map();\n  var Data = {\n    set(element, key, instance) {\n      if (!elementMap.has(element)) {\n        elementMap.set(element, new Map());\n      }\n\n      const instanceMap = elementMap.get(element); // make it clear we only want one instance per element\n      // can be removed later when multiple key/instances are fine to be used\n\n      if (!instanceMap.has(key) && instanceMap.size !== 0) {\n        // eslint-disable-next-line no-console\n        console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(instanceMap.keys())[0]}.`);\n        return;\n      }\n\n      instanceMap.set(key, instance);\n    },\n\n    get(element, key) {\n      if (elementMap.has(element)) {\n        return elementMap.get(element).get(key) || null;\n      }\n\n      return null;\n    },\n\n    remove(element, key) {\n      if (!elementMap.has(element)) {\n        return;\n      }\n\n      const instanceMap = elementMap.get(element);\n      instanceMap.delete(key); // free up element references if there are no instances left for an element\n\n      if (instanceMap.size === 0) {\n        elementMap.delete(element);\n      }\n    }\n\n  };\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): base-component.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const VERSION = '5.0.2';\n\n  class BaseComponent {\n    constructor(element) {\n      element = getElement(element);\n\n      if (!element) {\n        return;\n      }\n\n      this._element = element;\n      Data.set(this._element, this.constructor.DATA_KEY, this);\n    }\n\n    dispose() {\n      Data.remove(this._element, this.constructor.DATA_KEY);\n      EventHandler.off(this._element, this.constructor.EVENT_KEY);\n      Object.getOwnPropertyNames(this).forEach(propertyName => {\n        this[propertyName] = null;\n      });\n    }\n\n    _queueCallback(callback, element, isAnimated = true) {\n      executeAfterTransition(callback, element, isAnimated);\n    }\n    /** Static */\n\n\n    static getInstance(element) {\n      return Data.get(element, this.DATA_KEY);\n    }\n\n    static getOrCreateInstance(element, config = {}) {\n      return this.getInstance(element) || new this(element, typeof config === 'object' ? config : null);\n    }\n\n    static get VERSION() {\n      return VERSION;\n    }\n\n    static get NAME() {\n      throw new Error('You have to implement the static method \"NAME\", for each component!');\n    }\n\n    static get DATA_KEY() {\n      return `bs.${this.NAME}`;\n    }\n\n    static get EVENT_KEY() {\n      return `.${this.DATA_KEY}`;\n    }\n\n  }\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): alert.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$c = 'alert';\n  const DATA_KEY$b = 'bs.alert';\n  const EVENT_KEY$b = `.${DATA_KEY$b}`;\n  const DATA_API_KEY$8 = '.data-api';\n  const SELECTOR_DISMISS = '[data-bs-dismiss=\"alert\"]';\n  const EVENT_CLOSE = `close${EVENT_KEY$b}`;\n  const EVENT_CLOSED = `closed${EVENT_KEY$b}`;\n  const EVENT_CLICK_DATA_API$7 = `click${EVENT_KEY$b}${DATA_API_KEY$8}`;\n  const CLASS_NAME_ALERT = 'alert';\n  const CLASS_NAME_FADE$6 = 'fade';\n  const CLASS_NAME_SHOW$9 = 'show';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Alert extends BaseComponent {\n    // Getters\n    static get NAME() {\n      return NAME$c;\n    } // Public\n\n\n    close(element) {\n      const rootElement = element ? this._getRootElement(element) : this._element;\n\n      const customEvent = this._triggerCloseEvent(rootElement);\n\n      if (customEvent === null || customEvent.defaultPrevented) {\n        return;\n      }\n\n      this._removeElement(rootElement);\n    } // Private\n\n\n    _getRootElement(element) {\n      return getElementFromSelector(element) || element.closest(`.${CLASS_NAME_ALERT}`);\n    }\n\n    _triggerCloseEvent(element) {\n      return EventHandler.trigger(element, EVENT_CLOSE);\n    }\n\n    _removeElement(element) {\n      element.classList.remove(CLASS_NAME_SHOW$9);\n      const isAnimated = element.classList.contains(CLASS_NAME_FADE$6);\n\n      this._queueCallback(() => this._destroyElement(element), element, isAnimated);\n    }\n\n    _destroyElement(element) {\n      element.remove();\n      EventHandler.trigger(element, EVENT_CLOSED);\n    } // Static\n\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = Alert.getOrCreateInstance(this);\n\n        if (config === 'close') {\n          data[config](this);\n        }\n      });\n    }\n\n    static handleDismiss(alertInstance) {\n      return function (event) {\n        if (event) {\n          event.preventDefault();\n        }\n\n        alertInstance.close(this);\n      };\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(document, EVENT_CLICK_DATA_API$7, SELECTOR_DISMISS, Alert.handleDismiss(new Alert()));\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Alert to jQuery only if jQuery is present\n   */\n\n  defineJQueryPlugin(Alert);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): button.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$b = 'button';\n  const DATA_KEY$a = 'bs.button';\n  const EVENT_KEY$a = `.${DATA_KEY$a}`;\n  const DATA_API_KEY$7 = '.data-api';\n  const CLASS_NAME_ACTIVE$3 = 'active';\n  const SELECTOR_DATA_TOGGLE$5 = '[data-bs-toggle=\"button\"]';\n  const EVENT_CLICK_DATA_API$6 = `click${EVENT_KEY$a}${DATA_API_KEY$7}`;\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Button extends BaseComponent {\n    // Getters\n    static get NAME() {\n      return NAME$b;\n    } // Public\n\n\n    toggle() {\n      // Toggle class and sync the `aria-pressed` attribute with the return value of the `.toggle()` method\n      this._element.setAttribute('aria-pressed', this._element.classList.toggle(CLASS_NAME_ACTIVE$3));\n    } // Static\n\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = Button.getOrCreateInstance(this);\n\n        if (config === 'toggle') {\n          data[config]();\n        }\n      });\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(document, EVENT_CLICK_DATA_API$6, SELECTOR_DATA_TOGGLE$5, event => {\n    event.preventDefault();\n    const button = event.target.closest(SELECTOR_DATA_TOGGLE$5);\n    const data = Button.getOrCreateInstance(button);\n    data.toggle();\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Button to jQuery only if jQuery is present\n   */\n\n  defineJQueryPlugin(Button);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): dom/manipulator.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  function normalizeData(val) {\n    if (val === 'true') {\n      return true;\n    }\n\n    if (val === 'false') {\n      return false;\n    }\n\n    if (val === Number(val).toString()) {\n      return Number(val);\n    }\n\n    if (val === '' || val === 'null') {\n      return null;\n    }\n\n    return val;\n  }\n\n  function normalizeDataKey(key) {\n    return key.replace(/[A-Z]/g, chr => `-${chr.toLowerCase()}`);\n  }\n\n  const Manipulator = {\n    setDataAttribute(element, key, value) {\n      element.setAttribute(`data-bs-${normalizeDataKey(key)}`, value);\n    },\n\n    removeDataAttribute(element, key) {\n      element.removeAttribute(`data-bs-${normalizeDataKey(key)}`);\n    },\n\n    getDataAttributes(element) {\n      if (!element) {\n        return {};\n      }\n\n      const attributes = {};\n      Object.keys(element.dataset).filter(key => key.startsWith('bs')).forEach(key => {\n        let pureKey = key.replace(/^bs/, '');\n        pureKey = pureKey.charAt(0).toLowerCase() + pureKey.slice(1, pureKey.length);\n        attributes[pureKey] = normalizeData(element.dataset[key]);\n      });\n      return attributes;\n    },\n\n    getDataAttribute(element, key) {\n      return normalizeData(element.getAttribute(`data-bs-${normalizeDataKey(key)}`));\n    },\n\n    offset(element) {\n      const rect = element.getBoundingClientRect();\n      return {\n        top: rect.top + document.body.scrollTop,\n        left: rect.left + document.body.scrollLeft\n      };\n    },\n\n    position(element) {\n      return {\n        top: element.offsetTop,\n        left: element.offsetLeft\n      };\n    }\n\n  };\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): carousel.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$a = 'carousel';\n  const DATA_KEY$9 = 'bs.carousel';\n  const EVENT_KEY$9 = `.${DATA_KEY$9}`;\n  const DATA_API_KEY$6 = '.data-api';\n  const ARROW_LEFT_KEY = 'ArrowLeft';\n  const ARROW_RIGHT_KEY = 'ArrowRight';\n  const TOUCHEVENT_COMPAT_WAIT = 500; // Time for mouse compat events to fire after touch\n\n  const SWIPE_THRESHOLD = 40;\n  const Default$9 = {\n    interval: 5000,\n    keyboard: true,\n    slide: false,\n    pause: 'hover',\n    wrap: true,\n    touch: true\n  };\n  const DefaultType$9 = {\n    interval: '(number|boolean)',\n    keyboard: 'boolean',\n    slide: '(boolean|string)',\n    pause: '(string|boolean)',\n    wrap: 'boolean',\n    touch: 'boolean'\n  };\n  const ORDER_NEXT = 'next';\n  const ORDER_PREV = 'prev';\n  const DIRECTION_LEFT = 'left';\n  const DIRECTION_RIGHT = 'right';\n  const KEY_TO_DIRECTION = {\n    [ARROW_LEFT_KEY]: DIRECTION_RIGHT,\n    [ARROW_RIGHT_KEY]: DIRECTION_LEFT\n  };\n  const EVENT_SLIDE = `slide${EVENT_KEY$9}`;\n  const EVENT_SLID = `slid${EVENT_KEY$9}`;\n  const EVENT_KEYDOWN = `keydown${EVENT_KEY$9}`;\n  const EVENT_MOUSEENTER = `mouseenter${EVENT_KEY$9}`;\n  const EVENT_MOUSELEAVE = `mouseleave${EVENT_KEY$9}`;\n  const EVENT_TOUCHSTART = `touchstart${EVENT_KEY$9}`;\n  const EVENT_TOUCHMOVE = `touchmove${EVENT_KEY$9}`;\n  const EVENT_TOUCHEND = `touchend${EVENT_KEY$9}`;\n  const EVENT_POINTERDOWN = `pointerdown${EVENT_KEY$9}`;\n  const EVENT_POINTERUP = `pointerup${EVENT_KEY$9}`;\n  const EVENT_DRAG_START = `dragstart${EVENT_KEY$9}`;\n  const EVENT_LOAD_DATA_API$2 = `load${EVENT_KEY$9}${DATA_API_KEY$6}`;\n  const EVENT_CLICK_DATA_API$5 = `click${EVENT_KEY$9}${DATA_API_KEY$6}`;\n  const CLASS_NAME_CAROUSEL = 'carousel';\n  const CLASS_NAME_ACTIVE$2 = 'active';\n  const CLASS_NAME_SLIDE = 'slide';\n  const CLASS_NAME_END = 'carousel-item-end';\n  const CLASS_NAME_START = 'carousel-item-start';\n  const CLASS_NAME_NEXT = 'carousel-item-next';\n  const CLASS_NAME_PREV = 'carousel-item-prev';\n  const CLASS_NAME_POINTER_EVENT = 'pointer-event';\n  const SELECTOR_ACTIVE$1 = '.active';\n  const SELECTOR_ACTIVE_ITEM = '.active.carousel-item';\n  const SELECTOR_ITEM = '.carousel-item';\n  const SELECTOR_ITEM_IMG = '.carousel-item img';\n  const SELECTOR_NEXT_PREV = '.carousel-item-next, .carousel-item-prev';\n  const SELECTOR_INDICATORS = '.carousel-indicators';\n  const SELECTOR_INDICATOR = '[data-bs-target]';\n  const SELECTOR_DATA_SLIDE = '[data-bs-slide], [data-bs-slide-to]';\n  const SELECTOR_DATA_RIDE = '[data-bs-ride=\"carousel\"]';\n  const POINTER_TYPE_TOUCH = 'touch';\n  const POINTER_TYPE_PEN = 'pen';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Carousel extends BaseComponent {\n    constructor(element, config) {\n      super(element);\n      this._items = null;\n      this._interval = null;\n      this._activeElement = null;\n      this._isPaused = false;\n      this._isSliding = false;\n      this.touchTimeout = null;\n      this.touchStartX = 0;\n      this.touchDeltaX = 0;\n      this._config = this._getConfig(config);\n      this._indicatorsElement = SelectorEngine.findOne(SELECTOR_INDICATORS, this._element);\n      this._touchSupported = 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0;\n      this._pointerEvent = Boolean(window.PointerEvent);\n\n      this._addEventListeners();\n    } // Getters\n\n\n    static get Default() {\n      return Default$9;\n    }\n\n    static get NAME() {\n      return NAME$a;\n    } // Public\n\n\n    next() {\n      this._slide(ORDER_NEXT);\n    }\n\n    nextWhenVisible() {\n      // Don't call next when the page isn't visible\n      // or the carousel or its parent isn't visible\n      if (!document.hidden && isVisible(this._element)) {\n        this.next();\n      }\n    }\n\n    prev() {\n      this._slide(ORDER_PREV);\n    }\n\n    pause(event) {\n      if (!event) {\n        this._isPaused = true;\n      }\n\n      if (SelectorEngine.findOne(SELECTOR_NEXT_PREV, this._element)) {\n        triggerTransitionEnd(this._element);\n        this.cycle(true);\n      }\n\n      clearInterval(this._interval);\n      this._interval = null;\n    }\n\n    cycle(event) {\n      if (!event) {\n        this._isPaused = false;\n      }\n\n      if (this._interval) {\n        clearInterval(this._interval);\n        this._interval = null;\n      }\n\n      if (this._config && this._config.interval && !this._isPaused) {\n        this._updateInterval();\n\n        this._interval = setInterval((document.visibilityState ? this.nextWhenVisible : this.next).bind(this), this._config.interval);\n      }\n    }\n\n    to(index) {\n      this._activeElement = SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element);\n\n      const activeIndex = this._getItemIndex(this._activeElement);\n\n      if (index > this._items.length - 1 || index < 0) {\n        return;\n      }\n\n      if (this._isSliding) {\n        EventHandler.one(this._element, EVENT_SLID, () => this.to(index));\n        return;\n      }\n\n      if (activeIndex === index) {\n        this.pause();\n        this.cycle();\n        return;\n      }\n\n      const order = index > activeIndex ? ORDER_NEXT : ORDER_PREV;\n\n      this._slide(order, this._items[index]);\n    } // Private\n\n\n    _getConfig(config) {\n      config = { ...Default$9,\n        ...Manipulator.getDataAttributes(this._element),\n        ...(typeof config === 'object' ? config : {})\n      };\n      typeCheckConfig(NAME$a, config, DefaultType$9);\n      return config;\n    }\n\n    _handleSwipe() {\n      const absDeltax = Math.abs(this.touchDeltaX);\n\n      if (absDeltax <= SWIPE_THRESHOLD) {\n        return;\n      }\n\n      const direction = absDeltax / this.touchDeltaX;\n      this.touchDeltaX = 0;\n\n      if (!direction) {\n        return;\n      }\n\n      this._slide(direction > 0 ? DIRECTION_RIGHT : DIRECTION_LEFT);\n    }\n\n    _addEventListeners() {\n      if (this._config.keyboard) {\n        EventHandler.on(this._element, EVENT_KEYDOWN, event => this._keydown(event));\n      }\n\n      if (this._config.pause === 'hover') {\n        EventHandler.on(this._element, EVENT_MOUSEENTER, event => this.pause(event));\n        EventHandler.on(this._element, EVENT_MOUSELEAVE, event => this.cycle(event));\n      }\n\n      if (this._config.touch && this._touchSupported) {\n        this._addTouchEventListeners();\n      }\n    }\n\n    _addTouchEventListeners() {\n      const start = event => {\n        if (this._pointerEvent && (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH)) {\n          this.touchStartX = event.clientX;\n        } else if (!this._pointerEvent) {\n          this.touchStartX = event.touches[0].clientX;\n        }\n      };\n\n      const move = event => {\n        // ensure swiping with one touch and not pinching\n        this.touchDeltaX = event.touches && event.touches.length > 1 ? 0 : event.touches[0].clientX - this.touchStartX;\n      };\n\n      const end = event => {\n        if (this._pointerEvent && (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH)) {\n          this.touchDeltaX = event.clientX - this.touchStartX;\n        }\n\n        this._handleSwipe();\n\n        if (this._config.pause === 'hover') {\n          // If it's a touch-enabled device, mouseenter/leave are fired as\n          // part of the mouse compatibility events on first tap - the carousel\n          // would stop cycling until user tapped out of it;\n          // here, we listen for touchend, explicitly pause the carousel\n          // (as if it's the second time we tap on it, mouseenter compat event\n          // is NOT fired) and after a timeout (to allow for mouse compatibility\n          // events to fire) we explicitly restart cycling\n          this.pause();\n\n          if (this.touchTimeout) {\n            clearTimeout(this.touchTimeout);\n          }\n\n          this.touchTimeout = setTimeout(event => this.cycle(event), TOUCHEVENT_COMPAT_WAIT + this._config.interval);\n        }\n      };\n\n      SelectorEngine.find(SELECTOR_ITEM_IMG, this._element).forEach(itemImg => {\n        EventHandler.on(itemImg, EVENT_DRAG_START, e => e.preventDefault());\n      });\n\n      if (this._pointerEvent) {\n        EventHandler.on(this._element, EVENT_POINTERDOWN, event => start(event));\n        EventHandler.on(this._element, EVENT_POINTERUP, event => end(event));\n\n        this._element.classList.add(CLASS_NAME_POINTER_EVENT);\n      } else {\n        EventHandler.on(this._element, EVENT_TOUCHSTART, event => start(event));\n        EventHandler.on(this._element, EVENT_TOUCHMOVE, event => move(event));\n        EventHandler.on(this._element, EVENT_TOUCHEND, event => end(event));\n      }\n    }\n\n    _keydown(event) {\n      if (/input|textarea/i.test(event.target.tagName)) {\n        return;\n      }\n\n      const direction = KEY_TO_DIRECTION[event.key];\n\n      if (direction) {\n        event.preventDefault();\n\n        this._slide(direction);\n      }\n    }\n\n    _getItemIndex(element) {\n      this._items = element && element.parentNode ? SelectorEngine.find(SELECTOR_ITEM, element.parentNode) : [];\n      return this._items.indexOf(element);\n    }\n\n    _getItemByOrder(order, activeElement) {\n      const isNext = order === ORDER_NEXT;\n      return getNextActiveElement(this._items, activeElement, isNext, this._config.wrap);\n    }\n\n    _triggerSlideEvent(relatedTarget, eventDirectionName) {\n      const targetIndex = this._getItemIndex(relatedTarget);\n\n      const fromIndex = this._getItemIndex(SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element));\n\n      return EventHandler.trigger(this._element, EVENT_SLIDE, {\n        relatedTarget,\n        direction: eventDirectionName,\n        from: fromIndex,\n        to: targetIndex\n      });\n    }\n\n    _setActiveIndicatorElement(element) {\n      if (this._indicatorsElement) {\n        const activeIndicator = SelectorEngine.findOne(SELECTOR_ACTIVE$1, this._indicatorsElement);\n        activeIndicator.classList.remove(CLASS_NAME_ACTIVE$2);\n        activeIndicator.removeAttribute('aria-current');\n        const indicators = SelectorEngine.find(SELECTOR_INDICATOR, this._indicatorsElement);\n\n        for (let i = 0; i < indicators.length; i++) {\n          if (Number.parseInt(indicators[i].getAttribute('data-bs-slide-to'), 10) === this._getItemIndex(element)) {\n            indicators[i].classList.add(CLASS_NAME_ACTIVE$2);\n            indicators[i].setAttribute('aria-current', 'true');\n            break;\n          }\n        }\n      }\n    }\n\n    _updateInterval() {\n      const element = this._activeElement || SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element);\n\n      if (!element) {\n        return;\n      }\n\n      const elementInterval = Number.parseInt(element.getAttribute('data-bs-interval'), 10);\n\n      if (elementInterval) {\n        this._config.defaultInterval = this._config.defaultInterval || this._config.interval;\n        this._config.interval = elementInterval;\n      } else {\n        this._config.interval = this._config.defaultInterval || this._config.interval;\n      }\n    }\n\n    _slide(directionOrOrder, element) {\n      const order = this._directionToOrder(directionOrOrder);\n\n      const activeElement = SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element);\n\n      const activeElementIndex = this._getItemIndex(activeElement);\n\n      const nextElement = element || this._getItemByOrder(order, activeElement);\n\n      const nextElementIndex = this._getItemIndex(nextElement);\n\n      const isCycling = Boolean(this._interval);\n      const isNext = order === ORDER_NEXT;\n      const directionalClassName = isNext ? CLASS_NAME_START : CLASS_NAME_END;\n      const orderClassName = isNext ? CLASS_NAME_NEXT : CLASS_NAME_PREV;\n\n      const eventDirectionName = this._orderToDirection(order);\n\n      if (nextElement && nextElement.classList.contains(CLASS_NAME_ACTIVE$2)) {\n        this._isSliding = false;\n        return;\n      }\n\n      if (this._isSliding) {\n        return;\n      }\n\n      const slideEvent = this._triggerSlideEvent(nextElement, eventDirectionName);\n\n      if (slideEvent.defaultPrevented) {\n        return;\n      }\n\n      if (!activeElement || !nextElement) {\n        // Some weirdness is happening, so we bail\n        return;\n      }\n\n      this._isSliding = true;\n\n      if (isCycling) {\n        this.pause();\n      }\n\n      this._setActiveIndicatorElement(nextElement);\n\n      this._activeElement = nextElement;\n\n      const triggerSlidEvent = () => {\n        EventHandler.trigger(this._element, EVENT_SLID, {\n          relatedTarget: nextElement,\n          direction: eventDirectionName,\n          from: activeElementIndex,\n          to: nextElementIndex\n        });\n      };\n\n      if (this._element.classList.contains(CLASS_NAME_SLIDE)) {\n        nextElement.classList.add(orderClassName);\n        reflow(nextElement);\n        activeElement.classList.add(directionalClassName);\n        nextElement.classList.add(directionalClassName);\n\n        const completeCallBack = () => {\n          nextElement.classList.remove(directionalClassName, orderClassName);\n          nextElement.classList.add(CLASS_NAME_ACTIVE$2);\n          activeElement.classList.remove(CLASS_NAME_ACTIVE$2, orderClassName, directionalClassName);\n          this._isSliding = false;\n          setTimeout(triggerSlidEvent, 0);\n        };\n\n        this._queueCallback(completeCallBack, activeElement, true);\n      } else {\n        activeElement.classList.remove(CLASS_NAME_ACTIVE$2);\n        nextElement.classList.add(CLASS_NAME_ACTIVE$2);\n        this._isSliding = false;\n        triggerSlidEvent();\n      }\n\n      if (isCycling) {\n        this.cycle();\n      }\n    }\n\n    _directionToOrder(direction) {\n      if (![DIRECTION_RIGHT, DIRECTION_LEFT].includes(direction)) {\n        return direction;\n      }\n\n      if (isRTL()) {\n        return direction === DIRECTION_LEFT ? ORDER_PREV : ORDER_NEXT;\n      }\n\n      return direction === DIRECTION_LEFT ? ORDER_NEXT : ORDER_PREV;\n    }\n\n    _orderToDirection(order) {\n      if (![ORDER_NEXT, ORDER_PREV].includes(order)) {\n        return order;\n      }\n\n      if (isRTL()) {\n        return order === ORDER_PREV ? DIRECTION_LEFT : DIRECTION_RIGHT;\n      }\n\n      return order === ORDER_PREV ? DIRECTION_RIGHT : DIRECTION_LEFT;\n    } // Static\n\n\n    static carouselInterface(element, config) {\n      const data = Carousel.getOrCreateInstance(element, config);\n      let {\n        _config\n      } = data;\n\n      if (typeof config === 'object') {\n        _config = { ..._config,\n          ...config\n        };\n      }\n\n      const action = typeof config === 'string' ? config : _config.slide;\n\n      if (typeof config === 'number') {\n        data.to(config);\n      } else if (typeof action === 'string') {\n        if (typeof data[action] === 'undefined') {\n          throw new TypeError(`No method named \"${action}\"`);\n        }\n\n        data[action]();\n      } else if (_config.interval && _config.ride) {\n        data.pause();\n        data.cycle();\n      }\n    }\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        Carousel.carouselInterface(this, config);\n      });\n    }\n\n    static dataApiClickHandler(event) {\n      const target = getElementFromSelector(this);\n\n      if (!target || !target.classList.contains(CLASS_NAME_CAROUSEL)) {\n        return;\n      }\n\n      const config = { ...Manipulator.getDataAttributes(target),\n        ...Manipulator.getDataAttributes(this)\n      };\n      const slideIndex = this.getAttribute('data-bs-slide-to');\n\n      if (slideIndex) {\n        config.interval = false;\n      }\n\n      Carousel.carouselInterface(target, config);\n\n      if (slideIndex) {\n        Carousel.getInstance(target).to(slideIndex);\n      }\n\n      event.preventDefault();\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(document, EVENT_CLICK_DATA_API$5, SELECTOR_DATA_SLIDE, Carousel.dataApiClickHandler);\n  EventHandler.on(window, EVENT_LOAD_DATA_API$2, () => {\n    const carousels = SelectorEngine.find(SELECTOR_DATA_RIDE);\n\n    for (let i = 0, len = carousels.length; i < len; i++) {\n      Carousel.carouselInterface(carousels[i], Carousel.getInstance(carousels[i]));\n    }\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Carousel to jQuery only if jQuery is present\n   */\n\n  defineJQueryPlugin(Carousel);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): collapse.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$9 = 'collapse';\n  const DATA_KEY$8 = 'bs.collapse';\n  const EVENT_KEY$8 = `.${DATA_KEY$8}`;\n  const DATA_API_KEY$5 = '.data-api';\n  const Default$8 = {\n    toggle: true,\n    parent: ''\n  };\n  const DefaultType$8 = {\n    toggle: 'boolean',\n    parent: '(string|element)'\n  };\n  const EVENT_SHOW$5 = `show${EVENT_KEY$8}`;\n  const EVENT_SHOWN$5 = `shown${EVENT_KEY$8}`;\n  const EVENT_HIDE$5 = `hide${EVENT_KEY$8}`;\n  const EVENT_HIDDEN$5 = `hidden${EVENT_KEY$8}`;\n  const EVENT_CLICK_DATA_API$4 = `click${EVENT_KEY$8}${DATA_API_KEY$5}`;\n  const CLASS_NAME_SHOW$8 = 'show';\n  const CLASS_NAME_COLLAPSE = 'collapse';\n  const CLASS_NAME_COLLAPSING = 'collapsing';\n  const CLASS_NAME_COLLAPSED = 'collapsed';\n  const WIDTH = 'width';\n  const HEIGHT = 'height';\n  const SELECTOR_ACTIVES = '.show, .collapsing';\n  const SELECTOR_DATA_TOGGLE$4 = '[data-bs-toggle=\"collapse\"]';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Collapse extends BaseComponent {\n    constructor(element, config) {\n      super(element);\n      this._isTransitioning = false;\n      this._config = this._getConfig(config);\n      this._triggerArray = SelectorEngine.find(`${SELECTOR_DATA_TOGGLE$4}[href=\"#${this._element.id}\"],` + `${SELECTOR_DATA_TOGGLE$4}[data-bs-target=\"#${this._element.id}\"]`);\n      const toggleList = SelectorEngine.find(SELECTOR_DATA_TOGGLE$4);\n\n      for (let i = 0, len = toggleList.length; i < len; i++) {\n        const elem = toggleList[i];\n        const selector = getSelectorFromElement(elem);\n        const filterElement = SelectorEngine.find(selector).filter(foundElem => foundElem === this._element);\n\n        if (selector !== null && filterElement.length) {\n          this._selector = selector;\n\n          this._triggerArray.push(elem);\n        }\n      }\n\n      this._parent = this._config.parent ? this._getParent() : null;\n\n      if (!this._config.parent) {\n        this._addAriaAndCollapsedClass(this._element, this._triggerArray);\n      }\n\n      if (this._config.toggle) {\n        this.toggle();\n      }\n    } // Getters\n\n\n    static get Default() {\n      return Default$8;\n    }\n\n    static get NAME() {\n      return NAME$9;\n    } // Public\n\n\n    toggle() {\n      if (this._element.classList.contains(CLASS_NAME_SHOW$8)) {\n        this.hide();\n      } else {\n        this.show();\n      }\n    }\n\n    show() {\n      if (this._isTransitioning || this._element.classList.contains(CLASS_NAME_SHOW$8)) {\n        return;\n      }\n\n      let actives;\n      let activesData;\n\n      if (this._parent) {\n        actives = SelectorEngine.find(SELECTOR_ACTIVES, this._parent).filter(elem => {\n          if (typeof this._config.parent === 'string') {\n            return elem.getAttribute('data-bs-parent') === this._config.parent;\n          }\n\n          return elem.classList.contains(CLASS_NAME_COLLAPSE);\n        });\n\n        if (actives.length === 0) {\n          actives = null;\n        }\n      }\n\n      const container = SelectorEngine.findOne(this._selector);\n\n      if (actives) {\n        const tempActiveData = actives.find(elem => container !== elem);\n        activesData = tempActiveData ? Collapse.getInstance(tempActiveData) : null;\n\n        if (activesData && activesData._isTransitioning) {\n          return;\n        }\n      }\n\n      const startEvent = EventHandler.trigger(this._element, EVENT_SHOW$5);\n\n      if (startEvent.defaultPrevented) {\n        return;\n      }\n\n      if (actives) {\n        actives.forEach(elemActive => {\n          if (container !== elemActive) {\n            Collapse.collapseInterface(elemActive, 'hide');\n          }\n\n          if (!activesData) {\n            Data.set(elemActive, DATA_KEY$8, null);\n          }\n        });\n      }\n\n      const dimension = this._getDimension();\n\n      this._element.classList.remove(CLASS_NAME_COLLAPSE);\n\n      this._element.classList.add(CLASS_NAME_COLLAPSING);\n\n      this._element.style[dimension] = 0;\n\n      if (this._triggerArray.length) {\n        this._triggerArray.forEach(element => {\n          element.classList.remove(CLASS_NAME_COLLAPSED);\n          element.setAttribute('aria-expanded', true);\n        });\n      }\n\n      this.setTransitioning(true);\n\n      const complete = () => {\n        this._element.classList.remove(CLASS_NAME_COLLAPSING);\n\n        this._element.classList.add(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$8);\n\n        this._element.style[dimension] = '';\n        this.setTransitioning(false);\n        EventHandler.trigger(this._element, EVENT_SHOWN$5);\n      };\n\n      const capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1);\n      const scrollSize = `scroll${capitalizedDimension}`;\n\n      this._queueCallback(complete, this._element, true);\n\n      this._element.style[dimension] = `${this._element[scrollSize]}px`;\n    }\n\n    hide() {\n      if (this._isTransitioning || !this._element.classList.contains(CLASS_NAME_SHOW$8)) {\n        return;\n      }\n\n      const startEvent = EventHandler.trigger(this._element, EVENT_HIDE$5);\n\n      if (startEvent.defaultPrevented) {\n        return;\n      }\n\n      const dimension = this._getDimension();\n\n      this._element.style[dimension] = `${this._element.getBoundingClientRect()[dimension]}px`;\n      reflow(this._element);\n\n      this._element.classList.add(CLASS_NAME_COLLAPSING);\n\n      this._element.classList.remove(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$8);\n\n      const triggerArrayLength = this._triggerArray.length;\n\n      if (triggerArrayLength > 0) {\n        for (let i = 0; i < triggerArrayLength; i++) {\n          const trigger = this._triggerArray[i];\n          const elem = getElementFromSelector(trigger);\n\n          if (elem && !elem.classList.contains(CLASS_NAME_SHOW$8)) {\n            trigger.classList.add(CLASS_NAME_COLLAPSED);\n            trigger.setAttribute('aria-expanded', false);\n          }\n        }\n      }\n\n      this.setTransitioning(true);\n\n      const complete = () => {\n        this.setTransitioning(false);\n\n        this._element.classList.remove(CLASS_NAME_COLLAPSING);\n\n        this._element.classList.add(CLASS_NAME_COLLAPSE);\n\n        EventHandler.trigger(this._element, EVENT_HIDDEN$5);\n      };\n\n      this._element.style[dimension] = '';\n\n      this._queueCallback(complete, this._element, true);\n    }\n\n    setTransitioning(isTransitioning) {\n      this._isTransitioning = isTransitioning;\n    } // Private\n\n\n    _getConfig(config) {\n      config = { ...Default$8,\n        ...config\n      };\n      config.toggle = Boolean(config.toggle); // Coerce string values\n\n      typeCheckConfig(NAME$9, config, DefaultType$8);\n      return config;\n    }\n\n    _getDimension() {\n      return this._element.classList.contains(WIDTH) ? WIDTH : HEIGHT;\n    }\n\n    _getParent() {\n      let {\n        parent\n      } = this._config;\n      parent = getElement(parent);\n      const selector = `${SELECTOR_DATA_TOGGLE$4}[data-bs-parent=\"${parent}\"]`;\n      SelectorEngine.find(selector, parent).forEach(element => {\n        const selected = getElementFromSelector(element);\n\n        this._addAriaAndCollapsedClass(selected, [element]);\n      });\n      return parent;\n    }\n\n    _addAriaAndCollapsedClass(element, triggerArray) {\n      if (!element || !triggerArray.length) {\n        return;\n      }\n\n      const isOpen = element.classList.contains(CLASS_NAME_SHOW$8);\n      triggerArray.forEach(elem => {\n        if (isOpen) {\n          elem.classList.remove(CLASS_NAME_COLLAPSED);\n        } else {\n          elem.classList.add(CLASS_NAME_COLLAPSED);\n        }\n\n        elem.setAttribute('aria-expanded', isOpen);\n      });\n    } // Static\n\n\n    static collapseInterface(element, config) {\n      let data = Collapse.getInstance(element);\n      const _config = { ...Default$8,\n        ...Manipulator.getDataAttributes(element),\n        ...(typeof config === 'object' && config ? config : {})\n      };\n\n      if (!data && _config.toggle && typeof config === 'string' && /show|hide/.test(config)) {\n        _config.toggle = false;\n      }\n\n      if (!data) {\n        data = new Collapse(element, _config);\n      }\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config]();\n      }\n    }\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        Collapse.collapseInterface(this, config);\n      });\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(document, EVENT_CLICK_DATA_API$4, SELECTOR_DATA_TOGGLE$4, function (event) {\n    // preventDefault only for <a> elements (which change the URL) not inside the collapsible element\n    if (event.target.tagName === 'A' || event.delegateTarget && event.delegateTarget.tagName === 'A') {\n      event.preventDefault();\n    }\n\n    const triggerData = Manipulator.getDataAttributes(this);\n    const selector = getSelectorFromElement(this);\n    const selectorElements = SelectorEngine.find(selector);\n    selectorElements.forEach(element => {\n      const data = Collapse.getInstance(element);\n      let config;\n\n      if (data) {\n        // update parent attribute\n        if (data._parent === null && typeof triggerData.parent === 'string') {\n          data._config.parent = triggerData.parent;\n          data._parent = data._getParent();\n        }\n\n        config = 'toggle';\n      } else {\n        config = triggerData;\n      }\n\n      Collapse.collapseInterface(element, config);\n    });\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Collapse to jQuery only if jQuery is present\n   */\n\n  defineJQueryPlugin(Collapse);\n\n  var top = 'top';\n  var bottom = 'bottom';\n  var right = 'right';\n  var left = 'left';\n  var auto = 'auto';\n  var basePlacements = [top, bottom, right, left];\n  var start = 'start';\n  var end = 'end';\n  var clippingParents = 'clippingParents';\n  var viewport = 'viewport';\n  var popper = 'popper';\n  var reference = 'reference';\n  var variationPlacements = /*#__PURE__*/basePlacements.reduce(function (acc, placement) {\n    return acc.concat([placement + \"-\" + start, placement + \"-\" + end]);\n  }, []);\n  var placements = /*#__PURE__*/[].concat(basePlacements, [auto]).reduce(function (acc, placement) {\n    return acc.concat([placement, placement + \"-\" + start, placement + \"-\" + end]);\n  }, []); // modifiers that need to read the DOM\n\n  var beforeRead = 'beforeRead';\n  var read = 'read';\n  var afterRead = 'afterRead'; // pure-logic modifiers\n\n  var beforeMain = 'beforeMain';\n  var main = 'main';\n  var afterMain = 'afterMain'; // modifier with the purpose to write to the DOM (or write into a framework state)\n\n  var beforeWrite = 'beforeWrite';\n  var write = 'write';\n  var afterWrite = 'afterWrite';\n  var modifierPhases = [beforeRead, read, afterRead, beforeMain, main, afterMain, beforeWrite, write, afterWrite];\n\n  function getNodeName(element) {\n    return element ? (element.nodeName || '').toLowerCase() : null;\n  }\n\n  function getWindow(node) {\n    if (node == null) {\n      return window;\n    }\n\n    if (node.toString() !== '[object Window]') {\n      var ownerDocument = node.ownerDocument;\n      return ownerDocument ? ownerDocument.defaultView || window : window;\n    }\n\n    return node;\n  }\n\n  function isElement(node) {\n    var OwnElement = getWindow(node).Element;\n    return node instanceof OwnElement || node instanceof Element;\n  }\n\n  function isHTMLElement(node) {\n    var OwnElement = getWindow(node).HTMLElement;\n    return node instanceof OwnElement || node instanceof HTMLElement;\n  }\n\n  function isShadowRoot(node) {\n    // IE 11 has no ShadowRoot\n    if (typeof ShadowRoot === 'undefined') {\n      return false;\n    }\n\n    var OwnElement = getWindow(node).ShadowRoot;\n    return node instanceof OwnElement || node instanceof ShadowRoot;\n  }\n\n  // and applies them to the HTMLElements such as popper and arrow\n\n  function applyStyles(_ref) {\n    var state = _ref.state;\n    Object.keys(state.elements).forEach(function (name) {\n      var style = state.styles[name] || {};\n      var attributes = state.attributes[name] || {};\n      var element = state.elements[name]; // arrow is optional + virtual elements\n\n      if (!isHTMLElement(element) || !getNodeName(element)) {\n        return;\n      } // Flow doesn't support to extend this property, but it's the most\n      // effective way to apply styles to an HTMLElement\n      // $FlowFixMe[cannot-write]\n\n\n      Object.assign(element.style, style);\n      Object.keys(attributes).forEach(function (name) {\n        var value = attributes[name];\n\n        if (value === false) {\n          element.removeAttribute(name);\n        } else {\n          element.setAttribute(name, value === true ? '' : value);\n        }\n      });\n    });\n  }\n\n  function effect$2(_ref2) {\n    var state = _ref2.state;\n    var initialStyles = {\n      popper: {\n        position: state.options.strategy,\n        left: '0',\n        top: '0',\n        margin: '0'\n      },\n      arrow: {\n        position: 'absolute'\n      },\n      reference: {}\n    };\n    Object.assign(state.elements.popper.style, initialStyles.popper);\n    state.styles = initialStyles;\n\n    if (state.elements.arrow) {\n      Object.assign(state.elements.arrow.style, initialStyles.arrow);\n    }\n\n    return function () {\n      Object.keys(state.elements).forEach(function (name) {\n        var element = state.elements[name];\n        var attributes = state.attributes[name] || {};\n        var styleProperties = Object.keys(state.styles.hasOwnProperty(name) ? state.styles[name] : initialStyles[name]); // Set all values to an empty string to unset them\n\n        var style = styleProperties.reduce(function (style, property) {\n          style[property] = '';\n          return style;\n        }, {}); // arrow is optional + virtual elements\n\n        if (!isHTMLElement(element) || !getNodeName(element)) {\n          return;\n        }\n\n        Object.assign(element.style, style);\n        Object.keys(attributes).forEach(function (attribute) {\n          element.removeAttribute(attribute);\n        });\n      });\n    };\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  var applyStyles$1 = {\n    name: 'applyStyles',\n    enabled: true,\n    phase: 'write',\n    fn: applyStyles,\n    effect: effect$2,\n    requires: ['computeStyles']\n  };\n\n  function getBasePlacement(placement) {\n    return placement.split('-')[0];\n  }\n\n  function getBoundingClientRect(element) {\n    var rect = element.getBoundingClientRect();\n    return {\n      width: rect.width,\n      height: rect.height,\n      top: rect.top,\n      right: rect.right,\n      bottom: rect.bottom,\n      left: rect.left,\n      x: rect.left,\n      y: rect.top\n    };\n  }\n\n  // means it doesn't take into account transforms.\n\n  function getLayoutRect(element) {\n    var clientRect = getBoundingClientRect(element); // Use the clientRect sizes if it's not been transformed.\n    // Fixes https://github.com/popperjs/popper-core/issues/1223\n\n    var width = element.offsetWidth;\n    var height = element.offsetHeight;\n\n    if (Math.abs(clientRect.width - width) <= 1) {\n      width = clientRect.width;\n    }\n\n    if (Math.abs(clientRect.height - height) <= 1) {\n      height = clientRect.height;\n    }\n\n    return {\n      x: element.offsetLeft,\n      y: element.offsetTop,\n      width: width,\n      height: height\n    };\n  }\n\n  function contains(parent, child) {\n    var rootNode = child.getRootNode && child.getRootNode(); // First, attempt with faster native method\n\n    if (parent.contains(child)) {\n      return true;\n    } // then fallback to custom implementation with Shadow DOM support\n    else if (rootNode && isShadowRoot(rootNode)) {\n        var next = child;\n\n        do {\n          if (next && parent.isSameNode(next)) {\n            return true;\n          } // $FlowFixMe[prop-missing]: need a better way to handle this...\n\n\n          next = next.parentNode || next.host;\n        } while (next);\n      } // Give up, the result is false\n\n\n    return false;\n  }\n\n  function getComputedStyle$1(element) {\n    return getWindow(element).getComputedStyle(element);\n  }\n\n  function isTableElement(element) {\n    return ['table', 'td', 'th'].indexOf(getNodeName(element)) >= 0;\n  }\n\n  function getDocumentElement(element) {\n    // $FlowFixMe[incompatible-return]: assume body is always available\n    return ((isElement(element) ? element.ownerDocument : // $FlowFixMe[prop-missing]\n    element.document) || window.document).documentElement;\n  }\n\n  function getParentNode(element) {\n    if (getNodeName(element) === 'html') {\n      return element;\n    }\n\n    return (// this is a quicker (but less type safe) way to save quite some bytes from the bundle\n      // $FlowFixMe[incompatible-return]\n      // $FlowFixMe[prop-missing]\n      element.assignedSlot || // step into the shadow DOM of the parent of a slotted node\n      element.parentNode || ( // DOM Element detected\n      isShadowRoot(element) ? element.host : null) || // ShadowRoot detected\n      // $FlowFixMe[incompatible-call]: HTMLElement is a Node\n      getDocumentElement(element) // fallback\n\n    );\n  }\n\n  function getTrueOffsetParent(element) {\n    if (!isHTMLElement(element) || // https://github.com/popperjs/popper-core/issues/837\n    getComputedStyle$1(element).position === 'fixed') {\n      return null;\n    }\n\n    return element.offsetParent;\n  } // `.offsetParent` reports `null` for fixed elements, while absolute elements\n  // return the containing block\n\n\n  function getContainingBlock(element) {\n    var isFirefox = navigator.userAgent.toLowerCase().indexOf('firefox') !== -1;\n    var isIE = navigator.userAgent.indexOf('Trident') !== -1;\n\n    if (isIE && isHTMLElement(element)) {\n      // In IE 9, 10 and 11 fixed elements containing block is always established by the viewport\n      var elementCss = getComputedStyle$1(element);\n\n      if (elementCss.position === 'fixed') {\n        return null;\n      }\n    }\n\n    var currentNode = getParentNode(element);\n\n    while (isHTMLElement(currentNode) && ['html', 'body'].indexOf(getNodeName(currentNode)) < 0) {\n      var css = getComputedStyle$1(currentNode); // This is non-exhaustive but covers the most common CSS properties that\n      // create a containing block.\n      // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n\n      if (css.transform !== 'none' || css.perspective !== 'none' || css.contain === 'paint' || ['transform', 'perspective'].indexOf(css.willChange) !== -1 || isFirefox && css.willChange === 'filter' || isFirefox && css.filter && css.filter !== 'none') {\n        return currentNode;\n      } else {\n        currentNode = currentNode.parentNode;\n      }\n    }\n\n    return null;\n  } // Gets the closest ancestor positioned element. Handles some edge cases,\n  // such as table ancestors and cross browser bugs.\n\n\n  function getOffsetParent(element) {\n    var window = getWindow(element);\n    var offsetParent = getTrueOffsetParent(element);\n\n    while (offsetParent && isTableElement(offsetParent) && getComputedStyle$1(offsetParent).position === 'static') {\n      offsetParent = getTrueOffsetParent(offsetParent);\n    }\n\n    if (offsetParent && (getNodeName(offsetParent) === 'html' || getNodeName(offsetParent) === 'body' && getComputedStyle$1(offsetParent).position === 'static')) {\n      return window;\n    }\n\n    return offsetParent || getContainingBlock(element) || window;\n  }\n\n  function getMainAxisFromPlacement(placement) {\n    return ['top', 'bottom'].indexOf(placement) >= 0 ? 'x' : 'y';\n  }\n\n  var max = Math.max;\n  var min = Math.min;\n  var round = Math.round;\n\n  function within(min$1, value, max$1) {\n    return max(min$1, min(value, max$1));\n  }\n\n  function getFreshSideObject() {\n    return {\n      top: 0,\n      right: 0,\n      bottom: 0,\n      left: 0\n    };\n  }\n\n  function mergePaddingObject(paddingObject) {\n    return Object.assign({}, getFreshSideObject(), paddingObject);\n  }\n\n  function expandToHashMap(value, keys) {\n    return keys.reduce(function (hashMap, key) {\n      hashMap[key] = value;\n      return hashMap;\n    }, {});\n  }\n\n  var toPaddingObject = function toPaddingObject(padding, state) {\n    padding = typeof padding === 'function' ? padding(Object.assign({}, state.rects, {\n      placement: state.placement\n    })) : padding;\n    return mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));\n  };\n\n  function arrow(_ref) {\n    var _state$modifiersData$;\n\n    var state = _ref.state,\n        name = _ref.name,\n        options = _ref.options;\n    var arrowElement = state.elements.arrow;\n    var popperOffsets = state.modifiersData.popperOffsets;\n    var basePlacement = getBasePlacement(state.placement);\n    var axis = getMainAxisFromPlacement(basePlacement);\n    var isVertical = [left, right].indexOf(basePlacement) >= 0;\n    var len = isVertical ? 'height' : 'width';\n\n    if (!arrowElement || !popperOffsets) {\n      return;\n    }\n\n    var paddingObject = toPaddingObject(options.padding, state);\n    var arrowRect = getLayoutRect(arrowElement);\n    var minProp = axis === 'y' ? top : left;\n    var maxProp = axis === 'y' ? bottom : right;\n    var endDiff = state.rects.reference[len] + state.rects.reference[axis] - popperOffsets[axis] - state.rects.popper[len];\n    var startDiff = popperOffsets[axis] - state.rects.reference[axis];\n    var arrowOffsetParent = getOffsetParent(arrowElement);\n    var clientSize = arrowOffsetParent ? axis === 'y' ? arrowOffsetParent.clientHeight || 0 : arrowOffsetParent.clientWidth || 0 : 0;\n    var centerToReference = endDiff / 2 - startDiff / 2; // Make sure the arrow doesn't overflow the popper if the center point is\n    // outside of the popper bounds\n\n    var min = paddingObject[minProp];\n    var max = clientSize - arrowRect[len] - paddingObject[maxProp];\n    var center = clientSize / 2 - arrowRect[len] / 2 + centerToReference;\n    var offset = within(min, center, max); // Prevents breaking syntax highlighting...\n\n    var axisProp = axis;\n    state.modifiersData[name] = (_state$modifiersData$ = {}, _state$modifiersData$[axisProp] = offset, _state$modifiersData$.centerOffset = offset - center, _state$modifiersData$);\n  }\n\n  function effect$1(_ref2) {\n    var state = _ref2.state,\n        options = _ref2.options;\n    var _options$element = options.element,\n        arrowElement = _options$element === void 0 ? '[data-popper-arrow]' : _options$element;\n\n    if (arrowElement == null) {\n      return;\n    } // CSS selector\n\n\n    if (typeof arrowElement === 'string') {\n      arrowElement = state.elements.popper.querySelector(arrowElement);\n\n      if (!arrowElement) {\n        return;\n      }\n    }\n\n    if (!contains(state.elements.popper, arrowElement)) {\n\n      return;\n    }\n\n    state.elements.arrow = arrowElement;\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  var arrow$1 = {\n    name: 'arrow',\n    enabled: true,\n    phase: 'main',\n    fn: arrow,\n    effect: effect$1,\n    requires: ['popperOffsets'],\n    requiresIfExists: ['preventOverflow']\n  };\n\n  var unsetSides = {\n    top: 'auto',\n    right: 'auto',\n    bottom: 'auto',\n    left: 'auto'\n  }; // Round the offsets to the nearest suitable subpixel based on the DPR.\n  // Zooming can change the DPR, but it seems to report a value that will\n  // cleanly divide the values into the appropriate subpixels.\n\n  function roundOffsetsByDPR(_ref) {\n    var x = _ref.x,\n        y = _ref.y;\n    var win = window;\n    var dpr = win.devicePixelRatio || 1;\n    return {\n      x: round(round(x * dpr) / dpr) || 0,\n      y: round(round(y * dpr) / dpr) || 0\n    };\n  }\n\n  function mapToStyles(_ref2) {\n    var _Object$assign2;\n\n    var popper = _ref2.popper,\n        popperRect = _ref2.popperRect,\n        placement = _ref2.placement,\n        offsets = _ref2.offsets,\n        position = _ref2.position,\n        gpuAcceleration = _ref2.gpuAcceleration,\n        adaptive = _ref2.adaptive,\n        roundOffsets = _ref2.roundOffsets;\n\n    var _ref3 = roundOffsets === true ? roundOffsetsByDPR(offsets) : typeof roundOffsets === 'function' ? roundOffsets(offsets) : offsets,\n        _ref3$x = _ref3.x,\n        x = _ref3$x === void 0 ? 0 : _ref3$x,\n        _ref3$y = _ref3.y,\n        y = _ref3$y === void 0 ? 0 : _ref3$y;\n\n    var hasX = offsets.hasOwnProperty('x');\n    var hasY = offsets.hasOwnProperty('y');\n    var sideX = left;\n    var sideY = top;\n    var win = window;\n\n    if (adaptive) {\n      var offsetParent = getOffsetParent(popper);\n      var heightProp = 'clientHeight';\n      var widthProp = 'clientWidth';\n\n      if (offsetParent === getWindow(popper)) {\n        offsetParent = getDocumentElement(popper);\n\n        if (getComputedStyle$1(offsetParent).position !== 'static') {\n          heightProp = 'scrollHeight';\n          widthProp = 'scrollWidth';\n        }\n      } // $FlowFixMe[incompatible-cast]: force type refinement, we compare offsetParent with window above, but Flow doesn't detect it\n\n\n      offsetParent = offsetParent;\n\n      if (placement === top) {\n        sideY = bottom; // $FlowFixMe[prop-missing]\n\n        y -= offsetParent[heightProp] - popperRect.height;\n        y *= gpuAcceleration ? 1 : -1;\n      }\n\n      if (placement === left) {\n        sideX = right; // $FlowFixMe[prop-missing]\n\n        x -= offsetParent[widthProp] - popperRect.width;\n        x *= gpuAcceleration ? 1 : -1;\n      }\n    }\n\n    var commonStyles = Object.assign({\n      position: position\n    }, adaptive && unsetSides);\n\n    if (gpuAcceleration) {\n      var _Object$assign;\n\n      return Object.assign({}, commonStyles, (_Object$assign = {}, _Object$assign[sideY] = hasY ? '0' : '', _Object$assign[sideX] = hasX ? '0' : '', _Object$assign.transform = (win.devicePixelRatio || 1) < 2 ? \"translate(\" + x + \"px, \" + y + \"px)\" : \"translate3d(\" + x + \"px, \" + y + \"px, 0)\", _Object$assign));\n    }\n\n    return Object.assign({}, commonStyles, (_Object$assign2 = {}, _Object$assign2[sideY] = hasY ? y + \"px\" : '', _Object$assign2[sideX] = hasX ? x + \"px\" : '', _Object$assign2.transform = '', _Object$assign2));\n  }\n\n  function computeStyles(_ref4) {\n    var state = _ref4.state,\n        options = _ref4.options;\n    var _options$gpuAccelerat = options.gpuAcceleration,\n        gpuAcceleration = _options$gpuAccelerat === void 0 ? true : _options$gpuAccelerat,\n        _options$adaptive = options.adaptive,\n        adaptive = _options$adaptive === void 0 ? true : _options$adaptive,\n        _options$roundOffsets = options.roundOffsets,\n        roundOffsets = _options$roundOffsets === void 0 ? true : _options$roundOffsets;\n\n    var commonStyles = {\n      placement: getBasePlacement(state.placement),\n      popper: state.elements.popper,\n      popperRect: state.rects.popper,\n      gpuAcceleration: gpuAcceleration\n    };\n\n    if (state.modifiersData.popperOffsets != null) {\n      state.styles.popper = Object.assign({}, state.styles.popper, mapToStyles(Object.assign({}, commonStyles, {\n        offsets: state.modifiersData.popperOffsets,\n        position: state.options.strategy,\n        adaptive: adaptive,\n        roundOffsets: roundOffsets\n      })));\n    }\n\n    if (state.modifiersData.arrow != null) {\n      state.styles.arrow = Object.assign({}, state.styles.arrow, mapToStyles(Object.assign({}, commonStyles, {\n        offsets: state.modifiersData.arrow,\n        position: 'absolute',\n        adaptive: false,\n        roundOffsets: roundOffsets\n      })));\n    }\n\n    state.attributes.popper = Object.assign({}, state.attributes.popper, {\n      'data-popper-placement': state.placement\n    });\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  var computeStyles$1 = {\n    name: 'computeStyles',\n    enabled: true,\n    phase: 'beforeWrite',\n    fn: computeStyles,\n    data: {}\n  };\n\n  var passive = {\n    passive: true\n  };\n\n  function effect(_ref) {\n    var state = _ref.state,\n        instance = _ref.instance,\n        options = _ref.options;\n    var _options$scroll = options.scroll,\n        scroll = _options$scroll === void 0 ? true : _options$scroll,\n        _options$resize = options.resize,\n        resize = _options$resize === void 0 ? true : _options$resize;\n    var window = getWindow(state.elements.popper);\n    var scrollParents = [].concat(state.scrollParents.reference, state.scrollParents.popper);\n\n    if (scroll) {\n      scrollParents.forEach(function (scrollParent) {\n        scrollParent.addEventListener('scroll', instance.update, passive);\n      });\n    }\n\n    if (resize) {\n      window.addEventListener('resize', instance.update, passive);\n    }\n\n    return function () {\n      if (scroll) {\n        scrollParents.forEach(function (scrollParent) {\n          scrollParent.removeEventListener('scroll', instance.update, passive);\n        });\n      }\n\n      if (resize) {\n        window.removeEventListener('resize', instance.update, passive);\n      }\n    };\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  var eventListeners = {\n    name: 'eventListeners',\n    enabled: true,\n    phase: 'write',\n    fn: function fn() {},\n    effect: effect,\n    data: {}\n  };\n\n  var hash$1 = {\n    left: 'right',\n    right: 'left',\n    bottom: 'top',\n    top: 'bottom'\n  };\n  function getOppositePlacement(placement) {\n    return placement.replace(/left|right|bottom|top/g, function (matched) {\n      return hash$1[matched];\n    });\n  }\n\n  var hash = {\n    start: 'end',\n    end: 'start'\n  };\n  function getOppositeVariationPlacement(placement) {\n    return placement.replace(/start|end/g, function (matched) {\n      return hash[matched];\n    });\n  }\n\n  function getWindowScroll(node) {\n    var win = getWindow(node);\n    var scrollLeft = win.pageXOffset;\n    var scrollTop = win.pageYOffset;\n    return {\n      scrollLeft: scrollLeft,\n      scrollTop: scrollTop\n    };\n  }\n\n  function getWindowScrollBarX(element) {\n    // If <html> has a CSS width greater than the viewport, then this will be\n    // incorrect for RTL.\n    // Popper 1 is broken in this case and never had a bug report so let's assume\n    // it's not an issue. I don't think anyone ever specifies width on <html>\n    // anyway.\n    // Browsers where the left scrollbar doesn't cause an issue report `0` for\n    // this (e.g. Edge 2019, IE11, Safari)\n    return getBoundingClientRect(getDocumentElement(element)).left + getWindowScroll(element).scrollLeft;\n  }\n\n  function getViewportRect(element) {\n    var win = getWindow(element);\n    var html = getDocumentElement(element);\n    var visualViewport = win.visualViewport;\n    var width = html.clientWidth;\n    var height = html.clientHeight;\n    var x = 0;\n    var y = 0; // NB: This isn't supported on iOS <= 12. If the keyboard is open, the popper\n    // can be obscured underneath it.\n    // Also, `html.clientHeight` adds the bottom bar height in Safari iOS, even\n    // if it isn't open, so if this isn't available, the popper will be detected\n    // to overflow the bottom of the screen too early.\n\n    if (visualViewport) {\n      width = visualViewport.width;\n      height = visualViewport.height; // Uses Layout Viewport (like Chrome; Safari does not currently)\n      // In Chrome, it returns a value very close to 0 (+/-) but contains rounding\n      // errors due to floating point numbers, so we need to check precision.\n      // Safari returns a number <= 0, usually < -1 when pinch-zoomed\n      // Feature detection fails in mobile emulation mode in Chrome.\n      // Math.abs(win.innerWidth / visualViewport.scale - visualViewport.width) <\n      // 0.001\n      // Fallback here: \"Not Safari\" userAgent\n\n      if (!/^((?!chrome|android).)*safari/i.test(navigator.userAgent)) {\n        x = visualViewport.offsetLeft;\n        y = visualViewport.offsetTop;\n      }\n    }\n\n    return {\n      width: width,\n      height: height,\n      x: x + getWindowScrollBarX(element),\n      y: y\n    };\n  }\n\n  // of the `<html>` and `<body>` rect bounds if horizontally scrollable\n\n  function getDocumentRect(element) {\n    var _element$ownerDocumen;\n\n    var html = getDocumentElement(element);\n    var winScroll = getWindowScroll(element);\n    var body = (_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body;\n    var width = max(html.scrollWidth, html.clientWidth, body ? body.scrollWidth : 0, body ? body.clientWidth : 0);\n    var height = max(html.scrollHeight, html.clientHeight, body ? body.scrollHeight : 0, body ? body.clientHeight : 0);\n    var x = -winScroll.scrollLeft + getWindowScrollBarX(element);\n    var y = -winScroll.scrollTop;\n\n    if (getComputedStyle$1(body || html).direction === 'rtl') {\n      x += max(html.clientWidth, body ? body.clientWidth : 0) - width;\n    }\n\n    return {\n      width: width,\n      height: height,\n      x: x,\n      y: y\n    };\n  }\n\n  function isScrollParent(element) {\n    // Firefox wants us to check `-x` and `-y` variations as well\n    var _getComputedStyle = getComputedStyle$1(element),\n        overflow = _getComputedStyle.overflow,\n        overflowX = _getComputedStyle.overflowX,\n        overflowY = _getComputedStyle.overflowY;\n\n    return /auto|scroll|overlay|hidden/.test(overflow + overflowY + overflowX);\n  }\n\n  function getScrollParent(node) {\n    if (['html', 'body', '#document'].indexOf(getNodeName(node)) >= 0) {\n      // $FlowFixMe[incompatible-return]: assume body is always available\n      return node.ownerDocument.body;\n    }\n\n    if (isHTMLElement(node) && isScrollParent(node)) {\n      return node;\n    }\n\n    return getScrollParent(getParentNode(node));\n  }\n\n  /*\n  given a DOM element, return the list of all scroll parents, up the list of ancesors\n  until we get to the top window object. This list is what we attach scroll listeners\n  to, because if any of these parent elements scroll, we'll need to re-calculate the\n  reference element's position.\n  */\n\n  function listScrollParents(element, list) {\n    var _element$ownerDocumen;\n\n    if (list === void 0) {\n      list = [];\n    }\n\n    var scrollParent = getScrollParent(element);\n    var isBody = scrollParent === ((_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body);\n    var win = getWindow(scrollParent);\n    var target = isBody ? [win].concat(win.visualViewport || [], isScrollParent(scrollParent) ? scrollParent : []) : scrollParent;\n    var updatedList = list.concat(target);\n    return isBody ? updatedList : // $FlowFixMe[incompatible-call]: isBody tells us target will be an HTMLElement here\n    updatedList.concat(listScrollParents(getParentNode(target)));\n  }\n\n  function rectToClientRect(rect) {\n    return Object.assign({}, rect, {\n      left: rect.x,\n      top: rect.y,\n      right: rect.x + rect.width,\n      bottom: rect.y + rect.height\n    });\n  }\n\n  function getInnerBoundingClientRect(element) {\n    var rect = getBoundingClientRect(element);\n    rect.top = rect.top + element.clientTop;\n    rect.left = rect.left + element.clientLeft;\n    rect.bottom = rect.top + element.clientHeight;\n    rect.right = rect.left + element.clientWidth;\n    rect.width = element.clientWidth;\n    rect.height = element.clientHeight;\n    rect.x = rect.left;\n    rect.y = rect.top;\n    return rect;\n  }\n\n  function getClientRectFromMixedType(element, clippingParent) {\n    return clippingParent === viewport ? rectToClientRect(getViewportRect(element)) : isHTMLElement(clippingParent) ? getInnerBoundingClientRect(clippingParent) : rectToClientRect(getDocumentRect(getDocumentElement(element)));\n  } // A \"clipping parent\" is an overflowable container with the characteristic of\n  // clipping (or hiding) overflowing elements with a position different from\n  // `initial`\n\n\n  function getClippingParents(element) {\n    var clippingParents = listScrollParents(getParentNode(element));\n    var canEscapeClipping = ['absolute', 'fixed'].indexOf(getComputedStyle$1(element).position) >= 0;\n    var clipperElement = canEscapeClipping && isHTMLElement(element) ? getOffsetParent(element) : element;\n\n    if (!isElement(clipperElement)) {\n      return [];\n    } // $FlowFixMe[incompatible-return]: https://github.com/facebook/flow/issues/1414\n\n\n    return clippingParents.filter(function (clippingParent) {\n      return isElement(clippingParent) && contains(clippingParent, clipperElement) && getNodeName(clippingParent) !== 'body';\n    });\n  } // Gets the maximum area that the element is visible in due to any number of\n  // clipping parents\n\n\n  function getClippingRect(element, boundary, rootBoundary) {\n    var mainClippingParents = boundary === 'clippingParents' ? getClippingParents(element) : [].concat(boundary);\n    var clippingParents = [].concat(mainClippingParents, [rootBoundary]);\n    var firstClippingParent = clippingParents[0];\n    var clippingRect = clippingParents.reduce(function (accRect, clippingParent) {\n      var rect = getClientRectFromMixedType(element, clippingParent);\n      accRect.top = max(rect.top, accRect.top);\n      accRect.right = min(rect.right, accRect.right);\n      accRect.bottom = min(rect.bottom, accRect.bottom);\n      accRect.left = max(rect.left, accRect.left);\n      return accRect;\n    }, getClientRectFromMixedType(element, firstClippingParent));\n    clippingRect.width = clippingRect.right - clippingRect.left;\n    clippingRect.height = clippingRect.bottom - clippingRect.top;\n    clippingRect.x = clippingRect.left;\n    clippingRect.y = clippingRect.top;\n    return clippingRect;\n  }\n\n  function getVariation(placement) {\n    return placement.split('-')[1];\n  }\n\n  function computeOffsets(_ref) {\n    var reference = _ref.reference,\n        element = _ref.element,\n        placement = _ref.placement;\n    var basePlacement = placement ? getBasePlacement(placement) : null;\n    var variation = placement ? getVariation(placement) : null;\n    var commonX = reference.x + reference.width / 2 - element.width / 2;\n    var commonY = reference.y + reference.height / 2 - element.height / 2;\n    var offsets;\n\n    switch (basePlacement) {\n      case top:\n        offsets = {\n          x: commonX,\n          y: reference.y - element.height\n        };\n        break;\n\n      case bottom:\n        offsets = {\n          x: commonX,\n          y: reference.y + reference.height\n        };\n        break;\n\n      case right:\n        offsets = {\n          x: reference.x + reference.width,\n          y: commonY\n        };\n        break;\n\n      case left:\n        offsets = {\n          x: reference.x - element.width,\n          y: commonY\n        };\n        break;\n\n      default:\n        offsets = {\n          x: reference.x,\n          y: reference.y\n        };\n    }\n\n    var mainAxis = basePlacement ? getMainAxisFromPlacement(basePlacement) : null;\n\n    if (mainAxis != null) {\n      var len = mainAxis === 'y' ? 'height' : 'width';\n\n      switch (variation) {\n        case start:\n          offsets[mainAxis] = offsets[mainAxis] - (reference[len] / 2 - element[len] / 2);\n          break;\n\n        case end:\n          offsets[mainAxis] = offsets[mainAxis] + (reference[len] / 2 - element[len] / 2);\n          break;\n      }\n    }\n\n    return offsets;\n  }\n\n  function detectOverflow(state, options) {\n    if (options === void 0) {\n      options = {};\n    }\n\n    var _options = options,\n        _options$placement = _options.placement,\n        placement = _options$placement === void 0 ? state.placement : _options$placement,\n        _options$boundary = _options.boundary,\n        boundary = _options$boundary === void 0 ? clippingParents : _options$boundary,\n        _options$rootBoundary = _options.rootBoundary,\n        rootBoundary = _options$rootBoundary === void 0 ? viewport : _options$rootBoundary,\n        _options$elementConte = _options.elementContext,\n        elementContext = _options$elementConte === void 0 ? popper : _options$elementConte,\n        _options$altBoundary = _options.altBoundary,\n        altBoundary = _options$altBoundary === void 0 ? false : _options$altBoundary,\n        _options$padding = _options.padding,\n        padding = _options$padding === void 0 ? 0 : _options$padding;\n    var paddingObject = mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));\n    var altContext = elementContext === popper ? reference : popper;\n    var referenceElement = state.elements.reference;\n    var popperRect = state.rects.popper;\n    var element = state.elements[altBoundary ? altContext : elementContext];\n    var clippingClientRect = getClippingRect(isElement(element) ? element : element.contextElement || getDocumentElement(state.elements.popper), boundary, rootBoundary);\n    var referenceClientRect = getBoundingClientRect(referenceElement);\n    var popperOffsets = computeOffsets({\n      reference: referenceClientRect,\n      element: popperRect,\n      strategy: 'absolute',\n      placement: placement\n    });\n    var popperClientRect = rectToClientRect(Object.assign({}, popperRect, popperOffsets));\n    var elementClientRect = elementContext === popper ? popperClientRect : referenceClientRect; // positive = overflowing the clipping rect\n    // 0 or negative = within the clipping rect\n\n    var overflowOffsets = {\n      top: clippingClientRect.top - elementClientRect.top + paddingObject.top,\n      bottom: elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom,\n      left: clippingClientRect.left - elementClientRect.left + paddingObject.left,\n      right: elementClientRect.right - clippingClientRect.right + paddingObject.right\n    };\n    var offsetData = state.modifiersData.offset; // Offsets can be applied only to the popper element\n\n    if (elementContext === popper && offsetData) {\n      var offset = offsetData[placement];\n      Object.keys(overflowOffsets).forEach(function (key) {\n        var multiply = [right, bottom].indexOf(key) >= 0 ? 1 : -1;\n        var axis = [top, bottom].indexOf(key) >= 0 ? 'y' : 'x';\n        overflowOffsets[key] += offset[axis] * multiply;\n      });\n    }\n\n    return overflowOffsets;\n  }\n\n  function computeAutoPlacement(state, options) {\n    if (options === void 0) {\n      options = {};\n    }\n\n    var _options = options,\n        placement = _options.placement,\n        boundary = _options.boundary,\n        rootBoundary = _options.rootBoundary,\n        padding = _options.padding,\n        flipVariations = _options.flipVariations,\n        _options$allowedAutoP = _options.allowedAutoPlacements,\n        allowedAutoPlacements = _options$allowedAutoP === void 0 ? placements : _options$allowedAutoP;\n    var variation = getVariation(placement);\n    var placements$1 = variation ? flipVariations ? variationPlacements : variationPlacements.filter(function (placement) {\n      return getVariation(placement) === variation;\n    }) : basePlacements;\n    var allowedPlacements = placements$1.filter(function (placement) {\n      return allowedAutoPlacements.indexOf(placement) >= 0;\n    });\n\n    if (allowedPlacements.length === 0) {\n      allowedPlacements = placements$1;\n    } // $FlowFixMe[incompatible-type]: Flow seems to have problems with two array unions...\n\n\n    var overflows = allowedPlacements.reduce(function (acc, placement) {\n      acc[placement] = detectOverflow(state, {\n        placement: placement,\n        boundary: boundary,\n        rootBoundary: rootBoundary,\n        padding: padding\n      })[getBasePlacement(placement)];\n      return acc;\n    }, {});\n    return Object.keys(overflows).sort(function (a, b) {\n      return overflows[a] - overflows[b];\n    });\n  }\n\n  function getExpandedFallbackPlacements(placement) {\n    if (getBasePlacement(placement) === auto) {\n      return [];\n    }\n\n    var oppositePlacement = getOppositePlacement(placement);\n    return [getOppositeVariationPlacement(placement), oppositePlacement, getOppositeVariationPlacement(oppositePlacement)];\n  }\n\n  function flip(_ref) {\n    var state = _ref.state,\n        options = _ref.options,\n        name = _ref.name;\n\n    if (state.modifiersData[name]._skip) {\n      return;\n    }\n\n    var _options$mainAxis = options.mainAxis,\n        checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\n        _options$altAxis = options.altAxis,\n        checkAltAxis = _options$altAxis === void 0 ? true : _options$altAxis,\n        specifiedFallbackPlacements = options.fallbackPlacements,\n        padding = options.padding,\n        boundary = options.boundary,\n        rootBoundary = options.rootBoundary,\n        altBoundary = options.altBoundary,\n        _options$flipVariatio = options.flipVariations,\n        flipVariations = _options$flipVariatio === void 0 ? true : _options$flipVariatio,\n        allowedAutoPlacements = options.allowedAutoPlacements;\n    var preferredPlacement = state.options.placement;\n    var basePlacement = getBasePlacement(preferredPlacement);\n    var isBasePlacement = basePlacement === preferredPlacement;\n    var fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipVariations ? [getOppositePlacement(preferredPlacement)] : getExpandedFallbackPlacements(preferredPlacement));\n    var placements = [preferredPlacement].concat(fallbackPlacements).reduce(function (acc, placement) {\n      return acc.concat(getBasePlacement(placement) === auto ? computeAutoPlacement(state, {\n        placement: placement,\n        boundary: boundary,\n        rootBoundary: rootBoundary,\n        padding: padding,\n        flipVariations: flipVariations,\n        allowedAutoPlacements: allowedAutoPlacements\n      }) : placement);\n    }, []);\n    var referenceRect = state.rects.reference;\n    var popperRect = state.rects.popper;\n    var checksMap = new Map();\n    var makeFallbackChecks = true;\n    var firstFittingPlacement = placements[0];\n\n    for (var i = 0; i < placements.length; i++) {\n      var placement = placements[i];\n\n      var _basePlacement = getBasePlacement(placement);\n\n      var isStartVariation = getVariation(placement) === start;\n      var isVertical = [top, bottom].indexOf(_basePlacement) >= 0;\n      var len = isVertical ? 'width' : 'height';\n      var overflow = detectOverflow(state, {\n        placement: placement,\n        boundary: boundary,\n        rootBoundary: rootBoundary,\n        altBoundary: altBoundary,\n        padding: padding\n      });\n      var mainVariationSide = isVertical ? isStartVariation ? right : left : isStartVariation ? bottom : top;\n\n      if (referenceRect[len] > popperRect[len]) {\n        mainVariationSide = getOppositePlacement(mainVariationSide);\n      }\n\n      var altVariationSide = getOppositePlacement(mainVariationSide);\n      var checks = [];\n\n      if (checkMainAxis) {\n        checks.push(overflow[_basePlacement] <= 0);\n      }\n\n      if (checkAltAxis) {\n        checks.push(overflow[mainVariationSide] <= 0, overflow[altVariationSide] <= 0);\n      }\n\n      if (checks.every(function (check) {\n        return check;\n      })) {\n        firstFittingPlacement = placement;\n        makeFallbackChecks = false;\n        break;\n      }\n\n      checksMap.set(placement, checks);\n    }\n\n    if (makeFallbackChecks) {\n      // `2` may be desired in some cases – research later\n      var numberOfChecks = flipVariations ? 3 : 1;\n\n      var _loop = function _loop(_i) {\n        var fittingPlacement = placements.find(function (placement) {\n          var checks = checksMap.get(placement);\n\n          if (checks) {\n            return checks.slice(0, _i).every(function (check) {\n              return check;\n            });\n          }\n        });\n\n        if (fittingPlacement) {\n          firstFittingPlacement = fittingPlacement;\n          return \"break\";\n        }\n      };\n\n      for (var _i = numberOfChecks; _i > 0; _i--) {\n        var _ret = _loop(_i);\n\n        if (_ret === \"break\") break;\n      }\n    }\n\n    if (state.placement !== firstFittingPlacement) {\n      state.modifiersData[name]._skip = true;\n      state.placement = firstFittingPlacement;\n      state.reset = true;\n    }\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  var flip$1 = {\n    name: 'flip',\n    enabled: true,\n    phase: 'main',\n    fn: flip,\n    requiresIfExists: ['offset'],\n    data: {\n      _skip: false\n    }\n  };\n\n  function getSideOffsets(overflow, rect, preventedOffsets) {\n    if (preventedOffsets === void 0) {\n      preventedOffsets = {\n        x: 0,\n        y: 0\n      };\n    }\n\n    return {\n      top: overflow.top - rect.height - preventedOffsets.y,\n      right: overflow.right - rect.width + preventedOffsets.x,\n      bottom: overflow.bottom - rect.height + preventedOffsets.y,\n      left: overflow.left - rect.width - preventedOffsets.x\n    };\n  }\n\n  function isAnySideFullyClipped(overflow) {\n    return [top, right, bottom, left].some(function (side) {\n      return overflow[side] >= 0;\n    });\n  }\n\n  function hide(_ref) {\n    var state = _ref.state,\n        name = _ref.name;\n    var referenceRect = state.rects.reference;\n    var popperRect = state.rects.popper;\n    var preventedOffsets = state.modifiersData.preventOverflow;\n    var referenceOverflow = detectOverflow(state, {\n      elementContext: 'reference'\n    });\n    var popperAltOverflow = detectOverflow(state, {\n      altBoundary: true\n    });\n    var referenceClippingOffsets = getSideOffsets(referenceOverflow, referenceRect);\n    var popperEscapeOffsets = getSideOffsets(popperAltOverflow, popperRect, preventedOffsets);\n    var isReferenceHidden = isAnySideFullyClipped(referenceClippingOffsets);\n    var hasPopperEscaped = isAnySideFullyClipped(popperEscapeOffsets);\n    state.modifiersData[name] = {\n      referenceClippingOffsets: referenceClippingOffsets,\n      popperEscapeOffsets: popperEscapeOffsets,\n      isReferenceHidden: isReferenceHidden,\n      hasPopperEscaped: hasPopperEscaped\n    };\n    state.attributes.popper = Object.assign({}, state.attributes.popper, {\n      'data-popper-reference-hidden': isReferenceHidden,\n      'data-popper-escaped': hasPopperEscaped\n    });\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  var hide$1 = {\n    name: 'hide',\n    enabled: true,\n    phase: 'main',\n    requiresIfExists: ['preventOverflow'],\n    fn: hide\n  };\n\n  function distanceAndSkiddingToXY(placement, rects, offset) {\n    var basePlacement = getBasePlacement(placement);\n    var invertDistance = [left, top].indexOf(basePlacement) >= 0 ? -1 : 1;\n\n    var _ref = typeof offset === 'function' ? offset(Object.assign({}, rects, {\n      placement: placement\n    })) : offset,\n        skidding = _ref[0],\n        distance = _ref[1];\n\n    skidding = skidding || 0;\n    distance = (distance || 0) * invertDistance;\n    return [left, right].indexOf(basePlacement) >= 0 ? {\n      x: distance,\n      y: skidding\n    } : {\n      x: skidding,\n      y: distance\n    };\n  }\n\n  function offset(_ref2) {\n    var state = _ref2.state,\n        options = _ref2.options,\n        name = _ref2.name;\n    var _options$offset = options.offset,\n        offset = _options$offset === void 0 ? [0, 0] : _options$offset;\n    var data = placements.reduce(function (acc, placement) {\n      acc[placement] = distanceAndSkiddingToXY(placement, state.rects, offset);\n      return acc;\n    }, {});\n    var _data$state$placement = data[state.placement],\n        x = _data$state$placement.x,\n        y = _data$state$placement.y;\n\n    if (state.modifiersData.popperOffsets != null) {\n      state.modifiersData.popperOffsets.x += x;\n      state.modifiersData.popperOffsets.y += y;\n    }\n\n    state.modifiersData[name] = data;\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  var offset$1 = {\n    name: 'offset',\n    enabled: true,\n    phase: 'main',\n    requires: ['popperOffsets'],\n    fn: offset\n  };\n\n  function popperOffsets(_ref) {\n    var state = _ref.state,\n        name = _ref.name;\n    // Offsets are the actual position the popper needs to have to be\n    // properly positioned near its reference element\n    // This is the most basic placement, and will be adjusted by\n    // the modifiers in the next step\n    state.modifiersData[name] = computeOffsets({\n      reference: state.rects.reference,\n      element: state.rects.popper,\n      strategy: 'absolute',\n      placement: state.placement\n    });\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  var popperOffsets$1 = {\n    name: 'popperOffsets',\n    enabled: true,\n    phase: 'read',\n    fn: popperOffsets,\n    data: {}\n  };\n\n  function getAltAxis(axis) {\n    return axis === 'x' ? 'y' : 'x';\n  }\n\n  function preventOverflow(_ref) {\n    var state = _ref.state,\n        options = _ref.options,\n        name = _ref.name;\n    var _options$mainAxis = options.mainAxis,\n        checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\n        _options$altAxis = options.altAxis,\n        checkAltAxis = _options$altAxis === void 0 ? false : _options$altAxis,\n        boundary = options.boundary,\n        rootBoundary = options.rootBoundary,\n        altBoundary = options.altBoundary,\n        padding = options.padding,\n        _options$tether = options.tether,\n        tether = _options$tether === void 0 ? true : _options$tether,\n        _options$tetherOffset = options.tetherOffset,\n        tetherOffset = _options$tetherOffset === void 0 ? 0 : _options$tetherOffset;\n    var overflow = detectOverflow(state, {\n      boundary: boundary,\n      rootBoundary: rootBoundary,\n      padding: padding,\n      altBoundary: altBoundary\n    });\n    var basePlacement = getBasePlacement(state.placement);\n    var variation = getVariation(state.placement);\n    var isBasePlacement = !variation;\n    var mainAxis = getMainAxisFromPlacement(basePlacement);\n    var altAxis = getAltAxis(mainAxis);\n    var popperOffsets = state.modifiersData.popperOffsets;\n    var referenceRect = state.rects.reference;\n    var popperRect = state.rects.popper;\n    var tetherOffsetValue = typeof tetherOffset === 'function' ? tetherOffset(Object.assign({}, state.rects, {\n      placement: state.placement\n    })) : tetherOffset;\n    var data = {\n      x: 0,\n      y: 0\n    };\n\n    if (!popperOffsets) {\n      return;\n    }\n\n    if (checkMainAxis || checkAltAxis) {\n      var mainSide = mainAxis === 'y' ? top : left;\n      var altSide = mainAxis === 'y' ? bottom : right;\n      var len = mainAxis === 'y' ? 'height' : 'width';\n      var offset = popperOffsets[mainAxis];\n      var min$1 = popperOffsets[mainAxis] + overflow[mainSide];\n      var max$1 = popperOffsets[mainAxis] - overflow[altSide];\n      var additive = tether ? -popperRect[len] / 2 : 0;\n      var minLen = variation === start ? referenceRect[len] : popperRect[len];\n      var maxLen = variation === start ? -popperRect[len] : -referenceRect[len]; // We need to include the arrow in the calculation so the arrow doesn't go\n      // outside the reference bounds\n\n      var arrowElement = state.elements.arrow;\n      var arrowRect = tether && arrowElement ? getLayoutRect(arrowElement) : {\n        width: 0,\n        height: 0\n      };\n      var arrowPaddingObject = state.modifiersData['arrow#persistent'] ? state.modifiersData['arrow#persistent'].padding : getFreshSideObject();\n      var arrowPaddingMin = arrowPaddingObject[mainSide];\n      var arrowPaddingMax = arrowPaddingObject[altSide]; // If the reference length is smaller than the arrow length, we don't want\n      // to include its full size in the calculation. If the reference is small\n      // and near the edge of a boundary, the popper can overflow even if the\n      // reference is not overflowing as well (e.g. virtual elements with no\n      // width or height)\n\n      var arrowLen = within(0, referenceRect[len], arrowRect[len]);\n      var minOffset = isBasePlacement ? referenceRect[len] / 2 - additive - arrowLen - arrowPaddingMin - tetherOffsetValue : minLen - arrowLen - arrowPaddingMin - tetherOffsetValue;\n      var maxOffset = isBasePlacement ? -referenceRect[len] / 2 + additive + arrowLen + arrowPaddingMax + tetherOffsetValue : maxLen + arrowLen + arrowPaddingMax + tetherOffsetValue;\n      var arrowOffsetParent = state.elements.arrow && getOffsetParent(state.elements.arrow);\n      var clientOffset = arrowOffsetParent ? mainAxis === 'y' ? arrowOffsetParent.clientTop || 0 : arrowOffsetParent.clientLeft || 0 : 0;\n      var offsetModifierValue = state.modifiersData.offset ? state.modifiersData.offset[state.placement][mainAxis] : 0;\n      var tetherMin = popperOffsets[mainAxis] + minOffset - offsetModifierValue - clientOffset;\n      var tetherMax = popperOffsets[mainAxis] + maxOffset - offsetModifierValue;\n\n      if (checkMainAxis) {\n        var preventedOffset = within(tether ? min(min$1, tetherMin) : min$1, offset, tether ? max(max$1, tetherMax) : max$1);\n        popperOffsets[mainAxis] = preventedOffset;\n        data[mainAxis] = preventedOffset - offset;\n      }\n\n      if (checkAltAxis) {\n        var _mainSide = mainAxis === 'x' ? top : left;\n\n        var _altSide = mainAxis === 'x' ? bottom : right;\n\n        var _offset = popperOffsets[altAxis];\n\n        var _min = _offset + overflow[_mainSide];\n\n        var _max = _offset - overflow[_altSide];\n\n        var _preventedOffset = within(tether ? min(_min, tetherMin) : _min, _offset, tether ? max(_max, tetherMax) : _max);\n\n        popperOffsets[altAxis] = _preventedOffset;\n        data[altAxis] = _preventedOffset - _offset;\n      }\n    }\n\n    state.modifiersData[name] = data;\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  var preventOverflow$1 = {\n    name: 'preventOverflow',\n    enabled: true,\n    phase: 'main',\n    fn: preventOverflow,\n    requiresIfExists: ['offset']\n  };\n\n  function getHTMLElementScroll(element) {\n    return {\n      scrollLeft: element.scrollLeft,\n      scrollTop: element.scrollTop\n    };\n  }\n\n  function getNodeScroll(node) {\n    if (node === getWindow(node) || !isHTMLElement(node)) {\n      return getWindowScroll(node);\n    } else {\n      return getHTMLElementScroll(node);\n    }\n  }\n\n  // Composite means it takes into account transforms as well as layout.\n\n  function getCompositeRect(elementOrVirtualElement, offsetParent, isFixed) {\n    if (isFixed === void 0) {\n      isFixed = false;\n    }\n\n    var documentElement = getDocumentElement(offsetParent);\n    var rect = getBoundingClientRect(elementOrVirtualElement);\n    var isOffsetParentAnElement = isHTMLElement(offsetParent);\n    var scroll = {\n      scrollLeft: 0,\n      scrollTop: 0\n    };\n    var offsets = {\n      x: 0,\n      y: 0\n    };\n\n    if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {\n      if (getNodeName(offsetParent) !== 'body' || // https://github.com/popperjs/popper-core/issues/1078\n      isScrollParent(documentElement)) {\n        scroll = getNodeScroll(offsetParent);\n      }\n\n      if (isHTMLElement(offsetParent)) {\n        offsets = getBoundingClientRect(offsetParent);\n        offsets.x += offsetParent.clientLeft;\n        offsets.y += offsetParent.clientTop;\n      } else if (documentElement) {\n        offsets.x = getWindowScrollBarX(documentElement);\n      }\n    }\n\n    return {\n      x: rect.left + scroll.scrollLeft - offsets.x,\n      y: rect.top + scroll.scrollTop - offsets.y,\n      width: rect.width,\n      height: rect.height\n    };\n  }\n\n  function order(modifiers) {\n    var map = new Map();\n    var visited = new Set();\n    var result = [];\n    modifiers.forEach(function (modifier) {\n      map.set(modifier.name, modifier);\n    }); // On visiting object, check for its dependencies and visit them recursively\n\n    function sort(modifier) {\n      visited.add(modifier.name);\n      var requires = [].concat(modifier.requires || [], modifier.requiresIfExists || []);\n      requires.forEach(function (dep) {\n        if (!visited.has(dep)) {\n          var depModifier = map.get(dep);\n\n          if (depModifier) {\n            sort(depModifier);\n          }\n        }\n      });\n      result.push(modifier);\n    }\n\n    modifiers.forEach(function (modifier) {\n      if (!visited.has(modifier.name)) {\n        // check for visited object\n        sort(modifier);\n      }\n    });\n    return result;\n  }\n\n  function orderModifiers(modifiers) {\n    // order based on dependencies\n    var orderedModifiers = order(modifiers); // order based on phase\n\n    return modifierPhases.reduce(function (acc, phase) {\n      return acc.concat(orderedModifiers.filter(function (modifier) {\n        return modifier.phase === phase;\n      }));\n    }, []);\n  }\n\n  function debounce(fn) {\n    var pending;\n    return function () {\n      if (!pending) {\n        pending = new Promise(function (resolve) {\n          Promise.resolve().then(function () {\n            pending = undefined;\n            resolve(fn());\n          });\n        });\n      }\n\n      return pending;\n    };\n  }\n\n  function mergeByName(modifiers) {\n    var merged = modifiers.reduce(function (merged, current) {\n      var existing = merged[current.name];\n      merged[current.name] = existing ? Object.assign({}, existing, current, {\n        options: Object.assign({}, existing.options, current.options),\n        data: Object.assign({}, existing.data, current.data)\n      }) : current;\n      return merged;\n    }, {}); // IE11 does not support Object.values\n\n    return Object.keys(merged).map(function (key) {\n      return merged[key];\n    });\n  }\n\n  var DEFAULT_OPTIONS = {\n    placement: 'bottom',\n    modifiers: [],\n    strategy: 'absolute'\n  };\n\n  function areValidElements() {\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    return !args.some(function (element) {\n      return !(element && typeof element.getBoundingClientRect === 'function');\n    });\n  }\n\n  function popperGenerator(generatorOptions) {\n    if (generatorOptions === void 0) {\n      generatorOptions = {};\n    }\n\n    var _generatorOptions = generatorOptions,\n        _generatorOptions$def = _generatorOptions.defaultModifiers,\n        defaultModifiers = _generatorOptions$def === void 0 ? [] : _generatorOptions$def,\n        _generatorOptions$def2 = _generatorOptions.defaultOptions,\n        defaultOptions = _generatorOptions$def2 === void 0 ? DEFAULT_OPTIONS : _generatorOptions$def2;\n    return function createPopper(reference, popper, options) {\n      if (options === void 0) {\n        options = defaultOptions;\n      }\n\n      var state = {\n        placement: 'bottom',\n        orderedModifiers: [],\n        options: Object.assign({}, DEFAULT_OPTIONS, defaultOptions),\n        modifiersData: {},\n        elements: {\n          reference: reference,\n          popper: popper\n        },\n        attributes: {},\n        styles: {}\n      };\n      var effectCleanupFns = [];\n      var isDestroyed = false;\n      var instance = {\n        state: state,\n        setOptions: function setOptions(options) {\n          cleanupModifierEffects();\n          state.options = Object.assign({}, defaultOptions, state.options, options);\n          state.scrollParents = {\n            reference: isElement(reference) ? listScrollParents(reference) : reference.contextElement ? listScrollParents(reference.contextElement) : [],\n            popper: listScrollParents(popper)\n          }; // Orders the modifiers based on their dependencies and `phase`\n          // properties\n\n          var orderedModifiers = orderModifiers(mergeByName([].concat(defaultModifiers, state.options.modifiers))); // Strip out disabled modifiers\n\n          state.orderedModifiers = orderedModifiers.filter(function (m) {\n            return m.enabled;\n          }); // Validate the provided modifiers so that the consumer will get warned\n\n          runModifierEffects();\n          return instance.update();\n        },\n        // Sync update – it will always be executed, even if not necessary. This\n        // is useful for low frequency updates where sync behavior simplifies the\n        // logic.\n        // For high frequency updates (e.g. `resize` and `scroll` events), always\n        // prefer the async Popper#update method\n        forceUpdate: function forceUpdate() {\n          if (isDestroyed) {\n            return;\n          }\n\n          var _state$elements = state.elements,\n              reference = _state$elements.reference,\n              popper = _state$elements.popper; // Don't proceed if `reference` or `popper` are not valid elements\n          // anymore\n\n          if (!areValidElements(reference, popper)) {\n\n            return;\n          } // Store the reference and popper rects to be read by modifiers\n\n\n          state.rects = {\n            reference: getCompositeRect(reference, getOffsetParent(popper), state.options.strategy === 'fixed'),\n            popper: getLayoutRect(popper)\n          }; // Modifiers have the ability to reset the current update cycle. The\n          // most common use case for this is the `flip` modifier changing the\n          // placement, which then needs to re-run all the modifiers, because the\n          // logic was previously ran for the previous placement and is therefore\n          // stale/incorrect\n\n          state.reset = false;\n          state.placement = state.options.placement; // On each update cycle, the `modifiersData` property for each modifier\n          // is filled with the initial data specified by the modifier. This means\n          // it doesn't persist and is fresh on each update.\n          // To ensure persistent data, use `${name}#persistent`\n\n          state.orderedModifiers.forEach(function (modifier) {\n            return state.modifiersData[modifier.name] = Object.assign({}, modifier.data);\n          });\n\n          for (var index = 0; index < state.orderedModifiers.length; index++) {\n\n            if (state.reset === true) {\n              state.reset = false;\n              index = -1;\n              continue;\n            }\n\n            var _state$orderedModifie = state.orderedModifiers[index],\n                fn = _state$orderedModifie.fn,\n                _state$orderedModifie2 = _state$orderedModifie.options,\n                _options = _state$orderedModifie2 === void 0 ? {} : _state$orderedModifie2,\n                name = _state$orderedModifie.name;\n\n            if (typeof fn === 'function') {\n              state = fn({\n                state: state,\n                options: _options,\n                name: name,\n                instance: instance\n              }) || state;\n            }\n          }\n        },\n        // Async and optimistically optimized update – it will not be executed if\n        // not necessary (debounced to run at most once-per-tick)\n        update: debounce(function () {\n          return new Promise(function (resolve) {\n            instance.forceUpdate();\n            resolve(state);\n          });\n        }),\n        destroy: function destroy() {\n          cleanupModifierEffects();\n          isDestroyed = true;\n        }\n      };\n\n      if (!areValidElements(reference, popper)) {\n\n        return instance;\n      }\n\n      instance.setOptions(options).then(function (state) {\n        if (!isDestroyed && options.onFirstUpdate) {\n          options.onFirstUpdate(state);\n        }\n      }); // Modifiers have the ability to execute arbitrary code before the first\n      // update cycle runs. They will be executed in the same order as the update\n      // cycle. This is useful when a modifier adds some persistent data that\n      // other modifiers need to use, but the modifier is run after the dependent\n      // one.\n\n      function runModifierEffects() {\n        state.orderedModifiers.forEach(function (_ref3) {\n          var name = _ref3.name,\n              _ref3$options = _ref3.options,\n              options = _ref3$options === void 0 ? {} : _ref3$options,\n              effect = _ref3.effect;\n\n          if (typeof effect === 'function') {\n            var cleanupFn = effect({\n              state: state,\n              name: name,\n              instance: instance,\n              options: options\n            });\n\n            var noopFn = function noopFn() {};\n\n            effectCleanupFns.push(cleanupFn || noopFn);\n          }\n        });\n      }\n\n      function cleanupModifierEffects() {\n        effectCleanupFns.forEach(function (fn) {\n          return fn();\n        });\n        effectCleanupFns = [];\n      }\n\n      return instance;\n    };\n  }\n  var createPopper$2 = /*#__PURE__*/popperGenerator(); // eslint-disable-next-line import/no-unused-modules\n\n  var defaultModifiers$1 = [eventListeners, popperOffsets$1, computeStyles$1, applyStyles$1];\n  var createPopper$1 = /*#__PURE__*/popperGenerator({\n    defaultModifiers: defaultModifiers$1\n  }); // eslint-disable-next-line import/no-unused-modules\n\n  var defaultModifiers = [eventListeners, popperOffsets$1, computeStyles$1, applyStyles$1, offset$1, flip$1, preventOverflow$1, arrow$1, hide$1];\n  var createPopper = /*#__PURE__*/popperGenerator({\n    defaultModifiers: defaultModifiers\n  }); // eslint-disable-next-line import/no-unused-modules\n\n  var Popper = /*#__PURE__*/Object.freeze({\n    __proto__: null,\n    popperGenerator: popperGenerator,\n    detectOverflow: detectOverflow,\n    createPopperBase: createPopper$2,\n    createPopper: createPopper,\n    createPopperLite: createPopper$1,\n    top: top,\n    bottom: bottom,\n    right: right,\n    left: left,\n    auto: auto,\n    basePlacements: basePlacements,\n    start: start,\n    end: end,\n    clippingParents: clippingParents,\n    viewport: viewport,\n    popper: popper,\n    reference: reference,\n    variationPlacements: variationPlacements,\n    placements: placements,\n    beforeRead: beforeRead,\n    read: read,\n    afterRead: afterRead,\n    beforeMain: beforeMain,\n    main: main,\n    afterMain: afterMain,\n    beforeWrite: beforeWrite,\n    write: write,\n    afterWrite: afterWrite,\n    modifierPhases: modifierPhases,\n    applyStyles: applyStyles$1,\n    arrow: arrow$1,\n    computeStyles: computeStyles$1,\n    eventListeners: eventListeners,\n    flip: flip$1,\n    hide: hide$1,\n    offset: offset$1,\n    popperOffsets: popperOffsets$1,\n    preventOverflow: preventOverflow$1\n  });\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): dropdown.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$8 = 'dropdown';\n  const DATA_KEY$7 = 'bs.dropdown';\n  const EVENT_KEY$7 = `.${DATA_KEY$7}`;\n  const DATA_API_KEY$4 = '.data-api';\n  const ESCAPE_KEY$2 = 'Escape';\n  const SPACE_KEY = 'Space';\n  const TAB_KEY = 'Tab';\n  const ARROW_UP_KEY = 'ArrowUp';\n  const ARROW_DOWN_KEY = 'ArrowDown';\n  const RIGHT_MOUSE_BUTTON = 2; // MouseEvent.button value for the secondary button, usually the right button\n\n  const REGEXP_KEYDOWN = new RegExp(`${ARROW_UP_KEY}|${ARROW_DOWN_KEY}|${ESCAPE_KEY$2}`);\n  const EVENT_HIDE$4 = `hide${EVENT_KEY$7}`;\n  const EVENT_HIDDEN$4 = `hidden${EVENT_KEY$7}`;\n  const EVENT_SHOW$4 = `show${EVENT_KEY$7}`;\n  const EVENT_SHOWN$4 = `shown${EVENT_KEY$7}`;\n  const EVENT_CLICK = `click${EVENT_KEY$7}`;\n  const EVENT_CLICK_DATA_API$3 = `click${EVENT_KEY$7}${DATA_API_KEY$4}`;\n  const EVENT_KEYDOWN_DATA_API = `keydown${EVENT_KEY$7}${DATA_API_KEY$4}`;\n  const EVENT_KEYUP_DATA_API = `keyup${EVENT_KEY$7}${DATA_API_KEY$4}`;\n  const CLASS_NAME_SHOW$7 = 'show';\n  const CLASS_NAME_DROPUP = 'dropup';\n  const CLASS_NAME_DROPEND = 'dropend';\n  const CLASS_NAME_DROPSTART = 'dropstart';\n  const CLASS_NAME_NAVBAR = 'navbar';\n  const SELECTOR_DATA_TOGGLE$3 = '[data-bs-toggle=\"dropdown\"]';\n  const SELECTOR_MENU = '.dropdown-menu';\n  const SELECTOR_NAVBAR_NAV = '.navbar-nav';\n  const SELECTOR_VISIBLE_ITEMS = '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)';\n  const PLACEMENT_TOP = isRTL() ? 'top-end' : 'top-start';\n  const PLACEMENT_TOPEND = isRTL() ? 'top-start' : 'top-end';\n  const PLACEMENT_BOTTOM = isRTL() ? 'bottom-end' : 'bottom-start';\n  const PLACEMENT_BOTTOMEND = isRTL() ? 'bottom-start' : 'bottom-end';\n  const PLACEMENT_RIGHT = isRTL() ? 'left-start' : 'right-start';\n  const PLACEMENT_LEFT = isRTL() ? 'right-start' : 'left-start';\n  const Default$7 = {\n    offset: [0, 2],\n    boundary: 'clippingParents',\n    reference: 'toggle',\n    display: 'dynamic',\n    popperConfig: null,\n    autoClose: true\n  };\n  const DefaultType$7 = {\n    offset: '(array|string|function)',\n    boundary: '(string|element)',\n    reference: '(string|element|object)',\n    display: 'string',\n    popperConfig: '(null|object|function)',\n    autoClose: '(boolean|string)'\n  };\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Dropdown extends BaseComponent {\n    constructor(element, config) {\n      super(element);\n      this._popper = null;\n      this._config = this._getConfig(config);\n      this._menu = this._getMenuElement();\n      this._inNavbar = this._detectNavbar();\n\n      this._addEventListeners();\n    } // Getters\n\n\n    static get Default() {\n      return Default$7;\n    }\n\n    static get DefaultType() {\n      return DefaultType$7;\n    }\n\n    static get NAME() {\n      return NAME$8;\n    } // Public\n\n\n    toggle() {\n      if (isDisabled(this._element)) {\n        return;\n      }\n\n      const isActive = this._element.classList.contains(CLASS_NAME_SHOW$7);\n\n      if (isActive) {\n        this.hide();\n        return;\n      }\n\n      this.show();\n    }\n\n    show() {\n      if (isDisabled(this._element) || this._menu.classList.contains(CLASS_NAME_SHOW$7)) {\n        return;\n      }\n\n      const parent = Dropdown.getParentFromElement(this._element);\n      const relatedTarget = {\n        relatedTarget: this._element\n      };\n      const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$4, relatedTarget);\n\n      if (showEvent.defaultPrevented) {\n        return;\n      } // Totally disable Popper for Dropdowns in Navbar\n\n\n      if (this._inNavbar) {\n        Manipulator.setDataAttribute(this._menu, 'popper', 'none');\n      } else {\n        if (typeof Popper === 'undefined') {\n          throw new TypeError('Bootstrap\\'s dropdowns require Popper (https://popper.js.org)');\n        }\n\n        let referenceElement = this._element;\n\n        if (this._config.reference === 'parent') {\n          referenceElement = parent;\n        } else if (isElement$1(this._config.reference)) {\n          referenceElement = getElement(this._config.reference);\n        } else if (typeof this._config.reference === 'object') {\n          referenceElement = this._config.reference;\n        }\n\n        const popperConfig = this._getPopperConfig();\n\n        const isDisplayStatic = popperConfig.modifiers.find(modifier => modifier.name === 'applyStyles' && modifier.enabled === false);\n        this._popper = createPopper(referenceElement, this._menu, popperConfig);\n\n        if (isDisplayStatic) {\n          Manipulator.setDataAttribute(this._menu, 'popper', 'static');\n        }\n      } // If this is a touch-enabled device we add extra\n      // empty mouseover listeners to the body's immediate children;\n      // only needed because of broken event delegation on iOS\n      // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n\n\n      if ('ontouchstart' in document.documentElement && !parent.closest(SELECTOR_NAVBAR_NAV)) {\n        [].concat(...document.body.children).forEach(elem => EventHandler.on(elem, 'mouseover', noop));\n      }\n\n      this._element.focus();\n\n      this._element.setAttribute('aria-expanded', true);\n\n      this._menu.classList.toggle(CLASS_NAME_SHOW$7);\n\n      this._element.classList.toggle(CLASS_NAME_SHOW$7);\n\n      EventHandler.trigger(this._element, EVENT_SHOWN$4, relatedTarget);\n    }\n\n    hide() {\n      if (isDisabled(this._element) || !this._menu.classList.contains(CLASS_NAME_SHOW$7)) {\n        return;\n      }\n\n      const relatedTarget = {\n        relatedTarget: this._element\n      };\n\n      this._completeHide(relatedTarget);\n    }\n\n    dispose() {\n      if (this._popper) {\n        this._popper.destroy();\n      }\n\n      super.dispose();\n    }\n\n    update() {\n      this._inNavbar = this._detectNavbar();\n\n      if (this._popper) {\n        this._popper.update();\n      }\n    } // Private\n\n\n    _addEventListeners() {\n      EventHandler.on(this._element, EVENT_CLICK, event => {\n        event.preventDefault();\n        this.toggle();\n      });\n    }\n\n    _completeHide(relatedTarget) {\n      const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$4, relatedTarget);\n\n      if (hideEvent.defaultPrevented) {\n        return;\n      } // If this is a touch-enabled device we remove the extra\n      // empty mouseover listeners we added for iOS support\n\n\n      if ('ontouchstart' in document.documentElement) {\n        [].concat(...document.body.children).forEach(elem => EventHandler.off(elem, 'mouseover', noop));\n      }\n\n      if (this._popper) {\n        this._popper.destroy();\n      }\n\n      this._menu.classList.remove(CLASS_NAME_SHOW$7);\n\n      this._element.classList.remove(CLASS_NAME_SHOW$7);\n\n      this._element.setAttribute('aria-expanded', 'false');\n\n      Manipulator.removeDataAttribute(this._menu, 'popper');\n      EventHandler.trigger(this._element, EVENT_HIDDEN$4, relatedTarget);\n    }\n\n    _getConfig(config) {\n      config = { ...this.constructor.Default,\n        ...Manipulator.getDataAttributes(this._element),\n        ...config\n      };\n      typeCheckConfig(NAME$8, config, this.constructor.DefaultType);\n\n      if (typeof config.reference === 'object' && !isElement$1(config.reference) && typeof config.reference.getBoundingClientRect !== 'function') {\n        // Popper virtual elements require a getBoundingClientRect method\n        throw new TypeError(`${NAME$8.toUpperCase()}: Option \"reference\" provided type \"object\" without a required \"getBoundingClientRect\" method.`);\n      }\n\n      return config;\n    }\n\n    _getMenuElement() {\n      return SelectorEngine.next(this._element, SELECTOR_MENU)[0];\n    }\n\n    _getPlacement() {\n      const parentDropdown = this._element.parentNode;\n\n      if (parentDropdown.classList.contains(CLASS_NAME_DROPEND)) {\n        return PLACEMENT_RIGHT;\n      }\n\n      if (parentDropdown.classList.contains(CLASS_NAME_DROPSTART)) {\n        return PLACEMENT_LEFT;\n      } // We need to trim the value because custom properties can also include spaces\n\n\n      const isEnd = getComputedStyle(this._menu).getPropertyValue('--bs-position').trim() === 'end';\n\n      if (parentDropdown.classList.contains(CLASS_NAME_DROPUP)) {\n        return isEnd ? PLACEMENT_TOPEND : PLACEMENT_TOP;\n      }\n\n      return isEnd ? PLACEMENT_BOTTOMEND : PLACEMENT_BOTTOM;\n    }\n\n    _detectNavbar() {\n      return this._element.closest(`.${CLASS_NAME_NAVBAR}`) !== null;\n    }\n\n    _getOffset() {\n      const {\n        offset\n      } = this._config;\n\n      if (typeof offset === 'string') {\n        return offset.split(',').map(val => Number.parseInt(val, 10));\n      }\n\n      if (typeof offset === 'function') {\n        return popperData => offset(popperData, this._element);\n      }\n\n      return offset;\n    }\n\n    _getPopperConfig() {\n      const defaultBsPopperConfig = {\n        placement: this._getPlacement(),\n        modifiers: [{\n          name: 'preventOverflow',\n          options: {\n            boundary: this._config.boundary\n          }\n        }, {\n          name: 'offset',\n          options: {\n            offset: this._getOffset()\n          }\n        }]\n      }; // Disable Popper if we have a static display\n\n      if (this._config.display === 'static') {\n        defaultBsPopperConfig.modifiers = [{\n          name: 'applyStyles',\n          enabled: false\n        }];\n      }\n\n      return { ...defaultBsPopperConfig,\n        ...(typeof this._config.popperConfig === 'function' ? this._config.popperConfig(defaultBsPopperConfig) : this._config.popperConfig)\n      };\n    }\n\n    _selectMenuItem({\n      key,\n      target\n    }) {\n      const items = SelectorEngine.find(SELECTOR_VISIBLE_ITEMS, this._menu).filter(isVisible);\n\n      if (!items.length) {\n        return;\n      } // if target isn't included in items (e.g. when expanding the dropdown)\n      // allow cycling to get the last item in case key equals ARROW_UP_KEY\n\n\n      getNextActiveElement(items, target, key === ARROW_DOWN_KEY, !items.includes(target)).focus();\n    } // Static\n\n\n    static dropdownInterface(element, config) {\n      const data = Dropdown.getOrCreateInstance(element, config);\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config]();\n      }\n    }\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        Dropdown.dropdownInterface(this, config);\n      });\n    }\n\n    static clearMenus(event) {\n      if (event && (event.button === RIGHT_MOUSE_BUTTON || event.type === 'keyup' && event.key !== TAB_KEY)) {\n        return;\n      }\n\n      const toggles = SelectorEngine.find(SELECTOR_DATA_TOGGLE$3);\n\n      for (let i = 0, len = toggles.length; i < len; i++) {\n        const context = Dropdown.getInstance(toggles[i]);\n\n        if (!context || context._config.autoClose === false) {\n          continue;\n        }\n\n        if (!context._element.classList.contains(CLASS_NAME_SHOW$7)) {\n          continue;\n        }\n\n        const relatedTarget = {\n          relatedTarget: context._element\n        };\n\n        if (event) {\n          const composedPath = event.composedPath();\n          const isMenuTarget = composedPath.includes(context._menu);\n\n          if (composedPath.includes(context._element) || context._config.autoClose === 'inside' && !isMenuTarget || context._config.autoClose === 'outside' && isMenuTarget) {\n            continue;\n          } // Tab navigation through the dropdown menu or events from contained inputs shouldn't close the menu\n\n\n          if (context._menu.contains(event.target) && (event.type === 'keyup' && event.key === TAB_KEY || /input|select|option|textarea|form/i.test(event.target.tagName))) {\n            continue;\n          }\n\n          if (event.type === 'click') {\n            relatedTarget.clickEvent = event;\n          }\n        }\n\n        context._completeHide(relatedTarget);\n      }\n    }\n\n    static getParentFromElement(element) {\n      return getElementFromSelector(element) || element.parentNode;\n    }\n\n    static dataApiKeydownHandler(event) {\n      // If not input/textarea:\n      //  - And not a key in REGEXP_KEYDOWN => not a dropdown command\n      // If input/textarea:\n      //  - If space key => not a dropdown command\n      //  - If key is other than escape\n      //    - If key is not up or down => not a dropdown command\n      //    - If trigger inside the menu => not a dropdown command\n      if (/input|textarea/i.test(event.target.tagName) ? event.key === SPACE_KEY || event.key !== ESCAPE_KEY$2 && (event.key !== ARROW_DOWN_KEY && event.key !== ARROW_UP_KEY || event.target.closest(SELECTOR_MENU)) : !REGEXP_KEYDOWN.test(event.key)) {\n        return;\n      }\n\n      const isActive = this.classList.contains(CLASS_NAME_SHOW$7);\n\n      if (!isActive && event.key === ESCAPE_KEY$2) {\n        return;\n      }\n\n      event.preventDefault();\n      event.stopPropagation();\n\n      if (isDisabled(this)) {\n        return;\n      }\n\n      const getToggleButton = () => this.matches(SELECTOR_DATA_TOGGLE$3) ? this : SelectorEngine.prev(this, SELECTOR_DATA_TOGGLE$3)[0];\n\n      if (event.key === ESCAPE_KEY$2) {\n        getToggleButton().focus();\n        Dropdown.clearMenus();\n        return;\n      }\n\n      if (event.key === ARROW_UP_KEY || event.key === ARROW_DOWN_KEY) {\n        if (!isActive) {\n          getToggleButton().click();\n        }\n\n        Dropdown.getInstance(getToggleButton())._selectMenuItem(event);\n\n        return;\n      }\n\n      if (!isActive || event.key === SPACE_KEY) {\n        Dropdown.clearMenus();\n      }\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_DATA_TOGGLE$3, Dropdown.dataApiKeydownHandler);\n  EventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown.dataApiKeydownHandler);\n  EventHandler.on(document, EVENT_CLICK_DATA_API$3, Dropdown.clearMenus);\n  EventHandler.on(document, EVENT_KEYUP_DATA_API, Dropdown.clearMenus);\n  EventHandler.on(document, EVENT_CLICK_DATA_API$3, SELECTOR_DATA_TOGGLE$3, function (event) {\n    event.preventDefault();\n    Dropdown.dropdownInterface(this);\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Dropdown to jQuery only if jQuery is present\n   */\n\n  defineJQueryPlugin(Dropdown);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): util/scrollBar.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  const SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top';\n  const SELECTOR_STICKY_CONTENT = '.sticky-top';\n\n  class ScrollBarHelper {\n    constructor() {\n      this._element = document.body;\n    }\n\n    getWidth() {\n      // https://developer.mozilla.org/en-US/docs/Web/API/Window/innerWidth#usage_notes\n      const documentWidth = document.documentElement.clientWidth;\n      return Math.abs(window.innerWidth - documentWidth);\n    }\n\n    hide() {\n      const width = this.getWidth();\n\n      this._disableOverFlow(); // give padding to element to balance the hidden scrollbar width\n\n\n      this._setElementAttributes(this._element, 'paddingRight', calculatedValue => calculatedValue + width); // trick: We adjust positive paddingRight and negative marginRight to sticky-top elements to keep showing fullwidth\n\n\n      this._setElementAttributes(SELECTOR_FIXED_CONTENT, 'paddingRight', calculatedValue => calculatedValue + width);\n\n      this._setElementAttributes(SELECTOR_STICKY_CONTENT, 'marginRight', calculatedValue => calculatedValue - width);\n    }\n\n    _disableOverFlow() {\n      this._saveInitialAttribute(this._element, 'overflow');\n\n      this._element.style.overflow = 'hidden';\n    }\n\n    _setElementAttributes(selector, styleProp, callback) {\n      const scrollbarWidth = this.getWidth();\n\n      const manipulationCallBack = element => {\n        if (element !== this._element && window.innerWidth > element.clientWidth + scrollbarWidth) {\n          return;\n        }\n\n        this._saveInitialAttribute(element, styleProp);\n\n        const calculatedValue = window.getComputedStyle(element)[styleProp];\n        element.style[styleProp] = `${callback(Number.parseFloat(calculatedValue))}px`;\n      };\n\n      this._applyManipulationCallback(selector, manipulationCallBack);\n    }\n\n    reset() {\n      this._resetElementAttributes(this._element, 'overflow');\n\n      this._resetElementAttributes(this._element, 'paddingRight');\n\n      this._resetElementAttributes(SELECTOR_FIXED_CONTENT, 'paddingRight');\n\n      this._resetElementAttributes(SELECTOR_STICKY_CONTENT, 'marginRight');\n    }\n\n    _saveInitialAttribute(element, styleProp) {\n      const actualValue = element.style[styleProp];\n\n      if (actualValue) {\n        Manipulator.setDataAttribute(element, styleProp, actualValue);\n      }\n    }\n\n    _resetElementAttributes(selector, styleProp) {\n      const manipulationCallBack = element => {\n        const value = Manipulator.getDataAttribute(element, styleProp);\n\n        if (typeof value === 'undefined') {\n          element.style.removeProperty(styleProp);\n        } else {\n          Manipulator.removeDataAttribute(element, styleProp);\n          element.style[styleProp] = value;\n        }\n      };\n\n      this._applyManipulationCallback(selector, manipulationCallBack);\n    }\n\n    _applyManipulationCallback(selector, callBack) {\n      if (isElement$1(selector)) {\n        callBack(selector);\n      } else {\n        SelectorEngine.find(selector, this._element).forEach(callBack);\n      }\n    }\n\n    isOverflowing() {\n      return this.getWidth() > 0;\n    }\n\n  }\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): util/backdrop.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  const Default$6 = {\n    isVisible: true,\n    // if false, we use the backdrop helper without adding any element to the dom\n    isAnimated: false,\n    rootElement: 'body',\n    // give the choice to place backdrop under different elements\n    clickCallback: null\n  };\n  const DefaultType$6 = {\n    isVisible: 'boolean',\n    isAnimated: 'boolean',\n    rootElement: '(element|string)',\n    clickCallback: '(function|null)'\n  };\n  const NAME$7 = 'backdrop';\n  const CLASS_NAME_BACKDROP = 'modal-backdrop';\n  const CLASS_NAME_FADE$5 = 'fade';\n  const CLASS_NAME_SHOW$6 = 'show';\n  const EVENT_MOUSEDOWN = `mousedown.bs.${NAME$7}`;\n\n  class Backdrop {\n    constructor(config) {\n      this._config = this._getConfig(config);\n      this._isAppended = false;\n      this._element = null;\n    }\n\n    show(callback) {\n      if (!this._config.isVisible) {\n        execute(callback);\n        return;\n      }\n\n      this._append();\n\n      if (this._config.isAnimated) {\n        reflow(this._getElement());\n      }\n\n      this._getElement().classList.add(CLASS_NAME_SHOW$6);\n\n      this._emulateAnimation(() => {\n        execute(callback);\n      });\n    }\n\n    hide(callback) {\n      if (!this._config.isVisible) {\n        execute(callback);\n        return;\n      }\n\n      this._getElement().classList.remove(CLASS_NAME_SHOW$6);\n\n      this._emulateAnimation(() => {\n        this.dispose();\n        execute(callback);\n      });\n    } // Private\n\n\n    _getElement() {\n      if (!this._element) {\n        const backdrop = document.createElement('div');\n        backdrop.className = CLASS_NAME_BACKDROP;\n\n        if (this._config.isAnimated) {\n          backdrop.classList.add(CLASS_NAME_FADE$5);\n        }\n\n        this._element = backdrop;\n      }\n\n      return this._element;\n    }\n\n    _getConfig(config) {\n      config = { ...Default$6,\n        ...(typeof config === 'object' ? config : {})\n      }; // use getElement() with the default \"body\" to get a fresh Element on each instantiation\n\n      config.rootElement = getElement(config.rootElement);\n      typeCheckConfig(NAME$7, config, DefaultType$6);\n      return config;\n    }\n\n    _append() {\n      if (this._isAppended) {\n        return;\n      }\n\n      this._config.rootElement.appendChild(this._getElement());\n\n      EventHandler.on(this._getElement(), EVENT_MOUSEDOWN, () => {\n        execute(this._config.clickCallback);\n      });\n      this._isAppended = true;\n    }\n\n    dispose() {\n      if (!this._isAppended) {\n        return;\n      }\n\n      EventHandler.off(this._element, EVENT_MOUSEDOWN);\n\n      this._element.remove();\n\n      this._isAppended = false;\n    }\n\n    _emulateAnimation(callback) {\n      executeAfterTransition(callback, this._getElement(), this._config.isAnimated);\n    }\n\n  }\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): modal.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$6 = 'modal';\n  const DATA_KEY$6 = 'bs.modal';\n  const EVENT_KEY$6 = `.${DATA_KEY$6}`;\n  const DATA_API_KEY$3 = '.data-api';\n  const ESCAPE_KEY$1 = 'Escape';\n  const Default$5 = {\n    backdrop: true,\n    keyboard: true,\n    focus: true\n  };\n  const DefaultType$5 = {\n    backdrop: '(boolean|string)',\n    keyboard: 'boolean',\n    focus: 'boolean'\n  };\n  const EVENT_HIDE$3 = `hide${EVENT_KEY$6}`;\n  const EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY$6}`;\n  const EVENT_HIDDEN$3 = `hidden${EVENT_KEY$6}`;\n  const EVENT_SHOW$3 = `show${EVENT_KEY$6}`;\n  const EVENT_SHOWN$3 = `shown${EVENT_KEY$6}`;\n  const EVENT_FOCUSIN$2 = `focusin${EVENT_KEY$6}`;\n  const EVENT_RESIZE = `resize${EVENT_KEY$6}`;\n  const EVENT_CLICK_DISMISS$2 = `click.dismiss${EVENT_KEY$6}`;\n  const EVENT_KEYDOWN_DISMISS$1 = `keydown.dismiss${EVENT_KEY$6}`;\n  const EVENT_MOUSEUP_DISMISS = `mouseup.dismiss${EVENT_KEY$6}`;\n  const EVENT_MOUSEDOWN_DISMISS = `mousedown.dismiss${EVENT_KEY$6}`;\n  const EVENT_CLICK_DATA_API$2 = `click${EVENT_KEY$6}${DATA_API_KEY$3}`;\n  const CLASS_NAME_OPEN = 'modal-open';\n  const CLASS_NAME_FADE$4 = 'fade';\n  const CLASS_NAME_SHOW$5 = 'show';\n  const CLASS_NAME_STATIC = 'modal-static';\n  const SELECTOR_DIALOG = '.modal-dialog';\n  const SELECTOR_MODAL_BODY = '.modal-body';\n  const SELECTOR_DATA_TOGGLE$2 = '[data-bs-toggle=\"modal\"]';\n  const SELECTOR_DATA_DISMISS$2 = '[data-bs-dismiss=\"modal\"]';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Modal extends BaseComponent {\n    constructor(element, config) {\n      super(element);\n      this._config = this._getConfig(config);\n      this._dialog = SelectorEngine.findOne(SELECTOR_DIALOG, this._element);\n      this._backdrop = this._initializeBackDrop();\n      this._isShown = false;\n      this._ignoreBackdropClick = false;\n      this._isTransitioning = false;\n      this._scrollBar = new ScrollBarHelper();\n    } // Getters\n\n\n    static get Default() {\n      return Default$5;\n    }\n\n    static get NAME() {\n      return NAME$6;\n    } // Public\n\n\n    toggle(relatedTarget) {\n      return this._isShown ? this.hide() : this.show(relatedTarget);\n    }\n\n    show(relatedTarget) {\n      if (this._isShown || this._isTransitioning) {\n        return;\n      }\n\n      const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$3, {\n        relatedTarget\n      });\n\n      if (showEvent.defaultPrevented) {\n        return;\n      }\n\n      this._isShown = true;\n\n      if (this._isAnimated()) {\n        this._isTransitioning = true;\n      }\n\n      this._scrollBar.hide();\n\n      document.body.classList.add(CLASS_NAME_OPEN);\n\n      this._adjustDialog();\n\n      this._setEscapeEvent();\n\n      this._setResizeEvent();\n\n      EventHandler.on(this._element, EVENT_CLICK_DISMISS$2, SELECTOR_DATA_DISMISS$2, event => this.hide(event));\n      EventHandler.on(this._dialog, EVENT_MOUSEDOWN_DISMISS, () => {\n        EventHandler.one(this._element, EVENT_MOUSEUP_DISMISS, event => {\n          if (event.target === this._element) {\n            this._ignoreBackdropClick = true;\n          }\n        });\n      });\n\n      this._showBackdrop(() => this._showElement(relatedTarget));\n    }\n\n    hide(event) {\n      if (event && ['A', 'AREA'].includes(event.target.tagName)) {\n        event.preventDefault();\n      }\n\n      if (!this._isShown || this._isTransitioning) {\n        return;\n      }\n\n      const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$3);\n\n      if (hideEvent.defaultPrevented) {\n        return;\n      }\n\n      this._isShown = false;\n\n      const isAnimated = this._isAnimated();\n\n      if (isAnimated) {\n        this._isTransitioning = true;\n      }\n\n      this._setEscapeEvent();\n\n      this._setResizeEvent();\n\n      EventHandler.off(document, EVENT_FOCUSIN$2);\n\n      this._element.classList.remove(CLASS_NAME_SHOW$5);\n\n      EventHandler.off(this._element, EVENT_CLICK_DISMISS$2);\n      EventHandler.off(this._dialog, EVENT_MOUSEDOWN_DISMISS);\n\n      this._queueCallback(() => this._hideModal(), this._element, isAnimated);\n    }\n\n    dispose() {\n      [window, this._dialog].forEach(htmlElement => EventHandler.off(htmlElement, EVENT_KEY$6));\n\n      this._backdrop.dispose();\n\n      super.dispose();\n      /**\n       * `document` has 2 events `EVENT_FOCUSIN` and `EVENT_CLICK_DATA_API`\n       * Do not move `document` in `htmlElements` array\n       * It will remove `EVENT_CLICK_DATA_API` event that should remain\n       */\n\n      EventHandler.off(document, EVENT_FOCUSIN$2);\n    }\n\n    handleUpdate() {\n      this._adjustDialog();\n    } // Private\n\n\n    _initializeBackDrop() {\n      return new Backdrop({\n        isVisible: Boolean(this._config.backdrop),\n        // 'static' option will be translated to true, and booleans will keep their value\n        isAnimated: this._isAnimated()\n      });\n    }\n\n    _getConfig(config) {\n      config = { ...Default$5,\n        ...Manipulator.getDataAttributes(this._element),\n        ...(typeof config === 'object' ? config : {})\n      };\n      typeCheckConfig(NAME$6, config, DefaultType$5);\n      return config;\n    }\n\n    _showElement(relatedTarget) {\n      const isAnimated = this._isAnimated();\n\n      const modalBody = SelectorEngine.findOne(SELECTOR_MODAL_BODY, this._dialog);\n\n      if (!this._element.parentNode || this._element.parentNode.nodeType !== Node.ELEMENT_NODE) {\n        // Don't move modal's DOM position\n        document.body.appendChild(this._element);\n      }\n\n      this._element.style.display = 'block';\n\n      this._element.removeAttribute('aria-hidden');\n\n      this._element.setAttribute('aria-modal', true);\n\n      this._element.setAttribute('role', 'dialog');\n\n      this._element.scrollTop = 0;\n\n      if (modalBody) {\n        modalBody.scrollTop = 0;\n      }\n\n      if (isAnimated) {\n        reflow(this._element);\n      }\n\n      this._element.classList.add(CLASS_NAME_SHOW$5);\n\n      if (this._config.focus) {\n        this._enforceFocus();\n      }\n\n      const transitionComplete = () => {\n        if (this._config.focus) {\n          this._element.focus();\n        }\n\n        this._isTransitioning = false;\n        EventHandler.trigger(this._element, EVENT_SHOWN$3, {\n          relatedTarget\n        });\n      };\n\n      this._queueCallback(transitionComplete, this._dialog, isAnimated);\n    }\n\n    _enforceFocus() {\n      EventHandler.off(document, EVENT_FOCUSIN$2); // guard against infinite focus loop\n\n      EventHandler.on(document, EVENT_FOCUSIN$2, event => {\n        if (document !== event.target && this._element !== event.target && !this._element.contains(event.target)) {\n          this._element.focus();\n        }\n      });\n    }\n\n    _setEscapeEvent() {\n      if (this._isShown) {\n        EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS$1, event => {\n          if (this._config.keyboard && event.key === ESCAPE_KEY$1) {\n            event.preventDefault();\n            this.hide();\n          } else if (!this._config.keyboard && event.key === ESCAPE_KEY$1) {\n            this._triggerBackdropTransition();\n          }\n        });\n      } else {\n        EventHandler.off(this._element, EVENT_KEYDOWN_DISMISS$1);\n      }\n    }\n\n    _setResizeEvent() {\n      if (this._isShown) {\n        EventHandler.on(window, EVENT_RESIZE, () => this._adjustDialog());\n      } else {\n        EventHandler.off(window, EVENT_RESIZE);\n      }\n    }\n\n    _hideModal() {\n      this._element.style.display = 'none';\n\n      this._element.setAttribute('aria-hidden', true);\n\n      this._element.removeAttribute('aria-modal');\n\n      this._element.removeAttribute('role');\n\n      this._isTransitioning = false;\n\n      this._backdrop.hide(() => {\n        document.body.classList.remove(CLASS_NAME_OPEN);\n\n        this._resetAdjustments();\n\n        this._scrollBar.reset();\n\n        EventHandler.trigger(this._element, EVENT_HIDDEN$3);\n      });\n    }\n\n    _showBackdrop(callback) {\n      EventHandler.on(this._element, EVENT_CLICK_DISMISS$2, event => {\n        if (this._ignoreBackdropClick) {\n          this._ignoreBackdropClick = false;\n          return;\n        }\n\n        if (event.target !== event.currentTarget) {\n          return;\n        }\n\n        if (this._config.backdrop === true) {\n          this.hide();\n        } else if (this._config.backdrop === 'static') {\n          this._triggerBackdropTransition();\n        }\n      });\n\n      this._backdrop.show(callback);\n    }\n\n    _isAnimated() {\n      return this._element.classList.contains(CLASS_NAME_FADE$4);\n    }\n\n    _triggerBackdropTransition() {\n      const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED);\n\n      if (hideEvent.defaultPrevented) {\n        return;\n      }\n\n      const {\n        classList,\n        scrollHeight,\n        style\n      } = this._element;\n      const isModalOverflowing = scrollHeight > document.documentElement.clientHeight; // return if the following background transition hasn't yet completed\n\n      if (!isModalOverflowing && style.overflowY === 'hidden' || classList.contains(CLASS_NAME_STATIC)) {\n        return;\n      }\n\n      if (!isModalOverflowing) {\n        style.overflowY = 'hidden';\n      }\n\n      classList.add(CLASS_NAME_STATIC);\n\n      this._queueCallback(() => {\n        classList.remove(CLASS_NAME_STATIC);\n\n        if (!isModalOverflowing) {\n          this._queueCallback(() => {\n            style.overflowY = '';\n          }, this._dialog);\n        }\n      }, this._dialog);\n\n      this._element.focus();\n    } // ----------------------------------------------------------------------\n    // the following methods are used to handle overflowing modals\n    // ----------------------------------------------------------------------\n\n\n    _adjustDialog() {\n      const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;\n\n      const scrollbarWidth = this._scrollBar.getWidth();\n\n      const isBodyOverflowing = scrollbarWidth > 0;\n\n      if (!isBodyOverflowing && isModalOverflowing && !isRTL() || isBodyOverflowing && !isModalOverflowing && isRTL()) {\n        this._element.style.paddingLeft = `${scrollbarWidth}px`;\n      }\n\n      if (isBodyOverflowing && !isModalOverflowing && !isRTL() || !isBodyOverflowing && isModalOverflowing && isRTL()) {\n        this._element.style.paddingRight = `${scrollbarWidth}px`;\n      }\n    }\n\n    _resetAdjustments() {\n      this._element.style.paddingLeft = '';\n      this._element.style.paddingRight = '';\n    } // Static\n\n\n    static jQueryInterface(config, relatedTarget) {\n      return this.each(function () {\n        const data = Modal.getOrCreateInstance(this, config);\n\n        if (typeof config !== 'string') {\n          return;\n        }\n\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config](relatedTarget);\n      });\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(document, EVENT_CLICK_DATA_API$2, SELECTOR_DATA_TOGGLE$2, function (event) {\n    const target = getElementFromSelector(this);\n\n    if (['A', 'AREA'].includes(this.tagName)) {\n      event.preventDefault();\n    }\n\n    EventHandler.one(target, EVENT_SHOW$3, showEvent => {\n      if (showEvent.defaultPrevented) {\n        // only register focus restorer if modal will actually get shown\n        return;\n      }\n\n      EventHandler.one(target, EVENT_HIDDEN$3, () => {\n        if (isVisible(this)) {\n          this.focus();\n        }\n      });\n    });\n    const data = Modal.getOrCreateInstance(target);\n    data.toggle(this);\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Modal to jQuery only if jQuery is present\n   */\n\n  defineJQueryPlugin(Modal);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): offcanvas.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$5 = 'offcanvas';\n  const DATA_KEY$5 = 'bs.offcanvas';\n  const EVENT_KEY$5 = `.${DATA_KEY$5}`;\n  const DATA_API_KEY$2 = '.data-api';\n  const EVENT_LOAD_DATA_API$1 = `load${EVENT_KEY$5}${DATA_API_KEY$2}`;\n  const ESCAPE_KEY = 'Escape';\n  const Default$4 = {\n    backdrop: true,\n    keyboard: true,\n    scroll: false\n  };\n  const DefaultType$4 = {\n    backdrop: 'boolean',\n    keyboard: 'boolean',\n    scroll: 'boolean'\n  };\n  const CLASS_NAME_SHOW$4 = 'show';\n  const OPEN_SELECTOR = '.offcanvas.show';\n  const EVENT_SHOW$2 = `show${EVENT_KEY$5}`;\n  const EVENT_SHOWN$2 = `shown${EVENT_KEY$5}`;\n  const EVENT_HIDE$2 = `hide${EVENT_KEY$5}`;\n  const EVENT_HIDDEN$2 = `hidden${EVENT_KEY$5}`;\n  const EVENT_FOCUSIN$1 = `focusin${EVENT_KEY$5}`;\n  const EVENT_CLICK_DATA_API$1 = `click${EVENT_KEY$5}${DATA_API_KEY$2}`;\n  const EVENT_CLICK_DISMISS$1 = `click.dismiss${EVENT_KEY$5}`;\n  const EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY$5}`;\n  const SELECTOR_DATA_DISMISS$1 = '[data-bs-dismiss=\"offcanvas\"]';\n  const SELECTOR_DATA_TOGGLE$1 = '[data-bs-toggle=\"offcanvas\"]';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Offcanvas extends BaseComponent {\n    constructor(element, config) {\n      super(element);\n      this._config = this._getConfig(config);\n      this._isShown = false;\n      this._backdrop = this._initializeBackDrop();\n\n      this._addEventListeners();\n    } // Getters\n\n\n    static get NAME() {\n      return NAME$5;\n    }\n\n    static get Default() {\n      return Default$4;\n    } // Public\n\n\n    toggle(relatedTarget) {\n      return this._isShown ? this.hide() : this.show(relatedTarget);\n    }\n\n    show(relatedTarget) {\n      if (this._isShown) {\n        return;\n      }\n\n      const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$2, {\n        relatedTarget\n      });\n\n      if (showEvent.defaultPrevented) {\n        return;\n      }\n\n      this._isShown = true;\n      this._element.style.visibility = 'visible';\n\n      this._backdrop.show();\n\n      if (!this._config.scroll) {\n        new ScrollBarHelper().hide();\n\n        this._enforceFocusOnElement(this._element);\n      }\n\n      this._element.removeAttribute('aria-hidden');\n\n      this._element.setAttribute('aria-modal', true);\n\n      this._element.setAttribute('role', 'dialog');\n\n      this._element.classList.add(CLASS_NAME_SHOW$4);\n\n      const completeCallBack = () => {\n        EventHandler.trigger(this._element, EVENT_SHOWN$2, {\n          relatedTarget\n        });\n      };\n\n      this._queueCallback(completeCallBack, this._element, true);\n    }\n\n    hide() {\n      if (!this._isShown) {\n        return;\n      }\n\n      const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$2);\n\n      if (hideEvent.defaultPrevented) {\n        return;\n      }\n\n      EventHandler.off(document, EVENT_FOCUSIN$1);\n\n      this._element.blur();\n\n      this._isShown = false;\n\n      this._element.classList.remove(CLASS_NAME_SHOW$4);\n\n      this._backdrop.hide();\n\n      const completeCallback = () => {\n        this._element.setAttribute('aria-hidden', true);\n\n        this._element.removeAttribute('aria-modal');\n\n        this._element.removeAttribute('role');\n\n        this._element.style.visibility = 'hidden';\n\n        if (!this._config.scroll) {\n          new ScrollBarHelper().reset();\n        }\n\n        EventHandler.trigger(this._element, EVENT_HIDDEN$2);\n      };\n\n      this._queueCallback(completeCallback, this._element, true);\n    }\n\n    dispose() {\n      this._backdrop.dispose();\n\n      super.dispose();\n      EventHandler.off(document, EVENT_FOCUSIN$1);\n    } // Private\n\n\n    _getConfig(config) {\n      config = { ...Default$4,\n        ...Manipulator.getDataAttributes(this._element),\n        ...(typeof config === 'object' ? config : {})\n      };\n      typeCheckConfig(NAME$5, config, DefaultType$4);\n      return config;\n    }\n\n    _initializeBackDrop() {\n      return new Backdrop({\n        isVisible: this._config.backdrop,\n        isAnimated: true,\n        rootElement: this._element.parentNode,\n        clickCallback: () => this.hide()\n      });\n    }\n\n    _enforceFocusOnElement(element) {\n      EventHandler.off(document, EVENT_FOCUSIN$1); // guard against infinite focus loop\n\n      EventHandler.on(document, EVENT_FOCUSIN$1, event => {\n        if (document !== event.target && element !== event.target && !element.contains(event.target)) {\n          element.focus();\n        }\n      });\n      element.focus();\n    }\n\n    _addEventListeners() {\n      EventHandler.on(this._element, EVENT_CLICK_DISMISS$1, SELECTOR_DATA_DISMISS$1, () => this.hide());\n      EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS, event => {\n        if (this._config.keyboard && event.key === ESCAPE_KEY) {\n          this.hide();\n        }\n      });\n    } // Static\n\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = Offcanvas.getOrCreateInstance(this, config);\n\n        if (typeof config !== 'string') {\n          return;\n        }\n\n        if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config](this);\n      });\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(document, EVENT_CLICK_DATA_API$1, SELECTOR_DATA_TOGGLE$1, function (event) {\n    const target = getElementFromSelector(this);\n\n    if (['A', 'AREA'].includes(this.tagName)) {\n      event.preventDefault();\n    }\n\n    if (isDisabled(this)) {\n      return;\n    }\n\n    EventHandler.one(target, EVENT_HIDDEN$2, () => {\n      // focus on trigger when it is closed\n      if (isVisible(this)) {\n        this.focus();\n      }\n    }); // avoid conflict when clicking a toggler of an offcanvas, while another is open\n\n    const allReadyOpen = SelectorEngine.findOne(OPEN_SELECTOR);\n\n    if (allReadyOpen && allReadyOpen !== target) {\n      Offcanvas.getInstance(allReadyOpen).hide();\n    }\n\n    const data = Offcanvas.getOrCreateInstance(target);\n    data.toggle(this);\n  });\n  EventHandler.on(window, EVENT_LOAD_DATA_API$1, () => SelectorEngine.find(OPEN_SELECTOR).forEach(el => Offcanvas.getOrCreateInstance(el).show()));\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   */\n\n  defineJQueryPlugin(Offcanvas);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): util/sanitizer.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  const uriAttrs = new Set(['background', 'cite', 'href', 'itemtype', 'longdesc', 'poster', 'src', 'xlink:href']);\n  const ARIA_ATTRIBUTE_PATTERN = /^aria-[\\w-]*$/i;\n  /**\n   * A pattern that recognizes a commonly useful subset of URLs that are safe.\n   *\n   * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts\n   */\n\n  const SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file):|[^#&/:?]*(?:[#/?]|$))/i;\n  /**\n   * A pattern that matches safe data URLs. Only matches image, video and audio types.\n   *\n   * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts\n   */\n\n  const DATA_URL_PATTERN = /^data:(?:image\\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\\/(?:mpeg|mp4|ogg|webm)|audio\\/(?:mp3|oga|ogg|opus));base64,[\\d+/a-z]+=*$/i;\n\n  const allowedAttribute = (attr, allowedAttributeList) => {\n    const attrName = attr.nodeName.toLowerCase();\n\n    if (allowedAttributeList.includes(attrName)) {\n      if (uriAttrs.has(attrName)) {\n        return Boolean(SAFE_URL_PATTERN.test(attr.nodeValue) || DATA_URL_PATTERN.test(attr.nodeValue));\n      }\n\n      return true;\n    }\n\n    const regExp = allowedAttributeList.filter(attrRegex => attrRegex instanceof RegExp); // Check if a regular expression validates the attribute.\n\n    for (let i = 0, len = regExp.length; i < len; i++) {\n      if (regExp[i].test(attrName)) {\n        return true;\n      }\n    }\n\n    return false;\n  };\n\n  const DefaultAllowlist = {\n    // Global attributes allowed on any supplied element below.\n    '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],\n    a: ['target', 'href', 'title', 'rel'],\n    area: [],\n    b: [],\n    br: [],\n    col: [],\n    code: [],\n    div: [],\n    em: [],\n    hr: [],\n    h1: [],\n    h2: [],\n    h3: [],\n    h4: [],\n    h5: [],\n    h6: [],\n    i: [],\n    img: ['src', 'srcset', 'alt', 'title', 'width', 'height'],\n    li: [],\n    ol: [],\n    p: [],\n    pre: [],\n    s: [],\n    small: [],\n    span: [],\n    sub: [],\n    sup: [],\n    strong: [],\n    u: [],\n    ul: []\n  };\n  function sanitizeHtml(unsafeHtml, allowList, sanitizeFn) {\n    if (!unsafeHtml.length) {\n      return unsafeHtml;\n    }\n\n    if (sanitizeFn && typeof sanitizeFn === 'function') {\n      return sanitizeFn(unsafeHtml);\n    }\n\n    const domParser = new window.DOMParser();\n    const createdDocument = domParser.parseFromString(unsafeHtml, 'text/html');\n    const allowlistKeys = Object.keys(allowList);\n    const elements = [].concat(...createdDocument.body.querySelectorAll('*'));\n\n    for (let i = 0, len = elements.length; i < len; i++) {\n      const el = elements[i];\n      const elName = el.nodeName.toLowerCase();\n\n      if (!allowlistKeys.includes(elName)) {\n        el.remove();\n        continue;\n      }\n\n      const attributeList = [].concat(...el.attributes);\n      const allowedAttributes = [].concat(allowList['*'] || [], allowList[elName] || []);\n      attributeList.forEach(attr => {\n        if (!allowedAttribute(attr, allowedAttributes)) {\n          el.removeAttribute(attr.nodeName);\n        }\n      });\n    }\n\n    return createdDocument.body.innerHTML;\n  }\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): tooltip.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$4 = 'tooltip';\n  const DATA_KEY$4 = 'bs.tooltip';\n  const EVENT_KEY$4 = `.${DATA_KEY$4}`;\n  const CLASS_PREFIX$1 = 'bs-tooltip';\n  const BSCLS_PREFIX_REGEX$1 = new RegExp(`(^|\\\\s)${CLASS_PREFIX$1}\\\\S+`, 'g');\n  const DISALLOWED_ATTRIBUTES = new Set(['sanitize', 'allowList', 'sanitizeFn']);\n  const DefaultType$3 = {\n    animation: 'boolean',\n    template: 'string',\n    title: '(string|element|function)',\n    trigger: 'string',\n    delay: '(number|object)',\n    html: 'boolean',\n    selector: '(string|boolean)',\n    placement: '(string|function)',\n    offset: '(array|string|function)',\n    container: '(string|element|boolean)',\n    fallbackPlacements: 'array',\n    boundary: '(string|element)',\n    customClass: '(string|function)',\n    sanitize: 'boolean',\n    sanitizeFn: '(null|function)',\n    allowList: 'object',\n    popperConfig: '(null|object|function)'\n  };\n  const AttachmentMap = {\n    AUTO: 'auto',\n    TOP: 'top',\n    RIGHT: isRTL() ? 'left' : 'right',\n    BOTTOM: 'bottom',\n    LEFT: isRTL() ? 'right' : 'left'\n  };\n  const Default$3 = {\n    animation: true,\n    template: '<div class=\"tooltip\" role=\"tooltip\">' + '<div class=\"tooltip-arrow\"></div>' + '<div class=\"tooltip-inner\"></div>' + '</div>',\n    trigger: 'hover focus',\n    title: '',\n    delay: 0,\n    html: false,\n    selector: false,\n    placement: 'top',\n    offset: [0, 0],\n    container: false,\n    fallbackPlacements: ['top', 'right', 'bottom', 'left'],\n    boundary: 'clippingParents',\n    customClass: '',\n    sanitize: true,\n    sanitizeFn: null,\n    allowList: DefaultAllowlist,\n    popperConfig: null\n  };\n  const Event$2 = {\n    HIDE: `hide${EVENT_KEY$4}`,\n    HIDDEN: `hidden${EVENT_KEY$4}`,\n    SHOW: `show${EVENT_KEY$4}`,\n    SHOWN: `shown${EVENT_KEY$4}`,\n    INSERTED: `inserted${EVENT_KEY$4}`,\n    CLICK: `click${EVENT_KEY$4}`,\n    FOCUSIN: `focusin${EVENT_KEY$4}`,\n    FOCUSOUT: `focusout${EVENT_KEY$4}`,\n    MOUSEENTER: `mouseenter${EVENT_KEY$4}`,\n    MOUSELEAVE: `mouseleave${EVENT_KEY$4}`\n  };\n  const CLASS_NAME_FADE$3 = 'fade';\n  const CLASS_NAME_MODAL = 'modal';\n  const CLASS_NAME_SHOW$3 = 'show';\n  const HOVER_STATE_SHOW = 'show';\n  const HOVER_STATE_OUT = 'out';\n  const SELECTOR_TOOLTIP_INNER = '.tooltip-inner';\n  const TRIGGER_HOVER = 'hover';\n  const TRIGGER_FOCUS = 'focus';\n  const TRIGGER_CLICK = 'click';\n  const TRIGGER_MANUAL = 'manual';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Tooltip extends BaseComponent {\n    constructor(element, config) {\n      if (typeof Popper === 'undefined') {\n        throw new TypeError('Bootstrap\\'s tooltips require Popper (https://popper.js.org)');\n      }\n\n      super(element); // private\n\n      this._isEnabled = true;\n      this._timeout = 0;\n      this._hoverState = '';\n      this._activeTrigger = {};\n      this._popper = null; // Protected\n\n      this._config = this._getConfig(config);\n      this.tip = null;\n\n      this._setListeners();\n    } // Getters\n\n\n    static get Default() {\n      return Default$3;\n    }\n\n    static get NAME() {\n      return NAME$4;\n    }\n\n    static get Event() {\n      return Event$2;\n    }\n\n    static get DefaultType() {\n      return DefaultType$3;\n    } // Public\n\n\n    enable() {\n      this._isEnabled = true;\n    }\n\n    disable() {\n      this._isEnabled = false;\n    }\n\n    toggleEnabled() {\n      this._isEnabled = !this._isEnabled;\n    }\n\n    toggle(event) {\n      if (!this._isEnabled) {\n        return;\n      }\n\n      if (event) {\n        const context = this._initializeOnDelegatedTarget(event);\n\n        context._activeTrigger.click = !context._activeTrigger.click;\n\n        if (context._isWithActiveTrigger()) {\n          context._enter(null, context);\n        } else {\n          context._leave(null, context);\n        }\n      } else {\n        if (this.getTipElement().classList.contains(CLASS_NAME_SHOW$3)) {\n          this._leave(null, this);\n\n          return;\n        }\n\n        this._enter(null, this);\n      }\n    }\n\n    dispose() {\n      clearTimeout(this._timeout);\n      EventHandler.off(this._element.closest(`.${CLASS_NAME_MODAL}`), 'hide.bs.modal', this._hideModalHandler);\n\n      if (this.tip) {\n        this.tip.remove();\n      }\n\n      if (this._popper) {\n        this._popper.destroy();\n      }\n\n      super.dispose();\n    }\n\n    show() {\n      if (this._element.style.display === 'none') {\n        throw new Error('Please use show on visible elements');\n      }\n\n      if (!(this.isWithContent() && this._isEnabled)) {\n        return;\n      }\n\n      const showEvent = EventHandler.trigger(this._element, this.constructor.Event.SHOW);\n      const shadowRoot = findShadowRoot(this._element);\n      const isInTheDom = shadowRoot === null ? this._element.ownerDocument.documentElement.contains(this._element) : shadowRoot.contains(this._element);\n\n      if (showEvent.defaultPrevented || !isInTheDom) {\n        return;\n      }\n\n      const tip = this.getTipElement();\n      const tipId = getUID(this.constructor.NAME);\n      tip.setAttribute('id', tipId);\n\n      this._element.setAttribute('aria-describedby', tipId);\n\n      this.setContent();\n\n      if (this._config.animation) {\n        tip.classList.add(CLASS_NAME_FADE$3);\n      }\n\n      const placement = typeof this._config.placement === 'function' ? this._config.placement.call(this, tip, this._element) : this._config.placement;\n\n      const attachment = this._getAttachment(placement);\n\n      this._addAttachmentClass(attachment);\n\n      const {\n        container\n      } = this._config;\n      Data.set(tip, this.constructor.DATA_KEY, this);\n\n      if (!this._element.ownerDocument.documentElement.contains(this.tip)) {\n        container.appendChild(tip);\n        EventHandler.trigger(this._element, this.constructor.Event.INSERTED);\n      }\n\n      if (this._popper) {\n        this._popper.update();\n      } else {\n        this._popper = createPopper(this._element, tip, this._getPopperConfig(attachment));\n      }\n\n      tip.classList.add(CLASS_NAME_SHOW$3);\n      const customClass = typeof this._config.customClass === 'function' ? this._config.customClass() : this._config.customClass;\n\n      if (customClass) {\n        tip.classList.add(...customClass.split(' '));\n      } // If this is a touch-enabled device we add extra\n      // empty mouseover listeners to the body's immediate children;\n      // only needed because of broken event delegation on iOS\n      // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n\n\n      if ('ontouchstart' in document.documentElement) {\n        [].concat(...document.body.children).forEach(element => {\n          EventHandler.on(element, 'mouseover', noop);\n        });\n      }\n\n      const complete = () => {\n        const prevHoverState = this._hoverState;\n        this._hoverState = null;\n        EventHandler.trigger(this._element, this.constructor.Event.SHOWN);\n\n        if (prevHoverState === HOVER_STATE_OUT) {\n          this._leave(null, this);\n        }\n      };\n\n      const isAnimated = this.tip.classList.contains(CLASS_NAME_FADE$3);\n\n      this._queueCallback(complete, this.tip, isAnimated);\n    }\n\n    hide() {\n      if (!this._popper) {\n        return;\n      }\n\n      const tip = this.getTipElement();\n\n      const complete = () => {\n        if (this._isWithActiveTrigger()) {\n          return;\n        }\n\n        if (this._hoverState !== HOVER_STATE_SHOW) {\n          tip.remove();\n        }\n\n        this._cleanTipClass();\n\n        this._element.removeAttribute('aria-describedby');\n\n        EventHandler.trigger(this._element, this.constructor.Event.HIDDEN);\n\n        if (this._popper) {\n          this._popper.destroy();\n\n          this._popper = null;\n        }\n      };\n\n      const hideEvent = EventHandler.trigger(this._element, this.constructor.Event.HIDE);\n\n      if (hideEvent.defaultPrevented) {\n        return;\n      }\n\n      tip.classList.remove(CLASS_NAME_SHOW$3); // If this is a touch-enabled device we remove the extra\n      // empty mouseover listeners we added for iOS support\n\n      if ('ontouchstart' in document.documentElement) {\n        [].concat(...document.body.children).forEach(element => EventHandler.off(element, 'mouseover', noop));\n      }\n\n      this._activeTrigger[TRIGGER_CLICK] = false;\n      this._activeTrigger[TRIGGER_FOCUS] = false;\n      this._activeTrigger[TRIGGER_HOVER] = false;\n      const isAnimated = this.tip.classList.contains(CLASS_NAME_FADE$3);\n\n      this._queueCallback(complete, this.tip, isAnimated);\n\n      this._hoverState = '';\n    }\n\n    update() {\n      if (this._popper !== null) {\n        this._popper.update();\n      }\n    } // Protected\n\n\n    isWithContent() {\n      return Boolean(this.getTitle());\n    }\n\n    getTipElement() {\n      if (this.tip) {\n        return this.tip;\n      }\n\n      const element = document.createElement('div');\n      element.innerHTML = this._config.template;\n      this.tip = element.children[0];\n      return this.tip;\n    }\n\n    setContent() {\n      const tip = this.getTipElement();\n      this.setElementContent(SelectorEngine.findOne(SELECTOR_TOOLTIP_INNER, tip), this.getTitle());\n      tip.classList.remove(CLASS_NAME_FADE$3, CLASS_NAME_SHOW$3);\n    }\n\n    setElementContent(element, content) {\n      if (element === null) {\n        return;\n      }\n\n      if (isElement$1(content)) {\n        content = getElement(content); // content is a DOM node or a jQuery\n\n        if (this._config.html) {\n          if (content.parentNode !== element) {\n            element.innerHTML = '';\n            element.appendChild(content);\n          }\n        } else {\n          element.textContent = content.textContent;\n        }\n\n        return;\n      }\n\n      if (this._config.html) {\n        if (this._config.sanitize) {\n          content = sanitizeHtml(content, this._config.allowList, this._config.sanitizeFn);\n        }\n\n        element.innerHTML = content;\n      } else {\n        element.textContent = content;\n      }\n    }\n\n    getTitle() {\n      let title = this._element.getAttribute('data-bs-original-title');\n\n      if (!title) {\n        title = typeof this._config.title === 'function' ? this._config.title.call(this._element) : this._config.title;\n      }\n\n      return title;\n    }\n\n    updateAttachment(attachment) {\n      if (attachment === 'right') {\n        return 'end';\n      }\n\n      if (attachment === 'left') {\n        return 'start';\n      }\n\n      return attachment;\n    } // Private\n\n\n    _initializeOnDelegatedTarget(event, context) {\n      const dataKey = this.constructor.DATA_KEY;\n      context = context || Data.get(event.delegateTarget, dataKey);\n\n      if (!context) {\n        context = new this.constructor(event.delegateTarget, this._getDelegateConfig());\n        Data.set(event.delegateTarget, dataKey, context);\n      }\n\n      return context;\n    }\n\n    _getOffset() {\n      const {\n        offset\n      } = this._config;\n\n      if (typeof offset === 'string') {\n        return offset.split(',').map(val => Number.parseInt(val, 10));\n      }\n\n      if (typeof offset === 'function') {\n        return popperData => offset(popperData, this._element);\n      }\n\n      return offset;\n    }\n\n    _getPopperConfig(attachment) {\n      const defaultBsPopperConfig = {\n        placement: attachment,\n        modifiers: [{\n          name: 'flip',\n          options: {\n            fallbackPlacements: this._config.fallbackPlacements\n          }\n        }, {\n          name: 'offset',\n          options: {\n            offset: this._getOffset()\n          }\n        }, {\n          name: 'preventOverflow',\n          options: {\n            boundary: this._config.boundary\n          }\n        }, {\n          name: 'arrow',\n          options: {\n            element: `.${this.constructor.NAME}-arrow`\n          }\n        }, {\n          name: 'onChange',\n          enabled: true,\n          phase: 'afterWrite',\n          fn: data => this._handlePopperPlacementChange(data)\n        }],\n        onFirstUpdate: data => {\n          if (data.options.placement !== data.placement) {\n            this._handlePopperPlacementChange(data);\n          }\n        }\n      };\n      return { ...defaultBsPopperConfig,\n        ...(typeof this._config.popperConfig === 'function' ? this._config.popperConfig(defaultBsPopperConfig) : this._config.popperConfig)\n      };\n    }\n\n    _addAttachmentClass(attachment) {\n      this.getTipElement().classList.add(`${CLASS_PREFIX$1}-${this.updateAttachment(attachment)}`);\n    }\n\n    _getAttachment(placement) {\n      return AttachmentMap[placement.toUpperCase()];\n    }\n\n    _setListeners() {\n      const triggers = this._config.trigger.split(' ');\n\n      triggers.forEach(trigger => {\n        if (trigger === 'click') {\n          EventHandler.on(this._element, this.constructor.Event.CLICK, this._config.selector, event => this.toggle(event));\n        } else if (trigger !== TRIGGER_MANUAL) {\n          const eventIn = trigger === TRIGGER_HOVER ? this.constructor.Event.MOUSEENTER : this.constructor.Event.FOCUSIN;\n          const eventOut = trigger === TRIGGER_HOVER ? this.constructor.Event.MOUSELEAVE : this.constructor.Event.FOCUSOUT;\n          EventHandler.on(this._element, eventIn, this._config.selector, event => this._enter(event));\n          EventHandler.on(this._element, eventOut, this._config.selector, event => this._leave(event));\n        }\n      });\n\n      this._hideModalHandler = () => {\n        if (this._element) {\n          this.hide();\n        }\n      };\n\n      EventHandler.on(this._element.closest(`.${CLASS_NAME_MODAL}`), 'hide.bs.modal', this._hideModalHandler);\n\n      if (this._config.selector) {\n        this._config = { ...this._config,\n          trigger: 'manual',\n          selector: ''\n        };\n      } else {\n        this._fixTitle();\n      }\n    }\n\n    _fixTitle() {\n      const title = this._element.getAttribute('title');\n\n      const originalTitleType = typeof this._element.getAttribute('data-bs-original-title');\n\n      if (title || originalTitleType !== 'string') {\n        this._element.setAttribute('data-bs-original-title', title || '');\n\n        if (title && !this._element.getAttribute('aria-label') && !this._element.textContent) {\n          this._element.setAttribute('aria-label', title);\n        }\n\n        this._element.setAttribute('title', '');\n      }\n    }\n\n    _enter(event, context) {\n      context = this._initializeOnDelegatedTarget(event, context);\n\n      if (event) {\n        context._activeTrigger[event.type === 'focusin' ? TRIGGER_FOCUS : TRIGGER_HOVER] = true;\n      }\n\n      if (context.getTipElement().classList.contains(CLASS_NAME_SHOW$3) || context._hoverState === HOVER_STATE_SHOW) {\n        context._hoverState = HOVER_STATE_SHOW;\n        return;\n      }\n\n      clearTimeout(context._timeout);\n      context._hoverState = HOVER_STATE_SHOW;\n\n      if (!context._config.delay || !context._config.delay.show) {\n        context.show();\n        return;\n      }\n\n      context._timeout = setTimeout(() => {\n        if (context._hoverState === HOVER_STATE_SHOW) {\n          context.show();\n        }\n      }, context._config.delay.show);\n    }\n\n    _leave(event, context) {\n      context = this._initializeOnDelegatedTarget(event, context);\n\n      if (event) {\n        context._activeTrigger[event.type === 'focusout' ? TRIGGER_FOCUS : TRIGGER_HOVER] = context._element.contains(event.relatedTarget);\n      }\n\n      if (context._isWithActiveTrigger()) {\n        return;\n      }\n\n      clearTimeout(context._timeout);\n      context._hoverState = HOVER_STATE_OUT;\n\n      if (!context._config.delay || !context._config.delay.hide) {\n        context.hide();\n        return;\n      }\n\n      context._timeout = setTimeout(() => {\n        if (context._hoverState === HOVER_STATE_OUT) {\n          context.hide();\n        }\n      }, context._config.delay.hide);\n    }\n\n    _isWithActiveTrigger() {\n      for (const trigger in this._activeTrigger) {\n        if (this._activeTrigger[trigger]) {\n          return true;\n        }\n      }\n\n      return false;\n    }\n\n    _getConfig(config) {\n      const dataAttributes = Manipulator.getDataAttributes(this._element);\n      Object.keys(dataAttributes).forEach(dataAttr => {\n        if (DISALLOWED_ATTRIBUTES.has(dataAttr)) {\n          delete dataAttributes[dataAttr];\n        }\n      });\n      config = { ...this.constructor.Default,\n        ...dataAttributes,\n        ...(typeof config === 'object' && config ? config : {})\n      };\n      config.container = config.container === false ? document.body : getElement(config.container);\n\n      if (typeof config.delay === 'number') {\n        config.delay = {\n          show: config.delay,\n          hide: config.delay\n        };\n      }\n\n      if (typeof config.title === 'number') {\n        config.title = config.title.toString();\n      }\n\n      if (typeof config.content === 'number') {\n        config.content = config.content.toString();\n      }\n\n      typeCheckConfig(NAME$4, config, this.constructor.DefaultType);\n\n      if (config.sanitize) {\n        config.template = sanitizeHtml(config.template, config.allowList, config.sanitizeFn);\n      }\n\n      return config;\n    }\n\n    _getDelegateConfig() {\n      const config = {};\n\n      if (this._config) {\n        for (const key in this._config) {\n          if (this.constructor.Default[key] !== this._config[key]) {\n            config[key] = this._config[key];\n          }\n        }\n      }\n\n      return config;\n    }\n\n    _cleanTipClass() {\n      const tip = this.getTipElement();\n      const tabClass = tip.getAttribute('class').match(BSCLS_PREFIX_REGEX$1);\n\n      if (tabClass !== null && tabClass.length > 0) {\n        tabClass.map(token => token.trim()).forEach(tClass => tip.classList.remove(tClass));\n      }\n    }\n\n    _handlePopperPlacementChange(popperData) {\n      const {\n        state\n      } = popperData;\n\n      if (!state) {\n        return;\n      }\n\n      this.tip = state.elements.popper;\n\n      this._cleanTipClass();\n\n      this._addAttachmentClass(this._getAttachment(state.placement));\n    } // Static\n\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = Tooltip.getOrCreateInstance(this, config);\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(`No method named \"${config}\"`);\n          }\n\n          data[config]();\n        }\n      });\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Tooltip to jQuery only if jQuery is present\n   */\n\n\n  defineJQueryPlugin(Tooltip);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): popover.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$3 = 'popover';\n  const DATA_KEY$3 = 'bs.popover';\n  const EVENT_KEY$3 = `.${DATA_KEY$3}`;\n  const CLASS_PREFIX = 'bs-popover';\n  const BSCLS_PREFIX_REGEX = new RegExp(`(^|\\\\s)${CLASS_PREFIX}\\\\S+`, 'g');\n  const Default$2 = { ...Tooltip.Default,\n    placement: 'right',\n    offset: [0, 8],\n    trigger: 'click',\n    content: '',\n    template: '<div class=\"popover\" role=\"tooltip\">' + '<div class=\"popover-arrow\"></div>' + '<h3 class=\"popover-header\"></h3>' + '<div class=\"popover-body\"></div>' + '</div>'\n  };\n  const DefaultType$2 = { ...Tooltip.DefaultType,\n    content: '(string|element|function)'\n  };\n  const Event$1 = {\n    HIDE: `hide${EVENT_KEY$3}`,\n    HIDDEN: `hidden${EVENT_KEY$3}`,\n    SHOW: `show${EVENT_KEY$3}`,\n    SHOWN: `shown${EVENT_KEY$3}`,\n    INSERTED: `inserted${EVENT_KEY$3}`,\n    CLICK: `click${EVENT_KEY$3}`,\n    FOCUSIN: `focusin${EVENT_KEY$3}`,\n    FOCUSOUT: `focusout${EVENT_KEY$3}`,\n    MOUSEENTER: `mouseenter${EVENT_KEY$3}`,\n    MOUSELEAVE: `mouseleave${EVENT_KEY$3}`\n  };\n  const CLASS_NAME_FADE$2 = 'fade';\n  const CLASS_NAME_SHOW$2 = 'show';\n  const SELECTOR_TITLE = '.popover-header';\n  const SELECTOR_CONTENT = '.popover-body';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Popover extends Tooltip {\n    // Getters\n    static get Default() {\n      return Default$2;\n    }\n\n    static get NAME() {\n      return NAME$3;\n    }\n\n    static get Event() {\n      return Event$1;\n    }\n\n    static get DefaultType() {\n      return DefaultType$2;\n    } // Overrides\n\n\n    isWithContent() {\n      return this.getTitle() || this._getContent();\n    }\n\n    getTipElement() {\n      if (this.tip) {\n        return this.tip;\n      }\n\n      this.tip = super.getTipElement();\n\n      if (!this.getTitle()) {\n        SelectorEngine.findOne(SELECTOR_TITLE, this.tip).remove();\n      }\n\n      if (!this._getContent()) {\n        SelectorEngine.findOne(SELECTOR_CONTENT, this.tip).remove();\n      }\n\n      return this.tip;\n    }\n\n    setContent() {\n      const tip = this.getTipElement(); // we use append for html objects to maintain js events\n\n      this.setElementContent(SelectorEngine.findOne(SELECTOR_TITLE, tip), this.getTitle());\n\n      let content = this._getContent();\n\n      if (typeof content === 'function') {\n        content = content.call(this._element);\n      }\n\n      this.setElementContent(SelectorEngine.findOne(SELECTOR_CONTENT, tip), content);\n      tip.classList.remove(CLASS_NAME_FADE$2, CLASS_NAME_SHOW$2);\n    } // Private\n\n\n    _addAttachmentClass(attachment) {\n      this.getTipElement().classList.add(`${CLASS_PREFIX}-${this.updateAttachment(attachment)}`);\n    }\n\n    _getContent() {\n      return this._element.getAttribute('data-bs-content') || this._config.content;\n    }\n\n    _cleanTipClass() {\n      const tip = this.getTipElement();\n      const tabClass = tip.getAttribute('class').match(BSCLS_PREFIX_REGEX);\n\n      if (tabClass !== null && tabClass.length > 0) {\n        tabClass.map(token => token.trim()).forEach(tClass => tip.classList.remove(tClass));\n      }\n    } // Static\n\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = Popover.getOrCreateInstance(this, config);\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(`No method named \"${config}\"`);\n          }\n\n          data[config]();\n        }\n      });\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Popover to jQuery only if jQuery is present\n   */\n\n\n  defineJQueryPlugin(Popover);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): scrollspy.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$2 = 'scrollspy';\n  const DATA_KEY$2 = 'bs.scrollspy';\n  const EVENT_KEY$2 = `.${DATA_KEY$2}`;\n  const DATA_API_KEY$1 = '.data-api';\n  const Default$1 = {\n    offset: 10,\n    method: 'auto',\n    target: ''\n  };\n  const DefaultType$1 = {\n    offset: 'number',\n    method: 'string',\n    target: '(string|element)'\n  };\n  const EVENT_ACTIVATE = `activate${EVENT_KEY$2}`;\n  const EVENT_SCROLL = `scroll${EVENT_KEY$2}`;\n  const EVENT_LOAD_DATA_API = `load${EVENT_KEY$2}${DATA_API_KEY$1}`;\n  const CLASS_NAME_DROPDOWN_ITEM = 'dropdown-item';\n  const CLASS_NAME_ACTIVE$1 = 'active';\n  const SELECTOR_DATA_SPY = '[data-bs-spy=\"scroll\"]';\n  const SELECTOR_NAV_LIST_GROUP$1 = '.nav, .list-group';\n  const SELECTOR_NAV_LINKS = '.nav-link';\n  const SELECTOR_NAV_ITEMS = '.nav-item';\n  const SELECTOR_LIST_ITEMS = '.list-group-item';\n  const SELECTOR_DROPDOWN$1 = '.dropdown';\n  const SELECTOR_DROPDOWN_TOGGLE$1 = '.dropdown-toggle';\n  const METHOD_OFFSET = 'offset';\n  const METHOD_POSITION = 'position';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class ScrollSpy extends BaseComponent {\n    constructor(element, config) {\n      super(element);\n      this._scrollElement = this._element.tagName === 'BODY' ? window : this._element;\n      this._config = this._getConfig(config);\n      this._selector = `${this._config.target} ${SELECTOR_NAV_LINKS}, ${this._config.target} ${SELECTOR_LIST_ITEMS}, ${this._config.target} .${CLASS_NAME_DROPDOWN_ITEM}`;\n      this._offsets = [];\n      this._targets = [];\n      this._activeTarget = null;\n      this._scrollHeight = 0;\n      EventHandler.on(this._scrollElement, EVENT_SCROLL, () => this._process());\n      this.refresh();\n\n      this._process();\n    } // Getters\n\n\n    static get Default() {\n      return Default$1;\n    }\n\n    static get NAME() {\n      return NAME$2;\n    } // Public\n\n\n    refresh() {\n      const autoMethod = this._scrollElement === this._scrollElement.window ? METHOD_OFFSET : METHOD_POSITION;\n      const offsetMethod = this._config.method === 'auto' ? autoMethod : this._config.method;\n      const offsetBase = offsetMethod === METHOD_POSITION ? this._getScrollTop() : 0;\n      this._offsets = [];\n      this._targets = [];\n      this._scrollHeight = this._getScrollHeight();\n      const targets = SelectorEngine.find(this._selector);\n      targets.map(element => {\n        const targetSelector = getSelectorFromElement(element);\n        const target = targetSelector ? SelectorEngine.findOne(targetSelector) : null;\n\n        if (target) {\n          const targetBCR = target.getBoundingClientRect();\n\n          if (targetBCR.width || targetBCR.height) {\n            return [Manipulator[offsetMethod](target).top + offsetBase, targetSelector];\n          }\n        }\n\n        return null;\n      }).filter(item => item).sort((a, b) => a[0] - b[0]).forEach(item => {\n        this._offsets.push(item[0]);\n\n        this._targets.push(item[1]);\n      });\n    }\n\n    dispose() {\n      EventHandler.off(this._scrollElement, EVENT_KEY$2);\n      super.dispose();\n    } // Private\n\n\n    _getConfig(config) {\n      config = { ...Default$1,\n        ...Manipulator.getDataAttributes(this._element),\n        ...(typeof config === 'object' && config ? config : {})\n      };\n\n      if (typeof config.target !== 'string' && isElement$1(config.target)) {\n        let {\n          id\n        } = config.target;\n\n        if (!id) {\n          id = getUID(NAME$2);\n          config.target.id = id;\n        }\n\n        config.target = `#${id}`;\n      }\n\n      typeCheckConfig(NAME$2, config, DefaultType$1);\n      return config;\n    }\n\n    _getScrollTop() {\n      return this._scrollElement === window ? this._scrollElement.pageYOffset : this._scrollElement.scrollTop;\n    }\n\n    _getScrollHeight() {\n      return this._scrollElement.scrollHeight || Math.max(document.body.scrollHeight, document.documentElement.scrollHeight);\n    }\n\n    _getOffsetHeight() {\n      return this._scrollElement === window ? window.innerHeight : this._scrollElement.getBoundingClientRect().height;\n    }\n\n    _process() {\n      const scrollTop = this._getScrollTop() + this._config.offset;\n\n      const scrollHeight = this._getScrollHeight();\n\n      const maxScroll = this._config.offset + scrollHeight - this._getOffsetHeight();\n\n      if (this._scrollHeight !== scrollHeight) {\n        this.refresh();\n      }\n\n      if (scrollTop >= maxScroll) {\n        const target = this._targets[this._targets.length - 1];\n\n        if (this._activeTarget !== target) {\n          this._activate(target);\n        }\n\n        return;\n      }\n\n      if (this._activeTarget && scrollTop < this._offsets[0] && this._offsets[0] > 0) {\n        this._activeTarget = null;\n\n        this._clear();\n\n        return;\n      }\n\n      for (let i = this._offsets.length; i--;) {\n        const isActiveTarget = this._activeTarget !== this._targets[i] && scrollTop >= this._offsets[i] && (typeof this._offsets[i + 1] === 'undefined' || scrollTop < this._offsets[i + 1]);\n\n        if (isActiveTarget) {\n          this._activate(this._targets[i]);\n        }\n      }\n    }\n\n    _activate(target) {\n      this._activeTarget = target;\n\n      this._clear();\n\n      const queries = this._selector.split(',').map(selector => `${selector}[data-bs-target=\"${target}\"],${selector}[href=\"${target}\"]`);\n\n      const link = SelectorEngine.findOne(queries.join(','));\n\n      if (link.classList.contains(CLASS_NAME_DROPDOWN_ITEM)) {\n        SelectorEngine.findOne(SELECTOR_DROPDOWN_TOGGLE$1, link.closest(SELECTOR_DROPDOWN$1)).classList.add(CLASS_NAME_ACTIVE$1);\n        link.classList.add(CLASS_NAME_ACTIVE$1);\n      } else {\n        // Set triggered link as active\n        link.classList.add(CLASS_NAME_ACTIVE$1);\n        SelectorEngine.parents(link, SELECTOR_NAV_LIST_GROUP$1).forEach(listGroup => {\n          // Set triggered links parents as active\n          // With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor\n          SelectorEngine.prev(listGroup, `${SELECTOR_NAV_LINKS}, ${SELECTOR_LIST_ITEMS}`).forEach(item => item.classList.add(CLASS_NAME_ACTIVE$1)); // Handle special case when .nav-link is inside .nav-item\n\n          SelectorEngine.prev(listGroup, SELECTOR_NAV_ITEMS).forEach(navItem => {\n            SelectorEngine.children(navItem, SELECTOR_NAV_LINKS).forEach(item => item.classList.add(CLASS_NAME_ACTIVE$1));\n          });\n        });\n      }\n\n      EventHandler.trigger(this._scrollElement, EVENT_ACTIVATE, {\n        relatedTarget: target\n      });\n    }\n\n    _clear() {\n      SelectorEngine.find(this._selector).filter(node => node.classList.contains(CLASS_NAME_ACTIVE$1)).forEach(node => node.classList.remove(CLASS_NAME_ACTIVE$1));\n    } // Static\n\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = ScrollSpy.getOrCreateInstance(this, config);\n\n        if (typeof config !== 'string') {\n          return;\n        }\n\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config]();\n      });\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n    SelectorEngine.find(SELECTOR_DATA_SPY).forEach(spy => new ScrollSpy(spy));\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .ScrollSpy to jQuery only if jQuery is present\n   */\n\n  defineJQueryPlugin(ScrollSpy);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): tab.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$1 = 'tab';\n  const DATA_KEY$1 = 'bs.tab';\n  const EVENT_KEY$1 = `.${DATA_KEY$1}`;\n  const DATA_API_KEY = '.data-api';\n  const EVENT_HIDE$1 = `hide${EVENT_KEY$1}`;\n  const EVENT_HIDDEN$1 = `hidden${EVENT_KEY$1}`;\n  const EVENT_SHOW$1 = `show${EVENT_KEY$1}`;\n  const EVENT_SHOWN$1 = `shown${EVENT_KEY$1}`;\n  const EVENT_CLICK_DATA_API = `click${EVENT_KEY$1}${DATA_API_KEY}`;\n  const CLASS_NAME_DROPDOWN_MENU = 'dropdown-menu';\n  const CLASS_NAME_ACTIVE = 'active';\n  const CLASS_NAME_FADE$1 = 'fade';\n  const CLASS_NAME_SHOW$1 = 'show';\n  const SELECTOR_DROPDOWN = '.dropdown';\n  const SELECTOR_NAV_LIST_GROUP = '.nav, .list-group';\n  const SELECTOR_ACTIVE = '.active';\n  const SELECTOR_ACTIVE_UL = ':scope > li > .active';\n  const SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"tab\"], [data-bs-toggle=\"pill\"], [data-bs-toggle=\"list\"]';\n  const SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle';\n  const SELECTOR_DROPDOWN_ACTIVE_CHILD = ':scope > .dropdown-menu .active';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Tab extends BaseComponent {\n    // Getters\n    static get NAME() {\n      return NAME$1;\n    } // Public\n\n\n    show() {\n      if (this._element.parentNode && this._element.parentNode.nodeType === Node.ELEMENT_NODE && this._element.classList.contains(CLASS_NAME_ACTIVE)) {\n        return;\n      }\n\n      let previous;\n      const target = getElementFromSelector(this._element);\n\n      const listElement = this._element.closest(SELECTOR_NAV_LIST_GROUP);\n\n      if (listElement) {\n        const itemSelector = listElement.nodeName === 'UL' || listElement.nodeName === 'OL' ? SELECTOR_ACTIVE_UL : SELECTOR_ACTIVE;\n        previous = SelectorEngine.find(itemSelector, listElement);\n        previous = previous[previous.length - 1];\n      }\n\n      const hideEvent = previous ? EventHandler.trigger(previous, EVENT_HIDE$1, {\n        relatedTarget: this._element\n      }) : null;\n      const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$1, {\n        relatedTarget: previous\n      });\n\n      if (showEvent.defaultPrevented || hideEvent !== null && hideEvent.defaultPrevented) {\n        return;\n      }\n\n      this._activate(this._element, listElement);\n\n      const complete = () => {\n        EventHandler.trigger(previous, EVENT_HIDDEN$1, {\n          relatedTarget: this._element\n        });\n        EventHandler.trigger(this._element, EVENT_SHOWN$1, {\n          relatedTarget: previous\n        });\n      };\n\n      if (target) {\n        this._activate(target, target.parentNode, complete);\n      } else {\n        complete();\n      }\n    } // Private\n\n\n    _activate(element, container, callback) {\n      const activeElements = container && (container.nodeName === 'UL' || container.nodeName === 'OL') ? SelectorEngine.find(SELECTOR_ACTIVE_UL, container) : SelectorEngine.children(container, SELECTOR_ACTIVE);\n      const active = activeElements[0];\n      const isTransitioning = callback && active && active.classList.contains(CLASS_NAME_FADE$1);\n\n      const complete = () => this._transitionComplete(element, active, callback);\n\n      if (active && isTransitioning) {\n        active.classList.remove(CLASS_NAME_SHOW$1);\n\n        this._queueCallback(complete, element, true);\n      } else {\n        complete();\n      }\n    }\n\n    _transitionComplete(element, active, callback) {\n      if (active) {\n        active.classList.remove(CLASS_NAME_ACTIVE);\n        const dropdownChild = SelectorEngine.findOne(SELECTOR_DROPDOWN_ACTIVE_CHILD, active.parentNode);\n\n        if (dropdownChild) {\n          dropdownChild.classList.remove(CLASS_NAME_ACTIVE);\n        }\n\n        if (active.getAttribute('role') === 'tab') {\n          active.setAttribute('aria-selected', false);\n        }\n      }\n\n      element.classList.add(CLASS_NAME_ACTIVE);\n\n      if (element.getAttribute('role') === 'tab') {\n        element.setAttribute('aria-selected', true);\n      }\n\n      reflow(element);\n\n      if (element.classList.contains(CLASS_NAME_FADE$1)) {\n        element.classList.add(CLASS_NAME_SHOW$1);\n      }\n\n      let parent = element.parentNode;\n\n      if (parent && parent.nodeName === 'LI') {\n        parent = parent.parentNode;\n      }\n\n      if (parent && parent.classList.contains(CLASS_NAME_DROPDOWN_MENU)) {\n        const dropdownElement = element.closest(SELECTOR_DROPDOWN);\n\n        if (dropdownElement) {\n          SelectorEngine.find(SELECTOR_DROPDOWN_TOGGLE, dropdownElement).forEach(dropdown => dropdown.classList.add(CLASS_NAME_ACTIVE));\n        }\n\n        element.setAttribute('aria-expanded', true);\n      }\n\n      if (callback) {\n        callback();\n      }\n    } // Static\n\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = Tab.getOrCreateInstance(this);\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(`No method named \"${config}\"`);\n          }\n\n          data[config]();\n        }\n      });\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n    if (['A', 'AREA'].includes(this.tagName)) {\n      event.preventDefault();\n    }\n\n    if (isDisabled(this)) {\n      return;\n    }\n\n    const data = Tab.getOrCreateInstance(this);\n    data.show();\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Tab to jQuery only if jQuery is present\n   */\n\n  defineJQueryPlugin(Tab);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): toast.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME = 'toast';\n  const DATA_KEY = 'bs.toast';\n  const EVENT_KEY = `.${DATA_KEY}`;\n  const EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY}`;\n  const EVENT_MOUSEOVER = `mouseover${EVENT_KEY}`;\n  const EVENT_MOUSEOUT = `mouseout${EVENT_KEY}`;\n  const EVENT_FOCUSIN = `focusin${EVENT_KEY}`;\n  const EVENT_FOCUSOUT = `focusout${EVENT_KEY}`;\n  const EVENT_HIDE = `hide${EVENT_KEY}`;\n  const EVENT_HIDDEN = `hidden${EVENT_KEY}`;\n  const EVENT_SHOW = `show${EVENT_KEY}`;\n  const EVENT_SHOWN = `shown${EVENT_KEY}`;\n  const CLASS_NAME_FADE = 'fade';\n  const CLASS_NAME_HIDE = 'hide';\n  const CLASS_NAME_SHOW = 'show';\n  const CLASS_NAME_SHOWING = 'showing';\n  const DefaultType = {\n    animation: 'boolean',\n    autohide: 'boolean',\n    delay: 'number'\n  };\n  const Default = {\n    animation: true,\n    autohide: true,\n    delay: 5000\n  };\n  const SELECTOR_DATA_DISMISS = '[data-bs-dismiss=\"toast\"]';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Toast extends BaseComponent {\n    constructor(element, config) {\n      super(element);\n      this._config = this._getConfig(config);\n      this._timeout = null;\n      this._hasMouseInteraction = false;\n      this._hasKeyboardInteraction = false;\n\n      this._setListeners();\n    } // Getters\n\n\n    static get DefaultType() {\n      return DefaultType;\n    }\n\n    static get Default() {\n      return Default;\n    }\n\n    static get NAME() {\n      return NAME;\n    } // Public\n\n\n    show() {\n      const showEvent = EventHandler.trigger(this._element, EVENT_SHOW);\n\n      if (showEvent.defaultPrevented) {\n        return;\n      }\n\n      this._clearTimeout();\n\n      if (this._config.animation) {\n        this._element.classList.add(CLASS_NAME_FADE);\n      }\n\n      const complete = () => {\n        this._element.classList.remove(CLASS_NAME_SHOWING);\n\n        this._element.classList.add(CLASS_NAME_SHOW);\n\n        EventHandler.trigger(this._element, EVENT_SHOWN);\n\n        this._maybeScheduleHide();\n      };\n\n      this._element.classList.remove(CLASS_NAME_HIDE);\n\n      reflow(this._element);\n\n      this._element.classList.add(CLASS_NAME_SHOWING);\n\n      this._queueCallback(complete, this._element, this._config.animation);\n    }\n\n    hide() {\n      if (!this._element.classList.contains(CLASS_NAME_SHOW)) {\n        return;\n      }\n\n      const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE);\n\n      if (hideEvent.defaultPrevented) {\n        return;\n      }\n\n      const complete = () => {\n        this._element.classList.add(CLASS_NAME_HIDE);\n\n        EventHandler.trigger(this._element, EVENT_HIDDEN);\n      };\n\n      this._element.classList.remove(CLASS_NAME_SHOW);\n\n      this._queueCallback(complete, this._element, this._config.animation);\n    }\n\n    dispose() {\n      this._clearTimeout();\n\n      if (this._element.classList.contains(CLASS_NAME_SHOW)) {\n        this._element.classList.remove(CLASS_NAME_SHOW);\n      }\n\n      super.dispose();\n    } // Private\n\n\n    _getConfig(config) {\n      config = { ...Default,\n        ...Manipulator.getDataAttributes(this._element),\n        ...(typeof config === 'object' && config ? config : {})\n      };\n      typeCheckConfig(NAME, config, this.constructor.DefaultType);\n      return config;\n    }\n\n    _maybeScheduleHide() {\n      if (!this._config.autohide) {\n        return;\n      }\n\n      if (this._hasMouseInteraction || this._hasKeyboardInteraction) {\n        return;\n      }\n\n      this._timeout = setTimeout(() => {\n        this.hide();\n      }, this._config.delay);\n    }\n\n    _onInteraction(event, isInteracting) {\n      switch (event.type) {\n        case 'mouseover':\n        case 'mouseout':\n          this._hasMouseInteraction = isInteracting;\n          break;\n\n        case 'focusin':\n        case 'focusout':\n          this._hasKeyboardInteraction = isInteracting;\n          break;\n      }\n\n      if (isInteracting) {\n        this._clearTimeout();\n\n        return;\n      }\n\n      const nextElement = event.relatedTarget;\n\n      if (this._element === nextElement || this._element.contains(nextElement)) {\n        return;\n      }\n\n      this._maybeScheduleHide();\n    }\n\n    _setListeners() {\n      EventHandler.on(this._element, EVENT_CLICK_DISMISS, SELECTOR_DATA_DISMISS, () => this.hide());\n      EventHandler.on(this._element, EVENT_MOUSEOVER, event => this._onInteraction(event, true));\n      EventHandler.on(this._element, EVENT_MOUSEOUT, event => this._onInteraction(event, false));\n      EventHandler.on(this._element, EVENT_FOCUSIN, event => this._onInteraction(event, true));\n      EventHandler.on(this._element, EVENT_FOCUSOUT, event => this._onInteraction(event, false));\n    }\n\n    _clearTimeout() {\n      clearTimeout(this._timeout);\n      this._timeout = null;\n    } // Static\n\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = Toast.getOrCreateInstance(this, config);\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(`No method named \"${config}\"`);\n          }\n\n          data[config](this);\n        }\n      });\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Toast to jQuery only if jQuery is present\n   */\n\n\n  defineJQueryPlugin(Toast);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): index.umd.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  var index_umd = {\n    Alert,\n    Button,\n    Carousel,\n    Collapse,\n    Dropdown,\n    Modal,\n    Offcanvas,\n    Popover,\n    ScrollSpy,\n    Tab,\n    Toast,\n    Tooltip\n  };\n\n  return index_umd;\n\n})));\n//# sourceMappingURL=bootstrap.bundle.js.map\n"
  },
  {
    "path": "src/sourceDev.WebApp/SharedThemes/lux/wwwroot/js/bootstrap.esm.js",
    "content": "/*!\n  * Bootstrap v5.0.2 (https://getbootstrap.com/)\n  * Copyright 2011-2021 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)\n  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n  */\nimport * as Popper from '@popperjs/core';\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): dom/selector-engine.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\nconst NODE_TEXT = 3;\nconst SelectorEngine = {\n  find(selector, element = document.documentElement) {\n    return [].concat(...Element.prototype.querySelectorAll.call(element, selector));\n  },\n\n  findOne(selector, element = document.documentElement) {\n    return Element.prototype.querySelector.call(element, selector);\n  },\n\n  children(element, selector) {\n    return [].concat(...element.children).filter(child => child.matches(selector));\n  },\n\n  parents(element, selector) {\n    const parents = [];\n    let ancestor = element.parentNode;\n\n    while (ancestor && ancestor.nodeType === Node.ELEMENT_NODE && ancestor.nodeType !== NODE_TEXT) {\n      if (ancestor.matches(selector)) {\n        parents.push(ancestor);\n      }\n\n      ancestor = ancestor.parentNode;\n    }\n\n    return parents;\n  },\n\n  prev(element, selector) {\n    let previous = element.previousElementSibling;\n\n    while (previous) {\n      if (previous.matches(selector)) {\n        return [previous];\n      }\n\n      previous = previous.previousElementSibling;\n    }\n\n    return [];\n  },\n\n  next(element, selector) {\n    let next = element.nextElementSibling;\n\n    while (next) {\n      if (next.matches(selector)) {\n        return [next];\n      }\n\n      next = next.nextElementSibling;\n    }\n\n    return [];\n  }\n\n};\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): util/index.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst MAX_UID = 1000000;\nconst MILLISECONDS_MULTIPLIER = 1000;\nconst TRANSITION_END = 'transitionend'; // Shoutout AngusCroll (https://goo.gl/pxwQGp)\n\nconst toType = obj => {\n  if (obj === null || obj === undefined) {\n    return `${obj}`;\n  }\n\n  return {}.toString.call(obj).match(/\\s([a-z]+)/i)[1].toLowerCase();\n};\n/**\n * --------------------------------------------------------------------------\n * Public Util Api\n * --------------------------------------------------------------------------\n */\n\n\nconst getUID = prefix => {\n  do {\n    prefix += Math.floor(Math.random() * MAX_UID);\n  } while (document.getElementById(prefix));\n\n  return prefix;\n};\n\nconst getSelector = element => {\n  let selector = element.getAttribute('data-bs-target');\n\n  if (!selector || selector === '#') {\n    let hrefAttr = element.getAttribute('href'); // The only valid content that could double as a selector are IDs or classes,\n    // so everything starting with `#` or `.`. If a \"real\" URL is used as the selector,\n    // `document.querySelector` will rightfully complain it is invalid.\n    // See https://github.com/twbs/bootstrap/issues/32273\n\n    if (!hrefAttr || !hrefAttr.includes('#') && !hrefAttr.startsWith('.')) {\n      return null;\n    } // Just in case some CMS puts out a full URL with the anchor appended\n\n\n    if (hrefAttr.includes('#') && !hrefAttr.startsWith('#')) {\n      hrefAttr = `#${hrefAttr.split('#')[1]}`;\n    }\n\n    selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : null;\n  }\n\n  return selector;\n};\n\nconst getSelectorFromElement = element => {\n  const selector = getSelector(element);\n\n  if (selector) {\n    return document.querySelector(selector) ? selector : null;\n  }\n\n  return null;\n};\n\nconst getElementFromSelector = element => {\n  const selector = getSelector(element);\n  return selector ? document.querySelector(selector) : null;\n};\n\nconst getTransitionDurationFromElement = element => {\n  if (!element) {\n    return 0;\n  } // Get transition-duration of the element\n\n\n  let {\n    transitionDuration,\n    transitionDelay\n  } = window.getComputedStyle(element);\n  const floatTransitionDuration = Number.parseFloat(transitionDuration);\n  const floatTransitionDelay = Number.parseFloat(transitionDelay); // Return 0 if element or transition duration is not found\n\n  if (!floatTransitionDuration && !floatTransitionDelay) {\n    return 0;\n  } // If multiple durations are defined, take the first\n\n\n  transitionDuration = transitionDuration.split(',')[0];\n  transitionDelay = transitionDelay.split(',')[0];\n  return (Number.parseFloat(transitionDuration) + Number.parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER;\n};\n\nconst triggerTransitionEnd = element => {\n  element.dispatchEvent(new Event(TRANSITION_END));\n};\n\nconst isElement = obj => {\n  if (!obj || typeof obj !== 'object') {\n    return false;\n  }\n\n  if (typeof obj.jquery !== 'undefined') {\n    obj = obj[0];\n  }\n\n  return typeof obj.nodeType !== 'undefined';\n};\n\nconst getElement = obj => {\n  if (isElement(obj)) {\n    // it's a jQuery object or a node element\n    return obj.jquery ? obj[0] : obj;\n  }\n\n  if (typeof obj === 'string' && obj.length > 0) {\n    return SelectorEngine.findOne(obj);\n  }\n\n  return null;\n};\n\nconst typeCheckConfig = (componentName, config, configTypes) => {\n  Object.keys(configTypes).forEach(property => {\n    const expectedTypes = configTypes[property];\n    const value = config[property];\n    const valueType = value && isElement(value) ? 'element' : toType(value);\n\n    if (!new RegExp(expectedTypes).test(valueType)) {\n      throw new TypeError(`${componentName.toUpperCase()}: Option \"${property}\" provided type \"${valueType}\" but expected type \"${expectedTypes}\".`);\n    }\n  });\n};\n\nconst isVisible = element => {\n  if (!isElement(element) || element.getClientRects().length === 0) {\n    return false;\n  }\n\n  return getComputedStyle(element).getPropertyValue('visibility') === 'visible';\n};\n\nconst isDisabled = element => {\n  if (!element || element.nodeType !== Node.ELEMENT_NODE) {\n    return true;\n  }\n\n  if (element.classList.contains('disabled')) {\n    return true;\n  }\n\n  if (typeof element.disabled !== 'undefined') {\n    return element.disabled;\n  }\n\n  return element.hasAttribute('disabled') && element.getAttribute('disabled') !== 'false';\n};\n\nconst findShadowRoot = element => {\n  if (!document.documentElement.attachShadow) {\n    return null;\n  } // Can find the shadow root otherwise it'll return the document\n\n\n  if (typeof element.getRootNode === 'function') {\n    const root = element.getRootNode();\n    return root instanceof ShadowRoot ? root : null;\n  }\n\n  if (element instanceof ShadowRoot) {\n    return element;\n  } // when we don't find a shadow root\n\n\n  if (!element.parentNode) {\n    return null;\n  }\n\n  return findShadowRoot(element.parentNode);\n};\n\nconst noop = () => {};\n\nconst reflow = element => element.offsetHeight;\n\nconst getjQuery = () => {\n  const {\n    jQuery\n  } = window;\n\n  if (jQuery && !document.body.hasAttribute('data-bs-no-jquery')) {\n    return jQuery;\n  }\n\n  return null;\n};\n\nconst DOMContentLoadedCallbacks = [];\n\nconst onDOMContentLoaded = callback => {\n  if (document.readyState === 'loading') {\n    // add listener on the first call when the document is in loading state\n    if (!DOMContentLoadedCallbacks.length) {\n      document.addEventListener('DOMContentLoaded', () => {\n        DOMContentLoadedCallbacks.forEach(callback => callback());\n      });\n    }\n\n    DOMContentLoadedCallbacks.push(callback);\n  } else {\n    callback();\n  }\n};\n\nconst isRTL = () => document.documentElement.dir === 'rtl';\n\nconst defineJQueryPlugin = plugin => {\n  onDOMContentLoaded(() => {\n    const $ = getjQuery();\n    /* istanbul ignore if */\n\n    if ($) {\n      const name = plugin.NAME;\n      const JQUERY_NO_CONFLICT = $.fn[name];\n      $.fn[name] = plugin.jQueryInterface;\n      $.fn[name].Constructor = plugin;\n\n      $.fn[name].noConflict = () => {\n        $.fn[name] = JQUERY_NO_CONFLICT;\n        return plugin.jQueryInterface;\n      };\n    }\n  });\n};\n\nconst execute = callback => {\n  if (typeof callback === 'function') {\n    callback();\n  }\n};\n\nconst executeAfterTransition = (callback, transitionElement, waitForTransition = true) => {\n  if (!waitForTransition) {\n    execute(callback);\n    return;\n  }\n\n  const durationPadding = 5;\n  const emulatedDuration = getTransitionDurationFromElement(transitionElement) + durationPadding;\n  let called = false;\n\n  const handler = ({\n    target\n  }) => {\n    if (target !== transitionElement) {\n      return;\n    }\n\n    called = true;\n    transitionElement.removeEventListener(TRANSITION_END, handler);\n    execute(callback);\n  };\n\n  transitionElement.addEventListener(TRANSITION_END, handler);\n  setTimeout(() => {\n    if (!called) {\n      triggerTransitionEnd(transitionElement);\n    }\n  }, emulatedDuration);\n};\n/**\n * Return the previous/next element of a list.\n *\n * @param {array} list    The list of elements\n * @param activeElement   The active element\n * @param shouldGetNext   Choose to get next or previous element\n * @param isCycleAllowed\n * @return {Element|elem} The proper element\n */\n\n\nconst getNextActiveElement = (list, activeElement, shouldGetNext, isCycleAllowed) => {\n  let index = list.indexOf(activeElement); // if the element does not exist in the list return an element depending on the direction and if cycle is allowed\n\n  if (index === -1) {\n    return list[!shouldGetNext && isCycleAllowed ? list.length - 1 : 0];\n  }\n\n  const listLength = list.length;\n  index += shouldGetNext ? 1 : -1;\n\n  if (isCycleAllowed) {\n    index = (index + listLength) % listLength;\n  }\n\n  return list[Math.max(0, Math.min(index, listLength - 1))];\n};\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): dom/event-handler.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst namespaceRegex = /[^.]*(?=\\..*)\\.|.*/;\nconst stripNameRegex = /\\..*/;\nconst stripUidRegex = /::\\d+$/;\nconst eventRegistry = {}; // Events storage\n\nlet uidEvent = 1;\nconst customEvents = {\n  mouseenter: 'mouseover',\n  mouseleave: 'mouseout'\n};\nconst customEventsRegex = /^(mouseenter|mouseleave)/i;\nconst nativeEvents = new Set(['click', 'dblclick', 'mouseup', 'mousedown', 'contextmenu', 'mousewheel', 'DOMMouseScroll', 'mouseover', 'mouseout', 'mousemove', 'selectstart', 'selectend', 'keydown', 'keypress', 'keyup', 'orientationchange', 'touchstart', 'touchmove', 'touchend', 'touchcancel', 'pointerdown', 'pointermove', 'pointerup', 'pointerleave', 'pointercancel', 'gesturestart', 'gesturechange', 'gestureend', 'focus', 'blur', 'change', 'reset', 'select', 'submit', 'focusin', 'focusout', 'load', 'unload', 'beforeunload', 'resize', 'move', 'DOMContentLoaded', 'readystatechange', 'error', 'abort', 'scroll']);\n/**\n * ------------------------------------------------------------------------\n * Private methods\n * ------------------------------------------------------------------------\n */\n\nfunction getUidEvent(element, uid) {\n  return uid && `${uid}::${uidEvent++}` || element.uidEvent || uidEvent++;\n}\n\nfunction getEvent(element) {\n  const uid = getUidEvent(element);\n  element.uidEvent = uid;\n  eventRegistry[uid] = eventRegistry[uid] || {};\n  return eventRegistry[uid];\n}\n\nfunction bootstrapHandler(element, fn) {\n  return function handler(event) {\n    event.delegateTarget = element;\n\n    if (handler.oneOff) {\n      EventHandler.off(element, event.type, fn);\n    }\n\n    return fn.apply(element, [event]);\n  };\n}\n\nfunction bootstrapDelegationHandler(element, selector, fn) {\n  return function handler(event) {\n    const domElements = element.querySelectorAll(selector);\n\n    for (let {\n      target\n    } = event; target && target !== this; target = target.parentNode) {\n      for (let i = domElements.length; i--;) {\n        if (domElements[i] === target) {\n          event.delegateTarget = target;\n\n          if (handler.oneOff) {\n            // eslint-disable-next-line unicorn/consistent-destructuring\n            EventHandler.off(element, event.type, selector, fn);\n          }\n\n          return fn.apply(target, [event]);\n        }\n      }\n    } // To please ESLint\n\n\n    return null;\n  };\n}\n\nfunction findHandler(events, handler, delegationSelector = null) {\n  const uidEventList = Object.keys(events);\n\n  for (let i = 0, len = uidEventList.length; i < len; i++) {\n    const event = events[uidEventList[i]];\n\n    if (event.originalHandler === handler && event.delegationSelector === delegationSelector) {\n      return event;\n    }\n  }\n\n  return null;\n}\n\nfunction normalizeParams(originalTypeEvent, handler, delegationFn) {\n  const delegation = typeof handler === 'string';\n  const originalHandler = delegation ? delegationFn : handler;\n  let typeEvent = getTypeEvent(originalTypeEvent);\n  const isNative = nativeEvents.has(typeEvent);\n\n  if (!isNative) {\n    typeEvent = originalTypeEvent;\n  }\n\n  return [delegation, originalHandler, typeEvent];\n}\n\nfunction addHandler(element, originalTypeEvent, handler, delegationFn, oneOff) {\n  if (typeof originalTypeEvent !== 'string' || !element) {\n    return;\n  }\n\n  if (!handler) {\n    handler = delegationFn;\n    delegationFn = null;\n  } // in case of mouseenter or mouseleave wrap the handler within a function that checks for its DOM position\n  // this prevents the handler from being dispatched the same way as mouseover or mouseout does\n\n\n  if (customEventsRegex.test(originalTypeEvent)) {\n    const wrapFn = fn => {\n      return function (event) {\n        if (!event.relatedTarget || event.relatedTarget !== event.delegateTarget && !event.delegateTarget.contains(event.relatedTarget)) {\n          return fn.call(this, event);\n        }\n      };\n    };\n\n    if (delegationFn) {\n      delegationFn = wrapFn(delegationFn);\n    } else {\n      handler = wrapFn(handler);\n    }\n  }\n\n  const [delegation, originalHandler, typeEvent] = normalizeParams(originalTypeEvent, handler, delegationFn);\n  const events = getEvent(element);\n  const handlers = events[typeEvent] || (events[typeEvent] = {});\n  const previousFn = findHandler(handlers, originalHandler, delegation ? handler : null);\n\n  if (previousFn) {\n    previousFn.oneOff = previousFn.oneOff && oneOff;\n    return;\n  }\n\n  const uid = getUidEvent(originalHandler, originalTypeEvent.replace(namespaceRegex, ''));\n  const fn = delegation ? bootstrapDelegationHandler(element, handler, delegationFn) : bootstrapHandler(element, handler);\n  fn.delegationSelector = delegation ? handler : null;\n  fn.originalHandler = originalHandler;\n  fn.oneOff = oneOff;\n  fn.uidEvent = uid;\n  handlers[uid] = fn;\n  element.addEventListener(typeEvent, fn, delegation);\n}\n\nfunction removeHandler(element, events, typeEvent, handler, delegationSelector) {\n  const fn = findHandler(events[typeEvent], handler, delegationSelector);\n\n  if (!fn) {\n    return;\n  }\n\n  element.removeEventListener(typeEvent, fn, Boolean(delegationSelector));\n  delete events[typeEvent][fn.uidEvent];\n}\n\nfunction removeNamespacedHandlers(element, events, typeEvent, namespace) {\n  const storeElementEvent = events[typeEvent] || {};\n  Object.keys(storeElementEvent).forEach(handlerKey => {\n    if (handlerKey.includes(namespace)) {\n      const event = storeElementEvent[handlerKey];\n      removeHandler(element, events, typeEvent, event.originalHandler, event.delegationSelector);\n    }\n  });\n}\n\nfunction getTypeEvent(event) {\n  // allow to get the native events from namespaced events ('click.bs.button' --> 'click')\n  event = event.replace(stripNameRegex, '');\n  return customEvents[event] || event;\n}\n\nconst EventHandler = {\n  on(element, event, handler, delegationFn) {\n    addHandler(element, event, handler, delegationFn, false);\n  },\n\n  one(element, event, handler, delegationFn) {\n    addHandler(element, event, handler, delegationFn, true);\n  },\n\n  off(element, originalTypeEvent, handler, delegationFn) {\n    if (typeof originalTypeEvent !== 'string' || !element) {\n      return;\n    }\n\n    const [delegation, originalHandler, typeEvent] = normalizeParams(originalTypeEvent, handler, delegationFn);\n    const inNamespace = typeEvent !== originalTypeEvent;\n    const events = getEvent(element);\n    const isNamespace = originalTypeEvent.startsWith('.');\n\n    if (typeof originalHandler !== 'undefined') {\n      // Simplest case: handler is passed, remove that listener ONLY.\n      if (!events || !events[typeEvent]) {\n        return;\n      }\n\n      removeHandler(element, events, typeEvent, originalHandler, delegation ? handler : null);\n      return;\n    }\n\n    if (isNamespace) {\n      Object.keys(events).forEach(elementEvent => {\n        removeNamespacedHandlers(element, events, elementEvent, originalTypeEvent.slice(1));\n      });\n    }\n\n    const storeElementEvent = events[typeEvent] || {};\n    Object.keys(storeElementEvent).forEach(keyHandlers => {\n      const handlerKey = keyHandlers.replace(stripUidRegex, '');\n\n      if (!inNamespace || originalTypeEvent.includes(handlerKey)) {\n        const event = storeElementEvent[keyHandlers];\n        removeHandler(element, events, typeEvent, event.originalHandler, event.delegationSelector);\n      }\n    });\n  },\n\n  trigger(element, event, args) {\n    if (typeof event !== 'string' || !element) {\n      return null;\n    }\n\n    const $ = getjQuery();\n    const typeEvent = getTypeEvent(event);\n    const inNamespace = event !== typeEvent;\n    const isNative = nativeEvents.has(typeEvent);\n    let jQueryEvent;\n    let bubbles = true;\n    let nativeDispatch = true;\n    let defaultPrevented = false;\n    let evt = null;\n\n    if (inNamespace && $) {\n      jQueryEvent = $.Event(event, args);\n      $(element).trigger(jQueryEvent);\n      bubbles = !jQueryEvent.isPropagationStopped();\n      nativeDispatch = !jQueryEvent.isImmediatePropagationStopped();\n      defaultPrevented = jQueryEvent.isDefaultPrevented();\n    }\n\n    if (isNative) {\n      evt = document.createEvent('HTMLEvents');\n      evt.initEvent(typeEvent, bubbles, true);\n    } else {\n      evt = new CustomEvent(event, {\n        bubbles,\n        cancelable: true\n      });\n    } // merge custom information in our event\n\n\n    if (typeof args !== 'undefined') {\n      Object.keys(args).forEach(key => {\n        Object.defineProperty(evt, key, {\n          get() {\n            return args[key];\n          }\n\n        });\n      });\n    }\n\n    if (defaultPrevented) {\n      evt.preventDefault();\n    }\n\n    if (nativeDispatch) {\n      element.dispatchEvent(evt);\n    }\n\n    if (evt.defaultPrevented && typeof jQueryEvent !== 'undefined') {\n      jQueryEvent.preventDefault();\n    }\n\n    return evt;\n  }\n\n};\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): dom/data.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\nconst elementMap = new Map();\nvar Data = {\n  set(element, key, instance) {\n    if (!elementMap.has(element)) {\n      elementMap.set(element, new Map());\n    }\n\n    const instanceMap = elementMap.get(element); // make it clear we only want one instance per element\n    // can be removed later when multiple key/instances are fine to be used\n\n    if (!instanceMap.has(key) && instanceMap.size !== 0) {\n      // eslint-disable-next-line no-console\n      console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(instanceMap.keys())[0]}.`);\n      return;\n    }\n\n    instanceMap.set(key, instance);\n  },\n\n  get(element, key) {\n    if (elementMap.has(element)) {\n      return elementMap.get(element).get(key) || null;\n    }\n\n    return null;\n  },\n\n  remove(element, key) {\n    if (!elementMap.has(element)) {\n      return;\n    }\n\n    const instanceMap = elementMap.get(element);\n    instanceMap.delete(key); // free up element references if there are no instances left for an element\n\n    if (instanceMap.size === 0) {\n      elementMap.delete(element);\n    }\n  }\n\n};\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): base-component.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst VERSION = '5.0.2';\n\nclass BaseComponent {\n  constructor(element) {\n    element = getElement(element);\n\n    if (!element) {\n      return;\n    }\n\n    this._element = element;\n    Data.set(this._element, this.constructor.DATA_KEY, this);\n  }\n\n  dispose() {\n    Data.remove(this._element, this.constructor.DATA_KEY);\n    EventHandler.off(this._element, this.constructor.EVENT_KEY);\n    Object.getOwnPropertyNames(this).forEach(propertyName => {\n      this[propertyName] = null;\n    });\n  }\n\n  _queueCallback(callback, element, isAnimated = true) {\n    executeAfterTransition(callback, element, isAnimated);\n  }\n  /** Static */\n\n\n  static getInstance(element) {\n    return Data.get(element, this.DATA_KEY);\n  }\n\n  static getOrCreateInstance(element, config = {}) {\n    return this.getInstance(element) || new this(element, typeof config === 'object' ? config : null);\n  }\n\n  static get VERSION() {\n    return VERSION;\n  }\n\n  static get NAME() {\n    throw new Error('You have to implement the static method \"NAME\", for each component!');\n  }\n\n  static get DATA_KEY() {\n    return `bs.${this.NAME}`;\n  }\n\n  static get EVENT_KEY() {\n    return `.${this.DATA_KEY}`;\n  }\n\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): alert.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$c = 'alert';\nconst DATA_KEY$b = 'bs.alert';\nconst EVENT_KEY$b = `.${DATA_KEY$b}`;\nconst DATA_API_KEY$8 = '.data-api';\nconst SELECTOR_DISMISS = '[data-bs-dismiss=\"alert\"]';\nconst EVENT_CLOSE = `close${EVENT_KEY$b}`;\nconst EVENT_CLOSED = `closed${EVENT_KEY$b}`;\nconst EVENT_CLICK_DATA_API$7 = `click${EVENT_KEY$b}${DATA_API_KEY$8}`;\nconst CLASS_NAME_ALERT = 'alert';\nconst CLASS_NAME_FADE$6 = 'fade';\nconst CLASS_NAME_SHOW$9 = 'show';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Alert extends BaseComponent {\n  // Getters\n  static get NAME() {\n    return NAME$c;\n  } // Public\n\n\n  close(element) {\n    const rootElement = element ? this._getRootElement(element) : this._element;\n\n    const customEvent = this._triggerCloseEvent(rootElement);\n\n    if (customEvent === null || customEvent.defaultPrevented) {\n      return;\n    }\n\n    this._removeElement(rootElement);\n  } // Private\n\n\n  _getRootElement(element) {\n    return getElementFromSelector(element) || element.closest(`.${CLASS_NAME_ALERT}`);\n  }\n\n  _triggerCloseEvent(element) {\n    return EventHandler.trigger(element, EVENT_CLOSE);\n  }\n\n  _removeElement(element) {\n    element.classList.remove(CLASS_NAME_SHOW$9);\n    const isAnimated = element.classList.contains(CLASS_NAME_FADE$6);\n\n    this._queueCallback(() => this._destroyElement(element), element, isAnimated);\n  }\n\n  _destroyElement(element) {\n    element.remove();\n    EventHandler.trigger(element, EVENT_CLOSED);\n  } // Static\n\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Alert.getOrCreateInstance(this);\n\n      if (config === 'close') {\n        data[config](this);\n      }\n    });\n  }\n\n  static handleDismiss(alertInstance) {\n    return function (event) {\n      if (event) {\n        event.preventDefault();\n      }\n\n      alertInstance.close(this);\n    };\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$7, SELECTOR_DISMISS, Alert.handleDismiss(new Alert()));\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Alert to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Alert);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): button.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$b = 'button';\nconst DATA_KEY$a = 'bs.button';\nconst EVENT_KEY$a = `.${DATA_KEY$a}`;\nconst DATA_API_KEY$7 = '.data-api';\nconst CLASS_NAME_ACTIVE$3 = 'active';\nconst SELECTOR_DATA_TOGGLE$5 = '[data-bs-toggle=\"button\"]';\nconst EVENT_CLICK_DATA_API$6 = `click${EVENT_KEY$a}${DATA_API_KEY$7}`;\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Button extends BaseComponent {\n  // Getters\n  static get NAME() {\n    return NAME$b;\n  } // Public\n\n\n  toggle() {\n    // Toggle class and sync the `aria-pressed` attribute with the return value of the `.toggle()` method\n    this._element.setAttribute('aria-pressed', this._element.classList.toggle(CLASS_NAME_ACTIVE$3));\n  } // Static\n\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Button.getOrCreateInstance(this);\n\n      if (config === 'toggle') {\n        data[config]();\n      }\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$6, SELECTOR_DATA_TOGGLE$5, event => {\n  event.preventDefault();\n  const button = event.target.closest(SELECTOR_DATA_TOGGLE$5);\n  const data = Button.getOrCreateInstance(button);\n  data.toggle();\n});\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Button to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Button);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): dom/manipulator.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\nfunction normalizeData(val) {\n  if (val === 'true') {\n    return true;\n  }\n\n  if (val === 'false') {\n    return false;\n  }\n\n  if (val === Number(val).toString()) {\n    return Number(val);\n  }\n\n  if (val === '' || val === 'null') {\n    return null;\n  }\n\n  return val;\n}\n\nfunction normalizeDataKey(key) {\n  return key.replace(/[A-Z]/g, chr => `-${chr.toLowerCase()}`);\n}\n\nconst Manipulator = {\n  setDataAttribute(element, key, value) {\n    element.setAttribute(`data-bs-${normalizeDataKey(key)}`, value);\n  },\n\n  removeDataAttribute(element, key) {\n    element.removeAttribute(`data-bs-${normalizeDataKey(key)}`);\n  },\n\n  getDataAttributes(element) {\n    if (!element) {\n      return {};\n    }\n\n    const attributes = {};\n    Object.keys(element.dataset).filter(key => key.startsWith('bs')).forEach(key => {\n      let pureKey = key.replace(/^bs/, '');\n      pureKey = pureKey.charAt(0).toLowerCase() + pureKey.slice(1, pureKey.length);\n      attributes[pureKey] = normalizeData(element.dataset[key]);\n    });\n    return attributes;\n  },\n\n  getDataAttribute(element, key) {\n    return normalizeData(element.getAttribute(`data-bs-${normalizeDataKey(key)}`));\n  },\n\n  offset(element) {\n    const rect = element.getBoundingClientRect();\n    return {\n      top: rect.top + document.body.scrollTop,\n      left: rect.left + document.body.scrollLeft\n    };\n  },\n\n  position(element) {\n    return {\n      top: element.offsetTop,\n      left: element.offsetLeft\n    };\n  }\n\n};\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): carousel.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$a = 'carousel';\nconst DATA_KEY$9 = 'bs.carousel';\nconst EVENT_KEY$9 = `.${DATA_KEY$9}`;\nconst DATA_API_KEY$6 = '.data-api';\nconst ARROW_LEFT_KEY = 'ArrowLeft';\nconst ARROW_RIGHT_KEY = 'ArrowRight';\nconst TOUCHEVENT_COMPAT_WAIT = 500; // Time for mouse compat events to fire after touch\n\nconst SWIPE_THRESHOLD = 40;\nconst Default$9 = {\n  interval: 5000,\n  keyboard: true,\n  slide: false,\n  pause: 'hover',\n  wrap: true,\n  touch: true\n};\nconst DefaultType$9 = {\n  interval: '(number|boolean)',\n  keyboard: 'boolean',\n  slide: '(boolean|string)',\n  pause: '(string|boolean)',\n  wrap: 'boolean',\n  touch: 'boolean'\n};\nconst ORDER_NEXT = 'next';\nconst ORDER_PREV = 'prev';\nconst DIRECTION_LEFT = 'left';\nconst DIRECTION_RIGHT = 'right';\nconst KEY_TO_DIRECTION = {\n  [ARROW_LEFT_KEY]: DIRECTION_RIGHT,\n  [ARROW_RIGHT_KEY]: DIRECTION_LEFT\n};\nconst EVENT_SLIDE = `slide${EVENT_KEY$9}`;\nconst EVENT_SLID = `slid${EVENT_KEY$9}`;\nconst EVENT_KEYDOWN = `keydown${EVENT_KEY$9}`;\nconst EVENT_MOUSEENTER = `mouseenter${EVENT_KEY$9}`;\nconst EVENT_MOUSELEAVE = `mouseleave${EVENT_KEY$9}`;\nconst EVENT_TOUCHSTART = `touchstart${EVENT_KEY$9}`;\nconst EVENT_TOUCHMOVE = `touchmove${EVENT_KEY$9}`;\nconst EVENT_TOUCHEND = `touchend${EVENT_KEY$9}`;\nconst EVENT_POINTERDOWN = `pointerdown${EVENT_KEY$9}`;\nconst EVENT_POINTERUP = `pointerup${EVENT_KEY$9}`;\nconst EVENT_DRAG_START = `dragstart${EVENT_KEY$9}`;\nconst EVENT_LOAD_DATA_API$2 = `load${EVENT_KEY$9}${DATA_API_KEY$6}`;\nconst EVENT_CLICK_DATA_API$5 = `click${EVENT_KEY$9}${DATA_API_KEY$6}`;\nconst CLASS_NAME_CAROUSEL = 'carousel';\nconst CLASS_NAME_ACTIVE$2 = 'active';\nconst CLASS_NAME_SLIDE = 'slide';\nconst CLASS_NAME_END = 'carousel-item-end';\nconst CLASS_NAME_START = 'carousel-item-start';\nconst CLASS_NAME_NEXT = 'carousel-item-next';\nconst CLASS_NAME_PREV = 'carousel-item-prev';\nconst CLASS_NAME_POINTER_EVENT = 'pointer-event';\nconst SELECTOR_ACTIVE$1 = '.active';\nconst SELECTOR_ACTIVE_ITEM = '.active.carousel-item';\nconst SELECTOR_ITEM = '.carousel-item';\nconst SELECTOR_ITEM_IMG = '.carousel-item img';\nconst SELECTOR_NEXT_PREV = '.carousel-item-next, .carousel-item-prev';\nconst SELECTOR_INDICATORS = '.carousel-indicators';\nconst SELECTOR_INDICATOR = '[data-bs-target]';\nconst SELECTOR_DATA_SLIDE = '[data-bs-slide], [data-bs-slide-to]';\nconst SELECTOR_DATA_RIDE = '[data-bs-ride=\"carousel\"]';\nconst POINTER_TYPE_TOUCH = 'touch';\nconst POINTER_TYPE_PEN = 'pen';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Carousel extends BaseComponent {\n  constructor(element, config) {\n    super(element);\n    this._items = null;\n    this._interval = null;\n    this._activeElement = null;\n    this._isPaused = false;\n    this._isSliding = false;\n    this.touchTimeout = null;\n    this.touchStartX = 0;\n    this.touchDeltaX = 0;\n    this._config = this._getConfig(config);\n    this._indicatorsElement = SelectorEngine.findOne(SELECTOR_INDICATORS, this._element);\n    this._touchSupported = 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0;\n    this._pointerEvent = Boolean(window.PointerEvent);\n\n    this._addEventListeners();\n  } // Getters\n\n\n  static get Default() {\n    return Default$9;\n  }\n\n  static get NAME() {\n    return NAME$a;\n  } // Public\n\n\n  next() {\n    this._slide(ORDER_NEXT);\n  }\n\n  nextWhenVisible() {\n    // Don't call next when the page isn't visible\n    // or the carousel or its parent isn't visible\n    if (!document.hidden && isVisible(this._element)) {\n      this.next();\n    }\n  }\n\n  prev() {\n    this._slide(ORDER_PREV);\n  }\n\n  pause(event) {\n    if (!event) {\n      this._isPaused = true;\n    }\n\n    if (SelectorEngine.findOne(SELECTOR_NEXT_PREV, this._element)) {\n      triggerTransitionEnd(this._element);\n      this.cycle(true);\n    }\n\n    clearInterval(this._interval);\n    this._interval = null;\n  }\n\n  cycle(event) {\n    if (!event) {\n      this._isPaused = false;\n    }\n\n    if (this._interval) {\n      clearInterval(this._interval);\n      this._interval = null;\n    }\n\n    if (this._config && this._config.interval && !this._isPaused) {\n      this._updateInterval();\n\n      this._interval = setInterval((document.visibilityState ? this.nextWhenVisible : this.next).bind(this), this._config.interval);\n    }\n  }\n\n  to(index) {\n    this._activeElement = SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element);\n\n    const activeIndex = this._getItemIndex(this._activeElement);\n\n    if (index > this._items.length - 1 || index < 0) {\n      return;\n    }\n\n    if (this._isSliding) {\n      EventHandler.one(this._element, EVENT_SLID, () => this.to(index));\n      return;\n    }\n\n    if (activeIndex === index) {\n      this.pause();\n      this.cycle();\n      return;\n    }\n\n    const order = index > activeIndex ? ORDER_NEXT : ORDER_PREV;\n\n    this._slide(order, this._items[index]);\n  } // Private\n\n\n  _getConfig(config) {\n    config = { ...Default$9,\n      ...Manipulator.getDataAttributes(this._element),\n      ...(typeof config === 'object' ? config : {})\n    };\n    typeCheckConfig(NAME$a, config, DefaultType$9);\n    return config;\n  }\n\n  _handleSwipe() {\n    const absDeltax = Math.abs(this.touchDeltaX);\n\n    if (absDeltax <= SWIPE_THRESHOLD) {\n      return;\n    }\n\n    const direction = absDeltax / this.touchDeltaX;\n    this.touchDeltaX = 0;\n\n    if (!direction) {\n      return;\n    }\n\n    this._slide(direction > 0 ? DIRECTION_RIGHT : DIRECTION_LEFT);\n  }\n\n  _addEventListeners() {\n    if (this._config.keyboard) {\n      EventHandler.on(this._element, EVENT_KEYDOWN, event => this._keydown(event));\n    }\n\n    if (this._config.pause === 'hover') {\n      EventHandler.on(this._element, EVENT_MOUSEENTER, event => this.pause(event));\n      EventHandler.on(this._element, EVENT_MOUSELEAVE, event => this.cycle(event));\n    }\n\n    if (this._config.touch && this._touchSupported) {\n      this._addTouchEventListeners();\n    }\n  }\n\n  _addTouchEventListeners() {\n    const start = event => {\n      if (this._pointerEvent && (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH)) {\n        this.touchStartX = event.clientX;\n      } else if (!this._pointerEvent) {\n        this.touchStartX = event.touches[0].clientX;\n      }\n    };\n\n    const move = event => {\n      // ensure swiping with one touch and not pinching\n      this.touchDeltaX = event.touches && event.touches.length > 1 ? 0 : event.touches[0].clientX - this.touchStartX;\n    };\n\n    const end = event => {\n      if (this._pointerEvent && (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH)) {\n        this.touchDeltaX = event.clientX - this.touchStartX;\n      }\n\n      this._handleSwipe();\n\n      if (this._config.pause === 'hover') {\n        // If it's a touch-enabled device, mouseenter/leave are fired as\n        // part of the mouse compatibility events on first tap - the carousel\n        // would stop cycling until user tapped out of it;\n        // here, we listen for touchend, explicitly pause the carousel\n        // (as if it's the second time we tap on it, mouseenter compat event\n        // is NOT fired) and after a timeout (to allow for mouse compatibility\n        // events to fire) we explicitly restart cycling\n        this.pause();\n\n        if (this.touchTimeout) {\n          clearTimeout(this.touchTimeout);\n        }\n\n        this.touchTimeout = setTimeout(event => this.cycle(event), TOUCHEVENT_COMPAT_WAIT + this._config.interval);\n      }\n    };\n\n    SelectorEngine.find(SELECTOR_ITEM_IMG, this._element).forEach(itemImg => {\n      EventHandler.on(itemImg, EVENT_DRAG_START, e => e.preventDefault());\n    });\n\n    if (this._pointerEvent) {\n      EventHandler.on(this._element, EVENT_POINTERDOWN, event => start(event));\n      EventHandler.on(this._element, EVENT_POINTERUP, event => end(event));\n\n      this._element.classList.add(CLASS_NAME_POINTER_EVENT);\n    } else {\n      EventHandler.on(this._element, EVENT_TOUCHSTART, event => start(event));\n      EventHandler.on(this._element, EVENT_TOUCHMOVE, event => move(event));\n      EventHandler.on(this._element, EVENT_TOUCHEND, event => end(event));\n    }\n  }\n\n  _keydown(event) {\n    if (/input|textarea/i.test(event.target.tagName)) {\n      return;\n    }\n\n    const direction = KEY_TO_DIRECTION[event.key];\n\n    if (direction) {\n      event.preventDefault();\n\n      this._slide(direction);\n    }\n  }\n\n  _getItemIndex(element) {\n    this._items = element && element.parentNode ? SelectorEngine.find(SELECTOR_ITEM, element.parentNode) : [];\n    return this._items.indexOf(element);\n  }\n\n  _getItemByOrder(order, activeElement) {\n    const isNext = order === ORDER_NEXT;\n    return getNextActiveElement(this._items, activeElement, isNext, this._config.wrap);\n  }\n\n  _triggerSlideEvent(relatedTarget, eventDirectionName) {\n    const targetIndex = this._getItemIndex(relatedTarget);\n\n    const fromIndex = this._getItemIndex(SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element));\n\n    return EventHandler.trigger(this._element, EVENT_SLIDE, {\n      relatedTarget,\n      direction: eventDirectionName,\n      from: fromIndex,\n      to: targetIndex\n    });\n  }\n\n  _setActiveIndicatorElement(element) {\n    if (this._indicatorsElement) {\n      const activeIndicator = SelectorEngine.findOne(SELECTOR_ACTIVE$1, this._indicatorsElement);\n      activeIndicator.classList.remove(CLASS_NAME_ACTIVE$2);\n      activeIndicator.removeAttribute('aria-current');\n      const indicators = SelectorEngine.find(SELECTOR_INDICATOR, this._indicatorsElement);\n\n      for (let i = 0; i < indicators.length; i++) {\n        if (Number.parseInt(indicators[i].getAttribute('data-bs-slide-to'), 10) === this._getItemIndex(element)) {\n          indicators[i].classList.add(CLASS_NAME_ACTIVE$2);\n          indicators[i].setAttribute('aria-current', 'true');\n          break;\n        }\n      }\n    }\n  }\n\n  _updateInterval() {\n    const element = this._activeElement || SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element);\n\n    if (!element) {\n      return;\n    }\n\n    const elementInterval = Number.parseInt(element.getAttribute('data-bs-interval'), 10);\n\n    if (elementInterval) {\n      this._config.defaultInterval = this._config.defaultInterval || this._config.interval;\n      this._config.interval = elementInterval;\n    } else {\n      this._config.interval = this._config.defaultInterval || this._config.interval;\n    }\n  }\n\n  _slide(directionOrOrder, element) {\n    const order = this._directionToOrder(directionOrOrder);\n\n    const activeElement = SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element);\n\n    const activeElementIndex = this._getItemIndex(activeElement);\n\n    const nextElement = element || this._getItemByOrder(order, activeElement);\n\n    const nextElementIndex = this._getItemIndex(nextElement);\n\n    const isCycling = Boolean(this._interval);\n    const isNext = order === ORDER_NEXT;\n    const directionalClassName = isNext ? CLASS_NAME_START : CLASS_NAME_END;\n    const orderClassName = isNext ? CLASS_NAME_NEXT : CLASS_NAME_PREV;\n\n    const eventDirectionName = this._orderToDirection(order);\n\n    if (nextElement && nextElement.classList.contains(CLASS_NAME_ACTIVE$2)) {\n      this._isSliding = false;\n      return;\n    }\n\n    if (this._isSliding) {\n      return;\n    }\n\n    const slideEvent = this._triggerSlideEvent(nextElement, eventDirectionName);\n\n    if (slideEvent.defaultPrevented) {\n      return;\n    }\n\n    if (!activeElement || !nextElement) {\n      // Some weirdness is happening, so we bail\n      return;\n    }\n\n    this._isSliding = true;\n\n    if (isCycling) {\n      this.pause();\n    }\n\n    this._setActiveIndicatorElement(nextElement);\n\n    this._activeElement = nextElement;\n\n    const triggerSlidEvent = () => {\n      EventHandler.trigger(this._element, EVENT_SLID, {\n        relatedTarget: nextElement,\n        direction: eventDirectionName,\n        from: activeElementIndex,\n        to: nextElementIndex\n      });\n    };\n\n    if (this._element.classList.contains(CLASS_NAME_SLIDE)) {\n      nextElement.classList.add(orderClassName);\n      reflow(nextElement);\n      activeElement.classList.add(directionalClassName);\n      nextElement.classList.add(directionalClassName);\n\n      const completeCallBack = () => {\n        nextElement.classList.remove(directionalClassName, orderClassName);\n        nextElement.classList.add(CLASS_NAME_ACTIVE$2);\n        activeElement.classList.remove(CLASS_NAME_ACTIVE$2, orderClassName, directionalClassName);\n        this._isSliding = false;\n        setTimeout(triggerSlidEvent, 0);\n      };\n\n      this._queueCallback(completeCallBack, activeElement, true);\n    } else {\n      activeElement.classList.remove(CLASS_NAME_ACTIVE$2);\n      nextElement.classList.add(CLASS_NAME_ACTIVE$2);\n      this._isSliding = false;\n      triggerSlidEvent();\n    }\n\n    if (isCycling) {\n      this.cycle();\n    }\n  }\n\n  _directionToOrder(direction) {\n    if (![DIRECTION_RIGHT, DIRECTION_LEFT].includes(direction)) {\n      return direction;\n    }\n\n    if (isRTL()) {\n      return direction === DIRECTION_LEFT ? ORDER_PREV : ORDER_NEXT;\n    }\n\n    return direction === DIRECTION_LEFT ? ORDER_NEXT : ORDER_PREV;\n  }\n\n  _orderToDirection(order) {\n    if (![ORDER_NEXT, ORDER_PREV].includes(order)) {\n      return order;\n    }\n\n    if (isRTL()) {\n      return order === ORDER_PREV ? DIRECTION_LEFT : DIRECTION_RIGHT;\n    }\n\n    return order === ORDER_PREV ? DIRECTION_RIGHT : DIRECTION_LEFT;\n  } // Static\n\n\n  static carouselInterface(element, config) {\n    const data = Carousel.getOrCreateInstance(element, config);\n    let {\n      _config\n    } = data;\n\n    if (typeof config === 'object') {\n      _config = { ..._config,\n        ...config\n      };\n    }\n\n    const action = typeof config === 'string' ? config : _config.slide;\n\n    if (typeof config === 'number') {\n      data.to(config);\n    } else if (typeof action === 'string') {\n      if (typeof data[action] === 'undefined') {\n        throw new TypeError(`No method named \"${action}\"`);\n      }\n\n      data[action]();\n    } else if (_config.interval && _config.ride) {\n      data.pause();\n      data.cycle();\n    }\n  }\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      Carousel.carouselInterface(this, config);\n    });\n  }\n\n  static dataApiClickHandler(event) {\n    const target = getElementFromSelector(this);\n\n    if (!target || !target.classList.contains(CLASS_NAME_CAROUSEL)) {\n      return;\n    }\n\n    const config = { ...Manipulator.getDataAttributes(target),\n      ...Manipulator.getDataAttributes(this)\n    };\n    const slideIndex = this.getAttribute('data-bs-slide-to');\n\n    if (slideIndex) {\n      config.interval = false;\n    }\n\n    Carousel.carouselInterface(target, config);\n\n    if (slideIndex) {\n      Carousel.getInstance(target).to(slideIndex);\n    }\n\n    event.preventDefault();\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$5, SELECTOR_DATA_SLIDE, Carousel.dataApiClickHandler);\nEventHandler.on(window, EVENT_LOAD_DATA_API$2, () => {\n  const carousels = SelectorEngine.find(SELECTOR_DATA_RIDE);\n\n  for (let i = 0, len = carousels.length; i < len; i++) {\n    Carousel.carouselInterface(carousels[i], Carousel.getInstance(carousels[i]));\n  }\n});\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Carousel to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Carousel);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): collapse.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$9 = 'collapse';\nconst DATA_KEY$8 = 'bs.collapse';\nconst EVENT_KEY$8 = `.${DATA_KEY$8}`;\nconst DATA_API_KEY$5 = '.data-api';\nconst Default$8 = {\n  toggle: true,\n  parent: ''\n};\nconst DefaultType$8 = {\n  toggle: 'boolean',\n  parent: '(string|element)'\n};\nconst EVENT_SHOW$5 = `show${EVENT_KEY$8}`;\nconst EVENT_SHOWN$5 = `shown${EVENT_KEY$8}`;\nconst EVENT_HIDE$5 = `hide${EVENT_KEY$8}`;\nconst EVENT_HIDDEN$5 = `hidden${EVENT_KEY$8}`;\nconst EVENT_CLICK_DATA_API$4 = `click${EVENT_KEY$8}${DATA_API_KEY$5}`;\nconst CLASS_NAME_SHOW$8 = 'show';\nconst CLASS_NAME_COLLAPSE = 'collapse';\nconst CLASS_NAME_COLLAPSING = 'collapsing';\nconst CLASS_NAME_COLLAPSED = 'collapsed';\nconst WIDTH = 'width';\nconst HEIGHT = 'height';\nconst SELECTOR_ACTIVES = '.show, .collapsing';\nconst SELECTOR_DATA_TOGGLE$4 = '[data-bs-toggle=\"collapse\"]';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Collapse extends BaseComponent {\n  constructor(element, config) {\n    super(element);\n    this._isTransitioning = false;\n    this._config = this._getConfig(config);\n    this._triggerArray = SelectorEngine.find(`${SELECTOR_DATA_TOGGLE$4}[href=\"#${this._element.id}\"],` + `${SELECTOR_DATA_TOGGLE$4}[data-bs-target=\"#${this._element.id}\"]`);\n    const toggleList = SelectorEngine.find(SELECTOR_DATA_TOGGLE$4);\n\n    for (let i = 0, len = toggleList.length; i < len; i++) {\n      const elem = toggleList[i];\n      const selector = getSelectorFromElement(elem);\n      const filterElement = SelectorEngine.find(selector).filter(foundElem => foundElem === this._element);\n\n      if (selector !== null && filterElement.length) {\n        this._selector = selector;\n\n        this._triggerArray.push(elem);\n      }\n    }\n\n    this._parent = this._config.parent ? this._getParent() : null;\n\n    if (!this._config.parent) {\n      this._addAriaAndCollapsedClass(this._element, this._triggerArray);\n    }\n\n    if (this._config.toggle) {\n      this.toggle();\n    }\n  } // Getters\n\n\n  static get Default() {\n    return Default$8;\n  }\n\n  static get NAME() {\n    return NAME$9;\n  } // Public\n\n\n  toggle() {\n    if (this._element.classList.contains(CLASS_NAME_SHOW$8)) {\n      this.hide();\n    } else {\n      this.show();\n    }\n  }\n\n  show() {\n    if (this._isTransitioning || this._element.classList.contains(CLASS_NAME_SHOW$8)) {\n      return;\n    }\n\n    let actives;\n    let activesData;\n\n    if (this._parent) {\n      actives = SelectorEngine.find(SELECTOR_ACTIVES, this._parent).filter(elem => {\n        if (typeof this._config.parent === 'string') {\n          return elem.getAttribute('data-bs-parent') === this._config.parent;\n        }\n\n        return elem.classList.contains(CLASS_NAME_COLLAPSE);\n      });\n\n      if (actives.length === 0) {\n        actives = null;\n      }\n    }\n\n    const container = SelectorEngine.findOne(this._selector);\n\n    if (actives) {\n      const tempActiveData = actives.find(elem => container !== elem);\n      activesData = tempActiveData ? Collapse.getInstance(tempActiveData) : null;\n\n      if (activesData && activesData._isTransitioning) {\n        return;\n      }\n    }\n\n    const startEvent = EventHandler.trigger(this._element, EVENT_SHOW$5);\n\n    if (startEvent.defaultPrevented) {\n      return;\n    }\n\n    if (actives) {\n      actives.forEach(elemActive => {\n        if (container !== elemActive) {\n          Collapse.collapseInterface(elemActive, 'hide');\n        }\n\n        if (!activesData) {\n          Data.set(elemActive, DATA_KEY$8, null);\n        }\n      });\n    }\n\n    const dimension = this._getDimension();\n\n    this._element.classList.remove(CLASS_NAME_COLLAPSE);\n\n    this._element.classList.add(CLASS_NAME_COLLAPSING);\n\n    this._element.style[dimension] = 0;\n\n    if (this._triggerArray.length) {\n      this._triggerArray.forEach(element => {\n        element.classList.remove(CLASS_NAME_COLLAPSED);\n        element.setAttribute('aria-expanded', true);\n      });\n    }\n\n    this.setTransitioning(true);\n\n    const complete = () => {\n      this._element.classList.remove(CLASS_NAME_COLLAPSING);\n\n      this._element.classList.add(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$8);\n\n      this._element.style[dimension] = '';\n      this.setTransitioning(false);\n      EventHandler.trigger(this._element, EVENT_SHOWN$5);\n    };\n\n    const capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1);\n    const scrollSize = `scroll${capitalizedDimension}`;\n\n    this._queueCallback(complete, this._element, true);\n\n    this._element.style[dimension] = `${this._element[scrollSize]}px`;\n  }\n\n  hide() {\n    if (this._isTransitioning || !this._element.classList.contains(CLASS_NAME_SHOW$8)) {\n      return;\n    }\n\n    const startEvent = EventHandler.trigger(this._element, EVENT_HIDE$5);\n\n    if (startEvent.defaultPrevented) {\n      return;\n    }\n\n    const dimension = this._getDimension();\n\n    this._element.style[dimension] = `${this._element.getBoundingClientRect()[dimension]}px`;\n    reflow(this._element);\n\n    this._element.classList.add(CLASS_NAME_COLLAPSING);\n\n    this._element.classList.remove(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$8);\n\n    const triggerArrayLength = this._triggerArray.length;\n\n    if (triggerArrayLength > 0) {\n      for (let i = 0; i < triggerArrayLength; i++) {\n        const trigger = this._triggerArray[i];\n        const elem = getElementFromSelector(trigger);\n\n        if (elem && !elem.classList.contains(CLASS_NAME_SHOW$8)) {\n          trigger.classList.add(CLASS_NAME_COLLAPSED);\n          trigger.setAttribute('aria-expanded', false);\n        }\n      }\n    }\n\n    this.setTransitioning(true);\n\n    const complete = () => {\n      this.setTransitioning(false);\n\n      this._element.classList.remove(CLASS_NAME_COLLAPSING);\n\n      this._element.classList.add(CLASS_NAME_COLLAPSE);\n\n      EventHandler.trigger(this._element, EVENT_HIDDEN$5);\n    };\n\n    this._element.style[dimension] = '';\n\n    this._queueCallback(complete, this._element, true);\n  }\n\n  setTransitioning(isTransitioning) {\n    this._isTransitioning = isTransitioning;\n  } // Private\n\n\n  _getConfig(config) {\n    config = { ...Default$8,\n      ...config\n    };\n    config.toggle = Boolean(config.toggle); // Coerce string values\n\n    typeCheckConfig(NAME$9, config, DefaultType$8);\n    return config;\n  }\n\n  _getDimension() {\n    return this._element.classList.contains(WIDTH) ? WIDTH : HEIGHT;\n  }\n\n  _getParent() {\n    let {\n      parent\n    } = this._config;\n    parent = getElement(parent);\n    const selector = `${SELECTOR_DATA_TOGGLE$4}[data-bs-parent=\"${parent}\"]`;\n    SelectorEngine.find(selector, parent).forEach(element => {\n      const selected = getElementFromSelector(element);\n\n      this._addAriaAndCollapsedClass(selected, [element]);\n    });\n    return parent;\n  }\n\n  _addAriaAndCollapsedClass(element, triggerArray) {\n    if (!element || !triggerArray.length) {\n      return;\n    }\n\n    const isOpen = element.classList.contains(CLASS_NAME_SHOW$8);\n    triggerArray.forEach(elem => {\n      if (isOpen) {\n        elem.classList.remove(CLASS_NAME_COLLAPSED);\n      } else {\n        elem.classList.add(CLASS_NAME_COLLAPSED);\n      }\n\n      elem.setAttribute('aria-expanded', isOpen);\n    });\n  } // Static\n\n\n  static collapseInterface(element, config) {\n    let data = Collapse.getInstance(element);\n    const _config = { ...Default$8,\n      ...Manipulator.getDataAttributes(element),\n      ...(typeof config === 'object' && config ? config : {})\n    };\n\n    if (!data && _config.toggle && typeof config === 'string' && /show|hide/.test(config)) {\n      _config.toggle = false;\n    }\n\n    if (!data) {\n      data = new Collapse(element, _config);\n    }\n\n    if (typeof config === 'string') {\n      if (typeof data[config] === 'undefined') {\n        throw new TypeError(`No method named \"${config}\"`);\n      }\n\n      data[config]();\n    }\n  }\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      Collapse.collapseInterface(this, config);\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$4, SELECTOR_DATA_TOGGLE$4, function (event) {\n  // preventDefault only for <a> elements (which change the URL) not inside the collapsible element\n  if (event.target.tagName === 'A' || event.delegateTarget && event.delegateTarget.tagName === 'A') {\n    event.preventDefault();\n  }\n\n  const triggerData = Manipulator.getDataAttributes(this);\n  const selector = getSelectorFromElement(this);\n  const selectorElements = SelectorEngine.find(selector);\n  selectorElements.forEach(element => {\n    const data = Collapse.getInstance(element);\n    let config;\n\n    if (data) {\n      // update parent attribute\n      if (data._parent === null && typeof triggerData.parent === 'string') {\n        data._config.parent = triggerData.parent;\n        data._parent = data._getParent();\n      }\n\n      config = 'toggle';\n    } else {\n      config = triggerData;\n    }\n\n    Collapse.collapseInterface(element, config);\n  });\n});\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Collapse to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Collapse);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): dropdown.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$8 = 'dropdown';\nconst DATA_KEY$7 = 'bs.dropdown';\nconst EVENT_KEY$7 = `.${DATA_KEY$7}`;\nconst DATA_API_KEY$4 = '.data-api';\nconst ESCAPE_KEY$2 = 'Escape';\nconst SPACE_KEY = 'Space';\nconst TAB_KEY = 'Tab';\nconst ARROW_UP_KEY = 'ArrowUp';\nconst ARROW_DOWN_KEY = 'ArrowDown';\nconst RIGHT_MOUSE_BUTTON = 2; // MouseEvent.button value for the secondary button, usually the right button\n\nconst REGEXP_KEYDOWN = new RegExp(`${ARROW_UP_KEY}|${ARROW_DOWN_KEY}|${ESCAPE_KEY$2}`);\nconst EVENT_HIDE$4 = `hide${EVENT_KEY$7}`;\nconst EVENT_HIDDEN$4 = `hidden${EVENT_KEY$7}`;\nconst EVENT_SHOW$4 = `show${EVENT_KEY$7}`;\nconst EVENT_SHOWN$4 = `shown${EVENT_KEY$7}`;\nconst EVENT_CLICK = `click${EVENT_KEY$7}`;\nconst EVENT_CLICK_DATA_API$3 = `click${EVENT_KEY$7}${DATA_API_KEY$4}`;\nconst EVENT_KEYDOWN_DATA_API = `keydown${EVENT_KEY$7}${DATA_API_KEY$4}`;\nconst EVENT_KEYUP_DATA_API = `keyup${EVENT_KEY$7}${DATA_API_KEY$4}`;\nconst CLASS_NAME_SHOW$7 = 'show';\nconst CLASS_NAME_DROPUP = 'dropup';\nconst CLASS_NAME_DROPEND = 'dropend';\nconst CLASS_NAME_DROPSTART = 'dropstart';\nconst CLASS_NAME_NAVBAR = 'navbar';\nconst SELECTOR_DATA_TOGGLE$3 = '[data-bs-toggle=\"dropdown\"]';\nconst SELECTOR_MENU = '.dropdown-menu';\nconst SELECTOR_NAVBAR_NAV = '.navbar-nav';\nconst SELECTOR_VISIBLE_ITEMS = '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)';\nconst PLACEMENT_TOP = isRTL() ? 'top-end' : 'top-start';\nconst PLACEMENT_TOPEND = isRTL() ? 'top-start' : 'top-end';\nconst PLACEMENT_BOTTOM = isRTL() ? 'bottom-end' : 'bottom-start';\nconst PLACEMENT_BOTTOMEND = isRTL() ? 'bottom-start' : 'bottom-end';\nconst PLACEMENT_RIGHT = isRTL() ? 'left-start' : 'right-start';\nconst PLACEMENT_LEFT = isRTL() ? 'right-start' : 'left-start';\nconst Default$7 = {\n  offset: [0, 2],\n  boundary: 'clippingParents',\n  reference: 'toggle',\n  display: 'dynamic',\n  popperConfig: null,\n  autoClose: true\n};\nconst DefaultType$7 = {\n  offset: '(array|string|function)',\n  boundary: '(string|element)',\n  reference: '(string|element|object)',\n  display: 'string',\n  popperConfig: '(null|object|function)',\n  autoClose: '(boolean|string)'\n};\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Dropdown extends BaseComponent {\n  constructor(element, config) {\n    super(element);\n    this._popper = null;\n    this._config = this._getConfig(config);\n    this._menu = this._getMenuElement();\n    this._inNavbar = this._detectNavbar();\n\n    this._addEventListeners();\n  } // Getters\n\n\n  static get Default() {\n    return Default$7;\n  }\n\n  static get DefaultType() {\n    return DefaultType$7;\n  }\n\n  static get NAME() {\n    return NAME$8;\n  } // Public\n\n\n  toggle() {\n    if (isDisabled(this._element)) {\n      return;\n    }\n\n    const isActive = this._element.classList.contains(CLASS_NAME_SHOW$7);\n\n    if (isActive) {\n      this.hide();\n      return;\n    }\n\n    this.show();\n  }\n\n  show() {\n    if (isDisabled(this._element) || this._menu.classList.contains(CLASS_NAME_SHOW$7)) {\n      return;\n    }\n\n    const parent = Dropdown.getParentFromElement(this._element);\n    const relatedTarget = {\n      relatedTarget: this._element\n    };\n    const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$4, relatedTarget);\n\n    if (showEvent.defaultPrevented) {\n      return;\n    } // Totally disable Popper for Dropdowns in Navbar\n\n\n    if (this._inNavbar) {\n      Manipulator.setDataAttribute(this._menu, 'popper', 'none');\n    } else {\n      if (typeof Popper === 'undefined') {\n        throw new TypeError('Bootstrap\\'s dropdowns require Popper (https://popper.js.org)');\n      }\n\n      let referenceElement = this._element;\n\n      if (this._config.reference === 'parent') {\n        referenceElement = parent;\n      } else if (isElement(this._config.reference)) {\n        referenceElement = getElement(this._config.reference);\n      } else if (typeof this._config.reference === 'object') {\n        referenceElement = this._config.reference;\n      }\n\n      const popperConfig = this._getPopperConfig();\n\n      const isDisplayStatic = popperConfig.modifiers.find(modifier => modifier.name === 'applyStyles' && modifier.enabled === false);\n      this._popper = Popper.createPopper(referenceElement, this._menu, popperConfig);\n\n      if (isDisplayStatic) {\n        Manipulator.setDataAttribute(this._menu, 'popper', 'static');\n      }\n    } // If this is a touch-enabled device we add extra\n    // empty mouseover listeners to the body's immediate children;\n    // only needed because of broken event delegation on iOS\n    // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n\n\n    if ('ontouchstart' in document.documentElement && !parent.closest(SELECTOR_NAVBAR_NAV)) {\n      [].concat(...document.body.children).forEach(elem => EventHandler.on(elem, 'mouseover', noop));\n    }\n\n    this._element.focus();\n\n    this._element.setAttribute('aria-expanded', true);\n\n    this._menu.classList.toggle(CLASS_NAME_SHOW$7);\n\n    this._element.classList.toggle(CLASS_NAME_SHOW$7);\n\n    EventHandler.trigger(this._element, EVENT_SHOWN$4, relatedTarget);\n  }\n\n  hide() {\n    if (isDisabled(this._element) || !this._menu.classList.contains(CLASS_NAME_SHOW$7)) {\n      return;\n    }\n\n    const relatedTarget = {\n      relatedTarget: this._element\n    };\n\n    this._completeHide(relatedTarget);\n  }\n\n  dispose() {\n    if (this._popper) {\n      this._popper.destroy();\n    }\n\n    super.dispose();\n  }\n\n  update() {\n    this._inNavbar = this._detectNavbar();\n\n    if (this._popper) {\n      this._popper.update();\n    }\n  } // Private\n\n\n  _addEventListeners() {\n    EventHandler.on(this._element, EVENT_CLICK, event => {\n      event.preventDefault();\n      this.toggle();\n    });\n  }\n\n  _completeHide(relatedTarget) {\n    const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$4, relatedTarget);\n\n    if (hideEvent.defaultPrevented) {\n      return;\n    } // If this is a touch-enabled device we remove the extra\n    // empty mouseover listeners we added for iOS support\n\n\n    if ('ontouchstart' in document.documentElement) {\n      [].concat(...document.body.children).forEach(elem => EventHandler.off(elem, 'mouseover', noop));\n    }\n\n    if (this._popper) {\n      this._popper.destroy();\n    }\n\n    this._menu.classList.remove(CLASS_NAME_SHOW$7);\n\n    this._element.classList.remove(CLASS_NAME_SHOW$7);\n\n    this._element.setAttribute('aria-expanded', 'false');\n\n    Manipulator.removeDataAttribute(this._menu, 'popper');\n    EventHandler.trigger(this._element, EVENT_HIDDEN$4, relatedTarget);\n  }\n\n  _getConfig(config) {\n    config = { ...this.constructor.Default,\n      ...Manipulator.getDataAttributes(this._element),\n      ...config\n    };\n    typeCheckConfig(NAME$8, config, this.constructor.DefaultType);\n\n    if (typeof config.reference === 'object' && !isElement(config.reference) && typeof config.reference.getBoundingClientRect !== 'function') {\n      // Popper virtual elements require a getBoundingClientRect method\n      throw new TypeError(`${NAME$8.toUpperCase()}: Option \"reference\" provided type \"object\" without a required \"getBoundingClientRect\" method.`);\n    }\n\n    return config;\n  }\n\n  _getMenuElement() {\n    return SelectorEngine.next(this._element, SELECTOR_MENU)[0];\n  }\n\n  _getPlacement() {\n    const parentDropdown = this._element.parentNode;\n\n    if (parentDropdown.classList.contains(CLASS_NAME_DROPEND)) {\n      return PLACEMENT_RIGHT;\n    }\n\n    if (parentDropdown.classList.contains(CLASS_NAME_DROPSTART)) {\n      return PLACEMENT_LEFT;\n    } // We need to trim the value because custom properties can also include spaces\n\n\n    const isEnd = getComputedStyle(this._menu).getPropertyValue('--bs-position').trim() === 'end';\n\n    if (parentDropdown.classList.contains(CLASS_NAME_DROPUP)) {\n      return isEnd ? PLACEMENT_TOPEND : PLACEMENT_TOP;\n    }\n\n    return isEnd ? PLACEMENT_BOTTOMEND : PLACEMENT_BOTTOM;\n  }\n\n  _detectNavbar() {\n    return this._element.closest(`.${CLASS_NAME_NAVBAR}`) !== null;\n  }\n\n  _getOffset() {\n    const {\n      offset\n    } = this._config;\n\n    if (typeof offset === 'string') {\n      return offset.split(',').map(val => Number.parseInt(val, 10));\n    }\n\n    if (typeof offset === 'function') {\n      return popperData => offset(popperData, this._element);\n    }\n\n    return offset;\n  }\n\n  _getPopperConfig() {\n    const defaultBsPopperConfig = {\n      placement: this._getPlacement(),\n      modifiers: [{\n        name: 'preventOverflow',\n        options: {\n          boundary: this._config.boundary\n        }\n      }, {\n        name: 'offset',\n        options: {\n          offset: this._getOffset()\n        }\n      }]\n    }; // Disable Popper if we have a static display\n\n    if (this._config.display === 'static') {\n      defaultBsPopperConfig.modifiers = [{\n        name: 'applyStyles',\n        enabled: false\n      }];\n    }\n\n    return { ...defaultBsPopperConfig,\n      ...(typeof this._config.popperConfig === 'function' ? this._config.popperConfig(defaultBsPopperConfig) : this._config.popperConfig)\n    };\n  }\n\n  _selectMenuItem({\n    key,\n    target\n  }) {\n    const items = SelectorEngine.find(SELECTOR_VISIBLE_ITEMS, this._menu).filter(isVisible);\n\n    if (!items.length) {\n      return;\n    } // if target isn't included in items (e.g. when expanding the dropdown)\n    // allow cycling to get the last item in case key equals ARROW_UP_KEY\n\n\n    getNextActiveElement(items, target, key === ARROW_DOWN_KEY, !items.includes(target)).focus();\n  } // Static\n\n\n  static dropdownInterface(element, config) {\n    const data = Dropdown.getOrCreateInstance(element, config);\n\n    if (typeof config === 'string') {\n      if (typeof data[config] === 'undefined') {\n        throw new TypeError(`No method named \"${config}\"`);\n      }\n\n      data[config]();\n    }\n  }\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      Dropdown.dropdownInterface(this, config);\n    });\n  }\n\n  static clearMenus(event) {\n    if (event && (event.button === RIGHT_MOUSE_BUTTON || event.type === 'keyup' && event.key !== TAB_KEY)) {\n      return;\n    }\n\n    const toggles = SelectorEngine.find(SELECTOR_DATA_TOGGLE$3);\n\n    for (let i = 0, len = toggles.length; i < len; i++) {\n      const context = Dropdown.getInstance(toggles[i]);\n\n      if (!context || context._config.autoClose === false) {\n        continue;\n      }\n\n      if (!context._element.classList.contains(CLASS_NAME_SHOW$7)) {\n        continue;\n      }\n\n      const relatedTarget = {\n        relatedTarget: context._element\n      };\n\n      if (event) {\n        const composedPath = event.composedPath();\n        const isMenuTarget = composedPath.includes(context._menu);\n\n        if (composedPath.includes(context._element) || context._config.autoClose === 'inside' && !isMenuTarget || context._config.autoClose === 'outside' && isMenuTarget) {\n          continue;\n        } // Tab navigation through the dropdown menu or events from contained inputs shouldn't close the menu\n\n\n        if (context._menu.contains(event.target) && (event.type === 'keyup' && event.key === TAB_KEY || /input|select|option|textarea|form/i.test(event.target.tagName))) {\n          continue;\n        }\n\n        if (event.type === 'click') {\n          relatedTarget.clickEvent = event;\n        }\n      }\n\n      context._completeHide(relatedTarget);\n    }\n  }\n\n  static getParentFromElement(element) {\n    return getElementFromSelector(element) || element.parentNode;\n  }\n\n  static dataApiKeydownHandler(event) {\n    // If not input/textarea:\n    //  - And not a key in REGEXP_KEYDOWN => not a dropdown command\n    // If input/textarea:\n    //  - If space key => not a dropdown command\n    //  - If key is other than escape\n    //    - If key is not up or down => not a dropdown command\n    //    - If trigger inside the menu => not a dropdown command\n    if (/input|textarea/i.test(event.target.tagName) ? event.key === SPACE_KEY || event.key !== ESCAPE_KEY$2 && (event.key !== ARROW_DOWN_KEY && event.key !== ARROW_UP_KEY || event.target.closest(SELECTOR_MENU)) : !REGEXP_KEYDOWN.test(event.key)) {\n      return;\n    }\n\n    const isActive = this.classList.contains(CLASS_NAME_SHOW$7);\n\n    if (!isActive && event.key === ESCAPE_KEY$2) {\n      return;\n    }\n\n    event.preventDefault();\n    event.stopPropagation();\n\n    if (isDisabled(this)) {\n      return;\n    }\n\n    const getToggleButton = () => this.matches(SELECTOR_DATA_TOGGLE$3) ? this : SelectorEngine.prev(this, SELECTOR_DATA_TOGGLE$3)[0];\n\n    if (event.key === ESCAPE_KEY$2) {\n      getToggleButton().focus();\n      Dropdown.clearMenus();\n      return;\n    }\n\n    if (event.key === ARROW_UP_KEY || event.key === ARROW_DOWN_KEY) {\n      if (!isActive) {\n        getToggleButton().click();\n      }\n\n      Dropdown.getInstance(getToggleButton())._selectMenuItem(event);\n\n      return;\n    }\n\n    if (!isActive || event.key === SPACE_KEY) {\n      Dropdown.clearMenus();\n    }\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_DATA_TOGGLE$3, Dropdown.dataApiKeydownHandler);\nEventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown.dataApiKeydownHandler);\nEventHandler.on(document, EVENT_CLICK_DATA_API$3, Dropdown.clearMenus);\nEventHandler.on(document, EVENT_KEYUP_DATA_API, Dropdown.clearMenus);\nEventHandler.on(document, EVENT_CLICK_DATA_API$3, SELECTOR_DATA_TOGGLE$3, function (event) {\n  event.preventDefault();\n  Dropdown.dropdownInterface(this);\n});\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Dropdown to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Dropdown);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): util/scrollBar.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\nconst SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top';\nconst SELECTOR_STICKY_CONTENT = '.sticky-top';\n\nclass ScrollBarHelper {\n  constructor() {\n    this._element = document.body;\n  }\n\n  getWidth() {\n    // https://developer.mozilla.org/en-US/docs/Web/API/Window/innerWidth#usage_notes\n    const documentWidth = document.documentElement.clientWidth;\n    return Math.abs(window.innerWidth - documentWidth);\n  }\n\n  hide() {\n    const width = this.getWidth();\n\n    this._disableOverFlow(); // give padding to element to balance the hidden scrollbar width\n\n\n    this._setElementAttributes(this._element, 'paddingRight', calculatedValue => calculatedValue + width); // trick: We adjust positive paddingRight and negative marginRight to sticky-top elements to keep showing fullwidth\n\n\n    this._setElementAttributes(SELECTOR_FIXED_CONTENT, 'paddingRight', calculatedValue => calculatedValue + width);\n\n    this._setElementAttributes(SELECTOR_STICKY_CONTENT, 'marginRight', calculatedValue => calculatedValue - width);\n  }\n\n  _disableOverFlow() {\n    this._saveInitialAttribute(this._element, 'overflow');\n\n    this._element.style.overflow = 'hidden';\n  }\n\n  _setElementAttributes(selector, styleProp, callback) {\n    const scrollbarWidth = this.getWidth();\n\n    const manipulationCallBack = element => {\n      if (element !== this._element && window.innerWidth > element.clientWidth + scrollbarWidth) {\n        return;\n      }\n\n      this._saveInitialAttribute(element, styleProp);\n\n      const calculatedValue = window.getComputedStyle(element)[styleProp];\n      element.style[styleProp] = `${callback(Number.parseFloat(calculatedValue))}px`;\n    };\n\n    this._applyManipulationCallback(selector, manipulationCallBack);\n  }\n\n  reset() {\n    this._resetElementAttributes(this._element, 'overflow');\n\n    this._resetElementAttributes(this._element, 'paddingRight');\n\n    this._resetElementAttributes(SELECTOR_FIXED_CONTENT, 'paddingRight');\n\n    this._resetElementAttributes(SELECTOR_STICKY_CONTENT, 'marginRight');\n  }\n\n  _saveInitialAttribute(element, styleProp) {\n    const actualValue = element.style[styleProp];\n\n    if (actualValue) {\n      Manipulator.setDataAttribute(element, styleProp, actualValue);\n    }\n  }\n\n  _resetElementAttributes(selector, styleProp) {\n    const manipulationCallBack = element => {\n      const value = Manipulator.getDataAttribute(element, styleProp);\n\n      if (typeof value === 'undefined') {\n        element.style.removeProperty(styleProp);\n      } else {\n        Manipulator.removeDataAttribute(element, styleProp);\n        element.style[styleProp] = value;\n      }\n    };\n\n    this._applyManipulationCallback(selector, manipulationCallBack);\n  }\n\n  _applyManipulationCallback(selector, callBack) {\n    if (isElement(selector)) {\n      callBack(selector);\n    } else {\n      SelectorEngine.find(selector, this._element).forEach(callBack);\n    }\n  }\n\n  isOverflowing() {\n    return this.getWidth() > 0;\n  }\n\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): util/backdrop.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\nconst Default$6 = {\n  isVisible: true,\n  // if false, we use the backdrop helper without adding any element to the dom\n  isAnimated: false,\n  rootElement: 'body',\n  // give the choice to place backdrop under different elements\n  clickCallback: null\n};\nconst DefaultType$6 = {\n  isVisible: 'boolean',\n  isAnimated: 'boolean',\n  rootElement: '(element|string)',\n  clickCallback: '(function|null)'\n};\nconst NAME$7 = 'backdrop';\nconst CLASS_NAME_BACKDROP = 'modal-backdrop';\nconst CLASS_NAME_FADE$5 = 'fade';\nconst CLASS_NAME_SHOW$6 = 'show';\nconst EVENT_MOUSEDOWN = `mousedown.bs.${NAME$7}`;\n\nclass Backdrop {\n  constructor(config) {\n    this._config = this._getConfig(config);\n    this._isAppended = false;\n    this._element = null;\n  }\n\n  show(callback) {\n    if (!this._config.isVisible) {\n      execute(callback);\n      return;\n    }\n\n    this._append();\n\n    if (this._config.isAnimated) {\n      reflow(this._getElement());\n    }\n\n    this._getElement().classList.add(CLASS_NAME_SHOW$6);\n\n    this._emulateAnimation(() => {\n      execute(callback);\n    });\n  }\n\n  hide(callback) {\n    if (!this._config.isVisible) {\n      execute(callback);\n      return;\n    }\n\n    this._getElement().classList.remove(CLASS_NAME_SHOW$6);\n\n    this._emulateAnimation(() => {\n      this.dispose();\n      execute(callback);\n    });\n  } // Private\n\n\n  _getElement() {\n    if (!this._element) {\n      const backdrop = document.createElement('div');\n      backdrop.className = CLASS_NAME_BACKDROP;\n\n      if (this._config.isAnimated) {\n        backdrop.classList.add(CLASS_NAME_FADE$5);\n      }\n\n      this._element = backdrop;\n    }\n\n    return this._element;\n  }\n\n  _getConfig(config) {\n    config = { ...Default$6,\n      ...(typeof config === 'object' ? config : {})\n    }; // use getElement() with the default \"body\" to get a fresh Element on each instantiation\n\n    config.rootElement = getElement(config.rootElement);\n    typeCheckConfig(NAME$7, config, DefaultType$6);\n    return config;\n  }\n\n  _append() {\n    if (this._isAppended) {\n      return;\n    }\n\n    this._config.rootElement.appendChild(this._getElement());\n\n    EventHandler.on(this._getElement(), EVENT_MOUSEDOWN, () => {\n      execute(this._config.clickCallback);\n    });\n    this._isAppended = true;\n  }\n\n  dispose() {\n    if (!this._isAppended) {\n      return;\n    }\n\n    EventHandler.off(this._element, EVENT_MOUSEDOWN);\n\n    this._element.remove();\n\n    this._isAppended = false;\n  }\n\n  _emulateAnimation(callback) {\n    executeAfterTransition(callback, this._getElement(), this._config.isAnimated);\n  }\n\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): modal.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$6 = 'modal';\nconst DATA_KEY$6 = 'bs.modal';\nconst EVENT_KEY$6 = `.${DATA_KEY$6}`;\nconst DATA_API_KEY$3 = '.data-api';\nconst ESCAPE_KEY$1 = 'Escape';\nconst Default$5 = {\n  backdrop: true,\n  keyboard: true,\n  focus: true\n};\nconst DefaultType$5 = {\n  backdrop: '(boolean|string)',\n  keyboard: 'boolean',\n  focus: 'boolean'\n};\nconst EVENT_HIDE$3 = `hide${EVENT_KEY$6}`;\nconst EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY$6}`;\nconst EVENT_HIDDEN$3 = `hidden${EVENT_KEY$6}`;\nconst EVENT_SHOW$3 = `show${EVENT_KEY$6}`;\nconst EVENT_SHOWN$3 = `shown${EVENT_KEY$6}`;\nconst EVENT_FOCUSIN$2 = `focusin${EVENT_KEY$6}`;\nconst EVENT_RESIZE = `resize${EVENT_KEY$6}`;\nconst EVENT_CLICK_DISMISS$2 = `click.dismiss${EVENT_KEY$6}`;\nconst EVENT_KEYDOWN_DISMISS$1 = `keydown.dismiss${EVENT_KEY$6}`;\nconst EVENT_MOUSEUP_DISMISS = `mouseup.dismiss${EVENT_KEY$6}`;\nconst EVENT_MOUSEDOWN_DISMISS = `mousedown.dismiss${EVENT_KEY$6}`;\nconst EVENT_CLICK_DATA_API$2 = `click${EVENT_KEY$6}${DATA_API_KEY$3}`;\nconst CLASS_NAME_OPEN = 'modal-open';\nconst CLASS_NAME_FADE$4 = 'fade';\nconst CLASS_NAME_SHOW$5 = 'show';\nconst CLASS_NAME_STATIC = 'modal-static';\nconst SELECTOR_DIALOG = '.modal-dialog';\nconst SELECTOR_MODAL_BODY = '.modal-body';\nconst SELECTOR_DATA_TOGGLE$2 = '[data-bs-toggle=\"modal\"]';\nconst SELECTOR_DATA_DISMISS$2 = '[data-bs-dismiss=\"modal\"]';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Modal extends BaseComponent {\n  constructor(element, config) {\n    super(element);\n    this._config = this._getConfig(config);\n    this._dialog = SelectorEngine.findOne(SELECTOR_DIALOG, this._element);\n    this._backdrop = this._initializeBackDrop();\n    this._isShown = false;\n    this._ignoreBackdropClick = false;\n    this._isTransitioning = false;\n    this._scrollBar = new ScrollBarHelper();\n  } // Getters\n\n\n  static get Default() {\n    return Default$5;\n  }\n\n  static get NAME() {\n    return NAME$6;\n  } // Public\n\n\n  toggle(relatedTarget) {\n    return this._isShown ? this.hide() : this.show(relatedTarget);\n  }\n\n  show(relatedTarget) {\n    if (this._isShown || this._isTransitioning) {\n      return;\n    }\n\n    const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$3, {\n      relatedTarget\n    });\n\n    if (showEvent.defaultPrevented) {\n      return;\n    }\n\n    this._isShown = true;\n\n    if (this._isAnimated()) {\n      this._isTransitioning = true;\n    }\n\n    this._scrollBar.hide();\n\n    document.body.classList.add(CLASS_NAME_OPEN);\n\n    this._adjustDialog();\n\n    this._setEscapeEvent();\n\n    this._setResizeEvent();\n\n    EventHandler.on(this._element, EVENT_CLICK_DISMISS$2, SELECTOR_DATA_DISMISS$2, event => this.hide(event));\n    EventHandler.on(this._dialog, EVENT_MOUSEDOWN_DISMISS, () => {\n      EventHandler.one(this._element, EVENT_MOUSEUP_DISMISS, event => {\n        if (event.target === this._element) {\n          this._ignoreBackdropClick = true;\n        }\n      });\n    });\n\n    this._showBackdrop(() => this._showElement(relatedTarget));\n  }\n\n  hide(event) {\n    if (event && ['A', 'AREA'].includes(event.target.tagName)) {\n      event.preventDefault();\n    }\n\n    if (!this._isShown || this._isTransitioning) {\n      return;\n    }\n\n    const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$3);\n\n    if (hideEvent.defaultPrevented) {\n      return;\n    }\n\n    this._isShown = false;\n\n    const isAnimated = this._isAnimated();\n\n    if (isAnimated) {\n      this._isTransitioning = true;\n    }\n\n    this._setEscapeEvent();\n\n    this._setResizeEvent();\n\n    EventHandler.off(document, EVENT_FOCUSIN$2);\n\n    this._element.classList.remove(CLASS_NAME_SHOW$5);\n\n    EventHandler.off(this._element, EVENT_CLICK_DISMISS$2);\n    EventHandler.off(this._dialog, EVENT_MOUSEDOWN_DISMISS);\n\n    this._queueCallback(() => this._hideModal(), this._element, isAnimated);\n  }\n\n  dispose() {\n    [window, this._dialog].forEach(htmlElement => EventHandler.off(htmlElement, EVENT_KEY$6));\n\n    this._backdrop.dispose();\n\n    super.dispose();\n    /**\n     * `document` has 2 events `EVENT_FOCUSIN` and `EVENT_CLICK_DATA_API`\n     * Do not move `document` in `htmlElements` array\n     * It will remove `EVENT_CLICK_DATA_API` event that should remain\n     */\n\n    EventHandler.off(document, EVENT_FOCUSIN$2);\n  }\n\n  handleUpdate() {\n    this._adjustDialog();\n  } // Private\n\n\n  _initializeBackDrop() {\n    return new Backdrop({\n      isVisible: Boolean(this._config.backdrop),\n      // 'static' option will be translated to true, and booleans will keep their value\n      isAnimated: this._isAnimated()\n    });\n  }\n\n  _getConfig(config) {\n    config = { ...Default$5,\n      ...Manipulator.getDataAttributes(this._element),\n      ...(typeof config === 'object' ? config : {})\n    };\n    typeCheckConfig(NAME$6, config, DefaultType$5);\n    return config;\n  }\n\n  _showElement(relatedTarget) {\n    const isAnimated = this._isAnimated();\n\n    const modalBody = SelectorEngine.findOne(SELECTOR_MODAL_BODY, this._dialog);\n\n    if (!this._element.parentNode || this._element.parentNode.nodeType !== Node.ELEMENT_NODE) {\n      // Don't move modal's DOM position\n      document.body.appendChild(this._element);\n    }\n\n    this._element.style.display = 'block';\n\n    this._element.removeAttribute('aria-hidden');\n\n    this._element.setAttribute('aria-modal', true);\n\n    this._element.setAttribute('role', 'dialog');\n\n    this._element.scrollTop = 0;\n\n    if (modalBody) {\n      modalBody.scrollTop = 0;\n    }\n\n    if (isAnimated) {\n      reflow(this._element);\n    }\n\n    this._element.classList.add(CLASS_NAME_SHOW$5);\n\n    if (this._config.focus) {\n      this._enforceFocus();\n    }\n\n    const transitionComplete = () => {\n      if (this._config.focus) {\n        this._element.focus();\n      }\n\n      this._isTransitioning = false;\n      EventHandler.trigger(this._element, EVENT_SHOWN$3, {\n        relatedTarget\n      });\n    };\n\n    this._queueCallback(transitionComplete, this._dialog, isAnimated);\n  }\n\n  _enforceFocus() {\n    EventHandler.off(document, EVENT_FOCUSIN$2); // guard against infinite focus loop\n\n    EventHandler.on(document, EVENT_FOCUSIN$2, event => {\n      if (document !== event.target && this._element !== event.target && !this._element.contains(event.target)) {\n        this._element.focus();\n      }\n    });\n  }\n\n  _setEscapeEvent() {\n    if (this._isShown) {\n      EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS$1, event => {\n        if (this._config.keyboard && event.key === ESCAPE_KEY$1) {\n          event.preventDefault();\n          this.hide();\n        } else if (!this._config.keyboard && event.key === ESCAPE_KEY$1) {\n          this._triggerBackdropTransition();\n        }\n      });\n    } else {\n      EventHandler.off(this._element, EVENT_KEYDOWN_DISMISS$1);\n    }\n  }\n\n  _setResizeEvent() {\n    if (this._isShown) {\n      EventHandler.on(window, EVENT_RESIZE, () => this._adjustDialog());\n    } else {\n      EventHandler.off(window, EVENT_RESIZE);\n    }\n  }\n\n  _hideModal() {\n    this._element.style.display = 'none';\n\n    this._element.setAttribute('aria-hidden', true);\n\n    this._element.removeAttribute('aria-modal');\n\n    this._element.removeAttribute('role');\n\n    this._isTransitioning = false;\n\n    this._backdrop.hide(() => {\n      document.body.classList.remove(CLASS_NAME_OPEN);\n\n      this._resetAdjustments();\n\n      this._scrollBar.reset();\n\n      EventHandler.trigger(this._element, EVENT_HIDDEN$3);\n    });\n  }\n\n  _showBackdrop(callback) {\n    EventHandler.on(this._element, EVENT_CLICK_DISMISS$2, event => {\n      if (this._ignoreBackdropClick) {\n        this._ignoreBackdropClick = false;\n        return;\n      }\n\n      if (event.target !== event.currentTarget) {\n        return;\n      }\n\n      if (this._config.backdrop === true) {\n        this.hide();\n      } else if (this._config.backdrop === 'static') {\n        this._triggerBackdropTransition();\n      }\n    });\n\n    this._backdrop.show(callback);\n  }\n\n  _isAnimated() {\n    return this._element.classList.contains(CLASS_NAME_FADE$4);\n  }\n\n  _triggerBackdropTransition() {\n    const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED);\n\n    if (hideEvent.defaultPrevented) {\n      return;\n    }\n\n    const {\n      classList,\n      scrollHeight,\n      style\n    } = this._element;\n    const isModalOverflowing = scrollHeight > document.documentElement.clientHeight; // return if the following background transition hasn't yet completed\n\n    if (!isModalOverflowing && style.overflowY === 'hidden' || classList.contains(CLASS_NAME_STATIC)) {\n      return;\n    }\n\n    if (!isModalOverflowing) {\n      style.overflowY = 'hidden';\n    }\n\n    classList.add(CLASS_NAME_STATIC);\n\n    this._queueCallback(() => {\n      classList.remove(CLASS_NAME_STATIC);\n\n      if (!isModalOverflowing) {\n        this._queueCallback(() => {\n          style.overflowY = '';\n        }, this._dialog);\n      }\n    }, this._dialog);\n\n    this._element.focus();\n  } // ----------------------------------------------------------------------\n  // the following methods are used to handle overflowing modals\n  // ----------------------------------------------------------------------\n\n\n  _adjustDialog() {\n    const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;\n\n    const scrollbarWidth = this._scrollBar.getWidth();\n\n    const isBodyOverflowing = scrollbarWidth > 0;\n\n    if (!isBodyOverflowing && isModalOverflowing && !isRTL() || isBodyOverflowing && !isModalOverflowing && isRTL()) {\n      this._element.style.paddingLeft = `${scrollbarWidth}px`;\n    }\n\n    if (isBodyOverflowing && !isModalOverflowing && !isRTL() || !isBodyOverflowing && isModalOverflowing && isRTL()) {\n      this._element.style.paddingRight = `${scrollbarWidth}px`;\n    }\n  }\n\n  _resetAdjustments() {\n    this._element.style.paddingLeft = '';\n    this._element.style.paddingRight = '';\n  } // Static\n\n\n  static jQueryInterface(config, relatedTarget) {\n    return this.each(function () {\n      const data = Modal.getOrCreateInstance(this, config);\n\n      if (typeof config !== 'string') {\n        return;\n      }\n\n      if (typeof data[config] === 'undefined') {\n        throw new TypeError(`No method named \"${config}\"`);\n      }\n\n      data[config](relatedTarget);\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$2, SELECTOR_DATA_TOGGLE$2, function (event) {\n  const target = getElementFromSelector(this);\n\n  if (['A', 'AREA'].includes(this.tagName)) {\n    event.preventDefault();\n  }\n\n  EventHandler.one(target, EVENT_SHOW$3, showEvent => {\n    if (showEvent.defaultPrevented) {\n      // only register focus restorer if modal will actually get shown\n      return;\n    }\n\n    EventHandler.one(target, EVENT_HIDDEN$3, () => {\n      if (isVisible(this)) {\n        this.focus();\n      }\n    });\n  });\n  const data = Modal.getOrCreateInstance(target);\n  data.toggle(this);\n});\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Modal to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Modal);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): offcanvas.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$5 = 'offcanvas';\nconst DATA_KEY$5 = 'bs.offcanvas';\nconst EVENT_KEY$5 = `.${DATA_KEY$5}`;\nconst DATA_API_KEY$2 = '.data-api';\nconst EVENT_LOAD_DATA_API$1 = `load${EVENT_KEY$5}${DATA_API_KEY$2}`;\nconst ESCAPE_KEY = 'Escape';\nconst Default$4 = {\n  backdrop: true,\n  keyboard: true,\n  scroll: false\n};\nconst DefaultType$4 = {\n  backdrop: 'boolean',\n  keyboard: 'boolean',\n  scroll: 'boolean'\n};\nconst CLASS_NAME_SHOW$4 = 'show';\nconst OPEN_SELECTOR = '.offcanvas.show';\nconst EVENT_SHOW$2 = `show${EVENT_KEY$5}`;\nconst EVENT_SHOWN$2 = `shown${EVENT_KEY$5}`;\nconst EVENT_HIDE$2 = `hide${EVENT_KEY$5}`;\nconst EVENT_HIDDEN$2 = `hidden${EVENT_KEY$5}`;\nconst EVENT_FOCUSIN$1 = `focusin${EVENT_KEY$5}`;\nconst EVENT_CLICK_DATA_API$1 = `click${EVENT_KEY$5}${DATA_API_KEY$2}`;\nconst EVENT_CLICK_DISMISS$1 = `click.dismiss${EVENT_KEY$5}`;\nconst EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY$5}`;\nconst SELECTOR_DATA_DISMISS$1 = '[data-bs-dismiss=\"offcanvas\"]';\nconst SELECTOR_DATA_TOGGLE$1 = '[data-bs-toggle=\"offcanvas\"]';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Offcanvas extends BaseComponent {\n  constructor(element, config) {\n    super(element);\n    this._config = this._getConfig(config);\n    this._isShown = false;\n    this._backdrop = this._initializeBackDrop();\n\n    this._addEventListeners();\n  } // Getters\n\n\n  static get NAME() {\n    return NAME$5;\n  }\n\n  static get Default() {\n    return Default$4;\n  } // Public\n\n\n  toggle(relatedTarget) {\n    return this._isShown ? this.hide() : this.show(relatedTarget);\n  }\n\n  show(relatedTarget) {\n    if (this._isShown) {\n      return;\n    }\n\n    const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$2, {\n      relatedTarget\n    });\n\n    if (showEvent.defaultPrevented) {\n      return;\n    }\n\n    this._isShown = true;\n    this._element.style.visibility = 'visible';\n\n    this._backdrop.show();\n\n    if (!this._config.scroll) {\n      new ScrollBarHelper().hide();\n\n      this._enforceFocusOnElement(this._element);\n    }\n\n    this._element.removeAttribute('aria-hidden');\n\n    this._element.setAttribute('aria-modal', true);\n\n    this._element.setAttribute('role', 'dialog');\n\n    this._element.classList.add(CLASS_NAME_SHOW$4);\n\n    const completeCallBack = () => {\n      EventHandler.trigger(this._element, EVENT_SHOWN$2, {\n        relatedTarget\n      });\n    };\n\n    this._queueCallback(completeCallBack, this._element, true);\n  }\n\n  hide() {\n    if (!this._isShown) {\n      return;\n    }\n\n    const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$2);\n\n    if (hideEvent.defaultPrevented) {\n      return;\n    }\n\n    EventHandler.off(document, EVENT_FOCUSIN$1);\n\n    this._element.blur();\n\n    this._isShown = false;\n\n    this._element.classList.remove(CLASS_NAME_SHOW$4);\n\n    this._backdrop.hide();\n\n    const completeCallback = () => {\n      this._element.setAttribute('aria-hidden', true);\n\n      this._element.removeAttribute('aria-modal');\n\n      this._element.removeAttribute('role');\n\n      this._element.style.visibility = 'hidden';\n\n      if (!this._config.scroll) {\n        new ScrollBarHelper().reset();\n      }\n\n      EventHandler.trigger(this._element, EVENT_HIDDEN$2);\n    };\n\n    this._queueCallback(completeCallback, this._element, true);\n  }\n\n  dispose() {\n    this._backdrop.dispose();\n\n    super.dispose();\n    EventHandler.off(document, EVENT_FOCUSIN$1);\n  } // Private\n\n\n  _getConfig(config) {\n    config = { ...Default$4,\n      ...Manipulator.getDataAttributes(this._element),\n      ...(typeof config === 'object' ? config : {})\n    };\n    typeCheckConfig(NAME$5, config, DefaultType$4);\n    return config;\n  }\n\n  _initializeBackDrop() {\n    return new Backdrop({\n      isVisible: this._config.backdrop,\n      isAnimated: true,\n      rootElement: this._element.parentNode,\n      clickCallback: () => this.hide()\n    });\n  }\n\n  _enforceFocusOnElement(element) {\n    EventHandler.off(document, EVENT_FOCUSIN$1); // guard against infinite focus loop\n\n    EventHandler.on(document, EVENT_FOCUSIN$1, event => {\n      if (document !== event.target && element !== event.target && !element.contains(event.target)) {\n        element.focus();\n      }\n    });\n    element.focus();\n  }\n\n  _addEventListeners() {\n    EventHandler.on(this._element, EVENT_CLICK_DISMISS$1, SELECTOR_DATA_DISMISS$1, () => this.hide());\n    EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS, event => {\n      if (this._config.keyboard && event.key === ESCAPE_KEY) {\n        this.hide();\n      }\n    });\n  } // Static\n\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Offcanvas.getOrCreateInstance(this, config);\n\n      if (typeof config !== 'string') {\n        return;\n      }\n\n      if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n        throw new TypeError(`No method named \"${config}\"`);\n      }\n\n      data[config](this);\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$1, SELECTOR_DATA_TOGGLE$1, function (event) {\n  const target = getElementFromSelector(this);\n\n  if (['A', 'AREA'].includes(this.tagName)) {\n    event.preventDefault();\n  }\n\n  if (isDisabled(this)) {\n    return;\n  }\n\n  EventHandler.one(target, EVENT_HIDDEN$2, () => {\n    // focus on trigger when it is closed\n    if (isVisible(this)) {\n      this.focus();\n    }\n  }); // avoid conflict when clicking a toggler of an offcanvas, while another is open\n\n  const allReadyOpen = SelectorEngine.findOne(OPEN_SELECTOR);\n\n  if (allReadyOpen && allReadyOpen !== target) {\n    Offcanvas.getInstance(allReadyOpen).hide();\n  }\n\n  const data = Offcanvas.getOrCreateInstance(target);\n  data.toggle(this);\n});\nEventHandler.on(window, EVENT_LOAD_DATA_API$1, () => SelectorEngine.find(OPEN_SELECTOR).forEach(el => Offcanvas.getOrCreateInstance(el).show()));\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\ndefineJQueryPlugin(Offcanvas);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): util/sanitizer.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\nconst uriAttrs = new Set(['background', 'cite', 'href', 'itemtype', 'longdesc', 'poster', 'src', 'xlink:href']);\nconst ARIA_ATTRIBUTE_PATTERN = /^aria-[\\w-]*$/i;\n/**\n * A pattern that recognizes a commonly useful subset of URLs that are safe.\n *\n * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts\n */\n\nconst SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file):|[^#&/:?]*(?:[#/?]|$))/i;\n/**\n * A pattern that matches safe data URLs. Only matches image, video and audio types.\n *\n * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts\n */\n\nconst DATA_URL_PATTERN = /^data:(?:image\\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\\/(?:mpeg|mp4|ogg|webm)|audio\\/(?:mp3|oga|ogg|opus));base64,[\\d+/a-z]+=*$/i;\n\nconst allowedAttribute = (attr, allowedAttributeList) => {\n  const attrName = attr.nodeName.toLowerCase();\n\n  if (allowedAttributeList.includes(attrName)) {\n    if (uriAttrs.has(attrName)) {\n      return Boolean(SAFE_URL_PATTERN.test(attr.nodeValue) || DATA_URL_PATTERN.test(attr.nodeValue));\n    }\n\n    return true;\n  }\n\n  const regExp = allowedAttributeList.filter(attrRegex => attrRegex instanceof RegExp); // Check if a regular expression validates the attribute.\n\n  for (let i = 0, len = regExp.length; i < len; i++) {\n    if (regExp[i].test(attrName)) {\n      return true;\n    }\n  }\n\n  return false;\n};\n\nconst DefaultAllowlist = {\n  // Global attributes allowed on any supplied element below.\n  '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],\n  a: ['target', 'href', 'title', 'rel'],\n  area: [],\n  b: [],\n  br: [],\n  col: [],\n  code: [],\n  div: [],\n  em: [],\n  hr: [],\n  h1: [],\n  h2: [],\n  h3: [],\n  h4: [],\n  h5: [],\n  h6: [],\n  i: [],\n  img: ['src', 'srcset', 'alt', 'title', 'width', 'height'],\n  li: [],\n  ol: [],\n  p: [],\n  pre: [],\n  s: [],\n  small: [],\n  span: [],\n  sub: [],\n  sup: [],\n  strong: [],\n  u: [],\n  ul: []\n};\nfunction sanitizeHtml(unsafeHtml, allowList, sanitizeFn) {\n  if (!unsafeHtml.length) {\n    return unsafeHtml;\n  }\n\n  if (sanitizeFn && typeof sanitizeFn === 'function') {\n    return sanitizeFn(unsafeHtml);\n  }\n\n  const domParser = new window.DOMParser();\n  const createdDocument = domParser.parseFromString(unsafeHtml, 'text/html');\n  const allowlistKeys = Object.keys(allowList);\n  const elements = [].concat(...createdDocument.body.querySelectorAll('*'));\n\n  for (let i = 0, len = elements.length; i < len; i++) {\n    const el = elements[i];\n    const elName = el.nodeName.toLowerCase();\n\n    if (!allowlistKeys.includes(elName)) {\n      el.remove();\n      continue;\n    }\n\n    const attributeList = [].concat(...el.attributes);\n    const allowedAttributes = [].concat(allowList['*'] || [], allowList[elName] || []);\n    attributeList.forEach(attr => {\n      if (!allowedAttribute(attr, allowedAttributes)) {\n        el.removeAttribute(attr.nodeName);\n      }\n    });\n  }\n\n  return createdDocument.body.innerHTML;\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): tooltip.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$4 = 'tooltip';\nconst DATA_KEY$4 = 'bs.tooltip';\nconst EVENT_KEY$4 = `.${DATA_KEY$4}`;\nconst CLASS_PREFIX$1 = 'bs-tooltip';\nconst BSCLS_PREFIX_REGEX$1 = new RegExp(`(^|\\\\s)${CLASS_PREFIX$1}\\\\S+`, 'g');\nconst DISALLOWED_ATTRIBUTES = new Set(['sanitize', 'allowList', 'sanitizeFn']);\nconst DefaultType$3 = {\n  animation: 'boolean',\n  template: 'string',\n  title: '(string|element|function)',\n  trigger: 'string',\n  delay: '(number|object)',\n  html: 'boolean',\n  selector: '(string|boolean)',\n  placement: '(string|function)',\n  offset: '(array|string|function)',\n  container: '(string|element|boolean)',\n  fallbackPlacements: 'array',\n  boundary: '(string|element)',\n  customClass: '(string|function)',\n  sanitize: 'boolean',\n  sanitizeFn: '(null|function)',\n  allowList: 'object',\n  popperConfig: '(null|object|function)'\n};\nconst AttachmentMap = {\n  AUTO: 'auto',\n  TOP: 'top',\n  RIGHT: isRTL() ? 'left' : 'right',\n  BOTTOM: 'bottom',\n  LEFT: isRTL() ? 'right' : 'left'\n};\nconst Default$3 = {\n  animation: true,\n  template: '<div class=\"tooltip\" role=\"tooltip\">' + '<div class=\"tooltip-arrow\"></div>' + '<div class=\"tooltip-inner\"></div>' + '</div>',\n  trigger: 'hover focus',\n  title: '',\n  delay: 0,\n  html: false,\n  selector: false,\n  placement: 'top',\n  offset: [0, 0],\n  container: false,\n  fallbackPlacements: ['top', 'right', 'bottom', 'left'],\n  boundary: 'clippingParents',\n  customClass: '',\n  sanitize: true,\n  sanitizeFn: null,\n  allowList: DefaultAllowlist,\n  popperConfig: null\n};\nconst Event$2 = {\n  HIDE: `hide${EVENT_KEY$4}`,\n  HIDDEN: `hidden${EVENT_KEY$4}`,\n  SHOW: `show${EVENT_KEY$4}`,\n  SHOWN: `shown${EVENT_KEY$4}`,\n  INSERTED: `inserted${EVENT_KEY$4}`,\n  CLICK: `click${EVENT_KEY$4}`,\n  FOCUSIN: `focusin${EVENT_KEY$4}`,\n  FOCUSOUT: `focusout${EVENT_KEY$4}`,\n  MOUSEENTER: `mouseenter${EVENT_KEY$4}`,\n  MOUSELEAVE: `mouseleave${EVENT_KEY$4}`\n};\nconst CLASS_NAME_FADE$3 = 'fade';\nconst CLASS_NAME_MODAL = 'modal';\nconst CLASS_NAME_SHOW$3 = 'show';\nconst HOVER_STATE_SHOW = 'show';\nconst HOVER_STATE_OUT = 'out';\nconst SELECTOR_TOOLTIP_INNER = '.tooltip-inner';\nconst TRIGGER_HOVER = 'hover';\nconst TRIGGER_FOCUS = 'focus';\nconst TRIGGER_CLICK = 'click';\nconst TRIGGER_MANUAL = 'manual';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Tooltip extends BaseComponent {\n  constructor(element, config) {\n    if (typeof Popper === 'undefined') {\n      throw new TypeError('Bootstrap\\'s tooltips require Popper (https://popper.js.org)');\n    }\n\n    super(element); // private\n\n    this._isEnabled = true;\n    this._timeout = 0;\n    this._hoverState = '';\n    this._activeTrigger = {};\n    this._popper = null; // Protected\n\n    this._config = this._getConfig(config);\n    this.tip = null;\n\n    this._setListeners();\n  } // Getters\n\n\n  static get Default() {\n    return Default$3;\n  }\n\n  static get NAME() {\n    return NAME$4;\n  }\n\n  static get Event() {\n    return Event$2;\n  }\n\n  static get DefaultType() {\n    return DefaultType$3;\n  } // Public\n\n\n  enable() {\n    this._isEnabled = true;\n  }\n\n  disable() {\n    this._isEnabled = false;\n  }\n\n  toggleEnabled() {\n    this._isEnabled = !this._isEnabled;\n  }\n\n  toggle(event) {\n    if (!this._isEnabled) {\n      return;\n    }\n\n    if (event) {\n      const context = this._initializeOnDelegatedTarget(event);\n\n      context._activeTrigger.click = !context._activeTrigger.click;\n\n      if (context._isWithActiveTrigger()) {\n        context._enter(null, context);\n      } else {\n        context._leave(null, context);\n      }\n    } else {\n      if (this.getTipElement().classList.contains(CLASS_NAME_SHOW$3)) {\n        this._leave(null, this);\n\n        return;\n      }\n\n      this._enter(null, this);\n    }\n  }\n\n  dispose() {\n    clearTimeout(this._timeout);\n    EventHandler.off(this._element.closest(`.${CLASS_NAME_MODAL}`), 'hide.bs.modal', this._hideModalHandler);\n\n    if (this.tip) {\n      this.tip.remove();\n    }\n\n    if (this._popper) {\n      this._popper.destroy();\n    }\n\n    super.dispose();\n  }\n\n  show() {\n    if (this._element.style.display === 'none') {\n      throw new Error('Please use show on visible elements');\n    }\n\n    if (!(this.isWithContent() && this._isEnabled)) {\n      return;\n    }\n\n    const showEvent = EventHandler.trigger(this._element, this.constructor.Event.SHOW);\n    const shadowRoot = findShadowRoot(this._element);\n    const isInTheDom = shadowRoot === null ? this._element.ownerDocument.documentElement.contains(this._element) : shadowRoot.contains(this._element);\n\n    if (showEvent.defaultPrevented || !isInTheDom) {\n      return;\n    }\n\n    const tip = this.getTipElement();\n    const tipId = getUID(this.constructor.NAME);\n    tip.setAttribute('id', tipId);\n\n    this._element.setAttribute('aria-describedby', tipId);\n\n    this.setContent();\n\n    if (this._config.animation) {\n      tip.classList.add(CLASS_NAME_FADE$3);\n    }\n\n    const placement = typeof this._config.placement === 'function' ? this._config.placement.call(this, tip, this._element) : this._config.placement;\n\n    const attachment = this._getAttachment(placement);\n\n    this._addAttachmentClass(attachment);\n\n    const {\n      container\n    } = this._config;\n    Data.set(tip, this.constructor.DATA_KEY, this);\n\n    if (!this._element.ownerDocument.documentElement.contains(this.tip)) {\n      container.appendChild(tip);\n      EventHandler.trigger(this._element, this.constructor.Event.INSERTED);\n    }\n\n    if (this._popper) {\n      this._popper.update();\n    } else {\n      this._popper = Popper.createPopper(this._element, tip, this._getPopperConfig(attachment));\n    }\n\n    tip.classList.add(CLASS_NAME_SHOW$3);\n    const customClass = typeof this._config.customClass === 'function' ? this._config.customClass() : this._config.customClass;\n\n    if (customClass) {\n      tip.classList.add(...customClass.split(' '));\n    } // If this is a touch-enabled device we add extra\n    // empty mouseover listeners to the body's immediate children;\n    // only needed because of broken event delegation on iOS\n    // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n\n\n    if ('ontouchstart' in document.documentElement) {\n      [].concat(...document.body.children).forEach(element => {\n        EventHandler.on(element, 'mouseover', noop);\n      });\n    }\n\n    const complete = () => {\n      const prevHoverState = this._hoverState;\n      this._hoverState = null;\n      EventHandler.trigger(this._element, this.constructor.Event.SHOWN);\n\n      if (prevHoverState === HOVER_STATE_OUT) {\n        this._leave(null, this);\n      }\n    };\n\n    const isAnimated = this.tip.classList.contains(CLASS_NAME_FADE$3);\n\n    this._queueCallback(complete, this.tip, isAnimated);\n  }\n\n  hide() {\n    if (!this._popper) {\n      return;\n    }\n\n    const tip = this.getTipElement();\n\n    const complete = () => {\n      if (this._isWithActiveTrigger()) {\n        return;\n      }\n\n      if (this._hoverState !== HOVER_STATE_SHOW) {\n        tip.remove();\n      }\n\n      this._cleanTipClass();\n\n      this._element.removeAttribute('aria-describedby');\n\n      EventHandler.trigger(this._element, this.constructor.Event.HIDDEN);\n\n      if (this._popper) {\n        this._popper.destroy();\n\n        this._popper = null;\n      }\n    };\n\n    const hideEvent = EventHandler.trigger(this._element, this.constructor.Event.HIDE);\n\n    if (hideEvent.defaultPrevented) {\n      return;\n    }\n\n    tip.classList.remove(CLASS_NAME_SHOW$3); // If this is a touch-enabled device we remove the extra\n    // empty mouseover listeners we added for iOS support\n\n    if ('ontouchstart' in document.documentElement) {\n      [].concat(...document.body.children).forEach(element => EventHandler.off(element, 'mouseover', noop));\n    }\n\n    this._activeTrigger[TRIGGER_CLICK] = false;\n    this._activeTrigger[TRIGGER_FOCUS] = false;\n    this._activeTrigger[TRIGGER_HOVER] = false;\n    const isAnimated = this.tip.classList.contains(CLASS_NAME_FADE$3);\n\n    this._queueCallback(complete, this.tip, isAnimated);\n\n    this._hoverState = '';\n  }\n\n  update() {\n    if (this._popper !== null) {\n      this._popper.update();\n    }\n  } // Protected\n\n\n  isWithContent() {\n    return Boolean(this.getTitle());\n  }\n\n  getTipElement() {\n    if (this.tip) {\n      return this.tip;\n    }\n\n    const element = document.createElement('div');\n    element.innerHTML = this._config.template;\n    this.tip = element.children[0];\n    return this.tip;\n  }\n\n  setContent() {\n    const tip = this.getTipElement();\n    this.setElementContent(SelectorEngine.findOne(SELECTOR_TOOLTIP_INNER, tip), this.getTitle());\n    tip.classList.remove(CLASS_NAME_FADE$3, CLASS_NAME_SHOW$3);\n  }\n\n  setElementContent(element, content) {\n    if (element === null) {\n      return;\n    }\n\n    if (isElement(content)) {\n      content = getElement(content); // content is a DOM node or a jQuery\n\n      if (this._config.html) {\n        if (content.parentNode !== element) {\n          element.innerHTML = '';\n          element.appendChild(content);\n        }\n      } else {\n        element.textContent = content.textContent;\n      }\n\n      return;\n    }\n\n    if (this._config.html) {\n      if (this._config.sanitize) {\n        content = sanitizeHtml(content, this._config.allowList, this._config.sanitizeFn);\n      }\n\n      element.innerHTML = content;\n    } else {\n      element.textContent = content;\n    }\n  }\n\n  getTitle() {\n    let title = this._element.getAttribute('data-bs-original-title');\n\n    if (!title) {\n      title = typeof this._config.title === 'function' ? this._config.title.call(this._element) : this._config.title;\n    }\n\n    return title;\n  }\n\n  updateAttachment(attachment) {\n    if (attachment === 'right') {\n      return 'end';\n    }\n\n    if (attachment === 'left') {\n      return 'start';\n    }\n\n    return attachment;\n  } // Private\n\n\n  _initializeOnDelegatedTarget(event, context) {\n    const dataKey = this.constructor.DATA_KEY;\n    context = context || Data.get(event.delegateTarget, dataKey);\n\n    if (!context) {\n      context = new this.constructor(event.delegateTarget, this._getDelegateConfig());\n      Data.set(event.delegateTarget, dataKey, context);\n    }\n\n    return context;\n  }\n\n  _getOffset() {\n    const {\n      offset\n    } = this._config;\n\n    if (typeof offset === 'string') {\n      return offset.split(',').map(val => Number.parseInt(val, 10));\n    }\n\n    if (typeof offset === 'function') {\n      return popperData => offset(popperData, this._element);\n    }\n\n    return offset;\n  }\n\n  _getPopperConfig(attachment) {\n    const defaultBsPopperConfig = {\n      placement: attachment,\n      modifiers: [{\n        name: 'flip',\n        options: {\n          fallbackPlacements: this._config.fallbackPlacements\n        }\n      }, {\n        name: 'offset',\n        options: {\n          offset: this._getOffset()\n        }\n      }, {\n        name: 'preventOverflow',\n        options: {\n          boundary: this._config.boundary\n        }\n      }, {\n        name: 'arrow',\n        options: {\n          element: `.${this.constructor.NAME}-arrow`\n        }\n      }, {\n        name: 'onChange',\n        enabled: true,\n        phase: 'afterWrite',\n        fn: data => this._handlePopperPlacementChange(data)\n      }],\n      onFirstUpdate: data => {\n        if (data.options.placement !== data.placement) {\n          this._handlePopperPlacementChange(data);\n        }\n      }\n    };\n    return { ...defaultBsPopperConfig,\n      ...(typeof this._config.popperConfig === 'function' ? this._config.popperConfig(defaultBsPopperConfig) : this._config.popperConfig)\n    };\n  }\n\n  _addAttachmentClass(attachment) {\n    this.getTipElement().classList.add(`${CLASS_PREFIX$1}-${this.updateAttachment(attachment)}`);\n  }\n\n  _getAttachment(placement) {\n    return AttachmentMap[placement.toUpperCase()];\n  }\n\n  _setListeners() {\n    const triggers = this._config.trigger.split(' ');\n\n    triggers.forEach(trigger => {\n      if (trigger === 'click') {\n        EventHandler.on(this._element, this.constructor.Event.CLICK, this._config.selector, event => this.toggle(event));\n      } else if (trigger !== TRIGGER_MANUAL) {\n        const eventIn = trigger === TRIGGER_HOVER ? this.constructor.Event.MOUSEENTER : this.constructor.Event.FOCUSIN;\n        const eventOut = trigger === TRIGGER_HOVER ? this.constructor.Event.MOUSELEAVE : this.constructor.Event.FOCUSOUT;\n        EventHandler.on(this._element, eventIn, this._config.selector, event => this._enter(event));\n        EventHandler.on(this._element, eventOut, this._config.selector, event => this._leave(event));\n      }\n    });\n\n    this._hideModalHandler = () => {\n      if (this._element) {\n        this.hide();\n      }\n    };\n\n    EventHandler.on(this._element.closest(`.${CLASS_NAME_MODAL}`), 'hide.bs.modal', this._hideModalHandler);\n\n    if (this._config.selector) {\n      this._config = { ...this._config,\n        trigger: 'manual',\n        selector: ''\n      };\n    } else {\n      this._fixTitle();\n    }\n  }\n\n  _fixTitle() {\n    const title = this._element.getAttribute('title');\n\n    const originalTitleType = typeof this._element.getAttribute('data-bs-original-title');\n\n    if (title || originalTitleType !== 'string') {\n      this._element.setAttribute('data-bs-original-title', title || '');\n\n      if (title && !this._element.getAttribute('aria-label') && !this._element.textContent) {\n        this._element.setAttribute('aria-label', title);\n      }\n\n      this._element.setAttribute('title', '');\n    }\n  }\n\n  _enter(event, context) {\n    context = this._initializeOnDelegatedTarget(event, context);\n\n    if (event) {\n      context._activeTrigger[event.type === 'focusin' ? TRIGGER_FOCUS : TRIGGER_HOVER] = true;\n    }\n\n    if (context.getTipElement().classList.contains(CLASS_NAME_SHOW$3) || context._hoverState === HOVER_STATE_SHOW) {\n      context._hoverState = HOVER_STATE_SHOW;\n      return;\n    }\n\n    clearTimeout(context._timeout);\n    context._hoverState = HOVER_STATE_SHOW;\n\n    if (!context._config.delay || !context._config.delay.show) {\n      context.show();\n      return;\n    }\n\n    context._timeout = setTimeout(() => {\n      if (context._hoverState === HOVER_STATE_SHOW) {\n        context.show();\n      }\n    }, context._config.delay.show);\n  }\n\n  _leave(event, context) {\n    context = this._initializeOnDelegatedTarget(event, context);\n\n    if (event) {\n      context._activeTrigger[event.type === 'focusout' ? TRIGGER_FOCUS : TRIGGER_HOVER] = context._element.contains(event.relatedTarget);\n    }\n\n    if (context._isWithActiveTrigger()) {\n      return;\n    }\n\n    clearTimeout(context._timeout);\n    context._hoverState = HOVER_STATE_OUT;\n\n    if (!context._config.delay || !context._config.delay.hide) {\n      context.hide();\n      return;\n    }\n\n    context._timeout = setTimeout(() => {\n      if (context._hoverState === HOVER_STATE_OUT) {\n        context.hide();\n      }\n    }, context._config.delay.hide);\n  }\n\n  _isWithActiveTrigger() {\n    for (const trigger in this._activeTrigger) {\n      if (this._activeTrigger[trigger]) {\n        return true;\n      }\n    }\n\n    return false;\n  }\n\n  _getConfig(config) {\n    const dataAttributes = Manipulator.getDataAttributes(this._element);\n    Object.keys(dataAttributes).forEach(dataAttr => {\n      if (DISALLOWED_ATTRIBUTES.has(dataAttr)) {\n        delete dataAttributes[dataAttr];\n      }\n    });\n    config = { ...this.constructor.Default,\n      ...dataAttributes,\n      ...(typeof config === 'object' && config ? config : {})\n    };\n    config.container = config.container === false ? document.body : getElement(config.container);\n\n    if (typeof config.delay === 'number') {\n      config.delay = {\n        show: config.delay,\n        hide: config.delay\n      };\n    }\n\n    if (typeof config.title === 'number') {\n      config.title = config.title.toString();\n    }\n\n    if (typeof config.content === 'number') {\n      config.content = config.content.toString();\n    }\n\n    typeCheckConfig(NAME$4, config, this.constructor.DefaultType);\n\n    if (config.sanitize) {\n      config.template = sanitizeHtml(config.template, config.allowList, config.sanitizeFn);\n    }\n\n    return config;\n  }\n\n  _getDelegateConfig() {\n    const config = {};\n\n    if (this._config) {\n      for (const key in this._config) {\n        if (this.constructor.Default[key] !== this._config[key]) {\n          config[key] = this._config[key];\n        }\n      }\n    }\n\n    return config;\n  }\n\n  _cleanTipClass() {\n    const tip = this.getTipElement();\n    const tabClass = tip.getAttribute('class').match(BSCLS_PREFIX_REGEX$1);\n\n    if (tabClass !== null && tabClass.length > 0) {\n      tabClass.map(token => token.trim()).forEach(tClass => tip.classList.remove(tClass));\n    }\n  }\n\n  _handlePopperPlacementChange(popperData) {\n    const {\n      state\n    } = popperData;\n\n    if (!state) {\n      return;\n    }\n\n    this.tip = state.elements.popper;\n\n    this._cleanTipClass();\n\n    this._addAttachmentClass(this._getAttachment(state.placement));\n  } // Static\n\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Tooltip.getOrCreateInstance(this, config);\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config]();\n      }\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Tooltip to jQuery only if jQuery is present\n */\n\n\ndefineJQueryPlugin(Tooltip);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): popover.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$3 = 'popover';\nconst DATA_KEY$3 = 'bs.popover';\nconst EVENT_KEY$3 = `.${DATA_KEY$3}`;\nconst CLASS_PREFIX = 'bs-popover';\nconst BSCLS_PREFIX_REGEX = new RegExp(`(^|\\\\s)${CLASS_PREFIX}\\\\S+`, 'g');\nconst Default$2 = { ...Tooltip.Default,\n  placement: 'right',\n  offset: [0, 8],\n  trigger: 'click',\n  content: '',\n  template: '<div class=\"popover\" role=\"tooltip\">' + '<div class=\"popover-arrow\"></div>' + '<h3 class=\"popover-header\"></h3>' + '<div class=\"popover-body\"></div>' + '</div>'\n};\nconst DefaultType$2 = { ...Tooltip.DefaultType,\n  content: '(string|element|function)'\n};\nconst Event$1 = {\n  HIDE: `hide${EVENT_KEY$3}`,\n  HIDDEN: `hidden${EVENT_KEY$3}`,\n  SHOW: `show${EVENT_KEY$3}`,\n  SHOWN: `shown${EVENT_KEY$3}`,\n  INSERTED: `inserted${EVENT_KEY$3}`,\n  CLICK: `click${EVENT_KEY$3}`,\n  FOCUSIN: `focusin${EVENT_KEY$3}`,\n  FOCUSOUT: `focusout${EVENT_KEY$3}`,\n  MOUSEENTER: `mouseenter${EVENT_KEY$3}`,\n  MOUSELEAVE: `mouseleave${EVENT_KEY$3}`\n};\nconst CLASS_NAME_FADE$2 = 'fade';\nconst CLASS_NAME_SHOW$2 = 'show';\nconst SELECTOR_TITLE = '.popover-header';\nconst SELECTOR_CONTENT = '.popover-body';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Popover extends Tooltip {\n  // Getters\n  static get Default() {\n    return Default$2;\n  }\n\n  static get NAME() {\n    return NAME$3;\n  }\n\n  static get Event() {\n    return Event$1;\n  }\n\n  static get DefaultType() {\n    return DefaultType$2;\n  } // Overrides\n\n\n  isWithContent() {\n    return this.getTitle() || this._getContent();\n  }\n\n  getTipElement() {\n    if (this.tip) {\n      return this.tip;\n    }\n\n    this.tip = super.getTipElement();\n\n    if (!this.getTitle()) {\n      SelectorEngine.findOne(SELECTOR_TITLE, this.tip).remove();\n    }\n\n    if (!this._getContent()) {\n      SelectorEngine.findOne(SELECTOR_CONTENT, this.tip).remove();\n    }\n\n    return this.tip;\n  }\n\n  setContent() {\n    const tip = this.getTipElement(); // we use append for html objects to maintain js events\n\n    this.setElementContent(SelectorEngine.findOne(SELECTOR_TITLE, tip), this.getTitle());\n\n    let content = this._getContent();\n\n    if (typeof content === 'function') {\n      content = content.call(this._element);\n    }\n\n    this.setElementContent(SelectorEngine.findOne(SELECTOR_CONTENT, tip), content);\n    tip.classList.remove(CLASS_NAME_FADE$2, CLASS_NAME_SHOW$2);\n  } // Private\n\n\n  _addAttachmentClass(attachment) {\n    this.getTipElement().classList.add(`${CLASS_PREFIX}-${this.updateAttachment(attachment)}`);\n  }\n\n  _getContent() {\n    return this._element.getAttribute('data-bs-content') || this._config.content;\n  }\n\n  _cleanTipClass() {\n    const tip = this.getTipElement();\n    const tabClass = tip.getAttribute('class').match(BSCLS_PREFIX_REGEX);\n\n    if (tabClass !== null && tabClass.length > 0) {\n      tabClass.map(token => token.trim()).forEach(tClass => tip.classList.remove(tClass));\n    }\n  } // Static\n\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Popover.getOrCreateInstance(this, config);\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config]();\n      }\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Popover to jQuery only if jQuery is present\n */\n\n\ndefineJQueryPlugin(Popover);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): scrollspy.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$2 = 'scrollspy';\nconst DATA_KEY$2 = 'bs.scrollspy';\nconst EVENT_KEY$2 = `.${DATA_KEY$2}`;\nconst DATA_API_KEY$1 = '.data-api';\nconst Default$1 = {\n  offset: 10,\n  method: 'auto',\n  target: ''\n};\nconst DefaultType$1 = {\n  offset: 'number',\n  method: 'string',\n  target: '(string|element)'\n};\nconst EVENT_ACTIVATE = `activate${EVENT_KEY$2}`;\nconst EVENT_SCROLL = `scroll${EVENT_KEY$2}`;\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY$2}${DATA_API_KEY$1}`;\nconst CLASS_NAME_DROPDOWN_ITEM = 'dropdown-item';\nconst CLASS_NAME_ACTIVE$1 = 'active';\nconst SELECTOR_DATA_SPY = '[data-bs-spy=\"scroll\"]';\nconst SELECTOR_NAV_LIST_GROUP$1 = '.nav, .list-group';\nconst SELECTOR_NAV_LINKS = '.nav-link';\nconst SELECTOR_NAV_ITEMS = '.nav-item';\nconst SELECTOR_LIST_ITEMS = '.list-group-item';\nconst SELECTOR_DROPDOWN$1 = '.dropdown';\nconst SELECTOR_DROPDOWN_TOGGLE$1 = '.dropdown-toggle';\nconst METHOD_OFFSET = 'offset';\nconst METHOD_POSITION = 'position';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass ScrollSpy extends BaseComponent {\n  constructor(element, config) {\n    super(element);\n    this._scrollElement = this._element.tagName === 'BODY' ? window : this._element;\n    this._config = this._getConfig(config);\n    this._selector = `${this._config.target} ${SELECTOR_NAV_LINKS}, ${this._config.target} ${SELECTOR_LIST_ITEMS}, ${this._config.target} .${CLASS_NAME_DROPDOWN_ITEM}`;\n    this._offsets = [];\n    this._targets = [];\n    this._activeTarget = null;\n    this._scrollHeight = 0;\n    EventHandler.on(this._scrollElement, EVENT_SCROLL, () => this._process());\n    this.refresh();\n\n    this._process();\n  } // Getters\n\n\n  static get Default() {\n    return Default$1;\n  }\n\n  static get NAME() {\n    return NAME$2;\n  } // Public\n\n\n  refresh() {\n    const autoMethod = this._scrollElement === this._scrollElement.window ? METHOD_OFFSET : METHOD_POSITION;\n    const offsetMethod = this._config.method === 'auto' ? autoMethod : this._config.method;\n    const offsetBase = offsetMethod === METHOD_POSITION ? this._getScrollTop() : 0;\n    this._offsets = [];\n    this._targets = [];\n    this._scrollHeight = this._getScrollHeight();\n    const targets = SelectorEngine.find(this._selector);\n    targets.map(element => {\n      const targetSelector = getSelectorFromElement(element);\n      const target = targetSelector ? SelectorEngine.findOne(targetSelector) : null;\n\n      if (target) {\n        const targetBCR = target.getBoundingClientRect();\n\n        if (targetBCR.width || targetBCR.height) {\n          return [Manipulator[offsetMethod](target).top + offsetBase, targetSelector];\n        }\n      }\n\n      return null;\n    }).filter(item => item).sort((a, b) => a[0] - b[0]).forEach(item => {\n      this._offsets.push(item[0]);\n\n      this._targets.push(item[1]);\n    });\n  }\n\n  dispose() {\n    EventHandler.off(this._scrollElement, EVENT_KEY$2);\n    super.dispose();\n  } // Private\n\n\n  _getConfig(config) {\n    config = { ...Default$1,\n      ...Manipulator.getDataAttributes(this._element),\n      ...(typeof config === 'object' && config ? config : {})\n    };\n\n    if (typeof config.target !== 'string' && isElement(config.target)) {\n      let {\n        id\n      } = config.target;\n\n      if (!id) {\n        id = getUID(NAME$2);\n        config.target.id = id;\n      }\n\n      config.target = `#${id}`;\n    }\n\n    typeCheckConfig(NAME$2, config, DefaultType$1);\n    return config;\n  }\n\n  _getScrollTop() {\n    return this._scrollElement === window ? this._scrollElement.pageYOffset : this._scrollElement.scrollTop;\n  }\n\n  _getScrollHeight() {\n    return this._scrollElement.scrollHeight || Math.max(document.body.scrollHeight, document.documentElement.scrollHeight);\n  }\n\n  _getOffsetHeight() {\n    return this._scrollElement === window ? window.innerHeight : this._scrollElement.getBoundingClientRect().height;\n  }\n\n  _process() {\n    const scrollTop = this._getScrollTop() + this._config.offset;\n\n    const scrollHeight = this._getScrollHeight();\n\n    const maxScroll = this._config.offset + scrollHeight - this._getOffsetHeight();\n\n    if (this._scrollHeight !== scrollHeight) {\n      this.refresh();\n    }\n\n    if (scrollTop >= maxScroll) {\n      const target = this._targets[this._targets.length - 1];\n\n      if (this._activeTarget !== target) {\n        this._activate(target);\n      }\n\n      return;\n    }\n\n    if (this._activeTarget && scrollTop < this._offsets[0] && this._offsets[0] > 0) {\n      this._activeTarget = null;\n\n      this._clear();\n\n      return;\n    }\n\n    for (let i = this._offsets.length; i--;) {\n      const isActiveTarget = this._activeTarget !== this._targets[i] && scrollTop >= this._offsets[i] && (typeof this._offsets[i + 1] === 'undefined' || scrollTop < this._offsets[i + 1]);\n\n      if (isActiveTarget) {\n        this._activate(this._targets[i]);\n      }\n    }\n  }\n\n  _activate(target) {\n    this._activeTarget = target;\n\n    this._clear();\n\n    const queries = this._selector.split(',').map(selector => `${selector}[data-bs-target=\"${target}\"],${selector}[href=\"${target}\"]`);\n\n    const link = SelectorEngine.findOne(queries.join(','));\n\n    if (link.classList.contains(CLASS_NAME_DROPDOWN_ITEM)) {\n      SelectorEngine.findOne(SELECTOR_DROPDOWN_TOGGLE$1, link.closest(SELECTOR_DROPDOWN$1)).classList.add(CLASS_NAME_ACTIVE$1);\n      link.classList.add(CLASS_NAME_ACTIVE$1);\n    } else {\n      // Set triggered link as active\n      link.classList.add(CLASS_NAME_ACTIVE$1);\n      SelectorEngine.parents(link, SELECTOR_NAV_LIST_GROUP$1).forEach(listGroup => {\n        // Set triggered links parents as active\n        // With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor\n        SelectorEngine.prev(listGroup, `${SELECTOR_NAV_LINKS}, ${SELECTOR_LIST_ITEMS}`).forEach(item => item.classList.add(CLASS_NAME_ACTIVE$1)); // Handle special case when .nav-link is inside .nav-item\n\n        SelectorEngine.prev(listGroup, SELECTOR_NAV_ITEMS).forEach(navItem => {\n          SelectorEngine.children(navItem, SELECTOR_NAV_LINKS).forEach(item => item.classList.add(CLASS_NAME_ACTIVE$1));\n        });\n      });\n    }\n\n    EventHandler.trigger(this._scrollElement, EVENT_ACTIVATE, {\n      relatedTarget: target\n    });\n  }\n\n  _clear() {\n    SelectorEngine.find(this._selector).filter(node => node.classList.contains(CLASS_NAME_ACTIVE$1)).forEach(node => node.classList.remove(CLASS_NAME_ACTIVE$1));\n  } // Static\n\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = ScrollSpy.getOrCreateInstance(this, config);\n\n      if (typeof config !== 'string') {\n        return;\n      }\n\n      if (typeof data[config] === 'undefined') {\n        throw new TypeError(`No method named \"${config}\"`);\n      }\n\n      data[config]();\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n  SelectorEngine.find(SELECTOR_DATA_SPY).forEach(spy => new ScrollSpy(spy));\n});\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .ScrollSpy to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(ScrollSpy);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): tab.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$1 = 'tab';\nconst DATA_KEY$1 = 'bs.tab';\nconst EVENT_KEY$1 = `.${DATA_KEY$1}`;\nconst DATA_API_KEY = '.data-api';\nconst EVENT_HIDE$1 = `hide${EVENT_KEY$1}`;\nconst EVENT_HIDDEN$1 = `hidden${EVENT_KEY$1}`;\nconst EVENT_SHOW$1 = `show${EVENT_KEY$1}`;\nconst EVENT_SHOWN$1 = `shown${EVENT_KEY$1}`;\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY$1}${DATA_API_KEY}`;\nconst CLASS_NAME_DROPDOWN_MENU = 'dropdown-menu';\nconst CLASS_NAME_ACTIVE = 'active';\nconst CLASS_NAME_FADE$1 = 'fade';\nconst CLASS_NAME_SHOW$1 = 'show';\nconst SELECTOR_DROPDOWN = '.dropdown';\nconst SELECTOR_NAV_LIST_GROUP = '.nav, .list-group';\nconst SELECTOR_ACTIVE = '.active';\nconst SELECTOR_ACTIVE_UL = ':scope > li > .active';\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"tab\"], [data-bs-toggle=\"pill\"], [data-bs-toggle=\"list\"]';\nconst SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle';\nconst SELECTOR_DROPDOWN_ACTIVE_CHILD = ':scope > .dropdown-menu .active';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Tab extends BaseComponent {\n  // Getters\n  static get NAME() {\n    return NAME$1;\n  } // Public\n\n\n  show() {\n    if (this._element.parentNode && this._element.parentNode.nodeType === Node.ELEMENT_NODE && this._element.classList.contains(CLASS_NAME_ACTIVE)) {\n      return;\n    }\n\n    let previous;\n    const target = getElementFromSelector(this._element);\n\n    const listElement = this._element.closest(SELECTOR_NAV_LIST_GROUP);\n\n    if (listElement) {\n      const itemSelector = listElement.nodeName === 'UL' || listElement.nodeName === 'OL' ? SELECTOR_ACTIVE_UL : SELECTOR_ACTIVE;\n      previous = SelectorEngine.find(itemSelector, listElement);\n      previous = previous[previous.length - 1];\n    }\n\n    const hideEvent = previous ? EventHandler.trigger(previous, EVENT_HIDE$1, {\n      relatedTarget: this._element\n    }) : null;\n    const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$1, {\n      relatedTarget: previous\n    });\n\n    if (showEvent.defaultPrevented || hideEvent !== null && hideEvent.defaultPrevented) {\n      return;\n    }\n\n    this._activate(this._element, listElement);\n\n    const complete = () => {\n      EventHandler.trigger(previous, EVENT_HIDDEN$1, {\n        relatedTarget: this._element\n      });\n      EventHandler.trigger(this._element, EVENT_SHOWN$1, {\n        relatedTarget: previous\n      });\n    };\n\n    if (target) {\n      this._activate(target, target.parentNode, complete);\n    } else {\n      complete();\n    }\n  } // Private\n\n\n  _activate(element, container, callback) {\n    const activeElements = container && (container.nodeName === 'UL' || container.nodeName === 'OL') ? SelectorEngine.find(SELECTOR_ACTIVE_UL, container) : SelectorEngine.children(container, SELECTOR_ACTIVE);\n    const active = activeElements[0];\n    const isTransitioning = callback && active && active.classList.contains(CLASS_NAME_FADE$1);\n\n    const complete = () => this._transitionComplete(element, active, callback);\n\n    if (active && isTransitioning) {\n      active.classList.remove(CLASS_NAME_SHOW$1);\n\n      this._queueCallback(complete, element, true);\n    } else {\n      complete();\n    }\n  }\n\n  _transitionComplete(element, active, callback) {\n    if (active) {\n      active.classList.remove(CLASS_NAME_ACTIVE);\n      const dropdownChild = SelectorEngine.findOne(SELECTOR_DROPDOWN_ACTIVE_CHILD, active.parentNode);\n\n      if (dropdownChild) {\n        dropdownChild.classList.remove(CLASS_NAME_ACTIVE);\n      }\n\n      if (active.getAttribute('role') === 'tab') {\n        active.setAttribute('aria-selected', false);\n      }\n    }\n\n    element.classList.add(CLASS_NAME_ACTIVE);\n\n    if (element.getAttribute('role') === 'tab') {\n      element.setAttribute('aria-selected', true);\n    }\n\n    reflow(element);\n\n    if (element.classList.contains(CLASS_NAME_FADE$1)) {\n      element.classList.add(CLASS_NAME_SHOW$1);\n    }\n\n    let parent = element.parentNode;\n\n    if (parent && parent.nodeName === 'LI') {\n      parent = parent.parentNode;\n    }\n\n    if (parent && parent.classList.contains(CLASS_NAME_DROPDOWN_MENU)) {\n      const dropdownElement = element.closest(SELECTOR_DROPDOWN);\n\n      if (dropdownElement) {\n        SelectorEngine.find(SELECTOR_DROPDOWN_TOGGLE, dropdownElement).forEach(dropdown => dropdown.classList.add(CLASS_NAME_ACTIVE));\n      }\n\n      element.setAttribute('aria-expanded', true);\n    }\n\n    if (callback) {\n      callback();\n    }\n  } // Static\n\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Tab.getOrCreateInstance(this);\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config]();\n      }\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n  if (['A', 'AREA'].includes(this.tagName)) {\n    event.preventDefault();\n  }\n\n  if (isDisabled(this)) {\n    return;\n  }\n\n  const data = Tab.getOrCreateInstance(this);\n  data.show();\n});\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Tab to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Tab);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): toast.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'toast';\nconst DATA_KEY = 'bs.toast';\nconst EVENT_KEY = `.${DATA_KEY}`;\nconst EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY}`;\nconst EVENT_MOUSEOVER = `mouseover${EVENT_KEY}`;\nconst EVENT_MOUSEOUT = `mouseout${EVENT_KEY}`;\nconst EVENT_FOCUSIN = `focusin${EVENT_KEY}`;\nconst EVENT_FOCUSOUT = `focusout${EVENT_KEY}`;\nconst EVENT_HIDE = `hide${EVENT_KEY}`;\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`;\nconst EVENT_SHOW = `show${EVENT_KEY}`;\nconst EVENT_SHOWN = `shown${EVENT_KEY}`;\nconst CLASS_NAME_FADE = 'fade';\nconst CLASS_NAME_HIDE = 'hide';\nconst CLASS_NAME_SHOW = 'show';\nconst CLASS_NAME_SHOWING = 'showing';\nconst DefaultType = {\n  animation: 'boolean',\n  autohide: 'boolean',\n  delay: 'number'\n};\nconst Default = {\n  animation: true,\n  autohide: true,\n  delay: 5000\n};\nconst SELECTOR_DATA_DISMISS = '[data-bs-dismiss=\"toast\"]';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Toast extends BaseComponent {\n  constructor(element, config) {\n    super(element);\n    this._config = this._getConfig(config);\n    this._timeout = null;\n    this._hasMouseInteraction = false;\n    this._hasKeyboardInteraction = false;\n\n    this._setListeners();\n  } // Getters\n\n\n  static get DefaultType() {\n    return DefaultType;\n  }\n\n  static get Default() {\n    return Default;\n  }\n\n  static get NAME() {\n    return NAME;\n  } // Public\n\n\n  show() {\n    const showEvent = EventHandler.trigger(this._element, EVENT_SHOW);\n\n    if (showEvent.defaultPrevented) {\n      return;\n    }\n\n    this._clearTimeout();\n\n    if (this._config.animation) {\n      this._element.classList.add(CLASS_NAME_FADE);\n    }\n\n    const complete = () => {\n      this._element.classList.remove(CLASS_NAME_SHOWING);\n\n      this._element.classList.add(CLASS_NAME_SHOW);\n\n      EventHandler.trigger(this._element, EVENT_SHOWN);\n\n      this._maybeScheduleHide();\n    };\n\n    this._element.classList.remove(CLASS_NAME_HIDE);\n\n    reflow(this._element);\n\n    this._element.classList.add(CLASS_NAME_SHOWING);\n\n    this._queueCallback(complete, this._element, this._config.animation);\n  }\n\n  hide() {\n    if (!this._element.classList.contains(CLASS_NAME_SHOW)) {\n      return;\n    }\n\n    const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE);\n\n    if (hideEvent.defaultPrevented) {\n      return;\n    }\n\n    const complete = () => {\n      this._element.classList.add(CLASS_NAME_HIDE);\n\n      EventHandler.trigger(this._element, EVENT_HIDDEN);\n    };\n\n    this._element.classList.remove(CLASS_NAME_SHOW);\n\n    this._queueCallback(complete, this._element, this._config.animation);\n  }\n\n  dispose() {\n    this._clearTimeout();\n\n    if (this._element.classList.contains(CLASS_NAME_SHOW)) {\n      this._element.classList.remove(CLASS_NAME_SHOW);\n    }\n\n    super.dispose();\n  } // Private\n\n\n  _getConfig(config) {\n    config = { ...Default,\n      ...Manipulator.getDataAttributes(this._element),\n      ...(typeof config === 'object' && config ? config : {})\n    };\n    typeCheckConfig(NAME, config, this.constructor.DefaultType);\n    return config;\n  }\n\n  _maybeScheduleHide() {\n    if (!this._config.autohide) {\n      return;\n    }\n\n    if (this._hasMouseInteraction || this._hasKeyboardInteraction) {\n      return;\n    }\n\n    this._timeout = setTimeout(() => {\n      this.hide();\n    }, this._config.delay);\n  }\n\n  _onInteraction(event, isInteracting) {\n    switch (event.type) {\n      case 'mouseover':\n      case 'mouseout':\n        this._hasMouseInteraction = isInteracting;\n        break;\n\n      case 'focusin':\n      case 'focusout':\n        this._hasKeyboardInteraction = isInteracting;\n        break;\n    }\n\n    if (isInteracting) {\n      this._clearTimeout();\n\n      return;\n    }\n\n    const nextElement = event.relatedTarget;\n\n    if (this._element === nextElement || this._element.contains(nextElement)) {\n      return;\n    }\n\n    this._maybeScheduleHide();\n  }\n\n  _setListeners() {\n    EventHandler.on(this._element, EVENT_CLICK_DISMISS, SELECTOR_DATA_DISMISS, () => this.hide());\n    EventHandler.on(this._element, EVENT_MOUSEOVER, event => this._onInteraction(event, true));\n    EventHandler.on(this._element, EVENT_MOUSEOUT, event => this._onInteraction(event, false));\n    EventHandler.on(this._element, EVENT_FOCUSIN, event => this._onInteraction(event, true));\n    EventHandler.on(this._element, EVENT_FOCUSOUT, event => this._onInteraction(event, false));\n  }\n\n  _clearTimeout() {\n    clearTimeout(this._timeout);\n    this._timeout = null;\n  } // Static\n\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Toast.getOrCreateInstance(this, config);\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config](this);\n      }\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Toast to jQuery only if jQuery is present\n */\n\n\ndefineJQueryPlugin(Toast);\n\nexport { Alert, Button, Carousel, Collapse, Dropdown, Modal, Offcanvas, Popover, ScrollSpy, Tab, Toast, Tooltip };\n//# sourceMappingURL=bootstrap.esm.js.map\n"
  },
  {
    "path": "src/sourceDev.WebApp/SharedThemes/lux/wwwroot/js/jquery.js",
    "content": "/*!\n * jQuery JavaScript Library v3.7.0\n * https://jquery.com/\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license\n * https://jquery.org/license\n *\n * Date: 2023-05-11T18:29Z\n */\n(function (global, factory) {\n\n\t\"use strict\";\n\n\tif (typeof module === \"object\" && typeof module.exports === \"object\") {\n\n\t\t// For CommonJS and CommonJS-like environments where a proper `window`\n\t\t// is present, execute the factory and get jQuery.\n\t\t// For environments that do not have a `window` with a `document`\n\t\t// (such as Node.js), expose a factory as module.exports.\n\t\t// This accentuates the need for the creation of a real `window`.\n\t\t// e.g. var jQuery = require(\"jquery\")(window);\n\t\t// See ticket trac-14549 for more info.\n\t\tmodule.exports = global.document ?\n\t\t\tfactory(global, true) :\n\t\t\tfunction (w) {\n\t\t\t\tif (!w.document) {\n\t\t\t\t\tthrow new Error(\"jQuery requires a window with a document\");\n\t\t\t\t}\n\t\t\t\treturn factory(w);\n\t\t\t};\n\t} else {\n\t\tfactory(global);\n\t}\n\n\t// Pass this if window is not defined yet\n})(typeof window !== \"undefined\" ? window : this, function (window, noGlobal) {\n\n\t// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1\n\t// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode\n\t// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common\n\t// enough that all such attempts are guarded in a try block.\n\t\"use strict\";\n\n\tvar arr = [];\n\n\tvar getProto = Object.getPrototypeOf;\n\n\tvar slice = arr.slice;\n\n\tvar flat = arr.flat ? function (array) {\n\t\treturn arr.flat.call(array);\n\t} : function (array) {\n\t\treturn arr.concat.apply([], array);\n\t};\n\n\n\tvar push = arr.push;\n\n\tvar indexOf = arr.indexOf;\n\n\tvar class2type = {};\n\n\tvar toString = class2type.toString;\n\n\tvar hasOwn = class2type.hasOwnProperty;\n\n\tvar fnToString = hasOwn.toString;\n\n\tvar ObjectFunctionString = fnToString.call(Object);\n\n\tvar support = {};\n\n\tvar isFunction = function isFunction(obj) {\n\n\t\t// Support: Chrome <=57, Firefox <=52\n\t\t// In some browsers, typeof returns \"function\" for HTML <object> elements\n\t\t// (i.e., `typeof document.createElement( \"object\" ) === \"function\"`).\n\t\t// We don't want to classify *any* DOM node as a function.\n\t\t// Support: QtWeb <=3.8.5, WebKit <=534.34, wkhtmltopdf tool <=0.12.5\n\t\t// Plus for old WebKit, typeof returns \"function\" for HTML collections\n\t\t// (e.g., `typeof document.getElementsByTagName(\"div\") === \"function\"`). (gh-4756)\n\t\treturn typeof obj === \"function\" && typeof obj.nodeType !== \"number\" &&\n\t\t\ttypeof obj.item !== \"function\";\n\t};\n\n\n\tvar isWindow = function isWindow(obj) {\n\t\treturn obj != null && obj === obj.window;\n\t};\n\n\n\tvar document = window.document;\n\n\n\n\tvar preservedScriptAttributes = {\n\t\ttype: true,\n\t\tsrc: true,\n\t\tnonce: true,\n\t\tnoModule: true\n\t};\n\n\tfunction DOMEval(code, node, doc) {\n\t\tdoc = doc || document;\n\n\t\tvar i, val,\n\t\t\tscript = doc.createElement(\"script\");\n\n\t\tscript.text = code;\n\t\tif (node) {\n\t\t\tfor (i in preservedScriptAttributes) {\n\n\t\t\t\t// Support: Firefox 64+, Edge 18+\n\t\t\t\t// Some browsers don't support the \"nonce\" property on scripts.\n\t\t\t\t// On the other hand, just using `getAttribute` is not enough as\n\t\t\t\t// the `nonce` attribute is reset to an empty string whenever it\n\t\t\t\t// becomes browsing-context connected.\n\t\t\t\t// See https://github.com/whatwg/html/issues/2369\n\t\t\t\t// See https://html.spec.whatwg.org/#nonce-attributes\n\t\t\t\t// The `node.getAttribute` check was added for the sake of\n\t\t\t\t// `jQuery.globalEval` so that it can fake a nonce-containing node\n\t\t\t\t// via an object.\n\t\t\t\tval = node[i] || node.getAttribute && node.getAttribute(i);\n\t\t\t\tif (val) {\n\t\t\t\t\tscript.setAttribute(i, val);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tdoc.head.appendChild(script).parentNode.removeChild(script);\n\t}\n\n\n\tfunction toType(obj) {\n\t\tif (obj == null) {\n\t\t\treturn obj + \"\";\n\t\t}\n\n\t\t// Support: Android <=2.3 only (functionish RegExp)\n\t\treturn typeof obj === \"object\" || typeof obj === \"function\" ?\n\t\t\tclass2type[toString.call(obj)] || \"object\" :\n\t\t\ttypeof obj;\n\t}\n\t/* global Symbol */\n\t// Defining this global in .eslintrc.json would create a danger of using the global\n\t// unguarded in another place, it seems safer to define global only for this module\n\n\n\n\tvar version = \"3.7.0\",\n\n\t\trhtmlSuffix = /HTML$/i,\n\n\t\t// Define a local copy of jQuery\n\t\tjQuery = function (selector, context) {\n\n\t\t\t// The jQuery object is actually just the init constructor 'enhanced'\n\t\t\t// Need init if jQuery is called (just allow error to be thrown if not included)\n\t\t\treturn new jQuery.fn.init(selector, context);\n\t\t};\n\n\tjQuery.fn = jQuery.prototype = {\n\n\t\t// The current version of jQuery being used\n\t\tjquery: version,\n\n\t\tconstructor: jQuery,\n\n\t\t// The default length of a jQuery object is 0\n\t\tlength: 0,\n\n\t\ttoArray: function () {\n\t\t\treturn slice.call(this);\n\t\t},\n\n\t\t// Get the Nth element in the matched element set OR\n\t\t// Get the whole matched element set as a clean array\n\t\tget: function (num) {\n\n\t\t\t// Return all the elements in a clean array\n\t\t\tif (num == null) {\n\t\t\t\treturn slice.call(this);\n\t\t\t}\n\n\t\t\t// Return just the one element from the set\n\t\t\treturn num < 0 ? this[num + this.length] : this[num];\n\t\t},\n\n\t\t// Take an array of elements and push it onto the stack\n\t\t// (returning the new matched element set)\n\t\tpushStack: function (elems) {\n\n\t\t\t// Build a new jQuery matched element set\n\t\t\tvar ret = jQuery.merge(this.constructor(), elems);\n\n\t\t\t// Add the old object onto the stack (as a reference)\n\t\t\tret.prevObject = this;\n\n\t\t\t// Return the newly-formed element set\n\t\t\treturn ret;\n\t\t},\n\n\t\t// Execute a callback for every element in the matched set.\n\t\teach: function (callback) {\n\t\t\treturn jQuery.each(this, callback);\n\t\t},\n\n\t\tmap: function (callback) {\n\t\t\treturn this.pushStack(jQuery.map(this, function (elem, i) {\n\t\t\t\treturn callback.call(elem, i, elem);\n\t\t\t}));\n\t\t},\n\n\t\tslice: function () {\n\t\t\treturn this.pushStack(slice.apply(this, arguments));\n\t\t},\n\n\t\tfirst: function () {\n\t\t\treturn this.eq(0);\n\t\t},\n\n\t\tlast: function () {\n\t\t\treturn this.eq(-1);\n\t\t},\n\n\t\teven: function () {\n\t\t\treturn this.pushStack(jQuery.grep(this, function (_elem, i) {\n\t\t\t\treturn (i + 1) % 2;\n\t\t\t}));\n\t\t},\n\n\t\todd: function () {\n\t\t\treturn this.pushStack(jQuery.grep(this, function (_elem, i) {\n\t\t\t\treturn i % 2;\n\t\t\t}));\n\t\t},\n\n\t\teq: function (i) {\n\t\t\tvar len = this.length,\n\t\t\t\tj = +i + (i < 0 ? len : 0);\n\t\t\treturn this.pushStack(j >= 0 && j < len ? [this[j]] : []);\n\t\t},\n\n\t\tend: function () {\n\t\t\treturn this.prevObject || this.constructor();\n\t\t},\n\n\t\t// For internal use only.\n\t\t// Behaves like an Array's method, not like a jQuery method.\n\t\tpush: push,\n\t\tsort: arr.sort,\n\t\tsplice: arr.splice\n\t};\n\n\tjQuery.extend = jQuery.fn.extend = function () {\n\t\tvar options, name, src, copy, copyIsArray, clone,\n\t\t\ttarget = arguments[0] || {},\n\t\t\ti = 1,\n\t\t\tlength = arguments.length,\n\t\t\tdeep = false;\n\n\t\t// Handle a deep copy situation\n\t\tif (typeof target === \"boolean\") {\n\t\t\tdeep = target;\n\n\t\t\t// Skip the boolean and the target\n\t\t\ttarget = arguments[i] || {};\n\t\t\ti++;\n\t\t}\n\n\t\t// Handle case when target is a string or something (possible in deep copy)\n\t\tif (typeof target !== \"object\" && !isFunction(target)) {\n\t\t\ttarget = {};\n\t\t}\n\n\t\t// Extend jQuery itself if only one argument is passed\n\t\tif (i === length) {\n\t\t\ttarget = this;\n\t\t\ti--;\n\t\t}\n\n\t\tfor (; i < length; i++) {\n\n\t\t\t// Only deal with non-null/undefined values\n\t\t\tif ((options = arguments[i]) != null) {\n\n\t\t\t\t// Extend the base object\n\t\t\t\tfor (name in options) {\n\t\t\t\t\tcopy = options[name];\n\n\t\t\t\t\t// Prevent Object.prototype pollution\n\t\t\t\t\t// Prevent never-ending loop\n\t\t\t\t\tif (name === \"__proto__\" || target === copy) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\t\tif (deep && copy && (jQuery.isPlainObject(copy) ||\n\t\t\t\t\t\t(copyIsArray = Array.isArray(copy)))) {\n\t\t\t\t\t\tsrc = target[name];\n\n\t\t\t\t\t\t// Ensure proper type for the source value\n\t\t\t\t\t\tif (copyIsArray && !Array.isArray(src)) {\n\t\t\t\t\t\t\tclone = [];\n\t\t\t\t\t\t} else if (!copyIsArray && !jQuery.isPlainObject(src)) {\n\t\t\t\t\t\t\tclone = {};\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tclone = src;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcopyIsArray = false;\n\n\t\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\t\ttarget[name] = jQuery.extend(deep, clone, copy);\n\n\t\t\t\t\t\t// Don't bring in undefined values\n\t\t\t\t\t} else if (copy !== undefined) {\n\t\t\t\t\t\ttarget[name] = copy;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Return the modified object\n\t\treturn target;\n\t};\n\n\tjQuery.extend({\n\n\t\t// Unique for each copy of jQuery on the page\n\t\texpando: \"jQuery\" + (version + Math.random()).replace(/\\D/g, \"\"),\n\n\t\t// Assume jQuery is ready without the ready module\n\t\tisReady: true,\n\n\t\terror: function (msg) {\n\t\t\tthrow new Error(msg);\n\t\t},\n\n\t\tnoop: function () { },\n\n\t\tisPlainObject: function (obj) {\n\t\t\tvar proto, Ctor;\n\n\t\t\t// Detect obvious negatives\n\t\t\t// Use toString instead of jQuery.type to catch host objects\n\t\t\tif (!obj || toString.call(obj) !== \"[object Object]\") {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tproto = getProto(obj);\n\n\t\t\t// Objects with no prototype (e.g., `Object.create( null )`) are plain\n\t\t\tif (!proto) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\t// Objects with prototype are plain iff they were constructed by a global Object function\n\t\t\tCtor = hasOwn.call(proto, \"constructor\") && proto.constructor;\n\t\t\treturn typeof Ctor === \"function\" && fnToString.call(Ctor) === ObjectFunctionString;\n\t\t},\n\n\t\tisEmptyObject: function (obj) {\n\t\t\tvar name;\n\n\t\t\tfor (name in obj) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\n\t\t// Evaluates a script in a provided context; falls back to the global one\n\t\t// if not specified.\n\t\tglobalEval: function (code, options, doc) {\n\t\t\tDOMEval(code, { nonce: options && options.nonce }, doc);\n\t\t},\n\n\t\teach: function (obj, callback) {\n\t\t\tvar length, i = 0;\n\n\t\t\tif (isArrayLike(obj)) {\n\t\t\t\tlength = obj.length;\n\t\t\t\tfor (; i < length; i++) {\n\t\t\t\t\tif (callback.call(obj[i], i, obj[i]) === false) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor (i in obj) {\n\t\t\t\t\tif (callback.call(obj[i], i, obj[i]) === false) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn obj;\n\t\t},\n\n\n\t\t// Retrieve the text value of an array of DOM nodes\n\t\ttext: function (elem) {\n\t\t\tvar node,\n\t\t\t\tret = \"\",\n\t\t\t\ti = 0,\n\t\t\t\tnodeType = elem.nodeType;\n\n\t\t\tif (!nodeType) {\n\n\t\t\t\t// If no nodeType, this is expected to be an array\n\t\t\t\twhile ((node = elem[i++])) {\n\n\t\t\t\t\t// Do not traverse comment nodes\n\t\t\t\t\tret += jQuery.text(node);\n\t\t\t\t}\n\t\t\t} else if (nodeType === 1 || nodeType === 9 || nodeType === 11) {\n\t\t\t\treturn elem.textContent;\n\t\t\t} else if (nodeType === 3 || nodeType === 4) {\n\t\t\t\treturn elem.nodeValue;\n\t\t\t}\n\n\t\t\t// Do not include comment or processing instruction nodes\n\n\t\t\treturn ret;\n\t\t},\n\n\t\t// results is for internal usage only\n\t\tmakeArray: function (arr, results) {\n\t\t\tvar ret = results || [];\n\n\t\t\tif (arr != null) {\n\t\t\t\tif (isArrayLike(Object(arr))) {\n\t\t\t\t\tjQuery.merge(ret,\n\t\t\t\t\t\ttypeof arr === \"string\" ?\n\t\t\t\t\t\t\t[arr] : arr\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\tpush.call(ret, arr);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn ret;\n\t\t},\n\n\t\tinArray: function (elem, arr, i) {\n\t\t\treturn arr == null ? -1 : indexOf.call(arr, elem, i);\n\t\t},\n\n\t\tisXMLDoc: function (elem) {\n\t\t\tvar namespace = elem && elem.namespaceURI,\n\t\t\t\tdocElem = elem && (elem.ownerDocument || elem).documentElement;\n\n\t\t\t// Assume HTML when documentElement doesn't yet exist, such as inside\n\t\t\t// document fragments.\n\t\t\treturn !rhtmlSuffix.test(namespace || docElem && docElem.nodeName || \"HTML\");\n\t\t},\n\n\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\tmerge: function (first, second) {\n\t\t\tvar len = +second.length,\n\t\t\t\tj = 0,\n\t\t\t\ti = first.length;\n\n\t\t\tfor (; j < len; j++) {\n\t\t\t\tfirst[i++] = second[j];\n\t\t\t}\n\n\t\t\tfirst.length = i;\n\n\t\t\treturn first;\n\t\t},\n\n\t\tgrep: function (elems, callback, invert) {\n\t\t\tvar callbackInverse,\n\t\t\t\tmatches = [],\n\t\t\t\ti = 0,\n\t\t\t\tlength = elems.length,\n\t\t\t\tcallbackExpect = !invert;\n\n\t\t\t// Go through the array, only saving the items\n\t\t\t// that pass the validator function\n\t\t\tfor (; i < length; i++) {\n\t\t\t\tcallbackInverse = !callback(elems[i], i);\n\t\t\t\tif (callbackInverse !== callbackExpect) {\n\t\t\t\t\tmatches.push(elems[i]);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn matches;\n\t\t},\n\n\t\t// arg is for internal usage only\n\t\tmap: function (elems, callback, arg) {\n\t\t\tvar length, value,\n\t\t\t\ti = 0,\n\t\t\t\tret = [];\n\n\t\t\t// Go through the array, translating each of the items to their new values\n\t\t\tif (isArrayLike(elems)) {\n\t\t\t\tlength = elems.length;\n\t\t\t\tfor (; i < length; i++) {\n\t\t\t\t\tvalue = callback(elems[i], i, arg);\n\n\t\t\t\t\tif (value != null) {\n\t\t\t\t\t\tret.push(value);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Go through every key on the object,\n\t\t\t} else {\n\t\t\t\tfor (i in elems) {\n\t\t\t\t\tvalue = callback(elems[i], i, arg);\n\n\t\t\t\t\tif (value != null) {\n\t\t\t\t\t\tret.push(value);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Flatten any nested arrays\n\t\t\treturn flat(ret);\n\t\t},\n\n\t\t// A global GUID counter for objects\n\t\tguid: 1,\n\n\t\t// jQuery.support is not used in Core but other projects attach their\n\t\t// properties to it so it needs to exist.\n\t\tsupport: support\n\t});\n\n\tif (typeof Symbol === \"function\") {\n\t\tjQuery.fn[Symbol.iterator] = arr[Symbol.iterator];\n\t}\n\n\t// Populate the class2type map\n\tjQuery.each(\"Boolean Number String Function Array Date RegExp Object Error Symbol\".split(\" \"),\n\t\tfunction (_i, name) {\n\t\t\tclass2type[\"[object \" + name + \"]\"] = name.toLowerCase();\n\t\t});\n\n\tfunction isArrayLike(obj) {\n\n\t\t// Support: real iOS 8.2 only (not reproducible in simulator)\n\t\t// `in` check used to prevent JIT error (gh-2145)\n\t\t// hasOwn isn't used here due to false negatives\n\t\t// regarding Nodelist length in IE\n\t\tvar length = !!obj && \"length\" in obj && obj.length,\n\t\t\ttype = toType(obj);\n\n\t\tif (isFunction(obj) || isWindow(obj)) {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn type === \"array\" || length === 0 ||\n\t\t\ttypeof length === \"number\" && length > 0 && (length - 1) in obj;\n\t}\n\n\n\tfunction nodeName(elem, name) {\n\n\t\treturn elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();\n\n\t}\n\tvar pop = arr.pop;\n\n\n\tvar sort = arr.sort;\n\n\n\tvar splice = arr.splice;\n\n\n\tvar whitespace = \"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\";\n\n\n\tvar rtrimCSS = new RegExp(\n\t\t\"^\" + whitespace + \"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\" + whitespace + \"+$\",\n\t\t\"g\"\n\t);\n\n\n\n\n\t// Note: an element does not contain itself\n\tjQuery.contains = function (a, b) {\n\t\tvar bup = b && b.parentNode;\n\n\t\treturn a === bup || !!(bup && bup.nodeType === 1 && (\n\n\t\t\t// Support: IE 9 - 11+\n\t\t\t// IE doesn't have `contains` on SVG.\n\t\t\ta.contains ?\n\t\t\t\ta.contains(bup) :\n\t\t\t\ta.compareDocumentPosition && a.compareDocumentPosition(bup) & 16\n\t\t));\n\t};\n\n\n\n\n\t// CSS string/identifier serialization\n\t// https://drafts.csswg.org/cssom/#common-serializing-idioms\n\tvar rcssescape = /([\\0-\\x1f\\x7f]|^-?\\d)|^-$|[^\\x80-\\uFFFF\\w-]/g;\n\n\tfunction fcssescape(ch, asCodePoint) {\n\t\tif (asCodePoint) {\n\n\t\t\t// U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER\n\t\t\tif (ch === \"\\0\") {\n\t\t\t\treturn \"\\uFFFD\";\n\t\t\t}\n\n\t\t\t// Control characters and (dependent upon position) numbers get escaped as code points\n\t\t\treturn ch.slice(0, -1) + \"\\\\\" + ch.charCodeAt(ch.length - 1).toString(16) + \" \";\n\t\t}\n\n\t\t// Other potentially-special ASCII characters get backslash-escaped\n\t\treturn \"\\\\\" + ch;\n\t}\n\n\tjQuery.escapeSelector = function (sel) {\n\t\treturn (sel + \"\").replace(rcssescape, fcssescape);\n\t};\n\n\n\n\n\tvar preferredDoc = document,\n\t\tpushNative = push;\n\n\t(function () {\n\n\t\tvar i,\n\t\t\tExpr,\n\t\t\toutermostContext,\n\t\t\tsortInput,\n\t\t\thasDuplicate,\n\t\t\tpush = pushNative,\n\n\t\t\t// Local document vars\n\t\t\tdocument,\n\t\t\tdocumentElement,\n\t\t\tdocumentIsHTML,\n\t\t\trbuggyQSA,\n\t\t\tmatches,\n\n\t\t\t// Instance-specific data\n\t\t\texpando = jQuery.expando,\n\t\t\tdirruns = 0,\n\t\t\tdone = 0,\n\t\t\tclassCache = createCache(),\n\t\t\ttokenCache = createCache(),\n\t\t\tcompilerCache = createCache(),\n\t\t\tnonnativeSelectorCache = createCache(),\n\t\t\tsortOrder = function (a, b) {\n\t\t\t\tif (a === b) {\n\t\t\t\t\thasDuplicate = true;\n\t\t\t\t}\n\t\t\t\treturn 0;\n\t\t\t},\n\n\t\t\tbooleans = \"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|\" +\n\t\t\t\t\"loop|multiple|open|readonly|required|scoped\",\n\n\t\t\t// Regular expressions\n\n\t\t\t// https://www.w3.org/TR/css-syntax-3/#ident-token-diagram\n\t\t\tidentifier = \"(?:\\\\\\\\[\\\\da-fA-F]{1,6}\" + whitespace +\n\t\t\t\t\"?|\\\\\\\\[^\\\\r\\\\n\\\\f]|[\\\\w-]|[^\\0-\\\\x7f])+\",\n\n\t\t\t// Attribute selectors: https://www.w3.org/TR/selectors/#attribute-selectors\n\t\t\tattributes = \"\\\\[\" + whitespace + \"*(\" + identifier + \")(?:\" + whitespace +\n\n\t\t\t\t// Operator (capture 2)\n\t\t\t\t\"*([*^$|!~]?=)\" + whitespace +\n\n\t\t\t\t// \"Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]\"\n\t\t\t\t\"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\" + identifier + \"))|)\" +\n\t\t\t\twhitespace + \"*\\\\]\",\n\n\t\t\tpseudos = \":(\" + identifier + \")(?:\\\\((\" +\n\n\t\t\t\t// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:\n\t\t\t\t// 1. quoted (capture 3; capture 4 or capture 5)\n\t\t\t\t\"('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|\" +\n\n\t\t\t\t// 2. simple (capture 6)\n\t\t\t\t\"((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\" + attributes + \")*)|\" +\n\n\t\t\t\t// 3. anything else (capture 2)\n\t\t\t\t\".*\" +\n\t\t\t\t\")\\\\)|)\",\n\n\t\t\t// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter\n\t\t\trwhitespace = new RegExp(whitespace + \"+\", \"g\"),\n\n\t\t\trcomma = new RegExp(\"^\" + whitespace + \"*,\" + whitespace + \"*\"),\n\t\t\trleadingCombinator = new RegExp(\"^\" + whitespace + \"*([>+~]|\" + whitespace + \")\" +\n\t\t\t\twhitespace + \"*\"),\n\t\t\trdescend = new RegExp(whitespace + \"|>\"),\n\n\t\t\trpseudo = new RegExp(pseudos),\n\t\t\tridentifier = new RegExp(\"^\" + identifier + \"$\"),\n\n\t\t\tmatchExpr = {\n\t\t\t\tID: new RegExp(\"^#(\" + identifier + \")\"),\n\t\t\t\tCLASS: new RegExp(\"^\\\\.(\" + identifier + \")\"),\n\t\t\t\tTAG: new RegExp(\"^(\" + identifier + \"|[*])\"),\n\t\t\t\tATTR: new RegExp(\"^\" + attributes),\n\t\t\t\tPSEUDO: new RegExp(\"^\" + pseudos),\n\t\t\t\tCHILD: new RegExp(\n\t\t\t\t\t\"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\" +\n\t\t\t\t\twhitespace + \"*(even|odd|(([+-]|)(\\\\d*)n|)\" + whitespace + \"*(?:([+-]|)\" +\n\t\t\t\t\twhitespace + \"*(\\\\d+)|))\" + whitespace + \"*\\\\)|)\", \"i\"),\n\t\t\t\tbool: new RegExp(\"^(?:\" + booleans + \")$\", \"i\"),\n\n\t\t\t\t// For use in libraries implementing .is()\n\t\t\t\t// We use this for POS matching in `select`\n\t\t\t\tneedsContext: new RegExp(\"^\" + whitespace +\n\t\t\t\t\t\"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\" + whitespace +\n\t\t\t\t\t\"*((?:-\\\\d)?\\\\d*)\" + whitespace + \"*\\\\)|)(?=[^-]|$)\", \"i\")\n\t\t\t},\n\n\t\t\trinputs = /^(?:input|select|textarea|button)$/i,\n\t\t\trheader = /^h\\d$/i,\n\n\t\t\t// Easily-parseable/retrievable ID or TAG or CLASS selectors\n\t\t\trquickExpr = /^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,\n\n\t\t\trsibling = /[+~]/,\n\n\t\t\t// CSS escapes\n\t\t\t// https://www.w3.org/TR/CSS21/syndata.html#escaped-characters\n\t\t\trunescape = new RegExp(\"\\\\\\\\[\\\\da-fA-F]{1,6}\" + whitespace +\n\t\t\t\t\"?|\\\\\\\\([^\\\\r\\\\n\\\\f])\", \"g\"),\n\t\t\tfunescape = function (escape, nonHex) {\n\t\t\t\tvar high = \"0x\" + escape.slice(1) - 0x10000;\n\n\t\t\t\tif (nonHex) {\n\n\t\t\t\t\t// Strip the backslash prefix from a non-hex escape sequence\n\t\t\t\t\treturn nonHex;\n\t\t\t\t}\n\n\t\t\t\t// Replace a hexadecimal escape sequence with the encoded Unicode code point\n\t\t\t\t// Support: IE <=11+\n\t\t\t\t// For values outside the Basic Multilingual Plane (BMP), manually construct a\n\t\t\t\t// surrogate pair\n\t\t\t\treturn high < 0 ?\n\t\t\t\t\tString.fromCharCode(high + 0x10000) :\n\t\t\t\t\tString.fromCharCode(high >> 10 | 0xD800, high & 0x3FF | 0xDC00);\n\t\t\t},\n\n\t\t\t// Used for iframes; see `setDocument`.\n\t\t\t// Support: IE 9 - 11+, Edge 12 - 18+\n\t\t\t// Removing the function wrapper causes a \"Permission Denied\"\n\t\t\t// error in IE/Edge.\n\t\t\tunloadHandler = function () {\n\t\t\t\tsetDocument();\n\t\t\t},\n\n\t\t\tinDisabledFieldset = addCombinator(\n\t\t\t\tfunction (elem) {\n\t\t\t\t\treturn elem.disabled === true && nodeName(elem, \"fieldset\");\n\t\t\t\t},\n\t\t\t\t{ dir: \"parentNode\", next: \"legend\" }\n\t\t\t);\n\n\t\t// Support: IE <=9 only\n\t\t// Accessing document.activeElement can throw unexpectedly\n\t\t// https://bugs.jquery.com/ticket/13393\n\t\tfunction safeActiveElement() {\n\t\t\ttry {\n\t\t\t\treturn document.activeElement;\n\t\t\t} catch (err) { }\n\t\t}\n\n\t\t// Optimize for push.apply( _, NodeList )\n\t\ttry {\n\t\t\tpush.apply(\n\t\t\t\t(arr = slice.call(preferredDoc.childNodes)),\n\t\t\t\tpreferredDoc.childNodes\n\t\t\t);\n\n\t\t\t// Support: Android <=4.0\n\t\t\t// Detect silently failing push.apply\n\t\t\t// eslint-disable-next-line no-unused-expressions\n\t\t\tarr[preferredDoc.childNodes.length].nodeType;\n\t\t} catch (e) {\n\t\t\tpush = {\n\t\t\t\tapply: function (target, els) {\n\t\t\t\t\tpushNative.apply(target, slice.call(els));\n\t\t\t\t},\n\t\t\t\tcall: function (target) {\n\t\t\t\t\tpushNative.apply(target, slice.call(arguments, 1));\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\n\t\tfunction find(selector, context, results, seed) {\n\t\t\tvar m, i, elem, nid, match, groups, newSelector,\n\t\t\t\tnewContext = context && context.ownerDocument,\n\n\t\t\t\t// nodeType defaults to 9, since context defaults to document\n\t\t\t\tnodeType = context ? context.nodeType : 9;\n\n\t\t\tresults = results || [];\n\n\t\t\t// Return early from calls with invalid selector or context\n\t\t\tif (typeof selector !== \"string\" || !selector ||\n\t\t\t\tnodeType !== 1 && nodeType !== 9 && nodeType !== 11) {\n\n\t\t\t\treturn results;\n\t\t\t}\n\n\t\t\t// Try to shortcut find operations (as opposed to filters) in HTML documents\n\t\t\tif (!seed) {\n\t\t\t\tsetDocument(context);\n\t\t\t\tcontext = context || document;\n\n\t\t\t\tif (documentIsHTML) {\n\n\t\t\t\t\t// If the selector is sufficiently simple, try using a \"get*By*\" DOM method\n\t\t\t\t\t// (excepting DocumentFragment context, where the methods don't exist)\n\t\t\t\t\tif (nodeType !== 11 && (match = rquickExpr.exec(selector))) {\n\n\t\t\t\t\t\t// ID selector\n\t\t\t\t\t\tif ((m = match[1])) {\n\n\t\t\t\t\t\t\t// Document context\n\t\t\t\t\t\t\tif (nodeType === 9) {\n\t\t\t\t\t\t\t\tif ((elem = context.getElementById(m))) {\n\n\t\t\t\t\t\t\t\t\t// Support: IE 9 only\n\t\t\t\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\t\t\t\tif (elem.id === m) {\n\t\t\t\t\t\t\t\t\t\tpush.call(results, elem);\n\t\t\t\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t// Element context\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t// Support: IE 9 only\n\t\t\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\t\t\tif (newContext && (elem = newContext.getElementById(m)) &&\n\t\t\t\t\t\t\t\t\tfind.contains(context, elem) &&\n\t\t\t\t\t\t\t\t\telem.id === m) {\n\n\t\t\t\t\t\t\t\t\tpush.call(results, elem);\n\t\t\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Type selector\n\t\t\t\t\t\t} else if (match[2]) {\n\t\t\t\t\t\t\tpush.apply(results, context.getElementsByTagName(selector));\n\t\t\t\t\t\t\treturn results;\n\n\t\t\t\t\t\t\t// Class selector\n\t\t\t\t\t\t} else if ((m = match[3]) && context.getElementsByClassName) {\n\t\t\t\t\t\t\tpush.apply(results, context.getElementsByClassName(m));\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Take advantage of querySelectorAll\n\t\t\t\t\tif (!nonnativeSelectorCache[selector + \" \"] &&\n\t\t\t\t\t\t(!rbuggyQSA || !rbuggyQSA.test(selector))) {\n\n\t\t\t\t\t\tnewSelector = selector;\n\t\t\t\t\t\tnewContext = context;\n\n\t\t\t\t\t\t// qSA considers elements outside a scoping root when evaluating child or\n\t\t\t\t\t\t// descendant combinators, which is not what we want.\n\t\t\t\t\t\t// In such cases, we work around the behavior by prefixing every selector in the\n\t\t\t\t\t\t// list with an ID selector referencing the scope context.\n\t\t\t\t\t\t// The technique has to be used as well when a leading combinator is used\n\t\t\t\t\t\t// as such selectors are not recognized by querySelectorAll.\n\t\t\t\t\t\t// Thanks to Andrew Dupont for this technique.\n\t\t\t\t\t\tif (nodeType === 1 &&\n\t\t\t\t\t\t\t(rdescend.test(selector) || rleadingCombinator.test(selector))) {\n\n\t\t\t\t\t\t\t// Expand context for sibling selectors\n\t\t\t\t\t\t\tnewContext = rsibling.test(selector) && testContext(context.parentNode) ||\n\t\t\t\t\t\t\t\tcontext;\n\n\t\t\t\t\t\t\t// We can use :scope instead of the ID hack if the browser\n\t\t\t\t\t\t\t// supports it & if we're not changing the context.\n\t\t\t\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when\n\t\t\t\t\t\t\t// strict-comparing two documents; shallow comparisons work.\n\t\t\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\t\t\tif (newContext != context || !support.scope) {\n\n\t\t\t\t\t\t\t\t// Capture the context ID, setting it first if necessary\n\t\t\t\t\t\t\t\tif ((nid = context.getAttribute(\"id\"))) {\n\t\t\t\t\t\t\t\t\tnid = jQuery.escapeSelector(nid);\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tcontext.setAttribute(\"id\", (nid = expando));\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Prefix every selector in the list\n\t\t\t\t\t\t\tgroups = tokenize(selector);\n\t\t\t\t\t\t\ti = groups.length;\n\t\t\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\t\t\tgroups[i] = (nid ? \"#\" + nid : \":scope\") + \" \" +\n\t\t\t\t\t\t\t\t\ttoSelector(groups[i]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tnewSelector = groups.join(\",\");\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tpush.apply(results,\n\t\t\t\t\t\t\t\tnewContext.querySelectorAll(newSelector)\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t} catch (qsaError) {\n\t\t\t\t\t\t\tnonnativeSelectorCache(selector, true);\n\t\t\t\t\t\t} finally {\n\t\t\t\t\t\t\tif (nid === expando) {\n\t\t\t\t\t\t\t\tcontext.removeAttribute(\"id\");\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// All others\n\t\t\treturn select(selector.replace(rtrimCSS, \"$1\"), context, results, seed);\n\t\t}\n\n\t\t/**\n\t\t * Create key-value caches of limited size\n\t\t * @returns {function(string, object)} Returns the Object data after storing it on itself with\n\t\t *\tproperty name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)\n\t\t *\tdeleting the oldest entry\n\t\t */\n\t\tfunction createCache() {\n\t\t\tvar keys = [];\n\n\t\t\tfunction cache(key, value) {\n\n\t\t\t\t// Use (key + \" \") to avoid collision with native prototype properties\n\t\t\t\t// (see https://github.com/jquery/sizzle/issues/157)\n\t\t\t\tif (keys.push(key + \" \") > Expr.cacheLength) {\n\n\t\t\t\t\t// Only keep the most recent entries\n\t\t\t\t\tdelete cache[keys.shift()];\n\t\t\t\t}\n\t\t\t\treturn (cache[key + \" \"] = value);\n\t\t\t}\n\t\t\treturn cache;\n\t\t}\n\n\t\t/**\n\t\t * Mark a function for special use by jQuery selector module\n\t\t * @param {Function} fn The function to mark\n\t\t */\n\t\tfunction markFunction(fn) {\n\t\t\tfn[expando] = true;\n\t\t\treturn fn;\n\t\t}\n\n\t\t/**\n\t\t * Support testing using an element\n\t\t * @param {Function} fn Passed the created element and returns a boolean result\n\t\t */\n\t\tfunction assert(fn) {\n\t\t\tvar el = document.createElement(\"fieldset\");\n\n\t\t\ttry {\n\t\t\t\treturn !!fn(el);\n\t\t\t} catch (e) {\n\t\t\t\treturn false;\n\t\t\t} finally {\n\n\t\t\t\t// Remove from its parent by default\n\t\t\t\tif (el.parentNode) {\n\t\t\t\t\tel.parentNode.removeChild(el);\n\t\t\t\t}\n\n\t\t\t\t// release memory in IE\n\t\t\t\tel = null;\n\t\t\t}\n\t\t}\n\n\t\t/**\n\t\t * Returns a function to use in pseudos for input types\n\t\t * @param {String} type\n\t\t */\n\t\tfunction createInputPseudo(type) {\n\t\t\treturn function (elem) {\n\t\t\t\treturn nodeName(elem, \"input\") && elem.type === type;\n\t\t\t};\n\t\t}\n\n\t\t/**\n\t\t * Returns a function to use in pseudos for buttons\n\t\t * @param {String} type\n\t\t */\n\t\tfunction createButtonPseudo(type) {\n\t\t\treturn function (elem) {\n\t\t\t\treturn (nodeName(elem, \"input\") || nodeName(elem, \"button\")) &&\n\t\t\t\t\telem.type === type;\n\t\t\t};\n\t\t}\n\n\t\t/**\n\t\t * Returns a function to use in pseudos for :enabled/:disabled\n\t\t * @param {Boolean} disabled true for :disabled; false for :enabled\n\t\t */\n\t\tfunction createDisabledPseudo(disabled) {\n\n\t\t\t// Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable\n\t\t\treturn function (elem) {\n\n\t\t\t\t// Only certain elements can match :enabled or :disabled\n\t\t\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled\n\t\t\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled\n\t\t\t\tif (\"form\" in elem) {\n\n\t\t\t\t\t// Check for inherited disabledness on relevant non-disabled elements:\n\t\t\t\t\t// * listed form-associated elements in a disabled fieldset\n\t\t\t\t\t//   https://html.spec.whatwg.org/multipage/forms.html#category-listed\n\t\t\t\t\t//   https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled\n\t\t\t\t\t// * option elements in a disabled optgroup\n\t\t\t\t\t//   https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled\n\t\t\t\t\t// All such elements have a \"form\" property.\n\t\t\t\t\tif (elem.parentNode && elem.disabled === false) {\n\n\t\t\t\t\t\t// Option elements defer to a parent optgroup if present\n\t\t\t\t\t\tif (\"label\" in elem) {\n\t\t\t\t\t\t\tif (\"label\" in elem.parentNode) {\n\t\t\t\t\t\t\t\treturn elem.parentNode.disabled === disabled;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\treturn elem.disabled === disabled;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Support: IE 6 - 11+\n\t\t\t\t\t\t// Use the isDisabled shortcut property to check for disabled fieldset ancestors\n\t\t\t\t\t\treturn elem.isDisabled === disabled ||\n\n\t\t\t\t\t\t\t// Where there is no isDisabled, check manually\n\t\t\t\t\t\t\telem.isDisabled !== !disabled &&\n\t\t\t\t\t\t\tinDisabledFieldset(elem) === disabled;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn elem.disabled === disabled;\n\n\t\t\t\t\t// Try to winnow out elements that can't be disabled before trusting the disabled property.\n\t\t\t\t\t// Some victims get caught in our net (label, legend, menu, track), but it shouldn't\n\t\t\t\t\t// even exist on them, let alone have a boolean value.\n\t\t\t\t} else if (\"label\" in elem) {\n\t\t\t\t\treturn elem.disabled === disabled;\n\t\t\t\t}\n\n\t\t\t\t// Remaining elements are neither :enabled nor :disabled\n\t\t\t\treturn false;\n\t\t\t};\n\t\t}\n\n\t\t/**\n\t\t * Returns a function to use in pseudos for positionals\n\t\t * @param {Function} fn\n\t\t */\n\t\tfunction createPositionalPseudo(fn) {\n\t\t\treturn markFunction(function (argument) {\n\t\t\t\targument = +argument;\n\t\t\t\treturn markFunction(function (seed, matches) {\n\t\t\t\t\tvar j,\n\t\t\t\t\t\tmatchIndexes = fn([], seed.length, argument),\n\t\t\t\t\t\ti = matchIndexes.length;\n\n\t\t\t\t\t// Match elements found at the specified indexes\n\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\tif (seed[(j = matchIndexes[i])]) {\n\t\t\t\t\t\t\tseed[j] = !(matches[j] = seed[j]);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\n\t\t/**\n\t\t * Checks a node for validity as a jQuery selector context\n\t\t * @param {Element|Object=} context\n\t\t * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value\n\t\t */\n\t\tfunction testContext(context) {\n\t\t\treturn context && typeof context.getElementsByTagName !== \"undefined\" && context;\n\t\t}\n\n\t\t/**\n\t\t * Sets document-related variables once based on the current document\n\t\t * @param {Element|Object} [node] An element or document object to use to set the document\n\t\t * @returns {Object} Returns the current document\n\t\t */\n\t\tfunction setDocument(node) {\n\t\t\tvar subWindow,\n\t\t\t\tdoc = node ? node.ownerDocument || node : preferredDoc;\n\n\t\t\t// Return early if doc is invalid or already selected\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tif (doc == document || doc.nodeType !== 9 || !doc.documentElement) {\n\t\t\t\treturn document;\n\t\t\t}\n\n\t\t\t// Update global variables\n\t\t\tdocument = doc;\n\t\t\tdocumentElement = document.documentElement;\n\t\t\tdocumentIsHTML = !jQuery.isXMLDoc(document);\n\n\t\t\t// Support: iOS 7 only, IE 9 - 11+\n\t\t\t// Older browsers didn't support unprefixed `matches`.\n\t\t\tmatches = documentElement.matches ||\n\t\t\t\tdocumentElement.webkitMatchesSelector ||\n\t\t\t\tdocumentElement.msMatchesSelector;\n\n\t\t\t// Support: IE 9 - 11+, Edge 12 - 18+\n\t\t\t// Accessing iframe documents after unload throws \"permission denied\" errors (see trac-13936)\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tif (preferredDoc != document &&\n\t\t\t\t(subWindow = document.defaultView) && subWindow.top !== subWindow) {\n\n\t\t\t\t// Support: IE 9 - 11+, Edge 12 - 18+\n\t\t\t\tsubWindow.addEventListener(\"unload\", unloadHandler);\n\t\t\t}\n\n\t\t\t// Support: IE <10\n\t\t\t// Check if getElementById returns elements by name\n\t\t\t// The broken getElementById methods don't pick up programmatically-set names,\n\t\t\t// so use a roundabout getElementsByName test\n\t\t\tsupport.getById = assert(function (el) {\n\t\t\t\tdocumentElement.appendChild(el).id = jQuery.expando;\n\t\t\t\treturn !document.getElementsByName ||\n\t\t\t\t\t!document.getElementsByName(jQuery.expando).length;\n\t\t\t});\n\n\t\t\t// Support: IE 9 only\n\t\t\t// Check to see if it's possible to do matchesSelector\n\t\t\t// on a disconnected node.\n\t\t\tsupport.disconnectedMatch = assert(function (el) {\n\t\t\t\treturn matches.call(el, \"*\");\n\t\t\t});\n\n\t\t\t// Support: IE 9 - 11+, Edge 12 - 18+\n\t\t\t// IE/Edge don't support the :scope pseudo-class.\n\t\t\tsupport.scope = assert(function () {\n\t\t\t\treturn document.querySelectorAll(\":scope\");\n\t\t\t});\n\n\t\t\t// Support: Chrome 105 - 111 only, Safari 15.4 - 16.3 only\n\t\t\t// Make sure the `:has()` argument is parsed unforgivingly.\n\t\t\t// We include `*` in the test to detect buggy implementations that are\n\t\t\t// _selectively_ forgiving (specifically when the list includes at least\n\t\t\t// one valid selector).\n\t\t\t// Note that we treat complete lack of support for `:has()` as if it were\n\t\t\t// spec-compliant support, which is fine because use of `:has()` in such\n\t\t\t// environments will fail in the qSA path and fall back to jQuery traversal\n\t\t\t// anyway.\n\t\t\tsupport.cssHas = assert(function () {\n\t\t\t\ttry {\n\t\t\t\t\tdocument.querySelector(\":has(*,:jqfake)\");\n\t\t\t\t\treturn false;\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t// ID filter and find\n\t\t\tif (support.getById) {\n\t\t\t\tExpr.filter.ID = function (id) {\n\t\t\t\t\tvar attrId = id.replace(runescape, funescape);\n\t\t\t\t\treturn function (elem) {\n\t\t\t\t\t\treturn elem.getAttribute(\"id\") === attrId;\n\t\t\t\t\t};\n\t\t\t\t};\n\t\t\t\tExpr.find.ID = function (id, context) {\n\t\t\t\t\tif (typeof context.getElementById !== \"undefined\" && documentIsHTML) {\n\t\t\t\t\t\tvar elem = context.getElementById(id);\n\t\t\t\t\t\treturn elem ? [elem] : [];\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t} else {\n\t\t\t\tExpr.filter.ID = function (id) {\n\t\t\t\t\tvar attrId = id.replace(runescape, funescape);\n\t\t\t\t\treturn function (elem) {\n\t\t\t\t\t\tvar node = typeof elem.getAttributeNode !== \"undefined\" &&\n\t\t\t\t\t\t\telem.getAttributeNode(\"id\");\n\t\t\t\t\t\treturn node && node.value === attrId;\n\t\t\t\t\t};\n\t\t\t\t};\n\n\t\t\t\t// Support: IE 6 - 7 only\n\t\t\t\t// getElementById is not reliable as a find shortcut\n\t\t\t\tExpr.find.ID = function (id, context) {\n\t\t\t\t\tif (typeof context.getElementById !== \"undefined\" && documentIsHTML) {\n\t\t\t\t\t\tvar node, i, elems,\n\t\t\t\t\t\t\telem = context.getElementById(id);\n\n\t\t\t\t\t\tif (elem) {\n\n\t\t\t\t\t\t\t// Verify the id attribute\n\t\t\t\t\t\t\tnode = elem.getAttributeNode(\"id\");\n\t\t\t\t\t\t\tif (node && node.value === id) {\n\t\t\t\t\t\t\t\treturn [elem];\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Fall back on getElementsByName\n\t\t\t\t\t\t\telems = context.getElementsByName(id);\n\t\t\t\t\t\t\ti = 0;\n\t\t\t\t\t\t\twhile ((elem = elems[i++])) {\n\t\t\t\t\t\t\t\tnode = elem.getAttributeNode(\"id\");\n\t\t\t\t\t\t\t\tif (node && node.value === id) {\n\t\t\t\t\t\t\t\t\treturn [elem];\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn [];\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\n\t\t\t// Tag\n\t\t\tExpr.find.TAG = function (tag, context) {\n\t\t\t\tif (typeof context.getElementsByTagName !== \"undefined\") {\n\t\t\t\t\treturn context.getElementsByTagName(tag);\n\n\t\t\t\t\t// DocumentFragment nodes don't have gEBTN\n\t\t\t\t} else {\n\t\t\t\t\treturn context.querySelectorAll(tag);\n\t\t\t\t}\n\t\t\t};\n\n\t\t\t// Class\n\t\t\tExpr.find.CLASS = function (className, context) {\n\t\t\t\tif (typeof context.getElementsByClassName !== \"undefined\" && documentIsHTML) {\n\t\t\t\t\treturn context.getElementsByClassName(className);\n\t\t\t\t}\n\t\t\t};\n\n\t\t\t/* QSA/matchesSelector\n\t\t\t---------------------------------------------------------------------- */\n\n\t\t\t// QSA and matchesSelector support\n\n\t\t\trbuggyQSA = [];\n\n\t\t\t// Build QSA regex\n\t\t\t// Regex strategy adopted from Diego Perini\n\t\t\tassert(function (el) {\n\n\t\t\t\tvar input;\n\n\t\t\t\tdocumentElement.appendChild(el).innerHTML =\n\t\t\t\t\t\"<a id='\" + expando + \"' href='' disabled='disabled'></a>\" +\n\t\t\t\t\t\"<select id='\" + expando + \"-\\r\\\\' disabled='disabled'>\" +\n\t\t\t\t\t\"<option selected=''></option></select>\";\n\n\t\t\t\t// Support: iOS <=7 - 8 only\n\t\t\t\t// Boolean attributes and \"value\" are not treated correctly in some XML documents\n\t\t\t\tif (!el.querySelectorAll(\"[selected]\").length) {\n\t\t\t\t\trbuggyQSA.push(\"\\\\[\" + whitespace + \"*(?:value|\" + booleans + \")\");\n\t\t\t\t}\n\n\t\t\t\t// Support: iOS <=7 - 8 only\n\t\t\t\tif (!el.querySelectorAll(\"[id~=\" + expando + \"-]\").length) {\n\t\t\t\t\trbuggyQSA.push(\"~=\");\n\t\t\t\t}\n\n\t\t\t\t// Support: iOS 8 only\n\t\t\t\t// https://bugs.webkit.org/show_bug.cgi?id=136851\n\t\t\t\t// In-page `selector#id sibling-combinator selector` fails\n\t\t\t\tif (!el.querySelectorAll(\"a#\" + expando + \"+*\").length) {\n\t\t\t\t\trbuggyQSA.push(\".#.+[+~]\");\n\t\t\t\t}\n\n\t\t\t\t// Support: Chrome <=105+, Firefox <=104+, Safari <=15.4+\n\t\t\t\t// In some of the document kinds, these selectors wouldn't work natively.\n\t\t\t\t// This is probably OK but for backwards compatibility we want to maintain\n\t\t\t\t// handling them through jQuery traversal in jQuery 3.x.\n\t\t\t\tif (!el.querySelectorAll(\":checked\").length) {\n\t\t\t\t\trbuggyQSA.push(\":checked\");\n\t\t\t\t}\n\n\t\t\t\t// Support: Windows 8 Native Apps\n\t\t\t\t// The type and name attributes are restricted during .innerHTML assignment\n\t\t\t\tinput = document.createElement(\"input\");\n\t\t\t\tinput.setAttribute(\"type\", \"hidden\");\n\t\t\t\tel.appendChild(input).setAttribute(\"name\", \"D\");\n\n\t\t\t\t// Support: IE 9 - 11+\n\t\t\t\t// IE's :disabled selector does not pick up the children of disabled fieldsets\n\t\t\t\t// Support: Chrome <=105+, Firefox <=104+, Safari <=15.4+\n\t\t\t\t// In some of the document kinds, these selectors wouldn't work natively.\n\t\t\t\t// This is probably OK but for backwards compatibility we want to maintain\n\t\t\t\t// handling them through jQuery traversal in jQuery 3.x.\n\t\t\t\tdocumentElement.appendChild(el).disabled = true;\n\t\t\t\tif (el.querySelectorAll(\":disabled\").length !== 2) {\n\t\t\t\t\trbuggyQSA.push(\":enabled\", \":disabled\");\n\t\t\t\t}\n\n\t\t\t\t// Support: IE 11+, Edge 15 - 18+\n\t\t\t\t// IE 11/Edge don't find elements on a `[name='']` query in some cases.\n\t\t\t\t// Adding a temporary attribute to the document before the selection works\n\t\t\t\t// around the issue.\n\t\t\t\t// Interestingly, IE 10 & older don't seem to have the issue.\n\t\t\t\tinput = document.createElement(\"input\");\n\t\t\t\tinput.setAttribute(\"name\", \"\");\n\t\t\t\tel.appendChild(input);\n\t\t\t\tif (!el.querySelectorAll(\"[name='']\").length) {\n\t\t\t\t\trbuggyQSA.push(\"\\\\[\" + whitespace + \"*name\" + whitespace + \"*=\" +\n\t\t\t\t\t\twhitespace + \"*(?:''|\\\"\\\")\");\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tif (!support.cssHas) {\n\n\t\t\t\t// Support: Chrome 105 - 110+, Safari 15.4 - 16.3+\n\t\t\t\t// Our regular `try-catch` mechanism fails to detect natively-unsupported\n\t\t\t\t// pseudo-classes inside `:has()` (such as `:has(:contains(\"Foo\"))`)\n\t\t\t\t// in browsers that parse the `:has()` argument as a forgiving selector list.\n\t\t\t\t// https://drafts.csswg.org/selectors/#relational now requires the argument\n\t\t\t\t// to be parsed unforgivingly, but browsers have not yet fully adjusted.\n\t\t\t\trbuggyQSA.push(\":has\");\n\t\t\t}\n\n\t\t\trbuggyQSA = rbuggyQSA.length && new RegExp(rbuggyQSA.join(\"|\"));\n\n\t\t\t/* Sorting\n\t\t\t---------------------------------------------------------------------- */\n\n\t\t\t// Document order sorting\n\t\t\tsortOrder = function (a, b) {\n\n\t\t\t\t// Flag for duplicate removal\n\t\t\t\tif (a === b) {\n\t\t\t\t\thasDuplicate = true;\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\n\t\t\t\t// Sort on method existence if only one input has compareDocumentPosition\n\t\t\t\tvar compare = !a.compareDocumentPosition - !b.compareDocumentPosition;\n\t\t\t\tif (compare) {\n\t\t\t\t\treturn compare;\n\t\t\t\t}\n\n\t\t\t\t// Calculate position if both inputs belong to the same document\n\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\tcompare = (a.ownerDocument || a) == (b.ownerDocument || b) ?\n\t\t\t\t\ta.compareDocumentPosition(b) :\n\n\t\t\t\t\t// Otherwise we know they are disconnected\n\t\t\t\t\t1;\n\n\t\t\t\t// Disconnected nodes\n\t\t\t\tif (compare & 1 ||\n\t\t\t\t\t(!support.sortDetached && b.compareDocumentPosition(a) === compare)) {\n\n\t\t\t\t\t// Choose the first element that is related to our preferred document\n\t\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\tif (a === document || a.ownerDocument == preferredDoc &&\n\t\t\t\t\t\tfind.contains(preferredDoc, a)) {\n\t\t\t\t\t\treturn -1;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\tif (b === document || b.ownerDocument == preferredDoc &&\n\t\t\t\t\t\tfind.contains(preferredDoc, b)) {\n\t\t\t\t\t\treturn 1;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Maintain original order\n\t\t\t\t\treturn sortInput ?\n\t\t\t\t\t\t(indexOf.call(sortInput, a) - indexOf.call(sortInput, b)) :\n\t\t\t\t\t\t0;\n\t\t\t\t}\n\n\t\t\t\treturn compare & 4 ? -1 : 1;\n\t\t\t};\n\n\t\t\treturn document;\n\t\t}\n\n\t\tfind.matches = function (expr, elements) {\n\t\t\treturn find(expr, null, null, elements);\n\t\t};\n\n\t\tfind.matchesSelector = function (elem, expr) {\n\t\t\tsetDocument(elem);\n\n\t\t\tif (documentIsHTML &&\n\t\t\t\t!nonnativeSelectorCache[expr + \" \"] &&\n\t\t\t\t(!rbuggyQSA || !rbuggyQSA.test(expr))) {\n\n\t\t\t\ttry {\n\t\t\t\t\tvar ret = matches.call(elem, expr);\n\n\t\t\t\t\t// IE 9's matchesSelector returns false on disconnected nodes\n\t\t\t\t\tif (ret || support.disconnectedMatch ||\n\n\t\t\t\t\t\t// As well, disconnected nodes are said to be in a document\n\t\t\t\t\t\t// fragment in IE 9\n\t\t\t\t\t\telem.document && elem.document.nodeType !== 11) {\n\t\t\t\t\t\treturn ret;\n\t\t\t\t\t}\n\t\t\t\t} catch (e) {\n\t\t\t\t\tnonnativeSelectorCache(expr, true);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn find(expr, document, null, [elem]).length > 0;\n\t\t};\n\n\t\tfind.contains = function (context, elem) {\n\n\t\t\t// Set document vars if needed\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tif ((context.ownerDocument || context) != document) {\n\t\t\t\tsetDocument(context);\n\t\t\t}\n\t\t\treturn jQuery.contains(context, elem);\n\t\t};\n\n\n\t\tfind.attr = function (elem, name) {\n\n\t\t\t// Set document vars if needed\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tif ((elem.ownerDocument || elem) != document) {\n\t\t\t\tsetDocument(elem);\n\t\t\t}\n\n\t\t\tvar fn = Expr.attrHandle[name.toLowerCase()],\n\n\t\t\t\t// Don't get fooled by Object.prototype properties (see trac-13807)\n\t\t\t\tval = fn && hasOwn.call(Expr.attrHandle, name.toLowerCase()) ?\n\t\t\t\t\tfn(elem, name, !documentIsHTML) :\n\t\t\t\t\tundefined;\n\n\t\t\tif (val !== undefined) {\n\t\t\t\treturn val;\n\t\t\t}\n\n\t\t\treturn elem.getAttribute(name);\n\t\t};\n\n\t\tfind.error = function (msg) {\n\t\t\tthrow new Error(\"Syntax error, unrecognized expression: \" + msg);\n\t\t};\n\n\t\t/**\n\t\t * Document sorting and removing duplicates\n\t\t * @param {ArrayLike} results\n\t\t */\n\t\tjQuery.uniqueSort = function (results) {\n\t\t\tvar elem,\n\t\t\t\tduplicates = [],\n\t\t\t\tj = 0,\n\t\t\t\ti = 0;\n\n\t\t\t// Unless we *know* we can detect duplicates, assume their presence\n\t\t\t//\n\t\t\t// Support: Android <=4.0+\n\t\t\t// Testing for detecting duplicates is unpredictable so instead assume we can't\n\t\t\t// depend on duplicate detection in all browsers without a stable sort.\n\t\t\thasDuplicate = !support.sortStable;\n\t\t\tsortInput = !support.sortStable && slice.call(results, 0);\n\t\t\tsort.call(results, sortOrder);\n\n\t\t\tif (hasDuplicate) {\n\t\t\t\twhile ((elem = results[i++])) {\n\t\t\t\t\tif (elem === results[i]) {\n\t\t\t\t\t\tj = duplicates.push(i);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\twhile (j--) {\n\t\t\t\t\tsplice.call(results, duplicates[j], 1);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Clear input after sorting to release objects\n\t\t\t// See https://github.com/jquery/sizzle/pull/225\n\t\t\tsortInput = null;\n\n\t\t\treturn results;\n\t\t};\n\n\t\tjQuery.fn.uniqueSort = function () {\n\t\t\treturn this.pushStack(jQuery.uniqueSort(slice.apply(this)));\n\t\t};\n\n\t\tExpr = jQuery.expr = {\n\n\t\t\t// Can be adjusted by the user\n\t\t\tcacheLength: 50,\n\n\t\t\tcreatePseudo: markFunction,\n\n\t\t\tmatch: matchExpr,\n\n\t\t\tattrHandle: {},\n\n\t\t\tfind: {},\n\n\t\t\trelative: {\n\t\t\t\t\">\": { dir: \"parentNode\", first: true },\n\t\t\t\t\" \": { dir: \"parentNode\" },\n\t\t\t\t\"+\": { dir: \"previousSibling\", first: true },\n\t\t\t\t\"~\": { dir: \"previousSibling\" }\n\t\t\t},\n\n\t\t\tpreFilter: {\n\t\t\t\tATTR: function (match) {\n\t\t\t\t\tmatch[1] = match[1].replace(runescape, funescape);\n\n\t\t\t\t\t// Move the given value to match[3] whether quoted or unquoted\n\t\t\t\t\tmatch[3] = (match[3] || match[4] || match[5] || \"\")\n\t\t\t\t\t\t.replace(runescape, funescape);\n\n\t\t\t\t\tif (match[2] === \"~=\") {\n\t\t\t\t\t\tmatch[3] = \" \" + match[3] + \" \";\n\t\t\t\t\t}\n\n\t\t\t\t\treturn match.slice(0, 4);\n\t\t\t\t},\n\n\t\t\t\tCHILD: function (match) {\n\n\t\t\t\t\t/* matches from matchExpr[\"CHILD\"]\n\t\t\t\t\t\t1 type (only|nth|...)\n\t\t\t\t\t\t2 what (child|of-type)\n\t\t\t\t\t\t3 argument (even|odd|\\d*|\\d*n([+-]\\d+)?|...)\n\t\t\t\t\t\t4 xn-component of xn+y argument ([+-]?\\d*n|)\n\t\t\t\t\t\t5 sign of xn-component\n\t\t\t\t\t\t6 x of xn-component\n\t\t\t\t\t\t7 sign of y-component\n\t\t\t\t\t\t8 y of y-component\n\t\t\t\t\t*/\n\t\t\t\t\tmatch[1] = match[1].toLowerCase();\n\n\t\t\t\t\tif (match[1].slice(0, 3) === \"nth\") {\n\n\t\t\t\t\t\t// nth-* requires argument\n\t\t\t\t\t\tif (!match[3]) {\n\t\t\t\t\t\t\tfind.error(match[0]);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// numeric x and y parameters for Expr.filter.CHILD\n\t\t\t\t\t\t// remember that false/true cast respectively to 0/1\n\t\t\t\t\t\tmatch[4] = +(match[4] ?\n\t\t\t\t\t\t\tmatch[5] + (match[6] || 1) :\n\t\t\t\t\t\t\t2 * (match[3] === \"even\" || match[3] === \"odd\")\n\t\t\t\t\t\t);\n\t\t\t\t\t\tmatch[5] = +((match[7] + match[8]) || match[3] === \"odd\");\n\n\t\t\t\t\t\t// other types prohibit arguments\n\t\t\t\t\t} else if (match[3]) {\n\t\t\t\t\t\tfind.error(match[0]);\n\t\t\t\t\t}\n\n\t\t\t\t\treturn match;\n\t\t\t\t},\n\n\t\t\t\tPSEUDO: function (match) {\n\t\t\t\t\tvar excess,\n\t\t\t\t\t\tunquoted = !match[6] && match[2];\n\n\t\t\t\t\tif (matchExpr.CHILD.test(match[0])) {\n\t\t\t\t\t\treturn null;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Accept quoted arguments as-is\n\t\t\t\t\tif (match[3]) {\n\t\t\t\t\t\tmatch[2] = match[4] || match[5] || \"\";\n\n\t\t\t\t\t\t// Strip excess characters from unquoted arguments\n\t\t\t\t\t} else if (unquoted && rpseudo.test(unquoted) &&\n\n\t\t\t\t\t\t// Get excess from tokenize (recursively)\n\t\t\t\t\t\t(excess = tokenize(unquoted, true)) &&\n\n\t\t\t\t\t\t// advance to the next closing parenthesis\n\t\t\t\t\t\t(excess = unquoted.indexOf(\")\", unquoted.length - excess) - unquoted.length)) {\n\n\t\t\t\t\t\t// excess is a negative index\n\t\t\t\t\t\tmatch[0] = match[0].slice(0, excess);\n\t\t\t\t\t\tmatch[2] = unquoted.slice(0, excess);\n\t\t\t\t\t}\n\n\t\t\t\t\t// Return only captures needed by the pseudo filter method (type and argument)\n\t\t\t\t\treturn match.slice(0, 3);\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tfilter: {\n\n\t\t\t\tTAG: function (nodeNameSelector) {\n\t\t\t\t\tvar expectedNodeName = nodeNameSelector.replace(runescape, funescape).toLowerCase();\n\t\t\t\t\treturn nodeNameSelector === \"*\" ?\n\t\t\t\t\t\tfunction () {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t} :\n\t\t\t\t\t\tfunction (elem) {\n\t\t\t\t\t\t\treturn nodeName(elem, expectedNodeName);\n\t\t\t\t\t\t};\n\t\t\t\t},\n\n\t\t\t\tCLASS: function (className) {\n\t\t\t\t\tvar pattern = classCache[className + \" \"];\n\n\t\t\t\t\treturn pattern ||\n\t\t\t\t\t\t(pattern = new RegExp(\"(^|\" + whitespace + \")\" + className +\n\t\t\t\t\t\t\t\"(\" + whitespace + \"|$)\")) &&\n\t\t\t\t\t\tclassCache(className, function (elem) {\n\t\t\t\t\t\t\treturn pattern.test(\n\t\t\t\t\t\t\t\ttypeof elem.className === \"string\" && elem.className ||\n\t\t\t\t\t\t\t\ttypeof elem.getAttribute !== \"undefined\" &&\n\t\t\t\t\t\t\t\telem.getAttribute(\"class\") ||\n\t\t\t\t\t\t\t\t\"\"\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t});\n\t\t\t\t},\n\n\t\t\t\tATTR: function (name, operator, check) {\n\t\t\t\t\treturn function (elem) {\n\t\t\t\t\t\tvar result = find.attr(elem, name);\n\n\t\t\t\t\t\tif (result == null) {\n\t\t\t\t\t\t\treturn operator === \"!=\";\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!operator) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tresult += \"\";\n\n\t\t\t\t\t\tif (operator === \"=\") {\n\t\t\t\t\t\t\treturn result === check;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (operator === \"!=\") {\n\t\t\t\t\t\t\treturn result !== check;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (operator === \"^=\") {\n\t\t\t\t\t\t\treturn check && result.indexOf(check) === 0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (operator === \"*=\") {\n\t\t\t\t\t\t\treturn check && result.indexOf(check) > -1;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (operator === \"$=\") {\n\t\t\t\t\t\t\treturn check && result.slice(-check.length) === check;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (operator === \"~=\") {\n\t\t\t\t\t\t\treturn (\" \" + result.replace(rwhitespace, \" \") + \" \")\n\t\t\t\t\t\t\t\t.indexOf(check) > -1;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (operator === \"|=\") {\n\t\t\t\t\t\t\treturn result === check || result.slice(0, check.length + 1) === check + \"-\";\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t};\n\t\t\t\t},\n\n\t\t\t\tCHILD: function (type, what, _argument, first, last) {\n\t\t\t\t\tvar simple = type.slice(0, 3) !== \"nth\",\n\t\t\t\t\t\tforward = type.slice(-4) !== \"last\",\n\t\t\t\t\t\tofType = what === \"of-type\";\n\n\t\t\t\t\treturn first === 1 && last === 0 ?\n\n\t\t\t\t\t\t// Shortcut for :nth-*(n)\n\t\t\t\t\t\tfunction (elem) {\n\t\t\t\t\t\t\treturn !!elem.parentNode;\n\t\t\t\t\t\t} :\n\n\t\t\t\t\t\tfunction (elem, _context, xml) {\n\t\t\t\t\t\t\tvar cache, outerCache, node, nodeIndex, start,\n\t\t\t\t\t\t\t\tdir = simple !== forward ? \"nextSibling\" : \"previousSibling\",\n\t\t\t\t\t\t\t\tparent = elem.parentNode,\n\t\t\t\t\t\t\t\tname = ofType && elem.nodeName.toLowerCase(),\n\t\t\t\t\t\t\t\tuseCache = !xml && !ofType,\n\t\t\t\t\t\t\t\tdiff = false;\n\n\t\t\t\t\t\t\tif (parent) {\n\n\t\t\t\t\t\t\t\t// :(first|last|only)-(child|of-type)\n\t\t\t\t\t\t\t\tif (simple) {\n\t\t\t\t\t\t\t\t\twhile (dir) {\n\t\t\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\t\t\twhile ((node = node[dir])) {\n\t\t\t\t\t\t\t\t\t\t\tif (ofType ?\n\t\t\t\t\t\t\t\t\t\t\t\tnodeName(node, name) :\n\t\t\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1) {\n\n\t\t\t\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t// Reverse direction for :only-* (if we haven't yet done so)\n\t\t\t\t\t\t\t\t\t\tstart = dir = type === \"only\" && !start && \"nextSibling\";\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tstart = [forward ? parent.firstChild : parent.lastChild];\n\n\t\t\t\t\t\t\t\t// non-xml :nth-child(...) stores cache data on `parent`\n\t\t\t\t\t\t\t\tif (forward && useCache) {\n\n\t\t\t\t\t\t\t\t\t// Seek `elem` from a previously-cached index\n\t\t\t\t\t\t\t\t\touterCache = parent[expando] || (parent[expando] = {});\n\t\t\t\t\t\t\t\t\tcache = outerCache[type] || [];\n\t\t\t\t\t\t\t\t\tnodeIndex = cache[0] === dirruns && cache[1];\n\t\t\t\t\t\t\t\t\tdiff = nodeIndex && cache[2];\n\t\t\t\t\t\t\t\t\tnode = nodeIndex && parent.childNodes[nodeIndex];\n\n\t\t\t\t\t\t\t\t\twhile ((node = ++nodeIndex && node && node[dir] ||\n\n\t\t\t\t\t\t\t\t\t\t// Fallback to seeking `elem` from the start\n\t\t\t\t\t\t\t\t\t\t(diff = nodeIndex = 0) || start.pop())) {\n\n\t\t\t\t\t\t\t\t\t\t// When found, cache indexes on `parent` and break\n\t\t\t\t\t\t\t\t\t\tif (node.nodeType === 1 && ++diff && node === elem) {\n\t\t\t\t\t\t\t\t\t\t\touterCache[type] = [dirruns, nodeIndex, diff];\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t// Use previously-cached element index if available\n\t\t\t\t\t\t\t\t\tif (useCache) {\n\t\t\t\t\t\t\t\t\t\touterCache = elem[expando] || (elem[expando] = {});\n\t\t\t\t\t\t\t\t\t\tcache = outerCache[type] || [];\n\t\t\t\t\t\t\t\t\t\tnodeIndex = cache[0] === dirruns && cache[1];\n\t\t\t\t\t\t\t\t\t\tdiff = nodeIndex;\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// xml :nth-child(...)\n\t\t\t\t\t\t\t\t\t// or :nth-last-child(...) or :nth(-last)?-of-type(...)\n\t\t\t\t\t\t\t\t\tif (diff === false) {\n\n\t\t\t\t\t\t\t\t\t\t// Use the same loop as above to seek `elem` from the start\n\t\t\t\t\t\t\t\t\t\twhile ((node = ++nodeIndex && node && node[dir] ||\n\t\t\t\t\t\t\t\t\t\t\t(diff = nodeIndex = 0) || start.pop())) {\n\n\t\t\t\t\t\t\t\t\t\t\tif ((ofType ?\n\t\t\t\t\t\t\t\t\t\t\t\tnodeName(node, name) :\n\t\t\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1) &&\n\t\t\t\t\t\t\t\t\t\t\t\t++diff) {\n\n\t\t\t\t\t\t\t\t\t\t\t\t// Cache the index of each encountered element\n\t\t\t\t\t\t\t\t\t\t\t\tif (useCache) {\n\t\t\t\t\t\t\t\t\t\t\t\t\touterCache = node[expando] ||\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t(node[expando] = {});\n\t\t\t\t\t\t\t\t\t\t\t\t\touterCache[type] = [dirruns, diff];\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\tif (node === elem) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t// Incorporate the offset, then check against cycle size\n\t\t\t\t\t\t\t\tdiff -= last;\n\t\t\t\t\t\t\t\treturn diff === first || (diff % first === 0 && diff / first >= 0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\t\t\t\t},\n\n\t\t\t\tPSEUDO: function (pseudo, argument) {\n\n\t\t\t\t\t// pseudo-class names are case-insensitive\n\t\t\t\t\t// https://www.w3.org/TR/selectors/#pseudo-classes\n\t\t\t\t\t// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters\n\t\t\t\t\t// Remember that setFilters inherits from pseudos\n\t\t\t\t\tvar args,\n\t\t\t\t\t\tfn = Expr.pseudos[pseudo] || Expr.setFilters[pseudo.toLowerCase()] ||\n\t\t\t\t\t\t\tfind.error(\"unsupported pseudo: \" + pseudo);\n\n\t\t\t\t\t// The user may use createPseudo to indicate that\n\t\t\t\t\t// arguments are needed to create the filter function\n\t\t\t\t\t// just as jQuery does\n\t\t\t\t\tif (fn[expando]) {\n\t\t\t\t\t\treturn fn(argument);\n\t\t\t\t\t}\n\n\t\t\t\t\t// But maintain support for old signatures\n\t\t\t\t\tif (fn.length > 1) {\n\t\t\t\t\t\targs = [pseudo, pseudo, \"\", argument];\n\t\t\t\t\t\treturn Expr.setFilters.hasOwnProperty(pseudo.toLowerCase()) ?\n\t\t\t\t\t\t\tmarkFunction(function (seed, matches) {\n\t\t\t\t\t\t\t\tvar idx,\n\t\t\t\t\t\t\t\t\tmatched = fn(seed, argument),\n\t\t\t\t\t\t\t\t\ti = matched.length;\n\t\t\t\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\t\t\t\tidx = indexOf.call(seed, matched[i]);\n\t\t\t\t\t\t\t\t\tseed[idx] = !(matches[idx] = matched[i]);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}) :\n\t\t\t\t\t\t\tfunction (elem) {\n\t\t\t\t\t\t\t\treturn fn(elem, 0, args);\n\t\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\treturn fn;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tpseudos: {\n\n\t\t\t\t// Potentially complex pseudos\n\t\t\t\tnot: markFunction(function (selector) {\n\n\t\t\t\t\t// Trim the selector passed to compile\n\t\t\t\t\t// to avoid treating leading and trailing\n\t\t\t\t\t// spaces as combinators\n\t\t\t\t\tvar input = [],\n\t\t\t\t\t\tresults = [],\n\t\t\t\t\t\tmatcher = compile(selector.replace(rtrimCSS, \"$1\"));\n\n\t\t\t\t\treturn matcher[expando] ?\n\t\t\t\t\t\tmarkFunction(function (seed, matches, _context, xml) {\n\t\t\t\t\t\t\tvar elem,\n\t\t\t\t\t\t\t\tunmatched = matcher(seed, null, xml, []),\n\t\t\t\t\t\t\t\ti = seed.length;\n\n\t\t\t\t\t\t\t// Match elements unmatched by `matcher`\n\t\t\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\t\t\tif ((elem = unmatched[i])) {\n\t\t\t\t\t\t\t\t\tseed[i] = !(matches[i] = elem);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}) :\n\t\t\t\t\t\tfunction (elem, _context, xml) {\n\t\t\t\t\t\t\tinput[0] = elem;\n\t\t\t\t\t\t\tmatcher(input, null, xml, results);\n\n\t\t\t\t\t\t\t// Don't keep the element\n\t\t\t\t\t\t\t// (see https://github.com/jquery/sizzle/issues/299)\n\t\t\t\t\t\t\tinput[0] = null;\n\t\t\t\t\t\t\treturn !results.pop();\n\t\t\t\t\t\t};\n\t\t\t\t}),\n\n\t\t\t\thas: markFunction(function (selector) {\n\t\t\t\t\treturn function (elem) {\n\t\t\t\t\t\treturn find(selector, elem).length > 0;\n\t\t\t\t\t};\n\t\t\t\t}),\n\n\t\t\t\tcontains: markFunction(function (text) {\n\t\t\t\t\ttext = text.replace(runescape, funescape);\n\t\t\t\t\treturn function (elem) {\n\t\t\t\t\t\treturn (elem.textContent || jQuery.text(elem)).indexOf(text) > -1;\n\t\t\t\t\t};\n\t\t\t\t}),\n\n\t\t\t\t// \"Whether an element is represented by a :lang() selector\n\t\t\t\t// is based solely on the element's language value\n\t\t\t\t// being equal to the identifier C,\n\t\t\t\t// or beginning with the identifier C immediately followed by \"-\".\n\t\t\t\t// The matching of C against the element's language value is performed case-insensitively.\n\t\t\t\t// The identifier C does not have to be a valid language name.\"\n\t\t\t\t// https://www.w3.org/TR/selectors/#lang-pseudo\n\t\t\t\tlang: markFunction(function (lang) {\n\n\t\t\t\t\t// lang value must be a valid identifier\n\t\t\t\t\tif (!ridentifier.test(lang || \"\")) {\n\t\t\t\t\t\tfind.error(\"unsupported lang: \" + lang);\n\t\t\t\t\t}\n\t\t\t\t\tlang = lang.replace(runescape, funescape).toLowerCase();\n\t\t\t\t\treturn function (elem) {\n\t\t\t\t\t\tvar elemLang;\n\t\t\t\t\t\tdo {\n\t\t\t\t\t\t\tif ((elemLang = documentIsHTML ?\n\t\t\t\t\t\t\t\telem.lang :\n\t\t\t\t\t\t\t\telem.getAttribute(\"xml:lang\") || elem.getAttribute(\"lang\"))) {\n\n\t\t\t\t\t\t\t\telemLang = elemLang.toLowerCase();\n\t\t\t\t\t\t\t\treturn elemLang === lang || elemLang.indexOf(lang + \"-\") === 0;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} while ((elem = elem.parentNode) && elem.nodeType === 1);\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t};\n\t\t\t\t}),\n\n\t\t\t\t// Miscellaneous\n\t\t\t\ttarget: function (elem) {\n\t\t\t\t\tvar hash = window.location && window.location.hash;\n\t\t\t\t\treturn hash && hash.slice(1) === elem.id;\n\t\t\t\t},\n\n\t\t\t\troot: function (elem) {\n\t\t\t\t\treturn elem === documentElement;\n\t\t\t\t},\n\n\t\t\t\tfocus: function (elem) {\n\t\t\t\t\treturn elem === safeActiveElement() &&\n\t\t\t\t\t\tdocument.hasFocus() &&\n\t\t\t\t\t\t!!(elem.type || elem.href || ~elem.tabIndex);\n\t\t\t\t},\n\n\t\t\t\t// Boolean properties\n\t\t\t\tenabled: createDisabledPseudo(false),\n\t\t\t\tdisabled: createDisabledPseudo(true),\n\n\t\t\t\tchecked: function (elem) {\n\n\t\t\t\t\t// In CSS3, :checked should return both checked and selected elements\n\t\t\t\t\t// https://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\t\t\treturn (nodeName(elem, \"input\") && !!elem.checked) ||\n\t\t\t\t\t\t(nodeName(elem, \"option\") && !!elem.selected);\n\t\t\t\t},\n\n\t\t\t\tselected: function (elem) {\n\n\t\t\t\t\t// Support: IE <=11+\n\t\t\t\t\t// Accessing the selectedIndex property\n\t\t\t\t\t// forces the browser to treat the default option as\n\t\t\t\t\t// selected when in an optgroup.\n\t\t\t\t\tif (elem.parentNode) {\n\t\t\t\t\t\t// eslint-disable-next-line no-unused-expressions\n\t\t\t\t\t\telem.parentNode.selectedIndex;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn elem.selected === true;\n\t\t\t\t},\n\n\t\t\t\t// Contents\n\t\t\t\tempty: function (elem) {\n\n\t\t\t\t\t// https://www.w3.org/TR/selectors/#empty-pseudo\n\t\t\t\t\t// :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),\n\t\t\t\t\t//   but not by others (comment: 8; processing instruction: 7; etc.)\n\t\t\t\t\t// nodeType < 6 works because attributes (2) do not appear as children\n\t\t\t\t\tfor (elem = elem.firstChild; elem; elem = elem.nextSibling) {\n\t\t\t\t\t\tif (elem.nodeType < 6) {\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn true;\n\t\t\t\t},\n\n\t\t\t\tparent: function (elem) {\n\t\t\t\t\treturn !Expr.pseudos.empty(elem);\n\t\t\t\t},\n\n\t\t\t\t// Element/input types\n\t\t\t\theader: function (elem) {\n\t\t\t\t\treturn rheader.test(elem.nodeName);\n\t\t\t\t},\n\n\t\t\t\tinput: function (elem) {\n\t\t\t\t\treturn rinputs.test(elem.nodeName);\n\t\t\t\t},\n\n\t\t\t\tbutton: function (elem) {\n\t\t\t\t\treturn nodeName(elem, \"input\") && elem.type === \"button\" ||\n\t\t\t\t\t\tnodeName(elem, \"button\");\n\t\t\t\t},\n\n\t\t\t\ttext: function (elem) {\n\t\t\t\t\tvar attr;\n\t\t\t\t\treturn nodeName(elem, \"input\") && elem.type === \"text\" &&\n\n\t\t\t\t\t\t// Support: IE <10 only\n\t\t\t\t\t\t// New HTML5 attribute values (e.g., \"search\") appear\n\t\t\t\t\t\t// with elem.type === \"text\"\n\t\t\t\t\t\t((attr = elem.getAttribute(\"type\")) == null ||\n\t\t\t\t\t\t\tattr.toLowerCase() === \"text\");\n\t\t\t\t},\n\n\t\t\t\t// Position-in-collection\n\t\t\t\tfirst: createPositionalPseudo(function () {\n\t\t\t\t\treturn [0];\n\t\t\t\t}),\n\n\t\t\t\tlast: createPositionalPseudo(function (_matchIndexes, length) {\n\t\t\t\t\treturn [length - 1];\n\t\t\t\t}),\n\n\t\t\t\teq: createPositionalPseudo(function (_matchIndexes, length, argument) {\n\t\t\t\t\treturn [argument < 0 ? argument + length : argument];\n\t\t\t\t}),\n\n\t\t\t\teven: createPositionalPseudo(function (matchIndexes, length) {\n\t\t\t\t\tvar i = 0;\n\t\t\t\t\tfor (; i < length; i += 2) {\n\t\t\t\t\t\tmatchIndexes.push(i);\n\t\t\t\t\t}\n\t\t\t\t\treturn matchIndexes;\n\t\t\t\t}),\n\n\t\t\t\todd: createPositionalPseudo(function (matchIndexes, length) {\n\t\t\t\t\tvar i = 1;\n\t\t\t\t\tfor (; i < length; i += 2) {\n\t\t\t\t\t\tmatchIndexes.push(i);\n\t\t\t\t\t}\n\t\t\t\t\treturn matchIndexes;\n\t\t\t\t}),\n\n\t\t\t\tlt: createPositionalPseudo(function (matchIndexes, length, argument) {\n\t\t\t\t\tvar i;\n\n\t\t\t\t\tif (argument < 0) {\n\t\t\t\t\t\ti = argument + length;\n\t\t\t\t\t} else if (argument > length) {\n\t\t\t\t\t\ti = length;\n\t\t\t\t\t} else {\n\t\t\t\t\t\ti = argument;\n\t\t\t\t\t}\n\n\t\t\t\t\tfor (; --i >= 0;) {\n\t\t\t\t\t\tmatchIndexes.push(i);\n\t\t\t\t\t}\n\t\t\t\t\treturn matchIndexes;\n\t\t\t\t}),\n\n\t\t\t\tgt: createPositionalPseudo(function (matchIndexes, length, argument) {\n\t\t\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\t\t\tfor (; ++i < length;) {\n\t\t\t\t\t\tmatchIndexes.push(i);\n\t\t\t\t\t}\n\t\t\t\t\treturn matchIndexes;\n\t\t\t\t})\n\t\t\t}\n\t\t};\n\n\t\tExpr.pseudos.nth = Expr.pseudos.eq;\n\n\t\t// Add button/input type pseudos\n\t\tfor (i in { radio: true, checkbox: true, file: true, password: true, image: true }) {\n\t\t\tExpr.pseudos[i] = createInputPseudo(i);\n\t\t}\n\t\tfor (i in { submit: true, reset: true }) {\n\t\t\tExpr.pseudos[i] = createButtonPseudo(i);\n\t\t}\n\n\t\t// Easy API for creating new setFilters\n\t\tfunction setFilters() { }\n\t\tsetFilters.prototype = Expr.filters = Expr.pseudos;\n\t\tExpr.setFilters = new setFilters();\n\n\t\tfunction tokenize(selector, parseOnly) {\n\t\t\tvar matched, match, tokens, type,\n\t\t\t\tsoFar, groups, preFilters,\n\t\t\t\tcached = tokenCache[selector + \" \"];\n\n\t\t\tif (cached) {\n\t\t\t\treturn parseOnly ? 0 : cached.slice(0);\n\t\t\t}\n\n\t\t\tsoFar = selector;\n\t\t\tgroups = [];\n\t\t\tpreFilters = Expr.preFilter;\n\n\t\t\twhile (soFar) {\n\n\t\t\t\t// Comma and first run\n\t\t\t\tif (!matched || (match = rcomma.exec(soFar))) {\n\t\t\t\t\tif (match) {\n\n\t\t\t\t\t\t// Don't consume trailing commas as valid\n\t\t\t\t\t\tsoFar = soFar.slice(match[0].length) || soFar;\n\t\t\t\t\t}\n\t\t\t\t\tgroups.push((tokens = []));\n\t\t\t\t}\n\n\t\t\t\tmatched = false;\n\n\t\t\t\t// Combinators\n\t\t\t\tif ((match = rleadingCombinator.exec(soFar))) {\n\t\t\t\t\tmatched = match.shift();\n\t\t\t\t\ttokens.push({\n\t\t\t\t\t\tvalue: matched,\n\n\t\t\t\t\t\t// Cast descendant combinators to space\n\t\t\t\t\t\ttype: match[0].replace(rtrimCSS, \" \")\n\t\t\t\t\t});\n\t\t\t\t\tsoFar = soFar.slice(matched.length);\n\t\t\t\t}\n\n\t\t\t\t// Filters\n\t\t\t\tfor (type in Expr.filter) {\n\t\t\t\t\tif ((match = matchExpr[type].exec(soFar)) && (!preFilters[type] ||\n\t\t\t\t\t\t(match = preFilters[type](match)))) {\n\t\t\t\t\t\tmatched = match.shift();\n\t\t\t\t\t\ttokens.push({\n\t\t\t\t\t\t\tvalue: matched,\n\t\t\t\t\t\t\ttype: type,\n\t\t\t\t\t\t\tmatches: match\n\t\t\t\t\t\t});\n\t\t\t\t\t\tsoFar = soFar.slice(matched.length);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (!matched) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Return the length of the invalid excess\n\t\t\t// if we're just parsing\n\t\t\t// Otherwise, throw an error or return tokens\n\t\t\tif (parseOnly) {\n\t\t\t\treturn soFar.length;\n\t\t\t}\n\n\t\t\treturn soFar ?\n\t\t\t\tfind.error(selector) :\n\n\t\t\t\t// Cache the tokens\n\t\t\t\ttokenCache(selector, groups).slice(0);\n\t\t}\n\n\t\tfunction toSelector(tokens) {\n\t\t\tvar i = 0,\n\t\t\t\tlen = tokens.length,\n\t\t\t\tselector = \"\";\n\t\t\tfor (; i < len; i++) {\n\t\t\t\tselector += tokens[i].value;\n\t\t\t}\n\t\t\treturn selector;\n\t\t}\n\n\t\tfunction addCombinator(matcher, combinator, base) {\n\t\t\tvar dir = combinator.dir,\n\t\t\t\tskip = combinator.next,\n\t\t\t\tkey = skip || dir,\n\t\t\t\tcheckNonElements = base && key === \"parentNode\",\n\t\t\t\tdoneName = done++;\n\n\t\t\treturn combinator.first ?\n\n\t\t\t\t// Check against closest ancestor/preceding element\n\t\t\t\tfunction (elem, context, xml) {\n\t\t\t\t\twhile ((elem = elem[dir])) {\n\t\t\t\t\t\tif (elem.nodeType === 1 || checkNonElements) {\n\t\t\t\t\t\t\treturn matcher(elem, context, xml);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn false;\n\t\t\t\t} :\n\n\t\t\t\t// Check against all ancestor/preceding elements\n\t\t\t\tfunction (elem, context, xml) {\n\t\t\t\t\tvar oldCache, outerCache,\n\t\t\t\t\t\tnewCache = [dirruns, doneName];\n\n\t\t\t\t\t// We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching\n\t\t\t\t\tif (xml) {\n\t\t\t\t\t\twhile ((elem = elem[dir])) {\n\t\t\t\t\t\t\tif (elem.nodeType === 1 || checkNonElements) {\n\t\t\t\t\t\t\t\tif (matcher(elem, context, xml)) {\n\t\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\twhile ((elem = elem[dir])) {\n\t\t\t\t\t\t\tif (elem.nodeType === 1 || checkNonElements) {\n\t\t\t\t\t\t\t\touterCache = elem[expando] || (elem[expando] = {});\n\n\t\t\t\t\t\t\t\tif (skip && nodeName(elem, skip)) {\n\t\t\t\t\t\t\t\t\telem = elem[dir] || elem;\n\t\t\t\t\t\t\t\t} else if ((oldCache = outerCache[key]) &&\n\t\t\t\t\t\t\t\t\toldCache[0] === dirruns && oldCache[1] === doneName) {\n\n\t\t\t\t\t\t\t\t\t// Assign to newCache so results back-propagate to previous elements\n\t\t\t\t\t\t\t\t\treturn (newCache[2] = oldCache[2]);\n\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t// Reuse newcache so results back-propagate to previous elements\n\t\t\t\t\t\t\t\t\touterCache[key] = newCache;\n\n\t\t\t\t\t\t\t\t\t// A match means we're done; a fail means we have to keep checking\n\t\t\t\t\t\t\t\t\tif ((newCache[2] = matcher(elem, context, xml))) {\n\t\t\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn false;\n\t\t\t\t};\n\t\t}\n\n\t\tfunction elementMatcher(matchers) {\n\t\t\treturn matchers.length > 1 ?\n\t\t\t\tfunction (elem, context, xml) {\n\t\t\t\t\tvar i = matchers.length;\n\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\tif (!matchers[i](elem, context, xml)) {\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn true;\n\t\t\t\t} :\n\t\t\t\tmatchers[0];\n\t\t}\n\n\t\tfunction multipleContexts(selector, contexts, results) {\n\t\t\tvar i = 0,\n\t\t\t\tlen = contexts.length;\n\t\t\tfor (; i < len; i++) {\n\t\t\t\tfind(selector, contexts[i], results);\n\t\t\t}\n\t\t\treturn results;\n\t\t}\n\n\t\tfunction condense(unmatched, map, filter, context, xml) {\n\t\t\tvar elem,\n\t\t\t\tnewUnmatched = [],\n\t\t\t\ti = 0,\n\t\t\t\tlen = unmatched.length,\n\t\t\t\tmapped = map != null;\n\n\t\t\tfor (; i < len; i++) {\n\t\t\t\tif ((elem = unmatched[i])) {\n\t\t\t\t\tif (!filter || filter(elem, context, xml)) {\n\t\t\t\t\t\tnewUnmatched.push(elem);\n\t\t\t\t\t\tif (mapped) {\n\t\t\t\t\t\t\tmap.push(i);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn newUnmatched;\n\t\t}\n\n\t\tfunction setMatcher(preFilter, selector, matcher, postFilter, postFinder, postSelector) {\n\t\t\tif (postFilter && !postFilter[expando]) {\n\t\t\t\tpostFilter = setMatcher(postFilter);\n\t\t\t}\n\t\t\tif (postFinder && !postFinder[expando]) {\n\t\t\t\tpostFinder = setMatcher(postFinder, postSelector);\n\t\t\t}\n\t\t\treturn markFunction(function (seed, results, context, xml) {\n\t\t\t\tvar temp, i, elem, matcherOut,\n\t\t\t\t\tpreMap = [],\n\t\t\t\t\tpostMap = [],\n\t\t\t\t\tpreexisting = results.length,\n\n\t\t\t\t\t// Get initial elements from seed or context\n\t\t\t\t\telems = seed ||\n\t\t\t\t\t\tmultipleContexts(selector || \"*\",\n\t\t\t\t\t\t\tcontext.nodeType ? [context] : context, []),\n\n\t\t\t\t\t// Prefilter to get matcher input, preserving a map for seed-results synchronization\n\t\t\t\t\tmatcherIn = preFilter && (seed || !selector) ?\n\t\t\t\t\t\tcondense(elems, preMap, preFilter, context, xml) :\n\t\t\t\t\t\telems;\n\n\t\t\t\tif (matcher) {\n\n\t\t\t\t\t// If we have a postFinder, or filtered seed, or non-seed postFilter\n\t\t\t\t\t// or preexisting results,\n\t\t\t\t\tmatcherOut = postFinder || (seed ? preFilter : preexisting || postFilter) ?\n\n\t\t\t\t\t\t// ...intermediate processing is necessary\n\t\t\t\t\t\t[] :\n\n\t\t\t\t\t\t// ...otherwise use results directly\n\t\t\t\t\t\tresults;\n\n\t\t\t\t\t// Find primary matches\n\t\t\t\t\tmatcher(matcherIn, matcherOut, context, xml);\n\t\t\t\t} else {\n\t\t\t\t\tmatcherOut = matcherIn;\n\t\t\t\t}\n\n\t\t\t\t// Apply postFilter\n\t\t\t\tif (postFilter) {\n\t\t\t\t\ttemp = condense(matcherOut, postMap);\n\t\t\t\t\tpostFilter(temp, [], context, xml);\n\n\t\t\t\t\t// Un-match failing elements by moving them back to matcherIn\n\t\t\t\t\ti = temp.length;\n\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\tif ((elem = temp[i])) {\n\t\t\t\t\t\t\tmatcherOut[postMap[i]] = !(matcherIn[postMap[i]] = elem);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (seed) {\n\t\t\t\t\tif (postFinder || preFilter) {\n\t\t\t\t\t\tif (postFinder) {\n\n\t\t\t\t\t\t\t// Get the final matcherOut by condensing this intermediate into postFinder contexts\n\t\t\t\t\t\t\ttemp = [];\n\t\t\t\t\t\t\ti = matcherOut.length;\n\t\t\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\t\t\tif ((elem = matcherOut[i])) {\n\n\t\t\t\t\t\t\t\t\t// Restore matcherIn since elem is not yet a final match\n\t\t\t\t\t\t\t\t\ttemp.push((matcherIn[i] = elem));\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tpostFinder(null, (matcherOut = []), temp, xml);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Move matched elements from seed to results to keep them synchronized\n\t\t\t\t\t\ti = matcherOut.length;\n\t\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\t\tif ((elem = matcherOut[i]) &&\n\t\t\t\t\t\t\t\t(temp = postFinder ? indexOf.call(seed, elem) : preMap[i]) > -1) {\n\n\t\t\t\t\t\t\t\tseed[temp] = !(results[temp] = elem);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Add elements to results, through postFinder if defined\n\t\t\t\t} else {\n\t\t\t\t\tmatcherOut = condense(\n\t\t\t\t\t\tmatcherOut === results ?\n\t\t\t\t\t\t\tmatcherOut.splice(preexisting, matcherOut.length) :\n\t\t\t\t\t\t\tmatcherOut\n\t\t\t\t\t);\n\t\t\t\t\tif (postFinder) {\n\t\t\t\t\t\tpostFinder(null, results, matcherOut, xml);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tpush.apply(results, matcherOut);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tfunction matcherFromTokens(tokens) {\n\t\t\tvar checkContext, matcher, j,\n\t\t\t\tlen = tokens.length,\n\t\t\t\tleadingRelative = Expr.relative[tokens[0].type],\n\t\t\t\timplicitRelative = leadingRelative || Expr.relative[\" \"],\n\t\t\t\ti = leadingRelative ? 1 : 0,\n\n\t\t\t\t// The foundational matcher ensures that elements are reachable from top-level context(s)\n\t\t\t\tmatchContext = addCombinator(function (elem) {\n\t\t\t\t\treturn elem === checkContext;\n\t\t\t\t}, implicitRelative, true),\n\t\t\t\tmatchAnyContext = addCombinator(function (elem) {\n\t\t\t\t\treturn indexOf.call(checkContext, elem) > -1;\n\t\t\t\t}, implicitRelative, true),\n\t\t\t\tmatchers = [function (elem, context, xml) {\n\n\t\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\tvar ret = (!leadingRelative && (xml || context != outermostContext)) || (\n\t\t\t\t\t\t(checkContext = context).nodeType ?\n\t\t\t\t\t\t\tmatchContext(elem, context, xml) :\n\t\t\t\t\t\t\tmatchAnyContext(elem, context, xml));\n\n\t\t\t\t\t// Avoid hanging onto element\n\t\t\t\t\t// (see https://github.com/jquery/sizzle/issues/299)\n\t\t\t\t\tcheckContext = null;\n\t\t\t\t\treturn ret;\n\t\t\t\t}];\n\n\t\t\tfor (; i < len; i++) {\n\t\t\t\tif ((matcher = Expr.relative[tokens[i].type])) {\n\t\t\t\t\tmatchers = [addCombinator(elementMatcher(matchers), matcher)];\n\t\t\t\t} else {\n\t\t\t\t\tmatcher = Expr.filter[tokens[i].type].apply(null, tokens[i].matches);\n\n\t\t\t\t\t// Return special upon seeing a positional matcher\n\t\t\t\t\tif (matcher[expando]) {\n\n\t\t\t\t\t\t// Find the next relative operator (if any) for proper handling\n\t\t\t\t\t\tj = ++i;\n\t\t\t\t\t\tfor (; j < len; j++) {\n\t\t\t\t\t\t\tif (Expr.relative[tokens[j].type]) {\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn setMatcher(\n\t\t\t\t\t\t\ti > 1 && elementMatcher(matchers),\n\t\t\t\t\t\t\ti > 1 && toSelector(\n\n\t\t\t\t\t\t\t\t// If the preceding token was a descendant combinator, insert an implicit any-element `*`\n\t\t\t\t\t\t\t\ttokens.slice(0, i - 1)\n\t\t\t\t\t\t\t\t\t.concat({ value: tokens[i - 2].type === \" \" ? \"*\" : \"\" })\n\t\t\t\t\t\t\t).replace(rtrimCSS, \"$1\"),\n\t\t\t\t\t\t\tmatcher,\n\t\t\t\t\t\t\ti < j && matcherFromTokens(tokens.slice(i, j)),\n\t\t\t\t\t\t\tj < len && matcherFromTokens((tokens = tokens.slice(j))),\n\t\t\t\t\t\t\tj < len && toSelector(tokens)\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\tmatchers.push(matcher);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn elementMatcher(matchers);\n\t\t}\n\n\t\tfunction matcherFromGroupMatchers(elementMatchers, setMatchers) {\n\t\t\tvar bySet = setMatchers.length > 0,\n\t\t\t\tbyElement = elementMatchers.length > 0,\n\t\t\t\tsuperMatcher = function (seed, context, xml, results, outermost) {\n\t\t\t\t\tvar elem, j, matcher,\n\t\t\t\t\t\tmatchedCount = 0,\n\t\t\t\t\t\ti = \"0\",\n\t\t\t\t\t\tunmatched = seed && [],\n\t\t\t\t\t\tsetMatched = [],\n\t\t\t\t\t\tcontextBackup = outermostContext,\n\n\t\t\t\t\t\t// We must always have either seed elements or outermost context\n\t\t\t\t\t\telems = seed || byElement && Expr.find.TAG(\"*\", outermost),\n\n\t\t\t\t\t\t// Use integer dirruns iff this is the outermost matcher\n\t\t\t\t\t\tdirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1),\n\t\t\t\t\t\tlen = elems.length;\n\n\t\t\t\t\tif (outermost) {\n\n\t\t\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\t\toutermostContext = context == document || context || outermost;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Add elements passing elementMatchers directly to results\n\t\t\t\t\t// Support: iOS <=7 - 9 only\n\t\t\t\t\t// Tolerate NodeList properties (IE: \"length\"; Safari: <number>) matching\n\t\t\t\t\t// elements by id. (see trac-14142)\n\t\t\t\t\tfor (; i !== len && (elem = elems[i]) != null; i++) {\n\t\t\t\t\t\tif (byElement && elem) {\n\t\t\t\t\t\t\tj = 0;\n\n\t\t\t\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\t\t\tif (!context && elem.ownerDocument != document) {\n\t\t\t\t\t\t\t\tsetDocument(elem);\n\t\t\t\t\t\t\t\txml = !documentIsHTML;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\twhile ((matcher = elementMatchers[j++])) {\n\t\t\t\t\t\t\t\tif (matcher(elem, context || document, xml)) {\n\t\t\t\t\t\t\t\t\tpush.call(results, elem);\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (outermost) {\n\t\t\t\t\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Track unmatched elements for set filters\n\t\t\t\t\t\tif (bySet) {\n\n\t\t\t\t\t\t\t// They will have gone through all possible matchers\n\t\t\t\t\t\t\tif ((elem = !matcher && elem)) {\n\t\t\t\t\t\t\t\tmatchedCount--;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Lengthen the array for every element, matched or not\n\t\t\t\t\t\t\tif (seed) {\n\t\t\t\t\t\t\t\tunmatched.push(elem);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// `i` is now the count of elements visited above, and adding it to `matchedCount`\n\t\t\t\t\t// makes the latter nonnegative.\n\t\t\t\t\tmatchedCount += i;\n\n\t\t\t\t\t// Apply set filters to unmatched elements\n\t\t\t\t\t// NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`\n\t\t\t\t\t// equals `i`), unless we didn't visit _any_ elements in the above loop because we have\n\t\t\t\t\t// no element matchers and no seed.\n\t\t\t\t\t// Incrementing an initially-string \"0\" `i` allows `i` to remain a string only in that\n\t\t\t\t\t// case, which will result in a \"00\" `matchedCount` that differs from `i` but is also\n\t\t\t\t\t// numerically zero.\n\t\t\t\t\tif (bySet && i !== matchedCount) {\n\t\t\t\t\t\tj = 0;\n\t\t\t\t\t\twhile ((matcher = setMatchers[j++])) {\n\t\t\t\t\t\t\tmatcher(unmatched, setMatched, context, xml);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (seed) {\n\n\t\t\t\t\t\t\t// Reintegrate element matches to eliminate the need for sorting\n\t\t\t\t\t\t\tif (matchedCount > 0) {\n\t\t\t\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\t\t\t\tif (!(unmatched[i] || setMatched[i])) {\n\t\t\t\t\t\t\t\t\t\tsetMatched[i] = pop.call(results);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Discard index placeholder values to get only actual matches\n\t\t\t\t\t\t\tsetMatched = condense(setMatched);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Add matches to results\n\t\t\t\t\t\tpush.apply(results, setMatched);\n\n\t\t\t\t\t\t// Seedless set matches succeeding multiple successful matchers stipulate sorting\n\t\t\t\t\t\tif (outermost && !seed && setMatched.length > 0 &&\n\t\t\t\t\t\t\t(matchedCount + setMatchers.length) > 1) {\n\n\t\t\t\t\t\t\tjQuery.uniqueSort(results);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Override manipulation of globals by nested matchers\n\t\t\t\t\tif (outermost) {\n\t\t\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\t\t\toutermostContext = contextBackup;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn unmatched;\n\t\t\t\t};\n\n\t\t\treturn bySet ?\n\t\t\t\tmarkFunction(superMatcher) :\n\t\t\t\tsuperMatcher;\n\t\t}\n\n\t\tfunction compile(selector, match /* Internal Use Only */) {\n\t\t\tvar i,\n\t\t\t\tsetMatchers = [],\n\t\t\t\telementMatchers = [],\n\t\t\t\tcached = compilerCache[selector + \" \"];\n\n\t\t\tif (!cached) {\n\n\t\t\t\t// Generate a function of recursive functions that can be used to check each element\n\t\t\t\tif (!match) {\n\t\t\t\t\tmatch = tokenize(selector);\n\t\t\t\t}\n\t\t\t\ti = match.length;\n\t\t\t\twhile (i--) {\n\t\t\t\t\tcached = matcherFromTokens(match[i]);\n\t\t\t\t\tif (cached[expando]) {\n\t\t\t\t\t\tsetMatchers.push(cached);\n\t\t\t\t\t} else {\n\t\t\t\t\t\telementMatchers.push(cached);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Cache the compiled function\n\t\t\t\tcached = compilerCache(selector,\n\t\t\t\t\tmatcherFromGroupMatchers(elementMatchers, setMatchers));\n\n\t\t\t\t// Save selector and tokenization\n\t\t\t\tcached.selector = selector;\n\t\t\t}\n\t\t\treturn cached;\n\t\t}\n\n\t\t/**\n\t\t * A low-level selection function that works with jQuery's compiled\n\t\t *  selector functions\n\t\t * @param {String|Function} selector A selector or a pre-compiled\n\t\t *  selector function built with jQuery selector compile\n\t\t * @param {Element} context\n\t\t * @param {Array} [results]\n\t\t * @param {Array} [seed] A set of elements to match against\n\t\t */\n\t\tfunction select(selector, context, results, seed) {\n\t\t\tvar i, tokens, token, type, find,\n\t\t\t\tcompiled = typeof selector === \"function\" && selector,\n\t\t\t\tmatch = !seed && tokenize((selector = compiled.selector || selector));\n\n\t\t\tresults = results || [];\n\n\t\t\t// Try to minimize operations if there is only one selector in the list and no seed\n\t\t\t// (the latter of which guarantees us context)\n\t\t\tif (match.length === 1) {\n\n\t\t\t\t// Reduce context if the leading compound selector is an ID\n\t\t\t\ttokens = match[0] = match[0].slice(0);\n\t\t\t\tif (tokens.length > 2 && (token = tokens[0]).type === \"ID\" &&\n\t\t\t\t\tcontext.nodeType === 9 && documentIsHTML && Expr.relative[tokens[1].type]) {\n\n\t\t\t\t\tcontext = (Expr.find.ID(\n\t\t\t\t\t\ttoken.matches[0].replace(runescape, funescape),\n\t\t\t\t\t\tcontext\n\t\t\t\t\t) || [])[0];\n\t\t\t\t\tif (!context) {\n\t\t\t\t\t\treturn results;\n\n\t\t\t\t\t\t// Precompiled matchers will still verify ancestry, so step up a level\n\t\t\t\t\t} else if (compiled) {\n\t\t\t\t\t\tcontext = context.parentNode;\n\t\t\t\t\t}\n\n\t\t\t\t\tselector = selector.slice(tokens.shift().value.length);\n\t\t\t\t}\n\n\t\t\t\t// Fetch a seed set for right-to-left matching\n\t\t\t\ti = matchExpr.needsContext.test(selector) ? 0 : tokens.length;\n\t\t\t\twhile (i--) {\n\t\t\t\t\ttoken = tokens[i];\n\n\t\t\t\t\t// Abort if we hit a combinator\n\t\t\t\t\tif (Expr.relative[(type = token.type)]) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tif ((find = Expr.find[type])) {\n\n\t\t\t\t\t\t// Search, expanding context for leading sibling combinators\n\t\t\t\t\t\tif ((seed = find(\n\t\t\t\t\t\t\ttoken.matches[0].replace(runescape, funescape),\n\t\t\t\t\t\t\trsibling.test(tokens[0].type) &&\n\t\t\t\t\t\t\ttestContext(context.parentNode) || context\n\t\t\t\t\t\t))) {\n\n\t\t\t\t\t\t\t// If seed is empty or no tokens remain, we can return early\n\t\t\t\t\t\t\ttokens.splice(i, 1);\n\t\t\t\t\t\t\tselector = seed.length && toSelector(tokens);\n\t\t\t\t\t\t\tif (!selector) {\n\t\t\t\t\t\t\t\tpush.apply(results, seed);\n\t\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Compile and execute a filtering function if one is not provided\n\t\t\t// Provide `match` to avoid retokenization if we modified the selector above\n\t\t\t(compiled || compile(selector, match))(\n\t\t\t\tseed,\n\t\t\t\tcontext,\n\t\t\t\t!documentIsHTML,\n\t\t\t\tresults,\n\t\t\t\t!context || rsibling.test(selector) && testContext(context.parentNode) || context\n\t\t\t);\n\t\t\treturn results;\n\t\t}\n\n\t\t// One-time assignments\n\n\t\t// Support: Android <=4.0 - 4.1+\n\t\t// Sort stability\n\t\tsupport.sortStable = expando.split(\"\").sort(sortOrder).join(\"\") === expando;\n\n\t\t// Initialize against the default document\n\t\tsetDocument();\n\n\t\t// Support: Android <=4.0 - 4.1+\n\t\t// Detached nodes confoundingly follow *each other*\n\t\tsupport.sortDetached = assert(function (el) {\n\n\t\t\t// Should return 1, but returns 4 (following)\n\t\t\treturn el.compareDocumentPosition(document.createElement(\"fieldset\")) & 1;\n\t\t});\n\n\t\tjQuery.find = find;\n\n\t\t// Deprecated\n\t\tjQuery.expr[\":\"] = jQuery.expr.pseudos;\n\t\tjQuery.unique = jQuery.uniqueSort;\n\n\t\t// These have always been private, but they used to be documented\n\t\t// as part of Sizzle so let's maintain them in the 3.x line\n\t\t// for backwards compatibility purposes.\n\t\tfind.compile = compile;\n\t\tfind.select = select;\n\t\tfind.setDocument = setDocument;\n\n\t\tfind.escape = jQuery.escapeSelector;\n\t\tfind.getText = jQuery.text;\n\t\tfind.isXML = jQuery.isXMLDoc;\n\t\tfind.selectors = jQuery.expr;\n\t\tfind.support = jQuery.support;\n\t\tfind.uniqueSort = jQuery.uniqueSort;\n\n\t\t/* eslint-enable */\n\n\t})();\n\n\n\tvar dir = function (elem, dir, until) {\n\t\tvar matched = [],\n\t\t\ttruncate = until !== undefined;\n\n\t\twhile ((elem = elem[dir]) && elem.nodeType !== 9) {\n\t\t\tif (elem.nodeType === 1) {\n\t\t\t\tif (truncate && jQuery(elem).is(until)) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tmatched.push(elem);\n\t\t\t}\n\t\t}\n\t\treturn matched;\n\t};\n\n\n\tvar siblings = function (n, elem) {\n\t\tvar matched = [];\n\n\t\tfor (; n; n = n.nextSibling) {\n\t\t\tif (n.nodeType === 1 && n !== elem) {\n\t\t\t\tmatched.push(n);\n\t\t\t}\n\t\t}\n\n\t\treturn matched;\n\t};\n\n\n\tvar rneedsContext = jQuery.expr.match.needsContext;\n\n\tvar rsingleTag = (/^<([a-z][^\\/\\0>:\\x20\\t\\r\\n\\f]*)[\\x20\\t\\r\\n\\f]*\\/?>(?:<\\/\\1>|)$/i);\n\n\n\n\t// Implement the identical functionality for filter and not\n\tfunction winnow(elements, qualifier, not) {\n\t\tif (isFunction(qualifier)) {\n\t\t\treturn jQuery.grep(elements, function (elem, i) {\n\t\t\t\treturn !!qualifier.call(elem, i, elem) !== not;\n\t\t\t});\n\t\t}\n\n\t\t// Single element\n\t\tif (qualifier.nodeType) {\n\t\t\treturn jQuery.grep(elements, function (elem) {\n\t\t\t\treturn (elem === qualifier) !== not;\n\t\t\t});\n\t\t}\n\n\t\t// Arraylike of elements (jQuery, arguments, Array)\n\t\tif (typeof qualifier !== \"string\") {\n\t\t\treturn jQuery.grep(elements, function (elem) {\n\t\t\t\treturn (indexOf.call(qualifier, elem) > -1) !== not;\n\t\t\t});\n\t\t}\n\n\t\t// Filtered directly for both simple and complex selectors\n\t\treturn jQuery.filter(qualifier, elements, not);\n\t}\n\n\tjQuery.filter = function (expr, elems, not) {\n\t\tvar elem = elems[0];\n\n\t\tif (not) {\n\t\t\texpr = \":not(\" + expr + \")\";\n\t\t}\n\n\t\tif (elems.length === 1 && elem.nodeType === 1) {\n\t\t\treturn jQuery.find.matchesSelector(elem, expr) ? [elem] : [];\n\t\t}\n\n\t\treturn jQuery.find.matches(expr, jQuery.grep(elems, function (elem) {\n\t\t\treturn elem.nodeType === 1;\n\t\t}));\n\t};\n\n\tjQuery.fn.extend({\n\t\tfind: function (selector) {\n\t\t\tvar i, ret,\n\t\t\t\tlen = this.length,\n\t\t\t\tself = this;\n\n\t\t\tif (typeof selector !== \"string\") {\n\t\t\t\treturn this.pushStack(jQuery(selector).filter(function () {\n\t\t\t\t\tfor (i = 0; i < len; i++) {\n\t\t\t\t\t\tif (jQuery.contains(self[i], this)) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}));\n\t\t\t}\n\n\t\t\tret = this.pushStack([]);\n\n\t\t\tfor (i = 0; i < len; i++) {\n\t\t\t\tjQuery.find(selector, self[i], ret);\n\t\t\t}\n\n\t\t\treturn len > 1 ? jQuery.uniqueSort(ret) : ret;\n\t\t},\n\t\tfilter: function (selector) {\n\t\t\treturn this.pushStack(winnow(this, selector || [], false));\n\t\t},\n\t\tnot: function (selector) {\n\t\t\treturn this.pushStack(winnow(this, selector || [], true));\n\t\t},\n\t\tis: function (selector) {\n\t\t\treturn !!winnow(\n\t\t\t\tthis,\n\n\t\t\t\t// If this is a positional/relative selector, check membership in the returned set\n\t\t\t\t// so $(\"p:first\").is(\"p:last\") won't return true for a doc with two \"p\".\n\t\t\t\ttypeof selector === \"string\" && rneedsContext.test(selector) ?\n\t\t\t\t\tjQuery(selector) :\n\t\t\t\t\tselector || [],\n\t\t\t\tfalse\n\t\t\t).length;\n\t\t}\n\t});\n\n\n\t// Initialize a jQuery object\n\n\n\t// A central reference to the root jQuery(document)\n\tvar rootjQuery,\n\n\t\t// A simple way to check for HTML strings\n\t\t// Prioritize #id over <tag> to avoid XSS via location.hash (trac-9521)\n\t\t// Strict HTML recognition (trac-11290: must start with <)\n\t\t// Shortcut simple #id case for speed\n\t\trquickExpr = /^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]+))$/,\n\n\t\tinit = jQuery.fn.init = function (selector, context, root) {\n\t\t\tvar match, elem;\n\n\t\t\t// HANDLE: $(\"\"), $(null), $(undefined), $(false)\n\t\t\tif (!selector) {\n\t\t\t\treturn this;\n\t\t\t}\n\n\t\t\t// Method init() accepts an alternate rootjQuery\n\t\t\t// so migrate can support jQuery.sub (gh-2101)\n\t\t\troot = root || rootjQuery;\n\n\t\t\t// Handle HTML strings\n\t\t\tif (typeof selector === \"string\") {\n\t\t\t\tif (selector[0] === \"<\" &&\n\t\t\t\t\tselector[selector.length - 1] === \">\" &&\n\t\t\t\t\tselector.length >= 3) {\n\n\t\t\t\t\t// Assume that strings that start and end with <> are HTML and skip the regex check\n\t\t\t\t\tmatch = [null, selector, null];\n\n\t\t\t\t} else {\n\t\t\t\t\tmatch = rquickExpr.exec(selector);\n\t\t\t\t}\n\n\t\t\t\t// Match html or make sure no context is specified for #id\n\t\t\t\tif (match && (match[1] || !context)) {\n\n\t\t\t\t\t// HANDLE: $(html) -> $(array)\n\t\t\t\t\tif (match[1]) {\n\t\t\t\t\t\tcontext = context instanceof jQuery ? context[0] : context;\n\n\t\t\t\t\t\t// Option to run scripts is true for back-compat\n\t\t\t\t\t\t// Intentionally let the error be thrown if parseHTML is not present\n\t\t\t\t\t\tjQuery.merge(this, jQuery.parseHTML(\n\t\t\t\t\t\t\tmatch[1],\n\t\t\t\t\t\t\tcontext && context.nodeType ? context.ownerDocument || context : document,\n\t\t\t\t\t\t\ttrue\n\t\t\t\t\t\t));\n\n\t\t\t\t\t\t// HANDLE: $(html, props)\n\t\t\t\t\t\tif (rsingleTag.test(match[1]) && jQuery.isPlainObject(context)) {\n\t\t\t\t\t\t\tfor (match in context) {\n\n\t\t\t\t\t\t\t\t// Properties of context are called as methods if possible\n\t\t\t\t\t\t\t\tif (isFunction(this[match])) {\n\t\t\t\t\t\t\t\t\tthis[match](context[match]);\n\n\t\t\t\t\t\t\t\t\t// ...and otherwise set as attributes\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tthis.attr(match, context[match]);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn this;\n\n\t\t\t\t\t\t// HANDLE: $(#id)\n\t\t\t\t\t} else {\n\t\t\t\t\t\telem = document.getElementById(match[2]);\n\n\t\t\t\t\t\tif (elem) {\n\n\t\t\t\t\t\t\t// Inject the element directly into the jQuery object\n\t\t\t\t\t\t\tthis[0] = elem;\n\t\t\t\t\t\t\tthis.length = 1;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn this;\n\t\t\t\t\t}\n\n\t\t\t\t\t// HANDLE: $(expr, $(...))\n\t\t\t\t} else if (!context || context.jquery) {\n\t\t\t\t\treturn (context || root).find(selector);\n\n\t\t\t\t\t// HANDLE: $(expr, context)\n\t\t\t\t\t// (which is just equivalent to: $(context).find(expr)\n\t\t\t\t} else {\n\t\t\t\t\treturn this.constructor(context).find(selector);\n\t\t\t\t}\n\n\t\t\t\t// HANDLE: $(DOMElement)\n\t\t\t} else if (selector.nodeType) {\n\t\t\t\tthis[0] = selector;\n\t\t\t\tthis.length = 1;\n\t\t\t\treturn this;\n\n\t\t\t\t// HANDLE: $(function)\n\t\t\t\t// Shortcut for document ready\n\t\t\t} else if (isFunction(selector)) {\n\t\t\t\treturn root.ready !== undefined ?\n\t\t\t\t\troot.ready(selector) :\n\n\t\t\t\t\t// Execute immediately if ready is not present\n\t\t\t\t\tselector(jQuery);\n\t\t\t}\n\n\t\t\treturn jQuery.makeArray(selector, this);\n\t\t};\n\n\t// Give the init function the jQuery prototype for later instantiation\n\tinit.prototype = jQuery.fn;\n\n\t// Initialize central reference\n\trootjQuery = jQuery(document);\n\n\n\tvar rparentsprev = /^(?:parents|prev(?:Until|All))/,\n\n\t\t// Methods guaranteed to produce a unique set when starting from a unique set\n\t\tguaranteedUnique = {\n\t\t\tchildren: true,\n\t\t\tcontents: true,\n\t\t\tnext: true,\n\t\t\tprev: true\n\t\t};\n\n\tjQuery.fn.extend({\n\t\thas: function (target) {\n\t\t\tvar targets = jQuery(target, this),\n\t\t\t\tl = targets.length;\n\n\t\t\treturn this.filter(function () {\n\t\t\t\tvar i = 0;\n\t\t\t\tfor (; i < l; i++) {\n\t\t\t\t\tif (jQuery.contains(this, targets[i])) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\tclosest: function (selectors, context) {\n\t\t\tvar cur,\n\t\t\t\ti = 0,\n\t\t\t\tl = this.length,\n\t\t\t\tmatched = [],\n\t\t\t\ttargets = typeof selectors !== \"string\" && jQuery(selectors);\n\n\t\t\t// Positional selectors never match, since there's no _selection_ context\n\t\t\tif (!rneedsContext.test(selectors)) {\n\t\t\t\tfor (; i < l; i++) {\n\t\t\t\t\tfor (cur = this[i]; cur && cur !== context; cur = cur.parentNode) {\n\n\t\t\t\t\t\t// Always skip document fragments\n\t\t\t\t\t\tif (cur.nodeType < 11 && (targets ?\n\t\t\t\t\t\t\ttargets.index(cur) > -1 :\n\n\t\t\t\t\t\t\t// Don't pass non-elements to jQuery#find\n\t\t\t\t\t\t\tcur.nodeType === 1 &&\n\t\t\t\t\t\t\tjQuery.find.matchesSelector(cur, selectors))) {\n\n\t\t\t\t\t\t\tmatched.push(cur);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn this.pushStack(matched.length > 1 ? jQuery.uniqueSort(matched) : matched);\n\t\t},\n\n\t\t// Determine the position of an element within the set\n\t\tindex: function (elem) {\n\n\t\t\t// No argument, return index in parent\n\t\t\tif (!elem) {\n\t\t\t\treturn (this[0] && this[0].parentNode) ? this.first().prevAll().length : -1;\n\t\t\t}\n\n\t\t\t// Index in selector\n\t\t\tif (typeof elem === \"string\") {\n\t\t\t\treturn indexOf.call(jQuery(elem), this[0]);\n\t\t\t}\n\n\t\t\t// Locate the position of the desired element\n\t\t\treturn indexOf.call(this,\n\n\t\t\t\t// If it receives a jQuery object, the first element is used\n\t\t\t\telem.jquery ? elem[0] : elem\n\t\t\t);\n\t\t},\n\n\t\tadd: function (selector, context) {\n\t\t\treturn this.pushStack(\n\t\t\t\tjQuery.uniqueSort(\n\t\t\t\t\tjQuery.merge(this.get(), jQuery(selector, context))\n\t\t\t\t)\n\t\t\t);\n\t\t},\n\n\t\taddBack: function (selector) {\n\t\t\treturn this.add(selector == null ?\n\t\t\t\tthis.prevObject : this.prevObject.filter(selector)\n\t\t\t);\n\t\t}\n\t});\n\n\tfunction sibling(cur, dir) {\n\t\twhile ((cur = cur[dir]) && cur.nodeType !== 1) { }\n\t\treturn cur;\n\t}\n\n\tjQuery.each({\n\t\tparent: function (elem) {\n\t\t\tvar parent = elem.parentNode;\n\t\t\treturn parent && parent.nodeType !== 11 ? parent : null;\n\t\t},\n\t\tparents: function (elem) {\n\t\t\treturn dir(elem, \"parentNode\");\n\t\t},\n\t\tparentsUntil: function (elem, _i, until) {\n\t\t\treturn dir(elem, \"parentNode\", until);\n\t\t},\n\t\tnext: function (elem) {\n\t\t\treturn sibling(elem, \"nextSibling\");\n\t\t},\n\t\tprev: function (elem) {\n\t\t\treturn sibling(elem, \"previousSibling\");\n\t\t},\n\t\tnextAll: function (elem) {\n\t\t\treturn dir(elem, \"nextSibling\");\n\t\t},\n\t\tprevAll: function (elem) {\n\t\t\treturn dir(elem, \"previousSibling\");\n\t\t},\n\t\tnextUntil: function (elem, _i, until) {\n\t\t\treturn dir(elem, \"nextSibling\", until);\n\t\t},\n\t\tprevUntil: function (elem, _i, until) {\n\t\t\treturn dir(elem, \"previousSibling\", until);\n\t\t},\n\t\tsiblings: function (elem) {\n\t\t\treturn siblings((elem.parentNode || {}).firstChild, elem);\n\t\t},\n\t\tchildren: function (elem) {\n\t\t\treturn siblings(elem.firstChild);\n\t\t},\n\t\tcontents: function (elem) {\n\t\t\tif (elem.contentDocument != null &&\n\n\t\t\t\t// Support: IE 11+\n\t\t\t\t// <object> elements with no `data` attribute has an object\n\t\t\t\t// `contentDocument` with a `null` prototype.\n\t\t\t\tgetProto(elem.contentDocument)) {\n\n\t\t\t\treturn elem.contentDocument;\n\t\t\t}\n\n\t\t\t// Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only\n\t\t\t// Treat the template element as a regular one in browsers that\n\t\t\t// don't support it.\n\t\t\tif (nodeName(elem, \"template\")) {\n\t\t\t\telem = elem.content || elem;\n\t\t\t}\n\n\t\t\treturn jQuery.merge([], elem.childNodes);\n\t\t}\n\t}, function (name, fn) {\n\t\tjQuery.fn[name] = function (until, selector) {\n\t\t\tvar matched = jQuery.map(this, fn, until);\n\n\t\t\tif (name.slice(-5) !== \"Until\") {\n\t\t\t\tselector = until;\n\t\t\t}\n\n\t\t\tif (selector && typeof selector === \"string\") {\n\t\t\t\tmatched = jQuery.filter(selector, matched);\n\t\t\t}\n\n\t\t\tif (this.length > 1) {\n\n\t\t\t\t// Remove duplicates\n\t\t\t\tif (!guaranteedUnique[name]) {\n\t\t\t\t\tjQuery.uniqueSort(matched);\n\t\t\t\t}\n\n\t\t\t\t// Reverse order for parents* and prev-derivatives\n\t\t\t\tif (rparentsprev.test(name)) {\n\t\t\t\t\tmatched.reverse();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn this.pushStack(matched);\n\t\t};\n\t});\n\tvar rnothtmlwhite = (/[^\\x20\\t\\r\\n\\f]+/g);\n\n\n\n\t// Convert String-formatted options into Object-formatted ones\n\tfunction createOptions(options) {\n\t\tvar object = {};\n\t\tjQuery.each(options.match(rnothtmlwhite) || [], function (_, flag) {\n\t\t\tobject[flag] = true;\n\t\t});\n\t\treturn object;\n\t}\n\n\t/*\n\t * Create a callback list using the following parameters:\n\t *\n\t *\toptions: an optional list of space-separated options that will change how\n\t *\t\t\tthe callback list behaves or a more traditional option object\n\t *\n\t * By default a callback list will act like an event callback list and can be\n\t * \"fired\" multiple times.\n\t *\n\t * Possible options:\n\t *\n\t *\tonce:\t\t\twill ensure the callback list can only be fired once (like a Deferred)\n\t *\n\t *\tmemory:\t\t\twill keep track of previous values and will call any callback added\n\t *\t\t\t\t\tafter the list has been fired right away with the latest \"memorized\"\n\t *\t\t\t\t\tvalues (like a Deferred)\n\t *\n\t *\tunique:\t\t\twill ensure a callback can only be added once (no duplicate in the list)\n\t *\n\t *\tstopOnFalse:\tinterrupt callings when a callback returns false\n\t *\n\t */\n\tjQuery.Callbacks = function (options) {\n\n\t\t// Convert options from String-formatted to Object-formatted if needed\n\t\t// (we check in cache first)\n\t\toptions = typeof options === \"string\" ?\n\t\t\tcreateOptions(options) :\n\t\t\tjQuery.extend({}, options);\n\n\t\tvar // Flag to know if list is currently firing\n\t\t\tfiring,\n\n\t\t\t// Last fire value for non-forgettable lists\n\t\t\tmemory,\n\n\t\t\t// Flag to know if list was already fired\n\t\t\tfired,\n\n\t\t\t// Flag to prevent firing\n\t\t\tlocked,\n\n\t\t\t// Actual callback list\n\t\t\tlist = [],\n\n\t\t\t// Queue of execution data for repeatable lists\n\t\t\tqueue = [],\n\n\t\t\t// Index of currently firing callback (modified by add/remove as needed)\n\t\t\tfiringIndex = -1,\n\n\t\t\t// Fire callbacks\n\t\t\tfire = function () {\n\n\t\t\t\t// Enforce single-firing\n\t\t\t\tlocked = locked || options.once;\n\n\t\t\t\t// Execute callbacks for all pending executions,\n\t\t\t\t// respecting firingIndex overrides and runtime changes\n\t\t\t\tfired = firing = true;\n\t\t\t\tfor (; queue.length; firingIndex = -1) {\n\t\t\t\t\tmemory = queue.shift();\n\t\t\t\t\twhile (++firingIndex < list.length) {\n\n\t\t\t\t\t\t// Run callback and check for early termination\n\t\t\t\t\t\tif (list[firingIndex].apply(memory[0], memory[1]) === false &&\n\t\t\t\t\t\t\toptions.stopOnFalse) {\n\n\t\t\t\t\t\t\t// Jump to end and forget the data so .add doesn't re-fire\n\t\t\t\t\t\t\tfiringIndex = list.length;\n\t\t\t\t\t\t\tmemory = false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Forget the data if we're done with it\n\t\t\t\tif (!options.memory) {\n\t\t\t\t\tmemory = false;\n\t\t\t\t}\n\n\t\t\t\tfiring = false;\n\n\t\t\t\t// Clean up if we're done firing for good\n\t\t\t\tif (locked) {\n\n\t\t\t\t\t// Keep an empty list if we have data for future add calls\n\t\t\t\t\tif (memory) {\n\t\t\t\t\t\tlist = [];\n\n\t\t\t\t\t\t// Otherwise, this object is spent\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlist = \"\";\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// Actual Callbacks object\n\t\t\tself = {\n\n\t\t\t\t// Add a callback or a collection of callbacks to the list\n\t\t\t\tadd: function () {\n\t\t\t\t\tif (list) {\n\n\t\t\t\t\t\t// If we have memory from a past run, we should fire after adding\n\t\t\t\t\t\tif (memory && !firing) {\n\t\t\t\t\t\t\tfiringIndex = list.length - 1;\n\t\t\t\t\t\t\tqueue.push(memory);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t(function add(args) {\n\t\t\t\t\t\t\tjQuery.each(args, function (_, arg) {\n\t\t\t\t\t\t\t\tif (isFunction(arg)) {\n\t\t\t\t\t\t\t\t\tif (!options.unique || !self.has(arg)) {\n\t\t\t\t\t\t\t\t\t\tlist.push(arg);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} else if (arg && arg.length && toType(arg) !== \"string\") {\n\n\t\t\t\t\t\t\t\t\t// Inspect recursively\n\t\t\t\t\t\t\t\t\tadd(arg);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t})(arguments);\n\n\t\t\t\t\t\tif (memory && !firing) {\n\t\t\t\t\t\t\tfire();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Remove a callback from the list\n\t\t\t\tremove: function () {\n\t\t\t\t\tjQuery.each(arguments, function (_, arg) {\n\t\t\t\t\t\tvar index;\n\t\t\t\t\t\twhile ((index = jQuery.inArray(arg, list, index)) > -1) {\n\t\t\t\t\t\t\tlist.splice(index, 1);\n\n\t\t\t\t\t\t\t// Handle firing indexes\n\t\t\t\t\t\t\tif (index <= firingIndex) {\n\t\t\t\t\t\t\t\tfiringIndex--;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Check if a given callback is in the list.\n\t\t\t\t// If no argument is given, return whether or not list has callbacks attached.\n\t\t\t\thas: function (fn) {\n\t\t\t\t\treturn fn ?\n\t\t\t\t\t\tjQuery.inArray(fn, list) > -1 :\n\t\t\t\t\t\tlist.length > 0;\n\t\t\t\t},\n\n\t\t\t\t// Remove all callbacks from the list\n\t\t\t\tempty: function () {\n\t\t\t\t\tif (list) {\n\t\t\t\t\t\tlist = [];\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Disable .fire and .add\n\t\t\t\t// Abort any current/pending executions\n\t\t\t\t// Clear all callbacks and values\n\t\t\t\tdisable: function () {\n\t\t\t\t\tlocked = queue = [];\n\t\t\t\t\tlist = memory = \"\";\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\t\t\t\tdisabled: function () {\n\t\t\t\t\treturn !list;\n\t\t\t\t},\n\n\t\t\t\t// Disable .fire\n\t\t\t\t// Also disable .add unless we have memory (since it would have no effect)\n\t\t\t\t// Abort any pending executions\n\t\t\t\tlock: function () {\n\t\t\t\t\tlocked = queue = [];\n\t\t\t\t\tif (!memory && !firing) {\n\t\t\t\t\t\tlist = memory = \"\";\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\t\t\t\tlocked: function () {\n\t\t\t\t\treturn !!locked;\n\t\t\t\t},\n\n\t\t\t\t// Call all callbacks with the given context and arguments\n\t\t\t\tfireWith: function (context, args) {\n\t\t\t\t\tif (!locked) {\n\t\t\t\t\t\targs = args || [];\n\t\t\t\t\t\targs = [context, args.slice ? args.slice() : args];\n\t\t\t\t\t\tqueue.push(args);\n\t\t\t\t\t\tif (!firing) {\n\t\t\t\t\t\t\tfire();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Call all the callbacks with the given arguments\n\t\t\t\tfire: function () {\n\t\t\t\t\tself.fireWith(this, arguments);\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// To know if the callbacks have already been called at least once\n\t\t\t\tfired: function () {\n\t\t\t\t\treturn !!fired;\n\t\t\t\t}\n\t\t\t};\n\n\t\treturn self;\n\t};\n\n\n\tfunction Identity(v) {\n\t\treturn v;\n\t}\n\tfunction Thrower(ex) {\n\t\tthrow ex;\n\t}\n\n\tfunction adoptValue(value, resolve, reject, noValue) {\n\t\tvar method;\n\n\t\ttry {\n\n\t\t\t// Check for promise aspect first to privilege synchronous behavior\n\t\t\tif (value && isFunction((method = value.promise))) {\n\t\t\t\tmethod.call(value).done(resolve).fail(reject);\n\n\t\t\t\t// Other thenables\n\t\t\t} else if (value && isFunction((method = value.then))) {\n\t\t\t\tmethod.call(value, resolve, reject);\n\n\t\t\t\t// Other non-thenables\n\t\t\t} else {\n\n\t\t\t\t// Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer:\n\t\t\t\t// * false: [ value ].slice( 0 ) => resolve( value )\n\t\t\t\t// * true: [ value ].slice( 1 ) => resolve()\n\t\t\t\tresolve.apply(undefined, [value].slice(noValue));\n\t\t\t}\n\n\t\t\t// For Promises/A+, convert exceptions into rejections\n\t\t\t// Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in\n\t\t\t// Deferred#then to conditionally suppress rejection.\n\t\t} catch (value) {\n\n\t\t\t// Support: Android 4.0 only\n\t\t\t// Strict mode functions invoked without .call/.apply get global-object context\n\t\t\treject.apply(undefined, [value]);\n\t\t}\n\t}\n\n\tjQuery.extend({\n\n\t\tDeferred: function (func) {\n\t\t\tvar tuples = [\n\n\t\t\t\t// action, add listener, callbacks,\n\t\t\t\t// ... .then handlers, argument index, [final state]\n\t\t\t\t[\"notify\", \"progress\", jQuery.Callbacks(\"memory\"),\n\t\t\t\t\tjQuery.Callbacks(\"memory\"), 2],\n\t\t\t\t[\"resolve\", \"done\", jQuery.Callbacks(\"once memory\"),\n\t\t\t\t\tjQuery.Callbacks(\"once memory\"), 0, \"resolved\"],\n\t\t\t\t[\"reject\", \"fail\", jQuery.Callbacks(\"once memory\"),\n\t\t\t\t\tjQuery.Callbacks(\"once memory\"), 1, \"rejected\"]\n\t\t\t],\n\t\t\t\tstate = \"pending\",\n\t\t\t\tpromise = {\n\t\t\t\t\tstate: function () {\n\t\t\t\t\t\treturn state;\n\t\t\t\t\t},\n\t\t\t\t\talways: function () {\n\t\t\t\t\t\tdeferred.done(arguments).fail(arguments);\n\t\t\t\t\t\treturn this;\n\t\t\t\t\t},\n\t\t\t\t\t\"catch\": function (fn) {\n\t\t\t\t\t\treturn promise.then(null, fn);\n\t\t\t\t\t},\n\n\t\t\t\t\t// Keep pipe for back-compat\n\t\t\t\t\tpipe: function ( /* fnDone, fnFail, fnProgress */) {\n\t\t\t\t\t\tvar fns = arguments;\n\n\t\t\t\t\t\treturn jQuery.Deferred(function (newDefer) {\n\t\t\t\t\t\t\tjQuery.each(tuples, function (_i, tuple) {\n\n\t\t\t\t\t\t\t\t// Map tuples (progress, done, fail) to arguments (done, fail, progress)\n\t\t\t\t\t\t\t\tvar fn = isFunction(fns[tuple[4]]) && fns[tuple[4]];\n\n\t\t\t\t\t\t\t\t// deferred.progress(function() { bind to newDefer or newDefer.notify })\n\t\t\t\t\t\t\t\t// deferred.done(function() { bind to newDefer or newDefer.resolve })\n\t\t\t\t\t\t\t\t// deferred.fail(function() { bind to newDefer or newDefer.reject })\n\t\t\t\t\t\t\t\tdeferred[tuple[1]](function () {\n\t\t\t\t\t\t\t\t\tvar returned = fn && fn.apply(this, arguments);\n\t\t\t\t\t\t\t\t\tif (returned && isFunction(returned.promise)) {\n\t\t\t\t\t\t\t\t\t\treturned.promise()\n\t\t\t\t\t\t\t\t\t\t\t.progress(newDefer.notify)\n\t\t\t\t\t\t\t\t\t\t\t.done(newDefer.resolve)\n\t\t\t\t\t\t\t\t\t\t\t.fail(newDefer.reject);\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tnewDefer[tuple[0] + \"With\"](\n\t\t\t\t\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\t\t\t\t\tfn ? [returned] : arguments\n\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tfns = null;\n\t\t\t\t\t\t}).promise();\n\t\t\t\t\t},\n\t\t\t\t\tthen: function (onFulfilled, onRejected, onProgress) {\n\t\t\t\t\t\tvar maxDepth = 0;\n\t\t\t\t\t\tfunction resolve(depth, deferred, handler, special) {\n\t\t\t\t\t\t\treturn function () {\n\t\t\t\t\t\t\t\tvar that = this,\n\t\t\t\t\t\t\t\t\targs = arguments,\n\t\t\t\t\t\t\t\t\tmightThrow = function () {\n\t\t\t\t\t\t\t\t\t\tvar returned, then;\n\n\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.3\n\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-59\n\t\t\t\t\t\t\t\t\t\t// Ignore double-resolution attempts\n\t\t\t\t\t\t\t\t\t\tif (depth < maxDepth) {\n\t\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\treturned = handler.apply(that, args);\n\n\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.1\n\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-48\n\t\t\t\t\t\t\t\t\t\tif (returned === deferred.promise()) {\n\t\t\t\t\t\t\t\t\t\t\tthrow new TypeError(\"Thenable self-resolution\");\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ sections 2.3.3.1, 3.5\n\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-54\n\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-75\n\t\t\t\t\t\t\t\t\t\t// Retrieve `then` only once\n\t\t\t\t\t\t\t\t\t\tthen = returned &&\n\n\t\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.4\n\t\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-64\n\t\t\t\t\t\t\t\t\t\t\t// Only check objects and functions for thenability\n\t\t\t\t\t\t\t\t\t\t\t(typeof returned === \"object\" ||\n\t\t\t\t\t\t\t\t\t\t\t\ttypeof returned === \"function\") &&\n\t\t\t\t\t\t\t\t\t\t\treturned.then;\n\n\t\t\t\t\t\t\t\t\t\t// Handle a returned thenable\n\t\t\t\t\t\t\t\t\t\tif (isFunction(then)) {\n\n\t\t\t\t\t\t\t\t\t\t\t// Special processors (notify) just wait for resolution\n\t\t\t\t\t\t\t\t\t\t\tif (special) {\n\t\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\t\tresolve(maxDepth, deferred, Identity, special),\n\t\t\t\t\t\t\t\t\t\t\t\t\tresolve(maxDepth, deferred, Thrower, special)\n\t\t\t\t\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t\t\t\t\t// Normal processors (resolve) also hook into progress\n\t\t\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t\t\t// ...and disregard older resolution values\n\t\t\t\t\t\t\t\t\t\t\t\tmaxDepth++;\n\n\t\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\t\tresolve(maxDepth, deferred, Identity, special),\n\t\t\t\t\t\t\t\t\t\t\t\t\tresolve(maxDepth, deferred, Thrower, special),\n\t\t\t\t\t\t\t\t\t\t\t\t\tresolve(maxDepth, deferred, Identity,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tdeferred.notifyWith)\n\t\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t// Handle all other returned values\n\t\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\t\tif (handler !== Identity) {\n\t\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\t\targs = [returned];\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t// Process the value(s)\n\t\t\t\t\t\t\t\t\t\t\t// Default process is resolve\n\t\t\t\t\t\t\t\t\t\t\t(special || deferred.resolveWith)(that, args);\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\n\t\t\t\t\t\t\t\t\t// Only normal processors (resolve) catch and reject exceptions\n\t\t\t\t\t\t\t\t\tprocess = special ?\n\t\t\t\t\t\t\t\t\t\tmightThrow :\n\t\t\t\t\t\t\t\t\t\tfunction () {\n\t\t\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\t\t\tmightThrow();\n\t\t\t\t\t\t\t\t\t\t\t} catch (e) {\n\n\t\t\t\t\t\t\t\t\t\t\t\tif (jQuery.Deferred.exceptionHook) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tjQuery.Deferred.exceptionHook(e,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tprocess.error);\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.4.1\n\t\t\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-61\n\t\t\t\t\t\t\t\t\t\t\t\t// Ignore post-resolution exceptions\n\t\t\t\t\t\t\t\t\t\t\t\tif (depth + 1 >= maxDepth) {\n\n\t\t\t\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\t\t\t\tif (handler !== Thrower) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\targs = [e];\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\t\tdeferred.rejectWith(that, args);\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.1\n\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-57\n\t\t\t\t\t\t\t\t// Re-resolve promises immediately to dodge false rejection from\n\t\t\t\t\t\t\t\t// subsequent errors\n\t\t\t\t\t\t\t\tif (depth) {\n\t\t\t\t\t\t\t\t\tprocess();\n\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t// Call an optional hook to record the error, in case of exception\n\t\t\t\t\t\t\t\t\t// since it's otherwise lost when execution goes async\n\t\t\t\t\t\t\t\t\tif (jQuery.Deferred.getErrorHook) {\n\t\t\t\t\t\t\t\t\t\tprocess.error = jQuery.Deferred.getErrorHook();\n\n\t\t\t\t\t\t\t\t\t\t// The deprecated alias of the above. While the name suggests\n\t\t\t\t\t\t\t\t\t\t// returning the stack, not an error instance, jQuery just passes\n\t\t\t\t\t\t\t\t\t\t// it directly to `console.warn` so both will work; an instance\n\t\t\t\t\t\t\t\t\t\t// just better cooperates with source maps.\n\t\t\t\t\t\t\t\t\t} else if (jQuery.Deferred.getStackHook) {\n\t\t\t\t\t\t\t\t\t\tprocess.error = jQuery.Deferred.getStackHook();\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\twindow.setTimeout(process);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn jQuery.Deferred(function (newDefer) {\n\n\t\t\t\t\t\t\t// progress_handlers.add( ... )\n\t\t\t\t\t\t\ttuples[0][3].add(\n\t\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\t\tisFunction(onProgress) ?\n\t\t\t\t\t\t\t\t\t\tonProgress :\n\t\t\t\t\t\t\t\t\t\tIdentity,\n\t\t\t\t\t\t\t\t\tnewDefer.notifyWith\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t// fulfilled_handlers.add( ... )\n\t\t\t\t\t\t\ttuples[1][3].add(\n\t\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\t\tisFunction(onFulfilled) ?\n\t\t\t\t\t\t\t\t\t\tonFulfilled :\n\t\t\t\t\t\t\t\t\t\tIdentity\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t// rejected_handlers.add( ... )\n\t\t\t\t\t\t\ttuples[2][3].add(\n\t\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\t\tisFunction(onRejected) ?\n\t\t\t\t\t\t\t\t\t\tonRejected :\n\t\t\t\t\t\t\t\t\t\tThrower\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}).promise();\n\t\t\t\t\t},\n\n\t\t\t\t\t// Get a promise for this deferred\n\t\t\t\t\t// If obj is provided, the promise aspect is added to the object\n\t\t\t\t\tpromise: function (obj) {\n\t\t\t\t\t\treturn obj != null ? jQuery.extend(obj, promise) : promise;\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tdeferred = {};\n\n\t\t\t// Add list-specific methods\n\t\t\tjQuery.each(tuples, function (i, tuple) {\n\t\t\t\tvar list = tuple[2],\n\t\t\t\t\tstateString = tuple[5];\n\n\t\t\t\t// promise.progress = list.add\n\t\t\t\t// promise.done = list.add\n\t\t\t\t// promise.fail = list.add\n\t\t\t\tpromise[tuple[1]] = list.add;\n\n\t\t\t\t// Handle state\n\t\t\t\tif (stateString) {\n\t\t\t\t\tlist.add(\n\t\t\t\t\t\tfunction () {\n\n\t\t\t\t\t\t\t// state = \"resolved\" (i.e., fulfilled)\n\t\t\t\t\t\t\t// state = \"rejected\"\n\t\t\t\t\t\t\tstate = stateString;\n\t\t\t\t\t\t},\n\n\t\t\t\t\t\t// rejected_callbacks.disable\n\t\t\t\t\t\t// fulfilled_callbacks.disable\n\t\t\t\t\t\ttuples[3 - i][2].disable,\n\n\t\t\t\t\t\t// rejected_handlers.disable\n\t\t\t\t\t\t// fulfilled_handlers.disable\n\t\t\t\t\t\ttuples[3 - i][3].disable,\n\n\t\t\t\t\t\t// progress_callbacks.lock\n\t\t\t\t\t\ttuples[0][2].lock,\n\n\t\t\t\t\t\t// progress_handlers.lock\n\t\t\t\t\t\ttuples[0][3].lock\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\t// progress_handlers.fire\n\t\t\t\t// fulfilled_handlers.fire\n\t\t\t\t// rejected_handlers.fire\n\t\t\t\tlist.add(tuple[3].fire);\n\n\t\t\t\t// deferred.notify = function() { deferred.notifyWith(...) }\n\t\t\t\t// deferred.resolve = function() { deferred.resolveWith(...) }\n\t\t\t\t// deferred.reject = function() { deferred.rejectWith(...) }\n\t\t\t\tdeferred[tuple[0]] = function () {\n\t\t\t\t\tdeferred[tuple[0] + \"With\"](this === deferred ? undefined : this, arguments);\n\t\t\t\t\treturn this;\n\t\t\t\t};\n\n\t\t\t\t// deferred.notifyWith = list.fireWith\n\t\t\t\t// deferred.resolveWith = list.fireWith\n\t\t\t\t// deferred.rejectWith = list.fireWith\n\t\t\t\tdeferred[tuple[0] + \"With\"] = list.fireWith;\n\t\t\t});\n\n\t\t\t// Make the deferred a promise\n\t\t\tpromise.promise(deferred);\n\n\t\t\t// Call given func if any\n\t\t\tif (func) {\n\t\t\t\tfunc.call(deferred, deferred);\n\t\t\t}\n\n\t\t\t// All done!\n\t\t\treturn deferred;\n\t\t},\n\n\t\t// Deferred helper\n\t\twhen: function (singleValue) {\n\t\t\tvar\n\n\t\t\t\t// count of uncompleted subordinates\n\t\t\t\tremaining = arguments.length,\n\n\t\t\t\t// count of unprocessed arguments\n\t\t\t\ti = remaining,\n\n\t\t\t\t// subordinate fulfillment data\n\t\t\t\tresolveContexts = Array(i),\n\t\t\t\tresolveValues = slice.call(arguments),\n\n\t\t\t\t// the primary Deferred\n\t\t\t\tprimary = jQuery.Deferred(),\n\n\t\t\t\t// subordinate callback factory\n\t\t\t\tupdateFunc = function (i) {\n\t\t\t\t\treturn function (value) {\n\t\t\t\t\t\tresolveContexts[i] = this;\n\t\t\t\t\t\tresolveValues[i] = arguments.length > 1 ? slice.call(arguments) : value;\n\t\t\t\t\t\tif (!(--remaining)) {\n\t\t\t\t\t\t\tprimary.resolveWith(resolveContexts, resolveValues);\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t};\n\n\t\t\t// Single- and empty arguments are adopted like Promise.resolve\n\t\t\tif (remaining <= 1) {\n\t\t\t\tadoptValue(singleValue, primary.done(updateFunc(i)).resolve, primary.reject,\n\t\t\t\t\t!remaining);\n\n\t\t\t\t// Use .then() to unwrap secondary thenables (cf. gh-3000)\n\t\t\t\tif (primary.state() === \"pending\" ||\n\t\t\t\t\tisFunction(resolveValues[i] && resolveValues[i].then)) {\n\n\t\t\t\t\treturn primary.then();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Multiple arguments are aggregated like Promise.all array elements\n\t\t\twhile (i--) {\n\t\t\t\tadoptValue(resolveValues[i], updateFunc(i), primary.reject);\n\t\t\t}\n\n\t\t\treturn primary.promise();\n\t\t}\n\t});\n\n\n\t// These usually indicate a programmer mistake during development,\n\t// warn about them ASAP rather than swallowing them by default.\n\tvar rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;\n\n\t// If `jQuery.Deferred.getErrorHook` is defined, `asyncError` is an error\n\t// captured before the async barrier to get the original error cause\n\t// which may otherwise be hidden.\n\tjQuery.Deferred.exceptionHook = function (error, asyncError) {\n\n\t\t// Support: IE 8 - 9 only\n\t\t// Console exists when dev tools are open, which can happen at any time\n\t\tif (window.console && window.console.warn && error && rerrorNames.test(error.name)) {\n\t\t\twindow.console.warn(\"jQuery.Deferred exception: \" + error.message,\n\t\t\t\terror.stack, asyncError);\n\t\t}\n\t};\n\n\n\n\n\tjQuery.readyException = function (error) {\n\t\twindow.setTimeout(function () {\n\t\t\tthrow error;\n\t\t});\n\t};\n\n\n\n\n\t// The deferred used on DOM ready\n\tvar readyList = jQuery.Deferred();\n\n\tjQuery.fn.ready = function (fn) {\n\n\t\treadyList\n\t\t\t.then(fn)\n\n\t\t\t// Wrap jQuery.readyException in a function so that the lookup\n\t\t\t// happens at the time of error handling instead of callback\n\t\t\t// registration.\n\t\t\t.catch(function (error) {\n\t\t\t\tjQuery.readyException(error);\n\t\t\t});\n\n\t\treturn this;\n\t};\n\n\tjQuery.extend({\n\n\t\t// Is the DOM ready to be used? Set to true once it occurs.\n\t\tisReady: false,\n\n\t\t// A counter to track how many items to wait for before\n\t\t// the ready event fires. See trac-6781\n\t\treadyWait: 1,\n\n\t\t// Handle when the DOM is ready\n\t\tready: function (wait) {\n\n\t\t\t// Abort if there are pending holds or we're already ready\n\t\t\tif (wait === true ? --jQuery.readyWait : jQuery.isReady) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Remember that the DOM is ready\n\t\t\tjQuery.isReady = true;\n\n\t\t\t// If a normal DOM Ready event fired, decrement, and wait if need be\n\t\t\tif (wait !== true && --jQuery.readyWait > 0) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If there are functions bound, to execute\n\t\t\treadyList.resolveWith(document, [jQuery]);\n\t\t}\n\t});\n\n\tjQuery.ready.then = readyList.then;\n\n\t// The ready event handler and self cleanup method\n\tfunction completed() {\n\t\tdocument.removeEventListener(\"DOMContentLoaded\", completed);\n\t\twindow.removeEventListener(\"load\", completed);\n\t\tjQuery.ready();\n\t}\n\n\t// Catch cases where $(document).ready() is called\n\t// after the browser event has already occurred.\n\t// Support: IE <=9 - 10 only\n\t// Older IE sometimes signals \"interactive\" too soon\n\tif (document.readyState === \"complete\" ||\n\t\t(document.readyState !== \"loading\" && !document.documentElement.doScroll)) {\n\n\t\t// Handle it asynchronously to allow scripts the opportunity to delay ready\n\t\twindow.setTimeout(jQuery.ready);\n\n\t} else {\n\n\t\t// Use the handy event callback\n\t\tdocument.addEventListener(\"DOMContentLoaded\", completed);\n\n\t\t// A fallback to window.onload, that will always work\n\t\twindow.addEventListener(\"load\", completed);\n\t}\n\n\n\n\n\t// Multifunctional method to get and set values of a collection\n\t// The value/s can optionally be executed if it's a function\n\tvar access = function (elems, fn, key, value, chainable, emptyGet, raw) {\n\t\tvar i = 0,\n\t\t\tlen = elems.length,\n\t\t\tbulk = key == null;\n\n\t\t// Sets many values\n\t\tif (toType(key) === \"object\") {\n\t\t\tchainable = true;\n\t\t\tfor (i in key) {\n\t\t\t\taccess(elems, fn, i, key[i], true, emptyGet, raw);\n\t\t\t}\n\n\t\t\t// Sets one value\n\t\t} else if (value !== undefined) {\n\t\t\tchainable = true;\n\n\t\t\tif (!isFunction(value)) {\n\t\t\t\traw = true;\n\t\t\t}\n\n\t\t\tif (bulk) {\n\n\t\t\t\t// Bulk operations run against the entire set\n\t\t\t\tif (raw) {\n\t\t\t\t\tfn.call(elems, value);\n\t\t\t\t\tfn = null;\n\n\t\t\t\t\t// ...except when executing function values\n\t\t\t\t} else {\n\t\t\t\t\tbulk = fn;\n\t\t\t\t\tfn = function (elem, _key, value) {\n\t\t\t\t\t\treturn bulk.call(jQuery(elem), value);\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (fn) {\n\t\t\t\tfor (; i < len; i++) {\n\t\t\t\t\tfn(\n\t\t\t\t\t\telems[i], key, raw ?\n\t\t\t\t\t\tvalue :\n\t\t\t\t\t\tvalue.call(elems[i], i, fn(elems[i], key))\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (chainable) {\n\t\t\treturn elems;\n\t\t}\n\n\t\t// Gets\n\t\tif (bulk) {\n\t\t\treturn fn.call(elems);\n\t\t}\n\n\t\treturn len ? fn(elems[0], key) : emptyGet;\n\t};\n\n\n\t// Matches dashed string for camelizing\n\tvar rmsPrefix = /^-ms-/,\n\t\trdashAlpha = /-([a-z])/g;\n\n\t// Used by camelCase as callback to replace()\n\tfunction fcamelCase(_all, letter) {\n\t\treturn letter.toUpperCase();\n\t}\n\n\t// Convert dashed to camelCase; used by the css and data modules\n\t// Support: IE <=9 - 11, Edge 12 - 15\n\t// Microsoft forgot to hump their vendor prefix (trac-9572)\n\tfunction camelCase(string) {\n\t\treturn string.replace(rmsPrefix, \"ms-\").replace(rdashAlpha, fcamelCase);\n\t}\n\tvar acceptData = function (owner) {\n\n\t\t// Accepts only:\n\t\t//  - Node\n\t\t//    - Node.ELEMENT_NODE\n\t\t//    - Node.DOCUMENT_NODE\n\t\t//  - Object\n\t\t//    - Any\n\t\treturn owner.nodeType === 1 || owner.nodeType === 9 || !(+owner.nodeType);\n\t};\n\n\n\n\n\tfunction Data() {\n\t\tthis.expando = jQuery.expando + Data.uid++;\n\t}\n\n\tData.uid = 1;\n\n\tData.prototype = {\n\n\t\tcache: function (owner) {\n\n\t\t\t// Check if the owner object already has a cache\n\t\t\tvar value = owner[this.expando];\n\n\t\t\t// If not, create one\n\t\t\tif (!value) {\n\t\t\t\tvalue = {};\n\n\t\t\t\t// We can accept data for non-element nodes in modern browsers,\n\t\t\t\t// but we should not, see trac-8335.\n\t\t\t\t// Always return an empty object.\n\t\t\t\tif (acceptData(owner)) {\n\n\t\t\t\t\t// If it is a node unlikely to be stringify-ed or looped over\n\t\t\t\t\t// use plain assignment\n\t\t\t\t\tif (owner.nodeType) {\n\t\t\t\t\t\towner[this.expando] = value;\n\n\t\t\t\t\t\t// Otherwise secure it in a non-enumerable property\n\t\t\t\t\t\t// configurable must be true to allow the property to be\n\t\t\t\t\t\t// deleted when data is removed\n\t\t\t\t\t} else {\n\t\t\t\t\t\tObject.defineProperty(owner, this.expando, {\n\t\t\t\t\t\t\tvalue: value,\n\t\t\t\t\t\t\tconfigurable: true\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn value;\n\t\t},\n\t\tset: function (owner, data, value) {\n\t\t\tvar prop,\n\t\t\t\tcache = this.cache(owner);\n\n\t\t\t// Handle: [ owner, key, value ] args\n\t\t\t// Always use camelCase key (gh-2257)\n\t\t\tif (typeof data === \"string\") {\n\t\t\t\tcache[camelCase(data)] = value;\n\n\t\t\t\t// Handle: [ owner, { properties } ] args\n\t\t\t} else {\n\n\t\t\t\t// Copy the properties one-by-one to the cache object\n\t\t\t\tfor (prop in data) {\n\t\t\t\t\tcache[camelCase(prop)] = data[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn cache;\n\t\t},\n\t\tget: function (owner, key) {\n\t\t\treturn key === undefined ?\n\t\t\t\tthis.cache(owner) :\n\n\t\t\t\t// Always use camelCase key (gh-2257)\n\t\t\t\towner[this.expando] && owner[this.expando][camelCase(key)];\n\t\t},\n\t\taccess: function (owner, key, value) {\n\n\t\t\t// In cases where either:\n\t\t\t//\n\t\t\t//   1. No key was specified\n\t\t\t//   2. A string key was specified, but no value provided\n\t\t\t//\n\t\t\t// Take the \"read\" path and allow the get method to determine\n\t\t\t// which value to return, respectively either:\n\t\t\t//\n\t\t\t//   1. The entire cache object\n\t\t\t//   2. The data stored at the key\n\t\t\t//\n\t\t\tif (key === undefined ||\n\t\t\t\t((key && typeof key === \"string\") && value === undefined)) {\n\n\t\t\t\treturn this.get(owner, key);\n\t\t\t}\n\n\t\t\t// When the key is not a string, or both a key and value\n\t\t\t// are specified, set or extend (existing objects) with either:\n\t\t\t//\n\t\t\t//   1. An object of properties\n\t\t\t//   2. A key and value\n\t\t\t//\n\t\t\tthis.set(owner, key, value);\n\n\t\t\t// Since the \"set\" path can have two possible entry points\n\t\t\t// return the expected data based on which path was taken[*]\n\t\t\treturn value !== undefined ? value : key;\n\t\t},\n\t\tremove: function (owner, key) {\n\t\t\tvar i,\n\t\t\t\tcache = owner[this.expando];\n\n\t\t\tif (cache === undefined) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (key !== undefined) {\n\n\t\t\t\t// Support array or space separated string of keys\n\t\t\t\tif (Array.isArray(key)) {\n\n\t\t\t\t\t// If key is an array of keys...\n\t\t\t\t\t// We always set camelCase keys, so remove that.\n\t\t\t\t\tkey = key.map(camelCase);\n\t\t\t\t} else {\n\t\t\t\t\tkey = camelCase(key);\n\n\t\t\t\t\t// If a key with the spaces exists, use it.\n\t\t\t\t\t// Otherwise, create an array by matching non-whitespace\n\t\t\t\t\tkey = key in cache ?\n\t\t\t\t\t\t[key] :\n\t\t\t\t\t\t(key.match(rnothtmlwhite) || []);\n\t\t\t\t}\n\n\t\t\t\ti = key.length;\n\n\t\t\t\twhile (i--) {\n\t\t\t\t\tdelete cache[key[i]];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove the expando if there's no more data\n\t\t\tif (key === undefined || jQuery.isEmptyObject(cache)) {\n\n\t\t\t\t// Support: Chrome <=35 - 45\n\t\t\t\t// Webkit & Blink performance suffers when deleting properties\n\t\t\t\t// from DOM nodes, so set to undefined instead\n\t\t\t\t// https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted)\n\t\t\t\tif (owner.nodeType) {\n\t\t\t\t\towner[this.expando] = undefined;\n\t\t\t\t} else {\n\t\t\t\t\tdelete owner[this.expando];\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\thasData: function (owner) {\n\t\t\tvar cache = owner[this.expando];\n\t\t\treturn cache !== undefined && !jQuery.isEmptyObject(cache);\n\t\t}\n\t};\n\tvar dataPriv = new Data();\n\n\tvar dataUser = new Data();\n\n\n\n\t//\tImplementation Summary\n\t//\n\t//\t1. Enforce API surface and semantic compatibility with 1.9.x branch\n\t//\t2. Improve the module's maintainability by reducing the storage\n\t//\t\tpaths to a single mechanism.\n\t//\t3. Use the same single mechanism to support \"private\" and \"user\" data.\n\t//\t4. _Never_ expose \"private\" data to user code (TODO: Drop _data, _removeData)\n\t//\t5. Avoid exposing implementation details on user objects (eg. expando properties)\n\t//\t6. Provide a clear path for implementation upgrade to WeakMap in 2014\n\n\tvar rbrace = /^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,\n\t\trmultiDash = /[A-Z]/g;\n\n\tfunction getData(data) {\n\t\tif (data === \"true\") {\n\t\t\treturn true;\n\t\t}\n\n\t\tif (data === \"false\") {\n\t\t\treturn false;\n\t\t}\n\n\t\tif (data === \"null\") {\n\t\t\treturn null;\n\t\t}\n\n\t\t// Only convert to a number if it doesn't change the string\n\t\tif (data === +data + \"\") {\n\t\t\treturn +data;\n\t\t}\n\n\t\tif (rbrace.test(data)) {\n\t\t\treturn JSON.parse(data);\n\t\t}\n\n\t\treturn data;\n\t}\n\n\tfunction dataAttr(elem, key, data) {\n\t\tvar name;\n\n\t\t// If nothing was found internally, try to fetch any\n\t\t// data from the HTML5 data-* attribute\n\t\tif (data === undefined && elem.nodeType === 1) {\n\t\t\tname = \"data-\" + key.replace(rmultiDash, \"-$&\").toLowerCase();\n\t\t\tdata = elem.getAttribute(name);\n\n\t\t\tif (typeof data === \"string\") {\n\t\t\t\ttry {\n\t\t\t\t\tdata = getData(data);\n\t\t\t\t} catch (e) { }\n\n\t\t\t\t// Make sure we set the data so it isn't changed later\n\t\t\t\tdataUser.set(elem, key, data);\n\t\t\t} else {\n\t\t\t\tdata = undefined;\n\t\t\t}\n\t\t}\n\t\treturn data;\n\t}\n\n\tjQuery.extend({\n\t\thasData: function (elem) {\n\t\t\treturn dataUser.hasData(elem) || dataPriv.hasData(elem);\n\t\t},\n\n\t\tdata: function (elem, name, data) {\n\t\t\treturn dataUser.access(elem, name, data);\n\t\t},\n\n\t\tremoveData: function (elem, name) {\n\t\t\tdataUser.remove(elem, name);\n\t\t},\n\n\t\t// TODO: Now that all calls to _data and _removeData have been replaced\n\t\t// with direct calls to dataPriv methods, these can be deprecated.\n\t\t_data: function (elem, name, data) {\n\t\t\treturn dataPriv.access(elem, name, data);\n\t\t},\n\n\t\t_removeData: function (elem, name) {\n\t\t\tdataPriv.remove(elem, name);\n\t\t}\n\t});\n\n\tjQuery.fn.extend({\n\t\tdata: function (key, value) {\n\t\t\tvar i, name, data,\n\t\t\t\telem = this[0],\n\t\t\t\tattrs = elem && elem.attributes;\n\n\t\t\t// Gets all values\n\t\t\tif (key === undefined) {\n\t\t\t\tif (this.length) {\n\t\t\t\t\tdata = dataUser.get(elem);\n\n\t\t\t\t\tif (elem.nodeType === 1 && !dataPriv.get(elem, \"hasDataAttrs\")) {\n\t\t\t\t\t\ti = attrs.length;\n\t\t\t\t\t\twhile (i--) {\n\n\t\t\t\t\t\t\t// Support: IE 11 only\n\t\t\t\t\t\t\t// The attrs elements can be null (trac-14894)\n\t\t\t\t\t\t\tif (attrs[i]) {\n\t\t\t\t\t\t\t\tname = attrs[i].name;\n\t\t\t\t\t\t\t\tif (name.indexOf(\"data-\") === 0) {\n\t\t\t\t\t\t\t\t\tname = camelCase(name.slice(5));\n\t\t\t\t\t\t\t\t\tdataAttr(elem, name, data[name]);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdataPriv.set(elem, \"hasDataAttrs\", true);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn data;\n\t\t\t}\n\n\t\t\t// Sets multiple values\n\t\t\tif (typeof key === \"object\") {\n\t\t\t\treturn this.each(function () {\n\t\t\t\t\tdataUser.set(this, key);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn access(this, function (value) {\n\t\t\t\tvar data;\n\n\t\t\t\t// The calling jQuery object (element matches) is not empty\n\t\t\t\t// (and therefore has an element appears at this[ 0 ]) and the\n\t\t\t\t// `value` parameter was not undefined. An empty jQuery object\n\t\t\t\t// will result in `undefined` for elem = this[ 0 ] which will\n\t\t\t\t// throw an exception if an attempt to read a data cache is made.\n\t\t\t\tif (elem && value === undefined) {\n\n\t\t\t\t\t// Attempt to get data from the cache\n\t\t\t\t\t// The key will always be camelCased in Data\n\t\t\t\t\tdata = dataUser.get(elem, key);\n\t\t\t\t\tif (data !== undefined) {\n\t\t\t\t\t\treturn data;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Attempt to \"discover\" the data in\n\t\t\t\t\t// HTML5 custom data-* attrs\n\t\t\t\t\tdata = dataAttr(elem, key);\n\t\t\t\t\tif (data !== undefined) {\n\t\t\t\t\t\treturn data;\n\t\t\t\t\t}\n\n\t\t\t\t\t// We tried really hard, but the data doesn't exist.\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Set the data...\n\t\t\t\tthis.each(function () {\n\n\t\t\t\t\t// We always store the camelCased key\n\t\t\t\t\tdataUser.set(this, key, value);\n\t\t\t\t});\n\t\t\t}, null, value, arguments.length > 1, null, true);\n\t\t},\n\n\t\tremoveData: function (key) {\n\t\t\treturn this.each(function () {\n\t\t\t\tdataUser.remove(this, key);\n\t\t\t});\n\t\t}\n\t});\n\n\n\tjQuery.extend({\n\t\tqueue: function (elem, type, data) {\n\t\t\tvar queue;\n\n\t\t\tif (elem) {\n\t\t\t\ttype = (type || \"fx\") + \"queue\";\n\t\t\t\tqueue = dataPriv.get(elem, type);\n\n\t\t\t\t// Speed up dequeue by getting out quickly if this is just a lookup\n\t\t\t\tif (data) {\n\t\t\t\t\tif (!queue || Array.isArray(data)) {\n\t\t\t\t\t\tqueue = dataPriv.access(elem, type, jQuery.makeArray(data));\n\t\t\t\t\t} else {\n\t\t\t\t\t\tqueue.push(data);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn queue || [];\n\t\t\t}\n\t\t},\n\n\t\tdequeue: function (elem, type) {\n\t\t\ttype = type || \"fx\";\n\n\t\t\tvar queue = jQuery.queue(elem, type),\n\t\t\t\tstartLength = queue.length,\n\t\t\t\tfn = queue.shift(),\n\t\t\t\thooks = jQuery._queueHooks(elem, type),\n\t\t\t\tnext = function () {\n\t\t\t\t\tjQuery.dequeue(elem, type);\n\t\t\t\t};\n\n\t\t\t// If the fx queue is dequeued, always remove the progress sentinel\n\t\t\tif (fn === \"inprogress\") {\n\t\t\t\tfn = queue.shift();\n\t\t\t\tstartLength--;\n\t\t\t}\n\n\t\t\tif (fn) {\n\n\t\t\t\t// Add a progress sentinel to prevent the fx queue from being\n\t\t\t\t// automatically dequeued\n\t\t\t\tif (type === \"fx\") {\n\t\t\t\t\tqueue.unshift(\"inprogress\");\n\t\t\t\t}\n\n\t\t\t\t// Clear up the last queue stop function\n\t\t\t\tdelete hooks.stop;\n\t\t\t\tfn.call(elem, next, hooks);\n\t\t\t}\n\n\t\t\tif (!startLength && hooks) {\n\t\t\t\thooks.empty.fire();\n\t\t\t}\n\t\t},\n\n\t\t// Not public - generate a queueHooks object, or return the current one\n\t\t_queueHooks: function (elem, type) {\n\t\t\tvar key = type + \"queueHooks\";\n\t\t\treturn dataPriv.get(elem, key) || dataPriv.access(elem, key, {\n\t\t\t\tempty: jQuery.Callbacks(\"once memory\").add(function () {\n\t\t\t\t\tdataPriv.remove(elem, [type + \"queue\", key]);\n\t\t\t\t})\n\t\t\t});\n\t\t}\n\t});\n\n\tjQuery.fn.extend({\n\t\tqueue: function (type, data) {\n\t\t\tvar setter = 2;\n\n\t\t\tif (typeof type !== \"string\") {\n\t\t\t\tdata = type;\n\t\t\t\ttype = \"fx\";\n\t\t\t\tsetter--;\n\t\t\t}\n\n\t\t\tif (arguments.length < setter) {\n\t\t\t\treturn jQuery.queue(this[0], type);\n\t\t\t}\n\n\t\t\treturn data === undefined ?\n\t\t\t\tthis :\n\t\t\t\tthis.each(function () {\n\t\t\t\t\tvar queue = jQuery.queue(this, type, data);\n\n\t\t\t\t\t// Ensure a hooks for this queue\n\t\t\t\t\tjQuery._queueHooks(this, type);\n\n\t\t\t\t\tif (type === \"fx\" && queue[0] !== \"inprogress\") {\n\t\t\t\t\t\tjQuery.dequeue(this, type);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t},\n\t\tdequeue: function (type) {\n\t\t\treturn this.each(function () {\n\t\t\t\tjQuery.dequeue(this, type);\n\t\t\t});\n\t\t},\n\t\tclearQueue: function (type) {\n\t\t\treturn this.queue(type || \"fx\", []);\n\t\t},\n\n\t\t// Get a promise resolved when queues of a certain type\n\t\t// are emptied (fx is the type by default)\n\t\tpromise: function (type, obj) {\n\t\t\tvar tmp,\n\t\t\t\tcount = 1,\n\t\t\t\tdefer = jQuery.Deferred(),\n\t\t\t\telements = this,\n\t\t\t\ti = this.length,\n\t\t\t\tresolve = function () {\n\t\t\t\t\tif (!(--count)) {\n\t\t\t\t\t\tdefer.resolveWith(elements, [elements]);\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\tif (typeof type !== \"string\") {\n\t\t\t\tobj = type;\n\t\t\t\ttype = undefined;\n\t\t\t}\n\t\t\ttype = type || \"fx\";\n\n\t\t\twhile (i--) {\n\t\t\t\ttmp = dataPriv.get(elements[i], type + \"queueHooks\");\n\t\t\t\tif (tmp && tmp.empty) {\n\t\t\t\t\tcount++;\n\t\t\t\t\ttmp.empty.add(resolve);\n\t\t\t\t}\n\t\t\t}\n\t\t\tresolve();\n\t\t\treturn defer.promise(obj);\n\t\t}\n\t});\n\tvar pnum = (/[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/).source;\n\n\tvar rcssNum = new RegExp(\"^(?:([+-])=|)(\" + pnum + \")([a-z%]*)$\", \"i\");\n\n\n\tvar cssExpand = [\"Top\", \"Right\", \"Bottom\", \"Left\"];\n\n\tvar documentElement = document.documentElement;\n\n\n\n\tvar isAttached = function (elem) {\n\t\treturn jQuery.contains(elem.ownerDocument, elem);\n\t},\n\t\tcomposed = { composed: true };\n\n\t// Support: IE 9 - 11+, Edge 12 - 18+, iOS 10.0 - 10.2 only\n\t// Check attachment across shadow DOM boundaries when possible (gh-3504)\n\t// Support: iOS 10.0-10.2 only\n\t// Early iOS 10 versions support `attachShadow` but not `getRootNode`,\n\t// leading to errors. We need to check for `getRootNode`.\n\tif (documentElement.getRootNode) {\n\t\tisAttached = function (elem) {\n\t\t\treturn jQuery.contains(elem.ownerDocument, elem) ||\n\t\t\t\telem.getRootNode(composed) === elem.ownerDocument;\n\t\t};\n\t}\n\tvar isHiddenWithinTree = function (elem, el) {\n\n\t\t// isHiddenWithinTree might be called from jQuery#filter function;\n\t\t// in that case, element will be second argument\n\t\telem = el || elem;\n\n\t\t// Inline style trumps all\n\t\treturn elem.style.display === \"none\" ||\n\t\t\telem.style.display === \"\" &&\n\n\t\t\t// Otherwise, check computed style\n\t\t\t// Support: Firefox <=43 - 45\n\t\t\t// Disconnected elements can have computed display: none, so first confirm that elem is\n\t\t\t// in the document.\n\t\t\tisAttached(elem) &&\n\n\t\t\tjQuery.css(elem, \"display\") === \"none\";\n\t};\n\n\n\n\tfunction adjustCSS(elem, prop, valueParts, tween) {\n\t\tvar adjusted, scale,\n\t\t\tmaxIterations = 20,\n\t\t\tcurrentValue = tween ?\n\t\t\t\tfunction () {\n\t\t\t\t\treturn tween.cur();\n\t\t\t\t} :\n\t\t\t\tfunction () {\n\t\t\t\t\treturn jQuery.css(elem, prop, \"\");\n\t\t\t\t},\n\t\t\tinitial = currentValue(),\n\t\t\tunit = valueParts && valueParts[3] || (jQuery.cssNumber[prop] ? \"\" : \"px\"),\n\n\t\t\t// Starting value computation is required for potential unit mismatches\n\t\t\tinitialInUnit = elem.nodeType &&\n\t\t\t\t(jQuery.cssNumber[prop] || unit !== \"px\" && +initial) &&\n\t\t\t\trcssNum.exec(jQuery.css(elem, prop));\n\n\t\tif (initialInUnit && initialInUnit[3] !== unit) {\n\n\t\t\t// Support: Firefox <=54\n\t\t\t// Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144)\n\t\t\tinitial = initial / 2;\n\n\t\t\t// Trust units reported by jQuery.css\n\t\t\tunit = unit || initialInUnit[3];\n\n\t\t\t// Iteratively approximate from a nonzero starting point\n\t\t\tinitialInUnit = +initial || 1;\n\n\t\t\twhile (maxIterations--) {\n\n\t\t\t\t// Evaluate and update our best guess (doubling guesses that zero out).\n\t\t\t\t// Finish if the scale equals or crosses 1 (making the old*new product non-positive).\n\t\t\t\tjQuery.style(elem, prop, initialInUnit + unit);\n\t\t\t\tif ((1 - scale) * (1 - (scale = currentValue() / initial || 0.5)) <= 0) {\n\t\t\t\t\tmaxIterations = 0;\n\t\t\t\t}\n\t\t\t\tinitialInUnit = initialInUnit / scale;\n\n\t\t\t}\n\n\t\t\tinitialInUnit = initialInUnit * 2;\n\t\t\tjQuery.style(elem, prop, initialInUnit + unit);\n\n\t\t\t// Make sure we update the tween properties later on\n\t\t\tvalueParts = valueParts || [];\n\t\t}\n\n\t\tif (valueParts) {\n\t\t\tinitialInUnit = +initialInUnit || +initial || 0;\n\n\t\t\t// Apply relative offset (+=/-=) if specified\n\t\t\tadjusted = valueParts[1] ?\n\t\t\t\tinitialInUnit + (valueParts[1] + 1) * valueParts[2] :\n\t\t\t\t+valueParts[2];\n\t\t\tif (tween) {\n\t\t\t\ttween.unit = unit;\n\t\t\t\ttween.start = initialInUnit;\n\t\t\t\ttween.end = adjusted;\n\t\t\t}\n\t\t}\n\t\treturn adjusted;\n\t}\n\n\n\tvar defaultDisplayMap = {};\n\n\tfunction getDefaultDisplay(elem) {\n\t\tvar temp,\n\t\t\tdoc = elem.ownerDocument,\n\t\t\tnodeName = elem.nodeName,\n\t\t\tdisplay = defaultDisplayMap[nodeName];\n\n\t\tif (display) {\n\t\t\treturn display;\n\t\t}\n\n\t\ttemp = doc.body.appendChild(doc.createElement(nodeName));\n\t\tdisplay = jQuery.css(temp, \"display\");\n\n\t\ttemp.parentNode.removeChild(temp);\n\n\t\tif (display === \"none\") {\n\t\t\tdisplay = \"block\";\n\t\t}\n\t\tdefaultDisplayMap[nodeName] = display;\n\n\t\treturn display;\n\t}\n\n\tfunction showHide(elements, show) {\n\t\tvar display, elem,\n\t\t\tvalues = [],\n\t\t\tindex = 0,\n\t\t\tlength = elements.length;\n\n\t\t// Determine new display value for elements that need to change\n\t\tfor (; index < length; index++) {\n\t\t\telem = elements[index];\n\t\t\tif (!elem.style) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tdisplay = elem.style.display;\n\t\t\tif (show) {\n\n\t\t\t\t// Since we force visibility upon cascade-hidden elements, an immediate (and slow)\n\t\t\t\t// check is required in this first loop unless we have a nonempty display value (either\n\t\t\t\t// inline or about-to-be-restored)\n\t\t\t\tif (display === \"none\") {\n\t\t\t\t\tvalues[index] = dataPriv.get(elem, \"display\") || null;\n\t\t\t\t\tif (!values[index]) {\n\t\t\t\t\t\telem.style.display = \"\";\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (elem.style.display === \"\" && isHiddenWithinTree(elem)) {\n\t\t\t\t\tvalues[index] = getDefaultDisplay(elem);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (display !== \"none\") {\n\t\t\t\t\tvalues[index] = \"none\";\n\n\t\t\t\t\t// Remember what we're overwriting\n\t\t\t\t\tdataPriv.set(elem, \"display\", display);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Set the display of the elements in a second loop to avoid constant reflow\n\t\tfor (index = 0; index < length; index++) {\n\t\t\tif (values[index] != null) {\n\t\t\t\telements[index].style.display = values[index];\n\t\t\t}\n\t\t}\n\n\t\treturn elements;\n\t}\n\n\tjQuery.fn.extend({\n\t\tshow: function () {\n\t\t\treturn showHide(this, true);\n\t\t},\n\t\thide: function () {\n\t\t\treturn showHide(this);\n\t\t},\n\t\ttoggle: function (state) {\n\t\t\tif (typeof state === \"boolean\") {\n\t\t\t\treturn state ? this.show() : this.hide();\n\t\t\t}\n\n\t\t\treturn this.each(function () {\n\t\t\t\tif (isHiddenWithinTree(this)) {\n\t\t\t\t\tjQuery(this).show();\n\t\t\t\t} else {\n\t\t\t\t\tjQuery(this).hide();\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t});\n\tvar rcheckableType = (/^(?:checkbox|radio)$/i);\n\n\tvar rtagName = (/<([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]*)/i);\n\n\tvar rscriptType = (/^$|^module$|\\/(?:java|ecma)script/i);\n\n\n\n\t(function () {\n\t\tvar fragment = document.createDocumentFragment(),\n\t\t\tdiv = fragment.appendChild(document.createElement(\"div\")),\n\t\t\tinput = document.createElement(\"input\");\n\n\t\t// Support: Android 4.0 - 4.3 only\n\t\t// Check state lost if the name is set (trac-11217)\n\t\t// Support: Windows Web Apps (WWA)\n\t\t// `name` and `type` must use .setAttribute for WWA (trac-14901)\n\t\tinput.setAttribute(\"type\", \"radio\");\n\t\tinput.setAttribute(\"checked\", \"checked\");\n\t\tinput.setAttribute(\"name\", \"t\");\n\n\t\tdiv.appendChild(input);\n\n\t\t// Support: Android <=4.1 only\n\t\t// Older WebKit doesn't clone checked state correctly in fragments\n\t\tsupport.checkClone = div.cloneNode(true).cloneNode(true).lastChild.checked;\n\n\t\t// Support: IE <=11 only\n\t\t// Make sure textarea (and checkbox) defaultValue is properly cloned\n\t\tdiv.innerHTML = \"<textarea>x</textarea>\";\n\t\tsupport.noCloneChecked = !!div.cloneNode(true).lastChild.defaultValue;\n\n\t\t// Support: IE <=9 only\n\t\t// IE <=9 replaces <option> tags with their contents when inserted outside of\n\t\t// the select element.\n\t\tdiv.innerHTML = \"<option></option>\";\n\t\tsupport.option = !!div.lastChild;\n\t})();\n\n\n\t// We have to close these tags to support XHTML (trac-13200)\n\tvar wrapMap = {\n\n\t\t// XHTML parsers do not magically insert elements in the\n\t\t// same way that tag soup parsers do. So we cannot shorten\n\t\t// this by omitting <tbody> or other required elements.\n\t\tthead: [1, \"<table>\", \"</table>\"],\n\t\tcol: [2, \"<table><colgroup>\", \"</colgroup></table>\"],\n\t\ttr: [2, \"<table><tbody>\", \"</tbody></table>\"],\n\t\ttd: [3, \"<table><tbody><tr>\", \"</tr></tbody></table>\"],\n\n\t\t_default: [0, \"\", \"\"]\n\t};\n\n\twrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;\n\twrapMap.th = wrapMap.td;\n\n\t// Support: IE <=9 only\n\tif (!support.option) {\n\t\twrapMap.optgroup = wrapMap.option = [1, \"<select multiple='multiple'>\", \"</select>\"];\n\t}\n\n\n\tfunction getAll(context, tag) {\n\n\t\t// Support: IE <=9 - 11 only\n\t\t// Use typeof to avoid zero-argument method invocation on host objects (trac-15151)\n\t\tvar ret;\n\n\t\tif (typeof context.getElementsByTagName !== \"undefined\") {\n\t\t\tret = context.getElementsByTagName(tag || \"*\");\n\n\t\t} else if (typeof context.querySelectorAll !== \"undefined\") {\n\t\t\tret = context.querySelectorAll(tag || \"*\");\n\n\t\t} else {\n\t\t\tret = [];\n\t\t}\n\n\t\tif (tag === undefined || tag && nodeName(context, tag)) {\n\t\t\treturn jQuery.merge([context], ret);\n\t\t}\n\n\t\treturn ret;\n\t}\n\n\n\t// Mark scripts as having already been evaluated\n\tfunction setGlobalEval(elems, refElements) {\n\t\tvar i = 0,\n\t\t\tl = elems.length;\n\n\t\tfor (; i < l; i++) {\n\t\t\tdataPriv.set(\n\t\t\t\telems[i],\n\t\t\t\t\"globalEval\",\n\t\t\t\t!refElements || dataPriv.get(refElements[i], \"globalEval\")\n\t\t\t);\n\t\t}\n\t}\n\n\n\tvar rhtml = /<|&#?\\w+;/;\n\n\tfunction buildFragment(elems, context, scripts, selection, ignored) {\n\t\tvar elem, tmp, tag, wrap, attached, j,\n\t\t\tfragment = context.createDocumentFragment(),\n\t\t\tnodes = [],\n\t\t\ti = 0,\n\t\t\tl = elems.length;\n\n\t\tfor (; i < l; i++) {\n\t\t\telem = elems[i];\n\n\t\t\tif (elem || elem === 0) {\n\n\t\t\t\t// Add nodes directly\n\t\t\t\tif (toType(elem) === \"object\") {\n\n\t\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\t\tjQuery.merge(nodes, elem.nodeType ? [elem] : elem);\n\n\t\t\t\t\t// Convert non-html into a text node\n\t\t\t\t} else if (!rhtml.test(elem)) {\n\t\t\t\t\tnodes.push(context.createTextNode(elem));\n\n\t\t\t\t\t// Convert html into DOM nodes\n\t\t\t\t} else {\n\t\t\t\t\ttmp = tmp || fragment.appendChild(context.createElement(\"div\"));\n\n\t\t\t\t\t// Deserialize a standard representation\n\t\t\t\t\ttag = (rtagName.exec(elem) || [\"\", \"\"])[1].toLowerCase();\n\t\t\t\t\twrap = wrapMap[tag] || wrapMap._default;\n\t\t\t\t\ttmp.innerHTML = wrap[1] + jQuery.htmlPrefilter(elem) + wrap[2];\n\n\t\t\t\t\t// Descend through wrappers to the right content\n\t\t\t\t\tj = wrap[0];\n\t\t\t\t\twhile (j--) {\n\t\t\t\t\t\ttmp = tmp.lastChild;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\t\tjQuery.merge(nodes, tmp.childNodes);\n\n\t\t\t\t\t// Remember the top-level container\n\t\t\t\t\ttmp = fragment.firstChild;\n\n\t\t\t\t\t// Ensure the created nodes are orphaned (trac-12392)\n\t\t\t\t\ttmp.textContent = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Remove wrapper from fragment\n\t\tfragment.textContent = \"\";\n\n\t\ti = 0;\n\t\twhile ((elem = nodes[i++])) {\n\n\t\t\t// Skip elements already in the context collection (trac-4087)\n\t\t\tif (selection && jQuery.inArray(elem, selection) > -1) {\n\t\t\t\tif (ignored) {\n\t\t\t\t\tignored.push(elem);\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tattached = isAttached(elem);\n\n\t\t\t// Append to fragment\n\t\t\ttmp = getAll(fragment.appendChild(elem), \"script\");\n\n\t\t\t// Preserve script evaluation history\n\t\t\tif (attached) {\n\t\t\t\tsetGlobalEval(tmp);\n\t\t\t}\n\n\t\t\t// Capture executables\n\t\t\tif (scripts) {\n\t\t\t\tj = 0;\n\t\t\t\twhile ((elem = tmp[j++])) {\n\t\t\t\t\tif (rscriptType.test(elem.type || \"\")) {\n\t\t\t\t\t\tscripts.push(elem);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn fragment;\n\t}\n\n\n\tvar rtypenamespace = /^([^.]*)(?:\\.(.+)|)/;\n\n\tfunction returnTrue() {\n\t\treturn true;\n\t}\n\n\tfunction returnFalse() {\n\t\treturn false;\n\t}\n\n\tfunction on(elem, types, selector, data, fn, one) {\n\t\tvar origFn, type;\n\n\t\t// Types can be a map of types/handlers\n\t\tif (typeof types === \"object\") {\n\n\t\t\t// ( types-Object, selector, data )\n\t\t\tif (typeof selector !== \"string\") {\n\n\t\t\t\t// ( types-Object, data )\n\t\t\t\tdata = data || selector;\n\t\t\t\tselector = undefined;\n\t\t\t}\n\t\t\tfor (type in types) {\n\t\t\t\ton(elem, type, selector, data, types[type], one);\n\t\t\t}\n\t\t\treturn elem;\n\t\t}\n\n\t\tif (data == null && fn == null) {\n\n\t\t\t// ( types, fn )\n\t\t\tfn = selector;\n\t\t\tdata = selector = undefined;\n\t\t} else if (fn == null) {\n\t\t\tif (typeof selector === \"string\") {\n\n\t\t\t\t// ( types, selector, fn )\n\t\t\t\tfn = data;\n\t\t\t\tdata = undefined;\n\t\t\t} else {\n\n\t\t\t\t// ( types, data, fn )\n\t\t\t\tfn = data;\n\t\t\t\tdata = selector;\n\t\t\t\tselector = undefined;\n\t\t\t}\n\t\t}\n\t\tif (fn === false) {\n\t\t\tfn = returnFalse;\n\t\t} else if (!fn) {\n\t\t\treturn elem;\n\t\t}\n\n\t\tif (one === 1) {\n\t\t\torigFn = fn;\n\t\t\tfn = function (event) {\n\n\t\t\t\t// Can use an empty set, since event contains the info\n\t\t\t\tjQuery().off(event);\n\t\t\t\treturn origFn.apply(this, arguments);\n\t\t\t};\n\n\t\t\t// Use same guid so caller can remove using origFn\n\t\t\tfn.guid = origFn.guid || (origFn.guid = jQuery.guid++);\n\t\t}\n\t\treturn elem.each(function () {\n\t\t\tjQuery.event.add(this, types, fn, data, selector);\n\t\t});\n\t}\n\n\t/*\n\t * Helper functions for managing events -- not part of the public interface.\n\t * Props to Dean Edwards' addEvent library for many of the ideas.\n\t */\n\tjQuery.event = {\n\n\t\tglobal: {},\n\n\t\tadd: function (elem, types, handler, data, selector) {\n\n\t\t\tvar handleObjIn, eventHandle, tmp,\n\t\t\t\tevents, t, handleObj,\n\t\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\t\telemData = dataPriv.get(elem);\n\n\t\t\t// Only attach events to objects that accept data\n\t\t\tif (!acceptData(elem)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Caller can pass in an object of custom data in lieu of the handler\n\t\t\tif (handler.handler) {\n\t\t\t\thandleObjIn = handler;\n\t\t\t\thandler = handleObjIn.handler;\n\t\t\t\tselector = handleObjIn.selector;\n\t\t\t}\n\n\t\t\t// Ensure that invalid selectors throw exceptions at attach time\n\t\t\t// Evaluate against documentElement in case elem is a non-element node (e.g., document)\n\t\t\tif (selector) {\n\t\t\t\tjQuery.find.matchesSelector(documentElement, selector);\n\t\t\t}\n\n\t\t\t// Make sure that the handler has a unique ID, used to find/remove it later\n\t\t\tif (!handler.guid) {\n\t\t\t\thandler.guid = jQuery.guid++;\n\t\t\t}\n\n\t\t\t// Init the element's event structure and main handler, if this is the first\n\t\t\tif (!(events = elemData.events)) {\n\t\t\t\tevents = elemData.events = Object.create(null);\n\t\t\t}\n\t\t\tif (!(eventHandle = elemData.handle)) {\n\t\t\t\teventHandle = elemData.handle = function (e) {\n\n\t\t\t\t\t// Discard the second event of a jQuery.event.trigger() and\n\t\t\t\t\t// when an event is called after a page has unloaded\n\t\t\t\t\treturn typeof jQuery !== \"undefined\" && jQuery.event.triggered !== e.type ?\n\t\t\t\t\t\tjQuery.event.dispatch.apply(elem, arguments) : undefined;\n\t\t\t\t};\n\t\t\t}\n\n\t\t\t// Handle multiple events separated by a space\n\t\t\ttypes = (types || \"\").match(rnothtmlwhite) || [\"\"];\n\t\t\tt = types.length;\n\t\t\twhile (t--) {\n\t\t\t\ttmp = rtypenamespace.exec(types[t]) || [];\n\t\t\t\ttype = origType = tmp[1];\n\t\t\t\tnamespaces = (tmp[2] || \"\").split(\".\").sort();\n\n\t\t\t\t// There *must* be a type, no attaching namespace-only handlers\n\t\t\t\tif (!type) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// If event changes its type, use the special event handlers for the changed type\n\t\t\t\tspecial = jQuery.event.special[type] || {};\n\n\t\t\t\t// If selector defined, determine special event api type, otherwise given type\n\t\t\t\ttype = (selector ? special.delegateType : special.bindType) || type;\n\n\t\t\t\t// Update special based on newly reset type\n\t\t\t\tspecial = jQuery.event.special[type] || {};\n\n\t\t\t\t// handleObj is passed to all event handlers\n\t\t\t\thandleObj = jQuery.extend({\n\t\t\t\t\ttype: type,\n\t\t\t\t\torigType: origType,\n\t\t\t\t\tdata: data,\n\t\t\t\t\thandler: handler,\n\t\t\t\t\tguid: handler.guid,\n\t\t\t\t\tselector: selector,\n\t\t\t\t\tneedsContext: selector && jQuery.expr.match.needsContext.test(selector),\n\t\t\t\t\tnamespace: namespaces.join(\".\")\n\t\t\t\t}, handleObjIn);\n\n\t\t\t\t// Init the event handler queue if we're the first\n\t\t\t\tif (!(handlers = events[type])) {\n\t\t\t\t\thandlers = events[type] = [];\n\t\t\t\t\thandlers.delegateCount = 0;\n\n\t\t\t\t\t// Only use addEventListener if the special events handler returns false\n\t\t\t\t\tif (!special.setup ||\n\t\t\t\t\t\tspecial.setup.call(elem, data, namespaces, eventHandle) === false) {\n\n\t\t\t\t\t\tif (elem.addEventListener) {\n\t\t\t\t\t\t\telem.addEventListener(type, eventHandle);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (special.add) {\n\t\t\t\t\tspecial.add.call(elem, handleObj);\n\n\t\t\t\t\tif (!handleObj.handler.guid) {\n\t\t\t\t\t\thandleObj.handler.guid = handler.guid;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Add to the element's handler list, delegates in front\n\t\t\t\tif (selector) {\n\t\t\t\t\thandlers.splice(handlers.delegateCount++, 0, handleObj);\n\t\t\t\t} else {\n\t\t\t\t\thandlers.push(handleObj);\n\t\t\t\t}\n\n\t\t\t\t// Keep track of which events have ever been used, for event optimization\n\t\t\t\tjQuery.event.global[type] = true;\n\t\t\t}\n\n\t\t},\n\n\t\t// Detach an event or set of events from an element\n\t\tremove: function (elem, types, handler, selector, mappedTypes) {\n\n\t\t\tvar j, origCount, tmp,\n\t\t\t\tevents, t, handleObj,\n\t\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\t\telemData = dataPriv.hasData(elem) && dataPriv.get(elem);\n\n\t\t\tif (!elemData || !(events = elemData.events)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Once for each type.namespace in types; type may be omitted\n\t\t\ttypes = (types || \"\").match(rnothtmlwhite) || [\"\"];\n\t\t\tt = types.length;\n\t\t\twhile (t--) {\n\t\t\t\ttmp = rtypenamespace.exec(types[t]) || [];\n\t\t\t\ttype = origType = tmp[1];\n\t\t\t\tnamespaces = (tmp[2] || \"\").split(\".\").sort();\n\n\t\t\t\t// Unbind all events (on this namespace, if provided) for the element\n\t\t\t\tif (!type) {\n\t\t\t\t\tfor (type in events) {\n\t\t\t\t\t\tjQuery.event.remove(elem, type + types[t], handler, selector, true);\n\t\t\t\t\t}\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tspecial = jQuery.event.special[type] || {};\n\t\t\t\ttype = (selector ? special.delegateType : special.bindType) || type;\n\t\t\t\thandlers = events[type] || [];\n\t\t\t\ttmp = tmp[2] &&\n\t\t\t\t\tnew RegExp(\"(^|\\\\.)\" + namespaces.join(\"\\\\.(?:.*\\\\.|)\") + \"(\\\\.|$)\");\n\n\t\t\t\t// Remove matching events\n\t\t\t\torigCount = j = handlers.length;\n\t\t\t\twhile (j--) {\n\t\t\t\t\thandleObj = handlers[j];\n\n\t\t\t\t\tif ((mappedTypes || origType === handleObj.origType) &&\n\t\t\t\t\t\t(!handler || handler.guid === handleObj.guid) &&\n\t\t\t\t\t\t(!tmp || tmp.test(handleObj.namespace)) &&\n\t\t\t\t\t\t(!selector || selector === handleObj.selector ||\n\t\t\t\t\t\t\tselector === \"**\" && handleObj.selector)) {\n\t\t\t\t\t\thandlers.splice(j, 1);\n\n\t\t\t\t\t\tif (handleObj.selector) {\n\t\t\t\t\t\t\thandlers.delegateCount--;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (special.remove) {\n\t\t\t\t\t\t\tspecial.remove.call(elem, handleObj);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Remove generic event handler if we removed something and no more handlers exist\n\t\t\t\t// (avoids potential for endless recursion during removal of special event handlers)\n\t\t\t\tif (origCount && !handlers.length) {\n\t\t\t\t\tif (!special.teardown ||\n\t\t\t\t\t\tspecial.teardown.call(elem, namespaces, elemData.handle) === false) {\n\n\t\t\t\t\t\tjQuery.removeEvent(elem, type, elemData.handle);\n\t\t\t\t\t}\n\n\t\t\t\t\tdelete events[type];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove data and the expando if it's no longer used\n\t\t\tif (jQuery.isEmptyObject(events)) {\n\t\t\t\tdataPriv.remove(elem, \"handle events\");\n\t\t\t}\n\t\t},\n\n\t\tdispatch: function (nativeEvent) {\n\n\t\t\tvar i, j, ret, matched, handleObj, handlerQueue,\n\t\t\t\targs = new Array(arguments.length),\n\n\t\t\t\t// Make a writable jQuery.Event from the native event object\n\t\t\t\tevent = jQuery.event.fix(nativeEvent),\n\n\t\t\t\thandlers = (\n\t\t\t\t\tdataPriv.get(this, \"events\") || Object.create(null)\n\t\t\t\t)[event.type] || [],\n\t\t\t\tspecial = jQuery.event.special[event.type] || {};\n\n\t\t\t// Use the fix-ed jQuery.Event rather than the (read-only) native event\n\t\t\targs[0] = event;\n\n\t\t\tfor (i = 1; i < arguments.length; i++) {\n\t\t\t\targs[i] = arguments[i];\n\t\t\t}\n\n\t\t\tevent.delegateTarget = this;\n\n\t\t\t// Call the preDispatch hook for the mapped type, and let it bail if desired\n\t\t\tif (special.preDispatch && special.preDispatch.call(this, event) === false) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Determine handlers\n\t\t\thandlerQueue = jQuery.event.handlers.call(this, event, handlers);\n\n\t\t\t// Run delegates first; they may want to stop propagation beneath us\n\t\t\ti = 0;\n\t\t\twhile ((matched = handlerQueue[i++]) && !event.isPropagationStopped()) {\n\t\t\t\tevent.currentTarget = matched.elem;\n\n\t\t\t\tj = 0;\n\t\t\t\twhile ((handleObj = matched.handlers[j++]) &&\n\t\t\t\t\t!event.isImmediatePropagationStopped()) {\n\n\t\t\t\t\t// If the event is namespaced, then each handler is only invoked if it is\n\t\t\t\t\t// specially universal or its namespaces are a superset of the event's.\n\t\t\t\t\tif (!event.rnamespace || handleObj.namespace === false ||\n\t\t\t\t\t\tevent.rnamespace.test(handleObj.namespace)) {\n\n\t\t\t\t\t\tevent.handleObj = handleObj;\n\t\t\t\t\t\tevent.data = handleObj.data;\n\n\t\t\t\t\t\tret = ((jQuery.event.special[handleObj.origType] || {}).handle ||\n\t\t\t\t\t\t\thandleObj.handler).apply(matched.elem, args);\n\n\t\t\t\t\t\tif (ret !== undefined) {\n\t\t\t\t\t\t\tif ((event.result = ret) === false) {\n\t\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Call the postDispatch hook for the mapped type\n\t\t\tif (special.postDispatch) {\n\t\t\t\tspecial.postDispatch.call(this, event);\n\t\t\t}\n\n\t\t\treturn event.result;\n\t\t},\n\n\t\thandlers: function (event, handlers) {\n\t\t\tvar i, handleObj, sel, matchedHandlers, matchedSelectors,\n\t\t\t\thandlerQueue = [],\n\t\t\t\tdelegateCount = handlers.delegateCount,\n\t\t\t\tcur = event.target;\n\n\t\t\t// Find delegate handlers\n\t\t\tif (delegateCount &&\n\n\t\t\t\t// Support: IE <=9\n\t\t\t\t// Black-hole SVG <use> instance trees (trac-13180)\n\t\t\t\tcur.nodeType &&\n\n\t\t\t\t// Support: Firefox <=42\n\t\t\t\t// Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861)\n\t\t\t\t// https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click\n\t\t\t\t// Support: IE 11 only\n\t\t\t\t// ...but not arrow key \"clicks\" of radio inputs, which can have `button` -1 (gh-2343)\n\t\t\t\t!(event.type === \"click\" && event.button >= 1)) {\n\n\t\t\t\tfor (; cur !== this; cur = cur.parentNode || this) {\n\n\t\t\t\t\t// Don't check non-elements (trac-13208)\n\t\t\t\t\t// Don't process clicks on disabled elements (trac-6911, trac-8165, trac-11382, trac-11764)\n\t\t\t\t\tif (cur.nodeType === 1 && !(event.type === \"click\" && cur.disabled === true)) {\n\t\t\t\t\t\tmatchedHandlers = [];\n\t\t\t\t\t\tmatchedSelectors = {};\n\t\t\t\t\t\tfor (i = 0; i < delegateCount; i++) {\n\t\t\t\t\t\t\thandleObj = handlers[i];\n\n\t\t\t\t\t\t\t// Don't conflict with Object.prototype properties (trac-13203)\n\t\t\t\t\t\t\tsel = handleObj.selector + \" \";\n\n\t\t\t\t\t\t\tif (matchedSelectors[sel] === undefined) {\n\t\t\t\t\t\t\t\tmatchedSelectors[sel] = handleObj.needsContext ?\n\t\t\t\t\t\t\t\t\tjQuery(sel, this).index(cur) > -1 :\n\t\t\t\t\t\t\t\t\tjQuery.find(sel, this, null, [cur]).length;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (matchedSelectors[sel]) {\n\t\t\t\t\t\t\t\tmatchedHandlers.push(handleObj);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (matchedHandlers.length) {\n\t\t\t\t\t\t\thandlerQueue.push({ elem: cur, handlers: matchedHandlers });\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Add the remaining (directly-bound) handlers\n\t\t\tcur = this;\n\t\t\tif (delegateCount < handlers.length) {\n\t\t\t\thandlerQueue.push({ elem: cur, handlers: handlers.slice(delegateCount) });\n\t\t\t}\n\n\t\t\treturn handlerQueue;\n\t\t},\n\n\t\taddProp: function (name, hook) {\n\t\t\tObject.defineProperty(jQuery.Event.prototype, name, {\n\t\t\t\tenumerable: true,\n\t\t\t\tconfigurable: true,\n\n\t\t\t\tget: isFunction(hook) ?\n\t\t\t\t\tfunction () {\n\t\t\t\t\t\tif (this.originalEvent) {\n\t\t\t\t\t\t\treturn hook(this.originalEvent);\n\t\t\t\t\t\t}\n\t\t\t\t\t} :\n\t\t\t\t\tfunction () {\n\t\t\t\t\t\tif (this.originalEvent) {\n\t\t\t\t\t\t\treturn this.originalEvent[name];\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\n\t\t\t\tset: function (value) {\n\t\t\t\t\tObject.defineProperty(this, name, {\n\t\t\t\t\t\tenumerable: true,\n\t\t\t\t\t\tconfigurable: true,\n\t\t\t\t\t\twritable: true,\n\t\t\t\t\t\tvalue: value\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\tfix: function (originalEvent) {\n\t\t\treturn originalEvent[jQuery.expando] ?\n\t\t\t\toriginalEvent :\n\t\t\t\tnew jQuery.Event(originalEvent);\n\t\t},\n\n\t\tspecial: {\n\t\t\tload: {\n\n\t\t\t\t// Prevent triggered image.load events from bubbling to window.load\n\t\t\t\tnoBubble: true\n\t\t\t},\n\t\t\tclick: {\n\n\t\t\t\t// Utilize native event to ensure correct state for checkable inputs\n\t\t\t\tsetup: function (data) {\n\n\t\t\t\t\t// For mutual compressibility with _default, replace `this` access with a local var.\n\t\t\t\t\t// `|| data` is dead code meant only to preserve the variable through minification.\n\t\t\t\t\tvar el = this || data;\n\n\t\t\t\t\t// Claim the first handler\n\t\t\t\t\tif (rcheckableType.test(el.type) &&\n\t\t\t\t\t\tel.click && nodeName(el, \"input\")) {\n\n\t\t\t\t\t\t// dataPriv.set( el, \"click\", ... )\n\t\t\t\t\t\tleverageNative(el, \"click\", true);\n\t\t\t\t\t}\n\n\t\t\t\t\t// Return false to allow normal processing in the caller\n\t\t\t\t\treturn false;\n\t\t\t\t},\n\t\t\t\ttrigger: function (data) {\n\n\t\t\t\t\t// For mutual compressibility with _default, replace `this` access with a local var.\n\t\t\t\t\t// `|| data` is dead code meant only to preserve the variable through minification.\n\t\t\t\t\tvar el = this || data;\n\n\t\t\t\t\t// Force setup before triggering a click\n\t\t\t\t\tif (rcheckableType.test(el.type) &&\n\t\t\t\t\t\tel.click && nodeName(el, \"input\")) {\n\n\t\t\t\t\t\tleverageNative(el, \"click\");\n\t\t\t\t\t}\n\n\t\t\t\t\t// Return non-false to allow normal event-path propagation\n\t\t\t\t\treturn true;\n\t\t\t\t},\n\n\t\t\t\t// For cross-browser consistency, suppress native .click() on links\n\t\t\t\t// Also prevent it if we're currently inside a leveraged native-event stack\n\t\t\t\t_default: function (event) {\n\t\t\t\t\tvar target = event.target;\n\t\t\t\t\treturn rcheckableType.test(target.type) &&\n\t\t\t\t\t\ttarget.click && nodeName(target, \"input\") &&\n\t\t\t\t\t\tdataPriv.get(target, \"click\") ||\n\t\t\t\t\t\tnodeName(target, \"a\");\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tbeforeunload: {\n\t\t\t\tpostDispatch: function (event) {\n\n\t\t\t\t\t// Support: Firefox 20+\n\t\t\t\t\t// Firefox doesn't alert if the returnValue field is not set.\n\t\t\t\t\tif (event.result !== undefined && event.originalEvent) {\n\t\t\t\t\t\tevent.originalEvent.returnValue = event.result;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t// Ensure the presence of an event listener that handles manually-triggered\n\t// synthetic events by interrupting progress until reinvoked in response to\n\t// *native* events that it fires directly, ensuring that state changes have\n\t// already occurred before other listeners are invoked.\n\tfunction leverageNative(el, type, isSetup) {\n\n\t\t// Missing `isSetup` indicates a trigger call, which must force setup through jQuery.event.add\n\t\tif (!isSetup) {\n\t\t\tif (dataPriv.get(el, type) === undefined) {\n\t\t\t\tjQuery.event.add(el, type, returnTrue);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\t// Register the controller as a special universal handler for all event namespaces\n\t\tdataPriv.set(el, type, false);\n\t\tjQuery.event.add(el, type, {\n\t\t\tnamespace: false,\n\t\t\thandler: function (event) {\n\t\t\t\tvar result,\n\t\t\t\t\tsaved = dataPriv.get(this, type);\n\n\t\t\t\tif ((event.isTrigger & 1) && this[type]) {\n\n\t\t\t\t\t// Interrupt processing of the outer synthetic .trigger()ed event\n\t\t\t\t\tif (!saved) {\n\n\t\t\t\t\t\t// Store arguments for use when handling the inner native event\n\t\t\t\t\t\t// There will always be at least one argument (an event object), so this array\n\t\t\t\t\t\t// will not be confused with a leftover capture object.\n\t\t\t\t\t\tsaved = slice.call(arguments);\n\t\t\t\t\t\tdataPriv.set(this, type, saved);\n\n\t\t\t\t\t\t// Trigger the native event and capture its result\n\t\t\t\t\t\tthis[type]();\n\t\t\t\t\t\tresult = dataPriv.get(this, type);\n\t\t\t\t\t\tdataPriv.set(this, type, false);\n\n\t\t\t\t\t\tif (saved !== result) {\n\n\t\t\t\t\t\t\t// Cancel the outer synthetic event\n\t\t\t\t\t\t\tevent.stopImmediatePropagation();\n\t\t\t\t\t\t\tevent.preventDefault();\n\n\t\t\t\t\t\t\treturn result;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// If this is an inner synthetic event for an event with a bubbling surrogate\n\t\t\t\t\t\t// (focus or blur), assume that the surrogate already propagated from triggering\n\t\t\t\t\t\t// the native event and prevent that from happening again here.\n\t\t\t\t\t\t// This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the\n\t\t\t\t\t\t// bubbling surrogate propagates *after* the non-bubbling base), but that seems\n\t\t\t\t\t\t// less bad than duplication.\n\t\t\t\t\t} else if ((jQuery.event.special[type] || {}).delegateType) {\n\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t}\n\n\t\t\t\t\t// If this is a native event triggered above, everything is now in order\n\t\t\t\t\t// Fire an inner synthetic event with the original arguments\n\t\t\t\t} else if (saved) {\n\n\t\t\t\t\t// ...and capture the result\n\t\t\t\t\tdataPriv.set(this, type, jQuery.event.trigger(\n\t\t\t\t\t\tsaved[0],\n\t\t\t\t\t\tsaved.slice(1),\n\t\t\t\t\t\tthis\n\t\t\t\t\t));\n\n\t\t\t\t\t// Abort handling of the native event by all jQuery handlers while allowing\n\t\t\t\t\t// native handlers on the same element to run. On target, this is achieved\n\t\t\t\t\t// by stopping immediate propagation just on the jQuery event. However,\n\t\t\t\t\t// the native event is re-wrapped by a jQuery one on each level of the\n\t\t\t\t\t// propagation so the only way to stop it for jQuery is to stop it for\n\t\t\t\t\t// everyone via native `stopPropagation()`. This is not a problem for\n\t\t\t\t\t// focus/blur which don't bubble, but it does also stop click on checkboxes\n\t\t\t\t\t// and radios. We accept this limitation.\n\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\tevent.isImmediatePropagationStopped = returnTrue;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\tjQuery.removeEvent = function (elem, type, handle) {\n\n\t\t// This \"if\" is needed for plain objects\n\t\tif (elem.removeEventListener) {\n\t\t\telem.removeEventListener(type, handle);\n\t\t}\n\t};\n\n\tjQuery.Event = function (src, props) {\n\n\t\t// Allow instantiation without the 'new' keyword\n\t\tif (!(this instanceof jQuery.Event)) {\n\t\t\treturn new jQuery.Event(src, props);\n\t\t}\n\n\t\t// Event object\n\t\tif (src && src.type) {\n\t\t\tthis.originalEvent = src;\n\t\t\tthis.type = src.type;\n\n\t\t\t// Events bubbling up the document may have been marked as prevented\n\t\t\t// by a handler lower down the tree; reflect the correct value.\n\t\t\tthis.isDefaultPrevented = src.defaultPrevented ||\n\t\t\t\tsrc.defaultPrevented === undefined &&\n\n\t\t\t\t// Support: Android <=2.3 only\n\t\t\t\tsrc.returnValue === false ?\n\t\t\t\treturnTrue :\n\t\t\t\treturnFalse;\n\n\t\t\t// Create target properties\n\t\t\t// Support: Safari <=6 - 7 only\n\t\t\t// Target should not be a text node (trac-504, trac-13143)\n\t\t\tthis.target = (src.target && src.target.nodeType === 3) ?\n\t\t\t\tsrc.target.parentNode :\n\t\t\t\tsrc.target;\n\n\t\t\tthis.currentTarget = src.currentTarget;\n\t\t\tthis.relatedTarget = src.relatedTarget;\n\n\t\t\t// Event type\n\t\t} else {\n\t\t\tthis.type = src;\n\t\t}\n\n\t\t// Put explicitly provided properties onto the event object\n\t\tif (props) {\n\t\t\tjQuery.extend(this, props);\n\t\t}\n\n\t\t// Create a timestamp if incoming event doesn't have one\n\t\tthis.timeStamp = src && src.timeStamp || Date.now();\n\n\t\t// Mark it as fixed\n\t\tthis[jQuery.expando] = true;\n\t};\n\n\t// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding\n\t// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html\n\tjQuery.Event.prototype = {\n\t\tconstructor: jQuery.Event,\n\t\tisDefaultPrevented: returnFalse,\n\t\tisPropagationStopped: returnFalse,\n\t\tisImmediatePropagationStopped: returnFalse,\n\t\tisSimulated: false,\n\n\t\tpreventDefault: function () {\n\t\t\tvar e = this.originalEvent;\n\n\t\t\tthis.isDefaultPrevented = returnTrue;\n\n\t\t\tif (e && !this.isSimulated) {\n\t\t\t\te.preventDefault();\n\t\t\t}\n\t\t},\n\t\tstopPropagation: function () {\n\t\t\tvar e = this.originalEvent;\n\n\t\t\tthis.isPropagationStopped = returnTrue;\n\n\t\t\tif (e && !this.isSimulated) {\n\t\t\t\te.stopPropagation();\n\t\t\t}\n\t\t},\n\t\tstopImmediatePropagation: function () {\n\t\t\tvar e = this.originalEvent;\n\n\t\t\tthis.isImmediatePropagationStopped = returnTrue;\n\n\t\t\tif (e && !this.isSimulated) {\n\t\t\t\te.stopImmediatePropagation();\n\t\t\t}\n\n\t\t\tthis.stopPropagation();\n\t\t}\n\t};\n\n\t// Includes all common event props including KeyEvent and MouseEvent specific props\n\tjQuery.each({\n\t\taltKey: true,\n\t\tbubbles: true,\n\t\tcancelable: true,\n\t\tchangedTouches: true,\n\t\tctrlKey: true,\n\t\tdetail: true,\n\t\teventPhase: true,\n\t\tmetaKey: true,\n\t\tpageX: true,\n\t\tpageY: true,\n\t\tshiftKey: true,\n\t\tview: true,\n\t\t\"char\": true,\n\t\tcode: true,\n\t\tcharCode: true,\n\t\tkey: true,\n\t\tkeyCode: true,\n\t\tbutton: true,\n\t\tbuttons: true,\n\t\tclientX: true,\n\t\tclientY: true,\n\t\toffsetX: true,\n\t\toffsetY: true,\n\t\tpointerId: true,\n\t\tpointerType: true,\n\t\tscreenX: true,\n\t\tscreenY: true,\n\t\ttargetTouches: true,\n\t\ttoElement: true,\n\t\ttouches: true,\n\t\twhich: true\n\t}, jQuery.event.addProp);\n\n\tjQuery.each({ focus: \"focusin\", blur: \"focusout\" }, function (type, delegateType) {\n\n\t\tfunction focusMappedHandler(nativeEvent) {\n\t\t\tif (document.documentMode) {\n\n\t\t\t\t// Support: IE 11+\n\t\t\t\t// Attach a single focusin/focusout handler on the document while someone wants\n\t\t\t\t// focus/blur. This is because the former are synchronous in IE while the latter\n\t\t\t\t// are async. In other browsers, all those handlers are invoked synchronously.\n\n\t\t\t\t// `handle` from private data would already wrap the event, but we need\n\t\t\t\t// to change the `type` here.\n\t\t\t\tvar handle = dataPriv.get(this, \"handle\"),\n\t\t\t\t\tevent = jQuery.event.fix(nativeEvent);\n\t\t\t\tevent.type = nativeEvent.type === \"focusin\" ? \"focus\" : \"blur\";\n\t\t\t\tevent.isSimulated = true;\n\n\t\t\t\t// First, handle focusin/focusout\n\t\t\t\thandle(nativeEvent);\n\n\t\t\t\t// ...then, handle focus/blur\n\t\t\t\t//\n\t\t\t\t// focus/blur don't bubble while focusin/focusout do; simulate the former by only\n\t\t\t\t// invoking the handler at the lower level.\n\t\t\t\tif (event.target === event.currentTarget) {\n\n\t\t\t\t\t// The setup part calls `leverageNative`, which, in turn, calls\n\t\t\t\t\t// `jQuery.event.add`, so event handle will already have been set\n\t\t\t\t\t// by this point.\n\t\t\t\t\thandle(event);\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\t// For non-IE browsers, attach a single capturing handler on the document\n\t\t\t\t// while someone wants focusin/focusout.\n\t\t\t\tjQuery.event.simulate(delegateType, nativeEvent.target,\n\t\t\t\t\tjQuery.event.fix(nativeEvent));\n\t\t\t}\n\t\t}\n\n\t\tjQuery.event.special[type] = {\n\n\t\t\t// Utilize native event if possible so blur/focus sequence is correct\n\t\t\tsetup: function () {\n\n\t\t\t\tvar attaches;\n\n\t\t\t\t// Claim the first handler\n\t\t\t\t// dataPriv.set( this, \"focus\", ... )\n\t\t\t\t// dataPriv.set( this, \"blur\", ... )\n\t\t\t\tleverageNative(this, type, true);\n\n\t\t\t\tif (document.documentMode) {\n\n\t\t\t\t\t// Support: IE 9 - 11+\n\t\t\t\t\t// We use the same native handler for focusin & focus (and focusout & blur)\n\t\t\t\t\t// so we need to coordinate setup & teardown parts between those events.\n\t\t\t\t\t// Use `delegateType` as the key as `type` is already used by `leverageNative`.\n\t\t\t\t\tattaches = dataPriv.get(this, delegateType);\n\t\t\t\t\tif (!attaches) {\n\t\t\t\t\t\tthis.addEventListener(delegateType, focusMappedHandler);\n\t\t\t\t\t}\n\t\t\t\t\tdataPriv.set(this, delegateType, (attaches || 0) + 1);\n\t\t\t\t} else {\n\n\t\t\t\t\t// Return false to allow normal processing in the caller\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\t\t\ttrigger: function () {\n\n\t\t\t\t// Force setup before trigger\n\t\t\t\tleverageNative(this, type);\n\n\t\t\t\t// Return non-false to allow normal event-path propagation\n\t\t\t\treturn true;\n\t\t\t},\n\n\t\t\tteardown: function () {\n\t\t\t\tvar attaches;\n\n\t\t\t\tif (document.documentMode) {\n\t\t\t\t\tattaches = dataPriv.get(this, delegateType) - 1;\n\t\t\t\t\tif (!attaches) {\n\t\t\t\t\t\tthis.removeEventListener(delegateType, focusMappedHandler);\n\t\t\t\t\t\tdataPriv.remove(this, delegateType);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdataPriv.set(this, delegateType, attaches);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\n\t\t\t\t\t// Return false to indicate standard teardown should be applied\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// Suppress native focus or blur if we're currently inside\n\t\t\t// a leveraged native-event stack\n\t\t\t_default: function (event) {\n\t\t\t\treturn dataPriv.get(event.target, type);\n\t\t\t},\n\n\t\t\tdelegateType: delegateType\n\t\t};\n\n\t\t// Support: Firefox <=44\n\t\t// Firefox doesn't have focus(in | out) events\n\t\t// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787\n\t\t//\n\t\t// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1\n\t\t// focus(in | out) events fire after focus & blur events,\n\t\t// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order\n\t\t// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857\n\t\t//\n\t\t// Support: IE 9 - 11+\n\t\t// To preserve relative focusin/focus & focusout/blur event order guaranteed on the 3.x branch,\n\t\t// attach a single handler for both events in IE.\n\t\tjQuery.event.special[delegateType] = {\n\t\t\tsetup: function () {\n\n\t\t\t\t// Handle: regular nodes (via `this.ownerDocument`), window\n\t\t\t\t// (via `this.document`) & document (via `this`).\n\t\t\t\tvar doc = this.ownerDocument || this.document || this,\n\t\t\t\t\tdataHolder = document.documentMode ? this : doc,\n\t\t\t\t\tattaches = dataPriv.get(dataHolder, delegateType);\n\n\t\t\t\t// Support: IE 9 - 11+\n\t\t\t\t// We use the same native handler for focusin & focus (and focusout & blur)\n\t\t\t\t// so we need to coordinate setup & teardown parts between those events.\n\t\t\t\t// Use `delegateType` as the key as `type` is already used by `leverageNative`.\n\t\t\t\tif (!attaches) {\n\t\t\t\t\tif (document.documentMode) {\n\t\t\t\t\t\tthis.addEventListener(delegateType, focusMappedHandler);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdoc.addEventListener(type, focusMappedHandler, true);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tdataPriv.set(dataHolder, delegateType, (attaches || 0) + 1);\n\t\t\t},\n\t\t\tteardown: function () {\n\t\t\t\tvar doc = this.ownerDocument || this.document || this,\n\t\t\t\t\tdataHolder = document.documentMode ? this : doc,\n\t\t\t\t\tattaches = dataPriv.get(dataHolder, delegateType) - 1;\n\n\t\t\t\tif (!attaches) {\n\t\t\t\t\tif (document.documentMode) {\n\t\t\t\t\t\tthis.removeEventListener(delegateType, focusMappedHandler);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdoc.removeEventListener(type, focusMappedHandler, true);\n\t\t\t\t\t}\n\t\t\t\t\tdataPriv.remove(dataHolder, delegateType);\n\t\t\t\t} else {\n\t\t\t\t\tdataPriv.set(dataHolder, delegateType, attaches);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t});\n\n\t// Create mouseenter/leave events using mouseover/out and event-time checks\n\t// so that event delegation works in jQuery.\n\t// Do the same for pointerenter/pointerleave and pointerover/pointerout\n\t//\n\t// Support: Safari 7 only\n\t// Safari sends mouseenter too often; see:\n\t// https://bugs.chromium.org/p/chromium/issues/detail?id=470258\n\t// for the description of the bug (it existed in older Chrome versions as well).\n\tjQuery.each({\n\t\tmouseenter: \"mouseover\",\n\t\tmouseleave: \"mouseout\",\n\t\tpointerenter: \"pointerover\",\n\t\tpointerleave: \"pointerout\"\n\t}, function (orig, fix) {\n\t\tjQuery.event.special[orig] = {\n\t\t\tdelegateType: fix,\n\t\t\tbindType: fix,\n\n\t\t\thandle: function (event) {\n\t\t\t\tvar ret,\n\t\t\t\t\ttarget = this,\n\t\t\t\t\trelated = event.relatedTarget,\n\t\t\t\t\thandleObj = event.handleObj;\n\n\t\t\t\t// For mouseenter/leave call the handler if related is outside the target.\n\t\t\t\t// NB: No relatedTarget if the mouse left/entered the browser window\n\t\t\t\tif (!related || (related !== target && !jQuery.contains(target, related))) {\n\t\t\t\t\tevent.type = handleObj.origType;\n\t\t\t\t\tret = handleObj.handler.apply(this, arguments);\n\t\t\t\t\tevent.type = fix;\n\t\t\t\t}\n\t\t\t\treturn ret;\n\t\t\t}\n\t\t};\n\t});\n\n\tjQuery.fn.extend({\n\n\t\ton: function (types, selector, data, fn) {\n\t\t\treturn on(this, types, selector, data, fn);\n\t\t},\n\t\tone: function (types, selector, data, fn) {\n\t\t\treturn on(this, types, selector, data, fn, 1);\n\t\t},\n\t\toff: function (types, selector, fn) {\n\t\t\tvar handleObj, type;\n\t\t\tif (types && types.preventDefault && types.handleObj) {\n\n\t\t\t\t// ( event )  dispatched jQuery.Event\n\t\t\t\thandleObj = types.handleObj;\n\t\t\t\tjQuery(types.delegateTarget).off(\n\t\t\t\t\thandleObj.namespace ?\n\t\t\t\t\t\thandleObj.origType + \".\" + handleObj.namespace :\n\t\t\t\t\t\thandleObj.origType,\n\t\t\t\t\thandleObj.selector,\n\t\t\t\t\thandleObj.handler\n\t\t\t\t);\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\tif (typeof types === \"object\") {\n\n\t\t\t\t// ( types-object [, selector] )\n\t\t\t\tfor (type in types) {\n\t\t\t\t\tthis.off(type, selector, types[type]);\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\tif (selector === false || typeof selector === \"function\") {\n\n\t\t\t\t// ( types [, fn] )\n\t\t\t\tfn = selector;\n\t\t\t\tselector = undefined;\n\t\t\t}\n\t\t\tif (fn === false) {\n\t\t\t\tfn = returnFalse;\n\t\t\t}\n\t\t\treturn this.each(function () {\n\t\t\t\tjQuery.event.remove(this, types, fn, selector);\n\t\t\t});\n\t\t}\n\t});\n\n\n\tvar\n\n\t\t// Support: IE <=10 - 11, Edge 12 - 13 only\n\t\t// In IE/Edge using regex groups here causes severe slowdowns.\n\t\t// See https://connect.microsoft.com/IE/feedback/details/1736512/\n\t\trnoInnerhtml = /<script|<style|<link/i,\n\n\t\t// checked=\"checked\" or checked\n\t\trchecked = /checked\\s*(?:[^=]|=\\s*.checked.)/i,\n\n\t\trcleanScript = /^\\s*<!\\[CDATA\\[|\\]\\]>\\s*$/g;\n\n\t// Prefer a tbody over its parent table for containing new rows\n\tfunction manipulationTarget(elem, content) {\n\t\tif (nodeName(elem, \"table\") &&\n\t\t\tnodeName(content.nodeType !== 11 ? content : content.firstChild, \"tr\")) {\n\n\t\t\treturn jQuery(elem).children(\"tbody\")[0] || elem;\n\t\t}\n\n\t\treturn elem;\n\t}\n\n\t// Replace/restore the type attribute of script elements for safe DOM manipulation\n\tfunction disableScript(elem) {\n\t\telem.type = (elem.getAttribute(\"type\") !== null) + \"/\" + elem.type;\n\t\treturn elem;\n\t}\n\tfunction restoreScript(elem) {\n\t\tif ((elem.type || \"\").slice(0, 5) === \"true/\") {\n\t\t\telem.type = elem.type.slice(5);\n\t\t} else {\n\t\t\telem.removeAttribute(\"type\");\n\t\t}\n\n\t\treturn elem;\n\t}\n\n\tfunction cloneCopyEvent(src, dest) {\n\t\tvar i, l, type, pdataOld, udataOld, udataCur, events;\n\n\t\tif (dest.nodeType !== 1) {\n\t\t\treturn;\n\t\t}\n\n\t\t// 1. Copy private data: events, handlers, etc.\n\t\tif (dataPriv.hasData(src)) {\n\t\t\tpdataOld = dataPriv.get(src);\n\t\t\tevents = pdataOld.events;\n\n\t\t\tif (events) {\n\t\t\t\tdataPriv.remove(dest, \"handle events\");\n\n\t\t\t\tfor (type in events) {\n\t\t\t\t\tfor (i = 0, l = events[type].length; i < l; i++) {\n\t\t\t\t\t\tjQuery.event.add(dest, type, events[type][i]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// 2. Copy user data\n\t\tif (dataUser.hasData(src)) {\n\t\t\tudataOld = dataUser.access(src);\n\t\t\tudataCur = jQuery.extend({}, udataOld);\n\n\t\t\tdataUser.set(dest, udataCur);\n\t\t}\n\t}\n\n\t// Fix IE bugs, see support tests\n\tfunction fixInput(src, dest) {\n\t\tvar nodeName = dest.nodeName.toLowerCase();\n\n\t\t// Fails to persist the checked state of a cloned checkbox or radio button.\n\t\tif (nodeName === \"input\" && rcheckableType.test(src.type)) {\n\t\t\tdest.checked = src.checked;\n\n\t\t\t// Fails to return the selected option to the default selected state when cloning options\n\t\t} else if (nodeName === \"input\" || nodeName === \"textarea\") {\n\t\t\tdest.defaultValue = src.defaultValue;\n\t\t}\n\t}\n\n\tfunction domManip(collection, args, callback, ignored) {\n\n\t\t// Flatten any nested arrays\n\t\targs = flat(args);\n\n\t\tvar fragment, first, scripts, hasScripts, node, doc,\n\t\t\ti = 0,\n\t\t\tl = collection.length,\n\t\t\tiNoClone = l - 1,\n\t\t\tvalue = args[0],\n\t\t\tvalueIsFunction = isFunction(value);\n\n\t\t// We can't cloneNode fragments that contain checked, in WebKit\n\t\tif (valueIsFunction ||\n\t\t\t(l > 1 && typeof value === \"string\" &&\n\t\t\t\t!support.checkClone && rchecked.test(value))) {\n\t\t\treturn collection.each(function (index) {\n\t\t\t\tvar self = collection.eq(index);\n\t\t\t\tif (valueIsFunction) {\n\t\t\t\t\targs[0] = value.call(this, index, self.html());\n\t\t\t\t}\n\t\t\t\tdomManip(self, args, callback, ignored);\n\t\t\t});\n\t\t}\n\n\t\tif (l) {\n\t\t\tfragment = buildFragment(args, collection[0].ownerDocument, false, collection, ignored);\n\t\t\tfirst = fragment.firstChild;\n\n\t\t\tif (fragment.childNodes.length === 1) {\n\t\t\t\tfragment = first;\n\t\t\t}\n\n\t\t\t// Require either new content or an interest in ignored elements to invoke the callback\n\t\t\tif (first || ignored) {\n\t\t\t\tscripts = jQuery.map(getAll(fragment, \"script\"), disableScript);\n\t\t\t\thasScripts = scripts.length;\n\n\t\t\t\t// Use the original fragment for the last item\n\t\t\t\t// instead of the first because it can end up\n\t\t\t\t// being emptied incorrectly in certain situations (trac-8070).\n\t\t\t\tfor (; i < l; i++) {\n\t\t\t\t\tnode = fragment;\n\n\t\t\t\t\tif (i !== iNoClone) {\n\t\t\t\t\t\tnode = jQuery.clone(node, true, true);\n\n\t\t\t\t\t\t// Keep references to cloned scripts for later restoration\n\t\t\t\t\t\tif (hasScripts) {\n\n\t\t\t\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\t\t\t\tjQuery.merge(scripts, getAll(node, \"script\"));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tcallback.call(collection[i], node, i);\n\t\t\t\t}\n\n\t\t\t\tif (hasScripts) {\n\t\t\t\t\tdoc = scripts[scripts.length - 1].ownerDocument;\n\n\t\t\t\t\t// Reenable scripts\n\t\t\t\t\tjQuery.map(scripts, restoreScript);\n\n\t\t\t\t\t// Evaluate executable scripts on first document insertion\n\t\t\t\t\tfor (i = 0; i < hasScripts; i++) {\n\t\t\t\t\t\tnode = scripts[i];\n\t\t\t\t\t\tif (rscriptType.test(node.type || \"\") &&\n\t\t\t\t\t\t\t!dataPriv.access(node, \"globalEval\") &&\n\t\t\t\t\t\t\tjQuery.contains(doc, node)) {\n\n\t\t\t\t\t\t\tif (node.src && (node.type || \"\").toLowerCase() !== \"module\") {\n\n\t\t\t\t\t\t\t\t// Optional AJAX dependency, but won't run scripts if not present\n\t\t\t\t\t\t\t\tif (jQuery._evalUrl && !node.noModule) {\n\t\t\t\t\t\t\t\t\tjQuery._evalUrl(node.src, {\n\t\t\t\t\t\t\t\t\t\tnonce: node.nonce || node.getAttribute(\"nonce\")\n\t\t\t\t\t\t\t\t\t}, doc);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t// Unwrap a CDATA section containing script contents. This shouldn't be\n\t\t\t\t\t\t\t\t// needed as in XML documents they're already not visible when\n\t\t\t\t\t\t\t\t// inspecting element contents and in HTML documents they have no\n\t\t\t\t\t\t\t\t// meaning but we're preserving that logic for backwards compatibility.\n\t\t\t\t\t\t\t\t// This will be removed completely in 4.0. See gh-4904.\n\t\t\t\t\t\t\t\tDOMEval(node.textContent.replace(rcleanScript, \"\"), node, doc);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn collection;\n\t}\n\n\tfunction remove(elem, selector, keepData) {\n\t\tvar node,\n\t\t\tnodes = selector ? jQuery.filter(selector, elem) : elem,\n\t\t\ti = 0;\n\n\t\tfor (; (node = nodes[i]) != null; i++) {\n\t\t\tif (!keepData && node.nodeType === 1) {\n\t\t\t\tjQuery.cleanData(getAll(node));\n\t\t\t}\n\n\t\t\tif (node.parentNode) {\n\t\t\t\tif (keepData && isAttached(node)) {\n\t\t\t\t\tsetGlobalEval(getAll(node, \"script\"));\n\t\t\t\t}\n\t\t\t\tnode.parentNode.removeChild(node);\n\t\t\t}\n\t\t}\n\n\t\treturn elem;\n\t}\n\n\tjQuery.extend({\n\t\thtmlPrefilter: function (html) {\n\t\t\treturn html;\n\t\t},\n\n\t\tclone: function (elem, dataAndEvents, deepDataAndEvents) {\n\t\t\tvar i, l, srcElements, destElements,\n\t\t\t\tclone = elem.cloneNode(true),\n\t\t\t\tinPage = isAttached(elem);\n\n\t\t\t// Fix IE cloning issues\n\t\t\tif (!support.noCloneChecked && (elem.nodeType === 1 || elem.nodeType === 11) &&\n\t\t\t\t!jQuery.isXMLDoc(elem)) {\n\n\t\t\t\t// We eschew jQuery#find here for performance reasons:\n\t\t\t\t// https://jsperf.com/getall-vs-sizzle/2\n\t\t\t\tdestElements = getAll(clone);\n\t\t\t\tsrcElements = getAll(elem);\n\n\t\t\t\tfor (i = 0, l = srcElements.length; i < l; i++) {\n\t\t\t\t\tfixInput(srcElements[i], destElements[i]);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Copy the events from the original to the clone\n\t\t\tif (dataAndEvents) {\n\t\t\t\tif (deepDataAndEvents) {\n\t\t\t\t\tsrcElements = srcElements || getAll(elem);\n\t\t\t\t\tdestElements = destElements || getAll(clone);\n\n\t\t\t\t\tfor (i = 0, l = srcElements.length; i < l; i++) {\n\t\t\t\t\t\tcloneCopyEvent(srcElements[i], destElements[i]);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tcloneCopyEvent(elem, clone);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Preserve script evaluation history\n\t\t\tdestElements = getAll(clone, \"script\");\n\t\t\tif (destElements.length > 0) {\n\t\t\t\tsetGlobalEval(destElements, !inPage && getAll(elem, \"script\"));\n\t\t\t}\n\n\t\t\t// Return the cloned set\n\t\t\treturn clone;\n\t\t},\n\n\t\tcleanData: function (elems) {\n\t\t\tvar data, elem, type,\n\t\t\t\tspecial = jQuery.event.special,\n\t\t\t\ti = 0;\n\n\t\t\tfor (; (elem = elems[i]) !== undefined; i++) {\n\t\t\t\tif (acceptData(elem)) {\n\t\t\t\t\tif ((data = elem[dataPriv.expando])) {\n\t\t\t\t\t\tif (data.events) {\n\t\t\t\t\t\t\tfor (type in data.events) {\n\t\t\t\t\t\t\t\tif (special[type]) {\n\t\t\t\t\t\t\t\t\tjQuery.event.remove(elem, type);\n\n\t\t\t\t\t\t\t\t\t// This is a shortcut to avoid jQuery.event.remove's overhead\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tjQuery.removeEvent(elem, type, data.handle);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\t\telem[dataPriv.expando] = undefined;\n\t\t\t\t\t}\n\t\t\t\t\tif (elem[dataUser.expando]) {\n\n\t\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\t\telem[dataUser.expando] = undefined;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\n\tjQuery.fn.extend({\n\t\tdetach: function (selector) {\n\t\t\treturn remove(this, selector, true);\n\t\t},\n\n\t\tremove: function (selector) {\n\t\t\treturn remove(this, selector);\n\t\t},\n\n\t\ttext: function (value) {\n\t\t\treturn access(this, function (value) {\n\t\t\t\treturn value === undefined ?\n\t\t\t\t\tjQuery.text(this) :\n\t\t\t\t\tthis.empty().each(function () {\n\t\t\t\t\t\tif (this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9) {\n\t\t\t\t\t\t\tthis.textContent = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t}, null, value, arguments.length);\n\t\t},\n\n\t\tappend: function () {\n\t\t\treturn domManip(this, arguments, function (elem) {\n\t\t\t\tif (this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9) {\n\t\t\t\t\tvar target = manipulationTarget(this, elem);\n\t\t\t\t\ttarget.appendChild(elem);\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\tprepend: function () {\n\t\t\treturn domManip(this, arguments, function (elem) {\n\t\t\t\tif (this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9) {\n\t\t\t\t\tvar target = manipulationTarget(this, elem);\n\t\t\t\t\ttarget.insertBefore(elem, target.firstChild);\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\tbefore: function () {\n\t\t\treturn domManip(this, arguments, function (elem) {\n\t\t\t\tif (this.parentNode) {\n\t\t\t\t\tthis.parentNode.insertBefore(elem, this);\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\tafter: function () {\n\t\t\treturn domManip(this, arguments, function (elem) {\n\t\t\t\tif (this.parentNode) {\n\t\t\t\t\tthis.parentNode.insertBefore(elem, this.nextSibling);\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\tempty: function () {\n\t\t\tvar elem,\n\t\t\t\ti = 0;\n\n\t\t\tfor (; (elem = this[i]) != null; i++) {\n\t\t\t\tif (elem.nodeType === 1) {\n\n\t\t\t\t\t// Prevent memory leaks\n\t\t\t\t\tjQuery.cleanData(getAll(elem, false));\n\n\t\t\t\t\t// Remove any remaining nodes\n\t\t\t\t\telem.textContent = \"\";\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn this;\n\t\t},\n\n\t\tclone: function (dataAndEvents, deepDataAndEvents) {\n\t\t\tdataAndEvents = dataAndEvents == null ? false : dataAndEvents;\n\t\t\tdeepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;\n\n\t\t\treturn this.map(function () {\n\t\t\t\treturn jQuery.clone(this, dataAndEvents, deepDataAndEvents);\n\t\t\t});\n\t\t},\n\n\t\thtml: function (value) {\n\t\t\treturn access(this, function (value) {\n\t\t\t\tvar elem = this[0] || {},\n\t\t\t\t\ti = 0,\n\t\t\t\t\tl = this.length;\n\n\t\t\t\tif (value === undefined && elem.nodeType === 1) {\n\t\t\t\t\treturn elem.innerHTML;\n\t\t\t\t}\n\n\t\t\t\t// See if we can take a shortcut and just use innerHTML\n\t\t\t\tif (typeof value === \"string\" && !rnoInnerhtml.test(value) &&\n\t\t\t\t\t!wrapMap[(rtagName.exec(value) || [\"\", \"\"])[1].toLowerCase()]) {\n\n\t\t\t\t\tvalue = jQuery.htmlPrefilter(value);\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tfor (; i < l; i++) {\n\t\t\t\t\t\t\telem = this[i] || {};\n\n\t\t\t\t\t\t\t// Remove element nodes and prevent memory leaks\n\t\t\t\t\t\t\tif (elem.nodeType === 1) {\n\t\t\t\t\t\t\t\tjQuery.cleanData(getAll(elem, false));\n\t\t\t\t\t\t\t\telem.innerHTML = value;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\telem = 0;\n\n\t\t\t\t\t\t// If using innerHTML throws an exception, use the fallback method\n\t\t\t\t\t} catch (e) { }\n\t\t\t\t}\n\n\t\t\t\tif (elem) {\n\t\t\t\t\tthis.empty().append(value);\n\t\t\t\t}\n\t\t\t}, null, value, arguments.length);\n\t\t},\n\n\t\treplaceWith: function () {\n\t\t\tvar ignored = [];\n\n\t\t\t// Make the changes, replacing each non-ignored context element with the new content\n\t\t\treturn domManip(this, arguments, function (elem) {\n\t\t\t\tvar parent = this.parentNode;\n\n\t\t\t\tif (jQuery.inArray(this, ignored) < 0) {\n\t\t\t\t\tjQuery.cleanData(getAll(this));\n\t\t\t\t\tif (parent) {\n\t\t\t\t\t\tparent.replaceChild(elem, this);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Force callback invocation\n\t\t\t}, ignored);\n\t\t}\n\t});\n\n\tjQuery.each({\n\t\tappendTo: \"append\",\n\t\tprependTo: \"prepend\",\n\t\tinsertBefore: \"before\",\n\t\tinsertAfter: \"after\",\n\t\treplaceAll: \"replaceWith\"\n\t}, function (name, original) {\n\t\tjQuery.fn[name] = function (selector) {\n\t\t\tvar elems,\n\t\t\t\tret = [],\n\t\t\t\tinsert = jQuery(selector),\n\t\t\t\tlast = insert.length - 1,\n\t\t\t\ti = 0;\n\n\t\t\tfor (; i <= last; i++) {\n\t\t\t\telems = i === last ? this : this.clone(true);\n\t\t\t\tjQuery(insert[i])[original](elems);\n\n\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t// .get() because push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\tpush.apply(ret, elems.get());\n\t\t\t}\n\n\t\t\treturn this.pushStack(ret);\n\t\t};\n\t});\n\tvar rnumnonpx = new RegExp(\"^(\" + pnum + \")(?!px)[a-z%]+$\", \"i\");\n\n\tvar rcustomProp = /^--/;\n\n\n\tvar getStyles = function (elem) {\n\n\t\t// Support: IE <=11 only, Firefox <=30 (trac-15098, trac-14150)\n\t\t// IE throws on elements created in popups\n\t\t// FF meanwhile throws on frame elements through \"defaultView.getComputedStyle\"\n\t\tvar view = elem.ownerDocument.defaultView;\n\n\t\tif (!view || !view.opener) {\n\t\t\tview = window;\n\t\t}\n\n\t\treturn view.getComputedStyle(elem);\n\t};\n\n\tvar swap = function (elem, options, callback) {\n\t\tvar ret, name,\n\t\t\told = {};\n\n\t\t// Remember the old values, and insert the new ones\n\t\tfor (name in options) {\n\t\t\told[name] = elem.style[name];\n\t\t\telem.style[name] = options[name];\n\t\t}\n\n\t\tret = callback.call(elem);\n\n\t\t// Revert the old values\n\t\tfor (name in options) {\n\t\t\telem.style[name] = old[name];\n\t\t}\n\n\t\treturn ret;\n\t};\n\n\n\tvar rboxStyle = new RegExp(cssExpand.join(\"|\"), \"i\");\n\n\n\n\t(function () {\n\n\t\t// Executing both pixelPosition & boxSizingReliable tests require only one layout\n\t\t// so they're executed at the same time to save the second computation.\n\t\tfunction computeStyleTests() {\n\n\t\t\t// This is a singleton, we need to execute it only once\n\t\t\tif (!div) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tcontainer.style.cssText = \"position:absolute;left:-11111px;width:60px;\" +\n\t\t\t\t\"margin-top:1px;padding:0;border:0\";\n\t\t\tdiv.style.cssText =\n\t\t\t\t\"position:relative;display:block;box-sizing:border-box;overflow:scroll;\" +\n\t\t\t\t\"margin:auto;border:1px;padding:1px;\" +\n\t\t\t\t\"width:60%;top:1%\";\n\t\t\tdocumentElement.appendChild(container).appendChild(div);\n\n\t\t\tvar divStyle = window.getComputedStyle(div);\n\t\t\tpixelPositionVal = divStyle.top !== \"1%\";\n\n\t\t\t// Support: Android 4.0 - 4.3 only, Firefox <=3 - 44\n\t\t\treliableMarginLeftVal = roundPixelMeasures(divStyle.marginLeft) === 12;\n\n\t\t\t// Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3\n\t\t\t// Some styles come back with percentage values, even though they shouldn't\n\t\t\tdiv.style.right = \"60%\";\n\t\t\tpixelBoxStylesVal = roundPixelMeasures(divStyle.right) === 36;\n\n\t\t\t// Support: IE 9 - 11 only\n\t\t\t// Detect misreporting of content dimensions for box-sizing:border-box elements\n\t\t\tboxSizingReliableVal = roundPixelMeasures(divStyle.width) === 36;\n\n\t\t\t// Support: IE 9 only\n\t\t\t// Detect overflow:scroll screwiness (gh-3699)\n\t\t\t// Support: Chrome <=64\n\t\t\t// Don't get tricked when zoom affects offsetWidth (gh-4029)\n\t\t\tdiv.style.position = \"absolute\";\n\t\t\tscrollboxSizeVal = roundPixelMeasures(div.offsetWidth / 3) === 12;\n\n\t\t\tdocumentElement.removeChild(container);\n\n\t\t\t// Nullify the div so it wouldn't be stored in the memory and\n\t\t\t// it will also be a sign that checks already performed\n\t\t\tdiv = null;\n\t\t}\n\n\t\tfunction roundPixelMeasures(measure) {\n\t\t\treturn Math.round(parseFloat(measure));\n\t\t}\n\n\t\tvar pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal,\n\t\t\treliableTrDimensionsVal, reliableMarginLeftVal,\n\t\t\tcontainer = document.createElement(\"div\"),\n\t\t\tdiv = document.createElement(\"div\");\n\n\t\t// Finish early in limited (non-browser) environments\n\t\tif (!div.style) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Support: IE <=9 - 11 only\n\t\t// Style of cloned element affects source element cloned (trac-8908)\n\t\tdiv.style.backgroundClip = \"content-box\";\n\t\tdiv.cloneNode(true).style.backgroundClip = \"\";\n\t\tsupport.clearCloneStyle = div.style.backgroundClip === \"content-box\";\n\n\t\tjQuery.extend(support, {\n\t\t\tboxSizingReliable: function () {\n\t\t\t\tcomputeStyleTests();\n\t\t\t\treturn boxSizingReliableVal;\n\t\t\t},\n\t\t\tpixelBoxStyles: function () {\n\t\t\t\tcomputeStyleTests();\n\t\t\t\treturn pixelBoxStylesVal;\n\t\t\t},\n\t\t\tpixelPosition: function () {\n\t\t\t\tcomputeStyleTests();\n\t\t\t\treturn pixelPositionVal;\n\t\t\t},\n\t\t\treliableMarginLeft: function () {\n\t\t\t\tcomputeStyleTests();\n\t\t\t\treturn reliableMarginLeftVal;\n\t\t\t},\n\t\t\tscrollboxSize: function () {\n\t\t\t\tcomputeStyleTests();\n\t\t\t\treturn scrollboxSizeVal;\n\t\t\t},\n\n\t\t\t// Support: IE 9 - 11+, Edge 15 - 18+\n\t\t\t// IE/Edge misreport `getComputedStyle` of table rows with width/height\n\t\t\t// set in CSS while `offset*` properties report correct values.\n\t\t\t// Behavior in IE 9 is more subtle than in newer versions & it passes\n\t\t\t// some versions of this test; make sure not to make it pass there!\n\t\t\t//\n\t\t\t// Support: Firefox 70+\n\t\t\t// Only Firefox includes border widths\n\t\t\t// in computed dimensions. (gh-4529)\n\t\t\treliableTrDimensions: function () {\n\t\t\t\tvar table, tr, trChild, trStyle;\n\t\t\t\tif (reliableTrDimensionsVal == null) {\n\t\t\t\t\ttable = document.createElement(\"table\");\n\t\t\t\t\ttr = document.createElement(\"tr\");\n\t\t\t\t\ttrChild = document.createElement(\"div\");\n\n\t\t\t\t\ttable.style.cssText = \"position:absolute;left:-11111px;border-collapse:separate\";\n\t\t\t\t\ttr.style.cssText = \"border:1px solid\";\n\n\t\t\t\t\t// Support: Chrome 86+\n\t\t\t\t\t// Height set through cssText does not get applied.\n\t\t\t\t\t// Computed height then comes back as 0.\n\t\t\t\t\ttr.style.height = \"1px\";\n\t\t\t\t\ttrChild.style.height = \"9px\";\n\n\t\t\t\t\t// Support: Android 8 Chrome 86+\n\t\t\t\t\t// In our bodyBackground.html iframe,\n\t\t\t\t\t// display for all div elements is set to \"inline\",\n\t\t\t\t\t// which causes a problem only in Android 8 Chrome 86.\n\t\t\t\t\t// Ensuring the div is display: block\n\t\t\t\t\t// gets around this issue.\n\t\t\t\t\ttrChild.style.display = \"block\";\n\n\t\t\t\t\tdocumentElement\n\t\t\t\t\t\t.appendChild(table)\n\t\t\t\t\t\t.appendChild(tr)\n\t\t\t\t\t\t.appendChild(trChild);\n\n\t\t\t\t\ttrStyle = window.getComputedStyle(tr);\n\t\t\t\t\treliableTrDimensionsVal = (parseInt(trStyle.height, 10) +\n\t\t\t\t\t\tparseInt(trStyle.borderTopWidth, 10) +\n\t\t\t\t\t\tparseInt(trStyle.borderBottomWidth, 10)) === tr.offsetHeight;\n\n\t\t\t\t\tdocumentElement.removeChild(table);\n\t\t\t\t}\n\t\t\t\treturn reliableTrDimensionsVal;\n\t\t\t}\n\t\t});\n\t})();\n\n\n\tfunction curCSS(elem, name, computed) {\n\t\tvar width, minWidth, maxWidth, ret,\n\t\t\tisCustomProp = rcustomProp.test(name),\n\n\t\t\t// Support: Firefox 51+\n\t\t\t// Retrieving style before computed somehow\n\t\t\t// fixes an issue with getting wrong values\n\t\t\t// on detached elements\n\t\t\tstyle = elem.style;\n\n\t\tcomputed = computed || getStyles(elem);\n\n\t\t// getPropertyValue is needed for:\n\t\t//   .css('filter') (IE 9 only, trac-12537)\n\t\t//   .css('--customProperty) (gh-3144)\n\t\tif (computed) {\n\n\t\t\t// Support: IE <=9 - 11+\n\t\t\t// IE only supports `\"float\"` in `getPropertyValue`; in computed styles\n\t\t\t// it's only available as `\"cssFloat\"`. We no longer modify properties\n\t\t\t// sent to `.css()` apart from camelCasing, so we need to check both.\n\t\t\t// Normally, this would create difference in behavior: if\n\t\t\t// `getPropertyValue` returns an empty string, the value returned\n\t\t\t// by `.css()` would be `undefined`. This is usually the case for\n\t\t\t// disconnected elements. However, in IE even disconnected elements\n\t\t\t// with no styles return `\"none\"` for `getPropertyValue( \"float\" )`\n\t\t\tret = computed.getPropertyValue(name) || computed[name];\n\n\t\t\tif (isCustomProp && ret) {\n\n\t\t\t\t// Support: Firefox 105+, Chrome <=105+\n\t\t\t\t// Spec requires trimming whitespace for custom properties (gh-4926).\n\t\t\t\t// Firefox only trims leading whitespace. Chrome just collapses\n\t\t\t\t// both leading & trailing whitespace to a single space.\n\t\t\t\t//\n\t\t\t\t// Fall back to `undefined` if empty string returned.\n\t\t\t\t// This collapses a missing definition with property defined\n\t\t\t\t// and set to an empty string but there's no standard API\n\t\t\t\t// allowing us to differentiate them without a performance penalty\n\t\t\t\t// and returning `undefined` aligns with older jQuery.\n\t\t\t\t//\n\t\t\t\t// rtrimCSS treats U+000D CARRIAGE RETURN and U+000C FORM FEED\n\t\t\t\t// as whitespace while CSS does not, but this is not a problem\n\t\t\t\t// because CSS preprocessing replaces them with U+000A LINE FEED\n\t\t\t\t// (which *is* CSS whitespace)\n\t\t\t\t// https://www.w3.org/TR/css-syntax-3/#input-preprocessing\n\t\t\t\tret = ret.replace(rtrimCSS, \"$1\") || undefined;\n\t\t\t}\n\n\t\t\tif (ret === \"\" && !isAttached(elem)) {\n\t\t\t\tret = jQuery.style(elem, name);\n\t\t\t}\n\n\t\t\t// A tribute to the \"awesome hack by Dean Edwards\"\n\t\t\t// Android Browser returns percentage for some values,\n\t\t\t// but width seems to be reliably pixels.\n\t\t\t// This is against the CSSOM draft spec:\n\t\t\t// https://drafts.csswg.org/cssom/#resolved-values\n\t\t\tif (!support.pixelBoxStyles() && rnumnonpx.test(ret) && rboxStyle.test(name)) {\n\n\t\t\t\t// Remember the original values\n\t\t\t\twidth = style.width;\n\t\t\t\tminWidth = style.minWidth;\n\t\t\t\tmaxWidth = style.maxWidth;\n\n\t\t\t\t// Put in the new values to get a computed value out\n\t\t\t\tstyle.minWidth = style.maxWidth = style.width = ret;\n\t\t\t\tret = computed.width;\n\n\t\t\t\t// Revert the changed values\n\t\t\t\tstyle.width = width;\n\t\t\t\tstyle.minWidth = minWidth;\n\t\t\t\tstyle.maxWidth = maxWidth;\n\t\t\t}\n\t\t}\n\n\t\treturn ret !== undefined ?\n\n\t\t\t// Support: IE <=9 - 11 only\n\t\t\t// IE returns zIndex value as an integer.\n\t\t\tret + \"\" :\n\t\t\tret;\n\t}\n\n\n\tfunction addGetHookIf(conditionFn, hookFn) {\n\n\t\t// Define the hook, we'll check on the first run if it's really needed.\n\t\treturn {\n\t\t\tget: function () {\n\t\t\t\tif (conditionFn()) {\n\n\t\t\t\t\t// Hook not needed (or it's not possible to use it due\n\t\t\t\t\t// to missing dependency), remove it.\n\t\t\t\t\tdelete this.get;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Hook needed; redefine it so that the support test is not executed again.\n\t\t\t\treturn (this.get = hookFn).apply(this, arguments);\n\t\t\t}\n\t\t};\n\t}\n\n\n\tvar cssPrefixes = [\"Webkit\", \"Moz\", \"ms\"],\n\t\temptyStyle = document.createElement(\"div\").style,\n\t\tvendorProps = {};\n\n\t// Return a vendor-prefixed property or undefined\n\tfunction vendorPropName(name) {\n\n\t\t// Check for vendor prefixed names\n\t\tvar capName = name[0].toUpperCase() + name.slice(1),\n\t\t\ti = cssPrefixes.length;\n\n\t\twhile (i--) {\n\t\t\tname = cssPrefixes[i] + capName;\n\t\t\tif (name in emptyStyle) {\n\t\t\t\treturn name;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return a potentially-mapped jQuery.cssProps or vendor prefixed property\n\tfunction finalPropName(name) {\n\t\tvar final = jQuery.cssProps[name] || vendorProps[name];\n\n\t\tif (final) {\n\t\t\treturn final;\n\t\t}\n\t\tif (name in emptyStyle) {\n\t\t\treturn name;\n\t\t}\n\t\treturn vendorProps[name] = vendorPropName(name) || name;\n\t}\n\n\n\tvar\n\n\t\t// Swappable if display is none or starts with table\n\t\t// except \"table\", \"table-cell\", or \"table-caption\"\n\t\t// See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display\n\t\trdisplayswap = /^(none|table(?!-c[ea]).+)/,\n\t\tcssShow = { position: \"absolute\", visibility: \"hidden\", display: \"block\" },\n\t\tcssNormalTransform = {\n\t\t\tletterSpacing: \"0\",\n\t\t\tfontWeight: \"400\"\n\t\t};\n\n\tfunction setPositiveNumber(_elem, value, subtract) {\n\n\t\t// Any relative (+/-) values have already been\n\t\t// normalized at this point\n\t\tvar matches = rcssNum.exec(value);\n\t\treturn matches ?\n\n\t\t\t// Guard against undefined \"subtract\", e.g., when used as in cssHooks\n\t\t\tMath.max(0, matches[2] - (subtract || 0)) + (matches[3] || \"px\") :\n\t\t\tvalue;\n\t}\n\n\tfunction boxModelAdjustment(elem, dimension, box, isBorderBox, styles, computedVal) {\n\t\tvar i = dimension === \"width\" ? 1 : 0,\n\t\t\textra = 0,\n\t\t\tdelta = 0,\n\t\t\tmarginDelta = 0;\n\n\t\t// Adjustment may not be necessary\n\t\tif (box === (isBorderBox ? \"border\" : \"content\")) {\n\t\t\treturn 0;\n\t\t}\n\n\t\tfor (; i < 4; i += 2) {\n\n\t\t\t// Both box models exclude margin\n\t\t\t// Count margin delta separately to only add it after scroll gutter adjustment.\n\t\t\t// This is needed to make negative margins work with `outerHeight( true )` (gh-3982).\n\t\t\tif (box === \"margin\") {\n\t\t\t\tmarginDelta += jQuery.css(elem, box + cssExpand[i], true, styles);\n\t\t\t}\n\n\t\t\t// If we get here with a content-box, we're seeking \"padding\" or \"border\" or \"margin\"\n\t\t\tif (!isBorderBox) {\n\n\t\t\t\t// Add padding\n\t\t\t\tdelta += jQuery.css(elem, \"padding\" + cssExpand[i], true, styles);\n\n\t\t\t\t// For \"border\" or \"margin\", add border\n\t\t\t\tif (box !== \"padding\") {\n\t\t\t\t\tdelta += jQuery.css(elem, \"border\" + cssExpand[i] + \"Width\", true, styles);\n\n\t\t\t\t\t// But still keep track of it otherwise\n\t\t\t\t} else {\n\t\t\t\t\textra += jQuery.css(elem, \"border\" + cssExpand[i] + \"Width\", true, styles);\n\t\t\t\t}\n\n\t\t\t\t// If we get here with a border-box (content + padding + border), we're seeking \"content\" or\n\t\t\t\t// \"padding\" or \"margin\"\n\t\t\t} else {\n\n\t\t\t\t// For \"content\", subtract padding\n\t\t\t\tif (box === \"content\") {\n\t\t\t\t\tdelta -= jQuery.css(elem, \"padding\" + cssExpand[i], true, styles);\n\t\t\t\t}\n\n\t\t\t\t// For \"content\" or \"padding\", subtract border\n\t\t\t\tif (box !== \"margin\") {\n\t\t\t\t\tdelta -= jQuery.css(elem, \"border\" + cssExpand[i] + \"Width\", true, styles);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Account for positive content-box scroll gutter when requested by providing computedVal\n\t\tif (!isBorderBox && computedVal >= 0) {\n\n\t\t\t// offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border\n\t\t\t// Assuming integer scroll gutter, subtract the rest and round down\n\t\t\tdelta += Math.max(0, Math.ceil(\n\t\t\t\telem[\"offset\" + dimension[0].toUpperCase() + dimension.slice(1)] -\n\t\t\t\tcomputedVal -\n\t\t\t\tdelta -\n\t\t\t\textra -\n\t\t\t\t0.5\n\n\t\t\t\t// If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter\n\t\t\t\t// Use an explicit zero to avoid NaN (gh-3964)\n\t\t\t)) || 0;\n\t\t}\n\n\t\treturn delta + marginDelta;\n\t}\n\n\tfunction getWidthOrHeight(elem, dimension, extra) {\n\n\t\t// Start with computed style\n\t\tvar styles = getStyles(elem),\n\n\t\t\t// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322).\n\t\t\t// Fake content-box until we know it's needed to know the true value.\n\t\t\tboxSizingNeeded = !support.boxSizingReliable() || extra,\n\t\t\tisBorderBox = boxSizingNeeded &&\n\t\t\t\tjQuery.css(elem, \"boxSizing\", false, styles) === \"border-box\",\n\t\t\tvalueIsBorderBox = isBorderBox,\n\n\t\t\tval = curCSS(elem, dimension, styles),\n\t\t\toffsetProp = \"offset\" + dimension[0].toUpperCase() + dimension.slice(1);\n\n\t\t// Support: Firefox <=54\n\t\t// Return a confounding non-pixel value or feign ignorance, as appropriate.\n\t\tif (rnumnonpx.test(val)) {\n\t\t\tif (!extra) {\n\t\t\t\treturn val;\n\t\t\t}\n\t\t\tval = \"auto\";\n\t\t}\n\n\n\t\t// Support: IE 9 - 11 only\n\t\t// Use offsetWidth/offsetHeight for when box sizing is unreliable.\n\t\t// In those cases, the computed value can be trusted to be border-box.\n\t\tif ((!support.boxSizingReliable() && isBorderBox ||\n\n\t\t\t// Support: IE 10 - 11+, Edge 15 - 18+\n\t\t\t// IE/Edge misreport `getComputedStyle` of table rows with width/height\n\t\t\t// set in CSS while `offset*` properties report correct values.\n\t\t\t// Interestingly, in some cases IE 9 doesn't suffer from this issue.\n\t\t\t!support.reliableTrDimensions() && nodeName(elem, \"tr\") ||\n\n\t\t\t// Fall back to offsetWidth/offsetHeight when value is \"auto\"\n\t\t\t// This happens for inline elements with no explicit setting (gh-3571)\n\t\t\tval === \"auto\" ||\n\n\t\t\t// Support: Android <=4.1 - 4.3 only\n\t\t\t// Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602)\n\t\t\t!parseFloat(val) && jQuery.css(elem, \"display\", false, styles) === \"inline\") &&\n\n\t\t\t// Make sure the element is visible & connected\n\t\t\telem.getClientRects().length) {\n\n\t\t\tisBorderBox = jQuery.css(elem, \"boxSizing\", false, styles) === \"border-box\";\n\n\t\t\t// Where available, offsetWidth/offsetHeight approximate border box dimensions.\n\t\t\t// Where not available (e.g., SVG), assume unreliable box-sizing and interpret the\n\t\t\t// retrieved value as a content box dimension.\n\t\t\tvalueIsBorderBox = offsetProp in elem;\n\t\t\tif (valueIsBorderBox) {\n\t\t\t\tval = elem[offsetProp];\n\t\t\t}\n\t\t}\n\n\t\t// Normalize \"\" and auto\n\t\tval = parseFloat(val) || 0;\n\n\t\t// Adjust for the element's box model\n\t\treturn (val +\n\t\t\tboxModelAdjustment(\n\t\t\t\telem,\n\t\t\t\tdimension,\n\t\t\t\textra || (isBorderBox ? \"border\" : \"content\"),\n\t\t\t\tvalueIsBorderBox,\n\t\t\t\tstyles,\n\n\t\t\t\t// Provide the current computed size to request scroll gutter calculation (gh-3589)\n\t\t\t\tval\n\t\t\t)\n\t\t) + \"px\";\n\t}\n\n\tjQuery.extend({\n\n\t\t// Add in style property hooks for overriding the default\n\t\t// behavior of getting and setting a style property\n\t\tcssHooks: {\n\t\t\topacity: {\n\t\t\t\tget: function (elem, computed) {\n\t\t\t\t\tif (computed) {\n\n\t\t\t\t\t\t// We should always get a number back from opacity\n\t\t\t\t\t\tvar ret = curCSS(elem, \"opacity\");\n\t\t\t\t\t\treturn ret === \"\" ? \"1\" : ret;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t// Don't automatically add \"px\" to these possibly-unitless properties\n\t\tcssNumber: {\n\t\t\tanimationIterationCount: true,\n\t\t\taspectRatio: true,\n\t\t\tborderImageSlice: true,\n\t\t\tcolumnCount: true,\n\t\t\tflexGrow: true,\n\t\t\tflexShrink: true,\n\t\t\tfontWeight: true,\n\t\t\tgridArea: true,\n\t\t\tgridColumn: true,\n\t\t\tgridColumnEnd: true,\n\t\t\tgridColumnStart: true,\n\t\t\tgridRow: true,\n\t\t\tgridRowEnd: true,\n\t\t\tgridRowStart: true,\n\t\t\tlineHeight: true,\n\t\t\topacity: true,\n\t\t\torder: true,\n\t\t\torphans: true,\n\t\t\tscale: true,\n\t\t\twidows: true,\n\t\t\tzIndex: true,\n\t\t\tzoom: true,\n\n\t\t\t// SVG-related\n\t\t\tfillOpacity: true,\n\t\t\tfloodOpacity: true,\n\t\t\tstopOpacity: true,\n\t\t\tstrokeMiterlimit: true,\n\t\t\tstrokeOpacity: true\n\t\t},\n\n\t\t// Add in properties whose names you wish to fix before\n\t\t// setting or getting the value\n\t\tcssProps: {},\n\n\t\t// Get and set the style property on a DOM Node\n\t\tstyle: function (elem, name, value, extra) {\n\n\t\t\t// Don't set styles on text and comment nodes\n\t\t\tif (!elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Make sure that we're working with the right name\n\t\t\tvar ret, type, hooks,\n\t\t\t\torigName = camelCase(name),\n\t\t\t\tisCustomProp = rcustomProp.test(name),\n\t\t\t\tstyle = elem.style;\n\n\t\t\t// Make sure that we're working with the right name. We don't\n\t\t\t// want to query the value if it is a CSS custom property\n\t\t\t// since they are user-defined.\n\t\t\tif (!isCustomProp) {\n\t\t\t\tname = finalPropName(origName);\n\t\t\t}\n\n\t\t\t// Gets hook for the prefixed version, then unprefixed version\n\t\t\thooks = jQuery.cssHooks[name] || jQuery.cssHooks[origName];\n\n\t\t\t// Check if we're setting a value\n\t\t\tif (value !== undefined) {\n\t\t\t\ttype = typeof value;\n\n\t\t\t\t// Convert \"+=\" or \"-=\" to relative numbers (trac-7345)\n\t\t\t\tif (type === \"string\" && (ret = rcssNum.exec(value)) && ret[1]) {\n\t\t\t\t\tvalue = adjustCSS(elem, name, ret);\n\n\t\t\t\t\t// Fixes bug trac-9237\n\t\t\t\t\ttype = \"number\";\n\t\t\t\t}\n\n\t\t\t\t// Make sure that null and NaN values aren't set (trac-7116)\n\t\t\t\tif (value == null || value !== value) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// If a number was passed in, add the unit (except for certain CSS properties)\n\t\t\t\t// The isCustomProp check can be removed in jQuery 4.0 when we only auto-append\n\t\t\t\t// \"px\" to a few hardcoded values.\n\t\t\t\tif (type === \"number\" && !isCustomProp) {\n\t\t\t\t\tvalue += ret && ret[3] || (jQuery.cssNumber[origName] ? \"\" : \"px\");\n\t\t\t\t}\n\n\t\t\t\t// background-* props affect original clone's values\n\t\t\t\tif (!support.clearCloneStyle && value === \"\" && name.indexOf(\"background\") === 0) {\n\t\t\t\t\tstyle[name] = \"inherit\";\n\t\t\t\t}\n\n\t\t\t\t// If a hook was provided, use that value, otherwise just set the specified value\n\t\t\t\tif (!hooks || !(\"set\" in hooks) ||\n\t\t\t\t\t(value = hooks.set(elem, value, extra)) !== undefined) {\n\n\t\t\t\t\tif (isCustomProp) {\n\t\t\t\t\t\tstyle.setProperty(name, value);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tstyle[name] = value;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\t// If a hook was provided get the non-computed value from there\n\t\t\t\tif (hooks && \"get\" in hooks &&\n\t\t\t\t\t(ret = hooks.get(elem, false, extra)) !== undefined) {\n\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\n\t\t\t\t// Otherwise just get the value from the style object\n\t\t\t\treturn style[name];\n\t\t\t}\n\t\t},\n\n\t\tcss: function (elem, name, extra, styles) {\n\t\t\tvar val, num, hooks,\n\t\t\t\torigName = camelCase(name),\n\t\t\t\tisCustomProp = rcustomProp.test(name);\n\n\t\t\t// Make sure that we're working with the right name. We don't\n\t\t\t// want to modify the value if it is a CSS custom property\n\t\t\t// since they are user-defined.\n\t\t\tif (!isCustomProp) {\n\t\t\t\tname = finalPropName(origName);\n\t\t\t}\n\n\t\t\t// Try prefixed name followed by the unprefixed name\n\t\t\thooks = jQuery.cssHooks[name] || jQuery.cssHooks[origName];\n\n\t\t\t// If a hook was provided get the computed value from there\n\t\t\tif (hooks && \"get\" in hooks) {\n\t\t\t\tval = hooks.get(elem, true, extra);\n\t\t\t}\n\n\t\t\t// Otherwise, if a way to get the computed value exists, use that\n\t\t\tif (val === undefined) {\n\t\t\t\tval = curCSS(elem, name, styles);\n\t\t\t}\n\n\t\t\t// Convert \"normal\" to computed value\n\t\t\tif (val === \"normal\" && name in cssNormalTransform) {\n\t\t\t\tval = cssNormalTransform[name];\n\t\t\t}\n\n\t\t\t// Make numeric if forced or a qualifier was provided and val looks numeric\n\t\t\tif (extra === \"\" || extra) {\n\t\t\t\tnum = parseFloat(val);\n\t\t\t\treturn extra === true || isFinite(num) ? num || 0 : val;\n\t\t\t}\n\n\t\t\treturn val;\n\t\t}\n\t});\n\n\tjQuery.each([\"height\", \"width\"], function (_i, dimension) {\n\t\tjQuery.cssHooks[dimension] = {\n\t\t\tget: function (elem, computed, extra) {\n\t\t\t\tif (computed) {\n\n\t\t\t\t\t// Certain elements can have dimension info if we invisibly show them\n\t\t\t\t\t// but it must have a current display style that would benefit\n\t\t\t\t\treturn rdisplayswap.test(jQuery.css(elem, \"display\")) &&\n\n\t\t\t\t\t\t// Support: Safari 8+\n\t\t\t\t\t\t// Table columns in Safari have non-zero offsetWidth & zero\n\t\t\t\t\t\t// getBoundingClientRect().width unless display is changed.\n\t\t\t\t\t\t// Support: IE <=11 only\n\t\t\t\t\t\t// Running getBoundingClientRect on a disconnected node\n\t\t\t\t\t\t// in IE throws an error.\n\t\t\t\t\t\t(!elem.getClientRects().length || !elem.getBoundingClientRect().width) ?\n\t\t\t\t\t\tswap(elem, cssShow, function () {\n\t\t\t\t\t\t\treturn getWidthOrHeight(elem, dimension, extra);\n\t\t\t\t\t\t}) :\n\t\t\t\t\t\tgetWidthOrHeight(elem, dimension, extra);\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tset: function (elem, value, extra) {\n\t\t\t\tvar matches,\n\t\t\t\t\tstyles = getStyles(elem),\n\n\t\t\t\t\t// Only read styles.position if the test has a chance to fail\n\t\t\t\t\t// to avoid forcing a reflow.\n\t\t\t\t\tscrollboxSizeBuggy = !support.scrollboxSize() &&\n\t\t\t\t\t\tstyles.position === \"absolute\",\n\n\t\t\t\t\t// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991)\n\t\t\t\t\tboxSizingNeeded = scrollboxSizeBuggy || extra,\n\t\t\t\t\tisBorderBox = boxSizingNeeded &&\n\t\t\t\t\t\tjQuery.css(elem, \"boxSizing\", false, styles) === \"border-box\",\n\t\t\t\t\tsubtract = extra ?\n\t\t\t\t\t\tboxModelAdjustment(\n\t\t\t\t\t\t\telem,\n\t\t\t\t\t\t\tdimension,\n\t\t\t\t\t\t\textra,\n\t\t\t\t\t\t\tisBorderBox,\n\t\t\t\t\t\t\tstyles\n\t\t\t\t\t\t) :\n\t\t\t\t\t\t0;\n\n\t\t\t\t// Account for unreliable border-box dimensions by comparing offset* to computed and\n\t\t\t\t// faking a content-box to get border and padding (gh-3699)\n\t\t\t\tif (isBorderBox && scrollboxSizeBuggy) {\n\t\t\t\t\tsubtract -= Math.ceil(\n\t\t\t\t\t\telem[\"offset\" + dimension[0].toUpperCase() + dimension.slice(1)] -\n\t\t\t\t\t\tparseFloat(styles[dimension]) -\n\t\t\t\t\t\tboxModelAdjustment(elem, dimension, \"border\", false, styles) -\n\t\t\t\t\t\t0.5\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\t// Convert to pixels if value adjustment is needed\n\t\t\t\tif (subtract && (matches = rcssNum.exec(value)) &&\n\t\t\t\t\t(matches[3] || \"px\") !== \"px\") {\n\n\t\t\t\t\telem.style[dimension] = value;\n\t\t\t\t\tvalue = jQuery.css(elem, dimension);\n\t\t\t\t}\n\n\t\t\t\treturn setPositiveNumber(elem, value, subtract);\n\t\t\t}\n\t\t};\n\t});\n\n\tjQuery.cssHooks.marginLeft = addGetHookIf(support.reliableMarginLeft,\n\t\tfunction (elem, computed) {\n\t\t\tif (computed) {\n\t\t\t\treturn (parseFloat(curCSS(elem, \"marginLeft\")) ||\n\t\t\t\t\telem.getBoundingClientRect().left -\n\t\t\t\t\tswap(elem, { marginLeft: 0 }, function () {\n\t\t\t\t\t\treturn elem.getBoundingClientRect().left;\n\t\t\t\t\t})\n\t\t\t\t) + \"px\";\n\t\t\t}\n\t\t}\n\t);\n\n\t// These hooks are used by animate to expand properties\n\tjQuery.each({\n\t\tmargin: \"\",\n\t\tpadding: \"\",\n\t\tborder: \"Width\"\n\t}, function (prefix, suffix) {\n\t\tjQuery.cssHooks[prefix + suffix] = {\n\t\t\texpand: function (value) {\n\t\t\t\tvar i = 0,\n\t\t\t\t\texpanded = {},\n\n\t\t\t\t\t// Assumes a single number if not a string\n\t\t\t\t\tparts = typeof value === \"string\" ? value.split(\" \") : [value];\n\n\t\t\t\tfor (; i < 4; i++) {\n\t\t\t\t\texpanded[prefix + cssExpand[i] + suffix] =\n\t\t\t\t\t\tparts[i] || parts[i - 2] || parts[0];\n\t\t\t\t}\n\n\t\t\t\treturn expanded;\n\t\t\t}\n\t\t};\n\n\t\tif (prefix !== \"margin\") {\n\t\t\tjQuery.cssHooks[prefix + suffix].set = setPositiveNumber;\n\t\t}\n\t});\n\n\tjQuery.fn.extend({\n\t\tcss: function (name, value) {\n\t\t\treturn access(this, function (elem, name, value) {\n\t\t\t\tvar styles, len,\n\t\t\t\t\tmap = {},\n\t\t\t\t\ti = 0;\n\n\t\t\t\tif (Array.isArray(name)) {\n\t\t\t\t\tstyles = getStyles(elem);\n\t\t\t\t\tlen = name.length;\n\n\t\t\t\t\tfor (; i < len; i++) {\n\t\t\t\t\t\tmap[name[i]] = jQuery.css(elem, name[i], false, styles);\n\t\t\t\t\t}\n\n\t\t\t\t\treturn map;\n\t\t\t\t}\n\n\t\t\t\treturn value !== undefined ?\n\t\t\t\t\tjQuery.style(elem, name, value) :\n\t\t\t\t\tjQuery.css(elem, name);\n\t\t\t}, name, value, arguments.length > 1);\n\t\t}\n\t});\n\n\n\tfunction Tween(elem, options, prop, end, easing) {\n\t\treturn new Tween.prototype.init(elem, options, prop, end, easing);\n\t}\n\tjQuery.Tween = Tween;\n\n\tTween.prototype = {\n\t\tconstructor: Tween,\n\t\tinit: function (elem, options, prop, end, easing, unit) {\n\t\t\tthis.elem = elem;\n\t\t\tthis.prop = prop;\n\t\t\tthis.easing = easing || jQuery.easing._default;\n\t\t\tthis.options = options;\n\t\t\tthis.start = this.now = this.cur();\n\t\t\tthis.end = end;\n\t\t\tthis.unit = unit || (jQuery.cssNumber[prop] ? \"\" : \"px\");\n\t\t},\n\t\tcur: function () {\n\t\t\tvar hooks = Tween.propHooks[this.prop];\n\n\t\t\treturn hooks && hooks.get ?\n\t\t\t\thooks.get(this) :\n\t\t\t\tTween.propHooks._default.get(this);\n\t\t},\n\t\trun: function (percent) {\n\t\t\tvar eased,\n\t\t\t\thooks = Tween.propHooks[this.prop];\n\n\t\t\tif (this.options.duration) {\n\t\t\t\tthis.pos = eased = jQuery.easing[this.easing](\n\t\t\t\t\tpercent, this.options.duration * percent, 0, 1, this.options.duration\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tthis.pos = eased = percent;\n\t\t\t}\n\t\t\tthis.now = (this.end - this.start) * eased + this.start;\n\n\t\t\tif (this.options.step) {\n\t\t\t\tthis.options.step.call(this.elem, this.now, this);\n\t\t\t}\n\n\t\t\tif (hooks && hooks.set) {\n\t\t\t\thooks.set(this);\n\t\t\t} else {\n\t\t\t\tTween.propHooks._default.set(this);\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t};\n\n\tTween.prototype.init.prototype = Tween.prototype;\n\n\tTween.propHooks = {\n\t\t_default: {\n\t\t\tget: function (tween) {\n\t\t\t\tvar result;\n\n\t\t\t\t// Use a property on the element directly when it is not a DOM element,\n\t\t\t\t// or when there is no matching style property that exists.\n\t\t\t\tif (tween.elem.nodeType !== 1 ||\n\t\t\t\t\ttween.elem[tween.prop] != null && tween.elem.style[tween.prop] == null) {\n\t\t\t\t\treturn tween.elem[tween.prop];\n\t\t\t\t}\n\n\t\t\t\t// Passing an empty string as a 3rd parameter to .css will automatically\n\t\t\t\t// attempt a parseFloat and fallback to a string if the parse fails.\n\t\t\t\t// Simple values such as \"10px\" are parsed to Float;\n\t\t\t\t// complex values such as \"rotate(1rad)\" are returned as-is.\n\t\t\t\tresult = jQuery.css(tween.elem, tween.prop, \"\");\n\n\t\t\t\t// Empty strings, null, undefined and \"auto\" are converted to 0.\n\t\t\t\treturn !result || result === \"auto\" ? 0 : result;\n\t\t\t},\n\t\t\tset: function (tween) {\n\n\t\t\t\t// Use step hook for back compat.\n\t\t\t\t// Use cssHook if its there.\n\t\t\t\t// Use .style if available and use plain properties where available.\n\t\t\t\tif (jQuery.fx.step[tween.prop]) {\n\t\t\t\t\tjQuery.fx.step[tween.prop](tween);\n\t\t\t\t} else if (tween.elem.nodeType === 1 && (\n\t\t\t\t\tjQuery.cssHooks[tween.prop] ||\n\t\t\t\t\ttween.elem.style[finalPropName(tween.prop)] != null)) {\n\t\t\t\t\tjQuery.style(tween.elem, tween.prop, tween.now + tween.unit);\n\t\t\t\t} else {\n\t\t\t\t\ttween.elem[tween.prop] = tween.now;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t// Support: IE <=9 only\n\t// Panic based approach to setting things on disconnected nodes\n\tTween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {\n\t\tset: function (tween) {\n\t\t\tif (tween.elem.nodeType && tween.elem.parentNode) {\n\t\t\t\ttween.elem[tween.prop] = tween.now;\n\t\t\t}\n\t\t}\n\t};\n\n\tjQuery.easing = {\n\t\tlinear: function (p) {\n\t\t\treturn p;\n\t\t},\n\t\tswing: function (p) {\n\t\t\treturn 0.5 - Math.cos(p * Math.PI) / 2;\n\t\t},\n\t\t_default: \"swing\"\n\t};\n\n\tjQuery.fx = Tween.prototype.init;\n\n\t// Back compat <1.8 extension point\n\tjQuery.fx.step = {};\n\n\n\n\n\tvar\n\t\tfxNow, inProgress,\n\t\trfxtypes = /^(?:toggle|show|hide)$/,\n\t\trrun = /queueHooks$/;\n\n\tfunction schedule() {\n\t\tif (inProgress) {\n\t\t\tif (document.hidden === false && window.requestAnimationFrame) {\n\t\t\t\twindow.requestAnimationFrame(schedule);\n\t\t\t} else {\n\t\t\t\twindow.setTimeout(schedule, jQuery.fx.interval);\n\t\t\t}\n\n\t\t\tjQuery.fx.tick();\n\t\t}\n\t}\n\n\t// Animations created synchronously will run synchronously\n\tfunction createFxNow() {\n\t\twindow.setTimeout(function () {\n\t\t\tfxNow = undefined;\n\t\t});\n\t\treturn (fxNow = Date.now());\n\t}\n\n\t// Generate parameters to create a standard animation\n\tfunction genFx(type, includeWidth) {\n\t\tvar which,\n\t\t\ti = 0,\n\t\t\tattrs = { height: type };\n\n\t\t// If we include width, step value is 1 to do all cssExpand values,\n\t\t// otherwise step value is 2 to skip over Left and Right\n\t\tincludeWidth = includeWidth ? 1 : 0;\n\t\tfor (; i < 4; i += 2 - includeWidth) {\n\t\t\twhich = cssExpand[i];\n\t\t\tattrs[\"margin\" + which] = attrs[\"padding\" + which] = type;\n\t\t}\n\n\t\tif (includeWidth) {\n\t\t\tattrs.opacity = attrs.width = type;\n\t\t}\n\n\t\treturn attrs;\n\t}\n\n\tfunction createTween(value, prop, animation) {\n\t\tvar tween,\n\t\t\tcollection = (Animation.tweeners[prop] || []).concat(Animation.tweeners[\"*\"]),\n\t\t\tindex = 0,\n\t\t\tlength = collection.length;\n\t\tfor (; index < length; index++) {\n\t\t\tif ((tween = collection[index].call(animation, prop, value))) {\n\n\t\t\t\t// We're done with this property\n\t\t\t\treturn tween;\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction defaultPrefilter(elem, props, opts) {\n\t\tvar prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display,\n\t\t\tisBox = \"width\" in props || \"height\" in props,\n\t\t\tanim = this,\n\t\t\torig = {},\n\t\t\tstyle = elem.style,\n\t\t\thidden = elem.nodeType && isHiddenWithinTree(elem),\n\t\t\tdataShow = dataPriv.get(elem, \"fxshow\");\n\n\t\t// Queue-skipping animations hijack the fx hooks\n\t\tif (!opts.queue) {\n\t\t\thooks = jQuery._queueHooks(elem, \"fx\");\n\t\t\tif (hooks.unqueued == null) {\n\t\t\t\thooks.unqueued = 0;\n\t\t\t\toldfire = hooks.empty.fire;\n\t\t\t\thooks.empty.fire = function () {\n\t\t\t\t\tif (!hooks.unqueued) {\n\t\t\t\t\t\toldfire();\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t\thooks.unqueued++;\n\n\t\t\tanim.always(function () {\n\n\t\t\t\t// Ensure the complete handler is called before this completes\n\t\t\t\tanim.always(function () {\n\t\t\t\t\thooks.unqueued--;\n\t\t\t\t\tif (!jQuery.queue(elem, \"fx\").length) {\n\t\t\t\t\t\thooks.empty.fire();\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\n\t\t// Detect show/hide animations\n\t\tfor (prop in props) {\n\t\t\tvalue = props[prop];\n\t\t\tif (rfxtypes.test(value)) {\n\t\t\t\tdelete props[prop];\n\t\t\t\ttoggle = toggle || value === \"toggle\";\n\t\t\t\tif (value === (hidden ? \"hide\" : \"show\")) {\n\n\t\t\t\t\t// Pretend to be hidden if this is a \"show\" and\n\t\t\t\t\t// there is still data from a stopped show/hide\n\t\t\t\t\tif (value === \"show\" && dataShow && dataShow[prop] !== undefined) {\n\t\t\t\t\t\thidden = true;\n\n\t\t\t\t\t\t// Ignore all other no-op show/hide data\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\torig[prop] = dataShow && dataShow[prop] || jQuery.style(elem, prop);\n\t\t\t}\n\t\t}\n\n\t\t// Bail out if this is a no-op like .hide().hide()\n\t\tpropTween = !jQuery.isEmptyObject(props);\n\t\tif (!propTween && jQuery.isEmptyObject(orig)) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Restrict \"overflow\" and \"display\" styles during box animations\n\t\tif (isBox && elem.nodeType === 1) {\n\n\t\t\t// Support: IE <=9 - 11, Edge 12 - 15\n\t\t\t// Record all 3 overflow attributes because IE does not infer the shorthand\n\t\t\t// from identically-valued overflowX and overflowY and Edge just mirrors\n\t\t\t// the overflowX value there.\n\t\t\topts.overflow = [style.overflow, style.overflowX, style.overflowY];\n\n\t\t\t// Identify a display type, preferring old show/hide data over the CSS cascade\n\t\t\trestoreDisplay = dataShow && dataShow.display;\n\t\t\tif (restoreDisplay == null) {\n\t\t\t\trestoreDisplay = dataPriv.get(elem, \"display\");\n\t\t\t}\n\t\t\tdisplay = jQuery.css(elem, \"display\");\n\t\t\tif (display === \"none\") {\n\t\t\t\tif (restoreDisplay) {\n\t\t\t\t\tdisplay = restoreDisplay;\n\t\t\t\t} else {\n\n\t\t\t\t\t// Get nonempty value(s) by temporarily forcing visibility\n\t\t\t\t\tshowHide([elem], true);\n\t\t\t\t\trestoreDisplay = elem.style.display || restoreDisplay;\n\t\t\t\t\tdisplay = jQuery.css(elem, \"display\");\n\t\t\t\t\tshowHide([elem]);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Animate inline elements as inline-block\n\t\t\tif (display === \"inline\" || display === \"inline-block\" && restoreDisplay != null) {\n\t\t\t\tif (jQuery.css(elem, \"float\") === \"none\") {\n\n\t\t\t\t\t// Restore the original display value at the end of pure show/hide animations\n\t\t\t\t\tif (!propTween) {\n\t\t\t\t\t\tanim.done(function () {\n\t\t\t\t\t\t\tstyle.display = restoreDisplay;\n\t\t\t\t\t\t});\n\t\t\t\t\t\tif (restoreDisplay == null) {\n\t\t\t\t\t\t\tdisplay = style.display;\n\t\t\t\t\t\t\trestoreDisplay = display === \"none\" ? \"\" : display;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tstyle.display = \"inline-block\";\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (opts.overflow) {\n\t\t\tstyle.overflow = \"hidden\";\n\t\t\tanim.always(function () {\n\t\t\t\tstyle.overflow = opts.overflow[0];\n\t\t\t\tstyle.overflowX = opts.overflow[1];\n\t\t\t\tstyle.overflowY = opts.overflow[2];\n\t\t\t});\n\t\t}\n\n\t\t// Implement show/hide animations\n\t\tpropTween = false;\n\t\tfor (prop in orig) {\n\n\t\t\t// General show/hide setup for this element animation\n\t\t\tif (!propTween) {\n\t\t\t\tif (dataShow) {\n\t\t\t\t\tif (\"hidden\" in dataShow) {\n\t\t\t\t\t\thidden = dataShow.hidden;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tdataShow = dataPriv.access(elem, \"fxshow\", { display: restoreDisplay });\n\t\t\t\t}\n\n\t\t\t\t// Store hidden/visible for toggle so `.stop().toggle()` \"reverses\"\n\t\t\t\tif (toggle) {\n\t\t\t\t\tdataShow.hidden = !hidden;\n\t\t\t\t}\n\n\t\t\t\t// Show elements before animating them\n\t\t\t\tif (hidden) {\n\t\t\t\t\tshowHide([elem], true);\n\t\t\t\t}\n\n\t\t\t\t/* eslint-disable no-loop-func */\n\n\t\t\t\tanim.done(function () {\n\n\t\t\t\t\t/* eslint-enable no-loop-func */\n\n\t\t\t\t\t// The final step of a \"hide\" animation is actually hiding the element\n\t\t\t\t\tif (!hidden) {\n\t\t\t\t\t\tshowHide([elem]);\n\t\t\t\t\t}\n\t\t\t\t\tdataPriv.remove(elem, \"fxshow\");\n\t\t\t\t\tfor (prop in orig) {\n\t\t\t\t\t\tjQuery.style(elem, prop, orig[prop]);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// Per-property setup\n\t\t\tpropTween = createTween(hidden ? dataShow[prop] : 0, prop, anim);\n\t\t\tif (!(prop in dataShow)) {\n\t\t\t\tdataShow[prop] = propTween.start;\n\t\t\t\tif (hidden) {\n\t\t\t\t\tpropTween.end = propTween.start;\n\t\t\t\t\tpropTween.start = 0;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction propFilter(props, specialEasing) {\n\t\tvar index, name, easing, value, hooks;\n\n\t\t// camelCase, specialEasing and expand cssHook pass\n\t\tfor (index in props) {\n\t\t\tname = camelCase(index);\n\t\t\teasing = specialEasing[name];\n\t\t\tvalue = props[index];\n\t\t\tif (Array.isArray(value)) {\n\t\t\t\teasing = value[1];\n\t\t\t\tvalue = props[index] = value[0];\n\t\t\t}\n\n\t\t\tif (index !== name) {\n\t\t\t\tprops[name] = value;\n\t\t\t\tdelete props[index];\n\t\t\t}\n\n\t\t\thooks = jQuery.cssHooks[name];\n\t\t\tif (hooks && \"expand\" in hooks) {\n\t\t\t\tvalue = hooks.expand(value);\n\t\t\t\tdelete props[name];\n\n\t\t\t\t// Not quite $.extend, this won't overwrite existing keys.\n\t\t\t\t// Reusing 'index' because we have the correct \"name\"\n\t\t\t\tfor (index in value) {\n\t\t\t\t\tif (!(index in props)) {\n\t\t\t\t\t\tprops[index] = value[index];\n\t\t\t\t\t\tspecialEasing[index] = easing;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tspecialEasing[name] = easing;\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction Animation(elem, properties, options) {\n\t\tvar result,\n\t\t\tstopped,\n\t\t\tindex = 0,\n\t\t\tlength = Animation.prefilters.length,\n\t\t\tdeferred = jQuery.Deferred().always(function () {\n\n\t\t\t\t// Don't match elem in the :animated selector\n\t\t\t\tdelete tick.elem;\n\t\t\t}),\n\t\t\ttick = function () {\n\t\t\t\tif (stopped) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tvar currentTime = fxNow || createFxNow(),\n\t\t\t\t\tremaining = Math.max(0, animation.startTime + animation.duration - currentTime),\n\n\t\t\t\t\t// Support: Android 2.3 only\n\t\t\t\t\t// Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (trac-12497)\n\t\t\t\t\ttemp = remaining / animation.duration || 0,\n\t\t\t\t\tpercent = 1 - temp,\n\t\t\t\t\tindex = 0,\n\t\t\t\t\tlength = animation.tweens.length;\n\n\t\t\t\tfor (; index < length; index++) {\n\t\t\t\t\tanimation.tweens[index].run(percent);\n\t\t\t\t}\n\n\t\t\t\tdeferred.notifyWith(elem, [animation, percent, remaining]);\n\n\t\t\t\t// If there's more to do, yield\n\t\t\t\tif (percent < 1 && length) {\n\t\t\t\t\treturn remaining;\n\t\t\t\t}\n\n\t\t\t\t// If this was an empty animation, synthesize a final progress notification\n\t\t\t\tif (!length) {\n\t\t\t\t\tdeferred.notifyWith(elem, [animation, 1, 0]);\n\t\t\t\t}\n\n\t\t\t\t// Resolve the animation and report its conclusion\n\t\t\t\tdeferred.resolveWith(elem, [animation]);\n\t\t\t\treturn false;\n\t\t\t},\n\t\t\tanimation = deferred.promise({\n\t\t\t\telem: elem,\n\t\t\t\tprops: jQuery.extend({}, properties),\n\t\t\t\topts: jQuery.extend(true, {\n\t\t\t\t\tspecialEasing: {},\n\t\t\t\t\teasing: jQuery.easing._default\n\t\t\t\t}, options),\n\t\t\t\toriginalProperties: properties,\n\t\t\t\toriginalOptions: options,\n\t\t\t\tstartTime: fxNow || createFxNow(),\n\t\t\t\tduration: options.duration,\n\t\t\t\ttweens: [],\n\t\t\t\tcreateTween: function (prop, end) {\n\t\t\t\t\tvar tween = jQuery.Tween(elem, animation.opts, prop, end,\n\t\t\t\t\t\tanimation.opts.specialEasing[prop] || animation.opts.easing);\n\t\t\t\t\tanimation.tweens.push(tween);\n\t\t\t\t\treturn tween;\n\t\t\t\t},\n\t\t\t\tstop: function (gotoEnd) {\n\t\t\t\t\tvar index = 0,\n\n\t\t\t\t\t\t// If we are going to the end, we want to run all the tweens\n\t\t\t\t\t\t// otherwise we skip this part\n\t\t\t\t\t\tlength = gotoEnd ? animation.tweens.length : 0;\n\t\t\t\t\tif (stopped) {\n\t\t\t\t\t\treturn this;\n\t\t\t\t\t}\n\t\t\t\t\tstopped = true;\n\t\t\t\t\tfor (; index < length; index++) {\n\t\t\t\t\t\tanimation.tweens[index].run(1);\n\t\t\t\t\t}\n\n\t\t\t\t\t// Resolve when we played the last frame; otherwise, reject\n\t\t\t\t\tif (gotoEnd) {\n\t\t\t\t\t\tdeferred.notifyWith(elem, [animation, 1, 0]);\n\t\t\t\t\t\tdeferred.resolveWith(elem, [animation, gotoEnd]);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdeferred.rejectWith(elem, [animation, gotoEnd]);\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t}),\n\t\t\tprops = animation.props;\n\n\t\tpropFilter(props, animation.opts.specialEasing);\n\n\t\tfor (; index < length; index++) {\n\t\t\tresult = Animation.prefilters[index].call(animation, elem, props, animation.opts);\n\t\t\tif (result) {\n\t\t\t\tif (isFunction(result.stop)) {\n\t\t\t\t\tjQuery._queueHooks(animation.elem, animation.opts.queue).stop =\n\t\t\t\t\t\tresult.stop.bind(result);\n\t\t\t\t}\n\t\t\t\treturn result;\n\t\t\t}\n\t\t}\n\n\t\tjQuery.map(props, createTween, animation);\n\n\t\tif (isFunction(animation.opts.start)) {\n\t\t\tanimation.opts.start.call(elem, animation);\n\t\t}\n\n\t\t// Attach callbacks from options\n\t\tanimation\n\t\t\t.progress(animation.opts.progress)\n\t\t\t.done(animation.opts.done, animation.opts.complete)\n\t\t\t.fail(animation.opts.fail)\n\t\t\t.always(animation.opts.always);\n\n\t\tjQuery.fx.timer(\n\t\t\tjQuery.extend(tick, {\n\t\t\t\telem: elem,\n\t\t\t\tanim: animation,\n\t\t\t\tqueue: animation.opts.queue\n\t\t\t})\n\t\t);\n\n\t\treturn animation;\n\t}\n\n\tjQuery.Animation = jQuery.extend(Animation, {\n\n\t\ttweeners: {\n\t\t\t\"*\": [function (prop, value) {\n\t\t\t\tvar tween = this.createTween(prop, value);\n\t\t\t\tadjustCSS(tween.elem, prop, rcssNum.exec(value), tween);\n\t\t\t\treturn tween;\n\t\t\t}]\n\t\t},\n\n\t\ttweener: function (props, callback) {\n\t\t\tif (isFunction(props)) {\n\t\t\t\tcallback = props;\n\t\t\t\tprops = [\"*\"];\n\t\t\t} else {\n\t\t\t\tprops = props.match(rnothtmlwhite);\n\t\t\t}\n\n\t\t\tvar prop,\n\t\t\t\tindex = 0,\n\t\t\t\tlength = props.length;\n\n\t\t\tfor (; index < length; index++) {\n\t\t\t\tprop = props[index];\n\t\t\t\tAnimation.tweeners[prop] = Animation.tweeners[prop] || [];\n\t\t\t\tAnimation.tweeners[prop].unshift(callback);\n\t\t\t}\n\t\t},\n\n\t\tprefilters: [defaultPrefilter],\n\n\t\tprefilter: function (callback, prepend) {\n\t\t\tif (prepend) {\n\t\t\t\tAnimation.prefilters.unshift(callback);\n\t\t\t} else {\n\t\t\t\tAnimation.prefilters.push(callback);\n\t\t\t}\n\t\t}\n\t});\n\n\tjQuery.speed = function (speed, easing, fn) {\n\t\tvar opt = speed && typeof speed === \"object\" ? jQuery.extend({}, speed) : {\n\t\t\tcomplete: fn || !fn && easing ||\n\t\t\t\tisFunction(speed) && speed,\n\t\t\tduration: speed,\n\t\t\teasing: fn && easing || easing && !isFunction(easing) && easing\n\t\t};\n\n\t\t// Go to the end state if fx are off\n\t\tif (jQuery.fx.off) {\n\t\t\topt.duration = 0;\n\n\t\t} else {\n\t\t\tif (typeof opt.duration !== \"number\") {\n\t\t\t\tif (opt.duration in jQuery.fx.speeds) {\n\t\t\t\t\topt.duration = jQuery.fx.speeds[opt.duration];\n\n\t\t\t\t} else {\n\t\t\t\t\topt.duration = jQuery.fx.speeds._default;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Normalize opt.queue - true/undefined/null -> \"fx\"\n\t\tif (opt.queue == null || opt.queue === true) {\n\t\t\topt.queue = \"fx\";\n\t\t}\n\n\t\t// Queueing\n\t\topt.old = opt.complete;\n\n\t\topt.complete = function () {\n\t\t\tif (isFunction(opt.old)) {\n\t\t\t\topt.old.call(this);\n\t\t\t}\n\n\t\t\tif (opt.queue) {\n\t\t\t\tjQuery.dequeue(this, opt.queue);\n\t\t\t}\n\t\t};\n\n\t\treturn opt;\n\t};\n\n\tjQuery.fn.extend({\n\t\tfadeTo: function (speed, to, easing, callback) {\n\n\t\t\t// Show any hidden elements after setting opacity to 0\n\t\t\treturn this.filter(isHiddenWithinTree).css(\"opacity\", 0).show()\n\n\t\t\t\t// Animate to the value specified\n\t\t\t\t.end().animate({ opacity: to }, speed, easing, callback);\n\t\t},\n\t\tanimate: function (prop, speed, easing, callback) {\n\t\t\tvar empty = jQuery.isEmptyObject(prop),\n\t\t\t\toptall = jQuery.speed(speed, easing, callback),\n\t\t\t\tdoAnimation = function () {\n\n\t\t\t\t\t// Operate on a copy of prop so per-property easing won't be lost\n\t\t\t\t\tvar anim = Animation(this, jQuery.extend({}, prop), optall);\n\n\t\t\t\t\t// Empty animations, or finishing resolves immediately\n\t\t\t\t\tif (empty || dataPriv.get(this, \"finish\")) {\n\t\t\t\t\t\tanim.stop(true);\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\tdoAnimation.finish = doAnimation;\n\n\t\t\treturn empty || optall.queue === false ?\n\t\t\t\tthis.each(doAnimation) :\n\t\t\t\tthis.queue(optall.queue, doAnimation);\n\t\t},\n\t\tstop: function (type, clearQueue, gotoEnd) {\n\t\t\tvar stopQueue = function (hooks) {\n\t\t\t\tvar stop = hooks.stop;\n\t\t\t\tdelete hooks.stop;\n\t\t\t\tstop(gotoEnd);\n\t\t\t};\n\n\t\t\tif (typeof type !== \"string\") {\n\t\t\t\tgotoEnd = clearQueue;\n\t\t\t\tclearQueue = type;\n\t\t\t\ttype = undefined;\n\t\t\t}\n\t\t\tif (clearQueue) {\n\t\t\t\tthis.queue(type || \"fx\", []);\n\t\t\t}\n\n\t\t\treturn this.each(function () {\n\t\t\t\tvar dequeue = true,\n\t\t\t\t\tindex = type != null && type + \"queueHooks\",\n\t\t\t\t\ttimers = jQuery.timers,\n\t\t\t\t\tdata = dataPriv.get(this);\n\n\t\t\t\tif (index) {\n\t\t\t\t\tif (data[index] && data[index].stop) {\n\t\t\t\t\t\tstopQueue(data[index]);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tfor (index in data) {\n\t\t\t\t\t\tif (data[index] && data[index].stop && rrun.test(index)) {\n\t\t\t\t\t\t\tstopQueue(data[index]);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tfor (index = timers.length; index--;) {\n\t\t\t\t\tif (timers[index].elem === this &&\n\t\t\t\t\t\t(type == null || timers[index].queue === type)) {\n\n\t\t\t\t\t\ttimers[index].anim.stop(gotoEnd);\n\t\t\t\t\t\tdequeue = false;\n\t\t\t\t\t\ttimers.splice(index, 1);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Start the next in the queue if the last step wasn't forced.\n\t\t\t\t// Timers currently will call their complete callbacks, which\n\t\t\t\t// will dequeue but only if they were gotoEnd.\n\t\t\t\tif (dequeue || !gotoEnd) {\n\t\t\t\t\tjQuery.dequeue(this, type);\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\t\tfinish: function (type) {\n\t\t\tif (type !== false) {\n\t\t\t\ttype = type || \"fx\";\n\t\t\t}\n\t\t\treturn this.each(function () {\n\t\t\t\tvar index,\n\t\t\t\t\tdata = dataPriv.get(this),\n\t\t\t\t\tqueue = data[type + \"queue\"],\n\t\t\t\t\thooks = data[type + \"queueHooks\"],\n\t\t\t\t\ttimers = jQuery.timers,\n\t\t\t\t\tlength = queue ? queue.length : 0;\n\n\t\t\t\t// Enable finishing flag on private data\n\t\t\t\tdata.finish = true;\n\n\t\t\t\t// Empty the queue first\n\t\t\t\tjQuery.queue(this, type, []);\n\n\t\t\t\tif (hooks && hooks.stop) {\n\t\t\t\t\thooks.stop.call(this, true);\n\t\t\t\t}\n\n\t\t\t\t// Look for any active animations, and finish them\n\t\t\t\tfor (index = timers.length; index--;) {\n\t\t\t\t\tif (timers[index].elem === this && timers[index].queue === type) {\n\t\t\t\t\t\ttimers[index].anim.stop(true);\n\t\t\t\t\t\ttimers.splice(index, 1);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Look for any animations in the old queue and finish them\n\t\t\t\tfor (index = 0; index < length; index++) {\n\t\t\t\t\tif (queue[index] && queue[index].finish) {\n\t\t\t\t\t\tqueue[index].finish.call(this);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Turn off finishing flag\n\t\t\t\tdelete data.finish;\n\t\t\t});\n\t\t}\n\t});\n\n\tjQuery.each([\"toggle\", \"show\", \"hide\"], function (_i, name) {\n\t\tvar cssFn = jQuery.fn[name];\n\t\tjQuery.fn[name] = function (speed, easing, callback) {\n\t\t\treturn speed == null || typeof speed === \"boolean\" ?\n\t\t\t\tcssFn.apply(this, arguments) :\n\t\t\t\tthis.animate(genFx(name, true), speed, easing, callback);\n\t\t};\n\t});\n\n\t// Generate shortcuts for custom animations\n\tjQuery.each({\n\t\tslideDown: genFx(\"show\"),\n\t\tslideUp: genFx(\"hide\"),\n\t\tslideToggle: genFx(\"toggle\"),\n\t\tfadeIn: { opacity: \"show\" },\n\t\tfadeOut: { opacity: \"hide\" },\n\t\tfadeToggle: { opacity: \"toggle\" }\n\t}, function (name, props) {\n\t\tjQuery.fn[name] = function (speed, easing, callback) {\n\t\t\treturn this.animate(props, speed, easing, callback);\n\t\t};\n\t});\n\n\tjQuery.timers = [];\n\tjQuery.fx.tick = function () {\n\t\tvar timer,\n\t\t\ti = 0,\n\t\t\ttimers = jQuery.timers;\n\n\t\tfxNow = Date.now();\n\n\t\tfor (; i < timers.length; i++) {\n\t\t\ttimer = timers[i];\n\n\t\t\t// Run the timer and safely remove it when done (allowing for external removal)\n\t\t\tif (!timer() && timers[i] === timer) {\n\t\t\t\ttimers.splice(i--, 1);\n\t\t\t}\n\t\t}\n\n\t\tif (!timers.length) {\n\t\t\tjQuery.fx.stop();\n\t\t}\n\t\tfxNow = undefined;\n\t};\n\n\tjQuery.fx.timer = function (timer) {\n\t\tjQuery.timers.push(timer);\n\t\tjQuery.fx.start();\n\t};\n\n\tjQuery.fx.interval = 13;\n\tjQuery.fx.start = function () {\n\t\tif (inProgress) {\n\t\t\treturn;\n\t\t}\n\n\t\tinProgress = true;\n\t\tschedule();\n\t};\n\n\tjQuery.fx.stop = function () {\n\t\tinProgress = null;\n\t};\n\n\tjQuery.fx.speeds = {\n\t\tslow: 600,\n\t\tfast: 200,\n\n\t\t// Default speed\n\t\t_default: 400\n\t};\n\n\n\t// Based off of the plugin by Clint Helfers, with permission.\n\tjQuery.fn.delay = function (time, type) {\n\t\ttime = jQuery.fx ? jQuery.fx.speeds[time] || time : time;\n\t\ttype = type || \"fx\";\n\n\t\treturn this.queue(type, function (next, hooks) {\n\t\t\tvar timeout = window.setTimeout(next, time);\n\t\t\thooks.stop = function () {\n\t\t\t\twindow.clearTimeout(timeout);\n\t\t\t};\n\t\t});\n\t};\n\n\n\t(function () {\n\t\tvar input = document.createElement(\"input\"),\n\t\t\tselect = document.createElement(\"select\"),\n\t\t\topt = select.appendChild(document.createElement(\"option\"));\n\n\t\tinput.type = \"checkbox\";\n\n\t\t// Support: Android <=4.3 only\n\t\t// Default value for a checkbox should be \"on\"\n\t\tsupport.checkOn = input.value !== \"\";\n\n\t\t// Support: IE <=11 only\n\t\t// Must access selectedIndex to make default options select\n\t\tsupport.optSelected = opt.selected;\n\n\t\t// Support: IE <=11 only\n\t\t// An input loses its value after becoming a radio\n\t\tinput = document.createElement(\"input\");\n\t\tinput.value = \"t\";\n\t\tinput.type = \"radio\";\n\t\tsupport.radioValue = input.value === \"t\";\n\t})();\n\n\n\tvar boolHook,\n\t\tattrHandle = jQuery.expr.attrHandle;\n\n\tjQuery.fn.extend({\n\t\tattr: function (name, value) {\n\t\t\treturn access(this, jQuery.attr, name, value, arguments.length > 1);\n\t\t},\n\n\t\tremoveAttr: function (name) {\n\t\t\treturn this.each(function () {\n\t\t\t\tjQuery.removeAttr(this, name);\n\t\t\t});\n\t\t}\n\t});\n\n\tjQuery.extend({\n\t\tattr: function (elem, name, value) {\n\t\t\tvar ret, hooks,\n\t\t\t\tnType = elem.nodeType;\n\n\t\t\t// Don't get/set attributes on text, comment and attribute nodes\n\t\t\tif (nType === 3 || nType === 8 || nType === 2) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Fallback to prop when attributes are not supported\n\t\t\tif (typeof elem.getAttribute === \"undefined\") {\n\t\t\t\treturn jQuery.prop(elem, name, value);\n\t\t\t}\n\n\t\t\t// Attribute hooks are determined by the lowercase version\n\t\t\t// Grab necessary hook if one is defined\n\t\t\tif (nType !== 1 || !jQuery.isXMLDoc(elem)) {\n\t\t\t\thooks = jQuery.attrHooks[name.toLowerCase()] ||\n\t\t\t\t\t(jQuery.expr.match.bool.test(name) ? boolHook : undefined);\n\t\t\t}\n\n\t\t\tif (value !== undefined) {\n\t\t\t\tif (value === null) {\n\t\t\t\t\tjQuery.removeAttr(elem, name);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (hooks && \"set\" in hooks &&\n\t\t\t\t\t(ret = hooks.set(elem, value, name)) !== undefined) {\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\n\t\t\t\telem.setAttribute(name, value + \"\");\n\t\t\t\treturn value;\n\t\t\t}\n\n\t\t\tif (hooks && \"get\" in hooks && (ret = hooks.get(elem, name)) !== null) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\tret = jQuery.find.attr(elem, name);\n\n\t\t\t// Non-existent attributes return null, we normalize to undefined\n\t\t\treturn ret == null ? undefined : ret;\n\t\t},\n\n\t\tattrHooks: {\n\t\t\ttype: {\n\t\t\t\tset: function (elem, value) {\n\t\t\t\t\tif (!support.radioValue && value === \"radio\" &&\n\t\t\t\t\t\tnodeName(elem, \"input\")) {\n\t\t\t\t\t\tvar val = elem.value;\n\t\t\t\t\t\telem.setAttribute(\"type\", value);\n\t\t\t\t\t\tif (val) {\n\t\t\t\t\t\t\telem.value = val;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn value;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tremoveAttr: function (elem, value) {\n\t\t\tvar name,\n\t\t\t\ti = 0,\n\n\t\t\t\t// Attribute names can contain non-HTML whitespace characters\n\t\t\t\t// https://html.spec.whatwg.org/multipage/syntax.html#attributes-2\n\t\t\t\tattrNames = value && value.match(rnothtmlwhite);\n\n\t\t\tif (attrNames && elem.nodeType === 1) {\n\t\t\t\twhile ((name = attrNames[i++])) {\n\t\t\t\t\telem.removeAttribute(name);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\n\t// Hooks for boolean attributes\n\tboolHook = {\n\t\tset: function (elem, value, name) {\n\t\t\tif (value === false) {\n\n\t\t\t\t// Remove boolean attributes when set to false\n\t\t\t\tjQuery.removeAttr(elem, name);\n\t\t\t} else {\n\t\t\t\telem.setAttribute(name, name);\n\t\t\t}\n\t\t\treturn name;\n\t\t}\n\t};\n\n\tjQuery.each(jQuery.expr.match.bool.source.match(/\\w+/g), function (_i, name) {\n\t\tvar getter = attrHandle[name] || jQuery.find.attr;\n\n\t\tattrHandle[name] = function (elem, name, isXML) {\n\t\t\tvar ret, handle,\n\t\t\t\tlowercaseName = name.toLowerCase();\n\n\t\t\tif (!isXML) {\n\n\t\t\t\t// Avoid an infinite loop by temporarily removing this function from the getter\n\t\t\t\thandle = attrHandle[lowercaseName];\n\t\t\t\tattrHandle[lowercaseName] = ret;\n\t\t\t\tret = getter(elem, name, isXML) != null ?\n\t\t\t\t\tlowercaseName :\n\t\t\t\t\tnull;\n\t\t\t\tattrHandle[lowercaseName] = handle;\n\t\t\t}\n\t\t\treturn ret;\n\t\t};\n\t});\n\n\n\n\n\tvar rfocusable = /^(?:input|select|textarea|button)$/i,\n\t\trclickable = /^(?:a|area)$/i;\n\n\tjQuery.fn.extend({\n\t\tprop: function (name, value) {\n\t\t\treturn access(this, jQuery.prop, name, value, arguments.length > 1);\n\t\t},\n\n\t\tremoveProp: function (name) {\n\t\t\treturn this.each(function () {\n\t\t\t\tdelete this[jQuery.propFix[name] || name];\n\t\t\t});\n\t\t}\n\t});\n\n\tjQuery.extend({\n\t\tprop: function (elem, name, value) {\n\t\t\tvar ret, hooks,\n\t\t\t\tnType = elem.nodeType;\n\n\t\t\t// Don't get/set properties on text, comment and attribute nodes\n\t\t\tif (nType === 3 || nType === 8 || nType === 2) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (nType !== 1 || !jQuery.isXMLDoc(elem)) {\n\n\t\t\t\t// Fix name and attach hooks\n\t\t\t\tname = jQuery.propFix[name] || name;\n\t\t\t\thooks = jQuery.propHooks[name];\n\t\t\t}\n\n\t\t\tif (value !== undefined) {\n\t\t\t\tif (hooks && \"set\" in hooks &&\n\t\t\t\t\t(ret = hooks.set(elem, value, name)) !== undefined) {\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\n\t\t\t\treturn (elem[name] = value);\n\t\t\t}\n\n\t\t\tif (hooks && \"get\" in hooks && (ret = hooks.get(elem, name)) !== null) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\treturn elem[name];\n\t\t},\n\n\t\tpropHooks: {\n\t\t\ttabIndex: {\n\t\t\t\tget: function (elem) {\n\n\t\t\t\t\t// Support: IE <=9 - 11 only\n\t\t\t\t\t// elem.tabIndex doesn't always return the\n\t\t\t\t\t// correct value when it hasn't been explicitly set\n\t\t\t\t\t// Use proper attribute retrieval (trac-12072)\n\t\t\t\t\tvar tabindex = jQuery.find.attr(elem, \"tabindex\");\n\n\t\t\t\t\tif (tabindex) {\n\t\t\t\t\t\treturn parseInt(tabindex, 10);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (\n\t\t\t\t\t\trfocusable.test(elem.nodeName) ||\n\t\t\t\t\t\trclickable.test(elem.nodeName) &&\n\t\t\t\t\t\telem.href\n\t\t\t\t\t) {\n\t\t\t\t\t\treturn 0;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn -1;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tpropFix: {\n\t\t\t\"for\": \"htmlFor\",\n\t\t\t\"class\": \"className\"\n\t\t}\n\t});\n\n\t// Support: IE <=11 only\n\t// Accessing the selectedIndex property\n\t// forces the browser to respect setting selected\n\t// on the option\n\t// The getter ensures a default option is selected\n\t// when in an optgroup\n\t// eslint rule \"no-unused-expressions\" is disabled for this code\n\t// since it considers such accessions noop\n\tif (!support.optSelected) {\n\t\tjQuery.propHooks.selected = {\n\t\t\tget: function (elem) {\n\n\t\t\t\t/* eslint no-unused-expressions: \"off\" */\n\n\t\t\t\tvar parent = elem.parentNode;\n\t\t\t\tif (parent && parent.parentNode) {\n\t\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t\t}\n\t\t\t\treturn null;\n\t\t\t},\n\t\t\tset: function (elem) {\n\n\t\t\t\t/* eslint no-unused-expressions: \"off\" */\n\n\t\t\t\tvar parent = elem.parentNode;\n\t\t\t\tif (parent) {\n\t\t\t\t\tparent.selectedIndex;\n\n\t\t\t\t\tif (parent.parentNode) {\n\t\t\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n\n\tjQuery.each([\n\t\t\"tabIndex\",\n\t\t\"readOnly\",\n\t\t\"maxLength\",\n\t\t\"cellSpacing\",\n\t\t\"cellPadding\",\n\t\t\"rowSpan\",\n\t\t\"colSpan\",\n\t\t\"useMap\",\n\t\t\"frameBorder\",\n\t\t\"contentEditable\"\n\t], function () {\n\t\tjQuery.propFix[this.toLowerCase()] = this;\n\t});\n\n\n\n\n\t// Strip and collapse whitespace according to HTML spec\n\t// https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace\n\tfunction stripAndCollapse(value) {\n\t\tvar tokens = value.match(rnothtmlwhite) || [];\n\t\treturn tokens.join(\" \");\n\t}\n\n\n\tfunction getClass(elem) {\n\t\treturn elem.getAttribute && elem.getAttribute(\"class\") || \"\";\n\t}\n\n\tfunction classesToArray(value) {\n\t\tif (Array.isArray(value)) {\n\t\t\treturn value;\n\t\t}\n\t\tif (typeof value === \"string\") {\n\t\t\treturn value.match(rnothtmlwhite) || [];\n\t\t}\n\t\treturn [];\n\t}\n\n\tjQuery.fn.extend({\n\t\taddClass: function (value) {\n\t\t\tvar classNames, cur, curValue, className, i, finalValue;\n\n\t\t\tif (isFunction(value)) {\n\t\t\t\treturn this.each(function (j) {\n\t\t\t\t\tjQuery(this).addClass(value.call(this, j, getClass(this)));\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tclassNames = classesToArray(value);\n\n\t\t\tif (classNames.length) {\n\t\t\t\treturn this.each(function () {\n\t\t\t\t\tcurValue = getClass(this);\n\t\t\t\t\tcur = this.nodeType === 1 && (\" \" + stripAndCollapse(curValue) + \" \");\n\n\t\t\t\t\tif (cur) {\n\t\t\t\t\t\tfor (i = 0; i < classNames.length; i++) {\n\t\t\t\t\t\t\tclassName = classNames[i];\n\t\t\t\t\t\t\tif (cur.indexOf(\" \" + className + \" \") < 0) {\n\t\t\t\t\t\t\t\tcur += className + \" \";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\t\tfinalValue = stripAndCollapse(cur);\n\t\t\t\t\t\tif (curValue !== finalValue) {\n\t\t\t\t\t\t\tthis.setAttribute(\"class\", finalValue);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn this;\n\t\t},\n\n\t\tremoveClass: function (value) {\n\t\t\tvar classNames, cur, curValue, className, i, finalValue;\n\n\t\t\tif (isFunction(value)) {\n\t\t\t\treturn this.each(function (j) {\n\t\t\t\t\tjQuery(this).removeClass(value.call(this, j, getClass(this)));\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (!arguments.length) {\n\t\t\t\treturn this.attr(\"class\", \"\");\n\t\t\t}\n\n\t\t\tclassNames = classesToArray(value);\n\n\t\t\tif (classNames.length) {\n\t\t\t\treturn this.each(function () {\n\t\t\t\t\tcurValue = getClass(this);\n\n\t\t\t\t\t// This expression is here for better compressibility (see addClass)\n\t\t\t\t\tcur = this.nodeType === 1 && (\" \" + stripAndCollapse(curValue) + \" \");\n\n\t\t\t\t\tif (cur) {\n\t\t\t\t\t\tfor (i = 0; i < classNames.length; i++) {\n\t\t\t\t\t\t\tclassName = classNames[i];\n\n\t\t\t\t\t\t\t// Remove *all* instances\n\t\t\t\t\t\t\twhile (cur.indexOf(\" \" + className + \" \") > -1) {\n\t\t\t\t\t\t\t\tcur = cur.replace(\" \" + className + \" \", \" \");\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\t\tfinalValue = stripAndCollapse(cur);\n\t\t\t\t\t\tif (curValue !== finalValue) {\n\t\t\t\t\t\t\tthis.setAttribute(\"class\", finalValue);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn this;\n\t\t},\n\n\t\ttoggleClass: function (value, stateVal) {\n\t\t\tvar classNames, className, i, self,\n\t\t\t\ttype = typeof value,\n\t\t\t\tisValidValue = type === \"string\" || Array.isArray(value);\n\n\t\t\tif (isFunction(value)) {\n\t\t\t\treturn this.each(function (i) {\n\t\t\t\t\tjQuery(this).toggleClass(\n\t\t\t\t\t\tvalue.call(this, i, getClass(this), stateVal),\n\t\t\t\t\t\tstateVal\n\t\t\t\t\t);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (typeof stateVal === \"boolean\" && isValidValue) {\n\t\t\t\treturn stateVal ? this.addClass(value) : this.removeClass(value);\n\t\t\t}\n\n\t\t\tclassNames = classesToArray(value);\n\n\t\t\treturn this.each(function () {\n\t\t\t\tif (isValidValue) {\n\n\t\t\t\t\t// Toggle individual class names\n\t\t\t\t\tself = jQuery(this);\n\n\t\t\t\t\tfor (i = 0; i < classNames.length; i++) {\n\t\t\t\t\t\tclassName = classNames[i];\n\n\t\t\t\t\t\t// Check each className given, space separated list\n\t\t\t\t\t\tif (self.hasClass(className)) {\n\t\t\t\t\t\t\tself.removeClass(className);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tself.addClass(className);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Toggle whole class name\n\t\t\t\t} else if (value === undefined || type === \"boolean\") {\n\t\t\t\t\tclassName = getClass(this);\n\t\t\t\t\tif (className) {\n\n\t\t\t\t\t\t// Store className if set\n\t\t\t\t\t\tdataPriv.set(this, \"__className__\", className);\n\t\t\t\t\t}\n\n\t\t\t\t\t// If the element has a class name or if we're passed `false`,\n\t\t\t\t\t// then remove the whole classname (if there was one, the above saved it).\n\t\t\t\t\t// Otherwise bring back whatever was previously saved (if anything),\n\t\t\t\t\t// falling back to the empty string if nothing was stored.\n\t\t\t\t\tif (this.setAttribute) {\n\t\t\t\t\t\tthis.setAttribute(\"class\",\n\t\t\t\t\t\t\tclassName || value === false ?\n\t\t\t\t\t\t\t\t\"\" :\n\t\t\t\t\t\t\t\tdataPriv.get(this, \"__className__\") || \"\"\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\thasClass: function (selector) {\n\t\t\tvar className, elem,\n\t\t\t\ti = 0;\n\n\t\t\tclassName = \" \" + selector + \" \";\n\t\t\twhile ((elem = this[i++])) {\n\t\t\t\tif (elem.nodeType === 1 &&\n\t\t\t\t\t(\" \" + stripAndCollapse(getClass(elem)) + \" \").indexOf(className) > -1) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn false;\n\t\t}\n\t});\n\n\n\n\n\tvar rreturn = /\\r/g;\n\n\tjQuery.fn.extend({\n\t\tval: function (value) {\n\t\t\tvar hooks, ret, valueIsFunction,\n\t\t\t\telem = this[0];\n\n\t\t\tif (!arguments.length) {\n\t\t\t\tif (elem) {\n\t\t\t\t\thooks = jQuery.valHooks[elem.type] ||\n\t\t\t\t\t\tjQuery.valHooks[elem.nodeName.toLowerCase()];\n\n\t\t\t\t\tif (hooks &&\n\t\t\t\t\t\t\"get\" in hooks &&\n\t\t\t\t\t\t(ret = hooks.get(elem, \"value\")) !== undefined\n\t\t\t\t\t) {\n\t\t\t\t\t\treturn ret;\n\t\t\t\t\t}\n\n\t\t\t\t\tret = elem.value;\n\n\t\t\t\t\t// Handle most common string cases\n\t\t\t\t\tif (typeof ret === \"string\") {\n\t\t\t\t\t\treturn ret.replace(rreturn, \"\");\n\t\t\t\t\t}\n\n\t\t\t\t\t// Handle cases where value is null/undef or number\n\t\t\t\t\treturn ret == null ? \"\" : ret;\n\t\t\t\t}\n\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvalueIsFunction = isFunction(value);\n\n\t\t\treturn this.each(function (i) {\n\t\t\t\tvar val;\n\n\t\t\t\tif (this.nodeType !== 1) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (valueIsFunction) {\n\t\t\t\t\tval = value.call(this, i, jQuery(this).val());\n\t\t\t\t} else {\n\t\t\t\t\tval = value;\n\t\t\t\t}\n\n\t\t\t\t// Treat null/undefined as \"\"; convert numbers to string\n\t\t\t\tif (val == null) {\n\t\t\t\t\tval = \"\";\n\n\t\t\t\t} else if (typeof val === \"number\") {\n\t\t\t\t\tval += \"\";\n\n\t\t\t\t} else if (Array.isArray(val)) {\n\t\t\t\t\tval = jQuery.map(val, function (value) {\n\t\t\t\t\t\treturn value == null ? \"\" : value + \"\";\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\thooks = jQuery.valHooks[this.type] || jQuery.valHooks[this.nodeName.toLowerCase()];\n\n\t\t\t\t// If set returns undefined, fall back to normal setting\n\t\t\t\tif (!hooks || !(\"set\" in hooks) || hooks.set(this, val, \"value\") === undefined) {\n\t\t\t\t\tthis.value = val;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t});\n\n\tjQuery.extend({\n\t\tvalHooks: {\n\t\t\toption: {\n\t\t\t\tget: function (elem) {\n\n\t\t\t\t\tvar val = jQuery.find.attr(elem, \"value\");\n\t\t\t\t\treturn val != null ?\n\t\t\t\t\t\tval :\n\n\t\t\t\t\t\t// Support: IE <=10 - 11 only\n\t\t\t\t\t\t// option.text throws exceptions (trac-14686, trac-14858)\n\t\t\t\t\t\t// Strip and collapse whitespace\n\t\t\t\t\t\t// https://html.spec.whatwg.org/#strip-and-collapse-whitespace\n\t\t\t\t\t\tstripAndCollapse(jQuery.text(elem));\n\t\t\t\t}\n\t\t\t},\n\t\t\tselect: {\n\t\t\t\tget: function (elem) {\n\t\t\t\t\tvar value, option, i,\n\t\t\t\t\t\toptions = elem.options,\n\t\t\t\t\t\tindex = elem.selectedIndex,\n\t\t\t\t\t\tone = elem.type === \"select-one\",\n\t\t\t\t\t\tvalues = one ? null : [],\n\t\t\t\t\t\tmax = one ? index + 1 : options.length;\n\n\t\t\t\t\tif (index < 0) {\n\t\t\t\t\t\ti = max;\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\ti = one ? index : 0;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Loop through all the selected options\n\t\t\t\t\tfor (; i < max; i++) {\n\t\t\t\t\t\toption = options[i];\n\n\t\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t\t// IE8-9 doesn't update selected after form reset (trac-2551)\n\t\t\t\t\t\tif ((option.selected || i === index) &&\n\n\t\t\t\t\t\t\t// Don't return options that are disabled or in a disabled optgroup\n\t\t\t\t\t\t\t!option.disabled &&\n\t\t\t\t\t\t\t(!option.parentNode.disabled ||\n\t\t\t\t\t\t\t\t!nodeName(option.parentNode, \"optgroup\"))) {\n\n\t\t\t\t\t\t\t// Get the specific value for the option\n\t\t\t\t\t\t\tvalue = jQuery(option).val();\n\n\t\t\t\t\t\t\t// We don't need an array for one selects\n\t\t\t\t\t\t\tif (one) {\n\t\t\t\t\t\t\t\treturn value;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Multi-Selects return an array\n\t\t\t\t\t\t\tvalues.push(value);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn values;\n\t\t\t\t},\n\n\t\t\t\tset: function (elem, value) {\n\t\t\t\t\tvar optionSet, option,\n\t\t\t\t\t\toptions = elem.options,\n\t\t\t\t\t\tvalues = jQuery.makeArray(value),\n\t\t\t\t\t\ti = options.length;\n\n\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\toption = options[i];\n\n\t\t\t\t\t\t/* eslint-disable no-cond-assign */\n\n\t\t\t\t\t\tif (option.selected =\n\t\t\t\t\t\t\tjQuery.inArray(jQuery.valHooks.option.get(option), values) > -1\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\toptionSet = true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t/* eslint-enable no-cond-assign */\n\t\t\t\t\t}\n\n\t\t\t\t\t// Force browsers to behave consistently when non-matching value is set\n\t\t\t\t\tif (!optionSet) {\n\t\t\t\t\t\telem.selectedIndex = -1;\n\t\t\t\t\t}\n\t\t\t\t\treturn values;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\n\t// Radios and checkboxes getter/setter\n\tjQuery.each([\"radio\", \"checkbox\"], function () {\n\t\tjQuery.valHooks[this] = {\n\t\t\tset: function (elem, value) {\n\t\t\t\tif (Array.isArray(value)) {\n\t\t\t\t\treturn (elem.checked = jQuery.inArray(jQuery(elem).val(), value) > -1);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\tif (!support.checkOn) {\n\t\t\tjQuery.valHooks[this].get = function (elem) {\n\t\t\t\treturn elem.getAttribute(\"value\") === null ? \"on\" : elem.value;\n\t\t\t};\n\t\t}\n\t});\n\n\n\n\n\t// Return jQuery for attributes-only inclusion\n\tvar location = window.location;\n\n\tvar nonce = { guid: Date.now() };\n\n\tvar rquery = (/\\?/);\n\n\n\n\t// Cross-browser xml parsing\n\tjQuery.parseXML = function (data) {\n\t\tvar xml, parserErrorElem;\n\t\tif (!data || typeof data !== \"string\") {\n\t\t\treturn null;\n\t\t}\n\n\t\t// Support: IE 9 - 11 only\n\t\t// IE throws on parseFromString with invalid input.\n\t\ttry {\n\t\t\txml = (new window.DOMParser()).parseFromString(data, \"text/xml\");\n\t\t} catch (e) { }\n\n\t\tparserErrorElem = xml && xml.getElementsByTagName(\"parsererror\")[0];\n\t\tif (!xml || parserErrorElem) {\n\t\t\tjQuery.error(\"Invalid XML: \" + (\n\t\t\t\tparserErrorElem ?\n\t\t\t\t\tjQuery.map(parserErrorElem.childNodes, function (el) {\n\t\t\t\t\t\treturn el.textContent;\n\t\t\t\t\t}).join(\"\\n\") :\n\t\t\t\t\tdata\n\t\t\t));\n\t\t}\n\t\treturn xml;\n\t};\n\n\n\tvar rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,\n\t\tstopPropagationCallback = function (e) {\n\t\t\te.stopPropagation();\n\t\t};\n\n\tjQuery.extend(jQuery.event, {\n\n\t\ttrigger: function (event, data, elem, onlyHandlers) {\n\n\t\t\tvar i, cur, tmp, bubbleType, ontype, handle, special, lastElement,\n\t\t\t\teventPath = [elem || document],\n\t\t\t\ttype = hasOwn.call(event, \"type\") ? event.type : event,\n\t\t\t\tnamespaces = hasOwn.call(event, \"namespace\") ? event.namespace.split(\".\") : [];\n\n\t\t\tcur = lastElement = tmp = elem = elem || document;\n\n\t\t\t// Don't do events on text and comment nodes\n\t\t\tif (elem.nodeType === 3 || elem.nodeType === 8) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// focus/blur morphs to focusin/out; ensure we're not firing them right now\n\t\t\tif (rfocusMorph.test(type + jQuery.event.triggered)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (type.indexOf(\".\") > -1) {\n\n\t\t\t\t// Namespaced trigger; create a regexp to match event type in handle()\n\t\t\t\tnamespaces = type.split(\".\");\n\t\t\t\ttype = namespaces.shift();\n\t\t\t\tnamespaces.sort();\n\t\t\t}\n\t\t\tontype = type.indexOf(\":\") < 0 && \"on\" + type;\n\n\t\t\t// Caller can pass in a jQuery.Event object, Object, or just an event type string\n\t\t\tevent = event[jQuery.expando] ?\n\t\t\t\tevent :\n\t\t\t\tnew jQuery.Event(type, typeof event === \"object\" && event);\n\n\t\t\t// Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)\n\t\t\tevent.isTrigger = onlyHandlers ? 2 : 3;\n\t\t\tevent.namespace = namespaces.join(\".\");\n\t\t\tevent.rnamespace = event.namespace ?\n\t\t\t\tnew RegExp(\"(^|\\\\.)\" + namespaces.join(\"\\\\.(?:.*\\\\.|)\") + \"(\\\\.|$)\") :\n\t\t\t\tnull;\n\n\t\t\t// Clean up the event in case it is being reused\n\t\t\tevent.result = undefined;\n\t\t\tif (!event.target) {\n\t\t\t\tevent.target = elem;\n\t\t\t}\n\n\t\t\t// Clone any incoming data and prepend the event, creating the handler arg list\n\t\t\tdata = data == null ?\n\t\t\t\t[event] :\n\t\t\t\tjQuery.makeArray(data, [event]);\n\n\t\t\t// Allow special events to draw outside the lines\n\t\t\tspecial = jQuery.event.special[type] || {};\n\t\t\tif (!onlyHandlers && special.trigger && special.trigger.apply(elem, data) === false) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Determine event propagation path in advance, per W3C events spec (trac-9951)\n\t\t\t// Bubble up to document, then to window; watch for a global ownerDocument var (trac-9724)\n\t\t\tif (!onlyHandlers && !special.noBubble && !isWindow(elem)) {\n\n\t\t\t\tbubbleType = special.delegateType || type;\n\t\t\t\tif (!rfocusMorph.test(bubbleType + type)) {\n\t\t\t\t\tcur = cur.parentNode;\n\t\t\t\t}\n\t\t\t\tfor (; cur; cur = cur.parentNode) {\n\t\t\t\t\teventPath.push(cur);\n\t\t\t\t\ttmp = cur;\n\t\t\t\t}\n\n\t\t\t\t// Only add window if we got to document (e.g., not plain obj or detached DOM)\n\t\t\t\tif (tmp === (elem.ownerDocument || document)) {\n\t\t\t\t\teventPath.push(tmp.defaultView || tmp.parentWindow || window);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Fire handlers on the event path\n\t\t\ti = 0;\n\t\t\twhile ((cur = eventPath[i++]) && !event.isPropagationStopped()) {\n\t\t\t\tlastElement = cur;\n\t\t\t\tevent.type = i > 1 ?\n\t\t\t\t\tbubbleType :\n\t\t\t\t\tspecial.bindType || type;\n\n\t\t\t\t// jQuery handler\n\t\t\t\thandle = (dataPriv.get(cur, \"events\") || Object.create(null))[event.type] &&\n\t\t\t\t\tdataPriv.get(cur, \"handle\");\n\t\t\t\tif (handle) {\n\t\t\t\t\thandle.apply(cur, data);\n\t\t\t\t}\n\n\t\t\t\t// Native handler\n\t\t\t\thandle = ontype && cur[ontype];\n\t\t\t\tif (handle && handle.apply && acceptData(cur)) {\n\t\t\t\t\tevent.result = handle.apply(cur, data);\n\t\t\t\t\tif (event.result === false) {\n\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tevent.type = type;\n\n\t\t\t// If nobody prevented the default action, do it now\n\t\t\tif (!onlyHandlers && !event.isDefaultPrevented()) {\n\n\t\t\t\tif ((!special._default ||\n\t\t\t\t\tspecial._default.apply(eventPath.pop(), data) === false) &&\n\t\t\t\t\tacceptData(elem)) {\n\n\t\t\t\t\t// Call a native DOM method on the target with the same name as the event.\n\t\t\t\t\t// Don't do default actions on window, that's where global variables be (trac-6170)\n\t\t\t\t\tif (ontype && isFunction(elem[type]) && !isWindow(elem)) {\n\n\t\t\t\t\t\t// Don't re-trigger an onFOO event when we call its FOO() method\n\t\t\t\t\t\ttmp = elem[ontype];\n\n\t\t\t\t\t\tif (tmp) {\n\t\t\t\t\t\t\telem[ontype] = null;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Prevent re-triggering of the same event, since we already bubbled it above\n\t\t\t\t\t\tjQuery.event.triggered = type;\n\n\t\t\t\t\t\tif (event.isPropagationStopped()) {\n\t\t\t\t\t\t\tlastElement.addEventListener(type, stopPropagationCallback);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\telem[type]();\n\n\t\t\t\t\t\tif (event.isPropagationStopped()) {\n\t\t\t\t\t\t\tlastElement.removeEventListener(type, stopPropagationCallback);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tjQuery.event.triggered = undefined;\n\n\t\t\t\t\t\tif (tmp) {\n\t\t\t\t\t\t\telem[ontype] = tmp;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn event.result;\n\t\t},\n\n\t\t// Piggyback on a donor event to simulate a different one\n\t\t// Used only for `focus(in | out)` events\n\t\tsimulate: function (type, elem, event) {\n\t\t\tvar e = jQuery.extend(\n\t\t\t\tnew jQuery.Event(),\n\t\t\t\tevent,\n\t\t\t\t{\n\t\t\t\t\ttype: type,\n\t\t\t\t\tisSimulated: true\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tjQuery.event.trigger(e, null, elem);\n\t\t}\n\n\t});\n\n\tjQuery.fn.extend({\n\n\t\ttrigger: function (type, data) {\n\t\t\treturn this.each(function () {\n\t\t\t\tjQuery.event.trigger(type, data, this);\n\t\t\t});\n\t\t},\n\t\ttriggerHandler: function (type, data) {\n\t\t\tvar elem = this[0];\n\t\t\tif (elem) {\n\t\t\t\treturn jQuery.event.trigger(type, data, elem, true);\n\t\t\t}\n\t\t}\n\t});\n\n\n\tvar\n\t\trbracket = /\\[\\]$/,\n\t\trCRLF = /\\r?\\n/g,\n\t\trsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,\n\t\trsubmittable = /^(?:input|select|textarea|keygen)/i;\n\n\tfunction buildParams(prefix, obj, traditional, add) {\n\t\tvar name;\n\n\t\tif (Array.isArray(obj)) {\n\n\t\t\t// Serialize array item.\n\t\t\tjQuery.each(obj, function (i, v) {\n\t\t\t\tif (traditional || rbracket.test(prefix)) {\n\n\t\t\t\t\t// Treat each array item as a scalar.\n\t\t\t\t\tadd(prefix, v);\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// Item is non-scalar (array or object), encode its numeric index.\n\t\t\t\t\tbuildParams(\n\t\t\t\t\t\tprefix + \"[\" + (typeof v === \"object\" && v != null ? i : \"\") + \"]\",\n\t\t\t\t\t\tv,\n\t\t\t\t\t\ttraditional,\n\t\t\t\t\t\tadd\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t});\n\n\t\t} else if (!traditional && toType(obj) === \"object\") {\n\n\t\t\t// Serialize object item.\n\t\t\tfor (name in obj) {\n\t\t\t\tbuildParams(prefix + \"[\" + name + \"]\", obj[name], traditional, add);\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// Serialize scalar item.\n\t\t\tadd(prefix, obj);\n\t\t}\n\t}\n\n\t// Serialize an array of form elements or a set of\n\t// key/values into a query string\n\tjQuery.param = function (a, traditional) {\n\t\tvar prefix,\n\t\t\ts = [],\n\t\t\tadd = function (key, valueOrFunction) {\n\n\t\t\t\t// If value is a function, invoke it and use its return value\n\t\t\t\tvar value = isFunction(valueOrFunction) ?\n\t\t\t\t\tvalueOrFunction() :\n\t\t\t\t\tvalueOrFunction;\n\n\t\t\t\ts[s.length] = encodeURIComponent(key) + \"=\" +\n\t\t\t\t\tencodeURIComponent(value == null ? \"\" : value);\n\t\t\t};\n\n\t\tif (a == null) {\n\t\t\treturn \"\";\n\t\t}\n\n\t\t// If an array was passed in, assume that it is an array of form elements.\n\t\tif (Array.isArray(a) || (a.jquery && !jQuery.isPlainObject(a))) {\n\n\t\t\t// Serialize the form elements\n\t\t\tjQuery.each(a, function () {\n\t\t\t\tadd(this.name, this.value);\n\t\t\t});\n\n\t\t} else {\n\n\t\t\t// If traditional, encode the \"old\" way (the way 1.3.2 or older\n\t\t\t// did it), otherwise encode params recursively.\n\t\t\tfor (prefix in a) {\n\t\t\t\tbuildParams(prefix, a[prefix], traditional, add);\n\t\t\t}\n\t\t}\n\n\t\t// Return the resulting serialization\n\t\treturn s.join(\"&\");\n\t};\n\n\tjQuery.fn.extend({\n\t\tserialize: function () {\n\t\t\treturn jQuery.param(this.serializeArray());\n\t\t},\n\t\tserializeArray: function () {\n\t\t\treturn this.map(function () {\n\n\t\t\t\t// Can add propHook for \"elements\" to filter or add form elements\n\t\t\t\tvar elements = jQuery.prop(this, \"elements\");\n\t\t\t\treturn elements ? jQuery.makeArray(elements) : this;\n\t\t\t}).filter(function () {\n\t\t\t\tvar type = this.type;\n\n\t\t\t\t// Use .is( \":disabled\" ) so that fieldset[disabled] works\n\t\t\t\treturn this.name && !jQuery(this).is(\":disabled\") &&\n\t\t\t\t\trsubmittable.test(this.nodeName) && !rsubmitterTypes.test(type) &&\n\t\t\t\t\t(this.checked || !rcheckableType.test(type));\n\t\t\t}).map(function (_i, elem) {\n\t\t\t\tvar val = jQuery(this).val();\n\n\t\t\t\tif (val == null) {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\n\t\t\t\tif (Array.isArray(val)) {\n\t\t\t\t\treturn jQuery.map(val, function (val) {\n\t\t\t\t\t\treturn { name: elem.name, value: val.replace(rCRLF, \"\\r\\n\") };\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\treturn { name: elem.name, value: val.replace(rCRLF, \"\\r\\n\") };\n\t\t\t}).get();\n\t\t}\n\t});\n\n\n\tvar\n\t\tr20 = /%20/g,\n\t\trhash = /#.*$/,\n\t\trantiCache = /([?&])_=[^&]*/,\n\t\trheaders = /^(.*?):[ \\t]*([^\\r\\n]*)$/mg,\n\n\t\t// trac-7653, trac-8125, trac-8152: local protocol detection\n\t\trlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,\n\t\trnoContent = /^(?:GET|HEAD)$/,\n\t\trprotocol = /^\\/\\//,\n\n\t\t/* Prefilters\n\t\t * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)\n\t\t * 2) These are called:\n\t\t *    - BEFORE asking for a transport\n\t\t *    - AFTER param serialization (s.data is a string if s.processData is true)\n\t\t * 3) key is the dataType\n\t\t * 4) the catchall symbol \"*\" can be used\n\t\t * 5) execution will start with transport dataType and THEN continue down to \"*\" if needed\n\t\t */\n\t\tprefilters = {},\n\n\t\t/* Transports bindings\n\t\t * 1) key is the dataType\n\t\t * 2) the catchall symbol \"*\" can be used\n\t\t * 3) selection will start with transport dataType and THEN go to \"*\" if needed\n\t\t */\n\t\ttransports = {},\n\n\t\t// Avoid comment-prolog char sequence (trac-10098); must appease lint and evade compression\n\t\tallTypes = \"*/\".concat(\"*\"),\n\n\t\t// Anchor tag for parsing the document origin\n\t\toriginAnchor = document.createElement(\"a\");\n\n\toriginAnchor.href = location.href;\n\n\t// Base \"constructor\" for jQuery.ajaxPrefilter and jQuery.ajaxTransport\n\tfunction addToPrefiltersOrTransports(structure) {\n\n\t\t// dataTypeExpression is optional and defaults to \"*\"\n\t\treturn function (dataTypeExpression, func) {\n\n\t\t\tif (typeof dataTypeExpression !== \"string\") {\n\t\t\t\tfunc = dataTypeExpression;\n\t\t\t\tdataTypeExpression = \"*\";\n\t\t\t}\n\n\t\t\tvar dataType,\n\t\t\t\ti = 0,\n\t\t\t\tdataTypes = dataTypeExpression.toLowerCase().match(rnothtmlwhite) || [];\n\n\t\t\tif (isFunction(func)) {\n\n\t\t\t\t// For each dataType in the dataTypeExpression\n\t\t\t\twhile ((dataType = dataTypes[i++])) {\n\n\t\t\t\t\t// Prepend if requested\n\t\t\t\t\tif (dataType[0] === \"+\") {\n\t\t\t\t\t\tdataType = dataType.slice(1) || \"*\";\n\t\t\t\t\t\t(structure[dataType] = structure[dataType] || []).unshift(func);\n\n\t\t\t\t\t\t// Otherwise append\n\t\t\t\t\t} else {\n\t\t\t\t\t\t(structure[dataType] = structure[dataType] || []).push(func);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n\n\t// Base inspection function for prefilters and transports\n\tfunction inspectPrefiltersOrTransports(structure, options, originalOptions, jqXHR) {\n\n\t\tvar inspected = {},\n\t\t\tseekingTransport = (structure === transports);\n\n\t\tfunction inspect(dataType) {\n\t\t\tvar selected;\n\t\t\tinspected[dataType] = true;\n\t\t\tjQuery.each(structure[dataType] || [], function (_, prefilterOrFactory) {\n\t\t\t\tvar dataTypeOrTransport = prefilterOrFactory(options, originalOptions, jqXHR);\n\t\t\t\tif (typeof dataTypeOrTransport === \"string\" &&\n\t\t\t\t\t!seekingTransport && !inspected[dataTypeOrTransport]) {\n\n\t\t\t\t\toptions.dataTypes.unshift(dataTypeOrTransport);\n\t\t\t\t\tinspect(dataTypeOrTransport);\n\t\t\t\t\treturn false;\n\t\t\t\t} else if (seekingTransport) {\n\t\t\t\t\treturn !(selected = dataTypeOrTransport);\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn selected;\n\t\t}\n\n\t\treturn inspect(options.dataTypes[0]) || !inspected[\"*\"] && inspect(\"*\");\n\t}\n\n\t// A special extend for ajax options\n\t// that takes \"flat\" options (not to be deep extended)\n\t// Fixes trac-9887\n\tfunction ajaxExtend(target, src) {\n\t\tvar key, deep,\n\t\t\tflatOptions = jQuery.ajaxSettings.flatOptions || {};\n\n\t\tfor (key in src) {\n\t\t\tif (src[key] !== undefined) {\n\t\t\t\t(flatOptions[key] ? target : (deep || (deep = {})))[key] = src[key];\n\t\t\t}\n\t\t}\n\t\tif (deep) {\n\t\t\tjQuery.extend(true, target, deep);\n\t\t}\n\n\t\treturn target;\n\t}\n\n\t/* Handles responses to an ajax request:\n\t * - finds the right dataType (mediates between content-type and expected dataType)\n\t * - returns the corresponding response\n\t */\n\tfunction ajaxHandleResponses(s, jqXHR, responses) {\n\n\t\tvar ct, type, finalDataType, firstDataType,\n\t\t\tcontents = s.contents,\n\t\t\tdataTypes = s.dataTypes;\n\n\t\t// Remove auto dataType and get content-type in the process\n\t\twhile (dataTypes[0] === \"*\") {\n\t\t\tdataTypes.shift();\n\t\t\tif (ct === undefined) {\n\t\t\t\tct = s.mimeType || jqXHR.getResponseHeader(\"Content-Type\");\n\t\t\t}\n\t\t}\n\n\t\t// Check if we're dealing with a known content-type\n\t\tif (ct) {\n\t\t\tfor (type in contents) {\n\t\t\t\tif (contents[type] && contents[type].test(ct)) {\n\t\t\t\t\tdataTypes.unshift(type);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Check to see if we have a response for the expected dataType\n\t\tif (dataTypes[0] in responses) {\n\t\t\tfinalDataType = dataTypes[0];\n\t\t} else {\n\n\t\t\t// Try convertible dataTypes\n\t\t\tfor (type in responses) {\n\t\t\t\tif (!dataTypes[0] || s.converters[type + \" \" + dataTypes[0]]) {\n\t\t\t\t\tfinalDataType = type;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (!firstDataType) {\n\t\t\t\t\tfirstDataType = type;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Or just use first one\n\t\t\tfinalDataType = finalDataType || firstDataType;\n\t\t}\n\n\t\t// If we found a dataType\n\t\t// We add the dataType to the list if needed\n\t\t// and return the corresponding response\n\t\tif (finalDataType) {\n\t\t\tif (finalDataType !== dataTypes[0]) {\n\t\t\t\tdataTypes.unshift(finalDataType);\n\t\t\t}\n\t\t\treturn responses[finalDataType];\n\t\t}\n\t}\n\n\t/* Chain conversions given the request and the original response\n\t * Also sets the responseXXX fields on the jqXHR instance\n\t */\n\tfunction ajaxConvert(s, response, jqXHR, isSuccess) {\n\t\tvar conv2, current, conv, tmp, prev,\n\t\t\tconverters = {},\n\n\t\t\t// Work with a copy of dataTypes in case we need to modify it for conversion\n\t\t\tdataTypes = s.dataTypes.slice();\n\n\t\t// Create converters map with lowercased keys\n\t\tif (dataTypes[1]) {\n\t\t\tfor (conv in s.converters) {\n\t\t\t\tconverters[conv.toLowerCase()] = s.converters[conv];\n\t\t\t}\n\t\t}\n\n\t\tcurrent = dataTypes.shift();\n\n\t\t// Convert to each sequential dataType\n\t\twhile (current) {\n\n\t\t\tif (s.responseFields[current]) {\n\t\t\t\tjqXHR[s.responseFields[current]] = response;\n\t\t\t}\n\n\t\t\t// Apply the dataFilter if provided\n\t\t\tif (!prev && isSuccess && s.dataFilter) {\n\t\t\t\tresponse = s.dataFilter(response, s.dataType);\n\t\t\t}\n\n\t\t\tprev = current;\n\t\t\tcurrent = dataTypes.shift();\n\n\t\t\tif (current) {\n\n\t\t\t\t// There's only work to do if current dataType is non-auto\n\t\t\t\tif (current === \"*\") {\n\n\t\t\t\t\tcurrent = prev;\n\n\t\t\t\t\t// Convert response if prev dataType is non-auto and differs from current\n\t\t\t\t} else if (prev !== \"*\" && prev !== current) {\n\n\t\t\t\t\t// Seek a direct converter\n\t\t\t\t\tconv = converters[prev + \" \" + current] || converters[\"* \" + current];\n\n\t\t\t\t\t// If none found, seek a pair\n\t\t\t\t\tif (!conv) {\n\t\t\t\t\t\tfor (conv2 in converters) {\n\n\t\t\t\t\t\t\t// If conv2 outputs current\n\t\t\t\t\t\t\ttmp = conv2.split(\" \");\n\t\t\t\t\t\t\tif (tmp[1] === current) {\n\n\t\t\t\t\t\t\t\t// If prev can be converted to accepted input\n\t\t\t\t\t\t\t\tconv = converters[prev + \" \" + tmp[0]] ||\n\t\t\t\t\t\t\t\t\tconverters[\"* \" + tmp[0]];\n\t\t\t\t\t\t\t\tif (conv) {\n\n\t\t\t\t\t\t\t\t\t// Condense equivalence converters\n\t\t\t\t\t\t\t\t\tif (conv === true) {\n\t\t\t\t\t\t\t\t\t\tconv = converters[conv2];\n\n\t\t\t\t\t\t\t\t\t\t// Otherwise, insert the intermediate dataType\n\t\t\t\t\t\t\t\t\t} else if (converters[conv2] !== true) {\n\t\t\t\t\t\t\t\t\t\tcurrent = tmp[0];\n\t\t\t\t\t\t\t\t\t\tdataTypes.unshift(tmp[1]);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Apply converter (if not an equivalence)\n\t\t\t\t\tif (conv !== true) {\n\n\t\t\t\t\t\t// Unless errors are allowed to bubble, catch and return them\n\t\t\t\t\t\tif (conv && s.throws) {\n\t\t\t\t\t\t\tresponse = conv(response);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\tresponse = conv(response);\n\t\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\tstate: \"parsererror\",\n\t\t\t\t\t\t\t\t\terror: conv ? e : \"No conversion from \" + prev + \" to \" + current\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn { state: \"success\", data: response };\n\t}\n\n\tjQuery.extend({\n\n\t\t// Counter for holding the number of active queries\n\t\tactive: 0,\n\n\t\t// Last-Modified header cache for next request\n\t\tlastModified: {},\n\t\tetag: {},\n\n\t\tajaxSettings: {\n\t\t\turl: location.href,\n\t\t\ttype: \"GET\",\n\t\t\tisLocal: rlocalProtocol.test(location.protocol),\n\t\t\tglobal: true,\n\t\t\tprocessData: true,\n\t\t\tasync: true,\n\t\t\tcontentType: \"application/x-www-form-urlencoded; charset=UTF-8\",\n\n\t\t\t/*\n\t\t\ttimeout: 0,\n\t\t\tdata: null,\n\t\t\tdataType: null,\n\t\t\tusername: null,\n\t\t\tpassword: null,\n\t\t\tcache: null,\n\t\t\tthrows: false,\n\t\t\ttraditional: false,\n\t\t\theaders: {},\n\t\t\t*/\n\n\t\t\taccepts: {\n\t\t\t\t\"*\": allTypes,\n\t\t\t\ttext: \"text/plain\",\n\t\t\t\thtml: \"text/html\",\n\t\t\t\txml: \"application/xml, text/xml\",\n\t\t\t\tjson: \"application/json, text/javascript\"\n\t\t\t},\n\n\t\t\tcontents: {\n\t\t\t\txml: /\\bxml\\b/,\n\t\t\t\thtml: /\\bhtml/,\n\t\t\t\tjson: /\\bjson\\b/\n\t\t\t},\n\n\t\t\tresponseFields: {\n\t\t\t\txml: \"responseXML\",\n\t\t\t\ttext: \"responseText\",\n\t\t\t\tjson: \"responseJSON\"\n\t\t\t},\n\n\t\t\t// Data converters\n\t\t\t// Keys separate source (or catchall \"*\") and destination types with a single space\n\t\t\tconverters: {\n\n\t\t\t\t// Convert anything to text\n\t\t\t\t\"* text\": String,\n\n\t\t\t\t// Text to html (true = no transformation)\n\t\t\t\t\"text html\": true,\n\n\t\t\t\t// Evaluate text as a json expression\n\t\t\t\t\"text json\": JSON.parse,\n\n\t\t\t\t// Parse text as xml\n\t\t\t\t\"text xml\": jQuery.parseXML\n\t\t\t},\n\n\t\t\t// For options that shouldn't be deep extended:\n\t\t\t// you can add your own custom options here if\n\t\t\t// and when you create one that shouldn't be\n\t\t\t// deep extended (see ajaxExtend)\n\t\t\tflatOptions: {\n\t\t\t\turl: true,\n\t\t\t\tcontext: true\n\t\t\t}\n\t\t},\n\n\t\t// Creates a full fledged settings object into target\n\t\t// with both ajaxSettings and settings fields.\n\t\t// If target is omitted, writes into ajaxSettings.\n\t\tajaxSetup: function (target, settings) {\n\t\t\treturn settings ?\n\n\t\t\t\t// Building a settings object\n\t\t\t\tajaxExtend(ajaxExtend(target, jQuery.ajaxSettings), settings) :\n\n\t\t\t\t// Extending ajaxSettings\n\t\t\t\tajaxExtend(jQuery.ajaxSettings, target);\n\t\t},\n\n\t\tajaxPrefilter: addToPrefiltersOrTransports(prefilters),\n\t\tajaxTransport: addToPrefiltersOrTransports(transports),\n\n\t\t// Main method\n\t\tajax: function (url, options) {\n\n\t\t\t// If url is an object, simulate pre-1.5 signature\n\t\t\tif (typeof url === \"object\") {\n\t\t\t\toptions = url;\n\t\t\t\turl = undefined;\n\t\t\t}\n\n\t\t\t// Force options to be an object\n\t\t\toptions = options || {};\n\n\t\t\tvar transport,\n\n\t\t\t\t// URL without anti-cache param\n\t\t\t\tcacheURL,\n\n\t\t\t\t// Response headers\n\t\t\t\tresponseHeadersString,\n\t\t\t\tresponseHeaders,\n\n\t\t\t\t// timeout handle\n\t\t\t\ttimeoutTimer,\n\n\t\t\t\t// Url cleanup var\n\t\t\t\turlAnchor,\n\n\t\t\t\t// Request state (becomes false upon send and true upon completion)\n\t\t\t\tcompleted,\n\n\t\t\t\t// To know if global events are to be dispatched\n\t\t\t\tfireGlobals,\n\n\t\t\t\t// Loop variable\n\t\t\t\ti,\n\n\t\t\t\t// uncached part of the url\n\t\t\t\tuncached,\n\n\t\t\t\t// Create the final options object\n\t\t\t\ts = jQuery.ajaxSetup({}, options),\n\n\t\t\t\t// Callbacks context\n\t\t\t\tcallbackContext = s.context || s,\n\n\t\t\t\t// Context for global events is callbackContext if it is a DOM node or jQuery collection\n\t\t\t\tglobalEventContext = s.context &&\n\t\t\t\t\t(callbackContext.nodeType || callbackContext.jquery) ?\n\t\t\t\t\tjQuery(callbackContext) :\n\t\t\t\t\tjQuery.event,\n\n\t\t\t\t// Deferreds\n\t\t\t\tdeferred = jQuery.Deferred(),\n\t\t\t\tcompleteDeferred = jQuery.Callbacks(\"once memory\"),\n\n\t\t\t\t// Status-dependent callbacks\n\t\t\t\tstatusCode = s.statusCode || {},\n\n\t\t\t\t// Headers (they are sent all at once)\n\t\t\t\trequestHeaders = {},\n\t\t\t\trequestHeadersNames = {},\n\n\t\t\t\t// Default abort message\n\t\t\t\tstrAbort = \"canceled\",\n\n\t\t\t\t// Fake xhr\n\t\t\t\tjqXHR = {\n\t\t\t\t\treadyState: 0,\n\n\t\t\t\t\t// Builds headers hashtable if needed\n\t\t\t\t\tgetResponseHeader: function (key) {\n\t\t\t\t\t\tvar match;\n\t\t\t\t\t\tif (completed) {\n\t\t\t\t\t\t\tif (!responseHeaders) {\n\t\t\t\t\t\t\t\tresponseHeaders = {};\n\t\t\t\t\t\t\t\twhile ((match = rheaders.exec(responseHeadersString))) {\n\t\t\t\t\t\t\t\t\tresponseHeaders[match[1].toLowerCase() + \" \"] =\n\t\t\t\t\t\t\t\t\t\t(responseHeaders[match[1].toLowerCase() + \" \"] || [])\n\t\t\t\t\t\t\t\t\t\t\t.concat(match[2]);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tmatch = responseHeaders[key.toLowerCase() + \" \"];\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn match == null ? null : match.join(\", \");\n\t\t\t\t\t},\n\n\t\t\t\t\t// Raw string\n\t\t\t\t\tgetAllResponseHeaders: function () {\n\t\t\t\t\t\treturn completed ? responseHeadersString : null;\n\t\t\t\t\t},\n\n\t\t\t\t\t// Caches the header\n\t\t\t\t\tsetRequestHeader: function (name, value) {\n\t\t\t\t\t\tif (completed == null) {\n\t\t\t\t\t\t\tname = requestHeadersNames[name.toLowerCase()] =\n\t\t\t\t\t\t\t\trequestHeadersNames[name.toLowerCase()] || name;\n\t\t\t\t\t\t\trequestHeaders[name] = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn this;\n\t\t\t\t\t},\n\n\t\t\t\t\t// Overrides response content-type header\n\t\t\t\t\toverrideMimeType: function (type) {\n\t\t\t\t\t\tif (completed == null) {\n\t\t\t\t\t\t\ts.mimeType = type;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn this;\n\t\t\t\t\t},\n\n\t\t\t\t\t// Status-dependent callbacks\n\t\t\t\t\tstatusCode: function (map) {\n\t\t\t\t\t\tvar code;\n\t\t\t\t\t\tif (map) {\n\t\t\t\t\t\t\tif (completed) {\n\n\t\t\t\t\t\t\t\t// Execute the appropriate callbacks\n\t\t\t\t\t\t\t\tjqXHR.always(map[jqXHR.status]);\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t// Lazy-add the new callbacks in a way that preserves old ones\n\t\t\t\t\t\t\t\tfor (code in map) {\n\t\t\t\t\t\t\t\t\tstatusCode[code] = [statusCode[code], map[code]];\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn this;\n\t\t\t\t\t},\n\n\t\t\t\t\t// Cancel the request\n\t\t\t\t\tabort: function (statusText) {\n\t\t\t\t\t\tvar finalText = statusText || strAbort;\n\t\t\t\t\t\tif (transport) {\n\t\t\t\t\t\t\ttransport.abort(finalText);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdone(0, finalText);\n\t\t\t\t\t\treturn this;\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t// Attach deferreds\n\t\t\tdeferred.promise(jqXHR);\n\n\t\t\t// Add protocol if not provided (prefilters might expect it)\n\t\t\t// Handle falsy url in the settings object (trac-10093: consistency with old signature)\n\t\t\t// We also use the url parameter if available\n\t\t\ts.url = ((url || s.url || location.href) + \"\")\n\t\t\t\t.replace(rprotocol, location.protocol + \"//\");\n\n\t\t\t// Alias method option to type as per ticket trac-12004\n\t\t\ts.type = options.method || options.type || s.method || s.type;\n\n\t\t\t// Extract dataTypes list\n\t\t\ts.dataTypes = (s.dataType || \"*\").toLowerCase().match(rnothtmlwhite) || [\"\"];\n\n\t\t\t// A cross-domain request is in order when the origin doesn't match the current origin.\n\t\t\tif (s.crossDomain == null) {\n\t\t\t\turlAnchor = document.createElement(\"a\");\n\n\t\t\t\t// Support: IE <=8 - 11, Edge 12 - 15\n\t\t\t\t// IE throws exception on accessing the href property if url is malformed,\n\t\t\t\t// e.g. http://example.com:80x/\n\t\t\t\ttry {\n\t\t\t\t\turlAnchor.href = s.url;\n\n\t\t\t\t\t// Support: IE <=8 - 11 only\n\t\t\t\t\t// Anchor's host property isn't correctly set when s.url is relative\n\t\t\t\t\turlAnchor.href = urlAnchor.href;\n\t\t\t\t\ts.crossDomain = originAnchor.protocol + \"//\" + originAnchor.host !==\n\t\t\t\t\t\turlAnchor.protocol + \"//\" + urlAnchor.host;\n\t\t\t\t} catch (e) {\n\n\t\t\t\t\t// If there is an error parsing the URL, assume it is crossDomain,\n\t\t\t\t\t// it can be rejected by the transport if it is invalid\n\t\t\t\t\ts.crossDomain = true;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Convert data if not already a string\n\t\t\tif (s.data && s.processData && typeof s.data !== \"string\") {\n\t\t\t\ts.data = jQuery.param(s.data, s.traditional);\n\t\t\t}\n\n\t\t\t// Apply prefilters\n\t\t\tinspectPrefiltersOrTransports(prefilters, s, options, jqXHR);\n\n\t\t\t// If request was aborted inside a prefilter, stop there\n\t\t\tif (completed) {\n\t\t\t\treturn jqXHR;\n\t\t\t}\n\n\t\t\t// We can fire global events as of now if asked to\n\t\t\t// Don't fire events if jQuery.event is undefined in an AMD-usage scenario (trac-15118)\n\t\t\tfireGlobals = jQuery.event && s.global;\n\n\t\t\t// Watch for a new set of requests\n\t\t\tif (fireGlobals && jQuery.active++ === 0) {\n\t\t\t\tjQuery.event.trigger(\"ajaxStart\");\n\t\t\t}\n\n\t\t\t// Uppercase the type\n\t\t\ts.type = s.type.toUpperCase();\n\n\t\t\t// Determine if request has content\n\t\t\ts.hasContent = !rnoContent.test(s.type);\n\n\t\t\t// Save the URL in case we're toying with the If-Modified-Since\n\t\t\t// and/or If-None-Match header later on\n\t\t\t// Remove hash to simplify url manipulation\n\t\t\tcacheURL = s.url.replace(rhash, \"\");\n\n\t\t\t// More options handling for requests with no content\n\t\t\tif (!s.hasContent) {\n\n\t\t\t\t// Remember the hash so we can put it back\n\t\t\t\tuncached = s.url.slice(cacheURL.length);\n\n\t\t\t\t// If data is available and should be processed, append data to url\n\t\t\t\tif (s.data && (s.processData || typeof s.data === \"string\")) {\n\t\t\t\t\tcacheURL += (rquery.test(cacheURL) ? \"&\" : \"?\") + s.data;\n\n\t\t\t\t\t// trac-9682: remove data so that it's not used in an eventual retry\n\t\t\t\t\tdelete s.data;\n\t\t\t\t}\n\n\t\t\t\t// Add or update anti-cache param if needed\n\t\t\t\tif (s.cache === false) {\n\t\t\t\t\tcacheURL = cacheURL.replace(rantiCache, \"$1\");\n\t\t\t\t\tuncached = (rquery.test(cacheURL) ? \"&\" : \"?\") + \"_=\" + (nonce.guid++) +\n\t\t\t\t\t\tuncached;\n\t\t\t\t}\n\n\t\t\t\t// Put hash and anti-cache on the URL that will be requested (gh-1732)\n\t\t\t\ts.url = cacheURL + uncached;\n\n\t\t\t\t// Change '%20' to '+' if this is encoded form body content (gh-2658)\n\t\t\t} else if (s.data && s.processData &&\n\t\t\t\t(s.contentType || \"\").indexOf(\"application/x-www-form-urlencoded\") === 0) {\n\t\t\t\ts.data = s.data.replace(r20, \"+\");\n\t\t\t}\n\n\t\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\t\tif (s.ifModified) {\n\t\t\t\tif (jQuery.lastModified[cacheURL]) {\n\t\t\t\t\tjqXHR.setRequestHeader(\"If-Modified-Since\", jQuery.lastModified[cacheURL]);\n\t\t\t\t}\n\t\t\t\tif (jQuery.etag[cacheURL]) {\n\t\t\t\t\tjqXHR.setRequestHeader(\"If-None-Match\", jQuery.etag[cacheURL]);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Set the correct header, if data is being sent\n\t\t\tif (s.data && s.hasContent && s.contentType !== false || options.contentType) {\n\t\t\t\tjqXHR.setRequestHeader(\"Content-Type\", s.contentType);\n\t\t\t}\n\n\t\t\t// Set the Accepts header for the server, depending on the dataType\n\t\t\tjqXHR.setRequestHeader(\n\t\t\t\t\"Accept\",\n\t\t\t\ts.dataTypes[0] && s.accepts[s.dataTypes[0]] ?\n\t\t\t\t\ts.accepts[s.dataTypes[0]] +\n\t\t\t\t\t(s.dataTypes[0] !== \"*\" ? \", \" + allTypes + \"; q=0.01\" : \"\") :\n\t\t\t\t\ts.accepts[\"*\"]\n\t\t\t);\n\n\t\t\t// Check for headers option\n\t\t\tfor (i in s.headers) {\n\t\t\t\tjqXHR.setRequestHeader(i, s.headers[i]);\n\t\t\t}\n\n\t\t\t// Allow custom headers/mimetypes and early abort\n\t\t\tif (s.beforeSend &&\n\t\t\t\t(s.beforeSend.call(callbackContext, jqXHR, s) === false || completed)) {\n\n\t\t\t\t// Abort if not done already and return\n\t\t\t\treturn jqXHR.abort();\n\t\t\t}\n\n\t\t\t// Aborting is no longer a cancellation\n\t\t\tstrAbort = \"abort\";\n\n\t\t\t// Install callbacks on deferreds\n\t\t\tcompleteDeferred.add(s.complete);\n\t\t\tjqXHR.done(s.success);\n\t\t\tjqXHR.fail(s.error);\n\n\t\t\t// Get transport\n\t\t\ttransport = inspectPrefiltersOrTransports(transports, s, options, jqXHR);\n\n\t\t\t// If no transport, we auto-abort\n\t\t\tif (!transport) {\n\t\t\t\tdone(-1, \"No Transport\");\n\t\t\t} else {\n\t\t\t\tjqXHR.readyState = 1;\n\n\t\t\t\t// Send global event\n\t\t\t\tif (fireGlobals) {\n\t\t\t\t\tglobalEventContext.trigger(\"ajaxSend\", [jqXHR, s]);\n\t\t\t\t}\n\n\t\t\t\t// If request was aborted inside ajaxSend, stop there\n\t\t\t\tif (completed) {\n\t\t\t\t\treturn jqXHR;\n\t\t\t\t}\n\n\t\t\t\t// Timeout\n\t\t\t\tif (s.async && s.timeout > 0) {\n\t\t\t\t\ttimeoutTimer = window.setTimeout(function () {\n\t\t\t\t\t\tjqXHR.abort(\"timeout\");\n\t\t\t\t\t}, s.timeout);\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tcompleted = false;\n\t\t\t\t\ttransport.send(requestHeaders, done);\n\t\t\t\t} catch (e) {\n\n\t\t\t\t\t// Rethrow post-completion exceptions\n\t\t\t\t\tif (completed) {\n\t\t\t\t\t\tthrow e;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Propagate others as results\n\t\t\t\t\tdone(-1, e);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Callback for when everything is done\n\t\t\tfunction done(status, nativeStatusText, responses, headers) {\n\t\t\t\tvar isSuccess, success, error, response, modified,\n\t\t\t\t\tstatusText = nativeStatusText;\n\n\t\t\t\t// Ignore repeat invocations\n\t\t\t\tif (completed) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tcompleted = true;\n\n\t\t\t\t// Clear timeout if it exists\n\t\t\t\tif (timeoutTimer) {\n\t\t\t\t\twindow.clearTimeout(timeoutTimer);\n\t\t\t\t}\n\n\t\t\t\t// Dereference transport for early garbage collection\n\t\t\t\t// (no matter how long the jqXHR object will be used)\n\t\t\t\ttransport = undefined;\n\n\t\t\t\t// Cache response headers\n\t\t\t\tresponseHeadersString = headers || \"\";\n\n\t\t\t\t// Set readyState\n\t\t\t\tjqXHR.readyState = status > 0 ? 4 : 0;\n\n\t\t\t\t// Determine if successful\n\t\t\t\tisSuccess = status >= 200 && status < 300 || status === 304;\n\n\t\t\t\t// Get response data\n\t\t\t\tif (responses) {\n\t\t\t\t\tresponse = ajaxHandleResponses(s, jqXHR, responses);\n\t\t\t\t}\n\n\t\t\t\t// Use a noop converter for missing script but not if jsonp\n\t\t\t\tif (!isSuccess &&\n\t\t\t\t\tjQuery.inArray(\"script\", s.dataTypes) > -1 &&\n\t\t\t\t\tjQuery.inArray(\"json\", s.dataTypes) < 0) {\n\t\t\t\t\ts.converters[\"text script\"] = function () { };\n\t\t\t\t}\n\n\t\t\t\t// Convert no matter what (that way responseXXX fields are always set)\n\t\t\t\tresponse = ajaxConvert(s, response, jqXHR, isSuccess);\n\n\t\t\t\t// If successful, handle type chaining\n\t\t\t\tif (isSuccess) {\n\n\t\t\t\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\t\t\t\tif (s.ifModified) {\n\t\t\t\t\t\tmodified = jqXHR.getResponseHeader(\"Last-Modified\");\n\t\t\t\t\t\tif (modified) {\n\t\t\t\t\t\t\tjQuery.lastModified[cacheURL] = modified;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmodified = jqXHR.getResponseHeader(\"etag\");\n\t\t\t\t\t\tif (modified) {\n\t\t\t\t\t\t\tjQuery.etag[cacheURL] = modified;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// if no content\n\t\t\t\t\tif (status === 204 || s.type === \"HEAD\") {\n\t\t\t\t\t\tstatusText = \"nocontent\";\n\n\t\t\t\t\t\t// if not modified\n\t\t\t\t\t} else if (status === 304) {\n\t\t\t\t\t\tstatusText = \"notmodified\";\n\n\t\t\t\t\t\t// If we have data, let's convert it\n\t\t\t\t\t} else {\n\t\t\t\t\t\tstatusText = response.state;\n\t\t\t\t\t\tsuccess = response.data;\n\t\t\t\t\t\terror = response.error;\n\t\t\t\t\t\tisSuccess = !error;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\n\t\t\t\t\t// Extract error from statusText and normalize for non-aborts\n\t\t\t\t\terror = statusText;\n\t\t\t\t\tif (status || !statusText) {\n\t\t\t\t\t\tstatusText = \"error\";\n\t\t\t\t\t\tif (status < 0) {\n\t\t\t\t\t\t\tstatus = 0;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Set data for the fake xhr object\n\t\t\t\tjqXHR.status = status;\n\t\t\t\tjqXHR.statusText = (nativeStatusText || statusText) + \"\";\n\n\t\t\t\t// Success/Error\n\t\t\t\tif (isSuccess) {\n\t\t\t\t\tdeferred.resolveWith(callbackContext, [success, statusText, jqXHR]);\n\t\t\t\t} else {\n\t\t\t\t\tdeferred.rejectWith(callbackContext, [jqXHR, statusText, error]);\n\t\t\t\t}\n\n\t\t\t\t// Status-dependent callbacks\n\t\t\t\tjqXHR.statusCode(statusCode);\n\t\t\t\tstatusCode = undefined;\n\n\t\t\t\tif (fireGlobals) {\n\t\t\t\t\tglobalEventContext.trigger(isSuccess ? \"ajaxSuccess\" : \"ajaxError\",\n\t\t\t\t\t\t[jqXHR, s, isSuccess ? success : error]);\n\t\t\t\t}\n\n\t\t\t\t// Complete\n\t\t\t\tcompleteDeferred.fireWith(callbackContext, [jqXHR, statusText]);\n\n\t\t\t\tif (fireGlobals) {\n\t\t\t\t\tglobalEventContext.trigger(\"ajaxComplete\", [jqXHR, s]);\n\n\t\t\t\t\t// Handle the global AJAX counter\n\t\t\t\t\tif (!(--jQuery.active)) {\n\t\t\t\t\t\tjQuery.event.trigger(\"ajaxStop\");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn jqXHR;\n\t\t},\n\n\t\tgetJSON: function (url, data, callback) {\n\t\t\treturn jQuery.get(url, data, callback, \"json\");\n\t\t},\n\n\t\tgetScript: function (url, callback) {\n\t\t\treturn jQuery.get(url, undefined, callback, \"script\");\n\t\t}\n\t});\n\n\tjQuery.each([\"get\", \"post\"], function (_i, method) {\n\t\tjQuery[method] = function (url, data, callback, type) {\n\n\t\t\t// Shift arguments if data argument was omitted\n\t\t\tif (isFunction(data)) {\n\t\t\t\ttype = type || callback;\n\t\t\t\tcallback = data;\n\t\t\t\tdata = undefined;\n\t\t\t}\n\n\t\t\t// The url can be an options object (which then must have .url)\n\t\t\treturn jQuery.ajax(jQuery.extend({\n\t\t\t\turl: url,\n\t\t\t\ttype: method,\n\t\t\t\tdataType: type,\n\t\t\t\tdata: data,\n\t\t\t\tsuccess: callback\n\t\t\t}, jQuery.isPlainObject(url) && url));\n\t\t};\n\t});\n\n\tjQuery.ajaxPrefilter(function (s) {\n\t\tvar i;\n\t\tfor (i in s.headers) {\n\t\t\tif (i.toLowerCase() === \"content-type\") {\n\t\t\t\ts.contentType = s.headers[i] || \"\";\n\t\t\t}\n\t\t}\n\t});\n\n\n\tjQuery._evalUrl = function (url, options, doc) {\n\t\treturn jQuery.ajax({\n\t\t\turl: url,\n\n\t\t\t// Make this explicit, since user can override this through ajaxSetup (trac-11264)\n\t\t\ttype: \"GET\",\n\t\t\tdataType: \"script\",\n\t\t\tcache: true,\n\t\t\tasync: false,\n\t\t\tglobal: false,\n\n\t\t\t// Only evaluate the response if it is successful (gh-4126)\n\t\t\t// dataFilter is not invoked for failure responses, so using it instead\n\t\t\t// of the default converter is kludgy but it works.\n\t\t\tconverters: {\n\t\t\t\t\"text script\": function () { }\n\t\t\t},\n\t\t\tdataFilter: function (response) {\n\t\t\t\tjQuery.globalEval(response, options, doc);\n\t\t\t}\n\t\t});\n\t};\n\n\n\tjQuery.fn.extend({\n\t\twrapAll: function (html) {\n\t\t\tvar wrap;\n\n\t\t\tif (this[0]) {\n\t\t\t\tif (isFunction(html)) {\n\t\t\t\t\thtml = html.call(this[0]);\n\t\t\t\t}\n\n\t\t\t\t// The elements to wrap the target around\n\t\t\t\twrap = jQuery(html, this[0].ownerDocument).eq(0).clone(true);\n\n\t\t\t\tif (this[0].parentNode) {\n\t\t\t\t\twrap.insertBefore(this[0]);\n\t\t\t\t}\n\n\t\t\t\twrap.map(function () {\n\t\t\t\t\tvar elem = this;\n\n\t\t\t\t\twhile (elem.firstElementChild) {\n\t\t\t\t\t\telem = elem.firstElementChild;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn elem;\n\t\t\t\t}).append(this);\n\t\t\t}\n\n\t\t\treturn this;\n\t\t},\n\n\t\twrapInner: function (html) {\n\t\t\tif (isFunction(html)) {\n\t\t\t\treturn this.each(function (i) {\n\t\t\t\t\tjQuery(this).wrapInner(html.call(this, i));\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn this.each(function () {\n\t\t\t\tvar self = jQuery(this),\n\t\t\t\t\tcontents = self.contents();\n\n\t\t\t\tif (contents.length) {\n\t\t\t\t\tcontents.wrapAll(html);\n\n\t\t\t\t} else {\n\t\t\t\t\tself.append(html);\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\twrap: function (html) {\n\t\t\tvar htmlIsFunction = isFunction(html);\n\n\t\t\treturn this.each(function (i) {\n\t\t\t\tjQuery(this).wrapAll(htmlIsFunction ? html.call(this, i) : html);\n\t\t\t});\n\t\t},\n\n\t\tunwrap: function (selector) {\n\t\t\tthis.parent(selector).not(\"body\").each(function () {\n\t\t\t\tjQuery(this).replaceWith(this.childNodes);\n\t\t\t});\n\t\t\treturn this;\n\t\t}\n\t});\n\n\n\tjQuery.expr.pseudos.hidden = function (elem) {\n\t\treturn !jQuery.expr.pseudos.visible(elem);\n\t};\n\tjQuery.expr.pseudos.visible = function (elem) {\n\t\treturn !!(elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length);\n\t};\n\n\n\n\n\tjQuery.ajaxSettings.xhr = function () {\n\t\ttry {\n\t\t\treturn new window.XMLHttpRequest();\n\t\t} catch (e) { }\n\t};\n\n\tvar xhrSuccessStatus = {\n\n\t\t// File protocol always yields status code 0, assume 200\n\t\t0: 200,\n\n\t\t// Support: IE <=9 only\n\t\t// trac-1450: sometimes IE returns 1223 when it should be 204\n\t\t1223: 204\n\t},\n\t\txhrSupported = jQuery.ajaxSettings.xhr();\n\n\tsupport.cors = !!xhrSupported && (\"withCredentials\" in xhrSupported);\n\tsupport.ajax = xhrSupported = !!xhrSupported;\n\n\tjQuery.ajaxTransport(function (options) {\n\t\tvar callback, errorCallback;\n\n\t\t// Cross domain only allowed if supported through XMLHttpRequest\n\t\tif (support.cors || xhrSupported && !options.crossDomain) {\n\t\t\treturn {\n\t\t\t\tsend: function (headers, complete) {\n\t\t\t\t\tvar i,\n\t\t\t\t\t\txhr = options.xhr();\n\n\t\t\t\t\txhr.open(\n\t\t\t\t\t\toptions.type,\n\t\t\t\t\t\toptions.url,\n\t\t\t\t\t\toptions.async,\n\t\t\t\t\t\toptions.username,\n\t\t\t\t\t\toptions.password\n\t\t\t\t\t);\n\n\t\t\t\t\t// Apply custom fields if provided\n\t\t\t\t\tif (options.xhrFields) {\n\t\t\t\t\t\tfor (i in options.xhrFields) {\n\t\t\t\t\t\t\txhr[i] = options.xhrFields[i];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Override mime type if needed\n\t\t\t\t\tif (options.mimeType && xhr.overrideMimeType) {\n\t\t\t\t\t\txhr.overrideMimeType(options.mimeType);\n\t\t\t\t\t}\n\n\t\t\t\t\t// X-Requested-With header\n\t\t\t\t\t// For cross-domain requests, seeing as conditions for a preflight are\n\t\t\t\t\t// akin to a jigsaw puzzle, we simply never set it to be sure.\n\t\t\t\t\t// (it can always be set on a per-request basis or even using ajaxSetup)\n\t\t\t\t\t// For same-domain requests, won't change header if already provided.\n\t\t\t\t\tif (!options.crossDomain && !headers[\"X-Requested-With\"]) {\n\t\t\t\t\t\theaders[\"X-Requested-With\"] = \"XMLHttpRequest\";\n\t\t\t\t\t}\n\n\t\t\t\t\t// Set headers\n\t\t\t\t\tfor (i in headers) {\n\t\t\t\t\t\txhr.setRequestHeader(i, headers[i]);\n\t\t\t\t\t}\n\n\t\t\t\t\t// Callback\n\t\t\t\t\tcallback = function (type) {\n\t\t\t\t\t\treturn function () {\n\t\t\t\t\t\t\tif (callback) {\n\t\t\t\t\t\t\t\tcallback = errorCallback = xhr.onload =\n\t\t\t\t\t\t\t\t\txhr.onerror = xhr.onabort = xhr.ontimeout =\n\t\t\t\t\t\t\t\t\txhr.onreadystatechange = null;\n\n\t\t\t\t\t\t\t\tif (type === \"abort\") {\n\t\t\t\t\t\t\t\t\txhr.abort();\n\t\t\t\t\t\t\t\t} else if (type === \"error\") {\n\n\t\t\t\t\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t\t\t\t\t// On a manual native abort, IE9 throws\n\t\t\t\t\t\t\t\t\t// errors on any property access that is not readyState\n\t\t\t\t\t\t\t\t\tif (typeof xhr.status !== \"number\") {\n\t\t\t\t\t\t\t\t\t\tcomplete(0, \"error\");\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tcomplete(\n\n\t\t\t\t\t\t\t\t\t\t\t// File: protocol always yields status 0; see trac-8605, trac-14207\n\t\t\t\t\t\t\t\t\t\t\txhr.status,\n\t\t\t\t\t\t\t\t\t\t\txhr.statusText\n\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tcomplete(\n\t\t\t\t\t\t\t\t\t\txhrSuccessStatus[xhr.status] || xhr.status,\n\t\t\t\t\t\t\t\t\t\txhr.statusText,\n\n\t\t\t\t\t\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t\t\t\t\t\t// IE9 has no XHR2 but throws on binary (trac-11426)\n\t\t\t\t\t\t\t\t\t\t// For XHR2 non-text, let the caller handle it (gh-2498)\n\t\t\t\t\t\t\t\t\t\t(xhr.responseType || \"text\") !== \"text\" ||\n\t\t\t\t\t\t\t\t\t\t\ttypeof xhr.responseText !== \"string\" ?\n\t\t\t\t\t\t\t\t\t\t\t{ binary: xhr.response } :\n\t\t\t\t\t\t\t\t\t\t\t{ text: xhr.responseText },\n\t\t\t\t\t\t\t\t\t\txhr.getAllResponseHeaders()\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\t\t\t\t\t};\n\n\t\t\t\t\t// Listen to events\n\t\t\t\t\txhr.onload = callback();\n\t\t\t\t\terrorCallback = xhr.onerror = xhr.ontimeout = callback(\"error\");\n\n\t\t\t\t\t// Support: IE 9 only\n\t\t\t\t\t// Use onreadystatechange to replace onabort\n\t\t\t\t\t// to handle uncaught aborts\n\t\t\t\t\tif (xhr.onabort !== undefined) {\n\t\t\t\t\t\txhr.onabort = errorCallback;\n\t\t\t\t\t} else {\n\t\t\t\t\t\txhr.onreadystatechange = function () {\n\n\t\t\t\t\t\t\t// Check readyState before timeout as it changes\n\t\t\t\t\t\t\tif (xhr.readyState === 4) {\n\n\t\t\t\t\t\t\t\t// Allow onerror to be called first,\n\t\t\t\t\t\t\t\t// but that will not handle a native abort\n\t\t\t\t\t\t\t\t// Also, save errorCallback to a variable\n\t\t\t\t\t\t\t\t// as xhr.onerror cannot be accessed\n\t\t\t\t\t\t\t\twindow.setTimeout(function () {\n\t\t\t\t\t\t\t\t\tif (callback) {\n\t\t\t\t\t\t\t\t\t\terrorCallback();\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\t// Create the abort callback\n\t\t\t\t\tcallback = callback(\"abort\");\n\n\t\t\t\t\ttry {\n\n\t\t\t\t\t\t// Do send the request (this may raise an exception)\n\t\t\t\t\t\txhr.send(options.hasContent && options.data || null);\n\t\t\t\t\t} catch (e) {\n\n\t\t\t\t\t\t// trac-14683: Only rethrow if this hasn't been notified as an error yet\n\t\t\t\t\t\tif (callback) {\n\t\t\t\t\t\t\tthrow e;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\t\tabort: function () {\n\t\t\t\t\tif (callback) {\n\t\t\t\t\t\tcallback();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t});\n\n\n\n\n\t// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432)\n\tjQuery.ajaxPrefilter(function (s) {\n\t\tif (s.crossDomain) {\n\t\t\ts.contents.script = false;\n\t\t}\n\t});\n\n\t// Install script dataType\n\tjQuery.ajaxSetup({\n\t\taccepts: {\n\t\t\tscript: \"text/javascript, application/javascript, \" +\n\t\t\t\t\"application/ecmascript, application/x-ecmascript\"\n\t\t},\n\t\tcontents: {\n\t\t\tscript: /\\b(?:java|ecma)script\\b/\n\t\t},\n\t\tconverters: {\n\t\t\t\"text script\": function (text) {\n\t\t\t\tjQuery.globalEval(text);\n\t\t\t\treturn text;\n\t\t\t}\n\t\t}\n\t});\n\n\t// Handle cache's special case and crossDomain\n\tjQuery.ajaxPrefilter(\"script\", function (s) {\n\t\tif (s.cache === undefined) {\n\t\t\ts.cache = false;\n\t\t}\n\t\tif (s.crossDomain) {\n\t\t\ts.type = \"GET\";\n\t\t}\n\t});\n\n\t// Bind script tag hack transport\n\tjQuery.ajaxTransport(\"script\", function (s) {\n\n\t\t// This transport only deals with cross domain or forced-by-attrs requests\n\t\tif (s.crossDomain || s.scriptAttrs) {\n\t\t\tvar script, callback;\n\t\t\treturn {\n\t\t\t\tsend: function (_, complete) {\n\t\t\t\t\tscript = jQuery(\"<script>\")\n\t\t\t\t\t\t.attr(s.scriptAttrs || {})\n\t\t\t\t\t\t.prop({ charset: s.scriptCharset, src: s.url })\n\t\t\t\t\t\t.on(\"load error\", callback = function (evt) {\n\t\t\t\t\t\t\tscript.remove();\n\t\t\t\t\t\t\tcallback = null;\n\t\t\t\t\t\t\tif (evt) {\n\t\t\t\t\t\t\t\tcomplete(evt.type === \"error\" ? 404 : 200, evt.type);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\n\t\t\t\t\t// Use native DOM manipulation to avoid our domManip AJAX trickery\n\t\t\t\t\tdocument.head.appendChild(script[0]);\n\t\t\t\t},\n\t\t\t\tabort: function () {\n\t\t\t\t\tif (callback) {\n\t\t\t\t\t\tcallback();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t});\n\n\n\n\n\tvar oldCallbacks = [],\n\t\trjsonp = /(=)\\?(?=&|$)|\\?\\?/;\n\n\t// Default jsonp settings\n\tjQuery.ajaxSetup({\n\t\tjsonp: \"callback\",\n\t\tjsonpCallback: function () {\n\t\t\tvar callback = oldCallbacks.pop() || (jQuery.expando + \"_\" + (nonce.guid++));\n\t\t\tthis[callback] = true;\n\t\t\treturn callback;\n\t\t}\n\t});\n\n\t// Detect, normalize options and install callbacks for jsonp requests\n\tjQuery.ajaxPrefilter(\"json jsonp\", function (s, originalSettings, jqXHR) {\n\n\t\tvar callbackName, overwritten, responseContainer,\n\t\t\tjsonProp = s.jsonp !== false && (rjsonp.test(s.url) ?\n\t\t\t\t\"url\" :\n\t\t\t\ttypeof s.data === \"string\" &&\n\t\t\t\t(s.contentType || \"\")\n\t\t\t\t\t.indexOf(\"application/x-www-form-urlencoded\") === 0 &&\n\t\t\t\trjsonp.test(s.data) && \"data\"\n\t\t\t);\n\n\t\t// Handle iff the expected data type is \"jsonp\" or we have a parameter to set\n\t\tif (jsonProp || s.dataTypes[0] === \"jsonp\") {\n\n\t\t\t// Get callback name, remembering preexisting value associated with it\n\t\t\tcallbackName = s.jsonpCallback = isFunction(s.jsonpCallback) ?\n\t\t\t\ts.jsonpCallback() :\n\t\t\t\ts.jsonpCallback;\n\n\t\t\t// Insert callback into url or form data\n\t\t\tif (jsonProp) {\n\t\t\t\ts[jsonProp] = s[jsonProp].replace(rjsonp, \"$1\" + callbackName);\n\t\t\t} else if (s.jsonp !== false) {\n\t\t\t\ts.url += (rquery.test(s.url) ? \"&\" : \"?\") + s.jsonp + \"=\" + callbackName;\n\t\t\t}\n\n\t\t\t// Use data converter to retrieve json after script execution\n\t\t\ts.converters[\"script json\"] = function () {\n\t\t\t\tif (!responseContainer) {\n\t\t\t\t\tjQuery.error(callbackName + \" was not called\");\n\t\t\t\t}\n\t\t\t\treturn responseContainer[0];\n\t\t\t};\n\n\t\t\t// Force json dataType\n\t\t\ts.dataTypes[0] = \"json\";\n\n\t\t\t// Install callback\n\t\t\toverwritten = window[callbackName];\n\t\t\twindow[callbackName] = function () {\n\t\t\t\tresponseContainer = arguments;\n\t\t\t};\n\n\t\t\t// Clean-up function (fires after converters)\n\t\t\tjqXHR.always(function () {\n\n\t\t\t\t// If previous value didn't exist - remove it\n\t\t\t\tif (overwritten === undefined) {\n\t\t\t\t\tjQuery(window).removeProp(callbackName);\n\n\t\t\t\t\t// Otherwise restore preexisting value\n\t\t\t\t} else {\n\t\t\t\t\twindow[callbackName] = overwritten;\n\t\t\t\t}\n\n\t\t\t\t// Save back as free\n\t\t\t\tif (s[callbackName]) {\n\n\t\t\t\t\t// Make sure that re-using the options doesn't screw things around\n\t\t\t\t\ts.jsonpCallback = originalSettings.jsonpCallback;\n\n\t\t\t\t\t// Save the callback name for future use\n\t\t\t\t\toldCallbacks.push(callbackName);\n\t\t\t\t}\n\n\t\t\t\t// Call if it was a function and we have a response\n\t\t\t\tif (responseContainer && isFunction(overwritten)) {\n\t\t\t\t\toverwritten(responseContainer[0]);\n\t\t\t\t}\n\n\t\t\t\tresponseContainer = overwritten = undefined;\n\t\t\t});\n\n\t\t\t// Delegate to script\n\t\t\treturn \"script\";\n\t\t}\n\t});\n\n\n\n\n\t// Support: Safari 8 only\n\t// In Safari 8 documents created via document.implementation.createHTMLDocument\n\t// collapse sibling forms: the second one becomes a child of the first one.\n\t// Because of that, this security measure has to be disabled in Safari 8.\n\t// https://bugs.webkit.org/show_bug.cgi?id=137337\n\tsupport.createHTMLDocument = (function () {\n\t\tvar body = document.implementation.createHTMLDocument(\"\").body;\n\t\tbody.innerHTML = \"<form></form><form></form>\";\n\t\treturn body.childNodes.length === 2;\n\t})();\n\n\n\t// Argument \"data\" should be string of html\n\t// context (optional): If specified, the fragment will be created in this context,\n\t// defaults to document\n\t// keepScripts (optional): If true, will include scripts passed in the html string\n\tjQuery.parseHTML = function (data, context, keepScripts) {\n\t\tif (typeof data !== \"string\") {\n\t\t\treturn [];\n\t\t}\n\t\tif (typeof context === \"boolean\") {\n\t\t\tkeepScripts = context;\n\t\t\tcontext = false;\n\t\t}\n\n\t\tvar base, parsed, scripts;\n\n\t\tif (!context) {\n\n\t\t\t// Stop scripts or inline event handlers from being executed immediately\n\t\t\t// by using document.implementation\n\t\t\tif (support.createHTMLDocument) {\n\t\t\t\tcontext = document.implementation.createHTMLDocument(\"\");\n\n\t\t\t\t// Set the base href for the created document\n\t\t\t\t// so any parsed elements with URLs\n\t\t\t\t// are based on the document's URL (gh-2965)\n\t\t\t\tbase = context.createElement(\"base\");\n\t\t\t\tbase.href = document.location.href;\n\t\t\t\tcontext.head.appendChild(base);\n\t\t\t} else {\n\t\t\t\tcontext = document;\n\t\t\t}\n\t\t}\n\n\t\tparsed = rsingleTag.exec(data);\n\t\tscripts = !keepScripts && [];\n\n\t\t// Single tag\n\t\tif (parsed) {\n\t\t\treturn [context.createElement(parsed[1])];\n\t\t}\n\n\t\tparsed = buildFragment([data], context, scripts);\n\n\t\tif (scripts && scripts.length) {\n\t\t\tjQuery(scripts).remove();\n\t\t}\n\n\t\treturn jQuery.merge([], parsed.childNodes);\n\t};\n\n\n\t/**\n\t * Load a url into a page\n\t */\n\tjQuery.fn.load = function (url, params, callback) {\n\t\tvar selector, type, response,\n\t\t\tself = this,\n\t\t\toff = url.indexOf(\" \");\n\n\t\tif (off > -1) {\n\t\t\tselector = stripAndCollapse(url.slice(off));\n\t\t\turl = url.slice(0, off);\n\t\t}\n\n\t\t// If it's a function\n\t\tif (isFunction(params)) {\n\n\t\t\t// We assume that it's the callback\n\t\t\tcallback = params;\n\t\t\tparams = undefined;\n\n\t\t\t// Otherwise, build a param string\n\t\t} else if (params && typeof params === \"object\") {\n\t\t\ttype = \"POST\";\n\t\t}\n\n\t\t// If we have elements to modify, make the request\n\t\tif (self.length > 0) {\n\t\t\tjQuery.ajax({\n\t\t\t\turl: url,\n\n\t\t\t\t// If \"type\" variable is undefined, then \"GET\" method will be used.\n\t\t\t\t// Make value of this field explicit since\n\t\t\t\t// user can override it through ajaxSetup method\n\t\t\t\ttype: type || \"GET\",\n\t\t\t\tdataType: \"html\",\n\t\t\t\tdata: params\n\t\t\t}).done(function (responseText) {\n\n\t\t\t\t// Save response for use in complete callback\n\t\t\t\tresponse = arguments;\n\n\t\t\t\tself.html(selector ?\n\n\t\t\t\t\t// If a selector was specified, locate the right elements in a dummy div\n\t\t\t\t\t// Exclude scripts to avoid IE 'Permission Denied' errors\n\t\t\t\t\tjQuery(\"<div>\").append(jQuery.parseHTML(responseText)).find(selector) :\n\n\t\t\t\t\t// Otherwise use the full result\n\t\t\t\t\tresponseText);\n\n\t\t\t\t// If the request succeeds, this function gets \"data\", \"status\", \"jqXHR\"\n\t\t\t\t// but they are ignored because response was set above.\n\t\t\t\t// If it fails, this function gets \"jqXHR\", \"status\", \"error\"\n\t\t\t}).always(callback && function (jqXHR, status) {\n\t\t\t\tself.each(function () {\n\t\t\t\t\tcallback.apply(this, response || [jqXHR.responseText, status, jqXHR]);\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\n\t\treturn this;\n\t};\n\n\n\n\n\tjQuery.expr.pseudos.animated = function (elem) {\n\t\treturn jQuery.grep(jQuery.timers, function (fn) {\n\t\t\treturn elem === fn.elem;\n\t\t}).length;\n\t};\n\n\n\n\n\tjQuery.offset = {\n\t\tsetOffset: function (elem, options, i) {\n\t\t\tvar curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition,\n\t\t\t\tposition = jQuery.css(elem, \"position\"),\n\t\t\t\tcurElem = jQuery(elem),\n\t\t\t\tprops = {};\n\n\t\t\t// Set position first, in-case top/left are set even on static elem\n\t\t\tif (position === \"static\") {\n\t\t\t\telem.style.position = \"relative\";\n\t\t\t}\n\n\t\t\tcurOffset = curElem.offset();\n\t\t\tcurCSSTop = jQuery.css(elem, \"top\");\n\t\t\tcurCSSLeft = jQuery.css(elem, \"left\");\n\t\t\tcalculatePosition = (position === \"absolute\" || position === \"fixed\") &&\n\t\t\t\t(curCSSTop + curCSSLeft).indexOf(\"auto\") > -1;\n\n\t\t\t// Need to be able to calculate position if either\n\t\t\t// top or left is auto and position is either absolute or fixed\n\t\t\tif (calculatePosition) {\n\t\t\t\tcurPosition = curElem.position();\n\t\t\t\tcurTop = curPosition.top;\n\t\t\t\tcurLeft = curPosition.left;\n\n\t\t\t} else {\n\t\t\t\tcurTop = parseFloat(curCSSTop) || 0;\n\t\t\t\tcurLeft = parseFloat(curCSSLeft) || 0;\n\t\t\t}\n\n\t\t\tif (isFunction(options)) {\n\n\t\t\t\t// Use jQuery.extend here to allow modification of coordinates argument (gh-1848)\n\t\t\t\toptions = options.call(elem, i, jQuery.extend({}, curOffset));\n\t\t\t}\n\n\t\t\tif (options.top != null) {\n\t\t\t\tprops.top = (options.top - curOffset.top) + curTop;\n\t\t\t}\n\t\t\tif (options.left != null) {\n\t\t\t\tprops.left = (options.left - curOffset.left) + curLeft;\n\t\t\t}\n\n\t\t\tif (\"using\" in options) {\n\t\t\t\toptions.using.call(elem, props);\n\n\t\t\t} else {\n\t\t\t\tcurElem.css(props);\n\t\t\t}\n\t\t}\n\t};\n\n\tjQuery.fn.extend({\n\n\t\t// offset() relates an element's border box to the document origin\n\t\toffset: function (options) {\n\n\t\t\t// Preserve chaining for setter\n\t\t\tif (arguments.length) {\n\t\t\t\treturn options === undefined ?\n\t\t\t\t\tthis :\n\t\t\t\t\tthis.each(function (i) {\n\t\t\t\t\t\tjQuery.offset.setOffset(this, options, i);\n\t\t\t\t\t});\n\t\t\t}\n\n\t\t\tvar rect, win,\n\t\t\t\telem = this[0];\n\n\t\t\tif (!elem) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Return zeros for disconnected and hidden (display: none) elements (gh-2310)\n\t\t\t// Support: IE <=11 only\n\t\t\t// Running getBoundingClientRect on a\n\t\t\t// disconnected node in IE throws an error\n\t\t\tif (!elem.getClientRects().length) {\n\t\t\t\treturn { top: 0, left: 0 };\n\t\t\t}\n\n\t\t\t// Get document-relative position by adding viewport scroll to viewport-relative gBCR\n\t\t\trect = elem.getBoundingClientRect();\n\t\t\twin = elem.ownerDocument.defaultView;\n\t\t\treturn {\n\t\t\t\ttop: rect.top + win.pageYOffset,\n\t\t\t\tleft: rect.left + win.pageXOffset\n\t\t\t};\n\t\t},\n\n\t\t// position() relates an element's margin box to its offset parent's padding box\n\t\t// This corresponds to the behavior of CSS absolute positioning\n\t\tposition: function () {\n\t\t\tif (!this[0]) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar offsetParent, offset, doc,\n\t\t\t\telem = this[0],\n\t\t\t\tparentOffset = { top: 0, left: 0 };\n\n\t\t\t// position:fixed elements are offset from the viewport, which itself always has zero offset\n\t\t\tif (jQuery.css(elem, \"position\") === \"fixed\") {\n\n\t\t\t\t// Assume position:fixed implies availability of getBoundingClientRect\n\t\t\t\toffset = elem.getBoundingClientRect();\n\n\t\t\t} else {\n\t\t\t\toffset = this.offset();\n\n\t\t\t\t// Account for the *real* offset parent, which can be the document or its root element\n\t\t\t\t// when a statically positioned element is identified\n\t\t\t\tdoc = elem.ownerDocument;\n\t\t\t\toffsetParent = elem.offsetParent || doc.documentElement;\n\t\t\t\twhile (offsetParent &&\n\t\t\t\t\t(offsetParent === doc.body || offsetParent === doc.documentElement) &&\n\t\t\t\t\tjQuery.css(offsetParent, \"position\") === \"static\") {\n\n\t\t\t\t\toffsetParent = offsetParent.parentNode;\n\t\t\t\t}\n\t\t\t\tif (offsetParent && offsetParent !== elem && offsetParent.nodeType === 1) {\n\n\t\t\t\t\t// Incorporate borders into its offset, since they are outside its content origin\n\t\t\t\t\tparentOffset = jQuery(offsetParent).offset();\n\t\t\t\t\tparentOffset.top += jQuery.css(offsetParent, \"borderTopWidth\", true);\n\t\t\t\t\tparentOffset.left += jQuery.css(offsetParent, \"borderLeftWidth\", true);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Subtract parent offsets and element margins\n\t\t\treturn {\n\t\t\t\ttop: offset.top - parentOffset.top - jQuery.css(elem, \"marginTop\", true),\n\t\t\t\tleft: offset.left - parentOffset.left - jQuery.css(elem, \"marginLeft\", true)\n\t\t\t};\n\t\t},\n\n\t\t// This method will return documentElement in the following cases:\n\t\t// 1) For the element inside the iframe without offsetParent, this method will return\n\t\t//    documentElement of the parent window\n\t\t// 2) For the hidden or detached element\n\t\t// 3) For body or html element, i.e. in case of the html node - it will return itself\n\t\t//\n\t\t// but those exceptions were never presented as a real life use-cases\n\t\t// and might be considered as more preferable results.\n\t\t//\n\t\t// This logic, however, is not guaranteed and can change at any point in the future\n\t\toffsetParent: function () {\n\t\t\treturn this.map(function () {\n\t\t\t\tvar offsetParent = this.offsetParent;\n\n\t\t\t\twhile (offsetParent && jQuery.css(offsetParent, \"position\") === \"static\") {\n\t\t\t\t\toffsetParent = offsetParent.offsetParent;\n\t\t\t\t}\n\n\t\t\t\treturn offsetParent || documentElement;\n\t\t\t});\n\t\t}\n\t});\n\n\t// Create scrollLeft and scrollTop methods\n\tjQuery.each({ scrollLeft: \"pageXOffset\", scrollTop: \"pageYOffset\" }, function (method, prop) {\n\t\tvar top = \"pageYOffset\" === prop;\n\n\t\tjQuery.fn[method] = function (val) {\n\t\t\treturn access(this, function (elem, method, val) {\n\n\t\t\t\t// Coalesce documents and windows\n\t\t\t\tvar win;\n\t\t\t\tif (isWindow(elem)) {\n\t\t\t\t\twin = elem;\n\t\t\t\t} else if (elem.nodeType === 9) {\n\t\t\t\t\twin = elem.defaultView;\n\t\t\t\t}\n\n\t\t\t\tif (val === undefined) {\n\t\t\t\t\treturn win ? win[prop] : elem[method];\n\t\t\t\t}\n\n\t\t\t\tif (win) {\n\t\t\t\t\twin.scrollTo(\n\t\t\t\t\t\t!top ? val : win.pageXOffset,\n\t\t\t\t\t\ttop ? val : win.pageYOffset\n\t\t\t\t\t);\n\n\t\t\t\t} else {\n\t\t\t\t\telem[method] = val;\n\t\t\t\t}\n\t\t\t}, method, val, arguments.length);\n\t\t};\n\t});\n\n\t// Support: Safari <=7 - 9.1, Chrome <=37 - 49\n\t// Add the top/left cssHooks using jQuery.fn.position\n\t// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084\n\t// Blink bug: https://bugs.chromium.org/p/chromium/issues/detail?id=589347\n\t// getComputedStyle returns percent when specified for top/left/bottom/right;\n\t// rather than make the css module depend on the offset module, just check for it here\n\tjQuery.each([\"top\", \"left\"], function (_i, prop) {\n\t\tjQuery.cssHooks[prop] = addGetHookIf(support.pixelPosition,\n\t\t\tfunction (elem, computed) {\n\t\t\t\tif (computed) {\n\t\t\t\t\tcomputed = curCSS(elem, prop);\n\n\t\t\t\t\t// If curCSS returns percentage, fallback to offset\n\t\t\t\t\treturn rnumnonpx.test(computed) ?\n\t\t\t\t\t\tjQuery(elem).position()[prop] + \"px\" :\n\t\t\t\t\t\tcomputed;\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\t});\n\n\n\t// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods\n\tjQuery.each({ Height: \"height\", Width: \"width\" }, function (name, type) {\n\t\tjQuery.each({\n\t\t\tpadding: \"inner\" + name,\n\t\t\tcontent: type,\n\t\t\t\"\": \"outer\" + name\n\t\t}, function (defaultExtra, funcName) {\n\n\t\t\t// Margin is only for outerHeight, outerWidth\n\t\t\tjQuery.fn[funcName] = function (margin, value) {\n\t\t\t\tvar chainable = arguments.length && (defaultExtra || typeof margin !== \"boolean\"),\n\t\t\t\t\textra = defaultExtra || (margin === true || value === true ? \"margin\" : \"border\");\n\n\t\t\t\treturn access(this, function (elem, type, value) {\n\t\t\t\t\tvar doc;\n\n\t\t\t\t\tif (isWindow(elem)) {\n\n\t\t\t\t\t\t// $( window ).outerWidth/Height return w/h including scrollbars (gh-1729)\n\t\t\t\t\t\treturn funcName.indexOf(\"outer\") === 0 ?\n\t\t\t\t\t\t\telem[\"inner\" + name] :\n\t\t\t\t\t\t\telem.document.documentElement[\"client\" + name];\n\t\t\t\t\t}\n\n\t\t\t\t\t// Get document width or height\n\t\t\t\t\tif (elem.nodeType === 9) {\n\t\t\t\t\t\tdoc = elem.documentElement;\n\n\t\t\t\t\t\t// Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height],\n\t\t\t\t\t\t// whichever is greatest\n\t\t\t\t\t\treturn Math.max(\n\t\t\t\t\t\t\telem.body[\"scroll\" + name], doc[\"scroll\" + name],\n\t\t\t\t\t\t\telem.body[\"offset\" + name], doc[\"offset\" + name],\n\t\t\t\t\t\t\tdoc[\"client\" + name]\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\n\t\t\t\t\treturn value === undefined ?\n\n\t\t\t\t\t\t// Get width or height on the element, requesting but not forcing parseFloat\n\t\t\t\t\t\tjQuery.css(elem, type, extra) :\n\n\t\t\t\t\t\t// Set width or height on the element\n\t\t\t\t\t\tjQuery.style(elem, type, value, extra);\n\t\t\t\t}, type, chainable ? margin : undefined, chainable);\n\t\t\t};\n\t\t});\n\t});\n\n\n\tjQuery.each([\n\t\t\"ajaxStart\",\n\t\t\"ajaxStop\",\n\t\t\"ajaxComplete\",\n\t\t\"ajaxError\",\n\t\t\"ajaxSuccess\",\n\t\t\"ajaxSend\"\n\t], function (_i, type) {\n\t\tjQuery.fn[type] = function (fn) {\n\t\t\treturn this.on(type, fn);\n\t\t};\n\t});\n\n\n\n\n\tjQuery.fn.extend({\n\n\t\tbind: function (types, data, fn) {\n\t\t\treturn this.on(types, null, data, fn);\n\t\t},\n\t\tunbind: function (types, fn) {\n\t\t\treturn this.off(types, null, fn);\n\t\t},\n\n\t\tdelegate: function (selector, types, data, fn) {\n\t\t\treturn this.on(types, selector, data, fn);\n\t\t},\n\t\tundelegate: function (selector, types, fn) {\n\n\t\t\t// ( namespace ) or ( selector, types [, fn] )\n\t\t\treturn arguments.length === 1 ?\n\t\t\t\tthis.off(selector, \"**\") :\n\t\t\t\tthis.off(types, selector || \"**\", fn);\n\t\t},\n\n\t\thover: function (fnOver, fnOut) {\n\t\t\treturn this.mouseenter(fnOver).mouseleave(fnOut || fnOver);\n\t\t}\n\t});\n\n\tjQuery.each(\n\t\t(\"blur focus focusin focusout resize scroll click dblclick \" +\n\t\t\t\"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave \" +\n\t\t\t\"change select submit keydown keypress keyup contextmenu\").split(\" \"),\n\t\tfunction (_i, name) {\n\n\t\t\t// Handle event binding\n\t\t\tjQuery.fn[name] = function (data, fn) {\n\t\t\t\treturn arguments.length > 0 ?\n\t\t\t\t\tthis.on(name, null, data, fn) :\n\t\t\t\t\tthis.trigger(name);\n\t\t\t};\n\t\t}\n\t);\n\n\n\n\n\t// Support: Android <=4.0 only\n\t// Make sure we trim BOM and NBSP\n\t// Require that the \"whitespace run\" starts from a non-whitespace\n\t// to avoid O(N^2) behavior when the engine would try matching \"\\s+$\" at each space position.\n\tvar rtrim = /^[\\s\\uFEFF\\xA0]+|([^\\s\\uFEFF\\xA0])[\\s\\uFEFF\\xA0]+$/g;\n\n\t// Bind a function to a context, optionally partially applying any\n\t// arguments.\n\t// jQuery.proxy is deprecated to promote standards (specifically Function#bind)\n\t// However, it is not slated for removal any time soon\n\tjQuery.proxy = function (fn, context) {\n\t\tvar tmp, args, proxy;\n\n\t\tif (typeof context === \"string\") {\n\t\t\ttmp = fn[context];\n\t\t\tcontext = fn;\n\t\t\tfn = tmp;\n\t\t}\n\n\t\t// Quick check to determine if target is callable, in the spec\n\t\t// this throws a TypeError, but we will just return undefined.\n\t\tif (!isFunction(fn)) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\t// Simulated bind\n\t\targs = slice.call(arguments, 2);\n\t\tproxy = function () {\n\t\t\treturn fn.apply(context || this, args.concat(slice.call(arguments)));\n\t\t};\n\n\t\t// Set the guid of unique handler to the same of original handler, so it can be removed\n\t\tproxy.guid = fn.guid = fn.guid || jQuery.guid++;\n\n\t\treturn proxy;\n\t};\n\n\tjQuery.holdReady = function (hold) {\n\t\tif (hold) {\n\t\t\tjQuery.readyWait++;\n\t\t} else {\n\t\t\tjQuery.ready(true);\n\t\t}\n\t};\n\tjQuery.isArray = Array.isArray;\n\tjQuery.parseJSON = JSON.parse;\n\tjQuery.nodeName = nodeName;\n\tjQuery.isFunction = isFunction;\n\tjQuery.isWindow = isWindow;\n\tjQuery.camelCase = camelCase;\n\tjQuery.type = toType;\n\n\tjQuery.now = Date.now;\n\n\tjQuery.isNumeric = function (obj) {\n\n\t\t// As of jQuery 3.0, isNumeric is limited to\n\t\t// strings and numbers (primitives or objects)\n\t\t// that can be coerced to finite numbers (gh-2662)\n\t\tvar type = jQuery.type(obj);\n\t\treturn (type === \"number\" || type === \"string\") &&\n\n\t\t\t// parseFloat NaNs numeric-cast false positives (\"\")\n\t\t\t// ...but misinterprets leading-number strings, particularly hex literals (\"0x...\")\n\t\t\t// subtraction forces infinities to NaN\n\t\t\t!isNaN(obj - parseFloat(obj));\n\t};\n\n\tjQuery.trim = function (text) {\n\t\treturn text == null ?\n\t\t\t\"\" :\n\t\t\t(text + \"\").replace(rtrim, \"$1\");\n\t};\n\n\n\n\t// Register as a named AMD module, since jQuery can be concatenated with other\n\t// files that may use define, but not via a proper concatenation script that\n\t// understands anonymous AMD modules. A named AMD is safest and most robust\n\t// way to register. Lowercase jquery is used because AMD module names are\n\t// derived from file names, and jQuery is normally delivered in a lowercase\n\t// file name. Do this after creating the global so that if an AMD module wants\n\t// to call noConflict to hide this version of jQuery, it will work.\n\n\t// Note that for maximum portability, libraries that are not jQuery should\n\t// declare themselves as anonymous modules, and avoid setting a global if an\n\t// AMD loader is present. jQuery is a special case. For more information, see\n\t// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon\n\n\tif (typeof define === \"function\" && define.amd) {\n\t\tdefine(\"jquery\", [], function () {\n\t\t\treturn jQuery;\n\t\t});\n\t}\n\n\n\n\n\tvar\n\n\t\t// Map over jQuery in case of overwrite\n\t\t_jQuery = window.jQuery,\n\n\t\t// Map over the $ in case of overwrite\n\t\t_$ = window.$;\n\n\tjQuery.noConflict = function (deep) {\n\t\tif (window.$ === jQuery) {\n\t\t\twindow.$ = _$;\n\t\t}\n\n\t\tif (deep && window.jQuery === jQuery) {\n\t\t\twindow.jQuery = _jQuery;\n\t\t}\n\n\t\treturn jQuery;\n\t};\n\n\t// Expose jQuery and $ identifiers, even in AMD\n\t// (trac-7102#comment:10, https://github.com/jquery/jquery/pull/557)\n\t// and CommonJS for browser emulators (trac-13566)\n\tif (typeof noGlobal === \"undefined\") {\n\t\twindow.jQuery = window.$ = jQuery;\n\t}\n\n\n\n\n\treturn jQuery;\n});"
  },
  {
    "path": "src/sourceDev.WebApp/SharedThemes/materia/Shared/_Layout.cshtml",
    "content": "﻿@inject ISiteContextResolver siteResolver\n@inject ICoreThemeHelper themeHelper\n@{\n    var themeSettings = themeHelper.GetThemeSettings();\n    @*\n        These settings can be set by a main view to show additional columns.\n        Views that push content into the optional sections SideNav, AsidePrimary, and AsideSecondary\n        are obligated to set the needed viewtate property to true to show the section,\n        otherwise an error will occur.\n        The sideNav column also supports a toggle so it can be hidden and toggled visible even though it renders.\n    *@\n    bool sideNavVisible = true.Equals(ViewData[\"SideNavVisible\"]);\n    string sideNavToggleClass = ViewData[\"SideNavToggle\"]?.ToString() ?? \"collapse\";\n    bool asidePrimaryVisible = true.Equals(ViewData[\"AsidePrimaryVisible\"]);\n    bool asideSecondaryVisible = true.Equals(ViewData[\"AsideSecondaryVisible\"]);\n    var Tenant = await siteResolver.ResolveSite(Context.Request.Host.Host, Context.Request.Path);\n    var siteRoot = \"\";\n    if (!string.IsNullOrWhiteSpace(Tenant.SiteFolderName)) { siteRoot = \"/\" + Tenant.SiteFolderName; }\n   \n}\n<!DOCTYPE html>\n<html lang=\"@CultureInfo.CurrentUICulture.Name\">\n<head>\n    <meta charset=\"utf-8\" />\n    <title>@ViewData[\"Title\"] - @(Tenant?.SiteName ?? \"Sample\")</title>\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1, shrink-to-fit=no\">\n    @RenderSection(\"Meta\", required: false)\n    <environment names=\"Development\">\n        <link rel=\"stylesheet\" href=\"~/css/bootstrap.css\" cs-resolve-theme-resource=\"true\" cs-shared-theme=\"true\" cs-tenant=\"@Tenant\" />\n        <link rel=\"stylesheet\" href=\"~/css/fontawesome-all.min.css\" cs-resolve-theme-resource=\"true\" cs-shared-theme=\"true\" cs-tenant=\"@Tenant\" />\n        <link rel=\"stylesheet\" href=\"~/css/site.css\" cs-resolve-theme-resource=\"true\" cs-shared-theme=\"true\" cs-tenant=\"@Tenant\" asp-append-version=\"true\" />\n    </environment>\n    <environment names=\"Staging,Production\">\n        <link rel=\"stylesheet\" href=\"~/css/bootstrap.min.css\" cs-resolve-theme-resource=\"true\" cs-shared-theme=\"true\" cs-tenant=\"@Tenant\" />\n        <link rel=\"stylesheet\" href=\"~/css/fontawesome-all.min.css\" cs-resolve-theme-resource=\"true\" cs-shared-theme=\"true\" cs-tenant=\"@Tenant\" />\n        <link rel=\"stylesheet\" href=\"~/css/site.min.css\" cs-resolve-theme-resource=\"true\" cs-shared-theme=\"true\" cs-tenant=\"@Tenant\" asp-append-version=\"true\" />\n    </environment>\n    @RenderSection(\"Styles\", required: false)    \n    \n    <google-analytics profile-id=\"@Tenant.GoogleAnalyticsProfileId\" user-id=\"@User.GetUserId()\"></google-analytics>\n    <base href=\"@Context.Request.Path\" />\n</head>\n<body class=\"d-flex flex-column @ViewData[\"BodyClass\"]\">\n    <header class=\"bg-white\">\n        <a id=\"skippy\" class=\"visually-hidden visually-hidden-focusable\" href=\"#content\">\n            <div class=\"container\">\n                <span class=\"skiplink-text\">Skip to main content</span>\n            </div>\n        </a>\n        <div class=\"fixed-top container-fluid brand-header bg-white\">\n            <div class=\"d-flex align-items-center bg-white\">\n                @if (!string.IsNullOrWhiteSpace(Tenant.LogoUrl))\n                {\n                    <div>\n                         <partial name=\"SiteLogoPartial\" model=\"@Tenant\" />\n                    </div>\n                }\n                @if (Tenant.ShowSiteNameLink)\n                {\n                    <div class=\"align-self-center pt-4 pt-sm-0\">\n                         <partial name=\"SiteTitlePartial\" model=\"@Tenant\" />\n                    </div>\n                }\n                @if (!string.IsNullOrWhiteSpace(Tenant.HeaderContent))\n                {\n                    <div class=\"flex-fill align-self-center pt-3 d-none d-sm-block\">\n                        <partial name=\"SiteHeaderPartial\" />\n                    </div>\n                }\n            </div>\n        </div>\n        <nav class=\"navbar navbar-expand-md navbar-dark fixed-top bg-dark pt-0 pb-0\">\n            <button class=\"navbar-toggler\" type=\"button\" data-bs-toggle=\"collapse\" data-bs-target=\"#navbarNavDropdown\" aria-controls=\"navbarNavDropdown\" aria-expanded=\"false\" aria-label=\"Toggle navigation\">\n                <span class=\"navbar-toggler-icon\"></span>\n            </button>\n\n            <div class=\"collapse navbar-collapse bg-dark ps-2\" id=\"navbarNavDropdown\">\n                @await Component.InvokeAsync(\"Navigation\", new { viewName = \"Bootstrap5TopNavWithDropdowns\", filterName = NamedNavigationFilters.TopNav, startingNodeKey = \"\" })\n                <partial name=\"_LoginPartialWithDropdowns\" />\n            </div>\n        </nav>\n    </header>\n    <div id=\"wrapper\" class=\"container cs-container flex-fill\">\n        @await Component.InvokeAsync(\"Navigation\", new { viewName = \"Bootstrap5Breadcrumbs\", filterName = NamedNavigationFilters.Breadcrumbs, startingNodeKey = \"\" })\n        <div class=\"row\">\n            <main id=\"content\" class=\"col order-3\">\n                <partial name=\"AlertsPartial\" />\n                <partial name=\"_CookieConsentPartial\" />\n                <partial name=\"_AutoLogoutWarningPartial\" />\n                @RenderBody()\n            </main>\n            @if (sideNavVisible)\n            {\n                <nav id=\"sidenavmenu\" class=\" col col-3 order-1 @sideNavToggleClass\">\n                    @RenderSection(\"SideNav\", required: false)\n                </nav>\n\n            }\n            @if (asideSecondaryVisible)\n            {\n                <aside id=\"asideSecondary\" class=\"col col-1 order-2\">\n                    @RenderSection(\"AsideSecondary\", required: false)\n                </aside>\n\n            }\n            @if (asidePrimaryVisible)\n            {\n                <aside id=\"asidePrimary\" class=\"col-12 col-md-3 col-sm-12  col-sm-12 order-4\">\n                    @RenderSection(\"AsidePrimary\", required: false)\n                </aside>\n\n            }\n        </div>\n    </div>\n    <footer class=\"sticky-bottom border pt-2 h-100\">\n        <div class=\"w-100 text-center\">\n            <partial name=\"SiteFooterPartial\" />\n        </div>\n        <div class=\"d-flex flex-wrap flex-grow justify-content-center\">\n            <div class=\"p-2\">\n            <ul class=\"list-unstyled d-flex flex-wrap\">\n                @if (Tenant != null && !string.IsNullOrWhiteSpace(Tenant.PrivacyPolicy))\n                {\n                    <li class=\"border-left ps-2 me-2\">\n                        <a asp-controller=\"Privacy\" asp-action=\"Index\">Privacy Policy</a>\n                    </li>\n                }\n                <li class=\"border-left ps-2 me-2\">\n                    @* you are free to remove the powered by cloudscribe link but we appreciate it if you choose to keep it! *@\n                    <a class=\"text-nowrap\" target=\"_blank\" href=\"https://www.cloudscribe.com/?utm_source=@Context.Request.Host.Value&amp;utm_medium=referral&amp;utm_campaign=poweredbycloudscribe\">Powered by cloudscribe</a>\n                </li>\n            </ul>\n        </div>\n        <div class=\"ps-sm-2  text-center w-100\"><span class=\"text-nowrap\">Copyright &copy; @DateTime.Now.Year</span><span class=\"d-none d-sm-inline\"> - </span><span> @(Tenant?.SiteName ?? \"Sample\")</span></div>\n        <partial name=\"_CookieConsentRevokePartial\" />\n        </div>\n    </footer>\n    @RenderSection(\"Toolbar\", required: false)\n    <environment names=\"Development\">\n        <script src=\"~/js/jquery.js\" cs-resolve-theme-resource=\"true\" cs-shared-theme=\"true\" cs-tenant=\"@Tenant\"></script>\n        <script src=\"~/js/bootstrap.bundle.js\" cs-resolve-theme-resource=\"true\" cs-shared-theme=\"true\" cs-tenant=\"@Tenant\"></script>\n        <script src=\"~/cr/js/bs4.smartmenus.min.js\"></script>\n    </environment>\n    <environment names=\"Staging,Production\">\n        <script src=\"~/js/jquery.min.js\" cs-resolve-theme-resource=\"true\" cs-shared-theme=\"true\" cs-tenant=\"@Tenant\"></script>\n        <script src=\"~/js/bootstrap.bundle.min.js\" cs-resolve-theme-resource=\"true\" cs-shared-theme=\"true\" cs-tenant=\"@Tenant\"></script>\n        <script src=\"~/cr/js/bs4.smartmenus.min.js\"></script>\n    </environment>\n    @RenderSection(\"Bottom\", required: false)\n    @RenderSection(\"Scripts\", required: false)     \n    @Html.RenderResources(\"js\") @*render any js resources declared via helpers in partial views etc*@\n    <add-this profile-id=\"@Tenant.AddThisDotComUsername\" async></add-this>\n</body>\n</html>\n"
  },
  {
    "path": "src/sourceDev.WebApp/SharedThemes/materia/wwwroot/css/_bootswatch.scss",
    "content": "// Materia 5.1.3\n// Bootswatch\n\n\n// Variables\n\n$web-font-path: \"https://fonts.googleapis.com/css2?family=Roboto:wght@300;400;500;700&display=swap\" !default;\n@if $web-font-path {\n  @import url($web-font-path);\n}\n\n// Mixins\n\n@mixin ripple($color) {\n  position: relative;\n\n  &::before {\n    content: \"\";\n    display: block;\n    position: absolute;\n    width: 100%;\n    height: 100%;\n    top: 0;\n    left: 0;\n    margin-left: 0;\n    @include gradient-radial($color 10%, transparent 10.01%);\n    background-size: 1000% 1000%;\n    background-position: 50%;\n    border: none;\n    opacity: 0;\n    pointer-events: none;\n    transition: background .5s, opacity 1s;\n  }\n\n  &:active::before {\n    background-size: 0 0;\n    opacity: .2;\n    transition: none;\n  }\n\n  &.disabled,\n  &[disabled] {\n    &::before {\n      display: none;\n    }\n  }\n}\n\n@mixin btn($class,$bg,$color) {\n  .btn-#{$class} {\n    &:focus {\n      background-color: $bg;\n      box-shadow: 0 0 0 2px rgba(204, 204, 204, .5);\n    }\n\n    &:hover,\n    &:active:hover {\n      background-color: shade-color($bg, 12%);\n    }\n\n    &:active {\n      box-shadow: 2px 2px 4px rgba(0, 0, 0, .4);\n    }\n\n    @include ripple($color);\n  }\n\n  .btn-outline-#{$class} {\n    @include ripple($color);\n  }\n}\n\n.dropdown-toggle::after,\n.dropup .dropdown-toggle::after,\n.dropstart .dropdown-toggle::after,\n.dropend .dropdown-toggle::after {\n  border-width: 4px;\n}\n\n// Navbar\n\n.navbar {\n  border: none;\n  box-shadow: 0 1px 2px rgba(0, 0, 0, .3);\n\n  &-brand {\n    font-size: 24px;\n  }\n\n  &-nav .nav-link {\n    padding-top: .9rem;\n    padding-bottom: .9rem;\n  }\n\n  &.bg-dark,\n  &.bg-primary {\n    input[type=\"search\"],\n    input[type=\"text\"],\n    input[type=\"password\"],\n    input[type=\"email\"],\n    input[type=\"number\"],\n    input[type=\"tel\"] {\n      color: $white;\n      box-shadow: inset 0 -1px 0 rgba(255, 255, 255, .5);\n\n      &:focus {\n        box-shadow: inset 0 -2px 0 $white;\n      }\n\n      &::placeholder {\n        color: rgba(255, 255, 255, .5);\n      }\n    }\n  }\n}\n\n// Buttons\n\n@include btn(primary, $primary, $white);\n@include btn(secondary, $secondary, $gray-500);\n@include btn(success, $success, $white);\n@include btn(info, $info, $white);\n@include btn(warning, $warning, $white);\n@include btn(danger, $danger, $white);\n@include btn(dark, $dark, $white);\n@include btn(light, $light, $white);\n\n.btn {\n  text-transform: uppercase;\n  border: none;\n  box-shadow: 0 1px 4px rgba(0, 0, 0, .4);\n  transition: color .4s, background-color .4s, border-color .4s, box-shadow .4s;\n\n  &-link {\n    box-shadow: none;\n    color: $link-color;\n\n    &:hover,\n    &:focus {\n      box-shadow: none;\n      color: $link-hover-color;\n      text-decoration: $link-hover-decoration;\n    }\n\n    &.disabled, // Although btn-link is intended for buttons, which want to look like link, I include here a.disable for the sake of consistency\n    &[disabled],\n    fieldset[disabled] & {\n      &:hover,\n      &:active:hover {\n        color: $btn-link-disabled-color;\n        text-decoration: none;\n      }\n    }\n  }\n\n  &-secondary {\n    &.disabled,\n    &[disabled],\n    fieldset[disabled] & {\n      background-color: rgba(0, 0, 0, .1);\n      color: rgba(0, 0, 0, .4);\n      opacity: 1;\n\n      &:hover,\n      &:focus {\n        background-color: rgba(0, 0, 0, .1);\n      }\n    }\n  }\n\n  &-outline-secondary {\n    border-color: $gray-200;\n    color: $gray-300;\n  }\n\n  &-warning {\n    color: $white;\n  }\n}\n\n.btn-group {\n  .btn + .btn,\n  .btn + .btn-group,\n  .btn-group + .btn,\n  .btn-group + .btn-group {\n    margin-left: 0;\n  }\n\n  &-vertical {\n    > .btn + .btn,\n    > .btn + .btn-group,\n    > .btn-group + .btn,\n    > .btn-group + .btn-group {\n      margin-top: 0;\n    }\n  }\n\n  .btn + .btn,\n  .btn + .btn-group > .dropdown-toggle {\n    box-shadow: 1px 1px 4px rgba(0, 0, 0, .4);\n  }\n}\n\n.border-secondary {\n  border: 1px solid #dfdfdf !important;\n}\n\n// Typography\n\nbody,\ninput,\nbutton {\n  letter-spacing: .1px;\n}\n\np {\n  margin: 0 0 1em;\n}\n\n.text-secondary {\n  color: $gray-500 !important;\n}\n\n// Tables\n\n.table-hover {\n  > tbody > tr,\n  > tbody > tr > th,\n  > tbody > tr > td {\n    transition: background-color .2s, color .2s;\n  }\n}\n\n.thead-inverse th {\n  background-color: $primary;\n  color: $white;\n}\n\n// Forms\n\n.col-form-label {\n  font-size: 16px;\n\n  &-sm {\n    font-size: $font-size-sm;\n  }\n\n  &-lg {\n    font-size: $font-size-lg;\n  }\n}\n\ntextarea,\ntextarea.form-control,\ninput.form-control,\ninput[type=\"text\"],\ninput[type=\"password\"],\ninput[type=\"email\"],\ninput[type=\"number\"],\n[type=\"text\"].form-control,\n[type=\"password\"].form-control,\n[type=\"email\"].form-control,\n[type=\"tel\"].form-control,\n[contenteditable].form-control {\n  box-shadow: inset 0 -1px 0 #ddd;\n  transition: box-shadow .2s;\n\n  &:focus {\n    box-shadow: inset 0 -2px 0 $primary;\n  }\n\n  &[disabled],\n  &[readonly] {\n    box-shadow: none;\n    border-bottom: 1px dotted #ddd;\n  }\n\n  &[disabled],\n  &[disabled]::placeholder {\n    color: #ddd;\n  }\n\n  &::-ms-clear {\n    display: none;\n  }\n}\n\nselect,\nselect.form-control {\n  appearance: none;\n  padding: .5rem 0;\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='4' viewBox='0 0 8 4'%3e%3cpolygon fill='%23666' points='8 0 4 4 0 0'/%3e%3c/svg%3e%0a\");\n  background-size: 8px 4px;\n  background-repeat: no-repeat;\n  background-position: right center;\n  box-shadow: inset 0 -1px 0 #ddd;\n\n  &::-ms-expand {\n    display: none;\n  }\n\n  &.input {\n    &-sm {\n      font-size: $font-size-sm;\n    }\n\n    &-lg {\n      font-size: $font-size-lg;\n    }\n  }\n\n  &:focus {\n    box-shadow: inset 0 -2px 0 $primary;\n    background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='4' viewBox='0 0 8 4'%3e%3cpolygon fill='%23212121' points='8 0 4 4 0 0'/%3e%3c/svg%3e%0a\");\n  }\n\n  &[multiple] {\n    background: none;\n  }\n}\n\n.form-check-input {\n  width: 1.25em;\n  height: 1.25em;\n  margin-top: 1px;\n  border: 2px solid $gray-400;\n\n  &:checked[type=\"radio\"] {\n    background-size: 1.8em;\n    background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='2' fill='%232196f3' stroke='%23fff' stroke-width='1' /%3e%3c/svg%3e\"), var(--bs-gradient);\n  }\n}\n\n.form-check.form-switch {\n  .form-check-input {\n    position: relative;\n    height: .8em;\n    border: none;\n    background-image: none;\n    background-color: $gray-400;\n\n    &:focus {\n      box-shadow: none;\n    }\n\n    &::before {\n      content: \"\";\n      position: absolute;\n      top: -.2em;\n      left: -.2em;\n      width: 1.2em;\n      height: 1.2em;\n      background-color: $white;\n      border-radius: 50%;\n      box-shadow: 0 1px 4px rgba(0, 0, 0, .3);\n      transition: left .15s ease-in-out;\n    }\n\n    &::after {\n      content: \"\";\n      position: absolute;\n      top: -.2em;\n      left: -.2em;\n      width: 1.2em;\n      height: 1.2em;\n      border-radius: 50%;\n      box-shadow: 0 0 0 9px rgba(0, 0, 0, .05);\n      transform: scale(0);\n      transition: left .15s ease-in-out, transform .15s ease-in-out, box-shadow .15s ease-in-out;\n      z-index: -1;\n    }\n\n    &:hover:not(.disabled),\n    &:focus:not(.disabled) {\n\n      &::after {\n        transform: scale(.9);\n      }\n    }\n\n    &:focus:not(.disabled) {\n      &::after {\n        box-shadow: 0 0 0 9px rgba(0, 0, 0, .1);\n      }\n    }\n\n    &:checked {\n      background-color: rgba(33, 150, 243, .3);\n\n      &::before {\n        background-color: rgba(33, 150, 243, 1);\n        left: calc(100% - .8em);\n      }\n\n      &::after {\n        left: calc(100% - .8em);\n        box-shadow: 0 0 0 9px rgba(33, 150, 243, .1);\n      }\n\n      &:hover:not(.disabled),\n      &:focus:not(.disabled) {\n        &::after {\n          transform: scale(.9);\n        }\n      }\n\n      &:focus:not(.disabled) {\n        &::after {\n          box-shadow: 0 0 0 9px rgba(33, 150, 243, .2);\n        }\n      }\n    }\n  }\n}\n\n.form-check:not(.form-switch) {\n  .form-check-input {\n    &:checked[type=\"checkbox\"] {\n      background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-width='2' d='M6 10l3 3l6-6'/%3e%3c/svg%3e\"), var(--bs-gradient);\n      background-size: 1.6em;\n    }\n  }\n}\n\n.has-warning {\n  input:not([type=\"checkbox\"]),\n  .form-control,\n  input.form-control[readonly],\n  input[type=\"text\"][readonly],\n  [type=\"text\"].form-control[readonly],\n  input:not([type=\"checkbox\"]):focus,\n  .form-control:focus {\n    border-bottom: none;\n    box-shadow: inset 0 -2px 0 $warning;\n  }\n}\n\n.has-danger {\n  input:not([type=\"checkbox\"]),\n  .form-control,\n  input.form-control[readonly],\n  input[type=\"text\"][readonly],\n  [type=\"text\"].form-control[readonly],\n  input:not([type=\"checkbox\"]):focus,\n  .form-control:focus {\n    border-bottom: none;\n    box-shadow: inset 0 -2px 0 $danger;\n  }\n}\n\n.has-success {\n  input:not([type=\"checkbox\"]),\n  .form-control,\n  input.form-control[readonly],\n  input[type=\"text\"][readonly],\n  [type=\"text\"].form-control[readonly],\n  input:not([type=\"checkbox\"]):focus,\n  .form-control:focus {\n    border-bottom: none;\n    box-shadow: inset 0 -2px 0 $success;\n  }\n}\n\n// Remove the Bootstrap feedback styles for input addons\n.input-group-addon {\n  .has-warning &,\n  .has-danger &,\n  .has-success & {\n    color: $input-color;\n    border-color: $input-group-addon-border-color;\n    background-color: $input-group-addon-bg;\n  }\n}\n\n.form-group-lg {\n  select,\n  select.form-control {\n    line-height: 1.5;\n  }\n}\n\n// Navs\n\n.nav-tabs {\n  .nav-item + .nav-item {\n    margin-left: 0;\n  }\n\n  .nav-link,\n  .nav-link:focus {\n    margin-right: 0;\n    background-color: transparent;\n    border: none;\n    color: $body-color;\n    box-shadow: inset 0 -1px 0 #ddd;\n    transition: color .2s, box-shadow .2s;\n\n    &:hover {\n      background-color: transparent;\n      box-shadow: inset 0 -2px 0 $primary;\n      color: $primary;\n    }\n  }\n\n  .nav-link.active,\n  .nav-link.active:focus {\n    border: none;\n    box-shadow: inset 0 -2px 0 $primary;\n    color: $primary;\n\n    &:hover {\n      border: none;\n      color: $primary;\n    }\n  }\n\n  .nav-link.disabled {\n    box-shadow: inset 0 -1px 0 #ddd;\n  }\n\n  &.nav-justified {\n    .nav-link,\n    .nav-link:hover,\n    .nav-link:focus,\n    .nav-link.active,\n    .nav-link.active:hover,\n    .nav-link.active:focus {\n      border: none;\n    }\n  }\n\n  .dropdown-menu {\n    margin-top: 0;\n  }\n}\n\n.dropdown-menu {\n  margin-top: 0;\n  border: none;\n  box-shadow: 0 1px 4px rgba(0, 0, 0, .3);\n}\n\n// Indicators\n\n.alert {\n  padding-right: 2.5rem;\n  border: none;\n\n  &,\n  h1,\n  h2,\n  h3,\n  h4,\n  h5,\n  h6 {\n    color: $white;\n  }\n\n  @each $color, $value in $theme-colors {\n    &-#{$color} {\n      @if $enable-gradients {\n        background: $value linear-gradient(180deg, mix($body-bg, $value, 15%), $value) repeat-x;\n      } @else {\n        background-color: $value;\n      }\n    }\n  }\n\n  a:not(.btn),\n  .alert-link {\n    color: $white;\n    font-weight: 700;\n  }\n\n  &-secondary,\n  &-light {\n    &,\n    a:not(.btn),\n    .alert-link {\n      color: $body-color;\n    }\n  }\n}\n\n.badge {\n  &.bg-secondary,\n  &.bg-light {\n    color: $dark;\n  }\n}\n\n.tag {\n  padding: 4px 6px;\n}\n\n// Containers\n\n.card {\n  box-shadow: 0 1px 4px rgba(0, 0, 0, .4);\n\n  &.border-primary,\n  &.border-secondary,\n  &.border-success,\n  &.border-info,\n  &.border-warning,\n  &.border-danger,\n  &.border-light,\n  &.border-dark {\n    border-width: 1px;\n  }\n}\n\n.list-group {\n  &-item-action.active {\n    h1,\n    h2,\n    h3,\n    h4,\n    h5,\n    h6 {\n      color: $white;\n    }\n  }\n}\n\n.modal-content {\n  border-radius: .2rem;\n  box-shadow: 0 6px 36px rgba(0, 0, 0, .3);\n}\n\n.modal,\n.toast {\n  .btn-close {\n    background-image: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23000'><path d='M.293.293a1 1 0 011.414 0L8 6.586 14.293.293a1 1 0 111.414 1.414L9.414 8l6.293 6.293a1 1 0 01-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 01-1.414-1.414L6.586 8 .293 1.707a1 1 0 010-1.414z'/></svg>\");\n  }\n}\n\n.popover {\n  border: none;\n  box-shadow: 0 1px 4px rgba(0, 0, 0, .3);\n}\n\n.carousel {\n  &-caption {\n    h1,\n    h2,\n    h3,\n    h4,\n    h5,\n    h6 {\n      color: inherit;\n    }\n  }\n}\n"
  },
  {
    "path": "src/sourceDev.WebApp/SharedThemes/materia/wwwroot/css/_variables.scss",
    "content": "// Materia 5.1.3\n// Bootswatch\n\n$theme: \"materia\" !default;\n\n//\n// Color system\n//\n\n$white:    #fff !default;\n$gray-100: #f8f9fa !default;\n$gray-200: #eee !default;\n$gray-300: #dee2e6 !default;\n$gray-400: #ced4da !default;\n$gray-500: #bbb !default;\n$gray-600: #666 !default;\n$gray-700: #444 !default;\n$gray-800: #222 !default;\n$gray-900: #212121 !default;\n$black:    #000 !default;\n\n$blue:    #2196f3 !default;\n$indigo:  #6610f2 !default;\n$purple:  #6f42c1 !default;\n$pink:    #e83e8c !default;\n$red:     #e51c23 !default;\n$orange:  #fd7e14 !default;\n$yellow:  #ff9800 !default;\n$green:   #4caf50 !default;\n$teal:    #20c997 !default;\n$cyan:    #9c27b0 !default;\n\n$primary:       $blue !default;\n$secondary:     $white !default;\n$success:       $green !default;\n$info:          $cyan !default;\n$warning:       $yellow !default;\n$danger:        $red !default;\n$light:         $gray-100 !default;\n$dark:          $gray-800 !default;\n\n$min-contrast-ratio:   2.15 !default;\n\n$enable-gradients: true !default;\n\n// Body\n\n$body-color:    $gray-700 !default;\n\n// Fonts\n\n// stylelint-disable-next-line value-keyword-case\n$font-family-sans-serif:    Roboto, -apple-system, BlinkMacSystemFont, \"Segoe UI\", \"Helvetica Neue\", Arial, sans-serif !default;\n$font-size-base:            1rem !default;\n$font-weight-base:          400 !default;\n\n// Buttons\n\n$input-btn-padding-y:       .8rem !default;\n$input-btn-padding-x:       1rem !default;\n\n// Forms\n\n$input-padding-y:                1rem !default;\n$input-padding-x:                0 !default;\n$input-padding-y-sm:             0 !default;\n$input-padding-x-sm:             0 !default;\n$input-padding-y-lg:             ($font-size-base * 1.25) !default;\n$input-padding-x-lg:             0 !default;\n$input-bg:                       transparent !default;\n$input-disabled-bg:              transparent !default;\n$input-color:                    $gray-600 !default;\n$input-border-color:             transparent !default;\n$input-border-width:             0 !default;\n$input-border-radius:            0 !default;\n$input-border-radius-lg:         0 !default;\n$input-border-radius-sm:         0 !default;\n$input-placeholder-color:        rgba(0, 0, 0, .4) !default;\n$input-group-addon-bg:           transparent !default;\n\n// Navs\n\n$nav-link-disabled-color:       $gray-500 !default;\n$nav-tabs-border-color:         transparent !default;\n\n// Navbar\n\n$navbar-padding-y:                  1rem !default;\n$navbar-dark-color:                 rgba($white, .75) !default;\n$navbar-dark-hover-color:           $white !default;\n\n// Cards\n\n$card-border-width:                 0 !default;\n$card-border-color:                 transparent !default;\n\n// Tooltips\n\n$tooltip-bg:                        $gray-700 !default;\n\n// Modals\n\n$modal-content-border-color:        transparent !default;\n\n// Progress bars\n\n$progress-height:               .375rem !default;\n$progress-border-radius:        0 !default;\n\n// Close\n\n$btn-close-color:            $white !default;\n$btn-close-opacity:          .6 !default;\n$btn-close-hover-opacity:    1 !default;\n"
  },
  {
    "path": "src/sourceDev.WebApp/SharedThemes/materia/wwwroot/css/bootstrap.css",
    "content": "/*!\n * Bootswatch v5.1.3\n * Homepage: https://bootswatch.com\n * Copyright 2012-2021 Thomas Park\n * Licensed under MIT\n * Based on Bootstrap\n*/\n/*!\n * Bootstrap v5.1.3 (https://getbootstrap.com/)\n * Copyright 2011-2021 The Bootstrap Authors\n * Copyright 2011-2021 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n@import url(\"https://fonts.googleapis.com/css2?family=Roboto:wght@300;400;500;700&display=swap\");\n:root {\n  --bs-blue: #2196f3;\n  --bs-indigo: #6610f2;\n  --bs-purple: #6f42c1;\n  --bs-pink: #e83e8c;\n  --bs-red: #e51c23;\n  --bs-orange: #fd7e14;\n  --bs-yellow: #ff9800;\n  --bs-green: #4caf50;\n  --bs-teal: #20c997;\n  --bs-cyan: #9c27b0;\n  --bs-white: #fff;\n  --bs-gray: #666;\n  --bs-gray-dark: #222;\n  --bs-gray-100: #f8f9fa;\n  --bs-gray-200: #eee;\n  --bs-gray-300: #dee2e6;\n  --bs-gray-400: #ced4da;\n  --bs-gray-500: #bbb;\n  --bs-gray-600: #666;\n  --bs-gray-700: #444;\n  --bs-gray-800: #222;\n  --bs-gray-900: #212121;\n  --bs-primary: #2196f3;\n  --bs-secondary: #fff;\n  --bs-success: #4caf50;\n  --bs-info: #9c27b0;\n  --bs-warning: #ff9800;\n  --bs-danger: #e51c23;\n  --bs-light: #f8f9fa;\n  --bs-dark: #222;\n  --bs-primary-rgb: 33, 150, 243;\n  --bs-secondary-rgb: 255, 255, 255;\n  --bs-success-rgb: 76, 175, 80;\n  --bs-info-rgb: 156, 39, 176;\n  --bs-warning-rgb: 255, 152, 0;\n  --bs-danger-rgb: 229, 28, 35;\n  --bs-light-rgb: 248, 249, 250;\n  --bs-dark-rgb: 34, 34, 34;\n  --bs-white-rgb: 255, 255, 255;\n  --bs-black-rgb: 0, 0, 0;\n  --bs-body-color-rgb: 68, 68, 68;\n  --bs-body-bg-rgb: 255, 255, 255;\n  --bs-font-sans-serif: Roboto, -apple-system, BlinkMacSystemFont, \"Segoe UI\", \"Helvetica Neue\", Arial, sans-serif;\n  --bs-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n  --bs-gradient: linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));\n  --bs-body-font-family: var(--bs-font-sans-serif);\n  --bs-body-font-size: 1rem;\n  --bs-body-font-weight: 400;\n  --bs-body-line-height: 1.5;\n  --bs-body-color: #444;\n  --bs-body-bg: #fff;\n}\n\n*,\n*::before,\n*::after {\n  box-sizing: border-box;\n}\n\n@media (prefers-reduced-motion: no-preference) {\n  :root {\n    scroll-behavior: smooth;\n  }\n}\n\nbody {\n  margin: 0;\n  font-family: var(--bs-body-font-family);\n  font-size: var(--bs-body-font-size);\n  font-weight: var(--bs-body-font-weight);\n  line-height: var(--bs-body-line-height);\n  color: var(--bs-body-color);\n  text-align: var(--bs-body-text-align);\n  background-color: var(--bs-body-bg);\n  -webkit-text-size-adjust: 100%;\n  -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\n\nhr {\n  margin: 1rem 0;\n  color: inherit;\n  background-color: currentColor;\n  border: 0;\n  opacity: 0.25;\n}\n\nhr:not([size]) {\n  height: 1px;\n}\n\nh1, .h1, h2, .h2, h3, .h3, h4, .h4, h5, .h5, h6, .h6 {\n  margin-top: 0;\n  margin-bottom: 0.5rem;\n  font-weight: 500;\n  line-height: 1.2;\n}\n\nh1, .h1 {\n  font-size: calc(1.375rem + 1.5vw);\n}\n\n@media (min-width: 1200px) {\n  h1, .h1 {\n    font-size: 2.5rem;\n  }\n}\n\nh2, .h2 {\n  font-size: calc(1.325rem + 0.9vw);\n}\n\n@media (min-width: 1200px) {\n  h2, .h2 {\n    font-size: 2rem;\n  }\n}\n\nh3, .h3 {\n  font-size: calc(1.3rem + 0.6vw);\n}\n\n@media (min-width: 1200px) {\n  h3, .h3 {\n    font-size: 1.75rem;\n  }\n}\n\nh4, .h4 {\n  font-size: calc(1.275rem + 0.3vw);\n}\n\n@media (min-width: 1200px) {\n  h4, .h4 {\n    font-size: 1.5rem;\n  }\n}\n\nh5, .h5 {\n  font-size: 1.25rem;\n}\n\nh6, .h6 {\n  font-size: 1rem;\n}\n\np {\n  margin-top: 0;\n  margin-bottom: 1rem;\n}\n\nabbr[title],\nabbr[data-bs-original-title] {\n  -webkit-text-decoration: underline dotted;\n  text-decoration: underline dotted;\n  cursor: help;\n  -webkit-text-decoration-skip-ink: none;\n  text-decoration-skip-ink: none;\n}\n\naddress {\n  margin-bottom: 1rem;\n  font-style: normal;\n  line-height: inherit;\n}\n\nol,\nul {\n  padding-left: 2rem;\n}\n\nol,\nul,\ndl {\n  margin-top: 0;\n  margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n  margin-bottom: 0;\n}\n\ndt {\n  font-weight: 700;\n}\n\ndd {\n  margin-bottom: .5rem;\n  margin-left: 0;\n}\n\nblockquote {\n  margin: 0 0 1rem;\n}\n\nb,\nstrong {\n  font-weight: bolder;\n}\n\nsmall, .small {\n  font-size: 0.875em;\n}\n\nmark, .mark {\n  padding: 0.2em;\n  background-color: #fcf8e3;\n}\n\nsub,\nsup {\n  position: relative;\n  font-size: 0.75em;\n  line-height: 0;\n  vertical-align: baseline;\n}\n\nsub {\n  bottom: -.25em;\n}\n\nsup {\n  top: -.5em;\n}\n\na {\n  color: #2196f3;\n  text-decoration: underline;\n}\n\na:hover {\n  color: #1a78c2;\n}\n\na:not([href]):not([class]), a:not([href]):not([class]):hover {\n  color: inherit;\n  text-decoration: none;\n}\n\npre,\ncode,\nkbd,\nsamp {\n  font-family: var(--bs-font-monospace);\n  font-size: 1em;\n  direction: ltr /* rtl:ignore */;\n  unicode-bidi: bidi-override;\n}\n\npre {\n  display: block;\n  margin-top: 0;\n  margin-bottom: 1rem;\n  overflow: auto;\n  font-size: 0.875em;\n}\n\npre code {\n  font-size: inherit;\n  color: inherit;\n  word-break: normal;\n}\n\ncode {\n  font-size: 0.875em;\n  color: #e83e8c;\n  word-wrap: break-word;\n}\n\na > code {\n  color: inherit;\n}\n\nkbd {\n  padding: 0.2rem 0.4rem;\n  font-size: 0.875em;\n  color: #fff;\n  background-color: #212121;\n  border-radius: 0.2rem;\n}\n\nkbd kbd {\n  padding: 0;\n  font-size: 1em;\n  font-weight: 700;\n}\n\nfigure {\n  margin: 0 0 1rem;\n}\n\nimg,\nsvg {\n  vertical-align: middle;\n}\n\ntable {\n  caption-side: bottom;\n  border-collapse: collapse;\n}\n\ncaption {\n  padding-top: 0.5rem;\n  padding-bottom: 0.5rem;\n  color: #666;\n  text-align: left;\n}\n\nth {\n  text-align: inherit;\n  text-align: -webkit-match-parent;\n}\n\nthead,\ntbody,\ntfoot,\ntr,\ntd,\nth {\n  border-color: inherit;\n  border-style: solid;\n  border-width: 0;\n}\n\nlabel {\n  display: inline-block;\n}\n\nbutton {\n  border-radius: 0;\n}\n\nbutton:focus:not(:focus-visible) {\n  outline: 0;\n}\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n  margin: 0;\n  font-family: inherit;\n  font-size: inherit;\n  line-height: inherit;\n}\n\nbutton,\nselect {\n  text-transform: none;\n}\n\n[role=\"button\"] {\n  cursor: pointer;\n}\n\nselect {\n  word-wrap: normal;\n}\n\nselect:disabled {\n  opacity: 1;\n}\n\n[list]::-webkit-calendar-picker-indicator {\n  display: none;\n}\n\nbutton,\n[type=\"button\"],\n[type=\"reset\"],\n[type=\"submit\"] {\n  -webkit-appearance: button;\n}\n\nbutton:not(:disabled),\n[type=\"button\"]:not(:disabled),\n[type=\"reset\"]:not(:disabled),\n[type=\"submit\"]:not(:disabled) {\n  cursor: pointer;\n}\n\n::-moz-focus-inner {\n  padding: 0;\n  border-style: none;\n}\n\ntextarea {\n  resize: vertical;\n}\n\nfieldset {\n  min-width: 0;\n  padding: 0;\n  margin: 0;\n  border: 0;\n}\n\nlegend {\n  float: left;\n  width: 100%;\n  padding: 0;\n  margin-bottom: 0.5rem;\n  font-size: calc(1.275rem + 0.3vw);\n  line-height: inherit;\n}\n\n@media (min-width: 1200px) {\n  legend {\n    font-size: 1.5rem;\n  }\n}\n\nlegend + * {\n  clear: left;\n}\n\n::-webkit-datetime-edit-fields-wrapper,\n::-webkit-datetime-edit-text,\n::-webkit-datetime-edit-minute,\n::-webkit-datetime-edit-hour-field,\n::-webkit-datetime-edit-day-field,\n::-webkit-datetime-edit-month-field,\n::-webkit-datetime-edit-year-field {\n  padding: 0;\n}\n\n::-webkit-inner-spin-button {\n  height: auto;\n}\n\n[type=\"search\"] {\n  outline-offset: -2px;\n  -webkit-appearance: textfield;\n}\n\n/* rtl:raw:\n[type=\"tel\"],\n[type=\"url\"],\n[type=\"email\"],\n[type=\"number\"] {\n  direction: ltr;\n}\n*/\n::-webkit-search-decoration {\n  -webkit-appearance: none;\n}\n\n::-webkit-color-swatch-wrapper {\n  padding: 0;\n}\n\n::file-selector-button {\n  font: inherit;\n}\n\n::-webkit-file-upload-button {\n  font: inherit;\n  -webkit-appearance: button;\n}\n\noutput {\n  display: inline-block;\n}\n\niframe {\n  border: 0;\n}\n\nsummary {\n  display: list-item;\n  cursor: pointer;\n}\n\nprogress {\n  vertical-align: baseline;\n}\n\n[hidden] {\n  display: none !important;\n}\n\n.lead {\n  font-size: 1.25rem;\n  font-weight: 300;\n}\n\n.display-1 {\n  font-size: calc(1.625rem + 4.5vw);\n  font-weight: 300;\n  line-height: 1.2;\n}\n\n@media (min-width: 1200px) {\n  .display-1 {\n    font-size: 5rem;\n  }\n}\n\n.display-2 {\n  font-size: calc(1.575rem + 3.9vw);\n  font-weight: 300;\n  line-height: 1.2;\n}\n\n@media (min-width: 1200px) {\n  .display-2 {\n    font-size: 4.5rem;\n  }\n}\n\n.display-3 {\n  font-size: calc(1.525rem + 3.3vw);\n  font-weight: 300;\n  line-height: 1.2;\n}\n\n@media (min-width: 1200px) {\n  .display-3 {\n    font-size: 4rem;\n  }\n}\n\n.display-4 {\n  font-size: calc(1.475rem + 2.7vw);\n  font-weight: 300;\n  line-height: 1.2;\n}\n\n@media (min-width: 1200px) {\n  .display-4 {\n    font-size: 3.5rem;\n  }\n}\n\n.display-5 {\n  font-size: calc(1.425rem + 2.1vw);\n  font-weight: 300;\n  line-height: 1.2;\n}\n\n@media (min-width: 1200px) {\n  .display-5 {\n    font-size: 3rem;\n  }\n}\n\n.display-6 {\n  font-size: calc(1.375rem + 1.5vw);\n  font-weight: 300;\n  line-height: 1.2;\n}\n\n@media (min-width: 1200px) {\n  .display-6 {\n    font-size: 2.5rem;\n  }\n}\n\n.list-unstyled {\n  padding-left: 0;\n  list-style: none;\n}\n\n.list-inline {\n  padding-left: 0;\n  list-style: none;\n}\n\n.list-inline-item {\n  display: inline-block;\n}\n\n.list-inline-item:not(:last-child) {\n  margin-right: 0.5rem;\n}\n\n.initialism {\n  font-size: 0.875em;\n  text-transform: uppercase;\n}\n\n.blockquote {\n  margin-bottom: 1rem;\n  font-size: 1.25rem;\n}\n\n.blockquote > :last-child {\n  margin-bottom: 0;\n}\n\n.blockquote-footer {\n  margin-top: -1rem;\n  margin-bottom: 1rem;\n  font-size: 0.875em;\n  color: #666;\n}\n\n.blockquote-footer::before {\n  content: \"\\2014\\00A0\";\n}\n\n.img-fluid {\n  max-width: 100%;\n  height: auto;\n}\n\n.img-thumbnail {\n  padding: 0.25rem;\n  background-color: #fff;\n  border: 1px solid #dee2e6;\n  border-radius: 0.25rem;\n  max-width: 100%;\n  height: auto;\n}\n\n.figure {\n  display: inline-block;\n}\n\n.figure-img {\n  margin-bottom: 0.5rem;\n  line-height: 1;\n}\n\n.figure-caption {\n  font-size: 0.875em;\n  color: #666;\n}\n\n.container,\n.container-fluid,\n.container-sm,\n.container-md,\n.container-lg,\n.container-xl,\n.container-xxl {\n  width: 100%;\n  padding-right: var(--bs-gutter-x, 0.75rem);\n  padding-left: var(--bs-gutter-x, 0.75rem);\n  margin-right: auto;\n  margin-left: auto;\n}\n\n@media (min-width: 576px) {\n  .container, .container-sm {\n    max-width: 540px;\n  }\n}\n\n@media (min-width: 768px) {\n  .container, .container-sm, .container-md {\n    max-width: 720px;\n  }\n}\n\n@media (min-width: 992px) {\n  .container, .container-sm, .container-md, .container-lg {\n    max-width: 960px;\n  }\n}\n\n@media (min-width: 1200px) {\n  .container, .container-sm, .container-md, .container-lg, .container-xl {\n    max-width: 1140px;\n  }\n}\n\n@media (min-width: 1400px) {\n  .container, .container-sm, .container-md, .container-lg, .container-xl, .container-xxl {\n    max-width: 1320px;\n  }\n}\n\n.row {\n  --bs-gutter-x: 1.5rem;\n  --bs-gutter-y: 0;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n  flex-wrap: wrap;\n  margin-top: calc(-1 * var(--bs-gutter-y));\n  margin-right: calc(-.5 * var(--bs-gutter-x));\n  margin-left: calc(-.5 * var(--bs-gutter-x));\n}\n\n.row > * {\n  -ms-flex-negative: 0;\n  flex-shrink: 0;\n  width: 100%;\n  max-width: 100%;\n  padding-right: calc(var(--bs-gutter-x) * .5);\n  padding-left: calc(var(--bs-gutter-x) * .5);\n  margin-top: var(--bs-gutter-y);\n}\n\n.col {\n  -ms-flex: 1 0 0%;\n  flex: 1 0 0%;\n}\n\n.row-cols-auto > * {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: auto;\n}\n\n.row-cols-1 > * {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 100%;\n}\n\n.row-cols-2 > * {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 50%;\n}\n\n.row-cols-3 > * {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 33.333333%;\n}\n\n.row-cols-4 > * {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 25%;\n}\n\n.row-cols-5 > * {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 20%;\n}\n\n.row-cols-6 > * {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 16.666667%;\n}\n\n.col-auto {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: auto;\n}\n\n.col-1 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 8.333333%;\n}\n\n.col-2 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 16.666667%;\n}\n\n.col-3 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 25%;\n}\n\n.col-4 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 33.333333%;\n}\n\n.col-5 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 41.666667%;\n}\n\n.col-6 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 50%;\n}\n\n.col-7 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 58.333333%;\n}\n\n.col-8 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 66.666667%;\n}\n\n.col-9 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 75%;\n}\n\n.col-10 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 83.333333%;\n}\n\n.col-11 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 91.666667%;\n}\n\n.col-12 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 100%;\n}\n\n.offset-1 {\n  margin-left: 8.333333%;\n}\n\n.offset-2 {\n  margin-left: 16.666667%;\n}\n\n.offset-3 {\n  margin-left: 25%;\n}\n\n.offset-4 {\n  margin-left: 33.333333%;\n}\n\n.offset-5 {\n  margin-left: 41.666667%;\n}\n\n.offset-6 {\n  margin-left: 50%;\n}\n\n.offset-7 {\n  margin-left: 58.333333%;\n}\n\n.offset-8 {\n  margin-left: 66.666667%;\n}\n\n.offset-9 {\n  margin-left: 75%;\n}\n\n.offset-10 {\n  margin-left: 83.333333%;\n}\n\n.offset-11 {\n  margin-left: 91.666667%;\n}\n\n.g-0,\n.gx-0 {\n  --bs-gutter-x: 0;\n}\n\n.g-0,\n.gy-0 {\n  --bs-gutter-y: 0;\n}\n\n.g-1,\n.gx-1 {\n  --bs-gutter-x: 0.25rem;\n}\n\n.g-1,\n.gy-1 {\n  --bs-gutter-y: 0.25rem;\n}\n\n.g-2,\n.gx-2 {\n  --bs-gutter-x: 0.5rem;\n}\n\n.g-2,\n.gy-2 {\n  --bs-gutter-y: 0.5rem;\n}\n\n.g-3,\n.gx-3 {\n  --bs-gutter-x: 1rem;\n}\n\n.g-3,\n.gy-3 {\n  --bs-gutter-y: 1rem;\n}\n\n.g-4,\n.gx-4 {\n  --bs-gutter-x: 1.5rem;\n}\n\n.g-4,\n.gy-4 {\n  --bs-gutter-y: 1.5rem;\n}\n\n.g-5,\n.gx-5 {\n  --bs-gutter-x: 3rem;\n}\n\n.g-5,\n.gy-5 {\n  --bs-gutter-y: 3rem;\n}\n\n@media (min-width: 576px) {\n  .col-sm {\n    -ms-flex: 1 0 0%;\n    flex: 1 0 0%;\n  }\n  .row-cols-sm-auto > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .row-cols-sm-1 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .row-cols-sm-2 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .row-cols-sm-3 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 33.333333%;\n  }\n  .row-cols-sm-4 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .row-cols-sm-5 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 20%;\n  }\n  .row-cols-sm-6 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 16.666667%;\n  }\n  .col-sm-auto {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .col-sm-1 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 8.333333%;\n  }\n  .col-sm-2 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 16.666667%;\n  }\n  .col-sm-3 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .col-sm-4 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 33.333333%;\n  }\n  .col-sm-5 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 41.666667%;\n  }\n  .col-sm-6 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .col-sm-7 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 58.333333%;\n  }\n  .col-sm-8 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 66.666667%;\n  }\n  .col-sm-9 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 75%;\n  }\n  .col-sm-10 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 83.333333%;\n  }\n  .col-sm-11 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 91.666667%;\n  }\n  .col-sm-12 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .offset-sm-0 {\n    margin-left: 0;\n  }\n  .offset-sm-1 {\n    margin-left: 8.333333%;\n  }\n  .offset-sm-2 {\n    margin-left: 16.666667%;\n  }\n  .offset-sm-3 {\n    margin-left: 25%;\n  }\n  .offset-sm-4 {\n    margin-left: 33.333333%;\n  }\n  .offset-sm-5 {\n    margin-left: 41.666667%;\n  }\n  .offset-sm-6 {\n    margin-left: 50%;\n  }\n  .offset-sm-7 {\n    margin-left: 58.333333%;\n  }\n  .offset-sm-8 {\n    margin-left: 66.666667%;\n  }\n  .offset-sm-9 {\n    margin-left: 75%;\n  }\n  .offset-sm-10 {\n    margin-left: 83.333333%;\n  }\n  .offset-sm-11 {\n    margin-left: 91.666667%;\n  }\n  .g-sm-0,\n  .gx-sm-0 {\n    --bs-gutter-x: 0;\n  }\n  .g-sm-0,\n  .gy-sm-0 {\n    --bs-gutter-y: 0;\n  }\n  .g-sm-1,\n  .gx-sm-1 {\n    --bs-gutter-x: 0.25rem;\n  }\n  .g-sm-1,\n  .gy-sm-1 {\n    --bs-gutter-y: 0.25rem;\n  }\n  .g-sm-2,\n  .gx-sm-2 {\n    --bs-gutter-x: 0.5rem;\n  }\n  .g-sm-2,\n  .gy-sm-2 {\n    --bs-gutter-y: 0.5rem;\n  }\n  .g-sm-3,\n  .gx-sm-3 {\n    --bs-gutter-x: 1rem;\n  }\n  .g-sm-3,\n  .gy-sm-3 {\n    --bs-gutter-y: 1rem;\n  }\n  .g-sm-4,\n  .gx-sm-4 {\n    --bs-gutter-x: 1.5rem;\n  }\n  .g-sm-4,\n  .gy-sm-4 {\n    --bs-gutter-y: 1.5rem;\n  }\n  .g-sm-5,\n  .gx-sm-5 {\n    --bs-gutter-x: 3rem;\n  }\n  .g-sm-5,\n  .gy-sm-5 {\n    --bs-gutter-y: 3rem;\n  }\n}\n\n@media (min-width: 768px) {\n  .col-md {\n    -ms-flex: 1 0 0%;\n    flex: 1 0 0%;\n  }\n  .row-cols-md-auto > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .row-cols-md-1 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .row-cols-md-2 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .row-cols-md-3 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 33.333333%;\n  }\n  .row-cols-md-4 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .row-cols-md-5 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 20%;\n  }\n  .row-cols-md-6 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 16.666667%;\n  }\n  .col-md-auto {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .col-md-1 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 8.333333%;\n  }\n  .col-md-2 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 16.666667%;\n  }\n  .col-md-3 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .col-md-4 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 33.333333%;\n  }\n  .col-md-5 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 41.666667%;\n  }\n  .col-md-6 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .col-md-7 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 58.333333%;\n  }\n  .col-md-8 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 66.666667%;\n  }\n  .col-md-9 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 75%;\n  }\n  .col-md-10 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 83.333333%;\n  }\n  .col-md-11 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 91.666667%;\n  }\n  .col-md-12 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .offset-md-0 {\n    margin-left: 0;\n  }\n  .offset-md-1 {\n    margin-left: 8.333333%;\n  }\n  .offset-md-2 {\n    margin-left: 16.666667%;\n  }\n  .offset-md-3 {\n    margin-left: 25%;\n  }\n  .offset-md-4 {\n    margin-left: 33.333333%;\n  }\n  .offset-md-5 {\n    margin-left: 41.666667%;\n  }\n  .offset-md-6 {\n    margin-left: 50%;\n  }\n  .offset-md-7 {\n    margin-left: 58.333333%;\n  }\n  .offset-md-8 {\n    margin-left: 66.666667%;\n  }\n  .offset-md-9 {\n    margin-left: 75%;\n  }\n  .offset-md-10 {\n    margin-left: 83.333333%;\n  }\n  .offset-md-11 {\n    margin-left: 91.666667%;\n  }\n  .g-md-0,\n  .gx-md-0 {\n    --bs-gutter-x: 0;\n  }\n  .g-md-0,\n  .gy-md-0 {\n    --bs-gutter-y: 0;\n  }\n  .g-md-1,\n  .gx-md-1 {\n    --bs-gutter-x: 0.25rem;\n  }\n  .g-md-1,\n  .gy-md-1 {\n    --bs-gutter-y: 0.25rem;\n  }\n  .g-md-2,\n  .gx-md-2 {\n    --bs-gutter-x: 0.5rem;\n  }\n  .g-md-2,\n  .gy-md-2 {\n    --bs-gutter-y: 0.5rem;\n  }\n  .g-md-3,\n  .gx-md-3 {\n    --bs-gutter-x: 1rem;\n  }\n  .g-md-3,\n  .gy-md-3 {\n    --bs-gutter-y: 1rem;\n  }\n  .g-md-4,\n  .gx-md-4 {\n    --bs-gutter-x: 1.5rem;\n  }\n  .g-md-4,\n  .gy-md-4 {\n    --bs-gutter-y: 1.5rem;\n  }\n  .g-md-5,\n  .gx-md-5 {\n    --bs-gutter-x: 3rem;\n  }\n  .g-md-5,\n  .gy-md-5 {\n    --bs-gutter-y: 3rem;\n  }\n}\n\n@media (min-width: 992px) {\n  .col-lg {\n    -ms-flex: 1 0 0%;\n    flex: 1 0 0%;\n  }\n  .row-cols-lg-auto > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .row-cols-lg-1 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .row-cols-lg-2 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .row-cols-lg-3 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 33.333333%;\n  }\n  .row-cols-lg-4 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .row-cols-lg-5 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 20%;\n  }\n  .row-cols-lg-6 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 16.666667%;\n  }\n  .col-lg-auto {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .col-lg-1 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 8.333333%;\n  }\n  .col-lg-2 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 16.666667%;\n  }\n  .col-lg-3 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .col-lg-4 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 33.333333%;\n  }\n  .col-lg-5 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 41.666667%;\n  }\n  .col-lg-6 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .col-lg-7 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 58.333333%;\n  }\n  .col-lg-8 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 66.666667%;\n  }\n  .col-lg-9 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 75%;\n  }\n  .col-lg-10 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 83.333333%;\n  }\n  .col-lg-11 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 91.666667%;\n  }\n  .col-lg-12 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .offset-lg-0 {\n    margin-left: 0;\n  }\n  .offset-lg-1 {\n    margin-left: 8.333333%;\n  }\n  .offset-lg-2 {\n    margin-left: 16.666667%;\n  }\n  .offset-lg-3 {\n    margin-left: 25%;\n  }\n  .offset-lg-4 {\n    margin-left: 33.333333%;\n  }\n  .offset-lg-5 {\n    margin-left: 41.666667%;\n  }\n  .offset-lg-6 {\n    margin-left: 50%;\n  }\n  .offset-lg-7 {\n    margin-left: 58.333333%;\n  }\n  .offset-lg-8 {\n    margin-left: 66.666667%;\n  }\n  .offset-lg-9 {\n    margin-left: 75%;\n  }\n  .offset-lg-10 {\n    margin-left: 83.333333%;\n  }\n  .offset-lg-11 {\n    margin-left: 91.666667%;\n  }\n  .g-lg-0,\n  .gx-lg-0 {\n    --bs-gutter-x: 0;\n  }\n  .g-lg-0,\n  .gy-lg-0 {\n    --bs-gutter-y: 0;\n  }\n  .g-lg-1,\n  .gx-lg-1 {\n    --bs-gutter-x: 0.25rem;\n  }\n  .g-lg-1,\n  .gy-lg-1 {\n    --bs-gutter-y: 0.25rem;\n  }\n  .g-lg-2,\n  .gx-lg-2 {\n    --bs-gutter-x: 0.5rem;\n  }\n  .g-lg-2,\n  .gy-lg-2 {\n    --bs-gutter-y: 0.5rem;\n  }\n  .g-lg-3,\n  .gx-lg-3 {\n    --bs-gutter-x: 1rem;\n  }\n  .g-lg-3,\n  .gy-lg-3 {\n    --bs-gutter-y: 1rem;\n  }\n  .g-lg-4,\n  .gx-lg-4 {\n    --bs-gutter-x: 1.5rem;\n  }\n  .g-lg-4,\n  .gy-lg-4 {\n    --bs-gutter-y: 1.5rem;\n  }\n  .g-lg-5,\n  .gx-lg-5 {\n    --bs-gutter-x: 3rem;\n  }\n  .g-lg-5,\n  .gy-lg-5 {\n    --bs-gutter-y: 3rem;\n  }\n}\n\n@media (min-width: 1200px) {\n  .col-xl {\n    -ms-flex: 1 0 0%;\n    flex: 1 0 0%;\n  }\n  .row-cols-xl-auto > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .row-cols-xl-1 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .row-cols-xl-2 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .row-cols-xl-3 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 33.333333%;\n  }\n  .row-cols-xl-4 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .row-cols-xl-5 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 20%;\n  }\n  .row-cols-xl-6 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 16.666667%;\n  }\n  .col-xl-auto {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .col-xl-1 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 8.333333%;\n  }\n  .col-xl-2 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 16.666667%;\n  }\n  .col-xl-3 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .col-xl-4 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 33.333333%;\n  }\n  .col-xl-5 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 41.666667%;\n  }\n  .col-xl-6 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .col-xl-7 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 58.333333%;\n  }\n  .col-xl-8 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 66.666667%;\n  }\n  .col-xl-9 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 75%;\n  }\n  .col-xl-10 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 83.333333%;\n  }\n  .col-xl-11 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 91.666667%;\n  }\n  .col-xl-12 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .offset-xl-0 {\n    margin-left: 0;\n  }\n  .offset-xl-1 {\n    margin-left: 8.333333%;\n  }\n  .offset-xl-2 {\n    margin-left: 16.666667%;\n  }\n  .offset-xl-3 {\n    margin-left: 25%;\n  }\n  .offset-xl-4 {\n    margin-left: 33.333333%;\n  }\n  .offset-xl-5 {\n    margin-left: 41.666667%;\n  }\n  .offset-xl-6 {\n    margin-left: 50%;\n  }\n  .offset-xl-7 {\n    margin-left: 58.333333%;\n  }\n  .offset-xl-8 {\n    margin-left: 66.666667%;\n  }\n  .offset-xl-9 {\n    margin-left: 75%;\n  }\n  .offset-xl-10 {\n    margin-left: 83.333333%;\n  }\n  .offset-xl-11 {\n    margin-left: 91.666667%;\n  }\n  .g-xl-0,\n  .gx-xl-0 {\n    --bs-gutter-x: 0;\n  }\n  .g-xl-0,\n  .gy-xl-0 {\n    --bs-gutter-y: 0;\n  }\n  .g-xl-1,\n  .gx-xl-1 {\n    --bs-gutter-x: 0.25rem;\n  }\n  .g-xl-1,\n  .gy-xl-1 {\n    --bs-gutter-y: 0.25rem;\n  }\n  .g-xl-2,\n  .gx-xl-2 {\n    --bs-gutter-x: 0.5rem;\n  }\n  .g-xl-2,\n  .gy-xl-2 {\n    --bs-gutter-y: 0.5rem;\n  }\n  .g-xl-3,\n  .gx-xl-3 {\n    --bs-gutter-x: 1rem;\n  }\n  .g-xl-3,\n  .gy-xl-3 {\n    --bs-gutter-y: 1rem;\n  }\n  .g-xl-4,\n  .gx-xl-4 {\n    --bs-gutter-x: 1.5rem;\n  }\n  .g-xl-4,\n  .gy-xl-4 {\n    --bs-gutter-y: 1.5rem;\n  }\n  .g-xl-5,\n  .gx-xl-5 {\n    --bs-gutter-x: 3rem;\n  }\n  .g-xl-5,\n  .gy-xl-5 {\n    --bs-gutter-y: 3rem;\n  }\n}\n\n@media (min-width: 1400px) {\n  .col-xxl {\n    -ms-flex: 1 0 0%;\n    flex: 1 0 0%;\n  }\n  .row-cols-xxl-auto > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .row-cols-xxl-1 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .row-cols-xxl-2 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .row-cols-xxl-3 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 33.333333%;\n  }\n  .row-cols-xxl-4 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .row-cols-xxl-5 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 20%;\n  }\n  .row-cols-xxl-6 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 16.666667%;\n  }\n  .col-xxl-auto {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .col-xxl-1 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 8.333333%;\n  }\n  .col-xxl-2 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 16.666667%;\n  }\n  .col-xxl-3 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .col-xxl-4 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 33.333333%;\n  }\n  .col-xxl-5 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 41.666667%;\n  }\n  .col-xxl-6 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .col-xxl-7 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 58.333333%;\n  }\n  .col-xxl-8 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 66.666667%;\n  }\n  .col-xxl-9 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 75%;\n  }\n  .col-xxl-10 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 83.333333%;\n  }\n  .col-xxl-11 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 91.666667%;\n  }\n  .col-xxl-12 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .offset-xxl-0 {\n    margin-left: 0;\n  }\n  .offset-xxl-1 {\n    margin-left: 8.333333%;\n  }\n  .offset-xxl-2 {\n    margin-left: 16.666667%;\n  }\n  .offset-xxl-3 {\n    margin-left: 25%;\n  }\n  .offset-xxl-4 {\n    margin-left: 33.333333%;\n  }\n  .offset-xxl-5 {\n    margin-left: 41.666667%;\n  }\n  .offset-xxl-6 {\n    margin-left: 50%;\n  }\n  .offset-xxl-7 {\n    margin-left: 58.333333%;\n  }\n  .offset-xxl-8 {\n    margin-left: 66.666667%;\n  }\n  .offset-xxl-9 {\n    margin-left: 75%;\n  }\n  .offset-xxl-10 {\n    margin-left: 83.333333%;\n  }\n  .offset-xxl-11 {\n    margin-left: 91.666667%;\n  }\n  .g-xxl-0,\n  .gx-xxl-0 {\n    --bs-gutter-x: 0;\n  }\n  .g-xxl-0,\n  .gy-xxl-0 {\n    --bs-gutter-y: 0;\n  }\n  .g-xxl-1,\n  .gx-xxl-1 {\n    --bs-gutter-x: 0.25rem;\n  }\n  .g-xxl-1,\n  .gy-xxl-1 {\n    --bs-gutter-y: 0.25rem;\n  }\n  .g-xxl-2,\n  .gx-xxl-2 {\n    --bs-gutter-x: 0.5rem;\n  }\n  .g-xxl-2,\n  .gy-xxl-2 {\n    --bs-gutter-y: 0.5rem;\n  }\n  .g-xxl-3,\n  .gx-xxl-3 {\n    --bs-gutter-x: 1rem;\n  }\n  .g-xxl-3,\n  .gy-xxl-3 {\n    --bs-gutter-y: 1rem;\n  }\n  .g-xxl-4,\n  .gx-xxl-4 {\n    --bs-gutter-x: 1.5rem;\n  }\n  .g-xxl-4,\n  .gy-xxl-4 {\n    --bs-gutter-y: 1.5rem;\n  }\n  .g-xxl-5,\n  .gx-xxl-5 {\n    --bs-gutter-x: 3rem;\n  }\n  .g-xxl-5,\n  .gy-xxl-5 {\n    --bs-gutter-y: 3rem;\n  }\n}\n\n.table {\n  --bs-table-bg: transparent;\n  --bs-table-accent-bg: transparent;\n  --bs-table-striped-color: #444;\n  --bs-table-striped-bg: rgba(0, 0, 0, 0.05);\n  --bs-table-active-color: #444;\n  --bs-table-active-bg: rgba(0, 0, 0, 0.1);\n  --bs-table-hover-color: #444;\n  --bs-table-hover-bg: rgba(0, 0, 0, 0.075);\n  width: 100%;\n  margin-bottom: 1rem;\n  color: #444;\n  vertical-align: top;\n  border-color: #dee2e6;\n}\n\n.table > :not(caption) > * > * {\n  padding: 0.5rem 0.5rem;\n  background-color: var(--bs-table-bg);\n  border-bottom-width: 1px;\n  box-shadow: inset 0 0 0 9999px var(--bs-table-accent-bg);\n}\n\n.table > tbody {\n  vertical-align: inherit;\n}\n\n.table > thead {\n  vertical-align: bottom;\n}\n\n.table > :not(:first-child) {\n  border-top: 2px solid currentColor;\n}\n\n.caption-top {\n  caption-side: top;\n}\n\n.table-sm > :not(caption) > * > * {\n  padding: 0.25rem 0.25rem;\n}\n\n.table-bordered > :not(caption) > * {\n  border-width: 1px 0;\n}\n\n.table-bordered > :not(caption) > * > * {\n  border-width: 0 1px;\n}\n\n.table-borderless > :not(caption) > * > * {\n  border-bottom-width: 0;\n}\n\n.table-borderless > :not(:first-child) {\n  border-top-width: 0;\n}\n\n.table-striped > tbody > tr:nth-of-type(odd) > * {\n  --bs-table-accent-bg: var(--bs-table-striped-bg);\n  color: var(--bs-table-striped-color);\n}\n\n.table-active {\n  --bs-table-accent-bg: var(--bs-table-active-bg);\n  color: var(--bs-table-active-color);\n}\n\n.table-hover > tbody > tr:hover > * {\n  --bs-table-accent-bg: var(--bs-table-hover-bg);\n  color: var(--bs-table-hover-color);\n}\n\n.table-primary {\n  --bs-table-bg: #d3eafd;\n  --bs-table-striped-bg: #c8def0;\n  --bs-table-striped-color: #000;\n  --bs-table-active-bg: #bed3e4;\n  --bs-table-active-color: #000;\n  --bs-table-hover-bg: #c3d8ea;\n  --bs-table-hover-color: #000;\n  color: #000;\n  border-color: #bed3e4;\n}\n\n.table-secondary {\n  --bs-table-bg: white;\n  --bs-table-striped-bg: #f2f2f2;\n  --bs-table-striped-color: #000;\n  --bs-table-active-bg: #e6e6e6;\n  --bs-table-active-color: #000;\n  --bs-table-hover-bg: #ececec;\n  --bs-table-hover-color: #000;\n  color: #000;\n  border-color: #e6e6e6;\n}\n\n.table-success {\n  --bs-table-bg: #dbefdc;\n  --bs-table-striped-bg: #d0e3d1;\n  --bs-table-striped-color: #000;\n  --bs-table-active-bg: #c5d7c6;\n  --bs-table-active-color: #000;\n  --bs-table-hover-bg: #cbddcc;\n  --bs-table-hover-color: #000;\n  color: #000;\n  border-color: #c5d7c6;\n}\n\n.table-info {\n  --bs-table-bg: #ebd4ef;\n  --bs-table-striped-bg: #dfc9e3;\n  --bs-table-striped-color: #000;\n  --bs-table-active-bg: #d4bfd7;\n  --bs-table-active-color: #000;\n  --bs-table-hover-bg: #d9c4dd;\n  --bs-table-hover-color: #000;\n  color: #000;\n  border-color: #d4bfd7;\n}\n\n.table-warning {\n  --bs-table-bg: #ffeacc;\n  --bs-table-striped-bg: #f2dec2;\n  --bs-table-striped-color: #000;\n  --bs-table-active-bg: #e6d3b8;\n  --bs-table-active-color: #000;\n  --bs-table-hover-bg: #ecd8bd;\n  --bs-table-hover-color: #000;\n  color: #000;\n  border-color: #e6d3b8;\n}\n\n.table-danger {\n  --bs-table-bg: #fad2d3;\n  --bs-table-striped-bg: #eec8c8;\n  --bs-table-striped-color: #000;\n  --bs-table-active-bg: #e1bdbe;\n  --bs-table-active-color: #000;\n  --bs-table-hover-bg: #e7c2c3;\n  --bs-table-hover-color: #000;\n  color: #000;\n  border-color: #e1bdbe;\n}\n\n.table-light {\n  --bs-table-bg: #f8f9fa;\n  --bs-table-striped-bg: #ecedee;\n  --bs-table-striped-color: #000;\n  --bs-table-active-bg: #dfe0e1;\n  --bs-table-active-color: #000;\n  --bs-table-hover-bg: #e5e6e7;\n  --bs-table-hover-color: #000;\n  color: #000;\n  border-color: #dfe0e1;\n}\n\n.table-dark {\n  --bs-table-bg: #222;\n  --bs-table-striped-bg: #2d2d2d;\n  --bs-table-striped-color: #fff;\n  --bs-table-active-bg: #383838;\n  --bs-table-active-color: #fff;\n  --bs-table-hover-bg: #333333;\n  --bs-table-hover-color: #fff;\n  color: #fff;\n  border-color: #383838;\n}\n\n.table-responsive {\n  overflow-x: auto;\n  -webkit-overflow-scrolling: touch;\n}\n\n@media (max-width: 575.98px) {\n  .table-responsive-sm {\n    overflow-x: auto;\n    -webkit-overflow-scrolling: touch;\n  }\n}\n\n@media (max-width: 767.98px) {\n  .table-responsive-md {\n    overflow-x: auto;\n    -webkit-overflow-scrolling: touch;\n  }\n}\n\n@media (max-width: 991.98px) {\n  .table-responsive-lg {\n    overflow-x: auto;\n    -webkit-overflow-scrolling: touch;\n  }\n}\n\n@media (max-width: 1199.98px) {\n  .table-responsive-xl {\n    overflow-x: auto;\n    -webkit-overflow-scrolling: touch;\n  }\n}\n\n@media (max-width: 1399.98px) {\n  .table-responsive-xxl {\n    overflow-x: auto;\n    -webkit-overflow-scrolling: touch;\n  }\n}\n\n.form-label {\n  margin-bottom: 0.5rem;\n}\n\n.col-form-label {\n  padding-top: 1rem;\n  padding-bottom: 1rem;\n  margin-bottom: 0;\n  font-size: inherit;\n  line-height: 1.5;\n}\n\n.col-form-label-lg {\n  padding-top: 1.25rem;\n  padding-bottom: 1.25rem;\n  font-size: 1.25rem;\n}\n\n.col-form-label-sm {\n  padding-top: 0;\n  padding-bottom: 0;\n  font-size: 0.875rem;\n}\n\n.form-text {\n  margin-top: 0.25rem;\n  font-size: 0.875em;\n  color: #666;\n}\n\n.form-control {\n  display: block;\n  width: 100%;\n  padding: 1rem 0;\n  font-size: 1rem;\n  font-weight: 400;\n  line-height: 1.5;\n  color: #666;\n  background-color: transparent;\n  background-clip: padding-box;\n  border: 0 solid transparent;\n  -webkit-appearance: none;\n  -moz-appearance: none;\n  appearance: none;\n  border-radius: 0;\n  transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .form-control {\n    transition: none;\n  }\n}\n\n.form-control[type=\"file\"] {\n  overflow: hidden;\n}\n\n.form-control[type=\"file\"]:not(:disabled):not([readonly]) {\n  cursor: pointer;\n}\n\n.form-control:focus {\n  color: #666;\n  background-color: transparent;\n  border-color: #90cbf9;\n  outline: 0;\n  box-shadow: 0 0 0 0.25rem rgba(33, 150, 243, 0.25);\n}\n\n.form-control::-webkit-date-and-time-value {\n  height: 1.5em;\n}\n\n.form-control::-webkit-input-placeholder {\n  color: rgba(0, 0, 0, 0.4);\n  opacity: 1;\n}\n\n.form-control::-moz-placeholder {\n  color: rgba(0, 0, 0, 0.4);\n  opacity: 1;\n}\n\n.form-control:-ms-input-placeholder {\n  color: rgba(0, 0, 0, 0.4);\n  opacity: 1;\n}\n\n.form-control::-ms-input-placeholder {\n  color: rgba(0, 0, 0, 0.4);\n  opacity: 1;\n}\n\n.form-control::placeholder {\n  color: rgba(0, 0, 0, 0.4);\n  opacity: 1;\n}\n\n.form-control:disabled, .form-control[readonly] {\n  background-color: transparent;\n  opacity: 1;\n}\n\n.form-control::file-selector-button {\n  padding: 1rem 0;\n  margin: -1rem 0;\n  -webkit-margin-end: 0;\n  -moz-margin-end: 0;\n  margin-inline-end: 0;\n  color: #666;\n  background-color: transparent;\n  background-image: var(--bs-gradient);\n  pointer-events: none;\n  border-color: inherit;\n  border-style: solid;\n  border-width: 0;\n  border-inline-end-width: 0;\n  border-radius: 0;\n  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .form-control::file-selector-button {\n    transition: none;\n  }\n}\n\n.form-control:hover:not(:disabled):not([readonly])::file-selector-button {\n  background-color: rgba(0, 0, 0, 0.05);\n}\n\n.form-control::-webkit-file-upload-button {\n  padding: 1rem 0;\n  margin: -1rem 0;\n  -webkit-margin-end: 0;\n  margin-inline-end: 0;\n  color: #666;\n  background-color: transparent;\n  background-image: var(--bs-gradient);\n  pointer-events: none;\n  border-color: inherit;\n  border-style: solid;\n  border-width: 0;\n  border-inline-end-width: 0;\n  border-radius: 0;\n  -webkit-transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .form-control::-webkit-file-upload-button {\n    -webkit-transition: none;\n    transition: none;\n  }\n}\n\n.form-control:hover:not(:disabled):not([readonly])::-webkit-file-upload-button {\n  background-color: rgba(0, 0, 0, 0.05);\n}\n\n.form-control-plaintext {\n  display: block;\n  width: 100%;\n  padding: 1rem 0;\n  margin-bottom: 0;\n  line-height: 1.5;\n  color: #444;\n  background-color: transparent;\n  border: solid transparent;\n  border-width: 0 0;\n}\n\n.form-control-plaintext.form-control-sm, .form-control-plaintext.form-control-lg {\n  padding-right: 0;\n  padding-left: 0;\n}\n\n.form-control-sm {\n  min-height: 1.5em;\n  padding: 0 0;\n  font-size: 0.875rem;\n  border-radius: 0;\n}\n\n.form-control-sm::file-selector-button {\n  padding: 0 0;\n  margin: 0 0;\n  -webkit-margin-end: 0;\n  -moz-margin-end: 0;\n  margin-inline-end: 0;\n}\n\n.form-control-sm::-webkit-file-upload-button {\n  padding: 0 0;\n  margin: 0 0;\n  -webkit-margin-end: 0;\n  margin-inline-end: 0;\n}\n\n.form-control-lg {\n  min-height: calc(1.5em + 2.5rem);\n  padding: 1.25rem 0;\n  font-size: 1.25rem;\n  border-radius: 0;\n}\n\n.form-control-lg::file-selector-button {\n  padding: 1.25rem 0;\n  margin: -1.25rem 0;\n  -webkit-margin-end: 0;\n  -moz-margin-end: 0;\n  margin-inline-end: 0;\n}\n\n.form-control-lg::-webkit-file-upload-button {\n  padding: 1.25rem 0;\n  margin: -1.25rem 0;\n  -webkit-margin-end: 0;\n  margin-inline-end: 0;\n}\n\ntextarea.form-control {\n  min-height: calc(1.5em + 2rem);\n}\n\ntextarea.form-control-sm {\n  min-height: 1.5em;\n}\n\ntextarea.form-control-lg {\n  min-height: calc(1.5em + 2.5rem);\n}\n\n.form-control-color {\n  width: 3rem;\n  height: auto;\n  padding: 1rem;\n}\n\n.form-control-color:not(:disabled):not([readonly]) {\n  cursor: pointer;\n}\n\n.form-control-color::-moz-color-swatch {\n  height: 1.5em;\n  border-radius: 0;\n}\n\n.form-control-color::-webkit-color-swatch {\n  height: 1.5em;\n  border-radius: 0;\n}\n\n.form-select {\n  display: block;\n  width: 100%;\n  padding: 1rem 0 1rem 0;\n  -moz-padding-start: -3px;\n  font-size: 1rem;\n  font-weight: 400;\n  line-height: 1.5;\n  color: #666;\n  background-color: transparent;\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23222' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e\");\n  background-repeat: no-repeat;\n  background-position: right 0 center;\n  background-size: 16px 12px;\n  border: 0 solid transparent;\n  border-radius: 0;\n  transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n  -webkit-appearance: none;\n  -moz-appearance: none;\n  appearance: none;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .form-select {\n    transition: none;\n  }\n}\n\n.form-select:focus {\n  border-color: #90cbf9;\n  outline: 0;\n  box-shadow: 0 0 0 0.25rem rgba(33, 150, 243, 0.25);\n}\n\n.form-select[multiple], .form-select[size]:not([size=\"1\"]) {\n  padding-right: 0;\n  background-image: none;\n}\n\n.form-select:disabled {\n  background-color: #eee;\n}\n\n.form-select:-moz-focusring {\n  color: transparent;\n  text-shadow: 0 0 0 #666;\n}\n\n.form-select-sm {\n  padding-top: 0;\n  padding-bottom: 0;\n  padding-left: 0;\n  font-size: 0.875rem;\n  border-radius: 0;\n}\n\n.form-select-lg {\n  padding-top: 1.25rem;\n  padding-bottom: 1.25rem;\n  padding-left: 0;\n  font-size: 1.25rem;\n  border-radius: 0;\n}\n\n.form-check {\n  display: block;\n  min-height: 1.5rem;\n  padding-left: 1.5em;\n  margin-bottom: 0.125rem;\n}\n\n.form-check .form-check-input {\n  float: left;\n  margin-left: -1.5em;\n}\n\n.form-check-input {\n  width: 1em;\n  height: 1em;\n  margin-top: 0.25em;\n  vertical-align: top;\n  background-color: transparent;\n  background-repeat: no-repeat;\n  background-position: center;\n  background-size: contain;\n  border: 1px solid rgba(0, 0, 0, 0.25);\n  -webkit-appearance: none;\n  -moz-appearance: none;\n  appearance: none;\n  -webkit-print-color-adjust: exact;\n  color-adjust: exact;\n}\n\n.form-check-input[type=\"checkbox\"] {\n  border-radius: 0.25em;\n}\n\n.form-check-input[type=\"radio\"] {\n  border-radius: 50%;\n}\n\n.form-check-input:active {\n  -webkit-filter: brightness(90%);\n  filter: brightness(90%);\n}\n\n.form-check-input:focus {\n  border-color: #90cbf9;\n  outline: 0;\n  box-shadow: 0 0 0 0.25rem rgba(33, 150, 243, 0.25);\n}\n\n.form-check-input:checked {\n  background-color: #2196f3;\n  border-color: #2196f3;\n}\n\n.form-check-input:checked[type=\"checkbox\"] {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10l3 3l6-6'/%3e%3c/svg%3e\"), var(--bs-gradient);\n}\n\n.form-check-input:checked[type=\"radio\"] {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='2' fill='%23fff'/%3e%3c/svg%3e\"), var(--bs-gradient);\n}\n\n.form-check-input[type=\"checkbox\"]:indeterminate {\n  background-color: #2196f3;\n  border-color: #2196f3;\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10h8'/%3e%3c/svg%3e\"), var(--bs-gradient);\n}\n\n.form-check-input:disabled {\n  pointer-events: none;\n  -webkit-filter: none;\n  filter: none;\n  opacity: 0.5;\n}\n\n.form-check-input[disabled] ~ .form-check-label, .form-check-input:disabled ~ .form-check-label {\n  opacity: 0.5;\n}\n\n.form-switch {\n  padding-left: 2.5em;\n}\n\n.form-switch .form-check-input {\n  width: 2em;\n  margin-left: -2.5em;\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%280, 0, 0, 0.25%29'/%3e%3c/svg%3e\");\n  background-position: left center;\n  border-radius: 2em;\n  transition: background-position 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .form-switch .form-check-input {\n    transition: none;\n  }\n}\n\n.form-switch .form-check-input:focus {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%2390cbf9'/%3e%3c/svg%3e\");\n}\n\n.form-switch .form-check-input:checked {\n  background-position: right center;\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e\"), var(--bs-gradient);\n}\n\n.form-check-inline {\n  display: inline-block;\n  margin-right: 1rem;\n}\n\n.btn-check {\n  position: absolute;\n  clip: rect(0, 0, 0, 0);\n  pointer-events: none;\n}\n\n.btn-check[disabled] + .btn, .btn-check:disabled + .btn {\n  pointer-events: none;\n  -webkit-filter: none;\n  filter: none;\n  opacity: 0.65;\n}\n\n.form-range {\n  width: 100%;\n  height: 1.5rem;\n  padding: 0;\n  background-color: transparent;\n  -webkit-appearance: none;\n  -moz-appearance: none;\n  appearance: none;\n}\n\n.form-range:focus {\n  outline: 0;\n}\n\n.form-range:focus::-webkit-slider-thumb {\n  box-shadow: 0 0 0 1px #fff, 0 0 0 0.25rem rgba(33, 150, 243, 0.25);\n}\n\n.form-range:focus::-moz-range-thumb {\n  box-shadow: 0 0 0 1px #fff, 0 0 0 0.25rem rgba(33, 150, 243, 0.25);\n}\n\n.form-range::-moz-focus-outer {\n  border: 0;\n}\n\n.form-range::-webkit-slider-thumb {\n  width: 1rem;\n  height: 1rem;\n  margin-top: -0.25rem;\n  background-color: #2196f3;\n  background-image: var(--bs-gradient);\n  border: 0;\n  border-radius: 1rem;\n  -webkit-transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n  transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n  -webkit-appearance: none;\n  appearance: none;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .form-range::-webkit-slider-thumb {\n    -webkit-transition: none;\n    transition: none;\n  }\n}\n\n.form-range::-webkit-slider-thumb:active {\n  background-color: #bce0fb;\n  background-image: var(--bs-gradient);\n}\n\n.form-range::-webkit-slider-runnable-track {\n  width: 100%;\n  height: 0.5rem;\n  color: transparent;\n  cursor: pointer;\n  background-color: #dee2e6;\n  border-color: transparent;\n  border-radius: 1rem;\n}\n\n.form-range::-moz-range-thumb {\n  width: 1rem;\n  height: 1rem;\n  background-color: #2196f3;\n  background-image: var(--bs-gradient);\n  border: 0;\n  border-radius: 1rem;\n  -moz-transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n  transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n  -moz-appearance: none;\n  appearance: none;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .form-range::-moz-range-thumb {\n    -moz-transition: none;\n    transition: none;\n  }\n}\n\n.form-range::-moz-range-thumb:active {\n  background-color: #bce0fb;\n  background-image: var(--bs-gradient);\n}\n\n.form-range::-moz-range-track {\n  width: 100%;\n  height: 0.5rem;\n  color: transparent;\n  cursor: pointer;\n  background-color: #dee2e6;\n  border-color: transparent;\n  border-radius: 1rem;\n}\n\n.form-range:disabled {\n  pointer-events: none;\n}\n\n.form-range:disabled::-webkit-slider-thumb {\n  background-color: #bbb;\n}\n\n.form-range:disabled::-moz-range-thumb {\n  background-color: #bbb;\n}\n\n.form-floating {\n  position: relative;\n}\n\n.form-floating > .form-control,\n.form-floating > .form-select {\n  height: 3.5rem;\n  line-height: 1.25;\n}\n\n.form-floating > label {\n  position: absolute;\n  top: 0;\n  left: 0;\n  height: 100%;\n  padding: 1rem 0;\n  pointer-events: none;\n  border: 0 solid transparent;\n  -webkit-transform-origin: 0 0;\n  transform-origin: 0 0;\n  transition: opacity 0.1s ease-in-out, -webkit-transform 0.1s ease-in-out;\n  transition: opacity 0.1s ease-in-out, transform 0.1s ease-in-out;\n  transition: opacity 0.1s ease-in-out, transform 0.1s ease-in-out, -webkit-transform 0.1s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .form-floating > label {\n    transition: none;\n  }\n}\n\n.form-floating > .form-control {\n  padding: 1rem 0;\n}\n\n.form-floating > .form-control::-webkit-input-placeholder {\n  color: transparent;\n}\n\n.form-floating > .form-control::-moz-placeholder {\n  color: transparent;\n}\n\n.form-floating > .form-control:-ms-input-placeholder {\n  color: transparent;\n}\n\n.form-floating > .form-control::-ms-input-placeholder {\n  color: transparent;\n}\n\n.form-floating > .form-control::placeholder {\n  color: transparent;\n}\n\n.form-floating > .form-control:not(:-moz-placeholder-shown) {\n  padding-top: 1.625rem;\n  padding-bottom: 0.625rem;\n}\n\n.form-floating > .form-control:not(:-ms-input-placeholder) {\n  padding-top: 1.625rem;\n  padding-bottom: 0.625rem;\n}\n\n.form-floating > .form-control:focus, .form-floating > .form-control:not(:placeholder-shown) {\n  padding-top: 1.625rem;\n  padding-bottom: 0.625rem;\n}\n\n.form-floating > .form-control:-webkit-autofill {\n  padding-top: 1.625rem;\n  padding-bottom: 0.625rem;\n}\n\n.form-floating > .form-select {\n  padding-top: 1.625rem;\n  padding-bottom: 0.625rem;\n}\n\n.form-floating > .form-control:not(:-moz-placeholder-shown) ~ label {\n  opacity: 0.65;\n  transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);\n}\n\n.form-floating > .form-control:not(:-ms-input-placeholder) ~ label {\n  opacity: 0.65;\n  transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);\n}\n\n.form-floating > .form-control:focus ~ label,\n.form-floating > .form-control:not(:placeholder-shown) ~ label,\n.form-floating > .form-select ~ label {\n  opacity: 0.65;\n  -webkit-transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);\n  transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);\n}\n\n.form-floating > .form-control:-webkit-autofill ~ label {\n  opacity: 0.65;\n  -webkit-transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);\n  transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);\n}\n\n.input-group {\n  position: relative;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n  flex-wrap: wrap;\n  -ms-flex-align: stretch;\n  align-items: stretch;\n  width: 100%;\n}\n\n.input-group > .form-control,\n.input-group > .form-select {\n  position: relative;\n  -ms-flex: 1 1 auto;\n  flex: 1 1 auto;\n  width: 1%;\n  min-width: 0;\n}\n\n.input-group > .form-control:focus,\n.input-group > .form-select:focus {\n  z-index: 3;\n}\n\n.input-group .btn {\n  position: relative;\n  z-index: 2;\n}\n\n.input-group .btn:focus {\n  z-index: 3;\n}\n\n.input-group-text {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-align: center;\n  align-items: center;\n  padding: 1rem 0;\n  font-size: 1rem;\n  font-weight: 400;\n  line-height: 1.5;\n  color: #666;\n  text-align: center;\n  white-space: nowrap;\n  background-color: transparent;\n  border: 0 solid transparent;\n  border-radius: 0;\n}\n\n.input-group-lg > .form-control,\n.input-group-lg > .form-select,\n.input-group-lg > .input-group-text,\n.input-group-lg > .btn {\n  padding: 1.25rem 0;\n  font-size: 1.25rem;\n  border-radius: 0;\n}\n\n.input-group-sm > .form-control,\n.input-group-sm > .form-select,\n.input-group-sm > .input-group-text,\n.input-group-sm > .btn {\n  padding: 0 0;\n  font-size: 0.875rem;\n  border-radius: 0;\n}\n\n.input-group-lg > .form-select,\n.input-group-sm > .form-select {\n  padding-right: 0;\n}\n\n.input-group:not(.has-validation) > :not(:last-child):not(.dropdown-toggle):not(.dropdown-menu),\n.input-group:not(.has-validation) > .dropdown-toggle:nth-last-child(n + 3) {\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n}\n\n.input-group.has-validation > :nth-last-child(n + 3):not(.dropdown-toggle):not(.dropdown-menu),\n.input-group.has-validation > .dropdown-toggle:nth-last-child(n + 4) {\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n}\n\n.input-group > :not(:first-child):not(.dropdown-menu):not(.valid-tooltip):not(.valid-feedback):not(.invalid-tooltip):not(.invalid-feedback) {\n  margin-left: 0;\n  border-top-left-radius: 0;\n  border-bottom-left-radius: 0;\n}\n\n.valid-feedback {\n  display: none;\n  width: 100%;\n  margin-top: 0.25rem;\n  font-size: 0.875em;\n  color: #4caf50;\n}\n\n.valid-tooltip {\n  position: absolute;\n  top: 100%;\n  z-index: 5;\n  display: none;\n  max-width: 100%;\n  padding: 0.25rem 0.5rem;\n  margin-top: .1rem;\n  font-size: 0.875rem;\n  color: #fff;\n  background-color: rgba(76, 175, 80, 0.9);\n  border-radius: 0.25rem;\n}\n\n.was-validated :valid ~ .valid-feedback,\n.was-validated :valid ~ .valid-tooltip,\n.is-valid ~ .valid-feedback,\n.is-valid ~ .valid-tooltip {\n  display: block;\n}\n\n.was-validated .form-control:valid, .form-control.is-valid {\n  border-color: #4caf50;\n  padding-right: calc(1.5em + 2rem);\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%234caf50' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e\");\n  background-repeat: no-repeat;\n  background-position: right calc(0.375em + 0.5rem) center;\n  background-size: calc(0.75em + 1rem) calc(0.75em + 1rem);\n}\n\n.was-validated .form-control:valid:focus, .form-control.is-valid:focus {\n  border-color: #4caf50;\n  box-shadow: 0 0 0 0.25rem rgba(76, 175, 80, 0.25);\n}\n\n.was-validated textarea.form-control:valid, textarea.form-control.is-valid {\n  padding-right: calc(1.5em + 2rem);\n  background-position: top calc(0.375em + 0.5rem) right calc(0.375em + 0.5rem);\n}\n\n.was-validated .form-select:valid, .form-select.is-valid {\n  border-color: #4caf50;\n}\n\n.was-validated .form-select:valid:not([multiple]):not([size]), .was-validated .form-select:valid:not([multiple])[size=\"1\"], .form-select.is-valid:not([multiple]):not([size]), .form-select.is-valid:not([multiple])[size=\"1\"] {\n  padding-right: 0;\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23222' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e\"), url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%234caf50' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e\");\n  background-position: right 0 center, center right 0;\n  background-size: 16px 12px, calc(0.75em + 1rem) calc(0.75em + 1rem);\n}\n\n.was-validated .form-select:valid:focus, .form-select.is-valid:focus {\n  border-color: #4caf50;\n  box-shadow: 0 0 0 0.25rem rgba(76, 175, 80, 0.25);\n}\n\n.was-validated .form-check-input:valid, .form-check-input.is-valid {\n  border-color: #4caf50;\n}\n\n.was-validated .form-check-input:valid:checked, .form-check-input.is-valid:checked {\n  background-color: #4caf50;\n}\n\n.was-validated .form-check-input:valid:focus, .form-check-input.is-valid:focus {\n  box-shadow: 0 0 0 0.25rem rgba(76, 175, 80, 0.25);\n}\n\n.was-validated .form-check-input:valid ~ .form-check-label, .form-check-input.is-valid ~ .form-check-label {\n  color: #4caf50;\n}\n\n.form-check-inline .form-check-input ~ .valid-feedback {\n  margin-left: .5em;\n}\n\n.was-validated .input-group .form-control:valid, .input-group .form-control.is-valid, .was-validated\n.input-group .form-select:valid,\n.input-group .form-select.is-valid {\n  z-index: 1;\n}\n\n.was-validated .input-group .form-control:valid:focus, .input-group .form-control.is-valid:focus, .was-validated\n.input-group .form-select:valid:focus,\n.input-group .form-select.is-valid:focus {\n  z-index: 3;\n}\n\n.invalid-feedback {\n  display: none;\n  width: 100%;\n  margin-top: 0.25rem;\n  font-size: 0.875em;\n  color: #e51c23;\n}\n\n.invalid-tooltip {\n  position: absolute;\n  top: 100%;\n  z-index: 5;\n  display: none;\n  max-width: 100%;\n  padding: 0.25rem 0.5rem;\n  margin-top: .1rem;\n  font-size: 0.875rem;\n  color: #fff;\n  background-color: rgba(229, 28, 35, 0.9);\n  border-radius: 0.25rem;\n}\n\n.was-validated :invalid ~ .invalid-feedback,\n.was-validated :invalid ~ .invalid-tooltip,\n.is-invalid ~ .invalid-feedback,\n.is-invalid ~ .invalid-tooltip {\n  display: block;\n}\n\n.was-validated .form-control:invalid, .form-control.is-invalid {\n  border-color: #e51c23;\n  padding-right: calc(1.5em + 2rem);\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23e51c23'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23e51c23' stroke='none'/%3e%3c/svg%3e\");\n  background-repeat: no-repeat;\n  background-position: right calc(0.375em + 0.5rem) center;\n  background-size: calc(0.75em + 1rem) calc(0.75em + 1rem);\n}\n\n.was-validated .form-control:invalid:focus, .form-control.is-invalid:focus {\n  border-color: #e51c23;\n  box-shadow: 0 0 0 0.25rem rgba(229, 28, 35, 0.25);\n}\n\n.was-validated textarea.form-control:invalid, textarea.form-control.is-invalid {\n  padding-right: calc(1.5em + 2rem);\n  background-position: top calc(0.375em + 0.5rem) right calc(0.375em + 0.5rem);\n}\n\n.was-validated .form-select:invalid, .form-select.is-invalid {\n  border-color: #e51c23;\n}\n\n.was-validated .form-select:invalid:not([multiple]):not([size]), .was-validated .form-select:invalid:not([multiple])[size=\"1\"], .form-select.is-invalid:not([multiple]):not([size]), .form-select.is-invalid:not([multiple])[size=\"1\"] {\n  padding-right: 0;\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23222' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e\"), url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23e51c23'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23e51c23' stroke='none'/%3e%3c/svg%3e\");\n  background-position: right 0 center, center right 0;\n  background-size: 16px 12px, calc(0.75em + 1rem) calc(0.75em + 1rem);\n}\n\n.was-validated .form-select:invalid:focus, .form-select.is-invalid:focus {\n  border-color: #e51c23;\n  box-shadow: 0 0 0 0.25rem rgba(229, 28, 35, 0.25);\n}\n\n.was-validated .form-check-input:invalid, .form-check-input.is-invalid {\n  border-color: #e51c23;\n}\n\n.was-validated .form-check-input:invalid:checked, .form-check-input.is-invalid:checked {\n  background-color: #e51c23;\n}\n\n.was-validated .form-check-input:invalid:focus, .form-check-input.is-invalid:focus {\n  box-shadow: 0 0 0 0.25rem rgba(229, 28, 35, 0.25);\n}\n\n.was-validated .form-check-input:invalid ~ .form-check-label, .form-check-input.is-invalid ~ .form-check-label {\n  color: #e51c23;\n}\n\n.form-check-inline .form-check-input ~ .invalid-feedback {\n  margin-left: .5em;\n}\n\n.was-validated .input-group .form-control:invalid, .input-group .form-control.is-invalid, .was-validated\n.input-group .form-select:invalid,\n.input-group .form-select.is-invalid {\n  z-index: 2;\n}\n\n.was-validated .input-group .form-control:invalid:focus, .input-group .form-control.is-invalid:focus, .was-validated\n.input-group .form-select:invalid:focus,\n.input-group .form-select.is-invalid:focus {\n  z-index: 3;\n}\n\n.btn {\n  display: inline-block;\n  font-weight: 400;\n  line-height: 1.5;\n  color: #444;\n  text-align: center;\n  text-decoration: none;\n  vertical-align: middle;\n  cursor: pointer;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  user-select: none;\n  background-color: transparent;\n  border: 1px solid transparent;\n  padding: 0.8rem 1rem;\n  font-size: 1rem;\n  border-radius: 0.25rem;\n  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .btn {\n    transition: none;\n  }\n}\n\n.btn:hover {\n  color: #444;\n}\n\n.btn-check:focus + .btn, .btn:focus {\n  outline: 0;\n  box-shadow: 0 0 0 0.25rem rgba(33, 150, 243, 0.25);\n}\n\n.btn:disabled, .btn.disabled,\nfieldset:disabled .btn {\n  pointer-events: none;\n  opacity: 0.65;\n}\n\n.btn-primary {\n  color: #fff;\n  background-color: #2196f3;\n  background-image: var(--bs-gradient);\n  border-color: #2196f3;\n}\n\n.btn-primary:hover {\n  color: #fff;\n  background-color: #1c80cf;\n  background-image: var(--bs-gradient);\n  border-color: #1a78c2;\n}\n\n.btn-check:focus + .btn-primary, .btn-primary:focus {\n  color: #fff;\n  background-color: #1c80cf;\n  background-image: var(--bs-gradient);\n  border-color: #1a78c2;\n  box-shadow: 0 0 0 0.25rem rgba(66, 166, 245, 0.5);\n}\n\n.btn-check:checked + .btn-primary,\n.btn-check:active + .btn-primary, .btn-primary:active, .btn-primary.active,\n.show > .btn-primary.dropdown-toggle {\n  color: #fff;\n  background-color: #1a78c2;\n  background-image: none;\n  border-color: #1971b6;\n}\n\n.btn-check:checked + .btn-primary:focus,\n.btn-check:active + .btn-primary:focus, .btn-primary:active:focus, .btn-primary.active:focus,\n.show > .btn-primary.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.25rem rgba(66, 166, 245, 0.5);\n}\n\n.btn-primary:disabled, .btn-primary.disabled {\n  color: #fff;\n  background-color: #2196f3;\n  background-image: none;\n  border-color: #2196f3;\n}\n\n.btn-secondary {\n  color: #000;\n  background-color: #fff;\n  background-image: var(--bs-gradient);\n  border-color: #fff;\n}\n\n.btn-secondary:hover {\n  color: #000;\n  background-color: white;\n  background-image: var(--bs-gradient);\n  border-color: white;\n}\n\n.btn-check:focus + .btn-secondary, .btn-secondary:focus {\n  color: #000;\n  background-color: white;\n  background-image: var(--bs-gradient);\n  border-color: white;\n  box-shadow: 0 0 0 0.25rem rgba(217, 217, 217, 0.5);\n}\n\n.btn-check:checked + .btn-secondary,\n.btn-check:active + .btn-secondary, .btn-secondary:active, .btn-secondary.active,\n.show > .btn-secondary.dropdown-toggle {\n  color: #000;\n  background-color: white;\n  background-image: none;\n  border-color: white;\n}\n\n.btn-check:checked + .btn-secondary:focus,\n.btn-check:active + .btn-secondary:focus, .btn-secondary:active:focus, .btn-secondary.active:focus,\n.show > .btn-secondary.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.25rem rgba(217, 217, 217, 0.5);\n}\n\n.btn-secondary:disabled, .btn-secondary.disabled {\n  color: #000;\n  background-color: #fff;\n  background-image: none;\n  border-color: #fff;\n}\n\n.btn-success {\n  color: #fff;\n  background-color: #4caf50;\n  background-image: var(--bs-gradient);\n  border-color: #4caf50;\n}\n\n.btn-success:hover {\n  color: #fff;\n  background-color: #419544;\n  background-image: var(--bs-gradient);\n  border-color: #3d8c40;\n}\n\n.btn-check:focus + .btn-success, .btn-success:focus {\n  color: #fff;\n  background-color: #419544;\n  background-image: var(--bs-gradient);\n  border-color: #3d8c40;\n  box-shadow: 0 0 0 0.25rem rgba(103, 187, 106, 0.5);\n}\n\n.btn-check:checked + .btn-success,\n.btn-check:active + .btn-success, .btn-success:active, .btn-success.active,\n.show > .btn-success.dropdown-toggle {\n  color: #fff;\n  background-color: #3d8c40;\n  background-image: none;\n  border-color: #39833c;\n}\n\n.btn-check:checked + .btn-success:focus,\n.btn-check:active + .btn-success:focus, .btn-success:active:focus, .btn-success.active:focus,\n.show > .btn-success.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.25rem rgba(103, 187, 106, 0.5);\n}\n\n.btn-success:disabled, .btn-success.disabled {\n  color: #fff;\n  background-color: #4caf50;\n  background-image: none;\n  border-color: #4caf50;\n}\n\n.btn-info {\n  color: #fff;\n  background-color: #9c27b0;\n  background-image: var(--bs-gradient);\n  border-color: #9c27b0;\n}\n\n.btn-info:hover {\n  color: #fff;\n  background-color: #852196;\n  background-image: var(--bs-gradient);\n  border-color: #7d1f8d;\n}\n\n.btn-check:focus + .btn-info, .btn-info:focus {\n  color: #fff;\n  background-color: #852196;\n  background-image: var(--bs-gradient);\n  border-color: #7d1f8d;\n  box-shadow: 0 0 0 0.25rem rgba(171, 71, 188, 0.5);\n}\n\n.btn-check:checked + .btn-info,\n.btn-check:active + .btn-info, .btn-info:active, .btn-info.active,\n.show > .btn-info.dropdown-toggle {\n  color: #fff;\n  background-color: #7d1f8d;\n  background-image: none;\n  border-color: #751d84;\n}\n\n.btn-check:checked + .btn-info:focus,\n.btn-check:active + .btn-info:focus, .btn-info:active:focus, .btn-info.active:focus,\n.show > .btn-info.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.25rem rgba(171, 71, 188, 0.5);\n}\n\n.btn-info:disabled, .btn-info.disabled {\n  color: #fff;\n  background-color: #9c27b0;\n  background-image: none;\n  border-color: #9c27b0;\n}\n\n.btn-warning {\n  color: #fff;\n  background-color: #ff9800;\n  background-image: var(--bs-gradient);\n  border-color: #ff9800;\n}\n\n.btn-warning:hover {\n  color: #fff;\n  background-color: #d98100;\n  background-image: var(--bs-gradient);\n  border-color: #cc7a00;\n}\n\n.btn-check:focus + .btn-warning, .btn-warning:focus {\n  color: #fff;\n  background-color: #d98100;\n  background-image: var(--bs-gradient);\n  border-color: #cc7a00;\n  box-shadow: 0 0 0 0.25rem rgba(255, 167, 38, 0.5);\n}\n\n.btn-check:checked + .btn-warning,\n.btn-check:active + .btn-warning, .btn-warning:active, .btn-warning.active,\n.show > .btn-warning.dropdown-toggle {\n  color: #fff;\n  background-color: #cc7a00;\n  background-image: none;\n  border-color: #bf7200;\n}\n\n.btn-check:checked + .btn-warning:focus,\n.btn-check:active + .btn-warning:focus, .btn-warning:active:focus, .btn-warning.active:focus,\n.show > .btn-warning.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.25rem rgba(255, 167, 38, 0.5);\n}\n\n.btn-warning:disabled, .btn-warning.disabled {\n  color: #fff;\n  background-color: #ff9800;\n  background-image: none;\n  border-color: #ff9800;\n}\n\n.btn-danger {\n  color: #fff;\n  background-color: #e51c23;\n  background-image: var(--bs-gradient);\n  border-color: #e51c23;\n}\n\n.btn-danger:hover {\n  color: #fff;\n  background-color: #c3181e;\n  background-image: var(--bs-gradient);\n  border-color: #b7161c;\n}\n\n.btn-check:focus + .btn-danger, .btn-danger:focus {\n  color: #fff;\n  background-color: #c3181e;\n  background-image: var(--bs-gradient);\n  border-color: #b7161c;\n  box-shadow: 0 0 0 0.25rem rgba(233, 62, 68, 0.5);\n}\n\n.btn-check:checked + .btn-danger,\n.btn-check:active + .btn-danger, .btn-danger:active, .btn-danger.active,\n.show > .btn-danger.dropdown-toggle {\n  color: #fff;\n  background-color: #b7161c;\n  background-image: none;\n  border-color: #ac151a;\n}\n\n.btn-check:checked + .btn-danger:focus,\n.btn-check:active + .btn-danger:focus, .btn-danger:active:focus, .btn-danger.active:focus,\n.show > .btn-danger.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.25rem rgba(233, 62, 68, 0.5);\n}\n\n.btn-danger:disabled, .btn-danger.disabled {\n  color: #fff;\n  background-color: #e51c23;\n  background-image: none;\n  border-color: #e51c23;\n}\n\n.btn-light {\n  color: #000;\n  background-color: #f8f9fa;\n  background-image: var(--bs-gradient);\n  border-color: #f8f9fa;\n}\n\n.btn-light:hover {\n  color: #000;\n  background-color: #f9fafb;\n  background-image: var(--bs-gradient);\n  border-color: #f9fafb;\n}\n\n.btn-check:focus + .btn-light, .btn-light:focus {\n  color: #000;\n  background-color: #f9fafb;\n  background-image: var(--bs-gradient);\n  border-color: #f9fafb;\n  box-shadow: 0 0 0 0.25rem rgba(211, 212, 213, 0.5);\n}\n\n.btn-check:checked + .btn-light,\n.btn-check:active + .btn-light, .btn-light:active, .btn-light.active,\n.show > .btn-light.dropdown-toggle {\n  color: #000;\n  background-color: #f9fafb;\n  background-image: none;\n  border-color: #f9fafb;\n}\n\n.btn-check:checked + .btn-light:focus,\n.btn-check:active + .btn-light:focus, .btn-light:active:focus, .btn-light.active:focus,\n.show > .btn-light.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.25rem rgba(211, 212, 213, 0.5);\n}\n\n.btn-light:disabled, .btn-light.disabled {\n  color: #000;\n  background-color: #f8f9fa;\n  background-image: none;\n  border-color: #f8f9fa;\n}\n\n.btn-dark {\n  color: #fff;\n  background-color: #222;\n  background-image: var(--bs-gradient);\n  border-color: #222;\n}\n\n.btn-dark:hover {\n  color: #fff;\n  background-color: #1d1d1d;\n  background-image: var(--bs-gradient);\n  border-color: #1b1b1b;\n}\n\n.btn-check:focus + .btn-dark, .btn-dark:focus {\n  color: #fff;\n  background-color: #1d1d1d;\n  background-image: var(--bs-gradient);\n  border-color: #1b1b1b;\n  box-shadow: 0 0 0 0.25rem rgba(67, 67, 67, 0.5);\n}\n\n.btn-check:checked + .btn-dark,\n.btn-check:active + .btn-dark, .btn-dark:active, .btn-dark.active,\n.show > .btn-dark.dropdown-toggle {\n  color: #fff;\n  background-color: #1b1b1b;\n  background-image: none;\n  border-color: #1a1a1a;\n}\n\n.btn-check:checked + .btn-dark:focus,\n.btn-check:active + .btn-dark:focus, .btn-dark:active:focus, .btn-dark.active:focus,\n.show > .btn-dark.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.25rem rgba(67, 67, 67, 0.5);\n}\n\n.btn-dark:disabled, .btn-dark.disabled {\n  color: #fff;\n  background-color: #222;\n  background-image: none;\n  border-color: #222;\n}\n\n.btn-outline-primary {\n  color: #2196f3;\n  border-color: #2196f3;\n}\n\n.btn-outline-primary:hover {\n  color: #fff;\n  background-color: #2196f3;\n  border-color: #2196f3;\n}\n\n.btn-check:focus + .btn-outline-primary, .btn-outline-primary:focus {\n  box-shadow: 0 0 0 0.25rem rgba(33, 150, 243, 0.5);\n}\n\n.btn-check:checked + .btn-outline-primary,\n.btn-check:active + .btn-outline-primary, .btn-outline-primary:active, .btn-outline-primary.active, .btn-outline-primary.dropdown-toggle.show {\n  color: #fff;\n  background-color: #2196f3;\n  border-color: #2196f3;\n}\n\n.btn-check:checked + .btn-outline-primary:focus,\n.btn-check:active + .btn-outline-primary:focus, .btn-outline-primary:active:focus, .btn-outline-primary.active:focus, .btn-outline-primary.dropdown-toggle.show:focus {\n  box-shadow: 0 0 0 0.25rem rgba(33, 150, 243, 0.5);\n}\n\n.btn-outline-primary:disabled, .btn-outline-primary.disabled {\n  color: #2196f3;\n  background-color: transparent;\n}\n\n.btn-outline-secondary {\n  color: #fff;\n  border-color: #fff;\n}\n\n.btn-outline-secondary:hover {\n  color: #000;\n  background-color: #fff;\n  border-color: #fff;\n}\n\n.btn-check:focus + .btn-outline-secondary, .btn-outline-secondary:focus {\n  box-shadow: 0 0 0 0.25rem rgba(255, 255, 255, 0.5);\n}\n\n.btn-check:checked + .btn-outline-secondary,\n.btn-check:active + .btn-outline-secondary, .btn-outline-secondary:active, .btn-outline-secondary.active, .btn-outline-secondary.dropdown-toggle.show {\n  color: #000;\n  background-color: #fff;\n  border-color: #fff;\n}\n\n.btn-check:checked + .btn-outline-secondary:focus,\n.btn-check:active + .btn-outline-secondary:focus, .btn-outline-secondary:active:focus, .btn-outline-secondary.active:focus, .btn-outline-secondary.dropdown-toggle.show:focus {\n  box-shadow: 0 0 0 0.25rem rgba(255, 255, 255, 0.5);\n}\n\n.btn-outline-secondary:disabled, .btn-outline-secondary.disabled {\n  color: #fff;\n  background-color: transparent;\n}\n\n.btn-outline-success {\n  color: #4caf50;\n  border-color: #4caf50;\n}\n\n.btn-outline-success:hover {\n  color: #fff;\n  background-color: #4caf50;\n  border-color: #4caf50;\n}\n\n.btn-check:focus + .btn-outline-success, .btn-outline-success:focus {\n  box-shadow: 0 0 0 0.25rem rgba(76, 175, 80, 0.5);\n}\n\n.btn-check:checked + .btn-outline-success,\n.btn-check:active + .btn-outline-success, .btn-outline-success:active, .btn-outline-success.active, .btn-outline-success.dropdown-toggle.show {\n  color: #fff;\n  background-color: #4caf50;\n  border-color: #4caf50;\n}\n\n.btn-check:checked + .btn-outline-success:focus,\n.btn-check:active + .btn-outline-success:focus, .btn-outline-success:active:focus, .btn-outline-success.active:focus, .btn-outline-success.dropdown-toggle.show:focus {\n  box-shadow: 0 0 0 0.25rem rgba(76, 175, 80, 0.5);\n}\n\n.btn-outline-success:disabled, .btn-outline-success.disabled {\n  color: #4caf50;\n  background-color: transparent;\n}\n\n.btn-outline-info {\n  color: #9c27b0;\n  border-color: #9c27b0;\n}\n\n.btn-outline-info:hover {\n  color: #fff;\n  background-color: #9c27b0;\n  border-color: #9c27b0;\n}\n\n.btn-check:focus + .btn-outline-info, .btn-outline-info:focus {\n  box-shadow: 0 0 0 0.25rem rgba(156, 39, 176, 0.5);\n}\n\n.btn-check:checked + .btn-outline-info,\n.btn-check:active + .btn-outline-info, .btn-outline-info:active, .btn-outline-info.active, .btn-outline-info.dropdown-toggle.show {\n  color: #fff;\n  background-color: #9c27b0;\n  border-color: #9c27b0;\n}\n\n.btn-check:checked + .btn-outline-info:focus,\n.btn-check:active + .btn-outline-info:focus, .btn-outline-info:active:focus, .btn-outline-info.active:focus, .btn-outline-info.dropdown-toggle.show:focus {\n  box-shadow: 0 0 0 0.25rem rgba(156, 39, 176, 0.5);\n}\n\n.btn-outline-info:disabled, .btn-outline-info.disabled {\n  color: #9c27b0;\n  background-color: transparent;\n}\n\n.btn-outline-warning {\n  color: #ff9800;\n  border-color: #ff9800;\n}\n\n.btn-outline-warning:hover {\n  color: #fff;\n  background-color: #ff9800;\n  border-color: #ff9800;\n}\n\n.btn-check:focus + .btn-outline-warning, .btn-outline-warning:focus {\n  box-shadow: 0 0 0 0.25rem rgba(255, 152, 0, 0.5);\n}\n\n.btn-check:checked + .btn-outline-warning,\n.btn-check:active + .btn-outline-warning, .btn-outline-warning:active, .btn-outline-warning.active, .btn-outline-warning.dropdown-toggle.show {\n  color: #fff;\n  background-color: #ff9800;\n  border-color: #ff9800;\n}\n\n.btn-check:checked + .btn-outline-warning:focus,\n.btn-check:active + .btn-outline-warning:focus, .btn-outline-warning:active:focus, .btn-outline-warning.active:focus, .btn-outline-warning.dropdown-toggle.show:focus {\n  box-shadow: 0 0 0 0.25rem rgba(255, 152, 0, 0.5);\n}\n\n.btn-outline-warning:disabled, .btn-outline-warning.disabled {\n  color: #ff9800;\n  background-color: transparent;\n}\n\n.btn-outline-danger {\n  color: #e51c23;\n  border-color: #e51c23;\n}\n\n.btn-outline-danger:hover {\n  color: #fff;\n  background-color: #e51c23;\n  border-color: #e51c23;\n}\n\n.btn-check:focus + .btn-outline-danger, .btn-outline-danger:focus {\n  box-shadow: 0 0 0 0.25rem rgba(229, 28, 35, 0.5);\n}\n\n.btn-check:checked + .btn-outline-danger,\n.btn-check:active + .btn-outline-danger, .btn-outline-danger:active, .btn-outline-danger.active, .btn-outline-danger.dropdown-toggle.show {\n  color: #fff;\n  background-color: #e51c23;\n  border-color: #e51c23;\n}\n\n.btn-check:checked + .btn-outline-danger:focus,\n.btn-check:active + .btn-outline-danger:focus, .btn-outline-danger:active:focus, .btn-outline-danger.active:focus, .btn-outline-danger.dropdown-toggle.show:focus {\n  box-shadow: 0 0 0 0.25rem rgba(229, 28, 35, 0.5);\n}\n\n.btn-outline-danger:disabled, .btn-outline-danger.disabled {\n  color: #e51c23;\n  background-color: transparent;\n}\n\n.btn-outline-light {\n  color: #f8f9fa;\n  border-color: #f8f9fa;\n}\n\n.btn-outline-light:hover {\n  color: #000;\n  background-color: #f8f9fa;\n  border-color: #f8f9fa;\n}\n\n.btn-check:focus + .btn-outline-light, .btn-outline-light:focus {\n  box-shadow: 0 0 0 0.25rem rgba(248, 249, 250, 0.5);\n}\n\n.btn-check:checked + .btn-outline-light,\n.btn-check:active + .btn-outline-light, .btn-outline-light:active, .btn-outline-light.active, .btn-outline-light.dropdown-toggle.show {\n  color: #000;\n  background-color: #f8f9fa;\n  border-color: #f8f9fa;\n}\n\n.btn-check:checked + .btn-outline-light:focus,\n.btn-check:active + .btn-outline-light:focus, .btn-outline-light:active:focus, .btn-outline-light.active:focus, .btn-outline-light.dropdown-toggle.show:focus {\n  box-shadow: 0 0 0 0.25rem rgba(248, 249, 250, 0.5);\n}\n\n.btn-outline-light:disabled, .btn-outline-light.disabled {\n  color: #f8f9fa;\n  background-color: transparent;\n}\n\n.btn-outline-dark {\n  color: #222;\n  border-color: #222;\n}\n\n.btn-outline-dark:hover {\n  color: #fff;\n  background-color: #222;\n  border-color: #222;\n}\n\n.btn-check:focus + .btn-outline-dark, .btn-outline-dark:focus {\n  box-shadow: 0 0 0 0.25rem rgba(34, 34, 34, 0.5);\n}\n\n.btn-check:checked + .btn-outline-dark,\n.btn-check:active + .btn-outline-dark, .btn-outline-dark:active, .btn-outline-dark.active, .btn-outline-dark.dropdown-toggle.show {\n  color: #fff;\n  background-color: #222;\n  border-color: #222;\n}\n\n.btn-check:checked + .btn-outline-dark:focus,\n.btn-check:active + .btn-outline-dark:focus, .btn-outline-dark:active:focus, .btn-outline-dark.active:focus, .btn-outline-dark.dropdown-toggle.show:focus {\n  box-shadow: 0 0 0 0.25rem rgba(34, 34, 34, 0.5);\n}\n\n.btn-outline-dark:disabled, .btn-outline-dark.disabled {\n  color: #222;\n  background-color: transparent;\n}\n\n.btn-link {\n  font-weight: 400;\n  color: #2196f3;\n  text-decoration: underline;\n}\n\n.btn-link:hover {\n  color: #1a78c2;\n}\n\n.btn-link:disabled, .btn-link.disabled {\n  color: #666;\n}\n\n.btn-lg, .btn-group-lg > .btn {\n  padding: 0.5rem 1rem;\n  font-size: 1.25rem;\n  border-radius: 0.3rem;\n}\n\n.btn-sm, .btn-group-sm > .btn {\n  padding: 0.25rem 0.5rem;\n  font-size: 0.875rem;\n  border-radius: 0.2rem;\n}\n\n.fade {\n  transition: opacity 0.15s linear;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .fade {\n    transition: none;\n  }\n}\n\n.fade:not(.show) {\n  opacity: 0;\n}\n\n.collapse:not(.show) {\n  display: none;\n}\n\n.collapsing {\n  height: 0;\n  overflow: hidden;\n  transition: height 0.35s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .collapsing {\n    transition: none;\n  }\n}\n\n.collapsing.collapse-horizontal {\n  width: 0;\n  height: auto;\n  transition: width 0.35s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .collapsing.collapse-horizontal {\n    transition: none;\n  }\n}\n\n.dropup,\n.dropend,\n.dropdown,\n.dropstart {\n  position: relative;\n}\n\n.dropdown-toggle {\n  white-space: nowrap;\n}\n\n.dropdown-toggle::after {\n  display: inline-block;\n  margin-left: 0.255em;\n  vertical-align: 0.255em;\n  content: \"\";\n  border-top: 0.3em solid;\n  border-right: 0.3em solid transparent;\n  border-bottom: 0;\n  border-left: 0.3em solid transparent;\n}\n\n.dropdown-toggle:empty::after {\n  margin-left: 0;\n}\n\n.dropdown-menu {\n  position: absolute;\n  z-index: 1000;\n  display: none;\n  min-width: 10rem;\n  padding: 0.5rem 0;\n  margin: 0;\n  font-size: 1rem;\n  color: #444;\n  text-align: left;\n  list-style: none;\n  background-color: #fff;\n  background-clip: padding-box;\n  border: 1px solid rgba(0, 0, 0, 0.15);\n  border-radius: 0.25rem;\n}\n\n.dropdown-menu[data-bs-popper] {\n  top: 100%;\n  left: 0;\n  margin-top: 0.125rem;\n}\n\n.dropdown-menu-start {\n  --bs-position: start;\n}\n\n.dropdown-menu-start[data-bs-popper] {\n  right: auto;\n  left: 0;\n}\n\n.dropdown-menu-end {\n  --bs-position: end;\n}\n\n.dropdown-menu-end[data-bs-popper] {\n  right: 0;\n  left: auto;\n}\n\n@media (min-width: 576px) {\n  .dropdown-menu-sm-start {\n    --bs-position: start;\n  }\n  .dropdown-menu-sm-start[data-bs-popper] {\n    right: auto;\n    left: 0;\n  }\n  .dropdown-menu-sm-end {\n    --bs-position: end;\n  }\n  .dropdown-menu-sm-end[data-bs-popper] {\n    right: 0;\n    left: auto;\n  }\n}\n\n@media (min-width: 768px) {\n  .dropdown-menu-md-start {\n    --bs-position: start;\n  }\n  .dropdown-menu-md-start[data-bs-popper] {\n    right: auto;\n    left: 0;\n  }\n  .dropdown-menu-md-end {\n    --bs-position: end;\n  }\n  .dropdown-menu-md-end[data-bs-popper] {\n    right: 0;\n    left: auto;\n  }\n}\n\n@media (min-width: 992px) {\n  .dropdown-menu-lg-start {\n    --bs-position: start;\n  }\n  .dropdown-menu-lg-start[data-bs-popper] {\n    right: auto;\n    left: 0;\n  }\n  .dropdown-menu-lg-end {\n    --bs-position: end;\n  }\n  .dropdown-menu-lg-end[data-bs-popper] {\n    right: 0;\n    left: auto;\n  }\n}\n\n@media (min-width: 1200px) {\n  .dropdown-menu-xl-start {\n    --bs-position: start;\n  }\n  .dropdown-menu-xl-start[data-bs-popper] {\n    right: auto;\n    left: 0;\n  }\n  .dropdown-menu-xl-end {\n    --bs-position: end;\n  }\n  .dropdown-menu-xl-end[data-bs-popper] {\n    right: 0;\n    left: auto;\n  }\n}\n\n@media (min-width: 1400px) {\n  .dropdown-menu-xxl-start {\n    --bs-position: start;\n  }\n  .dropdown-menu-xxl-start[data-bs-popper] {\n    right: auto;\n    left: 0;\n  }\n  .dropdown-menu-xxl-end {\n    --bs-position: end;\n  }\n  .dropdown-menu-xxl-end[data-bs-popper] {\n    right: 0;\n    left: auto;\n  }\n}\n\n.dropup .dropdown-menu[data-bs-popper] {\n  top: auto;\n  bottom: 100%;\n  margin-top: 0;\n  margin-bottom: 0.125rem;\n}\n\n.dropup .dropdown-toggle::after {\n  display: inline-block;\n  margin-left: 0.255em;\n  vertical-align: 0.255em;\n  content: \"\";\n  border-top: 0;\n  border-right: 0.3em solid transparent;\n  border-bottom: 0.3em solid;\n  border-left: 0.3em solid transparent;\n}\n\n.dropup .dropdown-toggle:empty::after {\n  margin-left: 0;\n}\n\n.dropend .dropdown-menu[data-bs-popper] {\n  top: 0;\n  right: auto;\n  left: 100%;\n  margin-top: 0;\n  margin-left: 0.125rem;\n}\n\n.dropend .dropdown-toggle::after {\n  display: inline-block;\n  margin-left: 0.255em;\n  vertical-align: 0.255em;\n  content: \"\";\n  border-top: 0.3em solid transparent;\n  border-right: 0;\n  border-bottom: 0.3em solid transparent;\n  border-left: 0.3em solid;\n}\n\n.dropend .dropdown-toggle:empty::after {\n  margin-left: 0;\n}\n\n.dropend .dropdown-toggle::after {\n  vertical-align: 0;\n}\n\n.dropstart .dropdown-menu[data-bs-popper] {\n  top: 0;\n  right: 100%;\n  left: auto;\n  margin-top: 0;\n  margin-right: 0.125rem;\n}\n\n.dropstart .dropdown-toggle::after {\n  display: inline-block;\n  margin-left: 0.255em;\n  vertical-align: 0.255em;\n  content: \"\";\n}\n\n.dropstart .dropdown-toggle::after {\n  display: none;\n}\n\n.dropstart .dropdown-toggle::before {\n  display: inline-block;\n  margin-right: 0.255em;\n  vertical-align: 0.255em;\n  content: \"\";\n  border-top: 0.3em solid transparent;\n  border-right: 0.3em solid;\n  border-bottom: 0.3em solid transparent;\n}\n\n.dropstart .dropdown-toggle:empty::after {\n  margin-left: 0;\n}\n\n.dropstart .dropdown-toggle::before {\n  vertical-align: 0;\n}\n\n.dropdown-divider {\n  height: 0;\n  margin: 0.5rem 0;\n  overflow: hidden;\n  border-top: 1px solid rgba(0, 0, 0, 0.15);\n}\n\n.dropdown-item {\n  display: block;\n  width: 100%;\n  padding: 0.25rem 1rem;\n  clear: both;\n  font-weight: 400;\n  color: #212121;\n  text-align: inherit;\n  text-decoration: none;\n  white-space: nowrap;\n  background-color: transparent;\n  border: 0;\n}\n\n.dropdown-item:hover, .dropdown-item:focus {\n  color: #1e1e1e;\n  background-color: #eee;\n  background-image: var(--bs-gradient);\n}\n\n.dropdown-item.active, .dropdown-item:active {\n  color: #fff;\n  text-decoration: none;\n  background-color: #2196f3;\n  background-image: var(--bs-gradient);\n}\n\n.dropdown-item.disabled, .dropdown-item:disabled {\n  color: #bbb;\n  pointer-events: none;\n  background-color: transparent;\n  background-image: none;\n}\n\n.dropdown-menu.show {\n  display: block;\n}\n\n.dropdown-header {\n  display: block;\n  padding: 0.5rem 1rem;\n  margin-bottom: 0;\n  font-size: 0.875rem;\n  color: #666;\n  white-space: nowrap;\n}\n\n.dropdown-item-text {\n  display: block;\n  padding: 0.25rem 1rem;\n  color: #212121;\n}\n\n.dropdown-menu-dark {\n  color: #dee2e6;\n  background-color: #222;\n  border-color: rgba(0, 0, 0, 0.15);\n}\n\n.dropdown-menu-dark .dropdown-item {\n  color: #dee2e6;\n}\n\n.dropdown-menu-dark .dropdown-item:hover, .dropdown-menu-dark .dropdown-item:focus {\n  color: #fff;\n  background-color: rgba(255, 255, 255, 0.15);\n  background-image: var(--bs-gradient);\n}\n\n.dropdown-menu-dark .dropdown-item.active, .dropdown-menu-dark .dropdown-item:active {\n  color: #fff;\n  background-color: #2196f3;\n  background-image: var(--bs-gradient);\n}\n\n.dropdown-menu-dark .dropdown-item.disabled, .dropdown-menu-dark .dropdown-item:disabled {\n  color: #bbb;\n}\n\n.dropdown-menu-dark .dropdown-divider {\n  border-color: rgba(0, 0, 0, 0.15);\n}\n\n.dropdown-menu-dark .dropdown-item-text {\n  color: #dee2e6;\n}\n\n.dropdown-menu-dark .dropdown-header {\n  color: #bbb;\n}\n\n.btn-group,\n.btn-group-vertical {\n  position: relative;\n  display: -ms-inline-flexbox;\n  display: inline-flex;\n  vertical-align: middle;\n}\n\n.btn-group > .btn,\n.btn-group-vertical > .btn {\n  position: relative;\n  -ms-flex: 1 1 auto;\n  flex: 1 1 auto;\n}\n\n.btn-group > .btn-check:checked + .btn,\n.btn-group > .btn-check:focus + .btn,\n.btn-group > .btn:hover,\n.btn-group > .btn:focus,\n.btn-group > .btn:active,\n.btn-group > .btn.active,\n.btn-group-vertical > .btn-check:checked + .btn,\n.btn-group-vertical > .btn-check:focus + .btn,\n.btn-group-vertical > .btn:hover,\n.btn-group-vertical > .btn:focus,\n.btn-group-vertical > .btn:active,\n.btn-group-vertical > .btn.active {\n  z-index: 1;\n}\n\n.btn-toolbar {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n  flex-wrap: wrap;\n  -ms-flex-pack: start;\n  justify-content: flex-start;\n}\n\n.btn-toolbar .input-group {\n  width: auto;\n}\n\n.btn-group > .btn:not(:first-child),\n.btn-group > .btn-group:not(:first-child) {\n  margin-left: -1px;\n}\n\n.btn-group > .btn:not(:last-child):not(.dropdown-toggle),\n.btn-group > .btn-group:not(:last-child) > .btn {\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n}\n\n.btn-group > .btn:nth-child(n + 3),\n.btn-group > :not(.btn-check) + .btn,\n.btn-group > .btn-group:not(:first-child) > .btn {\n  border-top-left-radius: 0;\n  border-bottom-left-radius: 0;\n}\n\n.dropdown-toggle-split {\n  padding-right: 0.75rem;\n  padding-left: 0.75rem;\n}\n\n.dropdown-toggle-split::after,\n.dropup .dropdown-toggle-split::after,\n.dropend .dropdown-toggle-split::after {\n  margin-left: 0;\n}\n\n.dropstart .dropdown-toggle-split::before {\n  margin-right: 0;\n}\n\n.btn-sm + .dropdown-toggle-split, .btn-group-sm > .btn + .dropdown-toggle-split {\n  padding-right: 0.375rem;\n  padding-left: 0.375rem;\n}\n\n.btn-lg + .dropdown-toggle-split, .btn-group-lg > .btn + .dropdown-toggle-split {\n  padding-right: 0.75rem;\n  padding-left: 0.75rem;\n}\n\n.btn-group-vertical {\n  -ms-flex-direction: column;\n  flex-direction: column;\n  -ms-flex-align: start;\n  align-items: flex-start;\n  -ms-flex-pack: center;\n  justify-content: center;\n}\n\n.btn-group-vertical > .btn,\n.btn-group-vertical > .btn-group {\n  width: 100%;\n}\n\n.btn-group-vertical > .btn:not(:first-child),\n.btn-group-vertical > .btn-group:not(:first-child) {\n  margin-top: -1px;\n}\n\n.btn-group-vertical > .btn:not(:last-child):not(.dropdown-toggle),\n.btn-group-vertical > .btn-group:not(:last-child) > .btn {\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 0;\n}\n\n.btn-group-vertical > .btn ~ .btn,\n.btn-group-vertical > .btn-group:not(:first-child) > .btn {\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n}\n\n.nav {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n  flex-wrap: wrap;\n  padding-left: 0;\n  margin-bottom: 0;\n  list-style: none;\n}\n\n.nav-link {\n  display: block;\n  padding: 0.5rem 1rem;\n  color: #2196f3;\n  text-decoration: none;\n  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .nav-link {\n    transition: none;\n  }\n}\n\n.nav-link:hover, .nav-link:focus {\n  color: #1a78c2;\n}\n\n.nav-link.disabled {\n  color: #bbb;\n  pointer-events: none;\n  cursor: default;\n}\n\n.nav-tabs {\n  border-bottom: 1px solid transparent;\n}\n\n.nav-tabs .nav-link {\n  margin-bottom: -1px;\n  background: none;\n  border: 1px solid transparent;\n  border-top-left-radius: 0.25rem;\n  border-top-right-radius: 0.25rem;\n}\n\n.nav-tabs .nav-link:hover, .nav-tabs .nav-link:focus {\n  border-color: #eee #eee transparent;\n  isolation: isolate;\n}\n\n.nav-tabs .nav-link.disabled {\n  color: #bbb;\n  background-color: transparent;\n  border-color: transparent;\n}\n\n.nav-tabs .nav-link.active,\n.nav-tabs .nav-item.show .nav-link {\n  color: #444;\n  background-color: #fff;\n  border-color: #dee2e6 #dee2e6 #fff;\n}\n\n.nav-tabs .dropdown-menu {\n  margin-top: -1px;\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n}\n\n.nav-pills .nav-link {\n  background: none;\n  border: 0;\n  border-radius: 0.25rem;\n}\n\n.nav-pills .nav-link.active,\n.nav-pills .show > .nav-link {\n  color: #fff;\n  background-color: #2196f3;\n  background-image: var(--bs-gradient);\n}\n\n.nav-fill > .nav-link,\n.nav-fill .nav-item {\n  -ms-flex: 1 1 auto;\n  flex: 1 1 auto;\n  text-align: center;\n}\n\n.nav-justified > .nav-link,\n.nav-justified .nav-item {\n  -ms-flex-preferred-size: 0;\n  flex-basis: 0;\n  -ms-flex-positive: 1;\n  flex-grow: 1;\n  text-align: center;\n}\n\n.nav-fill .nav-item .nav-link,\n.nav-justified .nav-item .nav-link {\n  width: 100%;\n}\n\n.tab-content > .tab-pane {\n  display: none;\n}\n\n.tab-content > .active {\n  display: block;\n}\n\n.navbar {\n  position: relative;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n  flex-wrap: wrap;\n  -ms-flex-align: center;\n  align-items: center;\n  -ms-flex-pack: justify;\n  justify-content: space-between;\n  padding-top: 1rem;\n  padding-bottom: 1rem;\n  background-image: var(--bs-gradient);\n}\n\n.navbar > .container,\n.navbar > .container-fluid, .navbar > .container-sm, .navbar > .container-md, .navbar > .container-lg, .navbar > .container-xl, .navbar > .container-xxl {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: inherit;\n  flex-wrap: inherit;\n  -ms-flex-align: center;\n  align-items: center;\n  -ms-flex-pack: justify;\n  justify-content: space-between;\n}\n\n.navbar-brand {\n  padding-top: 0.3125rem;\n  padding-bottom: 0.3125rem;\n  margin-right: 1rem;\n  font-size: 1.25rem;\n  text-decoration: none;\n  white-space: nowrap;\n}\n\n.navbar-nav {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  padding-left: 0;\n  margin-bottom: 0;\n  list-style: none;\n}\n\n.navbar-nav .nav-link {\n  padding-right: 0;\n  padding-left: 0;\n}\n\n.navbar-nav .dropdown-menu {\n  position: static;\n}\n\n.navbar-text {\n  padding-top: 0.5rem;\n  padding-bottom: 0.5rem;\n}\n\n.navbar-collapse {\n  -ms-flex-preferred-size: 100%;\n  flex-basis: 100%;\n  -ms-flex-positive: 1;\n  flex-grow: 1;\n  -ms-flex-align: center;\n  align-items: center;\n}\n\n.navbar-toggler {\n  padding: 0.25rem 0.75rem;\n  font-size: 1.25rem;\n  line-height: 1;\n  background-color: transparent;\n  border: 1px solid transparent;\n  border-radius: 0.25rem;\n  transition: box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .navbar-toggler {\n    transition: none;\n  }\n}\n\n.navbar-toggler:hover {\n  text-decoration: none;\n}\n\n.navbar-toggler:focus {\n  text-decoration: none;\n  outline: 0;\n  box-shadow: 0 0 0 0.25rem;\n}\n\n.navbar-toggler-icon {\n  display: inline-block;\n  width: 1.5em;\n  height: 1.5em;\n  vertical-align: middle;\n  background-repeat: no-repeat;\n  background-position: center;\n  background-size: 100%;\n}\n\n.navbar-nav-scroll {\n  max-height: var(--bs-scroll-height, 75vh);\n  overflow-y: auto;\n}\n\n@media (min-width: 576px) {\n  .navbar-expand-sm {\n    -ms-flex-wrap: nowrap;\n    flex-wrap: nowrap;\n    -ms-flex-pack: start;\n    justify-content: flex-start;\n  }\n  .navbar-expand-sm .navbar-nav {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .navbar-expand-sm .navbar-nav .dropdown-menu {\n    position: absolute;\n  }\n  .navbar-expand-sm .navbar-nav .nav-link {\n    padding-right: 0.5rem;\n    padding-left: 0.5rem;\n  }\n  .navbar-expand-sm .navbar-nav-scroll {\n    overflow: visible;\n  }\n  .navbar-expand-sm .navbar-collapse {\n    display: -ms-flexbox !important;\n    display: flex !important;\n    -ms-flex-preferred-size: auto;\n    flex-basis: auto;\n  }\n  .navbar-expand-sm .navbar-toggler {\n    display: none;\n  }\n  .navbar-expand-sm .offcanvas-header {\n    display: none;\n  }\n  .navbar-expand-sm .offcanvas {\n    position: inherit;\n    bottom: 0;\n    z-index: 1000;\n    -ms-flex-positive: 1;\n    flex-grow: 1;\n    visibility: visible !important;\n    background-color: transparent;\n    border-right: 0;\n    border-left: 0;\n    transition: none;\n    -webkit-transform: none;\n    transform: none;\n  }\n  .navbar-expand-sm .offcanvas-top,\n  .navbar-expand-sm .offcanvas-bottom {\n    height: auto;\n    border-top: 0;\n    border-bottom: 0;\n  }\n  .navbar-expand-sm .offcanvas-body {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-positive: 0;\n    flex-grow: 0;\n    padding: 0;\n    overflow-y: visible;\n  }\n}\n\n@media (min-width: 768px) {\n  .navbar-expand-md {\n    -ms-flex-wrap: nowrap;\n    flex-wrap: nowrap;\n    -ms-flex-pack: start;\n    justify-content: flex-start;\n  }\n  .navbar-expand-md .navbar-nav {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .navbar-expand-md .navbar-nav .dropdown-menu {\n    position: absolute;\n  }\n  .navbar-expand-md .navbar-nav .nav-link {\n    padding-right: 0.5rem;\n    padding-left: 0.5rem;\n  }\n  .navbar-expand-md .navbar-nav-scroll {\n    overflow: visible;\n  }\n  .navbar-expand-md .navbar-collapse {\n    display: -ms-flexbox !important;\n    display: flex !important;\n    -ms-flex-preferred-size: auto;\n    flex-basis: auto;\n  }\n  .navbar-expand-md .navbar-toggler {\n    display: none;\n  }\n  .navbar-expand-md .offcanvas-header {\n    display: none;\n  }\n  .navbar-expand-md .offcanvas {\n    position: inherit;\n    bottom: 0;\n    z-index: 1000;\n    -ms-flex-positive: 1;\n    flex-grow: 1;\n    visibility: visible !important;\n    background-color: transparent;\n    border-right: 0;\n    border-left: 0;\n    transition: none;\n    -webkit-transform: none;\n    transform: none;\n  }\n  .navbar-expand-md .offcanvas-top,\n  .navbar-expand-md .offcanvas-bottom {\n    height: auto;\n    border-top: 0;\n    border-bottom: 0;\n  }\n  .navbar-expand-md .offcanvas-body {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-positive: 0;\n    flex-grow: 0;\n    padding: 0;\n    overflow-y: visible;\n  }\n}\n\n@media (min-width: 992px) {\n  .navbar-expand-lg {\n    -ms-flex-wrap: nowrap;\n    flex-wrap: nowrap;\n    -ms-flex-pack: start;\n    justify-content: flex-start;\n  }\n  .navbar-expand-lg .navbar-nav {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .navbar-expand-lg .navbar-nav .dropdown-menu {\n    position: absolute;\n  }\n  .navbar-expand-lg .navbar-nav .nav-link {\n    padding-right: 0.5rem;\n    padding-left: 0.5rem;\n  }\n  .navbar-expand-lg .navbar-nav-scroll {\n    overflow: visible;\n  }\n  .navbar-expand-lg .navbar-collapse {\n    display: -ms-flexbox !important;\n    display: flex !important;\n    -ms-flex-preferred-size: auto;\n    flex-basis: auto;\n  }\n  .navbar-expand-lg .navbar-toggler {\n    display: none;\n  }\n  .navbar-expand-lg .offcanvas-header {\n    display: none;\n  }\n  .navbar-expand-lg .offcanvas {\n    position: inherit;\n    bottom: 0;\n    z-index: 1000;\n    -ms-flex-positive: 1;\n    flex-grow: 1;\n    visibility: visible !important;\n    background-color: transparent;\n    border-right: 0;\n    border-left: 0;\n    transition: none;\n    -webkit-transform: none;\n    transform: none;\n  }\n  .navbar-expand-lg .offcanvas-top,\n  .navbar-expand-lg .offcanvas-bottom {\n    height: auto;\n    border-top: 0;\n    border-bottom: 0;\n  }\n  .navbar-expand-lg .offcanvas-body {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-positive: 0;\n    flex-grow: 0;\n    padding: 0;\n    overflow-y: visible;\n  }\n}\n\n@media (min-width: 1200px) {\n  .navbar-expand-xl {\n    -ms-flex-wrap: nowrap;\n    flex-wrap: nowrap;\n    -ms-flex-pack: start;\n    justify-content: flex-start;\n  }\n  .navbar-expand-xl .navbar-nav {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .navbar-expand-xl .navbar-nav .dropdown-menu {\n    position: absolute;\n  }\n  .navbar-expand-xl .navbar-nav .nav-link {\n    padding-right: 0.5rem;\n    padding-left: 0.5rem;\n  }\n  .navbar-expand-xl .navbar-nav-scroll {\n    overflow: visible;\n  }\n  .navbar-expand-xl .navbar-collapse {\n    display: -ms-flexbox !important;\n    display: flex !important;\n    -ms-flex-preferred-size: auto;\n    flex-basis: auto;\n  }\n  .navbar-expand-xl .navbar-toggler {\n    display: none;\n  }\n  .navbar-expand-xl .offcanvas-header {\n    display: none;\n  }\n  .navbar-expand-xl .offcanvas {\n    position: inherit;\n    bottom: 0;\n    z-index: 1000;\n    -ms-flex-positive: 1;\n    flex-grow: 1;\n    visibility: visible !important;\n    background-color: transparent;\n    border-right: 0;\n    border-left: 0;\n    transition: none;\n    -webkit-transform: none;\n    transform: none;\n  }\n  .navbar-expand-xl .offcanvas-top,\n  .navbar-expand-xl .offcanvas-bottom {\n    height: auto;\n    border-top: 0;\n    border-bottom: 0;\n  }\n  .navbar-expand-xl .offcanvas-body {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-positive: 0;\n    flex-grow: 0;\n    padding: 0;\n    overflow-y: visible;\n  }\n}\n\n@media (min-width: 1400px) {\n  .navbar-expand-xxl {\n    -ms-flex-wrap: nowrap;\n    flex-wrap: nowrap;\n    -ms-flex-pack: start;\n    justify-content: flex-start;\n  }\n  .navbar-expand-xxl .navbar-nav {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .navbar-expand-xxl .navbar-nav .dropdown-menu {\n    position: absolute;\n  }\n  .navbar-expand-xxl .navbar-nav .nav-link {\n    padding-right: 0.5rem;\n    padding-left: 0.5rem;\n  }\n  .navbar-expand-xxl .navbar-nav-scroll {\n    overflow: visible;\n  }\n  .navbar-expand-xxl .navbar-collapse {\n    display: -ms-flexbox !important;\n    display: flex !important;\n    -ms-flex-preferred-size: auto;\n    flex-basis: auto;\n  }\n  .navbar-expand-xxl .navbar-toggler {\n    display: none;\n  }\n  .navbar-expand-xxl .offcanvas-header {\n    display: none;\n  }\n  .navbar-expand-xxl .offcanvas {\n    position: inherit;\n    bottom: 0;\n    z-index: 1000;\n    -ms-flex-positive: 1;\n    flex-grow: 1;\n    visibility: visible !important;\n    background-color: transparent;\n    border-right: 0;\n    border-left: 0;\n    transition: none;\n    -webkit-transform: none;\n    transform: none;\n  }\n  .navbar-expand-xxl .offcanvas-top,\n  .navbar-expand-xxl .offcanvas-bottom {\n    height: auto;\n    border-top: 0;\n    border-bottom: 0;\n  }\n  .navbar-expand-xxl .offcanvas-body {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-positive: 0;\n    flex-grow: 0;\n    padding: 0;\n    overflow-y: visible;\n  }\n}\n\n.navbar-expand {\n  -ms-flex-wrap: nowrap;\n  flex-wrap: nowrap;\n  -ms-flex-pack: start;\n  justify-content: flex-start;\n}\n\n.navbar-expand .navbar-nav {\n  -ms-flex-direction: row;\n  flex-direction: row;\n}\n\n.navbar-expand .navbar-nav .dropdown-menu {\n  position: absolute;\n}\n\n.navbar-expand .navbar-nav .nav-link {\n  padding-right: 0.5rem;\n  padding-left: 0.5rem;\n}\n\n.navbar-expand .navbar-nav-scroll {\n  overflow: visible;\n}\n\n.navbar-expand .navbar-collapse {\n  display: -ms-flexbox !important;\n  display: flex !important;\n  -ms-flex-preferred-size: auto;\n  flex-basis: auto;\n}\n\n.navbar-expand .navbar-toggler {\n  display: none;\n}\n\n.navbar-expand .offcanvas-header {\n  display: none;\n}\n\n.navbar-expand .offcanvas {\n  position: inherit;\n  bottom: 0;\n  z-index: 1000;\n  -ms-flex-positive: 1;\n  flex-grow: 1;\n  visibility: visible !important;\n  background-color: transparent;\n  border-right: 0;\n  border-left: 0;\n  transition: none;\n  -webkit-transform: none;\n  transform: none;\n}\n\n.navbar-expand .offcanvas-top,\n.navbar-expand .offcanvas-bottom {\n  height: auto;\n  border-top: 0;\n  border-bottom: 0;\n}\n\n.navbar-expand .offcanvas-body {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-positive: 0;\n  flex-grow: 0;\n  padding: 0;\n  overflow-y: visible;\n}\n\n.navbar-light .navbar-brand {\n  color: rgba(0, 0, 0, 0.9);\n}\n\n.navbar-light .navbar-brand:hover, .navbar-light .navbar-brand:focus {\n  color: rgba(0, 0, 0, 0.9);\n}\n\n.navbar-light .navbar-nav .nav-link {\n  color: rgba(0, 0, 0, 0.55);\n}\n\n.navbar-light .navbar-nav .nav-link:hover, .navbar-light .navbar-nav .nav-link:focus {\n  color: rgba(0, 0, 0, 0.7);\n}\n\n.navbar-light .navbar-nav .nav-link.disabled {\n  color: rgba(0, 0, 0, 0.3);\n}\n\n.navbar-light .navbar-nav .show > .nav-link,\n.navbar-light .navbar-nav .nav-link.active {\n  color: rgba(0, 0, 0, 0.9);\n}\n\n.navbar-light .navbar-toggler {\n  color: rgba(0, 0, 0, 0.55);\n  border-color: rgba(0, 0, 0, 0.1);\n}\n\n.navbar-light .navbar-toggler-icon {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%280, 0, 0, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e\");\n}\n\n.navbar-light .navbar-text {\n  color: rgba(0, 0, 0, 0.55);\n}\n\n.navbar-light .navbar-text a,\n.navbar-light .navbar-text a:hover,\n.navbar-light .navbar-text a:focus {\n  color: rgba(0, 0, 0, 0.9);\n}\n\n.navbar-dark .navbar-brand {\n  color: #fff;\n}\n\n.navbar-dark .navbar-brand:hover, .navbar-dark .navbar-brand:focus {\n  color: #fff;\n}\n\n.navbar-dark .navbar-nav .nav-link {\n  color: rgba(255, 255, 255, 0.75);\n}\n\n.navbar-dark .navbar-nav .nav-link:hover, .navbar-dark .navbar-nav .nav-link:focus {\n  color: #fff;\n}\n\n.navbar-dark .navbar-nav .nav-link.disabled {\n  color: rgba(255, 255, 255, 0.25);\n}\n\n.navbar-dark .navbar-nav .show > .nav-link,\n.navbar-dark .navbar-nav .nav-link.active {\n  color: #fff;\n}\n\n.navbar-dark .navbar-toggler {\n  color: rgba(255, 255, 255, 0.75);\n  border-color: rgba(255, 255, 255, 0.1);\n}\n\n.navbar-dark .navbar-toggler-icon {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.75%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e\");\n}\n\n.navbar-dark .navbar-text {\n  color: rgba(255, 255, 255, 0.75);\n}\n\n.navbar-dark .navbar-text a,\n.navbar-dark .navbar-text a:hover,\n.navbar-dark .navbar-text a:focus {\n  color: #fff;\n}\n\n.card {\n  position: relative;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  min-width: 0;\n  word-wrap: break-word;\n  background-color: #fff;\n  background-clip: border-box;\n  border: 0 solid transparent;\n  border-radius: 0.25rem;\n}\n\n.card > hr {\n  margin-right: 0;\n  margin-left: 0;\n}\n\n.card > .list-group {\n  border-top: inherit;\n  border-bottom: inherit;\n}\n\n.card > .list-group:first-child {\n  border-top-width: 0;\n  border-top-left-radius: 0.25rem;\n  border-top-right-radius: 0.25rem;\n}\n\n.card > .list-group:last-child {\n  border-bottom-width: 0;\n  border-bottom-right-radius: 0.25rem;\n  border-bottom-left-radius: 0.25rem;\n}\n\n.card > .card-header + .list-group,\n.card > .list-group + .card-footer {\n  border-top: 0;\n}\n\n.card-body {\n  -ms-flex: 1 1 auto;\n  flex: 1 1 auto;\n  padding: 1rem 1rem;\n}\n\n.card-title {\n  margin-bottom: 0.5rem;\n}\n\n.card-subtitle {\n  margin-top: -0.25rem;\n  margin-bottom: 0;\n}\n\n.card-text:last-child {\n  margin-bottom: 0;\n}\n\n.card-link + .card-link {\n  margin-left: 1rem;\n}\n\n.card-header {\n  padding: 0.5rem 1rem;\n  margin-bottom: 0;\n  background-color: rgba(0, 0, 0, 0.03);\n  border-bottom: 0 solid transparent;\n}\n\n.card-header:first-child {\n  border-radius: 0.25rem 0.25rem 0 0;\n}\n\n.card-footer {\n  padding: 0.5rem 1rem;\n  background-color: rgba(0, 0, 0, 0.03);\n  border-top: 0 solid transparent;\n}\n\n.card-footer:last-child {\n  border-radius: 0 0 0.25rem 0.25rem;\n}\n\n.card-header-tabs {\n  margin-right: -0.5rem;\n  margin-bottom: -0.5rem;\n  margin-left: -0.5rem;\n  border-bottom: 0;\n}\n\n.card-header-pills {\n  margin-right: -0.5rem;\n  margin-left: -0.5rem;\n}\n\n.card-img-overlay {\n  position: absolute;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  padding: 1rem;\n  border-radius: 0.25rem;\n}\n\n.card-img,\n.card-img-top,\n.card-img-bottom {\n  width: 100%;\n}\n\n.card-img,\n.card-img-top {\n  border-top-left-radius: 0.25rem;\n  border-top-right-radius: 0.25rem;\n}\n\n.card-img,\n.card-img-bottom {\n  border-bottom-right-radius: 0.25rem;\n  border-bottom-left-radius: 0.25rem;\n}\n\n.card-group > .card {\n  margin-bottom: 0.75rem;\n}\n\n@media (min-width: 576px) {\n  .card-group {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-flow: row wrap;\n    flex-flow: row wrap;\n  }\n  .card-group > .card {\n    -ms-flex: 1 0 0%;\n    flex: 1 0 0%;\n    margin-bottom: 0;\n  }\n  .card-group > .card + .card {\n    margin-left: 0;\n    border-left: 0;\n  }\n  .card-group > .card:not(:last-child) {\n    border-top-right-radius: 0;\n    border-bottom-right-radius: 0;\n  }\n  .card-group > .card:not(:last-child) .card-img-top,\n  .card-group > .card:not(:last-child) .card-header {\n    border-top-right-radius: 0;\n  }\n  .card-group > .card:not(:last-child) .card-img-bottom,\n  .card-group > .card:not(:last-child) .card-footer {\n    border-bottom-right-radius: 0;\n  }\n  .card-group > .card:not(:first-child) {\n    border-top-left-radius: 0;\n    border-bottom-left-radius: 0;\n  }\n  .card-group > .card:not(:first-child) .card-img-top,\n  .card-group > .card:not(:first-child) .card-header {\n    border-top-left-radius: 0;\n  }\n  .card-group > .card:not(:first-child) .card-img-bottom,\n  .card-group > .card:not(:first-child) .card-footer {\n    border-bottom-left-radius: 0;\n  }\n}\n\n.accordion-button {\n  position: relative;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-align: center;\n  align-items: center;\n  width: 100%;\n  padding: 1rem 1.25rem;\n  font-size: 1rem;\n  color: #444;\n  text-align: left;\n  background-color: #fff;\n  border: 0;\n  border-radius: 0;\n  overflow-anchor: none;\n  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, border-radius 0.15s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .accordion-button {\n    transition: none;\n  }\n}\n\n.accordion-button:not(.collapsed) {\n  color: #1e87db;\n  background-color: #e9f5fe;\n  box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.125);\n}\n\n.accordion-button:not(.collapsed)::after {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%231e87db'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e\");\n  -webkit-transform: rotate(-180deg);\n  transform: rotate(-180deg);\n}\n\n.accordion-button::after {\n  -ms-flex-negative: 0;\n  flex-shrink: 0;\n  width: 1.25rem;\n  height: 1.25rem;\n  margin-left: auto;\n  content: \"\";\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23444'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e\");\n  background-repeat: no-repeat;\n  background-size: 1.25rem;\n  transition: -webkit-transform 0.2s ease-in-out;\n  transition: transform 0.2s ease-in-out;\n  transition: transform 0.2s ease-in-out, -webkit-transform 0.2s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .accordion-button::after {\n    transition: none;\n  }\n}\n\n.accordion-button:hover {\n  z-index: 2;\n}\n\n.accordion-button:focus {\n  z-index: 3;\n  border-color: #90cbf9;\n  outline: 0;\n  box-shadow: 0 0 0 0.25rem rgba(33, 150, 243, 0.25);\n}\n\n.accordion-header {\n  margin-bottom: 0;\n}\n\n.accordion-item {\n  background-color: #fff;\n  border: 1px solid rgba(0, 0, 0, 0.125);\n}\n\n.accordion-item:first-of-type {\n  border-top-left-radius: 0.25rem;\n  border-top-right-radius: 0.25rem;\n}\n\n.accordion-item:first-of-type .accordion-button {\n  border-top-left-radius: calc(0.25rem - 1px);\n  border-top-right-radius: calc(0.25rem - 1px);\n}\n\n.accordion-item:not(:first-of-type) {\n  border-top: 0;\n}\n\n.accordion-item:last-of-type {\n  border-bottom-right-radius: 0.25rem;\n  border-bottom-left-radius: 0.25rem;\n}\n\n.accordion-item:last-of-type .accordion-button.collapsed {\n  border-bottom-right-radius: calc(0.25rem - 1px);\n  border-bottom-left-radius: calc(0.25rem - 1px);\n}\n\n.accordion-item:last-of-type .accordion-collapse {\n  border-bottom-right-radius: 0.25rem;\n  border-bottom-left-radius: 0.25rem;\n}\n\n.accordion-body {\n  padding: 1rem 1.25rem;\n}\n\n.accordion-flush .accordion-collapse {\n  border-width: 0;\n}\n\n.accordion-flush .accordion-item {\n  border-right: 0;\n  border-left: 0;\n  border-radius: 0;\n}\n\n.accordion-flush .accordion-item:first-child {\n  border-top: 0;\n}\n\n.accordion-flush .accordion-item:last-child {\n  border-bottom: 0;\n}\n\n.accordion-flush .accordion-item .accordion-button {\n  border-radius: 0;\n}\n\n.breadcrumb {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n  flex-wrap: wrap;\n  padding: 0 0;\n  margin-bottom: 1rem;\n  list-style: none;\n}\n\n.breadcrumb-item + .breadcrumb-item {\n  padding-left: 0.5rem;\n}\n\n.breadcrumb-item + .breadcrumb-item::before {\n  float: left;\n  padding-right: 0.5rem;\n  color: #666;\n  content: var(--bs-breadcrumb-divider, \"/\") /* rtl: var(--bs-breadcrumb-divider, \"/\") */;\n}\n\n.breadcrumb-item.active {\n  color: #666;\n}\n\n.pagination {\n  display: -ms-flexbox;\n  display: flex;\n  padding-left: 0;\n  list-style: none;\n}\n\n.page-link {\n  position: relative;\n  display: block;\n  color: #2196f3;\n  text-decoration: none;\n  background-color: #fff;\n  border: 1px solid #dee2e6;\n  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .page-link {\n    transition: none;\n  }\n}\n\n.page-link:hover {\n  z-index: 2;\n  color: #1a78c2;\n  background-color: #eee;\n  border-color: #dee2e6;\n}\n\n.page-link:focus {\n  z-index: 3;\n  color: #1a78c2;\n  background-color: #eee;\n  outline: 0;\n  box-shadow: 0 0 0 0.25rem rgba(33, 150, 243, 0.25);\n}\n\n.page-item:not(:first-child) .page-link {\n  margin-left: -1px;\n}\n\n.page-item.active .page-link {\n  z-index: 3;\n  color: #fff;\n  background-color: #2196f3;\n  background-image: var(--bs-gradient);\n  border-color: #2196f3;\n}\n\n.page-item.disabled .page-link {\n  color: #666;\n  pointer-events: none;\n  background-color: #fff;\n  border-color: #dee2e6;\n}\n\n.page-link {\n  padding: 0.375rem 0.75rem;\n}\n\n.page-item:first-child .page-link {\n  border-top-left-radius: 0.25rem;\n  border-bottom-left-radius: 0.25rem;\n}\n\n.page-item:last-child .page-link {\n  border-top-right-radius: 0.25rem;\n  border-bottom-right-radius: 0.25rem;\n}\n\n.pagination-lg .page-link {\n  padding: 0.75rem 1.5rem;\n  font-size: 1.25rem;\n}\n\n.pagination-lg .page-item:first-child .page-link {\n  border-top-left-radius: 0.3rem;\n  border-bottom-left-radius: 0.3rem;\n}\n\n.pagination-lg .page-item:last-child .page-link {\n  border-top-right-radius: 0.3rem;\n  border-bottom-right-radius: 0.3rem;\n}\n\n.pagination-sm .page-link {\n  padding: 0.25rem 0.5rem;\n  font-size: 0.875rem;\n}\n\n.pagination-sm .page-item:first-child .page-link {\n  border-top-left-radius: 0.2rem;\n  border-bottom-left-radius: 0.2rem;\n}\n\n.pagination-sm .page-item:last-child .page-link {\n  border-top-right-radius: 0.2rem;\n  border-bottom-right-radius: 0.2rem;\n}\n\n.badge {\n  display: inline-block;\n  padding: 0.35em 0.65em;\n  font-size: 0.75em;\n  font-weight: 700;\n  line-height: 1;\n  color: #fff;\n  text-align: center;\n  white-space: nowrap;\n  vertical-align: baseline;\n  border-radius: 0.25rem;\n  background-image: var(--bs-gradient);\n}\n\n.badge:empty {\n  display: none;\n}\n\n.btn .badge {\n  position: relative;\n  top: -1px;\n}\n\n.alert {\n  position: relative;\n  padding: 1rem 1rem;\n  margin-bottom: 1rem;\n  border: 1px solid transparent;\n  border-radius: 0.25rem;\n}\n\n.alert-heading {\n  color: inherit;\n}\n\n.alert-link {\n  font-weight: 700;\n}\n\n.alert-dismissible {\n  padding-right: 3rem;\n}\n\n.alert-dismissible .btn-close {\n  position: absolute;\n  top: 0;\n  right: 0;\n  z-index: 2;\n  padding: 1.25rem 1rem;\n}\n\n.alert-primary {\n  color: #145a92;\n  background-color: #d3eafd;\n  background-image: var(--bs-gradient);\n  border-color: #bce0fb;\n}\n\n.alert-primary .alert-link {\n  color: #104875;\n}\n\n.alert-secondary {\n  color: #999999;\n  background-color: white;\n  background-image: var(--bs-gradient);\n  border-color: white;\n}\n\n.alert-secondary .alert-link {\n  color: #7a7a7a;\n}\n\n.alert-success {\n  color: #2e6930;\n  background-color: #dbefdc;\n  background-image: var(--bs-gradient);\n  border-color: #c9e7cb;\n}\n\n.alert-success .alert-link {\n  color: #255426;\n}\n\n.alert-info {\n  color: #5e176a;\n  background-color: #ebd4ef;\n  background-image: var(--bs-gradient);\n  border-color: #e1bee7;\n}\n\n.alert-info .alert-link {\n  color: #4b1255;\n}\n\n.alert-warning {\n  color: #995b00;\n  background-color: #ffeacc;\n  background-image: var(--bs-gradient);\n  border-color: #ffe0b3;\n}\n\n.alert-warning .alert-link {\n  color: #7a4900;\n}\n\n.alert-danger {\n  color: #891115;\n  background-color: #fad2d3;\n  background-image: var(--bs-gradient);\n  border-color: #f7bbbd;\n}\n\n.alert-danger .alert-link {\n  color: #6e0e11;\n}\n\n.alert-light {\n  color: #959596;\n  background-color: #fefefe;\n  background-image: var(--bs-gradient);\n  border-color: #fdfdfe;\n}\n\n.alert-light .alert-link {\n  color: #777778;\n}\n\n.alert-dark {\n  color: #141414;\n  background-color: lightgray;\n  background-image: var(--bs-gradient);\n  border-color: #bdbdbd;\n}\n\n.alert-dark .alert-link {\n  color: #101010;\n}\n\n@-webkit-keyframes progress-bar-stripes {\n  0% {\n    background-position-x: 0.375rem;\n  }\n}\n\n@keyframes progress-bar-stripes {\n  0% {\n    background-position-x: 0.375rem;\n  }\n}\n\n.progress {\n  display: -ms-flexbox;\n  display: flex;\n  height: 0.375rem;\n  overflow: hidden;\n  font-size: 0.75rem;\n  background-color: #eee;\n  border-radius: 0;\n}\n\n.progress-bar {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  -ms-flex-pack: center;\n  justify-content: center;\n  overflow: hidden;\n  color: #fff;\n  text-align: center;\n  white-space: nowrap;\n  background-color: #2196f3;\n  transition: width 0.6s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .progress-bar {\n    transition: none;\n  }\n}\n\n.progress-bar-striped {\n  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-size: 0.375rem 0.375rem;\n}\n\n.progress-bar-animated {\n  -webkit-animation: 1s linear infinite progress-bar-stripes;\n  animation: 1s linear infinite progress-bar-stripes;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .progress-bar-animated {\n    -webkit-animation: none;\n    animation: none;\n  }\n}\n\n.list-group {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  padding-left: 0;\n  margin-bottom: 0;\n  border-radius: 0.25rem;\n}\n\n.list-group-numbered {\n  list-style-type: none;\n  counter-reset: section;\n}\n\n.list-group-numbered > li::before {\n  content: counters(section, \".\") \". \";\n  counter-increment: section;\n}\n\n.list-group-item-action {\n  width: 100%;\n  color: #444;\n  text-align: inherit;\n}\n\n.list-group-item-action:hover, .list-group-item-action:focus {\n  z-index: 1;\n  color: #444;\n  text-decoration: none;\n  background-color: #f8f9fa;\n}\n\n.list-group-item-action:active {\n  color: #444;\n  background-color: #eee;\n}\n\n.list-group-item {\n  position: relative;\n  display: block;\n  padding: 0.5rem 1rem;\n  color: #212121;\n  text-decoration: none;\n  background-color: #fff;\n  border: 1px solid rgba(0, 0, 0, 0.125);\n}\n\n.list-group-item:first-child {\n  border-top-left-radius: inherit;\n  border-top-right-radius: inherit;\n}\n\n.list-group-item:last-child {\n  border-bottom-right-radius: inherit;\n  border-bottom-left-radius: inherit;\n}\n\n.list-group-item.disabled, .list-group-item:disabled {\n  color: #666;\n  pointer-events: none;\n  background-color: #fff;\n}\n\n.list-group-item.active {\n  z-index: 2;\n  color: #fff;\n  background-color: #2196f3;\n  border-color: #2196f3;\n}\n\n.list-group-item + .list-group-item {\n  border-top-width: 0;\n}\n\n.list-group-item + .list-group-item.active {\n  margin-top: -1px;\n  border-top-width: 1px;\n}\n\n.list-group-horizontal {\n  -ms-flex-direction: row;\n  flex-direction: row;\n}\n\n.list-group-horizontal > .list-group-item:first-child {\n  border-bottom-left-radius: 0.25rem;\n  border-top-right-radius: 0;\n}\n\n.list-group-horizontal > .list-group-item:last-child {\n  border-top-right-radius: 0.25rem;\n  border-bottom-left-radius: 0;\n}\n\n.list-group-horizontal > .list-group-item.active {\n  margin-top: 0;\n}\n\n.list-group-horizontal > .list-group-item + .list-group-item {\n  border-top-width: 1px;\n  border-left-width: 0;\n}\n\n.list-group-horizontal > .list-group-item + .list-group-item.active {\n  margin-left: -1px;\n  border-left-width: 1px;\n}\n\n@media (min-width: 576px) {\n  .list-group-horizontal-sm {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .list-group-horizontal-sm > .list-group-item:first-child {\n    border-bottom-left-radius: 0.25rem;\n    border-top-right-radius: 0;\n  }\n  .list-group-horizontal-sm > .list-group-item:last-child {\n    border-top-right-radius: 0.25rem;\n    border-bottom-left-radius: 0;\n  }\n  .list-group-horizontal-sm > .list-group-item.active {\n    margin-top: 0;\n  }\n  .list-group-horizontal-sm > .list-group-item + .list-group-item {\n    border-top-width: 1px;\n    border-left-width: 0;\n  }\n  .list-group-horizontal-sm > .list-group-item + .list-group-item.active {\n    margin-left: -1px;\n    border-left-width: 1px;\n  }\n}\n\n@media (min-width: 768px) {\n  .list-group-horizontal-md {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .list-group-horizontal-md > .list-group-item:first-child {\n    border-bottom-left-radius: 0.25rem;\n    border-top-right-radius: 0;\n  }\n  .list-group-horizontal-md > .list-group-item:last-child {\n    border-top-right-radius: 0.25rem;\n    border-bottom-left-radius: 0;\n  }\n  .list-group-horizontal-md > .list-group-item.active {\n    margin-top: 0;\n  }\n  .list-group-horizontal-md > .list-group-item + .list-group-item {\n    border-top-width: 1px;\n    border-left-width: 0;\n  }\n  .list-group-horizontal-md > .list-group-item + .list-group-item.active {\n    margin-left: -1px;\n    border-left-width: 1px;\n  }\n}\n\n@media (min-width: 992px) {\n  .list-group-horizontal-lg {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .list-group-horizontal-lg > .list-group-item:first-child {\n    border-bottom-left-radius: 0.25rem;\n    border-top-right-radius: 0;\n  }\n  .list-group-horizontal-lg > .list-group-item:last-child {\n    border-top-right-radius: 0.25rem;\n    border-bottom-left-radius: 0;\n  }\n  .list-group-horizontal-lg > .list-group-item.active {\n    margin-top: 0;\n  }\n  .list-group-horizontal-lg > .list-group-item + .list-group-item {\n    border-top-width: 1px;\n    border-left-width: 0;\n  }\n  .list-group-horizontal-lg > .list-group-item + .list-group-item.active {\n    margin-left: -1px;\n    border-left-width: 1px;\n  }\n}\n\n@media (min-width: 1200px) {\n  .list-group-horizontal-xl {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .list-group-horizontal-xl > .list-group-item:first-child {\n    border-bottom-left-radius: 0.25rem;\n    border-top-right-radius: 0;\n  }\n  .list-group-horizontal-xl > .list-group-item:last-child {\n    border-top-right-radius: 0.25rem;\n    border-bottom-left-radius: 0;\n  }\n  .list-group-horizontal-xl > .list-group-item.active {\n    margin-top: 0;\n  }\n  .list-group-horizontal-xl > .list-group-item + .list-group-item {\n    border-top-width: 1px;\n    border-left-width: 0;\n  }\n  .list-group-horizontal-xl > .list-group-item + .list-group-item.active {\n    margin-left: -1px;\n    border-left-width: 1px;\n  }\n}\n\n@media (min-width: 1400px) {\n  .list-group-horizontal-xxl {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .list-group-horizontal-xxl > .list-group-item:first-child {\n    border-bottom-left-radius: 0.25rem;\n    border-top-right-radius: 0;\n  }\n  .list-group-horizontal-xxl > .list-group-item:last-child {\n    border-top-right-radius: 0.25rem;\n    border-bottom-left-radius: 0;\n  }\n  .list-group-horizontal-xxl > .list-group-item.active {\n    margin-top: 0;\n  }\n  .list-group-horizontal-xxl > .list-group-item + .list-group-item {\n    border-top-width: 1px;\n    border-left-width: 0;\n  }\n  .list-group-horizontal-xxl > .list-group-item + .list-group-item.active {\n    margin-left: -1px;\n    border-left-width: 1px;\n  }\n}\n\n.list-group-flush {\n  border-radius: 0;\n}\n\n.list-group-flush > .list-group-item {\n  border-width: 0 0 1px;\n}\n\n.list-group-flush > .list-group-item:last-child {\n  border-bottom-width: 0;\n}\n\n.list-group-item-primary {\n  color: #145a92;\n  background-color: #d3eafd;\n}\n\n.list-group-item-primary.list-group-item-action:hover, .list-group-item-primary.list-group-item-action:focus {\n  color: #145a92;\n  background-color: #bed3e4;\n}\n\n.list-group-item-primary.list-group-item-action.active {\n  color: #fff;\n  background-color: #145a92;\n  border-color: #145a92;\n}\n\n.list-group-item-secondary {\n  color: #999999;\n  background-color: white;\n}\n\n.list-group-item-secondary.list-group-item-action:hover, .list-group-item-secondary.list-group-item-action:focus {\n  color: #999999;\n  background-color: #e6e6e6;\n}\n\n.list-group-item-secondary.list-group-item-action.active {\n  color: #fff;\n  background-color: #999999;\n  border-color: #999999;\n}\n\n.list-group-item-success {\n  color: #2e6930;\n  background-color: #dbefdc;\n}\n\n.list-group-item-success.list-group-item-action:hover, .list-group-item-success.list-group-item-action:focus {\n  color: #2e6930;\n  background-color: #c5d7c6;\n}\n\n.list-group-item-success.list-group-item-action.active {\n  color: #fff;\n  background-color: #2e6930;\n  border-color: #2e6930;\n}\n\n.list-group-item-info {\n  color: #5e176a;\n  background-color: #ebd4ef;\n}\n\n.list-group-item-info.list-group-item-action:hover, .list-group-item-info.list-group-item-action:focus {\n  color: #5e176a;\n  background-color: #d4bfd7;\n}\n\n.list-group-item-info.list-group-item-action.active {\n  color: #fff;\n  background-color: #5e176a;\n  border-color: #5e176a;\n}\n\n.list-group-item-warning {\n  color: #995b00;\n  background-color: #ffeacc;\n}\n\n.list-group-item-warning.list-group-item-action:hover, .list-group-item-warning.list-group-item-action:focus {\n  color: #995b00;\n  background-color: #e6d3b8;\n}\n\n.list-group-item-warning.list-group-item-action.active {\n  color: #fff;\n  background-color: #995b00;\n  border-color: #995b00;\n}\n\n.list-group-item-danger {\n  color: #891115;\n  background-color: #fad2d3;\n}\n\n.list-group-item-danger.list-group-item-action:hover, .list-group-item-danger.list-group-item-action:focus {\n  color: #891115;\n  background-color: #e1bdbe;\n}\n\n.list-group-item-danger.list-group-item-action.active {\n  color: #fff;\n  background-color: #891115;\n  border-color: #891115;\n}\n\n.list-group-item-light {\n  color: #959596;\n  background-color: #fefefe;\n}\n\n.list-group-item-light.list-group-item-action:hover, .list-group-item-light.list-group-item-action:focus {\n  color: #959596;\n  background-color: #e5e5e5;\n}\n\n.list-group-item-light.list-group-item-action.active {\n  color: #fff;\n  background-color: #959596;\n  border-color: #959596;\n}\n\n.list-group-item-dark {\n  color: #141414;\n  background-color: lightgray;\n}\n\n.list-group-item-dark.list-group-item-action:hover, .list-group-item-dark.list-group-item-action:focus {\n  color: #141414;\n  background-color: #bebebe;\n}\n\n.list-group-item-dark.list-group-item-action.active {\n  color: #fff;\n  background-color: #141414;\n  border-color: #141414;\n}\n\n.btn-close {\n  box-sizing: content-box;\n  width: 1em;\n  height: 1em;\n  padding: 0.25em 0.25em;\n  color: #fff;\n  background: transparent url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M.293.293a1 1 0 011.414 0L8 6.586 14.293.293a1 1 0 111.414 1.414L9.414 8l6.293 6.293a1 1 0 01-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 01-1.414-1.414L6.586 8 .293 1.707a1 1 0 010-1.414z'/%3e%3c/svg%3e\") center/1em auto no-repeat;\n  border: 0;\n  border-radius: 0.25rem;\n  opacity: 0.6;\n}\n\n.btn-close:hover {\n  color: #fff;\n  text-decoration: none;\n  opacity: 1;\n}\n\n.btn-close:focus {\n  outline: 0;\n  box-shadow: 0 0 0 0.25rem rgba(33, 150, 243, 0.25);\n  opacity: 1;\n}\n\n.btn-close:disabled, .btn-close.disabled {\n  pointer-events: none;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  user-select: none;\n  opacity: 0.25;\n}\n\n.btn-close-white {\n  -webkit-filter: invert(1) grayscale(100%) brightness(200%);\n  filter: invert(1) grayscale(100%) brightness(200%);\n}\n\n.toast {\n  width: 350px;\n  max-width: 100%;\n  font-size: 0.875rem;\n  pointer-events: auto;\n  background-color: rgba(255, 255, 255, 0.85);\n  background-clip: padding-box;\n  border: 1px solid rgba(0, 0, 0, 0.1);\n  box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15);\n  border-radius: 0.25rem;\n}\n\n.toast.showing {\n  opacity: 0;\n}\n\n.toast:not(.show) {\n  display: none;\n}\n\n.toast-container {\n  width: -webkit-max-content;\n  width: -moz-max-content;\n  width: max-content;\n  max-width: 100%;\n  pointer-events: none;\n}\n\n.toast-container > :not(:last-child) {\n  margin-bottom: 0.75rem;\n}\n\n.toast-header {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-align: center;\n  align-items: center;\n  padding: 0.5rem 0.75rem;\n  color: #666;\n  background-color: rgba(255, 255, 255, 0.85);\n  background-clip: padding-box;\n  border-bottom: 1px solid rgba(0, 0, 0, 0.05);\n  border-top-left-radius: calc(0.25rem - 1px);\n  border-top-right-radius: calc(0.25rem - 1px);\n}\n\n.toast-header .btn-close {\n  margin-right: -0.375rem;\n  margin-left: 0.75rem;\n}\n\n.toast-body {\n  padding: 0.75rem;\n  word-wrap: break-word;\n}\n\n.modal {\n  position: fixed;\n  top: 0;\n  left: 0;\n  z-index: 1055;\n  display: none;\n  width: 100%;\n  height: 100%;\n  overflow-x: hidden;\n  overflow-y: auto;\n  outline: 0;\n}\n\n.modal-dialog {\n  position: relative;\n  width: auto;\n  margin: 0.5rem;\n  pointer-events: none;\n}\n\n.modal.fade .modal-dialog {\n  transition: -webkit-transform 0.3s ease-out;\n  transition: transform 0.3s ease-out;\n  transition: transform 0.3s ease-out, -webkit-transform 0.3s ease-out;\n  -webkit-transform: translate(0, -50px);\n  transform: translate(0, -50px);\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .modal.fade .modal-dialog {\n    transition: none;\n  }\n}\n\n.modal.show .modal-dialog {\n  -webkit-transform: none;\n  transform: none;\n}\n\n.modal.modal-static .modal-dialog {\n  -webkit-transform: scale(1.02);\n  transform: scale(1.02);\n}\n\n.modal-dialog-scrollable {\n  height: calc(100% - 1rem);\n}\n\n.modal-dialog-scrollable .modal-content {\n  max-height: 100%;\n  overflow: hidden;\n}\n\n.modal-dialog-scrollable .modal-body {\n  overflow-y: auto;\n}\n\n.modal-dialog-centered {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-align: center;\n  align-items: center;\n  min-height: calc(100% - 1rem);\n}\n\n.modal-content {\n  position: relative;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  width: 100%;\n  pointer-events: auto;\n  background-color: #fff;\n  background-clip: padding-box;\n  border: 1px solid transparent;\n  border-radius: 0.3rem;\n  outline: 0;\n}\n\n.modal-backdrop {\n  position: fixed;\n  top: 0;\n  left: 0;\n  z-index: 1050;\n  width: 100vw;\n  height: 100vh;\n  background-color: #000;\n}\n\n.modal-backdrop.fade {\n  opacity: 0;\n}\n\n.modal-backdrop.show {\n  opacity: 0.5;\n}\n\n.modal-header {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-negative: 0;\n  flex-shrink: 0;\n  -ms-flex-align: center;\n  align-items: center;\n  -ms-flex-pack: justify;\n  justify-content: space-between;\n  padding: 1rem 1rem;\n  border-bottom: 1px solid #dee2e6;\n  border-top-left-radius: calc(0.3rem - 1px);\n  border-top-right-radius: calc(0.3rem - 1px);\n}\n\n.modal-header .btn-close {\n  padding: 0.5rem 0.5rem;\n  margin: -0.5rem -0.5rem -0.5rem auto;\n}\n\n.modal-title {\n  margin-bottom: 0;\n  line-height: 1.5;\n}\n\n.modal-body {\n  position: relative;\n  -ms-flex: 1 1 auto;\n  flex: 1 1 auto;\n  padding: 1rem;\n}\n\n.modal-footer {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n  flex-wrap: wrap;\n  -ms-flex-negative: 0;\n  flex-shrink: 0;\n  -ms-flex-align: center;\n  align-items: center;\n  -ms-flex-pack: end;\n  justify-content: flex-end;\n  padding: 0.75rem;\n  border-top: 1px solid #dee2e6;\n  border-bottom-right-radius: calc(0.3rem - 1px);\n  border-bottom-left-radius: calc(0.3rem - 1px);\n}\n\n.modal-footer > * {\n  margin: 0.25rem;\n}\n\n@media (min-width: 576px) {\n  .modal-dialog {\n    max-width: 500px;\n    margin: 1.75rem auto;\n  }\n  .modal-dialog-scrollable {\n    height: calc(100% - 3.5rem);\n  }\n  .modal-dialog-centered {\n    min-height: calc(100% - 3.5rem);\n  }\n  .modal-sm {\n    max-width: 300px;\n  }\n}\n\n@media (min-width: 992px) {\n  .modal-lg,\n  .modal-xl {\n    max-width: 800px;\n  }\n}\n\n@media (min-width: 1200px) {\n  .modal-xl {\n    max-width: 1140px;\n  }\n}\n\n.modal-fullscreen {\n  width: 100vw;\n  max-width: none;\n  height: 100%;\n  margin: 0;\n}\n\n.modal-fullscreen .modal-content {\n  height: 100%;\n  border: 0;\n  border-radius: 0;\n}\n\n.modal-fullscreen .modal-header {\n  border-radius: 0;\n}\n\n.modal-fullscreen .modal-body {\n  overflow-y: auto;\n}\n\n.modal-fullscreen .modal-footer {\n  border-radius: 0;\n}\n\n@media (max-width: 575.98px) {\n  .modal-fullscreen-sm-down {\n    width: 100vw;\n    max-width: none;\n    height: 100%;\n    margin: 0;\n  }\n  .modal-fullscreen-sm-down .modal-content {\n    height: 100%;\n    border: 0;\n    border-radius: 0;\n  }\n  .modal-fullscreen-sm-down .modal-header {\n    border-radius: 0;\n  }\n  .modal-fullscreen-sm-down .modal-body {\n    overflow-y: auto;\n  }\n  .modal-fullscreen-sm-down .modal-footer {\n    border-radius: 0;\n  }\n}\n\n@media (max-width: 767.98px) {\n  .modal-fullscreen-md-down {\n    width: 100vw;\n    max-width: none;\n    height: 100%;\n    margin: 0;\n  }\n  .modal-fullscreen-md-down .modal-content {\n    height: 100%;\n    border: 0;\n    border-radius: 0;\n  }\n  .modal-fullscreen-md-down .modal-header {\n    border-radius: 0;\n  }\n  .modal-fullscreen-md-down .modal-body {\n    overflow-y: auto;\n  }\n  .modal-fullscreen-md-down .modal-footer {\n    border-radius: 0;\n  }\n}\n\n@media (max-width: 991.98px) {\n  .modal-fullscreen-lg-down {\n    width: 100vw;\n    max-width: none;\n    height: 100%;\n    margin: 0;\n  }\n  .modal-fullscreen-lg-down .modal-content {\n    height: 100%;\n    border: 0;\n    border-radius: 0;\n  }\n  .modal-fullscreen-lg-down .modal-header {\n    border-radius: 0;\n  }\n  .modal-fullscreen-lg-down .modal-body {\n    overflow-y: auto;\n  }\n  .modal-fullscreen-lg-down .modal-footer {\n    border-radius: 0;\n  }\n}\n\n@media (max-width: 1199.98px) {\n  .modal-fullscreen-xl-down {\n    width: 100vw;\n    max-width: none;\n    height: 100%;\n    margin: 0;\n  }\n  .modal-fullscreen-xl-down .modal-content {\n    height: 100%;\n    border: 0;\n    border-radius: 0;\n  }\n  .modal-fullscreen-xl-down .modal-header {\n    border-radius: 0;\n  }\n  .modal-fullscreen-xl-down .modal-body {\n    overflow-y: auto;\n  }\n  .modal-fullscreen-xl-down .modal-footer {\n    border-radius: 0;\n  }\n}\n\n@media (max-width: 1399.98px) {\n  .modal-fullscreen-xxl-down {\n    width: 100vw;\n    max-width: none;\n    height: 100%;\n    margin: 0;\n  }\n  .modal-fullscreen-xxl-down .modal-content {\n    height: 100%;\n    border: 0;\n    border-radius: 0;\n  }\n  .modal-fullscreen-xxl-down .modal-header {\n    border-radius: 0;\n  }\n  .modal-fullscreen-xxl-down .modal-body {\n    overflow-y: auto;\n  }\n  .modal-fullscreen-xxl-down .modal-footer {\n    border-radius: 0;\n  }\n}\n\n.tooltip {\n  position: absolute;\n  z-index: 1080;\n  display: block;\n  margin: 0;\n  font-family: var(--bs-font-sans-serif);\n  font-style: normal;\n  font-weight: 400;\n  line-height: 1.5;\n  text-align: left;\n  text-align: start;\n  text-decoration: none;\n  text-shadow: none;\n  text-transform: none;\n  letter-spacing: normal;\n  word-break: normal;\n  word-spacing: normal;\n  white-space: normal;\n  line-break: auto;\n  font-size: 0.875rem;\n  word-wrap: break-word;\n  opacity: 0;\n}\n\n.tooltip.show {\n  opacity: 0.9;\n}\n\n.tooltip .tooltip-arrow {\n  position: absolute;\n  display: block;\n  width: 0.8rem;\n  height: 0.4rem;\n}\n\n.tooltip .tooltip-arrow::before {\n  position: absolute;\n  content: \"\";\n  border-color: transparent;\n  border-style: solid;\n}\n\n.bs-tooltip-top, .bs-tooltip-auto[data-popper-placement^=\"top\"] {\n  padding: 0.4rem 0;\n}\n\n.bs-tooltip-top .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=\"top\"] .tooltip-arrow {\n  bottom: 0;\n}\n\n.bs-tooltip-top .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=\"top\"] .tooltip-arrow::before {\n  top: -1px;\n  border-width: 0.4rem 0.4rem 0;\n  border-top-color: #444;\n}\n\n.bs-tooltip-end, .bs-tooltip-auto[data-popper-placement^=\"right\"] {\n  padding: 0 0.4rem;\n}\n\n.bs-tooltip-end .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=\"right\"] .tooltip-arrow {\n  left: 0;\n  width: 0.4rem;\n  height: 0.8rem;\n}\n\n.bs-tooltip-end .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=\"right\"] .tooltip-arrow::before {\n  right: -1px;\n  border-width: 0.4rem 0.4rem 0.4rem 0;\n  border-right-color: #444;\n}\n\n.bs-tooltip-bottom, .bs-tooltip-auto[data-popper-placement^=\"bottom\"] {\n  padding: 0.4rem 0;\n}\n\n.bs-tooltip-bottom .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=\"bottom\"] .tooltip-arrow {\n  top: 0;\n}\n\n.bs-tooltip-bottom .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=\"bottom\"] .tooltip-arrow::before {\n  bottom: -1px;\n  border-width: 0 0.4rem 0.4rem;\n  border-bottom-color: #444;\n}\n\n.bs-tooltip-start, .bs-tooltip-auto[data-popper-placement^=\"left\"] {\n  padding: 0 0.4rem;\n}\n\n.bs-tooltip-start .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=\"left\"] .tooltip-arrow {\n  right: 0;\n  width: 0.4rem;\n  height: 0.8rem;\n}\n\n.bs-tooltip-start .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=\"left\"] .tooltip-arrow::before {\n  left: -1px;\n  border-width: 0.4rem 0 0.4rem 0.4rem;\n  border-left-color: #444;\n}\n\n.tooltip-inner {\n  max-width: 200px;\n  padding: 0.25rem 0.5rem;\n  color: #fff;\n  text-align: center;\n  background-color: #444;\n  border-radius: 0.25rem;\n}\n\n.popover {\n  position: absolute;\n  top: 0;\n  left: 0 /* rtl:ignore */;\n  z-index: 1070;\n  display: block;\n  max-width: 276px;\n  font-family: var(--bs-font-sans-serif);\n  font-style: normal;\n  font-weight: 400;\n  line-height: 1.5;\n  text-align: left;\n  text-align: start;\n  text-decoration: none;\n  text-shadow: none;\n  text-transform: none;\n  letter-spacing: normal;\n  word-break: normal;\n  word-spacing: normal;\n  white-space: normal;\n  line-break: auto;\n  font-size: 0.875rem;\n  word-wrap: break-word;\n  background-color: #fff;\n  background-clip: padding-box;\n  border: 1px solid rgba(0, 0, 0, 0.2);\n  border-radius: 0.3rem;\n}\n\n.popover .popover-arrow {\n  position: absolute;\n  display: block;\n  width: 1rem;\n  height: 0.5rem;\n}\n\n.popover .popover-arrow::before, .popover .popover-arrow::after {\n  position: absolute;\n  display: block;\n  content: \"\";\n  border-color: transparent;\n  border-style: solid;\n}\n\n.bs-popover-top > .popover-arrow, .bs-popover-auto[data-popper-placement^=\"top\"] > .popover-arrow {\n  bottom: calc(-0.5rem - 1px);\n}\n\n.bs-popover-top > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=\"top\"] > .popover-arrow::before {\n  bottom: 0;\n  border-width: 0.5rem 0.5rem 0;\n  border-top-color: rgba(0, 0, 0, 0.25);\n}\n\n.bs-popover-top > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=\"top\"] > .popover-arrow::after {\n  bottom: 1px;\n  border-width: 0.5rem 0.5rem 0;\n  border-top-color: #fff;\n}\n\n.bs-popover-end > .popover-arrow, .bs-popover-auto[data-popper-placement^=\"right\"] > .popover-arrow {\n  left: calc(-0.5rem - 1px);\n  width: 0.5rem;\n  height: 1rem;\n}\n\n.bs-popover-end > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=\"right\"] > .popover-arrow::before {\n  left: 0;\n  border-width: 0.5rem 0.5rem 0.5rem 0;\n  border-right-color: rgba(0, 0, 0, 0.25);\n}\n\n.bs-popover-end > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=\"right\"] > .popover-arrow::after {\n  left: 1px;\n  border-width: 0.5rem 0.5rem 0.5rem 0;\n  border-right-color: #fff;\n}\n\n.bs-popover-bottom > .popover-arrow, .bs-popover-auto[data-popper-placement^=\"bottom\"] > .popover-arrow {\n  top: calc(-0.5rem - 1px);\n}\n\n.bs-popover-bottom > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=\"bottom\"] > .popover-arrow::before {\n  top: 0;\n  border-width: 0 0.5rem 0.5rem 0.5rem;\n  border-bottom-color: rgba(0, 0, 0, 0.25);\n}\n\n.bs-popover-bottom > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=\"bottom\"] > .popover-arrow::after {\n  top: 1px;\n  border-width: 0 0.5rem 0.5rem 0.5rem;\n  border-bottom-color: #fff;\n}\n\n.bs-popover-bottom .popover-header::before, .bs-popover-auto[data-popper-placement^=\"bottom\"] .popover-header::before {\n  position: absolute;\n  top: 0;\n  left: 50%;\n  display: block;\n  width: 1rem;\n  margin-left: -0.5rem;\n  content: \"\";\n  border-bottom: 1px solid #f0f0f0;\n}\n\n.bs-popover-start > .popover-arrow, .bs-popover-auto[data-popper-placement^=\"left\"] > .popover-arrow {\n  right: calc(-0.5rem - 1px);\n  width: 0.5rem;\n  height: 1rem;\n}\n\n.bs-popover-start > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=\"left\"] > .popover-arrow::before {\n  right: 0;\n  border-width: 0.5rem 0 0.5rem 0.5rem;\n  border-left-color: rgba(0, 0, 0, 0.25);\n}\n\n.bs-popover-start > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=\"left\"] > .popover-arrow::after {\n  right: 1px;\n  border-width: 0.5rem 0 0.5rem 0.5rem;\n  border-left-color: #fff;\n}\n\n.popover-header {\n  padding: 0.5rem 1rem;\n  margin-bottom: 0;\n  font-size: 1rem;\n  background-color: #f0f0f0;\n  border-bottom: 1px solid rgba(0, 0, 0, 0.2);\n  border-top-left-radius: calc(0.3rem - 1px);\n  border-top-right-radius: calc(0.3rem - 1px);\n}\n\n.popover-header:empty {\n  display: none;\n}\n\n.popover-body {\n  padding: 1rem 1rem;\n  color: #444;\n}\n\n.carousel {\n  position: relative;\n}\n\n.carousel.pointer-event {\n  -ms-touch-action: pan-y;\n  touch-action: pan-y;\n}\n\n.carousel-inner {\n  position: relative;\n  width: 100%;\n  overflow: hidden;\n}\n\n.carousel-inner::after {\n  display: block;\n  clear: both;\n  content: \"\";\n}\n\n.carousel-item {\n  position: relative;\n  display: none;\n  float: left;\n  width: 100%;\n  margin-right: -100%;\n  -webkit-backface-visibility: hidden;\n  backface-visibility: hidden;\n  transition: -webkit-transform 0.6s ease-in-out;\n  transition: transform 0.6s ease-in-out;\n  transition: transform 0.6s ease-in-out, -webkit-transform 0.6s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .carousel-item {\n    transition: none;\n  }\n}\n\n.carousel-item.active,\n.carousel-item-next,\n.carousel-item-prev {\n  display: block;\n}\n\n/* rtl:begin:ignore */\n.carousel-item-next:not(.carousel-item-start),\n.active.carousel-item-end {\n  -webkit-transform: translateX(100%);\n  transform: translateX(100%);\n}\n\n.carousel-item-prev:not(.carousel-item-end),\n.active.carousel-item-start {\n  -webkit-transform: translateX(-100%);\n  transform: translateX(-100%);\n}\n\n/* rtl:end:ignore */\n.carousel-fade .carousel-item {\n  opacity: 0;\n  transition-property: opacity;\n  -webkit-transform: none;\n  transform: none;\n}\n\n.carousel-fade .carousel-item.active,\n.carousel-fade .carousel-item-next.carousel-item-start,\n.carousel-fade .carousel-item-prev.carousel-item-end {\n  z-index: 1;\n  opacity: 1;\n}\n\n.carousel-fade .active.carousel-item-start,\n.carousel-fade .active.carousel-item-end {\n  z-index: 0;\n  opacity: 0;\n  transition: opacity 0s 0.6s;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .carousel-fade .active.carousel-item-start,\n  .carousel-fade .active.carousel-item-end {\n    transition: none;\n  }\n}\n\n.carousel-control-prev,\n.carousel-control-next {\n  position: absolute;\n  top: 0;\n  bottom: 0;\n  z-index: 1;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-align: center;\n  align-items: center;\n  -ms-flex-pack: center;\n  justify-content: center;\n  width: 15%;\n  padding: 0;\n  color: #fff;\n  text-align: center;\n  background: none;\n  border: 0;\n  opacity: 0.5;\n  transition: opacity 0.15s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .carousel-control-prev,\n  .carousel-control-next {\n    transition: none;\n  }\n}\n\n.carousel-control-prev:hover, .carousel-control-prev:focus,\n.carousel-control-next:hover,\n.carousel-control-next:focus {\n  color: #fff;\n  text-decoration: none;\n  outline: 0;\n  opacity: 0.9;\n}\n\n.carousel-control-prev {\n  left: 0;\n  background-image: linear-gradient(90deg, rgba(0, 0, 0, 0.25), rgba(0, 0, 0, 0.001));\n}\n\n.carousel-control-next {\n  right: 0;\n  background-image: linear-gradient(270deg, rgba(0, 0, 0, 0.25), rgba(0, 0, 0, 0.001));\n}\n\n.carousel-control-prev-icon,\n.carousel-control-next-icon {\n  display: inline-block;\n  width: 2rem;\n  height: 2rem;\n  background-repeat: no-repeat;\n  background-position: 50%;\n  background-size: 100% 100%;\n}\n\n/* rtl:options: {\n  \"autoRename\": true,\n  \"stringMap\":[ {\n    \"name\"    : \"prev-next\",\n    \"search\"  : \"prev\",\n    \"replace\" : \"next\"\n  } ]\n} */\n.carousel-control-prev-icon {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0z'/%3e%3c/svg%3e\");\n}\n\n.carousel-control-next-icon {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e\");\n}\n\n.carousel-indicators {\n  position: absolute;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 2;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-pack: center;\n  justify-content: center;\n  padding: 0;\n  margin-right: 15%;\n  margin-bottom: 1rem;\n  margin-left: 15%;\n  list-style: none;\n}\n\n.carousel-indicators [data-bs-target] {\n  box-sizing: content-box;\n  -ms-flex: 0 1 auto;\n  flex: 0 1 auto;\n  width: 30px;\n  height: 3px;\n  padding: 0;\n  margin-right: 3px;\n  margin-left: 3px;\n  text-indent: -999px;\n  cursor: pointer;\n  background-color: #fff;\n  background-clip: padding-box;\n  border: 0;\n  border-top: 10px solid transparent;\n  border-bottom: 10px solid transparent;\n  opacity: 0.5;\n  transition: opacity 0.6s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .carousel-indicators [data-bs-target] {\n    transition: none;\n  }\n}\n\n.carousel-indicators .active {\n  opacity: 1;\n}\n\n.carousel-caption {\n  position: absolute;\n  right: 15%;\n  bottom: 1.25rem;\n  left: 15%;\n  padding-top: 1.25rem;\n  padding-bottom: 1.25rem;\n  color: #fff;\n  text-align: center;\n}\n\n.carousel-dark .carousel-control-prev-icon,\n.carousel-dark .carousel-control-next-icon {\n  -webkit-filter: invert(1) grayscale(100);\n  filter: invert(1) grayscale(100);\n}\n\n.carousel-dark .carousel-indicators [data-bs-target] {\n  background-color: #000;\n}\n\n.carousel-dark .carousel-caption {\n  color: #000;\n}\n\n@-webkit-keyframes spinner-border {\n  to {\n    -webkit-transform: rotate(360deg) /* rtl:ignore */;\n    transform: rotate(360deg) /* rtl:ignore */;\n  }\n}\n\n@keyframes spinner-border {\n  to {\n    -webkit-transform: rotate(360deg) /* rtl:ignore */;\n    transform: rotate(360deg) /* rtl:ignore */;\n  }\n}\n\n.spinner-border {\n  display: inline-block;\n  width: 2rem;\n  height: 2rem;\n  vertical-align: -0.125em;\n  border: 0.25em solid currentColor;\n  border-right-color: transparent;\n  border-radius: 50%;\n  -webkit-animation: 0.75s linear infinite spinner-border;\n  animation: 0.75s linear infinite spinner-border;\n}\n\n.spinner-border-sm {\n  width: 1rem;\n  height: 1rem;\n  border-width: 0.2em;\n}\n\n@-webkit-keyframes spinner-grow {\n  0% {\n    -webkit-transform: scale(0);\n    transform: scale(0);\n  }\n  50% {\n    opacity: 1;\n    -webkit-transform: none;\n    transform: none;\n  }\n}\n\n@keyframes spinner-grow {\n  0% {\n    -webkit-transform: scale(0);\n    transform: scale(0);\n  }\n  50% {\n    opacity: 1;\n    -webkit-transform: none;\n    transform: none;\n  }\n}\n\n.spinner-grow {\n  display: inline-block;\n  width: 2rem;\n  height: 2rem;\n  vertical-align: -0.125em;\n  background-color: currentColor;\n  border-radius: 50%;\n  opacity: 0;\n  -webkit-animation: 0.75s linear infinite spinner-grow;\n  animation: 0.75s linear infinite spinner-grow;\n}\n\n.spinner-grow-sm {\n  width: 1rem;\n  height: 1rem;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .spinner-border,\n  .spinner-grow {\n    -webkit-animation-duration: 1.5s;\n    animation-duration: 1.5s;\n  }\n}\n\n.offcanvas {\n  position: fixed;\n  bottom: 0;\n  z-index: 1045;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  max-width: 100%;\n  visibility: hidden;\n  background-color: #fff;\n  background-clip: padding-box;\n  outline: 0;\n  transition: -webkit-transform 0.3s ease-in-out;\n  transition: transform 0.3s ease-in-out;\n  transition: transform 0.3s ease-in-out, -webkit-transform 0.3s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .offcanvas {\n    transition: none;\n  }\n}\n\n.offcanvas-backdrop {\n  position: fixed;\n  top: 0;\n  left: 0;\n  z-index: 1040;\n  width: 100vw;\n  height: 100vh;\n  background-color: #000;\n}\n\n.offcanvas-backdrop.fade {\n  opacity: 0;\n}\n\n.offcanvas-backdrop.show {\n  opacity: 0.5;\n}\n\n.offcanvas-header {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-align: center;\n  align-items: center;\n  -ms-flex-pack: justify;\n  justify-content: space-between;\n  padding: 1rem 1rem;\n}\n\n.offcanvas-header .btn-close {\n  padding: 0.5rem 0.5rem;\n  margin-top: -0.5rem;\n  margin-right: -0.5rem;\n  margin-bottom: -0.5rem;\n}\n\n.offcanvas-title {\n  margin-bottom: 0;\n  line-height: 1.5;\n}\n\n.offcanvas-body {\n  -ms-flex-positive: 1;\n  flex-grow: 1;\n  padding: 1rem 1rem;\n  overflow-y: auto;\n}\n\n.offcanvas-start {\n  top: 0;\n  left: 0;\n  width: 400px;\n  border-right: 1px solid transparent;\n  -webkit-transform: translateX(-100%);\n  transform: translateX(-100%);\n}\n\n.offcanvas-end {\n  top: 0;\n  right: 0;\n  width: 400px;\n  border-left: 1px solid transparent;\n  -webkit-transform: translateX(100%);\n  transform: translateX(100%);\n}\n\n.offcanvas-top {\n  top: 0;\n  right: 0;\n  left: 0;\n  height: 30vh;\n  max-height: 100%;\n  border-bottom: 1px solid transparent;\n  -webkit-transform: translateY(-100%);\n  transform: translateY(-100%);\n}\n\n.offcanvas-bottom {\n  right: 0;\n  left: 0;\n  height: 30vh;\n  max-height: 100%;\n  border-top: 1px solid transparent;\n  -webkit-transform: translateY(100%);\n  transform: translateY(100%);\n}\n\n.offcanvas.show {\n  -webkit-transform: none;\n  transform: none;\n}\n\n.placeholder {\n  display: inline-block;\n  min-height: 1em;\n  vertical-align: middle;\n  cursor: wait;\n  background-color: currentColor;\n  opacity: 0.5;\n}\n\n.placeholder.btn::before {\n  display: inline-block;\n  content: \"\";\n}\n\n.placeholder-xs {\n  min-height: .6em;\n}\n\n.placeholder-sm {\n  min-height: .8em;\n}\n\n.placeholder-lg {\n  min-height: 1.2em;\n}\n\n.placeholder-glow .placeholder {\n  -webkit-animation: placeholder-glow 2s ease-in-out infinite;\n  animation: placeholder-glow 2s ease-in-out infinite;\n}\n\n@-webkit-keyframes placeholder-glow {\n  50% {\n    opacity: 0.2;\n  }\n}\n\n@keyframes placeholder-glow {\n  50% {\n    opacity: 0.2;\n  }\n}\n\n.placeholder-wave {\n  -webkit-mask-image: linear-gradient(130deg, #000 55%, rgba(0, 0, 0, 0.8) 75%, #000 95%);\n  mask-image: linear-gradient(130deg, #000 55%, rgba(0, 0, 0, 0.8) 75%, #000 95%);\n  -webkit-mask-size: 200% 100%;\n  mask-size: 200% 100%;\n  -webkit-animation: placeholder-wave 2s linear infinite;\n  animation: placeholder-wave 2s linear infinite;\n}\n\n@-webkit-keyframes placeholder-wave {\n  100% {\n    -webkit-mask-position: -200% 0%;\n    mask-position: -200% 0%;\n  }\n}\n\n@keyframes placeholder-wave {\n  100% {\n    -webkit-mask-position: -200% 0%;\n    mask-position: -200% 0%;\n  }\n}\n\n.clearfix::after {\n  display: block;\n  clear: both;\n  content: \"\";\n}\n\n.link-primary {\n  color: #2196f3;\n}\n\n.link-primary:hover, .link-primary:focus {\n  color: #1a78c2;\n}\n\n.link-secondary {\n  color: #fff;\n}\n\n.link-secondary:hover, .link-secondary:focus {\n  color: white;\n}\n\n.link-success {\n  color: #4caf50;\n}\n\n.link-success:hover, .link-success:focus {\n  color: #3d8c40;\n}\n\n.link-info {\n  color: #9c27b0;\n}\n\n.link-info:hover, .link-info:focus {\n  color: #7d1f8d;\n}\n\n.link-warning {\n  color: #ff9800;\n}\n\n.link-warning:hover, .link-warning:focus {\n  color: #cc7a00;\n}\n\n.link-danger {\n  color: #e51c23;\n}\n\n.link-danger:hover, .link-danger:focus {\n  color: #b7161c;\n}\n\n.link-light {\n  color: #f8f9fa;\n}\n\n.link-light:hover, .link-light:focus {\n  color: #f9fafb;\n}\n\n.link-dark {\n  color: #222;\n}\n\n.link-dark:hover, .link-dark:focus {\n  color: #1b1b1b;\n}\n\n.ratio {\n  position: relative;\n  width: 100%;\n}\n\n.ratio::before {\n  display: block;\n  padding-top: var(--bs-aspect-ratio);\n  content: \"\";\n}\n\n.ratio > * {\n  position: absolute;\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n}\n\n.ratio-1x1 {\n  --bs-aspect-ratio: 100%;\n}\n\n.ratio-4x3 {\n  --bs-aspect-ratio: calc(3 / 4 * 100%);\n}\n\n.ratio-16x9 {\n  --bs-aspect-ratio: calc(9 / 16 * 100%);\n}\n\n.ratio-21x9 {\n  --bs-aspect-ratio: calc(9 / 21 * 100%);\n}\n\n.fixed-top {\n  position: fixed;\n  top: 0;\n  right: 0;\n  left: 0;\n  z-index: 1030;\n}\n\n.fixed-bottom {\n  position: fixed;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 1030;\n}\n\n.sticky-top {\n  position: -webkit-sticky;\n  position: sticky;\n  top: 0;\n  z-index: 1020;\n}\n\n@media (min-width: 576px) {\n  .sticky-sm-top {\n    position: -webkit-sticky;\n    position: sticky;\n    top: 0;\n    z-index: 1020;\n  }\n}\n\n@media (min-width: 768px) {\n  .sticky-md-top {\n    position: -webkit-sticky;\n    position: sticky;\n    top: 0;\n    z-index: 1020;\n  }\n}\n\n@media (min-width: 992px) {\n  .sticky-lg-top {\n    position: -webkit-sticky;\n    position: sticky;\n    top: 0;\n    z-index: 1020;\n  }\n}\n\n@media (min-width: 1200px) {\n  .sticky-xl-top {\n    position: -webkit-sticky;\n    position: sticky;\n    top: 0;\n    z-index: 1020;\n  }\n}\n\n@media (min-width: 1400px) {\n  .sticky-xxl-top {\n    position: -webkit-sticky;\n    position: sticky;\n    top: 0;\n    z-index: 1020;\n  }\n}\n\n.hstack {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-direction: row;\n  flex-direction: row;\n  -ms-flex-align: center;\n  align-items: center;\n  -ms-flex-item-align: stretch;\n  align-self: stretch;\n}\n\n.vstack {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex: 1 1 auto;\n  flex: 1 1 auto;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  -ms-flex-item-align: stretch;\n  align-self: stretch;\n}\n\n.visually-hidden,\n.visually-hidden-focusable:not(:focus):not(:focus-within) {\n  position: absolute !important;\n  width: 1px !important;\n  height: 1px !important;\n  padding: 0 !important;\n  margin: -1px !important;\n  overflow: hidden !important;\n  clip: rect(0, 0, 0, 0) !important;\n  white-space: nowrap !important;\n  border: 0 !important;\n}\n\n.stretched-link::after {\n  position: absolute;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 1;\n  content: \"\";\n}\n\n.text-truncate {\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n}\n\n.vr {\n  display: inline-block;\n  -ms-flex-item-align: stretch;\n  align-self: stretch;\n  width: 1px;\n  min-height: 1em;\n  background-color: currentColor;\n  opacity: 0.25;\n}\n\n.align-baseline {\n  vertical-align: baseline !important;\n}\n\n.align-top {\n  vertical-align: top !important;\n}\n\n.align-middle {\n  vertical-align: middle !important;\n}\n\n.align-bottom {\n  vertical-align: bottom !important;\n}\n\n.align-text-bottom {\n  vertical-align: text-bottom !important;\n}\n\n.align-text-top {\n  vertical-align: text-top !important;\n}\n\n.float-start {\n  float: left !important;\n}\n\n.float-end {\n  float: right !important;\n}\n\n.float-none {\n  float: none !important;\n}\n\n.opacity-0 {\n  opacity: 0 !important;\n}\n\n.opacity-25 {\n  opacity: 0.25 !important;\n}\n\n.opacity-50 {\n  opacity: 0.5 !important;\n}\n\n.opacity-75 {\n  opacity: 0.75 !important;\n}\n\n.opacity-100 {\n  opacity: 1 !important;\n}\n\n.overflow-auto {\n  overflow: auto !important;\n}\n\n.overflow-hidden {\n  overflow: hidden !important;\n}\n\n.overflow-visible {\n  overflow: visible !important;\n}\n\n.overflow-scroll {\n  overflow: scroll !important;\n}\n\n.d-inline {\n  display: inline !important;\n}\n\n.d-inline-block {\n  display: inline-block !important;\n}\n\n.d-block {\n  display: block !important;\n}\n\n.d-grid {\n  display: grid !important;\n}\n\n.d-table {\n  display: table !important;\n}\n\n.d-table-row {\n  display: table-row !important;\n}\n\n.d-table-cell {\n  display: table-cell !important;\n}\n\n.d-flex {\n  display: -ms-flexbox !important;\n  display: flex !important;\n}\n\n.d-inline-flex {\n  display: -ms-inline-flexbox !important;\n  display: inline-flex !important;\n}\n\n.d-none {\n  display: none !important;\n}\n\n.shadow {\n  box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15) !important;\n}\n\n.shadow-sm {\n  box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075) !important;\n}\n\n.shadow-lg {\n  box-shadow: 0 1rem 3rem rgba(0, 0, 0, 0.175) !important;\n}\n\n.shadow-none {\n  box-shadow: none !important;\n}\n\n.position-static {\n  position: static !important;\n}\n\n.position-relative {\n  position: relative !important;\n}\n\n.position-absolute {\n  position: absolute !important;\n}\n\n.position-fixed {\n  position: fixed !important;\n}\n\n.position-sticky {\n  position: -webkit-sticky !important;\n  position: sticky !important;\n}\n\n.top-0 {\n  top: 0 !important;\n}\n\n.top-50 {\n  top: 50% !important;\n}\n\n.top-100 {\n  top: 100% !important;\n}\n\n.bottom-0 {\n  bottom: 0 !important;\n}\n\n.bottom-50 {\n  bottom: 50% !important;\n}\n\n.bottom-100 {\n  bottom: 100% !important;\n}\n\n.start-0 {\n  left: 0 !important;\n}\n\n.start-50 {\n  left: 50% !important;\n}\n\n.start-100 {\n  left: 100% !important;\n}\n\n.end-0 {\n  right: 0 !important;\n}\n\n.end-50 {\n  right: 50% !important;\n}\n\n.end-100 {\n  right: 100% !important;\n}\n\n.translate-middle {\n  -webkit-transform: translate(-50%, -50%) !important;\n  transform: translate(-50%, -50%) !important;\n}\n\n.translate-middle-x {\n  -webkit-transform: translateX(-50%) !important;\n  transform: translateX(-50%) !important;\n}\n\n.translate-middle-y {\n  -webkit-transform: translateY(-50%) !important;\n  transform: translateY(-50%) !important;\n}\n\n.border {\n  border: 1px solid #dee2e6 !important;\n}\n\n.border-0 {\n  border: 0 !important;\n}\n\n.border-top {\n  border-top: 1px solid #dee2e6 !important;\n}\n\n.border-top-0 {\n  border-top: 0 !important;\n}\n\n.border-end {\n  border-right: 1px solid #dee2e6 !important;\n}\n\n.border-end-0 {\n  border-right: 0 !important;\n}\n\n.border-bottom {\n  border-bottom: 1px solid #dee2e6 !important;\n}\n\n.border-bottom-0 {\n  border-bottom: 0 !important;\n}\n\n.border-start {\n  border-left: 1px solid #dee2e6 !important;\n}\n\n.border-start-0 {\n  border-left: 0 !important;\n}\n\n.border-primary {\n  border-color: #2196f3 !important;\n}\n\n.border-secondary {\n  border-color: #fff !important;\n}\n\n.border-success {\n  border-color: #4caf50 !important;\n}\n\n.border-info {\n  border-color: #9c27b0 !important;\n}\n\n.border-warning {\n  border-color: #ff9800 !important;\n}\n\n.border-danger {\n  border-color: #e51c23 !important;\n}\n\n.border-light {\n  border-color: #f8f9fa !important;\n}\n\n.border-dark {\n  border-color: #222 !important;\n}\n\n.border-white {\n  border-color: #fff !important;\n}\n\n.border-1 {\n  border-width: 1px !important;\n}\n\n.border-2 {\n  border-width: 2px !important;\n}\n\n.border-3 {\n  border-width: 3px !important;\n}\n\n.border-4 {\n  border-width: 4px !important;\n}\n\n.border-5 {\n  border-width: 5px !important;\n}\n\n.w-25 {\n  width: 25% !important;\n}\n\n.w-50 {\n  width: 50% !important;\n}\n\n.w-75 {\n  width: 75% !important;\n}\n\n.w-100 {\n  width: 100% !important;\n}\n\n.w-auto {\n  width: auto !important;\n}\n\n.mw-100 {\n  max-width: 100% !important;\n}\n\n.vw-100 {\n  width: 100vw !important;\n}\n\n.min-vw-100 {\n  min-width: 100vw !important;\n}\n\n.h-25 {\n  height: 25% !important;\n}\n\n.h-50 {\n  height: 50% !important;\n}\n\n.h-75 {\n  height: 75% !important;\n}\n\n.h-100 {\n  height: 100% !important;\n}\n\n.h-auto {\n  height: auto !important;\n}\n\n.mh-100 {\n  max-height: 100% !important;\n}\n\n.vh-100 {\n  height: 100vh !important;\n}\n\n.min-vh-100 {\n  min-height: 100vh !important;\n}\n\n.flex-fill {\n  -ms-flex: 1 1 auto !important;\n  flex: 1 1 auto !important;\n}\n\n.flex-row {\n  -ms-flex-direction: row !important;\n  flex-direction: row !important;\n}\n\n.flex-column {\n  -ms-flex-direction: column !important;\n  flex-direction: column !important;\n}\n\n.flex-row-reverse {\n  -ms-flex-direction: row-reverse !important;\n  flex-direction: row-reverse !important;\n}\n\n.flex-column-reverse {\n  -ms-flex-direction: column-reverse !important;\n  flex-direction: column-reverse !important;\n}\n\n.flex-grow-0 {\n  -ms-flex-positive: 0 !important;\n  flex-grow: 0 !important;\n}\n\n.flex-grow-1 {\n  -ms-flex-positive: 1 !important;\n  flex-grow: 1 !important;\n}\n\n.flex-shrink-0 {\n  -ms-flex-negative: 0 !important;\n  flex-shrink: 0 !important;\n}\n\n.flex-shrink-1 {\n  -ms-flex-negative: 1 !important;\n  flex-shrink: 1 !important;\n}\n\n.flex-wrap {\n  -ms-flex-wrap: wrap !important;\n  flex-wrap: wrap !important;\n}\n\n.flex-nowrap {\n  -ms-flex-wrap: nowrap !important;\n  flex-wrap: nowrap !important;\n}\n\n.flex-wrap-reverse {\n  -ms-flex-wrap: wrap-reverse !important;\n  flex-wrap: wrap-reverse !important;\n}\n\n.gap-0 {\n  gap: 0 !important;\n}\n\n.gap-1 {\n  gap: 0.25rem !important;\n}\n\n.gap-2 {\n  gap: 0.5rem !important;\n}\n\n.gap-3 {\n  gap: 1rem !important;\n}\n\n.gap-4 {\n  gap: 1.5rem !important;\n}\n\n.gap-5 {\n  gap: 3rem !important;\n}\n\n.justify-content-start {\n  -ms-flex-pack: start !important;\n  justify-content: flex-start !important;\n}\n\n.justify-content-end {\n  -ms-flex-pack: end !important;\n  justify-content: flex-end !important;\n}\n\n.justify-content-center {\n  -ms-flex-pack: center !important;\n  justify-content: center !important;\n}\n\n.justify-content-between {\n  -ms-flex-pack: justify !important;\n  justify-content: space-between !important;\n}\n\n.justify-content-around {\n  -ms-flex-pack: distribute !important;\n  justify-content: space-around !important;\n}\n\n.justify-content-evenly {\n  -ms-flex-pack: space-evenly !important;\n  justify-content: space-evenly !important;\n}\n\n.align-items-start {\n  -ms-flex-align: start !important;\n  align-items: flex-start !important;\n}\n\n.align-items-end {\n  -ms-flex-align: end !important;\n  align-items: flex-end !important;\n}\n\n.align-items-center {\n  -ms-flex-align: center !important;\n  align-items: center !important;\n}\n\n.align-items-baseline {\n  -ms-flex-align: baseline !important;\n  align-items: baseline !important;\n}\n\n.align-items-stretch {\n  -ms-flex-align: stretch !important;\n  align-items: stretch !important;\n}\n\n.align-content-start {\n  -ms-flex-line-pack: start !important;\n  align-content: flex-start !important;\n}\n\n.align-content-end {\n  -ms-flex-line-pack: end !important;\n  align-content: flex-end !important;\n}\n\n.align-content-center {\n  -ms-flex-line-pack: center !important;\n  align-content: center !important;\n}\n\n.align-content-between {\n  -ms-flex-line-pack: justify !important;\n  align-content: space-between !important;\n}\n\n.align-content-around {\n  -ms-flex-line-pack: distribute !important;\n  align-content: space-around !important;\n}\n\n.align-content-stretch {\n  -ms-flex-line-pack: stretch !important;\n  align-content: stretch !important;\n}\n\n.align-self-auto {\n  -ms-flex-item-align: auto !important;\n  align-self: auto !important;\n}\n\n.align-self-start {\n  -ms-flex-item-align: start !important;\n  align-self: flex-start !important;\n}\n\n.align-self-end {\n  -ms-flex-item-align: end !important;\n  align-self: flex-end !important;\n}\n\n.align-self-center {\n  -ms-flex-item-align: center !important;\n  align-self: center !important;\n}\n\n.align-self-baseline {\n  -ms-flex-item-align: baseline !important;\n  align-self: baseline !important;\n}\n\n.align-self-stretch {\n  -ms-flex-item-align: stretch !important;\n  align-self: stretch !important;\n}\n\n.order-first {\n  -ms-flex-order: -1 !important;\n  order: -1 !important;\n}\n\n.order-0 {\n  -ms-flex-order: 0 !important;\n  order: 0 !important;\n}\n\n.order-1 {\n  -ms-flex-order: 1 !important;\n  order: 1 !important;\n}\n\n.order-2 {\n  -ms-flex-order: 2 !important;\n  order: 2 !important;\n}\n\n.order-3 {\n  -ms-flex-order: 3 !important;\n  order: 3 !important;\n}\n\n.order-4 {\n  -ms-flex-order: 4 !important;\n  order: 4 !important;\n}\n\n.order-5 {\n  -ms-flex-order: 5 !important;\n  order: 5 !important;\n}\n\n.order-last {\n  -ms-flex-order: 6 !important;\n  order: 6 !important;\n}\n\n.m-0 {\n  margin: 0 !important;\n}\n\n.m-1 {\n  margin: 0.25rem !important;\n}\n\n.m-2 {\n  margin: 0.5rem !important;\n}\n\n.m-3 {\n  margin: 1rem !important;\n}\n\n.m-4 {\n  margin: 1.5rem !important;\n}\n\n.m-5 {\n  margin: 3rem !important;\n}\n\n.m-auto {\n  margin: auto !important;\n}\n\n.mx-0 {\n  margin-right: 0 !important;\n  margin-left: 0 !important;\n}\n\n.mx-1 {\n  margin-right: 0.25rem !important;\n  margin-left: 0.25rem !important;\n}\n\n.mx-2 {\n  margin-right: 0.5rem !important;\n  margin-left: 0.5rem !important;\n}\n\n.mx-3 {\n  margin-right: 1rem !important;\n  margin-left: 1rem !important;\n}\n\n.mx-4 {\n  margin-right: 1.5rem !important;\n  margin-left: 1.5rem !important;\n}\n\n.mx-5 {\n  margin-right: 3rem !important;\n  margin-left: 3rem !important;\n}\n\n.mx-auto {\n  margin-right: auto !important;\n  margin-left: auto !important;\n}\n\n.my-0 {\n  margin-top: 0 !important;\n  margin-bottom: 0 !important;\n}\n\n.my-1 {\n  margin-top: 0.25rem !important;\n  margin-bottom: 0.25rem !important;\n}\n\n.my-2 {\n  margin-top: 0.5rem !important;\n  margin-bottom: 0.5rem !important;\n}\n\n.my-3 {\n  margin-top: 1rem !important;\n  margin-bottom: 1rem !important;\n}\n\n.my-4 {\n  margin-top: 1.5rem !important;\n  margin-bottom: 1.5rem !important;\n}\n\n.my-5 {\n  margin-top: 3rem !important;\n  margin-bottom: 3rem !important;\n}\n\n.my-auto {\n  margin-top: auto !important;\n  margin-bottom: auto !important;\n}\n\n.mt-0 {\n  margin-top: 0 !important;\n}\n\n.mt-1 {\n  margin-top: 0.25rem !important;\n}\n\n.mt-2 {\n  margin-top: 0.5rem !important;\n}\n\n.mt-3 {\n  margin-top: 1rem !important;\n}\n\n.mt-4 {\n  margin-top: 1.5rem !important;\n}\n\n.mt-5 {\n  margin-top: 3rem !important;\n}\n\n.mt-auto {\n  margin-top: auto !important;\n}\n\n.me-0 {\n  margin-right: 0 !important;\n}\n\n.me-1 {\n  margin-right: 0.25rem !important;\n}\n\n.me-2 {\n  margin-right: 0.5rem !important;\n}\n\n.me-3 {\n  margin-right: 1rem !important;\n}\n\n.me-4 {\n  margin-right: 1.5rem !important;\n}\n\n.me-5 {\n  margin-right: 3rem !important;\n}\n\n.me-auto {\n  margin-right: auto !important;\n}\n\n.mb-0 {\n  margin-bottom: 0 !important;\n}\n\n.mb-1 {\n  margin-bottom: 0.25rem !important;\n}\n\n.mb-2 {\n  margin-bottom: 0.5rem !important;\n}\n\n.mb-3 {\n  margin-bottom: 1rem !important;\n}\n\n.mb-4 {\n  margin-bottom: 1.5rem !important;\n}\n\n.mb-5 {\n  margin-bottom: 3rem !important;\n}\n\n.mb-auto {\n  margin-bottom: auto !important;\n}\n\n.ms-0 {\n  margin-left: 0 !important;\n}\n\n.ms-1 {\n  margin-left: 0.25rem !important;\n}\n\n.ms-2 {\n  margin-left: 0.5rem !important;\n}\n\n.ms-3 {\n  margin-left: 1rem !important;\n}\n\n.ms-4 {\n  margin-left: 1.5rem !important;\n}\n\n.ms-5 {\n  margin-left: 3rem !important;\n}\n\n.ms-auto {\n  margin-left: auto !important;\n}\n\n.p-0 {\n  padding: 0 !important;\n}\n\n.p-1 {\n  padding: 0.25rem !important;\n}\n\n.p-2 {\n  padding: 0.5rem !important;\n}\n\n.p-3 {\n  padding: 1rem !important;\n}\n\n.p-4 {\n  padding: 1.5rem !important;\n}\n\n.p-5 {\n  padding: 3rem !important;\n}\n\n.px-0 {\n  padding-right: 0 !important;\n  padding-left: 0 !important;\n}\n\n.px-1 {\n  padding-right: 0.25rem !important;\n  padding-left: 0.25rem !important;\n}\n\n.px-2 {\n  padding-right: 0.5rem !important;\n  padding-left: 0.5rem !important;\n}\n\n.px-3 {\n  padding-right: 1rem !important;\n  padding-left: 1rem !important;\n}\n\n.px-4 {\n  padding-right: 1.5rem !important;\n  padding-left: 1.5rem !important;\n}\n\n.px-5 {\n  padding-right: 3rem !important;\n  padding-left: 3rem !important;\n}\n\n.py-0 {\n  padding-top: 0 !important;\n  padding-bottom: 0 !important;\n}\n\n.py-1 {\n  padding-top: 0.25rem !important;\n  padding-bottom: 0.25rem !important;\n}\n\n.py-2 {\n  padding-top: 0.5rem !important;\n  padding-bottom: 0.5rem !important;\n}\n\n.py-3 {\n  padding-top: 1rem !important;\n  padding-bottom: 1rem !important;\n}\n\n.py-4 {\n  padding-top: 1.5rem !important;\n  padding-bottom: 1.5rem !important;\n}\n\n.py-5 {\n  padding-top: 3rem !important;\n  padding-bottom: 3rem !important;\n}\n\n.pt-0 {\n  padding-top: 0 !important;\n}\n\n.pt-1 {\n  padding-top: 0.25rem !important;\n}\n\n.pt-2 {\n  padding-top: 0.5rem !important;\n}\n\n.pt-3 {\n  padding-top: 1rem !important;\n}\n\n.pt-4 {\n  padding-top: 1.5rem !important;\n}\n\n.pt-5 {\n  padding-top: 3rem !important;\n}\n\n.pe-0 {\n  padding-right: 0 !important;\n}\n\n.pe-1 {\n  padding-right: 0.25rem !important;\n}\n\n.pe-2 {\n  padding-right: 0.5rem !important;\n}\n\n.pe-3 {\n  padding-right: 1rem !important;\n}\n\n.pe-4 {\n  padding-right: 1.5rem !important;\n}\n\n.pe-5 {\n  padding-right: 3rem !important;\n}\n\n.pb-0 {\n  padding-bottom: 0 !important;\n}\n\n.pb-1 {\n  padding-bottom: 0.25rem !important;\n}\n\n.pb-2 {\n  padding-bottom: 0.5rem !important;\n}\n\n.pb-3 {\n  padding-bottom: 1rem !important;\n}\n\n.pb-4 {\n  padding-bottom: 1.5rem !important;\n}\n\n.pb-5 {\n  padding-bottom: 3rem !important;\n}\n\n.ps-0 {\n  padding-left: 0 !important;\n}\n\n.ps-1 {\n  padding-left: 0.25rem !important;\n}\n\n.ps-2 {\n  padding-left: 0.5rem !important;\n}\n\n.ps-3 {\n  padding-left: 1rem !important;\n}\n\n.ps-4 {\n  padding-left: 1.5rem !important;\n}\n\n.ps-5 {\n  padding-left: 3rem !important;\n}\n\n.font-monospace {\n  font-family: var(--bs-font-monospace) !important;\n}\n\n.fs-1 {\n  font-size: calc(1.375rem + 1.5vw) !important;\n}\n\n.fs-2 {\n  font-size: calc(1.325rem + 0.9vw) !important;\n}\n\n.fs-3 {\n  font-size: calc(1.3rem + 0.6vw) !important;\n}\n\n.fs-4 {\n  font-size: calc(1.275rem + 0.3vw) !important;\n}\n\n.fs-5 {\n  font-size: 1.25rem !important;\n}\n\n.fs-6 {\n  font-size: 1rem !important;\n}\n\n.fst-italic {\n  font-style: italic !important;\n}\n\n.fst-normal {\n  font-style: normal !important;\n}\n\n.fw-light {\n  font-weight: 300 !important;\n}\n\n.fw-lighter {\n  font-weight: lighter !important;\n}\n\n.fw-normal {\n  font-weight: 400 !important;\n}\n\n.fw-bold {\n  font-weight: 700 !important;\n}\n\n.fw-bolder {\n  font-weight: bolder !important;\n}\n\n.lh-1 {\n  line-height: 1 !important;\n}\n\n.lh-sm {\n  line-height: 1.25 !important;\n}\n\n.lh-base {\n  line-height: 1.5 !important;\n}\n\n.lh-lg {\n  line-height: 2 !important;\n}\n\n.text-start {\n  text-align: left !important;\n}\n\n.text-end {\n  text-align: right !important;\n}\n\n.text-center {\n  text-align: center !important;\n}\n\n.text-decoration-none {\n  text-decoration: none !important;\n}\n\n.text-decoration-underline {\n  text-decoration: underline !important;\n}\n\n.text-decoration-line-through {\n  text-decoration: line-through !important;\n}\n\n.text-lowercase {\n  text-transform: lowercase !important;\n}\n\n.text-uppercase {\n  text-transform: uppercase !important;\n}\n\n.text-capitalize {\n  text-transform: capitalize !important;\n}\n\n.text-wrap {\n  white-space: normal !important;\n}\n\n.text-nowrap {\n  white-space: nowrap !important;\n}\n\n/* rtl:begin:remove */\n.text-break {\n  word-wrap: break-word !important;\n  word-break: break-word !important;\n}\n\n/* rtl:end:remove */\n.text-primary {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-primary-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-secondary {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-secondary-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-success {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-success-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-info {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-info-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-warning {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-warning-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-danger {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-danger-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-light {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-light-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-dark {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-dark-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-black {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-black-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-white {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-white-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-body {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-body-color-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-muted {\n  --bs-text-opacity: 1;\n  color: #666 !important;\n}\n\n.text-black-50 {\n  --bs-text-opacity: 1;\n  color: rgba(0, 0, 0, 0.5) !important;\n}\n\n.text-white-50 {\n  --bs-text-opacity: 1;\n  color: rgba(255, 255, 255, 0.5) !important;\n}\n\n.text-reset {\n  --bs-text-opacity: 1;\n  color: inherit !important;\n}\n\n.text-opacity-25 {\n  --bs-text-opacity: 0.25;\n}\n\n.text-opacity-50 {\n  --bs-text-opacity: 0.5;\n}\n\n.text-opacity-75 {\n  --bs-text-opacity: 0.75;\n}\n\n.text-opacity-100 {\n  --bs-text-opacity: 1;\n}\n\n.bg-primary {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-primary-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-secondary {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-secondary-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-success {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-success-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-info {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-info-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-warning {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-warning-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-danger {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-danger-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-light {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-light-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-dark {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-dark-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-black {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-black-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-white {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-white-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-body {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-body-bg-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-transparent {\n  --bs-bg-opacity: 1;\n  background-color: transparent !important;\n}\n\n.bg-opacity-10 {\n  --bs-bg-opacity: 0.1;\n}\n\n.bg-opacity-25 {\n  --bs-bg-opacity: 0.25;\n}\n\n.bg-opacity-50 {\n  --bs-bg-opacity: 0.5;\n}\n\n.bg-opacity-75 {\n  --bs-bg-opacity: 0.75;\n}\n\n.bg-opacity-100 {\n  --bs-bg-opacity: 1;\n}\n\n.bg-gradient {\n  background-image: var(--bs-gradient) !important;\n}\n\n.user-select-all {\n  -webkit-user-select: all !important;\n  -moz-user-select: all !important;\n  user-select: all !important;\n}\n\n.user-select-auto {\n  -webkit-user-select: auto !important;\n  -moz-user-select: auto !important;\n  -ms-user-select: auto !important;\n  user-select: auto !important;\n}\n\n.user-select-none {\n  -webkit-user-select: none !important;\n  -moz-user-select: none !important;\n  -ms-user-select: none !important;\n  user-select: none !important;\n}\n\n.pe-none {\n  pointer-events: none !important;\n}\n\n.pe-auto {\n  pointer-events: auto !important;\n}\n\n.rounded {\n  border-radius: 0.25rem !important;\n}\n\n.rounded-0 {\n  border-radius: 0 !important;\n}\n\n.rounded-1 {\n  border-radius: 0.2rem !important;\n}\n\n.rounded-2 {\n  border-radius: 0.25rem !important;\n}\n\n.rounded-3 {\n  border-radius: 0.3rem !important;\n}\n\n.rounded-circle {\n  border-radius: 50% !important;\n}\n\n.rounded-pill {\n  border-radius: 50rem !important;\n}\n\n.rounded-top {\n  border-top-left-radius: 0.25rem !important;\n  border-top-right-radius: 0.25rem !important;\n}\n\n.rounded-end {\n  border-top-right-radius: 0.25rem !important;\n  border-bottom-right-radius: 0.25rem !important;\n}\n\n.rounded-bottom {\n  border-bottom-right-radius: 0.25rem !important;\n  border-bottom-left-radius: 0.25rem !important;\n}\n\n.rounded-start {\n  border-bottom-left-radius: 0.25rem !important;\n  border-top-left-radius: 0.25rem !important;\n}\n\n.visible {\n  visibility: visible !important;\n}\n\n.invisible {\n  visibility: hidden !important;\n}\n\n@media (min-width: 576px) {\n  .float-sm-start {\n    float: left !important;\n  }\n  .float-sm-end {\n    float: right !important;\n  }\n  .float-sm-none {\n    float: none !important;\n  }\n  .d-sm-inline {\n    display: inline !important;\n  }\n  .d-sm-inline-block {\n    display: inline-block !important;\n  }\n  .d-sm-block {\n    display: block !important;\n  }\n  .d-sm-grid {\n    display: grid !important;\n  }\n  .d-sm-table {\n    display: table !important;\n  }\n  .d-sm-table-row {\n    display: table-row !important;\n  }\n  .d-sm-table-cell {\n    display: table-cell !important;\n  }\n  .d-sm-flex {\n    display: -ms-flexbox !important;\n    display: flex !important;\n  }\n  .d-sm-inline-flex {\n    display: -ms-inline-flexbox !important;\n    display: inline-flex !important;\n  }\n  .d-sm-none {\n    display: none !important;\n  }\n  .flex-sm-fill {\n    -ms-flex: 1 1 auto !important;\n    flex: 1 1 auto !important;\n  }\n  .flex-sm-row {\n    -ms-flex-direction: row !important;\n    flex-direction: row !important;\n  }\n  .flex-sm-column {\n    -ms-flex-direction: column !important;\n    flex-direction: column !important;\n  }\n  .flex-sm-row-reverse {\n    -ms-flex-direction: row-reverse !important;\n    flex-direction: row-reverse !important;\n  }\n  .flex-sm-column-reverse {\n    -ms-flex-direction: column-reverse !important;\n    flex-direction: column-reverse !important;\n  }\n  .flex-sm-grow-0 {\n    -ms-flex-positive: 0 !important;\n    flex-grow: 0 !important;\n  }\n  .flex-sm-grow-1 {\n    -ms-flex-positive: 1 !important;\n    flex-grow: 1 !important;\n  }\n  .flex-sm-shrink-0 {\n    -ms-flex-negative: 0 !important;\n    flex-shrink: 0 !important;\n  }\n  .flex-sm-shrink-1 {\n    -ms-flex-negative: 1 !important;\n    flex-shrink: 1 !important;\n  }\n  .flex-sm-wrap {\n    -ms-flex-wrap: wrap !important;\n    flex-wrap: wrap !important;\n  }\n  .flex-sm-nowrap {\n    -ms-flex-wrap: nowrap !important;\n    flex-wrap: nowrap !important;\n  }\n  .flex-sm-wrap-reverse {\n    -ms-flex-wrap: wrap-reverse !important;\n    flex-wrap: wrap-reverse !important;\n  }\n  .gap-sm-0 {\n    gap: 0 !important;\n  }\n  .gap-sm-1 {\n    gap: 0.25rem !important;\n  }\n  .gap-sm-2 {\n    gap: 0.5rem !important;\n  }\n  .gap-sm-3 {\n    gap: 1rem !important;\n  }\n  .gap-sm-4 {\n    gap: 1.5rem !important;\n  }\n  .gap-sm-5 {\n    gap: 3rem !important;\n  }\n  .justify-content-sm-start {\n    -ms-flex-pack: start !important;\n    justify-content: flex-start !important;\n  }\n  .justify-content-sm-end {\n    -ms-flex-pack: end !important;\n    justify-content: flex-end !important;\n  }\n  .justify-content-sm-center {\n    -ms-flex-pack: center !important;\n    justify-content: center !important;\n  }\n  .justify-content-sm-between {\n    -ms-flex-pack: justify !important;\n    justify-content: space-between !important;\n  }\n  .justify-content-sm-around {\n    -ms-flex-pack: distribute !important;\n    justify-content: space-around !important;\n  }\n  .justify-content-sm-evenly {\n    -ms-flex-pack: space-evenly !important;\n    justify-content: space-evenly !important;\n  }\n  .align-items-sm-start {\n    -ms-flex-align: start !important;\n    align-items: flex-start !important;\n  }\n  .align-items-sm-end {\n    -ms-flex-align: end !important;\n    align-items: flex-end !important;\n  }\n  .align-items-sm-center {\n    -ms-flex-align: center !important;\n    align-items: center !important;\n  }\n  .align-items-sm-baseline {\n    -ms-flex-align: baseline !important;\n    align-items: baseline !important;\n  }\n  .align-items-sm-stretch {\n    -ms-flex-align: stretch !important;\n    align-items: stretch !important;\n  }\n  .align-content-sm-start {\n    -ms-flex-line-pack: start !important;\n    align-content: flex-start !important;\n  }\n  .align-content-sm-end {\n    -ms-flex-line-pack: end !important;\n    align-content: flex-end !important;\n  }\n  .align-content-sm-center {\n    -ms-flex-line-pack: center !important;\n    align-content: center !important;\n  }\n  .align-content-sm-between {\n    -ms-flex-line-pack: justify !important;\n    align-content: space-between !important;\n  }\n  .align-content-sm-around {\n    -ms-flex-line-pack: distribute !important;\n    align-content: space-around !important;\n  }\n  .align-content-sm-stretch {\n    -ms-flex-line-pack: stretch !important;\n    align-content: stretch !important;\n  }\n  .align-self-sm-auto {\n    -ms-flex-item-align: auto !important;\n    align-self: auto !important;\n  }\n  .align-self-sm-start {\n    -ms-flex-item-align: start !important;\n    align-self: flex-start !important;\n  }\n  .align-self-sm-end {\n    -ms-flex-item-align: end !important;\n    align-self: flex-end !important;\n  }\n  .align-self-sm-center {\n    -ms-flex-item-align: center !important;\n    align-self: center !important;\n  }\n  .align-self-sm-baseline {\n    -ms-flex-item-align: baseline !important;\n    align-self: baseline !important;\n  }\n  .align-self-sm-stretch {\n    -ms-flex-item-align: stretch !important;\n    align-self: stretch !important;\n  }\n  .order-sm-first {\n    -ms-flex-order: -1 !important;\n    order: -1 !important;\n  }\n  .order-sm-0 {\n    -ms-flex-order: 0 !important;\n    order: 0 !important;\n  }\n  .order-sm-1 {\n    -ms-flex-order: 1 !important;\n    order: 1 !important;\n  }\n  .order-sm-2 {\n    -ms-flex-order: 2 !important;\n    order: 2 !important;\n  }\n  .order-sm-3 {\n    -ms-flex-order: 3 !important;\n    order: 3 !important;\n  }\n  .order-sm-4 {\n    -ms-flex-order: 4 !important;\n    order: 4 !important;\n  }\n  .order-sm-5 {\n    -ms-flex-order: 5 !important;\n    order: 5 !important;\n  }\n  .order-sm-last {\n    -ms-flex-order: 6 !important;\n    order: 6 !important;\n  }\n  .m-sm-0 {\n    margin: 0 !important;\n  }\n  .m-sm-1 {\n    margin: 0.25rem !important;\n  }\n  .m-sm-2 {\n    margin: 0.5rem !important;\n  }\n  .m-sm-3 {\n    margin: 1rem !important;\n  }\n  .m-sm-4 {\n    margin: 1.5rem !important;\n  }\n  .m-sm-5 {\n    margin: 3rem !important;\n  }\n  .m-sm-auto {\n    margin: auto !important;\n  }\n  .mx-sm-0 {\n    margin-right: 0 !important;\n    margin-left: 0 !important;\n  }\n  .mx-sm-1 {\n    margin-right: 0.25rem !important;\n    margin-left: 0.25rem !important;\n  }\n  .mx-sm-2 {\n    margin-right: 0.5rem !important;\n    margin-left: 0.5rem !important;\n  }\n  .mx-sm-3 {\n    margin-right: 1rem !important;\n    margin-left: 1rem !important;\n  }\n  .mx-sm-4 {\n    margin-right: 1.5rem !important;\n    margin-left: 1.5rem !important;\n  }\n  .mx-sm-5 {\n    margin-right: 3rem !important;\n    margin-left: 3rem !important;\n  }\n  .mx-sm-auto {\n    margin-right: auto !important;\n    margin-left: auto !important;\n  }\n  .my-sm-0 {\n    margin-top: 0 !important;\n    margin-bottom: 0 !important;\n  }\n  .my-sm-1 {\n    margin-top: 0.25rem !important;\n    margin-bottom: 0.25rem !important;\n  }\n  .my-sm-2 {\n    margin-top: 0.5rem !important;\n    margin-bottom: 0.5rem !important;\n  }\n  .my-sm-3 {\n    margin-top: 1rem !important;\n    margin-bottom: 1rem !important;\n  }\n  .my-sm-4 {\n    margin-top: 1.5rem !important;\n    margin-bottom: 1.5rem !important;\n  }\n  .my-sm-5 {\n    margin-top: 3rem !important;\n    margin-bottom: 3rem !important;\n  }\n  .my-sm-auto {\n    margin-top: auto !important;\n    margin-bottom: auto !important;\n  }\n  .mt-sm-0 {\n    margin-top: 0 !important;\n  }\n  .mt-sm-1 {\n    margin-top: 0.25rem !important;\n  }\n  .mt-sm-2 {\n    margin-top: 0.5rem !important;\n  }\n  .mt-sm-3 {\n    margin-top: 1rem !important;\n  }\n  .mt-sm-4 {\n    margin-top: 1.5rem !important;\n  }\n  .mt-sm-5 {\n    margin-top: 3rem !important;\n  }\n  .mt-sm-auto {\n    margin-top: auto !important;\n  }\n  .me-sm-0 {\n    margin-right: 0 !important;\n  }\n  .me-sm-1 {\n    margin-right: 0.25rem !important;\n  }\n  .me-sm-2 {\n    margin-right: 0.5rem !important;\n  }\n  .me-sm-3 {\n    margin-right: 1rem !important;\n  }\n  .me-sm-4 {\n    margin-right: 1.5rem !important;\n  }\n  .me-sm-5 {\n    margin-right: 3rem !important;\n  }\n  .me-sm-auto {\n    margin-right: auto !important;\n  }\n  .mb-sm-0 {\n    margin-bottom: 0 !important;\n  }\n  .mb-sm-1 {\n    margin-bottom: 0.25rem !important;\n  }\n  .mb-sm-2 {\n    margin-bottom: 0.5rem !important;\n  }\n  .mb-sm-3 {\n    margin-bottom: 1rem !important;\n  }\n  .mb-sm-4 {\n    margin-bottom: 1.5rem !important;\n  }\n  .mb-sm-5 {\n    margin-bottom: 3rem !important;\n  }\n  .mb-sm-auto {\n    margin-bottom: auto !important;\n  }\n  .ms-sm-0 {\n    margin-left: 0 !important;\n  }\n  .ms-sm-1 {\n    margin-left: 0.25rem !important;\n  }\n  .ms-sm-2 {\n    margin-left: 0.5rem !important;\n  }\n  .ms-sm-3 {\n    margin-left: 1rem !important;\n  }\n  .ms-sm-4 {\n    margin-left: 1.5rem !important;\n  }\n  .ms-sm-5 {\n    margin-left: 3rem !important;\n  }\n  .ms-sm-auto {\n    margin-left: auto !important;\n  }\n  .p-sm-0 {\n    padding: 0 !important;\n  }\n  .p-sm-1 {\n    padding: 0.25rem !important;\n  }\n  .p-sm-2 {\n    padding: 0.5rem !important;\n  }\n  .p-sm-3 {\n    padding: 1rem !important;\n  }\n  .p-sm-4 {\n    padding: 1.5rem !important;\n  }\n  .p-sm-5 {\n    padding: 3rem !important;\n  }\n  .px-sm-0 {\n    padding-right: 0 !important;\n    padding-left: 0 !important;\n  }\n  .px-sm-1 {\n    padding-right: 0.25rem !important;\n    padding-left: 0.25rem !important;\n  }\n  .px-sm-2 {\n    padding-right: 0.5rem !important;\n    padding-left: 0.5rem !important;\n  }\n  .px-sm-3 {\n    padding-right: 1rem !important;\n    padding-left: 1rem !important;\n  }\n  .px-sm-4 {\n    padding-right: 1.5rem !important;\n    padding-left: 1.5rem !important;\n  }\n  .px-sm-5 {\n    padding-right: 3rem !important;\n    padding-left: 3rem !important;\n  }\n  .py-sm-0 {\n    padding-top: 0 !important;\n    padding-bottom: 0 !important;\n  }\n  .py-sm-1 {\n    padding-top: 0.25rem !important;\n    padding-bottom: 0.25rem !important;\n  }\n  .py-sm-2 {\n    padding-top: 0.5rem !important;\n    padding-bottom: 0.5rem !important;\n  }\n  .py-sm-3 {\n    padding-top: 1rem !important;\n    padding-bottom: 1rem !important;\n  }\n  .py-sm-4 {\n    padding-top: 1.5rem !important;\n    padding-bottom: 1.5rem !important;\n  }\n  .py-sm-5 {\n    padding-top: 3rem !important;\n    padding-bottom: 3rem !important;\n  }\n  .pt-sm-0 {\n    padding-top: 0 !important;\n  }\n  .pt-sm-1 {\n    padding-top: 0.25rem !important;\n  }\n  .pt-sm-2 {\n    padding-top: 0.5rem !important;\n  }\n  .pt-sm-3 {\n    padding-top: 1rem !important;\n  }\n  .pt-sm-4 {\n    padding-top: 1.5rem !important;\n  }\n  .pt-sm-5 {\n    padding-top: 3rem !important;\n  }\n  .pe-sm-0 {\n    padding-right: 0 !important;\n  }\n  .pe-sm-1 {\n    padding-right: 0.25rem !important;\n  }\n  .pe-sm-2 {\n    padding-right: 0.5rem !important;\n  }\n  .pe-sm-3 {\n    padding-right: 1rem !important;\n  }\n  .pe-sm-4 {\n    padding-right: 1.5rem !important;\n  }\n  .pe-sm-5 {\n    padding-right: 3rem !important;\n  }\n  .pb-sm-0 {\n    padding-bottom: 0 !important;\n  }\n  .pb-sm-1 {\n    padding-bottom: 0.25rem !important;\n  }\n  .pb-sm-2 {\n    padding-bottom: 0.5rem !important;\n  }\n  .pb-sm-3 {\n    padding-bottom: 1rem !important;\n  }\n  .pb-sm-4 {\n    padding-bottom: 1.5rem !important;\n  }\n  .pb-sm-5 {\n    padding-bottom: 3rem !important;\n  }\n  .ps-sm-0 {\n    padding-left: 0 !important;\n  }\n  .ps-sm-1 {\n    padding-left: 0.25rem !important;\n  }\n  .ps-sm-2 {\n    padding-left: 0.5rem !important;\n  }\n  .ps-sm-3 {\n    padding-left: 1rem !important;\n  }\n  .ps-sm-4 {\n    padding-left: 1.5rem !important;\n  }\n  .ps-sm-5 {\n    padding-left: 3rem !important;\n  }\n  .text-sm-start {\n    text-align: left !important;\n  }\n  .text-sm-end {\n    text-align: right !important;\n  }\n  .text-sm-center {\n    text-align: center !important;\n  }\n}\n\n@media (min-width: 768px) {\n  .float-md-start {\n    float: left !important;\n  }\n  .float-md-end {\n    float: right !important;\n  }\n  .float-md-none {\n    float: none !important;\n  }\n  .d-md-inline {\n    display: inline !important;\n  }\n  .d-md-inline-block {\n    display: inline-block !important;\n  }\n  .d-md-block {\n    display: block !important;\n  }\n  .d-md-grid {\n    display: grid !important;\n  }\n  .d-md-table {\n    display: table !important;\n  }\n  .d-md-table-row {\n    display: table-row !important;\n  }\n  .d-md-table-cell {\n    display: table-cell !important;\n  }\n  .d-md-flex {\n    display: -ms-flexbox !important;\n    display: flex !important;\n  }\n  .d-md-inline-flex {\n    display: -ms-inline-flexbox !important;\n    display: inline-flex !important;\n  }\n  .d-md-none {\n    display: none !important;\n  }\n  .flex-md-fill {\n    -ms-flex: 1 1 auto !important;\n    flex: 1 1 auto !important;\n  }\n  .flex-md-row {\n    -ms-flex-direction: row !important;\n    flex-direction: row !important;\n  }\n  .flex-md-column {\n    -ms-flex-direction: column !important;\n    flex-direction: column !important;\n  }\n  .flex-md-row-reverse {\n    -ms-flex-direction: row-reverse !important;\n    flex-direction: row-reverse !important;\n  }\n  .flex-md-column-reverse {\n    -ms-flex-direction: column-reverse !important;\n    flex-direction: column-reverse !important;\n  }\n  .flex-md-grow-0 {\n    -ms-flex-positive: 0 !important;\n    flex-grow: 0 !important;\n  }\n  .flex-md-grow-1 {\n    -ms-flex-positive: 1 !important;\n    flex-grow: 1 !important;\n  }\n  .flex-md-shrink-0 {\n    -ms-flex-negative: 0 !important;\n    flex-shrink: 0 !important;\n  }\n  .flex-md-shrink-1 {\n    -ms-flex-negative: 1 !important;\n    flex-shrink: 1 !important;\n  }\n  .flex-md-wrap {\n    -ms-flex-wrap: wrap !important;\n    flex-wrap: wrap !important;\n  }\n  .flex-md-nowrap {\n    -ms-flex-wrap: nowrap !important;\n    flex-wrap: nowrap !important;\n  }\n  .flex-md-wrap-reverse {\n    -ms-flex-wrap: wrap-reverse !important;\n    flex-wrap: wrap-reverse !important;\n  }\n  .gap-md-0 {\n    gap: 0 !important;\n  }\n  .gap-md-1 {\n    gap: 0.25rem !important;\n  }\n  .gap-md-2 {\n    gap: 0.5rem !important;\n  }\n  .gap-md-3 {\n    gap: 1rem !important;\n  }\n  .gap-md-4 {\n    gap: 1.5rem !important;\n  }\n  .gap-md-5 {\n    gap: 3rem !important;\n  }\n  .justify-content-md-start {\n    -ms-flex-pack: start !important;\n    justify-content: flex-start !important;\n  }\n  .justify-content-md-end {\n    -ms-flex-pack: end !important;\n    justify-content: flex-end !important;\n  }\n  .justify-content-md-center {\n    -ms-flex-pack: center !important;\n    justify-content: center !important;\n  }\n  .justify-content-md-between {\n    -ms-flex-pack: justify !important;\n    justify-content: space-between !important;\n  }\n  .justify-content-md-around {\n    -ms-flex-pack: distribute !important;\n    justify-content: space-around !important;\n  }\n  .justify-content-md-evenly {\n    -ms-flex-pack: space-evenly !important;\n    justify-content: space-evenly !important;\n  }\n  .align-items-md-start {\n    -ms-flex-align: start !important;\n    align-items: flex-start !important;\n  }\n  .align-items-md-end {\n    -ms-flex-align: end !important;\n    align-items: flex-end !important;\n  }\n  .align-items-md-center {\n    -ms-flex-align: center !important;\n    align-items: center !important;\n  }\n  .align-items-md-baseline {\n    -ms-flex-align: baseline !important;\n    align-items: baseline !important;\n  }\n  .align-items-md-stretch {\n    -ms-flex-align: stretch !important;\n    align-items: stretch !important;\n  }\n  .align-content-md-start {\n    -ms-flex-line-pack: start !important;\n    align-content: flex-start !important;\n  }\n  .align-content-md-end {\n    -ms-flex-line-pack: end !important;\n    align-content: flex-end !important;\n  }\n  .align-content-md-center {\n    -ms-flex-line-pack: center !important;\n    align-content: center !important;\n  }\n  .align-content-md-between {\n    -ms-flex-line-pack: justify !important;\n    align-content: space-between !important;\n  }\n  .align-content-md-around {\n    -ms-flex-line-pack: distribute !important;\n    align-content: space-around !important;\n  }\n  .align-content-md-stretch {\n    -ms-flex-line-pack: stretch !important;\n    align-content: stretch !important;\n  }\n  .align-self-md-auto {\n    -ms-flex-item-align: auto !important;\n    align-self: auto !important;\n  }\n  .align-self-md-start {\n    -ms-flex-item-align: start !important;\n    align-self: flex-start !important;\n  }\n  .align-self-md-end {\n    -ms-flex-item-align: end !important;\n    align-self: flex-end !important;\n  }\n  .align-self-md-center {\n    -ms-flex-item-align: center !important;\n    align-self: center !important;\n  }\n  .align-self-md-baseline {\n    -ms-flex-item-align: baseline !important;\n    align-self: baseline !important;\n  }\n  .align-self-md-stretch {\n    -ms-flex-item-align: stretch !important;\n    align-self: stretch !important;\n  }\n  .order-md-first {\n    -ms-flex-order: -1 !important;\n    order: -1 !important;\n  }\n  .order-md-0 {\n    -ms-flex-order: 0 !important;\n    order: 0 !important;\n  }\n  .order-md-1 {\n    -ms-flex-order: 1 !important;\n    order: 1 !important;\n  }\n  .order-md-2 {\n    -ms-flex-order: 2 !important;\n    order: 2 !important;\n  }\n  .order-md-3 {\n    -ms-flex-order: 3 !important;\n    order: 3 !important;\n  }\n  .order-md-4 {\n    -ms-flex-order: 4 !important;\n    order: 4 !important;\n  }\n  .order-md-5 {\n    -ms-flex-order: 5 !important;\n    order: 5 !important;\n  }\n  .order-md-last {\n    -ms-flex-order: 6 !important;\n    order: 6 !important;\n  }\n  .m-md-0 {\n    margin: 0 !important;\n  }\n  .m-md-1 {\n    margin: 0.25rem !important;\n  }\n  .m-md-2 {\n    margin: 0.5rem !important;\n  }\n  .m-md-3 {\n    margin: 1rem !important;\n  }\n  .m-md-4 {\n    margin: 1.5rem !important;\n  }\n  .m-md-5 {\n    margin: 3rem !important;\n  }\n  .m-md-auto {\n    margin: auto !important;\n  }\n  .mx-md-0 {\n    margin-right: 0 !important;\n    margin-left: 0 !important;\n  }\n  .mx-md-1 {\n    margin-right: 0.25rem !important;\n    margin-left: 0.25rem !important;\n  }\n  .mx-md-2 {\n    margin-right: 0.5rem !important;\n    margin-left: 0.5rem !important;\n  }\n  .mx-md-3 {\n    margin-right: 1rem !important;\n    margin-left: 1rem !important;\n  }\n  .mx-md-4 {\n    margin-right: 1.5rem !important;\n    margin-left: 1.5rem !important;\n  }\n  .mx-md-5 {\n    margin-right: 3rem !important;\n    margin-left: 3rem !important;\n  }\n  .mx-md-auto {\n    margin-right: auto !important;\n    margin-left: auto !important;\n  }\n  .my-md-0 {\n    margin-top: 0 !important;\n    margin-bottom: 0 !important;\n  }\n  .my-md-1 {\n    margin-top: 0.25rem !important;\n    margin-bottom: 0.25rem !important;\n  }\n  .my-md-2 {\n    margin-top: 0.5rem !important;\n    margin-bottom: 0.5rem !important;\n  }\n  .my-md-3 {\n    margin-top: 1rem !important;\n    margin-bottom: 1rem !important;\n  }\n  .my-md-4 {\n    margin-top: 1.5rem !important;\n    margin-bottom: 1.5rem !important;\n  }\n  .my-md-5 {\n    margin-top: 3rem !important;\n    margin-bottom: 3rem !important;\n  }\n  .my-md-auto {\n    margin-top: auto !important;\n    margin-bottom: auto !important;\n  }\n  .mt-md-0 {\n    margin-top: 0 !important;\n  }\n  .mt-md-1 {\n    margin-top: 0.25rem !important;\n  }\n  .mt-md-2 {\n    margin-top: 0.5rem !important;\n  }\n  .mt-md-3 {\n    margin-top: 1rem !important;\n  }\n  .mt-md-4 {\n    margin-top: 1.5rem !important;\n  }\n  .mt-md-5 {\n    margin-top: 3rem !important;\n  }\n  .mt-md-auto {\n    margin-top: auto !important;\n  }\n  .me-md-0 {\n    margin-right: 0 !important;\n  }\n  .me-md-1 {\n    margin-right: 0.25rem !important;\n  }\n  .me-md-2 {\n    margin-right: 0.5rem !important;\n  }\n  .me-md-3 {\n    margin-right: 1rem !important;\n  }\n  .me-md-4 {\n    margin-right: 1.5rem !important;\n  }\n  .me-md-5 {\n    margin-right: 3rem !important;\n  }\n  .me-md-auto {\n    margin-right: auto !important;\n  }\n  .mb-md-0 {\n    margin-bottom: 0 !important;\n  }\n  .mb-md-1 {\n    margin-bottom: 0.25rem !important;\n  }\n  .mb-md-2 {\n    margin-bottom: 0.5rem !important;\n  }\n  .mb-md-3 {\n    margin-bottom: 1rem !important;\n  }\n  .mb-md-4 {\n    margin-bottom: 1.5rem !important;\n  }\n  .mb-md-5 {\n    margin-bottom: 3rem !important;\n  }\n  .mb-md-auto {\n    margin-bottom: auto !important;\n  }\n  .ms-md-0 {\n    margin-left: 0 !important;\n  }\n  .ms-md-1 {\n    margin-left: 0.25rem !important;\n  }\n  .ms-md-2 {\n    margin-left: 0.5rem !important;\n  }\n  .ms-md-3 {\n    margin-left: 1rem !important;\n  }\n  .ms-md-4 {\n    margin-left: 1.5rem !important;\n  }\n  .ms-md-5 {\n    margin-left: 3rem !important;\n  }\n  .ms-md-auto {\n    margin-left: auto !important;\n  }\n  .p-md-0 {\n    padding: 0 !important;\n  }\n  .p-md-1 {\n    padding: 0.25rem !important;\n  }\n  .p-md-2 {\n    padding: 0.5rem !important;\n  }\n  .p-md-3 {\n    padding: 1rem !important;\n  }\n  .p-md-4 {\n    padding: 1.5rem !important;\n  }\n  .p-md-5 {\n    padding: 3rem !important;\n  }\n  .px-md-0 {\n    padding-right: 0 !important;\n    padding-left: 0 !important;\n  }\n  .px-md-1 {\n    padding-right: 0.25rem !important;\n    padding-left: 0.25rem !important;\n  }\n  .px-md-2 {\n    padding-right: 0.5rem !important;\n    padding-left: 0.5rem !important;\n  }\n  .px-md-3 {\n    padding-right: 1rem !important;\n    padding-left: 1rem !important;\n  }\n  .px-md-4 {\n    padding-right: 1.5rem !important;\n    padding-left: 1.5rem !important;\n  }\n  .px-md-5 {\n    padding-right: 3rem !important;\n    padding-left: 3rem !important;\n  }\n  .py-md-0 {\n    padding-top: 0 !important;\n    padding-bottom: 0 !important;\n  }\n  .py-md-1 {\n    padding-top: 0.25rem !important;\n    padding-bottom: 0.25rem !important;\n  }\n  .py-md-2 {\n    padding-top: 0.5rem !important;\n    padding-bottom: 0.5rem !important;\n  }\n  .py-md-3 {\n    padding-top: 1rem !important;\n    padding-bottom: 1rem !important;\n  }\n  .py-md-4 {\n    padding-top: 1.5rem !important;\n    padding-bottom: 1.5rem !important;\n  }\n  .py-md-5 {\n    padding-top: 3rem !important;\n    padding-bottom: 3rem !important;\n  }\n  .pt-md-0 {\n    padding-top: 0 !important;\n  }\n  .pt-md-1 {\n    padding-top: 0.25rem !important;\n  }\n  .pt-md-2 {\n    padding-top: 0.5rem !important;\n  }\n  .pt-md-3 {\n    padding-top: 1rem !important;\n  }\n  .pt-md-4 {\n    padding-top: 1.5rem !important;\n  }\n  .pt-md-5 {\n    padding-top: 3rem !important;\n  }\n  .pe-md-0 {\n    padding-right: 0 !important;\n  }\n  .pe-md-1 {\n    padding-right: 0.25rem !important;\n  }\n  .pe-md-2 {\n    padding-right: 0.5rem !important;\n  }\n  .pe-md-3 {\n    padding-right: 1rem !important;\n  }\n  .pe-md-4 {\n    padding-right: 1.5rem !important;\n  }\n  .pe-md-5 {\n    padding-right: 3rem !important;\n  }\n  .pb-md-0 {\n    padding-bottom: 0 !important;\n  }\n  .pb-md-1 {\n    padding-bottom: 0.25rem !important;\n  }\n  .pb-md-2 {\n    padding-bottom: 0.5rem !important;\n  }\n  .pb-md-3 {\n    padding-bottom: 1rem !important;\n  }\n  .pb-md-4 {\n    padding-bottom: 1.5rem !important;\n  }\n  .pb-md-5 {\n    padding-bottom: 3rem !important;\n  }\n  .ps-md-0 {\n    padding-left: 0 !important;\n  }\n  .ps-md-1 {\n    padding-left: 0.25rem !important;\n  }\n  .ps-md-2 {\n    padding-left: 0.5rem !important;\n  }\n  .ps-md-3 {\n    padding-left: 1rem !important;\n  }\n  .ps-md-4 {\n    padding-left: 1.5rem !important;\n  }\n  .ps-md-5 {\n    padding-left: 3rem !important;\n  }\n  .text-md-start {\n    text-align: left !important;\n  }\n  .text-md-end {\n    text-align: right !important;\n  }\n  .text-md-center {\n    text-align: center !important;\n  }\n}\n\n@media (min-width: 992px) {\n  .float-lg-start {\n    float: left !important;\n  }\n  .float-lg-end {\n    float: right !important;\n  }\n  .float-lg-none {\n    float: none !important;\n  }\n  .d-lg-inline {\n    display: inline !important;\n  }\n  .d-lg-inline-block {\n    display: inline-block !important;\n  }\n  .d-lg-block {\n    display: block !important;\n  }\n  .d-lg-grid {\n    display: grid !important;\n  }\n  .d-lg-table {\n    display: table !important;\n  }\n  .d-lg-table-row {\n    display: table-row !important;\n  }\n  .d-lg-table-cell {\n    display: table-cell !important;\n  }\n  .d-lg-flex {\n    display: -ms-flexbox !important;\n    display: flex !important;\n  }\n  .d-lg-inline-flex {\n    display: -ms-inline-flexbox !important;\n    display: inline-flex !important;\n  }\n  .d-lg-none {\n    display: none !important;\n  }\n  .flex-lg-fill {\n    -ms-flex: 1 1 auto !important;\n    flex: 1 1 auto !important;\n  }\n  .flex-lg-row {\n    -ms-flex-direction: row !important;\n    flex-direction: row !important;\n  }\n  .flex-lg-column {\n    -ms-flex-direction: column !important;\n    flex-direction: column !important;\n  }\n  .flex-lg-row-reverse {\n    -ms-flex-direction: row-reverse !important;\n    flex-direction: row-reverse !important;\n  }\n  .flex-lg-column-reverse {\n    -ms-flex-direction: column-reverse !important;\n    flex-direction: column-reverse !important;\n  }\n  .flex-lg-grow-0 {\n    -ms-flex-positive: 0 !important;\n    flex-grow: 0 !important;\n  }\n  .flex-lg-grow-1 {\n    -ms-flex-positive: 1 !important;\n    flex-grow: 1 !important;\n  }\n  .flex-lg-shrink-0 {\n    -ms-flex-negative: 0 !important;\n    flex-shrink: 0 !important;\n  }\n  .flex-lg-shrink-1 {\n    -ms-flex-negative: 1 !important;\n    flex-shrink: 1 !important;\n  }\n  .flex-lg-wrap {\n    -ms-flex-wrap: wrap !important;\n    flex-wrap: wrap !important;\n  }\n  .flex-lg-nowrap {\n    -ms-flex-wrap: nowrap !important;\n    flex-wrap: nowrap !important;\n  }\n  .flex-lg-wrap-reverse {\n    -ms-flex-wrap: wrap-reverse !important;\n    flex-wrap: wrap-reverse !important;\n  }\n  .gap-lg-0 {\n    gap: 0 !important;\n  }\n  .gap-lg-1 {\n    gap: 0.25rem !important;\n  }\n  .gap-lg-2 {\n    gap: 0.5rem !important;\n  }\n  .gap-lg-3 {\n    gap: 1rem !important;\n  }\n  .gap-lg-4 {\n    gap: 1.5rem !important;\n  }\n  .gap-lg-5 {\n    gap: 3rem !important;\n  }\n  .justify-content-lg-start {\n    -ms-flex-pack: start !important;\n    justify-content: flex-start !important;\n  }\n  .justify-content-lg-end {\n    -ms-flex-pack: end !important;\n    justify-content: flex-end !important;\n  }\n  .justify-content-lg-center {\n    -ms-flex-pack: center !important;\n    justify-content: center !important;\n  }\n  .justify-content-lg-between {\n    -ms-flex-pack: justify !important;\n    justify-content: space-between !important;\n  }\n  .justify-content-lg-around {\n    -ms-flex-pack: distribute !important;\n    justify-content: space-around !important;\n  }\n  .justify-content-lg-evenly {\n    -ms-flex-pack: space-evenly !important;\n    justify-content: space-evenly !important;\n  }\n  .align-items-lg-start {\n    -ms-flex-align: start !important;\n    align-items: flex-start !important;\n  }\n  .align-items-lg-end {\n    -ms-flex-align: end !important;\n    align-items: flex-end !important;\n  }\n  .align-items-lg-center {\n    -ms-flex-align: center !important;\n    align-items: center !important;\n  }\n  .align-items-lg-baseline {\n    -ms-flex-align: baseline !important;\n    align-items: baseline !important;\n  }\n  .align-items-lg-stretch {\n    -ms-flex-align: stretch !important;\n    align-items: stretch !important;\n  }\n  .align-content-lg-start {\n    -ms-flex-line-pack: start !important;\n    align-content: flex-start !important;\n  }\n  .align-content-lg-end {\n    -ms-flex-line-pack: end !important;\n    align-content: flex-end !important;\n  }\n  .align-content-lg-center {\n    -ms-flex-line-pack: center !important;\n    align-content: center !important;\n  }\n  .align-content-lg-between {\n    -ms-flex-line-pack: justify !important;\n    align-content: space-between !important;\n  }\n  .align-content-lg-around {\n    -ms-flex-line-pack: distribute !important;\n    align-content: space-around !important;\n  }\n  .align-content-lg-stretch {\n    -ms-flex-line-pack: stretch !important;\n    align-content: stretch !important;\n  }\n  .align-self-lg-auto {\n    -ms-flex-item-align: auto !important;\n    align-self: auto !important;\n  }\n  .align-self-lg-start {\n    -ms-flex-item-align: start !important;\n    align-self: flex-start !important;\n  }\n  .align-self-lg-end {\n    -ms-flex-item-align: end !important;\n    align-self: flex-end !important;\n  }\n  .align-self-lg-center {\n    -ms-flex-item-align: center !important;\n    align-self: center !important;\n  }\n  .align-self-lg-baseline {\n    -ms-flex-item-align: baseline !important;\n    align-self: baseline !important;\n  }\n  .align-self-lg-stretch {\n    -ms-flex-item-align: stretch !important;\n    align-self: stretch !important;\n  }\n  .order-lg-first {\n    -ms-flex-order: -1 !important;\n    order: -1 !important;\n  }\n  .order-lg-0 {\n    -ms-flex-order: 0 !important;\n    order: 0 !important;\n  }\n  .order-lg-1 {\n    -ms-flex-order: 1 !important;\n    order: 1 !important;\n  }\n  .order-lg-2 {\n    -ms-flex-order: 2 !important;\n    order: 2 !important;\n  }\n  .order-lg-3 {\n    -ms-flex-order: 3 !important;\n    order: 3 !important;\n  }\n  .order-lg-4 {\n    -ms-flex-order: 4 !important;\n    order: 4 !important;\n  }\n  .order-lg-5 {\n    -ms-flex-order: 5 !important;\n    order: 5 !important;\n  }\n  .order-lg-last {\n    -ms-flex-order: 6 !important;\n    order: 6 !important;\n  }\n  .m-lg-0 {\n    margin: 0 !important;\n  }\n  .m-lg-1 {\n    margin: 0.25rem !important;\n  }\n  .m-lg-2 {\n    margin: 0.5rem !important;\n  }\n  .m-lg-3 {\n    margin: 1rem !important;\n  }\n  .m-lg-4 {\n    margin: 1.5rem !important;\n  }\n  .m-lg-5 {\n    margin: 3rem !important;\n  }\n  .m-lg-auto {\n    margin: auto !important;\n  }\n  .mx-lg-0 {\n    margin-right: 0 !important;\n    margin-left: 0 !important;\n  }\n  .mx-lg-1 {\n    margin-right: 0.25rem !important;\n    margin-left: 0.25rem !important;\n  }\n  .mx-lg-2 {\n    margin-right: 0.5rem !important;\n    margin-left: 0.5rem !important;\n  }\n  .mx-lg-3 {\n    margin-right: 1rem !important;\n    margin-left: 1rem !important;\n  }\n  .mx-lg-4 {\n    margin-right: 1.5rem !important;\n    margin-left: 1.5rem !important;\n  }\n  .mx-lg-5 {\n    margin-right: 3rem !important;\n    margin-left: 3rem !important;\n  }\n  .mx-lg-auto {\n    margin-right: auto !important;\n    margin-left: auto !important;\n  }\n  .my-lg-0 {\n    margin-top: 0 !important;\n    margin-bottom: 0 !important;\n  }\n  .my-lg-1 {\n    margin-top: 0.25rem !important;\n    margin-bottom: 0.25rem !important;\n  }\n  .my-lg-2 {\n    margin-top: 0.5rem !important;\n    margin-bottom: 0.5rem !important;\n  }\n  .my-lg-3 {\n    margin-top: 1rem !important;\n    margin-bottom: 1rem !important;\n  }\n  .my-lg-4 {\n    margin-top: 1.5rem !important;\n    margin-bottom: 1.5rem !important;\n  }\n  .my-lg-5 {\n    margin-top: 3rem !important;\n    margin-bottom: 3rem !important;\n  }\n  .my-lg-auto {\n    margin-top: auto !important;\n    margin-bottom: auto !important;\n  }\n  .mt-lg-0 {\n    margin-top: 0 !important;\n  }\n  .mt-lg-1 {\n    margin-top: 0.25rem !important;\n  }\n  .mt-lg-2 {\n    margin-top: 0.5rem !important;\n  }\n  .mt-lg-3 {\n    margin-top: 1rem !important;\n  }\n  .mt-lg-4 {\n    margin-top: 1.5rem !important;\n  }\n  .mt-lg-5 {\n    margin-top: 3rem !important;\n  }\n  .mt-lg-auto {\n    margin-top: auto !important;\n  }\n  .me-lg-0 {\n    margin-right: 0 !important;\n  }\n  .me-lg-1 {\n    margin-right: 0.25rem !important;\n  }\n  .me-lg-2 {\n    margin-right: 0.5rem !important;\n  }\n  .me-lg-3 {\n    margin-right: 1rem !important;\n  }\n  .me-lg-4 {\n    margin-right: 1.5rem !important;\n  }\n  .me-lg-5 {\n    margin-right: 3rem !important;\n  }\n  .me-lg-auto {\n    margin-right: auto !important;\n  }\n  .mb-lg-0 {\n    margin-bottom: 0 !important;\n  }\n  .mb-lg-1 {\n    margin-bottom: 0.25rem !important;\n  }\n  .mb-lg-2 {\n    margin-bottom: 0.5rem !important;\n  }\n  .mb-lg-3 {\n    margin-bottom: 1rem !important;\n  }\n  .mb-lg-4 {\n    margin-bottom: 1.5rem !important;\n  }\n  .mb-lg-5 {\n    margin-bottom: 3rem !important;\n  }\n  .mb-lg-auto {\n    margin-bottom: auto !important;\n  }\n  .ms-lg-0 {\n    margin-left: 0 !important;\n  }\n  .ms-lg-1 {\n    margin-left: 0.25rem !important;\n  }\n  .ms-lg-2 {\n    margin-left: 0.5rem !important;\n  }\n  .ms-lg-3 {\n    margin-left: 1rem !important;\n  }\n  .ms-lg-4 {\n    margin-left: 1.5rem !important;\n  }\n  .ms-lg-5 {\n    margin-left: 3rem !important;\n  }\n  .ms-lg-auto {\n    margin-left: auto !important;\n  }\n  .p-lg-0 {\n    padding: 0 !important;\n  }\n  .p-lg-1 {\n    padding: 0.25rem !important;\n  }\n  .p-lg-2 {\n    padding: 0.5rem !important;\n  }\n  .p-lg-3 {\n    padding: 1rem !important;\n  }\n  .p-lg-4 {\n    padding: 1.5rem !important;\n  }\n  .p-lg-5 {\n    padding: 3rem !important;\n  }\n  .px-lg-0 {\n    padding-right: 0 !important;\n    padding-left: 0 !important;\n  }\n  .px-lg-1 {\n    padding-right: 0.25rem !important;\n    padding-left: 0.25rem !important;\n  }\n  .px-lg-2 {\n    padding-right: 0.5rem !important;\n    padding-left: 0.5rem !important;\n  }\n  .px-lg-3 {\n    padding-right: 1rem !important;\n    padding-left: 1rem !important;\n  }\n  .px-lg-4 {\n    padding-right: 1.5rem !important;\n    padding-left: 1.5rem !important;\n  }\n  .px-lg-5 {\n    padding-right: 3rem !important;\n    padding-left: 3rem !important;\n  }\n  .py-lg-0 {\n    padding-top: 0 !important;\n    padding-bottom: 0 !important;\n  }\n  .py-lg-1 {\n    padding-top: 0.25rem !important;\n    padding-bottom: 0.25rem !important;\n  }\n  .py-lg-2 {\n    padding-top: 0.5rem !important;\n    padding-bottom: 0.5rem !important;\n  }\n  .py-lg-3 {\n    padding-top: 1rem !important;\n    padding-bottom: 1rem !important;\n  }\n  .py-lg-4 {\n    padding-top: 1.5rem !important;\n    padding-bottom: 1.5rem !important;\n  }\n  .py-lg-5 {\n    padding-top: 3rem !important;\n    padding-bottom: 3rem !important;\n  }\n  .pt-lg-0 {\n    padding-top: 0 !important;\n  }\n  .pt-lg-1 {\n    padding-top: 0.25rem !important;\n  }\n  .pt-lg-2 {\n    padding-top: 0.5rem !important;\n  }\n  .pt-lg-3 {\n    padding-top: 1rem !important;\n  }\n  .pt-lg-4 {\n    padding-top: 1.5rem !important;\n  }\n  .pt-lg-5 {\n    padding-top: 3rem !important;\n  }\n  .pe-lg-0 {\n    padding-right: 0 !important;\n  }\n  .pe-lg-1 {\n    padding-right: 0.25rem !important;\n  }\n  .pe-lg-2 {\n    padding-right: 0.5rem !important;\n  }\n  .pe-lg-3 {\n    padding-right: 1rem !important;\n  }\n  .pe-lg-4 {\n    padding-right: 1.5rem !important;\n  }\n  .pe-lg-5 {\n    padding-right: 3rem !important;\n  }\n  .pb-lg-0 {\n    padding-bottom: 0 !important;\n  }\n  .pb-lg-1 {\n    padding-bottom: 0.25rem !important;\n  }\n  .pb-lg-2 {\n    padding-bottom: 0.5rem !important;\n  }\n  .pb-lg-3 {\n    padding-bottom: 1rem !important;\n  }\n  .pb-lg-4 {\n    padding-bottom: 1.5rem !important;\n  }\n  .pb-lg-5 {\n    padding-bottom: 3rem !important;\n  }\n  .ps-lg-0 {\n    padding-left: 0 !important;\n  }\n  .ps-lg-1 {\n    padding-left: 0.25rem !important;\n  }\n  .ps-lg-2 {\n    padding-left: 0.5rem !important;\n  }\n  .ps-lg-3 {\n    padding-left: 1rem !important;\n  }\n  .ps-lg-4 {\n    padding-left: 1.5rem !important;\n  }\n  .ps-lg-5 {\n    padding-left: 3rem !important;\n  }\n  .text-lg-start {\n    text-align: left !important;\n  }\n  .text-lg-end {\n    text-align: right !important;\n  }\n  .text-lg-center {\n    text-align: center !important;\n  }\n}\n\n@media (min-width: 1200px) {\n  .float-xl-start {\n    float: left !important;\n  }\n  .float-xl-end {\n    float: right !important;\n  }\n  .float-xl-none {\n    float: none !important;\n  }\n  .d-xl-inline {\n    display: inline !important;\n  }\n  .d-xl-inline-block {\n    display: inline-block !important;\n  }\n  .d-xl-block {\n    display: block !important;\n  }\n  .d-xl-grid {\n    display: grid !important;\n  }\n  .d-xl-table {\n    display: table !important;\n  }\n  .d-xl-table-row {\n    display: table-row !important;\n  }\n  .d-xl-table-cell {\n    display: table-cell !important;\n  }\n  .d-xl-flex {\n    display: -ms-flexbox !important;\n    display: flex !important;\n  }\n  .d-xl-inline-flex {\n    display: -ms-inline-flexbox !important;\n    display: inline-flex !important;\n  }\n  .d-xl-none {\n    display: none !important;\n  }\n  .flex-xl-fill {\n    -ms-flex: 1 1 auto !important;\n    flex: 1 1 auto !important;\n  }\n  .flex-xl-row {\n    -ms-flex-direction: row !important;\n    flex-direction: row !important;\n  }\n  .flex-xl-column {\n    -ms-flex-direction: column !important;\n    flex-direction: column !important;\n  }\n  .flex-xl-row-reverse {\n    -ms-flex-direction: row-reverse !important;\n    flex-direction: row-reverse !important;\n  }\n  .flex-xl-column-reverse {\n    -ms-flex-direction: column-reverse !important;\n    flex-direction: column-reverse !important;\n  }\n  .flex-xl-grow-0 {\n    -ms-flex-positive: 0 !important;\n    flex-grow: 0 !important;\n  }\n  .flex-xl-grow-1 {\n    -ms-flex-positive: 1 !important;\n    flex-grow: 1 !important;\n  }\n  .flex-xl-shrink-0 {\n    -ms-flex-negative: 0 !important;\n    flex-shrink: 0 !important;\n  }\n  .flex-xl-shrink-1 {\n    -ms-flex-negative: 1 !important;\n    flex-shrink: 1 !important;\n  }\n  .flex-xl-wrap {\n    -ms-flex-wrap: wrap !important;\n    flex-wrap: wrap !important;\n  }\n  .flex-xl-nowrap {\n    -ms-flex-wrap: nowrap !important;\n    flex-wrap: nowrap !important;\n  }\n  .flex-xl-wrap-reverse {\n    -ms-flex-wrap: wrap-reverse !important;\n    flex-wrap: wrap-reverse !important;\n  }\n  .gap-xl-0 {\n    gap: 0 !important;\n  }\n  .gap-xl-1 {\n    gap: 0.25rem !important;\n  }\n  .gap-xl-2 {\n    gap: 0.5rem !important;\n  }\n  .gap-xl-3 {\n    gap: 1rem !important;\n  }\n  .gap-xl-4 {\n    gap: 1.5rem !important;\n  }\n  .gap-xl-5 {\n    gap: 3rem !important;\n  }\n  .justify-content-xl-start {\n    -ms-flex-pack: start !important;\n    justify-content: flex-start !important;\n  }\n  .justify-content-xl-end {\n    -ms-flex-pack: end !important;\n    justify-content: flex-end !important;\n  }\n  .justify-content-xl-center {\n    -ms-flex-pack: center !important;\n    justify-content: center !important;\n  }\n  .justify-content-xl-between {\n    -ms-flex-pack: justify !important;\n    justify-content: space-between !important;\n  }\n  .justify-content-xl-around {\n    -ms-flex-pack: distribute !important;\n    justify-content: space-around !important;\n  }\n  .justify-content-xl-evenly {\n    -ms-flex-pack: space-evenly !important;\n    justify-content: space-evenly !important;\n  }\n  .align-items-xl-start {\n    -ms-flex-align: start !important;\n    align-items: flex-start !important;\n  }\n  .align-items-xl-end {\n    -ms-flex-align: end !important;\n    align-items: flex-end !important;\n  }\n  .align-items-xl-center {\n    -ms-flex-align: center !important;\n    align-items: center !important;\n  }\n  .align-items-xl-baseline {\n    -ms-flex-align: baseline !important;\n    align-items: baseline !important;\n  }\n  .align-items-xl-stretch {\n    -ms-flex-align: stretch !important;\n    align-items: stretch !important;\n  }\n  .align-content-xl-start {\n    -ms-flex-line-pack: start !important;\n    align-content: flex-start !important;\n  }\n  .align-content-xl-end {\n    -ms-flex-line-pack: end !important;\n    align-content: flex-end !important;\n  }\n  .align-content-xl-center {\n    -ms-flex-line-pack: center !important;\n    align-content: center !important;\n  }\n  .align-content-xl-between {\n    -ms-flex-line-pack: justify !important;\n    align-content: space-between !important;\n  }\n  .align-content-xl-around {\n    -ms-flex-line-pack: distribute !important;\n    align-content: space-around !important;\n  }\n  .align-content-xl-stretch {\n    -ms-flex-line-pack: stretch !important;\n    align-content: stretch !important;\n  }\n  .align-self-xl-auto {\n    -ms-flex-item-align: auto !important;\n    align-self: auto !important;\n  }\n  .align-self-xl-start {\n    -ms-flex-item-align: start !important;\n    align-self: flex-start !important;\n  }\n  .align-self-xl-end {\n    -ms-flex-item-align: end !important;\n    align-self: flex-end !important;\n  }\n  .align-self-xl-center {\n    -ms-flex-item-align: center !important;\n    align-self: center !important;\n  }\n  .align-self-xl-baseline {\n    -ms-flex-item-align: baseline !important;\n    align-self: baseline !important;\n  }\n  .align-self-xl-stretch {\n    -ms-flex-item-align: stretch !important;\n    align-self: stretch !important;\n  }\n  .order-xl-first {\n    -ms-flex-order: -1 !important;\n    order: -1 !important;\n  }\n  .order-xl-0 {\n    -ms-flex-order: 0 !important;\n    order: 0 !important;\n  }\n  .order-xl-1 {\n    -ms-flex-order: 1 !important;\n    order: 1 !important;\n  }\n  .order-xl-2 {\n    -ms-flex-order: 2 !important;\n    order: 2 !important;\n  }\n  .order-xl-3 {\n    -ms-flex-order: 3 !important;\n    order: 3 !important;\n  }\n  .order-xl-4 {\n    -ms-flex-order: 4 !important;\n    order: 4 !important;\n  }\n  .order-xl-5 {\n    -ms-flex-order: 5 !important;\n    order: 5 !important;\n  }\n  .order-xl-last {\n    -ms-flex-order: 6 !important;\n    order: 6 !important;\n  }\n  .m-xl-0 {\n    margin: 0 !important;\n  }\n  .m-xl-1 {\n    margin: 0.25rem !important;\n  }\n  .m-xl-2 {\n    margin: 0.5rem !important;\n  }\n  .m-xl-3 {\n    margin: 1rem !important;\n  }\n  .m-xl-4 {\n    margin: 1.5rem !important;\n  }\n  .m-xl-5 {\n    margin: 3rem !important;\n  }\n  .m-xl-auto {\n    margin: auto !important;\n  }\n  .mx-xl-0 {\n    margin-right: 0 !important;\n    margin-left: 0 !important;\n  }\n  .mx-xl-1 {\n    margin-right: 0.25rem !important;\n    margin-left: 0.25rem !important;\n  }\n  .mx-xl-2 {\n    margin-right: 0.5rem !important;\n    margin-left: 0.5rem !important;\n  }\n  .mx-xl-3 {\n    margin-right: 1rem !important;\n    margin-left: 1rem !important;\n  }\n  .mx-xl-4 {\n    margin-right: 1.5rem !important;\n    margin-left: 1.5rem !important;\n  }\n  .mx-xl-5 {\n    margin-right: 3rem !important;\n    margin-left: 3rem !important;\n  }\n  .mx-xl-auto {\n    margin-right: auto !important;\n    margin-left: auto !important;\n  }\n  .my-xl-0 {\n    margin-top: 0 !important;\n    margin-bottom: 0 !important;\n  }\n  .my-xl-1 {\n    margin-top: 0.25rem !important;\n    margin-bottom: 0.25rem !important;\n  }\n  .my-xl-2 {\n    margin-top: 0.5rem !important;\n    margin-bottom: 0.5rem !important;\n  }\n  .my-xl-3 {\n    margin-top: 1rem !important;\n    margin-bottom: 1rem !important;\n  }\n  .my-xl-4 {\n    margin-top: 1.5rem !important;\n    margin-bottom: 1.5rem !important;\n  }\n  .my-xl-5 {\n    margin-top: 3rem !important;\n    margin-bottom: 3rem !important;\n  }\n  .my-xl-auto {\n    margin-top: auto !important;\n    margin-bottom: auto !important;\n  }\n  .mt-xl-0 {\n    margin-top: 0 !important;\n  }\n  .mt-xl-1 {\n    margin-top: 0.25rem !important;\n  }\n  .mt-xl-2 {\n    margin-top: 0.5rem !important;\n  }\n  .mt-xl-3 {\n    margin-top: 1rem !important;\n  }\n  .mt-xl-4 {\n    margin-top: 1.5rem !important;\n  }\n  .mt-xl-5 {\n    margin-top: 3rem !important;\n  }\n  .mt-xl-auto {\n    margin-top: auto !important;\n  }\n  .me-xl-0 {\n    margin-right: 0 !important;\n  }\n  .me-xl-1 {\n    margin-right: 0.25rem !important;\n  }\n  .me-xl-2 {\n    margin-right: 0.5rem !important;\n  }\n  .me-xl-3 {\n    margin-right: 1rem !important;\n  }\n  .me-xl-4 {\n    margin-right: 1.5rem !important;\n  }\n  .me-xl-5 {\n    margin-right: 3rem !important;\n  }\n  .me-xl-auto {\n    margin-right: auto !important;\n  }\n  .mb-xl-0 {\n    margin-bottom: 0 !important;\n  }\n  .mb-xl-1 {\n    margin-bottom: 0.25rem !important;\n  }\n  .mb-xl-2 {\n    margin-bottom: 0.5rem !important;\n  }\n  .mb-xl-3 {\n    margin-bottom: 1rem !important;\n  }\n  .mb-xl-4 {\n    margin-bottom: 1.5rem !important;\n  }\n  .mb-xl-5 {\n    margin-bottom: 3rem !important;\n  }\n  .mb-xl-auto {\n    margin-bottom: auto !important;\n  }\n  .ms-xl-0 {\n    margin-left: 0 !important;\n  }\n  .ms-xl-1 {\n    margin-left: 0.25rem !important;\n  }\n  .ms-xl-2 {\n    margin-left: 0.5rem !important;\n  }\n  .ms-xl-3 {\n    margin-left: 1rem !important;\n  }\n  .ms-xl-4 {\n    margin-left: 1.5rem !important;\n  }\n  .ms-xl-5 {\n    margin-left: 3rem !important;\n  }\n  .ms-xl-auto {\n    margin-left: auto !important;\n  }\n  .p-xl-0 {\n    padding: 0 !important;\n  }\n  .p-xl-1 {\n    padding: 0.25rem !important;\n  }\n  .p-xl-2 {\n    padding: 0.5rem !important;\n  }\n  .p-xl-3 {\n    padding: 1rem !important;\n  }\n  .p-xl-4 {\n    padding: 1.5rem !important;\n  }\n  .p-xl-5 {\n    padding: 3rem !important;\n  }\n  .px-xl-0 {\n    padding-right: 0 !important;\n    padding-left: 0 !important;\n  }\n  .px-xl-1 {\n    padding-right: 0.25rem !important;\n    padding-left: 0.25rem !important;\n  }\n  .px-xl-2 {\n    padding-right: 0.5rem !important;\n    padding-left: 0.5rem !important;\n  }\n  .px-xl-3 {\n    padding-right: 1rem !important;\n    padding-left: 1rem !important;\n  }\n  .px-xl-4 {\n    padding-right: 1.5rem !important;\n    padding-left: 1.5rem !important;\n  }\n  .px-xl-5 {\n    padding-right: 3rem !important;\n    padding-left: 3rem !important;\n  }\n  .py-xl-0 {\n    padding-top: 0 !important;\n    padding-bottom: 0 !important;\n  }\n  .py-xl-1 {\n    padding-top: 0.25rem !important;\n    padding-bottom: 0.25rem !important;\n  }\n  .py-xl-2 {\n    padding-top: 0.5rem !important;\n    padding-bottom: 0.5rem !important;\n  }\n  .py-xl-3 {\n    padding-top: 1rem !important;\n    padding-bottom: 1rem !important;\n  }\n  .py-xl-4 {\n    padding-top: 1.5rem !important;\n    padding-bottom: 1.5rem !important;\n  }\n  .py-xl-5 {\n    padding-top: 3rem !important;\n    padding-bottom: 3rem !important;\n  }\n  .pt-xl-0 {\n    padding-top: 0 !important;\n  }\n  .pt-xl-1 {\n    padding-top: 0.25rem !important;\n  }\n  .pt-xl-2 {\n    padding-top: 0.5rem !important;\n  }\n  .pt-xl-3 {\n    padding-top: 1rem !important;\n  }\n  .pt-xl-4 {\n    padding-top: 1.5rem !important;\n  }\n  .pt-xl-5 {\n    padding-top: 3rem !important;\n  }\n  .pe-xl-0 {\n    padding-right: 0 !important;\n  }\n  .pe-xl-1 {\n    padding-right: 0.25rem !important;\n  }\n  .pe-xl-2 {\n    padding-right: 0.5rem !important;\n  }\n  .pe-xl-3 {\n    padding-right: 1rem !important;\n  }\n  .pe-xl-4 {\n    padding-right: 1.5rem !important;\n  }\n  .pe-xl-5 {\n    padding-right: 3rem !important;\n  }\n  .pb-xl-0 {\n    padding-bottom: 0 !important;\n  }\n  .pb-xl-1 {\n    padding-bottom: 0.25rem !important;\n  }\n  .pb-xl-2 {\n    padding-bottom: 0.5rem !important;\n  }\n  .pb-xl-3 {\n    padding-bottom: 1rem !important;\n  }\n  .pb-xl-4 {\n    padding-bottom: 1.5rem !important;\n  }\n  .pb-xl-5 {\n    padding-bottom: 3rem !important;\n  }\n  .ps-xl-0 {\n    padding-left: 0 !important;\n  }\n  .ps-xl-1 {\n    padding-left: 0.25rem !important;\n  }\n  .ps-xl-2 {\n    padding-left: 0.5rem !important;\n  }\n  .ps-xl-3 {\n    padding-left: 1rem !important;\n  }\n  .ps-xl-4 {\n    padding-left: 1.5rem !important;\n  }\n  .ps-xl-5 {\n    padding-left: 3rem !important;\n  }\n  .text-xl-start {\n    text-align: left !important;\n  }\n  .text-xl-end {\n    text-align: right !important;\n  }\n  .text-xl-center {\n    text-align: center !important;\n  }\n}\n\n@media (min-width: 1400px) {\n  .float-xxl-start {\n    float: left !important;\n  }\n  .float-xxl-end {\n    float: right !important;\n  }\n  .float-xxl-none {\n    float: none !important;\n  }\n  .d-xxl-inline {\n    display: inline !important;\n  }\n  .d-xxl-inline-block {\n    display: inline-block !important;\n  }\n  .d-xxl-block {\n    display: block !important;\n  }\n  .d-xxl-grid {\n    display: grid !important;\n  }\n  .d-xxl-table {\n    display: table !important;\n  }\n  .d-xxl-table-row {\n    display: table-row !important;\n  }\n  .d-xxl-table-cell {\n    display: table-cell !important;\n  }\n  .d-xxl-flex {\n    display: -ms-flexbox !important;\n    display: flex !important;\n  }\n  .d-xxl-inline-flex {\n    display: -ms-inline-flexbox !important;\n    display: inline-flex !important;\n  }\n  .d-xxl-none {\n    display: none !important;\n  }\n  .flex-xxl-fill {\n    -ms-flex: 1 1 auto !important;\n    flex: 1 1 auto !important;\n  }\n  .flex-xxl-row {\n    -ms-flex-direction: row !important;\n    flex-direction: row !important;\n  }\n  .flex-xxl-column {\n    -ms-flex-direction: column !important;\n    flex-direction: column !important;\n  }\n  .flex-xxl-row-reverse {\n    -ms-flex-direction: row-reverse !important;\n    flex-direction: row-reverse !important;\n  }\n  .flex-xxl-column-reverse {\n    -ms-flex-direction: column-reverse !important;\n    flex-direction: column-reverse !important;\n  }\n  .flex-xxl-grow-0 {\n    -ms-flex-positive: 0 !important;\n    flex-grow: 0 !important;\n  }\n  .flex-xxl-grow-1 {\n    -ms-flex-positive: 1 !important;\n    flex-grow: 1 !important;\n  }\n  .flex-xxl-shrink-0 {\n    -ms-flex-negative: 0 !important;\n    flex-shrink: 0 !important;\n  }\n  .flex-xxl-shrink-1 {\n    -ms-flex-negative: 1 !important;\n    flex-shrink: 1 !important;\n  }\n  .flex-xxl-wrap {\n    -ms-flex-wrap: wrap !important;\n    flex-wrap: wrap !important;\n  }\n  .flex-xxl-nowrap {\n    -ms-flex-wrap: nowrap !important;\n    flex-wrap: nowrap !important;\n  }\n  .flex-xxl-wrap-reverse {\n    -ms-flex-wrap: wrap-reverse !important;\n    flex-wrap: wrap-reverse !important;\n  }\n  .gap-xxl-0 {\n    gap: 0 !important;\n  }\n  .gap-xxl-1 {\n    gap: 0.25rem !important;\n  }\n  .gap-xxl-2 {\n    gap: 0.5rem !important;\n  }\n  .gap-xxl-3 {\n    gap: 1rem !important;\n  }\n  .gap-xxl-4 {\n    gap: 1.5rem !important;\n  }\n  .gap-xxl-5 {\n    gap: 3rem !important;\n  }\n  .justify-content-xxl-start {\n    -ms-flex-pack: start !important;\n    justify-content: flex-start !important;\n  }\n  .justify-content-xxl-end {\n    -ms-flex-pack: end !important;\n    justify-content: flex-end !important;\n  }\n  .justify-content-xxl-center {\n    -ms-flex-pack: center !important;\n    justify-content: center !important;\n  }\n  .justify-content-xxl-between {\n    -ms-flex-pack: justify !important;\n    justify-content: space-between !important;\n  }\n  .justify-content-xxl-around {\n    -ms-flex-pack: distribute !important;\n    justify-content: space-around !important;\n  }\n  .justify-content-xxl-evenly {\n    -ms-flex-pack: space-evenly !important;\n    justify-content: space-evenly !important;\n  }\n  .align-items-xxl-start {\n    -ms-flex-align: start !important;\n    align-items: flex-start !important;\n  }\n  .align-items-xxl-end {\n    -ms-flex-align: end !important;\n    align-items: flex-end !important;\n  }\n  .align-items-xxl-center {\n    -ms-flex-align: center !important;\n    align-items: center !important;\n  }\n  .align-items-xxl-baseline {\n    -ms-flex-align: baseline !important;\n    align-items: baseline !important;\n  }\n  .align-items-xxl-stretch {\n    -ms-flex-align: stretch !important;\n    align-items: stretch !important;\n  }\n  .align-content-xxl-start {\n    -ms-flex-line-pack: start !important;\n    align-content: flex-start !important;\n  }\n  .align-content-xxl-end {\n    -ms-flex-line-pack: end !important;\n    align-content: flex-end !important;\n  }\n  .align-content-xxl-center {\n    -ms-flex-line-pack: center !important;\n    align-content: center !important;\n  }\n  .align-content-xxl-between {\n    -ms-flex-line-pack: justify !important;\n    align-content: space-between !important;\n  }\n  .align-content-xxl-around {\n    -ms-flex-line-pack: distribute !important;\n    align-content: space-around !important;\n  }\n  .align-content-xxl-stretch {\n    -ms-flex-line-pack: stretch !important;\n    align-content: stretch !important;\n  }\n  .align-self-xxl-auto {\n    -ms-flex-item-align: auto !important;\n    align-self: auto !important;\n  }\n  .align-self-xxl-start {\n    -ms-flex-item-align: start !important;\n    align-self: flex-start !important;\n  }\n  .align-self-xxl-end {\n    -ms-flex-item-align: end !important;\n    align-self: flex-end !important;\n  }\n  .align-self-xxl-center {\n    -ms-flex-item-align: center !important;\n    align-self: center !important;\n  }\n  .align-self-xxl-baseline {\n    -ms-flex-item-align: baseline !important;\n    align-self: baseline !important;\n  }\n  .align-self-xxl-stretch {\n    -ms-flex-item-align: stretch !important;\n    align-self: stretch !important;\n  }\n  .order-xxl-first {\n    -ms-flex-order: -1 !important;\n    order: -1 !important;\n  }\n  .order-xxl-0 {\n    -ms-flex-order: 0 !important;\n    order: 0 !important;\n  }\n  .order-xxl-1 {\n    -ms-flex-order: 1 !important;\n    order: 1 !important;\n  }\n  .order-xxl-2 {\n    -ms-flex-order: 2 !important;\n    order: 2 !important;\n  }\n  .order-xxl-3 {\n    -ms-flex-order: 3 !important;\n    order: 3 !important;\n  }\n  .order-xxl-4 {\n    -ms-flex-order: 4 !important;\n    order: 4 !important;\n  }\n  .order-xxl-5 {\n    -ms-flex-order: 5 !important;\n    order: 5 !important;\n  }\n  .order-xxl-last {\n    -ms-flex-order: 6 !important;\n    order: 6 !important;\n  }\n  .m-xxl-0 {\n    margin: 0 !important;\n  }\n  .m-xxl-1 {\n    margin: 0.25rem !important;\n  }\n  .m-xxl-2 {\n    margin: 0.5rem !important;\n  }\n  .m-xxl-3 {\n    margin: 1rem !important;\n  }\n  .m-xxl-4 {\n    margin: 1.5rem !important;\n  }\n  .m-xxl-5 {\n    margin: 3rem !important;\n  }\n  .m-xxl-auto {\n    margin: auto !important;\n  }\n  .mx-xxl-0 {\n    margin-right: 0 !important;\n    margin-left: 0 !important;\n  }\n  .mx-xxl-1 {\n    margin-right: 0.25rem !important;\n    margin-left: 0.25rem !important;\n  }\n  .mx-xxl-2 {\n    margin-right: 0.5rem !important;\n    margin-left: 0.5rem !important;\n  }\n  .mx-xxl-3 {\n    margin-right: 1rem !important;\n    margin-left: 1rem !important;\n  }\n  .mx-xxl-4 {\n    margin-right: 1.5rem !important;\n    margin-left: 1.5rem !important;\n  }\n  .mx-xxl-5 {\n    margin-right: 3rem !important;\n    margin-left: 3rem !important;\n  }\n  .mx-xxl-auto {\n    margin-right: auto !important;\n    margin-left: auto !important;\n  }\n  .my-xxl-0 {\n    margin-top: 0 !important;\n    margin-bottom: 0 !important;\n  }\n  .my-xxl-1 {\n    margin-top: 0.25rem !important;\n    margin-bottom: 0.25rem !important;\n  }\n  .my-xxl-2 {\n    margin-top: 0.5rem !important;\n    margin-bottom: 0.5rem !important;\n  }\n  .my-xxl-3 {\n    margin-top: 1rem !important;\n    margin-bottom: 1rem !important;\n  }\n  .my-xxl-4 {\n    margin-top: 1.5rem !important;\n    margin-bottom: 1.5rem !important;\n  }\n  .my-xxl-5 {\n    margin-top: 3rem !important;\n    margin-bottom: 3rem !important;\n  }\n  .my-xxl-auto {\n    margin-top: auto !important;\n    margin-bottom: auto !important;\n  }\n  .mt-xxl-0 {\n    margin-top: 0 !important;\n  }\n  .mt-xxl-1 {\n    margin-top: 0.25rem !important;\n  }\n  .mt-xxl-2 {\n    margin-top: 0.5rem !important;\n  }\n  .mt-xxl-3 {\n    margin-top: 1rem !important;\n  }\n  .mt-xxl-4 {\n    margin-top: 1.5rem !important;\n  }\n  .mt-xxl-5 {\n    margin-top: 3rem !important;\n  }\n  .mt-xxl-auto {\n    margin-top: auto !important;\n  }\n  .me-xxl-0 {\n    margin-right: 0 !important;\n  }\n  .me-xxl-1 {\n    margin-right: 0.25rem !important;\n  }\n  .me-xxl-2 {\n    margin-right: 0.5rem !important;\n  }\n  .me-xxl-3 {\n    margin-right: 1rem !important;\n  }\n  .me-xxl-4 {\n    margin-right: 1.5rem !important;\n  }\n  .me-xxl-5 {\n    margin-right: 3rem !important;\n  }\n  .me-xxl-auto {\n    margin-right: auto !important;\n  }\n  .mb-xxl-0 {\n    margin-bottom: 0 !important;\n  }\n  .mb-xxl-1 {\n    margin-bottom: 0.25rem !important;\n  }\n  .mb-xxl-2 {\n    margin-bottom: 0.5rem !important;\n  }\n  .mb-xxl-3 {\n    margin-bottom: 1rem !important;\n  }\n  .mb-xxl-4 {\n    margin-bottom: 1.5rem !important;\n  }\n  .mb-xxl-5 {\n    margin-bottom: 3rem !important;\n  }\n  .mb-xxl-auto {\n    margin-bottom: auto !important;\n  }\n  .ms-xxl-0 {\n    margin-left: 0 !important;\n  }\n  .ms-xxl-1 {\n    margin-left: 0.25rem !important;\n  }\n  .ms-xxl-2 {\n    margin-left: 0.5rem !important;\n  }\n  .ms-xxl-3 {\n    margin-left: 1rem !important;\n  }\n  .ms-xxl-4 {\n    margin-left: 1.5rem !important;\n  }\n  .ms-xxl-5 {\n    margin-left: 3rem !important;\n  }\n  .ms-xxl-auto {\n    margin-left: auto !important;\n  }\n  .p-xxl-0 {\n    padding: 0 !important;\n  }\n  .p-xxl-1 {\n    padding: 0.25rem !important;\n  }\n  .p-xxl-2 {\n    padding: 0.5rem !important;\n  }\n  .p-xxl-3 {\n    padding: 1rem !important;\n  }\n  .p-xxl-4 {\n    padding: 1.5rem !important;\n  }\n  .p-xxl-5 {\n    padding: 3rem !important;\n  }\n  .px-xxl-0 {\n    padding-right: 0 !important;\n    padding-left: 0 !important;\n  }\n  .px-xxl-1 {\n    padding-right: 0.25rem !important;\n    padding-left: 0.25rem !important;\n  }\n  .px-xxl-2 {\n    padding-right: 0.5rem !important;\n    padding-left: 0.5rem !important;\n  }\n  .px-xxl-3 {\n    padding-right: 1rem !important;\n    padding-left: 1rem !important;\n  }\n  .px-xxl-4 {\n    padding-right: 1.5rem !important;\n    padding-left: 1.5rem !important;\n  }\n  .px-xxl-5 {\n    padding-right: 3rem !important;\n    padding-left: 3rem !important;\n  }\n  .py-xxl-0 {\n    padding-top: 0 !important;\n    padding-bottom: 0 !important;\n  }\n  .py-xxl-1 {\n    padding-top: 0.25rem !important;\n    padding-bottom: 0.25rem !important;\n  }\n  .py-xxl-2 {\n    padding-top: 0.5rem !important;\n    padding-bottom: 0.5rem !important;\n  }\n  .py-xxl-3 {\n    padding-top: 1rem !important;\n    padding-bottom: 1rem !important;\n  }\n  .py-xxl-4 {\n    padding-top: 1.5rem !important;\n    padding-bottom: 1.5rem !important;\n  }\n  .py-xxl-5 {\n    padding-top: 3rem !important;\n    padding-bottom: 3rem !important;\n  }\n  .pt-xxl-0 {\n    padding-top: 0 !important;\n  }\n  .pt-xxl-1 {\n    padding-top: 0.25rem !important;\n  }\n  .pt-xxl-2 {\n    padding-top: 0.5rem !important;\n  }\n  .pt-xxl-3 {\n    padding-top: 1rem !important;\n  }\n  .pt-xxl-4 {\n    padding-top: 1.5rem !important;\n  }\n  .pt-xxl-5 {\n    padding-top: 3rem !important;\n  }\n  .pe-xxl-0 {\n    padding-right: 0 !important;\n  }\n  .pe-xxl-1 {\n    padding-right: 0.25rem !important;\n  }\n  .pe-xxl-2 {\n    padding-right: 0.5rem !important;\n  }\n  .pe-xxl-3 {\n    padding-right: 1rem !important;\n  }\n  .pe-xxl-4 {\n    padding-right: 1.5rem !important;\n  }\n  .pe-xxl-5 {\n    padding-right: 3rem !important;\n  }\n  .pb-xxl-0 {\n    padding-bottom: 0 !important;\n  }\n  .pb-xxl-1 {\n    padding-bottom: 0.25rem !important;\n  }\n  .pb-xxl-2 {\n    padding-bottom: 0.5rem !important;\n  }\n  .pb-xxl-3 {\n    padding-bottom: 1rem !important;\n  }\n  .pb-xxl-4 {\n    padding-bottom: 1.5rem !important;\n  }\n  .pb-xxl-5 {\n    padding-bottom: 3rem !important;\n  }\n  .ps-xxl-0 {\n    padding-left: 0 !important;\n  }\n  .ps-xxl-1 {\n    padding-left: 0.25rem !important;\n  }\n  .ps-xxl-2 {\n    padding-left: 0.5rem !important;\n  }\n  .ps-xxl-3 {\n    padding-left: 1rem !important;\n  }\n  .ps-xxl-4 {\n    padding-left: 1.5rem !important;\n  }\n  .ps-xxl-5 {\n    padding-left: 3rem !important;\n  }\n  .text-xxl-start {\n    text-align: left !important;\n  }\n  .text-xxl-end {\n    text-align: right !important;\n  }\n  .text-xxl-center {\n    text-align: center !important;\n  }\n}\n\n@media (min-width: 1200px) {\n  .fs-1 {\n    font-size: 2.5rem !important;\n  }\n  .fs-2 {\n    font-size: 2rem !important;\n  }\n  .fs-3 {\n    font-size: 1.75rem !important;\n  }\n  .fs-4 {\n    font-size: 1.5rem !important;\n  }\n}\n\n@media print {\n  .d-print-inline {\n    display: inline !important;\n  }\n  .d-print-inline-block {\n    display: inline-block !important;\n  }\n  .d-print-block {\n    display: block !important;\n  }\n  .d-print-grid {\n    display: grid !important;\n  }\n  .d-print-table {\n    display: table !important;\n  }\n  .d-print-table-row {\n    display: table-row !important;\n  }\n  .d-print-table-cell {\n    display: table-cell !important;\n  }\n  .d-print-flex {\n    display: -ms-flexbox !important;\n    display: flex !important;\n  }\n  .d-print-inline-flex {\n    display: -ms-inline-flexbox !important;\n    display: inline-flex !important;\n  }\n  .d-print-none {\n    display: none !important;\n  }\n}\n\n.dropdown-toggle::after,\n.dropup .dropdown-toggle::after,\n.dropstart .dropdown-toggle::after,\n.dropend .dropdown-toggle::after {\n  border-width: 4px;\n}\n\n.navbar {\n  border: none;\n  box-shadow: 0 1px 2px rgba(0, 0, 0, 0.3);\n}\n\n.navbar-brand {\n  font-size: 24px;\n}\n\n.navbar-nav .nav-link {\n  padding-top: .9rem;\n  padding-bottom: .9rem;\n}\n\n.navbar.bg-dark input[type=\"search\"],\n.navbar.bg-dark input[type=\"text\"],\n.navbar.bg-dark input[type=\"password\"],\n.navbar.bg-dark input[type=\"email\"],\n.navbar.bg-dark input[type=\"number\"],\n.navbar.bg-dark input[type=\"tel\"], .navbar.bg-primary input[type=\"search\"],\n.navbar.bg-primary input[type=\"text\"],\n.navbar.bg-primary input[type=\"password\"],\n.navbar.bg-primary input[type=\"email\"],\n.navbar.bg-primary input[type=\"number\"],\n.navbar.bg-primary input[type=\"tel\"] {\n  color: #fff;\n  box-shadow: inset 0 -1px 0 rgba(255, 255, 255, 0.5);\n}\n\n.navbar.bg-dark input[type=\"search\"]:focus,\n.navbar.bg-dark input[type=\"text\"]:focus,\n.navbar.bg-dark input[type=\"password\"]:focus,\n.navbar.bg-dark input[type=\"email\"]:focus,\n.navbar.bg-dark input[type=\"number\"]:focus,\n.navbar.bg-dark input[type=\"tel\"]:focus, .navbar.bg-primary input[type=\"search\"]:focus,\n.navbar.bg-primary input[type=\"text\"]:focus,\n.navbar.bg-primary input[type=\"password\"]:focus,\n.navbar.bg-primary input[type=\"email\"]:focus,\n.navbar.bg-primary input[type=\"number\"]:focus,\n.navbar.bg-primary input[type=\"tel\"]:focus {\n  box-shadow: inset 0 -2px 0 #fff;\n}\n\n.navbar.bg-dark input[type=\"search\"]::-webkit-input-placeholder, .navbar.bg-dark input[type=\"text\"]::-webkit-input-placeholder, .navbar.bg-dark input[type=\"password\"]::-webkit-input-placeholder, .navbar.bg-dark input[type=\"email\"]::-webkit-input-placeholder, .navbar.bg-dark input[type=\"number\"]::-webkit-input-placeholder, .navbar.bg-dark input[type=\"tel\"]::-webkit-input-placeholder, .navbar.bg-primary input[type=\"search\"]::-webkit-input-placeholder, .navbar.bg-primary input[type=\"text\"]::-webkit-input-placeholder, .navbar.bg-primary input[type=\"password\"]::-webkit-input-placeholder, .navbar.bg-primary input[type=\"email\"]::-webkit-input-placeholder, .navbar.bg-primary input[type=\"number\"]::-webkit-input-placeholder, .navbar.bg-primary input[type=\"tel\"]::-webkit-input-placeholder {\n  color: rgba(255, 255, 255, 0.5);\n}\n\n.navbar.bg-dark input[type=\"search\"]::-moz-placeholder, .navbar.bg-dark input[type=\"text\"]::-moz-placeholder, .navbar.bg-dark input[type=\"password\"]::-moz-placeholder, .navbar.bg-dark input[type=\"email\"]::-moz-placeholder, .navbar.bg-dark input[type=\"number\"]::-moz-placeholder, .navbar.bg-dark input[type=\"tel\"]::-moz-placeholder, .navbar.bg-primary input[type=\"search\"]::-moz-placeholder, .navbar.bg-primary input[type=\"text\"]::-moz-placeholder, .navbar.bg-primary input[type=\"password\"]::-moz-placeholder, .navbar.bg-primary input[type=\"email\"]::-moz-placeholder, .navbar.bg-primary input[type=\"number\"]::-moz-placeholder, .navbar.bg-primary input[type=\"tel\"]::-moz-placeholder {\n  color: rgba(255, 255, 255, 0.5);\n}\n\n.navbar.bg-dark input[type=\"search\"]:-ms-input-placeholder, .navbar.bg-dark input[type=\"text\"]:-ms-input-placeholder, .navbar.bg-dark input[type=\"password\"]:-ms-input-placeholder, .navbar.bg-dark input[type=\"email\"]:-ms-input-placeholder, .navbar.bg-dark input[type=\"number\"]:-ms-input-placeholder, .navbar.bg-dark input[type=\"tel\"]:-ms-input-placeholder, .navbar.bg-primary input[type=\"search\"]:-ms-input-placeholder, .navbar.bg-primary input[type=\"text\"]:-ms-input-placeholder, .navbar.bg-primary input[type=\"password\"]:-ms-input-placeholder, .navbar.bg-primary input[type=\"email\"]:-ms-input-placeholder, .navbar.bg-primary input[type=\"number\"]:-ms-input-placeholder, .navbar.bg-primary input[type=\"tel\"]:-ms-input-placeholder {\n  color: rgba(255, 255, 255, 0.5);\n}\n\n.navbar.bg-dark input[type=\"search\"]::-ms-input-placeholder, .navbar.bg-dark input[type=\"text\"]::-ms-input-placeholder, .navbar.bg-dark input[type=\"password\"]::-ms-input-placeholder, .navbar.bg-dark input[type=\"email\"]::-ms-input-placeholder, .navbar.bg-dark input[type=\"number\"]::-ms-input-placeholder, .navbar.bg-dark input[type=\"tel\"]::-ms-input-placeholder, .navbar.bg-primary input[type=\"search\"]::-ms-input-placeholder, .navbar.bg-primary input[type=\"text\"]::-ms-input-placeholder, .navbar.bg-primary input[type=\"password\"]::-ms-input-placeholder, .navbar.bg-primary input[type=\"email\"]::-ms-input-placeholder, .navbar.bg-primary input[type=\"number\"]::-ms-input-placeholder, .navbar.bg-primary input[type=\"tel\"]::-ms-input-placeholder {\n  color: rgba(255, 255, 255, 0.5);\n}\n\n.navbar.bg-dark input[type=\"search\"]::placeholder,\n.navbar.bg-dark input[type=\"text\"]::placeholder,\n.navbar.bg-dark input[type=\"password\"]::placeholder,\n.navbar.bg-dark input[type=\"email\"]::placeholder,\n.navbar.bg-dark input[type=\"number\"]::placeholder,\n.navbar.bg-dark input[type=\"tel\"]::placeholder, .navbar.bg-primary input[type=\"search\"]::placeholder,\n.navbar.bg-primary input[type=\"text\"]::placeholder,\n.navbar.bg-primary input[type=\"password\"]::placeholder,\n.navbar.bg-primary input[type=\"email\"]::placeholder,\n.navbar.bg-primary input[type=\"number\"]::placeholder,\n.navbar.bg-primary input[type=\"tel\"]::placeholder {\n  color: rgba(255, 255, 255, 0.5);\n}\n\n.btn-primary {\n  position: relative;\n}\n\n.btn-primary:focus {\n  background-color: #2196f3;\n  box-shadow: 0 0 0 2px rgba(204, 204, 204, 0.5);\n}\n\n.btn-primary:hover, .btn-primary:active:hover {\n  background-color: #1d84d6;\n}\n\n.btn-primary:active {\n  box-shadow: 2px 2px 4px rgba(0, 0, 0, 0.4);\n}\n\n.btn-primary::before {\n  content: \"\";\n  display: block;\n  position: absolute;\n  width: 100%;\n  height: 100%;\n  top: 0;\n  left: 0;\n  margin-left: 0;\n  background-image: radial-gradient(circle, #fff 10%, transparent 10.01%);\n  background-size: 1000% 1000%;\n  background-position: 50%;\n  border: none;\n  opacity: 0;\n  pointer-events: none;\n  transition: background .5s, opacity 1s;\n}\n\n.btn-primary:active::before {\n  background-size: 0 0;\n  opacity: .2;\n  transition: none;\n}\n\n.btn-primary.disabled::before, .btn-primary[disabled]::before {\n  display: none;\n}\n\n.btn-outline-primary {\n  position: relative;\n}\n\n.btn-outline-primary::before {\n  content: \"\";\n  display: block;\n  position: absolute;\n  width: 100%;\n  height: 100%;\n  top: 0;\n  left: 0;\n  margin-left: 0;\n  background-image: radial-gradient(circle, #fff 10%, transparent 10.01%);\n  background-size: 1000% 1000%;\n  background-position: 50%;\n  border: none;\n  opacity: 0;\n  pointer-events: none;\n  transition: background .5s, opacity 1s;\n}\n\n.btn-outline-primary:active::before {\n  background-size: 0 0;\n  opacity: .2;\n  transition: none;\n}\n\n.btn-outline-primary.disabled::before, .btn-outline-primary[disabled]::before {\n  display: none;\n}\n\n.btn-secondary {\n  position: relative;\n}\n\n.btn-secondary:focus {\n  background-color: #fff;\n  box-shadow: 0 0 0 2px rgba(204, 204, 204, 0.5);\n}\n\n.btn-secondary:hover, .btn-secondary:active:hover {\n  background-color: #e0e0e0;\n}\n\n.btn-secondary:active {\n  box-shadow: 2px 2px 4px rgba(0, 0, 0, 0.4);\n}\n\n.btn-secondary::before {\n  content: \"\";\n  display: block;\n  position: absolute;\n  width: 100%;\n  height: 100%;\n  top: 0;\n  left: 0;\n  margin-left: 0;\n  background-image: radial-gradient(circle, #bbb 10%, transparent 10.01%);\n  background-size: 1000% 1000%;\n  background-position: 50%;\n  border: none;\n  opacity: 0;\n  pointer-events: none;\n  transition: background .5s, opacity 1s;\n}\n\n.btn-secondary:active::before {\n  background-size: 0 0;\n  opacity: .2;\n  transition: none;\n}\n\n.btn-secondary.disabled::before, .btn-secondary[disabled]::before {\n  display: none;\n}\n\n.btn-outline-secondary {\n  position: relative;\n}\n\n.btn-outline-secondary::before {\n  content: \"\";\n  display: block;\n  position: absolute;\n  width: 100%;\n  height: 100%;\n  top: 0;\n  left: 0;\n  margin-left: 0;\n  background-image: radial-gradient(circle, #bbb 10%, transparent 10.01%);\n  background-size: 1000% 1000%;\n  background-position: 50%;\n  border: none;\n  opacity: 0;\n  pointer-events: none;\n  transition: background .5s, opacity 1s;\n}\n\n.btn-outline-secondary:active::before {\n  background-size: 0 0;\n  opacity: .2;\n  transition: none;\n}\n\n.btn-outline-secondary.disabled::before, .btn-outline-secondary[disabled]::before {\n  display: none;\n}\n\n.btn-success {\n  position: relative;\n}\n\n.btn-success:focus {\n  background-color: #4caf50;\n  box-shadow: 0 0 0 2px rgba(204, 204, 204, 0.5);\n}\n\n.btn-success:hover, .btn-success:active:hover {\n  background-color: #439a46;\n}\n\n.btn-success:active {\n  box-shadow: 2px 2px 4px rgba(0, 0, 0, 0.4);\n}\n\n.btn-success::before {\n  content: \"\";\n  display: block;\n  position: absolute;\n  width: 100%;\n  height: 100%;\n  top: 0;\n  left: 0;\n  margin-left: 0;\n  background-image: radial-gradient(circle, #fff 10%, transparent 10.01%);\n  background-size: 1000% 1000%;\n  background-position: 50%;\n  border: none;\n  opacity: 0;\n  pointer-events: none;\n  transition: background .5s, opacity 1s;\n}\n\n.btn-success:active::before {\n  background-size: 0 0;\n  opacity: .2;\n  transition: none;\n}\n\n.btn-success.disabled::before, .btn-success[disabled]::before {\n  display: none;\n}\n\n.btn-outline-success {\n  position: relative;\n}\n\n.btn-outline-success::before {\n  content: \"\";\n  display: block;\n  position: absolute;\n  width: 100%;\n  height: 100%;\n  top: 0;\n  left: 0;\n  margin-left: 0;\n  background-image: radial-gradient(circle, #fff 10%, transparent 10.01%);\n  background-size: 1000% 1000%;\n  background-position: 50%;\n  border: none;\n  opacity: 0;\n  pointer-events: none;\n  transition: background .5s, opacity 1s;\n}\n\n.btn-outline-success:active::before {\n  background-size: 0 0;\n  opacity: .2;\n  transition: none;\n}\n\n.btn-outline-success.disabled::before, .btn-outline-success[disabled]::before {\n  display: none;\n}\n\n.btn-info {\n  position: relative;\n}\n\n.btn-info:focus {\n  background-color: #9c27b0;\n  box-shadow: 0 0 0 2px rgba(204, 204, 204, 0.5);\n}\n\n.btn-info:hover, .btn-info:active:hover {\n  background-color: #89229b;\n}\n\n.btn-info:active {\n  box-shadow: 2px 2px 4px rgba(0, 0, 0, 0.4);\n}\n\n.btn-info::before {\n  content: \"\";\n  display: block;\n  position: absolute;\n  width: 100%;\n  height: 100%;\n  top: 0;\n  left: 0;\n  margin-left: 0;\n  background-image: radial-gradient(circle, #fff 10%, transparent 10.01%);\n  background-size: 1000% 1000%;\n  background-position: 50%;\n  border: none;\n  opacity: 0;\n  pointer-events: none;\n  transition: background .5s, opacity 1s;\n}\n\n.btn-info:active::before {\n  background-size: 0 0;\n  opacity: .2;\n  transition: none;\n}\n\n.btn-info.disabled::before, .btn-info[disabled]::before {\n  display: none;\n}\n\n.btn-outline-info {\n  position: relative;\n}\n\n.btn-outline-info::before {\n  content: \"\";\n  display: block;\n  position: absolute;\n  width: 100%;\n  height: 100%;\n  top: 0;\n  left: 0;\n  margin-left: 0;\n  background-image: radial-gradient(circle, #fff 10%, transparent 10.01%);\n  background-size: 1000% 1000%;\n  background-position: 50%;\n  border: none;\n  opacity: 0;\n  pointer-events: none;\n  transition: background .5s, opacity 1s;\n}\n\n.btn-outline-info:active::before {\n  background-size: 0 0;\n  opacity: .2;\n  transition: none;\n}\n\n.btn-outline-info.disabled::before, .btn-outline-info[disabled]::before {\n  display: none;\n}\n\n.btn-warning {\n  position: relative;\n}\n\n.btn-warning:focus {\n  background-color: #ff9800;\n  box-shadow: 0 0 0 2px rgba(204, 204, 204, 0.5);\n}\n\n.btn-warning:hover, .btn-warning:active:hover {\n  background-color: #e08600;\n}\n\n.btn-warning:active {\n  box-shadow: 2px 2px 4px rgba(0, 0, 0, 0.4);\n}\n\n.btn-warning::before {\n  content: \"\";\n  display: block;\n  position: absolute;\n  width: 100%;\n  height: 100%;\n  top: 0;\n  left: 0;\n  margin-left: 0;\n  background-image: radial-gradient(circle, #fff 10%, transparent 10.01%);\n  background-size: 1000% 1000%;\n  background-position: 50%;\n  border: none;\n  opacity: 0;\n  pointer-events: none;\n  transition: background .5s, opacity 1s;\n}\n\n.btn-warning:active::before {\n  background-size: 0 0;\n  opacity: .2;\n  transition: none;\n}\n\n.btn-warning.disabled::before, .btn-warning[disabled]::before {\n  display: none;\n}\n\n.btn-outline-warning {\n  position: relative;\n}\n\n.btn-outline-warning::before {\n  content: \"\";\n  display: block;\n  position: absolute;\n  width: 100%;\n  height: 100%;\n  top: 0;\n  left: 0;\n  margin-left: 0;\n  background-image: radial-gradient(circle, #fff 10%, transparent 10.01%);\n  background-size: 1000% 1000%;\n  background-position: 50%;\n  border: none;\n  opacity: 0;\n  pointer-events: none;\n  transition: background .5s, opacity 1s;\n}\n\n.btn-outline-warning:active::before {\n  background-size: 0 0;\n  opacity: .2;\n  transition: none;\n}\n\n.btn-outline-warning.disabled::before, .btn-outline-warning[disabled]::before {\n  display: none;\n}\n\n.btn-danger {\n  position: relative;\n}\n\n.btn-danger:focus {\n  background-color: #e51c23;\n  box-shadow: 0 0 0 2px rgba(204, 204, 204, 0.5);\n}\n\n.btn-danger:hover, .btn-danger:active:hover {\n  background-color: #ca191f;\n}\n\n.btn-danger:active {\n  box-shadow: 2px 2px 4px rgba(0, 0, 0, 0.4);\n}\n\n.btn-danger::before {\n  content: \"\";\n  display: block;\n  position: absolute;\n  width: 100%;\n  height: 100%;\n  top: 0;\n  left: 0;\n  margin-left: 0;\n  background-image: radial-gradient(circle, #fff 10%, transparent 10.01%);\n  background-size: 1000% 1000%;\n  background-position: 50%;\n  border: none;\n  opacity: 0;\n  pointer-events: none;\n  transition: background .5s, opacity 1s;\n}\n\n.btn-danger:active::before {\n  background-size: 0 0;\n  opacity: .2;\n  transition: none;\n}\n\n.btn-danger.disabled::before, .btn-danger[disabled]::before {\n  display: none;\n}\n\n.btn-outline-danger {\n  position: relative;\n}\n\n.btn-outline-danger::before {\n  content: \"\";\n  display: block;\n  position: absolute;\n  width: 100%;\n  height: 100%;\n  top: 0;\n  left: 0;\n  margin-left: 0;\n  background-image: radial-gradient(circle, #fff 10%, transparent 10.01%);\n  background-size: 1000% 1000%;\n  background-position: 50%;\n  border: none;\n  opacity: 0;\n  pointer-events: none;\n  transition: background .5s, opacity 1s;\n}\n\n.btn-outline-danger:active::before {\n  background-size: 0 0;\n  opacity: .2;\n  transition: none;\n}\n\n.btn-outline-danger.disabled::before, .btn-outline-danger[disabled]::before {\n  display: none;\n}\n\n.btn-dark {\n  position: relative;\n}\n\n.btn-dark:focus {\n  background-color: #222;\n  box-shadow: 0 0 0 2px rgba(204, 204, 204, 0.5);\n}\n\n.btn-dark:hover, .btn-dark:active:hover {\n  background-color: #1e1e1e;\n}\n\n.btn-dark:active {\n  box-shadow: 2px 2px 4px rgba(0, 0, 0, 0.4);\n}\n\n.btn-dark::before {\n  content: \"\";\n  display: block;\n  position: absolute;\n  width: 100%;\n  height: 100%;\n  top: 0;\n  left: 0;\n  margin-left: 0;\n  background-image: radial-gradient(circle, #fff 10%, transparent 10.01%);\n  background-size: 1000% 1000%;\n  background-position: 50%;\n  border: none;\n  opacity: 0;\n  pointer-events: none;\n  transition: background .5s, opacity 1s;\n}\n\n.btn-dark:active::before {\n  background-size: 0 0;\n  opacity: .2;\n  transition: none;\n}\n\n.btn-dark.disabled::before, .btn-dark[disabled]::before {\n  display: none;\n}\n\n.btn-outline-dark {\n  position: relative;\n}\n\n.btn-outline-dark::before {\n  content: \"\";\n  display: block;\n  position: absolute;\n  width: 100%;\n  height: 100%;\n  top: 0;\n  left: 0;\n  margin-left: 0;\n  background-image: radial-gradient(circle, #fff 10%, transparent 10.01%);\n  background-size: 1000% 1000%;\n  background-position: 50%;\n  border: none;\n  opacity: 0;\n  pointer-events: none;\n  transition: background .5s, opacity 1s;\n}\n\n.btn-outline-dark:active::before {\n  background-size: 0 0;\n  opacity: .2;\n  transition: none;\n}\n\n.btn-outline-dark.disabled::before, .btn-outline-dark[disabled]::before {\n  display: none;\n}\n\n.btn-light {\n  position: relative;\n}\n\n.btn-light:focus {\n  background-color: #f8f9fa;\n  box-shadow: 0 0 0 2px rgba(204, 204, 204, 0.5);\n}\n\n.btn-light:hover, .btn-light:active:hover {\n  background-color: #dadbdc;\n}\n\n.btn-light:active {\n  box-shadow: 2px 2px 4px rgba(0, 0, 0, 0.4);\n}\n\n.btn-light::before {\n  content: \"\";\n  display: block;\n  position: absolute;\n  width: 100%;\n  height: 100%;\n  top: 0;\n  left: 0;\n  margin-left: 0;\n  background-image: radial-gradient(circle, #fff 10%, transparent 10.01%);\n  background-size: 1000% 1000%;\n  background-position: 50%;\n  border: none;\n  opacity: 0;\n  pointer-events: none;\n  transition: background .5s, opacity 1s;\n}\n\n.btn-light:active::before {\n  background-size: 0 0;\n  opacity: .2;\n  transition: none;\n}\n\n.btn-light.disabled::before, .btn-light[disabled]::before {\n  display: none;\n}\n\n.btn-outline-light {\n  position: relative;\n}\n\n.btn-outline-light::before {\n  content: \"\";\n  display: block;\n  position: absolute;\n  width: 100%;\n  height: 100%;\n  top: 0;\n  left: 0;\n  margin-left: 0;\n  background-image: radial-gradient(circle, #fff 10%, transparent 10.01%);\n  background-size: 1000% 1000%;\n  background-position: 50%;\n  border: none;\n  opacity: 0;\n  pointer-events: none;\n  transition: background .5s, opacity 1s;\n}\n\n.btn-outline-light:active::before {\n  background-size: 0 0;\n  opacity: .2;\n  transition: none;\n}\n\n.btn-outline-light.disabled::before, .btn-outline-light[disabled]::before {\n  display: none;\n}\n\n.btn {\n  text-transform: uppercase;\n  border: none;\n  box-shadow: 0 1px 4px rgba(0, 0, 0, 0.4);\n  transition: color .4s, background-color .4s, border-color .4s, box-shadow .4s;\n}\n\n.btn-link {\n  box-shadow: none;\n  color: #2196f3;\n}\n\n.btn-link:hover, .btn-link:focus {\n  box-shadow: none;\n  color: #1a78c2;\n}\n\n.btn-link.disabled:hover, .btn-link.disabled:active:hover, .btn-link[disabled]:hover, .btn-link[disabled]:active:hover,\nfieldset[disabled] .btn-link:hover,\nfieldset[disabled] .btn-link:active:hover {\n  color: #666;\n  text-decoration: none;\n}\n\n.btn-secondary.disabled, .btn-secondary[disabled],\nfieldset[disabled] .btn-secondary {\n  background-color: rgba(0, 0, 0, 0.1);\n  color: rgba(0, 0, 0, 0.4);\n  opacity: 1;\n}\n\n.btn-secondary.disabled:hover, .btn-secondary.disabled:focus, .btn-secondary[disabled]:hover, .btn-secondary[disabled]:focus,\nfieldset[disabled] .btn-secondary:hover,\nfieldset[disabled] .btn-secondary:focus {\n  background-color: rgba(0, 0, 0, 0.1);\n}\n\n.btn-outline-secondary {\n  border-color: #eee;\n  color: #dee2e6;\n}\n\n.btn-warning {\n  color: #fff;\n}\n\n.btn-group .btn + .btn,\n.btn-group .btn + .btn-group,\n.btn-group .btn-group + .btn,\n.btn-group .btn-group + .btn-group {\n  margin-left: 0;\n}\n\n.btn-group-vertical > .btn + .btn,\n.btn-group-vertical > .btn + .btn-group,\n.btn-group-vertical > .btn-group + .btn,\n.btn-group-vertical > .btn-group + .btn-group {\n  margin-top: 0;\n}\n\n.btn-group .btn + .btn,\n.btn-group .btn + .btn-group > .dropdown-toggle {\n  box-shadow: 1px 1px 4px rgba(0, 0, 0, 0.4);\n}\n\n.border-secondary {\n  border: 1px solid #dfdfdf !important;\n}\n\nbody,\ninput,\nbutton {\n  letter-spacing: .1px;\n}\n\np {\n  margin: 0 0 1em;\n}\n\n.text-secondary {\n  color: #bbb !important;\n}\n\n.table-hover > tbody > tr,\n.table-hover > tbody > tr > th,\n.table-hover > tbody > tr > td {\n  transition: background-color .2s, color .2s;\n}\n\n.thead-inverse th {\n  background-color: #2196f3;\n  color: #fff;\n}\n\n.col-form-label {\n  font-size: 16px;\n}\n\n.col-form-label-sm {\n  font-size: 0.875rem;\n}\n\n.col-form-label-lg {\n  font-size: 1.25rem;\n}\n\ntextarea,\ntextarea.form-control,\ninput.form-control,\ninput[type=\"text\"],\ninput[type=\"password\"],\ninput[type=\"email\"],\ninput[type=\"number\"],\n[type=\"text\"].form-control,\n[type=\"password\"].form-control,\n[type=\"email\"].form-control,\n[type=\"tel\"].form-control,\n[contenteditable].form-control {\n  box-shadow: inset 0 -1px 0 #ddd;\n  transition: box-shadow .2s;\n}\n\ntextarea:focus,\ntextarea.form-control:focus,\ninput.form-control:focus,\ninput[type=\"text\"]:focus,\ninput[type=\"password\"]:focus,\ninput[type=\"email\"]:focus,\ninput[type=\"number\"]:focus,\n[type=\"text\"].form-control:focus,\n[type=\"password\"].form-control:focus,\n[type=\"email\"].form-control:focus,\n[type=\"tel\"].form-control:focus,\n[contenteditable].form-control:focus {\n  box-shadow: inset 0 -2px 0 #2196f3;\n}\n\ntextarea[disabled], textarea[readonly],\ntextarea.form-control[disabled],\ntextarea.form-control[readonly],\ninput.form-control[disabled],\ninput.form-control[readonly],\ninput[type=\"text\"][disabled],\ninput[type=\"text\"][readonly],\ninput[type=\"password\"][disabled],\ninput[type=\"password\"][readonly],\ninput[type=\"email\"][disabled],\ninput[type=\"email\"][readonly],\ninput[type=\"number\"][disabled],\ninput[type=\"number\"][readonly],\n[type=\"text\"].form-control[disabled],\n[type=\"text\"].form-control[readonly],\n[type=\"password\"].form-control[disabled],\n[type=\"password\"].form-control[readonly],\n[type=\"email\"].form-control[disabled],\n[type=\"email\"].form-control[readonly],\n[type=\"tel\"].form-control[disabled],\n[type=\"tel\"].form-control[readonly],\n[contenteditable].form-control[disabled],\n[contenteditable].form-control[readonly] {\n  box-shadow: none;\n  border-bottom: 1px dotted #ddd;\n}\n\ntextarea[disabled]::-webkit-input-placeholder, textarea.form-control[disabled]::-webkit-input-placeholder, input.form-control[disabled]::-webkit-input-placeholder, input[type=\"text\"][disabled]::-webkit-input-placeholder, input[type=\"password\"][disabled]::-webkit-input-placeholder, input[type=\"email\"][disabled]::-webkit-input-placeholder, input[type=\"number\"][disabled]::-webkit-input-placeholder, [type=\"text\"].form-control[disabled]::-webkit-input-placeholder, [type=\"password\"].form-control[disabled]::-webkit-input-placeholder, [type=\"email\"].form-control[disabled]::-webkit-input-placeholder, [type=\"tel\"].form-control[disabled]::-webkit-input-placeholder, [contenteditable].form-control[disabled]::-webkit-input-placeholder {\n  color: #ddd;\n}\n\ntextarea[disabled]::-moz-placeholder, textarea.form-control[disabled]::-moz-placeholder, input.form-control[disabled]::-moz-placeholder, input[type=\"text\"][disabled]::-moz-placeholder, input[type=\"password\"][disabled]::-moz-placeholder, input[type=\"email\"][disabled]::-moz-placeholder, input[type=\"number\"][disabled]::-moz-placeholder, [type=\"text\"].form-control[disabled]::-moz-placeholder, [type=\"password\"].form-control[disabled]::-moz-placeholder, [type=\"email\"].form-control[disabled]::-moz-placeholder, [type=\"tel\"].form-control[disabled]::-moz-placeholder, [contenteditable].form-control[disabled]::-moz-placeholder {\n  color: #ddd;\n}\n\ntextarea[disabled]:-ms-input-placeholder, textarea.form-control[disabled]:-ms-input-placeholder, input.form-control[disabled]:-ms-input-placeholder, input[type=\"text\"][disabled]:-ms-input-placeholder, input[type=\"password\"][disabled]:-ms-input-placeholder, input[type=\"email\"][disabled]:-ms-input-placeholder, input[type=\"number\"][disabled]:-ms-input-placeholder, [type=\"text\"].form-control[disabled]:-ms-input-placeholder, [type=\"password\"].form-control[disabled]:-ms-input-placeholder, [type=\"email\"].form-control[disabled]:-ms-input-placeholder, [type=\"tel\"].form-control[disabled]:-ms-input-placeholder, [contenteditable].form-control[disabled]:-ms-input-placeholder {\n  color: #ddd;\n}\n\ntextarea[disabled]::-ms-input-placeholder, textarea.form-control[disabled]::-ms-input-placeholder, input.form-control[disabled]::-ms-input-placeholder, input[type=\"text\"][disabled]::-ms-input-placeholder, input[type=\"password\"][disabled]::-ms-input-placeholder, input[type=\"email\"][disabled]::-ms-input-placeholder, input[type=\"number\"][disabled]::-ms-input-placeholder, [type=\"text\"].form-control[disabled]::-ms-input-placeholder, [type=\"password\"].form-control[disabled]::-ms-input-placeholder, [type=\"email\"].form-control[disabled]::-ms-input-placeholder, [type=\"tel\"].form-control[disabled]::-ms-input-placeholder, [contenteditable].form-control[disabled]::-ms-input-placeholder {\n  color: #ddd;\n}\n\ntextarea[disabled], textarea[disabled]::placeholder,\ntextarea.form-control[disabled],\ntextarea.form-control[disabled]::placeholder,\ninput.form-control[disabled],\ninput.form-control[disabled]::placeholder,\ninput[type=\"text\"][disabled],\ninput[type=\"text\"][disabled]::placeholder,\ninput[type=\"password\"][disabled],\ninput[type=\"password\"][disabled]::placeholder,\ninput[type=\"email\"][disabled],\ninput[type=\"email\"][disabled]::placeholder,\ninput[type=\"number\"][disabled],\ninput[type=\"number\"][disabled]::placeholder,\n[type=\"text\"].form-control[disabled],\n[type=\"text\"].form-control[disabled]::placeholder,\n[type=\"password\"].form-control[disabled],\n[type=\"password\"].form-control[disabled]::placeholder,\n[type=\"email\"].form-control[disabled],\n[type=\"email\"].form-control[disabled]::placeholder,\n[type=\"tel\"].form-control[disabled],\n[type=\"tel\"].form-control[disabled]::placeholder,\n[contenteditable].form-control[disabled],\n[contenteditable].form-control[disabled]::placeholder {\n  color: #ddd;\n}\n\ntextarea::-ms-clear,\ntextarea.form-control::-ms-clear,\ninput.form-control::-ms-clear,\ninput[type=\"text\"]::-ms-clear,\ninput[type=\"password\"]::-ms-clear,\ninput[type=\"email\"]::-ms-clear,\ninput[type=\"number\"]::-ms-clear,\n[type=\"text\"].form-control::-ms-clear,\n[type=\"password\"].form-control::-ms-clear,\n[type=\"email\"].form-control::-ms-clear,\n[type=\"tel\"].form-control::-ms-clear,\n[contenteditable].form-control::-ms-clear {\n  display: none;\n}\n\nselect,\nselect.form-control {\n  -webkit-appearance: none;\n  -moz-appearance: none;\n  appearance: none;\n  padding: .5rem 0;\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='4' viewBox='0 0 8 4'%3e%3cpolygon fill='%23666' points='8 0 4 4 0 0'/%3e%3c/svg%3e%0a\");\n  background-size: 8px 4px;\n  background-repeat: no-repeat;\n  background-position: right center;\n  box-shadow: inset 0 -1px 0 #ddd;\n}\n\nselect::-ms-expand,\nselect.form-control::-ms-expand {\n  display: none;\n}\n\nselect.input-sm,\nselect.form-control.input-sm {\n  font-size: 0.875rem;\n}\n\nselect.input-lg,\nselect.form-control.input-lg {\n  font-size: 1.25rem;\n}\n\nselect:focus,\nselect.form-control:focus {\n  box-shadow: inset 0 -2px 0 #2196f3;\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='4' viewBox='0 0 8 4'%3e%3cpolygon fill='%23212121' points='8 0 4 4 0 0'/%3e%3c/svg%3e%0a\");\n}\n\nselect[multiple],\nselect.form-control[multiple] {\n  background: none;\n}\n\n.form-check-input {\n  width: 1.25em;\n  height: 1.25em;\n  margin-top: 1px;\n  border: 2px solid #ced4da;\n}\n\n.form-check-input:checked[type=\"radio\"] {\n  background-size: 1.8em;\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='2' fill='%232196f3' stroke='%23fff' stroke-width='1' /%3e%3c/svg%3e\"), var(--bs-gradient);\n}\n\n.form-check.form-switch .form-check-input {\n  position: relative;\n  height: .8em;\n  border: none;\n  background-image: none;\n  background-color: #ced4da;\n}\n\n.form-check.form-switch .form-check-input:focus {\n  box-shadow: none;\n}\n\n.form-check.form-switch .form-check-input::before {\n  content: \"\";\n  position: absolute;\n  top: -.2em;\n  left: -.2em;\n  width: 1.2em;\n  height: 1.2em;\n  background-color: #fff;\n  border-radius: 50%;\n  box-shadow: 0 1px 4px rgba(0, 0, 0, 0.3);\n  transition: left .15s ease-in-out;\n}\n\n.form-check.form-switch .form-check-input::after {\n  content: \"\";\n  position: absolute;\n  top: -.2em;\n  left: -.2em;\n  width: 1.2em;\n  height: 1.2em;\n  border-radius: 50%;\n  box-shadow: 0 0 0 9px rgba(0, 0, 0, 0.05);\n  -webkit-transform: scale(0);\n  transform: scale(0);\n  transition: left .15s ease-in-out, box-shadow .15s ease-in-out, -webkit-transform .15s ease-in-out;\n  transition: left .15s ease-in-out, transform .15s ease-in-out, box-shadow .15s ease-in-out;\n  transition: left .15s ease-in-out, transform .15s ease-in-out, box-shadow .15s ease-in-out, -webkit-transform .15s ease-in-out;\n  z-index: -1;\n}\n\n.form-check.form-switch .form-check-input:hover:not(.disabled)::after, .form-check.form-switch .form-check-input:focus:not(.disabled)::after {\n  -webkit-transform: scale(0.9);\n  transform: scale(0.9);\n}\n\n.form-check.form-switch .form-check-input:focus:not(.disabled)::after {\n  box-shadow: 0 0 0 9px rgba(0, 0, 0, 0.1);\n}\n\n.form-check.form-switch .form-check-input:checked {\n  background-color: rgba(33, 150, 243, 0.3);\n}\n\n.form-check.form-switch .form-check-input:checked::before {\n  background-color: #2196f3;\n  left: calc(100% - .8em);\n}\n\n.form-check.form-switch .form-check-input:checked::after {\n  left: calc(100% - .8em);\n  box-shadow: 0 0 0 9px rgba(33, 150, 243, 0.1);\n}\n\n.form-check.form-switch .form-check-input:checked:hover:not(.disabled)::after, .form-check.form-switch .form-check-input:checked:focus:not(.disabled)::after {\n  -webkit-transform: scale(0.9);\n  transform: scale(0.9);\n}\n\n.form-check.form-switch .form-check-input:checked:focus:not(.disabled)::after {\n  box-shadow: 0 0 0 9px rgba(33, 150, 243, 0.2);\n}\n\n.form-check:not(.form-switch) .form-check-input:checked[type=\"checkbox\"] {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-width='2' d='M6 10l3 3l6-6'/%3e%3c/svg%3e\"), var(--bs-gradient);\n  background-size: 1.6em;\n}\n\n.has-warning input:not([type=\"checkbox\"]),\n.has-warning .form-control,\n.has-warning input.form-control[readonly],\n.has-warning input[type=\"text\"][readonly],\n.has-warning [type=\"text\"].form-control[readonly],\n.has-warning input:not([type=\"checkbox\"]):focus,\n.has-warning .form-control:focus {\n  border-bottom: none;\n  box-shadow: inset 0 -2px 0 #ff9800;\n}\n\n.has-danger input:not([type=\"checkbox\"]),\n.has-danger .form-control,\n.has-danger input.form-control[readonly],\n.has-danger input[type=\"text\"][readonly],\n.has-danger [type=\"text\"].form-control[readonly],\n.has-danger input:not([type=\"checkbox\"]):focus,\n.has-danger .form-control:focus {\n  border-bottom: none;\n  box-shadow: inset 0 -2px 0 #e51c23;\n}\n\n.has-success input:not([type=\"checkbox\"]),\n.has-success .form-control,\n.has-success input.form-control[readonly],\n.has-success input[type=\"text\"][readonly],\n.has-success [type=\"text\"].form-control[readonly],\n.has-success input:not([type=\"checkbox\"]):focus,\n.has-success .form-control:focus {\n  border-bottom: none;\n  box-shadow: inset 0 -2px 0 #4caf50;\n}\n\n.has-warning .input-group-addon,\n.has-danger .input-group-addon,\n.has-success .input-group-addon {\n  color: #666;\n  border-color: transparent;\n  background-color: transparent;\n}\n\n.form-group-lg select,\n.form-group-lg select.form-control {\n  line-height: 1.5;\n}\n\n.nav-tabs .nav-item + .nav-item {\n  margin-left: 0;\n}\n\n.nav-tabs .nav-link,\n.nav-tabs .nav-link:focus {\n  margin-right: 0;\n  background-color: transparent;\n  border: none;\n  color: #444;\n  box-shadow: inset 0 -1px 0 #ddd;\n  transition: color .2s, box-shadow .2s;\n}\n\n.nav-tabs .nav-link:hover,\n.nav-tabs .nav-link:focus:hover {\n  background-color: transparent;\n  box-shadow: inset 0 -2px 0 #2196f3;\n  color: #2196f3;\n}\n\n.nav-tabs .nav-link.active,\n.nav-tabs .nav-link.active:focus {\n  border: none;\n  box-shadow: inset 0 -2px 0 #2196f3;\n  color: #2196f3;\n}\n\n.nav-tabs .nav-link.active:hover,\n.nav-tabs .nav-link.active:focus:hover {\n  border: none;\n  color: #2196f3;\n}\n\n.nav-tabs .nav-link.disabled {\n  box-shadow: inset 0 -1px 0 #ddd;\n}\n\n.nav-tabs.nav-justified .nav-link,\n.nav-tabs.nav-justified .nav-link:hover,\n.nav-tabs.nav-justified .nav-link:focus,\n.nav-tabs.nav-justified .nav-link.active,\n.nav-tabs.nav-justified .nav-link.active:hover,\n.nav-tabs.nav-justified .nav-link.active:focus {\n  border: none;\n}\n\n.nav-tabs .dropdown-menu {\n  margin-top: 0;\n}\n\n.dropdown-menu {\n  margin-top: 0;\n  border: none;\n  box-shadow: 0 1px 4px rgba(0, 0, 0, 0.3);\n}\n\n.alert {\n  padding-right: 2.5rem;\n  border: none;\n}\n\n.alert,\n.alert h1,\n.alert .h1,\n.alert h2,\n.alert .h2,\n.alert h3,\n.alert .h3,\n.alert h4,\n.alert .h4,\n.alert h5,\n.alert .h5,\n.alert h6,\n.alert .h6 {\n  color: #fff;\n}\n\n.alert-primary {\n  background: #2196f3 linear-gradient(180deg, #42a6f5, #2196f3) repeat-x;\n}\n\n.alert-secondary {\n  background: #fff linear-gradient(180deg, white, #fff) repeat-x;\n}\n\n.alert-success {\n  background: #4caf50 linear-gradient(180deg, #67bb6a, #4caf50) repeat-x;\n}\n\n.alert-info {\n  background: #9c27b0 linear-gradient(180deg, #ab47bc, #9c27b0) repeat-x;\n}\n\n.alert-warning {\n  background: #ff9800 linear-gradient(180deg, #ffa726, #ff9800) repeat-x;\n}\n\n.alert-danger {\n  background: #e51c23 linear-gradient(180deg, #e93e44, #e51c23) repeat-x;\n}\n\n.alert-light {\n  background: #f8f9fa linear-gradient(180deg, #f9fafb, #f8f9fa) repeat-x;\n}\n\n.alert-dark {\n  background: #222 linear-gradient(180deg, #434343, #222) repeat-x;\n}\n\n.alert a:not(.btn),\n.alert .alert-link {\n  color: #fff;\n  font-weight: 700;\n}\n\n.alert-secondary,\n.alert-secondary a:not(.btn),\n.alert-secondary .alert-link, .alert-light,\n.alert-light a:not(.btn),\n.alert-light .alert-link {\n  color: #444;\n}\n\n.badge.bg-secondary, .badge.bg-light {\n  color: #222;\n}\n\n.tag {\n  padding: 4px 6px;\n}\n\n.card {\n  box-shadow: 0 1px 4px rgba(0, 0, 0, 0.4);\n}\n\n.card.border-primary, .card.border-secondary, .card.border-success, .card.border-info, .card.border-warning, .card.border-danger, .card.border-light, .card.border-dark {\n  border-width: 1px;\n}\n\n.list-group-item-action.active h1, .list-group-item-action.active .h1,\n.list-group-item-action.active h2,\n.list-group-item-action.active .h2,\n.list-group-item-action.active h3,\n.list-group-item-action.active .h3,\n.list-group-item-action.active h4,\n.list-group-item-action.active .h4,\n.list-group-item-action.active h5,\n.list-group-item-action.active .h5,\n.list-group-item-action.active h6,\n.list-group-item-action.active .h6 {\n  color: #fff;\n}\n\n.modal-content {\n  border-radius: .2rem;\n  box-shadow: 0 6px 36px rgba(0, 0, 0, 0.3);\n}\n\n.modal .btn-close,\n.toast .btn-close {\n  background-image: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23000'><path d='M.293.293a1 1 0 011.414 0L8 6.586 14.293.293a1 1 0 111.414 1.414L9.414 8l6.293 6.293a1 1 0 01-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 01-1.414-1.414L6.586 8 .293 1.707a1 1 0 010-1.414z'/></svg>\");\n}\n\n.popover {\n  border: none;\n  box-shadow: 0 1px 4px rgba(0, 0, 0, 0.3);\n}\n\n.carousel-caption h1, .carousel-caption .h1,\n.carousel-caption h2,\n.carousel-caption .h2,\n.carousel-caption h3,\n.carousel-caption .h3,\n.carousel-caption h4,\n.carousel-caption .h4,\n.carousel-caption h5,\n.carousel-caption .h5,\n.carousel-caption h6,\n.carousel-caption .h6 {\n  color: inherit;\n}\n"
  },
  {
    "path": "src/sourceDev.WebApp/SharedThemes/materia/wwwroot/css/fontawesome-all.css",
    "content": "/*!\n * Font Awesome Free 5.0.8 by @fontawesome - https://fontawesome.com\n * License - https://fontawesome.com/license (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)\n */\n.fa,\n.fas,\n.far,\n.fal,\n.fab {\n  -moz-osx-font-smoothing: grayscale;\n  -webkit-font-smoothing: antialiased;\n  display: inline-block;\n  font-style: normal;\n  font-variant: normal;\n  text-rendering: auto;\n  line-height: 1; }\n\n.fa-lg {\n  font-size: 1.33333em;\n  line-height: 0.75em;\n  vertical-align: -.0667em; }\n\n.fa-xs {\n  font-size: .75em; }\n\n.fa-sm {\n  font-size: .875em; }\n\n.fa-1x {\n  font-size: 1em; }\n\n.fa-2x {\n  font-size: 2em; }\n\n.fa-3x {\n  font-size: 3em; }\n\n.fa-4x {\n  font-size: 4em; }\n\n.fa-5x {\n  font-size: 5em; }\n\n.fa-6x {\n  font-size: 6em; }\n\n.fa-7x {\n  font-size: 7em; }\n\n.fa-8x {\n  font-size: 8em; }\n\n.fa-9x {\n  font-size: 9em; }\n\n.fa-10x {\n  font-size: 10em; }\n\n.fa-fw {\n  text-align: center;\n  width: 1.25em; }\n\n.fa-ul {\n  list-style-type: none;\n  margin-left: 2.5em;\n  padding-left: 0; }\n  .fa-ul > li {\n    position: relative; }\n\n.fa-li {\n  left: -2em;\n  position: absolute;\n  text-align: center;\n  width: 2em;\n  line-height: inherit; }\n\n.fa-border {\n  border: solid 0.08em #eee;\n  border-radius: .1em;\n  padding: .2em .25em .15em; }\n\n.fa-pull-left {\n  float: left; }\n\n.fa-pull-right {\n  float: right; }\n\n.fa.fa-pull-left,\n.fas.fa-pull-left,\n.far.fa-pull-left,\n.fal.fa-pull-left,\n.fab.fa-pull-left {\n  margin-right: .3em; }\n\n.fa.fa-pull-right,\n.fas.fa-pull-right,\n.far.fa-pull-right,\n.fal.fa-pull-right,\n.fab.fa-pull-right {\n  margin-left: .3em; }\n\n.fa-spin {\n  -webkit-animation: fa-spin 2s infinite linear;\n          animation: fa-spin 2s infinite linear; }\n\n.fa-pulse {\n  -webkit-animation: fa-spin 1s infinite steps(8);\n          animation: fa-spin 1s infinite steps(8); }\n\n@-webkit-keyframes fa-spin {\n  0% {\n    -webkit-transform: rotate(0deg);\n            transform: rotate(0deg); }\n  100% {\n    -webkit-transform: rotate(360deg);\n            transform: rotate(360deg); } }\n\n@keyframes fa-spin {\n  0% {\n    -webkit-transform: rotate(0deg);\n            transform: rotate(0deg); }\n  100% {\n    -webkit-transform: rotate(360deg);\n            transform: rotate(360deg); } }\n\n.fa-rotate-90 {\n  -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)\";\n  -webkit-transform: rotate(90deg);\n          transform: rotate(90deg); }\n\n.fa-rotate-180 {\n  -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)\";\n  -webkit-transform: rotate(180deg);\n          transform: rotate(180deg); }\n\n.fa-rotate-270 {\n  -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)\";\n  -webkit-transform: rotate(270deg);\n          transform: rotate(270deg); }\n\n.fa-flip-horizontal {\n  -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)\";\n  -webkit-transform: scale(-1, 1);\n          transform: scale(-1, 1); }\n\n.fa-flip-vertical {\n  -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)\";\n  -webkit-transform: scale(1, -1);\n          transform: scale(1, -1); }\n\n.fa-flip-horizontal.fa-flip-vertical {\n  -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)\";\n  -webkit-transform: scale(-1, -1);\n          transform: scale(-1, -1); }\n\n:root .fa-rotate-90,\n:root .fa-rotate-180,\n:root .fa-rotate-270,\n:root .fa-flip-horizontal,\n:root .fa-flip-vertical {\n  -webkit-filter: none;\n          filter: none; }\n\n.fa-stack {\n  display: inline-block;\n  height: 2em;\n  line-height: 2em;\n  position: relative;\n  vertical-align: middle;\n  width: 2em; }\n\n.fa-stack-1x,\n.fa-stack-2x {\n  left: 0;\n  position: absolute;\n  text-align: center;\n  width: 100%; }\n\n.fa-stack-1x {\n  line-height: inherit; }\n\n.fa-stack-2x {\n  font-size: 2em; }\n\n.fa-inverse {\n  color: #fff; }\n\n/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen\nreaders do not read off random characters that represent icons */\n.fa-500px:before {\n  content: \"\\f26e\"; }\n\n.fa-accessible-icon:before {\n  content: \"\\f368\"; }\n\n.fa-accusoft:before {\n  content: \"\\f369\"; }\n\n.fa-address-book:before {\n  content: \"\\f2b9\"; }\n\n.fa-address-card:before {\n  content: \"\\f2bb\"; }\n\n.fa-adjust:before {\n  content: \"\\f042\"; }\n\n.fa-adn:before {\n  content: \"\\f170\"; }\n\n.fa-adversal:before {\n  content: \"\\f36a\"; }\n\n.fa-affiliatetheme:before {\n  content: \"\\f36b\"; }\n\n.fa-algolia:before {\n  content: \"\\f36c\"; }\n\n.fa-align-center:before {\n  content: \"\\f037\"; }\n\n.fa-align-justify:before {\n  content: \"\\f039\"; }\n\n.fa-align-left:before {\n  content: \"\\f036\"; }\n\n.fa-align-right:before {\n  content: \"\\f038\"; }\n\n.fa-amazon:before {\n  content: \"\\f270\"; }\n\n.fa-amazon-pay:before {\n  content: \"\\f42c\"; }\n\n.fa-ambulance:before {\n  content: \"\\f0f9\"; }\n\n.fa-american-sign-language-interpreting:before {\n  content: \"\\f2a3\"; }\n\n.fa-amilia:before {\n  content: \"\\f36d\"; }\n\n.fa-anchor:before {\n  content: \"\\f13d\"; }\n\n.fa-android:before {\n  content: \"\\f17b\"; }\n\n.fa-angellist:before {\n  content: \"\\f209\"; }\n\n.fa-angle-double-down:before {\n  content: \"\\f103\"; }\n\n.fa-angle-double-left:before {\n  content: \"\\f100\"; }\n\n.fa-angle-double-right:before {\n  content: \"\\f101\"; }\n\n.fa-angle-double-up:before {\n  content: \"\\f102\"; }\n\n.fa-angle-down:before {\n  content: \"\\f107\"; }\n\n.fa-angle-left:before {\n  content: \"\\f104\"; }\n\n.fa-angle-right:before {\n  content: \"\\f105\"; }\n\n.fa-angle-up:before {\n  content: \"\\f106\"; }\n\n.fa-angrycreative:before {\n  content: \"\\f36e\"; }\n\n.fa-angular:before {\n  content: \"\\f420\"; }\n\n.fa-app-store:before {\n  content: \"\\f36f\"; }\n\n.fa-app-store-ios:before {\n  content: \"\\f370\"; }\n\n.fa-apper:before {\n  content: \"\\f371\"; }\n\n.fa-apple:before {\n  content: \"\\f179\"; }\n\n.fa-apple-pay:before {\n  content: \"\\f415\"; }\n\n.fa-archive:before {\n  content: \"\\f187\"; }\n\n.fa-arrow-alt-circle-down:before {\n  content: \"\\f358\"; }\n\n.fa-arrow-alt-circle-left:before {\n  content: \"\\f359\"; }\n\n.fa-arrow-alt-circle-right:before {\n  content: \"\\f35a\"; }\n\n.fa-arrow-alt-circle-up:before {\n  content: \"\\f35b\"; }\n\n.fa-arrow-circle-down:before {\n  content: \"\\f0ab\"; }\n\n.fa-arrow-circle-left:before {\n  content: \"\\f0a8\"; }\n\n.fa-arrow-circle-right:before {\n  content: \"\\f0a9\"; }\n\n.fa-arrow-circle-up:before {\n  content: \"\\f0aa\"; }\n\n.fa-arrow-down:before {\n  content: \"\\f063\"; }\n\n.fa-arrow-left:before {\n  content: \"\\f060\"; }\n\n.fa-arrow-right:before {\n  content: \"\\f061\"; }\n\n.fa-arrow-up:before {\n  content: \"\\f062\"; }\n\n.fa-arrows-alt:before {\n  content: \"\\f0b2\"; }\n\n.fa-arrows-alt-h:before {\n  content: \"\\f337\"; }\n\n.fa-arrows-alt-v:before {\n  content: \"\\f338\"; }\n\n.fa-assistive-listening-systems:before {\n  content: \"\\f2a2\"; }\n\n.fa-asterisk:before {\n  content: \"\\f069\"; }\n\n.fa-asymmetrik:before {\n  content: \"\\f372\"; }\n\n.fa-at:before {\n  content: \"\\f1fa\"; }\n\n.fa-audible:before {\n  content: \"\\f373\"; }\n\n.fa-audio-description:before {\n  content: \"\\f29e\"; }\n\n.fa-autoprefixer:before {\n  content: \"\\f41c\"; }\n\n.fa-avianex:before {\n  content: \"\\f374\"; }\n\n.fa-aviato:before {\n  content: \"\\f421\"; }\n\n.fa-aws:before {\n  content: \"\\f375\"; }\n\n.fa-backward:before {\n  content: \"\\f04a\"; }\n\n.fa-balance-scale:before {\n  content: \"\\f24e\"; }\n\n.fa-ban:before {\n  content: \"\\f05e\"; }\n\n.fa-band-aid:before {\n  content: \"\\f462\"; }\n\n.fa-bandcamp:before {\n  content: \"\\f2d5\"; }\n\n.fa-barcode:before {\n  content: \"\\f02a\"; }\n\n.fa-bars:before {\n  content: \"\\f0c9\"; }\n\n.fa-baseball-ball:before {\n  content: \"\\f433\"; }\n\n.fa-basketball-ball:before {\n  content: \"\\f434\"; }\n\n.fa-bath:before {\n  content: \"\\f2cd\"; }\n\n.fa-battery-empty:before {\n  content: \"\\f244\"; }\n\n.fa-battery-full:before {\n  content: \"\\f240\"; }\n\n.fa-battery-half:before {\n  content: \"\\f242\"; }\n\n.fa-battery-quarter:before {\n  content: \"\\f243\"; }\n\n.fa-battery-three-quarters:before {\n  content: \"\\f241\"; }\n\n.fa-bed:before {\n  content: \"\\f236\"; }\n\n.fa-beer:before {\n  content: \"\\f0fc\"; }\n\n.fa-behance:before {\n  content: \"\\f1b4\"; }\n\n.fa-behance-square:before {\n  content: \"\\f1b5\"; }\n\n.fa-bell:before {\n  content: \"\\f0f3\"; }\n\n.fa-bell-slash:before {\n  content: \"\\f1f6\"; }\n\n.fa-bicycle:before {\n  content: \"\\f206\"; }\n\n.fa-bimobject:before {\n  content: \"\\f378\"; }\n\n.fa-binoculars:before {\n  content: \"\\f1e5\"; }\n\n.fa-birthday-cake:before {\n  content: \"\\f1fd\"; }\n\n.fa-bitbucket:before {\n  content: \"\\f171\"; }\n\n.fa-bitcoin:before {\n  content: \"\\f379\"; }\n\n.fa-bity:before {\n  content: \"\\f37a\"; }\n\n.fa-black-tie:before {\n  content: \"\\f27e\"; }\n\n.fa-blackberry:before {\n  content: \"\\f37b\"; }\n\n.fa-blind:before {\n  content: \"\\f29d\"; }\n\n.fa-blogger:before {\n  content: \"\\f37c\"; }\n\n.fa-blogger-b:before {\n  content: \"\\f37d\"; }\n\n.fa-bluetooth:before {\n  content: \"\\f293\"; }\n\n.fa-bluetooth-b:before {\n  content: \"\\f294\"; }\n\n.fa-bold:before {\n  content: \"\\f032\"; }\n\n.fa-bolt:before {\n  content: \"\\f0e7\"; }\n\n.fa-bomb:before {\n  content: \"\\f1e2\"; }\n\n.fa-book:before {\n  content: \"\\f02d\"; }\n\n.fa-bookmark:before {\n  content: \"\\f02e\"; }\n\n.fa-bowling-ball:before {\n  content: \"\\f436\"; }\n\n.fa-box:before {\n  content: \"\\f466\"; }\n\n.fa-boxes:before {\n  content: \"\\f468\"; }\n\n.fa-braille:before {\n  content: \"\\f2a1\"; }\n\n.fa-briefcase:before {\n  content: \"\\f0b1\"; }\n\n.fa-btc:before {\n  content: \"\\f15a\"; }\n\n.fa-bug:before {\n  content: \"\\f188\"; }\n\n.fa-building:before {\n  content: \"\\f1ad\"; }\n\n.fa-bullhorn:before {\n  content: \"\\f0a1\"; }\n\n.fa-bullseye:before {\n  content: \"\\f140\"; }\n\n.fa-buromobelexperte:before {\n  content: \"\\f37f\"; }\n\n.fa-bus:before {\n  content: \"\\f207\"; }\n\n.fa-buysellads:before {\n  content: \"\\f20d\"; }\n\n.fa-calculator:before {\n  content: \"\\f1ec\"; }\n\n.fa-calendar:before {\n  content: \"\\f133\"; }\n\n.fa-calendar-alt:before {\n  content: \"\\f073\"; }\n\n.fa-calendar-check:before {\n  content: \"\\f274\"; }\n\n.fa-calendar-minus:before {\n  content: \"\\f272\"; }\n\n.fa-calendar-plus:before {\n  content: \"\\f271\"; }\n\n.fa-calendar-times:before {\n  content: \"\\f273\"; }\n\n.fa-camera:before {\n  content: \"\\f030\"; }\n\n.fa-camera-retro:before {\n  content: \"\\f083\"; }\n\n.fa-car:before {\n  content: \"\\f1b9\"; }\n\n.fa-caret-down:before {\n  content: \"\\f0d7\"; }\n\n.fa-caret-left:before {\n  content: \"\\f0d9\"; }\n\n.fa-caret-right:before {\n  content: \"\\f0da\"; }\n\n.fa-caret-square-down:before {\n  content: \"\\f150\"; }\n\n.fa-caret-square-left:before {\n  content: \"\\f191\"; }\n\n.fa-caret-square-right:before {\n  content: \"\\f152\"; }\n\n.fa-caret-square-up:before {\n  content: \"\\f151\"; }\n\n.fa-caret-up:before {\n  content: \"\\f0d8\"; }\n\n.fa-cart-arrow-down:before {\n  content: \"\\f218\"; }\n\n.fa-cart-plus:before {\n  content: \"\\f217\"; }\n\n.fa-cc-amazon-pay:before {\n  content: \"\\f42d\"; }\n\n.fa-cc-amex:before {\n  content: \"\\f1f3\"; }\n\n.fa-cc-apple-pay:before {\n  content: \"\\f416\"; }\n\n.fa-cc-diners-club:before {\n  content: \"\\f24c\"; }\n\n.fa-cc-discover:before {\n  content: \"\\f1f2\"; }\n\n.fa-cc-jcb:before {\n  content: \"\\f24b\"; }\n\n.fa-cc-mastercard:before {\n  content: \"\\f1f1\"; }\n\n.fa-cc-paypal:before {\n  content: \"\\f1f4\"; }\n\n.fa-cc-stripe:before {\n  content: \"\\f1f5\"; }\n\n.fa-cc-visa:before {\n  content: \"\\f1f0\"; }\n\n.fa-centercode:before {\n  content: \"\\f380\"; }\n\n.fa-certificate:before {\n  content: \"\\f0a3\"; }\n\n.fa-chart-area:before {\n  content: \"\\f1fe\"; }\n\n.fa-chart-bar:before {\n  content: \"\\f080\"; }\n\n.fa-chart-line:before {\n  content: \"\\f201\"; }\n\n.fa-chart-pie:before {\n  content: \"\\f200\"; }\n\n.fa-check:before {\n  content: \"\\f00c\"; }\n\n.fa-check-circle:before {\n  content: \"\\f058\"; }\n\n.fa-check-square:before {\n  content: \"\\f14a\"; }\n\n.fa-chess:before {\n  content: \"\\f439\"; }\n\n.fa-chess-bishop:before {\n  content: \"\\f43a\"; }\n\n.fa-chess-board:before {\n  content: \"\\f43c\"; }\n\n.fa-chess-king:before {\n  content: \"\\f43f\"; }\n\n.fa-chess-knight:before {\n  content: \"\\f441\"; }\n\n.fa-chess-pawn:before {\n  content: \"\\f443\"; }\n\n.fa-chess-queen:before {\n  content: \"\\f445\"; }\n\n.fa-chess-rook:before {\n  content: \"\\f447\"; }\n\n.fa-chevron-circle-down:before {\n  content: \"\\f13a\"; }\n\n.fa-chevron-circle-left:before {\n  content: \"\\f137\"; }\n\n.fa-chevron-circle-right:before {\n  content: \"\\f138\"; }\n\n.fa-chevron-circle-up:before {\n  content: \"\\f139\"; }\n\n.fa-chevron-down:before {\n  content: \"\\f078\"; }\n\n.fa-chevron-left:before {\n  content: \"\\f053\"; }\n\n.fa-chevron-right:before {\n  content: \"\\f054\"; }\n\n.fa-chevron-up:before {\n  content: \"\\f077\"; }\n\n.fa-child:before {\n  content: \"\\f1ae\"; }\n\n.fa-chrome:before {\n  content: \"\\f268\"; }\n\n.fa-circle:before {\n  content: \"\\f111\"; }\n\n.fa-circle-notch:before {\n  content: \"\\f1ce\"; }\n\n.fa-clipboard:before {\n  content: \"\\f328\"; }\n\n.fa-clipboard-check:before {\n  content: \"\\f46c\"; }\n\n.fa-clipboard-list:before {\n  content: \"\\f46d\"; }\n\n.fa-clock:before {\n  content: \"\\f017\"; }\n\n.fa-clone:before {\n  content: \"\\f24d\"; }\n\n.fa-closed-captioning:before {\n  content: \"\\f20a\"; }\n\n.fa-cloud:before {\n  content: \"\\f0c2\"; }\n\n.fa-cloud-download-alt:before {\n  content: \"\\f381\"; }\n\n.fa-cloud-upload-alt:before {\n  content: \"\\f382\"; }\n\n.fa-cloudscale:before {\n  content: \"\\f383\"; }\n\n.fa-cloudsmith:before {\n  content: \"\\f384\"; }\n\n.fa-cloudversify:before {\n  content: \"\\f385\"; }\n\n.fa-code:before {\n  content: \"\\f121\"; }\n\n.fa-code-branch:before {\n  content: \"\\f126\"; }\n\n.fa-codepen:before {\n  content: \"\\f1cb\"; }\n\n.fa-codiepie:before {\n  content: \"\\f284\"; }\n\n.fa-coffee:before {\n  content: \"\\f0f4\"; }\n\n.fa-cog:before {\n  content: \"\\f013\"; }\n\n.fa-cogs:before {\n  content: \"\\f085\"; }\n\n.fa-columns:before {\n  content: \"\\f0db\"; }\n\n.fa-comment:before {\n  content: \"\\f075\"; }\n\n.fa-comment-alt:before {\n  content: \"\\f27a\"; }\n\n.fa-comments:before {\n  content: \"\\f086\"; }\n\n.fa-compass:before {\n  content: \"\\f14e\"; }\n\n.fa-compress:before {\n  content: \"\\f066\"; }\n\n.fa-connectdevelop:before {\n  content: \"\\f20e\"; }\n\n.fa-contao:before {\n  content: \"\\f26d\"; }\n\n.fa-copy:before {\n  content: \"\\f0c5\"; }\n\n.fa-copyright:before {\n  content: \"\\f1f9\"; }\n\n.fa-cpanel:before {\n  content: \"\\f388\"; }\n\n.fa-creative-commons:before {\n  content: \"\\f25e\"; }\n\n.fa-credit-card:before {\n  content: \"\\f09d\"; }\n\n.fa-crop:before {\n  content: \"\\f125\"; }\n\n.fa-crosshairs:before {\n  content: \"\\f05b\"; }\n\n.fa-css3:before {\n  content: \"\\f13c\"; }\n\n.fa-css3-alt:before {\n  content: \"\\f38b\"; }\n\n.fa-cube:before {\n  content: \"\\f1b2\"; }\n\n.fa-cubes:before {\n  content: \"\\f1b3\"; }\n\n.fa-cut:before {\n  content: \"\\f0c4\"; }\n\n.fa-cuttlefish:before {\n  content: \"\\f38c\"; }\n\n.fa-d-and-d:before {\n  content: \"\\f38d\"; }\n\n.fa-dashcube:before {\n  content: \"\\f210\"; }\n\n.fa-database:before {\n  content: \"\\f1c0\"; }\n\n.fa-deaf:before {\n  content: \"\\f2a4\"; }\n\n.fa-delicious:before {\n  content: \"\\f1a5\"; }\n\n.fa-deploydog:before {\n  content: \"\\f38e\"; }\n\n.fa-deskpro:before {\n  content: \"\\f38f\"; }\n\n.fa-desktop:before {\n  content: \"\\f108\"; }\n\n.fa-deviantart:before {\n  content: \"\\f1bd\"; }\n\n.fa-digg:before {\n  content: \"\\f1a6\"; }\n\n.fa-digital-ocean:before {\n  content: \"\\f391\"; }\n\n.fa-discord:before {\n  content: \"\\f392\"; }\n\n.fa-discourse:before {\n  content: \"\\f393\"; }\n\n.fa-dna:before {\n  content: \"\\f471\"; }\n\n.fa-dochub:before {\n  content: \"\\f394\"; }\n\n.fa-docker:before {\n  content: \"\\f395\"; }\n\n.fa-dollar-sign:before {\n  content: \"\\f155\"; }\n\n.fa-dolly:before {\n  content: \"\\f472\"; }\n\n.fa-dolly-flatbed:before {\n  content: \"\\f474\"; }\n\n.fa-dot-circle:before {\n  content: \"\\f192\"; }\n\n.fa-download:before {\n  content: \"\\f019\"; }\n\n.fa-draft2digital:before {\n  content: \"\\f396\"; }\n\n.fa-dribbble:before {\n  content: \"\\f17d\"; }\n\n.fa-dribbble-square:before {\n  content: \"\\f397\"; }\n\n.fa-dropbox:before {\n  content: \"\\f16b\"; }\n\n.fa-drupal:before {\n  content: \"\\f1a9\"; }\n\n.fa-dyalog:before {\n  content: \"\\f399\"; }\n\n.fa-earlybirds:before {\n  content: \"\\f39a\"; }\n\n.fa-edge:before {\n  content: \"\\f282\"; }\n\n.fa-edit:before {\n  content: \"\\f044\"; }\n\n.fa-eject:before {\n  content: \"\\f052\"; }\n\n.fa-elementor:before {\n  content: \"\\f430\"; }\n\n.fa-ellipsis-h:before {\n  content: \"\\f141\"; }\n\n.fa-ellipsis-v:before {\n  content: \"\\f142\"; }\n\n.fa-ember:before {\n  content: \"\\f423\"; }\n\n.fa-empire:before {\n  content: \"\\f1d1\"; }\n\n.fa-envelope:before {\n  content: \"\\f0e0\"; }\n\n.fa-envelope-open:before {\n  content: \"\\f2b6\"; }\n\n.fa-envelope-square:before {\n  content: \"\\f199\"; }\n\n.fa-envira:before {\n  content: \"\\f299\"; }\n\n.fa-eraser:before {\n  content: \"\\f12d\"; }\n\n.fa-erlang:before {\n  content: \"\\f39d\"; }\n\n.fa-ethereum:before {\n  content: \"\\f42e\"; }\n\n.fa-etsy:before {\n  content: \"\\f2d7\"; }\n\n.fa-euro-sign:before {\n  content: \"\\f153\"; }\n\n.fa-exchange-alt:before {\n  content: \"\\f362\"; }\n\n.fa-exclamation:before {\n  content: \"\\f12a\"; }\n\n.fa-exclamation-circle:before {\n  content: \"\\f06a\"; }\n\n.fa-exclamation-triangle:before {\n  content: \"\\f071\"; }\n\n.fa-expand:before {\n  content: \"\\f065\"; }\n\n.fa-expand-arrows-alt:before {\n  content: \"\\f31e\"; }\n\n.fa-expeditedssl:before {\n  content: \"\\f23e\"; }\n\n.fa-external-link-alt:before {\n  content: \"\\f35d\"; }\n\n.fa-external-link-square-alt:before {\n  content: \"\\f360\"; }\n\n.fa-eye:before {\n  content: \"\\f06e\"; }\n\n.fa-eye-dropper:before {\n  content: \"\\f1fb\"; }\n\n.fa-eye-slash:before {\n  content: \"\\f070\"; }\n\n.fa-facebook:before {\n  content: \"\\f09a\"; }\n\n.fa-facebook-f:before {\n  content: \"\\f39e\"; }\n\n.fa-facebook-messenger:before {\n  content: \"\\f39f\"; }\n\n.fa-facebook-square:before {\n  content: \"\\f082\"; }\n\n.fa-fast-backward:before {\n  content: \"\\f049\"; }\n\n.fa-fast-forward:before {\n  content: \"\\f050\"; }\n\n.fa-fax:before {\n  content: \"\\f1ac\"; }\n\n.fa-female:before {\n  content: \"\\f182\"; }\n\n.fa-fighter-jet:before {\n  content: \"\\f0fb\"; }\n\n.fa-file:before {\n  content: \"\\f15b\"; }\n\n.fa-file-alt:before {\n  content: \"\\f15c\"; }\n\n.fa-file-archive:before {\n  content: \"\\f1c6\"; }\n\n.fa-file-audio:before {\n  content: \"\\f1c7\"; }\n\n.fa-file-code:before {\n  content: \"\\f1c9\"; }\n\n.fa-file-excel:before {\n  content: \"\\f1c3\"; }\n\n.fa-file-image:before {\n  content: \"\\f1c5\"; }\n\n.fa-file-pdf:before {\n  content: \"\\f1c1\"; }\n\n.fa-file-powerpoint:before {\n  content: \"\\f1c4\"; }\n\n.fa-file-video:before {\n  content: \"\\f1c8\"; }\n\n.fa-file-word:before {\n  content: \"\\f1c2\"; }\n\n.fa-film:before {\n  content: \"\\f008\"; }\n\n.fa-filter:before {\n  content: \"\\f0b0\"; }\n\n.fa-fire:before {\n  content: \"\\f06d\"; }\n\n.fa-fire-extinguisher:before {\n  content: \"\\f134\"; }\n\n.fa-firefox:before {\n  content: \"\\f269\"; }\n\n.fa-first-aid:before {\n  content: \"\\f479\"; }\n\n.fa-first-order:before {\n  content: \"\\f2b0\"; }\n\n.fa-firstdraft:before {\n  content: \"\\f3a1\"; }\n\n.fa-flag:before {\n  content: \"\\f024\"; }\n\n.fa-flag-checkered:before {\n  content: \"\\f11e\"; }\n\n.fa-flask:before {\n  content: \"\\f0c3\"; }\n\n.fa-flickr:before {\n  content: \"\\f16e\"; }\n\n.fa-flipboard:before {\n  content: \"\\f44d\"; }\n\n.fa-fly:before {\n  content: \"\\f417\"; }\n\n.fa-folder:before {\n  content: \"\\f07b\"; }\n\n.fa-folder-open:before {\n  content: \"\\f07c\"; }\n\n.fa-font:before {\n  content: \"\\f031\"; }\n\n.fa-font-awesome:before {\n  content: \"\\f2b4\"; }\n\n.fa-font-awesome-alt:before {\n  content: \"\\f35c\"; }\n\n.fa-font-awesome-flag:before {\n  content: \"\\f425\"; }\n\n.fa-fonticons:before {\n  content: \"\\f280\"; }\n\n.fa-fonticons-fi:before {\n  content: \"\\f3a2\"; }\n\n.fa-football-ball:before {\n  content: \"\\f44e\"; }\n\n.fa-fort-awesome:before {\n  content: \"\\f286\"; }\n\n.fa-fort-awesome-alt:before {\n  content: \"\\f3a3\"; }\n\n.fa-forumbee:before {\n  content: \"\\f211\"; }\n\n.fa-forward:before {\n  content: \"\\f04e\"; }\n\n.fa-foursquare:before {\n  content: \"\\f180\"; }\n\n.fa-free-code-camp:before {\n  content: \"\\f2c5\"; }\n\n.fa-freebsd:before {\n  content: \"\\f3a4\"; }\n\n.fa-frown:before {\n  content: \"\\f119\"; }\n\n.fa-futbol:before {\n  content: \"\\f1e3\"; }\n\n.fa-gamepad:before {\n  content: \"\\f11b\"; }\n\n.fa-gavel:before {\n  content: \"\\f0e3\"; }\n\n.fa-gem:before {\n  content: \"\\f3a5\"; }\n\n.fa-genderless:before {\n  content: \"\\f22d\"; }\n\n.fa-get-pocket:before {\n  content: \"\\f265\"; }\n\n.fa-gg:before {\n  content: \"\\f260\"; }\n\n.fa-gg-circle:before {\n  content: \"\\f261\"; }\n\n.fa-gift:before {\n  content: \"\\f06b\"; }\n\n.fa-git:before {\n  content: \"\\f1d3\"; }\n\n.fa-git-square:before {\n  content: \"\\f1d2\"; }\n\n.fa-github:before {\n  content: \"\\f09b\"; }\n\n.fa-github-alt:before {\n  content: \"\\f113\"; }\n\n.fa-github-square:before {\n  content: \"\\f092\"; }\n\n.fa-gitkraken:before {\n  content: \"\\f3a6\"; }\n\n.fa-gitlab:before {\n  content: \"\\f296\"; }\n\n.fa-gitter:before {\n  content: \"\\f426\"; }\n\n.fa-glass-martini:before {\n  content: \"\\f000\"; }\n\n.fa-glide:before {\n  content: \"\\f2a5\"; }\n\n.fa-glide-g:before {\n  content: \"\\f2a6\"; }\n\n.fa-globe:before {\n  content: \"\\f0ac\"; }\n\n.fa-gofore:before {\n  content: \"\\f3a7\"; }\n\n.fa-golf-ball:before {\n  content: \"\\f450\"; }\n\n.fa-goodreads:before {\n  content: \"\\f3a8\"; }\n\n.fa-goodreads-g:before {\n  content: \"\\f3a9\"; }\n\n.fa-google:before {\n  content: \"\\f1a0\"; }\n\n.fa-google-drive:before {\n  content: \"\\f3aa\"; }\n\n.fa-google-play:before {\n  content: \"\\f3ab\"; }\n\n.fa-google-plus:before {\n  content: \"\\f2b3\"; }\n\n.fa-google-plus-g:before {\n  content: \"\\f0d5\"; }\n\n.fa-google-plus-square:before {\n  content: \"\\f0d4\"; }\n\n.fa-google-wallet:before {\n  content: \"\\f1ee\"; }\n\n.fa-graduation-cap:before {\n  content: \"\\f19d\"; }\n\n.fa-gratipay:before {\n  content: \"\\f184\"; }\n\n.fa-grav:before {\n  content: \"\\f2d6\"; }\n\n.fa-gripfire:before {\n  content: \"\\f3ac\"; }\n\n.fa-grunt:before {\n  content: \"\\f3ad\"; }\n\n.fa-gulp:before {\n  content: \"\\f3ae\"; }\n\n.fa-h-square:before {\n  content: \"\\f0fd\"; }\n\n.fa-hacker-news:before {\n  content: \"\\f1d4\"; }\n\n.fa-hacker-news-square:before {\n  content: \"\\f3af\"; }\n\n.fa-hand-lizard:before {\n  content: \"\\f258\"; }\n\n.fa-hand-paper:before {\n  content: \"\\f256\"; }\n\n.fa-hand-peace:before {\n  content: \"\\f25b\"; }\n\n.fa-hand-point-down:before {\n  content: \"\\f0a7\"; }\n\n.fa-hand-point-left:before {\n  content: \"\\f0a5\"; }\n\n.fa-hand-point-right:before {\n  content: \"\\f0a4\"; }\n\n.fa-hand-point-up:before {\n  content: \"\\f0a6\"; }\n\n.fa-hand-pointer:before {\n  content: \"\\f25a\"; }\n\n.fa-hand-rock:before {\n  content: \"\\f255\"; }\n\n.fa-hand-scissors:before {\n  content: \"\\f257\"; }\n\n.fa-hand-spock:before {\n  content: \"\\f259\"; }\n\n.fa-handshake:before {\n  content: \"\\f2b5\"; }\n\n.fa-hashtag:before {\n  content: \"\\f292\"; }\n\n.fa-hdd:before {\n  content: \"\\f0a0\"; }\n\n.fa-heading:before {\n  content: \"\\f1dc\"; }\n\n.fa-headphones:before {\n  content: \"\\f025\"; }\n\n.fa-heart:before {\n  content: \"\\f004\"; }\n\n.fa-heartbeat:before {\n  content: \"\\f21e\"; }\n\n.fa-hips:before {\n  content: \"\\f452\"; }\n\n.fa-hire-a-helper:before {\n  content: \"\\f3b0\"; }\n\n.fa-history:before {\n  content: \"\\f1da\"; }\n\n.fa-hockey-puck:before {\n  content: \"\\f453\"; }\n\n.fa-home:before {\n  content: \"\\f015\"; }\n\n.fa-hooli:before {\n  content: \"\\f427\"; }\n\n.fa-hospital:before {\n  content: \"\\f0f8\"; }\n\n.fa-hospital-symbol:before {\n  content: \"\\f47e\"; }\n\n.fa-hotjar:before {\n  content: \"\\f3b1\"; }\n\n.fa-hourglass:before {\n  content: \"\\f254\"; }\n\n.fa-hourglass-end:before {\n  content: \"\\f253\"; }\n\n.fa-hourglass-half:before {\n  content: \"\\f252\"; }\n\n.fa-hourglass-start:before {\n  content: \"\\f251\"; }\n\n.fa-houzz:before {\n  content: \"\\f27c\"; }\n\n.fa-html5:before {\n  content: \"\\f13b\"; }\n\n.fa-hubspot:before {\n  content: \"\\f3b2\"; }\n\n.fa-i-cursor:before {\n  content: \"\\f246\"; }\n\n.fa-id-badge:before {\n  content: \"\\f2c1\"; }\n\n.fa-id-card:before {\n  content: \"\\f2c2\"; }\n\n.fa-image:before {\n  content: \"\\f03e\"; }\n\n.fa-images:before {\n  content: \"\\f302\"; }\n\n.fa-imdb:before {\n  content: \"\\f2d8\"; }\n\n.fa-inbox:before {\n  content: \"\\f01c\"; }\n\n.fa-indent:before {\n  content: \"\\f03c\"; }\n\n.fa-industry:before {\n  content: \"\\f275\"; }\n\n.fa-info:before {\n  content: \"\\f129\"; }\n\n.fa-info-circle:before {\n  content: \"\\f05a\"; }\n\n.fa-instagram:before {\n  content: \"\\f16d\"; }\n\n.fa-internet-explorer:before {\n  content: \"\\f26b\"; }\n\n.fa-ioxhost:before {\n  content: \"\\f208\"; }\n\n.fa-italic:before {\n  content: \"\\f033\"; }\n\n.fa-itunes:before {\n  content: \"\\f3b4\"; }\n\n.fa-itunes-note:before {\n  content: \"\\f3b5\"; }\n\n.fa-jenkins:before {\n  content: \"\\f3b6\"; }\n\n.fa-joget:before {\n  content: \"\\f3b7\"; }\n\n.fa-joomla:before {\n  content: \"\\f1aa\"; }\n\n.fa-js:before {\n  content: \"\\f3b8\"; }\n\n.fa-js-square:before {\n  content: \"\\f3b9\"; }\n\n.fa-jsfiddle:before {\n  content: \"\\f1cc\"; }\n\n.fa-key:before {\n  content: \"\\f084\"; }\n\n.fa-keyboard:before {\n  content: \"\\f11c\"; }\n\n.fa-keycdn:before {\n  content: \"\\f3ba\"; }\n\n.fa-kickstarter:before {\n  content: \"\\f3bb\"; }\n\n.fa-kickstarter-k:before {\n  content: \"\\f3bc\"; }\n\n.fa-korvue:before {\n  content: \"\\f42f\"; }\n\n.fa-language:before {\n  content: \"\\f1ab\"; }\n\n.fa-laptop:before {\n  content: \"\\f109\"; }\n\n.fa-laravel:before {\n  content: \"\\f3bd\"; }\n\n.fa-lastfm:before {\n  content: \"\\f202\"; }\n\n.fa-lastfm-square:before {\n  content: \"\\f203\"; }\n\n.fa-leaf:before {\n  content: \"\\f06c\"; }\n\n.fa-leanpub:before {\n  content: \"\\f212\"; }\n\n.fa-lemon:before {\n  content: \"\\f094\"; }\n\n.fa-less:before {\n  content: \"\\f41d\"; }\n\n.fa-level-down-alt:before {\n  content: \"\\f3be\"; }\n\n.fa-level-up-alt:before {\n  content: \"\\f3bf\"; }\n\n.fa-life-ring:before {\n  content: \"\\f1cd\"; }\n\n.fa-lightbulb:before {\n  content: \"\\f0eb\"; }\n\n.fa-line:before {\n  content: \"\\f3c0\"; }\n\n.fa-link:before {\n  content: \"\\f0c1\"; }\n\n.fa-linkedin:before {\n  content: \"\\f08c\"; }\n\n.fa-linkedin-in:before {\n  content: \"\\f0e1\"; }\n\n.fa-linode:before {\n  content: \"\\f2b8\"; }\n\n.fa-linux:before {\n  content: \"\\f17c\"; }\n\n.fa-lira-sign:before {\n  content: \"\\f195\"; }\n\n.fa-list:before {\n  content: \"\\f03a\"; }\n\n.fa-list-alt:before {\n  content: \"\\f022\"; }\n\n.fa-list-ol:before {\n  content: \"\\f0cb\"; }\n\n.fa-list-ul:before {\n  content: \"\\f0ca\"; }\n\n.fa-location-arrow:before {\n  content: \"\\f124\"; }\n\n.fa-lock:before {\n  content: \"\\f023\"; }\n\n.fa-lock-open:before {\n  content: \"\\f3c1\"; }\n\n.fa-long-arrow-alt-down:before {\n  content: \"\\f309\"; }\n\n.fa-long-arrow-alt-left:before {\n  content: \"\\f30a\"; }\n\n.fa-long-arrow-alt-right:before {\n  content: \"\\f30b\"; }\n\n.fa-long-arrow-alt-up:before {\n  content: \"\\f30c\"; }\n\n.fa-low-vision:before {\n  content: \"\\f2a8\"; }\n\n.fa-lyft:before {\n  content: \"\\f3c3\"; }\n\n.fa-magento:before {\n  content: \"\\f3c4\"; }\n\n.fa-magic:before {\n  content: \"\\f0d0\"; }\n\n.fa-magnet:before {\n  content: \"\\f076\"; }\n\n.fa-male:before {\n  content: \"\\f183\"; }\n\n.fa-map:before {\n  content: \"\\f279\"; }\n\n.fa-map-marker:before {\n  content: \"\\f041\"; }\n\n.fa-map-marker-alt:before {\n  content: \"\\f3c5\"; }\n\n.fa-map-pin:before {\n  content: \"\\f276\"; }\n\n.fa-map-signs:before {\n  content: \"\\f277\"; }\n\n.fa-mars:before {\n  content: \"\\f222\"; }\n\n.fa-mars-double:before {\n  content: \"\\f227\"; }\n\n.fa-mars-stroke:before {\n  content: \"\\f229\"; }\n\n.fa-mars-stroke-h:before {\n  content: \"\\f22b\"; }\n\n.fa-mars-stroke-v:before {\n  content: \"\\f22a\"; }\n\n.fa-maxcdn:before {\n  content: \"\\f136\"; }\n\n.fa-medapps:before {\n  content: \"\\f3c6\"; }\n\n.fa-medium:before {\n  content: \"\\f23a\"; }\n\n.fa-medium-m:before {\n  content: \"\\f3c7\"; }\n\n.fa-medkit:before {\n  content: \"\\f0fa\"; }\n\n.fa-medrt:before {\n  content: \"\\f3c8\"; }\n\n.fa-meetup:before {\n  content: \"\\f2e0\"; }\n\n.fa-meh:before {\n  content: \"\\f11a\"; }\n\n.fa-mercury:before {\n  content: \"\\f223\"; }\n\n.fa-microchip:before {\n  content: \"\\f2db\"; }\n\n.fa-microphone:before {\n  content: \"\\f130\"; }\n\n.fa-microphone-slash:before {\n  content: \"\\f131\"; }\n\n.fa-microsoft:before {\n  content: \"\\f3ca\"; }\n\n.fa-minus:before {\n  content: \"\\f068\"; }\n\n.fa-minus-circle:before {\n  content: \"\\f056\"; }\n\n.fa-minus-square:before {\n  content: \"\\f146\"; }\n\n.fa-mix:before {\n  content: \"\\f3cb\"; }\n\n.fa-mixcloud:before {\n  content: \"\\f289\"; }\n\n.fa-mizuni:before {\n  content: \"\\f3cc\"; }\n\n.fa-mobile:before {\n  content: \"\\f10b\"; }\n\n.fa-mobile-alt:before {\n  content: \"\\f3cd\"; }\n\n.fa-modx:before {\n  content: \"\\f285\"; }\n\n.fa-monero:before {\n  content: \"\\f3d0\"; }\n\n.fa-money-bill-alt:before {\n  content: \"\\f3d1\"; }\n\n.fa-moon:before {\n  content: \"\\f186\"; }\n\n.fa-motorcycle:before {\n  content: \"\\f21c\"; }\n\n.fa-mouse-pointer:before {\n  content: \"\\f245\"; }\n\n.fa-music:before {\n  content: \"\\f001\"; }\n\n.fa-napster:before {\n  content: \"\\f3d2\"; }\n\n.fa-neuter:before {\n  content: \"\\f22c\"; }\n\n.fa-newspaper:before {\n  content: \"\\f1ea\"; }\n\n.fa-nintendo-switch:before {\n  content: \"\\f418\"; }\n\n.fa-node:before {\n  content: \"\\f419\"; }\n\n.fa-node-js:before {\n  content: \"\\f3d3\"; }\n\n.fa-npm:before {\n  content: \"\\f3d4\"; }\n\n.fa-ns8:before {\n  content: \"\\f3d5\"; }\n\n.fa-nutritionix:before {\n  content: \"\\f3d6\"; }\n\n.fa-object-group:before {\n  content: \"\\f247\"; }\n\n.fa-object-ungroup:before {\n  content: \"\\f248\"; }\n\n.fa-odnoklassniki:before {\n  content: \"\\f263\"; }\n\n.fa-odnoklassniki-square:before {\n  content: \"\\f264\"; }\n\n.fa-opencart:before {\n  content: \"\\f23d\"; }\n\n.fa-openid:before {\n  content: \"\\f19b\"; }\n\n.fa-opera:before {\n  content: \"\\f26a\"; }\n\n.fa-optin-monster:before {\n  content: \"\\f23c\"; }\n\n.fa-osi:before {\n  content: \"\\f41a\"; }\n\n.fa-outdent:before {\n  content: \"\\f03b\"; }\n\n.fa-page4:before {\n  content: \"\\f3d7\"; }\n\n.fa-pagelines:before {\n  content: \"\\f18c\"; }\n\n.fa-paint-brush:before {\n  content: \"\\f1fc\"; }\n\n.fa-palfed:before {\n  content: \"\\f3d8\"; }\n\n.fa-pallet:before {\n  content: \"\\f482\"; }\n\n.fa-paper-plane:before {\n  content: \"\\f1d8\"; }\n\n.fa-paperclip:before {\n  content: \"\\f0c6\"; }\n\n.fa-paragraph:before {\n  content: \"\\f1dd\"; }\n\n.fa-paste:before {\n  content: \"\\f0ea\"; }\n\n.fa-patreon:before {\n  content: \"\\f3d9\"; }\n\n.fa-pause:before {\n  content: \"\\f04c\"; }\n\n.fa-pause-circle:before {\n  content: \"\\f28b\"; }\n\n.fa-paw:before {\n  content: \"\\f1b0\"; }\n\n.fa-paypal:before {\n  content: \"\\f1ed\"; }\n\n.fa-pen-square:before {\n  content: \"\\f14b\"; }\n\n.fa-pencil-alt:before {\n  content: \"\\f303\"; }\n\n.fa-percent:before {\n  content: \"\\f295\"; }\n\n.fa-periscope:before {\n  content: \"\\f3da\"; }\n\n.fa-phabricator:before {\n  content: \"\\f3db\"; }\n\n.fa-phoenix-framework:before {\n  content: \"\\f3dc\"; }\n\n.fa-phone:before {\n  content: \"\\f095\"; }\n\n.fa-phone-square:before {\n  content: \"\\f098\"; }\n\n.fa-phone-volume:before {\n  content: \"\\f2a0\"; }\n\n.fa-php:before {\n  content: \"\\f457\"; }\n\n.fa-pied-piper:before {\n  content: \"\\f2ae\"; }\n\n.fa-pied-piper-alt:before {\n  content: \"\\f1a8\"; }\n\n.fa-pied-piper-pp:before {\n  content: \"\\f1a7\"; }\n\n.fa-pills:before {\n  content: \"\\f484\"; }\n\n.fa-pinterest:before {\n  content: \"\\f0d2\"; }\n\n.fa-pinterest-p:before {\n  content: \"\\f231\"; }\n\n.fa-pinterest-square:before {\n  content: \"\\f0d3\"; }\n\n.fa-plane:before {\n  content: \"\\f072\"; }\n\n.fa-play:before {\n  content: \"\\f04b\"; }\n\n.fa-play-circle:before {\n  content: \"\\f144\"; }\n\n.fa-playstation:before {\n  content: \"\\f3df\"; }\n\n.fa-plug:before {\n  content: \"\\f1e6\"; }\n\n.fa-plus:before {\n  content: \"\\f067\"; }\n\n.fa-plus-circle:before {\n  content: \"\\f055\"; }\n\n.fa-plus-square:before {\n  content: \"\\f0fe\"; }\n\n.fa-podcast:before {\n  content: \"\\f2ce\"; }\n\n.fa-pound-sign:before {\n  content: \"\\f154\"; }\n\n.fa-power-off:before {\n  content: \"\\f011\"; }\n\n.fa-print:before {\n  content: \"\\f02f\"; }\n\n.fa-product-hunt:before {\n  content: \"\\f288\"; }\n\n.fa-pushed:before {\n  content: \"\\f3e1\"; }\n\n.fa-puzzle-piece:before {\n  content: \"\\f12e\"; }\n\n.fa-python:before {\n  content: \"\\f3e2\"; }\n\n.fa-qq:before {\n  content: \"\\f1d6\"; }\n\n.fa-qrcode:before {\n  content: \"\\f029\"; }\n\n.fa-question:before {\n  content: \"\\f128\"; }\n\n.fa-question-circle:before {\n  content: \"\\f059\"; }\n\n.fa-quidditch:before {\n  content: \"\\f458\"; }\n\n.fa-quinscape:before {\n  content: \"\\f459\"; }\n\n.fa-quora:before {\n  content: \"\\f2c4\"; }\n\n.fa-quote-left:before {\n  content: \"\\f10d\"; }\n\n.fa-quote-right:before {\n  content: \"\\f10e\"; }\n\n.fa-random:before {\n  content: \"\\f074\"; }\n\n.fa-ravelry:before {\n  content: \"\\f2d9\"; }\n\n.fa-react:before {\n  content: \"\\f41b\"; }\n\n.fa-rebel:before {\n  content: \"\\f1d0\"; }\n\n.fa-recycle:before {\n  content: \"\\f1b8\"; }\n\n.fa-red-river:before {\n  content: \"\\f3e3\"; }\n\n.fa-reddit:before {\n  content: \"\\f1a1\"; }\n\n.fa-reddit-alien:before {\n  content: \"\\f281\"; }\n\n.fa-reddit-square:before {\n  content: \"\\f1a2\"; }\n\n.fa-redo:before {\n  content: \"\\f01e\"; }\n\n.fa-redo-alt:before {\n  content: \"\\f2f9\"; }\n\n.fa-registered:before {\n  content: \"\\f25d\"; }\n\n.fa-rendact:before {\n  content: \"\\f3e4\"; }\n\n.fa-renren:before {\n  content: \"\\f18b\"; }\n\n.fa-reply:before {\n  content: \"\\f3e5\"; }\n\n.fa-reply-all:before {\n  content: \"\\f122\"; }\n\n.fa-replyd:before {\n  content: \"\\f3e6\"; }\n\n.fa-resolving:before {\n  content: \"\\f3e7\"; }\n\n.fa-retweet:before {\n  content: \"\\f079\"; }\n\n.fa-road:before {\n  content: \"\\f018\"; }\n\n.fa-rocket:before {\n  content: \"\\f135\"; }\n\n.fa-rocketchat:before {\n  content: \"\\f3e8\"; }\n\n.fa-rockrms:before {\n  content: \"\\f3e9\"; }\n\n.fa-rss:before {\n  content: \"\\f09e\"; }\n\n.fa-rss-square:before {\n  content: \"\\f143\"; }\n\n.fa-ruble-sign:before {\n  content: \"\\f158\"; }\n\n.fa-rupee-sign:before {\n  content: \"\\f156\"; }\n\n.fa-safari:before {\n  content: \"\\f267\"; }\n\n.fa-sass:before {\n  content: \"\\f41e\"; }\n\n.fa-save:before {\n  content: \"\\f0c7\"; }\n\n.fa-schlix:before {\n  content: \"\\f3ea\"; }\n\n.fa-scribd:before {\n  content: \"\\f28a\"; }\n\n.fa-search:before {\n  content: \"\\f002\"; }\n\n.fa-search-minus:before {\n  content: \"\\f010\"; }\n\n.fa-search-plus:before {\n  content: \"\\f00e\"; }\n\n.fa-searchengin:before {\n  content: \"\\f3eb\"; }\n\n.fa-sellcast:before {\n  content: \"\\f2da\"; }\n\n.fa-sellsy:before {\n  content: \"\\f213\"; }\n\n.fa-server:before {\n  content: \"\\f233\"; }\n\n.fa-servicestack:before {\n  content: \"\\f3ec\"; }\n\n.fa-share:before {\n  content: \"\\f064\"; }\n\n.fa-share-alt:before {\n  content: \"\\f1e0\"; }\n\n.fa-share-alt-square:before {\n  content: \"\\f1e1\"; }\n\n.fa-share-square:before {\n  content: \"\\f14d\"; }\n\n.fa-shekel-sign:before {\n  content: \"\\f20b\"; }\n\n.fa-shield-alt:before {\n  content: \"\\f3ed\"; }\n\n.fa-ship:before {\n  content: \"\\f21a\"; }\n\n.fa-shipping-fast:before {\n  content: \"\\f48b\"; }\n\n.fa-shirtsinbulk:before {\n  content: \"\\f214\"; }\n\n.fa-shopping-bag:before {\n  content: \"\\f290\"; }\n\n.fa-shopping-basket:before {\n  content: \"\\f291\"; }\n\n.fa-shopping-cart:before {\n  content: \"\\f07a\"; }\n\n.fa-shower:before {\n  content: \"\\f2cc\"; }\n\n.fa-sign-in-alt:before {\n  content: \"\\f2f6\"; }\n\n.fa-sign-language:before {\n  content: \"\\f2a7\"; }\n\n.fa-sign-out-alt:before {\n  content: \"\\f2f5\"; }\n\n.fa-signal:before {\n  content: \"\\f012\"; }\n\n.fa-simplybuilt:before {\n  content: \"\\f215\"; }\n\n.fa-sistrix:before {\n  content: \"\\f3ee\"; }\n\n.fa-sitemap:before {\n  content: \"\\f0e8\"; }\n\n.fa-skyatlas:before {\n  content: \"\\f216\"; }\n\n.fa-skype:before {\n  content: \"\\f17e\"; }\n\n.fa-slack:before {\n  content: \"\\f198\"; }\n\n.fa-slack-hash:before {\n  content: \"\\f3ef\"; }\n\n.fa-sliders-h:before {\n  content: \"\\f1de\"; }\n\n.fa-slideshare:before {\n  content: \"\\f1e7\"; }\n\n.fa-smile:before {\n  content: \"\\f118\"; }\n\n.fa-snapchat:before {\n  content: \"\\f2ab\"; }\n\n.fa-snapchat-ghost:before {\n  content: \"\\f2ac\"; }\n\n.fa-snapchat-square:before {\n  content: \"\\f2ad\"; }\n\n.fa-snowflake:before {\n  content: \"\\f2dc\"; }\n\n.fa-sort:before {\n  content: \"\\f0dc\"; }\n\n.fa-sort-alpha-down:before {\n  content: \"\\f15d\"; }\n\n.fa-sort-alpha-up:before {\n  content: \"\\f15e\"; }\n\n.fa-sort-amount-down:before {\n  content: \"\\f160\"; }\n\n.fa-sort-amount-up:before {\n  content: \"\\f161\"; }\n\n.fa-sort-down:before {\n  content: \"\\f0dd\"; }\n\n.fa-sort-numeric-down:before {\n  content: \"\\f162\"; }\n\n.fa-sort-numeric-up:before {\n  content: \"\\f163\"; }\n\n.fa-sort-up:before {\n  content: \"\\f0de\"; }\n\n.fa-soundcloud:before {\n  content: \"\\f1be\"; }\n\n.fa-space-shuttle:before {\n  content: \"\\f197\"; }\n\n.fa-speakap:before {\n  content: \"\\f3f3\"; }\n\n.fa-spinner:before {\n  content: \"\\f110\"; }\n\n.fa-spotify:before {\n  content: \"\\f1bc\"; }\n\n.fa-square:before {\n  content: \"\\f0c8\"; }\n\n.fa-square-full:before {\n  content: \"\\f45c\"; }\n\n.fa-stack-exchange:before {\n  content: \"\\f18d\"; }\n\n.fa-stack-overflow:before {\n  content: \"\\f16c\"; }\n\n.fa-star:before {\n  content: \"\\f005\"; }\n\n.fa-star-half:before {\n  content: \"\\f089\"; }\n\n.fa-staylinked:before {\n  content: \"\\f3f5\"; }\n\n.fa-steam:before {\n  content: \"\\f1b6\"; }\n\n.fa-steam-square:before {\n  content: \"\\f1b7\"; }\n\n.fa-steam-symbol:before {\n  content: \"\\f3f6\"; }\n\n.fa-step-backward:before {\n  content: \"\\f048\"; }\n\n.fa-step-forward:before {\n  content: \"\\f051\"; }\n\n.fa-stethoscope:before {\n  content: \"\\f0f1\"; }\n\n.fa-sticker-mule:before {\n  content: \"\\f3f7\"; }\n\n.fa-sticky-note:before {\n  content: \"\\f249\"; }\n\n.fa-stop:before {\n  content: \"\\f04d\"; }\n\n.fa-stop-circle:before {\n  content: \"\\f28d\"; }\n\n.fa-stopwatch:before {\n  content: \"\\f2f2\"; }\n\n.fa-strava:before {\n  content: \"\\f428\"; }\n\n.fa-street-view:before {\n  content: \"\\f21d\"; }\n\n.fa-strikethrough:before {\n  content: \"\\f0cc\"; }\n\n.fa-stripe:before {\n  content: \"\\f429\"; }\n\n.fa-stripe-s:before {\n  content: \"\\f42a\"; }\n\n.fa-studiovinari:before {\n  content: \"\\f3f8\"; }\n\n.fa-stumbleupon:before {\n  content: \"\\f1a4\"; }\n\n.fa-stumbleupon-circle:before {\n  content: \"\\f1a3\"; }\n\n.fa-subscript:before {\n  content: \"\\f12c\"; }\n\n.fa-subway:before {\n  content: \"\\f239\"; }\n\n.fa-suitcase:before {\n  content: \"\\f0f2\"; }\n\n.fa-sun:before {\n  content: \"\\f185\"; }\n\n.fa-superpowers:before {\n  content: \"\\f2dd\"; }\n\n.fa-superscript:before {\n  content: \"\\f12b\"; }\n\n.fa-supple:before {\n  content: \"\\f3f9\"; }\n\n.fa-sync:before {\n  content: \"\\f021\"; }\n\n.fa-sync-alt:before {\n  content: \"\\f2f1\"; }\n\n.fa-syringe:before {\n  content: \"\\f48e\"; }\n\n.fa-table:before {\n  content: \"\\f0ce\"; }\n\n.fa-table-tennis:before {\n  content: \"\\f45d\"; }\n\n.fa-tablet:before {\n  content: \"\\f10a\"; }\n\n.fa-tablet-alt:before {\n  content: \"\\f3fa\"; }\n\n.fa-tachometer-alt:before {\n  content: \"\\f3fd\"; }\n\n.fa-tag:before {\n  content: \"\\f02b\"; }\n\n.fa-tags:before {\n  content: \"\\f02c\"; }\n\n.fa-tasks:before {\n  content: \"\\f0ae\"; }\n\n.fa-taxi:before {\n  content: \"\\f1ba\"; }\n\n.fa-telegram:before {\n  content: \"\\f2c6\"; }\n\n.fa-telegram-plane:before {\n  content: \"\\f3fe\"; }\n\n.fa-tencent-weibo:before {\n  content: \"\\f1d5\"; }\n\n.fa-terminal:before {\n  content: \"\\f120\"; }\n\n.fa-text-height:before {\n  content: \"\\f034\"; }\n\n.fa-text-width:before {\n  content: \"\\f035\"; }\n\n.fa-th:before {\n  content: \"\\f00a\"; }\n\n.fa-th-large:before {\n  content: \"\\f009\"; }\n\n.fa-th-list:before {\n  content: \"\\f00b\"; }\n\n.fa-themeisle:before {\n  content: \"\\f2b2\"; }\n\n.fa-thermometer:before {\n  content: \"\\f491\"; }\n\n.fa-thermometer-empty:before {\n  content: \"\\f2cb\"; }\n\n.fa-thermometer-full:before {\n  content: \"\\f2c7\"; }\n\n.fa-thermometer-half:before {\n  content: \"\\f2c9\"; }\n\n.fa-thermometer-quarter:before {\n  content: \"\\f2ca\"; }\n\n.fa-thermometer-three-quarters:before {\n  content: \"\\f2c8\"; }\n\n.fa-thumbs-down:before {\n  content: \"\\f165\"; }\n\n.fa-thumbs-up:before {\n  content: \"\\f164\"; }\n\n.fa-thumbtack:before {\n  content: \"\\f08d\"; }\n\n.fa-ticket-alt:before {\n  content: \"\\f3ff\"; }\n\n.fa-times:before {\n  content: \"\\f00d\"; }\n\n.fa-times-circle:before {\n  content: \"\\f057\"; }\n\n.fa-tint:before {\n  content: \"\\f043\"; }\n\n.fa-toggle-off:before {\n  content: \"\\f204\"; }\n\n.fa-toggle-on:before {\n  content: \"\\f205\"; }\n\n.fa-trademark:before {\n  content: \"\\f25c\"; }\n\n.fa-train:before {\n  content: \"\\f238\"; }\n\n.fa-transgender:before {\n  content: \"\\f224\"; }\n\n.fa-transgender-alt:before {\n  content: \"\\f225\"; }\n\n.fa-trash:before {\n  content: \"\\f1f8\"; }\n\n.fa-trash-alt:before {\n  content: \"\\f2ed\"; }\n\n.fa-tree:before {\n  content: \"\\f1bb\"; }\n\n.fa-trello:before {\n  content: \"\\f181\"; }\n\n.fa-tripadvisor:before {\n  content: \"\\f262\"; }\n\n.fa-trophy:before {\n  content: \"\\f091\"; }\n\n.fa-truck:before {\n  content: \"\\f0d1\"; }\n\n.fa-tty:before {\n  content: \"\\f1e4\"; }\n\n.fa-tumblr:before {\n  content: \"\\f173\"; }\n\n.fa-tumblr-square:before {\n  content: \"\\f174\"; }\n\n.fa-tv:before {\n  content: \"\\f26c\"; }\n\n.fa-twitch:before {\n  content: \"\\f1e8\"; }\n\n.fa-twitter:before {\n  content: \"\\f099\"; }\n\n.fa-twitter-square:before {\n  content: \"\\f081\"; }\n\n.fa-typo3:before {\n  content: \"\\f42b\"; }\n\n.fa-uber:before {\n  content: \"\\f402\"; }\n\n.fa-uikit:before {\n  content: \"\\f403\"; }\n\n.fa-umbrella:before {\n  content: \"\\f0e9\"; }\n\n.fa-underline:before {\n  content: \"\\f0cd\"; }\n\n.fa-undo:before {\n  content: \"\\f0e2\"; }\n\n.fa-undo-alt:before {\n  content: \"\\f2ea\"; }\n\n.fa-uniregistry:before {\n  content: \"\\f404\"; }\n\n.fa-universal-access:before {\n  content: \"\\f29a\"; }\n\n.fa-university:before {\n  content: \"\\f19c\"; }\n\n.fa-unlink:before {\n  content: \"\\f127\"; }\n\n.fa-unlock:before {\n  content: \"\\f09c\"; }\n\n.fa-unlock-alt:before {\n  content: \"\\f13e\"; }\n\n.fa-untappd:before {\n  content: \"\\f405\"; }\n\n.fa-upload:before {\n  content: \"\\f093\"; }\n\n.fa-usb:before {\n  content: \"\\f287\"; }\n\n.fa-user:before {\n  content: \"\\f007\"; }\n\n.fa-user-circle:before {\n  content: \"\\f2bd\"; }\n\n.fa-user-md:before {\n  content: \"\\f0f0\"; }\n\n.fa-user-plus:before {\n  content: \"\\f234\"; }\n\n.fa-user-secret:before {\n  content: \"\\f21b\"; }\n\n.fa-user-times:before {\n  content: \"\\f235\"; }\n\n.fa-users:before {\n  content: \"\\f0c0\"; }\n\n.fa-ussunnah:before {\n  content: \"\\f407\"; }\n\n.fa-utensil-spoon:before {\n  content: \"\\f2e5\"; }\n\n.fa-utensils:before {\n  content: \"\\f2e7\"; }\n\n.fa-vaadin:before {\n  content: \"\\f408\"; }\n\n.fa-venus:before {\n  content: \"\\f221\"; }\n\n.fa-venus-double:before {\n  content: \"\\f226\"; }\n\n.fa-venus-mars:before {\n  content: \"\\f228\"; }\n\n.fa-viacoin:before {\n  content: \"\\f237\"; }\n\n.fa-viadeo:before {\n  content: \"\\f2a9\"; }\n\n.fa-viadeo-square:before {\n  content: \"\\f2aa\"; }\n\n.fa-viber:before {\n  content: \"\\f409\"; }\n\n.fa-video:before {\n  content: \"\\f03d\"; }\n\n.fa-vimeo:before {\n  content: \"\\f40a\"; }\n\n.fa-vimeo-square:before {\n  content: \"\\f194\"; }\n\n.fa-vimeo-v:before {\n  content: \"\\f27d\"; }\n\n.fa-vine:before {\n  content: \"\\f1ca\"; }\n\n.fa-vk:before {\n  content: \"\\f189\"; }\n\n.fa-vnv:before {\n  content: \"\\f40b\"; }\n\n.fa-volleyball-ball:before {\n  content: \"\\f45f\"; }\n\n.fa-volume-down:before {\n  content: \"\\f027\"; }\n\n.fa-volume-off:before {\n  content: \"\\f026\"; }\n\n.fa-volume-up:before {\n  content: \"\\f028\"; }\n\n.fa-vuejs:before {\n  content: \"\\f41f\"; }\n\n.fa-warehouse:before {\n  content: \"\\f494\"; }\n\n.fa-weibo:before {\n  content: \"\\f18a\"; }\n\n.fa-weight:before {\n  content: \"\\f496\"; }\n\n.fa-weixin:before {\n  content: \"\\f1d7\"; }\n\n.fa-whatsapp:before {\n  content: \"\\f232\"; }\n\n.fa-whatsapp-square:before {\n  content: \"\\f40c\"; }\n\n.fa-wheelchair:before {\n  content: \"\\f193\"; }\n\n.fa-whmcs:before {\n  content: \"\\f40d\"; }\n\n.fa-wifi:before {\n  content: \"\\f1eb\"; }\n\n.fa-wikipedia-w:before {\n  content: \"\\f266\"; }\n\n.fa-window-close:before {\n  content: \"\\f410\"; }\n\n.fa-window-maximize:before {\n  content: \"\\f2d0\"; }\n\n.fa-window-minimize:before {\n  content: \"\\f2d1\"; }\n\n.fa-window-restore:before {\n  content: \"\\f2d2\"; }\n\n.fa-windows:before {\n  content: \"\\f17a\"; }\n\n.fa-won-sign:before {\n  content: \"\\f159\"; }\n\n.fa-wordpress:before {\n  content: \"\\f19a\"; }\n\n.fa-wordpress-simple:before {\n  content: \"\\f411\"; }\n\n.fa-wpbeginner:before {\n  content: \"\\f297\"; }\n\n.fa-wpexplorer:before {\n  content: \"\\f2de\"; }\n\n.fa-wpforms:before {\n  content: \"\\f298\"; }\n\n.fa-wrench:before {\n  content: \"\\f0ad\"; }\n\n.fa-xbox:before {\n  content: \"\\f412\"; }\n\n.fa-xing:before {\n  content: \"\\f168\"; }\n\n.fa-xing-square:before {\n  content: \"\\f169\"; }\n\n.fa-y-combinator:before {\n  content: \"\\f23b\"; }\n\n.fa-yahoo:before {\n  content: \"\\f19e\"; }\n\n.fa-yandex:before {\n  content: \"\\f413\"; }\n\n.fa-yandex-international:before {\n  content: \"\\f414\"; }\n\n.fa-yelp:before {\n  content: \"\\f1e9\"; }\n\n.fa-yen-sign:before {\n  content: \"\\f157\"; }\n\n.fa-yoast:before {\n  content: \"\\f2b1\"; }\n\n.fa-youtube:before {\n  content: \"\\f167\"; }\n\n.fa-youtube-square:before {\n  content: \"\\f431\"; }\n\n.sr-only {\n  border: 0;\n  clip: rect(0, 0, 0, 0);\n  height: 1px;\n  margin: -1px;\n  overflow: hidden;\n  padding: 0;\n  position: absolute;\n  width: 1px; }\n\n.sr-only-focusable:active, .sr-only-focusable:focus {\n  clip: auto;\n  height: auto;\n  margin: 0;\n  overflow: visible;\n  position: static;\n  width: auto; }\n@font-face {\n  font-family: 'Font Awesome 5 Brands';\n  font-style: normal;\n  font-weight: normal;\n  src: url(\"../webfonts/fa-brands-400.eot\");\n  src: url(\"../webfonts/fa-brands-400.eot?#iefix\") format(\"embedded-opentype\"), url(\"../webfonts/fa-brands-400.woff2\") format(\"woff2\"), url(\"../webfonts/fa-brands-400.woff\") format(\"woff\"), url(\"../webfonts/fa-brands-400.ttf\") format(\"truetype\"), url(\"../webfonts/fa-brands-400.svg#fontawesome\") format(\"svg\"); }\n\n.fab {\n  font-family: 'Font Awesome 5 Brands'; }\n@font-face {\n  font-family: 'Font Awesome 5 Free';\n  font-style: normal;\n  font-weight: 400;\n  src: url(\"../webfonts/fa-regular-400.eot\");\n  src: url(\"../webfonts/fa-regular-400.eot?#iefix\") format(\"embedded-opentype\"), url(\"../webfonts/fa-regular-400.woff2\") format(\"woff2\"), url(\"../webfonts/fa-regular-400.woff\") format(\"woff\"), url(\"../webfonts/fa-regular-400.ttf\") format(\"truetype\"), url(\"../webfonts/fa-regular-400.svg#fontawesome\") format(\"svg\"); }\n\n.far {\n  font-family: 'Font Awesome 5 Free';\n  font-weight: 400; }\n@font-face {\n  font-family: 'Font Awesome 5 Free';\n  font-style: normal;\n  font-weight: 900;\n  src: url(\"../webfonts/fa-solid-900.eot\");\n  src: url(\"../webfonts/fa-solid-900.eot?#iefix\") format(\"embedded-opentype\"), url(\"../webfonts/fa-solid-900.woff2\") format(\"woff2\"), url(\"../webfonts/fa-solid-900.woff\") format(\"woff\"), url(\"../webfonts/fa-solid-900.ttf\") format(\"truetype\"), url(\"../webfonts/fa-solid-900.svg#fontawesome\") format(\"svg\"); }\n\n.fa,\n.fas {\n  font-family: 'Font Awesome 5 Free';\n  font-weight: 900; }\n"
  },
  {
    "path": "src/sourceDev.WebApp/SharedThemes/materia/wwwroot/css/site.css",
    "content": "﻿html {\n    position: relative;\n    min-height: 100%;\n}\n\nbody {\n    min-height: 100vh;\n    padding-top: 155px;\n}\n\n\n#newPostLink {\n    position: absolute;\n    top: 170px;\n    right: 0px;\n}\n\n#editPostLink {\n    position: absolute;\n    top: 200px;\n    right: 0px;\n}\n\n#unpublishPostLink {\n    position: absolute;\n    top: 230px !important;\n    right: 0px !important;\n}\n\n#pageManagerLink {\n    position: absolute;\n    top: 170px;\n    right: 0px;\n}\n\n#newPageLink {\n    position: absolute;\n    top: 200px;\n    right: 0px;\n}\n\n#editPageLink {\n    position: absolute;\n    top: 230px;\n    right: 0px\n}\n\n#unpublishPageLink {\n    position: absolute;\n    top: 260px !important;\n    right: 0px !important\n}\n\n#sidenavtoggle {\n    position: absolute;\n    top: 220px;\n    right: 5px;\n}\n\n\n@media screen and (max-width: 812px) {\n    #sidenavtoggle,\n    #sidenavmenu {\n        display: none;\n    }\n}\n\n.flex-fill {\n    flex: 1 1 auto !important;\n}\n\n\n.carousel-caption p {\n    font-size: 20px;\n    line-height: 1.4;\n}\n\n@media screen and (max-width: 768px) {\n    .carousel-caption {\n        display: none\n    }\n}\n\n\n\n\nimg, video, iframe {\n    max-width: 100%;\n}\n\ntd img, video, iframe {\n    max-width: none;\n}\n\n\n\n.table td, .table th {\n    vertical-align: inherit;\n}\n\n/******** jquery smartmenu bootstrap 4 ******/\n/* Carets in collapsible mode (make them look like +/- buttons) */\n.navbar-nav.sm-collapsible .sub-arrow {\n    position: absolute;\n    top: 50%;\n    right: 0;\n    margin: -0.7em 0.5em 0 0;\n    border: 1px solid rgba(0, 0, 0, .1);\n    border-radius: .25rem;\n    padding: 0;\n    width: 2em;\n    height: 1.4em;\n    font-size: 1.25rem;\n    line-height: 1.2em;\n    text-align: center;\n}\n\n    .navbar-nav.sm-collapsible .sub-arrow::before {\n        content: '+';\n    }\n\n.navbar-nav.sm-collapsible .show > a > .sub-arrow::before {\n    content: '-';\n}\n\n.navbar-dark .navbar-nav.sm-collapsible .nav-link .sub-arrow {\n    border-color: rgba(255, 255, 255, .1);\n}\n/* make sure there's room for the carets */\n.navbar-nav.sm-collapsible .has-submenu {\n    padding-right: 3em;\n}\n/* keep the carets properly positioned */\n.navbar-nav.sm-collapsible .nav-link,\n.navbar-nav.sm-collapsible .dropdown-item {\n    position: relative;\n}\n\n\n/* Nav carets in expanded mode */\n.navbar-nav:not(.sm-collapsible) .nav-link .sub-arrow {\n    display: inline-block;\n    width: 0;\n    height: 0;\n    margin-left: .255em;\n    vertical-align: .255em;\n    border-top: .3em solid;\n    border-right: .3em solid transparent;\n    border-left: .3em solid transparent;\n}\n/* point the arrows up for .fixed-bottom navbars */\n.fixed-bottom .navbar-nav:not(.sm-collapsible) .nav-link .sub-arrow,\n.fixed-bottom .navbar-nav:not(.sm-collapsible):not([data-sm-skip]) .dropdown-toggle::after {\n    border-top: 0;\n    border-bottom: .3em solid;\n}\n\n\n/* Dropdown carets in expanded mode */\n.navbar-nav:not(.sm-collapsible) .dropdown-item .sub-arrow,\n.navbar-nav:not(.sm-collapsible):not([data-sm-skip]) .dropdown-menu .dropdown-toggle::after {\n    position: absolute;\n    top: 50%;\n    right: 0;\n    width: 0;\n    height: 0;\n    margin-top: -.3em;\n    margin-right: 1em;\n    border-top: .3em solid transparent;\n    border-bottom: .3em solid transparent;\n    border-left: .3em solid;\n}\n/* make sure there's room for the carets */\n.navbar-nav:not(.sm-collapsible) .dropdown-item.has-submenu {\n    padding-right: 2em;\n}\n\n\n/* Scrolling arrows for tall menus */\n.navbar-nav .scroll-up,\n.navbar-nav .scroll-down {\n    position: absolute;\n    display: none;\n    visibility: hidden;\n    height: 20px;\n    overflow: hidden;\n    text-align: center;\n}\n\n.navbar-nav .scroll-up-arrow,\n.navbar-nav .scroll-down-arrow {\n    position: absolute;\n    top: -2px;\n    left: 50%;\n    margin-left: -8px;\n    width: 0;\n    height: 0;\n    overflow: hidden;\n    border-top: 7px solid transparent;\n    border-right: 7px solid transparent;\n    border-bottom: 7px solid;\n    border-left: 7px solid transparent;\n}\n\n.navbar-nav .scroll-down-arrow {\n    top: 6px;\n    border-top: 7px solid;\n    border-right: 7px solid transparent;\n    border-bottom: 7px solid transparent;\n    border-left: 7px solid transparent;\n}\n\n\n/* Add some spacing for 2+ level sub menus in collapsible mode */\n.navbar-nav.sm-collapsible .dropdown-menu .dropdown-menu {\n    margin: .5em;\n}\n\n\n/* Fix SmartMenus sub menus auto width (subMenusMinWidth/subMenusMaxWidth options) */\n.navbar-nav:not([data-sm-skip]) .dropdown-item {\n    white-space: normal;\n}\n\n.navbar-nav:not(.sm-collapsible) .sm-nowrap > li > .dropdown-item {\n    white-space: nowrap;\n}\n/******** end jquery smart menu bootstrap-4 *****************/\n\n.brand-header {\n    height: 100px;\n}\n\nheader .navbar {\n    top: 100px;\n}\n"
  },
  {
    "path": "src/sourceDev.WebApp/SharedThemes/materia/wwwroot/js/bootstrap.bundle.js",
    "content": "/*!\n  * Bootstrap v5.0.2 (https://getbootstrap.com/)\n  * Copyright 2011-2021 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)\n  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n  */\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n  typeof define === 'function' && define.amd ? define(factory) :\n  (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.bootstrap = factory());\n}(this, (function () { 'use strict';\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): dom/selector-engine.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n  const NODE_TEXT = 3;\n  const SelectorEngine = {\n    find(selector, element = document.documentElement) {\n      return [].concat(...Element.prototype.querySelectorAll.call(element, selector));\n    },\n\n    findOne(selector, element = document.documentElement) {\n      return Element.prototype.querySelector.call(element, selector);\n    },\n\n    children(element, selector) {\n      return [].concat(...element.children).filter(child => child.matches(selector));\n    },\n\n    parents(element, selector) {\n      const parents = [];\n      let ancestor = element.parentNode;\n\n      while (ancestor && ancestor.nodeType === Node.ELEMENT_NODE && ancestor.nodeType !== NODE_TEXT) {\n        if (ancestor.matches(selector)) {\n          parents.push(ancestor);\n        }\n\n        ancestor = ancestor.parentNode;\n      }\n\n      return parents;\n    },\n\n    prev(element, selector) {\n      let previous = element.previousElementSibling;\n\n      while (previous) {\n        if (previous.matches(selector)) {\n          return [previous];\n        }\n\n        previous = previous.previousElementSibling;\n      }\n\n      return [];\n    },\n\n    next(element, selector) {\n      let next = element.nextElementSibling;\n\n      while (next) {\n        if (next.matches(selector)) {\n          return [next];\n        }\n\n        next = next.nextElementSibling;\n      }\n\n      return [];\n    }\n\n  };\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): util/index.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n\n  const MAX_UID = 1000000;\n  const MILLISECONDS_MULTIPLIER = 1000;\n  const TRANSITION_END = 'transitionend'; // Shoutout AngusCroll (https://goo.gl/pxwQGp)\n\n  const toType = obj => {\n    if (obj === null || obj === undefined) {\n      return `${obj}`;\n    }\n\n    return {}.toString.call(obj).match(/\\s([a-z]+)/i)[1].toLowerCase();\n  };\n  /**\n   * --------------------------------------------------------------------------\n   * Public Util Api\n   * --------------------------------------------------------------------------\n   */\n\n\n  const getUID = prefix => {\n    do {\n      prefix += Math.floor(Math.random() * MAX_UID);\n    } while (document.getElementById(prefix));\n\n    return prefix;\n  };\n\n  const getSelector = element => {\n    let selector = element.getAttribute('data-bs-target');\n\n    if (!selector || selector === '#') {\n      let hrefAttr = element.getAttribute('href'); // The only valid content that could double as a selector are IDs or classes,\n      // so everything starting with `#` or `.`. If a \"real\" URL is used as the selector,\n      // `document.querySelector` will rightfully complain it is invalid.\n      // See https://github.com/twbs/bootstrap/issues/32273\n\n      if (!hrefAttr || !hrefAttr.includes('#') && !hrefAttr.startsWith('.')) {\n        return null;\n      } // Just in case some CMS puts out a full URL with the anchor appended\n\n\n      if (hrefAttr.includes('#') && !hrefAttr.startsWith('#')) {\n        hrefAttr = `#${hrefAttr.split('#')[1]}`;\n      }\n\n      selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : null;\n    }\n\n    return selector;\n  };\n\n  const getSelectorFromElement = element => {\n    const selector = getSelector(element);\n\n    if (selector) {\n      return document.querySelector(selector) ? selector : null;\n    }\n\n    return null;\n  };\n\n  const getElementFromSelector = element => {\n    const selector = getSelector(element);\n    return selector ? document.querySelector(selector) : null;\n  };\n\n  const getTransitionDurationFromElement = element => {\n    if (!element) {\n      return 0;\n    } // Get transition-duration of the element\n\n\n    let {\n      transitionDuration,\n      transitionDelay\n    } = window.getComputedStyle(element);\n    const floatTransitionDuration = Number.parseFloat(transitionDuration);\n    const floatTransitionDelay = Number.parseFloat(transitionDelay); // Return 0 if element or transition duration is not found\n\n    if (!floatTransitionDuration && !floatTransitionDelay) {\n      return 0;\n    } // If multiple durations are defined, take the first\n\n\n    transitionDuration = transitionDuration.split(',')[0];\n    transitionDelay = transitionDelay.split(',')[0];\n    return (Number.parseFloat(transitionDuration) + Number.parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER;\n  };\n\n  const triggerTransitionEnd = element => {\n    element.dispatchEvent(new Event(TRANSITION_END));\n  };\n\n  const isElement$1 = obj => {\n    if (!obj || typeof obj !== 'object') {\n      return false;\n    }\n\n    if (typeof obj.jquery !== 'undefined') {\n      obj = obj[0];\n    }\n\n    return typeof obj.nodeType !== 'undefined';\n  };\n\n  const getElement = obj => {\n    if (isElement$1(obj)) {\n      // it's a jQuery object or a node element\n      return obj.jquery ? obj[0] : obj;\n    }\n\n    if (typeof obj === 'string' && obj.length > 0) {\n      return SelectorEngine.findOne(obj);\n    }\n\n    return null;\n  };\n\n  const typeCheckConfig = (componentName, config, configTypes) => {\n    Object.keys(configTypes).forEach(property => {\n      const expectedTypes = configTypes[property];\n      const value = config[property];\n      const valueType = value && isElement$1(value) ? 'element' : toType(value);\n\n      if (!new RegExp(expectedTypes).test(valueType)) {\n        throw new TypeError(`${componentName.toUpperCase()}: Option \"${property}\" provided type \"${valueType}\" but expected type \"${expectedTypes}\".`);\n      }\n    });\n  };\n\n  const isVisible = element => {\n    if (!isElement$1(element) || element.getClientRects().length === 0) {\n      return false;\n    }\n\n    return getComputedStyle(element).getPropertyValue('visibility') === 'visible';\n  };\n\n  const isDisabled = element => {\n    if (!element || element.nodeType !== Node.ELEMENT_NODE) {\n      return true;\n    }\n\n    if (element.classList.contains('disabled')) {\n      return true;\n    }\n\n    if (typeof element.disabled !== 'undefined') {\n      return element.disabled;\n    }\n\n    return element.hasAttribute('disabled') && element.getAttribute('disabled') !== 'false';\n  };\n\n  const findShadowRoot = element => {\n    if (!document.documentElement.attachShadow) {\n      return null;\n    } // Can find the shadow root otherwise it'll return the document\n\n\n    if (typeof element.getRootNode === 'function') {\n      const root = element.getRootNode();\n      return root instanceof ShadowRoot ? root : null;\n    }\n\n    if (element instanceof ShadowRoot) {\n      return element;\n    } // when we don't find a shadow root\n\n\n    if (!element.parentNode) {\n      return null;\n    }\n\n    return findShadowRoot(element.parentNode);\n  };\n\n  const noop = () => {};\n\n  const reflow = element => element.offsetHeight;\n\n  const getjQuery = () => {\n    const {\n      jQuery\n    } = window;\n\n    if (jQuery && !document.body.hasAttribute('data-bs-no-jquery')) {\n      return jQuery;\n    }\n\n    return null;\n  };\n\n  const DOMContentLoadedCallbacks = [];\n\n  const onDOMContentLoaded = callback => {\n    if (document.readyState === 'loading') {\n      // add listener on the first call when the document is in loading state\n      if (!DOMContentLoadedCallbacks.length) {\n        document.addEventListener('DOMContentLoaded', () => {\n          DOMContentLoadedCallbacks.forEach(callback => callback());\n        });\n      }\n\n      DOMContentLoadedCallbacks.push(callback);\n    } else {\n      callback();\n    }\n  };\n\n  const isRTL = () => document.documentElement.dir === 'rtl';\n\n  const defineJQueryPlugin = plugin => {\n    onDOMContentLoaded(() => {\n      const $ = getjQuery();\n      /* istanbul ignore if */\n\n      if ($) {\n        const name = plugin.NAME;\n        const JQUERY_NO_CONFLICT = $.fn[name];\n        $.fn[name] = plugin.jQueryInterface;\n        $.fn[name].Constructor = plugin;\n\n        $.fn[name].noConflict = () => {\n          $.fn[name] = JQUERY_NO_CONFLICT;\n          return plugin.jQueryInterface;\n        };\n      }\n    });\n  };\n\n  const execute = callback => {\n    if (typeof callback === 'function') {\n      callback();\n    }\n  };\n\n  const executeAfterTransition = (callback, transitionElement, waitForTransition = true) => {\n    if (!waitForTransition) {\n      execute(callback);\n      return;\n    }\n\n    const durationPadding = 5;\n    const emulatedDuration = getTransitionDurationFromElement(transitionElement) + durationPadding;\n    let called = false;\n\n    const handler = ({\n      target\n    }) => {\n      if (target !== transitionElement) {\n        return;\n      }\n\n      called = true;\n      transitionElement.removeEventListener(TRANSITION_END, handler);\n      execute(callback);\n    };\n\n    transitionElement.addEventListener(TRANSITION_END, handler);\n    setTimeout(() => {\n      if (!called) {\n        triggerTransitionEnd(transitionElement);\n      }\n    }, emulatedDuration);\n  };\n  /**\n   * Return the previous/next element of a list.\n   *\n   * @param {array} list    The list of elements\n   * @param activeElement   The active element\n   * @param shouldGetNext   Choose to get next or previous element\n   * @param isCycleAllowed\n   * @return {Element|elem} The proper element\n   */\n\n\n  const getNextActiveElement = (list, activeElement, shouldGetNext, isCycleAllowed) => {\n    let index = list.indexOf(activeElement); // if the element does not exist in the list return an element depending on the direction and if cycle is allowed\n\n    if (index === -1) {\n      return list[!shouldGetNext && isCycleAllowed ? list.length - 1 : 0];\n    }\n\n    const listLength = list.length;\n    index += shouldGetNext ? 1 : -1;\n\n    if (isCycleAllowed) {\n      index = (index + listLength) % listLength;\n    }\n\n    return list[Math.max(0, Math.min(index, listLength - 1))];\n  };\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): dom/event-handler.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const namespaceRegex = /[^.]*(?=\\..*)\\.|.*/;\n  const stripNameRegex = /\\..*/;\n  const stripUidRegex = /::\\d+$/;\n  const eventRegistry = {}; // Events storage\n\n  let uidEvent = 1;\n  const customEvents = {\n    mouseenter: 'mouseover',\n    mouseleave: 'mouseout'\n  };\n  const customEventsRegex = /^(mouseenter|mouseleave)/i;\n  const nativeEvents = new Set(['click', 'dblclick', 'mouseup', 'mousedown', 'contextmenu', 'mousewheel', 'DOMMouseScroll', 'mouseover', 'mouseout', 'mousemove', 'selectstart', 'selectend', 'keydown', 'keypress', 'keyup', 'orientationchange', 'touchstart', 'touchmove', 'touchend', 'touchcancel', 'pointerdown', 'pointermove', 'pointerup', 'pointerleave', 'pointercancel', 'gesturestart', 'gesturechange', 'gestureend', 'focus', 'blur', 'change', 'reset', 'select', 'submit', 'focusin', 'focusout', 'load', 'unload', 'beforeunload', 'resize', 'move', 'DOMContentLoaded', 'readystatechange', 'error', 'abort', 'scroll']);\n  /**\n   * ------------------------------------------------------------------------\n   * Private methods\n   * ------------------------------------------------------------------------\n   */\n\n  function getUidEvent(element, uid) {\n    return uid && `${uid}::${uidEvent++}` || element.uidEvent || uidEvent++;\n  }\n\n  function getEvent(element) {\n    const uid = getUidEvent(element);\n    element.uidEvent = uid;\n    eventRegistry[uid] = eventRegistry[uid] || {};\n    return eventRegistry[uid];\n  }\n\n  function bootstrapHandler(element, fn) {\n    return function handler(event) {\n      event.delegateTarget = element;\n\n      if (handler.oneOff) {\n        EventHandler.off(element, event.type, fn);\n      }\n\n      return fn.apply(element, [event]);\n    };\n  }\n\n  function bootstrapDelegationHandler(element, selector, fn) {\n    return function handler(event) {\n      const domElements = element.querySelectorAll(selector);\n\n      for (let {\n        target\n      } = event; target && target !== this; target = target.parentNode) {\n        for (let i = domElements.length; i--;) {\n          if (domElements[i] === target) {\n            event.delegateTarget = target;\n\n            if (handler.oneOff) {\n              // eslint-disable-next-line unicorn/consistent-destructuring\n              EventHandler.off(element, event.type, selector, fn);\n            }\n\n            return fn.apply(target, [event]);\n          }\n        }\n      } // To please ESLint\n\n\n      return null;\n    };\n  }\n\n  function findHandler(events, handler, delegationSelector = null) {\n    const uidEventList = Object.keys(events);\n\n    for (let i = 0, len = uidEventList.length; i < len; i++) {\n      const event = events[uidEventList[i]];\n\n      if (event.originalHandler === handler && event.delegationSelector === delegationSelector) {\n        return event;\n      }\n    }\n\n    return null;\n  }\n\n  function normalizeParams(originalTypeEvent, handler, delegationFn) {\n    const delegation = typeof handler === 'string';\n    const originalHandler = delegation ? delegationFn : handler;\n    let typeEvent = getTypeEvent(originalTypeEvent);\n    const isNative = nativeEvents.has(typeEvent);\n\n    if (!isNative) {\n      typeEvent = originalTypeEvent;\n    }\n\n    return [delegation, originalHandler, typeEvent];\n  }\n\n  function addHandler(element, originalTypeEvent, handler, delegationFn, oneOff) {\n    if (typeof originalTypeEvent !== 'string' || !element) {\n      return;\n    }\n\n    if (!handler) {\n      handler = delegationFn;\n      delegationFn = null;\n    } // in case of mouseenter or mouseleave wrap the handler within a function that checks for its DOM position\n    // this prevents the handler from being dispatched the same way as mouseover or mouseout does\n\n\n    if (customEventsRegex.test(originalTypeEvent)) {\n      const wrapFn = fn => {\n        return function (event) {\n          if (!event.relatedTarget || event.relatedTarget !== event.delegateTarget && !event.delegateTarget.contains(event.relatedTarget)) {\n            return fn.call(this, event);\n          }\n        };\n      };\n\n      if (delegationFn) {\n        delegationFn = wrapFn(delegationFn);\n      } else {\n        handler = wrapFn(handler);\n      }\n    }\n\n    const [delegation, originalHandler, typeEvent] = normalizeParams(originalTypeEvent, handler, delegationFn);\n    const events = getEvent(element);\n    const handlers = events[typeEvent] || (events[typeEvent] = {});\n    const previousFn = findHandler(handlers, originalHandler, delegation ? handler : null);\n\n    if (previousFn) {\n      previousFn.oneOff = previousFn.oneOff && oneOff;\n      return;\n    }\n\n    const uid = getUidEvent(originalHandler, originalTypeEvent.replace(namespaceRegex, ''));\n    const fn = delegation ? bootstrapDelegationHandler(element, handler, delegationFn) : bootstrapHandler(element, handler);\n    fn.delegationSelector = delegation ? handler : null;\n    fn.originalHandler = originalHandler;\n    fn.oneOff = oneOff;\n    fn.uidEvent = uid;\n    handlers[uid] = fn;\n    element.addEventListener(typeEvent, fn, delegation);\n  }\n\n  function removeHandler(element, events, typeEvent, handler, delegationSelector) {\n    const fn = findHandler(events[typeEvent], handler, delegationSelector);\n\n    if (!fn) {\n      return;\n    }\n\n    element.removeEventListener(typeEvent, fn, Boolean(delegationSelector));\n    delete events[typeEvent][fn.uidEvent];\n  }\n\n  function removeNamespacedHandlers(element, events, typeEvent, namespace) {\n    const storeElementEvent = events[typeEvent] || {};\n    Object.keys(storeElementEvent).forEach(handlerKey => {\n      if (handlerKey.includes(namespace)) {\n        const event = storeElementEvent[handlerKey];\n        removeHandler(element, events, typeEvent, event.originalHandler, event.delegationSelector);\n      }\n    });\n  }\n\n  function getTypeEvent(event) {\n    // allow to get the native events from namespaced events ('click.bs.button' --> 'click')\n    event = event.replace(stripNameRegex, '');\n    return customEvents[event] || event;\n  }\n\n  const EventHandler = {\n    on(element, event, handler, delegationFn) {\n      addHandler(element, event, handler, delegationFn, false);\n    },\n\n    one(element, event, handler, delegationFn) {\n      addHandler(element, event, handler, delegationFn, true);\n    },\n\n    off(element, originalTypeEvent, handler, delegationFn) {\n      if (typeof originalTypeEvent !== 'string' || !element) {\n        return;\n      }\n\n      const [delegation, originalHandler, typeEvent] = normalizeParams(originalTypeEvent, handler, delegationFn);\n      const inNamespace = typeEvent !== originalTypeEvent;\n      const events = getEvent(element);\n      const isNamespace = originalTypeEvent.startsWith('.');\n\n      if (typeof originalHandler !== 'undefined') {\n        // Simplest case: handler is passed, remove that listener ONLY.\n        if (!events || !events[typeEvent]) {\n          return;\n        }\n\n        removeHandler(element, events, typeEvent, originalHandler, delegation ? handler : null);\n        return;\n      }\n\n      if (isNamespace) {\n        Object.keys(events).forEach(elementEvent => {\n          removeNamespacedHandlers(element, events, elementEvent, originalTypeEvent.slice(1));\n        });\n      }\n\n      const storeElementEvent = events[typeEvent] || {};\n      Object.keys(storeElementEvent).forEach(keyHandlers => {\n        const handlerKey = keyHandlers.replace(stripUidRegex, '');\n\n        if (!inNamespace || originalTypeEvent.includes(handlerKey)) {\n          const event = storeElementEvent[keyHandlers];\n          removeHandler(element, events, typeEvent, event.originalHandler, event.delegationSelector);\n        }\n      });\n    },\n\n    trigger(element, event, args) {\n      if (typeof event !== 'string' || !element) {\n        return null;\n      }\n\n      const $ = getjQuery();\n      const typeEvent = getTypeEvent(event);\n      const inNamespace = event !== typeEvent;\n      const isNative = nativeEvents.has(typeEvent);\n      let jQueryEvent;\n      let bubbles = true;\n      let nativeDispatch = true;\n      let defaultPrevented = false;\n      let evt = null;\n\n      if (inNamespace && $) {\n        jQueryEvent = $.Event(event, args);\n        $(element).trigger(jQueryEvent);\n        bubbles = !jQueryEvent.isPropagationStopped();\n        nativeDispatch = !jQueryEvent.isImmediatePropagationStopped();\n        defaultPrevented = jQueryEvent.isDefaultPrevented();\n      }\n\n      if (isNative) {\n        evt = document.createEvent('HTMLEvents');\n        evt.initEvent(typeEvent, bubbles, true);\n      } else {\n        evt = new CustomEvent(event, {\n          bubbles,\n          cancelable: true\n        });\n      } // merge custom information in our event\n\n\n      if (typeof args !== 'undefined') {\n        Object.keys(args).forEach(key => {\n          Object.defineProperty(evt, key, {\n            get() {\n              return args[key];\n            }\n\n          });\n        });\n      }\n\n      if (defaultPrevented) {\n        evt.preventDefault();\n      }\n\n      if (nativeDispatch) {\n        element.dispatchEvent(evt);\n      }\n\n      if (evt.defaultPrevented && typeof jQueryEvent !== 'undefined') {\n        jQueryEvent.preventDefault();\n      }\n\n      return evt;\n    }\n\n  };\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): dom/data.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n  const elementMap = new Map();\n  var Data = {\n    set(element, key, instance) {\n      if (!elementMap.has(element)) {\n        elementMap.set(element, new Map());\n      }\n\n      const instanceMap = elementMap.get(element); // make it clear we only want one instance per element\n      // can be removed later when multiple key/instances are fine to be used\n\n      if (!instanceMap.has(key) && instanceMap.size !== 0) {\n        // eslint-disable-next-line no-console\n        console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(instanceMap.keys())[0]}.`);\n        return;\n      }\n\n      instanceMap.set(key, instance);\n    },\n\n    get(element, key) {\n      if (elementMap.has(element)) {\n        return elementMap.get(element).get(key) || null;\n      }\n\n      return null;\n    },\n\n    remove(element, key) {\n      if (!elementMap.has(element)) {\n        return;\n      }\n\n      const instanceMap = elementMap.get(element);\n      instanceMap.delete(key); // free up element references if there are no instances left for an element\n\n      if (instanceMap.size === 0) {\n        elementMap.delete(element);\n      }\n    }\n\n  };\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): base-component.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const VERSION = '5.0.2';\n\n  class BaseComponent {\n    constructor(element) {\n      element = getElement(element);\n\n      if (!element) {\n        return;\n      }\n\n      this._element = element;\n      Data.set(this._element, this.constructor.DATA_KEY, this);\n    }\n\n    dispose() {\n      Data.remove(this._element, this.constructor.DATA_KEY);\n      EventHandler.off(this._element, this.constructor.EVENT_KEY);\n      Object.getOwnPropertyNames(this).forEach(propertyName => {\n        this[propertyName] = null;\n      });\n    }\n\n    _queueCallback(callback, element, isAnimated = true) {\n      executeAfterTransition(callback, element, isAnimated);\n    }\n    /** Static */\n\n\n    static getInstance(element) {\n      return Data.get(element, this.DATA_KEY);\n    }\n\n    static getOrCreateInstance(element, config = {}) {\n      return this.getInstance(element) || new this(element, typeof config === 'object' ? config : null);\n    }\n\n    static get VERSION() {\n      return VERSION;\n    }\n\n    static get NAME() {\n      throw new Error('You have to implement the static method \"NAME\", for each component!');\n    }\n\n    static get DATA_KEY() {\n      return `bs.${this.NAME}`;\n    }\n\n    static get EVENT_KEY() {\n      return `.${this.DATA_KEY}`;\n    }\n\n  }\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): alert.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$c = 'alert';\n  const DATA_KEY$b = 'bs.alert';\n  const EVENT_KEY$b = `.${DATA_KEY$b}`;\n  const DATA_API_KEY$8 = '.data-api';\n  const SELECTOR_DISMISS = '[data-bs-dismiss=\"alert\"]';\n  const EVENT_CLOSE = `close${EVENT_KEY$b}`;\n  const EVENT_CLOSED = `closed${EVENT_KEY$b}`;\n  const EVENT_CLICK_DATA_API$7 = `click${EVENT_KEY$b}${DATA_API_KEY$8}`;\n  const CLASS_NAME_ALERT = 'alert';\n  const CLASS_NAME_FADE$6 = 'fade';\n  const CLASS_NAME_SHOW$9 = 'show';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Alert extends BaseComponent {\n    // Getters\n    static get NAME() {\n      return NAME$c;\n    } // Public\n\n\n    close(element) {\n      const rootElement = element ? this._getRootElement(element) : this._element;\n\n      const customEvent = this._triggerCloseEvent(rootElement);\n\n      if (customEvent === null || customEvent.defaultPrevented) {\n        return;\n      }\n\n      this._removeElement(rootElement);\n    } // Private\n\n\n    _getRootElement(element) {\n      return getElementFromSelector(element) || element.closest(`.${CLASS_NAME_ALERT}`);\n    }\n\n    _triggerCloseEvent(element) {\n      return EventHandler.trigger(element, EVENT_CLOSE);\n    }\n\n    _removeElement(element) {\n      element.classList.remove(CLASS_NAME_SHOW$9);\n      const isAnimated = element.classList.contains(CLASS_NAME_FADE$6);\n\n      this._queueCallback(() => this._destroyElement(element), element, isAnimated);\n    }\n\n    _destroyElement(element) {\n      element.remove();\n      EventHandler.trigger(element, EVENT_CLOSED);\n    } // Static\n\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = Alert.getOrCreateInstance(this);\n\n        if (config === 'close') {\n          data[config](this);\n        }\n      });\n    }\n\n    static handleDismiss(alertInstance) {\n      return function (event) {\n        if (event) {\n          event.preventDefault();\n        }\n\n        alertInstance.close(this);\n      };\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(document, EVENT_CLICK_DATA_API$7, SELECTOR_DISMISS, Alert.handleDismiss(new Alert()));\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Alert to jQuery only if jQuery is present\n   */\n\n  defineJQueryPlugin(Alert);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): button.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$b = 'button';\n  const DATA_KEY$a = 'bs.button';\n  const EVENT_KEY$a = `.${DATA_KEY$a}`;\n  const DATA_API_KEY$7 = '.data-api';\n  const CLASS_NAME_ACTIVE$3 = 'active';\n  const SELECTOR_DATA_TOGGLE$5 = '[data-bs-toggle=\"button\"]';\n  const EVENT_CLICK_DATA_API$6 = `click${EVENT_KEY$a}${DATA_API_KEY$7}`;\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Button extends BaseComponent {\n    // Getters\n    static get NAME() {\n      return NAME$b;\n    } // Public\n\n\n    toggle() {\n      // Toggle class and sync the `aria-pressed` attribute with the return value of the `.toggle()` method\n      this._element.setAttribute('aria-pressed', this._element.classList.toggle(CLASS_NAME_ACTIVE$3));\n    } // Static\n\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = Button.getOrCreateInstance(this);\n\n        if (config === 'toggle') {\n          data[config]();\n        }\n      });\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(document, EVENT_CLICK_DATA_API$6, SELECTOR_DATA_TOGGLE$5, event => {\n    event.preventDefault();\n    const button = event.target.closest(SELECTOR_DATA_TOGGLE$5);\n    const data = Button.getOrCreateInstance(button);\n    data.toggle();\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Button to jQuery only if jQuery is present\n   */\n\n  defineJQueryPlugin(Button);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): dom/manipulator.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  function normalizeData(val) {\n    if (val === 'true') {\n      return true;\n    }\n\n    if (val === 'false') {\n      return false;\n    }\n\n    if (val === Number(val).toString()) {\n      return Number(val);\n    }\n\n    if (val === '' || val === 'null') {\n      return null;\n    }\n\n    return val;\n  }\n\n  function normalizeDataKey(key) {\n    return key.replace(/[A-Z]/g, chr => `-${chr.toLowerCase()}`);\n  }\n\n  const Manipulator = {\n    setDataAttribute(element, key, value) {\n      element.setAttribute(`data-bs-${normalizeDataKey(key)}`, value);\n    },\n\n    removeDataAttribute(element, key) {\n      element.removeAttribute(`data-bs-${normalizeDataKey(key)}`);\n    },\n\n    getDataAttributes(element) {\n      if (!element) {\n        return {};\n      }\n\n      const attributes = {};\n      Object.keys(element.dataset).filter(key => key.startsWith('bs')).forEach(key => {\n        let pureKey = key.replace(/^bs/, '');\n        pureKey = pureKey.charAt(0).toLowerCase() + pureKey.slice(1, pureKey.length);\n        attributes[pureKey] = normalizeData(element.dataset[key]);\n      });\n      return attributes;\n    },\n\n    getDataAttribute(element, key) {\n      return normalizeData(element.getAttribute(`data-bs-${normalizeDataKey(key)}`));\n    },\n\n    offset(element) {\n      const rect = element.getBoundingClientRect();\n      return {\n        top: rect.top + document.body.scrollTop,\n        left: rect.left + document.body.scrollLeft\n      };\n    },\n\n    position(element) {\n      return {\n        top: element.offsetTop,\n        left: element.offsetLeft\n      };\n    }\n\n  };\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): carousel.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$a = 'carousel';\n  const DATA_KEY$9 = 'bs.carousel';\n  const EVENT_KEY$9 = `.${DATA_KEY$9}`;\n  const DATA_API_KEY$6 = '.data-api';\n  const ARROW_LEFT_KEY = 'ArrowLeft';\n  const ARROW_RIGHT_KEY = 'ArrowRight';\n  const TOUCHEVENT_COMPAT_WAIT = 500; // Time for mouse compat events to fire after touch\n\n  const SWIPE_THRESHOLD = 40;\n  const Default$9 = {\n    interval: 5000,\n    keyboard: true,\n    slide: false,\n    pause: 'hover',\n    wrap: true,\n    touch: true\n  };\n  const DefaultType$9 = {\n    interval: '(number|boolean)',\n    keyboard: 'boolean',\n    slide: '(boolean|string)',\n    pause: '(string|boolean)',\n    wrap: 'boolean',\n    touch: 'boolean'\n  };\n  const ORDER_NEXT = 'next';\n  const ORDER_PREV = 'prev';\n  const DIRECTION_LEFT = 'left';\n  const DIRECTION_RIGHT = 'right';\n  const KEY_TO_DIRECTION = {\n    [ARROW_LEFT_KEY]: DIRECTION_RIGHT,\n    [ARROW_RIGHT_KEY]: DIRECTION_LEFT\n  };\n  const EVENT_SLIDE = `slide${EVENT_KEY$9}`;\n  const EVENT_SLID = `slid${EVENT_KEY$9}`;\n  const EVENT_KEYDOWN = `keydown${EVENT_KEY$9}`;\n  const EVENT_MOUSEENTER = `mouseenter${EVENT_KEY$9}`;\n  const EVENT_MOUSELEAVE = `mouseleave${EVENT_KEY$9}`;\n  const EVENT_TOUCHSTART = `touchstart${EVENT_KEY$9}`;\n  const EVENT_TOUCHMOVE = `touchmove${EVENT_KEY$9}`;\n  const EVENT_TOUCHEND = `touchend${EVENT_KEY$9}`;\n  const EVENT_POINTERDOWN = `pointerdown${EVENT_KEY$9}`;\n  const EVENT_POINTERUP = `pointerup${EVENT_KEY$9}`;\n  const EVENT_DRAG_START = `dragstart${EVENT_KEY$9}`;\n  const EVENT_LOAD_DATA_API$2 = `load${EVENT_KEY$9}${DATA_API_KEY$6}`;\n  const EVENT_CLICK_DATA_API$5 = `click${EVENT_KEY$9}${DATA_API_KEY$6}`;\n  const CLASS_NAME_CAROUSEL = 'carousel';\n  const CLASS_NAME_ACTIVE$2 = 'active';\n  const CLASS_NAME_SLIDE = 'slide';\n  const CLASS_NAME_END = 'carousel-item-end';\n  const CLASS_NAME_START = 'carousel-item-start';\n  const CLASS_NAME_NEXT = 'carousel-item-next';\n  const CLASS_NAME_PREV = 'carousel-item-prev';\n  const CLASS_NAME_POINTER_EVENT = 'pointer-event';\n  const SELECTOR_ACTIVE$1 = '.active';\n  const SELECTOR_ACTIVE_ITEM = '.active.carousel-item';\n  const SELECTOR_ITEM = '.carousel-item';\n  const SELECTOR_ITEM_IMG = '.carousel-item img';\n  const SELECTOR_NEXT_PREV = '.carousel-item-next, .carousel-item-prev';\n  const SELECTOR_INDICATORS = '.carousel-indicators';\n  const SELECTOR_INDICATOR = '[data-bs-target]';\n  const SELECTOR_DATA_SLIDE = '[data-bs-slide], [data-bs-slide-to]';\n  const SELECTOR_DATA_RIDE = '[data-bs-ride=\"carousel\"]';\n  const POINTER_TYPE_TOUCH = 'touch';\n  const POINTER_TYPE_PEN = 'pen';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Carousel extends BaseComponent {\n    constructor(element, config) {\n      super(element);\n      this._items = null;\n      this._interval = null;\n      this._activeElement = null;\n      this._isPaused = false;\n      this._isSliding = false;\n      this.touchTimeout = null;\n      this.touchStartX = 0;\n      this.touchDeltaX = 0;\n      this._config = this._getConfig(config);\n      this._indicatorsElement = SelectorEngine.findOne(SELECTOR_INDICATORS, this._element);\n      this._touchSupported = 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0;\n      this._pointerEvent = Boolean(window.PointerEvent);\n\n      this._addEventListeners();\n    } // Getters\n\n\n    static get Default() {\n      return Default$9;\n    }\n\n    static get NAME() {\n      return NAME$a;\n    } // Public\n\n\n    next() {\n      this._slide(ORDER_NEXT);\n    }\n\n    nextWhenVisible() {\n      // Don't call next when the page isn't visible\n      // or the carousel or its parent isn't visible\n      if (!document.hidden && isVisible(this._element)) {\n        this.next();\n      }\n    }\n\n    prev() {\n      this._slide(ORDER_PREV);\n    }\n\n    pause(event) {\n      if (!event) {\n        this._isPaused = true;\n      }\n\n      if (SelectorEngine.findOne(SELECTOR_NEXT_PREV, this._element)) {\n        triggerTransitionEnd(this._element);\n        this.cycle(true);\n      }\n\n      clearInterval(this._interval);\n      this._interval = null;\n    }\n\n    cycle(event) {\n      if (!event) {\n        this._isPaused = false;\n      }\n\n      if (this._interval) {\n        clearInterval(this._interval);\n        this._interval = null;\n      }\n\n      if (this._config && this._config.interval && !this._isPaused) {\n        this._updateInterval();\n\n        this._interval = setInterval((document.visibilityState ? this.nextWhenVisible : this.next).bind(this), this._config.interval);\n      }\n    }\n\n    to(index) {\n      this._activeElement = SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element);\n\n      const activeIndex = this._getItemIndex(this._activeElement);\n\n      if (index > this._items.length - 1 || index < 0) {\n        return;\n      }\n\n      if (this._isSliding) {\n        EventHandler.one(this._element, EVENT_SLID, () => this.to(index));\n        return;\n      }\n\n      if (activeIndex === index) {\n        this.pause();\n        this.cycle();\n        return;\n      }\n\n      const order = index > activeIndex ? ORDER_NEXT : ORDER_PREV;\n\n      this._slide(order, this._items[index]);\n    } // Private\n\n\n    _getConfig(config) {\n      config = { ...Default$9,\n        ...Manipulator.getDataAttributes(this._element),\n        ...(typeof config === 'object' ? config : {})\n      };\n      typeCheckConfig(NAME$a, config, DefaultType$9);\n      return config;\n    }\n\n    _handleSwipe() {\n      const absDeltax = Math.abs(this.touchDeltaX);\n\n      if (absDeltax <= SWIPE_THRESHOLD) {\n        return;\n      }\n\n      const direction = absDeltax / this.touchDeltaX;\n      this.touchDeltaX = 0;\n\n      if (!direction) {\n        return;\n      }\n\n      this._slide(direction > 0 ? DIRECTION_RIGHT : DIRECTION_LEFT);\n    }\n\n    _addEventListeners() {\n      if (this._config.keyboard) {\n        EventHandler.on(this._element, EVENT_KEYDOWN, event => this._keydown(event));\n      }\n\n      if (this._config.pause === 'hover') {\n        EventHandler.on(this._element, EVENT_MOUSEENTER, event => this.pause(event));\n        EventHandler.on(this._element, EVENT_MOUSELEAVE, event => this.cycle(event));\n      }\n\n      if (this._config.touch && this._touchSupported) {\n        this._addTouchEventListeners();\n      }\n    }\n\n    _addTouchEventListeners() {\n      const start = event => {\n        if (this._pointerEvent && (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH)) {\n          this.touchStartX = event.clientX;\n        } else if (!this._pointerEvent) {\n          this.touchStartX = event.touches[0].clientX;\n        }\n      };\n\n      const move = event => {\n        // ensure swiping with one touch and not pinching\n        this.touchDeltaX = event.touches && event.touches.length > 1 ? 0 : event.touches[0].clientX - this.touchStartX;\n      };\n\n      const end = event => {\n        if (this._pointerEvent && (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH)) {\n          this.touchDeltaX = event.clientX - this.touchStartX;\n        }\n\n        this._handleSwipe();\n\n        if (this._config.pause === 'hover') {\n          // If it's a touch-enabled device, mouseenter/leave are fired as\n          // part of the mouse compatibility events on first tap - the carousel\n          // would stop cycling until user tapped out of it;\n          // here, we listen for touchend, explicitly pause the carousel\n          // (as if it's the second time we tap on it, mouseenter compat event\n          // is NOT fired) and after a timeout (to allow for mouse compatibility\n          // events to fire) we explicitly restart cycling\n          this.pause();\n\n          if (this.touchTimeout) {\n            clearTimeout(this.touchTimeout);\n          }\n\n          this.touchTimeout = setTimeout(event => this.cycle(event), TOUCHEVENT_COMPAT_WAIT + this._config.interval);\n        }\n      };\n\n      SelectorEngine.find(SELECTOR_ITEM_IMG, this._element).forEach(itemImg => {\n        EventHandler.on(itemImg, EVENT_DRAG_START, e => e.preventDefault());\n      });\n\n      if (this._pointerEvent) {\n        EventHandler.on(this._element, EVENT_POINTERDOWN, event => start(event));\n        EventHandler.on(this._element, EVENT_POINTERUP, event => end(event));\n\n        this._element.classList.add(CLASS_NAME_POINTER_EVENT);\n      } else {\n        EventHandler.on(this._element, EVENT_TOUCHSTART, event => start(event));\n        EventHandler.on(this._element, EVENT_TOUCHMOVE, event => move(event));\n        EventHandler.on(this._element, EVENT_TOUCHEND, event => end(event));\n      }\n    }\n\n    _keydown(event) {\n      if (/input|textarea/i.test(event.target.tagName)) {\n        return;\n      }\n\n      const direction = KEY_TO_DIRECTION[event.key];\n\n      if (direction) {\n        event.preventDefault();\n\n        this._slide(direction);\n      }\n    }\n\n    _getItemIndex(element) {\n      this._items = element && element.parentNode ? SelectorEngine.find(SELECTOR_ITEM, element.parentNode) : [];\n      return this._items.indexOf(element);\n    }\n\n    _getItemByOrder(order, activeElement) {\n      const isNext = order === ORDER_NEXT;\n      return getNextActiveElement(this._items, activeElement, isNext, this._config.wrap);\n    }\n\n    _triggerSlideEvent(relatedTarget, eventDirectionName) {\n      const targetIndex = this._getItemIndex(relatedTarget);\n\n      const fromIndex = this._getItemIndex(SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element));\n\n      return EventHandler.trigger(this._element, EVENT_SLIDE, {\n        relatedTarget,\n        direction: eventDirectionName,\n        from: fromIndex,\n        to: targetIndex\n      });\n    }\n\n    _setActiveIndicatorElement(element) {\n      if (this._indicatorsElement) {\n        const activeIndicator = SelectorEngine.findOne(SELECTOR_ACTIVE$1, this._indicatorsElement);\n        activeIndicator.classList.remove(CLASS_NAME_ACTIVE$2);\n        activeIndicator.removeAttribute('aria-current');\n        const indicators = SelectorEngine.find(SELECTOR_INDICATOR, this._indicatorsElement);\n\n        for (let i = 0; i < indicators.length; i++) {\n          if (Number.parseInt(indicators[i].getAttribute('data-bs-slide-to'), 10) === this._getItemIndex(element)) {\n            indicators[i].classList.add(CLASS_NAME_ACTIVE$2);\n            indicators[i].setAttribute('aria-current', 'true');\n            break;\n          }\n        }\n      }\n    }\n\n    _updateInterval() {\n      const element = this._activeElement || SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element);\n\n      if (!element) {\n        return;\n      }\n\n      const elementInterval = Number.parseInt(element.getAttribute('data-bs-interval'), 10);\n\n      if (elementInterval) {\n        this._config.defaultInterval = this._config.defaultInterval || this._config.interval;\n        this._config.interval = elementInterval;\n      } else {\n        this._config.interval = this._config.defaultInterval || this._config.interval;\n      }\n    }\n\n    _slide(directionOrOrder, element) {\n      const order = this._directionToOrder(directionOrOrder);\n\n      const activeElement = SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element);\n\n      const activeElementIndex = this._getItemIndex(activeElement);\n\n      const nextElement = element || this._getItemByOrder(order, activeElement);\n\n      const nextElementIndex = this._getItemIndex(nextElement);\n\n      const isCycling = Boolean(this._interval);\n      const isNext = order === ORDER_NEXT;\n      const directionalClassName = isNext ? CLASS_NAME_START : CLASS_NAME_END;\n      const orderClassName = isNext ? CLASS_NAME_NEXT : CLASS_NAME_PREV;\n\n      const eventDirectionName = this._orderToDirection(order);\n\n      if (nextElement && nextElement.classList.contains(CLASS_NAME_ACTIVE$2)) {\n        this._isSliding = false;\n        return;\n      }\n\n      if (this._isSliding) {\n        return;\n      }\n\n      const slideEvent = this._triggerSlideEvent(nextElement, eventDirectionName);\n\n      if (slideEvent.defaultPrevented) {\n        return;\n      }\n\n      if (!activeElement || !nextElement) {\n        // Some weirdness is happening, so we bail\n        return;\n      }\n\n      this._isSliding = true;\n\n      if (isCycling) {\n        this.pause();\n      }\n\n      this._setActiveIndicatorElement(nextElement);\n\n      this._activeElement = nextElement;\n\n      const triggerSlidEvent = () => {\n        EventHandler.trigger(this._element, EVENT_SLID, {\n          relatedTarget: nextElement,\n          direction: eventDirectionName,\n          from: activeElementIndex,\n          to: nextElementIndex\n        });\n      };\n\n      if (this._element.classList.contains(CLASS_NAME_SLIDE)) {\n        nextElement.classList.add(orderClassName);\n        reflow(nextElement);\n        activeElement.classList.add(directionalClassName);\n        nextElement.classList.add(directionalClassName);\n\n        const completeCallBack = () => {\n          nextElement.classList.remove(directionalClassName, orderClassName);\n          nextElement.classList.add(CLASS_NAME_ACTIVE$2);\n          activeElement.classList.remove(CLASS_NAME_ACTIVE$2, orderClassName, directionalClassName);\n          this._isSliding = false;\n          setTimeout(triggerSlidEvent, 0);\n        };\n\n        this._queueCallback(completeCallBack, activeElement, true);\n      } else {\n        activeElement.classList.remove(CLASS_NAME_ACTIVE$2);\n        nextElement.classList.add(CLASS_NAME_ACTIVE$2);\n        this._isSliding = false;\n        triggerSlidEvent();\n      }\n\n      if (isCycling) {\n        this.cycle();\n      }\n    }\n\n    _directionToOrder(direction) {\n      if (![DIRECTION_RIGHT, DIRECTION_LEFT].includes(direction)) {\n        return direction;\n      }\n\n      if (isRTL()) {\n        return direction === DIRECTION_LEFT ? ORDER_PREV : ORDER_NEXT;\n      }\n\n      return direction === DIRECTION_LEFT ? ORDER_NEXT : ORDER_PREV;\n    }\n\n    _orderToDirection(order) {\n      if (![ORDER_NEXT, ORDER_PREV].includes(order)) {\n        return order;\n      }\n\n      if (isRTL()) {\n        return order === ORDER_PREV ? DIRECTION_LEFT : DIRECTION_RIGHT;\n      }\n\n      return order === ORDER_PREV ? DIRECTION_RIGHT : DIRECTION_LEFT;\n    } // Static\n\n\n    static carouselInterface(element, config) {\n      const data = Carousel.getOrCreateInstance(element, config);\n      let {\n        _config\n      } = data;\n\n      if (typeof config === 'object') {\n        _config = { ..._config,\n          ...config\n        };\n      }\n\n      const action = typeof config === 'string' ? config : _config.slide;\n\n      if (typeof config === 'number') {\n        data.to(config);\n      } else if (typeof action === 'string') {\n        if (typeof data[action] === 'undefined') {\n          throw new TypeError(`No method named \"${action}\"`);\n        }\n\n        data[action]();\n      } else if (_config.interval && _config.ride) {\n        data.pause();\n        data.cycle();\n      }\n    }\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        Carousel.carouselInterface(this, config);\n      });\n    }\n\n    static dataApiClickHandler(event) {\n      const target = getElementFromSelector(this);\n\n      if (!target || !target.classList.contains(CLASS_NAME_CAROUSEL)) {\n        return;\n      }\n\n      const config = { ...Manipulator.getDataAttributes(target),\n        ...Manipulator.getDataAttributes(this)\n      };\n      const slideIndex = this.getAttribute('data-bs-slide-to');\n\n      if (slideIndex) {\n        config.interval = false;\n      }\n\n      Carousel.carouselInterface(target, config);\n\n      if (slideIndex) {\n        Carousel.getInstance(target).to(slideIndex);\n      }\n\n      event.preventDefault();\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(document, EVENT_CLICK_DATA_API$5, SELECTOR_DATA_SLIDE, Carousel.dataApiClickHandler);\n  EventHandler.on(window, EVENT_LOAD_DATA_API$2, () => {\n    const carousels = SelectorEngine.find(SELECTOR_DATA_RIDE);\n\n    for (let i = 0, len = carousels.length; i < len; i++) {\n      Carousel.carouselInterface(carousels[i], Carousel.getInstance(carousels[i]));\n    }\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Carousel to jQuery only if jQuery is present\n   */\n\n  defineJQueryPlugin(Carousel);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): collapse.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$9 = 'collapse';\n  const DATA_KEY$8 = 'bs.collapse';\n  const EVENT_KEY$8 = `.${DATA_KEY$8}`;\n  const DATA_API_KEY$5 = '.data-api';\n  const Default$8 = {\n    toggle: true,\n    parent: ''\n  };\n  const DefaultType$8 = {\n    toggle: 'boolean',\n    parent: '(string|element)'\n  };\n  const EVENT_SHOW$5 = `show${EVENT_KEY$8}`;\n  const EVENT_SHOWN$5 = `shown${EVENT_KEY$8}`;\n  const EVENT_HIDE$5 = `hide${EVENT_KEY$8}`;\n  const EVENT_HIDDEN$5 = `hidden${EVENT_KEY$8}`;\n  const EVENT_CLICK_DATA_API$4 = `click${EVENT_KEY$8}${DATA_API_KEY$5}`;\n  const CLASS_NAME_SHOW$8 = 'show';\n  const CLASS_NAME_COLLAPSE = 'collapse';\n  const CLASS_NAME_COLLAPSING = 'collapsing';\n  const CLASS_NAME_COLLAPSED = 'collapsed';\n  const WIDTH = 'width';\n  const HEIGHT = 'height';\n  const SELECTOR_ACTIVES = '.show, .collapsing';\n  const SELECTOR_DATA_TOGGLE$4 = '[data-bs-toggle=\"collapse\"]';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Collapse extends BaseComponent {\n    constructor(element, config) {\n      super(element);\n      this._isTransitioning = false;\n      this._config = this._getConfig(config);\n      this._triggerArray = SelectorEngine.find(`${SELECTOR_DATA_TOGGLE$4}[href=\"#${this._element.id}\"],` + `${SELECTOR_DATA_TOGGLE$4}[data-bs-target=\"#${this._element.id}\"]`);\n      const toggleList = SelectorEngine.find(SELECTOR_DATA_TOGGLE$4);\n\n      for (let i = 0, len = toggleList.length; i < len; i++) {\n        const elem = toggleList[i];\n        const selector = getSelectorFromElement(elem);\n        const filterElement = SelectorEngine.find(selector).filter(foundElem => foundElem === this._element);\n\n        if (selector !== null && filterElement.length) {\n          this._selector = selector;\n\n          this._triggerArray.push(elem);\n        }\n      }\n\n      this._parent = this._config.parent ? this._getParent() : null;\n\n      if (!this._config.parent) {\n        this._addAriaAndCollapsedClass(this._element, this._triggerArray);\n      }\n\n      if (this._config.toggle) {\n        this.toggle();\n      }\n    } // Getters\n\n\n    static get Default() {\n      return Default$8;\n    }\n\n    static get NAME() {\n      return NAME$9;\n    } // Public\n\n\n    toggle() {\n      if (this._element.classList.contains(CLASS_NAME_SHOW$8)) {\n        this.hide();\n      } else {\n        this.show();\n      }\n    }\n\n    show() {\n      if (this._isTransitioning || this._element.classList.contains(CLASS_NAME_SHOW$8)) {\n        return;\n      }\n\n      let actives;\n      let activesData;\n\n      if (this._parent) {\n        actives = SelectorEngine.find(SELECTOR_ACTIVES, this._parent).filter(elem => {\n          if (typeof this._config.parent === 'string') {\n            return elem.getAttribute('data-bs-parent') === this._config.parent;\n          }\n\n          return elem.classList.contains(CLASS_NAME_COLLAPSE);\n        });\n\n        if (actives.length === 0) {\n          actives = null;\n        }\n      }\n\n      const container = SelectorEngine.findOne(this._selector);\n\n      if (actives) {\n        const tempActiveData = actives.find(elem => container !== elem);\n        activesData = tempActiveData ? Collapse.getInstance(tempActiveData) : null;\n\n        if (activesData && activesData._isTransitioning) {\n          return;\n        }\n      }\n\n      const startEvent = EventHandler.trigger(this._element, EVENT_SHOW$5);\n\n      if (startEvent.defaultPrevented) {\n        return;\n      }\n\n      if (actives) {\n        actives.forEach(elemActive => {\n          if (container !== elemActive) {\n            Collapse.collapseInterface(elemActive, 'hide');\n          }\n\n          if (!activesData) {\n            Data.set(elemActive, DATA_KEY$8, null);\n          }\n        });\n      }\n\n      const dimension = this._getDimension();\n\n      this._element.classList.remove(CLASS_NAME_COLLAPSE);\n\n      this._element.classList.add(CLASS_NAME_COLLAPSING);\n\n      this._element.style[dimension] = 0;\n\n      if (this._triggerArray.length) {\n        this._triggerArray.forEach(element => {\n          element.classList.remove(CLASS_NAME_COLLAPSED);\n          element.setAttribute('aria-expanded', true);\n        });\n      }\n\n      this.setTransitioning(true);\n\n      const complete = () => {\n        this._element.classList.remove(CLASS_NAME_COLLAPSING);\n\n        this._element.classList.add(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$8);\n\n        this._element.style[dimension] = '';\n        this.setTransitioning(false);\n        EventHandler.trigger(this._element, EVENT_SHOWN$5);\n      };\n\n      const capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1);\n      const scrollSize = `scroll${capitalizedDimension}`;\n\n      this._queueCallback(complete, this._element, true);\n\n      this._element.style[dimension] = `${this._element[scrollSize]}px`;\n    }\n\n    hide() {\n      if (this._isTransitioning || !this._element.classList.contains(CLASS_NAME_SHOW$8)) {\n        return;\n      }\n\n      const startEvent = EventHandler.trigger(this._element, EVENT_HIDE$5);\n\n      if (startEvent.defaultPrevented) {\n        return;\n      }\n\n      const dimension = this._getDimension();\n\n      this._element.style[dimension] = `${this._element.getBoundingClientRect()[dimension]}px`;\n      reflow(this._element);\n\n      this._element.classList.add(CLASS_NAME_COLLAPSING);\n\n      this._element.classList.remove(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$8);\n\n      const triggerArrayLength = this._triggerArray.length;\n\n      if (triggerArrayLength > 0) {\n        for (let i = 0; i < triggerArrayLength; i++) {\n          const trigger = this._triggerArray[i];\n          const elem = getElementFromSelector(trigger);\n\n          if (elem && !elem.classList.contains(CLASS_NAME_SHOW$8)) {\n            trigger.classList.add(CLASS_NAME_COLLAPSED);\n            trigger.setAttribute('aria-expanded', false);\n          }\n        }\n      }\n\n      this.setTransitioning(true);\n\n      const complete = () => {\n        this.setTransitioning(false);\n\n        this._element.classList.remove(CLASS_NAME_COLLAPSING);\n\n        this._element.classList.add(CLASS_NAME_COLLAPSE);\n\n        EventHandler.trigger(this._element, EVENT_HIDDEN$5);\n      };\n\n      this._element.style[dimension] = '';\n\n      this._queueCallback(complete, this._element, true);\n    }\n\n    setTransitioning(isTransitioning) {\n      this._isTransitioning = isTransitioning;\n    } // Private\n\n\n    _getConfig(config) {\n      config = { ...Default$8,\n        ...config\n      };\n      config.toggle = Boolean(config.toggle); // Coerce string values\n\n      typeCheckConfig(NAME$9, config, DefaultType$8);\n      return config;\n    }\n\n    _getDimension() {\n      return this._element.classList.contains(WIDTH) ? WIDTH : HEIGHT;\n    }\n\n    _getParent() {\n      let {\n        parent\n      } = this._config;\n      parent = getElement(parent);\n      const selector = `${SELECTOR_DATA_TOGGLE$4}[data-bs-parent=\"${parent}\"]`;\n      SelectorEngine.find(selector, parent).forEach(element => {\n        const selected = getElementFromSelector(element);\n\n        this._addAriaAndCollapsedClass(selected, [element]);\n      });\n      return parent;\n    }\n\n    _addAriaAndCollapsedClass(element, triggerArray) {\n      if (!element || !triggerArray.length) {\n        return;\n      }\n\n      const isOpen = element.classList.contains(CLASS_NAME_SHOW$8);\n      triggerArray.forEach(elem => {\n        if (isOpen) {\n          elem.classList.remove(CLASS_NAME_COLLAPSED);\n        } else {\n          elem.classList.add(CLASS_NAME_COLLAPSED);\n        }\n\n        elem.setAttribute('aria-expanded', isOpen);\n      });\n    } // Static\n\n\n    static collapseInterface(element, config) {\n      let data = Collapse.getInstance(element);\n      const _config = { ...Default$8,\n        ...Manipulator.getDataAttributes(element),\n        ...(typeof config === 'object' && config ? config : {})\n      };\n\n      if (!data && _config.toggle && typeof config === 'string' && /show|hide/.test(config)) {\n        _config.toggle = false;\n      }\n\n      if (!data) {\n        data = new Collapse(element, _config);\n      }\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config]();\n      }\n    }\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        Collapse.collapseInterface(this, config);\n      });\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(document, EVENT_CLICK_DATA_API$4, SELECTOR_DATA_TOGGLE$4, function (event) {\n    // preventDefault only for <a> elements (which change the URL) not inside the collapsible element\n    if (event.target.tagName === 'A' || event.delegateTarget && event.delegateTarget.tagName === 'A') {\n      event.preventDefault();\n    }\n\n    const triggerData = Manipulator.getDataAttributes(this);\n    const selector = getSelectorFromElement(this);\n    const selectorElements = SelectorEngine.find(selector);\n    selectorElements.forEach(element => {\n      const data = Collapse.getInstance(element);\n      let config;\n\n      if (data) {\n        // update parent attribute\n        if (data._parent === null && typeof triggerData.parent === 'string') {\n          data._config.parent = triggerData.parent;\n          data._parent = data._getParent();\n        }\n\n        config = 'toggle';\n      } else {\n        config = triggerData;\n      }\n\n      Collapse.collapseInterface(element, config);\n    });\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Collapse to jQuery only if jQuery is present\n   */\n\n  defineJQueryPlugin(Collapse);\n\n  var top = 'top';\n  var bottom = 'bottom';\n  var right = 'right';\n  var left = 'left';\n  var auto = 'auto';\n  var basePlacements = [top, bottom, right, left];\n  var start = 'start';\n  var end = 'end';\n  var clippingParents = 'clippingParents';\n  var viewport = 'viewport';\n  var popper = 'popper';\n  var reference = 'reference';\n  var variationPlacements = /*#__PURE__*/basePlacements.reduce(function (acc, placement) {\n    return acc.concat([placement + \"-\" + start, placement + \"-\" + end]);\n  }, []);\n  var placements = /*#__PURE__*/[].concat(basePlacements, [auto]).reduce(function (acc, placement) {\n    return acc.concat([placement, placement + \"-\" + start, placement + \"-\" + end]);\n  }, []); // modifiers that need to read the DOM\n\n  var beforeRead = 'beforeRead';\n  var read = 'read';\n  var afterRead = 'afterRead'; // pure-logic modifiers\n\n  var beforeMain = 'beforeMain';\n  var main = 'main';\n  var afterMain = 'afterMain'; // modifier with the purpose to write to the DOM (or write into a framework state)\n\n  var beforeWrite = 'beforeWrite';\n  var write = 'write';\n  var afterWrite = 'afterWrite';\n  var modifierPhases = [beforeRead, read, afterRead, beforeMain, main, afterMain, beforeWrite, write, afterWrite];\n\n  function getNodeName(element) {\n    return element ? (element.nodeName || '').toLowerCase() : null;\n  }\n\n  function getWindow(node) {\n    if (node == null) {\n      return window;\n    }\n\n    if (node.toString() !== '[object Window]') {\n      var ownerDocument = node.ownerDocument;\n      return ownerDocument ? ownerDocument.defaultView || window : window;\n    }\n\n    return node;\n  }\n\n  function isElement(node) {\n    var OwnElement = getWindow(node).Element;\n    return node instanceof OwnElement || node instanceof Element;\n  }\n\n  function isHTMLElement(node) {\n    var OwnElement = getWindow(node).HTMLElement;\n    return node instanceof OwnElement || node instanceof HTMLElement;\n  }\n\n  function isShadowRoot(node) {\n    // IE 11 has no ShadowRoot\n    if (typeof ShadowRoot === 'undefined') {\n      return false;\n    }\n\n    var OwnElement = getWindow(node).ShadowRoot;\n    return node instanceof OwnElement || node instanceof ShadowRoot;\n  }\n\n  // and applies them to the HTMLElements such as popper and arrow\n\n  function applyStyles(_ref) {\n    var state = _ref.state;\n    Object.keys(state.elements).forEach(function (name) {\n      var style = state.styles[name] || {};\n      var attributes = state.attributes[name] || {};\n      var element = state.elements[name]; // arrow is optional + virtual elements\n\n      if (!isHTMLElement(element) || !getNodeName(element)) {\n        return;\n      } // Flow doesn't support to extend this property, but it's the most\n      // effective way to apply styles to an HTMLElement\n      // $FlowFixMe[cannot-write]\n\n\n      Object.assign(element.style, style);\n      Object.keys(attributes).forEach(function (name) {\n        var value = attributes[name];\n\n        if (value === false) {\n          element.removeAttribute(name);\n        } else {\n          element.setAttribute(name, value === true ? '' : value);\n        }\n      });\n    });\n  }\n\n  function effect$2(_ref2) {\n    var state = _ref2.state;\n    var initialStyles = {\n      popper: {\n        position: state.options.strategy,\n        left: '0',\n        top: '0',\n        margin: '0'\n      },\n      arrow: {\n        position: 'absolute'\n      },\n      reference: {}\n    };\n    Object.assign(state.elements.popper.style, initialStyles.popper);\n    state.styles = initialStyles;\n\n    if (state.elements.arrow) {\n      Object.assign(state.elements.arrow.style, initialStyles.arrow);\n    }\n\n    return function () {\n      Object.keys(state.elements).forEach(function (name) {\n        var element = state.elements[name];\n        var attributes = state.attributes[name] || {};\n        var styleProperties = Object.keys(state.styles.hasOwnProperty(name) ? state.styles[name] : initialStyles[name]); // Set all values to an empty string to unset them\n\n        var style = styleProperties.reduce(function (style, property) {\n          style[property] = '';\n          return style;\n        }, {}); // arrow is optional + virtual elements\n\n        if (!isHTMLElement(element) || !getNodeName(element)) {\n          return;\n        }\n\n        Object.assign(element.style, style);\n        Object.keys(attributes).forEach(function (attribute) {\n          element.removeAttribute(attribute);\n        });\n      });\n    };\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  var applyStyles$1 = {\n    name: 'applyStyles',\n    enabled: true,\n    phase: 'write',\n    fn: applyStyles,\n    effect: effect$2,\n    requires: ['computeStyles']\n  };\n\n  function getBasePlacement(placement) {\n    return placement.split('-')[0];\n  }\n\n  function getBoundingClientRect(element) {\n    var rect = element.getBoundingClientRect();\n    return {\n      width: rect.width,\n      height: rect.height,\n      top: rect.top,\n      right: rect.right,\n      bottom: rect.bottom,\n      left: rect.left,\n      x: rect.left,\n      y: rect.top\n    };\n  }\n\n  // means it doesn't take into account transforms.\n\n  function getLayoutRect(element) {\n    var clientRect = getBoundingClientRect(element); // Use the clientRect sizes if it's not been transformed.\n    // Fixes https://github.com/popperjs/popper-core/issues/1223\n\n    var width = element.offsetWidth;\n    var height = element.offsetHeight;\n\n    if (Math.abs(clientRect.width - width) <= 1) {\n      width = clientRect.width;\n    }\n\n    if (Math.abs(clientRect.height - height) <= 1) {\n      height = clientRect.height;\n    }\n\n    return {\n      x: element.offsetLeft,\n      y: element.offsetTop,\n      width: width,\n      height: height\n    };\n  }\n\n  function contains(parent, child) {\n    var rootNode = child.getRootNode && child.getRootNode(); // First, attempt with faster native method\n\n    if (parent.contains(child)) {\n      return true;\n    } // then fallback to custom implementation with Shadow DOM support\n    else if (rootNode && isShadowRoot(rootNode)) {\n        var next = child;\n\n        do {\n          if (next && parent.isSameNode(next)) {\n            return true;\n          } // $FlowFixMe[prop-missing]: need a better way to handle this...\n\n\n          next = next.parentNode || next.host;\n        } while (next);\n      } // Give up, the result is false\n\n\n    return false;\n  }\n\n  function getComputedStyle$1(element) {\n    return getWindow(element).getComputedStyle(element);\n  }\n\n  function isTableElement(element) {\n    return ['table', 'td', 'th'].indexOf(getNodeName(element)) >= 0;\n  }\n\n  function getDocumentElement(element) {\n    // $FlowFixMe[incompatible-return]: assume body is always available\n    return ((isElement(element) ? element.ownerDocument : // $FlowFixMe[prop-missing]\n    element.document) || window.document).documentElement;\n  }\n\n  function getParentNode(element) {\n    if (getNodeName(element) === 'html') {\n      return element;\n    }\n\n    return (// this is a quicker (but less type safe) way to save quite some bytes from the bundle\n      // $FlowFixMe[incompatible-return]\n      // $FlowFixMe[prop-missing]\n      element.assignedSlot || // step into the shadow DOM of the parent of a slotted node\n      element.parentNode || ( // DOM Element detected\n      isShadowRoot(element) ? element.host : null) || // ShadowRoot detected\n      // $FlowFixMe[incompatible-call]: HTMLElement is a Node\n      getDocumentElement(element) // fallback\n\n    );\n  }\n\n  function getTrueOffsetParent(element) {\n    if (!isHTMLElement(element) || // https://github.com/popperjs/popper-core/issues/837\n    getComputedStyle$1(element).position === 'fixed') {\n      return null;\n    }\n\n    return element.offsetParent;\n  } // `.offsetParent` reports `null` for fixed elements, while absolute elements\n  // return the containing block\n\n\n  function getContainingBlock(element) {\n    var isFirefox = navigator.userAgent.toLowerCase().indexOf('firefox') !== -1;\n    var isIE = navigator.userAgent.indexOf('Trident') !== -1;\n\n    if (isIE && isHTMLElement(element)) {\n      // In IE 9, 10 and 11 fixed elements containing block is always established by the viewport\n      var elementCss = getComputedStyle$1(element);\n\n      if (elementCss.position === 'fixed') {\n        return null;\n      }\n    }\n\n    var currentNode = getParentNode(element);\n\n    while (isHTMLElement(currentNode) && ['html', 'body'].indexOf(getNodeName(currentNode)) < 0) {\n      var css = getComputedStyle$1(currentNode); // This is non-exhaustive but covers the most common CSS properties that\n      // create a containing block.\n      // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n\n      if (css.transform !== 'none' || css.perspective !== 'none' || css.contain === 'paint' || ['transform', 'perspective'].indexOf(css.willChange) !== -1 || isFirefox && css.willChange === 'filter' || isFirefox && css.filter && css.filter !== 'none') {\n        return currentNode;\n      } else {\n        currentNode = currentNode.parentNode;\n      }\n    }\n\n    return null;\n  } // Gets the closest ancestor positioned element. Handles some edge cases,\n  // such as table ancestors and cross browser bugs.\n\n\n  function getOffsetParent(element) {\n    var window = getWindow(element);\n    var offsetParent = getTrueOffsetParent(element);\n\n    while (offsetParent && isTableElement(offsetParent) && getComputedStyle$1(offsetParent).position === 'static') {\n      offsetParent = getTrueOffsetParent(offsetParent);\n    }\n\n    if (offsetParent && (getNodeName(offsetParent) === 'html' || getNodeName(offsetParent) === 'body' && getComputedStyle$1(offsetParent).position === 'static')) {\n      return window;\n    }\n\n    return offsetParent || getContainingBlock(element) || window;\n  }\n\n  function getMainAxisFromPlacement(placement) {\n    return ['top', 'bottom'].indexOf(placement) >= 0 ? 'x' : 'y';\n  }\n\n  var max = Math.max;\n  var min = Math.min;\n  var round = Math.round;\n\n  function within(min$1, value, max$1) {\n    return max(min$1, min(value, max$1));\n  }\n\n  function getFreshSideObject() {\n    return {\n      top: 0,\n      right: 0,\n      bottom: 0,\n      left: 0\n    };\n  }\n\n  function mergePaddingObject(paddingObject) {\n    return Object.assign({}, getFreshSideObject(), paddingObject);\n  }\n\n  function expandToHashMap(value, keys) {\n    return keys.reduce(function (hashMap, key) {\n      hashMap[key] = value;\n      return hashMap;\n    }, {});\n  }\n\n  var toPaddingObject = function toPaddingObject(padding, state) {\n    padding = typeof padding === 'function' ? padding(Object.assign({}, state.rects, {\n      placement: state.placement\n    })) : padding;\n    return mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));\n  };\n\n  function arrow(_ref) {\n    var _state$modifiersData$;\n\n    var state = _ref.state,\n        name = _ref.name,\n        options = _ref.options;\n    var arrowElement = state.elements.arrow;\n    var popperOffsets = state.modifiersData.popperOffsets;\n    var basePlacement = getBasePlacement(state.placement);\n    var axis = getMainAxisFromPlacement(basePlacement);\n    var isVertical = [left, right].indexOf(basePlacement) >= 0;\n    var len = isVertical ? 'height' : 'width';\n\n    if (!arrowElement || !popperOffsets) {\n      return;\n    }\n\n    var paddingObject = toPaddingObject(options.padding, state);\n    var arrowRect = getLayoutRect(arrowElement);\n    var minProp = axis === 'y' ? top : left;\n    var maxProp = axis === 'y' ? bottom : right;\n    var endDiff = state.rects.reference[len] + state.rects.reference[axis] - popperOffsets[axis] - state.rects.popper[len];\n    var startDiff = popperOffsets[axis] - state.rects.reference[axis];\n    var arrowOffsetParent = getOffsetParent(arrowElement);\n    var clientSize = arrowOffsetParent ? axis === 'y' ? arrowOffsetParent.clientHeight || 0 : arrowOffsetParent.clientWidth || 0 : 0;\n    var centerToReference = endDiff / 2 - startDiff / 2; // Make sure the arrow doesn't overflow the popper if the center point is\n    // outside of the popper bounds\n\n    var min = paddingObject[minProp];\n    var max = clientSize - arrowRect[len] - paddingObject[maxProp];\n    var center = clientSize / 2 - arrowRect[len] / 2 + centerToReference;\n    var offset = within(min, center, max); // Prevents breaking syntax highlighting...\n\n    var axisProp = axis;\n    state.modifiersData[name] = (_state$modifiersData$ = {}, _state$modifiersData$[axisProp] = offset, _state$modifiersData$.centerOffset = offset - center, _state$modifiersData$);\n  }\n\n  function effect$1(_ref2) {\n    var state = _ref2.state,\n        options = _ref2.options;\n    var _options$element = options.element,\n        arrowElement = _options$element === void 0 ? '[data-popper-arrow]' : _options$element;\n\n    if (arrowElement == null) {\n      return;\n    } // CSS selector\n\n\n    if (typeof arrowElement === 'string') {\n      arrowElement = state.elements.popper.querySelector(arrowElement);\n\n      if (!arrowElement) {\n        return;\n      }\n    }\n\n    if (!contains(state.elements.popper, arrowElement)) {\n\n      return;\n    }\n\n    state.elements.arrow = arrowElement;\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  var arrow$1 = {\n    name: 'arrow',\n    enabled: true,\n    phase: 'main',\n    fn: arrow,\n    effect: effect$1,\n    requires: ['popperOffsets'],\n    requiresIfExists: ['preventOverflow']\n  };\n\n  var unsetSides = {\n    top: 'auto',\n    right: 'auto',\n    bottom: 'auto',\n    left: 'auto'\n  }; // Round the offsets to the nearest suitable subpixel based on the DPR.\n  // Zooming can change the DPR, but it seems to report a value that will\n  // cleanly divide the values into the appropriate subpixels.\n\n  function roundOffsetsByDPR(_ref) {\n    var x = _ref.x,\n        y = _ref.y;\n    var win = window;\n    var dpr = win.devicePixelRatio || 1;\n    return {\n      x: round(round(x * dpr) / dpr) || 0,\n      y: round(round(y * dpr) / dpr) || 0\n    };\n  }\n\n  function mapToStyles(_ref2) {\n    var _Object$assign2;\n\n    var popper = _ref2.popper,\n        popperRect = _ref2.popperRect,\n        placement = _ref2.placement,\n        offsets = _ref2.offsets,\n        position = _ref2.position,\n        gpuAcceleration = _ref2.gpuAcceleration,\n        adaptive = _ref2.adaptive,\n        roundOffsets = _ref2.roundOffsets;\n\n    var _ref3 = roundOffsets === true ? roundOffsetsByDPR(offsets) : typeof roundOffsets === 'function' ? roundOffsets(offsets) : offsets,\n        _ref3$x = _ref3.x,\n        x = _ref3$x === void 0 ? 0 : _ref3$x,\n        _ref3$y = _ref3.y,\n        y = _ref3$y === void 0 ? 0 : _ref3$y;\n\n    var hasX = offsets.hasOwnProperty('x');\n    var hasY = offsets.hasOwnProperty('y');\n    var sideX = left;\n    var sideY = top;\n    var win = window;\n\n    if (adaptive) {\n      var offsetParent = getOffsetParent(popper);\n      var heightProp = 'clientHeight';\n      var widthProp = 'clientWidth';\n\n      if (offsetParent === getWindow(popper)) {\n        offsetParent = getDocumentElement(popper);\n\n        if (getComputedStyle$1(offsetParent).position !== 'static') {\n          heightProp = 'scrollHeight';\n          widthProp = 'scrollWidth';\n        }\n      } // $FlowFixMe[incompatible-cast]: force type refinement, we compare offsetParent with window above, but Flow doesn't detect it\n\n\n      offsetParent = offsetParent;\n\n      if (placement === top) {\n        sideY = bottom; // $FlowFixMe[prop-missing]\n\n        y -= offsetParent[heightProp] - popperRect.height;\n        y *= gpuAcceleration ? 1 : -1;\n      }\n\n      if (placement === left) {\n        sideX = right; // $FlowFixMe[prop-missing]\n\n        x -= offsetParent[widthProp] - popperRect.width;\n        x *= gpuAcceleration ? 1 : -1;\n      }\n    }\n\n    var commonStyles = Object.assign({\n      position: position\n    }, adaptive && unsetSides);\n\n    if (gpuAcceleration) {\n      var _Object$assign;\n\n      return Object.assign({}, commonStyles, (_Object$assign = {}, _Object$assign[sideY] = hasY ? '0' : '', _Object$assign[sideX] = hasX ? '0' : '', _Object$assign.transform = (win.devicePixelRatio || 1) < 2 ? \"translate(\" + x + \"px, \" + y + \"px)\" : \"translate3d(\" + x + \"px, \" + y + \"px, 0)\", _Object$assign));\n    }\n\n    return Object.assign({}, commonStyles, (_Object$assign2 = {}, _Object$assign2[sideY] = hasY ? y + \"px\" : '', _Object$assign2[sideX] = hasX ? x + \"px\" : '', _Object$assign2.transform = '', _Object$assign2));\n  }\n\n  function computeStyles(_ref4) {\n    var state = _ref4.state,\n        options = _ref4.options;\n    var _options$gpuAccelerat = options.gpuAcceleration,\n        gpuAcceleration = _options$gpuAccelerat === void 0 ? true : _options$gpuAccelerat,\n        _options$adaptive = options.adaptive,\n        adaptive = _options$adaptive === void 0 ? true : _options$adaptive,\n        _options$roundOffsets = options.roundOffsets,\n        roundOffsets = _options$roundOffsets === void 0 ? true : _options$roundOffsets;\n\n    var commonStyles = {\n      placement: getBasePlacement(state.placement),\n      popper: state.elements.popper,\n      popperRect: state.rects.popper,\n      gpuAcceleration: gpuAcceleration\n    };\n\n    if (state.modifiersData.popperOffsets != null) {\n      state.styles.popper = Object.assign({}, state.styles.popper, mapToStyles(Object.assign({}, commonStyles, {\n        offsets: state.modifiersData.popperOffsets,\n        position: state.options.strategy,\n        adaptive: adaptive,\n        roundOffsets: roundOffsets\n      })));\n    }\n\n    if (state.modifiersData.arrow != null) {\n      state.styles.arrow = Object.assign({}, state.styles.arrow, mapToStyles(Object.assign({}, commonStyles, {\n        offsets: state.modifiersData.arrow,\n        position: 'absolute',\n        adaptive: false,\n        roundOffsets: roundOffsets\n      })));\n    }\n\n    state.attributes.popper = Object.assign({}, state.attributes.popper, {\n      'data-popper-placement': state.placement\n    });\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  var computeStyles$1 = {\n    name: 'computeStyles',\n    enabled: true,\n    phase: 'beforeWrite',\n    fn: computeStyles,\n    data: {}\n  };\n\n  var passive = {\n    passive: true\n  };\n\n  function effect(_ref) {\n    var state = _ref.state,\n        instance = _ref.instance,\n        options = _ref.options;\n    var _options$scroll = options.scroll,\n        scroll = _options$scroll === void 0 ? true : _options$scroll,\n        _options$resize = options.resize,\n        resize = _options$resize === void 0 ? true : _options$resize;\n    var window = getWindow(state.elements.popper);\n    var scrollParents = [].concat(state.scrollParents.reference, state.scrollParents.popper);\n\n    if (scroll) {\n      scrollParents.forEach(function (scrollParent) {\n        scrollParent.addEventListener('scroll', instance.update, passive);\n      });\n    }\n\n    if (resize) {\n      window.addEventListener('resize', instance.update, passive);\n    }\n\n    return function () {\n      if (scroll) {\n        scrollParents.forEach(function (scrollParent) {\n          scrollParent.removeEventListener('scroll', instance.update, passive);\n        });\n      }\n\n      if (resize) {\n        window.removeEventListener('resize', instance.update, passive);\n      }\n    };\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  var eventListeners = {\n    name: 'eventListeners',\n    enabled: true,\n    phase: 'write',\n    fn: function fn() {},\n    effect: effect,\n    data: {}\n  };\n\n  var hash$1 = {\n    left: 'right',\n    right: 'left',\n    bottom: 'top',\n    top: 'bottom'\n  };\n  function getOppositePlacement(placement) {\n    return placement.replace(/left|right|bottom|top/g, function (matched) {\n      return hash$1[matched];\n    });\n  }\n\n  var hash = {\n    start: 'end',\n    end: 'start'\n  };\n  function getOppositeVariationPlacement(placement) {\n    return placement.replace(/start|end/g, function (matched) {\n      return hash[matched];\n    });\n  }\n\n  function getWindowScroll(node) {\n    var win = getWindow(node);\n    var scrollLeft = win.pageXOffset;\n    var scrollTop = win.pageYOffset;\n    return {\n      scrollLeft: scrollLeft,\n      scrollTop: scrollTop\n    };\n  }\n\n  function getWindowScrollBarX(element) {\n    // If <html> has a CSS width greater than the viewport, then this will be\n    // incorrect for RTL.\n    // Popper 1 is broken in this case and never had a bug report so let's assume\n    // it's not an issue. I don't think anyone ever specifies width on <html>\n    // anyway.\n    // Browsers where the left scrollbar doesn't cause an issue report `0` for\n    // this (e.g. Edge 2019, IE11, Safari)\n    return getBoundingClientRect(getDocumentElement(element)).left + getWindowScroll(element).scrollLeft;\n  }\n\n  function getViewportRect(element) {\n    var win = getWindow(element);\n    var html = getDocumentElement(element);\n    var visualViewport = win.visualViewport;\n    var width = html.clientWidth;\n    var height = html.clientHeight;\n    var x = 0;\n    var y = 0; // NB: This isn't supported on iOS <= 12. If the keyboard is open, the popper\n    // can be obscured underneath it.\n    // Also, `html.clientHeight` adds the bottom bar height in Safari iOS, even\n    // if it isn't open, so if this isn't available, the popper will be detected\n    // to overflow the bottom of the screen too early.\n\n    if (visualViewport) {\n      width = visualViewport.width;\n      height = visualViewport.height; // Uses Layout Viewport (like Chrome; Safari does not currently)\n      // In Chrome, it returns a value very close to 0 (+/-) but contains rounding\n      // errors due to floating point numbers, so we need to check precision.\n      // Safari returns a number <= 0, usually < -1 when pinch-zoomed\n      // Feature detection fails in mobile emulation mode in Chrome.\n      // Math.abs(win.innerWidth / visualViewport.scale - visualViewport.width) <\n      // 0.001\n      // Fallback here: \"Not Safari\" userAgent\n\n      if (!/^((?!chrome|android).)*safari/i.test(navigator.userAgent)) {\n        x = visualViewport.offsetLeft;\n        y = visualViewport.offsetTop;\n      }\n    }\n\n    return {\n      width: width,\n      height: height,\n      x: x + getWindowScrollBarX(element),\n      y: y\n    };\n  }\n\n  // of the `<html>` and `<body>` rect bounds if horizontally scrollable\n\n  function getDocumentRect(element) {\n    var _element$ownerDocumen;\n\n    var html = getDocumentElement(element);\n    var winScroll = getWindowScroll(element);\n    var body = (_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body;\n    var width = max(html.scrollWidth, html.clientWidth, body ? body.scrollWidth : 0, body ? body.clientWidth : 0);\n    var height = max(html.scrollHeight, html.clientHeight, body ? body.scrollHeight : 0, body ? body.clientHeight : 0);\n    var x = -winScroll.scrollLeft + getWindowScrollBarX(element);\n    var y = -winScroll.scrollTop;\n\n    if (getComputedStyle$1(body || html).direction === 'rtl') {\n      x += max(html.clientWidth, body ? body.clientWidth : 0) - width;\n    }\n\n    return {\n      width: width,\n      height: height,\n      x: x,\n      y: y\n    };\n  }\n\n  function isScrollParent(element) {\n    // Firefox wants us to check `-x` and `-y` variations as well\n    var _getComputedStyle = getComputedStyle$1(element),\n        overflow = _getComputedStyle.overflow,\n        overflowX = _getComputedStyle.overflowX,\n        overflowY = _getComputedStyle.overflowY;\n\n    return /auto|scroll|overlay|hidden/.test(overflow + overflowY + overflowX);\n  }\n\n  function getScrollParent(node) {\n    if (['html', 'body', '#document'].indexOf(getNodeName(node)) >= 0) {\n      // $FlowFixMe[incompatible-return]: assume body is always available\n      return node.ownerDocument.body;\n    }\n\n    if (isHTMLElement(node) && isScrollParent(node)) {\n      return node;\n    }\n\n    return getScrollParent(getParentNode(node));\n  }\n\n  /*\n  given a DOM element, return the list of all scroll parents, up the list of ancesors\n  until we get to the top window object. This list is what we attach scroll listeners\n  to, because if any of these parent elements scroll, we'll need to re-calculate the\n  reference element's position.\n  */\n\n  function listScrollParents(element, list) {\n    var _element$ownerDocumen;\n\n    if (list === void 0) {\n      list = [];\n    }\n\n    var scrollParent = getScrollParent(element);\n    var isBody = scrollParent === ((_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body);\n    var win = getWindow(scrollParent);\n    var target = isBody ? [win].concat(win.visualViewport || [], isScrollParent(scrollParent) ? scrollParent : []) : scrollParent;\n    var updatedList = list.concat(target);\n    return isBody ? updatedList : // $FlowFixMe[incompatible-call]: isBody tells us target will be an HTMLElement here\n    updatedList.concat(listScrollParents(getParentNode(target)));\n  }\n\n  function rectToClientRect(rect) {\n    return Object.assign({}, rect, {\n      left: rect.x,\n      top: rect.y,\n      right: rect.x + rect.width,\n      bottom: rect.y + rect.height\n    });\n  }\n\n  function getInnerBoundingClientRect(element) {\n    var rect = getBoundingClientRect(element);\n    rect.top = rect.top + element.clientTop;\n    rect.left = rect.left + element.clientLeft;\n    rect.bottom = rect.top + element.clientHeight;\n    rect.right = rect.left + element.clientWidth;\n    rect.width = element.clientWidth;\n    rect.height = element.clientHeight;\n    rect.x = rect.left;\n    rect.y = rect.top;\n    return rect;\n  }\n\n  function getClientRectFromMixedType(element, clippingParent) {\n    return clippingParent === viewport ? rectToClientRect(getViewportRect(element)) : isHTMLElement(clippingParent) ? getInnerBoundingClientRect(clippingParent) : rectToClientRect(getDocumentRect(getDocumentElement(element)));\n  } // A \"clipping parent\" is an overflowable container with the characteristic of\n  // clipping (or hiding) overflowing elements with a position different from\n  // `initial`\n\n\n  function getClippingParents(element) {\n    var clippingParents = listScrollParents(getParentNode(element));\n    var canEscapeClipping = ['absolute', 'fixed'].indexOf(getComputedStyle$1(element).position) >= 0;\n    var clipperElement = canEscapeClipping && isHTMLElement(element) ? getOffsetParent(element) : element;\n\n    if (!isElement(clipperElement)) {\n      return [];\n    } // $FlowFixMe[incompatible-return]: https://github.com/facebook/flow/issues/1414\n\n\n    return clippingParents.filter(function (clippingParent) {\n      return isElement(clippingParent) && contains(clippingParent, clipperElement) && getNodeName(clippingParent) !== 'body';\n    });\n  } // Gets the maximum area that the element is visible in due to any number of\n  // clipping parents\n\n\n  function getClippingRect(element, boundary, rootBoundary) {\n    var mainClippingParents = boundary === 'clippingParents' ? getClippingParents(element) : [].concat(boundary);\n    var clippingParents = [].concat(mainClippingParents, [rootBoundary]);\n    var firstClippingParent = clippingParents[0];\n    var clippingRect = clippingParents.reduce(function (accRect, clippingParent) {\n      var rect = getClientRectFromMixedType(element, clippingParent);\n      accRect.top = max(rect.top, accRect.top);\n      accRect.right = min(rect.right, accRect.right);\n      accRect.bottom = min(rect.bottom, accRect.bottom);\n      accRect.left = max(rect.left, accRect.left);\n      return accRect;\n    }, getClientRectFromMixedType(element, firstClippingParent));\n    clippingRect.width = clippingRect.right - clippingRect.left;\n    clippingRect.height = clippingRect.bottom - clippingRect.top;\n    clippingRect.x = clippingRect.left;\n    clippingRect.y = clippingRect.top;\n    return clippingRect;\n  }\n\n  function getVariation(placement) {\n    return placement.split('-')[1];\n  }\n\n  function computeOffsets(_ref) {\n    var reference = _ref.reference,\n        element = _ref.element,\n        placement = _ref.placement;\n    var basePlacement = placement ? getBasePlacement(placement) : null;\n    var variation = placement ? getVariation(placement) : null;\n    var commonX = reference.x + reference.width / 2 - element.width / 2;\n    var commonY = reference.y + reference.height / 2 - element.height / 2;\n    var offsets;\n\n    switch (basePlacement) {\n      case top:\n        offsets = {\n          x: commonX,\n          y: reference.y - element.height\n        };\n        break;\n\n      case bottom:\n        offsets = {\n          x: commonX,\n          y: reference.y + reference.height\n        };\n        break;\n\n      case right:\n        offsets = {\n          x: reference.x + reference.width,\n          y: commonY\n        };\n        break;\n\n      case left:\n        offsets = {\n          x: reference.x - element.width,\n          y: commonY\n        };\n        break;\n\n      default:\n        offsets = {\n          x: reference.x,\n          y: reference.y\n        };\n    }\n\n    var mainAxis = basePlacement ? getMainAxisFromPlacement(basePlacement) : null;\n\n    if (mainAxis != null) {\n      var len = mainAxis === 'y' ? 'height' : 'width';\n\n      switch (variation) {\n        case start:\n          offsets[mainAxis] = offsets[mainAxis] - (reference[len] / 2 - element[len] / 2);\n          break;\n\n        case end:\n          offsets[mainAxis] = offsets[mainAxis] + (reference[len] / 2 - element[len] / 2);\n          break;\n      }\n    }\n\n    return offsets;\n  }\n\n  function detectOverflow(state, options) {\n    if (options === void 0) {\n      options = {};\n    }\n\n    var _options = options,\n        _options$placement = _options.placement,\n        placement = _options$placement === void 0 ? state.placement : _options$placement,\n        _options$boundary = _options.boundary,\n        boundary = _options$boundary === void 0 ? clippingParents : _options$boundary,\n        _options$rootBoundary = _options.rootBoundary,\n        rootBoundary = _options$rootBoundary === void 0 ? viewport : _options$rootBoundary,\n        _options$elementConte = _options.elementContext,\n        elementContext = _options$elementConte === void 0 ? popper : _options$elementConte,\n        _options$altBoundary = _options.altBoundary,\n        altBoundary = _options$altBoundary === void 0 ? false : _options$altBoundary,\n        _options$padding = _options.padding,\n        padding = _options$padding === void 0 ? 0 : _options$padding;\n    var paddingObject = mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));\n    var altContext = elementContext === popper ? reference : popper;\n    var referenceElement = state.elements.reference;\n    var popperRect = state.rects.popper;\n    var element = state.elements[altBoundary ? altContext : elementContext];\n    var clippingClientRect = getClippingRect(isElement(element) ? element : element.contextElement || getDocumentElement(state.elements.popper), boundary, rootBoundary);\n    var referenceClientRect = getBoundingClientRect(referenceElement);\n    var popperOffsets = computeOffsets({\n      reference: referenceClientRect,\n      element: popperRect,\n      strategy: 'absolute',\n      placement: placement\n    });\n    var popperClientRect = rectToClientRect(Object.assign({}, popperRect, popperOffsets));\n    var elementClientRect = elementContext === popper ? popperClientRect : referenceClientRect; // positive = overflowing the clipping rect\n    // 0 or negative = within the clipping rect\n\n    var overflowOffsets = {\n      top: clippingClientRect.top - elementClientRect.top + paddingObject.top,\n      bottom: elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom,\n      left: clippingClientRect.left - elementClientRect.left + paddingObject.left,\n      right: elementClientRect.right - clippingClientRect.right + paddingObject.right\n    };\n    var offsetData = state.modifiersData.offset; // Offsets can be applied only to the popper element\n\n    if (elementContext === popper && offsetData) {\n      var offset = offsetData[placement];\n      Object.keys(overflowOffsets).forEach(function (key) {\n        var multiply = [right, bottom].indexOf(key) >= 0 ? 1 : -1;\n        var axis = [top, bottom].indexOf(key) >= 0 ? 'y' : 'x';\n        overflowOffsets[key] += offset[axis] * multiply;\n      });\n    }\n\n    return overflowOffsets;\n  }\n\n  function computeAutoPlacement(state, options) {\n    if (options === void 0) {\n      options = {};\n    }\n\n    var _options = options,\n        placement = _options.placement,\n        boundary = _options.boundary,\n        rootBoundary = _options.rootBoundary,\n        padding = _options.padding,\n        flipVariations = _options.flipVariations,\n        _options$allowedAutoP = _options.allowedAutoPlacements,\n        allowedAutoPlacements = _options$allowedAutoP === void 0 ? placements : _options$allowedAutoP;\n    var variation = getVariation(placement);\n    var placements$1 = variation ? flipVariations ? variationPlacements : variationPlacements.filter(function (placement) {\n      return getVariation(placement) === variation;\n    }) : basePlacements;\n    var allowedPlacements = placements$1.filter(function (placement) {\n      return allowedAutoPlacements.indexOf(placement) >= 0;\n    });\n\n    if (allowedPlacements.length === 0) {\n      allowedPlacements = placements$1;\n    } // $FlowFixMe[incompatible-type]: Flow seems to have problems with two array unions...\n\n\n    var overflows = allowedPlacements.reduce(function (acc, placement) {\n      acc[placement] = detectOverflow(state, {\n        placement: placement,\n        boundary: boundary,\n        rootBoundary: rootBoundary,\n        padding: padding\n      })[getBasePlacement(placement)];\n      return acc;\n    }, {});\n    return Object.keys(overflows).sort(function (a, b) {\n      return overflows[a] - overflows[b];\n    });\n  }\n\n  function getExpandedFallbackPlacements(placement) {\n    if (getBasePlacement(placement) === auto) {\n      return [];\n    }\n\n    var oppositePlacement = getOppositePlacement(placement);\n    return [getOppositeVariationPlacement(placement), oppositePlacement, getOppositeVariationPlacement(oppositePlacement)];\n  }\n\n  function flip(_ref) {\n    var state = _ref.state,\n        options = _ref.options,\n        name = _ref.name;\n\n    if (state.modifiersData[name]._skip) {\n      return;\n    }\n\n    var _options$mainAxis = options.mainAxis,\n        checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\n        _options$altAxis = options.altAxis,\n        checkAltAxis = _options$altAxis === void 0 ? true : _options$altAxis,\n        specifiedFallbackPlacements = options.fallbackPlacements,\n        padding = options.padding,\n        boundary = options.boundary,\n        rootBoundary = options.rootBoundary,\n        altBoundary = options.altBoundary,\n        _options$flipVariatio = options.flipVariations,\n        flipVariations = _options$flipVariatio === void 0 ? true : _options$flipVariatio,\n        allowedAutoPlacements = options.allowedAutoPlacements;\n    var preferredPlacement = state.options.placement;\n    var basePlacement = getBasePlacement(preferredPlacement);\n    var isBasePlacement = basePlacement === preferredPlacement;\n    var fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipVariations ? [getOppositePlacement(preferredPlacement)] : getExpandedFallbackPlacements(preferredPlacement));\n    var placements = [preferredPlacement].concat(fallbackPlacements).reduce(function (acc, placement) {\n      return acc.concat(getBasePlacement(placement) === auto ? computeAutoPlacement(state, {\n        placement: placement,\n        boundary: boundary,\n        rootBoundary: rootBoundary,\n        padding: padding,\n        flipVariations: flipVariations,\n        allowedAutoPlacements: allowedAutoPlacements\n      }) : placement);\n    }, []);\n    var referenceRect = state.rects.reference;\n    var popperRect = state.rects.popper;\n    var checksMap = new Map();\n    var makeFallbackChecks = true;\n    var firstFittingPlacement = placements[0];\n\n    for (var i = 0; i < placements.length; i++) {\n      var placement = placements[i];\n\n      var _basePlacement = getBasePlacement(placement);\n\n      var isStartVariation = getVariation(placement) === start;\n      var isVertical = [top, bottom].indexOf(_basePlacement) >= 0;\n      var len = isVertical ? 'width' : 'height';\n      var overflow = detectOverflow(state, {\n        placement: placement,\n        boundary: boundary,\n        rootBoundary: rootBoundary,\n        altBoundary: altBoundary,\n        padding: padding\n      });\n      var mainVariationSide = isVertical ? isStartVariation ? right : left : isStartVariation ? bottom : top;\n\n      if (referenceRect[len] > popperRect[len]) {\n        mainVariationSide = getOppositePlacement(mainVariationSide);\n      }\n\n      var altVariationSide = getOppositePlacement(mainVariationSide);\n      var checks = [];\n\n      if (checkMainAxis) {\n        checks.push(overflow[_basePlacement] <= 0);\n      }\n\n      if (checkAltAxis) {\n        checks.push(overflow[mainVariationSide] <= 0, overflow[altVariationSide] <= 0);\n      }\n\n      if (checks.every(function (check) {\n        return check;\n      })) {\n        firstFittingPlacement = placement;\n        makeFallbackChecks = false;\n        break;\n      }\n\n      checksMap.set(placement, checks);\n    }\n\n    if (makeFallbackChecks) {\n      // `2` may be desired in some cases – research later\n      var numberOfChecks = flipVariations ? 3 : 1;\n\n      var _loop = function _loop(_i) {\n        var fittingPlacement = placements.find(function (placement) {\n          var checks = checksMap.get(placement);\n\n          if (checks) {\n            return checks.slice(0, _i).every(function (check) {\n              return check;\n            });\n          }\n        });\n\n        if (fittingPlacement) {\n          firstFittingPlacement = fittingPlacement;\n          return \"break\";\n        }\n      };\n\n      for (var _i = numberOfChecks; _i > 0; _i--) {\n        var _ret = _loop(_i);\n\n        if (_ret === \"break\") break;\n      }\n    }\n\n    if (state.placement !== firstFittingPlacement) {\n      state.modifiersData[name]._skip = true;\n      state.placement = firstFittingPlacement;\n      state.reset = true;\n    }\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  var flip$1 = {\n    name: 'flip',\n    enabled: true,\n    phase: 'main',\n    fn: flip,\n    requiresIfExists: ['offset'],\n    data: {\n      _skip: false\n    }\n  };\n\n  function getSideOffsets(overflow, rect, preventedOffsets) {\n    if (preventedOffsets === void 0) {\n      preventedOffsets = {\n        x: 0,\n        y: 0\n      };\n    }\n\n    return {\n      top: overflow.top - rect.height - preventedOffsets.y,\n      right: overflow.right - rect.width + preventedOffsets.x,\n      bottom: overflow.bottom - rect.height + preventedOffsets.y,\n      left: overflow.left - rect.width - preventedOffsets.x\n    };\n  }\n\n  function isAnySideFullyClipped(overflow) {\n    return [top, right, bottom, left].some(function (side) {\n      return overflow[side] >= 0;\n    });\n  }\n\n  function hide(_ref) {\n    var state = _ref.state,\n        name = _ref.name;\n    var referenceRect = state.rects.reference;\n    var popperRect = state.rects.popper;\n    var preventedOffsets = state.modifiersData.preventOverflow;\n    var referenceOverflow = detectOverflow(state, {\n      elementContext: 'reference'\n    });\n    var popperAltOverflow = detectOverflow(state, {\n      altBoundary: true\n    });\n    var referenceClippingOffsets = getSideOffsets(referenceOverflow, referenceRect);\n    var popperEscapeOffsets = getSideOffsets(popperAltOverflow, popperRect, preventedOffsets);\n    var isReferenceHidden = isAnySideFullyClipped(referenceClippingOffsets);\n    var hasPopperEscaped = isAnySideFullyClipped(popperEscapeOffsets);\n    state.modifiersData[name] = {\n      referenceClippingOffsets: referenceClippingOffsets,\n      popperEscapeOffsets: popperEscapeOffsets,\n      isReferenceHidden: isReferenceHidden,\n      hasPopperEscaped: hasPopperEscaped\n    };\n    state.attributes.popper = Object.assign({}, state.attributes.popper, {\n      'data-popper-reference-hidden': isReferenceHidden,\n      'data-popper-escaped': hasPopperEscaped\n    });\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  var hide$1 = {\n    name: 'hide',\n    enabled: true,\n    phase: 'main',\n    requiresIfExists: ['preventOverflow'],\n    fn: hide\n  };\n\n  function distanceAndSkiddingToXY(placement, rects, offset) {\n    var basePlacement = getBasePlacement(placement);\n    var invertDistance = [left, top].indexOf(basePlacement) >= 0 ? -1 : 1;\n\n    var _ref = typeof offset === 'function' ? offset(Object.assign({}, rects, {\n      placement: placement\n    })) : offset,\n        skidding = _ref[0],\n        distance = _ref[1];\n\n    skidding = skidding || 0;\n    distance = (distance || 0) * invertDistance;\n    return [left, right].indexOf(basePlacement) >= 0 ? {\n      x: distance,\n      y: skidding\n    } : {\n      x: skidding,\n      y: distance\n    };\n  }\n\n  function offset(_ref2) {\n    var state = _ref2.state,\n        options = _ref2.options,\n        name = _ref2.name;\n    var _options$offset = options.offset,\n        offset = _options$offset === void 0 ? [0, 0] : _options$offset;\n    var data = placements.reduce(function (acc, placement) {\n      acc[placement] = distanceAndSkiddingToXY(placement, state.rects, offset);\n      return acc;\n    }, {});\n    var _data$state$placement = data[state.placement],\n        x = _data$state$placement.x,\n        y = _data$state$placement.y;\n\n    if (state.modifiersData.popperOffsets != null) {\n      state.modifiersData.popperOffsets.x += x;\n      state.modifiersData.popperOffsets.y += y;\n    }\n\n    state.modifiersData[name] = data;\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  var offset$1 = {\n    name: 'offset',\n    enabled: true,\n    phase: 'main',\n    requires: ['popperOffsets'],\n    fn: offset\n  };\n\n  function popperOffsets(_ref) {\n    var state = _ref.state,\n        name = _ref.name;\n    // Offsets are the actual position the popper needs to have to be\n    // properly positioned near its reference element\n    // This is the most basic placement, and will be adjusted by\n    // the modifiers in the next step\n    state.modifiersData[name] = computeOffsets({\n      reference: state.rects.reference,\n      element: state.rects.popper,\n      strategy: 'absolute',\n      placement: state.placement\n    });\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  var popperOffsets$1 = {\n    name: 'popperOffsets',\n    enabled: true,\n    phase: 'read',\n    fn: popperOffsets,\n    data: {}\n  };\n\n  function getAltAxis(axis) {\n    return axis === 'x' ? 'y' : 'x';\n  }\n\n  function preventOverflow(_ref) {\n    var state = _ref.state,\n        options = _ref.options,\n        name = _ref.name;\n    var _options$mainAxis = options.mainAxis,\n        checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\n        _options$altAxis = options.altAxis,\n        checkAltAxis = _options$altAxis === void 0 ? false : _options$altAxis,\n        boundary = options.boundary,\n        rootBoundary = options.rootBoundary,\n        altBoundary = options.altBoundary,\n        padding = options.padding,\n        _options$tether = options.tether,\n        tether = _options$tether === void 0 ? true : _options$tether,\n        _options$tetherOffset = options.tetherOffset,\n        tetherOffset = _options$tetherOffset === void 0 ? 0 : _options$tetherOffset;\n    var overflow = detectOverflow(state, {\n      boundary: boundary,\n      rootBoundary: rootBoundary,\n      padding: padding,\n      altBoundary: altBoundary\n    });\n    var basePlacement = getBasePlacement(state.placement);\n    var variation = getVariation(state.placement);\n    var isBasePlacement = !variation;\n    var mainAxis = getMainAxisFromPlacement(basePlacement);\n    var altAxis = getAltAxis(mainAxis);\n    var popperOffsets = state.modifiersData.popperOffsets;\n    var referenceRect = state.rects.reference;\n    var popperRect = state.rects.popper;\n    var tetherOffsetValue = typeof tetherOffset === 'function' ? tetherOffset(Object.assign({}, state.rects, {\n      placement: state.placement\n    })) : tetherOffset;\n    var data = {\n      x: 0,\n      y: 0\n    };\n\n    if (!popperOffsets) {\n      return;\n    }\n\n    if (checkMainAxis || checkAltAxis) {\n      var mainSide = mainAxis === 'y' ? top : left;\n      var altSide = mainAxis === 'y' ? bottom : right;\n      var len = mainAxis === 'y' ? 'height' : 'width';\n      var offset = popperOffsets[mainAxis];\n      var min$1 = popperOffsets[mainAxis] + overflow[mainSide];\n      var max$1 = popperOffsets[mainAxis] - overflow[altSide];\n      var additive = tether ? -popperRect[len] / 2 : 0;\n      var minLen = variation === start ? referenceRect[len] : popperRect[len];\n      var maxLen = variation === start ? -popperRect[len] : -referenceRect[len]; // We need to include the arrow in the calculation so the arrow doesn't go\n      // outside the reference bounds\n\n      var arrowElement = state.elements.arrow;\n      var arrowRect = tether && arrowElement ? getLayoutRect(arrowElement) : {\n        width: 0,\n        height: 0\n      };\n      var arrowPaddingObject = state.modifiersData['arrow#persistent'] ? state.modifiersData['arrow#persistent'].padding : getFreshSideObject();\n      var arrowPaddingMin = arrowPaddingObject[mainSide];\n      var arrowPaddingMax = arrowPaddingObject[altSide]; // If the reference length is smaller than the arrow length, we don't want\n      // to include its full size in the calculation. If the reference is small\n      // and near the edge of a boundary, the popper can overflow even if the\n      // reference is not overflowing as well (e.g. virtual elements with no\n      // width or height)\n\n      var arrowLen = within(0, referenceRect[len], arrowRect[len]);\n      var minOffset = isBasePlacement ? referenceRect[len] / 2 - additive - arrowLen - arrowPaddingMin - tetherOffsetValue : minLen - arrowLen - arrowPaddingMin - tetherOffsetValue;\n      var maxOffset = isBasePlacement ? -referenceRect[len] / 2 + additive + arrowLen + arrowPaddingMax + tetherOffsetValue : maxLen + arrowLen + arrowPaddingMax + tetherOffsetValue;\n      var arrowOffsetParent = state.elements.arrow && getOffsetParent(state.elements.arrow);\n      var clientOffset = arrowOffsetParent ? mainAxis === 'y' ? arrowOffsetParent.clientTop || 0 : arrowOffsetParent.clientLeft || 0 : 0;\n      var offsetModifierValue = state.modifiersData.offset ? state.modifiersData.offset[state.placement][mainAxis] : 0;\n      var tetherMin = popperOffsets[mainAxis] + minOffset - offsetModifierValue - clientOffset;\n      var tetherMax = popperOffsets[mainAxis] + maxOffset - offsetModifierValue;\n\n      if (checkMainAxis) {\n        var preventedOffset = within(tether ? min(min$1, tetherMin) : min$1, offset, tether ? max(max$1, tetherMax) : max$1);\n        popperOffsets[mainAxis] = preventedOffset;\n        data[mainAxis] = preventedOffset - offset;\n      }\n\n      if (checkAltAxis) {\n        var _mainSide = mainAxis === 'x' ? top : left;\n\n        var _altSide = mainAxis === 'x' ? bottom : right;\n\n        var _offset = popperOffsets[altAxis];\n\n        var _min = _offset + overflow[_mainSide];\n\n        var _max = _offset - overflow[_altSide];\n\n        var _preventedOffset = within(tether ? min(_min, tetherMin) : _min, _offset, tether ? max(_max, tetherMax) : _max);\n\n        popperOffsets[altAxis] = _preventedOffset;\n        data[altAxis] = _preventedOffset - _offset;\n      }\n    }\n\n    state.modifiersData[name] = data;\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  var preventOverflow$1 = {\n    name: 'preventOverflow',\n    enabled: true,\n    phase: 'main',\n    fn: preventOverflow,\n    requiresIfExists: ['offset']\n  };\n\n  function getHTMLElementScroll(element) {\n    return {\n      scrollLeft: element.scrollLeft,\n      scrollTop: element.scrollTop\n    };\n  }\n\n  function getNodeScroll(node) {\n    if (node === getWindow(node) || !isHTMLElement(node)) {\n      return getWindowScroll(node);\n    } else {\n      return getHTMLElementScroll(node);\n    }\n  }\n\n  // Composite means it takes into account transforms as well as layout.\n\n  function getCompositeRect(elementOrVirtualElement, offsetParent, isFixed) {\n    if (isFixed === void 0) {\n      isFixed = false;\n    }\n\n    var documentElement = getDocumentElement(offsetParent);\n    var rect = getBoundingClientRect(elementOrVirtualElement);\n    var isOffsetParentAnElement = isHTMLElement(offsetParent);\n    var scroll = {\n      scrollLeft: 0,\n      scrollTop: 0\n    };\n    var offsets = {\n      x: 0,\n      y: 0\n    };\n\n    if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {\n      if (getNodeName(offsetParent) !== 'body' || // https://github.com/popperjs/popper-core/issues/1078\n      isScrollParent(documentElement)) {\n        scroll = getNodeScroll(offsetParent);\n      }\n\n      if (isHTMLElement(offsetParent)) {\n        offsets = getBoundingClientRect(offsetParent);\n        offsets.x += offsetParent.clientLeft;\n        offsets.y += offsetParent.clientTop;\n      } else if (documentElement) {\n        offsets.x = getWindowScrollBarX(documentElement);\n      }\n    }\n\n    return {\n      x: rect.left + scroll.scrollLeft - offsets.x,\n      y: rect.top + scroll.scrollTop - offsets.y,\n      width: rect.width,\n      height: rect.height\n    };\n  }\n\n  function order(modifiers) {\n    var map = new Map();\n    var visited = new Set();\n    var result = [];\n    modifiers.forEach(function (modifier) {\n      map.set(modifier.name, modifier);\n    }); // On visiting object, check for its dependencies and visit them recursively\n\n    function sort(modifier) {\n      visited.add(modifier.name);\n      var requires = [].concat(modifier.requires || [], modifier.requiresIfExists || []);\n      requires.forEach(function (dep) {\n        if (!visited.has(dep)) {\n          var depModifier = map.get(dep);\n\n          if (depModifier) {\n            sort(depModifier);\n          }\n        }\n      });\n      result.push(modifier);\n    }\n\n    modifiers.forEach(function (modifier) {\n      if (!visited.has(modifier.name)) {\n        // check for visited object\n        sort(modifier);\n      }\n    });\n    return result;\n  }\n\n  function orderModifiers(modifiers) {\n    // order based on dependencies\n    var orderedModifiers = order(modifiers); // order based on phase\n\n    return modifierPhases.reduce(function (acc, phase) {\n      return acc.concat(orderedModifiers.filter(function (modifier) {\n        return modifier.phase === phase;\n      }));\n    }, []);\n  }\n\n  function debounce(fn) {\n    var pending;\n    return function () {\n      if (!pending) {\n        pending = new Promise(function (resolve) {\n          Promise.resolve().then(function () {\n            pending = undefined;\n            resolve(fn());\n          });\n        });\n      }\n\n      return pending;\n    };\n  }\n\n  function mergeByName(modifiers) {\n    var merged = modifiers.reduce(function (merged, current) {\n      var existing = merged[current.name];\n      merged[current.name] = existing ? Object.assign({}, existing, current, {\n        options: Object.assign({}, existing.options, current.options),\n        data: Object.assign({}, existing.data, current.data)\n      }) : current;\n      return merged;\n    }, {}); // IE11 does not support Object.values\n\n    return Object.keys(merged).map(function (key) {\n      return merged[key];\n    });\n  }\n\n  var DEFAULT_OPTIONS = {\n    placement: 'bottom',\n    modifiers: [],\n    strategy: 'absolute'\n  };\n\n  function areValidElements() {\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    return !args.some(function (element) {\n      return !(element && typeof element.getBoundingClientRect === 'function');\n    });\n  }\n\n  function popperGenerator(generatorOptions) {\n    if (generatorOptions === void 0) {\n      generatorOptions = {};\n    }\n\n    var _generatorOptions = generatorOptions,\n        _generatorOptions$def = _generatorOptions.defaultModifiers,\n        defaultModifiers = _generatorOptions$def === void 0 ? [] : _generatorOptions$def,\n        _generatorOptions$def2 = _generatorOptions.defaultOptions,\n        defaultOptions = _generatorOptions$def2 === void 0 ? DEFAULT_OPTIONS : _generatorOptions$def2;\n    return function createPopper(reference, popper, options) {\n      if (options === void 0) {\n        options = defaultOptions;\n      }\n\n      var state = {\n        placement: 'bottom',\n        orderedModifiers: [],\n        options: Object.assign({}, DEFAULT_OPTIONS, defaultOptions),\n        modifiersData: {},\n        elements: {\n          reference: reference,\n          popper: popper\n        },\n        attributes: {},\n        styles: {}\n      };\n      var effectCleanupFns = [];\n      var isDestroyed = false;\n      var instance = {\n        state: state,\n        setOptions: function setOptions(options) {\n          cleanupModifierEffects();\n          state.options = Object.assign({}, defaultOptions, state.options, options);\n          state.scrollParents = {\n            reference: isElement(reference) ? listScrollParents(reference) : reference.contextElement ? listScrollParents(reference.contextElement) : [],\n            popper: listScrollParents(popper)\n          }; // Orders the modifiers based on their dependencies and `phase`\n          // properties\n\n          var orderedModifiers = orderModifiers(mergeByName([].concat(defaultModifiers, state.options.modifiers))); // Strip out disabled modifiers\n\n          state.orderedModifiers = orderedModifiers.filter(function (m) {\n            return m.enabled;\n          }); // Validate the provided modifiers so that the consumer will get warned\n\n          runModifierEffects();\n          return instance.update();\n        },\n        // Sync update – it will always be executed, even if not necessary. This\n        // is useful for low frequency updates where sync behavior simplifies the\n        // logic.\n        // For high frequency updates (e.g. `resize` and `scroll` events), always\n        // prefer the async Popper#update method\n        forceUpdate: function forceUpdate() {\n          if (isDestroyed) {\n            return;\n          }\n\n          var _state$elements = state.elements,\n              reference = _state$elements.reference,\n              popper = _state$elements.popper; // Don't proceed if `reference` or `popper` are not valid elements\n          // anymore\n\n          if (!areValidElements(reference, popper)) {\n\n            return;\n          } // Store the reference and popper rects to be read by modifiers\n\n\n          state.rects = {\n            reference: getCompositeRect(reference, getOffsetParent(popper), state.options.strategy === 'fixed'),\n            popper: getLayoutRect(popper)\n          }; // Modifiers have the ability to reset the current update cycle. The\n          // most common use case for this is the `flip` modifier changing the\n          // placement, which then needs to re-run all the modifiers, because the\n          // logic was previously ran for the previous placement and is therefore\n          // stale/incorrect\n\n          state.reset = false;\n          state.placement = state.options.placement; // On each update cycle, the `modifiersData` property for each modifier\n          // is filled with the initial data specified by the modifier. This means\n          // it doesn't persist and is fresh on each update.\n          // To ensure persistent data, use `${name}#persistent`\n\n          state.orderedModifiers.forEach(function (modifier) {\n            return state.modifiersData[modifier.name] = Object.assign({}, modifier.data);\n          });\n\n          for (var index = 0; index < state.orderedModifiers.length; index++) {\n\n            if (state.reset === true) {\n              state.reset = false;\n              index = -1;\n              continue;\n            }\n\n            var _state$orderedModifie = state.orderedModifiers[index],\n                fn = _state$orderedModifie.fn,\n                _state$orderedModifie2 = _state$orderedModifie.options,\n                _options = _state$orderedModifie2 === void 0 ? {} : _state$orderedModifie2,\n                name = _state$orderedModifie.name;\n\n            if (typeof fn === 'function') {\n              state = fn({\n                state: state,\n                options: _options,\n                name: name,\n                instance: instance\n              }) || state;\n            }\n          }\n        },\n        // Async and optimistically optimized update – it will not be executed if\n        // not necessary (debounced to run at most once-per-tick)\n        update: debounce(function () {\n          return new Promise(function (resolve) {\n            instance.forceUpdate();\n            resolve(state);\n          });\n        }),\n        destroy: function destroy() {\n          cleanupModifierEffects();\n          isDestroyed = true;\n        }\n      };\n\n      if (!areValidElements(reference, popper)) {\n\n        return instance;\n      }\n\n      instance.setOptions(options).then(function (state) {\n        if (!isDestroyed && options.onFirstUpdate) {\n          options.onFirstUpdate(state);\n        }\n      }); // Modifiers have the ability to execute arbitrary code before the first\n      // update cycle runs. They will be executed in the same order as the update\n      // cycle. This is useful when a modifier adds some persistent data that\n      // other modifiers need to use, but the modifier is run after the dependent\n      // one.\n\n      function runModifierEffects() {\n        state.orderedModifiers.forEach(function (_ref3) {\n          var name = _ref3.name,\n              _ref3$options = _ref3.options,\n              options = _ref3$options === void 0 ? {} : _ref3$options,\n              effect = _ref3.effect;\n\n          if (typeof effect === 'function') {\n            var cleanupFn = effect({\n              state: state,\n              name: name,\n              instance: instance,\n              options: options\n            });\n\n            var noopFn = function noopFn() {};\n\n            effectCleanupFns.push(cleanupFn || noopFn);\n          }\n        });\n      }\n\n      function cleanupModifierEffects() {\n        effectCleanupFns.forEach(function (fn) {\n          return fn();\n        });\n        effectCleanupFns = [];\n      }\n\n      return instance;\n    };\n  }\n  var createPopper$2 = /*#__PURE__*/popperGenerator(); // eslint-disable-next-line import/no-unused-modules\n\n  var defaultModifiers$1 = [eventListeners, popperOffsets$1, computeStyles$1, applyStyles$1];\n  var createPopper$1 = /*#__PURE__*/popperGenerator({\n    defaultModifiers: defaultModifiers$1\n  }); // eslint-disable-next-line import/no-unused-modules\n\n  var defaultModifiers = [eventListeners, popperOffsets$1, computeStyles$1, applyStyles$1, offset$1, flip$1, preventOverflow$1, arrow$1, hide$1];\n  var createPopper = /*#__PURE__*/popperGenerator({\n    defaultModifiers: defaultModifiers\n  }); // eslint-disable-next-line import/no-unused-modules\n\n  var Popper = /*#__PURE__*/Object.freeze({\n    __proto__: null,\n    popperGenerator: popperGenerator,\n    detectOverflow: detectOverflow,\n    createPopperBase: createPopper$2,\n    createPopper: createPopper,\n    createPopperLite: createPopper$1,\n    top: top,\n    bottom: bottom,\n    right: right,\n    left: left,\n    auto: auto,\n    basePlacements: basePlacements,\n    start: start,\n    end: end,\n    clippingParents: clippingParents,\n    viewport: viewport,\n    popper: popper,\n    reference: reference,\n    variationPlacements: variationPlacements,\n    placements: placements,\n    beforeRead: beforeRead,\n    read: read,\n    afterRead: afterRead,\n    beforeMain: beforeMain,\n    main: main,\n    afterMain: afterMain,\n    beforeWrite: beforeWrite,\n    write: write,\n    afterWrite: afterWrite,\n    modifierPhases: modifierPhases,\n    applyStyles: applyStyles$1,\n    arrow: arrow$1,\n    computeStyles: computeStyles$1,\n    eventListeners: eventListeners,\n    flip: flip$1,\n    hide: hide$1,\n    offset: offset$1,\n    popperOffsets: popperOffsets$1,\n    preventOverflow: preventOverflow$1\n  });\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): dropdown.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$8 = 'dropdown';\n  const DATA_KEY$7 = 'bs.dropdown';\n  const EVENT_KEY$7 = `.${DATA_KEY$7}`;\n  const DATA_API_KEY$4 = '.data-api';\n  const ESCAPE_KEY$2 = 'Escape';\n  const SPACE_KEY = 'Space';\n  const TAB_KEY = 'Tab';\n  const ARROW_UP_KEY = 'ArrowUp';\n  const ARROW_DOWN_KEY = 'ArrowDown';\n  const RIGHT_MOUSE_BUTTON = 2; // MouseEvent.button value for the secondary button, usually the right button\n\n  const REGEXP_KEYDOWN = new RegExp(`${ARROW_UP_KEY}|${ARROW_DOWN_KEY}|${ESCAPE_KEY$2}`);\n  const EVENT_HIDE$4 = `hide${EVENT_KEY$7}`;\n  const EVENT_HIDDEN$4 = `hidden${EVENT_KEY$7}`;\n  const EVENT_SHOW$4 = `show${EVENT_KEY$7}`;\n  const EVENT_SHOWN$4 = `shown${EVENT_KEY$7}`;\n  const EVENT_CLICK = `click${EVENT_KEY$7}`;\n  const EVENT_CLICK_DATA_API$3 = `click${EVENT_KEY$7}${DATA_API_KEY$4}`;\n  const EVENT_KEYDOWN_DATA_API = `keydown${EVENT_KEY$7}${DATA_API_KEY$4}`;\n  const EVENT_KEYUP_DATA_API = `keyup${EVENT_KEY$7}${DATA_API_KEY$4}`;\n  const CLASS_NAME_SHOW$7 = 'show';\n  const CLASS_NAME_DROPUP = 'dropup';\n  const CLASS_NAME_DROPEND = 'dropend';\n  const CLASS_NAME_DROPSTART = 'dropstart';\n  const CLASS_NAME_NAVBAR = 'navbar';\n  const SELECTOR_DATA_TOGGLE$3 = '[data-bs-toggle=\"dropdown\"]';\n  const SELECTOR_MENU = '.dropdown-menu';\n  const SELECTOR_NAVBAR_NAV = '.navbar-nav';\n  const SELECTOR_VISIBLE_ITEMS = '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)';\n  const PLACEMENT_TOP = isRTL() ? 'top-end' : 'top-start';\n  const PLACEMENT_TOPEND = isRTL() ? 'top-start' : 'top-end';\n  const PLACEMENT_BOTTOM = isRTL() ? 'bottom-end' : 'bottom-start';\n  const PLACEMENT_BOTTOMEND = isRTL() ? 'bottom-start' : 'bottom-end';\n  const PLACEMENT_RIGHT = isRTL() ? 'left-start' : 'right-start';\n  const PLACEMENT_LEFT = isRTL() ? 'right-start' : 'left-start';\n  const Default$7 = {\n    offset: [0, 2],\n    boundary: 'clippingParents',\n    reference: 'toggle',\n    display: 'dynamic',\n    popperConfig: null,\n    autoClose: true\n  };\n  const DefaultType$7 = {\n    offset: '(array|string|function)',\n    boundary: '(string|element)',\n    reference: '(string|element|object)',\n    display: 'string',\n    popperConfig: '(null|object|function)',\n    autoClose: '(boolean|string)'\n  };\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Dropdown extends BaseComponent {\n    constructor(element, config) {\n      super(element);\n      this._popper = null;\n      this._config = this._getConfig(config);\n      this._menu = this._getMenuElement();\n      this._inNavbar = this._detectNavbar();\n\n      this._addEventListeners();\n    } // Getters\n\n\n    static get Default() {\n      return Default$7;\n    }\n\n    static get DefaultType() {\n      return DefaultType$7;\n    }\n\n    static get NAME() {\n      return NAME$8;\n    } // Public\n\n\n    toggle() {\n      if (isDisabled(this._element)) {\n        return;\n      }\n\n      const isActive = this._element.classList.contains(CLASS_NAME_SHOW$7);\n\n      if (isActive) {\n        this.hide();\n        return;\n      }\n\n      this.show();\n    }\n\n    show() {\n      if (isDisabled(this._element) || this._menu.classList.contains(CLASS_NAME_SHOW$7)) {\n        return;\n      }\n\n      const parent = Dropdown.getParentFromElement(this._element);\n      const relatedTarget = {\n        relatedTarget: this._element\n      };\n      const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$4, relatedTarget);\n\n      if (showEvent.defaultPrevented) {\n        return;\n      } // Totally disable Popper for Dropdowns in Navbar\n\n\n      if (this._inNavbar) {\n        Manipulator.setDataAttribute(this._menu, 'popper', 'none');\n      } else {\n        if (typeof Popper === 'undefined') {\n          throw new TypeError('Bootstrap\\'s dropdowns require Popper (https://popper.js.org)');\n        }\n\n        let referenceElement = this._element;\n\n        if (this._config.reference === 'parent') {\n          referenceElement = parent;\n        } else if (isElement$1(this._config.reference)) {\n          referenceElement = getElement(this._config.reference);\n        } else if (typeof this._config.reference === 'object') {\n          referenceElement = this._config.reference;\n        }\n\n        const popperConfig = this._getPopperConfig();\n\n        const isDisplayStatic = popperConfig.modifiers.find(modifier => modifier.name === 'applyStyles' && modifier.enabled === false);\n        this._popper = createPopper(referenceElement, this._menu, popperConfig);\n\n        if (isDisplayStatic) {\n          Manipulator.setDataAttribute(this._menu, 'popper', 'static');\n        }\n      } // If this is a touch-enabled device we add extra\n      // empty mouseover listeners to the body's immediate children;\n      // only needed because of broken event delegation on iOS\n      // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n\n\n      if ('ontouchstart' in document.documentElement && !parent.closest(SELECTOR_NAVBAR_NAV)) {\n        [].concat(...document.body.children).forEach(elem => EventHandler.on(elem, 'mouseover', noop));\n      }\n\n      this._element.focus();\n\n      this._element.setAttribute('aria-expanded', true);\n\n      this._menu.classList.toggle(CLASS_NAME_SHOW$7);\n\n      this._element.classList.toggle(CLASS_NAME_SHOW$7);\n\n      EventHandler.trigger(this._element, EVENT_SHOWN$4, relatedTarget);\n    }\n\n    hide() {\n      if (isDisabled(this._element) || !this._menu.classList.contains(CLASS_NAME_SHOW$7)) {\n        return;\n      }\n\n      const relatedTarget = {\n        relatedTarget: this._element\n      };\n\n      this._completeHide(relatedTarget);\n    }\n\n    dispose() {\n      if (this._popper) {\n        this._popper.destroy();\n      }\n\n      super.dispose();\n    }\n\n    update() {\n      this._inNavbar = this._detectNavbar();\n\n      if (this._popper) {\n        this._popper.update();\n      }\n    } // Private\n\n\n    _addEventListeners() {\n      EventHandler.on(this._element, EVENT_CLICK, event => {\n        event.preventDefault();\n        this.toggle();\n      });\n    }\n\n    _completeHide(relatedTarget) {\n      const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$4, relatedTarget);\n\n      if (hideEvent.defaultPrevented) {\n        return;\n      } // If this is a touch-enabled device we remove the extra\n      // empty mouseover listeners we added for iOS support\n\n\n      if ('ontouchstart' in document.documentElement) {\n        [].concat(...document.body.children).forEach(elem => EventHandler.off(elem, 'mouseover', noop));\n      }\n\n      if (this._popper) {\n        this._popper.destroy();\n      }\n\n      this._menu.classList.remove(CLASS_NAME_SHOW$7);\n\n      this._element.classList.remove(CLASS_NAME_SHOW$7);\n\n      this._element.setAttribute('aria-expanded', 'false');\n\n      Manipulator.removeDataAttribute(this._menu, 'popper');\n      EventHandler.trigger(this._element, EVENT_HIDDEN$4, relatedTarget);\n    }\n\n    _getConfig(config) {\n      config = { ...this.constructor.Default,\n        ...Manipulator.getDataAttributes(this._element),\n        ...config\n      };\n      typeCheckConfig(NAME$8, config, this.constructor.DefaultType);\n\n      if (typeof config.reference === 'object' && !isElement$1(config.reference) && typeof config.reference.getBoundingClientRect !== 'function') {\n        // Popper virtual elements require a getBoundingClientRect method\n        throw new TypeError(`${NAME$8.toUpperCase()}: Option \"reference\" provided type \"object\" without a required \"getBoundingClientRect\" method.`);\n      }\n\n      return config;\n    }\n\n    _getMenuElement() {\n      return SelectorEngine.next(this._element, SELECTOR_MENU)[0];\n    }\n\n    _getPlacement() {\n      const parentDropdown = this._element.parentNode;\n\n      if (parentDropdown.classList.contains(CLASS_NAME_DROPEND)) {\n        return PLACEMENT_RIGHT;\n      }\n\n      if (parentDropdown.classList.contains(CLASS_NAME_DROPSTART)) {\n        return PLACEMENT_LEFT;\n      } // We need to trim the value because custom properties can also include spaces\n\n\n      const isEnd = getComputedStyle(this._menu).getPropertyValue('--bs-position').trim() === 'end';\n\n      if (parentDropdown.classList.contains(CLASS_NAME_DROPUP)) {\n        return isEnd ? PLACEMENT_TOPEND : PLACEMENT_TOP;\n      }\n\n      return isEnd ? PLACEMENT_BOTTOMEND : PLACEMENT_BOTTOM;\n    }\n\n    _detectNavbar() {\n      return this._element.closest(`.${CLASS_NAME_NAVBAR}`) !== null;\n    }\n\n    _getOffset() {\n      const {\n        offset\n      } = this._config;\n\n      if (typeof offset === 'string') {\n        return offset.split(',').map(val => Number.parseInt(val, 10));\n      }\n\n      if (typeof offset === 'function') {\n        return popperData => offset(popperData, this._element);\n      }\n\n      return offset;\n    }\n\n    _getPopperConfig() {\n      const defaultBsPopperConfig = {\n        placement: this._getPlacement(),\n        modifiers: [{\n          name: 'preventOverflow',\n          options: {\n            boundary: this._config.boundary\n          }\n        }, {\n          name: 'offset',\n          options: {\n            offset: this._getOffset()\n          }\n        }]\n      }; // Disable Popper if we have a static display\n\n      if (this._config.display === 'static') {\n        defaultBsPopperConfig.modifiers = [{\n          name: 'applyStyles',\n          enabled: false\n        }];\n      }\n\n      return { ...defaultBsPopperConfig,\n        ...(typeof this._config.popperConfig === 'function' ? this._config.popperConfig(defaultBsPopperConfig) : this._config.popperConfig)\n      };\n    }\n\n    _selectMenuItem({\n      key,\n      target\n    }) {\n      const items = SelectorEngine.find(SELECTOR_VISIBLE_ITEMS, this._menu).filter(isVisible);\n\n      if (!items.length) {\n        return;\n      } // if target isn't included in items (e.g. when expanding the dropdown)\n      // allow cycling to get the last item in case key equals ARROW_UP_KEY\n\n\n      getNextActiveElement(items, target, key === ARROW_DOWN_KEY, !items.includes(target)).focus();\n    } // Static\n\n\n    static dropdownInterface(element, config) {\n      const data = Dropdown.getOrCreateInstance(element, config);\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config]();\n      }\n    }\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        Dropdown.dropdownInterface(this, config);\n      });\n    }\n\n    static clearMenus(event) {\n      if (event && (event.button === RIGHT_MOUSE_BUTTON || event.type === 'keyup' && event.key !== TAB_KEY)) {\n        return;\n      }\n\n      const toggles = SelectorEngine.find(SELECTOR_DATA_TOGGLE$3);\n\n      for (let i = 0, len = toggles.length; i < len; i++) {\n        const context = Dropdown.getInstance(toggles[i]);\n\n        if (!context || context._config.autoClose === false) {\n          continue;\n        }\n\n        if (!context._element.classList.contains(CLASS_NAME_SHOW$7)) {\n          continue;\n        }\n\n        const relatedTarget = {\n          relatedTarget: context._element\n        };\n\n        if (event) {\n          const composedPath = event.composedPath();\n          const isMenuTarget = composedPath.includes(context._menu);\n\n          if (composedPath.includes(context._element) || context._config.autoClose === 'inside' && !isMenuTarget || context._config.autoClose === 'outside' && isMenuTarget) {\n            continue;\n          } // Tab navigation through the dropdown menu or events from contained inputs shouldn't close the menu\n\n\n          if (context._menu.contains(event.target) && (event.type === 'keyup' && event.key === TAB_KEY || /input|select|option|textarea|form/i.test(event.target.tagName))) {\n            continue;\n          }\n\n          if (event.type === 'click') {\n            relatedTarget.clickEvent = event;\n          }\n        }\n\n        context._completeHide(relatedTarget);\n      }\n    }\n\n    static getParentFromElement(element) {\n      return getElementFromSelector(element) || element.parentNode;\n    }\n\n    static dataApiKeydownHandler(event) {\n      // If not input/textarea:\n      //  - And not a key in REGEXP_KEYDOWN => not a dropdown command\n      // If input/textarea:\n      //  - If space key => not a dropdown command\n      //  - If key is other than escape\n      //    - If key is not up or down => not a dropdown command\n      //    - If trigger inside the menu => not a dropdown command\n      if (/input|textarea/i.test(event.target.tagName) ? event.key === SPACE_KEY || event.key !== ESCAPE_KEY$2 && (event.key !== ARROW_DOWN_KEY && event.key !== ARROW_UP_KEY || event.target.closest(SELECTOR_MENU)) : !REGEXP_KEYDOWN.test(event.key)) {\n        return;\n      }\n\n      const isActive = this.classList.contains(CLASS_NAME_SHOW$7);\n\n      if (!isActive && event.key === ESCAPE_KEY$2) {\n        return;\n      }\n\n      event.preventDefault();\n      event.stopPropagation();\n\n      if (isDisabled(this)) {\n        return;\n      }\n\n      const getToggleButton = () => this.matches(SELECTOR_DATA_TOGGLE$3) ? this : SelectorEngine.prev(this, SELECTOR_DATA_TOGGLE$3)[0];\n\n      if (event.key === ESCAPE_KEY$2) {\n        getToggleButton().focus();\n        Dropdown.clearMenus();\n        return;\n      }\n\n      if (event.key === ARROW_UP_KEY || event.key === ARROW_DOWN_KEY) {\n        if (!isActive) {\n          getToggleButton().click();\n        }\n\n        Dropdown.getInstance(getToggleButton())._selectMenuItem(event);\n\n        return;\n      }\n\n      if (!isActive || event.key === SPACE_KEY) {\n        Dropdown.clearMenus();\n      }\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_DATA_TOGGLE$3, Dropdown.dataApiKeydownHandler);\n  EventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown.dataApiKeydownHandler);\n  EventHandler.on(document, EVENT_CLICK_DATA_API$3, Dropdown.clearMenus);\n  EventHandler.on(document, EVENT_KEYUP_DATA_API, Dropdown.clearMenus);\n  EventHandler.on(document, EVENT_CLICK_DATA_API$3, SELECTOR_DATA_TOGGLE$3, function (event) {\n    event.preventDefault();\n    Dropdown.dropdownInterface(this);\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Dropdown to jQuery only if jQuery is present\n   */\n\n  defineJQueryPlugin(Dropdown);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): util/scrollBar.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  const SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top';\n  const SELECTOR_STICKY_CONTENT = '.sticky-top';\n\n  class ScrollBarHelper {\n    constructor() {\n      this._element = document.body;\n    }\n\n    getWidth() {\n      // https://developer.mozilla.org/en-US/docs/Web/API/Window/innerWidth#usage_notes\n      const documentWidth = document.documentElement.clientWidth;\n      return Math.abs(window.innerWidth - documentWidth);\n    }\n\n    hide() {\n      const width = this.getWidth();\n\n      this._disableOverFlow(); // give padding to element to balance the hidden scrollbar width\n\n\n      this._setElementAttributes(this._element, 'paddingRight', calculatedValue => calculatedValue + width); // trick: We adjust positive paddingRight and negative marginRight to sticky-top elements to keep showing fullwidth\n\n\n      this._setElementAttributes(SELECTOR_FIXED_CONTENT, 'paddingRight', calculatedValue => calculatedValue + width);\n\n      this._setElementAttributes(SELECTOR_STICKY_CONTENT, 'marginRight', calculatedValue => calculatedValue - width);\n    }\n\n    _disableOverFlow() {\n      this._saveInitialAttribute(this._element, 'overflow');\n\n      this._element.style.overflow = 'hidden';\n    }\n\n    _setElementAttributes(selector, styleProp, callback) {\n      const scrollbarWidth = this.getWidth();\n\n      const manipulationCallBack = element => {\n        if (element !== this._element && window.innerWidth > element.clientWidth + scrollbarWidth) {\n          return;\n        }\n\n        this._saveInitialAttribute(element, styleProp);\n\n        const calculatedValue = window.getComputedStyle(element)[styleProp];\n        element.style[styleProp] = `${callback(Number.parseFloat(calculatedValue))}px`;\n      };\n\n      this._applyManipulationCallback(selector, manipulationCallBack);\n    }\n\n    reset() {\n      this._resetElementAttributes(this._element, 'overflow');\n\n      this._resetElementAttributes(this._element, 'paddingRight');\n\n      this._resetElementAttributes(SELECTOR_FIXED_CONTENT, 'paddingRight');\n\n      this._resetElementAttributes(SELECTOR_STICKY_CONTENT, 'marginRight');\n    }\n\n    _saveInitialAttribute(element, styleProp) {\n      const actualValue = element.style[styleProp];\n\n      if (actualValue) {\n        Manipulator.setDataAttribute(element, styleProp, actualValue);\n      }\n    }\n\n    _resetElementAttributes(selector, styleProp) {\n      const manipulationCallBack = element => {\n        const value = Manipulator.getDataAttribute(element, styleProp);\n\n        if (typeof value === 'undefined') {\n          element.style.removeProperty(styleProp);\n        } else {\n          Manipulator.removeDataAttribute(element, styleProp);\n          element.style[styleProp] = value;\n        }\n      };\n\n      this._applyManipulationCallback(selector, manipulationCallBack);\n    }\n\n    _applyManipulationCallback(selector, callBack) {\n      if (isElement$1(selector)) {\n        callBack(selector);\n      } else {\n        SelectorEngine.find(selector, this._element).forEach(callBack);\n      }\n    }\n\n    isOverflowing() {\n      return this.getWidth() > 0;\n    }\n\n  }\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): util/backdrop.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  const Default$6 = {\n    isVisible: true,\n    // if false, we use the backdrop helper without adding any element to the dom\n    isAnimated: false,\n    rootElement: 'body',\n    // give the choice to place backdrop under different elements\n    clickCallback: null\n  };\n  const DefaultType$6 = {\n    isVisible: 'boolean',\n    isAnimated: 'boolean',\n    rootElement: '(element|string)',\n    clickCallback: '(function|null)'\n  };\n  const NAME$7 = 'backdrop';\n  const CLASS_NAME_BACKDROP = 'modal-backdrop';\n  const CLASS_NAME_FADE$5 = 'fade';\n  const CLASS_NAME_SHOW$6 = 'show';\n  const EVENT_MOUSEDOWN = `mousedown.bs.${NAME$7}`;\n\n  class Backdrop {\n    constructor(config) {\n      this._config = this._getConfig(config);\n      this._isAppended = false;\n      this._element = null;\n    }\n\n    show(callback) {\n      if (!this._config.isVisible) {\n        execute(callback);\n        return;\n      }\n\n      this._append();\n\n      if (this._config.isAnimated) {\n        reflow(this._getElement());\n      }\n\n      this._getElement().classList.add(CLASS_NAME_SHOW$6);\n\n      this._emulateAnimation(() => {\n        execute(callback);\n      });\n    }\n\n    hide(callback) {\n      if (!this._config.isVisible) {\n        execute(callback);\n        return;\n      }\n\n      this._getElement().classList.remove(CLASS_NAME_SHOW$6);\n\n      this._emulateAnimation(() => {\n        this.dispose();\n        execute(callback);\n      });\n    } // Private\n\n\n    _getElement() {\n      if (!this._element) {\n        const backdrop = document.createElement('div');\n        backdrop.className = CLASS_NAME_BACKDROP;\n\n        if (this._config.isAnimated) {\n          backdrop.classList.add(CLASS_NAME_FADE$5);\n        }\n\n        this._element = backdrop;\n      }\n\n      return this._element;\n    }\n\n    _getConfig(config) {\n      config = { ...Default$6,\n        ...(typeof config === 'object' ? config : {})\n      }; // use getElement() with the default \"body\" to get a fresh Element on each instantiation\n\n      config.rootElement = getElement(config.rootElement);\n      typeCheckConfig(NAME$7, config, DefaultType$6);\n      return config;\n    }\n\n    _append() {\n      if (this._isAppended) {\n        return;\n      }\n\n      this._config.rootElement.appendChild(this._getElement());\n\n      EventHandler.on(this._getElement(), EVENT_MOUSEDOWN, () => {\n        execute(this._config.clickCallback);\n      });\n      this._isAppended = true;\n    }\n\n    dispose() {\n      if (!this._isAppended) {\n        return;\n      }\n\n      EventHandler.off(this._element, EVENT_MOUSEDOWN);\n\n      this._element.remove();\n\n      this._isAppended = false;\n    }\n\n    _emulateAnimation(callback) {\n      executeAfterTransition(callback, this._getElement(), this._config.isAnimated);\n    }\n\n  }\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): modal.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$6 = 'modal';\n  const DATA_KEY$6 = 'bs.modal';\n  const EVENT_KEY$6 = `.${DATA_KEY$6}`;\n  const DATA_API_KEY$3 = '.data-api';\n  const ESCAPE_KEY$1 = 'Escape';\n  const Default$5 = {\n    backdrop: true,\n    keyboard: true,\n    focus: true\n  };\n  const DefaultType$5 = {\n    backdrop: '(boolean|string)',\n    keyboard: 'boolean',\n    focus: 'boolean'\n  };\n  const EVENT_HIDE$3 = `hide${EVENT_KEY$6}`;\n  const EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY$6}`;\n  const EVENT_HIDDEN$3 = `hidden${EVENT_KEY$6}`;\n  const EVENT_SHOW$3 = `show${EVENT_KEY$6}`;\n  const EVENT_SHOWN$3 = `shown${EVENT_KEY$6}`;\n  const EVENT_FOCUSIN$2 = `focusin${EVENT_KEY$6}`;\n  const EVENT_RESIZE = `resize${EVENT_KEY$6}`;\n  const EVENT_CLICK_DISMISS$2 = `click.dismiss${EVENT_KEY$6}`;\n  const EVENT_KEYDOWN_DISMISS$1 = `keydown.dismiss${EVENT_KEY$6}`;\n  const EVENT_MOUSEUP_DISMISS = `mouseup.dismiss${EVENT_KEY$6}`;\n  const EVENT_MOUSEDOWN_DISMISS = `mousedown.dismiss${EVENT_KEY$6}`;\n  const EVENT_CLICK_DATA_API$2 = `click${EVENT_KEY$6}${DATA_API_KEY$3}`;\n  const CLASS_NAME_OPEN = 'modal-open';\n  const CLASS_NAME_FADE$4 = 'fade';\n  const CLASS_NAME_SHOW$5 = 'show';\n  const CLASS_NAME_STATIC = 'modal-static';\n  const SELECTOR_DIALOG = '.modal-dialog';\n  const SELECTOR_MODAL_BODY = '.modal-body';\n  const SELECTOR_DATA_TOGGLE$2 = '[data-bs-toggle=\"modal\"]';\n  const SELECTOR_DATA_DISMISS$2 = '[data-bs-dismiss=\"modal\"]';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Modal extends BaseComponent {\n    constructor(element, config) {\n      super(element);\n      this._config = this._getConfig(config);\n      this._dialog = SelectorEngine.findOne(SELECTOR_DIALOG, this._element);\n      this._backdrop = this._initializeBackDrop();\n      this._isShown = false;\n      this._ignoreBackdropClick = false;\n      this._isTransitioning = false;\n      this._scrollBar = new ScrollBarHelper();\n    } // Getters\n\n\n    static get Default() {\n      return Default$5;\n    }\n\n    static get NAME() {\n      return NAME$6;\n    } // Public\n\n\n    toggle(relatedTarget) {\n      return this._isShown ? this.hide() : this.show(relatedTarget);\n    }\n\n    show(relatedTarget) {\n      if (this._isShown || this._isTransitioning) {\n        return;\n      }\n\n      const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$3, {\n        relatedTarget\n      });\n\n      if (showEvent.defaultPrevented) {\n        return;\n      }\n\n      this._isShown = true;\n\n      if (this._isAnimated()) {\n        this._isTransitioning = true;\n      }\n\n      this._scrollBar.hide();\n\n      document.body.classList.add(CLASS_NAME_OPEN);\n\n      this._adjustDialog();\n\n      this._setEscapeEvent();\n\n      this._setResizeEvent();\n\n      EventHandler.on(this._element, EVENT_CLICK_DISMISS$2, SELECTOR_DATA_DISMISS$2, event => this.hide(event));\n      EventHandler.on(this._dialog, EVENT_MOUSEDOWN_DISMISS, () => {\n        EventHandler.one(this._element, EVENT_MOUSEUP_DISMISS, event => {\n          if (event.target === this._element) {\n            this._ignoreBackdropClick = true;\n          }\n        });\n      });\n\n      this._showBackdrop(() => this._showElement(relatedTarget));\n    }\n\n    hide(event) {\n      if (event && ['A', 'AREA'].includes(event.target.tagName)) {\n        event.preventDefault();\n      }\n\n      if (!this._isShown || this._isTransitioning) {\n        return;\n      }\n\n      const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$3);\n\n      if (hideEvent.defaultPrevented) {\n        return;\n      }\n\n      this._isShown = false;\n\n      const isAnimated = this._isAnimated();\n\n      if (isAnimated) {\n        this._isTransitioning = true;\n      }\n\n      this._setEscapeEvent();\n\n      this._setResizeEvent();\n\n      EventHandler.off(document, EVENT_FOCUSIN$2);\n\n      this._element.classList.remove(CLASS_NAME_SHOW$5);\n\n      EventHandler.off(this._element, EVENT_CLICK_DISMISS$2);\n      EventHandler.off(this._dialog, EVENT_MOUSEDOWN_DISMISS);\n\n      this._queueCallback(() => this._hideModal(), this._element, isAnimated);\n    }\n\n    dispose() {\n      [window, this._dialog].forEach(htmlElement => EventHandler.off(htmlElement, EVENT_KEY$6));\n\n      this._backdrop.dispose();\n\n      super.dispose();\n      /**\n       * `document` has 2 events `EVENT_FOCUSIN` and `EVENT_CLICK_DATA_API`\n       * Do not move `document` in `htmlElements` array\n       * It will remove `EVENT_CLICK_DATA_API` event that should remain\n       */\n\n      EventHandler.off(document, EVENT_FOCUSIN$2);\n    }\n\n    handleUpdate() {\n      this._adjustDialog();\n    } // Private\n\n\n    _initializeBackDrop() {\n      return new Backdrop({\n        isVisible: Boolean(this._config.backdrop),\n        // 'static' option will be translated to true, and booleans will keep their value\n        isAnimated: this._isAnimated()\n      });\n    }\n\n    _getConfig(config) {\n      config = { ...Default$5,\n        ...Manipulator.getDataAttributes(this._element),\n        ...(typeof config === 'object' ? config : {})\n      };\n      typeCheckConfig(NAME$6, config, DefaultType$5);\n      return config;\n    }\n\n    _showElement(relatedTarget) {\n      const isAnimated = this._isAnimated();\n\n      const modalBody = SelectorEngine.findOne(SELECTOR_MODAL_BODY, this._dialog);\n\n      if (!this._element.parentNode || this._element.parentNode.nodeType !== Node.ELEMENT_NODE) {\n        // Don't move modal's DOM position\n        document.body.appendChild(this._element);\n      }\n\n      this._element.style.display = 'block';\n\n      this._element.removeAttribute('aria-hidden');\n\n      this._element.setAttribute('aria-modal', true);\n\n      this._element.setAttribute('role', 'dialog');\n\n      this._element.scrollTop = 0;\n\n      if (modalBody) {\n        modalBody.scrollTop = 0;\n      }\n\n      if (isAnimated) {\n        reflow(this._element);\n      }\n\n      this._element.classList.add(CLASS_NAME_SHOW$5);\n\n      if (this._config.focus) {\n        this._enforceFocus();\n      }\n\n      const transitionComplete = () => {\n        if (this._config.focus) {\n          this._element.focus();\n        }\n\n        this._isTransitioning = false;\n        EventHandler.trigger(this._element, EVENT_SHOWN$3, {\n          relatedTarget\n        });\n      };\n\n      this._queueCallback(transitionComplete, this._dialog, isAnimated);\n    }\n\n    _enforceFocus() {\n      EventHandler.off(document, EVENT_FOCUSIN$2); // guard against infinite focus loop\n\n      EventHandler.on(document, EVENT_FOCUSIN$2, event => {\n        if (document !== event.target && this._element !== event.target && !this._element.contains(event.target)) {\n          this._element.focus();\n        }\n      });\n    }\n\n    _setEscapeEvent() {\n      if (this._isShown) {\n        EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS$1, event => {\n          if (this._config.keyboard && event.key === ESCAPE_KEY$1) {\n            event.preventDefault();\n            this.hide();\n          } else if (!this._config.keyboard && event.key === ESCAPE_KEY$1) {\n            this._triggerBackdropTransition();\n          }\n        });\n      } else {\n        EventHandler.off(this._element, EVENT_KEYDOWN_DISMISS$1);\n      }\n    }\n\n    _setResizeEvent() {\n      if (this._isShown) {\n        EventHandler.on(window, EVENT_RESIZE, () => this._adjustDialog());\n      } else {\n        EventHandler.off(window, EVENT_RESIZE);\n      }\n    }\n\n    _hideModal() {\n      this._element.style.display = 'none';\n\n      this._element.setAttribute('aria-hidden', true);\n\n      this._element.removeAttribute('aria-modal');\n\n      this._element.removeAttribute('role');\n\n      this._isTransitioning = false;\n\n      this._backdrop.hide(() => {\n        document.body.classList.remove(CLASS_NAME_OPEN);\n\n        this._resetAdjustments();\n\n        this._scrollBar.reset();\n\n        EventHandler.trigger(this._element, EVENT_HIDDEN$3);\n      });\n    }\n\n    _showBackdrop(callback) {\n      EventHandler.on(this._element, EVENT_CLICK_DISMISS$2, event => {\n        if (this._ignoreBackdropClick) {\n          this._ignoreBackdropClick = false;\n          return;\n        }\n\n        if (event.target !== event.currentTarget) {\n          return;\n        }\n\n        if (this._config.backdrop === true) {\n          this.hide();\n        } else if (this._config.backdrop === 'static') {\n          this._triggerBackdropTransition();\n        }\n      });\n\n      this._backdrop.show(callback);\n    }\n\n    _isAnimated() {\n      return this._element.classList.contains(CLASS_NAME_FADE$4);\n    }\n\n    _triggerBackdropTransition() {\n      const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED);\n\n      if (hideEvent.defaultPrevented) {\n        return;\n      }\n\n      const {\n        classList,\n        scrollHeight,\n        style\n      } = this._element;\n      const isModalOverflowing = scrollHeight > document.documentElement.clientHeight; // return if the following background transition hasn't yet completed\n\n      if (!isModalOverflowing && style.overflowY === 'hidden' || classList.contains(CLASS_NAME_STATIC)) {\n        return;\n      }\n\n      if (!isModalOverflowing) {\n        style.overflowY = 'hidden';\n      }\n\n      classList.add(CLASS_NAME_STATIC);\n\n      this._queueCallback(() => {\n        classList.remove(CLASS_NAME_STATIC);\n\n        if (!isModalOverflowing) {\n          this._queueCallback(() => {\n            style.overflowY = '';\n          }, this._dialog);\n        }\n      }, this._dialog);\n\n      this._element.focus();\n    } // ----------------------------------------------------------------------\n    // the following methods are used to handle overflowing modals\n    // ----------------------------------------------------------------------\n\n\n    _adjustDialog() {\n      const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;\n\n      const scrollbarWidth = this._scrollBar.getWidth();\n\n      const isBodyOverflowing = scrollbarWidth > 0;\n\n      if (!isBodyOverflowing && isModalOverflowing && !isRTL() || isBodyOverflowing && !isModalOverflowing && isRTL()) {\n        this._element.style.paddingLeft = `${scrollbarWidth}px`;\n      }\n\n      if (isBodyOverflowing && !isModalOverflowing && !isRTL() || !isBodyOverflowing && isModalOverflowing && isRTL()) {\n        this._element.style.paddingRight = `${scrollbarWidth}px`;\n      }\n    }\n\n    _resetAdjustments() {\n      this._element.style.paddingLeft = '';\n      this._element.style.paddingRight = '';\n    } // Static\n\n\n    static jQueryInterface(config, relatedTarget) {\n      return this.each(function () {\n        const data = Modal.getOrCreateInstance(this, config);\n\n        if (typeof config !== 'string') {\n          return;\n        }\n\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config](relatedTarget);\n      });\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(document, EVENT_CLICK_DATA_API$2, SELECTOR_DATA_TOGGLE$2, function (event) {\n    const target = getElementFromSelector(this);\n\n    if (['A', 'AREA'].includes(this.tagName)) {\n      event.preventDefault();\n    }\n\n    EventHandler.one(target, EVENT_SHOW$3, showEvent => {\n      if (showEvent.defaultPrevented) {\n        // only register focus restorer if modal will actually get shown\n        return;\n      }\n\n      EventHandler.one(target, EVENT_HIDDEN$3, () => {\n        if (isVisible(this)) {\n          this.focus();\n        }\n      });\n    });\n    const data = Modal.getOrCreateInstance(target);\n    data.toggle(this);\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Modal to jQuery only if jQuery is present\n   */\n\n  defineJQueryPlugin(Modal);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): offcanvas.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$5 = 'offcanvas';\n  const DATA_KEY$5 = 'bs.offcanvas';\n  const EVENT_KEY$5 = `.${DATA_KEY$5}`;\n  const DATA_API_KEY$2 = '.data-api';\n  const EVENT_LOAD_DATA_API$1 = `load${EVENT_KEY$5}${DATA_API_KEY$2}`;\n  const ESCAPE_KEY = 'Escape';\n  const Default$4 = {\n    backdrop: true,\n    keyboard: true,\n    scroll: false\n  };\n  const DefaultType$4 = {\n    backdrop: 'boolean',\n    keyboard: 'boolean',\n    scroll: 'boolean'\n  };\n  const CLASS_NAME_SHOW$4 = 'show';\n  const OPEN_SELECTOR = '.offcanvas.show';\n  const EVENT_SHOW$2 = `show${EVENT_KEY$5}`;\n  const EVENT_SHOWN$2 = `shown${EVENT_KEY$5}`;\n  const EVENT_HIDE$2 = `hide${EVENT_KEY$5}`;\n  const EVENT_HIDDEN$2 = `hidden${EVENT_KEY$5}`;\n  const EVENT_FOCUSIN$1 = `focusin${EVENT_KEY$5}`;\n  const EVENT_CLICK_DATA_API$1 = `click${EVENT_KEY$5}${DATA_API_KEY$2}`;\n  const EVENT_CLICK_DISMISS$1 = `click.dismiss${EVENT_KEY$5}`;\n  const EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY$5}`;\n  const SELECTOR_DATA_DISMISS$1 = '[data-bs-dismiss=\"offcanvas\"]';\n  const SELECTOR_DATA_TOGGLE$1 = '[data-bs-toggle=\"offcanvas\"]';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Offcanvas extends BaseComponent {\n    constructor(element, config) {\n      super(element);\n      this._config = this._getConfig(config);\n      this._isShown = false;\n      this._backdrop = this._initializeBackDrop();\n\n      this._addEventListeners();\n    } // Getters\n\n\n    static get NAME() {\n      return NAME$5;\n    }\n\n    static get Default() {\n      return Default$4;\n    } // Public\n\n\n    toggle(relatedTarget) {\n      return this._isShown ? this.hide() : this.show(relatedTarget);\n    }\n\n    show(relatedTarget) {\n      if (this._isShown) {\n        return;\n      }\n\n      const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$2, {\n        relatedTarget\n      });\n\n      if (showEvent.defaultPrevented) {\n        return;\n      }\n\n      this._isShown = true;\n      this._element.style.visibility = 'visible';\n\n      this._backdrop.show();\n\n      if (!this._config.scroll) {\n        new ScrollBarHelper().hide();\n\n        this._enforceFocusOnElement(this._element);\n      }\n\n      this._element.removeAttribute('aria-hidden');\n\n      this._element.setAttribute('aria-modal', true);\n\n      this._element.setAttribute('role', 'dialog');\n\n      this._element.classList.add(CLASS_NAME_SHOW$4);\n\n      const completeCallBack = () => {\n        EventHandler.trigger(this._element, EVENT_SHOWN$2, {\n          relatedTarget\n        });\n      };\n\n      this._queueCallback(completeCallBack, this._element, true);\n    }\n\n    hide() {\n      if (!this._isShown) {\n        return;\n      }\n\n      const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$2);\n\n      if (hideEvent.defaultPrevented) {\n        return;\n      }\n\n      EventHandler.off(document, EVENT_FOCUSIN$1);\n\n      this._element.blur();\n\n      this._isShown = false;\n\n      this._element.classList.remove(CLASS_NAME_SHOW$4);\n\n      this._backdrop.hide();\n\n      const completeCallback = () => {\n        this._element.setAttribute('aria-hidden', true);\n\n        this._element.removeAttribute('aria-modal');\n\n        this._element.removeAttribute('role');\n\n        this._element.style.visibility = 'hidden';\n\n        if (!this._config.scroll) {\n          new ScrollBarHelper().reset();\n        }\n\n        EventHandler.trigger(this._element, EVENT_HIDDEN$2);\n      };\n\n      this._queueCallback(completeCallback, this._element, true);\n    }\n\n    dispose() {\n      this._backdrop.dispose();\n\n      super.dispose();\n      EventHandler.off(document, EVENT_FOCUSIN$1);\n    } // Private\n\n\n    _getConfig(config) {\n      config = { ...Default$4,\n        ...Manipulator.getDataAttributes(this._element),\n        ...(typeof config === 'object' ? config : {})\n      };\n      typeCheckConfig(NAME$5, config, DefaultType$4);\n      return config;\n    }\n\n    _initializeBackDrop() {\n      return new Backdrop({\n        isVisible: this._config.backdrop,\n        isAnimated: true,\n        rootElement: this._element.parentNode,\n        clickCallback: () => this.hide()\n      });\n    }\n\n    _enforceFocusOnElement(element) {\n      EventHandler.off(document, EVENT_FOCUSIN$1); // guard against infinite focus loop\n\n      EventHandler.on(document, EVENT_FOCUSIN$1, event => {\n        if (document !== event.target && element !== event.target && !element.contains(event.target)) {\n          element.focus();\n        }\n      });\n      element.focus();\n    }\n\n    _addEventListeners() {\n      EventHandler.on(this._element, EVENT_CLICK_DISMISS$1, SELECTOR_DATA_DISMISS$1, () => this.hide());\n      EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS, event => {\n        if (this._config.keyboard && event.key === ESCAPE_KEY) {\n          this.hide();\n        }\n      });\n    } // Static\n\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = Offcanvas.getOrCreateInstance(this, config);\n\n        if (typeof config !== 'string') {\n          return;\n        }\n\n        if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config](this);\n      });\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(document, EVENT_CLICK_DATA_API$1, SELECTOR_DATA_TOGGLE$1, function (event) {\n    const target = getElementFromSelector(this);\n\n    if (['A', 'AREA'].includes(this.tagName)) {\n      event.preventDefault();\n    }\n\n    if (isDisabled(this)) {\n      return;\n    }\n\n    EventHandler.one(target, EVENT_HIDDEN$2, () => {\n      // focus on trigger when it is closed\n      if (isVisible(this)) {\n        this.focus();\n      }\n    }); // avoid conflict when clicking a toggler of an offcanvas, while another is open\n\n    const allReadyOpen = SelectorEngine.findOne(OPEN_SELECTOR);\n\n    if (allReadyOpen && allReadyOpen !== target) {\n      Offcanvas.getInstance(allReadyOpen).hide();\n    }\n\n    const data = Offcanvas.getOrCreateInstance(target);\n    data.toggle(this);\n  });\n  EventHandler.on(window, EVENT_LOAD_DATA_API$1, () => SelectorEngine.find(OPEN_SELECTOR).forEach(el => Offcanvas.getOrCreateInstance(el).show()));\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   */\n\n  defineJQueryPlugin(Offcanvas);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): util/sanitizer.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  const uriAttrs = new Set(['background', 'cite', 'href', 'itemtype', 'longdesc', 'poster', 'src', 'xlink:href']);\n  const ARIA_ATTRIBUTE_PATTERN = /^aria-[\\w-]*$/i;\n  /**\n   * A pattern that recognizes a commonly useful subset of URLs that are safe.\n   *\n   * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts\n   */\n\n  const SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file):|[^#&/:?]*(?:[#/?]|$))/i;\n  /**\n   * A pattern that matches safe data URLs. Only matches image, video and audio types.\n   *\n   * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts\n   */\n\n  const DATA_URL_PATTERN = /^data:(?:image\\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\\/(?:mpeg|mp4|ogg|webm)|audio\\/(?:mp3|oga|ogg|opus));base64,[\\d+/a-z]+=*$/i;\n\n  const allowedAttribute = (attr, allowedAttributeList) => {\n    const attrName = attr.nodeName.toLowerCase();\n\n    if (allowedAttributeList.includes(attrName)) {\n      if (uriAttrs.has(attrName)) {\n        return Boolean(SAFE_URL_PATTERN.test(attr.nodeValue) || DATA_URL_PATTERN.test(attr.nodeValue));\n      }\n\n      return true;\n    }\n\n    const regExp = allowedAttributeList.filter(attrRegex => attrRegex instanceof RegExp); // Check if a regular expression validates the attribute.\n\n    for (let i = 0, len = regExp.length; i < len; i++) {\n      if (regExp[i].test(attrName)) {\n        return true;\n      }\n    }\n\n    return false;\n  };\n\n  const DefaultAllowlist = {\n    // Global attributes allowed on any supplied element below.\n    '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],\n    a: ['target', 'href', 'title', 'rel'],\n    area: [],\n    b: [],\n    br: [],\n    col: [],\n    code: [],\n    div: [],\n    em: [],\n    hr: [],\n    h1: [],\n    h2: [],\n    h3: [],\n    h4: [],\n    h5: [],\n    h6: [],\n    i: [],\n    img: ['src', 'srcset', 'alt', 'title', 'width', 'height'],\n    li: [],\n    ol: [],\n    p: [],\n    pre: [],\n    s: [],\n    small: [],\n    span: [],\n    sub: [],\n    sup: [],\n    strong: [],\n    u: [],\n    ul: []\n  };\n  function sanitizeHtml(unsafeHtml, allowList, sanitizeFn) {\n    if (!unsafeHtml.length) {\n      return unsafeHtml;\n    }\n\n    if (sanitizeFn && typeof sanitizeFn === 'function') {\n      return sanitizeFn(unsafeHtml);\n    }\n\n    const domParser = new window.DOMParser();\n    const createdDocument = domParser.parseFromString(unsafeHtml, 'text/html');\n    const allowlistKeys = Object.keys(allowList);\n    const elements = [].concat(...createdDocument.body.querySelectorAll('*'));\n\n    for (let i = 0, len = elements.length; i < len; i++) {\n      const el = elements[i];\n      const elName = el.nodeName.toLowerCase();\n\n      if (!allowlistKeys.includes(elName)) {\n        el.remove();\n        continue;\n      }\n\n      const attributeList = [].concat(...el.attributes);\n      const allowedAttributes = [].concat(allowList['*'] || [], allowList[elName] || []);\n      attributeList.forEach(attr => {\n        if (!allowedAttribute(attr, allowedAttributes)) {\n          el.removeAttribute(attr.nodeName);\n        }\n      });\n    }\n\n    return createdDocument.body.innerHTML;\n  }\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): tooltip.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$4 = 'tooltip';\n  const DATA_KEY$4 = 'bs.tooltip';\n  const EVENT_KEY$4 = `.${DATA_KEY$4}`;\n  const CLASS_PREFIX$1 = 'bs-tooltip';\n  const BSCLS_PREFIX_REGEX$1 = new RegExp(`(^|\\\\s)${CLASS_PREFIX$1}\\\\S+`, 'g');\n  const DISALLOWED_ATTRIBUTES = new Set(['sanitize', 'allowList', 'sanitizeFn']);\n  const DefaultType$3 = {\n    animation: 'boolean',\n    template: 'string',\n    title: '(string|element|function)',\n    trigger: 'string',\n    delay: '(number|object)',\n    html: 'boolean',\n    selector: '(string|boolean)',\n    placement: '(string|function)',\n    offset: '(array|string|function)',\n    container: '(string|element|boolean)',\n    fallbackPlacements: 'array',\n    boundary: '(string|element)',\n    customClass: '(string|function)',\n    sanitize: 'boolean',\n    sanitizeFn: '(null|function)',\n    allowList: 'object',\n    popperConfig: '(null|object|function)'\n  };\n  const AttachmentMap = {\n    AUTO: 'auto',\n    TOP: 'top',\n    RIGHT: isRTL() ? 'left' : 'right',\n    BOTTOM: 'bottom',\n    LEFT: isRTL() ? 'right' : 'left'\n  };\n  const Default$3 = {\n    animation: true,\n    template: '<div class=\"tooltip\" role=\"tooltip\">' + '<div class=\"tooltip-arrow\"></div>' + '<div class=\"tooltip-inner\"></div>' + '</div>',\n    trigger: 'hover focus',\n    title: '',\n    delay: 0,\n    html: false,\n    selector: false,\n    placement: 'top',\n    offset: [0, 0],\n    container: false,\n    fallbackPlacements: ['top', 'right', 'bottom', 'left'],\n    boundary: 'clippingParents',\n    customClass: '',\n    sanitize: true,\n    sanitizeFn: null,\n    allowList: DefaultAllowlist,\n    popperConfig: null\n  };\n  const Event$2 = {\n    HIDE: `hide${EVENT_KEY$4}`,\n    HIDDEN: `hidden${EVENT_KEY$4}`,\n    SHOW: `show${EVENT_KEY$4}`,\n    SHOWN: `shown${EVENT_KEY$4}`,\n    INSERTED: `inserted${EVENT_KEY$4}`,\n    CLICK: `click${EVENT_KEY$4}`,\n    FOCUSIN: `focusin${EVENT_KEY$4}`,\n    FOCUSOUT: `focusout${EVENT_KEY$4}`,\n    MOUSEENTER: `mouseenter${EVENT_KEY$4}`,\n    MOUSELEAVE: `mouseleave${EVENT_KEY$4}`\n  };\n  const CLASS_NAME_FADE$3 = 'fade';\n  const CLASS_NAME_MODAL = 'modal';\n  const CLASS_NAME_SHOW$3 = 'show';\n  const HOVER_STATE_SHOW = 'show';\n  const HOVER_STATE_OUT = 'out';\n  const SELECTOR_TOOLTIP_INNER = '.tooltip-inner';\n  const TRIGGER_HOVER = 'hover';\n  const TRIGGER_FOCUS = 'focus';\n  const TRIGGER_CLICK = 'click';\n  const TRIGGER_MANUAL = 'manual';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Tooltip extends BaseComponent {\n    constructor(element, config) {\n      if (typeof Popper === 'undefined') {\n        throw new TypeError('Bootstrap\\'s tooltips require Popper (https://popper.js.org)');\n      }\n\n      super(element); // private\n\n      this._isEnabled = true;\n      this._timeout = 0;\n      this._hoverState = '';\n      this._activeTrigger = {};\n      this._popper = null; // Protected\n\n      this._config = this._getConfig(config);\n      this.tip = null;\n\n      this._setListeners();\n    } // Getters\n\n\n    static get Default() {\n      return Default$3;\n    }\n\n    static get NAME() {\n      return NAME$4;\n    }\n\n    static get Event() {\n      return Event$2;\n    }\n\n    static get DefaultType() {\n      return DefaultType$3;\n    } // Public\n\n\n    enable() {\n      this._isEnabled = true;\n    }\n\n    disable() {\n      this._isEnabled = false;\n    }\n\n    toggleEnabled() {\n      this._isEnabled = !this._isEnabled;\n    }\n\n    toggle(event) {\n      if (!this._isEnabled) {\n        return;\n      }\n\n      if (event) {\n        const context = this._initializeOnDelegatedTarget(event);\n\n        context._activeTrigger.click = !context._activeTrigger.click;\n\n        if (context._isWithActiveTrigger()) {\n          context._enter(null, context);\n        } else {\n          context._leave(null, context);\n        }\n      } else {\n        if (this.getTipElement().classList.contains(CLASS_NAME_SHOW$3)) {\n          this._leave(null, this);\n\n          return;\n        }\n\n        this._enter(null, this);\n      }\n    }\n\n    dispose() {\n      clearTimeout(this._timeout);\n      EventHandler.off(this._element.closest(`.${CLASS_NAME_MODAL}`), 'hide.bs.modal', this._hideModalHandler);\n\n      if (this.tip) {\n        this.tip.remove();\n      }\n\n      if (this._popper) {\n        this._popper.destroy();\n      }\n\n      super.dispose();\n    }\n\n    show() {\n      if (this._element.style.display === 'none') {\n        throw new Error('Please use show on visible elements');\n      }\n\n      if (!(this.isWithContent() && this._isEnabled)) {\n        return;\n      }\n\n      const showEvent = EventHandler.trigger(this._element, this.constructor.Event.SHOW);\n      const shadowRoot = findShadowRoot(this._element);\n      const isInTheDom = shadowRoot === null ? this._element.ownerDocument.documentElement.contains(this._element) : shadowRoot.contains(this._element);\n\n      if (showEvent.defaultPrevented || !isInTheDom) {\n        return;\n      }\n\n      const tip = this.getTipElement();\n      const tipId = getUID(this.constructor.NAME);\n      tip.setAttribute('id', tipId);\n\n      this._element.setAttribute('aria-describedby', tipId);\n\n      this.setContent();\n\n      if (this._config.animation) {\n        tip.classList.add(CLASS_NAME_FADE$3);\n      }\n\n      const placement = typeof this._config.placement === 'function' ? this._config.placement.call(this, tip, this._element) : this._config.placement;\n\n      const attachment = this._getAttachment(placement);\n\n      this._addAttachmentClass(attachment);\n\n      const {\n        container\n      } = this._config;\n      Data.set(tip, this.constructor.DATA_KEY, this);\n\n      if (!this._element.ownerDocument.documentElement.contains(this.tip)) {\n        container.appendChild(tip);\n        EventHandler.trigger(this._element, this.constructor.Event.INSERTED);\n      }\n\n      if (this._popper) {\n        this._popper.update();\n      } else {\n        this._popper = createPopper(this._element, tip, this._getPopperConfig(attachment));\n      }\n\n      tip.classList.add(CLASS_NAME_SHOW$3);\n      const customClass = typeof this._config.customClass === 'function' ? this._config.customClass() : this._config.customClass;\n\n      if (customClass) {\n        tip.classList.add(...customClass.split(' '));\n      } // If this is a touch-enabled device we add extra\n      // empty mouseover listeners to the body's immediate children;\n      // only needed because of broken event delegation on iOS\n      // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n\n\n      if ('ontouchstart' in document.documentElement) {\n        [].concat(...document.body.children).forEach(element => {\n          EventHandler.on(element, 'mouseover', noop);\n        });\n      }\n\n      const complete = () => {\n        const prevHoverState = this._hoverState;\n        this._hoverState = null;\n        EventHandler.trigger(this._element, this.constructor.Event.SHOWN);\n\n        if (prevHoverState === HOVER_STATE_OUT) {\n          this._leave(null, this);\n        }\n      };\n\n      const isAnimated = this.tip.classList.contains(CLASS_NAME_FADE$3);\n\n      this._queueCallback(complete, this.tip, isAnimated);\n    }\n\n    hide() {\n      if (!this._popper) {\n        return;\n      }\n\n      const tip = this.getTipElement();\n\n      const complete = () => {\n        if (this._isWithActiveTrigger()) {\n          return;\n        }\n\n        if (this._hoverState !== HOVER_STATE_SHOW) {\n          tip.remove();\n        }\n\n        this._cleanTipClass();\n\n        this._element.removeAttribute('aria-describedby');\n\n        EventHandler.trigger(this._element, this.constructor.Event.HIDDEN);\n\n        if (this._popper) {\n          this._popper.destroy();\n\n          this._popper = null;\n        }\n      };\n\n      const hideEvent = EventHandler.trigger(this._element, this.constructor.Event.HIDE);\n\n      if (hideEvent.defaultPrevented) {\n        return;\n      }\n\n      tip.classList.remove(CLASS_NAME_SHOW$3); // If this is a touch-enabled device we remove the extra\n      // empty mouseover listeners we added for iOS support\n\n      if ('ontouchstart' in document.documentElement) {\n        [].concat(...document.body.children).forEach(element => EventHandler.off(element, 'mouseover', noop));\n      }\n\n      this._activeTrigger[TRIGGER_CLICK] = false;\n      this._activeTrigger[TRIGGER_FOCUS] = false;\n      this._activeTrigger[TRIGGER_HOVER] = false;\n      const isAnimated = this.tip.classList.contains(CLASS_NAME_FADE$3);\n\n      this._queueCallback(complete, this.tip, isAnimated);\n\n      this._hoverState = '';\n    }\n\n    update() {\n      if (this._popper !== null) {\n        this._popper.update();\n      }\n    } // Protected\n\n\n    isWithContent() {\n      return Boolean(this.getTitle());\n    }\n\n    getTipElement() {\n      if (this.tip) {\n        return this.tip;\n      }\n\n      const element = document.createElement('div');\n      element.innerHTML = this._config.template;\n      this.tip = element.children[0];\n      return this.tip;\n    }\n\n    setContent() {\n      const tip = this.getTipElement();\n      this.setElementContent(SelectorEngine.findOne(SELECTOR_TOOLTIP_INNER, tip), this.getTitle());\n      tip.classList.remove(CLASS_NAME_FADE$3, CLASS_NAME_SHOW$3);\n    }\n\n    setElementContent(element, content) {\n      if (element === null) {\n        return;\n      }\n\n      if (isElement$1(content)) {\n        content = getElement(content); // content is a DOM node or a jQuery\n\n        if (this._config.html) {\n          if (content.parentNode !== element) {\n            element.innerHTML = '';\n            element.appendChild(content);\n          }\n        } else {\n          element.textContent = content.textContent;\n        }\n\n        return;\n      }\n\n      if (this._config.html) {\n        if (this._config.sanitize) {\n          content = sanitizeHtml(content, this._config.allowList, this._config.sanitizeFn);\n        }\n\n        element.innerHTML = content;\n      } else {\n        element.textContent = content;\n      }\n    }\n\n    getTitle() {\n      let title = this._element.getAttribute('data-bs-original-title');\n\n      if (!title) {\n        title = typeof this._config.title === 'function' ? this._config.title.call(this._element) : this._config.title;\n      }\n\n      return title;\n    }\n\n    updateAttachment(attachment) {\n      if (attachment === 'right') {\n        return 'end';\n      }\n\n      if (attachment === 'left') {\n        return 'start';\n      }\n\n      return attachment;\n    } // Private\n\n\n    _initializeOnDelegatedTarget(event, context) {\n      const dataKey = this.constructor.DATA_KEY;\n      context = context || Data.get(event.delegateTarget, dataKey);\n\n      if (!context) {\n        context = new this.constructor(event.delegateTarget, this._getDelegateConfig());\n        Data.set(event.delegateTarget, dataKey, context);\n      }\n\n      return context;\n    }\n\n    _getOffset() {\n      const {\n        offset\n      } = this._config;\n\n      if (typeof offset === 'string') {\n        return offset.split(',').map(val => Number.parseInt(val, 10));\n      }\n\n      if (typeof offset === 'function') {\n        return popperData => offset(popperData, this._element);\n      }\n\n      return offset;\n    }\n\n    _getPopperConfig(attachment) {\n      const defaultBsPopperConfig = {\n        placement: attachment,\n        modifiers: [{\n          name: 'flip',\n          options: {\n            fallbackPlacements: this._config.fallbackPlacements\n          }\n        }, {\n          name: 'offset',\n          options: {\n            offset: this._getOffset()\n          }\n        }, {\n          name: 'preventOverflow',\n          options: {\n            boundary: this._config.boundary\n          }\n        }, {\n          name: 'arrow',\n          options: {\n            element: `.${this.constructor.NAME}-arrow`\n          }\n        }, {\n          name: 'onChange',\n          enabled: true,\n          phase: 'afterWrite',\n          fn: data => this._handlePopperPlacementChange(data)\n        }],\n        onFirstUpdate: data => {\n          if (data.options.placement !== data.placement) {\n            this._handlePopperPlacementChange(data);\n          }\n        }\n      };\n      return { ...defaultBsPopperConfig,\n        ...(typeof this._config.popperConfig === 'function' ? this._config.popperConfig(defaultBsPopperConfig) : this._config.popperConfig)\n      };\n    }\n\n    _addAttachmentClass(attachment) {\n      this.getTipElement().classList.add(`${CLASS_PREFIX$1}-${this.updateAttachment(attachment)}`);\n    }\n\n    _getAttachment(placement) {\n      return AttachmentMap[placement.toUpperCase()];\n    }\n\n    _setListeners() {\n      const triggers = this._config.trigger.split(' ');\n\n      triggers.forEach(trigger => {\n        if (trigger === 'click') {\n          EventHandler.on(this._element, this.constructor.Event.CLICK, this._config.selector, event => this.toggle(event));\n        } else if (trigger !== TRIGGER_MANUAL) {\n          const eventIn = trigger === TRIGGER_HOVER ? this.constructor.Event.MOUSEENTER : this.constructor.Event.FOCUSIN;\n          const eventOut = trigger === TRIGGER_HOVER ? this.constructor.Event.MOUSELEAVE : this.constructor.Event.FOCUSOUT;\n          EventHandler.on(this._element, eventIn, this._config.selector, event => this._enter(event));\n          EventHandler.on(this._element, eventOut, this._config.selector, event => this._leave(event));\n        }\n      });\n\n      this._hideModalHandler = () => {\n        if (this._element) {\n          this.hide();\n        }\n      };\n\n      EventHandler.on(this._element.closest(`.${CLASS_NAME_MODAL}`), 'hide.bs.modal', this._hideModalHandler);\n\n      if (this._config.selector) {\n        this._config = { ...this._config,\n          trigger: 'manual',\n          selector: ''\n        };\n      } else {\n        this._fixTitle();\n      }\n    }\n\n    _fixTitle() {\n      const title = this._element.getAttribute('title');\n\n      const originalTitleType = typeof this._element.getAttribute('data-bs-original-title');\n\n      if (title || originalTitleType !== 'string') {\n        this._element.setAttribute('data-bs-original-title', title || '');\n\n        if (title && !this._element.getAttribute('aria-label') && !this._element.textContent) {\n          this._element.setAttribute('aria-label', title);\n        }\n\n        this._element.setAttribute('title', '');\n      }\n    }\n\n    _enter(event, context) {\n      context = this._initializeOnDelegatedTarget(event, context);\n\n      if (event) {\n        context._activeTrigger[event.type === 'focusin' ? TRIGGER_FOCUS : TRIGGER_HOVER] = true;\n      }\n\n      if (context.getTipElement().classList.contains(CLASS_NAME_SHOW$3) || context._hoverState === HOVER_STATE_SHOW) {\n        context._hoverState = HOVER_STATE_SHOW;\n        return;\n      }\n\n      clearTimeout(context._timeout);\n      context._hoverState = HOVER_STATE_SHOW;\n\n      if (!context._config.delay || !context._config.delay.show) {\n        context.show();\n        return;\n      }\n\n      context._timeout = setTimeout(() => {\n        if (context._hoverState === HOVER_STATE_SHOW) {\n          context.show();\n        }\n      }, context._config.delay.show);\n    }\n\n    _leave(event, context) {\n      context = this._initializeOnDelegatedTarget(event, context);\n\n      if (event) {\n        context._activeTrigger[event.type === 'focusout' ? TRIGGER_FOCUS : TRIGGER_HOVER] = context._element.contains(event.relatedTarget);\n      }\n\n      if (context._isWithActiveTrigger()) {\n        return;\n      }\n\n      clearTimeout(context._timeout);\n      context._hoverState = HOVER_STATE_OUT;\n\n      if (!context._config.delay || !context._config.delay.hide) {\n        context.hide();\n        return;\n      }\n\n      context._timeout = setTimeout(() => {\n        if (context._hoverState === HOVER_STATE_OUT) {\n          context.hide();\n        }\n      }, context._config.delay.hide);\n    }\n\n    _isWithActiveTrigger() {\n      for (const trigger in this._activeTrigger) {\n        if (this._activeTrigger[trigger]) {\n          return true;\n        }\n      }\n\n      return false;\n    }\n\n    _getConfig(config) {\n      const dataAttributes = Manipulator.getDataAttributes(this._element);\n      Object.keys(dataAttributes).forEach(dataAttr => {\n        if (DISALLOWED_ATTRIBUTES.has(dataAttr)) {\n          delete dataAttributes[dataAttr];\n        }\n      });\n      config = { ...this.constructor.Default,\n        ...dataAttributes,\n        ...(typeof config === 'object' && config ? config : {})\n      };\n      config.container = config.container === false ? document.body : getElement(config.container);\n\n      if (typeof config.delay === 'number') {\n        config.delay = {\n          show: config.delay,\n          hide: config.delay\n        };\n      }\n\n      if (typeof config.title === 'number') {\n        config.title = config.title.toString();\n      }\n\n      if (typeof config.content === 'number') {\n        config.content = config.content.toString();\n      }\n\n      typeCheckConfig(NAME$4, config, this.constructor.DefaultType);\n\n      if (config.sanitize) {\n        config.template = sanitizeHtml(config.template, config.allowList, config.sanitizeFn);\n      }\n\n      return config;\n    }\n\n    _getDelegateConfig() {\n      const config = {};\n\n      if (this._config) {\n        for (const key in this._config) {\n          if (this.constructor.Default[key] !== this._config[key]) {\n            config[key] = this._config[key];\n          }\n        }\n      }\n\n      return config;\n    }\n\n    _cleanTipClass() {\n      const tip = this.getTipElement();\n      const tabClass = tip.getAttribute('class').match(BSCLS_PREFIX_REGEX$1);\n\n      if (tabClass !== null && tabClass.length > 0) {\n        tabClass.map(token => token.trim()).forEach(tClass => tip.classList.remove(tClass));\n      }\n    }\n\n    _handlePopperPlacementChange(popperData) {\n      const {\n        state\n      } = popperData;\n\n      if (!state) {\n        return;\n      }\n\n      this.tip = state.elements.popper;\n\n      this._cleanTipClass();\n\n      this._addAttachmentClass(this._getAttachment(state.placement));\n    } // Static\n\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = Tooltip.getOrCreateInstance(this, config);\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(`No method named \"${config}\"`);\n          }\n\n          data[config]();\n        }\n      });\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Tooltip to jQuery only if jQuery is present\n   */\n\n\n  defineJQueryPlugin(Tooltip);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): popover.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$3 = 'popover';\n  const DATA_KEY$3 = 'bs.popover';\n  const EVENT_KEY$3 = `.${DATA_KEY$3}`;\n  const CLASS_PREFIX = 'bs-popover';\n  const BSCLS_PREFIX_REGEX = new RegExp(`(^|\\\\s)${CLASS_PREFIX}\\\\S+`, 'g');\n  const Default$2 = { ...Tooltip.Default,\n    placement: 'right',\n    offset: [0, 8],\n    trigger: 'click',\n    content: '',\n    template: '<div class=\"popover\" role=\"tooltip\">' + '<div class=\"popover-arrow\"></div>' + '<h3 class=\"popover-header\"></h3>' + '<div class=\"popover-body\"></div>' + '</div>'\n  };\n  const DefaultType$2 = { ...Tooltip.DefaultType,\n    content: '(string|element|function)'\n  };\n  const Event$1 = {\n    HIDE: `hide${EVENT_KEY$3}`,\n    HIDDEN: `hidden${EVENT_KEY$3}`,\n    SHOW: `show${EVENT_KEY$3}`,\n    SHOWN: `shown${EVENT_KEY$3}`,\n    INSERTED: `inserted${EVENT_KEY$3}`,\n    CLICK: `click${EVENT_KEY$3}`,\n    FOCUSIN: `focusin${EVENT_KEY$3}`,\n    FOCUSOUT: `focusout${EVENT_KEY$3}`,\n    MOUSEENTER: `mouseenter${EVENT_KEY$3}`,\n    MOUSELEAVE: `mouseleave${EVENT_KEY$3}`\n  };\n  const CLASS_NAME_FADE$2 = 'fade';\n  const CLASS_NAME_SHOW$2 = 'show';\n  const SELECTOR_TITLE = '.popover-header';\n  const SELECTOR_CONTENT = '.popover-body';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Popover extends Tooltip {\n    // Getters\n    static get Default() {\n      return Default$2;\n    }\n\n    static get NAME() {\n      return NAME$3;\n    }\n\n    static get Event() {\n      return Event$1;\n    }\n\n    static get DefaultType() {\n      return DefaultType$2;\n    } // Overrides\n\n\n    isWithContent() {\n      return this.getTitle() || this._getContent();\n    }\n\n    getTipElement() {\n      if (this.tip) {\n        return this.tip;\n      }\n\n      this.tip = super.getTipElement();\n\n      if (!this.getTitle()) {\n        SelectorEngine.findOne(SELECTOR_TITLE, this.tip).remove();\n      }\n\n      if (!this._getContent()) {\n        SelectorEngine.findOne(SELECTOR_CONTENT, this.tip).remove();\n      }\n\n      return this.tip;\n    }\n\n    setContent() {\n      const tip = this.getTipElement(); // we use append for html objects to maintain js events\n\n      this.setElementContent(SelectorEngine.findOne(SELECTOR_TITLE, tip), this.getTitle());\n\n      let content = this._getContent();\n\n      if (typeof content === 'function') {\n        content = content.call(this._element);\n      }\n\n      this.setElementContent(SelectorEngine.findOne(SELECTOR_CONTENT, tip), content);\n      tip.classList.remove(CLASS_NAME_FADE$2, CLASS_NAME_SHOW$2);\n    } // Private\n\n\n    _addAttachmentClass(attachment) {\n      this.getTipElement().classList.add(`${CLASS_PREFIX}-${this.updateAttachment(attachment)}`);\n    }\n\n    _getContent() {\n      return this._element.getAttribute('data-bs-content') || this._config.content;\n    }\n\n    _cleanTipClass() {\n      const tip = this.getTipElement();\n      const tabClass = tip.getAttribute('class').match(BSCLS_PREFIX_REGEX);\n\n      if (tabClass !== null && tabClass.length > 0) {\n        tabClass.map(token => token.trim()).forEach(tClass => tip.classList.remove(tClass));\n      }\n    } // Static\n\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = Popover.getOrCreateInstance(this, config);\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(`No method named \"${config}\"`);\n          }\n\n          data[config]();\n        }\n      });\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Popover to jQuery only if jQuery is present\n   */\n\n\n  defineJQueryPlugin(Popover);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): scrollspy.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$2 = 'scrollspy';\n  const DATA_KEY$2 = 'bs.scrollspy';\n  const EVENT_KEY$2 = `.${DATA_KEY$2}`;\n  const DATA_API_KEY$1 = '.data-api';\n  const Default$1 = {\n    offset: 10,\n    method: 'auto',\n    target: ''\n  };\n  const DefaultType$1 = {\n    offset: 'number',\n    method: 'string',\n    target: '(string|element)'\n  };\n  const EVENT_ACTIVATE = `activate${EVENT_KEY$2}`;\n  const EVENT_SCROLL = `scroll${EVENT_KEY$2}`;\n  const EVENT_LOAD_DATA_API = `load${EVENT_KEY$2}${DATA_API_KEY$1}`;\n  const CLASS_NAME_DROPDOWN_ITEM = 'dropdown-item';\n  const CLASS_NAME_ACTIVE$1 = 'active';\n  const SELECTOR_DATA_SPY = '[data-bs-spy=\"scroll\"]';\n  const SELECTOR_NAV_LIST_GROUP$1 = '.nav, .list-group';\n  const SELECTOR_NAV_LINKS = '.nav-link';\n  const SELECTOR_NAV_ITEMS = '.nav-item';\n  const SELECTOR_LIST_ITEMS = '.list-group-item';\n  const SELECTOR_DROPDOWN$1 = '.dropdown';\n  const SELECTOR_DROPDOWN_TOGGLE$1 = '.dropdown-toggle';\n  const METHOD_OFFSET = 'offset';\n  const METHOD_POSITION = 'position';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class ScrollSpy extends BaseComponent {\n    constructor(element, config) {\n      super(element);\n      this._scrollElement = this._element.tagName === 'BODY' ? window : this._element;\n      this._config = this._getConfig(config);\n      this._selector = `${this._config.target} ${SELECTOR_NAV_LINKS}, ${this._config.target} ${SELECTOR_LIST_ITEMS}, ${this._config.target} .${CLASS_NAME_DROPDOWN_ITEM}`;\n      this._offsets = [];\n      this._targets = [];\n      this._activeTarget = null;\n      this._scrollHeight = 0;\n      EventHandler.on(this._scrollElement, EVENT_SCROLL, () => this._process());\n      this.refresh();\n\n      this._process();\n    } // Getters\n\n\n    static get Default() {\n      return Default$1;\n    }\n\n    static get NAME() {\n      return NAME$2;\n    } // Public\n\n\n    refresh() {\n      const autoMethod = this._scrollElement === this._scrollElement.window ? METHOD_OFFSET : METHOD_POSITION;\n      const offsetMethod = this._config.method === 'auto' ? autoMethod : this._config.method;\n      const offsetBase = offsetMethod === METHOD_POSITION ? this._getScrollTop() : 0;\n      this._offsets = [];\n      this._targets = [];\n      this._scrollHeight = this._getScrollHeight();\n      const targets = SelectorEngine.find(this._selector);\n      targets.map(element => {\n        const targetSelector = getSelectorFromElement(element);\n        const target = targetSelector ? SelectorEngine.findOne(targetSelector) : null;\n\n        if (target) {\n          const targetBCR = target.getBoundingClientRect();\n\n          if (targetBCR.width || targetBCR.height) {\n            return [Manipulator[offsetMethod](target).top + offsetBase, targetSelector];\n          }\n        }\n\n        return null;\n      }).filter(item => item).sort((a, b) => a[0] - b[0]).forEach(item => {\n        this._offsets.push(item[0]);\n\n        this._targets.push(item[1]);\n      });\n    }\n\n    dispose() {\n      EventHandler.off(this._scrollElement, EVENT_KEY$2);\n      super.dispose();\n    } // Private\n\n\n    _getConfig(config) {\n      config = { ...Default$1,\n        ...Manipulator.getDataAttributes(this._element),\n        ...(typeof config === 'object' && config ? config : {})\n      };\n\n      if (typeof config.target !== 'string' && isElement$1(config.target)) {\n        let {\n          id\n        } = config.target;\n\n        if (!id) {\n          id = getUID(NAME$2);\n          config.target.id = id;\n        }\n\n        config.target = `#${id}`;\n      }\n\n      typeCheckConfig(NAME$2, config, DefaultType$1);\n      return config;\n    }\n\n    _getScrollTop() {\n      return this._scrollElement === window ? this._scrollElement.pageYOffset : this._scrollElement.scrollTop;\n    }\n\n    _getScrollHeight() {\n      return this._scrollElement.scrollHeight || Math.max(document.body.scrollHeight, document.documentElement.scrollHeight);\n    }\n\n    _getOffsetHeight() {\n      return this._scrollElement === window ? window.innerHeight : this._scrollElement.getBoundingClientRect().height;\n    }\n\n    _process() {\n      const scrollTop = this._getScrollTop() + this._config.offset;\n\n      const scrollHeight = this._getScrollHeight();\n\n      const maxScroll = this._config.offset + scrollHeight - this._getOffsetHeight();\n\n      if (this._scrollHeight !== scrollHeight) {\n        this.refresh();\n      }\n\n      if (scrollTop >= maxScroll) {\n        const target = this._targets[this._targets.length - 1];\n\n        if (this._activeTarget !== target) {\n          this._activate(target);\n        }\n\n        return;\n      }\n\n      if (this._activeTarget && scrollTop < this._offsets[0] && this._offsets[0] > 0) {\n        this._activeTarget = null;\n\n        this._clear();\n\n        return;\n      }\n\n      for (let i = this._offsets.length; i--;) {\n        const isActiveTarget = this._activeTarget !== this._targets[i] && scrollTop >= this._offsets[i] && (typeof this._offsets[i + 1] === 'undefined' || scrollTop < this._offsets[i + 1]);\n\n        if (isActiveTarget) {\n          this._activate(this._targets[i]);\n        }\n      }\n    }\n\n    _activate(target) {\n      this._activeTarget = target;\n\n      this._clear();\n\n      const queries = this._selector.split(',').map(selector => `${selector}[data-bs-target=\"${target}\"],${selector}[href=\"${target}\"]`);\n\n      const link = SelectorEngine.findOne(queries.join(','));\n\n      if (link.classList.contains(CLASS_NAME_DROPDOWN_ITEM)) {\n        SelectorEngine.findOne(SELECTOR_DROPDOWN_TOGGLE$1, link.closest(SELECTOR_DROPDOWN$1)).classList.add(CLASS_NAME_ACTIVE$1);\n        link.classList.add(CLASS_NAME_ACTIVE$1);\n      } else {\n        // Set triggered link as active\n        link.classList.add(CLASS_NAME_ACTIVE$1);\n        SelectorEngine.parents(link, SELECTOR_NAV_LIST_GROUP$1).forEach(listGroup => {\n          // Set triggered links parents as active\n          // With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor\n          SelectorEngine.prev(listGroup, `${SELECTOR_NAV_LINKS}, ${SELECTOR_LIST_ITEMS}`).forEach(item => item.classList.add(CLASS_NAME_ACTIVE$1)); // Handle special case when .nav-link is inside .nav-item\n\n          SelectorEngine.prev(listGroup, SELECTOR_NAV_ITEMS).forEach(navItem => {\n            SelectorEngine.children(navItem, SELECTOR_NAV_LINKS).forEach(item => item.classList.add(CLASS_NAME_ACTIVE$1));\n          });\n        });\n      }\n\n      EventHandler.trigger(this._scrollElement, EVENT_ACTIVATE, {\n        relatedTarget: target\n      });\n    }\n\n    _clear() {\n      SelectorEngine.find(this._selector).filter(node => node.classList.contains(CLASS_NAME_ACTIVE$1)).forEach(node => node.classList.remove(CLASS_NAME_ACTIVE$1));\n    } // Static\n\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = ScrollSpy.getOrCreateInstance(this, config);\n\n        if (typeof config !== 'string') {\n          return;\n        }\n\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config]();\n      });\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n    SelectorEngine.find(SELECTOR_DATA_SPY).forEach(spy => new ScrollSpy(spy));\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .ScrollSpy to jQuery only if jQuery is present\n   */\n\n  defineJQueryPlugin(ScrollSpy);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): tab.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$1 = 'tab';\n  const DATA_KEY$1 = 'bs.tab';\n  const EVENT_KEY$1 = `.${DATA_KEY$1}`;\n  const DATA_API_KEY = '.data-api';\n  const EVENT_HIDE$1 = `hide${EVENT_KEY$1}`;\n  const EVENT_HIDDEN$1 = `hidden${EVENT_KEY$1}`;\n  const EVENT_SHOW$1 = `show${EVENT_KEY$1}`;\n  const EVENT_SHOWN$1 = `shown${EVENT_KEY$1}`;\n  const EVENT_CLICK_DATA_API = `click${EVENT_KEY$1}${DATA_API_KEY}`;\n  const CLASS_NAME_DROPDOWN_MENU = 'dropdown-menu';\n  const CLASS_NAME_ACTIVE = 'active';\n  const CLASS_NAME_FADE$1 = 'fade';\n  const CLASS_NAME_SHOW$1 = 'show';\n  const SELECTOR_DROPDOWN = '.dropdown';\n  const SELECTOR_NAV_LIST_GROUP = '.nav, .list-group';\n  const SELECTOR_ACTIVE = '.active';\n  const SELECTOR_ACTIVE_UL = ':scope > li > .active';\n  const SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"tab\"], [data-bs-toggle=\"pill\"], [data-bs-toggle=\"list\"]';\n  const SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle';\n  const SELECTOR_DROPDOWN_ACTIVE_CHILD = ':scope > .dropdown-menu .active';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Tab extends BaseComponent {\n    // Getters\n    static get NAME() {\n      return NAME$1;\n    } // Public\n\n\n    show() {\n      if (this._element.parentNode && this._element.parentNode.nodeType === Node.ELEMENT_NODE && this._element.classList.contains(CLASS_NAME_ACTIVE)) {\n        return;\n      }\n\n      let previous;\n      const target = getElementFromSelector(this._element);\n\n      const listElement = this._element.closest(SELECTOR_NAV_LIST_GROUP);\n\n      if (listElement) {\n        const itemSelector = listElement.nodeName === 'UL' || listElement.nodeName === 'OL' ? SELECTOR_ACTIVE_UL : SELECTOR_ACTIVE;\n        previous = SelectorEngine.find(itemSelector, listElement);\n        previous = previous[previous.length - 1];\n      }\n\n      const hideEvent = previous ? EventHandler.trigger(previous, EVENT_HIDE$1, {\n        relatedTarget: this._element\n      }) : null;\n      const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$1, {\n        relatedTarget: previous\n      });\n\n      if (showEvent.defaultPrevented || hideEvent !== null && hideEvent.defaultPrevented) {\n        return;\n      }\n\n      this._activate(this._element, listElement);\n\n      const complete = () => {\n        EventHandler.trigger(previous, EVENT_HIDDEN$1, {\n          relatedTarget: this._element\n        });\n        EventHandler.trigger(this._element, EVENT_SHOWN$1, {\n          relatedTarget: previous\n        });\n      };\n\n      if (target) {\n        this._activate(target, target.parentNode, complete);\n      } else {\n        complete();\n      }\n    } // Private\n\n\n    _activate(element, container, callback) {\n      const activeElements = container && (container.nodeName === 'UL' || container.nodeName === 'OL') ? SelectorEngine.find(SELECTOR_ACTIVE_UL, container) : SelectorEngine.children(container, SELECTOR_ACTIVE);\n      const active = activeElements[0];\n      const isTransitioning = callback && active && active.classList.contains(CLASS_NAME_FADE$1);\n\n      const complete = () => this._transitionComplete(element, active, callback);\n\n      if (active && isTransitioning) {\n        active.classList.remove(CLASS_NAME_SHOW$1);\n\n        this._queueCallback(complete, element, true);\n      } else {\n        complete();\n      }\n    }\n\n    _transitionComplete(element, active, callback) {\n      if (active) {\n        active.classList.remove(CLASS_NAME_ACTIVE);\n        const dropdownChild = SelectorEngine.findOne(SELECTOR_DROPDOWN_ACTIVE_CHILD, active.parentNode);\n\n        if (dropdownChild) {\n          dropdownChild.classList.remove(CLASS_NAME_ACTIVE);\n        }\n\n        if (active.getAttribute('role') === 'tab') {\n          active.setAttribute('aria-selected', false);\n        }\n      }\n\n      element.classList.add(CLASS_NAME_ACTIVE);\n\n      if (element.getAttribute('role') === 'tab') {\n        element.setAttribute('aria-selected', true);\n      }\n\n      reflow(element);\n\n      if (element.classList.contains(CLASS_NAME_FADE$1)) {\n        element.classList.add(CLASS_NAME_SHOW$1);\n      }\n\n      let parent = element.parentNode;\n\n      if (parent && parent.nodeName === 'LI') {\n        parent = parent.parentNode;\n      }\n\n      if (parent && parent.classList.contains(CLASS_NAME_DROPDOWN_MENU)) {\n        const dropdownElement = element.closest(SELECTOR_DROPDOWN);\n\n        if (dropdownElement) {\n          SelectorEngine.find(SELECTOR_DROPDOWN_TOGGLE, dropdownElement).forEach(dropdown => dropdown.classList.add(CLASS_NAME_ACTIVE));\n        }\n\n        element.setAttribute('aria-expanded', true);\n      }\n\n      if (callback) {\n        callback();\n      }\n    } // Static\n\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = Tab.getOrCreateInstance(this);\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(`No method named \"${config}\"`);\n          }\n\n          data[config]();\n        }\n      });\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n    if (['A', 'AREA'].includes(this.tagName)) {\n      event.preventDefault();\n    }\n\n    if (isDisabled(this)) {\n      return;\n    }\n\n    const data = Tab.getOrCreateInstance(this);\n    data.show();\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Tab to jQuery only if jQuery is present\n   */\n\n  defineJQueryPlugin(Tab);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): toast.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME = 'toast';\n  const DATA_KEY = 'bs.toast';\n  const EVENT_KEY = `.${DATA_KEY}`;\n  const EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY}`;\n  const EVENT_MOUSEOVER = `mouseover${EVENT_KEY}`;\n  const EVENT_MOUSEOUT = `mouseout${EVENT_KEY}`;\n  const EVENT_FOCUSIN = `focusin${EVENT_KEY}`;\n  const EVENT_FOCUSOUT = `focusout${EVENT_KEY}`;\n  const EVENT_HIDE = `hide${EVENT_KEY}`;\n  const EVENT_HIDDEN = `hidden${EVENT_KEY}`;\n  const EVENT_SHOW = `show${EVENT_KEY}`;\n  const EVENT_SHOWN = `shown${EVENT_KEY}`;\n  const CLASS_NAME_FADE = 'fade';\n  const CLASS_NAME_HIDE = 'hide';\n  const CLASS_NAME_SHOW = 'show';\n  const CLASS_NAME_SHOWING = 'showing';\n  const DefaultType = {\n    animation: 'boolean',\n    autohide: 'boolean',\n    delay: 'number'\n  };\n  const Default = {\n    animation: true,\n    autohide: true,\n    delay: 5000\n  };\n  const SELECTOR_DATA_DISMISS = '[data-bs-dismiss=\"toast\"]';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Toast extends BaseComponent {\n    constructor(element, config) {\n      super(element);\n      this._config = this._getConfig(config);\n      this._timeout = null;\n      this._hasMouseInteraction = false;\n      this._hasKeyboardInteraction = false;\n\n      this._setListeners();\n    } // Getters\n\n\n    static get DefaultType() {\n      return DefaultType;\n    }\n\n    static get Default() {\n      return Default;\n    }\n\n    static get NAME() {\n      return NAME;\n    } // Public\n\n\n    show() {\n      const showEvent = EventHandler.trigger(this._element, EVENT_SHOW);\n\n      if (showEvent.defaultPrevented) {\n        return;\n      }\n\n      this._clearTimeout();\n\n      if (this._config.animation) {\n        this._element.classList.add(CLASS_NAME_FADE);\n      }\n\n      const complete = () => {\n        this._element.classList.remove(CLASS_NAME_SHOWING);\n\n        this._element.classList.add(CLASS_NAME_SHOW);\n\n        EventHandler.trigger(this._element, EVENT_SHOWN);\n\n        this._maybeScheduleHide();\n      };\n\n      this._element.classList.remove(CLASS_NAME_HIDE);\n\n      reflow(this._element);\n\n      this._element.classList.add(CLASS_NAME_SHOWING);\n\n      this._queueCallback(complete, this._element, this._config.animation);\n    }\n\n    hide() {\n      if (!this._element.classList.contains(CLASS_NAME_SHOW)) {\n        return;\n      }\n\n      const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE);\n\n      if (hideEvent.defaultPrevented) {\n        return;\n      }\n\n      const complete = () => {\n        this._element.classList.add(CLASS_NAME_HIDE);\n\n        EventHandler.trigger(this._element, EVENT_HIDDEN);\n      };\n\n      this._element.classList.remove(CLASS_NAME_SHOW);\n\n      this._queueCallback(complete, this._element, this._config.animation);\n    }\n\n    dispose() {\n      this._clearTimeout();\n\n      if (this._element.classList.contains(CLASS_NAME_SHOW)) {\n        this._element.classList.remove(CLASS_NAME_SHOW);\n      }\n\n      super.dispose();\n    } // Private\n\n\n    _getConfig(config) {\n      config = { ...Default,\n        ...Manipulator.getDataAttributes(this._element),\n        ...(typeof config === 'object' && config ? config : {})\n      };\n      typeCheckConfig(NAME, config, this.constructor.DefaultType);\n      return config;\n    }\n\n    _maybeScheduleHide() {\n      if (!this._config.autohide) {\n        return;\n      }\n\n      if (this._hasMouseInteraction || this._hasKeyboardInteraction) {\n        return;\n      }\n\n      this._timeout = setTimeout(() => {\n        this.hide();\n      }, this._config.delay);\n    }\n\n    _onInteraction(event, isInteracting) {\n      switch (event.type) {\n        case 'mouseover':\n        case 'mouseout':\n          this._hasMouseInteraction = isInteracting;\n          break;\n\n        case 'focusin':\n        case 'focusout':\n          this._hasKeyboardInteraction = isInteracting;\n          break;\n      }\n\n      if (isInteracting) {\n        this._clearTimeout();\n\n        return;\n      }\n\n      const nextElement = event.relatedTarget;\n\n      if (this._element === nextElement || this._element.contains(nextElement)) {\n        return;\n      }\n\n      this._maybeScheduleHide();\n    }\n\n    _setListeners() {\n      EventHandler.on(this._element, EVENT_CLICK_DISMISS, SELECTOR_DATA_DISMISS, () => this.hide());\n      EventHandler.on(this._element, EVENT_MOUSEOVER, event => this._onInteraction(event, true));\n      EventHandler.on(this._element, EVENT_MOUSEOUT, event => this._onInteraction(event, false));\n      EventHandler.on(this._element, EVENT_FOCUSIN, event => this._onInteraction(event, true));\n      EventHandler.on(this._element, EVENT_FOCUSOUT, event => this._onInteraction(event, false));\n    }\n\n    _clearTimeout() {\n      clearTimeout(this._timeout);\n      this._timeout = null;\n    } // Static\n\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = Toast.getOrCreateInstance(this, config);\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(`No method named \"${config}\"`);\n          }\n\n          data[config](this);\n        }\n      });\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Toast to jQuery only if jQuery is present\n   */\n\n\n  defineJQueryPlugin(Toast);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): index.umd.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  var index_umd = {\n    Alert,\n    Button,\n    Carousel,\n    Collapse,\n    Dropdown,\n    Modal,\n    Offcanvas,\n    Popover,\n    ScrollSpy,\n    Tab,\n    Toast,\n    Tooltip\n  };\n\n  return index_umd;\n\n})));\n//# sourceMappingURL=bootstrap.bundle.js.map\n"
  },
  {
    "path": "src/sourceDev.WebApp/SharedThemes/materia/wwwroot/js/bootstrap.esm.js",
    "content": "/*!\n  * Bootstrap v5.0.2 (https://getbootstrap.com/)\n  * Copyright 2011-2021 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)\n  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n  */\nimport * as Popper from '@popperjs/core';\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): dom/selector-engine.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\nconst NODE_TEXT = 3;\nconst SelectorEngine = {\n  find(selector, element = document.documentElement) {\n    return [].concat(...Element.prototype.querySelectorAll.call(element, selector));\n  },\n\n  findOne(selector, element = document.documentElement) {\n    return Element.prototype.querySelector.call(element, selector);\n  },\n\n  children(element, selector) {\n    return [].concat(...element.children).filter(child => child.matches(selector));\n  },\n\n  parents(element, selector) {\n    const parents = [];\n    let ancestor = element.parentNode;\n\n    while (ancestor && ancestor.nodeType === Node.ELEMENT_NODE && ancestor.nodeType !== NODE_TEXT) {\n      if (ancestor.matches(selector)) {\n        parents.push(ancestor);\n      }\n\n      ancestor = ancestor.parentNode;\n    }\n\n    return parents;\n  },\n\n  prev(element, selector) {\n    let previous = element.previousElementSibling;\n\n    while (previous) {\n      if (previous.matches(selector)) {\n        return [previous];\n      }\n\n      previous = previous.previousElementSibling;\n    }\n\n    return [];\n  },\n\n  next(element, selector) {\n    let next = element.nextElementSibling;\n\n    while (next) {\n      if (next.matches(selector)) {\n        return [next];\n      }\n\n      next = next.nextElementSibling;\n    }\n\n    return [];\n  }\n\n};\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): util/index.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst MAX_UID = 1000000;\nconst MILLISECONDS_MULTIPLIER = 1000;\nconst TRANSITION_END = 'transitionend'; // Shoutout AngusCroll (https://goo.gl/pxwQGp)\n\nconst toType = obj => {\n  if (obj === null || obj === undefined) {\n    return `${obj}`;\n  }\n\n  return {}.toString.call(obj).match(/\\s([a-z]+)/i)[1].toLowerCase();\n};\n/**\n * --------------------------------------------------------------------------\n * Public Util Api\n * --------------------------------------------------------------------------\n */\n\n\nconst getUID = prefix => {\n  do {\n    prefix += Math.floor(Math.random() * MAX_UID);\n  } while (document.getElementById(prefix));\n\n  return prefix;\n};\n\nconst getSelector = element => {\n  let selector = element.getAttribute('data-bs-target');\n\n  if (!selector || selector === '#') {\n    let hrefAttr = element.getAttribute('href'); // The only valid content that could double as a selector are IDs or classes,\n    // so everything starting with `#` or `.`. If a \"real\" URL is used as the selector,\n    // `document.querySelector` will rightfully complain it is invalid.\n    // See https://github.com/twbs/bootstrap/issues/32273\n\n    if (!hrefAttr || !hrefAttr.includes('#') && !hrefAttr.startsWith('.')) {\n      return null;\n    } // Just in case some CMS puts out a full URL with the anchor appended\n\n\n    if (hrefAttr.includes('#') && !hrefAttr.startsWith('#')) {\n      hrefAttr = `#${hrefAttr.split('#')[1]}`;\n    }\n\n    selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : null;\n  }\n\n  return selector;\n};\n\nconst getSelectorFromElement = element => {\n  const selector = getSelector(element);\n\n  if (selector) {\n    return document.querySelector(selector) ? selector : null;\n  }\n\n  return null;\n};\n\nconst getElementFromSelector = element => {\n  const selector = getSelector(element);\n  return selector ? document.querySelector(selector) : null;\n};\n\nconst getTransitionDurationFromElement = element => {\n  if (!element) {\n    return 0;\n  } // Get transition-duration of the element\n\n\n  let {\n    transitionDuration,\n    transitionDelay\n  } = window.getComputedStyle(element);\n  const floatTransitionDuration = Number.parseFloat(transitionDuration);\n  const floatTransitionDelay = Number.parseFloat(transitionDelay); // Return 0 if element or transition duration is not found\n\n  if (!floatTransitionDuration && !floatTransitionDelay) {\n    return 0;\n  } // If multiple durations are defined, take the first\n\n\n  transitionDuration = transitionDuration.split(',')[0];\n  transitionDelay = transitionDelay.split(',')[0];\n  return (Number.parseFloat(transitionDuration) + Number.parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER;\n};\n\nconst triggerTransitionEnd = element => {\n  element.dispatchEvent(new Event(TRANSITION_END));\n};\n\nconst isElement = obj => {\n  if (!obj || typeof obj !== 'object') {\n    return false;\n  }\n\n  if (typeof obj.jquery !== 'undefined') {\n    obj = obj[0];\n  }\n\n  return typeof obj.nodeType !== 'undefined';\n};\n\nconst getElement = obj => {\n  if (isElement(obj)) {\n    // it's a jQuery object or a node element\n    return obj.jquery ? obj[0] : obj;\n  }\n\n  if (typeof obj === 'string' && obj.length > 0) {\n    return SelectorEngine.findOne(obj);\n  }\n\n  return null;\n};\n\nconst typeCheckConfig = (componentName, config, configTypes) => {\n  Object.keys(configTypes).forEach(property => {\n    const expectedTypes = configTypes[property];\n    const value = config[property];\n    const valueType = value && isElement(value) ? 'element' : toType(value);\n\n    if (!new RegExp(expectedTypes).test(valueType)) {\n      throw new TypeError(`${componentName.toUpperCase()}: Option \"${property}\" provided type \"${valueType}\" but expected type \"${expectedTypes}\".`);\n    }\n  });\n};\n\nconst isVisible = element => {\n  if (!isElement(element) || element.getClientRects().length === 0) {\n    return false;\n  }\n\n  return getComputedStyle(element).getPropertyValue('visibility') === 'visible';\n};\n\nconst isDisabled = element => {\n  if (!element || element.nodeType !== Node.ELEMENT_NODE) {\n    return true;\n  }\n\n  if (element.classList.contains('disabled')) {\n    return true;\n  }\n\n  if (typeof element.disabled !== 'undefined') {\n    return element.disabled;\n  }\n\n  return element.hasAttribute('disabled') && element.getAttribute('disabled') !== 'false';\n};\n\nconst findShadowRoot = element => {\n  if (!document.documentElement.attachShadow) {\n    return null;\n  } // Can find the shadow root otherwise it'll return the document\n\n\n  if (typeof element.getRootNode === 'function') {\n    const root = element.getRootNode();\n    return root instanceof ShadowRoot ? root : null;\n  }\n\n  if (element instanceof ShadowRoot) {\n    return element;\n  } // when we don't find a shadow root\n\n\n  if (!element.parentNode) {\n    return null;\n  }\n\n  return findShadowRoot(element.parentNode);\n};\n\nconst noop = () => {};\n\nconst reflow = element => element.offsetHeight;\n\nconst getjQuery = () => {\n  const {\n    jQuery\n  } = window;\n\n  if (jQuery && !document.body.hasAttribute('data-bs-no-jquery')) {\n    return jQuery;\n  }\n\n  return null;\n};\n\nconst DOMContentLoadedCallbacks = [];\n\nconst onDOMContentLoaded = callback => {\n  if (document.readyState === 'loading') {\n    // add listener on the first call when the document is in loading state\n    if (!DOMContentLoadedCallbacks.length) {\n      document.addEventListener('DOMContentLoaded', () => {\n        DOMContentLoadedCallbacks.forEach(callback => callback());\n      });\n    }\n\n    DOMContentLoadedCallbacks.push(callback);\n  } else {\n    callback();\n  }\n};\n\nconst isRTL = () => document.documentElement.dir === 'rtl';\n\nconst defineJQueryPlugin = plugin => {\n  onDOMContentLoaded(() => {\n    const $ = getjQuery();\n    /* istanbul ignore if */\n\n    if ($) {\n      const name = plugin.NAME;\n      const JQUERY_NO_CONFLICT = $.fn[name];\n      $.fn[name] = plugin.jQueryInterface;\n      $.fn[name].Constructor = plugin;\n\n      $.fn[name].noConflict = () => {\n        $.fn[name] = JQUERY_NO_CONFLICT;\n        return plugin.jQueryInterface;\n      };\n    }\n  });\n};\n\nconst execute = callback => {\n  if (typeof callback === 'function') {\n    callback();\n  }\n};\n\nconst executeAfterTransition = (callback, transitionElement, waitForTransition = true) => {\n  if (!waitForTransition) {\n    execute(callback);\n    return;\n  }\n\n  const durationPadding = 5;\n  const emulatedDuration = getTransitionDurationFromElement(transitionElement) + durationPadding;\n  let called = false;\n\n  const handler = ({\n    target\n  }) => {\n    if (target !== transitionElement) {\n      return;\n    }\n\n    called = true;\n    transitionElement.removeEventListener(TRANSITION_END, handler);\n    execute(callback);\n  };\n\n  transitionElement.addEventListener(TRANSITION_END, handler);\n  setTimeout(() => {\n    if (!called) {\n      triggerTransitionEnd(transitionElement);\n    }\n  }, emulatedDuration);\n};\n/**\n * Return the previous/next element of a list.\n *\n * @param {array} list    The list of elements\n * @param activeElement   The active element\n * @param shouldGetNext   Choose to get next or previous element\n * @param isCycleAllowed\n * @return {Element|elem} The proper element\n */\n\n\nconst getNextActiveElement = (list, activeElement, shouldGetNext, isCycleAllowed) => {\n  let index = list.indexOf(activeElement); // if the element does not exist in the list return an element depending on the direction and if cycle is allowed\n\n  if (index === -1) {\n    return list[!shouldGetNext && isCycleAllowed ? list.length - 1 : 0];\n  }\n\n  const listLength = list.length;\n  index += shouldGetNext ? 1 : -1;\n\n  if (isCycleAllowed) {\n    index = (index + listLength) % listLength;\n  }\n\n  return list[Math.max(0, Math.min(index, listLength - 1))];\n};\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): dom/event-handler.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst namespaceRegex = /[^.]*(?=\\..*)\\.|.*/;\nconst stripNameRegex = /\\..*/;\nconst stripUidRegex = /::\\d+$/;\nconst eventRegistry = {}; // Events storage\n\nlet uidEvent = 1;\nconst customEvents = {\n  mouseenter: 'mouseover',\n  mouseleave: 'mouseout'\n};\nconst customEventsRegex = /^(mouseenter|mouseleave)/i;\nconst nativeEvents = new Set(['click', 'dblclick', 'mouseup', 'mousedown', 'contextmenu', 'mousewheel', 'DOMMouseScroll', 'mouseover', 'mouseout', 'mousemove', 'selectstart', 'selectend', 'keydown', 'keypress', 'keyup', 'orientationchange', 'touchstart', 'touchmove', 'touchend', 'touchcancel', 'pointerdown', 'pointermove', 'pointerup', 'pointerleave', 'pointercancel', 'gesturestart', 'gesturechange', 'gestureend', 'focus', 'blur', 'change', 'reset', 'select', 'submit', 'focusin', 'focusout', 'load', 'unload', 'beforeunload', 'resize', 'move', 'DOMContentLoaded', 'readystatechange', 'error', 'abort', 'scroll']);\n/**\n * ------------------------------------------------------------------------\n * Private methods\n * ------------------------------------------------------------------------\n */\n\nfunction getUidEvent(element, uid) {\n  return uid && `${uid}::${uidEvent++}` || element.uidEvent || uidEvent++;\n}\n\nfunction getEvent(element) {\n  const uid = getUidEvent(element);\n  element.uidEvent = uid;\n  eventRegistry[uid] = eventRegistry[uid] || {};\n  return eventRegistry[uid];\n}\n\nfunction bootstrapHandler(element, fn) {\n  return function handler(event) {\n    event.delegateTarget = element;\n\n    if (handler.oneOff) {\n      EventHandler.off(element, event.type, fn);\n    }\n\n    return fn.apply(element, [event]);\n  };\n}\n\nfunction bootstrapDelegationHandler(element, selector, fn) {\n  return function handler(event) {\n    const domElements = element.querySelectorAll(selector);\n\n    for (let {\n      target\n    } = event; target && target !== this; target = target.parentNode) {\n      for (let i = domElements.length; i--;) {\n        if (domElements[i] === target) {\n          event.delegateTarget = target;\n\n          if (handler.oneOff) {\n            // eslint-disable-next-line unicorn/consistent-destructuring\n            EventHandler.off(element, event.type, selector, fn);\n          }\n\n          return fn.apply(target, [event]);\n        }\n      }\n    } // To please ESLint\n\n\n    return null;\n  };\n}\n\nfunction findHandler(events, handler, delegationSelector = null) {\n  const uidEventList = Object.keys(events);\n\n  for (let i = 0, len = uidEventList.length; i < len; i++) {\n    const event = events[uidEventList[i]];\n\n    if (event.originalHandler === handler && event.delegationSelector === delegationSelector) {\n      return event;\n    }\n  }\n\n  return null;\n}\n\nfunction normalizeParams(originalTypeEvent, handler, delegationFn) {\n  const delegation = typeof handler === 'string';\n  const originalHandler = delegation ? delegationFn : handler;\n  let typeEvent = getTypeEvent(originalTypeEvent);\n  const isNative = nativeEvents.has(typeEvent);\n\n  if (!isNative) {\n    typeEvent = originalTypeEvent;\n  }\n\n  return [delegation, originalHandler, typeEvent];\n}\n\nfunction addHandler(element, originalTypeEvent, handler, delegationFn, oneOff) {\n  if (typeof originalTypeEvent !== 'string' || !element) {\n    return;\n  }\n\n  if (!handler) {\n    handler = delegationFn;\n    delegationFn = null;\n  } // in case of mouseenter or mouseleave wrap the handler within a function that checks for its DOM position\n  // this prevents the handler from being dispatched the same way as mouseover or mouseout does\n\n\n  if (customEventsRegex.test(originalTypeEvent)) {\n    const wrapFn = fn => {\n      return function (event) {\n        if (!event.relatedTarget || event.relatedTarget !== event.delegateTarget && !event.delegateTarget.contains(event.relatedTarget)) {\n          return fn.call(this, event);\n        }\n      };\n    };\n\n    if (delegationFn) {\n      delegationFn = wrapFn(delegationFn);\n    } else {\n      handler = wrapFn(handler);\n    }\n  }\n\n  const [delegation, originalHandler, typeEvent] = normalizeParams(originalTypeEvent, handler, delegationFn);\n  const events = getEvent(element);\n  const handlers = events[typeEvent] || (events[typeEvent] = {});\n  const previousFn = findHandler(handlers, originalHandler, delegation ? handler : null);\n\n  if (previousFn) {\n    previousFn.oneOff = previousFn.oneOff && oneOff;\n    return;\n  }\n\n  const uid = getUidEvent(originalHandler, originalTypeEvent.replace(namespaceRegex, ''));\n  const fn = delegation ? bootstrapDelegationHandler(element, handler, delegationFn) : bootstrapHandler(element, handler);\n  fn.delegationSelector = delegation ? handler : null;\n  fn.originalHandler = originalHandler;\n  fn.oneOff = oneOff;\n  fn.uidEvent = uid;\n  handlers[uid] = fn;\n  element.addEventListener(typeEvent, fn, delegation);\n}\n\nfunction removeHandler(element, events, typeEvent, handler, delegationSelector) {\n  const fn = findHandler(events[typeEvent], handler, delegationSelector);\n\n  if (!fn) {\n    return;\n  }\n\n  element.removeEventListener(typeEvent, fn, Boolean(delegationSelector));\n  delete events[typeEvent][fn.uidEvent];\n}\n\nfunction removeNamespacedHandlers(element, events, typeEvent, namespace) {\n  const storeElementEvent = events[typeEvent] || {};\n  Object.keys(storeElementEvent).forEach(handlerKey => {\n    if (handlerKey.includes(namespace)) {\n      const event = storeElementEvent[handlerKey];\n      removeHandler(element, events, typeEvent, event.originalHandler, event.delegationSelector);\n    }\n  });\n}\n\nfunction getTypeEvent(event) {\n  // allow to get the native events from namespaced events ('click.bs.button' --> 'click')\n  event = event.replace(stripNameRegex, '');\n  return customEvents[event] || event;\n}\n\nconst EventHandler = {\n  on(element, event, handler, delegationFn) {\n    addHandler(element, event, handler, delegationFn, false);\n  },\n\n  one(element, event, handler, delegationFn) {\n    addHandler(element, event, handler, delegationFn, true);\n  },\n\n  off(element, originalTypeEvent, handler, delegationFn) {\n    if (typeof originalTypeEvent !== 'string' || !element) {\n      return;\n    }\n\n    const [delegation, originalHandler, typeEvent] = normalizeParams(originalTypeEvent, handler, delegationFn);\n    const inNamespace = typeEvent !== originalTypeEvent;\n    const events = getEvent(element);\n    const isNamespace = originalTypeEvent.startsWith('.');\n\n    if (typeof originalHandler !== 'undefined') {\n      // Simplest case: handler is passed, remove that listener ONLY.\n      if (!events || !events[typeEvent]) {\n        return;\n      }\n\n      removeHandler(element, events, typeEvent, originalHandler, delegation ? handler : null);\n      return;\n    }\n\n    if (isNamespace) {\n      Object.keys(events).forEach(elementEvent => {\n        removeNamespacedHandlers(element, events, elementEvent, originalTypeEvent.slice(1));\n      });\n    }\n\n    const storeElementEvent = events[typeEvent] || {};\n    Object.keys(storeElementEvent).forEach(keyHandlers => {\n      const handlerKey = keyHandlers.replace(stripUidRegex, '');\n\n      if (!inNamespace || originalTypeEvent.includes(handlerKey)) {\n        const event = storeElementEvent[keyHandlers];\n        removeHandler(element, events, typeEvent, event.originalHandler, event.delegationSelector);\n      }\n    });\n  },\n\n  trigger(element, event, args) {\n    if (typeof event !== 'string' || !element) {\n      return null;\n    }\n\n    const $ = getjQuery();\n    const typeEvent = getTypeEvent(event);\n    const inNamespace = event !== typeEvent;\n    const isNative = nativeEvents.has(typeEvent);\n    let jQueryEvent;\n    let bubbles = true;\n    let nativeDispatch = true;\n    let defaultPrevented = false;\n    let evt = null;\n\n    if (inNamespace && $) {\n      jQueryEvent = $.Event(event, args);\n      $(element).trigger(jQueryEvent);\n      bubbles = !jQueryEvent.isPropagationStopped();\n      nativeDispatch = !jQueryEvent.isImmediatePropagationStopped();\n      defaultPrevented = jQueryEvent.isDefaultPrevented();\n    }\n\n    if (isNative) {\n      evt = document.createEvent('HTMLEvents');\n      evt.initEvent(typeEvent, bubbles, true);\n    } else {\n      evt = new CustomEvent(event, {\n        bubbles,\n        cancelable: true\n      });\n    } // merge custom information in our event\n\n\n    if (typeof args !== 'undefined') {\n      Object.keys(args).forEach(key => {\n        Object.defineProperty(evt, key, {\n          get() {\n            return args[key];\n          }\n\n        });\n      });\n    }\n\n    if (defaultPrevented) {\n      evt.preventDefault();\n    }\n\n    if (nativeDispatch) {\n      element.dispatchEvent(evt);\n    }\n\n    if (evt.defaultPrevented && typeof jQueryEvent !== 'undefined') {\n      jQueryEvent.preventDefault();\n    }\n\n    return evt;\n  }\n\n};\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): dom/data.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\nconst elementMap = new Map();\nvar Data = {\n  set(element, key, instance) {\n    if (!elementMap.has(element)) {\n      elementMap.set(element, new Map());\n    }\n\n    const instanceMap = elementMap.get(element); // make it clear we only want one instance per element\n    // can be removed later when multiple key/instances are fine to be used\n\n    if (!instanceMap.has(key) && instanceMap.size !== 0) {\n      // eslint-disable-next-line no-console\n      console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(instanceMap.keys())[0]}.`);\n      return;\n    }\n\n    instanceMap.set(key, instance);\n  },\n\n  get(element, key) {\n    if (elementMap.has(element)) {\n      return elementMap.get(element).get(key) || null;\n    }\n\n    return null;\n  },\n\n  remove(element, key) {\n    if (!elementMap.has(element)) {\n      return;\n    }\n\n    const instanceMap = elementMap.get(element);\n    instanceMap.delete(key); // free up element references if there are no instances left for an element\n\n    if (instanceMap.size === 0) {\n      elementMap.delete(element);\n    }\n  }\n\n};\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): base-component.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst VERSION = '5.0.2';\n\nclass BaseComponent {\n  constructor(element) {\n    element = getElement(element);\n\n    if (!element) {\n      return;\n    }\n\n    this._element = element;\n    Data.set(this._element, this.constructor.DATA_KEY, this);\n  }\n\n  dispose() {\n    Data.remove(this._element, this.constructor.DATA_KEY);\n    EventHandler.off(this._element, this.constructor.EVENT_KEY);\n    Object.getOwnPropertyNames(this).forEach(propertyName => {\n      this[propertyName] = null;\n    });\n  }\n\n  _queueCallback(callback, element, isAnimated = true) {\n    executeAfterTransition(callback, element, isAnimated);\n  }\n  /** Static */\n\n\n  static getInstance(element) {\n    return Data.get(element, this.DATA_KEY);\n  }\n\n  static getOrCreateInstance(element, config = {}) {\n    return this.getInstance(element) || new this(element, typeof config === 'object' ? config : null);\n  }\n\n  static get VERSION() {\n    return VERSION;\n  }\n\n  static get NAME() {\n    throw new Error('You have to implement the static method \"NAME\", for each component!');\n  }\n\n  static get DATA_KEY() {\n    return `bs.${this.NAME}`;\n  }\n\n  static get EVENT_KEY() {\n    return `.${this.DATA_KEY}`;\n  }\n\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): alert.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$c = 'alert';\nconst DATA_KEY$b = 'bs.alert';\nconst EVENT_KEY$b = `.${DATA_KEY$b}`;\nconst DATA_API_KEY$8 = '.data-api';\nconst SELECTOR_DISMISS = '[data-bs-dismiss=\"alert\"]';\nconst EVENT_CLOSE = `close${EVENT_KEY$b}`;\nconst EVENT_CLOSED = `closed${EVENT_KEY$b}`;\nconst EVENT_CLICK_DATA_API$7 = `click${EVENT_KEY$b}${DATA_API_KEY$8}`;\nconst CLASS_NAME_ALERT = 'alert';\nconst CLASS_NAME_FADE$6 = 'fade';\nconst CLASS_NAME_SHOW$9 = 'show';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Alert extends BaseComponent {\n  // Getters\n  static get NAME() {\n    return NAME$c;\n  } // Public\n\n\n  close(element) {\n    const rootElement = element ? this._getRootElement(element) : this._element;\n\n    const customEvent = this._triggerCloseEvent(rootElement);\n\n    if (customEvent === null || customEvent.defaultPrevented) {\n      return;\n    }\n\n    this._removeElement(rootElement);\n  } // Private\n\n\n  _getRootElement(element) {\n    return getElementFromSelector(element) || element.closest(`.${CLASS_NAME_ALERT}`);\n  }\n\n  _triggerCloseEvent(element) {\n    return EventHandler.trigger(element, EVENT_CLOSE);\n  }\n\n  _removeElement(element) {\n    element.classList.remove(CLASS_NAME_SHOW$9);\n    const isAnimated = element.classList.contains(CLASS_NAME_FADE$6);\n\n    this._queueCallback(() => this._destroyElement(element), element, isAnimated);\n  }\n\n  _destroyElement(element) {\n    element.remove();\n    EventHandler.trigger(element, EVENT_CLOSED);\n  } // Static\n\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Alert.getOrCreateInstance(this);\n\n      if (config === 'close') {\n        data[config](this);\n      }\n    });\n  }\n\n  static handleDismiss(alertInstance) {\n    return function (event) {\n      if (event) {\n        event.preventDefault();\n      }\n\n      alertInstance.close(this);\n    };\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$7, SELECTOR_DISMISS, Alert.handleDismiss(new Alert()));\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Alert to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Alert);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): button.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$b = 'button';\nconst DATA_KEY$a = 'bs.button';\nconst EVENT_KEY$a = `.${DATA_KEY$a}`;\nconst DATA_API_KEY$7 = '.data-api';\nconst CLASS_NAME_ACTIVE$3 = 'active';\nconst SELECTOR_DATA_TOGGLE$5 = '[data-bs-toggle=\"button\"]';\nconst EVENT_CLICK_DATA_API$6 = `click${EVENT_KEY$a}${DATA_API_KEY$7}`;\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Button extends BaseComponent {\n  // Getters\n  static get NAME() {\n    return NAME$b;\n  } // Public\n\n\n  toggle() {\n    // Toggle class and sync the `aria-pressed` attribute with the return value of the `.toggle()` method\n    this._element.setAttribute('aria-pressed', this._element.classList.toggle(CLASS_NAME_ACTIVE$3));\n  } // Static\n\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Button.getOrCreateInstance(this);\n\n      if (config === 'toggle') {\n        data[config]();\n      }\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$6, SELECTOR_DATA_TOGGLE$5, event => {\n  event.preventDefault();\n  const button = event.target.closest(SELECTOR_DATA_TOGGLE$5);\n  const data = Button.getOrCreateInstance(button);\n  data.toggle();\n});\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Button to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Button);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): dom/manipulator.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\nfunction normalizeData(val) {\n  if (val === 'true') {\n    return true;\n  }\n\n  if (val === 'false') {\n    return false;\n  }\n\n  if (val === Number(val).toString()) {\n    return Number(val);\n  }\n\n  if (val === '' || val === 'null') {\n    return null;\n  }\n\n  return val;\n}\n\nfunction normalizeDataKey(key) {\n  return key.replace(/[A-Z]/g, chr => `-${chr.toLowerCase()}`);\n}\n\nconst Manipulator = {\n  setDataAttribute(element, key, value) {\n    element.setAttribute(`data-bs-${normalizeDataKey(key)}`, value);\n  },\n\n  removeDataAttribute(element, key) {\n    element.removeAttribute(`data-bs-${normalizeDataKey(key)}`);\n  },\n\n  getDataAttributes(element) {\n    if (!element) {\n      return {};\n    }\n\n    const attributes = {};\n    Object.keys(element.dataset).filter(key => key.startsWith('bs')).forEach(key => {\n      let pureKey = key.replace(/^bs/, '');\n      pureKey = pureKey.charAt(0).toLowerCase() + pureKey.slice(1, pureKey.length);\n      attributes[pureKey] = normalizeData(element.dataset[key]);\n    });\n    return attributes;\n  },\n\n  getDataAttribute(element, key) {\n    return normalizeData(element.getAttribute(`data-bs-${normalizeDataKey(key)}`));\n  },\n\n  offset(element) {\n    const rect = element.getBoundingClientRect();\n    return {\n      top: rect.top + document.body.scrollTop,\n      left: rect.left + document.body.scrollLeft\n    };\n  },\n\n  position(element) {\n    return {\n      top: element.offsetTop,\n      left: element.offsetLeft\n    };\n  }\n\n};\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): carousel.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$a = 'carousel';\nconst DATA_KEY$9 = 'bs.carousel';\nconst EVENT_KEY$9 = `.${DATA_KEY$9}`;\nconst DATA_API_KEY$6 = '.data-api';\nconst ARROW_LEFT_KEY = 'ArrowLeft';\nconst ARROW_RIGHT_KEY = 'ArrowRight';\nconst TOUCHEVENT_COMPAT_WAIT = 500; // Time for mouse compat events to fire after touch\n\nconst SWIPE_THRESHOLD = 40;\nconst Default$9 = {\n  interval: 5000,\n  keyboard: true,\n  slide: false,\n  pause: 'hover',\n  wrap: true,\n  touch: true\n};\nconst DefaultType$9 = {\n  interval: '(number|boolean)',\n  keyboard: 'boolean',\n  slide: '(boolean|string)',\n  pause: '(string|boolean)',\n  wrap: 'boolean',\n  touch: 'boolean'\n};\nconst ORDER_NEXT = 'next';\nconst ORDER_PREV = 'prev';\nconst DIRECTION_LEFT = 'left';\nconst DIRECTION_RIGHT = 'right';\nconst KEY_TO_DIRECTION = {\n  [ARROW_LEFT_KEY]: DIRECTION_RIGHT,\n  [ARROW_RIGHT_KEY]: DIRECTION_LEFT\n};\nconst EVENT_SLIDE = `slide${EVENT_KEY$9}`;\nconst EVENT_SLID = `slid${EVENT_KEY$9}`;\nconst EVENT_KEYDOWN = `keydown${EVENT_KEY$9}`;\nconst EVENT_MOUSEENTER = `mouseenter${EVENT_KEY$9}`;\nconst EVENT_MOUSELEAVE = `mouseleave${EVENT_KEY$9}`;\nconst EVENT_TOUCHSTART = `touchstart${EVENT_KEY$9}`;\nconst EVENT_TOUCHMOVE = `touchmove${EVENT_KEY$9}`;\nconst EVENT_TOUCHEND = `touchend${EVENT_KEY$9}`;\nconst EVENT_POINTERDOWN = `pointerdown${EVENT_KEY$9}`;\nconst EVENT_POINTERUP = `pointerup${EVENT_KEY$9}`;\nconst EVENT_DRAG_START = `dragstart${EVENT_KEY$9}`;\nconst EVENT_LOAD_DATA_API$2 = `load${EVENT_KEY$9}${DATA_API_KEY$6}`;\nconst EVENT_CLICK_DATA_API$5 = `click${EVENT_KEY$9}${DATA_API_KEY$6}`;\nconst CLASS_NAME_CAROUSEL = 'carousel';\nconst CLASS_NAME_ACTIVE$2 = 'active';\nconst CLASS_NAME_SLIDE = 'slide';\nconst CLASS_NAME_END = 'carousel-item-end';\nconst CLASS_NAME_START = 'carousel-item-start';\nconst CLASS_NAME_NEXT = 'carousel-item-next';\nconst CLASS_NAME_PREV = 'carousel-item-prev';\nconst CLASS_NAME_POINTER_EVENT = 'pointer-event';\nconst SELECTOR_ACTIVE$1 = '.active';\nconst SELECTOR_ACTIVE_ITEM = '.active.carousel-item';\nconst SELECTOR_ITEM = '.carousel-item';\nconst SELECTOR_ITEM_IMG = '.carousel-item img';\nconst SELECTOR_NEXT_PREV = '.carousel-item-next, .carousel-item-prev';\nconst SELECTOR_INDICATORS = '.carousel-indicators';\nconst SELECTOR_INDICATOR = '[data-bs-target]';\nconst SELECTOR_DATA_SLIDE = '[data-bs-slide], [data-bs-slide-to]';\nconst SELECTOR_DATA_RIDE = '[data-bs-ride=\"carousel\"]';\nconst POINTER_TYPE_TOUCH = 'touch';\nconst POINTER_TYPE_PEN = 'pen';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Carousel extends BaseComponent {\n  constructor(element, config) {\n    super(element);\n    this._items = null;\n    this._interval = null;\n    this._activeElement = null;\n    this._isPaused = false;\n    this._isSliding = false;\n    this.touchTimeout = null;\n    this.touchStartX = 0;\n    this.touchDeltaX = 0;\n    this._config = this._getConfig(config);\n    this._indicatorsElement = SelectorEngine.findOne(SELECTOR_INDICATORS, this._element);\n    this._touchSupported = 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0;\n    this._pointerEvent = Boolean(window.PointerEvent);\n\n    this._addEventListeners();\n  } // Getters\n\n\n  static get Default() {\n    return Default$9;\n  }\n\n  static get NAME() {\n    return NAME$a;\n  } // Public\n\n\n  next() {\n    this._slide(ORDER_NEXT);\n  }\n\n  nextWhenVisible() {\n    // Don't call next when the page isn't visible\n    // or the carousel or its parent isn't visible\n    if (!document.hidden && isVisible(this._element)) {\n      this.next();\n    }\n  }\n\n  prev() {\n    this._slide(ORDER_PREV);\n  }\n\n  pause(event) {\n    if (!event) {\n      this._isPaused = true;\n    }\n\n    if (SelectorEngine.findOne(SELECTOR_NEXT_PREV, this._element)) {\n      triggerTransitionEnd(this._element);\n      this.cycle(true);\n    }\n\n    clearInterval(this._interval);\n    this._interval = null;\n  }\n\n  cycle(event) {\n    if (!event) {\n      this._isPaused = false;\n    }\n\n    if (this._interval) {\n      clearInterval(this._interval);\n      this._interval = null;\n    }\n\n    if (this._config && this._config.interval && !this._isPaused) {\n      this._updateInterval();\n\n      this._interval = setInterval((document.visibilityState ? this.nextWhenVisible : this.next).bind(this), this._config.interval);\n    }\n  }\n\n  to(index) {\n    this._activeElement = SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element);\n\n    const activeIndex = this._getItemIndex(this._activeElement);\n\n    if (index > this._items.length - 1 || index < 0) {\n      return;\n    }\n\n    if (this._isSliding) {\n      EventHandler.one(this._element, EVENT_SLID, () => this.to(index));\n      return;\n    }\n\n    if (activeIndex === index) {\n      this.pause();\n      this.cycle();\n      return;\n    }\n\n    const order = index > activeIndex ? ORDER_NEXT : ORDER_PREV;\n\n    this._slide(order, this._items[index]);\n  } // Private\n\n\n  _getConfig(config) {\n    config = { ...Default$9,\n      ...Manipulator.getDataAttributes(this._element),\n      ...(typeof config === 'object' ? config : {})\n    };\n    typeCheckConfig(NAME$a, config, DefaultType$9);\n    return config;\n  }\n\n  _handleSwipe() {\n    const absDeltax = Math.abs(this.touchDeltaX);\n\n    if (absDeltax <= SWIPE_THRESHOLD) {\n      return;\n    }\n\n    const direction = absDeltax / this.touchDeltaX;\n    this.touchDeltaX = 0;\n\n    if (!direction) {\n      return;\n    }\n\n    this._slide(direction > 0 ? DIRECTION_RIGHT : DIRECTION_LEFT);\n  }\n\n  _addEventListeners() {\n    if (this._config.keyboard) {\n      EventHandler.on(this._element, EVENT_KEYDOWN, event => this._keydown(event));\n    }\n\n    if (this._config.pause === 'hover') {\n      EventHandler.on(this._element, EVENT_MOUSEENTER, event => this.pause(event));\n      EventHandler.on(this._element, EVENT_MOUSELEAVE, event => this.cycle(event));\n    }\n\n    if (this._config.touch && this._touchSupported) {\n      this._addTouchEventListeners();\n    }\n  }\n\n  _addTouchEventListeners() {\n    const start = event => {\n      if (this._pointerEvent && (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH)) {\n        this.touchStartX = event.clientX;\n      } else if (!this._pointerEvent) {\n        this.touchStartX = event.touches[0].clientX;\n      }\n    };\n\n    const move = event => {\n      // ensure swiping with one touch and not pinching\n      this.touchDeltaX = event.touches && event.touches.length > 1 ? 0 : event.touches[0].clientX - this.touchStartX;\n    };\n\n    const end = event => {\n      if (this._pointerEvent && (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH)) {\n        this.touchDeltaX = event.clientX - this.touchStartX;\n      }\n\n      this._handleSwipe();\n\n      if (this._config.pause === 'hover') {\n        // If it's a touch-enabled device, mouseenter/leave are fired as\n        // part of the mouse compatibility events on first tap - the carousel\n        // would stop cycling until user tapped out of it;\n        // here, we listen for touchend, explicitly pause the carousel\n        // (as if it's the second time we tap on it, mouseenter compat event\n        // is NOT fired) and after a timeout (to allow for mouse compatibility\n        // events to fire) we explicitly restart cycling\n        this.pause();\n\n        if (this.touchTimeout) {\n          clearTimeout(this.touchTimeout);\n        }\n\n        this.touchTimeout = setTimeout(event => this.cycle(event), TOUCHEVENT_COMPAT_WAIT + this._config.interval);\n      }\n    };\n\n    SelectorEngine.find(SELECTOR_ITEM_IMG, this._element).forEach(itemImg => {\n      EventHandler.on(itemImg, EVENT_DRAG_START, e => e.preventDefault());\n    });\n\n    if (this._pointerEvent) {\n      EventHandler.on(this._element, EVENT_POINTERDOWN, event => start(event));\n      EventHandler.on(this._element, EVENT_POINTERUP, event => end(event));\n\n      this._element.classList.add(CLASS_NAME_POINTER_EVENT);\n    } else {\n      EventHandler.on(this._element, EVENT_TOUCHSTART, event => start(event));\n      EventHandler.on(this._element, EVENT_TOUCHMOVE, event => move(event));\n      EventHandler.on(this._element, EVENT_TOUCHEND, event => end(event));\n    }\n  }\n\n  _keydown(event) {\n    if (/input|textarea/i.test(event.target.tagName)) {\n      return;\n    }\n\n    const direction = KEY_TO_DIRECTION[event.key];\n\n    if (direction) {\n      event.preventDefault();\n\n      this._slide(direction);\n    }\n  }\n\n  _getItemIndex(element) {\n    this._items = element && element.parentNode ? SelectorEngine.find(SELECTOR_ITEM, element.parentNode) : [];\n    return this._items.indexOf(element);\n  }\n\n  _getItemByOrder(order, activeElement) {\n    const isNext = order === ORDER_NEXT;\n    return getNextActiveElement(this._items, activeElement, isNext, this._config.wrap);\n  }\n\n  _triggerSlideEvent(relatedTarget, eventDirectionName) {\n    const targetIndex = this._getItemIndex(relatedTarget);\n\n    const fromIndex = this._getItemIndex(SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element));\n\n    return EventHandler.trigger(this._element, EVENT_SLIDE, {\n      relatedTarget,\n      direction: eventDirectionName,\n      from: fromIndex,\n      to: targetIndex\n    });\n  }\n\n  _setActiveIndicatorElement(element) {\n    if (this._indicatorsElement) {\n      const activeIndicator = SelectorEngine.findOne(SELECTOR_ACTIVE$1, this._indicatorsElement);\n      activeIndicator.classList.remove(CLASS_NAME_ACTIVE$2);\n      activeIndicator.removeAttribute('aria-current');\n      const indicators = SelectorEngine.find(SELECTOR_INDICATOR, this._indicatorsElement);\n\n      for (let i = 0; i < indicators.length; i++) {\n        if (Number.parseInt(indicators[i].getAttribute('data-bs-slide-to'), 10) === this._getItemIndex(element)) {\n          indicators[i].classList.add(CLASS_NAME_ACTIVE$2);\n          indicators[i].setAttribute('aria-current', 'true');\n          break;\n        }\n      }\n    }\n  }\n\n  _updateInterval() {\n    const element = this._activeElement || SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element);\n\n    if (!element) {\n      return;\n    }\n\n    const elementInterval = Number.parseInt(element.getAttribute('data-bs-interval'), 10);\n\n    if (elementInterval) {\n      this._config.defaultInterval = this._config.defaultInterval || this._config.interval;\n      this._config.interval = elementInterval;\n    } else {\n      this._config.interval = this._config.defaultInterval || this._config.interval;\n    }\n  }\n\n  _slide(directionOrOrder, element) {\n    const order = this._directionToOrder(directionOrOrder);\n\n    const activeElement = SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element);\n\n    const activeElementIndex = this._getItemIndex(activeElement);\n\n    const nextElement = element || this._getItemByOrder(order, activeElement);\n\n    const nextElementIndex = this._getItemIndex(nextElement);\n\n    const isCycling = Boolean(this._interval);\n    const isNext = order === ORDER_NEXT;\n    const directionalClassName = isNext ? CLASS_NAME_START : CLASS_NAME_END;\n    const orderClassName = isNext ? CLASS_NAME_NEXT : CLASS_NAME_PREV;\n\n    const eventDirectionName = this._orderToDirection(order);\n\n    if (nextElement && nextElement.classList.contains(CLASS_NAME_ACTIVE$2)) {\n      this._isSliding = false;\n      return;\n    }\n\n    if (this._isSliding) {\n      return;\n    }\n\n    const slideEvent = this._triggerSlideEvent(nextElement, eventDirectionName);\n\n    if (slideEvent.defaultPrevented) {\n      return;\n    }\n\n    if (!activeElement || !nextElement) {\n      // Some weirdness is happening, so we bail\n      return;\n    }\n\n    this._isSliding = true;\n\n    if (isCycling) {\n      this.pause();\n    }\n\n    this._setActiveIndicatorElement(nextElement);\n\n    this._activeElement = nextElement;\n\n    const triggerSlidEvent = () => {\n      EventHandler.trigger(this._element, EVENT_SLID, {\n        relatedTarget: nextElement,\n        direction: eventDirectionName,\n        from: activeElementIndex,\n        to: nextElementIndex\n      });\n    };\n\n    if (this._element.classList.contains(CLASS_NAME_SLIDE)) {\n      nextElement.classList.add(orderClassName);\n      reflow(nextElement);\n      activeElement.classList.add(directionalClassName);\n      nextElement.classList.add(directionalClassName);\n\n      const completeCallBack = () => {\n        nextElement.classList.remove(directionalClassName, orderClassName);\n        nextElement.classList.add(CLASS_NAME_ACTIVE$2);\n        activeElement.classList.remove(CLASS_NAME_ACTIVE$2, orderClassName, directionalClassName);\n        this._isSliding = false;\n        setTimeout(triggerSlidEvent, 0);\n      };\n\n      this._queueCallback(completeCallBack, activeElement, true);\n    } else {\n      activeElement.classList.remove(CLASS_NAME_ACTIVE$2);\n      nextElement.classList.add(CLASS_NAME_ACTIVE$2);\n      this._isSliding = false;\n      triggerSlidEvent();\n    }\n\n    if (isCycling) {\n      this.cycle();\n    }\n  }\n\n  _directionToOrder(direction) {\n    if (![DIRECTION_RIGHT, DIRECTION_LEFT].includes(direction)) {\n      return direction;\n    }\n\n    if (isRTL()) {\n      return direction === DIRECTION_LEFT ? ORDER_PREV : ORDER_NEXT;\n    }\n\n    return direction === DIRECTION_LEFT ? ORDER_NEXT : ORDER_PREV;\n  }\n\n  _orderToDirection(order) {\n    if (![ORDER_NEXT, ORDER_PREV].includes(order)) {\n      return order;\n    }\n\n    if (isRTL()) {\n      return order === ORDER_PREV ? DIRECTION_LEFT : DIRECTION_RIGHT;\n    }\n\n    return order === ORDER_PREV ? DIRECTION_RIGHT : DIRECTION_LEFT;\n  } // Static\n\n\n  static carouselInterface(element, config) {\n    const data = Carousel.getOrCreateInstance(element, config);\n    let {\n      _config\n    } = data;\n\n    if (typeof config === 'object') {\n      _config = { ..._config,\n        ...config\n      };\n    }\n\n    const action = typeof config === 'string' ? config : _config.slide;\n\n    if (typeof config === 'number') {\n      data.to(config);\n    } else if (typeof action === 'string') {\n      if (typeof data[action] === 'undefined') {\n        throw new TypeError(`No method named \"${action}\"`);\n      }\n\n      data[action]();\n    } else if (_config.interval && _config.ride) {\n      data.pause();\n      data.cycle();\n    }\n  }\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      Carousel.carouselInterface(this, config);\n    });\n  }\n\n  static dataApiClickHandler(event) {\n    const target = getElementFromSelector(this);\n\n    if (!target || !target.classList.contains(CLASS_NAME_CAROUSEL)) {\n      return;\n    }\n\n    const config = { ...Manipulator.getDataAttributes(target),\n      ...Manipulator.getDataAttributes(this)\n    };\n    const slideIndex = this.getAttribute('data-bs-slide-to');\n\n    if (slideIndex) {\n      config.interval = false;\n    }\n\n    Carousel.carouselInterface(target, config);\n\n    if (slideIndex) {\n      Carousel.getInstance(target).to(slideIndex);\n    }\n\n    event.preventDefault();\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$5, SELECTOR_DATA_SLIDE, Carousel.dataApiClickHandler);\nEventHandler.on(window, EVENT_LOAD_DATA_API$2, () => {\n  const carousels = SelectorEngine.find(SELECTOR_DATA_RIDE);\n\n  for (let i = 0, len = carousels.length; i < len; i++) {\n    Carousel.carouselInterface(carousels[i], Carousel.getInstance(carousels[i]));\n  }\n});\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Carousel to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Carousel);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): collapse.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$9 = 'collapse';\nconst DATA_KEY$8 = 'bs.collapse';\nconst EVENT_KEY$8 = `.${DATA_KEY$8}`;\nconst DATA_API_KEY$5 = '.data-api';\nconst Default$8 = {\n  toggle: true,\n  parent: ''\n};\nconst DefaultType$8 = {\n  toggle: 'boolean',\n  parent: '(string|element)'\n};\nconst EVENT_SHOW$5 = `show${EVENT_KEY$8}`;\nconst EVENT_SHOWN$5 = `shown${EVENT_KEY$8}`;\nconst EVENT_HIDE$5 = `hide${EVENT_KEY$8}`;\nconst EVENT_HIDDEN$5 = `hidden${EVENT_KEY$8}`;\nconst EVENT_CLICK_DATA_API$4 = `click${EVENT_KEY$8}${DATA_API_KEY$5}`;\nconst CLASS_NAME_SHOW$8 = 'show';\nconst CLASS_NAME_COLLAPSE = 'collapse';\nconst CLASS_NAME_COLLAPSING = 'collapsing';\nconst CLASS_NAME_COLLAPSED = 'collapsed';\nconst WIDTH = 'width';\nconst HEIGHT = 'height';\nconst SELECTOR_ACTIVES = '.show, .collapsing';\nconst SELECTOR_DATA_TOGGLE$4 = '[data-bs-toggle=\"collapse\"]';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Collapse extends BaseComponent {\n  constructor(element, config) {\n    super(element);\n    this._isTransitioning = false;\n    this._config = this._getConfig(config);\n    this._triggerArray = SelectorEngine.find(`${SELECTOR_DATA_TOGGLE$4}[href=\"#${this._element.id}\"],` + `${SELECTOR_DATA_TOGGLE$4}[data-bs-target=\"#${this._element.id}\"]`);\n    const toggleList = SelectorEngine.find(SELECTOR_DATA_TOGGLE$4);\n\n    for (let i = 0, len = toggleList.length; i < len; i++) {\n      const elem = toggleList[i];\n      const selector = getSelectorFromElement(elem);\n      const filterElement = SelectorEngine.find(selector).filter(foundElem => foundElem === this._element);\n\n      if (selector !== null && filterElement.length) {\n        this._selector = selector;\n\n        this._triggerArray.push(elem);\n      }\n    }\n\n    this._parent = this._config.parent ? this._getParent() : null;\n\n    if (!this._config.parent) {\n      this._addAriaAndCollapsedClass(this._element, this._triggerArray);\n    }\n\n    if (this._config.toggle) {\n      this.toggle();\n    }\n  } // Getters\n\n\n  static get Default() {\n    return Default$8;\n  }\n\n  static get NAME() {\n    return NAME$9;\n  } // Public\n\n\n  toggle() {\n    if (this._element.classList.contains(CLASS_NAME_SHOW$8)) {\n      this.hide();\n    } else {\n      this.show();\n    }\n  }\n\n  show() {\n    if (this._isTransitioning || this._element.classList.contains(CLASS_NAME_SHOW$8)) {\n      return;\n    }\n\n    let actives;\n    let activesData;\n\n    if (this._parent) {\n      actives = SelectorEngine.find(SELECTOR_ACTIVES, this._parent).filter(elem => {\n        if (typeof this._config.parent === 'string') {\n          return elem.getAttribute('data-bs-parent') === this._config.parent;\n        }\n\n        return elem.classList.contains(CLASS_NAME_COLLAPSE);\n      });\n\n      if (actives.length === 0) {\n        actives = null;\n      }\n    }\n\n    const container = SelectorEngine.findOne(this._selector);\n\n    if (actives) {\n      const tempActiveData = actives.find(elem => container !== elem);\n      activesData = tempActiveData ? Collapse.getInstance(tempActiveData) : null;\n\n      if (activesData && activesData._isTransitioning) {\n        return;\n      }\n    }\n\n    const startEvent = EventHandler.trigger(this._element, EVENT_SHOW$5);\n\n    if (startEvent.defaultPrevented) {\n      return;\n    }\n\n    if (actives) {\n      actives.forEach(elemActive => {\n        if (container !== elemActive) {\n          Collapse.collapseInterface(elemActive, 'hide');\n        }\n\n        if (!activesData) {\n          Data.set(elemActive, DATA_KEY$8, null);\n        }\n      });\n    }\n\n    const dimension = this._getDimension();\n\n    this._element.classList.remove(CLASS_NAME_COLLAPSE);\n\n    this._element.classList.add(CLASS_NAME_COLLAPSING);\n\n    this._element.style[dimension] = 0;\n\n    if (this._triggerArray.length) {\n      this._triggerArray.forEach(element => {\n        element.classList.remove(CLASS_NAME_COLLAPSED);\n        element.setAttribute('aria-expanded', true);\n      });\n    }\n\n    this.setTransitioning(true);\n\n    const complete = () => {\n      this._element.classList.remove(CLASS_NAME_COLLAPSING);\n\n      this._element.classList.add(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$8);\n\n      this._element.style[dimension] = '';\n      this.setTransitioning(false);\n      EventHandler.trigger(this._element, EVENT_SHOWN$5);\n    };\n\n    const capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1);\n    const scrollSize = `scroll${capitalizedDimension}`;\n\n    this._queueCallback(complete, this._element, true);\n\n    this._element.style[dimension] = `${this._element[scrollSize]}px`;\n  }\n\n  hide() {\n    if (this._isTransitioning || !this._element.classList.contains(CLASS_NAME_SHOW$8)) {\n      return;\n    }\n\n    const startEvent = EventHandler.trigger(this._element, EVENT_HIDE$5);\n\n    if (startEvent.defaultPrevented) {\n      return;\n    }\n\n    const dimension = this._getDimension();\n\n    this._element.style[dimension] = `${this._element.getBoundingClientRect()[dimension]}px`;\n    reflow(this._element);\n\n    this._element.classList.add(CLASS_NAME_COLLAPSING);\n\n    this._element.classList.remove(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$8);\n\n    const triggerArrayLength = this._triggerArray.length;\n\n    if (triggerArrayLength > 0) {\n      for (let i = 0; i < triggerArrayLength; i++) {\n        const trigger = this._triggerArray[i];\n        const elem = getElementFromSelector(trigger);\n\n        if (elem && !elem.classList.contains(CLASS_NAME_SHOW$8)) {\n          trigger.classList.add(CLASS_NAME_COLLAPSED);\n          trigger.setAttribute('aria-expanded', false);\n        }\n      }\n    }\n\n    this.setTransitioning(true);\n\n    const complete = () => {\n      this.setTransitioning(false);\n\n      this._element.classList.remove(CLASS_NAME_COLLAPSING);\n\n      this._element.classList.add(CLASS_NAME_COLLAPSE);\n\n      EventHandler.trigger(this._element, EVENT_HIDDEN$5);\n    };\n\n    this._element.style[dimension] = '';\n\n    this._queueCallback(complete, this._element, true);\n  }\n\n  setTransitioning(isTransitioning) {\n    this._isTransitioning = isTransitioning;\n  } // Private\n\n\n  _getConfig(config) {\n    config = { ...Default$8,\n      ...config\n    };\n    config.toggle = Boolean(config.toggle); // Coerce string values\n\n    typeCheckConfig(NAME$9, config, DefaultType$8);\n    return config;\n  }\n\n  _getDimension() {\n    return this._element.classList.contains(WIDTH) ? WIDTH : HEIGHT;\n  }\n\n  _getParent() {\n    let {\n      parent\n    } = this._config;\n    parent = getElement(parent);\n    const selector = `${SELECTOR_DATA_TOGGLE$4}[data-bs-parent=\"${parent}\"]`;\n    SelectorEngine.find(selector, parent).forEach(element => {\n      const selected = getElementFromSelector(element);\n\n      this._addAriaAndCollapsedClass(selected, [element]);\n    });\n    return parent;\n  }\n\n  _addAriaAndCollapsedClass(element, triggerArray) {\n    if (!element || !triggerArray.length) {\n      return;\n    }\n\n    const isOpen = element.classList.contains(CLASS_NAME_SHOW$8);\n    triggerArray.forEach(elem => {\n      if (isOpen) {\n        elem.classList.remove(CLASS_NAME_COLLAPSED);\n      } else {\n        elem.classList.add(CLASS_NAME_COLLAPSED);\n      }\n\n      elem.setAttribute('aria-expanded', isOpen);\n    });\n  } // Static\n\n\n  static collapseInterface(element, config) {\n    let data = Collapse.getInstance(element);\n    const _config = { ...Default$8,\n      ...Manipulator.getDataAttributes(element),\n      ...(typeof config === 'object' && config ? config : {})\n    };\n\n    if (!data && _config.toggle && typeof config === 'string' && /show|hide/.test(config)) {\n      _config.toggle = false;\n    }\n\n    if (!data) {\n      data = new Collapse(element, _config);\n    }\n\n    if (typeof config === 'string') {\n      if (typeof data[config] === 'undefined') {\n        throw new TypeError(`No method named \"${config}\"`);\n      }\n\n      data[config]();\n    }\n  }\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      Collapse.collapseInterface(this, config);\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$4, SELECTOR_DATA_TOGGLE$4, function (event) {\n  // preventDefault only for <a> elements (which change the URL) not inside the collapsible element\n  if (event.target.tagName === 'A' || event.delegateTarget && event.delegateTarget.tagName === 'A') {\n    event.preventDefault();\n  }\n\n  const triggerData = Manipulator.getDataAttributes(this);\n  const selector = getSelectorFromElement(this);\n  const selectorElements = SelectorEngine.find(selector);\n  selectorElements.forEach(element => {\n    const data = Collapse.getInstance(element);\n    let config;\n\n    if (data) {\n      // update parent attribute\n      if (data._parent === null && typeof triggerData.parent === 'string') {\n        data._config.parent = triggerData.parent;\n        data._parent = data._getParent();\n      }\n\n      config = 'toggle';\n    } else {\n      config = triggerData;\n    }\n\n    Collapse.collapseInterface(element, config);\n  });\n});\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Collapse to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Collapse);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): dropdown.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$8 = 'dropdown';\nconst DATA_KEY$7 = 'bs.dropdown';\nconst EVENT_KEY$7 = `.${DATA_KEY$7}`;\nconst DATA_API_KEY$4 = '.data-api';\nconst ESCAPE_KEY$2 = 'Escape';\nconst SPACE_KEY = 'Space';\nconst TAB_KEY = 'Tab';\nconst ARROW_UP_KEY = 'ArrowUp';\nconst ARROW_DOWN_KEY = 'ArrowDown';\nconst RIGHT_MOUSE_BUTTON = 2; // MouseEvent.button value for the secondary button, usually the right button\n\nconst REGEXP_KEYDOWN = new RegExp(`${ARROW_UP_KEY}|${ARROW_DOWN_KEY}|${ESCAPE_KEY$2}`);\nconst EVENT_HIDE$4 = `hide${EVENT_KEY$7}`;\nconst EVENT_HIDDEN$4 = `hidden${EVENT_KEY$7}`;\nconst EVENT_SHOW$4 = `show${EVENT_KEY$7}`;\nconst EVENT_SHOWN$4 = `shown${EVENT_KEY$7}`;\nconst EVENT_CLICK = `click${EVENT_KEY$7}`;\nconst EVENT_CLICK_DATA_API$3 = `click${EVENT_KEY$7}${DATA_API_KEY$4}`;\nconst EVENT_KEYDOWN_DATA_API = `keydown${EVENT_KEY$7}${DATA_API_KEY$4}`;\nconst EVENT_KEYUP_DATA_API = `keyup${EVENT_KEY$7}${DATA_API_KEY$4}`;\nconst CLASS_NAME_SHOW$7 = 'show';\nconst CLASS_NAME_DROPUP = 'dropup';\nconst CLASS_NAME_DROPEND = 'dropend';\nconst CLASS_NAME_DROPSTART = 'dropstart';\nconst CLASS_NAME_NAVBAR = 'navbar';\nconst SELECTOR_DATA_TOGGLE$3 = '[data-bs-toggle=\"dropdown\"]';\nconst SELECTOR_MENU = '.dropdown-menu';\nconst SELECTOR_NAVBAR_NAV = '.navbar-nav';\nconst SELECTOR_VISIBLE_ITEMS = '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)';\nconst PLACEMENT_TOP = isRTL() ? 'top-end' : 'top-start';\nconst PLACEMENT_TOPEND = isRTL() ? 'top-start' : 'top-end';\nconst PLACEMENT_BOTTOM = isRTL() ? 'bottom-end' : 'bottom-start';\nconst PLACEMENT_BOTTOMEND = isRTL() ? 'bottom-start' : 'bottom-end';\nconst PLACEMENT_RIGHT = isRTL() ? 'left-start' : 'right-start';\nconst PLACEMENT_LEFT = isRTL() ? 'right-start' : 'left-start';\nconst Default$7 = {\n  offset: [0, 2],\n  boundary: 'clippingParents',\n  reference: 'toggle',\n  display: 'dynamic',\n  popperConfig: null,\n  autoClose: true\n};\nconst DefaultType$7 = {\n  offset: '(array|string|function)',\n  boundary: '(string|element)',\n  reference: '(string|element|object)',\n  display: 'string',\n  popperConfig: '(null|object|function)',\n  autoClose: '(boolean|string)'\n};\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Dropdown extends BaseComponent {\n  constructor(element, config) {\n    super(element);\n    this._popper = null;\n    this._config = this._getConfig(config);\n    this._menu = this._getMenuElement();\n    this._inNavbar = this._detectNavbar();\n\n    this._addEventListeners();\n  } // Getters\n\n\n  static get Default() {\n    return Default$7;\n  }\n\n  static get DefaultType() {\n    return DefaultType$7;\n  }\n\n  static get NAME() {\n    return NAME$8;\n  } // Public\n\n\n  toggle() {\n    if (isDisabled(this._element)) {\n      return;\n    }\n\n    const isActive = this._element.classList.contains(CLASS_NAME_SHOW$7);\n\n    if (isActive) {\n      this.hide();\n      return;\n    }\n\n    this.show();\n  }\n\n  show() {\n    if (isDisabled(this._element) || this._menu.classList.contains(CLASS_NAME_SHOW$7)) {\n      return;\n    }\n\n    const parent = Dropdown.getParentFromElement(this._element);\n    const relatedTarget = {\n      relatedTarget: this._element\n    };\n    const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$4, relatedTarget);\n\n    if (showEvent.defaultPrevented) {\n      return;\n    } // Totally disable Popper for Dropdowns in Navbar\n\n\n    if (this._inNavbar) {\n      Manipulator.setDataAttribute(this._menu, 'popper', 'none');\n    } else {\n      if (typeof Popper === 'undefined') {\n        throw new TypeError('Bootstrap\\'s dropdowns require Popper (https://popper.js.org)');\n      }\n\n      let referenceElement = this._element;\n\n      if (this._config.reference === 'parent') {\n        referenceElement = parent;\n      } else if (isElement(this._config.reference)) {\n        referenceElement = getElement(this._config.reference);\n      } else if (typeof this._config.reference === 'object') {\n        referenceElement = this._config.reference;\n      }\n\n      const popperConfig = this._getPopperConfig();\n\n      const isDisplayStatic = popperConfig.modifiers.find(modifier => modifier.name === 'applyStyles' && modifier.enabled === false);\n      this._popper = Popper.createPopper(referenceElement, this._menu, popperConfig);\n\n      if (isDisplayStatic) {\n        Manipulator.setDataAttribute(this._menu, 'popper', 'static');\n      }\n    } // If this is a touch-enabled device we add extra\n    // empty mouseover listeners to the body's immediate children;\n    // only needed because of broken event delegation on iOS\n    // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n\n\n    if ('ontouchstart' in document.documentElement && !parent.closest(SELECTOR_NAVBAR_NAV)) {\n      [].concat(...document.body.children).forEach(elem => EventHandler.on(elem, 'mouseover', noop));\n    }\n\n    this._element.focus();\n\n    this._element.setAttribute('aria-expanded', true);\n\n    this._menu.classList.toggle(CLASS_NAME_SHOW$7);\n\n    this._element.classList.toggle(CLASS_NAME_SHOW$7);\n\n    EventHandler.trigger(this._element, EVENT_SHOWN$4, relatedTarget);\n  }\n\n  hide() {\n    if (isDisabled(this._element) || !this._menu.classList.contains(CLASS_NAME_SHOW$7)) {\n      return;\n    }\n\n    const relatedTarget = {\n      relatedTarget: this._element\n    };\n\n    this._completeHide(relatedTarget);\n  }\n\n  dispose() {\n    if (this._popper) {\n      this._popper.destroy();\n    }\n\n    super.dispose();\n  }\n\n  update() {\n    this._inNavbar = this._detectNavbar();\n\n    if (this._popper) {\n      this._popper.update();\n    }\n  } // Private\n\n\n  _addEventListeners() {\n    EventHandler.on(this._element, EVENT_CLICK, event => {\n      event.preventDefault();\n      this.toggle();\n    });\n  }\n\n  _completeHide(relatedTarget) {\n    const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$4, relatedTarget);\n\n    if (hideEvent.defaultPrevented) {\n      return;\n    } // If this is a touch-enabled device we remove the extra\n    // empty mouseover listeners we added for iOS support\n\n\n    if ('ontouchstart' in document.documentElement) {\n      [].concat(...document.body.children).forEach(elem => EventHandler.off(elem, 'mouseover', noop));\n    }\n\n    if (this._popper) {\n      this._popper.destroy();\n    }\n\n    this._menu.classList.remove(CLASS_NAME_SHOW$7);\n\n    this._element.classList.remove(CLASS_NAME_SHOW$7);\n\n    this._element.setAttribute('aria-expanded', 'false');\n\n    Manipulator.removeDataAttribute(this._menu, 'popper');\n    EventHandler.trigger(this._element, EVENT_HIDDEN$4, relatedTarget);\n  }\n\n  _getConfig(config) {\n    config = { ...this.constructor.Default,\n      ...Manipulator.getDataAttributes(this._element),\n      ...config\n    };\n    typeCheckConfig(NAME$8, config, this.constructor.DefaultType);\n\n    if (typeof config.reference === 'object' && !isElement(config.reference) && typeof config.reference.getBoundingClientRect !== 'function') {\n      // Popper virtual elements require a getBoundingClientRect method\n      throw new TypeError(`${NAME$8.toUpperCase()}: Option \"reference\" provided type \"object\" without a required \"getBoundingClientRect\" method.`);\n    }\n\n    return config;\n  }\n\n  _getMenuElement() {\n    return SelectorEngine.next(this._element, SELECTOR_MENU)[0];\n  }\n\n  _getPlacement() {\n    const parentDropdown = this._element.parentNode;\n\n    if (parentDropdown.classList.contains(CLASS_NAME_DROPEND)) {\n      return PLACEMENT_RIGHT;\n    }\n\n    if (parentDropdown.classList.contains(CLASS_NAME_DROPSTART)) {\n      return PLACEMENT_LEFT;\n    } // We need to trim the value because custom properties can also include spaces\n\n\n    const isEnd = getComputedStyle(this._menu).getPropertyValue('--bs-position').trim() === 'end';\n\n    if (parentDropdown.classList.contains(CLASS_NAME_DROPUP)) {\n      return isEnd ? PLACEMENT_TOPEND : PLACEMENT_TOP;\n    }\n\n    return isEnd ? PLACEMENT_BOTTOMEND : PLACEMENT_BOTTOM;\n  }\n\n  _detectNavbar() {\n    return this._element.closest(`.${CLASS_NAME_NAVBAR}`) !== null;\n  }\n\n  _getOffset() {\n    const {\n      offset\n    } = this._config;\n\n    if (typeof offset === 'string') {\n      return offset.split(',').map(val => Number.parseInt(val, 10));\n    }\n\n    if (typeof offset === 'function') {\n      return popperData => offset(popperData, this._element);\n    }\n\n    return offset;\n  }\n\n  _getPopperConfig() {\n    const defaultBsPopperConfig = {\n      placement: this._getPlacement(),\n      modifiers: [{\n        name: 'preventOverflow',\n        options: {\n          boundary: this._config.boundary\n        }\n      }, {\n        name: 'offset',\n        options: {\n          offset: this._getOffset()\n        }\n      }]\n    }; // Disable Popper if we have a static display\n\n    if (this._config.display === 'static') {\n      defaultBsPopperConfig.modifiers = [{\n        name: 'applyStyles',\n        enabled: false\n      }];\n    }\n\n    return { ...defaultBsPopperConfig,\n      ...(typeof this._config.popperConfig === 'function' ? this._config.popperConfig(defaultBsPopperConfig) : this._config.popperConfig)\n    };\n  }\n\n  _selectMenuItem({\n    key,\n    target\n  }) {\n    const items = SelectorEngine.find(SELECTOR_VISIBLE_ITEMS, this._menu).filter(isVisible);\n\n    if (!items.length) {\n      return;\n    } // if target isn't included in items (e.g. when expanding the dropdown)\n    // allow cycling to get the last item in case key equals ARROW_UP_KEY\n\n\n    getNextActiveElement(items, target, key === ARROW_DOWN_KEY, !items.includes(target)).focus();\n  } // Static\n\n\n  static dropdownInterface(element, config) {\n    const data = Dropdown.getOrCreateInstance(element, config);\n\n    if (typeof config === 'string') {\n      if (typeof data[config] === 'undefined') {\n        throw new TypeError(`No method named \"${config}\"`);\n      }\n\n      data[config]();\n    }\n  }\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      Dropdown.dropdownInterface(this, config);\n    });\n  }\n\n  static clearMenus(event) {\n    if (event && (event.button === RIGHT_MOUSE_BUTTON || event.type === 'keyup' && event.key !== TAB_KEY)) {\n      return;\n    }\n\n    const toggles = SelectorEngine.find(SELECTOR_DATA_TOGGLE$3);\n\n    for (let i = 0, len = toggles.length; i < len; i++) {\n      const context = Dropdown.getInstance(toggles[i]);\n\n      if (!context || context._config.autoClose === false) {\n        continue;\n      }\n\n      if (!context._element.classList.contains(CLASS_NAME_SHOW$7)) {\n        continue;\n      }\n\n      const relatedTarget = {\n        relatedTarget: context._element\n      };\n\n      if (event) {\n        const composedPath = event.composedPath();\n        const isMenuTarget = composedPath.includes(context._menu);\n\n        if (composedPath.includes(context._element) || context._config.autoClose === 'inside' && !isMenuTarget || context._config.autoClose === 'outside' && isMenuTarget) {\n          continue;\n        } // Tab navigation through the dropdown menu or events from contained inputs shouldn't close the menu\n\n\n        if (context._menu.contains(event.target) && (event.type === 'keyup' && event.key === TAB_KEY || /input|select|option|textarea|form/i.test(event.target.tagName))) {\n          continue;\n        }\n\n        if (event.type === 'click') {\n          relatedTarget.clickEvent = event;\n        }\n      }\n\n      context._completeHide(relatedTarget);\n    }\n  }\n\n  static getParentFromElement(element) {\n    return getElementFromSelector(element) || element.parentNode;\n  }\n\n  static dataApiKeydownHandler(event) {\n    // If not input/textarea:\n    //  - And not a key in REGEXP_KEYDOWN => not a dropdown command\n    // If input/textarea:\n    //  - If space key => not a dropdown command\n    //  - If key is other than escape\n    //    - If key is not up or down => not a dropdown command\n    //    - If trigger inside the menu => not a dropdown command\n    if (/input|textarea/i.test(event.target.tagName) ? event.key === SPACE_KEY || event.key !== ESCAPE_KEY$2 && (event.key !== ARROW_DOWN_KEY && event.key !== ARROW_UP_KEY || event.target.closest(SELECTOR_MENU)) : !REGEXP_KEYDOWN.test(event.key)) {\n      return;\n    }\n\n    const isActive = this.classList.contains(CLASS_NAME_SHOW$7);\n\n    if (!isActive && event.key === ESCAPE_KEY$2) {\n      return;\n    }\n\n    event.preventDefault();\n    event.stopPropagation();\n\n    if (isDisabled(this)) {\n      return;\n    }\n\n    const getToggleButton = () => this.matches(SELECTOR_DATA_TOGGLE$3) ? this : SelectorEngine.prev(this, SELECTOR_DATA_TOGGLE$3)[0];\n\n    if (event.key === ESCAPE_KEY$2) {\n      getToggleButton().focus();\n      Dropdown.clearMenus();\n      return;\n    }\n\n    if (event.key === ARROW_UP_KEY || event.key === ARROW_DOWN_KEY) {\n      if (!isActive) {\n        getToggleButton().click();\n      }\n\n      Dropdown.getInstance(getToggleButton())._selectMenuItem(event);\n\n      return;\n    }\n\n    if (!isActive || event.key === SPACE_KEY) {\n      Dropdown.clearMenus();\n    }\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_DATA_TOGGLE$3, Dropdown.dataApiKeydownHandler);\nEventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown.dataApiKeydownHandler);\nEventHandler.on(document, EVENT_CLICK_DATA_API$3, Dropdown.clearMenus);\nEventHandler.on(document, EVENT_KEYUP_DATA_API, Dropdown.clearMenus);\nEventHandler.on(document, EVENT_CLICK_DATA_API$3, SELECTOR_DATA_TOGGLE$3, function (event) {\n  event.preventDefault();\n  Dropdown.dropdownInterface(this);\n});\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Dropdown to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Dropdown);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): util/scrollBar.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\nconst SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top';\nconst SELECTOR_STICKY_CONTENT = '.sticky-top';\n\nclass ScrollBarHelper {\n  constructor() {\n    this._element = document.body;\n  }\n\n  getWidth() {\n    // https://developer.mozilla.org/en-US/docs/Web/API/Window/innerWidth#usage_notes\n    const documentWidth = document.documentElement.clientWidth;\n    return Math.abs(window.innerWidth - documentWidth);\n  }\n\n  hide() {\n    const width = this.getWidth();\n\n    this._disableOverFlow(); // give padding to element to balance the hidden scrollbar width\n\n\n    this._setElementAttributes(this._element, 'paddingRight', calculatedValue => calculatedValue + width); // trick: We adjust positive paddingRight and negative marginRight to sticky-top elements to keep showing fullwidth\n\n\n    this._setElementAttributes(SELECTOR_FIXED_CONTENT, 'paddingRight', calculatedValue => calculatedValue + width);\n\n    this._setElementAttributes(SELECTOR_STICKY_CONTENT, 'marginRight', calculatedValue => calculatedValue - width);\n  }\n\n  _disableOverFlow() {\n    this._saveInitialAttribute(this._element, 'overflow');\n\n    this._element.style.overflow = 'hidden';\n  }\n\n  _setElementAttributes(selector, styleProp, callback) {\n    const scrollbarWidth = this.getWidth();\n\n    const manipulationCallBack = element => {\n      if (element !== this._element && window.innerWidth > element.clientWidth + scrollbarWidth) {\n        return;\n      }\n\n      this._saveInitialAttribute(element, styleProp);\n\n      const calculatedValue = window.getComputedStyle(element)[styleProp];\n      element.style[styleProp] = `${callback(Number.parseFloat(calculatedValue))}px`;\n    };\n\n    this._applyManipulationCallback(selector, manipulationCallBack);\n  }\n\n  reset() {\n    this._resetElementAttributes(this._element, 'overflow');\n\n    this._resetElementAttributes(this._element, 'paddingRight');\n\n    this._resetElementAttributes(SELECTOR_FIXED_CONTENT, 'paddingRight');\n\n    this._resetElementAttributes(SELECTOR_STICKY_CONTENT, 'marginRight');\n  }\n\n  _saveInitialAttribute(element, styleProp) {\n    const actualValue = element.style[styleProp];\n\n    if (actualValue) {\n      Manipulator.setDataAttribute(element, styleProp, actualValue);\n    }\n  }\n\n  _resetElementAttributes(selector, styleProp) {\n    const manipulationCallBack = element => {\n      const value = Manipulator.getDataAttribute(element, styleProp);\n\n      if (typeof value === 'undefined') {\n        element.style.removeProperty(styleProp);\n      } else {\n        Manipulator.removeDataAttribute(element, styleProp);\n        element.style[styleProp] = value;\n      }\n    };\n\n    this._applyManipulationCallback(selector, manipulationCallBack);\n  }\n\n  _applyManipulationCallback(selector, callBack) {\n    if (isElement(selector)) {\n      callBack(selector);\n    } else {\n      SelectorEngine.find(selector, this._element).forEach(callBack);\n    }\n  }\n\n  isOverflowing() {\n    return this.getWidth() > 0;\n  }\n\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): util/backdrop.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\nconst Default$6 = {\n  isVisible: true,\n  // if false, we use the backdrop helper without adding any element to the dom\n  isAnimated: false,\n  rootElement: 'body',\n  // give the choice to place backdrop under different elements\n  clickCallback: null\n};\nconst DefaultType$6 = {\n  isVisible: 'boolean',\n  isAnimated: 'boolean',\n  rootElement: '(element|string)',\n  clickCallback: '(function|null)'\n};\nconst NAME$7 = 'backdrop';\nconst CLASS_NAME_BACKDROP = 'modal-backdrop';\nconst CLASS_NAME_FADE$5 = 'fade';\nconst CLASS_NAME_SHOW$6 = 'show';\nconst EVENT_MOUSEDOWN = `mousedown.bs.${NAME$7}`;\n\nclass Backdrop {\n  constructor(config) {\n    this._config = this._getConfig(config);\n    this._isAppended = false;\n    this._element = null;\n  }\n\n  show(callback) {\n    if (!this._config.isVisible) {\n      execute(callback);\n      return;\n    }\n\n    this._append();\n\n    if (this._config.isAnimated) {\n      reflow(this._getElement());\n    }\n\n    this._getElement().classList.add(CLASS_NAME_SHOW$6);\n\n    this._emulateAnimation(() => {\n      execute(callback);\n    });\n  }\n\n  hide(callback) {\n    if (!this._config.isVisible) {\n      execute(callback);\n      return;\n    }\n\n    this._getElement().classList.remove(CLASS_NAME_SHOW$6);\n\n    this._emulateAnimation(() => {\n      this.dispose();\n      execute(callback);\n    });\n  } // Private\n\n\n  _getElement() {\n    if (!this._element) {\n      const backdrop = document.createElement('div');\n      backdrop.className = CLASS_NAME_BACKDROP;\n\n      if (this._config.isAnimated) {\n        backdrop.classList.add(CLASS_NAME_FADE$5);\n      }\n\n      this._element = backdrop;\n    }\n\n    return this._element;\n  }\n\n  _getConfig(config) {\n    config = { ...Default$6,\n      ...(typeof config === 'object' ? config : {})\n    }; // use getElement() with the default \"body\" to get a fresh Element on each instantiation\n\n    config.rootElement = getElement(config.rootElement);\n    typeCheckConfig(NAME$7, config, DefaultType$6);\n    return config;\n  }\n\n  _append() {\n    if (this._isAppended) {\n      return;\n    }\n\n    this._config.rootElement.appendChild(this._getElement());\n\n    EventHandler.on(this._getElement(), EVENT_MOUSEDOWN, () => {\n      execute(this._config.clickCallback);\n    });\n    this._isAppended = true;\n  }\n\n  dispose() {\n    if (!this._isAppended) {\n      return;\n    }\n\n    EventHandler.off(this._element, EVENT_MOUSEDOWN);\n\n    this._element.remove();\n\n    this._isAppended = false;\n  }\n\n  _emulateAnimation(callback) {\n    executeAfterTransition(callback, this._getElement(), this._config.isAnimated);\n  }\n\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): modal.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$6 = 'modal';\nconst DATA_KEY$6 = 'bs.modal';\nconst EVENT_KEY$6 = `.${DATA_KEY$6}`;\nconst DATA_API_KEY$3 = '.data-api';\nconst ESCAPE_KEY$1 = 'Escape';\nconst Default$5 = {\n  backdrop: true,\n  keyboard: true,\n  focus: true\n};\nconst DefaultType$5 = {\n  backdrop: '(boolean|string)',\n  keyboard: 'boolean',\n  focus: 'boolean'\n};\nconst EVENT_HIDE$3 = `hide${EVENT_KEY$6}`;\nconst EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY$6}`;\nconst EVENT_HIDDEN$3 = `hidden${EVENT_KEY$6}`;\nconst EVENT_SHOW$3 = `show${EVENT_KEY$6}`;\nconst EVENT_SHOWN$3 = `shown${EVENT_KEY$6}`;\nconst EVENT_FOCUSIN$2 = `focusin${EVENT_KEY$6}`;\nconst EVENT_RESIZE = `resize${EVENT_KEY$6}`;\nconst EVENT_CLICK_DISMISS$2 = `click.dismiss${EVENT_KEY$6}`;\nconst EVENT_KEYDOWN_DISMISS$1 = `keydown.dismiss${EVENT_KEY$6}`;\nconst EVENT_MOUSEUP_DISMISS = `mouseup.dismiss${EVENT_KEY$6}`;\nconst EVENT_MOUSEDOWN_DISMISS = `mousedown.dismiss${EVENT_KEY$6}`;\nconst EVENT_CLICK_DATA_API$2 = `click${EVENT_KEY$6}${DATA_API_KEY$3}`;\nconst CLASS_NAME_OPEN = 'modal-open';\nconst CLASS_NAME_FADE$4 = 'fade';\nconst CLASS_NAME_SHOW$5 = 'show';\nconst CLASS_NAME_STATIC = 'modal-static';\nconst SELECTOR_DIALOG = '.modal-dialog';\nconst SELECTOR_MODAL_BODY = '.modal-body';\nconst SELECTOR_DATA_TOGGLE$2 = '[data-bs-toggle=\"modal\"]';\nconst SELECTOR_DATA_DISMISS$2 = '[data-bs-dismiss=\"modal\"]';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Modal extends BaseComponent {\n  constructor(element, config) {\n    super(element);\n    this._config = this._getConfig(config);\n    this._dialog = SelectorEngine.findOne(SELECTOR_DIALOG, this._element);\n    this._backdrop = this._initializeBackDrop();\n    this._isShown = false;\n    this._ignoreBackdropClick = false;\n    this._isTransitioning = false;\n    this._scrollBar = new ScrollBarHelper();\n  } // Getters\n\n\n  static get Default() {\n    return Default$5;\n  }\n\n  static get NAME() {\n    return NAME$6;\n  } // Public\n\n\n  toggle(relatedTarget) {\n    return this._isShown ? this.hide() : this.show(relatedTarget);\n  }\n\n  show(relatedTarget) {\n    if (this._isShown || this._isTransitioning) {\n      return;\n    }\n\n    const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$3, {\n      relatedTarget\n    });\n\n    if (showEvent.defaultPrevented) {\n      return;\n    }\n\n    this._isShown = true;\n\n    if (this._isAnimated()) {\n      this._isTransitioning = true;\n    }\n\n    this._scrollBar.hide();\n\n    document.body.classList.add(CLASS_NAME_OPEN);\n\n    this._adjustDialog();\n\n    this._setEscapeEvent();\n\n    this._setResizeEvent();\n\n    EventHandler.on(this._element, EVENT_CLICK_DISMISS$2, SELECTOR_DATA_DISMISS$2, event => this.hide(event));\n    EventHandler.on(this._dialog, EVENT_MOUSEDOWN_DISMISS, () => {\n      EventHandler.one(this._element, EVENT_MOUSEUP_DISMISS, event => {\n        if (event.target === this._element) {\n          this._ignoreBackdropClick = true;\n        }\n      });\n    });\n\n    this._showBackdrop(() => this._showElement(relatedTarget));\n  }\n\n  hide(event) {\n    if (event && ['A', 'AREA'].includes(event.target.tagName)) {\n      event.preventDefault();\n    }\n\n    if (!this._isShown || this._isTransitioning) {\n      return;\n    }\n\n    const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$3);\n\n    if (hideEvent.defaultPrevented) {\n      return;\n    }\n\n    this._isShown = false;\n\n    const isAnimated = this._isAnimated();\n\n    if (isAnimated) {\n      this._isTransitioning = true;\n    }\n\n    this._setEscapeEvent();\n\n    this._setResizeEvent();\n\n    EventHandler.off(document, EVENT_FOCUSIN$2);\n\n    this._element.classList.remove(CLASS_NAME_SHOW$5);\n\n    EventHandler.off(this._element, EVENT_CLICK_DISMISS$2);\n    EventHandler.off(this._dialog, EVENT_MOUSEDOWN_DISMISS);\n\n    this._queueCallback(() => this._hideModal(), this._element, isAnimated);\n  }\n\n  dispose() {\n    [window, this._dialog].forEach(htmlElement => EventHandler.off(htmlElement, EVENT_KEY$6));\n\n    this._backdrop.dispose();\n\n    super.dispose();\n    /**\n     * `document` has 2 events `EVENT_FOCUSIN` and `EVENT_CLICK_DATA_API`\n     * Do not move `document` in `htmlElements` array\n     * It will remove `EVENT_CLICK_DATA_API` event that should remain\n     */\n\n    EventHandler.off(document, EVENT_FOCUSIN$2);\n  }\n\n  handleUpdate() {\n    this._adjustDialog();\n  } // Private\n\n\n  _initializeBackDrop() {\n    return new Backdrop({\n      isVisible: Boolean(this._config.backdrop),\n      // 'static' option will be translated to true, and booleans will keep their value\n      isAnimated: this._isAnimated()\n    });\n  }\n\n  _getConfig(config) {\n    config = { ...Default$5,\n      ...Manipulator.getDataAttributes(this._element),\n      ...(typeof config === 'object' ? config : {})\n    };\n    typeCheckConfig(NAME$6, config, DefaultType$5);\n    return config;\n  }\n\n  _showElement(relatedTarget) {\n    const isAnimated = this._isAnimated();\n\n    const modalBody = SelectorEngine.findOne(SELECTOR_MODAL_BODY, this._dialog);\n\n    if (!this._element.parentNode || this._element.parentNode.nodeType !== Node.ELEMENT_NODE) {\n      // Don't move modal's DOM position\n      document.body.appendChild(this._element);\n    }\n\n    this._element.style.display = 'block';\n\n    this._element.removeAttribute('aria-hidden');\n\n    this._element.setAttribute('aria-modal', true);\n\n    this._element.setAttribute('role', 'dialog');\n\n    this._element.scrollTop = 0;\n\n    if (modalBody) {\n      modalBody.scrollTop = 0;\n    }\n\n    if (isAnimated) {\n      reflow(this._element);\n    }\n\n    this._element.classList.add(CLASS_NAME_SHOW$5);\n\n    if (this._config.focus) {\n      this._enforceFocus();\n    }\n\n    const transitionComplete = () => {\n      if (this._config.focus) {\n        this._element.focus();\n      }\n\n      this._isTransitioning = false;\n      EventHandler.trigger(this._element, EVENT_SHOWN$3, {\n        relatedTarget\n      });\n    };\n\n    this._queueCallback(transitionComplete, this._dialog, isAnimated);\n  }\n\n  _enforceFocus() {\n    EventHandler.off(document, EVENT_FOCUSIN$2); // guard against infinite focus loop\n\n    EventHandler.on(document, EVENT_FOCUSIN$2, event => {\n      if (document !== event.target && this._element !== event.target && !this._element.contains(event.target)) {\n        this._element.focus();\n      }\n    });\n  }\n\n  _setEscapeEvent() {\n    if (this._isShown) {\n      EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS$1, event => {\n        if (this._config.keyboard && event.key === ESCAPE_KEY$1) {\n          event.preventDefault();\n          this.hide();\n        } else if (!this._config.keyboard && event.key === ESCAPE_KEY$1) {\n          this._triggerBackdropTransition();\n        }\n      });\n    } else {\n      EventHandler.off(this._element, EVENT_KEYDOWN_DISMISS$1);\n    }\n  }\n\n  _setResizeEvent() {\n    if (this._isShown) {\n      EventHandler.on(window, EVENT_RESIZE, () => this._adjustDialog());\n    } else {\n      EventHandler.off(window, EVENT_RESIZE);\n    }\n  }\n\n  _hideModal() {\n    this._element.style.display = 'none';\n\n    this._element.setAttribute('aria-hidden', true);\n\n    this._element.removeAttribute('aria-modal');\n\n    this._element.removeAttribute('role');\n\n    this._isTransitioning = false;\n\n    this._backdrop.hide(() => {\n      document.body.classList.remove(CLASS_NAME_OPEN);\n\n      this._resetAdjustments();\n\n      this._scrollBar.reset();\n\n      EventHandler.trigger(this._element, EVENT_HIDDEN$3);\n    });\n  }\n\n  _showBackdrop(callback) {\n    EventHandler.on(this._element, EVENT_CLICK_DISMISS$2, event => {\n      if (this._ignoreBackdropClick) {\n        this._ignoreBackdropClick = false;\n        return;\n      }\n\n      if (event.target !== event.currentTarget) {\n        return;\n      }\n\n      if (this._config.backdrop === true) {\n        this.hide();\n      } else if (this._config.backdrop === 'static') {\n        this._triggerBackdropTransition();\n      }\n    });\n\n    this._backdrop.show(callback);\n  }\n\n  _isAnimated() {\n    return this._element.classList.contains(CLASS_NAME_FADE$4);\n  }\n\n  _triggerBackdropTransition() {\n    const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED);\n\n    if (hideEvent.defaultPrevented) {\n      return;\n    }\n\n    const {\n      classList,\n      scrollHeight,\n      style\n    } = this._element;\n    const isModalOverflowing = scrollHeight > document.documentElement.clientHeight; // return if the following background transition hasn't yet completed\n\n    if (!isModalOverflowing && style.overflowY === 'hidden' || classList.contains(CLASS_NAME_STATIC)) {\n      return;\n    }\n\n    if (!isModalOverflowing) {\n      style.overflowY = 'hidden';\n    }\n\n    classList.add(CLASS_NAME_STATIC);\n\n    this._queueCallback(() => {\n      classList.remove(CLASS_NAME_STATIC);\n\n      if (!isModalOverflowing) {\n        this._queueCallback(() => {\n          style.overflowY = '';\n        }, this._dialog);\n      }\n    }, this._dialog);\n\n    this._element.focus();\n  } // ----------------------------------------------------------------------\n  // the following methods are used to handle overflowing modals\n  // ----------------------------------------------------------------------\n\n\n  _adjustDialog() {\n    const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;\n\n    const scrollbarWidth = this._scrollBar.getWidth();\n\n    const isBodyOverflowing = scrollbarWidth > 0;\n\n    if (!isBodyOverflowing && isModalOverflowing && !isRTL() || isBodyOverflowing && !isModalOverflowing && isRTL()) {\n      this._element.style.paddingLeft = `${scrollbarWidth}px`;\n    }\n\n    if (isBodyOverflowing && !isModalOverflowing && !isRTL() || !isBodyOverflowing && isModalOverflowing && isRTL()) {\n      this._element.style.paddingRight = `${scrollbarWidth}px`;\n    }\n  }\n\n  _resetAdjustments() {\n    this._element.style.paddingLeft = '';\n    this._element.style.paddingRight = '';\n  } // Static\n\n\n  static jQueryInterface(config, relatedTarget) {\n    return this.each(function () {\n      const data = Modal.getOrCreateInstance(this, config);\n\n      if (typeof config !== 'string') {\n        return;\n      }\n\n      if (typeof data[config] === 'undefined') {\n        throw new TypeError(`No method named \"${config}\"`);\n      }\n\n      data[config](relatedTarget);\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$2, SELECTOR_DATA_TOGGLE$2, function (event) {\n  const target = getElementFromSelector(this);\n\n  if (['A', 'AREA'].includes(this.tagName)) {\n    event.preventDefault();\n  }\n\n  EventHandler.one(target, EVENT_SHOW$3, showEvent => {\n    if (showEvent.defaultPrevented) {\n      // only register focus restorer if modal will actually get shown\n      return;\n    }\n\n    EventHandler.one(target, EVENT_HIDDEN$3, () => {\n      if (isVisible(this)) {\n        this.focus();\n      }\n    });\n  });\n  const data = Modal.getOrCreateInstance(target);\n  data.toggle(this);\n});\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Modal to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Modal);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): offcanvas.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$5 = 'offcanvas';\nconst DATA_KEY$5 = 'bs.offcanvas';\nconst EVENT_KEY$5 = `.${DATA_KEY$5}`;\nconst DATA_API_KEY$2 = '.data-api';\nconst EVENT_LOAD_DATA_API$1 = `load${EVENT_KEY$5}${DATA_API_KEY$2}`;\nconst ESCAPE_KEY = 'Escape';\nconst Default$4 = {\n  backdrop: true,\n  keyboard: true,\n  scroll: false\n};\nconst DefaultType$4 = {\n  backdrop: 'boolean',\n  keyboard: 'boolean',\n  scroll: 'boolean'\n};\nconst CLASS_NAME_SHOW$4 = 'show';\nconst OPEN_SELECTOR = '.offcanvas.show';\nconst EVENT_SHOW$2 = `show${EVENT_KEY$5}`;\nconst EVENT_SHOWN$2 = `shown${EVENT_KEY$5}`;\nconst EVENT_HIDE$2 = `hide${EVENT_KEY$5}`;\nconst EVENT_HIDDEN$2 = `hidden${EVENT_KEY$5}`;\nconst EVENT_FOCUSIN$1 = `focusin${EVENT_KEY$5}`;\nconst EVENT_CLICK_DATA_API$1 = `click${EVENT_KEY$5}${DATA_API_KEY$2}`;\nconst EVENT_CLICK_DISMISS$1 = `click.dismiss${EVENT_KEY$5}`;\nconst EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY$5}`;\nconst SELECTOR_DATA_DISMISS$1 = '[data-bs-dismiss=\"offcanvas\"]';\nconst SELECTOR_DATA_TOGGLE$1 = '[data-bs-toggle=\"offcanvas\"]';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Offcanvas extends BaseComponent {\n  constructor(element, config) {\n    super(element);\n    this._config = this._getConfig(config);\n    this._isShown = false;\n    this._backdrop = this._initializeBackDrop();\n\n    this._addEventListeners();\n  } // Getters\n\n\n  static get NAME() {\n    return NAME$5;\n  }\n\n  static get Default() {\n    return Default$4;\n  } // Public\n\n\n  toggle(relatedTarget) {\n    return this._isShown ? this.hide() : this.show(relatedTarget);\n  }\n\n  show(relatedTarget) {\n    if (this._isShown) {\n      return;\n    }\n\n    const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$2, {\n      relatedTarget\n    });\n\n    if (showEvent.defaultPrevented) {\n      return;\n    }\n\n    this._isShown = true;\n    this._element.style.visibility = 'visible';\n\n    this._backdrop.show();\n\n    if (!this._config.scroll) {\n      new ScrollBarHelper().hide();\n\n      this._enforceFocusOnElement(this._element);\n    }\n\n    this._element.removeAttribute('aria-hidden');\n\n    this._element.setAttribute('aria-modal', true);\n\n    this._element.setAttribute('role', 'dialog');\n\n    this._element.classList.add(CLASS_NAME_SHOW$4);\n\n    const completeCallBack = () => {\n      EventHandler.trigger(this._element, EVENT_SHOWN$2, {\n        relatedTarget\n      });\n    };\n\n    this._queueCallback(completeCallBack, this._element, true);\n  }\n\n  hide() {\n    if (!this._isShown) {\n      return;\n    }\n\n    const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$2);\n\n    if (hideEvent.defaultPrevented) {\n      return;\n    }\n\n    EventHandler.off(document, EVENT_FOCUSIN$1);\n\n    this._element.blur();\n\n    this._isShown = false;\n\n    this._element.classList.remove(CLASS_NAME_SHOW$4);\n\n    this._backdrop.hide();\n\n    const completeCallback = () => {\n      this._element.setAttribute('aria-hidden', true);\n\n      this._element.removeAttribute('aria-modal');\n\n      this._element.removeAttribute('role');\n\n      this._element.style.visibility = 'hidden';\n\n      if (!this._config.scroll) {\n        new ScrollBarHelper().reset();\n      }\n\n      EventHandler.trigger(this._element, EVENT_HIDDEN$2);\n    };\n\n    this._queueCallback(completeCallback, this._element, true);\n  }\n\n  dispose() {\n    this._backdrop.dispose();\n\n    super.dispose();\n    EventHandler.off(document, EVENT_FOCUSIN$1);\n  } // Private\n\n\n  _getConfig(config) {\n    config = { ...Default$4,\n      ...Manipulator.getDataAttributes(this._element),\n      ...(typeof config === 'object' ? config : {})\n    };\n    typeCheckConfig(NAME$5, config, DefaultType$4);\n    return config;\n  }\n\n  _initializeBackDrop() {\n    return new Backdrop({\n      isVisible: this._config.backdrop,\n      isAnimated: true,\n      rootElement: this._element.parentNode,\n      clickCallback: () => this.hide()\n    });\n  }\n\n  _enforceFocusOnElement(element) {\n    EventHandler.off(document, EVENT_FOCUSIN$1); // guard against infinite focus loop\n\n    EventHandler.on(document, EVENT_FOCUSIN$1, event => {\n      if (document !== event.target && element !== event.target && !element.contains(event.target)) {\n        element.focus();\n      }\n    });\n    element.focus();\n  }\n\n  _addEventListeners() {\n    EventHandler.on(this._element, EVENT_CLICK_DISMISS$1, SELECTOR_DATA_DISMISS$1, () => this.hide());\n    EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS, event => {\n      if (this._config.keyboard && event.key === ESCAPE_KEY) {\n        this.hide();\n      }\n    });\n  } // Static\n\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Offcanvas.getOrCreateInstance(this, config);\n\n      if (typeof config !== 'string') {\n        return;\n      }\n\n      if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n        throw new TypeError(`No method named \"${config}\"`);\n      }\n\n      data[config](this);\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$1, SELECTOR_DATA_TOGGLE$1, function (event) {\n  const target = getElementFromSelector(this);\n\n  if (['A', 'AREA'].includes(this.tagName)) {\n    event.preventDefault();\n  }\n\n  if (isDisabled(this)) {\n    return;\n  }\n\n  EventHandler.one(target, EVENT_HIDDEN$2, () => {\n    // focus on trigger when it is closed\n    if (isVisible(this)) {\n      this.focus();\n    }\n  }); // avoid conflict when clicking a toggler of an offcanvas, while another is open\n\n  const allReadyOpen = SelectorEngine.findOne(OPEN_SELECTOR);\n\n  if (allReadyOpen && allReadyOpen !== target) {\n    Offcanvas.getInstance(allReadyOpen).hide();\n  }\n\n  const data = Offcanvas.getOrCreateInstance(target);\n  data.toggle(this);\n});\nEventHandler.on(window, EVENT_LOAD_DATA_API$1, () => SelectorEngine.find(OPEN_SELECTOR).forEach(el => Offcanvas.getOrCreateInstance(el).show()));\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\ndefineJQueryPlugin(Offcanvas);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): util/sanitizer.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\nconst uriAttrs = new Set(['background', 'cite', 'href', 'itemtype', 'longdesc', 'poster', 'src', 'xlink:href']);\nconst ARIA_ATTRIBUTE_PATTERN = /^aria-[\\w-]*$/i;\n/**\n * A pattern that recognizes a commonly useful subset of URLs that are safe.\n *\n * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts\n */\n\nconst SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file):|[^#&/:?]*(?:[#/?]|$))/i;\n/**\n * A pattern that matches safe data URLs. Only matches image, video and audio types.\n *\n * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts\n */\n\nconst DATA_URL_PATTERN = /^data:(?:image\\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\\/(?:mpeg|mp4|ogg|webm)|audio\\/(?:mp3|oga|ogg|opus));base64,[\\d+/a-z]+=*$/i;\n\nconst allowedAttribute = (attr, allowedAttributeList) => {\n  const attrName = attr.nodeName.toLowerCase();\n\n  if (allowedAttributeList.includes(attrName)) {\n    if (uriAttrs.has(attrName)) {\n      return Boolean(SAFE_URL_PATTERN.test(attr.nodeValue) || DATA_URL_PATTERN.test(attr.nodeValue));\n    }\n\n    return true;\n  }\n\n  const regExp = allowedAttributeList.filter(attrRegex => attrRegex instanceof RegExp); // Check if a regular expression validates the attribute.\n\n  for (let i = 0, len = regExp.length; i < len; i++) {\n    if (regExp[i].test(attrName)) {\n      return true;\n    }\n  }\n\n  return false;\n};\n\nconst DefaultAllowlist = {\n  // Global attributes allowed on any supplied element below.\n  '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],\n  a: ['target', 'href', 'title', 'rel'],\n  area: [],\n  b: [],\n  br: [],\n  col: [],\n  code: [],\n  div: [],\n  em: [],\n  hr: [],\n  h1: [],\n  h2: [],\n  h3: [],\n  h4: [],\n  h5: [],\n  h6: [],\n  i: [],\n  img: ['src', 'srcset', 'alt', 'title', 'width', 'height'],\n  li: [],\n  ol: [],\n  p: [],\n  pre: [],\n  s: [],\n  small: [],\n  span: [],\n  sub: [],\n  sup: [],\n  strong: [],\n  u: [],\n  ul: []\n};\nfunction sanitizeHtml(unsafeHtml, allowList, sanitizeFn) {\n  if (!unsafeHtml.length) {\n    return unsafeHtml;\n  }\n\n  if (sanitizeFn && typeof sanitizeFn === 'function') {\n    return sanitizeFn(unsafeHtml);\n  }\n\n  const domParser = new window.DOMParser();\n  const createdDocument = domParser.parseFromString(unsafeHtml, 'text/html');\n  const allowlistKeys = Object.keys(allowList);\n  const elements = [].concat(...createdDocument.body.querySelectorAll('*'));\n\n  for (let i = 0, len = elements.length; i < len; i++) {\n    const el = elements[i];\n    const elName = el.nodeName.toLowerCase();\n\n    if (!allowlistKeys.includes(elName)) {\n      el.remove();\n      continue;\n    }\n\n    const attributeList = [].concat(...el.attributes);\n    const allowedAttributes = [].concat(allowList['*'] || [], allowList[elName] || []);\n    attributeList.forEach(attr => {\n      if (!allowedAttribute(attr, allowedAttributes)) {\n        el.removeAttribute(attr.nodeName);\n      }\n    });\n  }\n\n  return createdDocument.body.innerHTML;\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): tooltip.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$4 = 'tooltip';\nconst DATA_KEY$4 = 'bs.tooltip';\nconst EVENT_KEY$4 = `.${DATA_KEY$4}`;\nconst CLASS_PREFIX$1 = 'bs-tooltip';\nconst BSCLS_PREFIX_REGEX$1 = new RegExp(`(^|\\\\s)${CLASS_PREFIX$1}\\\\S+`, 'g');\nconst DISALLOWED_ATTRIBUTES = new Set(['sanitize', 'allowList', 'sanitizeFn']);\nconst DefaultType$3 = {\n  animation: 'boolean',\n  template: 'string',\n  title: '(string|element|function)',\n  trigger: 'string',\n  delay: '(number|object)',\n  html: 'boolean',\n  selector: '(string|boolean)',\n  placement: '(string|function)',\n  offset: '(array|string|function)',\n  container: '(string|element|boolean)',\n  fallbackPlacements: 'array',\n  boundary: '(string|element)',\n  customClass: '(string|function)',\n  sanitize: 'boolean',\n  sanitizeFn: '(null|function)',\n  allowList: 'object',\n  popperConfig: '(null|object|function)'\n};\nconst AttachmentMap = {\n  AUTO: 'auto',\n  TOP: 'top',\n  RIGHT: isRTL() ? 'left' : 'right',\n  BOTTOM: 'bottom',\n  LEFT: isRTL() ? 'right' : 'left'\n};\nconst Default$3 = {\n  animation: true,\n  template: '<div class=\"tooltip\" role=\"tooltip\">' + '<div class=\"tooltip-arrow\"></div>' + '<div class=\"tooltip-inner\"></div>' + '</div>',\n  trigger: 'hover focus',\n  title: '',\n  delay: 0,\n  html: false,\n  selector: false,\n  placement: 'top',\n  offset: [0, 0],\n  container: false,\n  fallbackPlacements: ['top', 'right', 'bottom', 'left'],\n  boundary: 'clippingParents',\n  customClass: '',\n  sanitize: true,\n  sanitizeFn: null,\n  allowList: DefaultAllowlist,\n  popperConfig: null\n};\nconst Event$2 = {\n  HIDE: `hide${EVENT_KEY$4}`,\n  HIDDEN: `hidden${EVENT_KEY$4}`,\n  SHOW: `show${EVENT_KEY$4}`,\n  SHOWN: `shown${EVENT_KEY$4}`,\n  INSERTED: `inserted${EVENT_KEY$4}`,\n  CLICK: `click${EVENT_KEY$4}`,\n  FOCUSIN: `focusin${EVENT_KEY$4}`,\n  FOCUSOUT: `focusout${EVENT_KEY$4}`,\n  MOUSEENTER: `mouseenter${EVENT_KEY$4}`,\n  MOUSELEAVE: `mouseleave${EVENT_KEY$4}`\n};\nconst CLASS_NAME_FADE$3 = 'fade';\nconst CLASS_NAME_MODAL = 'modal';\nconst CLASS_NAME_SHOW$3 = 'show';\nconst HOVER_STATE_SHOW = 'show';\nconst HOVER_STATE_OUT = 'out';\nconst SELECTOR_TOOLTIP_INNER = '.tooltip-inner';\nconst TRIGGER_HOVER = 'hover';\nconst TRIGGER_FOCUS = 'focus';\nconst TRIGGER_CLICK = 'click';\nconst TRIGGER_MANUAL = 'manual';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Tooltip extends BaseComponent {\n  constructor(element, config) {\n    if (typeof Popper === 'undefined') {\n      throw new TypeError('Bootstrap\\'s tooltips require Popper (https://popper.js.org)');\n    }\n\n    super(element); // private\n\n    this._isEnabled = true;\n    this._timeout = 0;\n    this._hoverState = '';\n    this._activeTrigger = {};\n    this._popper = null; // Protected\n\n    this._config = this._getConfig(config);\n    this.tip = null;\n\n    this._setListeners();\n  } // Getters\n\n\n  static get Default() {\n    return Default$3;\n  }\n\n  static get NAME() {\n    return NAME$4;\n  }\n\n  static get Event() {\n    return Event$2;\n  }\n\n  static get DefaultType() {\n    return DefaultType$3;\n  } // Public\n\n\n  enable() {\n    this._isEnabled = true;\n  }\n\n  disable() {\n    this._isEnabled = false;\n  }\n\n  toggleEnabled() {\n    this._isEnabled = !this._isEnabled;\n  }\n\n  toggle(event) {\n    if (!this._isEnabled) {\n      return;\n    }\n\n    if (event) {\n      const context = this._initializeOnDelegatedTarget(event);\n\n      context._activeTrigger.click = !context._activeTrigger.click;\n\n      if (context._isWithActiveTrigger()) {\n        context._enter(null, context);\n      } else {\n        context._leave(null, context);\n      }\n    } else {\n      if (this.getTipElement().classList.contains(CLASS_NAME_SHOW$3)) {\n        this._leave(null, this);\n\n        return;\n      }\n\n      this._enter(null, this);\n    }\n  }\n\n  dispose() {\n    clearTimeout(this._timeout);\n    EventHandler.off(this._element.closest(`.${CLASS_NAME_MODAL}`), 'hide.bs.modal', this._hideModalHandler);\n\n    if (this.tip) {\n      this.tip.remove();\n    }\n\n    if (this._popper) {\n      this._popper.destroy();\n    }\n\n    super.dispose();\n  }\n\n  show() {\n    if (this._element.style.display === 'none') {\n      throw new Error('Please use show on visible elements');\n    }\n\n    if (!(this.isWithContent() && this._isEnabled)) {\n      return;\n    }\n\n    const showEvent = EventHandler.trigger(this._element, this.constructor.Event.SHOW);\n    const shadowRoot = findShadowRoot(this._element);\n    const isInTheDom = shadowRoot === null ? this._element.ownerDocument.documentElement.contains(this._element) : shadowRoot.contains(this._element);\n\n    if (showEvent.defaultPrevented || !isInTheDom) {\n      return;\n    }\n\n    const tip = this.getTipElement();\n    const tipId = getUID(this.constructor.NAME);\n    tip.setAttribute('id', tipId);\n\n    this._element.setAttribute('aria-describedby', tipId);\n\n    this.setContent();\n\n    if (this._config.animation) {\n      tip.classList.add(CLASS_NAME_FADE$3);\n    }\n\n    const placement = typeof this._config.placement === 'function' ? this._config.placement.call(this, tip, this._element) : this._config.placement;\n\n    const attachment = this._getAttachment(placement);\n\n    this._addAttachmentClass(attachment);\n\n    const {\n      container\n    } = this._config;\n    Data.set(tip, this.constructor.DATA_KEY, this);\n\n    if (!this._element.ownerDocument.documentElement.contains(this.tip)) {\n      container.appendChild(tip);\n      EventHandler.trigger(this._element, this.constructor.Event.INSERTED);\n    }\n\n    if (this._popper) {\n      this._popper.update();\n    } else {\n      this._popper = Popper.createPopper(this._element, tip, this._getPopperConfig(attachment));\n    }\n\n    tip.classList.add(CLASS_NAME_SHOW$3);\n    const customClass = typeof this._config.customClass === 'function' ? this._config.customClass() : this._config.customClass;\n\n    if (customClass) {\n      tip.classList.add(...customClass.split(' '));\n    } // If this is a touch-enabled device we add extra\n    // empty mouseover listeners to the body's immediate children;\n    // only needed because of broken event delegation on iOS\n    // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n\n\n    if ('ontouchstart' in document.documentElement) {\n      [].concat(...document.body.children).forEach(element => {\n        EventHandler.on(element, 'mouseover', noop);\n      });\n    }\n\n    const complete = () => {\n      const prevHoverState = this._hoverState;\n      this._hoverState = null;\n      EventHandler.trigger(this._element, this.constructor.Event.SHOWN);\n\n      if (prevHoverState === HOVER_STATE_OUT) {\n        this._leave(null, this);\n      }\n    };\n\n    const isAnimated = this.tip.classList.contains(CLASS_NAME_FADE$3);\n\n    this._queueCallback(complete, this.tip, isAnimated);\n  }\n\n  hide() {\n    if (!this._popper) {\n      return;\n    }\n\n    const tip = this.getTipElement();\n\n    const complete = () => {\n      if (this._isWithActiveTrigger()) {\n        return;\n      }\n\n      if (this._hoverState !== HOVER_STATE_SHOW) {\n        tip.remove();\n      }\n\n      this._cleanTipClass();\n\n      this._element.removeAttribute('aria-describedby');\n\n      EventHandler.trigger(this._element, this.constructor.Event.HIDDEN);\n\n      if (this._popper) {\n        this._popper.destroy();\n\n        this._popper = null;\n      }\n    };\n\n    const hideEvent = EventHandler.trigger(this._element, this.constructor.Event.HIDE);\n\n    if (hideEvent.defaultPrevented) {\n      return;\n    }\n\n    tip.classList.remove(CLASS_NAME_SHOW$3); // If this is a touch-enabled device we remove the extra\n    // empty mouseover listeners we added for iOS support\n\n    if ('ontouchstart' in document.documentElement) {\n      [].concat(...document.body.children).forEach(element => EventHandler.off(element, 'mouseover', noop));\n    }\n\n    this._activeTrigger[TRIGGER_CLICK] = false;\n    this._activeTrigger[TRIGGER_FOCUS] = false;\n    this._activeTrigger[TRIGGER_HOVER] = false;\n    const isAnimated = this.tip.classList.contains(CLASS_NAME_FADE$3);\n\n    this._queueCallback(complete, this.tip, isAnimated);\n\n    this._hoverState = '';\n  }\n\n  update() {\n    if (this._popper !== null) {\n      this._popper.update();\n    }\n  } // Protected\n\n\n  isWithContent() {\n    return Boolean(this.getTitle());\n  }\n\n  getTipElement() {\n    if (this.tip) {\n      return this.tip;\n    }\n\n    const element = document.createElement('div');\n    element.innerHTML = this._config.template;\n    this.tip = element.children[0];\n    return this.tip;\n  }\n\n  setContent() {\n    const tip = this.getTipElement();\n    this.setElementContent(SelectorEngine.findOne(SELECTOR_TOOLTIP_INNER, tip), this.getTitle());\n    tip.classList.remove(CLASS_NAME_FADE$3, CLASS_NAME_SHOW$3);\n  }\n\n  setElementContent(element, content) {\n    if (element === null) {\n      return;\n    }\n\n    if (isElement(content)) {\n      content = getElement(content); // content is a DOM node or a jQuery\n\n      if (this._config.html) {\n        if (content.parentNode !== element) {\n          element.innerHTML = '';\n          element.appendChild(content);\n        }\n      } else {\n        element.textContent = content.textContent;\n      }\n\n      return;\n    }\n\n    if (this._config.html) {\n      if (this._config.sanitize) {\n        content = sanitizeHtml(content, this._config.allowList, this._config.sanitizeFn);\n      }\n\n      element.innerHTML = content;\n    } else {\n      element.textContent = content;\n    }\n  }\n\n  getTitle() {\n    let title = this._element.getAttribute('data-bs-original-title');\n\n    if (!title) {\n      title = typeof this._config.title === 'function' ? this._config.title.call(this._element) : this._config.title;\n    }\n\n    return title;\n  }\n\n  updateAttachment(attachment) {\n    if (attachment === 'right') {\n      return 'end';\n    }\n\n    if (attachment === 'left') {\n      return 'start';\n    }\n\n    return attachment;\n  } // Private\n\n\n  _initializeOnDelegatedTarget(event, context) {\n    const dataKey = this.constructor.DATA_KEY;\n    context = context || Data.get(event.delegateTarget, dataKey);\n\n    if (!context) {\n      context = new this.constructor(event.delegateTarget, this._getDelegateConfig());\n      Data.set(event.delegateTarget, dataKey, context);\n    }\n\n    return context;\n  }\n\n  _getOffset() {\n    const {\n      offset\n    } = this._config;\n\n    if (typeof offset === 'string') {\n      return offset.split(',').map(val => Number.parseInt(val, 10));\n    }\n\n    if (typeof offset === 'function') {\n      return popperData => offset(popperData, this._element);\n    }\n\n    return offset;\n  }\n\n  _getPopperConfig(attachment) {\n    const defaultBsPopperConfig = {\n      placement: attachment,\n      modifiers: [{\n        name: 'flip',\n        options: {\n          fallbackPlacements: this._config.fallbackPlacements\n        }\n      }, {\n        name: 'offset',\n        options: {\n          offset: this._getOffset()\n        }\n      }, {\n        name: 'preventOverflow',\n        options: {\n          boundary: this._config.boundary\n        }\n      }, {\n        name: 'arrow',\n        options: {\n          element: `.${this.constructor.NAME}-arrow`\n        }\n      }, {\n        name: 'onChange',\n        enabled: true,\n        phase: 'afterWrite',\n        fn: data => this._handlePopperPlacementChange(data)\n      }],\n      onFirstUpdate: data => {\n        if (data.options.placement !== data.placement) {\n          this._handlePopperPlacementChange(data);\n        }\n      }\n    };\n    return { ...defaultBsPopperConfig,\n      ...(typeof this._config.popperConfig === 'function' ? this._config.popperConfig(defaultBsPopperConfig) : this._config.popperConfig)\n    };\n  }\n\n  _addAttachmentClass(attachment) {\n    this.getTipElement().classList.add(`${CLASS_PREFIX$1}-${this.updateAttachment(attachment)}`);\n  }\n\n  _getAttachment(placement) {\n    return AttachmentMap[placement.toUpperCase()];\n  }\n\n  _setListeners() {\n    const triggers = this._config.trigger.split(' ');\n\n    triggers.forEach(trigger => {\n      if (trigger === 'click') {\n        EventHandler.on(this._element, this.constructor.Event.CLICK, this._config.selector, event => this.toggle(event));\n      } else if (trigger !== TRIGGER_MANUAL) {\n        const eventIn = trigger === TRIGGER_HOVER ? this.constructor.Event.MOUSEENTER : this.constructor.Event.FOCUSIN;\n        const eventOut = trigger === TRIGGER_HOVER ? this.constructor.Event.MOUSELEAVE : this.constructor.Event.FOCUSOUT;\n        EventHandler.on(this._element, eventIn, this._config.selector, event => this._enter(event));\n        EventHandler.on(this._element, eventOut, this._config.selector, event => this._leave(event));\n      }\n    });\n\n    this._hideModalHandler = () => {\n      if (this._element) {\n        this.hide();\n      }\n    };\n\n    EventHandler.on(this._element.closest(`.${CLASS_NAME_MODAL}`), 'hide.bs.modal', this._hideModalHandler);\n\n    if (this._config.selector) {\n      this._config = { ...this._config,\n        trigger: 'manual',\n        selector: ''\n      };\n    } else {\n      this._fixTitle();\n    }\n  }\n\n  _fixTitle() {\n    const title = this._element.getAttribute('title');\n\n    const originalTitleType = typeof this._element.getAttribute('data-bs-original-title');\n\n    if (title || originalTitleType !== 'string') {\n      this._element.setAttribute('data-bs-original-title', title || '');\n\n      if (title && !this._element.getAttribute('aria-label') && !this._element.textContent) {\n        this._element.setAttribute('aria-label', title);\n      }\n\n      this._element.setAttribute('title', '');\n    }\n  }\n\n  _enter(event, context) {\n    context = this._initializeOnDelegatedTarget(event, context);\n\n    if (event) {\n      context._activeTrigger[event.type === 'focusin' ? TRIGGER_FOCUS : TRIGGER_HOVER] = true;\n    }\n\n    if (context.getTipElement().classList.contains(CLASS_NAME_SHOW$3) || context._hoverState === HOVER_STATE_SHOW) {\n      context._hoverState = HOVER_STATE_SHOW;\n      return;\n    }\n\n    clearTimeout(context._timeout);\n    context._hoverState = HOVER_STATE_SHOW;\n\n    if (!context._config.delay || !context._config.delay.show) {\n      context.show();\n      return;\n    }\n\n    context._timeout = setTimeout(() => {\n      if (context._hoverState === HOVER_STATE_SHOW) {\n        context.show();\n      }\n    }, context._config.delay.show);\n  }\n\n  _leave(event, context) {\n    context = this._initializeOnDelegatedTarget(event, context);\n\n    if (event) {\n      context._activeTrigger[event.type === 'focusout' ? TRIGGER_FOCUS : TRIGGER_HOVER] = context._element.contains(event.relatedTarget);\n    }\n\n    if (context._isWithActiveTrigger()) {\n      return;\n    }\n\n    clearTimeout(context._timeout);\n    context._hoverState = HOVER_STATE_OUT;\n\n    if (!context._config.delay || !context._config.delay.hide) {\n      context.hide();\n      return;\n    }\n\n    context._timeout = setTimeout(() => {\n      if (context._hoverState === HOVER_STATE_OUT) {\n        context.hide();\n      }\n    }, context._config.delay.hide);\n  }\n\n  _isWithActiveTrigger() {\n    for (const trigger in this._activeTrigger) {\n      if (this._activeTrigger[trigger]) {\n        return true;\n      }\n    }\n\n    return false;\n  }\n\n  _getConfig(config) {\n    const dataAttributes = Manipulator.getDataAttributes(this._element);\n    Object.keys(dataAttributes).forEach(dataAttr => {\n      if (DISALLOWED_ATTRIBUTES.has(dataAttr)) {\n        delete dataAttributes[dataAttr];\n      }\n    });\n    config = { ...this.constructor.Default,\n      ...dataAttributes,\n      ...(typeof config === 'object' && config ? config : {})\n    };\n    config.container = config.container === false ? document.body : getElement(config.container);\n\n    if (typeof config.delay === 'number') {\n      config.delay = {\n        show: config.delay,\n        hide: config.delay\n      };\n    }\n\n    if (typeof config.title === 'number') {\n      config.title = config.title.toString();\n    }\n\n    if (typeof config.content === 'number') {\n      config.content = config.content.toString();\n    }\n\n    typeCheckConfig(NAME$4, config, this.constructor.DefaultType);\n\n    if (config.sanitize) {\n      config.template = sanitizeHtml(config.template, config.allowList, config.sanitizeFn);\n    }\n\n    return config;\n  }\n\n  _getDelegateConfig() {\n    const config = {};\n\n    if (this._config) {\n      for (const key in this._config) {\n        if (this.constructor.Default[key] !== this._config[key]) {\n          config[key] = this._config[key];\n        }\n      }\n    }\n\n    return config;\n  }\n\n  _cleanTipClass() {\n    const tip = this.getTipElement();\n    const tabClass = tip.getAttribute('class').match(BSCLS_PREFIX_REGEX$1);\n\n    if (tabClass !== null && tabClass.length > 0) {\n      tabClass.map(token => token.trim()).forEach(tClass => tip.classList.remove(tClass));\n    }\n  }\n\n  _handlePopperPlacementChange(popperData) {\n    const {\n      state\n    } = popperData;\n\n    if (!state) {\n      return;\n    }\n\n    this.tip = state.elements.popper;\n\n    this._cleanTipClass();\n\n    this._addAttachmentClass(this._getAttachment(state.placement));\n  } // Static\n\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Tooltip.getOrCreateInstance(this, config);\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config]();\n      }\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Tooltip to jQuery only if jQuery is present\n */\n\n\ndefineJQueryPlugin(Tooltip);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): popover.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$3 = 'popover';\nconst DATA_KEY$3 = 'bs.popover';\nconst EVENT_KEY$3 = `.${DATA_KEY$3}`;\nconst CLASS_PREFIX = 'bs-popover';\nconst BSCLS_PREFIX_REGEX = new RegExp(`(^|\\\\s)${CLASS_PREFIX}\\\\S+`, 'g');\nconst Default$2 = { ...Tooltip.Default,\n  placement: 'right',\n  offset: [0, 8],\n  trigger: 'click',\n  content: '',\n  template: '<div class=\"popover\" role=\"tooltip\">' + '<div class=\"popover-arrow\"></div>' + '<h3 class=\"popover-header\"></h3>' + '<div class=\"popover-body\"></div>' + '</div>'\n};\nconst DefaultType$2 = { ...Tooltip.DefaultType,\n  content: '(string|element|function)'\n};\nconst Event$1 = {\n  HIDE: `hide${EVENT_KEY$3}`,\n  HIDDEN: `hidden${EVENT_KEY$3}`,\n  SHOW: `show${EVENT_KEY$3}`,\n  SHOWN: `shown${EVENT_KEY$3}`,\n  INSERTED: `inserted${EVENT_KEY$3}`,\n  CLICK: `click${EVENT_KEY$3}`,\n  FOCUSIN: `focusin${EVENT_KEY$3}`,\n  FOCUSOUT: `focusout${EVENT_KEY$3}`,\n  MOUSEENTER: `mouseenter${EVENT_KEY$3}`,\n  MOUSELEAVE: `mouseleave${EVENT_KEY$3}`\n};\nconst CLASS_NAME_FADE$2 = 'fade';\nconst CLASS_NAME_SHOW$2 = 'show';\nconst SELECTOR_TITLE = '.popover-header';\nconst SELECTOR_CONTENT = '.popover-body';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Popover extends Tooltip {\n  // Getters\n  static get Default() {\n    return Default$2;\n  }\n\n  static get NAME() {\n    return NAME$3;\n  }\n\n  static get Event() {\n    return Event$1;\n  }\n\n  static get DefaultType() {\n    return DefaultType$2;\n  } // Overrides\n\n\n  isWithContent() {\n    return this.getTitle() || this._getContent();\n  }\n\n  getTipElement() {\n    if (this.tip) {\n      return this.tip;\n    }\n\n    this.tip = super.getTipElement();\n\n    if (!this.getTitle()) {\n      SelectorEngine.findOne(SELECTOR_TITLE, this.tip).remove();\n    }\n\n    if (!this._getContent()) {\n      SelectorEngine.findOne(SELECTOR_CONTENT, this.tip).remove();\n    }\n\n    return this.tip;\n  }\n\n  setContent() {\n    const tip = this.getTipElement(); // we use append for html objects to maintain js events\n\n    this.setElementContent(SelectorEngine.findOne(SELECTOR_TITLE, tip), this.getTitle());\n\n    let content = this._getContent();\n\n    if (typeof content === 'function') {\n      content = content.call(this._element);\n    }\n\n    this.setElementContent(SelectorEngine.findOne(SELECTOR_CONTENT, tip), content);\n    tip.classList.remove(CLASS_NAME_FADE$2, CLASS_NAME_SHOW$2);\n  } // Private\n\n\n  _addAttachmentClass(attachment) {\n    this.getTipElement().classList.add(`${CLASS_PREFIX}-${this.updateAttachment(attachment)}`);\n  }\n\n  _getContent() {\n    return this._element.getAttribute('data-bs-content') || this._config.content;\n  }\n\n  _cleanTipClass() {\n    const tip = this.getTipElement();\n    const tabClass = tip.getAttribute('class').match(BSCLS_PREFIX_REGEX);\n\n    if (tabClass !== null && tabClass.length > 0) {\n      tabClass.map(token => token.trim()).forEach(tClass => tip.classList.remove(tClass));\n    }\n  } // Static\n\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Popover.getOrCreateInstance(this, config);\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config]();\n      }\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Popover to jQuery only if jQuery is present\n */\n\n\ndefineJQueryPlugin(Popover);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): scrollspy.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$2 = 'scrollspy';\nconst DATA_KEY$2 = 'bs.scrollspy';\nconst EVENT_KEY$2 = `.${DATA_KEY$2}`;\nconst DATA_API_KEY$1 = '.data-api';\nconst Default$1 = {\n  offset: 10,\n  method: 'auto',\n  target: ''\n};\nconst DefaultType$1 = {\n  offset: 'number',\n  method: 'string',\n  target: '(string|element)'\n};\nconst EVENT_ACTIVATE = `activate${EVENT_KEY$2}`;\nconst EVENT_SCROLL = `scroll${EVENT_KEY$2}`;\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY$2}${DATA_API_KEY$1}`;\nconst CLASS_NAME_DROPDOWN_ITEM = 'dropdown-item';\nconst CLASS_NAME_ACTIVE$1 = 'active';\nconst SELECTOR_DATA_SPY = '[data-bs-spy=\"scroll\"]';\nconst SELECTOR_NAV_LIST_GROUP$1 = '.nav, .list-group';\nconst SELECTOR_NAV_LINKS = '.nav-link';\nconst SELECTOR_NAV_ITEMS = '.nav-item';\nconst SELECTOR_LIST_ITEMS = '.list-group-item';\nconst SELECTOR_DROPDOWN$1 = '.dropdown';\nconst SELECTOR_DROPDOWN_TOGGLE$1 = '.dropdown-toggle';\nconst METHOD_OFFSET = 'offset';\nconst METHOD_POSITION = 'position';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass ScrollSpy extends BaseComponent {\n  constructor(element, config) {\n    super(element);\n    this._scrollElement = this._element.tagName === 'BODY' ? window : this._element;\n    this._config = this._getConfig(config);\n    this._selector = `${this._config.target} ${SELECTOR_NAV_LINKS}, ${this._config.target} ${SELECTOR_LIST_ITEMS}, ${this._config.target} .${CLASS_NAME_DROPDOWN_ITEM}`;\n    this._offsets = [];\n    this._targets = [];\n    this._activeTarget = null;\n    this._scrollHeight = 0;\n    EventHandler.on(this._scrollElement, EVENT_SCROLL, () => this._process());\n    this.refresh();\n\n    this._process();\n  } // Getters\n\n\n  static get Default() {\n    return Default$1;\n  }\n\n  static get NAME() {\n    return NAME$2;\n  } // Public\n\n\n  refresh() {\n    const autoMethod = this._scrollElement === this._scrollElement.window ? METHOD_OFFSET : METHOD_POSITION;\n    const offsetMethod = this._config.method === 'auto' ? autoMethod : this._config.method;\n    const offsetBase = offsetMethod === METHOD_POSITION ? this._getScrollTop() : 0;\n    this._offsets = [];\n    this._targets = [];\n    this._scrollHeight = this._getScrollHeight();\n    const targets = SelectorEngine.find(this._selector);\n    targets.map(element => {\n      const targetSelector = getSelectorFromElement(element);\n      const target = targetSelector ? SelectorEngine.findOne(targetSelector) : null;\n\n      if (target) {\n        const targetBCR = target.getBoundingClientRect();\n\n        if (targetBCR.width || targetBCR.height) {\n          return [Manipulator[offsetMethod](target).top + offsetBase, targetSelector];\n        }\n      }\n\n      return null;\n    }).filter(item => item).sort((a, b) => a[0] - b[0]).forEach(item => {\n      this._offsets.push(item[0]);\n\n      this._targets.push(item[1]);\n    });\n  }\n\n  dispose() {\n    EventHandler.off(this._scrollElement, EVENT_KEY$2);\n    super.dispose();\n  } // Private\n\n\n  _getConfig(config) {\n    config = { ...Default$1,\n      ...Manipulator.getDataAttributes(this._element),\n      ...(typeof config === 'object' && config ? config : {})\n    };\n\n    if (typeof config.target !== 'string' && isElement(config.target)) {\n      let {\n        id\n      } = config.target;\n\n      if (!id) {\n        id = getUID(NAME$2);\n        config.target.id = id;\n      }\n\n      config.target = `#${id}`;\n    }\n\n    typeCheckConfig(NAME$2, config, DefaultType$1);\n    return config;\n  }\n\n  _getScrollTop() {\n    return this._scrollElement === window ? this._scrollElement.pageYOffset : this._scrollElement.scrollTop;\n  }\n\n  _getScrollHeight() {\n    return this._scrollElement.scrollHeight || Math.max(document.body.scrollHeight, document.documentElement.scrollHeight);\n  }\n\n  _getOffsetHeight() {\n    return this._scrollElement === window ? window.innerHeight : this._scrollElement.getBoundingClientRect().height;\n  }\n\n  _process() {\n    const scrollTop = this._getScrollTop() + this._config.offset;\n\n    const scrollHeight = this._getScrollHeight();\n\n    const maxScroll = this._config.offset + scrollHeight - this._getOffsetHeight();\n\n    if (this._scrollHeight !== scrollHeight) {\n      this.refresh();\n    }\n\n    if (scrollTop >= maxScroll) {\n      const target = this._targets[this._targets.length - 1];\n\n      if (this._activeTarget !== target) {\n        this._activate(target);\n      }\n\n      return;\n    }\n\n    if (this._activeTarget && scrollTop < this._offsets[0] && this._offsets[0] > 0) {\n      this._activeTarget = null;\n\n      this._clear();\n\n      return;\n    }\n\n    for (let i = this._offsets.length; i--;) {\n      const isActiveTarget = this._activeTarget !== this._targets[i] && scrollTop >= this._offsets[i] && (typeof this._offsets[i + 1] === 'undefined' || scrollTop < this._offsets[i + 1]);\n\n      if (isActiveTarget) {\n        this._activate(this._targets[i]);\n      }\n    }\n  }\n\n  _activate(target) {\n    this._activeTarget = target;\n\n    this._clear();\n\n    const queries = this._selector.split(',').map(selector => `${selector}[data-bs-target=\"${target}\"],${selector}[href=\"${target}\"]`);\n\n    const link = SelectorEngine.findOne(queries.join(','));\n\n    if (link.classList.contains(CLASS_NAME_DROPDOWN_ITEM)) {\n      SelectorEngine.findOne(SELECTOR_DROPDOWN_TOGGLE$1, link.closest(SELECTOR_DROPDOWN$1)).classList.add(CLASS_NAME_ACTIVE$1);\n      link.classList.add(CLASS_NAME_ACTIVE$1);\n    } else {\n      // Set triggered link as active\n      link.classList.add(CLASS_NAME_ACTIVE$1);\n      SelectorEngine.parents(link, SELECTOR_NAV_LIST_GROUP$1).forEach(listGroup => {\n        // Set triggered links parents as active\n        // With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor\n        SelectorEngine.prev(listGroup, `${SELECTOR_NAV_LINKS}, ${SELECTOR_LIST_ITEMS}`).forEach(item => item.classList.add(CLASS_NAME_ACTIVE$1)); // Handle special case when .nav-link is inside .nav-item\n\n        SelectorEngine.prev(listGroup, SELECTOR_NAV_ITEMS).forEach(navItem => {\n          SelectorEngine.children(navItem, SELECTOR_NAV_LINKS).forEach(item => item.classList.add(CLASS_NAME_ACTIVE$1));\n        });\n      });\n    }\n\n    EventHandler.trigger(this._scrollElement, EVENT_ACTIVATE, {\n      relatedTarget: target\n    });\n  }\n\n  _clear() {\n    SelectorEngine.find(this._selector).filter(node => node.classList.contains(CLASS_NAME_ACTIVE$1)).forEach(node => node.classList.remove(CLASS_NAME_ACTIVE$1));\n  } // Static\n\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = ScrollSpy.getOrCreateInstance(this, config);\n\n      if (typeof config !== 'string') {\n        return;\n      }\n\n      if (typeof data[config] === 'undefined') {\n        throw new TypeError(`No method named \"${config}\"`);\n      }\n\n      data[config]();\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n  SelectorEngine.find(SELECTOR_DATA_SPY).forEach(spy => new ScrollSpy(spy));\n});\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .ScrollSpy to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(ScrollSpy);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): tab.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$1 = 'tab';\nconst DATA_KEY$1 = 'bs.tab';\nconst EVENT_KEY$1 = `.${DATA_KEY$1}`;\nconst DATA_API_KEY = '.data-api';\nconst EVENT_HIDE$1 = `hide${EVENT_KEY$1}`;\nconst EVENT_HIDDEN$1 = `hidden${EVENT_KEY$1}`;\nconst EVENT_SHOW$1 = `show${EVENT_KEY$1}`;\nconst EVENT_SHOWN$1 = `shown${EVENT_KEY$1}`;\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY$1}${DATA_API_KEY}`;\nconst CLASS_NAME_DROPDOWN_MENU = 'dropdown-menu';\nconst CLASS_NAME_ACTIVE = 'active';\nconst CLASS_NAME_FADE$1 = 'fade';\nconst CLASS_NAME_SHOW$1 = 'show';\nconst SELECTOR_DROPDOWN = '.dropdown';\nconst SELECTOR_NAV_LIST_GROUP = '.nav, .list-group';\nconst SELECTOR_ACTIVE = '.active';\nconst SELECTOR_ACTIVE_UL = ':scope > li > .active';\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"tab\"], [data-bs-toggle=\"pill\"], [data-bs-toggle=\"list\"]';\nconst SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle';\nconst SELECTOR_DROPDOWN_ACTIVE_CHILD = ':scope > .dropdown-menu .active';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Tab extends BaseComponent {\n  // Getters\n  static get NAME() {\n    return NAME$1;\n  } // Public\n\n\n  show() {\n    if (this._element.parentNode && this._element.parentNode.nodeType === Node.ELEMENT_NODE && this._element.classList.contains(CLASS_NAME_ACTIVE)) {\n      return;\n    }\n\n    let previous;\n    const target = getElementFromSelector(this._element);\n\n    const listElement = this._element.closest(SELECTOR_NAV_LIST_GROUP);\n\n    if (listElement) {\n      const itemSelector = listElement.nodeName === 'UL' || listElement.nodeName === 'OL' ? SELECTOR_ACTIVE_UL : SELECTOR_ACTIVE;\n      previous = SelectorEngine.find(itemSelector, listElement);\n      previous = previous[previous.length - 1];\n    }\n\n    const hideEvent = previous ? EventHandler.trigger(previous, EVENT_HIDE$1, {\n      relatedTarget: this._element\n    }) : null;\n    const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$1, {\n      relatedTarget: previous\n    });\n\n    if (showEvent.defaultPrevented || hideEvent !== null && hideEvent.defaultPrevented) {\n      return;\n    }\n\n    this._activate(this._element, listElement);\n\n    const complete = () => {\n      EventHandler.trigger(previous, EVENT_HIDDEN$1, {\n        relatedTarget: this._element\n      });\n      EventHandler.trigger(this._element, EVENT_SHOWN$1, {\n        relatedTarget: previous\n      });\n    };\n\n    if (target) {\n      this._activate(target, target.parentNode, complete);\n    } else {\n      complete();\n    }\n  } // Private\n\n\n  _activate(element, container, callback) {\n    const activeElements = container && (container.nodeName === 'UL' || container.nodeName === 'OL') ? SelectorEngine.find(SELECTOR_ACTIVE_UL, container) : SelectorEngine.children(container, SELECTOR_ACTIVE);\n    const active = activeElements[0];\n    const isTransitioning = callback && active && active.classList.contains(CLASS_NAME_FADE$1);\n\n    const complete = () => this._transitionComplete(element, active, callback);\n\n    if (active && isTransitioning) {\n      active.classList.remove(CLASS_NAME_SHOW$1);\n\n      this._queueCallback(complete, element, true);\n    } else {\n      complete();\n    }\n  }\n\n  _transitionComplete(element, active, callback) {\n    if (active) {\n      active.classList.remove(CLASS_NAME_ACTIVE);\n      const dropdownChild = SelectorEngine.findOne(SELECTOR_DROPDOWN_ACTIVE_CHILD, active.parentNode);\n\n      if (dropdownChild) {\n        dropdownChild.classList.remove(CLASS_NAME_ACTIVE);\n      }\n\n      if (active.getAttribute('role') === 'tab') {\n        active.setAttribute('aria-selected', false);\n      }\n    }\n\n    element.classList.add(CLASS_NAME_ACTIVE);\n\n    if (element.getAttribute('role') === 'tab') {\n      element.setAttribute('aria-selected', true);\n    }\n\n    reflow(element);\n\n    if (element.classList.contains(CLASS_NAME_FADE$1)) {\n      element.classList.add(CLASS_NAME_SHOW$1);\n    }\n\n    let parent = element.parentNode;\n\n    if (parent && parent.nodeName === 'LI') {\n      parent = parent.parentNode;\n    }\n\n    if (parent && parent.classList.contains(CLASS_NAME_DROPDOWN_MENU)) {\n      const dropdownElement = element.closest(SELECTOR_DROPDOWN);\n\n      if (dropdownElement) {\n        SelectorEngine.find(SELECTOR_DROPDOWN_TOGGLE, dropdownElement).forEach(dropdown => dropdown.classList.add(CLASS_NAME_ACTIVE));\n      }\n\n      element.setAttribute('aria-expanded', true);\n    }\n\n    if (callback) {\n      callback();\n    }\n  } // Static\n\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Tab.getOrCreateInstance(this);\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config]();\n      }\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n  if (['A', 'AREA'].includes(this.tagName)) {\n    event.preventDefault();\n  }\n\n  if (isDisabled(this)) {\n    return;\n  }\n\n  const data = Tab.getOrCreateInstance(this);\n  data.show();\n});\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Tab to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Tab);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): toast.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'toast';\nconst DATA_KEY = 'bs.toast';\nconst EVENT_KEY = `.${DATA_KEY}`;\nconst EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY}`;\nconst EVENT_MOUSEOVER = `mouseover${EVENT_KEY}`;\nconst EVENT_MOUSEOUT = `mouseout${EVENT_KEY}`;\nconst EVENT_FOCUSIN = `focusin${EVENT_KEY}`;\nconst EVENT_FOCUSOUT = `focusout${EVENT_KEY}`;\nconst EVENT_HIDE = `hide${EVENT_KEY}`;\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`;\nconst EVENT_SHOW = `show${EVENT_KEY}`;\nconst EVENT_SHOWN = `shown${EVENT_KEY}`;\nconst CLASS_NAME_FADE = 'fade';\nconst CLASS_NAME_HIDE = 'hide';\nconst CLASS_NAME_SHOW = 'show';\nconst CLASS_NAME_SHOWING = 'showing';\nconst DefaultType = {\n  animation: 'boolean',\n  autohide: 'boolean',\n  delay: 'number'\n};\nconst Default = {\n  animation: true,\n  autohide: true,\n  delay: 5000\n};\nconst SELECTOR_DATA_DISMISS = '[data-bs-dismiss=\"toast\"]';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Toast extends BaseComponent {\n  constructor(element, config) {\n    super(element);\n    this._config = this._getConfig(config);\n    this._timeout = null;\n    this._hasMouseInteraction = false;\n    this._hasKeyboardInteraction = false;\n\n    this._setListeners();\n  } // Getters\n\n\n  static get DefaultType() {\n    return DefaultType;\n  }\n\n  static get Default() {\n    return Default;\n  }\n\n  static get NAME() {\n    return NAME;\n  } // Public\n\n\n  show() {\n    const showEvent = EventHandler.trigger(this._element, EVENT_SHOW);\n\n    if (showEvent.defaultPrevented) {\n      return;\n    }\n\n    this._clearTimeout();\n\n    if (this._config.animation) {\n      this._element.classList.add(CLASS_NAME_FADE);\n    }\n\n    const complete = () => {\n      this._element.classList.remove(CLASS_NAME_SHOWING);\n\n      this._element.classList.add(CLASS_NAME_SHOW);\n\n      EventHandler.trigger(this._element, EVENT_SHOWN);\n\n      this._maybeScheduleHide();\n    };\n\n    this._element.classList.remove(CLASS_NAME_HIDE);\n\n    reflow(this._element);\n\n    this._element.classList.add(CLASS_NAME_SHOWING);\n\n    this._queueCallback(complete, this._element, this._config.animation);\n  }\n\n  hide() {\n    if (!this._element.classList.contains(CLASS_NAME_SHOW)) {\n      return;\n    }\n\n    const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE);\n\n    if (hideEvent.defaultPrevented) {\n      return;\n    }\n\n    const complete = () => {\n      this._element.classList.add(CLASS_NAME_HIDE);\n\n      EventHandler.trigger(this._element, EVENT_HIDDEN);\n    };\n\n    this._element.classList.remove(CLASS_NAME_SHOW);\n\n    this._queueCallback(complete, this._element, this._config.animation);\n  }\n\n  dispose() {\n    this._clearTimeout();\n\n    if (this._element.classList.contains(CLASS_NAME_SHOW)) {\n      this._element.classList.remove(CLASS_NAME_SHOW);\n    }\n\n    super.dispose();\n  } // Private\n\n\n  _getConfig(config) {\n    config = { ...Default,\n      ...Manipulator.getDataAttributes(this._element),\n      ...(typeof config === 'object' && config ? config : {})\n    };\n    typeCheckConfig(NAME, config, this.constructor.DefaultType);\n    return config;\n  }\n\n  _maybeScheduleHide() {\n    if (!this._config.autohide) {\n      return;\n    }\n\n    if (this._hasMouseInteraction || this._hasKeyboardInteraction) {\n      return;\n    }\n\n    this._timeout = setTimeout(() => {\n      this.hide();\n    }, this._config.delay);\n  }\n\n  _onInteraction(event, isInteracting) {\n    switch (event.type) {\n      case 'mouseover':\n      case 'mouseout':\n        this._hasMouseInteraction = isInteracting;\n        break;\n\n      case 'focusin':\n      case 'focusout':\n        this._hasKeyboardInteraction = isInteracting;\n        break;\n    }\n\n    if (isInteracting) {\n      this._clearTimeout();\n\n      return;\n    }\n\n    const nextElement = event.relatedTarget;\n\n    if (this._element === nextElement || this._element.contains(nextElement)) {\n      return;\n    }\n\n    this._maybeScheduleHide();\n  }\n\n  _setListeners() {\n    EventHandler.on(this._element, EVENT_CLICK_DISMISS, SELECTOR_DATA_DISMISS, () => this.hide());\n    EventHandler.on(this._element, EVENT_MOUSEOVER, event => this._onInteraction(event, true));\n    EventHandler.on(this._element, EVENT_MOUSEOUT, event => this._onInteraction(event, false));\n    EventHandler.on(this._element, EVENT_FOCUSIN, event => this._onInteraction(event, true));\n    EventHandler.on(this._element, EVENT_FOCUSOUT, event => this._onInteraction(event, false));\n  }\n\n  _clearTimeout() {\n    clearTimeout(this._timeout);\n    this._timeout = null;\n  } // Static\n\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Toast.getOrCreateInstance(this, config);\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config](this);\n      }\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Toast to jQuery only if jQuery is present\n */\n\n\ndefineJQueryPlugin(Toast);\n\nexport { Alert, Button, Carousel, Collapse, Dropdown, Modal, Offcanvas, Popover, ScrollSpy, Tab, Toast, Tooltip };\n//# sourceMappingURL=bootstrap.esm.js.map\n"
  },
  {
    "path": "src/sourceDev.WebApp/SharedThemes/materia/wwwroot/js/jquery.js",
    "content": "/*!\n * jQuery JavaScript Library v3.7.0\n * https://jquery.com/\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license\n * https://jquery.org/license\n *\n * Date: 2023-05-11T18:29Z\n */\n(function (global, factory) {\n\n\t\"use strict\";\n\n\tif (typeof module === \"object\" && typeof module.exports === \"object\") {\n\n\t\t// For CommonJS and CommonJS-like environments where a proper `window`\n\t\t// is present, execute the factory and get jQuery.\n\t\t// For environments that do not have a `window` with a `document`\n\t\t// (such as Node.js), expose a factory as module.exports.\n\t\t// This accentuates the need for the creation of a real `window`.\n\t\t// e.g. var jQuery = require(\"jquery\")(window);\n\t\t// See ticket trac-14549 for more info.\n\t\tmodule.exports = global.document ?\n\t\t\tfactory(global, true) :\n\t\t\tfunction (w) {\n\t\t\t\tif (!w.document) {\n\t\t\t\t\tthrow new Error(\"jQuery requires a window with a document\");\n\t\t\t\t}\n\t\t\t\treturn factory(w);\n\t\t\t};\n\t} else {\n\t\tfactory(global);\n\t}\n\n\t// Pass this if window is not defined yet\n})(typeof window !== \"undefined\" ? window : this, function (window, noGlobal) {\n\n\t// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1\n\t// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode\n\t// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common\n\t// enough that all such attempts are guarded in a try block.\n\t\"use strict\";\n\n\tvar arr = [];\n\n\tvar getProto = Object.getPrototypeOf;\n\n\tvar slice = arr.slice;\n\n\tvar flat = arr.flat ? function (array) {\n\t\treturn arr.flat.call(array);\n\t} : function (array) {\n\t\treturn arr.concat.apply([], array);\n\t};\n\n\n\tvar push = arr.push;\n\n\tvar indexOf = arr.indexOf;\n\n\tvar class2type = {};\n\n\tvar toString = class2type.toString;\n\n\tvar hasOwn = class2type.hasOwnProperty;\n\n\tvar fnToString = hasOwn.toString;\n\n\tvar ObjectFunctionString = fnToString.call(Object);\n\n\tvar support = {};\n\n\tvar isFunction = function isFunction(obj) {\n\n\t\t// Support: Chrome <=57, Firefox <=52\n\t\t// In some browsers, typeof returns \"function\" for HTML <object> elements\n\t\t// (i.e., `typeof document.createElement( \"object\" ) === \"function\"`).\n\t\t// We don't want to classify *any* DOM node as a function.\n\t\t// Support: QtWeb <=3.8.5, WebKit <=534.34, wkhtmltopdf tool <=0.12.5\n\t\t// Plus for old WebKit, typeof returns \"function\" for HTML collections\n\t\t// (e.g., `typeof document.getElementsByTagName(\"div\") === \"function\"`). (gh-4756)\n\t\treturn typeof obj === \"function\" && typeof obj.nodeType !== \"number\" &&\n\t\t\ttypeof obj.item !== \"function\";\n\t};\n\n\n\tvar isWindow = function isWindow(obj) {\n\t\treturn obj != null && obj === obj.window;\n\t};\n\n\n\tvar document = window.document;\n\n\n\n\tvar preservedScriptAttributes = {\n\t\ttype: true,\n\t\tsrc: true,\n\t\tnonce: true,\n\t\tnoModule: true\n\t};\n\n\tfunction DOMEval(code, node, doc) {\n\t\tdoc = doc || document;\n\n\t\tvar i, val,\n\t\t\tscript = doc.createElement(\"script\");\n\n\t\tscript.text = code;\n\t\tif (node) {\n\t\t\tfor (i in preservedScriptAttributes) {\n\n\t\t\t\t// Support: Firefox 64+, Edge 18+\n\t\t\t\t// Some browsers don't support the \"nonce\" property on scripts.\n\t\t\t\t// On the other hand, just using `getAttribute` is not enough as\n\t\t\t\t// the `nonce` attribute is reset to an empty string whenever it\n\t\t\t\t// becomes browsing-context connected.\n\t\t\t\t// See https://github.com/whatwg/html/issues/2369\n\t\t\t\t// See https://html.spec.whatwg.org/#nonce-attributes\n\t\t\t\t// The `node.getAttribute` check was added for the sake of\n\t\t\t\t// `jQuery.globalEval` so that it can fake a nonce-containing node\n\t\t\t\t// via an object.\n\t\t\t\tval = node[i] || node.getAttribute && node.getAttribute(i);\n\t\t\t\tif (val) {\n\t\t\t\t\tscript.setAttribute(i, val);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tdoc.head.appendChild(script).parentNode.removeChild(script);\n\t}\n\n\n\tfunction toType(obj) {\n\t\tif (obj == null) {\n\t\t\treturn obj + \"\";\n\t\t}\n\n\t\t// Support: Android <=2.3 only (functionish RegExp)\n\t\treturn typeof obj === \"object\" || typeof obj === \"function\" ?\n\t\t\tclass2type[toString.call(obj)] || \"object\" :\n\t\t\ttypeof obj;\n\t}\n\t/* global Symbol */\n\t// Defining this global in .eslintrc.json would create a danger of using the global\n\t// unguarded in another place, it seems safer to define global only for this module\n\n\n\n\tvar version = \"3.7.0\",\n\n\t\trhtmlSuffix = /HTML$/i,\n\n\t\t// Define a local copy of jQuery\n\t\tjQuery = function (selector, context) {\n\n\t\t\t// The jQuery object is actually just the init constructor 'enhanced'\n\t\t\t// Need init if jQuery is called (just allow error to be thrown if not included)\n\t\t\treturn new jQuery.fn.init(selector, context);\n\t\t};\n\n\tjQuery.fn = jQuery.prototype = {\n\n\t\t// The current version of jQuery being used\n\t\tjquery: version,\n\n\t\tconstructor: jQuery,\n\n\t\t// The default length of a jQuery object is 0\n\t\tlength: 0,\n\n\t\ttoArray: function () {\n\t\t\treturn slice.call(this);\n\t\t},\n\n\t\t// Get the Nth element in the matched element set OR\n\t\t// Get the whole matched element set as a clean array\n\t\tget: function (num) {\n\n\t\t\t// Return all the elements in a clean array\n\t\t\tif (num == null) {\n\t\t\t\treturn slice.call(this);\n\t\t\t}\n\n\t\t\t// Return just the one element from the set\n\t\t\treturn num < 0 ? this[num + this.length] : this[num];\n\t\t},\n\n\t\t// Take an array of elements and push it onto the stack\n\t\t// (returning the new matched element set)\n\t\tpushStack: function (elems) {\n\n\t\t\t// Build a new jQuery matched element set\n\t\t\tvar ret = jQuery.merge(this.constructor(), elems);\n\n\t\t\t// Add the old object onto the stack (as a reference)\n\t\t\tret.prevObject = this;\n\n\t\t\t// Return the newly-formed element set\n\t\t\treturn ret;\n\t\t},\n\n\t\t// Execute a callback for every element in the matched set.\n\t\teach: function (callback) {\n\t\t\treturn jQuery.each(this, callback);\n\t\t},\n\n\t\tmap: function (callback) {\n\t\t\treturn this.pushStack(jQuery.map(this, function (elem, i) {\n\t\t\t\treturn callback.call(elem, i, elem);\n\t\t\t}));\n\t\t},\n\n\t\tslice: function () {\n\t\t\treturn this.pushStack(slice.apply(this, arguments));\n\t\t},\n\n\t\tfirst: function () {\n\t\t\treturn this.eq(0);\n\t\t},\n\n\t\tlast: function () {\n\t\t\treturn this.eq(-1);\n\t\t},\n\n\t\teven: function () {\n\t\t\treturn this.pushStack(jQuery.grep(this, function (_elem, i) {\n\t\t\t\treturn (i + 1) % 2;\n\t\t\t}));\n\t\t},\n\n\t\todd: function () {\n\t\t\treturn this.pushStack(jQuery.grep(this, function (_elem, i) {\n\t\t\t\treturn i % 2;\n\t\t\t}));\n\t\t},\n\n\t\teq: function (i) {\n\t\t\tvar len = this.length,\n\t\t\t\tj = +i + (i < 0 ? len : 0);\n\t\t\treturn this.pushStack(j >= 0 && j < len ? [this[j]] : []);\n\t\t},\n\n\t\tend: function () {\n\t\t\treturn this.prevObject || this.constructor();\n\t\t},\n\n\t\t// For internal use only.\n\t\t// Behaves like an Array's method, not like a jQuery method.\n\t\tpush: push,\n\t\tsort: arr.sort,\n\t\tsplice: arr.splice\n\t};\n\n\tjQuery.extend = jQuery.fn.extend = function () {\n\t\tvar options, name, src, copy, copyIsArray, clone,\n\t\t\ttarget = arguments[0] || {},\n\t\t\ti = 1,\n\t\t\tlength = arguments.length,\n\t\t\tdeep = false;\n\n\t\t// Handle a deep copy situation\n\t\tif (typeof target === \"boolean\") {\n\t\t\tdeep = target;\n\n\t\t\t// Skip the boolean and the target\n\t\t\ttarget = arguments[i] || {};\n\t\t\ti++;\n\t\t}\n\n\t\t// Handle case when target is a string or something (possible in deep copy)\n\t\tif (typeof target !== \"object\" && !isFunction(target)) {\n\t\t\ttarget = {};\n\t\t}\n\n\t\t// Extend jQuery itself if only one argument is passed\n\t\tif (i === length) {\n\t\t\ttarget = this;\n\t\t\ti--;\n\t\t}\n\n\t\tfor (; i < length; i++) {\n\n\t\t\t// Only deal with non-null/undefined values\n\t\t\tif ((options = arguments[i]) != null) {\n\n\t\t\t\t// Extend the base object\n\t\t\t\tfor (name in options) {\n\t\t\t\t\tcopy = options[name];\n\n\t\t\t\t\t// Prevent Object.prototype pollution\n\t\t\t\t\t// Prevent never-ending loop\n\t\t\t\t\tif (name === \"__proto__\" || target === copy) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\t\tif (deep && copy && (jQuery.isPlainObject(copy) ||\n\t\t\t\t\t\t(copyIsArray = Array.isArray(copy)))) {\n\t\t\t\t\t\tsrc = target[name];\n\n\t\t\t\t\t\t// Ensure proper type for the source value\n\t\t\t\t\t\tif (copyIsArray && !Array.isArray(src)) {\n\t\t\t\t\t\t\tclone = [];\n\t\t\t\t\t\t} else if (!copyIsArray && !jQuery.isPlainObject(src)) {\n\t\t\t\t\t\t\tclone = {};\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tclone = src;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcopyIsArray = false;\n\n\t\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\t\ttarget[name] = jQuery.extend(deep, clone, copy);\n\n\t\t\t\t\t\t// Don't bring in undefined values\n\t\t\t\t\t} else if (copy !== undefined) {\n\t\t\t\t\t\ttarget[name] = copy;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Return the modified object\n\t\treturn target;\n\t};\n\n\tjQuery.extend({\n\n\t\t// Unique for each copy of jQuery on the page\n\t\texpando: \"jQuery\" + (version + Math.random()).replace(/\\D/g, \"\"),\n\n\t\t// Assume jQuery is ready without the ready module\n\t\tisReady: true,\n\n\t\terror: function (msg) {\n\t\t\tthrow new Error(msg);\n\t\t},\n\n\t\tnoop: function () { },\n\n\t\tisPlainObject: function (obj) {\n\t\t\tvar proto, Ctor;\n\n\t\t\t// Detect obvious negatives\n\t\t\t// Use toString instead of jQuery.type to catch host objects\n\t\t\tif (!obj || toString.call(obj) !== \"[object Object]\") {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tproto = getProto(obj);\n\n\t\t\t// Objects with no prototype (e.g., `Object.create( null )`) are plain\n\t\t\tif (!proto) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\t// Objects with prototype are plain iff they were constructed by a global Object function\n\t\t\tCtor = hasOwn.call(proto, \"constructor\") && proto.constructor;\n\t\t\treturn typeof Ctor === \"function\" && fnToString.call(Ctor) === ObjectFunctionString;\n\t\t},\n\n\t\tisEmptyObject: function (obj) {\n\t\t\tvar name;\n\n\t\t\tfor (name in obj) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\n\t\t// Evaluates a script in a provided context; falls back to the global one\n\t\t// if not specified.\n\t\tglobalEval: function (code, options, doc) {\n\t\t\tDOMEval(code, { nonce: options && options.nonce }, doc);\n\t\t},\n\n\t\teach: function (obj, callback) {\n\t\t\tvar length, i = 0;\n\n\t\t\tif (isArrayLike(obj)) {\n\t\t\t\tlength = obj.length;\n\t\t\t\tfor (; i < length; i++) {\n\t\t\t\t\tif (callback.call(obj[i], i, obj[i]) === false) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor (i in obj) {\n\t\t\t\t\tif (callback.call(obj[i], i, obj[i]) === false) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn obj;\n\t\t},\n\n\n\t\t// Retrieve the text value of an array of DOM nodes\n\t\ttext: function (elem) {\n\t\t\tvar node,\n\t\t\t\tret = \"\",\n\t\t\t\ti = 0,\n\t\t\t\tnodeType = elem.nodeType;\n\n\t\t\tif (!nodeType) {\n\n\t\t\t\t// If no nodeType, this is expected to be an array\n\t\t\t\twhile ((node = elem[i++])) {\n\n\t\t\t\t\t// Do not traverse comment nodes\n\t\t\t\t\tret += jQuery.text(node);\n\t\t\t\t}\n\t\t\t} else if (nodeType === 1 || nodeType === 9 || nodeType === 11) {\n\t\t\t\treturn elem.textContent;\n\t\t\t} else if (nodeType === 3 || nodeType === 4) {\n\t\t\t\treturn elem.nodeValue;\n\t\t\t}\n\n\t\t\t// Do not include comment or processing instruction nodes\n\n\t\t\treturn ret;\n\t\t},\n\n\t\t// results is for internal usage only\n\t\tmakeArray: function (arr, results) {\n\t\t\tvar ret = results || [];\n\n\t\t\tif (arr != null) {\n\t\t\t\tif (isArrayLike(Object(arr))) {\n\t\t\t\t\tjQuery.merge(ret,\n\t\t\t\t\t\ttypeof arr === \"string\" ?\n\t\t\t\t\t\t\t[arr] : arr\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\tpush.call(ret, arr);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn ret;\n\t\t},\n\n\t\tinArray: function (elem, arr, i) {\n\t\t\treturn arr == null ? -1 : indexOf.call(arr, elem, i);\n\t\t},\n\n\t\tisXMLDoc: function (elem) {\n\t\t\tvar namespace = elem && elem.namespaceURI,\n\t\t\t\tdocElem = elem && (elem.ownerDocument || elem).documentElement;\n\n\t\t\t// Assume HTML when documentElement doesn't yet exist, such as inside\n\t\t\t// document fragments.\n\t\t\treturn !rhtmlSuffix.test(namespace || docElem && docElem.nodeName || \"HTML\");\n\t\t},\n\n\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\tmerge: function (first, second) {\n\t\t\tvar len = +second.length,\n\t\t\t\tj = 0,\n\t\t\t\ti = first.length;\n\n\t\t\tfor (; j < len; j++) {\n\t\t\t\tfirst[i++] = second[j];\n\t\t\t}\n\n\t\t\tfirst.length = i;\n\n\t\t\treturn first;\n\t\t},\n\n\t\tgrep: function (elems, callback, invert) {\n\t\t\tvar callbackInverse,\n\t\t\t\tmatches = [],\n\t\t\t\ti = 0,\n\t\t\t\tlength = elems.length,\n\t\t\t\tcallbackExpect = !invert;\n\n\t\t\t// Go through the array, only saving the items\n\t\t\t// that pass the validator function\n\t\t\tfor (; i < length; i++) {\n\t\t\t\tcallbackInverse = !callback(elems[i], i);\n\t\t\t\tif (callbackInverse !== callbackExpect) {\n\t\t\t\t\tmatches.push(elems[i]);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn matches;\n\t\t},\n\n\t\t// arg is for internal usage only\n\t\tmap: function (elems, callback, arg) {\n\t\t\tvar length, value,\n\t\t\t\ti = 0,\n\t\t\t\tret = [];\n\n\t\t\t// Go through the array, translating each of the items to their new values\n\t\t\tif (isArrayLike(elems)) {\n\t\t\t\tlength = elems.length;\n\t\t\t\tfor (; i < length; i++) {\n\t\t\t\t\tvalue = callback(elems[i], i, arg);\n\n\t\t\t\t\tif (value != null) {\n\t\t\t\t\t\tret.push(value);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Go through every key on the object,\n\t\t\t} else {\n\t\t\t\tfor (i in elems) {\n\t\t\t\t\tvalue = callback(elems[i], i, arg);\n\n\t\t\t\t\tif (value != null) {\n\t\t\t\t\t\tret.push(value);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Flatten any nested arrays\n\t\t\treturn flat(ret);\n\t\t},\n\n\t\t// A global GUID counter for objects\n\t\tguid: 1,\n\n\t\t// jQuery.support is not used in Core but other projects attach their\n\t\t// properties to it so it needs to exist.\n\t\tsupport: support\n\t});\n\n\tif (typeof Symbol === \"function\") {\n\t\tjQuery.fn[Symbol.iterator] = arr[Symbol.iterator];\n\t}\n\n\t// Populate the class2type map\n\tjQuery.each(\"Boolean Number String Function Array Date RegExp Object Error Symbol\".split(\" \"),\n\t\tfunction (_i, name) {\n\t\t\tclass2type[\"[object \" + name + \"]\"] = name.toLowerCase();\n\t\t});\n\n\tfunction isArrayLike(obj) {\n\n\t\t// Support: real iOS 8.2 only (not reproducible in simulator)\n\t\t// `in` check used to prevent JIT error (gh-2145)\n\t\t// hasOwn isn't used here due to false negatives\n\t\t// regarding Nodelist length in IE\n\t\tvar length = !!obj && \"length\" in obj && obj.length,\n\t\t\ttype = toType(obj);\n\n\t\tif (isFunction(obj) || isWindow(obj)) {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn type === \"array\" || length === 0 ||\n\t\t\ttypeof length === \"number\" && length > 0 && (length - 1) in obj;\n\t}\n\n\n\tfunction nodeName(elem, name) {\n\n\t\treturn elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();\n\n\t}\n\tvar pop = arr.pop;\n\n\n\tvar sort = arr.sort;\n\n\n\tvar splice = arr.splice;\n\n\n\tvar whitespace = \"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\";\n\n\n\tvar rtrimCSS = new RegExp(\n\t\t\"^\" + whitespace + \"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\" + whitespace + \"+$\",\n\t\t\"g\"\n\t);\n\n\n\n\n\t// Note: an element does not contain itself\n\tjQuery.contains = function (a, b) {\n\t\tvar bup = b && b.parentNode;\n\n\t\treturn a === bup || !!(bup && bup.nodeType === 1 && (\n\n\t\t\t// Support: IE 9 - 11+\n\t\t\t// IE doesn't have `contains` on SVG.\n\t\t\ta.contains ?\n\t\t\t\ta.contains(bup) :\n\t\t\t\ta.compareDocumentPosition && a.compareDocumentPosition(bup) & 16\n\t\t));\n\t};\n\n\n\n\n\t// CSS string/identifier serialization\n\t// https://drafts.csswg.org/cssom/#common-serializing-idioms\n\tvar rcssescape = /([\\0-\\x1f\\x7f]|^-?\\d)|^-$|[^\\x80-\\uFFFF\\w-]/g;\n\n\tfunction fcssescape(ch, asCodePoint) {\n\t\tif (asCodePoint) {\n\n\t\t\t// U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER\n\t\t\tif (ch === \"\\0\") {\n\t\t\t\treturn \"\\uFFFD\";\n\t\t\t}\n\n\t\t\t// Control characters and (dependent upon position) numbers get escaped as code points\n\t\t\treturn ch.slice(0, -1) + \"\\\\\" + ch.charCodeAt(ch.length - 1).toString(16) + \" \";\n\t\t}\n\n\t\t// Other potentially-special ASCII characters get backslash-escaped\n\t\treturn \"\\\\\" + ch;\n\t}\n\n\tjQuery.escapeSelector = function (sel) {\n\t\treturn (sel + \"\").replace(rcssescape, fcssescape);\n\t};\n\n\n\n\n\tvar preferredDoc = document,\n\t\tpushNative = push;\n\n\t(function () {\n\n\t\tvar i,\n\t\t\tExpr,\n\t\t\toutermostContext,\n\t\t\tsortInput,\n\t\t\thasDuplicate,\n\t\t\tpush = pushNative,\n\n\t\t\t// Local document vars\n\t\t\tdocument,\n\t\t\tdocumentElement,\n\t\t\tdocumentIsHTML,\n\t\t\trbuggyQSA,\n\t\t\tmatches,\n\n\t\t\t// Instance-specific data\n\t\t\texpando = jQuery.expando,\n\t\t\tdirruns = 0,\n\t\t\tdone = 0,\n\t\t\tclassCache = createCache(),\n\t\t\ttokenCache = createCache(),\n\t\t\tcompilerCache = createCache(),\n\t\t\tnonnativeSelectorCache = createCache(),\n\t\t\tsortOrder = function (a, b) {\n\t\t\t\tif (a === b) {\n\t\t\t\t\thasDuplicate = true;\n\t\t\t\t}\n\t\t\t\treturn 0;\n\t\t\t},\n\n\t\t\tbooleans = \"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|\" +\n\t\t\t\t\"loop|multiple|open|readonly|required|scoped\",\n\n\t\t\t// Regular expressions\n\n\t\t\t// https://www.w3.org/TR/css-syntax-3/#ident-token-diagram\n\t\t\tidentifier = \"(?:\\\\\\\\[\\\\da-fA-F]{1,6}\" + whitespace +\n\t\t\t\t\"?|\\\\\\\\[^\\\\r\\\\n\\\\f]|[\\\\w-]|[^\\0-\\\\x7f])+\",\n\n\t\t\t// Attribute selectors: https://www.w3.org/TR/selectors/#attribute-selectors\n\t\t\tattributes = \"\\\\[\" + whitespace + \"*(\" + identifier + \")(?:\" + whitespace +\n\n\t\t\t\t// Operator (capture 2)\n\t\t\t\t\"*([*^$|!~]?=)\" + whitespace +\n\n\t\t\t\t// \"Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]\"\n\t\t\t\t\"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\" + identifier + \"))|)\" +\n\t\t\t\twhitespace + \"*\\\\]\",\n\n\t\t\tpseudos = \":(\" + identifier + \")(?:\\\\((\" +\n\n\t\t\t\t// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:\n\t\t\t\t// 1. quoted (capture 3; capture 4 or capture 5)\n\t\t\t\t\"('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|\" +\n\n\t\t\t\t// 2. simple (capture 6)\n\t\t\t\t\"((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\" + attributes + \")*)|\" +\n\n\t\t\t\t// 3. anything else (capture 2)\n\t\t\t\t\".*\" +\n\t\t\t\t\")\\\\)|)\",\n\n\t\t\t// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter\n\t\t\trwhitespace = new RegExp(whitespace + \"+\", \"g\"),\n\n\t\t\trcomma = new RegExp(\"^\" + whitespace + \"*,\" + whitespace + \"*\"),\n\t\t\trleadingCombinator = new RegExp(\"^\" + whitespace + \"*([>+~]|\" + whitespace + \")\" +\n\t\t\t\twhitespace + \"*\"),\n\t\t\trdescend = new RegExp(whitespace + \"|>\"),\n\n\t\t\trpseudo = new RegExp(pseudos),\n\t\t\tridentifier = new RegExp(\"^\" + identifier + \"$\"),\n\n\t\t\tmatchExpr = {\n\t\t\t\tID: new RegExp(\"^#(\" + identifier + \")\"),\n\t\t\t\tCLASS: new RegExp(\"^\\\\.(\" + identifier + \")\"),\n\t\t\t\tTAG: new RegExp(\"^(\" + identifier + \"|[*])\"),\n\t\t\t\tATTR: new RegExp(\"^\" + attributes),\n\t\t\t\tPSEUDO: new RegExp(\"^\" + pseudos),\n\t\t\t\tCHILD: new RegExp(\n\t\t\t\t\t\"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\" +\n\t\t\t\t\twhitespace + \"*(even|odd|(([+-]|)(\\\\d*)n|)\" + whitespace + \"*(?:([+-]|)\" +\n\t\t\t\t\twhitespace + \"*(\\\\d+)|))\" + whitespace + \"*\\\\)|)\", \"i\"),\n\t\t\t\tbool: new RegExp(\"^(?:\" + booleans + \")$\", \"i\"),\n\n\t\t\t\t// For use in libraries implementing .is()\n\t\t\t\t// We use this for POS matching in `select`\n\t\t\t\tneedsContext: new RegExp(\"^\" + whitespace +\n\t\t\t\t\t\"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\" + whitespace +\n\t\t\t\t\t\"*((?:-\\\\d)?\\\\d*)\" + whitespace + \"*\\\\)|)(?=[^-]|$)\", \"i\")\n\t\t\t},\n\n\t\t\trinputs = /^(?:input|select|textarea|button)$/i,\n\t\t\trheader = /^h\\d$/i,\n\n\t\t\t// Easily-parseable/retrievable ID or TAG or CLASS selectors\n\t\t\trquickExpr = /^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,\n\n\t\t\trsibling = /[+~]/,\n\n\t\t\t// CSS escapes\n\t\t\t// https://www.w3.org/TR/CSS21/syndata.html#escaped-characters\n\t\t\trunescape = new RegExp(\"\\\\\\\\[\\\\da-fA-F]{1,6}\" + whitespace +\n\t\t\t\t\"?|\\\\\\\\([^\\\\r\\\\n\\\\f])\", \"g\"),\n\t\t\tfunescape = function (escape, nonHex) {\n\t\t\t\tvar high = \"0x\" + escape.slice(1) - 0x10000;\n\n\t\t\t\tif (nonHex) {\n\n\t\t\t\t\t// Strip the backslash prefix from a non-hex escape sequence\n\t\t\t\t\treturn nonHex;\n\t\t\t\t}\n\n\t\t\t\t// Replace a hexadecimal escape sequence with the encoded Unicode code point\n\t\t\t\t// Support: IE <=11+\n\t\t\t\t// For values outside the Basic Multilingual Plane (BMP), manually construct a\n\t\t\t\t// surrogate pair\n\t\t\t\treturn high < 0 ?\n\t\t\t\t\tString.fromCharCode(high + 0x10000) :\n\t\t\t\t\tString.fromCharCode(high >> 10 | 0xD800, high & 0x3FF | 0xDC00);\n\t\t\t},\n\n\t\t\t// Used for iframes; see `setDocument`.\n\t\t\t// Support: IE 9 - 11+, Edge 12 - 18+\n\t\t\t// Removing the function wrapper causes a \"Permission Denied\"\n\t\t\t// error in IE/Edge.\n\t\t\tunloadHandler = function () {\n\t\t\t\tsetDocument();\n\t\t\t},\n\n\t\t\tinDisabledFieldset = addCombinator(\n\t\t\t\tfunction (elem) {\n\t\t\t\t\treturn elem.disabled === true && nodeName(elem, \"fieldset\");\n\t\t\t\t},\n\t\t\t\t{ dir: \"parentNode\", next: \"legend\" }\n\t\t\t);\n\n\t\t// Support: IE <=9 only\n\t\t// Accessing document.activeElement can throw unexpectedly\n\t\t// https://bugs.jquery.com/ticket/13393\n\t\tfunction safeActiveElement() {\n\t\t\ttry {\n\t\t\t\treturn document.activeElement;\n\t\t\t} catch (err) { }\n\t\t}\n\n\t\t// Optimize for push.apply( _, NodeList )\n\t\ttry {\n\t\t\tpush.apply(\n\t\t\t\t(arr = slice.call(preferredDoc.childNodes)),\n\t\t\t\tpreferredDoc.childNodes\n\t\t\t);\n\n\t\t\t// Support: Android <=4.0\n\t\t\t// Detect silently failing push.apply\n\t\t\t// eslint-disable-next-line no-unused-expressions\n\t\t\tarr[preferredDoc.childNodes.length].nodeType;\n\t\t} catch (e) {\n\t\t\tpush = {\n\t\t\t\tapply: function (target, els) {\n\t\t\t\t\tpushNative.apply(target, slice.call(els));\n\t\t\t\t},\n\t\t\t\tcall: function (target) {\n\t\t\t\t\tpushNative.apply(target, slice.call(arguments, 1));\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\n\t\tfunction find(selector, context, results, seed) {\n\t\t\tvar m, i, elem, nid, match, groups, newSelector,\n\t\t\t\tnewContext = context && context.ownerDocument,\n\n\t\t\t\t// nodeType defaults to 9, since context defaults to document\n\t\t\t\tnodeType = context ? context.nodeType : 9;\n\n\t\t\tresults = results || [];\n\n\t\t\t// Return early from calls with invalid selector or context\n\t\t\tif (typeof selector !== \"string\" || !selector ||\n\t\t\t\tnodeType !== 1 && nodeType !== 9 && nodeType !== 11) {\n\n\t\t\t\treturn results;\n\t\t\t}\n\n\t\t\t// Try to shortcut find operations (as opposed to filters) in HTML documents\n\t\t\tif (!seed) {\n\t\t\t\tsetDocument(context);\n\t\t\t\tcontext = context || document;\n\n\t\t\t\tif (documentIsHTML) {\n\n\t\t\t\t\t// If the selector is sufficiently simple, try using a \"get*By*\" DOM method\n\t\t\t\t\t// (excepting DocumentFragment context, where the methods don't exist)\n\t\t\t\t\tif (nodeType !== 11 && (match = rquickExpr.exec(selector))) {\n\n\t\t\t\t\t\t// ID selector\n\t\t\t\t\t\tif ((m = match[1])) {\n\n\t\t\t\t\t\t\t// Document context\n\t\t\t\t\t\t\tif (nodeType === 9) {\n\t\t\t\t\t\t\t\tif ((elem = context.getElementById(m))) {\n\n\t\t\t\t\t\t\t\t\t// Support: IE 9 only\n\t\t\t\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\t\t\t\tif (elem.id === m) {\n\t\t\t\t\t\t\t\t\t\tpush.call(results, elem);\n\t\t\t\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t// Element context\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t// Support: IE 9 only\n\t\t\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\t\t\tif (newContext && (elem = newContext.getElementById(m)) &&\n\t\t\t\t\t\t\t\t\tfind.contains(context, elem) &&\n\t\t\t\t\t\t\t\t\telem.id === m) {\n\n\t\t\t\t\t\t\t\t\tpush.call(results, elem);\n\t\t\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Type selector\n\t\t\t\t\t\t} else if (match[2]) {\n\t\t\t\t\t\t\tpush.apply(results, context.getElementsByTagName(selector));\n\t\t\t\t\t\t\treturn results;\n\n\t\t\t\t\t\t\t// Class selector\n\t\t\t\t\t\t} else if ((m = match[3]) && context.getElementsByClassName) {\n\t\t\t\t\t\t\tpush.apply(results, context.getElementsByClassName(m));\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Take advantage of querySelectorAll\n\t\t\t\t\tif (!nonnativeSelectorCache[selector + \" \"] &&\n\t\t\t\t\t\t(!rbuggyQSA || !rbuggyQSA.test(selector))) {\n\n\t\t\t\t\t\tnewSelector = selector;\n\t\t\t\t\t\tnewContext = context;\n\n\t\t\t\t\t\t// qSA considers elements outside a scoping root when evaluating child or\n\t\t\t\t\t\t// descendant combinators, which is not what we want.\n\t\t\t\t\t\t// In such cases, we work around the behavior by prefixing every selector in the\n\t\t\t\t\t\t// list with an ID selector referencing the scope context.\n\t\t\t\t\t\t// The technique has to be used as well when a leading combinator is used\n\t\t\t\t\t\t// as such selectors are not recognized by querySelectorAll.\n\t\t\t\t\t\t// Thanks to Andrew Dupont for this technique.\n\t\t\t\t\t\tif (nodeType === 1 &&\n\t\t\t\t\t\t\t(rdescend.test(selector) || rleadingCombinator.test(selector))) {\n\n\t\t\t\t\t\t\t// Expand context for sibling selectors\n\t\t\t\t\t\t\tnewContext = rsibling.test(selector) && testContext(context.parentNode) ||\n\t\t\t\t\t\t\t\tcontext;\n\n\t\t\t\t\t\t\t// We can use :scope instead of the ID hack if the browser\n\t\t\t\t\t\t\t// supports it & if we're not changing the context.\n\t\t\t\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when\n\t\t\t\t\t\t\t// strict-comparing two documents; shallow comparisons work.\n\t\t\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\t\t\tif (newContext != context || !support.scope) {\n\n\t\t\t\t\t\t\t\t// Capture the context ID, setting it first if necessary\n\t\t\t\t\t\t\t\tif ((nid = context.getAttribute(\"id\"))) {\n\t\t\t\t\t\t\t\t\tnid = jQuery.escapeSelector(nid);\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tcontext.setAttribute(\"id\", (nid = expando));\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Prefix every selector in the list\n\t\t\t\t\t\t\tgroups = tokenize(selector);\n\t\t\t\t\t\t\ti = groups.length;\n\t\t\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\t\t\tgroups[i] = (nid ? \"#\" + nid : \":scope\") + \" \" +\n\t\t\t\t\t\t\t\t\ttoSelector(groups[i]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tnewSelector = groups.join(\",\");\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tpush.apply(results,\n\t\t\t\t\t\t\t\tnewContext.querySelectorAll(newSelector)\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t} catch (qsaError) {\n\t\t\t\t\t\t\tnonnativeSelectorCache(selector, true);\n\t\t\t\t\t\t} finally {\n\t\t\t\t\t\t\tif (nid === expando) {\n\t\t\t\t\t\t\t\tcontext.removeAttribute(\"id\");\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// All others\n\t\t\treturn select(selector.replace(rtrimCSS, \"$1\"), context, results, seed);\n\t\t}\n\n\t\t/**\n\t\t * Create key-value caches of limited size\n\t\t * @returns {function(string, object)} Returns the Object data after storing it on itself with\n\t\t *\tproperty name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)\n\t\t *\tdeleting the oldest entry\n\t\t */\n\t\tfunction createCache() {\n\t\t\tvar keys = [];\n\n\t\t\tfunction cache(key, value) {\n\n\t\t\t\t// Use (key + \" \") to avoid collision with native prototype properties\n\t\t\t\t// (see https://github.com/jquery/sizzle/issues/157)\n\t\t\t\tif (keys.push(key + \" \") > Expr.cacheLength) {\n\n\t\t\t\t\t// Only keep the most recent entries\n\t\t\t\t\tdelete cache[keys.shift()];\n\t\t\t\t}\n\t\t\t\treturn (cache[key + \" \"] = value);\n\t\t\t}\n\t\t\treturn cache;\n\t\t}\n\n\t\t/**\n\t\t * Mark a function for special use by jQuery selector module\n\t\t * @param {Function} fn The function to mark\n\t\t */\n\t\tfunction markFunction(fn) {\n\t\t\tfn[expando] = true;\n\t\t\treturn fn;\n\t\t}\n\n\t\t/**\n\t\t * Support testing using an element\n\t\t * @param {Function} fn Passed the created element and returns a boolean result\n\t\t */\n\t\tfunction assert(fn) {\n\t\t\tvar el = document.createElement(\"fieldset\");\n\n\t\t\ttry {\n\t\t\t\treturn !!fn(el);\n\t\t\t} catch (e) {\n\t\t\t\treturn false;\n\t\t\t} finally {\n\n\t\t\t\t// Remove from its parent by default\n\t\t\t\tif (el.parentNode) {\n\t\t\t\t\tel.parentNode.removeChild(el);\n\t\t\t\t}\n\n\t\t\t\t// release memory in IE\n\t\t\t\tel = null;\n\t\t\t}\n\t\t}\n\n\t\t/**\n\t\t * Returns a function to use in pseudos for input types\n\t\t * @param {String} type\n\t\t */\n\t\tfunction createInputPseudo(type) {\n\t\t\treturn function (elem) {\n\t\t\t\treturn nodeName(elem, \"input\") && elem.type === type;\n\t\t\t};\n\t\t}\n\n\t\t/**\n\t\t * Returns a function to use in pseudos for buttons\n\t\t * @param {String} type\n\t\t */\n\t\tfunction createButtonPseudo(type) {\n\t\t\treturn function (elem) {\n\t\t\t\treturn (nodeName(elem, \"input\") || nodeName(elem, \"button\")) &&\n\t\t\t\t\telem.type === type;\n\t\t\t};\n\t\t}\n\n\t\t/**\n\t\t * Returns a function to use in pseudos for :enabled/:disabled\n\t\t * @param {Boolean} disabled true for :disabled; false for :enabled\n\t\t */\n\t\tfunction createDisabledPseudo(disabled) {\n\n\t\t\t// Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable\n\t\t\treturn function (elem) {\n\n\t\t\t\t// Only certain elements can match :enabled or :disabled\n\t\t\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled\n\t\t\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled\n\t\t\t\tif (\"form\" in elem) {\n\n\t\t\t\t\t// Check for inherited disabledness on relevant non-disabled elements:\n\t\t\t\t\t// * listed form-associated elements in a disabled fieldset\n\t\t\t\t\t//   https://html.spec.whatwg.org/multipage/forms.html#category-listed\n\t\t\t\t\t//   https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled\n\t\t\t\t\t// * option elements in a disabled optgroup\n\t\t\t\t\t//   https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled\n\t\t\t\t\t// All such elements have a \"form\" property.\n\t\t\t\t\tif (elem.parentNode && elem.disabled === false) {\n\n\t\t\t\t\t\t// Option elements defer to a parent optgroup if present\n\t\t\t\t\t\tif (\"label\" in elem) {\n\t\t\t\t\t\t\tif (\"label\" in elem.parentNode) {\n\t\t\t\t\t\t\t\treturn elem.parentNode.disabled === disabled;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\treturn elem.disabled === disabled;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Support: IE 6 - 11+\n\t\t\t\t\t\t// Use the isDisabled shortcut property to check for disabled fieldset ancestors\n\t\t\t\t\t\treturn elem.isDisabled === disabled ||\n\n\t\t\t\t\t\t\t// Where there is no isDisabled, check manually\n\t\t\t\t\t\t\telem.isDisabled !== !disabled &&\n\t\t\t\t\t\t\tinDisabledFieldset(elem) === disabled;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn elem.disabled === disabled;\n\n\t\t\t\t\t// Try to winnow out elements that can't be disabled before trusting the disabled property.\n\t\t\t\t\t// Some victims get caught in our net (label, legend, menu, track), but it shouldn't\n\t\t\t\t\t// even exist on them, let alone have a boolean value.\n\t\t\t\t} else if (\"label\" in elem) {\n\t\t\t\t\treturn elem.disabled === disabled;\n\t\t\t\t}\n\n\t\t\t\t// Remaining elements are neither :enabled nor :disabled\n\t\t\t\treturn false;\n\t\t\t};\n\t\t}\n\n\t\t/**\n\t\t * Returns a function to use in pseudos for positionals\n\t\t * @param {Function} fn\n\t\t */\n\t\tfunction createPositionalPseudo(fn) {\n\t\t\treturn markFunction(function (argument) {\n\t\t\t\targument = +argument;\n\t\t\t\treturn markFunction(function (seed, matches) {\n\t\t\t\t\tvar j,\n\t\t\t\t\t\tmatchIndexes = fn([], seed.length, argument),\n\t\t\t\t\t\ti = matchIndexes.length;\n\n\t\t\t\t\t// Match elements found at the specified indexes\n\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\tif (seed[(j = matchIndexes[i])]) {\n\t\t\t\t\t\t\tseed[j] = !(matches[j] = seed[j]);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\n\t\t/**\n\t\t * Checks a node for validity as a jQuery selector context\n\t\t * @param {Element|Object=} context\n\t\t * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value\n\t\t */\n\t\tfunction testContext(context) {\n\t\t\treturn context && typeof context.getElementsByTagName !== \"undefined\" && context;\n\t\t}\n\n\t\t/**\n\t\t * Sets document-related variables once based on the current document\n\t\t * @param {Element|Object} [node] An element or document object to use to set the document\n\t\t * @returns {Object} Returns the current document\n\t\t */\n\t\tfunction setDocument(node) {\n\t\t\tvar subWindow,\n\t\t\t\tdoc = node ? node.ownerDocument || node : preferredDoc;\n\n\t\t\t// Return early if doc is invalid or already selected\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tif (doc == document || doc.nodeType !== 9 || !doc.documentElement) {\n\t\t\t\treturn document;\n\t\t\t}\n\n\t\t\t// Update global variables\n\t\t\tdocument = doc;\n\t\t\tdocumentElement = document.documentElement;\n\t\t\tdocumentIsHTML = !jQuery.isXMLDoc(document);\n\n\t\t\t// Support: iOS 7 only, IE 9 - 11+\n\t\t\t// Older browsers didn't support unprefixed `matches`.\n\t\t\tmatches = documentElement.matches ||\n\t\t\t\tdocumentElement.webkitMatchesSelector ||\n\t\t\t\tdocumentElement.msMatchesSelector;\n\n\t\t\t// Support: IE 9 - 11+, Edge 12 - 18+\n\t\t\t// Accessing iframe documents after unload throws \"permission denied\" errors (see trac-13936)\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tif (preferredDoc != document &&\n\t\t\t\t(subWindow = document.defaultView) && subWindow.top !== subWindow) {\n\n\t\t\t\t// Support: IE 9 - 11+, Edge 12 - 18+\n\t\t\t\tsubWindow.addEventListener(\"unload\", unloadHandler);\n\t\t\t}\n\n\t\t\t// Support: IE <10\n\t\t\t// Check if getElementById returns elements by name\n\t\t\t// The broken getElementById methods don't pick up programmatically-set names,\n\t\t\t// so use a roundabout getElementsByName test\n\t\t\tsupport.getById = assert(function (el) {\n\t\t\t\tdocumentElement.appendChild(el).id = jQuery.expando;\n\t\t\t\treturn !document.getElementsByName ||\n\t\t\t\t\t!document.getElementsByName(jQuery.expando).length;\n\t\t\t});\n\n\t\t\t// Support: IE 9 only\n\t\t\t// Check to see if it's possible to do matchesSelector\n\t\t\t// on a disconnected node.\n\t\t\tsupport.disconnectedMatch = assert(function (el) {\n\t\t\t\treturn matches.call(el, \"*\");\n\t\t\t});\n\n\t\t\t// Support: IE 9 - 11+, Edge 12 - 18+\n\t\t\t// IE/Edge don't support the :scope pseudo-class.\n\t\t\tsupport.scope = assert(function () {\n\t\t\t\treturn document.querySelectorAll(\":scope\");\n\t\t\t});\n\n\t\t\t// Support: Chrome 105 - 111 only, Safari 15.4 - 16.3 only\n\t\t\t// Make sure the `:has()` argument is parsed unforgivingly.\n\t\t\t// We include `*` in the test to detect buggy implementations that are\n\t\t\t// _selectively_ forgiving (specifically when the list includes at least\n\t\t\t// one valid selector).\n\t\t\t// Note that we treat complete lack of support for `:has()` as if it were\n\t\t\t// spec-compliant support, which is fine because use of `:has()` in such\n\t\t\t// environments will fail in the qSA path and fall back to jQuery traversal\n\t\t\t// anyway.\n\t\t\tsupport.cssHas = assert(function () {\n\t\t\t\ttry {\n\t\t\t\t\tdocument.querySelector(\":has(*,:jqfake)\");\n\t\t\t\t\treturn false;\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t// ID filter and find\n\t\t\tif (support.getById) {\n\t\t\t\tExpr.filter.ID = function (id) {\n\t\t\t\t\tvar attrId = id.replace(runescape, funescape);\n\t\t\t\t\treturn function (elem) {\n\t\t\t\t\t\treturn elem.getAttribute(\"id\") === attrId;\n\t\t\t\t\t};\n\t\t\t\t};\n\t\t\t\tExpr.find.ID = function (id, context) {\n\t\t\t\t\tif (typeof context.getElementById !== \"undefined\" && documentIsHTML) {\n\t\t\t\t\t\tvar elem = context.getElementById(id);\n\t\t\t\t\t\treturn elem ? [elem] : [];\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t} else {\n\t\t\t\tExpr.filter.ID = function (id) {\n\t\t\t\t\tvar attrId = id.replace(runescape, funescape);\n\t\t\t\t\treturn function (elem) {\n\t\t\t\t\t\tvar node = typeof elem.getAttributeNode !== \"undefined\" &&\n\t\t\t\t\t\t\telem.getAttributeNode(\"id\");\n\t\t\t\t\t\treturn node && node.value === attrId;\n\t\t\t\t\t};\n\t\t\t\t};\n\n\t\t\t\t// Support: IE 6 - 7 only\n\t\t\t\t// getElementById is not reliable as a find shortcut\n\t\t\t\tExpr.find.ID = function (id, context) {\n\t\t\t\t\tif (typeof context.getElementById !== \"undefined\" && documentIsHTML) {\n\t\t\t\t\t\tvar node, i, elems,\n\t\t\t\t\t\t\telem = context.getElementById(id);\n\n\t\t\t\t\t\tif (elem) {\n\n\t\t\t\t\t\t\t// Verify the id attribute\n\t\t\t\t\t\t\tnode = elem.getAttributeNode(\"id\");\n\t\t\t\t\t\t\tif (node && node.value === id) {\n\t\t\t\t\t\t\t\treturn [elem];\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Fall back on getElementsByName\n\t\t\t\t\t\t\telems = context.getElementsByName(id);\n\t\t\t\t\t\t\ti = 0;\n\t\t\t\t\t\t\twhile ((elem = elems[i++])) {\n\t\t\t\t\t\t\t\tnode = elem.getAttributeNode(\"id\");\n\t\t\t\t\t\t\t\tif (node && node.value === id) {\n\t\t\t\t\t\t\t\t\treturn [elem];\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn [];\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\n\t\t\t// Tag\n\t\t\tExpr.find.TAG = function (tag, context) {\n\t\t\t\tif (typeof context.getElementsByTagName !== \"undefined\") {\n\t\t\t\t\treturn context.getElementsByTagName(tag);\n\n\t\t\t\t\t// DocumentFragment nodes don't have gEBTN\n\t\t\t\t} else {\n\t\t\t\t\treturn context.querySelectorAll(tag);\n\t\t\t\t}\n\t\t\t};\n\n\t\t\t// Class\n\t\t\tExpr.find.CLASS = function (className, context) {\n\t\t\t\tif (typeof context.getElementsByClassName !== \"undefined\" && documentIsHTML) {\n\t\t\t\t\treturn context.getElementsByClassName(className);\n\t\t\t\t}\n\t\t\t};\n\n\t\t\t/* QSA/matchesSelector\n\t\t\t---------------------------------------------------------------------- */\n\n\t\t\t// QSA and matchesSelector support\n\n\t\t\trbuggyQSA = [];\n\n\t\t\t// Build QSA regex\n\t\t\t// Regex strategy adopted from Diego Perini\n\t\t\tassert(function (el) {\n\n\t\t\t\tvar input;\n\n\t\t\t\tdocumentElement.appendChild(el).innerHTML =\n\t\t\t\t\t\"<a id='\" + expando + \"' href='' disabled='disabled'></a>\" +\n\t\t\t\t\t\"<select id='\" + expando + \"-\\r\\\\' disabled='disabled'>\" +\n\t\t\t\t\t\"<option selected=''></option></select>\";\n\n\t\t\t\t// Support: iOS <=7 - 8 only\n\t\t\t\t// Boolean attributes and \"value\" are not treated correctly in some XML documents\n\t\t\t\tif (!el.querySelectorAll(\"[selected]\").length) {\n\t\t\t\t\trbuggyQSA.push(\"\\\\[\" + whitespace + \"*(?:value|\" + booleans + \")\");\n\t\t\t\t}\n\n\t\t\t\t// Support: iOS <=7 - 8 only\n\t\t\t\tif (!el.querySelectorAll(\"[id~=\" + expando + \"-]\").length) {\n\t\t\t\t\trbuggyQSA.push(\"~=\");\n\t\t\t\t}\n\n\t\t\t\t// Support: iOS 8 only\n\t\t\t\t// https://bugs.webkit.org/show_bug.cgi?id=136851\n\t\t\t\t// In-page `selector#id sibling-combinator selector` fails\n\t\t\t\tif (!el.querySelectorAll(\"a#\" + expando + \"+*\").length) {\n\t\t\t\t\trbuggyQSA.push(\".#.+[+~]\");\n\t\t\t\t}\n\n\t\t\t\t// Support: Chrome <=105+, Firefox <=104+, Safari <=15.4+\n\t\t\t\t// In some of the document kinds, these selectors wouldn't work natively.\n\t\t\t\t// This is probably OK but for backwards compatibility we want to maintain\n\t\t\t\t// handling them through jQuery traversal in jQuery 3.x.\n\t\t\t\tif (!el.querySelectorAll(\":checked\").length) {\n\t\t\t\t\trbuggyQSA.push(\":checked\");\n\t\t\t\t}\n\n\t\t\t\t// Support: Windows 8 Native Apps\n\t\t\t\t// The type and name attributes are restricted during .innerHTML assignment\n\t\t\t\tinput = document.createElement(\"input\");\n\t\t\t\tinput.setAttribute(\"type\", \"hidden\");\n\t\t\t\tel.appendChild(input).setAttribute(\"name\", \"D\");\n\n\t\t\t\t// Support: IE 9 - 11+\n\t\t\t\t// IE's :disabled selector does not pick up the children of disabled fieldsets\n\t\t\t\t// Support: Chrome <=105+, Firefox <=104+, Safari <=15.4+\n\t\t\t\t// In some of the document kinds, these selectors wouldn't work natively.\n\t\t\t\t// This is probably OK but for backwards compatibility we want to maintain\n\t\t\t\t// handling them through jQuery traversal in jQuery 3.x.\n\t\t\t\tdocumentElement.appendChild(el).disabled = true;\n\t\t\t\tif (el.querySelectorAll(\":disabled\").length !== 2) {\n\t\t\t\t\trbuggyQSA.push(\":enabled\", \":disabled\");\n\t\t\t\t}\n\n\t\t\t\t// Support: IE 11+, Edge 15 - 18+\n\t\t\t\t// IE 11/Edge don't find elements on a `[name='']` query in some cases.\n\t\t\t\t// Adding a temporary attribute to the document before the selection works\n\t\t\t\t// around the issue.\n\t\t\t\t// Interestingly, IE 10 & older don't seem to have the issue.\n\t\t\t\tinput = document.createElement(\"input\");\n\t\t\t\tinput.setAttribute(\"name\", \"\");\n\t\t\t\tel.appendChild(input);\n\t\t\t\tif (!el.querySelectorAll(\"[name='']\").length) {\n\t\t\t\t\trbuggyQSA.push(\"\\\\[\" + whitespace + \"*name\" + whitespace + \"*=\" +\n\t\t\t\t\t\twhitespace + \"*(?:''|\\\"\\\")\");\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tif (!support.cssHas) {\n\n\t\t\t\t// Support: Chrome 105 - 110+, Safari 15.4 - 16.3+\n\t\t\t\t// Our regular `try-catch` mechanism fails to detect natively-unsupported\n\t\t\t\t// pseudo-classes inside `:has()` (such as `:has(:contains(\"Foo\"))`)\n\t\t\t\t// in browsers that parse the `:has()` argument as a forgiving selector list.\n\t\t\t\t// https://drafts.csswg.org/selectors/#relational now requires the argument\n\t\t\t\t// to be parsed unforgivingly, but browsers have not yet fully adjusted.\n\t\t\t\trbuggyQSA.push(\":has\");\n\t\t\t}\n\n\t\t\trbuggyQSA = rbuggyQSA.length && new RegExp(rbuggyQSA.join(\"|\"));\n\n\t\t\t/* Sorting\n\t\t\t---------------------------------------------------------------------- */\n\n\t\t\t// Document order sorting\n\t\t\tsortOrder = function (a, b) {\n\n\t\t\t\t// Flag for duplicate removal\n\t\t\t\tif (a === b) {\n\t\t\t\t\thasDuplicate = true;\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\n\t\t\t\t// Sort on method existence if only one input has compareDocumentPosition\n\t\t\t\tvar compare = !a.compareDocumentPosition - !b.compareDocumentPosition;\n\t\t\t\tif (compare) {\n\t\t\t\t\treturn compare;\n\t\t\t\t}\n\n\t\t\t\t// Calculate position if both inputs belong to the same document\n\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\tcompare = (a.ownerDocument || a) == (b.ownerDocument || b) ?\n\t\t\t\t\ta.compareDocumentPosition(b) :\n\n\t\t\t\t\t// Otherwise we know they are disconnected\n\t\t\t\t\t1;\n\n\t\t\t\t// Disconnected nodes\n\t\t\t\tif (compare & 1 ||\n\t\t\t\t\t(!support.sortDetached && b.compareDocumentPosition(a) === compare)) {\n\n\t\t\t\t\t// Choose the first element that is related to our preferred document\n\t\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\tif (a === document || a.ownerDocument == preferredDoc &&\n\t\t\t\t\t\tfind.contains(preferredDoc, a)) {\n\t\t\t\t\t\treturn -1;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\tif (b === document || b.ownerDocument == preferredDoc &&\n\t\t\t\t\t\tfind.contains(preferredDoc, b)) {\n\t\t\t\t\t\treturn 1;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Maintain original order\n\t\t\t\t\treturn sortInput ?\n\t\t\t\t\t\t(indexOf.call(sortInput, a) - indexOf.call(sortInput, b)) :\n\t\t\t\t\t\t0;\n\t\t\t\t}\n\n\t\t\t\treturn compare & 4 ? -1 : 1;\n\t\t\t};\n\n\t\t\treturn document;\n\t\t}\n\n\t\tfind.matches = function (expr, elements) {\n\t\t\treturn find(expr, null, null, elements);\n\t\t};\n\n\t\tfind.matchesSelector = function (elem, expr) {\n\t\t\tsetDocument(elem);\n\n\t\t\tif (documentIsHTML &&\n\t\t\t\t!nonnativeSelectorCache[expr + \" \"] &&\n\t\t\t\t(!rbuggyQSA || !rbuggyQSA.test(expr))) {\n\n\t\t\t\ttry {\n\t\t\t\t\tvar ret = matches.call(elem, expr);\n\n\t\t\t\t\t// IE 9's matchesSelector returns false on disconnected nodes\n\t\t\t\t\tif (ret || support.disconnectedMatch ||\n\n\t\t\t\t\t\t// As well, disconnected nodes are said to be in a document\n\t\t\t\t\t\t// fragment in IE 9\n\t\t\t\t\t\telem.document && elem.document.nodeType !== 11) {\n\t\t\t\t\t\treturn ret;\n\t\t\t\t\t}\n\t\t\t\t} catch (e) {\n\t\t\t\t\tnonnativeSelectorCache(expr, true);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn find(expr, document, null, [elem]).length > 0;\n\t\t};\n\n\t\tfind.contains = function (context, elem) {\n\n\t\t\t// Set document vars if needed\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tif ((context.ownerDocument || context) != document) {\n\t\t\t\tsetDocument(context);\n\t\t\t}\n\t\t\treturn jQuery.contains(context, elem);\n\t\t};\n\n\n\t\tfind.attr = function (elem, name) {\n\n\t\t\t// Set document vars if needed\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tif ((elem.ownerDocument || elem) != document) {\n\t\t\t\tsetDocument(elem);\n\t\t\t}\n\n\t\t\tvar fn = Expr.attrHandle[name.toLowerCase()],\n\n\t\t\t\t// Don't get fooled by Object.prototype properties (see trac-13807)\n\t\t\t\tval = fn && hasOwn.call(Expr.attrHandle, name.toLowerCase()) ?\n\t\t\t\t\tfn(elem, name, !documentIsHTML) :\n\t\t\t\t\tundefined;\n\n\t\t\tif (val !== undefined) {\n\t\t\t\treturn val;\n\t\t\t}\n\n\t\t\treturn elem.getAttribute(name);\n\t\t};\n\n\t\tfind.error = function (msg) {\n\t\t\tthrow new Error(\"Syntax error, unrecognized expression: \" + msg);\n\t\t};\n\n\t\t/**\n\t\t * Document sorting and removing duplicates\n\t\t * @param {ArrayLike} results\n\t\t */\n\t\tjQuery.uniqueSort = function (results) {\n\t\t\tvar elem,\n\t\t\t\tduplicates = [],\n\t\t\t\tj = 0,\n\t\t\t\ti = 0;\n\n\t\t\t// Unless we *know* we can detect duplicates, assume their presence\n\t\t\t//\n\t\t\t// Support: Android <=4.0+\n\t\t\t// Testing for detecting duplicates is unpredictable so instead assume we can't\n\t\t\t// depend on duplicate detection in all browsers without a stable sort.\n\t\t\thasDuplicate = !support.sortStable;\n\t\t\tsortInput = !support.sortStable && slice.call(results, 0);\n\t\t\tsort.call(results, sortOrder);\n\n\t\t\tif (hasDuplicate) {\n\t\t\t\twhile ((elem = results[i++])) {\n\t\t\t\t\tif (elem === results[i]) {\n\t\t\t\t\t\tj = duplicates.push(i);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\twhile (j--) {\n\t\t\t\t\tsplice.call(results, duplicates[j], 1);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Clear input after sorting to release objects\n\t\t\t// See https://github.com/jquery/sizzle/pull/225\n\t\t\tsortInput = null;\n\n\t\t\treturn results;\n\t\t};\n\n\t\tjQuery.fn.uniqueSort = function () {\n\t\t\treturn this.pushStack(jQuery.uniqueSort(slice.apply(this)));\n\t\t};\n\n\t\tExpr = jQuery.expr = {\n\n\t\t\t// Can be adjusted by the user\n\t\t\tcacheLength: 50,\n\n\t\t\tcreatePseudo: markFunction,\n\n\t\t\tmatch: matchExpr,\n\n\t\t\tattrHandle: {},\n\n\t\t\tfind: {},\n\n\t\t\trelative: {\n\t\t\t\t\">\": { dir: \"parentNode\", first: true },\n\t\t\t\t\" \": { dir: \"parentNode\" },\n\t\t\t\t\"+\": { dir: \"previousSibling\", first: true },\n\t\t\t\t\"~\": { dir: \"previousSibling\" }\n\t\t\t},\n\n\t\t\tpreFilter: {\n\t\t\t\tATTR: function (match) {\n\t\t\t\t\tmatch[1] = match[1].replace(runescape, funescape);\n\n\t\t\t\t\t// Move the given value to match[3] whether quoted or unquoted\n\t\t\t\t\tmatch[3] = (match[3] || match[4] || match[5] || \"\")\n\t\t\t\t\t\t.replace(runescape, funescape);\n\n\t\t\t\t\tif (match[2] === \"~=\") {\n\t\t\t\t\t\tmatch[3] = \" \" + match[3] + \" \";\n\t\t\t\t\t}\n\n\t\t\t\t\treturn match.slice(0, 4);\n\t\t\t\t},\n\n\t\t\t\tCHILD: function (match) {\n\n\t\t\t\t\t/* matches from matchExpr[\"CHILD\"]\n\t\t\t\t\t\t1 type (only|nth|...)\n\t\t\t\t\t\t2 what (child|of-type)\n\t\t\t\t\t\t3 argument (even|odd|\\d*|\\d*n([+-]\\d+)?|...)\n\t\t\t\t\t\t4 xn-component of xn+y argument ([+-]?\\d*n|)\n\t\t\t\t\t\t5 sign of xn-component\n\t\t\t\t\t\t6 x of xn-component\n\t\t\t\t\t\t7 sign of y-component\n\t\t\t\t\t\t8 y of y-component\n\t\t\t\t\t*/\n\t\t\t\t\tmatch[1] = match[1].toLowerCase();\n\n\t\t\t\t\tif (match[1].slice(0, 3) === \"nth\") {\n\n\t\t\t\t\t\t// nth-* requires argument\n\t\t\t\t\t\tif (!match[3]) {\n\t\t\t\t\t\t\tfind.error(match[0]);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// numeric x and y parameters for Expr.filter.CHILD\n\t\t\t\t\t\t// remember that false/true cast respectively to 0/1\n\t\t\t\t\t\tmatch[4] = +(match[4] ?\n\t\t\t\t\t\t\tmatch[5] + (match[6] || 1) :\n\t\t\t\t\t\t\t2 * (match[3] === \"even\" || match[3] === \"odd\")\n\t\t\t\t\t\t);\n\t\t\t\t\t\tmatch[5] = +((match[7] + match[8]) || match[3] === \"odd\");\n\n\t\t\t\t\t\t// other types prohibit arguments\n\t\t\t\t\t} else if (match[3]) {\n\t\t\t\t\t\tfind.error(match[0]);\n\t\t\t\t\t}\n\n\t\t\t\t\treturn match;\n\t\t\t\t},\n\n\t\t\t\tPSEUDO: function (match) {\n\t\t\t\t\tvar excess,\n\t\t\t\t\t\tunquoted = !match[6] && match[2];\n\n\t\t\t\t\tif (matchExpr.CHILD.test(match[0])) {\n\t\t\t\t\t\treturn null;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Accept quoted arguments as-is\n\t\t\t\t\tif (match[3]) {\n\t\t\t\t\t\tmatch[2] = match[4] || match[5] || \"\";\n\n\t\t\t\t\t\t// Strip excess characters from unquoted arguments\n\t\t\t\t\t} else if (unquoted && rpseudo.test(unquoted) &&\n\n\t\t\t\t\t\t// Get excess from tokenize (recursively)\n\t\t\t\t\t\t(excess = tokenize(unquoted, true)) &&\n\n\t\t\t\t\t\t// advance to the next closing parenthesis\n\t\t\t\t\t\t(excess = unquoted.indexOf(\")\", unquoted.length - excess) - unquoted.length)) {\n\n\t\t\t\t\t\t// excess is a negative index\n\t\t\t\t\t\tmatch[0] = match[0].slice(0, excess);\n\t\t\t\t\t\tmatch[2] = unquoted.slice(0, excess);\n\t\t\t\t\t}\n\n\t\t\t\t\t// Return only captures needed by the pseudo filter method (type and argument)\n\t\t\t\t\treturn match.slice(0, 3);\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tfilter: {\n\n\t\t\t\tTAG: function (nodeNameSelector) {\n\t\t\t\t\tvar expectedNodeName = nodeNameSelector.replace(runescape, funescape).toLowerCase();\n\t\t\t\t\treturn nodeNameSelector === \"*\" ?\n\t\t\t\t\t\tfunction () {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t} :\n\t\t\t\t\t\tfunction (elem) {\n\t\t\t\t\t\t\treturn nodeName(elem, expectedNodeName);\n\t\t\t\t\t\t};\n\t\t\t\t},\n\n\t\t\t\tCLASS: function (className) {\n\t\t\t\t\tvar pattern = classCache[className + \" \"];\n\n\t\t\t\t\treturn pattern ||\n\t\t\t\t\t\t(pattern = new RegExp(\"(^|\" + whitespace + \")\" + className +\n\t\t\t\t\t\t\t\"(\" + whitespace + \"|$)\")) &&\n\t\t\t\t\t\tclassCache(className, function (elem) {\n\t\t\t\t\t\t\treturn pattern.test(\n\t\t\t\t\t\t\t\ttypeof elem.className === \"string\" && elem.className ||\n\t\t\t\t\t\t\t\ttypeof elem.getAttribute !== \"undefined\" &&\n\t\t\t\t\t\t\t\telem.getAttribute(\"class\") ||\n\t\t\t\t\t\t\t\t\"\"\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t});\n\t\t\t\t},\n\n\t\t\t\tATTR: function (name, operator, check) {\n\t\t\t\t\treturn function (elem) {\n\t\t\t\t\t\tvar result = find.attr(elem, name);\n\n\t\t\t\t\t\tif (result == null) {\n\t\t\t\t\t\t\treturn operator === \"!=\";\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!operator) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tresult += \"\";\n\n\t\t\t\t\t\tif (operator === \"=\") {\n\t\t\t\t\t\t\treturn result === check;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (operator === \"!=\") {\n\t\t\t\t\t\t\treturn result !== check;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (operator === \"^=\") {\n\t\t\t\t\t\t\treturn check && result.indexOf(check) === 0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (operator === \"*=\") {\n\t\t\t\t\t\t\treturn check && result.indexOf(check) > -1;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (operator === \"$=\") {\n\t\t\t\t\t\t\treturn check && result.slice(-check.length) === check;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (operator === \"~=\") {\n\t\t\t\t\t\t\treturn (\" \" + result.replace(rwhitespace, \" \") + \" \")\n\t\t\t\t\t\t\t\t.indexOf(check) > -1;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (operator === \"|=\") {\n\t\t\t\t\t\t\treturn result === check || result.slice(0, check.length + 1) === check + \"-\";\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t};\n\t\t\t\t},\n\n\t\t\t\tCHILD: function (type, what, _argument, first, last) {\n\t\t\t\t\tvar simple = type.slice(0, 3) !== \"nth\",\n\t\t\t\t\t\tforward = type.slice(-4) !== \"last\",\n\t\t\t\t\t\tofType = what === \"of-type\";\n\n\t\t\t\t\treturn first === 1 && last === 0 ?\n\n\t\t\t\t\t\t// Shortcut for :nth-*(n)\n\t\t\t\t\t\tfunction (elem) {\n\t\t\t\t\t\t\treturn !!elem.parentNode;\n\t\t\t\t\t\t} :\n\n\t\t\t\t\t\tfunction (elem, _context, xml) {\n\t\t\t\t\t\t\tvar cache, outerCache, node, nodeIndex, start,\n\t\t\t\t\t\t\t\tdir = simple !== forward ? \"nextSibling\" : \"previousSibling\",\n\t\t\t\t\t\t\t\tparent = elem.parentNode,\n\t\t\t\t\t\t\t\tname = ofType && elem.nodeName.toLowerCase(),\n\t\t\t\t\t\t\t\tuseCache = !xml && !ofType,\n\t\t\t\t\t\t\t\tdiff = false;\n\n\t\t\t\t\t\t\tif (parent) {\n\n\t\t\t\t\t\t\t\t// :(first|last|only)-(child|of-type)\n\t\t\t\t\t\t\t\tif (simple) {\n\t\t\t\t\t\t\t\t\twhile (dir) {\n\t\t\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\t\t\twhile ((node = node[dir])) {\n\t\t\t\t\t\t\t\t\t\t\tif (ofType ?\n\t\t\t\t\t\t\t\t\t\t\t\tnodeName(node, name) :\n\t\t\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1) {\n\n\t\t\t\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t// Reverse direction for :only-* (if we haven't yet done so)\n\t\t\t\t\t\t\t\t\t\tstart = dir = type === \"only\" && !start && \"nextSibling\";\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tstart = [forward ? parent.firstChild : parent.lastChild];\n\n\t\t\t\t\t\t\t\t// non-xml :nth-child(...) stores cache data on `parent`\n\t\t\t\t\t\t\t\tif (forward && useCache) {\n\n\t\t\t\t\t\t\t\t\t// Seek `elem` from a previously-cached index\n\t\t\t\t\t\t\t\t\touterCache = parent[expando] || (parent[expando] = {});\n\t\t\t\t\t\t\t\t\tcache = outerCache[type] || [];\n\t\t\t\t\t\t\t\t\tnodeIndex = cache[0] === dirruns && cache[1];\n\t\t\t\t\t\t\t\t\tdiff = nodeIndex && cache[2];\n\t\t\t\t\t\t\t\t\tnode = nodeIndex && parent.childNodes[nodeIndex];\n\n\t\t\t\t\t\t\t\t\twhile ((node = ++nodeIndex && node && node[dir] ||\n\n\t\t\t\t\t\t\t\t\t\t// Fallback to seeking `elem` from the start\n\t\t\t\t\t\t\t\t\t\t(diff = nodeIndex = 0) || start.pop())) {\n\n\t\t\t\t\t\t\t\t\t\t// When found, cache indexes on `parent` and break\n\t\t\t\t\t\t\t\t\t\tif (node.nodeType === 1 && ++diff && node === elem) {\n\t\t\t\t\t\t\t\t\t\t\touterCache[type] = [dirruns, nodeIndex, diff];\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t// Use previously-cached element index if available\n\t\t\t\t\t\t\t\t\tif (useCache) {\n\t\t\t\t\t\t\t\t\t\touterCache = elem[expando] || (elem[expando] = {});\n\t\t\t\t\t\t\t\t\t\tcache = outerCache[type] || [];\n\t\t\t\t\t\t\t\t\t\tnodeIndex = cache[0] === dirruns && cache[1];\n\t\t\t\t\t\t\t\t\t\tdiff = nodeIndex;\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// xml :nth-child(...)\n\t\t\t\t\t\t\t\t\t// or :nth-last-child(...) or :nth(-last)?-of-type(...)\n\t\t\t\t\t\t\t\t\tif (diff === false) {\n\n\t\t\t\t\t\t\t\t\t\t// Use the same loop as above to seek `elem` from the start\n\t\t\t\t\t\t\t\t\t\twhile ((node = ++nodeIndex && node && node[dir] ||\n\t\t\t\t\t\t\t\t\t\t\t(diff = nodeIndex = 0) || start.pop())) {\n\n\t\t\t\t\t\t\t\t\t\t\tif ((ofType ?\n\t\t\t\t\t\t\t\t\t\t\t\tnodeName(node, name) :\n\t\t\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1) &&\n\t\t\t\t\t\t\t\t\t\t\t\t++diff) {\n\n\t\t\t\t\t\t\t\t\t\t\t\t// Cache the index of each encountered element\n\t\t\t\t\t\t\t\t\t\t\t\tif (useCache) {\n\t\t\t\t\t\t\t\t\t\t\t\t\touterCache = node[expando] ||\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t(node[expando] = {});\n\t\t\t\t\t\t\t\t\t\t\t\t\touterCache[type] = [dirruns, diff];\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\tif (node === elem) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t// Incorporate the offset, then check against cycle size\n\t\t\t\t\t\t\t\tdiff -= last;\n\t\t\t\t\t\t\t\treturn diff === first || (diff % first === 0 && diff / first >= 0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\t\t\t\t},\n\n\t\t\t\tPSEUDO: function (pseudo, argument) {\n\n\t\t\t\t\t// pseudo-class names are case-insensitive\n\t\t\t\t\t// https://www.w3.org/TR/selectors/#pseudo-classes\n\t\t\t\t\t// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters\n\t\t\t\t\t// Remember that setFilters inherits from pseudos\n\t\t\t\t\tvar args,\n\t\t\t\t\t\tfn = Expr.pseudos[pseudo] || Expr.setFilters[pseudo.toLowerCase()] ||\n\t\t\t\t\t\t\tfind.error(\"unsupported pseudo: \" + pseudo);\n\n\t\t\t\t\t// The user may use createPseudo to indicate that\n\t\t\t\t\t// arguments are needed to create the filter function\n\t\t\t\t\t// just as jQuery does\n\t\t\t\t\tif (fn[expando]) {\n\t\t\t\t\t\treturn fn(argument);\n\t\t\t\t\t}\n\n\t\t\t\t\t// But maintain support for old signatures\n\t\t\t\t\tif (fn.length > 1) {\n\t\t\t\t\t\targs = [pseudo, pseudo, \"\", argument];\n\t\t\t\t\t\treturn Expr.setFilters.hasOwnProperty(pseudo.toLowerCase()) ?\n\t\t\t\t\t\t\tmarkFunction(function (seed, matches) {\n\t\t\t\t\t\t\t\tvar idx,\n\t\t\t\t\t\t\t\t\tmatched = fn(seed, argument),\n\t\t\t\t\t\t\t\t\ti = matched.length;\n\t\t\t\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\t\t\t\tidx = indexOf.call(seed, matched[i]);\n\t\t\t\t\t\t\t\t\tseed[idx] = !(matches[idx] = matched[i]);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}) :\n\t\t\t\t\t\t\tfunction (elem) {\n\t\t\t\t\t\t\t\treturn fn(elem, 0, args);\n\t\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\treturn fn;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tpseudos: {\n\n\t\t\t\t// Potentially complex pseudos\n\t\t\t\tnot: markFunction(function (selector) {\n\n\t\t\t\t\t// Trim the selector passed to compile\n\t\t\t\t\t// to avoid treating leading and trailing\n\t\t\t\t\t// spaces as combinators\n\t\t\t\t\tvar input = [],\n\t\t\t\t\t\tresults = [],\n\t\t\t\t\t\tmatcher = compile(selector.replace(rtrimCSS, \"$1\"));\n\n\t\t\t\t\treturn matcher[expando] ?\n\t\t\t\t\t\tmarkFunction(function (seed, matches, _context, xml) {\n\t\t\t\t\t\t\tvar elem,\n\t\t\t\t\t\t\t\tunmatched = matcher(seed, null, xml, []),\n\t\t\t\t\t\t\t\ti = seed.length;\n\n\t\t\t\t\t\t\t// Match elements unmatched by `matcher`\n\t\t\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\t\t\tif ((elem = unmatched[i])) {\n\t\t\t\t\t\t\t\t\tseed[i] = !(matches[i] = elem);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}) :\n\t\t\t\t\t\tfunction (elem, _context, xml) {\n\t\t\t\t\t\t\tinput[0] = elem;\n\t\t\t\t\t\t\tmatcher(input, null, xml, results);\n\n\t\t\t\t\t\t\t// Don't keep the element\n\t\t\t\t\t\t\t// (see https://github.com/jquery/sizzle/issues/299)\n\t\t\t\t\t\t\tinput[0] = null;\n\t\t\t\t\t\t\treturn !results.pop();\n\t\t\t\t\t\t};\n\t\t\t\t}),\n\n\t\t\t\thas: markFunction(function (selector) {\n\t\t\t\t\treturn function (elem) {\n\t\t\t\t\t\treturn find(selector, elem).length > 0;\n\t\t\t\t\t};\n\t\t\t\t}),\n\n\t\t\t\tcontains: markFunction(function (text) {\n\t\t\t\t\ttext = text.replace(runescape, funescape);\n\t\t\t\t\treturn function (elem) {\n\t\t\t\t\t\treturn (elem.textContent || jQuery.text(elem)).indexOf(text) > -1;\n\t\t\t\t\t};\n\t\t\t\t}),\n\n\t\t\t\t// \"Whether an element is represented by a :lang() selector\n\t\t\t\t// is based solely on the element's language value\n\t\t\t\t// being equal to the identifier C,\n\t\t\t\t// or beginning with the identifier C immediately followed by \"-\".\n\t\t\t\t// The matching of C against the element's language value is performed case-insensitively.\n\t\t\t\t// The identifier C does not have to be a valid language name.\"\n\t\t\t\t// https://www.w3.org/TR/selectors/#lang-pseudo\n\t\t\t\tlang: markFunction(function (lang) {\n\n\t\t\t\t\t// lang value must be a valid identifier\n\t\t\t\t\tif (!ridentifier.test(lang || \"\")) {\n\t\t\t\t\t\tfind.error(\"unsupported lang: \" + lang);\n\t\t\t\t\t}\n\t\t\t\t\tlang = lang.replace(runescape, funescape).toLowerCase();\n\t\t\t\t\treturn function (elem) {\n\t\t\t\t\t\tvar elemLang;\n\t\t\t\t\t\tdo {\n\t\t\t\t\t\t\tif ((elemLang = documentIsHTML ?\n\t\t\t\t\t\t\t\telem.lang :\n\t\t\t\t\t\t\t\telem.getAttribute(\"xml:lang\") || elem.getAttribute(\"lang\"))) {\n\n\t\t\t\t\t\t\t\telemLang = elemLang.toLowerCase();\n\t\t\t\t\t\t\t\treturn elemLang === lang || elemLang.indexOf(lang + \"-\") === 0;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} while ((elem = elem.parentNode) && elem.nodeType === 1);\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t};\n\t\t\t\t}),\n\n\t\t\t\t// Miscellaneous\n\t\t\t\ttarget: function (elem) {\n\t\t\t\t\tvar hash = window.location && window.location.hash;\n\t\t\t\t\treturn hash && hash.slice(1) === elem.id;\n\t\t\t\t},\n\n\t\t\t\troot: function (elem) {\n\t\t\t\t\treturn elem === documentElement;\n\t\t\t\t},\n\n\t\t\t\tfocus: function (elem) {\n\t\t\t\t\treturn elem === safeActiveElement() &&\n\t\t\t\t\t\tdocument.hasFocus() &&\n\t\t\t\t\t\t!!(elem.type || elem.href || ~elem.tabIndex);\n\t\t\t\t},\n\n\t\t\t\t// Boolean properties\n\t\t\t\tenabled: createDisabledPseudo(false),\n\t\t\t\tdisabled: createDisabledPseudo(true),\n\n\t\t\t\tchecked: function (elem) {\n\n\t\t\t\t\t// In CSS3, :checked should return both checked and selected elements\n\t\t\t\t\t// https://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\t\t\treturn (nodeName(elem, \"input\") && !!elem.checked) ||\n\t\t\t\t\t\t(nodeName(elem, \"option\") && !!elem.selected);\n\t\t\t\t},\n\n\t\t\t\tselected: function (elem) {\n\n\t\t\t\t\t// Support: IE <=11+\n\t\t\t\t\t// Accessing the selectedIndex property\n\t\t\t\t\t// forces the browser to treat the default option as\n\t\t\t\t\t// selected when in an optgroup.\n\t\t\t\t\tif (elem.parentNode) {\n\t\t\t\t\t\t// eslint-disable-next-line no-unused-expressions\n\t\t\t\t\t\telem.parentNode.selectedIndex;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn elem.selected === true;\n\t\t\t\t},\n\n\t\t\t\t// Contents\n\t\t\t\tempty: function (elem) {\n\n\t\t\t\t\t// https://www.w3.org/TR/selectors/#empty-pseudo\n\t\t\t\t\t// :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),\n\t\t\t\t\t//   but not by others (comment: 8; processing instruction: 7; etc.)\n\t\t\t\t\t// nodeType < 6 works because attributes (2) do not appear as children\n\t\t\t\t\tfor (elem = elem.firstChild; elem; elem = elem.nextSibling) {\n\t\t\t\t\t\tif (elem.nodeType < 6) {\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn true;\n\t\t\t\t},\n\n\t\t\t\tparent: function (elem) {\n\t\t\t\t\treturn !Expr.pseudos.empty(elem);\n\t\t\t\t},\n\n\t\t\t\t// Element/input types\n\t\t\t\theader: function (elem) {\n\t\t\t\t\treturn rheader.test(elem.nodeName);\n\t\t\t\t},\n\n\t\t\t\tinput: function (elem) {\n\t\t\t\t\treturn rinputs.test(elem.nodeName);\n\t\t\t\t},\n\n\t\t\t\tbutton: function (elem) {\n\t\t\t\t\treturn nodeName(elem, \"input\") && elem.type === \"button\" ||\n\t\t\t\t\t\tnodeName(elem, \"button\");\n\t\t\t\t},\n\n\t\t\t\ttext: function (elem) {\n\t\t\t\t\tvar attr;\n\t\t\t\t\treturn nodeName(elem, \"input\") && elem.type === \"text\" &&\n\n\t\t\t\t\t\t// Support: IE <10 only\n\t\t\t\t\t\t// New HTML5 attribute values (e.g., \"search\") appear\n\t\t\t\t\t\t// with elem.type === \"text\"\n\t\t\t\t\t\t((attr = elem.getAttribute(\"type\")) == null ||\n\t\t\t\t\t\t\tattr.toLowerCase() === \"text\");\n\t\t\t\t},\n\n\t\t\t\t// Position-in-collection\n\t\t\t\tfirst: createPositionalPseudo(function () {\n\t\t\t\t\treturn [0];\n\t\t\t\t}),\n\n\t\t\t\tlast: createPositionalPseudo(function (_matchIndexes, length) {\n\t\t\t\t\treturn [length - 1];\n\t\t\t\t}),\n\n\t\t\t\teq: createPositionalPseudo(function (_matchIndexes, length, argument) {\n\t\t\t\t\treturn [argument < 0 ? argument + length : argument];\n\t\t\t\t}),\n\n\t\t\t\teven: createPositionalPseudo(function (matchIndexes, length) {\n\t\t\t\t\tvar i = 0;\n\t\t\t\t\tfor (; i < length; i += 2) {\n\t\t\t\t\t\tmatchIndexes.push(i);\n\t\t\t\t\t}\n\t\t\t\t\treturn matchIndexes;\n\t\t\t\t}),\n\n\t\t\t\todd: createPositionalPseudo(function (matchIndexes, length) {\n\t\t\t\t\tvar i = 1;\n\t\t\t\t\tfor (; i < length; i += 2) {\n\t\t\t\t\t\tmatchIndexes.push(i);\n\t\t\t\t\t}\n\t\t\t\t\treturn matchIndexes;\n\t\t\t\t}),\n\n\t\t\t\tlt: createPositionalPseudo(function (matchIndexes, length, argument) {\n\t\t\t\t\tvar i;\n\n\t\t\t\t\tif (argument < 0) {\n\t\t\t\t\t\ti = argument + length;\n\t\t\t\t\t} else if (argument > length) {\n\t\t\t\t\t\ti = length;\n\t\t\t\t\t} else {\n\t\t\t\t\t\ti = argument;\n\t\t\t\t\t}\n\n\t\t\t\t\tfor (; --i >= 0;) {\n\t\t\t\t\t\tmatchIndexes.push(i);\n\t\t\t\t\t}\n\t\t\t\t\treturn matchIndexes;\n\t\t\t\t}),\n\n\t\t\t\tgt: createPositionalPseudo(function (matchIndexes, length, argument) {\n\t\t\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\t\t\tfor (; ++i < length;) {\n\t\t\t\t\t\tmatchIndexes.push(i);\n\t\t\t\t\t}\n\t\t\t\t\treturn matchIndexes;\n\t\t\t\t})\n\t\t\t}\n\t\t};\n\n\t\tExpr.pseudos.nth = Expr.pseudos.eq;\n\n\t\t// Add button/input type pseudos\n\t\tfor (i in { radio: true, checkbox: true, file: true, password: true, image: true }) {\n\t\t\tExpr.pseudos[i] = createInputPseudo(i);\n\t\t}\n\t\tfor (i in { submit: true, reset: true }) {\n\t\t\tExpr.pseudos[i] = createButtonPseudo(i);\n\t\t}\n\n\t\t// Easy API for creating new setFilters\n\t\tfunction setFilters() { }\n\t\tsetFilters.prototype = Expr.filters = Expr.pseudos;\n\t\tExpr.setFilters = new setFilters();\n\n\t\tfunction tokenize(selector, parseOnly) {\n\t\t\tvar matched, match, tokens, type,\n\t\t\t\tsoFar, groups, preFilters,\n\t\t\t\tcached = tokenCache[selector + \" \"];\n\n\t\t\tif (cached) {\n\t\t\t\treturn parseOnly ? 0 : cached.slice(0);\n\t\t\t}\n\n\t\t\tsoFar = selector;\n\t\t\tgroups = [];\n\t\t\tpreFilters = Expr.preFilter;\n\n\t\t\twhile (soFar) {\n\n\t\t\t\t// Comma and first run\n\t\t\t\tif (!matched || (match = rcomma.exec(soFar))) {\n\t\t\t\t\tif (match) {\n\n\t\t\t\t\t\t// Don't consume trailing commas as valid\n\t\t\t\t\t\tsoFar = soFar.slice(match[0].length) || soFar;\n\t\t\t\t\t}\n\t\t\t\t\tgroups.push((tokens = []));\n\t\t\t\t}\n\n\t\t\t\tmatched = false;\n\n\t\t\t\t// Combinators\n\t\t\t\tif ((match = rleadingCombinator.exec(soFar))) {\n\t\t\t\t\tmatched = match.shift();\n\t\t\t\t\ttokens.push({\n\t\t\t\t\t\tvalue: matched,\n\n\t\t\t\t\t\t// Cast descendant combinators to space\n\t\t\t\t\t\ttype: match[0].replace(rtrimCSS, \" \")\n\t\t\t\t\t});\n\t\t\t\t\tsoFar = soFar.slice(matched.length);\n\t\t\t\t}\n\n\t\t\t\t// Filters\n\t\t\t\tfor (type in Expr.filter) {\n\t\t\t\t\tif ((match = matchExpr[type].exec(soFar)) && (!preFilters[type] ||\n\t\t\t\t\t\t(match = preFilters[type](match)))) {\n\t\t\t\t\t\tmatched = match.shift();\n\t\t\t\t\t\ttokens.push({\n\t\t\t\t\t\t\tvalue: matched,\n\t\t\t\t\t\t\ttype: type,\n\t\t\t\t\t\t\tmatches: match\n\t\t\t\t\t\t});\n\t\t\t\t\t\tsoFar = soFar.slice(matched.length);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (!matched) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Return the length of the invalid excess\n\t\t\t// if we're just parsing\n\t\t\t// Otherwise, throw an error or return tokens\n\t\t\tif (parseOnly) {\n\t\t\t\treturn soFar.length;\n\t\t\t}\n\n\t\t\treturn soFar ?\n\t\t\t\tfind.error(selector) :\n\n\t\t\t\t// Cache the tokens\n\t\t\t\ttokenCache(selector, groups).slice(0);\n\t\t}\n\n\t\tfunction toSelector(tokens) {\n\t\t\tvar i = 0,\n\t\t\t\tlen = tokens.length,\n\t\t\t\tselector = \"\";\n\t\t\tfor (; i < len; i++) {\n\t\t\t\tselector += tokens[i].value;\n\t\t\t}\n\t\t\treturn selector;\n\t\t}\n\n\t\tfunction addCombinator(matcher, combinator, base) {\n\t\t\tvar dir = combinator.dir,\n\t\t\t\tskip = combinator.next,\n\t\t\t\tkey = skip || dir,\n\t\t\t\tcheckNonElements = base && key === \"parentNode\",\n\t\t\t\tdoneName = done++;\n\n\t\t\treturn combinator.first ?\n\n\t\t\t\t// Check against closest ancestor/preceding element\n\t\t\t\tfunction (elem, context, xml) {\n\t\t\t\t\twhile ((elem = elem[dir])) {\n\t\t\t\t\t\tif (elem.nodeType === 1 || checkNonElements) {\n\t\t\t\t\t\t\treturn matcher(elem, context, xml);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn false;\n\t\t\t\t} :\n\n\t\t\t\t// Check against all ancestor/preceding elements\n\t\t\t\tfunction (elem, context, xml) {\n\t\t\t\t\tvar oldCache, outerCache,\n\t\t\t\t\t\tnewCache = [dirruns, doneName];\n\n\t\t\t\t\t// We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching\n\t\t\t\t\tif (xml) {\n\t\t\t\t\t\twhile ((elem = elem[dir])) {\n\t\t\t\t\t\t\tif (elem.nodeType === 1 || checkNonElements) {\n\t\t\t\t\t\t\t\tif (matcher(elem, context, xml)) {\n\t\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\twhile ((elem = elem[dir])) {\n\t\t\t\t\t\t\tif (elem.nodeType === 1 || checkNonElements) {\n\t\t\t\t\t\t\t\touterCache = elem[expando] || (elem[expando] = {});\n\n\t\t\t\t\t\t\t\tif (skip && nodeName(elem, skip)) {\n\t\t\t\t\t\t\t\t\telem = elem[dir] || elem;\n\t\t\t\t\t\t\t\t} else if ((oldCache = outerCache[key]) &&\n\t\t\t\t\t\t\t\t\toldCache[0] === dirruns && oldCache[1] === doneName) {\n\n\t\t\t\t\t\t\t\t\t// Assign to newCache so results back-propagate to previous elements\n\t\t\t\t\t\t\t\t\treturn (newCache[2] = oldCache[2]);\n\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t// Reuse newcache so results back-propagate to previous elements\n\t\t\t\t\t\t\t\t\touterCache[key] = newCache;\n\n\t\t\t\t\t\t\t\t\t// A match means we're done; a fail means we have to keep checking\n\t\t\t\t\t\t\t\t\tif ((newCache[2] = matcher(elem, context, xml))) {\n\t\t\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn false;\n\t\t\t\t};\n\t\t}\n\n\t\tfunction elementMatcher(matchers) {\n\t\t\treturn matchers.length > 1 ?\n\t\t\t\tfunction (elem, context, xml) {\n\t\t\t\t\tvar i = matchers.length;\n\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\tif (!matchers[i](elem, context, xml)) {\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn true;\n\t\t\t\t} :\n\t\t\t\tmatchers[0];\n\t\t}\n\n\t\tfunction multipleContexts(selector, contexts, results) {\n\t\t\tvar i = 0,\n\t\t\t\tlen = contexts.length;\n\t\t\tfor (; i < len; i++) {\n\t\t\t\tfind(selector, contexts[i], results);\n\t\t\t}\n\t\t\treturn results;\n\t\t}\n\n\t\tfunction condense(unmatched, map, filter, context, xml) {\n\t\t\tvar elem,\n\t\t\t\tnewUnmatched = [],\n\t\t\t\ti = 0,\n\t\t\t\tlen = unmatched.length,\n\t\t\t\tmapped = map != null;\n\n\t\t\tfor (; i < len; i++) {\n\t\t\t\tif ((elem = unmatched[i])) {\n\t\t\t\t\tif (!filter || filter(elem, context, xml)) {\n\t\t\t\t\t\tnewUnmatched.push(elem);\n\t\t\t\t\t\tif (mapped) {\n\t\t\t\t\t\t\tmap.push(i);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn newUnmatched;\n\t\t}\n\n\t\tfunction setMatcher(preFilter, selector, matcher, postFilter, postFinder, postSelector) {\n\t\t\tif (postFilter && !postFilter[expando]) {\n\t\t\t\tpostFilter = setMatcher(postFilter);\n\t\t\t}\n\t\t\tif (postFinder && !postFinder[expando]) {\n\t\t\t\tpostFinder = setMatcher(postFinder, postSelector);\n\t\t\t}\n\t\t\treturn markFunction(function (seed, results, context, xml) {\n\t\t\t\tvar temp, i, elem, matcherOut,\n\t\t\t\t\tpreMap = [],\n\t\t\t\t\tpostMap = [],\n\t\t\t\t\tpreexisting = results.length,\n\n\t\t\t\t\t// Get initial elements from seed or context\n\t\t\t\t\telems = seed ||\n\t\t\t\t\t\tmultipleContexts(selector || \"*\",\n\t\t\t\t\t\t\tcontext.nodeType ? [context] : context, []),\n\n\t\t\t\t\t// Prefilter to get matcher input, preserving a map for seed-results synchronization\n\t\t\t\t\tmatcherIn = preFilter && (seed || !selector) ?\n\t\t\t\t\t\tcondense(elems, preMap, preFilter, context, xml) :\n\t\t\t\t\t\telems;\n\n\t\t\t\tif (matcher) {\n\n\t\t\t\t\t// If we have a postFinder, or filtered seed, or non-seed postFilter\n\t\t\t\t\t// or preexisting results,\n\t\t\t\t\tmatcherOut = postFinder || (seed ? preFilter : preexisting || postFilter) ?\n\n\t\t\t\t\t\t// ...intermediate processing is necessary\n\t\t\t\t\t\t[] :\n\n\t\t\t\t\t\t// ...otherwise use results directly\n\t\t\t\t\t\tresults;\n\n\t\t\t\t\t// Find primary matches\n\t\t\t\t\tmatcher(matcherIn, matcherOut, context, xml);\n\t\t\t\t} else {\n\t\t\t\t\tmatcherOut = matcherIn;\n\t\t\t\t}\n\n\t\t\t\t// Apply postFilter\n\t\t\t\tif (postFilter) {\n\t\t\t\t\ttemp = condense(matcherOut, postMap);\n\t\t\t\t\tpostFilter(temp, [], context, xml);\n\n\t\t\t\t\t// Un-match failing elements by moving them back to matcherIn\n\t\t\t\t\ti = temp.length;\n\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\tif ((elem = temp[i])) {\n\t\t\t\t\t\t\tmatcherOut[postMap[i]] = !(matcherIn[postMap[i]] = elem);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (seed) {\n\t\t\t\t\tif (postFinder || preFilter) {\n\t\t\t\t\t\tif (postFinder) {\n\n\t\t\t\t\t\t\t// Get the final matcherOut by condensing this intermediate into postFinder contexts\n\t\t\t\t\t\t\ttemp = [];\n\t\t\t\t\t\t\ti = matcherOut.length;\n\t\t\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\t\t\tif ((elem = matcherOut[i])) {\n\n\t\t\t\t\t\t\t\t\t// Restore matcherIn since elem is not yet a final match\n\t\t\t\t\t\t\t\t\ttemp.push((matcherIn[i] = elem));\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tpostFinder(null, (matcherOut = []), temp, xml);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Move matched elements from seed to results to keep them synchronized\n\t\t\t\t\t\ti = matcherOut.length;\n\t\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\t\tif ((elem = matcherOut[i]) &&\n\t\t\t\t\t\t\t\t(temp = postFinder ? indexOf.call(seed, elem) : preMap[i]) > -1) {\n\n\t\t\t\t\t\t\t\tseed[temp] = !(results[temp] = elem);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Add elements to results, through postFinder if defined\n\t\t\t\t} else {\n\t\t\t\t\tmatcherOut = condense(\n\t\t\t\t\t\tmatcherOut === results ?\n\t\t\t\t\t\t\tmatcherOut.splice(preexisting, matcherOut.length) :\n\t\t\t\t\t\t\tmatcherOut\n\t\t\t\t\t);\n\t\t\t\t\tif (postFinder) {\n\t\t\t\t\t\tpostFinder(null, results, matcherOut, xml);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tpush.apply(results, matcherOut);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tfunction matcherFromTokens(tokens) {\n\t\t\tvar checkContext, matcher, j,\n\t\t\t\tlen = tokens.length,\n\t\t\t\tleadingRelative = Expr.relative[tokens[0].type],\n\t\t\t\timplicitRelative = leadingRelative || Expr.relative[\" \"],\n\t\t\t\ti = leadingRelative ? 1 : 0,\n\n\t\t\t\t// The foundational matcher ensures that elements are reachable from top-level context(s)\n\t\t\t\tmatchContext = addCombinator(function (elem) {\n\t\t\t\t\treturn elem === checkContext;\n\t\t\t\t}, implicitRelative, true),\n\t\t\t\tmatchAnyContext = addCombinator(function (elem) {\n\t\t\t\t\treturn indexOf.call(checkContext, elem) > -1;\n\t\t\t\t}, implicitRelative, true),\n\t\t\t\tmatchers = [function (elem, context, xml) {\n\n\t\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\tvar ret = (!leadingRelative && (xml || context != outermostContext)) || (\n\t\t\t\t\t\t(checkContext = context).nodeType ?\n\t\t\t\t\t\t\tmatchContext(elem, context, xml) :\n\t\t\t\t\t\t\tmatchAnyContext(elem, context, xml));\n\n\t\t\t\t\t// Avoid hanging onto element\n\t\t\t\t\t// (see https://github.com/jquery/sizzle/issues/299)\n\t\t\t\t\tcheckContext = null;\n\t\t\t\t\treturn ret;\n\t\t\t\t}];\n\n\t\t\tfor (; i < len; i++) {\n\t\t\t\tif ((matcher = Expr.relative[tokens[i].type])) {\n\t\t\t\t\tmatchers = [addCombinator(elementMatcher(matchers), matcher)];\n\t\t\t\t} else {\n\t\t\t\t\tmatcher = Expr.filter[tokens[i].type].apply(null, tokens[i].matches);\n\n\t\t\t\t\t// Return special upon seeing a positional matcher\n\t\t\t\t\tif (matcher[expando]) {\n\n\t\t\t\t\t\t// Find the next relative operator (if any) for proper handling\n\t\t\t\t\t\tj = ++i;\n\t\t\t\t\t\tfor (; j < len; j++) {\n\t\t\t\t\t\t\tif (Expr.relative[tokens[j].type]) {\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn setMatcher(\n\t\t\t\t\t\t\ti > 1 && elementMatcher(matchers),\n\t\t\t\t\t\t\ti > 1 && toSelector(\n\n\t\t\t\t\t\t\t\t// If the preceding token was a descendant combinator, insert an implicit any-element `*`\n\t\t\t\t\t\t\t\ttokens.slice(0, i - 1)\n\t\t\t\t\t\t\t\t\t.concat({ value: tokens[i - 2].type === \" \" ? \"*\" : \"\" })\n\t\t\t\t\t\t\t).replace(rtrimCSS, \"$1\"),\n\t\t\t\t\t\t\tmatcher,\n\t\t\t\t\t\t\ti < j && matcherFromTokens(tokens.slice(i, j)),\n\t\t\t\t\t\t\tj < len && matcherFromTokens((tokens = tokens.slice(j))),\n\t\t\t\t\t\t\tj < len && toSelector(tokens)\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\tmatchers.push(matcher);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn elementMatcher(matchers);\n\t\t}\n\n\t\tfunction matcherFromGroupMatchers(elementMatchers, setMatchers) {\n\t\t\tvar bySet = setMatchers.length > 0,\n\t\t\t\tbyElement = elementMatchers.length > 0,\n\t\t\t\tsuperMatcher = function (seed, context, xml, results, outermost) {\n\t\t\t\t\tvar elem, j, matcher,\n\t\t\t\t\t\tmatchedCount = 0,\n\t\t\t\t\t\ti = \"0\",\n\t\t\t\t\t\tunmatched = seed && [],\n\t\t\t\t\t\tsetMatched = [],\n\t\t\t\t\t\tcontextBackup = outermostContext,\n\n\t\t\t\t\t\t// We must always have either seed elements or outermost context\n\t\t\t\t\t\telems = seed || byElement && Expr.find.TAG(\"*\", outermost),\n\n\t\t\t\t\t\t// Use integer dirruns iff this is the outermost matcher\n\t\t\t\t\t\tdirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1),\n\t\t\t\t\t\tlen = elems.length;\n\n\t\t\t\t\tif (outermost) {\n\n\t\t\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\t\toutermostContext = context == document || context || outermost;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Add elements passing elementMatchers directly to results\n\t\t\t\t\t// Support: iOS <=7 - 9 only\n\t\t\t\t\t// Tolerate NodeList properties (IE: \"length\"; Safari: <number>) matching\n\t\t\t\t\t// elements by id. (see trac-14142)\n\t\t\t\t\tfor (; i !== len && (elem = elems[i]) != null; i++) {\n\t\t\t\t\t\tif (byElement && elem) {\n\t\t\t\t\t\t\tj = 0;\n\n\t\t\t\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\t\t\tif (!context && elem.ownerDocument != document) {\n\t\t\t\t\t\t\t\tsetDocument(elem);\n\t\t\t\t\t\t\t\txml = !documentIsHTML;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\twhile ((matcher = elementMatchers[j++])) {\n\t\t\t\t\t\t\t\tif (matcher(elem, context || document, xml)) {\n\t\t\t\t\t\t\t\t\tpush.call(results, elem);\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (outermost) {\n\t\t\t\t\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Track unmatched elements for set filters\n\t\t\t\t\t\tif (bySet) {\n\n\t\t\t\t\t\t\t// They will have gone through all possible matchers\n\t\t\t\t\t\t\tif ((elem = !matcher && elem)) {\n\t\t\t\t\t\t\t\tmatchedCount--;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Lengthen the array for every element, matched or not\n\t\t\t\t\t\t\tif (seed) {\n\t\t\t\t\t\t\t\tunmatched.push(elem);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// `i` is now the count of elements visited above, and adding it to `matchedCount`\n\t\t\t\t\t// makes the latter nonnegative.\n\t\t\t\t\tmatchedCount += i;\n\n\t\t\t\t\t// Apply set filters to unmatched elements\n\t\t\t\t\t// NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`\n\t\t\t\t\t// equals `i`), unless we didn't visit _any_ elements in the above loop because we have\n\t\t\t\t\t// no element matchers and no seed.\n\t\t\t\t\t// Incrementing an initially-string \"0\" `i` allows `i` to remain a string only in that\n\t\t\t\t\t// case, which will result in a \"00\" `matchedCount` that differs from `i` but is also\n\t\t\t\t\t// numerically zero.\n\t\t\t\t\tif (bySet && i !== matchedCount) {\n\t\t\t\t\t\tj = 0;\n\t\t\t\t\t\twhile ((matcher = setMatchers[j++])) {\n\t\t\t\t\t\t\tmatcher(unmatched, setMatched, context, xml);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (seed) {\n\n\t\t\t\t\t\t\t// Reintegrate element matches to eliminate the need for sorting\n\t\t\t\t\t\t\tif (matchedCount > 0) {\n\t\t\t\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\t\t\t\tif (!(unmatched[i] || setMatched[i])) {\n\t\t\t\t\t\t\t\t\t\tsetMatched[i] = pop.call(results);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Discard index placeholder values to get only actual matches\n\t\t\t\t\t\t\tsetMatched = condense(setMatched);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Add matches to results\n\t\t\t\t\t\tpush.apply(results, setMatched);\n\n\t\t\t\t\t\t// Seedless set matches succeeding multiple successful matchers stipulate sorting\n\t\t\t\t\t\tif (outermost && !seed && setMatched.length > 0 &&\n\t\t\t\t\t\t\t(matchedCount + setMatchers.length) > 1) {\n\n\t\t\t\t\t\t\tjQuery.uniqueSort(results);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Override manipulation of globals by nested matchers\n\t\t\t\t\tif (outermost) {\n\t\t\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\t\t\toutermostContext = contextBackup;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn unmatched;\n\t\t\t\t};\n\n\t\t\treturn bySet ?\n\t\t\t\tmarkFunction(superMatcher) :\n\t\t\t\tsuperMatcher;\n\t\t}\n\n\t\tfunction compile(selector, match /* Internal Use Only */) {\n\t\t\tvar i,\n\t\t\t\tsetMatchers = [],\n\t\t\t\telementMatchers = [],\n\t\t\t\tcached = compilerCache[selector + \" \"];\n\n\t\t\tif (!cached) {\n\n\t\t\t\t// Generate a function of recursive functions that can be used to check each element\n\t\t\t\tif (!match) {\n\t\t\t\t\tmatch = tokenize(selector);\n\t\t\t\t}\n\t\t\t\ti = match.length;\n\t\t\t\twhile (i--) {\n\t\t\t\t\tcached = matcherFromTokens(match[i]);\n\t\t\t\t\tif (cached[expando]) {\n\t\t\t\t\t\tsetMatchers.push(cached);\n\t\t\t\t\t} else {\n\t\t\t\t\t\telementMatchers.push(cached);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Cache the compiled function\n\t\t\t\tcached = compilerCache(selector,\n\t\t\t\t\tmatcherFromGroupMatchers(elementMatchers, setMatchers));\n\n\t\t\t\t// Save selector and tokenization\n\t\t\t\tcached.selector = selector;\n\t\t\t}\n\t\t\treturn cached;\n\t\t}\n\n\t\t/**\n\t\t * A low-level selection function that works with jQuery's compiled\n\t\t *  selector functions\n\t\t * @param {String|Function} selector A selector or a pre-compiled\n\t\t *  selector function built with jQuery selector compile\n\t\t * @param {Element} context\n\t\t * @param {Array} [results]\n\t\t * @param {Array} [seed] A set of elements to match against\n\t\t */\n\t\tfunction select(selector, context, results, seed) {\n\t\t\tvar i, tokens, token, type, find,\n\t\t\t\tcompiled = typeof selector === \"function\" && selector,\n\t\t\t\tmatch = !seed && tokenize((selector = compiled.selector || selector));\n\n\t\t\tresults = results || [];\n\n\t\t\t// Try to minimize operations if there is only one selector in the list and no seed\n\t\t\t// (the latter of which guarantees us context)\n\t\t\tif (match.length === 1) {\n\n\t\t\t\t// Reduce context if the leading compound selector is an ID\n\t\t\t\ttokens = match[0] = match[0].slice(0);\n\t\t\t\tif (tokens.length > 2 && (token = tokens[0]).type === \"ID\" &&\n\t\t\t\t\tcontext.nodeType === 9 && documentIsHTML && Expr.relative[tokens[1].type]) {\n\n\t\t\t\t\tcontext = (Expr.find.ID(\n\t\t\t\t\t\ttoken.matches[0].replace(runescape, funescape),\n\t\t\t\t\t\tcontext\n\t\t\t\t\t) || [])[0];\n\t\t\t\t\tif (!context) {\n\t\t\t\t\t\treturn results;\n\n\t\t\t\t\t\t// Precompiled matchers will still verify ancestry, so step up a level\n\t\t\t\t\t} else if (compiled) {\n\t\t\t\t\t\tcontext = context.parentNode;\n\t\t\t\t\t}\n\n\t\t\t\t\tselector = selector.slice(tokens.shift().value.length);\n\t\t\t\t}\n\n\t\t\t\t// Fetch a seed set for right-to-left matching\n\t\t\t\ti = matchExpr.needsContext.test(selector) ? 0 : tokens.length;\n\t\t\t\twhile (i--) {\n\t\t\t\t\ttoken = tokens[i];\n\n\t\t\t\t\t// Abort if we hit a combinator\n\t\t\t\t\tif (Expr.relative[(type = token.type)]) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tif ((find = Expr.find[type])) {\n\n\t\t\t\t\t\t// Search, expanding context for leading sibling combinators\n\t\t\t\t\t\tif ((seed = find(\n\t\t\t\t\t\t\ttoken.matches[0].replace(runescape, funescape),\n\t\t\t\t\t\t\trsibling.test(tokens[0].type) &&\n\t\t\t\t\t\t\ttestContext(context.parentNode) || context\n\t\t\t\t\t\t))) {\n\n\t\t\t\t\t\t\t// If seed is empty or no tokens remain, we can return early\n\t\t\t\t\t\t\ttokens.splice(i, 1);\n\t\t\t\t\t\t\tselector = seed.length && toSelector(tokens);\n\t\t\t\t\t\t\tif (!selector) {\n\t\t\t\t\t\t\t\tpush.apply(results, seed);\n\t\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Compile and execute a filtering function if one is not provided\n\t\t\t// Provide `match` to avoid retokenization if we modified the selector above\n\t\t\t(compiled || compile(selector, match))(\n\t\t\t\tseed,\n\t\t\t\tcontext,\n\t\t\t\t!documentIsHTML,\n\t\t\t\tresults,\n\t\t\t\t!context || rsibling.test(selector) && testContext(context.parentNode) || context\n\t\t\t);\n\t\t\treturn results;\n\t\t}\n\n\t\t// One-time assignments\n\n\t\t// Support: Android <=4.0 - 4.1+\n\t\t// Sort stability\n\t\tsupport.sortStable = expando.split(\"\").sort(sortOrder).join(\"\") === expando;\n\n\t\t// Initialize against the default document\n\t\tsetDocument();\n\n\t\t// Support: Android <=4.0 - 4.1+\n\t\t// Detached nodes confoundingly follow *each other*\n\t\tsupport.sortDetached = assert(function (el) {\n\n\t\t\t// Should return 1, but returns 4 (following)\n\t\t\treturn el.compareDocumentPosition(document.createElement(\"fieldset\")) & 1;\n\t\t});\n\n\t\tjQuery.find = find;\n\n\t\t// Deprecated\n\t\tjQuery.expr[\":\"] = jQuery.expr.pseudos;\n\t\tjQuery.unique = jQuery.uniqueSort;\n\n\t\t// These have always been private, but they used to be documented\n\t\t// as part of Sizzle so let's maintain them in the 3.x line\n\t\t// for backwards compatibility purposes.\n\t\tfind.compile = compile;\n\t\tfind.select = select;\n\t\tfind.setDocument = setDocument;\n\n\t\tfind.escape = jQuery.escapeSelector;\n\t\tfind.getText = jQuery.text;\n\t\tfind.isXML = jQuery.isXMLDoc;\n\t\tfind.selectors = jQuery.expr;\n\t\tfind.support = jQuery.support;\n\t\tfind.uniqueSort = jQuery.uniqueSort;\n\n\t\t/* eslint-enable */\n\n\t})();\n\n\n\tvar dir = function (elem, dir, until) {\n\t\tvar matched = [],\n\t\t\ttruncate = until !== undefined;\n\n\t\twhile ((elem = elem[dir]) && elem.nodeType !== 9) {\n\t\t\tif (elem.nodeType === 1) {\n\t\t\t\tif (truncate && jQuery(elem).is(until)) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tmatched.push(elem);\n\t\t\t}\n\t\t}\n\t\treturn matched;\n\t};\n\n\n\tvar siblings = function (n, elem) {\n\t\tvar matched = [];\n\n\t\tfor (; n; n = n.nextSibling) {\n\t\t\tif (n.nodeType === 1 && n !== elem) {\n\t\t\t\tmatched.push(n);\n\t\t\t}\n\t\t}\n\n\t\treturn matched;\n\t};\n\n\n\tvar rneedsContext = jQuery.expr.match.needsContext;\n\n\tvar rsingleTag = (/^<([a-z][^\\/\\0>:\\x20\\t\\r\\n\\f]*)[\\x20\\t\\r\\n\\f]*\\/?>(?:<\\/\\1>|)$/i);\n\n\n\n\t// Implement the identical functionality for filter and not\n\tfunction winnow(elements, qualifier, not) {\n\t\tif (isFunction(qualifier)) {\n\t\t\treturn jQuery.grep(elements, function (elem, i) {\n\t\t\t\treturn !!qualifier.call(elem, i, elem) !== not;\n\t\t\t});\n\t\t}\n\n\t\t// Single element\n\t\tif (qualifier.nodeType) {\n\t\t\treturn jQuery.grep(elements, function (elem) {\n\t\t\t\treturn (elem === qualifier) !== not;\n\t\t\t});\n\t\t}\n\n\t\t// Arraylike of elements (jQuery, arguments, Array)\n\t\tif (typeof qualifier !== \"string\") {\n\t\t\treturn jQuery.grep(elements, function (elem) {\n\t\t\t\treturn (indexOf.call(qualifier, elem) > -1) !== not;\n\t\t\t});\n\t\t}\n\n\t\t// Filtered directly for both simple and complex selectors\n\t\treturn jQuery.filter(qualifier, elements, not);\n\t}\n\n\tjQuery.filter = function (expr, elems, not) {\n\t\tvar elem = elems[0];\n\n\t\tif (not) {\n\t\t\texpr = \":not(\" + expr + \")\";\n\t\t}\n\n\t\tif (elems.length === 1 && elem.nodeType === 1) {\n\t\t\treturn jQuery.find.matchesSelector(elem, expr) ? [elem] : [];\n\t\t}\n\n\t\treturn jQuery.find.matches(expr, jQuery.grep(elems, function (elem) {\n\t\t\treturn elem.nodeType === 1;\n\t\t}));\n\t};\n\n\tjQuery.fn.extend({\n\t\tfind: function (selector) {\n\t\t\tvar i, ret,\n\t\t\t\tlen = this.length,\n\t\t\t\tself = this;\n\n\t\t\tif (typeof selector !== \"string\") {\n\t\t\t\treturn this.pushStack(jQuery(selector).filter(function () {\n\t\t\t\t\tfor (i = 0; i < len; i++) {\n\t\t\t\t\t\tif (jQuery.contains(self[i], this)) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}));\n\t\t\t}\n\n\t\t\tret = this.pushStack([]);\n\n\t\t\tfor (i = 0; i < len; i++) {\n\t\t\t\tjQuery.find(selector, self[i], ret);\n\t\t\t}\n\n\t\t\treturn len > 1 ? jQuery.uniqueSort(ret) : ret;\n\t\t},\n\t\tfilter: function (selector) {\n\t\t\treturn this.pushStack(winnow(this, selector || [], false));\n\t\t},\n\t\tnot: function (selector) {\n\t\t\treturn this.pushStack(winnow(this, selector || [], true));\n\t\t},\n\t\tis: function (selector) {\n\t\t\treturn !!winnow(\n\t\t\t\tthis,\n\n\t\t\t\t// If this is a positional/relative selector, check membership in the returned set\n\t\t\t\t// so $(\"p:first\").is(\"p:last\") won't return true for a doc with two \"p\".\n\t\t\t\ttypeof selector === \"string\" && rneedsContext.test(selector) ?\n\t\t\t\t\tjQuery(selector) :\n\t\t\t\t\tselector || [],\n\t\t\t\tfalse\n\t\t\t).length;\n\t\t}\n\t});\n\n\n\t// Initialize a jQuery object\n\n\n\t// A central reference to the root jQuery(document)\n\tvar rootjQuery,\n\n\t\t// A simple way to check for HTML strings\n\t\t// Prioritize #id over <tag> to avoid XSS via location.hash (trac-9521)\n\t\t// Strict HTML recognition (trac-11290: must start with <)\n\t\t// Shortcut simple #id case for speed\n\t\trquickExpr = /^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]+))$/,\n\n\t\tinit = jQuery.fn.init = function (selector, context, root) {\n\t\t\tvar match, elem;\n\n\t\t\t// HANDLE: $(\"\"), $(null), $(undefined), $(false)\n\t\t\tif (!selector) {\n\t\t\t\treturn this;\n\t\t\t}\n\n\t\t\t// Method init() accepts an alternate rootjQuery\n\t\t\t// so migrate can support jQuery.sub (gh-2101)\n\t\t\troot = root || rootjQuery;\n\n\t\t\t// Handle HTML strings\n\t\t\tif (typeof selector === \"string\") {\n\t\t\t\tif (selector[0] === \"<\" &&\n\t\t\t\t\tselector[selector.length - 1] === \">\" &&\n\t\t\t\t\tselector.length >= 3) {\n\n\t\t\t\t\t// Assume that strings that start and end with <> are HTML and skip the regex check\n\t\t\t\t\tmatch = [null, selector, null];\n\n\t\t\t\t} else {\n\t\t\t\t\tmatch = rquickExpr.exec(selector);\n\t\t\t\t}\n\n\t\t\t\t// Match html or make sure no context is specified for #id\n\t\t\t\tif (match && (match[1] || !context)) {\n\n\t\t\t\t\t// HANDLE: $(html) -> $(array)\n\t\t\t\t\tif (match[1]) {\n\t\t\t\t\t\tcontext = context instanceof jQuery ? context[0] : context;\n\n\t\t\t\t\t\t// Option to run scripts is true for back-compat\n\t\t\t\t\t\t// Intentionally let the error be thrown if parseHTML is not present\n\t\t\t\t\t\tjQuery.merge(this, jQuery.parseHTML(\n\t\t\t\t\t\t\tmatch[1],\n\t\t\t\t\t\t\tcontext && context.nodeType ? context.ownerDocument || context : document,\n\t\t\t\t\t\t\ttrue\n\t\t\t\t\t\t));\n\n\t\t\t\t\t\t// HANDLE: $(html, props)\n\t\t\t\t\t\tif (rsingleTag.test(match[1]) && jQuery.isPlainObject(context)) {\n\t\t\t\t\t\t\tfor (match in context) {\n\n\t\t\t\t\t\t\t\t// Properties of context are called as methods if possible\n\t\t\t\t\t\t\t\tif (isFunction(this[match])) {\n\t\t\t\t\t\t\t\t\tthis[match](context[match]);\n\n\t\t\t\t\t\t\t\t\t// ...and otherwise set as attributes\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tthis.attr(match, context[match]);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn this;\n\n\t\t\t\t\t\t// HANDLE: $(#id)\n\t\t\t\t\t} else {\n\t\t\t\t\t\telem = document.getElementById(match[2]);\n\n\t\t\t\t\t\tif (elem) {\n\n\t\t\t\t\t\t\t// Inject the element directly into the jQuery object\n\t\t\t\t\t\t\tthis[0] = elem;\n\t\t\t\t\t\t\tthis.length = 1;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn this;\n\t\t\t\t\t}\n\n\t\t\t\t\t// HANDLE: $(expr, $(...))\n\t\t\t\t} else if (!context || context.jquery) {\n\t\t\t\t\treturn (context || root).find(selector);\n\n\t\t\t\t\t// HANDLE: $(expr, context)\n\t\t\t\t\t// (which is just equivalent to: $(context).find(expr)\n\t\t\t\t} else {\n\t\t\t\t\treturn this.constructor(context).find(selector);\n\t\t\t\t}\n\n\t\t\t\t// HANDLE: $(DOMElement)\n\t\t\t} else if (selector.nodeType) {\n\t\t\t\tthis[0] = selector;\n\t\t\t\tthis.length = 1;\n\t\t\t\treturn this;\n\n\t\t\t\t// HANDLE: $(function)\n\t\t\t\t// Shortcut for document ready\n\t\t\t} else if (isFunction(selector)) {\n\t\t\t\treturn root.ready !== undefined ?\n\t\t\t\t\troot.ready(selector) :\n\n\t\t\t\t\t// Execute immediately if ready is not present\n\t\t\t\t\tselector(jQuery);\n\t\t\t}\n\n\t\t\treturn jQuery.makeArray(selector, this);\n\t\t};\n\n\t// Give the init function the jQuery prototype for later instantiation\n\tinit.prototype = jQuery.fn;\n\n\t// Initialize central reference\n\trootjQuery = jQuery(document);\n\n\n\tvar rparentsprev = /^(?:parents|prev(?:Until|All))/,\n\n\t\t// Methods guaranteed to produce a unique set when starting from a unique set\n\t\tguaranteedUnique = {\n\t\t\tchildren: true,\n\t\t\tcontents: true,\n\t\t\tnext: true,\n\t\t\tprev: true\n\t\t};\n\n\tjQuery.fn.extend({\n\t\thas: function (target) {\n\t\t\tvar targets = jQuery(target, this),\n\t\t\t\tl = targets.length;\n\n\t\t\treturn this.filter(function () {\n\t\t\t\tvar i = 0;\n\t\t\t\tfor (; i < l; i++) {\n\t\t\t\t\tif (jQuery.contains(this, targets[i])) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\tclosest: function (selectors, context) {\n\t\t\tvar cur,\n\t\t\t\ti = 0,\n\t\t\t\tl = this.length,\n\t\t\t\tmatched = [],\n\t\t\t\ttargets = typeof selectors !== \"string\" && jQuery(selectors);\n\n\t\t\t// Positional selectors never match, since there's no _selection_ context\n\t\t\tif (!rneedsContext.test(selectors)) {\n\t\t\t\tfor (; i < l; i++) {\n\t\t\t\t\tfor (cur = this[i]; cur && cur !== context; cur = cur.parentNode) {\n\n\t\t\t\t\t\t// Always skip document fragments\n\t\t\t\t\t\tif (cur.nodeType < 11 && (targets ?\n\t\t\t\t\t\t\ttargets.index(cur) > -1 :\n\n\t\t\t\t\t\t\t// Don't pass non-elements to jQuery#find\n\t\t\t\t\t\t\tcur.nodeType === 1 &&\n\t\t\t\t\t\t\tjQuery.find.matchesSelector(cur, selectors))) {\n\n\t\t\t\t\t\t\tmatched.push(cur);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn this.pushStack(matched.length > 1 ? jQuery.uniqueSort(matched) : matched);\n\t\t},\n\n\t\t// Determine the position of an element within the set\n\t\tindex: function (elem) {\n\n\t\t\t// No argument, return index in parent\n\t\t\tif (!elem) {\n\t\t\t\treturn (this[0] && this[0].parentNode) ? this.first().prevAll().length : -1;\n\t\t\t}\n\n\t\t\t// Index in selector\n\t\t\tif (typeof elem === \"string\") {\n\t\t\t\treturn indexOf.call(jQuery(elem), this[0]);\n\t\t\t}\n\n\t\t\t// Locate the position of the desired element\n\t\t\treturn indexOf.call(this,\n\n\t\t\t\t// If it receives a jQuery object, the first element is used\n\t\t\t\telem.jquery ? elem[0] : elem\n\t\t\t);\n\t\t},\n\n\t\tadd: function (selector, context) {\n\t\t\treturn this.pushStack(\n\t\t\t\tjQuery.uniqueSort(\n\t\t\t\t\tjQuery.merge(this.get(), jQuery(selector, context))\n\t\t\t\t)\n\t\t\t);\n\t\t},\n\n\t\taddBack: function (selector) {\n\t\t\treturn this.add(selector == null ?\n\t\t\t\tthis.prevObject : this.prevObject.filter(selector)\n\t\t\t);\n\t\t}\n\t});\n\n\tfunction sibling(cur, dir) {\n\t\twhile ((cur = cur[dir]) && cur.nodeType !== 1) { }\n\t\treturn cur;\n\t}\n\n\tjQuery.each({\n\t\tparent: function (elem) {\n\t\t\tvar parent = elem.parentNode;\n\t\t\treturn parent && parent.nodeType !== 11 ? parent : null;\n\t\t},\n\t\tparents: function (elem) {\n\t\t\treturn dir(elem, \"parentNode\");\n\t\t},\n\t\tparentsUntil: function (elem, _i, until) {\n\t\t\treturn dir(elem, \"parentNode\", until);\n\t\t},\n\t\tnext: function (elem) {\n\t\t\treturn sibling(elem, \"nextSibling\");\n\t\t},\n\t\tprev: function (elem) {\n\t\t\treturn sibling(elem, \"previousSibling\");\n\t\t},\n\t\tnextAll: function (elem) {\n\t\t\treturn dir(elem, \"nextSibling\");\n\t\t},\n\t\tprevAll: function (elem) {\n\t\t\treturn dir(elem, \"previousSibling\");\n\t\t},\n\t\tnextUntil: function (elem, _i, until) {\n\t\t\treturn dir(elem, \"nextSibling\", until);\n\t\t},\n\t\tprevUntil: function (elem, _i, until) {\n\t\t\treturn dir(elem, \"previousSibling\", until);\n\t\t},\n\t\tsiblings: function (elem) {\n\t\t\treturn siblings((elem.parentNode || {}).firstChild, elem);\n\t\t},\n\t\tchildren: function (elem) {\n\t\t\treturn siblings(elem.firstChild);\n\t\t},\n\t\tcontents: function (elem) {\n\t\t\tif (elem.contentDocument != null &&\n\n\t\t\t\t// Support: IE 11+\n\t\t\t\t// <object> elements with no `data` attribute has an object\n\t\t\t\t// `contentDocument` with a `null` prototype.\n\t\t\t\tgetProto(elem.contentDocument)) {\n\n\t\t\t\treturn elem.contentDocument;\n\t\t\t}\n\n\t\t\t// Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only\n\t\t\t// Treat the template element as a regular one in browsers that\n\t\t\t// don't support it.\n\t\t\tif (nodeName(elem, \"template\")) {\n\t\t\t\telem = elem.content || elem;\n\t\t\t}\n\n\t\t\treturn jQuery.merge([], elem.childNodes);\n\t\t}\n\t}, function (name, fn) {\n\t\tjQuery.fn[name] = function (until, selector) {\n\t\t\tvar matched = jQuery.map(this, fn, until);\n\n\t\t\tif (name.slice(-5) !== \"Until\") {\n\t\t\t\tselector = until;\n\t\t\t}\n\n\t\t\tif (selector && typeof selector === \"string\") {\n\t\t\t\tmatched = jQuery.filter(selector, matched);\n\t\t\t}\n\n\t\t\tif (this.length > 1) {\n\n\t\t\t\t// Remove duplicates\n\t\t\t\tif (!guaranteedUnique[name]) {\n\t\t\t\t\tjQuery.uniqueSort(matched);\n\t\t\t\t}\n\n\t\t\t\t// Reverse order for parents* and prev-derivatives\n\t\t\t\tif (rparentsprev.test(name)) {\n\t\t\t\t\tmatched.reverse();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn this.pushStack(matched);\n\t\t};\n\t});\n\tvar rnothtmlwhite = (/[^\\x20\\t\\r\\n\\f]+/g);\n\n\n\n\t// Convert String-formatted options into Object-formatted ones\n\tfunction createOptions(options) {\n\t\tvar object = {};\n\t\tjQuery.each(options.match(rnothtmlwhite) || [], function (_, flag) {\n\t\t\tobject[flag] = true;\n\t\t});\n\t\treturn object;\n\t}\n\n\t/*\n\t * Create a callback list using the following parameters:\n\t *\n\t *\toptions: an optional list of space-separated options that will change how\n\t *\t\t\tthe callback list behaves or a more traditional option object\n\t *\n\t * By default a callback list will act like an event callback list and can be\n\t * \"fired\" multiple times.\n\t *\n\t * Possible options:\n\t *\n\t *\tonce:\t\t\twill ensure the callback list can only be fired once (like a Deferred)\n\t *\n\t *\tmemory:\t\t\twill keep track of previous values and will call any callback added\n\t *\t\t\t\t\tafter the list has been fired right away with the latest \"memorized\"\n\t *\t\t\t\t\tvalues (like a Deferred)\n\t *\n\t *\tunique:\t\t\twill ensure a callback can only be added once (no duplicate in the list)\n\t *\n\t *\tstopOnFalse:\tinterrupt callings when a callback returns false\n\t *\n\t */\n\tjQuery.Callbacks = function (options) {\n\n\t\t// Convert options from String-formatted to Object-formatted if needed\n\t\t// (we check in cache first)\n\t\toptions = typeof options === \"string\" ?\n\t\t\tcreateOptions(options) :\n\t\t\tjQuery.extend({}, options);\n\n\t\tvar // Flag to know if list is currently firing\n\t\t\tfiring,\n\n\t\t\t// Last fire value for non-forgettable lists\n\t\t\tmemory,\n\n\t\t\t// Flag to know if list was already fired\n\t\t\tfired,\n\n\t\t\t// Flag to prevent firing\n\t\t\tlocked,\n\n\t\t\t// Actual callback list\n\t\t\tlist = [],\n\n\t\t\t// Queue of execution data for repeatable lists\n\t\t\tqueue = [],\n\n\t\t\t// Index of currently firing callback (modified by add/remove as needed)\n\t\t\tfiringIndex = -1,\n\n\t\t\t// Fire callbacks\n\t\t\tfire = function () {\n\n\t\t\t\t// Enforce single-firing\n\t\t\t\tlocked = locked || options.once;\n\n\t\t\t\t// Execute callbacks for all pending executions,\n\t\t\t\t// respecting firingIndex overrides and runtime changes\n\t\t\t\tfired = firing = true;\n\t\t\t\tfor (; queue.length; firingIndex = -1) {\n\t\t\t\t\tmemory = queue.shift();\n\t\t\t\t\twhile (++firingIndex < list.length) {\n\n\t\t\t\t\t\t// Run callback and check for early termination\n\t\t\t\t\t\tif (list[firingIndex].apply(memory[0], memory[1]) === false &&\n\t\t\t\t\t\t\toptions.stopOnFalse) {\n\n\t\t\t\t\t\t\t// Jump to end and forget the data so .add doesn't re-fire\n\t\t\t\t\t\t\tfiringIndex = list.length;\n\t\t\t\t\t\t\tmemory = false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Forget the data if we're done with it\n\t\t\t\tif (!options.memory) {\n\t\t\t\t\tmemory = false;\n\t\t\t\t}\n\n\t\t\t\tfiring = false;\n\n\t\t\t\t// Clean up if we're done firing for good\n\t\t\t\tif (locked) {\n\n\t\t\t\t\t// Keep an empty list if we have data for future add calls\n\t\t\t\t\tif (memory) {\n\t\t\t\t\t\tlist = [];\n\n\t\t\t\t\t\t// Otherwise, this object is spent\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlist = \"\";\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// Actual Callbacks object\n\t\t\tself = {\n\n\t\t\t\t// Add a callback or a collection of callbacks to the list\n\t\t\t\tadd: function () {\n\t\t\t\t\tif (list) {\n\n\t\t\t\t\t\t// If we have memory from a past run, we should fire after adding\n\t\t\t\t\t\tif (memory && !firing) {\n\t\t\t\t\t\t\tfiringIndex = list.length - 1;\n\t\t\t\t\t\t\tqueue.push(memory);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t(function add(args) {\n\t\t\t\t\t\t\tjQuery.each(args, function (_, arg) {\n\t\t\t\t\t\t\t\tif (isFunction(arg)) {\n\t\t\t\t\t\t\t\t\tif (!options.unique || !self.has(arg)) {\n\t\t\t\t\t\t\t\t\t\tlist.push(arg);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} else if (arg && arg.length && toType(arg) !== \"string\") {\n\n\t\t\t\t\t\t\t\t\t// Inspect recursively\n\t\t\t\t\t\t\t\t\tadd(arg);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t})(arguments);\n\n\t\t\t\t\t\tif (memory && !firing) {\n\t\t\t\t\t\t\tfire();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Remove a callback from the list\n\t\t\t\tremove: function () {\n\t\t\t\t\tjQuery.each(arguments, function (_, arg) {\n\t\t\t\t\t\tvar index;\n\t\t\t\t\t\twhile ((index = jQuery.inArray(arg, list, index)) > -1) {\n\t\t\t\t\t\t\tlist.splice(index, 1);\n\n\t\t\t\t\t\t\t// Handle firing indexes\n\t\t\t\t\t\t\tif (index <= firingIndex) {\n\t\t\t\t\t\t\t\tfiringIndex--;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Check if a given callback is in the list.\n\t\t\t\t// If no argument is given, return whether or not list has callbacks attached.\n\t\t\t\thas: function (fn) {\n\t\t\t\t\treturn fn ?\n\t\t\t\t\t\tjQuery.inArray(fn, list) > -1 :\n\t\t\t\t\t\tlist.length > 0;\n\t\t\t\t},\n\n\t\t\t\t// Remove all callbacks from the list\n\t\t\t\tempty: function () {\n\t\t\t\t\tif (list) {\n\t\t\t\t\t\tlist = [];\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Disable .fire and .add\n\t\t\t\t// Abort any current/pending executions\n\t\t\t\t// Clear all callbacks and values\n\t\t\t\tdisable: function () {\n\t\t\t\t\tlocked = queue = [];\n\t\t\t\t\tlist = memory = \"\";\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\t\t\t\tdisabled: function () {\n\t\t\t\t\treturn !list;\n\t\t\t\t},\n\n\t\t\t\t// Disable .fire\n\t\t\t\t// Also disable .add unless we have memory (since it would have no effect)\n\t\t\t\t// Abort any pending executions\n\t\t\t\tlock: function () {\n\t\t\t\t\tlocked = queue = [];\n\t\t\t\t\tif (!memory && !firing) {\n\t\t\t\t\t\tlist = memory = \"\";\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\t\t\t\tlocked: function () {\n\t\t\t\t\treturn !!locked;\n\t\t\t\t},\n\n\t\t\t\t// Call all callbacks with the given context and arguments\n\t\t\t\tfireWith: function (context, args) {\n\t\t\t\t\tif (!locked) {\n\t\t\t\t\t\targs = args || [];\n\t\t\t\t\t\targs = [context, args.slice ? args.slice() : args];\n\t\t\t\t\t\tqueue.push(args);\n\t\t\t\t\t\tif (!firing) {\n\t\t\t\t\t\t\tfire();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Call all the callbacks with the given arguments\n\t\t\t\tfire: function () {\n\t\t\t\t\tself.fireWith(this, arguments);\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// To know if the callbacks have already been called at least once\n\t\t\t\tfired: function () {\n\t\t\t\t\treturn !!fired;\n\t\t\t\t}\n\t\t\t};\n\n\t\treturn self;\n\t};\n\n\n\tfunction Identity(v) {\n\t\treturn v;\n\t}\n\tfunction Thrower(ex) {\n\t\tthrow ex;\n\t}\n\n\tfunction adoptValue(value, resolve, reject, noValue) {\n\t\tvar method;\n\n\t\ttry {\n\n\t\t\t// Check for promise aspect first to privilege synchronous behavior\n\t\t\tif (value && isFunction((method = value.promise))) {\n\t\t\t\tmethod.call(value).done(resolve).fail(reject);\n\n\t\t\t\t// Other thenables\n\t\t\t} else if (value && isFunction((method = value.then))) {\n\t\t\t\tmethod.call(value, resolve, reject);\n\n\t\t\t\t// Other non-thenables\n\t\t\t} else {\n\n\t\t\t\t// Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer:\n\t\t\t\t// * false: [ value ].slice( 0 ) => resolve( value )\n\t\t\t\t// * true: [ value ].slice( 1 ) => resolve()\n\t\t\t\tresolve.apply(undefined, [value].slice(noValue));\n\t\t\t}\n\n\t\t\t// For Promises/A+, convert exceptions into rejections\n\t\t\t// Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in\n\t\t\t// Deferred#then to conditionally suppress rejection.\n\t\t} catch (value) {\n\n\t\t\t// Support: Android 4.0 only\n\t\t\t// Strict mode functions invoked without .call/.apply get global-object context\n\t\t\treject.apply(undefined, [value]);\n\t\t}\n\t}\n\n\tjQuery.extend({\n\n\t\tDeferred: function (func) {\n\t\t\tvar tuples = [\n\n\t\t\t\t// action, add listener, callbacks,\n\t\t\t\t// ... .then handlers, argument index, [final state]\n\t\t\t\t[\"notify\", \"progress\", jQuery.Callbacks(\"memory\"),\n\t\t\t\t\tjQuery.Callbacks(\"memory\"), 2],\n\t\t\t\t[\"resolve\", \"done\", jQuery.Callbacks(\"once memory\"),\n\t\t\t\t\tjQuery.Callbacks(\"once memory\"), 0, \"resolved\"],\n\t\t\t\t[\"reject\", \"fail\", jQuery.Callbacks(\"once memory\"),\n\t\t\t\t\tjQuery.Callbacks(\"once memory\"), 1, \"rejected\"]\n\t\t\t],\n\t\t\t\tstate = \"pending\",\n\t\t\t\tpromise = {\n\t\t\t\t\tstate: function () {\n\t\t\t\t\t\treturn state;\n\t\t\t\t\t},\n\t\t\t\t\talways: function () {\n\t\t\t\t\t\tdeferred.done(arguments).fail(arguments);\n\t\t\t\t\t\treturn this;\n\t\t\t\t\t},\n\t\t\t\t\t\"catch\": function (fn) {\n\t\t\t\t\t\treturn promise.then(null, fn);\n\t\t\t\t\t},\n\n\t\t\t\t\t// Keep pipe for back-compat\n\t\t\t\t\tpipe: function ( /* fnDone, fnFail, fnProgress */) {\n\t\t\t\t\t\tvar fns = arguments;\n\n\t\t\t\t\t\treturn jQuery.Deferred(function (newDefer) {\n\t\t\t\t\t\t\tjQuery.each(tuples, function (_i, tuple) {\n\n\t\t\t\t\t\t\t\t// Map tuples (progress, done, fail) to arguments (done, fail, progress)\n\t\t\t\t\t\t\t\tvar fn = isFunction(fns[tuple[4]]) && fns[tuple[4]];\n\n\t\t\t\t\t\t\t\t// deferred.progress(function() { bind to newDefer or newDefer.notify })\n\t\t\t\t\t\t\t\t// deferred.done(function() { bind to newDefer or newDefer.resolve })\n\t\t\t\t\t\t\t\t// deferred.fail(function() { bind to newDefer or newDefer.reject })\n\t\t\t\t\t\t\t\tdeferred[tuple[1]](function () {\n\t\t\t\t\t\t\t\t\tvar returned = fn && fn.apply(this, arguments);\n\t\t\t\t\t\t\t\t\tif (returned && isFunction(returned.promise)) {\n\t\t\t\t\t\t\t\t\t\treturned.promise()\n\t\t\t\t\t\t\t\t\t\t\t.progress(newDefer.notify)\n\t\t\t\t\t\t\t\t\t\t\t.done(newDefer.resolve)\n\t\t\t\t\t\t\t\t\t\t\t.fail(newDefer.reject);\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tnewDefer[tuple[0] + \"With\"](\n\t\t\t\t\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\t\t\t\t\tfn ? [returned] : arguments\n\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tfns = null;\n\t\t\t\t\t\t}).promise();\n\t\t\t\t\t},\n\t\t\t\t\tthen: function (onFulfilled, onRejected, onProgress) {\n\t\t\t\t\t\tvar maxDepth = 0;\n\t\t\t\t\t\tfunction resolve(depth, deferred, handler, special) {\n\t\t\t\t\t\t\treturn function () {\n\t\t\t\t\t\t\t\tvar that = this,\n\t\t\t\t\t\t\t\t\targs = arguments,\n\t\t\t\t\t\t\t\t\tmightThrow = function () {\n\t\t\t\t\t\t\t\t\t\tvar returned, then;\n\n\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.3\n\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-59\n\t\t\t\t\t\t\t\t\t\t// Ignore double-resolution attempts\n\t\t\t\t\t\t\t\t\t\tif (depth < maxDepth) {\n\t\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\treturned = handler.apply(that, args);\n\n\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.1\n\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-48\n\t\t\t\t\t\t\t\t\t\tif (returned === deferred.promise()) {\n\t\t\t\t\t\t\t\t\t\t\tthrow new TypeError(\"Thenable self-resolution\");\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ sections 2.3.3.1, 3.5\n\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-54\n\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-75\n\t\t\t\t\t\t\t\t\t\t// Retrieve `then` only once\n\t\t\t\t\t\t\t\t\t\tthen = returned &&\n\n\t\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.4\n\t\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-64\n\t\t\t\t\t\t\t\t\t\t\t// Only check objects and functions for thenability\n\t\t\t\t\t\t\t\t\t\t\t(typeof returned === \"object\" ||\n\t\t\t\t\t\t\t\t\t\t\t\ttypeof returned === \"function\") &&\n\t\t\t\t\t\t\t\t\t\t\treturned.then;\n\n\t\t\t\t\t\t\t\t\t\t// Handle a returned thenable\n\t\t\t\t\t\t\t\t\t\tif (isFunction(then)) {\n\n\t\t\t\t\t\t\t\t\t\t\t// Special processors (notify) just wait for resolution\n\t\t\t\t\t\t\t\t\t\t\tif (special) {\n\t\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\t\tresolve(maxDepth, deferred, Identity, special),\n\t\t\t\t\t\t\t\t\t\t\t\t\tresolve(maxDepth, deferred, Thrower, special)\n\t\t\t\t\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t\t\t\t\t// Normal processors (resolve) also hook into progress\n\t\t\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t\t\t// ...and disregard older resolution values\n\t\t\t\t\t\t\t\t\t\t\t\tmaxDepth++;\n\n\t\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\t\tresolve(maxDepth, deferred, Identity, special),\n\t\t\t\t\t\t\t\t\t\t\t\t\tresolve(maxDepth, deferred, Thrower, special),\n\t\t\t\t\t\t\t\t\t\t\t\t\tresolve(maxDepth, deferred, Identity,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tdeferred.notifyWith)\n\t\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t// Handle all other returned values\n\t\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\t\tif (handler !== Identity) {\n\t\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\t\targs = [returned];\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t// Process the value(s)\n\t\t\t\t\t\t\t\t\t\t\t// Default process is resolve\n\t\t\t\t\t\t\t\t\t\t\t(special || deferred.resolveWith)(that, args);\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\n\t\t\t\t\t\t\t\t\t// Only normal processors (resolve) catch and reject exceptions\n\t\t\t\t\t\t\t\t\tprocess = special ?\n\t\t\t\t\t\t\t\t\t\tmightThrow :\n\t\t\t\t\t\t\t\t\t\tfunction () {\n\t\t\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\t\t\tmightThrow();\n\t\t\t\t\t\t\t\t\t\t\t} catch (e) {\n\n\t\t\t\t\t\t\t\t\t\t\t\tif (jQuery.Deferred.exceptionHook) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tjQuery.Deferred.exceptionHook(e,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tprocess.error);\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.4.1\n\t\t\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-61\n\t\t\t\t\t\t\t\t\t\t\t\t// Ignore post-resolution exceptions\n\t\t\t\t\t\t\t\t\t\t\t\tif (depth + 1 >= maxDepth) {\n\n\t\t\t\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\t\t\t\tif (handler !== Thrower) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\targs = [e];\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\t\tdeferred.rejectWith(that, args);\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.1\n\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-57\n\t\t\t\t\t\t\t\t// Re-resolve promises immediately to dodge false rejection from\n\t\t\t\t\t\t\t\t// subsequent errors\n\t\t\t\t\t\t\t\tif (depth) {\n\t\t\t\t\t\t\t\t\tprocess();\n\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t// Call an optional hook to record the error, in case of exception\n\t\t\t\t\t\t\t\t\t// since it's otherwise lost when execution goes async\n\t\t\t\t\t\t\t\t\tif (jQuery.Deferred.getErrorHook) {\n\t\t\t\t\t\t\t\t\t\tprocess.error = jQuery.Deferred.getErrorHook();\n\n\t\t\t\t\t\t\t\t\t\t// The deprecated alias of the above. While the name suggests\n\t\t\t\t\t\t\t\t\t\t// returning the stack, not an error instance, jQuery just passes\n\t\t\t\t\t\t\t\t\t\t// it directly to `console.warn` so both will work; an instance\n\t\t\t\t\t\t\t\t\t\t// just better cooperates with source maps.\n\t\t\t\t\t\t\t\t\t} else if (jQuery.Deferred.getStackHook) {\n\t\t\t\t\t\t\t\t\t\tprocess.error = jQuery.Deferred.getStackHook();\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\twindow.setTimeout(process);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn jQuery.Deferred(function (newDefer) {\n\n\t\t\t\t\t\t\t// progress_handlers.add( ... )\n\t\t\t\t\t\t\ttuples[0][3].add(\n\t\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\t\tisFunction(onProgress) ?\n\t\t\t\t\t\t\t\t\t\tonProgress :\n\t\t\t\t\t\t\t\t\t\tIdentity,\n\t\t\t\t\t\t\t\t\tnewDefer.notifyWith\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t// fulfilled_handlers.add( ... )\n\t\t\t\t\t\t\ttuples[1][3].add(\n\t\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\t\tisFunction(onFulfilled) ?\n\t\t\t\t\t\t\t\t\t\tonFulfilled :\n\t\t\t\t\t\t\t\t\t\tIdentity\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t// rejected_handlers.add( ... )\n\t\t\t\t\t\t\ttuples[2][3].add(\n\t\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\t\tisFunction(onRejected) ?\n\t\t\t\t\t\t\t\t\t\tonRejected :\n\t\t\t\t\t\t\t\t\t\tThrower\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}).promise();\n\t\t\t\t\t},\n\n\t\t\t\t\t// Get a promise for this deferred\n\t\t\t\t\t// If obj is provided, the promise aspect is added to the object\n\t\t\t\t\tpromise: function (obj) {\n\t\t\t\t\t\treturn obj != null ? jQuery.extend(obj, promise) : promise;\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tdeferred = {};\n\n\t\t\t// Add list-specific methods\n\t\t\tjQuery.each(tuples, function (i, tuple) {\n\t\t\t\tvar list = tuple[2],\n\t\t\t\t\tstateString = tuple[5];\n\n\t\t\t\t// promise.progress = list.add\n\t\t\t\t// promise.done = list.add\n\t\t\t\t// promise.fail = list.add\n\t\t\t\tpromise[tuple[1]] = list.add;\n\n\t\t\t\t// Handle state\n\t\t\t\tif (stateString) {\n\t\t\t\t\tlist.add(\n\t\t\t\t\t\tfunction () {\n\n\t\t\t\t\t\t\t// state = \"resolved\" (i.e., fulfilled)\n\t\t\t\t\t\t\t// state = \"rejected\"\n\t\t\t\t\t\t\tstate = stateString;\n\t\t\t\t\t\t},\n\n\t\t\t\t\t\t// rejected_callbacks.disable\n\t\t\t\t\t\t// fulfilled_callbacks.disable\n\t\t\t\t\t\ttuples[3 - i][2].disable,\n\n\t\t\t\t\t\t// rejected_handlers.disable\n\t\t\t\t\t\t// fulfilled_handlers.disable\n\t\t\t\t\t\ttuples[3 - i][3].disable,\n\n\t\t\t\t\t\t// progress_callbacks.lock\n\t\t\t\t\t\ttuples[0][2].lock,\n\n\t\t\t\t\t\t// progress_handlers.lock\n\t\t\t\t\t\ttuples[0][3].lock\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\t// progress_handlers.fire\n\t\t\t\t// fulfilled_handlers.fire\n\t\t\t\t// rejected_handlers.fire\n\t\t\t\tlist.add(tuple[3].fire);\n\n\t\t\t\t// deferred.notify = function() { deferred.notifyWith(...) }\n\t\t\t\t// deferred.resolve = function() { deferred.resolveWith(...) }\n\t\t\t\t// deferred.reject = function() { deferred.rejectWith(...) }\n\t\t\t\tdeferred[tuple[0]] = function () {\n\t\t\t\t\tdeferred[tuple[0] + \"With\"](this === deferred ? undefined : this, arguments);\n\t\t\t\t\treturn this;\n\t\t\t\t};\n\n\t\t\t\t// deferred.notifyWith = list.fireWith\n\t\t\t\t// deferred.resolveWith = list.fireWith\n\t\t\t\t// deferred.rejectWith = list.fireWith\n\t\t\t\tdeferred[tuple[0] + \"With\"] = list.fireWith;\n\t\t\t});\n\n\t\t\t// Make the deferred a promise\n\t\t\tpromise.promise(deferred);\n\n\t\t\t// Call given func if any\n\t\t\tif (func) {\n\t\t\t\tfunc.call(deferred, deferred);\n\t\t\t}\n\n\t\t\t// All done!\n\t\t\treturn deferred;\n\t\t},\n\n\t\t// Deferred helper\n\t\twhen: function (singleValue) {\n\t\t\tvar\n\n\t\t\t\t// count of uncompleted subordinates\n\t\t\t\tremaining = arguments.length,\n\n\t\t\t\t// count of unprocessed arguments\n\t\t\t\ti = remaining,\n\n\t\t\t\t// subordinate fulfillment data\n\t\t\t\tresolveContexts = Array(i),\n\t\t\t\tresolveValues = slice.call(arguments),\n\n\t\t\t\t// the primary Deferred\n\t\t\t\tprimary = jQuery.Deferred(),\n\n\t\t\t\t// subordinate callback factory\n\t\t\t\tupdateFunc = function (i) {\n\t\t\t\t\treturn function (value) {\n\t\t\t\t\t\tresolveContexts[i] = this;\n\t\t\t\t\t\tresolveValues[i] = arguments.length > 1 ? slice.call(arguments) : value;\n\t\t\t\t\t\tif (!(--remaining)) {\n\t\t\t\t\t\t\tprimary.resolveWith(resolveContexts, resolveValues);\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t};\n\n\t\t\t// Single- and empty arguments are adopted like Promise.resolve\n\t\t\tif (remaining <= 1) {\n\t\t\t\tadoptValue(singleValue, primary.done(updateFunc(i)).resolve, primary.reject,\n\t\t\t\t\t!remaining);\n\n\t\t\t\t// Use .then() to unwrap secondary thenables (cf. gh-3000)\n\t\t\t\tif (primary.state() === \"pending\" ||\n\t\t\t\t\tisFunction(resolveValues[i] && resolveValues[i].then)) {\n\n\t\t\t\t\treturn primary.then();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Multiple arguments are aggregated like Promise.all array elements\n\t\t\twhile (i--) {\n\t\t\t\tadoptValue(resolveValues[i], updateFunc(i), primary.reject);\n\t\t\t}\n\n\t\t\treturn primary.promise();\n\t\t}\n\t});\n\n\n\t// These usually indicate a programmer mistake during development,\n\t// warn about them ASAP rather than swallowing them by default.\n\tvar rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;\n\n\t// If `jQuery.Deferred.getErrorHook` is defined, `asyncError` is an error\n\t// captured before the async barrier to get the original error cause\n\t// which may otherwise be hidden.\n\tjQuery.Deferred.exceptionHook = function (error, asyncError) {\n\n\t\t// Support: IE 8 - 9 only\n\t\t// Console exists when dev tools are open, which can happen at any time\n\t\tif (window.console && window.console.warn && error && rerrorNames.test(error.name)) {\n\t\t\twindow.console.warn(\"jQuery.Deferred exception: \" + error.message,\n\t\t\t\terror.stack, asyncError);\n\t\t}\n\t};\n\n\n\n\n\tjQuery.readyException = function (error) {\n\t\twindow.setTimeout(function () {\n\t\t\tthrow error;\n\t\t});\n\t};\n\n\n\n\n\t// The deferred used on DOM ready\n\tvar readyList = jQuery.Deferred();\n\n\tjQuery.fn.ready = function (fn) {\n\n\t\treadyList\n\t\t\t.then(fn)\n\n\t\t\t// Wrap jQuery.readyException in a function so that the lookup\n\t\t\t// happens at the time of error handling instead of callback\n\t\t\t// registration.\n\t\t\t.catch(function (error) {\n\t\t\t\tjQuery.readyException(error);\n\t\t\t});\n\n\t\treturn this;\n\t};\n\n\tjQuery.extend({\n\n\t\t// Is the DOM ready to be used? Set to true once it occurs.\n\t\tisReady: false,\n\n\t\t// A counter to track how many items to wait for before\n\t\t// the ready event fires. See trac-6781\n\t\treadyWait: 1,\n\n\t\t// Handle when the DOM is ready\n\t\tready: function (wait) {\n\n\t\t\t// Abort if there are pending holds or we're already ready\n\t\t\tif (wait === true ? --jQuery.readyWait : jQuery.isReady) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Remember that the DOM is ready\n\t\t\tjQuery.isReady = true;\n\n\t\t\t// If a normal DOM Ready event fired, decrement, and wait if need be\n\t\t\tif (wait !== true && --jQuery.readyWait > 0) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If there are functions bound, to execute\n\t\t\treadyList.resolveWith(document, [jQuery]);\n\t\t}\n\t});\n\n\tjQuery.ready.then = readyList.then;\n\n\t// The ready event handler and self cleanup method\n\tfunction completed() {\n\t\tdocument.removeEventListener(\"DOMContentLoaded\", completed);\n\t\twindow.removeEventListener(\"load\", completed);\n\t\tjQuery.ready();\n\t}\n\n\t// Catch cases where $(document).ready() is called\n\t// after the browser event has already occurred.\n\t// Support: IE <=9 - 10 only\n\t// Older IE sometimes signals \"interactive\" too soon\n\tif (document.readyState === \"complete\" ||\n\t\t(document.readyState !== \"loading\" && !document.documentElement.doScroll)) {\n\n\t\t// Handle it asynchronously to allow scripts the opportunity to delay ready\n\t\twindow.setTimeout(jQuery.ready);\n\n\t} else {\n\n\t\t// Use the handy event callback\n\t\tdocument.addEventListener(\"DOMContentLoaded\", completed);\n\n\t\t// A fallback to window.onload, that will always work\n\t\twindow.addEventListener(\"load\", completed);\n\t}\n\n\n\n\n\t// Multifunctional method to get and set values of a collection\n\t// The value/s can optionally be executed if it's a function\n\tvar access = function (elems, fn, key, value, chainable, emptyGet, raw) {\n\t\tvar i = 0,\n\t\t\tlen = elems.length,\n\t\t\tbulk = key == null;\n\n\t\t// Sets many values\n\t\tif (toType(key) === \"object\") {\n\t\t\tchainable = true;\n\t\t\tfor (i in key) {\n\t\t\t\taccess(elems, fn, i, key[i], true, emptyGet, raw);\n\t\t\t}\n\n\t\t\t// Sets one value\n\t\t} else if (value !== undefined) {\n\t\t\tchainable = true;\n\n\t\t\tif (!isFunction(value)) {\n\t\t\t\traw = true;\n\t\t\t}\n\n\t\t\tif (bulk) {\n\n\t\t\t\t// Bulk operations run against the entire set\n\t\t\t\tif (raw) {\n\t\t\t\t\tfn.call(elems, value);\n\t\t\t\t\tfn = null;\n\n\t\t\t\t\t// ...except when executing function values\n\t\t\t\t} else {\n\t\t\t\t\tbulk = fn;\n\t\t\t\t\tfn = function (elem, _key, value) {\n\t\t\t\t\t\treturn bulk.call(jQuery(elem), value);\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (fn) {\n\t\t\t\tfor (; i < len; i++) {\n\t\t\t\t\tfn(\n\t\t\t\t\t\telems[i], key, raw ?\n\t\t\t\t\t\tvalue :\n\t\t\t\t\t\tvalue.call(elems[i], i, fn(elems[i], key))\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (chainable) {\n\t\t\treturn elems;\n\t\t}\n\n\t\t// Gets\n\t\tif (bulk) {\n\t\t\treturn fn.call(elems);\n\t\t}\n\n\t\treturn len ? fn(elems[0], key) : emptyGet;\n\t};\n\n\n\t// Matches dashed string for camelizing\n\tvar rmsPrefix = /^-ms-/,\n\t\trdashAlpha = /-([a-z])/g;\n\n\t// Used by camelCase as callback to replace()\n\tfunction fcamelCase(_all, letter) {\n\t\treturn letter.toUpperCase();\n\t}\n\n\t// Convert dashed to camelCase; used by the css and data modules\n\t// Support: IE <=9 - 11, Edge 12 - 15\n\t// Microsoft forgot to hump their vendor prefix (trac-9572)\n\tfunction camelCase(string) {\n\t\treturn string.replace(rmsPrefix, \"ms-\").replace(rdashAlpha, fcamelCase);\n\t}\n\tvar acceptData = function (owner) {\n\n\t\t// Accepts only:\n\t\t//  - Node\n\t\t//    - Node.ELEMENT_NODE\n\t\t//    - Node.DOCUMENT_NODE\n\t\t//  - Object\n\t\t//    - Any\n\t\treturn owner.nodeType === 1 || owner.nodeType === 9 || !(+owner.nodeType);\n\t};\n\n\n\n\n\tfunction Data() {\n\t\tthis.expando = jQuery.expando + Data.uid++;\n\t}\n\n\tData.uid = 1;\n\n\tData.prototype = {\n\n\t\tcache: function (owner) {\n\n\t\t\t// Check if the owner object already has a cache\n\t\t\tvar value = owner[this.expando];\n\n\t\t\t// If not, create one\n\t\t\tif (!value) {\n\t\t\t\tvalue = {};\n\n\t\t\t\t// We can accept data for non-element nodes in modern browsers,\n\t\t\t\t// but we should not, see trac-8335.\n\t\t\t\t// Always return an empty object.\n\t\t\t\tif (acceptData(owner)) {\n\n\t\t\t\t\t// If it is a node unlikely to be stringify-ed or looped over\n\t\t\t\t\t// use plain assignment\n\t\t\t\t\tif (owner.nodeType) {\n\t\t\t\t\t\towner[this.expando] = value;\n\n\t\t\t\t\t\t// Otherwise secure it in a non-enumerable property\n\t\t\t\t\t\t// configurable must be true to allow the property to be\n\t\t\t\t\t\t// deleted when data is removed\n\t\t\t\t\t} else {\n\t\t\t\t\t\tObject.defineProperty(owner, this.expando, {\n\t\t\t\t\t\t\tvalue: value,\n\t\t\t\t\t\t\tconfigurable: true\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn value;\n\t\t},\n\t\tset: function (owner, data, value) {\n\t\t\tvar prop,\n\t\t\t\tcache = this.cache(owner);\n\n\t\t\t// Handle: [ owner, key, value ] args\n\t\t\t// Always use camelCase key (gh-2257)\n\t\t\tif (typeof data === \"string\") {\n\t\t\t\tcache[camelCase(data)] = value;\n\n\t\t\t\t// Handle: [ owner, { properties } ] args\n\t\t\t} else {\n\n\t\t\t\t// Copy the properties one-by-one to the cache object\n\t\t\t\tfor (prop in data) {\n\t\t\t\t\tcache[camelCase(prop)] = data[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn cache;\n\t\t},\n\t\tget: function (owner, key) {\n\t\t\treturn key === undefined ?\n\t\t\t\tthis.cache(owner) :\n\n\t\t\t\t// Always use camelCase key (gh-2257)\n\t\t\t\towner[this.expando] && owner[this.expando][camelCase(key)];\n\t\t},\n\t\taccess: function (owner, key, value) {\n\n\t\t\t// In cases where either:\n\t\t\t//\n\t\t\t//   1. No key was specified\n\t\t\t//   2. A string key was specified, but no value provided\n\t\t\t//\n\t\t\t// Take the \"read\" path and allow the get method to determine\n\t\t\t// which value to return, respectively either:\n\t\t\t//\n\t\t\t//   1. The entire cache object\n\t\t\t//   2. The data stored at the key\n\t\t\t//\n\t\t\tif (key === undefined ||\n\t\t\t\t((key && typeof key === \"string\") && value === undefined)) {\n\n\t\t\t\treturn this.get(owner, key);\n\t\t\t}\n\n\t\t\t// When the key is not a string, or both a key and value\n\t\t\t// are specified, set or extend (existing objects) with either:\n\t\t\t//\n\t\t\t//   1. An object of properties\n\t\t\t//   2. A key and value\n\t\t\t//\n\t\t\tthis.set(owner, key, value);\n\n\t\t\t// Since the \"set\" path can have two possible entry points\n\t\t\t// return the expected data based on which path was taken[*]\n\t\t\treturn value !== undefined ? value : key;\n\t\t},\n\t\tremove: function (owner, key) {\n\t\t\tvar i,\n\t\t\t\tcache = owner[this.expando];\n\n\t\t\tif (cache === undefined) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (key !== undefined) {\n\n\t\t\t\t// Support array or space separated string of keys\n\t\t\t\tif (Array.isArray(key)) {\n\n\t\t\t\t\t// If key is an array of keys...\n\t\t\t\t\t// We always set camelCase keys, so remove that.\n\t\t\t\t\tkey = key.map(camelCase);\n\t\t\t\t} else {\n\t\t\t\t\tkey = camelCase(key);\n\n\t\t\t\t\t// If a key with the spaces exists, use it.\n\t\t\t\t\t// Otherwise, create an array by matching non-whitespace\n\t\t\t\t\tkey = key in cache ?\n\t\t\t\t\t\t[key] :\n\t\t\t\t\t\t(key.match(rnothtmlwhite) || []);\n\t\t\t\t}\n\n\t\t\t\ti = key.length;\n\n\t\t\t\twhile (i--) {\n\t\t\t\t\tdelete cache[key[i]];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove the expando if there's no more data\n\t\t\tif (key === undefined || jQuery.isEmptyObject(cache)) {\n\n\t\t\t\t// Support: Chrome <=35 - 45\n\t\t\t\t// Webkit & Blink performance suffers when deleting properties\n\t\t\t\t// from DOM nodes, so set to undefined instead\n\t\t\t\t// https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted)\n\t\t\t\tif (owner.nodeType) {\n\t\t\t\t\towner[this.expando] = undefined;\n\t\t\t\t} else {\n\t\t\t\t\tdelete owner[this.expando];\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\thasData: function (owner) {\n\t\t\tvar cache = owner[this.expando];\n\t\t\treturn cache !== undefined && !jQuery.isEmptyObject(cache);\n\t\t}\n\t};\n\tvar dataPriv = new Data();\n\n\tvar dataUser = new Data();\n\n\n\n\t//\tImplementation Summary\n\t//\n\t//\t1. Enforce API surface and semantic compatibility with 1.9.x branch\n\t//\t2. Improve the module's maintainability by reducing the storage\n\t//\t\tpaths to a single mechanism.\n\t//\t3. Use the same single mechanism to support \"private\" and \"user\" data.\n\t//\t4. _Never_ expose \"private\" data to user code (TODO: Drop _data, _removeData)\n\t//\t5. Avoid exposing implementation details on user objects (eg. expando properties)\n\t//\t6. Provide a clear path for implementation upgrade to WeakMap in 2014\n\n\tvar rbrace = /^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,\n\t\trmultiDash = /[A-Z]/g;\n\n\tfunction getData(data) {\n\t\tif (data === \"true\") {\n\t\t\treturn true;\n\t\t}\n\n\t\tif (data === \"false\") {\n\t\t\treturn false;\n\t\t}\n\n\t\tif (data === \"null\") {\n\t\t\treturn null;\n\t\t}\n\n\t\t// Only convert to a number if it doesn't change the string\n\t\tif (data === +data + \"\") {\n\t\t\treturn +data;\n\t\t}\n\n\t\tif (rbrace.test(data)) {\n\t\t\treturn JSON.parse(data);\n\t\t}\n\n\t\treturn data;\n\t}\n\n\tfunction dataAttr(elem, key, data) {\n\t\tvar name;\n\n\t\t// If nothing was found internally, try to fetch any\n\t\t// data from the HTML5 data-* attribute\n\t\tif (data === undefined && elem.nodeType === 1) {\n\t\t\tname = \"data-\" + key.replace(rmultiDash, \"-$&\").toLowerCase();\n\t\t\tdata = elem.getAttribute(name);\n\n\t\t\tif (typeof data === \"string\") {\n\t\t\t\ttry {\n\t\t\t\t\tdata = getData(data);\n\t\t\t\t} catch (e) { }\n\n\t\t\t\t// Make sure we set the data so it isn't changed later\n\t\t\t\tdataUser.set(elem, key, data);\n\t\t\t} else {\n\t\t\t\tdata = undefined;\n\t\t\t}\n\t\t}\n\t\treturn data;\n\t}\n\n\tjQuery.extend({\n\t\thasData: function (elem) {\n\t\t\treturn dataUser.hasData(elem) || dataPriv.hasData(elem);\n\t\t},\n\n\t\tdata: function (elem, name, data) {\n\t\t\treturn dataUser.access(elem, name, data);\n\t\t},\n\n\t\tremoveData: function (elem, name) {\n\t\t\tdataUser.remove(elem, name);\n\t\t},\n\n\t\t// TODO: Now that all calls to _data and _removeData have been replaced\n\t\t// with direct calls to dataPriv methods, these can be deprecated.\n\t\t_data: function (elem, name, data) {\n\t\t\treturn dataPriv.access(elem, name, data);\n\t\t},\n\n\t\t_removeData: function (elem, name) {\n\t\t\tdataPriv.remove(elem, name);\n\t\t}\n\t});\n\n\tjQuery.fn.extend({\n\t\tdata: function (key, value) {\n\t\t\tvar i, name, data,\n\t\t\t\telem = this[0],\n\t\t\t\tattrs = elem && elem.attributes;\n\n\t\t\t// Gets all values\n\t\t\tif (key === undefined) {\n\t\t\t\tif (this.length) {\n\t\t\t\t\tdata = dataUser.get(elem);\n\n\t\t\t\t\tif (elem.nodeType === 1 && !dataPriv.get(elem, \"hasDataAttrs\")) {\n\t\t\t\t\t\ti = attrs.length;\n\t\t\t\t\t\twhile (i--) {\n\n\t\t\t\t\t\t\t// Support: IE 11 only\n\t\t\t\t\t\t\t// The attrs elements can be null (trac-14894)\n\t\t\t\t\t\t\tif (attrs[i]) {\n\t\t\t\t\t\t\t\tname = attrs[i].name;\n\t\t\t\t\t\t\t\tif (name.indexOf(\"data-\") === 0) {\n\t\t\t\t\t\t\t\t\tname = camelCase(name.slice(5));\n\t\t\t\t\t\t\t\t\tdataAttr(elem, name, data[name]);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdataPriv.set(elem, \"hasDataAttrs\", true);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn data;\n\t\t\t}\n\n\t\t\t// Sets multiple values\n\t\t\tif (typeof key === \"object\") {\n\t\t\t\treturn this.each(function () {\n\t\t\t\t\tdataUser.set(this, key);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn access(this, function (value) {\n\t\t\t\tvar data;\n\n\t\t\t\t// The calling jQuery object (element matches) is not empty\n\t\t\t\t// (and therefore has an element appears at this[ 0 ]) and the\n\t\t\t\t// `value` parameter was not undefined. An empty jQuery object\n\t\t\t\t// will result in `undefined` for elem = this[ 0 ] which will\n\t\t\t\t// throw an exception if an attempt to read a data cache is made.\n\t\t\t\tif (elem && value === undefined) {\n\n\t\t\t\t\t// Attempt to get data from the cache\n\t\t\t\t\t// The key will always be camelCased in Data\n\t\t\t\t\tdata = dataUser.get(elem, key);\n\t\t\t\t\tif (data !== undefined) {\n\t\t\t\t\t\treturn data;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Attempt to \"discover\" the data in\n\t\t\t\t\t// HTML5 custom data-* attrs\n\t\t\t\t\tdata = dataAttr(elem, key);\n\t\t\t\t\tif (data !== undefined) {\n\t\t\t\t\t\treturn data;\n\t\t\t\t\t}\n\n\t\t\t\t\t// We tried really hard, but the data doesn't exist.\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Set the data...\n\t\t\t\tthis.each(function () {\n\n\t\t\t\t\t// We always store the camelCased key\n\t\t\t\t\tdataUser.set(this, key, value);\n\t\t\t\t});\n\t\t\t}, null, value, arguments.length > 1, null, true);\n\t\t},\n\n\t\tremoveData: function (key) {\n\t\t\treturn this.each(function () {\n\t\t\t\tdataUser.remove(this, key);\n\t\t\t});\n\t\t}\n\t});\n\n\n\tjQuery.extend({\n\t\tqueue: function (elem, type, data) {\n\t\t\tvar queue;\n\n\t\t\tif (elem) {\n\t\t\t\ttype = (type || \"fx\") + \"queue\";\n\t\t\t\tqueue = dataPriv.get(elem, type);\n\n\t\t\t\t// Speed up dequeue by getting out quickly if this is just a lookup\n\t\t\t\tif (data) {\n\t\t\t\t\tif (!queue || Array.isArray(data)) {\n\t\t\t\t\t\tqueue = dataPriv.access(elem, type, jQuery.makeArray(data));\n\t\t\t\t\t} else {\n\t\t\t\t\t\tqueue.push(data);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn queue || [];\n\t\t\t}\n\t\t},\n\n\t\tdequeue: function (elem, type) {\n\t\t\ttype = type || \"fx\";\n\n\t\t\tvar queue = jQuery.queue(elem, type),\n\t\t\t\tstartLength = queue.length,\n\t\t\t\tfn = queue.shift(),\n\t\t\t\thooks = jQuery._queueHooks(elem, type),\n\t\t\t\tnext = function () {\n\t\t\t\t\tjQuery.dequeue(elem, type);\n\t\t\t\t};\n\n\t\t\t// If the fx queue is dequeued, always remove the progress sentinel\n\t\t\tif (fn === \"inprogress\") {\n\t\t\t\tfn = queue.shift();\n\t\t\t\tstartLength--;\n\t\t\t}\n\n\t\t\tif (fn) {\n\n\t\t\t\t// Add a progress sentinel to prevent the fx queue from being\n\t\t\t\t// automatically dequeued\n\t\t\t\tif (type === \"fx\") {\n\t\t\t\t\tqueue.unshift(\"inprogress\");\n\t\t\t\t}\n\n\t\t\t\t// Clear up the last queue stop function\n\t\t\t\tdelete hooks.stop;\n\t\t\t\tfn.call(elem, next, hooks);\n\t\t\t}\n\n\t\t\tif (!startLength && hooks) {\n\t\t\t\thooks.empty.fire();\n\t\t\t}\n\t\t},\n\n\t\t// Not public - generate a queueHooks object, or return the current one\n\t\t_queueHooks: function (elem, type) {\n\t\t\tvar key = type + \"queueHooks\";\n\t\t\treturn dataPriv.get(elem, key) || dataPriv.access(elem, key, {\n\t\t\t\tempty: jQuery.Callbacks(\"once memory\").add(function () {\n\t\t\t\t\tdataPriv.remove(elem, [type + \"queue\", key]);\n\t\t\t\t})\n\t\t\t});\n\t\t}\n\t});\n\n\tjQuery.fn.extend({\n\t\tqueue: function (type, data) {\n\t\t\tvar setter = 2;\n\n\t\t\tif (typeof type !== \"string\") {\n\t\t\t\tdata = type;\n\t\t\t\ttype = \"fx\";\n\t\t\t\tsetter--;\n\t\t\t}\n\n\t\t\tif (arguments.length < setter) {\n\t\t\t\treturn jQuery.queue(this[0], type);\n\t\t\t}\n\n\t\t\treturn data === undefined ?\n\t\t\t\tthis :\n\t\t\t\tthis.each(function () {\n\t\t\t\t\tvar queue = jQuery.queue(this, type, data);\n\n\t\t\t\t\t// Ensure a hooks for this queue\n\t\t\t\t\tjQuery._queueHooks(this, type);\n\n\t\t\t\t\tif (type === \"fx\" && queue[0] !== \"inprogress\") {\n\t\t\t\t\t\tjQuery.dequeue(this, type);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t},\n\t\tdequeue: function (type) {\n\t\t\treturn this.each(function () {\n\t\t\t\tjQuery.dequeue(this, type);\n\t\t\t});\n\t\t},\n\t\tclearQueue: function (type) {\n\t\t\treturn this.queue(type || \"fx\", []);\n\t\t},\n\n\t\t// Get a promise resolved when queues of a certain type\n\t\t// are emptied (fx is the type by default)\n\t\tpromise: function (type, obj) {\n\t\t\tvar tmp,\n\t\t\t\tcount = 1,\n\t\t\t\tdefer = jQuery.Deferred(),\n\t\t\t\telements = this,\n\t\t\t\ti = this.length,\n\t\t\t\tresolve = function () {\n\t\t\t\t\tif (!(--count)) {\n\t\t\t\t\t\tdefer.resolveWith(elements, [elements]);\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\tif (typeof type !== \"string\") {\n\t\t\t\tobj = type;\n\t\t\t\ttype = undefined;\n\t\t\t}\n\t\t\ttype = type || \"fx\";\n\n\t\t\twhile (i--) {\n\t\t\t\ttmp = dataPriv.get(elements[i], type + \"queueHooks\");\n\t\t\t\tif (tmp && tmp.empty) {\n\t\t\t\t\tcount++;\n\t\t\t\t\ttmp.empty.add(resolve);\n\t\t\t\t}\n\t\t\t}\n\t\t\tresolve();\n\t\t\treturn defer.promise(obj);\n\t\t}\n\t});\n\tvar pnum = (/[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/).source;\n\n\tvar rcssNum = new RegExp(\"^(?:([+-])=|)(\" + pnum + \")([a-z%]*)$\", \"i\");\n\n\n\tvar cssExpand = [\"Top\", \"Right\", \"Bottom\", \"Left\"];\n\n\tvar documentElement = document.documentElement;\n\n\n\n\tvar isAttached = function (elem) {\n\t\treturn jQuery.contains(elem.ownerDocument, elem);\n\t},\n\t\tcomposed = { composed: true };\n\n\t// Support: IE 9 - 11+, Edge 12 - 18+, iOS 10.0 - 10.2 only\n\t// Check attachment across shadow DOM boundaries when possible (gh-3504)\n\t// Support: iOS 10.0-10.2 only\n\t// Early iOS 10 versions support `attachShadow` but not `getRootNode`,\n\t// leading to errors. We need to check for `getRootNode`.\n\tif (documentElement.getRootNode) {\n\t\tisAttached = function (elem) {\n\t\t\treturn jQuery.contains(elem.ownerDocument, elem) ||\n\t\t\t\telem.getRootNode(composed) === elem.ownerDocument;\n\t\t};\n\t}\n\tvar isHiddenWithinTree = function (elem, el) {\n\n\t\t// isHiddenWithinTree might be called from jQuery#filter function;\n\t\t// in that case, element will be second argument\n\t\telem = el || elem;\n\n\t\t// Inline style trumps all\n\t\treturn elem.style.display === \"none\" ||\n\t\t\telem.style.display === \"\" &&\n\n\t\t\t// Otherwise, check computed style\n\t\t\t// Support: Firefox <=43 - 45\n\t\t\t// Disconnected elements can have computed display: none, so first confirm that elem is\n\t\t\t// in the document.\n\t\t\tisAttached(elem) &&\n\n\t\t\tjQuery.css(elem, \"display\") === \"none\";\n\t};\n\n\n\n\tfunction adjustCSS(elem, prop, valueParts, tween) {\n\t\tvar adjusted, scale,\n\t\t\tmaxIterations = 20,\n\t\t\tcurrentValue = tween ?\n\t\t\t\tfunction () {\n\t\t\t\t\treturn tween.cur();\n\t\t\t\t} :\n\t\t\t\tfunction () {\n\t\t\t\t\treturn jQuery.css(elem, prop, \"\");\n\t\t\t\t},\n\t\t\tinitial = currentValue(),\n\t\t\tunit = valueParts && valueParts[3] || (jQuery.cssNumber[prop] ? \"\" : \"px\"),\n\n\t\t\t// Starting value computation is required for potential unit mismatches\n\t\t\tinitialInUnit = elem.nodeType &&\n\t\t\t\t(jQuery.cssNumber[prop] || unit !== \"px\" && +initial) &&\n\t\t\t\trcssNum.exec(jQuery.css(elem, prop));\n\n\t\tif (initialInUnit && initialInUnit[3] !== unit) {\n\n\t\t\t// Support: Firefox <=54\n\t\t\t// Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144)\n\t\t\tinitial = initial / 2;\n\n\t\t\t// Trust units reported by jQuery.css\n\t\t\tunit = unit || initialInUnit[3];\n\n\t\t\t// Iteratively approximate from a nonzero starting point\n\t\t\tinitialInUnit = +initial || 1;\n\n\t\t\twhile (maxIterations--) {\n\n\t\t\t\t// Evaluate and update our best guess (doubling guesses that zero out).\n\t\t\t\t// Finish if the scale equals or crosses 1 (making the old*new product non-positive).\n\t\t\t\tjQuery.style(elem, prop, initialInUnit + unit);\n\t\t\t\tif ((1 - scale) * (1 - (scale = currentValue() / initial || 0.5)) <= 0) {\n\t\t\t\t\tmaxIterations = 0;\n\t\t\t\t}\n\t\t\t\tinitialInUnit = initialInUnit / scale;\n\n\t\t\t}\n\n\t\t\tinitialInUnit = initialInUnit * 2;\n\t\t\tjQuery.style(elem, prop, initialInUnit + unit);\n\n\t\t\t// Make sure we update the tween properties later on\n\t\t\tvalueParts = valueParts || [];\n\t\t}\n\n\t\tif (valueParts) {\n\t\t\tinitialInUnit = +initialInUnit || +initial || 0;\n\n\t\t\t// Apply relative offset (+=/-=) if specified\n\t\t\tadjusted = valueParts[1] ?\n\t\t\t\tinitialInUnit + (valueParts[1] + 1) * valueParts[2] :\n\t\t\t\t+valueParts[2];\n\t\t\tif (tween) {\n\t\t\t\ttween.unit = unit;\n\t\t\t\ttween.start = initialInUnit;\n\t\t\t\ttween.end = adjusted;\n\t\t\t}\n\t\t}\n\t\treturn adjusted;\n\t}\n\n\n\tvar defaultDisplayMap = {};\n\n\tfunction getDefaultDisplay(elem) {\n\t\tvar temp,\n\t\t\tdoc = elem.ownerDocument,\n\t\t\tnodeName = elem.nodeName,\n\t\t\tdisplay = defaultDisplayMap[nodeName];\n\n\t\tif (display) {\n\t\t\treturn display;\n\t\t}\n\n\t\ttemp = doc.body.appendChild(doc.createElement(nodeName));\n\t\tdisplay = jQuery.css(temp, \"display\");\n\n\t\ttemp.parentNode.removeChild(temp);\n\n\t\tif (display === \"none\") {\n\t\t\tdisplay = \"block\";\n\t\t}\n\t\tdefaultDisplayMap[nodeName] = display;\n\n\t\treturn display;\n\t}\n\n\tfunction showHide(elements, show) {\n\t\tvar display, elem,\n\t\t\tvalues = [],\n\t\t\tindex = 0,\n\t\t\tlength = elements.length;\n\n\t\t// Determine new display value for elements that need to change\n\t\tfor (; index < length; index++) {\n\t\t\telem = elements[index];\n\t\t\tif (!elem.style) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tdisplay = elem.style.display;\n\t\t\tif (show) {\n\n\t\t\t\t// Since we force visibility upon cascade-hidden elements, an immediate (and slow)\n\t\t\t\t// check is required in this first loop unless we have a nonempty display value (either\n\t\t\t\t// inline or about-to-be-restored)\n\t\t\t\tif (display === \"none\") {\n\t\t\t\t\tvalues[index] = dataPriv.get(elem, \"display\") || null;\n\t\t\t\t\tif (!values[index]) {\n\t\t\t\t\t\telem.style.display = \"\";\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (elem.style.display === \"\" && isHiddenWithinTree(elem)) {\n\t\t\t\t\tvalues[index] = getDefaultDisplay(elem);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (display !== \"none\") {\n\t\t\t\t\tvalues[index] = \"none\";\n\n\t\t\t\t\t// Remember what we're overwriting\n\t\t\t\t\tdataPriv.set(elem, \"display\", display);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Set the display of the elements in a second loop to avoid constant reflow\n\t\tfor (index = 0; index < length; index++) {\n\t\t\tif (values[index] != null) {\n\t\t\t\telements[index].style.display = values[index];\n\t\t\t}\n\t\t}\n\n\t\treturn elements;\n\t}\n\n\tjQuery.fn.extend({\n\t\tshow: function () {\n\t\t\treturn showHide(this, true);\n\t\t},\n\t\thide: function () {\n\t\t\treturn showHide(this);\n\t\t},\n\t\ttoggle: function (state) {\n\t\t\tif (typeof state === \"boolean\") {\n\t\t\t\treturn state ? this.show() : this.hide();\n\t\t\t}\n\n\t\t\treturn this.each(function () {\n\t\t\t\tif (isHiddenWithinTree(this)) {\n\t\t\t\t\tjQuery(this).show();\n\t\t\t\t} else {\n\t\t\t\t\tjQuery(this).hide();\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t});\n\tvar rcheckableType = (/^(?:checkbox|radio)$/i);\n\n\tvar rtagName = (/<([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]*)/i);\n\n\tvar rscriptType = (/^$|^module$|\\/(?:java|ecma)script/i);\n\n\n\n\t(function () {\n\t\tvar fragment = document.createDocumentFragment(),\n\t\t\tdiv = fragment.appendChild(document.createElement(\"div\")),\n\t\t\tinput = document.createElement(\"input\");\n\n\t\t// Support: Android 4.0 - 4.3 only\n\t\t// Check state lost if the name is set (trac-11217)\n\t\t// Support: Windows Web Apps (WWA)\n\t\t// `name` and `type` must use .setAttribute for WWA (trac-14901)\n\t\tinput.setAttribute(\"type\", \"radio\");\n\t\tinput.setAttribute(\"checked\", \"checked\");\n\t\tinput.setAttribute(\"name\", \"t\");\n\n\t\tdiv.appendChild(input);\n\n\t\t// Support: Android <=4.1 only\n\t\t// Older WebKit doesn't clone checked state correctly in fragments\n\t\tsupport.checkClone = div.cloneNode(true).cloneNode(true).lastChild.checked;\n\n\t\t// Support: IE <=11 only\n\t\t// Make sure textarea (and checkbox) defaultValue is properly cloned\n\t\tdiv.innerHTML = \"<textarea>x</textarea>\";\n\t\tsupport.noCloneChecked = !!div.cloneNode(true).lastChild.defaultValue;\n\n\t\t// Support: IE <=9 only\n\t\t// IE <=9 replaces <option> tags with their contents when inserted outside of\n\t\t// the select element.\n\t\tdiv.innerHTML = \"<option></option>\";\n\t\tsupport.option = !!div.lastChild;\n\t})();\n\n\n\t// We have to close these tags to support XHTML (trac-13200)\n\tvar wrapMap = {\n\n\t\t// XHTML parsers do not magically insert elements in the\n\t\t// same way that tag soup parsers do. So we cannot shorten\n\t\t// this by omitting <tbody> or other required elements.\n\t\tthead: [1, \"<table>\", \"</table>\"],\n\t\tcol: [2, \"<table><colgroup>\", \"</colgroup></table>\"],\n\t\ttr: [2, \"<table><tbody>\", \"</tbody></table>\"],\n\t\ttd: [3, \"<table><tbody><tr>\", \"</tr></tbody></table>\"],\n\n\t\t_default: [0, \"\", \"\"]\n\t};\n\n\twrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;\n\twrapMap.th = wrapMap.td;\n\n\t// Support: IE <=9 only\n\tif (!support.option) {\n\t\twrapMap.optgroup = wrapMap.option = [1, \"<select multiple='multiple'>\", \"</select>\"];\n\t}\n\n\n\tfunction getAll(context, tag) {\n\n\t\t// Support: IE <=9 - 11 only\n\t\t// Use typeof to avoid zero-argument method invocation on host objects (trac-15151)\n\t\tvar ret;\n\n\t\tif (typeof context.getElementsByTagName !== \"undefined\") {\n\t\t\tret = context.getElementsByTagName(tag || \"*\");\n\n\t\t} else if (typeof context.querySelectorAll !== \"undefined\") {\n\t\t\tret = context.querySelectorAll(tag || \"*\");\n\n\t\t} else {\n\t\t\tret = [];\n\t\t}\n\n\t\tif (tag === undefined || tag && nodeName(context, tag)) {\n\t\t\treturn jQuery.merge([context], ret);\n\t\t}\n\n\t\treturn ret;\n\t}\n\n\n\t// Mark scripts as having already been evaluated\n\tfunction setGlobalEval(elems, refElements) {\n\t\tvar i = 0,\n\t\t\tl = elems.length;\n\n\t\tfor (; i < l; i++) {\n\t\t\tdataPriv.set(\n\t\t\t\telems[i],\n\t\t\t\t\"globalEval\",\n\t\t\t\t!refElements || dataPriv.get(refElements[i], \"globalEval\")\n\t\t\t);\n\t\t}\n\t}\n\n\n\tvar rhtml = /<|&#?\\w+;/;\n\n\tfunction buildFragment(elems, context, scripts, selection, ignored) {\n\t\tvar elem, tmp, tag, wrap, attached, j,\n\t\t\tfragment = context.createDocumentFragment(),\n\t\t\tnodes = [],\n\t\t\ti = 0,\n\t\t\tl = elems.length;\n\n\t\tfor (; i < l; i++) {\n\t\t\telem = elems[i];\n\n\t\t\tif (elem || elem === 0) {\n\n\t\t\t\t// Add nodes directly\n\t\t\t\tif (toType(elem) === \"object\") {\n\n\t\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\t\tjQuery.merge(nodes, elem.nodeType ? [elem] : elem);\n\n\t\t\t\t\t// Convert non-html into a text node\n\t\t\t\t} else if (!rhtml.test(elem)) {\n\t\t\t\t\tnodes.push(context.createTextNode(elem));\n\n\t\t\t\t\t// Convert html into DOM nodes\n\t\t\t\t} else {\n\t\t\t\t\ttmp = tmp || fragment.appendChild(context.createElement(\"div\"));\n\n\t\t\t\t\t// Deserialize a standard representation\n\t\t\t\t\ttag = (rtagName.exec(elem) || [\"\", \"\"])[1].toLowerCase();\n\t\t\t\t\twrap = wrapMap[tag] || wrapMap._default;\n\t\t\t\t\ttmp.innerHTML = wrap[1] + jQuery.htmlPrefilter(elem) + wrap[2];\n\n\t\t\t\t\t// Descend through wrappers to the right content\n\t\t\t\t\tj = wrap[0];\n\t\t\t\t\twhile (j--) {\n\t\t\t\t\t\ttmp = tmp.lastChild;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\t\tjQuery.merge(nodes, tmp.childNodes);\n\n\t\t\t\t\t// Remember the top-level container\n\t\t\t\t\ttmp = fragment.firstChild;\n\n\t\t\t\t\t// Ensure the created nodes are orphaned (trac-12392)\n\t\t\t\t\ttmp.textContent = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Remove wrapper from fragment\n\t\tfragment.textContent = \"\";\n\n\t\ti = 0;\n\t\twhile ((elem = nodes[i++])) {\n\n\t\t\t// Skip elements already in the context collection (trac-4087)\n\t\t\tif (selection && jQuery.inArray(elem, selection) > -1) {\n\t\t\t\tif (ignored) {\n\t\t\t\t\tignored.push(elem);\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tattached = isAttached(elem);\n\n\t\t\t// Append to fragment\n\t\t\ttmp = getAll(fragment.appendChild(elem), \"script\");\n\n\t\t\t// Preserve script evaluation history\n\t\t\tif (attached) {\n\t\t\t\tsetGlobalEval(tmp);\n\t\t\t}\n\n\t\t\t// Capture executables\n\t\t\tif (scripts) {\n\t\t\t\tj = 0;\n\t\t\t\twhile ((elem = tmp[j++])) {\n\t\t\t\t\tif (rscriptType.test(elem.type || \"\")) {\n\t\t\t\t\t\tscripts.push(elem);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn fragment;\n\t}\n\n\n\tvar rtypenamespace = /^([^.]*)(?:\\.(.+)|)/;\n\n\tfunction returnTrue() {\n\t\treturn true;\n\t}\n\n\tfunction returnFalse() {\n\t\treturn false;\n\t}\n\n\tfunction on(elem, types, selector, data, fn, one) {\n\t\tvar origFn, type;\n\n\t\t// Types can be a map of types/handlers\n\t\tif (typeof types === \"object\") {\n\n\t\t\t// ( types-Object, selector, data )\n\t\t\tif (typeof selector !== \"string\") {\n\n\t\t\t\t// ( types-Object, data )\n\t\t\t\tdata = data || selector;\n\t\t\t\tselector = undefined;\n\t\t\t}\n\t\t\tfor (type in types) {\n\t\t\t\ton(elem, type, selector, data, types[type], one);\n\t\t\t}\n\t\t\treturn elem;\n\t\t}\n\n\t\tif (data == null && fn == null) {\n\n\t\t\t// ( types, fn )\n\t\t\tfn = selector;\n\t\t\tdata = selector = undefined;\n\t\t} else if (fn == null) {\n\t\t\tif (typeof selector === \"string\") {\n\n\t\t\t\t// ( types, selector, fn )\n\t\t\t\tfn = data;\n\t\t\t\tdata = undefined;\n\t\t\t} else {\n\n\t\t\t\t// ( types, data, fn )\n\t\t\t\tfn = data;\n\t\t\t\tdata = selector;\n\t\t\t\tselector = undefined;\n\t\t\t}\n\t\t}\n\t\tif (fn === false) {\n\t\t\tfn = returnFalse;\n\t\t} else if (!fn) {\n\t\t\treturn elem;\n\t\t}\n\n\t\tif (one === 1) {\n\t\t\torigFn = fn;\n\t\t\tfn = function (event) {\n\n\t\t\t\t// Can use an empty set, since event contains the info\n\t\t\t\tjQuery().off(event);\n\t\t\t\treturn origFn.apply(this, arguments);\n\t\t\t};\n\n\t\t\t// Use same guid so caller can remove using origFn\n\t\t\tfn.guid = origFn.guid || (origFn.guid = jQuery.guid++);\n\t\t}\n\t\treturn elem.each(function () {\n\t\t\tjQuery.event.add(this, types, fn, data, selector);\n\t\t});\n\t}\n\n\t/*\n\t * Helper functions for managing events -- not part of the public interface.\n\t * Props to Dean Edwards' addEvent library for many of the ideas.\n\t */\n\tjQuery.event = {\n\n\t\tglobal: {},\n\n\t\tadd: function (elem, types, handler, data, selector) {\n\n\t\t\tvar handleObjIn, eventHandle, tmp,\n\t\t\t\tevents, t, handleObj,\n\t\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\t\telemData = dataPriv.get(elem);\n\n\t\t\t// Only attach events to objects that accept data\n\t\t\tif (!acceptData(elem)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Caller can pass in an object of custom data in lieu of the handler\n\t\t\tif (handler.handler) {\n\t\t\t\thandleObjIn = handler;\n\t\t\t\thandler = handleObjIn.handler;\n\t\t\t\tselector = handleObjIn.selector;\n\t\t\t}\n\n\t\t\t// Ensure that invalid selectors throw exceptions at attach time\n\t\t\t// Evaluate against documentElement in case elem is a non-element node (e.g., document)\n\t\t\tif (selector) {\n\t\t\t\tjQuery.find.matchesSelector(documentElement, selector);\n\t\t\t}\n\n\t\t\t// Make sure that the handler has a unique ID, used to find/remove it later\n\t\t\tif (!handler.guid) {\n\t\t\t\thandler.guid = jQuery.guid++;\n\t\t\t}\n\n\t\t\t// Init the element's event structure and main handler, if this is the first\n\t\t\tif (!(events = elemData.events)) {\n\t\t\t\tevents = elemData.events = Object.create(null);\n\t\t\t}\n\t\t\tif (!(eventHandle = elemData.handle)) {\n\t\t\t\teventHandle = elemData.handle = function (e) {\n\n\t\t\t\t\t// Discard the second event of a jQuery.event.trigger() and\n\t\t\t\t\t// when an event is called after a page has unloaded\n\t\t\t\t\treturn typeof jQuery !== \"undefined\" && jQuery.event.triggered !== e.type ?\n\t\t\t\t\t\tjQuery.event.dispatch.apply(elem, arguments) : undefined;\n\t\t\t\t};\n\t\t\t}\n\n\t\t\t// Handle multiple events separated by a space\n\t\t\ttypes = (types || \"\").match(rnothtmlwhite) || [\"\"];\n\t\t\tt = types.length;\n\t\t\twhile (t--) {\n\t\t\t\ttmp = rtypenamespace.exec(types[t]) || [];\n\t\t\t\ttype = origType = tmp[1];\n\t\t\t\tnamespaces = (tmp[2] || \"\").split(\".\").sort();\n\n\t\t\t\t// There *must* be a type, no attaching namespace-only handlers\n\t\t\t\tif (!type) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// If event changes its type, use the special event handlers for the changed type\n\t\t\t\tspecial = jQuery.event.special[type] || {};\n\n\t\t\t\t// If selector defined, determine special event api type, otherwise given type\n\t\t\t\ttype = (selector ? special.delegateType : special.bindType) || type;\n\n\t\t\t\t// Update special based on newly reset type\n\t\t\t\tspecial = jQuery.event.special[type] || {};\n\n\t\t\t\t// handleObj is passed to all event handlers\n\t\t\t\thandleObj = jQuery.extend({\n\t\t\t\t\ttype: type,\n\t\t\t\t\torigType: origType,\n\t\t\t\t\tdata: data,\n\t\t\t\t\thandler: handler,\n\t\t\t\t\tguid: handler.guid,\n\t\t\t\t\tselector: selector,\n\t\t\t\t\tneedsContext: selector && jQuery.expr.match.needsContext.test(selector),\n\t\t\t\t\tnamespace: namespaces.join(\".\")\n\t\t\t\t}, handleObjIn);\n\n\t\t\t\t// Init the event handler queue if we're the first\n\t\t\t\tif (!(handlers = events[type])) {\n\t\t\t\t\thandlers = events[type] = [];\n\t\t\t\t\thandlers.delegateCount = 0;\n\n\t\t\t\t\t// Only use addEventListener if the special events handler returns false\n\t\t\t\t\tif (!special.setup ||\n\t\t\t\t\t\tspecial.setup.call(elem, data, namespaces, eventHandle) === false) {\n\n\t\t\t\t\t\tif (elem.addEventListener) {\n\t\t\t\t\t\t\telem.addEventListener(type, eventHandle);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (special.add) {\n\t\t\t\t\tspecial.add.call(elem, handleObj);\n\n\t\t\t\t\tif (!handleObj.handler.guid) {\n\t\t\t\t\t\thandleObj.handler.guid = handler.guid;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Add to the element's handler list, delegates in front\n\t\t\t\tif (selector) {\n\t\t\t\t\thandlers.splice(handlers.delegateCount++, 0, handleObj);\n\t\t\t\t} else {\n\t\t\t\t\thandlers.push(handleObj);\n\t\t\t\t}\n\n\t\t\t\t// Keep track of which events have ever been used, for event optimization\n\t\t\t\tjQuery.event.global[type] = true;\n\t\t\t}\n\n\t\t},\n\n\t\t// Detach an event or set of events from an element\n\t\tremove: function (elem, types, handler, selector, mappedTypes) {\n\n\t\t\tvar j, origCount, tmp,\n\t\t\t\tevents, t, handleObj,\n\t\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\t\telemData = dataPriv.hasData(elem) && dataPriv.get(elem);\n\n\t\t\tif (!elemData || !(events = elemData.events)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Once for each type.namespace in types; type may be omitted\n\t\t\ttypes = (types || \"\").match(rnothtmlwhite) || [\"\"];\n\t\t\tt = types.length;\n\t\t\twhile (t--) {\n\t\t\t\ttmp = rtypenamespace.exec(types[t]) || [];\n\t\t\t\ttype = origType = tmp[1];\n\t\t\t\tnamespaces = (tmp[2] || \"\").split(\".\").sort();\n\n\t\t\t\t// Unbind all events (on this namespace, if provided) for the element\n\t\t\t\tif (!type) {\n\t\t\t\t\tfor (type in events) {\n\t\t\t\t\t\tjQuery.event.remove(elem, type + types[t], handler, selector, true);\n\t\t\t\t\t}\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tspecial = jQuery.event.special[type] || {};\n\t\t\t\ttype = (selector ? special.delegateType : special.bindType) || type;\n\t\t\t\thandlers = events[type] || [];\n\t\t\t\ttmp = tmp[2] &&\n\t\t\t\t\tnew RegExp(\"(^|\\\\.)\" + namespaces.join(\"\\\\.(?:.*\\\\.|)\") + \"(\\\\.|$)\");\n\n\t\t\t\t// Remove matching events\n\t\t\t\torigCount = j = handlers.length;\n\t\t\t\twhile (j--) {\n\t\t\t\t\thandleObj = handlers[j];\n\n\t\t\t\t\tif ((mappedTypes || origType === handleObj.origType) &&\n\t\t\t\t\t\t(!handler || handler.guid === handleObj.guid) &&\n\t\t\t\t\t\t(!tmp || tmp.test(handleObj.namespace)) &&\n\t\t\t\t\t\t(!selector || selector === handleObj.selector ||\n\t\t\t\t\t\t\tselector === \"**\" && handleObj.selector)) {\n\t\t\t\t\t\thandlers.splice(j, 1);\n\n\t\t\t\t\t\tif (handleObj.selector) {\n\t\t\t\t\t\t\thandlers.delegateCount--;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (special.remove) {\n\t\t\t\t\t\t\tspecial.remove.call(elem, handleObj);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Remove generic event handler if we removed something and no more handlers exist\n\t\t\t\t// (avoids potential for endless recursion during removal of special event handlers)\n\t\t\t\tif (origCount && !handlers.length) {\n\t\t\t\t\tif (!special.teardown ||\n\t\t\t\t\t\tspecial.teardown.call(elem, namespaces, elemData.handle) === false) {\n\n\t\t\t\t\t\tjQuery.removeEvent(elem, type, elemData.handle);\n\t\t\t\t\t}\n\n\t\t\t\t\tdelete events[type];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove data and the expando if it's no longer used\n\t\t\tif (jQuery.isEmptyObject(events)) {\n\t\t\t\tdataPriv.remove(elem, \"handle events\");\n\t\t\t}\n\t\t},\n\n\t\tdispatch: function (nativeEvent) {\n\n\t\t\tvar i, j, ret, matched, handleObj, handlerQueue,\n\t\t\t\targs = new Array(arguments.length),\n\n\t\t\t\t// Make a writable jQuery.Event from the native event object\n\t\t\t\tevent = jQuery.event.fix(nativeEvent),\n\n\t\t\t\thandlers = (\n\t\t\t\t\tdataPriv.get(this, \"events\") || Object.create(null)\n\t\t\t\t)[event.type] || [],\n\t\t\t\tspecial = jQuery.event.special[event.type] || {};\n\n\t\t\t// Use the fix-ed jQuery.Event rather than the (read-only) native event\n\t\t\targs[0] = event;\n\n\t\t\tfor (i = 1; i < arguments.length; i++) {\n\t\t\t\targs[i] = arguments[i];\n\t\t\t}\n\n\t\t\tevent.delegateTarget = this;\n\n\t\t\t// Call the preDispatch hook for the mapped type, and let it bail if desired\n\t\t\tif (special.preDispatch && special.preDispatch.call(this, event) === false) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Determine handlers\n\t\t\thandlerQueue = jQuery.event.handlers.call(this, event, handlers);\n\n\t\t\t// Run delegates first; they may want to stop propagation beneath us\n\t\t\ti = 0;\n\t\t\twhile ((matched = handlerQueue[i++]) && !event.isPropagationStopped()) {\n\t\t\t\tevent.currentTarget = matched.elem;\n\n\t\t\t\tj = 0;\n\t\t\t\twhile ((handleObj = matched.handlers[j++]) &&\n\t\t\t\t\t!event.isImmediatePropagationStopped()) {\n\n\t\t\t\t\t// If the event is namespaced, then each handler is only invoked if it is\n\t\t\t\t\t// specially universal or its namespaces are a superset of the event's.\n\t\t\t\t\tif (!event.rnamespace || handleObj.namespace === false ||\n\t\t\t\t\t\tevent.rnamespace.test(handleObj.namespace)) {\n\n\t\t\t\t\t\tevent.handleObj = handleObj;\n\t\t\t\t\t\tevent.data = handleObj.data;\n\n\t\t\t\t\t\tret = ((jQuery.event.special[handleObj.origType] || {}).handle ||\n\t\t\t\t\t\t\thandleObj.handler).apply(matched.elem, args);\n\n\t\t\t\t\t\tif (ret !== undefined) {\n\t\t\t\t\t\t\tif ((event.result = ret) === false) {\n\t\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Call the postDispatch hook for the mapped type\n\t\t\tif (special.postDispatch) {\n\t\t\t\tspecial.postDispatch.call(this, event);\n\t\t\t}\n\n\t\t\treturn event.result;\n\t\t},\n\n\t\thandlers: function (event, handlers) {\n\t\t\tvar i, handleObj, sel, matchedHandlers, matchedSelectors,\n\t\t\t\thandlerQueue = [],\n\t\t\t\tdelegateCount = handlers.delegateCount,\n\t\t\t\tcur = event.target;\n\n\t\t\t// Find delegate handlers\n\t\t\tif (delegateCount &&\n\n\t\t\t\t// Support: IE <=9\n\t\t\t\t// Black-hole SVG <use> instance trees (trac-13180)\n\t\t\t\tcur.nodeType &&\n\n\t\t\t\t// Support: Firefox <=42\n\t\t\t\t// Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861)\n\t\t\t\t// https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click\n\t\t\t\t// Support: IE 11 only\n\t\t\t\t// ...but not arrow key \"clicks\" of radio inputs, which can have `button` -1 (gh-2343)\n\t\t\t\t!(event.type === \"click\" && event.button >= 1)) {\n\n\t\t\t\tfor (; cur !== this; cur = cur.parentNode || this) {\n\n\t\t\t\t\t// Don't check non-elements (trac-13208)\n\t\t\t\t\t// Don't process clicks on disabled elements (trac-6911, trac-8165, trac-11382, trac-11764)\n\t\t\t\t\tif (cur.nodeType === 1 && !(event.type === \"click\" && cur.disabled === true)) {\n\t\t\t\t\t\tmatchedHandlers = [];\n\t\t\t\t\t\tmatchedSelectors = {};\n\t\t\t\t\t\tfor (i = 0; i < delegateCount; i++) {\n\t\t\t\t\t\t\thandleObj = handlers[i];\n\n\t\t\t\t\t\t\t// Don't conflict with Object.prototype properties (trac-13203)\n\t\t\t\t\t\t\tsel = handleObj.selector + \" \";\n\n\t\t\t\t\t\t\tif (matchedSelectors[sel] === undefined) {\n\t\t\t\t\t\t\t\tmatchedSelectors[sel] = handleObj.needsContext ?\n\t\t\t\t\t\t\t\t\tjQuery(sel, this).index(cur) > -1 :\n\t\t\t\t\t\t\t\t\tjQuery.find(sel, this, null, [cur]).length;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (matchedSelectors[sel]) {\n\t\t\t\t\t\t\t\tmatchedHandlers.push(handleObj);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (matchedHandlers.length) {\n\t\t\t\t\t\t\thandlerQueue.push({ elem: cur, handlers: matchedHandlers });\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Add the remaining (directly-bound) handlers\n\t\t\tcur = this;\n\t\t\tif (delegateCount < handlers.length) {\n\t\t\t\thandlerQueue.push({ elem: cur, handlers: handlers.slice(delegateCount) });\n\t\t\t}\n\n\t\t\treturn handlerQueue;\n\t\t},\n\n\t\taddProp: function (name, hook) {\n\t\t\tObject.defineProperty(jQuery.Event.prototype, name, {\n\t\t\t\tenumerable: true,\n\t\t\t\tconfigurable: true,\n\n\t\t\t\tget: isFunction(hook) ?\n\t\t\t\t\tfunction () {\n\t\t\t\t\t\tif (this.originalEvent) {\n\t\t\t\t\t\t\treturn hook(this.originalEvent);\n\t\t\t\t\t\t}\n\t\t\t\t\t} :\n\t\t\t\t\tfunction () {\n\t\t\t\t\t\tif (this.originalEvent) {\n\t\t\t\t\t\t\treturn this.originalEvent[name];\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\n\t\t\t\tset: function (value) {\n\t\t\t\t\tObject.defineProperty(this, name, {\n\t\t\t\t\t\tenumerable: true,\n\t\t\t\t\t\tconfigurable: true,\n\t\t\t\t\t\twritable: true,\n\t\t\t\t\t\tvalue: value\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\tfix: function (originalEvent) {\n\t\t\treturn originalEvent[jQuery.expando] ?\n\t\t\t\toriginalEvent :\n\t\t\t\tnew jQuery.Event(originalEvent);\n\t\t},\n\n\t\tspecial: {\n\t\t\tload: {\n\n\t\t\t\t// Prevent triggered image.load events from bubbling to window.load\n\t\t\t\tnoBubble: true\n\t\t\t},\n\t\t\tclick: {\n\n\t\t\t\t// Utilize native event to ensure correct state for checkable inputs\n\t\t\t\tsetup: function (data) {\n\n\t\t\t\t\t// For mutual compressibility with _default, replace `this` access with a local var.\n\t\t\t\t\t// `|| data` is dead code meant only to preserve the variable through minification.\n\t\t\t\t\tvar el = this || data;\n\n\t\t\t\t\t// Claim the first handler\n\t\t\t\t\tif (rcheckableType.test(el.type) &&\n\t\t\t\t\t\tel.click && nodeName(el, \"input\")) {\n\n\t\t\t\t\t\t// dataPriv.set( el, \"click\", ... )\n\t\t\t\t\t\tleverageNative(el, \"click\", true);\n\t\t\t\t\t}\n\n\t\t\t\t\t// Return false to allow normal processing in the caller\n\t\t\t\t\treturn false;\n\t\t\t\t},\n\t\t\t\ttrigger: function (data) {\n\n\t\t\t\t\t// For mutual compressibility with _default, replace `this` access with a local var.\n\t\t\t\t\t// `|| data` is dead code meant only to preserve the variable through minification.\n\t\t\t\t\tvar el = this || data;\n\n\t\t\t\t\t// Force setup before triggering a click\n\t\t\t\t\tif (rcheckableType.test(el.type) &&\n\t\t\t\t\t\tel.click && nodeName(el, \"input\")) {\n\n\t\t\t\t\t\tleverageNative(el, \"click\");\n\t\t\t\t\t}\n\n\t\t\t\t\t// Return non-false to allow normal event-path propagation\n\t\t\t\t\treturn true;\n\t\t\t\t},\n\n\t\t\t\t// For cross-browser consistency, suppress native .click() on links\n\t\t\t\t// Also prevent it if we're currently inside a leveraged native-event stack\n\t\t\t\t_default: function (event) {\n\t\t\t\t\tvar target = event.target;\n\t\t\t\t\treturn rcheckableType.test(target.type) &&\n\t\t\t\t\t\ttarget.click && nodeName(target, \"input\") &&\n\t\t\t\t\t\tdataPriv.get(target, \"click\") ||\n\t\t\t\t\t\tnodeName(target, \"a\");\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tbeforeunload: {\n\t\t\t\tpostDispatch: function (event) {\n\n\t\t\t\t\t// Support: Firefox 20+\n\t\t\t\t\t// Firefox doesn't alert if the returnValue field is not set.\n\t\t\t\t\tif (event.result !== undefined && event.originalEvent) {\n\t\t\t\t\t\tevent.originalEvent.returnValue = event.result;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t// Ensure the presence of an event listener that handles manually-triggered\n\t// synthetic events by interrupting progress until reinvoked in response to\n\t// *native* events that it fires directly, ensuring that state changes have\n\t// already occurred before other listeners are invoked.\n\tfunction leverageNative(el, type, isSetup) {\n\n\t\t// Missing `isSetup` indicates a trigger call, which must force setup through jQuery.event.add\n\t\tif (!isSetup) {\n\t\t\tif (dataPriv.get(el, type) === undefined) {\n\t\t\t\tjQuery.event.add(el, type, returnTrue);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\t// Register the controller as a special universal handler for all event namespaces\n\t\tdataPriv.set(el, type, false);\n\t\tjQuery.event.add(el, type, {\n\t\t\tnamespace: false,\n\t\t\thandler: function (event) {\n\t\t\t\tvar result,\n\t\t\t\t\tsaved = dataPriv.get(this, type);\n\n\t\t\t\tif ((event.isTrigger & 1) && this[type]) {\n\n\t\t\t\t\t// Interrupt processing of the outer synthetic .trigger()ed event\n\t\t\t\t\tif (!saved) {\n\n\t\t\t\t\t\t// Store arguments for use when handling the inner native event\n\t\t\t\t\t\t// There will always be at least one argument (an event object), so this array\n\t\t\t\t\t\t// will not be confused with a leftover capture object.\n\t\t\t\t\t\tsaved = slice.call(arguments);\n\t\t\t\t\t\tdataPriv.set(this, type, saved);\n\n\t\t\t\t\t\t// Trigger the native event and capture its result\n\t\t\t\t\t\tthis[type]();\n\t\t\t\t\t\tresult = dataPriv.get(this, type);\n\t\t\t\t\t\tdataPriv.set(this, type, false);\n\n\t\t\t\t\t\tif (saved !== result) {\n\n\t\t\t\t\t\t\t// Cancel the outer synthetic event\n\t\t\t\t\t\t\tevent.stopImmediatePropagation();\n\t\t\t\t\t\t\tevent.preventDefault();\n\n\t\t\t\t\t\t\treturn result;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// If this is an inner synthetic event for an event with a bubbling surrogate\n\t\t\t\t\t\t// (focus or blur), assume that the surrogate already propagated from triggering\n\t\t\t\t\t\t// the native event and prevent that from happening again here.\n\t\t\t\t\t\t// This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the\n\t\t\t\t\t\t// bubbling surrogate propagates *after* the non-bubbling base), but that seems\n\t\t\t\t\t\t// less bad than duplication.\n\t\t\t\t\t} else if ((jQuery.event.special[type] || {}).delegateType) {\n\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t}\n\n\t\t\t\t\t// If this is a native event triggered above, everything is now in order\n\t\t\t\t\t// Fire an inner synthetic event with the original arguments\n\t\t\t\t} else if (saved) {\n\n\t\t\t\t\t// ...and capture the result\n\t\t\t\t\tdataPriv.set(this, type, jQuery.event.trigger(\n\t\t\t\t\t\tsaved[0],\n\t\t\t\t\t\tsaved.slice(1),\n\t\t\t\t\t\tthis\n\t\t\t\t\t));\n\n\t\t\t\t\t// Abort handling of the native event by all jQuery handlers while allowing\n\t\t\t\t\t// native handlers on the same element to run. On target, this is achieved\n\t\t\t\t\t// by stopping immediate propagation just on the jQuery event. However,\n\t\t\t\t\t// the native event is re-wrapped by a jQuery one on each level of the\n\t\t\t\t\t// propagation so the only way to stop it for jQuery is to stop it for\n\t\t\t\t\t// everyone via native `stopPropagation()`. This is not a problem for\n\t\t\t\t\t// focus/blur which don't bubble, but it does also stop click on checkboxes\n\t\t\t\t\t// and radios. We accept this limitation.\n\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\tevent.isImmediatePropagationStopped = returnTrue;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\tjQuery.removeEvent = function (elem, type, handle) {\n\n\t\t// This \"if\" is needed for plain objects\n\t\tif (elem.removeEventListener) {\n\t\t\telem.removeEventListener(type, handle);\n\t\t}\n\t};\n\n\tjQuery.Event = function (src, props) {\n\n\t\t// Allow instantiation without the 'new' keyword\n\t\tif (!(this instanceof jQuery.Event)) {\n\t\t\treturn new jQuery.Event(src, props);\n\t\t}\n\n\t\t// Event object\n\t\tif (src && src.type) {\n\t\t\tthis.originalEvent = src;\n\t\t\tthis.type = src.type;\n\n\t\t\t// Events bubbling up the document may have been marked as prevented\n\t\t\t// by a handler lower down the tree; reflect the correct value.\n\t\t\tthis.isDefaultPrevented = src.defaultPrevented ||\n\t\t\t\tsrc.defaultPrevented === undefined &&\n\n\t\t\t\t// Support: Android <=2.3 only\n\t\t\t\tsrc.returnValue === false ?\n\t\t\t\treturnTrue :\n\t\t\t\treturnFalse;\n\n\t\t\t// Create target properties\n\t\t\t// Support: Safari <=6 - 7 only\n\t\t\t// Target should not be a text node (trac-504, trac-13143)\n\t\t\tthis.target = (src.target && src.target.nodeType === 3) ?\n\t\t\t\tsrc.target.parentNode :\n\t\t\t\tsrc.target;\n\n\t\t\tthis.currentTarget = src.currentTarget;\n\t\t\tthis.relatedTarget = src.relatedTarget;\n\n\t\t\t// Event type\n\t\t} else {\n\t\t\tthis.type = src;\n\t\t}\n\n\t\t// Put explicitly provided properties onto the event object\n\t\tif (props) {\n\t\t\tjQuery.extend(this, props);\n\t\t}\n\n\t\t// Create a timestamp if incoming event doesn't have one\n\t\tthis.timeStamp = src && src.timeStamp || Date.now();\n\n\t\t// Mark it as fixed\n\t\tthis[jQuery.expando] = true;\n\t};\n\n\t// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding\n\t// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html\n\tjQuery.Event.prototype = {\n\t\tconstructor: jQuery.Event,\n\t\tisDefaultPrevented: returnFalse,\n\t\tisPropagationStopped: returnFalse,\n\t\tisImmediatePropagationStopped: returnFalse,\n\t\tisSimulated: false,\n\n\t\tpreventDefault: function () {\n\t\t\tvar e = this.originalEvent;\n\n\t\t\tthis.isDefaultPrevented = returnTrue;\n\n\t\t\tif (e && !this.isSimulated) {\n\t\t\t\te.preventDefault();\n\t\t\t}\n\t\t},\n\t\tstopPropagation: function () {\n\t\t\tvar e = this.originalEvent;\n\n\t\t\tthis.isPropagationStopped = returnTrue;\n\n\t\t\tif (e && !this.isSimulated) {\n\t\t\t\te.stopPropagation();\n\t\t\t}\n\t\t},\n\t\tstopImmediatePropagation: function () {\n\t\t\tvar e = this.originalEvent;\n\n\t\t\tthis.isImmediatePropagationStopped = returnTrue;\n\n\t\t\tif (e && !this.isSimulated) {\n\t\t\t\te.stopImmediatePropagation();\n\t\t\t}\n\n\t\t\tthis.stopPropagation();\n\t\t}\n\t};\n\n\t// Includes all common event props including KeyEvent and MouseEvent specific props\n\tjQuery.each({\n\t\taltKey: true,\n\t\tbubbles: true,\n\t\tcancelable: true,\n\t\tchangedTouches: true,\n\t\tctrlKey: true,\n\t\tdetail: true,\n\t\teventPhase: true,\n\t\tmetaKey: true,\n\t\tpageX: true,\n\t\tpageY: true,\n\t\tshiftKey: true,\n\t\tview: true,\n\t\t\"char\": true,\n\t\tcode: true,\n\t\tcharCode: true,\n\t\tkey: true,\n\t\tkeyCode: true,\n\t\tbutton: true,\n\t\tbuttons: true,\n\t\tclientX: true,\n\t\tclientY: true,\n\t\toffsetX: true,\n\t\toffsetY: true,\n\t\tpointerId: true,\n\t\tpointerType: true,\n\t\tscreenX: true,\n\t\tscreenY: true,\n\t\ttargetTouches: true,\n\t\ttoElement: true,\n\t\ttouches: true,\n\t\twhich: true\n\t}, jQuery.event.addProp);\n\n\tjQuery.each({ focus: \"focusin\", blur: \"focusout\" }, function (type, delegateType) {\n\n\t\tfunction focusMappedHandler(nativeEvent) {\n\t\t\tif (document.documentMode) {\n\n\t\t\t\t// Support: IE 11+\n\t\t\t\t// Attach a single focusin/focusout handler on the document while someone wants\n\t\t\t\t// focus/blur. This is because the former are synchronous in IE while the latter\n\t\t\t\t// are async. In other browsers, all those handlers are invoked synchronously.\n\n\t\t\t\t// `handle` from private data would already wrap the event, but we need\n\t\t\t\t// to change the `type` here.\n\t\t\t\tvar handle = dataPriv.get(this, \"handle\"),\n\t\t\t\t\tevent = jQuery.event.fix(nativeEvent);\n\t\t\t\tevent.type = nativeEvent.type === \"focusin\" ? \"focus\" : \"blur\";\n\t\t\t\tevent.isSimulated = true;\n\n\t\t\t\t// First, handle focusin/focusout\n\t\t\t\thandle(nativeEvent);\n\n\t\t\t\t// ...then, handle focus/blur\n\t\t\t\t//\n\t\t\t\t// focus/blur don't bubble while focusin/focusout do; simulate the former by only\n\t\t\t\t// invoking the handler at the lower level.\n\t\t\t\tif (event.target === event.currentTarget) {\n\n\t\t\t\t\t// The setup part calls `leverageNative`, which, in turn, calls\n\t\t\t\t\t// `jQuery.event.add`, so event handle will already have been set\n\t\t\t\t\t// by this point.\n\t\t\t\t\thandle(event);\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\t// For non-IE browsers, attach a single capturing handler on the document\n\t\t\t\t// while someone wants focusin/focusout.\n\t\t\t\tjQuery.event.simulate(delegateType, nativeEvent.target,\n\t\t\t\t\tjQuery.event.fix(nativeEvent));\n\t\t\t}\n\t\t}\n\n\t\tjQuery.event.special[type] = {\n\n\t\t\t// Utilize native event if possible so blur/focus sequence is correct\n\t\t\tsetup: function () {\n\n\t\t\t\tvar attaches;\n\n\t\t\t\t// Claim the first handler\n\t\t\t\t// dataPriv.set( this, \"focus\", ... )\n\t\t\t\t// dataPriv.set( this, \"blur\", ... )\n\t\t\t\tleverageNative(this, type, true);\n\n\t\t\t\tif (document.documentMode) {\n\n\t\t\t\t\t// Support: IE 9 - 11+\n\t\t\t\t\t// We use the same native handler for focusin & focus (and focusout & blur)\n\t\t\t\t\t// so we need to coordinate setup & teardown parts between those events.\n\t\t\t\t\t// Use `delegateType` as the key as `type` is already used by `leverageNative`.\n\t\t\t\t\tattaches = dataPriv.get(this, delegateType);\n\t\t\t\t\tif (!attaches) {\n\t\t\t\t\t\tthis.addEventListener(delegateType, focusMappedHandler);\n\t\t\t\t\t}\n\t\t\t\t\tdataPriv.set(this, delegateType, (attaches || 0) + 1);\n\t\t\t\t} else {\n\n\t\t\t\t\t// Return false to allow normal processing in the caller\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\t\t\ttrigger: function () {\n\n\t\t\t\t// Force setup before trigger\n\t\t\t\tleverageNative(this, type);\n\n\t\t\t\t// Return non-false to allow normal event-path propagation\n\t\t\t\treturn true;\n\t\t\t},\n\n\t\t\tteardown: function () {\n\t\t\t\tvar attaches;\n\n\t\t\t\tif (document.documentMode) {\n\t\t\t\t\tattaches = dataPriv.get(this, delegateType) - 1;\n\t\t\t\t\tif (!attaches) {\n\t\t\t\t\t\tthis.removeEventListener(delegateType, focusMappedHandler);\n\t\t\t\t\t\tdataPriv.remove(this, delegateType);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdataPriv.set(this, delegateType, attaches);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\n\t\t\t\t\t// Return false to indicate standard teardown should be applied\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// Suppress native focus or blur if we're currently inside\n\t\t\t// a leveraged native-event stack\n\t\t\t_default: function (event) {\n\t\t\t\treturn dataPriv.get(event.target, type);\n\t\t\t},\n\n\t\t\tdelegateType: delegateType\n\t\t};\n\n\t\t// Support: Firefox <=44\n\t\t// Firefox doesn't have focus(in | out) events\n\t\t// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787\n\t\t//\n\t\t// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1\n\t\t// focus(in | out) events fire after focus & blur events,\n\t\t// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order\n\t\t// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857\n\t\t//\n\t\t// Support: IE 9 - 11+\n\t\t// To preserve relative focusin/focus & focusout/blur event order guaranteed on the 3.x branch,\n\t\t// attach a single handler for both events in IE.\n\t\tjQuery.event.special[delegateType] = {\n\t\t\tsetup: function () {\n\n\t\t\t\t// Handle: regular nodes (via `this.ownerDocument`), window\n\t\t\t\t// (via `this.document`) & document (via `this`).\n\t\t\t\tvar doc = this.ownerDocument || this.document || this,\n\t\t\t\t\tdataHolder = document.documentMode ? this : doc,\n\t\t\t\t\tattaches = dataPriv.get(dataHolder, delegateType);\n\n\t\t\t\t// Support: IE 9 - 11+\n\t\t\t\t// We use the same native handler for focusin & focus (and focusout & blur)\n\t\t\t\t// so we need to coordinate setup & teardown parts between those events.\n\t\t\t\t// Use `delegateType` as the key as `type` is already used by `leverageNative`.\n\t\t\t\tif (!attaches) {\n\t\t\t\t\tif (document.documentMode) {\n\t\t\t\t\t\tthis.addEventListener(delegateType, focusMappedHandler);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdoc.addEventListener(type, focusMappedHandler, true);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tdataPriv.set(dataHolder, delegateType, (attaches || 0) + 1);\n\t\t\t},\n\t\t\tteardown: function () {\n\t\t\t\tvar doc = this.ownerDocument || this.document || this,\n\t\t\t\t\tdataHolder = document.documentMode ? this : doc,\n\t\t\t\t\tattaches = dataPriv.get(dataHolder, delegateType) - 1;\n\n\t\t\t\tif (!attaches) {\n\t\t\t\t\tif (document.documentMode) {\n\t\t\t\t\t\tthis.removeEventListener(delegateType, focusMappedHandler);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdoc.removeEventListener(type, focusMappedHandler, true);\n\t\t\t\t\t}\n\t\t\t\t\tdataPriv.remove(dataHolder, delegateType);\n\t\t\t\t} else {\n\t\t\t\t\tdataPriv.set(dataHolder, delegateType, attaches);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t});\n\n\t// Create mouseenter/leave events using mouseover/out and event-time checks\n\t// so that event delegation works in jQuery.\n\t// Do the same for pointerenter/pointerleave and pointerover/pointerout\n\t//\n\t// Support: Safari 7 only\n\t// Safari sends mouseenter too often; see:\n\t// https://bugs.chromium.org/p/chromium/issues/detail?id=470258\n\t// for the description of the bug (it existed in older Chrome versions as well).\n\tjQuery.each({\n\t\tmouseenter: \"mouseover\",\n\t\tmouseleave: \"mouseout\",\n\t\tpointerenter: \"pointerover\",\n\t\tpointerleave: \"pointerout\"\n\t}, function (orig, fix) {\n\t\tjQuery.event.special[orig] = {\n\t\t\tdelegateType: fix,\n\t\t\tbindType: fix,\n\n\t\t\thandle: function (event) {\n\t\t\t\tvar ret,\n\t\t\t\t\ttarget = this,\n\t\t\t\t\trelated = event.relatedTarget,\n\t\t\t\t\thandleObj = event.handleObj;\n\n\t\t\t\t// For mouseenter/leave call the handler if related is outside the target.\n\t\t\t\t// NB: No relatedTarget if the mouse left/entered the browser window\n\t\t\t\tif (!related || (related !== target && !jQuery.contains(target, related))) {\n\t\t\t\t\tevent.type = handleObj.origType;\n\t\t\t\t\tret = handleObj.handler.apply(this, arguments);\n\t\t\t\t\tevent.type = fix;\n\t\t\t\t}\n\t\t\t\treturn ret;\n\t\t\t}\n\t\t};\n\t});\n\n\tjQuery.fn.extend({\n\n\t\ton: function (types, selector, data, fn) {\n\t\t\treturn on(this, types, selector, data, fn);\n\t\t},\n\t\tone: function (types, selector, data, fn) {\n\t\t\treturn on(this, types, selector, data, fn, 1);\n\t\t},\n\t\toff: function (types, selector, fn) {\n\t\t\tvar handleObj, type;\n\t\t\tif (types && types.preventDefault && types.handleObj) {\n\n\t\t\t\t// ( event )  dispatched jQuery.Event\n\t\t\t\thandleObj = types.handleObj;\n\t\t\t\tjQuery(types.delegateTarget).off(\n\t\t\t\t\thandleObj.namespace ?\n\t\t\t\t\t\thandleObj.origType + \".\" + handleObj.namespace :\n\t\t\t\t\t\thandleObj.origType,\n\t\t\t\t\thandleObj.selector,\n\t\t\t\t\thandleObj.handler\n\t\t\t\t);\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\tif (typeof types === \"object\") {\n\n\t\t\t\t// ( types-object [, selector] )\n\t\t\t\tfor (type in types) {\n\t\t\t\t\tthis.off(type, selector, types[type]);\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\tif (selector === false || typeof selector === \"function\") {\n\n\t\t\t\t// ( types [, fn] )\n\t\t\t\tfn = selector;\n\t\t\t\tselector = undefined;\n\t\t\t}\n\t\t\tif (fn === false) {\n\t\t\t\tfn = returnFalse;\n\t\t\t}\n\t\t\treturn this.each(function () {\n\t\t\t\tjQuery.event.remove(this, types, fn, selector);\n\t\t\t});\n\t\t}\n\t});\n\n\n\tvar\n\n\t\t// Support: IE <=10 - 11, Edge 12 - 13 only\n\t\t// In IE/Edge using regex groups here causes severe slowdowns.\n\t\t// See https://connect.microsoft.com/IE/feedback/details/1736512/\n\t\trnoInnerhtml = /<script|<style|<link/i,\n\n\t\t// checked=\"checked\" or checked\n\t\trchecked = /checked\\s*(?:[^=]|=\\s*.checked.)/i,\n\n\t\trcleanScript = /^\\s*<!\\[CDATA\\[|\\]\\]>\\s*$/g;\n\n\t// Prefer a tbody over its parent table for containing new rows\n\tfunction manipulationTarget(elem, content) {\n\t\tif (nodeName(elem, \"table\") &&\n\t\t\tnodeName(content.nodeType !== 11 ? content : content.firstChild, \"tr\")) {\n\n\t\t\treturn jQuery(elem).children(\"tbody\")[0] || elem;\n\t\t}\n\n\t\treturn elem;\n\t}\n\n\t// Replace/restore the type attribute of script elements for safe DOM manipulation\n\tfunction disableScript(elem) {\n\t\telem.type = (elem.getAttribute(\"type\") !== null) + \"/\" + elem.type;\n\t\treturn elem;\n\t}\n\tfunction restoreScript(elem) {\n\t\tif ((elem.type || \"\").slice(0, 5) === \"true/\") {\n\t\t\telem.type = elem.type.slice(5);\n\t\t} else {\n\t\t\telem.removeAttribute(\"type\");\n\t\t}\n\n\t\treturn elem;\n\t}\n\n\tfunction cloneCopyEvent(src, dest) {\n\t\tvar i, l, type, pdataOld, udataOld, udataCur, events;\n\n\t\tif (dest.nodeType !== 1) {\n\t\t\treturn;\n\t\t}\n\n\t\t// 1. Copy private data: events, handlers, etc.\n\t\tif (dataPriv.hasData(src)) {\n\t\t\tpdataOld = dataPriv.get(src);\n\t\t\tevents = pdataOld.events;\n\n\t\t\tif (events) {\n\t\t\t\tdataPriv.remove(dest, \"handle events\");\n\n\t\t\t\tfor (type in events) {\n\t\t\t\t\tfor (i = 0, l = events[type].length; i < l; i++) {\n\t\t\t\t\t\tjQuery.event.add(dest, type, events[type][i]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// 2. Copy user data\n\t\tif (dataUser.hasData(src)) {\n\t\t\tudataOld = dataUser.access(src);\n\t\t\tudataCur = jQuery.extend({}, udataOld);\n\n\t\t\tdataUser.set(dest, udataCur);\n\t\t}\n\t}\n\n\t// Fix IE bugs, see support tests\n\tfunction fixInput(src, dest) {\n\t\tvar nodeName = dest.nodeName.toLowerCase();\n\n\t\t// Fails to persist the checked state of a cloned checkbox or radio button.\n\t\tif (nodeName === \"input\" && rcheckableType.test(src.type)) {\n\t\t\tdest.checked = src.checked;\n\n\t\t\t// Fails to return the selected option to the default selected state when cloning options\n\t\t} else if (nodeName === \"input\" || nodeName === \"textarea\") {\n\t\t\tdest.defaultValue = src.defaultValue;\n\t\t}\n\t}\n\n\tfunction domManip(collection, args, callback, ignored) {\n\n\t\t// Flatten any nested arrays\n\t\targs = flat(args);\n\n\t\tvar fragment, first, scripts, hasScripts, node, doc,\n\t\t\ti = 0,\n\t\t\tl = collection.length,\n\t\t\tiNoClone = l - 1,\n\t\t\tvalue = args[0],\n\t\t\tvalueIsFunction = isFunction(value);\n\n\t\t// We can't cloneNode fragments that contain checked, in WebKit\n\t\tif (valueIsFunction ||\n\t\t\t(l > 1 && typeof value === \"string\" &&\n\t\t\t\t!support.checkClone && rchecked.test(value))) {\n\t\t\treturn collection.each(function (index) {\n\t\t\t\tvar self = collection.eq(index);\n\t\t\t\tif (valueIsFunction) {\n\t\t\t\t\targs[0] = value.call(this, index, self.html());\n\t\t\t\t}\n\t\t\t\tdomManip(self, args, callback, ignored);\n\t\t\t});\n\t\t}\n\n\t\tif (l) {\n\t\t\tfragment = buildFragment(args, collection[0].ownerDocument, false, collection, ignored);\n\t\t\tfirst = fragment.firstChild;\n\n\t\t\tif (fragment.childNodes.length === 1) {\n\t\t\t\tfragment = first;\n\t\t\t}\n\n\t\t\t// Require either new content or an interest in ignored elements to invoke the callback\n\t\t\tif (first || ignored) {\n\t\t\t\tscripts = jQuery.map(getAll(fragment, \"script\"), disableScript);\n\t\t\t\thasScripts = scripts.length;\n\n\t\t\t\t// Use the original fragment for the last item\n\t\t\t\t// instead of the first because it can end up\n\t\t\t\t// being emptied incorrectly in certain situations (trac-8070).\n\t\t\t\tfor (; i < l; i++) {\n\t\t\t\t\tnode = fragment;\n\n\t\t\t\t\tif (i !== iNoClone) {\n\t\t\t\t\t\tnode = jQuery.clone(node, true, true);\n\n\t\t\t\t\t\t// Keep references to cloned scripts for later restoration\n\t\t\t\t\t\tif (hasScripts) {\n\n\t\t\t\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\t\t\t\tjQuery.merge(scripts, getAll(node, \"script\"));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tcallback.call(collection[i], node, i);\n\t\t\t\t}\n\n\t\t\t\tif (hasScripts) {\n\t\t\t\t\tdoc = scripts[scripts.length - 1].ownerDocument;\n\n\t\t\t\t\t// Reenable scripts\n\t\t\t\t\tjQuery.map(scripts, restoreScript);\n\n\t\t\t\t\t// Evaluate executable scripts on first document insertion\n\t\t\t\t\tfor (i = 0; i < hasScripts; i++) {\n\t\t\t\t\t\tnode = scripts[i];\n\t\t\t\t\t\tif (rscriptType.test(node.type || \"\") &&\n\t\t\t\t\t\t\t!dataPriv.access(node, \"globalEval\") &&\n\t\t\t\t\t\t\tjQuery.contains(doc, node)) {\n\n\t\t\t\t\t\t\tif (node.src && (node.type || \"\").toLowerCase() !== \"module\") {\n\n\t\t\t\t\t\t\t\t// Optional AJAX dependency, but won't run scripts if not present\n\t\t\t\t\t\t\t\tif (jQuery._evalUrl && !node.noModule) {\n\t\t\t\t\t\t\t\t\tjQuery._evalUrl(node.src, {\n\t\t\t\t\t\t\t\t\t\tnonce: node.nonce || node.getAttribute(\"nonce\")\n\t\t\t\t\t\t\t\t\t}, doc);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t// Unwrap a CDATA section containing script contents. This shouldn't be\n\t\t\t\t\t\t\t\t// needed as in XML documents they're already not visible when\n\t\t\t\t\t\t\t\t// inspecting element contents and in HTML documents they have no\n\t\t\t\t\t\t\t\t// meaning but we're preserving that logic for backwards compatibility.\n\t\t\t\t\t\t\t\t// This will be removed completely in 4.0. See gh-4904.\n\t\t\t\t\t\t\t\tDOMEval(node.textContent.replace(rcleanScript, \"\"), node, doc);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn collection;\n\t}\n\n\tfunction remove(elem, selector, keepData) {\n\t\tvar node,\n\t\t\tnodes = selector ? jQuery.filter(selector, elem) : elem,\n\t\t\ti = 0;\n\n\t\tfor (; (node = nodes[i]) != null; i++) {\n\t\t\tif (!keepData && node.nodeType === 1) {\n\t\t\t\tjQuery.cleanData(getAll(node));\n\t\t\t}\n\n\t\t\tif (node.parentNode) {\n\t\t\t\tif (keepData && isAttached(node)) {\n\t\t\t\t\tsetGlobalEval(getAll(node, \"script\"));\n\t\t\t\t}\n\t\t\t\tnode.parentNode.removeChild(node);\n\t\t\t}\n\t\t}\n\n\t\treturn elem;\n\t}\n\n\tjQuery.extend({\n\t\thtmlPrefilter: function (html) {\n\t\t\treturn html;\n\t\t},\n\n\t\tclone: function (elem, dataAndEvents, deepDataAndEvents) {\n\t\t\tvar i, l, srcElements, destElements,\n\t\t\t\tclone = elem.cloneNode(true),\n\t\t\t\tinPage = isAttached(elem);\n\n\t\t\t// Fix IE cloning issues\n\t\t\tif (!support.noCloneChecked && (elem.nodeType === 1 || elem.nodeType === 11) &&\n\t\t\t\t!jQuery.isXMLDoc(elem)) {\n\n\t\t\t\t// We eschew jQuery#find here for performance reasons:\n\t\t\t\t// https://jsperf.com/getall-vs-sizzle/2\n\t\t\t\tdestElements = getAll(clone);\n\t\t\t\tsrcElements = getAll(elem);\n\n\t\t\t\tfor (i = 0, l = srcElements.length; i < l; i++) {\n\t\t\t\t\tfixInput(srcElements[i], destElements[i]);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Copy the events from the original to the clone\n\t\t\tif (dataAndEvents) {\n\t\t\t\tif (deepDataAndEvents) {\n\t\t\t\t\tsrcElements = srcElements || getAll(elem);\n\t\t\t\t\tdestElements = destElements || getAll(clone);\n\n\t\t\t\t\tfor (i = 0, l = srcElements.length; i < l; i++) {\n\t\t\t\t\t\tcloneCopyEvent(srcElements[i], destElements[i]);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tcloneCopyEvent(elem, clone);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Preserve script evaluation history\n\t\t\tdestElements = getAll(clone, \"script\");\n\t\t\tif (destElements.length > 0) {\n\t\t\t\tsetGlobalEval(destElements, !inPage && getAll(elem, \"script\"));\n\t\t\t}\n\n\t\t\t// Return the cloned set\n\t\t\treturn clone;\n\t\t},\n\n\t\tcleanData: function (elems) {\n\t\t\tvar data, elem, type,\n\t\t\t\tspecial = jQuery.event.special,\n\t\t\t\ti = 0;\n\n\t\t\tfor (; (elem = elems[i]) !== undefined; i++) {\n\t\t\t\tif (acceptData(elem)) {\n\t\t\t\t\tif ((data = elem[dataPriv.expando])) {\n\t\t\t\t\t\tif (data.events) {\n\t\t\t\t\t\t\tfor (type in data.events) {\n\t\t\t\t\t\t\t\tif (special[type]) {\n\t\t\t\t\t\t\t\t\tjQuery.event.remove(elem, type);\n\n\t\t\t\t\t\t\t\t\t// This is a shortcut to avoid jQuery.event.remove's overhead\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tjQuery.removeEvent(elem, type, data.handle);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\t\telem[dataPriv.expando] = undefined;\n\t\t\t\t\t}\n\t\t\t\t\tif (elem[dataUser.expando]) {\n\n\t\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\t\telem[dataUser.expando] = undefined;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\n\tjQuery.fn.extend({\n\t\tdetach: function (selector) {\n\t\t\treturn remove(this, selector, true);\n\t\t},\n\n\t\tremove: function (selector) {\n\t\t\treturn remove(this, selector);\n\t\t},\n\n\t\ttext: function (value) {\n\t\t\treturn access(this, function (value) {\n\t\t\t\treturn value === undefined ?\n\t\t\t\t\tjQuery.text(this) :\n\t\t\t\t\tthis.empty().each(function () {\n\t\t\t\t\t\tif (this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9) {\n\t\t\t\t\t\t\tthis.textContent = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t}, null, value, arguments.length);\n\t\t},\n\n\t\tappend: function () {\n\t\t\treturn domManip(this, arguments, function (elem) {\n\t\t\t\tif (this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9) {\n\t\t\t\t\tvar target = manipulationTarget(this, elem);\n\t\t\t\t\ttarget.appendChild(elem);\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\tprepend: function () {\n\t\t\treturn domManip(this, arguments, function (elem) {\n\t\t\t\tif (this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9) {\n\t\t\t\t\tvar target = manipulationTarget(this, elem);\n\t\t\t\t\ttarget.insertBefore(elem, target.firstChild);\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\tbefore: function () {\n\t\t\treturn domManip(this, arguments, function (elem) {\n\t\t\t\tif (this.parentNode) {\n\t\t\t\t\tthis.parentNode.insertBefore(elem, this);\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\tafter: function () {\n\t\t\treturn domManip(this, arguments, function (elem) {\n\t\t\t\tif (this.parentNode) {\n\t\t\t\t\tthis.parentNode.insertBefore(elem, this.nextSibling);\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\tempty: function () {\n\t\t\tvar elem,\n\t\t\t\ti = 0;\n\n\t\t\tfor (; (elem = this[i]) != null; i++) {\n\t\t\t\tif (elem.nodeType === 1) {\n\n\t\t\t\t\t// Prevent memory leaks\n\t\t\t\t\tjQuery.cleanData(getAll(elem, false));\n\n\t\t\t\t\t// Remove any remaining nodes\n\t\t\t\t\telem.textContent = \"\";\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn this;\n\t\t},\n\n\t\tclone: function (dataAndEvents, deepDataAndEvents) {\n\t\t\tdataAndEvents = dataAndEvents == null ? false : dataAndEvents;\n\t\t\tdeepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;\n\n\t\t\treturn this.map(function () {\n\t\t\t\treturn jQuery.clone(this, dataAndEvents, deepDataAndEvents);\n\t\t\t});\n\t\t},\n\n\t\thtml: function (value) {\n\t\t\treturn access(this, function (value) {\n\t\t\t\tvar elem = this[0] || {},\n\t\t\t\t\ti = 0,\n\t\t\t\t\tl = this.length;\n\n\t\t\t\tif (value === undefined && elem.nodeType === 1) {\n\t\t\t\t\treturn elem.innerHTML;\n\t\t\t\t}\n\n\t\t\t\t// See if we can take a shortcut and just use innerHTML\n\t\t\t\tif (typeof value === \"string\" && !rnoInnerhtml.test(value) &&\n\t\t\t\t\t!wrapMap[(rtagName.exec(value) || [\"\", \"\"])[1].toLowerCase()]) {\n\n\t\t\t\t\tvalue = jQuery.htmlPrefilter(value);\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tfor (; i < l; i++) {\n\t\t\t\t\t\t\telem = this[i] || {};\n\n\t\t\t\t\t\t\t// Remove element nodes and prevent memory leaks\n\t\t\t\t\t\t\tif (elem.nodeType === 1) {\n\t\t\t\t\t\t\t\tjQuery.cleanData(getAll(elem, false));\n\t\t\t\t\t\t\t\telem.innerHTML = value;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\telem = 0;\n\n\t\t\t\t\t\t// If using innerHTML throws an exception, use the fallback method\n\t\t\t\t\t} catch (e) { }\n\t\t\t\t}\n\n\t\t\t\tif (elem) {\n\t\t\t\t\tthis.empty().append(value);\n\t\t\t\t}\n\t\t\t}, null, value, arguments.length);\n\t\t},\n\n\t\treplaceWith: function () {\n\t\t\tvar ignored = [];\n\n\t\t\t// Make the changes, replacing each non-ignored context element with the new content\n\t\t\treturn domManip(this, arguments, function (elem) {\n\t\t\t\tvar parent = this.parentNode;\n\n\t\t\t\tif (jQuery.inArray(this, ignored) < 0) {\n\t\t\t\t\tjQuery.cleanData(getAll(this));\n\t\t\t\t\tif (parent) {\n\t\t\t\t\t\tparent.replaceChild(elem, this);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Force callback invocation\n\t\t\t}, ignored);\n\t\t}\n\t});\n\n\tjQuery.each({\n\t\tappendTo: \"append\",\n\t\tprependTo: \"prepend\",\n\t\tinsertBefore: \"before\",\n\t\tinsertAfter: \"after\",\n\t\treplaceAll: \"replaceWith\"\n\t}, function (name, original) {\n\t\tjQuery.fn[name] = function (selector) {\n\t\t\tvar elems,\n\t\t\t\tret = [],\n\t\t\t\tinsert = jQuery(selector),\n\t\t\t\tlast = insert.length - 1,\n\t\t\t\ti = 0;\n\n\t\t\tfor (; i <= last; i++) {\n\t\t\t\telems = i === last ? this : this.clone(true);\n\t\t\t\tjQuery(insert[i])[original](elems);\n\n\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t// .get() because push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\tpush.apply(ret, elems.get());\n\t\t\t}\n\n\t\t\treturn this.pushStack(ret);\n\t\t};\n\t});\n\tvar rnumnonpx = new RegExp(\"^(\" + pnum + \")(?!px)[a-z%]+$\", \"i\");\n\n\tvar rcustomProp = /^--/;\n\n\n\tvar getStyles = function (elem) {\n\n\t\t// Support: IE <=11 only, Firefox <=30 (trac-15098, trac-14150)\n\t\t// IE throws on elements created in popups\n\t\t// FF meanwhile throws on frame elements through \"defaultView.getComputedStyle\"\n\t\tvar view = elem.ownerDocument.defaultView;\n\n\t\tif (!view || !view.opener) {\n\t\t\tview = window;\n\t\t}\n\n\t\treturn view.getComputedStyle(elem);\n\t};\n\n\tvar swap = function (elem, options, callback) {\n\t\tvar ret, name,\n\t\t\told = {};\n\n\t\t// Remember the old values, and insert the new ones\n\t\tfor (name in options) {\n\t\t\told[name] = elem.style[name];\n\t\t\telem.style[name] = options[name];\n\t\t}\n\n\t\tret = callback.call(elem);\n\n\t\t// Revert the old values\n\t\tfor (name in options) {\n\t\t\telem.style[name] = old[name];\n\t\t}\n\n\t\treturn ret;\n\t};\n\n\n\tvar rboxStyle = new RegExp(cssExpand.join(\"|\"), \"i\");\n\n\n\n\t(function () {\n\n\t\t// Executing both pixelPosition & boxSizingReliable tests require only one layout\n\t\t// so they're executed at the same time to save the second computation.\n\t\tfunction computeStyleTests() {\n\n\t\t\t// This is a singleton, we need to execute it only once\n\t\t\tif (!div) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tcontainer.style.cssText = \"position:absolute;left:-11111px;width:60px;\" +\n\t\t\t\t\"margin-top:1px;padding:0;border:0\";\n\t\t\tdiv.style.cssText =\n\t\t\t\t\"position:relative;display:block;box-sizing:border-box;overflow:scroll;\" +\n\t\t\t\t\"margin:auto;border:1px;padding:1px;\" +\n\t\t\t\t\"width:60%;top:1%\";\n\t\t\tdocumentElement.appendChild(container).appendChild(div);\n\n\t\t\tvar divStyle = window.getComputedStyle(div);\n\t\t\tpixelPositionVal = divStyle.top !== \"1%\";\n\n\t\t\t// Support: Android 4.0 - 4.3 only, Firefox <=3 - 44\n\t\t\treliableMarginLeftVal = roundPixelMeasures(divStyle.marginLeft) === 12;\n\n\t\t\t// Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3\n\t\t\t// Some styles come back with percentage values, even though they shouldn't\n\t\t\tdiv.style.right = \"60%\";\n\t\t\tpixelBoxStylesVal = roundPixelMeasures(divStyle.right) === 36;\n\n\t\t\t// Support: IE 9 - 11 only\n\t\t\t// Detect misreporting of content dimensions for box-sizing:border-box elements\n\t\t\tboxSizingReliableVal = roundPixelMeasures(divStyle.width) === 36;\n\n\t\t\t// Support: IE 9 only\n\t\t\t// Detect overflow:scroll screwiness (gh-3699)\n\t\t\t// Support: Chrome <=64\n\t\t\t// Don't get tricked when zoom affects offsetWidth (gh-4029)\n\t\t\tdiv.style.position = \"absolute\";\n\t\t\tscrollboxSizeVal = roundPixelMeasures(div.offsetWidth / 3) === 12;\n\n\t\t\tdocumentElement.removeChild(container);\n\n\t\t\t// Nullify the div so it wouldn't be stored in the memory and\n\t\t\t// it will also be a sign that checks already performed\n\t\t\tdiv = null;\n\t\t}\n\n\t\tfunction roundPixelMeasures(measure) {\n\t\t\treturn Math.round(parseFloat(measure));\n\t\t}\n\n\t\tvar pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal,\n\t\t\treliableTrDimensionsVal, reliableMarginLeftVal,\n\t\t\tcontainer = document.createElement(\"div\"),\n\t\t\tdiv = document.createElement(\"div\");\n\n\t\t// Finish early in limited (non-browser) environments\n\t\tif (!div.style) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Support: IE <=9 - 11 only\n\t\t// Style of cloned element affects source element cloned (trac-8908)\n\t\tdiv.style.backgroundClip = \"content-box\";\n\t\tdiv.cloneNode(true).style.backgroundClip = \"\";\n\t\tsupport.clearCloneStyle = div.style.backgroundClip === \"content-box\";\n\n\t\tjQuery.extend(support, {\n\t\t\tboxSizingReliable: function () {\n\t\t\t\tcomputeStyleTests();\n\t\t\t\treturn boxSizingReliableVal;\n\t\t\t},\n\t\t\tpixelBoxStyles: function () {\n\t\t\t\tcomputeStyleTests();\n\t\t\t\treturn pixelBoxStylesVal;\n\t\t\t},\n\t\t\tpixelPosition: function () {\n\t\t\t\tcomputeStyleTests();\n\t\t\t\treturn pixelPositionVal;\n\t\t\t},\n\t\t\treliableMarginLeft: function () {\n\t\t\t\tcomputeStyleTests();\n\t\t\t\treturn reliableMarginLeftVal;\n\t\t\t},\n\t\t\tscrollboxSize: function () {\n\t\t\t\tcomputeStyleTests();\n\t\t\t\treturn scrollboxSizeVal;\n\t\t\t},\n\n\t\t\t// Support: IE 9 - 11+, Edge 15 - 18+\n\t\t\t// IE/Edge misreport `getComputedStyle` of table rows with width/height\n\t\t\t// set in CSS while `offset*` properties report correct values.\n\t\t\t// Behavior in IE 9 is more subtle than in newer versions & it passes\n\t\t\t// some versions of this test; make sure not to make it pass there!\n\t\t\t//\n\t\t\t// Support: Firefox 70+\n\t\t\t// Only Firefox includes border widths\n\t\t\t// in computed dimensions. (gh-4529)\n\t\t\treliableTrDimensions: function () {\n\t\t\t\tvar table, tr, trChild, trStyle;\n\t\t\t\tif (reliableTrDimensionsVal == null) {\n\t\t\t\t\ttable = document.createElement(\"table\");\n\t\t\t\t\ttr = document.createElement(\"tr\");\n\t\t\t\t\ttrChild = document.createElement(\"div\");\n\n\t\t\t\t\ttable.style.cssText = \"position:absolute;left:-11111px;border-collapse:separate\";\n\t\t\t\t\ttr.style.cssText = \"border:1px solid\";\n\n\t\t\t\t\t// Support: Chrome 86+\n\t\t\t\t\t// Height set through cssText does not get applied.\n\t\t\t\t\t// Computed height then comes back as 0.\n\t\t\t\t\ttr.style.height = \"1px\";\n\t\t\t\t\ttrChild.style.height = \"9px\";\n\n\t\t\t\t\t// Support: Android 8 Chrome 86+\n\t\t\t\t\t// In our bodyBackground.html iframe,\n\t\t\t\t\t// display for all div elements is set to \"inline\",\n\t\t\t\t\t// which causes a problem only in Android 8 Chrome 86.\n\t\t\t\t\t// Ensuring the div is display: block\n\t\t\t\t\t// gets around this issue.\n\t\t\t\t\ttrChild.style.display = \"block\";\n\n\t\t\t\t\tdocumentElement\n\t\t\t\t\t\t.appendChild(table)\n\t\t\t\t\t\t.appendChild(tr)\n\t\t\t\t\t\t.appendChild(trChild);\n\n\t\t\t\t\ttrStyle = window.getComputedStyle(tr);\n\t\t\t\t\treliableTrDimensionsVal = (parseInt(trStyle.height, 10) +\n\t\t\t\t\t\tparseInt(trStyle.borderTopWidth, 10) +\n\t\t\t\t\t\tparseInt(trStyle.borderBottomWidth, 10)) === tr.offsetHeight;\n\n\t\t\t\t\tdocumentElement.removeChild(table);\n\t\t\t\t}\n\t\t\t\treturn reliableTrDimensionsVal;\n\t\t\t}\n\t\t});\n\t})();\n\n\n\tfunction curCSS(elem, name, computed) {\n\t\tvar width, minWidth, maxWidth, ret,\n\t\t\tisCustomProp = rcustomProp.test(name),\n\n\t\t\t// Support: Firefox 51+\n\t\t\t// Retrieving style before computed somehow\n\t\t\t// fixes an issue with getting wrong values\n\t\t\t// on detached elements\n\t\t\tstyle = elem.style;\n\n\t\tcomputed = computed || getStyles(elem);\n\n\t\t// getPropertyValue is needed for:\n\t\t//   .css('filter') (IE 9 only, trac-12537)\n\t\t//   .css('--customProperty) (gh-3144)\n\t\tif (computed) {\n\n\t\t\t// Support: IE <=9 - 11+\n\t\t\t// IE only supports `\"float\"` in `getPropertyValue`; in computed styles\n\t\t\t// it's only available as `\"cssFloat\"`. We no longer modify properties\n\t\t\t// sent to `.css()` apart from camelCasing, so we need to check both.\n\t\t\t// Normally, this would create difference in behavior: if\n\t\t\t// `getPropertyValue` returns an empty string, the value returned\n\t\t\t// by `.css()` would be `undefined`. This is usually the case for\n\t\t\t// disconnected elements. However, in IE even disconnected elements\n\t\t\t// with no styles return `\"none\"` for `getPropertyValue( \"float\" )`\n\t\t\tret = computed.getPropertyValue(name) || computed[name];\n\n\t\t\tif (isCustomProp && ret) {\n\n\t\t\t\t// Support: Firefox 105+, Chrome <=105+\n\t\t\t\t// Spec requires trimming whitespace for custom properties (gh-4926).\n\t\t\t\t// Firefox only trims leading whitespace. Chrome just collapses\n\t\t\t\t// both leading & trailing whitespace to a single space.\n\t\t\t\t//\n\t\t\t\t// Fall back to `undefined` if empty string returned.\n\t\t\t\t// This collapses a missing definition with property defined\n\t\t\t\t// and set to an empty string but there's no standard API\n\t\t\t\t// allowing us to differentiate them without a performance penalty\n\t\t\t\t// and returning `undefined` aligns with older jQuery.\n\t\t\t\t//\n\t\t\t\t// rtrimCSS treats U+000D CARRIAGE RETURN and U+000C FORM FEED\n\t\t\t\t// as whitespace while CSS does not, but this is not a problem\n\t\t\t\t// because CSS preprocessing replaces them with U+000A LINE FEED\n\t\t\t\t// (which *is* CSS whitespace)\n\t\t\t\t// https://www.w3.org/TR/css-syntax-3/#input-preprocessing\n\t\t\t\tret = ret.replace(rtrimCSS, \"$1\") || undefined;\n\t\t\t}\n\n\t\t\tif (ret === \"\" && !isAttached(elem)) {\n\t\t\t\tret = jQuery.style(elem, name);\n\t\t\t}\n\n\t\t\t// A tribute to the \"awesome hack by Dean Edwards\"\n\t\t\t// Android Browser returns percentage for some values,\n\t\t\t// but width seems to be reliably pixels.\n\t\t\t// This is against the CSSOM draft spec:\n\t\t\t// https://drafts.csswg.org/cssom/#resolved-values\n\t\t\tif (!support.pixelBoxStyles() && rnumnonpx.test(ret) && rboxStyle.test(name)) {\n\n\t\t\t\t// Remember the original values\n\t\t\t\twidth = style.width;\n\t\t\t\tminWidth = style.minWidth;\n\t\t\t\tmaxWidth = style.maxWidth;\n\n\t\t\t\t// Put in the new values to get a computed value out\n\t\t\t\tstyle.minWidth = style.maxWidth = style.width = ret;\n\t\t\t\tret = computed.width;\n\n\t\t\t\t// Revert the changed values\n\t\t\t\tstyle.width = width;\n\t\t\t\tstyle.minWidth = minWidth;\n\t\t\t\tstyle.maxWidth = maxWidth;\n\t\t\t}\n\t\t}\n\n\t\treturn ret !== undefined ?\n\n\t\t\t// Support: IE <=9 - 11 only\n\t\t\t// IE returns zIndex value as an integer.\n\t\t\tret + \"\" :\n\t\t\tret;\n\t}\n\n\n\tfunction addGetHookIf(conditionFn, hookFn) {\n\n\t\t// Define the hook, we'll check on the first run if it's really needed.\n\t\treturn {\n\t\t\tget: function () {\n\t\t\t\tif (conditionFn()) {\n\n\t\t\t\t\t// Hook not needed (or it's not possible to use it due\n\t\t\t\t\t// to missing dependency), remove it.\n\t\t\t\t\tdelete this.get;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Hook needed; redefine it so that the support test is not executed again.\n\t\t\t\treturn (this.get = hookFn).apply(this, arguments);\n\t\t\t}\n\t\t};\n\t}\n\n\n\tvar cssPrefixes = [\"Webkit\", \"Moz\", \"ms\"],\n\t\temptyStyle = document.createElement(\"div\").style,\n\t\tvendorProps = {};\n\n\t// Return a vendor-prefixed property or undefined\n\tfunction vendorPropName(name) {\n\n\t\t// Check for vendor prefixed names\n\t\tvar capName = name[0].toUpperCase() + name.slice(1),\n\t\t\ti = cssPrefixes.length;\n\n\t\twhile (i--) {\n\t\t\tname = cssPrefixes[i] + capName;\n\t\t\tif (name in emptyStyle) {\n\t\t\t\treturn name;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return a potentially-mapped jQuery.cssProps or vendor prefixed property\n\tfunction finalPropName(name) {\n\t\tvar final = jQuery.cssProps[name] || vendorProps[name];\n\n\t\tif (final) {\n\t\t\treturn final;\n\t\t}\n\t\tif (name in emptyStyle) {\n\t\t\treturn name;\n\t\t}\n\t\treturn vendorProps[name] = vendorPropName(name) || name;\n\t}\n\n\n\tvar\n\n\t\t// Swappable if display is none or starts with table\n\t\t// except \"table\", \"table-cell\", or \"table-caption\"\n\t\t// See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display\n\t\trdisplayswap = /^(none|table(?!-c[ea]).+)/,\n\t\tcssShow = { position: \"absolute\", visibility: \"hidden\", display: \"block\" },\n\t\tcssNormalTransform = {\n\t\t\tletterSpacing: \"0\",\n\t\t\tfontWeight: \"400\"\n\t\t};\n\n\tfunction setPositiveNumber(_elem, value, subtract) {\n\n\t\t// Any relative (+/-) values have already been\n\t\t// normalized at this point\n\t\tvar matches = rcssNum.exec(value);\n\t\treturn matches ?\n\n\t\t\t// Guard against undefined \"subtract\", e.g., when used as in cssHooks\n\t\t\tMath.max(0, matches[2] - (subtract || 0)) + (matches[3] || \"px\") :\n\t\t\tvalue;\n\t}\n\n\tfunction boxModelAdjustment(elem, dimension, box, isBorderBox, styles, computedVal) {\n\t\tvar i = dimension === \"width\" ? 1 : 0,\n\t\t\textra = 0,\n\t\t\tdelta = 0,\n\t\t\tmarginDelta = 0;\n\n\t\t// Adjustment may not be necessary\n\t\tif (box === (isBorderBox ? \"border\" : \"content\")) {\n\t\t\treturn 0;\n\t\t}\n\n\t\tfor (; i < 4; i += 2) {\n\n\t\t\t// Both box models exclude margin\n\t\t\t// Count margin delta separately to only add it after scroll gutter adjustment.\n\t\t\t// This is needed to make negative margins work with `outerHeight( true )` (gh-3982).\n\t\t\tif (box === \"margin\") {\n\t\t\t\tmarginDelta += jQuery.css(elem, box + cssExpand[i], true, styles);\n\t\t\t}\n\n\t\t\t// If we get here with a content-box, we're seeking \"padding\" or \"border\" or \"margin\"\n\t\t\tif (!isBorderBox) {\n\n\t\t\t\t// Add padding\n\t\t\t\tdelta += jQuery.css(elem, \"padding\" + cssExpand[i], true, styles);\n\n\t\t\t\t// For \"border\" or \"margin\", add border\n\t\t\t\tif (box !== \"padding\") {\n\t\t\t\t\tdelta += jQuery.css(elem, \"border\" + cssExpand[i] + \"Width\", true, styles);\n\n\t\t\t\t\t// But still keep track of it otherwise\n\t\t\t\t} else {\n\t\t\t\t\textra += jQuery.css(elem, \"border\" + cssExpand[i] + \"Width\", true, styles);\n\t\t\t\t}\n\n\t\t\t\t// If we get here with a border-box (content + padding + border), we're seeking \"content\" or\n\t\t\t\t// \"padding\" or \"margin\"\n\t\t\t} else {\n\n\t\t\t\t// For \"content\", subtract padding\n\t\t\t\tif (box === \"content\") {\n\t\t\t\t\tdelta -= jQuery.css(elem, \"padding\" + cssExpand[i], true, styles);\n\t\t\t\t}\n\n\t\t\t\t// For \"content\" or \"padding\", subtract border\n\t\t\t\tif (box !== \"margin\") {\n\t\t\t\t\tdelta -= jQuery.css(elem, \"border\" + cssExpand[i] + \"Width\", true, styles);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Account for positive content-box scroll gutter when requested by providing computedVal\n\t\tif (!isBorderBox && computedVal >= 0) {\n\n\t\t\t// offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border\n\t\t\t// Assuming integer scroll gutter, subtract the rest and round down\n\t\t\tdelta += Math.max(0, Math.ceil(\n\t\t\t\telem[\"offset\" + dimension[0].toUpperCase() + dimension.slice(1)] -\n\t\t\t\tcomputedVal -\n\t\t\t\tdelta -\n\t\t\t\textra -\n\t\t\t\t0.5\n\n\t\t\t\t// If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter\n\t\t\t\t// Use an explicit zero to avoid NaN (gh-3964)\n\t\t\t)) || 0;\n\t\t}\n\n\t\treturn delta + marginDelta;\n\t}\n\n\tfunction getWidthOrHeight(elem, dimension, extra) {\n\n\t\t// Start with computed style\n\t\tvar styles = getStyles(elem),\n\n\t\t\t// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322).\n\t\t\t// Fake content-box until we know it's needed to know the true value.\n\t\t\tboxSizingNeeded = !support.boxSizingReliable() || extra,\n\t\t\tisBorderBox = boxSizingNeeded &&\n\t\t\t\tjQuery.css(elem, \"boxSizing\", false, styles) === \"border-box\",\n\t\t\tvalueIsBorderBox = isBorderBox,\n\n\t\t\tval = curCSS(elem, dimension, styles),\n\t\t\toffsetProp = \"offset\" + dimension[0].toUpperCase() + dimension.slice(1);\n\n\t\t// Support: Firefox <=54\n\t\t// Return a confounding non-pixel value or feign ignorance, as appropriate.\n\t\tif (rnumnonpx.test(val)) {\n\t\t\tif (!extra) {\n\t\t\t\treturn val;\n\t\t\t}\n\t\t\tval = \"auto\";\n\t\t}\n\n\n\t\t// Support: IE 9 - 11 only\n\t\t// Use offsetWidth/offsetHeight for when box sizing is unreliable.\n\t\t// In those cases, the computed value can be trusted to be border-box.\n\t\tif ((!support.boxSizingReliable() && isBorderBox ||\n\n\t\t\t// Support: IE 10 - 11+, Edge 15 - 18+\n\t\t\t// IE/Edge misreport `getComputedStyle` of table rows with width/height\n\t\t\t// set in CSS while `offset*` properties report correct values.\n\t\t\t// Interestingly, in some cases IE 9 doesn't suffer from this issue.\n\t\t\t!support.reliableTrDimensions() && nodeName(elem, \"tr\") ||\n\n\t\t\t// Fall back to offsetWidth/offsetHeight when value is \"auto\"\n\t\t\t// This happens for inline elements with no explicit setting (gh-3571)\n\t\t\tval === \"auto\" ||\n\n\t\t\t// Support: Android <=4.1 - 4.3 only\n\t\t\t// Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602)\n\t\t\t!parseFloat(val) && jQuery.css(elem, \"display\", false, styles) === \"inline\") &&\n\n\t\t\t// Make sure the element is visible & connected\n\t\t\telem.getClientRects().length) {\n\n\t\t\tisBorderBox = jQuery.css(elem, \"boxSizing\", false, styles) === \"border-box\";\n\n\t\t\t// Where available, offsetWidth/offsetHeight approximate border box dimensions.\n\t\t\t// Where not available (e.g., SVG), assume unreliable box-sizing and interpret the\n\t\t\t// retrieved value as a content box dimension.\n\t\t\tvalueIsBorderBox = offsetProp in elem;\n\t\t\tif (valueIsBorderBox) {\n\t\t\t\tval = elem[offsetProp];\n\t\t\t}\n\t\t}\n\n\t\t// Normalize \"\" and auto\n\t\tval = parseFloat(val) || 0;\n\n\t\t// Adjust for the element's box model\n\t\treturn (val +\n\t\t\tboxModelAdjustment(\n\t\t\t\telem,\n\t\t\t\tdimension,\n\t\t\t\textra || (isBorderBox ? \"border\" : \"content\"),\n\t\t\t\tvalueIsBorderBox,\n\t\t\t\tstyles,\n\n\t\t\t\t// Provide the current computed size to request scroll gutter calculation (gh-3589)\n\t\t\t\tval\n\t\t\t)\n\t\t) + \"px\";\n\t}\n\n\tjQuery.extend({\n\n\t\t// Add in style property hooks for overriding the default\n\t\t// behavior of getting and setting a style property\n\t\tcssHooks: {\n\t\t\topacity: {\n\t\t\t\tget: function (elem, computed) {\n\t\t\t\t\tif (computed) {\n\n\t\t\t\t\t\t// We should always get a number back from opacity\n\t\t\t\t\t\tvar ret = curCSS(elem, \"opacity\");\n\t\t\t\t\t\treturn ret === \"\" ? \"1\" : ret;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t// Don't automatically add \"px\" to these possibly-unitless properties\n\t\tcssNumber: {\n\t\t\tanimationIterationCount: true,\n\t\t\taspectRatio: true,\n\t\t\tborderImageSlice: true,\n\t\t\tcolumnCount: true,\n\t\t\tflexGrow: true,\n\t\t\tflexShrink: true,\n\t\t\tfontWeight: true,\n\t\t\tgridArea: true,\n\t\t\tgridColumn: true,\n\t\t\tgridColumnEnd: true,\n\t\t\tgridColumnStart: true,\n\t\t\tgridRow: true,\n\t\t\tgridRowEnd: true,\n\t\t\tgridRowStart: true,\n\t\t\tlineHeight: true,\n\t\t\topacity: true,\n\t\t\torder: true,\n\t\t\torphans: true,\n\t\t\tscale: true,\n\t\t\twidows: true,\n\t\t\tzIndex: true,\n\t\t\tzoom: true,\n\n\t\t\t// SVG-related\n\t\t\tfillOpacity: true,\n\t\t\tfloodOpacity: true,\n\t\t\tstopOpacity: true,\n\t\t\tstrokeMiterlimit: true,\n\t\t\tstrokeOpacity: true\n\t\t},\n\n\t\t// Add in properties whose names you wish to fix before\n\t\t// setting or getting the value\n\t\tcssProps: {},\n\n\t\t// Get and set the style property on a DOM Node\n\t\tstyle: function (elem, name, value, extra) {\n\n\t\t\t// Don't set styles on text and comment nodes\n\t\t\tif (!elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Make sure that we're working with the right name\n\t\t\tvar ret, type, hooks,\n\t\t\t\torigName = camelCase(name),\n\t\t\t\tisCustomProp = rcustomProp.test(name),\n\t\t\t\tstyle = elem.style;\n\n\t\t\t// Make sure that we're working with the right name. We don't\n\t\t\t// want to query the value if it is a CSS custom property\n\t\t\t// since they are user-defined.\n\t\t\tif (!isCustomProp) {\n\t\t\t\tname = finalPropName(origName);\n\t\t\t}\n\n\t\t\t// Gets hook for the prefixed version, then unprefixed version\n\t\t\thooks = jQuery.cssHooks[name] || jQuery.cssHooks[origName];\n\n\t\t\t// Check if we're setting a value\n\t\t\tif (value !== undefined) {\n\t\t\t\ttype = typeof value;\n\n\t\t\t\t// Convert \"+=\" or \"-=\" to relative numbers (trac-7345)\n\t\t\t\tif (type === \"string\" && (ret = rcssNum.exec(value)) && ret[1]) {\n\t\t\t\t\tvalue = adjustCSS(elem, name, ret);\n\n\t\t\t\t\t// Fixes bug trac-9237\n\t\t\t\t\ttype = \"number\";\n\t\t\t\t}\n\n\t\t\t\t// Make sure that null and NaN values aren't set (trac-7116)\n\t\t\t\tif (value == null || value !== value) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// If a number was passed in, add the unit (except for certain CSS properties)\n\t\t\t\t// The isCustomProp check can be removed in jQuery 4.0 when we only auto-append\n\t\t\t\t// \"px\" to a few hardcoded values.\n\t\t\t\tif (type === \"number\" && !isCustomProp) {\n\t\t\t\t\tvalue += ret && ret[3] || (jQuery.cssNumber[origName] ? \"\" : \"px\");\n\t\t\t\t}\n\n\t\t\t\t// background-* props affect original clone's values\n\t\t\t\tif (!support.clearCloneStyle && value === \"\" && name.indexOf(\"background\") === 0) {\n\t\t\t\t\tstyle[name] = \"inherit\";\n\t\t\t\t}\n\n\t\t\t\t// If a hook was provided, use that value, otherwise just set the specified value\n\t\t\t\tif (!hooks || !(\"set\" in hooks) ||\n\t\t\t\t\t(value = hooks.set(elem, value, extra)) !== undefined) {\n\n\t\t\t\t\tif (isCustomProp) {\n\t\t\t\t\t\tstyle.setProperty(name, value);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tstyle[name] = value;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\t// If a hook was provided get the non-computed value from there\n\t\t\t\tif (hooks && \"get\" in hooks &&\n\t\t\t\t\t(ret = hooks.get(elem, false, extra)) !== undefined) {\n\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\n\t\t\t\t// Otherwise just get the value from the style object\n\t\t\t\treturn style[name];\n\t\t\t}\n\t\t},\n\n\t\tcss: function (elem, name, extra, styles) {\n\t\t\tvar val, num, hooks,\n\t\t\t\torigName = camelCase(name),\n\t\t\t\tisCustomProp = rcustomProp.test(name);\n\n\t\t\t// Make sure that we're working with the right name. We don't\n\t\t\t// want to modify the value if it is a CSS custom property\n\t\t\t// since they are user-defined.\n\t\t\tif (!isCustomProp) {\n\t\t\t\tname = finalPropName(origName);\n\t\t\t}\n\n\t\t\t// Try prefixed name followed by the unprefixed name\n\t\t\thooks = jQuery.cssHooks[name] || jQuery.cssHooks[origName];\n\n\t\t\t// If a hook was provided get the computed value from there\n\t\t\tif (hooks && \"get\" in hooks) {\n\t\t\t\tval = hooks.get(elem, true, extra);\n\t\t\t}\n\n\t\t\t// Otherwise, if a way to get the computed value exists, use that\n\t\t\tif (val === undefined) {\n\t\t\t\tval = curCSS(elem, name, styles);\n\t\t\t}\n\n\t\t\t// Convert \"normal\" to computed value\n\t\t\tif (val === \"normal\" && name in cssNormalTransform) {\n\t\t\t\tval = cssNormalTransform[name];\n\t\t\t}\n\n\t\t\t// Make numeric if forced or a qualifier was provided and val looks numeric\n\t\t\tif (extra === \"\" || extra) {\n\t\t\t\tnum = parseFloat(val);\n\t\t\t\treturn extra === true || isFinite(num) ? num || 0 : val;\n\t\t\t}\n\n\t\t\treturn val;\n\t\t}\n\t});\n\n\tjQuery.each([\"height\", \"width\"], function (_i, dimension) {\n\t\tjQuery.cssHooks[dimension] = {\n\t\t\tget: function (elem, computed, extra) {\n\t\t\t\tif (computed) {\n\n\t\t\t\t\t// Certain elements can have dimension info if we invisibly show them\n\t\t\t\t\t// but it must have a current display style that would benefit\n\t\t\t\t\treturn rdisplayswap.test(jQuery.css(elem, \"display\")) &&\n\n\t\t\t\t\t\t// Support: Safari 8+\n\t\t\t\t\t\t// Table columns in Safari have non-zero offsetWidth & zero\n\t\t\t\t\t\t// getBoundingClientRect().width unless display is changed.\n\t\t\t\t\t\t// Support: IE <=11 only\n\t\t\t\t\t\t// Running getBoundingClientRect on a disconnected node\n\t\t\t\t\t\t// in IE throws an error.\n\t\t\t\t\t\t(!elem.getClientRects().length || !elem.getBoundingClientRect().width) ?\n\t\t\t\t\t\tswap(elem, cssShow, function () {\n\t\t\t\t\t\t\treturn getWidthOrHeight(elem, dimension, extra);\n\t\t\t\t\t\t}) :\n\t\t\t\t\t\tgetWidthOrHeight(elem, dimension, extra);\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tset: function (elem, value, extra) {\n\t\t\t\tvar matches,\n\t\t\t\t\tstyles = getStyles(elem),\n\n\t\t\t\t\t// Only read styles.position if the test has a chance to fail\n\t\t\t\t\t// to avoid forcing a reflow.\n\t\t\t\t\tscrollboxSizeBuggy = !support.scrollboxSize() &&\n\t\t\t\t\t\tstyles.position === \"absolute\",\n\n\t\t\t\t\t// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991)\n\t\t\t\t\tboxSizingNeeded = scrollboxSizeBuggy || extra,\n\t\t\t\t\tisBorderBox = boxSizingNeeded &&\n\t\t\t\t\t\tjQuery.css(elem, \"boxSizing\", false, styles) === \"border-box\",\n\t\t\t\t\tsubtract = extra ?\n\t\t\t\t\t\tboxModelAdjustment(\n\t\t\t\t\t\t\telem,\n\t\t\t\t\t\t\tdimension,\n\t\t\t\t\t\t\textra,\n\t\t\t\t\t\t\tisBorderBox,\n\t\t\t\t\t\t\tstyles\n\t\t\t\t\t\t) :\n\t\t\t\t\t\t0;\n\n\t\t\t\t// Account for unreliable border-box dimensions by comparing offset* to computed and\n\t\t\t\t// faking a content-box to get border and padding (gh-3699)\n\t\t\t\tif (isBorderBox && scrollboxSizeBuggy) {\n\t\t\t\t\tsubtract -= Math.ceil(\n\t\t\t\t\t\telem[\"offset\" + dimension[0].toUpperCase() + dimension.slice(1)] -\n\t\t\t\t\t\tparseFloat(styles[dimension]) -\n\t\t\t\t\t\tboxModelAdjustment(elem, dimension, \"border\", false, styles) -\n\t\t\t\t\t\t0.5\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\t// Convert to pixels if value adjustment is needed\n\t\t\t\tif (subtract && (matches = rcssNum.exec(value)) &&\n\t\t\t\t\t(matches[3] || \"px\") !== \"px\") {\n\n\t\t\t\t\telem.style[dimension] = value;\n\t\t\t\t\tvalue = jQuery.css(elem, dimension);\n\t\t\t\t}\n\n\t\t\t\treturn setPositiveNumber(elem, value, subtract);\n\t\t\t}\n\t\t};\n\t});\n\n\tjQuery.cssHooks.marginLeft = addGetHookIf(support.reliableMarginLeft,\n\t\tfunction (elem, computed) {\n\t\t\tif (computed) {\n\t\t\t\treturn (parseFloat(curCSS(elem, \"marginLeft\")) ||\n\t\t\t\t\telem.getBoundingClientRect().left -\n\t\t\t\t\tswap(elem, { marginLeft: 0 }, function () {\n\t\t\t\t\t\treturn elem.getBoundingClientRect().left;\n\t\t\t\t\t})\n\t\t\t\t) + \"px\";\n\t\t\t}\n\t\t}\n\t);\n\n\t// These hooks are used by animate to expand properties\n\tjQuery.each({\n\t\tmargin: \"\",\n\t\tpadding: \"\",\n\t\tborder: \"Width\"\n\t}, function (prefix, suffix) {\n\t\tjQuery.cssHooks[prefix + suffix] = {\n\t\t\texpand: function (value) {\n\t\t\t\tvar i = 0,\n\t\t\t\t\texpanded = {},\n\n\t\t\t\t\t// Assumes a single number if not a string\n\t\t\t\t\tparts = typeof value === \"string\" ? value.split(\" \") : [value];\n\n\t\t\t\tfor (; i < 4; i++) {\n\t\t\t\t\texpanded[prefix + cssExpand[i] + suffix] =\n\t\t\t\t\t\tparts[i] || parts[i - 2] || parts[0];\n\t\t\t\t}\n\n\t\t\t\treturn expanded;\n\t\t\t}\n\t\t};\n\n\t\tif (prefix !== \"margin\") {\n\t\t\tjQuery.cssHooks[prefix + suffix].set = setPositiveNumber;\n\t\t}\n\t});\n\n\tjQuery.fn.extend({\n\t\tcss: function (name, value) {\n\t\t\treturn access(this, function (elem, name, value) {\n\t\t\t\tvar styles, len,\n\t\t\t\t\tmap = {},\n\t\t\t\t\ti = 0;\n\n\t\t\t\tif (Array.isArray(name)) {\n\t\t\t\t\tstyles = getStyles(elem);\n\t\t\t\t\tlen = name.length;\n\n\t\t\t\t\tfor (; i < len; i++) {\n\t\t\t\t\t\tmap[name[i]] = jQuery.css(elem, name[i], false, styles);\n\t\t\t\t\t}\n\n\t\t\t\t\treturn map;\n\t\t\t\t}\n\n\t\t\t\treturn value !== undefined ?\n\t\t\t\t\tjQuery.style(elem, name, value) :\n\t\t\t\t\tjQuery.css(elem, name);\n\t\t\t}, name, value, arguments.length > 1);\n\t\t}\n\t});\n\n\n\tfunction Tween(elem, options, prop, end, easing) {\n\t\treturn new Tween.prototype.init(elem, options, prop, end, easing);\n\t}\n\tjQuery.Tween = Tween;\n\n\tTween.prototype = {\n\t\tconstructor: Tween,\n\t\tinit: function (elem, options, prop, end, easing, unit) {\n\t\t\tthis.elem = elem;\n\t\t\tthis.prop = prop;\n\t\t\tthis.easing = easing || jQuery.easing._default;\n\t\t\tthis.options = options;\n\t\t\tthis.start = this.now = this.cur();\n\t\t\tthis.end = end;\n\t\t\tthis.unit = unit || (jQuery.cssNumber[prop] ? \"\" : \"px\");\n\t\t},\n\t\tcur: function () {\n\t\t\tvar hooks = Tween.propHooks[this.prop];\n\n\t\t\treturn hooks && hooks.get ?\n\t\t\t\thooks.get(this) :\n\t\t\t\tTween.propHooks._default.get(this);\n\t\t},\n\t\trun: function (percent) {\n\t\t\tvar eased,\n\t\t\t\thooks = Tween.propHooks[this.prop];\n\n\t\t\tif (this.options.duration) {\n\t\t\t\tthis.pos = eased = jQuery.easing[this.easing](\n\t\t\t\t\tpercent, this.options.duration * percent, 0, 1, this.options.duration\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tthis.pos = eased = percent;\n\t\t\t}\n\t\t\tthis.now = (this.end - this.start) * eased + this.start;\n\n\t\t\tif (this.options.step) {\n\t\t\t\tthis.options.step.call(this.elem, this.now, this);\n\t\t\t}\n\n\t\t\tif (hooks && hooks.set) {\n\t\t\t\thooks.set(this);\n\t\t\t} else {\n\t\t\t\tTween.propHooks._default.set(this);\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t};\n\n\tTween.prototype.init.prototype = Tween.prototype;\n\n\tTween.propHooks = {\n\t\t_default: {\n\t\t\tget: function (tween) {\n\t\t\t\tvar result;\n\n\t\t\t\t// Use a property on the element directly when it is not a DOM element,\n\t\t\t\t// or when there is no matching style property that exists.\n\t\t\t\tif (tween.elem.nodeType !== 1 ||\n\t\t\t\t\ttween.elem[tween.prop] != null && tween.elem.style[tween.prop] == null) {\n\t\t\t\t\treturn tween.elem[tween.prop];\n\t\t\t\t}\n\n\t\t\t\t// Passing an empty string as a 3rd parameter to .css will automatically\n\t\t\t\t// attempt a parseFloat and fallback to a string if the parse fails.\n\t\t\t\t// Simple values such as \"10px\" are parsed to Float;\n\t\t\t\t// complex values such as \"rotate(1rad)\" are returned as-is.\n\t\t\t\tresult = jQuery.css(tween.elem, tween.prop, \"\");\n\n\t\t\t\t// Empty strings, null, undefined and \"auto\" are converted to 0.\n\t\t\t\treturn !result || result === \"auto\" ? 0 : result;\n\t\t\t},\n\t\t\tset: function (tween) {\n\n\t\t\t\t// Use step hook for back compat.\n\t\t\t\t// Use cssHook if its there.\n\t\t\t\t// Use .style if available and use plain properties where available.\n\t\t\t\tif (jQuery.fx.step[tween.prop]) {\n\t\t\t\t\tjQuery.fx.step[tween.prop](tween);\n\t\t\t\t} else if (tween.elem.nodeType === 1 && (\n\t\t\t\t\tjQuery.cssHooks[tween.prop] ||\n\t\t\t\t\ttween.elem.style[finalPropName(tween.prop)] != null)) {\n\t\t\t\t\tjQuery.style(tween.elem, tween.prop, tween.now + tween.unit);\n\t\t\t\t} else {\n\t\t\t\t\ttween.elem[tween.prop] = tween.now;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t// Support: IE <=9 only\n\t// Panic based approach to setting things on disconnected nodes\n\tTween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {\n\t\tset: function (tween) {\n\t\t\tif (tween.elem.nodeType && tween.elem.parentNode) {\n\t\t\t\ttween.elem[tween.prop] = tween.now;\n\t\t\t}\n\t\t}\n\t};\n\n\tjQuery.easing = {\n\t\tlinear: function (p) {\n\t\t\treturn p;\n\t\t},\n\t\tswing: function (p) {\n\t\t\treturn 0.5 - Math.cos(p * Math.PI) / 2;\n\t\t},\n\t\t_default: \"swing\"\n\t};\n\n\tjQuery.fx = Tween.prototype.init;\n\n\t// Back compat <1.8 extension point\n\tjQuery.fx.step = {};\n\n\n\n\n\tvar\n\t\tfxNow, inProgress,\n\t\trfxtypes = /^(?:toggle|show|hide)$/,\n\t\trrun = /queueHooks$/;\n\n\tfunction schedule() {\n\t\tif (inProgress) {\n\t\t\tif (document.hidden === false && window.requestAnimationFrame) {\n\t\t\t\twindow.requestAnimationFrame(schedule);\n\t\t\t} else {\n\t\t\t\twindow.setTimeout(schedule, jQuery.fx.interval);\n\t\t\t}\n\n\t\t\tjQuery.fx.tick();\n\t\t}\n\t}\n\n\t// Animations created synchronously will run synchronously\n\tfunction createFxNow() {\n\t\twindow.setTimeout(function () {\n\t\t\tfxNow = undefined;\n\t\t});\n\t\treturn (fxNow = Date.now());\n\t}\n\n\t// Generate parameters to create a standard animation\n\tfunction genFx(type, includeWidth) {\n\t\tvar which,\n\t\t\ti = 0,\n\t\t\tattrs = { height: type };\n\n\t\t// If we include width, step value is 1 to do all cssExpand values,\n\t\t// otherwise step value is 2 to skip over Left and Right\n\t\tincludeWidth = includeWidth ? 1 : 0;\n\t\tfor (; i < 4; i += 2 - includeWidth) {\n\t\t\twhich = cssExpand[i];\n\t\t\tattrs[\"margin\" + which] = attrs[\"padding\" + which] = type;\n\t\t}\n\n\t\tif (includeWidth) {\n\t\t\tattrs.opacity = attrs.width = type;\n\t\t}\n\n\t\treturn attrs;\n\t}\n\n\tfunction createTween(value, prop, animation) {\n\t\tvar tween,\n\t\t\tcollection = (Animation.tweeners[prop] || []).concat(Animation.tweeners[\"*\"]),\n\t\t\tindex = 0,\n\t\t\tlength = collection.length;\n\t\tfor (; index < length; index++) {\n\t\t\tif ((tween = collection[index].call(animation, prop, value))) {\n\n\t\t\t\t// We're done with this property\n\t\t\t\treturn tween;\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction defaultPrefilter(elem, props, opts) {\n\t\tvar prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display,\n\t\t\tisBox = \"width\" in props || \"height\" in props,\n\t\t\tanim = this,\n\t\t\torig = {},\n\t\t\tstyle = elem.style,\n\t\t\thidden = elem.nodeType && isHiddenWithinTree(elem),\n\t\t\tdataShow = dataPriv.get(elem, \"fxshow\");\n\n\t\t// Queue-skipping animations hijack the fx hooks\n\t\tif (!opts.queue) {\n\t\t\thooks = jQuery._queueHooks(elem, \"fx\");\n\t\t\tif (hooks.unqueued == null) {\n\t\t\t\thooks.unqueued = 0;\n\t\t\t\toldfire = hooks.empty.fire;\n\t\t\t\thooks.empty.fire = function () {\n\t\t\t\t\tif (!hooks.unqueued) {\n\t\t\t\t\t\toldfire();\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t\thooks.unqueued++;\n\n\t\t\tanim.always(function () {\n\n\t\t\t\t// Ensure the complete handler is called before this completes\n\t\t\t\tanim.always(function () {\n\t\t\t\t\thooks.unqueued--;\n\t\t\t\t\tif (!jQuery.queue(elem, \"fx\").length) {\n\t\t\t\t\t\thooks.empty.fire();\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\n\t\t// Detect show/hide animations\n\t\tfor (prop in props) {\n\t\t\tvalue = props[prop];\n\t\t\tif (rfxtypes.test(value)) {\n\t\t\t\tdelete props[prop];\n\t\t\t\ttoggle = toggle || value === \"toggle\";\n\t\t\t\tif (value === (hidden ? \"hide\" : \"show\")) {\n\n\t\t\t\t\t// Pretend to be hidden if this is a \"show\" and\n\t\t\t\t\t// there is still data from a stopped show/hide\n\t\t\t\t\tif (value === \"show\" && dataShow && dataShow[prop] !== undefined) {\n\t\t\t\t\t\thidden = true;\n\n\t\t\t\t\t\t// Ignore all other no-op show/hide data\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\torig[prop] = dataShow && dataShow[prop] || jQuery.style(elem, prop);\n\t\t\t}\n\t\t}\n\n\t\t// Bail out if this is a no-op like .hide().hide()\n\t\tpropTween = !jQuery.isEmptyObject(props);\n\t\tif (!propTween && jQuery.isEmptyObject(orig)) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Restrict \"overflow\" and \"display\" styles during box animations\n\t\tif (isBox && elem.nodeType === 1) {\n\n\t\t\t// Support: IE <=9 - 11, Edge 12 - 15\n\t\t\t// Record all 3 overflow attributes because IE does not infer the shorthand\n\t\t\t// from identically-valued overflowX and overflowY and Edge just mirrors\n\t\t\t// the overflowX value there.\n\t\t\topts.overflow = [style.overflow, style.overflowX, style.overflowY];\n\n\t\t\t// Identify a display type, preferring old show/hide data over the CSS cascade\n\t\t\trestoreDisplay = dataShow && dataShow.display;\n\t\t\tif (restoreDisplay == null) {\n\t\t\t\trestoreDisplay = dataPriv.get(elem, \"display\");\n\t\t\t}\n\t\t\tdisplay = jQuery.css(elem, \"display\");\n\t\t\tif (display === \"none\") {\n\t\t\t\tif (restoreDisplay) {\n\t\t\t\t\tdisplay = restoreDisplay;\n\t\t\t\t} else {\n\n\t\t\t\t\t// Get nonempty value(s) by temporarily forcing visibility\n\t\t\t\t\tshowHide([elem], true);\n\t\t\t\t\trestoreDisplay = elem.style.display || restoreDisplay;\n\t\t\t\t\tdisplay = jQuery.css(elem, \"display\");\n\t\t\t\t\tshowHide([elem]);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Animate inline elements as inline-block\n\t\t\tif (display === \"inline\" || display === \"inline-block\" && restoreDisplay != null) {\n\t\t\t\tif (jQuery.css(elem, \"float\") === \"none\") {\n\n\t\t\t\t\t// Restore the original display value at the end of pure show/hide animations\n\t\t\t\t\tif (!propTween) {\n\t\t\t\t\t\tanim.done(function () {\n\t\t\t\t\t\t\tstyle.display = restoreDisplay;\n\t\t\t\t\t\t});\n\t\t\t\t\t\tif (restoreDisplay == null) {\n\t\t\t\t\t\t\tdisplay = style.display;\n\t\t\t\t\t\t\trestoreDisplay = display === \"none\" ? \"\" : display;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tstyle.display = \"inline-block\";\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (opts.overflow) {\n\t\t\tstyle.overflow = \"hidden\";\n\t\t\tanim.always(function () {\n\t\t\t\tstyle.overflow = opts.overflow[0];\n\t\t\t\tstyle.overflowX = opts.overflow[1];\n\t\t\t\tstyle.overflowY = opts.overflow[2];\n\t\t\t});\n\t\t}\n\n\t\t// Implement show/hide animations\n\t\tpropTween = false;\n\t\tfor (prop in orig) {\n\n\t\t\t// General show/hide setup for this element animation\n\t\t\tif (!propTween) {\n\t\t\t\tif (dataShow) {\n\t\t\t\t\tif (\"hidden\" in dataShow) {\n\t\t\t\t\t\thidden = dataShow.hidden;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tdataShow = dataPriv.access(elem, \"fxshow\", { display: restoreDisplay });\n\t\t\t\t}\n\n\t\t\t\t// Store hidden/visible for toggle so `.stop().toggle()` \"reverses\"\n\t\t\t\tif (toggle) {\n\t\t\t\t\tdataShow.hidden = !hidden;\n\t\t\t\t}\n\n\t\t\t\t// Show elements before animating them\n\t\t\t\tif (hidden) {\n\t\t\t\t\tshowHide([elem], true);\n\t\t\t\t}\n\n\t\t\t\t/* eslint-disable no-loop-func */\n\n\t\t\t\tanim.done(function () {\n\n\t\t\t\t\t/* eslint-enable no-loop-func */\n\n\t\t\t\t\t// The final step of a \"hide\" animation is actually hiding the element\n\t\t\t\t\tif (!hidden) {\n\t\t\t\t\t\tshowHide([elem]);\n\t\t\t\t\t}\n\t\t\t\t\tdataPriv.remove(elem, \"fxshow\");\n\t\t\t\t\tfor (prop in orig) {\n\t\t\t\t\t\tjQuery.style(elem, prop, orig[prop]);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// Per-property setup\n\t\t\tpropTween = createTween(hidden ? dataShow[prop] : 0, prop, anim);\n\t\t\tif (!(prop in dataShow)) {\n\t\t\t\tdataShow[prop] = propTween.start;\n\t\t\t\tif (hidden) {\n\t\t\t\t\tpropTween.end = propTween.start;\n\t\t\t\t\tpropTween.start = 0;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction propFilter(props, specialEasing) {\n\t\tvar index, name, easing, value, hooks;\n\n\t\t// camelCase, specialEasing and expand cssHook pass\n\t\tfor (index in props) {\n\t\t\tname = camelCase(index);\n\t\t\teasing = specialEasing[name];\n\t\t\tvalue = props[index];\n\t\t\tif (Array.isArray(value)) {\n\t\t\t\teasing = value[1];\n\t\t\t\tvalue = props[index] = value[0];\n\t\t\t}\n\n\t\t\tif (index !== name) {\n\t\t\t\tprops[name] = value;\n\t\t\t\tdelete props[index];\n\t\t\t}\n\n\t\t\thooks = jQuery.cssHooks[name];\n\t\t\tif (hooks && \"expand\" in hooks) {\n\t\t\t\tvalue = hooks.expand(value);\n\t\t\t\tdelete props[name];\n\n\t\t\t\t// Not quite $.extend, this won't overwrite existing keys.\n\t\t\t\t// Reusing 'index' because we have the correct \"name\"\n\t\t\t\tfor (index in value) {\n\t\t\t\t\tif (!(index in props)) {\n\t\t\t\t\t\tprops[index] = value[index];\n\t\t\t\t\t\tspecialEasing[index] = easing;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tspecialEasing[name] = easing;\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction Animation(elem, properties, options) {\n\t\tvar result,\n\t\t\tstopped,\n\t\t\tindex = 0,\n\t\t\tlength = Animation.prefilters.length,\n\t\t\tdeferred = jQuery.Deferred().always(function () {\n\n\t\t\t\t// Don't match elem in the :animated selector\n\t\t\t\tdelete tick.elem;\n\t\t\t}),\n\t\t\ttick = function () {\n\t\t\t\tif (stopped) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tvar currentTime = fxNow || createFxNow(),\n\t\t\t\t\tremaining = Math.max(0, animation.startTime + animation.duration - currentTime),\n\n\t\t\t\t\t// Support: Android 2.3 only\n\t\t\t\t\t// Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (trac-12497)\n\t\t\t\t\ttemp = remaining / animation.duration || 0,\n\t\t\t\t\tpercent = 1 - temp,\n\t\t\t\t\tindex = 0,\n\t\t\t\t\tlength = animation.tweens.length;\n\n\t\t\t\tfor (; index < length; index++) {\n\t\t\t\t\tanimation.tweens[index].run(percent);\n\t\t\t\t}\n\n\t\t\t\tdeferred.notifyWith(elem, [animation, percent, remaining]);\n\n\t\t\t\t// If there's more to do, yield\n\t\t\t\tif (percent < 1 && length) {\n\t\t\t\t\treturn remaining;\n\t\t\t\t}\n\n\t\t\t\t// If this was an empty animation, synthesize a final progress notification\n\t\t\t\tif (!length) {\n\t\t\t\t\tdeferred.notifyWith(elem, [animation, 1, 0]);\n\t\t\t\t}\n\n\t\t\t\t// Resolve the animation and report its conclusion\n\t\t\t\tdeferred.resolveWith(elem, [animation]);\n\t\t\t\treturn false;\n\t\t\t},\n\t\t\tanimation = deferred.promise({\n\t\t\t\telem: elem,\n\t\t\t\tprops: jQuery.extend({}, properties),\n\t\t\t\topts: jQuery.extend(true, {\n\t\t\t\t\tspecialEasing: {},\n\t\t\t\t\teasing: jQuery.easing._default\n\t\t\t\t}, options),\n\t\t\t\toriginalProperties: properties,\n\t\t\t\toriginalOptions: options,\n\t\t\t\tstartTime: fxNow || createFxNow(),\n\t\t\t\tduration: options.duration,\n\t\t\t\ttweens: [],\n\t\t\t\tcreateTween: function (prop, end) {\n\t\t\t\t\tvar tween = jQuery.Tween(elem, animation.opts, prop, end,\n\t\t\t\t\t\tanimation.opts.specialEasing[prop] || animation.opts.easing);\n\t\t\t\t\tanimation.tweens.push(tween);\n\t\t\t\t\treturn tween;\n\t\t\t\t},\n\t\t\t\tstop: function (gotoEnd) {\n\t\t\t\t\tvar index = 0,\n\n\t\t\t\t\t\t// If we are going to the end, we want to run all the tweens\n\t\t\t\t\t\t// otherwise we skip this part\n\t\t\t\t\t\tlength = gotoEnd ? animation.tweens.length : 0;\n\t\t\t\t\tif (stopped) {\n\t\t\t\t\t\treturn this;\n\t\t\t\t\t}\n\t\t\t\t\tstopped = true;\n\t\t\t\t\tfor (; index < length; index++) {\n\t\t\t\t\t\tanimation.tweens[index].run(1);\n\t\t\t\t\t}\n\n\t\t\t\t\t// Resolve when we played the last frame; otherwise, reject\n\t\t\t\t\tif (gotoEnd) {\n\t\t\t\t\t\tdeferred.notifyWith(elem, [animation, 1, 0]);\n\t\t\t\t\t\tdeferred.resolveWith(elem, [animation, gotoEnd]);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdeferred.rejectWith(elem, [animation, gotoEnd]);\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t}),\n\t\t\tprops = animation.props;\n\n\t\tpropFilter(props, animation.opts.specialEasing);\n\n\t\tfor (; index < length; index++) {\n\t\t\tresult = Animation.prefilters[index].call(animation, elem, props, animation.opts);\n\t\t\tif (result) {\n\t\t\t\tif (isFunction(result.stop)) {\n\t\t\t\t\tjQuery._queueHooks(animation.elem, animation.opts.queue).stop =\n\t\t\t\t\t\tresult.stop.bind(result);\n\t\t\t\t}\n\t\t\t\treturn result;\n\t\t\t}\n\t\t}\n\n\t\tjQuery.map(props, createTween, animation);\n\n\t\tif (isFunction(animation.opts.start)) {\n\t\t\tanimation.opts.start.call(elem, animation);\n\t\t}\n\n\t\t// Attach callbacks from options\n\t\tanimation\n\t\t\t.progress(animation.opts.progress)\n\t\t\t.done(animation.opts.done, animation.opts.complete)\n\t\t\t.fail(animation.opts.fail)\n\t\t\t.always(animation.opts.always);\n\n\t\tjQuery.fx.timer(\n\t\t\tjQuery.extend(tick, {\n\t\t\t\telem: elem,\n\t\t\t\tanim: animation,\n\t\t\t\tqueue: animation.opts.queue\n\t\t\t})\n\t\t);\n\n\t\treturn animation;\n\t}\n\n\tjQuery.Animation = jQuery.extend(Animation, {\n\n\t\ttweeners: {\n\t\t\t\"*\": [function (prop, value) {\n\t\t\t\tvar tween = this.createTween(prop, value);\n\t\t\t\tadjustCSS(tween.elem, prop, rcssNum.exec(value), tween);\n\t\t\t\treturn tween;\n\t\t\t}]\n\t\t},\n\n\t\ttweener: function (props, callback) {\n\t\t\tif (isFunction(props)) {\n\t\t\t\tcallback = props;\n\t\t\t\tprops = [\"*\"];\n\t\t\t} else {\n\t\t\t\tprops = props.match(rnothtmlwhite);\n\t\t\t}\n\n\t\t\tvar prop,\n\t\t\t\tindex = 0,\n\t\t\t\tlength = props.length;\n\n\t\t\tfor (; index < length; index++) {\n\t\t\t\tprop = props[index];\n\t\t\t\tAnimation.tweeners[prop] = Animation.tweeners[prop] || [];\n\t\t\t\tAnimation.tweeners[prop].unshift(callback);\n\t\t\t}\n\t\t},\n\n\t\tprefilters: [defaultPrefilter],\n\n\t\tprefilter: function (callback, prepend) {\n\t\t\tif (prepend) {\n\t\t\t\tAnimation.prefilters.unshift(callback);\n\t\t\t} else {\n\t\t\t\tAnimation.prefilters.push(callback);\n\t\t\t}\n\t\t}\n\t});\n\n\tjQuery.speed = function (speed, easing, fn) {\n\t\tvar opt = speed && typeof speed === \"object\" ? jQuery.extend({}, speed) : {\n\t\t\tcomplete: fn || !fn && easing ||\n\t\t\t\tisFunction(speed) && speed,\n\t\t\tduration: speed,\n\t\t\teasing: fn && easing || easing && !isFunction(easing) && easing\n\t\t};\n\n\t\t// Go to the end state if fx are off\n\t\tif (jQuery.fx.off) {\n\t\t\topt.duration = 0;\n\n\t\t} else {\n\t\t\tif (typeof opt.duration !== \"number\") {\n\t\t\t\tif (opt.duration in jQuery.fx.speeds) {\n\t\t\t\t\topt.duration = jQuery.fx.speeds[opt.duration];\n\n\t\t\t\t} else {\n\t\t\t\t\topt.duration = jQuery.fx.speeds._default;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Normalize opt.queue - true/undefined/null -> \"fx\"\n\t\tif (opt.queue == null || opt.queue === true) {\n\t\t\topt.queue = \"fx\";\n\t\t}\n\n\t\t// Queueing\n\t\topt.old = opt.complete;\n\n\t\topt.complete = function () {\n\t\t\tif (isFunction(opt.old)) {\n\t\t\t\topt.old.call(this);\n\t\t\t}\n\n\t\t\tif (opt.queue) {\n\t\t\t\tjQuery.dequeue(this, opt.queue);\n\t\t\t}\n\t\t};\n\n\t\treturn opt;\n\t};\n\n\tjQuery.fn.extend({\n\t\tfadeTo: function (speed, to, easing, callback) {\n\n\t\t\t// Show any hidden elements after setting opacity to 0\n\t\t\treturn this.filter(isHiddenWithinTree).css(\"opacity\", 0).show()\n\n\t\t\t\t// Animate to the value specified\n\t\t\t\t.end().animate({ opacity: to }, speed, easing, callback);\n\t\t},\n\t\tanimate: function (prop, speed, easing, callback) {\n\t\t\tvar empty = jQuery.isEmptyObject(prop),\n\t\t\t\toptall = jQuery.speed(speed, easing, callback),\n\t\t\t\tdoAnimation = function () {\n\n\t\t\t\t\t// Operate on a copy of prop so per-property easing won't be lost\n\t\t\t\t\tvar anim = Animation(this, jQuery.extend({}, prop), optall);\n\n\t\t\t\t\t// Empty animations, or finishing resolves immediately\n\t\t\t\t\tif (empty || dataPriv.get(this, \"finish\")) {\n\t\t\t\t\t\tanim.stop(true);\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\tdoAnimation.finish = doAnimation;\n\n\t\t\treturn empty || optall.queue === false ?\n\t\t\t\tthis.each(doAnimation) :\n\t\t\t\tthis.queue(optall.queue, doAnimation);\n\t\t},\n\t\tstop: function (type, clearQueue, gotoEnd) {\n\t\t\tvar stopQueue = function (hooks) {\n\t\t\t\tvar stop = hooks.stop;\n\t\t\t\tdelete hooks.stop;\n\t\t\t\tstop(gotoEnd);\n\t\t\t};\n\n\t\t\tif (typeof type !== \"string\") {\n\t\t\t\tgotoEnd = clearQueue;\n\t\t\t\tclearQueue = type;\n\t\t\t\ttype = undefined;\n\t\t\t}\n\t\t\tif (clearQueue) {\n\t\t\t\tthis.queue(type || \"fx\", []);\n\t\t\t}\n\n\t\t\treturn this.each(function () {\n\t\t\t\tvar dequeue = true,\n\t\t\t\t\tindex = type != null && type + \"queueHooks\",\n\t\t\t\t\ttimers = jQuery.timers,\n\t\t\t\t\tdata = dataPriv.get(this);\n\n\t\t\t\tif (index) {\n\t\t\t\t\tif (data[index] && data[index].stop) {\n\t\t\t\t\t\tstopQueue(data[index]);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tfor (index in data) {\n\t\t\t\t\t\tif (data[index] && data[index].stop && rrun.test(index)) {\n\t\t\t\t\t\t\tstopQueue(data[index]);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tfor (index = timers.length; index--;) {\n\t\t\t\t\tif (timers[index].elem === this &&\n\t\t\t\t\t\t(type == null || timers[index].queue === type)) {\n\n\t\t\t\t\t\ttimers[index].anim.stop(gotoEnd);\n\t\t\t\t\t\tdequeue = false;\n\t\t\t\t\t\ttimers.splice(index, 1);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Start the next in the queue if the last step wasn't forced.\n\t\t\t\t// Timers currently will call their complete callbacks, which\n\t\t\t\t// will dequeue but only if they were gotoEnd.\n\t\t\t\tif (dequeue || !gotoEnd) {\n\t\t\t\t\tjQuery.dequeue(this, type);\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\t\tfinish: function (type) {\n\t\t\tif (type !== false) {\n\t\t\t\ttype = type || \"fx\";\n\t\t\t}\n\t\t\treturn this.each(function () {\n\t\t\t\tvar index,\n\t\t\t\t\tdata = dataPriv.get(this),\n\t\t\t\t\tqueue = data[type + \"queue\"],\n\t\t\t\t\thooks = data[type + \"queueHooks\"],\n\t\t\t\t\ttimers = jQuery.timers,\n\t\t\t\t\tlength = queue ? queue.length : 0;\n\n\t\t\t\t// Enable finishing flag on private data\n\t\t\t\tdata.finish = true;\n\n\t\t\t\t// Empty the queue first\n\t\t\t\tjQuery.queue(this, type, []);\n\n\t\t\t\tif (hooks && hooks.stop) {\n\t\t\t\t\thooks.stop.call(this, true);\n\t\t\t\t}\n\n\t\t\t\t// Look for any active animations, and finish them\n\t\t\t\tfor (index = timers.length; index--;) {\n\t\t\t\t\tif (timers[index].elem === this && timers[index].queue === type) {\n\t\t\t\t\t\ttimers[index].anim.stop(true);\n\t\t\t\t\t\ttimers.splice(index, 1);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Look for any animations in the old queue and finish them\n\t\t\t\tfor (index = 0; index < length; index++) {\n\t\t\t\t\tif (queue[index] && queue[index].finish) {\n\t\t\t\t\t\tqueue[index].finish.call(this);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Turn off finishing flag\n\t\t\t\tdelete data.finish;\n\t\t\t});\n\t\t}\n\t});\n\n\tjQuery.each([\"toggle\", \"show\", \"hide\"], function (_i, name) {\n\t\tvar cssFn = jQuery.fn[name];\n\t\tjQuery.fn[name] = function (speed, easing, callback) {\n\t\t\treturn speed == null || typeof speed === \"boolean\" ?\n\t\t\t\tcssFn.apply(this, arguments) :\n\t\t\t\tthis.animate(genFx(name, true), speed, easing, callback);\n\t\t};\n\t});\n\n\t// Generate shortcuts for custom animations\n\tjQuery.each({\n\t\tslideDown: genFx(\"show\"),\n\t\tslideUp: genFx(\"hide\"),\n\t\tslideToggle: genFx(\"toggle\"),\n\t\tfadeIn: { opacity: \"show\" },\n\t\tfadeOut: { opacity: \"hide\" },\n\t\tfadeToggle: { opacity: \"toggle\" }\n\t}, function (name, props) {\n\t\tjQuery.fn[name] = function (speed, easing, callback) {\n\t\t\treturn this.animate(props, speed, easing, callback);\n\t\t};\n\t});\n\n\tjQuery.timers = [];\n\tjQuery.fx.tick = function () {\n\t\tvar timer,\n\t\t\ti = 0,\n\t\t\ttimers = jQuery.timers;\n\n\t\tfxNow = Date.now();\n\n\t\tfor (; i < timers.length; i++) {\n\t\t\ttimer = timers[i];\n\n\t\t\t// Run the timer and safely remove it when done (allowing for external removal)\n\t\t\tif (!timer() && timers[i] === timer) {\n\t\t\t\ttimers.splice(i--, 1);\n\t\t\t}\n\t\t}\n\n\t\tif (!timers.length) {\n\t\t\tjQuery.fx.stop();\n\t\t}\n\t\tfxNow = undefined;\n\t};\n\n\tjQuery.fx.timer = function (timer) {\n\t\tjQuery.timers.push(timer);\n\t\tjQuery.fx.start();\n\t};\n\n\tjQuery.fx.interval = 13;\n\tjQuery.fx.start = function () {\n\t\tif (inProgress) {\n\t\t\treturn;\n\t\t}\n\n\t\tinProgress = true;\n\t\tschedule();\n\t};\n\n\tjQuery.fx.stop = function () {\n\t\tinProgress = null;\n\t};\n\n\tjQuery.fx.speeds = {\n\t\tslow: 600,\n\t\tfast: 200,\n\n\t\t// Default speed\n\t\t_default: 400\n\t};\n\n\n\t// Based off of the plugin by Clint Helfers, with permission.\n\tjQuery.fn.delay = function (time, type) {\n\t\ttime = jQuery.fx ? jQuery.fx.speeds[time] || time : time;\n\t\ttype = type || \"fx\";\n\n\t\treturn this.queue(type, function (next, hooks) {\n\t\t\tvar timeout = window.setTimeout(next, time);\n\t\t\thooks.stop = function () {\n\t\t\t\twindow.clearTimeout(timeout);\n\t\t\t};\n\t\t});\n\t};\n\n\n\t(function () {\n\t\tvar input = document.createElement(\"input\"),\n\t\t\tselect = document.createElement(\"select\"),\n\t\t\topt = select.appendChild(document.createElement(\"option\"));\n\n\t\tinput.type = \"checkbox\";\n\n\t\t// Support: Android <=4.3 only\n\t\t// Default value for a checkbox should be \"on\"\n\t\tsupport.checkOn = input.value !== \"\";\n\n\t\t// Support: IE <=11 only\n\t\t// Must access selectedIndex to make default options select\n\t\tsupport.optSelected = opt.selected;\n\n\t\t// Support: IE <=11 only\n\t\t// An input loses its value after becoming a radio\n\t\tinput = document.createElement(\"input\");\n\t\tinput.value = \"t\";\n\t\tinput.type = \"radio\";\n\t\tsupport.radioValue = input.value === \"t\";\n\t})();\n\n\n\tvar boolHook,\n\t\tattrHandle = jQuery.expr.attrHandle;\n\n\tjQuery.fn.extend({\n\t\tattr: function (name, value) {\n\t\t\treturn access(this, jQuery.attr, name, value, arguments.length > 1);\n\t\t},\n\n\t\tremoveAttr: function (name) {\n\t\t\treturn this.each(function () {\n\t\t\t\tjQuery.removeAttr(this, name);\n\t\t\t});\n\t\t}\n\t});\n\n\tjQuery.extend({\n\t\tattr: function (elem, name, value) {\n\t\t\tvar ret, hooks,\n\t\t\t\tnType = elem.nodeType;\n\n\t\t\t// Don't get/set attributes on text, comment and attribute nodes\n\t\t\tif (nType === 3 || nType === 8 || nType === 2) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Fallback to prop when attributes are not supported\n\t\t\tif (typeof elem.getAttribute === \"undefined\") {\n\t\t\t\treturn jQuery.prop(elem, name, value);\n\t\t\t}\n\n\t\t\t// Attribute hooks are determined by the lowercase version\n\t\t\t// Grab necessary hook if one is defined\n\t\t\tif (nType !== 1 || !jQuery.isXMLDoc(elem)) {\n\t\t\t\thooks = jQuery.attrHooks[name.toLowerCase()] ||\n\t\t\t\t\t(jQuery.expr.match.bool.test(name) ? boolHook : undefined);\n\t\t\t}\n\n\t\t\tif (value !== undefined) {\n\t\t\t\tif (value === null) {\n\t\t\t\t\tjQuery.removeAttr(elem, name);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (hooks && \"set\" in hooks &&\n\t\t\t\t\t(ret = hooks.set(elem, value, name)) !== undefined) {\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\n\t\t\t\telem.setAttribute(name, value + \"\");\n\t\t\t\treturn value;\n\t\t\t}\n\n\t\t\tif (hooks && \"get\" in hooks && (ret = hooks.get(elem, name)) !== null) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\tret = jQuery.find.attr(elem, name);\n\n\t\t\t// Non-existent attributes return null, we normalize to undefined\n\t\t\treturn ret == null ? undefined : ret;\n\t\t},\n\n\t\tattrHooks: {\n\t\t\ttype: {\n\t\t\t\tset: function (elem, value) {\n\t\t\t\t\tif (!support.radioValue && value === \"radio\" &&\n\t\t\t\t\t\tnodeName(elem, \"input\")) {\n\t\t\t\t\t\tvar val = elem.value;\n\t\t\t\t\t\telem.setAttribute(\"type\", value);\n\t\t\t\t\t\tif (val) {\n\t\t\t\t\t\t\telem.value = val;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn value;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tremoveAttr: function (elem, value) {\n\t\t\tvar name,\n\t\t\t\ti = 0,\n\n\t\t\t\t// Attribute names can contain non-HTML whitespace characters\n\t\t\t\t// https://html.spec.whatwg.org/multipage/syntax.html#attributes-2\n\t\t\t\tattrNames = value && value.match(rnothtmlwhite);\n\n\t\t\tif (attrNames && elem.nodeType === 1) {\n\t\t\t\twhile ((name = attrNames[i++])) {\n\t\t\t\t\telem.removeAttribute(name);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\n\t// Hooks for boolean attributes\n\tboolHook = {\n\t\tset: function (elem, value, name) {\n\t\t\tif (value === false) {\n\n\t\t\t\t// Remove boolean attributes when set to false\n\t\t\t\tjQuery.removeAttr(elem, name);\n\t\t\t} else {\n\t\t\t\telem.setAttribute(name, name);\n\t\t\t}\n\t\t\treturn name;\n\t\t}\n\t};\n\n\tjQuery.each(jQuery.expr.match.bool.source.match(/\\w+/g), function (_i, name) {\n\t\tvar getter = attrHandle[name] || jQuery.find.attr;\n\n\t\tattrHandle[name] = function (elem, name, isXML) {\n\t\t\tvar ret, handle,\n\t\t\t\tlowercaseName = name.toLowerCase();\n\n\t\t\tif (!isXML) {\n\n\t\t\t\t// Avoid an infinite loop by temporarily removing this function from the getter\n\t\t\t\thandle = attrHandle[lowercaseName];\n\t\t\t\tattrHandle[lowercaseName] = ret;\n\t\t\t\tret = getter(elem, name, isXML) != null ?\n\t\t\t\t\tlowercaseName :\n\t\t\t\t\tnull;\n\t\t\t\tattrHandle[lowercaseName] = handle;\n\t\t\t}\n\t\t\treturn ret;\n\t\t};\n\t});\n\n\n\n\n\tvar rfocusable = /^(?:input|select|textarea|button)$/i,\n\t\trclickable = /^(?:a|area)$/i;\n\n\tjQuery.fn.extend({\n\t\tprop: function (name, value) {\n\t\t\treturn access(this, jQuery.prop, name, value, arguments.length > 1);\n\t\t},\n\n\t\tremoveProp: function (name) {\n\t\t\treturn this.each(function () {\n\t\t\t\tdelete this[jQuery.propFix[name] || name];\n\t\t\t});\n\t\t}\n\t});\n\n\tjQuery.extend({\n\t\tprop: function (elem, name, value) {\n\t\t\tvar ret, hooks,\n\t\t\t\tnType = elem.nodeType;\n\n\t\t\t// Don't get/set properties on text, comment and attribute nodes\n\t\t\tif (nType === 3 || nType === 8 || nType === 2) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (nType !== 1 || !jQuery.isXMLDoc(elem)) {\n\n\t\t\t\t// Fix name and attach hooks\n\t\t\t\tname = jQuery.propFix[name] || name;\n\t\t\t\thooks = jQuery.propHooks[name];\n\t\t\t}\n\n\t\t\tif (value !== undefined) {\n\t\t\t\tif (hooks && \"set\" in hooks &&\n\t\t\t\t\t(ret = hooks.set(elem, value, name)) !== undefined) {\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\n\t\t\t\treturn (elem[name] = value);\n\t\t\t}\n\n\t\t\tif (hooks && \"get\" in hooks && (ret = hooks.get(elem, name)) !== null) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\treturn elem[name];\n\t\t},\n\n\t\tpropHooks: {\n\t\t\ttabIndex: {\n\t\t\t\tget: function (elem) {\n\n\t\t\t\t\t// Support: IE <=9 - 11 only\n\t\t\t\t\t// elem.tabIndex doesn't always return the\n\t\t\t\t\t// correct value when it hasn't been explicitly set\n\t\t\t\t\t// Use proper attribute retrieval (trac-12072)\n\t\t\t\t\tvar tabindex = jQuery.find.attr(elem, \"tabindex\");\n\n\t\t\t\t\tif (tabindex) {\n\t\t\t\t\t\treturn parseInt(tabindex, 10);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (\n\t\t\t\t\t\trfocusable.test(elem.nodeName) ||\n\t\t\t\t\t\trclickable.test(elem.nodeName) &&\n\t\t\t\t\t\telem.href\n\t\t\t\t\t) {\n\t\t\t\t\t\treturn 0;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn -1;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tpropFix: {\n\t\t\t\"for\": \"htmlFor\",\n\t\t\t\"class\": \"className\"\n\t\t}\n\t});\n\n\t// Support: IE <=11 only\n\t// Accessing the selectedIndex property\n\t// forces the browser to respect setting selected\n\t// on the option\n\t// The getter ensures a default option is selected\n\t// when in an optgroup\n\t// eslint rule \"no-unused-expressions\" is disabled for this code\n\t// since it considers such accessions noop\n\tif (!support.optSelected) {\n\t\tjQuery.propHooks.selected = {\n\t\t\tget: function (elem) {\n\n\t\t\t\t/* eslint no-unused-expressions: \"off\" */\n\n\t\t\t\tvar parent = elem.parentNode;\n\t\t\t\tif (parent && parent.parentNode) {\n\t\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t\t}\n\t\t\t\treturn null;\n\t\t\t},\n\t\t\tset: function (elem) {\n\n\t\t\t\t/* eslint no-unused-expressions: \"off\" */\n\n\t\t\t\tvar parent = elem.parentNode;\n\t\t\t\tif (parent) {\n\t\t\t\t\tparent.selectedIndex;\n\n\t\t\t\t\tif (parent.parentNode) {\n\t\t\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n\n\tjQuery.each([\n\t\t\"tabIndex\",\n\t\t\"readOnly\",\n\t\t\"maxLength\",\n\t\t\"cellSpacing\",\n\t\t\"cellPadding\",\n\t\t\"rowSpan\",\n\t\t\"colSpan\",\n\t\t\"useMap\",\n\t\t\"frameBorder\",\n\t\t\"contentEditable\"\n\t], function () {\n\t\tjQuery.propFix[this.toLowerCase()] = this;\n\t});\n\n\n\n\n\t// Strip and collapse whitespace according to HTML spec\n\t// https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace\n\tfunction stripAndCollapse(value) {\n\t\tvar tokens = value.match(rnothtmlwhite) || [];\n\t\treturn tokens.join(\" \");\n\t}\n\n\n\tfunction getClass(elem) {\n\t\treturn elem.getAttribute && elem.getAttribute(\"class\") || \"\";\n\t}\n\n\tfunction classesToArray(value) {\n\t\tif (Array.isArray(value)) {\n\t\t\treturn value;\n\t\t}\n\t\tif (typeof value === \"string\") {\n\t\t\treturn value.match(rnothtmlwhite) || [];\n\t\t}\n\t\treturn [];\n\t}\n\n\tjQuery.fn.extend({\n\t\taddClass: function (value) {\n\t\t\tvar classNames, cur, curValue, className, i, finalValue;\n\n\t\t\tif (isFunction(value)) {\n\t\t\t\treturn this.each(function (j) {\n\t\t\t\t\tjQuery(this).addClass(value.call(this, j, getClass(this)));\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tclassNames = classesToArray(value);\n\n\t\t\tif (classNames.length) {\n\t\t\t\treturn this.each(function () {\n\t\t\t\t\tcurValue = getClass(this);\n\t\t\t\t\tcur = this.nodeType === 1 && (\" \" + stripAndCollapse(curValue) + \" \");\n\n\t\t\t\t\tif (cur) {\n\t\t\t\t\t\tfor (i = 0; i < classNames.length; i++) {\n\t\t\t\t\t\t\tclassName = classNames[i];\n\t\t\t\t\t\t\tif (cur.indexOf(\" \" + className + \" \") < 0) {\n\t\t\t\t\t\t\t\tcur += className + \" \";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\t\tfinalValue = stripAndCollapse(cur);\n\t\t\t\t\t\tif (curValue !== finalValue) {\n\t\t\t\t\t\t\tthis.setAttribute(\"class\", finalValue);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn this;\n\t\t},\n\n\t\tremoveClass: function (value) {\n\t\t\tvar classNames, cur, curValue, className, i, finalValue;\n\n\t\t\tif (isFunction(value)) {\n\t\t\t\treturn this.each(function (j) {\n\t\t\t\t\tjQuery(this).removeClass(value.call(this, j, getClass(this)));\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (!arguments.length) {\n\t\t\t\treturn this.attr(\"class\", \"\");\n\t\t\t}\n\n\t\t\tclassNames = classesToArray(value);\n\n\t\t\tif (classNames.length) {\n\t\t\t\treturn this.each(function () {\n\t\t\t\t\tcurValue = getClass(this);\n\n\t\t\t\t\t// This expression is here for better compressibility (see addClass)\n\t\t\t\t\tcur = this.nodeType === 1 && (\" \" + stripAndCollapse(curValue) + \" \");\n\n\t\t\t\t\tif (cur) {\n\t\t\t\t\t\tfor (i = 0; i < classNames.length; i++) {\n\t\t\t\t\t\t\tclassName = classNames[i];\n\n\t\t\t\t\t\t\t// Remove *all* instances\n\t\t\t\t\t\t\twhile (cur.indexOf(\" \" + className + \" \") > -1) {\n\t\t\t\t\t\t\t\tcur = cur.replace(\" \" + className + \" \", \" \");\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\t\tfinalValue = stripAndCollapse(cur);\n\t\t\t\t\t\tif (curValue !== finalValue) {\n\t\t\t\t\t\t\tthis.setAttribute(\"class\", finalValue);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn this;\n\t\t},\n\n\t\ttoggleClass: function (value, stateVal) {\n\t\t\tvar classNames, className, i, self,\n\t\t\t\ttype = typeof value,\n\t\t\t\tisValidValue = type === \"string\" || Array.isArray(value);\n\n\t\t\tif (isFunction(value)) {\n\t\t\t\treturn this.each(function (i) {\n\t\t\t\t\tjQuery(this).toggleClass(\n\t\t\t\t\t\tvalue.call(this, i, getClass(this), stateVal),\n\t\t\t\t\t\tstateVal\n\t\t\t\t\t);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (typeof stateVal === \"boolean\" && isValidValue) {\n\t\t\t\treturn stateVal ? this.addClass(value) : this.removeClass(value);\n\t\t\t}\n\n\t\t\tclassNames = classesToArray(value);\n\n\t\t\treturn this.each(function () {\n\t\t\t\tif (isValidValue) {\n\n\t\t\t\t\t// Toggle individual class names\n\t\t\t\t\tself = jQuery(this);\n\n\t\t\t\t\tfor (i = 0; i < classNames.length; i++) {\n\t\t\t\t\t\tclassName = classNames[i];\n\n\t\t\t\t\t\t// Check each className given, space separated list\n\t\t\t\t\t\tif (self.hasClass(className)) {\n\t\t\t\t\t\t\tself.removeClass(className);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tself.addClass(className);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Toggle whole class name\n\t\t\t\t} else if (value === undefined || type === \"boolean\") {\n\t\t\t\t\tclassName = getClass(this);\n\t\t\t\t\tif (className) {\n\n\t\t\t\t\t\t// Store className if set\n\t\t\t\t\t\tdataPriv.set(this, \"__className__\", className);\n\t\t\t\t\t}\n\n\t\t\t\t\t// If the element has a class name or if we're passed `false`,\n\t\t\t\t\t// then remove the whole classname (if there was one, the above saved it).\n\t\t\t\t\t// Otherwise bring back whatever was previously saved (if anything),\n\t\t\t\t\t// falling back to the empty string if nothing was stored.\n\t\t\t\t\tif (this.setAttribute) {\n\t\t\t\t\t\tthis.setAttribute(\"class\",\n\t\t\t\t\t\t\tclassName || value === false ?\n\t\t\t\t\t\t\t\t\"\" :\n\t\t\t\t\t\t\t\tdataPriv.get(this, \"__className__\") || \"\"\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\thasClass: function (selector) {\n\t\t\tvar className, elem,\n\t\t\t\ti = 0;\n\n\t\t\tclassName = \" \" + selector + \" \";\n\t\t\twhile ((elem = this[i++])) {\n\t\t\t\tif (elem.nodeType === 1 &&\n\t\t\t\t\t(\" \" + stripAndCollapse(getClass(elem)) + \" \").indexOf(className) > -1) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn false;\n\t\t}\n\t});\n\n\n\n\n\tvar rreturn = /\\r/g;\n\n\tjQuery.fn.extend({\n\t\tval: function (value) {\n\t\t\tvar hooks, ret, valueIsFunction,\n\t\t\t\telem = this[0];\n\n\t\t\tif (!arguments.length) {\n\t\t\t\tif (elem) {\n\t\t\t\t\thooks = jQuery.valHooks[elem.type] ||\n\t\t\t\t\t\tjQuery.valHooks[elem.nodeName.toLowerCase()];\n\n\t\t\t\t\tif (hooks &&\n\t\t\t\t\t\t\"get\" in hooks &&\n\t\t\t\t\t\t(ret = hooks.get(elem, \"value\")) !== undefined\n\t\t\t\t\t) {\n\t\t\t\t\t\treturn ret;\n\t\t\t\t\t}\n\n\t\t\t\t\tret = elem.value;\n\n\t\t\t\t\t// Handle most common string cases\n\t\t\t\t\tif (typeof ret === \"string\") {\n\t\t\t\t\t\treturn ret.replace(rreturn, \"\");\n\t\t\t\t\t}\n\n\t\t\t\t\t// Handle cases where value is null/undef or number\n\t\t\t\t\treturn ret == null ? \"\" : ret;\n\t\t\t\t}\n\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvalueIsFunction = isFunction(value);\n\n\t\t\treturn this.each(function (i) {\n\t\t\t\tvar val;\n\n\t\t\t\tif (this.nodeType !== 1) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (valueIsFunction) {\n\t\t\t\t\tval = value.call(this, i, jQuery(this).val());\n\t\t\t\t} else {\n\t\t\t\t\tval = value;\n\t\t\t\t}\n\n\t\t\t\t// Treat null/undefined as \"\"; convert numbers to string\n\t\t\t\tif (val == null) {\n\t\t\t\t\tval = \"\";\n\n\t\t\t\t} else if (typeof val === \"number\") {\n\t\t\t\t\tval += \"\";\n\n\t\t\t\t} else if (Array.isArray(val)) {\n\t\t\t\t\tval = jQuery.map(val, function (value) {\n\t\t\t\t\t\treturn value == null ? \"\" : value + \"\";\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\thooks = jQuery.valHooks[this.type] || jQuery.valHooks[this.nodeName.toLowerCase()];\n\n\t\t\t\t// If set returns undefined, fall back to normal setting\n\t\t\t\tif (!hooks || !(\"set\" in hooks) || hooks.set(this, val, \"value\") === undefined) {\n\t\t\t\t\tthis.value = val;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t});\n\n\tjQuery.extend({\n\t\tvalHooks: {\n\t\t\toption: {\n\t\t\t\tget: function (elem) {\n\n\t\t\t\t\tvar val = jQuery.find.attr(elem, \"value\");\n\t\t\t\t\treturn val != null ?\n\t\t\t\t\t\tval :\n\n\t\t\t\t\t\t// Support: IE <=10 - 11 only\n\t\t\t\t\t\t// option.text throws exceptions (trac-14686, trac-14858)\n\t\t\t\t\t\t// Strip and collapse whitespace\n\t\t\t\t\t\t// https://html.spec.whatwg.org/#strip-and-collapse-whitespace\n\t\t\t\t\t\tstripAndCollapse(jQuery.text(elem));\n\t\t\t\t}\n\t\t\t},\n\t\t\tselect: {\n\t\t\t\tget: function (elem) {\n\t\t\t\t\tvar value, option, i,\n\t\t\t\t\t\toptions = elem.options,\n\t\t\t\t\t\tindex = elem.selectedIndex,\n\t\t\t\t\t\tone = elem.type === \"select-one\",\n\t\t\t\t\t\tvalues = one ? null : [],\n\t\t\t\t\t\tmax = one ? index + 1 : options.length;\n\n\t\t\t\t\tif (index < 0) {\n\t\t\t\t\t\ti = max;\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\ti = one ? index : 0;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Loop through all the selected options\n\t\t\t\t\tfor (; i < max; i++) {\n\t\t\t\t\t\toption = options[i];\n\n\t\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t\t// IE8-9 doesn't update selected after form reset (trac-2551)\n\t\t\t\t\t\tif ((option.selected || i === index) &&\n\n\t\t\t\t\t\t\t// Don't return options that are disabled or in a disabled optgroup\n\t\t\t\t\t\t\t!option.disabled &&\n\t\t\t\t\t\t\t(!option.parentNode.disabled ||\n\t\t\t\t\t\t\t\t!nodeName(option.parentNode, \"optgroup\"))) {\n\n\t\t\t\t\t\t\t// Get the specific value for the option\n\t\t\t\t\t\t\tvalue = jQuery(option).val();\n\n\t\t\t\t\t\t\t// We don't need an array for one selects\n\t\t\t\t\t\t\tif (one) {\n\t\t\t\t\t\t\t\treturn value;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Multi-Selects return an array\n\t\t\t\t\t\t\tvalues.push(value);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn values;\n\t\t\t\t},\n\n\t\t\t\tset: function (elem, value) {\n\t\t\t\t\tvar optionSet, option,\n\t\t\t\t\t\toptions = elem.options,\n\t\t\t\t\t\tvalues = jQuery.makeArray(value),\n\t\t\t\t\t\ti = options.length;\n\n\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\toption = options[i];\n\n\t\t\t\t\t\t/* eslint-disable no-cond-assign */\n\n\t\t\t\t\t\tif (option.selected =\n\t\t\t\t\t\t\tjQuery.inArray(jQuery.valHooks.option.get(option), values) > -1\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\toptionSet = true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t/* eslint-enable no-cond-assign */\n\t\t\t\t\t}\n\n\t\t\t\t\t// Force browsers to behave consistently when non-matching value is set\n\t\t\t\t\tif (!optionSet) {\n\t\t\t\t\t\telem.selectedIndex = -1;\n\t\t\t\t\t}\n\t\t\t\t\treturn values;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\n\t// Radios and checkboxes getter/setter\n\tjQuery.each([\"radio\", \"checkbox\"], function () {\n\t\tjQuery.valHooks[this] = {\n\t\t\tset: function (elem, value) {\n\t\t\t\tif (Array.isArray(value)) {\n\t\t\t\t\treturn (elem.checked = jQuery.inArray(jQuery(elem).val(), value) > -1);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\tif (!support.checkOn) {\n\t\t\tjQuery.valHooks[this].get = function (elem) {\n\t\t\t\treturn elem.getAttribute(\"value\") === null ? \"on\" : elem.value;\n\t\t\t};\n\t\t}\n\t});\n\n\n\n\n\t// Return jQuery for attributes-only inclusion\n\tvar location = window.location;\n\n\tvar nonce = { guid: Date.now() };\n\n\tvar rquery = (/\\?/);\n\n\n\n\t// Cross-browser xml parsing\n\tjQuery.parseXML = function (data) {\n\t\tvar xml, parserErrorElem;\n\t\tif (!data || typeof data !== \"string\") {\n\t\t\treturn null;\n\t\t}\n\n\t\t// Support: IE 9 - 11 only\n\t\t// IE throws on parseFromString with invalid input.\n\t\ttry {\n\t\t\txml = (new window.DOMParser()).parseFromString(data, \"text/xml\");\n\t\t} catch (e) { }\n\n\t\tparserErrorElem = xml && xml.getElementsByTagName(\"parsererror\")[0];\n\t\tif (!xml || parserErrorElem) {\n\t\t\tjQuery.error(\"Invalid XML: \" + (\n\t\t\t\tparserErrorElem ?\n\t\t\t\t\tjQuery.map(parserErrorElem.childNodes, function (el) {\n\t\t\t\t\t\treturn el.textContent;\n\t\t\t\t\t}).join(\"\\n\") :\n\t\t\t\t\tdata\n\t\t\t));\n\t\t}\n\t\treturn xml;\n\t};\n\n\n\tvar rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,\n\t\tstopPropagationCallback = function (e) {\n\t\t\te.stopPropagation();\n\t\t};\n\n\tjQuery.extend(jQuery.event, {\n\n\t\ttrigger: function (event, data, elem, onlyHandlers) {\n\n\t\t\tvar i, cur, tmp, bubbleType, ontype, handle, special, lastElement,\n\t\t\t\teventPath = [elem || document],\n\t\t\t\ttype = hasOwn.call(event, \"type\") ? event.type : event,\n\t\t\t\tnamespaces = hasOwn.call(event, \"namespace\") ? event.namespace.split(\".\") : [];\n\n\t\t\tcur = lastElement = tmp = elem = elem || document;\n\n\t\t\t// Don't do events on text and comment nodes\n\t\t\tif (elem.nodeType === 3 || elem.nodeType === 8) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// focus/blur morphs to focusin/out; ensure we're not firing them right now\n\t\t\tif (rfocusMorph.test(type + jQuery.event.triggered)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (type.indexOf(\".\") > -1) {\n\n\t\t\t\t// Namespaced trigger; create a regexp to match event type in handle()\n\t\t\t\tnamespaces = type.split(\".\");\n\t\t\t\ttype = namespaces.shift();\n\t\t\t\tnamespaces.sort();\n\t\t\t}\n\t\t\tontype = type.indexOf(\":\") < 0 && \"on\" + type;\n\n\t\t\t// Caller can pass in a jQuery.Event object, Object, or just an event type string\n\t\t\tevent = event[jQuery.expando] ?\n\t\t\t\tevent :\n\t\t\t\tnew jQuery.Event(type, typeof event === \"object\" && event);\n\n\t\t\t// Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)\n\t\t\tevent.isTrigger = onlyHandlers ? 2 : 3;\n\t\t\tevent.namespace = namespaces.join(\".\");\n\t\t\tevent.rnamespace = event.namespace ?\n\t\t\t\tnew RegExp(\"(^|\\\\.)\" + namespaces.join(\"\\\\.(?:.*\\\\.|)\") + \"(\\\\.|$)\") :\n\t\t\t\tnull;\n\n\t\t\t// Clean up the event in case it is being reused\n\t\t\tevent.result = undefined;\n\t\t\tif (!event.target) {\n\t\t\t\tevent.target = elem;\n\t\t\t}\n\n\t\t\t// Clone any incoming data and prepend the event, creating the handler arg list\n\t\t\tdata = data == null ?\n\t\t\t\t[event] :\n\t\t\t\tjQuery.makeArray(data, [event]);\n\n\t\t\t// Allow special events to draw outside the lines\n\t\t\tspecial = jQuery.event.special[type] || {};\n\t\t\tif (!onlyHandlers && special.trigger && special.trigger.apply(elem, data) === false) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Determine event propagation path in advance, per W3C events spec (trac-9951)\n\t\t\t// Bubble up to document, then to window; watch for a global ownerDocument var (trac-9724)\n\t\t\tif (!onlyHandlers && !special.noBubble && !isWindow(elem)) {\n\n\t\t\t\tbubbleType = special.delegateType || type;\n\t\t\t\tif (!rfocusMorph.test(bubbleType + type)) {\n\t\t\t\t\tcur = cur.parentNode;\n\t\t\t\t}\n\t\t\t\tfor (; cur; cur = cur.parentNode) {\n\t\t\t\t\teventPath.push(cur);\n\t\t\t\t\ttmp = cur;\n\t\t\t\t}\n\n\t\t\t\t// Only add window if we got to document (e.g., not plain obj or detached DOM)\n\t\t\t\tif (tmp === (elem.ownerDocument || document)) {\n\t\t\t\t\teventPath.push(tmp.defaultView || tmp.parentWindow || window);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Fire handlers on the event path\n\t\t\ti = 0;\n\t\t\twhile ((cur = eventPath[i++]) && !event.isPropagationStopped()) {\n\t\t\t\tlastElement = cur;\n\t\t\t\tevent.type = i > 1 ?\n\t\t\t\t\tbubbleType :\n\t\t\t\t\tspecial.bindType || type;\n\n\t\t\t\t// jQuery handler\n\t\t\t\thandle = (dataPriv.get(cur, \"events\") || Object.create(null))[event.type] &&\n\t\t\t\t\tdataPriv.get(cur, \"handle\");\n\t\t\t\tif (handle) {\n\t\t\t\t\thandle.apply(cur, data);\n\t\t\t\t}\n\n\t\t\t\t// Native handler\n\t\t\t\thandle = ontype && cur[ontype];\n\t\t\t\tif (handle && handle.apply && acceptData(cur)) {\n\t\t\t\t\tevent.result = handle.apply(cur, data);\n\t\t\t\t\tif (event.result === false) {\n\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tevent.type = type;\n\n\t\t\t// If nobody prevented the default action, do it now\n\t\t\tif (!onlyHandlers && !event.isDefaultPrevented()) {\n\n\t\t\t\tif ((!special._default ||\n\t\t\t\t\tspecial._default.apply(eventPath.pop(), data) === false) &&\n\t\t\t\t\tacceptData(elem)) {\n\n\t\t\t\t\t// Call a native DOM method on the target with the same name as the event.\n\t\t\t\t\t// Don't do default actions on window, that's where global variables be (trac-6170)\n\t\t\t\t\tif (ontype && isFunction(elem[type]) && !isWindow(elem)) {\n\n\t\t\t\t\t\t// Don't re-trigger an onFOO event when we call its FOO() method\n\t\t\t\t\t\ttmp = elem[ontype];\n\n\t\t\t\t\t\tif (tmp) {\n\t\t\t\t\t\t\telem[ontype] = null;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Prevent re-triggering of the same event, since we already bubbled it above\n\t\t\t\t\t\tjQuery.event.triggered = type;\n\n\t\t\t\t\t\tif (event.isPropagationStopped()) {\n\t\t\t\t\t\t\tlastElement.addEventListener(type, stopPropagationCallback);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\telem[type]();\n\n\t\t\t\t\t\tif (event.isPropagationStopped()) {\n\t\t\t\t\t\t\tlastElement.removeEventListener(type, stopPropagationCallback);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tjQuery.event.triggered = undefined;\n\n\t\t\t\t\t\tif (tmp) {\n\t\t\t\t\t\t\telem[ontype] = tmp;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn event.result;\n\t\t},\n\n\t\t// Piggyback on a donor event to simulate a different one\n\t\t// Used only for `focus(in | out)` events\n\t\tsimulate: function (type, elem, event) {\n\t\t\tvar e = jQuery.extend(\n\t\t\t\tnew jQuery.Event(),\n\t\t\t\tevent,\n\t\t\t\t{\n\t\t\t\t\ttype: type,\n\t\t\t\t\tisSimulated: true\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tjQuery.event.trigger(e, null, elem);\n\t\t}\n\n\t});\n\n\tjQuery.fn.extend({\n\n\t\ttrigger: function (type, data) {\n\t\t\treturn this.each(function () {\n\t\t\t\tjQuery.event.trigger(type, data, this);\n\t\t\t});\n\t\t},\n\t\ttriggerHandler: function (type, data) {\n\t\t\tvar elem = this[0];\n\t\t\tif (elem) {\n\t\t\t\treturn jQuery.event.trigger(type, data, elem, true);\n\t\t\t}\n\t\t}\n\t});\n\n\n\tvar\n\t\trbracket = /\\[\\]$/,\n\t\trCRLF = /\\r?\\n/g,\n\t\trsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,\n\t\trsubmittable = /^(?:input|select|textarea|keygen)/i;\n\n\tfunction buildParams(prefix, obj, traditional, add) {\n\t\tvar name;\n\n\t\tif (Array.isArray(obj)) {\n\n\t\t\t// Serialize array item.\n\t\t\tjQuery.each(obj, function (i, v) {\n\t\t\t\tif (traditional || rbracket.test(prefix)) {\n\n\t\t\t\t\t// Treat each array item as a scalar.\n\t\t\t\t\tadd(prefix, v);\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// Item is non-scalar (array or object), encode its numeric index.\n\t\t\t\t\tbuildParams(\n\t\t\t\t\t\tprefix + \"[\" + (typeof v === \"object\" && v != null ? i : \"\") + \"]\",\n\t\t\t\t\t\tv,\n\t\t\t\t\t\ttraditional,\n\t\t\t\t\t\tadd\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t});\n\n\t\t} else if (!traditional && toType(obj) === \"object\") {\n\n\t\t\t// Serialize object item.\n\t\t\tfor (name in obj) {\n\t\t\t\tbuildParams(prefix + \"[\" + name + \"]\", obj[name], traditional, add);\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// Serialize scalar item.\n\t\t\tadd(prefix, obj);\n\t\t}\n\t}\n\n\t// Serialize an array of form elements or a set of\n\t// key/values into a query string\n\tjQuery.param = function (a, traditional) {\n\t\tvar prefix,\n\t\t\ts = [],\n\t\t\tadd = function (key, valueOrFunction) {\n\n\t\t\t\t// If value is a function, invoke it and use its return value\n\t\t\t\tvar value = isFunction(valueOrFunction) ?\n\t\t\t\t\tvalueOrFunction() :\n\t\t\t\t\tvalueOrFunction;\n\n\t\t\t\ts[s.length] = encodeURIComponent(key) + \"=\" +\n\t\t\t\t\tencodeURIComponent(value == null ? \"\" : value);\n\t\t\t};\n\n\t\tif (a == null) {\n\t\t\treturn \"\";\n\t\t}\n\n\t\t// If an array was passed in, assume that it is an array of form elements.\n\t\tif (Array.isArray(a) || (a.jquery && !jQuery.isPlainObject(a))) {\n\n\t\t\t// Serialize the form elements\n\t\t\tjQuery.each(a, function () {\n\t\t\t\tadd(this.name, this.value);\n\t\t\t});\n\n\t\t} else {\n\n\t\t\t// If traditional, encode the \"old\" way (the way 1.3.2 or older\n\t\t\t// did it), otherwise encode params recursively.\n\t\t\tfor (prefix in a) {\n\t\t\t\tbuildParams(prefix, a[prefix], traditional, add);\n\t\t\t}\n\t\t}\n\n\t\t// Return the resulting serialization\n\t\treturn s.join(\"&\");\n\t};\n\n\tjQuery.fn.extend({\n\t\tserialize: function () {\n\t\t\treturn jQuery.param(this.serializeArray());\n\t\t},\n\t\tserializeArray: function () {\n\t\t\treturn this.map(function () {\n\n\t\t\t\t// Can add propHook for \"elements\" to filter or add form elements\n\t\t\t\tvar elements = jQuery.prop(this, \"elements\");\n\t\t\t\treturn elements ? jQuery.makeArray(elements) : this;\n\t\t\t}).filter(function () {\n\t\t\t\tvar type = this.type;\n\n\t\t\t\t// Use .is( \":disabled\" ) so that fieldset[disabled] works\n\t\t\t\treturn this.name && !jQuery(this).is(\":disabled\") &&\n\t\t\t\t\trsubmittable.test(this.nodeName) && !rsubmitterTypes.test(type) &&\n\t\t\t\t\t(this.checked || !rcheckableType.test(type));\n\t\t\t}).map(function (_i, elem) {\n\t\t\t\tvar val = jQuery(this).val();\n\n\t\t\t\tif (val == null) {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\n\t\t\t\tif (Array.isArray(val)) {\n\t\t\t\t\treturn jQuery.map(val, function (val) {\n\t\t\t\t\t\treturn { name: elem.name, value: val.replace(rCRLF, \"\\r\\n\") };\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\treturn { name: elem.name, value: val.replace(rCRLF, \"\\r\\n\") };\n\t\t\t}).get();\n\t\t}\n\t});\n\n\n\tvar\n\t\tr20 = /%20/g,\n\t\trhash = /#.*$/,\n\t\trantiCache = /([?&])_=[^&]*/,\n\t\trheaders = /^(.*?):[ \\t]*([^\\r\\n]*)$/mg,\n\n\t\t// trac-7653, trac-8125, trac-8152: local protocol detection\n\t\trlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,\n\t\trnoContent = /^(?:GET|HEAD)$/,\n\t\trprotocol = /^\\/\\//,\n\n\t\t/* Prefilters\n\t\t * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)\n\t\t * 2) These are called:\n\t\t *    - BEFORE asking for a transport\n\t\t *    - AFTER param serialization (s.data is a string if s.processData is true)\n\t\t * 3) key is the dataType\n\t\t * 4) the catchall symbol \"*\" can be used\n\t\t * 5) execution will start with transport dataType and THEN continue down to \"*\" if needed\n\t\t */\n\t\tprefilters = {},\n\n\t\t/* Transports bindings\n\t\t * 1) key is the dataType\n\t\t * 2) the catchall symbol \"*\" can be used\n\t\t * 3) selection will start with transport dataType and THEN go to \"*\" if needed\n\t\t */\n\t\ttransports = {},\n\n\t\t// Avoid comment-prolog char sequence (trac-10098); must appease lint and evade compression\n\t\tallTypes = \"*/\".concat(\"*\"),\n\n\t\t// Anchor tag for parsing the document origin\n\t\toriginAnchor = document.createElement(\"a\");\n\n\toriginAnchor.href = location.href;\n\n\t// Base \"constructor\" for jQuery.ajaxPrefilter and jQuery.ajaxTransport\n\tfunction addToPrefiltersOrTransports(structure) {\n\n\t\t// dataTypeExpression is optional and defaults to \"*\"\n\t\treturn function (dataTypeExpression, func) {\n\n\t\t\tif (typeof dataTypeExpression !== \"string\") {\n\t\t\t\tfunc = dataTypeExpression;\n\t\t\t\tdataTypeExpression = \"*\";\n\t\t\t}\n\n\t\t\tvar dataType,\n\t\t\t\ti = 0,\n\t\t\t\tdataTypes = dataTypeExpression.toLowerCase().match(rnothtmlwhite) || [];\n\n\t\t\tif (isFunction(func)) {\n\n\t\t\t\t// For each dataType in the dataTypeExpression\n\t\t\t\twhile ((dataType = dataTypes[i++])) {\n\n\t\t\t\t\t// Prepend if requested\n\t\t\t\t\tif (dataType[0] === \"+\") {\n\t\t\t\t\t\tdataType = dataType.slice(1) || \"*\";\n\t\t\t\t\t\t(structure[dataType] = structure[dataType] || []).unshift(func);\n\n\t\t\t\t\t\t// Otherwise append\n\t\t\t\t\t} else {\n\t\t\t\t\t\t(structure[dataType] = structure[dataType] || []).push(func);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n\n\t// Base inspection function for prefilters and transports\n\tfunction inspectPrefiltersOrTransports(structure, options, originalOptions, jqXHR) {\n\n\t\tvar inspected = {},\n\t\t\tseekingTransport = (structure === transports);\n\n\t\tfunction inspect(dataType) {\n\t\t\tvar selected;\n\t\t\tinspected[dataType] = true;\n\t\t\tjQuery.each(structure[dataType] || [], function (_, prefilterOrFactory) {\n\t\t\t\tvar dataTypeOrTransport = prefilterOrFactory(options, originalOptions, jqXHR);\n\t\t\t\tif (typeof dataTypeOrTransport === \"string\" &&\n\t\t\t\t\t!seekingTransport && !inspected[dataTypeOrTransport]) {\n\n\t\t\t\t\toptions.dataTypes.unshift(dataTypeOrTransport);\n\t\t\t\t\tinspect(dataTypeOrTransport);\n\t\t\t\t\treturn false;\n\t\t\t\t} else if (seekingTransport) {\n\t\t\t\t\treturn !(selected = dataTypeOrTransport);\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn selected;\n\t\t}\n\n\t\treturn inspect(options.dataTypes[0]) || !inspected[\"*\"] && inspect(\"*\");\n\t}\n\n\t// A special extend for ajax options\n\t// that takes \"flat\" options (not to be deep extended)\n\t// Fixes trac-9887\n\tfunction ajaxExtend(target, src) {\n\t\tvar key, deep,\n\t\t\tflatOptions = jQuery.ajaxSettings.flatOptions || {};\n\n\t\tfor (key in src) {\n\t\t\tif (src[key] !== undefined) {\n\t\t\t\t(flatOptions[key] ? target : (deep || (deep = {})))[key] = src[key];\n\t\t\t}\n\t\t}\n\t\tif (deep) {\n\t\t\tjQuery.extend(true, target, deep);\n\t\t}\n\n\t\treturn target;\n\t}\n\n\t/* Handles responses to an ajax request:\n\t * - finds the right dataType (mediates between content-type and expected dataType)\n\t * - returns the corresponding response\n\t */\n\tfunction ajaxHandleResponses(s, jqXHR, responses) {\n\n\t\tvar ct, type, finalDataType, firstDataType,\n\t\t\tcontents = s.contents,\n\t\t\tdataTypes = s.dataTypes;\n\n\t\t// Remove auto dataType and get content-type in the process\n\t\twhile (dataTypes[0] === \"*\") {\n\t\t\tdataTypes.shift();\n\t\t\tif (ct === undefined) {\n\t\t\t\tct = s.mimeType || jqXHR.getResponseHeader(\"Content-Type\");\n\t\t\t}\n\t\t}\n\n\t\t// Check if we're dealing with a known content-type\n\t\tif (ct) {\n\t\t\tfor (type in contents) {\n\t\t\t\tif (contents[type] && contents[type].test(ct)) {\n\t\t\t\t\tdataTypes.unshift(type);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Check to see if we have a response for the expected dataType\n\t\tif (dataTypes[0] in responses) {\n\t\t\tfinalDataType = dataTypes[0];\n\t\t} else {\n\n\t\t\t// Try convertible dataTypes\n\t\t\tfor (type in responses) {\n\t\t\t\tif (!dataTypes[0] || s.converters[type + \" \" + dataTypes[0]]) {\n\t\t\t\t\tfinalDataType = type;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (!firstDataType) {\n\t\t\t\t\tfirstDataType = type;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Or just use first one\n\t\t\tfinalDataType = finalDataType || firstDataType;\n\t\t}\n\n\t\t// If we found a dataType\n\t\t// We add the dataType to the list if needed\n\t\t// and return the corresponding response\n\t\tif (finalDataType) {\n\t\t\tif (finalDataType !== dataTypes[0]) {\n\t\t\t\tdataTypes.unshift(finalDataType);\n\t\t\t}\n\t\t\treturn responses[finalDataType];\n\t\t}\n\t}\n\n\t/* Chain conversions given the request and the original response\n\t * Also sets the responseXXX fields on the jqXHR instance\n\t */\n\tfunction ajaxConvert(s, response, jqXHR, isSuccess) {\n\t\tvar conv2, current, conv, tmp, prev,\n\t\t\tconverters = {},\n\n\t\t\t// Work with a copy of dataTypes in case we need to modify it for conversion\n\t\t\tdataTypes = s.dataTypes.slice();\n\n\t\t// Create converters map with lowercased keys\n\t\tif (dataTypes[1]) {\n\t\t\tfor (conv in s.converters) {\n\t\t\t\tconverters[conv.toLowerCase()] = s.converters[conv];\n\t\t\t}\n\t\t}\n\n\t\tcurrent = dataTypes.shift();\n\n\t\t// Convert to each sequential dataType\n\t\twhile (current) {\n\n\t\t\tif (s.responseFields[current]) {\n\t\t\t\tjqXHR[s.responseFields[current]] = response;\n\t\t\t}\n\n\t\t\t// Apply the dataFilter if provided\n\t\t\tif (!prev && isSuccess && s.dataFilter) {\n\t\t\t\tresponse = s.dataFilter(response, s.dataType);\n\t\t\t}\n\n\t\t\tprev = current;\n\t\t\tcurrent = dataTypes.shift();\n\n\t\t\tif (current) {\n\n\t\t\t\t// There's only work to do if current dataType is non-auto\n\t\t\t\tif (current === \"*\") {\n\n\t\t\t\t\tcurrent = prev;\n\n\t\t\t\t\t// Convert response if prev dataType is non-auto and differs from current\n\t\t\t\t} else if (prev !== \"*\" && prev !== current) {\n\n\t\t\t\t\t// Seek a direct converter\n\t\t\t\t\tconv = converters[prev + \" \" + current] || converters[\"* \" + current];\n\n\t\t\t\t\t// If none found, seek a pair\n\t\t\t\t\tif (!conv) {\n\t\t\t\t\t\tfor (conv2 in converters) {\n\n\t\t\t\t\t\t\t// If conv2 outputs current\n\t\t\t\t\t\t\ttmp = conv2.split(\" \");\n\t\t\t\t\t\t\tif (tmp[1] === current) {\n\n\t\t\t\t\t\t\t\t// If prev can be converted to accepted input\n\t\t\t\t\t\t\t\tconv = converters[prev + \" \" + tmp[0]] ||\n\t\t\t\t\t\t\t\t\tconverters[\"* \" + tmp[0]];\n\t\t\t\t\t\t\t\tif (conv) {\n\n\t\t\t\t\t\t\t\t\t// Condense equivalence converters\n\t\t\t\t\t\t\t\t\tif (conv === true) {\n\t\t\t\t\t\t\t\t\t\tconv = converters[conv2];\n\n\t\t\t\t\t\t\t\t\t\t// Otherwise, insert the intermediate dataType\n\t\t\t\t\t\t\t\t\t} else if (converters[conv2] !== true) {\n\t\t\t\t\t\t\t\t\t\tcurrent = tmp[0];\n\t\t\t\t\t\t\t\t\t\tdataTypes.unshift(tmp[1]);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Apply converter (if not an equivalence)\n\t\t\t\t\tif (conv !== true) {\n\n\t\t\t\t\t\t// Unless errors are allowed to bubble, catch and return them\n\t\t\t\t\t\tif (conv && s.throws) {\n\t\t\t\t\t\t\tresponse = conv(response);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\tresponse = conv(response);\n\t\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\tstate: \"parsererror\",\n\t\t\t\t\t\t\t\t\terror: conv ? e : \"No conversion from \" + prev + \" to \" + current\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn { state: \"success\", data: response };\n\t}\n\n\tjQuery.extend({\n\n\t\t// Counter for holding the number of active queries\n\t\tactive: 0,\n\n\t\t// Last-Modified header cache for next request\n\t\tlastModified: {},\n\t\tetag: {},\n\n\t\tajaxSettings: {\n\t\t\turl: location.href,\n\t\t\ttype: \"GET\",\n\t\t\tisLocal: rlocalProtocol.test(location.protocol),\n\t\t\tglobal: true,\n\t\t\tprocessData: true,\n\t\t\tasync: true,\n\t\t\tcontentType: \"application/x-www-form-urlencoded; charset=UTF-8\",\n\n\t\t\t/*\n\t\t\ttimeout: 0,\n\t\t\tdata: null,\n\t\t\tdataType: null,\n\t\t\tusername: null,\n\t\t\tpassword: null,\n\t\t\tcache: null,\n\t\t\tthrows: false,\n\t\t\ttraditional: false,\n\t\t\theaders: {},\n\t\t\t*/\n\n\t\t\taccepts: {\n\t\t\t\t\"*\": allTypes,\n\t\t\t\ttext: \"text/plain\",\n\t\t\t\thtml: \"text/html\",\n\t\t\t\txml: \"application/xml, text/xml\",\n\t\t\t\tjson: \"application/json, text/javascript\"\n\t\t\t},\n\n\t\t\tcontents: {\n\t\t\t\txml: /\\bxml\\b/,\n\t\t\t\thtml: /\\bhtml/,\n\t\t\t\tjson: /\\bjson\\b/\n\t\t\t},\n\n\t\t\tresponseFields: {\n\t\t\t\txml: \"responseXML\",\n\t\t\t\ttext: \"responseText\",\n\t\t\t\tjson: \"responseJSON\"\n\t\t\t},\n\n\t\t\t// Data converters\n\t\t\t// Keys separate source (or catchall \"*\") and destination types with a single space\n\t\t\tconverters: {\n\n\t\t\t\t// Convert anything to text\n\t\t\t\t\"* text\": String,\n\n\t\t\t\t// Text to html (true = no transformation)\n\t\t\t\t\"text html\": true,\n\n\t\t\t\t// Evaluate text as a json expression\n\t\t\t\t\"text json\": JSON.parse,\n\n\t\t\t\t// Parse text as xml\n\t\t\t\t\"text xml\": jQuery.parseXML\n\t\t\t},\n\n\t\t\t// For options that shouldn't be deep extended:\n\t\t\t// you can add your own custom options here if\n\t\t\t// and when you create one that shouldn't be\n\t\t\t// deep extended (see ajaxExtend)\n\t\t\tflatOptions: {\n\t\t\t\turl: true,\n\t\t\t\tcontext: true\n\t\t\t}\n\t\t},\n\n\t\t// Creates a full fledged settings object into target\n\t\t// with both ajaxSettings and settings fields.\n\t\t// If target is omitted, writes into ajaxSettings.\n\t\tajaxSetup: function (target, settings) {\n\t\t\treturn settings ?\n\n\t\t\t\t// Building a settings object\n\t\t\t\tajaxExtend(ajaxExtend(target, jQuery.ajaxSettings), settings) :\n\n\t\t\t\t// Extending ajaxSettings\n\t\t\t\tajaxExtend(jQuery.ajaxSettings, target);\n\t\t},\n\n\t\tajaxPrefilter: addToPrefiltersOrTransports(prefilters),\n\t\tajaxTransport: addToPrefiltersOrTransports(transports),\n\n\t\t// Main method\n\t\tajax: function (url, options) {\n\n\t\t\t// If url is an object, simulate pre-1.5 signature\n\t\t\tif (typeof url === \"object\") {\n\t\t\t\toptions = url;\n\t\t\t\turl = undefined;\n\t\t\t}\n\n\t\t\t// Force options to be an object\n\t\t\toptions = options || {};\n\n\t\t\tvar transport,\n\n\t\t\t\t// URL without anti-cache param\n\t\t\t\tcacheURL,\n\n\t\t\t\t// Response headers\n\t\t\t\tresponseHeadersString,\n\t\t\t\tresponseHeaders,\n\n\t\t\t\t// timeout handle\n\t\t\t\ttimeoutTimer,\n\n\t\t\t\t// Url cleanup var\n\t\t\t\turlAnchor,\n\n\t\t\t\t// Request state (becomes false upon send and true upon completion)\n\t\t\t\tcompleted,\n\n\t\t\t\t// To know if global events are to be dispatched\n\t\t\t\tfireGlobals,\n\n\t\t\t\t// Loop variable\n\t\t\t\ti,\n\n\t\t\t\t// uncached part of the url\n\t\t\t\tuncached,\n\n\t\t\t\t// Create the final options object\n\t\t\t\ts = jQuery.ajaxSetup({}, options),\n\n\t\t\t\t// Callbacks context\n\t\t\t\tcallbackContext = s.context || s,\n\n\t\t\t\t// Context for global events is callbackContext if it is a DOM node or jQuery collection\n\t\t\t\tglobalEventContext = s.context &&\n\t\t\t\t\t(callbackContext.nodeType || callbackContext.jquery) ?\n\t\t\t\t\tjQuery(callbackContext) :\n\t\t\t\t\tjQuery.event,\n\n\t\t\t\t// Deferreds\n\t\t\t\tdeferred = jQuery.Deferred(),\n\t\t\t\tcompleteDeferred = jQuery.Callbacks(\"once memory\"),\n\n\t\t\t\t// Status-dependent callbacks\n\t\t\t\tstatusCode = s.statusCode || {},\n\n\t\t\t\t// Headers (they are sent all at once)\n\t\t\t\trequestHeaders = {},\n\t\t\t\trequestHeadersNames = {},\n\n\t\t\t\t// Default abort message\n\t\t\t\tstrAbort = \"canceled\",\n\n\t\t\t\t// Fake xhr\n\t\t\t\tjqXHR = {\n\t\t\t\t\treadyState: 0,\n\n\t\t\t\t\t// Builds headers hashtable if needed\n\t\t\t\t\tgetResponseHeader: function (key) {\n\t\t\t\t\t\tvar match;\n\t\t\t\t\t\tif (completed) {\n\t\t\t\t\t\t\tif (!responseHeaders) {\n\t\t\t\t\t\t\t\tresponseHeaders = {};\n\t\t\t\t\t\t\t\twhile ((match = rheaders.exec(responseHeadersString))) {\n\t\t\t\t\t\t\t\t\tresponseHeaders[match[1].toLowerCase() + \" \"] =\n\t\t\t\t\t\t\t\t\t\t(responseHeaders[match[1].toLowerCase() + \" \"] || [])\n\t\t\t\t\t\t\t\t\t\t\t.concat(match[2]);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tmatch = responseHeaders[key.toLowerCase() + \" \"];\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn match == null ? null : match.join(\", \");\n\t\t\t\t\t},\n\n\t\t\t\t\t// Raw string\n\t\t\t\t\tgetAllResponseHeaders: function () {\n\t\t\t\t\t\treturn completed ? responseHeadersString : null;\n\t\t\t\t\t},\n\n\t\t\t\t\t// Caches the header\n\t\t\t\t\tsetRequestHeader: function (name, value) {\n\t\t\t\t\t\tif (completed == null) {\n\t\t\t\t\t\t\tname = requestHeadersNames[name.toLowerCase()] =\n\t\t\t\t\t\t\t\trequestHeadersNames[name.toLowerCase()] || name;\n\t\t\t\t\t\t\trequestHeaders[name] = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn this;\n\t\t\t\t\t},\n\n\t\t\t\t\t// Overrides response content-type header\n\t\t\t\t\toverrideMimeType: function (type) {\n\t\t\t\t\t\tif (completed == null) {\n\t\t\t\t\t\t\ts.mimeType = type;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn this;\n\t\t\t\t\t},\n\n\t\t\t\t\t// Status-dependent callbacks\n\t\t\t\t\tstatusCode: function (map) {\n\t\t\t\t\t\tvar code;\n\t\t\t\t\t\tif (map) {\n\t\t\t\t\t\t\tif (completed) {\n\n\t\t\t\t\t\t\t\t// Execute the appropriate callbacks\n\t\t\t\t\t\t\t\tjqXHR.always(map[jqXHR.status]);\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t// Lazy-add the new callbacks in a way that preserves old ones\n\t\t\t\t\t\t\t\tfor (code in map) {\n\t\t\t\t\t\t\t\t\tstatusCode[code] = [statusCode[code], map[code]];\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn this;\n\t\t\t\t\t},\n\n\t\t\t\t\t// Cancel the request\n\t\t\t\t\tabort: function (statusText) {\n\t\t\t\t\t\tvar finalText = statusText || strAbort;\n\t\t\t\t\t\tif (transport) {\n\t\t\t\t\t\t\ttransport.abort(finalText);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdone(0, finalText);\n\t\t\t\t\t\treturn this;\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t// Attach deferreds\n\t\t\tdeferred.promise(jqXHR);\n\n\t\t\t// Add protocol if not provided (prefilters might expect it)\n\t\t\t// Handle falsy url in the settings object (trac-10093: consistency with old signature)\n\t\t\t// We also use the url parameter if available\n\t\t\ts.url = ((url || s.url || location.href) + \"\")\n\t\t\t\t.replace(rprotocol, location.protocol + \"//\");\n\n\t\t\t// Alias method option to type as per ticket trac-12004\n\t\t\ts.type = options.method || options.type || s.method || s.type;\n\n\t\t\t// Extract dataTypes list\n\t\t\ts.dataTypes = (s.dataType || \"*\").toLowerCase().match(rnothtmlwhite) || [\"\"];\n\n\t\t\t// A cross-domain request is in order when the origin doesn't match the current origin.\n\t\t\tif (s.crossDomain == null) {\n\t\t\t\turlAnchor = document.createElement(\"a\");\n\n\t\t\t\t// Support: IE <=8 - 11, Edge 12 - 15\n\t\t\t\t// IE throws exception on accessing the href property if url is malformed,\n\t\t\t\t// e.g. http://example.com:80x/\n\t\t\t\ttry {\n\t\t\t\t\turlAnchor.href = s.url;\n\n\t\t\t\t\t// Support: IE <=8 - 11 only\n\t\t\t\t\t// Anchor's host property isn't correctly set when s.url is relative\n\t\t\t\t\turlAnchor.href = urlAnchor.href;\n\t\t\t\t\ts.crossDomain = originAnchor.protocol + \"//\" + originAnchor.host !==\n\t\t\t\t\t\turlAnchor.protocol + \"//\" + urlAnchor.host;\n\t\t\t\t} catch (e) {\n\n\t\t\t\t\t// If there is an error parsing the URL, assume it is crossDomain,\n\t\t\t\t\t// it can be rejected by the transport if it is invalid\n\t\t\t\t\ts.crossDomain = true;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Convert data if not already a string\n\t\t\tif (s.data && s.processData && typeof s.data !== \"string\") {\n\t\t\t\ts.data = jQuery.param(s.data, s.traditional);\n\t\t\t}\n\n\t\t\t// Apply prefilters\n\t\t\tinspectPrefiltersOrTransports(prefilters, s, options, jqXHR);\n\n\t\t\t// If request was aborted inside a prefilter, stop there\n\t\t\tif (completed) {\n\t\t\t\treturn jqXHR;\n\t\t\t}\n\n\t\t\t// We can fire global events as of now if asked to\n\t\t\t// Don't fire events if jQuery.event is undefined in an AMD-usage scenario (trac-15118)\n\t\t\tfireGlobals = jQuery.event && s.global;\n\n\t\t\t// Watch for a new set of requests\n\t\t\tif (fireGlobals && jQuery.active++ === 0) {\n\t\t\t\tjQuery.event.trigger(\"ajaxStart\");\n\t\t\t}\n\n\t\t\t// Uppercase the type\n\t\t\ts.type = s.type.toUpperCase();\n\n\t\t\t// Determine if request has content\n\t\t\ts.hasContent = !rnoContent.test(s.type);\n\n\t\t\t// Save the URL in case we're toying with the If-Modified-Since\n\t\t\t// and/or If-None-Match header later on\n\t\t\t// Remove hash to simplify url manipulation\n\t\t\tcacheURL = s.url.replace(rhash, \"\");\n\n\t\t\t// More options handling for requests with no content\n\t\t\tif (!s.hasContent) {\n\n\t\t\t\t// Remember the hash so we can put it back\n\t\t\t\tuncached = s.url.slice(cacheURL.length);\n\n\t\t\t\t// If data is available and should be processed, append data to url\n\t\t\t\tif (s.data && (s.processData || typeof s.data === \"string\")) {\n\t\t\t\t\tcacheURL += (rquery.test(cacheURL) ? \"&\" : \"?\") + s.data;\n\n\t\t\t\t\t// trac-9682: remove data so that it's not used in an eventual retry\n\t\t\t\t\tdelete s.data;\n\t\t\t\t}\n\n\t\t\t\t// Add or update anti-cache param if needed\n\t\t\t\tif (s.cache === false) {\n\t\t\t\t\tcacheURL = cacheURL.replace(rantiCache, \"$1\");\n\t\t\t\t\tuncached = (rquery.test(cacheURL) ? \"&\" : \"?\") + \"_=\" + (nonce.guid++) +\n\t\t\t\t\t\tuncached;\n\t\t\t\t}\n\n\t\t\t\t// Put hash and anti-cache on the URL that will be requested (gh-1732)\n\t\t\t\ts.url = cacheURL + uncached;\n\n\t\t\t\t// Change '%20' to '+' if this is encoded form body content (gh-2658)\n\t\t\t} else if (s.data && s.processData &&\n\t\t\t\t(s.contentType || \"\").indexOf(\"application/x-www-form-urlencoded\") === 0) {\n\t\t\t\ts.data = s.data.replace(r20, \"+\");\n\t\t\t}\n\n\t\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\t\tif (s.ifModified) {\n\t\t\t\tif (jQuery.lastModified[cacheURL]) {\n\t\t\t\t\tjqXHR.setRequestHeader(\"If-Modified-Since\", jQuery.lastModified[cacheURL]);\n\t\t\t\t}\n\t\t\t\tif (jQuery.etag[cacheURL]) {\n\t\t\t\t\tjqXHR.setRequestHeader(\"If-None-Match\", jQuery.etag[cacheURL]);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Set the correct header, if data is being sent\n\t\t\tif (s.data && s.hasContent && s.contentType !== false || options.contentType) {\n\t\t\t\tjqXHR.setRequestHeader(\"Content-Type\", s.contentType);\n\t\t\t}\n\n\t\t\t// Set the Accepts header for the server, depending on the dataType\n\t\t\tjqXHR.setRequestHeader(\n\t\t\t\t\"Accept\",\n\t\t\t\ts.dataTypes[0] && s.accepts[s.dataTypes[0]] ?\n\t\t\t\t\ts.accepts[s.dataTypes[0]] +\n\t\t\t\t\t(s.dataTypes[0] !== \"*\" ? \", \" + allTypes + \"; q=0.01\" : \"\") :\n\t\t\t\t\ts.accepts[\"*\"]\n\t\t\t);\n\n\t\t\t// Check for headers option\n\t\t\tfor (i in s.headers) {\n\t\t\t\tjqXHR.setRequestHeader(i, s.headers[i]);\n\t\t\t}\n\n\t\t\t// Allow custom headers/mimetypes and early abort\n\t\t\tif (s.beforeSend &&\n\t\t\t\t(s.beforeSend.call(callbackContext, jqXHR, s) === false || completed)) {\n\n\t\t\t\t// Abort if not done already and return\n\t\t\t\treturn jqXHR.abort();\n\t\t\t}\n\n\t\t\t// Aborting is no longer a cancellation\n\t\t\tstrAbort = \"abort\";\n\n\t\t\t// Install callbacks on deferreds\n\t\t\tcompleteDeferred.add(s.complete);\n\t\t\tjqXHR.done(s.success);\n\t\t\tjqXHR.fail(s.error);\n\n\t\t\t// Get transport\n\t\t\ttransport = inspectPrefiltersOrTransports(transports, s, options, jqXHR);\n\n\t\t\t// If no transport, we auto-abort\n\t\t\tif (!transport) {\n\t\t\t\tdone(-1, \"No Transport\");\n\t\t\t} else {\n\t\t\t\tjqXHR.readyState = 1;\n\n\t\t\t\t// Send global event\n\t\t\t\tif (fireGlobals) {\n\t\t\t\t\tglobalEventContext.trigger(\"ajaxSend\", [jqXHR, s]);\n\t\t\t\t}\n\n\t\t\t\t// If request was aborted inside ajaxSend, stop there\n\t\t\t\tif (completed) {\n\t\t\t\t\treturn jqXHR;\n\t\t\t\t}\n\n\t\t\t\t// Timeout\n\t\t\t\tif (s.async && s.timeout > 0) {\n\t\t\t\t\ttimeoutTimer = window.setTimeout(function () {\n\t\t\t\t\t\tjqXHR.abort(\"timeout\");\n\t\t\t\t\t}, s.timeout);\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tcompleted = false;\n\t\t\t\t\ttransport.send(requestHeaders, done);\n\t\t\t\t} catch (e) {\n\n\t\t\t\t\t// Rethrow post-completion exceptions\n\t\t\t\t\tif (completed) {\n\t\t\t\t\t\tthrow e;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Propagate others as results\n\t\t\t\t\tdone(-1, e);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Callback for when everything is done\n\t\t\tfunction done(status, nativeStatusText, responses, headers) {\n\t\t\t\tvar isSuccess, success, error, response, modified,\n\t\t\t\t\tstatusText = nativeStatusText;\n\n\t\t\t\t// Ignore repeat invocations\n\t\t\t\tif (completed) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tcompleted = true;\n\n\t\t\t\t// Clear timeout if it exists\n\t\t\t\tif (timeoutTimer) {\n\t\t\t\t\twindow.clearTimeout(timeoutTimer);\n\t\t\t\t}\n\n\t\t\t\t// Dereference transport for early garbage collection\n\t\t\t\t// (no matter how long the jqXHR object will be used)\n\t\t\t\ttransport = undefined;\n\n\t\t\t\t// Cache response headers\n\t\t\t\tresponseHeadersString = headers || \"\";\n\n\t\t\t\t// Set readyState\n\t\t\t\tjqXHR.readyState = status > 0 ? 4 : 0;\n\n\t\t\t\t// Determine if successful\n\t\t\t\tisSuccess = status >= 200 && status < 300 || status === 304;\n\n\t\t\t\t// Get response data\n\t\t\t\tif (responses) {\n\t\t\t\t\tresponse = ajaxHandleResponses(s, jqXHR, responses);\n\t\t\t\t}\n\n\t\t\t\t// Use a noop converter for missing script but not if jsonp\n\t\t\t\tif (!isSuccess &&\n\t\t\t\t\tjQuery.inArray(\"script\", s.dataTypes) > -1 &&\n\t\t\t\t\tjQuery.inArray(\"json\", s.dataTypes) < 0) {\n\t\t\t\t\ts.converters[\"text script\"] = function () { };\n\t\t\t\t}\n\n\t\t\t\t// Convert no matter what (that way responseXXX fields are always set)\n\t\t\t\tresponse = ajaxConvert(s, response, jqXHR, isSuccess);\n\n\t\t\t\t// If successful, handle type chaining\n\t\t\t\tif (isSuccess) {\n\n\t\t\t\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\t\t\t\tif (s.ifModified) {\n\t\t\t\t\t\tmodified = jqXHR.getResponseHeader(\"Last-Modified\");\n\t\t\t\t\t\tif (modified) {\n\t\t\t\t\t\t\tjQuery.lastModified[cacheURL] = modified;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmodified = jqXHR.getResponseHeader(\"etag\");\n\t\t\t\t\t\tif (modified) {\n\t\t\t\t\t\t\tjQuery.etag[cacheURL] = modified;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// if no content\n\t\t\t\t\tif (status === 204 || s.type === \"HEAD\") {\n\t\t\t\t\t\tstatusText = \"nocontent\";\n\n\t\t\t\t\t\t// if not modified\n\t\t\t\t\t} else if (status === 304) {\n\t\t\t\t\t\tstatusText = \"notmodified\";\n\n\t\t\t\t\t\t// If we have data, let's convert it\n\t\t\t\t\t} else {\n\t\t\t\t\t\tstatusText = response.state;\n\t\t\t\t\t\tsuccess = response.data;\n\t\t\t\t\t\terror = response.error;\n\t\t\t\t\t\tisSuccess = !error;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\n\t\t\t\t\t// Extract error from statusText and normalize for non-aborts\n\t\t\t\t\terror = statusText;\n\t\t\t\t\tif (status || !statusText) {\n\t\t\t\t\t\tstatusText = \"error\";\n\t\t\t\t\t\tif (status < 0) {\n\t\t\t\t\t\t\tstatus = 0;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Set data for the fake xhr object\n\t\t\t\tjqXHR.status = status;\n\t\t\t\tjqXHR.statusText = (nativeStatusText || statusText) + \"\";\n\n\t\t\t\t// Success/Error\n\t\t\t\tif (isSuccess) {\n\t\t\t\t\tdeferred.resolveWith(callbackContext, [success, statusText, jqXHR]);\n\t\t\t\t} else {\n\t\t\t\t\tdeferred.rejectWith(callbackContext, [jqXHR, statusText, error]);\n\t\t\t\t}\n\n\t\t\t\t// Status-dependent callbacks\n\t\t\t\tjqXHR.statusCode(statusCode);\n\t\t\t\tstatusCode = undefined;\n\n\t\t\t\tif (fireGlobals) {\n\t\t\t\t\tglobalEventContext.trigger(isSuccess ? \"ajaxSuccess\" : \"ajaxError\",\n\t\t\t\t\t\t[jqXHR, s, isSuccess ? success : error]);\n\t\t\t\t}\n\n\t\t\t\t// Complete\n\t\t\t\tcompleteDeferred.fireWith(callbackContext, [jqXHR, statusText]);\n\n\t\t\t\tif (fireGlobals) {\n\t\t\t\t\tglobalEventContext.trigger(\"ajaxComplete\", [jqXHR, s]);\n\n\t\t\t\t\t// Handle the global AJAX counter\n\t\t\t\t\tif (!(--jQuery.active)) {\n\t\t\t\t\t\tjQuery.event.trigger(\"ajaxStop\");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn jqXHR;\n\t\t},\n\n\t\tgetJSON: function (url, data, callback) {\n\t\t\treturn jQuery.get(url, data, callback, \"json\");\n\t\t},\n\n\t\tgetScript: function (url, callback) {\n\t\t\treturn jQuery.get(url, undefined, callback, \"script\");\n\t\t}\n\t});\n\n\tjQuery.each([\"get\", \"post\"], function (_i, method) {\n\t\tjQuery[method] = function (url, data, callback, type) {\n\n\t\t\t// Shift arguments if data argument was omitted\n\t\t\tif (isFunction(data)) {\n\t\t\t\ttype = type || callback;\n\t\t\t\tcallback = data;\n\t\t\t\tdata = undefined;\n\t\t\t}\n\n\t\t\t// The url can be an options object (which then must have .url)\n\t\t\treturn jQuery.ajax(jQuery.extend({\n\t\t\t\turl: url,\n\t\t\t\ttype: method,\n\t\t\t\tdataType: type,\n\t\t\t\tdata: data,\n\t\t\t\tsuccess: callback\n\t\t\t}, jQuery.isPlainObject(url) && url));\n\t\t};\n\t});\n\n\tjQuery.ajaxPrefilter(function (s) {\n\t\tvar i;\n\t\tfor (i in s.headers) {\n\t\t\tif (i.toLowerCase() === \"content-type\") {\n\t\t\t\ts.contentType = s.headers[i] || \"\";\n\t\t\t}\n\t\t}\n\t});\n\n\n\tjQuery._evalUrl = function (url, options, doc) {\n\t\treturn jQuery.ajax({\n\t\t\turl: url,\n\n\t\t\t// Make this explicit, since user can override this through ajaxSetup (trac-11264)\n\t\t\ttype: \"GET\",\n\t\t\tdataType: \"script\",\n\t\t\tcache: true,\n\t\t\tasync: false,\n\t\t\tglobal: false,\n\n\t\t\t// Only evaluate the response if it is successful (gh-4126)\n\t\t\t// dataFilter is not invoked for failure responses, so using it instead\n\t\t\t// of the default converter is kludgy but it works.\n\t\t\tconverters: {\n\t\t\t\t\"text script\": function () { }\n\t\t\t},\n\t\t\tdataFilter: function (response) {\n\t\t\t\tjQuery.globalEval(response, options, doc);\n\t\t\t}\n\t\t});\n\t};\n\n\n\tjQuery.fn.extend({\n\t\twrapAll: function (html) {\n\t\t\tvar wrap;\n\n\t\t\tif (this[0]) {\n\t\t\t\tif (isFunction(html)) {\n\t\t\t\t\thtml = html.call(this[0]);\n\t\t\t\t}\n\n\t\t\t\t// The elements to wrap the target around\n\t\t\t\twrap = jQuery(html, this[0].ownerDocument).eq(0).clone(true);\n\n\t\t\t\tif (this[0].parentNode) {\n\t\t\t\t\twrap.insertBefore(this[0]);\n\t\t\t\t}\n\n\t\t\t\twrap.map(function () {\n\t\t\t\t\tvar elem = this;\n\n\t\t\t\t\twhile (elem.firstElementChild) {\n\t\t\t\t\t\telem = elem.firstElementChild;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn elem;\n\t\t\t\t}).append(this);\n\t\t\t}\n\n\t\t\treturn this;\n\t\t},\n\n\t\twrapInner: function (html) {\n\t\t\tif (isFunction(html)) {\n\t\t\t\treturn this.each(function (i) {\n\t\t\t\t\tjQuery(this).wrapInner(html.call(this, i));\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn this.each(function () {\n\t\t\t\tvar self = jQuery(this),\n\t\t\t\t\tcontents = self.contents();\n\n\t\t\t\tif (contents.length) {\n\t\t\t\t\tcontents.wrapAll(html);\n\n\t\t\t\t} else {\n\t\t\t\t\tself.append(html);\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\twrap: function (html) {\n\t\t\tvar htmlIsFunction = isFunction(html);\n\n\t\t\treturn this.each(function (i) {\n\t\t\t\tjQuery(this).wrapAll(htmlIsFunction ? html.call(this, i) : html);\n\t\t\t});\n\t\t},\n\n\t\tunwrap: function (selector) {\n\t\t\tthis.parent(selector).not(\"body\").each(function () {\n\t\t\t\tjQuery(this).replaceWith(this.childNodes);\n\t\t\t});\n\t\t\treturn this;\n\t\t}\n\t});\n\n\n\tjQuery.expr.pseudos.hidden = function (elem) {\n\t\treturn !jQuery.expr.pseudos.visible(elem);\n\t};\n\tjQuery.expr.pseudos.visible = function (elem) {\n\t\treturn !!(elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length);\n\t};\n\n\n\n\n\tjQuery.ajaxSettings.xhr = function () {\n\t\ttry {\n\t\t\treturn new window.XMLHttpRequest();\n\t\t} catch (e) { }\n\t};\n\n\tvar xhrSuccessStatus = {\n\n\t\t// File protocol always yields status code 0, assume 200\n\t\t0: 200,\n\n\t\t// Support: IE <=9 only\n\t\t// trac-1450: sometimes IE returns 1223 when it should be 204\n\t\t1223: 204\n\t},\n\t\txhrSupported = jQuery.ajaxSettings.xhr();\n\n\tsupport.cors = !!xhrSupported && (\"withCredentials\" in xhrSupported);\n\tsupport.ajax = xhrSupported = !!xhrSupported;\n\n\tjQuery.ajaxTransport(function (options) {\n\t\tvar callback, errorCallback;\n\n\t\t// Cross domain only allowed if supported through XMLHttpRequest\n\t\tif (support.cors || xhrSupported && !options.crossDomain) {\n\t\t\treturn {\n\t\t\t\tsend: function (headers, complete) {\n\t\t\t\t\tvar i,\n\t\t\t\t\t\txhr = options.xhr();\n\n\t\t\t\t\txhr.open(\n\t\t\t\t\t\toptions.type,\n\t\t\t\t\t\toptions.url,\n\t\t\t\t\t\toptions.async,\n\t\t\t\t\t\toptions.username,\n\t\t\t\t\t\toptions.password\n\t\t\t\t\t);\n\n\t\t\t\t\t// Apply custom fields if provided\n\t\t\t\t\tif (options.xhrFields) {\n\t\t\t\t\t\tfor (i in options.xhrFields) {\n\t\t\t\t\t\t\txhr[i] = options.xhrFields[i];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Override mime type if needed\n\t\t\t\t\tif (options.mimeType && xhr.overrideMimeType) {\n\t\t\t\t\t\txhr.overrideMimeType(options.mimeType);\n\t\t\t\t\t}\n\n\t\t\t\t\t// X-Requested-With header\n\t\t\t\t\t// For cross-domain requests, seeing as conditions for a preflight are\n\t\t\t\t\t// akin to a jigsaw puzzle, we simply never set it to be sure.\n\t\t\t\t\t// (it can always be set on a per-request basis or even using ajaxSetup)\n\t\t\t\t\t// For same-domain requests, won't change header if already provided.\n\t\t\t\t\tif (!options.crossDomain && !headers[\"X-Requested-With\"]) {\n\t\t\t\t\t\theaders[\"X-Requested-With\"] = \"XMLHttpRequest\";\n\t\t\t\t\t}\n\n\t\t\t\t\t// Set headers\n\t\t\t\t\tfor (i in headers) {\n\t\t\t\t\t\txhr.setRequestHeader(i, headers[i]);\n\t\t\t\t\t}\n\n\t\t\t\t\t// Callback\n\t\t\t\t\tcallback = function (type) {\n\t\t\t\t\t\treturn function () {\n\t\t\t\t\t\t\tif (callback) {\n\t\t\t\t\t\t\t\tcallback = errorCallback = xhr.onload =\n\t\t\t\t\t\t\t\t\txhr.onerror = xhr.onabort = xhr.ontimeout =\n\t\t\t\t\t\t\t\t\txhr.onreadystatechange = null;\n\n\t\t\t\t\t\t\t\tif (type === \"abort\") {\n\t\t\t\t\t\t\t\t\txhr.abort();\n\t\t\t\t\t\t\t\t} else if (type === \"error\") {\n\n\t\t\t\t\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t\t\t\t\t// On a manual native abort, IE9 throws\n\t\t\t\t\t\t\t\t\t// errors on any property access that is not readyState\n\t\t\t\t\t\t\t\t\tif (typeof xhr.status !== \"number\") {\n\t\t\t\t\t\t\t\t\t\tcomplete(0, \"error\");\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tcomplete(\n\n\t\t\t\t\t\t\t\t\t\t\t// File: protocol always yields status 0; see trac-8605, trac-14207\n\t\t\t\t\t\t\t\t\t\t\txhr.status,\n\t\t\t\t\t\t\t\t\t\t\txhr.statusText\n\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tcomplete(\n\t\t\t\t\t\t\t\t\t\txhrSuccessStatus[xhr.status] || xhr.status,\n\t\t\t\t\t\t\t\t\t\txhr.statusText,\n\n\t\t\t\t\t\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t\t\t\t\t\t// IE9 has no XHR2 but throws on binary (trac-11426)\n\t\t\t\t\t\t\t\t\t\t// For XHR2 non-text, let the caller handle it (gh-2498)\n\t\t\t\t\t\t\t\t\t\t(xhr.responseType || \"text\") !== \"text\" ||\n\t\t\t\t\t\t\t\t\t\t\ttypeof xhr.responseText !== \"string\" ?\n\t\t\t\t\t\t\t\t\t\t\t{ binary: xhr.response } :\n\t\t\t\t\t\t\t\t\t\t\t{ text: xhr.responseText },\n\t\t\t\t\t\t\t\t\t\txhr.getAllResponseHeaders()\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\t\t\t\t\t};\n\n\t\t\t\t\t// Listen to events\n\t\t\t\t\txhr.onload = callback();\n\t\t\t\t\terrorCallback = xhr.onerror = xhr.ontimeout = callback(\"error\");\n\n\t\t\t\t\t// Support: IE 9 only\n\t\t\t\t\t// Use onreadystatechange to replace onabort\n\t\t\t\t\t// to handle uncaught aborts\n\t\t\t\t\tif (xhr.onabort !== undefined) {\n\t\t\t\t\t\txhr.onabort = errorCallback;\n\t\t\t\t\t} else {\n\t\t\t\t\t\txhr.onreadystatechange = function () {\n\n\t\t\t\t\t\t\t// Check readyState before timeout as it changes\n\t\t\t\t\t\t\tif (xhr.readyState === 4) {\n\n\t\t\t\t\t\t\t\t// Allow onerror to be called first,\n\t\t\t\t\t\t\t\t// but that will not handle a native abort\n\t\t\t\t\t\t\t\t// Also, save errorCallback to a variable\n\t\t\t\t\t\t\t\t// as xhr.onerror cannot be accessed\n\t\t\t\t\t\t\t\twindow.setTimeout(function () {\n\t\t\t\t\t\t\t\t\tif (callback) {\n\t\t\t\t\t\t\t\t\t\terrorCallback();\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\t// Create the abort callback\n\t\t\t\t\tcallback = callback(\"abort\");\n\n\t\t\t\t\ttry {\n\n\t\t\t\t\t\t// Do send the request (this may raise an exception)\n\t\t\t\t\t\txhr.send(options.hasContent && options.data || null);\n\t\t\t\t\t} catch (e) {\n\n\t\t\t\t\t\t// trac-14683: Only rethrow if this hasn't been notified as an error yet\n\t\t\t\t\t\tif (callback) {\n\t\t\t\t\t\t\tthrow e;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\t\tabort: function () {\n\t\t\t\t\tif (callback) {\n\t\t\t\t\t\tcallback();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t});\n\n\n\n\n\t// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432)\n\tjQuery.ajaxPrefilter(function (s) {\n\t\tif (s.crossDomain) {\n\t\t\ts.contents.script = false;\n\t\t}\n\t});\n\n\t// Install script dataType\n\tjQuery.ajaxSetup({\n\t\taccepts: {\n\t\t\tscript: \"text/javascript, application/javascript, \" +\n\t\t\t\t\"application/ecmascript, application/x-ecmascript\"\n\t\t},\n\t\tcontents: {\n\t\t\tscript: /\\b(?:java|ecma)script\\b/\n\t\t},\n\t\tconverters: {\n\t\t\t\"text script\": function (text) {\n\t\t\t\tjQuery.globalEval(text);\n\t\t\t\treturn text;\n\t\t\t}\n\t\t}\n\t});\n\n\t// Handle cache's special case and crossDomain\n\tjQuery.ajaxPrefilter(\"script\", function (s) {\n\t\tif (s.cache === undefined) {\n\t\t\ts.cache = false;\n\t\t}\n\t\tif (s.crossDomain) {\n\t\t\ts.type = \"GET\";\n\t\t}\n\t});\n\n\t// Bind script tag hack transport\n\tjQuery.ajaxTransport(\"script\", function (s) {\n\n\t\t// This transport only deals with cross domain or forced-by-attrs requests\n\t\tif (s.crossDomain || s.scriptAttrs) {\n\t\t\tvar script, callback;\n\t\t\treturn {\n\t\t\t\tsend: function (_, complete) {\n\t\t\t\t\tscript = jQuery(\"<script>\")\n\t\t\t\t\t\t.attr(s.scriptAttrs || {})\n\t\t\t\t\t\t.prop({ charset: s.scriptCharset, src: s.url })\n\t\t\t\t\t\t.on(\"load error\", callback = function (evt) {\n\t\t\t\t\t\t\tscript.remove();\n\t\t\t\t\t\t\tcallback = null;\n\t\t\t\t\t\t\tif (evt) {\n\t\t\t\t\t\t\t\tcomplete(evt.type === \"error\" ? 404 : 200, evt.type);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\n\t\t\t\t\t// Use native DOM manipulation to avoid our domManip AJAX trickery\n\t\t\t\t\tdocument.head.appendChild(script[0]);\n\t\t\t\t},\n\t\t\t\tabort: function () {\n\t\t\t\t\tif (callback) {\n\t\t\t\t\t\tcallback();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t});\n\n\n\n\n\tvar oldCallbacks = [],\n\t\trjsonp = /(=)\\?(?=&|$)|\\?\\?/;\n\n\t// Default jsonp settings\n\tjQuery.ajaxSetup({\n\t\tjsonp: \"callback\",\n\t\tjsonpCallback: function () {\n\t\t\tvar callback = oldCallbacks.pop() || (jQuery.expando + \"_\" + (nonce.guid++));\n\t\t\tthis[callback] = true;\n\t\t\treturn callback;\n\t\t}\n\t});\n\n\t// Detect, normalize options and install callbacks for jsonp requests\n\tjQuery.ajaxPrefilter(\"json jsonp\", function (s, originalSettings, jqXHR) {\n\n\t\tvar callbackName, overwritten, responseContainer,\n\t\t\tjsonProp = s.jsonp !== false && (rjsonp.test(s.url) ?\n\t\t\t\t\"url\" :\n\t\t\t\ttypeof s.data === \"string\" &&\n\t\t\t\t(s.contentType || \"\")\n\t\t\t\t\t.indexOf(\"application/x-www-form-urlencoded\") === 0 &&\n\t\t\t\trjsonp.test(s.data) && \"data\"\n\t\t\t);\n\n\t\t// Handle iff the expected data type is \"jsonp\" or we have a parameter to set\n\t\tif (jsonProp || s.dataTypes[0] === \"jsonp\") {\n\n\t\t\t// Get callback name, remembering preexisting value associated with it\n\t\t\tcallbackName = s.jsonpCallback = isFunction(s.jsonpCallback) ?\n\t\t\t\ts.jsonpCallback() :\n\t\t\t\ts.jsonpCallback;\n\n\t\t\t// Insert callback into url or form data\n\t\t\tif (jsonProp) {\n\t\t\t\ts[jsonProp] = s[jsonProp].replace(rjsonp, \"$1\" + callbackName);\n\t\t\t} else if (s.jsonp !== false) {\n\t\t\t\ts.url += (rquery.test(s.url) ? \"&\" : \"?\") + s.jsonp + \"=\" + callbackName;\n\t\t\t}\n\n\t\t\t// Use data converter to retrieve json after script execution\n\t\t\ts.converters[\"script json\"] = function () {\n\t\t\t\tif (!responseContainer) {\n\t\t\t\t\tjQuery.error(callbackName + \" was not called\");\n\t\t\t\t}\n\t\t\t\treturn responseContainer[0];\n\t\t\t};\n\n\t\t\t// Force json dataType\n\t\t\ts.dataTypes[0] = \"json\";\n\n\t\t\t// Install callback\n\t\t\toverwritten = window[callbackName];\n\t\t\twindow[callbackName] = function () {\n\t\t\t\tresponseContainer = arguments;\n\t\t\t};\n\n\t\t\t// Clean-up function (fires after converters)\n\t\t\tjqXHR.always(function () {\n\n\t\t\t\t// If previous value didn't exist - remove it\n\t\t\t\tif (overwritten === undefined) {\n\t\t\t\t\tjQuery(window).removeProp(callbackName);\n\n\t\t\t\t\t// Otherwise restore preexisting value\n\t\t\t\t} else {\n\t\t\t\t\twindow[callbackName] = overwritten;\n\t\t\t\t}\n\n\t\t\t\t// Save back as free\n\t\t\t\tif (s[callbackName]) {\n\n\t\t\t\t\t// Make sure that re-using the options doesn't screw things around\n\t\t\t\t\ts.jsonpCallback = originalSettings.jsonpCallback;\n\n\t\t\t\t\t// Save the callback name for future use\n\t\t\t\t\toldCallbacks.push(callbackName);\n\t\t\t\t}\n\n\t\t\t\t// Call if it was a function and we have a response\n\t\t\t\tif (responseContainer && isFunction(overwritten)) {\n\t\t\t\t\toverwritten(responseContainer[0]);\n\t\t\t\t}\n\n\t\t\t\tresponseContainer = overwritten = undefined;\n\t\t\t});\n\n\t\t\t// Delegate to script\n\t\t\treturn \"script\";\n\t\t}\n\t});\n\n\n\n\n\t// Support: Safari 8 only\n\t// In Safari 8 documents created via document.implementation.createHTMLDocument\n\t// collapse sibling forms: the second one becomes a child of the first one.\n\t// Because of that, this security measure has to be disabled in Safari 8.\n\t// https://bugs.webkit.org/show_bug.cgi?id=137337\n\tsupport.createHTMLDocument = (function () {\n\t\tvar body = document.implementation.createHTMLDocument(\"\").body;\n\t\tbody.innerHTML = \"<form></form><form></form>\";\n\t\treturn body.childNodes.length === 2;\n\t})();\n\n\n\t// Argument \"data\" should be string of html\n\t// context (optional): If specified, the fragment will be created in this context,\n\t// defaults to document\n\t// keepScripts (optional): If true, will include scripts passed in the html string\n\tjQuery.parseHTML = function (data, context, keepScripts) {\n\t\tif (typeof data !== \"string\") {\n\t\t\treturn [];\n\t\t}\n\t\tif (typeof context === \"boolean\") {\n\t\t\tkeepScripts = context;\n\t\t\tcontext = false;\n\t\t}\n\n\t\tvar base, parsed, scripts;\n\n\t\tif (!context) {\n\n\t\t\t// Stop scripts or inline event handlers from being executed immediately\n\t\t\t// by using document.implementation\n\t\t\tif (support.createHTMLDocument) {\n\t\t\t\tcontext = document.implementation.createHTMLDocument(\"\");\n\n\t\t\t\t// Set the base href for the created document\n\t\t\t\t// so any parsed elements with URLs\n\t\t\t\t// are based on the document's URL (gh-2965)\n\t\t\t\tbase = context.createElement(\"base\");\n\t\t\t\tbase.href = document.location.href;\n\t\t\t\tcontext.head.appendChild(base);\n\t\t\t} else {\n\t\t\t\tcontext = document;\n\t\t\t}\n\t\t}\n\n\t\tparsed = rsingleTag.exec(data);\n\t\tscripts = !keepScripts && [];\n\n\t\t// Single tag\n\t\tif (parsed) {\n\t\t\treturn [context.createElement(parsed[1])];\n\t\t}\n\n\t\tparsed = buildFragment([data], context, scripts);\n\n\t\tif (scripts && scripts.length) {\n\t\t\tjQuery(scripts).remove();\n\t\t}\n\n\t\treturn jQuery.merge([], parsed.childNodes);\n\t};\n\n\n\t/**\n\t * Load a url into a page\n\t */\n\tjQuery.fn.load = function (url, params, callback) {\n\t\tvar selector, type, response,\n\t\t\tself = this,\n\t\t\toff = url.indexOf(\" \");\n\n\t\tif (off > -1) {\n\t\t\tselector = stripAndCollapse(url.slice(off));\n\t\t\turl = url.slice(0, off);\n\t\t}\n\n\t\t// If it's a function\n\t\tif (isFunction(params)) {\n\n\t\t\t// We assume that it's the callback\n\t\t\tcallback = params;\n\t\t\tparams = undefined;\n\n\t\t\t// Otherwise, build a param string\n\t\t} else if (params && typeof params === \"object\") {\n\t\t\ttype = \"POST\";\n\t\t}\n\n\t\t// If we have elements to modify, make the request\n\t\tif (self.length > 0) {\n\t\t\tjQuery.ajax({\n\t\t\t\turl: url,\n\n\t\t\t\t// If \"type\" variable is undefined, then \"GET\" method will be used.\n\t\t\t\t// Make value of this field explicit since\n\t\t\t\t// user can override it through ajaxSetup method\n\t\t\t\ttype: type || \"GET\",\n\t\t\t\tdataType: \"html\",\n\t\t\t\tdata: params\n\t\t\t}).done(function (responseText) {\n\n\t\t\t\t// Save response for use in complete callback\n\t\t\t\tresponse = arguments;\n\n\t\t\t\tself.html(selector ?\n\n\t\t\t\t\t// If a selector was specified, locate the right elements in a dummy div\n\t\t\t\t\t// Exclude scripts to avoid IE 'Permission Denied' errors\n\t\t\t\t\tjQuery(\"<div>\").append(jQuery.parseHTML(responseText)).find(selector) :\n\n\t\t\t\t\t// Otherwise use the full result\n\t\t\t\t\tresponseText);\n\n\t\t\t\t// If the request succeeds, this function gets \"data\", \"status\", \"jqXHR\"\n\t\t\t\t// but they are ignored because response was set above.\n\t\t\t\t// If it fails, this function gets \"jqXHR\", \"status\", \"error\"\n\t\t\t}).always(callback && function (jqXHR, status) {\n\t\t\t\tself.each(function () {\n\t\t\t\t\tcallback.apply(this, response || [jqXHR.responseText, status, jqXHR]);\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\n\t\treturn this;\n\t};\n\n\n\n\n\tjQuery.expr.pseudos.animated = function (elem) {\n\t\treturn jQuery.grep(jQuery.timers, function (fn) {\n\t\t\treturn elem === fn.elem;\n\t\t}).length;\n\t};\n\n\n\n\n\tjQuery.offset = {\n\t\tsetOffset: function (elem, options, i) {\n\t\t\tvar curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition,\n\t\t\t\tposition = jQuery.css(elem, \"position\"),\n\t\t\t\tcurElem = jQuery(elem),\n\t\t\t\tprops = {};\n\n\t\t\t// Set position first, in-case top/left are set even on static elem\n\t\t\tif (position === \"static\") {\n\t\t\t\telem.style.position = \"relative\";\n\t\t\t}\n\n\t\t\tcurOffset = curElem.offset();\n\t\t\tcurCSSTop = jQuery.css(elem, \"top\");\n\t\t\tcurCSSLeft = jQuery.css(elem, \"left\");\n\t\t\tcalculatePosition = (position === \"absolute\" || position === \"fixed\") &&\n\t\t\t\t(curCSSTop + curCSSLeft).indexOf(\"auto\") > -1;\n\n\t\t\t// Need to be able to calculate position if either\n\t\t\t// top or left is auto and position is either absolute or fixed\n\t\t\tif (calculatePosition) {\n\t\t\t\tcurPosition = curElem.position();\n\t\t\t\tcurTop = curPosition.top;\n\t\t\t\tcurLeft = curPosition.left;\n\n\t\t\t} else {\n\t\t\t\tcurTop = parseFloat(curCSSTop) || 0;\n\t\t\t\tcurLeft = parseFloat(curCSSLeft) || 0;\n\t\t\t}\n\n\t\t\tif (isFunction(options)) {\n\n\t\t\t\t// Use jQuery.extend here to allow modification of coordinates argument (gh-1848)\n\t\t\t\toptions = options.call(elem, i, jQuery.extend({}, curOffset));\n\t\t\t}\n\n\t\t\tif (options.top != null) {\n\t\t\t\tprops.top = (options.top - curOffset.top) + curTop;\n\t\t\t}\n\t\t\tif (options.left != null) {\n\t\t\t\tprops.left = (options.left - curOffset.left) + curLeft;\n\t\t\t}\n\n\t\t\tif (\"using\" in options) {\n\t\t\t\toptions.using.call(elem, props);\n\n\t\t\t} else {\n\t\t\t\tcurElem.css(props);\n\t\t\t}\n\t\t}\n\t};\n\n\tjQuery.fn.extend({\n\n\t\t// offset() relates an element's border box to the document origin\n\t\toffset: function (options) {\n\n\t\t\t// Preserve chaining for setter\n\t\t\tif (arguments.length) {\n\t\t\t\treturn options === undefined ?\n\t\t\t\t\tthis :\n\t\t\t\t\tthis.each(function (i) {\n\t\t\t\t\t\tjQuery.offset.setOffset(this, options, i);\n\t\t\t\t\t});\n\t\t\t}\n\n\t\t\tvar rect, win,\n\t\t\t\telem = this[0];\n\n\t\t\tif (!elem) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Return zeros for disconnected and hidden (display: none) elements (gh-2310)\n\t\t\t// Support: IE <=11 only\n\t\t\t// Running getBoundingClientRect on a\n\t\t\t// disconnected node in IE throws an error\n\t\t\tif (!elem.getClientRects().length) {\n\t\t\t\treturn { top: 0, left: 0 };\n\t\t\t}\n\n\t\t\t// Get document-relative position by adding viewport scroll to viewport-relative gBCR\n\t\t\trect = elem.getBoundingClientRect();\n\t\t\twin = elem.ownerDocument.defaultView;\n\t\t\treturn {\n\t\t\t\ttop: rect.top + win.pageYOffset,\n\t\t\t\tleft: rect.left + win.pageXOffset\n\t\t\t};\n\t\t},\n\n\t\t// position() relates an element's margin box to its offset parent's padding box\n\t\t// This corresponds to the behavior of CSS absolute positioning\n\t\tposition: function () {\n\t\t\tif (!this[0]) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar offsetParent, offset, doc,\n\t\t\t\telem = this[0],\n\t\t\t\tparentOffset = { top: 0, left: 0 };\n\n\t\t\t// position:fixed elements are offset from the viewport, which itself always has zero offset\n\t\t\tif (jQuery.css(elem, \"position\") === \"fixed\") {\n\n\t\t\t\t// Assume position:fixed implies availability of getBoundingClientRect\n\t\t\t\toffset = elem.getBoundingClientRect();\n\n\t\t\t} else {\n\t\t\t\toffset = this.offset();\n\n\t\t\t\t// Account for the *real* offset parent, which can be the document or its root element\n\t\t\t\t// when a statically positioned element is identified\n\t\t\t\tdoc = elem.ownerDocument;\n\t\t\t\toffsetParent = elem.offsetParent || doc.documentElement;\n\t\t\t\twhile (offsetParent &&\n\t\t\t\t\t(offsetParent === doc.body || offsetParent === doc.documentElement) &&\n\t\t\t\t\tjQuery.css(offsetParent, \"position\") === \"static\") {\n\n\t\t\t\t\toffsetParent = offsetParent.parentNode;\n\t\t\t\t}\n\t\t\t\tif (offsetParent && offsetParent !== elem && offsetParent.nodeType === 1) {\n\n\t\t\t\t\t// Incorporate borders into its offset, since they are outside its content origin\n\t\t\t\t\tparentOffset = jQuery(offsetParent).offset();\n\t\t\t\t\tparentOffset.top += jQuery.css(offsetParent, \"borderTopWidth\", true);\n\t\t\t\t\tparentOffset.left += jQuery.css(offsetParent, \"borderLeftWidth\", true);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Subtract parent offsets and element margins\n\t\t\treturn {\n\t\t\t\ttop: offset.top - parentOffset.top - jQuery.css(elem, \"marginTop\", true),\n\t\t\t\tleft: offset.left - parentOffset.left - jQuery.css(elem, \"marginLeft\", true)\n\t\t\t};\n\t\t},\n\n\t\t// This method will return documentElement in the following cases:\n\t\t// 1) For the element inside the iframe without offsetParent, this method will return\n\t\t//    documentElement of the parent window\n\t\t// 2) For the hidden or detached element\n\t\t// 3) For body or html element, i.e. in case of the html node - it will return itself\n\t\t//\n\t\t// but those exceptions were never presented as a real life use-cases\n\t\t// and might be considered as more preferable results.\n\t\t//\n\t\t// This logic, however, is not guaranteed and can change at any point in the future\n\t\toffsetParent: function () {\n\t\t\treturn this.map(function () {\n\t\t\t\tvar offsetParent = this.offsetParent;\n\n\t\t\t\twhile (offsetParent && jQuery.css(offsetParent, \"position\") === \"static\") {\n\t\t\t\t\toffsetParent = offsetParent.offsetParent;\n\t\t\t\t}\n\n\t\t\t\treturn offsetParent || documentElement;\n\t\t\t});\n\t\t}\n\t});\n\n\t// Create scrollLeft and scrollTop methods\n\tjQuery.each({ scrollLeft: \"pageXOffset\", scrollTop: \"pageYOffset\" }, function (method, prop) {\n\t\tvar top = \"pageYOffset\" === prop;\n\n\t\tjQuery.fn[method] = function (val) {\n\t\t\treturn access(this, function (elem, method, val) {\n\n\t\t\t\t// Coalesce documents and windows\n\t\t\t\tvar win;\n\t\t\t\tif (isWindow(elem)) {\n\t\t\t\t\twin = elem;\n\t\t\t\t} else if (elem.nodeType === 9) {\n\t\t\t\t\twin = elem.defaultView;\n\t\t\t\t}\n\n\t\t\t\tif (val === undefined) {\n\t\t\t\t\treturn win ? win[prop] : elem[method];\n\t\t\t\t}\n\n\t\t\t\tif (win) {\n\t\t\t\t\twin.scrollTo(\n\t\t\t\t\t\t!top ? val : win.pageXOffset,\n\t\t\t\t\t\ttop ? val : win.pageYOffset\n\t\t\t\t\t);\n\n\t\t\t\t} else {\n\t\t\t\t\telem[method] = val;\n\t\t\t\t}\n\t\t\t}, method, val, arguments.length);\n\t\t};\n\t});\n\n\t// Support: Safari <=7 - 9.1, Chrome <=37 - 49\n\t// Add the top/left cssHooks using jQuery.fn.position\n\t// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084\n\t// Blink bug: https://bugs.chromium.org/p/chromium/issues/detail?id=589347\n\t// getComputedStyle returns percent when specified for top/left/bottom/right;\n\t// rather than make the css module depend on the offset module, just check for it here\n\tjQuery.each([\"top\", \"left\"], function (_i, prop) {\n\t\tjQuery.cssHooks[prop] = addGetHookIf(support.pixelPosition,\n\t\t\tfunction (elem, computed) {\n\t\t\t\tif (computed) {\n\t\t\t\t\tcomputed = curCSS(elem, prop);\n\n\t\t\t\t\t// If curCSS returns percentage, fallback to offset\n\t\t\t\t\treturn rnumnonpx.test(computed) ?\n\t\t\t\t\t\tjQuery(elem).position()[prop] + \"px\" :\n\t\t\t\t\t\tcomputed;\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\t});\n\n\n\t// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods\n\tjQuery.each({ Height: \"height\", Width: \"width\" }, function (name, type) {\n\t\tjQuery.each({\n\t\t\tpadding: \"inner\" + name,\n\t\t\tcontent: type,\n\t\t\t\"\": \"outer\" + name\n\t\t}, function (defaultExtra, funcName) {\n\n\t\t\t// Margin is only for outerHeight, outerWidth\n\t\t\tjQuery.fn[funcName] = function (margin, value) {\n\t\t\t\tvar chainable = arguments.length && (defaultExtra || typeof margin !== \"boolean\"),\n\t\t\t\t\textra = defaultExtra || (margin === true || value === true ? \"margin\" : \"border\");\n\n\t\t\t\treturn access(this, function (elem, type, value) {\n\t\t\t\t\tvar doc;\n\n\t\t\t\t\tif (isWindow(elem)) {\n\n\t\t\t\t\t\t// $( window ).outerWidth/Height return w/h including scrollbars (gh-1729)\n\t\t\t\t\t\treturn funcName.indexOf(\"outer\") === 0 ?\n\t\t\t\t\t\t\telem[\"inner\" + name] :\n\t\t\t\t\t\t\telem.document.documentElement[\"client\" + name];\n\t\t\t\t\t}\n\n\t\t\t\t\t// Get document width or height\n\t\t\t\t\tif (elem.nodeType === 9) {\n\t\t\t\t\t\tdoc = elem.documentElement;\n\n\t\t\t\t\t\t// Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height],\n\t\t\t\t\t\t// whichever is greatest\n\t\t\t\t\t\treturn Math.max(\n\t\t\t\t\t\t\telem.body[\"scroll\" + name], doc[\"scroll\" + name],\n\t\t\t\t\t\t\telem.body[\"offset\" + name], doc[\"offset\" + name],\n\t\t\t\t\t\t\tdoc[\"client\" + name]\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\n\t\t\t\t\treturn value === undefined ?\n\n\t\t\t\t\t\t// Get width or height on the element, requesting but not forcing parseFloat\n\t\t\t\t\t\tjQuery.css(elem, type, extra) :\n\n\t\t\t\t\t\t// Set width or height on the element\n\t\t\t\t\t\tjQuery.style(elem, type, value, extra);\n\t\t\t\t}, type, chainable ? margin : undefined, chainable);\n\t\t\t};\n\t\t});\n\t});\n\n\n\tjQuery.each([\n\t\t\"ajaxStart\",\n\t\t\"ajaxStop\",\n\t\t\"ajaxComplete\",\n\t\t\"ajaxError\",\n\t\t\"ajaxSuccess\",\n\t\t\"ajaxSend\"\n\t], function (_i, type) {\n\t\tjQuery.fn[type] = function (fn) {\n\t\t\treturn this.on(type, fn);\n\t\t};\n\t});\n\n\n\n\n\tjQuery.fn.extend({\n\n\t\tbind: function (types, data, fn) {\n\t\t\treturn this.on(types, null, data, fn);\n\t\t},\n\t\tunbind: function (types, fn) {\n\t\t\treturn this.off(types, null, fn);\n\t\t},\n\n\t\tdelegate: function (selector, types, data, fn) {\n\t\t\treturn this.on(types, selector, data, fn);\n\t\t},\n\t\tundelegate: function (selector, types, fn) {\n\n\t\t\t// ( namespace ) or ( selector, types [, fn] )\n\t\t\treturn arguments.length === 1 ?\n\t\t\t\tthis.off(selector, \"**\") :\n\t\t\t\tthis.off(types, selector || \"**\", fn);\n\t\t},\n\n\t\thover: function (fnOver, fnOut) {\n\t\t\treturn this.mouseenter(fnOver).mouseleave(fnOut || fnOver);\n\t\t}\n\t});\n\n\tjQuery.each(\n\t\t(\"blur focus focusin focusout resize scroll click dblclick \" +\n\t\t\t\"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave \" +\n\t\t\t\"change select submit keydown keypress keyup contextmenu\").split(\" \"),\n\t\tfunction (_i, name) {\n\n\t\t\t// Handle event binding\n\t\t\tjQuery.fn[name] = function (data, fn) {\n\t\t\t\treturn arguments.length > 0 ?\n\t\t\t\t\tthis.on(name, null, data, fn) :\n\t\t\t\t\tthis.trigger(name);\n\t\t\t};\n\t\t}\n\t);\n\n\n\n\n\t// Support: Android <=4.0 only\n\t// Make sure we trim BOM and NBSP\n\t// Require that the \"whitespace run\" starts from a non-whitespace\n\t// to avoid O(N^2) behavior when the engine would try matching \"\\s+$\" at each space position.\n\tvar rtrim = /^[\\s\\uFEFF\\xA0]+|([^\\s\\uFEFF\\xA0])[\\s\\uFEFF\\xA0]+$/g;\n\n\t// Bind a function to a context, optionally partially applying any\n\t// arguments.\n\t// jQuery.proxy is deprecated to promote standards (specifically Function#bind)\n\t// However, it is not slated for removal any time soon\n\tjQuery.proxy = function (fn, context) {\n\t\tvar tmp, args, proxy;\n\n\t\tif (typeof context === \"string\") {\n\t\t\ttmp = fn[context];\n\t\t\tcontext = fn;\n\t\t\tfn = tmp;\n\t\t}\n\n\t\t// Quick check to determine if target is callable, in the spec\n\t\t// this throws a TypeError, but we will just return undefined.\n\t\tif (!isFunction(fn)) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\t// Simulated bind\n\t\targs = slice.call(arguments, 2);\n\t\tproxy = function () {\n\t\t\treturn fn.apply(context || this, args.concat(slice.call(arguments)));\n\t\t};\n\n\t\t// Set the guid of unique handler to the same of original handler, so it can be removed\n\t\tproxy.guid = fn.guid = fn.guid || jQuery.guid++;\n\n\t\treturn proxy;\n\t};\n\n\tjQuery.holdReady = function (hold) {\n\t\tif (hold) {\n\t\t\tjQuery.readyWait++;\n\t\t} else {\n\t\t\tjQuery.ready(true);\n\t\t}\n\t};\n\tjQuery.isArray = Array.isArray;\n\tjQuery.parseJSON = JSON.parse;\n\tjQuery.nodeName = nodeName;\n\tjQuery.isFunction = isFunction;\n\tjQuery.isWindow = isWindow;\n\tjQuery.camelCase = camelCase;\n\tjQuery.type = toType;\n\n\tjQuery.now = Date.now;\n\n\tjQuery.isNumeric = function (obj) {\n\n\t\t// As of jQuery 3.0, isNumeric is limited to\n\t\t// strings and numbers (primitives or objects)\n\t\t// that can be coerced to finite numbers (gh-2662)\n\t\tvar type = jQuery.type(obj);\n\t\treturn (type === \"number\" || type === \"string\") &&\n\n\t\t\t// parseFloat NaNs numeric-cast false positives (\"\")\n\t\t\t// ...but misinterprets leading-number strings, particularly hex literals (\"0x...\")\n\t\t\t// subtraction forces infinities to NaN\n\t\t\t!isNaN(obj - parseFloat(obj));\n\t};\n\n\tjQuery.trim = function (text) {\n\t\treturn text == null ?\n\t\t\t\"\" :\n\t\t\t(text + \"\").replace(rtrim, \"$1\");\n\t};\n\n\n\n\t// Register as a named AMD module, since jQuery can be concatenated with other\n\t// files that may use define, but not via a proper concatenation script that\n\t// understands anonymous AMD modules. A named AMD is safest and most robust\n\t// way to register. Lowercase jquery is used because AMD module names are\n\t// derived from file names, and jQuery is normally delivered in a lowercase\n\t// file name. Do this after creating the global so that if an AMD module wants\n\t// to call noConflict to hide this version of jQuery, it will work.\n\n\t// Note that for maximum portability, libraries that are not jQuery should\n\t// declare themselves as anonymous modules, and avoid setting a global if an\n\t// AMD loader is present. jQuery is a special case. For more information, see\n\t// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon\n\n\tif (typeof define === \"function\" && define.amd) {\n\t\tdefine(\"jquery\", [], function () {\n\t\t\treturn jQuery;\n\t\t});\n\t}\n\n\n\n\n\tvar\n\n\t\t// Map over jQuery in case of overwrite\n\t\t_jQuery = window.jQuery,\n\n\t\t// Map over the $ in case of overwrite\n\t\t_$ = window.$;\n\n\tjQuery.noConflict = function (deep) {\n\t\tif (window.$ === jQuery) {\n\t\t\twindow.$ = _$;\n\t\t}\n\n\t\tif (deep && window.jQuery === jQuery) {\n\t\t\twindow.jQuery = _jQuery;\n\t\t}\n\n\t\treturn jQuery;\n\t};\n\n\t// Expose jQuery and $ identifiers, even in AMD\n\t// (trac-7102#comment:10, https://github.com/jquery/jquery/pull/557)\n\t// and CommonJS for browser emulators (trac-13566)\n\tif (typeof noGlobal === \"undefined\") {\n\t\twindow.jQuery = window.$ = jQuery;\n\t}\n\n\n\n\n\treturn jQuery;\n});"
  },
  {
    "path": "src/sourceDev.WebApp/SharedThemes/minty/Shared/_Layout.cshtml",
    "content": "﻿@inject ISiteContextResolver siteResolver\n@inject ICoreThemeHelper themeHelper\n@{\n    var themeSettings = themeHelper.GetThemeSettings();\n    @*\n        These settings can be set by a main view to show additional columns.\n        Views that push content into the optional sections SideNav, AsidePrimary, and AsideSecondary\n        are obligated to set the needed viewtate property to true to show the section,\n        otherwise an error will occur.\n        The sideNav column also supports a toggle so it can be hidden and toggled visible even though it renders.\n    *@\n    bool sideNavVisible = true.Equals(ViewData[\"SideNavVisible\"]);\n    string sideNavToggleClass = ViewData[\"SideNavToggle\"]?.ToString() ?? \"collapse\";\n    bool asidePrimaryVisible = true.Equals(ViewData[\"AsidePrimaryVisible\"]);\n    bool asideSecondaryVisible = true.Equals(ViewData[\"AsideSecondaryVisible\"]);\n    var Tenant = await siteResolver.ResolveSite(Context.Request.Host.Host, Context.Request.Path);\n    var siteRoot = \"\";\n    if (!string.IsNullOrWhiteSpace(Tenant.SiteFolderName)) { siteRoot = \"/\" + Tenant.SiteFolderName; }\n    \n}\n<!DOCTYPE html>\n<html lang=\"@CultureInfo.CurrentUICulture.Name\">\n<head>\n    <meta charset=\"utf-8\" />\n    <title>@ViewData[\"Title\"] - @(Tenant?.SiteName ?? \"Sample\")</title>\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1, shrink-to-fit=no\">\n    @RenderSection(\"Meta\", required: false)\n    <environment names=\"Development\">\n        <link rel=\"stylesheet\" href=\"~/css/bootstrap.css\" cs-resolve-theme-resource=\"true\" cs-shared-theme=\"true\" cs-tenant=\"@Tenant\" />\n        <link rel=\"stylesheet\" href=\"~/css/fontawesome-all.min.css\" cs-resolve-theme-resource=\"true\" cs-shared-theme=\"true\" cs-tenant=\"@Tenant\" />\n        <link rel=\"stylesheet\" href=\"~/css/site.css\" cs-resolve-theme-resource=\"true\" cs-shared-theme=\"true\" cs-tenant=\"@Tenant\" asp-append-version=\"true\" />\n    </environment>\n    <environment names=\"Staging,Production\">\n        <link rel=\"stylesheet\" href=\"~/css/bootstrap.min.css\" cs-resolve-theme-resource=\"true\" cs-shared-theme=\"true\" cs-tenant=\"@Tenant\" />\n        <link rel=\"stylesheet\" href=\"~/css/fontawesome-all.min.css\" cs-resolve-theme-resource=\"true\" cs-shared-theme=\"true\" cs-tenant=\"@Tenant\" />\n        <link rel=\"stylesheet\" href=\"~/css/site.min.css\" cs-resolve-theme-resource=\"true\" cs-shared-theme=\"true\" cs-tenant=\"@Tenant\" asp-append-version=\"true\" />\n    </environment>\n    @RenderSection(\"Styles\", required: false)    \n    \n    <google-analytics profile-id=\"@Tenant.GoogleAnalyticsProfileId\" user-id=\"@User.GetUserId()\"></google-analytics>\n    <base href=\"@Context.Request.Path\" />\n</head>\n<body class=\"d-flex flex-column @ViewData[\"BodyClass\"]\">\n    <header class=\"bg-white\">\n        <a id=\"skippy\" class=\"visually-hidden visually-hidden-focusable\" href=\"#content\">\n            <div class=\"container\">\n                <span class=\"skiplink-text\">Skip to main content</span>\n            </div>\n        </a>\n        <div class=\"fixed-top container-fluid brand-header bg-white\">\n            <div class=\"d-flex align-items-center bg-white\">\n                @if (!string.IsNullOrWhiteSpace(Tenant.LogoUrl))\n                {\n                    <div>\n                         <partial name=\"SiteLogoPartial\" model=\"@Tenant\" />\n                    </div>\n                }\n                @if (Tenant.ShowSiteNameLink)\n                {\n                    <div class=\"align-self-center pt-4 pt-sm-0\">\n                         <partial name=\"SiteTitlePartial\" model=\"@Tenant\" />\n                    </div>\n                }\n                @if (!string.IsNullOrWhiteSpace(Tenant.HeaderContent))\n                {\n                    <div class=\"flex-fill align-self-center pt-3 d-none d-md-block\">\n                        <partial name=\"SiteHeaderPartial\" />\n                    </div>\n                }\n            </div>\n        </div>\n        <nav class=\"navbar navbar-expand-md navbar-dark fixed-top bg-dark pt-0 pb-0\">\n            <button class=\"navbar-toggler\" type=\"button\" data-bs-toggle=\"collapse\" data-bs-target=\"#navbarNavDropdown\" aria-controls=\"navbarNavDropdown\" aria-expanded=\"false\" aria-label=\"Toggle navigation\">\n                <span class=\"navbar-toggler-icon\"></span>\n            </button>\n\n            <div class=\"collapse navbar-collapse bg-dark ps-2\" id=\"navbarNavDropdown\">\n                @await Component.InvokeAsync(\"Navigation\", new { viewName = \"Bootstrap5TopNavWithDropdowns\", filterName = NamedNavigationFilters.TopNav, startingNodeKey = \"\" })\n                <partial name=\"_LoginPartialWithDropdowns\" />\n            </div>\n        </nav>\n    </header>\n    <div id=\"wrapper\" class=\"container cs-container flex-fill\">\n        @await Component.InvokeAsync(\"Navigation\", new { viewName = \"Bootstrap5Breadcrumbs\", filterName = NamedNavigationFilters.Breadcrumbs, startingNodeKey = \"\" })\n        <div class=\"row\">\n            <main id=\"content\" class=\"col order-3\">\n                <partial name=\"AlertsPartial\" />\n                <partial name=\"_CookieConsentPartial\" />\n                <partial name=\"_AutoLogoutWarningPartial\" />\n                @RenderBody()\n            </main>\n            @if (sideNavVisible)\n            {\n                <nav id=\"sidenavmenu\" class=\" col col-3 order-1 @sideNavToggleClass\">\n                    @RenderSection(\"SideNav\", required: false)\n                </nav>\n\n            }\n            @if (asideSecondaryVisible)\n            {\n                <aside id=\"asideSecondary\" class=\"col col-1 order-2\">\n                    @RenderSection(\"AsideSecondary\", required: false)\n                </aside>\n\n            }\n            @if (asidePrimaryVisible)\n            {\n                <aside id=\"asidePrimary\" class=\"col-12 col-md-3 col-sm-12  col-sm-12 order-4\">\n                    @RenderSection(\"AsidePrimary\", required: false)\n                </aside>\n\n            }\n        </div>\n    </div>\n   <footer class=\"sticky-bottom border pt-2 h-100\">\n        <div class=\"w-100 text-center\">\n            <partial name=\"SiteFooterPartial\" />\n        </div>\n        <div class=\"d-flex flex-wrap flex-grow justify-content-center\">\n            <div class=\"p-2\">\n            <ul class=\"list-unstyled d-md-flex flex-wrap\">\n                @if (Tenant != null && !string.IsNullOrWhiteSpace(Tenant.PrivacyPolicy))\n                {\n                    <li class=\"ps-sm-2 me-sm-2\">\n                        <a asp-controller=\"Privacy\" asp-action=\"Index\">Privacy Policy</a>\n                    </li>\n                }\n                <li class=\"ps-sm-2 me-sm-2\">\n                    @* you are free to remove the powered by cloudscribe link but we appreciate it if you choose to keep it! *@\n                    <a class=\"text-nowrap\" target=\"_blank\" href=\"https://www.cloudscribe.com/?utm_source=@Context.Request.Host.Value&amp;utm_medium=referral&amp;utm_campaign=poweredbycloudscribe\">Powered by cloudscribe</a>\n                </li>\n            </ul>\n        </div>\n        <div class=\"ps-sm-2  text-center w-100\"><span class=\"text-nowrap\">Copyright &copy; @DateTime.Now.Year</span><span class=\"d-none d-sm-inline\"> - </span><span> @(Tenant?.SiteName ?? \"Sample\")</span></div>\n        <partial name=\"_CookieConsentRevokePartial\" />\n        </div>\n    </footer>\n    @RenderSection(\"Toolbar\", required: false)\n    <environment names=\"Development\">\n        <script src=\"~/js/jquery.js\" cs-resolve-theme-resource=\"true\" cs-shared-theme=\"true\" cs-tenant=\"@Tenant\"></script>\n        <script src=\"~/js/bootstrap.bundle.js\" cs-resolve-theme-resource=\"true\" cs-shared-theme=\"true\" cs-tenant=\"@Tenant\"></script>\n        <script src=\"~/cr/js/bs4.smartmenus.min.js\"></script>\n    </environment>\n    <environment names=\"Staging,Production\">\n        <script src=\"~/js/jquery.min.js\" cs-resolve-theme-resource=\"true\" cs-shared-theme=\"true\" cs-tenant=\"@Tenant\"></script>\n        <script src=\"~/js/bootstrap.bundle.min.js\" cs-resolve-theme-resource=\"true\" cs-shared-theme=\"true\" cs-tenant=\"@Tenant\"></script>\n        <script src=\"~/cr/js/bs4.smartmenus.min.js\"></script>\n    </environment>\n    @RenderSection(\"Bottom\", required: false)\n    @RenderSection(\"Scripts\", required: false)     \n    @Html.RenderResources(\"js\") @*render any js resources declared via helpers in partial views etc*@\n    <add-this profile-id=\"@Tenant.AddThisDotComUsername\" async></add-this>\n</body>\n</html>\n"
  },
  {
    "path": "src/sourceDev.WebApp/SharedThemes/minty/wwwroot/css/_bootswatch.scss",
    "content": "// Minty 5.1.3\n// Bootswatch\n\n\n// Variables\n\n$web-font-path: \"https://fonts.googleapis.com/css2?family=Montserrat:wght@400;500;700&display=swap\" !default;\n@if $web-font-path {\n  @import url($web-font-path);\n}\n\n// Navbar\n\n.navbar {\n  font-family: $headings-font-family;\n}\n\n.bg-dark {\n  background-color: $secondary !important;\n}\n\n.border-dark {\n  border-color: $secondary !important;\n}\n\n// Buttons\n\n.btn {\n  font-family: $headings-font-family;\n\n  &,\n  &:hover {\n    color: $white;\n  }\n\n  &-light,\n  &-light:hover {\n    color: $gray-700;\n  }\n\n  &-link,\n  &-link:hover {\n    color: $primary;\n  }\n\n  &-link.disabled:hover {\n    color: $gray-600;\n  }\n\n  &-outline-primary {\n    color: $primary;\n  }\n\n  &-outline-secondary {\n    color: $secondary;\n  }\n\n  &-outline-success {\n    color: $success;\n  }\n\n  &-outline-info {\n    color: $info;\n  }\n\n  &-outline-warning {\n    color: $warning;\n  }\n\n  &-outline-danger {\n    color: $danger;\n  }\n\n  &-outline-dark {\n    color: $dark;\n  }\n\n  &-outline-light {\n    color: $light;\n  }\n}\n\n// Forms\n\nlegend {\n  font-family: $headings-font-family;\n}\n\n// Navs\n\n.dropdown-menu {\n  font-family: $font-family-sans-serif;\n}\n\n.breadcrumb {\n  a {\n    color: $navbar-dark-color;\n  }\n\n  a:hover {\n    color: $white;\n    text-decoration: none;\n  }\n}\n\n// Indicators\n\n.alert {\n  a,\n  .alert-link {\n    color: $white;\n  }\n\n  &-light {\n\n    &,\n    a:not(.btn),\n    .alert-link {\n      color: $body-color;\n    }\n  }\n}\n\n.badge {\n  color: $white;\n\n  &.bg-light {\n    color: $gray-700;\n  }\n}\n\n// Containers\n\n.card,\n.list-group-item {\n  h1,\n  h2,\n  h3,\n  h4,\n  h5,\n  h6 {\n    color: inherit;\n  }\n}\n"
  },
  {
    "path": "src/sourceDev.WebApp/SharedThemes/minty/wwwroot/css/_variables.scss",
    "content": "// Minty 5.1.3\n// Bootswatch\n\n$theme: \"minty\" !default;\n\n//\n// Color system\n//\n\n$white:    #fff !default;\n$gray-100: #f8f9fa !default;\n$gray-200: #f7f7f9 !default;\n$gray-300: #eceeef !default;\n$gray-400: #ced4da !default;\n$gray-500: #aaa !default;\n$gray-600: #888 !default;\n$gray-700: #5a5a5a !default;\n$gray-800: #343a40 !default;\n$gray-900: #212529 !default;\n$black:    #000 !default;\n\n$blue:    #007bff !default;\n$indigo:  #6610f2 !default;\n$purple:  #6f42c1 !default;\n$pink:    #e83e8c !default;\n$red:     #ff7851 !default;\n$orange:  #fd7e14 !default;\n$yellow:  #ffce67 !default;\n$green:   #56cc9d !default;\n$teal:    #20c997 !default;\n$cyan:    #6cc3d5 !default;\n\n$primary:       #78c2ad !default;\n$secondary:     #f3969a !default;\n$success:       $green !default;\n$info:          $cyan !default;\n$warning:       $yellow !default;\n$danger:        $red !default;\n$light:         $gray-100 !default;\n$dark:          $gray-800 !default;\n\n$min-contrast-ratio:   1.45 !default;\n\n// Body\n\n$body-color:                $gray-600 !default;\n\n// Components\n\n$border-radius:               .4rem !default;\n$border-radius-lg:            .6rem !default;\n$border-radius-sm:            .3rem !default;\n\n// Fonts\n\n// stylelint-disable-next-line value-keyword-case\n$headings-font-family:        Montserrat, -apple-system, system-ui, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif !default;\n$headings-color:              $gray-700 !default;\n\n// Tables\n\n$table-border-color:          rgba(0, 0, 0, .05) !default;\n\n$table-bg-scale:              0 !default;\n\n// Dropdowns\n\n$dropdown-link-hover-color:         $white !default;\n$dropdown-link-hover-bg:            $secondary !default;\n\n// Navbar\n\n$navbar-dark-color:                 rgba($white, .6) !default;\n$navbar-dark-hover-color:           $white !default;\n$navbar-light-color:                rgba($black, .3) !default;\n$navbar-light-hover-color:          $gray-700 !default;\n$navbar-light-active-color:         $gray-700 !default;\n$navbar-light-disabled-color:       rgba($black, .1) !default;\n\n// Pagination\n\n$pagination-color:                  $white !default;\n$pagination-bg:                     $primary !default;\n$pagination-border-color:           $primary !default;\n$pagination-hover-color:            $white !default;\n$pagination-hover-bg:               $secondary !default;\n$pagination-hover-border-color:     $pagination-hover-bg !default;\n$pagination-active-bg:              $secondary !default;\n$pagination-active-border-color:    $pagination-active-bg !default;\n$pagination-disabled-color:         $white !default;\n$pagination-disabled-bg:            #cce8e0 !default;\n$pagination-disabled-border-color:  $pagination-disabled-bg !default;\n\n// Alerts\n\n$alert-color-scale:                 0% !default;\n$alert-bg-scale:                    0 !default;\n\n// Breadcrumbs\n\n$breadcrumb-padding-y:              .375rem !default;\n$breadcrumb-padding-x:              .75rem !default;\n$breadcrumb-bg:                     $primary !default;\n$breadcrumb-divider-color:          $white !default;\n$breadcrumb-active-color:           $breadcrumb-divider-color !default;\n$breadcrumb-border-radius:          .25rem !default;\n"
  },
  {
    "path": "src/sourceDev.WebApp/SharedThemes/minty/wwwroot/css/bootstrap.css",
    "content": "/*!\n * Bootswatch v5.1.3\n * Homepage: https://bootswatch.com\n * Copyright 2012-2021 Thomas Park\n * Licensed under MIT\n * Based on Bootstrap\n*/\n/*!\n * Bootstrap v5.1.3 (https://getbootstrap.com/)\n * Copyright 2011-2021 The Bootstrap Authors\n * Copyright 2011-2021 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n@import url(\"https://fonts.googleapis.com/css2?family=Montserrat:wght@400;500;700&display=swap\");\n:root {\n  --bs-blue: #007bff;\n  --bs-indigo: #6610f2;\n  --bs-purple: #6f42c1;\n  --bs-pink: #e83e8c;\n  --bs-red: #ff7851;\n  --bs-orange: #fd7e14;\n  --bs-yellow: #ffce67;\n  --bs-green: #56cc9d;\n  --bs-teal: #20c997;\n  --bs-cyan: #6cc3d5;\n  --bs-white: #fff;\n  --bs-gray: #888;\n  --bs-gray-dark: #343a40;\n  --bs-gray-100: #f8f9fa;\n  --bs-gray-200: #f7f7f9;\n  --bs-gray-300: #eceeef;\n  --bs-gray-400: #ced4da;\n  --bs-gray-500: #aaa;\n  --bs-gray-600: #888;\n  --bs-gray-700: #5a5a5a;\n  --bs-gray-800: #343a40;\n  --bs-gray-900: #212529;\n  --bs-primary: #78c2ad;\n  --bs-secondary: #f3969a;\n  --bs-success: #56cc9d;\n  --bs-info: #6cc3d5;\n  --bs-warning: #ffce67;\n  --bs-danger: #ff7851;\n  --bs-light: #f8f9fa;\n  --bs-dark: #343a40;\n  --bs-primary-rgb: 120, 194, 173;\n  --bs-secondary-rgb: 243, 150, 154;\n  --bs-success-rgb: 86, 204, 157;\n  --bs-info-rgb: 108, 195, 213;\n  --bs-warning-rgb: 255, 206, 103;\n  --bs-danger-rgb: 255, 120, 81;\n  --bs-light-rgb: 248, 249, 250;\n  --bs-dark-rgb: 52, 58, 64;\n  --bs-white-rgb: 255, 255, 255;\n  --bs-black-rgb: 0, 0, 0;\n  --bs-body-color-rgb: 136, 136, 136;\n  --bs-body-bg-rgb: 255, 255, 255;\n  --bs-font-sans-serif: system-ui, -apple-system, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, \"Noto Sans\", \"Liberation Sans\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n  --bs-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n  --bs-gradient: linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));\n  --bs-body-font-family: var(--bs-font-sans-serif);\n  --bs-body-font-size: 1rem;\n  --bs-body-font-weight: 400;\n  --bs-body-line-height: 1.5;\n  --bs-body-color: #888;\n  --bs-body-bg: #fff;\n}\n\n*,\n*::before,\n*::after {\n  box-sizing: border-box;\n}\n\n@media (prefers-reduced-motion: no-preference) {\n  :root {\n    scroll-behavior: smooth;\n  }\n}\n\nbody {\n  margin: 0;\n  font-family: var(--bs-body-font-family);\n  font-size: var(--bs-body-font-size);\n  font-weight: var(--bs-body-font-weight);\n  line-height: var(--bs-body-line-height);\n  color: var(--bs-body-color);\n  text-align: var(--bs-body-text-align);\n  background-color: var(--bs-body-bg);\n  -webkit-text-size-adjust: 100%;\n  -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\n\nhr {\n  margin: 1rem 0;\n  color: inherit;\n  background-color: currentColor;\n  border: 0;\n  opacity: 0.25;\n}\n\nhr:not([size]) {\n  height: 1px;\n}\n\nh1, .h1, h2, .h2, h3, .h3, h4, .h4, h5, .h5, h6, .h6 {\n  margin-top: 0;\n  margin-bottom: 0.5rem;\n  font-family: Montserrat, -apple-system, system-ui, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif;\n  font-weight: 500;\n  line-height: 1.2;\n  color: #5a5a5a;\n}\n\nh1, .h1 {\n  font-size: calc(1.375rem + 1.5vw);\n}\n\n@media (min-width: 1200px) {\n  h1, .h1 {\n    font-size: 2.5rem;\n  }\n}\n\nh2, .h2 {\n  font-size: calc(1.325rem + 0.9vw);\n}\n\n@media (min-width: 1200px) {\n  h2, .h2 {\n    font-size: 2rem;\n  }\n}\n\nh3, .h3 {\n  font-size: calc(1.3rem + 0.6vw);\n}\n\n@media (min-width: 1200px) {\n  h3, .h3 {\n    font-size: 1.75rem;\n  }\n}\n\nh4, .h4 {\n  font-size: calc(1.275rem + 0.3vw);\n}\n\n@media (min-width: 1200px) {\n  h4, .h4 {\n    font-size: 1.5rem;\n  }\n}\n\nh5, .h5 {\n  font-size: 1.25rem;\n}\n\nh6, .h6 {\n  font-size: 1rem;\n}\n\np {\n  margin-top: 0;\n  margin-bottom: 1rem;\n}\n\nabbr[title],\nabbr[data-bs-original-title] {\n  -webkit-text-decoration: underline dotted;\n  text-decoration: underline dotted;\n  cursor: help;\n  -webkit-text-decoration-skip-ink: none;\n  text-decoration-skip-ink: none;\n}\n\naddress {\n  margin-bottom: 1rem;\n  font-style: normal;\n  line-height: inherit;\n}\n\nol,\nul {\n  padding-left: 2rem;\n}\n\nol,\nul,\ndl {\n  margin-top: 0;\n  margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n  margin-bottom: 0;\n}\n\ndt {\n  font-weight: 700;\n}\n\ndd {\n  margin-bottom: .5rem;\n  margin-left: 0;\n}\n\nblockquote {\n  margin: 0 0 1rem;\n}\n\nb,\nstrong {\n  font-weight: bolder;\n}\n\nsmall, .small {\n  font-size: 0.875em;\n}\n\nmark, .mark {\n  padding: 0.2em;\n  background-color: #fcf8e3;\n}\n\nsub,\nsup {\n  position: relative;\n  font-size: 0.75em;\n  line-height: 0;\n  vertical-align: baseline;\n}\n\nsub {\n  bottom: -.25em;\n}\n\nsup {\n  top: -.5em;\n}\n\na {\n  color: #78c2ad;\n  text-decoration: underline;\n}\n\na:hover {\n  color: #609b8a;\n}\n\na:not([href]):not([class]), a:not([href]):not([class]):hover {\n  color: inherit;\n  text-decoration: none;\n}\n\npre,\ncode,\nkbd,\nsamp {\n  font-family: var(--bs-font-monospace);\n  font-size: 1em;\n  direction: ltr /* rtl:ignore */;\n  unicode-bidi: bidi-override;\n}\n\npre {\n  display: block;\n  margin-top: 0;\n  margin-bottom: 1rem;\n  overflow: auto;\n  font-size: 0.875em;\n}\n\npre code {\n  font-size: inherit;\n  color: inherit;\n  word-break: normal;\n}\n\ncode {\n  font-size: 0.875em;\n  color: #e83e8c;\n  word-wrap: break-word;\n}\n\na > code {\n  color: inherit;\n}\n\nkbd {\n  padding: 0.2rem 0.4rem;\n  font-size: 0.875em;\n  color: #fff;\n  background-color: #212529;\n  border-radius: 0.3rem;\n}\n\nkbd kbd {\n  padding: 0;\n  font-size: 1em;\n  font-weight: 700;\n}\n\nfigure {\n  margin: 0 0 1rem;\n}\n\nimg,\nsvg {\n  vertical-align: middle;\n}\n\ntable {\n  caption-side: bottom;\n  border-collapse: collapse;\n}\n\ncaption {\n  padding-top: 0.5rem;\n  padding-bottom: 0.5rem;\n  color: #888;\n  text-align: left;\n}\n\nth {\n  text-align: inherit;\n  text-align: -webkit-match-parent;\n}\n\nthead,\ntbody,\ntfoot,\ntr,\ntd,\nth {\n  border-color: inherit;\n  border-style: solid;\n  border-width: 0;\n}\n\nlabel {\n  display: inline-block;\n}\n\nbutton {\n  border-radius: 0;\n}\n\nbutton:focus:not(:focus-visible) {\n  outline: 0;\n}\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n  margin: 0;\n  font-family: inherit;\n  font-size: inherit;\n  line-height: inherit;\n}\n\nbutton,\nselect {\n  text-transform: none;\n}\n\n[role=\"button\"] {\n  cursor: pointer;\n}\n\nselect {\n  word-wrap: normal;\n}\n\nselect:disabled {\n  opacity: 1;\n}\n\n[list]::-webkit-calendar-picker-indicator {\n  display: none;\n}\n\nbutton,\n[type=\"button\"],\n[type=\"reset\"],\n[type=\"submit\"] {\n  -webkit-appearance: button;\n}\n\nbutton:not(:disabled),\n[type=\"button\"]:not(:disabled),\n[type=\"reset\"]:not(:disabled),\n[type=\"submit\"]:not(:disabled) {\n  cursor: pointer;\n}\n\n::-moz-focus-inner {\n  padding: 0;\n  border-style: none;\n}\n\ntextarea {\n  resize: vertical;\n}\n\nfieldset {\n  min-width: 0;\n  padding: 0;\n  margin: 0;\n  border: 0;\n}\n\nlegend {\n  float: left;\n  width: 100%;\n  padding: 0;\n  margin-bottom: 0.5rem;\n  font-size: calc(1.275rem + 0.3vw);\n  line-height: inherit;\n}\n\n@media (min-width: 1200px) {\n  legend {\n    font-size: 1.5rem;\n  }\n}\n\nlegend + * {\n  clear: left;\n}\n\n::-webkit-datetime-edit-fields-wrapper,\n::-webkit-datetime-edit-text,\n::-webkit-datetime-edit-minute,\n::-webkit-datetime-edit-hour-field,\n::-webkit-datetime-edit-day-field,\n::-webkit-datetime-edit-month-field,\n::-webkit-datetime-edit-year-field {\n  padding: 0;\n}\n\n::-webkit-inner-spin-button {\n  height: auto;\n}\n\n[type=\"search\"] {\n  outline-offset: -2px;\n  -webkit-appearance: textfield;\n}\n\n/* rtl:raw:\n[type=\"tel\"],\n[type=\"url\"],\n[type=\"email\"],\n[type=\"number\"] {\n  direction: ltr;\n}\n*/\n::-webkit-search-decoration {\n  -webkit-appearance: none;\n}\n\n::-webkit-color-swatch-wrapper {\n  padding: 0;\n}\n\n::file-selector-button {\n  font: inherit;\n}\n\n::-webkit-file-upload-button {\n  font: inherit;\n  -webkit-appearance: button;\n}\n\noutput {\n  display: inline-block;\n}\n\niframe {\n  border: 0;\n}\n\nsummary {\n  display: list-item;\n  cursor: pointer;\n}\n\nprogress {\n  vertical-align: baseline;\n}\n\n[hidden] {\n  display: none !important;\n}\n\n.lead {\n  font-size: 1.25rem;\n  font-weight: 300;\n}\n\n.display-1 {\n  font-size: calc(1.625rem + 4.5vw);\n  font-weight: 300;\n  line-height: 1.2;\n}\n\n@media (min-width: 1200px) {\n  .display-1 {\n    font-size: 5rem;\n  }\n}\n\n.display-2 {\n  font-size: calc(1.575rem + 3.9vw);\n  font-weight: 300;\n  line-height: 1.2;\n}\n\n@media (min-width: 1200px) {\n  .display-2 {\n    font-size: 4.5rem;\n  }\n}\n\n.display-3 {\n  font-size: calc(1.525rem + 3.3vw);\n  font-weight: 300;\n  line-height: 1.2;\n}\n\n@media (min-width: 1200px) {\n  .display-3 {\n    font-size: 4rem;\n  }\n}\n\n.display-4 {\n  font-size: calc(1.475rem + 2.7vw);\n  font-weight: 300;\n  line-height: 1.2;\n}\n\n@media (min-width: 1200px) {\n  .display-4 {\n    font-size: 3.5rem;\n  }\n}\n\n.display-5 {\n  font-size: calc(1.425rem + 2.1vw);\n  font-weight: 300;\n  line-height: 1.2;\n}\n\n@media (min-width: 1200px) {\n  .display-5 {\n    font-size: 3rem;\n  }\n}\n\n.display-6 {\n  font-size: calc(1.375rem + 1.5vw);\n  font-weight: 300;\n  line-height: 1.2;\n}\n\n@media (min-width: 1200px) {\n  .display-6 {\n    font-size: 2.5rem;\n  }\n}\n\n.list-unstyled {\n  padding-left: 0;\n  list-style: none;\n}\n\n.list-inline {\n  padding-left: 0;\n  list-style: none;\n}\n\n.list-inline-item {\n  display: inline-block;\n}\n\n.list-inline-item:not(:last-child) {\n  margin-right: 0.5rem;\n}\n\n.initialism {\n  font-size: 0.875em;\n  text-transform: uppercase;\n}\n\n.blockquote {\n  margin-bottom: 1rem;\n  font-size: 1.25rem;\n}\n\n.blockquote > :last-child {\n  margin-bottom: 0;\n}\n\n.blockquote-footer {\n  margin-top: -1rem;\n  margin-bottom: 1rem;\n  font-size: 0.875em;\n  color: #888;\n}\n\n.blockquote-footer::before {\n  content: \"\\2014\\00A0\";\n}\n\n.img-fluid {\n  max-width: 100%;\n  height: auto;\n}\n\n.img-thumbnail {\n  padding: 0.25rem;\n  background-color: #fff;\n  border: 1px solid #eceeef;\n  border-radius: 0.4rem;\n  max-width: 100%;\n  height: auto;\n}\n\n.figure {\n  display: inline-block;\n}\n\n.figure-img {\n  margin-bottom: 0.5rem;\n  line-height: 1;\n}\n\n.figure-caption {\n  font-size: 0.875em;\n  color: #888;\n}\n\n.container,\n.container-fluid,\n.container-sm,\n.container-md,\n.container-lg,\n.container-xl,\n.container-xxl {\n  width: 100%;\n  padding-right: var(--bs-gutter-x, 0.75rem);\n  padding-left: var(--bs-gutter-x, 0.75rem);\n  margin-right: auto;\n  margin-left: auto;\n}\n\n@media (min-width: 576px) {\n  .container, .container-sm {\n    max-width: 540px;\n  }\n}\n\n@media (min-width: 768px) {\n  .container, .container-sm, .container-md {\n    max-width: 720px;\n  }\n}\n\n@media (min-width: 992px) {\n  .container, .container-sm, .container-md, .container-lg {\n    max-width: 960px;\n  }\n}\n\n@media (min-width: 1200px) {\n  .container, .container-sm, .container-md, .container-lg, .container-xl {\n    max-width: 1140px;\n  }\n}\n\n@media (min-width: 1400px) {\n  .container, .container-sm, .container-md, .container-lg, .container-xl, .container-xxl {\n    max-width: 1320px;\n  }\n}\n\n.row {\n  --bs-gutter-x: 1.5rem;\n  --bs-gutter-y: 0;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n  flex-wrap: wrap;\n  margin-top: calc(-1 * var(--bs-gutter-y));\n  margin-right: calc(-.5 * var(--bs-gutter-x));\n  margin-left: calc(-.5 * var(--bs-gutter-x));\n}\n\n.row > * {\n  -ms-flex-negative: 0;\n  flex-shrink: 0;\n  width: 100%;\n  max-width: 100%;\n  padding-right: calc(var(--bs-gutter-x) * .5);\n  padding-left: calc(var(--bs-gutter-x) * .5);\n  margin-top: var(--bs-gutter-y);\n}\n\n.col {\n  -ms-flex: 1 0 0%;\n  flex: 1 0 0%;\n}\n\n.row-cols-auto > * {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: auto;\n}\n\n.row-cols-1 > * {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 100%;\n}\n\n.row-cols-2 > * {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 50%;\n}\n\n.row-cols-3 > * {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 33.333333%;\n}\n\n.row-cols-4 > * {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 25%;\n}\n\n.row-cols-5 > * {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 20%;\n}\n\n.row-cols-6 > * {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 16.666667%;\n}\n\n.col-auto {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: auto;\n}\n\n.col-1 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 8.333333%;\n}\n\n.col-2 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 16.666667%;\n}\n\n.col-3 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 25%;\n}\n\n.col-4 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 33.333333%;\n}\n\n.col-5 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 41.666667%;\n}\n\n.col-6 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 50%;\n}\n\n.col-7 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 58.333333%;\n}\n\n.col-8 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 66.666667%;\n}\n\n.col-9 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 75%;\n}\n\n.col-10 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 83.333333%;\n}\n\n.col-11 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 91.666667%;\n}\n\n.col-12 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 100%;\n}\n\n.offset-1 {\n  margin-left: 8.333333%;\n}\n\n.offset-2 {\n  margin-left: 16.666667%;\n}\n\n.offset-3 {\n  margin-left: 25%;\n}\n\n.offset-4 {\n  margin-left: 33.333333%;\n}\n\n.offset-5 {\n  margin-left: 41.666667%;\n}\n\n.offset-6 {\n  margin-left: 50%;\n}\n\n.offset-7 {\n  margin-left: 58.333333%;\n}\n\n.offset-8 {\n  margin-left: 66.666667%;\n}\n\n.offset-9 {\n  margin-left: 75%;\n}\n\n.offset-10 {\n  margin-left: 83.333333%;\n}\n\n.offset-11 {\n  margin-left: 91.666667%;\n}\n\n.g-0,\n.gx-0 {\n  --bs-gutter-x: 0;\n}\n\n.g-0,\n.gy-0 {\n  --bs-gutter-y: 0;\n}\n\n.g-1,\n.gx-1 {\n  --bs-gutter-x: 0.25rem;\n}\n\n.g-1,\n.gy-1 {\n  --bs-gutter-y: 0.25rem;\n}\n\n.g-2,\n.gx-2 {\n  --bs-gutter-x: 0.5rem;\n}\n\n.g-2,\n.gy-2 {\n  --bs-gutter-y: 0.5rem;\n}\n\n.g-3,\n.gx-3 {\n  --bs-gutter-x: 1rem;\n}\n\n.g-3,\n.gy-3 {\n  --bs-gutter-y: 1rem;\n}\n\n.g-4,\n.gx-4 {\n  --bs-gutter-x: 1.5rem;\n}\n\n.g-4,\n.gy-4 {\n  --bs-gutter-y: 1.5rem;\n}\n\n.g-5,\n.gx-5 {\n  --bs-gutter-x: 3rem;\n}\n\n.g-5,\n.gy-5 {\n  --bs-gutter-y: 3rem;\n}\n\n@media (min-width: 576px) {\n  .col-sm {\n    -ms-flex: 1 0 0%;\n    flex: 1 0 0%;\n  }\n  .row-cols-sm-auto > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .row-cols-sm-1 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .row-cols-sm-2 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .row-cols-sm-3 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 33.333333%;\n  }\n  .row-cols-sm-4 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .row-cols-sm-5 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 20%;\n  }\n  .row-cols-sm-6 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 16.666667%;\n  }\n  .col-sm-auto {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .col-sm-1 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 8.333333%;\n  }\n  .col-sm-2 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 16.666667%;\n  }\n  .col-sm-3 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .col-sm-4 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 33.333333%;\n  }\n  .col-sm-5 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 41.666667%;\n  }\n  .col-sm-6 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .col-sm-7 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 58.333333%;\n  }\n  .col-sm-8 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 66.666667%;\n  }\n  .col-sm-9 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 75%;\n  }\n  .col-sm-10 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 83.333333%;\n  }\n  .col-sm-11 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 91.666667%;\n  }\n  .col-sm-12 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .offset-sm-0 {\n    margin-left: 0;\n  }\n  .offset-sm-1 {\n    margin-left: 8.333333%;\n  }\n  .offset-sm-2 {\n    margin-left: 16.666667%;\n  }\n  .offset-sm-3 {\n    margin-left: 25%;\n  }\n  .offset-sm-4 {\n    margin-left: 33.333333%;\n  }\n  .offset-sm-5 {\n    margin-left: 41.666667%;\n  }\n  .offset-sm-6 {\n    margin-left: 50%;\n  }\n  .offset-sm-7 {\n    margin-left: 58.333333%;\n  }\n  .offset-sm-8 {\n    margin-left: 66.666667%;\n  }\n  .offset-sm-9 {\n    margin-left: 75%;\n  }\n  .offset-sm-10 {\n    margin-left: 83.333333%;\n  }\n  .offset-sm-11 {\n    margin-left: 91.666667%;\n  }\n  .g-sm-0,\n  .gx-sm-0 {\n    --bs-gutter-x: 0;\n  }\n  .g-sm-0,\n  .gy-sm-0 {\n    --bs-gutter-y: 0;\n  }\n  .g-sm-1,\n  .gx-sm-1 {\n    --bs-gutter-x: 0.25rem;\n  }\n  .g-sm-1,\n  .gy-sm-1 {\n    --bs-gutter-y: 0.25rem;\n  }\n  .g-sm-2,\n  .gx-sm-2 {\n    --bs-gutter-x: 0.5rem;\n  }\n  .g-sm-2,\n  .gy-sm-2 {\n    --bs-gutter-y: 0.5rem;\n  }\n  .g-sm-3,\n  .gx-sm-3 {\n    --bs-gutter-x: 1rem;\n  }\n  .g-sm-3,\n  .gy-sm-3 {\n    --bs-gutter-y: 1rem;\n  }\n  .g-sm-4,\n  .gx-sm-4 {\n    --bs-gutter-x: 1.5rem;\n  }\n  .g-sm-4,\n  .gy-sm-4 {\n    --bs-gutter-y: 1.5rem;\n  }\n  .g-sm-5,\n  .gx-sm-5 {\n    --bs-gutter-x: 3rem;\n  }\n  .g-sm-5,\n  .gy-sm-5 {\n    --bs-gutter-y: 3rem;\n  }\n}\n\n@media (min-width: 768px) {\n  .col-md {\n    -ms-flex: 1 0 0%;\n    flex: 1 0 0%;\n  }\n  .row-cols-md-auto > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .row-cols-md-1 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .row-cols-md-2 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .row-cols-md-3 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 33.333333%;\n  }\n  .row-cols-md-4 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .row-cols-md-5 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 20%;\n  }\n  .row-cols-md-6 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 16.666667%;\n  }\n  .col-md-auto {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .col-md-1 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 8.333333%;\n  }\n  .col-md-2 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 16.666667%;\n  }\n  .col-md-3 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .col-md-4 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 33.333333%;\n  }\n  .col-md-5 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 41.666667%;\n  }\n  .col-md-6 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .col-md-7 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 58.333333%;\n  }\n  .col-md-8 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 66.666667%;\n  }\n  .col-md-9 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 75%;\n  }\n  .col-md-10 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 83.333333%;\n  }\n  .col-md-11 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 91.666667%;\n  }\n  .col-md-12 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .offset-md-0 {\n    margin-left: 0;\n  }\n  .offset-md-1 {\n    margin-left: 8.333333%;\n  }\n  .offset-md-2 {\n    margin-left: 16.666667%;\n  }\n  .offset-md-3 {\n    margin-left: 25%;\n  }\n  .offset-md-4 {\n    margin-left: 33.333333%;\n  }\n  .offset-md-5 {\n    margin-left: 41.666667%;\n  }\n  .offset-md-6 {\n    margin-left: 50%;\n  }\n  .offset-md-7 {\n    margin-left: 58.333333%;\n  }\n  .offset-md-8 {\n    margin-left: 66.666667%;\n  }\n  .offset-md-9 {\n    margin-left: 75%;\n  }\n  .offset-md-10 {\n    margin-left: 83.333333%;\n  }\n  .offset-md-11 {\n    margin-left: 91.666667%;\n  }\n  .g-md-0,\n  .gx-md-0 {\n    --bs-gutter-x: 0;\n  }\n  .g-md-0,\n  .gy-md-0 {\n    --bs-gutter-y: 0;\n  }\n  .g-md-1,\n  .gx-md-1 {\n    --bs-gutter-x: 0.25rem;\n  }\n  .g-md-1,\n  .gy-md-1 {\n    --bs-gutter-y: 0.25rem;\n  }\n  .g-md-2,\n  .gx-md-2 {\n    --bs-gutter-x: 0.5rem;\n  }\n  .g-md-2,\n  .gy-md-2 {\n    --bs-gutter-y: 0.5rem;\n  }\n  .g-md-3,\n  .gx-md-3 {\n    --bs-gutter-x: 1rem;\n  }\n  .g-md-3,\n  .gy-md-3 {\n    --bs-gutter-y: 1rem;\n  }\n  .g-md-4,\n  .gx-md-4 {\n    --bs-gutter-x: 1.5rem;\n  }\n  .g-md-4,\n  .gy-md-4 {\n    --bs-gutter-y: 1.5rem;\n  }\n  .g-md-5,\n  .gx-md-5 {\n    --bs-gutter-x: 3rem;\n  }\n  .g-md-5,\n  .gy-md-5 {\n    --bs-gutter-y: 3rem;\n  }\n}\n\n@media (min-width: 992px) {\n  .col-lg {\n    -ms-flex: 1 0 0%;\n    flex: 1 0 0%;\n  }\n  .row-cols-lg-auto > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .row-cols-lg-1 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .row-cols-lg-2 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .row-cols-lg-3 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 33.333333%;\n  }\n  .row-cols-lg-4 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .row-cols-lg-5 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 20%;\n  }\n  .row-cols-lg-6 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 16.666667%;\n  }\n  .col-lg-auto {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .col-lg-1 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 8.333333%;\n  }\n  .col-lg-2 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 16.666667%;\n  }\n  .col-lg-3 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .col-lg-4 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 33.333333%;\n  }\n  .col-lg-5 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 41.666667%;\n  }\n  .col-lg-6 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .col-lg-7 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 58.333333%;\n  }\n  .col-lg-8 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 66.666667%;\n  }\n  .col-lg-9 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 75%;\n  }\n  .col-lg-10 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 83.333333%;\n  }\n  .col-lg-11 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 91.666667%;\n  }\n  .col-lg-12 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .offset-lg-0 {\n    margin-left: 0;\n  }\n  .offset-lg-1 {\n    margin-left: 8.333333%;\n  }\n  .offset-lg-2 {\n    margin-left: 16.666667%;\n  }\n  .offset-lg-3 {\n    margin-left: 25%;\n  }\n  .offset-lg-4 {\n    margin-left: 33.333333%;\n  }\n  .offset-lg-5 {\n    margin-left: 41.666667%;\n  }\n  .offset-lg-6 {\n    margin-left: 50%;\n  }\n  .offset-lg-7 {\n    margin-left: 58.333333%;\n  }\n  .offset-lg-8 {\n    margin-left: 66.666667%;\n  }\n  .offset-lg-9 {\n    margin-left: 75%;\n  }\n  .offset-lg-10 {\n    margin-left: 83.333333%;\n  }\n  .offset-lg-11 {\n    margin-left: 91.666667%;\n  }\n  .g-lg-0,\n  .gx-lg-0 {\n    --bs-gutter-x: 0;\n  }\n  .g-lg-0,\n  .gy-lg-0 {\n    --bs-gutter-y: 0;\n  }\n  .g-lg-1,\n  .gx-lg-1 {\n    --bs-gutter-x: 0.25rem;\n  }\n  .g-lg-1,\n  .gy-lg-1 {\n    --bs-gutter-y: 0.25rem;\n  }\n  .g-lg-2,\n  .gx-lg-2 {\n    --bs-gutter-x: 0.5rem;\n  }\n  .g-lg-2,\n  .gy-lg-2 {\n    --bs-gutter-y: 0.5rem;\n  }\n  .g-lg-3,\n  .gx-lg-3 {\n    --bs-gutter-x: 1rem;\n  }\n  .g-lg-3,\n  .gy-lg-3 {\n    --bs-gutter-y: 1rem;\n  }\n  .g-lg-4,\n  .gx-lg-4 {\n    --bs-gutter-x: 1.5rem;\n  }\n  .g-lg-4,\n  .gy-lg-4 {\n    --bs-gutter-y: 1.5rem;\n  }\n  .g-lg-5,\n  .gx-lg-5 {\n    --bs-gutter-x: 3rem;\n  }\n  .g-lg-5,\n  .gy-lg-5 {\n    --bs-gutter-y: 3rem;\n  }\n}\n\n@media (min-width: 1200px) {\n  .col-xl {\n    -ms-flex: 1 0 0%;\n    flex: 1 0 0%;\n  }\n  .row-cols-xl-auto > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .row-cols-xl-1 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .row-cols-xl-2 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .row-cols-xl-3 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 33.333333%;\n  }\n  .row-cols-xl-4 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .row-cols-xl-5 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 20%;\n  }\n  .row-cols-xl-6 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 16.666667%;\n  }\n  .col-xl-auto {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .col-xl-1 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 8.333333%;\n  }\n  .col-xl-2 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 16.666667%;\n  }\n  .col-xl-3 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .col-xl-4 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 33.333333%;\n  }\n  .col-xl-5 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 41.666667%;\n  }\n  .col-xl-6 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .col-xl-7 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 58.333333%;\n  }\n  .col-xl-8 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 66.666667%;\n  }\n  .col-xl-9 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 75%;\n  }\n  .col-xl-10 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 83.333333%;\n  }\n  .col-xl-11 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 91.666667%;\n  }\n  .col-xl-12 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .offset-xl-0 {\n    margin-left: 0;\n  }\n  .offset-xl-1 {\n    margin-left: 8.333333%;\n  }\n  .offset-xl-2 {\n    margin-left: 16.666667%;\n  }\n  .offset-xl-3 {\n    margin-left: 25%;\n  }\n  .offset-xl-4 {\n    margin-left: 33.333333%;\n  }\n  .offset-xl-5 {\n    margin-left: 41.666667%;\n  }\n  .offset-xl-6 {\n    margin-left: 50%;\n  }\n  .offset-xl-7 {\n    margin-left: 58.333333%;\n  }\n  .offset-xl-8 {\n    margin-left: 66.666667%;\n  }\n  .offset-xl-9 {\n    margin-left: 75%;\n  }\n  .offset-xl-10 {\n    margin-left: 83.333333%;\n  }\n  .offset-xl-11 {\n    margin-left: 91.666667%;\n  }\n  .g-xl-0,\n  .gx-xl-0 {\n    --bs-gutter-x: 0;\n  }\n  .g-xl-0,\n  .gy-xl-0 {\n    --bs-gutter-y: 0;\n  }\n  .g-xl-1,\n  .gx-xl-1 {\n    --bs-gutter-x: 0.25rem;\n  }\n  .g-xl-1,\n  .gy-xl-1 {\n    --bs-gutter-y: 0.25rem;\n  }\n  .g-xl-2,\n  .gx-xl-2 {\n    --bs-gutter-x: 0.5rem;\n  }\n  .g-xl-2,\n  .gy-xl-2 {\n    --bs-gutter-y: 0.5rem;\n  }\n  .g-xl-3,\n  .gx-xl-3 {\n    --bs-gutter-x: 1rem;\n  }\n  .g-xl-3,\n  .gy-xl-3 {\n    --bs-gutter-y: 1rem;\n  }\n  .g-xl-4,\n  .gx-xl-4 {\n    --bs-gutter-x: 1.5rem;\n  }\n  .g-xl-4,\n  .gy-xl-4 {\n    --bs-gutter-y: 1.5rem;\n  }\n  .g-xl-5,\n  .gx-xl-5 {\n    --bs-gutter-x: 3rem;\n  }\n  .g-xl-5,\n  .gy-xl-5 {\n    --bs-gutter-y: 3rem;\n  }\n}\n\n@media (min-width: 1400px) {\n  .col-xxl {\n    -ms-flex: 1 0 0%;\n    flex: 1 0 0%;\n  }\n  .row-cols-xxl-auto > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .row-cols-xxl-1 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .row-cols-xxl-2 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .row-cols-xxl-3 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 33.333333%;\n  }\n  .row-cols-xxl-4 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .row-cols-xxl-5 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 20%;\n  }\n  .row-cols-xxl-6 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 16.666667%;\n  }\n  .col-xxl-auto {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .col-xxl-1 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 8.333333%;\n  }\n  .col-xxl-2 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 16.666667%;\n  }\n  .col-xxl-3 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .col-xxl-4 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 33.333333%;\n  }\n  .col-xxl-5 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 41.666667%;\n  }\n  .col-xxl-6 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .col-xxl-7 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 58.333333%;\n  }\n  .col-xxl-8 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 66.666667%;\n  }\n  .col-xxl-9 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 75%;\n  }\n  .col-xxl-10 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 83.333333%;\n  }\n  .col-xxl-11 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 91.666667%;\n  }\n  .col-xxl-12 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .offset-xxl-0 {\n    margin-left: 0;\n  }\n  .offset-xxl-1 {\n    margin-left: 8.333333%;\n  }\n  .offset-xxl-2 {\n    margin-left: 16.666667%;\n  }\n  .offset-xxl-3 {\n    margin-left: 25%;\n  }\n  .offset-xxl-4 {\n    margin-left: 33.333333%;\n  }\n  .offset-xxl-5 {\n    margin-left: 41.666667%;\n  }\n  .offset-xxl-6 {\n    margin-left: 50%;\n  }\n  .offset-xxl-7 {\n    margin-left: 58.333333%;\n  }\n  .offset-xxl-8 {\n    margin-left: 66.666667%;\n  }\n  .offset-xxl-9 {\n    margin-left: 75%;\n  }\n  .offset-xxl-10 {\n    margin-left: 83.333333%;\n  }\n  .offset-xxl-11 {\n    margin-left: 91.666667%;\n  }\n  .g-xxl-0,\n  .gx-xxl-0 {\n    --bs-gutter-x: 0;\n  }\n  .g-xxl-0,\n  .gy-xxl-0 {\n    --bs-gutter-y: 0;\n  }\n  .g-xxl-1,\n  .gx-xxl-1 {\n    --bs-gutter-x: 0.25rem;\n  }\n  .g-xxl-1,\n  .gy-xxl-1 {\n    --bs-gutter-y: 0.25rem;\n  }\n  .g-xxl-2,\n  .gx-xxl-2 {\n    --bs-gutter-x: 0.5rem;\n  }\n  .g-xxl-2,\n  .gy-xxl-2 {\n    --bs-gutter-y: 0.5rem;\n  }\n  .g-xxl-3,\n  .gx-xxl-3 {\n    --bs-gutter-x: 1rem;\n  }\n  .g-xxl-3,\n  .gy-xxl-3 {\n    --bs-gutter-y: 1rem;\n  }\n  .g-xxl-4,\n  .gx-xxl-4 {\n    --bs-gutter-x: 1.5rem;\n  }\n  .g-xxl-4,\n  .gy-xxl-4 {\n    --bs-gutter-y: 1.5rem;\n  }\n  .g-xxl-5,\n  .gx-xxl-5 {\n    --bs-gutter-x: 3rem;\n  }\n  .g-xxl-5,\n  .gy-xxl-5 {\n    --bs-gutter-y: 3rem;\n  }\n}\n\n.table {\n  --bs-table-bg: transparent;\n  --bs-table-accent-bg: transparent;\n  --bs-table-striped-color: #888;\n  --bs-table-striped-bg: rgba(0, 0, 0, 0.05);\n  --bs-table-active-color: #888;\n  --bs-table-active-bg: rgba(0, 0, 0, 0.1);\n  --bs-table-hover-color: #888;\n  --bs-table-hover-bg: rgba(0, 0, 0, 0.075);\n  width: 100%;\n  margin-bottom: 1rem;\n  color: #888;\n  vertical-align: top;\n  border-color: rgba(0, 0, 0, 0.05);\n}\n\n.table > :not(caption) > * > * {\n  padding: 0.5rem 0.5rem;\n  background-color: var(--bs-table-bg);\n  border-bottom-width: 1px;\n  box-shadow: inset 0 0 0 9999px var(--bs-table-accent-bg);\n}\n\n.table > tbody {\n  vertical-align: inherit;\n}\n\n.table > thead {\n  vertical-align: bottom;\n}\n\n.table > :not(:first-child) {\n  border-top: 2px solid currentColor;\n}\n\n.caption-top {\n  caption-side: top;\n}\n\n.table-sm > :not(caption) > * > * {\n  padding: 0.25rem 0.25rem;\n}\n\n.table-bordered > :not(caption) > * {\n  border-width: 1px 0;\n}\n\n.table-bordered > :not(caption) > * > * {\n  border-width: 0 1px;\n}\n\n.table-borderless > :not(caption) > * > * {\n  border-bottom-width: 0;\n}\n\n.table-borderless > :not(:first-child) {\n  border-top-width: 0;\n}\n\n.table-striped > tbody > tr:nth-of-type(odd) > * {\n  --bs-table-accent-bg: var(--bs-table-striped-bg);\n  color: var(--bs-table-striped-color);\n}\n\n.table-active {\n  --bs-table-accent-bg: var(--bs-table-active-bg);\n  color: var(--bs-table-active-color);\n}\n\n.table-hover > tbody > tr:hover > * {\n  --bs-table-accent-bg: var(--bs-table-hover-bg);\n  color: var(--bs-table-hover-color);\n}\n\n.table-primary {\n  --bs-table-bg: #78c2ad;\n  --bs-table-striped-bg: #7fc5b1;\n  --bs-table-striped-color: #fff;\n  --bs-table-active-bg: #86c8b5;\n  --bs-table-active-color: #fff;\n  --bs-table-hover-bg: #82c7b3;\n  --bs-table-hover-color: #fff;\n  color: #fff;\n  border-color: #86c8b5;\n}\n\n.table-secondary {\n  --bs-table-bg: #f3969a;\n  --bs-table-striped-bg: #f49b9f;\n  --bs-table-striped-color: #fff;\n  --bs-table-active-bg: #f4a1a4;\n  --bs-table-active-color: #fff;\n  --bs-table-hover-bg: #f49ea2;\n  --bs-table-hover-color: #fff;\n  color: #fff;\n  border-color: #f4a1a4;\n}\n\n.table-success {\n  --bs-table-bg: #56cc9d;\n  --bs-table-striped-bg: #5ecfa2;\n  --bs-table-striped-color: #fff;\n  --bs-table-active-bg: #67d1a7;\n  --bs-table-active-color: #fff;\n  --bs-table-hover-bg: #63d0a4;\n  --bs-table-hover-color: #fff;\n  color: #fff;\n  border-color: #67d1a7;\n}\n\n.table-info {\n  --bs-table-bg: #6cc3d5;\n  --bs-table-striped-bg: #73c6d7;\n  --bs-table-striped-color: #fff;\n  --bs-table-active-bg: #7bc9d9;\n  --bs-table-active-color: #fff;\n  --bs-table-hover-bg: #77c8d8;\n  --bs-table-hover-color: #fff;\n  color: #fff;\n  border-color: #7bc9d9;\n}\n\n.table-warning {\n  --bs-table-bg: #ffce67;\n  --bs-table-striped-bg: #ffd06f;\n  --bs-table-striped-color: #000;\n  --bs-table-active-bg: #ffd376;\n  --bs-table-active-color: #000;\n  --bs-table-hover-bg: #ffd272;\n  --bs-table-hover-color: #000;\n  color: #fff;\n  border-color: #ffd376;\n}\n\n.table-danger {\n  --bs-table-bg: #ff7851;\n  --bs-table-striped-bg: #ff7f5a;\n  --bs-table-striped-color: #fff;\n  --bs-table-active-bg: #ff8662;\n  --bs-table-active-color: #fff;\n  --bs-table-hover-bg: #ff825e;\n  --bs-table-hover-color: #fff;\n  color: #fff;\n  border-color: #ff8662;\n}\n\n.table-light {\n  --bs-table-bg: #f8f9fa;\n  --bs-table-striped-bg: #ecedee;\n  --bs-table-striped-color: #000;\n  --bs-table-active-bg: #dfe0e1;\n  --bs-table-active-color: #000;\n  --bs-table-hover-bg: #e5e6e7;\n  --bs-table-hover-color: #000;\n  color: #000;\n  border-color: #dfe0e1;\n}\n\n.table-dark {\n  --bs-table-bg: #343a40;\n  --bs-table-striped-bg: #3e444a;\n  --bs-table-striped-color: #fff;\n  --bs-table-active-bg: #484e53;\n  --bs-table-active-color: #fff;\n  --bs-table-hover-bg: #43494e;\n  --bs-table-hover-color: #fff;\n  color: #fff;\n  border-color: #484e53;\n}\n\n.table-responsive {\n  overflow-x: auto;\n  -webkit-overflow-scrolling: touch;\n}\n\n@media (max-width: 575.98px) {\n  .table-responsive-sm {\n    overflow-x: auto;\n    -webkit-overflow-scrolling: touch;\n  }\n}\n\n@media (max-width: 767.98px) {\n  .table-responsive-md {\n    overflow-x: auto;\n    -webkit-overflow-scrolling: touch;\n  }\n}\n\n@media (max-width: 991.98px) {\n  .table-responsive-lg {\n    overflow-x: auto;\n    -webkit-overflow-scrolling: touch;\n  }\n}\n\n@media (max-width: 1199.98px) {\n  .table-responsive-xl {\n    overflow-x: auto;\n    -webkit-overflow-scrolling: touch;\n  }\n}\n\n@media (max-width: 1399.98px) {\n  .table-responsive-xxl {\n    overflow-x: auto;\n    -webkit-overflow-scrolling: touch;\n  }\n}\n\n.form-label {\n  margin-bottom: 0.5rem;\n}\n\n.col-form-label {\n  padding-top: calc(0.375rem + 1px);\n  padding-bottom: calc(0.375rem + 1px);\n  margin-bottom: 0;\n  font-size: inherit;\n  line-height: 1.5;\n}\n\n.col-form-label-lg {\n  padding-top: calc(0.5rem + 1px);\n  padding-bottom: calc(0.5rem + 1px);\n  font-size: 1.25rem;\n}\n\n.col-form-label-sm {\n  padding-top: calc(0.25rem + 1px);\n  padding-bottom: calc(0.25rem + 1px);\n  font-size: 0.875rem;\n}\n\n.form-text {\n  margin-top: 0.25rem;\n  font-size: 0.875em;\n  color: #888;\n}\n\n.form-control {\n  display: block;\n  width: 100%;\n  padding: 0.375rem 0.75rem;\n  font-size: 1rem;\n  font-weight: 400;\n  line-height: 1.5;\n  color: #888;\n  background-color: #fff;\n  background-clip: padding-box;\n  border: 1px solid #ced4da;\n  -webkit-appearance: none;\n  -moz-appearance: none;\n  appearance: none;\n  border-radius: 0.4rem;\n  transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .form-control {\n    transition: none;\n  }\n}\n\n.form-control[type=\"file\"] {\n  overflow: hidden;\n}\n\n.form-control[type=\"file\"]:not(:disabled):not([readonly]) {\n  cursor: pointer;\n}\n\n.form-control:focus {\n  color: #888;\n  background-color: #fff;\n  border-color: #bce1d6;\n  outline: 0;\n  box-shadow: 0 0 0 0.25rem rgba(120, 194, 173, 0.25);\n}\n\n.form-control::-webkit-date-and-time-value {\n  height: 1.5em;\n}\n\n.form-control::-webkit-input-placeholder {\n  color: #888;\n  opacity: 1;\n}\n\n.form-control::-moz-placeholder {\n  color: #888;\n  opacity: 1;\n}\n\n.form-control:-ms-input-placeholder {\n  color: #888;\n  opacity: 1;\n}\n\n.form-control::-ms-input-placeholder {\n  color: #888;\n  opacity: 1;\n}\n\n.form-control::placeholder {\n  color: #888;\n  opacity: 1;\n}\n\n.form-control:disabled, .form-control[readonly] {\n  background-color: #f7f7f9;\n  opacity: 1;\n}\n\n.form-control::file-selector-button {\n  padding: 0.375rem 0.75rem;\n  margin: -0.375rem -0.75rem;\n  -webkit-margin-end: 0.75rem;\n  -moz-margin-end: 0.75rem;\n  margin-inline-end: 0.75rem;\n  color: #888;\n  background-color: #f7f7f9;\n  pointer-events: none;\n  border-color: inherit;\n  border-style: solid;\n  border-width: 0;\n  border-inline-end-width: 1px;\n  border-radius: 0;\n  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .form-control::file-selector-button {\n    transition: none;\n  }\n}\n\n.form-control:hover:not(:disabled):not([readonly])::file-selector-button {\n  background-color: #ebebed;\n}\n\n.form-control::-webkit-file-upload-button {\n  padding: 0.375rem 0.75rem;\n  margin: -0.375rem -0.75rem;\n  -webkit-margin-end: 0.75rem;\n  margin-inline-end: 0.75rem;\n  color: #888;\n  background-color: #f7f7f9;\n  pointer-events: none;\n  border-color: inherit;\n  border-style: solid;\n  border-width: 0;\n  border-inline-end-width: 1px;\n  border-radius: 0;\n  -webkit-transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .form-control::-webkit-file-upload-button {\n    -webkit-transition: none;\n    transition: none;\n  }\n}\n\n.form-control:hover:not(:disabled):not([readonly])::-webkit-file-upload-button {\n  background-color: #ebebed;\n}\n\n.form-control-plaintext {\n  display: block;\n  width: 100%;\n  padding: 0.375rem 0;\n  margin-bottom: 0;\n  line-height: 1.5;\n  color: #888;\n  background-color: transparent;\n  border: solid transparent;\n  border-width: 1px 0;\n}\n\n.form-control-plaintext.form-control-sm, .form-control-plaintext.form-control-lg {\n  padding-right: 0;\n  padding-left: 0;\n}\n\n.form-control-sm {\n  min-height: calc(1.5em + 0.5rem + 2px);\n  padding: 0.25rem 0.5rem;\n  font-size: 0.875rem;\n  border-radius: 0.3rem;\n}\n\n.form-control-sm::file-selector-button {\n  padding: 0.25rem 0.5rem;\n  margin: -0.25rem -0.5rem;\n  -webkit-margin-end: 0.5rem;\n  -moz-margin-end: 0.5rem;\n  margin-inline-end: 0.5rem;\n}\n\n.form-control-sm::-webkit-file-upload-button {\n  padding: 0.25rem 0.5rem;\n  margin: -0.25rem -0.5rem;\n  -webkit-margin-end: 0.5rem;\n  margin-inline-end: 0.5rem;\n}\n\n.form-control-lg {\n  min-height: calc(1.5em + 1rem + 2px);\n  padding: 0.5rem 1rem;\n  font-size: 1.25rem;\n  border-radius: 0.6rem;\n}\n\n.form-control-lg::file-selector-button {\n  padding: 0.5rem 1rem;\n  margin: -0.5rem -1rem;\n  -webkit-margin-end: 1rem;\n  -moz-margin-end: 1rem;\n  margin-inline-end: 1rem;\n}\n\n.form-control-lg::-webkit-file-upload-button {\n  padding: 0.5rem 1rem;\n  margin: -0.5rem -1rem;\n  -webkit-margin-end: 1rem;\n  margin-inline-end: 1rem;\n}\n\ntextarea.form-control {\n  min-height: calc(1.5em + 0.75rem + 2px);\n}\n\ntextarea.form-control-sm {\n  min-height: calc(1.5em + 0.5rem + 2px);\n}\n\ntextarea.form-control-lg {\n  min-height: calc(1.5em + 1rem + 2px);\n}\n\n.form-control-color {\n  width: 3rem;\n  height: auto;\n  padding: 0.375rem;\n}\n\n.form-control-color:not(:disabled):not([readonly]) {\n  cursor: pointer;\n}\n\n.form-control-color::-moz-color-swatch {\n  height: 1.5em;\n  border-radius: 0.4rem;\n}\n\n.form-control-color::-webkit-color-swatch {\n  height: 1.5em;\n  border-radius: 0.4rem;\n}\n\n.form-select {\n  display: block;\n  width: 100%;\n  padding: 0.375rem 2.25rem 0.375rem 0.75rem;\n  -moz-padding-start: calc(0.75rem - 3px);\n  font-size: 1rem;\n  font-weight: 400;\n  line-height: 1.5;\n  color: #888;\n  background-color: #fff;\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e\");\n  background-repeat: no-repeat;\n  background-position: right 0.75rem center;\n  background-size: 16px 12px;\n  border: 1px solid #ced4da;\n  border-radius: 0.4rem;\n  transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n  -webkit-appearance: none;\n  -moz-appearance: none;\n  appearance: none;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .form-select {\n    transition: none;\n  }\n}\n\n.form-select:focus {\n  border-color: #bce1d6;\n  outline: 0;\n  box-shadow: 0 0 0 0.25rem rgba(120, 194, 173, 0.25);\n}\n\n.form-select[multiple], .form-select[size]:not([size=\"1\"]) {\n  padding-right: 0.75rem;\n  background-image: none;\n}\n\n.form-select:disabled {\n  background-color: #f7f7f9;\n}\n\n.form-select:-moz-focusring {\n  color: transparent;\n  text-shadow: 0 0 0 #888;\n}\n\n.form-select-sm {\n  padding-top: 0.25rem;\n  padding-bottom: 0.25rem;\n  padding-left: 0.5rem;\n  font-size: 0.875rem;\n  border-radius: 0.3rem;\n}\n\n.form-select-lg {\n  padding-top: 0.5rem;\n  padding-bottom: 0.5rem;\n  padding-left: 1rem;\n  font-size: 1.25rem;\n  border-radius: 0.6rem;\n}\n\n.form-check {\n  display: block;\n  min-height: 1.5rem;\n  padding-left: 1.5em;\n  margin-bottom: 0.125rem;\n}\n\n.form-check .form-check-input {\n  float: left;\n  margin-left: -1.5em;\n}\n\n.form-check-input {\n  width: 1em;\n  height: 1em;\n  margin-top: 0.25em;\n  vertical-align: top;\n  background-color: #fff;\n  background-repeat: no-repeat;\n  background-position: center;\n  background-size: contain;\n  border: 1px solid rgba(0, 0, 0, 0.25);\n  -webkit-appearance: none;\n  -moz-appearance: none;\n  appearance: none;\n  -webkit-print-color-adjust: exact;\n  color-adjust: exact;\n}\n\n.form-check-input[type=\"checkbox\"] {\n  border-radius: 0.25em;\n}\n\n.form-check-input[type=\"radio\"] {\n  border-radius: 50%;\n}\n\n.form-check-input:active {\n  -webkit-filter: brightness(90%);\n  filter: brightness(90%);\n}\n\n.form-check-input:focus {\n  border-color: #bce1d6;\n  outline: 0;\n  box-shadow: 0 0 0 0.25rem rgba(120, 194, 173, 0.25);\n}\n\n.form-check-input:checked {\n  background-color: #78c2ad;\n  border-color: #78c2ad;\n}\n\n.form-check-input:checked[type=\"checkbox\"] {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10l3 3l6-6'/%3e%3c/svg%3e\");\n}\n\n.form-check-input:checked[type=\"radio\"] {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='2' fill='%23fff'/%3e%3c/svg%3e\");\n}\n\n.form-check-input[type=\"checkbox\"]:indeterminate {\n  background-color: #78c2ad;\n  border-color: #78c2ad;\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10h8'/%3e%3c/svg%3e\");\n}\n\n.form-check-input:disabled {\n  pointer-events: none;\n  -webkit-filter: none;\n  filter: none;\n  opacity: 0.5;\n}\n\n.form-check-input[disabled] ~ .form-check-label, .form-check-input:disabled ~ .form-check-label {\n  opacity: 0.5;\n}\n\n.form-switch {\n  padding-left: 2.5em;\n}\n\n.form-switch .form-check-input {\n  width: 2em;\n  margin-left: -2.5em;\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%280, 0, 0, 0.25%29'/%3e%3c/svg%3e\");\n  background-position: left center;\n  border-radius: 2em;\n  transition: background-position 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .form-switch .form-check-input {\n    transition: none;\n  }\n}\n\n.form-switch .form-check-input:focus {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23bce1d6'/%3e%3c/svg%3e\");\n}\n\n.form-switch .form-check-input:checked {\n  background-position: right center;\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e\");\n}\n\n.form-check-inline {\n  display: inline-block;\n  margin-right: 1rem;\n}\n\n.btn-check {\n  position: absolute;\n  clip: rect(0, 0, 0, 0);\n  pointer-events: none;\n}\n\n.btn-check[disabled] + .btn, .btn-check:disabled + .btn {\n  pointer-events: none;\n  -webkit-filter: none;\n  filter: none;\n  opacity: 0.65;\n}\n\n.form-range {\n  width: 100%;\n  height: 1.5rem;\n  padding: 0;\n  background-color: transparent;\n  -webkit-appearance: none;\n  -moz-appearance: none;\n  appearance: none;\n}\n\n.form-range:focus {\n  outline: 0;\n}\n\n.form-range:focus::-webkit-slider-thumb {\n  box-shadow: 0 0 0 1px #fff, 0 0 0 0.25rem rgba(120, 194, 173, 0.25);\n}\n\n.form-range:focus::-moz-range-thumb {\n  box-shadow: 0 0 0 1px #fff, 0 0 0 0.25rem rgba(120, 194, 173, 0.25);\n}\n\n.form-range::-moz-focus-outer {\n  border: 0;\n}\n\n.form-range::-webkit-slider-thumb {\n  width: 1rem;\n  height: 1rem;\n  margin-top: -0.25rem;\n  background-color: #78c2ad;\n  border: 0;\n  border-radius: 1rem;\n  -webkit-transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n  transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n  -webkit-appearance: none;\n  appearance: none;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .form-range::-webkit-slider-thumb {\n    -webkit-transition: none;\n    transition: none;\n  }\n}\n\n.form-range::-webkit-slider-thumb:active {\n  background-color: #d7ede6;\n}\n\n.form-range::-webkit-slider-runnable-track {\n  width: 100%;\n  height: 0.5rem;\n  color: transparent;\n  cursor: pointer;\n  background-color: #eceeef;\n  border-color: transparent;\n  border-radius: 1rem;\n}\n\n.form-range::-moz-range-thumb {\n  width: 1rem;\n  height: 1rem;\n  background-color: #78c2ad;\n  border: 0;\n  border-radius: 1rem;\n  -moz-transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n  transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n  -moz-appearance: none;\n  appearance: none;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .form-range::-moz-range-thumb {\n    -moz-transition: none;\n    transition: none;\n  }\n}\n\n.form-range::-moz-range-thumb:active {\n  background-color: #d7ede6;\n}\n\n.form-range::-moz-range-track {\n  width: 100%;\n  height: 0.5rem;\n  color: transparent;\n  cursor: pointer;\n  background-color: #eceeef;\n  border-color: transparent;\n  border-radius: 1rem;\n}\n\n.form-range:disabled {\n  pointer-events: none;\n}\n\n.form-range:disabled::-webkit-slider-thumb {\n  background-color: #aaa;\n}\n\n.form-range:disabled::-moz-range-thumb {\n  background-color: #aaa;\n}\n\n.form-floating {\n  position: relative;\n}\n\n.form-floating > .form-control,\n.form-floating > .form-select {\n  height: calc(3.5rem + 2px);\n  line-height: 1.25;\n}\n\n.form-floating > label {\n  position: absolute;\n  top: 0;\n  left: 0;\n  height: 100%;\n  padding: 1rem 0.75rem;\n  pointer-events: none;\n  border: 1px solid transparent;\n  -webkit-transform-origin: 0 0;\n  transform-origin: 0 0;\n  transition: opacity 0.1s ease-in-out, -webkit-transform 0.1s ease-in-out;\n  transition: opacity 0.1s ease-in-out, transform 0.1s ease-in-out;\n  transition: opacity 0.1s ease-in-out, transform 0.1s ease-in-out, -webkit-transform 0.1s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .form-floating > label {\n    transition: none;\n  }\n}\n\n.form-floating > .form-control {\n  padding: 1rem 0.75rem;\n}\n\n.form-floating > .form-control::-webkit-input-placeholder {\n  color: transparent;\n}\n\n.form-floating > .form-control::-moz-placeholder {\n  color: transparent;\n}\n\n.form-floating > .form-control:-ms-input-placeholder {\n  color: transparent;\n}\n\n.form-floating > .form-control::-ms-input-placeholder {\n  color: transparent;\n}\n\n.form-floating > .form-control::placeholder {\n  color: transparent;\n}\n\n.form-floating > .form-control:not(:-moz-placeholder-shown) {\n  padding-top: 1.625rem;\n  padding-bottom: 0.625rem;\n}\n\n.form-floating > .form-control:not(:-ms-input-placeholder) {\n  padding-top: 1.625rem;\n  padding-bottom: 0.625rem;\n}\n\n.form-floating > .form-control:focus, .form-floating > .form-control:not(:placeholder-shown) {\n  padding-top: 1.625rem;\n  padding-bottom: 0.625rem;\n}\n\n.form-floating > .form-control:-webkit-autofill {\n  padding-top: 1.625rem;\n  padding-bottom: 0.625rem;\n}\n\n.form-floating > .form-select {\n  padding-top: 1.625rem;\n  padding-bottom: 0.625rem;\n}\n\n.form-floating > .form-control:not(:-moz-placeholder-shown) ~ label {\n  opacity: 0.65;\n  transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);\n}\n\n.form-floating > .form-control:not(:-ms-input-placeholder) ~ label {\n  opacity: 0.65;\n  transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);\n}\n\n.form-floating > .form-control:focus ~ label,\n.form-floating > .form-control:not(:placeholder-shown) ~ label,\n.form-floating > .form-select ~ label {\n  opacity: 0.65;\n  -webkit-transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);\n  transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);\n}\n\n.form-floating > .form-control:-webkit-autofill ~ label {\n  opacity: 0.65;\n  -webkit-transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);\n  transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);\n}\n\n.input-group {\n  position: relative;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n  flex-wrap: wrap;\n  -ms-flex-align: stretch;\n  align-items: stretch;\n  width: 100%;\n}\n\n.input-group > .form-control,\n.input-group > .form-select {\n  position: relative;\n  -ms-flex: 1 1 auto;\n  flex: 1 1 auto;\n  width: 1%;\n  min-width: 0;\n}\n\n.input-group > .form-control:focus,\n.input-group > .form-select:focus {\n  z-index: 3;\n}\n\n.input-group .btn {\n  position: relative;\n  z-index: 2;\n}\n\n.input-group .btn:focus {\n  z-index: 3;\n}\n\n.input-group-text {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-align: center;\n  align-items: center;\n  padding: 0.375rem 0.75rem;\n  font-size: 1rem;\n  font-weight: 400;\n  line-height: 1.5;\n  color: #888;\n  text-align: center;\n  white-space: nowrap;\n  background-color: #f7f7f9;\n  border: 1px solid #ced4da;\n  border-radius: 0.4rem;\n}\n\n.input-group-lg > .form-control,\n.input-group-lg > .form-select,\n.input-group-lg > .input-group-text,\n.input-group-lg > .btn {\n  padding: 0.5rem 1rem;\n  font-size: 1.25rem;\n  border-radius: 0.6rem;\n}\n\n.input-group-sm > .form-control,\n.input-group-sm > .form-select,\n.input-group-sm > .input-group-text,\n.input-group-sm > .btn {\n  padding: 0.25rem 0.5rem;\n  font-size: 0.875rem;\n  border-radius: 0.3rem;\n}\n\n.input-group-lg > .form-select,\n.input-group-sm > .form-select {\n  padding-right: 3rem;\n}\n\n.input-group:not(.has-validation) > :not(:last-child):not(.dropdown-toggle):not(.dropdown-menu),\n.input-group:not(.has-validation) > .dropdown-toggle:nth-last-child(n + 3) {\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n}\n\n.input-group.has-validation > :nth-last-child(n + 3):not(.dropdown-toggle):not(.dropdown-menu),\n.input-group.has-validation > .dropdown-toggle:nth-last-child(n + 4) {\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n}\n\n.input-group > :not(:first-child):not(.dropdown-menu):not(.valid-tooltip):not(.valid-feedback):not(.invalid-tooltip):not(.invalid-feedback) {\n  margin-left: -1px;\n  border-top-left-radius: 0;\n  border-bottom-left-radius: 0;\n}\n\n.valid-feedback {\n  display: none;\n  width: 100%;\n  margin-top: 0.25rem;\n  font-size: 0.875em;\n  color: #56cc9d;\n}\n\n.valid-tooltip {\n  position: absolute;\n  top: 100%;\n  z-index: 5;\n  display: none;\n  max-width: 100%;\n  padding: 0.25rem 0.5rem;\n  margin-top: .1rem;\n  font-size: 0.875rem;\n  color: #fff;\n  background-color: rgba(86, 204, 157, 0.9);\n  border-radius: 0.4rem;\n}\n\n.was-validated :valid ~ .valid-feedback,\n.was-validated :valid ~ .valid-tooltip,\n.is-valid ~ .valid-feedback,\n.is-valid ~ .valid-tooltip {\n  display: block;\n}\n\n.was-validated .form-control:valid, .form-control.is-valid {\n  border-color: #56cc9d;\n  padding-right: calc(1.5em + 0.75rem);\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%2356cc9d' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e\");\n  background-repeat: no-repeat;\n  background-position: right calc(0.375em + 0.1875rem) center;\n  background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n\n.was-validated .form-control:valid:focus, .form-control.is-valid:focus {\n  border-color: #56cc9d;\n  box-shadow: 0 0 0 0.25rem rgba(86, 204, 157, 0.25);\n}\n\n.was-validated textarea.form-control:valid, textarea.form-control.is-valid {\n  padding-right: calc(1.5em + 0.75rem);\n  background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem);\n}\n\n.was-validated .form-select:valid, .form-select.is-valid {\n  border-color: #56cc9d;\n}\n\n.was-validated .form-select:valid:not([multiple]):not([size]), .was-validated .form-select:valid:not([multiple])[size=\"1\"], .form-select.is-valid:not([multiple]):not([size]), .form-select.is-valid:not([multiple])[size=\"1\"] {\n  padding-right: 4.125rem;\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e\"), url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%2356cc9d' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e\");\n  background-position: right 0.75rem center, center right 2.25rem;\n  background-size: 16px 12px, calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n\n.was-validated .form-select:valid:focus, .form-select.is-valid:focus {\n  border-color: #56cc9d;\n  box-shadow: 0 0 0 0.25rem rgba(86, 204, 157, 0.25);\n}\n\n.was-validated .form-check-input:valid, .form-check-input.is-valid {\n  border-color: #56cc9d;\n}\n\n.was-validated .form-check-input:valid:checked, .form-check-input.is-valid:checked {\n  background-color: #56cc9d;\n}\n\n.was-validated .form-check-input:valid:focus, .form-check-input.is-valid:focus {\n  box-shadow: 0 0 0 0.25rem rgba(86, 204, 157, 0.25);\n}\n\n.was-validated .form-check-input:valid ~ .form-check-label, .form-check-input.is-valid ~ .form-check-label {\n  color: #56cc9d;\n}\n\n.form-check-inline .form-check-input ~ .valid-feedback {\n  margin-left: .5em;\n}\n\n.was-validated .input-group .form-control:valid, .input-group .form-control.is-valid, .was-validated\n.input-group .form-select:valid,\n.input-group .form-select.is-valid {\n  z-index: 1;\n}\n\n.was-validated .input-group .form-control:valid:focus, .input-group .form-control.is-valid:focus, .was-validated\n.input-group .form-select:valid:focus,\n.input-group .form-select.is-valid:focus {\n  z-index: 3;\n}\n\n.invalid-feedback {\n  display: none;\n  width: 100%;\n  margin-top: 0.25rem;\n  font-size: 0.875em;\n  color: #ff7851;\n}\n\n.invalid-tooltip {\n  position: absolute;\n  top: 100%;\n  z-index: 5;\n  display: none;\n  max-width: 100%;\n  padding: 0.25rem 0.5rem;\n  margin-top: .1rem;\n  font-size: 0.875rem;\n  color: #fff;\n  background-color: rgba(255, 120, 81, 0.9);\n  border-radius: 0.4rem;\n}\n\n.was-validated :invalid ~ .invalid-feedback,\n.was-validated :invalid ~ .invalid-tooltip,\n.is-invalid ~ .invalid-feedback,\n.is-invalid ~ .invalid-tooltip {\n  display: block;\n}\n\n.was-validated .form-control:invalid, .form-control.is-invalid {\n  border-color: #ff7851;\n  padding-right: calc(1.5em + 0.75rem);\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23ff7851'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23ff7851' stroke='none'/%3e%3c/svg%3e\");\n  background-repeat: no-repeat;\n  background-position: right calc(0.375em + 0.1875rem) center;\n  background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n\n.was-validated .form-control:invalid:focus, .form-control.is-invalid:focus {\n  border-color: #ff7851;\n  box-shadow: 0 0 0 0.25rem rgba(255, 120, 81, 0.25);\n}\n\n.was-validated textarea.form-control:invalid, textarea.form-control.is-invalid {\n  padding-right: calc(1.5em + 0.75rem);\n  background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem);\n}\n\n.was-validated .form-select:invalid, .form-select.is-invalid {\n  border-color: #ff7851;\n}\n\n.was-validated .form-select:invalid:not([multiple]):not([size]), .was-validated .form-select:invalid:not([multiple])[size=\"1\"], .form-select.is-invalid:not([multiple]):not([size]), .form-select.is-invalid:not([multiple])[size=\"1\"] {\n  padding-right: 4.125rem;\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e\"), url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23ff7851'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23ff7851' stroke='none'/%3e%3c/svg%3e\");\n  background-position: right 0.75rem center, center right 2.25rem;\n  background-size: 16px 12px, calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n\n.was-validated .form-select:invalid:focus, .form-select.is-invalid:focus {\n  border-color: #ff7851;\n  box-shadow: 0 0 0 0.25rem rgba(255, 120, 81, 0.25);\n}\n\n.was-validated .form-check-input:invalid, .form-check-input.is-invalid {\n  border-color: #ff7851;\n}\n\n.was-validated .form-check-input:invalid:checked, .form-check-input.is-invalid:checked {\n  background-color: #ff7851;\n}\n\n.was-validated .form-check-input:invalid:focus, .form-check-input.is-invalid:focus {\n  box-shadow: 0 0 0 0.25rem rgba(255, 120, 81, 0.25);\n}\n\n.was-validated .form-check-input:invalid ~ .form-check-label, .form-check-input.is-invalid ~ .form-check-label {\n  color: #ff7851;\n}\n\n.form-check-inline .form-check-input ~ .invalid-feedback {\n  margin-left: .5em;\n}\n\n.was-validated .input-group .form-control:invalid, .input-group .form-control.is-invalid, .was-validated\n.input-group .form-select:invalid,\n.input-group .form-select.is-invalid {\n  z-index: 2;\n}\n\n.was-validated .input-group .form-control:invalid:focus, .input-group .form-control.is-invalid:focus, .was-validated\n.input-group .form-select:invalid:focus,\n.input-group .form-select.is-invalid:focus {\n  z-index: 3;\n}\n\n.btn {\n  display: inline-block;\n  font-weight: 400;\n  line-height: 1.5;\n  color: #888;\n  text-align: center;\n  text-decoration: none;\n  vertical-align: middle;\n  cursor: pointer;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  user-select: none;\n  background-color: transparent;\n  border: 1px solid transparent;\n  padding: 0.375rem 0.75rem;\n  font-size: 1rem;\n  border-radius: 0.4rem;\n  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .btn {\n    transition: none;\n  }\n}\n\n.btn:hover {\n  color: #888;\n}\n\n.btn-check:focus + .btn, .btn:focus {\n  outline: 0;\n  box-shadow: 0 0 0 0.25rem rgba(120, 194, 173, 0.25);\n}\n\n.btn:disabled, .btn.disabled,\nfieldset:disabled .btn {\n  pointer-events: none;\n  opacity: 0.65;\n}\n\n.btn-primary {\n  color: #fff;\n  background-color: #78c2ad;\n  border-color: #78c2ad;\n}\n\n.btn-primary:hover {\n  color: #fff;\n  background-color: #66a593;\n  border-color: #609b8a;\n}\n\n.btn-check:focus + .btn-primary, .btn-primary:focus {\n  color: #fff;\n  background-color: #66a593;\n  border-color: #609b8a;\n  box-shadow: 0 0 0 0.25rem rgba(140, 203, 185, 0.5);\n}\n\n.btn-check:checked + .btn-primary,\n.btn-check:active + .btn-primary, .btn-primary:active, .btn-primary.active,\n.show > .btn-primary.dropdown-toggle {\n  color: #fff;\n  background-color: #609b8a;\n  border-color: #5a9282;\n}\n\n.btn-check:checked + .btn-primary:focus,\n.btn-check:active + .btn-primary:focus, .btn-primary:active:focus, .btn-primary.active:focus,\n.show > .btn-primary.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.25rem rgba(140, 203, 185, 0.5);\n}\n\n.btn-primary:disabled, .btn-primary.disabled {\n  color: #fff;\n  background-color: #78c2ad;\n  border-color: #78c2ad;\n}\n\n.btn-secondary {\n  color: #fff;\n  background-color: #f3969a;\n  border-color: #f3969a;\n}\n\n.btn-secondary:hover {\n  color: #fff;\n  background-color: #cf8083;\n  border-color: #c2787b;\n}\n\n.btn-check:focus + .btn-secondary, .btn-secondary:focus {\n  color: #fff;\n  background-color: #cf8083;\n  border-color: #c2787b;\n  box-shadow: 0 0 0 0.25rem rgba(245, 166, 169, 0.5);\n}\n\n.btn-check:checked + .btn-secondary,\n.btn-check:active + .btn-secondary, .btn-secondary:active, .btn-secondary.active,\n.show > .btn-secondary.dropdown-toggle {\n  color: #fff;\n  background-color: #c2787b;\n  border-color: #b67174;\n}\n\n.btn-check:checked + .btn-secondary:focus,\n.btn-check:active + .btn-secondary:focus, .btn-secondary:active:focus, .btn-secondary.active:focus,\n.show > .btn-secondary.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.25rem rgba(245, 166, 169, 0.5);\n}\n\n.btn-secondary:disabled, .btn-secondary.disabled {\n  color: #fff;\n  background-color: #f3969a;\n  border-color: #f3969a;\n}\n\n.btn-success {\n  color: #fff;\n  background-color: #56cc9d;\n  border-color: #56cc9d;\n}\n\n.btn-success:hover {\n  color: #fff;\n  background-color: #49ad85;\n  border-color: #45a37e;\n}\n\n.btn-check:focus + .btn-success, .btn-success:focus {\n  color: #fff;\n  background-color: #49ad85;\n  border-color: #45a37e;\n  box-shadow: 0 0 0 0.25rem rgba(111, 212, 172, 0.5);\n}\n\n.btn-check:checked + .btn-success,\n.btn-check:active + .btn-success, .btn-success:active, .btn-success.active,\n.show > .btn-success.dropdown-toggle {\n  color: #fff;\n  background-color: #45a37e;\n  border-color: #419976;\n}\n\n.btn-check:checked + .btn-success:focus,\n.btn-check:active + .btn-success:focus, .btn-success:active:focus, .btn-success.active:focus,\n.show > .btn-success.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.25rem rgba(111, 212, 172, 0.5);\n}\n\n.btn-success:disabled, .btn-success.disabled {\n  color: #fff;\n  background-color: #56cc9d;\n  border-color: #56cc9d;\n}\n\n.btn-info {\n  color: #fff;\n  background-color: #6cc3d5;\n  border-color: #6cc3d5;\n}\n\n.btn-info:hover {\n  color: #fff;\n  background-color: #5ca6b5;\n  border-color: #569caa;\n}\n\n.btn-check:focus + .btn-info, .btn-info:focus {\n  color: #fff;\n  background-color: #5ca6b5;\n  border-color: #569caa;\n  box-shadow: 0 0 0 0.25rem rgba(130, 204, 219, 0.5);\n}\n\n.btn-check:checked + .btn-info,\n.btn-check:active + .btn-info, .btn-info:active, .btn-info.active,\n.show > .btn-info.dropdown-toggle {\n  color: #fff;\n  background-color: #569caa;\n  border-color: #5192a0;\n}\n\n.btn-check:checked + .btn-info:focus,\n.btn-check:active + .btn-info:focus, .btn-info:active:focus, .btn-info.active:focus,\n.show > .btn-info.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.25rem rgba(130, 204, 219, 0.5);\n}\n\n.btn-info:disabled, .btn-info.disabled {\n  color: #fff;\n  background-color: #6cc3d5;\n  border-color: #6cc3d5;\n}\n\n.btn-warning {\n  color: #fff;\n  background-color: #ffce67;\n  border-color: #ffce67;\n}\n\n.btn-warning:hover {\n  color: #fff;\n  background-color: #d9af58;\n  border-color: #cca552;\n}\n\n.btn-check:focus + .btn-warning, .btn-warning:focus {\n  color: #fff;\n  background-color: #d9af58;\n  border-color: #cca552;\n  box-shadow: 0 0 0 0.25rem rgba(255, 213, 126, 0.5);\n}\n\n.btn-check:checked + .btn-warning,\n.btn-check:active + .btn-warning, .btn-warning:active, .btn-warning.active,\n.show > .btn-warning.dropdown-toggle {\n  color: #fff;\n  background-color: #cca552;\n  border-color: #bf9b4d;\n}\n\n.btn-check:checked + .btn-warning:focus,\n.btn-check:active + .btn-warning:focus, .btn-warning:active:focus, .btn-warning.active:focus,\n.show > .btn-warning.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.25rem rgba(255, 213, 126, 0.5);\n}\n\n.btn-warning:disabled, .btn-warning.disabled {\n  color: #fff;\n  background-color: #ffce67;\n  border-color: #ffce67;\n}\n\n.btn-danger {\n  color: #fff;\n  background-color: #ff7851;\n  border-color: #ff7851;\n}\n\n.btn-danger:hover {\n  color: #fff;\n  background-color: #d96645;\n  border-color: #cc6041;\n}\n\n.btn-check:focus + .btn-danger, .btn-danger:focus {\n  color: #fff;\n  background-color: #d96645;\n  border-color: #cc6041;\n  box-shadow: 0 0 0 0.25rem rgba(255, 140, 107, 0.5);\n}\n\n.btn-check:checked + .btn-danger,\n.btn-check:active + .btn-danger, .btn-danger:active, .btn-danger.active,\n.show > .btn-danger.dropdown-toggle {\n  color: #fff;\n  background-color: #cc6041;\n  border-color: #bf5a3d;\n}\n\n.btn-check:checked + .btn-danger:focus,\n.btn-check:active + .btn-danger:focus, .btn-danger:active:focus, .btn-danger.active:focus,\n.show > .btn-danger.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.25rem rgba(255, 140, 107, 0.5);\n}\n\n.btn-danger:disabled, .btn-danger.disabled {\n  color: #fff;\n  background-color: #ff7851;\n  border-color: #ff7851;\n}\n\n.btn-light {\n  color: #000;\n  background-color: #f8f9fa;\n  border-color: #f8f9fa;\n}\n\n.btn-light:hover {\n  color: #000;\n  background-color: #f9fafb;\n  border-color: #f9fafb;\n}\n\n.btn-check:focus + .btn-light, .btn-light:focus {\n  color: #000;\n  background-color: #f9fafb;\n  border-color: #f9fafb;\n  box-shadow: 0 0 0 0.25rem rgba(211, 212, 213, 0.5);\n}\n\n.btn-check:checked + .btn-light,\n.btn-check:active + .btn-light, .btn-light:active, .btn-light.active,\n.show > .btn-light.dropdown-toggle {\n  color: #000;\n  background-color: #f9fafb;\n  border-color: #f9fafb;\n}\n\n.btn-check:checked + .btn-light:focus,\n.btn-check:active + .btn-light:focus, .btn-light:active:focus, .btn-light.active:focus,\n.show > .btn-light.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.25rem rgba(211, 212, 213, 0.5);\n}\n\n.btn-light:disabled, .btn-light.disabled {\n  color: #000;\n  background-color: #f8f9fa;\n  border-color: #f8f9fa;\n}\n\n.btn-dark {\n  color: #fff;\n  background-color: #343a40;\n  border-color: #343a40;\n}\n\n.btn-dark:hover {\n  color: #fff;\n  background-color: #2c3136;\n  border-color: #2a2e33;\n}\n\n.btn-check:focus + .btn-dark, .btn-dark:focus {\n  color: #fff;\n  background-color: #2c3136;\n  border-color: #2a2e33;\n  box-shadow: 0 0 0 0.25rem rgba(82, 88, 93, 0.5);\n}\n\n.btn-check:checked + .btn-dark,\n.btn-check:active + .btn-dark, .btn-dark:active, .btn-dark.active,\n.show > .btn-dark.dropdown-toggle {\n  color: #fff;\n  background-color: #2a2e33;\n  border-color: #272c30;\n}\n\n.btn-check:checked + .btn-dark:focus,\n.btn-check:active + .btn-dark:focus, .btn-dark:active:focus, .btn-dark.active:focus,\n.show > .btn-dark.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.25rem rgba(82, 88, 93, 0.5);\n}\n\n.btn-dark:disabled, .btn-dark.disabled {\n  color: #fff;\n  background-color: #343a40;\n  border-color: #343a40;\n}\n\n.btn-outline-primary {\n  color: #78c2ad;\n  border-color: #78c2ad;\n}\n\n.btn-outline-primary:hover {\n  color: #fff;\n  background-color: #78c2ad;\n  border-color: #78c2ad;\n}\n\n.btn-check:focus + .btn-outline-primary, .btn-outline-primary:focus {\n  box-shadow: 0 0 0 0.25rem rgba(120, 194, 173, 0.5);\n}\n\n.btn-check:checked + .btn-outline-primary,\n.btn-check:active + .btn-outline-primary, .btn-outline-primary:active, .btn-outline-primary.active, .btn-outline-primary.dropdown-toggle.show {\n  color: #fff;\n  background-color: #78c2ad;\n  border-color: #78c2ad;\n}\n\n.btn-check:checked + .btn-outline-primary:focus,\n.btn-check:active + .btn-outline-primary:focus, .btn-outline-primary:active:focus, .btn-outline-primary.active:focus, .btn-outline-primary.dropdown-toggle.show:focus {\n  box-shadow: 0 0 0 0.25rem rgba(120, 194, 173, 0.5);\n}\n\n.btn-outline-primary:disabled, .btn-outline-primary.disabled {\n  color: #78c2ad;\n  background-color: transparent;\n}\n\n.btn-outline-secondary {\n  color: #f3969a;\n  border-color: #f3969a;\n}\n\n.btn-outline-secondary:hover {\n  color: #fff;\n  background-color: #f3969a;\n  border-color: #f3969a;\n}\n\n.btn-check:focus + .btn-outline-secondary, .btn-outline-secondary:focus {\n  box-shadow: 0 0 0 0.25rem rgba(243, 150, 154, 0.5);\n}\n\n.btn-check:checked + .btn-outline-secondary,\n.btn-check:active + .btn-outline-secondary, .btn-outline-secondary:active, .btn-outline-secondary.active, .btn-outline-secondary.dropdown-toggle.show {\n  color: #fff;\n  background-color: #f3969a;\n  border-color: #f3969a;\n}\n\n.btn-check:checked + .btn-outline-secondary:focus,\n.btn-check:active + .btn-outline-secondary:focus, .btn-outline-secondary:active:focus, .btn-outline-secondary.active:focus, .btn-outline-secondary.dropdown-toggle.show:focus {\n  box-shadow: 0 0 0 0.25rem rgba(243, 150, 154, 0.5);\n}\n\n.btn-outline-secondary:disabled, .btn-outline-secondary.disabled {\n  color: #f3969a;\n  background-color: transparent;\n}\n\n.btn-outline-success {\n  color: #56cc9d;\n  border-color: #56cc9d;\n}\n\n.btn-outline-success:hover {\n  color: #fff;\n  background-color: #56cc9d;\n  border-color: #56cc9d;\n}\n\n.btn-check:focus + .btn-outline-success, .btn-outline-success:focus {\n  box-shadow: 0 0 0 0.25rem rgba(86, 204, 157, 0.5);\n}\n\n.btn-check:checked + .btn-outline-success,\n.btn-check:active + .btn-outline-success, .btn-outline-success:active, .btn-outline-success.active, .btn-outline-success.dropdown-toggle.show {\n  color: #fff;\n  background-color: #56cc9d;\n  border-color: #56cc9d;\n}\n\n.btn-check:checked + .btn-outline-success:focus,\n.btn-check:active + .btn-outline-success:focus, .btn-outline-success:active:focus, .btn-outline-success.active:focus, .btn-outline-success.dropdown-toggle.show:focus {\n  box-shadow: 0 0 0 0.25rem rgba(86, 204, 157, 0.5);\n}\n\n.btn-outline-success:disabled, .btn-outline-success.disabled {\n  color: #56cc9d;\n  background-color: transparent;\n}\n\n.btn-outline-info {\n  color: #6cc3d5;\n  border-color: #6cc3d5;\n}\n\n.btn-outline-info:hover {\n  color: #fff;\n  background-color: #6cc3d5;\n  border-color: #6cc3d5;\n}\n\n.btn-check:focus + .btn-outline-info, .btn-outline-info:focus {\n  box-shadow: 0 0 0 0.25rem rgba(108, 195, 213, 0.5);\n}\n\n.btn-check:checked + .btn-outline-info,\n.btn-check:active + .btn-outline-info, .btn-outline-info:active, .btn-outline-info.active, .btn-outline-info.dropdown-toggle.show {\n  color: #fff;\n  background-color: #6cc3d5;\n  border-color: #6cc3d5;\n}\n\n.btn-check:checked + .btn-outline-info:focus,\n.btn-check:active + .btn-outline-info:focus, .btn-outline-info:active:focus, .btn-outline-info.active:focus, .btn-outline-info.dropdown-toggle.show:focus {\n  box-shadow: 0 0 0 0.25rem rgba(108, 195, 213, 0.5);\n}\n\n.btn-outline-info:disabled, .btn-outline-info.disabled {\n  color: #6cc3d5;\n  background-color: transparent;\n}\n\n.btn-outline-warning {\n  color: #ffce67;\n  border-color: #ffce67;\n}\n\n.btn-outline-warning:hover {\n  color: #fff;\n  background-color: #ffce67;\n  border-color: #ffce67;\n}\n\n.btn-check:focus + .btn-outline-warning, .btn-outline-warning:focus {\n  box-shadow: 0 0 0 0.25rem rgba(255, 206, 103, 0.5);\n}\n\n.btn-check:checked + .btn-outline-warning,\n.btn-check:active + .btn-outline-warning, .btn-outline-warning:active, .btn-outline-warning.active, .btn-outline-warning.dropdown-toggle.show {\n  color: #fff;\n  background-color: #ffce67;\n  border-color: #ffce67;\n}\n\n.btn-check:checked + .btn-outline-warning:focus,\n.btn-check:active + .btn-outline-warning:focus, .btn-outline-warning:active:focus, .btn-outline-warning.active:focus, .btn-outline-warning.dropdown-toggle.show:focus {\n  box-shadow: 0 0 0 0.25rem rgba(255, 206, 103, 0.5);\n}\n\n.btn-outline-warning:disabled, .btn-outline-warning.disabled {\n  color: #ffce67;\n  background-color: transparent;\n}\n\n.btn-outline-danger {\n  color: #ff7851;\n  border-color: #ff7851;\n}\n\n.btn-outline-danger:hover {\n  color: #fff;\n  background-color: #ff7851;\n  border-color: #ff7851;\n}\n\n.btn-check:focus + .btn-outline-danger, .btn-outline-danger:focus {\n  box-shadow: 0 0 0 0.25rem rgba(255, 120, 81, 0.5);\n}\n\n.btn-check:checked + .btn-outline-danger,\n.btn-check:active + .btn-outline-danger, .btn-outline-danger:active, .btn-outline-danger.active, .btn-outline-danger.dropdown-toggle.show {\n  color: #fff;\n  background-color: #ff7851;\n  border-color: #ff7851;\n}\n\n.btn-check:checked + .btn-outline-danger:focus,\n.btn-check:active + .btn-outline-danger:focus, .btn-outline-danger:active:focus, .btn-outline-danger.active:focus, .btn-outline-danger.dropdown-toggle.show:focus {\n  box-shadow: 0 0 0 0.25rem rgba(255, 120, 81, 0.5);\n}\n\n.btn-outline-danger:disabled, .btn-outline-danger.disabled {\n  color: #ff7851;\n  background-color: transparent;\n}\n\n.btn-outline-light {\n  color: #f8f9fa;\n  border-color: #f8f9fa;\n}\n\n.btn-outline-light:hover {\n  color: #000;\n  background-color: #f8f9fa;\n  border-color: #f8f9fa;\n}\n\n.btn-check:focus + .btn-outline-light, .btn-outline-light:focus {\n  box-shadow: 0 0 0 0.25rem rgba(248, 249, 250, 0.5);\n}\n\n.btn-check:checked + .btn-outline-light,\n.btn-check:active + .btn-outline-light, .btn-outline-light:active, .btn-outline-light.active, .btn-outline-light.dropdown-toggle.show {\n  color: #000;\n  background-color: #f8f9fa;\n  border-color: #f8f9fa;\n}\n\n.btn-check:checked + .btn-outline-light:focus,\n.btn-check:active + .btn-outline-light:focus, .btn-outline-light:active:focus, .btn-outline-light.active:focus, .btn-outline-light.dropdown-toggle.show:focus {\n  box-shadow: 0 0 0 0.25rem rgba(248, 249, 250, 0.5);\n}\n\n.btn-outline-light:disabled, .btn-outline-light.disabled {\n  color: #f8f9fa;\n  background-color: transparent;\n}\n\n.btn-outline-dark {\n  color: #343a40;\n  border-color: #343a40;\n}\n\n.btn-outline-dark:hover {\n  color: #fff;\n  background-color: #343a40;\n  border-color: #343a40;\n}\n\n.btn-check:focus + .btn-outline-dark, .btn-outline-dark:focus {\n  box-shadow: 0 0 0 0.25rem rgba(52, 58, 64, 0.5);\n}\n\n.btn-check:checked + .btn-outline-dark,\n.btn-check:active + .btn-outline-dark, .btn-outline-dark:active, .btn-outline-dark.active, .btn-outline-dark.dropdown-toggle.show {\n  color: #fff;\n  background-color: #343a40;\n  border-color: #343a40;\n}\n\n.btn-check:checked + .btn-outline-dark:focus,\n.btn-check:active + .btn-outline-dark:focus, .btn-outline-dark:active:focus, .btn-outline-dark.active:focus, .btn-outline-dark.dropdown-toggle.show:focus {\n  box-shadow: 0 0 0 0.25rem rgba(52, 58, 64, 0.5);\n}\n\n.btn-outline-dark:disabled, .btn-outline-dark.disabled {\n  color: #343a40;\n  background-color: transparent;\n}\n\n.btn-link {\n  font-weight: 400;\n  color: #78c2ad;\n  text-decoration: underline;\n}\n\n.btn-link:hover {\n  color: #609b8a;\n}\n\n.btn-link:disabled, .btn-link.disabled {\n  color: #888;\n}\n\n.btn-lg, .btn-group-lg > .btn {\n  padding: 0.5rem 1rem;\n  font-size: 1.25rem;\n  border-radius: 0.6rem;\n}\n\n.btn-sm, .btn-group-sm > .btn {\n  padding: 0.25rem 0.5rem;\n  font-size: 0.875rem;\n  border-radius: 0.3rem;\n}\n\n.fade {\n  transition: opacity 0.15s linear;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .fade {\n    transition: none;\n  }\n}\n\n.fade:not(.show) {\n  opacity: 0;\n}\n\n.collapse:not(.show) {\n  display: none;\n}\n\n.collapsing {\n  height: 0;\n  overflow: hidden;\n  transition: height 0.35s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .collapsing {\n    transition: none;\n  }\n}\n\n.collapsing.collapse-horizontal {\n  width: 0;\n  height: auto;\n  transition: width 0.35s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .collapsing.collapse-horizontal {\n    transition: none;\n  }\n}\n\n.dropup,\n.dropend,\n.dropdown,\n.dropstart {\n  position: relative;\n}\n\n.dropdown-toggle {\n  white-space: nowrap;\n}\n\n.dropdown-toggle::after {\n  display: inline-block;\n  margin-left: 0.255em;\n  vertical-align: 0.255em;\n  content: \"\";\n  border-top: 0.3em solid;\n  border-right: 0.3em solid transparent;\n  border-bottom: 0;\n  border-left: 0.3em solid transparent;\n}\n\n.dropdown-toggle:empty::after {\n  margin-left: 0;\n}\n\n.dropdown-menu {\n  position: absolute;\n  z-index: 1000;\n  display: none;\n  min-width: 10rem;\n  padding: 0.5rem 0;\n  margin: 0;\n  font-size: 1rem;\n  color: #888;\n  text-align: left;\n  list-style: none;\n  background-color: #fff;\n  background-clip: padding-box;\n  border: 1px solid rgba(0, 0, 0, 0.15);\n  border-radius: 0.4rem;\n}\n\n.dropdown-menu[data-bs-popper] {\n  top: 100%;\n  left: 0;\n  margin-top: 0.125rem;\n}\n\n.dropdown-menu-start {\n  --bs-position: start;\n}\n\n.dropdown-menu-start[data-bs-popper] {\n  right: auto;\n  left: 0;\n}\n\n.dropdown-menu-end {\n  --bs-position: end;\n}\n\n.dropdown-menu-end[data-bs-popper] {\n  right: 0;\n  left: auto;\n}\n\n@media (min-width: 576px) {\n  .dropdown-menu-sm-start {\n    --bs-position: start;\n  }\n  .dropdown-menu-sm-start[data-bs-popper] {\n    right: auto;\n    left: 0;\n  }\n  .dropdown-menu-sm-end {\n    --bs-position: end;\n  }\n  .dropdown-menu-sm-end[data-bs-popper] {\n    right: 0;\n    left: auto;\n  }\n}\n\n@media (min-width: 768px) {\n  .dropdown-menu-md-start {\n    --bs-position: start;\n  }\n  .dropdown-menu-md-start[data-bs-popper] {\n    right: auto;\n    left: 0;\n  }\n  .dropdown-menu-md-end {\n    --bs-position: end;\n  }\n  .dropdown-menu-md-end[data-bs-popper] {\n    right: 0;\n    left: auto;\n  }\n}\n\n@media (min-width: 992px) {\n  .dropdown-menu-lg-start {\n    --bs-position: start;\n  }\n  .dropdown-menu-lg-start[data-bs-popper] {\n    right: auto;\n    left: 0;\n  }\n  .dropdown-menu-lg-end {\n    --bs-position: end;\n  }\n  .dropdown-menu-lg-end[data-bs-popper] {\n    right: 0;\n    left: auto;\n  }\n}\n\n@media (min-width: 1200px) {\n  .dropdown-menu-xl-start {\n    --bs-position: start;\n  }\n  .dropdown-menu-xl-start[data-bs-popper] {\n    right: auto;\n    left: 0;\n  }\n  .dropdown-menu-xl-end {\n    --bs-position: end;\n  }\n  .dropdown-menu-xl-end[data-bs-popper] {\n    right: 0;\n    left: auto;\n  }\n}\n\n@media (min-width: 1400px) {\n  .dropdown-menu-xxl-start {\n    --bs-position: start;\n  }\n  .dropdown-menu-xxl-start[data-bs-popper] {\n    right: auto;\n    left: 0;\n  }\n  .dropdown-menu-xxl-end {\n    --bs-position: end;\n  }\n  .dropdown-menu-xxl-end[data-bs-popper] {\n    right: 0;\n    left: auto;\n  }\n}\n\n.dropup .dropdown-menu[data-bs-popper] {\n  top: auto;\n  bottom: 100%;\n  margin-top: 0;\n  margin-bottom: 0.125rem;\n}\n\n.dropup .dropdown-toggle::after {\n  display: inline-block;\n  margin-left: 0.255em;\n  vertical-align: 0.255em;\n  content: \"\";\n  border-top: 0;\n  border-right: 0.3em solid transparent;\n  border-bottom: 0.3em solid;\n  border-left: 0.3em solid transparent;\n}\n\n.dropup .dropdown-toggle:empty::after {\n  margin-left: 0;\n}\n\n.dropend .dropdown-menu[data-bs-popper] {\n  top: 0;\n  right: auto;\n  left: 100%;\n  margin-top: 0;\n  margin-left: 0.125rem;\n}\n\n.dropend .dropdown-toggle::after {\n  display: inline-block;\n  margin-left: 0.255em;\n  vertical-align: 0.255em;\n  content: \"\";\n  border-top: 0.3em solid transparent;\n  border-right: 0;\n  border-bottom: 0.3em solid transparent;\n  border-left: 0.3em solid;\n}\n\n.dropend .dropdown-toggle:empty::after {\n  margin-left: 0;\n}\n\n.dropend .dropdown-toggle::after {\n  vertical-align: 0;\n}\n\n.dropstart .dropdown-menu[data-bs-popper] {\n  top: 0;\n  right: 100%;\n  left: auto;\n  margin-top: 0;\n  margin-right: 0.125rem;\n}\n\n.dropstart .dropdown-toggle::after {\n  display: inline-block;\n  margin-left: 0.255em;\n  vertical-align: 0.255em;\n  content: \"\";\n}\n\n.dropstart .dropdown-toggle::after {\n  display: none;\n}\n\n.dropstart .dropdown-toggle::before {\n  display: inline-block;\n  margin-right: 0.255em;\n  vertical-align: 0.255em;\n  content: \"\";\n  border-top: 0.3em solid transparent;\n  border-right: 0.3em solid;\n  border-bottom: 0.3em solid transparent;\n}\n\n.dropstart .dropdown-toggle:empty::after {\n  margin-left: 0;\n}\n\n.dropstart .dropdown-toggle::before {\n  vertical-align: 0;\n}\n\n.dropdown-divider {\n  height: 0;\n  margin: 0.5rem 0;\n  overflow: hidden;\n  border-top: 1px solid rgba(0, 0, 0, 0.15);\n}\n\n.dropdown-item {\n  display: block;\n  width: 100%;\n  padding: 0.25rem 1rem;\n  clear: both;\n  font-weight: 400;\n  color: #212529;\n  text-align: inherit;\n  text-decoration: none;\n  white-space: nowrap;\n  background-color: transparent;\n  border: 0;\n}\n\n.dropdown-item:hover, .dropdown-item:focus {\n  color: #fff;\n  background-color: #f3969a;\n}\n\n.dropdown-item.active, .dropdown-item:active {\n  color: #fff;\n  text-decoration: none;\n  background-color: #78c2ad;\n}\n\n.dropdown-item.disabled, .dropdown-item:disabled {\n  color: #aaa;\n  pointer-events: none;\n  background-color: transparent;\n}\n\n.dropdown-menu.show {\n  display: block;\n}\n\n.dropdown-header {\n  display: block;\n  padding: 0.5rem 1rem;\n  margin-bottom: 0;\n  font-size: 0.875rem;\n  color: #888;\n  white-space: nowrap;\n}\n\n.dropdown-item-text {\n  display: block;\n  padding: 0.25rem 1rem;\n  color: #212529;\n}\n\n.dropdown-menu-dark {\n  color: #eceeef;\n  background-color: #343a40;\n  border-color: rgba(0, 0, 0, 0.15);\n}\n\n.dropdown-menu-dark .dropdown-item {\n  color: #eceeef;\n}\n\n.dropdown-menu-dark .dropdown-item:hover, .dropdown-menu-dark .dropdown-item:focus {\n  color: #fff;\n  background-color: rgba(255, 255, 255, 0.15);\n}\n\n.dropdown-menu-dark .dropdown-item.active, .dropdown-menu-dark .dropdown-item:active {\n  color: #fff;\n  background-color: #78c2ad;\n}\n\n.dropdown-menu-dark .dropdown-item.disabled, .dropdown-menu-dark .dropdown-item:disabled {\n  color: #aaa;\n}\n\n.dropdown-menu-dark .dropdown-divider {\n  border-color: rgba(0, 0, 0, 0.15);\n}\n\n.dropdown-menu-dark .dropdown-item-text {\n  color: #eceeef;\n}\n\n.dropdown-menu-dark .dropdown-header {\n  color: #aaa;\n}\n\n.btn-group,\n.btn-group-vertical {\n  position: relative;\n  display: -ms-inline-flexbox;\n  display: inline-flex;\n  vertical-align: middle;\n}\n\n.btn-group > .btn,\n.btn-group-vertical > .btn {\n  position: relative;\n  -ms-flex: 1 1 auto;\n  flex: 1 1 auto;\n}\n\n.btn-group > .btn-check:checked + .btn,\n.btn-group > .btn-check:focus + .btn,\n.btn-group > .btn:hover,\n.btn-group > .btn:focus,\n.btn-group > .btn:active,\n.btn-group > .btn.active,\n.btn-group-vertical > .btn-check:checked + .btn,\n.btn-group-vertical > .btn-check:focus + .btn,\n.btn-group-vertical > .btn:hover,\n.btn-group-vertical > .btn:focus,\n.btn-group-vertical > .btn:active,\n.btn-group-vertical > .btn.active {\n  z-index: 1;\n}\n\n.btn-toolbar {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n  flex-wrap: wrap;\n  -ms-flex-pack: start;\n  justify-content: flex-start;\n}\n\n.btn-toolbar .input-group {\n  width: auto;\n}\n\n.btn-group > .btn:not(:first-child),\n.btn-group > .btn-group:not(:first-child) {\n  margin-left: -1px;\n}\n\n.btn-group > .btn:not(:last-child):not(.dropdown-toggle),\n.btn-group > .btn-group:not(:last-child) > .btn {\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n}\n\n.btn-group > .btn:nth-child(n + 3),\n.btn-group > :not(.btn-check) + .btn,\n.btn-group > .btn-group:not(:first-child) > .btn {\n  border-top-left-radius: 0;\n  border-bottom-left-radius: 0;\n}\n\n.dropdown-toggle-split {\n  padding-right: 0.5625rem;\n  padding-left: 0.5625rem;\n}\n\n.dropdown-toggle-split::after,\n.dropup .dropdown-toggle-split::after,\n.dropend .dropdown-toggle-split::after {\n  margin-left: 0;\n}\n\n.dropstart .dropdown-toggle-split::before {\n  margin-right: 0;\n}\n\n.btn-sm + .dropdown-toggle-split, .btn-group-sm > .btn + .dropdown-toggle-split {\n  padding-right: 0.375rem;\n  padding-left: 0.375rem;\n}\n\n.btn-lg + .dropdown-toggle-split, .btn-group-lg > .btn + .dropdown-toggle-split {\n  padding-right: 0.75rem;\n  padding-left: 0.75rem;\n}\n\n.btn-group-vertical {\n  -ms-flex-direction: column;\n  flex-direction: column;\n  -ms-flex-align: start;\n  align-items: flex-start;\n  -ms-flex-pack: center;\n  justify-content: center;\n}\n\n.btn-group-vertical > .btn,\n.btn-group-vertical > .btn-group {\n  width: 100%;\n}\n\n.btn-group-vertical > .btn:not(:first-child),\n.btn-group-vertical > .btn-group:not(:first-child) {\n  margin-top: -1px;\n}\n\n.btn-group-vertical > .btn:not(:last-child):not(.dropdown-toggle),\n.btn-group-vertical > .btn-group:not(:last-child) > .btn {\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 0;\n}\n\n.btn-group-vertical > .btn ~ .btn,\n.btn-group-vertical > .btn-group:not(:first-child) > .btn {\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n}\n\n.nav {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n  flex-wrap: wrap;\n  padding-left: 0;\n  margin-bottom: 0;\n  list-style: none;\n}\n\n.nav-link {\n  display: block;\n  padding: 0.5rem 1rem;\n  color: #78c2ad;\n  text-decoration: none;\n  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .nav-link {\n    transition: none;\n  }\n}\n\n.nav-link:hover, .nav-link:focus {\n  color: #609b8a;\n}\n\n.nav-link.disabled {\n  color: #888;\n  pointer-events: none;\n  cursor: default;\n}\n\n.nav-tabs {\n  border-bottom: 1px solid #eceeef;\n}\n\n.nav-tabs .nav-link {\n  margin-bottom: -1px;\n  background: none;\n  border: 1px solid transparent;\n  border-top-left-radius: 0.4rem;\n  border-top-right-radius: 0.4rem;\n}\n\n.nav-tabs .nav-link:hover, .nav-tabs .nav-link:focus {\n  border-color: #f7f7f9 #f7f7f9 #eceeef;\n  isolation: isolate;\n}\n\n.nav-tabs .nav-link.disabled {\n  color: #888;\n  background-color: transparent;\n  border-color: transparent;\n}\n\n.nav-tabs .nav-link.active,\n.nav-tabs .nav-item.show .nav-link {\n  color: #5a5a5a;\n  background-color: #fff;\n  border-color: #eceeef #eceeef #fff;\n}\n\n.nav-tabs .dropdown-menu {\n  margin-top: -1px;\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n}\n\n.nav-pills .nav-link {\n  background: none;\n  border: 0;\n  border-radius: 0.4rem;\n}\n\n.nav-pills .nav-link.active,\n.nav-pills .show > .nav-link {\n  color: #fff;\n  background-color: #78c2ad;\n}\n\n.nav-fill > .nav-link,\n.nav-fill .nav-item {\n  -ms-flex: 1 1 auto;\n  flex: 1 1 auto;\n  text-align: center;\n}\n\n.nav-justified > .nav-link,\n.nav-justified .nav-item {\n  -ms-flex-preferred-size: 0;\n  flex-basis: 0;\n  -ms-flex-positive: 1;\n  flex-grow: 1;\n  text-align: center;\n}\n\n.nav-fill .nav-item .nav-link,\n.nav-justified .nav-item .nav-link {\n  width: 100%;\n}\n\n.tab-content > .tab-pane {\n  display: none;\n}\n\n.tab-content > .active {\n  display: block;\n}\n\n.navbar {\n  position: relative;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n  flex-wrap: wrap;\n  -ms-flex-align: center;\n  align-items: center;\n  -ms-flex-pack: justify;\n  justify-content: space-between;\n  padding-top: 0.5rem;\n  padding-bottom: 0.5rem;\n}\n\n.navbar > .container,\n.navbar > .container-fluid, .navbar > .container-sm, .navbar > .container-md, .navbar > .container-lg, .navbar > .container-xl, .navbar > .container-xxl {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: inherit;\n  flex-wrap: inherit;\n  -ms-flex-align: center;\n  align-items: center;\n  -ms-flex-pack: justify;\n  justify-content: space-between;\n}\n\n.navbar-brand {\n  padding-top: 0.3125rem;\n  padding-bottom: 0.3125rem;\n  margin-right: 1rem;\n  font-size: 1.25rem;\n  text-decoration: none;\n  white-space: nowrap;\n}\n\n.navbar-nav {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  padding-left: 0;\n  margin-bottom: 0;\n  list-style: none;\n}\n\n.navbar-nav .nav-link {\n  padding-right: 0;\n  padding-left: 0;\n}\n\n.navbar-nav .dropdown-menu {\n  position: static;\n}\n\n.navbar-text {\n  padding-top: 0.5rem;\n  padding-bottom: 0.5rem;\n}\n\n.navbar-collapse {\n  -ms-flex-preferred-size: 100%;\n  flex-basis: 100%;\n  -ms-flex-positive: 1;\n  flex-grow: 1;\n  -ms-flex-align: center;\n  align-items: center;\n}\n\n.navbar-toggler {\n  padding: 0.25rem 0.75rem;\n  font-size: 1.25rem;\n  line-height: 1;\n  background-color: transparent;\n  border: 1px solid transparent;\n  border-radius: 0.4rem;\n  transition: box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .navbar-toggler {\n    transition: none;\n  }\n}\n\n.navbar-toggler:hover {\n  text-decoration: none;\n}\n\n.navbar-toggler:focus {\n  text-decoration: none;\n  outline: 0;\n  box-shadow: 0 0 0 0.25rem;\n}\n\n.navbar-toggler-icon {\n  display: inline-block;\n  width: 1.5em;\n  height: 1.5em;\n  vertical-align: middle;\n  background-repeat: no-repeat;\n  background-position: center;\n  background-size: 100%;\n}\n\n.navbar-nav-scroll {\n  max-height: var(--bs-scroll-height, 75vh);\n  overflow-y: auto;\n}\n\n@media (min-width: 576px) {\n  .navbar-expand-sm {\n    -ms-flex-wrap: nowrap;\n    flex-wrap: nowrap;\n    -ms-flex-pack: start;\n    justify-content: flex-start;\n  }\n  .navbar-expand-sm .navbar-nav {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .navbar-expand-sm .navbar-nav .dropdown-menu {\n    position: absolute;\n  }\n  .navbar-expand-sm .navbar-nav .nav-link {\n    padding-right: 0.5rem;\n    padding-left: 0.5rem;\n  }\n  .navbar-expand-sm .navbar-nav-scroll {\n    overflow: visible;\n  }\n  .navbar-expand-sm .navbar-collapse {\n    display: -ms-flexbox !important;\n    display: flex !important;\n    -ms-flex-preferred-size: auto;\n    flex-basis: auto;\n  }\n  .navbar-expand-sm .navbar-toggler {\n    display: none;\n  }\n  .navbar-expand-sm .offcanvas-header {\n    display: none;\n  }\n  .navbar-expand-sm .offcanvas {\n    position: inherit;\n    bottom: 0;\n    z-index: 1000;\n    -ms-flex-positive: 1;\n    flex-grow: 1;\n    visibility: visible !important;\n    background-color: transparent;\n    border-right: 0;\n    border-left: 0;\n    transition: none;\n    -webkit-transform: none;\n    transform: none;\n  }\n  .navbar-expand-sm .offcanvas-top,\n  .navbar-expand-sm .offcanvas-bottom {\n    height: auto;\n    border-top: 0;\n    border-bottom: 0;\n  }\n  .navbar-expand-sm .offcanvas-body {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-positive: 0;\n    flex-grow: 0;\n    padding: 0;\n    overflow-y: visible;\n  }\n}\n\n@media (min-width: 768px) {\n  .navbar-expand-md {\n    -ms-flex-wrap: nowrap;\n    flex-wrap: nowrap;\n    -ms-flex-pack: start;\n    justify-content: flex-start;\n  }\n  .navbar-expand-md .navbar-nav {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .navbar-expand-md .navbar-nav .dropdown-menu {\n    position: absolute;\n  }\n  .navbar-expand-md .navbar-nav .nav-link {\n    padding-right: 0.5rem;\n    padding-left: 0.5rem;\n  }\n  .navbar-expand-md .navbar-nav-scroll {\n    overflow: visible;\n  }\n  .navbar-expand-md .navbar-collapse {\n    display: -ms-flexbox !important;\n    display: flex !important;\n    -ms-flex-preferred-size: auto;\n    flex-basis: auto;\n  }\n  .navbar-expand-md .navbar-toggler {\n    display: none;\n  }\n  .navbar-expand-md .offcanvas-header {\n    display: none;\n  }\n  .navbar-expand-md .offcanvas {\n    position: inherit;\n    bottom: 0;\n    z-index: 1000;\n    -ms-flex-positive: 1;\n    flex-grow: 1;\n    visibility: visible !important;\n    background-color: transparent;\n    border-right: 0;\n    border-left: 0;\n    transition: none;\n    -webkit-transform: none;\n    transform: none;\n  }\n  .navbar-expand-md .offcanvas-top,\n  .navbar-expand-md .offcanvas-bottom {\n    height: auto;\n    border-top: 0;\n    border-bottom: 0;\n  }\n  .navbar-expand-md .offcanvas-body {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-positive: 0;\n    flex-grow: 0;\n    padding: 0;\n    overflow-y: visible;\n  }\n}\n\n@media (min-width: 992px) {\n  .navbar-expand-lg {\n    -ms-flex-wrap: nowrap;\n    flex-wrap: nowrap;\n    -ms-flex-pack: start;\n    justify-content: flex-start;\n  }\n  .navbar-expand-lg .navbar-nav {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .navbar-expand-lg .navbar-nav .dropdown-menu {\n    position: absolute;\n  }\n  .navbar-expand-lg .navbar-nav .nav-link {\n    padding-right: 0.5rem;\n    padding-left: 0.5rem;\n  }\n  .navbar-expand-lg .navbar-nav-scroll {\n    overflow: visible;\n  }\n  .navbar-expand-lg .navbar-collapse {\n    display: -ms-flexbox !important;\n    display: flex !important;\n    -ms-flex-preferred-size: auto;\n    flex-basis: auto;\n  }\n  .navbar-expand-lg .navbar-toggler {\n    display: none;\n  }\n  .navbar-expand-lg .offcanvas-header {\n    display: none;\n  }\n  .navbar-expand-lg .offcanvas {\n    position: inherit;\n    bottom: 0;\n    z-index: 1000;\n    -ms-flex-positive: 1;\n    flex-grow: 1;\n    visibility: visible !important;\n    background-color: transparent;\n    border-right: 0;\n    border-left: 0;\n    transition: none;\n    -webkit-transform: none;\n    transform: none;\n  }\n  .navbar-expand-lg .offcanvas-top,\n  .navbar-expand-lg .offcanvas-bottom {\n    height: auto;\n    border-top: 0;\n    border-bottom: 0;\n  }\n  .navbar-expand-lg .offcanvas-body {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-positive: 0;\n    flex-grow: 0;\n    padding: 0;\n    overflow-y: visible;\n  }\n}\n\n@media (min-width: 1200px) {\n  .navbar-expand-xl {\n    -ms-flex-wrap: nowrap;\n    flex-wrap: nowrap;\n    -ms-flex-pack: start;\n    justify-content: flex-start;\n  }\n  .navbar-expand-xl .navbar-nav {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .navbar-expand-xl .navbar-nav .dropdown-menu {\n    position: absolute;\n  }\n  .navbar-expand-xl .navbar-nav .nav-link {\n    padding-right: 0.5rem;\n    padding-left: 0.5rem;\n  }\n  .navbar-expand-xl .navbar-nav-scroll {\n    overflow: visible;\n  }\n  .navbar-expand-xl .navbar-collapse {\n    display: -ms-flexbox !important;\n    display: flex !important;\n    -ms-flex-preferred-size: auto;\n    flex-basis: auto;\n  }\n  .navbar-expand-xl .navbar-toggler {\n    display: none;\n  }\n  .navbar-expand-xl .offcanvas-header {\n    display: none;\n  }\n  .navbar-expand-xl .offcanvas {\n    position: inherit;\n    bottom: 0;\n    z-index: 1000;\n    -ms-flex-positive: 1;\n    flex-grow: 1;\n    visibility: visible !important;\n    background-color: transparent;\n    border-right: 0;\n    border-left: 0;\n    transition: none;\n    -webkit-transform: none;\n    transform: none;\n  }\n  .navbar-expand-xl .offcanvas-top,\n  .navbar-expand-xl .offcanvas-bottom {\n    height: auto;\n    border-top: 0;\n    border-bottom: 0;\n  }\n  .navbar-expand-xl .offcanvas-body {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-positive: 0;\n    flex-grow: 0;\n    padding: 0;\n    overflow-y: visible;\n  }\n}\n\n@media (min-width: 1400px) {\n  .navbar-expand-xxl {\n    -ms-flex-wrap: nowrap;\n    flex-wrap: nowrap;\n    -ms-flex-pack: start;\n    justify-content: flex-start;\n  }\n  .navbar-expand-xxl .navbar-nav {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .navbar-expand-xxl .navbar-nav .dropdown-menu {\n    position: absolute;\n  }\n  .navbar-expand-xxl .navbar-nav .nav-link {\n    padding-right: 0.5rem;\n    padding-left: 0.5rem;\n  }\n  .navbar-expand-xxl .navbar-nav-scroll {\n    overflow: visible;\n  }\n  .navbar-expand-xxl .navbar-collapse {\n    display: -ms-flexbox !important;\n    display: flex !important;\n    -ms-flex-preferred-size: auto;\n    flex-basis: auto;\n  }\n  .navbar-expand-xxl .navbar-toggler {\n    display: none;\n  }\n  .navbar-expand-xxl .offcanvas-header {\n    display: none;\n  }\n  .navbar-expand-xxl .offcanvas {\n    position: inherit;\n    bottom: 0;\n    z-index: 1000;\n    -ms-flex-positive: 1;\n    flex-grow: 1;\n    visibility: visible !important;\n    background-color: transparent;\n    border-right: 0;\n    border-left: 0;\n    transition: none;\n    -webkit-transform: none;\n    transform: none;\n  }\n  .navbar-expand-xxl .offcanvas-top,\n  .navbar-expand-xxl .offcanvas-bottom {\n    height: auto;\n    border-top: 0;\n    border-bottom: 0;\n  }\n  .navbar-expand-xxl .offcanvas-body {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-positive: 0;\n    flex-grow: 0;\n    padding: 0;\n    overflow-y: visible;\n  }\n}\n\n.navbar-expand {\n  -ms-flex-wrap: nowrap;\n  flex-wrap: nowrap;\n  -ms-flex-pack: start;\n  justify-content: flex-start;\n}\n\n.navbar-expand .navbar-nav {\n  -ms-flex-direction: row;\n  flex-direction: row;\n}\n\n.navbar-expand .navbar-nav .dropdown-menu {\n  position: absolute;\n}\n\n.navbar-expand .navbar-nav .nav-link {\n  padding-right: 0.5rem;\n  padding-left: 0.5rem;\n}\n\n.navbar-expand .navbar-nav-scroll {\n  overflow: visible;\n}\n\n.navbar-expand .navbar-collapse {\n  display: -ms-flexbox !important;\n  display: flex !important;\n  -ms-flex-preferred-size: auto;\n  flex-basis: auto;\n}\n\n.navbar-expand .navbar-toggler {\n  display: none;\n}\n\n.navbar-expand .offcanvas-header {\n  display: none;\n}\n\n.navbar-expand .offcanvas {\n  position: inherit;\n  bottom: 0;\n  z-index: 1000;\n  -ms-flex-positive: 1;\n  flex-grow: 1;\n  visibility: visible !important;\n  background-color: transparent;\n  border-right: 0;\n  border-left: 0;\n  transition: none;\n  -webkit-transform: none;\n  transform: none;\n}\n\n.navbar-expand .offcanvas-top,\n.navbar-expand .offcanvas-bottom {\n  height: auto;\n  border-top: 0;\n  border-bottom: 0;\n}\n\n.navbar-expand .offcanvas-body {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-positive: 0;\n  flex-grow: 0;\n  padding: 0;\n  overflow-y: visible;\n}\n\n.navbar-light .navbar-brand {\n  color: #5a5a5a;\n}\n\n.navbar-light .navbar-brand:hover, .navbar-light .navbar-brand:focus {\n  color: #5a5a5a;\n}\n\n.navbar-light .navbar-nav .nav-link {\n  color: rgba(0, 0, 0, 0.3);\n}\n\n.navbar-light .navbar-nav .nav-link:hover, .navbar-light .navbar-nav .nav-link:focus {\n  color: #5a5a5a;\n}\n\n.navbar-light .navbar-nav .nav-link.disabled {\n  color: rgba(0, 0, 0, 0.1);\n}\n\n.navbar-light .navbar-nav .show > .nav-link,\n.navbar-light .navbar-nav .nav-link.active {\n  color: #5a5a5a;\n}\n\n.navbar-light .navbar-toggler {\n  color: rgba(0, 0, 0, 0.3);\n  border-color: rgba(0, 0, 0, 0.1);\n}\n\n.navbar-light .navbar-toggler-icon {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%280, 0, 0, 0.3%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e\");\n}\n\n.navbar-light .navbar-text {\n  color: rgba(0, 0, 0, 0.3);\n}\n\n.navbar-light .navbar-text a,\n.navbar-light .navbar-text a:hover,\n.navbar-light .navbar-text a:focus {\n  color: #5a5a5a;\n}\n\n.navbar-dark .navbar-brand {\n  color: #fff;\n}\n\n.navbar-dark .navbar-brand:hover, .navbar-dark .navbar-brand:focus {\n  color: #fff;\n}\n\n.navbar-dark .navbar-nav .nav-link {\n  color: rgba(255, 255, 255, 0.6);\n}\n\n.navbar-dark .navbar-nav .nav-link:hover, .navbar-dark .navbar-nav .nav-link:focus {\n  color: #fff;\n}\n\n.navbar-dark .navbar-nav .nav-link.disabled {\n  color: rgba(255, 255, 255, 0.25);\n}\n\n.navbar-dark .navbar-nav .show > .nav-link,\n.navbar-dark .navbar-nav .nav-link.active {\n  color: #fff;\n}\n\n.navbar-dark .navbar-toggler {\n  color: rgba(255, 255, 255, 0.6);\n  border-color: rgba(255, 255, 255, 0.1);\n}\n\n.navbar-dark .navbar-toggler-icon {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.6%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e\");\n}\n\n.navbar-dark .navbar-text {\n  color: rgba(255, 255, 255, 0.6);\n}\n\n.navbar-dark .navbar-text a,\n.navbar-dark .navbar-text a:hover,\n.navbar-dark .navbar-text a:focus {\n  color: #fff;\n}\n\n.card {\n  position: relative;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  min-width: 0;\n  word-wrap: break-word;\n  background-color: #fff;\n  background-clip: border-box;\n  border: 1px solid rgba(0, 0, 0, 0.125);\n  border-radius: 0.4rem;\n}\n\n.card > hr {\n  margin-right: 0;\n  margin-left: 0;\n}\n\n.card > .list-group {\n  border-top: inherit;\n  border-bottom: inherit;\n}\n\n.card > .list-group:first-child {\n  border-top-width: 0;\n  border-top-left-radius: calc(0.4rem - 1px);\n  border-top-right-radius: calc(0.4rem - 1px);\n}\n\n.card > .list-group:last-child {\n  border-bottom-width: 0;\n  border-bottom-right-radius: calc(0.4rem - 1px);\n  border-bottom-left-radius: calc(0.4rem - 1px);\n}\n\n.card > .card-header + .list-group,\n.card > .list-group + .card-footer {\n  border-top: 0;\n}\n\n.card-body {\n  -ms-flex: 1 1 auto;\n  flex: 1 1 auto;\n  padding: 1rem 1rem;\n}\n\n.card-title {\n  margin-bottom: 0.5rem;\n}\n\n.card-subtitle {\n  margin-top: -0.25rem;\n  margin-bottom: 0;\n}\n\n.card-text:last-child {\n  margin-bottom: 0;\n}\n\n.card-link + .card-link {\n  margin-left: 1rem;\n}\n\n.card-header {\n  padding: 0.5rem 1rem;\n  margin-bottom: 0;\n  background-color: rgba(0, 0, 0, 0.03);\n  border-bottom: 1px solid rgba(0, 0, 0, 0.125);\n}\n\n.card-header:first-child {\n  border-radius: calc(0.4rem - 1px) calc(0.4rem - 1px) 0 0;\n}\n\n.card-footer {\n  padding: 0.5rem 1rem;\n  background-color: rgba(0, 0, 0, 0.03);\n  border-top: 1px solid rgba(0, 0, 0, 0.125);\n}\n\n.card-footer:last-child {\n  border-radius: 0 0 calc(0.4rem - 1px) calc(0.4rem - 1px);\n}\n\n.card-header-tabs {\n  margin-right: -0.5rem;\n  margin-bottom: -0.5rem;\n  margin-left: -0.5rem;\n  border-bottom: 0;\n}\n\n.card-header-pills {\n  margin-right: -0.5rem;\n  margin-left: -0.5rem;\n}\n\n.card-img-overlay {\n  position: absolute;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  padding: 1rem;\n  border-radius: calc(0.4rem - 1px);\n}\n\n.card-img,\n.card-img-top,\n.card-img-bottom {\n  width: 100%;\n}\n\n.card-img,\n.card-img-top {\n  border-top-left-radius: calc(0.4rem - 1px);\n  border-top-right-radius: calc(0.4rem - 1px);\n}\n\n.card-img,\n.card-img-bottom {\n  border-bottom-right-radius: calc(0.4rem - 1px);\n  border-bottom-left-radius: calc(0.4rem - 1px);\n}\n\n.card-group > .card {\n  margin-bottom: 0.75rem;\n}\n\n@media (min-width: 576px) {\n  .card-group {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-flow: row wrap;\n    flex-flow: row wrap;\n  }\n  .card-group > .card {\n    -ms-flex: 1 0 0%;\n    flex: 1 0 0%;\n    margin-bottom: 0;\n  }\n  .card-group > .card + .card {\n    margin-left: 0;\n    border-left: 0;\n  }\n  .card-group > .card:not(:last-child) {\n    border-top-right-radius: 0;\n    border-bottom-right-radius: 0;\n  }\n  .card-group > .card:not(:last-child) .card-img-top,\n  .card-group > .card:not(:last-child) .card-header {\n    border-top-right-radius: 0;\n  }\n  .card-group > .card:not(:last-child) .card-img-bottom,\n  .card-group > .card:not(:last-child) .card-footer {\n    border-bottom-right-radius: 0;\n  }\n  .card-group > .card:not(:first-child) {\n    border-top-left-radius: 0;\n    border-bottom-left-radius: 0;\n  }\n  .card-group > .card:not(:first-child) .card-img-top,\n  .card-group > .card:not(:first-child) .card-header {\n    border-top-left-radius: 0;\n  }\n  .card-group > .card:not(:first-child) .card-img-bottom,\n  .card-group > .card:not(:first-child) .card-footer {\n    border-bottom-left-radius: 0;\n  }\n}\n\n.accordion-button {\n  position: relative;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-align: center;\n  align-items: center;\n  width: 100%;\n  padding: 1rem 1.25rem;\n  font-size: 1rem;\n  color: #888;\n  text-align: left;\n  background-color: #fff;\n  border: 0;\n  border-radius: 0;\n  overflow-anchor: none;\n  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, border-radius 0.15s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .accordion-button {\n    transition: none;\n  }\n}\n\n.accordion-button:not(.collapsed) {\n  color: #6caf9c;\n  background-color: #f2f9f7;\n  box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.125);\n}\n\n.accordion-button:not(.collapsed)::after {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%236caf9c'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e\");\n  -webkit-transform: rotate(-180deg);\n  transform: rotate(-180deg);\n}\n\n.accordion-button::after {\n  -ms-flex-negative: 0;\n  flex-shrink: 0;\n  width: 1.25rem;\n  height: 1.25rem;\n  margin-left: auto;\n  content: \"\";\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23888'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e\");\n  background-repeat: no-repeat;\n  background-size: 1.25rem;\n  transition: -webkit-transform 0.2s ease-in-out;\n  transition: transform 0.2s ease-in-out;\n  transition: transform 0.2s ease-in-out, -webkit-transform 0.2s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .accordion-button::after {\n    transition: none;\n  }\n}\n\n.accordion-button:hover {\n  z-index: 2;\n}\n\n.accordion-button:focus {\n  z-index: 3;\n  border-color: #bce1d6;\n  outline: 0;\n  box-shadow: 0 0 0 0.25rem rgba(120, 194, 173, 0.25);\n}\n\n.accordion-header {\n  margin-bottom: 0;\n}\n\n.accordion-item {\n  background-color: #fff;\n  border: 1px solid rgba(0, 0, 0, 0.125);\n}\n\n.accordion-item:first-of-type {\n  border-top-left-radius: 0.4rem;\n  border-top-right-radius: 0.4rem;\n}\n\n.accordion-item:first-of-type .accordion-button {\n  border-top-left-radius: calc(0.4rem - 1px);\n  border-top-right-radius: calc(0.4rem - 1px);\n}\n\n.accordion-item:not(:first-of-type) {\n  border-top: 0;\n}\n\n.accordion-item:last-of-type {\n  border-bottom-right-radius: 0.4rem;\n  border-bottom-left-radius: 0.4rem;\n}\n\n.accordion-item:last-of-type .accordion-button.collapsed {\n  border-bottom-right-radius: calc(0.4rem - 1px);\n  border-bottom-left-radius: calc(0.4rem - 1px);\n}\n\n.accordion-item:last-of-type .accordion-collapse {\n  border-bottom-right-radius: 0.4rem;\n  border-bottom-left-radius: 0.4rem;\n}\n\n.accordion-body {\n  padding: 1rem 1.25rem;\n}\n\n.accordion-flush .accordion-collapse {\n  border-width: 0;\n}\n\n.accordion-flush .accordion-item {\n  border-right: 0;\n  border-left: 0;\n  border-radius: 0;\n}\n\n.accordion-flush .accordion-item:first-child {\n  border-top: 0;\n}\n\n.accordion-flush .accordion-item:last-child {\n  border-bottom: 0;\n}\n\n.accordion-flush .accordion-item .accordion-button {\n  border-radius: 0;\n}\n\n.breadcrumb {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n  flex-wrap: wrap;\n  padding: 0.375rem 0.75rem;\n  margin-bottom: 1rem;\n  list-style: none;\n  background-color: #78c2ad;\n  border-radius: 0.25rem;\n}\n\n.breadcrumb-item + .breadcrumb-item {\n  padding-left: 0.5rem;\n}\n\n.breadcrumb-item + .breadcrumb-item::before {\n  float: left;\n  padding-right: 0.5rem;\n  color: #fff;\n  content: var(--bs-breadcrumb-divider, \"/\") /* rtl: var(--bs-breadcrumb-divider, \"/\") */;\n}\n\n.breadcrumb-item.active {\n  color: #fff;\n}\n\n.pagination {\n  display: -ms-flexbox;\n  display: flex;\n  padding-left: 0;\n  list-style: none;\n}\n\n.page-link {\n  position: relative;\n  display: block;\n  color: #fff;\n  text-decoration: none;\n  background-color: #78c2ad;\n  border: 1px solid #78c2ad;\n  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .page-link {\n    transition: none;\n  }\n}\n\n.page-link:hover {\n  z-index: 2;\n  color: #fff;\n  background-color: #f3969a;\n  border-color: #f3969a;\n}\n\n.page-link:focus {\n  z-index: 3;\n  color: #609b8a;\n  background-color: #f7f7f9;\n  outline: 0;\n  box-shadow: 0 0 0 0.25rem rgba(120, 194, 173, 0.25);\n}\n\n.page-item:not(:first-child) .page-link {\n  margin-left: -1px;\n}\n\n.page-item.active .page-link {\n  z-index: 3;\n  color: #fff;\n  background-color: #f3969a;\n  border-color: #f3969a;\n}\n\n.page-item.disabled .page-link {\n  color: #fff;\n  pointer-events: none;\n  background-color: #cce8e0;\n  border-color: #cce8e0;\n}\n\n.page-link {\n  padding: 0.375rem 0.75rem;\n}\n\n.page-item:first-child .page-link {\n  border-top-left-radius: 0.4rem;\n  border-bottom-left-radius: 0.4rem;\n}\n\n.page-item:last-child .page-link {\n  border-top-right-radius: 0.4rem;\n  border-bottom-right-radius: 0.4rem;\n}\n\n.pagination-lg .page-link {\n  padding: 0.75rem 1.5rem;\n  font-size: 1.25rem;\n}\n\n.pagination-lg .page-item:first-child .page-link {\n  border-top-left-radius: 0.6rem;\n  border-bottom-left-radius: 0.6rem;\n}\n\n.pagination-lg .page-item:last-child .page-link {\n  border-top-right-radius: 0.6rem;\n  border-bottom-right-radius: 0.6rem;\n}\n\n.pagination-sm .page-link {\n  padding: 0.25rem 0.5rem;\n  font-size: 0.875rem;\n}\n\n.pagination-sm .page-item:first-child .page-link {\n  border-top-left-radius: 0.3rem;\n  border-bottom-left-radius: 0.3rem;\n}\n\n.pagination-sm .page-item:last-child .page-link {\n  border-top-right-radius: 0.3rem;\n  border-bottom-right-radius: 0.3rem;\n}\n\n.badge {\n  display: inline-block;\n  padding: 0.35em 0.65em;\n  font-size: 0.75em;\n  font-weight: 700;\n  line-height: 1;\n  color: #fff;\n  text-align: center;\n  white-space: nowrap;\n  vertical-align: baseline;\n  border-radius: 0.4rem;\n}\n\n.badge:empty {\n  display: none;\n}\n\n.btn .badge {\n  position: relative;\n  top: -1px;\n}\n\n.alert {\n  position: relative;\n  padding: 1rem 1rem;\n  margin-bottom: 1rem;\n  border: 1px solid transparent;\n  border-radius: 0.4rem;\n}\n\n.alert-heading {\n  color: inherit;\n}\n\n.alert-link {\n  font-weight: 700;\n}\n\n.alert-dismissible {\n  padding-right: 3rem;\n}\n\n.alert-dismissible .btn-close {\n  position: absolute;\n  top: 0;\n  right: 0;\n  z-index: 2;\n  padding: 1.25rem 1rem;\n}\n\n.alert-primary {\n  color: white;\n  background-color: #78c2ad;\n  border-color: #d7ede6;\n}\n\n.alert-primary .alert-link {\n  color: #cccccc;\n}\n\n.alert-secondary {\n  color: white;\n  background-color: #f3969a;\n  border-color: #fbe0e1;\n}\n\n.alert-secondary .alert-link {\n  color: #cccccc;\n}\n\n.alert-success {\n  color: white;\n  background-color: #56cc9d;\n  border-color: #ccf0e2;\n}\n\n.alert-success .alert-link {\n  color: #cccccc;\n}\n\n.alert-info {\n  color: white;\n  background-color: #6cc3d5;\n  border-color: #d3edf2;\n}\n\n.alert-info .alert-link {\n  color: #cccccc;\n}\n\n.alert-warning {\n  color: white;\n  background-color: #ffce67;\n  border-color: #fff0d1;\n}\n\n.alert-warning .alert-link {\n  color: #cccccc;\n}\n\n.alert-danger {\n  color: white;\n  background-color: #ff7851;\n  border-color: #ffd7cb;\n}\n\n.alert-danger .alert-link {\n  color: #cccccc;\n}\n\n.alert-light {\n  color: black;\n  background-color: #f8f9fa;\n  border-color: #fdfdfe;\n}\n\n.alert-light .alert-link {\n  color: black;\n}\n\n.alert-dark {\n  color: white;\n  background-color: #343a40;\n  border-color: #c2c4c6;\n}\n\n.alert-dark .alert-link {\n  color: #cccccc;\n}\n\n@-webkit-keyframes progress-bar-stripes {\n  0% {\n    background-position-x: 1rem;\n  }\n}\n\n@keyframes progress-bar-stripes {\n  0% {\n    background-position-x: 1rem;\n  }\n}\n\n.progress {\n  display: -ms-flexbox;\n  display: flex;\n  height: 1rem;\n  overflow: hidden;\n  font-size: 0.75rem;\n  background-color: #f7f7f9;\n  border-radius: 0.4rem;\n}\n\n.progress-bar {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  -ms-flex-pack: center;\n  justify-content: center;\n  overflow: hidden;\n  color: #fff;\n  text-align: center;\n  white-space: nowrap;\n  background-color: #78c2ad;\n  transition: width 0.6s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .progress-bar {\n    transition: none;\n  }\n}\n\n.progress-bar-striped {\n  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-size: 1rem 1rem;\n}\n\n.progress-bar-animated {\n  -webkit-animation: 1s linear infinite progress-bar-stripes;\n  animation: 1s linear infinite progress-bar-stripes;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .progress-bar-animated {\n    -webkit-animation: none;\n    animation: none;\n  }\n}\n\n.list-group {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  padding-left: 0;\n  margin-bottom: 0;\n  border-radius: 0.4rem;\n}\n\n.list-group-numbered {\n  list-style-type: none;\n  counter-reset: section;\n}\n\n.list-group-numbered > li::before {\n  content: counters(section, \".\") \". \";\n  counter-increment: section;\n}\n\n.list-group-item-action {\n  width: 100%;\n  color: #5a5a5a;\n  text-align: inherit;\n}\n\n.list-group-item-action:hover, .list-group-item-action:focus {\n  z-index: 1;\n  color: #5a5a5a;\n  text-decoration: none;\n  background-color: #f8f9fa;\n}\n\n.list-group-item-action:active {\n  color: #888;\n  background-color: #f7f7f9;\n}\n\n.list-group-item {\n  position: relative;\n  display: block;\n  padding: 0.5rem 1rem;\n  color: #212529;\n  text-decoration: none;\n  background-color: #fff;\n  border: 1px solid rgba(0, 0, 0, 0.125);\n}\n\n.list-group-item:first-child {\n  border-top-left-radius: inherit;\n  border-top-right-radius: inherit;\n}\n\n.list-group-item:last-child {\n  border-bottom-right-radius: inherit;\n  border-bottom-left-radius: inherit;\n}\n\n.list-group-item.disabled, .list-group-item:disabled {\n  color: #888;\n  pointer-events: none;\n  background-color: #fff;\n}\n\n.list-group-item.active {\n  z-index: 2;\n  color: #fff;\n  background-color: #78c2ad;\n  border-color: #78c2ad;\n}\n\n.list-group-item + .list-group-item {\n  border-top-width: 0;\n}\n\n.list-group-item + .list-group-item.active {\n  margin-top: -1px;\n  border-top-width: 1px;\n}\n\n.list-group-horizontal {\n  -ms-flex-direction: row;\n  flex-direction: row;\n}\n\n.list-group-horizontal > .list-group-item:first-child {\n  border-bottom-left-radius: 0.4rem;\n  border-top-right-radius: 0;\n}\n\n.list-group-horizontal > .list-group-item:last-child {\n  border-top-right-radius: 0.4rem;\n  border-bottom-left-radius: 0;\n}\n\n.list-group-horizontal > .list-group-item.active {\n  margin-top: 0;\n}\n\n.list-group-horizontal > .list-group-item + .list-group-item {\n  border-top-width: 1px;\n  border-left-width: 0;\n}\n\n.list-group-horizontal > .list-group-item + .list-group-item.active {\n  margin-left: -1px;\n  border-left-width: 1px;\n}\n\n@media (min-width: 576px) {\n  .list-group-horizontal-sm {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .list-group-horizontal-sm > .list-group-item:first-child {\n    border-bottom-left-radius: 0.4rem;\n    border-top-right-radius: 0;\n  }\n  .list-group-horizontal-sm > .list-group-item:last-child {\n    border-top-right-radius: 0.4rem;\n    border-bottom-left-radius: 0;\n  }\n  .list-group-horizontal-sm > .list-group-item.active {\n    margin-top: 0;\n  }\n  .list-group-horizontal-sm > .list-group-item + .list-group-item {\n    border-top-width: 1px;\n    border-left-width: 0;\n  }\n  .list-group-horizontal-sm > .list-group-item + .list-group-item.active {\n    margin-left: -1px;\n    border-left-width: 1px;\n  }\n}\n\n@media (min-width: 768px) {\n  .list-group-horizontal-md {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .list-group-horizontal-md > .list-group-item:first-child {\n    border-bottom-left-radius: 0.4rem;\n    border-top-right-radius: 0;\n  }\n  .list-group-horizontal-md > .list-group-item:last-child {\n    border-top-right-radius: 0.4rem;\n    border-bottom-left-radius: 0;\n  }\n  .list-group-horizontal-md > .list-group-item.active {\n    margin-top: 0;\n  }\n  .list-group-horizontal-md > .list-group-item + .list-group-item {\n    border-top-width: 1px;\n    border-left-width: 0;\n  }\n  .list-group-horizontal-md > .list-group-item + .list-group-item.active {\n    margin-left: -1px;\n    border-left-width: 1px;\n  }\n}\n\n@media (min-width: 992px) {\n  .list-group-horizontal-lg {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .list-group-horizontal-lg > .list-group-item:first-child {\n    border-bottom-left-radius: 0.4rem;\n    border-top-right-radius: 0;\n  }\n  .list-group-horizontal-lg > .list-group-item:last-child {\n    border-top-right-radius: 0.4rem;\n    border-bottom-left-radius: 0;\n  }\n  .list-group-horizontal-lg > .list-group-item.active {\n    margin-top: 0;\n  }\n  .list-group-horizontal-lg > .list-group-item + .list-group-item {\n    border-top-width: 1px;\n    border-left-width: 0;\n  }\n  .list-group-horizontal-lg > .list-group-item + .list-group-item.active {\n    margin-left: -1px;\n    border-left-width: 1px;\n  }\n}\n\n@media (min-width: 1200px) {\n  .list-group-horizontal-xl {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .list-group-horizontal-xl > .list-group-item:first-child {\n    border-bottom-left-radius: 0.4rem;\n    border-top-right-radius: 0;\n  }\n  .list-group-horizontal-xl > .list-group-item:last-child {\n    border-top-right-radius: 0.4rem;\n    border-bottom-left-radius: 0;\n  }\n  .list-group-horizontal-xl > .list-group-item.active {\n    margin-top: 0;\n  }\n  .list-group-horizontal-xl > .list-group-item + .list-group-item {\n    border-top-width: 1px;\n    border-left-width: 0;\n  }\n  .list-group-horizontal-xl > .list-group-item + .list-group-item.active {\n    margin-left: -1px;\n    border-left-width: 1px;\n  }\n}\n\n@media (min-width: 1400px) {\n  .list-group-horizontal-xxl {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .list-group-horizontal-xxl > .list-group-item:first-child {\n    border-bottom-left-radius: 0.4rem;\n    border-top-right-radius: 0;\n  }\n  .list-group-horizontal-xxl > .list-group-item:last-child {\n    border-top-right-radius: 0.4rem;\n    border-bottom-left-radius: 0;\n  }\n  .list-group-horizontal-xxl > .list-group-item.active {\n    margin-top: 0;\n  }\n  .list-group-horizontal-xxl > .list-group-item + .list-group-item {\n    border-top-width: 1px;\n    border-left-width: 0;\n  }\n  .list-group-horizontal-xxl > .list-group-item + .list-group-item.active {\n    margin-left: -1px;\n    border-left-width: 1px;\n  }\n}\n\n.list-group-flush {\n  border-radius: 0;\n}\n\n.list-group-flush > .list-group-item {\n  border-width: 0 0 1px;\n}\n\n.list-group-flush > .list-group-item:last-child {\n  border-bottom-width: 0;\n}\n\n.list-group-item-primary {\n  color: #487468;\n  background-color: #e4f3ef;\n}\n\n.list-group-item-primary.list-group-item-action:hover, .list-group-item-primary.list-group-item-action:focus {\n  color: #487468;\n  background-color: #cddbd7;\n}\n\n.list-group-item-primary.list-group-item-action.active {\n  color: #fff;\n  background-color: #487468;\n  border-color: #487468;\n}\n\n.list-group-item-secondary {\n  color: #925a5c;\n  background-color: #fdeaeb;\n}\n\n.list-group-item-secondary.list-group-item-action:hover, .list-group-item-secondary.list-group-item-action:focus {\n  color: #925a5c;\n  background-color: #e4d3d4;\n}\n\n.list-group-item-secondary.list-group-item-action.active {\n  color: #fff;\n  background-color: #925a5c;\n  border-color: #925a5c;\n}\n\n.list-group-item-success {\n  color: #347a5e;\n  background-color: #ddf5eb;\n}\n\n.list-group-item-success.list-group-item-action:hover, .list-group-item-success.list-group-item-action:focus {\n  color: #347a5e;\n  background-color: #c7ddd4;\n}\n\n.list-group-item-success.list-group-item-action.active {\n  color: #fff;\n  background-color: #347a5e;\n  border-color: #347a5e;\n}\n\n.list-group-item-info {\n  color: #417580;\n  background-color: #e2f3f7;\n}\n\n.list-group-item-info.list-group-item-action:hover, .list-group-item-info.list-group-item-action:focus {\n  color: #417580;\n  background-color: #cbdbde;\n}\n\n.list-group-item-info.list-group-item-action.active {\n  color: #fff;\n  background-color: #417580;\n  border-color: #417580;\n}\n\n.list-group-item-warning {\n  color: #997c3e;\n  background-color: #fff5e1;\n}\n\n.list-group-item-warning.list-group-item-action:hover, .list-group-item-warning.list-group-item-action:focus {\n  color: #997c3e;\n  background-color: #e6ddcb;\n}\n\n.list-group-item-warning.list-group-item-action.active {\n  color: #fff;\n  background-color: #997c3e;\n  border-color: #997c3e;\n}\n\n.list-group-item-danger {\n  color: #994831;\n  background-color: #ffe4dc;\n}\n\n.list-group-item-danger.list-group-item-action:hover, .list-group-item-danger.list-group-item-action:focus {\n  color: #994831;\n  background-color: #e6cdc6;\n}\n\n.list-group-item-danger.list-group-item-action.active {\n  color: #fff;\n  background-color: #994831;\n  border-color: #994831;\n}\n\n.list-group-item-light {\n  color: #959596;\n  background-color: #fefefe;\n}\n\n.list-group-item-light.list-group-item-action:hover, .list-group-item-light.list-group-item-action:focus {\n  color: #959596;\n  background-color: #e5e5e5;\n}\n\n.list-group-item-light.list-group-item-action.active {\n  color: #fff;\n  background-color: #959596;\n  border-color: #959596;\n}\n\n.list-group-item-dark {\n  color: #1f2326;\n  background-color: #d6d8d9;\n}\n\n.list-group-item-dark.list-group-item-action:hover, .list-group-item-dark.list-group-item-action:focus {\n  color: #1f2326;\n  background-color: #c1c2c3;\n}\n\n.list-group-item-dark.list-group-item-action.active {\n  color: #fff;\n  background-color: #1f2326;\n  border-color: #1f2326;\n}\n\n.btn-close {\n  box-sizing: content-box;\n  width: 1em;\n  height: 1em;\n  padding: 0.25em 0.25em;\n  color: #000;\n  background: transparent url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23000'%3e%3cpath d='M.293.293a1 1 0 011.414 0L8 6.586 14.293.293a1 1 0 111.414 1.414L9.414 8l6.293 6.293a1 1 0 01-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 01-1.414-1.414L6.586 8 .293 1.707a1 1 0 010-1.414z'/%3e%3c/svg%3e\") center/1em auto no-repeat;\n  border: 0;\n  border-radius: 0.4rem;\n  opacity: 0.5;\n}\n\n.btn-close:hover {\n  color: #000;\n  text-decoration: none;\n  opacity: 0.75;\n}\n\n.btn-close:focus {\n  outline: 0;\n  box-shadow: 0 0 0 0.25rem rgba(120, 194, 173, 0.25);\n  opacity: 1;\n}\n\n.btn-close:disabled, .btn-close.disabled {\n  pointer-events: none;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  user-select: none;\n  opacity: 0.25;\n}\n\n.btn-close-white {\n  -webkit-filter: invert(1) grayscale(100%) brightness(200%);\n  filter: invert(1) grayscale(100%) brightness(200%);\n}\n\n.toast {\n  width: 350px;\n  max-width: 100%;\n  font-size: 0.875rem;\n  pointer-events: auto;\n  background-color: rgba(255, 255, 255, 0.85);\n  background-clip: padding-box;\n  border: 1px solid rgba(0, 0, 0, 0.1);\n  box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15);\n  border-radius: 0.4rem;\n}\n\n.toast.showing {\n  opacity: 0;\n}\n\n.toast:not(.show) {\n  display: none;\n}\n\n.toast-container {\n  width: -webkit-max-content;\n  width: -moz-max-content;\n  width: max-content;\n  max-width: 100%;\n  pointer-events: none;\n}\n\n.toast-container > :not(:last-child) {\n  margin-bottom: 0.75rem;\n}\n\n.toast-header {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-align: center;\n  align-items: center;\n  padding: 0.5rem 0.75rem;\n  color: #888;\n  background-color: rgba(255, 255, 255, 0.85);\n  background-clip: padding-box;\n  border-bottom: 1px solid rgba(0, 0, 0, 0.05);\n  border-top-left-radius: calc(0.4rem - 1px);\n  border-top-right-radius: calc(0.4rem - 1px);\n}\n\n.toast-header .btn-close {\n  margin-right: -0.375rem;\n  margin-left: 0.75rem;\n}\n\n.toast-body {\n  padding: 0.75rem;\n  word-wrap: break-word;\n}\n\n.modal {\n  position: fixed;\n  top: 0;\n  left: 0;\n  z-index: 1055;\n  display: none;\n  width: 100%;\n  height: 100%;\n  overflow-x: hidden;\n  overflow-y: auto;\n  outline: 0;\n}\n\n.modal-dialog {\n  position: relative;\n  width: auto;\n  margin: 0.5rem;\n  pointer-events: none;\n}\n\n.modal.fade .modal-dialog {\n  transition: -webkit-transform 0.3s ease-out;\n  transition: transform 0.3s ease-out;\n  transition: transform 0.3s ease-out, -webkit-transform 0.3s ease-out;\n  -webkit-transform: translate(0, -50px);\n  transform: translate(0, -50px);\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .modal.fade .modal-dialog {\n    transition: none;\n  }\n}\n\n.modal.show .modal-dialog {\n  -webkit-transform: none;\n  transform: none;\n}\n\n.modal.modal-static .modal-dialog {\n  -webkit-transform: scale(1.02);\n  transform: scale(1.02);\n}\n\n.modal-dialog-scrollable {\n  height: calc(100% - 1rem);\n}\n\n.modal-dialog-scrollable .modal-content {\n  max-height: 100%;\n  overflow: hidden;\n}\n\n.modal-dialog-scrollable .modal-body {\n  overflow-y: auto;\n}\n\n.modal-dialog-centered {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-align: center;\n  align-items: center;\n  min-height: calc(100% - 1rem);\n}\n\n.modal-content {\n  position: relative;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  width: 100%;\n  pointer-events: auto;\n  background-color: #fff;\n  background-clip: padding-box;\n  border: 1px solid rgba(0, 0, 0, 0.2);\n  border-radius: 0.6rem;\n  outline: 0;\n}\n\n.modal-backdrop {\n  position: fixed;\n  top: 0;\n  left: 0;\n  z-index: 1050;\n  width: 100vw;\n  height: 100vh;\n  background-color: #000;\n}\n\n.modal-backdrop.fade {\n  opacity: 0;\n}\n\n.modal-backdrop.show {\n  opacity: 0.5;\n}\n\n.modal-header {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-negative: 0;\n  flex-shrink: 0;\n  -ms-flex-align: center;\n  align-items: center;\n  -ms-flex-pack: justify;\n  justify-content: space-between;\n  padding: 1rem 1rem;\n  border-bottom: 1px solid #eceeef;\n  border-top-left-radius: calc(0.6rem - 1px);\n  border-top-right-radius: calc(0.6rem - 1px);\n}\n\n.modal-header .btn-close {\n  padding: 0.5rem 0.5rem;\n  margin: -0.5rem -0.5rem -0.5rem auto;\n}\n\n.modal-title {\n  margin-bottom: 0;\n  line-height: 1.5;\n}\n\n.modal-body {\n  position: relative;\n  -ms-flex: 1 1 auto;\n  flex: 1 1 auto;\n  padding: 1rem;\n}\n\n.modal-footer {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n  flex-wrap: wrap;\n  -ms-flex-negative: 0;\n  flex-shrink: 0;\n  -ms-flex-align: center;\n  align-items: center;\n  -ms-flex-pack: end;\n  justify-content: flex-end;\n  padding: 0.75rem;\n  border-top: 1px solid #eceeef;\n  border-bottom-right-radius: calc(0.6rem - 1px);\n  border-bottom-left-radius: calc(0.6rem - 1px);\n}\n\n.modal-footer > * {\n  margin: 0.25rem;\n}\n\n@media (min-width: 576px) {\n  .modal-dialog {\n    max-width: 500px;\n    margin: 1.75rem auto;\n  }\n  .modal-dialog-scrollable {\n    height: calc(100% - 3.5rem);\n  }\n  .modal-dialog-centered {\n    min-height: calc(100% - 3.5rem);\n  }\n  .modal-sm {\n    max-width: 300px;\n  }\n}\n\n@media (min-width: 992px) {\n  .modal-lg,\n  .modal-xl {\n    max-width: 800px;\n  }\n}\n\n@media (min-width: 1200px) {\n  .modal-xl {\n    max-width: 1140px;\n  }\n}\n\n.modal-fullscreen {\n  width: 100vw;\n  max-width: none;\n  height: 100%;\n  margin: 0;\n}\n\n.modal-fullscreen .modal-content {\n  height: 100%;\n  border: 0;\n  border-radius: 0;\n}\n\n.modal-fullscreen .modal-header {\n  border-radius: 0;\n}\n\n.modal-fullscreen .modal-body {\n  overflow-y: auto;\n}\n\n.modal-fullscreen .modal-footer {\n  border-radius: 0;\n}\n\n@media (max-width: 575.98px) {\n  .modal-fullscreen-sm-down {\n    width: 100vw;\n    max-width: none;\n    height: 100%;\n    margin: 0;\n  }\n  .modal-fullscreen-sm-down .modal-content {\n    height: 100%;\n    border: 0;\n    border-radius: 0;\n  }\n  .modal-fullscreen-sm-down .modal-header {\n    border-radius: 0;\n  }\n  .modal-fullscreen-sm-down .modal-body {\n    overflow-y: auto;\n  }\n  .modal-fullscreen-sm-down .modal-footer {\n    border-radius: 0;\n  }\n}\n\n@media (max-width: 767.98px) {\n  .modal-fullscreen-md-down {\n    width: 100vw;\n    max-width: none;\n    height: 100%;\n    margin: 0;\n  }\n  .modal-fullscreen-md-down .modal-content {\n    height: 100%;\n    border: 0;\n    border-radius: 0;\n  }\n  .modal-fullscreen-md-down .modal-header {\n    border-radius: 0;\n  }\n  .modal-fullscreen-md-down .modal-body {\n    overflow-y: auto;\n  }\n  .modal-fullscreen-md-down .modal-footer {\n    border-radius: 0;\n  }\n}\n\n@media (max-width: 991.98px) {\n  .modal-fullscreen-lg-down {\n    width: 100vw;\n    max-width: none;\n    height: 100%;\n    margin: 0;\n  }\n  .modal-fullscreen-lg-down .modal-content {\n    height: 100%;\n    border: 0;\n    border-radius: 0;\n  }\n  .modal-fullscreen-lg-down .modal-header {\n    border-radius: 0;\n  }\n  .modal-fullscreen-lg-down .modal-body {\n    overflow-y: auto;\n  }\n  .modal-fullscreen-lg-down .modal-footer {\n    border-radius: 0;\n  }\n}\n\n@media (max-width: 1199.98px) {\n  .modal-fullscreen-xl-down {\n    width: 100vw;\n    max-width: none;\n    height: 100%;\n    margin: 0;\n  }\n  .modal-fullscreen-xl-down .modal-content {\n    height: 100%;\n    border: 0;\n    border-radius: 0;\n  }\n  .modal-fullscreen-xl-down .modal-header {\n    border-radius: 0;\n  }\n  .modal-fullscreen-xl-down .modal-body {\n    overflow-y: auto;\n  }\n  .modal-fullscreen-xl-down .modal-footer {\n    border-radius: 0;\n  }\n}\n\n@media (max-width: 1399.98px) {\n  .modal-fullscreen-xxl-down {\n    width: 100vw;\n    max-width: none;\n    height: 100%;\n    margin: 0;\n  }\n  .modal-fullscreen-xxl-down .modal-content {\n    height: 100%;\n    border: 0;\n    border-radius: 0;\n  }\n  .modal-fullscreen-xxl-down .modal-header {\n    border-radius: 0;\n  }\n  .modal-fullscreen-xxl-down .modal-body {\n    overflow-y: auto;\n  }\n  .modal-fullscreen-xxl-down .modal-footer {\n    border-radius: 0;\n  }\n}\n\n.tooltip {\n  position: absolute;\n  z-index: 1080;\n  display: block;\n  margin: 0;\n  font-family: var(--bs-font-sans-serif);\n  font-style: normal;\n  font-weight: 400;\n  line-height: 1.5;\n  text-align: left;\n  text-align: start;\n  text-decoration: none;\n  text-shadow: none;\n  text-transform: none;\n  letter-spacing: normal;\n  word-break: normal;\n  word-spacing: normal;\n  white-space: normal;\n  line-break: auto;\n  font-size: 0.875rem;\n  word-wrap: break-word;\n  opacity: 0;\n}\n\n.tooltip.show {\n  opacity: 0.9;\n}\n\n.tooltip .tooltip-arrow {\n  position: absolute;\n  display: block;\n  width: 0.8rem;\n  height: 0.4rem;\n}\n\n.tooltip .tooltip-arrow::before {\n  position: absolute;\n  content: \"\";\n  border-color: transparent;\n  border-style: solid;\n}\n\n.bs-tooltip-top, .bs-tooltip-auto[data-popper-placement^=\"top\"] {\n  padding: 0.4rem 0;\n}\n\n.bs-tooltip-top .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=\"top\"] .tooltip-arrow {\n  bottom: 0;\n}\n\n.bs-tooltip-top .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=\"top\"] .tooltip-arrow::before {\n  top: -1px;\n  border-width: 0.4rem 0.4rem 0;\n  border-top-color: #000;\n}\n\n.bs-tooltip-end, .bs-tooltip-auto[data-popper-placement^=\"right\"] {\n  padding: 0 0.4rem;\n}\n\n.bs-tooltip-end .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=\"right\"] .tooltip-arrow {\n  left: 0;\n  width: 0.4rem;\n  height: 0.8rem;\n}\n\n.bs-tooltip-end .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=\"right\"] .tooltip-arrow::before {\n  right: -1px;\n  border-width: 0.4rem 0.4rem 0.4rem 0;\n  border-right-color: #000;\n}\n\n.bs-tooltip-bottom, .bs-tooltip-auto[data-popper-placement^=\"bottom\"] {\n  padding: 0.4rem 0;\n}\n\n.bs-tooltip-bottom .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=\"bottom\"] .tooltip-arrow {\n  top: 0;\n}\n\n.bs-tooltip-bottom .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=\"bottom\"] .tooltip-arrow::before {\n  bottom: -1px;\n  border-width: 0 0.4rem 0.4rem;\n  border-bottom-color: #000;\n}\n\n.bs-tooltip-start, .bs-tooltip-auto[data-popper-placement^=\"left\"] {\n  padding: 0 0.4rem;\n}\n\n.bs-tooltip-start .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=\"left\"] .tooltip-arrow {\n  right: 0;\n  width: 0.4rem;\n  height: 0.8rem;\n}\n\n.bs-tooltip-start .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=\"left\"] .tooltip-arrow::before {\n  left: -1px;\n  border-width: 0.4rem 0 0.4rem 0.4rem;\n  border-left-color: #000;\n}\n\n.tooltip-inner {\n  max-width: 200px;\n  padding: 0.25rem 0.5rem;\n  color: #fff;\n  text-align: center;\n  background-color: #000;\n  border-radius: 0.4rem;\n}\n\n.popover {\n  position: absolute;\n  top: 0;\n  left: 0 /* rtl:ignore */;\n  z-index: 1070;\n  display: block;\n  max-width: 276px;\n  font-family: var(--bs-font-sans-serif);\n  font-style: normal;\n  font-weight: 400;\n  line-height: 1.5;\n  text-align: left;\n  text-align: start;\n  text-decoration: none;\n  text-shadow: none;\n  text-transform: none;\n  letter-spacing: normal;\n  word-break: normal;\n  word-spacing: normal;\n  white-space: normal;\n  line-break: auto;\n  font-size: 0.875rem;\n  word-wrap: break-word;\n  background-color: #fff;\n  background-clip: padding-box;\n  border: 1px solid rgba(0, 0, 0, 0.2);\n  border-radius: 0.6rem;\n}\n\n.popover .popover-arrow {\n  position: absolute;\n  display: block;\n  width: 1rem;\n  height: 0.5rem;\n}\n\n.popover .popover-arrow::before, .popover .popover-arrow::after {\n  position: absolute;\n  display: block;\n  content: \"\";\n  border-color: transparent;\n  border-style: solid;\n}\n\n.bs-popover-top > .popover-arrow, .bs-popover-auto[data-popper-placement^=\"top\"] > .popover-arrow {\n  bottom: calc(-0.5rem - 1px);\n}\n\n.bs-popover-top > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=\"top\"] > .popover-arrow::before {\n  bottom: 0;\n  border-width: 0.5rem 0.5rem 0;\n  border-top-color: rgba(0, 0, 0, 0.25);\n}\n\n.bs-popover-top > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=\"top\"] > .popover-arrow::after {\n  bottom: 1px;\n  border-width: 0.5rem 0.5rem 0;\n  border-top-color: #fff;\n}\n\n.bs-popover-end > .popover-arrow, .bs-popover-auto[data-popper-placement^=\"right\"] > .popover-arrow {\n  left: calc(-0.5rem - 1px);\n  width: 0.5rem;\n  height: 1rem;\n}\n\n.bs-popover-end > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=\"right\"] > .popover-arrow::before {\n  left: 0;\n  border-width: 0.5rem 0.5rem 0.5rem 0;\n  border-right-color: rgba(0, 0, 0, 0.25);\n}\n\n.bs-popover-end > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=\"right\"] > .popover-arrow::after {\n  left: 1px;\n  border-width: 0.5rem 0.5rem 0.5rem 0;\n  border-right-color: #fff;\n}\n\n.bs-popover-bottom > .popover-arrow, .bs-popover-auto[data-popper-placement^=\"bottom\"] > .popover-arrow {\n  top: calc(-0.5rem - 1px);\n}\n\n.bs-popover-bottom > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=\"bottom\"] > .popover-arrow::before {\n  top: 0;\n  border-width: 0 0.5rem 0.5rem 0.5rem;\n  border-bottom-color: rgba(0, 0, 0, 0.25);\n}\n\n.bs-popover-bottom > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=\"bottom\"] > .popover-arrow::after {\n  top: 1px;\n  border-width: 0 0.5rem 0.5rem 0.5rem;\n  border-bottom-color: #fff;\n}\n\n.bs-popover-bottom .popover-header::before, .bs-popover-auto[data-popper-placement^=\"bottom\"] .popover-header::before {\n  position: absolute;\n  top: 0;\n  left: 50%;\n  display: block;\n  width: 1rem;\n  margin-left: -0.5rem;\n  content: \"\";\n  border-bottom: 1px solid #f0f0f0;\n}\n\n.bs-popover-start > .popover-arrow, .bs-popover-auto[data-popper-placement^=\"left\"] > .popover-arrow {\n  right: calc(-0.5rem - 1px);\n  width: 0.5rem;\n  height: 1rem;\n}\n\n.bs-popover-start > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=\"left\"] > .popover-arrow::before {\n  right: 0;\n  border-width: 0.5rem 0 0.5rem 0.5rem;\n  border-left-color: rgba(0, 0, 0, 0.25);\n}\n\n.bs-popover-start > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=\"left\"] > .popover-arrow::after {\n  right: 1px;\n  border-width: 0.5rem 0 0.5rem 0.5rem;\n  border-left-color: #fff;\n}\n\n.popover-header {\n  padding: 0.5rem 1rem;\n  margin-bottom: 0;\n  font-size: 1rem;\n  color: #5a5a5a;\n  background-color: #f0f0f0;\n  border-bottom: 1px solid rgba(0, 0, 0, 0.2);\n  border-top-left-radius: calc(0.6rem - 1px);\n  border-top-right-radius: calc(0.6rem - 1px);\n}\n\n.popover-header:empty {\n  display: none;\n}\n\n.popover-body {\n  padding: 1rem 1rem;\n  color: #888;\n}\n\n.carousel {\n  position: relative;\n}\n\n.carousel.pointer-event {\n  -ms-touch-action: pan-y;\n  touch-action: pan-y;\n}\n\n.carousel-inner {\n  position: relative;\n  width: 100%;\n  overflow: hidden;\n}\n\n.carousel-inner::after {\n  display: block;\n  clear: both;\n  content: \"\";\n}\n\n.carousel-item {\n  position: relative;\n  display: none;\n  float: left;\n  width: 100%;\n  margin-right: -100%;\n  -webkit-backface-visibility: hidden;\n  backface-visibility: hidden;\n  transition: -webkit-transform 0.6s ease-in-out;\n  transition: transform 0.6s ease-in-out;\n  transition: transform 0.6s ease-in-out, -webkit-transform 0.6s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .carousel-item {\n    transition: none;\n  }\n}\n\n.carousel-item.active,\n.carousel-item-next,\n.carousel-item-prev {\n  display: block;\n}\n\n/* rtl:begin:ignore */\n.carousel-item-next:not(.carousel-item-start),\n.active.carousel-item-end {\n  -webkit-transform: translateX(100%);\n  transform: translateX(100%);\n}\n\n.carousel-item-prev:not(.carousel-item-end),\n.active.carousel-item-start {\n  -webkit-transform: translateX(-100%);\n  transform: translateX(-100%);\n}\n\n/* rtl:end:ignore */\n.carousel-fade .carousel-item {\n  opacity: 0;\n  transition-property: opacity;\n  -webkit-transform: none;\n  transform: none;\n}\n\n.carousel-fade .carousel-item.active,\n.carousel-fade .carousel-item-next.carousel-item-start,\n.carousel-fade .carousel-item-prev.carousel-item-end {\n  z-index: 1;\n  opacity: 1;\n}\n\n.carousel-fade .active.carousel-item-start,\n.carousel-fade .active.carousel-item-end {\n  z-index: 0;\n  opacity: 0;\n  transition: opacity 0s 0.6s;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .carousel-fade .active.carousel-item-start,\n  .carousel-fade .active.carousel-item-end {\n    transition: none;\n  }\n}\n\n.carousel-control-prev,\n.carousel-control-next {\n  position: absolute;\n  top: 0;\n  bottom: 0;\n  z-index: 1;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-align: center;\n  align-items: center;\n  -ms-flex-pack: center;\n  justify-content: center;\n  width: 15%;\n  padding: 0;\n  color: #fff;\n  text-align: center;\n  background: none;\n  border: 0;\n  opacity: 0.5;\n  transition: opacity 0.15s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .carousel-control-prev,\n  .carousel-control-next {\n    transition: none;\n  }\n}\n\n.carousel-control-prev:hover, .carousel-control-prev:focus,\n.carousel-control-next:hover,\n.carousel-control-next:focus {\n  color: #fff;\n  text-decoration: none;\n  outline: 0;\n  opacity: 0.9;\n}\n\n.carousel-control-prev {\n  left: 0;\n}\n\n.carousel-control-next {\n  right: 0;\n}\n\n.carousel-control-prev-icon,\n.carousel-control-next-icon {\n  display: inline-block;\n  width: 2rem;\n  height: 2rem;\n  background-repeat: no-repeat;\n  background-position: 50%;\n  background-size: 100% 100%;\n}\n\n/* rtl:options: {\n  \"autoRename\": true,\n  \"stringMap\":[ {\n    \"name\"    : \"prev-next\",\n    \"search\"  : \"prev\",\n    \"replace\" : \"next\"\n  } ]\n} */\n.carousel-control-prev-icon {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0z'/%3e%3c/svg%3e\");\n}\n\n.carousel-control-next-icon {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e\");\n}\n\n.carousel-indicators {\n  position: absolute;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 2;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-pack: center;\n  justify-content: center;\n  padding: 0;\n  margin-right: 15%;\n  margin-bottom: 1rem;\n  margin-left: 15%;\n  list-style: none;\n}\n\n.carousel-indicators [data-bs-target] {\n  box-sizing: content-box;\n  -ms-flex: 0 1 auto;\n  flex: 0 1 auto;\n  width: 30px;\n  height: 3px;\n  padding: 0;\n  margin-right: 3px;\n  margin-left: 3px;\n  text-indent: -999px;\n  cursor: pointer;\n  background-color: #fff;\n  background-clip: padding-box;\n  border: 0;\n  border-top: 10px solid transparent;\n  border-bottom: 10px solid transparent;\n  opacity: 0.5;\n  transition: opacity 0.6s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .carousel-indicators [data-bs-target] {\n    transition: none;\n  }\n}\n\n.carousel-indicators .active {\n  opacity: 1;\n}\n\n.carousel-caption {\n  position: absolute;\n  right: 15%;\n  bottom: 1.25rem;\n  left: 15%;\n  padding-top: 1.25rem;\n  padding-bottom: 1.25rem;\n  color: #fff;\n  text-align: center;\n}\n\n.carousel-dark .carousel-control-prev-icon,\n.carousel-dark .carousel-control-next-icon {\n  -webkit-filter: invert(1) grayscale(100);\n  filter: invert(1) grayscale(100);\n}\n\n.carousel-dark .carousel-indicators [data-bs-target] {\n  background-color: #000;\n}\n\n.carousel-dark .carousel-caption {\n  color: #000;\n}\n\n@-webkit-keyframes spinner-border {\n  to {\n    -webkit-transform: rotate(360deg) /* rtl:ignore */;\n    transform: rotate(360deg) /* rtl:ignore */;\n  }\n}\n\n@keyframes spinner-border {\n  to {\n    -webkit-transform: rotate(360deg) /* rtl:ignore */;\n    transform: rotate(360deg) /* rtl:ignore */;\n  }\n}\n\n.spinner-border {\n  display: inline-block;\n  width: 2rem;\n  height: 2rem;\n  vertical-align: -0.125em;\n  border: 0.25em solid currentColor;\n  border-right-color: transparent;\n  border-radius: 50%;\n  -webkit-animation: 0.75s linear infinite spinner-border;\n  animation: 0.75s linear infinite spinner-border;\n}\n\n.spinner-border-sm {\n  width: 1rem;\n  height: 1rem;\n  border-width: 0.2em;\n}\n\n@-webkit-keyframes spinner-grow {\n  0% {\n    -webkit-transform: scale(0);\n    transform: scale(0);\n  }\n  50% {\n    opacity: 1;\n    -webkit-transform: none;\n    transform: none;\n  }\n}\n\n@keyframes spinner-grow {\n  0% {\n    -webkit-transform: scale(0);\n    transform: scale(0);\n  }\n  50% {\n    opacity: 1;\n    -webkit-transform: none;\n    transform: none;\n  }\n}\n\n.spinner-grow {\n  display: inline-block;\n  width: 2rem;\n  height: 2rem;\n  vertical-align: -0.125em;\n  background-color: currentColor;\n  border-radius: 50%;\n  opacity: 0;\n  -webkit-animation: 0.75s linear infinite spinner-grow;\n  animation: 0.75s linear infinite spinner-grow;\n}\n\n.spinner-grow-sm {\n  width: 1rem;\n  height: 1rem;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .spinner-border,\n  .spinner-grow {\n    -webkit-animation-duration: 1.5s;\n    animation-duration: 1.5s;\n  }\n}\n\n.offcanvas {\n  position: fixed;\n  bottom: 0;\n  z-index: 1045;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  max-width: 100%;\n  visibility: hidden;\n  background-color: #fff;\n  background-clip: padding-box;\n  outline: 0;\n  transition: -webkit-transform 0.3s ease-in-out;\n  transition: transform 0.3s ease-in-out;\n  transition: transform 0.3s ease-in-out, -webkit-transform 0.3s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .offcanvas {\n    transition: none;\n  }\n}\n\n.offcanvas-backdrop {\n  position: fixed;\n  top: 0;\n  left: 0;\n  z-index: 1040;\n  width: 100vw;\n  height: 100vh;\n  background-color: #000;\n}\n\n.offcanvas-backdrop.fade {\n  opacity: 0;\n}\n\n.offcanvas-backdrop.show {\n  opacity: 0.5;\n}\n\n.offcanvas-header {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-align: center;\n  align-items: center;\n  -ms-flex-pack: justify;\n  justify-content: space-between;\n  padding: 1rem 1rem;\n}\n\n.offcanvas-header .btn-close {\n  padding: 0.5rem 0.5rem;\n  margin-top: -0.5rem;\n  margin-right: -0.5rem;\n  margin-bottom: -0.5rem;\n}\n\n.offcanvas-title {\n  margin-bottom: 0;\n  line-height: 1.5;\n}\n\n.offcanvas-body {\n  -ms-flex-positive: 1;\n  flex-grow: 1;\n  padding: 1rem 1rem;\n  overflow-y: auto;\n}\n\n.offcanvas-start {\n  top: 0;\n  left: 0;\n  width: 400px;\n  border-right: 1px solid rgba(0, 0, 0, 0.2);\n  -webkit-transform: translateX(-100%);\n  transform: translateX(-100%);\n}\n\n.offcanvas-end {\n  top: 0;\n  right: 0;\n  width: 400px;\n  border-left: 1px solid rgba(0, 0, 0, 0.2);\n  -webkit-transform: translateX(100%);\n  transform: translateX(100%);\n}\n\n.offcanvas-top {\n  top: 0;\n  right: 0;\n  left: 0;\n  height: 30vh;\n  max-height: 100%;\n  border-bottom: 1px solid rgba(0, 0, 0, 0.2);\n  -webkit-transform: translateY(-100%);\n  transform: translateY(-100%);\n}\n\n.offcanvas-bottom {\n  right: 0;\n  left: 0;\n  height: 30vh;\n  max-height: 100%;\n  border-top: 1px solid rgba(0, 0, 0, 0.2);\n  -webkit-transform: translateY(100%);\n  transform: translateY(100%);\n}\n\n.offcanvas.show {\n  -webkit-transform: none;\n  transform: none;\n}\n\n.placeholder {\n  display: inline-block;\n  min-height: 1em;\n  vertical-align: middle;\n  cursor: wait;\n  background-color: currentColor;\n  opacity: 0.5;\n}\n\n.placeholder.btn::before {\n  display: inline-block;\n  content: \"\";\n}\n\n.placeholder-xs {\n  min-height: .6em;\n}\n\n.placeholder-sm {\n  min-height: .8em;\n}\n\n.placeholder-lg {\n  min-height: 1.2em;\n}\n\n.placeholder-glow .placeholder {\n  -webkit-animation: placeholder-glow 2s ease-in-out infinite;\n  animation: placeholder-glow 2s ease-in-out infinite;\n}\n\n@-webkit-keyframes placeholder-glow {\n  50% {\n    opacity: 0.2;\n  }\n}\n\n@keyframes placeholder-glow {\n  50% {\n    opacity: 0.2;\n  }\n}\n\n.placeholder-wave {\n  -webkit-mask-image: linear-gradient(130deg, #000 55%, rgba(0, 0, 0, 0.8) 75%, #000 95%);\n  mask-image: linear-gradient(130deg, #000 55%, rgba(0, 0, 0, 0.8) 75%, #000 95%);\n  -webkit-mask-size: 200% 100%;\n  mask-size: 200% 100%;\n  -webkit-animation: placeholder-wave 2s linear infinite;\n  animation: placeholder-wave 2s linear infinite;\n}\n\n@-webkit-keyframes placeholder-wave {\n  100% {\n    -webkit-mask-position: -200% 0%;\n    mask-position: -200% 0%;\n  }\n}\n\n@keyframes placeholder-wave {\n  100% {\n    -webkit-mask-position: -200% 0%;\n    mask-position: -200% 0%;\n  }\n}\n\n.clearfix::after {\n  display: block;\n  clear: both;\n  content: \"\";\n}\n\n.link-primary {\n  color: #78c2ad;\n}\n\n.link-primary:hover, .link-primary:focus {\n  color: #609b8a;\n}\n\n.link-secondary {\n  color: #f3969a;\n}\n\n.link-secondary:hover, .link-secondary:focus {\n  color: #c2787b;\n}\n\n.link-success {\n  color: #56cc9d;\n}\n\n.link-success:hover, .link-success:focus {\n  color: #45a37e;\n}\n\n.link-info {\n  color: #6cc3d5;\n}\n\n.link-info:hover, .link-info:focus {\n  color: #569caa;\n}\n\n.link-warning {\n  color: #ffce67;\n}\n\n.link-warning:hover, .link-warning:focus {\n  color: #cca552;\n}\n\n.link-danger {\n  color: #ff7851;\n}\n\n.link-danger:hover, .link-danger:focus {\n  color: #cc6041;\n}\n\n.link-light {\n  color: #f8f9fa;\n}\n\n.link-light:hover, .link-light:focus {\n  color: #f9fafb;\n}\n\n.link-dark {\n  color: #343a40;\n}\n\n.link-dark:hover, .link-dark:focus {\n  color: #2a2e33;\n}\n\n.ratio {\n  position: relative;\n  width: 100%;\n}\n\n.ratio::before {\n  display: block;\n  padding-top: var(--bs-aspect-ratio);\n  content: \"\";\n}\n\n.ratio > * {\n  position: absolute;\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n}\n\n.ratio-1x1 {\n  --bs-aspect-ratio: 100%;\n}\n\n.ratio-4x3 {\n  --bs-aspect-ratio: calc(3 / 4 * 100%);\n}\n\n.ratio-16x9 {\n  --bs-aspect-ratio: calc(9 / 16 * 100%);\n}\n\n.ratio-21x9 {\n  --bs-aspect-ratio: calc(9 / 21 * 100%);\n}\n\n.fixed-top {\n  position: fixed;\n  top: 0;\n  right: 0;\n  left: 0;\n  z-index: 1030;\n}\n\n.fixed-bottom {\n  position: fixed;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 1030;\n}\n\n.sticky-top {\n  position: -webkit-sticky;\n  position: sticky;\n  top: 0;\n  z-index: 1020;\n}\n\n@media (min-width: 576px) {\n  .sticky-sm-top {\n    position: -webkit-sticky;\n    position: sticky;\n    top: 0;\n    z-index: 1020;\n  }\n}\n\n@media (min-width: 768px) {\n  .sticky-md-top {\n    position: -webkit-sticky;\n    position: sticky;\n    top: 0;\n    z-index: 1020;\n  }\n}\n\n@media (min-width: 992px) {\n  .sticky-lg-top {\n    position: -webkit-sticky;\n    position: sticky;\n    top: 0;\n    z-index: 1020;\n  }\n}\n\n@media (min-width: 1200px) {\n  .sticky-xl-top {\n    position: -webkit-sticky;\n    position: sticky;\n    top: 0;\n    z-index: 1020;\n  }\n}\n\n@media (min-width: 1400px) {\n  .sticky-xxl-top {\n    position: -webkit-sticky;\n    position: sticky;\n    top: 0;\n    z-index: 1020;\n  }\n}\n\n.hstack {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-direction: row;\n  flex-direction: row;\n  -ms-flex-align: center;\n  align-items: center;\n  -ms-flex-item-align: stretch;\n  align-self: stretch;\n}\n\n.vstack {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex: 1 1 auto;\n  flex: 1 1 auto;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  -ms-flex-item-align: stretch;\n  align-self: stretch;\n}\n\n.visually-hidden,\n.visually-hidden-focusable:not(:focus):not(:focus-within) {\n  position: absolute !important;\n  width: 1px !important;\n  height: 1px !important;\n  padding: 0 !important;\n  margin: -1px !important;\n  overflow: hidden !important;\n  clip: rect(0, 0, 0, 0) !important;\n  white-space: nowrap !important;\n  border: 0 !important;\n}\n\n.stretched-link::after {\n  position: absolute;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 1;\n  content: \"\";\n}\n\n.text-truncate {\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n}\n\n.vr {\n  display: inline-block;\n  -ms-flex-item-align: stretch;\n  align-self: stretch;\n  width: 1px;\n  min-height: 1em;\n  background-color: currentColor;\n  opacity: 0.25;\n}\n\n.align-baseline {\n  vertical-align: baseline !important;\n}\n\n.align-top {\n  vertical-align: top !important;\n}\n\n.align-middle {\n  vertical-align: middle !important;\n}\n\n.align-bottom {\n  vertical-align: bottom !important;\n}\n\n.align-text-bottom {\n  vertical-align: text-bottom !important;\n}\n\n.align-text-top {\n  vertical-align: text-top !important;\n}\n\n.float-start {\n  float: left !important;\n}\n\n.float-end {\n  float: right !important;\n}\n\n.float-none {\n  float: none !important;\n}\n\n.opacity-0 {\n  opacity: 0 !important;\n}\n\n.opacity-25 {\n  opacity: 0.25 !important;\n}\n\n.opacity-50 {\n  opacity: 0.5 !important;\n}\n\n.opacity-75 {\n  opacity: 0.75 !important;\n}\n\n.opacity-100 {\n  opacity: 1 !important;\n}\n\n.overflow-auto {\n  overflow: auto !important;\n}\n\n.overflow-hidden {\n  overflow: hidden !important;\n}\n\n.overflow-visible {\n  overflow: visible !important;\n}\n\n.overflow-scroll {\n  overflow: scroll !important;\n}\n\n.d-inline {\n  display: inline !important;\n}\n\n.d-inline-block {\n  display: inline-block !important;\n}\n\n.d-block {\n  display: block !important;\n}\n\n.d-grid {\n  display: grid !important;\n}\n\n.d-table {\n  display: table !important;\n}\n\n.d-table-row {\n  display: table-row !important;\n}\n\n.d-table-cell {\n  display: table-cell !important;\n}\n\n.d-flex {\n  display: -ms-flexbox !important;\n  display: flex !important;\n}\n\n.d-inline-flex {\n  display: -ms-inline-flexbox !important;\n  display: inline-flex !important;\n}\n\n.d-none {\n  display: none !important;\n}\n\n.shadow {\n  box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15) !important;\n}\n\n.shadow-sm {\n  box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075) !important;\n}\n\n.shadow-lg {\n  box-shadow: 0 1rem 3rem rgba(0, 0, 0, 0.175) !important;\n}\n\n.shadow-none {\n  box-shadow: none !important;\n}\n\n.position-static {\n  position: static !important;\n}\n\n.position-relative {\n  position: relative !important;\n}\n\n.position-absolute {\n  position: absolute !important;\n}\n\n.position-fixed {\n  position: fixed !important;\n}\n\n.position-sticky {\n  position: -webkit-sticky !important;\n  position: sticky !important;\n}\n\n.top-0 {\n  top: 0 !important;\n}\n\n.top-50 {\n  top: 50% !important;\n}\n\n.top-100 {\n  top: 100% !important;\n}\n\n.bottom-0 {\n  bottom: 0 !important;\n}\n\n.bottom-50 {\n  bottom: 50% !important;\n}\n\n.bottom-100 {\n  bottom: 100% !important;\n}\n\n.start-0 {\n  left: 0 !important;\n}\n\n.start-50 {\n  left: 50% !important;\n}\n\n.start-100 {\n  left: 100% !important;\n}\n\n.end-0 {\n  right: 0 !important;\n}\n\n.end-50 {\n  right: 50% !important;\n}\n\n.end-100 {\n  right: 100% !important;\n}\n\n.translate-middle {\n  -webkit-transform: translate(-50%, -50%) !important;\n  transform: translate(-50%, -50%) !important;\n}\n\n.translate-middle-x {\n  -webkit-transform: translateX(-50%) !important;\n  transform: translateX(-50%) !important;\n}\n\n.translate-middle-y {\n  -webkit-transform: translateY(-50%) !important;\n  transform: translateY(-50%) !important;\n}\n\n.border {\n  border: 1px solid #eceeef !important;\n}\n\n.border-0 {\n  border: 0 !important;\n}\n\n.border-top {\n  border-top: 1px solid #eceeef !important;\n}\n\n.border-top-0 {\n  border-top: 0 !important;\n}\n\n.border-end {\n  border-right: 1px solid #eceeef !important;\n}\n\n.border-end-0 {\n  border-right: 0 !important;\n}\n\n.border-bottom {\n  border-bottom: 1px solid #eceeef !important;\n}\n\n.border-bottom-0 {\n  border-bottom: 0 !important;\n}\n\n.border-start {\n  border-left: 1px solid #eceeef !important;\n}\n\n.border-start-0 {\n  border-left: 0 !important;\n}\n\n.border-primary {\n  border-color: #78c2ad !important;\n}\n\n.border-secondary {\n  border-color: #f3969a !important;\n}\n\n.border-success {\n  border-color: #56cc9d !important;\n}\n\n.border-info {\n  border-color: #6cc3d5 !important;\n}\n\n.border-warning {\n  border-color: #ffce67 !important;\n}\n\n.border-danger {\n  border-color: #ff7851 !important;\n}\n\n.border-light {\n  border-color: #f8f9fa !important;\n}\n\n.border-dark {\n  border-color: #343a40 !important;\n}\n\n.border-white {\n  border-color: #fff !important;\n}\n\n.border-1 {\n  border-width: 1px !important;\n}\n\n.border-2 {\n  border-width: 2px !important;\n}\n\n.border-3 {\n  border-width: 3px !important;\n}\n\n.border-4 {\n  border-width: 4px !important;\n}\n\n.border-5 {\n  border-width: 5px !important;\n}\n\n.w-25 {\n  width: 25% !important;\n}\n\n.w-50 {\n  width: 50% !important;\n}\n\n.w-75 {\n  width: 75% !important;\n}\n\n.w-100 {\n  width: 100% !important;\n}\n\n.w-auto {\n  width: auto !important;\n}\n\n.mw-100 {\n  max-width: 100% !important;\n}\n\n.vw-100 {\n  width: 100vw !important;\n}\n\n.min-vw-100 {\n  min-width: 100vw !important;\n}\n\n.h-25 {\n  height: 25% !important;\n}\n\n.h-50 {\n  height: 50% !important;\n}\n\n.h-75 {\n  height: 75% !important;\n}\n\n.h-100 {\n  height: 100% !important;\n}\n\n.h-auto {\n  height: auto !important;\n}\n\n.mh-100 {\n  max-height: 100% !important;\n}\n\n.vh-100 {\n  height: 100vh !important;\n}\n\n.min-vh-100 {\n  min-height: 100vh !important;\n}\n\n.flex-fill {\n  -ms-flex: 1 1 auto !important;\n  flex: 1 1 auto !important;\n}\n\n.flex-row {\n  -ms-flex-direction: row !important;\n  flex-direction: row !important;\n}\n\n.flex-column {\n  -ms-flex-direction: column !important;\n  flex-direction: column !important;\n}\n\n.flex-row-reverse {\n  -ms-flex-direction: row-reverse !important;\n  flex-direction: row-reverse !important;\n}\n\n.flex-column-reverse {\n  -ms-flex-direction: column-reverse !important;\n  flex-direction: column-reverse !important;\n}\n\n.flex-grow-0 {\n  -ms-flex-positive: 0 !important;\n  flex-grow: 0 !important;\n}\n\n.flex-grow-1 {\n  -ms-flex-positive: 1 !important;\n  flex-grow: 1 !important;\n}\n\n.flex-shrink-0 {\n  -ms-flex-negative: 0 !important;\n  flex-shrink: 0 !important;\n}\n\n.flex-shrink-1 {\n  -ms-flex-negative: 1 !important;\n  flex-shrink: 1 !important;\n}\n\n.flex-wrap {\n  -ms-flex-wrap: wrap !important;\n  flex-wrap: wrap !important;\n}\n\n.flex-nowrap {\n  -ms-flex-wrap: nowrap !important;\n  flex-wrap: nowrap !important;\n}\n\n.flex-wrap-reverse {\n  -ms-flex-wrap: wrap-reverse !important;\n  flex-wrap: wrap-reverse !important;\n}\n\n.gap-0 {\n  gap: 0 !important;\n}\n\n.gap-1 {\n  gap: 0.25rem !important;\n}\n\n.gap-2 {\n  gap: 0.5rem !important;\n}\n\n.gap-3 {\n  gap: 1rem !important;\n}\n\n.gap-4 {\n  gap: 1.5rem !important;\n}\n\n.gap-5 {\n  gap: 3rem !important;\n}\n\n.justify-content-start {\n  -ms-flex-pack: start !important;\n  justify-content: flex-start !important;\n}\n\n.justify-content-end {\n  -ms-flex-pack: end !important;\n  justify-content: flex-end !important;\n}\n\n.justify-content-center {\n  -ms-flex-pack: center !important;\n  justify-content: center !important;\n}\n\n.justify-content-between {\n  -ms-flex-pack: justify !important;\n  justify-content: space-between !important;\n}\n\n.justify-content-around {\n  -ms-flex-pack: distribute !important;\n  justify-content: space-around !important;\n}\n\n.justify-content-evenly {\n  -ms-flex-pack: space-evenly !important;\n  justify-content: space-evenly !important;\n}\n\n.align-items-start {\n  -ms-flex-align: start !important;\n  align-items: flex-start !important;\n}\n\n.align-items-end {\n  -ms-flex-align: end !important;\n  align-items: flex-end !important;\n}\n\n.align-items-center {\n  -ms-flex-align: center !important;\n  align-items: center !important;\n}\n\n.align-items-baseline {\n  -ms-flex-align: baseline !important;\n  align-items: baseline !important;\n}\n\n.align-items-stretch {\n  -ms-flex-align: stretch !important;\n  align-items: stretch !important;\n}\n\n.align-content-start {\n  -ms-flex-line-pack: start !important;\n  align-content: flex-start !important;\n}\n\n.align-content-end {\n  -ms-flex-line-pack: end !important;\n  align-content: flex-end !important;\n}\n\n.align-content-center {\n  -ms-flex-line-pack: center !important;\n  align-content: center !important;\n}\n\n.align-content-between {\n  -ms-flex-line-pack: justify !important;\n  align-content: space-between !important;\n}\n\n.align-content-around {\n  -ms-flex-line-pack: distribute !important;\n  align-content: space-around !important;\n}\n\n.align-content-stretch {\n  -ms-flex-line-pack: stretch !important;\n  align-content: stretch !important;\n}\n\n.align-self-auto {\n  -ms-flex-item-align: auto !important;\n  align-self: auto !important;\n}\n\n.align-self-start {\n  -ms-flex-item-align: start !important;\n  align-self: flex-start !important;\n}\n\n.align-self-end {\n  -ms-flex-item-align: end !important;\n  align-self: flex-end !important;\n}\n\n.align-self-center {\n  -ms-flex-item-align: center !important;\n  align-self: center !important;\n}\n\n.align-self-baseline {\n  -ms-flex-item-align: baseline !important;\n  align-self: baseline !important;\n}\n\n.align-self-stretch {\n  -ms-flex-item-align: stretch !important;\n  align-self: stretch !important;\n}\n\n.order-first {\n  -ms-flex-order: -1 !important;\n  order: -1 !important;\n}\n\n.order-0 {\n  -ms-flex-order: 0 !important;\n  order: 0 !important;\n}\n\n.order-1 {\n  -ms-flex-order: 1 !important;\n  order: 1 !important;\n}\n\n.order-2 {\n  -ms-flex-order: 2 !important;\n  order: 2 !important;\n}\n\n.order-3 {\n  -ms-flex-order: 3 !important;\n  order: 3 !important;\n}\n\n.order-4 {\n  -ms-flex-order: 4 !important;\n  order: 4 !important;\n}\n\n.order-5 {\n  -ms-flex-order: 5 !important;\n  order: 5 !important;\n}\n\n.order-last {\n  -ms-flex-order: 6 !important;\n  order: 6 !important;\n}\n\n.m-0 {\n  margin: 0 !important;\n}\n\n.m-1 {\n  margin: 0.25rem !important;\n}\n\n.m-2 {\n  margin: 0.5rem !important;\n}\n\n.m-3 {\n  margin: 1rem !important;\n}\n\n.m-4 {\n  margin: 1.5rem !important;\n}\n\n.m-5 {\n  margin: 3rem !important;\n}\n\n.m-auto {\n  margin: auto !important;\n}\n\n.mx-0 {\n  margin-right: 0 !important;\n  margin-left: 0 !important;\n}\n\n.mx-1 {\n  margin-right: 0.25rem !important;\n  margin-left: 0.25rem !important;\n}\n\n.mx-2 {\n  margin-right: 0.5rem !important;\n  margin-left: 0.5rem !important;\n}\n\n.mx-3 {\n  margin-right: 1rem !important;\n  margin-left: 1rem !important;\n}\n\n.mx-4 {\n  margin-right: 1.5rem !important;\n  margin-left: 1.5rem !important;\n}\n\n.mx-5 {\n  margin-right: 3rem !important;\n  margin-left: 3rem !important;\n}\n\n.mx-auto {\n  margin-right: auto !important;\n  margin-left: auto !important;\n}\n\n.my-0 {\n  margin-top: 0 !important;\n  margin-bottom: 0 !important;\n}\n\n.my-1 {\n  margin-top: 0.25rem !important;\n  margin-bottom: 0.25rem !important;\n}\n\n.my-2 {\n  margin-top: 0.5rem !important;\n  margin-bottom: 0.5rem !important;\n}\n\n.my-3 {\n  margin-top: 1rem !important;\n  margin-bottom: 1rem !important;\n}\n\n.my-4 {\n  margin-top: 1.5rem !important;\n  margin-bottom: 1.5rem !important;\n}\n\n.my-5 {\n  margin-top: 3rem !important;\n  margin-bottom: 3rem !important;\n}\n\n.my-auto {\n  margin-top: auto !important;\n  margin-bottom: auto !important;\n}\n\n.mt-0 {\n  margin-top: 0 !important;\n}\n\n.mt-1 {\n  margin-top: 0.25rem !important;\n}\n\n.mt-2 {\n  margin-top: 0.5rem !important;\n}\n\n.mt-3 {\n  margin-top: 1rem !important;\n}\n\n.mt-4 {\n  margin-top: 1.5rem !important;\n}\n\n.mt-5 {\n  margin-top: 3rem !important;\n}\n\n.mt-auto {\n  margin-top: auto !important;\n}\n\n.me-0 {\n  margin-right: 0 !important;\n}\n\n.me-1 {\n  margin-right: 0.25rem !important;\n}\n\n.me-2 {\n  margin-right: 0.5rem !important;\n}\n\n.me-3 {\n  margin-right: 1rem !important;\n}\n\n.me-4 {\n  margin-right: 1.5rem !important;\n}\n\n.me-5 {\n  margin-right: 3rem !important;\n}\n\n.me-auto {\n  margin-right: auto !important;\n}\n\n.mb-0 {\n  margin-bottom: 0 !important;\n}\n\n.mb-1 {\n  margin-bottom: 0.25rem !important;\n}\n\n.mb-2 {\n  margin-bottom: 0.5rem !important;\n}\n\n.mb-3 {\n  margin-bottom: 1rem !important;\n}\n\n.mb-4 {\n  margin-bottom: 1.5rem !important;\n}\n\n.mb-5 {\n  margin-bottom: 3rem !important;\n}\n\n.mb-auto {\n  margin-bottom: auto !important;\n}\n\n.ms-0 {\n  margin-left: 0 !important;\n}\n\n.ms-1 {\n  margin-left: 0.25rem !important;\n}\n\n.ms-2 {\n  margin-left: 0.5rem !important;\n}\n\n.ms-3 {\n  margin-left: 1rem !important;\n}\n\n.ms-4 {\n  margin-left: 1.5rem !important;\n}\n\n.ms-5 {\n  margin-left: 3rem !important;\n}\n\n.ms-auto {\n  margin-left: auto !important;\n}\n\n.p-0 {\n  padding: 0 !important;\n}\n\n.p-1 {\n  padding: 0.25rem !important;\n}\n\n.p-2 {\n  padding: 0.5rem !important;\n}\n\n.p-3 {\n  padding: 1rem !important;\n}\n\n.p-4 {\n  padding: 1.5rem !important;\n}\n\n.p-5 {\n  padding: 3rem !important;\n}\n\n.px-0 {\n  padding-right: 0 !important;\n  padding-left: 0 !important;\n}\n\n.px-1 {\n  padding-right: 0.25rem !important;\n  padding-left: 0.25rem !important;\n}\n\n.px-2 {\n  padding-right: 0.5rem !important;\n  padding-left: 0.5rem !important;\n}\n\n.px-3 {\n  padding-right: 1rem !important;\n  padding-left: 1rem !important;\n}\n\n.px-4 {\n  padding-right: 1.5rem !important;\n  padding-left: 1.5rem !important;\n}\n\n.px-5 {\n  padding-right: 3rem !important;\n  padding-left: 3rem !important;\n}\n\n.py-0 {\n  padding-top: 0 !important;\n  padding-bottom: 0 !important;\n}\n\n.py-1 {\n  padding-top: 0.25rem !important;\n  padding-bottom: 0.25rem !important;\n}\n\n.py-2 {\n  padding-top: 0.5rem !important;\n  padding-bottom: 0.5rem !important;\n}\n\n.py-3 {\n  padding-top: 1rem !important;\n  padding-bottom: 1rem !important;\n}\n\n.py-4 {\n  padding-top: 1.5rem !important;\n  padding-bottom: 1.5rem !important;\n}\n\n.py-5 {\n  padding-top: 3rem !important;\n  padding-bottom: 3rem !important;\n}\n\n.pt-0 {\n  padding-top: 0 !important;\n}\n\n.pt-1 {\n  padding-top: 0.25rem !important;\n}\n\n.pt-2 {\n  padding-top: 0.5rem !important;\n}\n\n.pt-3 {\n  padding-top: 1rem !important;\n}\n\n.pt-4 {\n  padding-top: 1.5rem !important;\n}\n\n.pt-5 {\n  padding-top: 3rem !important;\n}\n\n.pe-0 {\n  padding-right: 0 !important;\n}\n\n.pe-1 {\n  padding-right: 0.25rem !important;\n}\n\n.pe-2 {\n  padding-right: 0.5rem !important;\n}\n\n.pe-3 {\n  padding-right: 1rem !important;\n}\n\n.pe-4 {\n  padding-right: 1.5rem !important;\n}\n\n.pe-5 {\n  padding-right: 3rem !important;\n}\n\n.pb-0 {\n  padding-bottom: 0 !important;\n}\n\n.pb-1 {\n  padding-bottom: 0.25rem !important;\n}\n\n.pb-2 {\n  padding-bottom: 0.5rem !important;\n}\n\n.pb-3 {\n  padding-bottom: 1rem !important;\n}\n\n.pb-4 {\n  padding-bottom: 1.5rem !important;\n}\n\n.pb-5 {\n  padding-bottom: 3rem !important;\n}\n\n.ps-0 {\n  padding-left: 0 !important;\n}\n\n.ps-1 {\n  padding-left: 0.25rem !important;\n}\n\n.ps-2 {\n  padding-left: 0.5rem !important;\n}\n\n.ps-3 {\n  padding-left: 1rem !important;\n}\n\n.ps-4 {\n  padding-left: 1.5rem !important;\n}\n\n.ps-5 {\n  padding-left: 3rem !important;\n}\n\n.font-monospace {\n  font-family: var(--bs-font-monospace) !important;\n}\n\n.fs-1 {\n  font-size: calc(1.375rem + 1.5vw) !important;\n}\n\n.fs-2 {\n  font-size: calc(1.325rem + 0.9vw) !important;\n}\n\n.fs-3 {\n  font-size: calc(1.3rem + 0.6vw) !important;\n}\n\n.fs-4 {\n  font-size: calc(1.275rem + 0.3vw) !important;\n}\n\n.fs-5 {\n  font-size: 1.25rem !important;\n}\n\n.fs-6 {\n  font-size: 1rem !important;\n}\n\n.fst-italic {\n  font-style: italic !important;\n}\n\n.fst-normal {\n  font-style: normal !important;\n}\n\n.fw-light {\n  font-weight: 300 !important;\n}\n\n.fw-lighter {\n  font-weight: lighter !important;\n}\n\n.fw-normal {\n  font-weight: 400 !important;\n}\n\n.fw-bold {\n  font-weight: 700 !important;\n}\n\n.fw-bolder {\n  font-weight: bolder !important;\n}\n\n.lh-1 {\n  line-height: 1 !important;\n}\n\n.lh-sm {\n  line-height: 1.25 !important;\n}\n\n.lh-base {\n  line-height: 1.5 !important;\n}\n\n.lh-lg {\n  line-height: 2 !important;\n}\n\n.text-start {\n  text-align: left !important;\n}\n\n.text-end {\n  text-align: right !important;\n}\n\n.text-center {\n  text-align: center !important;\n}\n\n.text-decoration-none {\n  text-decoration: none !important;\n}\n\n.text-decoration-underline {\n  text-decoration: underline !important;\n}\n\n.text-decoration-line-through {\n  text-decoration: line-through !important;\n}\n\n.text-lowercase {\n  text-transform: lowercase !important;\n}\n\n.text-uppercase {\n  text-transform: uppercase !important;\n}\n\n.text-capitalize {\n  text-transform: capitalize !important;\n}\n\n.text-wrap {\n  white-space: normal !important;\n}\n\n.text-nowrap {\n  white-space: nowrap !important;\n}\n\n/* rtl:begin:remove */\n.text-break {\n  word-wrap: break-word !important;\n  word-break: break-word !important;\n}\n\n/* rtl:end:remove */\n.text-primary {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-primary-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-secondary {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-secondary-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-success {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-success-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-info {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-info-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-warning {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-warning-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-danger {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-danger-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-light {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-light-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-dark {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-dark-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-black {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-black-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-white {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-white-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-body {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-body-color-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-muted {\n  --bs-text-opacity: 1;\n  color: #888 !important;\n}\n\n.text-black-50 {\n  --bs-text-opacity: 1;\n  color: rgba(0, 0, 0, 0.5) !important;\n}\n\n.text-white-50 {\n  --bs-text-opacity: 1;\n  color: rgba(255, 255, 255, 0.5) !important;\n}\n\n.text-reset {\n  --bs-text-opacity: 1;\n  color: inherit !important;\n}\n\n.text-opacity-25 {\n  --bs-text-opacity: 0.25;\n}\n\n.text-opacity-50 {\n  --bs-text-opacity: 0.5;\n}\n\n.text-opacity-75 {\n  --bs-text-opacity: 0.75;\n}\n\n.text-opacity-100 {\n  --bs-text-opacity: 1;\n}\n\n.bg-primary {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-primary-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-secondary {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-secondary-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-success {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-success-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-info {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-info-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-warning {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-warning-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-danger {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-danger-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-light {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-light-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-dark {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-dark-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-black {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-black-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-white {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-white-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-body {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-body-bg-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-transparent {\n  --bs-bg-opacity: 1;\n  background-color: transparent !important;\n}\n\n.bg-opacity-10 {\n  --bs-bg-opacity: 0.1;\n}\n\n.bg-opacity-25 {\n  --bs-bg-opacity: 0.25;\n}\n\n.bg-opacity-50 {\n  --bs-bg-opacity: 0.5;\n}\n\n.bg-opacity-75 {\n  --bs-bg-opacity: 0.75;\n}\n\n.bg-opacity-100 {\n  --bs-bg-opacity: 1;\n}\n\n.bg-gradient {\n  background-image: var(--bs-gradient) !important;\n}\n\n.user-select-all {\n  -webkit-user-select: all !important;\n  -moz-user-select: all !important;\n  user-select: all !important;\n}\n\n.user-select-auto {\n  -webkit-user-select: auto !important;\n  -moz-user-select: auto !important;\n  -ms-user-select: auto !important;\n  user-select: auto !important;\n}\n\n.user-select-none {\n  -webkit-user-select: none !important;\n  -moz-user-select: none !important;\n  -ms-user-select: none !important;\n  user-select: none !important;\n}\n\n.pe-none {\n  pointer-events: none !important;\n}\n\n.pe-auto {\n  pointer-events: auto !important;\n}\n\n.rounded {\n  border-radius: 0.4rem !important;\n}\n\n.rounded-0 {\n  border-radius: 0 !important;\n}\n\n.rounded-1 {\n  border-radius: 0.3rem !important;\n}\n\n.rounded-2 {\n  border-radius: 0.4rem !important;\n}\n\n.rounded-3 {\n  border-radius: 0.6rem !important;\n}\n\n.rounded-circle {\n  border-radius: 50% !important;\n}\n\n.rounded-pill {\n  border-radius: 50rem !important;\n}\n\n.rounded-top {\n  border-top-left-radius: 0.4rem !important;\n  border-top-right-radius: 0.4rem !important;\n}\n\n.rounded-end {\n  border-top-right-radius: 0.4rem !important;\n  border-bottom-right-radius: 0.4rem !important;\n}\n\n.rounded-bottom {\n  border-bottom-right-radius: 0.4rem !important;\n  border-bottom-left-radius: 0.4rem !important;\n}\n\n.rounded-start {\n  border-bottom-left-radius: 0.4rem !important;\n  border-top-left-radius: 0.4rem !important;\n}\n\n.visible {\n  visibility: visible !important;\n}\n\n.invisible {\n  visibility: hidden !important;\n}\n\n@media (min-width: 576px) {\n  .float-sm-start {\n    float: left !important;\n  }\n  .float-sm-end {\n    float: right !important;\n  }\n  .float-sm-none {\n    float: none !important;\n  }\n  .d-sm-inline {\n    display: inline !important;\n  }\n  .d-sm-inline-block {\n    display: inline-block !important;\n  }\n  .d-sm-block {\n    display: block !important;\n  }\n  .d-sm-grid {\n    display: grid !important;\n  }\n  .d-sm-table {\n    display: table !important;\n  }\n  .d-sm-table-row {\n    display: table-row !important;\n  }\n  .d-sm-table-cell {\n    display: table-cell !important;\n  }\n  .d-sm-flex {\n    display: -ms-flexbox !important;\n    display: flex !important;\n  }\n  .d-sm-inline-flex {\n    display: -ms-inline-flexbox !important;\n    display: inline-flex !important;\n  }\n  .d-sm-none {\n    display: none !important;\n  }\n  .flex-sm-fill {\n    -ms-flex: 1 1 auto !important;\n    flex: 1 1 auto !important;\n  }\n  .flex-sm-row {\n    -ms-flex-direction: row !important;\n    flex-direction: row !important;\n  }\n  .flex-sm-column {\n    -ms-flex-direction: column !important;\n    flex-direction: column !important;\n  }\n  .flex-sm-row-reverse {\n    -ms-flex-direction: row-reverse !important;\n    flex-direction: row-reverse !important;\n  }\n  .flex-sm-column-reverse {\n    -ms-flex-direction: column-reverse !important;\n    flex-direction: column-reverse !important;\n  }\n  .flex-sm-grow-0 {\n    -ms-flex-positive: 0 !important;\n    flex-grow: 0 !important;\n  }\n  .flex-sm-grow-1 {\n    -ms-flex-positive: 1 !important;\n    flex-grow: 1 !important;\n  }\n  .flex-sm-shrink-0 {\n    -ms-flex-negative: 0 !important;\n    flex-shrink: 0 !important;\n  }\n  .flex-sm-shrink-1 {\n    -ms-flex-negative: 1 !important;\n    flex-shrink: 1 !important;\n  }\n  .flex-sm-wrap {\n    -ms-flex-wrap: wrap !important;\n    flex-wrap: wrap !important;\n  }\n  .flex-sm-nowrap {\n    -ms-flex-wrap: nowrap !important;\n    flex-wrap: nowrap !important;\n  }\n  .flex-sm-wrap-reverse {\n    -ms-flex-wrap: wrap-reverse !important;\n    flex-wrap: wrap-reverse !important;\n  }\n  .gap-sm-0 {\n    gap: 0 !important;\n  }\n  .gap-sm-1 {\n    gap: 0.25rem !important;\n  }\n  .gap-sm-2 {\n    gap: 0.5rem !important;\n  }\n  .gap-sm-3 {\n    gap: 1rem !important;\n  }\n  .gap-sm-4 {\n    gap: 1.5rem !important;\n  }\n  .gap-sm-5 {\n    gap: 3rem !important;\n  }\n  .justify-content-sm-start {\n    -ms-flex-pack: start !important;\n    justify-content: flex-start !important;\n  }\n  .justify-content-sm-end {\n    -ms-flex-pack: end !important;\n    justify-content: flex-end !important;\n  }\n  .justify-content-sm-center {\n    -ms-flex-pack: center !important;\n    justify-content: center !important;\n  }\n  .justify-content-sm-between {\n    -ms-flex-pack: justify !important;\n    justify-content: space-between !important;\n  }\n  .justify-content-sm-around {\n    -ms-flex-pack: distribute !important;\n    justify-content: space-around !important;\n  }\n  .justify-content-sm-evenly {\n    -ms-flex-pack: space-evenly !important;\n    justify-content: space-evenly !important;\n  }\n  .align-items-sm-start {\n    -ms-flex-align: start !important;\n    align-items: flex-start !important;\n  }\n  .align-items-sm-end {\n    -ms-flex-align: end !important;\n    align-items: flex-end !important;\n  }\n  .align-items-sm-center {\n    -ms-flex-align: center !important;\n    align-items: center !important;\n  }\n  .align-items-sm-baseline {\n    -ms-flex-align: baseline !important;\n    align-items: baseline !important;\n  }\n  .align-items-sm-stretch {\n    -ms-flex-align: stretch !important;\n    align-items: stretch !important;\n  }\n  .align-content-sm-start {\n    -ms-flex-line-pack: start !important;\n    align-content: flex-start !important;\n  }\n  .align-content-sm-end {\n    -ms-flex-line-pack: end !important;\n    align-content: flex-end !important;\n  }\n  .align-content-sm-center {\n    -ms-flex-line-pack: center !important;\n    align-content: center !important;\n  }\n  .align-content-sm-between {\n    -ms-flex-line-pack: justify !important;\n    align-content: space-between !important;\n  }\n  .align-content-sm-around {\n    -ms-flex-line-pack: distribute !important;\n    align-content: space-around !important;\n  }\n  .align-content-sm-stretch {\n    -ms-flex-line-pack: stretch !important;\n    align-content: stretch !important;\n  }\n  .align-self-sm-auto {\n    -ms-flex-item-align: auto !important;\n    align-self: auto !important;\n  }\n  .align-self-sm-start {\n    -ms-flex-item-align: start !important;\n    align-self: flex-start !important;\n  }\n  .align-self-sm-end {\n    -ms-flex-item-align: end !important;\n    align-self: flex-end !important;\n  }\n  .align-self-sm-center {\n    -ms-flex-item-align: center !important;\n    align-self: center !important;\n  }\n  .align-self-sm-baseline {\n    -ms-flex-item-align: baseline !important;\n    align-self: baseline !important;\n  }\n  .align-self-sm-stretch {\n    -ms-flex-item-align: stretch !important;\n    align-self: stretch !important;\n  }\n  .order-sm-first {\n    -ms-flex-order: -1 !important;\n    order: -1 !important;\n  }\n  .order-sm-0 {\n    -ms-flex-order: 0 !important;\n    order: 0 !important;\n  }\n  .order-sm-1 {\n    -ms-flex-order: 1 !important;\n    order: 1 !important;\n  }\n  .order-sm-2 {\n    -ms-flex-order: 2 !important;\n    order: 2 !important;\n  }\n  .order-sm-3 {\n    -ms-flex-order: 3 !important;\n    order: 3 !important;\n  }\n  .order-sm-4 {\n    -ms-flex-order: 4 !important;\n    order: 4 !important;\n  }\n  .order-sm-5 {\n    -ms-flex-order: 5 !important;\n    order: 5 !important;\n  }\n  .order-sm-last {\n    -ms-flex-order: 6 !important;\n    order: 6 !important;\n  }\n  .m-sm-0 {\n    margin: 0 !important;\n  }\n  .m-sm-1 {\n    margin: 0.25rem !important;\n  }\n  .m-sm-2 {\n    margin: 0.5rem !important;\n  }\n  .m-sm-3 {\n    margin: 1rem !important;\n  }\n  .m-sm-4 {\n    margin: 1.5rem !important;\n  }\n  .m-sm-5 {\n    margin: 3rem !important;\n  }\n  .m-sm-auto {\n    margin: auto !important;\n  }\n  .mx-sm-0 {\n    margin-right: 0 !important;\n    margin-left: 0 !important;\n  }\n  .mx-sm-1 {\n    margin-right: 0.25rem !important;\n    margin-left: 0.25rem !important;\n  }\n  .mx-sm-2 {\n    margin-right: 0.5rem !important;\n    margin-left: 0.5rem !important;\n  }\n  .mx-sm-3 {\n    margin-right: 1rem !important;\n    margin-left: 1rem !important;\n  }\n  .mx-sm-4 {\n    margin-right: 1.5rem !important;\n    margin-left: 1.5rem !important;\n  }\n  .mx-sm-5 {\n    margin-right: 3rem !important;\n    margin-left: 3rem !important;\n  }\n  .mx-sm-auto {\n    margin-right: auto !important;\n    margin-left: auto !important;\n  }\n  .my-sm-0 {\n    margin-top: 0 !important;\n    margin-bottom: 0 !important;\n  }\n  .my-sm-1 {\n    margin-top: 0.25rem !important;\n    margin-bottom: 0.25rem !important;\n  }\n  .my-sm-2 {\n    margin-top: 0.5rem !important;\n    margin-bottom: 0.5rem !important;\n  }\n  .my-sm-3 {\n    margin-top: 1rem !important;\n    margin-bottom: 1rem !important;\n  }\n  .my-sm-4 {\n    margin-top: 1.5rem !important;\n    margin-bottom: 1.5rem !important;\n  }\n  .my-sm-5 {\n    margin-top: 3rem !important;\n    margin-bottom: 3rem !important;\n  }\n  .my-sm-auto {\n    margin-top: auto !important;\n    margin-bottom: auto !important;\n  }\n  .mt-sm-0 {\n    margin-top: 0 !important;\n  }\n  .mt-sm-1 {\n    margin-top: 0.25rem !important;\n  }\n  .mt-sm-2 {\n    margin-top: 0.5rem !important;\n  }\n  .mt-sm-3 {\n    margin-top: 1rem !important;\n  }\n  .mt-sm-4 {\n    margin-top: 1.5rem !important;\n  }\n  .mt-sm-5 {\n    margin-top: 3rem !important;\n  }\n  .mt-sm-auto {\n    margin-top: auto !important;\n  }\n  .me-sm-0 {\n    margin-right: 0 !important;\n  }\n  .me-sm-1 {\n    margin-right: 0.25rem !important;\n  }\n  .me-sm-2 {\n    margin-right: 0.5rem !important;\n  }\n  .me-sm-3 {\n    margin-right: 1rem !important;\n  }\n  .me-sm-4 {\n    margin-right: 1.5rem !important;\n  }\n  .me-sm-5 {\n    margin-right: 3rem !important;\n  }\n  .me-sm-auto {\n    margin-right: auto !important;\n  }\n  .mb-sm-0 {\n    margin-bottom: 0 !important;\n  }\n  .mb-sm-1 {\n    margin-bottom: 0.25rem !important;\n  }\n  .mb-sm-2 {\n    margin-bottom: 0.5rem !important;\n  }\n  .mb-sm-3 {\n    margin-bottom: 1rem !important;\n  }\n  .mb-sm-4 {\n    margin-bottom: 1.5rem !important;\n  }\n  .mb-sm-5 {\n    margin-bottom: 3rem !important;\n  }\n  .mb-sm-auto {\n    margin-bottom: auto !important;\n  }\n  .ms-sm-0 {\n    margin-left: 0 !important;\n  }\n  .ms-sm-1 {\n    margin-left: 0.25rem !important;\n  }\n  .ms-sm-2 {\n    margin-left: 0.5rem !important;\n  }\n  .ms-sm-3 {\n    margin-left: 1rem !important;\n  }\n  .ms-sm-4 {\n    margin-left: 1.5rem !important;\n  }\n  .ms-sm-5 {\n    margin-left: 3rem !important;\n  }\n  .ms-sm-auto {\n    margin-left: auto !important;\n  }\n  .p-sm-0 {\n    padding: 0 !important;\n  }\n  .p-sm-1 {\n    padding: 0.25rem !important;\n  }\n  .p-sm-2 {\n    padding: 0.5rem !important;\n  }\n  .p-sm-3 {\n    padding: 1rem !important;\n  }\n  .p-sm-4 {\n    padding: 1.5rem !important;\n  }\n  .p-sm-5 {\n    padding: 3rem !important;\n  }\n  .px-sm-0 {\n    padding-right: 0 !important;\n    padding-left: 0 !important;\n  }\n  .px-sm-1 {\n    padding-right: 0.25rem !important;\n    padding-left: 0.25rem !important;\n  }\n  .px-sm-2 {\n    padding-right: 0.5rem !important;\n    padding-left: 0.5rem !important;\n  }\n  .px-sm-3 {\n    padding-right: 1rem !important;\n    padding-left: 1rem !important;\n  }\n  .px-sm-4 {\n    padding-right: 1.5rem !important;\n    padding-left: 1.5rem !important;\n  }\n  .px-sm-5 {\n    padding-right: 3rem !important;\n    padding-left: 3rem !important;\n  }\n  .py-sm-0 {\n    padding-top: 0 !important;\n    padding-bottom: 0 !important;\n  }\n  .py-sm-1 {\n    padding-top: 0.25rem !important;\n    padding-bottom: 0.25rem !important;\n  }\n  .py-sm-2 {\n    padding-top: 0.5rem !important;\n    padding-bottom: 0.5rem !important;\n  }\n  .py-sm-3 {\n    padding-top: 1rem !important;\n    padding-bottom: 1rem !important;\n  }\n  .py-sm-4 {\n    padding-top: 1.5rem !important;\n    padding-bottom: 1.5rem !important;\n  }\n  .py-sm-5 {\n    padding-top: 3rem !important;\n    padding-bottom: 3rem !important;\n  }\n  .pt-sm-0 {\n    padding-top: 0 !important;\n  }\n  .pt-sm-1 {\n    padding-top: 0.25rem !important;\n  }\n  .pt-sm-2 {\n    padding-top: 0.5rem !important;\n  }\n  .pt-sm-3 {\n    padding-top: 1rem !important;\n  }\n  .pt-sm-4 {\n    padding-top: 1.5rem !important;\n  }\n  .pt-sm-5 {\n    padding-top: 3rem !important;\n  }\n  .pe-sm-0 {\n    padding-right: 0 !important;\n  }\n  .pe-sm-1 {\n    padding-right: 0.25rem !important;\n  }\n  .pe-sm-2 {\n    padding-right: 0.5rem !important;\n  }\n  .pe-sm-3 {\n    padding-right: 1rem !important;\n  }\n  .pe-sm-4 {\n    padding-right: 1.5rem !important;\n  }\n  .pe-sm-5 {\n    padding-right: 3rem !important;\n  }\n  .pb-sm-0 {\n    padding-bottom: 0 !important;\n  }\n  .pb-sm-1 {\n    padding-bottom: 0.25rem !important;\n  }\n  .pb-sm-2 {\n    padding-bottom: 0.5rem !important;\n  }\n  .pb-sm-3 {\n    padding-bottom: 1rem !important;\n  }\n  .pb-sm-4 {\n    padding-bottom: 1.5rem !important;\n  }\n  .pb-sm-5 {\n    padding-bottom: 3rem !important;\n  }\n  .ps-sm-0 {\n    padding-left: 0 !important;\n  }\n  .ps-sm-1 {\n    padding-left: 0.25rem !important;\n  }\n  .ps-sm-2 {\n    padding-left: 0.5rem !important;\n  }\n  .ps-sm-3 {\n    padding-left: 1rem !important;\n  }\n  .ps-sm-4 {\n    padding-left: 1.5rem !important;\n  }\n  .ps-sm-5 {\n    padding-left: 3rem !important;\n  }\n  .text-sm-start {\n    text-align: left !important;\n  }\n  .text-sm-end {\n    text-align: right !important;\n  }\n  .text-sm-center {\n    text-align: center !important;\n  }\n}\n\n@media (min-width: 768px) {\n  .float-md-start {\n    float: left !important;\n  }\n  .float-md-end {\n    float: right !important;\n  }\n  .float-md-none {\n    float: none !important;\n  }\n  .d-md-inline {\n    display: inline !important;\n  }\n  .d-md-inline-block {\n    display: inline-block !important;\n  }\n  .d-md-block {\n    display: block !important;\n  }\n  .d-md-grid {\n    display: grid !important;\n  }\n  .d-md-table {\n    display: table !important;\n  }\n  .d-md-table-row {\n    display: table-row !important;\n  }\n  .d-md-table-cell {\n    display: table-cell !important;\n  }\n  .d-md-flex {\n    display: -ms-flexbox !important;\n    display: flex !important;\n  }\n  .d-md-inline-flex {\n    display: -ms-inline-flexbox !important;\n    display: inline-flex !important;\n  }\n  .d-md-none {\n    display: none !important;\n  }\n  .flex-md-fill {\n    -ms-flex: 1 1 auto !important;\n    flex: 1 1 auto !important;\n  }\n  .flex-md-row {\n    -ms-flex-direction: row !important;\n    flex-direction: row !important;\n  }\n  .flex-md-column {\n    -ms-flex-direction: column !important;\n    flex-direction: column !important;\n  }\n  .flex-md-row-reverse {\n    -ms-flex-direction: row-reverse !important;\n    flex-direction: row-reverse !important;\n  }\n  .flex-md-column-reverse {\n    -ms-flex-direction: column-reverse !important;\n    flex-direction: column-reverse !important;\n  }\n  .flex-md-grow-0 {\n    -ms-flex-positive: 0 !important;\n    flex-grow: 0 !important;\n  }\n  .flex-md-grow-1 {\n    -ms-flex-positive: 1 !important;\n    flex-grow: 1 !important;\n  }\n  .flex-md-shrink-0 {\n    -ms-flex-negative: 0 !important;\n    flex-shrink: 0 !important;\n  }\n  .flex-md-shrink-1 {\n    -ms-flex-negative: 1 !important;\n    flex-shrink: 1 !important;\n  }\n  .flex-md-wrap {\n    -ms-flex-wrap: wrap !important;\n    flex-wrap: wrap !important;\n  }\n  .flex-md-nowrap {\n    -ms-flex-wrap: nowrap !important;\n    flex-wrap: nowrap !important;\n  }\n  .flex-md-wrap-reverse {\n    -ms-flex-wrap: wrap-reverse !important;\n    flex-wrap: wrap-reverse !important;\n  }\n  .gap-md-0 {\n    gap: 0 !important;\n  }\n  .gap-md-1 {\n    gap: 0.25rem !important;\n  }\n  .gap-md-2 {\n    gap: 0.5rem !important;\n  }\n  .gap-md-3 {\n    gap: 1rem !important;\n  }\n  .gap-md-4 {\n    gap: 1.5rem !important;\n  }\n  .gap-md-5 {\n    gap: 3rem !important;\n  }\n  .justify-content-md-start {\n    -ms-flex-pack: start !important;\n    justify-content: flex-start !important;\n  }\n  .justify-content-md-end {\n    -ms-flex-pack: end !important;\n    justify-content: flex-end !important;\n  }\n  .justify-content-md-center {\n    -ms-flex-pack: center !important;\n    justify-content: center !important;\n  }\n  .justify-content-md-between {\n    -ms-flex-pack: justify !important;\n    justify-content: space-between !important;\n  }\n  .justify-content-md-around {\n    -ms-flex-pack: distribute !important;\n    justify-content: space-around !important;\n  }\n  .justify-content-md-evenly {\n    -ms-flex-pack: space-evenly !important;\n    justify-content: space-evenly !important;\n  }\n  .align-items-md-start {\n    -ms-flex-align: start !important;\n    align-items: flex-start !important;\n  }\n  .align-items-md-end {\n    -ms-flex-align: end !important;\n    align-items: flex-end !important;\n  }\n  .align-items-md-center {\n    -ms-flex-align: center !important;\n    align-items: center !important;\n  }\n  .align-items-md-baseline {\n    -ms-flex-align: baseline !important;\n    align-items: baseline !important;\n  }\n  .align-items-md-stretch {\n    -ms-flex-align: stretch !important;\n    align-items: stretch !important;\n  }\n  .align-content-md-start {\n    -ms-flex-line-pack: start !important;\n    align-content: flex-start !important;\n  }\n  .align-content-md-end {\n    -ms-flex-line-pack: end !important;\n    align-content: flex-end !important;\n  }\n  .align-content-md-center {\n    -ms-flex-line-pack: center !important;\n    align-content: center !important;\n  }\n  .align-content-md-between {\n    -ms-flex-line-pack: justify !important;\n    align-content: space-between !important;\n  }\n  .align-content-md-around {\n    -ms-flex-line-pack: distribute !important;\n    align-content: space-around !important;\n  }\n  .align-content-md-stretch {\n    -ms-flex-line-pack: stretch !important;\n    align-content: stretch !important;\n  }\n  .align-self-md-auto {\n    -ms-flex-item-align: auto !important;\n    align-self: auto !important;\n  }\n  .align-self-md-start {\n    -ms-flex-item-align: start !important;\n    align-self: flex-start !important;\n  }\n  .align-self-md-end {\n    -ms-flex-item-align: end !important;\n    align-self: flex-end !important;\n  }\n  .align-self-md-center {\n    -ms-flex-item-align: center !important;\n    align-self: center !important;\n  }\n  .align-self-md-baseline {\n    -ms-flex-item-align: baseline !important;\n    align-self: baseline !important;\n  }\n  .align-self-md-stretch {\n    -ms-flex-item-align: stretch !important;\n    align-self: stretch !important;\n  }\n  .order-md-first {\n    -ms-flex-order: -1 !important;\n    order: -1 !important;\n  }\n  .order-md-0 {\n    -ms-flex-order: 0 !important;\n    order: 0 !important;\n  }\n  .order-md-1 {\n    -ms-flex-order: 1 !important;\n    order: 1 !important;\n  }\n  .order-md-2 {\n    -ms-flex-order: 2 !important;\n    order: 2 !important;\n  }\n  .order-md-3 {\n    -ms-flex-order: 3 !important;\n    order: 3 !important;\n  }\n  .order-md-4 {\n    -ms-flex-order: 4 !important;\n    order: 4 !important;\n  }\n  .order-md-5 {\n    -ms-flex-order: 5 !important;\n    order: 5 !important;\n  }\n  .order-md-last {\n    -ms-flex-order: 6 !important;\n    order: 6 !important;\n  }\n  .m-md-0 {\n    margin: 0 !important;\n  }\n  .m-md-1 {\n    margin: 0.25rem !important;\n  }\n  .m-md-2 {\n    margin: 0.5rem !important;\n  }\n  .m-md-3 {\n    margin: 1rem !important;\n  }\n  .m-md-4 {\n    margin: 1.5rem !important;\n  }\n  .m-md-5 {\n    margin: 3rem !important;\n  }\n  .m-md-auto {\n    margin: auto !important;\n  }\n  .mx-md-0 {\n    margin-right: 0 !important;\n    margin-left: 0 !important;\n  }\n  .mx-md-1 {\n    margin-right: 0.25rem !important;\n    margin-left: 0.25rem !important;\n  }\n  .mx-md-2 {\n    margin-right: 0.5rem !important;\n    margin-left: 0.5rem !important;\n  }\n  .mx-md-3 {\n    margin-right: 1rem !important;\n    margin-left: 1rem !important;\n  }\n  .mx-md-4 {\n    margin-right: 1.5rem !important;\n    margin-left: 1.5rem !important;\n  }\n  .mx-md-5 {\n    margin-right: 3rem !important;\n    margin-left: 3rem !important;\n  }\n  .mx-md-auto {\n    margin-right: auto !important;\n    margin-left: auto !important;\n  }\n  .my-md-0 {\n    margin-top: 0 !important;\n    margin-bottom: 0 !important;\n  }\n  .my-md-1 {\n    margin-top: 0.25rem !important;\n    margin-bottom: 0.25rem !important;\n  }\n  .my-md-2 {\n    margin-top: 0.5rem !important;\n    margin-bottom: 0.5rem !important;\n  }\n  .my-md-3 {\n    margin-top: 1rem !important;\n    margin-bottom: 1rem !important;\n  }\n  .my-md-4 {\n    margin-top: 1.5rem !important;\n    margin-bottom: 1.5rem !important;\n  }\n  .my-md-5 {\n    margin-top: 3rem !important;\n    margin-bottom: 3rem !important;\n  }\n  .my-md-auto {\n    margin-top: auto !important;\n    margin-bottom: auto !important;\n  }\n  .mt-md-0 {\n    margin-top: 0 !important;\n  }\n  .mt-md-1 {\n    margin-top: 0.25rem !important;\n  }\n  .mt-md-2 {\n    margin-top: 0.5rem !important;\n  }\n  .mt-md-3 {\n    margin-top: 1rem !important;\n  }\n  .mt-md-4 {\n    margin-top: 1.5rem !important;\n  }\n  .mt-md-5 {\n    margin-top: 3rem !important;\n  }\n  .mt-md-auto {\n    margin-top: auto !important;\n  }\n  .me-md-0 {\n    margin-right: 0 !important;\n  }\n  .me-md-1 {\n    margin-right: 0.25rem !important;\n  }\n  .me-md-2 {\n    margin-right: 0.5rem !important;\n  }\n  .me-md-3 {\n    margin-right: 1rem !important;\n  }\n  .me-md-4 {\n    margin-right: 1.5rem !important;\n  }\n  .me-md-5 {\n    margin-right: 3rem !important;\n  }\n  .me-md-auto {\n    margin-right: auto !important;\n  }\n  .mb-md-0 {\n    margin-bottom: 0 !important;\n  }\n  .mb-md-1 {\n    margin-bottom: 0.25rem !important;\n  }\n  .mb-md-2 {\n    margin-bottom: 0.5rem !important;\n  }\n  .mb-md-3 {\n    margin-bottom: 1rem !important;\n  }\n  .mb-md-4 {\n    margin-bottom: 1.5rem !important;\n  }\n  .mb-md-5 {\n    margin-bottom: 3rem !important;\n  }\n  .mb-md-auto {\n    margin-bottom: auto !important;\n  }\n  .ms-md-0 {\n    margin-left: 0 !important;\n  }\n  .ms-md-1 {\n    margin-left: 0.25rem !important;\n  }\n  .ms-md-2 {\n    margin-left: 0.5rem !important;\n  }\n  .ms-md-3 {\n    margin-left: 1rem !important;\n  }\n  .ms-md-4 {\n    margin-left: 1.5rem !important;\n  }\n  .ms-md-5 {\n    margin-left: 3rem !important;\n  }\n  .ms-md-auto {\n    margin-left: auto !important;\n  }\n  .p-md-0 {\n    padding: 0 !important;\n  }\n  .p-md-1 {\n    padding: 0.25rem !important;\n  }\n  .p-md-2 {\n    padding: 0.5rem !important;\n  }\n  .p-md-3 {\n    padding: 1rem !important;\n  }\n  .p-md-4 {\n    padding: 1.5rem !important;\n  }\n  .p-md-5 {\n    padding: 3rem !important;\n  }\n  .px-md-0 {\n    padding-right: 0 !important;\n    padding-left: 0 !important;\n  }\n  .px-md-1 {\n    padding-right: 0.25rem !important;\n    padding-left: 0.25rem !important;\n  }\n  .px-md-2 {\n    padding-right: 0.5rem !important;\n    padding-left: 0.5rem !important;\n  }\n  .px-md-3 {\n    padding-right: 1rem !important;\n    padding-left: 1rem !important;\n  }\n  .px-md-4 {\n    padding-right: 1.5rem !important;\n    padding-left: 1.5rem !important;\n  }\n  .px-md-5 {\n    padding-right: 3rem !important;\n    padding-left: 3rem !important;\n  }\n  .py-md-0 {\n    padding-top: 0 !important;\n    padding-bottom: 0 !important;\n  }\n  .py-md-1 {\n    padding-top: 0.25rem !important;\n    padding-bottom: 0.25rem !important;\n  }\n  .py-md-2 {\n    padding-top: 0.5rem !important;\n    padding-bottom: 0.5rem !important;\n  }\n  .py-md-3 {\n    padding-top: 1rem !important;\n    padding-bottom: 1rem !important;\n  }\n  .py-md-4 {\n    padding-top: 1.5rem !important;\n    padding-bottom: 1.5rem !important;\n  }\n  .py-md-5 {\n    padding-top: 3rem !important;\n    padding-bottom: 3rem !important;\n  }\n  .pt-md-0 {\n    padding-top: 0 !important;\n  }\n  .pt-md-1 {\n    padding-top: 0.25rem !important;\n  }\n  .pt-md-2 {\n    padding-top: 0.5rem !important;\n  }\n  .pt-md-3 {\n    padding-top: 1rem !important;\n  }\n  .pt-md-4 {\n    padding-top: 1.5rem !important;\n  }\n  .pt-md-5 {\n    padding-top: 3rem !important;\n  }\n  .pe-md-0 {\n    padding-right: 0 !important;\n  }\n  .pe-md-1 {\n    padding-right: 0.25rem !important;\n  }\n  .pe-md-2 {\n    padding-right: 0.5rem !important;\n  }\n  .pe-md-3 {\n    padding-right: 1rem !important;\n  }\n  .pe-md-4 {\n    padding-right: 1.5rem !important;\n  }\n  .pe-md-5 {\n    padding-right: 3rem !important;\n  }\n  .pb-md-0 {\n    padding-bottom: 0 !important;\n  }\n  .pb-md-1 {\n    padding-bottom: 0.25rem !important;\n  }\n  .pb-md-2 {\n    padding-bottom: 0.5rem !important;\n  }\n  .pb-md-3 {\n    padding-bottom: 1rem !important;\n  }\n  .pb-md-4 {\n    padding-bottom: 1.5rem !important;\n  }\n  .pb-md-5 {\n    padding-bottom: 3rem !important;\n  }\n  .ps-md-0 {\n    padding-left: 0 !important;\n  }\n  .ps-md-1 {\n    padding-left: 0.25rem !important;\n  }\n  .ps-md-2 {\n    padding-left: 0.5rem !important;\n  }\n  .ps-md-3 {\n    padding-left: 1rem !important;\n  }\n  .ps-md-4 {\n    padding-left: 1.5rem !important;\n  }\n  .ps-md-5 {\n    padding-left: 3rem !important;\n  }\n  .text-md-start {\n    text-align: left !important;\n  }\n  .text-md-end {\n    text-align: right !important;\n  }\n  .text-md-center {\n    text-align: center !important;\n  }\n}\n\n@media (min-width: 992px) {\n  .float-lg-start {\n    float: left !important;\n  }\n  .float-lg-end {\n    float: right !important;\n  }\n  .float-lg-none {\n    float: none !important;\n  }\n  .d-lg-inline {\n    display: inline !important;\n  }\n  .d-lg-inline-block {\n    display: inline-block !important;\n  }\n  .d-lg-block {\n    display: block !important;\n  }\n  .d-lg-grid {\n    display: grid !important;\n  }\n  .d-lg-table {\n    display: table !important;\n  }\n  .d-lg-table-row {\n    display: table-row !important;\n  }\n  .d-lg-table-cell {\n    display: table-cell !important;\n  }\n  .d-lg-flex {\n    display: -ms-flexbox !important;\n    display: flex !important;\n  }\n  .d-lg-inline-flex {\n    display: -ms-inline-flexbox !important;\n    display: inline-flex !important;\n  }\n  .d-lg-none {\n    display: none !important;\n  }\n  .flex-lg-fill {\n    -ms-flex: 1 1 auto !important;\n    flex: 1 1 auto !important;\n  }\n  .flex-lg-row {\n    -ms-flex-direction: row !important;\n    flex-direction: row !important;\n  }\n  .flex-lg-column {\n    -ms-flex-direction: column !important;\n    flex-direction: column !important;\n  }\n  .flex-lg-row-reverse {\n    -ms-flex-direction: row-reverse !important;\n    flex-direction: row-reverse !important;\n  }\n  .flex-lg-column-reverse {\n    -ms-flex-direction: column-reverse !important;\n    flex-direction: column-reverse !important;\n  }\n  .flex-lg-grow-0 {\n    -ms-flex-positive: 0 !important;\n    flex-grow: 0 !important;\n  }\n  .flex-lg-grow-1 {\n    -ms-flex-positive: 1 !important;\n    flex-grow: 1 !important;\n  }\n  .flex-lg-shrink-0 {\n    -ms-flex-negative: 0 !important;\n    flex-shrink: 0 !important;\n  }\n  .flex-lg-shrink-1 {\n    -ms-flex-negative: 1 !important;\n    flex-shrink: 1 !important;\n  }\n  .flex-lg-wrap {\n    -ms-flex-wrap: wrap !important;\n    flex-wrap: wrap !important;\n  }\n  .flex-lg-nowrap {\n    -ms-flex-wrap: nowrap !important;\n    flex-wrap: nowrap !important;\n  }\n  .flex-lg-wrap-reverse {\n    -ms-flex-wrap: wrap-reverse !important;\n    flex-wrap: wrap-reverse !important;\n  }\n  .gap-lg-0 {\n    gap: 0 !important;\n  }\n  .gap-lg-1 {\n    gap: 0.25rem !important;\n  }\n  .gap-lg-2 {\n    gap: 0.5rem !important;\n  }\n  .gap-lg-3 {\n    gap: 1rem !important;\n  }\n  .gap-lg-4 {\n    gap: 1.5rem !important;\n  }\n  .gap-lg-5 {\n    gap: 3rem !important;\n  }\n  .justify-content-lg-start {\n    -ms-flex-pack: start !important;\n    justify-content: flex-start !important;\n  }\n  .justify-content-lg-end {\n    -ms-flex-pack: end !important;\n    justify-content: flex-end !important;\n  }\n  .justify-content-lg-center {\n    -ms-flex-pack: center !important;\n    justify-content: center !important;\n  }\n  .justify-content-lg-between {\n    -ms-flex-pack: justify !important;\n    justify-content: space-between !important;\n  }\n  .justify-content-lg-around {\n    -ms-flex-pack: distribute !important;\n    justify-content: space-around !important;\n  }\n  .justify-content-lg-evenly {\n    -ms-flex-pack: space-evenly !important;\n    justify-content: space-evenly !important;\n  }\n  .align-items-lg-start {\n    -ms-flex-align: start !important;\n    align-items: flex-start !important;\n  }\n  .align-items-lg-end {\n    -ms-flex-align: end !important;\n    align-items: flex-end !important;\n  }\n  .align-items-lg-center {\n    -ms-flex-align: center !important;\n    align-items: center !important;\n  }\n  .align-items-lg-baseline {\n    -ms-flex-align: baseline !important;\n    align-items: baseline !important;\n  }\n  .align-items-lg-stretch {\n    -ms-flex-align: stretch !important;\n    align-items: stretch !important;\n  }\n  .align-content-lg-start {\n    -ms-flex-line-pack: start !important;\n    align-content: flex-start !important;\n  }\n  .align-content-lg-end {\n    -ms-flex-line-pack: end !important;\n    align-content: flex-end !important;\n  }\n  .align-content-lg-center {\n    -ms-flex-line-pack: center !important;\n    align-content: center !important;\n  }\n  .align-content-lg-between {\n    -ms-flex-line-pack: justify !important;\n    align-content: space-between !important;\n  }\n  .align-content-lg-around {\n    -ms-flex-line-pack: distribute !important;\n    align-content: space-around !important;\n  }\n  .align-content-lg-stretch {\n    -ms-flex-line-pack: stretch !important;\n    align-content: stretch !important;\n  }\n  .align-self-lg-auto {\n    -ms-flex-item-align: auto !important;\n    align-self: auto !important;\n  }\n  .align-self-lg-start {\n    -ms-flex-item-align: start !important;\n    align-self: flex-start !important;\n  }\n  .align-self-lg-end {\n    -ms-flex-item-align: end !important;\n    align-self: flex-end !important;\n  }\n  .align-self-lg-center {\n    -ms-flex-item-align: center !important;\n    align-self: center !important;\n  }\n  .align-self-lg-baseline {\n    -ms-flex-item-align: baseline !important;\n    align-self: baseline !important;\n  }\n  .align-self-lg-stretch {\n    -ms-flex-item-align: stretch !important;\n    align-self: stretch !important;\n  }\n  .order-lg-first {\n    -ms-flex-order: -1 !important;\n    order: -1 !important;\n  }\n  .order-lg-0 {\n    -ms-flex-order: 0 !important;\n    order: 0 !important;\n  }\n  .order-lg-1 {\n    -ms-flex-order: 1 !important;\n    order: 1 !important;\n  }\n  .order-lg-2 {\n    -ms-flex-order: 2 !important;\n    order: 2 !important;\n  }\n  .order-lg-3 {\n    -ms-flex-order: 3 !important;\n    order: 3 !important;\n  }\n  .order-lg-4 {\n    -ms-flex-order: 4 !important;\n    order: 4 !important;\n  }\n  .order-lg-5 {\n    -ms-flex-order: 5 !important;\n    order: 5 !important;\n  }\n  .order-lg-last {\n    -ms-flex-order: 6 !important;\n    order: 6 !important;\n  }\n  .m-lg-0 {\n    margin: 0 !important;\n  }\n  .m-lg-1 {\n    margin: 0.25rem !important;\n  }\n  .m-lg-2 {\n    margin: 0.5rem !important;\n  }\n  .m-lg-3 {\n    margin: 1rem !important;\n  }\n  .m-lg-4 {\n    margin: 1.5rem !important;\n  }\n  .m-lg-5 {\n    margin: 3rem !important;\n  }\n  .m-lg-auto {\n    margin: auto !important;\n  }\n  .mx-lg-0 {\n    margin-right: 0 !important;\n    margin-left: 0 !important;\n  }\n  .mx-lg-1 {\n    margin-right: 0.25rem !important;\n    margin-left: 0.25rem !important;\n  }\n  .mx-lg-2 {\n    margin-right: 0.5rem !important;\n    margin-left: 0.5rem !important;\n  }\n  .mx-lg-3 {\n    margin-right: 1rem !important;\n    margin-left: 1rem !important;\n  }\n  .mx-lg-4 {\n    margin-right: 1.5rem !important;\n    margin-left: 1.5rem !important;\n  }\n  .mx-lg-5 {\n    margin-right: 3rem !important;\n    margin-left: 3rem !important;\n  }\n  .mx-lg-auto {\n    margin-right: auto !important;\n    margin-left: auto !important;\n  }\n  .my-lg-0 {\n    margin-top: 0 !important;\n    margin-bottom: 0 !important;\n  }\n  .my-lg-1 {\n    margin-top: 0.25rem !important;\n    margin-bottom: 0.25rem !important;\n  }\n  .my-lg-2 {\n    margin-top: 0.5rem !important;\n    margin-bottom: 0.5rem !important;\n  }\n  .my-lg-3 {\n    margin-top: 1rem !important;\n    margin-bottom: 1rem !important;\n  }\n  .my-lg-4 {\n    margin-top: 1.5rem !important;\n    margin-bottom: 1.5rem !important;\n  }\n  .my-lg-5 {\n    margin-top: 3rem !important;\n    margin-bottom: 3rem !important;\n  }\n  .my-lg-auto {\n    margin-top: auto !important;\n    margin-bottom: auto !important;\n  }\n  .mt-lg-0 {\n    margin-top: 0 !important;\n  }\n  .mt-lg-1 {\n    margin-top: 0.25rem !important;\n  }\n  .mt-lg-2 {\n    margin-top: 0.5rem !important;\n  }\n  .mt-lg-3 {\n    margin-top: 1rem !important;\n  }\n  .mt-lg-4 {\n    margin-top: 1.5rem !important;\n  }\n  .mt-lg-5 {\n    margin-top: 3rem !important;\n  }\n  .mt-lg-auto {\n    margin-top: auto !important;\n  }\n  .me-lg-0 {\n    margin-right: 0 !important;\n  }\n  .me-lg-1 {\n    margin-right: 0.25rem !important;\n  }\n  .me-lg-2 {\n    margin-right: 0.5rem !important;\n  }\n  .me-lg-3 {\n    margin-right: 1rem !important;\n  }\n  .me-lg-4 {\n    margin-right: 1.5rem !important;\n  }\n  .me-lg-5 {\n    margin-right: 3rem !important;\n  }\n  .me-lg-auto {\n    margin-right: auto !important;\n  }\n  .mb-lg-0 {\n    margin-bottom: 0 !important;\n  }\n  .mb-lg-1 {\n    margin-bottom: 0.25rem !important;\n  }\n  .mb-lg-2 {\n    margin-bottom: 0.5rem !important;\n  }\n  .mb-lg-3 {\n    margin-bottom: 1rem !important;\n  }\n  .mb-lg-4 {\n    margin-bottom: 1.5rem !important;\n  }\n  .mb-lg-5 {\n    margin-bottom: 3rem !important;\n  }\n  .mb-lg-auto {\n    margin-bottom: auto !important;\n  }\n  .ms-lg-0 {\n    margin-left: 0 !important;\n  }\n  .ms-lg-1 {\n    margin-left: 0.25rem !important;\n  }\n  .ms-lg-2 {\n    margin-left: 0.5rem !important;\n  }\n  .ms-lg-3 {\n    margin-left: 1rem !important;\n  }\n  .ms-lg-4 {\n    margin-left: 1.5rem !important;\n  }\n  .ms-lg-5 {\n    margin-left: 3rem !important;\n  }\n  .ms-lg-auto {\n    margin-left: auto !important;\n  }\n  .p-lg-0 {\n    padding: 0 !important;\n  }\n  .p-lg-1 {\n    padding: 0.25rem !important;\n  }\n  .p-lg-2 {\n    padding: 0.5rem !important;\n  }\n  .p-lg-3 {\n    padding: 1rem !important;\n  }\n  .p-lg-4 {\n    padding: 1.5rem !important;\n  }\n  .p-lg-5 {\n    padding: 3rem !important;\n  }\n  .px-lg-0 {\n    padding-right: 0 !important;\n    padding-left: 0 !important;\n  }\n  .px-lg-1 {\n    padding-right: 0.25rem !important;\n    padding-left: 0.25rem !important;\n  }\n  .px-lg-2 {\n    padding-right: 0.5rem !important;\n    padding-left: 0.5rem !important;\n  }\n  .px-lg-3 {\n    padding-right: 1rem !important;\n    padding-left: 1rem !important;\n  }\n  .px-lg-4 {\n    padding-right: 1.5rem !important;\n    padding-left: 1.5rem !important;\n  }\n  .px-lg-5 {\n    padding-right: 3rem !important;\n    padding-left: 3rem !important;\n  }\n  .py-lg-0 {\n    padding-top: 0 !important;\n    padding-bottom: 0 !important;\n  }\n  .py-lg-1 {\n    padding-top: 0.25rem !important;\n    padding-bottom: 0.25rem !important;\n  }\n  .py-lg-2 {\n    padding-top: 0.5rem !important;\n    padding-bottom: 0.5rem !important;\n  }\n  .py-lg-3 {\n    padding-top: 1rem !important;\n    padding-bottom: 1rem !important;\n  }\n  .py-lg-4 {\n    padding-top: 1.5rem !important;\n    padding-bottom: 1.5rem !important;\n  }\n  .py-lg-5 {\n    padding-top: 3rem !important;\n    padding-bottom: 3rem !important;\n  }\n  .pt-lg-0 {\n    padding-top: 0 !important;\n  }\n  .pt-lg-1 {\n    padding-top: 0.25rem !important;\n  }\n  .pt-lg-2 {\n    padding-top: 0.5rem !important;\n  }\n  .pt-lg-3 {\n    padding-top: 1rem !important;\n  }\n  .pt-lg-4 {\n    padding-top: 1.5rem !important;\n  }\n  .pt-lg-5 {\n    padding-top: 3rem !important;\n  }\n  .pe-lg-0 {\n    padding-right: 0 !important;\n  }\n  .pe-lg-1 {\n    padding-right: 0.25rem !important;\n  }\n  .pe-lg-2 {\n    padding-right: 0.5rem !important;\n  }\n  .pe-lg-3 {\n    padding-right: 1rem !important;\n  }\n  .pe-lg-4 {\n    padding-right: 1.5rem !important;\n  }\n  .pe-lg-5 {\n    padding-right: 3rem !important;\n  }\n  .pb-lg-0 {\n    padding-bottom: 0 !important;\n  }\n  .pb-lg-1 {\n    padding-bottom: 0.25rem !important;\n  }\n  .pb-lg-2 {\n    padding-bottom: 0.5rem !important;\n  }\n  .pb-lg-3 {\n    padding-bottom: 1rem !important;\n  }\n  .pb-lg-4 {\n    padding-bottom: 1.5rem !important;\n  }\n  .pb-lg-5 {\n    padding-bottom: 3rem !important;\n  }\n  .ps-lg-0 {\n    padding-left: 0 !important;\n  }\n  .ps-lg-1 {\n    padding-left: 0.25rem !important;\n  }\n  .ps-lg-2 {\n    padding-left: 0.5rem !important;\n  }\n  .ps-lg-3 {\n    padding-left: 1rem !important;\n  }\n  .ps-lg-4 {\n    padding-left: 1.5rem !important;\n  }\n  .ps-lg-5 {\n    padding-left: 3rem !important;\n  }\n  .text-lg-start {\n    text-align: left !important;\n  }\n  .text-lg-end {\n    text-align: right !important;\n  }\n  .text-lg-center {\n    text-align: center !important;\n  }\n}\n\n@media (min-width: 1200px) {\n  .float-xl-start {\n    float: left !important;\n  }\n  .float-xl-end {\n    float: right !important;\n  }\n  .float-xl-none {\n    float: none !important;\n  }\n  .d-xl-inline {\n    display: inline !important;\n  }\n  .d-xl-inline-block {\n    display: inline-block !important;\n  }\n  .d-xl-block {\n    display: block !important;\n  }\n  .d-xl-grid {\n    display: grid !important;\n  }\n  .d-xl-table {\n    display: table !important;\n  }\n  .d-xl-table-row {\n    display: table-row !important;\n  }\n  .d-xl-table-cell {\n    display: table-cell !important;\n  }\n  .d-xl-flex {\n    display: -ms-flexbox !important;\n    display: flex !important;\n  }\n  .d-xl-inline-flex {\n    display: -ms-inline-flexbox !important;\n    display: inline-flex !important;\n  }\n  .d-xl-none {\n    display: none !important;\n  }\n  .flex-xl-fill {\n    -ms-flex: 1 1 auto !important;\n    flex: 1 1 auto !important;\n  }\n  .flex-xl-row {\n    -ms-flex-direction: row !important;\n    flex-direction: row !important;\n  }\n  .flex-xl-column {\n    -ms-flex-direction: column !important;\n    flex-direction: column !important;\n  }\n  .flex-xl-row-reverse {\n    -ms-flex-direction: row-reverse !important;\n    flex-direction: row-reverse !important;\n  }\n  .flex-xl-column-reverse {\n    -ms-flex-direction: column-reverse !important;\n    flex-direction: column-reverse !important;\n  }\n  .flex-xl-grow-0 {\n    -ms-flex-positive: 0 !important;\n    flex-grow: 0 !important;\n  }\n  .flex-xl-grow-1 {\n    -ms-flex-positive: 1 !important;\n    flex-grow: 1 !important;\n  }\n  .flex-xl-shrink-0 {\n    -ms-flex-negative: 0 !important;\n    flex-shrink: 0 !important;\n  }\n  .flex-xl-shrink-1 {\n    -ms-flex-negative: 1 !important;\n    flex-shrink: 1 !important;\n  }\n  .flex-xl-wrap {\n    -ms-flex-wrap: wrap !important;\n    flex-wrap: wrap !important;\n  }\n  .flex-xl-nowrap {\n    -ms-flex-wrap: nowrap !important;\n    flex-wrap: nowrap !important;\n  }\n  .flex-xl-wrap-reverse {\n    -ms-flex-wrap: wrap-reverse !important;\n    flex-wrap: wrap-reverse !important;\n  }\n  .gap-xl-0 {\n    gap: 0 !important;\n  }\n  .gap-xl-1 {\n    gap: 0.25rem !important;\n  }\n  .gap-xl-2 {\n    gap: 0.5rem !important;\n  }\n  .gap-xl-3 {\n    gap: 1rem !important;\n  }\n  .gap-xl-4 {\n    gap: 1.5rem !important;\n  }\n  .gap-xl-5 {\n    gap: 3rem !important;\n  }\n  .justify-content-xl-start {\n    -ms-flex-pack: start !important;\n    justify-content: flex-start !important;\n  }\n  .justify-content-xl-end {\n    -ms-flex-pack: end !important;\n    justify-content: flex-end !important;\n  }\n  .justify-content-xl-center {\n    -ms-flex-pack: center !important;\n    justify-content: center !important;\n  }\n  .justify-content-xl-between {\n    -ms-flex-pack: justify !important;\n    justify-content: space-between !important;\n  }\n  .justify-content-xl-around {\n    -ms-flex-pack: distribute !important;\n    justify-content: space-around !important;\n  }\n  .justify-content-xl-evenly {\n    -ms-flex-pack: space-evenly !important;\n    justify-content: space-evenly !important;\n  }\n  .align-items-xl-start {\n    -ms-flex-align: start !important;\n    align-items: flex-start !important;\n  }\n  .align-items-xl-end {\n    -ms-flex-align: end !important;\n    align-items: flex-end !important;\n  }\n  .align-items-xl-center {\n    -ms-flex-align: center !important;\n    align-items: center !important;\n  }\n  .align-items-xl-baseline {\n    -ms-flex-align: baseline !important;\n    align-items: baseline !important;\n  }\n  .align-items-xl-stretch {\n    -ms-flex-align: stretch !important;\n    align-items: stretch !important;\n  }\n  .align-content-xl-start {\n    -ms-flex-line-pack: start !important;\n    align-content: flex-start !important;\n  }\n  .align-content-xl-end {\n    -ms-flex-line-pack: end !important;\n    align-content: flex-end !important;\n  }\n  .align-content-xl-center {\n    -ms-flex-line-pack: center !important;\n    align-content: center !important;\n  }\n  .align-content-xl-between {\n    -ms-flex-line-pack: justify !important;\n    align-content: space-between !important;\n  }\n  .align-content-xl-around {\n    -ms-flex-line-pack: distribute !important;\n    align-content: space-around !important;\n  }\n  .align-content-xl-stretch {\n    -ms-flex-line-pack: stretch !important;\n    align-content: stretch !important;\n  }\n  .align-self-xl-auto {\n    -ms-flex-item-align: auto !important;\n    align-self: auto !important;\n  }\n  .align-self-xl-start {\n    -ms-flex-item-align: start !important;\n    align-self: flex-start !important;\n  }\n  .align-self-xl-end {\n    -ms-flex-item-align: end !important;\n    align-self: flex-end !important;\n  }\n  .align-self-xl-center {\n    -ms-flex-item-align: center !important;\n    align-self: center !important;\n  }\n  .align-self-xl-baseline {\n    -ms-flex-item-align: baseline !important;\n    align-self: baseline !important;\n  }\n  .align-self-xl-stretch {\n    -ms-flex-item-align: stretch !important;\n    align-self: stretch !important;\n  }\n  .order-xl-first {\n    -ms-flex-order: -1 !important;\n    order: -1 !important;\n  }\n  .order-xl-0 {\n    -ms-flex-order: 0 !important;\n    order: 0 !important;\n  }\n  .order-xl-1 {\n    -ms-flex-order: 1 !important;\n    order: 1 !important;\n  }\n  .order-xl-2 {\n    -ms-flex-order: 2 !important;\n    order: 2 !important;\n  }\n  .order-xl-3 {\n    -ms-flex-order: 3 !important;\n    order: 3 !important;\n  }\n  .order-xl-4 {\n    -ms-flex-order: 4 !important;\n    order: 4 !important;\n  }\n  .order-xl-5 {\n    -ms-flex-order: 5 !important;\n    order: 5 !important;\n  }\n  .order-xl-last {\n    -ms-flex-order: 6 !important;\n    order: 6 !important;\n  }\n  .m-xl-0 {\n    margin: 0 !important;\n  }\n  .m-xl-1 {\n    margin: 0.25rem !important;\n  }\n  .m-xl-2 {\n    margin: 0.5rem !important;\n  }\n  .m-xl-3 {\n    margin: 1rem !important;\n  }\n  .m-xl-4 {\n    margin: 1.5rem !important;\n  }\n  .m-xl-5 {\n    margin: 3rem !important;\n  }\n  .m-xl-auto {\n    margin: auto !important;\n  }\n  .mx-xl-0 {\n    margin-right: 0 !important;\n    margin-left: 0 !important;\n  }\n  .mx-xl-1 {\n    margin-right: 0.25rem !important;\n    margin-left: 0.25rem !important;\n  }\n  .mx-xl-2 {\n    margin-right: 0.5rem !important;\n    margin-left: 0.5rem !important;\n  }\n  .mx-xl-3 {\n    margin-right: 1rem !important;\n    margin-left: 1rem !important;\n  }\n  .mx-xl-4 {\n    margin-right: 1.5rem !important;\n    margin-left: 1.5rem !important;\n  }\n  .mx-xl-5 {\n    margin-right: 3rem !important;\n    margin-left: 3rem !important;\n  }\n  .mx-xl-auto {\n    margin-right: auto !important;\n    margin-left: auto !important;\n  }\n  .my-xl-0 {\n    margin-top: 0 !important;\n    margin-bottom: 0 !important;\n  }\n  .my-xl-1 {\n    margin-top: 0.25rem !important;\n    margin-bottom: 0.25rem !important;\n  }\n  .my-xl-2 {\n    margin-top: 0.5rem !important;\n    margin-bottom: 0.5rem !important;\n  }\n  .my-xl-3 {\n    margin-top: 1rem !important;\n    margin-bottom: 1rem !important;\n  }\n  .my-xl-4 {\n    margin-top: 1.5rem !important;\n    margin-bottom: 1.5rem !important;\n  }\n  .my-xl-5 {\n    margin-top: 3rem !important;\n    margin-bottom: 3rem !important;\n  }\n  .my-xl-auto {\n    margin-top: auto !important;\n    margin-bottom: auto !important;\n  }\n  .mt-xl-0 {\n    margin-top: 0 !important;\n  }\n  .mt-xl-1 {\n    margin-top: 0.25rem !important;\n  }\n  .mt-xl-2 {\n    margin-top: 0.5rem !important;\n  }\n  .mt-xl-3 {\n    margin-top: 1rem !important;\n  }\n  .mt-xl-4 {\n    margin-top: 1.5rem !important;\n  }\n  .mt-xl-5 {\n    margin-top: 3rem !important;\n  }\n  .mt-xl-auto {\n    margin-top: auto !important;\n  }\n  .me-xl-0 {\n    margin-right: 0 !important;\n  }\n  .me-xl-1 {\n    margin-right: 0.25rem !important;\n  }\n  .me-xl-2 {\n    margin-right: 0.5rem !important;\n  }\n  .me-xl-3 {\n    margin-right: 1rem !important;\n  }\n  .me-xl-4 {\n    margin-right: 1.5rem !important;\n  }\n  .me-xl-5 {\n    margin-right: 3rem !important;\n  }\n  .me-xl-auto {\n    margin-right: auto !important;\n  }\n  .mb-xl-0 {\n    margin-bottom: 0 !important;\n  }\n  .mb-xl-1 {\n    margin-bottom: 0.25rem !important;\n  }\n  .mb-xl-2 {\n    margin-bottom: 0.5rem !important;\n  }\n  .mb-xl-3 {\n    margin-bottom: 1rem !important;\n  }\n  .mb-xl-4 {\n    margin-bottom: 1.5rem !important;\n  }\n  .mb-xl-5 {\n    margin-bottom: 3rem !important;\n  }\n  .mb-xl-auto {\n    margin-bottom: auto !important;\n  }\n  .ms-xl-0 {\n    margin-left: 0 !important;\n  }\n  .ms-xl-1 {\n    margin-left: 0.25rem !important;\n  }\n  .ms-xl-2 {\n    margin-left: 0.5rem !important;\n  }\n  .ms-xl-3 {\n    margin-left: 1rem !important;\n  }\n  .ms-xl-4 {\n    margin-left: 1.5rem !important;\n  }\n  .ms-xl-5 {\n    margin-left: 3rem !important;\n  }\n  .ms-xl-auto {\n    margin-left: auto !important;\n  }\n  .p-xl-0 {\n    padding: 0 !important;\n  }\n  .p-xl-1 {\n    padding: 0.25rem !important;\n  }\n  .p-xl-2 {\n    padding: 0.5rem !important;\n  }\n  .p-xl-3 {\n    padding: 1rem !important;\n  }\n  .p-xl-4 {\n    padding: 1.5rem !important;\n  }\n  .p-xl-5 {\n    padding: 3rem !important;\n  }\n  .px-xl-0 {\n    padding-right: 0 !important;\n    padding-left: 0 !important;\n  }\n  .px-xl-1 {\n    padding-right: 0.25rem !important;\n    padding-left: 0.25rem !important;\n  }\n  .px-xl-2 {\n    padding-right: 0.5rem !important;\n    padding-left: 0.5rem !important;\n  }\n  .px-xl-3 {\n    padding-right: 1rem !important;\n    padding-left: 1rem !important;\n  }\n  .px-xl-4 {\n    padding-right: 1.5rem !important;\n    padding-left: 1.5rem !important;\n  }\n  .px-xl-5 {\n    padding-right: 3rem !important;\n    padding-left: 3rem !important;\n  }\n  .py-xl-0 {\n    padding-top: 0 !important;\n    padding-bottom: 0 !important;\n  }\n  .py-xl-1 {\n    padding-top: 0.25rem !important;\n    padding-bottom: 0.25rem !important;\n  }\n  .py-xl-2 {\n    padding-top: 0.5rem !important;\n    padding-bottom: 0.5rem !important;\n  }\n  .py-xl-3 {\n    padding-top: 1rem !important;\n    padding-bottom: 1rem !important;\n  }\n  .py-xl-4 {\n    padding-top: 1.5rem !important;\n    padding-bottom: 1.5rem !important;\n  }\n  .py-xl-5 {\n    padding-top: 3rem !important;\n    padding-bottom: 3rem !important;\n  }\n  .pt-xl-0 {\n    padding-top: 0 !important;\n  }\n  .pt-xl-1 {\n    padding-top: 0.25rem !important;\n  }\n  .pt-xl-2 {\n    padding-top: 0.5rem !important;\n  }\n  .pt-xl-3 {\n    padding-top: 1rem !important;\n  }\n  .pt-xl-4 {\n    padding-top: 1.5rem !important;\n  }\n  .pt-xl-5 {\n    padding-top: 3rem !important;\n  }\n  .pe-xl-0 {\n    padding-right: 0 !important;\n  }\n  .pe-xl-1 {\n    padding-right: 0.25rem !important;\n  }\n  .pe-xl-2 {\n    padding-right: 0.5rem !important;\n  }\n  .pe-xl-3 {\n    padding-right: 1rem !important;\n  }\n  .pe-xl-4 {\n    padding-right: 1.5rem !important;\n  }\n  .pe-xl-5 {\n    padding-right: 3rem !important;\n  }\n  .pb-xl-0 {\n    padding-bottom: 0 !important;\n  }\n  .pb-xl-1 {\n    padding-bottom: 0.25rem !important;\n  }\n  .pb-xl-2 {\n    padding-bottom: 0.5rem !important;\n  }\n  .pb-xl-3 {\n    padding-bottom: 1rem !important;\n  }\n  .pb-xl-4 {\n    padding-bottom: 1.5rem !important;\n  }\n  .pb-xl-5 {\n    padding-bottom: 3rem !important;\n  }\n  .ps-xl-0 {\n    padding-left: 0 !important;\n  }\n  .ps-xl-1 {\n    padding-left: 0.25rem !important;\n  }\n  .ps-xl-2 {\n    padding-left: 0.5rem !important;\n  }\n  .ps-xl-3 {\n    padding-left: 1rem !important;\n  }\n  .ps-xl-4 {\n    padding-left: 1.5rem !important;\n  }\n  .ps-xl-5 {\n    padding-left: 3rem !important;\n  }\n  .text-xl-start {\n    text-align: left !important;\n  }\n  .text-xl-end {\n    text-align: right !important;\n  }\n  .text-xl-center {\n    text-align: center !important;\n  }\n}\n\n@media (min-width: 1400px) {\n  .float-xxl-start {\n    float: left !important;\n  }\n  .float-xxl-end {\n    float: right !important;\n  }\n  .float-xxl-none {\n    float: none !important;\n  }\n  .d-xxl-inline {\n    display: inline !important;\n  }\n  .d-xxl-inline-block {\n    display: inline-block !important;\n  }\n  .d-xxl-block {\n    display: block !important;\n  }\n  .d-xxl-grid {\n    display: grid !important;\n  }\n  .d-xxl-table {\n    display: table !important;\n  }\n  .d-xxl-table-row {\n    display: table-row !important;\n  }\n  .d-xxl-table-cell {\n    display: table-cell !important;\n  }\n  .d-xxl-flex {\n    display: -ms-flexbox !important;\n    display: flex !important;\n  }\n  .d-xxl-inline-flex {\n    display: -ms-inline-flexbox !important;\n    display: inline-flex !important;\n  }\n  .d-xxl-none {\n    display: none !important;\n  }\n  .flex-xxl-fill {\n    -ms-flex: 1 1 auto !important;\n    flex: 1 1 auto !important;\n  }\n  .flex-xxl-row {\n    -ms-flex-direction: row !important;\n    flex-direction: row !important;\n  }\n  .flex-xxl-column {\n    -ms-flex-direction: column !important;\n    flex-direction: column !important;\n  }\n  .flex-xxl-row-reverse {\n    -ms-flex-direction: row-reverse !important;\n    flex-direction: row-reverse !important;\n  }\n  .flex-xxl-column-reverse {\n    -ms-flex-direction: column-reverse !important;\n    flex-direction: column-reverse !important;\n  }\n  .flex-xxl-grow-0 {\n    -ms-flex-positive: 0 !important;\n    flex-grow: 0 !important;\n  }\n  .flex-xxl-grow-1 {\n    -ms-flex-positive: 1 !important;\n    flex-grow: 1 !important;\n  }\n  .flex-xxl-shrink-0 {\n    -ms-flex-negative: 0 !important;\n    flex-shrink: 0 !important;\n  }\n  .flex-xxl-shrink-1 {\n    -ms-flex-negative: 1 !important;\n    flex-shrink: 1 !important;\n  }\n  .flex-xxl-wrap {\n    -ms-flex-wrap: wrap !important;\n    flex-wrap: wrap !important;\n  }\n  .flex-xxl-nowrap {\n    -ms-flex-wrap: nowrap !important;\n    flex-wrap: nowrap !important;\n  }\n  .flex-xxl-wrap-reverse {\n    -ms-flex-wrap: wrap-reverse !important;\n    flex-wrap: wrap-reverse !important;\n  }\n  .gap-xxl-0 {\n    gap: 0 !important;\n  }\n  .gap-xxl-1 {\n    gap: 0.25rem !important;\n  }\n  .gap-xxl-2 {\n    gap: 0.5rem !important;\n  }\n  .gap-xxl-3 {\n    gap: 1rem !important;\n  }\n  .gap-xxl-4 {\n    gap: 1.5rem !important;\n  }\n  .gap-xxl-5 {\n    gap: 3rem !important;\n  }\n  .justify-content-xxl-start {\n    -ms-flex-pack: start !important;\n    justify-content: flex-start !important;\n  }\n  .justify-content-xxl-end {\n    -ms-flex-pack: end !important;\n    justify-content: flex-end !important;\n  }\n  .justify-content-xxl-center {\n    -ms-flex-pack: center !important;\n    justify-content: center !important;\n  }\n  .justify-content-xxl-between {\n    -ms-flex-pack: justify !important;\n    justify-content: space-between !important;\n  }\n  .justify-content-xxl-around {\n    -ms-flex-pack: distribute !important;\n    justify-content: space-around !important;\n  }\n  .justify-content-xxl-evenly {\n    -ms-flex-pack: space-evenly !important;\n    justify-content: space-evenly !important;\n  }\n  .align-items-xxl-start {\n    -ms-flex-align: start !important;\n    align-items: flex-start !important;\n  }\n  .align-items-xxl-end {\n    -ms-flex-align: end !important;\n    align-items: flex-end !important;\n  }\n  .align-items-xxl-center {\n    -ms-flex-align: center !important;\n    align-items: center !important;\n  }\n  .align-items-xxl-baseline {\n    -ms-flex-align: baseline !important;\n    align-items: baseline !important;\n  }\n  .align-items-xxl-stretch {\n    -ms-flex-align: stretch !important;\n    align-items: stretch !important;\n  }\n  .align-content-xxl-start {\n    -ms-flex-line-pack: start !important;\n    align-content: flex-start !important;\n  }\n  .align-content-xxl-end {\n    -ms-flex-line-pack: end !important;\n    align-content: flex-end !important;\n  }\n  .align-content-xxl-center {\n    -ms-flex-line-pack: center !important;\n    align-content: center !important;\n  }\n  .align-content-xxl-between {\n    -ms-flex-line-pack: justify !important;\n    align-content: space-between !important;\n  }\n  .align-content-xxl-around {\n    -ms-flex-line-pack: distribute !important;\n    align-content: space-around !important;\n  }\n  .align-content-xxl-stretch {\n    -ms-flex-line-pack: stretch !important;\n    align-content: stretch !important;\n  }\n  .align-self-xxl-auto {\n    -ms-flex-item-align: auto !important;\n    align-self: auto !important;\n  }\n  .align-self-xxl-start {\n    -ms-flex-item-align: start !important;\n    align-self: flex-start !important;\n  }\n  .align-self-xxl-end {\n    -ms-flex-item-align: end !important;\n    align-self: flex-end !important;\n  }\n  .align-self-xxl-center {\n    -ms-flex-item-align: center !important;\n    align-self: center !important;\n  }\n  .align-self-xxl-baseline {\n    -ms-flex-item-align: baseline !important;\n    align-self: baseline !important;\n  }\n  .align-self-xxl-stretch {\n    -ms-flex-item-align: stretch !important;\n    align-self: stretch !important;\n  }\n  .order-xxl-first {\n    -ms-flex-order: -1 !important;\n    order: -1 !important;\n  }\n  .order-xxl-0 {\n    -ms-flex-order: 0 !important;\n    order: 0 !important;\n  }\n  .order-xxl-1 {\n    -ms-flex-order: 1 !important;\n    order: 1 !important;\n  }\n  .order-xxl-2 {\n    -ms-flex-order: 2 !important;\n    order: 2 !important;\n  }\n  .order-xxl-3 {\n    -ms-flex-order: 3 !important;\n    order: 3 !important;\n  }\n  .order-xxl-4 {\n    -ms-flex-order: 4 !important;\n    order: 4 !important;\n  }\n  .order-xxl-5 {\n    -ms-flex-order: 5 !important;\n    order: 5 !important;\n  }\n  .order-xxl-last {\n    -ms-flex-order: 6 !important;\n    order: 6 !important;\n  }\n  .m-xxl-0 {\n    margin: 0 !important;\n  }\n  .m-xxl-1 {\n    margin: 0.25rem !important;\n  }\n  .m-xxl-2 {\n    margin: 0.5rem !important;\n  }\n  .m-xxl-3 {\n    margin: 1rem !important;\n  }\n  .m-xxl-4 {\n    margin: 1.5rem !important;\n  }\n  .m-xxl-5 {\n    margin: 3rem !important;\n  }\n  .m-xxl-auto {\n    margin: auto !important;\n  }\n  .mx-xxl-0 {\n    margin-right: 0 !important;\n    margin-left: 0 !important;\n  }\n  .mx-xxl-1 {\n    margin-right: 0.25rem !important;\n    margin-left: 0.25rem !important;\n  }\n  .mx-xxl-2 {\n    margin-right: 0.5rem !important;\n    margin-left: 0.5rem !important;\n  }\n  .mx-xxl-3 {\n    margin-right: 1rem !important;\n    margin-left: 1rem !important;\n  }\n  .mx-xxl-4 {\n    margin-right: 1.5rem !important;\n    margin-left: 1.5rem !important;\n  }\n  .mx-xxl-5 {\n    margin-right: 3rem !important;\n    margin-left: 3rem !important;\n  }\n  .mx-xxl-auto {\n    margin-right: auto !important;\n    margin-left: auto !important;\n  }\n  .my-xxl-0 {\n    margin-top: 0 !important;\n    margin-bottom: 0 !important;\n  }\n  .my-xxl-1 {\n    margin-top: 0.25rem !important;\n    margin-bottom: 0.25rem !important;\n  }\n  .my-xxl-2 {\n    margin-top: 0.5rem !important;\n    margin-bottom: 0.5rem !important;\n  }\n  .my-xxl-3 {\n    margin-top: 1rem !important;\n    margin-bottom: 1rem !important;\n  }\n  .my-xxl-4 {\n    margin-top: 1.5rem !important;\n    margin-bottom: 1.5rem !important;\n  }\n  .my-xxl-5 {\n    margin-top: 3rem !important;\n    margin-bottom: 3rem !important;\n  }\n  .my-xxl-auto {\n    margin-top: auto !important;\n    margin-bottom: auto !important;\n  }\n  .mt-xxl-0 {\n    margin-top: 0 !important;\n  }\n  .mt-xxl-1 {\n    margin-top: 0.25rem !important;\n  }\n  .mt-xxl-2 {\n    margin-top: 0.5rem !important;\n  }\n  .mt-xxl-3 {\n    margin-top: 1rem !important;\n  }\n  .mt-xxl-4 {\n    margin-top: 1.5rem !important;\n  }\n  .mt-xxl-5 {\n    margin-top: 3rem !important;\n  }\n  .mt-xxl-auto {\n    margin-top: auto !important;\n  }\n  .me-xxl-0 {\n    margin-right: 0 !important;\n  }\n  .me-xxl-1 {\n    margin-right: 0.25rem !important;\n  }\n  .me-xxl-2 {\n    margin-right: 0.5rem !important;\n  }\n  .me-xxl-3 {\n    margin-right: 1rem !important;\n  }\n  .me-xxl-4 {\n    margin-right: 1.5rem !important;\n  }\n  .me-xxl-5 {\n    margin-right: 3rem !important;\n  }\n  .me-xxl-auto {\n    margin-right: auto !important;\n  }\n  .mb-xxl-0 {\n    margin-bottom: 0 !important;\n  }\n  .mb-xxl-1 {\n    margin-bottom: 0.25rem !important;\n  }\n  .mb-xxl-2 {\n    margin-bottom: 0.5rem !important;\n  }\n  .mb-xxl-3 {\n    margin-bottom: 1rem !important;\n  }\n  .mb-xxl-4 {\n    margin-bottom: 1.5rem !important;\n  }\n  .mb-xxl-5 {\n    margin-bottom: 3rem !important;\n  }\n  .mb-xxl-auto {\n    margin-bottom: auto !important;\n  }\n  .ms-xxl-0 {\n    margin-left: 0 !important;\n  }\n  .ms-xxl-1 {\n    margin-left: 0.25rem !important;\n  }\n  .ms-xxl-2 {\n    margin-left: 0.5rem !important;\n  }\n  .ms-xxl-3 {\n    margin-left: 1rem !important;\n  }\n  .ms-xxl-4 {\n    margin-left: 1.5rem !important;\n  }\n  .ms-xxl-5 {\n    margin-left: 3rem !important;\n  }\n  .ms-xxl-auto {\n    margin-left: auto !important;\n  }\n  .p-xxl-0 {\n    padding: 0 !important;\n  }\n  .p-xxl-1 {\n    padding: 0.25rem !important;\n  }\n  .p-xxl-2 {\n    padding: 0.5rem !important;\n  }\n  .p-xxl-3 {\n    padding: 1rem !important;\n  }\n  .p-xxl-4 {\n    padding: 1.5rem !important;\n  }\n  .p-xxl-5 {\n    padding: 3rem !important;\n  }\n  .px-xxl-0 {\n    padding-right: 0 !important;\n    padding-left: 0 !important;\n  }\n  .px-xxl-1 {\n    padding-right: 0.25rem !important;\n    padding-left: 0.25rem !important;\n  }\n  .px-xxl-2 {\n    padding-right: 0.5rem !important;\n    padding-left: 0.5rem !important;\n  }\n  .px-xxl-3 {\n    padding-right: 1rem !important;\n    padding-left: 1rem !important;\n  }\n  .px-xxl-4 {\n    padding-right: 1.5rem !important;\n    padding-left: 1.5rem !important;\n  }\n  .px-xxl-5 {\n    padding-right: 3rem !important;\n    padding-left: 3rem !important;\n  }\n  .py-xxl-0 {\n    padding-top: 0 !important;\n    padding-bottom: 0 !important;\n  }\n  .py-xxl-1 {\n    padding-top: 0.25rem !important;\n    padding-bottom: 0.25rem !important;\n  }\n  .py-xxl-2 {\n    padding-top: 0.5rem !important;\n    padding-bottom: 0.5rem !important;\n  }\n  .py-xxl-3 {\n    padding-top: 1rem !important;\n    padding-bottom: 1rem !important;\n  }\n  .py-xxl-4 {\n    padding-top: 1.5rem !important;\n    padding-bottom: 1.5rem !important;\n  }\n  .py-xxl-5 {\n    padding-top: 3rem !important;\n    padding-bottom: 3rem !important;\n  }\n  .pt-xxl-0 {\n    padding-top: 0 !important;\n  }\n  .pt-xxl-1 {\n    padding-top: 0.25rem !important;\n  }\n  .pt-xxl-2 {\n    padding-top: 0.5rem !important;\n  }\n  .pt-xxl-3 {\n    padding-top: 1rem !important;\n  }\n  .pt-xxl-4 {\n    padding-top: 1.5rem !important;\n  }\n  .pt-xxl-5 {\n    padding-top: 3rem !important;\n  }\n  .pe-xxl-0 {\n    padding-right: 0 !important;\n  }\n  .pe-xxl-1 {\n    padding-right: 0.25rem !important;\n  }\n  .pe-xxl-2 {\n    padding-right: 0.5rem !important;\n  }\n  .pe-xxl-3 {\n    padding-right: 1rem !important;\n  }\n  .pe-xxl-4 {\n    padding-right: 1.5rem !important;\n  }\n  .pe-xxl-5 {\n    padding-right: 3rem !important;\n  }\n  .pb-xxl-0 {\n    padding-bottom: 0 !important;\n  }\n  .pb-xxl-1 {\n    padding-bottom: 0.25rem !important;\n  }\n  .pb-xxl-2 {\n    padding-bottom: 0.5rem !important;\n  }\n  .pb-xxl-3 {\n    padding-bottom: 1rem !important;\n  }\n  .pb-xxl-4 {\n    padding-bottom: 1.5rem !important;\n  }\n  .pb-xxl-5 {\n    padding-bottom: 3rem !important;\n  }\n  .ps-xxl-0 {\n    padding-left: 0 !important;\n  }\n  .ps-xxl-1 {\n    padding-left: 0.25rem !important;\n  }\n  .ps-xxl-2 {\n    padding-left: 0.5rem !important;\n  }\n  .ps-xxl-3 {\n    padding-left: 1rem !important;\n  }\n  .ps-xxl-4 {\n    padding-left: 1.5rem !important;\n  }\n  .ps-xxl-5 {\n    padding-left: 3rem !important;\n  }\n  .text-xxl-start {\n    text-align: left !important;\n  }\n  .text-xxl-end {\n    text-align: right !important;\n  }\n  .text-xxl-center {\n    text-align: center !important;\n  }\n}\n\n@media (min-width: 1200px) {\n  .fs-1 {\n    font-size: 2.5rem !important;\n  }\n  .fs-2 {\n    font-size: 2rem !important;\n  }\n  .fs-3 {\n    font-size: 1.75rem !important;\n  }\n  .fs-4 {\n    font-size: 1.5rem !important;\n  }\n}\n\n@media print {\n  .d-print-inline {\n    display: inline !important;\n  }\n  .d-print-inline-block {\n    display: inline-block !important;\n  }\n  .d-print-block {\n    display: block !important;\n  }\n  .d-print-grid {\n    display: grid !important;\n  }\n  .d-print-table {\n    display: table !important;\n  }\n  .d-print-table-row {\n    display: table-row !important;\n  }\n  .d-print-table-cell {\n    display: table-cell !important;\n  }\n  .d-print-flex {\n    display: -ms-flexbox !important;\n    display: flex !important;\n  }\n  .d-print-inline-flex {\n    display: -ms-inline-flexbox !important;\n    display: inline-flex !important;\n  }\n  .d-print-none {\n    display: none !important;\n  }\n}\n\n.navbar {\n  font-family: Montserrat, -apple-system, system-ui, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif;\n}\n\n.bg-dark {\n  background-color: #f3969a !important;\n}\n\n.border-dark {\n  border-color: #f3969a !important;\n}\n\n.btn {\n  font-family: Montserrat, -apple-system, system-ui, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif;\n}\n\n.btn, .btn:hover {\n  color: #fff;\n}\n\n.btn-light, .btn-light:hover {\n  color: #5a5a5a;\n}\n\n.btn-link, .btn-link:hover {\n  color: #78c2ad;\n}\n\n.btn-link.disabled:hover {\n  color: #888;\n}\n\n.btn-outline-primary {\n  color: #78c2ad;\n}\n\n.btn-outline-secondary {\n  color: #f3969a;\n}\n\n.btn-outline-success {\n  color: #56cc9d;\n}\n\n.btn-outline-info {\n  color: #6cc3d5;\n}\n\n.btn-outline-warning {\n  color: #ffce67;\n}\n\n.btn-outline-danger {\n  color: #ff7851;\n}\n\n.btn-outline-dark {\n  color: #343a40;\n}\n\n.btn-outline-light {\n  color: #f8f9fa;\n}\n\nlegend {\n  font-family: Montserrat, -apple-system, system-ui, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif;\n}\n\n.dropdown-menu {\n  font-family: system-ui, -apple-system, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, \"Noto Sans\", \"Liberation Sans\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n}\n\n.breadcrumb a {\n  color: rgba(255, 255, 255, 0.6);\n}\n\n.breadcrumb a:hover {\n  color: #fff;\n  text-decoration: none;\n}\n\n.alert a,\n.alert .alert-link {\n  color: #fff;\n}\n\n.alert-light,\n.alert-light a:not(.btn),\n.alert-light .alert-link {\n  color: #888;\n}\n\n.badge {\n  color: #fff;\n}\n\n.badge.bg-light {\n  color: #5a5a5a;\n}\n\n.card h1, .card .h1,\n.card h2,\n.card .h2,\n.card h3,\n.card .h3,\n.card h4,\n.card .h4,\n.card h5,\n.card .h5,\n.card h6,\n.card .h6,\n.list-group-item h1,\n.list-group-item .h1,\n.list-group-item h2,\n.list-group-item .h2,\n.list-group-item h3,\n.list-group-item .h3,\n.list-group-item h4,\n.list-group-item .h4,\n.list-group-item h5,\n.list-group-item .h5,\n.list-group-item h6,\n.list-group-item .h6 {\n  color: inherit;\n}\n"
  },
  {
    "path": "src/sourceDev.WebApp/SharedThemes/minty/wwwroot/css/fontawesome-all.css",
    "content": "/*!\n * Font Awesome Free 5.0.8 by @fontawesome - https://fontawesome.com\n * License - https://fontawesome.com/license (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)\n */\n.fa,\n.fas,\n.far,\n.fal,\n.fab {\n  -moz-osx-font-smoothing: grayscale;\n  -webkit-font-smoothing: antialiased;\n  display: inline-block;\n  font-style: normal;\n  font-variant: normal;\n  text-rendering: auto;\n  line-height: 1; }\n\n.fa-lg {\n  font-size: 1.33333em;\n  line-height: 0.75em;\n  vertical-align: -.0667em; }\n\n.fa-xs {\n  font-size: .75em; }\n\n.fa-sm {\n  font-size: .875em; }\n\n.fa-1x {\n  font-size: 1em; }\n\n.fa-2x {\n  font-size: 2em; }\n\n.fa-3x {\n  font-size: 3em; }\n\n.fa-4x {\n  font-size: 4em; }\n\n.fa-5x {\n  font-size: 5em; }\n\n.fa-6x {\n  font-size: 6em; }\n\n.fa-7x {\n  font-size: 7em; }\n\n.fa-8x {\n  font-size: 8em; }\n\n.fa-9x {\n  font-size: 9em; }\n\n.fa-10x {\n  font-size: 10em; }\n\n.fa-fw {\n  text-align: center;\n  width: 1.25em; }\n\n.fa-ul {\n  list-style-type: none;\n  margin-left: 2.5em;\n  padding-left: 0; }\n  .fa-ul > li {\n    position: relative; }\n\n.fa-li {\n  left: -2em;\n  position: absolute;\n  text-align: center;\n  width: 2em;\n  line-height: inherit; }\n\n.fa-border {\n  border: solid 0.08em #eee;\n  border-radius: .1em;\n  padding: .2em .25em .15em; }\n\n.fa-pull-left {\n  float: left; }\n\n.fa-pull-right {\n  float: right; }\n\n.fa.fa-pull-left,\n.fas.fa-pull-left,\n.far.fa-pull-left,\n.fal.fa-pull-left,\n.fab.fa-pull-left {\n  margin-right: .3em; }\n\n.fa.fa-pull-right,\n.fas.fa-pull-right,\n.far.fa-pull-right,\n.fal.fa-pull-right,\n.fab.fa-pull-right {\n  margin-left: .3em; }\n\n.fa-spin {\n  -webkit-animation: fa-spin 2s infinite linear;\n          animation: fa-spin 2s infinite linear; }\n\n.fa-pulse {\n  -webkit-animation: fa-spin 1s infinite steps(8);\n          animation: fa-spin 1s infinite steps(8); }\n\n@-webkit-keyframes fa-spin {\n  0% {\n    -webkit-transform: rotate(0deg);\n            transform: rotate(0deg); }\n  100% {\n    -webkit-transform: rotate(360deg);\n            transform: rotate(360deg); } }\n\n@keyframes fa-spin {\n  0% {\n    -webkit-transform: rotate(0deg);\n            transform: rotate(0deg); }\n  100% {\n    -webkit-transform: rotate(360deg);\n            transform: rotate(360deg); } }\n\n.fa-rotate-90 {\n  -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)\";\n  -webkit-transform: rotate(90deg);\n          transform: rotate(90deg); }\n\n.fa-rotate-180 {\n  -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)\";\n  -webkit-transform: rotate(180deg);\n          transform: rotate(180deg); }\n\n.fa-rotate-270 {\n  -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)\";\n  -webkit-transform: rotate(270deg);\n          transform: rotate(270deg); }\n\n.fa-flip-horizontal {\n  -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)\";\n  -webkit-transform: scale(-1, 1);\n          transform: scale(-1, 1); }\n\n.fa-flip-vertical {\n  -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)\";\n  -webkit-transform: scale(1, -1);\n          transform: scale(1, -1); }\n\n.fa-flip-horizontal.fa-flip-vertical {\n  -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)\";\n  -webkit-transform: scale(-1, -1);\n          transform: scale(-1, -1); }\n\n:root .fa-rotate-90,\n:root .fa-rotate-180,\n:root .fa-rotate-270,\n:root .fa-flip-horizontal,\n:root .fa-flip-vertical {\n  -webkit-filter: none;\n          filter: none; }\n\n.fa-stack {\n  display: inline-block;\n  height: 2em;\n  line-height: 2em;\n  position: relative;\n  vertical-align: middle;\n  width: 2em; }\n\n.fa-stack-1x,\n.fa-stack-2x {\n  left: 0;\n  position: absolute;\n  text-align: center;\n  width: 100%; }\n\n.fa-stack-1x {\n  line-height: inherit; }\n\n.fa-stack-2x {\n  font-size: 2em; }\n\n.fa-inverse {\n  color: #fff; }\n\n/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen\nreaders do not read off random characters that represent icons */\n.fa-500px:before {\n  content: \"\\f26e\"; }\n\n.fa-accessible-icon:before {\n  content: \"\\f368\"; }\n\n.fa-accusoft:before {\n  content: \"\\f369\"; }\n\n.fa-address-book:before {\n  content: \"\\f2b9\"; }\n\n.fa-address-card:before {\n  content: \"\\f2bb\"; }\n\n.fa-adjust:before {\n  content: \"\\f042\"; }\n\n.fa-adn:before {\n  content: \"\\f170\"; }\n\n.fa-adversal:before {\n  content: \"\\f36a\"; }\n\n.fa-affiliatetheme:before {\n  content: \"\\f36b\"; }\n\n.fa-algolia:before {\n  content: \"\\f36c\"; }\n\n.fa-align-center:before {\n  content: \"\\f037\"; }\n\n.fa-align-justify:before {\n  content: \"\\f039\"; }\n\n.fa-align-left:before {\n  content: \"\\f036\"; }\n\n.fa-align-right:before {\n  content: \"\\f038\"; }\n\n.fa-amazon:before {\n  content: \"\\f270\"; }\n\n.fa-amazon-pay:before {\n  content: \"\\f42c\"; }\n\n.fa-ambulance:before {\n  content: \"\\f0f9\"; }\n\n.fa-american-sign-language-interpreting:before {\n  content: \"\\f2a3\"; }\n\n.fa-amilia:before {\n  content: \"\\f36d\"; }\n\n.fa-anchor:before {\n  content: \"\\f13d\"; }\n\n.fa-android:before {\n  content: \"\\f17b\"; }\n\n.fa-angellist:before {\n  content: \"\\f209\"; }\n\n.fa-angle-double-down:before {\n  content: \"\\f103\"; }\n\n.fa-angle-double-left:before {\n  content: \"\\f100\"; }\n\n.fa-angle-double-right:before {\n  content: \"\\f101\"; }\n\n.fa-angle-double-up:before {\n  content: \"\\f102\"; }\n\n.fa-angle-down:before {\n  content: \"\\f107\"; }\n\n.fa-angle-left:before {\n  content: \"\\f104\"; }\n\n.fa-angle-right:before {\n  content: \"\\f105\"; }\n\n.fa-angle-up:before {\n  content: \"\\f106\"; }\n\n.fa-angrycreative:before {\n  content: \"\\f36e\"; }\n\n.fa-angular:before {\n  content: \"\\f420\"; }\n\n.fa-app-store:before {\n  content: \"\\f36f\"; }\n\n.fa-app-store-ios:before {\n  content: \"\\f370\"; }\n\n.fa-apper:before {\n  content: \"\\f371\"; }\n\n.fa-apple:before {\n  content: \"\\f179\"; }\n\n.fa-apple-pay:before {\n  content: \"\\f415\"; }\n\n.fa-archive:before {\n  content: \"\\f187\"; }\n\n.fa-arrow-alt-circle-down:before {\n  content: \"\\f358\"; }\n\n.fa-arrow-alt-circle-left:before {\n  content: \"\\f359\"; }\n\n.fa-arrow-alt-circle-right:before {\n  content: \"\\f35a\"; }\n\n.fa-arrow-alt-circle-up:before {\n  content: \"\\f35b\"; }\n\n.fa-arrow-circle-down:before {\n  content: \"\\f0ab\"; }\n\n.fa-arrow-circle-left:before {\n  content: \"\\f0a8\"; }\n\n.fa-arrow-circle-right:before {\n  content: \"\\f0a9\"; }\n\n.fa-arrow-circle-up:before {\n  content: \"\\f0aa\"; }\n\n.fa-arrow-down:before {\n  content: \"\\f063\"; }\n\n.fa-arrow-left:before {\n  content: \"\\f060\"; }\n\n.fa-arrow-right:before {\n  content: \"\\f061\"; }\n\n.fa-arrow-up:before {\n  content: \"\\f062\"; }\n\n.fa-arrows-alt:before {\n  content: \"\\f0b2\"; }\n\n.fa-arrows-alt-h:before {\n  content: \"\\f337\"; }\n\n.fa-arrows-alt-v:before {\n  content: \"\\f338\"; }\n\n.fa-assistive-listening-systems:before {\n  content: \"\\f2a2\"; }\n\n.fa-asterisk:before {\n  content: \"\\f069\"; }\n\n.fa-asymmetrik:before {\n  content: \"\\f372\"; }\n\n.fa-at:before {\n  content: \"\\f1fa\"; }\n\n.fa-audible:before {\n  content: \"\\f373\"; }\n\n.fa-audio-description:before {\n  content: \"\\f29e\"; }\n\n.fa-autoprefixer:before {\n  content: \"\\f41c\"; }\n\n.fa-avianex:before {\n  content: \"\\f374\"; }\n\n.fa-aviato:before {\n  content: \"\\f421\"; }\n\n.fa-aws:before {\n  content: \"\\f375\"; }\n\n.fa-backward:before {\n  content: \"\\f04a\"; }\n\n.fa-balance-scale:before {\n  content: \"\\f24e\"; }\n\n.fa-ban:before {\n  content: \"\\f05e\"; }\n\n.fa-band-aid:before {\n  content: \"\\f462\"; }\n\n.fa-bandcamp:before {\n  content: \"\\f2d5\"; }\n\n.fa-barcode:before {\n  content: \"\\f02a\"; }\n\n.fa-bars:before {\n  content: \"\\f0c9\"; }\n\n.fa-baseball-ball:before {\n  content: \"\\f433\"; }\n\n.fa-basketball-ball:before {\n  content: \"\\f434\"; }\n\n.fa-bath:before {\n  content: \"\\f2cd\"; }\n\n.fa-battery-empty:before {\n  content: \"\\f244\"; }\n\n.fa-battery-full:before {\n  content: \"\\f240\"; }\n\n.fa-battery-half:before {\n  content: \"\\f242\"; }\n\n.fa-battery-quarter:before {\n  content: \"\\f243\"; }\n\n.fa-battery-three-quarters:before {\n  content: \"\\f241\"; }\n\n.fa-bed:before {\n  content: \"\\f236\"; }\n\n.fa-beer:before {\n  content: \"\\f0fc\"; }\n\n.fa-behance:before {\n  content: \"\\f1b4\"; }\n\n.fa-behance-square:before {\n  content: \"\\f1b5\"; }\n\n.fa-bell:before {\n  content: \"\\f0f3\"; }\n\n.fa-bell-slash:before {\n  content: \"\\f1f6\"; }\n\n.fa-bicycle:before {\n  content: \"\\f206\"; }\n\n.fa-bimobject:before {\n  content: \"\\f378\"; }\n\n.fa-binoculars:before {\n  content: \"\\f1e5\"; }\n\n.fa-birthday-cake:before {\n  content: \"\\f1fd\"; }\n\n.fa-bitbucket:before {\n  content: \"\\f171\"; }\n\n.fa-bitcoin:before {\n  content: \"\\f379\"; }\n\n.fa-bity:before {\n  content: \"\\f37a\"; }\n\n.fa-black-tie:before {\n  content: \"\\f27e\"; }\n\n.fa-blackberry:before {\n  content: \"\\f37b\"; }\n\n.fa-blind:before {\n  content: \"\\f29d\"; }\n\n.fa-blogger:before {\n  content: \"\\f37c\"; }\n\n.fa-blogger-b:before {\n  content: \"\\f37d\"; }\n\n.fa-bluetooth:before {\n  content: \"\\f293\"; }\n\n.fa-bluetooth-b:before {\n  content: \"\\f294\"; }\n\n.fa-bold:before {\n  content: \"\\f032\"; }\n\n.fa-bolt:before {\n  content: \"\\f0e7\"; }\n\n.fa-bomb:before {\n  content: \"\\f1e2\"; }\n\n.fa-book:before {\n  content: \"\\f02d\"; }\n\n.fa-bookmark:before {\n  content: \"\\f02e\"; }\n\n.fa-bowling-ball:before {\n  content: \"\\f436\"; }\n\n.fa-box:before {\n  content: \"\\f466\"; }\n\n.fa-boxes:before {\n  content: \"\\f468\"; }\n\n.fa-braille:before {\n  content: \"\\f2a1\"; }\n\n.fa-briefcase:before {\n  content: \"\\f0b1\"; }\n\n.fa-btc:before {\n  content: \"\\f15a\"; }\n\n.fa-bug:before {\n  content: \"\\f188\"; }\n\n.fa-building:before {\n  content: \"\\f1ad\"; }\n\n.fa-bullhorn:before {\n  content: \"\\f0a1\"; }\n\n.fa-bullseye:before {\n  content: \"\\f140\"; }\n\n.fa-buromobelexperte:before {\n  content: \"\\f37f\"; }\n\n.fa-bus:before {\n  content: \"\\f207\"; }\n\n.fa-buysellads:before {\n  content: \"\\f20d\"; }\n\n.fa-calculator:before {\n  content: \"\\f1ec\"; }\n\n.fa-calendar:before {\n  content: \"\\f133\"; }\n\n.fa-calendar-alt:before {\n  content: \"\\f073\"; }\n\n.fa-calendar-check:before {\n  content: \"\\f274\"; }\n\n.fa-calendar-minus:before {\n  content: \"\\f272\"; }\n\n.fa-calendar-plus:before {\n  content: \"\\f271\"; }\n\n.fa-calendar-times:before {\n  content: \"\\f273\"; }\n\n.fa-camera:before {\n  content: \"\\f030\"; }\n\n.fa-camera-retro:before {\n  content: \"\\f083\"; }\n\n.fa-car:before {\n  content: \"\\f1b9\"; }\n\n.fa-caret-down:before {\n  content: \"\\f0d7\"; }\n\n.fa-caret-left:before {\n  content: \"\\f0d9\"; }\n\n.fa-caret-right:before {\n  content: \"\\f0da\"; }\n\n.fa-caret-square-down:before {\n  content: \"\\f150\"; }\n\n.fa-caret-square-left:before {\n  content: \"\\f191\"; }\n\n.fa-caret-square-right:before {\n  content: \"\\f152\"; }\n\n.fa-caret-square-up:before {\n  content: \"\\f151\"; }\n\n.fa-caret-up:before {\n  content: \"\\f0d8\"; }\n\n.fa-cart-arrow-down:before {\n  content: \"\\f218\"; }\n\n.fa-cart-plus:before {\n  content: \"\\f217\"; }\n\n.fa-cc-amazon-pay:before {\n  content: \"\\f42d\"; }\n\n.fa-cc-amex:before {\n  content: \"\\f1f3\"; }\n\n.fa-cc-apple-pay:before {\n  content: \"\\f416\"; }\n\n.fa-cc-diners-club:before {\n  content: \"\\f24c\"; }\n\n.fa-cc-discover:before {\n  content: \"\\f1f2\"; }\n\n.fa-cc-jcb:before {\n  content: \"\\f24b\"; }\n\n.fa-cc-mastercard:before {\n  content: \"\\f1f1\"; }\n\n.fa-cc-paypal:before {\n  content: \"\\f1f4\"; }\n\n.fa-cc-stripe:before {\n  content: \"\\f1f5\"; }\n\n.fa-cc-visa:before {\n  content: \"\\f1f0\"; }\n\n.fa-centercode:before {\n  content: \"\\f380\"; }\n\n.fa-certificate:before {\n  content: \"\\f0a3\"; }\n\n.fa-chart-area:before {\n  content: \"\\f1fe\"; }\n\n.fa-chart-bar:before {\n  content: \"\\f080\"; }\n\n.fa-chart-line:before {\n  content: \"\\f201\"; }\n\n.fa-chart-pie:before {\n  content: \"\\f200\"; }\n\n.fa-check:before {\n  content: \"\\f00c\"; }\n\n.fa-check-circle:before {\n  content: \"\\f058\"; }\n\n.fa-check-square:before {\n  content: \"\\f14a\"; }\n\n.fa-chess:before {\n  content: \"\\f439\"; }\n\n.fa-chess-bishop:before {\n  content: \"\\f43a\"; }\n\n.fa-chess-board:before {\n  content: \"\\f43c\"; }\n\n.fa-chess-king:before {\n  content: \"\\f43f\"; }\n\n.fa-chess-knight:before {\n  content: \"\\f441\"; }\n\n.fa-chess-pawn:before {\n  content: \"\\f443\"; }\n\n.fa-chess-queen:before {\n  content: \"\\f445\"; }\n\n.fa-chess-rook:before {\n  content: \"\\f447\"; }\n\n.fa-chevron-circle-down:before {\n  content: \"\\f13a\"; }\n\n.fa-chevron-circle-left:before {\n  content: \"\\f137\"; }\n\n.fa-chevron-circle-right:before {\n  content: \"\\f138\"; }\n\n.fa-chevron-circle-up:before {\n  content: \"\\f139\"; }\n\n.fa-chevron-down:before {\n  content: \"\\f078\"; }\n\n.fa-chevron-left:before {\n  content: \"\\f053\"; }\n\n.fa-chevron-right:before {\n  content: \"\\f054\"; }\n\n.fa-chevron-up:before {\n  content: \"\\f077\"; }\n\n.fa-child:before {\n  content: \"\\f1ae\"; }\n\n.fa-chrome:before {\n  content: \"\\f268\"; }\n\n.fa-circle:before {\n  content: \"\\f111\"; }\n\n.fa-circle-notch:before {\n  content: \"\\f1ce\"; }\n\n.fa-clipboard:before {\n  content: \"\\f328\"; }\n\n.fa-clipboard-check:before {\n  content: \"\\f46c\"; }\n\n.fa-clipboard-list:before {\n  content: \"\\f46d\"; }\n\n.fa-clock:before {\n  content: \"\\f017\"; }\n\n.fa-clone:before {\n  content: \"\\f24d\"; }\n\n.fa-closed-captioning:before {\n  content: \"\\f20a\"; }\n\n.fa-cloud:before {\n  content: \"\\f0c2\"; }\n\n.fa-cloud-download-alt:before {\n  content: \"\\f381\"; }\n\n.fa-cloud-upload-alt:before {\n  content: \"\\f382\"; }\n\n.fa-cloudscale:before {\n  content: \"\\f383\"; }\n\n.fa-cloudsmith:before {\n  content: \"\\f384\"; }\n\n.fa-cloudversify:before {\n  content: \"\\f385\"; }\n\n.fa-code:before {\n  content: \"\\f121\"; }\n\n.fa-code-branch:before {\n  content: \"\\f126\"; }\n\n.fa-codepen:before {\n  content: \"\\f1cb\"; }\n\n.fa-codiepie:before {\n  content: \"\\f284\"; }\n\n.fa-coffee:before {\n  content: \"\\f0f4\"; }\n\n.fa-cog:before {\n  content: \"\\f013\"; }\n\n.fa-cogs:before {\n  content: \"\\f085\"; }\n\n.fa-columns:before {\n  content: \"\\f0db\"; }\n\n.fa-comment:before {\n  content: \"\\f075\"; }\n\n.fa-comment-alt:before {\n  content: \"\\f27a\"; }\n\n.fa-comments:before {\n  content: \"\\f086\"; }\n\n.fa-compass:before {\n  content: \"\\f14e\"; }\n\n.fa-compress:before {\n  content: \"\\f066\"; }\n\n.fa-connectdevelop:before {\n  content: \"\\f20e\"; }\n\n.fa-contao:before {\n  content: \"\\f26d\"; }\n\n.fa-copy:before {\n  content: \"\\f0c5\"; }\n\n.fa-copyright:before {\n  content: \"\\f1f9\"; }\n\n.fa-cpanel:before {\n  content: \"\\f388\"; }\n\n.fa-creative-commons:before {\n  content: \"\\f25e\"; }\n\n.fa-credit-card:before {\n  content: \"\\f09d\"; }\n\n.fa-crop:before {\n  content: \"\\f125\"; }\n\n.fa-crosshairs:before {\n  content: \"\\f05b\"; }\n\n.fa-css3:before {\n  content: \"\\f13c\"; }\n\n.fa-css3-alt:before {\n  content: \"\\f38b\"; }\n\n.fa-cube:before {\n  content: \"\\f1b2\"; }\n\n.fa-cubes:before {\n  content: \"\\f1b3\"; }\n\n.fa-cut:before {\n  content: \"\\f0c4\"; }\n\n.fa-cuttlefish:before {\n  content: \"\\f38c\"; }\n\n.fa-d-and-d:before {\n  content: \"\\f38d\"; }\n\n.fa-dashcube:before {\n  content: \"\\f210\"; }\n\n.fa-database:before {\n  content: \"\\f1c0\"; }\n\n.fa-deaf:before {\n  content: \"\\f2a4\"; }\n\n.fa-delicious:before {\n  content: \"\\f1a5\"; }\n\n.fa-deploydog:before {\n  content: \"\\f38e\"; }\n\n.fa-deskpro:before {\n  content: \"\\f38f\"; }\n\n.fa-desktop:before {\n  content: \"\\f108\"; }\n\n.fa-deviantart:before {\n  content: \"\\f1bd\"; }\n\n.fa-digg:before {\n  content: \"\\f1a6\"; }\n\n.fa-digital-ocean:before {\n  content: \"\\f391\"; }\n\n.fa-discord:before {\n  content: \"\\f392\"; }\n\n.fa-discourse:before {\n  content: \"\\f393\"; }\n\n.fa-dna:before {\n  content: \"\\f471\"; }\n\n.fa-dochub:before {\n  content: \"\\f394\"; }\n\n.fa-docker:before {\n  content: \"\\f395\"; }\n\n.fa-dollar-sign:before {\n  content: \"\\f155\"; }\n\n.fa-dolly:before {\n  content: \"\\f472\"; }\n\n.fa-dolly-flatbed:before {\n  content: \"\\f474\"; }\n\n.fa-dot-circle:before {\n  content: \"\\f192\"; }\n\n.fa-download:before {\n  content: \"\\f019\"; }\n\n.fa-draft2digital:before {\n  content: \"\\f396\"; }\n\n.fa-dribbble:before {\n  content: \"\\f17d\"; }\n\n.fa-dribbble-square:before {\n  content: \"\\f397\"; }\n\n.fa-dropbox:before {\n  content: \"\\f16b\"; }\n\n.fa-drupal:before {\n  content: \"\\f1a9\"; }\n\n.fa-dyalog:before {\n  content: \"\\f399\"; }\n\n.fa-earlybirds:before {\n  content: \"\\f39a\"; }\n\n.fa-edge:before {\n  content: \"\\f282\"; }\n\n.fa-edit:before {\n  content: \"\\f044\"; }\n\n.fa-eject:before {\n  content: \"\\f052\"; }\n\n.fa-elementor:before {\n  content: \"\\f430\"; }\n\n.fa-ellipsis-h:before {\n  content: \"\\f141\"; }\n\n.fa-ellipsis-v:before {\n  content: \"\\f142\"; }\n\n.fa-ember:before {\n  content: \"\\f423\"; }\n\n.fa-empire:before {\n  content: \"\\f1d1\"; }\n\n.fa-envelope:before {\n  content: \"\\f0e0\"; }\n\n.fa-envelope-open:before {\n  content: \"\\f2b6\"; }\n\n.fa-envelope-square:before {\n  content: \"\\f199\"; }\n\n.fa-envira:before {\n  content: \"\\f299\"; }\n\n.fa-eraser:before {\n  content: \"\\f12d\"; }\n\n.fa-erlang:before {\n  content: \"\\f39d\"; }\n\n.fa-ethereum:before {\n  content: \"\\f42e\"; }\n\n.fa-etsy:before {\n  content: \"\\f2d7\"; }\n\n.fa-euro-sign:before {\n  content: \"\\f153\"; }\n\n.fa-exchange-alt:before {\n  content: \"\\f362\"; }\n\n.fa-exclamation:before {\n  content: \"\\f12a\"; }\n\n.fa-exclamation-circle:before {\n  content: \"\\f06a\"; }\n\n.fa-exclamation-triangle:before {\n  content: \"\\f071\"; }\n\n.fa-expand:before {\n  content: \"\\f065\"; }\n\n.fa-expand-arrows-alt:before {\n  content: \"\\f31e\"; }\n\n.fa-expeditedssl:before {\n  content: \"\\f23e\"; }\n\n.fa-external-link-alt:before {\n  content: \"\\f35d\"; }\n\n.fa-external-link-square-alt:before {\n  content: \"\\f360\"; }\n\n.fa-eye:before {\n  content: \"\\f06e\"; }\n\n.fa-eye-dropper:before {\n  content: \"\\f1fb\"; }\n\n.fa-eye-slash:before {\n  content: \"\\f070\"; }\n\n.fa-facebook:before {\n  content: \"\\f09a\"; }\n\n.fa-facebook-f:before {\n  content: \"\\f39e\"; }\n\n.fa-facebook-messenger:before {\n  content: \"\\f39f\"; }\n\n.fa-facebook-square:before {\n  content: \"\\f082\"; }\n\n.fa-fast-backward:before {\n  content: \"\\f049\"; }\n\n.fa-fast-forward:before {\n  content: \"\\f050\"; }\n\n.fa-fax:before {\n  content: \"\\f1ac\"; }\n\n.fa-female:before {\n  content: \"\\f182\"; }\n\n.fa-fighter-jet:before {\n  content: \"\\f0fb\"; }\n\n.fa-file:before {\n  content: \"\\f15b\"; }\n\n.fa-file-alt:before {\n  content: \"\\f15c\"; }\n\n.fa-file-archive:before {\n  content: \"\\f1c6\"; }\n\n.fa-file-audio:before {\n  content: \"\\f1c7\"; }\n\n.fa-file-code:before {\n  content: \"\\f1c9\"; }\n\n.fa-file-excel:before {\n  content: \"\\f1c3\"; }\n\n.fa-file-image:before {\n  content: \"\\f1c5\"; }\n\n.fa-file-pdf:before {\n  content: \"\\f1c1\"; }\n\n.fa-file-powerpoint:before {\n  content: \"\\f1c4\"; }\n\n.fa-file-video:before {\n  content: \"\\f1c8\"; }\n\n.fa-file-word:before {\n  content: \"\\f1c2\"; }\n\n.fa-film:before {\n  content: \"\\f008\"; }\n\n.fa-filter:before {\n  content: \"\\f0b0\"; }\n\n.fa-fire:before {\n  content: \"\\f06d\"; }\n\n.fa-fire-extinguisher:before {\n  content: \"\\f134\"; }\n\n.fa-firefox:before {\n  content: \"\\f269\"; }\n\n.fa-first-aid:before {\n  content: \"\\f479\"; }\n\n.fa-first-order:before {\n  content: \"\\f2b0\"; }\n\n.fa-firstdraft:before {\n  content: \"\\f3a1\"; }\n\n.fa-flag:before {\n  content: \"\\f024\"; }\n\n.fa-flag-checkered:before {\n  content: \"\\f11e\"; }\n\n.fa-flask:before {\n  content: \"\\f0c3\"; }\n\n.fa-flickr:before {\n  content: \"\\f16e\"; }\n\n.fa-flipboard:before {\n  content: \"\\f44d\"; }\n\n.fa-fly:before {\n  content: \"\\f417\"; }\n\n.fa-folder:before {\n  content: \"\\f07b\"; }\n\n.fa-folder-open:before {\n  content: \"\\f07c\"; }\n\n.fa-font:before {\n  content: \"\\f031\"; }\n\n.fa-font-awesome:before {\n  content: \"\\f2b4\"; }\n\n.fa-font-awesome-alt:before {\n  content: \"\\f35c\"; }\n\n.fa-font-awesome-flag:before {\n  content: \"\\f425\"; }\n\n.fa-fonticons:before {\n  content: \"\\f280\"; }\n\n.fa-fonticons-fi:before {\n  content: \"\\f3a2\"; }\n\n.fa-football-ball:before {\n  content: \"\\f44e\"; }\n\n.fa-fort-awesome:before {\n  content: \"\\f286\"; }\n\n.fa-fort-awesome-alt:before {\n  content: \"\\f3a3\"; }\n\n.fa-forumbee:before {\n  content: \"\\f211\"; }\n\n.fa-forward:before {\n  content: \"\\f04e\"; }\n\n.fa-foursquare:before {\n  content: \"\\f180\"; }\n\n.fa-free-code-camp:before {\n  content: \"\\f2c5\"; }\n\n.fa-freebsd:before {\n  content: \"\\f3a4\"; }\n\n.fa-frown:before {\n  content: \"\\f119\"; }\n\n.fa-futbol:before {\n  content: \"\\f1e3\"; }\n\n.fa-gamepad:before {\n  content: \"\\f11b\"; }\n\n.fa-gavel:before {\n  content: \"\\f0e3\"; }\n\n.fa-gem:before {\n  content: \"\\f3a5\"; }\n\n.fa-genderless:before {\n  content: \"\\f22d\"; }\n\n.fa-get-pocket:before {\n  content: \"\\f265\"; }\n\n.fa-gg:before {\n  content: \"\\f260\"; }\n\n.fa-gg-circle:before {\n  content: \"\\f261\"; }\n\n.fa-gift:before {\n  content: \"\\f06b\"; }\n\n.fa-git:before {\n  content: \"\\f1d3\"; }\n\n.fa-git-square:before {\n  content: \"\\f1d2\"; }\n\n.fa-github:before {\n  content: \"\\f09b\"; }\n\n.fa-github-alt:before {\n  content: \"\\f113\"; }\n\n.fa-github-square:before {\n  content: \"\\f092\"; }\n\n.fa-gitkraken:before {\n  content: \"\\f3a6\"; }\n\n.fa-gitlab:before {\n  content: \"\\f296\"; }\n\n.fa-gitter:before {\n  content: \"\\f426\"; }\n\n.fa-glass-martini:before {\n  content: \"\\f000\"; }\n\n.fa-glide:before {\n  content: \"\\f2a5\"; }\n\n.fa-glide-g:before {\n  content: \"\\f2a6\"; }\n\n.fa-globe:before {\n  content: \"\\f0ac\"; }\n\n.fa-gofore:before {\n  content: \"\\f3a7\"; }\n\n.fa-golf-ball:before {\n  content: \"\\f450\"; }\n\n.fa-goodreads:before {\n  content: \"\\f3a8\"; }\n\n.fa-goodreads-g:before {\n  content: \"\\f3a9\"; }\n\n.fa-google:before {\n  content: \"\\f1a0\"; }\n\n.fa-google-drive:before {\n  content: \"\\f3aa\"; }\n\n.fa-google-play:before {\n  content: \"\\f3ab\"; }\n\n.fa-google-plus:before {\n  content: \"\\f2b3\"; }\n\n.fa-google-plus-g:before {\n  content: \"\\f0d5\"; }\n\n.fa-google-plus-square:before {\n  content: \"\\f0d4\"; }\n\n.fa-google-wallet:before {\n  content: \"\\f1ee\"; }\n\n.fa-graduation-cap:before {\n  content: \"\\f19d\"; }\n\n.fa-gratipay:before {\n  content: \"\\f184\"; }\n\n.fa-grav:before {\n  content: \"\\f2d6\"; }\n\n.fa-gripfire:before {\n  content: \"\\f3ac\"; }\n\n.fa-grunt:before {\n  content: \"\\f3ad\"; }\n\n.fa-gulp:before {\n  content: \"\\f3ae\"; }\n\n.fa-h-square:before {\n  content: \"\\f0fd\"; }\n\n.fa-hacker-news:before {\n  content: \"\\f1d4\"; }\n\n.fa-hacker-news-square:before {\n  content: \"\\f3af\"; }\n\n.fa-hand-lizard:before {\n  content: \"\\f258\"; }\n\n.fa-hand-paper:before {\n  content: \"\\f256\"; }\n\n.fa-hand-peace:before {\n  content: \"\\f25b\"; }\n\n.fa-hand-point-down:before {\n  content: \"\\f0a7\"; }\n\n.fa-hand-point-left:before {\n  content: \"\\f0a5\"; }\n\n.fa-hand-point-right:before {\n  content: \"\\f0a4\"; }\n\n.fa-hand-point-up:before {\n  content: \"\\f0a6\"; }\n\n.fa-hand-pointer:before {\n  content: \"\\f25a\"; }\n\n.fa-hand-rock:before {\n  content: \"\\f255\"; }\n\n.fa-hand-scissors:before {\n  content: \"\\f257\"; }\n\n.fa-hand-spock:before {\n  content: \"\\f259\"; }\n\n.fa-handshake:before {\n  content: \"\\f2b5\"; }\n\n.fa-hashtag:before {\n  content: \"\\f292\"; }\n\n.fa-hdd:before {\n  content: \"\\f0a0\"; }\n\n.fa-heading:before {\n  content: \"\\f1dc\"; }\n\n.fa-headphones:before {\n  content: \"\\f025\"; }\n\n.fa-heart:before {\n  content: \"\\f004\"; }\n\n.fa-heartbeat:before {\n  content: \"\\f21e\"; }\n\n.fa-hips:before {\n  content: \"\\f452\"; }\n\n.fa-hire-a-helper:before {\n  content: \"\\f3b0\"; }\n\n.fa-history:before {\n  content: \"\\f1da\"; }\n\n.fa-hockey-puck:before {\n  content: \"\\f453\"; }\n\n.fa-home:before {\n  content: \"\\f015\"; }\n\n.fa-hooli:before {\n  content: \"\\f427\"; }\n\n.fa-hospital:before {\n  content: \"\\f0f8\"; }\n\n.fa-hospital-symbol:before {\n  content: \"\\f47e\"; }\n\n.fa-hotjar:before {\n  content: \"\\f3b1\"; }\n\n.fa-hourglass:before {\n  content: \"\\f254\"; }\n\n.fa-hourglass-end:before {\n  content: \"\\f253\"; }\n\n.fa-hourglass-half:before {\n  content: \"\\f252\"; }\n\n.fa-hourglass-start:before {\n  content: \"\\f251\"; }\n\n.fa-houzz:before {\n  content: \"\\f27c\"; }\n\n.fa-html5:before {\n  content: \"\\f13b\"; }\n\n.fa-hubspot:before {\n  content: \"\\f3b2\"; }\n\n.fa-i-cursor:before {\n  content: \"\\f246\"; }\n\n.fa-id-badge:before {\n  content: \"\\f2c1\"; }\n\n.fa-id-card:before {\n  content: \"\\f2c2\"; }\n\n.fa-image:before {\n  content: \"\\f03e\"; }\n\n.fa-images:before {\n  content: \"\\f302\"; }\n\n.fa-imdb:before {\n  content: \"\\f2d8\"; }\n\n.fa-inbox:before {\n  content: \"\\f01c\"; }\n\n.fa-indent:before {\n  content: \"\\f03c\"; }\n\n.fa-industry:before {\n  content: \"\\f275\"; }\n\n.fa-info:before {\n  content: \"\\f129\"; }\n\n.fa-info-circle:before {\n  content: \"\\f05a\"; }\n\n.fa-instagram:before {\n  content: \"\\f16d\"; }\n\n.fa-internet-explorer:before {\n  content: \"\\f26b\"; }\n\n.fa-ioxhost:before {\n  content: \"\\f208\"; }\n\n.fa-italic:before {\n  content: \"\\f033\"; }\n\n.fa-itunes:before {\n  content: \"\\f3b4\"; }\n\n.fa-itunes-note:before {\n  content: \"\\f3b5\"; }\n\n.fa-jenkins:before {\n  content: \"\\f3b6\"; }\n\n.fa-joget:before {\n  content: \"\\f3b7\"; }\n\n.fa-joomla:before {\n  content: \"\\f1aa\"; }\n\n.fa-js:before {\n  content: \"\\f3b8\"; }\n\n.fa-js-square:before {\n  content: \"\\f3b9\"; }\n\n.fa-jsfiddle:before {\n  content: \"\\f1cc\"; }\n\n.fa-key:before {\n  content: \"\\f084\"; }\n\n.fa-keyboard:before {\n  content: \"\\f11c\"; }\n\n.fa-keycdn:before {\n  content: \"\\f3ba\"; }\n\n.fa-kickstarter:before {\n  content: \"\\f3bb\"; }\n\n.fa-kickstarter-k:before {\n  content: \"\\f3bc\"; }\n\n.fa-korvue:before {\n  content: \"\\f42f\"; }\n\n.fa-language:before {\n  content: \"\\f1ab\"; }\n\n.fa-laptop:before {\n  content: \"\\f109\"; }\n\n.fa-laravel:before {\n  content: \"\\f3bd\"; }\n\n.fa-lastfm:before {\n  content: \"\\f202\"; }\n\n.fa-lastfm-square:before {\n  content: \"\\f203\"; }\n\n.fa-leaf:before {\n  content: \"\\f06c\"; }\n\n.fa-leanpub:before {\n  content: \"\\f212\"; }\n\n.fa-lemon:before {\n  content: \"\\f094\"; }\n\n.fa-less:before {\n  content: \"\\f41d\"; }\n\n.fa-level-down-alt:before {\n  content: \"\\f3be\"; }\n\n.fa-level-up-alt:before {\n  content: \"\\f3bf\"; }\n\n.fa-life-ring:before {\n  content: \"\\f1cd\"; }\n\n.fa-lightbulb:before {\n  content: \"\\f0eb\"; }\n\n.fa-line:before {\n  content: \"\\f3c0\"; }\n\n.fa-link:before {\n  content: \"\\f0c1\"; }\n\n.fa-linkedin:before {\n  content: \"\\f08c\"; }\n\n.fa-linkedin-in:before {\n  content: \"\\f0e1\"; }\n\n.fa-linode:before {\n  content: \"\\f2b8\"; }\n\n.fa-linux:before {\n  content: \"\\f17c\"; }\n\n.fa-lira-sign:before {\n  content: \"\\f195\"; }\n\n.fa-list:before {\n  content: \"\\f03a\"; }\n\n.fa-list-alt:before {\n  content: \"\\f022\"; }\n\n.fa-list-ol:before {\n  content: \"\\f0cb\"; }\n\n.fa-list-ul:before {\n  content: \"\\f0ca\"; }\n\n.fa-location-arrow:before {\n  content: \"\\f124\"; }\n\n.fa-lock:before {\n  content: \"\\f023\"; }\n\n.fa-lock-open:before {\n  content: \"\\f3c1\"; }\n\n.fa-long-arrow-alt-down:before {\n  content: \"\\f309\"; }\n\n.fa-long-arrow-alt-left:before {\n  content: \"\\f30a\"; }\n\n.fa-long-arrow-alt-right:before {\n  content: \"\\f30b\"; }\n\n.fa-long-arrow-alt-up:before {\n  content: \"\\f30c\"; }\n\n.fa-low-vision:before {\n  content: \"\\f2a8\"; }\n\n.fa-lyft:before {\n  content: \"\\f3c3\"; }\n\n.fa-magento:before {\n  content: \"\\f3c4\"; }\n\n.fa-magic:before {\n  content: \"\\f0d0\"; }\n\n.fa-magnet:before {\n  content: \"\\f076\"; }\n\n.fa-male:before {\n  content: \"\\f183\"; }\n\n.fa-map:before {\n  content: \"\\f279\"; }\n\n.fa-map-marker:before {\n  content: \"\\f041\"; }\n\n.fa-map-marker-alt:before {\n  content: \"\\f3c5\"; }\n\n.fa-map-pin:before {\n  content: \"\\f276\"; }\n\n.fa-map-signs:before {\n  content: \"\\f277\"; }\n\n.fa-mars:before {\n  content: \"\\f222\"; }\n\n.fa-mars-double:before {\n  content: \"\\f227\"; }\n\n.fa-mars-stroke:before {\n  content: \"\\f229\"; }\n\n.fa-mars-stroke-h:before {\n  content: \"\\f22b\"; }\n\n.fa-mars-stroke-v:before {\n  content: \"\\f22a\"; }\n\n.fa-maxcdn:before {\n  content: \"\\f136\"; }\n\n.fa-medapps:before {\n  content: \"\\f3c6\"; }\n\n.fa-medium:before {\n  content: \"\\f23a\"; }\n\n.fa-medium-m:before {\n  content: \"\\f3c7\"; }\n\n.fa-medkit:before {\n  content: \"\\f0fa\"; }\n\n.fa-medrt:before {\n  content: \"\\f3c8\"; }\n\n.fa-meetup:before {\n  content: \"\\f2e0\"; }\n\n.fa-meh:before {\n  content: \"\\f11a\"; }\n\n.fa-mercury:before {\n  content: \"\\f223\"; }\n\n.fa-microchip:before {\n  content: \"\\f2db\"; }\n\n.fa-microphone:before {\n  content: \"\\f130\"; }\n\n.fa-microphone-slash:before {\n  content: \"\\f131\"; }\n\n.fa-microsoft:before {\n  content: \"\\f3ca\"; }\n\n.fa-minus:before {\n  content: \"\\f068\"; }\n\n.fa-minus-circle:before {\n  content: \"\\f056\"; }\n\n.fa-minus-square:before {\n  content: \"\\f146\"; }\n\n.fa-mix:before {\n  content: \"\\f3cb\"; }\n\n.fa-mixcloud:before {\n  content: \"\\f289\"; }\n\n.fa-mizuni:before {\n  content: \"\\f3cc\"; }\n\n.fa-mobile:before {\n  content: \"\\f10b\"; }\n\n.fa-mobile-alt:before {\n  content: \"\\f3cd\"; }\n\n.fa-modx:before {\n  content: \"\\f285\"; }\n\n.fa-monero:before {\n  content: \"\\f3d0\"; }\n\n.fa-money-bill-alt:before {\n  content: \"\\f3d1\"; }\n\n.fa-moon:before {\n  content: \"\\f186\"; }\n\n.fa-motorcycle:before {\n  content: \"\\f21c\"; }\n\n.fa-mouse-pointer:before {\n  content: \"\\f245\"; }\n\n.fa-music:before {\n  content: \"\\f001\"; }\n\n.fa-napster:before {\n  content: \"\\f3d2\"; }\n\n.fa-neuter:before {\n  content: \"\\f22c\"; }\n\n.fa-newspaper:before {\n  content: \"\\f1ea\"; }\n\n.fa-nintendo-switch:before {\n  content: \"\\f418\"; }\n\n.fa-node:before {\n  content: \"\\f419\"; }\n\n.fa-node-js:before {\n  content: \"\\f3d3\"; }\n\n.fa-npm:before {\n  content: \"\\f3d4\"; }\n\n.fa-ns8:before {\n  content: \"\\f3d5\"; }\n\n.fa-nutritionix:before {\n  content: \"\\f3d6\"; }\n\n.fa-object-group:before {\n  content: \"\\f247\"; }\n\n.fa-object-ungroup:before {\n  content: \"\\f248\"; }\n\n.fa-odnoklassniki:before {\n  content: \"\\f263\"; }\n\n.fa-odnoklassniki-square:before {\n  content: \"\\f264\"; }\n\n.fa-opencart:before {\n  content: \"\\f23d\"; }\n\n.fa-openid:before {\n  content: \"\\f19b\"; }\n\n.fa-opera:before {\n  content: \"\\f26a\"; }\n\n.fa-optin-monster:before {\n  content: \"\\f23c\"; }\n\n.fa-osi:before {\n  content: \"\\f41a\"; }\n\n.fa-outdent:before {\n  content: \"\\f03b\"; }\n\n.fa-page4:before {\n  content: \"\\f3d7\"; }\n\n.fa-pagelines:before {\n  content: \"\\f18c\"; }\n\n.fa-paint-brush:before {\n  content: \"\\f1fc\"; }\n\n.fa-palfed:before {\n  content: \"\\f3d8\"; }\n\n.fa-pallet:before {\n  content: \"\\f482\"; }\n\n.fa-paper-plane:before {\n  content: \"\\f1d8\"; }\n\n.fa-paperclip:before {\n  content: \"\\f0c6\"; }\n\n.fa-paragraph:before {\n  content: \"\\f1dd\"; }\n\n.fa-paste:before {\n  content: \"\\f0ea\"; }\n\n.fa-patreon:before {\n  content: \"\\f3d9\"; }\n\n.fa-pause:before {\n  content: \"\\f04c\"; }\n\n.fa-pause-circle:before {\n  content: \"\\f28b\"; }\n\n.fa-paw:before {\n  content: \"\\f1b0\"; }\n\n.fa-paypal:before {\n  content: \"\\f1ed\"; }\n\n.fa-pen-square:before {\n  content: \"\\f14b\"; }\n\n.fa-pencil-alt:before {\n  content: \"\\f303\"; }\n\n.fa-percent:before {\n  content: \"\\f295\"; }\n\n.fa-periscope:before {\n  content: \"\\f3da\"; }\n\n.fa-phabricator:before {\n  content: \"\\f3db\"; }\n\n.fa-phoenix-framework:before {\n  content: \"\\f3dc\"; }\n\n.fa-phone:before {\n  content: \"\\f095\"; }\n\n.fa-phone-square:before {\n  content: \"\\f098\"; }\n\n.fa-phone-volume:before {\n  content: \"\\f2a0\"; }\n\n.fa-php:before {\n  content: \"\\f457\"; }\n\n.fa-pied-piper:before {\n  content: \"\\f2ae\"; }\n\n.fa-pied-piper-alt:before {\n  content: \"\\f1a8\"; }\n\n.fa-pied-piper-pp:before {\n  content: \"\\f1a7\"; }\n\n.fa-pills:before {\n  content: \"\\f484\"; }\n\n.fa-pinterest:before {\n  content: \"\\f0d2\"; }\n\n.fa-pinterest-p:before {\n  content: \"\\f231\"; }\n\n.fa-pinterest-square:before {\n  content: \"\\f0d3\"; }\n\n.fa-plane:before {\n  content: \"\\f072\"; }\n\n.fa-play:before {\n  content: \"\\f04b\"; }\n\n.fa-play-circle:before {\n  content: \"\\f144\"; }\n\n.fa-playstation:before {\n  content: \"\\f3df\"; }\n\n.fa-plug:before {\n  content: \"\\f1e6\"; }\n\n.fa-plus:before {\n  content: \"\\f067\"; }\n\n.fa-plus-circle:before {\n  content: \"\\f055\"; }\n\n.fa-plus-square:before {\n  content: \"\\f0fe\"; }\n\n.fa-podcast:before {\n  content: \"\\f2ce\"; }\n\n.fa-pound-sign:before {\n  content: \"\\f154\"; }\n\n.fa-power-off:before {\n  content: \"\\f011\"; }\n\n.fa-print:before {\n  content: \"\\f02f\"; }\n\n.fa-product-hunt:before {\n  content: \"\\f288\"; }\n\n.fa-pushed:before {\n  content: \"\\f3e1\"; }\n\n.fa-puzzle-piece:before {\n  content: \"\\f12e\"; }\n\n.fa-python:before {\n  content: \"\\f3e2\"; }\n\n.fa-qq:before {\n  content: \"\\f1d6\"; }\n\n.fa-qrcode:before {\n  content: \"\\f029\"; }\n\n.fa-question:before {\n  content: \"\\f128\"; }\n\n.fa-question-circle:before {\n  content: \"\\f059\"; }\n\n.fa-quidditch:before {\n  content: \"\\f458\"; }\n\n.fa-quinscape:before {\n  content: \"\\f459\"; }\n\n.fa-quora:before {\n  content: \"\\f2c4\"; }\n\n.fa-quote-left:before {\n  content: \"\\f10d\"; }\n\n.fa-quote-right:before {\n  content: \"\\f10e\"; }\n\n.fa-random:before {\n  content: \"\\f074\"; }\n\n.fa-ravelry:before {\n  content: \"\\f2d9\"; }\n\n.fa-react:before {\n  content: \"\\f41b\"; }\n\n.fa-rebel:before {\n  content: \"\\f1d0\"; }\n\n.fa-recycle:before {\n  content: \"\\f1b8\"; }\n\n.fa-red-river:before {\n  content: \"\\f3e3\"; }\n\n.fa-reddit:before {\n  content: \"\\f1a1\"; }\n\n.fa-reddit-alien:before {\n  content: \"\\f281\"; }\n\n.fa-reddit-square:before {\n  content: \"\\f1a2\"; }\n\n.fa-redo:before {\n  content: \"\\f01e\"; }\n\n.fa-redo-alt:before {\n  content: \"\\f2f9\"; }\n\n.fa-registered:before {\n  content: \"\\f25d\"; }\n\n.fa-rendact:before {\n  content: \"\\f3e4\"; }\n\n.fa-renren:before {\n  content: \"\\f18b\"; }\n\n.fa-reply:before {\n  content: \"\\f3e5\"; }\n\n.fa-reply-all:before {\n  content: \"\\f122\"; }\n\n.fa-replyd:before {\n  content: \"\\f3e6\"; }\n\n.fa-resolving:before {\n  content: \"\\f3e7\"; }\n\n.fa-retweet:before {\n  content: \"\\f079\"; }\n\n.fa-road:before {\n  content: \"\\f018\"; }\n\n.fa-rocket:before {\n  content: \"\\f135\"; }\n\n.fa-rocketchat:before {\n  content: \"\\f3e8\"; }\n\n.fa-rockrms:before {\n  content: \"\\f3e9\"; }\n\n.fa-rss:before {\n  content: \"\\f09e\"; }\n\n.fa-rss-square:before {\n  content: \"\\f143\"; }\n\n.fa-ruble-sign:before {\n  content: \"\\f158\"; }\n\n.fa-rupee-sign:before {\n  content: \"\\f156\"; }\n\n.fa-safari:before {\n  content: \"\\f267\"; }\n\n.fa-sass:before {\n  content: \"\\f41e\"; }\n\n.fa-save:before {\n  content: \"\\f0c7\"; }\n\n.fa-schlix:before {\n  content: \"\\f3ea\"; }\n\n.fa-scribd:before {\n  content: \"\\f28a\"; }\n\n.fa-search:before {\n  content: \"\\f002\"; }\n\n.fa-search-minus:before {\n  content: \"\\f010\"; }\n\n.fa-search-plus:before {\n  content: \"\\f00e\"; }\n\n.fa-searchengin:before {\n  content: \"\\f3eb\"; }\n\n.fa-sellcast:before {\n  content: \"\\f2da\"; }\n\n.fa-sellsy:before {\n  content: \"\\f213\"; }\n\n.fa-server:before {\n  content: \"\\f233\"; }\n\n.fa-servicestack:before {\n  content: \"\\f3ec\"; }\n\n.fa-share:before {\n  content: \"\\f064\"; }\n\n.fa-share-alt:before {\n  content: \"\\f1e0\"; }\n\n.fa-share-alt-square:before {\n  content: \"\\f1e1\"; }\n\n.fa-share-square:before {\n  content: \"\\f14d\"; }\n\n.fa-shekel-sign:before {\n  content: \"\\f20b\"; }\n\n.fa-shield-alt:before {\n  content: \"\\f3ed\"; }\n\n.fa-ship:before {\n  content: \"\\f21a\"; }\n\n.fa-shipping-fast:before {\n  content: \"\\f48b\"; }\n\n.fa-shirtsinbulk:before {\n  content: \"\\f214\"; }\n\n.fa-shopping-bag:before {\n  content: \"\\f290\"; }\n\n.fa-shopping-basket:before {\n  content: \"\\f291\"; }\n\n.fa-shopping-cart:before {\n  content: \"\\f07a\"; }\n\n.fa-shower:before {\n  content: \"\\f2cc\"; }\n\n.fa-sign-in-alt:before {\n  content: \"\\f2f6\"; }\n\n.fa-sign-language:before {\n  content: \"\\f2a7\"; }\n\n.fa-sign-out-alt:before {\n  content: \"\\f2f5\"; }\n\n.fa-signal:before {\n  content: \"\\f012\"; }\n\n.fa-simplybuilt:before {\n  content: \"\\f215\"; }\n\n.fa-sistrix:before {\n  content: \"\\f3ee\"; }\n\n.fa-sitemap:before {\n  content: \"\\f0e8\"; }\n\n.fa-skyatlas:before {\n  content: \"\\f216\"; }\n\n.fa-skype:before {\n  content: \"\\f17e\"; }\n\n.fa-slack:before {\n  content: \"\\f198\"; }\n\n.fa-slack-hash:before {\n  content: \"\\f3ef\"; }\n\n.fa-sliders-h:before {\n  content: \"\\f1de\"; }\n\n.fa-slideshare:before {\n  content: \"\\f1e7\"; }\n\n.fa-smile:before {\n  content: \"\\f118\"; }\n\n.fa-snapchat:before {\n  content: \"\\f2ab\"; }\n\n.fa-snapchat-ghost:before {\n  content: \"\\f2ac\"; }\n\n.fa-snapchat-square:before {\n  content: \"\\f2ad\"; }\n\n.fa-snowflake:before {\n  content: \"\\f2dc\"; }\n\n.fa-sort:before {\n  content: \"\\f0dc\"; }\n\n.fa-sort-alpha-down:before {\n  content: \"\\f15d\"; }\n\n.fa-sort-alpha-up:before {\n  content: \"\\f15e\"; }\n\n.fa-sort-amount-down:before {\n  content: \"\\f160\"; }\n\n.fa-sort-amount-up:before {\n  content: \"\\f161\"; }\n\n.fa-sort-down:before {\n  content: \"\\f0dd\"; }\n\n.fa-sort-numeric-down:before {\n  content: \"\\f162\"; }\n\n.fa-sort-numeric-up:before {\n  content: \"\\f163\"; }\n\n.fa-sort-up:before {\n  content: \"\\f0de\"; }\n\n.fa-soundcloud:before {\n  content: \"\\f1be\"; }\n\n.fa-space-shuttle:before {\n  content: \"\\f197\"; }\n\n.fa-speakap:before {\n  content: \"\\f3f3\"; }\n\n.fa-spinner:before {\n  content: \"\\f110\"; }\n\n.fa-spotify:before {\n  content: \"\\f1bc\"; }\n\n.fa-square:before {\n  content: \"\\f0c8\"; }\n\n.fa-square-full:before {\n  content: \"\\f45c\"; }\n\n.fa-stack-exchange:before {\n  content: \"\\f18d\"; }\n\n.fa-stack-overflow:before {\n  content: \"\\f16c\"; }\n\n.fa-star:before {\n  content: \"\\f005\"; }\n\n.fa-star-half:before {\n  content: \"\\f089\"; }\n\n.fa-staylinked:before {\n  content: \"\\f3f5\"; }\n\n.fa-steam:before {\n  content: \"\\f1b6\"; }\n\n.fa-steam-square:before {\n  content: \"\\f1b7\"; }\n\n.fa-steam-symbol:before {\n  content: \"\\f3f6\"; }\n\n.fa-step-backward:before {\n  content: \"\\f048\"; }\n\n.fa-step-forward:before {\n  content: \"\\f051\"; }\n\n.fa-stethoscope:before {\n  content: \"\\f0f1\"; }\n\n.fa-sticker-mule:before {\n  content: \"\\f3f7\"; }\n\n.fa-sticky-note:before {\n  content: \"\\f249\"; }\n\n.fa-stop:before {\n  content: \"\\f04d\"; }\n\n.fa-stop-circle:before {\n  content: \"\\f28d\"; }\n\n.fa-stopwatch:before {\n  content: \"\\f2f2\"; }\n\n.fa-strava:before {\n  content: \"\\f428\"; }\n\n.fa-street-view:before {\n  content: \"\\f21d\"; }\n\n.fa-strikethrough:before {\n  content: \"\\f0cc\"; }\n\n.fa-stripe:before {\n  content: \"\\f429\"; }\n\n.fa-stripe-s:before {\n  content: \"\\f42a\"; }\n\n.fa-studiovinari:before {\n  content: \"\\f3f8\"; }\n\n.fa-stumbleupon:before {\n  content: \"\\f1a4\"; }\n\n.fa-stumbleupon-circle:before {\n  content: \"\\f1a3\"; }\n\n.fa-subscript:before {\n  content: \"\\f12c\"; }\n\n.fa-subway:before {\n  content: \"\\f239\"; }\n\n.fa-suitcase:before {\n  content: \"\\f0f2\"; }\n\n.fa-sun:before {\n  content: \"\\f185\"; }\n\n.fa-superpowers:before {\n  content: \"\\f2dd\"; }\n\n.fa-superscript:before {\n  content: \"\\f12b\"; }\n\n.fa-supple:before {\n  content: \"\\f3f9\"; }\n\n.fa-sync:before {\n  content: \"\\f021\"; }\n\n.fa-sync-alt:before {\n  content: \"\\f2f1\"; }\n\n.fa-syringe:before {\n  content: \"\\f48e\"; }\n\n.fa-table:before {\n  content: \"\\f0ce\"; }\n\n.fa-table-tennis:before {\n  content: \"\\f45d\"; }\n\n.fa-tablet:before {\n  content: \"\\f10a\"; }\n\n.fa-tablet-alt:before {\n  content: \"\\f3fa\"; }\n\n.fa-tachometer-alt:before {\n  content: \"\\f3fd\"; }\n\n.fa-tag:before {\n  content: \"\\f02b\"; }\n\n.fa-tags:before {\n  content: \"\\f02c\"; }\n\n.fa-tasks:before {\n  content: \"\\f0ae\"; }\n\n.fa-taxi:before {\n  content: \"\\f1ba\"; }\n\n.fa-telegram:before {\n  content: \"\\f2c6\"; }\n\n.fa-telegram-plane:before {\n  content: \"\\f3fe\"; }\n\n.fa-tencent-weibo:before {\n  content: \"\\f1d5\"; }\n\n.fa-terminal:before {\n  content: \"\\f120\"; }\n\n.fa-text-height:before {\n  content: \"\\f034\"; }\n\n.fa-text-width:before {\n  content: \"\\f035\"; }\n\n.fa-th:before {\n  content: \"\\f00a\"; }\n\n.fa-th-large:before {\n  content: \"\\f009\"; }\n\n.fa-th-list:before {\n  content: \"\\f00b\"; }\n\n.fa-themeisle:before {\n  content: \"\\f2b2\"; }\n\n.fa-thermometer:before {\n  content: \"\\f491\"; }\n\n.fa-thermometer-empty:before {\n  content: \"\\f2cb\"; }\n\n.fa-thermometer-full:before {\n  content: \"\\f2c7\"; }\n\n.fa-thermometer-half:before {\n  content: \"\\f2c9\"; }\n\n.fa-thermometer-quarter:before {\n  content: \"\\f2ca\"; }\n\n.fa-thermometer-three-quarters:before {\n  content: \"\\f2c8\"; }\n\n.fa-thumbs-down:before {\n  content: \"\\f165\"; }\n\n.fa-thumbs-up:before {\n  content: \"\\f164\"; }\n\n.fa-thumbtack:before {\n  content: \"\\f08d\"; }\n\n.fa-ticket-alt:before {\n  content: \"\\f3ff\"; }\n\n.fa-times:before {\n  content: \"\\f00d\"; }\n\n.fa-times-circle:before {\n  content: \"\\f057\"; }\n\n.fa-tint:before {\n  content: \"\\f043\"; }\n\n.fa-toggle-off:before {\n  content: \"\\f204\"; }\n\n.fa-toggle-on:before {\n  content: \"\\f205\"; }\n\n.fa-trademark:before {\n  content: \"\\f25c\"; }\n\n.fa-train:before {\n  content: \"\\f238\"; }\n\n.fa-transgender:before {\n  content: \"\\f224\"; }\n\n.fa-transgender-alt:before {\n  content: \"\\f225\"; }\n\n.fa-trash:before {\n  content: \"\\f1f8\"; }\n\n.fa-trash-alt:before {\n  content: \"\\f2ed\"; }\n\n.fa-tree:before {\n  content: \"\\f1bb\"; }\n\n.fa-trello:before {\n  content: \"\\f181\"; }\n\n.fa-tripadvisor:before {\n  content: \"\\f262\"; }\n\n.fa-trophy:before {\n  content: \"\\f091\"; }\n\n.fa-truck:before {\n  content: \"\\f0d1\"; }\n\n.fa-tty:before {\n  content: \"\\f1e4\"; }\n\n.fa-tumblr:before {\n  content: \"\\f173\"; }\n\n.fa-tumblr-square:before {\n  content: \"\\f174\"; }\n\n.fa-tv:before {\n  content: \"\\f26c\"; }\n\n.fa-twitch:before {\n  content: \"\\f1e8\"; }\n\n.fa-twitter:before {\n  content: \"\\f099\"; }\n\n.fa-twitter-square:before {\n  content: \"\\f081\"; }\n\n.fa-typo3:before {\n  content: \"\\f42b\"; }\n\n.fa-uber:before {\n  content: \"\\f402\"; }\n\n.fa-uikit:before {\n  content: \"\\f403\"; }\n\n.fa-umbrella:before {\n  content: \"\\f0e9\"; }\n\n.fa-underline:before {\n  content: \"\\f0cd\"; }\n\n.fa-undo:before {\n  content: \"\\f0e2\"; }\n\n.fa-undo-alt:before {\n  content: \"\\f2ea\"; }\n\n.fa-uniregistry:before {\n  content: \"\\f404\"; }\n\n.fa-universal-access:before {\n  content: \"\\f29a\"; }\n\n.fa-university:before {\n  content: \"\\f19c\"; }\n\n.fa-unlink:before {\n  content: \"\\f127\"; }\n\n.fa-unlock:before {\n  content: \"\\f09c\"; }\n\n.fa-unlock-alt:before {\n  content: \"\\f13e\"; }\n\n.fa-untappd:before {\n  content: \"\\f405\"; }\n\n.fa-upload:before {\n  content: \"\\f093\"; }\n\n.fa-usb:before {\n  content: \"\\f287\"; }\n\n.fa-user:before {\n  content: \"\\f007\"; }\n\n.fa-user-circle:before {\n  content: \"\\f2bd\"; }\n\n.fa-user-md:before {\n  content: \"\\f0f0\"; }\n\n.fa-user-plus:before {\n  content: \"\\f234\"; }\n\n.fa-user-secret:before {\n  content: \"\\f21b\"; }\n\n.fa-user-times:before {\n  content: \"\\f235\"; }\n\n.fa-users:before {\n  content: \"\\f0c0\"; }\n\n.fa-ussunnah:before {\n  content: \"\\f407\"; }\n\n.fa-utensil-spoon:before {\n  content: \"\\f2e5\"; }\n\n.fa-utensils:before {\n  content: \"\\f2e7\"; }\n\n.fa-vaadin:before {\n  content: \"\\f408\"; }\n\n.fa-venus:before {\n  content: \"\\f221\"; }\n\n.fa-venus-double:before {\n  content: \"\\f226\"; }\n\n.fa-venus-mars:before {\n  content: \"\\f228\"; }\n\n.fa-viacoin:before {\n  content: \"\\f237\"; }\n\n.fa-viadeo:before {\n  content: \"\\f2a9\"; }\n\n.fa-viadeo-square:before {\n  content: \"\\f2aa\"; }\n\n.fa-viber:before {\n  content: \"\\f409\"; }\n\n.fa-video:before {\n  content: \"\\f03d\"; }\n\n.fa-vimeo:before {\n  content: \"\\f40a\"; }\n\n.fa-vimeo-square:before {\n  content: \"\\f194\"; }\n\n.fa-vimeo-v:before {\n  content: \"\\f27d\"; }\n\n.fa-vine:before {\n  content: \"\\f1ca\"; }\n\n.fa-vk:before {\n  content: \"\\f189\"; }\n\n.fa-vnv:before {\n  content: \"\\f40b\"; }\n\n.fa-volleyball-ball:before {\n  content: \"\\f45f\"; }\n\n.fa-volume-down:before {\n  content: \"\\f027\"; }\n\n.fa-volume-off:before {\n  content: \"\\f026\"; }\n\n.fa-volume-up:before {\n  content: \"\\f028\"; }\n\n.fa-vuejs:before {\n  content: \"\\f41f\"; }\n\n.fa-warehouse:before {\n  content: \"\\f494\"; }\n\n.fa-weibo:before {\n  content: \"\\f18a\"; }\n\n.fa-weight:before {\n  content: \"\\f496\"; }\n\n.fa-weixin:before {\n  content: \"\\f1d7\"; }\n\n.fa-whatsapp:before {\n  content: \"\\f232\"; }\n\n.fa-whatsapp-square:before {\n  content: \"\\f40c\"; }\n\n.fa-wheelchair:before {\n  content: \"\\f193\"; }\n\n.fa-whmcs:before {\n  content: \"\\f40d\"; }\n\n.fa-wifi:before {\n  content: \"\\f1eb\"; }\n\n.fa-wikipedia-w:before {\n  content: \"\\f266\"; }\n\n.fa-window-close:before {\n  content: \"\\f410\"; }\n\n.fa-window-maximize:before {\n  content: \"\\f2d0\"; }\n\n.fa-window-minimize:before {\n  content: \"\\f2d1\"; }\n\n.fa-window-restore:before {\n  content: \"\\f2d2\"; }\n\n.fa-windows:before {\n  content: \"\\f17a\"; }\n\n.fa-won-sign:before {\n  content: \"\\f159\"; }\n\n.fa-wordpress:before {\n  content: \"\\f19a\"; }\n\n.fa-wordpress-simple:before {\n  content: \"\\f411\"; }\n\n.fa-wpbeginner:before {\n  content: \"\\f297\"; }\n\n.fa-wpexplorer:before {\n  content: \"\\f2de\"; }\n\n.fa-wpforms:before {\n  content: \"\\f298\"; }\n\n.fa-wrench:before {\n  content: \"\\f0ad\"; }\n\n.fa-xbox:before {\n  content: \"\\f412\"; }\n\n.fa-xing:before {\n  content: \"\\f168\"; }\n\n.fa-xing-square:before {\n  content: \"\\f169\"; }\n\n.fa-y-combinator:before {\n  content: \"\\f23b\"; }\n\n.fa-yahoo:before {\n  content: \"\\f19e\"; }\n\n.fa-yandex:before {\n  content: \"\\f413\"; }\n\n.fa-yandex-international:before {\n  content: \"\\f414\"; }\n\n.fa-yelp:before {\n  content: \"\\f1e9\"; }\n\n.fa-yen-sign:before {\n  content: \"\\f157\"; }\n\n.fa-yoast:before {\n  content: \"\\f2b1\"; }\n\n.fa-youtube:before {\n  content: \"\\f167\"; }\n\n.fa-youtube-square:before {\n  content: \"\\f431\"; }\n\n.sr-only {\n  border: 0;\n  clip: rect(0, 0, 0, 0);\n  height: 1px;\n  margin: -1px;\n  overflow: hidden;\n  padding: 0;\n  position: absolute;\n  width: 1px; }\n\n.sr-only-focusable:active, .sr-only-focusable:focus {\n  clip: auto;\n  height: auto;\n  margin: 0;\n  overflow: visible;\n  position: static;\n  width: auto; }\n@font-face {\n  font-family: 'Font Awesome 5 Brands';\n  font-style: normal;\n  font-weight: normal;\n  src: url(\"../webfonts/fa-brands-400.eot\");\n  src: url(\"../webfonts/fa-brands-400.eot?#iefix\") format(\"embedded-opentype\"), url(\"../webfonts/fa-brands-400.woff2\") format(\"woff2\"), url(\"../webfonts/fa-brands-400.woff\") format(\"woff\"), url(\"../webfonts/fa-brands-400.ttf\") format(\"truetype\"), url(\"../webfonts/fa-brands-400.svg#fontawesome\") format(\"svg\"); }\n\n.fab {\n  font-family: 'Font Awesome 5 Brands'; }\n@font-face {\n  font-family: 'Font Awesome 5 Free';\n  font-style: normal;\n  font-weight: 400;\n  src: url(\"../webfonts/fa-regular-400.eot\");\n  src: url(\"../webfonts/fa-regular-400.eot?#iefix\") format(\"embedded-opentype\"), url(\"../webfonts/fa-regular-400.woff2\") format(\"woff2\"), url(\"../webfonts/fa-regular-400.woff\") format(\"woff\"), url(\"../webfonts/fa-regular-400.ttf\") format(\"truetype\"), url(\"../webfonts/fa-regular-400.svg#fontawesome\") format(\"svg\"); }\n\n.far {\n  font-family: 'Font Awesome 5 Free';\n  font-weight: 400; }\n@font-face {\n  font-family: 'Font Awesome 5 Free';\n  font-style: normal;\n  font-weight: 900;\n  src: url(\"../webfonts/fa-solid-900.eot\");\n  src: url(\"../webfonts/fa-solid-900.eot?#iefix\") format(\"embedded-opentype\"), url(\"../webfonts/fa-solid-900.woff2\") format(\"woff2\"), url(\"../webfonts/fa-solid-900.woff\") format(\"woff\"), url(\"../webfonts/fa-solid-900.ttf\") format(\"truetype\"), url(\"../webfonts/fa-solid-900.svg#fontawesome\") format(\"svg\"); }\n\n.fa,\n.fas {\n  font-family: 'Font Awesome 5 Free';\n  font-weight: 900; }\n"
  },
  {
    "path": "src/sourceDev.WebApp/SharedThemes/minty/wwwroot/css/site.css",
    "content": "﻿html {\n    position: relative;\n    min-height: 100%;\n}\n\nbody {\n    min-height: 100vh;\n    padding-top: 142px;\n}\n\n#newPostLink {\n    position: absolute;\n    top: 170px;\n    right: 0px;\n    color:black;\n}\n\n#editPostLink {\n    position: absolute;\n    top: 200px;\n    right: 0px;\n    color: black;\n}\n\n#unpublishPostLink {\n    position: absolute;\n    top: 230px !important;\n    right: 0px !important;\n    color: black;\n}\n\n#pageManagerLink {\n    position: absolute;\n    top: 170px;\n    right: 0px;\n    color: black;\n}\n\n#newPageLink {\n    position: absolute;\n    top: 200px;\n    right: 0px;\n    color: black;\n}\n\n#editPageLink {\n    position: absolute;\n    top: 230px;\n    right: 0px;\n    color:black;\n}\n\n#unpublishPageLink {\n    position: absolute;\n    top: 260px !important;\n    right: 0px !important;\n    color: black;\n}\n\n#sidenavtoggle {\n    position: absolute;\n    top: 220px;\n    right: 5px;\n    color: black;\n}\n\n\n@media screen and (max-width: 812px) {\n    #sidenavtoggle,\n    #sidenavmenu {\n        display: none;\n    }\n}\n\n.flex-fill {\n    flex: 1 1 auto !important;\n}\n\n\n.carousel-caption p {\n    font-size: 20px;\n    line-height: 1.4;\n}\n\n@media screen and (max-width: 768px) {\n    .carousel-caption {\n        display: none\n    }\n}\n\n\n\n\nimg, video, iframe {\n    max-width: 100%;\n}\n\ntd img, video, iframe {\n    max-width: none;\n}\n\n\n\n.table td, .table th {\n    vertical-align: inherit;\n}\n\n/******** jquery smartmenu bootstrap 4 ******/\n/* Carets in collapsible mode (make them look like +/- buttons) */\n.navbar-nav.sm-collapsible .sub-arrow {\n    position: absolute;\n    top: 50%;\n    right: 0;\n    margin: -0.7em 0.5em 0 0;\n    border: 1px solid rgba(0, 0, 0, .1);\n    border-radius: .25rem;\n    padding: 0;\n    width: 2em;\n    height: 1.4em;\n    font-size: 1.25rem;\n    line-height: 1.2em;\n    text-align: center;\n}\n\n    .navbar-nav.sm-collapsible .sub-arrow::before {\n        content: '+';\n    }\n\n.navbar-nav.sm-collapsible .show > a > .sub-arrow::before {\n    content: '-';\n}\n\n.navbar-dark .navbar-nav.sm-collapsible .nav-link .sub-arrow {\n    border-color: rgba(255, 255, 255, .1);\n}\n/* make sure there's room for the carets */\n.navbar-nav.sm-collapsible .has-submenu {\n    padding-right: 3em;\n}\n/* keep the carets properly positioned */\n.navbar-nav.sm-collapsible .nav-link,\n.navbar-nav.sm-collapsible .dropdown-item {\n    position: relative;\n}\n\n\n/* Nav carets in expanded mode */\n.navbar-nav:not(.sm-collapsible) .nav-link .sub-arrow {\n    display: inline-block;\n    width: 0;\n    height: 0;\n    margin-left: .255em;\n    vertical-align: .255em;\n    border-top: .3em solid;\n    border-right: .3em solid transparent;\n    border-left: .3em solid transparent;\n}\n/* point the arrows up for .fixed-bottom navbars */\n.fixed-bottom .navbar-nav:not(.sm-collapsible) .nav-link .sub-arrow,\n.fixed-bottom .navbar-nav:not(.sm-collapsible):not([data-sm-skip]) .dropdown-toggle::after {\n    border-top: 0;\n    border-bottom: .3em solid;\n}\n\n\n/* Dropdown carets in expanded mode */\n.navbar-nav:not(.sm-collapsible) .dropdown-item .sub-arrow,\n.navbar-nav:not(.sm-collapsible):not([data-sm-skip]) .dropdown-menu .dropdown-toggle::after {\n    position: absolute;\n    top: 50%;\n    right: 0;\n    width: 0;\n    height: 0;\n    margin-top: -.3em;\n    margin-right: 1em;\n    border-top: .3em solid transparent;\n    border-bottom: .3em solid transparent;\n    border-left: .3em solid;\n}\n/* make sure there's room for the carets */\n.navbar-nav:not(.sm-collapsible) .dropdown-item.has-submenu {\n    padding-right: 2em;\n}\n\n\n/* Scrolling arrows for tall menus */\n.navbar-nav .scroll-up,\n.navbar-nav .scroll-down {\n    position: absolute;\n    display: none;\n    visibility: hidden;\n    height: 20px;\n    overflow: hidden;\n    text-align: center;\n}\n\n.navbar-nav .scroll-up-arrow,\n.navbar-nav .scroll-down-arrow {\n    position: absolute;\n    top: -2px;\n    left: 50%;\n    margin-left: -8px;\n    width: 0;\n    height: 0;\n    overflow: hidden;\n    border-top: 7px solid transparent;\n    border-right: 7px solid transparent;\n    border-bottom: 7px solid;\n    border-left: 7px solid transparent;\n}\n\n.navbar-nav .scroll-down-arrow {\n    top: 6px;\n    border-top: 7px solid;\n    border-right: 7px solid transparent;\n    border-bottom: 7px solid transparent;\n    border-left: 7px solid transparent;\n}\n\n\n/* Add some spacing for 2+ level sub menus in collapsible mode */\n.navbar-nav.sm-collapsible .dropdown-menu .dropdown-menu {\n    margin: .5em;\n}\n\n\n/* Fix SmartMenus sub menus auto width (subMenusMinWidth/subMenusMaxWidth options) */\n.navbar-nav:not([data-sm-skip]) .dropdown-item {\n    white-space: normal;\n}\n\n.navbar-nav:not(.sm-collapsible) .sm-nowrap > li > .dropdown-item {\n    white-space: nowrap;\n}\n/******** end jquery smart menu bootstrap-4 *****************/\n\n.brand-header {\n    height: 100px;\n}\n\nheader .navbar {\n    top: 100px;\n}\n"
  },
  {
    "path": "src/sourceDev.WebApp/SharedThemes/minty/wwwroot/js/bootstrap.bundle.js",
    "content": "/*!\n  * Bootstrap v5.0.2 (https://getbootstrap.com/)\n  * Copyright 2011-2021 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)\n  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n  */\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n  typeof define === 'function' && define.amd ? define(factory) :\n  (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.bootstrap = factory());\n}(this, (function () { 'use strict';\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): dom/selector-engine.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n  const NODE_TEXT = 3;\n  const SelectorEngine = {\n    find(selector, element = document.documentElement) {\n      return [].concat(...Element.prototype.querySelectorAll.call(element, selector));\n    },\n\n    findOne(selector, element = document.documentElement) {\n      return Element.prototype.querySelector.call(element, selector);\n    },\n\n    children(element, selector) {\n      return [].concat(...element.children).filter(child => child.matches(selector));\n    },\n\n    parents(element, selector) {\n      const parents = [];\n      let ancestor = element.parentNode;\n\n      while (ancestor && ancestor.nodeType === Node.ELEMENT_NODE && ancestor.nodeType !== NODE_TEXT) {\n        if (ancestor.matches(selector)) {\n          parents.push(ancestor);\n        }\n\n        ancestor = ancestor.parentNode;\n      }\n\n      return parents;\n    },\n\n    prev(element, selector) {\n      let previous = element.previousElementSibling;\n\n      while (previous) {\n        if (previous.matches(selector)) {\n          return [previous];\n        }\n\n        previous = previous.previousElementSibling;\n      }\n\n      return [];\n    },\n\n    next(element, selector) {\n      let next = element.nextElementSibling;\n\n      while (next) {\n        if (next.matches(selector)) {\n          return [next];\n        }\n\n        next = next.nextElementSibling;\n      }\n\n      return [];\n    }\n\n  };\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): util/index.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n\n  const MAX_UID = 1000000;\n  const MILLISECONDS_MULTIPLIER = 1000;\n  const TRANSITION_END = 'transitionend'; // Shoutout AngusCroll (https://goo.gl/pxwQGp)\n\n  const toType = obj => {\n    if (obj === null || obj === undefined) {\n      return `${obj}`;\n    }\n\n    return {}.toString.call(obj).match(/\\s([a-z]+)/i)[1].toLowerCase();\n  };\n  /**\n   * --------------------------------------------------------------------------\n   * Public Util Api\n   * --------------------------------------------------------------------------\n   */\n\n\n  const getUID = prefix => {\n    do {\n      prefix += Math.floor(Math.random() * MAX_UID);\n    } while (document.getElementById(prefix));\n\n    return prefix;\n  };\n\n  const getSelector = element => {\n    let selector = element.getAttribute('data-bs-target');\n\n    if (!selector || selector === '#') {\n      let hrefAttr = element.getAttribute('href'); // The only valid content that could double as a selector are IDs or classes,\n      // so everything starting with `#` or `.`. If a \"real\" URL is used as the selector,\n      // `document.querySelector` will rightfully complain it is invalid.\n      // See https://github.com/twbs/bootstrap/issues/32273\n\n      if (!hrefAttr || !hrefAttr.includes('#') && !hrefAttr.startsWith('.')) {\n        return null;\n      } // Just in case some CMS puts out a full URL with the anchor appended\n\n\n      if (hrefAttr.includes('#') && !hrefAttr.startsWith('#')) {\n        hrefAttr = `#${hrefAttr.split('#')[1]}`;\n      }\n\n      selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : null;\n    }\n\n    return selector;\n  };\n\n  const getSelectorFromElement = element => {\n    const selector = getSelector(element);\n\n    if (selector) {\n      return document.querySelector(selector) ? selector : null;\n    }\n\n    return null;\n  };\n\n  const getElementFromSelector = element => {\n    const selector = getSelector(element);\n    return selector ? document.querySelector(selector) : null;\n  };\n\n  const getTransitionDurationFromElement = element => {\n    if (!element) {\n      return 0;\n    } // Get transition-duration of the element\n\n\n    let {\n      transitionDuration,\n      transitionDelay\n    } = window.getComputedStyle(element);\n    const floatTransitionDuration = Number.parseFloat(transitionDuration);\n    const floatTransitionDelay = Number.parseFloat(transitionDelay); // Return 0 if element or transition duration is not found\n\n    if (!floatTransitionDuration && !floatTransitionDelay) {\n      return 0;\n    } // If multiple durations are defined, take the first\n\n\n    transitionDuration = transitionDuration.split(',')[0];\n    transitionDelay = transitionDelay.split(',')[0];\n    return (Number.parseFloat(transitionDuration) + Number.parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER;\n  };\n\n  const triggerTransitionEnd = element => {\n    element.dispatchEvent(new Event(TRANSITION_END));\n  };\n\n  const isElement$1 = obj => {\n    if (!obj || typeof obj !== 'object') {\n      return false;\n    }\n\n    if (typeof obj.jquery !== 'undefined') {\n      obj = obj[0];\n    }\n\n    return typeof obj.nodeType !== 'undefined';\n  };\n\n  const getElement = obj => {\n    if (isElement$1(obj)) {\n      // it's a jQuery object or a node element\n      return obj.jquery ? obj[0] : obj;\n    }\n\n    if (typeof obj === 'string' && obj.length > 0) {\n      return SelectorEngine.findOne(obj);\n    }\n\n    return null;\n  };\n\n  const typeCheckConfig = (componentName, config, configTypes) => {\n    Object.keys(configTypes).forEach(property => {\n      const expectedTypes = configTypes[property];\n      const value = config[property];\n      const valueType = value && isElement$1(value) ? 'element' : toType(value);\n\n      if (!new RegExp(expectedTypes).test(valueType)) {\n        throw new TypeError(`${componentName.toUpperCase()}: Option \"${property}\" provided type \"${valueType}\" but expected type \"${expectedTypes}\".`);\n      }\n    });\n  };\n\n  const isVisible = element => {\n    if (!isElement$1(element) || element.getClientRects().length === 0) {\n      return false;\n    }\n\n    return getComputedStyle(element).getPropertyValue('visibility') === 'visible';\n  };\n\n  const isDisabled = element => {\n    if (!element || element.nodeType !== Node.ELEMENT_NODE) {\n      return true;\n    }\n\n    if (element.classList.contains('disabled')) {\n      return true;\n    }\n\n    if (typeof element.disabled !== 'undefined') {\n      return element.disabled;\n    }\n\n    return element.hasAttribute('disabled') && element.getAttribute('disabled') !== 'false';\n  };\n\n  const findShadowRoot = element => {\n    if (!document.documentElement.attachShadow) {\n      return null;\n    } // Can find the shadow root otherwise it'll return the document\n\n\n    if (typeof element.getRootNode === 'function') {\n      const root = element.getRootNode();\n      return root instanceof ShadowRoot ? root : null;\n    }\n\n    if (element instanceof ShadowRoot) {\n      return element;\n    } // when we don't find a shadow root\n\n\n    if (!element.parentNode) {\n      return null;\n    }\n\n    return findShadowRoot(element.parentNode);\n  };\n\n  const noop = () => {};\n\n  const reflow = element => element.offsetHeight;\n\n  const getjQuery = () => {\n    const {\n      jQuery\n    } = window;\n\n    if (jQuery && !document.body.hasAttribute('data-bs-no-jquery')) {\n      return jQuery;\n    }\n\n    return null;\n  };\n\n  const DOMContentLoadedCallbacks = [];\n\n  const onDOMContentLoaded = callback => {\n    if (document.readyState === 'loading') {\n      // add listener on the first call when the document is in loading state\n      if (!DOMContentLoadedCallbacks.length) {\n        document.addEventListener('DOMContentLoaded', () => {\n          DOMContentLoadedCallbacks.forEach(callback => callback());\n        });\n      }\n\n      DOMContentLoadedCallbacks.push(callback);\n    } else {\n      callback();\n    }\n  };\n\n  const isRTL = () => document.documentElement.dir === 'rtl';\n\n  const defineJQueryPlugin = plugin => {\n    onDOMContentLoaded(() => {\n      const $ = getjQuery();\n      /* istanbul ignore if */\n\n      if ($) {\n        const name = plugin.NAME;\n        const JQUERY_NO_CONFLICT = $.fn[name];\n        $.fn[name] = plugin.jQueryInterface;\n        $.fn[name].Constructor = plugin;\n\n        $.fn[name].noConflict = () => {\n          $.fn[name] = JQUERY_NO_CONFLICT;\n          return plugin.jQueryInterface;\n        };\n      }\n    });\n  };\n\n  const execute = callback => {\n    if (typeof callback === 'function') {\n      callback();\n    }\n  };\n\n  const executeAfterTransition = (callback, transitionElement, waitForTransition = true) => {\n    if (!waitForTransition) {\n      execute(callback);\n      return;\n    }\n\n    const durationPadding = 5;\n    const emulatedDuration = getTransitionDurationFromElement(transitionElement) + durationPadding;\n    let called = false;\n\n    const handler = ({\n      target\n    }) => {\n      if (target !== transitionElement) {\n        return;\n      }\n\n      called = true;\n      transitionElement.removeEventListener(TRANSITION_END, handler);\n      execute(callback);\n    };\n\n    transitionElement.addEventListener(TRANSITION_END, handler);\n    setTimeout(() => {\n      if (!called) {\n        triggerTransitionEnd(transitionElement);\n      }\n    }, emulatedDuration);\n  };\n  /**\n   * Return the previous/next element of a list.\n   *\n   * @param {array} list    The list of elements\n   * @param activeElement   The active element\n   * @param shouldGetNext   Choose to get next or previous element\n   * @param isCycleAllowed\n   * @return {Element|elem} The proper element\n   */\n\n\n  const getNextActiveElement = (list, activeElement, shouldGetNext, isCycleAllowed) => {\n    let index = list.indexOf(activeElement); // if the element does not exist in the list return an element depending on the direction and if cycle is allowed\n\n    if (index === -1) {\n      return list[!shouldGetNext && isCycleAllowed ? list.length - 1 : 0];\n    }\n\n    const listLength = list.length;\n    index += shouldGetNext ? 1 : -1;\n\n    if (isCycleAllowed) {\n      index = (index + listLength) % listLength;\n    }\n\n    return list[Math.max(0, Math.min(index, listLength - 1))];\n  };\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): dom/event-handler.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const namespaceRegex = /[^.]*(?=\\..*)\\.|.*/;\n  const stripNameRegex = /\\..*/;\n  const stripUidRegex = /::\\d+$/;\n  const eventRegistry = {}; // Events storage\n\n  let uidEvent = 1;\n  const customEvents = {\n    mouseenter: 'mouseover',\n    mouseleave: 'mouseout'\n  };\n  const customEventsRegex = /^(mouseenter|mouseleave)/i;\n  const nativeEvents = new Set(['click', 'dblclick', 'mouseup', 'mousedown', 'contextmenu', 'mousewheel', 'DOMMouseScroll', 'mouseover', 'mouseout', 'mousemove', 'selectstart', 'selectend', 'keydown', 'keypress', 'keyup', 'orientationchange', 'touchstart', 'touchmove', 'touchend', 'touchcancel', 'pointerdown', 'pointermove', 'pointerup', 'pointerleave', 'pointercancel', 'gesturestart', 'gesturechange', 'gestureend', 'focus', 'blur', 'change', 'reset', 'select', 'submit', 'focusin', 'focusout', 'load', 'unload', 'beforeunload', 'resize', 'move', 'DOMContentLoaded', 'readystatechange', 'error', 'abort', 'scroll']);\n  /**\n   * ------------------------------------------------------------------------\n   * Private methods\n   * ------------------------------------------------------------------------\n   */\n\n  function getUidEvent(element, uid) {\n    return uid && `${uid}::${uidEvent++}` || element.uidEvent || uidEvent++;\n  }\n\n  function getEvent(element) {\n    const uid = getUidEvent(element);\n    element.uidEvent = uid;\n    eventRegistry[uid] = eventRegistry[uid] || {};\n    return eventRegistry[uid];\n  }\n\n  function bootstrapHandler(element, fn) {\n    return function handler(event) {\n      event.delegateTarget = element;\n\n      if (handler.oneOff) {\n        EventHandler.off(element, event.type, fn);\n      }\n\n      return fn.apply(element, [event]);\n    };\n  }\n\n  function bootstrapDelegationHandler(element, selector, fn) {\n    return function handler(event) {\n      const domElements = element.querySelectorAll(selector);\n\n      for (let {\n        target\n      } = event; target && target !== this; target = target.parentNode) {\n        for (let i = domElements.length; i--;) {\n          if (domElements[i] === target) {\n            event.delegateTarget = target;\n\n            if (handler.oneOff) {\n              // eslint-disable-next-line unicorn/consistent-destructuring\n              EventHandler.off(element, event.type, selector, fn);\n            }\n\n            return fn.apply(target, [event]);\n          }\n        }\n      } // To please ESLint\n\n\n      return null;\n    };\n  }\n\n  function findHandler(events, handler, delegationSelector = null) {\n    const uidEventList = Object.keys(events);\n\n    for (let i = 0, len = uidEventList.length; i < len; i++) {\n      const event = events[uidEventList[i]];\n\n      if (event.originalHandler === handler && event.delegationSelector === delegationSelector) {\n        return event;\n      }\n    }\n\n    return null;\n  }\n\n  function normalizeParams(originalTypeEvent, handler, delegationFn) {\n    const delegation = typeof handler === 'string';\n    const originalHandler = delegation ? delegationFn : handler;\n    let typeEvent = getTypeEvent(originalTypeEvent);\n    const isNative = nativeEvents.has(typeEvent);\n\n    if (!isNative) {\n      typeEvent = originalTypeEvent;\n    }\n\n    return [delegation, originalHandler, typeEvent];\n  }\n\n  function addHandler(element, originalTypeEvent, handler, delegationFn, oneOff) {\n    if (typeof originalTypeEvent !== 'string' || !element) {\n      return;\n    }\n\n    if (!handler) {\n      handler = delegationFn;\n      delegationFn = null;\n    } // in case of mouseenter or mouseleave wrap the handler within a function that checks for its DOM position\n    // this prevents the handler from being dispatched the same way as mouseover or mouseout does\n\n\n    if (customEventsRegex.test(originalTypeEvent)) {\n      const wrapFn = fn => {\n        return function (event) {\n          if (!event.relatedTarget || event.relatedTarget !== event.delegateTarget && !event.delegateTarget.contains(event.relatedTarget)) {\n            return fn.call(this, event);\n          }\n        };\n      };\n\n      if (delegationFn) {\n        delegationFn = wrapFn(delegationFn);\n      } else {\n        handler = wrapFn(handler);\n      }\n    }\n\n    const [delegation, originalHandler, typeEvent] = normalizeParams(originalTypeEvent, handler, delegationFn);\n    const events = getEvent(element);\n    const handlers = events[typeEvent] || (events[typeEvent] = {});\n    const previousFn = findHandler(handlers, originalHandler, delegation ? handler : null);\n\n    if (previousFn) {\n      previousFn.oneOff = previousFn.oneOff && oneOff;\n      return;\n    }\n\n    const uid = getUidEvent(originalHandler, originalTypeEvent.replace(namespaceRegex, ''));\n    const fn = delegation ? bootstrapDelegationHandler(element, handler, delegationFn) : bootstrapHandler(element, handler);\n    fn.delegationSelector = delegation ? handler : null;\n    fn.originalHandler = originalHandler;\n    fn.oneOff = oneOff;\n    fn.uidEvent = uid;\n    handlers[uid] = fn;\n    element.addEventListener(typeEvent, fn, delegation);\n  }\n\n  function removeHandler(element, events, typeEvent, handler, delegationSelector) {\n    const fn = findHandler(events[typeEvent], handler, delegationSelector);\n\n    if (!fn) {\n      return;\n    }\n\n    element.removeEventListener(typeEvent, fn, Boolean(delegationSelector));\n    delete events[typeEvent][fn.uidEvent];\n  }\n\n  function removeNamespacedHandlers(element, events, typeEvent, namespace) {\n    const storeElementEvent = events[typeEvent] || {};\n    Object.keys(storeElementEvent).forEach(handlerKey => {\n      if (handlerKey.includes(namespace)) {\n        const event = storeElementEvent[handlerKey];\n        removeHandler(element, events, typeEvent, event.originalHandler, event.delegationSelector);\n      }\n    });\n  }\n\n  function getTypeEvent(event) {\n    // allow to get the native events from namespaced events ('click.bs.button' --> 'click')\n    event = event.replace(stripNameRegex, '');\n    return customEvents[event] || event;\n  }\n\n  const EventHandler = {\n    on(element, event, handler, delegationFn) {\n      addHandler(element, event, handler, delegationFn, false);\n    },\n\n    one(element, event, handler, delegationFn) {\n      addHandler(element, event, handler, delegationFn, true);\n    },\n\n    off(element, originalTypeEvent, handler, delegationFn) {\n      if (typeof originalTypeEvent !== 'string' || !element) {\n        return;\n      }\n\n      const [delegation, originalHandler, typeEvent] = normalizeParams(originalTypeEvent, handler, delegationFn);\n      const inNamespace = typeEvent !== originalTypeEvent;\n      const events = getEvent(element);\n      const isNamespace = originalTypeEvent.startsWith('.');\n\n      if (typeof originalHandler !== 'undefined') {\n        // Simplest case: handler is passed, remove that listener ONLY.\n        if (!events || !events[typeEvent]) {\n          return;\n        }\n\n        removeHandler(element, events, typeEvent, originalHandler, delegation ? handler : null);\n        return;\n      }\n\n      if (isNamespace) {\n        Object.keys(events).forEach(elementEvent => {\n          removeNamespacedHandlers(element, events, elementEvent, originalTypeEvent.slice(1));\n        });\n      }\n\n      const storeElementEvent = events[typeEvent] || {};\n      Object.keys(storeElementEvent).forEach(keyHandlers => {\n        const handlerKey = keyHandlers.replace(stripUidRegex, '');\n\n        if (!inNamespace || originalTypeEvent.includes(handlerKey)) {\n          const event = storeElementEvent[keyHandlers];\n          removeHandler(element, events, typeEvent, event.originalHandler, event.delegationSelector);\n        }\n      });\n    },\n\n    trigger(element, event, args) {\n      if (typeof event !== 'string' || !element) {\n        return null;\n      }\n\n      const $ = getjQuery();\n      const typeEvent = getTypeEvent(event);\n      const inNamespace = event !== typeEvent;\n      const isNative = nativeEvents.has(typeEvent);\n      let jQueryEvent;\n      let bubbles = true;\n      let nativeDispatch = true;\n      let defaultPrevented = false;\n      let evt = null;\n\n      if (inNamespace && $) {\n        jQueryEvent = $.Event(event, args);\n        $(element).trigger(jQueryEvent);\n        bubbles = !jQueryEvent.isPropagationStopped();\n        nativeDispatch = !jQueryEvent.isImmediatePropagationStopped();\n        defaultPrevented = jQueryEvent.isDefaultPrevented();\n      }\n\n      if (isNative) {\n        evt = document.createEvent('HTMLEvents');\n        evt.initEvent(typeEvent, bubbles, true);\n      } else {\n        evt = new CustomEvent(event, {\n          bubbles,\n          cancelable: true\n        });\n      } // merge custom information in our event\n\n\n      if (typeof args !== 'undefined') {\n        Object.keys(args).forEach(key => {\n          Object.defineProperty(evt, key, {\n            get() {\n              return args[key];\n            }\n\n          });\n        });\n      }\n\n      if (defaultPrevented) {\n        evt.preventDefault();\n      }\n\n      if (nativeDispatch) {\n        element.dispatchEvent(evt);\n      }\n\n      if (evt.defaultPrevented && typeof jQueryEvent !== 'undefined') {\n        jQueryEvent.preventDefault();\n      }\n\n      return evt;\n    }\n\n  };\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): dom/data.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n  const elementMap = new Map();\n  var Data = {\n    set(element, key, instance) {\n      if (!elementMap.has(element)) {\n        elementMap.set(element, new Map());\n      }\n\n      const instanceMap = elementMap.get(element); // make it clear we only want one instance per element\n      // can be removed later when multiple key/instances are fine to be used\n\n      if (!instanceMap.has(key) && instanceMap.size !== 0) {\n        // eslint-disable-next-line no-console\n        console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(instanceMap.keys())[0]}.`);\n        return;\n      }\n\n      instanceMap.set(key, instance);\n    },\n\n    get(element, key) {\n      if (elementMap.has(element)) {\n        return elementMap.get(element).get(key) || null;\n      }\n\n      return null;\n    },\n\n    remove(element, key) {\n      if (!elementMap.has(element)) {\n        return;\n      }\n\n      const instanceMap = elementMap.get(element);\n      instanceMap.delete(key); // free up element references if there are no instances left for an element\n\n      if (instanceMap.size === 0) {\n        elementMap.delete(element);\n      }\n    }\n\n  };\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): base-component.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const VERSION = '5.0.2';\n\n  class BaseComponent {\n    constructor(element) {\n      element = getElement(element);\n\n      if (!element) {\n        return;\n      }\n\n      this._element = element;\n      Data.set(this._element, this.constructor.DATA_KEY, this);\n    }\n\n    dispose() {\n      Data.remove(this._element, this.constructor.DATA_KEY);\n      EventHandler.off(this._element, this.constructor.EVENT_KEY);\n      Object.getOwnPropertyNames(this).forEach(propertyName => {\n        this[propertyName] = null;\n      });\n    }\n\n    _queueCallback(callback, element, isAnimated = true) {\n      executeAfterTransition(callback, element, isAnimated);\n    }\n    /** Static */\n\n\n    static getInstance(element) {\n      return Data.get(element, this.DATA_KEY);\n    }\n\n    static getOrCreateInstance(element, config = {}) {\n      return this.getInstance(element) || new this(element, typeof config === 'object' ? config : null);\n    }\n\n    static get VERSION() {\n      return VERSION;\n    }\n\n    static get NAME() {\n      throw new Error('You have to implement the static method \"NAME\", for each component!');\n    }\n\n    static get DATA_KEY() {\n      return `bs.${this.NAME}`;\n    }\n\n    static get EVENT_KEY() {\n      return `.${this.DATA_KEY}`;\n    }\n\n  }\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): alert.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$c = 'alert';\n  const DATA_KEY$b = 'bs.alert';\n  const EVENT_KEY$b = `.${DATA_KEY$b}`;\n  const DATA_API_KEY$8 = '.data-api';\n  const SELECTOR_DISMISS = '[data-bs-dismiss=\"alert\"]';\n  const EVENT_CLOSE = `close${EVENT_KEY$b}`;\n  const EVENT_CLOSED = `closed${EVENT_KEY$b}`;\n  const EVENT_CLICK_DATA_API$7 = `click${EVENT_KEY$b}${DATA_API_KEY$8}`;\n  const CLASS_NAME_ALERT = 'alert';\n  const CLASS_NAME_FADE$6 = 'fade';\n  const CLASS_NAME_SHOW$9 = 'show';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Alert extends BaseComponent {\n    // Getters\n    static get NAME() {\n      return NAME$c;\n    } // Public\n\n\n    close(element) {\n      const rootElement = element ? this._getRootElement(element) : this._element;\n\n      const customEvent = this._triggerCloseEvent(rootElement);\n\n      if (customEvent === null || customEvent.defaultPrevented) {\n        return;\n      }\n\n      this._removeElement(rootElement);\n    } // Private\n\n\n    _getRootElement(element) {\n      return getElementFromSelector(element) || element.closest(`.${CLASS_NAME_ALERT}`);\n    }\n\n    _triggerCloseEvent(element) {\n      return EventHandler.trigger(element, EVENT_CLOSE);\n    }\n\n    _removeElement(element) {\n      element.classList.remove(CLASS_NAME_SHOW$9);\n      const isAnimated = element.classList.contains(CLASS_NAME_FADE$6);\n\n      this._queueCallback(() => this._destroyElement(element), element, isAnimated);\n    }\n\n    _destroyElement(element) {\n      element.remove();\n      EventHandler.trigger(element, EVENT_CLOSED);\n    } // Static\n\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = Alert.getOrCreateInstance(this);\n\n        if (config === 'close') {\n          data[config](this);\n        }\n      });\n    }\n\n    static handleDismiss(alertInstance) {\n      return function (event) {\n        if (event) {\n          event.preventDefault();\n        }\n\n        alertInstance.close(this);\n      };\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(document, EVENT_CLICK_DATA_API$7, SELECTOR_DISMISS, Alert.handleDismiss(new Alert()));\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Alert to jQuery only if jQuery is present\n   */\n\n  defineJQueryPlugin(Alert);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): button.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$b = 'button';\n  const DATA_KEY$a = 'bs.button';\n  const EVENT_KEY$a = `.${DATA_KEY$a}`;\n  const DATA_API_KEY$7 = '.data-api';\n  const CLASS_NAME_ACTIVE$3 = 'active';\n  const SELECTOR_DATA_TOGGLE$5 = '[data-bs-toggle=\"button\"]';\n  const EVENT_CLICK_DATA_API$6 = `click${EVENT_KEY$a}${DATA_API_KEY$7}`;\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Button extends BaseComponent {\n    // Getters\n    static get NAME() {\n      return NAME$b;\n    } // Public\n\n\n    toggle() {\n      // Toggle class and sync the `aria-pressed` attribute with the return value of the `.toggle()` method\n      this._element.setAttribute('aria-pressed', this._element.classList.toggle(CLASS_NAME_ACTIVE$3));\n    } // Static\n\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = Button.getOrCreateInstance(this);\n\n        if (config === 'toggle') {\n          data[config]();\n        }\n      });\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(document, EVENT_CLICK_DATA_API$6, SELECTOR_DATA_TOGGLE$5, event => {\n    event.preventDefault();\n    const button = event.target.closest(SELECTOR_DATA_TOGGLE$5);\n    const data = Button.getOrCreateInstance(button);\n    data.toggle();\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Button to jQuery only if jQuery is present\n   */\n\n  defineJQueryPlugin(Button);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): dom/manipulator.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  function normalizeData(val) {\n    if (val === 'true') {\n      return true;\n    }\n\n    if (val === 'false') {\n      return false;\n    }\n\n    if (val === Number(val).toString()) {\n      return Number(val);\n    }\n\n    if (val === '' || val === 'null') {\n      return null;\n    }\n\n    return val;\n  }\n\n  function normalizeDataKey(key) {\n    return key.replace(/[A-Z]/g, chr => `-${chr.toLowerCase()}`);\n  }\n\n  const Manipulator = {\n    setDataAttribute(element, key, value) {\n      element.setAttribute(`data-bs-${normalizeDataKey(key)}`, value);\n    },\n\n    removeDataAttribute(element, key) {\n      element.removeAttribute(`data-bs-${normalizeDataKey(key)}`);\n    },\n\n    getDataAttributes(element) {\n      if (!element) {\n        return {};\n      }\n\n      const attributes = {};\n      Object.keys(element.dataset).filter(key => key.startsWith('bs')).forEach(key => {\n        let pureKey = key.replace(/^bs/, '');\n        pureKey = pureKey.charAt(0).toLowerCase() + pureKey.slice(1, pureKey.length);\n        attributes[pureKey] = normalizeData(element.dataset[key]);\n      });\n      return attributes;\n    },\n\n    getDataAttribute(element, key) {\n      return normalizeData(element.getAttribute(`data-bs-${normalizeDataKey(key)}`));\n    },\n\n    offset(element) {\n      const rect = element.getBoundingClientRect();\n      return {\n        top: rect.top + document.body.scrollTop,\n        left: rect.left + document.body.scrollLeft\n      };\n    },\n\n    position(element) {\n      return {\n        top: element.offsetTop,\n        left: element.offsetLeft\n      };\n    }\n\n  };\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): carousel.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$a = 'carousel';\n  const DATA_KEY$9 = 'bs.carousel';\n  const EVENT_KEY$9 = `.${DATA_KEY$9}`;\n  const DATA_API_KEY$6 = '.data-api';\n  const ARROW_LEFT_KEY = 'ArrowLeft';\n  const ARROW_RIGHT_KEY = 'ArrowRight';\n  const TOUCHEVENT_COMPAT_WAIT = 500; // Time for mouse compat events to fire after touch\n\n  const SWIPE_THRESHOLD = 40;\n  const Default$9 = {\n    interval: 5000,\n    keyboard: true,\n    slide: false,\n    pause: 'hover',\n    wrap: true,\n    touch: true\n  };\n  const DefaultType$9 = {\n    interval: '(number|boolean)',\n    keyboard: 'boolean',\n    slide: '(boolean|string)',\n    pause: '(string|boolean)',\n    wrap: 'boolean',\n    touch: 'boolean'\n  };\n  const ORDER_NEXT = 'next';\n  const ORDER_PREV = 'prev';\n  const DIRECTION_LEFT = 'left';\n  const DIRECTION_RIGHT = 'right';\n  const KEY_TO_DIRECTION = {\n    [ARROW_LEFT_KEY]: DIRECTION_RIGHT,\n    [ARROW_RIGHT_KEY]: DIRECTION_LEFT\n  };\n  const EVENT_SLIDE = `slide${EVENT_KEY$9}`;\n  const EVENT_SLID = `slid${EVENT_KEY$9}`;\n  const EVENT_KEYDOWN = `keydown${EVENT_KEY$9}`;\n  const EVENT_MOUSEENTER = `mouseenter${EVENT_KEY$9}`;\n  const EVENT_MOUSELEAVE = `mouseleave${EVENT_KEY$9}`;\n  const EVENT_TOUCHSTART = `touchstart${EVENT_KEY$9}`;\n  const EVENT_TOUCHMOVE = `touchmove${EVENT_KEY$9}`;\n  const EVENT_TOUCHEND = `touchend${EVENT_KEY$9}`;\n  const EVENT_POINTERDOWN = `pointerdown${EVENT_KEY$9}`;\n  const EVENT_POINTERUP = `pointerup${EVENT_KEY$9}`;\n  const EVENT_DRAG_START = `dragstart${EVENT_KEY$9}`;\n  const EVENT_LOAD_DATA_API$2 = `load${EVENT_KEY$9}${DATA_API_KEY$6}`;\n  const EVENT_CLICK_DATA_API$5 = `click${EVENT_KEY$9}${DATA_API_KEY$6}`;\n  const CLASS_NAME_CAROUSEL = 'carousel';\n  const CLASS_NAME_ACTIVE$2 = 'active';\n  const CLASS_NAME_SLIDE = 'slide';\n  const CLASS_NAME_END = 'carousel-item-end';\n  const CLASS_NAME_START = 'carousel-item-start';\n  const CLASS_NAME_NEXT = 'carousel-item-next';\n  const CLASS_NAME_PREV = 'carousel-item-prev';\n  const CLASS_NAME_POINTER_EVENT = 'pointer-event';\n  const SELECTOR_ACTIVE$1 = '.active';\n  const SELECTOR_ACTIVE_ITEM = '.active.carousel-item';\n  const SELECTOR_ITEM = '.carousel-item';\n  const SELECTOR_ITEM_IMG = '.carousel-item img';\n  const SELECTOR_NEXT_PREV = '.carousel-item-next, .carousel-item-prev';\n  const SELECTOR_INDICATORS = '.carousel-indicators';\n  const SELECTOR_INDICATOR = '[data-bs-target]';\n  const SELECTOR_DATA_SLIDE = '[data-bs-slide], [data-bs-slide-to]';\n  const SELECTOR_DATA_RIDE = '[data-bs-ride=\"carousel\"]';\n  const POINTER_TYPE_TOUCH = 'touch';\n  const POINTER_TYPE_PEN = 'pen';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Carousel extends BaseComponent {\n    constructor(element, config) {\n      super(element);\n      this._items = null;\n      this._interval = null;\n      this._activeElement = null;\n      this._isPaused = false;\n      this._isSliding = false;\n      this.touchTimeout = null;\n      this.touchStartX = 0;\n      this.touchDeltaX = 0;\n      this._config = this._getConfig(config);\n      this._indicatorsElement = SelectorEngine.findOne(SELECTOR_INDICATORS, this._element);\n      this._touchSupported = 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0;\n      this._pointerEvent = Boolean(window.PointerEvent);\n\n      this._addEventListeners();\n    } // Getters\n\n\n    static get Default() {\n      return Default$9;\n    }\n\n    static get NAME() {\n      return NAME$a;\n    } // Public\n\n\n    next() {\n      this._slide(ORDER_NEXT);\n    }\n\n    nextWhenVisible() {\n      // Don't call next when the page isn't visible\n      // or the carousel or its parent isn't visible\n      if (!document.hidden && isVisible(this._element)) {\n        this.next();\n      }\n    }\n\n    prev() {\n      this._slide(ORDER_PREV);\n    }\n\n    pause(event) {\n      if (!event) {\n        this._isPaused = true;\n      }\n\n      if (SelectorEngine.findOne(SELECTOR_NEXT_PREV, this._element)) {\n        triggerTransitionEnd(this._element);\n        this.cycle(true);\n      }\n\n      clearInterval(this._interval);\n      this._interval = null;\n    }\n\n    cycle(event) {\n      if (!event) {\n        this._isPaused = false;\n      }\n\n      if (this._interval) {\n        clearInterval(this._interval);\n        this._interval = null;\n      }\n\n      if (this._config && this._config.interval && !this._isPaused) {\n        this._updateInterval();\n\n        this._interval = setInterval((document.visibilityState ? this.nextWhenVisible : this.next).bind(this), this._config.interval);\n      }\n    }\n\n    to(index) {\n      this._activeElement = SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element);\n\n      const activeIndex = this._getItemIndex(this._activeElement);\n\n      if (index > this._items.length - 1 || index < 0) {\n        return;\n      }\n\n      if (this._isSliding) {\n        EventHandler.one(this._element, EVENT_SLID, () => this.to(index));\n        return;\n      }\n\n      if (activeIndex === index) {\n        this.pause();\n        this.cycle();\n        return;\n      }\n\n      const order = index > activeIndex ? ORDER_NEXT : ORDER_PREV;\n\n      this._slide(order, this._items[index]);\n    } // Private\n\n\n    _getConfig(config) {\n      config = { ...Default$9,\n        ...Manipulator.getDataAttributes(this._element),\n        ...(typeof config === 'object' ? config : {})\n      };\n      typeCheckConfig(NAME$a, config, DefaultType$9);\n      return config;\n    }\n\n    _handleSwipe() {\n      const absDeltax = Math.abs(this.touchDeltaX);\n\n      if (absDeltax <= SWIPE_THRESHOLD) {\n        return;\n      }\n\n      const direction = absDeltax / this.touchDeltaX;\n      this.touchDeltaX = 0;\n\n      if (!direction) {\n        return;\n      }\n\n      this._slide(direction > 0 ? DIRECTION_RIGHT : DIRECTION_LEFT);\n    }\n\n    _addEventListeners() {\n      if (this._config.keyboard) {\n        EventHandler.on(this._element, EVENT_KEYDOWN, event => this._keydown(event));\n      }\n\n      if (this._config.pause === 'hover') {\n        EventHandler.on(this._element, EVENT_MOUSEENTER, event => this.pause(event));\n        EventHandler.on(this._element, EVENT_MOUSELEAVE, event => this.cycle(event));\n      }\n\n      if (this._config.touch && this._touchSupported) {\n        this._addTouchEventListeners();\n      }\n    }\n\n    _addTouchEventListeners() {\n      const start = event => {\n        if (this._pointerEvent && (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH)) {\n          this.touchStartX = event.clientX;\n        } else if (!this._pointerEvent) {\n          this.touchStartX = event.touches[0].clientX;\n        }\n      };\n\n      const move = event => {\n        // ensure swiping with one touch and not pinching\n        this.touchDeltaX = event.touches && event.touches.length > 1 ? 0 : event.touches[0].clientX - this.touchStartX;\n      };\n\n      const end = event => {\n        if (this._pointerEvent && (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH)) {\n          this.touchDeltaX = event.clientX - this.touchStartX;\n        }\n\n        this._handleSwipe();\n\n        if (this._config.pause === 'hover') {\n          // If it's a touch-enabled device, mouseenter/leave are fired as\n          // part of the mouse compatibility events on first tap - the carousel\n          // would stop cycling until user tapped out of it;\n          // here, we listen for touchend, explicitly pause the carousel\n          // (as if it's the second time we tap on it, mouseenter compat event\n          // is NOT fired) and after a timeout (to allow for mouse compatibility\n          // events to fire) we explicitly restart cycling\n          this.pause();\n\n          if (this.touchTimeout) {\n            clearTimeout(this.touchTimeout);\n          }\n\n          this.touchTimeout = setTimeout(event => this.cycle(event), TOUCHEVENT_COMPAT_WAIT + this._config.interval);\n        }\n      };\n\n      SelectorEngine.find(SELECTOR_ITEM_IMG, this._element).forEach(itemImg => {\n        EventHandler.on(itemImg, EVENT_DRAG_START, e => e.preventDefault());\n      });\n\n      if (this._pointerEvent) {\n        EventHandler.on(this._element, EVENT_POINTERDOWN, event => start(event));\n        EventHandler.on(this._element, EVENT_POINTERUP, event => end(event));\n\n        this._element.classList.add(CLASS_NAME_POINTER_EVENT);\n      } else {\n        EventHandler.on(this._element, EVENT_TOUCHSTART, event => start(event));\n        EventHandler.on(this._element, EVENT_TOUCHMOVE, event => move(event));\n        EventHandler.on(this._element, EVENT_TOUCHEND, event => end(event));\n      }\n    }\n\n    _keydown(event) {\n      if (/input|textarea/i.test(event.target.tagName)) {\n        return;\n      }\n\n      const direction = KEY_TO_DIRECTION[event.key];\n\n      if (direction) {\n        event.preventDefault();\n\n        this._slide(direction);\n      }\n    }\n\n    _getItemIndex(element) {\n      this._items = element && element.parentNode ? SelectorEngine.find(SELECTOR_ITEM, element.parentNode) : [];\n      return this._items.indexOf(element);\n    }\n\n    _getItemByOrder(order, activeElement) {\n      const isNext = order === ORDER_NEXT;\n      return getNextActiveElement(this._items, activeElement, isNext, this._config.wrap);\n    }\n\n    _triggerSlideEvent(relatedTarget, eventDirectionName) {\n      const targetIndex = this._getItemIndex(relatedTarget);\n\n      const fromIndex = this._getItemIndex(SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element));\n\n      return EventHandler.trigger(this._element, EVENT_SLIDE, {\n        relatedTarget,\n        direction: eventDirectionName,\n        from: fromIndex,\n        to: targetIndex\n      });\n    }\n\n    _setActiveIndicatorElement(element) {\n      if (this._indicatorsElement) {\n        const activeIndicator = SelectorEngine.findOne(SELECTOR_ACTIVE$1, this._indicatorsElement);\n        activeIndicator.classList.remove(CLASS_NAME_ACTIVE$2);\n        activeIndicator.removeAttribute('aria-current');\n        const indicators = SelectorEngine.find(SELECTOR_INDICATOR, this._indicatorsElement);\n\n        for (let i = 0; i < indicators.length; i++) {\n          if (Number.parseInt(indicators[i].getAttribute('data-bs-slide-to'), 10) === this._getItemIndex(element)) {\n            indicators[i].classList.add(CLASS_NAME_ACTIVE$2);\n            indicators[i].setAttribute('aria-current', 'true');\n            break;\n          }\n        }\n      }\n    }\n\n    _updateInterval() {\n      const element = this._activeElement || SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element);\n\n      if (!element) {\n        return;\n      }\n\n      const elementInterval = Number.parseInt(element.getAttribute('data-bs-interval'), 10);\n\n      if (elementInterval) {\n        this._config.defaultInterval = this._config.defaultInterval || this._config.interval;\n        this._config.interval = elementInterval;\n      } else {\n        this._config.interval = this._config.defaultInterval || this._config.interval;\n      }\n    }\n\n    _slide(directionOrOrder, element) {\n      const order = this._directionToOrder(directionOrOrder);\n\n      const activeElement = SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element);\n\n      const activeElementIndex = this._getItemIndex(activeElement);\n\n      const nextElement = element || this._getItemByOrder(order, activeElement);\n\n      const nextElementIndex = this._getItemIndex(nextElement);\n\n      const isCycling = Boolean(this._interval);\n      const isNext = order === ORDER_NEXT;\n      const directionalClassName = isNext ? CLASS_NAME_START : CLASS_NAME_END;\n      const orderClassName = isNext ? CLASS_NAME_NEXT : CLASS_NAME_PREV;\n\n      const eventDirectionName = this._orderToDirection(order);\n\n      if (nextElement && nextElement.classList.contains(CLASS_NAME_ACTIVE$2)) {\n        this._isSliding = false;\n        return;\n      }\n\n      if (this._isSliding) {\n        return;\n      }\n\n      const slideEvent = this._triggerSlideEvent(nextElement, eventDirectionName);\n\n      if (slideEvent.defaultPrevented) {\n        return;\n      }\n\n      if (!activeElement || !nextElement) {\n        // Some weirdness is happening, so we bail\n        return;\n      }\n\n      this._isSliding = true;\n\n      if (isCycling) {\n        this.pause();\n      }\n\n      this._setActiveIndicatorElement(nextElement);\n\n      this._activeElement = nextElement;\n\n      const triggerSlidEvent = () => {\n        EventHandler.trigger(this._element, EVENT_SLID, {\n          relatedTarget: nextElement,\n          direction: eventDirectionName,\n          from: activeElementIndex,\n          to: nextElementIndex\n        });\n      };\n\n      if (this._element.classList.contains(CLASS_NAME_SLIDE)) {\n        nextElement.classList.add(orderClassName);\n        reflow(nextElement);\n        activeElement.classList.add(directionalClassName);\n        nextElement.classList.add(directionalClassName);\n\n        const completeCallBack = () => {\n          nextElement.classList.remove(directionalClassName, orderClassName);\n          nextElement.classList.add(CLASS_NAME_ACTIVE$2);\n          activeElement.classList.remove(CLASS_NAME_ACTIVE$2, orderClassName, directionalClassName);\n          this._isSliding = false;\n          setTimeout(triggerSlidEvent, 0);\n        };\n\n        this._queueCallback(completeCallBack, activeElement, true);\n      } else {\n        activeElement.classList.remove(CLASS_NAME_ACTIVE$2);\n        nextElement.classList.add(CLASS_NAME_ACTIVE$2);\n        this._isSliding = false;\n        triggerSlidEvent();\n      }\n\n      if (isCycling) {\n        this.cycle();\n      }\n    }\n\n    _directionToOrder(direction) {\n      if (![DIRECTION_RIGHT, DIRECTION_LEFT].includes(direction)) {\n        return direction;\n      }\n\n      if (isRTL()) {\n        return direction === DIRECTION_LEFT ? ORDER_PREV : ORDER_NEXT;\n      }\n\n      return direction === DIRECTION_LEFT ? ORDER_NEXT : ORDER_PREV;\n    }\n\n    _orderToDirection(order) {\n      if (![ORDER_NEXT, ORDER_PREV].includes(order)) {\n        return order;\n      }\n\n      if (isRTL()) {\n        return order === ORDER_PREV ? DIRECTION_LEFT : DIRECTION_RIGHT;\n      }\n\n      return order === ORDER_PREV ? DIRECTION_RIGHT : DIRECTION_LEFT;\n    } // Static\n\n\n    static carouselInterface(element, config) {\n      const data = Carousel.getOrCreateInstance(element, config);\n      let {\n        _config\n      } = data;\n\n      if (typeof config === 'object') {\n        _config = { ..._config,\n          ...config\n        };\n      }\n\n      const action = typeof config === 'string' ? config : _config.slide;\n\n      if (typeof config === 'number') {\n        data.to(config);\n      } else if (typeof action === 'string') {\n        if (typeof data[action] === 'undefined') {\n          throw new TypeError(`No method named \"${action}\"`);\n        }\n\n        data[action]();\n      } else if (_config.interval && _config.ride) {\n        data.pause();\n        data.cycle();\n      }\n    }\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        Carousel.carouselInterface(this, config);\n      });\n    }\n\n    static dataApiClickHandler(event) {\n      const target = getElementFromSelector(this);\n\n      if (!target || !target.classList.contains(CLASS_NAME_CAROUSEL)) {\n        return;\n      }\n\n      const config = { ...Manipulator.getDataAttributes(target),\n        ...Manipulator.getDataAttributes(this)\n      };\n      const slideIndex = this.getAttribute('data-bs-slide-to');\n\n      if (slideIndex) {\n        config.interval = false;\n      }\n\n      Carousel.carouselInterface(target, config);\n\n      if (slideIndex) {\n        Carousel.getInstance(target).to(slideIndex);\n      }\n\n      event.preventDefault();\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(document, EVENT_CLICK_DATA_API$5, SELECTOR_DATA_SLIDE, Carousel.dataApiClickHandler);\n  EventHandler.on(window, EVENT_LOAD_DATA_API$2, () => {\n    const carousels = SelectorEngine.find(SELECTOR_DATA_RIDE);\n\n    for (let i = 0, len = carousels.length; i < len; i++) {\n      Carousel.carouselInterface(carousels[i], Carousel.getInstance(carousels[i]));\n    }\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Carousel to jQuery only if jQuery is present\n   */\n\n  defineJQueryPlugin(Carousel);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): collapse.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$9 = 'collapse';\n  const DATA_KEY$8 = 'bs.collapse';\n  const EVENT_KEY$8 = `.${DATA_KEY$8}`;\n  const DATA_API_KEY$5 = '.data-api';\n  const Default$8 = {\n    toggle: true,\n    parent: ''\n  };\n  const DefaultType$8 = {\n    toggle: 'boolean',\n    parent: '(string|element)'\n  };\n  const EVENT_SHOW$5 = `show${EVENT_KEY$8}`;\n  const EVENT_SHOWN$5 = `shown${EVENT_KEY$8}`;\n  const EVENT_HIDE$5 = `hide${EVENT_KEY$8}`;\n  const EVENT_HIDDEN$5 = `hidden${EVENT_KEY$8}`;\n  const EVENT_CLICK_DATA_API$4 = `click${EVENT_KEY$8}${DATA_API_KEY$5}`;\n  const CLASS_NAME_SHOW$8 = 'show';\n  const CLASS_NAME_COLLAPSE = 'collapse';\n  const CLASS_NAME_COLLAPSING = 'collapsing';\n  const CLASS_NAME_COLLAPSED = 'collapsed';\n  const WIDTH = 'width';\n  const HEIGHT = 'height';\n  const SELECTOR_ACTIVES = '.show, .collapsing';\n  const SELECTOR_DATA_TOGGLE$4 = '[data-bs-toggle=\"collapse\"]';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Collapse extends BaseComponent {\n    constructor(element, config) {\n      super(element);\n      this._isTransitioning = false;\n      this._config = this._getConfig(config);\n      this._triggerArray = SelectorEngine.find(`${SELECTOR_DATA_TOGGLE$4}[href=\"#${this._element.id}\"],` + `${SELECTOR_DATA_TOGGLE$4}[data-bs-target=\"#${this._element.id}\"]`);\n      const toggleList = SelectorEngine.find(SELECTOR_DATA_TOGGLE$4);\n\n      for (let i = 0, len = toggleList.length; i < len; i++) {\n        const elem = toggleList[i];\n        const selector = getSelectorFromElement(elem);\n        const filterElement = SelectorEngine.find(selector).filter(foundElem => foundElem === this._element);\n\n        if (selector !== null && filterElement.length) {\n          this._selector = selector;\n\n          this._triggerArray.push(elem);\n        }\n      }\n\n      this._parent = this._config.parent ? this._getParent() : null;\n\n      if (!this._config.parent) {\n        this._addAriaAndCollapsedClass(this._element, this._triggerArray);\n      }\n\n      if (this._config.toggle) {\n        this.toggle();\n      }\n    } // Getters\n\n\n    static get Default() {\n      return Default$8;\n    }\n\n    static get NAME() {\n      return NAME$9;\n    } // Public\n\n\n    toggle() {\n      if (this._element.classList.contains(CLASS_NAME_SHOW$8)) {\n        this.hide();\n      } else {\n        this.show();\n      }\n    }\n\n    show() {\n      if (this._isTransitioning || this._element.classList.contains(CLASS_NAME_SHOW$8)) {\n        return;\n      }\n\n      let actives;\n      let activesData;\n\n      if (this._parent) {\n        actives = SelectorEngine.find(SELECTOR_ACTIVES, this._parent).filter(elem => {\n          if (typeof this._config.parent === 'string') {\n            return elem.getAttribute('data-bs-parent') === this._config.parent;\n          }\n\n          return elem.classList.contains(CLASS_NAME_COLLAPSE);\n        });\n\n        if (actives.length === 0) {\n          actives = null;\n        }\n      }\n\n      const container = SelectorEngine.findOne(this._selector);\n\n      if (actives) {\n        const tempActiveData = actives.find(elem => container !== elem);\n        activesData = tempActiveData ? Collapse.getInstance(tempActiveData) : null;\n\n        if (activesData && activesData._isTransitioning) {\n          return;\n        }\n      }\n\n      const startEvent = EventHandler.trigger(this._element, EVENT_SHOW$5);\n\n      if (startEvent.defaultPrevented) {\n        return;\n      }\n\n      if (actives) {\n        actives.forEach(elemActive => {\n          if (container !== elemActive) {\n            Collapse.collapseInterface(elemActive, 'hide');\n          }\n\n          if (!activesData) {\n            Data.set(elemActive, DATA_KEY$8, null);\n          }\n        });\n      }\n\n      const dimension = this._getDimension();\n\n      this._element.classList.remove(CLASS_NAME_COLLAPSE);\n\n      this._element.classList.add(CLASS_NAME_COLLAPSING);\n\n      this._element.style[dimension] = 0;\n\n      if (this._triggerArray.length) {\n        this._triggerArray.forEach(element => {\n          element.classList.remove(CLASS_NAME_COLLAPSED);\n          element.setAttribute('aria-expanded', true);\n        });\n      }\n\n      this.setTransitioning(true);\n\n      const complete = () => {\n        this._element.classList.remove(CLASS_NAME_COLLAPSING);\n\n        this._element.classList.add(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$8);\n\n        this._element.style[dimension] = '';\n        this.setTransitioning(false);\n        EventHandler.trigger(this._element, EVENT_SHOWN$5);\n      };\n\n      const capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1);\n      const scrollSize = `scroll${capitalizedDimension}`;\n\n      this._queueCallback(complete, this._element, true);\n\n      this._element.style[dimension] = `${this._element[scrollSize]}px`;\n    }\n\n    hide() {\n      if (this._isTransitioning || !this._element.classList.contains(CLASS_NAME_SHOW$8)) {\n        return;\n      }\n\n      const startEvent = EventHandler.trigger(this._element, EVENT_HIDE$5);\n\n      if (startEvent.defaultPrevented) {\n        return;\n      }\n\n      const dimension = this._getDimension();\n\n      this._element.style[dimension] = `${this._element.getBoundingClientRect()[dimension]}px`;\n      reflow(this._element);\n\n      this._element.classList.add(CLASS_NAME_COLLAPSING);\n\n      this._element.classList.remove(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$8);\n\n      const triggerArrayLength = this._triggerArray.length;\n\n      if (triggerArrayLength > 0) {\n        for (let i = 0; i < triggerArrayLength; i++) {\n          const trigger = this._triggerArray[i];\n          const elem = getElementFromSelector(trigger);\n\n          if (elem && !elem.classList.contains(CLASS_NAME_SHOW$8)) {\n            trigger.classList.add(CLASS_NAME_COLLAPSED);\n            trigger.setAttribute('aria-expanded', false);\n          }\n        }\n      }\n\n      this.setTransitioning(true);\n\n      const complete = () => {\n        this.setTransitioning(false);\n\n        this._element.classList.remove(CLASS_NAME_COLLAPSING);\n\n        this._element.classList.add(CLASS_NAME_COLLAPSE);\n\n        EventHandler.trigger(this._element, EVENT_HIDDEN$5);\n      };\n\n      this._element.style[dimension] = '';\n\n      this._queueCallback(complete, this._element, true);\n    }\n\n    setTransitioning(isTransitioning) {\n      this._isTransitioning = isTransitioning;\n    } // Private\n\n\n    _getConfig(config) {\n      config = { ...Default$8,\n        ...config\n      };\n      config.toggle = Boolean(config.toggle); // Coerce string values\n\n      typeCheckConfig(NAME$9, config, DefaultType$8);\n      return config;\n    }\n\n    _getDimension() {\n      return this._element.classList.contains(WIDTH) ? WIDTH : HEIGHT;\n    }\n\n    _getParent() {\n      let {\n        parent\n      } = this._config;\n      parent = getElement(parent);\n      const selector = `${SELECTOR_DATA_TOGGLE$4}[data-bs-parent=\"${parent}\"]`;\n      SelectorEngine.find(selector, parent).forEach(element => {\n        const selected = getElementFromSelector(element);\n\n        this._addAriaAndCollapsedClass(selected, [element]);\n      });\n      return parent;\n    }\n\n    _addAriaAndCollapsedClass(element, triggerArray) {\n      if (!element || !triggerArray.length) {\n        return;\n      }\n\n      const isOpen = element.classList.contains(CLASS_NAME_SHOW$8);\n      triggerArray.forEach(elem => {\n        if (isOpen) {\n          elem.classList.remove(CLASS_NAME_COLLAPSED);\n        } else {\n          elem.classList.add(CLASS_NAME_COLLAPSED);\n        }\n\n        elem.setAttribute('aria-expanded', isOpen);\n      });\n    } // Static\n\n\n    static collapseInterface(element, config) {\n      let data = Collapse.getInstance(element);\n      const _config = { ...Default$8,\n        ...Manipulator.getDataAttributes(element),\n        ...(typeof config === 'object' && config ? config : {})\n      };\n\n      if (!data && _config.toggle && typeof config === 'string' && /show|hide/.test(config)) {\n        _config.toggle = false;\n      }\n\n      if (!data) {\n        data = new Collapse(element, _config);\n      }\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config]();\n      }\n    }\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        Collapse.collapseInterface(this, config);\n      });\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(document, EVENT_CLICK_DATA_API$4, SELECTOR_DATA_TOGGLE$4, function (event) {\n    // preventDefault only for <a> elements (which change the URL) not inside the collapsible element\n    if (event.target.tagName === 'A' || event.delegateTarget && event.delegateTarget.tagName === 'A') {\n      event.preventDefault();\n    }\n\n    const triggerData = Manipulator.getDataAttributes(this);\n    const selector = getSelectorFromElement(this);\n    const selectorElements = SelectorEngine.find(selector);\n    selectorElements.forEach(element => {\n      const data = Collapse.getInstance(element);\n      let config;\n\n      if (data) {\n        // update parent attribute\n        if (data._parent === null && typeof triggerData.parent === 'string') {\n          data._config.parent = triggerData.parent;\n          data._parent = data._getParent();\n        }\n\n        config = 'toggle';\n      } else {\n        config = triggerData;\n      }\n\n      Collapse.collapseInterface(element, config);\n    });\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Collapse to jQuery only if jQuery is present\n   */\n\n  defineJQueryPlugin(Collapse);\n\n  var top = 'top';\n  var bottom = 'bottom';\n  var right = 'right';\n  var left = 'left';\n  var auto = 'auto';\n  var basePlacements = [top, bottom, right, left];\n  var start = 'start';\n  var end = 'end';\n  var clippingParents = 'clippingParents';\n  var viewport = 'viewport';\n  var popper = 'popper';\n  var reference = 'reference';\n  var variationPlacements = /*#__PURE__*/basePlacements.reduce(function (acc, placement) {\n    return acc.concat([placement + \"-\" + start, placement + \"-\" + end]);\n  }, []);\n  var placements = /*#__PURE__*/[].concat(basePlacements, [auto]).reduce(function (acc, placement) {\n    return acc.concat([placement, placement + \"-\" + start, placement + \"-\" + end]);\n  }, []); // modifiers that need to read the DOM\n\n  var beforeRead = 'beforeRead';\n  var read = 'read';\n  var afterRead = 'afterRead'; // pure-logic modifiers\n\n  var beforeMain = 'beforeMain';\n  var main = 'main';\n  var afterMain = 'afterMain'; // modifier with the purpose to write to the DOM (or write into a framework state)\n\n  var beforeWrite = 'beforeWrite';\n  var write = 'write';\n  var afterWrite = 'afterWrite';\n  var modifierPhases = [beforeRead, read, afterRead, beforeMain, main, afterMain, beforeWrite, write, afterWrite];\n\n  function getNodeName(element) {\n    return element ? (element.nodeName || '').toLowerCase() : null;\n  }\n\n  function getWindow(node) {\n    if (node == null) {\n      return window;\n    }\n\n    if (node.toString() !== '[object Window]') {\n      var ownerDocument = node.ownerDocument;\n      return ownerDocument ? ownerDocument.defaultView || window : window;\n    }\n\n    return node;\n  }\n\n  function isElement(node) {\n    var OwnElement = getWindow(node).Element;\n    return node instanceof OwnElement || node instanceof Element;\n  }\n\n  function isHTMLElement(node) {\n    var OwnElement = getWindow(node).HTMLElement;\n    return node instanceof OwnElement || node instanceof HTMLElement;\n  }\n\n  function isShadowRoot(node) {\n    // IE 11 has no ShadowRoot\n    if (typeof ShadowRoot === 'undefined') {\n      return false;\n    }\n\n    var OwnElement = getWindow(node).ShadowRoot;\n    return node instanceof OwnElement || node instanceof ShadowRoot;\n  }\n\n  // and applies them to the HTMLElements such as popper and arrow\n\n  function applyStyles(_ref) {\n    var state = _ref.state;\n    Object.keys(state.elements).forEach(function (name) {\n      var style = state.styles[name] || {};\n      var attributes = state.attributes[name] || {};\n      var element = state.elements[name]; // arrow is optional + virtual elements\n\n      if (!isHTMLElement(element) || !getNodeName(element)) {\n        return;\n      } // Flow doesn't support to extend this property, but it's the most\n      // effective way to apply styles to an HTMLElement\n      // $FlowFixMe[cannot-write]\n\n\n      Object.assign(element.style, style);\n      Object.keys(attributes).forEach(function (name) {\n        var value = attributes[name];\n\n        if (value === false) {\n          element.removeAttribute(name);\n        } else {\n          element.setAttribute(name, value === true ? '' : value);\n        }\n      });\n    });\n  }\n\n  function effect$2(_ref2) {\n    var state = _ref2.state;\n    var initialStyles = {\n      popper: {\n        position: state.options.strategy,\n        left: '0',\n        top: '0',\n        margin: '0'\n      },\n      arrow: {\n        position: 'absolute'\n      },\n      reference: {}\n    };\n    Object.assign(state.elements.popper.style, initialStyles.popper);\n    state.styles = initialStyles;\n\n    if (state.elements.arrow) {\n      Object.assign(state.elements.arrow.style, initialStyles.arrow);\n    }\n\n    return function () {\n      Object.keys(state.elements).forEach(function (name) {\n        var element = state.elements[name];\n        var attributes = state.attributes[name] || {};\n        var styleProperties = Object.keys(state.styles.hasOwnProperty(name) ? state.styles[name] : initialStyles[name]); // Set all values to an empty string to unset them\n\n        var style = styleProperties.reduce(function (style, property) {\n          style[property] = '';\n          return style;\n        }, {}); // arrow is optional + virtual elements\n\n        if (!isHTMLElement(element) || !getNodeName(element)) {\n          return;\n        }\n\n        Object.assign(element.style, style);\n        Object.keys(attributes).forEach(function (attribute) {\n          element.removeAttribute(attribute);\n        });\n      });\n    };\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  var applyStyles$1 = {\n    name: 'applyStyles',\n    enabled: true,\n    phase: 'write',\n    fn: applyStyles,\n    effect: effect$2,\n    requires: ['computeStyles']\n  };\n\n  function getBasePlacement(placement) {\n    return placement.split('-')[0];\n  }\n\n  function getBoundingClientRect(element) {\n    var rect = element.getBoundingClientRect();\n    return {\n      width: rect.width,\n      height: rect.height,\n      top: rect.top,\n      right: rect.right,\n      bottom: rect.bottom,\n      left: rect.left,\n      x: rect.left,\n      y: rect.top\n    };\n  }\n\n  // means it doesn't take into account transforms.\n\n  function getLayoutRect(element) {\n    var clientRect = getBoundingClientRect(element); // Use the clientRect sizes if it's not been transformed.\n    // Fixes https://github.com/popperjs/popper-core/issues/1223\n\n    var width = element.offsetWidth;\n    var height = element.offsetHeight;\n\n    if (Math.abs(clientRect.width - width) <= 1) {\n      width = clientRect.width;\n    }\n\n    if (Math.abs(clientRect.height - height) <= 1) {\n      height = clientRect.height;\n    }\n\n    return {\n      x: element.offsetLeft,\n      y: element.offsetTop,\n      width: width,\n      height: height\n    };\n  }\n\n  function contains(parent, child) {\n    var rootNode = child.getRootNode && child.getRootNode(); // First, attempt with faster native method\n\n    if (parent.contains(child)) {\n      return true;\n    } // then fallback to custom implementation with Shadow DOM support\n    else if (rootNode && isShadowRoot(rootNode)) {\n        var next = child;\n\n        do {\n          if (next && parent.isSameNode(next)) {\n            return true;\n          } // $FlowFixMe[prop-missing]: need a better way to handle this...\n\n\n          next = next.parentNode || next.host;\n        } while (next);\n      } // Give up, the result is false\n\n\n    return false;\n  }\n\n  function getComputedStyle$1(element) {\n    return getWindow(element).getComputedStyle(element);\n  }\n\n  function isTableElement(element) {\n    return ['table', 'td', 'th'].indexOf(getNodeName(element)) >= 0;\n  }\n\n  function getDocumentElement(element) {\n    // $FlowFixMe[incompatible-return]: assume body is always available\n    return ((isElement(element) ? element.ownerDocument : // $FlowFixMe[prop-missing]\n    element.document) || window.document).documentElement;\n  }\n\n  function getParentNode(element) {\n    if (getNodeName(element) === 'html') {\n      return element;\n    }\n\n    return (// this is a quicker (but less type safe) way to save quite some bytes from the bundle\n      // $FlowFixMe[incompatible-return]\n      // $FlowFixMe[prop-missing]\n      element.assignedSlot || // step into the shadow DOM of the parent of a slotted node\n      element.parentNode || ( // DOM Element detected\n      isShadowRoot(element) ? element.host : null) || // ShadowRoot detected\n      // $FlowFixMe[incompatible-call]: HTMLElement is a Node\n      getDocumentElement(element) // fallback\n\n    );\n  }\n\n  function getTrueOffsetParent(element) {\n    if (!isHTMLElement(element) || // https://github.com/popperjs/popper-core/issues/837\n    getComputedStyle$1(element).position === 'fixed') {\n      return null;\n    }\n\n    return element.offsetParent;\n  } // `.offsetParent` reports `null` for fixed elements, while absolute elements\n  // return the containing block\n\n\n  function getContainingBlock(element) {\n    var isFirefox = navigator.userAgent.toLowerCase().indexOf('firefox') !== -1;\n    var isIE = navigator.userAgent.indexOf('Trident') !== -1;\n\n    if (isIE && isHTMLElement(element)) {\n      // In IE 9, 10 and 11 fixed elements containing block is always established by the viewport\n      var elementCss = getComputedStyle$1(element);\n\n      if (elementCss.position === 'fixed') {\n        return null;\n      }\n    }\n\n    var currentNode = getParentNode(element);\n\n    while (isHTMLElement(currentNode) && ['html', 'body'].indexOf(getNodeName(currentNode)) < 0) {\n      var css = getComputedStyle$1(currentNode); // This is non-exhaustive but covers the most common CSS properties that\n      // create a containing block.\n      // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n\n      if (css.transform !== 'none' || css.perspective !== 'none' || css.contain === 'paint' || ['transform', 'perspective'].indexOf(css.willChange) !== -1 || isFirefox && css.willChange === 'filter' || isFirefox && css.filter && css.filter !== 'none') {\n        return currentNode;\n      } else {\n        currentNode = currentNode.parentNode;\n      }\n    }\n\n    return null;\n  } // Gets the closest ancestor positioned element. Handles some edge cases,\n  // such as table ancestors and cross browser bugs.\n\n\n  function getOffsetParent(element) {\n    var window = getWindow(element);\n    var offsetParent = getTrueOffsetParent(element);\n\n    while (offsetParent && isTableElement(offsetParent) && getComputedStyle$1(offsetParent).position === 'static') {\n      offsetParent = getTrueOffsetParent(offsetParent);\n    }\n\n    if (offsetParent && (getNodeName(offsetParent) === 'html' || getNodeName(offsetParent) === 'body' && getComputedStyle$1(offsetParent).position === 'static')) {\n      return window;\n    }\n\n    return offsetParent || getContainingBlock(element) || window;\n  }\n\n  function getMainAxisFromPlacement(placement) {\n    return ['top', 'bottom'].indexOf(placement) >= 0 ? 'x' : 'y';\n  }\n\n  var max = Math.max;\n  var min = Math.min;\n  var round = Math.round;\n\n  function within(min$1, value, max$1) {\n    return max(min$1, min(value, max$1));\n  }\n\n  function getFreshSideObject() {\n    return {\n      top: 0,\n      right: 0,\n      bottom: 0,\n      left: 0\n    };\n  }\n\n  function mergePaddingObject(paddingObject) {\n    return Object.assign({}, getFreshSideObject(), paddingObject);\n  }\n\n  function expandToHashMap(value, keys) {\n    return keys.reduce(function (hashMap, key) {\n      hashMap[key] = value;\n      return hashMap;\n    }, {});\n  }\n\n  var toPaddingObject = function toPaddingObject(padding, state) {\n    padding = typeof padding === 'function' ? padding(Object.assign({}, state.rects, {\n      placement: state.placement\n    })) : padding;\n    return mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));\n  };\n\n  function arrow(_ref) {\n    var _state$modifiersData$;\n\n    var state = _ref.state,\n        name = _ref.name,\n        options = _ref.options;\n    var arrowElement = state.elements.arrow;\n    var popperOffsets = state.modifiersData.popperOffsets;\n    var basePlacement = getBasePlacement(state.placement);\n    var axis = getMainAxisFromPlacement(basePlacement);\n    var isVertical = [left, right].indexOf(basePlacement) >= 0;\n    var len = isVertical ? 'height' : 'width';\n\n    if (!arrowElement || !popperOffsets) {\n      return;\n    }\n\n    var paddingObject = toPaddingObject(options.padding, state);\n    var arrowRect = getLayoutRect(arrowElement);\n    var minProp = axis === 'y' ? top : left;\n    var maxProp = axis === 'y' ? bottom : right;\n    var endDiff = state.rects.reference[len] + state.rects.reference[axis] - popperOffsets[axis] - state.rects.popper[len];\n    var startDiff = popperOffsets[axis] - state.rects.reference[axis];\n    var arrowOffsetParent = getOffsetParent(arrowElement);\n    var clientSize = arrowOffsetParent ? axis === 'y' ? arrowOffsetParent.clientHeight || 0 : arrowOffsetParent.clientWidth || 0 : 0;\n    var centerToReference = endDiff / 2 - startDiff / 2; // Make sure the arrow doesn't overflow the popper if the center point is\n    // outside of the popper bounds\n\n    var min = paddingObject[minProp];\n    var max = clientSize - arrowRect[len] - paddingObject[maxProp];\n    var center = clientSize / 2 - arrowRect[len] / 2 + centerToReference;\n    var offset = within(min, center, max); // Prevents breaking syntax highlighting...\n\n    var axisProp = axis;\n    state.modifiersData[name] = (_state$modifiersData$ = {}, _state$modifiersData$[axisProp] = offset, _state$modifiersData$.centerOffset = offset - center, _state$modifiersData$);\n  }\n\n  function effect$1(_ref2) {\n    var state = _ref2.state,\n        options = _ref2.options;\n    var _options$element = options.element,\n        arrowElement = _options$element === void 0 ? '[data-popper-arrow]' : _options$element;\n\n    if (arrowElement == null) {\n      return;\n    } // CSS selector\n\n\n    if (typeof arrowElement === 'string') {\n      arrowElement = state.elements.popper.querySelector(arrowElement);\n\n      if (!arrowElement) {\n        return;\n      }\n    }\n\n    if (!contains(state.elements.popper, arrowElement)) {\n\n      return;\n    }\n\n    state.elements.arrow = arrowElement;\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  var arrow$1 = {\n    name: 'arrow',\n    enabled: true,\n    phase: 'main',\n    fn: arrow,\n    effect: effect$1,\n    requires: ['popperOffsets'],\n    requiresIfExists: ['preventOverflow']\n  };\n\n  var unsetSides = {\n    top: 'auto',\n    right: 'auto',\n    bottom: 'auto',\n    left: 'auto'\n  }; // Round the offsets to the nearest suitable subpixel based on the DPR.\n  // Zooming can change the DPR, but it seems to report a value that will\n  // cleanly divide the values into the appropriate subpixels.\n\n  function roundOffsetsByDPR(_ref) {\n    var x = _ref.x,\n        y = _ref.y;\n    var win = window;\n    var dpr = win.devicePixelRatio || 1;\n    return {\n      x: round(round(x * dpr) / dpr) || 0,\n      y: round(round(y * dpr) / dpr) || 0\n    };\n  }\n\n  function mapToStyles(_ref2) {\n    var _Object$assign2;\n\n    var popper = _ref2.popper,\n        popperRect = _ref2.popperRect,\n        placement = _ref2.placement,\n        offsets = _ref2.offsets,\n        position = _ref2.position,\n        gpuAcceleration = _ref2.gpuAcceleration,\n        adaptive = _ref2.adaptive,\n        roundOffsets = _ref2.roundOffsets;\n\n    var _ref3 = roundOffsets === true ? roundOffsetsByDPR(offsets) : typeof roundOffsets === 'function' ? roundOffsets(offsets) : offsets,\n        _ref3$x = _ref3.x,\n        x = _ref3$x === void 0 ? 0 : _ref3$x,\n        _ref3$y = _ref3.y,\n        y = _ref3$y === void 0 ? 0 : _ref3$y;\n\n    var hasX = offsets.hasOwnProperty('x');\n    var hasY = offsets.hasOwnProperty('y');\n    var sideX = left;\n    var sideY = top;\n    var win = window;\n\n    if (adaptive) {\n      var offsetParent = getOffsetParent(popper);\n      var heightProp = 'clientHeight';\n      var widthProp = 'clientWidth';\n\n      if (offsetParent === getWindow(popper)) {\n        offsetParent = getDocumentElement(popper);\n\n        if (getComputedStyle$1(offsetParent).position !== 'static') {\n          heightProp = 'scrollHeight';\n          widthProp = 'scrollWidth';\n        }\n      } // $FlowFixMe[incompatible-cast]: force type refinement, we compare offsetParent with window above, but Flow doesn't detect it\n\n\n      offsetParent = offsetParent;\n\n      if (placement === top) {\n        sideY = bottom; // $FlowFixMe[prop-missing]\n\n        y -= offsetParent[heightProp] - popperRect.height;\n        y *= gpuAcceleration ? 1 : -1;\n      }\n\n      if (placement === left) {\n        sideX = right; // $FlowFixMe[prop-missing]\n\n        x -= offsetParent[widthProp] - popperRect.width;\n        x *= gpuAcceleration ? 1 : -1;\n      }\n    }\n\n    var commonStyles = Object.assign({\n      position: position\n    }, adaptive && unsetSides);\n\n    if (gpuAcceleration) {\n      var _Object$assign;\n\n      return Object.assign({}, commonStyles, (_Object$assign = {}, _Object$assign[sideY] = hasY ? '0' : '', _Object$assign[sideX] = hasX ? '0' : '', _Object$assign.transform = (win.devicePixelRatio || 1) < 2 ? \"translate(\" + x + \"px, \" + y + \"px)\" : \"translate3d(\" + x + \"px, \" + y + \"px, 0)\", _Object$assign));\n    }\n\n    return Object.assign({}, commonStyles, (_Object$assign2 = {}, _Object$assign2[sideY] = hasY ? y + \"px\" : '', _Object$assign2[sideX] = hasX ? x + \"px\" : '', _Object$assign2.transform = '', _Object$assign2));\n  }\n\n  function computeStyles(_ref4) {\n    var state = _ref4.state,\n        options = _ref4.options;\n    var _options$gpuAccelerat = options.gpuAcceleration,\n        gpuAcceleration = _options$gpuAccelerat === void 0 ? true : _options$gpuAccelerat,\n        _options$adaptive = options.adaptive,\n        adaptive = _options$adaptive === void 0 ? true : _options$adaptive,\n        _options$roundOffsets = options.roundOffsets,\n        roundOffsets = _options$roundOffsets === void 0 ? true : _options$roundOffsets;\n\n    var commonStyles = {\n      placement: getBasePlacement(state.placement),\n      popper: state.elements.popper,\n      popperRect: state.rects.popper,\n      gpuAcceleration: gpuAcceleration\n    };\n\n    if (state.modifiersData.popperOffsets != null) {\n      state.styles.popper = Object.assign({}, state.styles.popper, mapToStyles(Object.assign({}, commonStyles, {\n        offsets: state.modifiersData.popperOffsets,\n        position: state.options.strategy,\n        adaptive: adaptive,\n        roundOffsets: roundOffsets\n      })));\n    }\n\n    if (state.modifiersData.arrow != null) {\n      state.styles.arrow = Object.assign({}, state.styles.arrow, mapToStyles(Object.assign({}, commonStyles, {\n        offsets: state.modifiersData.arrow,\n        position: 'absolute',\n        adaptive: false,\n        roundOffsets: roundOffsets\n      })));\n    }\n\n    state.attributes.popper = Object.assign({}, state.attributes.popper, {\n      'data-popper-placement': state.placement\n    });\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  var computeStyles$1 = {\n    name: 'computeStyles',\n    enabled: true,\n    phase: 'beforeWrite',\n    fn: computeStyles,\n    data: {}\n  };\n\n  var passive = {\n    passive: true\n  };\n\n  function effect(_ref) {\n    var state = _ref.state,\n        instance = _ref.instance,\n        options = _ref.options;\n    var _options$scroll = options.scroll,\n        scroll = _options$scroll === void 0 ? true : _options$scroll,\n        _options$resize = options.resize,\n        resize = _options$resize === void 0 ? true : _options$resize;\n    var window = getWindow(state.elements.popper);\n    var scrollParents = [].concat(state.scrollParents.reference, state.scrollParents.popper);\n\n    if (scroll) {\n      scrollParents.forEach(function (scrollParent) {\n        scrollParent.addEventListener('scroll', instance.update, passive);\n      });\n    }\n\n    if (resize) {\n      window.addEventListener('resize', instance.update, passive);\n    }\n\n    return function () {\n      if (scroll) {\n        scrollParents.forEach(function (scrollParent) {\n          scrollParent.removeEventListener('scroll', instance.update, passive);\n        });\n      }\n\n      if (resize) {\n        window.removeEventListener('resize', instance.update, passive);\n      }\n    };\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  var eventListeners = {\n    name: 'eventListeners',\n    enabled: true,\n    phase: 'write',\n    fn: function fn() {},\n    effect: effect,\n    data: {}\n  };\n\n  var hash$1 = {\n    left: 'right',\n    right: 'left',\n    bottom: 'top',\n    top: 'bottom'\n  };\n  function getOppositePlacement(placement) {\n    return placement.replace(/left|right|bottom|top/g, function (matched) {\n      return hash$1[matched];\n    });\n  }\n\n  var hash = {\n    start: 'end',\n    end: 'start'\n  };\n  function getOppositeVariationPlacement(placement) {\n    return placement.replace(/start|end/g, function (matched) {\n      return hash[matched];\n    });\n  }\n\n  function getWindowScroll(node) {\n    var win = getWindow(node);\n    var scrollLeft = win.pageXOffset;\n    var scrollTop = win.pageYOffset;\n    return {\n      scrollLeft: scrollLeft,\n      scrollTop: scrollTop\n    };\n  }\n\n  function getWindowScrollBarX(element) {\n    // If <html> has a CSS width greater than the viewport, then this will be\n    // incorrect for RTL.\n    // Popper 1 is broken in this case and never had a bug report so let's assume\n    // it's not an issue. I don't think anyone ever specifies width on <html>\n    // anyway.\n    // Browsers where the left scrollbar doesn't cause an issue report `0` for\n    // this (e.g. Edge 2019, IE11, Safari)\n    return getBoundingClientRect(getDocumentElement(element)).left + getWindowScroll(element).scrollLeft;\n  }\n\n  function getViewportRect(element) {\n    var win = getWindow(element);\n    var html = getDocumentElement(element);\n    var visualViewport = win.visualViewport;\n    var width = html.clientWidth;\n    var height = html.clientHeight;\n    var x = 0;\n    var y = 0; // NB: This isn't supported on iOS <= 12. If the keyboard is open, the popper\n    // can be obscured underneath it.\n    // Also, `html.clientHeight` adds the bottom bar height in Safari iOS, even\n    // if it isn't open, so if this isn't available, the popper will be detected\n    // to overflow the bottom of the screen too early.\n\n    if (visualViewport) {\n      width = visualViewport.width;\n      height = visualViewport.height; // Uses Layout Viewport (like Chrome; Safari does not currently)\n      // In Chrome, it returns a value very close to 0 (+/-) but contains rounding\n      // errors due to floating point numbers, so we need to check precision.\n      // Safari returns a number <= 0, usually < -1 when pinch-zoomed\n      // Feature detection fails in mobile emulation mode in Chrome.\n      // Math.abs(win.innerWidth / visualViewport.scale - visualViewport.width) <\n      // 0.001\n      // Fallback here: \"Not Safari\" userAgent\n\n      if (!/^((?!chrome|android).)*safari/i.test(navigator.userAgent)) {\n        x = visualViewport.offsetLeft;\n        y = visualViewport.offsetTop;\n      }\n    }\n\n    return {\n      width: width,\n      height: height,\n      x: x + getWindowScrollBarX(element),\n      y: y\n    };\n  }\n\n  // of the `<html>` and `<body>` rect bounds if horizontally scrollable\n\n  function getDocumentRect(element) {\n    var _element$ownerDocumen;\n\n    var html = getDocumentElement(element);\n    var winScroll = getWindowScroll(element);\n    var body = (_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body;\n    var width = max(html.scrollWidth, html.clientWidth, body ? body.scrollWidth : 0, body ? body.clientWidth : 0);\n    var height = max(html.scrollHeight, html.clientHeight, body ? body.scrollHeight : 0, body ? body.clientHeight : 0);\n    var x = -winScroll.scrollLeft + getWindowScrollBarX(element);\n    var y = -winScroll.scrollTop;\n\n    if (getComputedStyle$1(body || html).direction === 'rtl') {\n      x += max(html.clientWidth, body ? body.clientWidth : 0) - width;\n    }\n\n    return {\n      width: width,\n      height: height,\n      x: x,\n      y: y\n    };\n  }\n\n  function isScrollParent(element) {\n    // Firefox wants us to check `-x` and `-y` variations as well\n    var _getComputedStyle = getComputedStyle$1(element),\n        overflow = _getComputedStyle.overflow,\n        overflowX = _getComputedStyle.overflowX,\n        overflowY = _getComputedStyle.overflowY;\n\n    return /auto|scroll|overlay|hidden/.test(overflow + overflowY + overflowX);\n  }\n\n  function getScrollParent(node) {\n    if (['html', 'body', '#document'].indexOf(getNodeName(node)) >= 0) {\n      // $FlowFixMe[incompatible-return]: assume body is always available\n      return node.ownerDocument.body;\n    }\n\n    if (isHTMLElement(node) && isScrollParent(node)) {\n      return node;\n    }\n\n    return getScrollParent(getParentNode(node));\n  }\n\n  /*\n  given a DOM element, return the list of all scroll parents, up the list of ancesors\n  until we get to the top window object. This list is what we attach scroll listeners\n  to, because if any of these parent elements scroll, we'll need to re-calculate the\n  reference element's position.\n  */\n\n  function listScrollParents(element, list) {\n    var _element$ownerDocumen;\n\n    if (list === void 0) {\n      list = [];\n    }\n\n    var scrollParent = getScrollParent(element);\n    var isBody = scrollParent === ((_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body);\n    var win = getWindow(scrollParent);\n    var target = isBody ? [win].concat(win.visualViewport || [], isScrollParent(scrollParent) ? scrollParent : []) : scrollParent;\n    var updatedList = list.concat(target);\n    return isBody ? updatedList : // $FlowFixMe[incompatible-call]: isBody tells us target will be an HTMLElement here\n    updatedList.concat(listScrollParents(getParentNode(target)));\n  }\n\n  function rectToClientRect(rect) {\n    return Object.assign({}, rect, {\n      left: rect.x,\n      top: rect.y,\n      right: rect.x + rect.width,\n      bottom: rect.y + rect.height\n    });\n  }\n\n  function getInnerBoundingClientRect(element) {\n    var rect = getBoundingClientRect(element);\n    rect.top = rect.top + element.clientTop;\n    rect.left = rect.left + element.clientLeft;\n    rect.bottom = rect.top + element.clientHeight;\n    rect.right = rect.left + element.clientWidth;\n    rect.width = element.clientWidth;\n    rect.height = element.clientHeight;\n    rect.x = rect.left;\n    rect.y = rect.top;\n    return rect;\n  }\n\n  function getClientRectFromMixedType(element, clippingParent) {\n    return clippingParent === viewport ? rectToClientRect(getViewportRect(element)) : isHTMLElement(clippingParent) ? getInnerBoundingClientRect(clippingParent) : rectToClientRect(getDocumentRect(getDocumentElement(element)));\n  } // A \"clipping parent\" is an overflowable container with the characteristic of\n  // clipping (or hiding) overflowing elements with a position different from\n  // `initial`\n\n\n  function getClippingParents(element) {\n    var clippingParents = listScrollParents(getParentNode(element));\n    var canEscapeClipping = ['absolute', 'fixed'].indexOf(getComputedStyle$1(element).position) >= 0;\n    var clipperElement = canEscapeClipping && isHTMLElement(element) ? getOffsetParent(element) : element;\n\n    if (!isElement(clipperElement)) {\n      return [];\n    } // $FlowFixMe[incompatible-return]: https://github.com/facebook/flow/issues/1414\n\n\n    return clippingParents.filter(function (clippingParent) {\n      return isElement(clippingParent) && contains(clippingParent, clipperElement) && getNodeName(clippingParent) !== 'body';\n    });\n  } // Gets the maximum area that the element is visible in due to any number of\n  // clipping parents\n\n\n  function getClippingRect(element, boundary, rootBoundary) {\n    var mainClippingParents = boundary === 'clippingParents' ? getClippingParents(element) : [].concat(boundary);\n    var clippingParents = [].concat(mainClippingParents, [rootBoundary]);\n    var firstClippingParent = clippingParents[0];\n    var clippingRect = clippingParents.reduce(function (accRect, clippingParent) {\n      var rect = getClientRectFromMixedType(element, clippingParent);\n      accRect.top = max(rect.top, accRect.top);\n      accRect.right = min(rect.right, accRect.right);\n      accRect.bottom = min(rect.bottom, accRect.bottom);\n      accRect.left = max(rect.left, accRect.left);\n      return accRect;\n    }, getClientRectFromMixedType(element, firstClippingParent));\n    clippingRect.width = clippingRect.right - clippingRect.left;\n    clippingRect.height = clippingRect.bottom - clippingRect.top;\n    clippingRect.x = clippingRect.left;\n    clippingRect.y = clippingRect.top;\n    return clippingRect;\n  }\n\n  function getVariation(placement) {\n    return placement.split('-')[1];\n  }\n\n  function computeOffsets(_ref) {\n    var reference = _ref.reference,\n        element = _ref.element,\n        placement = _ref.placement;\n    var basePlacement = placement ? getBasePlacement(placement) : null;\n    var variation = placement ? getVariation(placement) : null;\n    var commonX = reference.x + reference.width / 2 - element.width / 2;\n    var commonY = reference.y + reference.height / 2 - element.height / 2;\n    var offsets;\n\n    switch (basePlacement) {\n      case top:\n        offsets = {\n          x: commonX,\n          y: reference.y - element.height\n        };\n        break;\n\n      case bottom:\n        offsets = {\n          x: commonX,\n          y: reference.y + reference.height\n        };\n        break;\n\n      case right:\n        offsets = {\n          x: reference.x + reference.width,\n          y: commonY\n        };\n        break;\n\n      case left:\n        offsets = {\n          x: reference.x - element.width,\n          y: commonY\n        };\n        break;\n\n      default:\n        offsets = {\n          x: reference.x,\n          y: reference.y\n        };\n    }\n\n    var mainAxis = basePlacement ? getMainAxisFromPlacement(basePlacement) : null;\n\n    if (mainAxis != null) {\n      var len = mainAxis === 'y' ? 'height' : 'width';\n\n      switch (variation) {\n        case start:\n          offsets[mainAxis] = offsets[mainAxis] - (reference[len] / 2 - element[len] / 2);\n          break;\n\n        case end:\n          offsets[mainAxis] = offsets[mainAxis] + (reference[len] / 2 - element[len] / 2);\n          break;\n      }\n    }\n\n    return offsets;\n  }\n\n  function detectOverflow(state, options) {\n    if (options === void 0) {\n      options = {};\n    }\n\n    var _options = options,\n        _options$placement = _options.placement,\n        placement = _options$placement === void 0 ? state.placement : _options$placement,\n        _options$boundary = _options.boundary,\n        boundary = _options$boundary === void 0 ? clippingParents : _options$boundary,\n        _options$rootBoundary = _options.rootBoundary,\n        rootBoundary = _options$rootBoundary === void 0 ? viewport : _options$rootBoundary,\n        _options$elementConte = _options.elementContext,\n        elementContext = _options$elementConte === void 0 ? popper : _options$elementConte,\n        _options$altBoundary = _options.altBoundary,\n        altBoundary = _options$altBoundary === void 0 ? false : _options$altBoundary,\n        _options$padding = _options.padding,\n        padding = _options$padding === void 0 ? 0 : _options$padding;\n    var paddingObject = mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));\n    var altContext = elementContext === popper ? reference : popper;\n    var referenceElement = state.elements.reference;\n    var popperRect = state.rects.popper;\n    var element = state.elements[altBoundary ? altContext : elementContext];\n    var clippingClientRect = getClippingRect(isElement(element) ? element : element.contextElement || getDocumentElement(state.elements.popper), boundary, rootBoundary);\n    var referenceClientRect = getBoundingClientRect(referenceElement);\n    var popperOffsets = computeOffsets({\n      reference: referenceClientRect,\n      element: popperRect,\n      strategy: 'absolute',\n      placement: placement\n    });\n    var popperClientRect = rectToClientRect(Object.assign({}, popperRect, popperOffsets));\n    var elementClientRect = elementContext === popper ? popperClientRect : referenceClientRect; // positive = overflowing the clipping rect\n    // 0 or negative = within the clipping rect\n\n    var overflowOffsets = {\n      top: clippingClientRect.top - elementClientRect.top + paddingObject.top,\n      bottom: elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom,\n      left: clippingClientRect.left - elementClientRect.left + paddingObject.left,\n      right: elementClientRect.right - clippingClientRect.right + paddingObject.right\n    };\n    var offsetData = state.modifiersData.offset; // Offsets can be applied only to the popper element\n\n    if (elementContext === popper && offsetData) {\n      var offset = offsetData[placement];\n      Object.keys(overflowOffsets).forEach(function (key) {\n        var multiply = [right, bottom].indexOf(key) >= 0 ? 1 : -1;\n        var axis = [top, bottom].indexOf(key) >= 0 ? 'y' : 'x';\n        overflowOffsets[key] += offset[axis] * multiply;\n      });\n    }\n\n    return overflowOffsets;\n  }\n\n  function computeAutoPlacement(state, options) {\n    if (options === void 0) {\n      options = {};\n    }\n\n    var _options = options,\n        placement = _options.placement,\n        boundary = _options.boundary,\n        rootBoundary = _options.rootBoundary,\n        padding = _options.padding,\n        flipVariations = _options.flipVariations,\n        _options$allowedAutoP = _options.allowedAutoPlacements,\n        allowedAutoPlacements = _options$allowedAutoP === void 0 ? placements : _options$allowedAutoP;\n    var variation = getVariation(placement);\n    var placements$1 = variation ? flipVariations ? variationPlacements : variationPlacements.filter(function (placement) {\n      return getVariation(placement) === variation;\n    }) : basePlacements;\n    var allowedPlacements = placements$1.filter(function (placement) {\n      return allowedAutoPlacements.indexOf(placement) >= 0;\n    });\n\n    if (allowedPlacements.length === 0) {\n      allowedPlacements = placements$1;\n    } // $FlowFixMe[incompatible-type]: Flow seems to have problems with two array unions...\n\n\n    var overflows = allowedPlacements.reduce(function (acc, placement) {\n      acc[placement] = detectOverflow(state, {\n        placement: placement,\n        boundary: boundary,\n        rootBoundary: rootBoundary,\n        padding: padding\n      })[getBasePlacement(placement)];\n      return acc;\n    }, {});\n    return Object.keys(overflows).sort(function (a, b) {\n      return overflows[a] - overflows[b];\n    });\n  }\n\n  function getExpandedFallbackPlacements(placement) {\n    if (getBasePlacement(placement) === auto) {\n      return [];\n    }\n\n    var oppositePlacement = getOppositePlacement(placement);\n    return [getOppositeVariationPlacement(placement), oppositePlacement, getOppositeVariationPlacement(oppositePlacement)];\n  }\n\n  function flip(_ref) {\n    var state = _ref.state,\n        options = _ref.options,\n        name = _ref.name;\n\n    if (state.modifiersData[name]._skip) {\n      return;\n    }\n\n    var _options$mainAxis = options.mainAxis,\n        checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\n        _options$altAxis = options.altAxis,\n        checkAltAxis = _options$altAxis === void 0 ? true : _options$altAxis,\n        specifiedFallbackPlacements = options.fallbackPlacements,\n        padding = options.padding,\n        boundary = options.boundary,\n        rootBoundary = options.rootBoundary,\n        altBoundary = options.altBoundary,\n        _options$flipVariatio = options.flipVariations,\n        flipVariations = _options$flipVariatio === void 0 ? true : _options$flipVariatio,\n        allowedAutoPlacements = options.allowedAutoPlacements;\n    var preferredPlacement = state.options.placement;\n    var basePlacement = getBasePlacement(preferredPlacement);\n    var isBasePlacement = basePlacement === preferredPlacement;\n    var fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipVariations ? [getOppositePlacement(preferredPlacement)] : getExpandedFallbackPlacements(preferredPlacement));\n    var placements = [preferredPlacement].concat(fallbackPlacements).reduce(function (acc, placement) {\n      return acc.concat(getBasePlacement(placement) === auto ? computeAutoPlacement(state, {\n        placement: placement,\n        boundary: boundary,\n        rootBoundary: rootBoundary,\n        padding: padding,\n        flipVariations: flipVariations,\n        allowedAutoPlacements: allowedAutoPlacements\n      }) : placement);\n    }, []);\n    var referenceRect = state.rects.reference;\n    var popperRect = state.rects.popper;\n    var checksMap = new Map();\n    var makeFallbackChecks = true;\n    var firstFittingPlacement = placements[0];\n\n    for (var i = 0; i < placements.length; i++) {\n      var placement = placements[i];\n\n      var _basePlacement = getBasePlacement(placement);\n\n      var isStartVariation = getVariation(placement) === start;\n      var isVertical = [top, bottom].indexOf(_basePlacement) >= 0;\n      var len = isVertical ? 'width' : 'height';\n      var overflow = detectOverflow(state, {\n        placement: placement,\n        boundary: boundary,\n        rootBoundary: rootBoundary,\n        altBoundary: altBoundary,\n        padding: padding\n      });\n      var mainVariationSide = isVertical ? isStartVariation ? right : left : isStartVariation ? bottom : top;\n\n      if (referenceRect[len] > popperRect[len]) {\n        mainVariationSide = getOppositePlacement(mainVariationSide);\n      }\n\n      var altVariationSide = getOppositePlacement(mainVariationSide);\n      var checks = [];\n\n      if (checkMainAxis) {\n        checks.push(overflow[_basePlacement] <= 0);\n      }\n\n      if (checkAltAxis) {\n        checks.push(overflow[mainVariationSide] <= 0, overflow[altVariationSide] <= 0);\n      }\n\n      if (checks.every(function (check) {\n        return check;\n      })) {\n        firstFittingPlacement = placement;\n        makeFallbackChecks = false;\n        break;\n      }\n\n      checksMap.set(placement, checks);\n    }\n\n    if (makeFallbackChecks) {\n      // `2` may be desired in some cases – research later\n      var numberOfChecks = flipVariations ? 3 : 1;\n\n      var _loop = function _loop(_i) {\n        var fittingPlacement = placements.find(function (placement) {\n          var checks = checksMap.get(placement);\n\n          if (checks) {\n            return checks.slice(0, _i).every(function (check) {\n              return check;\n            });\n          }\n        });\n\n        if (fittingPlacement) {\n          firstFittingPlacement = fittingPlacement;\n          return \"break\";\n        }\n      };\n\n      for (var _i = numberOfChecks; _i > 0; _i--) {\n        var _ret = _loop(_i);\n\n        if (_ret === \"break\") break;\n      }\n    }\n\n    if (state.placement !== firstFittingPlacement) {\n      state.modifiersData[name]._skip = true;\n      state.placement = firstFittingPlacement;\n      state.reset = true;\n    }\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  var flip$1 = {\n    name: 'flip',\n    enabled: true,\n    phase: 'main',\n    fn: flip,\n    requiresIfExists: ['offset'],\n    data: {\n      _skip: false\n    }\n  };\n\n  function getSideOffsets(overflow, rect, preventedOffsets) {\n    if (preventedOffsets === void 0) {\n      preventedOffsets = {\n        x: 0,\n        y: 0\n      };\n    }\n\n    return {\n      top: overflow.top - rect.height - preventedOffsets.y,\n      right: overflow.right - rect.width + preventedOffsets.x,\n      bottom: overflow.bottom - rect.height + preventedOffsets.y,\n      left: overflow.left - rect.width - preventedOffsets.x\n    };\n  }\n\n  function isAnySideFullyClipped(overflow) {\n    return [top, right, bottom, left].some(function (side) {\n      return overflow[side] >= 0;\n    });\n  }\n\n  function hide(_ref) {\n    var state = _ref.state,\n        name = _ref.name;\n    var referenceRect = state.rects.reference;\n    var popperRect = state.rects.popper;\n    var preventedOffsets = state.modifiersData.preventOverflow;\n    var referenceOverflow = detectOverflow(state, {\n      elementContext: 'reference'\n    });\n    var popperAltOverflow = detectOverflow(state, {\n      altBoundary: true\n    });\n    var referenceClippingOffsets = getSideOffsets(referenceOverflow, referenceRect);\n    var popperEscapeOffsets = getSideOffsets(popperAltOverflow, popperRect, preventedOffsets);\n    var isReferenceHidden = isAnySideFullyClipped(referenceClippingOffsets);\n    var hasPopperEscaped = isAnySideFullyClipped(popperEscapeOffsets);\n    state.modifiersData[name] = {\n      referenceClippingOffsets: referenceClippingOffsets,\n      popperEscapeOffsets: popperEscapeOffsets,\n      isReferenceHidden: isReferenceHidden,\n      hasPopperEscaped: hasPopperEscaped\n    };\n    state.attributes.popper = Object.assign({}, state.attributes.popper, {\n      'data-popper-reference-hidden': isReferenceHidden,\n      'data-popper-escaped': hasPopperEscaped\n    });\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  var hide$1 = {\n    name: 'hide',\n    enabled: true,\n    phase: 'main',\n    requiresIfExists: ['preventOverflow'],\n    fn: hide\n  };\n\n  function distanceAndSkiddingToXY(placement, rects, offset) {\n    var basePlacement = getBasePlacement(placement);\n    var invertDistance = [left, top].indexOf(basePlacement) >= 0 ? -1 : 1;\n\n    var _ref = typeof offset === 'function' ? offset(Object.assign({}, rects, {\n      placement: placement\n    })) : offset,\n        skidding = _ref[0],\n        distance = _ref[1];\n\n    skidding = skidding || 0;\n    distance = (distance || 0) * invertDistance;\n    return [left, right].indexOf(basePlacement) >= 0 ? {\n      x: distance,\n      y: skidding\n    } : {\n      x: skidding,\n      y: distance\n    };\n  }\n\n  function offset(_ref2) {\n    var state = _ref2.state,\n        options = _ref2.options,\n        name = _ref2.name;\n    var _options$offset = options.offset,\n        offset = _options$offset === void 0 ? [0, 0] : _options$offset;\n    var data = placements.reduce(function (acc, placement) {\n      acc[placement] = distanceAndSkiddingToXY(placement, state.rects, offset);\n      return acc;\n    }, {});\n    var _data$state$placement = data[state.placement],\n        x = _data$state$placement.x,\n        y = _data$state$placement.y;\n\n    if (state.modifiersData.popperOffsets != null) {\n      state.modifiersData.popperOffsets.x += x;\n      state.modifiersData.popperOffsets.y += y;\n    }\n\n    state.modifiersData[name] = data;\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  var offset$1 = {\n    name: 'offset',\n    enabled: true,\n    phase: 'main',\n    requires: ['popperOffsets'],\n    fn: offset\n  };\n\n  function popperOffsets(_ref) {\n    var state = _ref.state,\n        name = _ref.name;\n    // Offsets are the actual position the popper needs to have to be\n    // properly positioned near its reference element\n    // This is the most basic placement, and will be adjusted by\n    // the modifiers in the next step\n    state.modifiersData[name] = computeOffsets({\n      reference: state.rects.reference,\n      element: state.rects.popper,\n      strategy: 'absolute',\n      placement: state.placement\n    });\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  var popperOffsets$1 = {\n    name: 'popperOffsets',\n    enabled: true,\n    phase: 'read',\n    fn: popperOffsets,\n    data: {}\n  };\n\n  function getAltAxis(axis) {\n    return axis === 'x' ? 'y' : 'x';\n  }\n\n  function preventOverflow(_ref) {\n    var state = _ref.state,\n        options = _ref.options,\n        name = _ref.name;\n    var _options$mainAxis = options.mainAxis,\n        checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\n        _options$altAxis = options.altAxis,\n        checkAltAxis = _options$altAxis === void 0 ? false : _options$altAxis,\n        boundary = options.boundary,\n        rootBoundary = options.rootBoundary,\n        altBoundary = options.altBoundary,\n        padding = options.padding,\n        _options$tether = options.tether,\n        tether = _options$tether === void 0 ? true : _options$tether,\n        _options$tetherOffset = options.tetherOffset,\n        tetherOffset = _options$tetherOffset === void 0 ? 0 : _options$tetherOffset;\n    var overflow = detectOverflow(state, {\n      boundary: boundary,\n      rootBoundary: rootBoundary,\n      padding: padding,\n      altBoundary: altBoundary\n    });\n    var basePlacement = getBasePlacement(state.placement);\n    var variation = getVariation(state.placement);\n    var isBasePlacement = !variation;\n    var mainAxis = getMainAxisFromPlacement(basePlacement);\n    var altAxis = getAltAxis(mainAxis);\n    var popperOffsets = state.modifiersData.popperOffsets;\n    var referenceRect = state.rects.reference;\n    var popperRect = state.rects.popper;\n    var tetherOffsetValue = typeof tetherOffset === 'function' ? tetherOffset(Object.assign({}, state.rects, {\n      placement: state.placement\n    })) : tetherOffset;\n    var data = {\n      x: 0,\n      y: 0\n    };\n\n    if (!popperOffsets) {\n      return;\n    }\n\n    if (checkMainAxis || checkAltAxis) {\n      var mainSide = mainAxis === 'y' ? top : left;\n      var altSide = mainAxis === 'y' ? bottom : right;\n      var len = mainAxis === 'y' ? 'height' : 'width';\n      var offset = popperOffsets[mainAxis];\n      var min$1 = popperOffsets[mainAxis] + overflow[mainSide];\n      var max$1 = popperOffsets[mainAxis] - overflow[altSide];\n      var additive = tether ? -popperRect[len] / 2 : 0;\n      var minLen = variation === start ? referenceRect[len] : popperRect[len];\n      var maxLen = variation === start ? -popperRect[len] : -referenceRect[len]; // We need to include the arrow in the calculation so the arrow doesn't go\n      // outside the reference bounds\n\n      var arrowElement = state.elements.arrow;\n      var arrowRect = tether && arrowElement ? getLayoutRect(arrowElement) : {\n        width: 0,\n        height: 0\n      };\n      var arrowPaddingObject = state.modifiersData['arrow#persistent'] ? state.modifiersData['arrow#persistent'].padding : getFreshSideObject();\n      var arrowPaddingMin = arrowPaddingObject[mainSide];\n      var arrowPaddingMax = arrowPaddingObject[altSide]; // If the reference length is smaller than the arrow length, we don't want\n      // to include its full size in the calculation. If the reference is small\n      // and near the edge of a boundary, the popper can overflow even if the\n      // reference is not overflowing as well (e.g. virtual elements with no\n      // width or height)\n\n      var arrowLen = within(0, referenceRect[len], arrowRect[len]);\n      var minOffset = isBasePlacement ? referenceRect[len] / 2 - additive - arrowLen - arrowPaddingMin - tetherOffsetValue : minLen - arrowLen - arrowPaddingMin - tetherOffsetValue;\n      var maxOffset = isBasePlacement ? -referenceRect[len] / 2 + additive + arrowLen + arrowPaddingMax + tetherOffsetValue : maxLen + arrowLen + arrowPaddingMax + tetherOffsetValue;\n      var arrowOffsetParent = state.elements.arrow && getOffsetParent(state.elements.arrow);\n      var clientOffset = arrowOffsetParent ? mainAxis === 'y' ? arrowOffsetParent.clientTop || 0 : arrowOffsetParent.clientLeft || 0 : 0;\n      var offsetModifierValue = state.modifiersData.offset ? state.modifiersData.offset[state.placement][mainAxis] : 0;\n      var tetherMin = popperOffsets[mainAxis] + minOffset - offsetModifierValue - clientOffset;\n      var tetherMax = popperOffsets[mainAxis] + maxOffset - offsetModifierValue;\n\n      if (checkMainAxis) {\n        var preventedOffset = within(tether ? min(min$1, tetherMin) : min$1, offset, tether ? max(max$1, tetherMax) : max$1);\n        popperOffsets[mainAxis] = preventedOffset;\n        data[mainAxis] = preventedOffset - offset;\n      }\n\n      if (checkAltAxis) {\n        var _mainSide = mainAxis === 'x' ? top : left;\n\n        var _altSide = mainAxis === 'x' ? bottom : right;\n\n        var _offset = popperOffsets[altAxis];\n\n        var _min = _offset + overflow[_mainSide];\n\n        var _max = _offset - overflow[_altSide];\n\n        var _preventedOffset = within(tether ? min(_min, tetherMin) : _min, _offset, tether ? max(_max, tetherMax) : _max);\n\n        popperOffsets[altAxis] = _preventedOffset;\n        data[altAxis] = _preventedOffset - _offset;\n      }\n    }\n\n    state.modifiersData[name] = data;\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  var preventOverflow$1 = {\n    name: 'preventOverflow',\n    enabled: true,\n    phase: 'main',\n    fn: preventOverflow,\n    requiresIfExists: ['offset']\n  };\n\n  function getHTMLElementScroll(element) {\n    return {\n      scrollLeft: element.scrollLeft,\n      scrollTop: element.scrollTop\n    };\n  }\n\n  function getNodeScroll(node) {\n    if (node === getWindow(node) || !isHTMLElement(node)) {\n      return getWindowScroll(node);\n    } else {\n      return getHTMLElementScroll(node);\n    }\n  }\n\n  // Composite means it takes into account transforms as well as layout.\n\n  function getCompositeRect(elementOrVirtualElement, offsetParent, isFixed) {\n    if (isFixed === void 0) {\n      isFixed = false;\n    }\n\n    var documentElement = getDocumentElement(offsetParent);\n    var rect = getBoundingClientRect(elementOrVirtualElement);\n    var isOffsetParentAnElement = isHTMLElement(offsetParent);\n    var scroll = {\n      scrollLeft: 0,\n      scrollTop: 0\n    };\n    var offsets = {\n      x: 0,\n      y: 0\n    };\n\n    if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {\n      if (getNodeName(offsetParent) !== 'body' || // https://github.com/popperjs/popper-core/issues/1078\n      isScrollParent(documentElement)) {\n        scroll = getNodeScroll(offsetParent);\n      }\n\n      if (isHTMLElement(offsetParent)) {\n        offsets = getBoundingClientRect(offsetParent);\n        offsets.x += offsetParent.clientLeft;\n        offsets.y += offsetParent.clientTop;\n      } else if (documentElement) {\n        offsets.x = getWindowScrollBarX(documentElement);\n      }\n    }\n\n    return {\n      x: rect.left + scroll.scrollLeft - offsets.x,\n      y: rect.top + scroll.scrollTop - offsets.y,\n      width: rect.width,\n      height: rect.height\n    };\n  }\n\n  function order(modifiers) {\n    var map = new Map();\n    var visited = new Set();\n    var result = [];\n    modifiers.forEach(function (modifier) {\n      map.set(modifier.name, modifier);\n    }); // On visiting object, check for its dependencies and visit them recursively\n\n    function sort(modifier) {\n      visited.add(modifier.name);\n      var requires = [].concat(modifier.requires || [], modifier.requiresIfExists || []);\n      requires.forEach(function (dep) {\n        if (!visited.has(dep)) {\n          var depModifier = map.get(dep);\n\n          if (depModifier) {\n            sort(depModifier);\n          }\n        }\n      });\n      result.push(modifier);\n    }\n\n    modifiers.forEach(function (modifier) {\n      if (!visited.has(modifier.name)) {\n        // check for visited object\n        sort(modifier);\n      }\n    });\n    return result;\n  }\n\n  function orderModifiers(modifiers) {\n    // order based on dependencies\n    var orderedModifiers = order(modifiers); // order based on phase\n\n    return modifierPhases.reduce(function (acc, phase) {\n      return acc.concat(orderedModifiers.filter(function (modifier) {\n        return modifier.phase === phase;\n      }));\n    }, []);\n  }\n\n  function debounce(fn) {\n    var pending;\n    return function () {\n      if (!pending) {\n        pending = new Promise(function (resolve) {\n          Promise.resolve().then(function () {\n            pending = undefined;\n            resolve(fn());\n          });\n        });\n      }\n\n      return pending;\n    };\n  }\n\n  function mergeByName(modifiers) {\n    var merged = modifiers.reduce(function (merged, current) {\n      var existing = merged[current.name];\n      merged[current.name] = existing ? Object.assign({}, existing, current, {\n        options: Object.assign({}, existing.options, current.options),\n        data: Object.assign({}, existing.data, current.data)\n      }) : current;\n      return merged;\n    }, {}); // IE11 does not support Object.values\n\n    return Object.keys(merged).map(function (key) {\n      return merged[key];\n    });\n  }\n\n  var DEFAULT_OPTIONS = {\n    placement: 'bottom',\n    modifiers: [],\n    strategy: 'absolute'\n  };\n\n  function areValidElements() {\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    return !args.some(function (element) {\n      return !(element && typeof element.getBoundingClientRect === 'function');\n    });\n  }\n\n  function popperGenerator(generatorOptions) {\n    if (generatorOptions === void 0) {\n      generatorOptions = {};\n    }\n\n    var _generatorOptions = generatorOptions,\n        _generatorOptions$def = _generatorOptions.defaultModifiers,\n        defaultModifiers = _generatorOptions$def === void 0 ? [] : _generatorOptions$def,\n        _generatorOptions$def2 = _generatorOptions.defaultOptions,\n        defaultOptions = _generatorOptions$def2 === void 0 ? DEFAULT_OPTIONS : _generatorOptions$def2;\n    return function createPopper(reference, popper, options) {\n      if (options === void 0) {\n        options = defaultOptions;\n      }\n\n      var state = {\n        placement: 'bottom',\n        orderedModifiers: [],\n        options: Object.assign({}, DEFAULT_OPTIONS, defaultOptions),\n        modifiersData: {},\n        elements: {\n          reference: reference,\n          popper: popper\n        },\n        attributes: {},\n        styles: {}\n      };\n      var effectCleanupFns = [];\n      var isDestroyed = false;\n      var instance = {\n        state: state,\n        setOptions: function setOptions(options) {\n          cleanupModifierEffects();\n          state.options = Object.assign({}, defaultOptions, state.options, options);\n          state.scrollParents = {\n            reference: isElement(reference) ? listScrollParents(reference) : reference.contextElement ? listScrollParents(reference.contextElement) : [],\n            popper: listScrollParents(popper)\n          }; // Orders the modifiers based on their dependencies and `phase`\n          // properties\n\n          var orderedModifiers = orderModifiers(mergeByName([].concat(defaultModifiers, state.options.modifiers))); // Strip out disabled modifiers\n\n          state.orderedModifiers = orderedModifiers.filter(function (m) {\n            return m.enabled;\n          }); // Validate the provided modifiers so that the consumer will get warned\n\n          runModifierEffects();\n          return instance.update();\n        },\n        // Sync update – it will always be executed, even if not necessary. This\n        // is useful for low frequency updates where sync behavior simplifies the\n        // logic.\n        // For high frequency updates (e.g. `resize` and `scroll` events), always\n        // prefer the async Popper#update method\n        forceUpdate: function forceUpdate() {\n          if (isDestroyed) {\n            return;\n          }\n\n          var _state$elements = state.elements,\n              reference = _state$elements.reference,\n              popper = _state$elements.popper; // Don't proceed if `reference` or `popper` are not valid elements\n          // anymore\n\n          if (!areValidElements(reference, popper)) {\n\n            return;\n          } // Store the reference and popper rects to be read by modifiers\n\n\n          state.rects = {\n            reference: getCompositeRect(reference, getOffsetParent(popper), state.options.strategy === 'fixed'),\n            popper: getLayoutRect(popper)\n          }; // Modifiers have the ability to reset the current update cycle. The\n          // most common use case for this is the `flip` modifier changing the\n          // placement, which then needs to re-run all the modifiers, because the\n          // logic was previously ran for the previous placement and is therefore\n          // stale/incorrect\n\n          state.reset = false;\n          state.placement = state.options.placement; // On each update cycle, the `modifiersData` property for each modifier\n          // is filled with the initial data specified by the modifier. This means\n          // it doesn't persist and is fresh on each update.\n          // To ensure persistent data, use `${name}#persistent`\n\n          state.orderedModifiers.forEach(function (modifier) {\n            return state.modifiersData[modifier.name] = Object.assign({}, modifier.data);\n          });\n\n          for (var index = 0; index < state.orderedModifiers.length; index++) {\n\n            if (state.reset === true) {\n              state.reset = false;\n              index = -1;\n              continue;\n            }\n\n            var _state$orderedModifie = state.orderedModifiers[index],\n                fn = _state$orderedModifie.fn,\n                _state$orderedModifie2 = _state$orderedModifie.options,\n                _options = _state$orderedModifie2 === void 0 ? {} : _state$orderedModifie2,\n                name = _state$orderedModifie.name;\n\n            if (typeof fn === 'function') {\n              state = fn({\n                state: state,\n                options: _options,\n                name: name,\n                instance: instance\n              }) || state;\n            }\n          }\n        },\n        // Async and optimistically optimized update – it will not be executed if\n        // not necessary (debounced to run at most once-per-tick)\n        update: debounce(function () {\n          return new Promise(function (resolve) {\n            instance.forceUpdate();\n            resolve(state);\n          });\n        }),\n        destroy: function destroy() {\n          cleanupModifierEffects();\n          isDestroyed = true;\n        }\n      };\n\n      if (!areValidElements(reference, popper)) {\n\n        return instance;\n      }\n\n      instance.setOptions(options).then(function (state) {\n        if (!isDestroyed && options.onFirstUpdate) {\n          options.onFirstUpdate(state);\n        }\n      }); // Modifiers have the ability to execute arbitrary code before the first\n      // update cycle runs. They will be executed in the same order as the update\n      // cycle. This is useful when a modifier adds some persistent data that\n      // other modifiers need to use, but the modifier is run after the dependent\n      // one.\n\n      function runModifierEffects() {\n        state.orderedModifiers.forEach(function (_ref3) {\n          var name = _ref3.name,\n              _ref3$options = _ref3.options,\n              options = _ref3$options === void 0 ? {} : _ref3$options,\n              effect = _ref3.effect;\n\n          if (typeof effect === 'function') {\n            var cleanupFn = effect({\n              state: state,\n              name: name,\n              instance: instance,\n              options: options\n            });\n\n            var noopFn = function noopFn() {};\n\n            effectCleanupFns.push(cleanupFn || noopFn);\n          }\n        });\n      }\n\n      function cleanupModifierEffects() {\n        effectCleanupFns.forEach(function (fn) {\n          return fn();\n        });\n        effectCleanupFns = [];\n      }\n\n      return instance;\n    };\n  }\n  var createPopper$2 = /*#__PURE__*/popperGenerator(); // eslint-disable-next-line import/no-unused-modules\n\n  var defaultModifiers$1 = [eventListeners, popperOffsets$1, computeStyles$1, applyStyles$1];\n  var createPopper$1 = /*#__PURE__*/popperGenerator({\n    defaultModifiers: defaultModifiers$1\n  }); // eslint-disable-next-line import/no-unused-modules\n\n  var defaultModifiers = [eventListeners, popperOffsets$1, computeStyles$1, applyStyles$1, offset$1, flip$1, preventOverflow$1, arrow$1, hide$1];\n  var createPopper = /*#__PURE__*/popperGenerator({\n    defaultModifiers: defaultModifiers\n  }); // eslint-disable-next-line import/no-unused-modules\n\n  var Popper = /*#__PURE__*/Object.freeze({\n    __proto__: null,\n    popperGenerator: popperGenerator,\n    detectOverflow: detectOverflow,\n    createPopperBase: createPopper$2,\n    createPopper: createPopper,\n    createPopperLite: createPopper$1,\n    top: top,\n    bottom: bottom,\n    right: right,\n    left: left,\n    auto: auto,\n    basePlacements: basePlacements,\n    start: start,\n    end: end,\n    clippingParents: clippingParents,\n    viewport: viewport,\n    popper: popper,\n    reference: reference,\n    variationPlacements: variationPlacements,\n    placements: placements,\n    beforeRead: beforeRead,\n    read: read,\n    afterRead: afterRead,\n    beforeMain: beforeMain,\n    main: main,\n    afterMain: afterMain,\n    beforeWrite: beforeWrite,\n    write: write,\n    afterWrite: afterWrite,\n    modifierPhases: modifierPhases,\n    applyStyles: applyStyles$1,\n    arrow: arrow$1,\n    computeStyles: computeStyles$1,\n    eventListeners: eventListeners,\n    flip: flip$1,\n    hide: hide$1,\n    offset: offset$1,\n    popperOffsets: popperOffsets$1,\n    preventOverflow: preventOverflow$1\n  });\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): dropdown.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$8 = 'dropdown';\n  const DATA_KEY$7 = 'bs.dropdown';\n  const EVENT_KEY$7 = `.${DATA_KEY$7}`;\n  const DATA_API_KEY$4 = '.data-api';\n  const ESCAPE_KEY$2 = 'Escape';\n  const SPACE_KEY = 'Space';\n  const TAB_KEY = 'Tab';\n  const ARROW_UP_KEY = 'ArrowUp';\n  const ARROW_DOWN_KEY = 'ArrowDown';\n  const RIGHT_MOUSE_BUTTON = 2; // MouseEvent.button value for the secondary button, usually the right button\n\n  const REGEXP_KEYDOWN = new RegExp(`${ARROW_UP_KEY}|${ARROW_DOWN_KEY}|${ESCAPE_KEY$2}`);\n  const EVENT_HIDE$4 = `hide${EVENT_KEY$7}`;\n  const EVENT_HIDDEN$4 = `hidden${EVENT_KEY$7}`;\n  const EVENT_SHOW$4 = `show${EVENT_KEY$7}`;\n  const EVENT_SHOWN$4 = `shown${EVENT_KEY$7}`;\n  const EVENT_CLICK = `click${EVENT_KEY$7}`;\n  const EVENT_CLICK_DATA_API$3 = `click${EVENT_KEY$7}${DATA_API_KEY$4}`;\n  const EVENT_KEYDOWN_DATA_API = `keydown${EVENT_KEY$7}${DATA_API_KEY$4}`;\n  const EVENT_KEYUP_DATA_API = `keyup${EVENT_KEY$7}${DATA_API_KEY$4}`;\n  const CLASS_NAME_SHOW$7 = 'show';\n  const CLASS_NAME_DROPUP = 'dropup';\n  const CLASS_NAME_DROPEND = 'dropend';\n  const CLASS_NAME_DROPSTART = 'dropstart';\n  const CLASS_NAME_NAVBAR = 'navbar';\n  const SELECTOR_DATA_TOGGLE$3 = '[data-bs-toggle=\"dropdown\"]';\n  const SELECTOR_MENU = '.dropdown-menu';\n  const SELECTOR_NAVBAR_NAV = '.navbar-nav';\n  const SELECTOR_VISIBLE_ITEMS = '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)';\n  const PLACEMENT_TOP = isRTL() ? 'top-end' : 'top-start';\n  const PLACEMENT_TOPEND = isRTL() ? 'top-start' : 'top-end';\n  const PLACEMENT_BOTTOM = isRTL() ? 'bottom-end' : 'bottom-start';\n  const PLACEMENT_BOTTOMEND = isRTL() ? 'bottom-start' : 'bottom-end';\n  const PLACEMENT_RIGHT = isRTL() ? 'left-start' : 'right-start';\n  const PLACEMENT_LEFT = isRTL() ? 'right-start' : 'left-start';\n  const Default$7 = {\n    offset: [0, 2],\n    boundary: 'clippingParents',\n    reference: 'toggle',\n    display: 'dynamic',\n    popperConfig: null,\n    autoClose: true\n  };\n  const DefaultType$7 = {\n    offset: '(array|string|function)',\n    boundary: '(string|element)',\n    reference: '(string|element|object)',\n    display: 'string',\n    popperConfig: '(null|object|function)',\n    autoClose: '(boolean|string)'\n  };\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Dropdown extends BaseComponent {\n    constructor(element, config) {\n      super(element);\n      this._popper = null;\n      this._config = this._getConfig(config);\n      this._menu = this._getMenuElement();\n      this._inNavbar = this._detectNavbar();\n\n      this._addEventListeners();\n    } // Getters\n\n\n    static get Default() {\n      return Default$7;\n    }\n\n    static get DefaultType() {\n      return DefaultType$7;\n    }\n\n    static get NAME() {\n      return NAME$8;\n    } // Public\n\n\n    toggle() {\n      if (isDisabled(this._element)) {\n        return;\n      }\n\n      const isActive = this._element.classList.contains(CLASS_NAME_SHOW$7);\n\n      if (isActive) {\n        this.hide();\n        return;\n      }\n\n      this.show();\n    }\n\n    show() {\n      if (isDisabled(this._element) || this._menu.classList.contains(CLASS_NAME_SHOW$7)) {\n        return;\n      }\n\n      const parent = Dropdown.getParentFromElement(this._element);\n      const relatedTarget = {\n        relatedTarget: this._element\n      };\n      const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$4, relatedTarget);\n\n      if (showEvent.defaultPrevented) {\n        return;\n      } // Totally disable Popper for Dropdowns in Navbar\n\n\n      if (this._inNavbar) {\n        Manipulator.setDataAttribute(this._menu, 'popper', 'none');\n      } else {\n        if (typeof Popper === 'undefined') {\n          throw new TypeError('Bootstrap\\'s dropdowns require Popper (https://popper.js.org)');\n        }\n\n        let referenceElement = this._element;\n\n        if (this._config.reference === 'parent') {\n          referenceElement = parent;\n        } else if (isElement$1(this._config.reference)) {\n          referenceElement = getElement(this._config.reference);\n        } else if (typeof this._config.reference === 'object') {\n          referenceElement = this._config.reference;\n        }\n\n        const popperConfig = this._getPopperConfig();\n\n        const isDisplayStatic = popperConfig.modifiers.find(modifier => modifier.name === 'applyStyles' && modifier.enabled === false);\n        this._popper = createPopper(referenceElement, this._menu, popperConfig);\n\n        if (isDisplayStatic) {\n          Manipulator.setDataAttribute(this._menu, 'popper', 'static');\n        }\n      } // If this is a touch-enabled device we add extra\n      // empty mouseover listeners to the body's immediate children;\n      // only needed because of broken event delegation on iOS\n      // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n\n\n      if ('ontouchstart' in document.documentElement && !parent.closest(SELECTOR_NAVBAR_NAV)) {\n        [].concat(...document.body.children).forEach(elem => EventHandler.on(elem, 'mouseover', noop));\n      }\n\n      this._element.focus();\n\n      this._element.setAttribute('aria-expanded', true);\n\n      this._menu.classList.toggle(CLASS_NAME_SHOW$7);\n\n      this._element.classList.toggle(CLASS_NAME_SHOW$7);\n\n      EventHandler.trigger(this._element, EVENT_SHOWN$4, relatedTarget);\n    }\n\n    hide() {\n      if (isDisabled(this._element) || !this._menu.classList.contains(CLASS_NAME_SHOW$7)) {\n        return;\n      }\n\n      const relatedTarget = {\n        relatedTarget: this._element\n      };\n\n      this._completeHide(relatedTarget);\n    }\n\n    dispose() {\n      if (this._popper) {\n        this._popper.destroy();\n      }\n\n      super.dispose();\n    }\n\n    update() {\n      this._inNavbar = this._detectNavbar();\n\n      if (this._popper) {\n        this._popper.update();\n      }\n    } // Private\n\n\n    _addEventListeners() {\n      EventHandler.on(this._element, EVENT_CLICK, event => {\n        event.preventDefault();\n        this.toggle();\n      });\n    }\n\n    _completeHide(relatedTarget) {\n      const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$4, relatedTarget);\n\n      if (hideEvent.defaultPrevented) {\n        return;\n      } // If this is a touch-enabled device we remove the extra\n      // empty mouseover listeners we added for iOS support\n\n\n      if ('ontouchstart' in document.documentElement) {\n        [].concat(...document.body.children).forEach(elem => EventHandler.off(elem, 'mouseover', noop));\n      }\n\n      if (this._popper) {\n        this._popper.destroy();\n      }\n\n      this._menu.classList.remove(CLASS_NAME_SHOW$7);\n\n      this._element.classList.remove(CLASS_NAME_SHOW$7);\n\n      this._element.setAttribute('aria-expanded', 'false');\n\n      Manipulator.removeDataAttribute(this._menu, 'popper');\n      EventHandler.trigger(this._element, EVENT_HIDDEN$4, relatedTarget);\n    }\n\n    _getConfig(config) {\n      config = { ...this.constructor.Default,\n        ...Manipulator.getDataAttributes(this._element),\n        ...config\n      };\n      typeCheckConfig(NAME$8, config, this.constructor.DefaultType);\n\n      if (typeof config.reference === 'object' && !isElement$1(config.reference) && typeof config.reference.getBoundingClientRect !== 'function') {\n        // Popper virtual elements require a getBoundingClientRect method\n        throw new TypeError(`${NAME$8.toUpperCase()}: Option \"reference\" provided type \"object\" without a required \"getBoundingClientRect\" method.`);\n      }\n\n      return config;\n    }\n\n    _getMenuElement() {\n      return SelectorEngine.next(this._element, SELECTOR_MENU)[0];\n    }\n\n    _getPlacement() {\n      const parentDropdown = this._element.parentNode;\n\n      if (parentDropdown.classList.contains(CLASS_NAME_DROPEND)) {\n        return PLACEMENT_RIGHT;\n      }\n\n      if (parentDropdown.classList.contains(CLASS_NAME_DROPSTART)) {\n        return PLACEMENT_LEFT;\n      } // We need to trim the value because custom properties can also include spaces\n\n\n      const isEnd = getComputedStyle(this._menu).getPropertyValue('--bs-position').trim() === 'end';\n\n      if (parentDropdown.classList.contains(CLASS_NAME_DROPUP)) {\n        return isEnd ? PLACEMENT_TOPEND : PLACEMENT_TOP;\n      }\n\n      return isEnd ? PLACEMENT_BOTTOMEND : PLACEMENT_BOTTOM;\n    }\n\n    _detectNavbar() {\n      return this._element.closest(`.${CLASS_NAME_NAVBAR}`) !== null;\n    }\n\n    _getOffset() {\n      const {\n        offset\n      } = this._config;\n\n      if (typeof offset === 'string') {\n        return offset.split(',').map(val => Number.parseInt(val, 10));\n      }\n\n      if (typeof offset === 'function') {\n        return popperData => offset(popperData, this._element);\n      }\n\n      return offset;\n    }\n\n    _getPopperConfig() {\n      const defaultBsPopperConfig = {\n        placement: this._getPlacement(),\n        modifiers: [{\n          name: 'preventOverflow',\n          options: {\n            boundary: this._config.boundary\n          }\n        }, {\n          name: 'offset',\n          options: {\n            offset: this._getOffset()\n          }\n        }]\n      }; // Disable Popper if we have a static display\n\n      if (this._config.display === 'static') {\n        defaultBsPopperConfig.modifiers = [{\n          name: 'applyStyles',\n          enabled: false\n        }];\n      }\n\n      return { ...defaultBsPopperConfig,\n        ...(typeof this._config.popperConfig === 'function' ? this._config.popperConfig(defaultBsPopperConfig) : this._config.popperConfig)\n      };\n    }\n\n    _selectMenuItem({\n      key,\n      target\n    }) {\n      const items = SelectorEngine.find(SELECTOR_VISIBLE_ITEMS, this._menu).filter(isVisible);\n\n      if (!items.length) {\n        return;\n      } // if target isn't included in items (e.g. when expanding the dropdown)\n      // allow cycling to get the last item in case key equals ARROW_UP_KEY\n\n\n      getNextActiveElement(items, target, key === ARROW_DOWN_KEY, !items.includes(target)).focus();\n    } // Static\n\n\n    static dropdownInterface(element, config) {\n      const data = Dropdown.getOrCreateInstance(element, config);\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config]();\n      }\n    }\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        Dropdown.dropdownInterface(this, config);\n      });\n    }\n\n    static clearMenus(event) {\n      if (event && (event.button === RIGHT_MOUSE_BUTTON || event.type === 'keyup' && event.key !== TAB_KEY)) {\n        return;\n      }\n\n      const toggles = SelectorEngine.find(SELECTOR_DATA_TOGGLE$3);\n\n      for (let i = 0, len = toggles.length; i < len; i++) {\n        const context = Dropdown.getInstance(toggles[i]);\n\n        if (!context || context._config.autoClose === false) {\n          continue;\n        }\n\n        if (!context._element.classList.contains(CLASS_NAME_SHOW$7)) {\n          continue;\n        }\n\n        const relatedTarget = {\n          relatedTarget: context._element\n        };\n\n        if (event) {\n          const composedPath = event.composedPath();\n          const isMenuTarget = composedPath.includes(context._menu);\n\n          if (composedPath.includes(context._element) || context._config.autoClose === 'inside' && !isMenuTarget || context._config.autoClose === 'outside' && isMenuTarget) {\n            continue;\n          } // Tab navigation through the dropdown menu or events from contained inputs shouldn't close the menu\n\n\n          if (context._menu.contains(event.target) && (event.type === 'keyup' && event.key === TAB_KEY || /input|select|option|textarea|form/i.test(event.target.tagName))) {\n            continue;\n          }\n\n          if (event.type === 'click') {\n            relatedTarget.clickEvent = event;\n          }\n        }\n\n        context._completeHide(relatedTarget);\n      }\n    }\n\n    static getParentFromElement(element) {\n      return getElementFromSelector(element) || element.parentNode;\n    }\n\n    static dataApiKeydownHandler(event) {\n      // If not input/textarea:\n      //  - And not a key in REGEXP_KEYDOWN => not a dropdown command\n      // If input/textarea:\n      //  - If space key => not a dropdown command\n      //  - If key is other than escape\n      //    - If key is not up or down => not a dropdown command\n      //    - If trigger inside the menu => not a dropdown command\n      if (/input|textarea/i.test(event.target.tagName) ? event.key === SPACE_KEY || event.key !== ESCAPE_KEY$2 && (event.key !== ARROW_DOWN_KEY && event.key !== ARROW_UP_KEY || event.target.closest(SELECTOR_MENU)) : !REGEXP_KEYDOWN.test(event.key)) {\n        return;\n      }\n\n      const isActive = this.classList.contains(CLASS_NAME_SHOW$7);\n\n      if (!isActive && event.key === ESCAPE_KEY$2) {\n        return;\n      }\n\n      event.preventDefault();\n      event.stopPropagation();\n\n      if (isDisabled(this)) {\n        return;\n      }\n\n      const getToggleButton = () => this.matches(SELECTOR_DATA_TOGGLE$3) ? this : SelectorEngine.prev(this, SELECTOR_DATA_TOGGLE$3)[0];\n\n      if (event.key === ESCAPE_KEY$2) {\n        getToggleButton().focus();\n        Dropdown.clearMenus();\n        return;\n      }\n\n      if (event.key === ARROW_UP_KEY || event.key === ARROW_DOWN_KEY) {\n        if (!isActive) {\n          getToggleButton().click();\n        }\n\n        Dropdown.getInstance(getToggleButton())._selectMenuItem(event);\n\n        return;\n      }\n\n      if (!isActive || event.key === SPACE_KEY) {\n        Dropdown.clearMenus();\n      }\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_DATA_TOGGLE$3, Dropdown.dataApiKeydownHandler);\n  EventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown.dataApiKeydownHandler);\n  EventHandler.on(document, EVENT_CLICK_DATA_API$3, Dropdown.clearMenus);\n  EventHandler.on(document, EVENT_KEYUP_DATA_API, Dropdown.clearMenus);\n  EventHandler.on(document, EVENT_CLICK_DATA_API$3, SELECTOR_DATA_TOGGLE$3, function (event) {\n    event.preventDefault();\n    Dropdown.dropdownInterface(this);\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Dropdown to jQuery only if jQuery is present\n   */\n\n  defineJQueryPlugin(Dropdown);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): util/scrollBar.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  const SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top';\n  const SELECTOR_STICKY_CONTENT = '.sticky-top';\n\n  class ScrollBarHelper {\n    constructor() {\n      this._element = document.body;\n    }\n\n    getWidth() {\n      // https://developer.mozilla.org/en-US/docs/Web/API/Window/innerWidth#usage_notes\n      const documentWidth = document.documentElement.clientWidth;\n      return Math.abs(window.innerWidth - documentWidth);\n    }\n\n    hide() {\n      const width = this.getWidth();\n\n      this._disableOverFlow(); // give padding to element to balance the hidden scrollbar width\n\n\n      this._setElementAttributes(this._element, 'paddingRight', calculatedValue => calculatedValue + width); // trick: We adjust positive paddingRight and negative marginRight to sticky-top elements to keep showing fullwidth\n\n\n      this._setElementAttributes(SELECTOR_FIXED_CONTENT, 'paddingRight', calculatedValue => calculatedValue + width);\n\n      this._setElementAttributes(SELECTOR_STICKY_CONTENT, 'marginRight', calculatedValue => calculatedValue - width);\n    }\n\n    _disableOverFlow() {\n      this._saveInitialAttribute(this._element, 'overflow');\n\n      this._element.style.overflow = 'hidden';\n    }\n\n    _setElementAttributes(selector, styleProp, callback) {\n      const scrollbarWidth = this.getWidth();\n\n      const manipulationCallBack = element => {\n        if (element !== this._element && window.innerWidth > element.clientWidth + scrollbarWidth) {\n          return;\n        }\n\n        this._saveInitialAttribute(element, styleProp);\n\n        const calculatedValue = window.getComputedStyle(element)[styleProp];\n        element.style[styleProp] = `${callback(Number.parseFloat(calculatedValue))}px`;\n      };\n\n      this._applyManipulationCallback(selector, manipulationCallBack);\n    }\n\n    reset() {\n      this._resetElementAttributes(this._element, 'overflow');\n\n      this._resetElementAttributes(this._element, 'paddingRight');\n\n      this._resetElementAttributes(SELECTOR_FIXED_CONTENT, 'paddingRight');\n\n      this._resetElementAttributes(SELECTOR_STICKY_CONTENT, 'marginRight');\n    }\n\n    _saveInitialAttribute(element, styleProp) {\n      const actualValue = element.style[styleProp];\n\n      if (actualValue) {\n        Manipulator.setDataAttribute(element, styleProp, actualValue);\n      }\n    }\n\n    _resetElementAttributes(selector, styleProp) {\n      const manipulationCallBack = element => {\n        const value = Manipulator.getDataAttribute(element, styleProp);\n\n        if (typeof value === 'undefined') {\n          element.style.removeProperty(styleProp);\n        } else {\n          Manipulator.removeDataAttribute(element, styleProp);\n          element.style[styleProp] = value;\n        }\n      };\n\n      this._applyManipulationCallback(selector, manipulationCallBack);\n    }\n\n    _applyManipulationCallback(selector, callBack) {\n      if (isElement$1(selector)) {\n        callBack(selector);\n      } else {\n        SelectorEngine.find(selector, this._element).forEach(callBack);\n      }\n    }\n\n    isOverflowing() {\n      return this.getWidth() > 0;\n    }\n\n  }\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): util/backdrop.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  const Default$6 = {\n    isVisible: true,\n    // if false, we use the backdrop helper without adding any element to the dom\n    isAnimated: false,\n    rootElement: 'body',\n    // give the choice to place backdrop under different elements\n    clickCallback: null\n  };\n  const DefaultType$6 = {\n    isVisible: 'boolean',\n    isAnimated: 'boolean',\n    rootElement: '(element|string)',\n    clickCallback: '(function|null)'\n  };\n  const NAME$7 = 'backdrop';\n  const CLASS_NAME_BACKDROP = 'modal-backdrop';\n  const CLASS_NAME_FADE$5 = 'fade';\n  const CLASS_NAME_SHOW$6 = 'show';\n  const EVENT_MOUSEDOWN = `mousedown.bs.${NAME$7}`;\n\n  class Backdrop {\n    constructor(config) {\n      this._config = this._getConfig(config);\n      this._isAppended = false;\n      this._element = null;\n    }\n\n    show(callback) {\n      if (!this._config.isVisible) {\n        execute(callback);\n        return;\n      }\n\n      this._append();\n\n      if (this._config.isAnimated) {\n        reflow(this._getElement());\n      }\n\n      this._getElement().classList.add(CLASS_NAME_SHOW$6);\n\n      this._emulateAnimation(() => {\n        execute(callback);\n      });\n    }\n\n    hide(callback) {\n      if (!this._config.isVisible) {\n        execute(callback);\n        return;\n      }\n\n      this._getElement().classList.remove(CLASS_NAME_SHOW$6);\n\n      this._emulateAnimation(() => {\n        this.dispose();\n        execute(callback);\n      });\n    } // Private\n\n\n    _getElement() {\n      if (!this._element) {\n        const backdrop = document.createElement('div');\n        backdrop.className = CLASS_NAME_BACKDROP;\n\n        if (this._config.isAnimated) {\n          backdrop.classList.add(CLASS_NAME_FADE$5);\n        }\n\n        this._element = backdrop;\n      }\n\n      return this._element;\n    }\n\n    _getConfig(config) {\n      config = { ...Default$6,\n        ...(typeof config === 'object' ? config : {})\n      }; // use getElement() with the default \"body\" to get a fresh Element on each instantiation\n\n      config.rootElement = getElement(config.rootElement);\n      typeCheckConfig(NAME$7, config, DefaultType$6);\n      return config;\n    }\n\n    _append() {\n      if (this._isAppended) {\n        return;\n      }\n\n      this._config.rootElement.appendChild(this._getElement());\n\n      EventHandler.on(this._getElement(), EVENT_MOUSEDOWN, () => {\n        execute(this._config.clickCallback);\n      });\n      this._isAppended = true;\n    }\n\n    dispose() {\n      if (!this._isAppended) {\n        return;\n      }\n\n      EventHandler.off(this._element, EVENT_MOUSEDOWN);\n\n      this._element.remove();\n\n      this._isAppended = false;\n    }\n\n    _emulateAnimation(callback) {\n      executeAfterTransition(callback, this._getElement(), this._config.isAnimated);\n    }\n\n  }\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): modal.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$6 = 'modal';\n  const DATA_KEY$6 = 'bs.modal';\n  const EVENT_KEY$6 = `.${DATA_KEY$6}`;\n  const DATA_API_KEY$3 = '.data-api';\n  const ESCAPE_KEY$1 = 'Escape';\n  const Default$5 = {\n    backdrop: true,\n    keyboard: true,\n    focus: true\n  };\n  const DefaultType$5 = {\n    backdrop: '(boolean|string)',\n    keyboard: 'boolean',\n    focus: 'boolean'\n  };\n  const EVENT_HIDE$3 = `hide${EVENT_KEY$6}`;\n  const EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY$6}`;\n  const EVENT_HIDDEN$3 = `hidden${EVENT_KEY$6}`;\n  const EVENT_SHOW$3 = `show${EVENT_KEY$6}`;\n  const EVENT_SHOWN$3 = `shown${EVENT_KEY$6}`;\n  const EVENT_FOCUSIN$2 = `focusin${EVENT_KEY$6}`;\n  const EVENT_RESIZE = `resize${EVENT_KEY$6}`;\n  const EVENT_CLICK_DISMISS$2 = `click.dismiss${EVENT_KEY$6}`;\n  const EVENT_KEYDOWN_DISMISS$1 = `keydown.dismiss${EVENT_KEY$6}`;\n  const EVENT_MOUSEUP_DISMISS = `mouseup.dismiss${EVENT_KEY$6}`;\n  const EVENT_MOUSEDOWN_DISMISS = `mousedown.dismiss${EVENT_KEY$6}`;\n  const EVENT_CLICK_DATA_API$2 = `click${EVENT_KEY$6}${DATA_API_KEY$3}`;\n  const CLASS_NAME_OPEN = 'modal-open';\n  const CLASS_NAME_FADE$4 = 'fade';\n  const CLASS_NAME_SHOW$5 = 'show';\n  const CLASS_NAME_STATIC = 'modal-static';\n  const SELECTOR_DIALOG = '.modal-dialog';\n  const SELECTOR_MODAL_BODY = '.modal-body';\n  const SELECTOR_DATA_TOGGLE$2 = '[data-bs-toggle=\"modal\"]';\n  const SELECTOR_DATA_DISMISS$2 = '[data-bs-dismiss=\"modal\"]';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Modal extends BaseComponent {\n    constructor(element, config) {\n      super(element);\n      this._config = this._getConfig(config);\n      this._dialog = SelectorEngine.findOne(SELECTOR_DIALOG, this._element);\n      this._backdrop = this._initializeBackDrop();\n      this._isShown = false;\n      this._ignoreBackdropClick = false;\n      this._isTransitioning = false;\n      this._scrollBar = new ScrollBarHelper();\n    } // Getters\n\n\n    static get Default() {\n      return Default$5;\n    }\n\n    static get NAME() {\n      return NAME$6;\n    } // Public\n\n\n    toggle(relatedTarget) {\n      return this._isShown ? this.hide() : this.show(relatedTarget);\n    }\n\n    show(relatedTarget) {\n      if (this._isShown || this._isTransitioning) {\n        return;\n      }\n\n      const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$3, {\n        relatedTarget\n      });\n\n      if (showEvent.defaultPrevented) {\n        return;\n      }\n\n      this._isShown = true;\n\n      if (this._isAnimated()) {\n        this._isTransitioning = true;\n      }\n\n      this._scrollBar.hide();\n\n      document.body.classList.add(CLASS_NAME_OPEN);\n\n      this._adjustDialog();\n\n      this._setEscapeEvent();\n\n      this._setResizeEvent();\n\n      EventHandler.on(this._element, EVENT_CLICK_DISMISS$2, SELECTOR_DATA_DISMISS$2, event => this.hide(event));\n      EventHandler.on(this._dialog, EVENT_MOUSEDOWN_DISMISS, () => {\n        EventHandler.one(this._element, EVENT_MOUSEUP_DISMISS, event => {\n          if (event.target === this._element) {\n            this._ignoreBackdropClick = true;\n          }\n        });\n      });\n\n      this._showBackdrop(() => this._showElement(relatedTarget));\n    }\n\n    hide(event) {\n      if (event && ['A', 'AREA'].includes(event.target.tagName)) {\n        event.preventDefault();\n      }\n\n      if (!this._isShown || this._isTransitioning) {\n        return;\n      }\n\n      const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$3);\n\n      if (hideEvent.defaultPrevented) {\n        return;\n      }\n\n      this._isShown = false;\n\n      const isAnimated = this._isAnimated();\n\n      if (isAnimated) {\n        this._isTransitioning = true;\n      }\n\n      this._setEscapeEvent();\n\n      this._setResizeEvent();\n\n      EventHandler.off(document, EVENT_FOCUSIN$2);\n\n      this._element.classList.remove(CLASS_NAME_SHOW$5);\n\n      EventHandler.off(this._element, EVENT_CLICK_DISMISS$2);\n      EventHandler.off(this._dialog, EVENT_MOUSEDOWN_DISMISS);\n\n      this._queueCallback(() => this._hideModal(), this._element, isAnimated);\n    }\n\n    dispose() {\n      [window, this._dialog].forEach(htmlElement => EventHandler.off(htmlElement, EVENT_KEY$6));\n\n      this._backdrop.dispose();\n\n      super.dispose();\n      /**\n       * `document` has 2 events `EVENT_FOCUSIN` and `EVENT_CLICK_DATA_API`\n       * Do not move `document` in `htmlElements` array\n       * It will remove `EVENT_CLICK_DATA_API` event that should remain\n       */\n\n      EventHandler.off(document, EVENT_FOCUSIN$2);\n    }\n\n    handleUpdate() {\n      this._adjustDialog();\n    } // Private\n\n\n    _initializeBackDrop() {\n      return new Backdrop({\n        isVisible: Boolean(this._config.backdrop),\n        // 'static' option will be translated to true, and booleans will keep their value\n        isAnimated: this._isAnimated()\n      });\n    }\n\n    _getConfig(config) {\n      config = { ...Default$5,\n        ...Manipulator.getDataAttributes(this._element),\n        ...(typeof config === 'object' ? config : {})\n      };\n      typeCheckConfig(NAME$6, config, DefaultType$5);\n      return config;\n    }\n\n    _showElement(relatedTarget) {\n      const isAnimated = this._isAnimated();\n\n      const modalBody = SelectorEngine.findOne(SELECTOR_MODAL_BODY, this._dialog);\n\n      if (!this._element.parentNode || this._element.parentNode.nodeType !== Node.ELEMENT_NODE) {\n        // Don't move modal's DOM position\n        document.body.appendChild(this._element);\n      }\n\n      this._element.style.display = 'block';\n\n      this._element.removeAttribute('aria-hidden');\n\n      this._element.setAttribute('aria-modal', true);\n\n      this._element.setAttribute('role', 'dialog');\n\n      this._element.scrollTop = 0;\n\n      if (modalBody) {\n        modalBody.scrollTop = 0;\n      }\n\n      if (isAnimated) {\n        reflow(this._element);\n      }\n\n      this._element.classList.add(CLASS_NAME_SHOW$5);\n\n      if (this._config.focus) {\n        this._enforceFocus();\n      }\n\n      const transitionComplete = () => {\n        if (this._config.focus) {\n          this._element.focus();\n        }\n\n        this._isTransitioning = false;\n        EventHandler.trigger(this._element, EVENT_SHOWN$3, {\n          relatedTarget\n        });\n      };\n\n      this._queueCallback(transitionComplete, this._dialog, isAnimated);\n    }\n\n    _enforceFocus() {\n      EventHandler.off(document, EVENT_FOCUSIN$2); // guard against infinite focus loop\n\n      EventHandler.on(document, EVENT_FOCUSIN$2, event => {\n        if (document !== event.target && this._element !== event.target && !this._element.contains(event.target)) {\n          this._element.focus();\n        }\n      });\n    }\n\n    _setEscapeEvent() {\n      if (this._isShown) {\n        EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS$1, event => {\n          if (this._config.keyboard && event.key === ESCAPE_KEY$1) {\n            event.preventDefault();\n            this.hide();\n          } else if (!this._config.keyboard && event.key === ESCAPE_KEY$1) {\n            this._triggerBackdropTransition();\n          }\n        });\n      } else {\n        EventHandler.off(this._element, EVENT_KEYDOWN_DISMISS$1);\n      }\n    }\n\n    _setResizeEvent() {\n      if (this._isShown) {\n        EventHandler.on(window, EVENT_RESIZE, () => this._adjustDialog());\n      } else {\n        EventHandler.off(window, EVENT_RESIZE);\n      }\n    }\n\n    _hideModal() {\n      this._element.style.display = 'none';\n\n      this._element.setAttribute('aria-hidden', true);\n\n      this._element.removeAttribute('aria-modal');\n\n      this._element.removeAttribute('role');\n\n      this._isTransitioning = false;\n\n      this._backdrop.hide(() => {\n        document.body.classList.remove(CLASS_NAME_OPEN);\n\n        this._resetAdjustments();\n\n        this._scrollBar.reset();\n\n        EventHandler.trigger(this._element, EVENT_HIDDEN$3);\n      });\n    }\n\n    _showBackdrop(callback) {\n      EventHandler.on(this._element, EVENT_CLICK_DISMISS$2, event => {\n        if (this._ignoreBackdropClick) {\n          this._ignoreBackdropClick = false;\n          return;\n        }\n\n        if (event.target !== event.currentTarget) {\n          return;\n        }\n\n        if (this._config.backdrop === true) {\n          this.hide();\n        } else if (this._config.backdrop === 'static') {\n          this._triggerBackdropTransition();\n        }\n      });\n\n      this._backdrop.show(callback);\n    }\n\n    _isAnimated() {\n      return this._element.classList.contains(CLASS_NAME_FADE$4);\n    }\n\n    _triggerBackdropTransition() {\n      const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED);\n\n      if (hideEvent.defaultPrevented) {\n        return;\n      }\n\n      const {\n        classList,\n        scrollHeight,\n        style\n      } = this._element;\n      const isModalOverflowing = scrollHeight > document.documentElement.clientHeight; // return if the following background transition hasn't yet completed\n\n      if (!isModalOverflowing && style.overflowY === 'hidden' || classList.contains(CLASS_NAME_STATIC)) {\n        return;\n      }\n\n      if (!isModalOverflowing) {\n        style.overflowY = 'hidden';\n      }\n\n      classList.add(CLASS_NAME_STATIC);\n\n      this._queueCallback(() => {\n        classList.remove(CLASS_NAME_STATIC);\n\n        if (!isModalOverflowing) {\n          this._queueCallback(() => {\n            style.overflowY = '';\n          }, this._dialog);\n        }\n      }, this._dialog);\n\n      this._element.focus();\n    } // ----------------------------------------------------------------------\n    // the following methods are used to handle overflowing modals\n    // ----------------------------------------------------------------------\n\n\n    _adjustDialog() {\n      const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;\n\n      const scrollbarWidth = this._scrollBar.getWidth();\n\n      const isBodyOverflowing = scrollbarWidth > 0;\n\n      if (!isBodyOverflowing && isModalOverflowing && !isRTL() || isBodyOverflowing && !isModalOverflowing && isRTL()) {\n        this._element.style.paddingLeft = `${scrollbarWidth}px`;\n      }\n\n      if (isBodyOverflowing && !isModalOverflowing && !isRTL() || !isBodyOverflowing && isModalOverflowing && isRTL()) {\n        this._element.style.paddingRight = `${scrollbarWidth}px`;\n      }\n    }\n\n    _resetAdjustments() {\n      this._element.style.paddingLeft = '';\n      this._element.style.paddingRight = '';\n    } // Static\n\n\n    static jQueryInterface(config, relatedTarget) {\n      return this.each(function () {\n        const data = Modal.getOrCreateInstance(this, config);\n\n        if (typeof config !== 'string') {\n          return;\n        }\n\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config](relatedTarget);\n      });\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(document, EVENT_CLICK_DATA_API$2, SELECTOR_DATA_TOGGLE$2, function (event) {\n    const target = getElementFromSelector(this);\n\n    if (['A', 'AREA'].includes(this.tagName)) {\n      event.preventDefault();\n    }\n\n    EventHandler.one(target, EVENT_SHOW$3, showEvent => {\n      if (showEvent.defaultPrevented) {\n        // only register focus restorer if modal will actually get shown\n        return;\n      }\n\n      EventHandler.one(target, EVENT_HIDDEN$3, () => {\n        if (isVisible(this)) {\n          this.focus();\n        }\n      });\n    });\n    const data = Modal.getOrCreateInstance(target);\n    data.toggle(this);\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Modal to jQuery only if jQuery is present\n   */\n\n  defineJQueryPlugin(Modal);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): offcanvas.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$5 = 'offcanvas';\n  const DATA_KEY$5 = 'bs.offcanvas';\n  const EVENT_KEY$5 = `.${DATA_KEY$5}`;\n  const DATA_API_KEY$2 = '.data-api';\n  const EVENT_LOAD_DATA_API$1 = `load${EVENT_KEY$5}${DATA_API_KEY$2}`;\n  const ESCAPE_KEY = 'Escape';\n  const Default$4 = {\n    backdrop: true,\n    keyboard: true,\n    scroll: false\n  };\n  const DefaultType$4 = {\n    backdrop: 'boolean',\n    keyboard: 'boolean',\n    scroll: 'boolean'\n  };\n  const CLASS_NAME_SHOW$4 = 'show';\n  const OPEN_SELECTOR = '.offcanvas.show';\n  const EVENT_SHOW$2 = `show${EVENT_KEY$5}`;\n  const EVENT_SHOWN$2 = `shown${EVENT_KEY$5}`;\n  const EVENT_HIDE$2 = `hide${EVENT_KEY$5}`;\n  const EVENT_HIDDEN$2 = `hidden${EVENT_KEY$5}`;\n  const EVENT_FOCUSIN$1 = `focusin${EVENT_KEY$5}`;\n  const EVENT_CLICK_DATA_API$1 = `click${EVENT_KEY$5}${DATA_API_KEY$2}`;\n  const EVENT_CLICK_DISMISS$1 = `click.dismiss${EVENT_KEY$5}`;\n  const EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY$5}`;\n  const SELECTOR_DATA_DISMISS$1 = '[data-bs-dismiss=\"offcanvas\"]';\n  const SELECTOR_DATA_TOGGLE$1 = '[data-bs-toggle=\"offcanvas\"]';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Offcanvas extends BaseComponent {\n    constructor(element, config) {\n      super(element);\n      this._config = this._getConfig(config);\n      this._isShown = false;\n      this._backdrop = this._initializeBackDrop();\n\n      this._addEventListeners();\n    } // Getters\n\n\n    static get NAME() {\n      return NAME$5;\n    }\n\n    static get Default() {\n      return Default$4;\n    } // Public\n\n\n    toggle(relatedTarget) {\n      return this._isShown ? this.hide() : this.show(relatedTarget);\n    }\n\n    show(relatedTarget) {\n      if (this._isShown) {\n        return;\n      }\n\n      const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$2, {\n        relatedTarget\n      });\n\n      if (showEvent.defaultPrevented) {\n        return;\n      }\n\n      this._isShown = true;\n      this._element.style.visibility = 'visible';\n\n      this._backdrop.show();\n\n      if (!this._config.scroll) {\n        new ScrollBarHelper().hide();\n\n        this._enforceFocusOnElement(this._element);\n      }\n\n      this._element.removeAttribute('aria-hidden');\n\n      this._element.setAttribute('aria-modal', true);\n\n      this._element.setAttribute('role', 'dialog');\n\n      this._element.classList.add(CLASS_NAME_SHOW$4);\n\n      const completeCallBack = () => {\n        EventHandler.trigger(this._element, EVENT_SHOWN$2, {\n          relatedTarget\n        });\n      };\n\n      this._queueCallback(completeCallBack, this._element, true);\n    }\n\n    hide() {\n      if (!this._isShown) {\n        return;\n      }\n\n      const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$2);\n\n      if (hideEvent.defaultPrevented) {\n        return;\n      }\n\n      EventHandler.off(document, EVENT_FOCUSIN$1);\n\n      this._element.blur();\n\n      this._isShown = false;\n\n      this._element.classList.remove(CLASS_NAME_SHOW$4);\n\n      this._backdrop.hide();\n\n      const completeCallback = () => {\n        this._element.setAttribute('aria-hidden', true);\n\n        this._element.removeAttribute('aria-modal');\n\n        this._element.removeAttribute('role');\n\n        this._element.style.visibility = 'hidden';\n\n        if (!this._config.scroll) {\n          new ScrollBarHelper().reset();\n        }\n\n        EventHandler.trigger(this._element, EVENT_HIDDEN$2);\n      };\n\n      this._queueCallback(completeCallback, this._element, true);\n    }\n\n    dispose() {\n      this._backdrop.dispose();\n\n      super.dispose();\n      EventHandler.off(document, EVENT_FOCUSIN$1);\n    } // Private\n\n\n    _getConfig(config) {\n      config = { ...Default$4,\n        ...Manipulator.getDataAttributes(this._element),\n        ...(typeof config === 'object' ? config : {})\n      };\n      typeCheckConfig(NAME$5, config, DefaultType$4);\n      return config;\n    }\n\n    _initializeBackDrop() {\n      return new Backdrop({\n        isVisible: this._config.backdrop,\n        isAnimated: true,\n        rootElement: this._element.parentNode,\n        clickCallback: () => this.hide()\n      });\n    }\n\n    _enforceFocusOnElement(element) {\n      EventHandler.off(document, EVENT_FOCUSIN$1); // guard against infinite focus loop\n\n      EventHandler.on(document, EVENT_FOCUSIN$1, event => {\n        if (document !== event.target && element !== event.target && !element.contains(event.target)) {\n          element.focus();\n        }\n      });\n      element.focus();\n    }\n\n    _addEventListeners() {\n      EventHandler.on(this._element, EVENT_CLICK_DISMISS$1, SELECTOR_DATA_DISMISS$1, () => this.hide());\n      EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS, event => {\n        if (this._config.keyboard && event.key === ESCAPE_KEY) {\n          this.hide();\n        }\n      });\n    } // Static\n\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = Offcanvas.getOrCreateInstance(this, config);\n\n        if (typeof config !== 'string') {\n          return;\n        }\n\n        if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config](this);\n      });\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(document, EVENT_CLICK_DATA_API$1, SELECTOR_DATA_TOGGLE$1, function (event) {\n    const target = getElementFromSelector(this);\n\n    if (['A', 'AREA'].includes(this.tagName)) {\n      event.preventDefault();\n    }\n\n    if (isDisabled(this)) {\n      return;\n    }\n\n    EventHandler.one(target, EVENT_HIDDEN$2, () => {\n      // focus on trigger when it is closed\n      if (isVisible(this)) {\n        this.focus();\n      }\n    }); // avoid conflict when clicking a toggler of an offcanvas, while another is open\n\n    const allReadyOpen = SelectorEngine.findOne(OPEN_SELECTOR);\n\n    if (allReadyOpen && allReadyOpen !== target) {\n      Offcanvas.getInstance(allReadyOpen).hide();\n    }\n\n    const data = Offcanvas.getOrCreateInstance(target);\n    data.toggle(this);\n  });\n  EventHandler.on(window, EVENT_LOAD_DATA_API$1, () => SelectorEngine.find(OPEN_SELECTOR).forEach(el => Offcanvas.getOrCreateInstance(el).show()));\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   */\n\n  defineJQueryPlugin(Offcanvas);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): util/sanitizer.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  const uriAttrs = new Set(['background', 'cite', 'href', 'itemtype', 'longdesc', 'poster', 'src', 'xlink:href']);\n  const ARIA_ATTRIBUTE_PATTERN = /^aria-[\\w-]*$/i;\n  /**\n   * A pattern that recognizes a commonly useful subset of URLs that are safe.\n   *\n   * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts\n   */\n\n  const SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file):|[^#&/:?]*(?:[#/?]|$))/i;\n  /**\n   * A pattern that matches safe data URLs. Only matches image, video and audio types.\n   *\n   * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts\n   */\n\n  const DATA_URL_PATTERN = /^data:(?:image\\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\\/(?:mpeg|mp4|ogg|webm)|audio\\/(?:mp3|oga|ogg|opus));base64,[\\d+/a-z]+=*$/i;\n\n  const allowedAttribute = (attr, allowedAttributeList) => {\n    const attrName = attr.nodeName.toLowerCase();\n\n    if (allowedAttributeList.includes(attrName)) {\n      if (uriAttrs.has(attrName)) {\n        return Boolean(SAFE_URL_PATTERN.test(attr.nodeValue) || DATA_URL_PATTERN.test(attr.nodeValue));\n      }\n\n      return true;\n    }\n\n    const regExp = allowedAttributeList.filter(attrRegex => attrRegex instanceof RegExp); // Check if a regular expression validates the attribute.\n\n    for (let i = 0, len = regExp.length; i < len; i++) {\n      if (regExp[i].test(attrName)) {\n        return true;\n      }\n    }\n\n    return false;\n  };\n\n  const DefaultAllowlist = {\n    // Global attributes allowed on any supplied element below.\n    '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],\n    a: ['target', 'href', 'title', 'rel'],\n    area: [],\n    b: [],\n    br: [],\n    col: [],\n    code: [],\n    div: [],\n    em: [],\n    hr: [],\n    h1: [],\n    h2: [],\n    h3: [],\n    h4: [],\n    h5: [],\n    h6: [],\n    i: [],\n    img: ['src', 'srcset', 'alt', 'title', 'width', 'height'],\n    li: [],\n    ol: [],\n    p: [],\n    pre: [],\n    s: [],\n    small: [],\n    span: [],\n    sub: [],\n    sup: [],\n    strong: [],\n    u: [],\n    ul: []\n  };\n  function sanitizeHtml(unsafeHtml, allowList, sanitizeFn) {\n    if (!unsafeHtml.length) {\n      return unsafeHtml;\n    }\n\n    if (sanitizeFn && typeof sanitizeFn === 'function') {\n      return sanitizeFn(unsafeHtml);\n    }\n\n    const domParser = new window.DOMParser();\n    const createdDocument = domParser.parseFromString(unsafeHtml, 'text/html');\n    const allowlistKeys = Object.keys(allowList);\n    const elements = [].concat(...createdDocument.body.querySelectorAll('*'));\n\n    for (let i = 0, len = elements.length; i < len; i++) {\n      const el = elements[i];\n      const elName = el.nodeName.toLowerCase();\n\n      if (!allowlistKeys.includes(elName)) {\n        el.remove();\n        continue;\n      }\n\n      const attributeList = [].concat(...el.attributes);\n      const allowedAttributes = [].concat(allowList['*'] || [], allowList[elName] || []);\n      attributeList.forEach(attr => {\n        if (!allowedAttribute(attr, allowedAttributes)) {\n          el.removeAttribute(attr.nodeName);\n        }\n      });\n    }\n\n    return createdDocument.body.innerHTML;\n  }\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): tooltip.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$4 = 'tooltip';\n  const DATA_KEY$4 = 'bs.tooltip';\n  const EVENT_KEY$4 = `.${DATA_KEY$4}`;\n  const CLASS_PREFIX$1 = 'bs-tooltip';\n  const BSCLS_PREFIX_REGEX$1 = new RegExp(`(^|\\\\s)${CLASS_PREFIX$1}\\\\S+`, 'g');\n  const DISALLOWED_ATTRIBUTES = new Set(['sanitize', 'allowList', 'sanitizeFn']);\n  const DefaultType$3 = {\n    animation: 'boolean',\n    template: 'string',\n    title: '(string|element|function)',\n    trigger: 'string',\n    delay: '(number|object)',\n    html: 'boolean',\n    selector: '(string|boolean)',\n    placement: '(string|function)',\n    offset: '(array|string|function)',\n    container: '(string|element|boolean)',\n    fallbackPlacements: 'array',\n    boundary: '(string|element)',\n    customClass: '(string|function)',\n    sanitize: 'boolean',\n    sanitizeFn: '(null|function)',\n    allowList: 'object',\n    popperConfig: '(null|object|function)'\n  };\n  const AttachmentMap = {\n    AUTO: 'auto',\n    TOP: 'top',\n    RIGHT: isRTL() ? 'left' : 'right',\n    BOTTOM: 'bottom',\n    LEFT: isRTL() ? 'right' : 'left'\n  };\n  const Default$3 = {\n    animation: true,\n    template: '<div class=\"tooltip\" role=\"tooltip\">' + '<div class=\"tooltip-arrow\"></div>' + '<div class=\"tooltip-inner\"></div>' + '</div>',\n    trigger: 'hover focus',\n    title: '',\n    delay: 0,\n    html: false,\n    selector: false,\n    placement: 'top',\n    offset: [0, 0],\n    container: false,\n    fallbackPlacements: ['top', 'right', 'bottom', 'left'],\n    boundary: 'clippingParents',\n    customClass: '',\n    sanitize: true,\n    sanitizeFn: null,\n    allowList: DefaultAllowlist,\n    popperConfig: null\n  };\n  const Event$2 = {\n    HIDE: `hide${EVENT_KEY$4}`,\n    HIDDEN: `hidden${EVENT_KEY$4}`,\n    SHOW: `show${EVENT_KEY$4}`,\n    SHOWN: `shown${EVENT_KEY$4}`,\n    INSERTED: `inserted${EVENT_KEY$4}`,\n    CLICK: `click${EVENT_KEY$4}`,\n    FOCUSIN: `focusin${EVENT_KEY$4}`,\n    FOCUSOUT: `focusout${EVENT_KEY$4}`,\n    MOUSEENTER: `mouseenter${EVENT_KEY$4}`,\n    MOUSELEAVE: `mouseleave${EVENT_KEY$4}`\n  };\n  const CLASS_NAME_FADE$3 = 'fade';\n  const CLASS_NAME_MODAL = 'modal';\n  const CLASS_NAME_SHOW$3 = 'show';\n  const HOVER_STATE_SHOW = 'show';\n  const HOVER_STATE_OUT = 'out';\n  const SELECTOR_TOOLTIP_INNER = '.tooltip-inner';\n  const TRIGGER_HOVER = 'hover';\n  const TRIGGER_FOCUS = 'focus';\n  const TRIGGER_CLICK = 'click';\n  const TRIGGER_MANUAL = 'manual';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Tooltip extends BaseComponent {\n    constructor(element, config) {\n      if (typeof Popper === 'undefined') {\n        throw new TypeError('Bootstrap\\'s tooltips require Popper (https://popper.js.org)');\n      }\n\n      super(element); // private\n\n      this._isEnabled = true;\n      this._timeout = 0;\n      this._hoverState = '';\n      this._activeTrigger = {};\n      this._popper = null; // Protected\n\n      this._config = this._getConfig(config);\n      this.tip = null;\n\n      this._setListeners();\n    } // Getters\n\n\n    static get Default() {\n      return Default$3;\n    }\n\n    static get NAME() {\n      return NAME$4;\n    }\n\n    static get Event() {\n      return Event$2;\n    }\n\n    static get DefaultType() {\n      return DefaultType$3;\n    } // Public\n\n\n    enable() {\n      this._isEnabled = true;\n    }\n\n    disable() {\n      this._isEnabled = false;\n    }\n\n    toggleEnabled() {\n      this._isEnabled = !this._isEnabled;\n    }\n\n    toggle(event) {\n      if (!this._isEnabled) {\n        return;\n      }\n\n      if (event) {\n        const context = this._initializeOnDelegatedTarget(event);\n\n        context._activeTrigger.click = !context._activeTrigger.click;\n\n        if (context._isWithActiveTrigger()) {\n          context._enter(null, context);\n        } else {\n          context._leave(null, context);\n        }\n      } else {\n        if (this.getTipElement().classList.contains(CLASS_NAME_SHOW$3)) {\n          this._leave(null, this);\n\n          return;\n        }\n\n        this._enter(null, this);\n      }\n    }\n\n    dispose() {\n      clearTimeout(this._timeout);\n      EventHandler.off(this._element.closest(`.${CLASS_NAME_MODAL}`), 'hide.bs.modal', this._hideModalHandler);\n\n      if (this.tip) {\n        this.tip.remove();\n      }\n\n      if (this._popper) {\n        this._popper.destroy();\n      }\n\n      super.dispose();\n    }\n\n    show() {\n      if (this._element.style.display === 'none') {\n        throw new Error('Please use show on visible elements');\n      }\n\n      if (!(this.isWithContent() && this._isEnabled)) {\n        return;\n      }\n\n      const showEvent = EventHandler.trigger(this._element, this.constructor.Event.SHOW);\n      const shadowRoot = findShadowRoot(this._element);\n      const isInTheDom = shadowRoot === null ? this._element.ownerDocument.documentElement.contains(this._element) : shadowRoot.contains(this._element);\n\n      if (showEvent.defaultPrevented || !isInTheDom) {\n        return;\n      }\n\n      const tip = this.getTipElement();\n      const tipId = getUID(this.constructor.NAME);\n      tip.setAttribute('id', tipId);\n\n      this._element.setAttribute('aria-describedby', tipId);\n\n      this.setContent();\n\n      if (this._config.animation) {\n        tip.classList.add(CLASS_NAME_FADE$3);\n      }\n\n      const placement = typeof this._config.placement === 'function' ? this._config.placement.call(this, tip, this._element) : this._config.placement;\n\n      const attachment = this._getAttachment(placement);\n\n      this._addAttachmentClass(attachment);\n\n      const {\n        container\n      } = this._config;\n      Data.set(tip, this.constructor.DATA_KEY, this);\n\n      if (!this._element.ownerDocument.documentElement.contains(this.tip)) {\n        container.appendChild(tip);\n        EventHandler.trigger(this._element, this.constructor.Event.INSERTED);\n      }\n\n      if (this._popper) {\n        this._popper.update();\n      } else {\n        this._popper = createPopper(this._element, tip, this._getPopperConfig(attachment));\n      }\n\n      tip.classList.add(CLASS_NAME_SHOW$3);\n      const customClass = typeof this._config.customClass === 'function' ? this._config.customClass() : this._config.customClass;\n\n      if (customClass) {\n        tip.classList.add(...customClass.split(' '));\n      } // If this is a touch-enabled device we add extra\n      // empty mouseover listeners to the body's immediate children;\n      // only needed because of broken event delegation on iOS\n      // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n\n\n      if ('ontouchstart' in document.documentElement) {\n        [].concat(...document.body.children).forEach(element => {\n          EventHandler.on(element, 'mouseover', noop);\n        });\n      }\n\n      const complete = () => {\n        const prevHoverState = this._hoverState;\n        this._hoverState = null;\n        EventHandler.trigger(this._element, this.constructor.Event.SHOWN);\n\n        if (prevHoverState === HOVER_STATE_OUT) {\n          this._leave(null, this);\n        }\n      };\n\n      const isAnimated = this.tip.classList.contains(CLASS_NAME_FADE$3);\n\n      this._queueCallback(complete, this.tip, isAnimated);\n    }\n\n    hide() {\n      if (!this._popper) {\n        return;\n      }\n\n      const tip = this.getTipElement();\n\n      const complete = () => {\n        if (this._isWithActiveTrigger()) {\n          return;\n        }\n\n        if (this._hoverState !== HOVER_STATE_SHOW) {\n          tip.remove();\n        }\n\n        this._cleanTipClass();\n\n        this._element.removeAttribute('aria-describedby');\n\n        EventHandler.trigger(this._element, this.constructor.Event.HIDDEN);\n\n        if (this._popper) {\n          this._popper.destroy();\n\n          this._popper = null;\n        }\n      };\n\n      const hideEvent = EventHandler.trigger(this._element, this.constructor.Event.HIDE);\n\n      if (hideEvent.defaultPrevented) {\n        return;\n      }\n\n      tip.classList.remove(CLASS_NAME_SHOW$3); // If this is a touch-enabled device we remove the extra\n      // empty mouseover listeners we added for iOS support\n\n      if ('ontouchstart' in document.documentElement) {\n        [].concat(...document.body.children).forEach(element => EventHandler.off(element, 'mouseover', noop));\n      }\n\n      this._activeTrigger[TRIGGER_CLICK] = false;\n      this._activeTrigger[TRIGGER_FOCUS] = false;\n      this._activeTrigger[TRIGGER_HOVER] = false;\n      const isAnimated = this.tip.classList.contains(CLASS_NAME_FADE$3);\n\n      this._queueCallback(complete, this.tip, isAnimated);\n\n      this._hoverState = '';\n    }\n\n    update() {\n      if (this._popper !== null) {\n        this._popper.update();\n      }\n    } // Protected\n\n\n    isWithContent() {\n      return Boolean(this.getTitle());\n    }\n\n    getTipElement() {\n      if (this.tip) {\n        return this.tip;\n      }\n\n      const element = document.createElement('div');\n      element.innerHTML = this._config.template;\n      this.tip = element.children[0];\n      return this.tip;\n    }\n\n    setContent() {\n      const tip = this.getTipElement();\n      this.setElementContent(SelectorEngine.findOne(SELECTOR_TOOLTIP_INNER, tip), this.getTitle());\n      tip.classList.remove(CLASS_NAME_FADE$3, CLASS_NAME_SHOW$3);\n    }\n\n    setElementContent(element, content) {\n      if (element === null) {\n        return;\n      }\n\n      if (isElement$1(content)) {\n        content = getElement(content); // content is a DOM node or a jQuery\n\n        if (this._config.html) {\n          if (content.parentNode !== element) {\n            element.innerHTML = '';\n            element.appendChild(content);\n          }\n        } else {\n          element.textContent = content.textContent;\n        }\n\n        return;\n      }\n\n      if (this._config.html) {\n        if (this._config.sanitize) {\n          content = sanitizeHtml(content, this._config.allowList, this._config.sanitizeFn);\n        }\n\n        element.innerHTML = content;\n      } else {\n        element.textContent = content;\n      }\n    }\n\n    getTitle() {\n      let title = this._element.getAttribute('data-bs-original-title');\n\n      if (!title) {\n        title = typeof this._config.title === 'function' ? this._config.title.call(this._element) : this._config.title;\n      }\n\n      return title;\n    }\n\n    updateAttachment(attachment) {\n      if (attachment === 'right') {\n        return 'end';\n      }\n\n      if (attachment === 'left') {\n        return 'start';\n      }\n\n      return attachment;\n    } // Private\n\n\n    _initializeOnDelegatedTarget(event, context) {\n      const dataKey = this.constructor.DATA_KEY;\n      context = context || Data.get(event.delegateTarget, dataKey);\n\n      if (!context) {\n        context = new this.constructor(event.delegateTarget, this._getDelegateConfig());\n        Data.set(event.delegateTarget, dataKey, context);\n      }\n\n      return context;\n    }\n\n    _getOffset() {\n      const {\n        offset\n      } = this._config;\n\n      if (typeof offset === 'string') {\n        return offset.split(',').map(val => Number.parseInt(val, 10));\n      }\n\n      if (typeof offset === 'function') {\n        return popperData => offset(popperData, this._element);\n      }\n\n      return offset;\n    }\n\n    _getPopperConfig(attachment) {\n      const defaultBsPopperConfig = {\n        placement: attachment,\n        modifiers: [{\n          name: 'flip',\n          options: {\n            fallbackPlacements: this._config.fallbackPlacements\n          }\n        }, {\n          name: 'offset',\n          options: {\n            offset: this._getOffset()\n          }\n        }, {\n          name: 'preventOverflow',\n          options: {\n            boundary: this._config.boundary\n          }\n        }, {\n          name: 'arrow',\n          options: {\n            element: `.${this.constructor.NAME}-arrow`\n          }\n        }, {\n          name: 'onChange',\n          enabled: true,\n          phase: 'afterWrite',\n          fn: data => this._handlePopperPlacementChange(data)\n        }],\n        onFirstUpdate: data => {\n          if (data.options.placement !== data.placement) {\n            this._handlePopperPlacementChange(data);\n          }\n        }\n      };\n      return { ...defaultBsPopperConfig,\n        ...(typeof this._config.popperConfig === 'function' ? this._config.popperConfig(defaultBsPopperConfig) : this._config.popperConfig)\n      };\n    }\n\n    _addAttachmentClass(attachment) {\n      this.getTipElement().classList.add(`${CLASS_PREFIX$1}-${this.updateAttachment(attachment)}`);\n    }\n\n    _getAttachment(placement) {\n      return AttachmentMap[placement.toUpperCase()];\n    }\n\n    _setListeners() {\n      const triggers = this._config.trigger.split(' ');\n\n      triggers.forEach(trigger => {\n        if (trigger === 'click') {\n          EventHandler.on(this._element, this.constructor.Event.CLICK, this._config.selector, event => this.toggle(event));\n        } else if (trigger !== TRIGGER_MANUAL) {\n          const eventIn = trigger === TRIGGER_HOVER ? this.constructor.Event.MOUSEENTER : this.constructor.Event.FOCUSIN;\n          const eventOut = trigger === TRIGGER_HOVER ? this.constructor.Event.MOUSELEAVE : this.constructor.Event.FOCUSOUT;\n          EventHandler.on(this._element, eventIn, this._config.selector, event => this._enter(event));\n          EventHandler.on(this._element, eventOut, this._config.selector, event => this._leave(event));\n        }\n      });\n\n      this._hideModalHandler = () => {\n        if (this._element) {\n          this.hide();\n        }\n      };\n\n      EventHandler.on(this._element.closest(`.${CLASS_NAME_MODAL}`), 'hide.bs.modal', this._hideModalHandler);\n\n      if (this._config.selector) {\n        this._config = { ...this._config,\n          trigger: 'manual',\n          selector: ''\n        };\n      } else {\n        this._fixTitle();\n      }\n    }\n\n    _fixTitle() {\n      const title = this._element.getAttribute('title');\n\n      const originalTitleType = typeof this._element.getAttribute('data-bs-original-title');\n\n      if (title || originalTitleType !== 'string') {\n        this._element.setAttribute('data-bs-original-title', title || '');\n\n        if (title && !this._element.getAttribute('aria-label') && !this._element.textContent) {\n          this._element.setAttribute('aria-label', title);\n        }\n\n        this._element.setAttribute('title', '');\n      }\n    }\n\n    _enter(event, context) {\n      context = this._initializeOnDelegatedTarget(event, context);\n\n      if (event) {\n        context._activeTrigger[event.type === 'focusin' ? TRIGGER_FOCUS : TRIGGER_HOVER] = true;\n      }\n\n      if (context.getTipElement().classList.contains(CLASS_NAME_SHOW$3) || context._hoverState === HOVER_STATE_SHOW) {\n        context._hoverState = HOVER_STATE_SHOW;\n        return;\n      }\n\n      clearTimeout(context._timeout);\n      context._hoverState = HOVER_STATE_SHOW;\n\n      if (!context._config.delay || !context._config.delay.show) {\n        context.show();\n        return;\n      }\n\n      context._timeout = setTimeout(() => {\n        if (context._hoverState === HOVER_STATE_SHOW) {\n          context.show();\n        }\n      }, context._config.delay.show);\n    }\n\n    _leave(event, context) {\n      context = this._initializeOnDelegatedTarget(event, context);\n\n      if (event) {\n        context._activeTrigger[event.type === 'focusout' ? TRIGGER_FOCUS : TRIGGER_HOVER] = context._element.contains(event.relatedTarget);\n      }\n\n      if (context._isWithActiveTrigger()) {\n        return;\n      }\n\n      clearTimeout(context._timeout);\n      context._hoverState = HOVER_STATE_OUT;\n\n      if (!context._config.delay || !context._config.delay.hide) {\n        context.hide();\n        return;\n      }\n\n      context._timeout = setTimeout(() => {\n        if (context._hoverState === HOVER_STATE_OUT) {\n          context.hide();\n        }\n      }, context._config.delay.hide);\n    }\n\n    _isWithActiveTrigger() {\n      for (const trigger in this._activeTrigger) {\n        if (this._activeTrigger[trigger]) {\n          return true;\n        }\n      }\n\n      return false;\n    }\n\n    _getConfig(config) {\n      const dataAttributes = Manipulator.getDataAttributes(this._element);\n      Object.keys(dataAttributes).forEach(dataAttr => {\n        if (DISALLOWED_ATTRIBUTES.has(dataAttr)) {\n          delete dataAttributes[dataAttr];\n        }\n      });\n      config = { ...this.constructor.Default,\n        ...dataAttributes,\n        ...(typeof config === 'object' && config ? config : {})\n      };\n      config.container = config.container === false ? document.body : getElement(config.container);\n\n      if (typeof config.delay === 'number') {\n        config.delay = {\n          show: config.delay,\n          hide: config.delay\n        };\n      }\n\n      if (typeof config.title === 'number') {\n        config.title = config.title.toString();\n      }\n\n      if (typeof config.content === 'number') {\n        config.content = config.content.toString();\n      }\n\n      typeCheckConfig(NAME$4, config, this.constructor.DefaultType);\n\n      if (config.sanitize) {\n        config.template = sanitizeHtml(config.template, config.allowList, config.sanitizeFn);\n      }\n\n      return config;\n    }\n\n    _getDelegateConfig() {\n      const config = {};\n\n      if (this._config) {\n        for (const key in this._config) {\n          if (this.constructor.Default[key] !== this._config[key]) {\n            config[key] = this._config[key];\n          }\n        }\n      }\n\n      return config;\n    }\n\n    _cleanTipClass() {\n      const tip = this.getTipElement();\n      const tabClass = tip.getAttribute('class').match(BSCLS_PREFIX_REGEX$1);\n\n      if (tabClass !== null && tabClass.length > 0) {\n        tabClass.map(token => token.trim()).forEach(tClass => tip.classList.remove(tClass));\n      }\n    }\n\n    _handlePopperPlacementChange(popperData) {\n      const {\n        state\n      } = popperData;\n\n      if (!state) {\n        return;\n      }\n\n      this.tip = state.elements.popper;\n\n      this._cleanTipClass();\n\n      this._addAttachmentClass(this._getAttachment(state.placement));\n    } // Static\n\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = Tooltip.getOrCreateInstance(this, config);\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(`No method named \"${config}\"`);\n          }\n\n          data[config]();\n        }\n      });\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Tooltip to jQuery only if jQuery is present\n   */\n\n\n  defineJQueryPlugin(Tooltip);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): popover.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$3 = 'popover';\n  const DATA_KEY$3 = 'bs.popover';\n  const EVENT_KEY$3 = `.${DATA_KEY$3}`;\n  const CLASS_PREFIX = 'bs-popover';\n  const BSCLS_PREFIX_REGEX = new RegExp(`(^|\\\\s)${CLASS_PREFIX}\\\\S+`, 'g');\n  const Default$2 = { ...Tooltip.Default,\n    placement: 'right',\n    offset: [0, 8],\n    trigger: 'click',\n    content: '',\n    template: '<div class=\"popover\" role=\"tooltip\">' + '<div class=\"popover-arrow\"></div>' + '<h3 class=\"popover-header\"></h3>' + '<div class=\"popover-body\"></div>' + '</div>'\n  };\n  const DefaultType$2 = { ...Tooltip.DefaultType,\n    content: '(string|element|function)'\n  };\n  const Event$1 = {\n    HIDE: `hide${EVENT_KEY$3}`,\n    HIDDEN: `hidden${EVENT_KEY$3}`,\n    SHOW: `show${EVENT_KEY$3}`,\n    SHOWN: `shown${EVENT_KEY$3}`,\n    INSERTED: `inserted${EVENT_KEY$3}`,\n    CLICK: `click${EVENT_KEY$3}`,\n    FOCUSIN: `focusin${EVENT_KEY$3}`,\n    FOCUSOUT: `focusout${EVENT_KEY$3}`,\n    MOUSEENTER: `mouseenter${EVENT_KEY$3}`,\n    MOUSELEAVE: `mouseleave${EVENT_KEY$3}`\n  };\n  const CLASS_NAME_FADE$2 = 'fade';\n  const CLASS_NAME_SHOW$2 = 'show';\n  const SELECTOR_TITLE = '.popover-header';\n  const SELECTOR_CONTENT = '.popover-body';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Popover extends Tooltip {\n    // Getters\n    static get Default() {\n      return Default$2;\n    }\n\n    static get NAME() {\n      return NAME$3;\n    }\n\n    static get Event() {\n      return Event$1;\n    }\n\n    static get DefaultType() {\n      return DefaultType$2;\n    } // Overrides\n\n\n    isWithContent() {\n      return this.getTitle() || this._getContent();\n    }\n\n    getTipElement() {\n      if (this.tip) {\n        return this.tip;\n      }\n\n      this.tip = super.getTipElement();\n\n      if (!this.getTitle()) {\n        SelectorEngine.findOne(SELECTOR_TITLE, this.tip).remove();\n      }\n\n      if (!this._getContent()) {\n        SelectorEngine.findOne(SELECTOR_CONTENT, this.tip).remove();\n      }\n\n      return this.tip;\n    }\n\n    setContent() {\n      const tip = this.getTipElement(); // we use append for html objects to maintain js events\n\n      this.setElementContent(SelectorEngine.findOne(SELECTOR_TITLE, tip), this.getTitle());\n\n      let content = this._getContent();\n\n      if (typeof content === 'function') {\n        content = content.call(this._element);\n      }\n\n      this.setElementContent(SelectorEngine.findOne(SELECTOR_CONTENT, tip), content);\n      tip.classList.remove(CLASS_NAME_FADE$2, CLASS_NAME_SHOW$2);\n    } // Private\n\n\n    _addAttachmentClass(attachment) {\n      this.getTipElement().classList.add(`${CLASS_PREFIX}-${this.updateAttachment(attachment)}`);\n    }\n\n    _getContent() {\n      return this._element.getAttribute('data-bs-content') || this._config.content;\n    }\n\n    _cleanTipClass() {\n      const tip = this.getTipElement();\n      const tabClass = tip.getAttribute('class').match(BSCLS_PREFIX_REGEX);\n\n      if (tabClass !== null && tabClass.length > 0) {\n        tabClass.map(token => token.trim()).forEach(tClass => tip.classList.remove(tClass));\n      }\n    } // Static\n\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = Popover.getOrCreateInstance(this, config);\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(`No method named \"${config}\"`);\n          }\n\n          data[config]();\n        }\n      });\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Popover to jQuery only if jQuery is present\n   */\n\n\n  defineJQueryPlugin(Popover);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): scrollspy.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$2 = 'scrollspy';\n  const DATA_KEY$2 = 'bs.scrollspy';\n  const EVENT_KEY$2 = `.${DATA_KEY$2}`;\n  const DATA_API_KEY$1 = '.data-api';\n  const Default$1 = {\n    offset: 10,\n    method: 'auto',\n    target: ''\n  };\n  const DefaultType$1 = {\n    offset: 'number',\n    method: 'string',\n    target: '(string|element)'\n  };\n  const EVENT_ACTIVATE = `activate${EVENT_KEY$2}`;\n  const EVENT_SCROLL = `scroll${EVENT_KEY$2}`;\n  const EVENT_LOAD_DATA_API = `load${EVENT_KEY$2}${DATA_API_KEY$1}`;\n  const CLASS_NAME_DROPDOWN_ITEM = 'dropdown-item';\n  const CLASS_NAME_ACTIVE$1 = 'active';\n  const SELECTOR_DATA_SPY = '[data-bs-spy=\"scroll\"]';\n  const SELECTOR_NAV_LIST_GROUP$1 = '.nav, .list-group';\n  const SELECTOR_NAV_LINKS = '.nav-link';\n  const SELECTOR_NAV_ITEMS = '.nav-item';\n  const SELECTOR_LIST_ITEMS = '.list-group-item';\n  const SELECTOR_DROPDOWN$1 = '.dropdown';\n  const SELECTOR_DROPDOWN_TOGGLE$1 = '.dropdown-toggle';\n  const METHOD_OFFSET = 'offset';\n  const METHOD_POSITION = 'position';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class ScrollSpy extends BaseComponent {\n    constructor(element, config) {\n      super(element);\n      this._scrollElement = this._element.tagName === 'BODY' ? window : this._element;\n      this._config = this._getConfig(config);\n      this._selector = `${this._config.target} ${SELECTOR_NAV_LINKS}, ${this._config.target} ${SELECTOR_LIST_ITEMS}, ${this._config.target} .${CLASS_NAME_DROPDOWN_ITEM}`;\n      this._offsets = [];\n      this._targets = [];\n      this._activeTarget = null;\n      this._scrollHeight = 0;\n      EventHandler.on(this._scrollElement, EVENT_SCROLL, () => this._process());\n      this.refresh();\n\n      this._process();\n    } // Getters\n\n\n    static get Default() {\n      return Default$1;\n    }\n\n    static get NAME() {\n      return NAME$2;\n    } // Public\n\n\n    refresh() {\n      const autoMethod = this._scrollElement === this._scrollElement.window ? METHOD_OFFSET : METHOD_POSITION;\n      const offsetMethod = this._config.method === 'auto' ? autoMethod : this._config.method;\n      const offsetBase = offsetMethod === METHOD_POSITION ? this._getScrollTop() : 0;\n      this._offsets = [];\n      this._targets = [];\n      this._scrollHeight = this._getScrollHeight();\n      const targets = SelectorEngine.find(this._selector);\n      targets.map(element => {\n        const targetSelector = getSelectorFromElement(element);\n        const target = targetSelector ? SelectorEngine.findOne(targetSelector) : null;\n\n        if (target) {\n          const targetBCR = target.getBoundingClientRect();\n\n          if (targetBCR.width || targetBCR.height) {\n            return [Manipulator[offsetMethod](target).top + offsetBase, targetSelector];\n          }\n        }\n\n        return null;\n      }).filter(item => item).sort((a, b) => a[0] - b[0]).forEach(item => {\n        this._offsets.push(item[0]);\n\n        this._targets.push(item[1]);\n      });\n    }\n\n    dispose() {\n      EventHandler.off(this._scrollElement, EVENT_KEY$2);\n      super.dispose();\n    } // Private\n\n\n    _getConfig(config) {\n      config = { ...Default$1,\n        ...Manipulator.getDataAttributes(this._element),\n        ...(typeof config === 'object' && config ? config : {})\n      };\n\n      if (typeof config.target !== 'string' && isElement$1(config.target)) {\n        let {\n          id\n        } = config.target;\n\n        if (!id) {\n          id = getUID(NAME$2);\n          config.target.id = id;\n        }\n\n        config.target = `#${id}`;\n      }\n\n      typeCheckConfig(NAME$2, config, DefaultType$1);\n      return config;\n    }\n\n    _getScrollTop() {\n      return this._scrollElement === window ? this._scrollElement.pageYOffset : this._scrollElement.scrollTop;\n    }\n\n    _getScrollHeight() {\n      return this._scrollElement.scrollHeight || Math.max(document.body.scrollHeight, document.documentElement.scrollHeight);\n    }\n\n    _getOffsetHeight() {\n      return this._scrollElement === window ? window.innerHeight : this._scrollElement.getBoundingClientRect().height;\n    }\n\n    _process() {\n      const scrollTop = this._getScrollTop() + this._config.offset;\n\n      const scrollHeight = this._getScrollHeight();\n\n      const maxScroll = this._config.offset + scrollHeight - this._getOffsetHeight();\n\n      if (this._scrollHeight !== scrollHeight) {\n        this.refresh();\n      }\n\n      if (scrollTop >= maxScroll) {\n        const target = this._targets[this._targets.length - 1];\n\n        if (this._activeTarget !== target) {\n          this._activate(target);\n        }\n\n        return;\n      }\n\n      if (this._activeTarget && scrollTop < this._offsets[0] && this._offsets[0] > 0) {\n        this._activeTarget = null;\n\n        this._clear();\n\n        return;\n      }\n\n      for (let i = this._offsets.length; i--;) {\n        const isActiveTarget = this._activeTarget !== this._targets[i] && scrollTop >= this._offsets[i] && (typeof this._offsets[i + 1] === 'undefined' || scrollTop < this._offsets[i + 1]);\n\n        if (isActiveTarget) {\n          this._activate(this._targets[i]);\n        }\n      }\n    }\n\n    _activate(target) {\n      this._activeTarget = target;\n\n      this._clear();\n\n      const queries = this._selector.split(',').map(selector => `${selector}[data-bs-target=\"${target}\"],${selector}[href=\"${target}\"]`);\n\n      const link = SelectorEngine.findOne(queries.join(','));\n\n      if (link.classList.contains(CLASS_NAME_DROPDOWN_ITEM)) {\n        SelectorEngine.findOne(SELECTOR_DROPDOWN_TOGGLE$1, link.closest(SELECTOR_DROPDOWN$1)).classList.add(CLASS_NAME_ACTIVE$1);\n        link.classList.add(CLASS_NAME_ACTIVE$1);\n      } else {\n        // Set triggered link as active\n        link.classList.add(CLASS_NAME_ACTIVE$1);\n        SelectorEngine.parents(link, SELECTOR_NAV_LIST_GROUP$1).forEach(listGroup => {\n          // Set triggered links parents as active\n          // With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor\n          SelectorEngine.prev(listGroup, `${SELECTOR_NAV_LINKS}, ${SELECTOR_LIST_ITEMS}`).forEach(item => item.classList.add(CLASS_NAME_ACTIVE$1)); // Handle special case when .nav-link is inside .nav-item\n\n          SelectorEngine.prev(listGroup, SELECTOR_NAV_ITEMS).forEach(navItem => {\n            SelectorEngine.children(navItem, SELECTOR_NAV_LINKS).forEach(item => item.classList.add(CLASS_NAME_ACTIVE$1));\n          });\n        });\n      }\n\n      EventHandler.trigger(this._scrollElement, EVENT_ACTIVATE, {\n        relatedTarget: target\n      });\n    }\n\n    _clear() {\n      SelectorEngine.find(this._selector).filter(node => node.classList.contains(CLASS_NAME_ACTIVE$1)).forEach(node => node.classList.remove(CLASS_NAME_ACTIVE$1));\n    } // Static\n\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = ScrollSpy.getOrCreateInstance(this, config);\n\n        if (typeof config !== 'string') {\n          return;\n        }\n\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config]();\n      });\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n    SelectorEngine.find(SELECTOR_DATA_SPY).forEach(spy => new ScrollSpy(spy));\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .ScrollSpy to jQuery only if jQuery is present\n   */\n\n  defineJQueryPlugin(ScrollSpy);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): tab.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$1 = 'tab';\n  const DATA_KEY$1 = 'bs.tab';\n  const EVENT_KEY$1 = `.${DATA_KEY$1}`;\n  const DATA_API_KEY = '.data-api';\n  const EVENT_HIDE$1 = `hide${EVENT_KEY$1}`;\n  const EVENT_HIDDEN$1 = `hidden${EVENT_KEY$1}`;\n  const EVENT_SHOW$1 = `show${EVENT_KEY$1}`;\n  const EVENT_SHOWN$1 = `shown${EVENT_KEY$1}`;\n  const EVENT_CLICK_DATA_API = `click${EVENT_KEY$1}${DATA_API_KEY}`;\n  const CLASS_NAME_DROPDOWN_MENU = 'dropdown-menu';\n  const CLASS_NAME_ACTIVE = 'active';\n  const CLASS_NAME_FADE$1 = 'fade';\n  const CLASS_NAME_SHOW$1 = 'show';\n  const SELECTOR_DROPDOWN = '.dropdown';\n  const SELECTOR_NAV_LIST_GROUP = '.nav, .list-group';\n  const SELECTOR_ACTIVE = '.active';\n  const SELECTOR_ACTIVE_UL = ':scope > li > .active';\n  const SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"tab\"], [data-bs-toggle=\"pill\"], [data-bs-toggle=\"list\"]';\n  const SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle';\n  const SELECTOR_DROPDOWN_ACTIVE_CHILD = ':scope > .dropdown-menu .active';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Tab extends BaseComponent {\n    // Getters\n    static get NAME() {\n      return NAME$1;\n    } // Public\n\n\n    show() {\n      if (this._element.parentNode && this._element.parentNode.nodeType === Node.ELEMENT_NODE && this._element.classList.contains(CLASS_NAME_ACTIVE)) {\n        return;\n      }\n\n      let previous;\n      const target = getElementFromSelector(this._element);\n\n      const listElement = this._element.closest(SELECTOR_NAV_LIST_GROUP);\n\n      if (listElement) {\n        const itemSelector = listElement.nodeName === 'UL' || listElement.nodeName === 'OL' ? SELECTOR_ACTIVE_UL : SELECTOR_ACTIVE;\n        previous = SelectorEngine.find(itemSelector, listElement);\n        previous = previous[previous.length - 1];\n      }\n\n      const hideEvent = previous ? EventHandler.trigger(previous, EVENT_HIDE$1, {\n        relatedTarget: this._element\n      }) : null;\n      const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$1, {\n        relatedTarget: previous\n      });\n\n      if (showEvent.defaultPrevented || hideEvent !== null && hideEvent.defaultPrevented) {\n        return;\n      }\n\n      this._activate(this._element, listElement);\n\n      const complete = () => {\n        EventHandler.trigger(previous, EVENT_HIDDEN$1, {\n          relatedTarget: this._element\n        });\n        EventHandler.trigger(this._element, EVENT_SHOWN$1, {\n          relatedTarget: previous\n        });\n      };\n\n      if (target) {\n        this._activate(target, target.parentNode, complete);\n      } else {\n        complete();\n      }\n    } // Private\n\n\n    _activate(element, container, callback) {\n      const activeElements = container && (container.nodeName === 'UL' || container.nodeName === 'OL') ? SelectorEngine.find(SELECTOR_ACTIVE_UL, container) : SelectorEngine.children(container, SELECTOR_ACTIVE);\n      const active = activeElements[0];\n      const isTransitioning = callback && active && active.classList.contains(CLASS_NAME_FADE$1);\n\n      const complete = () => this._transitionComplete(element, active, callback);\n\n      if (active && isTransitioning) {\n        active.classList.remove(CLASS_NAME_SHOW$1);\n\n        this._queueCallback(complete, element, true);\n      } else {\n        complete();\n      }\n    }\n\n    _transitionComplete(element, active, callback) {\n      if (active) {\n        active.classList.remove(CLASS_NAME_ACTIVE);\n        const dropdownChild = SelectorEngine.findOne(SELECTOR_DROPDOWN_ACTIVE_CHILD, active.parentNode);\n\n        if (dropdownChild) {\n          dropdownChild.classList.remove(CLASS_NAME_ACTIVE);\n        }\n\n        if (active.getAttribute('role') === 'tab') {\n          active.setAttribute('aria-selected', false);\n        }\n      }\n\n      element.classList.add(CLASS_NAME_ACTIVE);\n\n      if (element.getAttribute('role') === 'tab') {\n        element.setAttribute('aria-selected', true);\n      }\n\n      reflow(element);\n\n      if (element.classList.contains(CLASS_NAME_FADE$1)) {\n        element.classList.add(CLASS_NAME_SHOW$1);\n      }\n\n      let parent = element.parentNode;\n\n      if (parent && parent.nodeName === 'LI') {\n        parent = parent.parentNode;\n      }\n\n      if (parent && parent.classList.contains(CLASS_NAME_DROPDOWN_MENU)) {\n        const dropdownElement = element.closest(SELECTOR_DROPDOWN);\n\n        if (dropdownElement) {\n          SelectorEngine.find(SELECTOR_DROPDOWN_TOGGLE, dropdownElement).forEach(dropdown => dropdown.classList.add(CLASS_NAME_ACTIVE));\n        }\n\n        element.setAttribute('aria-expanded', true);\n      }\n\n      if (callback) {\n        callback();\n      }\n    } // Static\n\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = Tab.getOrCreateInstance(this);\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(`No method named \"${config}\"`);\n          }\n\n          data[config]();\n        }\n      });\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n    if (['A', 'AREA'].includes(this.tagName)) {\n      event.preventDefault();\n    }\n\n    if (isDisabled(this)) {\n      return;\n    }\n\n    const data = Tab.getOrCreateInstance(this);\n    data.show();\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Tab to jQuery only if jQuery is present\n   */\n\n  defineJQueryPlugin(Tab);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): toast.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME = 'toast';\n  const DATA_KEY = 'bs.toast';\n  const EVENT_KEY = `.${DATA_KEY}`;\n  const EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY}`;\n  const EVENT_MOUSEOVER = `mouseover${EVENT_KEY}`;\n  const EVENT_MOUSEOUT = `mouseout${EVENT_KEY}`;\n  const EVENT_FOCUSIN = `focusin${EVENT_KEY}`;\n  const EVENT_FOCUSOUT = `focusout${EVENT_KEY}`;\n  const EVENT_HIDE = `hide${EVENT_KEY}`;\n  const EVENT_HIDDEN = `hidden${EVENT_KEY}`;\n  const EVENT_SHOW = `show${EVENT_KEY}`;\n  const EVENT_SHOWN = `shown${EVENT_KEY}`;\n  const CLASS_NAME_FADE = 'fade';\n  const CLASS_NAME_HIDE = 'hide';\n  const CLASS_NAME_SHOW = 'show';\n  const CLASS_NAME_SHOWING = 'showing';\n  const DefaultType = {\n    animation: 'boolean',\n    autohide: 'boolean',\n    delay: 'number'\n  };\n  const Default = {\n    animation: true,\n    autohide: true,\n    delay: 5000\n  };\n  const SELECTOR_DATA_DISMISS = '[data-bs-dismiss=\"toast\"]';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Toast extends BaseComponent {\n    constructor(element, config) {\n      super(element);\n      this._config = this._getConfig(config);\n      this._timeout = null;\n      this._hasMouseInteraction = false;\n      this._hasKeyboardInteraction = false;\n\n      this._setListeners();\n    } // Getters\n\n\n    static get DefaultType() {\n      return DefaultType;\n    }\n\n    static get Default() {\n      return Default;\n    }\n\n    static get NAME() {\n      return NAME;\n    } // Public\n\n\n    show() {\n      const showEvent = EventHandler.trigger(this._element, EVENT_SHOW);\n\n      if (showEvent.defaultPrevented) {\n        return;\n      }\n\n      this._clearTimeout();\n\n      if (this._config.animation) {\n        this._element.classList.add(CLASS_NAME_FADE);\n      }\n\n      const complete = () => {\n        this._element.classList.remove(CLASS_NAME_SHOWING);\n\n        this._element.classList.add(CLASS_NAME_SHOW);\n\n        EventHandler.trigger(this._element, EVENT_SHOWN);\n\n        this._maybeScheduleHide();\n      };\n\n      this._element.classList.remove(CLASS_NAME_HIDE);\n\n      reflow(this._element);\n\n      this._element.classList.add(CLASS_NAME_SHOWING);\n\n      this._queueCallback(complete, this._element, this._config.animation);\n    }\n\n    hide() {\n      if (!this._element.classList.contains(CLASS_NAME_SHOW)) {\n        return;\n      }\n\n      const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE);\n\n      if (hideEvent.defaultPrevented) {\n        return;\n      }\n\n      const complete = () => {\n        this._element.classList.add(CLASS_NAME_HIDE);\n\n        EventHandler.trigger(this._element, EVENT_HIDDEN);\n      };\n\n      this._element.classList.remove(CLASS_NAME_SHOW);\n\n      this._queueCallback(complete, this._element, this._config.animation);\n    }\n\n    dispose() {\n      this._clearTimeout();\n\n      if (this._element.classList.contains(CLASS_NAME_SHOW)) {\n        this._element.classList.remove(CLASS_NAME_SHOW);\n      }\n\n      super.dispose();\n    } // Private\n\n\n    _getConfig(config) {\n      config = { ...Default,\n        ...Manipulator.getDataAttributes(this._element),\n        ...(typeof config === 'object' && config ? config : {})\n      };\n      typeCheckConfig(NAME, config, this.constructor.DefaultType);\n      return config;\n    }\n\n    _maybeScheduleHide() {\n      if (!this._config.autohide) {\n        return;\n      }\n\n      if (this._hasMouseInteraction || this._hasKeyboardInteraction) {\n        return;\n      }\n\n      this._timeout = setTimeout(() => {\n        this.hide();\n      }, this._config.delay);\n    }\n\n    _onInteraction(event, isInteracting) {\n      switch (event.type) {\n        case 'mouseover':\n        case 'mouseout':\n          this._hasMouseInteraction = isInteracting;\n          break;\n\n        case 'focusin':\n        case 'focusout':\n          this._hasKeyboardInteraction = isInteracting;\n          break;\n      }\n\n      if (isInteracting) {\n        this._clearTimeout();\n\n        return;\n      }\n\n      const nextElement = event.relatedTarget;\n\n      if (this._element === nextElement || this._element.contains(nextElement)) {\n        return;\n      }\n\n      this._maybeScheduleHide();\n    }\n\n    _setListeners() {\n      EventHandler.on(this._element, EVENT_CLICK_DISMISS, SELECTOR_DATA_DISMISS, () => this.hide());\n      EventHandler.on(this._element, EVENT_MOUSEOVER, event => this._onInteraction(event, true));\n      EventHandler.on(this._element, EVENT_MOUSEOUT, event => this._onInteraction(event, false));\n      EventHandler.on(this._element, EVENT_FOCUSIN, event => this._onInteraction(event, true));\n      EventHandler.on(this._element, EVENT_FOCUSOUT, event => this._onInteraction(event, false));\n    }\n\n    _clearTimeout() {\n      clearTimeout(this._timeout);\n      this._timeout = null;\n    } // Static\n\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = Toast.getOrCreateInstance(this, config);\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(`No method named \"${config}\"`);\n          }\n\n          data[config](this);\n        }\n      });\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Toast to jQuery only if jQuery is present\n   */\n\n\n  defineJQueryPlugin(Toast);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): index.umd.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  var index_umd = {\n    Alert,\n    Button,\n    Carousel,\n    Collapse,\n    Dropdown,\n    Modal,\n    Offcanvas,\n    Popover,\n    ScrollSpy,\n    Tab,\n    Toast,\n    Tooltip\n  };\n\n  return index_umd;\n\n})));\n//# sourceMappingURL=bootstrap.bundle.js.map\n"
  },
  {
    "path": "src/sourceDev.WebApp/SharedThemes/minty/wwwroot/js/bootstrap.esm.js",
    "content": "/*!\n  * Bootstrap v5.0.2 (https://getbootstrap.com/)\n  * Copyright 2011-2021 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)\n  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n  */\nimport * as Popper from '@popperjs/core';\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): dom/selector-engine.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\nconst NODE_TEXT = 3;\nconst SelectorEngine = {\n  find(selector, element = document.documentElement) {\n    return [].concat(...Element.prototype.querySelectorAll.call(element, selector));\n  },\n\n  findOne(selector, element = document.documentElement) {\n    return Element.prototype.querySelector.call(element, selector);\n  },\n\n  children(element, selector) {\n    return [].concat(...element.children).filter(child => child.matches(selector));\n  },\n\n  parents(element, selector) {\n    const parents = [];\n    let ancestor = element.parentNode;\n\n    while (ancestor && ancestor.nodeType === Node.ELEMENT_NODE && ancestor.nodeType !== NODE_TEXT) {\n      if (ancestor.matches(selector)) {\n        parents.push(ancestor);\n      }\n\n      ancestor = ancestor.parentNode;\n    }\n\n    return parents;\n  },\n\n  prev(element, selector) {\n    let previous = element.previousElementSibling;\n\n    while (previous) {\n      if (previous.matches(selector)) {\n        return [previous];\n      }\n\n      previous = previous.previousElementSibling;\n    }\n\n    return [];\n  },\n\n  next(element, selector) {\n    let next = element.nextElementSibling;\n\n    while (next) {\n      if (next.matches(selector)) {\n        return [next];\n      }\n\n      next = next.nextElementSibling;\n    }\n\n    return [];\n  }\n\n};\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): util/index.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst MAX_UID = 1000000;\nconst MILLISECONDS_MULTIPLIER = 1000;\nconst TRANSITION_END = 'transitionend'; // Shoutout AngusCroll (https://goo.gl/pxwQGp)\n\nconst toType = obj => {\n  if (obj === null || obj === undefined) {\n    return `${obj}`;\n  }\n\n  return {}.toString.call(obj).match(/\\s([a-z]+)/i)[1].toLowerCase();\n};\n/**\n * --------------------------------------------------------------------------\n * Public Util Api\n * --------------------------------------------------------------------------\n */\n\n\nconst getUID = prefix => {\n  do {\n    prefix += Math.floor(Math.random() * MAX_UID);\n  } while (document.getElementById(prefix));\n\n  return prefix;\n};\n\nconst getSelector = element => {\n  let selector = element.getAttribute('data-bs-target');\n\n  if (!selector || selector === '#') {\n    let hrefAttr = element.getAttribute('href'); // The only valid content that could double as a selector are IDs or classes,\n    // so everything starting with `#` or `.`. If a \"real\" URL is used as the selector,\n    // `document.querySelector` will rightfully complain it is invalid.\n    // See https://github.com/twbs/bootstrap/issues/32273\n\n    if (!hrefAttr || !hrefAttr.includes('#') && !hrefAttr.startsWith('.')) {\n      return null;\n    } // Just in case some CMS puts out a full URL with the anchor appended\n\n\n    if (hrefAttr.includes('#') && !hrefAttr.startsWith('#')) {\n      hrefAttr = `#${hrefAttr.split('#')[1]}`;\n    }\n\n    selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : null;\n  }\n\n  return selector;\n};\n\nconst getSelectorFromElement = element => {\n  const selector = getSelector(element);\n\n  if (selector) {\n    return document.querySelector(selector) ? selector : null;\n  }\n\n  return null;\n};\n\nconst getElementFromSelector = element => {\n  const selector = getSelector(element);\n  return selector ? document.querySelector(selector) : null;\n};\n\nconst getTransitionDurationFromElement = element => {\n  if (!element) {\n    return 0;\n  } // Get transition-duration of the element\n\n\n  let {\n    transitionDuration,\n    transitionDelay\n  } = window.getComputedStyle(element);\n  const floatTransitionDuration = Number.parseFloat(transitionDuration);\n  const floatTransitionDelay = Number.parseFloat(transitionDelay); // Return 0 if element or transition duration is not found\n\n  if (!floatTransitionDuration && !floatTransitionDelay) {\n    return 0;\n  } // If multiple durations are defined, take the first\n\n\n  transitionDuration = transitionDuration.split(',')[0];\n  transitionDelay = transitionDelay.split(',')[0];\n  return (Number.parseFloat(transitionDuration) + Number.parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER;\n};\n\nconst triggerTransitionEnd = element => {\n  element.dispatchEvent(new Event(TRANSITION_END));\n};\n\nconst isElement = obj => {\n  if (!obj || typeof obj !== 'object') {\n    return false;\n  }\n\n  if (typeof obj.jquery !== 'undefined') {\n    obj = obj[0];\n  }\n\n  return typeof obj.nodeType !== 'undefined';\n};\n\nconst getElement = obj => {\n  if (isElement(obj)) {\n    // it's a jQuery object or a node element\n    return obj.jquery ? obj[0] : obj;\n  }\n\n  if (typeof obj === 'string' && obj.length > 0) {\n    return SelectorEngine.findOne(obj);\n  }\n\n  return null;\n};\n\nconst typeCheckConfig = (componentName, config, configTypes) => {\n  Object.keys(configTypes).forEach(property => {\n    const expectedTypes = configTypes[property];\n    const value = config[property];\n    const valueType = value && isElement(value) ? 'element' : toType(value);\n\n    if (!new RegExp(expectedTypes).test(valueType)) {\n      throw new TypeError(`${componentName.toUpperCase()}: Option \"${property}\" provided type \"${valueType}\" but expected type \"${expectedTypes}\".`);\n    }\n  });\n};\n\nconst isVisible = element => {\n  if (!isElement(element) || element.getClientRects().length === 0) {\n    return false;\n  }\n\n  return getComputedStyle(element).getPropertyValue('visibility') === 'visible';\n};\n\nconst isDisabled = element => {\n  if (!element || element.nodeType !== Node.ELEMENT_NODE) {\n    return true;\n  }\n\n  if (element.classList.contains('disabled')) {\n    return true;\n  }\n\n  if (typeof element.disabled !== 'undefined') {\n    return element.disabled;\n  }\n\n  return element.hasAttribute('disabled') && element.getAttribute('disabled') !== 'false';\n};\n\nconst findShadowRoot = element => {\n  if (!document.documentElement.attachShadow) {\n    return null;\n  } // Can find the shadow root otherwise it'll return the document\n\n\n  if (typeof element.getRootNode === 'function') {\n    const root = element.getRootNode();\n    return root instanceof ShadowRoot ? root : null;\n  }\n\n  if (element instanceof ShadowRoot) {\n    return element;\n  } // when we don't find a shadow root\n\n\n  if (!element.parentNode) {\n    return null;\n  }\n\n  return findShadowRoot(element.parentNode);\n};\n\nconst noop = () => {};\n\nconst reflow = element => element.offsetHeight;\n\nconst getjQuery = () => {\n  const {\n    jQuery\n  } = window;\n\n  if (jQuery && !document.body.hasAttribute('data-bs-no-jquery')) {\n    return jQuery;\n  }\n\n  return null;\n};\n\nconst DOMContentLoadedCallbacks = [];\n\nconst onDOMContentLoaded = callback => {\n  if (document.readyState === 'loading') {\n    // add listener on the first call when the document is in loading state\n    if (!DOMContentLoadedCallbacks.length) {\n      document.addEventListener('DOMContentLoaded', () => {\n        DOMContentLoadedCallbacks.forEach(callback => callback());\n      });\n    }\n\n    DOMContentLoadedCallbacks.push(callback);\n  } else {\n    callback();\n  }\n};\n\nconst isRTL = () => document.documentElement.dir === 'rtl';\n\nconst defineJQueryPlugin = plugin => {\n  onDOMContentLoaded(() => {\n    const $ = getjQuery();\n    /* istanbul ignore if */\n\n    if ($) {\n      const name = plugin.NAME;\n      const JQUERY_NO_CONFLICT = $.fn[name];\n      $.fn[name] = plugin.jQueryInterface;\n      $.fn[name].Constructor = plugin;\n\n      $.fn[name].noConflict = () => {\n        $.fn[name] = JQUERY_NO_CONFLICT;\n        return plugin.jQueryInterface;\n      };\n    }\n  });\n};\n\nconst execute = callback => {\n  if (typeof callback === 'function') {\n    callback();\n  }\n};\n\nconst executeAfterTransition = (callback, transitionElement, waitForTransition = true) => {\n  if (!waitForTransition) {\n    execute(callback);\n    return;\n  }\n\n  const durationPadding = 5;\n  const emulatedDuration = getTransitionDurationFromElement(transitionElement) + durationPadding;\n  let called = false;\n\n  const handler = ({\n    target\n  }) => {\n    if (target !== transitionElement) {\n      return;\n    }\n\n    called = true;\n    transitionElement.removeEventListener(TRANSITION_END, handler);\n    execute(callback);\n  };\n\n  transitionElement.addEventListener(TRANSITION_END, handler);\n  setTimeout(() => {\n    if (!called) {\n      triggerTransitionEnd(transitionElement);\n    }\n  }, emulatedDuration);\n};\n/**\n * Return the previous/next element of a list.\n *\n * @param {array} list    The list of elements\n * @param activeElement   The active element\n * @param shouldGetNext   Choose to get next or previous element\n * @param isCycleAllowed\n * @return {Element|elem} The proper element\n */\n\n\nconst getNextActiveElement = (list, activeElement, shouldGetNext, isCycleAllowed) => {\n  let index = list.indexOf(activeElement); // if the element does not exist in the list return an element depending on the direction and if cycle is allowed\n\n  if (index === -1) {\n    return list[!shouldGetNext && isCycleAllowed ? list.length - 1 : 0];\n  }\n\n  const listLength = list.length;\n  index += shouldGetNext ? 1 : -1;\n\n  if (isCycleAllowed) {\n    index = (index + listLength) % listLength;\n  }\n\n  return list[Math.max(0, Math.min(index, listLength - 1))];\n};\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): dom/event-handler.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst namespaceRegex = /[^.]*(?=\\..*)\\.|.*/;\nconst stripNameRegex = /\\..*/;\nconst stripUidRegex = /::\\d+$/;\nconst eventRegistry = {}; // Events storage\n\nlet uidEvent = 1;\nconst customEvents = {\n  mouseenter: 'mouseover',\n  mouseleave: 'mouseout'\n};\nconst customEventsRegex = /^(mouseenter|mouseleave)/i;\nconst nativeEvents = new Set(['click', 'dblclick', 'mouseup', 'mousedown', 'contextmenu', 'mousewheel', 'DOMMouseScroll', 'mouseover', 'mouseout', 'mousemove', 'selectstart', 'selectend', 'keydown', 'keypress', 'keyup', 'orientationchange', 'touchstart', 'touchmove', 'touchend', 'touchcancel', 'pointerdown', 'pointermove', 'pointerup', 'pointerleave', 'pointercancel', 'gesturestart', 'gesturechange', 'gestureend', 'focus', 'blur', 'change', 'reset', 'select', 'submit', 'focusin', 'focusout', 'load', 'unload', 'beforeunload', 'resize', 'move', 'DOMContentLoaded', 'readystatechange', 'error', 'abort', 'scroll']);\n/**\n * ------------------------------------------------------------------------\n * Private methods\n * ------------------------------------------------------------------------\n */\n\nfunction getUidEvent(element, uid) {\n  return uid && `${uid}::${uidEvent++}` || element.uidEvent || uidEvent++;\n}\n\nfunction getEvent(element) {\n  const uid = getUidEvent(element);\n  element.uidEvent = uid;\n  eventRegistry[uid] = eventRegistry[uid] || {};\n  return eventRegistry[uid];\n}\n\nfunction bootstrapHandler(element, fn) {\n  return function handler(event) {\n    event.delegateTarget = element;\n\n    if (handler.oneOff) {\n      EventHandler.off(element, event.type, fn);\n    }\n\n    return fn.apply(element, [event]);\n  };\n}\n\nfunction bootstrapDelegationHandler(element, selector, fn) {\n  return function handler(event) {\n    const domElements = element.querySelectorAll(selector);\n\n    for (let {\n      target\n    } = event; target && target !== this; target = target.parentNode) {\n      for (let i = domElements.length; i--;) {\n        if (domElements[i] === target) {\n          event.delegateTarget = target;\n\n          if (handler.oneOff) {\n            // eslint-disable-next-line unicorn/consistent-destructuring\n            EventHandler.off(element, event.type, selector, fn);\n          }\n\n          return fn.apply(target, [event]);\n        }\n      }\n    } // To please ESLint\n\n\n    return null;\n  };\n}\n\nfunction findHandler(events, handler, delegationSelector = null) {\n  const uidEventList = Object.keys(events);\n\n  for (let i = 0, len = uidEventList.length; i < len; i++) {\n    const event = events[uidEventList[i]];\n\n    if (event.originalHandler === handler && event.delegationSelector === delegationSelector) {\n      return event;\n    }\n  }\n\n  return null;\n}\n\nfunction normalizeParams(originalTypeEvent, handler, delegationFn) {\n  const delegation = typeof handler === 'string';\n  const originalHandler = delegation ? delegationFn : handler;\n  let typeEvent = getTypeEvent(originalTypeEvent);\n  const isNative = nativeEvents.has(typeEvent);\n\n  if (!isNative) {\n    typeEvent = originalTypeEvent;\n  }\n\n  return [delegation, originalHandler, typeEvent];\n}\n\nfunction addHandler(element, originalTypeEvent, handler, delegationFn, oneOff) {\n  if (typeof originalTypeEvent !== 'string' || !element) {\n    return;\n  }\n\n  if (!handler) {\n    handler = delegationFn;\n    delegationFn = null;\n  } // in case of mouseenter or mouseleave wrap the handler within a function that checks for its DOM position\n  // this prevents the handler from being dispatched the same way as mouseover or mouseout does\n\n\n  if (customEventsRegex.test(originalTypeEvent)) {\n    const wrapFn = fn => {\n      return function (event) {\n        if (!event.relatedTarget || event.relatedTarget !== event.delegateTarget && !event.delegateTarget.contains(event.relatedTarget)) {\n          return fn.call(this, event);\n        }\n      };\n    };\n\n    if (delegationFn) {\n      delegationFn = wrapFn(delegationFn);\n    } else {\n      handler = wrapFn(handler);\n    }\n  }\n\n  const [delegation, originalHandler, typeEvent] = normalizeParams(originalTypeEvent, handler, delegationFn);\n  const events = getEvent(element);\n  const handlers = events[typeEvent] || (events[typeEvent] = {});\n  const previousFn = findHandler(handlers, originalHandler, delegation ? handler : null);\n\n  if (previousFn) {\n    previousFn.oneOff = previousFn.oneOff && oneOff;\n    return;\n  }\n\n  const uid = getUidEvent(originalHandler, originalTypeEvent.replace(namespaceRegex, ''));\n  const fn = delegation ? bootstrapDelegationHandler(element, handler, delegationFn) : bootstrapHandler(element, handler);\n  fn.delegationSelector = delegation ? handler : null;\n  fn.originalHandler = originalHandler;\n  fn.oneOff = oneOff;\n  fn.uidEvent = uid;\n  handlers[uid] = fn;\n  element.addEventListener(typeEvent, fn, delegation);\n}\n\nfunction removeHandler(element, events, typeEvent, handler, delegationSelector) {\n  const fn = findHandler(events[typeEvent], handler, delegationSelector);\n\n  if (!fn) {\n    return;\n  }\n\n  element.removeEventListener(typeEvent, fn, Boolean(delegationSelector));\n  delete events[typeEvent][fn.uidEvent];\n}\n\nfunction removeNamespacedHandlers(element, events, typeEvent, namespace) {\n  const storeElementEvent = events[typeEvent] || {};\n  Object.keys(storeElementEvent).forEach(handlerKey => {\n    if (handlerKey.includes(namespace)) {\n      const event = storeElementEvent[handlerKey];\n      removeHandler(element, events, typeEvent, event.originalHandler, event.delegationSelector);\n    }\n  });\n}\n\nfunction getTypeEvent(event) {\n  // allow to get the native events from namespaced events ('click.bs.button' --> 'click')\n  event = event.replace(stripNameRegex, '');\n  return customEvents[event] || event;\n}\n\nconst EventHandler = {\n  on(element, event, handler, delegationFn) {\n    addHandler(element, event, handler, delegationFn, false);\n  },\n\n  one(element, event, handler, delegationFn) {\n    addHandler(element, event, handler, delegationFn, true);\n  },\n\n  off(element, originalTypeEvent, handler, delegationFn) {\n    if (typeof originalTypeEvent !== 'string' || !element) {\n      return;\n    }\n\n    const [delegation, originalHandler, typeEvent] = normalizeParams(originalTypeEvent, handler, delegationFn);\n    const inNamespace = typeEvent !== originalTypeEvent;\n    const events = getEvent(element);\n    const isNamespace = originalTypeEvent.startsWith('.');\n\n    if (typeof originalHandler !== 'undefined') {\n      // Simplest case: handler is passed, remove that listener ONLY.\n      if (!events || !events[typeEvent]) {\n        return;\n      }\n\n      removeHandler(element, events, typeEvent, originalHandler, delegation ? handler : null);\n      return;\n    }\n\n    if (isNamespace) {\n      Object.keys(events).forEach(elementEvent => {\n        removeNamespacedHandlers(element, events, elementEvent, originalTypeEvent.slice(1));\n      });\n    }\n\n    const storeElementEvent = events[typeEvent] || {};\n    Object.keys(storeElementEvent).forEach(keyHandlers => {\n      const handlerKey = keyHandlers.replace(stripUidRegex, '');\n\n      if (!inNamespace || originalTypeEvent.includes(handlerKey)) {\n        const event = storeElementEvent[keyHandlers];\n        removeHandler(element, events, typeEvent, event.originalHandler, event.delegationSelector);\n      }\n    });\n  },\n\n  trigger(element, event, args) {\n    if (typeof event !== 'string' || !element) {\n      return null;\n    }\n\n    const $ = getjQuery();\n    const typeEvent = getTypeEvent(event);\n    const inNamespace = event !== typeEvent;\n    const isNative = nativeEvents.has(typeEvent);\n    let jQueryEvent;\n    let bubbles = true;\n    let nativeDispatch = true;\n    let defaultPrevented = false;\n    let evt = null;\n\n    if (inNamespace && $) {\n      jQueryEvent = $.Event(event, args);\n      $(element).trigger(jQueryEvent);\n      bubbles = !jQueryEvent.isPropagationStopped();\n      nativeDispatch = !jQueryEvent.isImmediatePropagationStopped();\n      defaultPrevented = jQueryEvent.isDefaultPrevented();\n    }\n\n    if (isNative) {\n      evt = document.createEvent('HTMLEvents');\n      evt.initEvent(typeEvent, bubbles, true);\n    } else {\n      evt = new CustomEvent(event, {\n        bubbles,\n        cancelable: true\n      });\n    } // merge custom information in our event\n\n\n    if (typeof args !== 'undefined') {\n      Object.keys(args).forEach(key => {\n        Object.defineProperty(evt, key, {\n          get() {\n            return args[key];\n          }\n\n        });\n      });\n    }\n\n    if (defaultPrevented) {\n      evt.preventDefault();\n    }\n\n    if (nativeDispatch) {\n      element.dispatchEvent(evt);\n    }\n\n    if (evt.defaultPrevented && typeof jQueryEvent !== 'undefined') {\n      jQueryEvent.preventDefault();\n    }\n\n    return evt;\n  }\n\n};\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): dom/data.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\nconst elementMap = new Map();\nvar Data = {\n  set(element, key, instance) {\n    if (!elementMap.has(element)) {\n      elementMap.set(element, new Map());\n    }\n\n    const instanceMap = elementMap.get(element); // make it clear we only want one instance per element\n    // can be removed later when multiple key/instances are fine to be used\n\n    if (!instanceMap.has(key) && instanceMap.size !== 0) {\n      // eslint-disable-next-line no-console\n      console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(instanceMap.keys())[0]}.`);\n      return;\n    }\n\n    instanceMap.set(key, instance);\n  },\n\n  get(element, key) {\n    if (elementMap.has(element)) {\n      return elementMap.get(element).get(key) || null;\n    }\n\n    return null;\n  },\n\n  remove(element, key) {\n    if (!elementMap.has(element)) {\n      return;\n    }\n\n    const instanceMap = elementMap.get(element);\n    instanceMap.delete(key); // free up element references if there are no instances left for an element\n\n    if (instanceMap.size === 0) {\n      elementMap.delete(element);\n    }\n  }\n\n};\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): base-component.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst VERSION = '5.0.2';\n\nclass BaseComponent {\n  constructor(element) {\n    element = getElement(element);\n\n    if (!element) {\n      return;\n    }\n\n    this._element = element;\n    Data.set(this._element, this.constructor.DATA_KEY, this);\n  }\n\n  dispose() {\n    Data.remove(this._element, this.constructor.DATA_KEY);\n    EventHandler.off(this._element, this.constructor.EVENT_KEY);\n    Object.getOwnPropertyNames(this).forEach(propertyName => {\n      this[propertyName] = null;\n    });\n  }\n\n  _queueCallback(callback, element, isAnimated = true) {\n    executeAfterTransition(callback, element, isAnimated);\n  }\n  /** Static */\n\n\n  static getInstance(element) {\n    return Data.get(element, this.DATA_KEY);\n  }\n\n  static getOrCreateInstance(element, config = {}) {\n    return this.getInstance(element) || new this(element, typeof config === 'object' ? config : null);\n  }\n\n  static get VERSION() {\n    return VERSION;\n  }\n\n  static get NAME() {\n    throw new Error('You have to implement the static method \"NAME\", for each component!');\n  }\n\n  static get DATA_KEY() {\n    return `bs.${this.NAME}`;\n  }\n\n  static get EVENT_KEY() {\n    return `.${this.DATA_KEY}`;\n  }\n\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): alert.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$c = 'alert';\nconst DATA_KEY$b = 'bs.alert';\nconst EVENT_KEY$b = `.${DATA_KEY$b}`;\nconst DATA_API_KEY$8 = '.data-api';\nconst SELECTOR_DISMISS = '[data-bs-dismiss=\"alert\"]';\nconst EVENT_CLOSE = `close${EVENT_KEY$b}`;\nconst EVENT_CLOSED = `closed${EVENT_KEY$b}`;\nconst EVENT_CLICK_DATA_API$7 = `click${EVENT_KEY$b}${DATA_API_KEY$8}`;\nconst CLASS_NAME_ALERT = 'alert';\nconst CLASS_NAME_FADE$6 = 'fade';\nconst CLASS_NAME_SHOW$9 = 'show';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Alert extends BaseComponent {\n  // Getters\n  static get NAME() {\n    return NAME$c;\n  } // Public\n\n\n  close(element) {\n    const rootElement = element ? this._getRootElement(element) : this._element;\n\n    const customEvent = this._triggerCloseEvent(rootElement);\n\n    if (customEvent === null || customEvent.defaultPrevented) {\n      return;\n    }\n\n    this._removeElement(rootElement);\n  } // Private\n\n\n  _getRootElement(element) {\n    return getElementFromSelector(element) || element.closest(`.${CLASS_NAME_ALERT}`);\n  }\n\n  _triggerCloseEvent(element) {\n    return EventHandler.trigger(element, EVENT_CLOSE);\n  }\n\n  _removeElement(element) {\n    element.classList.remove(CLASS_NAME_SHOW$9);\n    const isAnimated = element.classList.contains(CLASS_NAME_FADE$6);\n\n    this._queueCallback(() => this._destroyElement(element), element, isAnimated);\n  }\n\n  _destroyElement(element) {\n    element.remove();\n    EventHandler.trigger(element, EVENT_CLOSED);\n  } // Static\n\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Alert.getOrCreateInstance(this);\n\n      if (config === 'close') {\n        data[config](this);\n      }\n    });\n  }\n\n  static handleDismiss(alertInstance) {\n    return function (event) {\n      if (event) {\n        event.preventDefault();\n      }\n\n      alertInstance.close(this);\n    };\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$7, SELECTOR_DISMISS, Alert.handleDismiss(new Alert()));\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Alert to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Alert);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): button.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$b = 'button';\nconst DATA_KEY$a = 'bs.button';\nconst EVENT_KEY$a = `.${DATA_KEY$a}`;\nconst DATA_API_KEY$7 = '.data-api';\nconst CLASS_NAME_ACTIVE$3 = 'active';\nconst SELECTOR_DATA_TOGGLE$5 = '[data-bs-toggle=\"button\"]';\nconst EVENT_CLICK_DATA_API$6 = `click${EVENT_KEY$a}${DATA_API_KEY$7}`;\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Button extends BaseComponent {\n  // Getters\n  static get NAME() {\n    return NAME$b;\n  } // Public\n\n\n  toggle() {\n    // Toggle class and sync the `aria-pressed` attribute with the return value of the `.toggle()` method\n    this._element.setAttribute('aria-pressed', this._element.classList.toggle(CLASS_NAME_ACTIVE$3));\n  } // Static\n\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Button.getOrCreateInstance(this);\n\n      if (config === 'toggle') {\n        data[config]();\n      }\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$6, SELECTOR_DATA_TOGGLE$5, event => {\n  event.preventDefault();\n  const button = event.target.closest(SELECTOR_DATA_TOGGLE$5);\n  const data = Button.getOrCreateInstance(button);\n  data.toggle();\n});\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Button to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Button);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): dom/manipulator.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\nfunction normalizeData(val) {\n  if (val === 'true') {\n    return true;\n  }\n\n  if (val === 'false') {\n    return false;\n  }\n\n  if (val === Number(val).toString()) {\n    return Number(val);\n  }\n\n  if (val === '' || val === 'null') {\n    return null;\n  }\n\n  return val;\n}\n\nfunction normalizeDataKey(key) {\n  return key.replace(/[A-Z]/g, chr => `-${chr.toLowerCase()}`);\n}\n\nconst Manipulator = {\n  setDataAttribute(element, key, value) {\n    element.setAttribute(`data-bs-${normalizeDataKey(key)}`, value);\n  },\n\n  removeDataAttribute(element, key) {\n    element.removeAttribute(`data-bs-${normalizeDataKey(key)}`);\n  },\n\n  getDataAttributes(element) {\n    if (!element) {\n      return {};\n    }\n\n    const attributes = {};\n    Object.keys(element.dataset).filter(key => key.startsWith('bs')).forEach(key => {\n      let pureKey = key.replace(/^bs/, '');\n      pureKey = pureKey.charAt(0).toLowerCase() + pureKey.slice(1, pureKey.length);\n      attributes[pureKey] = normalizeData(element.dataset[key]);\n    });\n    return attributes;\n  },\n\n  getDataAttribute(element, key) {\n    return normalizeData(element.getAttribute(`data-bs-${normalizeDataKey(key)}`));\n  },\n\n  offset(element) {\n    const rect = element.getBoundingClientRect();\n    return {\n      top: rect.top + document.body.scrollTop,\n      left: rect.left + document.body.scrollLeft\n    };\n  },\n\n  position(element) {\n    return {\n      top: element.offsetTop,\n      left: element.offsetLeft\n    };\n  }\n\n};\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): carousel.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$a = 'carousel';\nconst DATA_KEY$9 = 'bs.carousel';\nconst EVENT_KEY$9 = `.${DATA_KEY$9}`;\nconst DATA_API_KEY$6 = '.data-api';\nconst ARROW_LEFT_KEY = 'ArrowLeft';\nconst ARROW_RIGHT_KEY = 'ArrowRight';\nconst TOUCHEVENT_COMPAT_WAIT = 500; // Time for mouse compat events to fire after touch\n\nconst SWIPE_THRESHOLD = 40;\nconst Default$9 = {\n  interval: 5000,\n  keyboard: true,\n  slide: false,\n  pause: 'hover',\n  wrap: true,\n  touch: true\n};\nconst DefaultType$9 = {\n  interval: '(number|boolean)',\n  keyboard: 'boolean',\n  slide: '(boolean|string)',\n  pause: '(string|boolean)',\n  wrap: 'boolean',\n  touch: 'boolean'\n};\nconst ORDER_NEXT = 'next';\nconst ORDER_PREV = 'prev';\nconst DIRECTION_LEFT = 'left';\nconst DIRECTION_RIGHT = 'right';\nconst KEY_TO_DIRECTION = {\n  [ARROW_LEFT_KEY]: DIRECTION_RIGHT,\n  [ARROW_RIGHT_KEY]: DIRECTION_LEFT\n};\nconst EVENT_SLIDE = `slide${EVENT_KEY$9}`;\nconst EVENT_SLID = `slid${EVENT_KEY$9}`;\nconst EVENT_KEYDOWN = `keydown${EVENT_KEY$9}`;\nconst EVENT_MOUSEENTER = `mouseenter${EVENT_KEY$9}`;\nconst EVENT_MOUSELEAVE = `mouseleave${EVENT_KEY$9}`;\nconst EVENT_TOUCHSTART = `touchstart${EVENT_KEY$9}`;\nconst EVENT_TOUCHMOVE = `touchmove${EVENT_KEY$9}`;\nconst EVENT_TOUCHEND = `touchend${EVENT_KEY$9}`;\nconst EVENT_POINTERDOWN = `pointerdown${EVENT_KEY$9}`;\nconst EVENT_POINTERUP = `pointerup${EVENT_KEY$9}`;\nconst EVENT_DRAG_START = `dragstart${EVENT_KEY$9}`;\nconst EVENT_LOAD_DATA_API$2 = `load${EVENT_KEY$9}${DATA_API_KEY$6}`;\nconst EVENT_CLICK_DATA_API$5 = `click${EVENT_KEY$9}${DATA_API_KEY$6}`;\nconst CLASS_NAME_CAROUSEL = 'carousel';\nconst CLASS_NAME_ACTIVE$2 = 'active';\nconst CLASS_NAME_SLIDE = 'slide';\nconst CLASS_NAME_END = 'carousel-item-end';\nconst CLASS_NAME_START = 'carousel-item-start';\nconst CLASS_NAME_NEXT = 'carousel-item-next';\nconst CLASS_NAME_PREV = 'carousel-item-prev';\nconst CLASS_NAME_POINTER_EVENT = 'pointer-event';\nconst SELECTOR_ACTIVE$1 = '.active';\nconst SELECTOR_ACTIVE_ITEM = '.active.carousel-item';\nconst SELECTOR_ITEM = '.carousel-item';\nconst SELECTOR_ITEM_IMG = '.carousel-item img';\nconst SELECTOR_NEXT_PREV = '.carousel-item-next, .carousel-item-prev';\nconst SELECTOR_INDICATORS = '.carousel-indicators';\nconst SELECTOR_INDICATOR = '[data-bs-target]';\nconst SELECTOR_DATA_SLIDE = '[data-bs-slide], [data-bs-slide-to]';\nconst SELECTOR_DATA_RIDE = '[data-bs-ride=\"carousel\"]';\nconst POINTER_TYPE_TOUCH = 'touch';\nconst POINTER_TYPE_PEN = 'pen';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Carousel extends BaseComponent {\n  constructor(element, config) {\n    super(element);\n    this._items = null;\n    this._interval = null;\n    this._activeElement = null;\n    this._isPaused = false;\n    this._isSliding = false;\n    this.touchTimeout = null;\n    this.touchStartX = 0;\n    this.touchDeltaX = 0;\n    this._config = this._getConfig(config);\n    this._indicatorsElement = SelectorEngine.findOne(SELECTOR_INDICATORS, this._element);\n    this._touchSupported = 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0;\n    this._pointerEvent = Boolean(window.PointerEvent);\n\n    this._addEventListeners();\n  } // Getters\n\n\n  static get Default() {\n    return Default$9;\n  }\n\n  static get NAME() {\n    return NAME$a;\n  } // Public\n\n\n  next() {\n    this._slide(ORDER_NEXT);\n  }\n\n  nextWhenVisible() {\n    // Don't call next when the page isn't visible\n    // or the carousel or its parent isn't visible\n    if (!document.hidden && isVisible(this._element)) {\n      this.next();\n    }\n  }\n\n  prev() {\n    this._slide(ORDER_PREV);\n  }\n\n  pause(event) {\n    if (!event) {\n      this._isPaused = true;\n    }\n\n    if (SelectorEngine.findOne(SELECTOR_NEXT_PREV, this._element)) {\n      triggerTransitionEnd(this._element);\n      this.cycle(true);\n    }\n\n    clearInterval(this._interval);\n    this._interval = null;\n  }\n\n  cycle(event) {\n    if (!event) {\n      this._isPaused = false;\n    }\n\n    if (this._interval) {\n      clearInterval(this._interval);\n      this._interval = null;\n    }\n\n    if (this._config && this._config.interval && !this._isPaused) {\n      this._updateInterval();\n\n      this._interval = setInterval((document.visibilityState ? this.nextWhenVisible : this.next).bind(this), this._config.interval);\n    }\n  }\n\n  to(index) {\n    this._activeElement = SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element);\n\n    const activeIndex = this._getItemIndex(this._activeElement);\n\n    if (index > this._items.length - 1 || index < 0) {\n      return;\n    }\n\n    if (this._isSliding) {\n      EventHandler.one(this._element, EVENT_SLID, () => this.to(index));\n      return;\n    }\n\n    if (activeIndex === index) {\n      this.pause();\n      this.cycle();\n      return;\n    }\n\n    const order = index > activeIndex ? ORDER_NEXT : ORDER_PREV;\n\n    this._slide(order, this._items[index]);\n  } // Private\n\n\n  _getConfig(config) {\n    config = { ...Default$9,\n      ...Manipulator.getDataAttributes(this._element),\n      ...(typeof config === 'object' ? config : {})\n    };\n    typeCheckConfig(NAME$a, config, DefaultType$9);\n    return config;\n  }\n\n  _handleSwipe() {\n    const absDeltax = Math.abs(this.touchDeltaX);\n\n    if (absDeltax <= SWIPE_THRESHOLD) {\n      return;\n    }\n\n    const direction = absDeltax / this.touchDeltaX;\n    this.touchDeltaX = 0;\n\n    if (!direction) {\n      return;\n    }\n\n    this._slide(direction > 0 ? DIRECTION_RIGHT : DIRECTION_LEFT);\n  }\n\n  _addEventListeners() {\n    if (this._config.keyboard) {\n      EventHandler.on(this._element, EVENT_KEYDOWN, event => this._keydown(event));\n    }\n\n    if (this._config.pause === 'hover') {\n      EventHandler.on(this._element, EVENT_MOUSEENTER, event => this.pause(event));\n      EventHandler.on(this._element, EVENT_MOUSELEAVE, event => this.cycle(event));\n    }\n\n    if (this._config.touch && this._touchSupported) {\n      this._addTouchEventListeners();\n    }\n  }\n\n  _addTouchEventListeners() {\n    const start = event => {\n      if (this._pointerEvent && (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH)) {\n        this.touchStartX = event.clientX;\n      } else if (!this._pointerEvent) {\n        this.touchStartX = event.touches[0].clientX;\n      }\n    };\n\n    const move = event => {\n      // ensure swiping with one touch and not pinching\n      this.touchDeltaX = event.touches && event.touches.length > 1 ? 0 : event.touches[0].clientX - this.touchStartX;\n    };\n\n    const end = event => {\n      if (this._pointerEvent && (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH)) {\n        this.touchDeltaX = event.clientX - this.touchStartX;\n      }\n\n      this._handleSwipe();\n\n      if (this._config.pause === 'hover') {\n        // If it's a touch-enabled device, mouseenter/leave are fired as\n        // part of the mouse compatibility events on first tap - the carousel\n        // would stop cycling until user tapped out of it;\n        // here, we listen for touchend, explicitly pause the carousel\n        // (as if it's the second time we tap on it, mouseenter compat event\n        // is NOT fired) and after a timeout (to allow for mouse compatibility\n        // events to fire) we explicitly restart cycling\n        this.pause();\n\n        if (this.touchTimeout) {\n          clearTimeout(this.touchTimeout);\n        }\n\n        this.touchTimeout = setTimeout(event => this.cycle(event), TOUCHEVENT_COMPAT_WAIT + this._config.interval);\n      }\n    };\n\n    SelectorEngine.find(SELECTOR_ITEM_IMG, this._element).forEach(itemImg => {\n      EventHandler.on(itemImg, EVENT_DRAG_START, e => e.preventDefault());\n    });\n\n    if (this._pointerEvent) {\n      EventHandler.on(this._element, EVENT_POINTERDOWN, event => start(event));\n      EventHandler.on(this._element, EVENT_POINTERUP, event => end(event));\n\n      this._element.classList.add(CLASS_NAME_POINTER_EVENT);\n    } else {\n      EventHandler.on(this._element, EVENT_TOUCHSTART, event => start(event));\n      EventHandler.on(this._element, EVENT_TOUCHMOVE, event => move(event));\n      EventHandler.on(this._element, EVENT_TOUCHEND, event => end(event));\n    }\n  }\n\n  _keydown(event) {\n    if (/input|textarea/i.test(event.target.tagName)) {\n      return;\n    }\n\n    const direction = KEY_TO_DIRECTION[event.key];\n\n    if (direction) {\n      event.preventDefault();\n\n      this._slide(direction);\n    }\n  }\n\n  _getItemIndex(element) {\n    this._items = element && element.parentNode ? SelectorEngine.find(SELECTOR_ITEM, element.parentNode) : [];\n    return this._items.indexOf(element);\n  }\n\n  _getItemByOrder(order, activeElement) {\n    const isNext = order === ORDER_NEXT;\n    return getNextActiveElement(this._items, activeElement, isNext, this._config.wrap);\n  }\n\n  _triggerSlideEvent(relatedTarget, eventDirectionName) {\n    const targetIndex = this._getItemIndex(relatedTarget);\n\n    const fromIndex = this._getItemIndex(SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element));\n\n    return EventHandler.trigger(this._element, EVENT_SLIDE, {\n      relatedTarget,\n      direction: eventDirectionName,\n      from: fromIndex,\n      to: targetIndex\n    });\n  }\n\n  _setActiveIndicatorElement(element) {\n    if (this._indicatorsElement) {\n      const activeIndicator = SelectorEngine.findOne(SELECTOR_ACTIVE$1, this._indicatorsElement);\n      activeIndicator.classList.remove(CLASS_NAME_ACTIVE$2);\n      activeIndicator.removeAttribute('aria-current');\n      const indicators = SelectorEngine.find(SELECTOR_INDICATOR, this._indicatorsElement);\n\n      for (let i = 0; i < indicators.length; i++) {\n        if (Number.parseInt(indicators[i].getAttribute('data-bs-slide-to'), 10) === this._getItemIndex(element)) {\n          indicators[i].classList.add(CLASS_NAME_ACTIVE$2);\n          indicators[i].setAttribute('aria-current', 'true');\n          break;\n        }\n      }\n    }\n  }\n\n  _updateInterval() {\n    const element = this._activeElement || SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element);\n\n    if (!element) {\n      return;\n    }\n\n    const elementInterval = Number.parseInt(element.getAttribute('data-bs-interval'), 10);\n\n    if (elementInterval) {\n      this._config.defaultInterval = this._config.defaultInterval || this._config.interval;\n      this._config.interval = elementInterval;\n    } else {\n      this._config.interval = this._config.defaultInterval || this._config.interval;\n    }\n  }\n\n  _slide(directionOrOrder, element) {\n    const order = this._directionToOrder(directionOrOrder);\n\n    const activeElement = SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element);\n\n    const activeElementIndex = this._getItemIndex(activeElement);\n\n    const nextElement = element || this._getItemByOrder(order, activeElement);\n\n    const nextElementIndex = this._getItemIndex(nextElement);\n\n    const isCycling = Boolean(this._interval);\n    const isNext = order === ORDER_NEXT;\n    const directionalClassName = isNext ? CLASS_NAME_START : CLASS_NAME_END;\n    const orderClassName = isNext ? CLASS_NAME_NEXT : CLASS_NAME_PREV;\n\n    const eventDirectionName = this._orderToDirection(order);\n\n    if (nextElement && nextElement.classList.contains(CLASS_NAME_ACTIVE$2)) {\n      this._isSliding = false;\n      return;\n    }\n\n    if (this._isSliding) {\n      return;\n    }\n\n    const slideEvent = this._triggerSlideEvent(nextElement, eventDirectionName);\n\n    if (slideEvent.defaultPrevented) {\n      return;\n    }\n\n    if (!activeElement || !nextElement) {\n      // Some weirdness is happening, so we bail\n      return;\n    }\n\n    this._isSliding = true;\n\n    if (isCycling) {\n      this.pause();\n    }\n\n    this._setActiveIndicatorElement(nextElement);\n\n    this._activeElement = nextElement;\n\n    const triggerSlidEvent = () => {\n      EventHandler.trigger(this._element, EVENT_SLID, {\n        relatedTarget: nextElement,\n        direction: eventDirectionName,\n        from: activeElementIndex,\n        to: nextElementIndex\n      });\n    };\n\n    if (this._element.classList.contains(CLASS_NAME_SLIDE)) {\n      nextElement.classList.add(orderClassName);\n      reflow(nextElement);\n      activeElement.classList.add(directionalClassName);\n      nextElement.classList.add(directionalClassName);\n\n      const completeCallBack = () => {\n        nextElement.classList.remove(directionalClassName, orderClassName);\n        nextElement.classList.add(CLASS_NAME_ACTIVE$2);\n        activeElement.classList.remove(CLASS_NAME_ACTIVE$2, orderClassName, directionalClassName);\n        this._isSliding = false;\n        setTimeout(triggerSlidEvent, 0);\n      };\n\n      this._queueCallback(completeCallBack, activeElement, true);\n    } else {\n      activeElement.classList.remove(CLASS_NAME_ACTIVE$2);\n      nextElement.classList.add(CLASS_NAME_ACTIVE$2);\n      this._isSliding = false;\n      triggerSlidEvent();\n    }\n\n    if (isCycling) {\n      this.cycle();\n    }\n  }\n\n  _directionToOrder(direction) {\n    if (![DIRECTION_RIGHT, DIRECTION_LEFT].includes(direction)) {\n      return direction;\n    }\n\n    if (isRTL()) {\n      return direction === DIRECTION_LEFT ? ORDER_PREV : ORDER_NEXT;\n    }\n\n    return direction === DIRECTION_LEFT ? ORDER_NEXT : ORDER_PREV;\n  }\n\n  _orderToDirection(order) {\n    if (![ORDER_NEXT, ORDER_PREV].includes(order)) {\n      return order;\n    }\n\n    if (isRTL()) {\n      return order === ORDER_PREV ? DIRECTION_LEFT : DIRECTION_RIGHT;\n    }\n\n    return order === ORDER_PREV ? DIRECTION_RIGHT : DIRECTION_LEFT;\n  } // Static\n\n\n  static carouselInterface(element, config) {\n    const data = Carousel.getOrCreateInstance(element, config);\n    let {\n      _config\n    } = data;\n\n    if (typeof config === 'object') {\n      _config = { ..._config,\n        ...config\n      };\n    }\n\n    const action = typeof config === 'string' ? config : _config.slide;\n\n    if (typeof config === 'number') {\n      data.to(config);\n    } else if (typeof action === 'string') {\n      if (typeof data[action] === 'undefined') {\n        throw new TypeError(`No method named \"${action}\"`);\n      }\n\n      data[action]();\n    } else if (_config.interval && _config.ride) {\n      data.pause();\n      data.cycle();\n    }\n  }\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      Carousel.carouselInterface(this, config);\n    });\n  }\n\n  static dataApiClickHandler(event) {\n    const target = getElementFromSelector(this);\n\n    if (!target || !target.classList.contains(CLASS_NAME_CAROUSEL)) {\n      return;\n    }\n\n    const config = { ...Manipulator.getDataAttributes(target),\n      ...Manipulator.getDataAttributes(this)\n    };\n    const slideIndex = this.getAttribute('data-bs-slide-to');\n\n    if (slideIndex) {\n      config.interval = false;\n    }\n\n    Carousel.carouselInterface(target, config);\n\n    if (slideIndex) {\n      Carousel.getInstance(target).to(slideIndex);\n    }\n\n    event.preventDefault();\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$5, SELECTOR_DATA_SLIDE, Carousel.dataApiClickHandler);\nEventHandler.on(window, EVENT_LOAD_DATA_API$2, () => {\n  const carousels = SelectorEngine.find(SELECTOR_DATA_RIDE);\n\n  for (let i = 0, len = carousels.length; i < len; i++) {\n    Carousel.carouselInterface(carousels[i], Carousel.getInstance(carousels[i]));\n  }\n});\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Carousel to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Carousel);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): collapse.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$9 = 'collapse';\nconst DATA_KEY$8 = 'bs.collapse';\nconst EVENT_KEY$8 = `.${DATA_KEY$8}`;\nconst DATA_API_KEY$5 = '.data-api';\nconst Default$8 = {\n  toggle: true,\n  parent: ''\n};\nconst DefaultType$8 = {\n  toggle: 'boolean',\n  parent: '(string|element)'\n};\nconst EVENT_SHOW$5 = `show${EVENT_KEY$8}`;\nconst EVENT_SHOWN$5 = `shown${EVENT_KEY$8}`;\nconst EVENT_HIDE$5 = `hide${EVENT_KEY$8}`;\nconst EVENT_HIDDEN$5 = `hidden${EVENT_KEY$8}`;\nconst EVENT_CLICK_DATA_API$4 = `click${EVENT_KEY$8}${DATA_API_KEY$5}`;\nconst CLASS_NAME_SHOW$8 = 'show';\nconst CLASS_NAME_COLLAPSE = 'collapse';\nconst CLASS_NAME_COLLAPSING = 'collapsing';\nconst CLASS_NAME_COLLAPSED = 'collapsed';\nconst WIDTH = 'width';\nconst HEIGHT = 'height';\nconst SELECTOR_ACTIVES = '.show, .collapsing';\nconst SELECTOR_DATA_TOGGLE$4 = '[data-bs-toggle=\"collapse\"]';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Collapse extends BaseComponent {\n  constructor(element, config) {\n    super(element);\n    this._isTransitioning = false;\n    this._config = this._getConfig(config);\n    this._triggerArray = SelectorEngine.find(`${SELECTOR_DATA_TOGGLE$4}[href=\"#${this._element.id}\"],` + `${SELECTOR_DATA_TOGGLE$4}[data-bs-target=\"#${this._element.id}\"]`);\n    const toggleList = SelectorEngine.find(SELECTOR_DATA_TOGGLE$4);\n\n    for (let i = 0, len = toggleList.length; i < len; i++) {\n      const elem = toggleList[i];\n      const selector = getSelectorFromElement(elem);\n      const filterElement = SelectorEngine.find(selector).filter(foundElem => foundElem === this._element);\n\n      if (selector !== null && filterElement.length) {\n        this._selector = selector;\n\n        this._triggerArray.push(elem);\n      }\n    }\n\n    this._parent = this._config.parent ? this._getParent() : null;\n\n    if (!this._config.parent) {\n      this._addAriaAndCollapsedClass(this._element, this._triggerArray);\n    }\n\n    if (this._config.toggle) {\n      this.toggle();\n    }\n  } // Getters\n\n\n  static get Default() {\n    return Default$8;\n  }\n\n  static get NAME() {\n    return NAME$9;\n  } // Public\n\n\n  toggle() {\n    if (this._element.classList.contains(CLASS_NAME_SHOW$8)) {\n      this.hide();\n    } else {\n      this.show();\n    }\n  }\n\n  show() {\n    if (this._isTransitioning || this._element.classList.contains(CLASS_NAME_SHOW$8)) {\n      return;\n    }\n\n    let actives;\n    let activesData;\n\n    if (this._parent) {\n      actives = SelectorEngine.find(SELECTOR_ACTIVES, this._parent).filter(elem => {\n        if (typeof this._config.parent === 'string') {\n          return elem.getAttribute('data-bs-parent') === this._config.parent;\n        }\n\n        return elem.classList.contains(CLASS_NAME_COLLAPSE);\n      });\n\n      if (actives.length === 0) {\n        actives = null;\n      }\n    }\n\n    const container = SelectorEngine.findOne(this._selector);\n\n    if (actives) {\n      const tempActiveData = actives.find(elem => container !== elem);\n      activesData = tempActiveData ? Collapse.getInstance(tempActiveData) : null;\n\n      if (activesData && activesData._isTransitioning) {\n        return;\n      }\n    }\n\n    const startEvent = EventHandler.trigger(this._element, EVENT_SHOW$5);\n\n    if (startEvent.defaultPrevented) {\n      return;\n    }\n\n    if (actives) {\n      actives.forEach(elemActive => {\n        if (container !== elemActive) {\n          Collapse.collapseInterface(elemActive, 'hide');\n        }\n\n        if (!activesData) {\n          Data.set(elemActive, DATA_KEY$8, null);\n        }\n      });\n    }\n\n    const dimension = this._getDimension();\n\n    this._element.classList.remove(CLASS_NAME_COLLAPSE);\n\n    this._element.classList.add(CLASS_NAME_COLLAPSING);\n\n    this._element.style[dimension] = 0;\n\n    if (this._triggerArray.length) {\n      this._triggerArray.forEach(element => {\n        element.classList.remove(CLASS_NAME_COLLAPSED);\n        element.setAttribute('aria-expanded', true);\n      });\n    }\n\n    this.setTransitioning(true);\n\n    const complete = () => {\n      this._element.classList.remove(CLASS_NAME_COLLAPSING);\n\n      this._element.classList.add(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$8);\n\n      this._element.style[dimension] = '';\n      this.setTransitioning(false);\n      EventHandler.trigger(this._element, EVENT_SHOWN$5);\n    };\n\n    const capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1);\n    const scrollSize = `scroll${capitalizedDimension}`;\n\n    this._queueCallback(complete, this._element, true);\n\n    this._element.style[dimension] = `${this._element[scrollSize]}px`;\n  }\n\n  hide() {\n    if (this._isTransitioning || !this._element.classList.contains(CLASS_NAME_SHOW$8)) {\n      return;\n    }\n\n    const startEvent = EventHandler.trigger(this._element, EVENT_HIDE$5);\n\n    if (startEvent.defaultPrevented) {\n      return;\n    }\n\n    const dimension = this._getDimension();\n\n    this._element.style[dimension] = `${this._element.getBoundingClientRect()[dimension]}px`;\n    reflow(this._element);\n\n    this._element.classList.add(CLASS_NAME_COLLAPSING);\n\n    this._element.classList.remove(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$8);\n\n    const triggerArrayLength = this._triggerArray.length;\n\n    if (triggerArrayLength > 0) {\n      for (let i = 0; i < triggerArrayLength; i++) {\n        const trigger = this._triggerArray[i];\n        const elem = getElementFromSelector(trigger);\n\n        if (elem && !elem.classList.contains(CLASS_NAME_SHOW$8)) {\n          trigger.classList.add(CLASS_NAME_COLLAPSED);\n          trigger.setAttribute('aria-expanded', false);\n        }\n      }\n    }\n\n    this.setTransitioning(true);\n\n    const complete = () => {\n      this.setTransitioning(false);\n\n      this._element.classList.remove(CLASS_NAME_COLLAPSING);\n\n      this._element.classList.add(CLASS_NAME_COLLAPSE);\n\n      EventHandler.trigger(this._element, EVENT_HIDDEN$5);\n    };\n\n    this._element.style[dimension] = '';\n\n    this._queueCallback(complete, this._element, true);\n  }\n\n  setTransitioning(isTransitioning) {\n    this._isTransitioning = isTransitioning;\n  } // Private\n\n\n  _getConfig(config) {\n    config = { ...Default$8,\n      ...config\n    };\n    config.toggle = Boolean(config.toggle); // Coerce string values\n\n    typeCheckConfig(NAME$9, config, DefaultType$8);\n    return config;\n  }\n\n  _getDimension() {\n    return this._element.classList.contains(WIDTH) ? WIDTH : HEIGHT;\n  }\n\n  _getParent() {\n    let {\n      parent\n    } = this._config;\n    parent = getElement(parent);\n    const selector = `${SELECTOR_DATA_TOGGLE$4}[data-bs-parent=\"${parent}\"]`;\n    SelectorEngine.find(selector, parent).forEach(element => {\n      const selected = getElementFromSelector(element);\n\n      this._addAriaAndCollapsedClass(selected, [element]);\n    });\n    return parent;\n  }\n\n  _addAriaAndCollapsedClass(element, triggerArray) {\n    if (!element || !triggerArray.length) {\n      return;\n    }\n\n    const isOpen = element.classList.contains(CLASS_NAME_SHOW$8);\n    triggerArray.forEach(elem => {\n      if (isOpen) {\n        elem.classList.remove(CLASS_NAME_COLLAPSED);\n      } else {\n        elem.classList.add(CLASS_NAME_COLLAPSED);\n      }\n\n      elem.setAttribute('aria-expanded', isOpen);\n    });\n  } // Static\n\n\n  static collapseInterface(element, config) {\n    let data = Collapse.getInstance(element);\n    const _config = { ...Default$8,\n      ...Manipulator.getDataAttributes(element),\n      ...(typeof config === 'object' && config ? config : {})\n    };\n\n    if (!data && _config.toggle && typeof config === 'string' && /show|hide/.test(config)) {\n      _config.toggle = false;\n    }\n\n    if (!data) {\n      data = new Collapse(element, _config);\n    }\n\n    if (typeof config === 'string') {\n      if (typeof data[config] === 'undefined') {\n        throw new TypeError(`No method named \"${config}\"`);\n      }\n\n      data[config]();\n    }\n  }\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      Collapse.collapseInterface(this, config);\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$4, SELECTOR_DATA_TOGGLE$4, function (event) {\n  // preventDefault only for <a> elements (which change the URL) not inside the collapsible element\n  if (event.target.tagName === 'A' || event.delegateTarget && event.delegateTarget.tagName === 'A') {\n    event.preventDefault();\n  }\n\n  const triggerData = Manipulator.getDataAttributes(this);\n  const selector = getSelectorFromElement(this);\n  const selectorElements = SelectorEngine.find(selector);\n  selectorElements.forEach(element => {\n    const data = Collapse.getInstance(element);\n    let config;\n\n    if (data) {\n      // update parent attribute\n      if (data._parent === null && typeof triggerData.parent === 'string') {\n        data._config.parent = triggerData.parent;\n        data._parent = data._getParent();\n      }\n\n      config = 'toggle';\n    } else {\n      config = triggerData;\n    }\n\n    Collapse.collapseInterface(element, config);\n  });\n});\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Collapse to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Collapse);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): dropdown.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$8 = 'dropdown';\nconst DATA_KEY$7 = 'bs.dropdown';\nconst EVENT_KEY$7 = `.${DATA_KEY$7}`;\nconst DATA_API_KEY$4 = '.data-api';\nconst ESCAPE_KEY$2 = 'Escape';\nconst SPACE_KEY = 'Space';\nconst TAB_KEY = 'Tab';\nconst ARROW_UP_KEY = 'ArrowUp';\nconst ARROW_DOWN_KEY = 'ArrowDown';\nconst RIGHT_MOUSE_BUTTON = 2; // MouseEvent.button value for the secondary button, usually the right button\n\nconst REGEXP_KEYDOWN = new RegExp(`${ARROW_UP_KEY}|${ARROW_DOWN_KEY}|${ESCAPE_KEY$2}`);\nconst EVENT_HIDE$4 = `hide${EVENT_KEY$7}`;\nconst EVENT_HIDDEN$4 = `hidden${EVENT_KEY$7}`;\nconst EVENT_SHOW$4 = `show${EVENT_KEY$7}`;\nconst EVENT_SHOWN$4 = `shown${EVENT_KEY$7}`;\nconst EVENT_CLICK = `click${EVENT_KEY$7}`;\nconst EVENT_CLICK_DATA_API$3 = `click${EVENT_KEY$7}${DATA_API_KEY$4}`;\nconst EVENT_KEYDOWN_DATA_API = `keydown${EVENT_KEY$7}${DATA_API_KEY$4}`;\nconst EVENT_KEYUP_DATA_API = `keyup${EVENT_KEY$7}${DATA_API_KEY$4}`;\nconst CLASS_NAME_SHOW$7 = 'show';\nconst CLASS_NAME_DROPUP = 'dropup';\nconst CLASS_NAME_DROPEND = 'dropend';\nconst CLASS_NAME_DROPSTART = 'dropstart';\nconst CLASS_NAME_NAVBAR = 'navbar';\nconst SELECTOR_DATA_TOGGLE$3 = '[data-bs-toggle=\"dropdown\"]';\nconst SELECTOR_MENU = '.dropdown-menu';\nconst SELECTOR_NAVBAR_NAV = '.navbar-nav';\nconst SELECTOR_VISIBLE_ITEMS = '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)';\nconst PLACEMENT_TOP = isRTL() ? 'top-end' : 'top-start';\nconst PLACEMENT_TOPEND = isRTL() ? 'top-start' : 'top-end';\nconst PLACEMENT_BOTTOM = isRTL() ? 'bottom-end' : 'bottom-start';\nconst PLACEMENT_BOTTOMEND = isRTL() ? 'bottom-start' : 'bottom-end';\nconst PLACEMENT_RIGHT = isRTL() ? 'left-start' : 'right-start';\nconst PLACEMENT_LEFT = isRTL() ? 'right-start' : 'left-start';\nconst Default$7 = {\n  offset: [0, 2],\n  boundary: 'clippingParents',\n  reference: 'toggle',\n  display: 'dynamic',\n  popperConfig: null,\n  autoClose: true\n};\nconst DefaultType$7 = {\n  offset: '(array|string|function)',\n  boundary: '(string|element)',\n  reference: '(string|element|object)',\n  display: 'string',\n  popperConfig: '(null|object|function)',\n  autoClose: '(boolean|string)'\n};\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Dropdown extends BaseComponent {\n  constructor(element, config) {\n    super(element);\n    this._popper = null;\n    this._config = this._getConfig(config);\n    this._menu = this._getMenuElement();\n    this._inNavbar = this._detectNavbar();\n\n    this._addEventListeners();\n  } // Getters\n\n\n  static get Default() {\n    return Default$7;\n  }\n\n  static get DefaultType() {\n    return DefaultType$7;\n  }\n\n  static get NAME() {\n    return NAME$8;\n  } // Public\n\n\n  toggle() {\n    if (isDisabled(this._element)) {\n      return;\n    }\n\n    const isActive = this._element.classList.contains(CLASS_NAME_SHOW$7);\n\n    if (isActive) {\n      this.hide();\n      return;\n    }\n\n    this.show();\n  }\n\n  show() {\n    if (isDisabled(this._element) || this._menu.classList.contains(CLASS_NAME_SHOW$7)) {\n      return;\n    }\n\n    const parent = Dropdown.getParentFromElement(this._element);\n    const relatedTarget = {\n      relatedTarget: this._element\n    };\n    const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$4, relatedTarget);\n\n    if (showEvent.defaultPrevented) {\n      return;\n    } // Totally disable Popper for Dropdowns in Navbar\n\n\n    if (this._inNavbar) {\n      Manipulator.setDataAttribute(this._menu, 'popper', 'none');\n    } else {\n      if (typeof Popper === 'undefined') {\n        throw new TypeError('Bootstrap\\'s dropdowns require Popper (https://popper.js.org)');\n      }\n\n      let referenceElement = this._element;\n\n      if (this._config.reference === 'parent') {\n        referenceElement = parent;\n      } else if (isElement(this._config.reference)) {\n        referenceElement = getElement(this._config.reference);\n      } else if (typeof this._config.reference === 'object') {\n        referenceElement = this._config.reference;\n      }\n\n      const popperConfig = this._getPopperConfig();\n\n      const isDisplayStatic = popperConfig.modifiers.find(modifier => modifier.name === 'applyStyles' && modifier.enabled === false);\n      this._popper = Popper.createPopper(referenceElement, this._menu, popperConfig);\n\n      if (isDisplayStatic) {\n        Manipulator.setDataAttribute(this._menu, 'popper', 'static');\n      }\n    } // If this is a touch-enabled device we add extra\n    // empty mouseover listeners to the body's immediate children;\n    // only needed because of broken event delegation on iOS\n    // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n\n\n    if ('ontouchstart' in document.documentElement && !parent.closest(SELECTOR_NAVBAR_NAV)) {\n      [].concat(...document.body.children).forEach(elem => EventHandler.on(elem, 'mouseover', noop));\n    }\n\n    this._element.focus();\n\n    this._element.setAttribute('aria-expanded', true);\n\n    this._menu.classList.toggle(CLASS_NAME_SHOW$7);\n\n    this._element.classList.toggle(CLASS_NAME_SHOW$7);\n\n    EventHandler.trigger(this._element, EVENT_SHOWN$4, relatedTarget);\n  }\n\n  hide() {\n    if (isDisabled(this._element) || !this._menu.classList.contains(CLASS_NAME_SHOW$7)) {\n      return;\n    }\n\n    const relatedTarget = {\n      relatedTarget: this._element\n    };\n\n    this._completeHide(relatedTarget);\n  }\n\n  dispose() {\n    if (this._popper) {\n      this._popper.destroy();\n    }\n\n    super.dispose();\n  }\n\n  update() {\n    this._inNavbar = this._detectNavbar();\n\n    if (this._popper) {\n      this._popper.update();\n    }\n  } // Private\n\n\n  _addEventListeners() {\n    EventHandler.on(this._element, EVENT_CLICK, event => {\n      event.preventDefault();\n      this.toggle();\n    });\n  }\n\n  _completeHide(relatedTarget) {\n    const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$4, relatedTarget);\n\n    if (hideEvent.defaultPrevented) {\n      return;\n    } // If this is a touch-enabled device we remove the extra\n    // empty mouseover listeners we added for iOS support\n\n\n    if ('ontouchstart' in document.documentElement) {\n      [].concat(...document.body.children).forEach(elem => EventHandler.off(elem, 'mouseover', noop));\n    }\n\n    if (this._popper) {\n      this._popper.destroy();\n    }\n\n    this._menu.classList.remove(CLASS_NAME_SHOW$7);\n\n    this._element.classList.remove(CLASS_NAME_SHOW$7);\n\n    this._element.setAttribute('aria-expanded', 'false');\n\n    Manipulator.removeDataAttribute(this._menu, 'popper');\n    EventHandler.trigger(this._element, EVENT_HIDDEN$4, relatedTarget);\n  }\n\n  _getConfig(config) {\n    config = { ...this.constructor.Default,\n      ...Manipulator.getDataAttributes(this._element),\n      ...config\n    };\n    typeCheckConfig(NAME$8, config, this.constructor.DefaultType);\n\n    if (typeof config.reference === 'object' && !isElement(config.reference) && typeof config.reference.getBoundingClientRect !== 'function') {\n      // Popper virtual elements require a getBoundingClientRect method\n      throw new TypeError(`${NAME$8.toUpperCase()}: Option \"reference\" provided type \"object\" without a required \"getBoundingClientRect\" method.`);\n    }\n\n    return config;\n  }\n\n  _getMenuElement() {\n    return SelectorEngine.next(this._element, SELECTOR_MENU)[0];\n  }\n\n  _getPlacement() {\n    const parentDropdown = this._element.parentNode;\n\n    if (parentDropdown.classList.contains(CLASS_NAME_DROPEND)) {\n      return PLACEMENT_RIGHT;\n    }\n\n    if (parentDropdown.classList.contains(CLASS_NAME_DROPSTART)) {\n      return PLACEMENT_LEFT;\n    } // We need to trim the value because custom properties can also include spaces\n\n\n    const isEnd = getComputedStyle(this._menu).getPropertyValue('--bs-position').trim() === 'end';\n\n    if (parentDropdown.classList.contains(CLASS_NAME_DROPUP)) {\n      return isEnd ? PLACEMENT_TOPEND : PLACEMENT_TOP;\n    }\n\n    return isEnd ? PLACEMENT_BOTTOMEND : PLACEMENT_BOTTOM;\n  }\n\n  _detectNavbar() {\n    return this._element.closest(`.${CLASS_NAME_NAVBAR}`) !== null;\n  }\n\n  _getOffset() {\n    const {\n      offset\n    } = this._config;\n\n    if (typeof offset === 'string') {\n      return offset.split(',').map(val => Number.parseInt(val, 10));\n    }\n\n    if (typeof offset === 'function') {\n      return popperData => offset(popperData, this._element);\n    }\n\n    return offset;\n  }\n\n  _getPopperConfig() {\n    const defaultBsPopperConfig = {\n      placement: this._getPlacement(),\n      modifiers: [{\n        name: 'preventOverflow',\n        options: {\n          boundary: this._config.boundary\n        }\n      }, {\n        name: 'offset',\n        options: {\n          offset: this._getOffset()\n        }\n      }]\n    }; // Disable Popper if we have a static display\n\n    if (this._config.display === 'static') {\n      defaultBsPopperConfig.modifiers = [{\n        name: 'applyStyles',\n        enabled: false\n      }];\n    }\n\n    return { ...defaultBsPopperConfig,\n      ...(typeof this._config.popperConfig === 'function' ? this._config.popperConfig(defaultBsPopperConfig) : this._config.popperConfig)\n    };\n  }\n\n  _selectMenuItem({\n    key,\n    target\n  }) {\n    const items = SelectorEngine.find(SELECTOR_VISIBLE_ITEMS, this._menu).filter(isVisible);\n\n    if (!items.length) {\n      return;\n    } // if target isn't included in items (e.g. when expanding the dropdown)\n    // allow cycling to get the last item in case key equals ARROW_UP_KEY\n\n\n    getNextActiveElement(items, target, key === ARROW_DOWN_KEY, !items.includes(target)).focus();\n  } // Static\n\n\n  static dropdownInterface(element, config) {\n    const data = Dropdown.getOrCreateInstance(element, config);\n\n    if (typeof config === 'string') {\n      if (typeof data[config] === 'undefined') {\n        throw new TypeError(`No method named \"${config}\"`);\n      }\n\n      data[config]();\n    }\n  }\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      Dropdown.dropdownInterface(this, config);\n    });\n  }\n\n  static clearMenus(event) {\n    if (event && (event.button === RIGHT_MOUSE_BUTTON || event.type === 'keyup' && event.key !== TAB_KEY)) {\n      return;\n    }\n\n    const toggles = SelectorEngine.find(SELECTOR_DATA_TOGGLE$3);\n\n    for (let i = 0, len = toggles.length; i < len; i++) {\n      const context = Dropdown.getInstance(toggles[i]);\n\n      if (!context || context._config.autoClose === false) {\n        continue;\n      }\n\n      if (!context._element.classList.contains(CLASS_NAME_SHOW$7)) {\n        continue;\n      }\n\n      const relatedTarget = {\n        relatedTarget: context._element\n      };\n\n      if (event) {\n        const composedPath = event.composedPath();\n        const isMenuTarget = composedPath.includes(context._menu);\n\n        if (composedPath.includes(context._element) || context._config.autoClose === 'inside' && !isMenuTarget || context._config.autoClose === 'outside' && isMenuTarget) {\n          continue;\n        } // Tab navigation through the dropdown menu or events from contained inputs shouldn't close the menu\n\n\n        if (context._menu.contains(event.target) && (event.type === 'keyup' && event.key === TAB_KEY || /input|select|option|textarea|form/i.test(event.target.tagName))) {\n          continue;\n        }\n\n        if (event.type === 'click') {\n          relatedTarget.clickEvent = event;\n        }\n      }\n\n      context._completeHide(relatedTarget);\n    }\n  }\n\n  static getParentFromElement(element) {\n    return getElementFromSelector(element) || element.parentNode;\n  }\n\n  static dataApiKeydownHandler(event) {\n    // If not input/textarea:\n    //  - And not a key in REGEXP_KEYDOWN => not a dropdown command\n    // If input/textarea:\n    //  - If space key => not a dropdown command\n    //  - If key is other than escape\n    //    - If key is not up or down => not a dropdown command\n    //    - If trigger inside the menu => not a dropdown command\n    if (/input|textarea/i.test(event.target.tagName) ? event.key === SPACE_KEY || event.key !== ESCAPE_KEY$2 && (event.key !== ARROW_DOWN_KEY && event.key !== ARROW_UP_KEY || event.target.closest(SELECTOR_MENU)) : !REGEXP_KEYDOWN.test(event.key)) {\n      return;\n    }\n\n    const isActive = this.classList.contains(CLASS_NAME_SHOW$7);\n\n    if (!isActive && event.key === ESCAPE_KEY$2) {\n      return;\n    }\n\n    event.preventDefault();\n    event.stopPropagation();\n\n    if (isDisabled(this)) {\n      return;\n    }\n\n    const getToggleButton = () => this.matches(SELECTOR_DATA_TOGGLE$3) ? this : SelectorEngine.prev(this, SELECTOR_DATA_TOGGLE$3)[0];\n\n    if (event.key === ESCAPE_KEY$2) {\n      getToggleButton().focus();\n      Dropdown.clearMenus();\n      return;\n    }\n\n    if (event.key === ARROW_UP_KEY || event.key === ARROW_DOWN_KEY) {\n      if (!isActive) {\n        getToggleButton().click();\n      }\n\n      Dropdown.getInstance(getToggleButton())._selectMenuItem(event);\n\n      return;\n    }\n\n    if (!isActive || event.key === SPACE_KEY) {\n      Dropdown.clearMenus();\n    }\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_DATA_TOGGLE$3, Dropdown.dataApiKeydownHandler);\nEventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown.dataApiKeydownHandler);\nEventHandler.on(document, EVENT_CLICK_DATA_API$3, Dropdown.clearMenus);\nEventHandler.on(document, EVENT_KEYUP_DATA_API, Dropdown.clearMenus);\nEventHandler.on(document, EVENT_CLICK_DATA_API$3, SELECTOR_DATA_TOGGLE$3, function (event) {\n  event.preventDefault();\n  Dropdown.dropdownInterface(this);\n});\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Dropdown to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Dropdown);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): util/scrollBar.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\nconst SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top';\nconst SELECTOR_STICKY_CONTENT = '.sticky-top';\n\nclass ScrollBarHelper {\n  constructor() {\n    this._element = document.body;\n  }\n\n  getWidth() {\n    // https://developer.mozilla.org/en-US/docs/Web/API/Window/innerWidth#usage_notes\n    const documentWidth = document.documentElement.clientWidth;\n    return Math.abs(window.innerWidth - documentWidth);\n  }\n\n  hide() {\n    const width = this.getWidth();\n\n    this._disableOverFlow(); // give padding to element to balance the hidden scrollbar width\n\n\n    this._setElementAttributes(this._element, 'paddingRight', calculatedValue => calculatedValue + width); // trick: We adjust positive paddingRight and negative marginRight to sticky-top elements to keep showing fullwidth\n\n\n    this._setElementAttributes(SELECTOR_FIXED_CONTENT, 'paddingRight', calculatedValue => calculatedValue + width);\n\n    this._setElementAttributes(SELECTOR_STICKY_CONTENT, 'marginRight', calculatedValue => calculatedValue - width);\n  }\n\n  _disableOverFlow() {\n    this._saveInitialAttribute(this._element, 'overflow');\n\n    this._element.style.overflow = 'hidden';\n  }\n\n  _setElementAttributes(selector, styleProp, callback) {\n    const scrollbarWidth = this.getWidth();\n\n    const manipulationCallBack = element => {\n      if (element !== this._element && window.innerWidth > element.clientWidth + scrollbarWidth) {\n        return;\n      }\n\n      this._saveInitialAttribute(element, styleProp);\n\n      const calculatedValue = window.getComputedStyle(element)[styleProp];\n      element.style[styleProp] = `${callback(Number.parseFloat(calculatedValue))}px`;\n    };\n\n    this._applyManipulationCallback(selector, manipulationCallBack);\n  }\n\n  reset() {\n    this._resetElementAttributes(this._element, 'overflow');\n\n    this._resetElementAttributes(this._element, 'paddingRight');\n\n    this._resetElementAttributes(SELECTOR_FIXED_CONTENT, 'paddingRight');\n\n    this._resetElementAttributes(SELECTOR_STICKY_CONTENT, 'marginRight');\n  }\n\n  _saveInitialAttribute(element, styleProp) {\n    const actualValue = element.style[styleProp];\n\n    if (actualValue) {\n      Manipulator.setDataAttribute(element, styleProp, actualValue);\n    }\n  }\n\n  _resetElementAttributes(selector, styleProp) {\n    const manipulationCallBack = element => {\n      const value = Manipulator.getDataAttribute(element, styleProp);\n\n      if (typeof value === 'undefined') {\n        element.style.removeProperty(styleProp);\n      } else {\n        Manipulator.removeDataAttribute(element, styleProp);\n        element.style[styleProp] = value;\n      }\n    };\n\n    this._applyManipulationCallback(selector, manipulationCallBack);\n  }\n\n  _applyManipulationCallback(selector, callBack) {\n    if (isElement(selector)) {\n      callBack(selector);\n    } else {\n      SelectorEngine.find(selector, this._element).forEach(callBack);\n    }\n  }\n\n  isOverflowing() {\n    return this.getWidth() > 0;\n  }\n\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): util/backdrop.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\nconst Default$6 = {\n  isVisible: true,\n  // if false, we use the backdrop helper without adding any element to the dom\n  isAnimated: false,\n  rootElement: 'body',\n  // give the choice to place backdrop under different elements\n  clickCallback: null\n};\nconst DefaultType$6 = {\n  isVisible: 'boolean',\n  isAnimated: 'boolean',\n  rootElement: '(element|string)',\n  clickCallback: '(function|null)'\n};\nconst NAME$7 = 'backdrop';\nconst CLASS_NAME_BACKDROP = 'modal-backdrop';\nconst CLASS_NAME_FADE$5 = 'fade';\nconst CLASS_NAME_SHOW$6 = 'show';\nconst EVENT_MOUSEDOWN = `mousedown.bs.${NAME$7}`;\n\nclass Backdrop {\n  constructor(config) {\n    this._config = this._getConfig(config);\n    this._isAppended = false;\n    this._element = null;\n  }\n\n  show(callback) {\n    if (!this._config.isVisible) {\n      execute(callback);\n      return;\n    }\n\n    this._append();\n\n    if (this._config.isAnimated) {\n      reflow(this._getElement());\n    }\n\n    this._getElement().classList.add(CLASS_NAME_SHOW$6);\n\n    this._emulateAnimation(() => {\n      execute(callback);\n    });\n  }\n\n  hide(callback) {\n    if (!this._config.isVisible) {\n      execute(callback);\n      return;\n    }\n\n    this._getElement().classList.remove(CLASS_NAME_SHOW$6);\n\n    this._emulateAnimation(() => {\n      this.dispose();\n      execute(callback);\n    });\n  } // Private\n\n\n  _getElement() {\n    if (!this._element) {\n      const backdrop = document.createElement('div');\n      backdrop.className = CLASS_NAME_BACKDROP;\n\n      if (this._config.isAnimated) {\n        backdrop.classList.add(CLASS_NAME_FADE$5);\n      }\n\n      this._element = backdrop;\n    }\n\n    return this._element;\n  }\n\n  _getConfig(config) {\n    config = { ...Default$6,\n      ...(typeof config === 'object' ? config : {})\n    }; // use getElement() with the default \"body\" to get a fresh Element on each instantiation\n\n    config.rootElement = getElement(config.rootElement);\n    typeCheckConfig(NAME$7, config, DefaultType$6);\n    return config;\n  }\n\n  _append() {\n    if (this._isAppended) {\n      return;\n    }\n\n    this._config.rootElement.appendChild(this._getElement());\n\n    EventHandler.on(this._getElement(), EVENT_MOUSEDOWN, () => {\n      execute(this._config.clickCallback);\n    });\n    this._isAppended = true;\n  }\n\n  dispose() {\n    if (!this._isAppended) {\n      return;\n    }\n\n    EventHandler.off(this._element, EVENT_MOUSEDOWN);\n\n    this._element.remove();\n\n    this._isAppended = false;\n  }\n\n  _emulateAnimation(callback) {\n    executeAfterTransition(callback, this._getElement(), this._config.isAnimated);\n  }\n\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): modal.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$6 = 'modal';\nconst DATA_KEY$6 = 'bs.modal';\nconst EVENT_KEY$6 = `.${DATA_KEY$6}`;\nconst DATA_API_KEY$3 = '.data-api';\nconst ESCAPE_KEY$1 = 'Escape';\nconst Default$5 = {\n  backdrop: true,\n  keyboard: true,\n  focus: true\n};\nconst DefaultType$5 = {\n  backdrop: '(boolean|string)',\n  keyboard: 'boolean',\n  focus: 'boolean'\n};\nconst EVENT_HIDE$3 = `hide${EVENT_KEY$6}`;\nconst EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY$6}`;\nconst EVENT_HIDDEN$3 = `hidden${EVENT_KEY$6}`;\nconst EVENT_SHOW$3 = `show${EVENT_KEY$6}`;\nconst EVENT_SHOWN$3 = `shown${EVENT_KEY$6}`;\nconst EVENT_FOCUSIN$2 = `focusin${EVENT_KEY$6}`;\nconst EVENT_RESIZE = `resize${EVENT_KEY$6}`;\nconst EVENT_CLICK_DISMISS$2 = `click.dismiss${EVENT_KEY$6}`;\nconst EVENT_KEYDOWN_DISMISS$1 = `keydown.dismiss${EVENT_KEY$6}`;\nconst EVENT_MOUSEUP_DISMISS = `mouseup.dismiss${EVENT_KEY$6}`;\nconst EVENT_MOUSEDOWN_DISMISS = `mousedown.dismiss${EVENT_KEY$6}`;\nconst EVENT_CLICK_DATA_API$2 = `click${EVENT_KEY$6}${DATA_API_KEY$3}`;\nconst CLASS_NAME_OPEN = 'modal-open';\nconst CLASS_NAME_FADE$4 = 'fade';\nconst CLASS_NAME_SHOW$5 = 'show';\nconst CLASS_NAME_STATIC = 'modal-static';\nconst SELECTOR_DIALOG = '.modal-dialog';\nconst SELECTOR_MODAL_BODY = '.modal-body';\nconst SELECTOR_DATA_TOGGLE$2 = '[data-bs-toggle=\"modal\"]';\nconst SELECTOR_DATA_DISMISS$2 = '[data-bs-dismiss=\"modal\"]';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Modal extends BaseComponent {\n  constructor(element, config) {\n    super(element);\n    this._config = this._getConfig(config);\n    this._dialog = SelectorEngine.findOne(SELECTOR_DIALOG, this._element);\n    this._backdrop = this._initializeBackDrop();\n    this._isShown = false;\n    this._ignoreBackdropClick = false;\n    this._isTransitioning = false;\n    this._scrollBar = new ScrollBarHelper();\n  } // Getters\n\n\n  static get Default() {\n    return Default$5;\n  }\n\n  static get NAME() {\n    return NAME$6;\n  } // Public\n\n\n  toggle(relatedTarget) {\n    return this._isShown ? this.hide() : this.show(relatedTarget);\n  }\n\n  show(relatedTarget) {\n    if (this._isShown || this._isTransitioning) {\n      return;\n    }\n\n    const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$3, {\n      relatedTarget\n    });\n\n    if (showEvent.defaultPrevented) {\n      return;\n    }\n\n    this._isShown = true;\n\n    if (this._isAnimated()) {\n      this._isTransitioning = true;\n    }\n\n    this._scrollBar.hide();\n\n    document.body.classList.add(CLASS_NAME_OPEN);\n\n    this._adjustDialog();\n\n    this._setEscapeEvent();\n\n    this._setResizeEvent();\n\n    EventHandler.on(this._element, EVENT_CLICK_DISMISS$2, SELECTOR_DATA_DISMISS$2, event => this.hide(event));\n    EventHandler.on(this._dialog, EVENT_MOUSEDOWN_DISMISS, () => {\n      EventHandler.one(this._element, EVENT_MOUSEUP_DISMISS, event => {\n        if (event.target === this._element) {\n          this._ignoreBackdropClick = true;\n        }\n      });\n    });\n\n    this._showBackdrop(() => this._showElement(relatedTarget));\n  }\n\n  hide(event) {\n    if (event && ['A', 'AREA'].includes(event.target.tagName)) {\n      event.preventDefault();\n    }\n\n    if (!this._isShown || this._isTransitioning) {\n      return;\n    }\n\n    const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$3);\n\n    if (hideEvent.defaultPrevented) {\n      return;\n    }\n\n    this._isShown = false;\n\n    const isAnimated = this._isAnimated();\n\n    if (isAnimated) {\n      this._isTransitioning = true;\n    }\n\n    this._setEscapeEvent();\n\n    this._setResizeEvent();\n\n    EventHandler.off(document, EVENT_FOCUSIN$2);\n\n    this._element.classList.remove(CLASS_NAME_SHOW$5);\n\n    EventHandler.off(this._element, EVENT_CLICK_DISMISS$2);\n    EventHandler.off(this._dialog, EVENT_MOUSEDOWN_DISMISS);\n\n    this._queueCallback(() => this._hideModal(), this._element, isAnimated);\n  }\n\n  dispose() {\n    [window, this._dialog].forEach(htmlElement => EventHandler.off(htmlElement, EVENT_KEY$6));\n\n    this._backdrop.dispose();\n\n    super.dispose();\n    /**\n     * `document` has 2 events `EVENT_FOCUSIN` and `EVENT_CLICK_DATA_API`\n     * Do not move `document` in `htmlElements` array\n     * It will remove `EVENT_CLICK_DATA_API` event that should remain\n     */\n\n    EventHandler.off(document, EVENT_FOCUSIN$2);\n  }\n\n  handleUpdate() {\n    this._adjustDialog();\n  } // Private\n\n\n  _initializeBackDrop() {\n    return new Backdrop({\n      isVisible: Boolean(this._config.backdrop),\n      // 'static' option will be translated to true, and booleans will keep their value\n      isAnimated: this._isAnimated()\n    });\n  }\n\n  _getConfig(config) {\n    config = { ...Default$5,\n      ...Manipulator.getDataAttributes(this._element),\n      ...(typeof config === 'object' ? config : {})\n    };\n    typeCheckConfig(NAME$6, config, DefaultType$5);\n    return config;\n  }\n\n  _showElement(relatedTarget) {\n    const isAnimated = this._isAnimated();\n\n    const modalBody = SelectorEngine.findOne(SELECTOR_MODAL_BODY, this._dialog);\n\n    if (!this._element.parentNode || this._element.parentNode.nodeType !== Node.ELEMENT_NODE) {\n      // Don't move modal's DOM position\n      document.body.appendChild(this._element);\n    }\n\n    this._element.style.display = 'block';\n\n    this._element.removeAttribute('aria-hidden');\n\n    this._element.setAttribute('aria-modal', true);\n\n    this._element.setAttribute('role', 'dialog');\n\n    this._element.scrollTop = 0;\n\n    if (modalBody) {\n      modalBody.scrollTop = 0;\n    }\n\n    if (isAnimated) {\n      reflow(this._element);\n    }\n\n    this._element.classList.add(CLASS_NAME_SHOW$5);\n\n    if (this._config.focus) {\n      this._enforceFocus();\n    }\n\n    const transitionComplete = () => {\n      if (this._config.focus) {\n        this._element.focus();\n      }\n\n      this._isTransitioning = false;\n      EventHandler.trigger(this._element, EVENT_SHOWN$3, {\n        relatedTarget\n      });\n    };\n\n    this._queueCallback(transitionComplete, this._dialog, isAnimated);\n  }\n\n  _enforceFocus() {\n    EventHandler.off(document, EVENT_FOCUSIN$2); // guard against infinite focus loop\n\n    EventHandler.on(document, EVENT_FOCUSIN$2, event => {\n      if (document !== event.target && this._element !== event.target && !this._element.contains(event.target)) {\n        this._element.focus();\n      }\n    });\n  }\n\n  _setEscapeEvent() {\n    if (this._isShown) {\n      EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS$1, event => {\n        if (this._config.keyboard && event.key === ESCAPE_KEY$1) {\n          event.preventDefault();\n          this.hide();\n        } else if (!this._config.keyboard && event.key === ESCAPE_KEY$1) {\n          this._triggerBackdropTransition();\n        }\n      });\n    } else {\n      EventHandler.off(this._element, EVENT_KEYDOWN_DISMISS$1);\n    }\n  }\n\n  _setResizeEvent() {\n    if (this._isShown) {\n      EventHandler.on(window, EVENT_RESIZE, () => this._adjustDialog());\n    } else {\n      EventHandler.off(window, EVENT_RESIZE);\n    }\n  }\n\n  _hideModal() {\n    this._element.style.display = 'none';\n\n    this._element.setAttribute('aria-hidden', true);\n\n    this._element.removeAttribute('aria-modal');\n\n    this._element.removeAttribute('role');\n\n    this._isTransitioning = false;\n\n    this._backdrop.hide(() => {\n      document.body.classList.remove(CLASS_NAME_OPEN);\n\n      this._resetAdjustments();\n\n      this._scrollBar.reset();\n\n      EventHandler.trigger(this._element, EVENT_HIDDEN$3);\n    });\n  }\n\n  _showBackdrop(callback) {\n    EventHandler.on(this._element, EVENT_CLICK_DISMISS$2, event => {\n      if (this._ignoreBackdropClick) {\n        this._ignoreBackdropClick = false;\n        return;\n      }\n\n      if (event.target !== event.currentTarget) {\n        return;\n      }\n\n      if (this._config.backdrop === true) {\n        this.hide();\n      } else if (this._config.backdrop === 'static') {\n        this._triggerBackdropTransition();\n      }\n    });\n\n    this._backdrop.show(callback);\n  }\n\n  _isAnimated() {\n    return this._element.classList.contains(CLASS_NAME_FADE$4);\n  }\n\n  _triggerBackdropTransition() {\n    const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED);\n\n    if (hideEvent.defaultPrevented) {\n      return;\n    }\n\n    const {\n      classList,\n      scrollHeight,\n      style\n    } = this._element;\n    const isModalOverflowing = scrollHeight > document.documentElement.clientHeight; // return if the following background transition hasn't yet completed\n\n    if (!isModalOverflowing && style.overflowY === 'hidden' || classList.contains(CLASS_NAME_STATIC)) {\n      return;\n    }\n\n    if (!isModalOverflowing) {\n      style.overflowY = 'hidden';\n    }\n\n    classList.add(CLASS_NAME_STATIC);\n\n    this._queueCallback(() => {\n      classList.remove(CLASS_NAME_STATIC);\n\n      if (!isModalOverflowing) {\n        this._queueCallback(() => {\n          style.overflowY = '';\n        }, this._dialog);\n      }\n    }, this._dialog);\n\n    this._element.focus();\n  } // ----------------------------------------------------------------------\n  // the following methods are used to handle overflowing modals\n  // ----------------------------------------------------------------------\n\n\n  _adjustDialog() {\n    const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;\n\n    const scrollbarWidth = this._scrollBar.getWidth();\n\n    const isBodyOverflowing = scrollbarWidth > 0;\n\n    if (!isBodyOverflowing && isModalOverflowing && !isRTL() || isBodyOverflowing && !isModalOverflowing && isRTL()) {\n      this._element.style.paddingLeft = `${scrollbarWidth}px`;\n    }\n\n    if (isBodyOverflowing && !isModalOverflowing && !isRTL() || !isBodyOverflowing && isModalOverflowing && isRTL()) {\n      this._element.style.paddingRight = `${scrollbarWidth}px`;\n    }\n  }\n\n  _resetAdjustments() {\n    this._element.style.paddingLeft = '';\n    this._element.style.paddingRight = '';\n  } // Static\n\n\n  static jQueryInterface(config, relatedTarget) {\n    return this.each(function () {\n      const data = Modal.getOrCreateInstance(this, config);\n\n      if (typeof config !== 'string') {\n        return;\n      }\n\n      if (typeof data[config] === 'undefined') {\n        throw new TypeError(`No method named \"${config}\"`);\n      }\n\n      data[config](relatedTarget);\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$2, SELECTOR_DATA_TOGGLE$2, function (event) {\n  const target = getElementFromSelector(this);\n\n  if (['A', 'AREA'].includes(this.tagName)) {\n    event.preventDefault();\n  }\n\n  EventHandler.one(target, EVENT_SHOW$3, showEvent => {\n    if (showEvent.defaultPrevented) {\n      // only register focus restorer if modal will actually get shown\n      return;\n    }\n\n    EventHandler.one(target, EVENT_HIDDEN$3, () => {\n      if (isVisible(this)) {\n        this.focus();\n      }\n    });\n  });\n  const data = Modal.getOrCreateInstance(target);\n  data.toggle(this);\n});\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Modal to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Modal);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): offcanvas.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$5 = 'offcanvas';\nconst DATA_KEY$5 = 'bs.offcanvas';\nconst EVENT_KEY$5 = `.${DATA_KEY$5}`;\nconst DATA_API_KEY$2 = '.data-api';\nconst EVENT_LOAD_DATA_API$1 = `load${EVENT_KEY$5}${DATA_API_KEY$2}`;\nconst ESCAPE_KEY = 'Escape';\nconst Default$4 = {\n  backdrop: true,\n  keyboard: true,\n  scroll: false\n};\nconst DefaultType$4 = {\n  backdrop: 'boolean',\n  keyboard: 'boolean',\n  scroll: 'boolean'\n};\nconst CLASS_NAME_SHOW$4 = 'show';\nconst OPEN_SELECTOR = '.offcanvas.show';\nconst EVENT_SHOW$2 = `show${EVENT_KEY$5}`;\nconst EVENT_SHOWN$2 = `shown${EVENT_KEY$5}`;\nconst EVENT_HIDE$2 = `hide${EVENT_KEY$5}`;\nconst EVENT_HIDDEN$2 = `hidden${EVENT_KEY$5}`;\nconst EVENT_FOCUSIN$1 = `focusin${EVENT_KEY$5}`;\nconst EVENT_CLICK_DATA_API$1 = `click${EVENT_KEY$5}${DATA_API_KEY$2}`;\nconst EVENT_CLICK_DISMISS$1 = `click.dismiss${EVENT_KEY$5}`;\nconst EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY$5}`;\nconst SELECTOR_DATA_DISMISS$1 = '[data-bs-dismiss=\"offcanvas\"]';\nconst SELECTOR_DATA_TOGGLE$1 = '[data-bs-toggle=\"offcanvas\"]';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Offcanvas extends BaseComponent {\n  constructor(element, config) {\n    super(element);\n    this._config = this._getConfig(config);\n    this._isShown = false;\n    this._backdrop = this._initializeBackDrop();\n\n    this._addEventListeners();\n  } // Getters\n\n\n  static get NAME() {\n    return NAME$5;\n  }\n\n  static get Default() {\n    return Default$4;\n  } // Public\n\n\n  toggle(relatedTarget) {\n    return this._isShown ? this.hide() : this.show(relatedTarget);\n  }\n\n  show(relatedTarget) {\n    if (this._isShown) {\n      return;\n    }\n\n    const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$2, {\n      relatedTarget\n    });\n\n    if (showEvent.defaultPrevented) {\n      return;\n    }\n\n    this._isShown = true;\n    this._element.style.visibility = 'visible';\n\n    this._backdrop.show();\n\n    if (!this._config.scroll) {\n      new ScrollBarHelper().hide();\n\n      this._enforceFocusOnElement(this._element);\n    }\n\n    this._element.removeAttribute('aria-hidden');\n\n    this._element.setAttribute('aria-modal', true);\n\n    this._element.setAttribute('role', 'dialog');\n\n    this._element.classList.add(CLASS_NAME_SHOW$4);\n\n    const completeCallBack = () => {\n      EventHandler.trigger(this._element, EVENT_SHOWN$2, {\n        relatedTarget\n      });\n    };\n\n    this._queueCallback(completeCallBack, this._element, true);\n  }\n\n  hide() {\n    if (!this._isShown) {\n      return;\n    }\n\n    const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$2);\n\n    if (hideEvent.defaultPrevented) {\n      return;\n    }\n\n    EventHandler.off(document, EVENT_FOCUSIN$1);\n\n    this._element.blur();\n\n    this._isShown = false;\n\n    this._element.classList.remove(CLASS_NAME_SHOW$4);\n\n    this._backdrop.hide();\n\n    const completeCallback = () => {\n      this._element.setAttribute('aria-hidden', true);\n\n      this._element.removeAttribute('aria-modal');\n\n      this._element.removeAttribute('role');\n\n      this._element.style.visibility = 'hidden';\n\n      if (!this._config.scroll) {\n        new ScrollBarHelper().reset();\n      }\n\n      EventHandler.trigger(this._element, EVENT_HIDDEN$2);\n    };\n\n    this._queueCallback(completeCallback, this._element, true);\n  }\n\n  dispose() {\n    this._backdrop.dispose();\n\n    super.dispose();\n    EventHandler.off(document, EVENT_FOCUSIN$1);\n  } // Private\n\n\n  _getConfig(config) {\n    config = { ...Default$4,\n      ...Manipulator.getDataAttributes(this._element),\n      ...(typeof config === 'object' ? config : {})\n    };\n    typeCheckConfig(NAME$5, config, DefaultType$4);\n    return config;\n  }\n\n  _initializeBackDrop() {\n    return new Backdrop({\n      isVisible: this._config.backdrop,\n      isAnimated: true,\n      rootElement: this._element.parentNode,\n      clickCallback: () => this.hide()\n    });\n  }\n\n  _enforceFocusOnElement(element) {\n    EventHandler.off(document, EVENT_FOCUSIN$1); // guard against infinite focus loop\n\n    EventHandler.on(document, EVENT_FOCUSIN$1, event => {\n      if (document !== event.target && element !== event.target && !element.contains(event.target)) {\n        element.focus();\n      }\n    });\n    element.focus();\n  }\n\n  _addEventListeners() {\n    EventHandler.on(this._element, EVENT_CLICK_DISMISS$1, SELECTOR_DATA_DISMISS$1, () => this.hide());\n    EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS, event => {\n      if (this._config.keyboard && event.key === ESCAPE_KEY) {\n        this.hide();\n      }\n    });\n  } // Static\n\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Offcanvas.getOrCreateInstance(this, config);\n\n      if (typeof config !== 'string') {\n        return;\n      }\n\n      if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n        throw new TypeError(`No method named \"${config}\"`);\n      }\n\n      data[config](this);\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$1, SELECTOR_DATA_TOGGLE$1, function (event) {\n  const target = getElementFromSelector(this);\n\n  if (['A', 'AREA'].includes(this.tagName)) {\n    event.preventDefault();\n  }\n\n  if (isDisabled(this)) {\n    return;\n  }\n\n  EventHandler.one(target, EVENT_HIDDEN$2, () => {\n    // focus on trigger when it is closed\n    if (isVisible(this)) {\n      this.focus();\n    }\n  }); // avoid conflict when clicking a toggler of an offcanvas, while another is open\n\n  const allReadyOpen = SelectorEngine.findOne(OPEN_SELECTOR);\n\n  if (allReadyOpen && allReadyOpen !== target) {\n    Offcanvas.getInstance(allReadyOpen).hide();\n  }\n\n  const data = Offcanvas.getOrCreateInstance(target);\n  data.toggle(this);\n});\nEventHandler.on(window, EVENT_LOAD_DATA_API$1, () => SelectorEngine.find(OPEN_SELECTOR).forEach(el => Offcanvas.getOrCreateInstance(el).show()));\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\ndefineJQueryPlugin(Offcanvas);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): util/sanitizer.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\nconst uriAttrs = new Set(['background', 'cite', 'href', 'itemtype', 'longdesc', 'poster', 'src', 'xlink:href']);\nconst ARIA_ATTRIBUTE_PATTERN = /^aria-[\\w-]*$/i;\n/**\n * A pattern that recognizes a commonly useful subset of URLs that are safe.\n *\n * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts\n */\n\nconst SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file):|[^#&/:?]*(?:[#/?]|$))/i;\n/**\n * A pattern that matches safe data URLs. Only matches image, video and audio types.\n *\n * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts\n */\n\nconst DATA_URL_PATTERN = /^data:(?:image\\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\\/(?:mpeg|mp4|ogg|webm)|audio\\/(?:mp3|oga|ogg|opus));base64,[\\d+/a-z]+=*$/i;\n\nconst allowedAttribute = (attr, allowedAttributeList) => {\n  const attrName = attr.nodeName.toLowerCase();\n\n  if (allowedAttributeList.includes(attrName)) {\n    if (uriAttrs.has(attrName)) {\n      return Boolean(SAFE_URL_PATTERN.test(attr.nodeValue) || DATA_URL_PATTERN.test(attr.nodeValue));\n    }\n\n    return true;\n  }\n\n  const regExp = allowedAttributeList.filter(attrRegex => attrRegex instanceof RegExp); // Check if a regular expression validates the attribute.\n\n  for (let i = 0, len = regExp.length; i < len; i++) {\n    if (regExp[i].test(attrName)) {\n      return true;\n    }\n  }\n\n  return false;\n};\n\nconst DefaultAllowlist = {\n  // Global attributes allowed on any supplied element below.\n  '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],\n  a: ['target', 'href', 'title', 'rel'],\n  area: [],\n  b: [],\n  br: [],\n  col: [],\n  code: [],\n  div: [],\n  em: [],\n  hr: [],\n  h1: [],\n  h2: [],\n  h3: [],\n  h4: [],\n  h5: [],\n  h6: [],\n  i: [],\n  img: ['src', 'srcset', 'alt', 'title', 'width', 'height'],\n  li: [],\n  ol: [],\n  p: [],\n  pre: [],\n  s: [],\n  small: [],\n  span: [],\n  sub: [],\n  sup: [],\n  strong: [],\n  u: [],\n  ul: []\n};\nfunction sanitizeHtml(unsafeHtml, allowList, sanitizeFn) {\n  if (!unsafeHtml.length) {\n    return unsafeHtml;\n  }\n\n  if (sanitizeFn && typeof sanitizeFn === 'function') {\n    return sanitizeFn(unsafeHtml);\n  }\n\n  const domParser = new window.DOMParser();\n  const createdDocument = domParser.parseFromString(unsafeHtml, 'text/html');\n  const allowlistKeys = Object.keys(allowList);\n  const elements = [].concat(...createdDocument.body.querySelectorAll('*'));\n\n  for (let i = 0, len = elements.length; i < len; i++) {\n    const el = elements[i];\n    const elName = el.nodeName.toLowerCase();\n\n    if (!allowlistKeys.includes(elName)) {\n      el.remove();\n      continue;\n    }\n\n    const attributeList = [].concat(...el.attributes);\n    const allowedAttributes = [].concat(allowList['*'] || [], allowList[elName] || []);\n    attributeList.forEach(attr => {\n      if (!allowedAttribute(attr, allowedAttributes)) {\n        el.removeAttribute(attr.nodeName);\n      }\n    });\n  }\n\n  return createdDocument.body.innerHTML;\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): tooltip.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$4 = 'tooltip';\nconst DATA_KEY$4 = 'bs.tooltip';\nconst EVENT_KEY$4 = `.${DATA_KEY$4}`;\nconst CLASS_PREFIX$1 = 'bs-tooltip';\nconst BSCLS_PREFIX_REGEX$1 = new RegExp(`(^|\\\\s)${CLASS_PREFIX$1}\\\\S+`, 'g');\nconst DISALLOWED_ATTRIBUTES = new Set(['sanitize', 'allowList', 'sanitizeFn']);\nconst DefaultType$3 = {\n  animation: 'boolean',\n  template: 'string',\n  title: '(string|element|function)',\n  trigger: 'string',\n  delay: '(number|object)',\n  html: 'boolean',\n  selector: '(string|boolean)',\n  placement: '(string|function)',\n  offset: '(array|string|function)',\n  container: '(string|element|boolean)',\n  fallbackPlacements: 'array',\n  boundary: '(string|element)',\n  customClass: '(string|function)',\n  sanitize: 'boolean',\n  sanitizeFn: '(null|function)',\n  allowList: 'object',\n  popperConfig: '(null|object|function)'\n};\nconst AttachmentMap = {\n  AUTO: 'auto',\n  TOP: 'top',\n  RIGHT: isRTL() ? 'left' : 'right',\n  BOTTOM: 'bottom',\n  LEFT: isRTL() ? 'right' : 'left'\n};\nconst Default$3 = {\n  animation: true,\n  template: '<div class=\"tooltip\" role=\"tooltip\">' + '<div class=\"tooltip-arrow\"></div>' + '<div class=\"tooltip-inner\"></div>' + '</div>',\n  trigger: 'hover focus',\n  title: '',\n  delay: 0,\n  html: false,\n  selector: false,\n  placement: 'top',\n  offset: [0, 0],\n  container: false,\n  fallbackPlacements: ['top', 'right', 'bottom', 'left'],\n  boundary: 'clippingParents',\n  customClass: '',\n  sanitize: true,\n  sanitizeFn: null,\n  allowList: DefaultAllowlist,\n  popperConfig: null\n};\nconst Event$2 = {\n  HIDE: `hide${EVENT_KEY$4}`,\n  HIDDEN: `hidden${EVENT_KEY$4}`,\n  SHOW: `show${EVENT_KEY$4}`,\n  SHOWN: `shown${EVENT_KEY$4}`,\n  INSERTED: `inserted${EVENT_KEY$4}`,\n  CLICK: `click${EVENT_KEY$4}`,\n  FOCUSIN: `focusin${EVENT_KEY$4}`,\n  FOCUSOUT: `focusout${EVENT_KEY$4}`,\n  MOUSEENTER: `mouseenter${EVENT_KEY$4}`,\n  MOUSELEAVE: `mouseleave${EVENT_KEY$4}`\n};\nconst CLASS_NAME_FADE$3 = 'fade';\nconst CLASS_NAME_MODAL = 'modal';\nconst CLASS_NAME_SHOW$3 = 'show';\nconst HOVER_STATE_SHOW = 'show';\nconst HOVER_STATE_OUT = 'out';\nconst SELECTOR_TOOLTIP_INNER = '.tooltip-inner';\nconst TRIGGER_HOVER = 'hover';\nconst TRIGGER_FOCUS = 'focus';\nconst TRIGGER_CLICK = 'click';\nconst TRIGGER_MANUAL = 'manual';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Tooltip extends BaseComponent {\n  constructor(element, config) {\n    if (typeof Popper === 'undefined') {\n      throw new TypeError('Bootstrap\\'s tooltips require Popper (https://popper.js.org)');\n    }\n\n    super(element); // private\n\n    this._isEnabled = true;\n    this._timeout = 0;\n    this._hoverState = '';\n    this._activeTrigger = {};\n    this._popper = null; // Protected\n\n    this._config = this._getConfig(config);\n    this.tip = null;\n\n    this._setListeners();\n  } // Getters\n\n\n  static get Default() {\n    return Default$3;\n  }\n\n  static get NAME() {\n    return NAME$4;\n  }\n\n  static get Event() {\n    return Event$2;\n  }\n\n  static get DefaultType() {\n    return DefaultType$3;\n  } // Public\n\n\n  enable() {\n    this._isEnabled = true;\n  }\n\n  disable() {\n    this._isEnabled = false;\n  }\n\n  toggleEnabled() {\n    this._isEnabled = !this._isEnabled;\n  }\n\n  toggle(event) {\n    if (!this._isEnabled) {\n      return;\n    }\n\n    if (event) {\n      const context = this._initializeOnDelegatedTarget(event);\n\n      context._activeTrigger.click = !context._activeTrigger.click;\n\n      if (context._isWithActiveTrigger()) {\n        context._enter(null, context);\n      } else {\n        context._leave(null, context);\n      }\n    } else {\n      if (this.getTipElement().classList.contains(CLASS_NAME_SHOW$3)) {\n        this._leave(null, this);\n\n        return;\n      }\n\n      this._enter(null, this);\n    }\n  }\n\n  dispose() {\n    clearTimeout(this._timeout);\n    EventHandler.off(this._element.closest(`.${CLASS_NAME_MODAL}`), 'hide.bs.modal', this._hideModalHandler);\n\n    if (this.tip) {\n      this.tip.remove();\n    }\n\n    if (this._popper) {\n      this._popper.destroy();\n    }\n\n    super.dispose();\n  }\n\n  show() {\n    if (this._element.style.display === 'none') {\n      throw new Error('Please use show on visible elements');\n    }\n\n    if (!(this.isWithContent() && this._isEnabled)) {\n      return;\n    }\n\n    const showEvent = EventHandler.trigger(this._element, this.constructor.Event.SHOW);\n    const shadowRoot = findShadowRoot(this._element);\n    const isInTheDom = shadowRoot === null ? this._element.ownerDocument.documentElement.contains(this._element) : shadowRoot.contains(this._element);\n\n    if (showEvent.defaultPrevented || !isInTheDom) {\n      return;\n    }\n\n    const tip = this.getTipElement();\n    const tipId = getUID(this.constructor.NAME);\n    tip.setAttribute('id', tipId);\n\n    this._element.setAttribute('aria-describedby', tipId);\n\n    this.setContent();\n\n    if (this._config.animation) {\n      tip.classList.add(CLASS_NAME_FADE$3);\n    }\n\n    const placement = typeof this._config.placement === 'function' ? this._config.placement.call(this, tip, this._element) : this._config.placement;\n\n    const attachment = this._getAttachment(placement);\n\n    this._addAttachmentClass(attachment);\n\n    const {\n      container\n    } = this._config;\n    Data.set(tip, this.constructor.DATA_KEY, this);\n\n    if (!this._element.ownerDocument.documentElement.contains(this.tip)) {\n      container.appendChild(tip);\n      EventHandler.trigger(this._element, this.constructor.Event.INSERTED);\n    }\n\n    if (this._popper) {\n      this._popper.update();\n    } else {\n      this._popper = Popper.createPopper(this._element, tip, this._getPopperConfig(attachment));\n    }\n\n    tip.classList.add(CLASS_NAME_SHOW$3);\n    const customClass = typeof this._config.customClass === 'function' ? this._config.customClass() : this._config.customClass;\n\n    if (customClass) {\n      tip.classList.add(...customClass.split(' '));\n    } // If this is a touch-enabled device we add extra\n    // empty mouseover listeners to the body's immediate children;\n    // only needed because of broken event delegation on iOS\n    // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n\n\n    if ('ontouchstart' in document.documentElement) {\n      [].concat(...document.body.children).forEach(element => {\n        EventHandler.on(element, 'mouseover', noop);\n      });\n    }\n\n    const complete = () => {\n      const prevHoverState = this._hoverState;\n      this._hoverState = null;\n      EventHandler.trigger(this._element, this.constructor.Event.SHOWN);\n\n      if (prevHoverState === HOVER_STATE_OUT) {\n        this._leave(null, this);\n      }\n    };\n\n    const isAnimated = this.tip.classList.contains(CLASS_NAME_FADE$3);\n\n    this._queueCallback(complete, this.tip, isAnimated);\n  }\n\n  hide() {\n    if (!this._popper) {\n      return;\n    }\n\n    const tip = this.getTipElement();\n\n    const complete = () => {\n      if (this._isWithActiveTrigger()) {\n        return;\n      }\n\n      if (this._hoverState !== HOVER_STATE_SHOW) {\n        tip.remove();\n      }\n\n      this._cleanTipClass();\n\n      this._element.removeAttribute('aria-describedby');\n\n      EventHandler.trigger(this._element, this.constructor.Event.HIDDEN);\n\n      if (this._popper) {\n        this._popper.destroy();\n\n        this._popper = null;\n      }\n    };\n\n    const hideEvent = EventHandler.trigger(this._element, this.constructor.Event.HIDE);\n\n    if (hideEvent.defaultPrevented) {\n      return;\n    }\n\n    tip.classList.remove(CLASS_NAME_SHOW$3); // If this is a touch-enabled device we remove the extra\n    // empty mouseover listeners we added for iOS support\n\n    if ('ontouchstart' in document.documentElement) {\n      [].concat(...document.body.children).forEach(element => EventHandler.off(element, 'mouseover', noop));\n    }\n\n    this._activeTrigger[TRIGGER_CLICK] = false;\n    this._activeTrigger[TRIGGER_FOCUS] = false;\n    this._activeTrigger[TRIGGER_HOVER] = false;\n    const isAnimated = this.tip.classList.contains(CLASS_NAME_FADE$3);\n\n    this._queueCallback(complete, this.tip, isAnimated);\n\n    this._hoverState = '';\n  }\n\n  update() {\n    if (this._popper !== null) {\n      this._popper.update();\n    }\n  } // Protected\n\n\n  isWithContent() {\n    return Boolean(this.getTitle());\n  }\n\n  getTipElement() {\n    if (this.tip) {\n      return this.tip;\n    }\n\n    const element = document.createElement('div');\n    element.innerHTML = this._config.template;\n    this.tip = element.children[0];\n    return this.tip;\n  }\n\n  setContent() {\n    const tip = this.getTipElement();\n    this.setElementContent(SelectorEngine.findOne(SELECTOR_TOOLTIP_INNER, tip), this.getTitle());\n    tip.classList.remove(CLASS_NAME_FADE$3, CLASS_NAME_SHOW$3);\n  }\n\n  setElementContent(element, content) {\n    if (element === null) {\n      return;\n    }\n\n    if (isElement(content)) {\n      content = getElement(content); // content is a DOM node or a jQuery\n\n      if (this._config.html) {\n        if (content.parentNode !== element) {\n          element.innerHTML = '';\n          element.appendChild(content);\n        }\n      } else {\n        element.textContent = content.textContent;\n      }\n\n      return;\n    }\n\n    if (this._config.html) {\n      if (this._config.sanitize) {\n        content = sanitizeHtml(content, this._config.allowList, this._config.sanitizeFn);\n      }\n\n      element.innerHTML = content;\n    } else {\n      element.textContent = content;\n    }\n  }\n\n  getTitle() {\n    let title = this._element.getAttribute('data-bs-original-title');\n\n    if (!title) {\n      title = typeof this._config.title === 'function' ? this._config.title.call(this._element) : this._config.title;\n    }\n\n    return title;\n  }\n\n  updateAttachment(attachment) {\n    if (attachment === 'right') {\n      return 'end';\n    }\n\n    if (attachment === 'left') {\n      return 'start';\n    }\n\n    return attachment;\n  } // Private\n\n\n  _initializeOnDelegatedTarget(event, context) {\n    const dataKey = this.constructor.DATA_KEY;\n    context = context || Data.get(event.delegateTarget, dataKey);\n\n    if (!context) {\n      context = new this.constructor(event.delegateTarget, this._getDelegateConfig());\n      Data.set(event.delegateTarget, dataKey, context);\n    }\n\n    return context;\n  }\n\n  _getOffset() {\n    const {\n      offset\n    } = this._config;\n\n    if (typeof offset === 'string') {\n      return offset.split(',').map(val => Number.parseInt(val, 10));\n    }\n\n    if (typeof offset === 'function') {\n      return popperData => offset(popperData, this._element);\n    }\n\n    return offset;\n  }\n\n  _getPopperConfig(attachment) {\n    const defaultBsPopperConfig = {\n      placement: attachment,\n      modifiers: [{\n        name: 'flip',\n        options: {\n          fallbackPlacements: this._config.fallbackPlacements\n        }\n      }, {\n        name: 'offset',\n        options: {\n          offset: this._getOffset()\n        }\n      }, {\n        name: 'preventOverflow',\n        options: {\n          boundary: this._config.boundary\n        }\n      }, {\n        name: 'arrow',\n        options: {\n          element: `.${this.constructor.NAME}-arrow`\n        }\n      }, {\n        name: 'onChange',\n        enabled: true,\n        phase: 'afterWrite',\n        fn: data => this._handlePopperPlacementChange(data)\n      }],\n      onFirstUpdate: data => {\n        if (data.options.placement !== data.placement) {\n          this._handlePopperPlacementChange(data);\n        }\n      }\n    };\n    return { ...defaultBsPopperConfig,\n      ...(typeof this._config.popperConfig === 'function' ? this._config.popperConfig(defaultBsPopperConfig) : this._config.popperConfig)\n    };\n  }\n\n  _addAttachmentClass(attachment) {\n    this.getTipElement().classList.add(`${CLASS_PREFIX$1}-${this.updateAttachment(attachment)}`);\n  }\n\n  _getAttachment(placement) {\n    return AttachmentMap[placement.toUpperCase()];\n  }\n\n  _setListeners() {\n    const triggers = this._config.trigger.split(' ');\n\n    triggers.forEach(trigger => {\n      if (trigger === 'click') {\n        EventHandler.on(this._element, this.constructor.Event.CLICK, this._config.selector, event => this.toggle(event));\n      } else if (trigger !== TRIGGER_MANUAL) {\n        const eventIn = trigger === TRIGGER_HOVER ? this.constructor.Event.MOUSEENTER : this.constructor.Event.FOCUSIN;\n        const eventOut = trigger === TRIGGER_HOVER ? this.constructor.Event.MOUSELEAVE : this.constructor.Event.FOCUSOUT;\n        EventHandler.on(this._element, eventIn, this._config.selector, event => this._enter(event));\n        EventHandler.on(this._element, eventOut, this._config.selector, event => this._leave(event));\n      }\n    });\n\n    this._hideModalHandler = () => {\n      if (this._element) {\n        this.hide();\n      }\n    };\n\n    EventHandler.on(this._element.closest(`.${CLASS_NAME_MODAL}`), 'hide.bs.modal', this._hideModalHandler);\n\n    if (this._config.selector) {\n      this._config = { ...this._config,\n        trigger: 'manual',\n        selector: ''\n      };\n    } else {\n      this._fixTitle();\n    }\n  }\n\n  _fixTitle() {\n    const title = this._element.getAttribute('title');\n\n    const originalTitleType = typeof this._element.getAttribute('data-bs-original-title');\n\n    if (title || originalTitleType !== 'string') {\n      this._element.setAttribute('data-bs-original-title', title || '');\n\n      if (title && !this._element.getAttribute('aria-label') && !this._element.textContent) {\n        this._element.setAttribute('aria-label', title);\n      }\n\n      this._element.setAttribute('title', '');\n    }\n  }\n\n  _enter(event, context) {\n    context = this._initializeOnDelegatedTarget(event, context);\n\n    if (event) {\n      context._activeTrigger[event.type === 'focusin' ? TRIGGER_FOCUS : TRIGGER_HOVER] = true;\n    }\n\n    if (context.getTipElement().classList.contains(CLASS_NAME_SHOW$3) || context._hoverState === HOVER_STATE_SHOW) {\n      context._hoverState = HOVER_STATE_SHOW;\n      return;\n    }\n\n    clearTimeout(context._timeout);\n    context._hoverState = HOVER_STATE_SHOW;\n\n    if (!context._config.delay || !context._config.delay.show) {\n      context.show();\n      return;\n    }\n\n    context._timeout = setTimeout(() => {\n      if (context._hoverState === HOVER_STATE_SHOW) {\n        context.show();\n      }\n    }, context._config.delay.show);\n  }\n\n  _leave(event, context) {\n    context = this._initializeOnDelegatedTarget(event, context);\n\n    if (event) {\n      context._activeTrigger[event.type === 'focusout' ? TRIGGER_FOCUS : TRIGGER_HOVER] = context._element.contains(event.relatedTarget);\n    }\n\n    if (context._isWithActiveTrigger()) {\n      return;\n    }\n\n    clearTimeout(context._timeout);\n    context._hoverState = HOVER_STATE_OUT;\n\n    if (!context._config.delay || !context._config.delay.hide) {\n      context.hide();\n      return;\n    }\n\n    context._timeout = setTimeout(() => {\n      if (context._hoverState === HOVER_STATE_OUT) {\n        context.hide();\n      }\n    }, context._config.delay.hide);\n  }\n\n  _isWithActiveTrigger() {\n    for (const trigger in this._activeTrigger) {\n      if (this._activeTrigger[trigger]) {\n        return true;\n      }\n    }\n\n    return false;\n  }\n\n  _getConfig(config) {\n    const dataAttributes = Manipulator.getDataAttributes(this._element);\n    Object.keys(dataAttributes).forEach(dataAttr => {\n      if (DISALLOWED_ATTRIBUTES.has(dataAttr)) {\n        delete dataAttributes[dataAttr];\n      }\n    });\n    config = { ...this.constructor.Default,\n      ...dataAttributes,\n      ...(typeof config === 'object' && config ? config : {})\n    };\n    config.container = config.container === false ? document.body : getElement(config.container);\n\n    if (typeof config.delay === 'number') {\n      config.delay = {\n        show: config.delay,\n        hide: config.delay\n      };\n    }\n\n    if (typeof config.title === 'number') {\n      config.title = config.title.toString();\n    }\n\n    if (typeof config.content === 'number') {\n      config.content = config.content.toString();\n    }\n\n    typeCheckConfig(NAME$4, config, this.constructor.DefaultType);\n\n    if (config.sanitize) {\n      config.template = sanitizeHtml(config.template, config.allowList, config.sanitizeFn);\n    }\n\n    return config;\n  }\n\n  _getDelegateConfig() {\n    const config = {};\n\n    if (this._config) {\n      for (const key in this._config) {\n        if (this.constructor.Default[key] !== this._config[key]) {\n          config[key] = this._config[key];\n        }\n      }\n    }\n\n    return config;\n  }\n\n  _cleanTipClass() {\n    const tip = this.getTipElement();\n    const tabClass = tip.getAttribute('class').match(BSCLS_PREFIX_REGEX$1);\n\n    if (tabClass !== null && tabClass.length > 0) {\n      tabClass.map(token => token.trim()).forEach(tClass => tip.classList.remove(tClass));\n    }\n  }\n\n  _handlePopperPlacementChange(popperData) {\n    const {\n      state\n    } = popperData;\n\n    if (!state) {\n      return;\n    }\n\n    this.tip = state.elements.popper;\n\n    this._cleanTipClass();\n\n    this._addAttachmentClass(this._getAttachment(state.placement));\n  } // Static\n\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Tooltip.getOrCreateInstance(this, config);\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config]();\n      }\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Tooltip to jQuery only if jQuery is present\n */\n\n\ndefineJQueryPlugin(Tooltip);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): popover.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$3 = 'popover';\nconst DATA_KEY$3 = 'bs.popover';\nconst EVENT_KEY$3 = `.${DATA_KEY$3}`;\nconst CLASS_PREFIX = 'bs-popover';\nconst BSCLS_PREFIX_REGEX = new RegExp(`(^|\\\\s)${CLASS_PREFIX}\\\\S+`, 'g');\nconst Default$2 = { ...Tooltip.Default,\n  placement: 'right',\n  offset: [0, 8],\n  trigger: 'click',\n  content: '',\n  template: '<div class=\"popover\" role=\"tooltip\">' + '<div class=\"popover-arrow\"></div>' + '<h3 class=\"popover-header\"></h3>' + '<div class=\"popover-body\"></div>' + '</div>'\n};\nconst DefaultType$2 = { ...Tooltip.DefaultType,\n  content: '(string|element|function)'\n};\nconst Event$1 = {\n  HIDE: `hide${EVENT_KEY$3}`,\n  HIDDEN: `hidden${EVENT_KEY$3}`,\n  SHOW: `show${EVENT_KEY$3}`,\n  SHOWN: `shown${EVENT_KEY$3}`,\n  INSERTED: `inserted${EVENT_KEY$3}`,\n  CLICK: `click${EVENT_KEY$3}`,\n  FOCUSIN: `focusin${EVENT_KEY$3}`,\n  FOCUSOUT: `focusout${EVENT_KEY$3}`,\n  MOUSEENTER: `mouseenter${EVENT_KEY$3}`,\n  MOUSELEAVE: `mouseleave${EVENT_KEY$3}`\n};\nconst CLASS_NAME_FADE$2 = 'fade';\nconst CLASS_NAME_SHOW$2 = 'show';\nconst SELECTOR_TITLE = '.popover-header';\nconst SELECTOR_CONTENT = '.popover-body';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Popover extends Tooltip {\n  // Getters\n  static get Default() {\n    return Default$2;\n  }\n\n  static get NAME() {\n    return NAME$3;\n  }\n\n  static get Event() {\n    return Event$1;\n  }\n\n  static get DefaultType() {\n    return DefaultType$2;\n  } // Overrides\n\n\n  isWithContent() {\n    return this.getTitle() || this._getContent();\n  }\n\n  getTipElement() {\n    if (this.tip) {\n      return this.tip;\n    }\n\n    this.tip = super.getTipElement();\n\n    if (!this.getTitle()) {\n      SelectorEngine.findOne(SELECTOR_TITLE, this.tip).remove();\n    }\n\n    if (!this._getContent()) {\n      SelectorEngine.findOne(SELECTOR_CONTENT, this.tip).remove();\n    }\n\n    return this.tip;\n  }\n\n  setContent() {\n    const tip = this.getTipElement(); // we use append for html objects to maintain js events\n\n    this.setElementContent(SelectorEngine.findOne(SELECTOR_TITLE, tip), this.getTitle());\n\n    let content = this._getContent();\n\n    if (typeof content === 'function') {\n      content = content.call(this._element);\n    }\n\n    this.setElementContent(SelectorEngine.findOne(SELECTOR_CONTENT, tip), content);\n    tip.classList.remove(CLASS_NAME_FADE$2, CLASS_NAME_SHOW$2);\n  } // Private\n\n\n  _addAttachmentClass(attachment) {\n    this.getTipElement().classList.add(`${CLASS_PREFIX}-${this.updateAttachment(attachment)}`);\n  }\n\n  _getContent() {\n    return this._element.getAttribute('data-bs-content') || this._config.content;\n  }\n\n  _cleanTipClass() {\n    const tip = this.getTipElement();\n    const tabClass = tip.getAttribute('class').match(BSCLS_PREFIX_REGEX);\n\n    if (tabClass !== null && tabClass.length > 0) {\n      tabClass.map(token => token.trim()).forEach(tClass => tip.classList.remove(tClass));\n    }\n  } // Static\n\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Popover.getOrCreateInstance(this, config);\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config]();\n      }\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Popover to jQuery only if jQuery is present\n */\n\n\ndefineJQueryPlugin(Popover);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): scrollspy.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$2 = 'scrollspy';\nconst DATA_KEY$2 = 'bs.scrollspy';\nconst EVENT_KEY$2 = `.${DATA_KEY$2}`;\nconst DATA_API_KEY$1 = '.data-api';\nconst Default$1 = {\n  offset: 10,\n  method: 'auto',\n  target: ''\n};\nconst DefaultType$1 = {\n  offset: 'number',\n  method: 'string',\n  target: '(string|element)'\n};\nconst EVENT_ACTIVATE = `activate${EVENT_KEY$2}`;\nconst EVENT_SCROLL = `scroll${EVENT_KEY$2}`;\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY$2}${DATA_API_KEY$1}`;\nconst CLASS_NAME_DROPDOWN_ITEM = 'dropdown-item';\nconst CLASS_NAME_ACTIVE$1 = 'active';\nconst SELECTOR_DATA_SPY = '[data-bs-spy=\"scroll\"]';\nconst SELECTOR_NAV_LIST_GROUP$1 = '.nav, .list-group';\nconst SELECTOR_NAV_LINKS = '.nav-link';\nconst SELECTOR_NAV_ITEMS = '.nav-item';\nconst SELECTOR_LIST_ITEMS = '.list-group-item';\nconst SELECTOR_DROPDOWN$1 = '.dropdown';\nconst SELECTOR_DROPDOWN_TOGGLE$1 = '.dropdown-toggle';\nconst METHOD_OFFSET = 'offset';\nconst METHOD_POSITION = 'position';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass ScrollSpy extends BaseComponent {\n  constructor(element, config) {\n    super(element);\n    this._scrollElement = this._element.tagName === 'BODY' ? window : this._element;\n    this._config = this._getConfig(config);\n    this._selector = `${this._config.target} ${SELECTOR_NAV_LINKS}, ${this._config.target} ${SELECTOR_LIST_ITEMS}, ${this._config.target} .${CLASS_NAME_DROPDOWN_ITEM}`;\n    this._offsets = [];\n    this._targets = [];\n    this._activeTarget = null;\n    this._scrollHeight = 0;\n    EventHandler.on(this._scrollElement, EVENT_SCROLL, () => this._process());\n    this.refresh();\n\n    this._process();\n  } // Getters\n\n\n  static get Default() {\n    return Default$1;\n  }\n\n  static get NAME() {\n    return NAME$2;\n  } // Public\n\n\n  refresh() {\n    const autoMethod = this._scrollElement === this._scrollElement.window ? METHOD_OFFSET : METHOD_POSITION;\n    const offsetMethod = this._config.method === 'auto' ? autoMethod : this._config.method;\n    const offsetBase = offsetMethod === METHOD_POSITION ? this._getScrollTop() : 0;\n    this._offsets = [];\n    this._targets = [];\n    this._scrollHeight = this._getScrollHeight();\n    const targets = SelectorEngine.find(this._selector);\n    targets.map(element => {\n      const targetSelector = getSelectorFromElement(element);\n      const target = targetSelector ? SelectorEngine.findOne(targetSelector) : null;\n\n      if (target) {\n        const targetBCR = target.getBoundingClientRect();\n\n        if (targetBCR.width || targetBCR.height) {\n          return [Manipulator[offsetMethod](target).top + offsetBase, targetSelector];\n        }\n      }\n\n      return null;\n    }).filter(item => item).sort((a, b) => a[0] - b[0]).forEach(item => {\n      this._offsets.push(item[0]);\n\n      this._targets.push(item[1]);\n    });\n  }\n\n  dispose() {\n    EventHandler.off(this._scrollElement, EVENT_KEY$2);\n    super.dispose();\n  } // Private\n\n\n  _getConfig(config) {\n    config = { ...Default$1,\n      ...Manipulator.getDataAttributes(this._element),\n      ...(typeof config === 'object' && config ? config : {})\n    };\n\n    if (typeof config.target !== 'string' && isElement(config.target)) {\n      let {\n        id\n      } = config.target;\n\n      if (!id) {\n        id = getUID(NAME$2);\n        config.target.id = id;\n      }\n\n      config.target = `#${id}`;\n    }\n\n    typeCheckConfig(NAME$2, config, DefaultType$1);\n    return config;\n  }\n\n  _getScrollTop() {\n    return this._scrollElement === window ? this._scrollElement.pageYOffset : this._scrollElement.scrollTop;\n  }\n\n  _getScrollHeight() {\n    return this._scrollElement.scrollHeight || Math.max(document.body.scrollHeight, document.documentElement.scrollHeight);\n  }\n\n  _getOffsetHeight() {\n    return this._scrollElement === window ? window.innerHeight : this._scrollElement.getBoundingClientRect().height;\n  }\n\n  _process() {\n    const scrollTop = this._getScrollTop() + this._config.offset;\n\n    const scrollHeight = this._getScrollHeight();\n\n    const maxScroll = this._config.offset + scrollHeight - this._getOffsetHeight();\n\n    if (this._scrollHeight !== scrollHeight) {\n      this.refresh();\n    }\n\n    if (scrollTop >= maxScroll) {\n      const target = this._targets[this._targets.length - 1];\n\n      if (this._activeTarget !== target) {\n        this._activate(target);\n      }\n\n      return;\n    }\n\n    if (this._activeTarget && scrollTop < this._offsets[0] && this._offsets[0] > 0) {\n      this._activeTarget = null;\n\n      this._clear();\n\n      return;\n    }\n\n    for (let i = this._offsets.length; i--;) {\n      const isActiveTarget = this._activeTarget !== this._targets[i] && scrollTop >= this._offsets[i] && (typeof this._offsets[i + 1] === 'undefined' || scrollTop < this._offsets[i + 1]);\n\n      if (isActiveTarget) {\n        this._activate(this._targets[i]);\n      }\n    }\n  }\n\n  _activate(target) {\n    this._activeTarget = target;\n\n    this._clear();\n\n    const queries = this._selector.split(',').map(selector => `${selector}[data-bs-target=\"${target}\"],${selector}[href=\"${target}\"]`);\n\n    const link = SelectorEngine.findOne(queries.join(','));\n\n    if (link.classList.contains(CLASS_NAME_DROPDOWN_ITEM)) {\n      SelectorEngine.findOne(SELECTOR_DROPDOWN_TOGGLE$1, link.closest(SELECTOR_DROPDOWN$1)).classList.add(CLASS_NAME_ACTIVE$1);\n      link.classList.add(CLASS_NAME_ACTIVE$1);\n    } else {\n      // Set triggered link as active\n      link.classList.add(CLASS_NAME_ACTIVE$1);\n      SelectorEngine.parents(link, SELECTOR_NAV_LIST_GROUP$1).forEach(listGroup => {\n        // Set triggered links parents as active\n        // With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor\n        SelectorEngine.prev(listGroup, `${SELECTOR_NAV_LINKS}, ${SELECTOR_LIST_ITEMS}`).forEach(item => item.classList.add(CLASS_NAME_ACTIVE$1)); // Handle special case when .nav-link is inside .nav-item\n\n        SelectorEngine.prev(listGroup, SELECTOR_NAV_ITEMS).forEach(navItem => {\n          SelectorEngine.children(navItem, SELECTOR_NAV_LINKS).forEach(item => item.classList.add(CLASS_NAME_ACTIVE$1));\n        });\n      });\n    }\n\n    EventHandler.trigger(this._scrollElement, EVENT_ACTIVATE, {\n      relatedTarget: target\n    });\n  }\n\n  _clear() {\n    SelectorEngine.find(this._selector).filter(node => node.classList.contains(CLASS_NAME_ACTIVE$1)).forEach(node => node.classList.remove(CLASS_NAME_ACTIVE$1));\n  } // Static\n\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = ScrollSpy.getOrCreateInstance(this, config);\n\n      if (typeof config !== 'string') {\n        return;\n      }\n\n      if (typeof data[config] === 'undefined') {\n        throw new TypeError(`No method named \"${config}\"`);\n      }\n\n      data[config]();\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n  SelectorEngine.find(SELECTOR_DATA_SPY).forEach(spy => new ScrollSpy(spy));\n});\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .ScrollSpy to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(ScrollSpy);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): tab.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$1 = 'tab';\nconst DATA_KEY$1 = 'bs.tab';\nconst EVENT_KEY$1 = `.${DATA_KEY$1}`;\nconst DATA_API_KEY = '.data-api';\nconst EVENT_HIDE$1 = `hide${EVENT_KEY$1}`;\nconst EVENT_HIDDEN$1 = `hidden${EVENT_KEY$1}`;\nconst EVENT_SHOW$1 = `show${EVENT_KEY$1}`;\nconst EVENT_SHOWN$1 = `shown${EVENT_KEY$1}`;\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY$1}${DATA_API_KEY}`;\nconst CLASS_NAME_DROPDOWN_MENU = 'dropdown-menu';\nconst CLASS_NAME_ACTIVE = 'active';\nconst CLASS_NAME_FADE$1 = 'fade';\nconst CLASS_NAME_SHOW$1 = 'show';\nconst SELECTOR_DROPDOWN = '.dropdown';\nconst SELECTOR_NAV_LIST_GROUP = '.nav, .list-group';\nconst SELECTOR_ACTIVE = '.active';\nconst SELECTOR_ACTIVE_UL = ':scope > li > .active';\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"tab\"], [data-bs-toggle=\"pill\"], [data-bs-toggle=\"list\"]';\nconst SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle';\nconst SELECTOR_DROPDOWN_ACTIVE_CHILD = ':scope > .dropdown-menu .active';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Tab extends BaseComponent {\n  // Getters\n  static get NAME() {\n    return NAME$1;\n  } // Public\n\n\n  show() {\n    if (this._element.parentNode && this._element.parentNode.nodeType === Node.ELEMENT_NODE && this._element.classList.contains(CLASS_NAME_ACTIVE)) {\n      return;\n    }\n\n    let previous;\n    const target = getElementFromSelector(this._element);\n\n    const listElement = this._element.closest(SELECTOR_NAV_LIST_GROUP);\n\n    if (listElement) {\n      const itemSelector = listElement.nodeName === 'UL' || listElement.nodeName === 'OL' ? SELECTOR_ACTIVE_UL : SELECTOR_ACTIVE;\n      previous = SelectorEngine.find(itemSelector, listElement);\n      previous = previous[previous.length - 1];\n    }\n\n    const hideEvent = previous ? EventHandler.trigger(previous, EVENT_HIDE$1, {\n      relatedTarget: this._element\n    }) : null;\n    const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$1, {\n      relatedTarget: previous\n    });\n\n    if (showEvent.defaultPrevented || hideEvent !== null && hideEvent.defaultPrevented) {\n      return;\n    }\n\n    this._activate(this._element, listElement);\n\n    const complete = () => {\n      EventHandler.trigger(previous, EVENT_HIDDEN$1, {\n        relatedTarget: this._element\n      });\n      EventHandler.trigger(this._element, EVENT_SHOWN$1, {\n        relatedTarget: previous\n      });\n    };\n\n    if (target) {\n      this._activate(target, target.parentNode, complete);\n    } else {\n      complete();\n    }\n  } // Private\n\n\n  _activate(element, container, callback) {\n    const activeElements = container && (container.nodeName === 'UL' || container.nodeName === 'OL') ? SelectorEngine.find(SELECTOR_ACTIVE_UL, container) : SelectorEngine.children(container, SELECTOR_ACTIVE);\n    const active = activeElements[0];\n    const isTransitioning = callback && active && active.classList.contains(CLASS_NAME_FADE$1);\n\n    const complete = () => this._transitionComplete(element, active, callback);\n\n    if (active && isTransitioning) {\n      active.classList.remove(CLASS_NAME_SHOW$1);\n\n      this._queueCallback(complete, element, true);\n    } else {\n      complete();\n    }\n  }\n\n  _transitionComplete(element, active, callback) {\n    if (active) {\n      active.classList.remove(CLASS_NAME_ACTIVE);\n      const dropdownChild = SelectorEngine.findOne(SELECTOR_DROPDOWN_ACTIVE_CHILD, active.parentNode);\n\n      if (dropdownChild) {\n        dropdownChild.classList.remove(CLASS_NAME_ACTIVE);\n      }\n\n      if (active.getAttribute('role') === 'tab') {\n        active.setAttribute('aria-selected', false);\n      }\n    }\n\n    element.classList.add(CLASS_NAME_ACTIVE);\n\n    if (element.getAttribute('role') === 'tab') {\n      element.setAttribute('aria-selected', true);\n    }\n\n    reflow(element);\n\n    if (element.classList.contains(CLASS_NAME_FADE$1)) {\n      element.classList.add(CLASS_NAME_SHOW$1);\n    }\n\n    let parent = element.parentNode;\n\n    if (parent && parent.nodeName === 'LI') {\n      parent = parent.parentNode;\n    }\n\n    if (parent && parent.classList.contains(CLASS_NAME_DROPDOWN_MENU)) {\n      const dropdownElement = element.closest(SELECTOR_DROPDOWN);\n\n      if (dropdownElement) {\n        SelectorEngine.find(SELECTOR_DROPDOWN_TOGGLE, dropdownElement).forEach(dropdown => dropdown.classList.add(CLASS_NAME_ACTIVE));\n      }\n\n      element.setAttribute('aria-expanded', true);\n    }\n\n    if (callback) {\n      callback();\n    }\n  } // Static\n\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Tab.getOrCreateInstance(this);\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config]();\n      }\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n  if (['A', 'AREA'].includes(this.tagName)) {\n    event.preventDefault();\n  }\n\n  if (isDisabled(this)) {\n    return;\n  }\n\n  const data = Tab.getOrCreateInstance(this);\n  data.show();\n});\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Tab to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Tab);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): toast.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'toast';\nconst DATA_KEY = 'bs.toast';\nconst EVENT_KEY = `.${DATA_KEY}`;\nconst EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY}`;\nconst EVENT_MOUSEOVER = `mouseover${EVENT_KEY}`;\nconst EVENT_MOUSEOUT = `mouseout${EVENT_KEY}`;\nconst EVENT_FOCUSIN = `focusin${EVENT_KEY}`;\nconst EVENT_FOCUSOUT = `focusout${EVENT_KEY}`;\nconst EVENT_HIDE = `hide${EVENT_KEY}`;\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`;\nconst EVENT_SHOW = `show${EVENT_KEY}`;\nconst EVENT_SHOWN = `shown${EVENT_KEY}`;\nconst CLASS_NAME_FADE = 'fade';\nconst CLASS_NAME_HIDE = 'hide';\nconst CLASS_NAME_SHOW = 'show';\nconst CLASS_NAME_SHOWING = 'showing';\nconst DefaultType = {\n  animation: 'boolean',\n  autohide: 'boolean',\n  delay: 'number'\n};\nconst Default = {\n  animation: true,\n  autohide: true,\n  delay: 5000\n};\nconst SELECTOR_DATA_DISMISS = '[data-bs-dismiss=\"toast\"]';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Toast extends BaseComponent {\n  constructor(element, config) {\n    super(element);\n    this._config = this._getConfig(config);\n    this._timeout = null;\n    this._hasMouseInteraction = false;\n    this._hasKeyboardInteraction = false;\n\n    this._setListeners();\n  } // Getters\n\n\n  static get DefaultType() {\n    return DefaultType;\n  }\n\n  static get Default() {\n    return Default;\n  }\n\n  static get NAME() {\n    return NAME;\n  } // Public\n\n\n  show() {\n    const showEvent = EventHandler.trigger(this._element, EVENT_SHOW);\n\n    if (showEvent.defaultPrevented) {\n      return;\n    }\n\n    this._clearTimeout();\n\n    if (this._config.animation) {\n      this._element.classList.add(CLASS_NAME_FADE);\n    }\n\n    const complete = () => {\n      this._element.classList.remove(CLASS_NAME_SHOWING);\n\n      this._element.classList.add(CLASS_NAME_SHOW);\n\n      EventHandler.trigger(this._element, EVENT_SHOWN);\n\n      this._maybeScheduleHide();\n    };\n\n    this._element.classList.remove(CLASS_NAME_HIDE);\n\n    reflow(this._element);\n\n    this._element.classList.add(CLASS_NAME_SHOWING);\n\n    this._queueCallback(complete, this._element, this._config.animation);\n  }\n\n  hide() {\n    if (!this._element.classList.contains(CLASS_NAME_SHOW)) {\n      return;\n    }\n\n    const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE);\n\n    if (hideEvent.defaultPrevented) {\n      return;\n    }\n\n    const complete = () => {\n      this._element.classList.add(CLASS_NAME_HIDE);\n\n      EventHandler.trigger(this._element, EVENT_HIDDEN);\n    };\n\n    this._element.classList.remove(CLASS_NAME_SHOW);\n\n    this._queueCallback(complete, this._element, this._config.animation);\n  }\n\n  dispose() {\n    this._clearTimeout();\n\n    if (this._element.classList.contains(CLASS_NAME_SHOW)) {\n      this._element.classList.remove(CLASS_NAME_SHOW);\n    }\n\n    super.dispose();\n  } // Private\n\n\n  _getConfig(config) {\n    config = { ...Default,\n      ...Manipulator.getDataAttributes(this._element),\n      ...(typeof config === 'object' && config ? config : {})\n    };\n    typeCheckConfig(NAME, config, this.constructor.DefaultType);\n    return config;\n  }\n\n  _maybeScheduleHide() {\n    if (!this._config.autohide) {\n      return;\n    }\n\n    if (this._hasMouseInteraction || this._hasKeyboardInteraction) {\n      return;\n    }\n\n    this._timeout = setTimeout(() => {\n      this.hide();\n    }, this._config.delay);\n  }\n\n  _onInteraction(event, isInteracting) {\n    switch (event.type) {\n      case 'mouseover':\n      case 'mouseout':\n        this._hasMouseInteraction = isInteracting;\n        break;\n\n      case 'focusin':\n      case 'focusout':\n        this._hasKeyboardInteraction = isInteracting;\n        break;\n    }\n\n    if (isInteracting) {\n      this._clearTimeout();\n\n      return;\n    }\n\n    const nextElement = event.relatedTarget;\n\n    if (this._element === nextElement || this._element.contains(nextElement)) {\n      return;\n    }\n\n    this._maybeScheduleHide();\n  }\n\n  _setListeners() {\n    EventHandler.on(this._element, EVENT_CLICK_DISMISS, SELECTOR_DATA_DISMISS, () => this.hide());\n    EventHandler.on(this._element, EVENT_MOUSEOVER, event => this._onInteraction(event, true));\n    EventHandler.on(this._element, EVENT_MOUSEOUT, event => this._onInteraction(event, false));\n    EventHandler.on(this._element, EVENT_FOCUSIN, event => this._onInteraction(event, true));\n    EventHandler.on(this._element, EVENT_FOCUSOUT, event => this._onInteraction(event, false));\n  }\n\n  _clearTimeout() {\n    clearTimeout(this._timeout);\n    this._timeout = null;\n  } // Static\n\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Toast.getOrCreateInstance(this, config);\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config](this);\n      }\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Toast to jQuery only if jQuery is present\n */\n\n\ndefineJQueryPlugin(Toast);\n\nexport { Alert, Button, Carousel, Collapse, Dropdown, Modal, Offcanvas, Popover, ScrollSpy, Tab, Toast, Tooltip };\n//# sourceMappingURL=bootstrap.esm.js.map\n"
  },
  {
    "path": "src/sourceDev.WebApp/SharedThemes/minty/wwwroot/js/jquery.js",
    "content": "/*!\n * jQuery JavaScript Library v3.7.0\n * https://jquery.com/\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license\n * https://jquery.org/license\n *\n * Date: 2023-05-11T18:29Z\n */\n(function (global, factory) {\n\n\t\"use strict\";\n\n\tif (typeof module === \"object\" && typeof module.exports === \"object\") {\n\n\t\t// For CommonJS and CommonJS-like environments where a proper `window`\n\t\t// is present, execute the factory and get jQuery.\n\t\t// For environments that do not have a `window` with a `document`\n\t\t// (such as Node.js), expose a factory as module.exports.\n\t\t// This accentuates the need for the creation of a real `window`.\n\t\t// e.g. var jQuery = require(\"jquery\")(window);\n\t\t// See ticket trac-14549 for more info.\n\t\tmodule.exports = global.document ?\n\t\t\tfactory(global, true) :\n\t\t\tfunction (w) {\n\t\t\t\tif (!w.document) {\n\t\t\t\t\tthrow new Error(\"jQuery requires a window with a document\");\n\t\t\t\t}\n\t\t\t\treturn factory(w);\n\t\t\t};\n\t} else {\n\t\tfactory(global);\n\t}\n\n\t// Pass this if window is not defined yet\n})(typeof window !== \"undefined\" ? window : this, function (window, noGlobal) {\n\n\t// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1\n\t// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode\n\t// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common\n\t// enough that all such attempts are guarded in a try block.\n\t\"use strict\";\n\n\tvar arr = [];\n\n\tvar getProto = Object.getPrototypeOf;\n\n\tvar slice = arr.slice;\n\n\tvar flat = arr.flat ? function (array) {\n\t\treturn arr.flat.call(array);\n\t} : function (array) {\n\t\treturn arr.concat.apply([], array);\n\t};\n\n\n\tvar push = arr.push;\n\n\tvar indexOf = arr.indexOf;\n\n\tvar class2type = {};\n\n\tvar toString = class2type.toString;\n\n\tvar hasOwn = class2type.hasOwnProperty;\n\n\tvar fnToString = hasOwn.toString;\n\n\tvar ObjectFunctionString = fnToString.call(Object);\n\n\tvar support = {};\n\n\tvar isFunction = function isFunction(obj) {\n\n\t\t// Support: Chrome <=57, Firefox <=52\n\t\t// In some browsers, typeof returns \"function\" for HTML <object> elements\n\t\t// (i.e., `typeof document.createElement( \"object\" ) === \"function\"`).\n\t\t// We don't want to classify *any* DOM node as a function.\n\t\t// Support: QtWeb <=3.8.5, WebKit <=534.34, wkhtmltopdf tool <=0.12.5\n\t\t// Plus for old WebKit, typeof returns \"function\" for HTML collections\n\t\t// (e.g., `typeof document.getElementsByTagName(\"div\") === \"function\"`). (gh-4756)\n\t\treturn typeof obj === \"function\" && typeof obj.nodeType !== \"number\" &&\n\t\t\ttypeof obj.item !== \"function\";\n\t};\n\n\n\tvar isWindow = function isWindow(obj) {\n\t\treturn obj != null && obj === obj.window;\n\t};\n\n\n\tvar document = window.document;\n\n\n\n\tvar preservedScriptAttributes = {\n\t\ttype: true,\n\t\tsrc: true,\n\t\tnonce: true,\n\t\tnoModule: true\n\t};\n\n\tfunction DOMEval(code, node, doc) {\n\t\tdoc = doc || document;\n\n\t\tvar i, val,\n\t\t\tscript = doc.createElement(\"script\");\n\n\t\tscript.text = code;\n\t\tif (node) {\n\t\t\tfor (i in preservedScriptAttributes) {\n\n\t\t\t\t// Support: Firefox 64+, Edge 18+\n\t\t\t\t// Some browsers don't support the \"nonce\" property on scripts.\n\t\t\t\t// On the other hand, just using `getAttribute` is not enough as\n\t\t\t\t// the `nonce` attribute is reset to an empty string whenever it\n\t\t\t\t// becomes browsing-context connected.\n\t\t\t\t// See https://github.com/whatwg/html/issues/2369\n\t\t\t\t// See https://html.spec.whatwg.org/#nonce-attributes\n\t\t\t\t// The `node.getAttribute` check was added for the sake of\n\t\t\t\t// `jQuery.globalEval` so that it can fake a nonce-containing node\n\t\t\t\t// via an object.\n\t\t\t\tval = node[i] || node.getAttribute && node.getAttribute(i);\n\t\t\t\tif (val) {\n\t\t\t\t\tscript.setAttribute(i, val);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tdoc.head.appendChild(script).parentNode.removeChild(script);\n\t}\n\n\n\tfunction toType(obj) {\n\t\tif (obj == null) {\n\t\t\treturn obj + \"\";\n\t\t}\n\n\t\t// Support: Android <=2.3 only (functionish RegExp)\n\t\treturn typeof obj === \"object\" || typeof obj === \"function\" ?\n\t\t\tclass2type[toString.call(obj)] || \"object\" :\n\t\t\ttypeof obj;\n\t}\n\t/* global Symbol */\n\t// Defining this global in .eslintrc.json would create a danger of using the global\n\t// unguarded in another place, it seems safer to define global only for this module\n\n\n\n\tvar version = \"3.7.0\",\n\n\t\trhtmlSuffix = /HTML$/i,\n\n\t\t// Define a local copy of jQuery\n\t\tjQuery = function (selector, context) {\n\n\t\t\t// The jQuery object is actually just the init constructor 'enhanced'\n\t\t\t// Need init if jQuery is called (just allow error to be thrown if not included)\n\t\t\treturn new jQuery.fn.init(selector, context);\n\t\t};\n\n\tjQuery.fn = jQuery.prototype = {\n\n\t\t// The current version of jQuery being used\n\t\tjquery: version,\n\n\t\tconstructor: jQuery,\n\n\t\t// The default length of a jQuery object is 0\n\t\tlength: 0,\n\n\t\ttoArray: function () {\n\t\t\treturn slice.call(this);\n\t\t},\n\n\t\t// Get the Nth element in the matched element set OR\n\t\t// Get the whole matched element set as a clean array\n\t\tget: function (num) {\n\n\t\t\t// Return all the elements in a clean array\n\t\t\tif (num == null) {\n\t\t\t\treturn slice.call(this);\n\t\t\t}\n\n\t\t\t// Return just the one element from the set\n\t\t\treturn num < 0 ? this[num + this.length] : this[num];\n\t\t},\n\n\t\t// Take an array of elements and push it onto the stack\n\t\t// (returning the new matched element set)\n\t\tpushStack: function (elems) {\n\n\t\t\t// Build a new jQuery matched element set\n\t\t\tvar ret = jQuery.merge(this.constructor(), elems);\n\n\t\t\t// Add the old object onto the stack (as a reference)\n\t\t\tret.prevObject = this;\n\n\t\t\t// Return the newly-formed element set\n\t\t\treturn ret;\n\t\t},\n\n\t\t// Execute a callback for every element in the matched set.\n\t\teach: function (callback) {\n\t\t\treturn jQuery.each(this, callback);\n\t\t},\n\n\t\tmap: function (callback) {\n\t\t\treturn this.pushStack(jQuery.map(this, function (elem, i) {\n\t\t\t\treturn callback.call(elem, i, elem);\n\t\t\t}));\n\t\t},\n\n\t\tslice: function () {\n\t\t\treturn this.pushStack(slice.apply(this, arguments));\n\t\t},\n\n\t\tfirst: function () {\n\t\t\treturn this.eq(0);\n\t\t},\n\n\t\tlast: function () {\n\t\t\treturn this.eq(-1);\n\t\t},\n\n\t\teven: function () {\n\t\t\treturn this.pushStack(jQuery.grep(this, function (_elem, i) {\n\t\t\t\treturn (i + 1) % 2;\n\t\t\t}));\n\t\t},\n\n\t\todd: function () {\n\t\t\treturn this.pushStack(jQuery.grep(this, function (_elem, i) {\n\t\t\t\treturn i % 2;\n\t\t\t}));\n\t\t},\n\n\t\teq: function (i) {\n\t\t\tvar len = this.length,\n\t\t\t\tj = +i + (i < 0 ? len : 0);\n\t\t\treturn this.pushStack(j >= 0 && j < len ? [this[j]] : []);\n\t\t},\n\n\t\tend: function () {\n\t\t\treturn this.prevObject || this.constructor();\n\t\t},\n\n\t\t// For internal use only.\n\t\t// Behaves like an Array's method, not like a jQuery method.\n\t\tpush: push,\n\t\tsort: arr.sort,\n\t\tsplice: arr.splice\n\t};\n\n\tjQuery.extend = jQuery.fn.extend = function () {\n\t\tvar options, name, src, copy, copyIsArray, clone,\n\t\t\ttarget = arguments[0] || {},\n\t\t\ti = 1,\n\t\t\tlength = arguments.length,\n\t\t\tdeep = false;\n\n\t\t// Handle a deep copy situation\n\t\tif (typeof target === \"boolean\") {\n\t\t\tdeep = target;\n\n\t\t\t// Skip the boolean and the target\n\t\t\ttarget = arguments[i] || {};\n\t\t\ti++;\n\t\t}\n\n\t\t// Handle case when target is a string or something (possible in deep copy)\n\t\tif (typeof target !== \"object\" && !isFunction(target)) {\n\t\t\ttarget = {};\n\t\t}\n\n\t\t// Extend jQuery itself if only one argument is passed\n\t\tif (i === length) {\n\t\t\ttarget = this;\n\t\t\ti--;\n\t\t}\n\n\t\tfor (; i < length; i++) {\n\n\t\t\t// Only deal with non-null/undefined values\n\t\t\tif ((options = arguments[i]) != null) {\n\n\t\t\t\t// Extend the base object\n\t\t\t\tfor (name in options) {\n\t\t\t\t\tcopy = options[name];\n\n\t\t\t\t\t// Prevent Object.prototype pollution\n\t\t\t\t\t// Prevent never-ending loop\n\t\t\t\t\tif (name === \"__proto__\" || target === copy) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\t\tif (deep && copy && (jQuery.isPlainObject(copy) ||\n\t\t\t\t\t\t(copyIsArray = Array.isArray(copy)))) {\n\t\t\t\t\t\tsrc = target[name];\n\n\t\t\t\t\t\t// Ensure proper type for the source value\n\t\t\t\t\t\tif (copyIsArray && !Array.isArray(src)) {\n\t\t\t\t\t\t\tclone = [];\n\t\t\t\t\t\t} else if (!copyIsArray && !jQuery.isPlainObject(src)) {\n\t\t\t\t\t\t\tclone = {};\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tclone = src;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcopyIsArray = false;\n\n\t\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\t\ttarget[name] = jQuery.extend(deep, clone, copy);\n\n\t\t\t\t\t\t// Don't bring in undefined values\n\t\t\t\t\t} else if (copy !== undefined) {\n\t\t\t\t\t\ttarget[name] = copy;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Return the modified object\n\t\treturn target;\n\t};\n\n\tjQuery.extend({\n\n\t\t// Unique for each copy of jQuery on the page\n\t\texpando: \"jQuery\" + (version + Math.random()).replace(/\\D/g, \"\"),\n\n\t\t// Assume jQuery is ready without the ready module\n\t\tisReady: true,\n\n\t\terror: function (msg) {\n\t\t\tthrow new Error(msg);\n\t\t},\n\n\t\tnoop: function () { },\n\n\t\tisPlainObject: function (obj) {\n\t\t\tvar proto, Ctor;\n\n\t\t\t// Detect obvious negatives\n\t\t\t// Use toString instead of jQuery.type to catch host objects\n\t\t\tif (!obj || toString.call(obj) !== \"[object Object]\") {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tproto = getProto(obj);\n\n\t\t\t// Objects with no prototype (e.g., `Object.create( null )`) are plain\n\t\t\tif (!proto) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\t// Objects with prototype are plain iff they were constructed by a global Object function\n\t\t\tCtor = hasOwn.call(proto, \"constructor\") && proto.constructor;\n\t\t\treturn typeof Ctor === \"function\" && fnToString.call(Ctor) === ObjectFunctionString;\n\t\t},\n\n\t\tisEmptyObject: function (obj) {\n\t\t\tvar name;\n\n\t\t\tfor (name in obj) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\n\t\t// Evaluates a script in a provided context; falls back to the global one\n\t\t// if not specified.\n\t\tglobalEval: function (code, options, doc) {\n\t\t\tDOMEval(code, { nonce: options && options.nonce }, doc);\n\t\t},\n\n\t\teach: function (obj, callback) {\n\t\t\tvar length, i = 0;\n\n\t\t\tif (isArrayLike(obj)) {\n\t\t\t\tlength = obj.length;\n\t\t\t\tfor (; i < length; i++) {\n\t\t\t\t\tif (callback.call(obj[i], i, obj[i]) === false) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor (i in obj) {\n\t\t\t\t\tif (callback.call(obj[i], i, obj[i]) === false) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn obj;\n\t\t},\n\n\n\t\t// Retrieve the text value of an array of DOM nodes\n\t\ttext: function (elem) {\n\t\t\tvar node,\n\t\t\t\tret = \"\",\n\t\t\t\ti = 0,\n\t\t\t\tnodeType = elem.nodeType;\n\n\t\t\tif (!nodeType) {\n\n\t\t\t\t// If no nodeType, this is expected to be an array\n\t\t\t\twhile ((node = elem[i++])) {\n\n\t\t\t\t\t// Do not traverse comment nodes\n\t\t\t\t\tret += jQuery.text(node);\n\t\t\t\t}\n\t\t\t} else if (nodeType === 1 || nodeType === 9 || nodeType === 11) {\n\t\t\t\treturn elem.textContent;\n\t\t\t} else if (nodeType === 3 || nodeType === 4) {\n\t\t\t\treturn elem.nodeValue;\n\t\t\t}\n\n\t\t\t// Do not include comment or processing instruction nodes\n\n\t\t\treturn ret;\n\t\t},\n\n\t\t// results is for internal usage only\n\t\tmakeArray: function (arr, results) {\n\t\t\tvar ret = results || [];\n\n\t\t\tif (arr != null) {\n\t\t\t\tif (isArrayLike(Object(arr))) {\n\t\t\t\t\tjQuery.merge(ret,\n\t\t\t\t\t\ttypeof arr === \"string\" ?\n\t\t\t\t\t\t\t[arr] : arr\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\tpush.call(ret, arr);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn ret;\n\t\t},\n\n\t\tinArray: function (elem, arr, i) {\n\t\t\treturn arr == null ? -1 : indexOf.call(arr, elem, i);\n\t\t},\n\n\t\tisXMLDoc: function (elem) {\n\t\t\tvar namespace = elem && elem.namespaceURI,\n\t\t\t\tdocElem = elem && (elem.ownerDocument || elem).documentElement;\n\n\t\t\t// Assume HTML when documentElement doesn't yet exist, such as inside\n\t\t\t// document fragments.\n\t\t\treturn !rhtmlSuffix.test(namespace || docElem && docElem.nodeName || \"HTML\");\n\t\t},\n\n\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\tmerge: function (first, second) {\n\t\t\tvar len = +second.length,\n\t\t\t\tj = 0,\n\t\t\t\ti = first.length;\n\n\t\t\tfor (; j < len; j++) {\n\t\t\t\tfirst[i++] = second[j];\n\t\t\t}\n\n\t\t\tfirst.length = i;\n\n\t\t\treturn first;\n\t\t},\n\n\t\tgrep: function (elems, callback, invert) {\n\t\t\tvar callbackInverse,\n\t\t\t\tmatches = [],\n\t\t\t\ti = 0,\n\t\t\t\tlength = elems.length,\n\t\t\t\tcallbackExpect = !invert;\n\n\t\t\t// Go through the array, only saving the items\n\t\t\t// that pass the validator function\n\t\t\tfor (; i < length; i++) {\n\t\t\t\tcallbackInverse = !callback(elems[i], i);\n\t\t\t\tif (callbackInverse !== callbackExpect) {\n\t\t\t\t\tmatches.push(elems[i]);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn matches;\n\t\t},\n\n\t\t// arg is for internal usage only\n\t\tmap: function (elems, callback, arg) {\n\t\t\tvar length, value,\n\t\t\t\ti = 0,\n\t\t\t\tret = [];\n\n\t\t\t// Go through the array, translating each of the items to their new values\n\t\t\tif (isArrayLike(elems)) {\n\t\t\t\tlength = elems.length;\n\t\t\t\tfor (; i < length; i++) {\n\t\t\t\t\tvalue = callback(elems[i], i, arg);\n\n\t\t\t\t\tif (value != null) {\n\t\t\t\t\t\tret.push(value);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Go through every key on the object,\n\t\t\t} else {\n\t\t\t\tfor (i in elems) {\n\t\t\t\t\tvalue = callback(elems[i], i, arg);\n\n\t\t\t\t\tif (value != null) {\n\t\t\t\t\t\tret.push(value);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Flatten any nested arrays\n\t\t\treturn flat(ret);\n\t\t},\n\n\t\t// A global GUID counter for objects\n\t\tguid: 1,\n\n\t\t// jQuery.support is not used in Core but other projects attach their\n\t\t// properties to it so it needs to exist.\n\t\tsupport: support\n\t});\n\n\tif (typeof Symbol === \"function\") {\n\t\tjQuery.fn[Symbol.iterator] = arr[Symbol.iterator];\n\t}\n\n\t// Populate the class2type map\n\tjQuery.each(\"Boolean Number String Function Array Date RegExp Object Error Symbol\".split(\" \"),\n\t\tfunction (_i, name) {\n\t\t\tclass2type[\"[object \" + name + \"]\"] = name.toLowerCase();\n\t\t});\n\n\tfunction isArrayLike(obj) {\n\n\t\t// Support: real iOS 8.2 only (not reproducible in simulator)\n\t\t// `in` check used to prevent JIT error (gh-2145)\n\t\t// hasOwn isn't used here due to false negatives\n\t\t// regarding Nodelist length in IE\n\t\tvar length = !!obj && \"length\" in obj && obj.length,\n\t\t\ttype = toType(obj);\n\n\t\tif (isFunction(obj) || isWindow(obj)) {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn type === \"array\" || length === 0 ||\n\t\t\ttypeof length === \"number\" && length > 0 && (length - 1) in obj;\n\t}\n\n\n\tfunction nodeName(elem, name) {\n\n\t\treturn elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();\n\n\t}\n\tvar pop = arr.pop;\n\n\n\tvar sort = arr.sort;\n\n\n\tvar splice = arr.splice;\n\n\n\tvar whitespace = \"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\";\n\n\n\tvar rtrimCSS = new RegExp(\n\t\t\"^\" + whitespace + \"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\" + whitespace + \"+$\",\n\t\t\"g\"\n\t);\n\n\n\n\n\t// Note: an element does not contain itself\n\tjQuery.contains = function (a, b) {\n\t\tvar bup = b && b.parentNode;\n\n\t\treturn a === bup || !!(bup && bup.nodeType === 1 && (\n\n\t\t\t// Support: IE 9 - 11+\n\t\t\t// IE doesn't have `contains` on SVG.\n\t\t\ta.contains ?\n\t\t\t\ta.contains(bup) :\n\t\t\t\ta.compareDocumentPosition && a.compareDocumentPosition(bup) & 16\n\t\t));\n\t};\n\n\n\n\n\t// CSS string/identifier serialization\n\t// https://drafts.csswg.org/cssom/#common-serializing-idioms\n\tvar rcssescape = /([\\0-\\x1f\\x7f]|^-?\\d)|^-$|[^\\x80-\\uFFFF\\w-]/g;\n\n\tfunction fcssescape(ch, asCodePoint) {\n\t\tif (asCodePoint) {\n\n\t\t\t// U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER\n\t\t\tif (ch === \"\\0\") {\n\t\t\t\treturn \"\\uFFFD\";\n\t\t\t}\n\n\t\t\t// Control characters and (dependent upon position) numbers get escaped as code points\n\t\t\treturn ch.slice(0, -1) + \"\\\\\" + ch.charCodeAt(ch.length - 1).toString(16) + \" \";\n\t\t}\n\n\t\t// Other potentially-special ASCII characters get backslash-escaped\n\t\treturn \"\\\\\" + ch;\n\t}\n\n\tjQuery.escapeSelector = function (sel) {\n\t\treturn (sel + \"\").replace(rcssescape, fcssescape);\n\t};\n\n\n\n\n\tvar preferredDoc = document,\n\t\tpushNative = push;\n\n\t(function () {\n\n\t\tvar i,\n\t\t\tExpr,\n\t\t\toutermostContext,\n\t\t\tsortInput,\n\t\t\thasDuplicate,\n\t\t\tpush = pushNative,\n\n\t\t\t// Local document vars\n\t\t\tdocument,\n\t\t\tdocumentElement,\n\t\t\tdocumentIsHTML,\n\t\t\trbuggyQSA,\n\t\t\tmatches,\n\n\t\t\t// Instance-specific data\n\t\t\texpando = jQuery.expando,\n\t\t\tdirruns = 0,\n\t\t\tdone = 0,\n\t\t\tclassCache = createCache(),\n\t\t\ttokenCache = createCache(),\n\t\t\tcompilerCache = createCache(),\n\t\t\tnonnativeSelectorCache = createCache(),\n\t\t\tsortOrder = function (a, b) {\n\t\t\t\tif (a === b) {\n\t\t\t\t\thasDuplicate = true;\n\t\t\t\t}\n\t\t\t\treturn 0;\n\t\t\t},\n\n\t\t\tbooleans = \"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|\" +\n\t\t\t\t\"loop|multiple|open|readonly|required|scoped\",\n\n\t\t\t// Regular expressions\n\n\t\t\t// https://www.w3.org/TR/css-syntax-3/#ident-token-diagram\n\t\t\tidentifier = \"(?:\\\\\\\\[\\\\da-fA-F]{1,6}\" + whitespace +\n\t\t\t\t\"?|\\\\\\\\[^\\\\r\\\\n\\\\f]|[\\\\w-]|[^\\0-\\\\x7f])+\",\n\n\t\t\t// Attribute selectors: https://www.w3.org/TR/selectors/#attribute-selectors\n\t\t\tattributes = \"\\\\[\" + whitespace + \"*(\" + identifier + \")(?:\" + whitespace +\n\n\t\t\t\t// Operator (capture 2)\n\t\t\t\t\"*([*^$|!~]?=)\" + whitespace +\n\n\t\t\t\t// \"Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]\"\n\t\t\t\t\"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\" + identifier + \"))|)\" +\n\t\t\t\twhitespace + \"*\\\\]\",\n\n\t\t\tpseudos = \":(\" + identifier + \")(?:\\\\((\" +\n\n\t\t\t\t// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:\n\t\t\t\t// 1. quoted (capture 3; capture 4 or capture 5)\n\t\t\t\t\"('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|\" +\n\n\t\t\t\t// 2. simple (capture 6)\n\t\t\t\t\"((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\" + attributes + \")*)|\" +\n\n\t\t\t\t// 3. anything else (capture 2)\n\t\t\t\t\".*\" +\n\t\t\t\t\")\\\\)|)\",\n\n\t\t\t// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter\n\t\t\trwhitespace = new RegExp(whitespace + \"+\", \"g\"),\n\n\t\t\trcomma = new RegExp(\"^\" + whitespace + \"*,\" + whitespace + \"*\"),\n\t\t\trleadingCombinator = new RegExp(\"^\" + whitespace + \"*([>+~]|\" + whitespace + \")\" +\n\t\t\t\twhitespace + \"*\"),\n\t\t\trdescend = new RegExp(whitespace + \"|>\"),\n\n\t\t\trpseudo = new RegExp(pseudos),\n\t\t\tridentifier = new RegExp(\"^\" + identifier + \"$\"),\n\n\t\t\tmatchExpr = {\n\t\t\t\tID: new RegExp(\"^#(\" + identifier + \")\"),\n\t\t\t\tCLASS: new RegExp(\"^\\\\.(\" + identifier + \")\"),\n\t\t\t\tTAG: new RegExp(\"^(\" + identifier + \"|[*])\"),\n\t\t\t\tATTR: new RegExp(\"^\" + attributes),\n\t\t\t\tPSEUDO: new RegExp(\"^\" + pseudos),\n\t\t\t\tCHILD: new RegExp(\n\t\t\t\t\t\"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\" +\n\t\t\t\t\twhitespace + \"*(even|odd|(([+-]|)(\\\\d*)n|)\" + whitespace + \"*(?:([+-]|)\" +\n\t\t\t\t\twhitespace + \"*(\\\\d+)|))\" + whitespace + \"*\\\\)|)\", \"i\"),\n\t\t\t\tbool: new RegExp(\"^(?:\" + booleans + \")$\", \"i\"),\n\n\t\t\t\t// For use in libraries implementing .is()\n\t\t\t\t// We use this for POS matching in `select`\n\t\t\t\tneedsContext: new RegExp(\"^\" + whitespace +\n\t\t\t\t\t\"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\" + whitespace +\n\t\t\t\t\t\"*((?:-\\\\d)?\\\\d*)\" + whitespace + \"*\\\\)|)(?=[^-]|$)\", \"i\")\n\t\t\t},\n\n\t\t\trinputs = /^(?:input|select|textarea|button)$/i,\n\t\t\trheader = /^h\\d$/i,\n\n\t\t\t// Easily-parseable/retrievable ID or TAG or CLASS selectors\n\t\t\trquickExpr = /^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,\n\n\t\t\trsibling = /[+~]/,\n\n\t\t\t// CSS escapes\n\t\t\t// https://www.w3.org/TR/CSS21/syndata.html#escaped-characters\n\t\t\trunescape = new RegExp(\"\\\\\\\\[\\\\da-fA-F]{1,6}\" + whitespace +\n\t\t\t\t\"?|\\\\\\\\([^\\\\r\\\\n\\\\f])\", \"g\"),\n\t\t\tfunescape = function (escape, nonHex) {\n\t\t\t\tvar high = \"0x\" + escape.slice(1) - 0x10000;\n\n\t\t\t\tif (nonHex) {\n\n\t\t\t\t\t// Strip the backslash prefix from a non-hex escape sequence\n\t\t\t\t\treturn nonHex;\n\t\t\t\t}\n\n\t\t\t\t// Replace a hexadecimal escape sequence with the encoded Unicode code point\n\t\t\t\t// Support: IE <=11+\n\t\t\t\t// For values outside the Basic Multilingual Plane (BMP), manually construct a\n\t\t\t\t// surrogate pair\n\t\t\t\treturn high < 0 ?\n\t\t\t\t\tString.fromCharCode(high + 0x10000) :\n\t\t\t\t\tString.fromCharCode(high >> 10 | 0xD800, high & 0x3FF | 0xDC00);\n\t\t\t},\n\n\t\t\t// Used for iframes; see `setDocument`.\n\t\t\t// Support: IE 9 - 11+, Edge 12 - 18+\n\t\t\t// Removing the function wrapper causes a \"Permission Denied\"\n\t\t\t// error in IE/Edge.\n\t\t\tunloadHandler = function () {\n\t\t\t\tsetDocument();\n\t\t\t},\n\n\t\t\tinDisabledFieldset = addCombinator(\n\t\t\t\tfunction (elem) {\n\t\t\t\t\treturn elem.disabled === true && nodeName(elem, \"fieldset\");\n\t\t\t\t},\n\t\t\t\t{ dir: \"parentNode\", next: \"legend\" }\n\t\t\t);\n\n\t\t// Support: IE <=9 only\n\t\t// Accessing document.activeElement can throw unexpectedly\n\t\t// https://bugs.jquery.com/ticket/13393\n\t\tfunction safeActiveElement() {\n\t\t\ttry {\n\t\t\t\treturn document.activeElement;\n\t\t\t} catch (err) { }\n\t\t}\n\n\t\t// Optimize for push.apply( _, NodeList )\n\t\ttry {\n\t\t\tpush.apply(\n\t\t\t\t(arr = slice.call(preferredDoc.childNodes)),\n\t\t\t\tpreferredDoc.childNodes\n\t\t\t);\n\n\t\t\t// Support: Android <=4.0\n\t\t\t// Detect silently failing push.apply\n\t\t\t// eslint-disable-next-line no-unused-expressions\n\t\t\tarr[preferredDoc.childNodes.length].nodeType;\n\t\t} catch (e) {\n\t\t\tpush = {\n\t\t\t\tapply: function (target, els) {\n\t\t\t\t\tpushNative.apply(target, slice.call(els));\n\t\t\t\t},\n\t\t\t\tcall: function (target) {\n\t\t\t\t\tpushNative.apply(target, slice.call(arguments, 1));\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\n\t\tfunction find(selector, context, results, seed) {\n\t\t\tvar m, i, elem, nid, match, groups, newSelector,\n\t\t\t\tnewContext = context && context.ownerDocument,\n\n\t\t\t\t// nodeType defaults to 9, since context defaults to document\n\t\t\t\tnodeType = context ? context.nodeType : 9;\n\n\t\t\tresults = results || [];\n\n\t\t\t// Return early from calls with invalid selector or context\n\t\t\tif (typeof selector !== \"string\" || !selector ||\n\t\t\t\tnodeType !== 1 && nodeType !== 9 && nodeType !== 11) {\n\n\t\t\t\treturn results;\n\t\t\t}\n\n\t\t\t// Try to shortcut find operations (as opposed to filters) in HTML documents\n\t\t\tif (!seed) {\n\t\t\t\tsetDocument(context);\n\t\t\t\tcontext = context || document;\n\n\t\t\t\tif (documentIsHTML) {\n\n\t\t\t\t\t// If the selector is sufficiently simple, try using a \"get*By*\" DOM method\n\t\t\t\t\t// (excepting DocumentFragment context, where the methods don't exist)\n\t\t\t\t\tif (nodeType !== 11 && (match = rquickExpr.exec(selector))) {\n\n\t\t\t\t\t\t// ID selector\n\t\t\t\t\t\tif ((m = match[1])) {\n\n\t\t\t\t\t\t\t// Document context\n\t\t\t\t\t\t\tif (nodeType === 9) {\n\t\t\t\t\t\t\t\tif ((elem = context.getElementById(m))) {\n\n\t\t\t\t\t\t\t\t\t// Support: IE 9 only\n\t\t\t\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\t\t\t\tif (elem.id === m) {\n\t\t\t\t\t\t\t\t\t\tpush.call(results, elem);\n\t\t\t\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t// Element context\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t// Support: IE 9 only\n\t\t\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\t\t\tif (newContext && (elem = newContext.getElementById(m)) &&\n\t\t\t\t\t\t\t\t\tfind.contains(context, elem) &&\n\t\t\t\t\t\t\t\t\telem.id === m) {\n\n\t\t\t\t\t\t\t\t\tpush.call(results, elem);\n\t\t\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Type selector\n\t\t\t\t\t\t} else if (match[2]) {\n\t\t\t\t\t\t\tpush.apply(results, context.getElementsByTagName(selector));\n\t\t\t\t\t\t\treturn results;\n\n\t\t\t\t\t\t\t// Class selector\n\t\t\t\t\t\t} else if ((m = match[3]) && context.getElementsByClassName) {\n\t\t\t\t\t\t\tpush.apply(results, context.getElementsByClassName(m));\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Take advantage of querySelectorAll\n\t\t\t\t\tif (!nonnativeSelectorCache[selector + \" \"] &&\n\t\t\t\t\t\t(!rbuggyQSA || !rbuggyQSA.test(selector))) {\n\n\t\t\t\t\t\tnewSelector = selector;\n\t\t\t\t\t\tnewContext = context;\n\n\t\t\t\t\t\t// qSA considers elements outside a scoping root when evaluating child or\n\t\t\t\t\t\t// descendant combinators, which is not what we want.\n\t\t\t\t\t\t// In such cases, we work around the behavior by prefixing every selector in the\n\t\t\t\t\t\t// list with an ID selector referencing the scope context.\n\t\t\t\t\t\t// The technique has to be used as well when a leading combinator is used\n\t\t\t\t\t\t// as such selectors are not recognized by querySelectorAll.\n\t\t\t\t\t\t// Thanks to Andrew Dupont for this technique.\n\t\t\t\t\t\tif (nodeType === 1 &&\n\t\t\t\t\t\t\t(rdescend.test(selector) || rleadingCombinator.test(selector))) {\n\n\t\t\t\t\t\t\t// Expand context for sibling selectors\n\t\t\t\t\t\t\tnewContext = rsibling.test(selector) && testContext(context.parentNode) ||\n\t\t\t\t\t\t\t\tcontext;\n\n\t\t\t\t\t\t\t// We can use :scope instead of the ID hack if the browser\n\t\t\t\t\t\t\t// supports it & if we're not changing the context.\n\t\t\t\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when\n\t\t\t\t\t\t\t// strict-comparing two documents; shallow comparisons work.\n\t\t\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\t\t\tif (newContext != context || !support.scope) {\n\n\t\t\t\t\t\t\t\t// Capture the context ID, setting it first if necessary\n\t\t\t\t\t\t\t\tif ((nid = context.getAttribute(\"id\"))) {\n\t\t\t\t\t\t\t\t\tnid = jQuery.escapeSelector(nid);\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tcontext.setAttribute(\"id\", (nid = expando));\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Prefix every selector in the list\n\t\t\t\t\t\t\tgroups = tokenize(selector);\n\t\t\t\t\t\t\ti = groups.length;\n\t\t\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\t\t\tgroups[i] = (nid ? \"#\" + nid : \":scope\") + \" \" +\n\t\t\t\t\t\t\t\t\ttoSelector(groups[i]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tnewSelector = groups.join(\",\");\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tpush.apply(results,\n\t\t\t\t\t\t\t\tnewContext.querySelectorAll(newSelector)\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t} catch (qsaError) {\n\t\t\t\t\t\t\tnonnativeSelectorCache(selector, true);\n\t\t\t\t\t\t} finally {\n\t\t\t\t\t\t\tif (nid === expando) {\n\t\t\t\t\t\t\t\tcontext.removeAttribute(\"id\");\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// All others\n\t\t\treturn select(selector.replace(rtrimCSS, \"$1\"), context, results, seed);\n\t\t}\n\n\t\t/**\n\t\t * Create key-value caches of limited size\n\t\t * @returns {function(string, object)} Returns the Object data after storing it on itself with\n\t\t *\tproperty name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)\n\t\t *\tdeleting the oldest entry\n\t\t */\n\t\tfunction createCache() {\n\t\t\tvar keys = [];\n\n\t\t\tfunction cache(key, value) {\n\n\t\t\t\t// Use (key + \" \") to avoid collision with native prototype properties\n\t\t\t\t// (see https://github.com/jquery/sizzle/issues/157)\n\t\t\t\tif (keys.push(key + \" \") > Expr.cacheLength) {\n\n\t\t\t\t\t// Only keep the most recent entries\n\t\t\t\t\tdelete cache[keys.shift()];\n\t\t\t\t}\n\t\t\t\treturn (cache[key + \" \"] = value);\n\t\t\t}\n\t\t\treturn cache;\n\t\t}\n\n\t\t/**\n\t\t * Mark a function for special use by jQuery selector module\n\t\t * @param {Function} fn The function to mark\n\t\t */\n\t\tfunction markFunction(fn) {\n\t\t\tfn[expando] = true;\n\t\t\treturn fn;\n\t\t}\n\n\t\t/**\n\t\t * Support testing using an element\n\t\t * @param {Function} fn Passed the created element and returns a boolean result\n\t\t */\n\t\tfunction assert(fn) {\n\t\t\tvar el = document.createElement(\"fieldset\");\n\n\t\t\ttry {\n\t\t\t\treturn !!fn(el);\n\t\t\t} catch (e) {\n\t\t\t\treturn false;\n\t\t\t} finally {\n\n\t\t\t\t// Remove from its parent by default\n\t\t\t\tif (el.parentNode) {\n\t\t\t\t\tel.parentNode.removeChild(el);\n\t\t\t\t}\n\n\t\t\t\t// release memory in IE\n\t\t\t\tel = null;\n\t\t\t}\n\t\t}\n\n\t\t/**\n\t\t * Returns a function to use in pseudos for input types\n\t\t * @param {String} type\n\t\t */\n\t\tfunction createInputPseudo(type) {\n\t\t\treturn function (elem) {\n\t\t\t\treturn nodeName(elem, \"input\") && elem.type === type;\n\t\t\t};\n\t\t}\n\n\t\t/**\n\t\t * Returns a function to use in pseudos for buttons\n\t\t * @param {String} type\n\t\t */\n\t\tfunction createButtonPseudo(type) {\n\t\t\treturn function (elem) {\n\t\t\t\treturn (nodeName(elem, \"input\") || nodeName(elem, \"button\")) &&\n\t\t\t\t\telem.type === type;\n\t\t\t};\n\t\t}\n\n\t\t/**\n\t\t * Returns a function to use in pseudos for :enabled/:disabled\n\t\t * @param {Boolean} disabled true for :disabled; false for :enabled\n\t\t */\n\t\tfunction createDisabledPseudo(disabled) {\n\n\t\t\t// Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable\n\t\t\treturn function (elem) {\n\n\t\t\t\t// Only certain elements can match :enabled or :disabled\n\t\t\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled\n\t\t\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled\n\t\t\t\tif (\"form\" in elem) {\n\n\t\t\t\t\t// Check for inherited disabledness on relevant non-disabled elements:\n\t\t\t\t\t// * listed form-associated elements in a disabled fieldset\n\t\t\t\t\t//   https://html.spec.whatwg.org/multipage/forms.html#category-listed\n\t\t\t\t\t//   https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled\n\t\t\t\t\t// * option elements in a disabled optgroup\n\t\t\t\t\t//   https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled\n\t\t\t\t\t// All such elements have a \"form\" property.\n\t\t\t\t\tif (elem.parentNode && elem.disabled === false) {\n\n\t\t\t\t\t\t// Option elements defer to a parent optgroup if present\n\t\t\t\t\t\tif (\"label\" in elem) {\n\t\t\t\t\t\t\tif (\"label\" in elem.parentNode) {\n\t\t\t\t\t\t\t\treturn elem.parentNode.disabled === disabled;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\treturn elem.disabled === disabled;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Support: IE 6 - 11+\n\t\t\t\t\t\t// Use the isDisabled shortcut property to check for disabled fieldset ancestors\n\t\t\t\t\t\treturn elem.isDisabled === disabled ||\n\n\t\t\t\t\t\t\t// Where there is no isDisabled, check manually\n\t\t\t\t\t\t\telem.isDisabled !== !disabled &&\n\t\t\t\t\t\t\tinDisabledFieldset(elem) === disabled;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn elem.disabled === disabled;\n\n\t\t\t\t\t// Try to winnow out elements that can't be disabled before trusting the disabled property.\n\t\t\t\t\t// Some victims get caught in our net (label, legend, menu, track), but it shouldn't\n\t\t\t\t\t// even exist on them, let alone have a boolean value.\n\t\t\t\t} else if (\"label\" in elem) {\n\t\t\t\t\treturn elem.disabled === disabled;\n\t\t\t\t}\n\n\t\t\t\t// Remaining elements are neither :enabled nor :disabled\n\t\t\t\treturn false;\n\t\t\t};\n\t\t}\n\n\t\t/**\n\t\t * Returns a function to use in pseudos for positionals\n\t\t * @param {Function} fn\n\t\t */\n\t\tfunction createPositionalPseudo(fn) {\n\t\t\treturn markFunction(function (argument) {\n\t\t\t\targument = +argument;\n\t\t\t\treturn markFunction(function (seed, matches) {\n\t\t\t\t\tvar j,\n\t\t\t\t\t\tmatchIndexes = fn([], seed.length, argument),\n\t\t\t\t\t\ti = matchIndexes.length;\n\n\t\t\t\t\t// Match elements found at the specified indexes\n\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\tif (seed[(j = matchIndexes[i])]) {\n\t\t\t\t\t\t\tseed[j] = !(matches[j] = seed[j]);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\n\t\t/**\n\t\t * Checks a node for validity as a jQuery selector context\n\t\t * @param {Element|Object=} context\n\t\t * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value\n\t\t */\n\t\tfunction testContext(context) {\n\t\t\treturn context && typeof context.getElementsByTagName !== \"undefined\" && context;\n\t\t}\n\n\t\t/**\n\t\t * Sets document-related variables once based on the current document\n\t\t * @param {Element|Object} [node] An element or document object to use to set the document\n\t\t * @returns {Object} Returns the current document\n\t\t */\n\t\tfunction setDocument(node) {\n\t\t\tvar subWindow,\n\t\t\t\tdoc = node ? node.ownerDocument || node : preferredDoc;\n\n\t\t\t// Return early if doc is invalid or already selected\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tif (doc == document || doc.nodeType !== 9 || !doc.documentElement) {\n\t\t\t\treturn document;\n\t\t\t}\n\n\t\t\t// Update global variables\n\t\t\tdocument = doc;\n\t\t\tdocumentElement = document.documentElement;\n\t\t\tdocumentIsHTML = !jQuery.isXMLDoc(document);\n\n\t\t\t// Support: iOS 7 only, IE 9 - 11+\n\t\t\t// Older browsers didn't support unprefixed `matches`.\n\t\t\tmatches = documentElement.matches ||\n\t\t\t\tdocumentElement.webkitMatchesSelector ||\n\t\t\t\tdocumentElement.msMatchesSelector;\n\n\t\t\t// Support: IE 9 - 11+, Edge 12 - 18+\n\t\t\t// Accessing iframe documents after unload throws \"permission denied\" errors (see trac-13936)\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tif (preferredDoc != document &&\n\t\t\t\t(subWindow = document.defaultView) && subWindow.top !== subWindow) {\n\n\t\t\t\t// Support: IE 9 - 11+, Edge 12 - 18+\n\t\t\t\tsubWindow.addEventListener(\"unload\", unloadHandler);\n\t\t\t}\n\n\t\t\t// Support: IE <10\n\t\t\t// Check if getElementById returns elements by name\n\t\t\t// The broken getElementById methods don't pick up programmatically-set names,\n\t\t\t// so use a roundabout getElementsByName test\n\t\t\tsupport.getById = assert(function (el) {\n\t\t\t\tdocumentElement.appendChild(el).id = jQuery.expando;\n\t\t\t\treturn !document.getElementsByName ||\n\t\t\t\t\t!document.getElementsByName(jQuery.expando).length;\n\t\t\t});\n\n\t\t\t// Support: IE 9 only\n\t\t\t// Check to see if it's possible to do matchesSelector\n\t\t\t// on a disconnected node.\n\t\t\tsupport.disconnectedMatch = assert(function (el) {\n\t\t\t\treturn matches.call(el, \"*\");\n\t\t\t});\n\n\t\t\t// Support: IE 9 - 11+, Edge 12 - 18+\n\t\t\t// IE/Edge don't support the :scope pseudo-class.\n\t\t\tsupport.scope = assert(function () {\n\t\t\t\treturn document.querySelectorAll(\":scope\");\n\t\t\t});\n\n\t\t\t// Support: Chrome 105 - 111 only, Safari 15.4 - 16.3 only\n\t\t\t// Make sure the `:has()` argument is parsed unforgivingly.\n\t\t\t// We include `*` in the test to detect buggy implementations that are\n\t\t\t// _selectively_ forgiving (specifically when the list includes at least\n\t\t\t// one valid selector).\n\t\t\t// Note that we treat complete lack of support for `:has()` as if it were\n\t\t\t// spec-compliant support, which is fine because use of `:has()` in such\n\t\t\t// environments will fail in the qSA path and fall back to jQuery traversal\n\t\t\t// anyway.\n\t\t\tsupport.cssHas = assert(function () {\n\t\t\t\ttry {\n\t\t\t\t\tdocument.querySelector(\":has(*,:jqfake)\");\n\t\t\t\t\treturn false;\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t// ID filter and find\n\t\t\tif (support.getById) {\n\t\t\t\tExpr.filter.ID = function (id) {\n\t\t\t\t\tvar attrId = id.replace(runescape, funescape);\n\t\t\t\t\treturn function (elem) {\n\t\t\t\t\t\treturn elem.getAttribute(\"id\") === attrId;\n\t\t\t\t\t};\n\t\t\t\t};\n\t\t\t\tExpr.find.ID = function (id, context) {\n\t\t\t\t\tif (typeof context.getElementById !== \"undefined\" && documentIsHTML) {\n\t\t\t\t\t\tvar elem = context.getElementById(id);\n\t\t\t\t\t\treturn elem ? [elem] : [];\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t} else {\n\t\t\t\tExpr.filter.ID = function (id) {\n\t\t\t\t\tvar attrId = id.replace(runescape, funescape);\n\t\t\t\t\treturn function (elem) {\n\t\t\t\t\t\tvar node = typeof elem.getAttributeNode !== \"undefined\" &&\n\t\t\t\t\t\t\telem.getAttributeNode(\"id\");\n\t\t\t\t\t\treturn node && node.value === attrId;\n\t\t\t\t\t};\n\t\t\t\t};\n\n\t\t\t\t// Support: IE 6 - 7 only\n\t\t\t\t// getElementById is not reliable as a find shortcut\n\t\t\t\tExpr.find.ID = function (id, context) {\n\t\t\t\t\tif (typeof context.getElementById !== \"undefined\" && documentIsHTML) {\n\t\t\t\t\t\tvar node, i, elems,\n\t\t\t\t\t\t\telem = context.getElementById(id);\n\n\t\t\t\t\t\tif (elem) {\n\n\t\t\t\t\t\t\t// Verify the id attribute\n\t\t\t\t\t\t\tnode = elem.getAttributeNode(\"id\");\n\t\t\t\t\t\t\tif (node && node.value === id) {\n\t\t\t\t\t\t\t\treturn [elem];\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Fall back on getElementsByName\n\t\t\t\t\t\t\telems = context.getElementsByName(id);\n\t\t\t\t\t\t\ti = 0;\n\t\t\t\t\t\t\twhile ((elem = elems[i++])) {\n\t\t\t\t\t\t\t\tnode = elem.getAttributeNode(\"id\");\n\t\t\t\t\t\t\t\tif (node && node.value === id) {\n\t\t\t\t\t\t\t\t\treturn [elem];\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn [];\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\n\t\t\t// Tag\n\t\t\tExpr.find.TAG = function (tag, context) {\n\t\t\t\tif (typeof context.getElementsByTagName !== \"undefined\") {\n\t\t\t\t\treturn context.getElementsByTagName(tag);\n\n\t\t\t\t\t// DocumentFragment nodes don't have gEBTN\n\t\t\t\t} else {\n\t\t\t\t\treturn context.querySelectorAll(tag);\n\t\t\t\t}\n\t\t\t};\n\n\t\t\t// Class\n\t\t\tExpr.find.CLASS = function (className, context) {\n\t\t\t\tif (typeof context.getElementsByClassName !== \"undefined\" && documentIsHTML) {\n\t\t\t\t\treturn context.getElementsByClassName(className);\n\t\t\t\t}\n\t\t\t};\n\n\t\t\t/* QSA/matchesSelector\n\t\t\t---------------------------------------------------------------------- */\n\n\t\t\t// QSA and matchesSelector support\n\n\t\t\trbuggyQSA = [];\n\n\t\t\t// Build QSA regex\n\t\t\t// Regex strategy adopted from Diego Perini\n\t\t\tassert(function (el) {\n\n\t\t\t\tvar input;\n\n\t\t\t\tdocumentElement.appendChild(el).innerHTML =\n\t\t\t\t\t\"<a id='\" + expando + \"' href='' disabled='disabled'></a>\" +\n\t\t\t\t\t\"<select id='\" + expando + \"-\\r\\\\' disabled='disabled'>\" +\n\t\t\t\t\t\"<option selected=''></option></select>\";\n\n\t\t\t\t// Support: iOS <=7 - 8 only\n\t\t\t\t// Boolean attributes and \"value\" are not treated correctly in some XML documents\n\t\t\t\tif (!el.querySelectorAll(\"[selected]\").length) {\n\t\t\t\t\trbuggyQSA.push(\"\\\\[\" + whitespace + \"*(?:value|\" + booleans + \")\");\n\t\t\t\t}\n\n\t\t\t\t// Support: iOS <=7 - 8 only\n\t\t\t\tif (!el.querySelectorAll(\"[id~=\" + expando + \"-]\").length) {\n\t\t\t\t\trbuggyQSA.push(\"~=\");\n\t\t\t\t}\n\n\t\t\t\t// Support: iOS 8 only\n\t\t\t\t// https://bugs.webkit.org/show_bug.cgi?id=136851\n\t\t\t\t// In-page `selector#id sibling-combinator selector` fails\n\t\t\t\tif (!el.querySelectorAll(\"a#\" + expando + \"+*\").length) {\n\t\t\t\t\trbuggyQSA.push(\".#.+[+~]\");\n\t\t\t\t}\n\n\t\t\t\t// Support: Chrome <=105+, Firefox <=104+, Safari <=15.4+\n\t\t\t\t// In some of the document kinds, these selectors wouldn't work natively.\n\t\t\t\t// This is probably OK but for backwards compatibility we want to maintain\n\t\t\t\t// handling them through jQuery traversal in jQuery 3.x.\n\t\t\t\tif (!el.querySelectorAll(\":checked\").length) {\n\t\t\t\t\trbuggyQSA.push(\":checked\");\n\t\t\t\t}\n\n\t\t\t\t// Support: Windows 8 Native Apps\n\t\t\t\t// The type and name attributes are restricted during .innerHTML assignment\n\t\t\t\tinput = document.createElement(\"input\");\n\t\t\t\tinput.setAttribute(\"type\", \"hidden\");\n\t\t\t\tel.appendChild(input).setAttribute(\"name\", \"D\");\n\n\t\t\t\t// Support: IE 9 - 11+\n\t\t\t\t// IE's :disabled selector does not pick up the children of disabled fieldsets\n\t\t\t\t// Support: Chrome <=105+, Firefox <=104+, Safari <=15.4+\n\t\t\t\t// In some of the document kinds, these selectors wouldn't work natively.\n\t\t\t\t// This is probably OK but for backwards compatibility we want to maintain\n\t\t\t\t// handling them through jQuery traversal in jQuery 3.x.\n\t\t\t\tdocumentElement.appendChild(el).disabled = true;\n\t\t\t\tif (el.querySelectorAll(\":disabled\").length !== 2) {\n\t\t\t\t\trbuggyQSA.push(\":enabled\", \":disabled\");\n\t\t\t\t}\n\n\t\t\t\t// Support: IE 11+, Edge 15 - 18+\n\t\t\t\t// IE 11/Edge don't find elements on a `[name='']` query in some cases.\n\t\t\t\t// Adding a temporary attribute to the document before the selection works\n\t\t\t\t// around the issue.\n\t\t\t\t// Interestingly, IE 10 & older don't seem to have the issue.\n\t\t\t\tinput = document.createElement(\"input\");\n\t\t\t\tinput.setAttribute(\"name\", \"\");\n\t\t\t\tel.appendChild(input);\n\t\t\t\tif (!el.querySelectorAll(\"[name='']\").length) {\n\t\t\t\t\trbuggyQSA.push(\"\\\\[\" + whitespace + \"*name\" + whitespace + \"*=\" +\n\t\t\t\t\t\twhitespace + \"*(?:''|\\\"\\\")\");\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tif (!support.cssHas) {\n\n\t\t\t\t// Support: Chrome 105 - 110+, Safari 15.4 - 16.3+\n\t\t\t\t// Our regular `try-catch` mechanism fails to detect natively-unsupported\n\t\t\t\t// pseudo-classes inside `:has()` (such as `:has(:contains(\"Foo\"))`)\n\t\t\t\t// in browsers that parse the `:has()` argument as a forgiving selector list.\n\t\t\t\t// https://drafts.csswg.org/selectors/#relational now requires the argument\n\t\t\t\t// to be parsed unforgivingly, but browsers have not yet fully adjusted.\n\t\t\t\trbuggyQSA.push(\":has\");\n\t\t\t}\n\n\t\t\trbuggyQSA = rbuggyQSA.length && new RegExp(rbuggyQSA.join(\"|\"));\n\n\t\t\t/* Sorting\n\t\t\t---------------------------------------------------------------------- */\n\n\t\t\t// Document order sorting\n\t\t\tsortOrder = function (a, b) {\n\n\t\t\t\t// Flag for duplicate removal\n\t\t\t\tif (a === b) {\n\t\t\t\t\thasDuplicate = true;\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\n\t\t\t\t// Sort on method existence if only one input has compareDocumentPosition\n\t\t\t\tvar compare = !a.compareDocumentPosition - !b.compareDocumentPosition;\n\t\t\t\tif (compare) {\n\t\t\t\t\treturn compare;\n\t\t\t\t}\n\n\t\t\t\t// Calculate position if both inputs belong to the same document\n\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\tcompare = (a.ownerDocument || a) == (b.ownerDocument || b) ?\n\t\t\t\t\ta.compareDocumentPosition(b) :\n\n\t\t\t\t\t// Otherwise we know they are disconnected\n\t\t\t\t\t1;\n\n\t\t\t\t// Disconnected nodes\n\t\t\t\tif (compare & 1 ||\n\t\t\t\t\t(!support.sortDetached && b.compareDocumentPosition(a) === compare)) {\n\n\t\t\t\t\t// Choose the first element that is related to our preferred document\n\t\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\tif (a === document || a.ownerDocument == preferredDoc &&\n\t\t\t\t\t\tfind.contains(preferredDoc, a)) {\n\t\t\t\t\t\treturn -1;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\tif (b === document || b.ownerDocument == preferredDoc &&\n\t\t\t\t\t\tfind.contains(preferredDoc, b)) {\n\t\t\t\t\t\treturn 1;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Maintain original order\n\t\t\t\t\treturn sortInput ?\n\t\t\t\t\t\t(indexOf.call(sortInput, a) - indexOf.call(sortInput, b)) :\n\t\t\t\t\t\t0;\n\t\t\t\t}\n\n\t\t\t\treturn compare & 4 ? -1 : 1;\n\t\t\t};\n\n\t\t\treturn document;\n\t\t}\n\n\t\tfind.matches = function (expr, elements) {\n\t\t\treturn find(expr, null, null, elements);\n\t\t};\n\n\t\tfind.matchesSelector = function (elem, expr) {\n\t\t\tsetDocument(elem);\n\n\t\t\tif (documentIsHTML &&\n\t\t\t\t!nonnativeSelectorCache[expr + \" \"] &&\n\t\t\t\t(!rbuggyQSA || !rbuggyQSA.test(expr))) {\n\n\t\t\t\ttry {\n\t\t\t\t\tvar ret = matches.call(elem, expr);\n\n\t\t\t\t\t// IE 9's matchesSelector returns false on disconnected nodes\n\t\t\t\t\tif (ret || support.disconnectedMatch ||\n\n\t\t\t\t\t\t// As well, disconnected nodes are said to be in a document\n\t\t\t\t\t\t// fragment in IE 9\n\t\t\t\t\t\telem.document && elem.document.nodeType !== 11) {\n\t\t\t\t\t\treturn ret;\n\t\t\t\t\t}\n\t\t\t\t} catch (e) {\n\t\t\t\t\tnonnativeSelectorCache(expr, true);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn find(expr, document, null, [elem]).length > 0;\n\t\t};\n\n\t\tfind.contains = function (context, elem) {\n\n\t\t\t// Set document vars if needed\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tif ((context.ownerDocument || context) != document) {\n\t\t\t\tsetDocument(context);\n\t\t\t}\n\t\t\treturn jQuery.contains(context, elem);\n\t\t};\n\n\n\t\tfind.attr = function (elem, name) {\n\n\t\t\t// Set document vars if needed\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tif ((elem.ownerDocument || elem) != document) {\n\t\t\t\tsetDocument(elem);\n\t\t\t}\n\n\t\t\tvar fn = Expr.attrHandle[name.toLowerCase()],\n\n\t\t\t\t// Don't get fooled by Object.prototype properties (see trac-13807)\n\t\t\t\tval = fn && hasOwn.call(Expr.attrHandle, name.toLowerCase()) ?\n\t\t\t\t\tfn(elem, name, !documentIsHTML) :\n\t\t\t\t\tundefined;\n\n\t\t\tif (val !== undefined) {\n\t\t\t\treturn val;\n\t\t\t}\n\n\t\t\treturn elem.getAttribute(name);\n\t\t};\n\n\t\tfind.error = function (msg) {\n\t\t\tthrow new Error(\"Syntax error, unrecognized expression: \" + msg);\n\t\t};\n\n\t\t/**\n\t\t * Document sorting and removing duplicates\n\t\t * @param {ArrayLike} results\n\t\t */\n\t\tjQuery.uniqueSort = function (results) {\n\t\t\tvar elem,\n\t\t\t\tduplicates = [],\n\t\t\t\tj = 0,\n\t\t\t\ti = 0;\n\n\t\t\t// Unless we *know* we can detect duplicates, assume their presence\n\t\t\t//\n\t\t\t// Support: Android <=4.0+\n\t\t\t// Testing for detecting duplicates is unpredictable so instead assume we can't\n\t\t\t// depend on duplicate detection in all browsers without a stable sort.\n\t\t\thasDuplicate = !support.sortStable;\n\t\t\tsortInput = !support.sortStable && slice.call(results, 0);\n\t\t\tsort.call(results, sortOrder);\n\n\t\t\tif (hasDuplicate) {\n\t\t\t\twhile ((elem = results[i++])) {\n\t\t\t\t\tif (elem === results[i]) {\n\t\t\t\t\t\tj = duplicates.push(i);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\twhile (j--) {\n\t\t\t\t\tsplice.call(results, duplicates[j], 1);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Clear input after sorting to release objects\n\t\t\t// See https://github.com/jquery/sizzle/pull/225\n\t\t\tsortInput = null;\n\n\t\t\treturn results;\n\t\t};\n\n\t\tjQuery.fn.uniqueSort = function () {\n\t\t\treturn this.pushStack(jQuery.uniqueSort(slice.apply(this)));\n\t\t};\n\n\t\tExpr = jQuery.expr = {\n\n\t\t\t// Can be adjusted by the user\n\t\t\tcacheLength: 50,\n\n\t\t\tcreatePseudo: markFunction,\n\n\t\t\tmatch: matchExpr,\n\n\t\t\tattrHandle: {},\n\n\t\t\tfind: {},\n\n\t\t\trelative: {\n\t\t\t\t\">\": { dir: \"parentNode\", first: true },\n\t\t\t\t\" \": { dir: \"parentNode\" },\n\t\t\t\t\"+\": { dir: \"previousSibling\", first: true },\n\t\t\t\t\"~\": { dir: \"previousSibling\" }\n\t\t\t},\n\n\t\t\tpreFilter: {\n\t\t\t\tATTR: function (match) {\n\t\t\t\t\tmatch[1] = match[1].replace(runescape, funescape);\n\n\t\t\t\t\t// Move the given value to match[3] whether quoted or unquoted\n\t\t\t\t\tmatch[3] = (match[3] || match[4] || match[5] || \"\")\n\t\t\t\t\t\t.replace(runescape, funescape);\n\n\t\t\t\t\tif (match[2] === \"~=\") {\n\t\t\t\t\t\tmatch[3] = \" \" + match[3] + \" \";\n\t\t\t\t\t}\n\n\t\t\t\t\treturn match.slice(0, 4);\n\t\t\t\t},\n\n\t\t\t\tCHILD: function (match) {\n\n\t\t\t\t\t/* matches from matchExpr[\"CHILD\"]\n\t\t\t\t\t\t1 type (only|nth|...)\n\t\t\t\t\t\t2 what (child|of-type)\n\t\t\t\t\t\t3 argument (even|odd|\\d*|\\d*n([+-]\\d+)?|...)\n\t\t\t\t\t\t4 xn-component of xn+y argument ([+-]?\\d*n|)\n\t\t\t\t\t\t5 sign of xn-component\n\t\t\t\t\t\t6 x of xn-component\n\t\t\t\t\t\t7 sign of y-component\n\t\t\t\t\t\t8 y of y-component\n\t\t\t\t\t*/\n\t\t\t\t\tmatch[1] = match[1].toLowerCase();\n\n\t\t\t\t\tif (match[1].slice(0, 3) === \"nth\") {\n\n\t\t\t\t\t\t// nth-* requires argument\n\t\t\t\t\t\tif (!match[3]) {\n\t\t\t\t\t\t\tfind.error(match[0]);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// numeric x and y parameters for Expr.filter.CHILD\n\t\t\t\t\t\t// remember that false/true cast respectively to 0/1\n\t\t\t\t\t\tmatch[4] = +(match[4] ?\n\t\t\t\t\t\t\tmatch[5] + (match[6] || 1) :\n\t\t\t\t\t\t\t2 * (match[3] === \"even\" || match[3] === \"odd\")\n\t\t\t\t\t\t);\n\t\t\t\t\t\tmatch[5] = +((match[7] + match[8]) || match[3] === \"odd\");\n\n\t\t\t\t\t\t// other types prohibit arguments\n\t\t\t\t\t} else if (match[3]) {\n\t\t\t\t\t\tfind.error(match[0]);\n\t\t\t\t\t}\n\n\t\t\t\t\treturn match;\n\t\t\t\t},\n\n\t\t\t\tPSEUDO: function (match) {\n\t\t\t\t\tvar excess,\n\t\t\t\t\t\tunquoted = !match[6] && match[2];\n\n\t\t\t\t\tif (matchExpr.CHILD.test(match[0])) {\n\t\t\t\t\t\treturn null;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Accept quoted arguments as-is\n\t\t\t\t\tif (match[3]) {\n\t\t\t\t\t\tmatch[2] = match[4] || match[5] || \"\";\n\n\t\t\t\t\t\t// Strip excess characters from unquoted arguments\n\t\t\t\t\t} else if (unquoted && rpseudo.test(unquoted) &&\n\n\t\t\t\t\t\t// Get excess from tokenize (recursively)\n\t\t\t\t\t\t(excess = tokenize(unquoted, true)) &&\n\n\t\t\t\t\t\t// advance to the next closing parenthesis\n\t\t\t\t\t\t(excess = unquoted.indexOf(\")\", unquoted.length - excess) - unquoted.length)) {\n\n\t\t\t\t\t\t// excess is a negative index\n\t\t\t\t\t\tmatch[0] = match[0].slice(0, excess);\n\t\t\t\t\t\tmatch[2] = unquoted.slice(0, excess);\n\t\t\t\t\t}\n\n\t\t\t\t\t// Return only captures needed by the pseudo filter method (type and argument)\n\t\t\t\t\treturn match.slice(0, 3);\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tfilter: {\n\n\t\t\t\tTAG: function (nodeNameSelector) {\n\t\t\t\t\tvar expectedNodeName = nodeNameSelector.replace(runescape, funescape).toLowerCase();\n\t\t\t\t\treturn nodeNameSelector === \"*\" ?\n\t\t\t\t\t\tfunction () {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t} :\n\t\t\t\t\t\tfunction (elem) {\n\t\t\t\t\t\t\treturn nodeName(elem, expectedNodeName);\n\t\t\t\t\t\t};\n\t\t\t\t},\n\n\t\t\t\tCLASS: function (className) {\n\t\t\t\t\tvar pattern = classCache[className + \" \"];\n\n\t\t\t\t\treturn pattern ||\n\t\t\t\t\t\t(pattern = new RegExp(\"(^|\" + whitespace + \")\" + className +\n\t\t\t\t\t\t\t\"(\" + whitespace + \"|$)\")) &&\n\t\t\t\t\t\tclassCache(className, function (elem) {\n\t\t\t\t\t\t\treturn pattern.test(\n\t\t\t\t\t\t\t\ttypeof elem.className === \"string\" && elem.className ||\n\t\t\t\t\t\t\t\ttypeof elem.getAttribute !== \"undefined\" &&\n\t\t\t\t\t\t\t\telem.getAttribute(\"class\") ||\n\t\t\t\t\t\t\t\t\"\"\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t});\n\t\t\t\t},\n\n\t\t\t\tATTR: function (name, operator, check) {\n\t\t\t\t\treturn function (elem) {\n\t\t\t\t\t\tvar result = find.attr(elem, name);\n\n\t\t\t\t\t\tif (result == null) {\n\t\t\t\t\t\t\treturn operator === \"!=\";\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!operator) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tresult += \"\";\n\n\t\t\t\t\t\tif (operator === \"=\") {\n\t\t\t\t\t\t\treturn result === check;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (operator === \"!=\") {\n\t\t\t\t\t\t\treturn result !== check;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (operator === \"^=\") {\n\t\t\t\t\t\t\treturn check && result.indexOf(check) === 0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (operator === \"*=\") {\n\t\t\t\t\t\t\treturn check && result.indexOf(check) > -1;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (operator === \"$=\") {\n\t\t\t\t\t\t\treturn check && result.slice(-check.length) === check;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (operator === \"~=\") {\n\t\t\t\t\t\t\treturn (\" \" + result.replace(rwhitespace, \" \") + \" \")\n\t\t\t\t\t\t\t\t.indexOf(check) > -1;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (operator === \"|=\") {\n\t\t\t\t\t\t\treturn result === check || result.slice(0, check.length + 1) === check + \"-\";\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t};\n\t\t\t\t},\n\n\t\t\t\tCHILD: function (type, what, _argument, first, last) {\n\t\t\t\t\tvar simple = type.slice(0, 3) !== \"nth\",\n\t\t\t\t\t\tforward = type.slice(-4) !== \"last\",\n\t\t\t\t\t\tofType = what === \"of-type\";\n\n\t\t\t\t\treturn first === 1 && last === 0 ?\n\n\t\t\t\t\t\t// Shortcut for :nth-*(n)\n\t\t\t\t\t\tfunction (elem) {\n\t\t\t\t\t\t\treturn !!elem.parentNode;\n\t\t\t\t\t\t} :\n\n\t\t\t\t\t\tfunction (elem, _context, xml) {\n\t\t\t\t\t\t\tvar cache, outerCache, node, nodeIndex, start,\n\t\t\t\t\t\t\t\tdir = simple !== forward ? \"nextSibling\" : \"previousSibling\",\n\t\t\t\t\t\t\t\tparent = elem.parentNode,\n\t\t\t\t\t\t\t\tname = ofType && elem.nodeName.toLowerCase(),\n\t\t\t\t\t\t\t\tuseCache = !xml && !ofType,\n\t\t\t\t\t\t\t\tdiff = false;\n\n\t\t\t\t\t\t\tif (parent) {\n\n\t\t\t\t\t\t\t\t// :(first|last|only)-(child|of-type)\n\t\t\t\t\t\t\t\tif (simple) {\n\t\t\t\t\t\t\t\t\twhile (dir) {\n\t\t\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\t\t\twhile ((node = node[dir])) {\n\t\t\t\t\t\t\t\t\t\t\tif (ofType ?\n\t\t\t\t\t\t\t\t\t\t\t\tnodeName(node, name) :\n\t\t\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1) {\n\n\t\t\t\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t// Reverse direction for :only-* (if we haven't yet done so)\n\t\t\t\t\t\t\t\t\t\tstart = dir = type === \"only\" && !start && \"nextSibling\";\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tstart = [forward ? parent.firstChild : parent.lastChild];\n\n\t\t\t\t\t\t\t\t// non-xml :nth-child(...) stores cache data on `parent`\n\t\t\t\t\t\t\t\tif (forward && useCache) {\n\n\t\t\t\t\t\t\t\t\t// Seek `elem` from a previously-cached index\n\t\t\t\t\t\t\t\t\touterCache = parent[expando] || (parent[expando] = {});\n\t\t\t\t\t\t\t\t\tcache = outerCache[type] || [];\n\t\t\t\t\t\t\t\t\tnodeIndex = cache[0] === dirruns && cache[1];\n\t\t\t\t\t\t\t\t\tdiff = nodeIndex && cache[2];\n\t\t\t\t\t\t\t\t\tnode = nodeIndex && parent.childNodes[nodeIndex];\n\n\t\t\t\t\t\t\t\t\twhile ((node = ++nodeIndex && node && node[dir] ||\n\n\t\t\t\t\t\t\t\t\t\t// Fallback to seeking `elem` from the start\n\t\t\t\t\t\t\t\t\t\t(diff = nodeIndex = 0) || start.pop())) {\n\n\t\t\t\t\t\t\t\t\t\t// When found, cache indexes on `parent` and break\n\t\t\t\t\t\t\t\t\t\tif (node.nodeType === 1 && ++diff && node === elem) {\n\t\t\t\t\t\t\t\t\t\t\touterCache[type] = [dirruns, nodeIndex, diff];\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t// Use previously-cached element index if available\n\t\t\t\t\t\t\t\t\tif (useCache) {\n\t\t\t\t\t\t\t\t\t\touterCache = elem[expando] || (elem[expando] = {});\n\t\t\t\t\t\t\t\t\t\tcache = outerCache[type] || [];\n\t\t\t\t\t\t\t\t\t\tnodeIndex = cache[0] === dirruns && cache[1];\n\t\t\t\t\t\t\t\t\t\tdiff = nodeIndex;\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// xml :nth-child(...)\n\t\t\t\t\t\t\t\t\t// or :nth-last-child(...) or :nth(-last)?-of-type(...)\n\t\t\t\t\t\t\t\t\tif (diff === false) {\n\n\t\t\t\t\t\t\t\t\t\t// Use the same loop as above to seek `elem` from the start\n\t\t\t\t\t\t\t\t\t\twhile ((node = ++nodeIndex && node && node[dir] ||\n\t\t\t\t\t\t\t\t\t\t\t(diff = nodeIndex = 0) || start.pop())) {\n\n\t\t\t\t\t\t\t\t\t\t\tif ((ofType ?\n\t\t\t\t\t\t\t\t\t\t\t\tnodeName(node, name) :\n\t\t\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1) &&\n\t\t\t\t\t\t\t\t\t\t\t\t++diff) {\n\n\t\t\t\t\t\t\t\t\t\t\t\t// Cache the index of each encountered element\n\t\t\t\t\t\t\t\t\t\t\t\tif (useCache) {\n\t\t\t\t\t\t\t\t\t\t\t\t\touterCache = node[expando] ||\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t(node[expando] = {});\n\t\t\t\t\t\t\t\t\t\t\t\t\touterCache[type] = [dirruns, diff];\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\tif (node === elem) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t// Incorporate the offset, then check against cycle size\n\t\t\t\t\t\t\t\tdiff -= last;\n\t\t\t\t\t\t\t\treturn diff === first || (diff % first === 0 && diff / first >= 0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\t\t\t\t},\n\n\t\t\t\tPSEUDO: function (pseudo, argument) {\n\n\t\t\t\t\t// pseudo-class names are case-insensitive\n\t\t\t\t\t// https://www.w3.org/TR/selectors/#pseudo-classes\n\t\t\t\t\t// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters\n\t\t\t\t\t// Remember that setFilters inherits from pseudos\n\t\t\t\t\tvar args,\n\t\t\t\t\t\tfn = Expr.pseudos[pseudo] || Expr.setFilters[pseudo.toLowerCase()] ||\n\t\t\t\t\t\t\tfind.error(\"unsupported pseudo: \" + pseudo);\n\n\t\t\t\t\t// The user may use createPseudo to indicate that\n\t\t\t\t\t// arguments are needed to create the filter function\n\t\t\t\t\t// just as jQuery does\n\t\t\t\t\tif (fn[expando]) {\n\t\t\t\t\t\treturn fn(argument);\n\t\t\t\t\t}\n\n\t\t\t\t\t// But maintain support for old signatures\n\t\t\t\t\tif (fn.length > 1) {\n\t\t\t\t\t\targs = [pseudo, pseudo, \"\", argument];\n\t\t\t\t\t\treturn Expr.setFilters.hasOwnProperty(pseudo.toLowerCase()) ?\n\t\t\t\t\t\t\tmarkFunction(function (seed, matches) {\n\t\t\t\t\t\t\t\tvar idx,\n\t\t\t\t\t\t\t\t\tmatched = fn(seed, argument),\n\t\t\t\t\t\t\t\t\ti = matched.length;\n\t\t\t\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\t\t\t\tidx = indexOf.call(seed, matched[i]);\n\t\t\t\t\t\t\t\t\tseed[idx] = !(matches[idx] = matched[i]);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}) :\n\t\t\t\t\t\t\tfunction (elem) {\n\t\t\t\t\t\t\t\treturn fn(elem, 0, args);\n\t\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\treturn fn;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tpseudos: {\n\n\t\t\t\t// Potentially complex pseudos\n\t\t\t\tnot: markFunction(function (selector) {\n\n\t\t\t\t\t// Trim the selector passed to compile\n\t\t\t\t\t// to avoid treating leading and trailing\n\t\t\t\t\t// spaces as combinators\n\t\t\t\t\tvar input = [],\n\t\t\t\t\t\tresults = [],\n\t\t\t\t\t\tmatcher = compile(selector.replace(rtrimCSS, \"$1\"));\n\n\t\t\t\t\treturn matcher[expando] ?\n\t\t\t\t\t\tmarkFunction(function (seed, matches, _context, xml) {\n\t\t\t\t\t\t\tvar elem,\n\t\t\t\t\t\t\t\tunmatched = matcher(seed, null, xml, []),\n\t\t\t\t\t\t\t\ti = seed.length;\n\n\t\t\t\t\t\t\t// Match elements unmatched by `matcher`\n\t\t\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\t\t\tif ((elem = unmatched[i])) {\n\t\t\t\t\t\t\t\t\tseed[i] = !(matches[i] = elem);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}) :\n\t\t\t\t\t\tfunction (elem, _context, xml) {\n\t\t\t\t\t\t\tinput[0] = elem;\n\t\t\t\t\t\t\tmatcher(input, null, xml, results);\n\n\t\t\t\t\t\t\t// Don't keep the element\n\t\t\t\t\t\t\t// (see https://github.com/jquery/sizzle/issues/299)\n\t\t\t\t\t\t\tinput[0] = null;\n\t\t\t\t\t\t\treturn !results.pop();\n\t\t\t\t\t\t};\n\t\t\t\t}),\n\n\t\t\t\thas: markFunction(function (selector) {\n\t\t\t\t\treturn function (elem) {\n\t\t\t\t\t\treturn find(selector, elem).length > 0;\n\t\t\t\t\t};\n\t\t\t\t}),\n\n\t\t\t\tcontains: markFunction(function (text) {\n\t\t\t\t\ttext = text.replace(runescape, funescape);\n\t\t\t\t\treturn function (elem) {\n\t\t\t\t\t\treturn (elem.textContent || jQuery.text(elem)).indexOf(text) > -1;\n\t\t\t\t\t};\n\t\t\t\t}),\n\n\t\t\t\t// \"Whether an element is represented by a :lang() selector\n\t\t\t\t// is based solely on the element's language value\n\t\t\t\t// being equal to the identifier C,\n\t\t\t\t// or beginning with the identifier C immediately followed by \"-\".\n\t\t\t\t// The matching of C against the element's language value is performed case-insensitively.\n\t\t\t\t// The identifier C does not have to be a valid language name.\"\n\t\t\t\t// https://www.w3.org/TR/selectors/#lang-pseudo\n\t\t\t\tlang: markFunction(function (lang) {\n\n\t\t\t\t\t// lang value must be a valid identifier\n\t\t\t\t\tif (!ridentifier.test(lang || \"\")) {\n\t\t\t\t\t\tfind.error(\"unsupported lang: \" + lang);\n\t\t\t\t\t}\n\t\t\t\t\tlang = lang.replace(runescape, funescape).toLowerCase();\n\t\t\t\t\treturn function (elem) {\n\t\t\t\t\t\tvar elemLang;\n\t\t\t\t\t\tdo {\n\t\t\t\t\t\t\tif ((elemLang = documentIsHTML ?\n\t\t\t\t\t\t\t\telem.lang :\n\t\t\t\t\t\t\t\telem.getAttribute(\"xml:lang\") || elem.getAttribute(\"lang\"))) {\n\n\t\t\t\t\t\t\t\telemLang = elemLang.toLowerCase();\n\t\t\t\t\t\t\t\treturn elemLang === lang || elemLang.indexOf(lang + \"-\") === 0;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} while ((elem = elem.parentNode) && elem.nodeType === 1);\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t};\n\t\t\t\t}),\n\n\t\t\t\t// Miscellaneous\n\t\t\t\ttarget: function (elem) {\n\t\t\t\t\tvar hash = window.location && window.location.hash;\n\t\t\t\t\treturn hash && hash.slice(1) === elem.id;\n\t\t\t\t},\n\n\t\t\t\troot: function (elem) {\n\t\t\t\t\treturn elem === documentElement;\n\t\t\t\t},\n\n\t\t\t\tfocus: function (elem) {\n\t\t\t\t\treturn elem === safeActiveElement() &&\n\t\t\t\t\t\tdocument.hasFocus() &&\n\t\t\t\t\t\t!!(elem.type || elem.href || ~elem.tabIndex);\n\t\t\t\t},\n\n\t\t\t\t// Boolean properties\n\t\t\t\tenabled: createDisabledPseudo(false),\n\t\t\t\tdisabled: createDisabledPseudo(true),\n\n\t\t\t\tchecked: function (elem) {\n\n\t\t\t\t\t// In CSS3, :checked should return both checked and selected elements\n\t\t\t\t\t// https://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\t\t\treturn (nodeName(elem, \"input\") && !!elem.checked) ||\n\t\t\t\t\t\t(nodeName(elem, \"option\") && !!elem.selected);\n\t\t\t\t},\n\n\t\t\t\tselected: function (elem) {\n\n\t\t\t\t\t// Support: IE <=11+\n\t\t\t\t\t// Accessing the selectedIndex property\n\t\t\t\t\t// forces the browser to treat the default option as\n\t\t\t\t\t// selected when in an optgroup.\n\t\t\t\t\tif (elem.parentNode) {\n\t\t\t\t\t\t// eslint-disable-next-line no-unused-expressions\n\t\t\t\t\t\telem.parentNode.selectedIndex;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn elem.selected === true;\n\t\t\t\t},\n\n\t\t\t\t// Contents\n\t\t\t\tempty: function (elem) {\n\n\t\t\t\t\t// https://www.w3.org/TR/selectors/#empty-pseudo\n\t\t\t\t\t// :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),\n\t\t\t\t\t//   but not by others (comment: 8; processing instruction: 7; etc.)\n\t\t\t\t\t// nodeType < 6 works because attributes (2) do not appear as children\n\t\t\t\t\tfor (elem = elem.firstChild; elem; elem = elem.nextSibling) {\n\t\t\t\t\t\tif (elem.nodeType < 6) {\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn true;\n\t\t\t\t},\n\n\t\t\t\tparent: function (elem) {\n\t\t\t\t\treturn !Expr.pseudos.empty(elem);\n\t\t\t\t},\n\n\t\t\t\t// Element/input types\n\t\t\t\theader: function (elem) {\n\t\t\t\t\treturn rheader.test(elem.nodeName);\n\t\t\t\t},\n\n\t\t\t\tinput: function (elem) {\n\t\t\t\t\treturn rinputs.test(elem.nodeName);\n\t\t\t\t},\n\n\t\t\t\tbutton: function (elem) {\n\t\t\t\t\treturn nodeName(elem, \"input\") && elem.type === \"button\" ||\n\t\t\t\t\t\tnodeName(elem, \"button\");\n\t\t\t\t},\n\n\t\t\t\ttext: function (elem) {\n\t\t\t\t\tvar attr;\n\t\t\t\t\treturn nodeName(elem, \"input\") && elem.type === \"text\" &&\n\n\t\t\t\t\t\t// Support: IE <10 only\n\t\t\t\t\t\t// New HTML5 attribute values (e.g., \"search\") appear\n\t\t\t\t\t\t// with elem.type === \"text\"\n\t\t\t\t\t\t((attr = elem.getAttribute(\"type\")) == null ||\n\t\t\t\t\t\t\tattr.toLowerCase() === \"text\");\n\t\t\t\t},\n\n\t\t\t\t// Position-in-collection\n\t\t\t\tfirst: createPositionalPseudo(function () {\n\t\t\t\t\treturn [0];\n\t\t\t\t}),\n\n\t\t\t\tlast: createPositionalPseudo(function (_matchIndexes, length) {\n\t\t\t\t\treturn [length - 1];\n\t\t\t\t}),\n\n\t\t\t\teq: createPositionalPseudo(function (_matchIndexes, length, argument) {\n\t\t\t\t\treturn [argument < 0 ? argument + length : argument];\n\t\t\t\t}),\n\n\t\t\t\teven: createPositionalPseudo(function (matchIndexes, length) {\n\t\t\t\t\tvar i = 0;\n\t\t\t\t\tfor (; i < length; i += 2) {\n\t\t\t\t\t\tmatchIndexes.push(i);\n\t\t\t\t\t}\n\t\t\t\t\treturn matchIndexes;\n\t\t\t\t}),\n\n\t\t\t\todd: createPositionalPseudo(function (matchIndexes, length) {\n\t\t\t\t\tvar i = 1;\n\t\t\t\t\tfor (; i < length; i += 2) {\n\t\t\t\t\t\tmatchIndexes.push(i);\n\t\t\t\t\t}\n\t\t\t\t\treturn matchIndexes;\n\t\t\t\t}),\n\n\t\t\t\tlt: createPositionalPseudo(function (matchIndexes, length, argument) {\n\t\t\t\t\tvar i;\n\n\t\t\t\t\tif (argument < 0) {\n\t\t\t\t\t\ti = argument + length;\n\t\t\t\t\t} else if (argument > length) {\n\t\t\t\t\t\ti = length;\n\t\t\t\t\t} else {\n\t\t\t\t\t\ti = argument;\n\t\t\t\t\t}\n\n\t\t\t\t\tfor (; --i >= 0;) {\n\t\t\t\t\t\tmatchIndexes.push(i);\n\t\t\t\t\t}\n\t\t\t\t\treturn matchIndexes;\n\t\t\t\t}),\n\n\t\t\t\tgt: createPositionalPseudo(function (matchIndexes, length, argument) {\n\t\t\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\t\t\tfor (; ++i < length;) {\n\t\t\t\t\t\tmatchIndexes.push(i);\n\t\t\t\t\t}\n\t\t\t\t\treturn matchIndexes;\n\t\t\t\t})\n\t\t\t}\n\t\t};\n\n\t\tExpr.pseudos.nth = Expr.pseudos.eq;\n\n\t\t// Add button/input type pseudos\n\t\tfor (i in { radio: true, checkbox: true, file: true, password: true, image: true }) {\n\t\t\tExpr.pseudos[i] = createInputPseudo(i);\n\t\t}\n\t\tfor (i in { submit: true, reset: true }) {\n\t\t\tExpr.pseudos[i] = createButtonPseudo(i);\n\t\t}\n\n\t\t// Easy API for creating new setFilters\n\t\tfunction setFilters() { }\n\t\tsetFilters.prototype = Expr.filters = Expr.pseudos;\n\t\tExpr.setFilters = new setFilters();\n\n\t\tfunction tokenize(selector, parseOnly) {\n\t\t\tvar matched, match, tokens, type,\n\t\t\t\tsoFar, groups, preFilters,\n\t\t\t\tcached = tokenCache[selector + \" \"];\n\n\t\t\tif (cached) {\n\t\t\t\treturn parseOnly ? 0 : cached.slice(0);\n\t\t\t}\n\n\t\t\tsoFar = selector;\n\t\t\tgroups = [];\n\t\t\tpreFilters = Expr.preFilter;\n\n\t\t\twhile (soFar) {\n\n\t\t\t\t// Comma and first run\n\t\t\t\tif (!matched || (match = rcomma.exec(soFar))) {\n\t\t\t\t\tif (match) {\n\n\t\t\t\t\t\t// Don't consume trailing commas as valid\n\t\t\t\t\t\tsoFar = soFar.slice(match[0].length) || soFar;\n\t\t\t\t\t}\n\t\t\t\t\tgroups.push((tokens = []));\n\t\t\t\t}\n\n\t\t\t\tmatched = false;\n\n\t\t\t\t// Combinators\n\t\t\t\tif ((match = rleadingCombinator.exec(soFar))) {\n\t\t\t\t\tmatched = match.shift();\n\t\t\t\t\ttokens.push({\n\t\t\t\t\t\tvalue: matched,\n\n\t\t\t\t\t\t// Cast descendant combinators to space\n\t\t\t\t\t\ttype: match[0].replace(rtrimCSS, \" \")\n\t\t\t\t\t});\n\t\t\t\t\tsoFar = soFar.slice(matched.length);\n\t\t\t\t}\n\n\t\t\t\t// Filters\n\t\t\t\tfor (type in Expr.filter) {\n\t\t\t\t\tif ((match = matchExpr[type].exec(soFar)) && (!preFilters[type] ||\n\t\t\t\t\t\t(match = preFilters[type](match)))) {\n\t\t\t\t\t\tmatched = match.shift();\n\t\t\t\t\t\ttokens.push({\n\t\t\t\t\t\t\tvalue: matched,\n\t\t\t\t\t\t\ttype: type,\n\t\t\t\t\t\t\tmatches: match\n\t\t\t\t\t\t});\n\t\t\t\t\t\tsoFar = soFar.slice(matched.length);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (!matched) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Return the length of the invalid excess\n\t\t\t// if we're just parsing\n\t\t\t// Otherwise, throw an error or return tokens\n\t\t\tif (parseOnly) {\n\t\t\t\treturn soFar.length;\n\t\t\t}\n\n\t\t\treturn soFar ?\n\t\t\t\tfind.error(selector) :\n\n\t\t\t\t// Cache the tokens\n\t\t\t\ttokenCache(selector, groups).slice(0);\n\t\t}\n\n\t\tfunction toSelector(tokens) {\n\t\t\tvar i = 0,\n\t\t\t\tlen = tokens.length,\n\t\t\t\tselector = \"\";\n\t\t\tfor (; i < len; i++) {\n\t\t\t\tselector += tokens[i].value;\n\t\t\t}\n\t\t\treturn selector;\n\t\t}\n\n\t\tfunction addCombinator(matcher, combinator, base) {\n\t\t\tvar dir = combinator.dir,\n\t\t\t\tskip = combinator.next,\n\t\t\t\tkey = skip || dir,\n\t\t\t\tcheckNonElements = base && key === \"parentNode\",\n\t\t\t\tdoneName = done++;\n\n\t\t\treturn combinator.first ?\n\n\t\t\t\t// Check against closest ancestor/preceding element\n\t\t\t\tfunction (elem, context, xml) {\n\t\t\t\t\twhile ((elem = elem[dir])) {\n\t\t\t\t\t\tif (elem.nodeType === 1 || checkNonElements) {\n\t\t\t\t\t\t\treturn matcher(elem, context, xml);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn false;\n\t\t\t\t} :\n\n\t\t\t\t// Check against all ancestor/preceding elements\n\t\t\t\tfunction (elem, context, xml) {\n\t\t\t\t\tvar oldCache, outerCache,\n\t\t\t\t\t\tnewCache = [dirruns, doneName];\n\n\t\t\t\t\t// We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching\n\t\t\t\t\tif (xml) {\n\t\t\t\t\t\twhile ((elem = elem[dir])) {\n\t\t\t\t\t\t\tif (elem.nodeType === 1 || checkNonElements) {\n\t\t\t\t\t\t\t\tif (matcher(elem, context, xml)) {\n\t\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\twhile ((elem = elem[dir])) {\n\t\t\t\t\t\t\tif (elem.nodeType === 1 || checkNonElements) {\n\t\t\t\t\t\t\t\touterCache = elem[expando] || (elem[expando] = {});\n\n\t\t\t\t\t\t\t\tif (skip && nodeName(elem, skip)) {\n\t\t\t\t\t\t\t\t\telem = elem[dir] || elem;\n\t\t\t\t\t\t\t\t} else if ((oldCache = outerCache[key]) &&\n\t\t\t\t\t\t\t\t\toldCache[0] === dirruns && oldCache[1] === doneName) {\n\n\t\t\t\t\t\t\t\t\t// Assign to newCache so results back-propagate to previous elements\n\t\t\t\t\t\t\t\t\treturn (newCache[2] = oldCache[2]);\n\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t// Reuse newcache so results back-propagate to previous elements\n\t\t\t\t\t\t\t\t\touterCache[key] = newCache;\n\n\t\t\t\t\t\t\t\t\t// A match means we're done; a fail means we have to keep checking\n\t\t\t\t\t\t\t\t\tif ((newCache[2] = matcher(elem, context, xml))) {\n\t\t\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn false;\n\t\t\t\t};\n\t\t}\n\n\t\tfunction elementMatcher(matchers) {\n\t\t\treturn matchers.length > 1 ?\n\t\t\t\tfunction (elem, context, xml) {\n\t\t\t\t\tvar i = matchers.length;\n\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\tif (!matchers[i](elem, context, xml)) {\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn true;\n\t\t\t\t} :\n\t\t\t\tmatchers[0];\n\t\t}\n\n\t\tfunction multipleContexts(selector, contexts, results) {\n\t\t\tvar i = 0,\n\t\t\t\tlen = contexts.length;\n\t\t\tfor (; i < len; i++) {\n\t\t\t\tfind(selector, contexts[i], results);\n\t\t\t}\n\t\t\treturn results;\n\t\t}\n\n\t\tfunction condense(unmatched, map, filter, context, xml) {\n\t\t\tvar elem,\n\t\t\t\tnewUnmatched = [],\n\t\t\t\ti = 0,\n\t\t\t\tlen = unmatched.length,\n\t\t\t\tmapped = map != null;\n\n\t\t\tfor (; i < len; i++) {\n\t\t\t\tif ((elem = unmatched[i])) {\n\t\t\t\t\tif (!filter || filter(elem, context, xml)) {\n\t\t\t\t\t\tnewUnmatched.push(elem);\n\t\t\t\t\t\tif (mapped) {\n\t\t\t\t\t\t\tmap.push(i);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn newUnmatched;\n\t\t}\n\n\t\tfunction setMatcher(preFilter, selector, matcher, postFilter, postFinder, postSelector) {\n\t\t\tif (postFilter && !postFilter[expando]) {\n\t\t\t\tpostFilter = setMatcher(postFilter);\n\t\t\t}\n\t\t\tif (postFinder && !postFinder[expando]) {\n\t\t\t\tpostFinder = setMatcher(postFinder, postSelector);\n\t\t\t}\n\t\t\treturn markFunction(function (seed, results, context, xml) {\n\t\t\t\tvar temp, i, elem, matcherOut,\n\t\t\t\t\tpreMap = [],\n\t\t\t\t\tpostMap = [],\n\t\t\t\t\tpreexisting = results.length,\n\n\t\t\t\t\t// Get initial elements from seed or context\n\t\t\t\t\telems = seed ||\n\t\t\t\t\t\tmultipleContexts(selector || \"*\",\n\t\t\t\t\t\t\tcontext.nodeType ? [context] : context, []),\n\n\t\t\t\t\t// Prefilter to get matcher input, preserving a map for seed-results synchronization\n\t\t\t\t\tmatcherIn = preFilter && (seed || !selector) ?\n\t\t\t\t\t\tcondense(elems, preMap, preFilter, context, xml) :\n\t\t\t\t\t\telems;\n\n\t\t\t\tif (matcher) {\n\n\t\t\t\t\t// If we have a postFinder, or filtered seed, or non-seed postFilter\n\t\t\t\t\t// or preexisting results,\n\t\t\t\t\tmatcherOut = postFinder || (seed ? preFilter : preexisting || postFilter) ?\n\n\t\t\t\t\t\t// ...intermediate processing is necessary\n\t\t\t\t\t\t[] :\n\n\t\t\t\t\t\t// ...otherwise use results directly\n\t\t\t\t\t\tresults;\n\n\t\t\t\t\t// Find primary matches\n\t\t\t\t\tmatcher(matcherIn, matcherOut, context, xml);\n\t\t\t\t} else {\n\t\t\t\t\tmatcherOut = matcherIn;\n\t\t\t\t}\n\n\t\t\t\t// Apply postFilter\n\t\t\t\tif (postFilter) {\n\t\t\t\t\ttemp = condense(matcherOut, postMap);\n\t\t\t\t\tpostFilter(temp, [], context, xml);\n\n\t\t\t\t\t// Un-match failing elements by moving them back to matcherIn\n\t\t\t\t\ti = temp.length;\n\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\tif ((elem = temp[i])) {\n\t\t\t\t\t\t\tmatcherOut[postMap[i]] = !(matcherIn[postMap[i]] = elem);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (seed) {\n\t\t\t\t\tif (postFinder || preFilter) {\n\t\t\t\t\t\tif (postFinder) {\n\n\t\t\t\t\t\t\t// Get the final matcherOut by condensing this intermediate into postFinder contexts\n\t\t\t\t\t\t\ttemp = [];\n\t\t\t\t\t\t\ti = matcherOut.length;\n\t\t\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\t\t\tif ((elem = matcherOut[i])) {\n\n\t\t\t\t\t\t\t\t\t// Restore matcherIn since elem is not yet a final match\n\t\t\t\t\t\t\t\t\ttemp.push((matcherIn[i] = elem));\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tpostFinder(null, (matcherOut = []), temp, xml);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Move matched elements from seed to results to keep them synchronized\n\t\t\t\t\t\ti = matcherOut.length;\n\t\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\t\tif ((elem = matcherOut[i]) &&\n\t\t\t\t\t\t\t\t(temp = postFinder ? indexOf.call(seed, elem) : preMap[i]) > -1) {\n\n\t\t\t\t\t\t\t\tseed[temp] = !(results[temp] = elem);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Add elements to results, through postFinder if defined\n\t\t\t\t} else {\n\t\t\t\t\tmatcherOut = condense(\n\t\t\t\t\t\tmatcherOut === results ?\n\t\t\t\t\t\t\tmatcherOut.splice(preexisting, matcherOut.length) :\n\t\t\t\t\t\t\tmatcherOut\n\t\t\t\t\t);\n\t\t\t\t\tif (postFinder) {\n\t\t\t\t\t\tpostFinder(null, results, matcherOut, xml);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tpush.apply(results, matcherOut);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tfunction matcherFromTokens(tokens) {\n\t\t\tvar checkContext, matcher, j,\n\t\t\t\tlen = tokens.length,\n\t\t\t\tleadingRelative = Expr.relative[tokens[0].type],\n\t\t\t\timplicitRelative = leadingRelative || Expr.relative[\" \"],\n\t\t\t\ti = leadingRelative ? 1 : 0,\n\n\t\t\t\t// The foundational matcher ensures that elements are reachable from top-level context(s)\n\t\t\t\tmatchContext = addCombinator(function (elem) {\n\t\t\t\t\treturn elem === checkContext;\n\t\t\t\t}, implicitRelative, true),\n\t\t\t\tmatchAnyContext = addCombinator(function (elem) {\n\t\t\t\t\treturn indexOf.call(checkContext, elem) > -1;\n\t\t\t\t}, implicitRelative, true),\n\t\t\t\tmatchers = [function (elem, context, xml) {\n\n\t\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\tvar ret = (!leadingRelative && (xml || context != outermostContext)) || (\n\t\t\t\t\t\t(checkContext = context).nodeType ?\n\t\t\t\t\t\t\tmatchContext(elem, context, xml) :\n\t\t\t\t\t\t\tmatchAnyContext(elem, context, xml));\n\n\t\t\t\t\t// Avoid hanging onto element\n\t\t\t\t\t// (see https://github.com/jquery/sizzle/issues/299)\n\t\t\t\t\tcheckContext = null;\n\t\t\t\t\treturn ret;\n\t\t\t\t}];\n\n\t\t\tfor (; i < len; i++) {\n\t\t\t\tif ((matcher = Expr.relative[tokens[i].type])) {\n\t\t\t\t\tmatchers = [addCombinator(elementMatcher(matchers), matcher)];\n\t\t\t\t} else {\n\t\t\t\t\tmatcher = Expr.filter[tokens[i].type].apply(null, tokens[i].matches);\n\n\t\t\t\t\t// Return special upon seeing a positional matcher\n\t\t\t\t\tif (matcher[expando]) {\n\n\t\t\t\t\t\t// Find the next relative operator (if any) for proper handling\n\t\t\t\t\t\tj = ++i;\n\t\t\t\t\t\tfor (; j < len; j++) {\n\t\t\t\t\t\t\tif (Expr.relative[tokens[j].type]) {\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn setMatcher(\n\t\t\t\t\t\t\ti > 1 && elementMatcher(matchers),\n\t\t\t\t\t\t\ti > 1 && toSelector(\n\n\t\t\t\t\t\t\t\t// If the preceding token was a descendant combinator, insert an implicit any-element `*`\n\t\t\t\t\t\t\t\ttokens.slice(0, i - 1)\n\t\t\t\t\t\t\t\t\t.concat({ value: tokens[i - 2].type === \" \" ? \"*\" : \"\" })\n\t\t\t\t\t\t\t).replace(rtrimCSS, \"$1\"),\n\t\t\t\t\t\t\tmatcher,\n\t\t\t\t\t\t\ti < j && matcherFromTokens(tokens.slice(i, j)),\n\t\t\t\t\t\t\tj < len && matcherFromTokens((tokens = tokens.slice(j))),\n\t\t\t\t\t\t\tj < len && toSelector(tokens)\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\tmatchers.push(matcher);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn elementMatcher(matchers);\n\t\t}\n\n\t\tfunction matcherFromGroupMatchers(elementMatchers, setMatchers) {\n\t\t\tvar bySet = setMatchers.length > 0,\n\t\t\t\tbyElement = elementMatchers.length > 0,\n\t\t\t\tsuperMatcher = function (seed, context, xml, results, outermost) {\n\t\t\t\t\tvar elem, j, matcher,\n\t\t\t\t\t\tmatchedCount = 0,\n\t\t\t\t\t\ti = \"0\",\n\t\t\t\t\t\tunmatched = seed && [],\n\t\t\t\t\t\tsetMatched = [],\n\t\t\t\t\t\tcontextBackup = outermostContext,\n\n\t\t\t\t\t\t// We must always have either seed elements or outermost context\n\t\t\t\t\t\telems = seed || byElement && Expr.find.TAG(\"*\", outermost),\n\n\t\t\t\t\t\t// Use integer dirruns iff this is the outermost matcher\n\t\t\t\t\t\tdirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1),\n\t\t\t\t\t\tlen = elems.length;\n\n\t\t\t\t\tif (outermost) {\n\n\t\t\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\t\toutermostContext = context == document || context || outermost;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Add elements passing elementMatchers directly to results\n\t\t\t\t\t// Support: iOS <=7 - 9 only\n\t\t\t\t\t// Tolerate NodeList properties (IE: \"length\"; Safari: <number>) matching\n\t\t\t\t\t// elements by id. (see trac-14142)\n\t\t\t\t\tfor (; i !== len && (elem = elems[i]) != null; i++) {\n\t\t\t\t\t\tif (byElement && elem) {\n\t\t\t\t\t\t\tj = 0;\n\n\t\t\t\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\t\t\tif (!context && elem.ownerDocument != document) {\n\t\t\t\t\t\t\t\tsetDocument(elem);\n\t\t\t\t\t\t\t\txml = !documentIsHTML;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\twhile ((matcher = elementMatchers[j++])) {\n\t\t\t\t\t\t\t\tif (matcher(elem, context || document, xml)) {\n\t\t\t\t\t\t\t\t\tpush.call(results, elem);\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (outermost) {\n\t\t\t\t\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Track unmatched elements for set filters\n\t\t\t\t\t\tif (bySet) {\n\n\t\t\t\t\t\t\t// They will have gone through all possible matchers\n\t\t\t\t\t\t\tif ((elem = !matcher && elem)) {\n\t\t\t\t\t\t\t\tmatchedCount--;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Lengthen the array for every element, matched or not\n\t\t\t\t\t\t\tif (seed) {\n\t\t\t\t\t\t\t\tunmatched.push(elem);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// `i` is now the count of elements visited above, and adding it to `matchedCount`\n\t\t\t\t\t// makes the latter nonnegative.\n\t\t\t\t\tmatchedCount += i;\n\n\t\t\t\t\t// Apply set filters to unmatched elements\n\t\t\t\t\t// NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`\n\t\t\t\t\t// equals `i`), unless we didn't visit _any_ elements in the above loop because we have\n\t\t\t\t\t// no element matchers and no seed.\n\t\t\t\t\t// Incrementing an initially-string \"0\" `i` allows `i` to remain a string only in that\n\t\t\t\t\t// case, which will result in a \"00\" `matchedCount` that differs from `i` but is also\n\t\t\t\t\t// numerically zero.\n\t\t\t\t\tif (bySet && i !== matchedCount) {\n\t\t\t\t\t\tj = 0;\n\t\t\t\t\t\twhile ((matcher = setMatchers[j++])) {\n\t\t\t\t\t\t\tmatcher(unmatched, setMatched, context, xml);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (seed) {\n\n\t\t\t\t\t\t\t// Reintegrate element matches to eliminate the need for sorting\n\t\t\t\t\t\t\tif (matchedCount > 0) {\n\t\t\t\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\t\t\t\tif (!(unmatched[i] || setMatched[i])) {\n\t\t\t\t\t\t\t\t\t\tsetMatched[i] = pop.call(results);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Discard index placeholder values to get only actual matches\n\t\t\t\t\t\t\tsetMatched = condense(setMatched);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Add matches to results\n\t\t\t\t\t\tpush.apply(results, setMatched);\n\n\t\t\t\t\t\t// Seedless set matches succeeding multiple successful matchers stipulate sorting\n\t\t\t\t\t\tif (outermost && !seed && setMatched.length > 0 &&\n\t\t\t\t\t\t\t(matchedCount + setMatchers.length) > 1) {\n\n\t\t\t\t\t\t\tjQuery.uniqueSort(results);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Override manipulation of globals by nested matchers\n\t\t\t\t\tif (outermost) {\n\t\t\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\t\t\toutermostContext = contextBackup;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn unmatched;\n\t\t\t\t};\n\n\t\t\treturn bySet ?\n\t\t\t\tmarkFunction(superMatcher) :\n\t\t\t\tsuperMatcher;\n\t\t}\n\n\t\tfunction compile(selector, match /* Internal Use Only */) {\n\t\t\tvar i,\n\t\t\t\tsetMatchers = [],\n\t\t\t\telementMatchers = [],\n\t\t\t\tcached = compilerCache[selector + \" \"];\n\n\t\t\tif (!cached) {\n\n\t\t\t\t// Generate a function of recursive functions that can be used to check each element\n\t\t\t\tif (!match) {\n\t\t\t\t\tmatch = tokenize(selector);\n\t\t\t\t}\n\t\t\t\ti = match.length;\n\t\t\t\twhile (i--) {\n\t\t\t\t\tcached = matcherFromTokens(match[i]);\n\t\t\t\t\tif (cached[expando]) {\n\t\t\t\t\t\tsetMatchers.push(cached);\n\t\t\t\t\t} else {\n\t\t\t\t\t\telementMatchers.push(cached);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Cache the compiled function\n\t\t\t\tcached = compilerCache(selector,\n\t\t\t\t\tmatcherFromGroupMatchers(elementMatchers, setMatchers));\n\n\t\t\t\t// Save selector and tokenization\n\t\t\t\tcached.selector = selector;\n\t\t\t}\n\t\t\treturn cached;\n\t\t}\n\n\t\t/**\n\t\t * A low-level selection function that works with jQuery's compiled\n\t\t *  selector functions\n\t\t * @param {String|Function} selector A selector or a pre-compiled\n\t\t *  selector function built with jQuery selector compile\n\t\t * @param {Element} context\n\t\t * @param {Array} [results]\n\t\t * @param {Array} [seed] A set of elements to match against\n\t\t */\n\t\tfunction select(selector, context, results, seed) {\n\t\t\tvar i, tokens, token, type, find,\n\t\t\t\tcompiled = typeof selector === \"function\" && selector,\n\t\t\t\tmatch = !seed && tokenize((selector = compiled.selector || selector));\n\n\t\t\tresults = results || [];\n\n\t\t\t// Try to minimize operations if there is only one selector in the list and no seed\n\t\t\t// (the latter of which guarantees us context)\n\t\t\tif (match.length === 1) {\n\n\t\t\t\t// Reduce context if the leading compound selector is an ID\n\t\t\t\ttokens = match[0] = match[0].slice(0);\n\t\t\t\tif (tokens.length > 2 && (token = tokens[0]).type === \"ID\" &&\n\t\t\t\t\tcontext.nodeType === 9 && documentIsHTML && Expr.relative[tokens[1].type]) {\n\n\t\t\t\t\tcontext = (Expr.find.ID(\n\t\t\t\t\t\ttoken.matches[0].replace(runescape, funescape),\n\t\t\t\t\t\tcontext\n\t\t\t\t\t) || [])[0];\n\t\t\t\t\tif (!context) {\n\t\t\t\t\t\treturn results;\n\n\t\t\t\t\t\t// Precompiled matchers will still verify ancestry, so step up a level\n\t\t\t\t\t} else if (compiled) {\n\t\t\t\t\t\tcontext = context.parentNode;\n\t\t\t\t\t}\n\n\t\t\t\t\tselector = selector.slice(tokens.shift().value.length);\n\t\t\t\t}\n\n\t\t\t\t// Fetch a seed set for right-to-left matching\n\t\t\t\ti = matchExpr.needsContext.test(selector) ? 0 : tokens.length;\n\t\t\t\twhile (i--) {\n\t\t\t\t\ttoken = tokens[i];\n\n\t\t\t\t\t// Abort if we hit a combinator\n\t\t\t\t\tif (Expr.relative[(type = token.type)]) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tif ((find = Expr.find[type])) {\n\n\t\t\t\t\t\t// Search, expanding context for leading sibling combinators\n\t\t\t\t\t\tif ((seed = find(\n\t\t\t\t\t\t\ttoken.matches[0].replace(runescape, funescape),\n\t\t\t\t\t\t\trsibling.test(tokens[0].type) &&\n\t\t\t\t\t\t\ttestContext(context.parentNode) || context\n\t\t\t\t\t\t))) {\n\n\t\t\t\t\t\t\t// If seed is empty or no tokens remain, we can return early\n\t\t\t\t\t\t\ttokens.splice(i, 1);\n\t\t\t\t\t\t\tselector = seed.length && toSelector(tokens);\n\t\t\t\t\t\t\tif (!selector) {\n\t\t\t\t\t\t\t\tpush.apply(results, seed);\n\t\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Compile and execute a filtering function if one is not provided\n\t\t\t// Provide `match` to avoid retokenization if we modified the selector above\n\t\t\t(compiled || compile(selector, match))(\n\t\t\t\tseed,\n\t\t\t\tcontext,\n\t\t\t\t!documentIsHTML,\n\t\t\t\tresults,\n\t\t\t\t!context || rsibling.test(selector) && testContext(context.parentNode) || context\n\t\t\t);\n\t\t\treturn results;\n\t\t}\n\n\t\t// One-time assignments\n\n\t\t// Support: Android <=4.0 - 4.1+\n\t\t// Sort stability\n\t\tsupport.sortStable = expando.split(\"\").sort(sortOrder).join(\"\") === expando;\n\n\t\t// Initialize against the default document\n\t\tsetDocument();\n\n\t\t// Support: Android <=4.0 - 4.1+\n\t\t// Detached nodes confoundingly follow *each other*\n\t\tsupport.sortDetached = assert(function (el) {\n\n\t\t\t// Should return 1, but returns 4 (following)\n\t\t\treturn el.compareDocumentPosition(document.createElement(\"fieldset\")) & 1;\n\t\t});\n\n\t\tjQuery.find = find;\n\n\t\t// Deprecated\n\t\tjQuery.expr[\":\"] = jQuery.expr.pseudos;\n\t\tjQuery.unique = jQuery.uniqueSort;\n\n\t\t// These have always been private, but they used to be documented\n\t\t// as part of Sizzle so let's maintain them in the 3.x line\n\t\t// for backwards compatibility purposes.\n\t\tfind.compile = compile;\n\t\tfind.select = select;\n\t\tfind.setDocument = setDocument;\n\n\t\tfind.escape = jQuery.escapeSelector;\n\t\tfind.getText = jQuery.text;\n\t\tfind.isXML = jQuery.isXMLDoc;\n\t\tfind.selectors = jQuery.expr;\n\t\tfind.support = jQuery.support;\n\t\tfind.uniqueSort = jQuery.uniqueSort;\n\n\t\t/* eslint-enable */\n\n\t})();\n\n\n\tvar dir = function (elem, dir, until) {\n\t\tvar matched = [],\n\t\t\ttruncate = until !== undefined;\n\n\t\twhile ((elem = elem[dir]) && elem.nodeType !== 9) {\n\t\t\tif (elem.nodeType === 1) {\n\t\t\t\tif (truncate && jQuery(elem).is(until)) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tmatched.push(elem);\n\t\t\t}\n\t\t}\n\t\treturn matched;\n\t};\n\n\n\tvar siblings = function (n, elem) {\n\t\tvar matched = [];\n\n\t\tfor (; n; n = n.nextSibling) {\n\t\t\tif (n.nodeType === 1 && n !== elem) {\n\t\t\t\tmatched.push(n);\n\t\t\t}\n\t\t}\n\n\t\treturn matched;\n\t};\n\n\n\tvar rneedsContext = jQuery.expr.match.needsContext;\n\n\tvar rsingleTag = (/^<([a-z][^\\/\\0>:\\x20\\t\\r\\n\\f]*)[\\x20\\t\\r\\n\\f]*\\/?>(?:<\\/\\1>|)$/i);\n\n\n\n\t// Implement the identical functionality for filter and not\n\tfunction winnow(elements, qualifier, not) {\n\t\tif (isFunction(qualifier)) {\n\t\t\treturn jQuery.grep(elements, function (elem, i) {\n\t\t\t\treturn !!qualifier.call(elem, i, elem) !== not;\n\t\t\t});\n\t\t}\n\n\t\t// Single element\n\t\tif (qualifier.nodeType) {\n\t\t\treturn jQuery.grep(elements, function (elem) {\n\t\t\t\treturn (elem === qualifier) !== not;\n\t\t\t});\n\t\t}\n\n\t\t// Arraylike of elements (jQuery, arguments, Array)\n\t\tif (typeof qualifier !== \"string\") {\n\t\t\treturn jQuery.grep(elements, function (elem) {\n\t\t\t\treturn (indexOf.call(qualifier, elem) > -1) !== not;\n\t\t\t});\n\t\t}\n\n\t\t// Filtered directly for both simple and complex selectors\n\t\treturn jQuery.filter(qualifier, elements, not);\n\t}\n\n\tjQuery.filter = function (expr, elems, not) {\n\t\tvar elem = elems[0];\n\n\t\tif (not) {\n\t\t\texpr = \":not(\" + expr + \")\";\n\t\t}\n\n\t\tif (elems.length === 1 && elem.nodeType === 1) {\n\t\t\treturn jQuery.find.matchesSelector(elem, expr) ? [elem] : [];\n\t\t}\n\n\t\treturn jQuery.find.matches(expr, jQuery.grep(elems, function (elem) {\n\t\t\treturn elem.nodeType === 1;\n\t\t}));\n\t};\n\n\tjQuery.fn.extend({\n\t\tfind: function (selector) {\n\t\t\tvar i, ret,\n\t\t\t\tlen = this.length,\n\t\t\t\tself = this;\n\n\t\t\tif (typeof selector !== \"string\") {\n\t\t\t\treturn this.pushStack(jQuery(selector).filter(function () {\n\t\t\t\t\tfor (i = 0; i < len; i++) {\n\t\t\t\t\t\tif (jQuery.contains(self[i], this)) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}));\n\t\t\t}\n\n\t\t\tret = this.pushStack([]);\n\n\t\t\tfor (i = 0; i < len; i++) {\n\t\t\t\tjQuery.find(selector, self[i], ret);\n\t\t\t}\n\n\t\t\treturn len > 1 ? jQuery.uniqueSort(ret) : ret;\n\t\t},\n\t\tfilter: function (selector) {\n\t\t\treturn this.pushStack(winnow(this, selector || [], false));\n\t\t},\n\t\tnot: function (selector) {\n\t\t\treturn this.pushStack(winnow(this, selector || [], true));\n\t\t},\n\t\tis: function (selector) {\n\t\t\treturn !!winnow(\n\t\t\t\tthis,\n\n\t\t\t\t// If this is a positional/relative selector, check membership in the returned set\n\t\t\t\t// so $(\"p:first\").is(\"p:last\") won't return true for a doc with two \"p\".\n\t\t\t\ttypeof selector === \"string\" && rneedsContext.test(selector) ?\n\t\t\t\t\tjQuery(selector) :\n\t\t\t\t\tselector || [],\n\t\t\t\tfalse\n\t\t\t).length;\n\t\t}\n\t});\n\n\n\t// Initialize a jQuery object\n\n\n\t// A central reference to the root jQuery(document)\n\tvar rootjQuery,\n\n\t\t// A simple way to check for HTML strings\n\t\t// Prioritize #id over <tag> to avoid XSS via location.hash (trac-9521)\n\t\t// Strict HTML recognition (trac-11290: must start with <)\n\t\t// Shortcut simple #id case for speed\n\t\trquickExpr = /^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]+))$/,\n\n\t\tinit = jQuery.fn.init = function (selector, context, root) {\n\t\t\tvar match, elem;\n\n\t\t\t// HANDLE: $(\"\"), $(null), $(undefined), $(false)\n\t\t\tif (!selector) {\n\t\t\t\treturn this;\n\t\t\t}\n\n\t\t\t// Method init() accepts an alternate rootjQuery\n\t\t\t// so migrate can support jQuery.sub (gh-2101)\n\t\t\troot = root || rootjQuery;\n\n\t\t\t// Handle HTML strings\n\t\t\tif (typeof selector === \"string\") {\n\t\t\t\tif (selector[0] === \"<\" &&\n\t\t\t\t\tselector[selector.length - 1] === \">\" &&\n\t\t\t\t\tselector.length >= 3) {\n\n\t\t\t\t\t// Assume that strings that start and end with <> are HTML and skip the regex check\n\t\t\t\t\tmatch = [null, selector, null];\n\n\t\t\t\t} else {\n\t\t\t\t\tmatch = rquickExpr.exec(selector);\n\t\t\t\t}\n\n\t\t\t\t// Match html or make sure no context is specified for #id\n\t\t\t\tif (match && (match[1] || !context)) {\n\n\t\t\t\t\t// HANDLE: $(html) -> $(array)\n\t\t\t\t\tif (match[1]) {\n\t\t\t\t\t\tcontext = context instanceof jQuery ? context[0] : context;\n\n\t\t\t\t\t\t// Option to run scripts is true for back-compat\n\t\t\t\t\t\t// Intentionally let the error be thrown if parseHTML is not present\n\t\t\t\t\t\tjQuery.merge(this, jQuery.parseHTML(\n\t\t\t\t\t\t\tmatch[1],\n\t\t\t\t\t\t\tcontext && context.nodeType ? context.ownerDocument || context : document,\n\t\t\t\t\t\t\ttrue\n\t\t\t\t\t\t));\n\n\t\t\t\t\t\t// HANDLE: $(html, props)\n\t\t\t\t\t\tif (rsingleTag.test(match[1]) && jQuery.isPlainObject(context)) {\n\t\t\t\t\t\t\tfor (match in context) {\n\n\t\t\t\t\t\t\t\t// Properties of context are called as methods if possible\n\t\t\t\t\t\t\t\tif (isFunction(this[match])) {\n\t\t\t\t\t\t\t\t\tthis[match](context[match]);\n\n\t\t\t\t\t\t\t\t\t// ...and otherwise set as attributes\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tthis.attr(match, context[match]);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn this;\n\n\t\t\t\t\t\t// HANDLE: $(#id)\n\t\t\t\t\t} else {\n\t\t\t\t\t\telem = document.getElementById(match[2]);\n\n\t\t\t\t\t\tif (elem) {\n\n\t\t\t\t\t\t\t// Inject the element directly into the jQuery object\n\t\t\t\t\t\t\tthis[0] = elem;\n\t\t\t\t\t\t\tthis.length = 1;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn this;\n\t\t\t\t\t}\n\n\t\t\t\t\t// HANDLE: $(expr, $(...))\n\t\t\t\t} else if (!context || context.jquery) {\n\t\t\t\t\treturn (context || root).find(selector);\n\n\t\t\t\t\t// HANDLE: $(expr, context)\n\t\t\t\t\t// (which is just equivalent to: $(context).find(expr)\n\t\t\t\t} else {\n\t\t\t\t\treturn this.constructor(context).find(selector);\n\t\t\t\t}\n\n\t\t\t\t// HANDLE: $(DOMElement)\n\t\t\t} else if (selector.nodeType) {\n\t\t\t\tthis[0] = selector;\n\t\t\t\tthis.length = 1;\n\t\t\t\treturn this;\n\n\t\t\t\t// HANDLE: $(function)\n\t\t\t\t// Shortcut for document ready\n\t\t\t} else if (isFunction(selector)) {\n\t\t\t\treturn root.ready !== undefined ?\n\t\t\t\t\troot.ready(selector) :\n\n\t\t\t\t\t// Execute immediately if ready is not present\n\t\t\t\t\tselector(jQuery);\n\t\t\t}\n\n\t\t\treturn jQuery.makeArray(selector, this);\n\t\t};\n\n\t// Give the init function the jQuery prototype for later instantiation\n\tinit.prototype = jQuery.fn;\n\n\t// Initialize central reference\n\trootjQuery = jQuery(document);\n\n\n\tvar rparentsprev = /^(?:parents|prev(?:Until|All))/,\n\n\t\t// Methods guaranteed to produce a unique set when starting from a unique set\n\t\tguaranteedUnique = {\n\t\t\tchildren: true,\n\t\t\tcontents: true,\n\t\t\tnext: true,\n\t\t\tprev: true\n\t\t};\n\n\tjQuery.fn.extend({\n\t\thas: function (target) {\n\t\t\tvar targets = jQuery(target, this),\n\t\t\t\tl = targets.length;\n\n\t\t\treturn this.filter(function () {\n\t\t\t\tvar i = 0;\n\t\t\t\tfor (; i < l; i++) {\n\t\t\t\t\tif (jQuery.contains(this, targets[i])) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\tclosest: function (selectors, context) {\n\t\t\tvar cur,\n\t\t\t\ti = 0,\n\t\t\t\tl = this.length,\n\t\t\t\tmatched = [],\n\t\t\t\ttargets = typeof selectors !== \"string\" && jQuery(selectors);\n\n\t\t\t// Positional selectors never match, since there's no _selection_ context\n\t\t\tif (!rneedsContext.test(selectors)) {\n\t\t\t\tfor (; i < l; i++) {\n\t\t\t\t\tfor (cur = this[i]; cur && cur !== context; cur = cur.parentNode) {\n\n\t\t\t\t\t\t// Always skip document fragments\n\t\t\t\t\t\tif (cur.nodeType < 11 && (targets ?\n\t\t\t\t\t\t\ttargets.index(cur) > -1 :\n\n\t\t\t\t\t\t\t// Don't pass non-elements to jQuery#find\n\t\t\t\t\t\t\tcur.nodeType === 1 &&\n\t\t\t\t\t\t\tjQuery.find.matchesSelector(cur, selectors))) {\n\n\t\t\t\t\t\t\tmatched.push(cur);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn this.pushStack(matched.length > 1 ? jQuery.uniqueSort(matched) : matched);\n\t\t},\n\n\t\t// Determine the position of an element within the set\n\t\tindex: function (elem) {\n\n\t\t\t// No argument, return index in parent\n\t\t\tif (!elem) {\n\t\t\t\treturn (this[0] && this[0].parentNode) ? this.first().prevAll().length : -1;\n\t\t\t}\n\n\t\t\t// Index in selector\n\t\t\tif (typeof elem === \"string\") {\n\t\t\t\treturn indexOf.call(jQuery(elem), this[0]);\n\t\t\t}\n\n\t\t\t// Locate the position of the desired element\n\t\t\treturn indexOf.call(this,\n\n\t\t\t\t// If it receives a jQuery object, the first element is used\n\t\t\t\telem.jquery ? elem[0] : elem\n\t\t\t);\n\t\t},\n\n\t\tadd: function (selector, context) {\n\t\t\treturn this.pushStack(\n\t\t\t\tjQuery.uniqueSort(\n\t\t\t\t\tjQuery.merge(this.get(), jQuery(selector, context))\n\t\t\t\t)\n\t\t\t);\n\t\t},\n\n\t\taddBack: function (selector) {\n\t\t\treturn this.add(selector == null ?\n\t\t\t\tthis.prevObject : this.prevObject.filter(selector)\n\t\t\t);\n\t\t}\n\t});\n\n\tfunction sibling(cur, dir) {\n\t\twhile ((cur = cur[dir]) && cur.nodeType !== 1) { }\n\t\treturn cur;\n\t}\n\n\tjQuery.each({\n\t\tparent: function (elem) {\n\t\t\tvar parent = elem.parentNode;\n\t\t\treturn parent && parent.nodeType !== 11 ? parent : null;\n\t\t},\n\t\tparents: function (elem) {\n\t\t\treturn dir(elem, \"parentNode\");\n\t\t},\n\t\tparentsUntil: function (elem, _i, until) {\n\t\t\treturn dir(elem, \"parentNode\", until);\n\t\t},\n\t\tnext: function (elem) {\n\t\t\treturn sibling(elem, \"nextSibling\");\n\t\t},\n\t\tprev: function (elem) {\n\t\t\treturn sibling(elem, \"previousSibling\");\n\t\t},\n\t\tnextAll: function (elem) {\n\t\t\treturn dir(elem, \"nextSibling\");\n\t\t},\n\t\tprevAll: function (elem) {\n\t\t\treturn dir(elem, \"previousSibling\");\n\t\t},\n\t\tnextUntil: function (elem, _i, until) {\n\t\t\treturn dir(elem, \"nextSibling\", until);\n\t\t},\n\t\tprevUntil: function (elem, _i, until) {\n\t\t\treturn dir(elem, \"previousSibling\", until);\n\t\t},\n\t\tsiblings: function (elem) {\n\t\t\treturn siblings((elem.parentNode || {}).firstChild, elem);\n\t\t},\n\t\tchildren: function (elem) {\n\t\t\treturn siblings(elem.firstChild);\n\t\t},\n\t\tcontents: function (elem) {\n\t\t\tif (elem.contentDocument != null &&\n\n\t\t\t\t// Support: IE 11+\n\t\t\t\t// <object> elements with no `data` attribute has an object\n\t\t\t\t// `contentDocument` with a `null` prototype.\n\t\t\t\tgetProto(elem.contentDocument)) {\n\n\t\t\t\treturn elem.contentDocument;\n\t\t\t}\n\n\t\t\t// Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only\n\t\t\t// Treat the template element as a regular one in browsers that\n\t\t\t// don't support it.\n\t\t\tif (nodeName(elem, \"template\")) {\n\t\t\t\telem = elem.content || elem;\n\t\t\t}\n\n\t\t\treturn jQuery.merge([], elem.childNodes);\n\t\t}\n\t}, function (name, fn) {\n\t\tjQuery.fn[name] = function (until, selector) {\n\t\t\tvar matched = jQuery.map(this, fn, until);\n\n\t\t\tif (name.slice(-5) !== \"Until\") {\n\t\t\t\tselector = until;\n\t\t\t}\n\n\t\t\tif (selector && typeof selector === \"string\") {\n\t\t\t\tmatched = jQuery.filter(selector, matched);\n\t\t\t}\n\n\t\t\tif (this.length > 1) {\n\n\t\t\t\t// Remove duplicates\n\t\t\t\tif (!guaranteedUnique[name]) {\n\t\t\t\t\tjQuery.uniqueSort(matched);\n\t\t\t\t}\n\n\t\t\t\t// Reverse order for parents* and prev-derivatives\n\t\t\t\tif (rparentsprev.test(name)) {\n\t\t\t\t\tmatched.reverse();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn this.pushStack(matched);\n\t\t};\n\t});\n\tvar rnothtmlwhite = (/[^\\x20\\t\\r\\n\\f]+/g);\n\n\n\n\t// Convert String-formatted options into Object-formatted ones\n\tfunction createOptions(options) {\n\t\tvar object = {};\n\t\tjQuery.each(options.match(rnothtmlwhite) || [], function (_, flag) {\n\t\t\tobject[flag] = true;\n\t\t});\n\t\treturn object;\n\t}\n\n\t/*\n\t * Create a callback list using the following parameters:\n\t *\n\t *\toptions: an optional list of space-separated options that will change how\n\t *\t\t\tthe callback list behaves or a more traditional option object\n\t *\n\t * By default a callback list will act like an event callback list and can be\n\t * \"fired\" multiple times.\n\t *\n\t * Possible options:\n\t *\n\t *\tonce:\t\t\twill ensure the callback list can only be fired once (like a Deferred)\n\t *\n\t *\tmemory:\t\t\twill keep track of previous values and will call any callback added\n\t *\t\t\t\t\tafter the list has been fired right away with the latest \"memorized\"\n\t *\t\t\t\t\tvalues (like a Deferred)\n\t *\n\t *\tunique:\t\t\twill ensure a callback can only be added once (no duplicate in the list)\n\t *\n\t *\tstopOnFalse:\tinterrupt callings when a callback returns false\n\t *\n\t */\n\tjQuery.Callbacks = function (options) {\n\n\t\t// Convert options from String-formatted to Object-formatted if needed\n\t\t// (we check in cache first)\n\t\toptions = typeof options === \"string\" ?\n\t\t\tcreateOptions(options) :\n\t\t\tjQuery.extend({}, options);\n\n\t\tvar // Flag to know if list is currently firing\n\t\t\tfiring,\n\n\t\t\t// Last fire value for non-forgettable lists\n\t\t\tmemory,\n\n\t\t\t// Flag to know if list was already fired\n\t\t\tfired,\n\n\t\t\t// Flag to prevent firing\n\t\t\tlocked,\n\n\t\t\t// Actual callback list\n\t\t\tlist = [],\n\n\t\t\t// Queue of execution data for repeatable lists\n\t\t\tqueue = [],\n\n\t\t\t// Index of currently firing callback (modified by add/remove as needed)\n\t\t\tfiringIndex = -1,\n\n\t\t\t// Fire callbacks\n\t\t\tfire = function () {\n\n\t\t\t\t// Enforce single-firing\n\t\t\t\tlocked = locked || options.once;\n\n\t\t\t\t// Execute callbacks for all pending executions,\n\t\t\t\t// respecting firingIndex overrides and runtime changes\n\t\t\t\tfired = firing = true;\n\t\t\t\tfor (; queue.length; firingIndex = -1) {\n\t\t\t\t\tmemory = queue.shift();\n\t\t\t\t\twhile (++firingIndex < list.length) {\n\n\t\t\t\t\t\t// Run callback and check for early termination\n\t\t\t\t\t\tif (list[firingIndex].apply(memory[0], memory[1]) === false &&\n\t\t\t\t\t\t\toptions.stopOnFalse) {\n\n\t\t\t\t\t\t\t// Jump to end and forget the data so .add doesn't re-fire\n\t\t\t\t\t\t\tfiringIndex = list.length;\n\t\t\t\t\t\t\tmemory = false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Forget the data if we're done with it\n\t\t\t\tif (!options.memory) {\n\t\t\t\t\tmemory = false;\n\t\t\t\t}\n\n\t\t\t\tfiring = false;\n\n\t\t\t\t// Clean up if we're done firing for good\n\t\t\t\tif (locked) {\n\n\t\t\t\t\t// Keep an empty list if we have data for future add calls\n\t\t\t\t\tif (memory) {\n\t\t\t\t\t\tlist = [];\n\n\t\t\t\t\t\t// Otherwise, this object is spent\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlist = \"\";\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// Actual Callbacks object\n\t\t\tself = {\n\n\t\t\t\t// Add a callback or a collection of callbacks to the list\n\t\t\t\tadd: function () {\n\t\t\t\t\tif (list) {\n\n\t\t\t\t\t\t// If we have memory from a past run, we should fire after adding\n\t\t\t\t\t\tif (memory && !firing) {\n\t\t\t\t\t\t\tfiringIndex = list.length - 1;\n\t\t\t\t\t\t\tqueue.push(memory);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t(function add(args) {\n\t\t\t\t\t\t\tjQuery.each(args, function (_, arg) {\n\t\t\t\t\t\t\t\tif (isFunction(arg)) {\n\t\t\t\t\t\t\t\t\tif (!options.unique || !self.has(arg)) {\n\t\t\t\t\t\t\t\t\t\tlist.push(arg);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} else if (arg && arg.length && toType(arg) !== \"string\") {\n\n\t\t\t\t\t\t\t\t\t// Inspect recursively\n\t\t\t\t\t\t\t\t\tadd(arg);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t})(arguments);\n\n\t\t\t\t\t\tif (memory && !firing) {\n\t\t\t\t\t\t\tfire();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Remove a callback from the list\n\t\t\t\tremove: function () {\n\t\t\t\t\tjQuery.each(arguments, function (_, arg) {\n\t\t\t\t\t\tvar index;\n\t\t\t\t\t\twhile ((index = jQuery.inArray(arg, list, index)) > -1) {\n\t\t\t\t\t\t\tlist.splice(index, 1);\n\n\t\t\t\t\t\t\t// Handle firing indexes\n\t\t\t\t\t\t\tif (index <= firingIndex) {\n\t\t\t\t\t\t\t\tfiringIndex--;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Check if a given callback is in the list.\n\t\t\t\t// If no argument is given, return whether or not list has callbacks attached.\n\t\t\t\thas: function (fn) {\n\t\t\t\t\treturn fn ?\n\t\t\t\t\t\tjQuery.inArray(fn, list) > -1 :\n\t\t\t\t\t\tlist.length > 0;\n\t\t\t\t},\n\n\t\t\t\t// Remove all callbacks from the list\n\t\t\t\tempty: function () {\n\t\t\t\t\tif (list) {\n\t\t\t\t\t\tlist = [];\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Disable .fire and .add\n\t\t\t\t// Abort any current/pending executions\n\t\t\t\t// Clear all callbacks and values\n\t\t\t\tdisable: function () {\n\t\t\t\t\tlocked = queue = [];\n\t\t\t\t\tlist = memory = \"\";\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\t\t\t\tdisabled: function () {\n\t\t\t\t\treturn !list;\n\t\t\t\t},\n\n\t\t\t\t// Disable .fire\n\t\t\t\t// Also disable .add unless we have memory (since it would have no effect)\n\t\t\t\t// Abort any pending executions\n\t\t\t\tlock: function () {\n\t\t\t\t\tlocked = queue = [];\n\t\t\t\t\tif (!memory && !firing) {\n\t\t\t\t\t\tlist = memory = \"\";\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\t\t\t\tlocked: function () {\n\t\t\t\t\treturn !!locked;\n\t\t\t\t},\n\n\t\t\t\t// Call all callbacks with the given context and arguments\n\t\t\t\tfireWith: function (context, args) {\n\t\t\t\t\tif (!locked) {\n\t\t\t\t\t\targs = args || [];\n\t\t\t\t\t\targs = [context, args.slice ? args.slice() : args];\n\t\t\t\t\t\tqueue.push(args);\n\t\t\t\t\t\tif (!firing) {\n\t\t\t\t\t\t\tfire();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Call all the callbacks with the given arguments\n\t\t\t\tfire: function () {\n\t\t\t\t\tself.fireWith(this, arguments);\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// To know if the callbacks have already been called at least once\n\t\t\t\tfired: function () {\n\t\t\t\t\treturn !!fired;\n\t\t\t\t}\n\t\t\t};\n\n\t\treturn self;\n\t};\n\n\n\tfunction Identity(v) {\n\t\treturn v;\n\t}\n\tfunction Thrower(ex) {\n\t\tthrow ex;\n\t}\n\n\tfunction adoptValue(value, resolve, reject, noValue) {\n\t\tvar method;\n\n\t\ttry {\n\n\t\t\t// Check for promise aspect first to privilege synchronous behavior\n\t\t\tif (value && isFunction((method = value.promise))) {\n\t\t\t\tmethod.call(value).done(resolve).fail(reject);\n\n\t\t\t\t// Other thenables\n\t\t\t} else if (value && isFunction((method = value.then))) {\n\t\t\t\tmethod.call(value, resolve, reject);\n\n\t\t\t\t// Other non-thenables\n\t\t\t} else {\n\n\t\t\t\t// Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer:\n\t\t\t\t// * false: [ value ].slice( 0 ) => resolve( value )\n\t\t\t\t// * true: [ value ].slice( 1 ) => resolve()\n\t\t\t\tresolve.apply(undefined, [value].slice(noValue));\n\t\t\t}\n\n\t\t\t// For Promises/A+, convert exceptions into rejections\n\t\t\t// Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in\n\t\t\t// Deferred#then to conditionally suppress rejection.\n\t\t} catch (value) {\n\n\t\t\t// Support: Android 4.0 only\n\t\t\t// Strict mode functions invoked without .call/.apply get global-object context\n\t\t\treject.apply(undefined, [value]);\n\t\t}\n\t}\n\n\tjQuery.extend({\n\n\t\tDeferred: function (func) {\n\t\t\tvar tuples = [\n\n\t\t\t\t// action, add listener, callbacks,\n\t\t\t\t// ... .then handlers, argument index, [final state]\n\t\t\t\t[\"notify\", \"progress\", jQuery.Callbacks(\"memory\"),\n\t\t\t\t\tjQuery.Callbacks(\"memory\"), 2],\n\t\t\t\t[\"resolve\", \"done\", jQuery.Callbacks(\"once memory\"),\n\t\t\t\t\tjQuery.Callbacks(\"once memory\"), 0, \"resolved\"],\n\t\t\t\t[\"reject\", \"fail\", jQuery.Callbacks(\"once memory\"),\n\t\t\t\t\tjQuery.Callbacks(\"once memory\"), 1, \"rejected\"]\n\t\t\t],\n\t\t\t\tstate = \"pending\",\n\t\t\t\tpromise = {\n\t\t\t\t\tstate: function () {\n\t\t\t\t\t\treturn state;\n\t\t\t\t\t},\n\t\t\t\t\talways: function () {\n\t\t\t\t\t\tdeferred.done(arguments).fail(arguments);\n\t\t\t\t\t\treturn this;\n\t\t\t\t\t},\n\t\t\t\t\t\"catch\": function (fn) {\n\t\t\t\t\t\treturn promise.then(null, fn);\n\t\t\t\t\t},\n\n\t\t\t\t\t// Keep pipe for back-compat\n\t\t\t\t\tpipe: function ( /* fnDone, fnFail, fnProgress */) {\n\t\t\t\t\t\tvar fns = arguments;\n\n\t\t\t\t\t\treturn jQuery.Deferred(function (newDefer) {\n\t\t\t\t\t\t\tjQuery.each(tuples, function (_i, tuple) {\n\n\t\t\t\t\t\t\t\t// Map tuples (progress, done, fail) to arguments (done, fail, progress)\n\t\t\t\t\t\t\t\tvar fn = isFunction(fns[tuple[4]]) && fns[tuple[4]];\n\n\t\t\t\t\t\t\t\t// deferred.progress(function() { bind to newDefer or newDefer.notify })\n\t\t\t\t\t\t\t\t// deferred.done(function() { bind to newDefer or newDefer.resolve })\n\t\t\t\t\t\t\t\t// deferred.fail(function() { bind to newDefer or newDefer.reject })\n\t\t\t\t\t\t\t\tdeferred[tuple[1]](function () {\n\t\t\t\t\t\t\t\t\tvar returned = fn && fn.apply(this, arguments);\n\t\t\t\t\t\t\t\t\tif (returned && isFunction(returned.promise)) {\n\t\t\t\t\t\t\t\t\t\treturned.promise()\n\t\t\t\t\t\t\t\t\t\t\t.progress(newDefer.notify)\n\t\t\t\t\t\t\t\t\t\t\t.done(newDefer.resolve)\n\t\t\t\t\t\t\t\t\t\t\t.fail(newDefer.reject);\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tnewDefer[tuple[0] + \"With\"](\n\t\t\t\t\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\t\t\t\t\tfn ? [returned] : arguments\n\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tfns = null;\n\t\t\t\t\t\t}).promise();\n\t\t\t\t\t},\n\t\t\t\t\tthen: function (onFulfilled, onRejected, onProgress) {\n\t\t\t\t\t\tvar maxDepth = 0;\n\t\t\t\t\t\tfunction resolve(depth, deferred, handler, special) {\n\t\t\t\t\t\t\treturn function () {\n\t\t\t\t\t\t\t\tvar that = this,\n\t\t\t\t\t\t\t\t\targs = arguments,\n\t\t\t\t\t\t\t\t\tmightThrow = function () {\n\t\t\t\t\t\t\t\t\t\tvar returned, then;\n\n\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.3\n\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-59\n\t\t\t\t\t\t\t\t\t\t// Ignore double-resolution attempts\n\t\t\t\t\t\t\t\t\t\tif (depth < maxDepth) {\n\t\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\treturned = handler.apply(that, args);\n\n\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.1\n\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-48\n\t\t\t\t\t\t\t\t\t\tif (returned === deferred.promise()) {\n\t\t\t\t\t\t\t\t\t\t\tthrow new TypeError(\"Thenable self-resolution\");\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ sections 2.3.3.1, 3.5\n\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-54\n\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-75\n\t\t\t\t\t\t\t\t\t\t// Retrieve `then` only once\n\t\t\t\t\t\t\t\t\t\tthen = returned &&\n\n\t\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.4\n\t\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-64\n\t\t\t\t\t\t\t\t\t\t\t// Only check objects and functions for thenability\n\t\t\t\t\t\t\t\t\t\t\t(typeof returned === \"object\" ||\n\t\t\t\t\t\t\t\t\t\t\t\ttypeof returned === \"function\") &&\n\t\t\t\t\t\t\t\t\t\t\treturned.then;\n\n\t\t\t\t\t\t\t\t\t\t// Handle a returned thenable\n\t\t\t\t\t\t\t\t\t\tif (isFunction(then)) {\n\n\t\t\t\t\t\t\t\t\t\t\t// Special processors (notify) just wait for resolution\n\t\t\t\t\t\t\t\t\t\t\tif (special) {\n\t\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\t\tresolve(maxDepth, deferred, Identity, special),\n\t\t\t\t\t\t\t\t\t\t\t\t\tresolve(maxDepth, deferred, Thrower, special)\n\t\t\t\t\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t\t\t\t\t// Normal processors (resolve) also hook into progress\n\t\t\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t\t\t// ...and disregard older resolution values\n\t\t\t\t\t\t\t\t\t\t\t\tmaxDepth++;\n\n\t\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\t\tresolve(maxDepth, deferred, Identity, special),\n\t\t\t\t\t\t\t\t\t\t\t\t\tresolve(maxDepth, deferred, Thrower, special),\n\t\t\t\t\t\t\t\t\t\t\t\t\tresolve(maxDepth, deferred, Identity,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tdeferred.notifyWith)\n\t\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t// Handle all other returned values\n\t\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\t\tif (handler !== Identity) {\n\t\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\t\targs = [returned];\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t// Process the value(s)\n\t\t\t\t\t\t\t\t\t\t\t// Default process is resolve\n\t\t\t\t\t\t\t\t\t\t\t(special || deferred.resolveWith)(that, args);\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\n\t\t\t\t\t\t\t\t\t// Only normal processors (resolve) catch and reject exceptions\n\t\t\t\t\t\t\t\t\tprocess = special ?\n\t\t\t\t\t\t\t\t\t\tmightThrow :\n\t\t\t\t\t\t\t\t\t\tfunction () {\n\t\t\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\t\t\tmightThrow();\n\t\t\t\t\t\t\t\t\t\t\t} catch (e) {\n\n\t\t\t\t\t\t\t\t\t\t\t\tif (jQuery.Deferred.exceptionHook) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tjQuery.Deferred.exceptionHook(e,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tprocess.error);\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.4.1\n\t\t\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-61\n\t\t\t\t\t\t\t\t\t\t\t\t// Ignore post-resolution exceptions\n\t\t\t\t\t\t\t\t\t\t\t\tif (depth + 1 >= maxDepth) {\n\n\t\t\t\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\t\t\t\tif (handler !== Thrower) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\targs = [e];\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\t\tdeferred.rejectWith(that, args);\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.1\n\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-57\n\t\t\t\t\t\t\t\t// Re-resolve promises immediately to dodge false rejection from\n\t\t\t\t\t\t\t\t// subsequent errors\n\t\t\t\t\t\t\t\tif (depth) {\n\t\t\t\t\t\t\t\t\tprocess();\n\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t// Call an optional hook to record the error, in case of exception\n\t\t\t\t\t\t\t\t\t// since it's otherwise lost when execution goes async\n\t\t\t\t\t\t\t\t\tif (jQuery.Deferred.getErrorHook) {\n\t\t\t\t\t\t\t\t\t\tprocess.error = jQuery.Deferred.getErrorHook();\n\n\t\t\t\t\t\t\t\t\t\t// The deprecated alias of the above. While the name suggests\n\t\t\t\t\t\t\t\t\t\t// returning the stack, not an error instance, jQuery just passes\n\t\t\t\t\t\t\t\t\t\t// it directly to `console.warn` so both will work; an instance\n\t\t\t\t\t\t\t\t\t\t// just better cooperates with source maps.\n\t\t\t\t\t\t\t\t\t} else if (jQuery.Deferred.getStackHook) {\n\t\t\t\t\t\t\t\t\t\tprocess.error = jQuery.Deferred.getStackHook();\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\twindow.setTimeout(process);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn jQuery.Deferred(function (newDefer) {\n\n\t\t\t\t\t\t\t// progress_handlers.add( ... )\n\t\t\t\t\t\t\ttuples[0][3].add(\n\t\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\t\tisFunction(onProgress) ?\n\t\t\t\t\t\t\t\t\t\tonProgress :\n\t\t\t\t\t\t\t\t\t\tIdentity,\n\t\t\t\t\t\t\t\t\tnewDefer.notifyWith\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t// fulfilled_handlers.add( ... )\n\t\t\t\t\t\t\ttuples[1][3].add(\n\t\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\t\tisFunction(onFulfilled) ?\n\t\t\t\t\t\t\t\t\t\tonFulfilled :\n\t\t\t\t\t\t\t\t\t\tIdentity\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t// rejected_handlers.add( ... )\n\t\t\t\t\t\t\ttuples[2][3].add(\n\t\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\t\tisFunction(onRejected) ?\n\t\t\t\t\t\t\t\t\t\tonRejected :\n\t\t\t\t\t\t\t\t\t\tThrower\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}).promise();\n\t\t\t\t\t},\n\n\t\t\t\t\t// Get a promise for this deferred\n\t\t\t\t\t// If obj is provided, the promise aspect is added to the object\n\t\t\t\t\tpromise: function (obj) {\n\t\t\t\t\t\treturn obj != null ? jQuery.extend(obj, promise) : promise;\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tdeferred = {};\n\n\t\t\t// Add list-specific methods\n\t\t\tjQuery.each(tuples, function (i, tuple) {\n\t\t\t\tvar list = tuple[2],\n\t\t\t\t\tstateString = tuple[5];\n\n\t\t\t\t// promise.progress = list.add\n\t\t\t\t// promise.done = list.add\n\t\t\t\t// promise.fail = list.add\n\t\t\t\tpromise[tuple[1]] = list.add;\n\n\t\t\t\t// Handle state\n\t\t\t\tif (stateString) {\n\t\t\t\t\tlist.add(\n\t\t\t\t\t\tfunction () {\n\n\t\t\t\t\t\t\t// state = \"resolved\" (i.e., fulfilled)\n\t\t\t\t\t\t\t// state = \"rejected\"\n\t\t\t\t\t\t\tstate = stateString;\n\t\t\t\t\t\t},\n\n\t\t\t\t\t\t// rejected_callbacks.disable\n\t\t\t\t\t\t// fulfilled_callbacks.disable\n\t\t\t\t\t\ttuples[3 - i][2].disable,\n\n\t\t\t\t\t\t// rejected_handlers.disable\n\t\t\t\t\t\t// fulfilled_handlers.disable\n\t\t\t\t\t\ttuples[3 - i][3].disable,\n\n\t\t\t\t\t\t// progress_callbacks.lock\n\t\t\t\t\t\ttuples[0][2].lock,\n\n\t\t\t\t\t\t// progress_handlers.lock\n\t\t\t\t\t\ttuples[0][3].lock\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\t// progress_handlers.fire\n\t\t\t\t// fulfilled_handlers.fire\n\t\t\t\t// rejected_handlers.fire\n\t\t\t\tlist.add(tuple[3].fire);\n\n\t\t\t\t// deferred.notify = function() { deferred.notifyWith(...) }\n\t\t\t\t// deferred.resolve = function() { deferred.resolveWith(...) }\n\t\t\t\t// deferred.reject = function() { deferred.rejectWith(...) }\n\t\t\t\tdeferred[tuple[0]] = function () {\n\t\t\t\t\tdeferred[tuple[0] + \"With\"](this === deferred ? undefined : this, arguments);\n\t\t\t\t\treturn this;\n\t\t\t\t};\n\n\t\t\t\t// deferred.notifyWith = list.fireWith\n\t\t\t\t// deferred.resolveWith = list.fireWith\n\t\t\t\t// deferred.rejectWith = list.fireWith\n\t\t\t\tdeferred[tuple[0] + \"With\"] = list.fireWith;\n\t\t\t});\n\n\t\t\t// Make the deferred a promise\n\t\t\tpromise.promise(deferred);\n\n\t\t\t// Call given func if any\n\t\t\tif (func) {\n\t\t\t\tfunc.call(deferred, deferred);\n\t\t\t}\n\n\t\t\t// All done!\n\t\t\treturn deferred;\n\t\t},\n\n\t\t// Deferred helper\n\t\twhen: function (singleValue) {\n\t\t\tvar\n\n\t\t\t\t// count of uncompleted subordinates\n\t\t\t\tremaining = arguments.length,\n\n\t\t\t\t// count of unprocessed arguments\n\t\t\t\ti = remaining,\n\n\t\t\t\t// subordinate fulfillment data\n\t\t\t\tresolveContexts = Array(i),\n\t\t\t\tresolveValues = slice.call(arguments),\n\n\t\t\t\t// the primary Deferred\n\t\t\t\tprimary = jQuery.Deferred(),\n\n\t\t\t\t// subordinate callback factory\n\t\t\t\tupdateFunc = function (i) {\n\t\t\t\t\treturn function (value) {\n\t\t\t\t\t\tresolveContexts[i] = this;\n\t\t\t\t\t\tresolveValues[i] = arguments.length > 1 ? slice.call(arguments) : value;\n\t\t\t\t\t\tif (!(--remaining)) {\n\t\t\t\t\t\t\tprimary.resolveWith(resolveContexts, resolveValues);\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t};\n\n\t\t\t// Single- and empty arguments are adopted like Promise.resolve\n\t\t\tif (remaining <= 1) {\n\t\t\t\tadoptValue(singleValue, primary.done(updateFunc(i)).resolve, primary.reject,\n\t\t\t\t\t!remaining);\n\n\t\t\t\t// Use .then() to unwrap secondary thenables (cf. gh-3000)\n\t\t\t\tif (primary.state() === \"pending\" ||\n\t\t\t\t\tisFunction(resolveValues[i] && resolveValues[i].then)) {\n\n\t\t\t\t\treturn primary.then();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Multiple arguments are aggregated like Promise.all array elements\n\t\t\twhile (i--) {\n\t\t\t\tadoptValue(resolveValues[i], updateFunc(i), primary.reject);\n\t\t\t}\n\n\t\t\treturn primary.promise();\n\t\t}\n\t});\n\n\n\t// These usually indicate a programmer mistake during development,\n\t// warn about them ASAP rather than swallowing them by default.\n\tvar rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;\n\n\t// If `jQuery.Deferred.getErrorHook` is defined, `asyncError` is an error\n\t// captured before the async barrier to get the original error cause\n\t// which may otherwise be hidden.\n\tjQuery.Deferred.exceptionHook = function (error, asyncError) {\n\n\t\t// Support: IE 8 - 9 only\n\t\t// Console exists when dev tools are open, which can happen at any time\n\t\tif (window.console && window.console.warn && error && rerrorNames.test(error.name)) {\n\t\t\twindow.console.warn(\"jQuery.Deferred exception: \" + error.message,\n\t\t\t\terror.stack, asyncError);\n\t\t}\n\t};\n\n\n\n\n\tjQuery.readyException = function (error) {\n\t\twindow.setTimeout(function () {\n\t\t\tthrow error;\n\t\t});\n\t};\n\n\n\n\n\t// The deferred used on DOM ready\n\tvar readyList = jQuery.Deferred();\n\n\tjQuery.fn.ready = function (fn) {\n\n\t\treadyList\n\t\t\t.then(fn)\n\n\t\t\t// Wrap jQuery.readyException in a function so that the lookup\n\t\t\t// happens at the time of error handling instead of callback\n\t\t\t// registration.\n\t\t\t.catch(function (error) {\n\t\t\t\tjQuery.readyException(error);\n\t\t\t});\n\n\t\treturn this;\n\t};\n\n\tjQuery.extend({\n\n\t\t// Is the DOM ready to be used? Set to true once it occurs.\n\t\tisReady: false,\n\n\t\t// A counter to track how many items to wait for before\n\t\t// the ready event fires. See trac-6781\n\t\treadyWait: 1,\n\n\t\t// Handle when the DOM is ready\n\t\tready: function (wait) {\n\n\t\t\t// Abort if there are pending holds or we're already ready\n\t\t\tif (wait === true ? --jQuery.readyWait : jQuery.isReady) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Remember that the DOM is ready\n\t\t\tjQuery.isReady = true;\n\n\t\t\t// If a normal DOM Ready event fired, decrement, and wait if need be\n\t\t\tif (wait !== true && --jQuery.readyWait > 0) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If there are functions bound, to execute\n\t\t\treadyList.resolveWith(document, [jQuery]);\n\t\t}\n\t});\n\n\tjQuery.ready.then = readyList.then;\n\n\t// The ready event handler and self cleanup method\n\tfunction completed() {\n\t\tdocument.removeEventListener(\"DOMContentLoaded\", completed);\n\t\twindow.removeEventListener(\"load\", completed);\n\t\tjQuery.ready();\n\t}\n\n\t// Catch cases where $(document).ready() is called\n\t// after the browser event has already occurred.\n\t// Support: IE <=9 - 10 only\n\t// Older IE sometimes signals \"interactive\" too soon\n\tif (document.readyState === \"complete\" ||\n\t\t(document.readyState !== \"loading\" && !document.documentElement.doScroll)) {\n\n\t\t// Handle it asynchronously to allow scripts the opportunity to delay ready\n\t\twindow.setTimeout(jQuery.ready);\n\n\t} else {\n\n\t\t// Use the handy event callback\n\t\tdocument.addEventListener(\"DOMContentLoaded\", completed);\n\n\t\t// A fallback to window.onload, that will always work\n\t\twindow.addEventListener(\"load\", completed);\n\t}\n\n\n\n\n\t// Multifunctional method to get and set values of a collection\n\t// The value/s can optionally be executed if it's a function\n\tvar access = function (elems, fn, key, value, chainable, emptyGet, raw) {\n\t\tvar i = 0,\n\t\t\tlen = elems.length,\n\t\t\tbulk = key == null;\n\n\t\t// Sets many values\n\t\tif (toType(key) === \"object\") {\n\t\t\tchainable = true;\n\t\t\tfor (i in key) {\n\t\t\t\taccess(elems, fn, i, key[i], true, emptyGet, raw);\n\t\t\t}\n\n\t\t\t// Sets one value\n\t\t} else if (value !== undefined) {\n\t\t\tchainable = true;\n\n\t\t\tif (!isFunction(value)) {\n\t\t\t\traw = true;\n\t\t\t}\n\n\t\t\tif (bulk) {\n\n\t\t\t\t// Bulk operations run against the entire set\n\t\t\t\tif (raw) {\n\t\t\t\t\tfn.call(elems, value);\n\t\t\t\t\tfn = null;\n\n\t\t\t\t\t// ...except when executing function values\n\t\t\t\t} else {\n\t\t\t\t\tbulk = fn;\n\t\t\t\t\tfn = function (elem, _key, value) {\n\t\t\t\t\t\treturn bulk.call(jQuery(elem), value);\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (fn) {\n\t\t\t\tfor (; i < len; i++) {\n\t\t\t\t\tfn(\n\t\t\t\t\t\telems[i], key, raw ?\n\t\t\t\t\t\tvalue :\n\t\t\t\t\t\tvalue.call(elems[i], i, fn(elems[i], key))\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (chainable) {\n\t\t\treturn elems;\n\t\t}\n\n\t\t// Gets\n\t\tif (bulk) {\n\t\t\treturn fn.call(elems);\n\t\t}\n\n\t\treturn len ? fn(elems[0], key) : emptyGet;\n\t};\n\n\n\t// Matches dashed string for camelizing\n\tvar rmsPrefix = /^-ms-/,\n\t\trdashAlpha = /-([a-z])/g;\n\n\t// Used by camelCase as callback to replace()\n\tfunction fcamelCase(_all, letter) {\n\t\treturn letter.toUpperCase();\n\t}\n\n\t// Convert dashed to camelCase; used by the css and data modules\n\t// Support: IE <=9 - 11, Edge 12 - 15\n\t// Microsoft forgot to hump their vendor prefix (trac-9572)\n\tfunction camelCase(string) {\n\t\treturn string.replace(rmsPrefix, \"ms-\").replace(rdashAlpha, fcamelCase);\n\t}\n\tvar acceptData = function (owner) {\n\n\t\t// Accepts only:\n\t\t//  - Node\n\t\t//    - Node.ELEMENT_NODE\n\t\t//    - Node.DOCUMENT_NODE\n\t\t//  - Object\n\t\t//    - Any\n\t\treturn owner.nodeType === 1 || owner.nodeType === 9 || !(+owner.nodeType);\n\t};\n\n\n\n\n\tfunction Data() {\n\t\tthis.expando = jQuery.expando + Data.uid++;\n\t}\n\n\tData.uid = 1;\n\n\tData.prototype = {\n\n\t\tcache: function (owner) {\n\n\t\t\t// Check if the owner object already has a cache\n\t\t\tvar value = owner[this.expando];\n\n\t\t\t// If not, create one\n\t\t\tif (!value) {\n\t\t\t\tvalue = {};\n\n\t\t\t\t// We can accept data for non-element nodes in modern browsers,\n\t\t\t\t// but we should not, see trac-8335.\n\t\t\t\t// Always return an empty object.\n\t\t\t\tif (acceptData(owner)) {\n\n\t\t\t\t\t// If it is a node unlikely to be stringify-ed or looped over\n\t\t\t\t\t// use plain assignment\n\t\t\t\t\tif (owner.nodeType) {\n\t\t\t\t\t\towner[this.expando] = value;\n\n\t\t\t\t\t\t// Otherwise secure it in a non-enumerable property\n\t\t\t\t\t\t// configurable must be true to allow the property to be\n\t\t\t\t\t\t// deleted when data is removed\n\t\t\t\t\t} else {\n\t\t\t\t\t\tObject.defineProperty(owner, this.expando, {\n\t\t\t\t\t\t\tvalue: value,\n\t\t\t\t\t\t\tconfigurable: true\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn value;\n\t\t},\n\t\tset: function (owner, data, value) {\n\t\t\tvar prop,\n\t\t\t\tcache = this.cache(owner);\n\n\t\t\t// Handle: [ owner, key, value ] args\n\t\t\t// Always use camelCase key (gh-2257)\n\t\t\tif (typeof data === \"string\") {\n\t\t\t\tcache[camelCase(data)] = value;\n\n\t\t\t\t// Handle: [ owner, { properties } ] args\n\t\t\t} else {\n\n\t\t\t\t// Copy the properties one-by-one to the cache object\n\t\t\t\tfor (prop in data) {\n\t\t\t\t\tcache[camelCase(prop)] = data[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn cache;\n\t\t},\n\t\tget: function (owner, key) {\n\t\t\treturn key === undefined ?\n\t\t\t\tthis.cache(owner) :\n\n\t\t\t\t// Always use camelCase key (gh-2257)\n\t\t\t\towner[this.expando] && owner[this.expando][camelCase(key)];\n\t\t},\n\t\taccess: function (owner, key, value) {\n\n\t\t\t// In cases where either:\n\t\t\t//\n\t\t\t//   1. No key was specified\n\t\t\t//   2. A string key was specified, but no value provided\n\t\t\t//\n\t\t\t// Take the \"read\" path and allow the get method to determine\n\t\t\t// which value to return, respectively either:\n\t\t\t//\n\t\t\t//   1. The entire cache object\n\t\t\t//   2. The data stored at the key\n\t\t\t//\n\t\t\tif (key === undefined ||\n\t\t\t\t((key && typeof key === \"string\") && value === undefined)) {\n\n\t\t\t\treturn this.get(owner, key);\n\t\t\t}\n\n\t\t\t// When the key is not a string, or both a key and value\n\t\t\t// are specified, set or extend (existing objects) with either:\n\t\t\t//\n\t\t\t//   1. An object of properties\n\t\t\t//   2. A key and value\n\t\t\t//\n\t\t\tthis.set(owner, key, value);\n\n\t\t\t// Since the \"set\" path can have two possible entry points\n\t\t\t// return the expected data based on which path was taken[*]\n\t\t\treturn value !== undefined ? value : key;\n\t\t},\n\t\tremove: function (owner, key) {\n\t\t\tvar i,\n\t\t\t\tcache = owner[this.expando];\n\n\t\t\tif (cache === undefined) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (key !== undefined) {\n\n\t\t\t\t// Support array or space separated string of keys\n\t\t\t\tif (Array.isArray(key)) {\n\n\t\t\t\t\t// If key is an array of keys...\n\t\t\t\t\t// We always set camelCase keys, so remove that.\n\t\t\t\t\tkey = key.map(camelCase);\n\t\t\t\t} else {\n\t\t\t\t\tkey = camelCase(key);\n\n\t\t\t\t\t// If a key with the spaces exists, use it.\n\t\t\t\t\t// Otherwise, create an array by matching non-whitespace\n\t\t\t\t\tkey = key in cache ?\n\t\t\t\t\t\t[key] :\n\t\t\t\t\t\t(key.match(rnothtmlwhite) || []);\n\t\t\t\t}\n\n\t\t\t\ti = key.length;\n\n\t\t\t\twhile (i--) {\n\t\t\t\t\tdelete cache[key[i]];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove the expando if there's no more data\n\t\t\tif (key === undefined || jQuery.isEmptyObject(cache)) {\n\n\t\t\t\t// Support: Chrome <=35 - 45\n\t\t\t\t// Webkit & Blink performance suffers when deleting properties\n\t\t\t\t// from DOM nodes, so set to undefined instead\n\t\t\t\t// https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted)\n\t\t\t\tif (owner.nodeType) {\n\t\t\t\t\towner[this.expando] = undefined;\n\t\t\t\t} else {\n\t\t\t\t\tdelete owner[this.expando];\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\thasData: function (owner) {\n\t\t\tvar cache = owner[this.expando];\n\t\t\treturn cache !== undefined && !jQuery.isEmptyObject(cache);\n\t\t}\n\t};\n\tvar dataPriv = new Data();\n\n\tvar dataUser = new Data();\n\n\n\n\t//\tImplementation Summary\n\t//\n\t//\t1. Enforce API surface and semantic compatibility with 1.9.x branch\n\t//\t2. Improve the module's maintainability by reducing the storage\n\t//\t\tpaths to a single mechanism.\n\t//\t3. Use the same single mechanism to support \"private\" and \"user\" data.\n\t//\t4. _Never_ expose \"private\" data to user code (TODO: Drop _data, _removeData)\n\t//\t5. Avoid exposing implementation details on user objects (eg. expando properties)\n\t//\t6. Provide a clear path for implementation upgrade to WeakMap in 2014\n\n\tvar rbrace = /^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,\n\t\trmultiDash = /[A-Z]/g;\n\n\tfunction getData(data) {\n\t\tif (data === \"true\") {\n\t\t\treturn true;\n\t\t}\n\n\t\tif (data === \"false\") {\n\t\t\treturn false;\n\t\t}\n\n\t\tif (data === \"null\") {\n\t\t\treturn null;\n\t\t}\n\n\t\t// Only convert to a number if it doesn't change the string\n\t\tif (data === +data + \"\") {\n\t\t\treturn +data;\n\t\t}\n\n\t\tif (rbrace.test(data)) {\n\t\t\treturn JSON.parse(data);\n\t\t}\n\n\t\treturn data;\n\t}\n\n\tfunction dataAttr(elem, key, data) {\n\t\tvar name;\n\n\t\t// If nothing was found internally, try to fetch any\n\t\t// data from the HTML5 data-* attribute\n\t\tif (data === undefined && elem.nodeType === 1) {\n\t\t\tname = \"data-\" + key.replace(rmultiDash, \"-$&\").toLowerCase();\n\t\t\tdata = elem.getAttribute(name);\n\n\t\t\tif (typeof data === \"string\") {\n\t\t\t\ttry {\n\t\t\t\t\tdata = getData(data);\n\t\t\t\t} catch (e) { }\n\n\t\t\t\t// Make sure we set the data so it isn't changed later\n\t\t\t\tdataUser.set(elem, key, data);\n\t\t\t} else {\n\t\t\t\tdata = undefined;\n\t\t\t}\n\t\t}\n\t\treturn data;\n\t}\n\n\tjQuery.extend({\n\t\thasData: function (elem) {\n\t\t\treturn dataUser.hasData(elem) || dataPriv.hasData(elem);\n\t\t},\n\n\t\tdata: function (elem, name, data) {\n\t\t\treturn dataUser.access(elem, name, data);\n\t\t},\n\n\t\tremoveData: function (elem, name) {\n\t\t\tdataUser.remove(elem, name);\n\t\t},\n\n\t\t// TODO: Now that all calls to _data and _removeData have been replaced\n\t\t// with direct calls to dataPriv methods, these can be deprecated.\n\t\t_data: function (elem, name, data) {\n\t\t\treturn dataPriv.access(elem, name, data);\n\t\t},\n\n\t\t_removeData: function (elem, name) {\n\t\t\tdataPriv.remove(elem, name);\n\t\t}\n\t});\n\n\tjQuery.fn.extend({\n\t\tdata: function (key, value) {\n\t\t\tvar i, name, data,\n\t\t\t\telem = this[0],\n\t\t\t\tattrs = elem && elem.attributes;\n\n\t\t\t// Gets all values\n\t\t\tif (key === undefined) {\n\t\t\t\tif (this.length) {\n\t\t\t\t\tdata = dataUser.get(elem);\n\n\t\t\t\t\tif (elem.nodeType === 1 && !dataPriv.get(elem, \"hasDataAttrs\")) {\n\t\t\t\t\t\ti = attrs.length;\n\t\t\t\t\t\twhile (i--) {\n\n\t\t\t\t\t\t\t// Support: IE 11 only\n\t\t\t\t\t\t\t// The attrs elements can be null (trac-14894)\n\t\t\t\t\t\t\tif (attrs[i]) {\n\t\t\t\t\t\t\t\tname = attrs[i].name;\n\t\t\t\t\t\t\t\tif (name.indexOf(\"data-\") === 0) {\n\t\t\t\t\t\t\t\t\tname = camelCase(name.slice(5));\n\t\t\t\t\t\t\t\t\tdataAttr(elem, name, data[name]);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdataPriv.set(elem, \"hasDataAttrs\", true);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn data;\n\t\t\t}\n\n\t\t\t// Sets multiple values\n\t\t\tif (typeof key === \"object\") {\n\t\t\t\treturn this.each(function () {\n\t\t\t\t\tdataUser.set(this, key);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn access(this, function (value) {\n\t\t\t\tvar data;\n\n\t\t\t\t// The calling jQuery object (element matches) is not empty\n\t\t\t\t// (and therefore has an element appears at this[ 0 ]) and the\n\t\t\t\t// `value` parameter was not undefined. An empty jQuery object\n\t\t\t\t// will result in `undefined` for elem = this[ 0 ] which will\n\t\t\t\t// throw an exception if an attempt to read a data cache is made.\n\t\t\t\tif (elem && value === undefined) {\n\n\t\t\t\t\t// Attempt to get data from the cache\n\t\t\t\t\t// The key will always be camelCased in Data\n\t\t\t\t\tdata = dataUser.get(elem, key);\n\t\t\t\t\tif (data !== undefined) {\n\t\t\t\t\t\treturn data;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Attempt to \"discover\" the data in\n\t\t\t\t\t// HTML5 custom data-* attrs\n\t\t\t\t\tdata = dataAttr(elem, key);\n\t\t\t\t\tif (data !== undefined) {\n\t\t\t\t\t\treturn data;\n\t\t\t\t\t}\n\n\t\t\t\t\t// We tried really hard, but the data doesn't exist.\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Set the data...\n\t\t\t\tthis.each(function () {\n\n\t\t\t\t\t// We always store the camelCased key\n\t\t\t\t\tdataUser.set(this, key, value);\n\t\t\t\t});\n\t\t\t}, null, value, arguments.length > 1, null, true);\n\t\t},\n\n\t\tremoveData: function (key) {\n\t\t\treturn this.each(function () {\n\t\t\t\tdataUser.remove(this, key);\n\t\t\t});\n\t\t}\n\t});\n\n\n\tjQuery.extend({\n\t\tqueue: function (elem, type, data) {\n\t\t\tvar queue;\n\n\t\t\tif (elem) {\n\t\t\t\ttype = (type || \"fx\") + \"queue\";\n\t\t\t\tqueue = dataPriv.get(elem, type);\n\n\t\t\t\t// Speed up dequeue by getting out quickly if this is just a lookup\n\t\t\t\tif (data) {\n\t\t\t\t\tif (!queue || Array.isArray(data)) {\n\t\t\t\t\t\tqueue = dataPriv.access(elem, type, jQuery.makeArray(data));\n\t\t\t\t\t} else {\n\t\t\t\t\t\tqueue.push(data);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn queue || [];\n\t\t\t}\n\t\t},\n\n\t\tdequeue: function (elem, type) {\n\t\t\ttype = type || \"fx\";\n\n\t\t\tvar queue = jQuery.queue(elem, type),\n\t\t\t\tstartLength = queue.length,\n\t\t\t\tfn = queue.shift(),\n\t\t\t\thooks = jQuery._queueHooks(elem, type),\n\t\t\t\tnext = function () {\n\t\t\t\t\tjQuery.dequeue(elem, type);\n\t\t\t\t};\n\n\t\t\t// If the fx queue is dequeued, always remove the progress sentinel\n\t\t\tif (fn === \"inprogress\") {\n\t\t\t\tfn = queue.shift();\n\t\t\t\tstartLength--;\n\t\t\t}\n\n\t\t\tif (fn) {\n\n\t\t\t\t// Add a progress sentinel to prevent the fx queue from being\n\t\t\t\t// automatically dequeued\n\t\t\t\tif (type === \"fx\") {\n\t\t\t\t\tqueue.unshift(\"inprogress\");\n\t\t\t\t}\n\n\t\t\t\t// Clear up the last queue stop function\n\t\t\t\tdelete hooks.stop;\n\t\t\t\tfn.call(elem, next, hooks);\n\t\t\t}\n\n\t\t\tif (!startLength && hooks) {\n\t\t\t\thooks.empty.fire();\n\t\t\t}\n\t\t},\n\n\t\t// Not public - generate a queueHooks object, or return the current one\n\t\t_queueHooks: function (elem, type) {\n\t\t\tvar key = type + \"queueHooks\";\n\t\t\treturn dataPriv.get(elem, key) || dataPriv.access(elem, key, {\n\t\t\t\tempty: jQuery.Callbacks(\"once memory\").add(function () {\n\t\t\t\t\tdataPriv.remove(elem, [type + \"queue\", key]);\n\t\t\t\t})\n\t\t\t});\n\t\t}\n\t});\n\n\tjQuery.fn.extend({\n\t\tqueue: function (type, data) {\n\t\t\tvar setter = 2;\n\n\t\t\tif (typeof type !== \"string\") {\n\t\t\t\tdata = type;\n\t\t\t\ttype = \"fx\";\n\t\t\t\tsetter--;\n\t\t\t}\n\n\t\t\tif (arguments.length < setter) {\n\t\t\t\treturn jQuery.queue(this[0], type);\n\t\t\t}\n\n\t\t\treturn data === undefined ?\n\t\t\t\tthis :\n\t\t\t\tthis.each(function () {\n\t\t\t\t\tvar queue = jQuery.queue(this, type, data);\n\n\t\t\t\t\t// Ensure a hooks for this queue\n\t\t\t\t\tjQuery._queueHooks(this, type);\n\n\t\t\t\t\tif (type === \"fx\" && queue[0] !== \"inprogress\") {\n\t\t\t\t\t\tjQuery.dequeue(this, type);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t},\n\t\tdequeue: function (type) {\n\t\t\treturn this.each(function () {\n\t\t\t\tjQuery.dequeue(this, type);\n\t\t\t});\n\t\t},\n\t\tclearQueue: function (type) {\n\t\t\treturn this.queue(type || \"fx\", []);\n\t\t},\n\n\t\t// Get a promise resolved when queues of a certain type\n\t\t// are emptied (fx is the type by default)\n\t\tpromise: function (type, obj) {\n\t\t\tvar tmp,\n\t\t\t\tcount = 1,\n\t\t\t\tdefer = jQuery.Deferred(),\n\t\t\t\telements = this,\n\t\t\t\ti = this.length,\n\t\t\t\tresolve = function () {\n\t\t\t\t\tif (!(--count)) {\n\t\t\t\t\t\tdefer.resolveWith(elements, [elements]);\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\tif (typeof type !== \"string\") {\n\t\t\t\tobj = type;\n\t\t\t\ttype = undefined;\n\t\t\t}\n\t\t\ttype = type || \"fx\";\n\n\t\t\twhile (i--) {\n\t\t\t\ttmp = dataPriv.get(elements[i], type + \"queueHooks\");\n\t\t\t\tif (tmp && tmp.empty) {\n\t\t\t\t\tcount++;\n\t\t\t\t\ttmp.empty.add(resolve);\n\t\t\t\t}\n\t\t\t}\n\t\t\tresolve();\n\t\t\treturn defer.promise(obj);\n\t\t}\n\t});\n\tvar pnum = (/[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/).source;\n\n\tvar rcssNum = new RegExp(\"^(?:([+-])=|)(\" + pnum + \")([a-z%]*)$\", \"i\");\n\n\n\tvar cssExpand = [\"Top\", \"Right\", \"Bottom\", \"Left\"];\n\n\tvar documentElement = document.documentElement;\n\n\n\n\tvar isAttached = function (elem) {\n\t\treturn jQuery.contains(elem.ownerDocument, elem);\n\t},\n\t\tcomposed = { composed: true };\n\n\t// Support: IE 9 - 11+, Edge 12 - 18+, iOS 10.0 - 10.2 only\n\t// Check attachment across shadow DOM boundaries when possible (gh-3504)\n\t// Support: iOS 10.0-10.2 only\n\t// Early iOS 10 versions support `attachShadow` but not `getRootNode`,\n\t// leading to errors. We need to check for `getRootNode`.\n\tif (documentElement.getRootNode) {\n\t\tisAttached = function (elem) {\n\t\t\treturn jQuery.contains(elem.ownerDocument, elem) ||\n\t\t\t\telem.getRootNode(composed) === elem.ownerDocument;\n\t\t};\n\t}\n\tvar isHiddenWithinTree = function (elem, el) {\n\n\t\t// isHiddenWithinTree might be called from jQuery#filter function;\n\t\t// in that case, element will be second argument\n\t\telem = el || elem;\n\n\t\t// Inline style trumps all\n\t\treturn elem.style.display === \"none\" ||\n\t\t\telem.style.display === \"\" &&\n\n\t\t\t// Otherwise, check computed style\n\t\t\t// Support: Firefox <=43 - 45\n\t\t\t// Disconnected elements can have computed display: none, so first confirm that elem is\n\t\t\t// in the document.\n\t\t\tisAttached(elem) &&\n\n\t\t\tjQuery.css(elem, \"display\") === \"none\";\n\t};\n\n\n\n\tfunction adjustCSS(elem, prop, valueParts, tween) {\n\t\tvar adjusted, scale,\n\t\t\tmaxIterations = 20,\n\t\t\tcurrentValue = tween ?\n\t\t\t\tfunction () {\n\t\t\t\t\treturn tween.cur();\n\t\t\t\t} :\n\t\t\t\tfunction () {\n\t\t\t\t\treturn jQuery.css(elem, prop, \"\");\n\t\t\t\t},\n\t\t\tinitial = currentValue(),\n\t\t\tunit = valueParts && valueParts[3] || (jQuery.cssNumber[prop] ? \"\" : \"px\"),\n\n\t\t\t// Starting value computation is required for potential unit mismatches\n\t\t\tinitialInUnit = elem.nodeType &&\n\t\t\t\t(jQuery.cssNumber[prop] || unit !== \"px\" && +initial) &&\n\t\t\t\trcssNum.exec(jQuery.css(elem, prop));\n\n\t\tif (initialInUnit && initialInUnit[3] !== unit) {\n\n\t\t\t// Support: Firefox <=54\n\t\t\t// Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144)\n\t\t\tinitial = initial / 2;\n\n\t\t\t// Trust units reported by jQuery.css\n\t\t\tunit = unit || initialInUnit[3];\n\n\t\t\t// Iteratively approximate from a nonzero starting point\n\t\t\tinitialInUnit = +initial || 1;\n\n\t\t\twhile (maxIterations--) {\n\n\t\t\t\t// Evaluate and update our best guess (doubling guesses that zero out).\n\t\t\t\t// Finish if the scale equals or crosses 1 (making the old*new product non-positive).\n\t\t\t\tjQuery.style(elem, prop, initialInUnit + unit);\n\t\t\t\tif ((1 - scale) * (1 - (scale = currentValue() / initial || 0.5)) <= 0) {\n\t\t\t\t\tmaxIterations = 0;\n\t\t\t\t}\n\t\t\t\tinitialInUnit = initialInUnit / scale;\n\n\t\t\t}\n\n\t\t\tinitialInUnit = initialInUnit * 2;\n\t\t\tjQuery.style(elem, prop, initialInUnit + unit);\n\n\t\t\t// Make sure we update the tween properties later on\n\t\t\tvalueParts = valueParts || [];\n\t\t}\n\n\t\tif (valueParts) {\n\t\t\tinitialInUnit = +initialInUnit || +initial || 0;\n\n\t\t\t// Apply relative offset (+=/-=) if specified\n\t\t\tadjusted = valueParts[1] ?\n\t\t\t\tinitialInUnit + (valueParts[1] + 1) * valueParts[2] :\n\t\t\t\t+valueParts[2];\n\t\t\tif (tween) {\n\t\t\t\ttween.unit = unit;\n\t\t\t\ttween.start = initialInUnit;\n\t\t\t\ttween.end = adjusted;\n\t\t\t}\n\t\t}\n\t\treturn adjusted;\n\t}\n\n\n\tvar defaultDisplayMap = {};\n\n\tfunction getDefaultDisplay(elem) {\n\t\tvar temp,\n\t\t\tdoc = elem.ownerDocument,\n\t\t\tnodeName = elem.nodeName,\n\t\t\tdisplay = defaultDisplayMap[nodeName];\n\n\t\tif (display) {\n\t\t\treturn display;\n\t\t}\n\n\t\ttemp = doc.body.appendChild(doc.createElement(nodeName));\n\t\tdisplay = jQuery.css(temp, \"display\");\n\n\t\ttemp.parentNode.removeChild(temp);\n\n\t\tif (display === \"none\") {\n\t\t\tdisplay = \"block\";\n\t\t}\n\t\tdefaultDisplayMap[nodeName] = display;\n\n\t\treturn display;\n\t}\n\n\tfunction showHide(elements, show) {\n\t\tvar display, elem,\n\t\t\tvalues = [],\n\t\t\tindex = 0,\n\t\t\tlength = elements.length;\n\n\t\t// Determine new display value for elements that need to change\n\t\tfor (; index < length; index++) {\n\t\t\telem = elements[index];\n\t\t\tif (!elem.style) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tdisplay = elem.style.display;\n\t\t\tif (show) {\n\n\t\t\t\t// Since we force visibility upon cascade-hidden elements, an immediate (and slow)\n\t\t\t\t// check is required in this first loop unless we have a nonempty display value (either\n\t\t\t\t// inline or about-to-be-restored)\n\t\t\t\tif (display === \"none\") {\n\t\t\t\t\tvalues[index] = dataPriv.get(elem, \"display\") || null;\n\t\t\t\t\tif (!values[index]) {\n\t\t\t\t\t\telem.style.display = \"\";\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (elem.style.display === \"\" && isHiddenWithinTree(elem)) {\n\t\t\t\t\tvalues[index] = getDefaultDisplay(elem);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (display !== \"none\") {\n\t\t\t\t\tvalues[index] = \"none\";\n\n\t\t\t\t\t// Remember what we're overwriting\n\t\t\t\t\tdataPriv.set(elem, \"display\", display);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Set the display of the elements in a second loop to avoid constant reflow\n\t\tfor (index = 0; index < length; index++) {\n\t\t\tif (values[index] != null) {\n\t\t\t\telements[index].style.display = values[index];\n\t\t\t}\n\t\t}\n\n\t\treturn elements;\n\t}\n\n\tjQuery.fn.extend({\n\t\tshow: function () {\n\t\t\treturn showHide(this, true);\n\t\t},\n\t\thide: function () {\n\t\t\treturn showHide(this);\n\t\t},\n\t\ttoggle: function (state) {\n\t\t\tif (typeof state === \"boolean\") {\n\t\t\t\treturn state ? this.show() : this.hide();\n\t\t\t}\n\n\t\t\treturn this.each(function () {\n\t\t\t\tif (isHiddenWithinTree(this)) {\n\t\t\t\t\tjQuery(this).show();\n\t\t\t\t} else {\n\t\t\t\t\tjQuery(this).hide();\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t});\n\tvar rcheckableType = (/^(?:checkbox|radio)$/i);\n\n\tvar rtagName = (/<([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]*)/i);\n\n\tvar rscriptType = (/^$|^module$|\\/(?:java|ecma)script/i);\n\n\n\n\t(function () {\n\t\tvar fragment = document.createDocumentFragment(),\n\t\t\tdiv = fragment.appendChild(document.createElement(\"div\")),\n\t\t\tinput = document.createElement(\"input\");\n\n\t\t// Support: Android 4.0 - 4.3 only\n\t\t// Check state lost if the name is set (trac-11217)\n\t\t// Support: Windows Web Apps (WWA)\n\t\t// `name` and `type` must use .setAttribute for WWA (trac-14901)\n\t\tinput.setAttribute(\"type\", \"radio\");\n\t\tinput.setAttribute(\"checked\", \"checked\");\n\t\tinput.setAttribute(\"name\", \"t\");\n\n\t\tdiv.appendChild(input);\n\n\t\t// Support: Android <=4.1 only\n\t\t// Older WebKit doesn't clone checked state correctly in fragments\n\t\tsupport.checkClone = div.cloneNode(true).cloneNode(true).lastChild.checked;\n\n\t\t// Support: IE <=11 only\n\t\t// Make sure textarea (and checkbox) defaultValue is properly cloned\n\t\tdiv.innerHTML = \"<textarea>x</textarea>\";\n\t\tsupport.noCloneChecked = !!div.cloneNode(true).lastChild.defaultValue;\n\n\t\t// Support: IE <=9 only\n\t\t// IE <=9 replaces <option> tags with their contents when inserted outside of\n\t\t// the select element.\n\t\tdiv.innerHTML = \"<option></option>\";\n\t\tsupport.option = !!div.lastChild;\n\t})();\n\n\n\t// We have to close these tags to support XHTML (trac-13200)\n\tvar wrapMap = {\n\n\t\t// XHTML parsers do not magically insert elements in the\n\t\t// same way that tag soup parsers do. So we cannot shorten\n\t\t// this by omitting <tbody> or other required elements.\n\t\tthead: [1, \"<table>\", \"</table>\"],\n\t\tcol: [2, \"<table><colgroup>\", \"</colgroup></table>\"],\n\t\ttr: [2, \"<table><tbody>\", \"</tbody></table>\"],\n\t\ttd: [3, \"<table><tbody><tr>\", \"</tr></tbody></table>\"],\n\n\t\t_default: [0, \"\", \"\"]\n\t};\n\n\twrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;\n\twrapMap.th = wrapMap.td;\n\n\t// Support: IE <=9 only\n\tif (!support.option) {\n\t\twrapMap.optgroup = wrapMap.option = [1, \"<select multiple='multiple'>\", \"</select>\"];\n\t}\n\n\n\tfunction getAll(context, tag) {\n\n\t\t// Support: IE <=9 - 11 only\n\t\t// Use typeof to avoid zero-argument method invocation on host objects (trac-15151)\n\t\tvar ret;\n\n\t\tif (typeof context.getElementsByTagName !== \"undefined\") {\n\t\t\tret = context.getElementsByTagName(tag || \"*\");\n\n\t\t} else if (typeof context.querySelectorAll !== \"undefined\") {\n\t\t\tret = context.querySelectorAll(tag || \"*\");\n\n\t\t} else {\n\t\t\tret = [];\n\t\t}\n\n\t\tif (tag === undefined || tag && nodeName(context, tag)) {\n\t\t\treturn jQuery.merge([context], ret);\n\t\t}\n\n\t\treturn ret;\n\t}\n\n\n\t// Mark scripts as having already been evaluated\n\tfunction setGlobalEval(elems, refElements) {\n\t\tvar i = 0,\n\t\t\tl = elems.length;\n\n\t\tfor (; i < l; i++) {\n\t\t\tdataPriv.set(\n\t\t\t\telems[i],\n\t\t\t\t\"globalEval\",\n\t\t\t\t!refElements || dataPriv.get(refElements[i], \"globalEval\")\n\t\t\t);\n\t\t}\n\t}\n\n\n\tvar rhtml = /<|&#?\\w+;/;\n\n\tfunction buildFragment(elems, context, scripts, selection, ignored) {\n\t\tvar elem, tmp, tag, wrap, attached, j,\n\t\t\tfragment = context.createDocumentFragment(),\n\t\t\tnodes = [],\n\t\t\ti = 0,\n\t\t\tl = elems.length;\n\n\t\tfor (; i < l; i++) {\n\t\t\telem = elems[i];\n\n\t\t\tif (elem || elem === 0) {\n\n\t\t\t\t// Add nodes directly\n\t\t\t\tif (toType(elem) === \"object\") {\n\n\t\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\t\tjQuery.merge(nodes, elem.nodeType ? [elem] : elem);\n\n\t\t\t\t\t// Convert non-html into a text node\n\t\t\t\t} else if (!rhtml.test(elem)) {\n\t\t\t\t\tnodes.push(context.createTextNode(elem));\n\n\t\t\t\t\t// Convert html into DOM nodes\n\t\t\t\t} else {\n\t\t\t\t\ttmp = tmp || fragment.appendChild(context.createElement(\"div\"));\n\n\t\t\t\t\t// Deserialize a standard representation\n\t\t\t\t\ttag = (rtagName.exec(elem) || [\"\", \"\"])[1].toLowerCase();\n\t\t\t\t\twrap = wrapMap[tag] || wrapMap._default;\n\t\t\t\t\ttmp.innerHTML = wrap[1] + jQuery.htmlPrefilter(elem) + wrap[2];\n\n\t\t\t\t\t// Descend through wrappers to the right content\n\t\t\t\t\tj = wrap[0];\n\t\t\t\t\twhile (j--) {\n\t\t\t\t\t\ttmp = tmp.lastChild;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\t\tjQuery.merge(nodes, tmp.childNodes);\n\n\t\t\t\t\t// Remember the top-level container\n\t\t\t\t\ttmp = fragment.firstChild;\n\n\t\t\t\t\t// Ensure the created nodes are orphaned (trac-12392)\n\t\t\t\t\ttmp.textContent = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Remove wrapper from fragment\n\t\tfragment.textContent = \"\";\n\n\t\ti = 0;\n\t\twhile ((elem = nodes[i++])) {\n\n\t\t\t// Skip elements already in the context collection (trac-4087)\n\t\t\tif (selection && jQuery.inArray(elem, selection) > -1) {\n\t\t\t\tif (ignored) {\n\t\t\t\t\tignored.push(elem);\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tattached = isAttached(elem);\n\n\t\t\t// Append to fragment\n\t\t\ttmp = getAll(fragment.appendChild(elem), \"script\");\n\n\t\t\t// Preserve script evaluation history\n\t\t\tif (attached) {\n\t\t\t\tsetGlobalEval(tmp);\n\t\t\t}\n\n\t\t\t// Capture executables\n\t\t\tif (scripts) {\n\t\t\t\tj = 0;\n\t\t\t\twhile ((elem = tmp[j++])) {\n\t\t\t\t\tif (rscriptType.test(elem.type || \"\")) {\n\t\t\t\t\t\tscripts.push(elem);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn fragment;\n\t}\n\n\n\tvar rtypenamespace = /^([^.]*)(?:\\.(.+)|)/;\n\n\tfunction returnTrue() {\n\t\treturn true;\n\t}\n\n\tfunction returnFalse() {\n\t\treturn false;\n\t}\n\n\tfunction on(elem, types, selector, data, fn, one) {\n\t\tvar origFn, type;\n\n\t\t// Types can be a map of types/handlers\n\t\tif (typeof types === \"object\") {\n\n\t\t\t// ( types-Object, selector, data )\n\t\t\tif (typeof selector !== \"string\") {\n\n\t\t\t\t// ( types-Object, data )\n\t\t\t\tdata = data || selector;\n\t\t\t\tselector = undefined;\n\t\t\t}\n\t\t\tfor (type in types) {\n\t\t\t\ton(elem, type, selector, data, types[type], one);\n\t\t\t}\n\t\t\treturn elem;\n\t\t}\n\n\t\tif (data == null && fn == null) {\n\n\t\t\t// ( types, fn )\n\t\t\tfn = selector;\n\t\t\tdata = selector = undefined;\n\t\t} else if (fn == null) {\n\t\t\tif (typeof selector === \"string\") {\n\n\t\t\t\t// ( types, selector, fn )\n\t\t\t\tfn = data;\n\t\t\t\tdata = undefined;\n\t\t\t} else {\n\n\t\t\t\t// ( types, data, fn )\n\t\t\t\tfn = data;\n\t\t\t\tdata = selector;\n\t\t\t\tselector = undefined;\n\t\t\t}\n\t\t}\n\t\tif (fn === false) {\n\t\t\tfn = returnFalse;\n\t\t} else if (!fn) {\n\t\t\treturn elem;\n\t\t}\n\n\t\tif (one === 1) {\n\t\t\torigFn = fn;\n\t\t\tfn = function (event) {\n\n\t\t\t\t// Can use an empty set, since event contains the info\n\t\t\t\tjQuery().off(event);\n\t\t\t\treturn origFn.apply(this, arguments);\n\t\t\t};\n\n\t\t\t// Use same guid so caller can remove using origFn\n\t\t\tfn.guid = origFn.guid || (origFn.guid = jQuery.guid++);\n\t\t}\n\t\treturn elem.each(function () {\n\t\t\tjQuery.event.add(this, types, fn, data, selector);\n\t\t});\n\t}\n\n\t/*\n\t * Helper functions for managing events -- not part of the public interface.\n\t * Props to Dean Edwards' addEvent library for many of the ideas.\n\t */\n\tjQuery.event = {\n\n\t\tglobal: {},\n\n\t\tadd: function (elem, types, handler, data, selector) {\n\n\t\t\tvar handleObjIn, eventHandle, tmp,\n\t\t\t\tevents, t, handleObj,\n\t\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\t\telemData = dataPriv.get(elem);\n\n\t\t\t// Only attach events to objects that accept data\n\t\t\tif (!acceptData(elem)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Caller can pass in an object of custom data in lieu of the handler\n\t\t\tif (handler.handler) {\n\t\t\t\thandleObjIn = handler;\n\t\t\t\thandler = handleObjIn.handler;\n\t\t\t\tselector = handleObjIn.selector;\n\t\t\t}\n\n\t\t\t// Ensure that invalid selectors throw exceptions at attach time\n\t\t\t// Evaluate against documentElement in case elem is a non-element node (e.g., document)\n\t\t\tif (selector) {\n\t\t\t\tjQuery.find.matchesSelector(documentElement, selector);\n\t\t\t}\n\n\t\t\t// Make sure that the handler has a unique ID, used to find/remove it later\n\t\t\tif (!handler.guid) {\n\t\t\t\thandler.guid = jQuery.guid++;\n\t\t\t}\n\n\t\t\t// Init the element's event structure and main handler, if this is the first\n\t\t\tif (!(events = elemData.events)) {\n\t\t\t\tevents = elemData.events = Object.create(null);\n\t\t\t}\n\t\t\tif (!(eventHandle = elemData.handle)) {\n\t\t\t\teventHandle = elemData.handle = function (e) {\n\n\t\t\t\t\t// Discard the second event of a jQuery.event.trigger() and\n\t\t\t\t\t// when an event is called after a page has unloaded\n\t\t\t\t\treturn typeof jQuery !== \"undefined\" && jQuery.event.triggered !== e.type ?\n\t\t\t\t\t\tjQuery.event.dispatch.apply(elem, arguments) : undefined;\n\t\t\t\t};\n\t\t\t}\n\n\t\t\t// Handle multiple events separated by a space\n\t\t\ttypes = (types || \"\").match(rnothtmlwhite) || [\"\"];\n\t\t\tt = types.length;\n\t\t\twhile (t--) {\n\t\t\t\ttmp = rtypenamespace.exec(types[t]) || [];\n\t\t\t\ttype = origType = tmp[1];\n\t\t\t\tnamespaces = (tmp[2] || \"\").split(\".\").sort();\n\n\t\t\t\t// There *must* be a type, no attaching namespace-only handlers\n\t\t\t\tif (!type) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// If event changes its type, use the special event handlers for the changed type\n\t\t\t\tspecial = jQuery.event.special[type] || {};\n\n\t\t\t\t// If selector defined, determine special event api type, otherwise given type\n\t\t\t\ttype = (selector ? special.delegateType : special.bindType) || type;\n\n\t\t\t\t// Update special based on newly reset type\n\t\t\t\tspecial = jQuery.event.special[type] || {};\n\n\t\t\t\t// handleObj is passed to all event handlers\n\t\t\t\thandleObj = jQuery.extend({\n\t\t\t\t\ttype: type,\n\t\t\t\t\torigType: origType,\n\t\t\t\t\tdata: data,\n\t\t\t\t\thandler: handler,\n\t\t\t\t\tguid: handler.guid,\n\t\t\t\t\tselector: selector,\n\t\t\t\t\tneedsContext: selector && jQuery.expr.match.needsContext.test(selector),\n\t\t\t\t\tnamespace: namespaces.join(\".\")\n\t\t\t\t}, handleObjIn);\n\n\t\t\t\t// Init the event handler queue if we're the first\n\t\t\t\tif (!(handlers = events[type])) {\n\t\t\t\t\thandlers = events[type] = [];\n\t\t\t\t\thandlers.delegateCount = 0;\n\n\t\t\t\t\t// Only use addEventListener if the special events handler returns false\n\t\t\t\t\tif (!special.setup ||\n\t\t\t\t\t\tspecial.setup.call(elem, data, namespaces, eventHandle) === false) {\n\n\t\t\t\t\t\tif (elem.addEventListener) {\n\t\t\t\t\t\t\telem.addEventListener(type, eventHandle);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (special.add) {\n\t\t\t\t\tspecial.add.call(elem, handleObj);\n\n\t\t\t\t\tif (!handleObj.handler.guid) {\n\t\t\t\t\t\thandleObj.handler.guid = handler.guid;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Add to the element's handler list, delegates in front\n\t\t\t\tif (selector) {\n\t\t\t\t\thandlers.splice(handlers.delegateCount++, 0, handleObj);\n\t\t\t\t} else {\n\t\t\t\t\thandlers.push(handleObj);\n\t\t\t\t}\n\n\t\t\t\t// Keep track of which events have ever been used, for event optimization\n\t\t\t\tjQuery.event.global[type] = true;\n\t\t\t}\n\n\t\t},\n\n\t\t// Detach an event or set of events from an element\n\t\tremove: function (elem, types, handler, selector, mappedTypes) {\n\n\t\t\tvar j, origCount, tmp,\n\t\t\t\tevents, t, handleObj,\n\t\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\t\telemData = dataPriv.hasData(elem) && dataPriv.get(elem);\n\n\t\t\tif (!elemData || !(events = elemData.events)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Once for each type.namespace in types; type may be omitted\n\t\t\ttypes = (types || \"\").match(rnothtmlwhite) || [\"\"];\n\t\t\tt = types.length;\n\t\t\twhile (t--) {\n\t\t\t\ttmp = rtypenamespace.exec(types[t]) || [];\n\t\t\t\ttype = origType = tmp[1];\n\t\t\t\tnamespaces = (tmp[2] || \"\").split(\".\").sort();\n\n\t\t\t\t// Unbind all events (on this namespace, if provided) for the element\n\t\t\t\tif (!type) {\n\t\t\t\t\tfor (type in events) {\n\t\t\t\t\t\tjQuery.event.remove(elem, type + types[t], handler, selector, true);\n\t\t\t\t\t}\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tspecial = jQuery.event.special[type] || {};\n\t\t\t\ttype = (selector ? special.delegateType : special.bindType) || type;\n\t\t\t\thandlers = events[type] || [];\n\t\t\t\ttmp = tmp[2] &&\n\t\t\t\t\tnew RegExp(\"(^|\\\\.)\" + namespaces.join(\"\\\\.(?:.*\\\\.|)\") + \"(\\\\.|$)\");\n\n\t\t\t\t// Remove matching events\n\t\t\t\torigCount = j = handlers.length;\n\t\t\t\twhile (j--) {\n\t\t\t\t\thandleObj = handlers[j];\n\n\t\t\t\t\tif ((mappedTypes || origType === handleObj.origType) &&\n\t\t\t\t\t\t(!handler || handler.guid === handleObj.guid) &&\n\t\t\t\t\t\t(!tmp || tmp.test(handleObj.namespace)) &&\n\t\t\t\t\t\t(!selector || selector === handleObj.selector ||\n\t\t\t\t\t\t\tselector === \"**\" && handleObj.selector)) {\n\t\t\t\t\t\thandlers.splice(j, 1);\n\n\t\t\t\t\t\tif (handleObj.selector) {\n\t\t\t\t\t\t\thandlers.delegateCount--;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (special.remove) {\n\t\t\t\t\t\t\tspecial.remove.call(elem, handleObj);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Remove generic event handler if we removed something and no more handlers exist\n\t\t\t\t// (avoids potential for endless recursion during removal of special event handlers)\n\t\t\t\tif (origCount && !handlers.length) {\n\t\t\t\t\tif (!special.teardown ||\n\t\t\t\t\t\tspecial.teardown.call(elem, namespaces, elemData.handle) === false) {\n\n\t\t\t\t\t\tjQuery.removeEvent(elem, type, elemData.handle);\n\t\t\t\t\t}\n\n\t\t\t\t\tdelete events[type];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove data and the expando if it's no longer used\n\t\t\tif (jQuery.isEmptyObject(events)) {\n\t\t\t\tdataPriv.remove(elem, \"handle events\");\n\t\t\t}\n\t\t},\n\n\t\tdispatch: function (nativeEvent) {\n\n\t\t\tvar i, j, ret, matched, handleObj, handlerQueue,\n\t\t\t\targs = new Array(arguments.length),\n\n\t\t\t\t// Make a writable jQuery.Event from the native event object\n\t\t\t\tevent = jQuery.event.fix(nativeEvent),\n\n\t\t\t\thandlers = (\n\t\t\t\t\tdataPriv.get(this, \"events\") || Object.create(null)\n\t\t\t\t)[event.type] || [],\n\t\t\t\tspecial = jQuery.event.special[event.type] || {};\n\n\t\t\t// Use the fix-ed jQuery.Event rather than the (read-only) native event\n\t\t\targs[0] = event;\n\n\t\t\tfor (i = 1; i < arguments.length; i++) {\n\t\t\t\targs[i] = arguments[i];\n\t\t\t}\n\n\t\t\tevent.delegateTarget = this;\n\n\t\t\t// Call the preDispatch hook for the mapped type, and let it bail if desired\n\t\t\tif (special.preDispatch && special.preDispatch.call(this, event) === false) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Determine handlers\n\t\t\thandlerQueue = jQuery.event.handlers.call(this, event, handlers);\n\n\t\t\t// Run delegates first; they may want to stop propagation beneath us\n\t\t\ti = 0;\n\t\t\twhile ((matched = handlerQueue[i++]) && !event.isPropagationStopped()) {\n\t\t\t\tevent.currentTarget = matched.elem;\n\n\t\t\t\tj = 0;\n\t\t\t\twhile ((handleObj = matched.handlers[j++]) &&\n\t\t\t\t\t!event.isImmediatePropagationStopped()) {\n\n\t\t\t\t\t// If the event is namespaced, then each handler is only invoked if it is\n\t\t\t\t\t// specially universal or its namespaces are a superset of the event's.\n\t\t\t\t\tif (!event.rnamespace || handleObj.namespace === false ||\n\t\t\t\t\t\tevent.rnamespace.test(handleObj.namespace)) {\n\n\t\t\t\t\t\tevent.handleObj = handleObj;\n\t\t\t\t\t\tevent.data = handleObj.data;\n\n\t\t\t\t\t\tret = ((jQuery.event.special[handleObj.origType] || {}).handle ||\n\t\t\t\t\t\t\thandleObj.handler).apply(matched.elem, args);\n\n\t\t\t\t\t\tif (ret !== undefined) {\n\t\t\t\t\t\t\tif ((event.result = ret) === false) {\n\t\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Call the postDispatch hook for the mapped type\n\t\t\tif (special.postDispatch) {\n\t\t\t\tspecial.postDispatch.call(this, event);\n\t\t\t}\n\n\t\t\treturn event.result;\n\t\t},\n\n\t\thandlers: function (event, handlers) {\n\t\t\tvar i, handleObj, sel, matchedHandlers, matchedSelectors,\n\t\t\t\thandlerQueue = [],\n\t\t\t\tdelegateCount = handlers.delegateCount,\n\t\t\t\tcur = event.target;\n\n\t\t\t// Find delegate handlers\n\t\t\tif (delegateCount &&\n\n\t\t\t\t// Support: IE <=9\n\t\t\t\t// Black-hole SVG <use> instance trees (trac-13180)\n\t\t\t\tcur.nodeType &&\n\n\t\t\t\t// Support: Firefox <=42\n\t\t\t\t// Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861)\n\t\t\t\t// https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click\n\t\t\t\t// Support: IE 11 only\n\t\t\t\t// ...but not arrow key \"clicks\" of radio inputs, which can have `button` -1 (gh-2343)\n\t\t\t\t!(event.type === \"click\" && event.button >= 1)) {\n\n\t\t\t\tfor (; cur !== this; cur = cur.parentNode || this) {\n\n\t\t\t\t\t// Don't check non-elements (trac-13208)\n\t\t\t\t\t// Don't process clicks on disabled elements (trac-6911, trac-8165, trac-11382, trac-11764)\n\t\t\t\t\tif (cur.nodeType === 1 && !(event.type === \"click\" && cur.disabled === true)) {\n\t\t\t\t\t\tmatchedHandlers = [];\n\t\t\t\t\t\tmatchedSelectors = {};\n\t\t\t\t\t\tfor (i = 0; i < delegateCount; i++) {\n\t\t\t\t\t\t\thandleObj = handlers[i];\n\n\t\t\t\t\t\t\t// Don't conflict with Object.prototype properties (trac-13203)\n\t\t\t\t\t\t\tsel = handleObj.selector + \" \";\n\n\t\t\t\t\t\t\tif (matchedSelectors[sel] === undefined) {\n\t\t\t\t\t\t\t\tmatchedSelectors[sel] = handleObj.needsContext ?\n\t\t\t\t\t\t\t\t\tjQuery(sel, this).index(cur) > -1 :\n\t\t\t\t\t\t\t\t\tjQuery.find(sel, this, null, [cur]).length;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (matchedSelectors[sel]) {\n\t\t\t\t\t\t\t\tmatchedHandlers.push(handleObj);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (matchedHandlers.length) {\n\t\t\t\t\t\t\thandlerQueue.push({ elem: cur, handlers: matchedHandlers });\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Add the remaining (directly-bound) handlers\n\t\t\tcur = this;\n\t\t\tif (delegateCount < handlers.length) {\n\t\t\t\thandlerQueue.push({ elem: cur, handlers: handlers.slice(delegateCount) });\n\t\t\t}\n\n\t\t\treturn handlerQueue;\n\t\t},\n\n\t\taddProp: function (name, hook) {\n\t\t\tObject.defineProperty(jQuery.Event.prototype, name, {\n\t\t\t\tenumerable: true,\n\t\t\t\tconfigurable: true,\n\n\t\t\t\tget: isFunction(hook) ?\n\t\t\t\t\tfunction () {\n\t\t\t\t\t\tif (this.originalEvent) {\n\t\t\t\t\t\t\treturn hook(this.originalEvent);\n\t\t\t\t\t\t}\n\t\t\t\t\t} :\n\t\t\t\t\tfunction () {\n\t\t\t\t\t\tif (this.originalEvent) {\n\t\t\t\t\t\t\treturn this.originalEvent[name];\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\n\t\t\t\tset: function (value) {\n\t\t\t\t\tObject.defineProperty(this, name, {\n\t\t\t\t\t\tenumerable: true,\n\t\t\t\t\t\tconfigurable: true,\n\t\t\t\t\t\twritable: true,\n\t\t\t\t\t\tvalue: value\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\tfix: function (originalEvent) {\n\t\t\treturn originalEvent[jQuery.expando] ?\n\t\t\t\toriginalEvent :\n\t\t\t\tnew jQuery.Event(originalEvent);\n\t\t},\n\n\t\tspecial: {\n\t\t\tload: {\n\n\t\t\t\t// Prevent triggered image.load events from bubbling to window.load\n\t\t\t\tnoBubble: true\n\t\t\t},\n\t\t\tclick: {\n\n\t\t\t\t// Utilize native event to ensure correct state for checkable inputs\n\t\t\t\tsetup: function (data) {\n\n\t\t\t\t\t// For mutual compressibility with _default, replace `this` access with a local var.\n\t\t\t\t\t// `|| data` is dead code meant only to preserve the variable through minification.\n\t\t\t\t\tvar el = this || data;\n\n\t\t\t\t\t// Claim the first handler\n\t\t\t\t\tif (rcheckableType.test(el.type) &&\n\t\t\t\t\t\tel.click && nodeName(el, \"input\")) {\n\n\t\t\t\t\t\t// dataPriv.set( el, \"click\", ... )\n\t\t\t\t\t\tleverageNative(el, \"click\", true);\n\t\t\t\t\t}\n\n\t\t\t\t\t// Return false to allow normal processing in the caller\n\t\t\t\t\treturn false;\n\t\t\t\t},\n\t\t\t\ttrigger: function (data) {\n\n\t\t\t\t\t// For mutual compressibility with _default, replace `this` access with a local var.\n\t\t\t\t\t// `|| data` is dead code meant only to preserve the variable through minification.\n\t\t\t\t\tvar el = this || data;\n\n\t\t\t\t\t// Force setup before triggering a click\n\t\t\t\t\tif (rcheckableType.test(el.type) &&\n\t\t\t\t\t\tel.click && nodeName(el, \"input\")) {\n\n\t\t\t\t\t\tleverageNative(el, \"click\");\n\t\t\t\t\t}\n\n\t\t\t\t\t// Return non-false to allow normal event-path propagation\n\t\t\t\t\treturn true;\n\t\t\t\t},\n\n\t\t\t\t// For cross-browser consistency, suppress native .click() on links\n\t\t\t\t// Also prevent it if we're currently inside a leveraged native-event stack\n\t\t\t\t_default: function (event) {\n\t\t\t\t\tvar target = event.target;\n\t\t\t\t\treturn rcheckableType.test(target.type) &&\n\t\t\t\t\t\ttarget.click && nodeName(target, \"input\") &&\n\t\t\t\t\t\tdataPriv.get(target, \"click\") ||\n\t\t\t\t\t\tnodeName(target, \"a\");\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tbeforeunload: {\n\t\t\t\tpostDispatch: function (event) {\n\n\t\t\t\t\t// Support: Firefox 20+\n\t\t\t\t\t// Firefox doesn't alert if the returnValue field is not set.\n\t\t\t\t\tif (event.result !== undefined && event.originalEvent) {\n\t\t\t\t\t\tevent.originalEvent.returnValue = event.result;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t// Ensure the presence of an event listener that handles manually-triggered\n\t// synthetic events by interrupting progress until reinvoked in response to\n\t// *native* events that it fires directly, ensuring that state changes have\n\t// already occurred before other listeners are invoked.\n\tfunction leverageNative(el, type, isSetup) {\n\n\t\t// Missing `isSetup` indicates a trigger call, which must force setup through jQuery.event.add\n\t\tif (!isSetup) {\n\t\t\tif (dataPriv.get(el, type) === undefined) {\n\t\t\t\tjQuery.event.add(el, type, returnTrue);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\t// Register the controller as a special universal handler for all event namespaces\n\t\tdataPriv.set(el, type, false);\n\t\tjQuery.event.add(el, type, {\n\t\t\tnamespace: false,\n\t\t\thandler: function (event) {\n\t\t\t\tvar result,\n\t\t\t\t\tsaved = dataPriv.get(this, type);\n\n\t\t\t\tif ((event.isTrigger & 1) && this[type]) {\n\n\t\t\t\t\t// Interrupt processing of the outer synthetic .trigger()ed event\n\t\t\t\t\tif (!saved) {\n\n\t\t\t\t\t\t// Store arguments for use when handling the inner native event\n\t\t\t\t\t\t// There will always be at least one argument (an event object), so this array\n\t\t\t\t\t\t// will not be confused with a leftover capture object.\n\t\t\t\t\t\tsaved = slice.call(arguments);\n\t\t\t\t\t\tdataPriv.set(this, type, saved);\n\n\t\t\t\t\t\t// Trigger the native event and capture its result\n\t\t\t\t\t\tthis[type]();\n\t\t\t\t\t\tresult = dataPriv.get(this, type);\n\t\t\t\t\t\tdataPriv.set(this, type, false);\n\n\t\t\t\t\t\tif (saved !== result) {\n\n\t\t\t\t\t\t\t// Cancel the outer synthetic event\n\t\t\t\t\t\t\tevent.stopImmediatePropagation();\n\t\t\t\t\t\t\tevent.preventDefault();\n\n\t\t\t\t\t\t\treturn result;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// If this is an inner synthetic event for an event with a bubbling surrogate\n\t\t\t\t\t\t// (focus or blur), assume that the surrogate already propagated from triggering\n\t\t\t\t\t\t// the native event and prevent that from happening again here.\n\t\t\t\t\t\t// This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the\n\t\t\t\t\t\t// bubbling surrogate propagates *after* the non-bubbling base), but that seems\n\t\t\t\t\t\t// less bad than duplication.\n\t\t\t\t\t} else if ((jQuery.event.special[type] || {}).delegateType) {\n\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t}\n\n\t\t\t\t\t// If this is a native event triggered above, everything is now in order\n\t\t\t\t\t// Fire an inner synthetic event with the original arguments\n\t\t\t\t} else if (saved) {\n\n\t\t\t\t\t// ...and capture the result\n\t\t\t\t\tdataPriv.set(this, type, jQuery.event.trigger(\n\t\t\t\t\t\tsaved[0],\n\t\t\t\t\t\tsaved.slice(1),\n\t\t\t\t\t\tthis\n\t\t\t\t\t));\n\n\t\t\t\t\t// Abort handling of the native event by all jQuery handlers while allowing\n\t\t\t\t\t// native handlers on the same element to run. On target, this is achieved\n\t\t\t\t\t// by stopping immediate propagation just on the jQuery event. However,\n\t\t\t\t\t// the native event is re-wrapped by a jQuery one on each level of the\n\t\t\t\t\t// propagation so the only way to stop it for jQuery is to stop it for\n\t\t\t\t\t// everyone via native `stopPropagation()`. This is not a problem for\n\t\t\t\t\t// focus/blur which don't bubble, but it does also stop click on checkboxes\n\t\t\t\t\t// and radios. We accept this limitation.\n\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\tevent.isImmediatePropagationStopped = returnTrue;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\tjQuery.removeEvent = function (elem, type, handle) {\n\n\t\t// This \"if\" is needed for plain objects\n\t\tif (elem.removeEventListener) {\n\t\t\telem.removeEventListener(type, handle);\n\t\t}\n\t};\n\n\tjQuery.Event = function (src, props) {\n\n\t\t// Allow instantiation without the 'new' keyword\n\t\tif (!(this instanceof jQuery.Event)) {\n\t\t\treturn new jQuery.Event(src, props);\n\t\t}\n\n\t\t// Event object\n\t\tif (src && src.type) {\n\t\t\tthis.originalEvent = src;\n\t\t\tthis.type = src.type;\n\n\t\t\t// Events bubbling up the document may have been marked as prevented\n\t\t\t// by a handler lower down the tree; reflect the correct value.\n\t\t\tthis.isDefaultPrevented = src.defaultPrevented ||\n\t\t\t\tsrc.defaultPrevented === undefined &&\n\n\t\t\t\t// Support: Android <=2.3 only\n\t\t\t\tsrc.returnValue === false ?\n\t\t\t\treturnTrue :\n\t\t\t\treturnFalse;\n\n\t\t\t// Create target properties\n\t\t\t// Support: Safari <=6 - 7 only\n\t\t\t// Target should not be a text node (trac-504, trac-13143)\n\t\t\tthis.target = (src.target && src.target.nodeType === 3) ?\n\t\t\t\tsrc.target.parentNode :\n\t\t\t\tsrc.target;\n\n\t\t\tthis.currentTarget = src.currentTarget;\n\t\t\tthis.relatedTarget = src.relatedTarget;\n\n\t\t\t// Event type\n\t\t} else {\n\t\t\tthis.type = src;\n\t\t}\n\n\t\t// Put explicitly provided properties onto the event object\n\t\tif (props) {\n\t\t\tjQuery.extend(this, props);\n\t\t}\n\n\t\t// Create a timestamp if incoming event doesn't have one\n\t\tthis.timeStamp = src && src.timeStamp || Date.now();\n\n\t\t// Mark it as fixed\n\t\tthis[jQuery.expando] = true;\n\t};\n\n\t// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding\n\t// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html\n\tjQuery.Event.prototype = {\n\t\tconstructor: jQuery.Event,\n\t\tisDefaultPrevented: returnFalse,\n\t\tisPropagationStopped: returnFalse,\n\t\tisImmediatePropagationStopped: returnFalse,\n\t\tisSimulated: false,\n\n\t\tpreventDefault: function () {\n\t\t\tvar e = this.originalEvent;\n\n\t\t\tthis.isDefaultPrevented = returnTrue;\n\n\t\t\tif (e && !this.isSimulated) {\n\t\t\t\te.preventDefault();\n\t\t\t}\n\t\t},\n\t\tstopPropagation: function () {\n\t\t\tvar e = this.originalEvent;\n\n\t\t\tthis.isPropagationStopped = returnTrue;\n\n\t\t\tif (e && !this.isSimulated) {\n\t\t\t\te.stopPropagation();\n\t\t\t}\n\t\t},\n\t\tstopImmediatePropagation: function () {\n\t\t\tvar e = this.originalEvent;\n\n\t\t\tthis.isImmediatePropagationStopped = returnTrue;\n\n\t\t\tif (e && !this.isSimulated) {\n\t\t\t\te.stopImmediatePropagation();\n\t\t\t}\n\n\t\t\tthis.stopPropagation();\n\t\t}\n\t};\n\n\t// Includes all common event props including KeyEvent and MouseEvent specific props\n\tjQuery.each({\n\t\taltKey: true,\n\t\tbubbles: true,\n\t\tcancelable: true,\n\t\tchangedTouches: true,\n\t\tctrlKey: true,\n\t\tdetail: true,\n\t\teventPhase: true,\n\t\tmetaKey: true,\n\t\tpageX: true,\n\t\tpageY: true,\n\t\tshiftKey: true,\n\t\tview: true,\n\t\t\"char\": true,\n\t\tcode: true,\n\t\tcharCode: true,\n\t\tkey: true,\n\t\tkeyCode: true,\n\t\tbutton: true,\n\t\tbuttons: true,\n\t\tclientX: true,\n\t\tclientY: true,\n\t\toffsetX: true,\n\t\toffsetY: true,\n\t\tpointerId: true,\n\t\tpointerType: true,\n\t\tscreenX: true,\n\t\tscreenY: true,\n\t\ttargetTouches: true,\n\t\ttoElement: true,\n\t\ttouches: true,\n\t\twhich: true\n\t}, jQuery.event.addProp);\n\n\tjQuery.each({ focus: \"focusin\", blur: \"focusout\" }, function (type, delegateType) {\n\n\t\tfunction focusMappedHandler(nativeEvent) {\n\t\t\tif (document.documentMode) {\n\n\t\t\t\t// Support: IE 11+\n\t\t\t\t// Attach a single focusin/focusout handler on the document while someone wants\n\t\t\t\t// focus/blur. This is because the former are synchronous in IE while the latter\n\t\t\t\t// are async. In other browsers, all those handlers are invoked synchronously.\n\n\t\t\t\t// `handle` from private data would already wrap the event, but we need\n\t\t\t\t// to change the `type` here.\n\t\t\t\tvar handle = dataPriv.get(this, \"handle\"),\n\t\t\t\t\tevent = jQuery.event.fix(nativeEvent);\n\t\t\t\tevent.type = nativeEvent.type === \"focusin\" ? \"focus\" : \"blur\";\n\t\t\t\tevent.isSimulated = true;\n\n\t\t\t\t// First, handle focusin/focusout\n\t\t\t\thandle(nativeEvent);\n\n\t\t\t\t// ...then, handle focus/blur\n\t\t\t\t//\n\t\t\t\t// focus/blur don't bubble while focusin/focusout do; simulate the former by only\n\t\t\t\t// invoking the handler at the lower level.\n\t\t\t\tif (event.target === event.currentTarget) {\n\n\t\t\t\t\t// The setup part calls `leverageNative`, which, in turn, calls\n\t\t\t\t\t// `jQuery.event.add`, so event handle will already have been set\n\t\t\t\t\t// by this point.\n\t\t\t\t\thandle(event);\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\t// For non-IE browsers, attach a single capturing handler on the document\n\t\t\t\t// while someone wants focusin/focusout.\n\t\t\t\tjQuery.event.simulate(delegateType, nativeEvent.target,\n\t\t\t\t\tjQuery.event.fix(nativeEvent));\n\t\t\t}\n\t\t}\n\n\t\tjQuery.event.special[type] = {\n\n\t\t\t// Utilize native event if possible so blur/focus sequence is correct\n\t\t\tsetup: function () {\n\n\t\t\t\tvar attaches;\n\n\t\t\t\t// Claim the first handler\n\t\t\t\t// dataPriv.set( this, \"focus\", ... )\n\t\t\t\t// dataPriv.set( this, \"blur\", ... )\n\t\t\t\tleverageNative(this, type, true);\n\n\t\t\t\tif (document.documentMode) {\n\n\t\t\t\t\t// Support: IE 9 - 11+\n\t\t\t\t\t// We use the same native handler for focusin & focus (and focusout & blur)\n\t\t\t\t\t// so we need to coordinate setup & teardown parts between those events.\n\t\t\t\t\t// Use `delegateType` as the key as `type` is already used by `leverageNative`.\n\t\t\t\t\tattaches = dataPriv.get(this, delegateType);\n\t\t\t\t\tif (!attaches) {\n\t\t\t\t\t\tthis.addEventListener(delegateType, focusMappedHandler);\n\t\t\t\t\t}\n\t\t\t\t\tdataPriv.set(this, delegateType, (attaches || 0) + 1);\n\t\t\t\t} else {\n\n\t\t\t\t\t// Return false to allow normal processing in the caller\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\t\t\ttrigger: function () {\n\n\t\t\t\t// Force setup before trigger\n\t\t\t\tleverageNative(this, type);\n\n\t\t\t\t// Return non-false to allow normal event-path propagation\n\t\t\t\treturn true;\n\t\t\t},\n\n\t\t\tteardown: function () {\n\t\t\t\tvar attaches;\n\n\t\t\t\tif (document.documentMode) {\n\t\t\t\t\tattaches = dataPriv.get(this, delegateType) - 1;\n\t\t\t\t\tif (!attaches) {\n\t\t\t\t\t\tthis.removeEventListener(delegateType, focusMappedHandler);\n\t\t\t\t\t\tdataPriv.remove(this, delegateType);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdataPriv.set(this, delegateType, attaches);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\n\t\t\t\t\t// Return false to indicate standard teardown should be applied\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// Suppress native focus or blur if we're currently inside\n\t\t\t// a leveraged native-event stack\n\t\t\t_default: function (event) {\n\t\t\t\treturn dataPriv.get(event.target, type);\n\t\t\t},\n\n\t\t\tdelegateType: delegateType\n\t\t};\n\n\t\t// Support: Firefox <=44\n\t\t// Firefox doesn't have focus(in | out) events\n\t\t// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787\n\t\t//\n\t\t// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1\n\t\t// focus(in | out) events fire after focus & blur events,\n\t\t// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order\n\t\t// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857\n\t\t//\n\t\t// Support: IE 9 - 11+\n\t\t// To preserve relative focusin/focus & focusout/blur event order guaranteed on the 3.x branch,\n\t\t// attach a single handler for both events in IE.\n\t\tjQuery.event.special[delegateType] = {\n\t\t\tsetup: function () {\n\n\t\t\t\t// Handle: regular nodes (via `this.ownerDocument`), window\n\t\t\t\t// (via `this.document`) & document (via `this`).\n\t\t\t\tvar doc = this.ownerDocument || this.document || this,\n\t\t\t\t\tdataHolder = document.documentMode ? this : doc,\n\t\t\t\t\tattaches = dataPriv.get(dataHolder, delegateType);\n\n\t\t\t\t// Support: IE 9 - 11+\n\t\t\t\t// We use the same native handler for focusin & focus (and focusout & blur)\n\t\t\t\t// so we need to coordinate setup & teardown parts between those events.\n\t\t\t\t// Use `delegateType` as the key as `type` is already used by `leverageNative`.\n\t\t\t\tif (!attaches) {\n\t\t\t\t\tif (document.documentMode) {\n\t\t\t\t\t\tthis.addEventListener(delegateType, focusMappedHandler);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdoc.addEventListener(type, focusMappedHandler, true);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tdataPriv.set(dataHolder, delegateType, (attaches || 0) + 1);\n\t\t\t},\n\t\t\tteardown: function () {\n\t\t\t\tvar doc = this.ownerDocument || this.document || this,\n\t\t\t\t\tdataHolder = document.documentMode ? this : doc,\n\t\t\t\t\tattaches = dataPriv.get(dataHolder, delegateType) - 1;\n\n\t\t\t\tif (!attaches) {\n\t\t\t\t\tif (document.documentMode) {\n\t\t\t\t\t\tthis.removeEventListener(delegateType, focusMappedHandler);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdoc.removeEventListener(type, focusMappedHandler, true);\n\t\t\t\t\t}\n\t\t\t\t\tdataPriv.remove(dataHolder, delegateType);\n\t\t\t\t} else {\n\t\t\t\t\tdataPriv.set(dataHolder, delegateType, attaches);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t});\n\n\t// Create mouseenter/leave events using mouseover/out and event-time checks\n\t// so that event delegation works in jQuery.\n\t// Do the same for pointerenter/pointerleave and pointerover/pointerout\n\t//\n\t// Support: Safari 7 only\n\t// Safari sends mouseenter too often; see:\n\t// https://bugs.chromium.org/p/chromium/issues/detail?id=470258\n\t// for the description of the bug (it existed in older Chrome versions as well).\n\tjQuery.each({\n\t\tmouseenter: \"mouseover\",\n\t\tmouseleave: \"mouseout\",\n\t\tpointerenter: \"pointerover\",\n\t\tpointerleave: \"pointerout\"\n\t}, function (orig, fix) {\n\t\tjQuery.event.special[orig] = {\n\t\t\tdelegateType: fix,\n\t\t\tbindType: fix,\n\n\t\t\thandle: function (event) {\n\t\t\t\tvar ret,\n\t\t\t\t\ttarget = this,\n\t\t\t\t\trelated = event.relatedTarget,\n\t\t\t\t\thandleObj = event.handleObj;\n\n\t\t\t\t// For mouseenter/leave call the handler if related is outside the target.\n\t\t\t\t// NB: No relatedTarget if the mouse left/entered the browser window\n\t\t\t\tif (!related || (related !== target && !jQuery.contains(target, related))) {\n\t\t\t\t\tevent.type = handleObj.origType;\n\t\t\t\t\tret = handleObj.handler.apply(this, arguments);\n\t\t\t\t\tevent.type = fix;\n\t\t\t\t}\n\t\t\t\treturn ret;\n\t\t\t}\n\t\t};\n\t});\n\n\tjQuery.fn.extend({\n\n\t\ton: function (types, selector, data, fn) {\n\t\t\treturn on(this, types, selector, data, fn);\n\t\t},\n\t\tone: function (types, selector, data, fn) {\n\t\t\treturn on(this, types, selector, data, fn, 1);\n\t\t},\n\t\toff: function (types, selector, fn) {\n\t\t\tvar handleObj, type;\n\t\t\tif (types && types.preventDefault && types.handleObj) {\n\n\t\t\t\t// ( event )  dispatched jQuery.Event\n\t\t\t\thandleObj = types.handleObj;\n\t\t\t\tjQuery(types.delegateTarget).off(\n\t\t\t\t\thandleObj.namespace ?\n\t\t\t\t\t\thandleObj.origType + \".\" + handleObj.namespace :\n\t\t\t\t\t\thandleObj.origType,\n\t\t\t\t\thandleObj.selector,\n\t\t\t\t\thandleObj.handler\n\t\t\t\t);\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\tif (typeof types === \"object\") {\n\n\t\t\t\t// ( types-object [, selector] )\n\t\t\t\tfor (type in types) {\n\t\t\t\t\tthis.off(type, selector, types[type]);\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\tif (selector === false || typeof selector === \"function\") {\n\n\t\t\t\t// ( types [, fn] )\n\t\t\t\tfn = selector;\n\t\t\t\tselector = undefined;\n\t\t\t}\n\t\t\tif (fn === false) {\n\t\t\t\tfn = returnFalse;\n\t\t\t}\n\t\t\treturn this.each(function () {\n\t\t\t\tjQuery.event.remove(this, types, fn, selector);\n\t\t\t});\n\t\t}\n\t});\n\n\n\tvar\n\n\t\t// Support: IE <=10 - 11, Edge 12 - 13 only\n\t\t// In IE/Edge using regex groups here causes severe slowdowns.\n\t\t// See https://connect.microsoft.com/IE/feedback/details/1736512/\n\t\trnoInnerhtml = /<script|<style|<link/i,\n\n\t\t// checked=\"checked\" or checked\n\t\trchecked = /checked\\s*(?:[^=]|=\\s*.checked.)/i,\n\n\t\trcleanScript = /^\\s*<!\\[CDATA\\[|\\]\\]>\\s*$/g;\n\n\t// Prefer a tbody over its parent table for containing new rows\n\tfunction manipulationTarget(elem, content) {\n\t\tif (nodeName(elem, \"table\") &&\n\t\t\tnodeName(content.nodeType !== 11 ? content : content.firstChild, \"tr\")) {\n\n\t\t\treturn jQuery(elem).children(\"tbody\")[0] || elem;\n\t\t}\n\n\t\treturn elem;\n\t}\n\n\t// Replace/restore the type attribute of script elements for safe DOM manipulation\n\tfunction disableScript(elem) {\n\t\telem.type = (elem.getAttribute(\"type\") !== null) + \"/\" + elem.type;\n\t\treturn elem;\n\t}\n\tfunction restoreScript(elem) {\n\t\tif ((elem.type || \"\").slice(0, 5) === \"true/\") {\n\t\t\telem.type = elem.type.slice(5);\n\t\t} else {\n\t\t\telem.removeAttribute(\"type\");\n\t\t}\n\n\t\treturn elem;\n\t}\n\n\tfunction cloneCopyEvent(src, dest) {\n\t\tvar i, l, type, pdataOld, udataOld, udataCur, events;\n\n\t\tif (dest.nodeType !== 1) {\n\t\t\treturn;\n\t\t}\n\n\t\t// 1. Copy private data: events, handlers, etc.\n\t\tif (dataPriv.hasData(src)) {\n\t\t\tpdataOld = dataPriv.get(src);\n\t\t\tevents = pdataOld.events;\n\n\t\t\tif (events) {\n\t\t\t\tdataPriv.remove(dest, \"handle events\");\n\n\t\t\t\tfor (type in events) {\n\t\t\t\t\tfor (i = 0, l = events[type].length; i < l; i++) {\n\t\t\t\t\t\tjQuery.event.add(dest, type, events[type][i]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// 2. Copy user data\n\t\tif (dataUser.hasData(src)) {\n\t\t\tudataOld = dataUser.access(src);\n\t\t\tudataCur = jQuery.extend({}, udataOld);\n\n\t\t\tdataUser.set(dest, udataCur);\n\t\t}\n\t}\n\n\t// Fix IE bugs, see support tests\n\tfunction fixInput(src, dest) {\n\t\tvar nodeName = dest.nodeName.toLowerCase();\n\n\t\t// Fails to persist the checked state of a cloned checkbox or radio button.\n\t\tif (nodeName === \"input\" && rcheckableType.test(src.type)) {\n\t\t\tdest.checked = src.checked;\n\n\t\t\t// Fails to return the selected option to the default selected state when cloning options\n\t\t} else if (nodeName === \"input\" || nodeName === \"textarea\") {\n\t\t\tdest.defaultValue = src.defaultValue;\n\t\t}\n\t}\n\n\tfunction domManip(collection, args, callback, ignored) {\n\n\t\t// Flatten any nested arrays\n\t\targs = flat(args);\n\n\t\tvar fragment, first, scripts, hasScripts, node, doc,\n\t\t\ti = 0,\n\t\t\tl = collection.length,\n\t\t\tiNoClone = l - 1,\n\t\t\tvalue = args[0],\n\t\t\tvalueIsFunction = isFunction(value);\n\n\t\t// We can't cloneNode fragments that contain checked, in WebKit\n\t\tif (valueIsFunction ||\n\t\t\t(l > 1 && typeof value === \"string\" &&\n\t\t\t\t!support.checkClone && rchecked.test(value))) {\n\t\t\treturn collection.each(function (index) {\n\t\t\t\tvar self = collection.eq(index);\n\t\t\t\tif (valueIsFunction) {\n\t\t\t\t\targs[0] = value.call(this, index, self.html());\n\t\t\t\t}\n\t\t\t\tdomManip(self, args, callback, ignored);\n\t\t\t});\n\t\t}\n\n\t\tif (l) {\n\t\t\tfragment = buildFragment(args, collection[0].ownerDocument, false, collection, ignored);\n\t\t\tfirst = fragment.firstChild;\n\n\t\t\tif (fragment.childNodes.length === 1) {\n\t\t\t\tfragment = first;\n\t\t\t}\n\n\t\t\t// Require either new content or an interest in ignored elements to invoke the callback\n\t\t\tif (first || ignored) {\n\t\t\t\tscripts = jQuery.map(getAll(fragment, \"script\"), disableScript);\n\t\t\t\thasScripts = scripts.length;\n\n\t\t\t\t// Use the original fragment for the last item\n\t\t\t\t// instead of the first because it can end up\n\t\t\t\t// being emptied incorrectly in certain situations (trac-8070).\n\t\t\t\tfor (; i < l; i++) {\n\t\t\t\t\tnode = fragment;\n\n\t\t\t\t\tif (i !== iNoClone) {\n\t\t\t\t\t\tnode = jQuery.clone(node, true, true);\n\n\t\t\t\t\t\t// Keep references to cloned scripts for later restoration\n\t\t\t\t\t\tif (hasScripts) {\n\n\t\t\t\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\t\t\t\tjQuery.merge(scripts, getAll(node, \"script\"));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tcallback.call(collection[i], node, i);\n\t\t\t\t}\n\n\t\t\t\tif (hasScripts) {\n\t\t\t\t\tdoc = scripts[scripts.length - 1].ownerDocument;\n\n\t\t\t\t\t// Reenable scripts\n\t\t\t\t\tjQuery.map(scripts, restoreScript);\n\n\t\t\t\t\t// Evaluate executable scripts on first document insertion\n\t\t\t\t\tfor (i = 0; i < hasScripts; i++) {\n\t\t\t\t\t\tnode = scripts[i];\n\t\t\t\t\t\tif (rscriptType.test(node.type || \"\") &&\n\t\t\t\t\t\t\t!dataPriv.access(node, \"globalEval\") &&\n\t\t\t\t\t\t\tjQuery.contains(doc, node)) {\n\n\t\t\t\t\t\t\tif (node.src && (node.type || \"\").toLowerCase() !== \"module\") {\n\n\t\t\t\t\t\t\t\t// Optional AJAX dependency, but won't run scripts if not present\n\t\t\t\t\t\t\t\tif (jQuery._evalUrl && !node.noModule) {\n\t\t\t\t\t\t\t\t\tjQuery._evalUrl(node.src, {\n\t\t\t\t\t\t\t\t\t\tnonce: node.nonce || node.getAttribute(\"nonce\")\n\t\t\t\t\t\t\t\t\t}, doc);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t// Unwrap a CDATA section containing script contents. This shouldn't be\n\t\t\t\t\t\t\t\t// needed as in XML documents they're already not visible when\n\t\t\t\t\t\t\t\t// inspecting element contents and in HTML documents they have no\n\t\t\t\t\t\t\t\t// meaning but we're preserving that logic for backwards compatibility.\n\t\t\t\t\t\t\t\t// This will be removed completely in 4.0. See gh-4904.\n\t\t\t\t\t\t\t\tDOMEval(node.textContent.replace(rcleanScript, \"\"), node, doc);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn collection;\n\t}\n\n\tfunction remove(elem, selector, keepData) {\n\t\tvar node,\n\t\t\tnodes = selector ? jQuery.filter(selector, elem) : elem,\n\t\t\ti = 0;\n\n\t\tfor (; (node = nodes[i]) != null; i++) {\n\t\t\tif (!keepData && node.nodeType === 1) {\n\t\t\t\tjQuery.cleanData(getAll(node));\n\t\t\t}\n\n\t\t\tif (node.parentNode) {\n\t\t\t\tif (keepData && isAttached(node)) {\n\t\t\t\t\tsetGlobalEval(getAll(node, \"script\"));\n\t\t\t\t}\n\t\t\t\tnode.parentNode.removeChild(node);\n\t\t\t}\n\t\t}\n\n\t\treturn elem;\n\t}\n\n\tjQuery.extend({\n\t\thtmlPrefilter: function (html) {\n\t\t\treturn html;\n\t\t},\n\n\t\tclone: function (elem, dataAndEvents, deepDataAndEvents) {\n\t\t\tvar i, l, srcElements, destElements,\n\t\t\t\tclone = elem.cloneNode(true),\n\t\t\t\tinPage = isAttached(elem);\n\n\t\t\t// Fix IE cloning issues\n\t\t\tif (!support.noCloneChecked && (elem.nodeType === 1 || elem.nodeType === 11) &&\n\t\t\t\t!jQuery.isXMLDoc(elem)) {\n\n\t\t\t\t// We eschew jQuery#find here for performance reasons:\n\t\t\t\t// https://jsperf.com/getall-vs-sizzle/2\n\t\t\t\tdestElements = getAll(clone);\n\t\t\t\tsrcElements = getAll(elem);\n\n\t\t\t\tfor (i = 0, l = srcElements.length; i < l; i++) {\n\t\t\t\t\tfixInput(srcElements[i], destElements[i]);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Copy the events from the original to the clone\n\t\t\tif (dataAndEvents) {\n\t\t\t\tif (deepDataAndEvents) {\n\t\t\t\t\tsrcElements = srcElements || getAll(elem);\n\t\t\t\t\tdestElements = destElements || getAll(clone);\n\n\t\t\t\t\tfor (i = 0, l = srcElements.length; i < l; i++) {\n\t\t\t\t\t\tcloneCopyEvent(srcElements[i], destElements[i]);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tcloneCopyEvent(elem, clone);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Preserve script evaluation history\n\t\t\tdestElements = getAll(clone, \"script\");\n\t\t\tif (destElements.length > 0) {\n\t\t\t\tsetGlobalEval(destElements, !inPage && getAll(elem, \"script\"));\n\t\t\t}\n\n\t\t\t// Return the cloned set\n\t\t\treturn clone;\n\t\t},\n\n\t\tcleanData: function (elems) {\n\t\t\tvar data, elem, type,\n\t\t\t\tspecial = jQuery.event.special,\n\t\t\t\ti = 0;\n\n\t\t\tfor (; (elem = elems[i]) !== undefined; i++) {\n\t\t\t\tif (acceptData(elem)) {\n\t\t\t\t\tif ((data = elem[dataPriv.expando])) {\n\t\t\t\t\t\tif (data.events) {\n\t\t\t\t\t\t\tfor (type in data.events) {\n\t\t\t\t\t\t\t\tif (special[type]) {\n\t\t\t\t\t\t\t\t\tjQuery.event.remove(elem, type);\n\n\t\t\t\t\t\t\t\t\t// This is a shortcut to avoid jQuery.event.remove's overhead\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tjQuery.removeEvent(elem, type, data.handle);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\t\telem[dataPriv.expando] = undefined;\n\t\t\t\t\t}\n\t\t\t\t\tif (elem[dataUser.expando]) {\n\n\t\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\t\telem[dataUser.expando] = undefined;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\n\tjQuery.fn.extend({\n\t\tdetach: function (selector) {\n\t\t\treturn remove(this, selector, true);\n\t\t},\n\n\t\tremove: function (selector) {\n\t\t\treturn remove(this, selector);\n\t\t},\n\n\t\ttext: function (value) {\n\t\t\treturn access(this, function (value) {\n\t\t\t\treturn value === undefined ?\n\t\t\t\t\tjQuery.text(this) :\n\t\t\t\t\tthis.empty().each(function () {\n\t\t\t\t\t\tif (this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9) {\n\t\t\t\t\t\t\tthis.textContent = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t}, null, value, arguments.length);\n\t\t},\n\n\t\tappend: function () {\n\t\t\treturn domManip(this, arguments, function (elem) {\n\t\t\t\tif (this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9) {\n\t\t\t\t\tvar target = manipulationTarget(this, elem);\n\t\t\t\t\ttarget.appendChild(elem);\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\tprepend: function () {\n\t\t\treturn domManip(this, arguments, function (elem) {\n\t\t\t\tif (this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9) {\n\t\t\t\t\tvar target = manipulationTarget(this, elem);\n\t\t\t\t\ttarget.insertBefore(elem, target.firstChild);\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\tbefore: function () {\n\t\t\treturn domManip(this, arguments, function (elem) {\n\t\t\t\tif (this.parentNode) {\n\t\t\t\t\tthis.parentNode.insertBefore(elem, this);\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\tafter: function () {\n\t\t\treturn domManip(this, arguments, function (elem) {\n\t\t\t\tif (this.parentNode) {\n\t\t\t\t\tthis.parentNode.insertBefore(elem, this.nextSibling);\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\tempty: function () {\n\t\t\tvar elem,\n\t\t\t\ti = 0;\n\n\t\t\tfor (; (elem = this[i]) != null; i++) {\n\t\t\t\tif (elem.nodeType === 1) {\n\n\t\t\t\t\t// Prevent memory leaks\n\t\t\t\t\tjQuery.cleanData(getAll(elem, false));\n\n\t\t\t\t\t// Remove any remaining nodes\n\t\t\t\t\telem.textContent = \"\";\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn this;\n\t\t},\n\n\t\tclone: function (dataAndEvents, deepDataAndEvents) {\n\t\t\tdataAndEvents = dataAndEvents == null ? false : dataAndEvents;\n\t\t\tdeepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;\n\n\t\t\treturn this.map(function () {\n\t\t\t\treturn jQuery.clone(this, dataAndEvents, deepDataAndEvents);\n\t\t\t});\n\t\t},\n\n\t\thtml: function (value) {\n\t\t\treturn access(this, function (value) {\n\t\t\t\tvar elem = this[0] || {},\n\t\t\t\t\ti = 0,\n\t\t\t\t\tl = this.length;\n\n\t\t\t\tif (value === undefined && elem.nodeType === 1) {\n\t\t\t\t\treturn elem.innerHTML;\n\t\t\t\t}\n\n\t\t\t\t// See if we can take a shortcut and just use innerHTML\n\t\t\t\tif (typeof value === \"string\" && !rnoInnerhtml.test(value) &&\n\t\t\t\t\t!wrapMap[(rtagName.exec(value) || [\"\", \"\"])[1].toLowerCase()]) {\n\n\t\t\t\t\tvalue = jQuery.htmlPrefilter(value);\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tfor (; i < l; i++) {\n\t\t\t\t\t\t\telem = this[i] || {};\n\n\t\t\t\t\t\t\t// Remove element nodes and prevent memory leaks\n\t\t\t\t\t\t\tif (elem.nodeType === 1) {\n\t\t\t\t\t\t\t\tjQuery.cleanData(getAll(elem, false));\n\t\t\t\t\t\t\t\telem.innerHTML = value;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\telem = 0;\n\n\t\t\t\t\t\t// If using innerHTML throws an exception, use the fallback method\n\t\t\t\t\t} catch (e) { }\n\t\t\t\t}\n\n\t\t\t\tif (elem) {\n\t\t\t\t\tthis.empty().append(value);\n\t\t\t\t}\n\t\t\t}, null, value, arguments.length);\n\t\t},\n\n\t\treplaceWith: function () {\n\t\t\tvar ignored = [];\n\n\t\t\t// Make the changes, replacing each non-ignored context element with the new content\n\t\t\treturn domManip(this, arguments, function (elem) {\n\t\t\t\tvar parent = this.parentNode;\n\n\t\t\t\tif (jQuery.inArray(this, ignored) < 0) {\n\t\t\t\t\tjQuery.cleanData(getAll(this));\n\t\t\t\t\tif (parent) {\n\t\t\t\t\t\tparent.replaceChild(elem, this);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Force callback invocation\n\t\t\t}, ignored);\n\t\t}\n\t});\n\n\tjQuery.each({\n\t\tappendTo: \"append\",\n\t\tprependTo: \"prepend\",\n\t\tinsertBefore: \"before\",\n\t\tinsertAfter: \"after\",\n\t\treplaceAll: \"replaceWith\"\n\t}, function (name, original) {\n\t\tjQuery.fn[name] = function (selector) {\n\t\t\tvar elems,\n\t\t\t\tret = [],\n\t\t\t\tinsert = jQuery(selector),\n\t\t\t\tlast = insert.length - 1,\n\t\t\t\ti = 0;\n\n\t\t\tfor (; i <= last; i++) {\n\t\t\t\telems = i === last ? this : this.clone(true);\n\t\t\t\tjQuery(insert[i])[original](elems);\n\n\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t// .get() because push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\tpush.apply(ret, elems.get());\n\t\t\t}\n\n\t\t\treturn this.pushStack(ret);\n\t\t};\n\t});\n\tvar rnumnonpx = new RegExp(\"^(\" + pnum + \")(?!px)[a-z%]+$\", \"i\");\n\n\tvar rcustomProp = /^--/;\n\n\n\tvar getStyles = function (elem) {\n\n\t\t// Support: IE <=11 only, Firefox <=30 (trac-15098, trac-14150)\n\t\t// IE throws on elements created in popups\n\t\t// FF meanwhile throws on frame elements through \"defaultView.getComputedStyle\"\n\t\tvar view = elem.ownerDocument.defaultView;\n\n\t\tif (!view || !view.opener) {\n\t\t\tview = window;\n\t\t}\n\n\t\treturn view.getComputedStyle(elem);\n\t};\n\n\tvar swap = function (elem, options, callback) {\n\t\tvar ret, name,\n\t\t\told = {};\n\n\t\t// Remember the old values, and insert the new ones\n\t\tfor (name in options) {\n\t\t\told[name] = elem.style[name];\n\t\t\telem.style[name] = options[name];\n\t\t}\n\n\t\tret = callback.call(elem);\n\n\t\t// Revert the old values\n\t\tfor (name in options) {\n\t\t\telem.style[name] = old[name];\n\t\t}\n\n\t\treturn ret;\n\t};\n\n\n\tvar rboxStyle = new RegExp(cssExpand.join(\"|\"), \"i\");\n\n\n\n\t(function () {\n\n\t\t// Executing both pixelPosition & boxSizingReliable tests require only one layout\n\t\t// so they're executed at the same time to save the second computation.\n\t\tfunction computeStyleTests() {\n\n\t\t\t// This is a singleton, we need to execute it only once\n\t\t\tif (!div) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tcontainer.style.cssText = \"position:absolute;left:-11111px;width:60px;\" +\n\t\t\t\t\"margin-top:1px;padding:0;border:0\";\n\t\t\tdiv.style.cssText =\n\t\t\t\t\"position:relative;display:block;box-sizing:border-box;overflow:scroll;\" +\n\t\t\t\t\"margin:auto;border:1px;padding:1px;\" +\n\t\t\t\t\"width:60%;top:1%\";\n\t\t\tdocumentElement.appendChild(container).appendChild(div);\n\n\t\t\tvar divStyle = window.getComputedStyle(div);\n\t\t\tpixelPositionVal = divStyle.top !== \"1%\";\n\n\t\t\t// Support: Android 4.0 - 4.3 only, Firefox <=3 - 44\n\t\t\treliableMarginLeftVal = roundPixelMeasures(divStyle.marginLeft) === 12;\n\n\t\t\t// Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3\n\t\t\t// Some styles come back with percentage values, even though they shouldn't\n\t\t\tdiv.style.right = \"60%\";\n\t\t\tpixelBoxStylesVal = roundPixelMeasures(divStyle.right) === 36;\n\n\t\t\t// Support: IE 9 - 11 only\n\t\t\t// Detect misreporting of content dimensions for box-sizing:border-box elements\n\t\t\tboxSizingReliableVal = roundPixelMeasures(divStyle.width) === 36;\n\n\t\t\t// Support: IE 9 only\n\t\t\t// Detect overflow:scroll screwiness (gh-3699)\n\t\t\t// Support: Chrome <=64\n\t\t\t// Don't get tricked when zoom affects offsetWidth (gh-4029)\n\t\t\tdiv.style.position = \"absolute\";\n\t\t\tscrollboxSizeVal = roundPixelMeasures(div.offsetWidth / 3) === 12;\n\n\t\t\tdocumentElement.removeChild(container);\n\n\t\t\t// Nullify the div so it wouldn't be stored in the memory and\n\t\t\t// it will also be a sign that checks already performed\n\t\t\tdiv = null;\n\t\t}\n\n\t\tfunction roundPixelMeasures(measure) {\n\t\t\treturn Math.round(parseFloat(measure));\n\t\t}\n\n\t\tvar pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal,\n\t\t\treliableTrDimensionsVal, reliableMarginLeftVal,\n\t\t\tcontainer = document.createElement(\"div\"),\n\t\t\tdiv = document.createElement(\"div\");\n\n\t\t// Finish early in limited (non-browser) environments\n\t\tif (!div.style) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Support: IE <=9 - 11 only\n\t\t// Style of cloned element affects source element cloned (trac-8908)\n\t\tdiv.style.backgroundClip = \"content-box\";\n\t\tdiv.cloneNode(true).style.backgroundClip = \"\";\n\t\tsupport.clearCloneStyle = div.style.backgroundClip === \"content-box\";\n\n\t\tjQuery.extend(support, {\n\t\t\tboxSizingReliable: function () {\n\t\t\t\tcomputeStyleTests();\n\t\t\t\treturn boxSizingReliableVal;\n\t\t\t},\n\t\t\tpixelBoxStyles: function () {\n\t\t\t\tcomputeStyleTests();\n\t\t\t\treturn pixelBoxStylesVal;\n\t\t\t},\n\t\t\tpixelPosition: function () {\n\t\t\t\tcomputeStyleTests();\n\t\t\t\treturn pixelPositionVal;\n\t\t\t},\n\t\t\treliableMarginLeft: function () {\n\t\t\t\tcomputeStyleTests();\n\t\t\t\treturn reliableMarginLeftVal;\n\t\t\t},\n\t\t\tscrollboxSize: function () {\n\t\t\t\tcomputeStyleTests();\n\t\t\t\treturn scrollboxSizeVal;\n\t\t\t},\n\n\t\t\t// Support: IE 9 - 11+, Edge 15 - 18+\n\t\t\t// IE/Edge misreport `getComputedStyle` of table rows with width/height\n\t\t\t// set in CSS while `offset*` properties report correct values.\n\t\t\t// Behavior in IE 9 is more subtle than in newer versions & it passes\n\t\t\t// some versions of this test; make sure not to make it pass there!\n\t\t\t//\n\t\t\t// Support: Firefox 70+\n\t\t\t// Only Firefox includes border widths\n\t\t\t// in computed dimensions. (gh-4529)\n\t\t\treliableTrDimensions: function () {\n\t\t\t\tvar table, tr, trChild, trStyle;\n\t\t\t\tif (reliableTrDimensionsVal == null) {\n\t\t\t\t\ttable = document.createElement(\"table\");\n\t\t\t\t\ttr = document.createElement(\"tr\");\n\t\t\t\t\ttrChild = document.createElement(\"div\");\n\n\t\t\t\t\ttable.style.cssText = \"position:absolute;left:-11111px;border-collapse:separate\";\n\t\t\t\t\ttr.style.cssText = \"border:1px solid\";\n\n\t\t\t\t\t// Support: Chrome 86+\n\t\t\t\t\t// Height set through cssText does not get applied.\n\t\t\t\t\t// Computed height then comes back as 0.\n\t\t\t\t\ttr.style.height = \"1px\";\n\t\t\t\t\ttrChild.style.height = \"9px\";\n\n\t\t\t\t\t// Support: Android 8 Chrome 86+\n\t\t\t\t\t// In our bodyBackground.html iframe,\n\t\t\t\t\t// display for all div elements is set to \"inline\",\n\t\t\t\t\t// which causes a problem only in Android 8 Chrome 86.\n\t\t\t\t\t// Ensuring the div is display: block\n\t\t\t\t\t// gets around this issue.\n\t\t\t\t\ttrChild.style.display = \"block\";\n\n\t\t\t\t\tdocumentElement\n\t\t\t\t\t\t.appendChild(table)\n\t\t\t\t\t\t.appendChild(tr)\n\t\t\t\t\t\t.appendChild(trChild);\n\n\t\t\t\t\ttrStyle = window.getComputedStyle(tr);\n\t\t\t\t\treliableTrDimensionsVal = (parseInt(trStyle.height, 10) +\n\t\t\t\t\t\tparseInt(trStyle.borderTopWidth, 10) +\n\t\t\t\t\t\tparseInt(trStyle.borderBottomWidth, 10)) === tr.offsetHeight;\n\n\t\t\t\t\tdocumentElement.removeChild(table);\n\t\t\t\t}\n\t\t\t\treturn reliableTrDimensionsVal;\n\t\t\t}\n\t\t});\n\t})();\n\n\n\tfunction curCSS(elem, name, computed) {\n\t\tvar width, minWidth, maxWidth, ret,\n\t\t\tisCustomProp = rcustomProp.test(name),\n\n\t\t\t// Support: Firefox 51+\n\t\t\t// Retrieving style before computed somehow\n\t\t\t// fixes an issue with getting wrong values\n\t\t\t// on detached elements\n\t\t\tstyle = elem.style;\n\n\t\tcomputed = computed || getStyles(elem);\n\n\t\t// getPropertyValue is needed for:\n\t\t//   .css('filter') (IE 9 only, trac-12537)\n\t\t//   .css('--customProperty) (gh-3144)\n\t\tif (computed) {\n\n\t\t\t// Support: IE <=9 - 11+\n\t\t\t// IE only supports `\"float\"` in `getPropertyValue`; in computed styles\n\t\t\t// it's only available as `\"cssFloat\"`. We no longer modify properties\n\t\t\t// sent to `.css()` apart from camelCasing, so we need to check both.\n\t\t\t// Normally, this would create difference in behavior: if\n\t\t\t// `getPropertyValue` returns an empty string, the value returned\n\t\t\t// by `.css()` would be `undefined`. This is usually the case for\n\t\t\t// disconnected elements. However, in IE even disconnected elements\n\t\t\t// with no styles return `\"none\"` for `getPropertyValue( \"float\" )`\n\t\t\tret = computed.getPropertyValue(name) || computed[name];\n\n\t\t\tif (isCustomProp && ret) {\n\n\t\t\t\t// Support: Firefox 105+, Chrome <=105+\n\t\t\t\t// Spec requires trimming whitespace for custom properties (gh-4926).\n\t\t\t\t// Firefox only trims leading whitespace. Chrome just collapses\n\t\t\t\t// both leading & trailing whitespace to a single space.\n\t\t\t\t//\n\t\t\t\t// Fall back to `undefined` if empty string returned.\n\t\t\t\t// This collapses a missing definition with property defined\n\t\t\t\t// and set to an empty string but there's no standard API\n\t\t\t\t// allowing us to differentiate them without a performance penalty\n\t\t\t\t// and returning `undefined` aligns with older jQuery.\n\t\t\t\t//\n\t\t\t\t// rtrimCSS treats U+000D CARRIAGE RETURN and U+000C FORM FEED\n\t\t\t\t// as whitespace while CSS does not, but this is not a problem\n\t\t\t\t// because CSS preprocessing replaces them with U+000A LINE FEED\n\t\t\t\t// (which *is* CSS whitespace)\n\t\t\t\t// https://www.w3.org/TR/css-syntax-3/#input-preprocessing\n\t\t\t\tret = ret.replace(rtrimCSS, \"$1\") || undefined;\n\t\t\t}\n\n\t\t\tif (ret === \"\" && !isAttached(elem)) {\n\t\t\t\tret = jQuery.style(elem, name);\n\t\t\t}\n\n\t\t\t// A tribute to the \"awesome hack by Dean Edwards\"\n\t\t\t// Android Browser returns percentage for some values,\n\t\t\t// but width seems to be reliably pixels.\n\t\t\t// This is against the CSSOM draft spec:\n\t\t\t// https://drafts.csswg.org/cssom/#resolved-values\n\t\t\tif (!support.pixelBoxStyles() && rnumnonpx.test(ret) && rboxStyle.test(name)) {\n\n\t\t\t\t// Remember the original values\n\t\t\t\twidth = style.width;\n\t\t\t\tminWidth = style.minWidth;\n\t\t\t\tmaxWidth = style.maxWidth;\n\n\t\t\t\t// Put in the new values to get a computed value out\n\t\t\t\tstyle.minWidth = style.maxWidth = style.width = ret;\n\t\t\t\tret = computed.width;\n\n\t\t\t\t// Revert the changed values\n\t\t\t\tstyle.width = width;\n\t\t\t\tstyle.minWidth = minWidth;\n\t\t\t\tstyle.maxWidth = maxWidth;\n\t\t\t}\n\t\t}\n\n\t\treturn ret !== undefined ?\n\n\t\t\t// Support: IE <=9 - 11 only\n\t\t\t// IE returns zIndex value as an integer.\n\t\t\tret + \"\" :\n\t\t\tret;\n\t}\n\n\n\tfunction addGetHookIf(conditionFn, hookFn) {\n\n\t\t// Define the hook, we'll check on the first run if it's really needed.\n\t\treturn {\n\t\t\tget: function () {\n\t\t\t\tif (conditionFn()) {\n\n\t\t\t\t\t// Hook not needed (or it's not possible to use it due\n\t\t\t\t\t// to missing dependency), remove it.\n\t\t\t\t\tdelete this.get;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Hook needed; redefine it so that the support test is not executed again.\n\t\t\t\treturn (this.get = hookFn).apply(this, arguments);\n\t\t\t}\n\t\t};\n\t}\n\n\n\tvar cssPrefixes = [\"Webkit\", \"Moz\", \"ms\"],\n\t\temptyStyle = document.createElement(\"div\").style,\n\t\tvendorProps = {};\n\n\t// Return a vendor-prefixed property or undefined\n\tfunction vendorPropName(name) {\n\n\t\t// Check for vendor prefixed names\n\t\tvar capName = name[0].toUpperCase() + name.slice(1),\n\t\t\ti = cssPrefixes.length;\n\n\t\twhile (i--) {\n\t\t\tname = cssPrefixes[i] + capName;\n\t\t\tif (name in emptyStyle) {\n\t\t\t\treturn name;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return a potentially-mapped jQuery.cssProps or vendor prefixed property\n\tfunction finalPropName(name) {\n\t\tvar final = jQuery.cssProps[name] || vendorProps[name];\n\n\t\tif (final) {\n\t\t\treturn final;\n\t\t}\n\t\tif (name in emptyStyle) {\n\t\t\treturn name;\n\t\t}\n\t\treturn vendorProps[name] = vendorPropName(name) || name;\n\t}\n\n\n\tvar\n\n\t\t// Swappable if display is none or starts with table\n\t\t// except \"table\", \"table-cell\", or \"table-caption\"\n\t\t// See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display\n\t\trdisplayswap = /^(none|table(?!-c[ea]).+)/,\n\t\tcssShow = { position: \"absolute\", visibility: \"hidden\", display: \"block\" },\n\t\tcssNormalTransform = {\n\t\t\tletterSpacing: \"0\",\n\t\t\tfontWeight: \"400\"\n\t\t};\n\n\tfunction setPositiveNumber(_elem, value, subtract) {\n\n\t\t// Any relative (+/-) values have already been\n\t\t// normalized at this point\n\t\tvar matches = rcssNum.exec(value);\n\t\treturn matches ?\n\n\t\t\t// Guard against undefined \"subtract\", e.g., when used as in cssHooks\n\t\t\tMath.max(0, matches[2] - (subtract || 0)) + (matches[3] || \"px\") :\n\t\t\tvalue;\n\t}\n\n\tfunction boxModelAdjustment(elem, dimension, box, isBorderBox, styles, computedVal) {\n\t\tvar i = dimension === \"width\" ? 1 : 0,\n\t\t\textra = 0,\n\t\t\tdelta = 0,\n\t\t\tmarginDelta = 0;\n\n\t\t// Adjustment may not be necessary\n\t\tif (box === (isBorderBox ? \"border\" : \"content\")) {\n\t\t\treturn 0;\n\t\t}\n\n\t\tfor (; i < 4; i += 2) {\n\n\t\t\t// Both box models exclude margin\n\t\t\t// Count margin delta separately to only add it after scroll gutter adjustment.\n\t\t\t// This is needed to make negative margins work with `outerHeight( true )` (gh-3982).\n\t\t\tif (box === \"margin\") {\n\t\t\t\tmarginDelta += jQuery.css(elem, box + cssExpand[i], true, styles);\n\t\t\t}\n\n\t\t\t// If we get here with a content-box, we're seeking \"padding\" or \"border\" or \"margin\"\n\t\t\tif (!isBorderBox) {\n\n\t\t\t\t// Add padding\n\t\t\t\tdelta += jQuery.css(elem, \"padding\" + cssExpand[i], true, styles);\n\n\t\t\t\t// For \"border\" or \"margin\", add border\n\t\t\t\tif (box !== \"padding\") {\n\t\t\t\t\tdelta += jQuery.css(elem, \"border\" + cssExpand[i] + \"Width\", true, styles);\n\n\t\t\t\t\t// But still keep track of it otherwise\n\t\t\t\t} else {\n\t\t\t\t\textra += jQuery.css(elem, \"border\" + cssExpand[i] + \"Width\", true, styles);\n\t\t\t\t}\n\n\t\t\t\t// If we get here with a border-box (content + padding + border), we're seeking \"content\" or\n\t\t\t\t// \"padding\" or \"margin\"\n\t\t\t} else {\n\n\t\t\t\t// For \"content\", subtract padding\n\t\t\t\tif (box === \"content\") {\n\t\t\t\t\tdelta -= jQuery.css(elem, \"padding\" + cssExpand[i], true, styles);\n\t\t\t\t}\n\n\t\t\t\t// For \"content\" or \"padding\", subtract border\n\t\t\t\tif (box !== \"margin\") {\n\t\t\t\t\tdelta -= jQuery.css(elem, \"border\" + cssExpand[i] + \"Width\", true, styles);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Account for positive content-box scroll gutter when requested by providing computedVal\n\t\tif (!isBorderBox && computedVal >= 0) {\n\n\t\t\t// offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border\n\t\t\t// Assuming integer scroll gutter, subtract the rest and round down\n\t\t\tdelta += Math.max(0, Math.ceil(\n\t\t\t\telem[\"offset\" + dimension[0].toUpperCase() + dimension.slice(1)] -\n\t\t\t\tcomputedVal -\n\t\t\t\tdelta -\n\t\t\t\textra -\n\t\t\t\t0.5\n\n\t\t\t\t// If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter\n\t\t\t\t// Use an explicit zero to avoid NaN (gh-3964)\n\t\t\t)) || 0;\n\t\t}\n\n\t\treturn delta + marginDelta;\n\t}\n\n\tfunction getWidthOrHeight(elem, dimension, extra) {\n\n\t\t// Start with computed style\n\t\tvar styles = getStyles(elem),\n\n\t\t\t// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322).\n\t\t\t// Fake content-box until we know it's needed to know the true value.\n\t\t\tboxSizingNeeded = !support.boxSizingReliable() || extra,\n\t\t\tisBorderBox = boxSizingNeeded &&\n\t\t\t\tjQuery.css(elem, \"boxSizing\", false, styles) === \"border-box\",\n\t\t\tvalueIsBorderBox = isBorderBox,\n\n\t\t\tval = curCSS(elem, dimension, styles),\n\t\t\toffsetProp = \"offset\" + dimension[0].toUpperCase() + dimension.slice(1);\n\n\t\t// Support: Firefox <=54\n\t\t// Return a confounding non-pixel value or feign ignorance, as appropriate.\n\t\tif (rnumnonpx.test(val)) {\n\t\t\tif (!extra) {\n\t\t\t\treturn val;\n\t\t\t}\n\t\t\tval = \"auto\";\n\t\t}\n\n\n\t\t// Support: IE 9 - 11 only\n\t\t// Use offsetWidth/offsetHeight for when box sizing is unreliable.\n\t\t// In those cases, the computed value can be trusted to be border-box.\n\t\tif ((!support.boxSizingReliable() && isBorderBox ||\n\n\t\t\t// Support: IE 10 - 11+, Edge 15 - 18+\n\t\t\t// IE/Edge misreport `getComputedStyle` of table rows with width/height\n\t\t\t// set in CSS while `offset*` properties report correct values.\n\t\t\t// Interestingly, in some cases IE 9 doesn't suffer from this issue.\n\t\t\t!support.reliableTrDimensions() && nodeName(elem, \"tr\") ||\n\n\t\t\t// Fall back to offsetWidth/offsetHeight when value is \"auto\"\n\t\t\t// This happens for inline elements with no explicit setting (gh-3571)\n\t\t\tval === \"auto\" ||\n\n\t\t\t// Support: Android <=4.1 - 4.3 only\n\t\t\t// Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602)\n\t\t\t!parseFloat(val) && jQuery.css(elem, \"display\", false, styles) === \"inline\") &&\n\n\t\t\t// Make sure the element is visible & connected\n\t\t\telem.getClientRects().length) {\n\n\t\t\tisBorderBox = jQuery.css(elem, \"boxSizing\", false, styles) === \"border-box\";\n\n\t\t\t// Where available, offsetWidth/offsetHeight approximate border box dimensions.\n\t\t\t// Where not available (e.g., SVG), assume unreliable box-sizing and interpret the\n\t\t\t// retrieved value as a content box dimension.\n\t\t\tvalueIsBorderBox = offsetProp in elem;\n\t\t\tif (valueIsBorderBox) {\n\t\t\t\tval = elem[offsetProp];\n\t\t\t}\n\t\t}\n\n\t\t// Normalize \"\" and auto\n\t\tval = parseFloat(val) || 0;\n\n\t\t// Adjust for the element's box model\n\t\treturn (val +\n\t\t\tboxModelAdjustment(\n\t\t\t\telem,\n\t\t\t\tdimension,\n\t\t\t\textra || (isBorderBox ? \"border\" : \"content\"),\n\t\t\t\tvalueIsBorderBox,\n\t\t\t\tstyles,\n\n\t\t\t\t// Provide the current computed size to request scroll gutter calculation (gh-3589)\n\t\t\t\tval\n\t\t\t)\n\t\t) + \"px\";\n\t}\n\n\tjQuery.extend({\n\n\t\t// Add in style property hooks for overriding the default\n\t\t// behavior of getting and setting a style property\n\t\tcssHooks: {\n\t\t\topacity: {\n\t\t\t\tget: function (elem, computed) {\n\t\t\t\t\tif (computed) {\n\n\t\t\t\t\t\t// We should always get a number back from opacity\n\t\t\t\t\t\tvar ret = curCSS(elem, \"opacity\");\n\t\t\t\t\t\treturn ret === \"\" ? \"1\" : ret;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t// Don't automatically add \"px\" to these possibly-unitless properties\n\t\tcssNumber: {\n\t\t\tanimationIterationCount: true,\n\t\t\taspectRatio: true,\n\t\t\tborderImageSlice: true,\n\t\t\tcolumnCount: true,\n\t\t\tflexGrow: true,\n\t\t\tflexShrink: true,\n\t\t\tfontWeight: true,\n\t\t\tgridArea: true,\n\t\t\tgridColumn: true,\n\t\t\tgridColumnEnd: true,\n\t\t\tgridColumnStart: true,\n\t\t\tgridRow: true,\n\t\t\tgridRowEnd: true,\n\t\t\tgridRowStart: true,\n\t\t\tlineHeight: true,\n\t\t\topacity: true,\n\t\t\torder: true,\n\t\t\torphans: true,\n\t\t\tscale: true,\n\t\t\twidows: true,\n\t\t\tzIndex: true,\n\t\t\tzoom: true,\n\n\t\t\t// SVG-related\n\t\t\tfillOpacity: true,\n\t\t\tfloodOpacity: true,\n\t\t\tstopOpacity: true,\n\t\t\tstrokeMiterlimit: true,\n\t\t\tstrokeOpacity: true\n\t\t},\n\n\t\t// Add in properties whose names you wish to fix before\n\t\t// setting or getting the value\n\t\tcssProps: {},\n\n\t\t// Get and set the style property on a DOM Node\n\t\tstyle: function (elem, name, value, extra) {\n\n\t\t\t// Don't set styles on text and comment nodes\n\t\t\tif (!elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Make sure that we're working with the right name\n\t\t\tvar ret, type, hooks,\n\t\t\t\torigName = camelCase(name),\n\t\t\t\tisCustomProp = rcustomProp.test(name),\n\t\t\t\tstyle = elem.style;\n\n\t\t\t// Make sure that we're working with the right name. We don't\n\t\t\t// want to query the value if it is a CSS custom property\n\t\t\t// since they are user-defined.\n\t\t\tif (!isCustomProp) {\n\t\t\t\tname = finalPropName(origName);\n\t\t\t}\n\n\t\t\t// Gets hook for the prefixed version, then unprefixed version\n\t\t\thooks = jQuery.cssHooks[name] || jQuery.cssHooks[origName];\n\n\t\t\t// Check if we're setting a value\n\t\t\tif (value !== undefined) {\n\t\t\t\ttype = typeof value;\n\n\t\t\t\t// Convert \"+=\" or \"-=\" to relative numbers (trac-7345)\n\t\t\t\tif (type === \"string\" && (ret = rcssNum.exec(value)) && ret[1]) {\n\t\t\t\t\tvalue = adjustCSS(elem, name, ret);\n\n\t\t\t\t\t// Fixes bug trac-9237\n\t\t\t\t\ttype = \"number\";\n\t\t\t\t}\n\n\t\t\t\t// Make sure that null and NaN values aren't set (trac-7116)\n\t\t\t\tif (value == null || value !== value) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// If a number was passed in, add the unit (except for certain CSS properties)\n\t\t\t\t// The isCustomProp check can be removed in jQuery 4.0 when we only auto-append\n\t\t\t\t// \"px\" to a few hardcoded values.\n\t\t\t\tif (type === \"number\" && !isCustomProp) {\n\t\t\t\t\tvalue += ret && ret[3] || (jQuery.cssNumber[origName] ? \"\" : \"px\");\n\t\t\t\t}\n\n\t\t\t\t// background-* props affect original clone's values\n\t\t\t\tif (!support.clearCloneStyle && value === \"\" && name.indexOf(\"background\") === 0) {\n\t\t\t\t\tstyle[name] = \"inherit\";\n\t\t\t\t}\n\n\t\t\t\t// If a hook was provided, use that value, otherwise just set the specified value\n\t\t\t\tif (!hooks || !(\"set\" in hooks) ||\n\t\t\t\t\t(value = hooks.set(elem, value, extra)) !== undefined) {\n\n\t\t\t\t\tif (isCustomProp) {\n\t\t\t\t\t\tstyle.setProperty(name, value);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tstyle[name] = value;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\t// If a hook was provided get the non-computed value from there\n\t\t\t\tif (hooks && \"get\" in hooks &&\n\t\t\t\t\t(ret = hooks.get(elem, false, extra)) !== undefined) {\n\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\n\t\t\t\t// Otherwise just get the value from the style object\n\t\t\t\treturn style[name];\n\t\t\t}\n\t\t},\n\n\t\tcss: function (elem, name, extra, styles) {\n\t\t\tvar val, num, hooks,\n\t\t\t\torigName = camelCase(name),\n\t\t\t\tisCustomProp = rcustomProp.test(name);\n\n\t\t\t// Make sure that we're working with the right name. We don't\n\t\t\t// want to modify the value if it is a CSS custom property\n\t\t\t// since they are user-defined.\n\t\t\tif (!isCustomProp) {\n\t\t\t\tname = finalPropName(origName);\n\t\t\t}\n\n\t\t\t// Try prefixed name followed by the unprefixed name\n\t\t\thooks = jQuery.cssHooks[name] || jQuery.cssHooks[origName];\n\n\t\t\t// If a hook was provided get the computed value from there\n\t\t\tif (hooks && \"get\" in hooks) {\n\t\t\t\tval = hooks.get(elem, true, extra);\n\t\t\t}\n\n\t\t\t// Otherwise, if a way to get the computed value exists, use that\n\t\t\tif (val === undefined) {\n\t\t\t\tval = curCSS(elem, name, styles);\n\t\t\t}\n\n\t\t\t// Convert \"normal\" to computed value\n\t\t\tif (val === \"normal\" && name in cssNormalTransform) {\n\t\t\t\tval = cssNormalTransform[name];\n\t\t\t}\n\n\t\t\t// Make numeric if forced or a qualifier was provided and val looks numeric\n\t\t\tif (extra === \"\" || extra) {\n\t\t\t\tnum = parseFloat(val);\n\t\t\t\treturn extra === true || isFinite(num) ? num || 0 : val;\n\t\t\t}\n\n\t\t\treturn val;\n\t\t}\n\t});\n\n\tjQuery.each([\"height\", \"width\"], function (_i, dimension) {\n\t\tjQuery.cssHooks[dimension] = {\n\t\t\tget: function (elem, computed, extra) {\n\t\t\t\tif (computed) {\n\n\t\t\t\t\t// Certain elements can have dimension info if we invisibly show them\n\t\t\t\t\t// but it must have a current display style that would benefit\n\t\t\t\t\treturn rdisplayswap.test(jQuery.css(elem, \"display\")) &&\n\n\t\t\t\t\t\t// Support: Safari 8+\n\t\t\t\t\t\t// Table columns in Safari have non-zero offsetWidth & zero\n\t\t\t\t\t\t// getBoundingClientRect().width unless display is changed.\n\t\t\t\t\t\t// Support: IE <=11 only\n\t\t\t\t\t\t// Running getBoundingClientRect on a disconnected node\n\t\t\t\t\t\t// in IE throws an error.\n\t\t\t\t\t\t(!elem.getClientRects().length || !elem.getBoundingClientRect().width) ?\n\t\t\t\t\t\tswap(elem, cssShow, function () {\n\t\t\t\t\t\t\treturn getWidthOrHeight(elem, dimension, extra);\n\t\t\t\t\t\t}) :\n\t\t\t\t\t\tgetWidthOrHeight(elem, dimension, extra);\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tset: function (elem, value, extra) {\n\t\t\t\tvar matches,\n\t\t\t\t\tstyles = getStyles(elem),\n\n\t\t\t\t\t// Only read styles.position if the test has a chance to fail\n\t\t\t\t\t// to avoid forcing a reflow.\n\t\t\t\t\tscrollboxSizeBuggy = !support.scrollboxSize() &&\n\t\t\t\t\t\tstyles.position === \"absolute\",\n\n\t\t\t\t\t// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991)\n\t\t\t\t\tboxSizingNeeded = scrollboxSizeBuggy || extra,\n\t\t\t\t\tisBorderBox = boxSizingNeeded &&\n\t\t\t\t\t\tjQuery.css(elem, \"boxSizing\", false, styles) === \"border-box\",\n\t\t\t\t\tsubtract = extra ?\n\t\t\t\t\t\tboxModelAdjustment(\n\t\t\t\t\t\t\telem,\n\t\t\t\t\t\t\tdimension,\n\t\t\t\t\t\t\textra,\n\t\t\t\t\t\t\tisBorderBox,\n\t\t\t\t\t\t\tstyles\n\t\t\t\t\t\t) :\n\t\t\t\t\t\t0;\n\n\t\t\t\t// Account for unreliable border-box dimensions by comparing offset* to computed and\n\t\t\t\t// faking a content-box to get border and padding (gh-3699)\n\t\t\t\tif (isBorderBox && scrollboxSizeBuggy) {\n\t\t\t\t\tsubtract -= Math.ceil(\n\t\t\t\t\t\telem[\"offset\" + dimension[0].toUpperCase() + dimension.slice(1)] -\n\t\t\t\t\t\tparseFloat(styles[dimension]) -\n\t\t\t\t\t\tboxModelAdjustment(elem, dimension, \"border\", false, styles) -\n\t\t\t\t\t\t0.5\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\t// Convert to pixels if value adjustment is needed\n\t\t\t\tif (subtract && (matches = rcssNum.exec(value)) &&\n\t\t\t\t\t(matches[3] || \"px\") !== \"px\") {\n\n\t\t\t\t\telem.style[dimension] = value;\n\t\t\t\t\tvalue = jQuery.css(elem, dimension);\n\t\t\t\t}\n\n\t\t\t\treturn setPositiveNumber(elem, value, subtract);\n\t\t\t}\n\t\t};\n\t});\n\n\tjQuery.cssHooks.marginLeft = addGetHookIf(support.reliableMarginLeft,\n\t\tfunction (elem, computed) {\n\t\t\tif (computed) {\n\t\t\t\treturn (parseFloat(curCSS(elem, \"marginLeft\")) ||\n\t\t\t\t\telem.getBoundingClientRect().left -\n\t\t\t\t\tswap(elem, { marginLeft: 0 }, function () {\n\t\t\t\t\t\treturn elem.getBoundingClientRect().left;\n\t\t\t\t\t})\n\t\t\t\t) + \"px\";\n\t\t\t}\n\t\t}\n\t);\n\n\t// These hooks are used by animate to expand properties\n\tjQuery.each({\n\t\tmargin: \"\",\n\t\tpadding: \"\",\n\t\tborder: \"Width\"\n\t}, function (prefix, suffix) {\n\t\tjQuery.cssHooks[prefix + suffix] = {\n\t\t\texpand: function (value) {\n\t\t\t\tvar i = 0,\n\t\t\t\t\texpanded = {},\n\n\t\t\t\t\t// Assumes a single number if not a string\n\t\t\t\t\tparts = typeof value === \"string\" ? value.split(\" \") : [value];\n\n\t\t\t\tfor (; i < 4; i++) {\n\t\t\t\t\texpanded[prefix + cssExpand[i] + suffix] =\n\t\t\t\t\t\tparts[i] || parts[i - 2] || parts[0];\n\t\t\t\t}\n\n\t\t\t\treturn expanded;\n\t\t\t}\n\t\t};\n\n\t\tif (prefix !== \"margin\") {\n\t\t\tjQuery.cssHooks[prefix + suffix].set = setPositiveNumber;\n\t\t}\n\t});\n\n\tjQuery.fn.extend({\n\t\tcss: function (name, value) {\n\t\t\treturn access(this, function (elem, name, value) {\n\t\t\t\tvar styles, len,\n\t\t\t\t\tmap = {},\n\t\t\t\t\ti = 0;\n\n\t\t\t\tif (Array.isArray(name)) {\n\t\t\t\t\tstyles = getStyles(elem);\n\t\t\t\t\tlen = name.length;\n\n\t\t\t\t\tfor (; i < len; i++) {\n\t\t\t\t\t\tmap[name[i]] = jQuery.css(elem, name[i], false, styles);\n\t\t\t\t\t}\n\n\t\t\t\t\treturn map;\n\t\t\t\t}\n\n\t\t\t\treturn value !== undefined ?\n\t\t\t\t\tjQuery.style(elem, name, value) :\n\t\t\t\t\tjQuery.css(elem, name);\n\t\t\t}, name, value, arguments.length > 1);\n\t\t}\n\t});\n\n\n\tfunction Tween(elem, options, prop, end, easing) {\n\t\treturn new Tween.prototype.init(elem, options, prop, end, easing);\n\t}\n\tjQuery.Tween = Tween;\n\n\tTween.prototype = {\n\t\tconstructor: Tween,\n\t\tinit: function (elem, options, prop, end, easing, unit) {\n\t\t\tthis.elem = elem;\n\t\t\tthis.prop = prop;\n\t\t\tthis.easing = easing || jQuery.easing._default;\n\t\t\tthis.options = options;\n\t\t\tthis.start = this.now = this.cur();\n\t\t\tthis.end = end;\n\t\t\tthis.unit = unit || (jQuery.cssNumber[prop] ? \"\" : \"px\");\n\t\t},\n\t\tcur: function () {\n\t\t\tvar hooks = Tween.propHooks[this.prop];\n\n\t\t\treturn hooks && hooks.get ?\n\t\t\t\thooks.get(this) :\n\t\t\t\tTween.propHooks._default.get(this);\n\t\t},\n\t\trun: function (percent) {\n\t\t\tvar eased,\n\t\t\t\thooks = Tween.propHooks[this.prop];\n\n\t\t\tif (this.options.duration) {\n\t\t\t\tthis.pos = eased = jQuery.easing[this.easing](\n\t\t\t\t\tpercent, this.options.duration * percent, 0, 1, this.options.duration\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tthis.pos = eased = percent;\n\t\t\t}\n\t\t\tthis.now = (this.end - this.start) * eased + this.start;\n\n\t\t\tif (this.options.step) {\n\t\t\t\tthis.options.step.call(this.elem, this.now, this);\n\t\t\t}\n\n\t\t\tif (hooks && hooks.set) {\n\t\t\t\thooks.set(this);\n\t\t\t} else {\n\t\t\t\tTween.propHooks._default.set(this);\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t};\n\n\tTween.prototype.init.prototype = Tween.prototype;\n\n\tTween.propHooks = {\n\t\t_default: {\n\t\t\tget: function (tween) {\n\t\t\t\tvar result;\n\n\t\t\t\t// Use a property on the element directly when it is not a DOM element,\n\t\t\t\t// or when there is no matching style property that exists.\n\t\t\t\tif (tween.elem.nodeType !== 1 ||\n\t\t\t\t\ttween.elem[tween.prop] != null && tween.elem.style[tween.prop] == null) {\n\t\t\t\t\treturn tween.elem[tween.prop];\n\t\t\t\t}\n\n\t\t\t\t// Passing an empty string as a 3rd parameter to .css will automatically\n\t\t\t\t// attempt a parseFloat and fallback to a string if the parse fails.\n\t\t\t\t// Simple values such as \"10px\" are parsed to Float;\n\t\t\t\t// complex values such as \"rotate(1rad)\" are returned as-is.\n\t\t\t\tresult = jQuery.css(tween.elem, tween.prop, \"\");\n\n\t\t\t\t// Empty strings, null, undefined and \"auto\" are converted to 0.\n\t\t\t\treturn !result || result === \"auto\" ? 0 : result;\n\t\t\t},\n\t\t\tset: function (tween) {\n\n\t\t\t\t// Use step hook for back compat.\n\t\t\t\t// Use cssHook if its there.\n\t\t\t\t// Use .style if available and use plain properties where available.\n\t\t\t\tif (jQuery.fx.step[tween.prop]) {\n\t\t\t\t\tjQuery.fx.step[tween.prop](tween);\n\t\t\t\t} else if (tween.elem.nodeType === 1 && (\n\t\t\t\t\tjQuery.cssHooks[tween.prop] ||\n\t\t\t\t\ttween.elem.style[finalPropName(tween.prop)] != null)) {\n\t\t\t\t\tjQuery.style(tween.elem, tween.prop, tween.now + tween.unit);\n\t\t\t\t} else {\n\t\t\t\t\ttween.elem[tween.prop] = tween.now;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t// Support: IE <=9 only\n\t// Panic based approach to setting things on disconnected nodes\n\tTween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {\n\t\tset: function (tween) {\n\t\t\tif (tween.elem.nodeType && tween.elem.parentNode) {\n\t\t\t\ttween.elem[tween.prop] = tween.now;\n\t\t\t}\n\t\t}\n\t};\n\n\tjQuery.easing = {\n\t\tlinear: function (p) {\n\t\t\treturn p;\n\t\t},\n\t\tswing: function (p) {\n\t\t\treturn 0.5 - Math.cos(p * Math.PI) / 2;\n\t\t},\n\t\t_default: \"swing\"\n\t};\n\n\tjQuery.fx = Tween.prototype.init;\n\n\t// Back compat <1.8 extension point\n\tjQuery.fx.step = {};\n\n\n\n\n\tvar\n\t\tfxNow, inProgress,\n\t\trfxtypes = /^(?:toggle|show|hide)$/,\n\t\trrun = /queueHooks$/;\n\n\tfunction schedule() {\n\t\tif (inProgress) {\n\t\t\tif (document.hidden === false && window.requestAnimationFrame) {\n\t\t\t\twindow.requestAnimationFrame(schedule);\n\t\t\t} else {\n\t\t\t\twindow.setTimeout(schedule, jQuery.fx.interval);\n\t\t\t}\n\n\t\t\tjQuery.fx.tick();\n\t\t}\n\t}\n\n\t// Animations created synchronously will run synchronously\n\tfunction createFxNow() {\n\t\twindow.setTimeout(function () {\n\t\t\tfxNow = undefined;\n\t\t});\n\t\treturn (fxNow = Date.now());\n\t}\n\n\t// Generate parameters to create a standard animation\n\tfunction genFx(type, includeWidth) {\n\t\tvar which,\n\t\t\ti = 0,\n\t\t\tattrs = { height: type };\n\n\t\t// If we include width, step value is 1 to do all cssExpand values,\n\t\t// otherwise step value is 2 to skip over Left and Right\n\t\tincludeWidth = includeWidth ? 1 : 0;\n\t\tfor (; i < 4; i += 2 - includeWidth) {\n\t\t\twhich = cssExpand[i];\n\t\t\tattrs[\"margin\" + which] = attrs[\"padding\" + which] = type;\n\t\t}\n\n\t\tif (includeWidth) {\n\t\t\tattrs.opacity = attrs.width = type;\n\t\t}\n\n\t\treturn attrs;\n\t}\n\n\tfunction createTween(value, prop, animation) {\n\t\tvar tween,\n\t\t\tcollection = (Animation.tweeners[prop] || []).concat(Animation.tweeners[\"*\"]),\n\t\t\tindex = 0,\n\t\t\tlength = collection.length;\n\t\tfor (; index < length; index++) {\n\t\t\tif ((tween = collection[index].call(animation, prop, value))) {\n\n\t\t\t\t// We're done with this property\n\t\t\t\treturn tween;\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction defaultPrefilter(elem, props, opts) {\n\t\tvar prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display,\n\t\t\tisBox = \"width\" in props || \"height\" in props,\n\t\t\tanim = this,\n\t\t\torig = {},\n\t\t\tstyle = elem.style,\n\t\t\thidden = elem.nodeType && isHiddenWithinTree(elem),\n\t\t\tdataShow = dataPriv.get(elem, \"fxshow\");\n\n\t\t// Queue-skipping animations hijack the fx hooks\n\t\tif (!opts.queue) {\n\t\t\thooks = jQuery._queueHooks(elem, \"fx\");\n\t\t\tif (hooks.unqueued == null) {\n\t\t\t\thooks.unqueued = 0;\n\t\t\t\toldfire = hooks.empty.fire;\n\t\t\t\thooks.empty.fire = function () {\n\t\t\t\t\tif (!hooks.unqueued) {\n\t\t\t\t\t\toldfire();\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t\thooks.unqueued++;\n\n\t\t\tanim.always(function () {\n\n\t\t\t\t// Ensure the complete handler is called before this completes\n\t\t\t\tanim.always(function () {\n\t\t\t\t\thooks.unqueued--;\n\t\t\t\t\tif (!jQuery.queue(elem, \"fx\").length) {\n\t\t\t\t\t\thooks.empty.fire();\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\n\t\t// Detect show/hide animations\n\t\tfor (prop in props) {\n\t\t\tvalue = props[prop];\n\t\t\tif (rfxtypes.test(value)) {\n\t\t\t\tdelete props[prop];\n\t\t\t\ttoggle = toggle || value === \"toggle\";\n\t\t\t\tif (value === (hidden ? \"hide\" : \"show\")) {\n\n\t\t\t\t\t// Pretend to be hidden if this is a \"show\" and\n\t\t\t\t\t// there is still data from a stopped show/hide\n\t\t\t\t\tif (value === \"show\" && dataShow && dataShow[prop] !== undefined) {\n\t\t\t\t\t\thidden = true;\n\n\t\t\t\t\t\t// Ignore all other no-op show/hide data\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\torig[prop] = dataShow && dataShow[prop] || jQuery.style(elem, prop);\n\t\t\t}\n\t\t}\n\n\t\t// Bail out if this is a no-op like .hide().hide()\n\t\tpropTween = !jQuery.isEmptyObject(props);\n\t\tif (!propTween && jQuery.isEmptyObject(orig)) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Restrict \"overflow\" and \"display\" styles during box animations\n\t\tif (isBox && elem.nodeType === 1) {\n\n\t\t\t// Support: IE <=9 - 11, Edge 12 - 15\n\t\t\t// Record all 3 overflow attributes because IE does not infer the shorthand\n\t\t\t// from identically-valued overflowX and overflowY and Edge just mirrors\n\t\t\t// the overflowX value there.\n\t\t\topts.overflow = [style.overflow, style.overflowX, style.overflowY];\n\n\t\t\t// Identify a display type, preferring old show/hide data over the CSS cascade\n\t\t\trestoreDisplay = dataShow && dataShow.display;\n\t\t\tif (restoreDisplay == null) {\n\t\t\t\trestoreDisplay = dataPriv.get(elem, \"display\");\n\t\t\t}\n\t\t\tdisplay = jQuery.css(elem, \"display\");\n\t\t\tif (display === \"none\") {\n\t\t\t\tif (restoreDisplay) {\n\t\t\t\t\tdisplay = restoreDisplay;\n\t\t\t\t} else {\n\n\t\t\t\t\t// Get nonempty value(s) by temporarily forcing visibility\n\t\t\t\t\tshowHide([elem], true);\n\t\t\t\t\trestoreDisplay = elem.style.display || restoreDisplay;\n\t\t\t\t\tdisplay = jQuery.css(elem, \"display\");\n\t\t\t\t\tshowHide([elem]);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Animate inline elements as inline-block\n\t\t\tif (display === \"inline\" || display === \"inline-block\" && restoreDisplay != null) {\n\t\t\t\tif (jQuery.css(elem, \"float\") === \"none\") {\n\n\t\t\t\t\t// Restore the original display value at the end of pure show/hide animations\n\t\t\t\t\tif (!propTween) {\n\t\t\t\t\t\tanim.done(function () {\n\t\t\t\t\t\t\tstyle.display = restoreDisplay;\n\t\t\t\t\t\t});\n\t\t\t\t\t\tif (restoreDisplay == null) {\n\t\t\t\t\t\t\tdisplay = style.display;\n\t\t\t\t\t\t\trestoreDisplay = display === \"none\" ? \"\" : display;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tstyle.display = \"inline-block\";\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (opts.overflow) {\n\t\t\tstyle.overflow = \"hidden\";\n\t\t\tanim.always(function () {\n\t\t\t\tstyle.overflow = opts.overflow[0];\n\t\t\t\tstyle.overflowX = opts.overflow[1];\n\t\t\t\tstyle.overflowY = opts.overflow[2];\n\t\t\t});\n\t\t}\n\n\t\t// Implement show/hide animations\n\t\tpropTween = false;\n\t\tfor (prop in orig) {\n\n\t\t\t// General show/hide setup for this element animation\n\t\t\tif (!propTween) {\n\t\t\t\tif (dataShow) {\n\t\t\t\t\tif (\"hidden\" in dataShow) {\n\t\t\t\t\t\thidden = dataShow.hidden;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tdataShow = dataPriv.access(elem, \"fxshow\", { display: restoreDisplay });\n\t\t\t\t}\n\n\t\t\t\t// Store hidden/visible for toggle so `.stop().toggle()` \"reverses\"\n\t\t\t\tif (toggle) {\n\t\t\t\t\tdataShow.hidden = !hidden;\n\t\t\t\t}\n\n\t\t\t\t// Show elements before animating them\n\t\t\t\tif (hidden) {\n\t\t\t\t\tshowHide([elem], true);\n\t\t\t\t}\n\n\t\t\t\t/* eslint-disable no-loop-func */\n\n\t\t\t\tanim.done(function () {\n\n\t\t\t\t\t/* eslint-enable no-loop-func */\n\n\t\t\t\t\t// The final step of a \"hide\" animation is actually hiding the element\n\t\t\t\t\tif (!hidden) {\n\t\t\t\t\t\tshowHide([elem]);\n\t\t\t\t\t}\n\t\t\t\t\tdataPriv.remove(elem, \"fxshow\");\n\t\t\t\t\tfor (prop in orig) {\n\t\t\t\t\t\tjQuery.style(elem, prop, orig[prop]);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// Per-property setup\n\t\t\tpropTween = createTween(hidden ? dataShow[prop] : 0, prop, anim);\n\t\t\tif (!(prop in dataShow)) {\n\t\t\t\tdataShow[prop] = propTween.start;\n\t\t\t\tif (hidden) {\n\t\t\t\t\tpropTween.end = propTween.start;\n\t\t\t\t\tpropTween.start = 0;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction propFilter(props, specialEasing) {\n\t\tvar index, name, easing, value, hooks;\n\n\t\t// camelCase, specialEasing and expand cssHook pass\n\t\tfor (index in props) {\n\t\t\tname = camelCase(index);\n\t\t\teasing = specialEasing[name];\n\t\t\tvalue = props[index];\n\t\t\tif (Array.isArray(value)) {\n\t\t\t\teasing = value[1];\n\t\t\t\tvalue = props[index] = value[0];\n\t\t\t}\n\n\t\t\tif (index !== name) {\n\t\t\t\tprops[name] = value;\n\t\t\t\tdelete props[index];\n\t\t\t}\n\n\t\t\thooks = jQuery.cssHooks[name];\n\t\t\tif (hooks && \"expand\" in hooks) {\n\t\t\t\tvalue = hooks.expand(value);\n\t\t\t\tdelete props[name];\n\n\t\t\t\t// Not quite $.extend, this won't overwrite existing keys.\n\t\t\t\t// Reusing 'index' because we have the correct \"name\"\n\t\t\t\tfor (index in value) {\n\t\t\t\t\tif (!(index in props)) {\n\t\t\t\t\t\tprops[index] = value[index];\n\t\t\t\t\t\tspecialEasing[index] = easing;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tspecialEasing[name] = easing;\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction Animation(elem, properties, options) {\n\t\tvar result,\n\t\t\tstopped,\n\t\t\tindex = 0,\n\t\t\tlength = Animation.prefilters.length,\n\t\t\tdeferred = jQuery.Deferred().always(function () {\n\n\t\t\t\t// Don't match elem in the :animated selector\n\t\t\t\tdelete tick.elem;\n\t\t\t}),\n\t\t\ttick = function () {\n\t\t\t\tif (stopped) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tvar currentTime = fxNow || createFxNow(),\n\t\t\t\t\tremaining = Math.max(0, animation.startTime + animation.duration - currentTime),\n\n\t\t\t\t\t// Support: Android 2.3 only\n\t\t\t\t\t// Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (trac-12497)\n\t\t\t\t\ttemp = remaining / animation.duration || 0,\n\t\t\t\t\tpercent = 1 - temp,\n\t\t\t\t\tindex = 0,\n\t\t\t\t\tlength = animation.tweens.length;\n\n\t\t\t\tfor (; index < length; index++) {\n\t\t\t\t\tanimation.tweens[index].run(percent);\n\t\t\t\t}\n\n\t\t\t\tdeferred.notifyWith(elem, [animation, percent, remaining]);\n\n\t\t\t\t// If there's more to do, yield\n\t\t\t\tif (percent < 1 && length) {\n\t\t\t\t\treturn remaining;\n\t\t\t\t}\n\n\t\t\t\t// If this was an empty animation, synthesize a final progress notification\n\t\t\t\tif (!length) {\n\t\t\t\t\tdeferred.notifyWith(elem, [animation, 1, 0]);\n\t\t\t\t}\n\n\t\t\t\t// Resolve the animation and report its conclusion\n\t\t\t\tdeferred.resolveWith(elem, [animation]);\n\t\t\t\treturn false;\n\t\t\t},\n\t\t\tanimation = deferred.promise({\n\t\t\t\telem: elem,\n\t\t\t\tprops: jQuery.extend({}, properties),\n\t\t\t\topts: jQuery.extend(true, {\n\t\t\t\t\tspecialEasing: {},\n\t\t\t\t\teasing: jQuery.easing._default\n\t\t\t\t}, options),\n\t\t\t\toriginalProperties: properties,\n\t\t\t\toriginalOptions: options,\n\t\t\t\tstartTime: fxNow || createFxNow(),\n\t\t\t\tduration: options.duration,\n\t\t\t\ttweens: [],\n\t\t\t\tcreateTween: function (prop, end) {\n\t\t\t\t\tvar tween = jQuery.Tween(elem, animation.opts, prop, end,\n\t\t\t\t\t\tanimation.opts.specialEasing[prop] || animation.opts.easing);\n\t\t\t\t\tanimation.tweens.push(tween);\n\t\t\t\t\treturn tween;\n\t\t\t\t},\n\t\t\t\tstop: function (gotoEnd) {\n\t\t\t\t\tvar index = 0,\n\n\t\t\t\t\t\t// If we are going to the end, we want to run all the tweens\n\t\t\t\t\t\t// otherwise we skip this part\n\t\t\t\t\t\tlength = gotoEnd ? animation.tweens.length : 0;\n\t\t\t\t\tif (stopped) {\n\t\t\t\t\t\treturn this;\n\t\t\t\t\t}\n\t\t\t\t\tstopped = true;\n\t\t\t\t\tfor (; index < length; index++) {\n\t\t\t\t\t\tanimation.tweens[index].run(1);\n\t\t\t\t\t}\n\n\t\t\t\t\t// Resolve when we played the last frame; otherwise, reject\n\t\t\t\t\tif (gotoEnd) {\n\t\t\t\t\t\tdeferred.notifyWith(elem, [animation, 1, 0]);\n\t\t\t\t\t\tdeferred.resolveWith(elem, [animation, gotoEnd]);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdeferred.rejectWith(elem, [animation, gotoEnd]);\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t}),\n\t\t\tprops = animation.props;\n\n\t\tpropFilter(props, animation.opts.specialEasing);\n\n\t\tfor (; index < length; index++) {\n\t\t\tresult = Animation.prefilters[index].call(animation, elem, props, animation.opts);\n\t\t\tif (result) {\n\t\t\t\tif (isFunction(result.stop)) {\n\t\t\t\t\tjQuery._queueHooks(animation.elem, animation.opts.queue).stop =\n\t\t\t\t\t\tresult.stop.bind(result);\n\t\t\t\t}\n\t\t\t\treturn result;\n\t\t\t}\n\t\t}\n\n\t\tjQuery.map(props, createTween, animation);\n\n\t\tif (isFunction(animation.opts.start)) {\n\t\t\tanimation.opts.start.call(elem, animation);\n\t\t}\n\n\t\t// Attach callbacks from options\n\t\tanimation\n\t\t\t.progress(animation.opts.progress)\n\t\t\t.done(animation.opts.done, animation.opts.complete)\n\t\t\t.fail(animation.opts.fail)\n\t\t\t.always(animation.opts.always);\n\n\t\tjQuery.fx.timer(\n\t\t\tjQuery.extend(tick, {\n\t\t\t\telem: elem,\n\t\t\t\tanim: animation,\n\t\t\t\tqueue: animation.opts.queue\n\t\t\t})\n\t\t);\n\n\t\treturn animation;\n\t}\n\n\tjQuery.Animation = jQuery.extend(Animation, {\n\n\t\ttweeners: {\n\t\t\t\"*\": [function (prop, value) {\n\t\t\t\tvar tween = this.createTween(prop, value);\n\t\t\t\tadjustCSS(tween.elem, prop, rcssNum.exec(value), tween);\n\t\t\t\treturn tween;\n\t\t\t}]\n\t\t},\n\n\t\ttweener: function (props, callback) {\n\t\t\tif (isFunction(props)) {\n\t\t\t\tcallback = props;\n\t\t\t\tprops = [\"*\"];\n\t\t\t} else {\n\t\t\t\tprops = props.match(rnothtmlwhite);\n\t\t\t}\n\n\t\t\tvar prop,\n\t\t\t\tindex = 0,\n\t\t\t\tlength = props.length;\n\n\t\t\tfor (; index < length; index++) {\n\t\t\t\tprop = props[index];\n\t\t\t\tAnimation.tweeners[prop] = Animation.tweeners[prop] || [];\n\t\t\t\tAnimation.tweeners[prop].unshift(callback);\n\t\t\t}\n\t\t},\n\n\t\tprefilters: [defaultPrefilter],\n\n\t\tprefilter: function (callback, prepend) {\n\t\t\tif (prepend) {\n\t\t\t\tAnimation.prefilters.unshift(callback);\n\t\t\t} else {\n\t\t\t\tAnimation.prefilters.push(callback);\n\t\t\t}\n\t\t}\n\t});\n\n\tjQuery.speed = function (speed, easing, fn) {\n\t\tvar opt = speed && typeof speed === \"object\" ? jQuery.extend({}, speed) : {\n\t\t\tcomplete: fn || !fn && easing ||\n\t\t\t\tisFunction(speed) && speed,\n\t\t\tduration: speed,\n\t\t\teasing: fn && easing || easing && !isFunction(easing) && easing\n\t\t};\n\n\t\t// Go to the end state if fx are off\n\t\tif (jQuery.fx.off) {\n\t\t\topt.duration = 0;\n\n\t\t} else {\n\t\t\tif (typeof opt.duration !== \"number\") {\n\t\t\t\tif (opt.duration in jQuery.fx.speeds) {\n\t\t\t\t\topt.duration = jQuery.fx.speeds[opt.duration];\n\n\t\t\t\t} else {\n\t\t\t\t\topt.duration = jQuery.fx.speeds._default;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Normalize opt.queue - true/undefined/null -> \"fx\"\n\t\tif (opt.queue == null || opt.queue === true) {\n\t\t\topt.queue = \"fx\";\n\t\t}\n\n\t\t// Queueing\n\t\topt.old = opt.complete;\n\n\t\topt.complete = function () {\n\t\t\tif (isFunction(opt.old)) {\n\t\t\t\topt.old.call(this);\n\t\t\t}\n\n\t\t\tif (opt.queue) {\n\t\t\t\tjQuery.dequeue(this, opt.queue);\n\t\t\t}\n\t\t};\n\n\t\treturn opt;\n\t};\n\n\tjQuery.fn.extend({\n\t\tfadeTo: function (speed, to, easing, callback) {\n\n\t\t\t// Show any hidden elements after setting opacity to 0\n\t\t\treturn this.filter(isHiddenWithinTree).css(\"opacity\", 0).show()\n\n\t\t\t\t// Animate to the value specified\n\t\t\t\t.end().animate({ opacity: to }, speed, easing, callback);\n\t\t},\n\t\tanimate: function (prop, speed, easing, callback) {\n\t\t\tvar empty = jQuery.isEmptyObject(prop),\n\t\t\t\toptall = jQuery.speed(speed, easing, callback),\n\t\t\t\tdoAnimation = function () {\n\n\t\t\t\t\t// Operate on a copy of prop so per-property easing won't be lost\n\t\t\t\t\tvar anim = Animation(this, jQuery.extend({}, prop), optall);\n\n\t\t\t\t\t// Empty animations, or finishing resolves immediately\n\t\t\t\t\tif (empty || dataPriv.get(this, \"finish\")) {\n\t\t\t\t\t\tanim.stop(true);\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\tdoAnimation.finish = doAnimation;\n\n\t\t\treturn empty || optall.queue === false ?\n\t\t\t\tthis.each(doAnimation) :\n\t\t\t\tthis.queue(optall.queue, doAnimation);\n\t\t},\n\t\tstop: function (type, clearQueue, gotoEnd) {\n\t\t\tvar stopQueue = function (hooks) {\n\t\t\t\tvar stop = hooks.stop;\n\t\t\t\tdelete hooks.stop;\n\t\t\t\tstop(gotoEnd);\n\t\t\t};\n\n\t\t\tif (typeof type !== \"string\") {\n\t\t\t\tgotoEnd = clearQueue;\n\t\t\t\tclearQueue = type;\n\t\t\t\ttype = undefined;\n\t\t\t}\n\t\t\tif (clearQueue) {\n\t\t\t\tthis.queue(type || \"fx\", []);\n\t\t\t}\n\n\t\t\treturn this.each(function () {\n\t\t\t\tvar dequeue = true,\n\t\t\t\t\tindex = type != null && type + \"queueHooks\",\n\t\t\t\t\ttimers = jQuery.timers,\n\t\t\t\t\tdata = dataPriv.get(this);\n\n\t\t\t\tif (index) {\n\t\t\t\t\tif (data[index] && data[index].stop) {\n\t\t\t\t\t\tstopQueue(data[index]);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tfor (index in data) {\n\t\t\t\t\t\tif (data[index] && data[index].stop && rrun.test(index)) {\n\t\t\t\t\t\t\tstopQueue(data[index]);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tfor (index = timers.length; index--;) {\n\t\t\t\t\tif (timers[index].elem === this &&\n\t\t\t\t\t\t(type == null || timers[index].queue === type)) {\n\n\t\t\t\t\t\ttimers[index].anim.stop(gotoEnd);\n\t\t\t\t\t\tdequeue = false;\n\t\t\t\t\t\ttimers.splice(index, 1);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Start the next in the queue if the last step wasn't forced.\n\t\t\t\t// Timers currently will call their complete callbacks, which\n\t\t\t\t// will dequeue but only if they were gotoEnd.\n\t\t\t\tif (dequeue || !gotoEnd) {\n\t\t\t\t\tjQuery.dequeue(this, type);\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\t\tfinish: function (type) {\n\t\t\tif (type !== false) {\n\t\t\t\ttype = type || \"fx\";\n\t\t\t}\n\t\t\treturn this.each(function () {\n\t\t\t\tvar index,\n\t\t\t\t\tdata = dataPriv.get(this),\n\t\t\t\t\tqueue = data[type + \"queue\"],\n\t\t\t\t\thooks = data[type + \"queueHooks\"],\n\t\t\t\t\ttimers = jQuery.timers,\n\t\t\t\t\tlength = queue ? queue.length : 0;\n\n\t\t\t\t// Enable finishing flag on private data\n\t\t\t\tdata.finish = true;\n\n\t\t\t\t// Empty the queue first\n\t\t\t\tjQuery.queue(this, type, []);\n\n\t\t\t\tif (hooks && hooks.stop) {\n\t\t\t\t\thooks.stop.call(this, true);\n\t\t\t\t}\n\n\t\t\t\t// Look for any active animations, and finish them\n\t\t\t\tfor (index = timers.length; index--;) {\n\t\t\t\t\tif (timers[index].elem === this && timers[index].queue === type) {\n\t\t\t\t\t\ttimers[index].anim.stop(true);\n\t\t\t\t\t\ttimers.splice(index, 1);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Look for any animations in the old queue and finish them\n\t\t\t\tfor (index = 0; index < length; index++) {\n\t\t\t\t\tif (queue[index] && queue[index].finish) {\n\t\t\t\t\t\tqueue[index].finish.call(this);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Turn off finishing flag\n\t\t\t\tdelete data.finish;\n\t\t\t});\n\t\t}\n\t});\n\n\tjQuery.each([\"toggle\", \"show\", \"hide\"], function (_i, name) {\n\t\tvar cssFn = jQuery.fn[name];\n\t\tjQuery.fn[name] = function (speed, easing, callback) {\n\t\t\treturn speed == null || typeof speed === \"boolean\" ?\n\t\t\t\tcssFn.apply(this, arguments) :\n\t\t\t\tthis.animate(genFx(name, true), speed, easing, callback);\n\t\t};\n\t});\n\n\t// Generate shortcuts for custom animations\n\tjQuery.each({\n\t\tslideDown: genFx(\"show\"),\n\t\tslideUp: genFx(\"hide\"),\n\t\tslideToggle: genFx(\"toggle\"),\n\t\tfadeIn: { opacity: \"show\" },\n\t\tfadeOut: { opacity: \"hide\" },\n\t\tfadeToggle: { opacity: \"toggle\" }\n\t}, function (name, props) {\n\t\tjQuery.fn[name] = function (speed, easing, callback) {\n\t\t\treturn this.animate(props, speed, easing, callback);\n\t\t};\n\t});\n\n\tjQuery.timers = [];\n\tjQuery.fx.tick = function () {\n\t\tvar timer,\n\t\t\ti = 0,\n\t\t\ttimers = jQuery.timers;\n\n\t\tfxNow = Date.now();\n\n\t\tfor (; i < timers.length; i++) {\n\t\t\ttimer = timers[i];\n\n\t\t\t// Run the timer and safely remove it when done (allowing for external removal)\n\t\t\tif (!timer() && timers[i] === timer) {\n\t\t\t\ttimers.splice(i--, 1);\n\t\t\t}\n\t\t}\n\n\t\tif (!timers.length) {\n\t\t\tjQuery.fx.stop();\n\t\t}\n\t\tfxNow = undefined;\n\t};\n\n\tjQuery.fx.timer = function (timer) {\n\t\tjQuery.timers.push(timer);\n\t\tjQuery.fx.start();\n\t};\n\n\tjQuery.fx.interval = 13;\n\tjQuery.fx.start = function () {\n\t\tif (inProgress) {\n\t\t\treturn;\n\t\t}\n\n\t\tinProgress = true;\n\t\tschedule();\n\t};\n\n\tjQuery.fx.stop = function () {\n\t\tinProgress = null;\n\t};\n\n\tjQuery.fx.speeds = {\n\t\tslow: 600,\n\t\tfast: 200,\n\n\t\t// Default speed\n\t\t_default: 400\n\t};\n\n\n\t// Based off of the plugin by Clint Helfers, with permission.\n\tjQuery.fn.delay = function (time, type) {\n\t\ttime = jQuery.fx ? jQuery.fx.speeds[time] || time : time;\n\t\ttype = type || \"fx\";\n\n\t\treturn this.queue(type, function (next, hooks) {\n\t\t\tvar timeout = window.setTimeout(next, time);\n\t\t\thooks.stop = function () {\n\t\t\t\twindow.clearTimeout(timeout);\n\t\t\t};\n\t\t});\n\t};\n\n\n\t(function () {\n\t\tvar input = document.createElement(\"input\"),\n\t\t\tselect = document.createElement(\"select\"),\n\t\t\topt = select.appendChild(document.createElement(\"option\"));\n\n\t\tinput.type = \"checkbox\";\n\n\t\t// Support: Android <=4.3 only\n\t\t// Default value for a checkbox should be \"on\"\n\t\tsupport.checkOn = input.value !== \"\";\n\n\t\t// Support: IE <=11 only\n\t\t// Must access selectedIndex to make default options select\n\t\tsupport.optSelected = opt.selected;\n\n\t\t// Support: IE <=11 only\n\t\t// An input loses its value after becoming a radio\n\t\tinput = document.createElement(\"input\");\n\t\tinput.value = \"t\";\n\t\tinput.type = \"radio\";\n\t\tsupport.radioValue = input.value === \"t\";\n\t})();\n\n\n\tvar boolHook,\n\t\tattrHandle = jQuery.expr.attrHandle;\n\n\tjQuery.fn.extend({\n\t\tattr: function (name, value) {\n\t\t\treturn access(this, jQuery.attr, name, value, arguments.length > 1);\n\t\t},\n\n\t\tremoveAttr: function (name) {\n\t\t\treturn this.each(function () {\n\t\t\t\tjQuery.removeAttr(this, name);\n\t\t\t});\n\t\t}\n\t});\n\n\tjQuery.extend({\n\t\tattr: function (elem, name, value) {\n\t\t\tvar ret, hooks,\n\t\t\t\tnType = elem.nodeType;\n\n\t\t\t// Don't get/set attributes on text, comment and attribute nodes\n\t\t\tif (nType === 3 || nType === 8 || nType === 2) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Fallback to prop when attributes are not supported\n\t\t\tif (typeof elem.getAttribute === \"undefined\") {\n\t\t\t\treturn jQuery.prop(elem, name, value);\n\t\t\t}\n\n\t\t\t// Attribute hooks are determined by the lowercase version\n\t\t\t// Grab necessary hook if one is defined\n\t\t\tif (nType !== 1 || !jQuery.isXMLDoc(elem)) {\n\t\t\t\thooks = jQuery.attrHooks[name.toLowerCase()] ||\n\t\t\t\t\t(jQuery.expr.match.bool.test(name) ? boolHook : undefined);\n\t\t\t}\n\n\t\t\tif (value !== undefined) {\n\t\t\t\tif (value === null) {\n\t\t\t\t\tjQuery.removeAttr(elem, name);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (hooks && \"set\" in hooks &&\n\t\t\t\t\t(ret = hooks.set(elem, value, name)) !== undefined) {\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\n\t\t\t\telem.setAttribute(name, value + \"\");\n\t\t\t\treturn value;\n\t\t\t}\n\n\t\t\tif (hooks && \"get\" in hooks && (ret = hooks.get(elem, name)) !== null) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\tret = jQuery.find.attr(elem, name);\n\n\t\t\t// Non-existent attributes return null, we normalize to undefined\n\t\t\treturn ret == null ? undefined : ret;\n\t\t},\n\n\t\tattrHooks: {\n\t\t\ttype: {\n\t\t\t\tset: function (elem, value) {\n\t\t\t\t\tif (!support.radioValue && value === \"radio\" &&\n\t\t\t\t\t\tnodeName(elem, \"input\")) {\n\t\t\t\t\t\tvar val = elem.value;\n\t\t\t\t\t\telem.setAttribute(\"type\", value);\n\t\t\t\t\t\tif (val) {\n\t\t\t\t\t\t\telem.value = val;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn value;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tremoveAttr: function (elem, value) {\n\t\t\tvar name,\n\t\t\t\ti = 0,\n\n\t\t\t\t// Attribute names can contain non-HTML whitespace characters\n\t\t\t\t// https://html.spec.whatwg.org/multipage/syntax.html#attributes-2\n\t\t\t\tattrNames = value && value.match(rnothtmlwhite);\n\n\t\t\tif (attrNames && elem.nodeType === 1) {\n\t\t\t\twhile ((name = attrNames[i++])) {\n\t\t\t\t\telem.removeAttribute(name);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\n\t// Hooks for boolean attributes\n\tboolHook = {\n\t\tset: function (elem, value, name) {\n\t\t\tif (value === false) {\n\n\t\t\t\t// Remove boolean attributes when set to false\n\t\t\t\tjQuery.removeAttr(elem, name);\n\t\t\t} else {\n\t\t\t\telem.setAttribute(name, name);\n\t\t\t}\n\t\t\treturn name;\n\t\t}\n\t};\n\n\tjQuery.each(jQuery.expr.match.bool.source.match(/\\w+/g), function (_i, name) {\n\t\tvar getter = attrHandle[name] || jQuery.find.attr;\n\n\t\tattrHandle[name] = function (elem, name, isXML) {\n\t\t\tvar ret, handle,\n\t\t\t\tlowercaseName = name.toLowerCase();\n\n\t\t\tif (!isXML) {\n\n\t\t\t\t// Avoid an infinite loop by temporarily removing this function from the getter\n\t\t\t\thandle = attrHandle[lowercaseName];\n\t\t\t\tattrHandle[lowercaseName] = ret;\n\t\t\t\tret = getter(elem, name, isXML) != null ?\n\t\t\t\t\tlowercaseName :\n\t\t\t\t\tnull;\n\t\t\t\tattrHandle[lowercaseName] = handle;\n\t\t\t}\n\t\t\treturn ret;\n\t\t};\n\t});\n\n\n\n\n\tvar rfocusable = /^(?:input|select|textarea|button)$/i,\n\t\trclickable = /^(?:a|area)$/i;\n\n\tjQuery.fn.extend({\n\t\tprop: function (name, value) {\n\t\t\treturn access(this, jQuery.prop, name, value, arguments.length > 1);\n\t\t},\n\n\t\tremoveProp: function (name) {\n\t\t\treturn this.each(function () {\n\t\t\t\tdelete this[jQuery.propFix[name] || name];\n\t\t\t});\n\t\t}\n\t});\n\n\tjQuery.extend({\n\t\tprop: function (elem, name, value) {\n\t\t\tvar ret, hooks,\n\t\t\t\tnType = elem.nodeType;\n\n\t\t\t// Don't get/set properties on text, comment and attribute nodes\n\t\t\tif (nType === 3 || nType === 8 || nType === 2) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (nType !== 1 || !jQuery.isXMLDoc(elem)) {\n\n\t\t\t\t// Fix name and attach hooks\n\t\t\t\tname = jQuery.propFix[name] || name;\n\t\t\t\thooks = jQuery.propHooks[name];\n\t\t\t}\n\n\t\t\tif (value !== undefined) {\n\t\t\t\tif (hooks && \"set\" in hooks &&\n\t\t\t\t\t(ret = hooks.set(elem, value, name)) !== undefined) {\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\n\t\t\t\treturn (elem[name] = value);\n\t\t\t}\n\n\t\t\tif (hooks && \"get\" in hooks && (ret = hooks.get(elem, name)) !== null) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\treturn elem[name];\n\t\t},\n\n\t\tpropHooks: {\n\t\t\ttabIndex: {\n\t\t\t\tget: function (elem) {\n\n\t\t\t\t\t// Support: IE <=9 - 11 only\n\t\t\t\t\t// elem.tabIndex doesn't always return the\n\t\t\t\t\t// correct value when it hasn't been explicitly set\n\t\t\t\t\t// Use proper attribute retrieval (trac-12072)\n\t\t\t\t\tvar tabindex = jQuery.find.attr(elem, \"tabindex\");\n\n\t\t\t\t\tif (tabindex) {\n\t\t\t\t\t\treturn parseInt(tabindex, 10);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (\n\t\t\t\t\t\trfocusable.test(elem.nodeName) ||\n\t\t\t\t\t\trclickable.test(elem.nodeName) &&\n\t\t\t\t\t\telem.href\n\t\t\t\t\t) {\n\t\t\t\t\t\treturn 0;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn -1;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tpropFix: {\n\t\t\t\"for\": \"htmlFor\",\n\t\t\t\"class\": \"className\"\n\t\t}\n\t});\n\n\t// Support: IE <=11 only\n\t// Accessing the selectedIndex property\n\t// forces the browser to respect setting selected\n\t// on the option\n\t// The getter ensures a default option is selected\n\t// when in an optgroup\n\t// eslint rule \"no-unused-expressions\" is disabled for this code\n\t// since it considers such accessions noop\n\tif (!support.optSelected) {\n\t\tjQuery.propHooks.selected = {\n\t\t\tget: function (elem) {\n\n\t\t\t\t/* eslint no-unused-expressions: \"off\" */\n\n\t\t\t\tvar parent = elem.parentNode;\n\t\t\t\tif (parent && parent.parentNode) {\n\t\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t\t}\n\t\t\t\treturn null;\n\t\t\t},\n\t\t\tset: function (elem) {\n\n\t\t\t\t/* eslint no-unused-expressions: \"off\" */\n\n\t\t\t\tvar parent = elem.parentNode;\n\t\t\t\tif (parent) {\n\t\t\t\t\tparent.selectedIndex;\n\n\t\t\t\t\tif (parent.parentNode) {\n\t\t\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n\n\tjQuery.each([\n\t\t\"tabIndex\",\n\t\t\"readOnly\",\n\t\t\"maxLength\",\n\t\t\"cellSpacing\",\n\t\t\"cellPadding\",\n\t\t\"rowSpan\",\n\t\t\"colSpan\",\n\t\t\"useMap\",\n\t\t\"frameBorder\",\n\t\t\"contentEditable\"\n\t], function () {\n\t\tjQuery.propFix[this.toLowerCase()] = this;\n\t});\n\n\n\n\n\t// Strip and collapse whitespace according to HTML spec\n\t// https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace\n\tfunction stripAndCollapse(value) {\n\t\tvar tokens = value.match(rnothtmlwhite) || [];\n\t\treturn tokens.join(\" \");\n\t}\n\n\n\tfunction getClass(elem) {\n\t\treturn elem.getAttribute && elem.getAttribute(\"class\") || \"\";\n\t}\n\n\tfunction classesToArray(value) {\n\t\tif (Array.isArray(value)) {\n\t\t\treturn value;\n\t\t}\n\t\tif (typeof value === \"string\") {\n\t\t\treturn value.match(rnothtmlwhite) || [];\n\t\t}\n\t\treturn [];\n\t}\n\n\tjQuery.fn.extend({\n\t\taddClass: function (value) {\n\t\t\tvar classNames, cur, curValue, className, i, finalValue;\n\n\t\t\tif (isFunction(value)) {\n\t\t\t\treturn this.each(function (j) {\n\t\t\t\t\tjQuery(this).addClass(value.call(this, j, getClass(this)));\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tclassNames = classesToArray(value);\n\n\t\t\tif (classNames.length) {\n\t\t\t\treturn this.each(function () {\n\t\t\t\t\tcurValue = getClass(this);\n\t\t\t\t\tcur = this.nodeType === 1 && (\" \" + stripAndCollapse(curValue) + \" \");\n\n\t\t\t\t\tif (cur) {\n\t\t\t\t\t\tfor (i = 0; i < classNames.length; i++) {\n\t\t\t\t\t\t\tclassName = classNames[i];\n\t\t\t\t\t\t\tif (cur.indexOf(\" \" + className + \" \") < 0) {\n\t\t\t\t\t\t\t\tcur += className + \" \";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\t\tfinalValue = stripAndCollapse(cur);\n\t\t\t\t\t\tif (curValue !== finalValue) {\n\t\t\t\t\t\t\tthis.setAttribute(\"class\", finalValue);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn this;\n\t\t},\n\n\t\tremoveClass: function (value) {\n\t\t\tvar classNames, cur, curValue, className, i, finalValue;\n\n\t\t\tif (isFunction(value)) {\n\t\t\t\treturn this.each(function (j) {\n\t\t\t\t\tjQuery(this).removeClass(value.call(this, j, getClass(this)));\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (!arguments.length) {\n\t\t\t\treturn this.attr(\"class\", \"\");\n\t\t\t}\n\n\t\t\tclassNames = classesToArray(value);\n\n\t\t\tif (classNames.length) {\n\t\t\t\treturn this.each(function () {\n\t\t\t\t\tcurValue = getClass(this);\n\n\t\t\t\t\t// This expression is here for better compressibility (see addClass)\n\t\t\t\t\tcur = this.nodeType === 1 && (\" \" + stripAndCollapse(curValue) + \" \");\n\n\t\t\t\t\tif (cur) {\n\t\t\t\t\t\tfor (i = 0; i < classNames.length; i++) {\n\t\t\t\t\t\t\tclassName = classNames[i];\n\n\t\t\t\t\t\t\t// Remove *all* instances\n\t\t\t\t\t\t\twhile (cur.indexOf(\" \" + className + \" \") > -1) {\n\t\t\t\t\t\t\t\tcur = cur.replace(\" \" + className + \" \", \" \");\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\t\tfinalValue = stripAndCollapse(cur);\n\t\t\t\t\t\tif (curValue !== finalValue) {\n\t\t\t\t\t\t\tthis.setAttribute(\"class\", finalValue);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn this;\n\t\t},\n\n\t\ttoggleClass: function (value, stateVal) {\n\t\t\tvar classNames, className, i, self,\n\t\t\t\ttype = typeof value,\n\t\t\t\tisValidValue = type === \"string\" || Array.isArray(value);\n\n\t\t\tif (isFunction(value)) {\n\t\t\t\treturn this.each(function (i) {\n\t\t\t\t\tjQuery(this).toggleClass(\n\t\t\t\t\t\tvalue.call(this, i, getClass(this), stateVal),\n\t\t\t\t\t\tstateVal\n\t\t\t\t\t);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (typeof stateVal === \"boolean\" && isValidValue) {\n\t\t\t\treturn stateVal ? this.addClass(value) : this.removeClass(value);\n\t\t\t}\n\n\t\t\tclassNames = classesToArray(value);\n\n\t\t\treturn this.each(function () {\n\t\t\t\tif (isValidValue) {\n\n\t\t\t\t\t// Toggle individual class names\n\t\t\t\t\tself = jQuery(this);\n\n\t\t\t\t\tfor (i = 0; i < classNames.length; i++) {\n\t\t\t\t\t\tclassName = classNames[i];\n\n\t\t\t\t\t\t// Check each className given, space separated list\n\t\t\t\t\t\tif (self.hasClass(className)) {\n\t\t\t\t\t\t\tself.removeClass(className);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tself.addClass(className);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Toggle whole class name\n\t\t\t\t} else if (value === undefined || type === \"boolean\") {\n\t\t\t\t\tclassName = getClass(this);\n\t\t\t\t\tif (className) {\n\n\t\t\t\t\t\t// Store className if set\n\t\t\t\t\t\tdataPriv.set(this, \"__className__\", className);\n\t\t\t\t\t}\n\n\t\t\t\t\t// If the element has a class name or if we're passed `false`,\n\t\t\t\t\t// then remove the whole classname (if there was one, the above saved it).\n\t\t\t\t\t// Otherwise bring back whatever was previously saved (if anything),\n\t\t\t\t\t// falling back to the empty string if nothing was stored.\n\t\t\t\t\tif (this.setAttribute) {\n\t\t\t\t\t\tthis.setAttribute(\"class\",\n\t\t\t\t\t\t\tclassName || value === false ?\n\t\t\t\t\t\t\t\t\"\" :\n\t\t\t\t\t\t\t\tdataPriv.get(this, \"__className__\") || \"\"\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\thasClass: function (selector) {\n\t\t\tvar className, elem,\n\t\t\t\ti = 0;\n\n\t\t\tclassName = \" \" + selector + \" \";\n\t\t\twhile ((elem = this[i++])) {\n\t\t\t\tif (elem.nodeType === 1 &&\n\t\t\t\t\t(\" \" + stripAndCollapse(getClass(elem)) + \" \").indexOf(className) > -1) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn false;\n\t\t}\n\t});\n\n\n\n\n\tvar rreturn = /\\r/g;\n\n\tjQuery.fn.extend({\n\t\tval: function (value) {\n\t\t\tvar hooks, ret, valueIsFunction,\n\t\t\t\telem = this[0];\n\n\t\t\tif (!arguments.length) {\n\t\t\t\tif (elem) {\n\t\t\t\t\thooks = jQuery.valHooks[elem.type] ||\n\t\t\t\t\t\tjQuery.valHooks[elem.nodeName.toLowerCase()];\n\n\t\t\t\t\tif (hooks &&\n\t\t\t\t\t\t\"get\" in hooks &&\n\t\t\t\t\t\t(ret = hooks.get(elem, \"value\")) !== undefined\n\t\t\t\t\t) {\n\t\t\t\t\t\treturn ret;\n\t\t\t\t\t}\n\n\t\t\t\t\tret = elem.value;\n\n\t\t\t\t\t// Handle most common string cases\n\t\t\t\t\tif (typeof ret === \"string\") {\n\t\t\t\t\t\treturn ret.replace(rreturn, \"\");\n\t\t\t\t\t}\n\n\t\t\t\t\t// Handle cases where value is null/undef or number\n\t\t\t\t\treturn ret == null ? \"\" : ret;\n\t\t\t\t}\n\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvalueIsFunction = isFunction(value);\n\n\t\t\treturn this.each(function (i) {\n\t\t\t\tvar val;\n\n\t\t\t\tif (this.nodeType !== 1) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (valueIsFunction) {\n\t\t\t\t\tval = value.call(this, i, jQuery(this).val());\n\t\t\t\t} else {\n\t\t\t\t\tval = value;\n\t\t\t\t}\n\n\t\t\t\t// Treat null/undefined as \"\"; convert numbers to string\n\t\t\t\tif (val == null) {\n\t\t\t\t\tval = \"\";\n\n\t\t\t\t} else if (typeof val === \"number\") {\n\t\t\t\t\tval += \"\";\n\n\t\t\t\t} else if (Array.isArray(val)) {\n\t\t\t\t\tval = jQuery.map(val, function (value) {\n\t\t\t\t\t\treturn value == null ? \"\" : value + \"\";\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\thooks = jQuery.valHooks[this.type] || jQuery.valHooks[this.nodeName.toLowerCase()];\n\n\t\t\t\t// If set returns undefined, fall back to normal setting\n\t\t\t\tif (!hooks || !(\"set\" in hooks) || hooks.set(this, val, \"value\") === undefined) {\n\t\t\t\t\tthis.value = val;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t});\n\n\tjQuery.extend({\n\t\tvalHooks: {\n\t\t\toption: {\n\t\t\t\tget: function (elem) {\n\n\t\t\t\t\tvar val = jQuery.find.attr(elem, \"value\");\n\t\t\t\t\treturn val != null ?\n\t\t\t\t\t\tval :\n\n\t\t\t\t\t\t// Support: IE <=10 - 11 only\n\t\t\t\t\t\t// option.text throws exceptions (trac-14686, trac-14858)\n\t\t\t\t\t\t// Strip and collapse whitespace\n\t\t\t\t\t\t// https://html.spec.whatwg.org/#strip-and-collapse-whitespace\n\t\t\t\t\t\tstripAndCollapse(jQuery.text(elem));\n\t\t\t\t}\n\t\t\t},\n\t\t\tselect: {\n\t\t\t\tget: function (elem) {\n\t\t\t\t\tvar value, option, i,\n\t\t\t\t\t\toptions = elem.options,\n\t\t\t\t\t\tindex = elem.selectedIndex,\n\t\t\t\t\t\tone = elem.type === \"select-one\",\n\t\t\t\t\t\tvalues = one ? null : [],\n\t\t\t\t\t\tmax = one ? index + 1 : options.length;\n\n\t\t\t\t\tif (index < 0) {\n\t\t\t\t\t\ti = max;\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\ti = one ? index : 0;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Loop through all the selected options\n\t\t\t\t\tfor (; i < max; i++) {\n\t\t\t\t\t\toption = options[i];\n\n\t\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t\t// IE8-9 doesn't update selected after form reset (trac-2551)\n\t\t\t\t\t\tif ((option.selected || i === index) &&\n\n\t\t\t\t\t\t\t// Don't return options that are disabled or in a disabled optgroup\n\t\t\t\t\t\t\t!option.disabled &&\n\t\t\t\t\t\t\t(!option.parentNode.disabled ||\n\t\t\t\t\t\t\t\t!nodeName(option.parentNode, \"optgroup\"))) {\n\n\t\t\t\t\t\t\t// Get the specific value for the option\n\t\t\t\t\t\t\tvalue = jQuery(option).val();\n\n\t\t\t\t\t\t\t// We don't need an array for one selects\n\t\t\t\t\t\t\tif (one) {\n\t\t\t\t\t\t\t\treturn value;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Multi-Selects return an array\n\t\t\t\t\t\t\tvalues.push(value);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn values;\n\t\t\t\t},\n\n\t\t\t\tset: function (elem, value) {\n\t\t\t\t\tvar optionSet, option,\n\t\t\t\t\t\toptions = elem.options,\n\t\t\t\t\t\tvalues = jQuery.makeArray(value),\n\t\t\t\t\t\ti = options.length;\n\n\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\toption = options[i];\n\n\t\t\t\t\t\t/* eslint-disable no-cond-assign */\n\n\t\t\t\t\t\tif (option.selected =\n\t\t\t\t\t\t\tjQuery.inArray(jQuery.valHooks.option.get(option), values) > -1\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\toptionSet = true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t/* eslint-enable no-cond-assign */\n\t\t\t\t\t}\n\n\t\t\t\t\t// Force browsers to behave consistently when non-matching value is set\n\t\t\t\t\tif (!optionSet) {\n\t\t\t\t\t\telem.selectedIndex = -1;\n\t\t\t\t\t}\n\t\t\t\t\treturn values;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\n\t// Radios and checkboxes getter/setter\n\tjQuery.each([\"radio\", \"checkbox\"], function () {\n\t\tjQuery.valHooks[this] = {\n\t\t\tset: function (elem, value) {\n\t\t\t\tif (Array.isArray(value)) {\n\t\t\t\t\treturn (elem.checked = jQuery.inArray(jQuery(elem).val(), value) > -1);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\tif (!support.checkOn) {\n\t\t\tjQuery.valHooks[this].get = function (elem) {\n\t\t\t\treturn elem.getAttribute(\"value\") === null ? \"on\" : elem.value;\n\t\t\t};\n\t\t}\n\t});\n\n\n\n\n\t// Return jQuery for attributes-only inclusion\n\tvar location = window.location;\n\n\tvar nonce = { guid: Date.now() };\n\n\tvar rquery = (/\\?/);\n\n\n\n\t// Cross-browser xml parsing\n\tjQuery.parseXML = function (data) {\n\t\tvar xml, parserErrorElem;\n\t\tif (!data || typeof data !== \"string\") {\n\t\t\treturn null;\n\t\t}\n\n\t\t// Support: IE 9 - 11 only\n\t\t// IE throws on parseFromString with invalid input.\n\t\ttry {\n\t\t\txml = (new window.DOMParser()).parseFromString(data, \"text/xml\");\n\t\t} catch (e) { }\n\n\t\tparserErrorElem = xml && xml.getElementsByTagName(\"parsererror\")[0];\n\t\tif (!xml || parserErrorElem) {\n\t\t\tjQuery.error(\"Invalid XML: \" + (\n\t\t\t\tparserErrorElem ?\n\t\t\t\t\tjQuery.map(parserErrorElem.childNodes, function (el) {\n\t\t\t\t\t\treturn el.textContent;\n\t\t\t\t\t}).join(\"\\n\") :\n\t\t\t\t\tdata\n\t\t\t));\n\t\t}\n\t\treturn xml;\n\t};\n\n\n\tvar rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,\n\t\tstopPropagationCallback = function (e) {\n\t\t\te.stopPropagation();\n\t\t};\n\n\tjQuery.extend(jQuery.event, {\n\n\t\ttrigger: function (event, data, elem, onlyHandlers) {\n\n\t\t\tvar i, cur, tmp, bubbleType, ontype, handle, special, lastElement,\n\t\t\t\teventPath = [elem || document],\n\t\t\t\ttype = hasOwn.call(event, \"type\") ? event.type : event,\n\t\t\t\tnamespaces = hasOwn.call(event, \"namespace\") ? event.namespace.split(\".\") : [];\n\n\t\t\tcur = lastElement = tmp = elem = elem || document;\n\n\t\t\t// Don't do events on text and comment nodes\n\t\t\tif (elem.nodeType === 3 || elem.nodeType === 8) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// focus/blur morphs to focusin/out; ensure we're not firing them right now\n\t\t\tif (rfocusMorph.test(type + jQuery.event.triggered)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (type.indexOf(\".\") > -1) {\n\n\t\t\t\t// Namespaced trigger; create a regexp to match event type in handle()\n\t\t\t\tnamespaces = type.split(\".\");\n\t\t\t\ttype = namespaces.shift();\n\t\t\t\tnamespaces.sort();\n\t\t\t}\n\t\t\tontype = type.indexOf(\":\") < 0 && \"on\" + type;\n\n\t\t\t// Caller can pass in a jQuery.Event object, Object, or just an event type string\n\t\t\tevent = event[jQuery.expando] ?\n\t\t\t\tevent :\n\t\t\t\tnew jQuery.Event(type, typeof event === \"object\" && event);\n\n\t\t\t// Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)\n\t\t\tevent.isTrigger = onlyHandlers ? 2 : 3;\n\t\t\tevent.namespace = namespaces.join(\".\");\n\t\t\tevent.rnamespace = event.namespace ?\n\t\t\t\tnew RegExp(\"(^|\\\\.)\" + namespaces.join(\"\\\\.(?:.*\\\\.|)\") + \"(\\\\.|$)\") :\n\t\t\t\tnull;\n\n\t\t\t// Clean up the event in case it is being reused\n\t\t\tevent.result = undefined;\n\t\t\tif (!event.target) {\n\t\t\t\tevent.target = elem;\n\t\t\t}\n\n\t\t\t// Clone any incoming data and prepend the event, creating the handler arg list\n\t\t\tdata = data == null ?\n\t\t\t\t[event] :\n\t\t\t\tjQuery.makeArray(data, [event]);\n\n\t\t\t// Allow special events to draw outside the lines\n\t\t\tspecial = jQuery.event.special[type] || {};\n\t\t\tif (!onlyHandlers && special.trigger && special.trigger.apply(elem, data) === false) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Determine event propagation path in advance, per W3C events spec (trac-9951)\n\t\t\t// Bubble up to document, then to window; watch for a global ownerDocument var (trac-9724)\n\t\t\tif (!onlyHandlers && !special.noBubble && !isWindow(elem)) {\n\n\t\t\t\tbubbleType = special.delegateType || type;\n\t\t\t\tif (!rfocusMorph.test(bubbleType + type)) {\n\t\t\t\t\tcur = cur.parentNode;\n\t\t\t\t}\n\t\t\t\tfor (; cur; cur = cur.parentNode) {\n\t\t\t\t\teventPath.push(cur);\n\t\t\t\t\ttmp = cur;\n\t\t\t\t}\n\n\t\t\t\t// Only add window if we got to document (e.g., not plain obj or detached DOM)\n\t\t\t\tif (tmp === (elem.ownerDocument || document)) {\n\t\t\t\t\teventPath.push(tmp.defaultView || tmp.parentWindow || window);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Fire handlers on the event path\n\t\t\ti = 0;\n\t\t\twhile ((cur = eventPath[i++]) && !event.isPropagationStopped()) {\n\t\t\t\tlastElement = cur;\n\t\t\t\tevent.type = i > 1 ?\n\t\t\t\t\tbubbleType :\n\t\t\t\t\tspecial.bindType || type;\n\n\t\t\t\t// jQuery handler\n\t\t\t\thandle = (dataPriv.get(cur, \"events\") || Object.create(null))[event.type] &&\n\t\t\t\t\tdataPriv.get(cur, \"handle\");\n\t\t\t\tif (handle) {\n\t\t\t\t\thandle.apply(cur, data);\n\t\t\t\t}\n\n\t\t\t\t// Native handler\n\t\t\t\thandle = ontype && cur[ontype];\n\t\t\t\tif (handle && handle.apply && acceptData(cur)) {\n\t\t\t\t\tevent.result = handle.apply(cur, data);\n\t\t\t\t\tif (event.result === false) {\n\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tevent.type = type;\n\n\t\t\t// If nobody prevented the default action, do it now\n\t\t\tif (!onlyHandlers && !event.isDefaultPrevented()) {\n\n\t\t\t\tif ((!special._default ||\n\t\t\t\t\tspecial._default.apply(eventPath.pop(), data) === false) &&\n\t\t\t\t\tacceptData(elem)) {\n\n\t\t\t\t\t// Call a native DOM method on the target with the same name as the event.\n\t\t\t\t\t// Don't do default actions on window, that's where global variables be (trac-6170)\n\t\t\t\t\tif (ontype && isFunction(elem[type]) && !isWindow(elem)) {\n\n\t\t\t\t\t\t// Don't re-trigger an onFOO event when we call its FOO() method\n\t\t\t\t\t\ttmp = elem[ontype];\n\n\t\t\t\t\t\tif (tmp) {\n\t\t\t\t\t\t\telem[ontype] = null;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Prevent re-triggering of the same event, since we already bubbled it above\n\t\t\t\t\t\tjQuery.event.triggered = type;\n\n\t\t\t\t\t\tif (event.isPropagationStopped()) {\n\t\t\t\t\t\t\tlastElement.addEventListener(type, stopPropagationCallback);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\telem[type]();\n\n\t\t\t\t\t\tif (event.isPropagationStopped()) {\n\t\t\t\t\t\t\tlastElement.removeEventListener(type, stopPropagationCallback);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tjQuery.event.triggered = undefined;\n\n\t\t\t\t\t\tif (tmp) {\n\t\t\t\t\t\t\telem[ontype] = tmp;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn event.result;\n\t\t},\n\n\t\t// Piggyback on a donor event to simulate a different one\n\t\t// Used only for `focus(in | out)` events\n\t\tsimulate: function (type, elem, event) {\n\t\t\tvar e = jQuery.extend(\n\t\t\t\tnew jQuery.Event(),\n\t\t\t\tevent,\n\t\t\t\t{\n\t\t\t\t\ttype: type,\n\t\t\t\t\tisSimulated: true\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tjQuery.event.trigger(e, null, elem);\n\t\t}\n\n\t});\n\n\tjQuery.fn.extend({\n\n\t\ttrigger: function (type, data) {\n\t\t\treturn this.each(function () {\n\t\t\t\tjQuery.event.trigger(type, data, this);\n\t\t\t});\n\t\t},\n\t\ttriggerHandler: function (type, data) {\n\t\t\tvar elem = this[0];\n\t\t\tif (elem) {\n\t\t\t\treturn jQuery.event.trigger(type, data, elem, true);\n\t\t\t}\n\t\t}\n\t});\n\n\n\tvar\n\t\trbracket = /\\[\\]$/,\n\t\trCRLF = /\\r?\\n/g,\n\t\trsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,\n\t\trsubmittable = /^(?:input|select|textarea|keygen)/i;\n\n\tfunction buildParams(prefix, obj, traditional, add) {\n\t\tvar name;\n\n\t\tif (Array.isArray(obj)) {\n\n\t\t\t// Serialize array item.\n\t\t\tjQuery.each(obj, function (i, v) {\n\t\t\t\tif (traditional || rbracket.test(prefix)) {\n\n\t\t\t\t\t// Treat each array item as a scalar.\n\t\t\t\t\tadd(prefix, v);\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// Item is non-scalar (array or object), encode its numeric index.\n\t\t\t\t\tbuildParams(\n\t\t\t\t\t\tprefix + \"[\" + (typeof v === \"object\" && v != null ? i : \"\") + \"]\",\n\t\t\t\t\t\tv,\n\t\t\t\t\t\ttraditional,\n\t\t\t\t\t\tadd\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t});\n\n\t\t} else if (!traditional && toType(obj) === \"object\") {\n\n\t\t\t// Serialize object item.\n\t\t\tfor (name in obj) {\n\t\t\t\tbuildParams(prefix + \"[\" + name + \"]\", obj[name], traditional, add);\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// Serialize scalar item.\n\t\t\tadd(prefix, obj);\n\t\t}\n\t}\n\n\t// Serialize an array of form elements or a set of\n\t// key/values into a query string\n\tjQuery.param = function (a, traditional) {\n\t\tvar prefix,\n\t\t\ts = [],\n\t\t\tadd = function (key, valueOrFunction) {\n\n\t\t\t\t// If value is a function, invoke it and use its return value\n\t\t\t\tvar value = isFunction(valueOrFunction) ?\n\t\t\t\t\tvalueOrFunction() :\n\t\t\t\t\tvalueOrFunction;\n\n\t\t\t\ts[s.length] = encodeURIComponent(key) + \"=\" +\n\t\t\t\t\tencodeURIComponent(value == null ? \"\" : value);\n\t\t\t};\n\n\t\tif (a == null) {\n\t\t\treturn \"\";\n\t\t}\n\n\t\t// If an array was passed in, assume that it is an array of form elements.\n\t\tif (Array.isArray(a) || (a.jquery && !jQuery.isPlainObject(a))) {\n\n\t\t\t// Serialize the form elements\n\t\t\tjQuery.each(a, function () {\n\t\t\t\tadd(this.name, this.value);\n\t\t\t});\n\n\t\t} else {\n\n\t\t\t// If traditional, encode the \"old\" way (the way 1.3.2 or older\n\t\t\t// did it), otherwise encode params recursively.\n\t\t\tfor (prefix in a) {\n\t\t\t\tbuildParams(prefix, a[prefix], traditional, add);\n\t\t\t}\n\t\t}\n\n\t\t// Return the resulting serialization\n\t\treturn s.join(\"&\");\n\t};\n\n\tjQuery.fn.extend({\n\t\tserialize: function () {\n\t\t\treturn jQuery.param(this.serializeArray());\n\t\t},\n\t\tserializeArray: function () {\n\t\t\treturn this.map(function () {\n\n\t\t\t\t// Can add propHook for \"elements\" to filter or add form elements\n\t\t\t\tvar elements = jQuery.prop(this, \"elements\");\n\t\t\t\treturn elements ? jQuery.makeArray(elements) : this;\n\t\t\t}).filter(function () {\n\t\t\t\tvar type = this.type;\n\n\t\t\t\t// Use .is( \":disabled\" ) so that fieldset[disabled] works\n\t\t\t\treturn this.name && !jQuery(this).is(\":disabled\") &&\n\t\t\t\t\trsubmittable.test(this.nodeName) && !rsubmitterTypes.test(type) &&\n\t\t\t\t\t(this.checked || !rcheckableType.test(type));\n\t\t\t}).map(function (_i, elem) {\n\t\t\t\tvar val = jQuery(this).val();\n\n\t\t\t\tif (val == null) {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\n\t\t\t\tif (Array.isArray(val)) {\n\t\t\t\t\treturn jQuery.map(val, function (val) {\n\t\t\t\t\t\treturn { name: elem.name, value: val.replace(rCRLF, \"\\r\\n\") };\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\treturn { name: elem.name, value: val.replace(rCRLF, \"\\r\\n\") };\n\t\t\t}).get();\n\t\t}\n\t});\n\n\n\tvar\n\t\tr20 = /%20/g,\n\t\trhash = /#.*$/,\n\t\trantiCache = /([?&])_=[^&]*/,\n\t\trheaders = /^(.*?):[ \\t]*([^\\r\\n]*)$/mg,\n\n\t\t// trac-7653, trac-8125, trac-8152: local protocol detection\n\t\trlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,\n\t\trnoContent = /^(?:GET|HEAD)$/,\n\t\trprotocol = /^\\/\\//,\n\n\t\t/* Prefilters\n\t\t * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)\n\t\t * 2) These are called:\n\t\t *    - BEFORE asking for a transport\n\t\t *    - AFTER param serialization (s.data is a string if s.processData is true)\n\t\t * 3) key is the dataType\n\t\t * 4) the catchall symbol \"*\" can be used\n\t\t * 5) execution will start with transport dataType and THEN continue down to \"*\" if needed\n\t\t */\n\t\tprefilters = {},\n\n\t\t/* Transports bindings\n\t\t * 1) key is the dataType\n\t\t * 2) the catchall symbol \"*\" can be used\n\t\t * 3) selection will start with transport dataType and THEN go to \"*\" if needed\n\t\t */\n\t\ttransports = {},\n\n\t\t// Avoid comment-prolog char sequence (trac-10098); must appease lint and evade compression\n\t\tallTypes = \"*/\".concat(\"*\"),\n\n\t\t// Anchor tag for parsing the document origin\n\t\toriginAnchor = document.createElement(\"a\");\n\n\toriginAnchor.href = location.href;\n\n\t// Base \"constructor\" for jQuery.ajaxPrefilter and jQuery.ajaxTransport\n\tfunction addToPrefiltersOrTransports(structure) {\n\n\t\t// dataTypeExpression is optional and defaults to \"*\"\n\t\treturn function (dataTypeExpression, func) {\n\n\t\t\tif (typeof dataTypeExpression !== \"string\") {\n\t\t\t\tfunc = dataTypeExpression;\n\t\t\t\tdataTypeExpression = \"*\";\n\t\t\t}\n\n\t\t\tvar dataType,\n\t\t\t\ti = 0,\n\t\t\t\tdataTypes = dataTypeExpression.toLowerCase().match(rnothtmlwhite) || [];\n\n\t\t\tif (isFunction(func)) {\n\n\t\t\t\t// For each dataType in the dataTypeExpression\n\t\t\t\twhile ((dataType = dataTypes[i++])) {\n\n\t\t\t\t\t// Prepend if requested\n\t\t\t\t\tif (dataType[0] === \"+\") {\n\t\t\t\t\t\tdataType = dataType.slice(1) || \"*\";\n\t\t\t\t\t\t(structure[dataType] = structure[dataType] || []).unshift(func);\n\n\t\t\t\t\t\t// Otherwise append\n\t\t\t\t\t} else {\n\t\t\t\t\t\t(structure[dataType] = structure[dataType] || []).push(func);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n\n\t// Base inspection function for prefilters and transports\n\tfunction inspectPrefiltersOrTransports(structure, options, originalOptions, jqXHR) {\n\n\t\tvar inspected = {},\n\t\t\tseekingTransport = (structure === transports);\n\n\t\tfunction inspect(dataType) {\n\t\t\tvar selected;\n\t\t\tinspected[dataType] = true;\n\t\t\tjQuery.each(structure[dataType] || [], function (_, prefilterOrFactory) {\n\t\t\t\tvar dataTypeOrTransport = prefilterOrFactory(options, originalOptions, jqXHR);\n\t\t\t\tif (typeof dataTypeOrTransport === \"string\" &&\n\t\t\t\t\t!seekingTransport && !inspected[dataTypeOrTransport]) {\n\n\t\t\t\t\toptions.dataTypes.unshift(dataTypeOrTransport);\n\t\t\t\t\tinspect(dataTypeOrTransport);\n\t\t\t\t\treturn false;\n\t\t\t\t} else if (seekingTransport) {\n\t\t\t\t\treturn !(selected = dataTypeOrTransport);\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn selected;\n\t\t}\n\n\t\treturn inspect(options.dataTypes[0]) || !inspected[\"*\"] && inspect(\"*\");\n\t}\n\n\t// A special extend for ajax options\n\t// that takes \"flat\" options (not to be deep extended)\n\t// Fixes trac-9887\n\tfunction ajaxExtend(target, src) {\n\t\tvar key, deep,\n\t\t\tflatOptions = jQuery.ajaxSettings.flatOptions || {};\n\n\t\tfor (key in src) {\n\t\t\tif (src[key] !== undefined) {\n\t\t\t\t(flatOptions[key] ? target : (deep || (deep = {})))[key] = src[key];\n\t\t\t}\n\t\t}\n\t\tif (deep) {\n\t\t\tjQuery.extend(true, target, deep);\n\t\t}\n\n\t\treturn target;\n\t}\n\n\t/* Handles responses to an ajax request:\n\t * - finds the right dataType (mediates between content-type and expected dataType)\n\t * - returns the corresponding response\n\t */\n\tfunction ajaxHandleResponses(s, jqXHR, responses) {\n\n\t\tvar ct, type, finalDataType, firstDataType,\n\t\t\tcontents = s.contents,\n\t\t\tdataTypes = s.dataTypes;\n\n\t\t// Remove auto dataType and get content-type in the process\n\t\twhile (dataTypes[0] === \"*\") {\n\t\t\tdataTypes.shift();\n\t\t\tif (ct === undefined) {\n\t\t\t\tct = s.mimeType || jqXHR.getResponseHeader(\"Content-Type\");\n\t\t\t}\n\t\t}\n\n\t\t// Check if we're dealing with a known content-type\n\t\tif (ct) {\n\t\t\tfor (type in contents) {\n\t\t\t\tif (contents[type] && contents[type].test(ct)) {\n\t\t\t\t\tdataTypes.unshift(type);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Check to see if we have a response for the expected dataType\n\t\tif (dataTypes[0] in responses) {\n\t\t\tfinalDataType = dataTypes[0];\n\t\t} else {\n\n\t\t\t// Try convertible dataTypes\n\t\t\tfor (type in responses) {\n\t\t\t\tif (!dataTypes[0] || s.converters[type + \" \" + dataTypes[0]]) {\n\t\t\t\t\tfinalDataType = type;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (!firstDataType) {\n\t\t\t\t\tfirstDataType = type;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Or just use first one\n\t\t\tfinalDataType = finalDataType || firstDataType;\n\t\t}\n\n\t\t// If we found a dataType\n\t\t// We add the dataType to the list if needed\n\t\t// and return the corresponding response\n\t\tif (finalDataType) {\n\t\t\tif (finalDataType !== dataTypes[0]) {\n\t\t\t\tdataTypes.unshift(finalDataType);\n\t\t\t}\n\t\t\treturn responses[finalDataType];\n\t\t}\n\t}\n\n\t/* Chain conversions given the request and the original response\n\t * Also sets the responseXXX fields on the jqXHR instance\n\t */\n\tfunction ajaxConvert(s, response, jqXHR, isSuccess) {\n\t\tvar conv2, current, conv, tmp, prev,\n\t\t\tconverters = {},\n\n\t\t\t// Work with a copy of dataTypes in case we need to modify it for conversion\n\t\t\tdataTypes = s.dataTypes.slice();\n\n\t\t// Create converters map with lowercased keys\n\t\tif (dataTypes[1]) {\n\t\t\tfor (conv in s.converters) {\n\t\t\t\tconverters[conv.toLowerCase()] = s.converters[conv];\n\t\t\t}\n\t\t}\n\n\t\tcurrent = dataTypes.shift();\n\n\t\t// Convert to each sequential dataType\n\t\twhile (current) {\n\n\t\t\tif (s.responseFields[current]) {\n\t\t\t\tjqXHR[s.responseFields[current]] = response;\n\t\t\t}\n\n\t\t\t// Apply the dataFilter if provided\n\t\t\tif (!prev && isSuccess && s.dataFilter) {\n\t\t\t\tresponse = s.dataFilter(response, s.dataType);\n\t\t\t}\n\n\t\t\tprev = current;\n\t\t\tcurrent = dataTypes.shift();\n\n\t\t\tif (current) {\n\n\t\t\t\t// There's only work to do if current dataType is non-auto\n\t\t\t\tif (current === \"*\") {\n\n\t\t\t\t\tcurrent = prev;\n\n\t\t\t\t\t// Convert response if prev dataType is non-auto and differs from current\n\t\t\t\t} else if (prev !== \"*\" && prev !== current) {\n\n\t\t\t\t\t// Seek a direct converter\n\t\t\t\t\tconv = converters[prev + \" \" + current] || converters[\"* \" + current];\n\n\t\t\t\t\t// If none found, seek a pair\n\t\t\t\t\tif (!conv) {\n\t\t\t\t\t\tfor (conv2 in converters) {\n\n\t\t\t\t\t\t\t// If conv2 outputs current\n\t\t\t\t\t\t\ttmp = conv2.split(\" \");\n\t\t\t\t\t\t\tif (tmp[1] === current) {\n\n\t\t\t\t\t\t\t\t// If prev can be converted to accepted input\n\t\t\t\t\t\t\t\tconv = converters[prev + \" \" + tmp[0]] ||\n\t\t\t\t\t\t\t\t\tconverters[\"* \" + tmp[0]];\n\t\t\t\t\t\t\t\tif (conv) {\n\n\t\t\t\t\t\t\t\t\t// Condense equivalence converters\n\t\t\t\t\t\t\t\t\tif (conv === true) {\n\t\t\t\t\t\t\t\t\t\tconv = converters[conv2];\n\n\t\t\t\t\t\t\t\t\t\t// Otherwise, insert the intermediate dataType\n\t\t\t\t\t\t\t\t\t} else if (converters[conv2] !== true) {\n\t\t\t\t\t\t\t\t\t\tcurrent = tmp[0];\n\t\t\t\t\t\t\t\t\t\tdataTypes.unshift(tmp[1]);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Apply converter (if not an equivalence)\n\t\t\t\t\tif (conv !== true) {\n\n\t\t\t\t\t\t// Unless errors are allowed to bubble, catch and return them\n\t\t\t\t\t\tif (conv && s.throws) {\n\t\t\t\t\t\t\tresponse = conv(response);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\tresponse = conv(response);\n\t\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\tstate: \"parsererror\",\n\t\t\t\t\t\t\t\t\terror: conv ? e : \"No conversion from \" + prev + \" to \" + current\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn { state: \"success\", data: response };\n\t}\n\n\tjQuery.extend({\n\n\t\t// Counter for holding the number of active queries\n\t\tactive: 0,\n\n\t\t// Last-Modified header cache for next request\n\t\tlastModified: {},\n\t\tetag: {},\n\n\t\tajaxSettings: {\n\t\t\turl: location.href,\n\t\t\ttype: \"GET\",\n\t\t\tisLocal: rlocalProtocol.test(location.protocol),\n\t\t\tglobal: true,\n\t\t\tprocessData: true,\n\t\t\tasync: true,\n\t\t\tcontentType: \"application/x-www-form-urlencoded; charset=UTF-8\",\n\n\t\t\t/*\n\t\t\ttimeout: 0,\n\t\t\tdata: null,\n\t\t\tdataType: null,\n\t\t\tusername: null,\n\t\t\tpassword: null,\n\t\t\tcache: null,\n\t\t\tthrows: false,\n\t\t\ttraditional: false,\n\t\t\theaders: {},\n\t\t\t*/\n\n\t\t\taccepts: {\n\t\t\t\t\"*\": allTypes,\n\t\t\t\ttext: \"text/plain\",\n\t\t\t\thtml: \"text/html\",\n\t\t\t\txml: \"application/xml, text/xml\",\n\t\t\t\tjson: \"application/json, text/javascript\"\n\t\t\t},\n\n\t\t\tcontents: {\n\t\t\t\txml: /\\bxml\\b/,\n\t\t\t\thtml: /\\bhtml/,\n\t\t\t\tjson: /\\bjson\\b/\n\t\t\t},\n\n\t\t\tresponseFields: {\n\t\t\t\txml: \"responseXML\",\n\t\t\t\ttext: \"responseText\",\n\t\t\t\tjson: \"responseJSON\"\n\t\t\t},\n\n\t\t\t// Data converters\n\t\t\t// Keys separate source (or catchall \"*\") and destination types with a single space\n\t\t\tconverters: {\n\n\t\t\t\t// Convert anything to text\n\t\t\t\t\"* text\": String,\n\n\t\t\t\t// Text to html (true = no transformation)\n\t\t\t\t\"text html\": true,\n\n\t\t\t\t// Evaluate text as a json expression\n\t\t\t\t\"text json\": JSON.parse,\n\n\t\t\t\t// Parse text as xml\n\t\t\t\t\"text xml\": jQuery.parseXML\n\t\t\t},\n\n\t\t\t// For options that shouldn't be deep extended:\n\t\t\t// you can add your own custom options here if\n\t\t\t// and when you create one that shouldn't be\n\t\t\t// deep extended (see ajaxExtend)\n\t\t\tflatOptions: {\n\t\t\t\turl: true,\n\t\t\t\tcontext: true\n\t\t\t}\n\t\t},\n\n\t\t// Creates a full fledged settings object into target\n\t\t// with both ajaxSettings and settings fields.\n\t\t// If target is omitted, writes into ajaxSettings.\n\t\tajaxSetup: function (target, settings) {\n\t\t\treturn settings ?\n\n\t\t\t\t// Building a settings object\n\t\t\t\tajaxExtend(ajaxExtend(target, jQuery.ajaxSettings), settings) :\n\n\t\t\t\t// Extending ajaxSettings\n\t\t\t\tajaxExtend(jQuery.ajaxSettings, target);\n\t\t},\n\n\t\tajaxPrefilter: addToPrefiltersOrTransports(prefilters),\n\t\tajaxTransport: addToPrefiltersOrTransports(transports),\n\n\t\t// Main method\n\t\tajax: function (url, options) {\n\n\t\t\t// If url is an object, simulate pre-1.5 signature\n\t\t\tif (typeof url === \"object\") {\n\t\t\t\toptions = url;\n\t\t\t\turl = undefined;\n\t\t\t}\n\n\t\t\t// Force options to be an object\n\t\t\toptions = options || {};\n\n\t\t\tvar transport,\n\n\t\t\t\t// URL without anti-cache param\n\t\t\t\tcacheURL,\n\n\t\t\t\t// Response headers\n\t\t\t\tresponseHeadersString,\n\t\t\t\tresponseHeaders,\n\n\t\t\t\t// timeout handle\n\t\t\t\ttimeoutTimer,\n\n\t\t\t\t// Url cleanup var\n\t\t\t\turlAnchor,\n\n\t\t\t\t// Request state (becomes false upon send and true upon completion)\n\t\t\t\tcompleted,\n\n\t\t\t\t// To know if global events are to be dispatched\n\t\t\t\tfireGlobals,\n\n\t\t\t\t// Loop variable\n\t\t\t\ti,\n\n\t\t\t\t// uncached part of the url\n\t\t\t\tuncached,\n\n\t\t\t\t// Create the final options object\n\t\t\t\ts = jQuery.ajaxSetup({}, options),\n\n\t\t\t\t// Callbacks context\n\t\t\t\tcallbackContext = s.context || s,\n\n\t\t\t\t// Context for global events is callbackContext if it is a DOM node or jQuery collection\n\t\t\t\tglobalEventContext = s.context &&\n\t\t\t\t\t(callbackContext.nodeType || callbackContext.jquery) ?\n\t\t\t\t\tjQuery(callbackContext) :\n\t\t\t\t\tjQuery.event,\n\n\t\t\t\t// Deferreds\n\t\t\t\tdeferred = jQuery.Deferred(),\n\t\t\t\tcompleteDeferred = jQuery.Callbacks(\"once memory\"),\n\n\t\t\t\t// Status-dependent callbacks\n\t\t\t\tstatusCode = s.statusCode || {},\n\n\t\t\t\t// Headers (they are sent all at once)\n\t\t\t\trequestHeaders = {},\n\t\t\t\trequestHeadersNames = {},\n\n\t\t\t\t// Default abort message\n\t\t\t\tstrAbort = \"canceled\",\n\n\t\t\t\t// Fake xhr\n\t\t\t\tjqXHR = {\n\t\t\t\t\treadyState: 0,\n\n\t\t\t\t\t// Builds headers hashtable if needed\n\t\t\t\t\tgetResponseHeader: function (key) {\n\t\t\t\t\t\tvar match;\n\t\t\t\t\t\tif (completed) {\n\t\t\t\t\t\t\tif (!responseHeaders) {\n\t\t\t\t\t\t\t\tresponseHeaders = {};\n\t\t\t\t\t\t\t\twhile ((match = rheaders.exec(responseHeadersString))) {\n\t\t\t\t\t\t\t\t\tresponseHeaders[match[1].toLowerCase() + \" \"] =\n\t\t\t\t\t\t\t\t\t\t(responseHeaders[match[1].toLowerCase() + \" \"] || [])\n\t\t\t\t\t\t\t\t\t\t\t.concat(match[2]);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tmatch = responseHeaders[key.toLowerCase() + \" \"];\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn match == null ? null : match.join(\", \");\n\t\t\t\t\t},\n\n\t\t\t\t\t// Raw string\n\t\t\t\t\tgetAllResponseHeaders: function () {\n\t\t\t\t\t\treturn completed ? responseHeadersString : null;\n\t\t\t\t\t},\n\n\t\t\t\t\t// Caches the header\n\t\t\t\t\tsetRequestHeader: function (name, value) {\n\t\t\t\t\t\tif (completed == null) {\n\t\t\t\t\t\t\tname = requestHeadersNames[name.toLowerCase()] =\n\t\t\t\t\t\t\t\trequestHeadersNames[name.toLowerCase()] || name;\n\t\t\t\t\t\t\trequestHeaders[name] = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn this;\n\t\t\t\t\t},\n\n\t\t\t\t\t// Overrides response content-type header\n\t\t\t\t\toverrideMimeType: function (type) {\n\t\t\t\t\t\tif (completed == null) {\n\t\t\t\t\t\t\ts.mimeType = type;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn this;\n\t\t\t\t\t},\n\n\t\t\t\t\t// Status-dependent callbacks\n\t\t\t\t\tstatusCode: function (map) {\n\t\t\t\t\t\tvar code;\n\t\t\t\t\t\tif (map) {\n\t\t\t\t\t\t\tif (completed) {\n\n\t\t\t\t\t\t\t\t// Execute the appropriate callbacks\n\t\t\t\t\t\t\t\tjqXHR.always(map[jqXHR.status]);\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t// Lazy-add the new callbacks in a way that preserves old ones\n\t\t\t\t\t\t\t\tfor (code in map) {\n\t\t\t\t\t\t\t\t\tstatusCode[code] = [statusCode[code], map[code]];\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn this;\n\t\t\t\t\t},\n\n\t\t\t\t\t// Cancel the request\n\t\t\t\t\tabort: function (statusText) {\n\t\t\t\t\t\tvar finalText = statusText || strAbort;\n\t\t\t\t\t\tif (transport) {\n\t\t\t\t\t\t\ttransport.abort(finalText);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdone(0, finalText);\n\t\t\t\t\t\treturn this;\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t// Attach deferreds\n\t\t\tdeferred.promise(jqXHR);\n\n\t\t\t// Add protocol if not provided (prefilters might expect it)\n\t\t\t// Handle falsy url in the settings object (trac-10093: consistency with old signature)\n\t\t\t// We also use the url parameter if available\n\t\t\ts.url = ((url || s.url || location.href) + \"\")\n\t\t\t\t.replace(rprotocol, location.protocol + \"//\");\n\n\t\t\t// Alias method option to type as per ticket trac-12004\n\t\t\ts.type = options.method || options.type || s.method || s.type;\n\n\t\t\t// Extract dataTypes list\n\t\t\ts.dataTypes = (s.dataType || \"*\").toLowerCase().match(rnothtmlwhite) || [\"\"];\n\n\t\t\t// A cross-domain request is in order when the origin doesn't match the current origin.\n\t\t\tif (s.crossDomain == null) {\n\t\t\t\turlAnchor = document.createElement(\"a\");\n\n\t\t\t\t// Support: IE <=8 - 11, Edge 12 - 15\n\t\t\t\t// IE throws exception on accessing the href property if url is malformed,\n\t\t\t\t// e.g. http://example.com:80x/\n\t\t\t\ttry {\n\t\t\t\t\turlAnchor.href = s.url;\n\n\t\t\t\t\t// Support: IE <=8 - 11 only\n\t\t\t\t\t// Anchor's host property isn't correctly set when s.url is relative\n\t\t\t\t\turlAnchor.href = urlAnchor.href;\n\t\t\t\t\ts.crossDomain = originAnchor.protocol + \"//\" + originAnchor.host !==\n\t\t\t\t\t\turlAnchor.protocol + \"//\" + urlAnchor.host;\n\t\t\t\t} catch (e) {\n\n\t\t\t\t\t// If there is an error parsing the URL, assume it is crossDomain,\n\t\t\t\t\t// it can be rejected by the transport if it is invalid\n\t\t\t\t\ts.crossDomain = true;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Convert data if not already a string\n\t\t\tif (s.data && s.processData && typeof s.data !== \"string\") {\n\t\t\t\ts.data = jQuery.param(s.data, s.traditional);\n\t\t\t}\n\n\t\t\t// Apply prefilters\n\t\t\tinspectPrefiltersOrTransports(prefilters, s, options, jqXHR);\n\n\t\t\t// If request was aborted inside a prefilter, stop there\n\t\t\tif (completed) {\n\t\t\t\treturn jqXHR;\n\t\t\t}\n\n\t\t\t// We can fire global events as of now if asked to\n\t\t\t// Don't fire events if jQuery.event is undefined in an AMD-usage scenario (trac-15118)\n\t\t\tfireGlobals = jQuery.event && s.global;\n\n\t\t\t// Watch for a new set of requests\n\t\t\tif (fireGlobals && jQuery.active++ === 0) {\n\t\t\t\tjQuery.event.trigger(\"ajaxStart\");\n\t\t\t}\n\n\t\t\t// Uppercase the type\n\t\t\ts.type = s.type.toUpperCase();\n\n\t\t\t// Determine if request has content\n\t\t\ts.hasContent = !rnoContent.test(s.type);\n\n\t\t\t// Save the URL in case we're toying with the If-Modified-Since\n\t\t\t// and/or If-None-Match header later on\n\t\t\t// Remove hash to simplify url manipulation\n\t\t\tcacheURL = s.url.replace(rhash, \"\");\n\n\t\t\t// More options handling for requests with no content\n\t\t\tif (!s.hasContent) {\n\n\t\t\t\t// Remember the hash so we can put it back\n\t\t\t\tuncached = s.url.slice(cacheURL.length);\n\n\t\t\t\t// If data is available and should be processed, append data to url\n\t\t\t\tif (s.data && (s.processData || typeof s.data === \"string\")) {\n\t\t\t\t\tcacheURL += (rquery.test(cacheURL) ? \"&\" : \"?\") + s.data;\n\n\t\t\t\t\t// trac-9682: remove data so that it's not used in an eventual retry\n\t\t\t\t\tdelete s.data;\n\t\t\t\t}\n\n\t\t\t\t// Add or update anti-cache param if needed\n\t\t\t\tif (s.cache === false) {\n\t\t\t\t\tcacheURL = cacheURL.replace(rantiCache, \"$1\");\n\t\t\t\t\tuncached = (rquery.test(cacheURL) ? \"&\" : \"?\") + \"_=\" + (nonce.guid++) +\n\t\t\t\t\t\tuncached;\n\t\t\t\t}\n\n\t\t\t\t// Put hash and anti-cache on the URL that will be requested (gh-1732)\n\t\t\t\ts.url = cacheURL + uncached;\n\n\t\t\t\t// Change '%20' to '+' if this is encoded form body content (gh-2658)\n\t\t\t} else if (s.data && s.processData &&\n\t\t\t\t(s.contentType || \"\").indexOf(\"application/x-www-form-urlencoded\") === 0) {\n\t\t\t\ts.data = s.data.replace(r20, \"+\");\n\t\t\t}\n\n\t\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\t\tif (s.ifModified) {\n\t\t\t\tif (jQuery.lastModified[cacheURL]) {\n\t\t\t\t\tjqXHR.setRequestHeader(\"If-Modified-Since\", jQuery.lastModified[cacheURL]);\n\t\t\t\t}\n\t\t\t\tif (jQuery.etag[cacheURL]) {\n\t\t\t\t\tjqXHR.setRequestHeader(\"If-None-Match\", jQuery.etag[cacheURL]);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Set the correct header, if data is being sent\n\t\t\tif (s.data && s.hasContent && s.contentType !== false || options.contentType) {\n\t\t\t\tjqXHR.setRequestHeader(\"Content-Type\", s.contentType);\n\t\t\t}\n\n\t\t\t// Set the Accepts header for the server, depending on the dataType\n\t\t\tjqXHR.setRequestHeader(\n\t\t\t\t\"Accept\",\n\t\t\t\ts.dataTypes[0] && s.accepts[s.dataTypes[0]] ?\n\t\t\t\t\ts.accepts[s.dataTypes[0]] +\n\t\t\t\t\t(s.dataTypes[0] !== \"*\" ? \", \" + allTypes + \"; q=0.01\" : \"\") :\n\t\t\t\t\ts.accepts[\"*\"]\n\t\t\t);\n\n\t\t\t// Check for headers option\n\t\t\tfor (i in s.headers) {\n\t\t\t\tjqXHR.setRequestHeader(i, s.headers[i]);\n\t\t\t}\n\n\t\t\t// Allow custom headers/mimetypes and early abort\n\t\t\tif (s.beforeSend &&\n\t\t\t\t(s.beforeSend.call(callbackContext, jqXHR, s) === false || completed)) {\n\n\t\t\t\t// Abort if not done already and return\n\t\t\t\treturn jqXHR.abort();\n\t\t\t}\n\n\t\t\t// Aborting is no longer a cancellation\n\t\t\tstrAbort = \"abort\";\n\n\t\t\t// Install callbacks on deferreds\n\t\t\tcompleteDeferred.add(s.complete);\n\t\t\tjqXHR.done(s.success);\n\t\t\tjqXHR.fail(s.error);\n\n\t\t\t// Get transport\n\t\t\ttransport = inspectPrefiltersOrTransports(transports, s, options, jqXHR);\n\n\t\t\t// If no transport, we auto-abort\n\t\t\tif (!transport) {\n\t\t\t\tdone(-1, \"No Transport\");\n\t\t\t} else {\n\t\t\t\tjqXHR.readyState = 1;\n\n\t\t\t\t// Send global event\n\t\t\t\tif (fireGlobals) {\n\t\t\t\t\tglobalEventContext.trigger(\"ajaxSend\", [jqXHR, s]);\n\t\t\t\t}\n\n\t\t\t\t// If request was aborted inside ajaxSend, stop there\n\t\t\t\tif (completed) {\n\t\t\t\t\treturn jqXHR;\n\t\t\t\t}\n\n\t\t\t\t// Timeout\n\t\t\t\tif (s.async && s.timeout > 0) {\n\t\t\t\t\ttimeoutTimer = window.setTimeout(function () {\n\t\t\t\t\t\tjqXHR.abort(\"timeout\");\n\t\t\t\t\t}, s.timeout);\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tcompleted = false;\n\t\t\t\t\ttransport.send(requestHeaders, done);\n\t\t\t\t} catch (e) {\n\n\t\t\t\t\t// Rethrow post-completion exceptions\n\t\t\t\t\tif (completed) {\n\t\t\t\t\t\tthrow e;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Propagate others as results\n\t\t\t\t\tdone(-1, e);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Callback for when everything is done\n\t\t\tfunction done(status, nativeStatusText, responses, headers) {\n\t\t\t\tvar isSuccess, success, error, response, modified,\n\t\t\t\t\tstatusText = nativeStatusText;\n\n\t\t\t\t// Ignore repeat invocations\n\t\t\t\tif (completed) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tcompleted = true;\n\n\t\t\t\t// Clear timeout if it exists\n\t\t\t\tif (timeoutTimer) {\n\t\t\t\t\twindow.clearTimeout(timeoutTimer);\n\t\t\t\t}\n\n\t\t\t\t// Dereference transport for early garbage collection\n\t\t\t\t// (no matter how long the jqXHR object will be used)\n\t\t\t\ttransport = undefined;\n\n\t\t\t\t// Cache response headers\n\t\t\t\tresponseHeadersString = headers || \"\";\n\n\t\t\t\t// Set readyState\n\t\t\t\tjqXHR.readyState = status > 0 ? 4 : 0;\n\n\t\t\t\t// Determine if successful\n\t\t\t\tisSuccess = status >= 200 && status < 300 || status === 304;\n\n\t\t\t\t// Get response data\n\t\t\t\tif (responses) {\n\t\t\t\t\tresponse = ajaxHandleResponses(s, jqXHR, responses);\n\t\t\t\t}\n\n\t\t\t\t// Use a noop converter for missing script but not if jsonp\n\t\t\t\tif (!isSuccess &&\n\t\t\t\t\tjQuery.inArray(\"script\", s.dataTypes) > -1 &&\n\t\t\t\t\tjQuery.inArray(\"json\", s.dataTypes) < 0) {\n\t\t\t\t\ts.converters[\"text script\"] = function () { };\n\t\t\t\t}\n\n\t\t\t\t// Convert no matter what (that way responseXXX fields are always set)\n\t\t\t\tresponse = ajaxConvert(s, response, jqXHR, isSuccess);\n\n\t\t\t\t// If successful, handle type chaining\n\t\t\t\tif (isSuccess) {\n\n\t\t\t\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\t\t\t\tif (s.ifModified) {\n\t\t\t\t\t\tmodified = jqXHR.getResponseHeader(\"Last-Modified\");\n\t\t\t\t\t\tif (modified) {\n\t\t\t\t\t\t\tjQuery.lastModified[cacheURL] = modified;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmodified = jqXHR.getResponseHeader(\"etag\");\n\t\t\t\t\t\tif (modified) {\n\t\t\t\t\t\t\tjQuery.etag[cacheURL] = modified;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// if no content\n\t\t\t\t\tif (status === 204 || s.type === \"HEAD\") {\n\t\t\t\t\t\tstatusText = \"nocontent\";\n\n\t\t\t\t\t\t// if not modified\n\t\t\t\t\t} else if (status === 304) {\n\t\t\t\t\t\tstatusText = \"notmodified\";\n\n\t\t\t\t\t\t// If we have data, let's convert it\n\t\t\t\t\t} else {\n\t\t\t\t\t\tstatusText = response.state;\n\t\t\t\t\t\tsuccess = response.data;\n\t\t\t\t\t\terror = response.error;\n\t\t\t\t\t\tisSuccess = !error;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\n\t\t\t\t\t// Extract error from statusText and normalize for non-aborts\n\t\t\t\t\terror = statusText;\n\t\t\t\t\tif (status || !statusText) {\n\t\t\t\t\t\tstatusText = \"error\";\n\t\t\t\t\t\tif (status < 0) {\n\t\t\t\t\t\t\tstatus = 0;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Set data for the fake xhr object\n\t\t\t\tjqXHR.status = status;\n\t\t\t\tjqXHR.statusText = (nativeStatusText || statusText) + \"\";\n\n\t\t\t\t// Success/Error\n\t\t\t\tif (isSuccess) {\n\t\t\t\t\tdeferred.resolveWith(callbackContext, [success, statusText, jqXHR]);\n\t\t\t\t} else {\n\t\t\t\t\tdeferred.rejectWith(callbackContext, [jqXHR, statusText, error]);\n\t\t\t\t}\n\n\t\t\t\t// Status-dependent callbacks\n\t\t\t\tjqXHR.statusCode(statusCode);\n\t\t\t\tstatusCode = undefined;\n\n\t\t\t\tif (fireGlobals) {\n\t\t\t\t\tglobalEventContext.trigger(isSuccess ? \"ajaxSuccess\" : \"ajaxError\",\n\t\t\t\t\t\t[jqXHR, s, isSuccess ? success : error]);\n\t\t\t\t}\n\n\t\t\t\t// Complete\n\t\t\t\tcompleteDeferred.fireWith(callbackContext, [jqXHR, statusText]);\n\n\t\t\t\tif (fireGlobals) {\n\t\t\t\t\tglobalEventContext.trigger(\"ajaxComplete\", [jqXHR, s]);\n\n\t\t\t\t\t// Handle the global AJAX counter\n\t\t\t\t\tif (!(--jQuery.active)) {\n\t\t\t\t\t\tjQuery.event.trigger(\"ajaxStop\");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn jqXHR;\n\t\t},\n\n\t\tgetJSON: function (url, data, callback) {\n\t\t\treturn jQuery.get(url, data, callback, \"json\");\n\t\t},\n\n\t\tgetScript: function (url, callback) {\n\t\t\treturn jQuery.get(url, undefined, callback, \"script\");\n\t\t}\n\t});\n\n\tjQuery.each([\"get\", \"post\"], function (_i, method) {\n\t\tjQuery[method] = function (url, data, callback, type) {\n\n\t\t\t// Shift arguments if data argument was omitted\n\t\t\tif (isFunction(data)) {\n\t\t\t\ttype = type || callback;\n\t\t\t\tcallback = data;\n\t\t\t\tdata = undefined;\n\t\t\t}\n\n\t\t\t// The url can be an options object (which then must have .url)\n\t\t\treturn jQuery.ajax(jQuery.extend({\n\t\t\t\turl: url,\n\t\t\t\ttype: method,\n\t\t\t\tdataType: type,\n\t\t\t\tdata: data,\n\t\t\t\tsuccess: callback\n\t\t\t}, jQuery.isPlainObject(url) && url));\n\t\t};\n\t});\n\n\tjQuery.ajaxPrefilter(function (s) {\n\t\tvar i;\n\t\tfor (i in s.headers) {\n\t\t\tif (i.toLowerCase() === \"content-type\") {\n\t\t\t\ts.contentType = s.headers[i] || \"\";\n\t\t\t}\n\t\t}\n\t});\n\n\n\tjQuery._evalUrl = function (url, options, doc) {\n\t\treturn jQuery.ajax({\n\t\t\turl: url,\n\n\t\t\t// Make this explicit, since user can override this through ajaxSetup (trac-11264)\n\t\t\ttype: \"GET\",\n\t\t\tdataType: \"script\",\n\t\t\tcache: true,\n\t\t\tasync: false,\n\t\t\tglobal: false,\n\n\t\t\t// Only evaluate the response if it is successful (gh-4126)\n\t\t\t// dataFilter is not invoked for failure responses, so using it instead\n\t\t\t// of the default converter is kludgy but it works.\n\t\t\tconverters: {\n\t\t\t\t\"text script\": function () { }\n\t\t\t},\n\t\t\tdataFilter: function (response) {\n\t\t\t\tjQuery.globalEval(response, options, doc);\n\t\t\t}\n\t\t});\n\t};\n\n\n\tjQuery.fn.extend({\n\t\twrapAll: function (html) {\n\t\t\tvar wrap;\n\n\t\t\tif (this[0]) {\n\t\t\t\tif (isFunction(html)) {\n\t\t\t\t\thtml = html.call(this[0]);\n\t\t\t\t}\n\n\t\t\t\t// The elements to wrap the target around\n\t\t\t\twrap = jQuery(html, this[0].ownerDocument).eq(0).clone(true);\n\n\t\t\t\tif (this[0].parentNode) {\n\t\t\t\t\twrap.insertBefore(this[0]);\n\t\t\t\t}\n\n\t\t\t\twrap.map(function () {\n\t\t\t\t\tvar elem = this;\n\n\t\t\t\t\twhile (elem.firstElementChild) {\n\t\t\t\t\t\telem = elem.firstElementChild;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn elem;\n\t\t\t\t}).append(this);\n\t\t\t}\n\n\t\t\treturn this;\n\t\t},\n\n\t\twrapInner: function (html) {\n\t\t\tif (isFunction(html)) {\n\t\t\t\treturn this.each(function (i) {\n\t\t\t\t\tjQuery(this).wrapInner(html.call(this, i));\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn this.each(function () {\n\t\t\t\tvar self = jQuery(this),\n\t\t\t\t\tcontents = self.contents();\n\n\t\t\t\tif (contents.length) {\n\t\t\t\t\tcontents.wrapAll(html);\n\n\t\t\t\t} else {\n\t\t\t\t\tself.append(html);\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\twrap: function (html) {\n\t\t\tvar htmlIsFunction = isFunction(html);\n\n\t\t\treturn this.each(function (i) {\n\t\t\t\tjQuery(this).wrapAll(htmlIsFunction ? html.call(this, i) : html);\n\t\t\t});\n\t\t},\n\n\t\tunwrap: function (selector) {\n\t\t\tthis.parent(selector).not(\"body\").each(function () {\n\t\t\t\tjQuery(this).replaceWith(this.childNodes);\n\t\t\t});\n\t\t\treturn this;\n\t\t}\n\t});\n\n\n\tjQuery.expr.pseudos.hidden = function (elem) {\n\t\treturn !jQuery.expr.pseudos.visible(elem);\n\t};\n\tjQuery.expr.pseudos.visible = function (elem) {\n\t\treturn !!(elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length);\n\t};\n\n\n\n\n\tjQuery.ajaxSettings.xhr = function () {\n\t\ttry {\n\t\t\treturn new window.XMLHttpRequest();\n\t\t} catch (e) { }\n\t};\n\n\tvar xhrSuccessStatus = {\n\n\t\t// File protocol always yields status code 0, assume 200\n\t\t0: 200,\n\n\t\t// Support: IE <=9 only\n\t\t// trac-1450: sometimes IE returns 1223 when it should be 204\n\t\t1223: 204\n\t},\n\t\txhrSupported = jQuery.ajaxSettings.xhr();\n\n\tsupport.cors = !!xhrSupported && (\"withCredentials\" in xhrSupported);\n\tsupport.ajax = xhrSupported = !!xhrSupported;\n\n\tjQuery.ajaxTransport(function (options) {\n\t\tvar callback, errorCallback;\n\n\t\t// Cross domain only allowed if supported through XMLHttpRequest\n\t\tif (support.cors || xhrSupported && !options.crossDomain) {\n\t\t\treturn {\n\t\t\t\tsend: function (headers, complete) {\n\t\t\t\t\tvar i,\n\t\t\t\t\t\txhr = options.xhr();\n\n\t\t\t\t\txhr.open(\n\t\t\t\t\t\toptions.type,\n\t\t\t\t\t\toptions.url,\n\t\t\t\t\t\toptions.async,\n\t\t\t\t\t\toptions.username,\n\t\t\t\t\t\toptions.password\n\t\t\t\t\t);\n\n\t\t\t\t\t// Apply custom fields if provided\n\t\t\t\t\tif (options.xhrFields) {\n\t\t\t\t\t\tfor (i in options.xhrFields) {\n\t\t\t\t\t\t\txhr[i] = options.xhrFields[i];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Override mime type if needed\n\t\t\t\t\tif (options.mimeType && xhr.overrideMimeType) {\n\t\t\t\t\t\txhr.overrideMimeType(options.mimeType);\n\t\t\t\t\t}\n\n\t\t\t\t\t// X-Requested-With header\n\t\t\t\t\t// For cross-domain requests, seeing as conditions for a preflight are\n\t\t\t\t\t// akin to a jigsaw puzzle, we simply never set it to be sure.\n\t\t\t\t\t// (it can always be set on a per-request basis or even using ajaxSetup)\n\t\t\t\t\t// For same-domain requests, won't change header if already provided.\n\t\t\t\t\tif (!options.crossDomain && !headers[\"X-Requested-With\"]) {\n\t\t\t\t\t\theaders[\"X-Requested-With\"] = \"XMLHttpRequest\";\n\t\t\t\t\t}\n\n\t\t\t\t\t// Set headers\n\t\t\t\t\tfor (i in headers) {\n\t\t\t\t\t\txhr.setRequestHeader(i, headers[i]);\n\t\t\t\t\t}\n\n\t\t\t\t\t// Callback\n\t\t\t\t\tcallback = function (type) {\n\t\t\t\t\t\treturn function () {\n\t\t\t\t\t\t\tif (callback) {\n\t\t\t\t\t\t\t\tcallback = errorCallback = xhr.onload =\n\t\t\t\t\t\t\t\t\txhr.onerror = xhr.onabort = xhr.ontimeout =\n\t\t\t\t\t\t\t\t\txhr.onreadystatechange = null;\n\n\t\t\t\t\t\t\t\tif (type === \"abort\") {\n\t\t\t\t\t\t\t\t\txhr.abort();\n\t\t\t\t\t\t\t\t} else if (type === \"error\") {\n\n\t\t\t\t\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t\t\t\t\t// On a manual native abort, IE9 throws\n\t\t\t\t\t\t\t\t\t// errors on any property access that is not readyState\n\t\t\t\t\t\t\t\t\tif (typeof xhr.status !== \"number\") {\n\t\t\t\t\t\t\t\t\t\tcomplete(0, \"error\");\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tcomplete(\n\n\t\t\t\t\t\t\t\t\t\t\t// File: protocol always yields status 0; see trac-8605, trac-14207\n\t\t\t\t\t\t\t\t\t\t\txhr.status,\n\t\t\t\t\t\t\t\t\t\t\txhr.statusText\n\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tcomplete(\n\t\t\t\t\t\t\t\t\t\txhrSuccessStatus[xhr.status] || xhr.status,\n\t\t\t\t\t\t\t\t\t\txhr.statusText,\n\n\t\t\t\t\t\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t\t\t\t\t\t// IE9 has no XHR2 but throws on binary (trac-11426)\n\t\t\t\t\t\t\t\t\t\t// For XHR2 non-text, let the caller handle it (gh-2498)\n\t\t\t\t\t\t\t\t\t\t(xhr.responseType || \"text\") !== \"text\" ||\n\t\t\t\t\t\t\t\t\t\t\ttypeof xhr.responseText !== \"string\" ?\n\t\t\t\t\t\t\t\t\t\t\t{ binary: xhr.response } :\n\t\t\t\t\t\t\t\t\t\t\t{ text: xhr.responseText },\n\t\t\t\t\t\t\t\t\t\txhr.getAllResponseHeaders()\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\t\t\t\t\t};\n\n\t\t\t\t\t// Listen to events\n\t\t\t\t\txhr.onload = callback();\n\t\t\t\t\terrorCallback = xhr.onerror = xhr.ontimeout = callback(\"error\");\n\n\t\t\t\t\t// Support: IE 9 only\n\t\t\t\t\t// Use onreadystatechange to replace onabort\n\t\t\t\t\t// to handle uncaught aborts\n\t\t\t\t\tif (xhr.onabort !== undefined) {\n\t\t\t\t\t\txhr.onabort = errorCallback;\n\t\t\t\t\t} else {\n\t\t\t\t\t\txhr.onreadystatechange = function () {\n\n\t\t\t\t\t\t\t// Check readyState before timeout as it changes\n\t\t\t\t\t\t\tif (xhr.readyState === 4) {\n\n\t\t\t\t\t\t\t\t// Allow onerror to be called first,\n\t\t\t\t\t\t\t\t// but that will not handle a native abort\n\t\t\t\t\t\t\t\t// Also, save errorCallback to a variable\n\t\t\t\t\t\t\t\t// as xhr.onerror cannot be accessed\n\t\t\t\t\t\t\t\twindow.setTimeout(function () {\n\t\t\t\t\t\t\t\t\tif (callback) {\n\t\t\t\t\t\t\t\t\t\terrorCallback();\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\t// Create the abort callback\n\t\t\t\t\tcallback = callback(\"abort\");\n\n\t\t\t\t\ttry {\n\n\t\t\t\t\t\t// Do send the request (this may raise an exception)\n\t\t\t\t\t\txhr.send(options.hasContent && options.data || null);\n\t\t\t\t\t} catch (e) {\n\n\t\t\t\t\t\t// trac-14683: Only rethrow if this hasn't been notified as an error yet\n\t\t\t\t\t\tif (callback) {\n\t\t\t\t\t\t\tthrow e;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\t\tabort: function () {\n\t\t\t\t\tif (callback) {\n\t\t\t\t\t\tcallback();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t});\n\n\n\n\n\t// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432)\n\tjQuery.ajaxPrefilter(function (s) {\n\t\tif (s.crossDomain) {\n\t\t\ts.contents.script = false;\n\t\t}\n\t});\n\n\t// Install script dataType\n\tjQuery.ajaxSetup({\n\t\taccepts: {\n\t\t\tscript: \"text/javascript, application/javascript, \" +\n\t\t\t\t\"application/ecmascript, application/x-ecmascript\"\n\t\t},\n\t\tcontents: {\n\t\t\tscript: /\\b(?:java|ecma)script\\b/\n\t\t},\n\t\tconverters: {\n\t\t\t\"text script\": function (text) {\n\t\t\t\tjQuery.globalEval(text);\n\t\t\t\treturn text;\n\t\t\t}\n\t\t}\n\t});\n\n\t// Handle cache's special case and crossDomain\n\tjQuery.ajaxPrefilter(\"script\", function (s) {\n\t\tif (s.cache === undefined) {\n\t\t\ts.cache = false;\n\t\t}\n\t\tif (s.crossDomain) {\n\t\t\ts.type = \"GET\";\n\t\t}\n\t});\n\n\t// Bind script tag hack transport\n\tjQuery.ajaxTransport(\"script\", function (s) {\n\n\t\t// This transport only deals with cross domain or forced-by-attrs requests\n\t\tif (s.crossDomain || s.scriptAttrs) {\n\t\t\tvar script, callback;\n\t\t\treturn {\n\t\t\t\tsend: function (_, complete) {\n\t\t\t\t\tscript = jQuery(\"<script>\")\n\t\t\t\t\t\t.attr(s.scriptAttrs || {})\n\t\t\t\t\t\t.prop({ charset: s.scriptCharset, src: s.url })\n\t\t\t\t\t\t.on(\"load error\", callback = function (evt) {\n\t\t\t\t\t\t\tscript.remove();\n\t\t\t\t\t\t\tcallback = null;\n\t\t\t\t\t\t\tif (evt) {\n\t\t\t\t\t\t\t\tcomplete(evt.type === \"error\" ? 404 : 200, evt.type);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\n\t\t\t\t\t// Use native DOM manipulation to avoid our domManip AJAX trickery\n\t\t\t\t\tdocument.head.appendChild(script[0]);\n\t\t\t\t},\n\t\t\t\tabort: function () {\n\t\t\t\t\tif (callback) {\n\t\t\t\t\t\tcallback();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t});\n\n\n\n\n\tvar oldCallbacks = [],\n\t\trjsonp = /(=)\\?(?=&|$)|\\?\\?/;\n\n\t// Default jsonp settings\n\tjQuery.ajaxSetup({\n\t\tjsonp: \"callback\",\n\t\tjsonpCallback: function () {\n\t\t\tvar callback = oldCallbacks.pop() || (jQuery.expando + \"_\" + (nonce.guid++));\n\t\t\tthis[callback] = true;\n\t\t\treturn callback;\n\t\t}\n\t});\n\n\t// Detect, normalize options and install callbacks for jsonp requests\n\tjQuery.ajaxPrefilter(\"json jsonp\", function (s, originalSettings, jqXHR) {\n\n\t\tvar callbackName, overwritten, responseContainer,\n\t\t\tjsonProp = s.jsonp !== false && (rjsonp.test(s.url) ?\n\t\t\t\t\"url\" :\n\t\t\t\ttypeof s.data === \"string\" &&\n\t\t\t\t(s.contentType || \"\")\n\t\t\t\t\t.indexOf(\"application/x-www-form-urlencoded\") === 0 &&\n\t\t\t\trjsonp.test(s.data) && \"data\"\n\t\t\t);\n\n\t\t// Handle iff the expected data type is \"jsonp\" or we have a parameter to set\n\t\tif (jsonProp || s.dataTypes[0] === \"jsonp\") {\n\n\t\t\t// Get callback name, remembering preexisting value associated with it\n\t\t\tcallbackName = s.jsonpCallback = isFunction(s.jsonpCallback) ?\n\t\t\t\ts.jsonpCallback() :\n\t\t\t\ts.jsonpCallback;\n\n\t\t\t// Insert callback into url or form data\n\t\t\tif (jsonProp) {\n\t\t\t\ts[jsonProp] = s[jsonProp].replace(rjsonp, \"$1\" + callbackName);\n\t\t\t} else if (s.jsonp !== false) {\n\t\t\t\ts.url += (rquery.test(s.url) ? \"&\" : \"?\") + s.jsonp + \"=\" + callbackName;\n\t\t\t}\n\n\t\t\t// Use data converter to retrieve json after script execution\n\t\t\ts.converters[\"script json\"] = function () {\n\t\t\t\tif (!responseContainer) {\n\t\t\t\t\tjQuery.error(callbackName + \" was not called\");\n\t\t\t\t}\n\t\t\t\treturn responseContainer[0];\n\t\t\t};\n\n\t\t\t// Force json dataType\n\t\t\ts.dataTypes[0] = \"json\";\n\n\t\t\t// Install callback\n\t\t\toverwritten = window[callbackName];\n\t\t\twindow[callbackName] = function () {\n\t\t\t\tresponseContainer = arguments;\n\t\t\t};\n\n\t\t\t// Clean-up function (fires after converters)\n\t\t\tjqXHR.always(function () {\n\n\t\t\t\t// If previous value didn't exist - remove it\n\t\t\t\tif (overwritten === undefined) {\n\t\t\t\t\tjQuery(window).removeProp(callbackName);\n\n\t\t\t\t\t// Otherwise restore preexisting value\n\t\t\t\t} else {\n\t\t\t\t\twindow[callbackName] = overwritten;\n\t\t\t\t}\n\n\t\t\t\t// Save back as free\n\t\t\t\tif (s[callbackName]) {\n\n\t\t\t\t\t// Make sure that re-using the options doesn't screw things around\n\t\t\t\t\ts.jsonpCallback = originalSettings.jsonpCallback;\n\n\t\t\t\t\t// Save the callback name for future use\n\t\t\t\t\toldCallbacks.push(callbackName);\n\t\t\t\t}\n\n\t\t\t\t// Call if it was a function and we have a response\n\t\t\t\tif (responseContainer && isFunction(overwritten)) {\n\t\t\t\t\toverwritten(responseContainer[0]);\n\t\t\t\t}\n\n\t\t\t\tresponseContainer = overwritten = undefined;\n\t\t\t});\n\n\t\t\t// Delegate to script\n\t\t\treturn \"script\";\n\t\t}\n\t});\n\n\n\n\n\t// Support: Safari 8 only\n\t// In Safari 8 documents created via document.implementation.createHTMLDocument\n\t// collapse sibling forms: the second one becomes a child of the first one.\n\t// Because of that, this security measure has to be disabled in Safari 8.\n\t// https://bugs.webkit.org/show_bug.cgi?id=137337\n\tsupport.createHTMLDocument = (function () {\n\t\tvar body = document.implementation.createHTMLDocument(\"\").body;\n\t\tbody.innerHTML = \"<form></form><form></form>\";\n\t\treturn body.childNodes.length === 2;\n\t})();\n\n\n\t// Argument \"data\" should be string of html\n\t// context (optional): If specified, the fragment will be created in this context,\n\t// defaults to document\n\t// keepScripts (optional): If true, will include scripts passed in the html string\n\tjQuery.parseHTML = function (data, context, keepScripts) {\n\t\tif (typeof data !== \"string\") {\n\t\t\treturn [];\n\t\t}\n\t\tif (typeof context === \"boolean\") {\n\t\t\tkeepScripts = context;\n\t\t\tcontext = false;\n\t\t}\n\n\t\tvar base, parsed, scripts;\n\n\t\tif (!context) {\n\n\t\t\t// Stop scripts or inline event handlers from being executed immediately\n\t\t\t// by using document.implementation\n\t\t\tif (support.createHTMLDocument) {\n\t\t\t\tcontext = document.implementation.createHTMLDocument(\"\");\n\n\t\t\t\t// Set the base href for the created document\n\t\t\t\t// so any parsed elements with URLs\n\t\t\t\t// are based on the document's URL (gh-2965)\n\t\t\t\tbase = context.createElement(\"base\");\n\t\t\t\tbase.href = document.location.href;\n\t\t\t\tcontext.head.appendChild(base);\n\t\t\t} else {\n\t\t\t\tcontext = document;\n\t\t\t}\n\t\t}\n\n\t\tparsed = rsingleTag.exec(data);\n\t\tscripts = !keepScripts && [];\n\n\t\t// Single tag\n\t\tif (parsed) {\n\t\t\treturn [context.createElement(parsed[1])];\n\t\t}\n\n\t\tparsed = buildFragment([data], context, scripts);\n\n\t\tif (scripts && scripts.length) {\n\t\t\tjQuery(scripts).remove();\n\t\t}\n\n\t\treturn jQuery.merge([], parsed.childNodes);\n\t};\n\n\n\t/**\n\t * Load a url into a page\n\t */\n\tjQuery.fn.load = function (url, params, callback) {\n\t\tvar selector, type, response,\n\t\t\tself = this,\n\t\t\toff = url.indexOf(\" \");\n\n\t\tif (off > -1) {\n\t\t\tselector = stripAndCollapse(url.slice(off));\n\t\t\turl = url.slice(0, off);\n\t\t}\n\n\t\t// If it's a function\n\t\tif (isFunction(params)) {\n\n\t\t\t// We assume that it's the callback\n\t\t\tcallback = params;\n\t\t\tparams = undefined;\n\n\t\t\t// Otherwise, build a param string\n\t\t} else if (params && typeof params === \"object\") {\n\t\t\ttype = \"POST\";\n\t\t}\n\n\t\t// If we have elements to modify, make the request\n\t\tif (self.length > 0) {\n\t\t\tjQuery.ajax({\n\t\t\t\turl: url,\n\n\t\t\t\t// If \"type\" variable is undefined, then \"GET\" method will be used.\n\t\t\t\t// Make value of this field explicit since\n\t\t\t\t// user can override it through ajaxSetup method\n\t\t\t\ttype: type || \"GET\",\n\t\t\t\tdataType: \"html\",\n\t\t\t\tdata: params\n\t\t\t}).done(function (responseText) {\n\n\t\t\t\t// Save response for use in complete callback\n\t\t\t\tresponse = arguments;\n\n\t\t\t\tself.html(selector ?\n\n\t\t\t\t\t// If a selector was specified, locate the right elements in a dummy div\n\t\t\t\t\t// Exclude scripts to avoid IE 'Permission Denied' errors\n\t\t\t\t\tjQuery(\"<div>\").append(jQuery.parseHTML(responseText)).find(selector) :\n\n\t\t\t\t\t// Otherwise use the full result\n\t\t\t\t\tresponseText);\n\n\t\t\t\t// If the request succeeds, this function gets \"data\", \"status\", \"jqXHR\"\n\t\t\t\t// but they are ignored because response was set above.\n\t\t\t\t// If it fails, this function gets \"jqXHR\", \"status\", \"error\"\n\t\t\t}).always(callback && function (jqXHR, status) {\n\t\t\t\tself.each(function () {\n\t\t\t\t\tcallback.apply(this, response || [jqXHR.responseText, status, jqXHR]);\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\n\t\treturn this;\n\t};\n\n\n\n\n\tjQuery.expr.pseudos.animated = function (elem) {\n\t\treturn jQuery.grep(jQuery.timers, function (fn) {\n\t\t\treturn elem === fn.elem;\n\t\t}).length;\n\t};\n\n\n\n\n\tjQuery.offset = {\n\t\tsetOffset: function (elem, options, i) {\n\t\t\tvar curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition,\n\t\t\t\tposition = jQuery.css(elem, \"position\"),\n\t\t\t\tcurElem = jQuery(elem),\n\t\t\t\tprops = {};\n\n\t\t\t// Set position first, in-case top/left are set even on static elem\n\t\t\tif (position === \"static\") {\n\t\t\t\telem.style.position = \"relative\";\n\t\t\t}\n\n\t\t\tcurOffset = curElem.offset();\n\t\t\tcurCSSTop = jQuery.css(elem, \"top\");\n\t\t\tcurCSSLeft = jQuery.css(elem, \"left\");\n\t\t\tcalculatePosition = (position === \"absolute\" || position === \"fixed\") &&\n\t\t\t\t(curCSSTop + curCSSLeft).indexOf(\"auto\") > -1;\n\n\t\t\t// Need to be able to calculate position if either\n\t\t\t// top or left is auto and position is either absolute or fixed\n\t\t\tif (calculatePosition) {\n\t\t\t\tcurPosition = curElem.position();\n\t\t\t\tcurTop = curPosition.top;\n\t\t\t\tcurLeft = curPosition.left;\n\n\t\t\t} else {\n\t\t\t\tcurTop = parseFloat(curCSSTop) || 0;\n\t\t\t\tcurLeft = parseFloat(curCSSLeft) || 0;\n\t\t\t}\n\n\t\t\tif (isFunction(options)) {\n\n\t\t\t\t// Use jQuery.extend here to allow modification of coordinates argument (gh-1848)\n\t\t\t\toptions = options.call(elem, i, jQuery.extend({}, curOffset));\n\t\t\t}\n\n\t\t\tif (options.top != null) {\n\t\t\t\tprops.top = (options.top - curOffset.top) + curTop;\n\t\t\t}\n\t\t\tif (options.left != null) {\n\t\t\t\tprops.left = (options.left - curOffset.left) + curLeft;\n\t\t\t}\n\n\t\t\tif (\"using\" in options) {\n\t\t\t\toptions.using.call(elem, props);\n\n\t\t\t} else {\n\t\t\t\tcurElem.css(props);\n\t\t\t}\n\t\t}\n\t};\n\n\tjQuery.fn.extend({\n\n\t\t// offset() relates an element's border box to the document origin\n\t\toffset: function (options) {\n\n\t\t\t// Preserve chaining for setter\n\t\t\tif (arguments.length) {\n\t\t\t\treturn options === undefined ?\n\t\t\t\t\tthis :\n\t\t\t\t\tthis.each(function (i) {\n\t\t\t\t\t\tjQuery.offset.setOffset(this, options, i);\n\t\t\t\t\t});\n\t\t\t}\n\n\t\t\tvar rect, win,\n\t\t\t\telem = this[0];\n\n\t\t\tif (!elem) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Return zeros for disconnected and hidden (display: none) elements (gh-2310)\n\t\t\t// Support: IE <=11 only\n\t\t\t// Running getBoundingClientRect on a\n\t\t\t// disconnected node in IE throws an error\n\t\t\tif (!elem.getClientRects().length) {\n\t\t\t\treturn { top: 0, left: 0 };\n\t\t\t}\n\n\t\t\t// Get document-relative position by adding viewport scroll to viewport-relative gBCR\n\t\t\trect = elem.getBoundingClientRect();\n\t\t\twin = elem.ownerDocument.defaultView;\n\t\t\treturn {\n\t\t\t\ttop: rect.top + win.pageYOffset,\n\t\t\t\tleft: rect.left + win.pageXOffset\n\t\t\t};\n\t\t},\n\n\t\t// position() relates an element's margin box to its offset parent's padding box\n\t\t// This corresponds to the behavior of CSS absolute positioning\n\t\tposition: function () {\n\t\t\tif (!this[0]) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar offsetParent, offset, doc,\n\t\t\t\telem = this[0],\n\t\t\t\tparentOffset = { top: 0, left: 0 };\n\n\t\t\t// position:fixed elements are offset from the viewport, which itself always has zero offset\n\t\t\tif (jQuery.css(elem, \"position\") === \"fixed\") {\n\n\t\t\t\t// Assume position:fixed implies availability of getBoundingClientRect\n\t\t\t\toffset = elem.getBoundingClientRect();\n\n\t\t\t} else {\n\t\t\t\toffset = this.offset();\n\n\t\t\t\t// Account for the *real* offset parent, which can be the document or its root element\n\t\t\t\t// when a statically positioned element is identified\n\t\t\t\tdoc = elem.ownerDocument;\n\t\t\t\toffsetParent = elem.offsetParent || doc.documentElement;\n\t\t\t\twhile (offsetParent &&\n\t\t\t\t\t(offsetParent === doc.body || offsetParent === doc.documentElement) &&\n\t\t\t\t\tjQuery.css(offsetParent, \"position\") === \"static\") {\n\n\t\t\t\t\toffsetParent = offsetParent.parentNode;\n\t\t\t\t}\n\t\t\t\tif (offsetParent && offsetParent !== elem && offsetParent.nodeType === 1) {\n\n\t\t\t\t\t// Incorporate borders into its offset, since they are outside its content origin\n\t\t\t\t\tparentOffset = jQuery(offsetParent).offset();\n\t\t\t\t\tparentOffset.top += jQuery.css(offsetParent, \"borderTopWidth\", true);\n\t\t\t\t\tparentOffset.left += jQuery.css(offsetParent, \"borderLeftWidth\", true);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Subtract parent offsets and element margins\n\t\t\treturn {\n\t\t\t\ttop: offset.top - parentOffset.top - jQuery.css(elem, \"marginTop\", true),\n\t\t\t\tleft: offset.left - parentOffset.left - jQuery.css(elem, \"marginLeft\", true)\n\t\t\t};\n\t\t},\n\n\t\t// This method will return documentElement in the following cases:\n\t\t// 1) For the element inside the iframe without offsetParent, this method will return\n\t\t//    documentElement of the parent window\n\t\t// 2) For the hidden or detached element\n\t\t// 3) For body or html element, i.e. in case of the html node - it will return itself\n\t\t//\n\t\t// but those exceptions were never presented as a real life use-cases\n\t\t// and might be considered as more preferable results.\n\t\t//\n\t\t// This logic, however, is not guaranteed and can change at any point in the future\n\t\toffsetParent: function () {\n\t\t\treturn this.map(function () {\n\t\t\t\tvar offsetParent = this.offsetParent;\n\n\t\t\t\twhile (offsetParent && jQuery.css(offsetParent, \"position\") === \"static\") {\n\t\t\t\t\toffsetParent = offsetParent.offsetParent;\n\t\t\t\t}\n\n\t\t\t\treturn offsetParent || documentElement;\n\t\t\t});\n\t\t}\n\t});\n\n\t// Create scrollLeft and scrollTop methods\n\tjQuery.each({ scrollLeft: \"pageXOffset\", scrollTop: \"pageYOffset\" }, function (method, prop) {\n\t\tvar top = \"pageYOffset\" === prop;\n\n\t\tjQuery.fn[method] = function (val) {\n\t\t\treturn access(this, function (elem, method, val) {\n\n\t\t\t\t// Coalesce documents and windows\n\t\t\t\tvar win;\n\t\t\t\tif (isWindow(elem)) {\n\t\t\t\t\twin = elem;\n\t\t\t\t} else if (elem.nodeType === 9) {\n\t\t\t\t\twin = elem.defaultView;\n\t\t\t\t}\n\n\t\t\t\tif (val === undefined) {\n\t\t\t\t\treturn win ? win[prop] : elem[method];\n\t\t\t\t}\n\n\t\t\t\tif (win) {\n\t\t\t\t\twin.scrollTo(\n\t\t\t\t\t\t!top ? val : win.pageXOffset,\n\t\t\t\t\t\ttop ? val : win.pageYOffset\n\t\t\t\t\t);\n\n\t\t\t\t} else {\n\t\t\t\t\telem[method] = val;\n\t\t\t\t}\n\t\t\t}, method, val, arguments.length);\n\t\t};\n\t});\n\n\t// Support: Safari <=7 - 9.1, Chrome <=37 - 49\n\t// Add the top/left cssHooks using jQuery.fn.position\n\t// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084\n\t// Blink bug: https://bugs.chromium.org/p/chromium/issues/detail?id=589347\n\t// getComputedStyle returns percent when specified for top/left/bottom/right;\n\t// rather than make the css module depend on the offset module, just check for it here\n\tjQuery.each([\"top\", \"left\"], function (_i, prop) {\n\t\tjQuery.cssHooks[prop] = addGetHookIf(support.pixelPosition,\n\t\t\tfunction (elem, computed) {\n\t\t\t\tif (computed) {\n\t\t\t\t\tcomputed = curCSS(elem, prop);\n\n\t\t\t\t\t// If curCSS returns percentage, fallback to offset\n\t\t\t\t\treturn rnumnonpx.test(computed) ?\n\t\t\t\t\t\tjQuery(elem).position()[prop] + \"px\" :\n\t\t\t\t\t\tcomputed;\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\t});\n\n\n\t// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods\n\tjQuery.each({ Height: \"height\", Width: \"width\" }, function (name, type) {\n\t\tjQuery.each({\n\t\t\tpadding: \"inner\" + name,\n\t\t\tcontent: type,\n\t\t\t\"\": \"outer\" + name\n\t\t}, function (defaultExtra, funcName) {\n\n\t\t\t// Margin is only for outerHeight, outerWidth\n\t\t\tjQuery.fn[funcName] = function (margin, value) {\n\t\t\t\tvar chainable = arguments.length && (defaultExtra || typeof margin !== \"boolean\"),\n\t\t\t\t\textra = defaultExtra || (margin === true || value === true ? \"margin\" : \"border\");\n\n\t\t\t\treturn access(this, function (elem, type, value) {\n\t\t\t\t\tvar doc;\n\n\t\t\t\t\tif (isWindow(elem)) {\n\n\t\t\t\t\t\t// $( window ).outerWidth/Height return w/h including scrollbars (gh-1729)\n\t\t\t\t\t\treturn funcName.indexOf(\"outer\") === 0 ?\n\t\t\t\t\t\t\telem[\"inner\" + name] :\n\t\t\t\t\t\t\telem.document.documentElement[\"client\" + name];\n\t\t\t\t\t}\n\n\t\t\t\t\t// Get document width or height\n\t\t\t\t\tif (elem.nodeType === 9) {\n\t\t\t\t\t\tdoc = elem.documentElement;\n\n\t\t\t\t\t\t// Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height],\n\t\t\t\t\t\t// whichever is greatest\n\t\t\t\t\t\treturn Math.max(\n\t\t\t\t\t\t\telem.body[\"scroll\" + name], doc[\"scroll\" + name],\n\t\t\t\t\t\t\telem.body[\"offset\" + name], doc[\"offset\" + name],\n\t\t\t\t\t\t\tdoc[\"client\" + name]\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\n\t\t\t\t\treturn value === undefined ?\n\n\t\t\t\t\t\t// Get width or height on the element, requesting but not forcing parseFloat\n\t\t\t\t\t\tjQuery.css(elem, type, extra) :\n\n\t\t\t\t\t\t// Set width or height on the element\n\t\t\t\t\t\tjQuery.style(elem, type, value, extra);\n\t\t\t\t}, type, chainable ? margin : undefined, chainable);\n\t\t\t};\n\t\t});\n\t});\n\n\n\tjQuery.each([\n\t\t\"ajaxStart\",\n\t\t\"ajaxStop\",\n\t\t\"ajaxComplete\",\n\t\t\"ajaxError\",\n\t\t\"ajaxSuccess\",\n\t\t\"ajaxSend\"\n\t], function (_i, type) {\n\t\tjQuery.fn[type] = function (fn) {\n\t\t\treturn this.on(type, fn);\n\t\t};\n\t});\n\n\n\n\n\tjQuery.fn.extend({\n\n\t\tbind: function (types, data, fn) {\n\t\t\treturn this.on(types, null, data, fn);\n\t\t},\n\t\tunbind: function (types, fn) {\n\t\t\treturn this.off(types, null, fn);\n\t\t},\n\n\t\tdelegate: function (selector, types, data, fn) {\n\t\t\treturn this.on(types, selector, data, fn);\n\t\t},\n\t\tundelegate: function (selector, types, fn) {\n\n\t\t\t// ( namespace ) or ( selector, types [, fn] )\n\t\t\treturn arguments.length === 1 ?\n\t\t\t\tthis.off(selector, \"**\") :\n\t\t\t\tthis.off(types, selector || \"**\", fn);\n\t\t},\n\n\t\thover: function (fnOver, fnOut) {\n\t\t\treturn this.mouseenter(fnOver).mouseleave(fnOut || fnOver);\n\t\t}\n\t});\n\n\tjQuery.each(\n\t\t(\"blur focus focusin focusout resize scroll click dblclick \" +\n\t\t\t\"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave \" +\n\t\t\t\"change select submit keydown keypress keyup contextmenu\").split(\" \"),\n\t\tfunction (_i, name) {\n\n\t\t\t// Handle event binding\n\t\t\tjQuery.fn[name] = function (data, fn) {\n\t\t\t\treturn arguments.length > 0 ?\n\t\t\t\t\tthis.on(name, null, data, fn) :\n\t\t\t\t\tthis.trigger(name);\n\t\t\t};\n\t\t}\n\t);\n\n\n\n\n\t// Support: Android <=4.0 only\n\t// Make sure we trim BOM and NBSP\n\t// Require that the \"whitespace run\" starts from a non-whitespace\n\t// to avoid O(N^2) behavior when the engine would try matching \"\\s+$\" at each space position.\n\tvar rtrim = /^[\\s\\uFEFF\\xA0]+|([^\\s\\uFEFF\\xA0])[\\s\\uFEFF\\xA0]+$/g;\n\n\t// Bind a function to a context, optionally partially applying any\n\t// arguments.\n\t// jQuery.proxy is deprecated to promote standards (specifically Function#bind)\n\t// However, it is not slated for removal any time soon\n\tjQuery.proxy = function (fn, context) {\n\t\tvar tmp, args, proxy;\n\n\t\tif (typeof context === \"string\") {\n\t\t\ttmp = fn[context];\n\t\t\tcontext = fn;\n\t\t\tfn = tmp;\n\t\t}\n\n\t\t// Quick check to determine if target is callable, in the spec\n\t\t// this throws a TypeError, but we will just return undefined.\n\t\tif (!isFunction(fn)) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\t// Simulated bind\n\t\targs = slice.call(arguments, 2);\n\t\tproxy = function () {\n\t\t\treturn fn.apply(context || this, args.concat(slice.call(arguments)));\n\t\t};\n\n\t\t// Set the guid of unique handler to the same of original handler, so it can be removed\n\t\tproxy.guid = fn.guid = fn.guid || jQuery.guid++;\n\n\t\treturn proxy;\n\t};\n\n\tjQuery.holdReady = function (hold) {\n\t\tif (hold) {\n\t\t\tjQuery.readyWait++;\n\t\t} else {\n\t\t\tjQuery.ready(true);\n\t\t}\n\t};\n\tjQuery.isArray = Array.isArray;\n\tjQuery.parseJSON = JSON.parse;\n\tjQuery.nodeName = nodeName;\n\tjQuery.isFunction = isFunction;\n\tjQuery.isWindow = isWindow;\n\tjQuery.camelCase = camelCase;\n\tjQuery.type = toType;\n\n\tjQuery.now = Date.now;\n\n\tjQuery.isNumeric = function (obj) {\n\n\t\t// As of jQuery 3.0, isNumeric is limited to\n\t\t// strings and numbers (primitives or objects)\n\t\t// that can be coerced to finite numbers (gh-2662)\n\t\tvar type = jQuery.type(obj);\n\t\treturn (type === \"number\" || type === \"string\") &&\n\n\t\t\t// parseFloat NaNs numeric-cast false positives (\"\")\n\t\t\t// ...but misinterprets leading-number strings, particularly hex literals (\"0x...\")\n\t\t\t// subtraction forces infinities to NaN\n\t\t\t!isNaN(obj - parseFloat(obj));\n\t};\n\n\tjQuery.trim = function (text) {\n\t\treturn text == null ?\n\t\t\t\"\" :\n\t\t\t(text + \"\").replace(rtrim, \"$1\");\n\t};\n\n\n\n\t// Register as a named AMD module, since jQuery can be concatenated with other\n\t// files that may use define, but not via a proper concatenation script that\n\t// understands anonymous AMD modules. A named AMD is safest and most robust\n\t// way to register. Lowercase jquery is used because AMD module names are\n\t// derived from file names, and jQuery is normally delivered in a lowercase\n\t// file name. Do this after creating the global so that if an AMD module wants\n\t// to call noConflict to hide this version of jQuery, it will work.\n\n\t// Note that for maximum portability, libraries that are not jQuery should\n\t// declare themselves as anonymous modules, and avoid setting a global if an\n\t// AMD loader is present. jQuery is a special case. For more information, see\n\t// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon\n\n\tif (typeof define === \"function\" && define.amd) {\n\t\tdefine(\"jquery\", [], function () {\n\t\t\treturn jQuery;\n\t\t});\n\t}\n\n\n\n\n\tvar\n\n\t\t// Map over jQuery in case of overwrite\n\t\t_jQuery = window.jQuery,\n\n\t\t// Map over the $ in case of overwrite\n\t\t_$ = window.$;\n\n\tjQuery.noConflict = function (deep) {\n\t\tif (window.$ === jQuery) {\n\t\t\twindow.$ = _$;\n\t\t}\n\n\t\tif (deep && window.jQuery === jQuery) {\n\t\t\twindow.jQuery = _jQuery;\n\t\t}\n\n\t\treturn jQuery;\n\t};\n\n\t// Expose jQuery and $ identifiers, even in AMD\n\t// (trac-7102#comment:10, https://github.com/jquery/jquery/pull/557)\n\t// and CommonJS for browser emulators (trac-13566)\n\tif (typeof noGlobal === \"undefined\") {\n\t\twindow.jQuery = window.$ = jQuery;\n\t}\n\n\n\n\n\treturn jQuery;\n});"
  },
  {
    "path": "src/sourceDev.WebApp/SharedThemes/pulse/Shared/_Layout.cshtml",
    "content": "﻿@inject ISiteContextResolver siteResolver\n@inject ICoreThemeHelper themeHelper\n@{\n    var themeSettings = themeHelper.GetThemeSettings();\n    @*\n        These settings can be set by a main view to show additional columns.\n        Views that push content into the optional sections SideNav, AsidePrimary, and AsideSecondary\n        are obligated to set the needed viewtate property to true to show the section,\n        otherwise an error will occur.\n        The sideNav column also supports a toggle so it can be hidden and toggled visible even though it renders.\n    *@\n    bool sideNavVisible = true.Equals(ViewData[\"SideNavVisible\"]);\n    string sideNavToggleClass = ViewData[\"SideNavToggle\"]?.ToString() ?? \"collapse\";\n    bool asidePrimaryVisible = true.Equals(ViewData[\"AsidePrimaryVisible\"]);\n    bool asideSecondaryVisible = true.Equals(ViewData[\"AsideSecondaryVisible\"]);\n    var Tenant = await siteResolver.ResolveSite(Context.Request.Host.Host, Context.Request.Path);\n    var siteRoot = \"\";\n    if (!string.IsNullOrWhiteSpace(Tenant.SiteFolderName)) { siteRoot = \"/\" + Tenant.SiteFolderName; }\n    \n}\n<!DOCTYPE html>\n<html lang=\"@CultureInfo.CurrentUICulture.Name\">\n<head>\n    <meta charset=\"utf-8\" />\n    <title>@ViewData[\"Title\"] - @(Tenant?.SiteName ?? \"Sample\")</title>\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1, shrink-to-fit=no\">\n    @RenderSection(\"Meta\", required: false)\n    <environment names=\"Development\">\n        <link rel=\"stylesheet\" href=\"~/css/bootstrap.css\" cs-resolve-theme-resource=\"true\" cs-shared-theme=\"true\" cs-tenant=\"@Tenant\" />\n        <link rel=\"stylesheet\" href=\"~/css/fontawesome-all.min.css\" cs-resolve-theme-resource=\"true\" cs-shared-theme=\"true\" cs-tenant=\"@Tenant\" />\n        <link rel=\"stylesheet\" href=\"~/css/site.css\" cs-resolve-theme-resource=\"true\" cs-shared-theme=\"true\" cs-tenant=\"@Tenant\" asp-append-version=\"true\" />\n    </environment>\n    <environment names=\"Staging,Production\">\n        <link rel=\"stylesheet\" href=\"~/css/bootstrap.min.css\" cs-resolve-theme-resource=\"true\" cs-shared-theme=\"true\" cs-tenant=\"@Tenant\" />\n        <link rel=\"stylesheet\" href=\"~/css/fontawesome-all.min.css\" cs-resolve-theme-resource=\"true\" cs-shared-theme=\"true\" cs-tenant=\"@Tenant\" />\n        <link rel=\"stylesheet\" href=\"~/css/site.min.css\" cs-resolve-theme-resource=\"true\" cs-shared-theme=\"true\" cs-tenant=\"@Tenant\" asp-append-version=\"true\" />\n    </environment>\n    @RenderSection(\"Styles\", required: false)    \n    \n    <google-analytics profile-id=\"@Tenant.GoogleAnalyticsProfileId\" user-id=\"@User.GetUserId()\"></google-analytics>\n    <base href=\"@Context.Request.Path\" />\n</head>\n<body class=\"d-flex flex-column @ViewData[\"BodyClass\"]\">\n    <header class=\"bg-white\">\n        <a id=\"skippy\" class=\"visually-hidden visually-hidden-focusable\" href=\"#content\">\n            <div class=\"container\">\n                <span class=\"skiplink-text\">Skip to main content</span>\n            </div>\n        </a>\n        <div class=\"fixed-top container-fluid brand-header bg-white\">\n            <div class=\"d-flex align-items-center bg-white\">\n                @if (!string.IsNullOrWhiteSpace(Tenant.LogoUrl))\n                {\n                    <div>\n                         <partial name=\"SiteLogoPartial\" model=\"@Tenant\" />\n                    </div>\n                }\n                @if (Tenant.ShowSiteNameLink)\n                {\n                    <div class=\"align-self-center pt-4 pt-sm-0\">\n                         <partial name=\"SiteTitlePartial\" model=\"@Tenant\" />\n                    </div>\n                }\n                @if (!string.IsNullOrWhiteSpace(Tenant.HeaderContent))\n                {\n                    <div class=\"flex-fill align-self-center pt-3 d-none d-md-block\">\n                        <partial name=\"SiteHeaderPartial\" />\n                    </div>\n                }\n            </div>\n        </div>\n        <nav class=\"navbar navbar-expand-md navbar-dark fixed-top bg-dark pt-0 pb-0\">\n            <button class=\"navbar-toggler\" type=\"button\" data-bs-toggle=\"collapse\" data-bs-target=\"#navbarNavDropdown\" aria-controls=\"navbarNavDropdown\" aria-expanded=\"false\" aria-label=\"Toggle navigation\">\n                <span class=\"navbar-toggler-icon\"></span>\n            </button>\n\n            <div class=\"collapse navbar-collapse bg-dark ps-2\" id=\"navbarNavDropdown\">\n                @await Component.InvokeAsync(\"Navigation\", new { viewName = \"Bootstrap5TopNavWithDropdowns\", filterName = NamedNavigationFilters.TopNav, startingNodeKey = \"\" })\n                <partial name=\"_LoginPartialWithDropdowns\" />\n            </div>\n        </nav>\n    </header>\n    <div id=\"wrapper\" class=\"container-fluid cs-container flex-fill\">\n        @await Component.InvokeAsync(\"Navigation\", new { viewName = \"Bootstrap5Breadcrumbs\", filterName = NamedNavigationFilters.Breadcrumbs, startingNodeKey = \"\" })\n        <div class=\"row\">\n            <main id=\"content\" class=\"col order-3\">\n                <partial name=\"AlertsPartial\" />\n                <partial name=\"_CookieConsentPartial\" />\n                <partial name=\"_AutoLogoutWarningPartial\" />\n                @RenderBody()\n            </main>\n            @if (sideNavVisible)\n            {\n                <nav id=\"sidenavmenu\" class=\" col col-3 order-1 @sideNavToggleClass\">\n                    @RenderSection(\"SideNav\", required: false)\n                </nav>\n\n            }\n            @if (asideSecondaryVisible)\n            {\n                <aside id=\"asideSecondary\" class=\"col col-1 order-2\">\n                    @RenderSection(\"AsideSecondary\", required: false)\n                </aside>\n\n            }\n            @if (asidePrimaryVisible)\n            {\n                <aside id=\"asidePrimary\" class=\"col-12 col-md-3 col-sm-12  col-sm-12 order-4\">\n                    @RenderSection(\"AsidePrimary\", required: false)\n                </aside>\n\n            }\n        </div>\n    </div>\n    <footer class=\"sticky-bottom border pt-2 h-100\">\n        <div class=\"w-100 text-center\">\n            <partial name=\"SiteFooterPartial\" />\n        </div>\n        <div class=\"d-flex flex-wrap flex-grow justify-content-center\">\n            <div class=\"p-2\">\n            <ul class=\"list-unstyled d-flex flex-wrap\">\n                @if (Tenant != null && !string.IsNullOrWhiteSpace(Tenant.PrivacyPolicy))\n                {\n                    <li class=\"border-left ps-2 me-2\">\n                        <a asp-controller=\"Privacy\" asp-action=\"Index\">Privacy Policy</a>\n                    </li>\n                }\n                <li class=\"border-left ps-2 me-2\">\n                    @* you are free to remove the powered by cloudscribe link but we appreciate it if you choose to keep it! *@\n                    <a class=\"text-nowrap\" target=\"_blank\" href=\"https://www.cloudscribe.com/?utm_source=@Context.Request.Host.Value&amp;utm_medium=referral&amp;utm_campaign=poweredbycloudscribe\">Powered by cloudscribe</a>\n                </li>\n            </ul>\n        </div>\n        <div class=\"ps-sm-2  text-center w-100\"><span class=\"text-nowrap\">Copyright &copy; @DateTime.Now.Year</span><span class=\"d-none d-sm-inline\"> - </span><span> @(Tenant?.SiteName ?? \"Sample\")</span></div>\n        <partial name=\"_CookieConsentRevokePartial\" />\n        </div>\n    </footer>\n    @RenderSection(\"Toolbar\", required: false)\n    <environment names=\"Development\">\n        <script src=\"~/js/jquery.js\" cs-resolve-theme-resource=\"true\" cs-shared-theme=\"true\" cs-tenant=\"@Tenant\"></script>\n        <script src=\"~/js/bootstrap.bundle.js\" cs-resolve-theme-resource=\"true\" cs-shared-theme=\"true\" cs-tenant=\"@Tenant\"></script>\n        <script src=\"~/cr/js/bs4.smartmenus.min.js\"></script>\n    </environment>\n    <environment names=\"Staging,Production\">\n        <script src=\"~/js/jquery.min.js\" cs-resolve-theme-resource=\"true\" cs-shared-theme=\"true\" cs-tenant=\"@Tenant\"></script>\n        <script src=\"~/js/bootstrap.bundle.min.js\" cs-resolve-theme-resource=\"true\" cs-shared-theme=\"true\" cs-tenant=\"@Tenant\"></script>\n        <script src=\"~/cr/js/bs4.smartmenus.min.js\"></script>\n    </environment>\n    @RenderSection(\"Bottom\", required: false)\n    @RenderSection(\"Scripts\", required: false)     \n    @Html.RenderResources(\"js\") @*render any js resources declared via helpers in partial views etc*@\n    <add-this profile-id=\"@Tenant.AddThisDotComUsername\" async></add-this>\n</body>\n</html>\n"
  },
  {
    "path": "src/sourceDev.WebApp/SharedThemes/pulse/wwwroot/css/_bootswatch.scss",
    "content": "// Pulse 5.1.3\n// Bootswatch\n\n// Buttons\n\n.btn {\n  &:focus,\n  &:active,\n  &:active:focus,\n  &.active:focus {\n    outline: none;\n  }\n\n  &-secondary {\n    background-color: $white;\n    border-color: #ccc;\n    color: $gray-900;\n\n    &:hover {\n      background-color: $gray-300;\n      border-color: $gray-500;\n      color: $gray-900;\n    }\n\n    &.disabled {\n      background-color: $white;\n      border-color: tint-color(#ccc, 5%);\n      color: tint-color($gray-900, 5%);\n    }\n  }\n\n  &-warning {\n    color: $white;\n  }\n\n  &-primary:focus {\n    box-shadow: 0 0 5px tint-color($primary, 10%);\n  }\n\n  &-secondary:focus {\n    box-shadow: 0 0 5px $gray-400;\n  }\n\n  &-success:focus {\n    box-shadow: 0 0 5px tint-color($success, 10%);\n  }\n\n  &-info:focus {\n    box-shadow: 0 0 5px tint-color($info, 10%);\n  }\n\n  &-warning:focus {\n    box-shadow: 0 0 5px tint-color($warning, 10%);\n  }\n\n  &-danger:focus {\n    box-shadow: 0 0 5px tint-color($danger, 10%);\n  }\n\n  &.disabled:focus {\n    box-shadow: none;\n  }\n}\n\n// Tables\n\n.table .thead-dark th {\n  background-color: $secondary;\n  border-color: $table-border-color;\n}\n\n// Forms\n\n.form-control:focus {\n  box-shadow: 0 0 5px rgba(100, 65, 164, .4);\n}\n\n// Navs\n\n.nav-tabs {\n  .nav-link,\n  .nav-link.active, {\n    border-width: 0 0 1px;\n  }\n\n  .nav-link:hover,\n  .nav-link.active,\n  .nav-link.active:hover,\n  .nav-link.active:focus {\n    border-bottom: 1px solid $primary;\n  }\n\n  .nav-item + .nav-item {\n    margin-left: 0;\n  }\n}\n\n.breadcrumb {\n  &-item.active {\n    color: $gray-700;\n  }\n}\n\n// Indicators\n\n.badge {\n  &.bg-light {\n    color: $dark;\n  }\n}\n\n// Progress bars\n\n.progress {\n  height: 8px;\n}\n\n// Containers\n\n.list-group {\n  &-item {\n    color: rgba(255, 255, 255, .8);\n\n    &.active,\n    &:hover,\n    &:focus {\n      color: $white;\n    }\n\n    &.active {\n      font-weight: 700;\n\n      &:hover {\n        background-color: $list-group-hover-bg;\n      }\n    }\n\n    &.disabled:hover {\n      color: $list-group-disabled-color;\n    }\n  }\n}\n"
  },
  {
    "path": "src/sourceDev.WebApp/SharedThemes/pulse/wwwroot/css/_variables.scss",
    "content": "// Pulse 5.1.3\n// Bootswatch\n\n$theme: \"pulse\" !default;\n\n//\n// Color system\n//\n\n$white:    #fff !default;\n$gray-100: #fafafa !default;\n$gray-200: #f9f8fc !default;\n$gray-300: #ededed !default;\n$gray-400: #cbc8d0 !default;\n$gray-500: #adb5bd !default;\n$gray-600: #868e96 !default;\n$gray-700: #444 !default;\n$gray-800: #343a40 !default;\n$gray-900: #17141f !default;\n$black:    #000 !default;\n\n$blue:    #007bff !default;\n$indigo:  #6610f2 !default;\n$purple:  #593196 !default;\n$pink:    #e83e8c !default;\n$red:     #fc3939 !default;\n$orange:  #fd7e14 !default;\n$yellow:  #efa31d !default;\n$green:   #13b955 !default;\n$teal:    #20c997 !default;\n$cyan:    #009cdc !default;\n\n$primary:       $purple !default;\n$secondary:     #a991d4 !default;\n$success:       $green !default;\n$info:          $cyan !default;\n$warning:       $yellow !default;\n$danger:        $red !default;\n$light:         $gray-200 !default;\n$dark:          $gray-900 !default;\n\n$min-contrast-ratio:   2.1 !default;\n\n// Options\n\n$enable-rounded: false !default;\n\n// Body\n\n$body-color:                $gray-700 !default;\n\n// Links\n\n$link-hover-color:          $primary !default;\n\n// Tables\n\n$table-border-color:          rgba(0, 0, 0, .05) !default;\n\n// Forms\n\n$input-focus-border-color:              $primary !default;\n\n// Dropdowns\n\n$dropdown-link-color:               $gray-700 !default;\n$dropdown-link-hover-color:         $white !default;\n$dropdown-link-hover-bg:            $primary !default;\n\n// Navs\n\n$nav-tabs-border-color:             $gray-300 !default;\n$nav-tabs-link-hover-border-color:  $primary !default;\n\n// Navbar\n\n$navbar-padding-y:                  1.2rem !default;\n$navbar-dark-hover-color:           rgba($white, .9) !default;\n$navbar-dark-active-color:          rgba($white, .9) !default;\n$navbar-light-color:                rgba($black, .4) !default;\n$navbar-light-active-color:         rgba($black, .7) !default;\n$navbar-light-disabled-color:       rgba($black, .2) !default;\n\n// Progress bars\n\n$progress-bg:                       $gray-300 !default;\n$progress-bar-bg:                   $primary !default;\n\n// List group\n\n$list-group-bg:                     $gray-900 !default;\n$list-group-border-color:           transparent !default;\n$list-group-hover-bg:               lighten($list-group-bg, 10%) !default;\n$list-group-active-color:           $white !default;\n$list-group-active-bg:              $list-group-bg !default;\n$list-group-disabled-color:         lighten($list-group-bg, 30%) !default;\n"
  },
  {
    "path": "src/sourceDev.WebApp/SharedThemes/pulse/wwwroot/css/bootstrap.css",
    "content": "/*!\n * Bootswatch v5.1.3\n * Homepage: https://bootswatch.com\n * Copyright 2012-2021 Thomas Park\n * Licensed under MIT\n * Based on Bootstrap\n*/\n/*!\n * Bootstrap v5.1.3 (https://getbootstrap.com/)\n * Copyright 2011-2021 The Bootstrap Authors\n * Copyright 2011-2021 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n:root {\n  --bs-blue: #007bff;\n  --bs-indigo: #6610f2;\n  --bs-purple: #593196;\n  --bs-pink: #e83e8c;\n  --bs-red: #fc3939;\n  --bs-orange: #fd7e14;\n  --bs-yellow: #efa31d;\n  --bs-green: #13b955;\n  --bs-teal: #20c997;\n  --bs-cyan: #009cdc;\n  --bs-white: #fff;\n  --bs-gray: #868e96;\n  --bs-gray-dark: #343a40;\n  --bs-gray-100: #fafafa;\n  --bs-gray-200: #f9f8fc;\n  --bs-gray-300: #ededed;\n  --bs-gray-400: #cbc8d0;\n  --bs-gray-500: #adb5bd;\n  --bs-gray-600: #868e96;\n  --bs-gray-700: #444;\n  --bs-gray-800: #343a40;\n  --bs-gray-900: #17141f;\n  --bs-primary: #593196;\n  --bs-secondary: #a991d4;\n  --bs-success: #13b955;\n  --bs-info: #009cdc;\n  --bs-warning: #efa31d;\n  --bs-danger: #fc3939;\n  --bs-light: #f9f8fc;\n  --bs-dark: #17141f;\n  --bs-primary-rgb: 89, 49, 150;\n  --bs-secondary-rgb: 169, 145, 212;\n  --bs-success-rgb: 19, 185, 85;\n  --bs-info-rgb: 0, 156, 220;\n  --bs-warning-rgb: 239, 163, 29;\n  --bs-danger-rgb: 252, 57, 57;\n  --bs-light-rgb: 249, 248, 252;\n  --bs-dark-rgb: 23, 20, 31;\n  --bs-white-rgb: 255, 255, 255;\n  --bs-black-rgb: 0, 0, 0;\n  --bs-body-color-rgb: 68, 68, 68;\n  --bs-body-bg-rgb: 255, 255, 255;\n  --bs-font-sans-serif: system-ui, -apple-system, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, \"Noto Sans\", \"Liberation Sans\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n  --bs-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n  --bs-gradient: linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));\n  --bs-body-font-family: var(--bs-font-sans-serif);\n  --bs-body-font-size: 1rem;\n  --bs-body-font-weight: 400;\n  --bs-body-line-height: 1.5;\n  --bs-body-color: #444;\n  --bs-body-bg: #fff;\n}\n\n*,\n*::before,\n*::after {\n  box-sizing: border-box;\n}\n\n@media (prefers-reduced-motion: no-preference) {\n  :root {\n    scroll-behavior: smooth;\n  }\n}\n\nbody {\n  margin: 0;\n  font-family: var(--bs-body-font-family);\n  font-size: var(--bs-body-font-size);\n  font-weight: var(--bs-body-font-weight);\n  line-height: var(--bs-body-line-height);\n  color: var(--bs-body-color);\n  text-align: var(--bs-body-text-align);\n  background-color: var(--bs-body-bg);\n  -webkit-text-size-adjust: 100%;\n  -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\n\nhr {\n  margin: 1rem 0;\n  color: inherit;\n  background-color: currentColor;\n  border: 0;\n  opacity: 0.25;\n}\n\nhr:not([size]) {\n  height: 1px;\n}\n\nh1, .h1, h2, .h2, h3, .h3, h4, .h4, h5, .h5, h6, .h6 {\n  margin-top: 0;\n  margin-bottom: 0.5rem;\n  font-weight: 500;\n  line-height: 1.2;\n}\n\nh1, .h1 {\n  font-size: calc(1.375rem + 1.5vw);\n}\n\n@media (min-width: 1200px) {\n  h1, .h1 {\n    font-size: 2.5rem;\n  }\n}\n\nh2, .h2 {\n  font-size: calc(1.325rem + 0.9vw);\n}\n\n@media (min-width: 1200px) {\n  h2, .h2 {\n    font-size: 2rem;\n  }\n}\n\nh3, .h3 {\n  font-size: calc(1.3rem + 0.6vw);\n}\n\n@media (min-width: 1200px) {\n  h3, .h3 {\n    font-size: 1.75rem;\n  }\n}\n\nh4, .h4 {\n  font-size: calc(1.275rem + 0.3vw);\n}\n\n@media (min-width: 1200px) {\n  h4, .h4 {\n    font-size: 1.5rem;\n  }\n}\n\nh5, .h5 {\n  font-size: 1.25rem;\n}\n\nh6, .h6 {\n  font-size: 1rem;\n}\n\np {\n  margin-top: 0;\n  margin-bottom: 1rem;\n}\n\nabbr[title],\nabbr[data-bs-original-title] {\n  -webkit-text-decoration: underline dotted;\n  text-decoration: underline dotted;\n  cursor: help;\n  -webkit-text-decoration-skip-ink: none;\n  text-decoration-skip-ink: none;\n}\n\naddress {\n  margin-bottom: 1rem;\n  font-style: normal;\n  line-height: inherit;\n}\n\nol,\nul {\n  padding-left: 2rem;\n}\n\nol,\nul,\ndl {\n  margin-top: 0;\n  margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n  margin-bottom: 0;\n}\n\ndt {\n  font-weight: 700;\n}\n\ndd {\n  margin-bottom: .5rem;\n  margin-left: 0;\n}\n\nblockquote {\n  margin: 0 0 1rem;\n}\n\nb,\nstrong {\n  font-weight: bolder;\n}\n\nsmall, .small {\n  font-size: 0.875em;\n}\n\nmark, .mark {\n  padding: 0.2em;\n  background-color: #fcf8e3;\n}\n\nsub,\nsup {\n  position: relative;\n  font-size: 0.75em;\n  line-height: 0;\n  vertical-align: baseline;\n}\n\nsub {\n  bottom: -.25em;\n}\n\nsup {\n  top: -.5em;\n}\n\na {\n  color: #593196;\n  text-decoration: underline;\n}\n\na:hover {\n  color: #593196;\n}\n\na:not([href]):not([class]), a:not([href]):not([class]):hover {\n  color: inherit;\n  text-decoration: none;\n}\n\npre,\ncode,\nkbd,\nsamp {\n  font-family: var(--bs-font-monospace);\n  font-size: 1em;\n  direction: ltr /* rtl:ignore */;\n  unicode-bidi: bidi-override;\n}\n\npre {\n  display: block;\n  margin-top: 0;\n  margin-bottom: 1rem;\n  overflow: auto;\n  font-size: 0.875em;\n}\n\npre code {\n  font-size: inherit;\n  color: inherit;\n  word-break: normal;\n}\n\ncode {\n  font-size: 0.875em;\n  color: #e83e8c;\n  word-wrap: break-word;\n}\n\na > code {\n  color: inherit;\n}\n\nkbd {\n  padding: 0.2rem 0.4rem;\n  font-size: 0.875em;\n  color: #fff;\n  background-color: #17141f;\n}\n\nkbd kbd {\n  padding: 0;\n  font-size: 1em;\n  font-weight: 700;\n}\n\nfigure {\n  margin: 0 0 1rem;\n}\n\nimg,\nsvg {\n  vertical-align: middle;\n}\n\ntable {\n  caption-side: bottom;\n  border-collapse: collapse;\n}\n\ncaption {\n  padding-top: 0.5rem;\n  padding-bottom: 0.5rem;\n  color: #868e96;\n  text-align: left;\n}\n\nth {\n  text-align: inherit;\n  text-align: -webkit-match-parent;\n}\n\nthead,\ntbody,\ntfoot,\ntr,\ntd,\nth {\n  border-color: inherit;\n  border-style: solid;\n  border-width: 0;\n}\n\nlabel {\n  display: inline-block;\n}\n\nbutton {\n  border-radius: 0;\n}\n\nbutton:focus:not(:focus-visible) {\n  outline: 0;\n}\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n  margin: 0;\n  font-family: inherit;\n  font-size: inherit;\n  line-height: inherit;\n}\n\nbutton,\nselect {\n  text-transform: none;\n}\n\n[role=\"button\"] {\n  cursor: pointer;\n}\n\nselect {\n  word-wrap: normal;\n}\n\nselect:disabled {\n  opacity: 1;\n}\n\n[list]::-webkit-calendar-picker-indicator {\n  display: none;\n}\n\nbutton,\n[type=\"button\"],\n[type=\"reset\"],\n[type=\"submit\"] {\n  -webkit-appearance: button;\n}\n\nbutton:not(:disabled),\n[type=\"button\"]:not(:disabled),\n[type=\"reset\"]:not(:disabled),\n[type=\"submit\"]:not(:disabled) {\n  cursor: pointer;\n}\n\n::-moz-focus-inner {\n  padding: 0;\n  border-style: none;\n}\n\ntextarea {\n  resize: vertical;\n}\n\nfieldset {\n  min-width: 0;\n  padding: 0;\n  margin: 0;\n  border: 0;\n}\n\nlegend {\n  float: left;\n  width: 100%;\n  padding: 0;\n  margin-bottom: 0.5rem;\n  font-size: calc(1.275rem + 0.3vw);\n  line-height: inherit;\n}\n\n@media (min-width: 1200px) {\n  legend {\n    font-size: 1.5rem;\n  }\n}\n\nlegend + * {\n  clear: left;\n}\n\n::-webkit-datetime-edit-fields-wrapper,\n::-webkit-datetime-edit-text,\n::-webkit-datetime-edit-minute,\n::-webkit-datetime-edit-hour-field,\n::-webkit-datetime-edit-day-field,\n::-webkit-datetime-edit-month-field,\n::-webkit-datetime-edit-year-field {\n  padding: 0;\n}\n\n::-webkit-inner-spin-button {\n  height: auto;\n}\n\n[type=\"search\"] {\n  outline-offset: -2px;\n  -webkit-appearance: textfield;\n}\n\n/* rtl:raw:\n[type=\"tel\"],\n[type=\"url\"],\n[type=\"email\"],\n[type=\"number\"] {\n  direction: ltr;\n}\n*/\n::-webkit-search-decoration {\n  -webkit-appearance: none;\n}\n\n::-webkit-color-swatch-wrapper {\n  padding: 0;\n}\n\n::file-selector-button {\n  font: inherit;\n}\n\n::-webkit-file-upload-button {\n  font: inherit;\n  -webkit-appearance: button;\n}\n\noutput {\n  display: inline-block;\n}\n\niframe {\n  border: 0;\n}\n\nsummary {\n  display: list-item;\n  cursor: pointer;\n}\n\nprogress {\n  vertical-align: baseline;\n}\n\n[hidden] {\n  display: none !important;\n}\n\n.lead {\n  font-size: 1.25rem;\n  font-weight: 300;\n}\n\n.display-1 {\n  font-size: calc(1.625rem + 4.5vw);\n  font-weight: 300;\n  line-height: 1.2;\n}\n\n@media (min-width: 1200px) {\n  .display-1 {\n    font-size: 5rem;\n  }\n}\n\n.display-2 {\n  font-size: calc(1.575rem + 3.9vw);\n  font-weight: 300;\n  line-height: 1.2;\n}\n\n@media (min-width: 1200px) {\n  .display-2 {\n    font-size: 4.5rem;\n  }\n}\n\n.display-3 {\n  font-size: calc(1.525rem + 3.3vw);\n  font-weight: 300;\n  line-height: 1.2;\n}\n\n@media (min-width: 1200px) {\n  .display-3 {\n    font-size: 4rem;\n  }\n}\n\n.display-4 {\n  font-size: calc(1.475rem + 2.7vw);\n  font-weight: 300;\n  line-height: 1.2;\n}\n\n@media (min-width: 1200px) {\n  .display-4 {\n    font-size: 3.5rem;\n  }\n}\n\n.display-5 {\n  font-size: calc(1.425rem + 2.1vw);\n  font-weight: 300;\n  line-height: 1.2;\n}\n\n@media (min-width: 1200px) {\n  .display-5 {\n    font-size: 3rem;\n  }\n}\n\n.display-6 {\n  font-size: calc(1.375rem + 1.5vw);\n  font-weight: 300;\n  line-height: 1.2;\n}\n\n@media (min-width: 1200px) {\n  .display-6 {\n    font-size: 2.5rem;\n  }\n}\n\n.list-unstyled {\n  padding-left: 0;\n  list-style: none;\n}\n\n.list-inline {\n  padding-left: 0;\n  list-style: none;\n}\n\n.list-inline-item {\n  display: inline-block;\n}\n\n.list-inline-item:not(:last-child) {\n  margin-right: 0.5rem;\n}\n\n.initialism {\n  font-size: 0.875em;\n  text-transform: uppercase;\n}\n\n.blockquote {\n  margin-bottom: 1rem;\n  font-size: 1.25rem;\n}\n\n.blockquote > :last-child {\n  margin-bottom: 0;\n}\n\n.blockquote-footer {\n  margin-top: -1rem;\n  margin-bottom: 1rem;\n  font-size: 0.875em;\n  color: #868e96;\n}\n\n.blockquote-footer::before {\n  content: \"\\2014\\00A0\";\n}\n\n.img-fluid {\n  max-width: 100%;\n  height: auto;\n}\n\n.img-thumbnail {\n  padding: 0.25rem;\n  background-color: #fff;\n  border: 1px solid #ededed;\n  max-width: 100%;\n  height: auto;\n}\n\n.figure {\n  display: inline-block;\n}\n\n.figure-img {\n  margin-bottom: 0.5rem;\n  line-height: 1;\n}\n\n.figure-caption {\n  font-size: 0.875em;\n  color: #868e96;\n}\n\n.container,\n.container-fluid,\n.container-sm,\n.container-md,\n.container-lg,\n.container-xl,\n.container-xxl {\n  width: 100%;\n  padding-right: var(--bs-gutter-x, 0.75rem);\n  padding-left: var(--bs-gutter-x, 0.75rem);\n  margin-right: auto;\n  margin-left: auto;\n}\n\n@media (min-width: 576px) {\n  .container, .container-sm {\n    max-width: 540px;\n  }\n}\n\n@media (min-width: 768px) {\n  .container, .container-sm, .container-md {\n    max-width: 720px;\n  }\n}\n\n@media (min-width: 992px) {\n  .container, .container-sm, .container-md, .container-lg {\n    max-width: 960px;\n  }\n}\n\n@media (min-width: 1200px) {\n  .container, .container-sm, .container-md, .container-lg, .container-xl {\n    max-width: 1140px;\n  }\n}\n\n@media (min-width: 1400px) {\n  .container, .container-sm, .container-md, .container-lg, .container-xl, .container-xxl {\n    max-width: 1320px;\n  }\n}\n\n.row {\n  --bs-gutter-x: 1.5rem;\n  --bs-gutter-y: 0;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n  flex-wrap: wrap;\n  margin-top: calc(-1 * var(--bs-gutter-y));\n  margin-right: calc(-.5 * var(--bs-gutter-x));\n  margin-left: calc(-.5 * var(--bs-gutter-x));\n}\n\n.row > * {\n  -ms-flex-negative: 0;\n  flex-shrink: 0;\n  width: 100%;\n  max-width: 100%;\n  padding-right: calc(var(--bs-gutter-x) * .5);\n  padding-left: calc(var(--bs-gutter-x) * .5);\n  margin-top: var(--bs-gutter-y);\n}\n\n.col {\n  -ms-flex: 1 0 0%;\n  flex: 1 0 0%;\n}\n\n.row-cols-auto > * {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: auto;\n}\n\n.row-cols-1 > * {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 100%;\n}\n\n.row-cols-2 > * {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 50%;\n}\n\n.row-cols-3 > * {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 33.333333%;\n}\n\n.row-cols-4 > * {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 25%;\n}\n\n.row-cols-5 > * {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 20%;\n}\n\n.row-cols-6 > * {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 16.666667%;\n}\n\n.col-auto {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: auto;\n}\n\n.col-1 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 8.333333%;\n}\n\n.col-2 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 16.666667%;\n}\n\n.col-3 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 25%;\n}\n\n.col-4 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 33.333333%;\n}\n\n.col-5 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 41.666667%;\n}\n\n.col-6 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 50%;\n}\n\n.col-7 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 58.333333%;\n}\n\n.col-8 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 66.666667%;\n}\n\n.col-9 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 75%;\n}\n\n.col-10 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 83.333333%;\n}\n\n.col-11 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 91.666667%;\n}\n\n.col-12 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 100%;\n}\n\n.offset-1 {\n  margin-left: 8.333333%;\n}\n\n.offset-2 {\n  margin-left: 16.666667%;\n}\n\n.offset-3 {\n  margin-left: 25%;\n}\n\n.offset-4 {\n  margin-left: 33.333333%;\n}\n\n.offset-5 {\n  margin-left: 41.666667%;\n}\n\n.offset-6 {\n  margin-left: 50%;\n}\n\n.offset-7 {\n  margin-left: 58.333333%;\n}\n\n.offset-8 {\n  margin-left: 66.666667%;\n}\n\n.offset-9 {\n  margin-left: 75%;\n}\n\n.offset-10 {\n  margin-left: 83.333333%;\n}\n\n.offset-11 {\n  margin-left: 91.666667%;\n}\n\n.g-0,\n.gx-0 {\n  --bs-gutter-x: 0;\n}\n\n.g-0,\n.gy-0 {\n  --bs-gutter-y: 0;\n}\n\n.g-1,\n.gx-1 {\n  --bs-gutter-x: 0.25rem;\n}\n\n.g-1,\n.gy-1 {\n  --bs-gutter-y: 0.25rem;\n}\n\n.g-2,\n.gx-2 {\n  --bs-gutter-x: 0.5rem;\n}\n\n.g-2,\n.gy-2 {\n  --bs-gutter-y: 0.5rem;\n}\n\n.g-3,\n.gx-3 {\n  --bs-gutter-x: 1rem;\n}\n\n.g-3,\n.gy-3 {\n  --bs-gutter-y: 1rem;\n}\n\n.g-4,\n.gx-4 {\n  --bs-gutter-x: 1.5rem;\n}\n\n.g-4,\n.gy-4 {\n  --bs-gutter-y: 1.5rem;\n}\n\n.g-5,\n.gx-5 {\n  --bs-gutter-x: 3rem;\n}\n\n.g-5,\n.gy-5 {\n  --bs-gutter-y: 3rem;\n}\n\n@media (min-width: 576px) {\n  .col-sm {\n    -ms-flex: 1 0 0%;\n    flex: 1 0 0%;\n  }\n  .row-cols-sm-auto > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .row-cols-sm-1 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .row-cols-sm-2 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .row-cols-sm-3 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 33.333333%;\n  }\n  .row-cols-sm-4 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .row-cols-sm-5 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 20%;\n  }\n  .row-cols-sm-6 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 16.666667%;\n  }\n  .col-sm-auto {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .col-sm-1 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 8.333333%;\n  }\n  .col-sm-2 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 16.666667%;\n  }\n  .col-sm-3 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .col-sm-4 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 33.333333%;\n  }\n  .col-sm-5 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 41.666667%;\n  }\n  .col-sm-6 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .col-sm-7 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 58.333333%;\n  }\n  .col-sm-8 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 66.666667%;\n  }\n  .col-sm-9 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 75%;\n  }\n  .col-sm-10 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 83.333333%;\n  }\n  .col-sm-11 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 91.666667%;\n  }\n  .col-sm-12 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .offset-sm-0 {\n    margin-left: 0;\n  }\n  .offset-sm-1 {\n    margin-left: 8.333333%;\n  }\n  .offset-sm-2 {\n    margin-left: 16.666667%;\n  }\n  .offset-sm-3 {\n    margin-left: 25%;\n  }\n  .offset-sm-4 {\n    margin-left: 33.333333%;\n  }\n  .offset-sm-5 {\n    margin-left: 41.666667%;\n  }\n  .offset-sm-6 {\n    margin-left: 50%;\n  }\n  .offset-sm-7 {\n    margin-left: 58.333333%;\n  }\n  .offset-sm-8 {\n    margin-left: 66.666667%;\n  }\n  .offset-sm-9 {\n    margin-left: 75%;\n  }\n  .offset-sm-10 {\n    margin-left: 83.333333%;\n  }\n  .offset-sm-11 {\n    margin-left: 91.666667%;\n  }\n  .g-sm-0,\n  .gx-sm-0 {\n    --bs-gutter-x: 0;\n  }\n  .g-sm-0,\n  .gy-sm-0 {\n    --bs-gutter-y: 0;\n  }\n  .g-sm-1,\n  .gx-sm-1 {\n    --bs-gutter-x: 0.25rem;\n  }\n  .g-sm-1,\n  .gy-sm-1 {\n    --bs-gutter-y: 0.25rem;\n  }\n  .g-sm-2,\n  .gx-sm-2 {\n    --bs-gutter-x: 0.5rem;\n  }\n  .g-sm-2,\n  .gy-sm-2 {\n    --bs-gutter-y: 0.5rem;\n  }\n  .g-sm-3,\n  .gx-sm-3 {\n    --bs-gutter-x: 1rem;\n  }\n  .g-sm-3,\n  .gy-sm-3 {\n    --bs-gutter-y: 1rem;\n  }\n  .g-sm-4,\n  .gx-sm-4 {\n    --bs-gutter-x: 1.5rem;\n  }\n  .g-sm-4,\n  .gy-sm-4 {\n    --bs-gutter-y: 1.5rem;\n  }\n  .g-sm-5,\n  .gx-sm-5 {\n    --bs-gutter-x: 3rem;\n  }\n  .g-sm-5,\n  .gy-sm-5 {\n    --bs-gutter-y: 3rem;\n  }\n}\n\n@media (min-width: 768px) {\n  .col-md {\n    -ms-flex: 1 0 0%;\n    flex: 1 0 0%;\n  }\n  .row-cols-md-auto > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .row-cols-md-1 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .row-cols-md-2 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .row-cols-md-3 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 33.333333%;\n  }\n  .row-cols-md-4 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .row-cols-md-5 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 20%;\n  }\n  .row-cols-md-6 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 16.666667%;\n  }\n  .col-md-auto {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .col-md-1 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 8.333333%;\n  }\n  .col-md-2 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 16.666667%;\n  }\n  .col-md-3 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .col-md-4 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 33.333333%;\n  }\n  .col-md-5 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 41.666667%;\n  }\n  .col-md-6 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .col-md-7 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 58.333333%;\n  }\n  .col-md-8 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 66.666667%;\n  }\n  .col-md-9 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 75%;\n  }\n  .col-md-10 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 83.333333%;\n  }\n  .col-md-11 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 91.666667%;\n  }\n  .col-md-12 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .offset-md-0 {\n    margin-left: 0;\n  }\n  .offset-md-1 {\n    margin-left: 8.333333%;\n  }\n  .offset-md-2 {\n    margin-left: 16.666667%;\n  }\n  .offset-md-3 {\n    margin-left: 25%;\n  }\n  .offset-md-4 {\n    margin-left: 33.333333%;\n  }\n  .offset-md-5 {\n    margin-left: 41.666667%;\n  }\n  .offset-md-6 {\n    margin-left: 50%;\n  }\n  .offset-md-7 {\n    margin-left: 58.333333%;\n  }\n  .offset-md-8 {\n    margin-left: 66.666667%;\n  }\n  .offset-md-9 {\n    margin-left: 75%;\n  }\n  .offset-md-10 {\n    margin-left: 83.333333%;\n  }\n  .offset-md-11 {\n    margin-left: 91.666667%;\n  }\n  .g-md-0,\n  .gx-md-0 {\n    --bs-gutter-x: 0;\n  }\n  .g-md-0,\n  .gy-md-0 {\n    --bs-gutter-y: 0;\n  }\n  .g-md-1,\n  .gx-md-1 {\n    --bs-gutter-x: 0.25rem;\n  }\n  .g-md-1,\n  .gy-md-1 {\n    --bs-gutter-y: 0.25rem;\n  }\n  .g-md-2,\n  .gx-md-2 {\n    --bs-gutter-x: 0.5rem;\n  }\n  .g-md-2,\n  .gy-md-2 {\n    --bs-gutter-y: 0.5rem;\n  }\n  .g-md-3,\n  .gx-md-3 {\n    --bs-gutter-x: 1rem;\n  }\n  .g-md-3,\n  .gy-md-3 {\n    --bs-gutter-y: 1rem;\n  }\n  .g-md-4,\n  .gx-md-4 {\n    --bs-gutter-x: 1.5rem;\n  }\n  .g-md-4,\n  .gy-md-4 {\n    --bs-gutter-y: 1.5rem;\n  }\n  .g-md-5,\n  .gx-md-5 {\n    --bs-gutter-x: 3rem;\n  }\n  .g-md-5,\n  .gy-md-5 {\n    --bs-gutter-y: 3rem;\n  }\n}\n\n@media (min-width: 992px) {\n  .col-lg {\n    -ms-flex: 1 0 0%;\n    flex: 1 0 0%;\n  }\n  .row-cols-lg-auto > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .row-cols-lg-1 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .row-cols-lg-2 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .row-cols-lg-3 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 33.333333%;\n  }\n  .row-cols-lg-4 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .row-cols-lg-5 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 20%;\n  }\n  .row-cols-lg-6 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 16.666667%;\n  }\n  .col-lg-auto {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .col-lg-1 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 8.333333%;\n  }\n  .col-lg-2 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 16.666667%;\n  }\n  .col-lg-3 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .col-lg-4 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 33.333333%;\n  }\n  .col-lg-5 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 41.666667%;\n  }\n  .col-lg-6 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .col-lg-7 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 58.333333%;\n  }\n  .col-lg-8 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 66.666667%;\n  }\n  .col-lg-9 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 75%;\n  }\n  .col-lg-10 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 83.333333%;\n  }\n  .col-lg-11 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 91.666667%;\n  }\n  .col-lg-12 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .offset-lg-0 {\n    margin-left: 0;\n  }\n  .offset-lg-1 {\n    margin-left: 8.333333%;\n  }\n  .offset-lg-2 {\n    margin-left: 16.666667%;\n  }\n  .offset-lg-3 {\n    margin-left: 25%;\n  }\n  .offset-lg-4 {\n    margin-left: 33.333333%;\n  }\n  .offset-lg-5 {\n    margin-left: 41.666667%;\n  }\n  .offset-lg-6 {\n    margin-left: 50%;\n  }\n  .offset-lg-7 {\n    margin-left: 58.333333%;\n  }\n  .offset-lg-8 {\n    margin-left: 66.666667%;\n  }\n  .offset-lg-9 {\n    margin-left: 75%;\n  }\n  .offset-lg-10 {\n    margin-left: 83.333333%;\n  }\n  .offset-lg-11 {\n    margin-left: 91.666667%;\n  }\n  .g-lg-0,\n  .gx-lg-0 {\n    --bs-gutter-x: 0;\n  }\n  .g-lg-0,\n  .gy-lg-0 {\n    --bs-gutter-y: 0;\n  }\n  .g-lg-1,\n  .gx-lg-1 {\n    --bs-gutter-x: 0.25rem;\n  }\n  .g-lg-1,\n  .gy-lg-1 {\n    --bs-gutter-y: 0.25rem;\n  }\n  .g-lg-2,\n  .gx-lg-2 {\n    --bs-gutter-x: 0.5rem;\n  }\n  .g-lg-2,\n  .gy-lg-2 {\n    --bs-gutter-y: 0.5rem;\n  }\n  .g-lg-3,\n  .gx-lg-3 {\n    --bs-gutter-x: 1rem;\n  }\n  .g-lg-3,\n  .gy-lg-3 {\n    --bs-gutter-y: 1rem;\n  }\n  .g-lg-4,\n  .gx-lg-4 {\n    --bs-gutter-x: 1.5rem;\n  }\n  .g-lg-4,\n  .gy-lg-4 {\n    --bs-gutter-y: 1.5rem;\n  }\n  .g-lg-5,\n  .gx-lg-5 {\n    --bs-gutter-x: 3rem;\n  }\n  .g-lg-5,\n  .gy-lg-5 {\n    --bs-gutter-y: 3rem;\n  }\n}\n\n@media (min-width: 1200px) {\n  .col-xl {\n    -ms-flex: 1 0 0%;\n    flex: 1 0 0%;\n  }\n  .row-cols-xl-auto > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .row-cols-xl-1 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .row-cols-xl-2 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .row-cols-xl-3 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 33.333333%;\n  }\n  .row-cols-xl-4 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .row-cols-xl-5 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 20%;\n  }\n  .row-cols-xl-6 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 16.666667%;\n  }\n  .col-xl-auto {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .col-xl-1 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 8.333333%;\n  }\n  .col-xl-2 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 16.666667%;\n  }\n  .col-xl-3 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .col-xl-4 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 33.333333%;\n  }\n  .col-xl-5 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 41.666667%;\n  }\n  .col-xl-6 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .col-xl-7 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 58.333333%;\n  }\n  .col-xl-8 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 66.666667%;\n  }\n  .col-xl-9 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 75%;\n  }\n  .col-xl-10 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 83.333333%;\n  }\n  .col-xl-11 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 91.666667%;\n  }\n  .col-xl-12 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .offset-xl-0 {\n    margin-left: 0;\n  }\n  .offset-xl-1 {\n    margin-left: 8.333333%;\n  }\n  .offset-xl-2 {\n    margin-left: 16.666667%;\n  }\n  .offset-xl-3 {\n    margin-left: 25%;\n  }\n  .offset-xl-4 {\n    margin-left: 33.333333%;\n  }\n  .offset-xl-5 {\n    margin-left: 41.666667%;\n  }\n  .offset-xl-6 {\n    margin-left: 50%;\n  }\n  .offset-xl-7 {\n    margin-left: 58.333333%;\n  }\n  .offset-xl-8 {\n    margin-left: 66.666667%;\n  }\n  .offset-xl-9 {\n    margin-left: 75%;\n  }\n  .offset-xl-10 {\n    margin-left: 83.333333%;\n  }\n  .offset-xl-11 {\n    margin-left: 91.666667%;\n  }\n  .g-xl-0,\n  .gx-xl-0 {\n    --bs-gutter-x: 0;\n  }\n  .g-xl-0,\n  .gy-xl-0 {\n    --bs-gutter-y: 0;\n  }\n  .g-xl-1,\n  .gx-xl-1 {\n    --bs-gutter-x: 0.25rem;\n  }\n  .g-xl-1,\n  .gy-xl-1 {\n    --bs-gutter-y: 0.25rem;\n  }\n  .g-xl-2,\n  .gx-xl-2 {\n    --bs-gutter-x: 0.5rem;\n  }\n  .g-xl-2,\n  .gy-xl-2 {\n    --bs-gutter-y: 0.5rem;\n  }\n  .g-xl-3,\n  .gx-xl-3 {\n    --bs-gutter-x: 1rem;\n  }\n  .g-xl-3,\n  .gy-xl-3 {\n    --bs-gutter-y: 1rem;\n  }\n  .g-xl-4,\n  .gx-xl-4 {\n    --bs-gutter-x: 1.5rem;\n  }\n  .g-xl-4,\n  .gy-xl-4 {\n    --bs-gutter-y: 1.5rem;\n  }\n  .g-xl-5,\n  .gx-xl-5 {\n    --bs-gutter-x: 3rem;\n  }\n  .g-xl-5,\n  .gy-xl-5 {\n    --bs-gutter-y: 3rem;\n  }\n}\n\n@media (min-width: 1400px) {\n  .col-xxl {\n    -ms-flex: 1 0 0%;\n    flex: 1 0 0%;\n  }\n  .row-cols-xxl-auto > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .row-cols-xxl-1 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .row-cols-xxl-2 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .row-cols-xxl-3 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 33.333333%;\n  }\n  .row-cols-xxl-4 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .row-cols-xxl-5 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 20%;\n  }\n  .row-cols-xxl-6 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 16.666667%;\n  }\n  .col-xxl-auto {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .col-xxl-1 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 8.333333%;\n  }\n  .col-xxl-2 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 16.666667%;\n  }\n  .col-xxl-3 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .col-xxl-4 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 33.333333%;\n  }\n  .col-xxl-5 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 41.666667%;\n  }\n  .col-xxl-6 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .col-xxl-7 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 58.333333%;\n  }\n  .col-xxl-8 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 66.666667%;\n  }\n  .col-xxl-9 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 75%;\n  }\n  .col-xxl-10 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 83.333333%;\n  }\n  .col-xxl-11 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 91.666667%;\n  }\n  .col-xxl-12 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .offset-xxl-0 {\n    margin-left: 0;\n  }\n  .offset-xxl-1 {\n    margin-left: 8.333333%;\n  }\n  .offset-xxl-2 {\n    margin-left: 16.666667%;\n  }\n  .offset-xxl-3 {\n    margin-left: 25%;\n  }\n  .offset-xxl-4 {\n    margin-left: 33.333333%;\n  }\n  .offset-xxl-5 {\n    margin-left: 41.666667%;\n  }\n  .offset-xxl-6 {\n    margin-left: 50%;\n  }\n  .offset-xxl-7 {\n    margin-left: 58.333333%;\n  }\n  .offset-xxl-8 {\n    margin-left: 66.666667%;\n  }\n  .offset-xxl-9 {\n    margin-left: 75%;\n  }\n  .offset-xxl-10 {\n    margin-left: 83.333333%;\n  }\n  .offset-xxl-11 {\n    margin-left: 91.666667%;\n  }\n  .g-xxl-0,\n  .gx-xxl-0 {\n    --bs-gutter-x: 0;\n  }\n  .g-xxl-0,\n  .gy-xxl-0 {\n    --bs-gutter-y: 0;\n  }\n  .g-xxl-1,\n  .gx-xxl-1 {\n    --bs-gutter-x: 0.25rem;\n  }\n  .g-xxl-1,\n  .gy-xxl-1 {\n    --bs-gutter-y: 0.25rem;\n  }\n  .g-xxl-2,\n  .gx-xxl-2 {\n    --bs-gutter-x: 0.5rem;\n  }\n  .g-xxl-2,\n  .gy-xxl-2 {\n    --bs-gutter-y: 0.5rem;\n  }\n  .g-xxl-3,\n  .gx-xxl-3 {\n    --bs-gutter-x: 1rem;\n  }\n  .g-xxl-3,\n  .gy-xxl-3 {\n    --bs-gutter-y: 1rem;\n  }\n  .g-xxl-4,\n  .gx-xxl-4 {\n    --bs-gutter-x: 1.5rem;\n  }\n  .g-xxl-4,\n  .gy-xxl-4 {\n    --bs-gutter-y: 1.5rem;\n  }\n  .g-xxl-5,\n  .gx-xxl-5 {\n    --bs-gutter-x: 3rem;\n  }\n  .g-xxl-5,\n  .gy-xxl-5 {\n    --bs-gutter-y: 3rem;\n  }\n}\n\n.table {\n  --bs-table-bg: transparent;\n  --bs-table-accent-bg: transparent;\n  --bs-table-striped-color: #444;\n  --bs-table-striped-bg: rgba(0, 0, 0, 0.05);\n  --bs-table-active-color: #444;\n  --bs-table-active-bg: rgba(0, 0, 0, 0.1);\n  --bs-table-hover-color: #444;\n  --bs-table-hover-bg: rgba(0, 0, 0, 0.075);\n  width: 100%;\n  margin-bottom: 1rem;\n  color: #444;\n  vertical-align: top;\n  border-color: rgba(0, 0, 0, 0.05);\n}\n\n.table > :not(caption) > * > * {\n  padding: 0.5rem 0.5rem;\n  background-color: var(--bs-table-bg);\n  border-bottom-width: 1px;\n  box-shadow: inset 0 0 0 9999px var(--bs-table-accent-bg);\n}\n\n.table > tbody {\n  vertical-align: inherit;\n}\n\n.table > thead {\n  vertical-align: bottom;\n}\n\n.table > :not(:first-child) {\n  border-top: 2px solid currentColor;\n}\n\n.caption-top {\n  caption-side: top;\n}\n\n.table-sm > :not(caption) > * > * {\n  padding: 0.25rem 0.25rem;\n}\n\n.table-bordered > :not(caption) > * {\n  border-width: 1px 0;\n}\n\n.table-bordered > :not(caption) > * > * {\n  border-width: 0 1px;\n}\n\n.table-borderless > :not(caption) > * > * {\n  border-bottom-width: 0;\n}\n\n.table-borderless > :not(:first-child) {\n  border-top-width: 0;\n}\n\n.table-striped > tbody > tr:nth-of-type(odd) > * {\n  --bs-table-accent-bg: var(--bs-table-striped-bg);\n  color: var(--bs-table-striped-color);\n}\n\n.table-active {\n  --bs-table-accent-bg: var(--bs-table-active-bg);\n  color: var(--bs-table-active-color);\n}\n\n.table-hover > tbody > tr:hover > * {\n  --bs-table-accent-bg: var(--bs-table-hover-bg);\n  color: var(--bs-table-hover-color);\n}\n\n.table-primary {\n  --bs-table-bg: #ded6ea;\n  --bs-table-striped-bg: #d3cbde;\n  --bs-table-striped-color: #000;\n  --bs-table-active-bg: #c8c1d3;\n  --bs-table-active-color: #000;\n  --bs-table-hover-bg: #cdc6d8;\n  --bs-table-hover-color: #000;\n  color: #000;\n  border-color: #c8c1d3;\n}\n\n.table-secondary {\n  --bs-table-bg: #eee9f6;\n  --bs-table-striped-bg: #e2ddea;\n  --bs-table-striped-color: #000;\n  --bs-table-active-bg: #d6d2dd;\n  --bs-table-active-color: #000;\n  --bs-table-hover-bg: #dcd8e4;\n  --bs-table-hover-color: #000;\n  color: #000;\n  border-color: #d6d2dd;\n}\n\n.table-success {\n  --bs-table-bg: #d0f1dd;\n  --bs-table-striped-bg: #c6e5d2;\n  --bs-table-striped-color: #000;\n  --bs-table-active-bg: #bbd9c7;\n  --bs-table-active-color: #000;\n  --bs-table-hover-bg: #c0dfcc;\n  --bs-table-hover-color: #000;\n  color: #000;\n  border-color: #bbd9c7;\n}\n\n.table-info {\n  --bs-table-bg: #ccebf8;\n  --bs-table-striped-bg: #c2dfec;\n  --bs-table-striped-color: #000;\n  --bs-table-active-bg: #b8d4df;\n  --bs-table-active-color: #000;\n  --bs-table-hover-bg: #bdd9e5;\n  --bs-table-hover-color: #000;\n  color: #000;\n  border-color: #b8d4df;\n}\n\n.table-warning {\n  --bs-table-bg: #fcedd2;\n  --bs-table-striped-bg: #efe1c8;\n  --bs-table-striped-color: #000;\n  --bs-table-active-bg: #e3d5bd;\n  --bs-table-active-color: #000;\n  --bs-table-hover-bg: #e9dbc2;\n  --bs-table-hover-color: #000;\n  color: #000;\n  border-color: #e3d5bd;\n}\n\n.table-danger {\n  --bs-table-bg: #fed7d7;\n  --bs-table-striped-bg: #f1cccc;\n  --bs-table-striped-color: #000;\n  --bs-table-active-bg: #e5c2c2;\n  --bs-table-active-color: #000;\n  --bs-table-hover-bg: #ebc7c7;\n  --bs-table-hover-color: #000;\n  color: #000;\n  border-color: #e5c2c2;\n}\n\n.table-light {\n  --bs-table-bg: #f9f8fc;\n  --bs-table-striped-bg: #edecef;\n  --bs-table-striped-color: #000;\n  --bs-table-active-bg: #e0dfe3;\n  --bs-table-active-color: #000;\n  --bs-table-hover-bg: #e6e5e9;\n  --bs-table-hover-color: #000;\n  color: #000;\n  border-color: #e0dfe3;\n}\n\n.table-dark {\n  --bs-table-bg: #17141f;\n  --bs-table-striped-bg: #23202a;\n  --bs-table-striped-color: #fff;\n  --bs-table-active-bg: #2e2c35;\n  --bs-table-active-color: #fff;\n  --bs-table-hover-bg: #282630;\n  --bs-table-hover-color: #fff;\n  color: #fff;\n  border-color: #2e2c35;\n}\n\n.table-responsive {\n  overflow-x: auto;\n  -webkit-overflow-scrolling: touch;\n}\n\n@media (max-width: 575.98px) {\n  .table-responsive-sm {\n    overflow-x: auto;\n    -webkit-overflow-scrolling: touch;\n  }\n}\n\n@media (max-width: 767.98px) {\n  .table-responsive-md {\n    overflow-x: auto;\n    -webkit-overflow-scrolling: touch;\n  }\n}\n\n@media (max-width: 991.98px) {\n  .table-responsive-lg {\n    overflow-x: auto;\n    -webkit-overflow-scrolling: touch;\n  }\n}\n\n@media (max-width: 1199.98px) {\n  .table-responsive-xl {\n    overflow-x: auto;\n    -webkit-overflow-scrolling: touch;\n  }\n}\n\n@media (max-width: 1399.98px) {\n  .table-responsive-xxl {\n    overflow-x: auto;\n    -webkit-overflow-scrolling: touch;\n  }\n}\n\n.form-label {\n  margin-bottom: 0.5rem;\n}\n\n.col-form-label {\n  padding-top: calc(0.375rem + 1px);\n  padding-bottom: calc(0.375rem + 1px);\n  margin-bottom: 0;\n  font-size: inherit;\n  line-height: 1.5;\n}\n\n.col-form-label-lg {\n  padding-top: calc(0.5rem + 1px);\n  padding-bottom: calc(0.5rem + 1px);\n  font-size: 1.25rem;\n}\n\n.col-form-label-sm {\n  padding-top: calc(0.25rem + 1px);\n  padding-bottom: calc(0.25rem + 1px);\n  font-size: 0.875rem;\n}\n\n.form-text {\n  margin-top: 0.25rem;\n  font-size: 0.875em;\n  color: #868e96;\n}\n\n.form-control {\n  display: block;\n  width: 100%;\n  padding: 0.375rem 0.75rem;\n  font-size: 1rem;\n  font-weight: 400;\n  line-height: 1.5;\n  color: #444;\n  background-color: #fff;\n  background-clip: padding-box;\n  border: 1px solid #cbc8d0;\n  -webkit-appearance: none;\n  -moz-appearance: none;\n  appearance: none;\n  border-radius: 0;\n  transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .form-control {\n    transition: none;\n  }\n}\n\n.form-control[type=\"file\"] {\n  overflow: hidden;\n}\n\n.form-control[type=\"file\"]:not(:disabled):not([readonly]) {\n  cursor: pointer;\n}\n\n.form-control:focus {\n  color: #444;\n  background-color: #fff;\n  border-color: #593196;\n  outline: 0;\n  box-shadow: 0 0 0 0.25rem rgba(89, 49, 150, 0.25);\n}\n\n.form-control::-webkit-date-and-time-value {\n  height: 1.5em;\n}\n\n.form-control::-webkit-input-placeholder {\n  color: #868e96;\n  opacity: 1;\n}\n\n.form-control::-moz-placeholder {\n  color: #868e96;\n  opacity: 1;\n}\n\n.form-control:-ms-input-placeholder {\n  color: #868e96;\n  opacity: 1;\n}\n\n.form-control::-ms-input-placeholder {\n  color: #868e96;\n  opacity: 1;\n}\n\n.form-control::placeholder {\n  color: #868e96;\n  opacity: 1;\n}\n\n.form-control:disabled, .form-control[readonly] {\n  background-color: #f9f8fc;\n  opacity: 1;\n}\n\n.form-control::file-selector-button {\n  padding: 0.375rem 0.75rem;\n  margin: -0.375rem -0.75rem;\n  -webkit-margin-end: 0.75rem;\n  -moz-margin-end: 0.75rem;\n  margin-inline-end: 0.75rem;\n  color: #444;\n  background-color: #f9f8fc;\n  pointer-events: none;\n  border-color: inherit;\n  border-style: solid;\n  border-width: 0;\n  border-inline-end-width: 1px;\n  border-radius: 0;\n  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .form-control::file-selector-button {\n    transition: none;\n  }\n}\n\n.form-control:hover:not(:disabled):not([readonly])::file-selector-button {\n  background-color: #edecef;\n}\n\n.form-control::-webkit-file-upload-button {\n  padding: 0.375rem 0.75rem;\n  margin: -0.375rem -0.75rem;\n  -webkit-margin-end: 0.75rem;\n  margin-inline-end: 0.75rem;\n  color: #444;\n  background-color: #f9f8fc;\n  pointer-events: none;\n  border-color: inherit;\n  border-style: solid;\n  border-width: 0;\n  border-inline-end-width: 1px;\n  border-radius: 0;\n  -webkit-transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .form-control::-webkit-file-upload-button {\n    -webkit-transition: none;\n    transition: none;\n  }\n}\n\n.form-control:hover:not(:disabled):not([readonly])::-webkit-file-upload-button {\n  background-color: #edecef;\n}\n\n.form-control-plaintext {\n  display: block;\n  width: 100%;\n  padding: 0.375rem 0;\n  margin-bottom: 0;\n  line-height: 1.5;\n  color: #444;\n  background-color: transparent;\n  border: solid transparent;\n  border-width: 1px 0;\n}\n\n.form-control-plaintext.form-control-sm, .form-control-plaintext.form-control-lg {\n  padding-right: 0;\n  padding-left: 0;\n}\n\n.form-control-sm {\n  min-height: calc(1.5em + 0.5rem + 2px);\n  padding: 0.25rem 0.5rem;\n  font-size: 0.875rem;\n}\n\n.form-control-sm::file-selector-button {\n  padding: 0.25rem 0.5rem;\n  margin: -0.25rem -0.5rem;\n  -webkit-margin-end: 0.5rem;\n  -moz-margin-end: 0.5rem;\n  margin-inline-end: 0.5rem;\n}\n\n.form-control-sm::-webkit-file-upload-button {\n  padding: 0.25rem 0.5rem;\n  margin: -0.25rem -0.5rem;\n  -webkit-margin-end: 0.5rem;\n  margin-inline-end: 0.5rem;\n}\n\n.form-control-lg {\n  min-height: calc(1.5em + 1rem + 2px);\n  padding: 0.5rem 1rem;\n  font-size: 1.25rem;\n}\n\n.form-control-lg::file-selector-button {\n  padding: 0.5rem 1rem;\n  margin: -0.5rem -1rem;\n  -webkit-margin-end: 1rem;\n  -moz-margin-end: 1rem;\n  margin-inline-end: 1rem;\n}\n\n.form-control-lg::-webkit-file-upload-button {\n  padding: 0.5rem 1rem;\n  margin: -0.5rem -1rem;\n  -webkit-margin-end: 1rem;\n  margin-inline-end: 1rem;\n}\n\ntextarea.form-control {\n  min-height: calc(1.5em + 0.75rem + 2px);\n}\n\ntextarea.form-control-sm {\n  min-height: calc(1.5em + 0.5rem + 2px);\n}\n\ntextarea.form-control-lg {\n  min-height: calc(1.5em + 1rem + 2px);\n}\n\n.form-control-color {\n  width: 3rem;\n  height: auto;\n  padding: 0.375rem;\n}\n\n.form-control-color:not(:disabled):not([readonly]) {\n  cursor: pointer;\n}\n\n.form-control-color::-moz-color-swatch {\n  height: 1.5em;\n}\n\n.form-control-color::-webkit-color-swatch {\n  height: 1.5em;\n}\n\n.form-select {\n  display: block;\n  width: 100%;\n  padding: 0.375rem 2.25rem 0.375rem 0.75rem;\n  -moz-padding-start: calc(0.75rem - 3px);\n  font-size: 1rem;\n  font-weight: 400;\n  line-height: 1.5;\n  color: #444;\n  background-color: #fff;\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e\");\n  background-repeat: no-repeat;\n  background-position: right 0.75rem center;\n  background-size: 16px 12px;\n  border: 1px solid #cbc8d0;\n  border-radius: 0;\n  transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n  -webkit-appearance: none;\n  -moz-appearance: none;\n  appearance: none;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .form-select {\n    transition: none;\n  }\n}\n\n.form-select:focus {\n  border-color: #593196;\n  outline: 0;\n  box-shadow: 0 0 0 0.25rem rgba(89, 49, 150, 0.25);\n}\n\n.form-select[multiple], .form-select[size]:not([size=\"1\"]) {\n  padding-right: 0.75rem;\n  background-image: none;\n}\n\n.form-select:disabled {\n  background-color: #f9f8fc;\n}\n\n.form-select:-moz-focusring {\n  color: transparent;\n  text-shadow: 0 0 0 #444;\n}\n\n.form-select-sm {\n  padding-top: 0.25rem;\n  padding-bottom: 0.25rem;\n  padding-left: 0.5rem;\n  font-size: 0.875rem;\n}\n\n.form-select-lg {\n  padding-top: 0.5rem;\n  padding-bottom: 0.5rem;\n  padding-left: 1rem;\n  font-size: 1.25rem;\n}\n\n.form-check {\n  display: block;\n  min-height: 1.5rem;\n  padding-left: 1.5em;\n  margin-bottom: 0.125rem;\n}\n\n.form-check .form-check-input {\n  float: left;\n  margin-left: -1.5em;\n}\n\n.form-check-input {\n  width: 1em;\n  height: 1em;\n  margin-top: 0.25em;\n  vertical-align: top;\n  background-color: #fff;\n  background-repeat: no-repeat;\n  background-position: center;\n  background-size: contain;\n  border: 1px solid rgba(0, 0, 0, 0.25);\n  -webkit-appearance: none;\n  -moz-appearance: none;\n  appearance: none;\n  -webkit-print-color-adjust: exact;\n  color-adjust: exact;\n}\n\n.form-check-input[type=\"radio\"] {\n  border-radius: 50%;\n}\n\n.form-check-input:active {\n  -webkit-filter: brightness(90%);\n  filter: brightness(90%);\n}\n\n.form-check-input:focus {\n  border-color: #593196;\n  outline: 0;\n  box-shadow: 0 0 0 0.25rem rgba(89, 49, 150, 0.25);\n}\n\n.form-check-input:checked {\n  background-color: #593196;\n  border-color: #593196;\n}\n\n.form-check-input:checked[type=\"checkbox\"] {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10l3 3l6-6'/%3e%3c/svg%3e\");\n}\n\n.form-check-input:checked[type=\"radio\"] {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='2' fill='%23fff'/%3e%3c/svg%3e\");\n}\n\n.form-check-input[type=\"checkbox\"]:indeterminate {\n  background-color: #593196;\n  border-color: #593196;\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10h8'/%3e%3c/svg%3e\");\n}\n\n.form-check-input:disabled {\n  pointer-events: none;\n  -webkit-filter: none;\n  filter: none;\n  opacity: 0.5;\n}\n\n.form-check-input[disabled] ~ .form-check-label, .form-check-input:disabled ~ .form-check-label {\n  opacity: 0.5;\n}\n\n.form-switch {\n  padding-left: 2.5em;\n}\n\n.form-switch .form-check-input {\n  width: 2em;\n  margin-left: -2.5em;\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%280, 0, 0, 0.25%29'/%3e%3c/svg%3e\");\n  background-position: left center;\n  transition: background-position 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .form-switch .form-check-input {\n    transition: none;\n  }\n}\n\n.form-switch .form-check-input:focus {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23593196'/%3e%3c/svg%3e\");\n}\n\n.form-switch .form-check-input:checked {\n  background-position: right center;\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e\");\n}\n\n.form-check-inline {\n  display: inline-block;\n  margin-right: 1rem;\n}\n\n.btn-check {\n  position: absolute;\n  clip: rect(0, 0, 0, 0);\n  pointer-events: none;\n}\n\n.btn-check[disabled] + .btn, .btn-check:disabled + .btn {\n  pointer-events: none;\n  -webkit-filter: none;\n  filter: none;\n  opacity: 0.65;\n}\n\n.form-range {\n  width: 100%;\n  height: 1.5rem;\n  padding: 0;\n  background-color: transparent;\n  -webkit-appearance: none;\n  -moz-appearance: none;\n  appearance: none;\n}\n\n.form-range:focus {\n  outline: 0;\n}\n\n.form-range:focus::-webkit-slider-thumb {\n  box-shadow: 0 0 0 1px #fff, 0 0 0 0.25rem rgba(89, 49, 150, 0.25);\n}\n\n.form-range:focus::-moz-range-thumb {\n  box-shadow: 0 0 0 1px #fff, 0 0 0 0.25rem rgba(89, 49, 150, 0.25);\n}\n\n.form-range::-moz-focus-outer {\n  border: 0;\n}\n\n.form-range::-webkit-slider-thumb {\n  width: 1rem;\n  height: 1rem;\n  margin-top: -0.25rem;\n  background-color: #593196;\n  border: 0;\n  -webkit-transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n  transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n  -webkit-appearance: none;\n  appearance: none;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .form-range::-webkit-slider-thumb {\n    -webkit-transition: none;\n    transition: none;\n  }\n}\n\n.form-range::-webkit-slider-thumb:active {\n  background-color: #cdc1e0;\n}\n\n.form-range::-webkit-slider-runnable-track {\n  width: 100%;\n  height: 0.5rem;\n  color: transparent;\n  cursor: pointer;\n  background-color: #ededed;\n  border-color: transparent;\n}\n\n.form-range::-moz-range-thumb {\n  width: 1rem;\n  height: 1rem;\n  background-color: #593196;\n  border: 0;\n  -moz-transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n  transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n  -moz-appearance: none;\n  appearance: none;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .form-range::-moz-range-thumb {\n    -moz-transition: none;\n    transition: none;\n  }\n}\n\n.form-range::-moz-range-thumb:active {\n  background-color: #cdc1e0;\n}\n\n.form-range::-moz-range-track {\n  width: 100%;\n  height: 0.5rem;\n  color: transparent;\n  cursor: pointer;\n  background-color: #ededed;\n  border-color: transparent;\n}\n\n.form-range:disabled {\n  pointer-events: none;\n}\n\n.form-range:disabled::-webkit-slider-thumb {\n  background-color: #adb5bd;\n}\n\n.form-range:disabled::-moz-range-thumb {\n  background-color: #adb5bd;\n}\n\n.form-floating {\n  position: relative;\n}\n\n.form-floating > .form-control,\n.form-floating > .form-select {\n  height: calc(3.5rem + 2px);\n  line-height: 1.25;\n}\n\n.form-floating > label {\n  position: absolute;\n  top: 0;\n  left: 0;\n  height: 100%;\n  padding: 1rem 0.75rem;\n  pointer-events: none;\n  border: 1px solid transparent;\n  -webkit-transform-origin: 0 0;\n  transform-origin: 0 0;\n  transition: opacity 0.1s ease-in-out, -webkit-transform 0.1s ease-in-out;\n  transition: opacity 0.1s ease-in-out, transform 0.1s ease-in-out;\n  transition: opacity 0.1s ease-in-out, transform 0.1s ease-in-out, -webkit-transform 0.1s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .form-floating > label {\n    transition: none;\n  }\n}\n\n.form-floating > .form-control {\n  padding: 1rem 0.75rem;\n}\n\n.form-floating > .form-control::-webkit-input-placeholder {\n  color: transparent;\n}\n\n.form-floating > .form-control::-moz-placeholder {\n  color: transparent;\n}\n\n.form-floating > .form-control:-ms-input-placeholder {\n  color: transparent;\n}\n\n.form-floating > .form-control::-ms-input-placeholder {\n  color: transparent;\n}\n\n.form-floating > .form-control::placeholder {\n  color: transparent;\n}\n\n.form-floating > .form-control:not(:-moz-placeholder-shown) {\n  padding-top: 1.625rem;\n  padding-bottom: 0.625rem;\n}\n\n.form-floating > .form-control:not(:-ms-input-placeholder) {\n  padding-top: 1.625rem;\n  padding-bottom: 0.625rem;\n}\n\n.form-floating > .form-control:focus, .form-floating > .form-control:not(:placeholder-shown) {\n  padding-top: 1.625rem;\n  padding-bottom: 0.625rem;\n}\n\n.form-floating > .form-control:-webkit-autofill {\n  padding-top: 1.625rem;\n  padding-bottom: 0.625rem;\n}\n\n.form-floating > .form-select {\n  padding-top: 1.625rem;\n  padding-bottom: 0.625rem;\n}\n\n.form-floating > .form-control:not(:-moz-placeholder-shown) ~ label {\n  opacity: 0.65;\n  transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);\n}\n\n.form-floating > .form-control:not(:-ms-input-placeholder) ~ label {\n  opacity: 0.65;\n  transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);\n}\n\n.form-floating > .form-control:focus ~ label,\n.form-floating > .form-control:not(:placeholder-shown) ~ label,\n.form-floating > .form-select ~ label {\n  opacity: 0.65;\n  -webkit-transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);\n  transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);\n}\n\n.form-floating > .form-control:-webkit-autofill ~ label {\n  opacity: 0.65;\n  -webkit-transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);\n  transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);\n}\n\n.input-group {\n  position: relative;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n  flex-wrap: wrap;\n  -ms-flex-align: stretch;\n  align-items: stretch;\n  width: 100%;\n}\n\n.input-group > .form-control,\n.input-group > .form-select {\n  position: relative;\n  -ms-flex: 1 1 auto;\n  flex: 1 1 auto;\n  width: 1%;\n  min-width: 0;\n}\n\n.input-group > .form-control:focus,\n.input-group > .form-select:focus {\n  z-index: 3;\n}\n\n.input-group .btn {\n  position: relative;\n  z-index: 2;\n}\n\n.input-group .btn:focus {\n  z-index: 3;\n}\n\n.input-group-text {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-align: center;\n  align-items: center;\n  padding: 0.375rem 0.75rem;\n  font-size: 1rem;\n  font-weight: 400;\n  line-height: 1.5;\n  color: #444;\n  text-align: center;\n  white-space: nowrap;\n  background-color: #f9f8fc;\n  border: 1px solid #cbc8d0;\n}\n\n.input-group-lg > .form-control,\n.input-group-lg > .form-select,\n.input-group-lg > .input-group-text,\n.input-group-lg > .btn {\n  padding: 0.5rem 1rem;\n  font-size: 1.25rem;\n}\n\n.input-group-sm > .form-control,\n.input-group-sm > .form-select,\n.input-group-sm > .input-group-text,\n.input-group-sm > .btn {\n  padding: 0.25rem 0.5rem;\n  font-size: 0.875rem;\n}\n\n.input-group-lg > .form-select,\n.input-group-sm > .form-select {\n  padding-right: 3rem;\n}\n\n.input-group > :not(:first-child):not(.dropdown-menu):not(.valid-tooltip):not(.valid-feedback):not(.invalid-tooltip):not(.invalid-feedback) {\n  margin-left: -1px;\n}\n\n.valid-feedback {\n  display: none;\n  width: 100%;\n  margin-top: 0.25rem;\n  font-size: 0.875em;\n  color: #13b955;\n}\n\n.valid-tooltip {\n  position: absolute;\n  top: 100%;\n  z-index: 5;\n  display: none;\n  max-width: 100%;\n  padding: 0.25rem 0.5rem;\n  margin-top: .1rem;\n  font-size: 0.875rem;\n  color: #fff;\n  background-color: rgba(19, 185, 85, 0.9);\n}\n\n.was-validated :valid ~ .valid-feedback,\n.was-validated :valid ~ .valid-tooltip,\n.is-valid ~ .valid-feedback,\n.is-valid ~ .valid-tooltip {\n  display: block;\n}\n\n.was-validated .form-control:valid, .form-control.is-valid {\n  border-color: #13b955;\n  padding-right: calc(1.5em + 0.75rem);\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%2313b955' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e\");\n  background-repeat: no-repeat;\n  background-position: right calc(0.375em + 0.1875rem) center;\n  background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n\n.was-validated .form-control:valid:focus, .form-control.is-valid:focus {\n  border-color: #13b955;\n  box-shadow: 0 0 0 0.25rem rgba(19, 185, 85, 0.25);\n}\n\n.was-validated textarea.form-control:valid, textarea.form-control.is-valid {\n  padding-right: calc(1.5em + 0.75rem);\n  background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem);\n}\n\n.was-validated .form-select:valid, .form-select.is-valid {\n  border-color: #13b955;\n}\n\n.was-validated .form-select:valid:not([multiple]):not([size]), .was-validated .form-select:valid:not([multiple])[size=\"1\"], .form-select.is-valid:not([multiple]):not([size]), .form-select.is-valid:not([multiple])[size=\"1\"] {\n  padding-right: 4.125rem;\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e\"), url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%2313b955' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e\");\n  background-position: right 0.75rem center, center right 2.25rem;\n  background-size: 16px 12px, calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n\n.was-validated .form-select:valid:focus, .form-select.is-valid:focus {\n  border-color: #13b955;\n  box-shadow: 0 0 0 0.25rem rgba(19, 185, 85, 0.25);\n}\n\n.was-validated .form-check-input:valid, .form-check-input.is-valid {\n  border-color: #13b955;\n}\n\n.was-validated .form-check-input:valid:checked, .form-check-input.is-valid:checked {\n  background-color: #13b955;\n}\n\n.was-validated .form-check-input:valid:focus, .form-check-input.is-valid:focus {\n  box-shadow: 0 0 0 0.25rem rgba(19, 185, 85, 0.25);\n}\n\n.was-validated .form-check-input:valid ~ .form-check-label, .form-check-input.is-valid ~ .form-check-label {\n  color: #13b955;\n}\n\n.form-check-inline .form-check-input ~ .valid-feedback {\n  margin-left: .5em;\n}\n\n.was-validated .input-group .form-control:valid, .input-group .form-control.is-valid, .was-validated\n.input-group .form-select:valid,\n.input-group .form-select.is-valid {\n  z-index: 1;\n}\n\n.was-validated .input-group .form-control:valid:focus, .input-group .form-control.is-valid:focus, .was-validated\n.input-group .form-select:valid:focus,\n.input-group .form-select.is-valid:focus {\n  z-index: 3;\n}\n\n.invalid-feedback {\n  display: none;\n  width: 100%;\n  margin-top: 0.25rem;\n  font-size: 0.875em;\n  color: #fc3939;\n}\n\n.invalid-tooltip {\n  position: absolute;\n  top: 100%;\n  z-index: 5;\n  display: none;\n  max-width: 100%;\n  padding: 0.25rem 0.5rem;\n  margin-top: .1rem;\n  font-size: 0.875rem;\n  color: #fff;\n  background-color: rgba(252, 57, 57, 0.9);\n}\n\n.was-validated :invalid ~ .invalid-feedback,\n.was-validated :invalid ~ .invalid-tooltip,\n.is-invalid ~ .invalid-feedback,\n.is-invalid ~ .invalid-tooltip {\n  display: block;\n}\n\n.was-validated .form-control:invalid, .form-control.is-invalid {\n  border-color: #fc3939;\n  padding-right: calc(1.5em + 0.75rem);\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23fc3939'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23fc3939' stroke='none'/%3e%3c/svg%3e\");\n  background-repeat: no-repeat;\n  background-position: right calc(0.375em + 0.1875rem) center;\n  background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n\n.was-validated .form-control:invalid:focus, .form-control.is-invalid:focus {\n  border-color: #fc3939;\n  box-shadow: 0 0 0 0.25rem rgba(252, 57, 57, 0.25);\n}\n\n.was-validated textarea.form-control:invalid, textarea.form-control.is-invalid {\n  padding-right: calc(1.5em + 0.75rem);\n  background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem);\n}\n\n.was-validated .form-select:invalid, .form-select.is-invalid {\n  border-color: #fc3939;\n}\n\n.was-validated .form-select:invalid:not([multiple]):not([size]), .was-validated .form-select:invalid:not([multiple])[size=\"1\"], .form-select.is-invalid:not([multiple]):not([size]), .form-select.is-invalid:not([multiple])[size=\"1\"] {\n  padding-right: 4.125rem;\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e\"), url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23fc3939'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23fc3939' stroke='none'/%3e%3c/svg%3e\");\n  background-position: right 0.75rem center, center right 2.25rem;\n  background-size: 16px 12px, calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n\n.was-validated .form-select:invalid:focus, .form-select.is-invalid:focus {\n  border-color: #fc3939;\n  box-shadow: 0 0 0 0.25rem rgba(252, 57, 57, 0.25);\n}\n\n.was-validated .form-check-input:invalid, .form-check-input.is-invalid {\n  border-color: #fc3939;\n}\n\n.was-validated .form-check-input:invalid:checked, .form-check-input.is-invalid:checked {\n  background-color: #fc3939;\n}\n\n.was-validated .form-check-input:invalid:focus, .form-check-input.is-invalid:focus {\n  box-shadow: 0 0 0 0.25rem rgba(252, 57, 57, 0.25);\n}\n\n.was-validated .form-check-input:invalid ~ .form-check-label, .form-check-input.is-invalid ~ .form-check-label {\n  color: #fc3939;\n}\n\n.form-check-inline .form-check-input ~ .invalid-feedback {\n  margin-left: .5em;\n}\n\n.was-validated .input-group .form-control:invalid, .input-group .form-control.is-invalid, .was-validated\n.input-group .form-select:invalid,\n.input-group .form-select.is-invalid {\n  z-index: 2;\n}\n\n.was-validated .input-group .form-control:invalid:focus, .input-group .form-control.is-invalid:focus, .was-validated\n.input-group .form-select:invalid:focus,\n.input-group .form-select.is-invalid:focus {\n  z-index: 3;\n}\n\n.btn {\n  display: inline-block;\n  font-weight: 400;\n  line-height: 1.5;\n  color: #444;\n  text-align: center;\n  text-decoration: none;\n  vertical-align: middle;\n  cursor: pointer;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  user-select: none;\n  background-color: transparent;\n  border: 1px solid transparent;\n  padding: 0.375rem 0.75rem;\n  font-size: 1rem;\n  border-radius: 0;\n  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .btn {\n    transition: none;\n  }\n}\n\n.btn:hover {\n  color: #444;\n}\n\n.btn-check:focus + .btn, .btn:focus {\n  outline: 0;\n  box-shadow: 0 0 0 0.25rem rgba(89, 49, 150, 0.25);\n}\n\n.btn:disabled, .btn.disabled,\nfieldset:disabled .btn {\n  pointer-events: none;\n  opacity: 0.65;\n}\n\n.btn-primary {\n  color: #fff;\n  background-color: #593196;\n  border-color: #593196;\n}\n\n.btn-primary:hover {\n  color: #fff;\n  background-color: #4c2a80;\n  border-color: #472778;\n}\n\n.btn-check:focus + .btn-primary, .btn-primary:focus {\n  color: #fff;\n  background-color: #4c2a80;\n  border-color: #472778;\n  box-shadow: 0 0 0 0.25rem rgba(114, 80, 166, 0.5);\n}\n\n.btn-check:checked + .btn-primary,\n.btn-check:active + .btn-primary, .btn-primary:active, .btn-primary.active,\n.show > .btn-primary.dropdown-toggle {\n  color: #fff;\n  background-color: #472778;\n  border-color: #432571;\n}\n\n.btn-check:checked + .btn-primary:focus,\n.btn-check:active + .btn-primary:focus, .btn-primary:active:focus, .btn-primary.active:focus,\n.show > .btn-primary.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.25rem rgba(114, 80, 166, 0.5);\n}\n\n.btn-primary:disabled, .btn-primary.disabled {\n  color: #fff;\n  background-color: #593196;\n  border-color: #593196;\n}\n\n.btn-secondary {\n  color: #fff;\n  background-color: #a991d4;\n  border-color: #a991d4;\n}\n\n.btn-secondary:hover {\n  color: #fff;\n  background-color: #907bb4;\n  border-color: #8774aa;\n}\n\n.btn-check:focus + .btn-secondary, .btn-secondary:focus {\n  color: #fff;\n  background-color: #907bb4;\n  border-color: #8774aa;\n  box-shadow: 0 0 0 0.25rem rgba(182, 162, 218, 0.5);\n}\n\n.btn-check:checked + .btn-secondary,\n.btn-check:active + .btn-secondary, .btn-secondary:active, .btn-secondary.active,\n.show > .btn-secondary.dropdown-toggle {\n  color: #fff;\n  background-color: #8774aa;\n  border-color: #7f6d9f;\n}\n\n.btn-check:checked + .btn-secondary:focus,\n.btn-check:active + .btn-secondary:focus, .btn-secondary:active:focus, .btn-secondary.active:focus,\n.show > .btn-secondary.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.25rem rgba(182, 162, 218, 0.5);\n}\n\n.btn-secondary:disabled, .btn-secondary.disabled {\n  color: #fff;\n  background-color: #a991d4;\n  border-color: #a991d4;\n}\n\n.btn-success {\n  color: #fff;\n  background-color: #13b955;\n  border-color: #13b955;\n}\n\n.btn-success:hover {\n  color: #fff;\n  background-color: #109d48;\n  border-color: #0f9444;\n}\n\n.btn-check:focus + .btn-success, .btn-success:focus {\n  color: #fff;\n  background-color: #109d48;\n  border-color: #0f9444;\n  box-shadow: 0 0 0 0.25rem rgba(54, 196, 111, 0.5);\n}\n\n.btn-check:checked + .btn-success,\n.btn-check:active + .btn-success, .btn-success:active, .btn-success.active,\n.show > .btn-success.dropdown-toggle {\n  color: #fff;\n  background-color: #0f9444;\n  border-color: #0e8b40;\n}\n\n.btn-check:checked + .btn-success:focus,\n.btn-check:active + .btn-success:focus, .btn-success:active:focus, .btn-success.active:focus,\n.show > .btn-success.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.25rem rgba(54, 196, 111, 0.5);\n}\n\n.btn-success:disabled, .btn-success.disabled {\n  color: #fff;\n  background-color: #13b955;\n  border-color: #13b955;\n}\n\n.btn-info {\n  color: #fff;\n  background-color: #009cdc;\n  border-color: #009cdc;\n}\n\n.btn-info:hover {\n  color: #fff;\n  background-color: #0085bb;\n  border-color: #007db0;\n}\n\n.btn-check:focus + .btn-info, .btn-info:focus {\n  color: #fff;\n  background-color: #0085bb;\n  border-color: #007db0;\n  box-shadow: 0 0 0 0.25rem rgba(38, 171, 225, 0.5);\n}\n\n.btn-check:checked + .btn-info,\n.btn-check:active + .btn-info, .btn-info:active, .btn-info.active,\n.show > .btn-info.dropdown-toggle {\n  color: #fff;\n  background-color: #007db0;\n  border-color: #0075a5;\n}\n\n.btn-check:checked + .btn-info:focus,\n.btn-check:active + .btn-info:focus, .btn-info:active:focus, .btn-info.active:focus,\n.show > .btn-info.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.25rem rgba(38, 171, 225, 0.5);\n}\n\n.btn-info:disabled, .btn-info.disabled {\n  color: #fff;\n  background-color: #009cdc;\n  border-color: #009cdc;\n}\n\n.btn-warning {\n  color: #fff;\n  background-color: #efa31d;\n  border-color: #efa31d;\n}\n\n.btn-warning:hover {\n  color: #fff;\n  background-color: #cb8b19;\n  border-color: #bf8217;\n}\n\n.btn-check:focus + .btn-warning, .btn-warning:focus {\n  color: #fff;\n  background-color: #cb8b19;\n  border-color: #bf8217;\n  box-shadow: 0 0 0 0.25rem rgba(241, 177, 63, 0.5);\n}\n\n.btn-check:checked + .btn-warning,\n.btn-check:active + .btn-warning, .btn-warning:active, .btn-warning.active,\n.show > .btn-warning.dropdown-toggle {\n  color: #fff;\n  background-color: #bf8217;\n  border-color: #b37a16;\n}\n\n.btn-check:checked + .btn-warning:focus,\n.btn-check:active + .btn-warning:focus, .btn-warning:active:focus, .btn-warning.active:focus,\n.show > .btn-warning.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.25rem rgba(241, 177, 63, 0.5);\n}\n\n.btn-warning:disabled, .btn-warning.disabled {\n  color: #fff;\n  background-color: #efa31d;\n  border-color: #efa31d;\n}\n\n.btn-danger {\n  color: #fff;\n  background-color: #fc3939;\n  border-color: #fc3939;\n}\n\n.btn-danger:hover {\n  color: #fff;\n  background-color: #d63030;\n  border-color: #ca2e2e;\n}\n\n.btn-check:focus + .btn-danger, .btn-danger:focus {\n  color: #fff;\n  background-color: #d63030;\n  border-color: #ca2e2e;\n  box-shadow: 0 0 0 0.25rem rgba(252, 87, 87, 0.5);\n}\n\n.btn-check:checked + .btn-danger,\n.btn-check:active + .btn-danger, .btn-danger:active, .btn-danger.active,\n.show > .btn-danger.dropdown-toggle {\n  color: #fff;\n  background-color: #ca2e2e;\n  border-color: #bd2b2b;\n}\n\n.btn-check:checked + .btn-danger:focus,\n.btn-check:active + .btn-danger:focus, .btn-danger:active:focus, .btn-danger.active:focus,\n.show > .btn-danger.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.25rem rgba(252, 87, 87, 0.5);\n}\n\n.btn-danger:disabled, .btn-danger.disabled {\n  color: #fff;\n  background-color: #fc3939;\n  border-color: #fc3939;\n}\n\n.btn-light {\n  color: #000;\n  background-color: #f9f8fc;\n  border-color: #f9f8fc;\n}\n\n.btn-light:hover {\n  color: #000;\n  background-color: #faf9fc;\n  border-color: #faf9fc;\n}\n\n.btn-check:focus + .btn-light, .btn-light:focus {\n  color: #000;\n  background-color: #faf9fc;\n  border-color: #faf9fc;\n  box-shadow: 0 0 0 0.25rem rgba(212, 211, 214, 0.5);\n}\n\n.btn-check:checked + .btn-light,\n.btn-check:active + .btn-light, .btn-light:active, .btn-light.active,\n.show > .btn-light.dropdown-toggle {\n  color: #000;\n  background-color: #faf9fd;\n  border-color: #faf9fc;\n}\n\n.btn-check:checked + .btn-light:focus,\n.btn-check:active + .btn-light:focus, .btn-light:active:focus, .btn-light.active:focus,\n.show > .btn-light.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.25rem rgba(212, 211, 214, 0.5);\n}\n\n.btn-light:disabled, .btn-light.disabled {\n  color: #000;\n  background-color: #f9f8fc;\n  border-color: #f9f8fc;\n}\n\n.btn-dark {\n  color: #fff;\n  background-color: #17141f;\n  border-color: #17141f;\n}\n\n.btn-dark:hover {\n  color: #fff;\n  background-color: #14111a;\n  border-color: #121019;\n}\n\n.btn-check:focus + .btn-dark, .btn-dark:focus {\n  color: #fff;\n  background-color: #14111a;\n  border-color: #121019;\n  box-shadow: 0 0 0 0.25rem rgba(58, 55, 65, 0.5);\n}\n\n.btn-check:checked + .btn-dark,\n.btn-check:active + .btn-dark, .btn-dark:active, .btn-dark.active,\n.show > .btn-dark.dropdown-toggle {\n  color: #fff;\n  background-color: #121019;\n  border-color: #110f17;\n}\n\n.btn-check:checked + .btn-dark:focus,\n.btn-check:active + .btn-dark:focus, .btn-dark:active:focus, .btn-dark.active:focus,\n.show > .btn-dark.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.25rem rgba(58, 55, 65, 0.5);\n}\n\n.btn-dark:disabled, .btn-dark.disabled {\n  color: #fff;\n  background-color: #17141f;\n  border-color: #17141f;\n}\n\n.btn-outline-primary {\n  color: #593196;\n  border-color: #593196;\n}\n\n.btn-outline-primary:hover {\n  color: #fff;\n  background-color: #593196;\n  border-color: #593196;\n}\n\n.btn-check:focus + .btn-outline-primary, .btn-outline-primary:focus {\n  box-shadow: 0 0 0 0.25rem rgba(89, 49, 150, 0.5);\n}\n\n.btn-check:checked + .btn-outline-primary,\n.btn-check:active + .btn-outline-primary, .btn-outline-primary:active, .btn-outline-primary.active, .btn-outline-primary.dropdown-toggle.show {\n  color: #fff;\n  background-color: #593196;\n  border-color: #593196;\n}\n\n.btn-check:checked + .btn-outline-primary:focus,\n.btn-check:active + .btn-outline-primary:focus, .btn-outline-primary:active:focus, .btn-outline-primary.active:focus, .btn-outline-primary.dropdown-toggle.show:focus {\n  box-shadow: 0 0 0 0.25rem rgba(89, 49, 150, 0.5);\n}\n\n.btn-outline-primary:disabled, .btn-outline-primary.disabled {\n  color: #593196;\n  background-color: transparent;\n}\n\n.btn-outline-secondary {\n  color: #a991d4;\n  border-color: #a991d4;\n}\n\n.btn-outline-secondary:hover {\n  color: #fff;\n  background-color: #a991d4;\n  border-color: #a991d4;\n}\n\n.btn-check:focus + .btn-outline-secondary, .btn-outline-secondary:focus {\n  box-shadow: 0 0 0 0.25rem rgba(169, 145, 212, 0.5);\n}\n\n.btn-check:checked + .btn-outline-secondary,\n.btn-check:active + .btn-outline-secondary, .btn-outline-secondary:active, .btn-outline-secondary.active, .btn-outline-secondary.dropdown-toggle.show {\n  color: #fff;\n  background-color: #a991d4;\n  border-color: #a991d4;\n}\n\n.btn-check:checked + .btn-outline-secondary:focus,\n.btn-check:active + .btn-outline-secondary:focus, .btn-outline-secondary:active:focus, .btn-outline-secondary.active:focus, .btn-outline-secondary.dropdown-toggle.show:focus {\n  box-shadow: 0 0 0 0.25rem rgba(169, 145, 212, 0.5);\n}\n\n.btn-outline-secondary:disabled, .btn-outline-secondary.disabled {\n  color: #a991d4;\n  background-color: transparent;\n}\n\n.btn-outline-success {\n  color: #13b955;\n  border-color: #13b955;\n}\n\n.btn-outline-success:hover {\n  color: #fff;\n  background-color: #13b955;\n  border-color: #13b955;\n}\n\n.btn-check:focus + .btn-outline-success, .btn-outline-success:focus {\n  box-shadow: 0 0 0 0.25rem rgba(19, 185, 85, 0.5);\n}\n\n.btn-check:checked + .btn-outline-success,\n.btn-check:active + .btn-outline-success, .btn-outline-success:active, .btn-outline-success.active, .btn-outline-success.dropdown-toggle.show {\n  color: #fff;\n  background-color: #13b955;\n  border-color: #13b955;\n}\n\n.btn-check:checked + .btn-outline-success:focus,\n.btn-check:active + .btn-outline-success:focus, .btn-outline-success:active:focus, .btn-outline-success.active:focus, .btn-outline-success.dropdown-toggle.show:focus {\n  box-shadow: 0 0 0 0.25rem rgba(19, 185, 85, 0.5);\n}\n\n.btn-outline-success:disabled, .btn-outline-success.disabled {\n  color: #13b955;\n  background-color: transparent;\n}\n\n.btn-outline-info {\n  color: #009cdc;\n  border-color: #009cdc;\n}\n\n.btn-outline-info:hover {\n  color: #fff;\n  background-color: #009cdc;\n  border-color: #009cdc;\n}\n\n.btn-check:focus + .btn-outline-info, .btn-outline-info:focus {\n  box-shadow: 0 0 0 0.25rem rgba(0, 156, 220, 0.5);\n}\n\n.btn-check:checked + .btn-outline-info,\n.btn-check:active + .btn-outline-info, .btn-outline-info:active, .btn-outline-info.active, .btn-outline-info.dropdown-toggle.show {\n  color: #fff;\n  background-color: #009cdc;\n  border-color: #009cdc;\n}\n\n.btn-check:checked + .btn-outline-info:focus,\n.btn-check:active + .btn-outline-info:focus, .btn-outline-info:active:focus, .btn-outline-info.active:focus, .btn-outline-info.dropdown-toggle.show:focus {\n  box-shadow: 0 0 0 0.25rem rgba(0, 156, 220, 0.5);\n}\n\n.btn-outline-info:disabled, .btn-outline-info.disabled {\n  color: #009cdc;\n  background-color: transparent;\n}\n\n.btn-outline-warning {\n  color: #efa31d;\n  border-color: #efa31d;\n}\n\n.btn-outline-warning:hover {\n  color: #fff;\n  background-color: #efa31d;\n  border-color: #efa31d;\n}\n\n.btn-check:focus + .btn-outline-warning, .btn-outline-warning:focus {\n  box-shadow: 0 0 0 0.25rem rgba(239, 163, 29, 0.5);\n}\n\n.btn-check:checked + .btn-outline-warning,\n.btn-check:active + .btn-outline-warning, .btn-outline-warning:active, .btn-outline-warning.active, .btn-outline-warning.dropdown-toggle.show {\n  color: #fff;\n  background-color: #efa31d;\n  border-color: #efa31d;\n}\n\n.btn-check:checked + .btn-outline-warning:focus,\n.btn-check:active + .btn-outline-warning:focus, .btn-outline-warning:active:focus, .btn-outline-warning.active:focus, .btn-outline-warning.dropdown-toggle.show:focus {\n  box-shadow: 0 0 0 0.25rem rgba(239, 163, 29, 0.5);\n}\n\n.btn-outline-warning:disabled, .btn-outline-warning.disabled {\n  color: #efa31d;\n  background-color: transparent;\n}\n\n.btn-outline-danger {\n  color: #fc3939;\n  border-color: #fc3939;\n}\n\n.btn-outline-danger:hover {\n  color: #fff;\n  background-color: #fc3939;\n  border-color: #fc3939;\n}\n\n.btn-check:focus + .btn-outline-danger, .btn-outline-danger:focus {\n  box-shadow: 0 0 0 0.25rem rgba(252, 57, 57, 0.5);\n}\n\n.btn-check:checked + .btn-outline-danger,\n.btn-check:active + .btn-outline-danger, .btn-outline-danger:active, .btn-outline-danger.active, .btn-outline-danger.dropdown-toggle.show {\n  color: #fff;\n  background-color: #fc3939;\n  border-color: #fc3939;\n}\n\n.btn-check:checked + .btn-outline-danger:focus,\n.btn-check:active + .btn-outline-danger:focus, .btn-outline-danger:active:focus, .btn-outline-danger.active:focus, .btn-outline-danger.dropdown-toggle.show:focus {\n  box-shadow: 0 0 0 0.25rem rgba(252, 57, 57, 0.5);\n}\n\n.btn-outline-danger:disabled, .btn-outline-danger.disabled {\n  color: #fc3939;\n  background-color: transparent;\n}\n\n.btn-outline-light {\n  color: #f9f8fc;\n  border-color: #f9f8fc;\n}\n\n.btn-outline-light:hover {\n  color: #000;\n  background-color: #f9f8fc;\n  border-color: #f9f8fc;\n}\n\n.btn-check:focus + .btn-outline-light, .btn-outline-light:focus {\n  box-shadow: 0 0 0 0.25rem rgba(249, 248, 252, 0.5);\n}\n\n.btn-check:checked + .btn-outline-light,\n.btn-check:active + .btn-outline-light, .btn-outline-light:active, .btn-outline-light.active, .btn-outline-light.dropdown-toggle.show {\n  color: #000;\n  background-color: #f9f8fc;\n  border-color: #f9f8fc;\n}\n\n.btn-check:checked + .btn-outline-light:focus,\n.btn-check:active + .btn-outline-light:focus, .btn-outline-light:active:focus, .btn-outline-light.active:focus, .btn-outline-light.dropdown-toggle.show:focus {\n  box-shadow: 0 0 0 0.25rem rgba(249, 248, 252, 0.5);\n}\n\n.btn-outline-light:disabled, .btn-outline-light.disabled {\n  color: #f9f8fc;\n  background-color: transparent;\n}\n\n.btn-outline-dark {\n  color: #17141f;\n  border-color: #17141f;\n}\n\n.btn-outline-dark:hover {\n  color: #fff;\n  background-color: #17141f;\n  border-color: #17141f;\n}\n\n.btn-check:focus + .btn-outline-dark, .btn-outline-dark:focus {\n  box-shadow: 0 0 0 0.25rem rgba(23, 20, 31, 0.5);\n}\n\n.btn-check:checked + .btn-outline-dark,\n.btn-check:active + .btn-outline-dark, .btn-outline-dark:active, .btn-outline-dark.active, .btn-outline-dark.dropdown-toggle.show {\n  color: #fff;\n  background-color: #17141f;\n  border-color: #17141f;\n}\n\n.btn-check:checked + .btn-outline-dark:focus,\n.btn-check:active + .btn-outline-dark:focus, .btn-outline-dark:active:focus, .btn-outline-dark.active:focus, .btn-outline-dark.dropdown-toggle.show:focus {\n  box-shadow: 0 0 0 0.25rem rgba(23, 20, 31, 0.5);\n}\n\n.btn-outline-dark:disabled, .btn-outline-dark.disabled {\n  color: #17141f;\n  background-color: transparent;\n}\n\n.btn-link {\n  font-weight: 400;\n  color: #593196;\n  text-decoration: underline;\n}\n\n.btn-link:hover {\n  color: #593196;\n}\n\n.btn-link:disabled, .btn-link.disabled {\n  color: #868e96;\n}\n\n.btn-lg, .btn-group-lg > .btn {\n  padding: 0.5rem 1rem;\n  font-size: 1.25rem;\n  border-radius: 0;\n}\n\n.btn-sm, .btn-group-sm > .btn {\n  padding: 0.25rem 0.5rem;\n  font-size: 0.875rem;\n  border-radius: 0;\n}\n\n.fade {\n  transition: opacity 0.15s linear;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .fade {\n    transition: none;\n  }\n}\n\n.fade:not(.show) {\n  opacity: 0;\n}\n\n.collapse:not(.show) {\n  display: none;\n}\n\n.collapsing {\n  height: 0;\n  overflow: hidden;\n  transition: height 0.35s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .collapsing {\n    transition: none;\n  }\n}\n\n.collapsing.collapse-horizontal {\n  width: 0;\n  height: auto;\n  transition: width 0.35s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .collapsing.collapse-horizontal {\n    transition: none;\n  }\n}\n\n.dropup,\n.dropend,\n.dropdown,\n.dropstart {\n  position: relative;\n}\n\n.dropdown-toggle {\n  white-space: nowrap;\n}\n\n.dropdown-toggle::after {\n  display: inline-block;\n  margin-left: 0.255em;\n  vertical-align: 0.255em;\n  content: \"\";\n  border-top: 0.3em solid;\n  border-right: 0.3em solid transparent;\n  border-bottom: 0;\n  border-left: 0.3em solid transparent;\n}\n\n.dropdown-toggle:empty::after {\n  margin-left: 0;\n}\n\n.dropdown-menu {\n  position: absolute;\n  z-index: 1000;\n  display: none;\n  min-width: 10rem;\n  padding: 0.5rem 0;\n  margin: 0;\n  font-size: 1rem;\n  color: #444;\n  text-align: left;\n  list-style: none;\n  background-color: #fff;\n  background-clip: padding-box;\n  border: 1px solid rgba(0, 0, 0, 0.15);\n}\n\n.dropdown-menu[data-bs-popper] {\n  top: 100%;\n  left: 0;\n  margin-top: 0.125rem;\n}\n\n.dropdown-menu-start {\n  --bs-position: start;\n}\n\n.dropdown-menu-start[data-bs-popper] {\n  right: auto;\n  left: 0;\n}\n\n.dropdown-menu-end {\n  --bs-position: end;\n}\n\n.dropdown-menu-end[data-bs-popper] {\n  right: 0;\n  left: auto;\n}\n\n@media (min-width: 576px) {\n  .dropdown-menu-sm-start {\n    --bs-position: start;\n  }\n  .dropdown-menu-sm-start[data-bs-popper] {\n    right: auto;\n    left: 0;\n  }\n  .dropdown-menu-sm-end {\n    --bs-position: end;\n  }\n  .dropdown-menu-sm-end[data-bs-popper] {\n    right: 0;\n    left: auto;\n  }\n}\n\n@media (min-width: 768px) {\n  .dropdown-menu-md-start {\n    --bs-position: start;\n  }\n  .dropdown-menu-md-start[data-bs-popper] {\n    right: auto;\n    left: 0;\n  }\n  .dropdown-menu-md-end {\n    --bs-position: end;\n  }\n  .dropdown-menu-md-end[data-bs-popper] {\n    right: 0;\n    left: auto;\n  }\n}\n\n@media (min-width: 992px) {\n  .dropdown-menu-lg-start {\n    --bs-position: start;\n  }\n  .dropdown-menu-lg-start[data-bs-popper] {\n    right: auto;\n    left: 0;\n  }\n  .dropdown-menu-lg-end {\n    --bs-position: end;\n  }\n  .dropdown-menu-lg-end[data-bs-popper] {\n    right: 0;\n    left: auto;\n  }\n}\n\n@media (min-width: 1200px) {\n  .dropdown-menu-xl-start {\n    --bs-position: start;\n  }\n  .dropdown-menu-xl-start[data-bs-popper] {\n    right: auto;\n    left: 0;\n  }\n  .dropdown-menu-xl-end {\n    --bs-position: end;\n  }\n  .dropdown-menu-xl-end[data-bs-popper] {\n    right: 0;\n    left: auto;\n  }\n}\n\n@media (min-width: 1400px) {\n  .dropdown-menu-xxl-start {\n    --bs-position: start;\n  }\n  .dropdown-menu-xxl-start[data-bs-popper] {\n    right: auto;\n    left: 0;\n  }\n  .dropdown-menu-xxl-end {\n    --bs-position: end;\n  }\n  .dropdown-menu-xxl-end[data-bs-popper] {\n    right: 0;\n    left: auto;\n  }\n}\n\n.dropup .dropdown-menu[data-bs-popper] {\n  top: auto;\n  bottom: 100%;\n  margin-top: 0;\n  margin-bottom: 0.125rem;\n}\n\n.dropup .dropdown-toggle::after {\n  display: inline-block;\n  margin-left: 0.255em;\n  vertical-align: 0.255em;\n  content: \"\";\n  border-top: 0;\n  border-right: 0.3em solid transparent;\n  border-bottom: 0.3em solid;\n  border-left: 0.3em solid transparent;\n}\n\n.dropup .dropdown-toggle:empty::after {\n  margin-left: 0;\n}\n\n.dropend .dropdown-menu[data-bs-popper] {\n  top: 0;\n  right: auto;\n  left: 100%;\n  margin-top: 0;\n  margin-left: 0.125rem;\n}\n\n.dropend .dropdown-toggle::after {\n  display: inline-block;\n  margin-left: 0.255em;\n  vertical-align: 0.255em;\n  content: \"\";\n  border-top: 0.3em solid transparent;\n  border-right: 0;\n  border-bottom: 0.3em solid transparent;\n  border-left: 0.3em solid;\n}\n\n.dropend .dropdown-toggle:empty::after {\n  margin-left: 0;\n}\n\n.dropend .dropdown-toggle::after {\n  vertical-align: 0;\n}\n\n.dropstart .dropdown-menu[data-bs-popper] {\n  top: 0;\n  right: 100%;\n  left: auto;\n  margin-top: 0;\n  margin-right: 0.125rem;\n}\n\n.dropstart .dropdown-toggle::after {\n  display: inline-block;\n  margin-left: 0.255em;\n  vertical-align: 0.255em;\n  content: \"\";\n}\n\n.dropstart .dropdown-toggle::after {\n  display: none;\n}\n\n.dropstart .dropdown-toggle::before {\n  display: inline-block;\n  margin-right: 0.255em;\n  vertical-align: 0.255em;\n  content: \"\";\n  border-top: 0.3em solid transparent;\n  border-right: 0.3em solid;\n  border-bottom: 0.3em solid transparent;\n}\n\n.dropstart .dropdown-toggle:empty::after {\n  margin-left: 0;\n}\n\n.dropstart .dropdown-toggle::before {\n  vertical-align: 0;\n}\n\n.dropdown-divider {\n  height: 0;\n  margin: 0.5rem 0;\n  overflow: hidden;\n  border-top: 1px solid rgba(0, 0, 0, 0.15);\n}\n\n.dropdown-item {\n  display: block;\n  width: 100%;\n  padding: 0.25rem 1rem;\n  clear: both;\n  font-weight: 400;\n  color: #444;\n  text-align: inherit;\n  text-decoration: none;\n  white-space: nowrap;\n  background-color: transparent;\n  border: 0;\n}\n\n.dropdown-item:hover, .dropdown-item:focus {\n  color: #fff;\n  background-color: #593196;\n}\n\n.dropdown-item.active, .dropdown-item:active {\n  color: #fff;\n  text-decoration: none;\n  background-color: #593196;\n}\n\n.dropdown-item.disabled, .dropdown-item:disabled {\n  color: #adb5bd;\n  pointer-events: none;\n  background-color: transparent;\n}\n\n.dropdown-menu.show {\n  display: block;\n}\n\n.dropdown-header {\n  display: block;\n  padding: 0.5rem 1rem;\n  margin-bottom: 0;\n  font-size: 0.875rem;\n  color: #868e96;\n  white-space: nowrap;\n}\n\n.dropdown-item-text {\n  display: block;\n  padding: 0.25rem 1rem;\n  color: #444;\n}\n\n.dropdown-menu-dark {\n  color: #ededed;\n  background-color: #343a40;\n  border-color: rgba(0, 0, 0, 0.15);\n}\n\n.dropdown-menu-dark .dropdown-item {\n  color: #ededed;\n}\n\n.dropdown-menu-dark .dropdown-item:hover, .dropdown-menu-dark .dropdown-item:focus {\n  color: #fff;\n  background-color: rgba(255, 255, 255, 0.15);\n}\n\n.dropdown-menu-dark .dropdown-item.active, .dropdown-menu-dark .dropdown-item:active {\n  color: #fff;\n  background-color: #593196;\n}\n\n.dropdown-menu-dark .dropdown-item.disabled, .dropdown-menu-dark .dropdown-item:disabled {\n  color: #adb5bd;\n}\n\n.dropdown-menu-dark .dropdown-divider {\n  border-color: rgba(0, 0, 0, 0.15);\n}\n\n.dropdown-menu-dark .dropdown-item-text {\n  color: #ededed;\n}\n\n.dropdown-menu-dark .dropdown-header {\n  color: #adb5bd;\n}\n\n.btn-group,\n.btn-group-vertical {\n  position: relative;\n  display: -ms-inline-flexbox;\n  display: inline-flex;\n  vertical-align: middle;\n}\n\n.btn-group > .btn,\n.btn-group-vertical > .btn {\n  position: relative;\n  -ms-flex: 1 1 auto;\n  flex: 1 1 auto;\n}\n\n.btn-group > .btn-check:checked + .btn,\n.btn-group > .btn-check:focus + .btn,\n.btn-group > .btn:hover,\n.btn-group > .btn:focus,\n.btn-group > .btn:active,\n.btn-group > .btn.active,\n.btn-group-vertical > .btn-check:checked + .btn,\n.btn-group-vertical > .btn-check:focus + .btn,\n.btn-group-vertical > .btn:hover,\n.btn-group-vertical > .btn:focus,\n.btn-group-vertical > .btn:active,\n.btn-group-vertical > .btn.active {\n  z-index: 1;\n}\n\n.btn-toolbar {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n  flex-wrap: wrap;\n  -ms-flex-pack: start;\n  justify-content: flex-start;\n}\n\n.btn-toolbar .input-group {\n  width: auto;\n}\n\n.btn-group > .btn:not(:first-child),\n.btn-group > .btn-group:not(:first-child) {\n  margin-left: -1px;\n}\n\n.dropdown-toggle-split {\n  padding-right: 0.5625rem;\n  padding-left: 0.5625rem;\n}\n\n.dropdown-toggle-split::after,\n.dropup .dropdown-toggle-split::after,\n.dropend .dropdown-toggle-split::after {\n  margin-left: 0;\n}\n\n.dropstart .dropdown-toggle-split::before {\n  margin-right: 0;\n}\n\n.btn-sm + .dropdown-toggle-split, .btn-group-sm > .btn + .dropdown-toggle-split {\n  padding-right: 0.375rem;\n  padding-left: 0.375rem;\n}\n\n.btn-lg + .dropdown-toggle-split, .btn-group-lg > .btn + .dropdown-toggle-split {\n  padding-right: 0.75rem;\n  padding-left: 0.75rem;\n}\n\n.btn-group-vertical {\n  -ms-flex-direction: column;\n  flex-direction: column;\n  -ms-flex-align: start;\n  align-items: flex-start;\n  -ms-flex-pack: center;\n  justify-content: center;\n}\n\n.btn-group-vertical > .btn,\n.btn-group-vertical > .btn-group {\n  width: 100%;\n}\n\n.btn-group-vertical > .btn:not(:first-child),\n.btn-group-vertical > .btn-group:not(:first-child) {\n  margin-top: -1px;\n}\n\n.nav {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n  flex-wrap: wrap;\n  padding-left: 0;\n  margin-bottom: 0;\n  list-style: none;\n}\n\n.nav-link {\n  display: block;\n  padding: 0.5rem 1rem;\n  color: #593196;\n  text-decoration: none;\n  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .nav-link {\n    transition: none;\n  }\n}\n\n.nav-link:hover, .nav-link:focus {\n  color: #593196;\n}\n\n.nav-link.disabled {\n  color: #868e96;\n  pointer-events: none;\n  cursor: default;\n}\n\n.nav-tabs {\n  border-bottom: 1px solid #ededed;\n}\n\n.nav-tabs .nav-link {\n  margin-bottom: -1px;\n  background: none;\n  border: 1px solid transparent;\n}\n\n.nav-tabs .nav-link:hover, .nav-tabs .nav-link:focus {\n  border-color: #593196;\n  isolation: isolate;\n}\n\n.nav-tabs .nav-link.disabled {\n  color: #868e96;\n  background-color: transparent;\n  border-color: transparent;\n}\n\n.nav-tabs .nav-link.active,\n.nav-tabs .nav-item.show .nav-link {\n  color: #444;\n  background-color: #fff;\n  border-color: #ededed #ededed #fff;\n}\n\n.nav-tabs .dropdown-menu {\n  margin-top: -1px;\n}\n\n.nav-pills .nav-link {\n  background: none;\n  border: 0;\n}\n\n.nav-pills .nav-link.active,\n.nav-pills .show > .nav-link {\n  color: #fff;\n  background-color: #593196;\n}\n\n.nav-fill > .nav-link,\n.nav-fill .nav-item {\n  -ms-flex: 1 1 auto;\n  flex: 1 1 auto;\n  text-align: center;\n}\n\n.nav-justified > .nav-link,\n.nav-justified .nav-item {\n  -ms-flex-preferred-size: 0;\n  flex-basis: 0;\n  -ms-flex-positive: 1;\n  flex-grow: 1;\n  text-align: center;\n}\n\n.nav-fill .nav-item .nav-link,\n.nav-justified .nav-item .nav-link {\n  width: 100%;\n}\n\n.tab-content > .tab-pane {\n  display: none;\n}\n\n.tab-content > .active {\n  display: block;\n}\n\n.navbar {\n  position: relative;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n  flex-wrap: wrap;\n  -ms-flex-align: center;\n  align-items: center;\n  -ms-flex-pack: justify;\n  justify-content: space-between;\n  padding-top: 1.2rem;\n  padding-bottom: 1.2rem;\n}\n\n.navbar > .container,\n.navbar > .container-fluid, .navbar > .container-sm, .navbar > .container-md, .navbar > .container-lg, .navbar > .container-xl, .navbar > .container-xxl {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: inherit;\n  flex-wrap: inherit;\n  -ms-flex-align: center;\n  align-items: center;\n  -ms-flex-pack: justify;\n  justify-content: space-between;\n}\n\n.navbar-brand {\n  padding-top: 0.3125rem;\n  padding-bottom: 0.3125rem;\n  margin-right: 1rem;\n  font-size: 1.25rem;\n  text-decoration: none;\n  white-space: nowrap;\n}\n\n.navbar-nav {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  padding-left: 0;\n  margin-bottom: 0;\n  list-style: none;\n}\n\n.navbar-nav .nav-link {\n  padding-right: 0;\n  padding-left: 0;\n}\n\n.navbar-nav .dropdown-menu {\n  position: static;\n}\n\n.navbar-text {\n  padding-top: 0.5rem;\n  padding-bottom: 0.5rem;\n}\n\n.navbar-collapse {\n  -ms-flex-preferred-size: 100%;\n  flex-basis: 100%;\n  -ms-flex-positive: 1;\n  flex-grow: 1;\n  -ms-flex-align: center;\n  align-items: center;\n}\n\n.navbar-toggler {\n  padding: 0.25rem 0.75rem;\n  font-size: 1.25rem;\n  line-height: 1;\n  background-color: transparent;\n  border: 1px solid transparent;\n  transition: box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .navbar-toggler {\n    transition: none;\n  }\n}\n\n.navbar-toggler:hover {\n  text-decoration: none;\n}\n\n.navbar-toggler:focus {\n  text-decoration: none;\n  outline: 0;\n  box-shadow: 0 0 0 0.25rem;\n}\n\n.navbar-toggler-icon {\n  display: inline-block;\n  width: 1.5em;\n  height: 1.5em;\n  vertical-align: middle;\n  background-repeat: no-repeat;\n  background-position: center;\n  background-size: 100%;\n}\n\n.navbar-nav-scroll {\n  max-height: var(--bs-scroll-height, 75vh);\n  overflow-y: auto;\n}\n\n@media (min-width: 576px) {\n  .navbar-expand-sm {\n    -ms-flex-wrap: nowrap;\n    flex-wrap: nowrap;\n    -ms-flex-pack: start;\n    justify-content: flex-start;\n  }\n  .navbar-expand-sm .navbar-nav {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .navbar-expand-sm .navbar-nav .dropdown-menu {\n    position: absolute;\n  }\n  .navbar-expand-sm .navbar-nav .nav-link {\n    padding-right: 0.5rem;\n    padding-left: 0.5rem;\n  }\n  .navbar-expand-sm .navbar-nav-scroll {\n    overflow: visible;\n  }\n  .navbar-expand-sm .navbar-collapse {\n    display: -ms-flexbox !important;\n    display: flex !important;\n    -ms-flex-preferred-size: auto;\n    flex-basis: auto;\n  }\n  .navbar-expand-sm .navbar-toggler {\n    display: none;\n  }\n  .navbar-expand-sm .offcanvas-header {\n    display: none;\n  }\n  .navbar-expand-sm .offcanvas {\n    position: inherit;\n    bottom: 0;\n    z-index: 1000;\n    -ms-flex-positive: 1;\n    flex-grow: 1;\n    visibility: visible !important;\n    background-color: transparent;\n    border-right: 0;\n    border-left: 0;\n    transition: none;\n    -webkit-transform: none;\n    transform: none;\n  }\n  .navbar-expand-sm .offcanvas-top,\n  .navbar-expand-sm .offcanvas-bottom {\n    height: auto;\n    border-top: 0;\n    border-bottom: 0;\n  }\n  .navbar-expand-sm .offcanvas-body {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-positive: 0;\n    flex-grow: 0;\n    padding: 0;\n    overflow-y: visible;\n  }\n}\n\n@media (min-width: 768px) {\n  .navbar-expand-md {\n    -ms-flex-wrap: nowrap;\n    flex-wrap: nowrap;\n    -ms-flex-pack: start;\n    justify-content: flex-start;\n  }\n  .navbar-expand-md .navbar-nav {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .navbar-expand-md .navbar-nav .dropdown-menu {\n    position: absolute;\n  }\n  .navbar-expand-md .navbar-nav .nav-link {\n    padding-right: 0.5rem;\n    padding-left: 0.5rem;\n  }\n  .navbar-expand-md .navbar-nav-scroll {\n    overflow: visible;\n  }\n  .navbar-expand-md .navbar-collapse {\n    display: -ms-flexbox !important;\n    display: flex !important;\n    -ms-flex-preferred-size: auto;\n    flex-basis: auto;\n  }\n  .navbar-expand-md .navbar-toggler {\n    display: none;\n  }\n  .navbar-expand-md .offcanvas-header {\n    display: none;\n  }\n  .navbar-expand-md .offcanvas {\n    position: inherit;\n    bottom: 0;\n    z-index: 1000;\n    -ms-flex-positive: 1;\n    flex-grow: 1;\n    visibility: visible !important;\n    background-color: transparent;\n    border-right: 0;\n    border-left: 0;\n    transition: none;\n    -webkit-transform: none;\n    transform: none;\n  }\n  .navbar-expand-md .offcanvas-top,\n  .navbar-expand-md .offcanvas-bottom {\n    height: auto;\n    border-top: 0;\n    border-bottom: 0;\n  }\n  .navbar-expand-md .offcanvas-body {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-positive: 0;\n    flex-grow: 0;\n    padding: 0;\n    overflow-y: visible;\n  }\n}\n\n@media (min-width: 992px) {\n  .navbar-expand-lg {\n    -ms-flex-wrap: nowrap;\n    flex-wrap: nowrap;\n    -ms-flex-pack: start;\n    justify-content: flex-start;\n  }\n  .navbar-expand-lg .navbar-nav {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .navbar-expand-lg .navbar-nav .dropdown-menu {\n    position: absolute;\n  }\n  .navbar-expand-lg .navbar-nav .nav-link {\n    padding-right: 0.5rem;\n    padding-left: 0.5rem;\n  }\n  .navbar-expand-lg .navbar-nav-scroll {\n    overflow: visible;\n  }\n  .navbar-expand-lg .navbar-collapse {\n    display: -ms-flexbox !important;\n    display: flex !important;\n    -ms-flex-preferred-size: auto;\n    flex-basis: auto;\n  }\n  .navbar-expand-lg .navbar-toggler {\n    display: none;\n  }\n  .navbar-expand-lg .offcanvas-header {\n    display: none;\n  }\n  .navbar-expand-lg .offcanvas {\n    position: inherit;\n    bottom: 0;\n    z-index: 1000;\n    -ms-flex-positive: 1;\n    flex-grow: 1;\n    visibility: visible !important;\n    background-color: transparent;\n    border-right: 0;\n    border-left: 0;\n    transition: none;\n    -webkit-transform: none;\n    transform: none;\n  }\n  .navbar-expand-lg .offcanvas-top,\n  .navbar-expand-lg .offcanvas-bottom {\n    height: auto;\n    border-top: 0;\n    border-bottom: 0;\n  }\n  .navbar-expand-lg .offcanvas-body {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-positive: 0;\n    flex-grow: 0;\n    padding: 0;\n    overflow-y: visible;\n  }\n}\n\n@media (min-width: 1200px) {\n  .navbar-expand-xl {\n    -ms-flex-wrap: nowrap;\n    flex-wrap: nowrap;\n    -ms-flex-pack: start;\n    justify-content: flex-start;\n  }\n  .navbar-expand-xl .navbar-nav {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .navbar-expand-xl .navbar-nav .dropdown-menu {\n    position: absolute;\n  }\n  .navbar-expand-xl .navbar-nav .nav-link {\n    padding-right: 0.5rem;\n    padding-left: 0.5rem;\n  }\n  .navbar-expand-xl .navbar-nav-scroll {\n    overflow: visible;\n  }\n  .navbar-expand-xl .navbar-collapse {\n    display: -ms-flexbox !important;\n    display: flex !important;\n    -ms-flex-preferred-size: auto;\n    flex-basis: auto;\n  }\n  .navbar-expand-xl .navbar-toggler {\n    display: none;\n  }\n  .navbar-expand-xl .offcanvas-header {\n    display: none;\n  }\n  .navbar-expand-xl .offcanvas {\n    position: inherit;\n    bottom: 0;\n    z-index: 1000;\n    -ms-flex-positive: 1;\n    flex-grow: 1;\n    visibility: visible !important;\n    background-color: transparent;\n    border-right: 0;\n    border-left: 0;\n    transition: none;\n    -webkit-transform: none;\n    transform: none;\n  }\n  .navbar-expand-xl .offcanvas-top,\n  .navbar-expand-xl .offcanvas-bottom {\n    height: auto;\n    border-top: 0;\n    border-bottom: 0;\n  }\n  .navbar-expand-xl .offcanvas-body {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-positive: 0;\n    flex-grow: 0;\n    padding: 0;\n    overflow-y: visible;\n  }\n}\n\n@media (min-width: 1400px) {\n  .navbar-expand-xxl {\n    -ms-flex-wrap: nowrap;\n    flex-wrap: nowrap;\n    -ms-flex-pack: start;\n    justify-content: flex-start;\n  }\n  .navbar-expand-xxl .navbar-nav {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .navbar-expand-xxl .navbar-nav .dropdown-menu {\n    position: absolute;\n  }\n  .navbar-expand-xxl .navbar-nav .nav-link {\n    padding-right: 0.5rem;\n    padding-left: 0.5rem;\n  }\n  .navbar-expand-xxl .navbar-nav-scroll {\n    overflow: visible;\n  }\n  .navbar-expand-xxl .navbar-collapse {\n    display: -ms-flexbox !important;\n    display: flex !important;\n    -ms-flex-preferred-size: auto;\n    flex-basis: auto;\n  }\n  .navbar-expand-xxl .navbar-toggler {\n    display: none;\n  }\n  .navbar-expand-xxl .offcanvas-header {\n    display: none;\n  }\n  .navbar-expand-xxl .offcanvas {\n    position: inherit;\n    bottom: 0;\n    z-index: 1000;\n    -ms-flex-positive: 1;\n    flex-grow: 1;\n    visibility: visible !important;\n    background-color: transparent;\n    border-right: 0;\n    border-left: 0;\n    transition: none;\n    -webkit-transform: none;\n    transform: none;\n  }\n  .navbar-expand-xxl .offcanvas-top,\n  .navbar-expand-xxl .offcanvas-bottom {\n    height: auto;\n    border-top: 0;\n    border-bottom: 0;\n  }\n  .navbar-expand-xxl .offcanvas-body {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-positive: 0;\n    flex-grow: 0;\n    padding: 0;\n    overflow-y: visible;\n  }\n}\n\n.navbar-expand {\n  -ms-flex-wrap: nowrap;\n  flex-wrap: nowrap;\n  -ms-flex-pack: start;\n  justify-content: flex-start;\n}\n\n.navbar-expand .navbar-nav {\n  -ms-flex-direction: row;\n  flex-direction: row;\n}\n\n.navbar-expand .navbar-nav .dropdown-menu {\n  position: absolute;\n}\n\n.navbar-expand .navbar-nav .nav-link {\n  padding-right: 0.5rem;\n  padding-left: 0.5rem;\n}\n\n.navbar-expand .navbar-nav-scroll {\n  overflow: visible;\n}\n\n.navbar-expand .navbar-collapse {\n  display: -ms-flexbox !important;\n  display: flex !important;\n  -ms-flex-preferred-size: auto;\n  flex-basis: auto;\n}\n\n.navbar-expand .navbar-toggler {\n  display: none;\n}\n\n.navbar-expand .offcanvas-header {\n  display: none;\n}\n\n.navbar-expand .offcanvas {\n  position: inherit;\n  bottom: 0;\n  z-index: 1000;\n  -ms-flex-positive: 1;\n  flex-grow: 1;\n  visibility: visible !important;\n  background-color: transparent;\n  border-right: 0;\n  border-left: 0;\n  transition: none;\n  -webkit-transform: none;\n  transform: none;\n}\n\n.navbar-expand .offcanvas-top,\n.navbar-expand .offcanvas-bottom {\n  height: auto;\n  border-top: 0;\n  border-bottom: 0;\n}\n\n.navbar-expand .offcanvas-body {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-positive: 0;\n  flex-grow: 0;\n  padding: 0;\n  overflow-y: visible;\n}\n\n.navbar-light .navbar-brand {\n  color: rgba(0, 0, 0, 0.7);\n}\n\n.navbar-light .navbar-brand:hover, .navbar-light .navbar-brand:focus {\n  color: rgba(0, 0, 0, 0.7);\n}\n\n.navbar-light .navbar-nav .nav-link {\n  color: rgba(0, 0, 0, 0.4);\n}\n\n.navbar-light .navbar-nav .nav-link:hover, .navbar-light .navbar-nav .nav-link:focus {\n  color: rgba(0, 0, 0, 0.7);\n}\n\n.navbar-light .navbar-nav .nav-link.disabled {\n  color: rgba(0, 0, 0, 0.2);\n}\n\n.navbar-light .navbar-nav .show > .nav-link,\n.navbar-light .navbar-nav .nav-link.active {\n  color: rgba(0, 0, 0, 0.7);\n}\n\n.navbar-light .navbar-toggler {\n  color: rgba(0, 0, 0, 0.4);\n  border-color: rgba(0, 0, 0, 0.1);\n}\n\n.navbar-light .navbar-toggler-icon {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%280, 0, 0, 0.4%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e\");\n}\n\n.navbar-light .navbar-text {\n  color: rgba(0, 0, 0, 0.4);\n}\n\n.navbar-light .navbar-text a,\n.navbar-light .navbar-text a:hover,\n.navbar-light .navbar-text a:focus {\n  color: rgba(0, 0, 0, 0.7);\n}\n\n.navbar-dark .navbar-brand {\n  color: rgba(255, 255, 255, 0.9);\n}\n\n.navbar-dark .navbar-brand:hover, .navbar-dark .navbar-brand:focus {\n  color: rgba(255, 255, 255, 0.9);\n}\n\n.navbar-dark .navbar-nav .nav-link {\n  color: rgba(255, 255, 255, 0.55);\n}\n\n.navbar-dark .navbar-nav .nav-link:hover, .navbar-dark .navbar-nav .nav-link:focus {\n  color: rgba(255, 255, 255, 0.9);\n}\n\n.navbar-dark .navbar-nav .nav-link.disabled {\n  color: rgba(255, 255, 255, 0.25);\n}\n\n.navbar-dark .navbar-nav .show > .nav-link,\n.navbar-dark .navbar-nav .nav-link.active {\n  color: rgba(255, 255, 255, 0.9);\n}\n\n.navbar-dark .navbar-toggler {\n  color: rgba(255, 255, 255, 0.55);\n  border-color: rgba(255, 255, 255, 0.1);\n}\n\n.navbar-dark .navbar-toggler-icon {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e\");\n}\n\n.navbar-dark .navbar-text {\n  color: rgba(255, 255, 255, 0.55);\n}\n\n.navbar-dark .navbar-text a,\n.navbar-dark .navbar-text a:hover,\n.navbar-dark .navbar-text a:focus {\n  color: rgba(255, 255, 255, 0.9);\n}\n\n.card {\n  position: relative;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  min-width: 0;\n  word-wrap: break-word;\n  background-color: #fff;\n  background-clip: border-box;\n  border: 1px solid rgba(0, 0, 0, 0.125);\n}\n\n.card > hr {\n  margin-right: 0;\n  margin-left: 0;\n}\n\n.card > .list-group {\n  border-top: inherit;\n  border-bottom: inherit;\n}\n\n.card > .list-group:first-child {\n  border-top-width: 0;\n}\n\n.card > .list-group:last-child {\n  border-bottom-width: 0;\n}\n\n.card > .card-header + .list-group,\n.card > .list-group + .card-footer {\n  border-top: 0;\n}\n\n.card-body {\n  -ms-flex: 1 1 auto;\n  flex: 1 1 auto;\n  padding: 1rem 1rem;\n}\n\n.card-title {\n  margin-bottom: 0.5rem;\n}\n\n.card-subtitle {\n  margin-top: -0.25rem;\n  margin-bottom: 0;\n}\n\n.card-text:last-child {\n  margin-bottom: 0;\n}\n\n.card-link + .card-link {\n  margin-left: 1rem;\n}\n\n.card-header {\n  padding: 0.5rem 1rem;\n  margin-bottom: 0;\n  background-color: rgba(0, 0, 0, 0.03);\n  border-bottom: 1px solid rgba(0, 0, 0, 0.125);\n}\n\n.card-footer {\n  padding: 0.5rem 1rem;\n  background-color: rgba(0, 0, 0, 0.03);\n  border-top: 1px solid rgba(0, 0, 0, 0.125);\n}\n\n.card-header-tabs {\n  margin-right: -0.5rem;\n  margin-bottom: -0.5rem;\n  margin-left: -0.5rem;\n  border-bottom: 0;\n}\n\n.card-header-pills {\n  margin-right: -0.5rem;\n  margin-left: -0.5rem;\n}\n\n.card-img-overlay {\n  position: absolute;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  padding: 1rem;\n}\n\n.card-img,\n.card-img-top,\n.card-img-bottom {\n  width: 100%;\n}\n\n.card-group > .card {\n  margin-bottom: 0.75rem;\n}\n\n@media (min-width: 576px) {\n  .card-group {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-flow: row wrap;\n    flex-flow: row wrap;\n  }\n  .card-group > .card {\n    -ms-flex: 1 0 0%;\n    flex: 1 0 0%;\n    margin-bottom: 0;\n  }\n  .card-group > .card + .card {\n    margin-left: 0;\n    border-left: 0;\n  }\n}\n\n.accordion-button {\n  position: relative;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-align: center;\n  align-items: center;\n  width: 100%;\n  padding: 1rem 1.25rem;\n  font-size: 1rem;\n  color: #444;\n  text-align: left;\n  background-color: #fff;\n  border: 0;\n  overflow-anchor: none;\n  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, border-radius 0.15s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .accordion-button {\n    transition: none;\n  }\n}\n\n.accordion-button:not(.collapsed) {\n  color: #502c87;\n  background-color: #eeeaf5;\n  box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.125);\n}\n\n.accordion-button:not(.collapsed)::after {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23502c87'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e\");\n  -webkit-transform: rotate(-180deg);\n  transform: rotate(-180deg);\n}\n\n.accordion-button::after {\n  -ms-flex-negative: 0;\n  flex-shrink: 0;\n  width: 1.25rem;\n  height: 1.25rem;\n  margin-left: auto;\n  content: \"\";\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23444'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e\");\n  background-repeat: no-repeat;\n  background-size: 1.25rem;\n  transition: -webkit-transform 0.2s ease-in-out;\n  transition: transform 0.2s ease-in-out;\n  transition: transform 0.2s ease-in-out, -webkit-transform 0.2s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .accordion-button::after {\n    transition: none;\n  }\n}\n\n.accordion-button:hover {\n  z-index: 2;\n}\n\n.accordion-button:focus {\n  z-index: 3;\n  border-color: #593196;\n  outline: 0;\n  box-shadow: 0 0 0 0.25rem rgba(89, 49, 150, 0.25);\n}\n\n.accordion-header {\n  margin-bottom: 0;\n}\n\n.accordion-item {\n  background-color: #fff;\n  border: 1px solid rgba(0, 0, 0, 0.125);\n}\n\n.accordion-item:not(:first-of-type) {\n  border-top: 0;\n}\n\n.accordion-body {\n  padding: 1rem 1.25rem;\n}\n\n.accordion-flush .accordion-collapse {\n  border-width: 0;\n}\n\n.accordion-flush .accordion-item {\n  border-right: 0;\n  border-left: 0;\n}\n\n.accordion-flush .accordion-item:first-child {\n  border-top: 0;\n}\n\n.accordion-flush .accordion-item:last-child {\n  border-bottom: 0;\n}\n\n.breadcrumb {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n  flex-wrap: wrap;\n  padding: 0 0;\n  margin-bottom: 1rem;\n  list-style: none;\n}\n\n.breadcrumb-item + .breadcrumb-item {\n  padding-left: 0.5rem;\n}\n\n.breadcrumb-item + .breadcrumb-item::before {\n  float: left;\n  padding-right: 0.5rem;\n  color: #868e96;\n  content: var(--bs-breadcrumb-divider, \"/\") /* rtl: var(--bs-breadcrumb-divider, \"/\") */;\n}\n\n.breadcrumb-item.active {\n  color: #868e96;\n}\n\n.pagination {\n  display: -ms-flexbox;\n  display: flex;\n  padding-left: 0;\n  list-style: none;\n}\n\n.page-link {\n  position: relative;\n  display: block;\n  color: #593196;\n  text-decoration: none;\n  background-color: #fff;\n  border: 1px solid #ededed;\n  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .page-link {\n    transition: none;\n  }\n}\n\n.page-link:hover {\n  z-index: 2;\n  color: #593196;\n  background-color: #f9f8fc;\n  border-color: #ededed;\n}\n\n.page-link:focus {\n  z-index: 3;\n  color: #593196;\n  background-color: #f9f8fc;\n  outline: 0;\n  box-shadow: 0 0 0 0.25rem rgba(89, 49, 150, 0.25);\n}\n\n.page-item:not(:first-child) .page-link {\n  margin-left: -1px;\n}\n\n.page-item.active .page-link {\n  z-index: 3;\n  color: #fff;\n  background-color: #593196;\n  border-color: #593196;\n}\n\n.page-item.disabled .page-link {\n  color: #868e96;\n  pointer-events: none;\n  background-color: #fff;\n  border-color: #ededed;\n}\n\n.page-link {\n  padding: 0.375rem 0.75rem;\n}\n\n.pagination-lg .page-link {\n  padding: 0.75rem 1.5rem;\n  font-size: 1.25rem;\n}\n\n.pagination-sm .page-link {\n  padding: 0.25rem 0.5rem;\n  font-size: 0.875rem;\n}\n\n.badge {\n  display: inline-block;\n  padding: 0.35em 0.65em;\n  font-size: 0.75em;\n  font-weight: 700;\n  line-height: 1;\n  color: #fff;\n  text-align: center;\n  white-space: nowrap;\n  vertical-align: baseline;\n}\n\n.badge:empty {\n  display: none;\n}\n\n.btn .badge {\n  position: relative;\n  top: -1px;\n}\n\n.alert {\n  position: relative;\n  padding: 1rem 1rem;\n  margin-bottom: 1rem;\n  border: 1px solid transparent;\n}\n\n.alert-heading {\n  color: inherit;\n}\n\n.alert-link {\n  font-weight: 700;\n}\n\n.alert-dismissible {\n  padding-right: 3rem;\n}\n\n.alert-dismissible .btn-close {\n  position: absolute;\n  top: 0;\n  right: 0;\n  z-index: 2;\n  padding: 1.25rem 1rem;\n}\n\n.alert-primary {\n  color: #351d5a;\n  background-color: #ded6ea;\n  border-color: #cdc1e0;\n}\n\n.alert-primary .alert-link {\n  color: #2a1748;\n}\n\n.alert-secondary {\n  color: #65577f;\n  background-color: #eee9f6;\n  border-color: #e5def2;\n}\n\n.alert-secondary .alert-link {\n  color: #514666;\n}\n\n.alert-success {\n  color: #0b6f33;\n  background-color: #d0f1dd;\n  border-color: #b8eacc;\n}\n\n.alert-success .alert-link {\n  color: #095929;\n}\n\n.alert-info {\n  color: #005e84;\n  background-color: #ccebf8;\n  border-color: #b3e1f5;\n}\n\n.alert-info .alert-link {\n  color: #004b6a;\n}\n\n.alert-warning {\n  color: #8f6211;\n  background-color: #fcedd2;\n  border-color: #fae3bb;\n}\n\n.alert-warning .alert-link {\n  color: #724e0e;\n}\n\n.alert-danger {\n  color: #972222;\n  background-color: #fed7d7;\n  border-color: #fec4c4;\n}\n\n.alert-danger .alert-link {\n  color: #791b1b;\n}\n\n.alert-light {\n  color: #959597;\n  background-color: #fefefe;\n  border-color: #fdfdfe;\n}\n\n.alert-light .alert-link {\n  color: #777779;\n}\n\n.alert-dark {\n  color: #0e0c13;\n  background-color: #d1d0d2;\n  border-color: #b9b9bc;\n}\n\n.alert-dark .alert-link {\n  color: #0b0a0f;\n}\n\n@-webkit-keyframes progress-bar-stripes {\n  0% {\n    background-position-x: 1rem;\n  }\n}\n\n@keyframes progress-bar-stripes {\n  0% {\n    background-position-x: 1rem;\n  }\n}\n\n.progress {\n  display: -ms-flexbox;\n  display: flex;\n  height: 1rem;\n  overflow: hidden;\n  font-size: 0.75rem;\n  background-color: #ededed;\n}\n\n.progress-bar {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  -ms-flex-pack: center;\n  justify-content: center;\n  overflow: hidden;\n  color: #fff;\n  text-align: center;\n  white-space: nowrap;\n  background-color: #593196;\n  transition: width 0.6s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .progress-bar {\n    transition: none;\n  }\n}\n\n.progress-bar-striped {\n  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-size: 1rem 1rem;\n}\n\n.progress-bar-animated {\n  -webkit-animation: 1s linear infinite progress-bar-stripes;\n  animation: 1s linear infinite progress-bar-stripes;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .progress-bar-animated {\n    -webkit-animation: none;\n    animation: none;\n  }\n}\n\n.list-group {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  padding-left: 0;\n  margin-bottom: 0;\n}\n\n.list-group-numbered {\n  list-style-type: none;\n  counter-reset: section;\n}\n\n.list-group-numbered > li::before {\n  content: counters(section, \".\") \". \";\n  counter-increment: section;\n}\n\n.list-group-item-action {\n  width: 100%;\n  color: #444;\n  text-align: inherit;\n}\n\n.list-group-item-action:hover, .list-group-item-action:focus {\n  z-index: 1;\n  color: #444;\n  text-decoration: none;\n  background-color: #2e283e;\n}\n\n.list-group-item-action:active {\n  color: #444;\n  background-color: #f9f8fc;\n}\n\n.list-group-item {\n  position: relative;\n  display: block;\n  padding: 0.5rem 1rem;\n  color: #17141f;\n  text-decoration: none;\n  background-color: #17141f;\n  border: 1px solid transparent;\n}\n\n.list-group-item.disabled, .list-group-item:disabled {\n  color: #5c507c;\n  pointer-events: none;\n  background-color: #17141f;\n}\n\n.list-group-item.active {\n  z-index: 2;\n  color: #fff;\n  background-color: #17141f;\n  border-color: #17141f;\n}\n\n.list-group-item + .list-group-item {\n  border-top-width: 0;\n}\n\n.list-group-item + .list-group-item.active {\n  margin-top: -1px;\n  border-top-width: 1px;\n}\n\n.list-group-horizontal {\n  -ms-flex-direction: row;\n  flex-direction: row;\n}\n\n.list-group-horizontal > .list-group-item.active {\n  margin-top: 0;\n}\n\n.list-group-horizontal > .list-group-item + .list-group-item {\n  border-top-width: 1px;\n  border-left-width: 0;\n}\n\n.list-group-horizontal > .list-group-item + .list-group-item.active {\n  margin-left: -1px;\n  border-left-width: 1px;\n}\n\n@media (min-width: 576px) {\n  .list-group-horizontal-sm {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .list-group-horizontal-sm > .list-group-item.active {\n    margin-top: 0;\n  }\n  .list-group-horizontal-sm > .list-group-item + .list-group-item {\n    border-top-width: 1px;\n    border-left-width: 0;\n  }\n  .list-group-horizontal-sm > .list-group-item + .list-group-item.active {\n    margin-left: -1px;\n    border-left-width: 1px;\n  }\n}\n\n@media (min-width: 768px) {\n  .list-group-horizontal-md {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .list-group-horizontal-md > .list-group-item.active {\n    margin-top: 0;\n  }\n  .list-group-horizontal-md > .list-group-item + .list-group-item {\n    border-top-width: 1px;\n    border-left-width: 0;\n  }\n  .list-group-horizontal-md > .list-group-item + .list-group-item.active {\n    margin-left: -1px;\n    border-left-width: 1px;\n  }\n}\n\n@media (min-width: 992px) {\n  .list-group-horizontal-lg {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .list-group-horizontal-lg > .list-group-item.active {\n    margin-top: 0;\n  }\n  .list-group-horizontal-lg > .list-group-item + .list-group-item {\n    border-top-width: 1px;\n    border-left-width: 0;\n  }\n  .list-group-horizontal-lg > .list-group-item + .list-group-item.active {\n    margin-left: -1px;\n    border-left-width: 1px;\n  }\n}\n\n@media (min-width: 1200px) {\n  .list-group-horizontal-xl {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .list-group-horizontal-xl > .list-group-item.active {\n    margin-top: 0;\n  }\n  .list-group-horizontal-xl > .list-group-item + .list-group-item {\n    border-top-width: 1px;\n    border-left-width: 0;\n  }\n  .list-group-horizontal-xl > .list-group-item + .list-group-item.active {\n    margin-left: -1px;\n    border-left-width: 1px;\n  }\n}\n\n@media (min-width: 1400px) {\n  .list-group-horizontal-xxl {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .list-group-horizontal-xxl > .list-group-item.active {\n    margin-top: 0;\n  }\n  .list-group-horizontal-xxl > .list-group-item + .list-group-item {\n    border-top-width: 1px;\n    border-left-width: 0;\n  }\n  .list-group-horizontal-xxl > .list-group-item + .list-group-item.active {\n    margin-left: -1px;\n    border-left-width: 1px;\n  }\n}\n\n.list-group-flush > .list-group-item {\n  border-width: 0 0 1px;\n}\n\n.list-group-flush > .list-group-item:last-child {\n  border-bottom-width: 0;\n}\n\n.list-group-item-primary {\n  color: #351d5a;\n  background-color: #ded6ea;\n}\n\n.list-group-item-primary.list-group-item-action:hover, .list-group-item-primary.list-group-item-action:focus {\n  color: #351d5a;\n  background-color: #c8c1d3;\n}\n\n.list-group-item-primary.list-group-item-action.active {\n  color: #fff;\n  background-color: #351d5a;\n  border-color: #351d5a;\n}\n\n.list-group-item-secondary {\n  color: #65577f;\n  background-color: #eee9f6;\n}\n\n.list-group-item-secondary.list-group-item-action:hover, .list-group-item-secondary.list-group-item-action:focus {\n  color: #65577f;\n  background-color: #d6d2dd;\n}\n\n.list-group-item-secondary.list-group-item-action.active {\n  color: #fff;\n  background-color: #65577f;\n  border-color: #65577f;\n}\n\n.list-group-item-success {\n  color: #0b6f33;\n  background-color: #d0f1dd;\n}\n\n.list-group-item-success.list-group-item-action:hover, .list-group-item-success.list-group-item-action:focus {\n  color: #0b6f33;\n  background-color: #bbd9c7;\n}\n\n.list-group-item-success.list-group-item-action.active {\n  color: #fff;\n  background-color: #0b6f33;\n  border-color: #0b6f33;\n}\n\n.list-group-item-info {\n  color: #005e84;\n  background-color: #ccebf8;\n}\n\n.list-group-item-info.list-group-item-action:hover, .list-group-item-info.list-group-item-action:focus {\n  color: #005e84;\n  background-color: #b8d4df;\n}\n\n.list-group-item-info.list-group-item-action.active {\n  color: #fff;\n  background-color: #005e84;\n  border-color: #005e84;\n}\n\n.list-group-item-warning {\n  color: #8f6211;\n  background-color: #fcedd2;\n}\n\n.list-group-item-warning.list-group-item-action:hover, .list-group-item-warning.list-group-item-action:focus {\n  color: #8f6211;\n  background-color: #e3d5bd;\n}\n\n.list-group-item-warning.list-group-item-action.active {\n  color: #fff;\n  background-color: #8f6211;\n  border-color: #8f6211;\n}\n\n.list-group-item-danger {\n  color: #972222;\n  background-color: #fed7d7;\n}\n\n.list-group-item-danger.list-group-item-action:hover, .list-group-item-danger.list-group-item-action:focus {\n  color: #972222;\n  background-color: #e5c2c2;\n}\n\n.list-group-item-danger.list-group-item-action.active {\n  color: #fff;\n  background-color: #972222;\n  border-color: #972222;\n}\n\n.list-group-item-light {\n  color: #959597;\n  background-color: #fefefe;\n}\n\n.list-group-item-light.list-group-item-action:hover, .list-group-item-light.list-group-item-action:focus {\n  color: #959597;\n  background-color: #e5e5e5;\n}\n\n.list-group-item-light.list-group-item-action.active {\n  color: #fff;\n  background-color: #959597;\n  border-color: #959597;\n}\n\n.list-group-item-dark {\n  color: #0e0c13;\n  background-color: #d1d0d2;\n}\n\n.list-group-item-dark.list-group-item-action:hover, .list-group-item-dark.list-group-item-action:focus {\n  color: #0e0c13;\n  background-color: #bcbbbd;\n}\n\n.list-group-item-dark.list-group-item-action.active {\n  color: #fff;\n  background-color: #0e0c13;\n  border-color: #0e0c13;\n}\n\n.btn-close {\n  box-sizing: content-box;\n  width: 1em;\n  height: 1em;\n  padding: 0.25em 0.25em;\n  color: #000;\n  background: transparent url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23000'%3e%3cpath d='M.293.293a1 1 0 011.414 0L8 6.586 14.293.293a1 1 0 111.414 1.414L9.414 8l6.293 6.293a1 1 0 01-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 01-1.414-1.414L6.586 8 .293 1.707a1 1 0 010-1.414z'/%3e%3c/svg%3e\") center/1em auto no-repeat;\n  border: 0;\n  opacity: 0.5;\n}\n\n.btn-close:hover {\n  color: #000;\n  text-decoration: none;\n  opacity: 0.75;\n}\n\n.btn-close:focus {\n  outline: 0;\n  box-shadow: 0 0 0 0.25rem rgba(89, 49, 150, 0.25);\n  opacity: 1;\n}\n\n.btn-close:disabled, .btn-close.disabled {\n  pointer-events: none;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  user-select: none;\n  opacity: 0.25;\n}\n\n.btn-close-white {\n  -webkit-filter: invert(1) grayscale(100%) brightness(200%);\n  filter: invert(1) grayscale(100%) brightness(200%);\n}\n\n.toast {\n  width: 350px;\n  max-width: 100%;\n  font-size: 0.875rem;\n  pointer-events: auto;\n  background-color: rgba(255, 255, 255, 0.85);\n  background-clip: padding-box;\n  border: 1px solid rgba(0, 0, 0, 0.1);\n  box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15);\n}\n\n.toast.showing {\n  opacity: 0;\n}\n\n.toast:not(.show) {\n  display: none;\n}\n\n.toast-container {\n  width: -webkit-max-content;\n  width: -moz-max-content;\n  width: max-content;\n  max-width: 100%;\n  pointer-events: none;\n}\n\n.toast-container > :not(:last-child) {\n  margin-bottom: 0.75rem;\n}\n\n.toast-header {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-align: center;\n  align-items: center;\n  padding: 0.5rem 0.75rem;\n  color: #868e96;\n  background-color: rgba(255, 255, 255, 0.85);\n  background-clip: padding-box;\n  border-bottom: 1px solid rgba(0, 0, 0, 0.05);\n}\n\n.toast-header .btn-close {\n  margin-right: -0.375rem;\n  margin-left: 0.75rem;\n}\n\n.toast-body {\n  padding: 0.75rem;\n  word-wrap: break-word;\n}\n\n.modal {\n  position: fixed;\n  top: 0;\n  left: 0;\n  z-index: 1055;\n  display: none;\n  width: 100%;\n  height: 100%;\n  overflow-x: hidden;\n  overflow-y: auto;\n  outline: 0;\n}\n\n.modal-dialog {\n  position: relative;\n  width: auto;\n  margin: 0.5rem;\n  pointer-events: none;\n}\n\n.modal.fade .modal-dialog {\n  transition: -webkit-transform 0.3s ease-out;\n  transition: transform 0.3s ease-out;\n  transition: transform 0.3s ease-out, -webkit-transform 0.3s ease-out;\n  -webkit-transform: translate(0, -50px);\n  transform: translate(0, -50px);\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .modal.fade .modal-dialog {\n    transition: none;\n  }\n}\n\n.modal.show .modal-dialog {\n  -webkit-transform: none;\n  transform: none;\n}\n\n.modal.modal-static .modal-dialog {\n  -webkit-transform: scale(1.02);\n  transform: scale(1.02);\n}\n\n.modal-dialog-scrollable {\n  height: calc(100% - 1rem);\n}\n\n.modal-dialog-scrollable .modal-content {\n  max-height: 100%;\n  overflow: hidden;\n}\n\n.modal-dialog-scrollable .modal-body {\n  overflow-y: auto;\n}\n\n.modal-dialog-centered {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-align: center;\n  align-items: center;\n  min-height: calc(100% - 1rem);\n}\n\n.modal-content {\n  position: relative;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  width: 100%;\n  pointer-events: auto;\n  background-color: #fff;\n  background-clip: padding-box;\n  border: 1px solid rgba(0, 0, 0, 0.2);\n  outline: 0;\n}\n\n.modal-backdrop {\n  position: fixed;\n  top: 0;\n  left: 0;\n  z-index: 1050;\n  width: 100vw;\n  height: 100vh;\n  background-color: #000;\n}\n\n.modal-backdrop.fade {\n  opacity: 0;\n}\n\n.modal-backdrop.show {\n  opacity: 0.5;\n}\n\n.modal-header {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-negative: 0;\n  flex-shrink: 0;\n  -ms-flex-align: center;\n  align-items: center;\n  -ms-flex-pack: justify;\n  justify-content: space-between;\n  padding: 1rem 1rem;\n  border-bottom: 1px solid #ededed;\n}\n\n.modal-header .btn-close {\n  padding: 0.5rem 0.5rem;\n  margin: -0.5rem -0.5rem -0.5rem auto;\n}\n\n.modal-title {\n  margin-bottom: 0;\n  line-height: 1.5;\n}\n\n.modal-body {\n  position: relative;\n  -ms-flex: 1 1 auto;\n  flex: 1 1 auto;\n  padding: 1rem;\n}\n\n.modal-footer {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n  flex-wrap: wrap;\n  -ms-flex-negative: 0;\n  flex-shrink: 0;\n  -ms-flex-align: center;\n  align-items: center;\n  -ms-flex-pack: end;\n  justify-content: flex-end;\n  padding: 0.75rem;\n  border-top: 1px solid #ededed;\n}\n\n.modal-footer > * {\n  margin: 0.25rem;\n}\n\n@media (min-width: 576px) {\n  .modal-dialog {\n    max-width: 500px;\n    margin: 1.75rem auto;\n  }\n  .modal-dialog-scrollable {\n    height: calc(100% - 3.5rem);\n  }\n  .modal-dialog-centered {\n    min-height: calc(100% - 3.5rem);\n  }\n  .modal-sm {\n    max-width: 300px;\n  }\n}\n\n@media (min-width: 992px) {\n  .modal-lg,\n  .modal-xl {\n    max-width: 800px;\n  }\n}\n\n@media (min-width: 1200px) {\n  .modal-xl {\n    max-width: 1140px;\n  }\n}\n\n.modal-fullscreen {\n  width: 100vw;\n  max-width: none;\n  height: 100%;\n  margin: 0;\n}\n\n.modal-fullscreen .modal-content {\n  height: 100%;\n  border: 0;\n}\n\n.modal-fullscreen .modal-body {\n  overflow-y: auto;\n}\n\n@media (max-width: 575.98px) {\n  .modal-fullscreen-sm-down {\n    width: 100vw;\n    max-width: none;\n    height: 100%;\n    margin: 0;\n  }\n  .modal-fullscreen-sm-down .modal-content {\n    height: 100%;\n    border: 0;\n  }\n  .modal-fullscreen-sm-down .modal-body {\n    overflow-y: auto;\n  }\n}\n\n@media (max-width: 767.98px) {\n  .modal-fullscreen-md-down {\n    width: 100vw;\n    max-width: none;\n    height: 100%;\n    margin: 0;\n  }\n  .modal-fullscreen-md-down .modal-content {\n    height: 100%;\n    border: 0;\n  }\n  .modal-fullscreen-md-down .modal-body {\n    overflow-y: auto;\n  }\n}\n\n@media (max-width: 991.98px) {\n  .modal-fullscreen-lg-down {\n    width: 100vw;\n    max-width: none;\n    height: 100%;\n    margin: 0;\n  }\n  .modal-fullscreen-lg-down .modal-content {\n    height: 100%;\n    border: 0;\n  }\n  .modal-fullscreen-lg-down .modal-body {\n    overflow-y: auto;\n  }\n}\n\n@media (max-width: 1199.98px) {\n  .modal-fullscreen-xl-down {\n    width: 100vw;\n    max-width: none;\n    height: 100%;\n    margin: 0;\n  }\n  .modal-fullscreen-xl-down .modal-content {\n    height: 100%;\n    border: 0;\n  }\n  .modal-fullscreen-xl-down .modal-body {\n    overflow-y: auto;\n  }\n}\n\n@media (max-width: 1399.98px) {\n  .modal-fullscreen-xxl-down {\n    width: 100vw;\n    max-width: none;\n    height: 100%;\n    margin: 0;\n  }\n  .modal-fullscreen-xxl-down .modal-content {\n    height: 100%;\n    border: 0;\n  }\n  .modal-fullscreen-xxl-down .modal-body {\n    overflow-y: auto;\n  }\n}\n\n.tooltip {\n  position: absolute;\n  z-index: 1080;\n  display: block;\n  margin: 0;\n  font-family: var(--bs-font-sans-serif);\n  font-style: normal;\n  font-weight: 400;\n  line-height: 1.5;\n  text-align: left;\n  text-align: start;\n  text-decoration: none;\n  text-shadow: none;\n  text-transform: none;\n  letter-spacing: normal;\n  word-break: normal;\n  word-spacing: normal;\n  white-space: normal;\n  line-break: auto;\n  font-size: 0.875rem;\n  word-wrap: break-word;\n  opacity: 0;\n}\n\n.tooltip.show {\n  opacity: 0.9;\n}\n\n.tooltip .tooltip-arrow {\n  position: absolute;\n  display: block;\n  width: 0.8rem;\n  height: 0.4rem;\n}\n\n.tooltip .tooltip-arrow::before {\n  position: absolute;\n  content: \"\";\n  border-color: transparent;\n  border-style: solid;\n}\n\n.bs-tooltip-top, .bs-tooltip-auto[data-popper-placement^=\"top\"] {\n  padding: 0.4rem 0;\n}\n\n.bs-tooltip-top .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=\"top\"] .tooltip-arrow {\n  bottom: 0;\n}\n\n.bs-tooltip-top .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=\"top\"] .tooltip-arrow::before {\n  top: -1px;\n  border-width: 0.4rem 0.4rem 0;\n  border-top-color: #000;\n}\n\n.bs-tooltip-end, .bs-tooltip-auto[data-popper-placement^=\"right\"] {\n  padding: 0 0.4rem;\n}\n\n.bs-tooltip-end .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=\"right\"] .tooltip-arrow {\n  left: 0;\n  width: 0.4rem;\n  height: 0.8rem;\n}\n\n.bs-tooltip-end .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=\"right\"] .tooltip-arrow::before {\n  right: -1px;\n  border-width: 0.4rem 0.4rem 0.4rem 0;\n  border-right-color: #000;\n}\n\n.bs-tooltip-bottom, .bs-tooltip-auto[data-popper-placement^=\"bottom\"] {\n  padding: 0.4rem 0;\n}\n\n.bs-tooltip-bottom .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=\"bottom\"] .tooltip-arrow {\n  top: 0;\n}\n\n.bs-tooltip-bottom .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=\"bottom\"] .tooltip-arrow::before {\n  bottom: -1px;\n  border-width: 0 0.4rem 0.4rem;\n  border-bottom-color: #000;\n}\n\n.bs-tooltip-start, .bs-tooltip-auto[data-popper-placement^=\"left\"] {\n  padding: 0 0.4rem;\n}\n\n.bs-tooltip-start .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=\"left\"] .tooltip-arrow {\n  right: 0;\n  width: 0.4rem;\n  height: 0.8rem;\n}\n\n.bs-tooltip-start .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=\"left\"] .tooltip-arrow::before {\n  left: -1px;\n  border-width: 0.4rem 0 0.4rem 0.4rem;\n  border-left-color: #000;\n}\n\n.tooltip-inner {\n  max-width: 200px;\n  padding: 0.25rem 0.5rem;\n  color: #fff;\n  text-align: center;\n  background-color: #000;\n}\n\n.popover {\n  position: absolute;\n  top: 0;\n  left: 0 /* rtl:ignore */;\n  z-index: 1070;\n  display: block;\n  max-width: 276px;\n  font-family: var(--bs-font-sans-serif);\n  font-style: normal;\n  font-weight: 400;\n  line-height: 1.5;\n  text-align: left;\n  text-align: start;\n  text-decoration: none;\n  text-shadow: none;\n  text-transform: none;\n  letter-spacing: normal;\n  word-break: normal;\n  word-spacing: normal;\n  white-space: normal;\n  line-break: auto;\n  font-size: 0.875rem;\n  word-wrap: break-word;\n  background-color: #fff;\n  background-clip: padding-box;\n  border: 1px solid rgba(0, 0, 0, 0.2);\n}\n\n.popover .popover-arrow {\n  position: absolute;\n  display: block;\n  width: 1rem;\n  height: 0.5rem;\n}\n\n.popover .popover-arrow::before, .popover .popover-arrow::after {\n  position: absolute;\n  display: block;\n  content: \"\";\n  border-color: transparent;\n  border-style: solid;\n}\n\n.bs-popover-top > .popover-arrow, .bs-popover-auto[data-popper-placement^=\"top\"] > .popover-arrow {\n  bottom: calc(-0.5rem - 1px);\n}\n\n.bs-popover-top > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=\"top\"] > .popover-arrow::before {\n  bottom: 0;\n  border-width: 0.5rem 0.5rem 0;\n  border-top-color: rgba(0, 0, 0, 0.25);\n}\n\n.bs-popover-top > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=\"top\"] > .popover-arrow::after {\n  bottom: 1px;\n  border-width: 0.5rem 0.5rem 0;\n  border-top-color: #fff;\n}\n\n.bs-popover-end > .popover-arrow, .bs-popover-auto[data-popper-placement^=\"right\"] > .popover-arrow {\n  left: calc(-0.5rem - 1px);\n  width: 0.5rem;\n  height: 1rem;\n}\n\n.bs-popover-end > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=\"right\"] > .popover-arrow::before {\n  left: 0;\n  border-width: 0.5rem 0.5rem 0.5rem 0;\n  border-right-color: rgba(0, 0, 0, 0.25);\n}\n\n.bs-popover-end > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=\"right\"] > .popover-arrow::after {\n  left: 1px;\n  border-width: 0.5rem 0.5rem 0.5rem 0;\n  border-right-color: #fff;\n}\n\n.bs-popover-bottom > .popover-arrow, .bs-popover-auto[data-popper-placement^=\"bottom\"] > .popover-arrow {\n  top: calc(-0.5rem - 1px);\n}\n\n.bs-popover-bottom > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=\"bottom\"] > .popover-arrow::before {\n  top: 0;\n  border-width: 0 0.5rem 0.5rem 0.5rem;\n  border-bottom-color: rgba(0, 0, 0, 0.25);\n}\n\n.bs-popover-bottom > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=\"bottom\"] > .popover-arrow::after {\n  top: 1px;\n  border-width: 0 0.5rem 0.5rem 0.5rem;\n  border-bottom-color: #fff;\n}\n\n.bs-popover-bottom .popover-header::before, .bs-popover-auto[data-popper-placement^=\"bottom\"] .popover-header::before {\n  position: absolute;\n  top: 0;\n  left: 50%;\n  display: block;\n  width: 1rem;\n  margin-left: -0.5rem;\n  content: \"\";\n  border-bottom: 1px solid #f0f0f0;\n}\n\n.bs-popover-start > .popover-arrow, .bs-popover-auto[data-popper-placement^=\"left\"] > .popover-arrow {\n  right: calc(-0.5rem - 1px);\n  width: 0.5rem;\n  height: 1rem;\n}\n\n.bs-popover-start > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=\"left\"] > .popover-arrow::before {\n  right: 0;\n  border-width: 0.5rem 0 0.5rem 0.5rem;\n  border-left-color: rgba(0, 0, 0, 0.25);\n}\n\n.bs-popover-start > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=\"left\"] > .popover-arrow::after {\n  right: 1px;\n  border-width: 0.5rem 0 0.5rem 0.5rem;\n  border-left-color: #fff;\n}\n\n.popover-header {\n  padding: 0.5rem 1rem;\n  margin-bottom: 0;\n  font-size: 1rem;\n  background-color: #f0f0f0;\n  border-bottom: 1px solid rgba(0, 0, 0, 0.2);\n}\n\n.popover-header:empty {\n  display: none;\n}\n\n.popover-body {\n  padding: 1rem 1rem;\n  color: #444;\n}\n\n.carousel {\n  position: relative;\n}\n\n.carousel.pointer-event {\n  -ms-touch-action: pan-y;\n  touch-action: pan-y;\n}\n\n.carousel-inner {\n  position: relative;\n  width: 100%;\n  overflow: hidden;\n}\n\n.carousel-inner::after {\n  display: block;\n  clear: both;\n  content: \"\";\n}\n\n.carousel-item {\n  position: relative;\n  display: none;\n  float: left;\n  width: 100%;\n  margin-right: -100%;\n  -webkit-backface-visibility: hidden;\n  backface-visibility: hidden;\n  transition: -webkit-transform 0.6s ease-in-out;\n  transition: transform 0.6s ease-in-out;\n  transition: transform 0.6s ease-in-out, -webkit-transform 0.6s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .carousel-item {\n    transition: none;\n  }\n}\n\n.carousel-item.active,\n.carousel-item-next,\n.carousel-item-prev {\n  display: block;\n}\n\n/* rtl:begin:ignore */\n.carousel-item-next:not(.carousel-item-start),\n.active.carousel-item-end {\n  -webkit-transform: translateX(100%);\n  transform: translateX(100%);\n}\n\n.carousel-item-prev:not(.carousel-item-end),\n.active.carousel-item-start {\n  -webkit-transform: translateX(-100%);\n  transform: translateX(-100%);\n}\n\n/* rtl:end:ignore */\n.carousel-fade .carousel-item {\n  opacity: 0;\n  transition-property: opacity;\n  -webkit-transform: none;\n  transform: none;\n}\n\n.carousel-fade .carousel-item.active,\n.carousel-fade .carousel-item-next.carousel-item-start,\n.carousel-fade .carousel-item-prev.carousel-item-end {\n  z-index: 1;\n  opacity: 1;\n}\n\n.carousel-fade .active.carousel-item-start,\n.carousel-fade .active.carousel-item-end {\n  z-index: 0;\n  opacity: 0;\n  transition: opacity 0s 0.6s;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .carousel-fade .active.carousel-item-start,\n  .carousel-fade .active.carousel-item-end {\n    transition: none;\n  }\n}\n\n.carousel-control-prev,\n.carousel-control-next {\n  position: absolute;\n  top: 0;\n  bottom: 0;\n  z-index: 1;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-align: center;\n  align-items: center;\n  -ms-flex-pack: center;\n  justify-content: center;\n  width: 15%;\n  padding: 0;\n  color: #fff;\n  text-align: center;\n  background: none;\n  border: 0;\n  opacity: 0.5;\n  transition: opacity 0.15s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .carousel-control-prev,\n  .carousel-control-next {\n    transition: none;\n  }\n}\n\n.carousel-control-prev:hover, .carousel-control-prev:focus,\n.carousel-control-next:hover,\n.carousel-control-next:focus {\n  color: #fff;\n  text-decoration: none;\n  outline: 0;\n  opacity: 0.9;\n}\n\n.carousel-control-prev {\n  left: 0;\n}\n\n.carousel-control-next {\n  right: 0;\n}\n\n.carousel-control-prev-icon,\n.carousel-control-next-icon {\n  display: inline-block;\n  width: 2rem;\n  height: 2rem;\n  background-repeat: no-repeat;\n  background-position: 50%;\n  background-size: 100% 100%;\n}\n\n/* rtl:options: {\n  \"autoRename\": true,\n  \"stringMap\":[ {\n    \"name\"    : \"prev-next\",\n    \"search\"  : \"prev\",\n    \"replace\" : \"next\"\n  } ]\n} */\n.carousel-control-prev-icon {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0z'/%3e%3c/svg%3e\");\n}\n\n.carousel-control-next-icon {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e\");\n}\n\n.carousel-indicators {\n  position: absolute;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 2;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-pack: center;\n  justify-content: center;\n  padding: 0;\n  margin-right: 15%;\n  margin-bottom: 1rem;\n  margin-left: 15%;\n  list-style: none;\n}\n\n.carousel-indicators [data-bs-target] {\n  box-sizing: content-box;\n  -ms-flex: 0 1 auto;\n  flex: 0 1 auto;\n  width: 30px;\n  height: 3px;\n  padding: 0;\n  margin-right: 3px;\n  margin-left: 3px;\n  text-indent: -999px;\n  cursor: pointer;\n  background-color: #fff;\n  background-clip: padding-box;\n  border: 0;\n  border-top: 10px solid transparent;\n  border-bottom: 10px solid transparent;\n  opacity: 0.5;\n  transition: opacity 0.6s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .carousel-indicators [data-bs-target] {\n    transition: none;\n  }\n}\n\n.carousel-indicators .active {\n  opacity: 1;\n}\n\n.carousel-caption {\n  position: absolute;\n  right: 15%;\n  bottom: 1.25rem;\n  left: 15%;\n  padding-top: 1.25rem;\n  padding-bottom: 1.25rem;\n  color: #fff;\n  text-align: center;\n}\n\n.carousel-dark .carousel-control-prev-icon,\n.carousel-dark .carousel-control-next-icon {\n  -webkit-filter: invert(1) grayscale(100);\n  filter: invert(1) grayscale(100);\n}\n\n.carousel-dark .carousel-indicators [data-bs-target] {\n  background-color: #000;\n}\n\n.carousel-dark .carousel-caption {\n  color: #000;\n}\n\n@-webkit-keyframes spinner-border {\n  to {\n    -webkit-transform: rotate(360deg) /* rtl:ignore */;\n    transform: rotate(360deg) /* rtl:ignore */;\n  }\n}\n\n@keyframes spinner-border {\n  to {\n    -webkit-transform: rotate(360deg) /* rtl:ignore */;\n    transform: rotate(360deg) /* rtl:ignore */;\n  }\n}\n\n.spinner-border {\n  display: inline-block;\n  width: 2rem;\n  height: 2rem;\n  vertical-align: -0.125em;\n  border: 0.25em solid currentColor;\n  border-right-color: transparent;\n  border-radius: 50%;\n  -webkit-animation: 0.75s linear infinite spinner-border;\n  animation: 0.75s linear infinite spinner-border;\n}\n\n.spinner-border-sm {\n  width: 1rem;\n  height: 1rem;\n  border-width: 0.2em;\n}\n\n@-webkit-keyframes spinner-grow {\n  0% {\n    -webkit-transform: scale(0);\n    transform: scale(0);\n  }\n  50% {\n    opacity: 1;\n    -webkit-transform: none;\n    transform: none;\n  }\n}\n\n@keyframes spinner-grow {\n  0% {\n    -webkit-transform: scale(0);\n    transform: scale(0);\n  }\n  50% {\n    opacity: 1;\n    -webkit-transform: none;\n    transform: none;\n  }\n}\n\n.spinner-grow {\n  display: inline-block;\n  width: 2rem;\n  height: 2rem;\n  vertical-align: -0.125em;\n  background-color: currentColor;\n  border-radius: 50%;\n  opacity: 0;\n  -webkit-animation: 0.75s linear infinite spinner-grow;\n  animation: 0.75s linear infinite spinner-grow;\n}\n\n.spinner-grow-sm {\n  width: 1rem;\n  height: 1rem;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .spinner-border,\n  .spinner-grow {\n    -webkit-animation-duration: 1.5s;\n    animation-duration: 1.5s;\n  }\n}\n\n.offcanvas {\n  position: fixed;\n  bottom: 0;\n  z-index: 1045;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  max-width: 100%;\n  visibility: hidden;\n  background-color: #fff;\n  background-clip: padding-box;\n  outline: 0;\n  transition: -webkit-transform 0.3s ease-in-out;\n  transition: transform 0.3s ease-in-out;\n  transition: transform 0.3s ease-in-out, -webkit-transform 0.3s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .offcanvas {\n    transition: none;\n  }\n}\n\n.offcanvas-backdrop {\n  position: fixed;\n  top: 0;\n  left: 0;\n  z-index: 1040;\n  width: 100vw;\n  height: 100vh;\n  background-color: #000;\n}\n\n.offcanvas-backdrop.fade {\n  opacity: 0;\n}\n\n.offcanvas-backdrop.show {\n  opacity: 0.5;\n}\n\n.offcanvas-header {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-align: center;\n  align-items: center;\n  -ms-flex-pack: justify;\n  justify-content: space-between;\n  padding: 1rem 1rem;\n}\n\n.offcanvas-header .btn-close {\n  padding: 0.5rem 0.5rem;\n  margin-top: -0.5rem;\n  margin-right: -0.5rem;\n  margin-bottom: -0.5rem;\n}\n\n.offcanvas-title {\n  margin-bottom: 0;\n  line-height: 1.5;\n}\n\n.offcanvas-body {\n  -ms-flex-positive: 1;\n  flex-grow: 1;\n  padding: 1rem 1rem;\n  overflow-y: auto;\n}\n\n.offcanvas-start {\n  top: 0;\n  left: 0;\n  width: 400px;\n  border-right: 1px solid rgba(0, 0, 0, 0.2);\n  -webkit-transform: translateX(-100%);\n  transform: translateX(-100%);\n}\n\n.offcanvas-end {\n  top: 0;\n  right: 0;\n  width: 400px;\n  border-left: 1px solid rgba(0, 0, 0, 0.2);\n  -webkit-transform: translateX(100%);\n  transform: translateX(100%);\n}\n\n.offcanvas-top {\n  top: 0;\n  right: 0;\n  left: 0;\n  height: 30vh;\n  max-height: 100%;\n  border-bottom: 1px solid rgba(0, 0, 0, 0.2);\n  -webkit-transform: translateY(-100%);\n  transform: translateY(-100%);\n}\n\n.offcanvas-bottom {\n  right: 0;\n  left: 0;\n  height: 30vh;\n  max-height: 100%;\n  border-top: 1px solid rgba(0, 0, 0, 0.2);\n  -webkit-transform: translateY(100%);\n  transform: translateY(100%);\n}\n\n.offcanvas.show {\n  -webkit-transform: none;\n  transform: none;\n}\n\n.placeholder {\n  display: inline-block;\n  min-height: 1em;\n  vertical-align: middle;\n  cursor: wait;\n  background-color: currentColor;\n  opacity: 0.5;\n}\n\n.placeholder.btn::before {\n  display: inline-block;\n  content: \"\";\n}\n\n.placeholder-xs {\n  min-height: .6em;\n}\n\n.placeholder-sm {\n  min-height: .8em;\n}\n\n.placeholder-lg {\n  min-height: 1.2em;\n}\n\n.placeholder-glow .placeholder {\n  -webkit-animation: placeholder-glow 2s ease-in-out infinite;\n  animation: placeholder-glow 2s ease-in-out infinite;\n}\n\n@-webkit-keyframes placeholder-glow {\n  50% {\n    opacity: 0.2;\n  }\n}\n\n@keyframes placeholder-glow {\n  50% {\n    opacity: 0.2;\n  }\n}\n\n.placeholder-wave {\n  -webkit-mask-image: linear-gradient(130deg, #000 55%, rgba(0, 0, 0, 0.8) 75%, #000 95%);\n  mask-image: linear-gradient(130deg, #000 55%, rgba(0, 0, 0, 0.8) 75%, #000 95%);\n  -webkit-mask-size: 200% 100%;\n  mask-size: 200% 100%;\n  -webkit-animation: placeholder-wave 2s linear infinite;\n  animation: placeholder-wave 2s linear infinite;\n}\n\n@-webkit-keyframes placeholder-wave {\n  100% {\n    -webkit-mask-position: -200% 0%;\n    mask-position: -200% 0%;\n  }\n}\n\n@keyframes placeholder-wave {\n  100% {\n    -webkit-mask-position: -200% 0%;\n    mask-position: -200% 0%;\n  }\n}\n\n.clearfix::after {\n  display: block;\n  clear: both;\n  content: \"\";\n}\n\n.link-primary {\n  color: #593196;\n}\n\n.link-primary:hover, .link-primary:focus {\n  color: #472778;\n}\n\n.link-secondary {\n  color: #a991d4;\n}\n\n.link-secondary:hover, .link-secondary:focus {\n  color: #8774aa;\n}\n\n.link-success {\n  color: #13b955;\n}\n\n.link-success:hover, .link-success:focus {\n  color: #0f9444;\n}\n\n.link-info {\n  color: #009cdc;\n}\n\n.link-info:hover, .link-info:focus {\n  color: #007db0;\n}\n\n.link-warning {\n  color: #efa31d;\n}\n\n.link-warning:hover, .link-warning:focus {\n  color: #bf8217;\n}\n\n.link-danger {\n  color: #fc3939;\n}\n\n.link-danger:hover, .link-danger:focus {\n  color: #ca2e2e;\n}\n\n.link-light {\n  color: #f9f8fc;\n}\n\n.link-light:hover, .link-light:focus {\n  color: #faf9fd;\n}\n\n.link-dark {\n  color: #17141f;\n}\n\n.link-dark:hover, .link-dark:focus {\n  color: #121019;\n}\n\n.ratio {\n  position: relative;\n  width: 100%;\n}\n\n.ratio::before {\n  display: block;\n  padding-top: var(--bs-aspect-ratio);\n  content: \"\";\n}\n\n.ratio > * {\n  position: absolute;\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n}\n\n.ratio-1x1 {\n  --bs-aspect-ratio: 100%;\n}\n\n.ratio-4x3 {\n  --bs-aspect-ratio: calc(3 / 4 * 100%);\n}\n\n.ratio-16x9 {\n  --bs-aspect-ratio: calc(9 / 16 * 100%);\n}\n\n.ratio-21x9 {\n  --bs-aspect-ratio: calc(9 / 21 * 100%);\n}\n\n.fixed-top {\n  position: fixed;\n  top: 0;\n  right: 0;\n  left: 0;\n  z-index: 1030;\n}\n\n.fixed-bottom {\n  position: fixed;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 1030;\n}\n\n.sticky-top {\n  position: -webkit-sticky;\n  position: sticky;\n  top: 0;\n  z-index: 1020;\n}\n\n@media (min-width: 576px) {\n  .sticky-sm-top {\n    position: -webkit-sticky;\n    position: sticky;\n    top: 0;\n    z-index: 1020;\n  }\n}\n\n@media (min-width: 768px) {\n  .sticky-md-top {\n    position: -webkit-sticky;\n    position: sticky;\n    top: 0;\n    z-index: 1020;\n  }\n}\n\n@media (min-width: 992px) {\n  .sticky-lg-top {\n    position: -webkit-sticky;\n    position: sticky;\n    top: 0;\n    z-index: 1020;\n  }\n}\n\n@media (min-width: 1200px) {\n  .sticky-xl-top {\n    position: -webkit-sticky;\n    position: sticky;\n    top: 0;\n    z-index: 1020;\n  }\n}\n\n@media (min-width: 1400px) {\n  .sticky-xxl-top {\n    position: -webkit-sticky;\n    position: sticky;\n    top: 0;\n    z-index: 1020;\n  }\n}\n\n.hstack {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-direction: row;\n  flex-direction: row;\n  -ms-flex-align: center;\n  align-items: center;\n  -ms-flex-item-align: stretch;\n  align-self: stretch;\n}\n\n.vstack {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex: 1 1 auto;\n  flex: 1 1 auto;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  -ms-flex-item-align: stretch;\n  align-self: stretch;\n}\n\n.visually-hidden,\n.visually-hidden-focusable:not(:focus):not(:focus-within) {\n  position: absolute !important;\n  width: 1px !important;\n  height: 1px !important;\n  padding: 0 !important;\n  margin: -1px !important;\n  overflow: hidden !important;\n  clip: rect(0, 0, 0, 0) !important;\n  white-space: nowrap !important;\n  border: 0 !important;\n}\n\n.stretched-link::after {\n  position: absolute;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 1;\n  content: \"\";\n}\n\n.text-truncate {\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n}\n\n.vr {\n  display: inline-block;\n  -ms-flex-item-align: stretch;\n  align-self: stretch;\n  width: 1px;\n  min-height: 1em;\n  background-color: currentColor;\n  opacity: 0.25;\n}\n\n.align-baseline {\n  vertical-align: baseline !important;\n}\n\n.align-top {\n  vertical-align: top !important;\n}\n\n.align-middle {\n  vertical-align: middle !important;\n}\n\n.align-bottom {\n  vertical-align: bottom !important;\n}\n\n.align-text-bottom {\n  vertical-align: text-bottom !important;\n}\n\n.align-text-top {\n  vertical-align: text-top !important;\n}\n\n.float-start {\n  float: left !important;\n}\n\n.float-end {\n  float: right !important;\n}\n\n.float-none {\n  float: none !important;\n}\n\n.opacity-0 {\n  opacity: 0 !important;\n}\n\n.opacity-25 {\n  opacity: 0.25 !important;\n}\n\n.opacity-50 {\n  opacity: 0.5 !important;\n}\n\n.opacity-75 {\n  opacity: 0.75 !important;\n}\n\n.opacity-100 {\n  opacity: 1 !important;\n}\n\n.overflow-auto {\n  overflow: auto !important;\n}\n\n.overflow-hidden {\n  overflow: hidden !important;\n}\n\n.overflow-visible {\n  overflow: visible !important;\n}\n\n.overflow-scroll {\n  overflow: scroll !important;\n}\n\n.d-inline {\n  display: inline !important;\n}\n\n.d-inline-block {\n  display: inline-block !important;\n}\n\n.d-block {\n  display: block !important;\n}\n\n.d-grid {\n  display: grid !important;\n}\n\n.d-table {\n  display: table !important;\n}\n\n.d-table-row {\n  display: table-row !important;\n}\n\n.d-table-cell {\n  display: table-cell !important;\n}\n\n.d-flex {\n  display: -ms-flexbox !important;\n  display: flex !important;\n}\n\n.d-inline-flex {\n  display: -ms-inline-flexbox !important;\n  display: inline-flex !important;\n}\n\n.d-none {\n  display: none !important;\n}\n\n.shadow {\n  box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15) !important;\n}\n\n.shadow-sm {\n  box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075) !important;\n}\n\n.shadow-lg {\n  box-shadow: 0 1rem 3rem rgba(0, 0, 0, 0.175) !important;\n}\n\n.shadow-none {\n  box-shadow: none !important;\n}\n\n.position-static {\n  position: static !important;\n}\n\n.position-relative {\n  position: relative !important;\n}\n\n.position-absolute {\n  position: absolute !important;\n}\n\n.position-fixed {\n  position: fixed !important;\n}\n\n.position-sticky {\n  position: -webkit-sticky !important;\n  position: sticky !important;\n}\n\n.top-0 {\n  top: 0 !important;\n}\n\n.top-50 {\n  top: 50% !important;\n}\n\n.top-100 {\n  top: 100% !important;\n}\n\n.bottom-0 {\n  bottom: 0 !important;\n}\n\n.bottom-50 {\n  bottom: 50% !important;\n}\n\n.bottom-100 {\n  bottom: 100% !important;\n}\n\n.start-0 {\n  left: 0 !important;\n}\n\n.start-50 {\n  left: 50% !important;\n}\n\n.start-100 {\n  left: 100% !important;\n}\n\n.end-0 {\n  right: 0 !important;\n}\n\n.end-50 {\n  right: 50% !important;\n}\n\n.end-100 {\n  right: 100% !important;\n}\n\n.translate-middle {\n  -webkit-transform: translate(-50%, -50%) !important;\n  transform: translate(-50%, -50%) !important;\n}\n\n.translate-middle-x {\n  -webkit-transform: translateX(-50%) !important;\n  transform: translateX(-50%) !important;\n}\n\n.translate-middle-y {\n  -webkit-transform: translateY(-50%) !important;\n  transform: translateY(-50%) !important;\n}\n\n.border {\n  border: 1px solid #ededed !important;\n}\n\n.border-0 {\n  border: 0 !important;\n}\n\n.border-top {\n  border-top: 1px solid #ededed !important;\n}\n\n.border-top-0 {\n  border-top: 0 !important;\n}\n\n.border-end {\n  border-right: 1px solid #ededed !important;\n}\n\n.border-end-0 {\n  border-right: 0 !important;\n}\n\n.border-bottom {\n  border-bottom: 1px solid #ededed !important;\n}\n\n.border-bottom-0 {\n  border-bottom: 0 !important;\n}\n\n.border-start {\n  border-left: 1px solid #ededed !important;\n}\n\n.border-start-0 {\n  border-left: 0 !important;\n}\n\n.border-primary {\n  border-color: #593196 !important;\n}\n\n.border-secondary {\n  border-color: #a991d4 !important;\n}\n\n.border-success {\n  border-color: #13b955 !important;\n}\n\n.border-info {\n  border-color: #009cdc !important;\n}\n\n.border-warning {\n  border-color: #efa31d !important;\n}\n\n.border-danger {\n  border-color: #fc3939 !important;\n}\n\n.border-light {\n  border-color: #f9f8fc !important;\n}\n\n.border-dark {\n  border-color: #17141f !important;\n}\n\n.border-white {\n  border-color: #fff !important;\n}\n\n.border-1 {\n  border-width: 1px !important;\n}\n\n.border-2 {\n  border-width: 2px !important;\n}\n\n.border-3 {\n  border-width: 3px !important;\n}\n\n.border-4 {\n  border-width: 4px !important;\n}\n\n.border-5 {\n  border-width: 5px !important;\n}\n\n.w-25 {\n  width: 25% !important;\n}\n\n.w-50 {\n  width: 50% !important;\n}\n\n.w-75 {\n  width: 75% !important;\n}\n\n.w-100 {\n  width: 100% !important;\n}\n\n.w-auto {\n  width: auto !important;\n}\n\n.mw-100 {\n  max-width: 100% !important;\n}\n\n.vw-100 {\n  width: 100vw !important;\n}\n\n.min-vw-100 {\n  min-width: 100vw !important;\n}\n\n.h-25 {\n  height: 25% !important;\n}\n\n.h-50 {\n  height: 50% !important;\n}\n\n.h-75 {\n  height: 75% !important;\n}\n\n.h-100 {\n  height: 100% !important;\n}\n\n.h-auto {\n  height: auto !important;\n}\n\n.mh-100 {\n  max-height: 100% !important;\n}\n\n.vh-100 {\n  height: 100vh !important;\n}\n\n.min-vh-100 {\n  min-height: 100vh !important;\n}\n\n.flex-fill {\n  -ms-flex: 1 1 auto !important;\n  flex: 1 1 auto !important;\n}\n\n.flex-row {\n  -ms-flex-direction: row !important;\n  flex-direction: row !important;\n}\n\n.flex-column {\n  -ms-flex-direction: column !important;\n  flex-direction: column !important;\n}\n\n.flex-row-reverse {\n  -ms-flex-direction: row-reverse !important;\n  flex-direction: row-reverse !important;\n}\n\n.flex-column-reverse {\n  -ms-flex-direction: column-reverse !important;\n  flex-direction: column-reverse !important;\n}\n\n.flex-grow-0 {\n  -ms-flex-positive: 0 !important;\n  flex-grow: 0 !important;\n}\n\n.flex-grow-1 {\n  -ms-flex-positive: 1 !important;\n  flex-grow: 1 !important;\n}\n\n.flex-shrink-0 {\n  -ms-flex-negative: 0 !important;\n  flex-shrink: 0 !important;\n}\n\n.flex-shrink-1 {\n  -ms-flex-negative: 1 !important;\n  flex-shrink: 1 !important;\n}\n\n.flex-wrap {\n  -ms-flex-wrap: wrap !important;\n  flex-wrap: wrap !important;\n}\n\n.flex-nowrap {\n  -ms-flex-wrap: nowrap !important;\n  flex-wrap: nowrap !important;\n}\n\n.flex-wrap-reverse {\n  -ms-flex-wrap: wrap-reverse !important;\n  flex-wrap: wrap-reverse !important;\n}\n\n.gap-0 {\n  gap: 0 !important;\n}\n\n.gap-1 {\n  gap: 0.25rem !important;\n}\n\n.gap-2 {\n  gap: 0.5rem !important;\n}\n\n.gap-3 {\n  gap: 1rem !important;\n}\n\n.gap-4 {\n  gap: 1.5rem !important;\n}\n\n.gap-5 {\n  gap: 3rem !important;\n}\n\n.justify-content-start {\n  -ms-flex-pack: start !important;\n  justify-content: flex-start !important;\n}\n\n.justify-content-end {\n  -ms-flex-pack: end !important;\n  justify-content: flex-end !important;\n}\n\n.justify-content-center {\n  -ms-flex-pack: center !important;\n  justify-content: center !important;\n}\n\n.justify-content-between {\n  -ms-flex-pack: justify !important;\n  justify-content: space-between !important;\n}\n\n.justify-content-around {\n  -ms-flex-pack: distribute !important;\n  justify-content: space-around !important;\n}\n\n.justify-content-evenly {\n  -ms-flex-pack: space-evenly !important;\n  justify-content: space-evenly !important;\n}\n\n.align-items-start {\n  -ms-flex-align: start !important;\n  align-items: flex-start !important;\n}\n\n.align-items-end {\n  -ms-flex-align: end !important;\n  align-items: flex-end !important;\n}\n\n.align-items-center {\n  -ms-flex-align: center !important;\n  align-items: center !important;\n}\n\n.align-items-baseline {\n  -ms-flex-align: baseline !important;\n  align-items: baseline !important;\n}\n\n.align-items-stretch {\n  -ms-flex-align: stretch !important;\n  align-items: stretch !important;\n}\n\n.align-content-start {\n  -ms-flex-line-pack: start !important;\n  align-content: flex-start !important;\n}\n\n.align-content-end {\n  -ms-flex-line-pack: end !important;\n  align-content: flex-end !important;\n}\n\n.align-content-center {\n  -ms-flex-line-pack: center !important;\n  align-content: center !important;\n}\n\n.align-content-between {\n  -ms-flex-line-pack: justify !important;\n  align-content: space-between !important;\n}\n\n.align-content-around {\n  -ms-flex-line-pack: distribute !important;\n  align-content: space-around !important;\n}\n\n.align-content-stretch {\n  -ms-flex-line-pack: stretch !important;\n  align-content: stretch !important;\n}\n\n.align-self-auto {\n  -ms-flex-item-align: auto !important;\n  align-self: auto !important;\n}\n\n.align-self-start {\n  -ms-flex-item-align: start !important;\n  align-self: flex-start !important;\n}\n\n.align-self-end {\n  -ms-flex-item-align: end !important;\n  align-self: flex-end !important;\n}\n\n.align-self-center {\n  -ms-flex-item-align: center !important;\n  align-self: center !important;\n}\n\n.align-self-baseline {\n  -ms-flex-item-align: baseline !important;\n  align-self: baseline !important;\n}\n\n.align-self-stretch {\n  -ms-flex-item-align: stretch !important;\n  align-self: stretch !important;\n}\n\n.order-first {\n  -ms-flex-order: -1 !important;\n  order: -1 !important;\n}\n\n.order-0 {\n  -ms-flex-order: 0 !important;\n  order: 0 !important;\n}\n\n.order-1 {\n  -ms-flex-order: 1 !important;\n  order: 1 !important;\n}\n\n.order-2 {\n  -ms-flex-order: 2 !important;\n  order: 2 !important;\n}\n\n.order-3 {\n  -ms-flex-order: 3 !important;\n  order: 3 !important;\n}\n\n.order-4 {\n  -ms-flex-order: 4 !important;\n  order: 4 !important;\n}\n\n.order-5 {\n  -ms-flex-order: 5 !important;\n  order: 5 !important;\n}\n\n.order-last {\n  -ms-flex-order: 6 !important;\n  order: 6 !important;\n}\n\n.m-0 {\n  margin: 0 !important;\n}\n\n.m-1 {\n  margin: 0.25rem !important;\n}\n\n.m-2 {\n  margin: 0.5rem !important;\n}\n\n.m-3 {\n  margin: 1rem !important;\n}\n\n.m-4 {\n  margin: 1.5rem !important;\n}\n\n.m-5 {\n  margin: 3rem !important;\n}\n\n.m-auto {\n  margin: auto !important;\n}\n\n.mx-0 {\n  margin-right: 0 !important;\n  margin-left: 0 !important;\n}\n\n.mx-1 {\n  margin-right: 0.25rem !important;\n  margin-left: 0.25rem !important;\n}\n\n.mx-2 {\n  margin-right: 0.5rem !important;\n  margin-left: 0.5rem !important;\n}\n\n.mx-3 {\n  margin-right: 1rem !important;\n  margin-left: 1rem !important;\n}\n\n.mx-4 {\n  margin-right: 1.5rem !important;\n  margin-left: 1.5rem !important;\n}\n\n.mx-5 {\n  margin-right: 3rem !important;\n  margin-left: 3rem !important;\n}\n\n.mx-auto {\n  margin-right: auto !important;\n  margin-left: auto !important;\n}\n\n.my-0 {\n  margin-top: 0 !important;\n  margin-bottom: 0 !important;\n}\n\n.my-1 {\n  margin-top: 0.25rem !important;\n  margin-bottom: 0.25rem !important;\n}\n\n.my-2 {\n  margin-top: 0.5rem !important;\n  margin-bottom: 0.5rem !important;\n}\n\n.my-3 {\n  margin-top: 1rem !important;\n  margin-bottom: 1rem !important;\n}\n\n.my-4 {\n  margin-top: 1.5rem !important;\n  margin-bottom: 1.5rem !important;\n}\n\n.my-5 {\n  margin-top: 3rem !important;\n  margin-bottom: 3rem !important;\n}\n\n.my-auto {\n  margin-top: auto !important;\n  margin-bottom: auto !important;\n}\n\n.mt-0 {\n  margin-top: 0 !important;\n}\n\n.mt-1 {\n  margin-top: 0.25rem !important;\n}\n\n.mt-2 {\n  margin-top: 0.5rem !important;\n}\n\n.mt-3 {\n  margin-top: 1rem !important;\n}\n\n.mt-4 {\n  margin-top: 1.5rem !important;\n}\n\n.mt-5 {\n  margin-top: 3rem !important;\n}\n\n.mt-auto {\n  margin-top: auto !important;\n}\n\n.me-0 {\n  margin-right: 0 !important;\n}\n\n.me-1 {\n  margin-right: 0.25rem !important;\n}\n\n.me-2 {\n  margin-right: 0.5rem !important;\n}\n\n.me-3 {\n  margin-right: 1rem !important;\n}\n\n.me-4 {\n  margin-right: 1.5rem !important;\n}\n\n.me-5 {\n  margin-right: 3rem !important;\n}\n\n.me-auto {\n  margin-right: auto !important;\n}\n\n.mb-0 {\n  margin-bottom: 0 !important;\n}\n\n.mb-1 {\n  margin-bottom: 0.25rem !important;\n}\n\n.mb-2 {\n  margin-bottom: 0.5rem !important;\n}\n\n.mb-3 {\n  margin-bottom: 1rem !important;\n}\n\n.mb-4 {\n  margin-bottom: 1.5rem !important;\n}\n\n.mb-5 {\n  margin-bottom: 3rem !important;\n}\n\n.mb-auto {\n  margin-bottom: auto !important;\n}\n\n.ms-0 {\n  margin-left: 0 !important;\n}\n\n.ms-1 {\n  margin-left: 0.25rem !important;\n}\n\n.ms-2 {\n  margin-left: 0.5rem !important;\n}\n\n.ms-3 {\n  margin-left: 1rem !important;\n}\n\n.ms-4 {\n  margin-left: 1.5rem !important;\n}\n\n.ms-5 {\n  margin-left: 3rem !important;\n}\n\n.ms-auto {\n  margin-left: auto !important;\n}\n\n.p-0 {\n  padding: 0 !important;\n}\n\n.p-1 {\n  padding: 0.25rem !important;\n}\n\n.p-2 {\n  padding: 0.5rem !important;\n}\n\n.p-3 {\n  padding: 1rem !important;\n}\n\n.p-4 {\n  padding: 1.5rem !important;\n}\n\n.p-5 {\n  padding: 3rem !important;\n}\n\n.px-0 {\n  padding-right: 0 !important;\n  padding-left: 0 !important;\n}\n\n.px-1 {\n  padding-right: 0.25rem !important;\n  padding-left: 0.25rem !important;\n}\n\n.px-2 {\n  padding-right: 0.5rem !important;\n  padding-left: 0.5rem !important;\n}\n\n.px-3 {\n  padding-right: 1rem !important;\n  padding-left: 1rem !important;\n}\n\n.px-4 {\n  padding-right: 1.5rem !important;\n  padding-left: 1.5rem !important;\n}\n\n.px-5 {\n  padding-right: 3rem !important;\n  padding-left: 3rem !important;\n}\n\n.py-0 {\n  padding-top: 0 !important;\n  padding-bottom: 0 !important;\n}\n\n.py-1 {\n  padding-top: 0.25rem !important;\n  padding-bottom: 0.25rem !important;\n}\n\n.py-2 {\n  padding-top: 0.5rem !important;\n  padding-bottom: 0.5rem !important;\n}\n\n.py-3 {\n  padding-top: 1rem !important;\n  padding-bottom: 1rem !important;\n}\n\n.py-4 {\n  padding-top: 1.5rem !important;\n  padding-bottom: 1.5rem !important;\n}\n\n.py-5 {\n  padding-top: 3rem !important;\n  padding-bottom: 3rem !important;\n}\n\n.pt-0 {\n  padding-top: 0 !important;\n}\n\n.pt-1 {\n  padding-top: 0.25rem !important;\n}\n\n.pt-2 {\n  padding-top: 0.5rem !important;\n}\n\n.pt-3 {\n  padding-top: 1rem !important;\n}\n\n.pt-4 {\n  padding-top: 1.5rem !important;\n}\n\n.pt-5 {\n  padding-top: 3rem !important;\n}\n\n.pe-0 {\n  padding-right: 0 !important;\n}\n\n.pe-1 {\n  padding-right: 0.25rem !important;\n}\n\n.pe-2 {\n  padding-right: 0.5rem !important;\n}\n\n.pe-3 {\n  padding-right: 1rem !important;\n}\n\n.pe-4 {\n  padding-right: 1.5rem !important;\n}\n\n.pe-5 {\n  padding-right: 3rem !important;\n}\n\n.pb-0 {\n  padding-bottom: 0 !important;\n}\n\n.pb-1 {\n  padding-bottom: 0.25rem !important;\n}\n\n.pb-2 {\n  padding-bottom: 0.5rem !important;\n}\n\n.pb-3 {\n  padding-bottom: 1rem !important;\n}\n\n.pb-4 {\n  padding-bottom: 1.5rem !important;\n}\n\n.pb-5 {\n  padding-bottom: 3rem !important;\n}\n\n.ps-0 {\n  padding-left: 0 !important;\n}\n\n.ps-1 {\n  padding-left: 0.25rem !important;\n}\n\n.ps-2 {\n  padding-left: 0.5rem !important;\n}\n\n.ps-3 {\n  padding-left: 1rem !important;\n}\n\n.ps-4 {\n  padding-left: 1.5rem !important;\n}\n\n.ps-5 {\n  padding-left: 3rem !important;\n}\n\n.font-monospace {\n  font-family: var(--bs-font-monospace) !important;\n}\n\n.fs-1 {\n  font-size: calc(1.375rem + 1.5vw) !important;\n}\n\n.fs-2 {\n  font-size: calc(1.325rem + 0.9vw) !important;\n}\n\n.fs-3 {\n  font-size: calc(1.3rem + 0.6vw) !important;\n}\n\n.fs-4 {\n  font-size: calc(1.275rem + 0.3vw) !important;\n}\n\n.fs-5 {\n  font-size: 1.25rem !important;\n}\n\n.fs-6 {\n  font-size: 1rem !important;\n}\n\n.fst-italic {\n  font-style: italic !important;\n}\n\n.fst-normal {\n  font-style: normal !important;\n}\n\n.fw-light {\n  font-weight: 300 !important;\n}\n\n.fw-lighter {\n  font-weight: lighter !important;\n}\n\n.fw-normal {\n  font-weight: 400 !important;\n}\n\n.fw-bold {\n  font-weight: 700 !important;\n}\n\n.fw-bolder {\n  font-weight: bolder !important;\n}\n\n.lh-1 {\n  line-height: 1 !important;\n}\n\n.lh-sm {\n  line-height: 1.25 !important;\n}\n\n.lh-base {\n  line-height: 1.5 !important;\n}\n\n.lh-lg {\n  line-height: 2 !important;\n}\n\n.text-start {\n  text-align: left !important;\n}\n\n.text-end {\n  text-align: right !important;\n}\n\n.text-center {\n  text-align: center !important;\n}\n\n.text-decoration-none {\n  text-decoration: none !important;\n}\n\n.text-decoration-underline {\n  text-decoration: underline !important;\n}\n\n.text-decoration-line-through {\n  text-decoration: line-through !important;\n}\n\n.text-lowercase {\n  text-transform: lowercase !important;\n}\n\n.text-uppercase {\n  text-transform: uppercase !important;\n}\n\n.text-capitalize {\n  text-transform: capitalize !important;\n}\n\n.text-wrap {\n  white-space: normal !important;\n}\n\n.text-nowrap {\n  white-space: nowrap !important;\n}\n\n/* rtl:begin:remove */\n.text-break {\n  word-wrap: break-word !important;\n  word-break: break-word !important;\n}\n\n/* rtl:end:remove */\n.text-primary {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-primary-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-secondary {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-secondary-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-success {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-success-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-info {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-info-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-warning {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-warning-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-danger {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-danger-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-light {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-light-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-dark {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-dark-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-black {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-black-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-white {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-white-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-body {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-body-color-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-muted {\n  --bs-text-opacity: 1;\n  color: #868e96 !important;\n}\n\n.text-black-50 {\n  --bs-text-opacity: 1;\n  color: rgba(0, 0, 0, 0.5) !important;\n}\n\n.text-white-50 {\n  --bs-text-opacity: 1;\n  color: rgba(255, 255, 255, 0.5) !important;\n}\n\n.text-reset {\n  --bs-text-opacity: 1;\n  color: inherit !important;\n}\n\n.text-opacity-25 {\n  --bs-text-opacity: 0.25;\n}\n\n.text-opacity-50 {\n  --bs-text-opacity: 0.5;\n}\n\n.text-opacity-75 {\n  --bs-text-opacity: 0.75;\n}\n\n.text-opacity-100 {\n  --bs-text-opacity: 1;\n}\n\n.bg-primary {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-primary-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-secondary {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-secondary-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-success {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-success-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-info {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-info-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-warning {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-warning-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-danger {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-danger-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-light {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-light-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-dark {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-dark-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-black {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-black-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-white {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-white-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-body {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-body-bg-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-transparent {\n  --bs-bg-opacity: 1;\n  background-color: transparent !important;\n}\n\n.bg-opacity-10 {\n  --bs-bg-opacity: 0.1;\n}\n\n.bg-opacity-25 {\n  --bs-bg-opacity: 0.25;\n}\n\n.bg-opacity-50 {\n  --bs-bg-opacity: 0.5;\n}\n\n.bg-opacity-75 {\n  --bs-bg-opacity: 0.75;\n}\n\n.bg-opacity-100 {\n  --bs-bg-opacity: 1;\n}\n\n.bg-gradient {\n  background-image: var(--bs-gradient) !important;\n}\n\n.user-select-all {\n  -webkit-user-select: all !important;\n  -moz-user-select: all !important;\n  user-select: all !important;\n}\n\n.user-select-auto {\n  -webkit-user-select: auto !important;\n  -moz-user-select: auto !important;\n  -ms-user-select: auto !important;\n  user-select: auto !important;\n}\n\n.user-select-none {\n  -webkit-user-select: none !important;\n  -moz-user-select: none !important;\n  -ms-user-select: none !important;\n  user-select: none !important;\n}\n\n.pe-none {\n  pointer-events: none !important;\n}\n\n.pe-auto {\n  pointer-events: auto !important;\n}\n\n.rounded {\n  border-radius: 0.25rem !important;\n}\n\n.rounded-0 {\n  border-radius: 0 !important;\n}\n\n.rounded-1 {\n  border-radius: 0.2rem !important;\n}\n\n.rounded-2 {\n  border-radius: 0.25rem !important;\n}\n\n.rounded-3 {\n  border-radius: 0.3rem !important;\n}\n\n.rounded-circle {\n  border-radius: 50% !important;\n}\n\n.rounded-pill {\n  border-radius: 50rem !important;\n}\n\n.rounded-top {\n  border-top-left-radius: 0.25rem !important;\n  border-top-right-radius: 0.25rem !important;\n}\n\n.rounded-end {\n  border-top-right-radius: 0.25rem !important;\n  border-bottom-right-radius: 0.25rem !important;\n}\n\n.rounded-bottom {\n  border-bottom-right-radius: 0.25rem !important;\n  border-bottom-left-radius: 0.25rem !important;\n}\n\n.rounded-start {\n  border-bottom-left-radius: 0.25rem !important;\n  border-top-left-radius: 0.25rem !important;\n}\n\n.visible {\n  visibility: visible !important;\n}\n\n.invisible {\n  visibility: hidden !important;\n}\n\n@media (min-width: 576px) {\n  .float-sm-start {\n    float: left !important;\n  }\n  .float-sm-end {\n    float: right !important;\n  }\n  .float-sm-none {\n    float: none !important;\n  }\n  .d-sm-inline {\n    display: inline !important;\n  }\n  .d-sm-inline-block {\n    display: inline-block !important;\n  }\n  .d-sm-block {\n    display: block !important;\n  }\n  .d-sm-grid {\n    display: grid !important;\n  }\n  .d-sm-table {\n    display: table !important;\n  }\n  .d-sm-table-row {\n    display: table-row !important;\n  }\n  .d-sm-table-cell {\n    display: table-cell !important;\n  }\n  .d-sm-flex {\n    display: -ms-flexbox !important;\n    display: flex !important;\n  }\n  .d-sm-inline-flex {\n    display: -ms-inline-flexbox !important;\n    display: inline-flex !important;\n  }\n  .d-sm-none {\n    display: none !important;\n  }\n  .flex-sm-fill {\n    -ms-flex: 1 1 auto !important;\n    flex: 1 1 auto !important;\n  }\n  .flex-sm-row {\n    -ms-flex-direction: row !important;\n    flex-direction: row !important;\n  }\n  .flex-sm-column {\n    -ms-flex-direction: column !important;\n    flex-direction: column !important;\n  }\n  .flex-sm-row-reverse {\n    -ms-flex-direction: row-reverse !important;\n    flex-direction: row-reverse !important;\n  }\n  .flex-sm-column-reverse {\n    -ms-flex-direction: column-reverse !important;\n    flex-direction: column-reverse !important;\n  }\n  .flex-sm-grow-0 {\n    -ms-flex-positive: 0 !important;\n    flex-grow: 0 !important;\n  }\n  .flex-sm-grow-1 {\n    -ms-flex-positive: 1 !important;\n    flex-grow: 1 !important;\n  }\n  .flex-sm-shrink-0 {\n    -ms-flex-negative: 0 !important;\n    flex-shrink: 0 !important;\n  }\n  .flex-sm-shrink-1 {\n    -ms-flex-negative: 1 !important;\n    flex-shrink: 1 !important;\n  }\n  .flex-sm-wrap {\n    -ms-flex-wrap: wrap !important;\n    flex-wrap: wrap !important;\n  }\n  .flex-sm-nowrap {\n    -ms-flex-wrap: nowrap !important;\n    flex-wrap: nowrap !important;\n  }\n  .flex-sm-wrap-reverse {\n    -ms-flex-wrap: wrap-reverse !important;\n    flex-wrap: wrap-reverse !important;\n  }\n  .gap-sm-0 {\n    gap: 0 !important;\n  }\n  .gap-sm-1 {\n    gap: 0.25rem !important;\n  }\n  .gap-sm-2 {\n    gap: 0.5rem !important;\n  }\n  .gap-sm-3 {\n    gap: 1rem !important;\n  }\n  .gap-sm-4 {\n    gap: 1.5rem !important;\n  }\n  .gap-sm-5 {\n    gap: 3rem !important;\n  }\n  .justify-content-sm-start {\n    -ms-flex-pack: start !important;\n    justify-content: flex-start !important;\n  }\n  .justify-content-sm-end {\n    -ms-flex-pack: end !important;\n    justify-content: flex-end !important;\n  }\n  .justify-content-sm-center {\n    -ms-flex-pack: center !important;\n    justify-content: center !important;\n  }\n  .justify-content-sm-between {\n    -ms-flex-pack: justify !important;\n    justify-content: space-between !important;\n  }\n  .justify-content-sm-around {\n    -ms-flex-pack: distribute !important;\n    justify-content: space-around !important;\n  }\n  .justify-content-sm-evenly {\n    -ms-flex-pack: space-evenly !important;\n    justify-content: space-evenly !important;\n  }\n  .align-items-sm-start {\n    -ms-flex-align: start !important;\n    align-items: flex-start !important;\n  }\n  .align-items-sm-end {\n    -ms-flex-align: end !important;\n    align-items: flex-end !important;\n  }\n  .align-items-sm-center {\n    -ms-flex-align: center !important;\n    align-items: center !important;\n  }\n  .align-items-sm-baseline {\n    -ms-flex-align: baseline !important;\n    align-items: baseline !important;\n  }\n  .align-items-sm-stretch {\n    -ms-flex-align: stretch !important;\n    align-items: stretch !important;\n  }\n  .align-content-sm-start {\n    -ms-flex-line-pack: start !important;\n    align-content: flex-start !important;\n  }\n  .align-content-sm-end {\n    -ms-flex-line-pack: end !important;\n    align-content: flex-end !important;\n  }\n  .align-content-sm-center {\n    -ms-flex-line-pack: center !important;\n    align-content: center !important;\n  }\n  .align-content-sm-between {\n    -ms-flex-line-pack: justify !important;\n    align-content: space-between !important;\n  }\n  .align-content-sm-around {\n    -ms-flex-line-pack: distribute !important;\n    align-content: space-around !important;\n  }\n  .align-content-sm-stretch {\n    -ms-flex-line-pack: stretch !important;\n    align-content: stretch !important;\n  }\n  .align-self-sm-auto {\n    -ms-flex-item-align: auto !important;\n    align-self: auto !important;\n  }\n  .align-self-sm-start {\n    -ms-flex-item-align: start !important;\n    align-self: flex-start !important;\n  }\n  .align-self-sm-end {\n    -ms-flex-item-align: end !important;\n    align-self: flex-end !important;\n  }\n  .align-self-sm-center {\n    -ms-flex-item-align: center !important;\n    align-self: center !important;\n  }\n  .align-self-sm-baseline {\n    -ms-flex-item-align: baseline !important;\n    align-self: baseline !important;\n  }\n  .align-self-sm-stretch {\n    -ms-flex-item-align: stretch !important;\n    align-self: stretch !important;\n  }\n  .order-sm-first {\n    -ms-flex-order: -1 !important;\n    order: -1 !important;\n  }\n  .order-sm-0 {\n    -ms-flex-order: 0 !important;\n    order: 0 !important;\n  }\n  .order-sm-1 {\n    -ms-flex-order: 1 !important;\n    order: 1 !important;\n  }\n  .order-sm-2 {\n    -ms-flex-order: 2 !important;\n    order: 2 !important;\n  }\n  .order-sm-3 {\n    -ms-flex-order: 3 !important;\n    order: 3 !important;\n  }\n  .order-sm-4 {\n    -ms-flex-order: 4 !important;\n    order: 4 !important;\n  }\n  .order-sm-5 {\n    -ms-flex-order: 5 !important;\n    order: 5 !important;\n  }\n  .order-sm-last {\n    -ms-flex-order: 6 !important;\n    order: 6 !important;\n  }\n  .m-sm-0 {\n    margin: 0 !important;\n  }\n  .m-sm-1 {\n    margin: 0.25rem !important;\n  }\n  .m-sm-2 {\n    margin: 0.5rem !important;\n  }\n  .m-sm-3 {\n    margin: 1rem !important;\n  }\n  .m-sm-4 {\n    margin: 1.5rem !important;\n  }\n  .m-sm-5 {\n    margin: 3rem !important;\n  }\n  .m-sm-auto {\n    margin: auto !important;\n  }\n  .mx-sm-0 {\n    margin-right: 0 !important;\n    margin-left: 0 !important;\n  }\n  .mx-sm-1 {\n    margin-right: 0.25rem !important;\n    margin-left: 0.25rem !important;\n  }\n  .mx-sm-2 {\n    margin-right: 0.5rem !important;\n    margin-left: 0.5rem !important;\n  }\n  .mx-sm-3 {\n    margin-right: 1rem !important;\n    margin-left: 1rem !important;\n  }\n  .mx-sm-4 {\n    margin-right: 1.5rem !important;\n    margin-left: 1.5rem !important;\n  }\n  .mx-sm-5 {\n    margin-right: 3rem !important;\n    margin-left: 3rem !important;\n  }\n  .mx-sm-auto {\n    margin-right: auto !important;\n    margin-left: auto !important;\n  }\n  .my-sm-0 {\n    margin-top: 0 !important;\n    margin-bottom: 0 !important;\n  }\n  .my-sm-1 {\n    margin-top: 0.25rem !important;\n    margin-bottom: 0.25rem !important;\n  }\n  .my-sm-2 {\n    margin-top: 0.5rem !important;\n    margin-bottom: 0.5rem !important;\n  }\n  .my-sm-3 {\n    margin-top: 1rem !important;\n    margin-bottom: 1rem !important;\n  }\n  .my-sm-4 {\n    margin-top: 1.5rem !important;\n    margin-bottom: 1.5rem !important;\n  }\n  .my-sm-5 {\n    margin-top: 3rem !important;\n    margin-bottom: 3rem !important;\n  }\n  .my-sm-auto {\n    margin-top: auto !important;\n    margin-bottom: auto !important;\n  }\n  .mt-sm-0 {\n    margin-top: 0 !important;\n  }\n  .mt-sm-1 {\n    margin-top: 0.25rem !important;\n  }\n  .mt-sm-2 {\n    margin-top: 0.5rem !important;\n  }\n  .mt-sm-3 {\n    margin-top: 1rem !important;\n  }\n  .mt-sm-4 {\n    margin-top: 1.5rem !important;\n  }\n  .mt-sm-5 {\n    margin-top: 3rem !important;\n  }\n  .mt-sm-auto {\n    margin-top: auto !important;\n  }\n  .me-sm-0 {\n    margin-right: 0 !important;\n  }\n  .me-sm-1 {\n    margin-right: 0.25rem !important;\n  }\n  .me-sm-2 {\n    margin-right: 0.5rem !important;\n  }\n  .me-sm-3 {\n    margin-right: 1rem !important;\n  }\n  .me-sm-4 {\n    margin-right: 1.5rem !important;\n  }\n  .me-sm-5 {\n    margin-right: 3rem !important;\n  }\n  .me-sm-auto {\n    margin-right: auto !important;\n  }\n  .mb-sm-0 {\n    margin-bottom: 0 !important;\n  }\n  .mb-sm-1 {\n    margin-bottom: 0.25rem !important;\n  }\n  .mb-sm-2 {\n    margin-bottom: 0.5rem !important;\n  }\n  .mb-sm-3 {\n    margin-bottom: 1rem !important;\n  }\n  .mb-sm-4 {\n    margin-bottom: 1.5rem !important;\n  }\n  .mb-sm-5 {\n    margin-bottom: 3rem !important;\n  }\n  .mb-sm-auto {\n    margin-bottom: auto !important;\n  }\n  .ms-sm-0 {\n    margin-left: 0 !important;\n  }\n  .ms-sm-1 {\n    margin-left: 0.25rem !important;\n  }\n  .ms-sm-2 {\n    margin-left: 0.5rem !important;\n  }\n  .ms-sm-3 {\n    margin-left: 1rem !important;\n  }\n  .ms-sm-4 {\n    margin-left: 1.5rem !important;\n  }\n  .ms-sm-5 {\n    margin-left: 3rem !important;\n  }\n  .ms-sm-auto {\n    margin-left: auto !important;\n  }\n  .p-sm-0 {\n    padding: 0 !important;\n  }\n  .p-sm-1 {\n    padding: 0.25rem !important;\n  }\n  .p-sm-2 {\n    padding: 0.5rem !important;\n  }\n  .p-sm-3 {\n    padding: 1rem !important;\n  }\n  .p-sm-4 {\n    padding: 1.5rem !important;\n  }\n  .p-sm-5 {\n    padding: 3rem !important;\n  }\n  .px-sm-0 {\n    padding-right: 0 !important;\n    padding-left: 0 !important;\n  }\n  .px-sm-1 {\n    padding-right: 0.25rem !important;\n    padding-left: 0.25rem !important;\n  }\n  .px-sm-2 {\n    padding-right: 0.5rem !important;\n    padding-left: 0.5rem !important;\n  }\n  .px-sm-3 {\n    padding-right: 1rem !important;\n    padding-left: 1rem !important;\n  }\n  .px-sm-4 {\n    padding-right: 1.5rem !important;\n    padding-left: 1.5rem !important;\n  }\n  .px-sm-5 {\n    padding-right: 3rem !important;\n    padding-left: 3rem !important;\n  }\n  .py-sm-0 {\n    padding-top: 0 !important;\n    padding-bottom: 0 !important;\n  }\n  .py-sm-1 {\n    padding-top: 0.25rem !important;\n    padding-bottom: 0.25rem !important;\n  }\n  .py-sm-2 {\n    padding-top: 0.5rem !important;\n    padding-bottom: 0.5rem !important;\n  }\n  .py-sm-3 {\n    padding-top: 1rem !important;\n    padding-bottom: 1rem !important;\n  }\n  .py-sm-4 {\n    padding-top: 1.5rem !important;\n    padding-bottom: 1.5rem !important;\n  }\n  .py-sm-5 {\n    padding-top: 3rem !important;\n    padding-bottom: 3rem !important;\n  }\n  .pt-sm-0 {\n    padding-top: 0 !important;\n  }\n  .pt-sm-1 {\n    padding-top: 0.25rem !important;\n  }\n  .pt-sm-2 {\n    padding-top: 0.5rem !important;\n  }\n  .pt-sm-3 {\n    padding-top: 1rem !important;\n  }\n  .pt-sm-4 {\n    padding-top: 1.5rem !important;\n  }\n  .pt-sm-5 {\n    padding-top: 3rem !important;\n  }\n  .pe-sm-0 {\n    padding-right: 0 !important;\n  }\n  .pe-sm-1 {\n    padding-right: 0.25rem !important;\n  }\n  .pe-sm-2 {\n    padding-right: 0.5rem !important;\n  }\n  .pe-sm-3 {\n    padding-right: 1rem !important;\n  }\n  .pe-sm-4 {\n    padding-right: 1.5rem !important;\n  }\n  .pe-sm-5 {\n    padding-right: 3rem !important;\n  }\n  .pb-sm-0 {\n    padding-bottom: 0 !important;\n  }\n  .pb-sm-1 {\n    padding-bottom: 0.25rem !important;\n  }\n  .pb-sm-2 {\n    padding-bottom: 0.5rem !important;\n  }\n  .pb-sm-3 {\n    padding-bottom: 1rem !important;\n  }\n  .pb-sm-4 {\n    padding-bottom: 1.5rem !important;\n  }\n  .pb-sm-5 {\n    padding-bottom: 3rem !important;\n  }\n  .ps-sm-0 {\n    padding-left: 0 !important;\n  }\n  .ps-sm-1 {\n    padding-left: 0.25rem !important;\n  }\n  .ps-sm-2 {\n    padding-left: 0.5rem !important;\n  }\n  .ps-sm-3 {\n    padding-left: 1rem !important;\n  }\n  .ps-sm-4 {\n    padding-left: 1.5rem !important;\n  }\n  .ps-sm-5 {\n    padding-left: 3rem !important;\n  }\n  .text-sm-start {\n    text-align: left !important;\n  }\n  .text-sm-end {\n    text-align: right !important;\n  }\n  .text-sm-center {\n    text-align: center !important;\n  }\n}\n\n@media (min-width: 768px) {\n  .float-md-start {\n    float: left !important;\n  }\n  .float-md-end {\n    float: right !important;\n  }\n  .float-md-none {\n    float: none !important;\n  }\n  .d-md-inline {\n    display: inline !important;\n  }\n  .d-md-inline-block {\n    display: inline-block !important;\n  }\n  .d-md-block {\n    display: block !important;\n  }\n  .d-md-grid {\n    display: grid !important;\n  }\n  .d-md-table {\n    display: table !important;\n  }\n  .d-md-table-row {\n    display: table-row !important;\n  }\n  .d-md-table-cell {\n    display: table-cell !important;\n  }\n  .d-md-flex {\n    display: -ms-flexbox !important;\n    display: flex !important;\n  }\n  .d-md-inline-flex {\n    display: -ms-inline-flexbox !important;\n    display: inline-flex !important;\n  }\n  .d-md-none {\n    display: none !important;\n  }\n  .flex-md-fill {\n    -ms-flex: 1 1 auto !important;\n    flex: 1 1 auto !important;\n  }\n  .flex-md-row {\n    -ms-flex-direction: row !important;\n    flex-direction: row !important;\n  }\n  .flex-md-column {\n    -ms-flex-direction: column !important;\n    flex-direction: column !important;\n  }\n  .flex-md-row-reverse {\n    -ms-flex-direction: row-reverse !important;\n    flex-direction: row-reverse !important;\n  }\n  .flex-md-column-reverse {\n    -ms-flex-direction: column-reverse !important;\n    flex-direction: column-reverse !important;\n  }\n  .flex-md-grow-0 {\n    -ms-flex-positive: 0 !important;\n    flex-grow: 0 !important;\n  }\n  .flex-md-grow-1 {\n    -ms-flex-positive: 1 !important;\n    flex-grow: 1 !important;\n  }\n  .flex-md-shrink-0 {\n    -ms-flex-negative: 0 !important;\n    flex-shrink: 0 !important;\n  }\n  .flex-md-shrink-1 {\n    -ms-flex-negative: 1 !important;\n    flex-shrink: 1 !important;\n  }\n  .flex-md-wrap {\n    -ms-flex-wrap: wrap !important;\n    flex-wrap: wrap !important;\n  }\n  .flex-md-nowrap {\n    -ms-flex-wrap: nowrap !important;\n    flex-wrap: nowrap !important;\n  }\n  .flex-md-wrap-reverse {\n    -ms-flex-wrap: wrap-reverse !important;\n    flex-wrap: wrap-reverse !important;\n  }\n  .gap-md-0 {\n    gap: 0 !important;\n  }\n  .gap-md-1 {\n    gap: 0.25rem !important;\n  }\n  .gap-md-2 {\n    gap: 0.5rem !important;\n  }\n  .gap-md-3 {\n    gap: 1rem !important;\n  }\n  .gap-md-4 {\n    gap: 1.5rem !important;\n  }\n  .gap-md-5 {\n    gap: 3rem !important;\n  }\n  .justify-content-md-start {\n    -ms-flex-pack: start !important;\n    justify-content: flex-start !important;\n  }\n  .justify-content-md-end {\n    -ms-flex-pack: end !important;\n    justify-content: flex-end !important;\n  }\n  .justify-content-md-center {\n    -ms-flex-pack: center !important;\n    justify-content: center !important;\n  }\n  .justify-content-md-between {\n    -ms-flex-pack: justify !important;\n    justify-content: space-between !important;\n  }\n  .justify-content-md-around {\n    -ms-flex-pack: distribute !important;\n    justify-content: space-around !important;\n  }\n  .justify-content-md-evenly {\n    -ms-flex-pack: space-evenly !important;\n    justify-content: space-evenly !important;\n  }\n  .align-items-md-start {\n    -ms-flex-align: start !important;\n    align-items: flex-start !important;\n  }\n  .align-items-md-end {\n    -ms-flex-align: end !important;\n    align-items: flex-end !important;\n  }\n  .align-items-md-center {\n    -ms-flex-align: center !important;\n    align-items: center !important;\n  }\n  .align-items-md-baseline {\n    -ms-flex-align: baseline !important;\n    align-items: baseline !important;\n  }\n  .align-items-md-stretch {\n    -ms-flex-align: stretch !important;\n    align-items: stretch !important;\n  }\n  .align-content-md-start {\n    -ms-flex-line-pack: start !important;\n    align-content: flex-start !important;\n  }\n  .align-content-md-end {\n    -ms-flex-line-pack: end !important;\n    align-content: flex-end !important;\n  }\n  .align-content-md-center {\n    -ms-flex-line-pack: center !important;\n    align-content: center !important;\n  }\n  .align-content-md-between {\n    -ms-flex-line-pack: justify !important;\n    align-content: space-between !important;\n  }\n  .align-content-md-around {\n    -ms-flex-line-pack: distribute !important;\n    align-content: space-around !important;\n  }\n  .align-content-md-stretch {\n    -ms-flex-line-pack: stretch !important;\n    align-content: stretch !important;\n  }\n  .align-self-md-auto {\n    -ms-flex-item-align: auto !important;\n    align-self: auto !important;\n  }\n  .align-self-md-start {\n    -ms-flex-item-align: start !important;\n    align-self: flex-start !important;\n  }\n  .align-self-md-end {\n    -ms-flex-item-align: end !important;\n    align-self: flex-end !important;\n  }\n  .align-self-md-center {\n    -ms-flex-item-align: center !important;\n    align-self: center !important;\n  }\n  .align-self-md-baseline {\n    -ms-flex-item-align: baseline !important;\n    align-self: baseline !important;\n  }\n  .align-self-md-stretch {\n    -ms-flex-item-align: stretch !important;\n    align-self: stretch !important;\n  }\n  .order-md-first {\n    -ms-flex-order: -1 !important;\n    order: -1 !important;\n  }\n  .order-md-0 {\n    -ms-flex-order: 0 !important;\n    order: 0 !important;\n  }\n  .order-md-1 {\n    -ms-flex-order: 1 !important;\n    order: 1 !important;\n  }\n  .order-md-2 {\n    -ms-flex-order: 2 !important;\n    order: 2 !important;\n  }\n  .order-md-3 {\n    -ms-flex-order: 3 !important;\n    order: 3 !important;\n  }\n  .order-md-4 {\n    -ms-flex-order: 4 !important;\n    order: 4 !important;\n  }\n  .order-md-5 {\n    -ms-flex-order: 5 !important;\n    order: 5 !important;\n  }\n  .order-md-last {\n    -ms-flex-order: 6 !important;\n    order: 6 !important;\n  }\n  .m-md-0 {\n    margin: 0 !important;\n  }\n  .m-md-1 {\n    margin: 0.25rem !important;\n  }\n  .m-md-2 {\n    margin: 0.5rem !important;\n  }\n  .m-md-3 {\n    margin: 1rem !important;\n  }\n  .m-md-4 {\n    margin: 1.5rem !important;\n  }\n  .m-md-5 {\n    margin: 3rem !important;\n  }\n  .m-md-auto {\n    margin: auto !important;\n  }\n  .mx-md-0 {\n    margin-right: 0 !important;\n    margin-left: 0 !important;\n  }\n  .mx-md-1 {\n    margin-right: 0.25rem !important;\n    margin-left: 0.25rem !important;\n  }\n  .mx-md-2 {\n    margin-right: 0.5rem !important;\n    margin-left: 0.5rem !important;\n  }\n  .mx-md-3 {\n    margin-right: 1rem !important;\n    margin-left: 1rem !important;\n  }\n  .mx-md-4 {\n    margin-right: 1.5rem !important;\n    margin-left: 1.5rem !important;\n  }\n  .mx-md-5 {\n    margin-right: 3rem !important;\n    margin-left: 3rem !important;\n  }\n  .mx-md-auto {\n    margin-right: auto !important;\n    margin-left: auto !important;\n  }\n  .my-md-0 {\n    margin-top: 0 !important;\n    margin-bottom: 0 !important;\n  }\n  .my-md-1 {\n    margin-top: 0.25rem !important;\n    margin-bottom: 0.25rem !important;\n  }\n  .my-md-2 {\n    margin-top: 0.5rem !important;\n    margin-bottom: 0.5rem !important;\n  }\n  .my-md-3 {\n    margin-top: 1rem !important;\n    margin-bottom: 1rem !important;\n  }\n  .my-md-4 {\n    margin-top: 1.5rem !important;\n    margin-bottom: 1.5rem !important;\n  }\n  .my-md-5 {\n    margin-top: 3rem !important;\n    margin-bottom: 3rem !important;\n  }\n  .my-md-auto {\n    margin-top: auto !important;\n    margin-bottom: auto !important;\n  }\n  .mt-md-0 {\n    margin-top: 0 !important;\n  }\n  .mt-md-1 {\n    margin-top: 0.25rem !important;\n  }\n  .mt-md-2 {\n    margin-top: 0.5rem !important;\n  }\n  .mt-md-3 {\n    margin-top: 1rem !important;\n  }\n  .mt-md-4 {\n    margin-top: 1.5rem !important;\n  }\n  .mt-md-5 {\n    margin-top: 3rem !important;\n  }\n  .mt-md-auto {\n    margin-top: auto !important;\n  }\n  .me-md-0 {\n    margin-right: 0 !important;\n  }\n  .me-md-1 {\n    margin-right: 0.25rem !important;\n  }\n  .me-md-2 {\n    margin-right: 0.5rem !important;\n  }\n  .me-md-3 {\n    margin-right: 1rem !important;\n  }\n  .me-md-4 {\n    margin-right: 1.5rem !important;\n  }\n  .me-md-5 {\n    margin-right: 3rem !important;\n  }\n  .me-md-auto {\n    margin-right: auto !important;\n  }\n  .mb-md-0 {\n    margin-bottom: 0 !important;\n  }\n  .mb-md-1 {\n    margin-bottom: 0.25rem !important;\n  }\n  .mb-md-2 {\n    margin-bottom: 0.5rem !important;\n  }\n  .mb-md-3 {\n    margin-bottom: 1rem !important;\n  }\n  .mb-md-4 {\n    margin-bottom: 1.5rem !important;\n  }\n  .mb-md-5 {\n    margin-bottom: 3rem !important;\n  }\n  .mb-md-auto {\n    margin-bottom: auto !important;\n  }\n  .ms-md-0 {\n    margin-left: 0 !important;\n  }\n  .ms-md-1 {\n    margin-left: 0.25rem !important;\n  }\n  .ms-md-2 {\n    margin-left: 0.5rem !important;\n  }\n  .ms-md-3 {\n    margin-left: 1rem !important;\n  }\n  .ms-md-4 {\n    margin-left: 1.5rem !important;\n  }\n  .ms-md-5 {\n    margin-left: 3rem !important;\n  }\n  .ms-md-auto {\n    margin-left: auto !important;\n  }\n  .p-md-0 {\n    padding: 0 !important;\n  }\n  .p-md-1 {\n    padding: 0.25rem !important;\n  }\n  .p-md-2 {\n    padding: 0.5rem !important;\n  }\n  .p-md-3 {\n    padding: 1rem !important;\n  }\n  .p-md-4 {\n    padding: 1.5rem !important;\n  }\n  .p-md-5 {\n    padding: 3rem !important;\n  }\n  .px-md-0 {\n    padding-right: 0 !important;\n    padding-left: 0 !important;\n  }\n  .px-md-1 {\n    padding-right: 0.25rem !important;\n    padding-left: 0.25rem !important;\n  }\n  .px-md-2 {\n    padding-right: 0.5rem !important;\n    padding-left: 0.5rem !important;\n  }\n  .px-md-3 {\n    padding-right: 1rem !important;\n    padding-left: 1rem !important;\n  }\n  .px-md-4 {\n    padding-right: 1.5rem !important;\n    padding-left: 1.5rem !important;\n  }\n  .px-md-5 {\n    padding-right: 3rem !important;\n    padding-left: 3rem !important;\n  }\n  .py-md-0 {\n    padding-top: 0 !important;\n    padding-bottom: 0 !important;\n  }\n  .py-md-1 {\n    padding-top: 0.25rem !important;\n    padding-bottom: 0.25rem !important;\n  }\n  .py-md-2 {\n    padding-top: 0.5rem !important;\n    padding-bottom: 0.5rem !important;\n  }\n  .py-md-3 {\n    padding-top: 1rem !important;\n    padding-bottom: 1rem !important;\n  }\n  .py-md-4 {\n    padding-top: 1.5rem !important;\n    padding-bottom: 1.5rem !important;\n  }\n  .py-md-5 {\n    padding-top: 3rem !important;\n    padding-bottom: 3rem !important;\n  }\n  .pt-md-0 {\n    padding-top: 0 !important;\n  }\n  .pt-md-1 {\n    padding-top: 0.25rem !important;\n  }\n  .pt-md-2 {\n    padding-top: 0.5rem !important;\n  }\n  .pt-md-3 {\n    padding-top: 1rem !important;\n  }\n  .pt-md-4 {\n    padding-top: 1.5rem !important;\n  }\n  .pt-md-5 {\n    padding-top: 3rem !important;\n  }\n  .pe-md-0 {\n    padding-right: 0 !important;\n  }\n  .pe-md-1 {\n    padding-right: 0.25rem !important;\n  }\n  .pe-md-2 {\n    padding-right: 0.5rem !important;\n  }\n  .pe-md-3 {\n    padding-right: 1rem !important;\n  }\n  .pe-md-4 {\n    padding-right: 1.5rem !important;\n  }\n  .pe-md-5 {\n    padding-right: 3rem !important;\n  }\n  .pb-md-0 {\n    padding-bottom: 0 !important;\n  }\n  .pb-md-1 {\n    padding-bottom: 0.25rem !important;\n  }\n  .pb-md-2 {\n    padding-bottom: 0.5rem !important;\n  }\n  .pb-md-3 {\n    padding-bottom: 1rem !important;\n  }\n  .pb-md-4 {\n    padding-bottom: 1.5rem !important;\n  }\n  .pb-md-5 {\n    padding-bottom: 3rem !important;\n  }\n  .ps-md-0 {\n    padding-left: 0 !important;\n  }\n  .ps-md-1 {\n    padding-left: 0.25rem !important;\n  }\n  .ps-md-2 {\n    padding-left: 0.5rem !important;\n  }\n  .ps-md-3 {\n    padding-left: 1rem !important;\n  }\n  .ps-md-4 {\n    padding-left: 1.5rem !important;\n  }\n  .ps-md-5 {\n    padding-left: 3rem !important;\n  }\n  .text-md-start {\n    text-align: left !important;\n  }\n  .text-md-end {\n    text-align: right !important;\n  }\n  .text-md-center {\n    text-align: center !important;\n  }\n}\n\n@media (min-width: 992px) {\n  .float-lg-start {\n    float: left !important;\n  }\n  .float-lg-end {\n    float: right !important;\n  }\n  .float-lg-none {\n    float: none !important;\n  }\n  .d-lg-inline {\n    display: inline !important;\n  }\n  .d-lg-inline-block {\n    display: inline-block !important;\n  }\n  .d-lg-block {\n    display: block !important;\n  }\n  .d-lg-grid {\n    display: grid !important;\n  }\n  .d-lg-table {\n    display: table !important;\n  }\n  .d-lg-table-row {\n    display: table-row !important;\n  }\n  .d-lg-table-cell {\n    display: table-cell !important;\n  }\n  .d-lg-flex {\n    display: -ms-flexbox !important;\n    display: flex !important;\n  }\n  .d-lg-inline-flex {\n    display: -ms-inline-flexbox !important;\n    display: inline-flex !important;\n  }\n  .d-lg-none {\n    display: none !important;\n  }\n  .flex-lg-fill {\n    -ms-flex: 1 1 auto !important;\n    flex: 1 1 auto !important;\n  }\n  .flex-lg-row {\n    -ms-flex-direction: row !important;\n    flex-direction: row !important;\n  }\n  .flex-lg-column {\n    -ms-flex-direction: column !important;\n    flex-direction: column !important;\n  }\n  .flex-lg-row-reverse {\n    -ms-flex-direction: row-reverse !important;\n    flex-direction: row-reverse !important;\n  }\n  .flex-lg-column-reverse {\n    -ms-flex-direction: column-reverse !important;\n    flex-direction: column-reverse !important;\n  }\n  .flex-lg-grow-0 {\n    -ms-flex-positive: 0 !important;\n    flex-grow: 0 !important;\n  }\n  .flex-lg-grow-1 {\n    -ms-flex-positive: 1 !important;\n    flex-grow: 1 !important;\n  }\n  .flex-lg-shrink-0 {\n    -ms-flex-negative: 0 !important;\n    flex-shrink: 0 !important;\n  }\n  .flex-lg-shrink-1 {\n    -ms-flex-negative: 1 !important;\n    flex-shrink: 1 !important;\n  }\n  .flex-lg-wrap {\n    -ms-flex-wrap: wrap !important;\n    flex-wrap: wrap !important;\n  }\n  .flex-lg-nowrap {\n    -ms-flex-wrap: nowrap !important;\n    flex-wrap: nowrap !important;\n  }\n  .flex-lg-wrap-reverse {\n    -ms-flex-wrap: wrap-reverse !important;\n    flex-wrap: wrap-reverse !important;\n  }\n  .gap-lg-0 {\n    gap: 0 !important;\n  }\n  .gap-lg-1 {\n    gap: 0.25rem !important;\n  }\n  .gap-lg-2 {\n    gap: 0.5rem !important;\n  }\n  .gap-lg-3 {\n    gap: 1rem !important;\n  }\n  .gap-lg-4 {\n    gap: 1.5rem !important;\n  }\n  .gap-lg-5 {\n    gap: 3rem !important;\n  }\n  .justify-content-lg-start {\n    -ms-flex-pack: start !important;\n    justify-content: flex-start !important;\n  }\n  .justify-content-lg-end {\n    -ms-flex-pack: end !important;\n    justify-content: flex-end !important;\n  }\n  .justify-content-lg-center {\n    -ms-flex-pack: center !important;\n    justify-content: center !important;\n  }\n  .justify-content-lg-between {\n    -ms-flex-pack: justify !important;\n    justify-content: space-between !important;\n  }\n  .justify-content-lg-around {\n    -ms-flex-pack: distribute !important;\n    justify-content: space-around !important;\n  }\n  .justify-content-lg-evenly {\n    -ms-flex-pack: space-evenly !important;\n    justify-content: space-evenly !important;\n  }\n  .align-items-lg-start {\n    -ms-flex-align: start !important;\n    align-items: flex-start !important;\n  }\n  .align-items-lg-end {\n    -ms-flex-align: end !important;\n    align-items: flex-end !important;\n  }\n  .align-items-lg-center {\n    -ms-flex-align: center !important;\n    align-items: center !important;\n  }\n  .align-items-lg-baseline {\n    -ms-flex-align: baseline !important;\n    align-items: baseline !important;\n  }\n  .align-items-lg-stretch {\n    -ms-flex-align: stretch !important;\n    align-items: stretch !important;\n  }\n  .align-content-lg-start {\n    -ms-flex-line-pack: start !important;\n    align-content: flex-start !important;\n  }\n  .align-content-lg-end {\n    -ms-flex-line-pack: end !important;\n    align-content: flex-end !important;\n  }\n  .align-content-lg-center {\n    -ms-flex-line-pack: center !important;\n    align-content: center !important;\n  }\n  .align-content-lg-between {\n    -ms-flex-line-pack: justify !important;\n    align-content: space-between !important;\n  }\n  .align-content-lg-around {\n    -ms-flex-line-pack: distribute !important;\n    align-content: space-around !important;\n  }\n  .align-content-lg-stretch {\n    -ms-flex-line-pack: stretch !important;\n    align-content: stretch !important;\n  }\n  .align-self-lg-auto {\n    -ms-flex-item-align: auto !important;\n    align-self: auto !important;\n  }\n  .align-self-lg-start {\n    -ms-flex-item-align: start !important;\n    align-self: flex-start !important;\n  }\n  .align-self-lg-end {\n    -ms-flex-item-align: end !important;\n    align-self: flex-end !important;\n  }\n  .align-self-lg-center {\n    -ms-flex-item-align: center !important;\n    align-self: center !important;\n  }\n  .align-self-lg-baseline {\n    -ms-flex-item-align: baseline !important;\n    align-self: baseline !important;\n  }\n  .align-self-lg-stretch {\n    -ms-flex-item-align: stretch !important;\n    align-self: stretch !important;\n  }\n  .order-lg-first {\n    -ms-flex-order: -1 !important;\n    order: -1 !important;\n  }\n  .order-lg-0 {\n    -ms-flex-order: 0 !important;\n    order: 0 !important;\n  }\n  .order-lg-1 {\n    -ms-flex-order: 1 !important;\n    order: 1 !important;\n  }\n  .order-lg-2 {\n    -ms-flex-order: 2 !important;\n    order: 2 !important;\n  }\n  .order-lg-3 {\n    -ms-flex-order: 3 !important;\n    order: 3 !important;\n  }\n  .order-lg-4 {\n    -ms-flex-order: 4 !important;\n    order: 4 !important;\n  }\n  .order-lg-5 {\n    -ms-flex-order: 5 !important;\n    order: 5 !important;\n  }\n  .order-lg-last {\n    -ms-flex-order: 6 !important;\n    order: 6 !important;\n  }\n  .m-lg-0 {\n    margin: 0 !important;\n  }\n  .m-lg-1 {\n    margin: 0.25rem !important;\n  }\n  .m-lg-2 {\n    margin: 0.5rem !important;\n  }\n  .m-lg-3 {\n    margin: 1rem !important;\n  }\n  .m-lg-4 {\n    margin: 1.5rem !important;\n  }\n  .m-lg-5 {\n    margin: 3rem !important;\n  }\n  .m-lg-auto {\n    margin: auto !important;\n  }\n  .mx-lg-0 {\n    margin-right: 0 !important;\n    margin-left: 0 !important;\n  }\n  .mx-lg-1 {\n    margin-right: 0.25rem !important;\n    margin-left: 0.25rem !important;\n  }\n  .mx-lg-2 {\n    margin-right: 0.5rem !important;\n    margin-left: 0.5rem !important;\n  }\n  .mx-lg-3 {\n    margin-right: 1rem !important;\n    margin-left: 1rem !important;\n  }\n  .mx-lg-4 {\n    margin-right: 1.5rem !important;\n    margin-left: 1.5rem !important;\n  }\n  .mx-lg-5 {\n    margin-right: 3rem !important;\n    margin-left: 3rem !important;\n  }\n  .mx-lg-auto {\n    margin-right: auto !important;\n    margin-left: auto !important;\n  }\n  .my-lg-0 {\n    margin-top: 0 !important;\n    margin-bottom: 0 !important;\n  }\n  .my-lg-1 {\n    margin-top: 0.25rem !important;\n    margin-bottom: 0.25rem !important;\n  }\n  .my-lg-2 {\n    margin-top: 0.5rem !important;\n    margin-bottom: 0.5rem !important;\n  }\n  .my-lg-3 {\n    margin-top: 1rem !important;\n    margin-bottom: 1rem !important;\n  }\n  .my-lg-4 {\n    margin-top: 1.5rem !important;\n    margin-bottom: 1.5rem !important;\n  }\n  .my-lg-5 {\n    margin-top: 3rem !important;\n    margin-bottom: 3rem !important;\n  }\n  .my-lg-auto {\n    margin-top: auto !important;\n    margin-bottom: auto !important;\n  }\n  .mt-lg-0 {\n    margin-top: 0 !important;\n  }\n  .mt-lg-1 {\n    margin-top: 0.25rem !important;\n  }\n  .mt-lg-2 {\n    margin-top: 0.5rem !important;\n  }\n  .mt-lg-3 {\n    margin-top: 1rem !important;\n  }\n  .mt-lg-4 {\n    margin-top: 1.5rem !important;\n  }\n  .mt-lg-5 {\n    margin-top: 3rem !important;\n  }\n  .mt-lg-auto {\n    margin-top: auto !important;\n  }\n  .me-lg-0 {\n    margin-right: 0 !important;\n  }\n  .me-lg-1 {\n    margin-right: 0.25rem !important;\n  }\n  .me-lg-2 {\n    margin-right: 0.5rem !important;\n  }\n  .me-lg-3 {\n    margin-right: 1rem !important;\n  }\n  .me-lg-4 {\n    margin-right: 1.5rem !important;\n  }\n  .me-lg-5 {\n    margin-right: 3rem !important;\n  }\n  .me-lg-auto {\n    margin-right: auto !important;\n  }\n  .mb-lg-0 {\n    margin-bottom: 0 !important;\n  }\n  .mb-lg-1 {\n    margin-bottom: 0.25rem !important;\n  }\n  .mb-lg-2 {\n    margin-bottom: 0.5rem !important;\n  }\n  .mb-lg-3 {\n    margin-bottom: 1rem !important;\n  }\n  .mb-lg-4 {\n    margin-bottom: 1.5rem !important;\n  }\n  .mb-lg-5 {\n    margin-bottom: 3rem !important;\n  }\n  .mb-lg-auto {\n    margin-bottom: auto !important;\n  }\n  .ms-lg-0 {\n    margin-left: 0 !important;\n  }\n  .ms-lg-1 {\n    margin-left: 0.25rem !important;\n  }\n  .ms-lg-2 {\n    margin-left: 0.5rem !important;\n  }\n  .ms-lg-3 {\n    margin-left: 1rem !important;\n  }\n  .ms-lg-4 {\n    margin-left: 1.5rem !important;\n  }\n  .ms-lg-5 {\n    margin-left: 3rem !important;\n  }\n  .ms-lg-auto {\n    margin-left: auto !important;\n  }\n  .p-lg-0 {\n    padding: 0 !important;\n  }\n  .p-lg-1 {\n    padding: 0.25rem !important;\n  }\n  .p-lg-2 {\n    padding: 0.5rem !important;\n  }\n  .p-lg-3 {\n    padding: 1rem !important;\n  }\n  .p-lg-4 {\n    padding: 1.5rem !important;\n  }\n  .p-lg-5 {\n    padding: 3rem !important;\n  }\n  .px-lg-0 {\n    padding-right: 0 !important;\n    padding-left: 0 !important;\n  }\n  .px-lg-1 {\n    padding-right: 0.25rem !important;\n    padding-left: 0.25rem !important;\n  }\n  .px-lg-2 {\n    padding-right: 0.5rem !important;\n    padding-left: 0.5rem !important;\n  }\n  .px-lg-3 {\n    padding-right: 1rem !important;\n    padding-left: 1rem !important;\n  }\n  .px-lg-4 {\n    padding-right: 1.5rem !important;\n    padding-left: 1.5rem !important;\n  }\n  .px-lg-5 {\n    padding-right: 3rem !important;\n    padding-left: 3rem !important;\n  }\n  .py-lg-0 {\n    padding-top: 0 !important;\n    padding-bottom: 0 !important;\n  }\n  .py-lg-1 {\n    padding-top: 0.25rem !important;\n    padding-bottom: 0.25rem !important;\n  }\n  .py-lg-2 {\n    padding-top: 0.5rem !important;\n    padding-bottom: 0.5rem !important;\n  }\n  .py-lg-3 {\n    padding-top: 1rem !important;\n    padding-bottom: 1rem !important;\n  }\n  .py-lg-4 {\n    padding-top: 1.5rem !important;\n    padding-bottom: 1.5rem !important;\n  }\n  .py-lg-5 {\n    padding-top: 3rem !important;\n    padding-bottom: 3rem !important;\n  }\n  .pt-lg-0 {\n    padding-top: 0 !important;\n  }\n  .pt-lg-1 {\n    padding-top: 0.25rem !important;\n  }\n  .pt-lg-2 {\n    padding-top: 0.5rem !important;\n  }\n  .pt-lg-3 {\n    padding-top: 1rem !important;\n  }\n  .pt-lg-4 {\n    padding-top: 1.5rem !important;\n  }\n  .pt-lg-5 {\n    padding-top: 3rem !important;\n  }\n  .pe-lg-0 {\n    padding-right: 0 !important;\n  }\n  .pe-lg-1 {\n    padding-right: 0.25rem !important;\n  }\n  .pe-lg-2 {\n    padding-right: 0.5rem !important;\n  }\n  .pe-lg-3 {\n    padding-right: 1rem !important;\n  }\n  .pe-lg-4 {\n    padding-right: 1.5rem !important;\n  }\n  .pe-lg-5 {\n    padding-right: 3rem !important;\n  }\n  .pb-lg-0 {\n    padding-bottom: 0 !important;\n  }\n  .pb-lg-1 {\n    padding-bottom: 0.25rem !important;\n  }\n  .pb-lg-2 {\n    padding-bottom: 0.5rem !important;\n  }\n  .pb-lg-3 {\n    padding-bottom: 1rem !important;\n  }\n  .pb-lg-4 {\n    padding-bottom: 1.5rem !important;\n  }\n  .pb-lg-5 {\n    padding-bottom: 3rem !important;\n  }\n  .ps-lg-0 {\n    padding-left: 0 !important;\n  }\n  .ps-lg-1 {\n    padding-left: 0.25rem !important;\n  }\n  .ps-lg-2 {\n    padding-left: 0.5rem !important;\n  }\n  .ps-lg-3 {\n    padding-left: 1rem !important;\n  }\n  .ps-lg-4 {\n    padding-left: 1.5rem !important;\n  }\n  .ps-lg-5 {\n    padding-left: 3rem !important;\n  }\n  .text-lg-start {\n    text-align: left !important;\n  }\n  .text-lg-end {\n    text-align: right !important;\n  }\n  .text-lg-center {\n    text-align: center !important;\n  }\n}\n\n@media (min-width: 1200px) {\n  .float-xl-start {\n    float: left !important;\n  }\n  .float-xl-end {\n    float: right !important;\n  }\n  .float-xl-none {\n    float: none !important;\n  }\n  .d-xl-inline {\n    display: inline !important;\n  }\n  .d-xl-inline-block {\n    display: inline-block !important;\n  }\n  .d-xl-block {\n    display: block !important;\n  }\n  .d-xl-grid {\n    display: grid !important;\n  }\n  .d-xl-table {\n    display: table !important;\n  }\n  .d-xl-table-row {\n    display: table-row !important;\n  }\n  .d-xl-table-cell {\n    display: table-cell !important;\n  }\n  .d-xl-flex {\n    display: -ms-flexbox !important;\n    display: flex !important;\n  }\n  .d-xl-inline-flex {\n    display: -ms-inline-flexbox !important;\n    display: inline-flex !important;\n  }\n  .d-xl-none {\n    display: none !important;\n  }\n  .flex-xl-fill {\n    -ms-flex: 1 1 auto !important;\n    flex: 1 1 auto !important;\n  }\n  .flex-xl-row {\n    -ms-flex-direction: row !important;\n    flex-direction: row !important;\n  }\n  .flex-xl-column {\n    -ms-flex-direction: column !important;\n    flex-direction: column !important;\n  }\n  .flex-xl-row-reverse {\n    -ms-flex-direction: row-reverse !important;\n    flex-direction: row-reverse !important;\n  }\n  .flex-xl-column-reverse {\n    -ms-flex-direction: column-reverse !important;\n    flex-direction: column-reverse !important;\n  }\n  .flex-xl-grow-0 {\n    -ms-flex-positive: 0 !important;\n    flex-grow: 0 !important;\n  }\n  .flex-xl-grow-1 {\n    -ms-flex-positive: 1 !important;\n    flex-grow: 1 !important;\n  }\n  .flex-xl-shrink-0 {\n    -ms-flex-negative: 0 !important;\n    flex-shrink: 0 !important;\n  }\n  .flex-xl-shrink-1 {\n    -ms-flex-negative: 1 !important;\n    flex-shrink: 1 !important;\n  }\n  .flex-xl-wrap {\n    -ms-flex-wrap: wrap !important;\n    flex-wrap: wrap !important;\n  }\n  .flex-xl-nowrap {\n    -ms-flex-wrap: nowrap !important;\n    flex-wrap: nowrap !important;\n  }\n  .flex-xl-wrap-reverse {\n    -ms-flex-wrap: wrap-reverse !important;\n    flex-wrap: wrap-reverse !important;\n  }\n  .gap-xl-0 {\n    gap: 0 !important;\n  }\n  .gap-xl-1 {\n    gap: 0.25rem !important;\n  }\n  .gap-xl-2 {\n    gap: 0.5rem !important;\n  }\n  .gap-xl-3 {\n    gap: 1rem !important;\n  }\n  .gap-xl-4 {\n    gap: 1.5rem !important;\n  }\n  .gap-xl-5 {\n    gap: 3rem !important;\n  }\n  .justify-content-xl-start {\n    -ms-flex-pack: start !important;\n    justify-content: flex-start !important;\n  }\n  .justify-content-xl-end {\n    -ms-flex-pack: end !important;\n    justify-content: flex-end !important;\n  }\n  .justify-content-xl-center {\n    -ms-flex-pack: center !important;\n    justify-content: center !important;\n  }\n  .justify-content-xl-between {\n    -ms-flex-pack: justify !important;\n    justify-content: space-between !important;\n  }\n  .justify-content-xl-around {\n    -ms-flex-pack: distribute !important;\n    justify-content: space-around !important;\n  }\n  .justify-content-xl-evenly {\n    -ms-flex-pack: space-evenly !important;\n    justify-content: space-evenly !important;\n  }\n  .align-items-xl-start {\n    -ms-flex-align: start !important;\n    align-items: flex-start !important;\n  }\n  .align-items-xl-end {\n    -ms-flex-align: end !important;\n    align-items: flex-end !important;\n  }\n  .align-items-xl-center {\n    -ms-flex-align: center !important;\n    align-items: center !important;\n  }\n  .align-items-xl-baseline {\n    -ms-flex-align: baseline !important;\n    align-items: baseline !important;\n  }\n  .align-items-xl-stretch {\n    -ms-flex-align: stretch !important;\n    align-items: stretch !important;\n  }\n  .align-content-xl-start {\n    -ms-flex-line-pack: start !important;\n    align-content: flex-start !important;\n  }\n  .align-content-xl-end {\n    -ms-flex-line-pack: end !important;\n    align-content: flex-end !important;\n  }\n  .align-content-xl-center {\n    -ms-flex-line-pack: center !important;\n    align-content: center !important;\n  }\n  .align-content-xl-between {\n    -ms-flex-line-pack: justify !important;\n    align-content: space-between !important;\n  }\n  .align-content-xl-around {\n    -ms-flex-line-pack: distribute !important;\n    align-content: space-around !important;\n  }\n  .align-content-xl-stretch {\n    -ms-flex-line-pack: stretch !important;\n    align-content: stretch !important;\n  }\n  .align-self-xl-auto {\n    -ms-flex-item-align: auto !important;\n    align-self: auto !important;\n  }\n  .align-self-xl-start {\n    -ms-flex-item-align: start !important;\n    align-self: flex-start !important;\n  }\n  .align-self-xl-end {\n    -ms-flex-item-align: end !important;\n    align-self: flex-end !important;\n  }\n  .align-self-xl-center {\n    -ms-flex-item-align: center !important;\n    align-self: center !important;\n  }\n  .align-self-xl-baseline {\n    -ms-flex-item-align: baseline !important;\n    align-self: baseline !important;\n  }\n  .align-self-xl-stretch {\n    -ms-flex-item-align: stretch !important;\n    align-self: stretch !important;\n  }\n  .order-xl-first {\n    -ms-flex-order: -1 !important;\n    order: -1 !important;\n  }\n  .order-xl-0 {\n    -ms-flex-order: 0 !important;\n    order: 0 !important;\n  }\n  .order-xl-1 {\n    -ms-flex-order: 1 !important;\n    order: 1 !important;\n  }\n  .order-xl-2 {\n    -ms-flex-order: 2 !important;\n    order: 2 !important;\n  }\n  .order-xl-3 {\n    -ms-flex-order: 3 !important;\n    order: 3 !important;\n  }\n  .order-xl-4 {\n    -ms-flex-order: 4 !important;\n    order: 4 !important;\n  }\n  .order-xl-5 {\n    -ms-flex-order: 5 !important;\n    order: 5 !important;\n  }\n  .order-xl-last {\n    -ms-flex-order: 6 !important;\n    order: 6 !important;\n  }\n  .m-xl-0 {\n    margin: 0 !important;\n  }\n  .m-xl-1 {\n    margin: 0.25rem !important;\n  }\n  .m-xl-2 {\n    margin: 0.5rem !important;\n  }\n  .m-xl-3 {\n    margin: 1rem !important;\n  }\n  .m-xl-4 {\n    margin: 1.5rem !important;\n  }\n  .m-xl-5 {\n    margin: 3rem !important;\n  }\n  .m-xl-auto {\n    margin: auto !important;\n  }\n  .mx-xl-0 {\n    margin-right: 0 !important;\n    margin-left: 0 !important;\n  }\n  .mx-xl-1 {\n    margin-right: 0.25rem !important;\n    margin-left: 0.25rem !important;\n  }\n  .mx-xl-2 {\n    margin-right: 0.5rem !important;\n    margin-left: 0.5rem !important;\n  }\n  .mx-xl-3 {\n    margin-right: 1rem !important;\n    margin-left: 1rem !important;\n  }\n  .mx-xl-4 {\n    margin-right: 1.5rem !important;\n    margin-left: 1.5rem !important;\n  }\n  .mx-xl-5 {\n    margin-right: 3rem !important;\n    margin-left: 3rem !important;\n  }\n  .mx-xl-auto {\n    margin-right: auto !important;\n    margin-left: auto !important;\n  }\n  .my-xl-0 {\n    margin-top: 0 !important;\n    margin-bottom: 0 !important;\n  }\n  .my-xl-1 {\n    margin-top: 0.25rem !important;\n    margin-bottom: 0.25rem !important;\n  }\n  .my-xl-2 {\n    margin-top: 0.5rem !important;\n    margin-bottom: 0.5rem !important;\n  }\n  .my-xl-3 {\n    margin-top: 1rem !important;\n    margin-bottom: 1rem !important;\n  }\n  .my-xl-4 {\n    margin-top: 1.5rem !important;\n    margin-bottom: 1.5rem !important;\n  }\n  .my-xl-5 {\n    margin-top: 3rem !important;\n    margin-bottom: 3rem !important;\n  }\n  .my-xl-auto {\n    margin-top: auto !important;\n    margin-bottom: auto !important;\n  }\n  .mt-xl-0 {\n    margin-top: 0 !important;\n  }\n  .mt-xl-1 {\n    margin-top: 0.25rem !important;\n  }\n  .mt-xl-2 {\n    margin-top: 0.5rem !important;\n  }\n  .mt-xl-3 {\n    margin-top: 1rem !important;\n  }\n  .mt-xl-4 {\n    margin-top: 1.5rem !important;\n  }\n  .mt-xl-5 {\n    margin-top: 3rem !important;\n  }\n  .mt-xl-auto {\n    margin-top: auto !important;\n  }\n  .me-xl-0 {\n    margin-right: 0 !important;\n  }\n  .me-xl-1 {\n    margin-right: 0.25rem !important;\n  }\n  .me-xl-2 {\n    margin-right: 0.5rem !important;\n  }\n  .me-xl-3 {\n    margin-right: 1rem !important;\n  }\n  .me-xl-4 {\n    margin-right: 1.5rem !important;\n  }\n  .me-xl-5 {\n    margin-right: 3rem !important;\n  }\n  .me-xl-auto {\n    margin-right: auto !important;\n  }\n  .mb-xl-0 {\n    margin-bottom: 0 !important;\n  }\n  .mb-xl-1 {\n    margin-bottom: 0.25rem !important;\n  }\n  .mb-xl-2 {\n    margin-bottom: 0.5rem !important;\n  }\n  .mb-xl-3 {\n    margin-bottom: 1rem !important;\n  }\n  .mb-xl-4 {\n    margin-bottom: 1.5rem !important;\n  }\n  .mb-xl-5 {\n    margin-bottom: 3rem !important;\n  }\n  .mb-xl-auto {\n    margin-bottom: auto !important;\n  }\n  .ms-xl-0 {\n    margin-left: 0 !important;\n  }\n  .ms-xl-1 {\n    margin-left: 0.25rem !important;\n  }\n  .ms-xl-2 {\n    margin-left: 0.5rem !important;\n  }\n  .ms-xl-3 {\n    margin-left: 1rem !important;\n  }\n  .ms-xl-4 {\n    margin-left: 1.5rem !important;\n  }\n  .ms-xl-5 {\n    margin-left: 3rem !important;\n  }\n  .ms-xl-auto {\n    margin-left: auto !important;\n  }\n  .p-xl-0 {\n    padding: 0 !important;\n  }\n  .p-xl-1 {\n    padding: 0.25rem !important;\n  }\n  .p-xl-2 {\n    padding: 0.5rem !important;\n  }\n  .p-xl-3 {\n    padding: 1rem !important;\n  }\n  .p-xl-4 {\n    padding: 1.5rem !important;\n  }\n  .p-xl-5 {\n    padding: 3rem !important;\n  }\n  .px-xl-0 {\n    padding-right: 0 !important;\n    padding-left: 0 !important;\n  }\n  .px-xl-1 {\n    padding-right: 0.25rem !important;\n    padding-left: 0.25rem !important;\n  }\n  .px-xl-2 {\n    padding-right: 0.5rem !important;\n    padding-left: 0.5rem !important;\n  }\n  .px-xl-3 {\n    padding-right: 1rem !important;\n    padding-left: 1rem !important;\n  }\n  .px-xl-4 {\n    padding-right: 1.5rem !important;\n    padding-left: 1.5rem !important;\n  }\n  .px-xl-5 {\n    padding-right: 3rem !important;\n    padding-left: 3rem !important;\n  }\n  .py-xl-0 {\n    padding-top: 0 !important;\n    padding-bottom: 0 !important;\n  }\n  .py-xl-1 {\n    padding-top: 0.25rem !important;\n    padding-bottom: 0.25rem !important;\n  }\n  .py-xl-2 {\n    padding-top: 0.5rem !important;\n    padding-bottom: 0.5rem !important;\n  }\n  .py-xl-3 {\n    padding-top: 1rem !important;\n    padding-bottom: 1rem !important;\n  }\n  .py-xl-4 {\n    padding-top: 1.5rem !important;\n    padding-bottom: 1.5rem !important;\n  }\n  .py-xl-5 {\n    padding-top: 3rem !important;\n    padding-bottom: 3rem !important;\n  }\n  .pt-xl-0 {\n    padding-top: 0 !important;\n  }\n  .pt-xl-1 {\n    padding-top: 0.25rem !important;\n  }\n  .pt-xl-2 {\n    padding-top: 0.5rem !important;\n  }\n  .pt-xl-3 {\n    padding-top: 1rem !important;\n  }\n  .pt-xl-4 {\n    padding-top: 1.5rem !important;\n  }\n  .pt-xl-5 {\n    padding-top: 3rem !important;\n  }\n  .pe-xl-0 {\n    padding-right: 0 !important;\n  }\n  .pe-xl-1 {\n    padding-right: 0.25rem !important;\n  }\n  .pe-xl-2 {\n    padding-right: 0.5rem !important;\n  }\n  .pe-xl-3 {\n    padding-right: 1rem !important;\n  }\n  .pe-xl-4 {\n    padding-right: 1.5rem !important;\n  }\n  .pe-xl-5 {\n    padding-right: 3rem !important;\n  }\n  .pb-xl-0 {\n    padding-bottom: 0 !important;\n  }\n  .pb-xl-1 {\n    padding-bottom: 0.25rem !important;\n  }\n  .pb-xl-2 {\n    padding-bottom: 0.5rem !important;\n  }\n  .pb-xl-3 {\n    padding-bottom: 1rem !important;\n  }\n  .pb-xl-4 {\n    padding-bottom: 1.5rem !important;\n  }\n  .pb-xl-5 {\n    padding-bottom: 3rem !important;\n  }\n  .ps-xl-0 {\n    padding-left: 0 !important;\n  }\n  .ps-xl-1 {\n    padding-left: 0.25rem !important;\n  }\n  .ps-xl-2 {\n    padding-left: 0.5rem !important;\n  }\n  .ps-xl-3 {\n    padding-left: 1rem !important;\n  }\n  .ps-xl-4 {\n    padding-left: 1.5rem !important;\n  }\n  .ps-xl-5 {\n    padding-left: 3rem !important;\n  }\n  .text-xl-start {\n    text-align: left !important;\n  }\n  .text-xl-end {\n    text-align: right !important;\n  }\n  .text-xl-center {\n    text-align: center !important;\n  }\n}\n\n@media (min-width: 1400px) {\n  .float-xxl-start {\n    float: left !important;\n  }\n  .float-xxl-end {\n    float: right !important;\n  }\n  .float-xxl-none {\n    float: none !important;\n  }\n  .d-xxl-inline {\n    display: inline !important;\n  }\n  .d-xxl-inline-block {\n    display: inline-block !important;\n  }\n  .d-xxl-block {\n    display: block !important;\n  }\n  .d-xxl-grid {\n    display: grid !important;\n  }\n  .d-xxl-table {\n    display: table !important;\n  }\n  .d-xxl-table-row {\n    display: table-row !important;\n  }\n  .d-xxl-table-cell {\n    display: table-cell !important;\n  }\n  .d-xxl-flex {\n    display: -ms-flexbox !important;\n    display: flex !important;\n  }\n  .d-xxl-inline-flex {\n    display: -ms-inline-flexbox !important;\n    display: inline-flex !important;\n  }\n  .d-xxl-none {\n    display: none !important;\n  }\n  .flex-xxl-fill {\n    -ms-flex: 1 1 auto !important;\n    flex: 1 1 auto !important;\n  }\n  .flex-xxl-row {\n    -ms-flex-direction: row !important;\n    flex-direction: row !important;\n  }\n  .flex-xxl-column {\n    -ms-flex-direction: column !important;\n    flex-direction: column !important;\n  }\n  .flex-xxl-row-reverse {\n    -ms-flex-direction: row-reverse !important;\n    flex-direction: row-reverse !important;\n  }\n  .flex-xxl-column-reverse {\n    -ms-flex-direction: column-reverse !important;\n    flex-direction: column-reverse !important;\n  }\n  .flex-xxl-grow-0 {\n    -ms-flex-positive: 0 !important;\n    flex-grow: 0 !important;\n  }\n  .flex-xxl-grow-1 {\n    -ms-flex-positive: 1 !important;\n    flex-grow: 1 !important;\n  }\n  .flex-xxl-shrink-0 {\n    -ms-flex-negative: 0 !important;\n    flex-shrink: 0 !important;\n  }\n  .flex-xxl-shrink-1 {\n    -ms-flex-negative: 1 !important;\n    flex-shrink: 1 !important;\n  }\n  .flex-xxl-wrap {\n    -ms-flex-wrap: wrap !important;\n    flex-wrap: wrap !important;\n  }\n  .flex-xxl-nowrap {\n    -ms-flex-wrap: nowrap !important;\n    flex-wrap: nowrap !important;\n  }\n  .flex-xxl-wrap-reverse {\n    -ms-flex-wrap: wrap-reverse !important;\n    flex-wrap: wrap-reverse !important;\n  }\n  .gap-xxl-0 {\n    gap: 0 !important;\n  }\n  .gap-xxl-1 {\n    gap: 0.25rem !important;\n  }\n  .gap-xxl-2 {\n    gap: 0.5rem !important;\n  }\n  .gap-xxl-3 {\n    gap: 1rem !important;\n  }\n  .gap-xxl-4 {\n    gap: 1.5rem !important;\n  }\n  .gap-xxl-5 {\n    gap: 3rem !important;\n  }\n  .justify-content-xxl-start {\n    -ms-flex-pack: start !important;\n    justify-content: flex-start !important;\n  }\n  .justify-content-xxl-end {\n    -ms-flex-pack: end !important;\n    justify-content: flex-end !important;\n  }\n  .justify-content-xxl-center {\n    -ms-flex-pack: center !important;\n    justify-content: center !important;\n  }\n  .justify-content-xxl-between {\n    -ms-flex-pack: justify !important;\n    justify-content: space-between !important;\n  }\n  .justify-content-xxl-around {\n    -ms-flex-pack: distribute !important;\n    justify-content: space-around !important;\n  }\n  .justify-content-xxl-evenly {\n    -ms-flex-pack: space-evenly !important;\n    justify-content: space-evenly !important;\n  }\n  .align-items-xxl-start {\n    -ms-flex-align: start !important;\n    align-items: flex-start !important;\n  }\n  .align-items-xxl-end {\n    -ms-flex-align: end !important;\n    align-items: flex-end !important;\n  }\n  .align-items-xxl-center {\n    -ms-flex-align: center !important;\n    align-items: center !important;\n  }\n  .align-items-xxl-baseline {\n    -ms-flex-align: baseline !important;\n    align-items: baseline !important;\n  }\n  .align-items-xxl-stretch {\n    -ms-flex-align: stretch !important;\n    align-items: stretch !important;\n  }\n  .align-content-xxl-start {\n    -ms-flex-line-pack: start !important;\n    align-content: flex-start !important;\n  }\n  .align-content-xxl-end {\n    -ms-flex-line-pack: end !important;\n    align-content: flex-end !important;\n  }\n  .align-content-xxl-center {\n    -ms-flex-line-pack: center !important;\n    align-content: center !important;\n  }\n  .align-content-xxl-between {\n    -ms-flex-line-pack: justify !important;\n    align-content: space-between !important;\n  }\n  .align-content-xxl-around {\n    -ms-flex-line-pack: distribute !important;\n    align-content: space-around !important;\n  }\n  .align-content-xxl-stretch {\n    -ms-flex-line-pack: stretch !important;\n    align-content: stretch !important;\n  }\n  .align-self-xxl-auto {\n    -ms-flex-item-align: auto !important;\n    align-self: auto !important;\n  }\n  .align-self-xxl-start {\n    -ms-flex-item-align: start !important;\n    align-self: flex-start !important;\n  }\n  .align-self-xxl-end {\n    -ms-flex-item-align: end !important;\n    align-self: flex-end !important;\n  }\n  .align-self-xxl-center {\n    -ms-flex-item-align: center !important;\n    align-self: center !important;\n  }\n  .align-self-xxl-baseline {\n    -ms-flex-item-align: baseline !important;\n    align-self: baseline !important;\n  }\n  .align-self-xxl-stretch {\n    -ms-flex-item-align: stretch !important;\n    align-self: stretch !important;\n  }\n  .order-xxl-first {\n    -ms-flex-order: -1 !important;\n    order: -1 !important;\n  }\n  .order-xxl-0 {\n    -ms-flex-order: 0 !important;\n    order: 0 !important;\n  }\n  .order-xxl-1 {\n    -ms-flex-order: 1 !important;\n    order: 1 !important;\n  }\n  .order-xxl-2 {\n    -ms-flex-order: 2 !important;\n    order: 2 !important;\n  }\n  .order-xxl-3 {\n    -ms-flex-order: 3 !important;\n    order: 3 !important;\n  }\n  .order-xxl-4 {\n    -ms-flex-order: 4 !important;\n    order: 4 !important;\n  }\n  .order-xxl-5 {\n    -ms-flex-order: 5 !important;\n    order: 5 !important;\n  }\n  .order-xxl-last {\n    -ms-flex-order: 6 !important;\n    order: 6 !important;\n  }\n  .m-xxl-0 {\n    margin: 0 !important;\n  }\n  .m-xxl-1 {\n    margin: 0.25rem !important;\n  }\n  .m-xxl-2 {\n    margin: 0.5rem !important;\n  }\n  .m-xxl-3 {\n    margin: 1rem !important;\n  }\n  .m-xxl-4 {\n    margin: 1.5rem !important;\n  }\n  .m-xxl-5 {\n    margin: 3rem !important;\n  }\n  .m-xxl-auto {\n    margin: auto !important;\n  }\n  .mx-xxl-0 {\n    margin-right: 0 !important;\n    margin-left: 0 !important;\n  }\n  .mx-xxl-1 {\n    margin-right: 0.25rem !important;\n    margin-left: 0.25rem !important;\n  }\n  .mx-xxl-2 {\n    margin-right: 0.5rem !important;\n    margin-left: 0.5rem !important;\n  }\n  .mx-xxl-3 {\n    margin-right: 1rem !important;\n    margin-left: 1rem !important;\n  }\n  .mx-xxl-4 {\n    margin-right: 1.5rem !important;\n    margin-left: 1.5rem !important;\n  }\n  .mx-xxl-5 {\n    margin-right: 3rem !important;\n    margin-left: 3rem !important;\n  }\n  .mx-xxl-auto {\n    margin-right: auto !important;\n    margin-left: auto !important;\n  }\n  .my-xxl-0 {\n    margin-top: 0 !important;\n    margin-bottom: 0 !important;\n  }\n  .my-xxl-1 {\n    margin-top: 0.25rem !important;\n    margin-bottom: 0.25rem !important;\n  }\n  .my-xxl-2 {\n    margin-top: 0.5rem !important;\n    margin-bottom: 0.5rem !important;\n  }\n  .my-xxl-3 {\n    margin-top: 1rem !important;\n    margin-bottom: 1rem !important;\n  }\n  .my-xxl-4 {\n    margin-top: 1.5rem !important;\n    margin-bottom: 1.5rem !important;\n  }\n  .my-xxl-5 {\n    margin-top: 3rem !important;\n    margin-bottom: 3rem !important;\n  }\n  .my-xxl-auto {\n    margin-top: auto !important;\n    margin-bottom: auto !important;\n  }\n  .mt-xxl-0 {\n    margin-top: 0 !important;\n  }\n  .mt-xxl-1 {\n    margin-top: 0.25rem !important;\n  }\n  .mt-xxl-2 {\n    margin-top: 0.5rem !important;\n  }\n  .mt-xxl-3 {\n    margin-top: 1rem !important;\n  }\n  .mt-xxl-4 {\n    margin-top: 1.5rem !important;\n  }\n  .mt-xxl-5 {\n    margin-top: 3rem !important;\n  }\n  .mt-xxl-auto {\n    margin-top: auto !important;\n  }\n  .me-xxl-0 {\n    margin-right: 0 !important;\n  }\n  .me-xxl-1 {\n    margin-right: 0.25rem !important;\n  }\n  .me-xxl-2 {\n    margin-right: 0.5rem !important;\n  }\n  .me-xxl-3 {\n    margin-right: 1rem !important;\n  }\n  .me-xxl-4 {\n    margin-right: 1.5rem !important;\n  }\n  .me-xxl-5 {\n    margin-right: 3rem !important;\n  }\n  .me-xxl-auto {\n    margin-right: auto !important;\n  }\n  .mb-xxl-0 {\n    margin-bottom: 0 !important;\n  }\n  .mb-xxl-1 {\n    margin-bottom: 0.25rem !important;\n  }\n  .mb-xxl-2 {\n    margin-bottom: 0.5rem !important;\n  }\n  .mb-xxl-3 {\n    margin-bottom: 1rem !important;\n  }\n  .mb-xxl-4 {\n    margin-bottom: 1.5rem !important;\n  }\n  .mb-xxl-5 {\n    margin-bottom: 3rem !important;\n  }\n  .mb-xxl-auto {\n    margin-bottom: auto !important;\n  }\n  .ms-xxl-0 {\n    margin-left: 0 !important;\n  }\n  .ms-xxl-1 {\n    margin-left: 0.25rem !important;\n  }\n  .ms-xxl-2 {\n    margin-left: 0.5rem !important;\n  }\n  .ms-xxl-3 {\n    margin-left: 1rem !important;\n  }\n  .ms-xxl-4 {\n    margin-left: 1.5rem !important;\n  }\n  .ms-xxl-5 {\n    margin-left: 3rem !important;\n  }\n  .ms-xxl-auto {\n    margin-left: auto !important;\n  }\n  .p-xxl-0 {\n    padding: 0 !important;\n  }\n  .p-xxl-1 {\n    padding: 0.25rem !important;\n  }\n  .p-xxl-2 {\n    padding: 0.5rem !important;\n  }\n  .p-xxl-3 {\n    padding: 1rem !important;\n  }\n  .p-xxl-4 {\n    padding: 1.5rem !important;\n  }\n  .p-xxl-5 {\n    padding: 3rem !important;\n  }\n  .px-xxl-0 {\n    padding-right: 0 !important;\n    padding-left: 0 !important;\n  }\n  .px-xxl-1 {\n    padding-right: 0.25rem !important;\n    padding-left: 0.25rem !important;\n  }\n  .px-xxl-2 {\n    padding-right: 0.5rem !important;\n    padding-left: 0.5rem !important;\n  }\n  .px-xxl-3 {\n    padding-right: 1rem !important;\n    padding-left: 1rem !important;\n  }\n  .px-xxl-4 {\n    padding-right: 1.5rem !important;\n    padding-left: 1.5rem !important;\n  }\n  .px-xxl-5 {\n    padding-right: 3rem !important;\n    padding-left: 3rem !important;\n  }\n  .py-xxl-0 {\n    padding-top: 0 !important;\n    padding-bottom: 0 !important;\n  }\n  .py-xxl-1 {\n    padding-top: 0.25rem !important;\n    padding-bottom: 0.25rem !important;\n  }\n  .py-xxl-2 {\n    padding-top: 0.5rem !important;\n    padding-bottom: 0.5rem !important;\n  }\n  .py-xxl-3 {\n    padding-top: 1rem !important;\n    padding-bottom: 1rem !important;\n  }\n  .py-xxl-4 {\n    padding-top: 1.5rem !important;\n    padding-bottom: 1.5rem !important;\n  }\n  .py-xxl-5 {\n    padding-top: 3rem !important;\n    padding-bottom: 3rem !important;\n  }\n  .pt-xxl-0 {\n    padding-top: 0 !important;\n  }\n  .pt-xxl-1 {\n    padding-top: 0.25rem !important;\n  }\n  .pt-xxl-2 {\n    padding-top: 0.5rem !important;\n  }\n  .pt-xxl-3 {\n    padding-top: 1rem !important;\n  }\n  .pt-xxl-4 {\n    padding-top: 1.5rem !important;\n  }\n  .pt-xxl-5 {\n    padding-top: 3rem !important;\n  }\n  .pe-xxl-0 {\n    padding-right: 0 !important;\n  }\n  .pe-xxl-1 {\n    padding-right: 0.25rem !important;\n  }\n  .pe-xxl-2 {\n    padding-right: 0.5rem !important;\n  }\n  .pe-xxl-3 {\n    padding-right: 1rem !important;\n  }\n  .pe-xxl-4 {\n    padding-right: 1.5rem !important;\n  }\n  .pe-xxl-5 {\n    padding-right: 3rem !important;\n  }\n  .pb-xxl-0 {\n    padding-bottom: 0 !important;\n  }\n  .pb-xxl-1 {\n    padding-bottom: 0.25rem !important;\n  }\n  .pb-xxl-2 {\n    padding-bottom: 0.5rem !important;\n  }\n  .pb-xxl-3 {\n    padding-bottom: 1rem !important;\n  }\n  .pb-xxl-4 {\n    padding-bottom: 1.5rem !important;\n  }\n  .pb-xxl-5 {\n    padding-bottom: 3rem !important;\n  }\n  .ps-xxl-0 {\n    padding-left: 0 !important;\n  }\n  .ps-xxl-1 {\n    padding-left: 0.25rem !important;\n  }\n  .ps-xxl-2 {\n    padding-left: 0.5rem !important;\n  }\n  .ps-xxl-3 {\n    padding-left: 1rem !important;\n  }\n  .ps-xxl-4 {\n    padding-left: 1.5rem !important;\n  }\n  .ps-xxl-5 {\n    padding-left: 3rem !important;\n  }\n  .text-xxl-start {\n    text-align: left !important;\n  }\n  .text-xxl-end {\n    text-align: right !important;\n  }\n  .text-xxl-center {\n    text-align: center !important;\n  }\n}\n\n@media (min-width: 1200px) {\n  .fs-1 {\n    font-size: 2.5rem !important;\n  }\n  .fs-2 {\n    font-size: 2rem !important;\n  }\n  .fs-3 {\n    font-size: 1.75rem !important;\n  }\n  .fs-4 {\n    font-size: 1.5rem !important;\n  }\n}\n\n@media print {\n  .d-print-inline {\n    display: inline !important;\n  }\n  .d-print-inline-block {\n    display: inline-block !important;\n  }\n  .d-print-block {\n    display: block !important;\n  }\n  .d-print-grid {\n    display: grid !important;\n  }\n  .d-print-table {\n    display: table !important;\n  }\n  .d-print-table-row {\n    display: table-row !important;\n  }\n  .d-print-table-cell {\n    display: table-cell !important;\n  }\n  .d-print-flex {\n    display: -ms-flexbox !important;\n    display: flex !important;\n  }\n  .d-print-inline-flex {\n    display: -ms-inline-flexbox !important;\n    display: inline-flex !important;\n  }\n  .d-print-none {\n    display: none !important;\n  }\n}\n\n.btn:focus, .btn:active, .btn:active:focus, .btn.active:focus {\n  outline: none;\n}\n\n.btn-secondary {\n  background-color: #fff;\n  border-color: #ccc;\n  color: #17141f;\n}\n\n.btn-secondary:hover {\n  background-color: #ededed;\n  border-color: #adb5bd;\n  color: #17141f;\n}\n\n.btn-secondary.disabled {\n  background-color: #fff;\n  border-color: #cfcfcf;\n  color: #23202a;\n}\n\n.btn-warning {\n  color: #fff;\n}\n\n.btn-primary:focus {\n  box-shadow: 0 0 5px #6a46a1;\n}\n\n.btn-secondary:focus {\n  box-shadow: 0 0 5px #cbc8d0;\n}\n\n.btn-success:focus {\n  box-shadow: 0 0 5px #2bc066;\n}\n\n.btn-info:focus {\n  box-shadow: 0 0 5px #1aa6e0;\n}\n\n.btn-warning:focus {\n  box-shadow: 0 0 5px #f1ac34;\n}\n\n.btn-danger:focus {\n  box-shadow: 0 0 5px #fc4d4d;\n}\n\n.btn.disabled:focus {\n  box-shadow: none;\n}\n\n.table .thead-dark th {\n  background-color: #a991d4;\n  border-color: rgba(0, 0, 0, 0.05);\n}\n\n.form-control:focus {\n  box-shadow: 0 0 5px rgba(100, 65, 164, 0.4);\n}\n\n.nav-tabs .nav-link,\n.nav-tabs .nav-link.active {\n  border-width: 0 0 1px;\n}\n\n.nav-tabs .nav-link:hover,\n.nav-tabs .nav-link.active,\n.nav-tabs .nav-link.active:hover,\n.nav-tabs .nav-link.active:focus {\n  border-bottom: 1px solid #593196;\n}\n\n.nav-tabs .nav-item + .nav-item {\n  margin-left: 0;\n}\n\n.breadcrumb-item.active {\n  color: #444;\n}\n\n.badge.bg-light {\n  color: #17141f;\n}\n\n.progress {\n  height: 8px;\n}\n\n.list-group-item {\n  color: rgba(255, 255, 255, 0.8);\n}\n\n.list-group-item.active, .list-group-item:hover, .list-group-item:focus {\n  color: #fff;\n}\n\n.list-group-item.active {\n  font-weight: 700;\n}\n\n.list-group-item.active:hover {\n  background-color: #2e283e;\n}\n\n.list-group-item.disabled:hover {\n  color: #5c507c;\n}\n"
  },
  {
    "path": "src/sourceDev.WebApp/SharedThemes/pulse/wwwroot/css/fontawesome-all.css",
    "content": "/*!\n * Font Awesome Free 5.0.8 by @fontawesome - https://fontawesome.com\n * License - https://fontawesome.com/license (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)\n */\n.fa,\n.fas,\n.far,\n.fal,\n.fab {\n  -moz-osx-font-smoothing: grayscale;\n  -webkit-font-smoothing: antialiased;\n  display: inline-block;\n  font-style: normal;\n  font-variant: normal;\n  text-rendering: auto;\n  line-height: 1; }\n\n.fa-lg {\n  font-size: 1.33333em;\n  line-height: 0.75em;\n  vertical-align: -.0667em; }\n\n.fa-xs {\n  font-size: .75em; }\n\n.fa-sm {\n  font-size: .875em; }\n\n.fa-1x {\n  font-size: 1em; }\n\n.fa-2x {\n  font-size: 2em; }\n\n.fa-3x {\n  font-size: 3em; }\n\n.fa-4x {\n  font-size: 4em; }\n\n.fa-5x {\n  font-size: 5em; }\n\n.fa-6x {\n  font-size: 6em; }\n\n.fa-7x {\n  font-size: 7em; }\n\n.fa-8x {\n  font-size: 8em; }\n\n.fa-9x {\n  font-size: 9em; }\n\n.fa-10x {\n  font-size: 10em; }\n\n.fa-fw {\n  text-align: center;\n  width: 1.25em; }\n\n.fa-ul {\n  list-style-type: none;\n  margin-left: 2.5em;\n  padding-left: 0; }\n  .fa-ul > li {\n    position: relative; }\n\n.fa-li {\n  left: -2em;\n  position: absolute;\n  text-align: center;\n  width: 2em;\n  line-height: inherit; }\n\n.fa-border {\n  border: solid 0.08em #eee;\n  border-radius: .1em;\n  padding: .2em .25em .15em; }\n\n.fa-pull-left {\n  float: left; }\n\n.fa-pull-right {\n  float: right; }\n\n.fa.fa-pull-left,\n.fas.fa-pull-left,\n.far.fa-pull-left,\n.fal.fa-pull-left,\n.fab.fa-pull-left {\n  margin-right: .3em; }\n\n.fa.fa-pull-right,\n.fas.fa-pull-right,\n.far.fa-pull-right,\n.fal.fa-pull-right,\n.fab.fa-pull-right {\n  margin-left: .3em; }\n\n.fa-spin {\n  -webkit-animation: fa-spin 2s infinite linear;\n          animation: fa-spin 2s infinite linear; }\n\n.fa-pulse {\n  -webkit-animation: fa-spin 1s infinite steps(8);\n          animation: fa-spin 1s infinite steps(8); }\n\n@-webkit-keyframes fa-spin {\n  0% {\n    -webkit-transform: rotate(0deg);\n            transform: rotate(0deg); }\n  100% {\n    -webkit-transform: rotate(360deg);\n            transform: rotate(360deg); } }\n\n@keyframes fa-spin {\n  0% {\n    -webkit-transform: rotate(0deg);\n            transform: rotate(0deg); }\n  100% {\n    -webkit-transform: rotate(360deg);\n            transform: rotate(360deg); } }\n\n.fa-rotate-90 {\n  -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)\";\n  -webkit-transform: rotate(90deg);\n          transform: rotate(90deg); }\n\n.fa-rotate-180 {\n  -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)\";\n  -webkit-transform: rotate(180deg);\n          transform: rotate(180deg); }\n\n.fa-rotate-270 {\n  -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)\";\n  -webkit-transform: rotate(270deg);\n          transform: rotate(270deg); }\n\n.fa-flip-horizontal {\n  -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)\";\n  -webkit-transform: scale(-1, 1);\n          transform: scale(-1, 1); }\n\n.fa-flip-vertical {\n  -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)\";\n  -webkit-transform: scale(1, -1);\n          transform: scale(1, -1); }\n\n.fa-flip-horizontal.fa-flip-vertical {\n  -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)\";\n  -webkit-transform: scale(-1, -1);\n          transform: scale(-1, -1); }\n\n:root .fa-rotate-90,\n:root .fa-rotate-180,\n:root .fa-rotate-270,\n:root .fa-flip-horizontal,\n:root .fa-flip-vertical {\n  -webkit-filter: none;\n          filter: none; }\n\n.fa-stack {\n  display: inline-block;\n  height: 2em;\n  line-height: 2em;\n  position: relative;\n  vertical-align: middle;\n  width: 2em; }\n\n.fa-stack-1x,\n.fa-stack-2x {\n  left: 0;\n  position: absolute;\n  text-align: center;\n  width: 100%; }\n\n.fa-stack-1x {\n  line-height: inherit; }\n\n.fa-stack-2x {\n  font-size: 2em; }\n\n.fa-inverse {\n  color: #fff; }\n\n/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen\nreaders do not read off random characters that represent icons */\n.fa-500px:before {\n  content: \"\\f26e\"; }\n\n.fa-accessible-icon:before {\n  content: \"\\f368\"; }\n\n.fa-accusoft:before {\n  content: \"\\f369\"; }\n\n.fa-address-book:before {\n  content: \"\\f2b9\"; }\n\n.fa-address-card:before {\n  content: \"\\f2bb\"; }\n\n.fa-adjust:before {\n  content: \"\\f042\"; }\n\n.fa-adn:before {\n  content: \"\\f170\"; }\n\n.fa-adversal:before {\n  content: \"\\f36a\"; }\n\n.fa-affiliatetheme:before {\n  content: \"\\f36b\"; }\n\n.fa-algolia:before {\n  content: \"\\f36c\"; }\n\n.fa-align-center:before {\n  content: \"\\f037\"; }\n\n.fa-align-justify:before {\n  content: \"\\f039\"; }\n\n.fa-align-left:before {\n  content: \"\\f036\"; }\n\n.fa-align-right:before {\n  content: \"\\f038\"; }\n\n.fa-amazon:before {\n  content: \"\\f270\"; }\n\n.fa-amazon-pay:before {\n  content: \"\\f42c\"; }\n\n.fa-ambulance:before {\n  content: \"\\f0f9\"; }\n\n.fa-american-sign-language-interpreting:before {\n  content: \"\\f2a3\"; }\n\n.fa-amilia:before {\n  content: \"\\f36d\"; }\n\n.fa-anchor:before {\n  content: \"\\f13d\"; }\n\n.fa-android:before {\n  content: \"\\f17b\"; }\n\n.fa-angellist:before {\n  content: \"\\f209\"; }\n\n.fa-angle-double-down:before {\n  content: \"\\f103\"; }\n\n.fa-angle-double-left:before {\n  content: \"\\f100\"; }\n\n.fa-angle-double-right:before {\n  content: \"\\f101\"; }\n\n.fa-angle-double-up:before {\n  content: \"\\f102\"; }\n\n.fa-angle-down:before {\n  content: \"\\f107\"; }\n\n.fa-angle-left:before {\n  content: \"\\f104\"; }\n\n.fa-angle-right:before {\n  content: \"\\f105\"; }\n\n.fa-angle-up:before {\n  content: \"\\f106\"; }\n\n.fa-angrycreative:before {\n  content: \"\\f36e\"; }\n\n.fa-angular:before {\n  content: \"\\f420\"; }\n\n.fa-app-store:before {\n  content: \"\\f36f\"; }\n\n.fa-app-store-ios:before {\n  content: \"\\f370\"; }\n\n.fa-apper:before {\n  content: \"\\f371\"; }\n\n.fa-apple:before {\n  content: \"\\f179\"; }\n\n.fa-apple-pay:before {\n  content: \"\\f415\"; }\n\n.fa-archive:before {\n  content: \"\\f187\"; }\n\n.fa-arrow-alt-circle-down:before {\n  content: \"\\f358\"; }\n\n.fa-arrow-alt-circle-left:before {\n  content: \"\\f359\"; }\n\n.fa-arrow-alt-circle-right:before {\n  content: \"\\f35a\"; }\n\n.fa-arrow-alt-circle-up:before {\n  content: \"\\f35b\"; }\n\n.fa-arrow-circle-down:before {\n  content: \"\\f0ab\"; }\n\n.fa-arrow-circle-left:before {\n  content: \"\\f0a8\"; }\n\n.fa-arrow-circle-right:before {\n  content: \"\\f0a9\"; }\n\n.fa-arrow-circle-up:before {\n  content: \"\\f0aa\"; }\n\n.fa-arrow-down:before {\n  content: \"\\f063\"; }\n\n.fa-arrow-left:before {\n  content: \"\\f060\"; }\n\n.fa-arrow-right:before {\n  content: \"\\f061\"; }\n\n.fa-arrow-up:before {\n  content: \"\\f062\"; }\n\n.fa-arrows-alt:before {\n  content: \"\\f0b2\"; }\n\n.fa-arrows-alt-h:before {\n  content: \"\\f337\"; }\n\n.fa-arrows-alt-v:before {\n  content: \"\\f338\"; }\n\n.fa-assistive-listening-systems:before {\n  content: \"\\f2a2\"; }\n\n.fa-asterisk:before {\n  content: \"\\f069\"; }\n\n.fa-asymmetrik:before {\n  content: \"\\f372\"; }\n\n.fa-at:before {\n  content: \"\\f1fa\"; }\n\n.fa-audible:before {\n  content: \"\\f373\"; }\n\n.fa-audio-description:before {\n  content: \"\\f29e\"; }\n\n.fa-autoprefixer:before {\n  content: \"\\f41c\"; }\n\n.fa-avianex:before {\n  content: \"\\f374\"; }\n\n.fa-aviato:before {\n  content: \"\\f421\"; }\n\n.fa-aws:before {\n  content: \"\\f375\"; }\n\n.fa-backward:before {\n  content: \"\\f04a\"; }\n\n.fa-balance-scale:before {\n  content: \"\\f24e\"; }\n\n.fa-ban:before {\n  content: \"\\f05e\"; }\n\n.fa-band-aid:before {\n  content: \"\\f462\"; }\n\n.fa-bandcamp:before {\n  content: \"\\f2d5\"; }\n\n.fa-barcode:before {\n  content: \"\\f02a\"; }\n\n.fa-bars:before {\n  content: \"\\f0c9\"; }\n\n.fa-baseball-ball:before {\n  content: \"\\f433\"; }\n\n.fa-basketball-ball:before {\n  content: \"\\f434\"; }\n\n.fa-bath:before {\n  content: \"\\f2cd\"; }\n\n.fa-battery-empty:before {\n  content: \"\\f244\"; }\n\n.fa-battery-full:before {\n  content: \"\\f240\"; }\n\n.fa-battery-half:before {\n  content: \"\\f242\"; }\n\n.fa-battery-quarter:before {\n  content: \"\\f243\"; }\n\n.fa-battery-three-quarters:before {\n  content: \"\\f241\"; }\n\n.fa-bed:before {\n  content: \"\\f236\"; }\n\n.fa-beer:before {\n  content: \"\\f0fc\"; }\n\n.fa-behance:before {\n  content: \"\\f1b4\"; }\n\n.fa-behance-square:before {\n  content: \"\\f1b5\"; }\n\n.fa-bell:before {\n  content: \"\\f0f3\"; }\n\n.fa-bell-slash:before {\n  content: \"\\f1f6\"; }\n\n.fa-bicycle:before {\n  content: \"\\f206\"; }\n\n.fa-bimobject:before {\n  content: \"\\f378\"; }\n\n.fa-binoculars:before {\n  content: \"\\f1e5\"; }\n\n.fa-birthday-cake:before {\n  content: \"\\f1fd\"; }\n\n.fa-bitbucket:before {\n  content: \"\\f171\"; }\n\n.fa-bitcoin:before {\n  content: \"\\f379\"; }\n\n.fa-bity:before {\n  content: \"\\f37a\"; }\n\n.fa-black-tie:before {\n  content: \"\\f27e\"; }\n\n.fa-blackberry:before {\n  content: \"\\f37b\"; }\n\n.fa-blind:before {\n  content: \"\\f29d\"; }\n\n.fa-blogger:before {\n  content: \"\\f37c\"; }\n\n.fa-blogger-b:before {\n  content: \"\\f37d\"; }\n\n.fa-bluetooth:before {\n  content: \"\\f293\"; }\n\n.fa-bluetooth-b:before {\n  content: \"\\f294\"; }\n\n.fa-bold:before {\n  content: \"\\f032\"; }\n\n.fa-bolt:before {\n  content: \"\\f0e7\"; }\n\n.fa-bomb:before {\n  content: \"\\f1e2\"; }\n\n.fa-book:before {\n  content: \"\\f02d\"; }\n\n.fa-bookmark:before {\n  content: \"\\f02e\"; }\n\n.fa-bowling-ball:before {\n  content: \"\\f436\"; }\n\n.fa-box:before {\n  content: \"\\f466\"; }\n\n.fa-boxes:before {\n  content: \"\\f468\"; }\n\n.fa-braille:before {\n  content: \"\\f2a1\"; }\n\n.fa-briefcase:before {\n  content: \"\\f0b1\"; }\n\n.fa-btc:before {\n  content: \"\\f15a\"; }\n\n.fa-bug:before {\n  content: \"\\f188\"; }\n\n.fa-building:before {\n  content: \"\\f1ad\"; }\n\n.fa-bullhorn:before {\n  content: \"\\f0a1\"; }\n\n.fa-bullseye:before {\n  content: \"\\f140\"; }\n\n.fa-buromobelexperte:before {\n  content: \"\\f37f\"; }\n\n.fa-bus:before {\n  content: \"\\f207\"; }\n\n.fa-buysellads:before {\n  content: \"\\f20d\"; }\n\n.fa-calculator:before {\n  content: \"\\f1ec\"; }\n\n.fa-calendar:before {\n  content: \"\\f133\"; }\n\n.fa-calendar-alt:before {\n  content: \"\\f073\"; }\n\n.fa-calendar-check:before {\n  content: \"\\f274\"; }\n\n.fa-calendar-minus:before {\n  content: \"\\f272\"; }\n\n.fa-calendar-plus:before {\n  content: \"\\f271\"; }\n\n.fa-calendar-times:before {\n  content: \"\\f273\"; }\n\n.fa-camera:before {\n  content: \"\\f030\"; }\n\n.fa-camera-retro:before {\n  content: \"\\f083\"; }\n\n.fa-car:before {\n  content: \"\\f1b9\"; }\n\n.fa-caret-down:before {\n  content: \"\\f0d7\"; }\n\n.fa-caret-left:before {\n  content: \"\\f0d9\"; }\n\n.fa-caret-right:before {\n  content: \"\\f0da\"; }\n\n.fa-caret-square-down:before {\n  content: \"\\f150\"; }\n\n.fa-caret-square-left:before {\n  content: \"\\f191\"; }\n\n.fa-caret-square-right:before {\n  content: \"\\f152\"; }\n\n.fa-caret-square-up:before {\n  content: \"\\f151\"; }\n\n.fa-caret-up:before {\n  content: \"\\f0d8\"; }\n\n.fa-cart-arrow-down:before {\n  content: \"\\f218\"; }\n\n.fa-cart-plus:before {\n  content: \"\\f217\"; }\n\n.fa-cc-amazon-pay:before {\n  content: \"\\f42d\"; }\n\n.fa-cc-amex:before {\n  content: \"\\f1f3\"; }\n\n.fa-cc-apple-pay:before {\n  content: \"\\f416\"; }\n\n.fa-cc-diners-club:before {\n  content: \"\\f24c\"; }\n\n.fa-cc-discover:before {\n  content: \"\\f1f2\"; }\n\n.fa-cc-jcb:before {\n  content: \"\\f24b\"; }\n\n.fa-cc-mastercard:before {\n  content: \"\\f1f1\"; }\n\n.fa-cc-paypal:before {\n  content: \"\\f1f4\"; }\n\n.fa-cc-stripe:before {\n  content: \"\\f1f5\"; }\n\n.fa-cc-visa:before {\n  content: \"\\f1f0\"; }\n\n.fa-centercode:before {\n  content: \"\\f380\"; }\n\n.fa-certificate:before {\n  content: \"\\f0a3\"; }\n\n.fa-chart-area:before {\n  content: \"\\f1fe\"; }\n\n.fa-chart-bar:before {\n  content: \"\\f080\"; }\n\n.fa-chart-line:before {\n  content: \"\\f201\"; }\n\n.fa-chart-pie:before {\n  content: \"\\f200\"; }\n\n.fa-check:before {\n  content: \"\\f00c\"; }\n\n.fa-check-circle:before {\n  content: \"\\f058\"; }\n\n.fa-check-square:before {\n  content: \"\\f14a\"; }\n\n.fa-chess:before {\n  content: \"\\f439\"; }\n\n.fa-chess-bishop:before {\n  content: \"\\f43a\"; }\n\n.fa-chess-board:before {\n  content: \"\\f43c\"; }\n\n.fa-chess-king:before {\n  content: \"\\f43f\"; }\n\n.fa-chess-knight:before {\n  content: \"\\f441\"; }\n\n.fa-chess-pawn:before {\n  content: \"\\f443\"; }\n\n.fa-chess-queen:before {\n  content: \"\\f445\"; }\n\n.fa-chess-rook:before {\n  content: \"\\f447\"; }\n\n.fa-chevron-circle-down:before {\n  content: \"\\f13a\"; }\n\n.fa-chevron-circle-left:before {\n  content: \"\\f137\"; }\n\n.fa-chevron-circle-right:before {\n  content: \"\\f138\"; }\n\n.fa-chevron-circle-up:before {\n  content: \"\\f139\"; }\n\n.fa-chevron-down:before {\n  content: \"\\f078\"; }\n\n.fa-chevron-left:before {\n  content: \"\\f053\"; }\n\n.fa-chevron-right:before {\n  content: \"\\f054\"; }\n\n.fa-chevron-up:before {\n  content: \"\\f077\"; }\n\n.fa-child:before {\n  content: \"\\f1ae\"; }\n\n.fa-chrome:before {\n  content: \"\\f268\"; }\n\n.fa-circle:before {\n  content: \"\\f111\"; }\n\n.fa-circle-notch:before {\n  content: \"\\f1ce\"; }\n\n.fa-clipboard:before {\n  content: \"\\f328\"; }\n\n.fa-clipboard-check:before {\n  content: \"\\f46c\"; }\n\n.fa-clipboard-list:before {\n  content: \"\\f46d\"; }\n\n.fa-clock:before {\n  content: \"\\f017\"; }\n\n.fa-clone:before {\n  content: \"\\f24d\"; }\n\n.fa-closed-captioning:before {\n  content: \"\\f20a\"; }\n\n.fa-cloud:before {\n  content: \"\\f0c2\"; }\n\n.fa-cloud-download-alt:before {\n  content: \"\\f381\"; }\n\n.fa-cloud-upload-alt:before {\n  content: \"\\f382\"; }\n\n.fa-cloudscale:before {\n  content: \"\\f383\"; }\n\n.fa-cloudsmith:before {\n  content: \"\\f384\"; }\n\n.fa-cloudversify:before {\n  content: \"\\f385\"; }\n\n.fa-code:before {\n  content: \"\\f121\"; }\n\n.fa-code-branch:before {\n  content: \"\\f126\"; }\n\n.fa-codepen:before {\n  content: \"\\f1cb\"; }\n\n.fa-codiepie:before {\n  content: \"\\f284\"; }\n\n.fa-coffee:before {\n  content: \"\\f0f4\"; }\n\n.fa-cog:before {\n  content: \"\\f013\"; }\n\n.fa-cogs:before {\n  content: \"\\f085\"; }\n\n.fa-columns:before {\n  content: \"\\f0db\"; }\n\n.fa-comment:before {\n  content: \"\\f075\"; }\n\n.fa-comment-alt:before {\n  content: \"\\f27a\"; }\n\n.fa-comments:before {\n  content: \"\\f086\"; }\n\n.fa-compass:before {\n  content: \"\\f14e\"; }\n\n.fa-compress:before {\n  content: \"\\f066\"; }\n\n.fa-connectdevelop:before {\n  content: \"\\f20e\"; }\n\n.fa-contao:before {\n  content: \"\\f26d\"; }\n\n.fa-copy:before {\n  content: \"\\f0c5\"; }\n\n.fa-copyright:before {\n  content: \"\\f1f9\"; }\n\n.fa-cpanel:before {\n  content: \"\\f388\"; }\n\n.fa-creative-commons:before {\n  content: \"\\f25e\"; }\n\n.fa-credit-card:before {\n  content: \"\\f09d\"; }\n\n.fa-crop:before {\n  content: \"\\f125\"; }\n\n.fa-crosshairs:before {\n  content: \"\\f05b\"; }\n\n.fa-css3:before {\n  content: \"\\f13c\"; }\n\n.fa-css3-alt:before {\n  content: \"\\f38b\"; }\n\n.fa-cube:before {\n  content: \"\\f1b2\"; }\n\n.fa-cubes:before {\n  content: \"\\f1b3\"; }\n\n.fa-cut:before {\n  content: \"\\f0c4\"; }\n\n.fa-cuttlefish:before {\n  content: \"\\f38c\"; }\n\n.fa-d-and-d:before {\n  content: \"\\f38d\"; }\n\n.fa-dashcube:before {\n  content: \"\\f210\"; }\n\n.fa-database:before {\n  content: \"\\f1c0\"; }\n\n.fa-deaf:before {\n  content: \"\\f2a4\"; }\n\n.fa-delicious:before {\n  content: \"\\f1a5\"; }\n\n.fa-deploydog:before {\n  content: \"\\f38e\"; }\n\n.fa-deskpro:before {\n  content: \"\\f38f\"; }\n\n.fa-desktop:before {\n  content: \"\\f108\"; }\n\n.fa-deviantart:before {\n  content: \"\\f1bd\"; }\n\n.fa-digg:before {\n  content: \"\\f1a6\"; }\n\n.fa-digital-ocean:before {\n  content: \"\\f391\"; }\n\n.fa-discord:before {\n  content: \"\\f392\"; }\n\n.fa-discourse:before {\n  content: \"\\f393\"; }\n\n.fa-dna:before {\n  content: \"\\f471\"; }\n\n.fa-dochub:before {\n  content: \"\\f394\"; }\n\n.fa-docker:before {\n  content: \"\\f395\"; }\n\n.fa-dollar-sign:before {\n  content: \"\\f155\"; }\n\n.fa-dolly:before {\n  content: \"\\f472\"; }\n\n.fa-dolly-flatbed:before {\n  content: \"\\f474\"; }\n\n.fa-dot-circle:before {\n  content: \"\\f192\"; }\n\n.fa-download:before {\n  content: \"\\f019\"; }\n\n.fa-draft2digital:before {\n  content: \"\\f396\"; }\n\n.fa-dribbble:before {\n  content: \"\\f17d\"; }\n\n.fa-dribbble-square:before {\n  content: \"\\f397\"; }\n\n.fa-dropbox:before {\n  content: \"\\f16b\"; }\n\n.fa-drupal:before {\n  content: \"\\f1a9\"; }\n\n.fa-dyalog:before {\n  content: \"\\f399\"; }\n\n.fa-earlybirds:before {\n  content: \"\\f39a\"; }\n\n.fa-edge:before {\n  content: \"\\f282\"; }\n\n.fa-edit:before {\n  content: \"\\f044\"; }\n\n.fa-eject:before {\n  content: \"\\f052\"; }\n\n.fa-elementor:before {\n  content: \"\\f430\"; }\n\n.fa-ellipsis-h:before {\n  content: \"\\f141\"; }\n\n.fa-ellipsis-v:before {\n  content: \"\\f142\"; }\n\n.fa-ember:before {\n  content: \"\\f423\"; }\n\n.fa-empire:before {\n  content: \"\\f1d1\"; }\n\n.fa-envelope:before {\n  content: \"\\f0e0\"; }\n\n.fa-envelope-open:before {\n  content: \"\\f2b6\"; }\n\n.fa-envelope-square:before {\n  content: \"\\f199\"; }\n\n.fa-envira:before {\n  content: \"\\f299\"; }\n\n.fa-eraser:before {\n  content: \"\\f12d\"; }\n\n.fa-erlang:before {\n  content: \"\\f39d\"; }\n\n.fa-ethereum:before {\n  content: \"\\f42e\"; }\n\n.fa-etsy:before {\n  content: \"\\f2d7\"; }\n\n.fa-euro-sign:before {\n  content: \"\\f153\"; }\n\n.fa-exchange-alt:before {\n  content: \"\\f362\"; }\n\n.fa-exclamation:before {\n  content: \"\\f12a\"; }\n\n.fa-exclamation-circle:before {\n  content: \"\\f06a\"; }\n\n.fa-exclamation-triangle:before {\n  content: \"\\f071\"; }\n\n.fa-expand:before {\n  content: \"\\f065\"; }\n\n.fa-expand-arrows-alt:before {\n  content: \"\\f31e\"; }\n\n.fa-expeditedssl:before {\n  content: \"\\f23e\"; }\n\n.fa-external-link-alt:before {\n  content: \"\\f35d\"; }\n\n.fa-external-link-square-alt:before {\n  content: \"\\f360\"; }\n\n.fa-eye:before {\n  content: \"\\f06e\"; }\n\n.fa-eye-dropper:before {\n  content: \"\\f1fb\"; }\n\n.fa-eye-slash:before {\n  content: \"\\f070\"; }\n\n.fa-facebook:before {\n  content: \"\\f09a\"; }\n\n.fa-facebook-f:before {\n  content: \"\\f39e\"; }\n\n.fa-facebook-messenger:before {\n  content: \"\\f39f\"; }\n\n.fa-facebook-square:before {\n  content: \"\\f082\"; }\n\n.fa-fast-backward:before {\n  content: \"\\f049\"; }\n\n.fa-fast-forward:before {\n  content: \"\\f050\"; }\n\n.fa-fax:before {\n  content: \"\\f1ac\"; }\n\n.fa-female:before {\n  content: \"\\f182\"; }\n\n.fa-fighter-jet:before {\n  content: \"\\f0fb\"; }\n\n.fa-file:before {\n  content: \"\\f15b\"; }\n\n.fa-file-alt:before {\n  content: \"\\f15c\"; }\n\n.fa-file-archive:before {\n  content: \"\\f1c6\"; }\n\n.fa-file-audio:before {\n  content: \"\\f1c7\"; }\n\n.fa-file-code:before {\n  content: \"\\f1c9\"; }\n\n.fa-file-excel:before {\n  content: \"\\f1c3\"; }\n\n.fa-file-image:before {\n  content: \"\\f1c5\"; }\n\n.fa-file-pdf:before {\n  content: \"\\f1c1\"; }\n\n.fa-file-powerpoint:before {\n  content: \"\\f1c4\"; }\n\n.fa-file-video:before {\n  content: \"\\f1c8\"; }\n\n.fa-file-word:before {\n  content: \"\\f1c2\"; }\n\n.fa-film:before {\n  content: \"\\f008\"; }\n\n.fa-filter:before {\n  content: \"\\f0b0\"; }\n\n.fa-fire:before {\n  content: \"\\f06d\"; }\n\n.fa-fire-extinguisher:before {\n  content: \"\\f134\"; }\n\n.fa-firefox:before {\n  content: \"\\f269\"; }\n\n.fa-first-aid:before {\n  content: \"\\f479\"; }\n\n.fa-first-order:before {\n  content: \"\\f2b0\"; }\n\n.fa-firstdraft:before {\n  content: \"\\f3a1\"; }\n\n.fa-flag:before {\n  content: \"\\f024\"; }\n\n.fa-flag-checkered:before {\n  content: \"\\f11e\"; }\n\n.fa-flask:before {\n  content: \"\\f0c3\"; }\n\n.fa-flickr:before {\n  content: \"\\f16e\"; }\n\n.fa-flipboard:before {\n  content: \"\\f44d\"; }\n\n.fa-fly:before {\n  content: \"\\f417\"; }\n\n.fa-folder:before {\n  content: \"\\f07b\"; }\n\n.fa-folder-open:before {\n  content: \"\\f07c\"; }\n\n.fa-font:before {\n  content: \"\\f031\"; }\n\n.fa-font-awesome:before {\n  content: \"\\f2b4\"; }\n\n.fa-font-awesome-alt:before {\n  content: \"\\f35c\"; }\n\n.fa-font-awesome-flag:before {\n  content: \"\\f425\"; }\n\n.fa-fonticons:before {\n  content: \"\\f280\"; }\n\n.fa-fonticons-fi:before {\n  content: \"\\f3a2\"; }\n\n.fa-football-ball:before {\n  content: \"\\f44e\"; }\n\n.fa-fort-awesome:before {\n  content: \"\\f286\"; }\n\n.fa-fort-awesome-alt:before {\n  content: \"\\f3a3\"; }\n\n.fa-forumbee:before {\n  content: \"\\f211\"; }\n\n.fa-forward:before {\n  content: \"\\f04e\"; }\n\n.fa-foursquare:before {\n  content: \"\\f180\"; }\n\n.fa-free-code-camp:before {\n  content: \"\\f2c5\"; }\n\n.fa-freebsd:before {\n  content: \"\\f3a4\"; }\n\n.fa-frown:before {\n  content: \"\\f119\"; }\n\n.fa-futbol:before {\n  content: \"\\f1e3\"; }\n\n.fa-gamepad:before {\n  content: \"\\f11b\"; }\n\n.fa-gavel:before {\n  content: \"\\f0e3\"; }\n\n.fa-gem:before {\n  content: \"\\f3a5\"; }\n\n.fa-genderless:before {\n  content: \"\\f22d\"; }\n\n.fa-get-pocket:before {\n  content: \"\\f265\"; }\n\n.fa-gg:before {\n  content: \"\\f260\"; }\n\n.fa-gg-circle:before {\n  content: \"\\f261\"; }\n\n.fa-gift:before {\n  content: \"\\f06b\"; }\n\n.fa-git:before {\n  content: \"\\f1d3\"; }\n\n.fa-git-square:before {\n  content: \"\\f1d2\"; }\n\n.fa-github:before {\n  content: \"\\f09b\"; }\n\n.fa-github-alt:before {\n  content: \"\\f113\"; }\n\n.fa-github-square:before {\n  content: \"\\f092\"; }\n\n.fa-gitkraken:before {\n  content: \"\\f3a6\"; }\n\n.fa-gitlab:before {\n  content: \"\\f296\"; }\n\n.fa-gitter:before {\n  content: \"\\f426\"; }\n\n.fa-glass-martini:before {\n  content: \"\\f000\"; }\n\n.fa-glide:before {\n  content: \"\\f2a5\"; }\n\n.fa-glide-g:before {\n  content: \"\\f2a6\"; }\n\n.fa-globe:before {\n  content: \"\\f0ac\"; }\n\n.fa-gofore:before {\n  content: \"\\f3a7\"; }\n\n.fa-golf-ball:before {\n  content: \"\\f450\"; }\n\n.fa-goodreads:before {\n  content: \"\\f3a8\"; }\n\n.fa-goodreads-g:before {\n  content: \"\\f3a9\"; }\n\n.fa-google:before {\n  content: \"\\f1a0\"; }\n\n.fa-google-drive:before {\n  content: \"\\f3aa\"; }\n\n.fa-google-play:before {\n  content: \"\\f3ab\"; }\n\n.fa-google-plus:before {\n  content: \"\\f2b3\"; }\n\n.fa-google-plus-g:before {\n  content: \"\\f0d5\"; }\n\n.fa-google-plus-square:before {\n  content: \"\\f0d4\"; }\n\n.fa-google-wallet:before {\n  content: \"\\f1ee\"; }\n\n.fa-graduation-cap:before {\n  content: \"\\f19d\"; }\n\n.fa-gratipay:before {\n  content: \"\\f184\"; }\n\n.fa-grav:before {\n  content: \"\\f2d6\"; }\n\n.fa-gripfire:before {\n  content: \"\\f3ac\"; }\n\n.fa-grunt:before {\n  content: \"\\f3ad\"; }\n\n.fa-gulp:before {\n  content: \"\\f3ae\"; }\n\n.fa-h-square:before {\n  content: \"\\f0fd\"; }\n\n.fa-hacker-news:before {\n  content: \"\\f1d4\"; }\n\n.fa-hacker-news-square:before {\n  content: \"\\f3af\"; }\n\n.fa-hand-lizard:before {\n  content: \"\\f258\"; }\n\n.fa-hand-paper:before {\n  content: \"\\f256\"; }\n\n.fa-hand-peace:before {\n  content: \"\\f25b\"; }\n\n.fa-hand-point-down:before {\n  content: \"\\f0a7\"; }\n\n.fa-hand-point-left:before {\n  content: \"\\f0a5\"; }\n\n.fa-hand-point-right:before {\n  content: \"\\f0a4\"; }\n\n.fa-hand-point-up:before {\n  content: \"\\f0a6\"; }\n\n.fa-hand-pointer:before {\n  content: \"\\f25a\"; }\n\n.fa-hand-rock:before {\n  content: \"\\f255\"; }\n\n.fa-hand-scissors:before {\n  content: \"\\f257\"; }\n\n.fa-hand-spock:before {\n  content: \"\\f259\"; }\n\n.fa-handshake:before {\n  content: \"\\f2b5\"; }\n\n.fa-hashtag:before {\n  content: \"\\f292\"; }\n\n.fa-hdd:before {\n  content: \"\\f0a0\"; }\n\n.fa-heading:before {\n  content: \"\\f1dc\"; }\n\n.fa-headphones:before {\n  content: \"\\f025\"; }\n\n.fa-heart:before {\n  content: \"\\f004\"; }\n\n.fa-heartbeat:before {\n  content: \"\\f21e\"; }\n\n.fa-hips:before {\n  content: \"\\f452\"; }\n\n.fa-hire-a-helper:before {\n  content: \"\\f3b0\"; }\n\n.fa-history:before {\n  content: \"\\f1da\"; }\n\n.fa-hockey-puck:before {\n  content: \"\\f453\"; }\n\n.fa-home:before {\n  content: \"\\f015\"; }\n\n.fa-hooli:before {\n  content: \"\\f427\"; }\n\n.fa-hospital:before {\n  content: \"\\f0f8\"; }\n\n.fa-hospital-symbol:before {\n  content: \"\\f47e\"; }\n\n.fa-hotjar:before {\n  content: \"\\f3b1\"; }\n\n.fa-hourglass:before {\n  content: \"\\f254\"; }\n\n.fa-hourglass-end:before {\n  content: \"\\f253\"; }\n\n.fa-hourglass-half:before {\n  content: \"\\f252\"; }\n\n.fa-hourglass-start:before {\n  content: \"\\f251\"; }\n\n.fa-houzz:before {\n  content: \"\\f27c\"; }\n\n.fa-html5:before {\n  content: \"\\f13b\"; }\n\n.fa-hubspot:before {\n  content: \"\\f3b2\"; }\n\n.fa-i-cursor:before {\n  content: \"\\f246\"; }\n\n.fa-id-badge:before {\n  content: \"\\f2c1\"; }\n\n.fa-id-card:before {\n  content: \"\\f2c2\"; }\n\n.fa-image:before {\n  content: \"\\f03e\"; }\n\n.fa-images:before {\n  content: \"\\f302\"; }\n\n.fa-imdb:before {\n  content: \"\\f2d8\"; }\n\n.fa-inbox:before {\n  content: \"\\f01c\"; }\n\n.fa-indent:before {\n  content: \"\\f03c\"; }\n\n.fa-industry:before {\n  content: \"\\f275\"; }\n\n.fa-info:before {\n  content: \"\\f129\"; }\n\n.fa-info-circle:before {\n  content: \"\\f05a\"; }\n\n.fa-instagram:before {\n  content: \"\\f16d\"; }\n\n.fa-internet-explorer:before {\n  content: \"\\f26b\"; }\n\n.fa-ioxhost:before {\n  content: \"\\f208\"; }\n\n.fa-italic:before {\n  content: \"\\f033\"; }\n\n.fa-itunes:before {\n  content: \"\\f3b4\"; }\n\n.fa-itunes-note:before {\n  content: \"\\f3b5\"; }\n\n.fa-jenkins:before {\n  content: \"\\f3b6\"; }\n\n.fa-joget:before {\n  content: \"\\f3b7\"; }\n\n.fa-joomla:before {\n  content: \"\\f1aa\"; }\n\n.fa-js:before {\n  content: \"\\f3b8\"; }\n\n.fa-js-square:before {\n  content: \"\\f3b9\"; }\n\n.fa-jsfiddle:before {\n  content: \"\\f1cc\"; }\n\n.fa-key:before {\n  content: \"\\f084\"; }\n\n.fa-keyboard:before {\n  content: \"\\f11c\"; }\n\n.fa-keycdn:before {\n  content: \"\\f3ba\"; }\n\n.fa-kickstarter:before {\n  content: \"\\f3bb\"; }\n\n.fa-kickstarter-k:before {\n  content: \"\\f3bc\"; }\n\n.fa-korvue:before {\n  content: \"\\f42f\"; }\n\n.fa-language:before {\n  content: \"\\f1ab\"; }\n\n.fa-laptop:before {\n  content: \"\\f109\"; }\n\n.fa-laravel:before {\n  content: \"\\f3bd\"; }\n\n.fa-lastfm:before {\n  content: \"\\f202\"; }\n\n.fa-lastfm-square:before {\n  content: \"\\f203\"; }\n\n.fa-leaf:before {\n  content: \"\\f06c\"; }\n\n.fa-leanpub:before {\n  content: \"\\f212\"; }\n\n.fa-lemon:before {\n  content: \"\\f094\"; }\n\n.fa-less:before {\n  content: \"\\f41d\"; }\n\n.fa-level-down-alt:before {\n  content: \"\\f3be\"; }\n\n.fa-level-up-alt:before {\n  content: \"\\f3bf\"; }\n\n.fa-life-ring:before {\n  content: \"\\f1cd\"; }\n\n.fa-lightbulb:before {\n  content: \"\\f0eb\"; }\n\n.fa-line:before {\n  content: \"\\f3c0\"; }\n\n.fa-link:before {\n  content: \"\\f0c1\"; }\n\n.fa-linkedin:before {\n  content: \"\\f08c\"; }\n\n.fa-linkedin-in:before {\n  content: \"\\f0e1\"; }\n\n.fa-linode:before {\n  content: \"\\f2b8\"; }\n\n.fa-linux:before {\n  content: \"\\f17c\"; }\n\n.fa-lira-sign:before {\n  content: \"\\f195\"; }\n\n.fa-list:before {\n  content: \"\\f03a\"; }\n\n.fa-list-alt:before {\n  content: \"\\f022\"; }\n\n.fa-list-ol:before {\n  content: \"\\f0cb\"; }\n\n.fa-list-ul:before {\n  content: \"\\f0ca\"; }\n\n.fa-location-arrow:before {\n  content: \"\\f124\"; }\n\n.fa-lock:before {\n  content: \"\\f023\"; }\n\n.fa-lock-open:before {\n  content: \"\\f3c1\"; }\n\n.fa-long-arrow-alt-down:before {\n  content: \"\\f309\"; }\n\n.fa-long-arrow-alt-left:before {\n  content: \"\\f30a\"; }\n\n.fa-long-arrow-alt-right:before {\n  content: \"\\f30b\"; }\n\n.fa-long-arrow-alt-up:before {\n  content: \"\\f30c\"; }\n\n.fa-low-vision:before {\n  content: \"\\f2a8\"; }\n\n.fa-lyft:before {\n  content: \"\\f3c3\"; }\n\n.fa-magento:before {\n  content: \"\\f3c4\"; }\n\n.fa-magic:before {\n  content: \"\\f0d0\"; }\n\n.fa-magnet:before {\n  content: \"\\f076\"; }\n\n.fa-male:before {\n  content: \"\\f183\"; }\n\n.fa-map:before {\n  content: \"\\f279\"; }\n\n.fa-map-marker:before {\n  content: \"\\f041\"; }\n\n.fa-map-marker-alt:before {\n  content: \"\\f3c5\"; }\n\n.fa-map-pin:before {\n  content: \"\\f276\"; }\n\n.fa-map-signs:before {\n  content: \"\\f277\"; }\n\n.fa-mars:before {\n  content: \"\\f222\"; }\n\n.fa-mars-double:before {\n  content: \"\\f227\"; }\n\n.fa-mars-stroke:before {\n  content: \"\\f229\"; }\n\n.fa-mars-stroke-h:before {\n  content: \"\\f22b\"; }\n\n.fa-mars-stroke-v:before {\n  content: \"\\f22a\"; }\n\n.fa-maxcdn:before {\n  content: \"\\f136\"; }\n\n.fa-medapps:before {\n  content: \"\\f3c6\"; }\n\n.fa-medium:before {\n  content: \"\\f23a\"; }\n\n.fa-medium-m:before {\n  content: \"\\f3c7\"; }\n\n.fa-medkit:before {\n  content: \"\\f0fa\"; }\n\n.fa-medrt:before {\n  content: \"\\f3c8\"; }\n\n.fa-meetup:before {\n  content: \"\\f2e0\"; }\n\n.fa-meh:before {\n  content: \"\\f11a\"; }\n\n.fa-mercury:before {\n  content: \"\\f223\"; }\n\n.fa-microchip:before {\n  content: \"\\f2db\"; }\n\n.fa-microphone:before {\n  content: \"\\f130\"; }\n\n.fa-microphone-slash:before {\n  content: \"\\f131\"; }\n\n.fa-microsoft:before {\n  content: \"\\f3ca\"; }\n\n.fa-minus:before {\n  content: \"\\f068\"; }\n\n.fa-minus-circle:before {\n  content: \"\\f056\"; }\n\n.fa-minus-square:before {\n  content: \"\\f146\"; }\n\n.fa-mix:before {\n  content: \"\\f3cb\"; }\n\n.fa-mixcloud:before {\n  content: \"\\f289\"; }\n\n.fa-mizuni:before {\n  content: \"\\f3cc\"; }\n\n.fa-mobile:before {\n  content: \"\\f10b\"; }\n\n.fa-mobile-alt:before {\n  content: \"\\f3cd\"; }\n\n.fa-modx:before {\n  content: \"\\f285\"; }\n\n.fa-monero:before {\n  content: \"\\f3d0\"; }\n\n.fa-money-bill-alt:before {\n  content: \"\\f3d1\"; }\n\n.fa-moon:before {\n  content: \"\\f186\"; }\n\n.fa-motorcycle:before {\n  content: \"\\f21c\"; }\n\n.fa-mouse-pointer:before {\n  content: \"\\f245\"; }\n\n.fa-music:before {\n  content: \"\\f001\"; }\n\n.fa-napster:before {\n  content: \"\\f3d2\"; }\n\n.fa-neuter:before {\n  content: \"\\f22c\"; }\n\n.fa-newspaper:before {\n  content: \"\\f1ea\"; }\n\n.fa-nintendo-switch:before {\n  content: \"\\f418\"; }\n\n.fa-node:before {\n  content: \"\\f419\"; }\n\n.fa-node-js:before {\n  content: \"\\f3d3\"; }\n\n.fa-npm:before {\n  content: \"\\f3d4\"; }\n\n.fa-ns8:before {\n  content: \"\\f3d5\"; }\n\n.fa-nutritionix:before {\n  content: \"\\f3d6\"; }\n\n.fa-object-group:before {\n  content: \"\\f247\"; }\n\n.fa-object-ungroup:before {\n  content: \"\\f248\"; }\n\n.fa-odnoklassniki:before {\n  content: \"\\f263\"; }\n\n.fa-odnoklassniki-square:before {\n  content: \"\\f264\"; }\n\n.fa-opencart:before {\n  content: \"\\f23d\"; }\n\n.fa-openid:before {\n  content: \"\\f19b\"; }\n\n.fa-opera:before {\n  content: \"\\f26a\"; }\n\n.fa-optin-monster:before {\n  content: \"\\f23c\"; }\n\n.fa-osi:before {\n  content: \"\\f41a\"; }\n\n.fa-outdent:before {\n  content: \"\\f03b\"; }\n\n.fa-page4:before {\n  content: \"\\f3d7\"; }\n\n.fa-pagelines:before {\n  content: \"\\f18c\"; }\n\n.fa-paint-brush:before {\n  content: \"\\f1fc\"; }\n\n.fa-palfed:before {\n  content: \"\\f3d8\"; }\n\n.fa-pallet:before {\n  content: \"\\f482\"; }\n\n.fa-paper-plane:before {\n  content: \"\\f1d8\"; }\n\n.fa-paperclip:before {\n  content: \"\\f0c6\"; }\n\n.fa-paragraph:before {\n  content: \"\\f1dd\"; }\n\n.fa-paste:before {\n  content: \"\\f0ea\"; }\n\n.fa-patreon:before {\n  content: \"\\f3d9\"; }\n\n.fa-pause:before {\n  content: \"\\f04c\"; }\n\n.fa-pause-circle:before {\n  content: \"\\f28b\"; }\n\n.fa-paw:before {\n  content: \"\\f1b0\"; }\n\n.fa-paypal:before {\n  content: \"\\f1ed\"; }\n\n.fa-pen-square:before {\n  content: \"\\f14b\"; }\n\n.fa-pencil-alt:before {\n  content: \"\\f303\"; }\n\n.fa-percent:before {\n  content: \"\\f295\"; }\n\n.fa-periscope:before {\n  content: \"\\f3da\"; }\n\n.fa-phabricator:before {\n  content: \"\\f3db\"; }\n\n.fa-phoenix-framework:before {\n  content: \"\\f3dc\"; }\n\n.fa-phone:before {\n  content: \"\\f095\"; }\n\n.fa-phone-square:before {\n  content: \"\\f098\"; }\n\n.fa-phone-volume:before {\n  content: \"\\f2a0\"; }\n\n.fa-php:before {\n  content: \"\\f457\"; }\n\n.fa-pied-piper:before {\n  content: \"\\f2ae\"; }\n\n.fa-pied-piper-alt:before {\n  content: \"\\f1a8\"; }\n\n.fa-pied-piper-pp:before {\n  content: \"\\f1a7\"; }\n\n.fa-pills:before {\n  content: \"\\f484\"; }\n\n.fa-pinterest:before {\n  content: \"\\f0d2\"; }\n\n.fa-pinterest-p:before {\n  content: \"\\f231\"; }\n\n.fa-pinterest-square:before {\n  content: \"\\f0d3\"; }\n\n.fa-plane:before {\n  content: \"\\f072\"; }\n\n.fa-play:before {\n  content: \"\\f04b\"; }\n\n.fa-play-circle:before {\n  content: \"\\f144\"; }\n\n.fa-playstation:before {\n  content: \"\\f3df\"; }\n\n.fa-plug:before {\n  content: \"\\f1e6\"; }\n\n.fa-plus:before {\n  content: \"\\f067\"; }\n\n.fa-plus-circle:before {\n  content: \"\\f055\"; }\n\n.fa-plus-square:before {\n  content: \"\\f0fe\"; }\n\n.fa-podcast:before {\n  content: \"\\f2ce\"; }\n\n.fa-pound-sign:before {\n  content: \"\\f154\"; }\n\n.fa-power-off:before {\n  content: \"\\f011\"; }\n\n.fa-print:before {\n  content: \"\\f02f\"; }\n\n.fa-product-hunt:before {\n  content: \"\\f288\"; }\n\n.fa-pushed:before {\n  content: \"\\f3e1\"; }\n\n.fa-puzzle-piece:before {\n  content: \"\\f12e\"; }\n\n.fa-python:before {\n  content: \"\\f3e2\"; }\n\n.fa-qq:before {\n  content: \"\\f1d6\"; }\n\n.fa-qrcode:before {\n  content: \"\\f029\"; }\n\n.fa-question:before {\n  content: \"\\f128\"; }\n\n.fa-question-circle:before {\n  content: \"\\f059\"; }\n\n.fa-quidditch:before {\n  content: \"\\f458\"; }\n\n.fa-quinscape:before {\n  content: \"\\f459\"; }\n\n.fa-quora:before {\n  content: \"\\f2c4\"; }\n\n.fa-quote-left:before {\n  content: \"\\f10d\"; }\n\n.fa-quote-right:before {\n  content: \"\\f10e\"; }\n\n.fa-random:before {\n  content: \"\\f074\"; }\n\n.fa-ravelry:before {\n  content: \"\\f2d9\"; }\n\n.fa-react:before {\n  content: \"\\f41b\"; }\n\n.fa-rebel:before {\n  content: \"\\f1d0\"; }\n\n.fa-recycle:before {\n  content: \"\\f1b8\"; }\n\n.fa-red-river:before {\n  content: \"\\f3e3\"; }\n\n.fa-reddit:before {\n  content: \"\\f1a1\"; }\n\n.fa-reddit-alien:before {\n  content: \"\\f281\"; }\n\n.fa-reddit-square:before {\n  content: \"\\f1a2\"; }\n\n.fa-redo:before {\n  content: \"\\f01e\"; }\n\n.fa-redo-alt:before {\n  content: \"\\f2f9\"; }\n\n.fa-registered:before {\n  content: \"\\f25d\"; }\n\n.fa-rendact:before {\n  content: \"\\f3e4\"; }\n\n.fa-renren:before {\n  content: \"\\f18b\"; }\n\n.fa-reply:before {\n  content: \"\\f3e5\"; }\n\n.fa-reply-all:before {\n  content: \"\\f122\"; }\n\n.fa-replyd:before {\n  content: \"\\f3e6\"; }\n\n.fa-resolving:before {\n  content: \"\\f3e7\"; }\n\n.fa-retweet:before {\n  content: \"\\f079\"; }\n\n.fa-road:before {\n  content: \"\\f018\"; }\n\n.fa-rocket:before {\n  content: \"\\f135\"; }\n\n.fa-rocketchat:before {\n  content: \"\\f3e8\"; }\n\n.fa-rockrms:before {\n  content: \"\\f3e9\"; }\n\n.fa-rss:before {\n  content: \"\\f09e\"; }\n\n.fa-rss-square:before {\n  content: \"\\f143\"; }\n\n.fa-ruble-sign:before {\n  content: \"\\f158\"; }\n\n.fa-rupee-sign:before {\n  content: \"\\f156\"; }\n\n.fa-safari:before {\n  content: \"\\f267\"; }\n\n.fa-sass:before {\n  content: \"\\f41e\"; }\n\n.fa-save:before {\n  content: \"\\f0c7\"; }\n\n.fa-schlix:before {\n  content: \"\\f3ea\"; }\n\n.fa-scribd:before {\n  content: \"\\f28a\"; }\n\n.fa-search:before {\n  content: \"\\f002\"; }\n\n.fa-search-minus:before {\n  content: \"\\f010\"; }\n\n.fa-search-plus:before {\n  content: \"\\f00e\"; }\n\n.fa-searchengin:before {\n  content: \"\\f3eb\"; }\n\n.fa-sellcast:before {\n  content: \"\\f2da\"; }\n\n.fa-sellsy:before {\n  content: \"\\f213\"; }\n\n.fa-server:before {\n  content: \"\\f233\"; }\n\n.fa-servicestack:before {\n  content: \"\\f3ec\"; }\n\n.fa-share:before {\n  content: \"\\f064\"; }\n\n.fa-share-alt:before {\n  content: \"\\f1e0\"; }\n\n.fa-share-alt-square:before {\n  content: \"\\f1e1\"; }\n\n.fa-share-square:before {\n  content: \"\\f14d\"; }\n\n.fa-shekel-sign:before {\n  content: \"\\f20b\"; }\n\n.fa-shield-alt:before {\n  content: \"\\f3ed\"; }\n\n.fa-ship:before {\n  content: \"\\f21a\"; }\n\n.fa-shipping-fast:before {\n  content: \"\\f48b\"; }\n\n.fa-shirtsinbulk:before {\n  content: \"\\f214\"; }\n\n.fa-shopping-bag:before {\n  content: \"\\f290\"; }\n\n.fa-shopping-basket:before {\n  content: \"\\f291\"; }\n\n.fa-shopping-cart:before {\n  content: \"\\f07a\"; }\n\n.fa-shower:before {\n  content: \"\\f2cc\"; }\n\n.fa-sign-in-alt:before {\n  content: \"\\f2f6\"; }\n\n.fa-sign-language:before {\n  content: \"\\f2a7\"; }\n\n.fa-sign-out-alt:before {\n  content: \"\\f2f5\"; }\n\n.fa-signal:before {\n  content: \"\\f012\"; }\n\n.fa-simplybuilt:before {\n  content: \"\\f215\"; }\n\n.fa-sistrix:before {\n  content: \"\\f3ee\"; }\n\n.fa-sitemap:before {\n  content: \"\\f0e8\"; }\n\n.fa-skyatlas:before {\n  content: \"\\f216\"; }\n\n.fa-skype:before {\n  content: \"\\f17e\"; }\n\n.fa-slack:before {\n  content: \"\\f198\"; }\n\n.fa-slack-hash:before {\n  content: \"\\f3ef\"; }\n\n.fa-sliders-h:before {\n  content: \"\\f1de\"; }\n\n.fa-slideshare:before {\n  content: \"\\f1e7\"; }\n\n.fa-smile:before {\n  content: \"\\f118\"; }\n\n.fa-snapchat:before {\n  content: \"\\f2ab\"; }\n\n.fa-snapchat-ghost:before {\n  content: \"\\f2ac\"; }\n\n.fa-snapchat-square:before {\n  content: \"\\f2ad\"; }\n\n.fa-snowflake:before {\n  content: \"\\f2dc\"; }\n\n.fa-sort:before {\n  content: \"\\f0dc\"; }\n\n.fa-sort-alpha-down:before {\n  content: \"\\f15d\"; }\n\n.fa-sort-alpha-up:before {\n  content: \"\\f15e\"; }\n\n.fa-sort-amount-down:before {\n  content: \"\\f160\"; }\n\n.fa-sort-amount-up:before {\n  content: \"\\f161\"; }\n\n.fa-sort-down:before {\n  content: \"\\f0dd\"; }\n\n.fa-sort-numeric-down:before {\n  content: \"\\f162\"; }\n\n.fa-sort-numeric-up:before {\n  content: \"\\f163\"; }\n\n.fa-sort-up:before {\n  content: \"\\f0de\"; }\n\n.fa-soundcloud:before {\n  content: \"\\f1be\"; }\n\n.fa-space-shuttle:before {\n  content: \"\\f197\"; }\n\n.fa-speakap:before {\n  content: \"\\f3f3\"; }\n\n.fa-spinner:before {\n  content: \"\\f110\"; }\n\n.fa-spotify:before {\n  content: \"\\f1bc\"; }\n\n.fa-square:before {\n  content: \"\\f0c8\"; }\n\n.fa-square-full:before {\n  content: \"\\f45c\"; }\n\n.fa-stack-exchange:before {\n  content: \"\\f18d\"; }\n\n.fa-stack-overflow:before {\n  content: \"\\f16c\"; }\n\n.fa-star:before {\n  content: \"\\f005\"; }\n\n.fa-star-half:before {\n  content: \"\\f089\"; }\n\n.fa-staylinked:before {\n  content: \"\\f3f5\"; }\n\n.fa-steam:before {\n  content: \"\\f1b6\"; }\n\n.fa-steam-square:before {\n  content: \"\\f1b7\"; }\n\n.fa-steam-symbol:before {\n  content: \"\\f3f6\"; }\n\n.fa-step-backward:before {\n  content: \"\\f048\"; }\n\n.fa-step-forward:before {\n  content: \"\\f051\"; }\n\n.fa-stethoscope:before {\n  content: \"\\f0f1\"; }\n\n.fa-sticker-mule:before {\n  content: \"\\f3f7\"; }\n\n.fa-sticky-note:before {\n  content: \"\\f249\"; }\n\n.fa-stop:before {\n  content: \"\\f04d\"; }\n\n.fa-stop-circle:before {\n  content: \"\\f28d\"; }\n\n.fa-stopwatch:before {\n  content: \"\\f2f2\"; }\n\n.fa-strava:before {\n  content: \"\\f428\"; }\n\n.fa-street-view:before {\n  content: \"\\f21d\"; }\n\n.fa-strikethrough:before {\n  content: \"\\f0cc\"; }\n\n.fa-stripe:before {\n  content: \"\\f429\"; }\n\n.fa-stripe-s:before {\n  content: \"\\f42a\"; }\n\n.fa-studiovinari:before {\n  content: \"\\f3f8\"; }\n\n.fa-stumbleupon:before {\n  content: \"\\f1a4\"; }\n\n.fa-stumbleupon-circle:before {\n  content: \"\\f1a3\"; }\n\n.fa-subscript:before {\n  content: \"\\f12c\"; }\n\n.fa-subway:before {\n  content: \"\\f239\"; }\n\n.fa-suitcase:before {\n  content: \"\\f0f2\"; }\n\n.fa-sun:before {\n  content: \"\\f185\"; }\n\n.fa-superpowers:before {\n  content: \"\\f2dd\"; }\n\n.fa-superscript:before {\n  content: \"\\f12b\"; }\n\n.fa-supple:before {\n  content: \"\\f3f9\"; }\n\n.fa-sync:before {\n  content: \"\\f021\"; }\n\n.fa-sync-alt:before {\n  content: \"\\f2f1\"; }\n\n.fa-syringe:before {\n  content: \"\\f48e\"; }\n\n.fa-table:before {\n  content: \"\\f0ce\"; }\n\n.fa-table-tennis:before {\n  content: \"\\f45d\"; }\n\n.fa-tablet:before {\n  content: \"\\f10a\"; }\n\n.fa-tablet-alt:before {\n  content: \"\\f3fa\"; }\n\n.fa-tachometer-alt:before {\n  content: \"\\f3fd\"; }\n\n.fa-tag:before {\n  content: \"\\f02b\"; }\n\n.fa-tags:before {\n  content: \"\\f02c\"; }\n\n.fa-tasks:before {\n  content: \"\\f0ae\"; }\n\n.fa-taxi:before {\n  content: \"\\f1ba\"; }\n\n.fa-telegram:before {\n  content: \"\\f2c6\"; }\n\n.fa-telegram-plane:before {\n  content: \"\\f3fe\"; }\n\n.fa-tencent-weibo:before {\n  content: \"\\f1d5\"; }\n\n.fa-terminal:before {\n  content: \"\\f120\"; }\n\n.fa-text-height:before {\n  content: \"\\f034\"; }\n\n.fa-text-width:before {\n  content: \"\\f035\"; }\n\n.fa-th:before {\n  content: \"\\f00a\"; }\n\n.fa-th-large:before {\n  content: \"\\f009\"; }\n\n.fa-th-list:before {\n  content: \"\\f00b\"; }\n\n.fa-themeisle:before {\n  content: \"\\f2b2\"; }\n\n.fa-thermometer:before {\n  content: \"\\f491\"; }\n\n.fa-thermometer-empty:before {\n  content: \"\\f2cb\"; }\n\n.fa-thermometer-full:before {\n  content: \"\\f2c7\"; }\n\n.fa-thermometer-half:before {\n  content: \"\\f2c9\"; }\n\n.fa-thermometer-quarter:before {\n  content: \"\\f2ca\"; }\n\n.fa-thermometer-three-quarters:before {\n  content: \"\\f2c8\"; }\n\n.fa-thumbs-down:before {\n  content: \"\\f165\"; }\n\n.fa-thumbs-up:before {\n  content: \"\\f164\"; }\n\n.fa-thumbtack:before {\n  content: \"\\f08d\"; }\n\n.fa-ticket-alt:before {\n  content: \"\\f3ff\"; }\n\n.fa-times:before {\n  content: \"\\f00d\"; }\n\n.fa-times-circle:before {\n  content: \"\\f057\"; }\n\n.fa-tint:before {\n  content: \"\\f043\"; }\n\n.fa-toggle-off:before {\n  content: \"\\f204\"; }\n\n.fa-toggle-on:before {\n  content: \"\\f205\"; }\n\n.fa-trademark:before {\n  content: \"\\f25c\"; }\n\n.fa-train:before {\n  content: \"\\f238\"; }\n\n.fa-transgender:before {\n  content: \"\\f224\"; }\n\n.fa-transgender-alt:before {\n  content: \"\\f225\"; }\n\n.fa-trash:before {\n  content: \"\\f1f8\"; }\n\n.fa-trash-alt:before {\n  content: \"\\f2ed\"; }\n\n.fa-tree:before {\n  content: \"\\f1bb\"; }\n\n.fa-trello:before {\n  content: \"\\f181\"; }\n\n.fa-tripadvisor:before {\n  content: \"\\f262\"; }\n\n.fa-trophy:before {\n  content: \"\\f091\"; }\n\n.fa-truck:before {\n  content: \"\\f0d1\"; }\n\n.fa-tty:before {\n  content: \"\\f1e4\"; }\n\n.fa-tumblr:before {\n  content: \"\\f173\"; }\n\n.fa-tumblr-square:before {\n  content: \"\\f174\"; }\n\n.fa-tv:before {\n  content: \"\\f26c\"; }\n\n.fa-twitch:before {\n  content: \"\\f1e8\"; }\n\n.fa-twitter:before {\n  content: \"\\f099\"; }\n\n.fa-twitter-square:before {\n  content: \"\\f081\"; }\n\n.fa-typo3:before {\n  content: \"\\f42b\"; }\n\n.fa-uber:before {\n  content: \"\\f402\"; }\n\n.fa-uikit:before {\n  content: \"\\f403\"; }\n\n.fa-umbrella:before {\n  content: \"\\f0e9\"; }\n\n.fa-underline:before {\n  content: \"\\f0cd\"; }\n\n.fa-undo:before {\n  content: \"\\f0e2\"; }\n\n.fa-undo-alt:before {\n  content: \"\\f2ea\"; }\n\n.fa-uniregistry:before {\n  content: \"\\f404\"; }\n\n.fa-universal-access:before {\n  content: \"\\f29a\"; }\n\n.fa-university:before {\n  content: \"\\f19c\"; }\n\n.fa-unlink:before {\n  content: \"\\f127\"; }\n\n.fa-unlock:before {\n  content: \"\\f09c\"; }\n\n.fa-unlock-alt:before {\n  content: \"\\f13e\"; }\n\n.fa-untappd:before {\n  content: \"\\f405\"; }\n\n.fa-upload:before {\n  content: \"\\f093\"; }\n\n.fa-usb:before {\n  content: \"\\f287\"; }\n\n.fa-user:before {\n  content: \"\\f007\"; }\n\n.fa-user-circle:before {\n  content: \"\\f2bd\"; }\n\n.fa-user-md:before {\n  content: \"\\f0f0\"; }\n\n.fa-user-plus:before {\n  content: \"\\f234\"; }\n\n.fa-user-secret:before {\n  content: \"\\f21b\"; }\n\n.fa-user-times:before {\n  content: \"\\f235\"; }\n\n.fa-users:before {\n  content: \"\\f0c0\"; }\n\n.fa-ussunnah:before {\n  content: \"\\f407\"; }\n\n.fa-utensil-spoon:before {\n  content: \"\\f2e5\"; }\n\n.fa-utensils:before {\n  content: \"\\f2e7\"; }\n\n.fa-vaadin:before {\n  content: \"\\f408\"; }\n\n.fa-venus:before {\n  content: \"\\f221\"; }\n\n.fa-venus-double:before {\n  content: \"\\f226\"; }\n\n.fa-venus-mars:before {\n  content: \"\\f228\"; }\n\n.fa-viacoin:before {\n  content: \"\\f237\"; }\n\n.fa-viadeo:before {\n  content: \"\\f2a9\"; }\n\n.fa-viadeo-square:before {\n  content: \"\\f2aa\"; }\n\n.fa-viber:before {\n  content: \"\\f409\"; }\n\n.fa-video:before {\n  content: \"\\f03d\"; }\n\n.fa-vimeo:before {\n  content: \"\\f40a\"; }\n\n.fa-vimeo-square:before {\n  content: \"\\f194\"; }\n\n.fa-vimeo-v:before {\n  content: \"\\f27d\"; }\n\n.fa-vine:before {\n  content: \"\\f1ca\"; }\n\n.fa-vk:before {\n  content: \"\\f189\"; }\n\n.fa-vnv:before {\n  content: \"\\f40b\"; }\n\n.fa-volleyball-ball:before {\n  content: \"\\f45f\"; }\n\n.fa-volume-down:before {\n  content: \"\\f027\"; }\n\n.fa-volume-off:before {\n  content: \"\\f026\"; }\n\n.fa-volume-up:before {\n  content: \"\\f028\"; }\n\n.fa-vuejs:before {\n  content: \"\\f41f\"; }\n\n.fa-warehouse:before {\n  content: \"\\f494\"; }\n\n.fa-weibo:before {\n  content: \"\\f18a\"; }\n\n.fa-weight:before {\n  content: \"\\f496\"; }\n\n.fa-weixin:before {\n  content: \"\\f1d7\"; }\n\n.fa-whatsapp:before {\n  content: \"\\f232\"; }\n\n.fa-whatsapp-square:before {\n  content: \"\\f40c\"; }\n\n.fa-wheelchair:before {\n  content: \"\\f193\"; }\n\n.fa-whmcs:before {\n  content: \"\\f40d\"; }\n\n.fa-wifi:before {\n  content: \"\\f1eb\"; }\n\n.fa-wikipedia-w:before {\n  content: \"\\f266\"; }\n\n.fa-window-close:before {\n  content: \"\\f410\"; }\n\n.fa-window-maximize:before {\n  content: \"\\f2d0\"; }\n\n.fa-window-minimize:before {\n  content: \"\\f2d1\"; }\n\n.fa-window-restore:before {\n  content: \"\\f2d2\"; }\n\n.fa-windows:before {\n  content: \"\\f17a\"; }\n\n.fa-won-sign:before {\n  content: \"\\f159\"; }\n\n.fa-wordpress:before {\n  content: \"\\f19a\"; }\n\n.fa-wordpress-simple:before {\n  content: \"\\f411\"; }\n\n.fa-wpbeginner:before {\n  content: \"\\f297\"; }\n\n.fa-wpexplorer:before {\n  content: \"\\f2de\"; }\n\n.fa-wpforms:before {\n  content: \"\\f298\"; }\n\n.fa-wrench:before {\n  content: \"\\f0ad\"; }\n\n.fa-xbox:before {\n  content: \"\\f412\"; }\n\n.fa-xing:before {\n  content: \"\\f168\"; }\n\n.fa-xing-square:before {\n  content: \"\\f169\"; }\n\n.fa-y-combinator:before {\n  content: \"\\f23b\"; }\n\n.fa-yahoo:before {\n  content: \"\\f19e\"; }\n\n.fa-yandex:before {\n  content: \"\\f413\"; }\n\n.fa-yandex-international:before {\n  content: \"\\f414\"; }\n\n.fa-yelp:before {\n  content: \"\\f1e9\"; }\n\n.fa-yen-sign:before {\n  content: \"\\f157\"; }\n\n.fa-yoast:before {\n  content: \"\\f2b1\"; }\n\n.fa-youtube:before {\n  content: \"\\f167\"; }\n\n.fa-youtube-square:before {\n  content: \"\\f431\"; }\n\n.sr-only {\n  border: 0;\n  clip: rect(0, 0, 0, 0);\n  height: 1px;\n  margin: -1px;\n  overflow: hidden;\n  padding: 0;\n  position: absolute;\n  width: 1px; }\n\n.sr-only-focusable:active, .sr-only-focusable:focus {\n  clip: auto;\n  height: auto;\n  margin: 0;\n  overflow: visible;\n  position: static;\n  width: auto; }\n@font-face {\n  font-family: 'Font Awesome 5 Brands';\n  font-style: normal;\n  font-weight: normal;\n  src: url(\"../webfonts/fa-brands-400.eot\");\n  src: url(\"../webfonts/fa-brands-400.eot?#iefix\") format(\"embedded-opentype\"), url(\"../webfonts/fa-brands-400.woff2\") format(\"woff2\"), url(\"../webfonts/fa-brands-400.woff\") format(\"woff\"), url(\"../webfonts/fa-brands-400.ttf\") format(\"truetype\"), url(\"../webfonts/fa-brands-400.svg#fontawesome\") format(\"svg\"); }\n\n.fab {\n  font-family: 'Font Awesome 5 Brands'; }\n@font-face {\n  font-family: 'Font Awesome 5 Free';\n  font-style: normal;\n  font-weight: 400;\n  src: url(\"../webfonts/fa-regular-400.eot\");\n  src: url(\"../webfonts/fa-regular-400.eot?#iefix\") format(\"embedded-opentype\"), url(\"../webfonts/fa-regular-400.woff2\") format(\"woff2\"), url(\"../webfonts/fa-regular-400.woff\") format(\"woff\"), url(\"../webfonts/fa-regular-400.ttf\") format(\"truetype\"), url(\"../webfonts/fa-regular-400.svg#fontawesome\") format(\"svg\"); }\n\n.far {\n  font-family: 'Font Awesome 5 Free';\n  font-weight: 400; }\n@font-face {\n  font-family: 'Font Awesome 5 Free';\n  font-style: normal;\n  font-weight: 900;\n  src: url(\"../webfonts/fa-solid-900.eot\");\n  src: url(\"../webfonts/fa-solid-900.eot?#iefix\") format(\"embedded-opentype\"), url(\"../webfonts/fa-solid-900.woff2\") format(\"woff2\"), url(\"../webfonts/fa-solid-900.woff\") format(\"woff\"), url(\"../webfonts/fa-solid-900.ttf\") format(\"truetype\"), url(\"../webfonts/fa-solid-900.svg#fontawesome\") format(\"svg\"); }\n\n.fa,\n.fas {\n  font-family: 'Font Awesome 5 Free';\n  font-weight: 900; }\n"
  },
  {
    "path": "src/sourceDev.WebApp/SharedThemes/pulse/wwwroot/css/site.css",
    "content": "﻿html {\n    position: relative;\n    min-height: 100%;\n}\n\nbody {\n    min-height: 100vh;\n    padding-top: 144px;\n}\n\n\n#newPostLink {\n    position: absolute;\n    top: 170px;\n    right: 0px;\n}\n\n#editPostLink {\n    position: absolute;\n    top: 200px;\n    right: 0px;\n}\n\n#unpublishPostLink {\n    position: absolute;\n    top: 230px !important;\n    right: 0px !important;\n}\n\n#pageManagerLink {\n    position: absolute;\n    top: 170px;\n    right: 0px;\n}\n\n#newPageLink {\n    position: absolute;\n    top: 200px;\n    right: 0px;\n}\n\n#editPageLink {\n    position: absolute;\n    top: 230px;\n    right: 0px\n}\n\n#unpublishPageLink {\n    position: absolute;\n    top: 260px !important;\n    right: 0px !important\n}\n\n#sidenavtoggle {\n    position: absolute;\n    top: 220px;\n    right: 5px;\n}\n\n\n@media screen and (max-width: 812px) {\n    #sidenavtoggle,\n    #sidenavmenu {\n        display: none;\n    }\n}\n\n.flex-fill {\n    flex: 1 1 auto !important;\n}\n\n\n.carousel-caption p {\n    font-size: 20px;\n    line-height: 1.4;\n}\n\n@media screen and (max-width: 768px) {\n    .carousel-caption {\n        display: none\n    }\n}\n\n\n\n\nimg, video, iframe {\n    max-width: 100%;\n}\n\ntd img, video, iframe {\n    max-width: none;\n}\n\n\n\n.table td, .table th {\n    vertical-align: inherit;\n}\n\n/******** jquery smartmenu bootstrap 4 ******/\n/* Carets in collapsible mode (make them look like +/- buttons) */\n.navbar-nav.sm-collapsible .sub-arrow {\n    position: absolute;\n    top: 50%;\n    right: 0;\n    margin: -0.7em 0.5em 0 0;\n    border: 1px solid rgba(0, 0, 0, .1);\n    border-radius: .25rem;\n    padding: 0;\n    width: 2em;\n    height: 1.4em;\n    font-size: 1.25rem;\n    line-height: 1.2em;\n    text-align: center;\n}\n\n    .navbar-nav.sm-collapsible .sub-arrow::before {\n        content: '+';\n    }\n\n.navbar-nav.sm-collapsible .show > a > .sub-arrow::before {\n    content: '-';\n}\n\n.navbar-dark .navbar-nav.sm-collapsible .nav-link .sub-arrow {\n    border-color: rgba(255, 255, 255, .1);\n}\n/* make sure there's room for the carets */\n.navbar-nav.sm-collapsible .has-submenu {\n    padding-right: 3em;\n}\n/* keep the carets properly positioned */\n.navbar-nav.sm-collapsible .nav-link,\n.navbar-nav.sm-collapsible .dropdown-item {\n    position: relative;\n}\n\n\n/* Nav carets in expanded mode */\n.navbar-nav:not(.sm-collapsible) .nav-link .sub-arrow {\n    display: inline-block;\n    width: 0;\n    height: 0;\n    margin-left: .255em;\n    vertical-align: .255em;\n    border-top: .3em solid;\n    border-right: .3em solid transparent;\n    border-left: .3em solid transparent;\n}\n/* point the arrows up for .fixed-bottom navbars */\n.fixed-bottom .navbar-nav:not(.sm-collapsible) .nav-link .sub-arrow,\n.fixed-bottom .navbar-nav:not(.sm-collapsible):not([data-sm-skip]) .dropdown-toggle::after {\n    border-top: 0;\n    border-bottom: .3em solid;\n}\n\n\n/* Dropdown carets in expanded mode */\n.navbar-nav:not(.sm-collapsible) .dropdown-item .sub-arrow,\n.navbar-nav:not(.sm-collapsible):not([data-sm-skip]) .dropdown-menu .dropdown-toggle::after {\n    position: absolute;\n    top: 50%;\n    right: 0;\n    width: 0;\n    height: 0;\n    margin-top: -.3em;\n    margin-right: 1em;\n    border-top: .3em solid transparent;\n    border-bottom: .3em solid transparent;\n    border-left: .3em solid;\n}\n/* make sure there's room for the carets */\n.navbar-nav:not(.sm-collapsible) .dropdown-item.has-submenu {\n    padding-right: 2em;\n}\n\n\n/* Scrolling arrows for tall menus */\n.navbar-nav .scroll-up,\n.navbar-nav .scroll-down {\n    position: absolute;\n    display: none;\n    visibility: hidden;\n    height: 20px;\n    overflow: hidden;\n    text-align: center;\n}\n\n.navbar-nav .scroll-up-arrow,\n.navbar-nav .scroll-down-arrow {\n    position: absolute;\n    top: -2px;\n    left: 50%;\n    margin-left: -8px;\n    width: 0;\n    height: 0;\n    overflow: hidden;\n    border-top: 7px solid transparent;\n    border-right: 7px solid transparent;\n    border-bottom: 7px solid;\n    border-left: 7px solid transparent;\n}\n\n.navbar-nav .scroll-down-arrow {\n    top: 6px;\n    border-top: 7px solid;\n    border-right: 7px solid transparent;\n    border-bottom: 7px solid transparent;\n    border-left: 7px solid transparent;\n}\n\n\n/* Add some spacing for 2+ level sub menus in collapsible mode */\n.navbar-nav.sm-collapsible .dropdown-menu .dropdown-menu {\n    margin: .5em;\n}\n\n\n/* Fix SmartMenus sub menus auto width (subMenusMinWidth/subMenusMaxWidth options) */\n.navbar-nav:not([data-sm-skip]) .dropdown-item {\n    white-space: normal;\n}\n\n.navbar-nav:not(.sm-collapsible) .sm-nowrap > li > .dropdown-item {\n    white-space: nowrap;\n}\n/******** end jquery smart menu bootstrap-4 *****************/\n\n.brand-header {\n    height: 100px;\n}\n\nheader .navbar {\n    top: 100px;\n}\n"
  },
  {
    "path": "src/sourceDev.WebApp/SharedThemes/pulse/wwwroot/js/bootstrap.bundle.js",
    "content": "/*!\n  * Bootstrap v5.0.2 (https://getbootstrap.com/)\n  * Copyright 2011-2021 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)\n  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n  */\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n  typeof define === 'function' && define.amd ? define(factory) :\n  (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.bootstrap = factory());\n}(this, (function () { 'use strict';\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): dom/selector-engine.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n  const NODE_TEXT = 3;\n  const SelectorEngine = {\n    find(selector, element = document.documentElement) {\n      return [].concat(...Element.prototype.querySelectorAll.call(element, selector));\n    },\n\n    findOne(selector, element = document.documentElement) {\n      return Element.prototype.querySelector.call(element, selector);\n    },\n\n    children(element, selector) {\n      return [].concat(...element.children).filter(child => child.matches(selector));\n    },\n\n    parents(element, selector) {\n      const parents = [];\n      let ancestor = element.parentNode;\n\n      while (ancestor && ancestor.nodeType === Node.ELEMENT_NODE && ancestor.nodeType !== NODE_TEXT) {\n        if (ancestor.matches(selector)) {\n          parents.push(ancestor);\n        }\n\n        ancestor = ancestor.parentNode;\n      }\n\n      return parents;\n    },\n\n    prev(element, selector) {\n      let previous = element.previousElementSibling;\n\n      while (previous) {\n        if (previous.matches(selector)) {\n          return [previous];\n        }\n\n        previous = previous.previousElementSibling;\n      }\n\n      return [];\n    },\n\n    next(element, selector) {\n      let next = element.nextElementSibling;\n\n      while (next) {\n        if (next.matches(selector)) {\n          return [next];\n        }\n\n        next = next.nextElementSibling;\n      }\n\n      return [];\n    }\n\n  };\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): util/index.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n\n  const MAX_UID = 1000000;\n  const MILLISECONDS_MULTIPLIER = 1000;\n  const TRANSITION_END = 'transitionend'; // Shoutout AngusCroll (https://goo.gl/pxwQGp)\n\n  const toType = obj => {\n    if (obj === null || obj === undefined) {\n      return `${obj}`;\n    }\n\n    return {}.toString.call(obj).match(/\\s([a-z]+)/i)[1].toLowerCase();\n  };\n  /**\n   * --------------------------------------------------------------------------\n   * Public Util Api\n   * --------------------------------------------------------------------------\n   */\n\n\n  const getUID = prefix => {\n    do {\n      prefix += Math.floor(Math.random() * MAX_UID);\n    } while (document.getElementById(prefix));\n\n    return prefix;\n  };\n\n  const getSelector = element => {\n    let selector = element.getAttribute('data-bs-target');\n\n    if (!selector || selector === '#') {\n      let hrefAttr = element.getAttribute('href'); // The only valid content that could double as a selector are IDs or classes,\n      // so everything starting with `#` or `.`. If a \"real\" URL is used as the selector,\n      // `document.querySelector` will rightfully complain it is invalid.\n      // See https://github.com/twbs/bootstrap/issues/32273\n\n      if (!hrefAttr || !hrefAttr.includes('#') && !hrefAttr.startsWith('.')) {\n        return null;\n      } // Just in case some CMS puts out a full URL with the anchor appended\n\n\n      if (hrefAttr.includes('#') && !hrefAttr.startsWith('#')) {\n        hrefAttr = `#${hrefAttr.split('#')[1]}`;\n      }\n\n      selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : null;\n    }\n\n    return selector;\n  };\n\n  const getSelectorFromElement = element => {\n    const selector = getSelector(element);\n\n    if (selector) {\n      return document.querySelector(selector) ? selector : null;\n    }\n\n    return null;\n  };\n\n  const getElementFromSelector = element => {\n    const selector = getSelector(element);\n    return selector ? document.querySelector(selector) : null;\n  };\n\n  const getTransitionDurationFromElement = element => {\n    if (!element) {\n      return 0;\n    } // Get transition-duration of the element\n\n\n    let {\n      transitionDuration,\n      transitionDelay\n    } = window.getComputedStyle(element);\n    const floatTransitionDuration = Number.parseFloat(transitionDuration);\n    const floatTransitionDelay = Number.parseFloat(transitionDelay); // Return 0 if element or transition duration is not found\n\n    if (!floatTransitionDuration && !floatTransitionDelay) {\n      return 0;\n    } // If multiple durations are defined, take the first\n\n\n    transitionDuration = transitionDuration.split(',')[0];\n    transitionDelay = transitionDelay.split(',')[0];\n    return (Number.parseFloat(transitionDuration) + Number.parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER;\n  };\n\n  const triggerTransitionEnd = element => {\n    element.dispatchEvent(new Event(TRANSITION_END));\n  };\n\n  const isElement$1 = obj => {\n    if (!obj || typeof obj !== 'object') {\n      return false;\n    }\n\n    if (typeof obj.jquery !== 'undefined') {\n      obj = obj[0];\n    }\n\n    return typeof obj.nodeType !== 'undefined';\n  };\n\n  const getElement = obj => {\n    if (isElement$1(obj)) {\n      // it's a jQuery object or a node element\n      return obj.jquery ? obj[0] : obj;\n    }\n\n    if (typeof obj === 'string' && obj.length > 0) {\n      return SelectorEngine.findOne(obj);\n    }\n\n    return null;\n  };\n\n  const typeCheckConfig = (componentName, config, configTypes) => {\n    Object.keys(configTypes).forEach(property => {\n      const expectedTypes = configTypes[property];\n      const value = config[property];\n      const valueType = value && isElement$1(value) ? 'element' : toType(value);\n\n      if (!new RegExp(expectedTypes).test(valueType)) {\n        throw new TypeError(`${componentName.toUpperCase()}: Option \"${property}\" provided type \"${valueType}\" but expected type \"${expectedTypes}\".`);\n      }\n    });\n  };\n\n  const isVisible = element => {\n    if (!isElement$1(element) || element.getClientRects().length === 0) {\n      return false;\n    }\n\n    return getComputedStyle(element).getPropertyValue('visibility') === 'visible';\n  };\n\n  const isDisabled = element => {\n    if (!element || element.nodeType !== Node.ELEMENT_NODE) {\n      return true;\n    }\n\n    if (element.classList.contains('disabled')) {\n      return true;\n    }\n\n    if (typeof element.disabled !== 'undefined') {\n      return element.disabled;\n    }\n\n    return element.hasAttribute('disabled') && element.getAttribute('disabled') !== 'false';\n  };\n\n  const findShadowRoot = element => {\n    if (!document.documentElement.attachShadow) {\n      return null;\n    } // Can find the shadow root otherwise it'll return the document\n\n\n    if (typeof element.getRootNode === 'function') {\n      const root = element.getRootNode();\n      return root instanceof ShadowRoot ? root : null;\n    }\n\n    if (element instanceof ShadowRoot) {\n      return element;\n    } // when we don't find a shadow root\n\n\n    if (!element.parentNode) {\n      return null;\n    }\n\n    return findShadowRoot(element.parentNode);\n  };\n\n  const noop = () => {};\n\n  const reflow = element => element.offsetHeight;\n\n  const getjQuery = () => {\n    const {\n      jQuery\n    } = window;\n\n    if (jQuery && !document.body.hasAttribute('data-bs-no-jquery')) {\n      return jQuery;\n    }\n\n    return null;\n  };\n\n  const DOMContentLoadedCallbacks = [];\n\n  const onDOMContentLoaded = callback => {\n    if (document.readyState === 'loading') {\n      // add listener on the first call when the document is in loading state\n      if (!DOMContentLoadedCallbacks.length) {\n        document.addEventListener('DOMContentLoaded', () => {\n          DOMContentLoadedCallbacks.forEach(callback => callback());\n        });\n      }\n\n      DOMContentLoadedCallbacks.push(callback);\n    } else {\n      callback();\n    }\n  };\n\n  const isRTL = () => document.documentElement.dir === 'rtl';\n\n  const defineJQueryPlugin = plugin => {\n    onDOMContentLoaded(() => {\n      const $ = getjQuery();\n      /* istanbul ignore if */\n\n      if ($) {\n        const name = plugin.NAME;\n        const JQUERY_NO_CONFLICT = $.fn[name];\n        $.fn[name] = plugin.jQueryInterface;\n        $.fn[name].Constructor = plugin;\n\n        $.fn[name].noConflict = () => {\n          $.fn[name] = JQUERY_NO_CONFLICT;\n          return plugin.jQueryInterface;\n        };\n      }\n    });\n  };\n\n  const execute = callback => {\n    if (typeof callback === 'function') {\n      callback();\n    }\n  };\n\n  const executeAfterTransition = (callback, transitionElement, waitForTransition = true) => {\n    if (!waitForTransition) {\n      execute(callback);\n      return;\n    }\n\n    const durationPadding = 5;\n    const emulatedDuration = getTransitionDurationFromElement(transitionElement) + durationPadding;\n    let called = false;\n\n    const handler = ({\n      target\n    }) => {\n      if (target !== transitionElement) {\n        return;\n      }\n\n      called = true;\n      transitionElement.removeEventListener(TRANSITION_END, handler);\n      execute(callback);\n    };\n\n    transitionElement.addEventListener(TRANSITION_END, handler);\n    setTimeout(() => {\n      if (!called) {\n        triggerTransitionEnd(transitionElement);\n      }\n    }, emulatedDuration);\n  };\n  /**\n   * Return the previous/next element of a list.\n   *\n   * @param {array} list    The list of elements\n   * @param activeElement   The active element\n   * @param shouldGetNext   Choose to get next or previous element\n   * @param isCycleAllowed\n   * @return {Element|elem} The proper element\n   */\n\n\n  const getNextActiveElement = (list, activeElement, shouldGetNext, isCycleAllowed) => {\n    let index = list.indexOf(activeElement); // if the element does not exist in the list return an element depending on the direction and if cycle is allowed\n\n    if (index === -1) {\n      return list[!shouldGetNext && isCycleAllowed ? list.length - 1 : 0];\n    }\n\n    const listLength = list.length;\n    index += shouldGetNext ? 1 : -1;\n\n    if (isCycleAllowed) {\n      index = (index + listLength) % listLength;\n    }\n\n    return list[Math.max(0, Math.min(index, listLength - 1))];\n  };\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): dom/event-handler.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const namespaceRegex = /[^.]*(?=\\..*)\\.|.*/;\n  const stripNameRegex = /\\..*/;\n  const stripUidRegex = /::\\d+$/;\n  const eventRegistry = {}; // Events storage\n\n  let uidEvent = 1;\n  const customEvents = {\n    mouseenter: 'mouseover',\n    mouseleave: 'mouseout'\n  };\n  const customEventsRegex = /^(mouseenter|mouseleave)/i;\n  const nativeEvents = new Set(['click', 'dblclick', 'mouseup', 'mousedown', 'contextmenu', 'mousewheel', 'DOMMouseScroll', 'mouseover', 'mouseout', 'mousemove', 'selectstart', 'selectend', 'keydown', 'keypress', 'keyup', 'orientationchange', 'touchstart', 'touchmove', 'touchend', 'touchcancel', 'pointerdown', 'pointermove', 'pointerup', 'pointerleave', 'pointercancel', 'gesturestart', 'gesturechange', 'gestureend', 'focus', 'blur', 'change', 'reset', 'select', 'submit', 'focusin', 'focusout', 'load', 'unload', 'beforeunload', 'resize', 'move', 'DOMContentLoaded', 'readystatechange', 'error', 'abort', 'scroll']);\n  /**\n   * ------------------------------------------------------------------------\n   * Private methods\n   * ------------------------------------------------------------------------\n   */\n\n  function getUidEvent(element, uid) {\n    return uid && `${uid}::${uidEvent++}` || element.uidEvent || uidEvent++;\n  }\n\n  function getEvent(element) {\n    const uid = getUidEvent(element);\n    element.uidEvent = uid;\n    eventRegistry[uid] = eventRegistry[uid] || {};\n    return eventRegistry[uid];\n  }\n\n  function bootstrapHandler(element, fn) {\n    return function handler(event) {\n      event.delegateTarget = element;\n\n      if (handler.oneOff) {\n        EventHandler.off(element, event.type, fn);\n      }\n\n      return fn.apply(element, [event]);\n    };\n  }\n\n  function bootstrapDelegationHandler(element, selector, fn) {\n    return function handler(event) {\n      const domElements = element.querySelectorAll(selector);\n\n      for (let {\n        target\n      } = event; target && target !== this; target = target.parentNode) {\n        for (let i = domElements.length; i--;) {\n          if (domElements[i] === target) {\n            event.delegateTarget = target;\n\n            if (handler.oneOff) {\n              // eslint-disable-next-line unicorn/consistent-destructuring\n              EventHandler.off(element, event.type, selector, fn);\n            }\n\n            return fn.apply(target, [event]);\n          }\n        }\n      } // To please ESLint\n\n\n      return null;\n    };\n  }\n\n  function findHandler(events, handler, delegationSelector = null) {\n    const uidEventList = Object.keys(events);\n\n    for (let i = 0, len = uidEventList.length; i < len; i++) {\n      const event = events[uidEventList[i]];\n\n      if (event.originalHandler === handler && event.delegationSelector === delegationSelector) {\n        return event;\n      }\n    }\n\n    return null;\n  }\n\n  function normalizeParams(originalTypeEvent, handler, delegationFn) {\n    const delegation = typeof handler === 'string';\n    const originalHandler = delegation ? delegationFn : handler;\n    let typeEvent = getTypeEvent(originalTypeEvent);\n    const isNative = nativeEvents.has(typeEvent);\n\n    if (!isNative) {\n      typeEvent = originalTypeEvent;\n    }\n\n    return [delegation, originalHandler, typeEvent];\n  }\n\n  function addHandler(element, originalTypeEvent, handler, delegationFn, oneOff) {\n    if (typeof originalTypeEvent !== 'string' || !element) {\n      return;\n    }\n\n    if (!handler) {\n      handler = delegationFn;\n      delegationFn = null;\n    } // in case of mouseenter or mouseleave wrap the handler within a function that checks for its DOM position\n    // this prevents the handler from being dispatched the same way as mouseover or mouseout does\n\n\n    if (customEventsRegex.test(originalTypeEvent)) {\n      const wrapFn = fn => {\n        return function (event) {\n          if (!event.relatedTarget || event.relatedTarget !== event.delegateTarget && !event.delegateTarget.contains(event.relatedTarget)) {\n            return fn.call(this, event);\n          }\n        };\n      };\n\n      if (delegationFn) {\n        delegationFn = wrapFn(delegationFn);\n      } else {\n        handler = wrapFn(handler);\n      }\n    }\n\n    const [delegation, originalHandler, typeEvent] = normalizeParams(originalTypeEvent, handler, delegationFn);\n    const events = getEvent(element);\n    const handlers = events[typeEvent] || (events[typeEvent] = {});\n    const previousFn = findHandler(handlers, originalHandler, delegation ? handler : null);\n\n    if (previousFn) {\n      previousFn.oneOff = previousFn.oneOff && oneOff;\n      return;\n    }\n\n    const uid = getUidEvent(originalHandler, originalTypeEvent.replace(namespaceRegex, ''));\n    const fn = delegation ? bootstrapDelegationHandler(element, handler, delegationFn) : bootstrapHandler(element, handler);\n    fn.delegationSelector = delegation ? handler : null;\n    fn.originalHandler = originalHandler;\n    fn.oneOff = oneOff;\n    fn.uidEvent = uid;\n    handlers[uid] = fn;\n    element.addEventListener(typeEvent, fn, delegation);\n  }\n\n  function removeHandler(element, events, typeEvent, handler, delegationSelector) {\n    const fn = findHandler(events[typeEvent], handler, delegationSelector);\n\n    if (!fn) {\n      return;\n    }\n\n    element.removeEventListener(typeEvent, fn, Boolean(delegationSelector));\n    delete events[typeEvent][fn.uidEvent];\n  }\n\n  function removeNamespacedHandlers(element, events, typeEvent, namespace) {\n    const storeElementEvent = events[typeEvent] || {};\n    Object.keys(storeElementEvent).forEach(handlerKey => {\n      if (handlerKey.includes(namespace)) {\n        const event = storeElementEvent[handlerKey];\n        removeHandler(element, events, typeEvent, event.originalHandler, event.delegationSelector);\n      }\n    });\n  }\n\n  function getTypeEvent(event) {\n    // allow to get the native events from namespaced events ('click.bs.button' --> 'click')\n    event = event.replace(stripNameRegex, '');\n    return customEvents[event] || event;\n  }\n\n  const EventHandler = {\n    on(element, event, handler, delegationFn) {\n      addHandler(element, event, handler, delegationFn, false);\n    },\n\n    one(element, event, handler, delegationFn) {\n      addHandler(element, event, handler, delegationFn, true);\n    },\n\n    off(element, originalTypeEvent, handler, delegationFn) {\n      if (typeof originalTypeEvent !== 'string' || !element) {\n        return;\n      }\n\n      const [delegation, originalHandler, typeEvent] = normalizeParams(originalTypeEvent, handler, delegationFn);\n      const inNamespace = typeEvent !== originalTypeEvent;\n      const events = getEvent(element);\n      const isNamespace = originalTypeEvent.startsWith('.');\n\n      if (typeof originalHandler !== 'undefined') {\n        // Simplest case: handler is passed, remove that listener ONLY.\n        if (!events || !events[typeEvent]) {\n          return;\n        }\n\n        removeHandler(element, events, typeEvent, originalHandler, delegation ? handler : null);\n        return;\n      }\n\n      if (isNamespace) {\n        Object.keys(events).forEach(elementEvent => {\n          removeNamespacedHandlers(element, events, elementEvent, originalTypeEvent.slice(1));\n        });\n      }\n\n      const storeElementEvent = events[typeEvent] || {};\n      Object.keys(storeElementEvent).forEach(keyHandlers => {\n        const handlerKey = keyHandlers.replace(stripUidRegex, '');\n\n        if (!inNamespace || originalTypeEvent.includes(handlerKey)) {\n          const event = storeElementEvent[keyHandlers];\n          removeHandler(element, events, typeEvent, event.originalHandler, event.delegationSelector);\n        }\n      });\n    },\n\n    trigger(element, event, args) {\n      if (typeof event !== 'string' || !element) {\n        return null;\n      }\n\n      const $ = getjQuery();\n      const typeEvent = getTypeEvent(event);\n      const inNamespace = event !== typeEvent;\n      const isNative = nativeEvents.has(typeEvent);\n      let jQueryEvent;\n      let bubbles = true;\n      let nativeDispatch = true;\n      let defaultPrevented = false;\n      let evt = null;\n\n      if (inNamespace && $) {\n        jQueryEvent = $.Event(event, args);\n        $(element).trigger(jQueryEvent);\n        bubbles = !jQueryEvent.isPropagationStopped();\n        nativeDispatch = !jQueryEvent.isImmediatePropagationStopped();\n        defaultPrevented = jQueryEvent.isDefaultPrevented();\n      }\n\n      if (isNative) {\n        evt = document.createEvent('HTMLEvents');\n        evt.initEvent(typeEvent, bubbles, true);\n      } else {\n        evt = new CustomEvent(event, {\n          bubbles,\n          cancelable: true\n        });\n      } // merge custom information in our event\n\n\n      if (typeof args !== 'undefined') {\n        Object.keys(args).forEach(key => {\n          Object.defineProperty(evt, key, {\n            get() {\n              return args[key];\n            }\n\n          });\n        });\n      }\n\n      if (defaultPrevented) {\n        evt.preventDefault();\n      }\n\n      if (nativeDispatch) {\n        element.dispatchEvent(evt);\n      }\n\n      if (evt.defaultPrevented && typeof jQueryEvent !== 'undefined') {\n        jQueryEvent.preventDefault();\n      }\n\n      return evt;\n    }\n\n  };\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): dom/data.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n  const elementMap = new Map();\n  var Data = {\n    set(element, key, instance) {\n      if (!elementMap.has(element)) {\n        elementMap.set(element, new Map());\n      }\n\n      const instanceMap = elementMap.get(element); // make it clear we only want one instance per element\n      // can be removed later when multiple key/instances are fine to be used\n\n      if (!instanceMap.has(key) && instanceMap.size !== 0) {\n        // eslint-disable-next-line no-console\n        console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(instanceMap.keys())[0]}.`);\n        return;\n      }\n\n      instanceMap.set(key, instance);\n    },\n\n    get(element, key) {\n      if (elementMap.has(element)) {\n        return elementMap.get(element).get(key) || null;\n      }\n\n      return null;\n    },\n\n    remove(element, key) {\n      if (!elementMap.has(element)) {\n        return;\n      }\n\n      const instanceMap = elementMap.get(element);\n      instanceMap.delete(key); // free up element references if there are no instances left for an element\n\n      if (instanceMap.size === 0) {\n        elementMap.delete(element);\n      }\n    }\n\n  };\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): base-component.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const VERSION = '5.0.2';\n\n  class BaseComponent {\n    constructor(element) {\n      element = getElement(element);\n\n      if (!element) {\n        return;\n      }\n\n      this._element = element;\n      Data.set(this._element, this.constructor.DATA_KEY, this);\n    }\n\n    dispose() {\n      Data.remove(this._element, this.constructor.DATA_KEY);\n      EventHandler.off(this._element, this.constructor.EVENT_KEY);\n      Object.getOwnPropertyNames(this).forEach(propertyName => {\n        this[propertyName] = null;\n      });\n    }\n\n    _queueCallback(callback, element, isAnimated = true) {\n      executeAfterTransition(callback, element, isAnimated);\n    }\n    /** Static */\n\n\n    static getInstance(element) {\n      return Data.get(element, this.DATA_KEY);\n    }\n\n    static getOrCreateInstance(element, config = {}) {\n      return this.getInstance(element) || new this(element, typeof config === 'object' ? config : null);\n    }\n\n    static get VERSION() {\n      return VERSION;\n    }\n\n    static get NAME() {\n      throw new Error('You have to implement the static method \"NAME\", for each component!');\n    }\n\n    static get DATA_KEY() {\n      return `bs.${this.NAME}`;\n    }\n\n    static get EVENT_KEY() {\n      return `.${this.DATA_KEY}`;\n    }\n\n  }\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): alert.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$c = 'alert';\n  const DATA_KEY$b = 'bs.alert';\n  const EVENT_KEY$b = `.${DATA_KEY$b}`;\n  const DATA_API_KEY$8 = '.data-api';\n  const SELECTOR_DISMISS = '[data-bs-dismiss=\"alert\"]';\n  const EVENT_CLOSE = `close${EVENT_KEY$b}`;\n  const EVENT_CLOSED = `closed${EVENT_KEY$b}`;\n  const EVENT_CLICK_DATA_API$7 = `click${EVENT_KEY$b}${DATA_API_KEY$8}`;\n  const CLASS_NAME_ALERT = 'alert';\n  const CLASS_NAME_FADE$6 = 'fade';\n  const CLASS_NAME_SHOW$9 = 'show';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Alert extends BaseComponent {\n    // Getters\n    static get NAME() {\n      return NAME$c;\n    } // Public\n\n\n    close(element) {\n      const rootElement = element ? this._getRootElement(element) : this._element;\n\n      const customEvent = this._triggerCloseEvent(rootElement);\n\n      if (customEvent === null || customEvent.defaultPrevented) {\n        return;\n      }\n\n      this._removeElement(rootElement);\n    } // Private\n\n\n    _getRootElement(element) {\n      return getElementFromSelector(element) || element.closest(`.${CLASS_NAME_ALERT}`);\n    }\n\n    _triggerCloseEvent(element) {\n      return EventHandler.trigger(element, EVENT_CLOSE);\n    }\n\n    _removeElement(element) {\n      element.classList.remove(CLASS_NAME_SHOW$9);\n      const isAnimated = element.classList.contains(CLASS_NAME_FADE$6);\n\n      this._queueCallback(() => this._destroyElement(element), element, isAnimated);\n    }\n\n    _destroyElement(element) {\n      element.remove();\n      EventHandler.trigger(element, EVENT_CLOSED);\n    } // Static\n\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = Alert.getOrCreateInstance(this);\n\n        if (config === 'close') {\n          data[config](this);\n        }\n      });\n    }\n\n    static handleDismiss(alertInstance) {\n      return function (event) {\n        if (event) {\n          event.preventDefault();\n        }\n\n        alertInstance.close(this);\n      };\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(document, EVENT_CLICK_DATA_API$7, SELECTOR_DISMISS, Alert.handleDismiss(new Alert()));\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Alert to jQuery only if jQuery is present\n   */\n\n  defineJQueryPlugin(Alert);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): button.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$b = 'button';\n  const DATA_KEY$a = 'bs.button';\n  const EVENT_KEY$a = `.${DATA_KEY$a}`;\n  const DATA_API_KEY$7 = '.data-api';\n  const CLASS_NAME_ACTIVE$3 = 'active';\n  const SELECTOR_DATA_TOGGLE$5 = '[data-bs-toggle=\"button\"]';\n  const EVENT_CLICK_DATA_API$6 = `click${EVENT_KEY$a}${DATA_API_KEY$7}`;\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Button extends BaseComponent {\n    // Getters\n    static get NAME() {\n      return NAME$b;\n    } // Public\n\n\n    toggle() {\n      // Toggle class and sync the `aria-pressed` attribute with the return value of the `.toggle()` method\n      this._element.setAttribute('aria-pressed', this._element.classList.toggle(CLASS_NAME_ACTIVE$3));\n    } // Static\n\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = Button.getOrCreateInstance(this);\n\n        if (config === 'toggle') {\n          data[config]();\n        }\n      });\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(document, EVENT_CLICK_DATA_API$6, SELECTOR_DATA_TOGGLE$5, event => {\n    event.preventDefault();\n    const button = event.target.closest(SELECTOR_DATA_TOGGLE$5);\n    const data = Button.getOrCreateInstance(button);\n    data.toggle();\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Button to jQuery only if jQuery is present\n   */\n\n  defineJQueryPlugin(Button);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): dom/manipulator.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  function normalizeData(val) {\n    if (val === 'true') {\n      return true;\n    }\n\n    if (val === 'false') {\n      return false;\n    }\n\n    if (val === Number(val).toString()) {\n      return Number(val);\n    }\n\n    if (val === '' || val === 'null') {\n      return null;\n    }\n\n    return val;\n  }\n\n  function normalizeDataKey(key) {\n    return key.replace(/[A-Z]/g, chr => `-${chr.toLowerCase()}`);\n  }\n\n  const Manipulator = {\n    setDataAttribute(element, key, value) {\n      element.setAttribute(`data-bs-${normalizeDataKey(key)}`, value);\n    },\n\n    removeDataAttribute(element, key) {\n      element.removeAttribute(`data-bs-${normalizeDataKey(key)}`);\n    },\n\n    getDataAttributes(element) {\n      if (!element) {\n        return {};\n      }\n\n      const attributes = {};\n      Object.keys(element.dataset).filter(key => key.startsWith('bs')).forEach(key => {\n        let pureKey = key.replace(/^bs/, '');\n        pureKey = pureKey.charAt(0).toLowerCase() + pureKey.slice(1, pureKey.length);\n        attributes[pureKey] = normalizeData(element.dataset[key]);\n      });\n      return attributes;\n    },\n\n    getDataAttribute(element, key) {\n      return normalizeData(element.getAttribute(`data-bs-${normalizeDataKey(key)}`));\n    },\n\n    offset(element) {\n      const rect = element.getBoundingClientRect();\n      return {\n        top: rect.top + document.body.scrollTop,\n        left: rect.left + document.body.scrollLeft\n      };\n    },\n\n    position(element) {\n      return {\n        top: element.offsetTop,\n        left: element.offsetLeft\n      };\n    }\n\n  };\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): carousel.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$a = 'carousel';\n  const DATA_KEY$9 = 'bs.carousel';\n  const EVENT_KEY$9 = `.${DATA_KEY$9}`;\n  const DATA_API_KEY$6 = '.data-api';\n  const ARROW_LEFT_KEY = 'ArrowLeft';\n  const ARROW_RIGHT_KEY = 'ArrowRight';\n  const TOUCHEVENT_COMPAT_WAIT = 500; // Time for mouse compat events to fire after touch\n\n  const SWIPE_THRESHOLD = 40;\n  const Default$9 = {\n    interval: 5000,\n    keyboard: true,\n    slide: false,\n    pause: 'hover',\n    wrap: true,\n    touch: true\n  };\n  const DefaultType$9 = {\n    interval: '(number|boolean)',\n    keyboard: 'boolean',\n    slide: '(boolean|string)',\n    pause: '(string|boolean)',\n    wrap: 'boolean',\n    touch: 'boolean'\n  };\n  const ORDER_NEXT = 'next';\n  const ORDER_PREV = 'prev';\n  const DIRECTION_LEFT = 'left';\n  const DIRECTION_RIGHT = 'right';\n  const KEY_TO_DIRECTION = {\n    [ARROW_LEFT_KEY]: DIRECTION_RIGHT,\n    [ARROW_RIGHT_KEY]: DIRECTION_LEFT\n  };\n  const EVENT_SLIDE = `slide${EVENT_KEY$9}`;\n  const EVENT_SLID = `slid${EVENT_KEY$9}`;\n  const EVENT_KEYDOWN = `keydown${EVENT_KEY$9}`;\n  const EVENT_MOUSEENTER = `mouseenter${EVENT_KEY$9}`;\n  const EVENT_MOUSELEAVE = `mouseleave${EVENT_KEY$9}`;\n  const EVENT_TOUCHSTART = `touchstart${EVENT_KEY$9}`;\n  const EVENT_TOUCHMOVE = `touchmove${EVENT_KEY$9}`;\n  const EVENT_TOUCHEND = `touchend${EVENT_KEY$9}`;\n  const EVENT_POINTERDOWN = `pointerdown${EVENT_KEY$9}`;\n  const EVENT_POINTERUP = `pointerup${EVENT_KEY$9}`;\n  const EVENT_DRAG_START = `dragstart${EVENT_KEY$9}`;\n  const EVENT_LOAD_DATA_API$2 = `load${EVENT_KEY$9}${DATA_API_KEY$6}`;\n  const EVENT_CLICK_DATA_API$5 = `click${EVENT_KEY$9}${DATA_API_KEY$6}`;\n  const CLASS_NAME_CAROUSEL = 'carousel';\n  const CLASS_NAME_ACTIVE$2 = 'active';\n  const CLASS_NAME_SLIDE = 'slide';\n  const CLASS_NAME_END = 'carousel-item-end';\n  const CLASS_NAME_START = 'carousel-item-start';\n  const CLASS_NAME_NEXT = 'carousel-item-next';\n  const CLASS_NAME_PREV = 'carousel-item-prev';\n  const CLASS_NAME_POINTER_EVENT = 'pointer-event';\n  const SELECTOR_ACTIVE$1 = '.active';\n  const SELECTOR_ACTIVE_ITEM = '.active.carousel-item';\n  const SELECTOR_ITEM = '.carousel-item';\n  const SELECTOR_ITEM_IMG = '.carousel-item img';\n  const SELECTOR_NEXT_PREV = '.carousel-item-next, .carousel-item-prev';\n  const SELECTOR_INDICATORS = '.carousel-indicators';\n  const SELECTOR_INDICATOR = '[data-bs-target]';\n  const SELECTOR_DATA_SLIDE = '[data-bs-slide], [data-bs-slide-to]';\n  const SELECTOR_DATA_RIDE = '[data-bs-ride=\"carousel\"]';\n  const POINTER_TYPE_TOUCH = 'touch';\n  const POINTER_TYPE_PEN = 'pen';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Carousel extends BaseComponent {\n    constructor(element, config) {\n      super(element);\n      this._items = null;\n      this._interval = null;\n      this._activeElement = null;\n      this._isPaused = false;\n      this._isSliding = false;\n      this.touchTimeout = null;\n      this.touchStartX = 0;\n      this.touchDeltaX = 0;\n      this._config = this._getConfig(config);\n      this._indicatorsElement = SelectorEngine.findOne(SELECTOR_INDICATORS, this._element);\n      this._touchSupported = 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0;\n      this._pointerEvent = Boolean(window.PointerEvent);\n\n      this._addEventListeners();\n    } // Getters\n\n\n    static get Default() {\n      return Default$9;\n    }\n\n    static get NAME() {\n      return NAME$a;\n    } // Public\n\n\n    next() {\n      this._slide(ORDER_NEXT);\n    }\n\n    nextWhenVisible() {\n      // Don't call next when the page isn't visible\n      // or the carousel or its parent isn't visible\n      if (!document.hidden && isVisible(this._element)) {\n        this.next();\n      }\n    }\n\n    prev() {\n      this._slide(ORDER_PREV);\n    }\n\n    pause(event) {\n      if (!event) {\n        this._isPaused = true;\n      }\n\n      if (SelectorEngine.findOne(SELECTOR_NEXT_PREV, this._element)) {\n        triggerTransitionEnd(this._element);\n        this.cycle(true);\n      }\n\n      clearInterval(this._interval);\n      this._interval = null;\n    }\n\n    cycle(event) {\n      if (!event) {\n        this._isPaused = false;\n      }\n\n      if (this._interval) {\n        clearInterval(this._interval);\n        this._interval = null;\n      }\n\n      if (this._config && this._config.interval && !this._isPaused) {\n        this._updateInterval();\n\n        this._interval = setInterval((document.visibilityState ? this.nextWhenVisible : this.next).bind(this), this._config.interval);\n      }\n    }\n\n    to(index) {\n      this._activeElement = SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element);\n\n      const activeIndex = this._getItemIndex(this._activeElement);\n\n      if (index > this._items.length - 1 || index < 0) {\n        return;\n      }\n\n      if (this._isSliding) {\n        EventHandler.one(this._element, EVENT_SLID, () => this.to(index));\n        return;\n      }\n\n      if (activeIndex === index) {\n        this.pause();\n        this.cycle();\n        return;\n      }\n\n      const order = index > activeIndex ? ORDER_NEXT : ORDER_PREV;\n\n      this._slide(order, this._items[index]);\n    } // Private\n\n\n    _getConfig(config) {\n      config = { ...Default$9,\n        ...Manipulator.getDataAttributes(this._element),\n        ...(typeof config === 'object' ? config : {})\n      };\n      typeCheckConfig(NAME$a, config, DefaultType$9);\n      return config;\n    }\n\n    _handleSwipe() {\n      const absDeltax = Math.abs(this.touchDeltaX);\n\n      if (absDeltax <= SWIPE_THRESHOLD) {\n        return;\n      }\n\n      const direction = absDeltax / this.touchDeltaX;\n      this.touchDeltaX = 0;\n\n      if (!direction) {\n        return;\n      }\n\n      this._slide(direction > 0 ? DIRECTION_RIGHT : DIRECTION_LEFT);\n    }\n\n    _addEventListeners() {\n      if (this._config.keyboard) {\n        EventHandler.on(this._element, EVENT_KEYDOWN, event => this._keydown(event));\n      }\n\n      if (this._config.pause === 'hover') {\n        EventHandler.on(this._element, EVENT_MOUSEENTER, event => this.pause(event));\n        EventHandler.on(this._element, EVENT_MOUSELEAVE, event => this.cycle(event));\n      }\n\n      if (this._config.touch && this._touchSupported) {\n        this._addTouchEventListeners();\n      }\n    }\n\n    _addTouchEventListeners() {\n      const start = event => {\n        if (this._pointerEvent && (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH)) {\n          this.touchStartX = event.clientX;\n        } else if (!this._pointerEvent) {\n          this.touchStartX = event.touches[0].clientX;\n        }\n      };\n\n      const move = event => {\n        // ensure swiping with one touch and not pinching\n        this.touchDeltaX = event.touches && event.touches.length > 1 ? 0 : event.touches[0].clientX - this.touchStartX;\n      };\n\n      const end = event => {\n        if (this._pointerEvent && (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH)) {\n          this.touchDeltaX = event.clientX - this.touchStartX;\n        }\n\n        this._handleSwipe();\n\n        if (this._config.pause === 'hover') {\n          // If it's a touch-enabled device, mouseenter/leave are fired as\n          // part of the mouse compatibility events on first tap - the carousel\n          // would stop cycling until user tapped out of it;\n          // here, we listen for touchend, explicitly pause the carousel\n          // (as if it's the second time we tap on it, mouseenter compat event\n          // is NOT fired) and after a timeout (to allow for mouse compatibility\n          // events to fire) we explicitly restart cycling\n          this.pause();\n\n          if (this.touchTimeout) {\n            clearTimeout(this.touchTimeout);\n          }\n\n          this.touchTimeout = setTimeout(event => this.cycle(event), TOUCHEVENT_COMPAT_WAIT + this._config.interval);\n        }\n      };\n\n      SelectorEngine.find(SELECTOR_ITEM_IMG, this._element).forEach(itemImg => {\n        EventHandler.on(itemImg, EVENT_DRAG_START, e => e.preventDefault());\n      });\n\n      if (this._pointerEvent) {\n        EventHandler.on(this._element, EVENT_POINTERDOWN, event => start(event));\n        EventHandler.on(this._element, EVENT_POINTERUP, event => end(event));\n\n        this._element.classList.add(CLASS_NAME_POINTER_EVENT);\n      } else {\n        EventHandler.on(this._element, EVENT_TOUCHSTART, event => start(event));\n        EventHandler.on(this._element, EVENT_TOUCHMOVE, event => move(event));\n        EventHandler.on(this._element, EVENT_TOUCHEND, event => end(event));\n      }\n    }\n\n    _keydown(event) {\n      if (/input|textarea/i.test(event.target.tagName)) {\n        return;\n      }\n\n      const direction = KEY_TO_DIRECTION[event.key];\n\n      if (direction) {\n        event.preventDefault();\n\n        this._slide(direction);\n      }\n    }\n\n    _getItemIndex(element) {\n      this._items = element && element.parentNode ? SelectorEngine.find(SELECTOR_ITEM, element.parentNode) : [];\n      return this._items.indexOf(element);\n    }\n\n    _getItemByOrder(order, activeElement) {\n      const isNext = order === ORDER_NEXT;\n      return getNextActiveElement(this._items, activeElement, isNext, this._config.wrap);\n    }\n\n    _triggerSlideEvent(relatedTarget, eventDirectionName) {\n      const targetIndex = this._getItemIndex(relatedTarget);\n\n      const fromIndex = this._getItemIndex(SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element));\n\n      return EventHandler.trigger(this._element, EVENT_SLIDE, {\n        relatedTarget,\n        direction: eventDirectionName,\n        from: fromIndex,\n        to: targetIndex\n      });\n    }\n\n    _setActiveIndicatorElement(element) {\n      if (this._indicatorsElement) {\n        const activeIndicator = SelectorEngine.findOne(SELECTOR_ACTIVE$1, this._indicatorsElement);\n        activeIndicator.classList.remove(CLASS_NAME_ACTIVE$2);\n        activeIndicator.removeAttribute('aria-current');\n        const indicators = SelectorEngine.find(SELECTOR_INDICATOR, this._indicatorsElement);\n\n        for (let i = 0; i < indicators.length; i++) {\n          if (Number.parseInt(indicators[i].getAttribute('data-bs-slide-to'), 10) === this._getItemIndex(element)) {\n            indicators[i].classList.add(CLASS_NAME_ACTIVE$2);\n            indicators[i].setAttribute('aria-current', 'true');\n            break;\n          }\n        }\n      }\n    }\n\n    _updateInterval() {\n      const element = this._activeElement || SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element);\n\n      if (!element) {\n        return;\n      }\n\n      const elementInterval = Number.parseInt(element.getAttribute('data-bs-interval'), 10);\n\n      if (elementInterval) {\n        this._config.defaultInterval = this._config.defaultInterval || this._config.interval;\n        this._config.interval = elementInterval;\n      } else {\n        this._config.interval = this._config.defaultInterval || this._config.interval;\n      }\n    }\n\n    _slide(directionOrOrder, element) {\n      const order = this._directionToOrder(directionOrOrder);\n\n      const activeElement = SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element);\n\n      const activeElementIndex = this._getItemIndex(activeElement);\n\n      const nextElement = element || this._getItemByOrder(order, activeElement);\n\n      const nextElementIndex = this._getItemIndex(nextElement);\n\n      const isCycling = Boolean(this._interval);\n      const isNext = order === ORDER_NEXT;\n      const directionalClassName = isNext ? CLASS_NAME_START : CLASS_NAME_END;\n      const orderClassName = isNext ? CLASS_NAME_NEXT : CLASS_NAME_PREV;\n\n      const eventDirectionName = this._orderToDirection(order);\n\n      if (nextElement && nextElement.classList.contains(CLASS_NAME_ACTIVE$2)) {\n        this._isSliding = false;\n        return;\n      }\n\n      if (this._isSliding) {\n        return;\n      }\n\n      const slideEvent = this._triggerSlideEvent(nextElement, eventDirectionName);\n\n      if (slideEvent.defaultPrevented) {\n        return;\n      }\n\n      if (!activeElement || !nextElement) {\n        // Some weirdness is happening, so we bail\n        return;\n      }\n\n      this._isSliding = true;\n\n      if (isCycling) {\n        this.pause();\n      }\n\n      this._setActiveIndicatorElement(nextElement);\n\n      this._activeElement = nextElement;\n\n      const triggerSlidEvent = () => {\n        EventHandler.trigger(this._element, EVENT_SLID, {\n          relatedTarget: nextElement,\n          direction: eventDirectionName,\n          from: activeElementIndex,\n          to: nextElementIndex\n        });\n      };\n\n      if (this._element.classList.contains(CLASS_NAME_SLIDE)) {\n        nextElement.classList.add(orderClassName);\n        reflow(nextElement);\n        activeElement.classList.add(directionalClassName);\n        nextElement.classList.add(directionalClassName);\n\n        const completeCallBack = () => {\n          nextElement.classList.remove(directionalClassName, orderClassName);\n          nextElement.classList.add(CLASS_NAME_ACTIVE$2);\n          activeElement.classList.remove(CLASS_NAME_ACTIVE$2, orderClassName, directionalClassName);\n          this._isSliding = false;\n          setTimeout(triggerSlidEvent, 0);\n        };\n\n        this._queueCallback(completeCallBack, activeElement, true);\n      } else {\n        activeElement.classList.remove(CLASS_NAME_ACTIVE$2);\n        nextElement.classList.add(CLASS_NAME_ACTIVE$2);\n        this._isSliding = false;\n        triggerSlidEvent();\n      }\n\n      if (isCycling) {\n        this.cycle();\n      }\n    }\n\n    _directionToOrder(direction) {\n      if (![DIRECTION_RIGHT, DIRECTION_LEFT].includes(direction)) {\n        return direction;\n      }\n\n      if (isRTL()) {\n        return direction === DIRECTION_LEFT ? ORDER_PREV : ORDER_NEXT;\n      }\n\n      return direction === DIRECTION_LEFT ? ORDER_NEXT : ORDER_PREV;\n    }\n\n    _orderToDirection(order) {\n      if (![ORDER_NEXT, ORDER_PREV].includes(order)) {\n        return order;\n      }\n\n      if (isRTL()) {\n        return order === ORDER_PREV ? DIRECTION_LEFT : DIRECTION_RIGHT;\n      }\n\n      return order === ORDER_PREV ? DIRECTION_RIGHT : DIRECTION_LEFT;\n    } // Static\n\n\n    static carouselInterface(element, config) {\n      const data = Carousel.getOrCreateInstance(element, config);\n      let {\n        _config\n      } = data;\n\n      if (typeof config === 'object') {\n        _config = { ..._config,\n          ...config\n        };\n      }\n\n      const action = typeof config === 'string' ? config : _config.slide;\n\n      if (typeof config === 'number') {\n        data.to(config);\n      } else if (typeof action === 'string') {\n        if (typeof data[action] === 'undefined') {\n          throw new TypeError(`No method named \"${action}\"`);\n        }\n\n        data[action]();\n      } else if (_config.interval && _config.ride) {\n        data.pause();\n        data.cycle();\n      }\n    }\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        Carousel.carouselInterface(this, config);\n      });\n    }\n\n    static dataApiClickHandler(event) {\n      const target = getElementFromSelector(this);\n\n      if (!target || !target.classList.contains(CLASS_NAME_CAROUSEL)) {\n        return;\n      }\n\n      const config = { ...Manipulator.getDataAttributes(target),\n        ...Manipulator.getDataAttributes(this)\n      };\n      const slideIndex = this.getAttribute('data-bs-slide-to');\n\n      if (slideIndex) {\n        config.interval = false;\n      }\n\n      Carousel.carouselInterface(target, config);\n\n      if (slideIndex) {\n        Carousel.getInstance(target).to(slideIndex);\n      }\n\n      event.preventDefault();\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(document, EVENT_CLICK_DATA_API$5, SELECTOR_DATA_SLIDE, Carousel.dataApiClickHandler);\n  EventHandler.on(window, EVENT_LOAD_DATA_API$2, () => {\n    const carousels = SelectorEngine.find(SELECTOR_DATA_RIDE);\n\n    for (let i = 0, len = carousels.length; i < len; i++) {\n      Carousel.carouselInterface(carousels[i], Carousel.getInstance(carousels[i]));\n    }\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Carousel to jQuery only if jQuery is present\n   */\n\n  defineJQueryPlugin(Carousel);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): collapse.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$9 = 'collapse';\n  const DATA_KEY$8 = 'bs.collapse';\n  const EVENT_KEY$8 = `.${DATA_KEY$8}`;\n  const DATA_API_KEY$5 = '.data-api';\n  const Default$8 = {\n    toggle: true,\n    parent: ''\n  };\n  const DefaultType$8 = {\n    toggle: 'boolean',\n    parent: '(string|element)'\n  };\n  const EVENT_SHOW$5 = `show${EVENT_KEY$8}`;\n  const EVENT_SHOWN$5 = `shown${EVENT_KEY$8}`;\n  const EVENT_HIDE$5 = `hide${EVENT_KEY$8}`;\n  const EVENT_HIDDEN$5 = `hidden${EVENT_KEY$8}`;\n  const EVENT_CLICK_DATA_API$4 = `click${EVENT_KEY$8}${DATA_API_KEY$5}`;\n  const CLASS_NAME_SHOW$8 = 'show';\n  const CLASS_NAME_COLLAPSE = 'collapse';\n  const CLASS_NAME_COLLAPSING = 'collapsing';\n  const CLASS_NAME_COLLAPSED = 'collapsed';\n  const WIDTH = 'width';\n  const HEIGHT = 'height';\n  const SELECTOR_ACTIVES = '.show, .collapsing';\n  const SELECTOR_DATA_TOGGLE$4 = '[data-bs-toggle=\"collapse\"]';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Collapse extends BaseComponent {\n    constructor(element, config) {\n      super(element);\n      this._isTransitioning = false;\n      this._config = this._getConfig(config);\n      this._triggerArray = SelectorEngine.find(`${SELECTOR_DATA_TOGGLE$4}[href=\"#${this._element.id}\"],` + `${SELECTOR_DATA_TOGGLE$4}[data-bs-target=\"#${this._element.id}\"]`);\n      const toggleList = SelectorEngine.find(SELECTOR_DATA_TOGGLE$4);\n\n      for (let i = 0, len = toggleList.length; i < len; i++) {\n        const elem = toggleList[i];\n        const selector = getSelectorFromElement(elem);\n        const filterElement = SelectorEngine.find(selector).filter(foundElem => foundElem === this._element);\n\n        if (selector !== null && filterElement.length) {\n          this._selector = selector;\n\n          this._triggerArray.push(elem);\n        }\n      }\n\n      this._parent = this._config.parent ? this._getParent() : null;\n\n      if (!this._config.parent) {\n        this._addAriaAndCollapsedClass(this._element, this._triggerArray);\n      }\n\n      if (this._config.toggle) {\n        this.toggle();\n      }\n    } // Getters\n\n\n    static get Default() {\n      return Default$8;\n    }\n\n    static get NAME() {\n      return NAME$9;\n    } // Public\n\n\n    toggle() {\n      if (this._element.classList.contains(CLASS_NAME_SHOW$8)) {\n        this.hide();\n      } else {\n        this.show();\n      }\n    }\n\n    show() {\n      if (this._isTransitioning || this._element.classList.contains(CLASS_NAME_SHOW$8)) {\n        return;\n      }\n\n      let actives;\n      let activesData;\n\n      if (this._parent) {\n        actives = SelectorEngine.find(SELECTOR_ACTIVES, this._parent).filter(elem => {\n          if (typeof this._config.parent === 'string') {\n            return elem.getAttribute('data-bs-parent') === this._config.parent;\n          }\n\n          return elem.classList.contains(CLASS_NAME_COLLAPSE);\n        });\n\n        if (actives.length === 0) {\n          actives = null;\n        }\n      }\n\n      const container = SelectorEngine.findOne(this._selector);\n\n      if (actives) {\n        const tempActiveData = actives.find(elem => container !== elem);\n        activesData = tempActiveData ? Collapse.getInstance(tempActiveData) : null;\n\n        if (activesData && activesData._isTransitioning) {\n          return;\n        }\n      }\n\n      const startEvent = EventHandler.trigger(this._element, EVENT_SHOW$5);\n\n      if (startEvent.defaultPrevented) {\n        return;\n      }\n\n      if (actives) {\n        actives.forEach(elemActive => {\n          if (container !== elemActive) {\n            Collapse.collapseInterface(elemActive, 'hide');\n          }\n\n          if (!activesData) {\n            Data.set(elemActive, DATA_KEY$8, null);\n          }\n        });\n      }\n\n      const dimension = this._getDimension();\n\n      this._element.classList.remove(CLASS_NAME_COLLAPSE);\n\n      this._element.classList.add(CLASS_NAME_COLLAPSING);\n\n      this._element.style[dimension] = 0;\n\n      if (this._triggerArray.length) {\n        this._triggerArray.forEach(element => {\n          element.classList.remove(CLASS_NAME_COLLAPSED);\n          element.setAttribute('aria-expanded', true);\n        });\n      }\n\n      this.setTransitioning(true);\n\n      const complete = () => {\n        this._element.classList.remove(CLASS_NAME_COLLAPSING);\n\n        this._element.classList.add(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$8);\n\n        this._element.style[dimension] = '';\n        this.setTransitioning(false);\n        EventHandler.trigger(this._element, EVENT_SHOWN$5);\n      };\n\n      const capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1);\n      const scrollSize = `scroll${capitalizedDimension}`;\n\n      this._queueCallback(complete, this._element, true);\n\n      this._element.style[dimension] = `${this._element[scrollSize]}px`;\n    }\n\n    hide() {\n      if (this._isTransitioning || !this._element.classList.contains(CLASS_NAME_SHOW$8)) {\n        return;\n      }\n\n      const startEvent = EventHandler.trigger(this._element, EVENT_HIDE$5);\n\n      if (startEvent.defaultPrevented) {\n        return;\n      }\n\n      const dimension = this._getDimension();\n\n      this._element.style[dimension] = `${this._element.getBoundingClientRect()[dimension]}px`;\n      reflow(this._element);\n\n      this._element.classList.add(CLASS_NAME_COLLAPSING);\n\n      this._element.classList.remove(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$8);\n\n      const triggerArrayLength = this._triggerArray.length;\n\n      if (triggerArrayLength > 0) {\n        for (let i = 0; i < triggerArrayLength; i++) {\n          const trigger = this._triggerArray[i];\n          const elem = getElementFromSelector(trigger);\n\n          if (elem && !elem.classList.contains(CLASS_NAME_SHOW$8)) {\n            trigger.classList.add(CLASS_NAME_COLLAPSED);\n            trigger.setAttribute('aria-expanded', false);\n          }\n        }\n      }\n\n      this.setTransitioning(true);\n\n      const complete = () => {\n        this.setTransitioning(false);\n\n        this._element.classList.remove(CLASS_NAME_COLLAPSING);\n\n        this._element.classList.add(CLASS_NAME_COLLAPSE);\n\n        EventHandler.trigger(this._element, EVENT_HIDDEN$5);\n      };\n\n      this._element.style[dimension] = '';\n\n      this._queueCallback(complete, this._element, true);\n    }\n\n    setTransitioning(isTransitioning) {\n      this._isTransitioning = isTransitioning;\n    } // Private\n\n\n    _getConfig(config) {\n      config = { ...Default$8,\n        ...config\n      };\n      config.toggle = Boolean(config.toggle); // Coerce string values\n\n      typeCheckConfig(NAME$9, config, DefaultType$8);\n      return config;\n    }\n\n    _getDimension() {\n      return this._element.classList.contains(WIDTH) ? WIDTH : HEIGHT;\n    }\n\n    _getParent() {\n      let {\n        parent\n      } = this._config;\n      parent = getElement(parent);\n      const selector = `${SELECTOR_DATA_TOGGLE$4}[data-bs-parent=\"${parent}\"]`;\n      SelectorEngine.find(selector, parent).forEach(element => {\n        const selected = getElementFromSelector(element);\n\n        this._addAriaAndCollapsedClass(selected, [element]);\n      });\n      return parent;\n    }\n\n    _addAriaAndCollapsedClass(element, triggerArray) {\n      if (!element || !triggerArray.length) {\n        return;\n      }\n\n      const isOpen = element.classList.contains(CLASS_NAME_SHOW$8);\n      triggerArray.forEach(elem => {\n        if (isOpen) {\n          elem.classList.remove(CLASS_NAME_COLLAPSED);\n        } else {\n          elem.classList.add(CLASS_NAME_COLLAPSED);\n        }\n\n        elem.setAttribute('aria-expanded', isOpen);\n      });\n    } // Static\n\n\n    static collapseInterface(element, config) {\n      let data = Collapse.getInstance(element);\n      const _config = { ...Default$8,\n        ...Manipulator.getDataAttributes(element),\n        ...(typeof config === 'object' && config ? config : {})\n      };\n\n      if (!data && _config.toggle && typeof config === 'string' && /show|hide/.test(config)) {\n        _config.toggle = false;\n      }\n\n      if (!data) {\n        data = new Collapse(element, _config);\n      }\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config]();\n      }\n    }\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        Collapse.collapseInterface(this, config);\n      });\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(document, EVENT_CLICK_DATA_API$4, SELECTOR_DATA_TOGGLE$4, function (event) {\n    // preventDefault only for <a> elements (which change the URL) not inside the collapsible element\n    if (event.target.tagName === 'A' || event.delegateTarget && event.delegateTarget.tagName === 'A') {\n      event.preventDefault();\n    }\n\n    const triggerData = Manipulator.getDataAttributes(this);\n    const selector = getSelectorFromElement(this);\n    const selectorElements = SelectorEngine.find(selector);\n    selectorElements.forEach(element => {\n      const data = Collapse.getInstance(element);\n      let config;\n\n      if (data) {\n        // update parent attribute\n        if (data._parent === null && typeof triggerData.parent === 'string') {\n          data._config.parent = triggerData.parent;\n          data._parent = data._getParent();\n        }\n\n        config = 'toggle';\n      } else {\n        config = triggerData;\n      }\n\n      Collapse.collapseInterface(element, config);\n    });\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Collapse to jQuery only if jQuery is present\n   */\n\n  defineJQueryPlugin(Collapse);\n\n  var top = 'top';\n  var bottom = 'bottom';\n  var right = 'right';\n  var left = 'left';\n  var auto = 'auto';\n  var basePlacements = [top, bottom, right, left];\n  var start = 'start';\n  var end = 'end';\n  var clippingParents = 'clippingParents';\n  var viewport = 'viewport';\n  var popper = 'popper';\n  var reference = 'reference';\n  var variationPlacements = /*#__PURE__*/basePlacements.reduce(function (acc, placement) {\n    return acc.concat([placement + \"-\" + start, placement + \"-\" + end]);\n  }, []);\n  var placements = /*#__PURE__*/[].concat(basePlacements, [auto]).reduce(function (acc, placement) {\n    return acc.concat([placement, placement + \"-\" + start, placement + \"-\" + end]);\n  }, []); // modifiers that need to read the DOM\n\n  var beforeRead = 'beforeRead';\n  var read = 'read';\n  var afterRead = 'afterRead'; // pure-logic modifiers\n\n  var beforeMain = 'beforeMain';\n  var main = 'main';\n  var afterMain = 'afterMain'; // modifier with the purpose to write to the DOM (or write into a framework state)\n\n  var beforeWrite = 'beforeWrite';\n  var write = 'write';\n  var afterWrite = 'afterWrite';\n  var modifierPhases = [beforeRead, read, afterRead, beforeMain, main, afterMain, beforeWrite, write, afterWrite];\n\n  function getNodeName(element) {\n    return element ? (element.nodeName || '').toLowerCase() : null;\n  }\n\n  function getWindow(node) {\n    if (node == null) {\n      return window;\n    }\n\n    if (node.toString() !== '[object Window]') {\n      var ownerDocument = node.ownerDocument;\n      return ownerDocument ? ownerDocument.defaultView || window : window;\n    }\n\n    return node;\n  }\n\n  function isElement(node) {\n    var OwnElement = getWindow(node).Element;\n    return node instanceof OwnElement || node instanceof Element;\n  }\n\n  function isHTMLElement(node) {\n    var OwnElement = getWindow(node).HTMLElement;\n    return node instanceof OwnElement || node instanceof HTMLElement;\n  }\n\n  function isShadowRoot(node) {\n    // IE 11 has no ShadowRoot\n    if (typeof ShadowRoot === 'undefined') {\n      return false;\n    }\n\n    var OwnElement = getWindow(node).ShadowRoot;\n    return node instanceof OwnElement || node instanceof ShadowRoot;\n  }\n\n  // and applies them to the HTMLElements such as popper and arrow\n\n  function applyStyles(_ref) {\n    var state = _ref.state;\n    Object.keys(state.elements).forEach(function (name) {\n      var style = state.styles[name] || {};\n      var attributes = state.attributes[name] || {};\n      var element = state.elements[name]; // arrow is optional + virtual elements\n\n      if (!isHTMLElement(element) || !getNodeName(element)) {\n        return;\n      } // Flow doesn't support to extend this property, but it's the most\n      // effective way to apply styles to an HTMLElement\n      // $FlowFixMe[cannot-write]\n\n\n      Object.assign(element.style, style);\n      Object.keys(attributes).forEach(function (name) {\n        var value = attributes[name];\n\n        if (value === false) {\n          element.removeAttribute(name);\n        } else {\n          element.setAttribute(name, value === true ? '' : value);\n        }\n      });\n    });\n  }\n\n  function effect$2(_ref2) {\n    var state = _ref2.state;\n    var initialStyles = {\n      popper: {\n        position: state.options.strategy,\n        left: '0',\n        top: '0',\n        margin: '0'\n      },\n      arrow: {\n        position: 'absolute'\n      },\n      reference: {}\n    };\n    Object.assign(state.elements.popper.style, initialStyles.popper);\n    state.styles = initialStyles;\n\n    if (state.elements.arrow) {\n      Object.assign(state.elements.arrow.style, initialStyles.arrow);\n    }\n\n    return function () {\n      Object.keys(state.elements).forEach(function (name) {\n        var element = state.elements[name];\n        var attributes = state.attributes[name] || {};\n        var styleProperties = Object.keys(state.styles.hasOwnProperty(name) ? state.styles[name] : initialStyles[name]); // Set all values to an empty string to unset them\n\n        var style = styleProperties.reduce(function (style, property) {\n          style[property] = '';\n          return style;\n        }, {}); // arrow is optional + virtual elements\n\n        if (!isHTMLElement(element) || !getNodeName(element)) {\n          return;\n        }\n\n        Object.assign(element.style, style);\n        Object.keys(attributes).forEach(function (attribute) {\n          element.removeAttribute(attribute);\n        });\n      });\n    };\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  var applyStyles$1 = {\n    name: 'applyStyles',\n    enabled: true,\n    phase: 'write',\n    fn: applyStyles,\n    effect: effect$2,\n    requires: ['computeStyles']\n  };\n\n  function getBasePlacement(placement) {\n    return placement.split('-')[0];\n  }\n\n  function getBoundingClientRect(element) {\n    var rect = element.getBoundingClientRect();\n    return {\n      width: rect.width,\n      height: rect.height,\n      top: rect.top,\n      right: rect.right,\n      bottom: rect.bottom,\n      left: rect.left,\n      x: rect.left,\n      y: rect.top\n    };\n  }\n\n  // means it doesn't take into account transforms.\n\n  function getLayoutRect(element) {\n    var clientRect = getBoundingClientRect(element); // Use the clientRect sizes if it's not been transformed.\n    // Fixes https://github.com/popperjs/popper-core/issues/1223\n\n    var width = element.offsetWidth;\n    var height = element.offsetHeight;\n\n    if (Math.abs(clientRect.width - width) <= 1) {\n      width = clientRect.width;\n    }\n\n    if (Math.abs(clientRect.height - height) <= 1) {\n      height = clientRect.height;\n    }\n\n    return {\n      x: element.offsetLeft,\n      y: element.offsetTop,\n      width: width,\n      height: height\n    };\n  }\n\n  function contains(parent, child) {\n    var rootNode = child.getRootNode && child.getRootNode(); // First, attempt with faster native method\n\n    if (parent.contains(child)) {\n      return true;\n    } // then fallback to custom implementation with Shadow DOM support\n    else if (rootNode && isShadowRoot(rootNode)) {\n        var next = child;\n\n        do {\n          if (next && parent.isSameNode(next)) {\n            return true;\n          } // $FlowFixMe[prop-missing]: need a better way to handle this...\n\n\n          next = next.parentNode || next.host;\n        } while (next);\n      } // Give up, the result is false\n\n\n    return false;\n  }\n\n  function getComputedStyle$1(element) {\n    return getWindow(element).getComputedStyle(element);\n  }\n\n  function isTableElement(element) {\n    return ['table', 'td', 'th'].indexOf(getNodeName(element)) >= 0;\n  }\n\n  function getDocumentElement(element) {\n    // $FlowFixMe[incompatible-return]: assume body is always available\n    return ((isElement(element) ? element.ownerDocument : // $FlowFixMe[prop-missing]\n    element.document) || window.document).documentElement;\n  }\n\n  function getParentNode(element) {\n    if (getNodeName(element) === 'html') {\n      return element;\n    }\n\n    return (// this is a quicker (but less type safe) way to save quite some bytes from the bundle\n      // $FlowFixMe[incompatible-return]\n      // $FlowFixMe[prop-missing]\n      element.assignedSlot || // step into the shadow DOM of the parent of a slotted node\n      element.parentNode || ( // DOM Element detected\n      isShadowRoot(element) ? element.host : null) || // ShadowRoot detected\n      // $FlowFixMe[incompatible-call]: HTMLElement is a Node\n      getDocumentElement(element) // fallback\n\n    );\n  }\n\n  function getTrueOffsetParent(element) {\n    if (!isHTMLElement(element) || // https://github.com/popperjs/popper-core/issues/837\n    getComputedStyle$1(element).position === 'fixed') {\n      return null;\n    }\n\n    return element.offsetParent;\n  } // `.offsetParent` reports `null` for fixed elements, while absolute elements\n  // return the containing block\n\n\n  function getContainingBlock(element) {\n    var isFirefox = navigator.userAgent.toLowerCase().indexOf('firefox') !== -1;\n    var isIE = navigator.userAgent.indexOf('Trident') !== -1;\n\n    if (isIE && isHTMLElement(element)) {\n      // In IE 9, 10 and 11 fixed elements containing block is always established by the viewport\n      var elementCss = getComputedStyle$1(element);\n\n      if (elementCss.position === 'fixed') {\n        return null;\n      }\n    }\n\n    var currentNode = getParentNode(element);\n\n    while (isHTMLElement(currentNode) && ['html', 'body'].indexOf(getNodeName(currentNode)) < 0) {\n      var css = getComputedStyle$1(currentNode); // This is non-exhaustive but covers the most common CSS properties that\n      // create a containing block.\n      // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n\n      if (css.transform !== 'none' || css.perspective !== 'none' || css.contain === 'paint' || ['transform', 'perspective'].indexOf(css.willChange) !== -1 || isFirefox && css.willChange === 'filter' || isFirefox && css.filter && css.filter !== 'none') {\n        return currentNode;\n      } else {\n        currentNode = currentNode.parentNode;\n      }\n    }\n\n    return null;\n  } // Gets the closest ancestor positioned element. Handles some edge cases,\n  // such as table ancestors and cross browser bugs.\n\n\n  function getOffsetParent(element) {\n    var window = getWindow(element);\n    var offsetParent = getTrueOffsetParent(element);\n\n    while (offsetParent && isTableElement(offsetParent) && getComputedStyle$1(offsetParent).position === 'static') {\n      offsetParent = getTrueOffsetParent(offsetParent);\n    }\n\n    if (offsetParent && (getNodeName(offsetParent) === 'html' || getNodeName(offsetParent) === 'body' && getComputedStyle$1(offsetParent).position === 'static')) {\n      return window;\n    }\n\n    return offsetParent || getContainingBlock(element) || window;\n  }\n\n  function getMainAxisFromPlacement(placement) {\n    return ['top', 'bottom'].indexOf(placement) >= 0 ? 'x' : 'y';\n  }\n\n  var max = Math.max;\n  var min = Math.min;\n  var round = Math.round;\n\n  function within(min$1, value, max$1) {\n    return max(min$1, min(value, max$1));\n  }\n\n  function getFreshSideObject() {\n    return {\n      top: 0,\n      right: 0,\n      bottom: 0,\n      left: 0\n    };\n  }\n\n  function mergePaddingObject(paddingObject) {\n    return Object.assign({}, getFreshSideObject(), paddingObject);\n  }\n\n  function expandToHashMap(value, keys) {\n    return keys.reduce(function (hashMap, key) {\n      hashMap[key] = value;\n      return hashMap;\n    }, {});\n  }\n\n  var toPaddingObject = function toPaddingObject(padding, state) {\n    padding = typeof padding === 'function' ? padding(Object.assign({}, state.rects, {\n      placement: state.placement\n    })) : padding;\n    return mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));\n  };\n\n  function arrow(_ref) {\n    var _state$modifiersData$;\n\n    var state = _ref.state,\n        name = _ref.name,\n        options = _ref.options;\n    var arrowElement = state.elements.arrow;\n    var popperOffsets = state.modifiersData.popperOffsets;\n    var basePlacement = getBasePlacement(state.placement);\n    var axis = getMainAxisFromPlacement(basePlacement);\n    var isVertical = [left, right].indexOf(basePlacement) >= 0;\n    var len = isVertical ? 'height' : 'width';\n\n    if (!arrowElement || !popperOffsets) {\n      return;\n    }\n\n    var paddingObject = toPaddingObject(options.padding, state);\n    var arrowRect = getLayoutRect(arrowElement);\n    var minProp = axis === 'y' ? top : left;\n    var maxProp = axis === 'y' ? bottom : right;\n    var endDiff = state.rects.reference[len] + state.rects.reference[axis] - popperOffsets[axis] - state.rects.popper[len];\n    var startDiff = popperOffsets[axis] - state.rects.reference[axis];\n    var arrowOffsetParent = getOffsetParent(arrowElement);\n    var clientSize = arrowOffsetParent ? axis === 'y' ? arrowOffsetParent.clientHeight || 0 : arrowOffsetParent.clientWidth || 0 : 0;\n    var centerToReference = endDiff / 2 - startDiff / 2; // Make sure the arrow doesn't overflow the popper if the center point is\n    // outside of the popper bounds\n\n    var min = paddingObject[minProp];\n    var max = clientSize - arrowRect[len] - paddingObject[maxProp];\n    var center = clientSize / 2 - arrowRect[len] / 2 + centerToReference;\n    var offset = within(min, center, max); // Prevents breaking syntax highlighting...\n\n    var axisProp = axis;\n    state.modifiersData[name] = (_state$modifiersData$ = {}, _state$modifiersData$[axisProp] = offset, _state$modifiersData$.centerOffset = offset - center, _state$modifiersData$);\n  }\n\n  function effect$1(_ref2) {\n    var state = _ref2.state,\n        options = _ref2.options;\n    var _options$element = options.element,\n        arrowElement = _options$element === void 0 ? '[data-popper-arrow]' : _options$element;\n\n    if (arrowElement == null) {\n      return;\n    } // CSS selector\n\n\n    if (typeof arrowElement === 'string') {\n      arrowElement = state.elements.popper.querySelector(arrowElement);\n\n      if (!arrowElement) {\n        return;\n      }\n    }\n\n    if (!contains(state.elements.popper, arrowElement)) {\n\n      return;\n    }\n\n    state.elements.arrow = arrowElement;\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  var arrow$1 = {\n    name: 'arrow',\n    enabled: true,\n    phase: 'main',\n    fn: arrow,\n    effect: effect$1,\n    requires: ['popperOffsets'],\n    requiresIfExists: ['preventOverflow']\n  };\n\n  var unsetSides = {\n    top: 'auto',\n    right: 'auto',\n    bottom: 'auto',\n    left: 'auto'\n  }; // Round the offsets to the nearest suitable subpixel based on the DPR.\n  // Zooming can change the DPR, but it seems to report a value that will\n  // cleanly divide the values into the appropriate subpixels.\n\n  function roundOffsetsByDPR(_ref) {\n    var x = _ref.x,\n        y = _ref.y;\n    var win = window;\n    var dpr = win.devicePixelRatio || 1;\n    return {\n      x: round(round(x * dpr) / dpr) || 0,\n      y: round(round(y * dpr) / dpr) || 0\n    };\n  }\n\n  function mapToStyles(_ref2) {\n    var _Object$assign2;\n\n    var popper = _ref2.popper,\n        popperRect = _ref2.popperRect,\n        placement = _ref2.placement,\n        offsets = _ref2.offsets,\n        position = _ref2.position,\n        gpuAcceleration = _ref2.gpuAcceleration,\n        adaptive = _ref2.adaptive,\n        roundOffsets = _ref2.roundOffsets;\n\n    var _ref3 = roundOffsets === true ? roundOffsetsByDPR(offsets) : typeof roundOffsets === 'function' ? roundOffsets(offsets) : offsets,\n        _ref3$x = _ref3.x,\n        x = _ref3$x === void 0 ? 0 : _ref3$x,\n        _ref3$y = _ref3.y,\n        y = _ref3$y === void 0 ? 0 : _ref3$y;\n\n    var hasX = offsets.hasOwnProperty('x');\n    var hasY = offsets.hasOwnProperty('y');\n    var sideX = left;\n    var sideY = top;\n    var win = window;\n\n    if (adaptive) {\n      var offsetParent = getOffsetParent(popper);\n      var heightProp = 'clientHeight';\n      var widthProp = 'clientWidth';\n\n      if (offsetParent === getWindow(popper)) {\n        offsetParent = getDocumentElement(popper);\n\n        if (getComputedStyle$1(offsetParent).position !== 'static') {\n          heightProp = 'scrollHeight';\n          widthProp = 'scrollWidth';\n        }\n      } // $FlowFixMe[incompatible-cast]: force type refinement, we compare offsetParent with window above, but Flow doesn't detect it\n\n\n      offsetParent = offsetParent;\n\n      if (placement === top) {\n        sideY = bottom; // $FlowFixMe[prop-missing]\n\n        y -= offsetParent[heightProp] - popperRect.height;\n        y *= gpuAcceleration ? 1 : -1;\n      }\n\n      if (placement === left) {\n        sideX = right; // $FlowFixMe[prop-missing]\n\n        x -= offsetParent[widthProp] - popperRect.width;\n        x *= gpuAcceleration ? 1 : -1;\n      }\n    }\n\n    var commonStyles = Object.assign({\n      position: position\n    }, adaptive && unsetSides);\n\n    if (gpuAcceleration) {\n      var _Object$assign;\n\n      return Object.assign({}, commonStyles, (_Object$assign = {}, _Object$assign[sideY] = hasY ? '0' : '', _Object$assign[sideX] = hasX ? '0' : '', _Object$assign.transform = (win.devicePixelRatio || 1) < 2 ? \"translate(\" + x + \"px, \" + y + \"px)\" : \"translate3d(\" + x + \"px, \" + y + \"px, 0)\", _Object$assign));\n    }\n\n    return Object.assign({}, commonStyles, (_Object$assign2 = {}, _Object$assign2[sideY] = hasY ? y + \"px\" : '', _Object$assign2[sideX] = hasX ? x + \"px\" : '', _Object$assign2.transform = '', _Object$assign2));\n  }\n\n  function computeStyles(_ref4) {\n    var state = _ref4.state,\n        options = _ref4.options;\n    var _options$gpuAccelerat = options.gpuAcceleration,\n        gpuAcceleration = _options$gpuAccelerat === void 0 ? true : _options$gpuAccelerat,\n        _options$adaptive = options.adaptive,\n        adaptive = _options$adaptive === void 0 ? true : _options$adaptive,\n        _options$roundOffsets = options.roundOffsets,\n        roundOffsets = _options$roundOffsets === void 0 ? true : _options$roundOffsets;\n\n    var commonStyles = {\n      placement: getBasePlacement(state.placement),\n      popper: state.elements.popper,\n      popperRect: state.rects.popper,\n      gpuAcceleration: gpuAcceleration\n    };\n\n    if (state.modifiersData.popperOffsets != null) {\n      state.styles.popper = Object.assign({}, state.styles.popper, mapToStyles(Object.assign({}, commonStyles, {\n        offsets: state.modifiersData.popperOffsets,\n        position: state.options.strategy,\n        adaptive: adaptive,\n        roundOffsets: roundOffsets\n      })));\n    }\n\n    if (state.modifiersData.arrow != null) {\n      state.styles.arrow = Object.assign({}, state.styles.arrow, mapToStyles(Object.assign({}, commonStyles, {\n        offsets: state.modifiersData.arrow,\n        position: 'absolute',\n        adaptive: false,\n        roundOffsets: roundOffsets\n      })));\n    }\n\n    state.attributes.popper = Object.assign({}, state.attributes.popper, {\n      'data-popper-placement': state.placement\n    });\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  var computeStyles$1 = {\n    name: 'computeStyles',\n    enabled: true,\n    phase: 'beforeWrite',\n    fn: computeStyles,\n    data: {}\n  };\n\n  var passive = {\n    passive: true\n  };\n\n  function effect(_ref) {\n    var state = _ref.state,\n        instance = _ref.instance,\n        options = _ref.options;\n    var _options$scroll = options.scroll,\n        scroll = _options$scroll === void 0 ? true : _options$scroll,\n        _options$resize = options.resize,\n        resize = _options$resize === void 0 ? true : _options$resize;\n    var window = getWindow(state.elements.popper);\n    var scrollParents = [].concat(state.scrollParents.reference, state.scrollParents.popper);\n\n    if (scroll) {\n      scrollParents.forEach(function (scrollParent) {\n        scrollParent.addEventListener('scroll', instance.update, passive);\n      });\n    }\n\n    if (resize) {\n      window.addEventListener('resize', instance.update, passive);\n    }\n\n    return function () {\n      if (scroll) {\n        scrollParents.forEach(function (scrollParent) {\n          scrollParent.removeEventListener('scroll', instance.update, passive);\n        });\n      }\n\n      if (resize) {\n        window.removeEventListener('resize', instance.update, passive);\n      }\n    };\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  var eventListeners = {\n    name: 'eventListeners',\n    enabled: true,\n    phase: 'write',\n    fn: function fn() {},\n    effect: effect,\n    data: {}\n  };\n\n  var hash$1 = {\n    left: 'right',\n    right: 'left',\n    bottom: 'top',\n    top: 'bottom'\n  };\n  function getOppositePlacement(placement) {\n    return placement.replace(/left|right|bottom|top/g, function (matched) {\n      return hash$1[matched];\n    });\n  }\n\n  var hash = {\n    start: 'end',\n    end: 'start'\n  };\n  function getOppositeVariationPlacement(placement) {\n    return placement.replace(/start|end/g, function (matched) {\n      return hash[matched];\n    });\n  }\n\n  function getWindowScroll(node) {\n    var win = getWindow(node);\n    var scrollLeft = win.pageXOffset;\n    var scrollTop = win.pageYOffset;\n    return {\n      scrollLeft: scrollLeft,\n      scrollTop: scrollTop\n    };\n  }\n\n  function getWindowScrollBarX(element) {\n    // If <html> has a CSS width greater than the viewport, then this will be\n    // incorrect for RTL.\n    // Popper 1 is broken in this case and never had a bug report so let's assume\n    // it's not an issue. I don't think anyone ever specifies width on <html>\n    // anyway.\n    // Browsers where the left scrollbar doesn't cause an issue report `0` for\n    // this (e.g. Edge 2019, IE11, Safari)\n    return getBoundingClientRect(getDocumentElement(element)).left + getWindowScroll(element).scrollLeft;\n  }\n\n  function getViewportRect(element) {\n    var win = getWindow(element);\n    var html = getDocumentElement(element);\n    var visualViewport = win.visualViewport;\n    var width = html.clientWidth;\n    var height = html.clientHeight;\n    var x = 0;\n    var y = 0; // NB: This isn't supported on iOS <= 12. If the keyboard is open, the popper\n    // can be obscured underneath it.\n    // Also, `html.clientHeight` adds the bottom bar height in Safari iOS, even\n    // if it isn't open, so if this isn't available, the popper will be detected\n    // to overflow the bottom of the screen too early.\n\n    if (visualViewport) {\n      width = visualViewport.width;\n      height = visualViewport.height; // Uses Layout Viewport (like Chrome; Safari does not currently)\n      // In Chrome, it returns a value very close to 0 (+/-) but contains rounding\n      // errors due to floating point numbers, so we need to check precision.\n      // Safari returns a number <= 0, usually < -1 when pinch-zoomed\n      // Feature detection fails in mobile emulation mode in Chrome.\n      // Math.abs(win.innerWidth / visualViewport.scale - visualViewport.width) <\n      // 0.001\n      // Fallback here: \"Not Safari\" userAgent\n\n      if (!/^((?!chrome|android).)*safari/i.test(navigator.userAgent)) {\n        x = visualViewport.offsetLeft;\n        y = visualViewport.offsetTop;\n      }\n    }\n\n    return {\n      width: width,\n      height: height,\n      x: x + getWindowScrollBarX(element),\n      y: y\n    };\n  }\n\n  // of the `<html>` and `<body>` rect bounds if horizontally scrollable\n\n  function getDocumentRect(element) {\n    var _element$ownerDocumen;\n\n    var html = getDocumentElement(element);\n    var winScroll = getWindowScroll(element);\n    var body = (_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body;\n    var width = max(html.scrollWidth, html.clientWidth, body ? body.scrollWidth : 0, body ? body.clientWidth : 0);\n    var height = max(html.scrollHeight, html.clientHeight, body ? body.scrollHeight : 0, body ? body.clientHeight : 0);\n    var x = -winScroll.scrollLeft + getWindowScrollBarX(element);\n    var y = -winScroll.scrollTop;\n\n    if (getComputedStyle$1(body || html).direction === 'rtl') {\n      x += max(html.clientWidth, body ? body.clientWidth : 0) - width;\n    }\n\n    return {\n      width: width,\n      height: height,\n      x: x,\n      y: y\n    };\n  }\n\n  function isScrollParent(element) {\n    // Firefox wants us to check `-x` and `-y` variations as well\n    var _getComputedStyle = getComputedStyle$1(element),\n        overflow = _getComputedStyle.overflow,\n        overflowX = _getComputedStyle.overflowX,\n        overflowY = _getComputedStyle.overflowY;\n\n    return /auto|scroll|overlay|hidden/.test(overflow + overflowY + overflowX);\n  }\n\n  function getScrollParent(node) {\n    if (['html', 'body', '#document'].indexOf(getNodeName(node)) >= 0) {\n      // $FlowFixMe[incompatible-return]: assume body is always available\n      return node.ownerDocument.body;\n    }\n\n    if (isHTMLElement(node) && isScrollParent(node)) {\n      return node;\n    }\n\n    return getScrollParent(getParentNode(node));\n  }\n\n  /*\n  given a DOM element, return the list of all scroll parents, up the list of ancesors\n  until we get to the top window object. This list is what we attach scroll listeners\n  to, because if any of these parent elements scroll, we'll need to re-calculate the\n  reference element's position.\n  */\n\n  function listScrollParents(element, list) {\n    var _element$ownerDocumen;\n\n    if (list === void 0) {\n      list = [];\n    }\n\n    var scrollParent = getScrollParent(element);\n    var isBody = scrollParent === ((_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body);\n    var win = getWindow(scrollParent);\n    var target = isBody ? [win].concat(win.visualViewport || [], isScrollParent(scrollParent) ? scrollParent : []) : scrollParent;\n    var updatedList = list.concat(target);\n    return isBody ? updatedList : // $FlowFixMe[incompatible-call]: isBody tells us target will be an HTMLElement here\n    updatedList.concat(listScrollParents(getParentNode(target)));\n  }\n\n  function rectToClientRect(rect) {\n    return Object.assign({}, rect, {\n      left: rect.x,\n      top: rect.y,\n      right: rect.x + rect.width,\n      bottom: rect.y + rect.height\n    });\n  }\n\n  function getInnerBoundingClientRect(element) {\n    var rect = getBoundingClientRect(element);\n    rect.top = rect.top + element.clientTop;\n    rect.left = rect.left + element.clientLeft;\n    rect.bottom = rect.top + element.clientHeight;\n    rect.right = rect.left + element.clientWidth;\n    rect.width = element.clientWidth;\n    rect.height = element.clientHeight;\n    rect.x = rect.left;\n    rect.y = rect.top;\n    return rect;\n  }\n\n  function getClientRectFromMixedType(element, clippingParent) {\n    return clippingParent === viewport ? rectToClientRect(getViewportRect(element)) : isHTMLElement(clippingParent) ? getInnerBoundingClientRect(clippingParent) : rectToClientRect(getDocumentRect(getDocumentElement(element)));\n  } // A \"clipping parent\" is an overflowable container with the characteristic of\n  // clipping (or hiding) overflowing elements with a position different from\n  // `initial`\n\n\n  function getClippingParents(element) {\n    var clippingParents = listScrollParents(getParentNode(element));\n    var canEscapeClipping = ['absolute', 'fixed'].indexOf(getComputedStyle$1(element).position) >= 0;\n    var clipperElement = canEscapeClipping && isHTMLElement(element) ? getOffsetParent(element) : element;\n\n    if (!isElement(clipperElement)) {\n      return [];\n    } // $FlowFixMe[incompatible-return]: https://github.com/facebook/flow/issues/1414\n\n\n    return clippingParents.filter(function (clippingParent) {\n      return isElement(clippingParent) && contains(clippingParent, clipperElement) && getNodeName(clippingParent) !== 'body';\n    });\n  } // Gets the maximum area that the element is visible in due to any number of\n  // clipping parents\n\n\n  function getClippingRect(element, boundary, rootBoundary) {\n    var mainClippingParents = boundary === 'clippingParents' ? getClippingParents(element) : [].concat(boundary);\n    var clippingParents = [].concat(mainClippingParents, [rootBoundary]);\n    var firstClippingParent = clippingParents[0];\n    var clippingRect = clippingParents.reduce(function (accRect, clippingParent) {\n      var rect = getClientRectFromMixedType(element, clippingParent);\n      accRect.top = max(rect.top, accRect.top);\n      accRect.right = min(rect.right, accRect.right);\n      accRect.bottom = min(rect.bottom, accRect.bottom);\n      accRect.left = max(rect.left, accRect.left);\n      return accRect;\n    }, getClientRectFromMixedType(element, firstClippingParent));\n    clippingRect.width = clippingRect.right - clippingRect.left;\n    clippingRect.height = clippingRect.bottom - clippingRect.top;\n    clippingRect.x = clippingRect.left;\n    clippingRect.y = clippingRect.top;\n    return clippingRect;\n  }\n\n  function getVariation(placement) {\n    return placement.split('-')[1];\n  }\n\n  function computeOffsets(_ref) {\n    var reference = _ref.reference,\n        element = _ref.element,\n        placement = _ref.placement;\n    var basePlacement = placement ? getBasePlacement(placement) : null;\n    var variation = placement ? getVariation(placement) : null;\n    var commonX = reference.x + reference.width / 2 - element.width / 2;\n    var commonY = reference.y + reference.height / 2 - element.height / 2;\n    var offsets;\n\n    switch (basePlacement) {\n      case top:\n        offsets = {\n          x: commonX,\n          y: reference.y - element.height\n        };\n        break;\n\n      case bottom:\n        offsets = {\n          x: commonX,\n          y: reference.y + reference.height\n        };\n        break;\n\n      case right:\n        offsets = {\n          x: reference.x + reference.width,\n          y: commonY\n        };\n        break;\n\n      case left:\n        offsets = {\n          x: reference.x - element.width,\n          y: commonY\n        };\n        break;\n\n      default:\n        offsets = {\n          x: reference.x,\n          y: reference.y\n        };\n    }\n\n    var mainAxis = basePlacement ? getMainAxisFromPlacement(basePlacement) : null;\n\n    if (mainAxis != null) {\n      var len = mainAxis === 'y' ? 'height' : 'width';\n\n      switch (variation) {\n        case start:\n          offsets[mainAxis] = offsets[mainAxis] - (reference[len] / 2 - element[len] / 2);\n          break;\n\n        case end:\n          offsets[mainAxis] = offsets[mainAxis] + (reference[len] / 2 - element[len] / 2);\n          break;\n      }\n    }\n\n    return offsets;\n  }\n\n  function detectOverflow(state, options) {\n    if (options === void 0) {\n      options = {};\n    }\n\n    var _options = options,\n        _options$placement = _options.placement,\n        placement = _options$placement === void 0 ? state.placement : _options$placement,\n        _options$boundary = _options.boundary,\n        boundary = _options$boundary === void 0 ? clippingParents : _options$boundary,\n        _options$rootBoundary = _options.rootBoundary,\n        rootBoundary = _options$rootBoundary === void 0 ? viewport : _options$rootBoundary,\n        _options$elementConte = _options.elementContext,\n        elementContext = _options$elementConte === void 0 ? popper : _options$elementConte,\n        _options$altBoundary = _options.altBoundary,\n        altBoundary = _options$altBoundary === void 0 ? false : _options$altBoundary,\n        _options$padding = _options.padding,\n        padding = _options$padding === void 0 ? 0 : _options$padding;\n    var paddingObject = mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));\n    var altContext = elementContext === popper ? reference : popper;\n    var referenceElement = state.elements.reference;\n    var popperRect = state.rects.popper;\n    var element = state.elements[altBoundary ? altContext : elementContext];\n    var clippingClientRect = getClippingRect(isElement(element) ? element : element.contextElement || getDocumentElement(state.elements.popper), boundary, rootBoundary);\n    var referenceClientRect = getBoundingClientRect(referenceElement);\n    var popperOffsets = computeOffsets({\n      reference: referenceClientRect,\n      element: popperRect,\n      strategy: 'absolute',\n      placement: placement\n    });\n    var popperClientRect = rectToClientRect(Object.assign({}, popperRect, popperOffsets));\n    var elementClientRect = elementContext === popper ? popperClientRect : referenceClientRect; // positive = overflowing the clipping rect\n    // 0 or negative = within the clipping rect\n\n    var overflowOffsets = {\n      top: clippingClientRect.top - elementClientRect.top + paddingObject.top,\n      bottom: elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom,\n      left: clippingClientRect.left - elementClientRect.left + paddingObject.left,\n      right: elementClientRect.right - clippingClientRect.right + paddingObject.right\n    };\n    var offsetData = state.modifiersData.offset; // Offsets can be applied only to the popper element\n\n    if (elementContext === popper && offsetData) {\n      var offset = offsetData[placement];\n      Object.keys(overflowOffsets).forEach(function (key) {\n        var multiply = [right, bottom].indexOf(key) >= 0 ? 1 : -1;\n        var axis = [top, bottom].indexOf(key) >= 0 ? 'y' : 'x';\n        overflowOffsets[key] += offset[axis] * multiply;\n      });\n    }\n\n    return overflowOffsets;\n  }\n\n  function computeAutoPlacement(state, options) {\n    if (options === void 0) {\n      options = {};\n    }\n\n    var _options = options,\n        placement = _options.placement,\n        boundary = _options.boundary,\n        rootBoundary = _options.rootBoundary,\n        padding = _options.padding,\n        flipVariations = _options.flipVariations,\n        _options$allowedAutoP = _options.allowedAutoPlacements,\n        allowedAutoPlacements = _options$allowedAutoP === void 0 ? placements : _options$allowedAutoP;\n    var variation = getVariation(placement);\n    var placements$1 = variation ? flipVariations ? variationPlacements : variationPlacements.filter(function (placement) {\n      return getVariation(placement) === variation;\n    }) : basePlacements;\n    var allowedPlacements = placements$1.filter(function (placement) {\n      return allowedAutoPlacements.indexOf(placement) >= 0;\n    });\n\n    if (allowedPlacements.length === 0) {\n      allowedPlacements = placements$1;\n    } // $FlowFixMe[incompatible-type]: Flow seems to have problems with two array unions...\n\n\n    var overflows = allowedPlacements.reduce(function (acc, placement) {\n      acc[placement] = detectOverflow(state, {\n        placement: placement,\n        boundary: boundary,\n        rootBoundary: rootBoundary,\n        padding: padding\n      })[getBasePlacement(placement)];\n      return acc;\n    }, {});\n    return Object.keys(overflows).sort(function (a, b) {\n      return overflows[a] - overflows[b];\n    });\n  }\n\n  function getExpandedFallbackPlacements(placement) {\n    if (getBasePlacement(placement) === auto) {\n      return [];\n    }\n\n    var oppositePlacement = getOppositePlacement(placement);\n    return [getOppositeVariationPlacement(placement), oppositePlacement, getOppositeVariationPlacement(oppositePlacement)];\n  }\n\n  function flip(_ref) {\n    var state = _ref.state,\n        options = _ref.options,\n        name = _ref.name;\n\n    if (state.modifiersData[name]._skip) {\n      return;\n    }\n\n    var _options$mainAxis = options.mainAxis,\n        checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\n        _options$altAxis = options.altAxis,\n        checkAltAxis = _options$altAxis === void 0 ? true : _options$altAxis,\n        specifiedFallbackPlacements = options.fallbackPlacements,\n        padding = options.padding,\n        boundary = options.boundary,\n        rootBoundary = options.rootBoundary,\n        altBoundary = options.altBoundary,\n        _options$flipVariatio = options.flipVariations,\n        flipVariations = _options$flipVariatio === void 0 ? true : _options$flipVariatio,\n        allowedAutoPlacements = options.allowedAutoPlacements;\n    var preferredPlacement = state.options.placement;\n    var basePlacement = getBasePlacement(preferredPlacement);\n    var isBasePlacement = basePlacement === preferredPlacement;\n    var fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipVariations ? [getOppositePlacement(preferredPlacement)] : getExpandedFallbackPlacements(preferredPlacement));\n    var placements = [preferredPlacement].concat(fallbackPlacements).reduce(function (acc, placement) {\n      return acc.concat(getBasePlacement(placement) === auto ? computeAutoPlacement(state, {\n        placement: placement,\n        boundary: boundary,\n        rootBoundary: rootBoundary,\n        padding: padding,\n        flipVariations: flipVariations,\n        allowedAutoPlacements: allowedAutoPlacements\n      }) : placement);\n    }, []);\n    var referenceRect = state.rects.reference;\n    var popperRect = state.rects.popper;\n    var checksMap = new Map();\n    var makeFallbackChecks = true;\n    var firstFittingPlacement = placements[0];\n\n    for (var i = 0; i < placements.length; i++) {\n      var placement = placements[i];\n\n      var _basePlacement = getBasePlacement(placement);\n\n      var isStartVariation = getVariation(placement) === start;\n      var isVertical = [top, bottom].indexOf(_basePlacement) >= 0;\n      var len = isVertical ? 'width' : 'height';\n      var overflow = detectOverflow(state, {\n        placement: placement,\n        boundary: boundary,\n        rootBoundary: rootBoundary,\n        altBoundary: altBoundary,\n        padding: padding\n      });\n      var mainVariationSide = isVertical ? isStartVariation ? right : left : isStartVariation ? bottom : top;\n\n      if (referenceRect[len] > popperRect[len]) {\n        mainVariationSide = getOppositePlacement(mainVariationSide);\n      }\n\n      var altVariationSide = getOppositePlacement(mainVariationSide);\n      var checks = [];\n\n      if (checkMainAxis) {\n        checks.push(overflow[_basePlacement] <= 0);\n      }\n\n      if (checkAltAxis) {\n        checks.push(overflow[mainVariationSide] <= 0, overflow[altVariationSide] <= 0);\n      }\n\n      if (checks.every(function (check) {\n        return check;\n      })) {\n        firstFittingPlacement = placement;\n        makeFallbackChecks = false;\n        break;\n      }\n\n      checksMap.set(placement, checks);\n    }\n\n    if (makeFallbackChecks) {\n      // `2` may be desired in some cases – research later\n      var numberOfChecks = flipVariations ? 3 : 1;\n\n      var _loop = function _loop(_i) {\n        var fittingPlacement = placements.find(function (placement) {\n          var checks = checksMap.get(placement);\n\n          if (checks) {\n            return checks.slice(0, _i).every(function (check) {\n              return check;\n            });\n          }\n        });\n\n        if (fittingPlacement) {\n          firstFittingPlacement = fittingPlacement;\n          return \"break\";\n        }\n      };\n\n      for (var _i = numberOfChecks; _i > 0; _i--) {\n        var _ret = _loop(_i);\n\n        if (_ret === \"break\") break;\n      }\n    }\n\n    if (state.placement !== firstFittingPlacement) {\n      state.modifiersData[name]._skip = true;\n      state.placement = firstFittingPlacement;\n      state.reset = true;\n    }\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  var flip$1 = {\n    name: 'flip',\n    enabled: true,\n    phase: 'main',\n    fn: flip,\n    requiresIfExists: ['offset'],\n    data: {\n      _skip: false\n    }\n  };\n\n  function getSideOffsets(overflow, rect, preventedOffsets) {\n    if (preventedOffsets === void 0) {\n      preventedOffsets = {\n        x: 0,\n        y: 0\n      };\n    }\n\n    return {\n      top: overflow.top - rect.height - preventedOffsets.y,\n      right: overflow.right - rect.width + preventedOffsets.x,\n      bottom: overflow.bottom - rect.height + preventedOffsets.y,\n      left: overflow.left - rect.width - preventedOffsets.x\n    };\n  }\n\n  function isAnySideFullyClipped(overflow) {\n    return [top, right, bottom, left].some(function (side) {\n      return overflow[side] >= 0;\n    });\n  }\n\n  function hide(_ref) {\n    var state = _ref.state,\n        name = _ref.name;\n    var referenceRect = state.rects.reference;\n    var popperRect = state.rects.popper;\n    var preventedOffsets = state.modifiersData.preventOverflow;\n    var referenceOverflow = detectOverflow(state, {\n      elementContext: 'reference'\n    });\n    var popperAltOverflow = detectOverflow(state, {\n      altBoundary: true\n    });\n    var referenceClippingOffsets = getSideOffsets(referenceOverflow, referenceRect);\n    var popperEscapeOffsets = getSideOffsets(popperAltOverflow, popperRect, preventedOffsets);\n    var isReferenceHidden = isAnySideFullyClipped(referenceClippingOffsets);\n    var hasPopperEscaped = isAnySideFullyClipped(popperEscapeOffsets);\n    state.modifiersData[name] = {\n      referenceClippingOffsets: referenceClippingOffsets,\n      popperEscapeOffsets: popperEscapeOffsets,\n      isReferenceHidden: isReferenceHidden,\n      hasPopperEscaped: hasPopperEscaped\n    };\n    state.attributes.popper = Object.assign({}, state.attributes.popper, {\n      'data-popper-reference-hidden': isReferenceHidden,\n      'data-popper-escaped': hasPopperEscaped\n    });\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  var hide$1 = {\n    name: 'hide',\n    enabled: true,\n    phase: 'main',\n    requiresIfExists: ['preventOverflow'],\n    fn: hide\n  };\n\n  function distanceAndSkiddingToXY(placement, rects, offset) {\n    var basePlacement = getBasePlacement(placement);\n    var invertDistance = [left, top].indexOf(basePlacement) >= 0 ? -1 : 1;\n\n    var _ref = typeof offset === 'function' ? offset(Object.assign({}, rects, {\n      placement: placement\n    })) : offset,\n        skidding = _ref[0],\n        distance = _ref[1];\n\n    skidding = skidding || 0;\n    distance = (distance || 0) * invertDistance;\n    return [left, right].indexOf(basePlacement) >= 0 ? {\n      x: distance,\n      y: skidding\n    } : {\n      x: skidding,\n      y: distance\n    };\n  }\n\n  function offset(_ref2) {\n    var state = _ref2.state,\n        options = _ref2.options,\n        name = _ref2.name;\n    var _options$offset = options.offset,\n        offset = _options$offset === void 0 ? [0, 0] : _options$offset;\n    var data = placements.reduce(function (acc, placement) {\n      acc[placement] = distanceAndSkiddingToXY(placement, state.rects, offset);\n      return acc;\n    }, {});\n    var _data$state$placement = data[state.placement],\n        x = _data$state$placement.x,\n        y = _data$state$placement.y;\n\n    if (state.modifiersData.popperOffsets != null) {\n      state.modifiersData.popperOffsets.x += x;\n      state.modifiersData.popperOffsets.y += y;\n    }\n\n    state.modifiersData[name] = data;\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  var offset$1 = {\n    name: 'offset',\n    enabled: true,\n    phase: 'main',\n    requires: ['popperOffsets'],\n    fn: offset\n  };\n\n  function popperOffsets(_ref) {\n    var state = _ref.state,\n        name = _ref.name;\n    // Offsets are the actual position the popper needs to have to be\n    // properly positioned near its reference element\n    // This is the most basic placement, and will be adjusted by\n    // the modifiers in the next step\n    state.modifiersData[name] = computeOffsets({\n      reference: state.rects.reference,\n      element: state.rects.popper,\n      strategy: 'absolute',\n      placement: state.placement\n    });\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  var popperOffsets$1 = {\n    name: 'popperOffsets',\n    enabled: true,\n    phase: 'read',\n    fn: popperOffsets,\n    data: {}\n  };\n\n  function getAltAxis(axis) {\n    return axis === 'x' ? 'y' : 'x';\n  }\n\n  function preventOverflow(_ref) {\n    var state = _ref.state,\n        options = _ref.options,\n        name = _ref.name;\n    var _options$mainAxis = options.mainAxis,\n        checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\n        _options$altAxis = options.altAxis,\n        checkAltAxis = _options$altAxis === void 0 ? false : _options$altAxis,\n        boundary = options.boundary,\n        rootBoundary = options.rootBoundary,\n        altBoundary = options.altBoundary,\n        padding = options.padding,\n        _options$tether = options.tether,\n        tether = _options$tether === void 0 ? true : _options$tether,\n        _options$tetherOffset = options.tetherOffset,\n        tetherOffset = _options$tetherOffset === void 0 ? 0 : _options$tetherOffset;\n    var overflow = detectOverflow(state, {\n      boundary: boundary,\n      rootBoundary: rootBoundary,\n      padding: padding,\n      altBoundary: altBoundary\n    });\n    var basePlacement = getBasePlacement(state.placement);\n    var variation = getVariation(state.placement);\n    var isBasePlacement = !variation;\n    var mainAxis = getMainAxisFromPlacement(basePlacement);\n    var altAxis = getAltAxis(mainAxis);\n    var popperOffsets = state.modifiersData.popperOffsets;\n    var referenceRect = state.rects.reference;\n    var popperRect = state.rects.popper;\n    var tetherOffsetValue = typeof tetherOffset === 'function' ? tetherOffset(Object.assign({}, state.rects, {\n      placement: state.placement\n    })) : tetherOffset;\n    var data = {\n      x: 0,\n      y: 0\n    };\n\n    if (!popperOffsets) {\n      return;\n    }\n\n    if (checkMainAxis || checkAltAxis) {\n      var mainSide = mainAxis === 'y' ? top : left;\n      var altSide = mainAxis === 'y' ? bottom : right;\n      var len = mainAxis === 'y' ? 'height' : 'width';\n      var offset = popperOffsets[mainAxis];\n      var min$1 = popperOffsets[mainAxis] + overflow[mainSide];\n      var max$1 = popperOffsets[mainAxis] - overflow[altSide];\n      var additive = tether ? -popperRect[len] / 2 : 0;\n      var minLen = variation === start ? referenceRect[len] : popperRect[len];\n      var maxLen = variation === start ? -popperRect[len] : -referenceRect[len]; // We need to include the arrow in the calculation so the arrow doesn't go\n      // outside the reference bounds\n\n      var arrowElement = state.elements.arrow;\n      var arrowRect = tether && arrowElement ? getLayoutRect(arrowElement) : {\n        width: 0,\n        height: 0\n      };\n      var arrowPaddingObject = state.modifiersData['arrow#persistent'] ? state.modifiersData['arrow#persistent'].padding : getFreshSideObject();\n      var arrowPaddingMin = arrowPaddingObject[mainSide];\n      var arrowPaddingMax = arrowPaddingObject[altSide]; // If the reference length is smaller than the arrow length, we don't want\n      // to include its full size in the calculation. If the reference is small\n      // and near the edge of a boundary, the popper can overflow even if the\n      // reference is not overflowing as well (e.g. virtual elements with no\n      // width or height)\n\n      var arrowLen = within(0, referenceRect[len], arrowRect[len]);\n      var minOffset = isBasePlacement ? referenceRect[len] / 2 - additive - arrowLen - arrowPaddingMin - tetherOffsetValue : minLen - arrowLen - arrowPaddingMin - tetherOffsetValue;\n      var maxOffset = isBasePlacement ? -referenceRect[len] / 2 + additive + arrowLen + arrowPaddingMax + tetherOffsetValue : maxLen + arrowLen + arrowPaddingMax + tetherOffsetValue;\n      var arrowOffsetParent = state.elements.arrow && getOffsetParent(state.elements.arrow);\n      var clientOffset = arrowOffsetParent ? mainAxis === 'y' ? arrowOffsetParent.clientTop || 0 : arrowOffsetParent.clientLeft || 0 : 0;\n      var offsetModifierValue = state.modifiersData.offset ? state.modifiersData.offset[state.placement][mainAxis] : 0;\n      var tetherMin = popperOffsets[mainAxis] + minOffset - offsetModifierValue - clientOffset;\n      var tetherMax = popperOffsets[mainAxis] + maxOffset - offsetModifierValue;\n\n      if (checkMainAxis) {\n        var preventedOffset = within(tether ? min(min$1, tetherMin) : min$1, offset, tether ? max(max$1, tetherMax) : max$1);\n        popperOffsets[mainAxis] = preventedOffset;\n        data[mainAxis] = preventedOffset - offset;\n      }\n\n      if (checkAltAxis) {\n        var _mainSide = mainAxis === 'x' ? top : left;\n\n        var _altSide = mainAxis === 'x' ? bottom : right;\n\n        var _offset = popperOffsets[altAxis];\n\n        var _min = _offset + overflow[_mainSide];\n\n        var _max = _offset - overflow[_altSide];\n\n        var _preventedOffset = within(tether ? min(_min, tetherMin) : _min, _offset, tether ? max(_max, tetherMax) : _max);\n\n        popperOffsets[altAxis] = _preventedOffset;\n        data[altAxis] = _preventedOffset - _offset;\n      }\n    }\n\n    state.modifiersData[name] = data;\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  var preventOverflow$1 = {\n    name: 'preventOverflow',\n    enabled: true,\n    phase: 'main',\n    fn: preventOverflow,\n    requiresIfExists: ['offset']\n  };\n\n  function getHTMLElementScroll(element) {\n    return {\n      scrollLeft: element.scrollLeft,\n      scrollTop: element.scrollTop\n    };\n  }\n\n  function getNodeScroll(node) {\n    if (node === getWindow(node) || !isHTMLElement(node)) {\n      return getWindowScroll(node);\n    } else {\n      return getHTMLElementScroll(node);\n    }\n  }\n\n  // Composite means it takes into account transforms as well as layout.\n\n  function getCompositeRect(elementOrVirtualElement, offsetParent, isFixed) {\n    if (isFixed === void 0) {\n      isFixed = false;\n    }\n\n    var documentElement = getDocumentElement(offsetParent);\n    var rect = getBoundingClientRect(elementOrVirtualElement);\n    var isOffsetParentAnElement = isHTMLElement(offsetParent);\n    var scroll = {\n      scrollLeft: 0,\n      scrollTop: 0\n    };\n    var offsets = {\n      x: 0,\n      y: 0\n    };\n\n    if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {\n      if (getNodeName(offsetParent) !== 'body' || // https://github.com/popperjs/popper-core/issues/1078\n      isScrollParent(documentElement)) {\n        scroll = getNodeScroll(offsetParent);\n      }\n\n      if (isHTMLElement(offsetParent)) {\n        offsets = getBoundingClientRect(offsetParent);\n        offsets.x += offsetParent.clientLeft;\n        offsets.y += offsetParent.clientTop;\n      } else if (documentElement) {\n        offsets.x = getWindowScrollBarX(documentElement);\n      }\n    }\n\n    return {\n      x: rect.left + scroll.scrollLeft - offsets.x,\n      y: rect.top + scroll.scrollTop - offsets.y,\n      width: rect.width,\n      height: rect.height\n    };\n  }\n\n  function order(modifiers) {\n    var map = new Map();\n    var visited = new Set();\n    var result = [];\n    modifiers.forEach(function (modifier) {\n      map.set(modifier.name, modifier);\n    }); // On visiting object, check for its dependencies and visit them recursively\n\n    function sort(modifier) {\n      visited.add(modifier.name);\n      var requires = [].concat(modifier.requires || [], modifier.requiresIfExists || []);\n      requires.forEach(function (dep) {\n        if (!visited.has(dep)) {\n          var depModifier = map.get(dep);\n\n          if (depModifier) {\n            sort(depModifier);\n          }\n        }\n      });\n      result.push(modifier);\n    }\n\n    modifiers.forEach(function (modifier) {\n      if (!visited.has(modifier.name)) {\n        // check for visited object\n        sort(modifier);\n      }\n    });\n    return result;\n  }\n\n  function orderModifiers(modifiers) {\n    // order based on dependencies\n    var orderedModifiers = order(modifiers); // order based on phase\n\n    return modifierPhases.reduce(function (acc, phase) {\n      return acc.concat(orderedModifiers.filter(function (modifier) {\n        return modifier.phase === phase;\n      }));\n    }, []);\n  }\n\n  function debounce(fn) {\n    var pending;\n    return function () {\n      if (!pending) {\n        pending = new Promise(function (resolve) {\n          Promise.resolve().then(function () {\n            pending = undefined;\n            resolve(fn());\n          });\n        });\n      }\n\n      return pending;\n    };\n  }\n\n  function mergeByName(modifiers) {\n    var merged = modifiers.reduce(function (merged, current) {\n      var existing = merged[current.name];\n      merged[current.name] = existing ? Object.assign({}, existing, current, {\n        options: Object.assign({}, existing.options, current.options),\n        data: Object.assign({}, existing.data, current.data)\n      }) : current;\n      return merged;\n    }, {}); // IE11 does not support Object.values\n\n    return Object.keys(merged).map(function (key) {\n      return merged[key];\n    });\n  }\n\n  var DEFAULT_OPTIONS = {\n    placement: 'bottom',\n    modifiers: [],\n    strategy: 'absolute'\n  };\n\n  function areValidElements() {\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    return !args.some(function (element) {\n      return !(element && typeof element.getBoundingClientRect === 'function');\n    });\n  }\n\n  function popperGenerator(generatorOptions) {\n    if (generatorOptions === void 0) {\n      generatorOptions = {};\n    }\n\n    var _generatorOptions = generatorOptions,\n        _generatorOptions$def = _generatorOptions.defaultModifiers,\n        defaultModifiers = _generatorOptions$def === void 0 ? [] : _generatorOptions$def,\n        _generatorOptions$def2 = _generatorOptions.defaultOptions,\n        defaultOptions = _generatorOptions$def2 === void 0 ? DEFAULT_OPTIONS : _generatorOptions$def2;\n    return function createPopper(reference, popper, options) {\n      if (options === void 0) {\n        options = defaultOptions;\n      }\n\n      var state = {\n        placement: 'bottom',\n        orderedModifiers: [],\n        options: Object.assign({}, DEFAULT_OPTIONS, defaultOptions),\n        modifiersData: {},\n        elements: {\n          reference: reference,\n          popper: popper\n        },\n        attributes: {},\n        styles: {}\n      };\n      var effectCleanupFns = [];\n      var isDestroyed = false;\n      var instance = {\n        state: state,\n        setOptions: function setOptions(options) {\n          cleanupModifierEffects();\n          state.options = Object.assign({}, defaultOptions, state.options, options);\n          state.scrollParents = {\n            reference: isElement(reference) ? listScrollParents(reference) : reference.contextElement ? listScrollParents(reference.contextElement) : [],\n            popper: listScrollParents(popper)\n          }; // Orders the modifiers based on their dependencies and `phase`\n          // properties\n\n          var orderedModifiers = orderModifiers(mergeByName([].concat(defaultModifiers, state.options.modifiers))); // Strip out disabled modifiers\n\n          state.orderedModifiers = orderedModifiers.filter(function (m) {\n            return m.enabled;\n          }); // Validate the provided modifiers so that the consumer will get warned\n\n          runModifierEffects();\n          return instance.update();\n        },\n        // Sync update – it will always be executed, even if not necessary. This\n        // is useful for low frequency updates where sync behavior simplifies the\n        // logic.\n        // For high frequency updates (e.g. `resize` and `scroll` events), always\n        // prefer the async Popper#update method\n        forceUpdate: function forceUpdate() {\n          if (isDestroyed) {\n            return;\n          }\n\n          var _state$elements = state.elements,\n              reference = _state$elements.reference,\n              popper = _state$elements.popper; // Don't proceed if `reference` or `popper` are not valid elements\n          // anymore\n\n          if (!areValidElements(reference, popper)) {\n\n            return;\n          } // Store the reference and popper rects to be read by modifiers\n\n\n          state.rects = {\n            reference: getCompositeRect(reference, getOffsetParent(popper), state.options.strategy === 'fixed'),\n            popper: getLayoutRect(popper)\n          }; // Modifiers have the ability to reset the current update cycle. The\n          // most common use case for this is the `flip` modifier changing the\n          // placement, which then needs to re-run all the modifiers, because the\n          // logic was previously ran for the previous placement and is therefore\n          // stale/incorrect\n\n          state.reset = false;\n          state.placement = state.options.placement; // On each update cycle, the `modifiersData` property for each modifier\n          // is filled with the initial data specified by the modifier. This means\n          // it doesn't persist and is fresh on each update.\n          // To ensure persistent data, use `${name}#persistent`\n\n          state.orderedModifiers.forEach(function (modifier) {\n            return state.modifiersData[modifier.name] = Object.assign({}, modifier.data);\n          });\n\n          for (var index = 0; index < state.orderedModifiers.length; index++) {\n\n            if (state.reset === true) {\n              state.reset = false;\n              index = -1;\n              continue;\n            }\n\n            var _state$orderedModifie = state.orderedModifiers[index],\n                fn = _state$orderedModifie.fn,\n                _state$orderedModifie2 = _state$orderedModifie.options,\n                _options = _state$orderedModifie2 === void 0 ? {} : _state$orderedModifie2,\n                name = _state$orderedModifie.name;\n\n            if (typeof fn === 'function') {\n              state = fn({\n                state: state,\n                options: _options,\n                name: name,\n                instance: instance\n              }) || state;\n            }\n          }\n        },\n        // Async and optimistically optimized update – it will not be executed if\n        // not necessary (debounced to run at most once-per-tick)\n        update: debounce(function () {\n          return new Promise(function (resolve) {\n            instance.forceUpdate();\n            resolve(state);\n          });\n        }),\n        destroy: function destroy() {\n          cleanupModifierEffects();\n          isDestroyed = true;\n        }\n      };\n\n      if (!areValidElements(reference, popper)) {\n\n        return instance;\n      }\n\n      instance.setOptions(options).then(function (state) {\n        if (!isDestroyed && options.onFirstUpdate) {\n          options.onFirstUpdate(state);\n        }\n      }); // Modifiers have the ability to execute arbitrary code before the first\n      // update cycle runs. They will be executed in the same order as the update\n      // cycle. This is useful when a modifier adds some persistent data that\n      // other modifiers need to use, but the modifier is run after the dependent\n      // one.\n\n      function runModifierEffects() {\n        state.orderedModifiers.forEach(function (_ref3) {\n          var name = _ref3.name,\n              _ref3$options = _ref3.options,\n              options = _ref3$options === void 0 ? {} : _ref3$options,\n              effect = _ref3.effect;\n\n          if (typeof effect === 'function') {\n            var cleanupFn = effect({\n              state: state,\n              name: name,\n              instance: instance,\n              options: options\n            });\n\n            var noopFn = function noopFn() {};\n\n            effectCleanupFns.push(cleanupFn || noopFn);\n          }\n        });\n      }\n\n      function cleanupModifierEffects() {\n        effectCleanupFns.forEach(function (fn) {\n          return fn();\n        });\n        effectCleanupFns = [];\n      }\n\n      return instance;\n    };\n  }\n  var createPopper$2 = /*#__PURE__*/popperGenerator(); // eslint-disable-next-line import/no-unused-modules\n\n  var defaultModifiers$1 = [eventListeners, popperOffsets$1, computeStyles$1, applyStyles$1];\n  var createPopper$1 = /*#__PURE__*/popperGenerator({\n    defaultModifiers: defaultModifiers$1\n  }); // eslint-disable-next-line import/no-unused-modules\n\n  var defaultModifiers = [eventListeners, popperOffsets$1, computeStyles$1, applyStyles$1, offset$1, flip$1, preventOverflow$1, arrow$1, hide$1];\n  var createPopper = /*#__PURE__*/popperGenerator({\n    defaultModifiers: defaultModifiers\n  }); // eslint-disable-next-line import/no-unused-modules\n\n  var Popper = /*#__PURE__*/Object.freeze({\n    __proto__: null,\n    popperGenerator: popperGenerator,\n    detectOverflow: detectOverflow,\n    createPopperBase: createPopper$2,\n    createPopper: createPopper,\n    createPopperLite: createPopper$1,\n    top: top,\n    bottom: bottom,\n    right: right,\n    left: left,\n    auto: auto,\n    basePlacements: basePlacements,\n    start: start,\n    end: end,\n    clippingParents: clippingParents,\n    viewport: viewport,\n    popper: popper,\n    reference: reference,\n    variationPlacements: variationPlacements,\n    placements: placements,\n    beforeRead: beforeRead,\n    read: read,\n    afterRead: afterRead,\n    beforeMain: beforeMain,\n    main: main,\n    afterMain: afterMain,\n    beforeWrite: beforeWrite,\n    write: write,\n    afterWrite: afterWrite,\n    modifierPhases: modifierPhases,\n    applyStyles: applyStyles$1,\n    arrow: arrow$1,\n    computeStyles: computeStyles$1,\n    eventListeners: eventListeners,\n    flip: flip$1,\n    hide: hide$1,\n    offset: offset$1,\n    popperOffsets: popperOffsets$1,\n    preventOverflow: preventOverflow$1\n  });\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): dropdown.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$8 = 'dropdown';\n  const DATA_KEY$7 = 'bs.dropdown';\n  const EVENT_KEY$7 = `.${DATA_KEY$7}`;\n  const DATA_API_KEY$4 = '.data-api';\n  const ESCAPE_KEY$2 = 'Escape';\n  const SPACE_KEY = 'Space';\n  const TAB_KEY = 'Tab';\n  const ARROW_UP_KEY = 'ArrowUp';\n  const ARROW_DOWN_KEY = 'ArrowDown';\n  const RIGHT_MOUSE_BUTTON = 2; // MouseEvent.button value for the secondary button, usually the right button\n\n  const REGEXP_KEYDOWN = new RegExp(`${ARROW_UP_KEY}|${ARROW_DOWN_KEY}|${ESCAPE_KEY$2}`);\n  const EVENT_HIDE$4 = `hide${EVENT_KEY$7}`;\n  const EVENT_HIDDEN$4 = `hidden${EVENT_KEY$7}`;\n  const EVENT_SHOW$4 = `show${EVENT_KEY$7}`;\n  const EVENT_SHOWN$4 = `shown${EVENT_KEY$7}`;\n  const EVENT_CLICK = `click${EVENT_KEY$7}`;\n  const EVENT_CLICK_DATA_API$3 = `click${EVENT_KEY$7}${DATA_API_KEY$4}`;\n  const EVENT_KEYDOWN_DATA_API = `keydown${EVENT_KEY$7}${DATA_API_KEY$4}`;\n  const EVENT_KEYUP_DATA_API = `keyup${EVENT_KEY$7}${DATA_API_KEY$4}`;\n  const CLASS_NAME_SHOW$7 = 'show';\n  const CLASS_NAME_DROPUP = 'dropup';\n  const CLASS_NAME_DROPEND = 'dropend';\n  const CLASS_NAME_DROPSTART = 'dropstart';\n  const CLASS_NAME_NAVBAR = 'navbar';\n  const SELECTOR_DATA_TOGGLE$3 = '[data-bs-toggle=\"dropdown\"]';\n  const SELECTOR_MENU = '.dropdown-menu';\n  const SELECTOR_NAVBAR_NAV = '.navbar-nav';\n  const SELECTOR_VISIBLE_ITEMS = '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)';\n  const PLACEMENT_TOP = isRTL() ? 'top-end' : 'top-start';\n  const PLACEMENT_TOPEND = isRTL() ? 'top-start' : 'top-end';\n  const PLACEMENT_BOTTOM = isRTL() ? 'bottom-end' : 'bottom-start';\n  const PLACEMENT_BOTTOMEND = isRTL() ? 'bottom-start' : 'bottom-end';\n  const PLACEMENT_RIGHT = isRTL() ? 'left-start' : 'right-start';\n  const PLACEMENT_LEFT = isRTL() ? 'right-start' : 'left-start';\n  const Default$7 = {\n    offset: [0, 2],\n    boundary: 'clippingParents',\n    reference: 'toggle',\n    display: 'dynamic',\n    popperConfig: null,\n    autoClose: true\n  };\n  const DefaultType$7 = {\n    offset: '(array|string|function)',\n    boundary: '(string|element)',\n    reference: '(string|element|object)',\n    display: 'string',\n    popperConfig: '(null|object|function)',\n    autoClose: '(boolean|string)'\n  };\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Dropdown extends BaseComponent {\n    constructor(element, config) {\n      super(element);\n      this._popper = null;\n      this._config = this._getConfig(config);\n      this._menu = this._getMenuElement();\n      this._inNavbar = this._detectNavbar();\n\n      this._addEventListeners();\n    } // Getters\n\n\n    static get Default() {\n      return Default$7;\n    }\n\n    static get DefaultType() {\n      return DefaultType$7;\n    }\n\n    static get NAME() {\n      return NAME$8;\n    } // Public\n\n\n    toggle() {\n      if (isDisabled(this._element)) {\n        return;\n      }\n\n      const isActive = this._element.classList.contains(CLASS_NAME_SHOW$7);\n\n      if (isActive) {\n        this.hide();\n        return;\n      }\n\n      this.show();\n    }\n\n    show() {\n      if (isDisabled(this._element) || this._menu.classList.contains(CLASS_NAME_SHOW$7)) {\n        return;\n      }\n\n      const parent = Dropdown.getParentFromElement(this._element);\n      const relatedTarget = {\n        relatedTarget: this._element\n      };\n      const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$4, relatedTarget);\n\n      if (showEvent.defaultPrevented) {\n        return;\n      } // Totally disable Popper for Dropdowns in Navbar\n\n\n      if (this._inNavbar) {\n        Manipulator.setDataAttribute(this._menu, 'popper', 'none');\n      } else {\n        if (typeof Popper === 'undefined') {\n          throw new TypeError('Bootstrap\\'s dropdowns require Popper (https://popper.js.org)');\n        }\n\n        let referenceElement = this._element;\n\n        if (this._config.reference === 'parent') {\n          referenceElement = parent;\n        } else if (isElement$1(this._config.reference)) {\n          referenceElement = getElement(this._config.reference);\n        } else if (typeof this._config.reference === 'object') {\n          referenceElement = this._config.reference;\n        }\n\n        const popperConfig = this._getPopperConfig();\n\n        const isDisplayStatic = popperConfig.modifiers.find(modifier => modifier.name === 'applyStyles' && modifier.enabled === false);\n        this._popper = createPopper(referenceElement, this._menu, popperConfig);\n\n        if (isDisplayStatic) {\n          Manipulator.setDataAttribute(this._menu, 'popper', 'static');\n        }\n      } // If this is a touch-enabled device we add extra\n      // empty mouseover listeners to the body's immediate children;\n      // only needed because of broken event delegation on iOS\n      // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n\n\n      if ('ontouchstart' in document.documentElement && !parent.closest(SELECTOR_NAVBAR_NAV)) {\n        [].concat(...document.body.children).forEach(elem => EventHandler.on(elem, 'mouseover', noop));\n      }\n\n      this._element.focus();\n\n      this._element.setAttribute('aria-expanded', true);\n\n      this._menu.classList.toggle(CLASS_NAME_SHOW$7);\n\n      this._element.classList.toggle(CLASS_NAME_SHOW$7);\n\n      EventHandler.trigger(this._element, EVENT_SHOWN$4, relatedTarget);\n    }\n\n    hide() {\n      if (isDisabled(this._element) || !this._menu.classList.contains(CLASS_NAME_SHOW$7)) {\n        return;\n      }\n\n      const relatedTarget = {\n        relatedTarget: this._element\n      };\n\n      this._completeHide(relatedTarget);\n    }\n\n    dispose() {\n      if (this._popper) {\n        this._popper.destroy();\n      }\n\n      super.dispose();\n    }\n\n    update() {\n      this._inNavbar = this._detectNavbar();\n\n      if (this._popper) {\n        this._popper.update();\n      }\n    } // Private\n\n\n    _addEventListeners() {\n      EventHandler.on(this._element, EVENT_CLICK, event => {\n        event.preventDefault();\n        this.toggle();\n      });\n    }\n\n    _completeHide(relatedTarget) {\n      const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$4, relatedTarget);\n\n      if (hideEvent.defaultPrevented) {\n        return;\n      } // If this is a touch-enabled device we remove the extra\n      // empty mouseover listeners we added for iOS support\n\n\n      if ('ontouchstart' in document.documentElement) {\n        [].concat(...document.body.children).forEach(elem => EventHandler.off(elem, 'mouseover', noop));\n      }\n\n      if (this._popper) {\n        this._popper.destroy();\n      }\n\n      this._menu.classList.remove(CLASS_NAME_SHOW$7);\n\n      this._element.classList.remove(CLASS_NAME_SHOW$7);\n\n      this._element.setAttribute('aria-expanded', 'false');\n\n      Manipulator.removeDataAttribute(this._menu, 'popper');\n      EventHandler.trigger(this._element, EVENT_HIDDEN$4, relatedTarget);\n    }\n\n    _getConfig(config) {\n      config = { ...this.constructor.Default,\n        ...Manipulator.getDataAttributes(this._element),\n        ...config\n      };\n      typeCheckConfig(NAME$8, config, this.constructor.DefaultType);\n\n      if (typeof config.reference === 'object' && !isElement$1(config.reference) && typeof config.reference.getBoundingClientRect !== 'function') {\n        // Popper virtual elements require a getBoundingClientRect method\n        throw new TypeError(`${NAME$8.toUpperCase()}: Option \"reference\" provided type \"object\" without a required \"getBoundingClientRect\" method.`);\n      }\n\n      return config;\n    }\n\n    _getMenuElement() {\n      return SelectorEngine.next(this._element, SELECTOR_MENU)[0];\n    }\n\n    _getPlacement() {\n      const parentDropdown = this._element.parentNode;\n\n      if (parentDropdown.classList.contains(CLASS_NAME_DROPEND)) {\n        return PLACEMENT_RIGHT;\n      }\n\n      if (parentDropdown.classList.contains(CLASS_NAME_DROPSTART)) {\n        return PLACEMENT_LEFT;\n      } // We need to trim the value because custom properties can also include spaces\n\n\n      const isEnd = getComputedStyle(this._menu).getPropertyValue('--bs-position').trim() === 'end';\n\n      if (parentDropdown.classList.contains(CLASS_NAME_DROPUP)) {\n        return isEnd ? PLACEMENT_TOPEND : PLACEMENT_TOP;\n      }\n\n      return isEnd ? PLACEMENT_BOTTOMEND : PLACEMENT_BOTTOM;\n    }\n\n    _detectNavbar() {\n      return this._element.closest(`.${CLASS_NAME_NAVBAR}`) !== null;\n    }\n\n    _getOffset() {\n      const {\n        offset\n      } = this._config;\n\n      if (typeof offset === 'string') {\n        return offset.split(',').map(val => Number.parseInt(val, 10));\n      }\n\n      if (typeof offset === 'function') {\n        return popperData => offset(popperData, this._element);\n      }\n\n      return offset;\n    }\n\n    _getPopperConfig() {\n      const defaultBsPopperConfig = {\n        placement: this._getPlacement(),\n        modifiers: [{\n          name: 'preventOverflow',\n          options: {\n            boundary: this._config.boundary\n          }\n        }, {\n          name: 'offset',\n          options: {\n            offset: this._getOffset()\n          }\n        }]\n      }; // Disable Popper if we have a static display\n\n      if (this._config.display === 'static') {\n        defaultBsPopperConfig.modifiers = [{\n          name: 'applyStyles',\n          enabled: false\n        }];\n      }\n\n      return { ...defaultBsPopperConfig,\n        ...(typeof this._config.popperConfig === 'function' ? this._config.popperConfig(defaultBsPopperConfig) : this._config.popperConfig)\n      };\n    }\n\n    _selectMenuItem({\n      key,\n      target\n    }) {\n      const items = SelectorEngine.find(SELECTOR_VISIBLE_ITEMS, this._menu).filter(isVisible);\n\n      if (!items.length) {\n        return;\n      } // if target isn't included in items (e.g. when expanding the dropdown)\n      // allow cycling to get the last item in case key equals ARROW_UP_KEY\n\n\n      getNextActiveElement(items, target, key === ARROW_DOWN_KEY, !items.includes(target)).focus();\n    } // Static\n\n\n    static dropdownInterface(element, config) {\n      const data = Dropdown.getOrCreateInstance(element, config);\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config]();\n      }\n    }\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        Dropdown.dropdownInterface(this, config);\n      });\n    }\n\n    static clearMenus(event) {\n      if (event && (event.button === RIGHT_MOUSE_BUTTON || event.type === 'keyup' && event.key !== TAB_KEY)) {\n        return;\n      }\n\n      const toggles = SelectorEngine.find(SELECTOR_DATA_TOGGLE$3);\n\n      for (let i = 0, len = toggles.length; i < len; i++) {\n        const context = Dropdown.getInstance(toggles[i]);\n\n        if (!context || context._config.autoClose === false) {\n          continue;\n        }\n\n        if (!context._element.classList.contains(CLASS_NAME_SHOW$7)) {\n          continue;\n        }\n\n        const relatedTarget = {\n          relatedTarget: context._element\n        };\n\n        if (event) {\n          const composedPath = event.composedPath();\n          const isMenuTarget = composedPath.includes(context._menu);\n\n          if (composedPath.includes(context._element) || context._config.autoClose === 'inside' && !isMenuTarget || context._config.autoClose === 'outside' && isMenuTarget) {\n            continue;\n          } // Tab navigation through the dropdown menu or events from contained inputs shouldn't close the menu\n\n\n          if (context._menu.contains(event.target) && (event.type === 'keyup' && event.key === TAB_KEY || /input|select|option|textarea|form/i.test(event.target.tagName))) {\n            continue;\n          }\n\n          if (event.type === 'click') {\n            relatedTarget.clickEvent = event;\n          }\n        }\n\n        context._completeHide(relatedTarget);\n      }\n    }\n\n    static getParentFromElement(element) {\n      return getElementFromSelector(element) || element.parentNode;\n    }\n\n    static dataApiKeydownHandler(event) {\n      // If not input/textarea:\n      //  - And not a key in REGEXP_KEYDOWN => not a dropdown command\n      // If input/textarea:\n      //  - If space key => not a dropdown command\n      //  - If key is other than escape\n      //    - If key is not up or down => not a dropdown command\n      //    - If trigger inside the menu => not a dropdown command\n      if (/input|textarea/i.test(event.target.tagName) ? event.key === SPACE_KEY || event.key !== ESCAPE_KEY$2 && (event.key !== ARROW_DOWN_KEY && event.key !== ARROW_UP_KEY || event.target.closest(SELECTOR_MENU)) : !REGEXP_KEYDOWN.test(event.key)) {\n        return;\n      }\n\n      const isActive = this.classList.contains(CLASS_NAME_SHOW$7);\n\n      if (!isActive && event.key === ESCAPE_KEY$2) {\n        return;\n      }\n\n      event.preventDefault();\n      event.stopPropagation();\n\n      if (isDisabled(this)) {\n        return;\n      }\n\n      const getToggleButton = () => this.matches(SELECTOR_DATA_TOGGLE$3) ? this : SelectorEngine.prev(this, SELECTOR_DATA_TOGGLE$3)[0];\n\n      if (event.key === ESCAPE_KEY$2) {\n        getToggleButton().focus();\n        Dropdown.clearMenus();\n        return;\n      }\n\n      if (event.key === ARROW_UP_KEY || event.key === ARROW_DOWN_KEY) {\n        if (!isActive) {\n          getToggleButton().click();\n        }\n\n        Dropdown.getInstance(getToggleButton())._selectMenuItem(event);\n\n        return;\n      }\n\n      if (!isActive || event.key === SPACE_KEY) {\n        Dropdown.clearMenus();\n      }\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_DATA_TOGGLE$3, Dropdown.dataApiKeydownHandler);\n  EventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown.dataApiKeydownHandler);\n  EventHandler.on(document, EVENT_CLICK_DATA_API$3, Dropdown.clearMenus);\n  EventHandler.on(document, EVENT_KEYUP_DATA_API, Dropdown.clearMenus);\n  EventHandler.on(document, EVENT_CLICK_DATA_API$3, SELECTOR_DATA_TOGGLE$3, function (event) {\n    event.preventDefault();\n    Dropdown.dropdownInterface(this);\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Dropdown to jQuery only if jQuery is present\n   */\n\n  defineJQueryPlugin(Dropdown);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): util/scrollBar.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  const SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top';\n  const SELECTOR_STICKY_CONTENT = '.sticky-top';\n\n  class ScrollBarHelper {\n    constructor() {\n      this._element = document.body;\n    }\n\n    getWidth() {\n      // https://developer.mozilla.org/en-US/docs/Web/API/Window/innerWidth#usage_notes\n      const documentWidth = document.documentElement.clientWidth;\n      return Math.abs(window.innerWidth - documentWidth);\n    }\n\n    hide() {\n      const width = this.getWidth();\n\n      this._disableOverFlow(); // give padding to element to balance the hidden scrollbar width\n\n\n      this._setElementAttributes(this._element, 'paddingRight', calculatedValue => calculatedValue + width); // trick: We adjust positive paddingRight and negative marginRight to sticky-top elements to keep showing fullwidth\n\n\n      this._setElementAttributes(SELECTOR_FIXED_CONTENT, 'paddingRight', calculatedValue => calculatedValue + width);\n\n      this._setElementAttributes(SELECTOR_STICKY_CONTENT, 'marginRight', calculatedValue => calculatedValue - width);\n    }\n\n    _disableOverFlow() {\n      this._saveInitialAttribute(this._element, 'overflow');\n\n      this._element.style.overflow = 'hidden';\n    }\n\n    _setElementAttributes(selector, styleProp, callback) {\n      const scrollbarWidth = this.getWidth();\n\n      const manipulationCallBack = element => {\n        if (element !== this._element && window.innerWidth > element.clientWidth + scrollbarWidth) {\n          return;\n        }\n\n        this._saveInitialAttribute(element, styleProp);\n\n        const calculatedValue = window.getComputedStyle(element)[styleProp];\n        element.style[styleProp] = `${callback(Number.parseFloat(calculatedValue))}px`;\n      };\n\n      this._applyManipulationCallback(selector, manipulationCallBack);\n    }\n\n    reset() {\n      this._resetElementAttributes(this._element, 'overflow');\n\n      this._resetElementAttributes(this._element, 'paddingRight');\n\n      this._resetElementAttributes(SELECTOR_FIXED_CONTENT, 'paddingRight');\n\n      this._resetElementAttributes(SELECTOR_STICKY_CONTENT, 'marginRight');\n    }\n\n    _saveInitialAttribute(element, styleProp) {\n      const actualValue = element.style[styleProp];\n\n      if (actualValue) {\n        Manipulator.setDataAttribute(element, styleProp, actualValue);\n      }\n    }\n\n    _resetElementAttributes(selector, styleProp) {\n      const manipulationCallBack = element => {\n        const value = Manipulator.getDataAttribute(element, styleProp);\n\n        if (typeof value === 'undefined') {\n          element.style.removeProperty(styleProp);\n        } else {\n          Manipulator.removeDataAttribute(element, styleProp);\n          element.style[styleProp] = value;\n        }\n      };\n\n      this._applyManipulationCallback(selector, manipulationCallBack);\n    }\n\n    _applyManipulationCallback(selector, callBack) {\n      if (isElement$1(selector)) {\n        callBack(selector);\n      } else {\n        SelectorEngine.find(selector, this._element).forEach(callBack);\n      }\n    }\n\n    isOverflowing() {\n      return this.getWidth() > 0;\n    }\n\n  }\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): util/backdrop.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  const Default$6 = {\n    isVisible: true,\n    // if false, we use the backdrop helper without adding any element to the dom\n    isAnimated: false,\n    rootElement: 'body',\n    // give the choice to place backdrop under different elements\n    clickCallback: null\n  };\n  const DefaultType$6 = {\n    isVisible: 'boolean',\n    isAnimated: 'boolean',\n    rootElement: '(element|string)',\n    clickCallback: '(function|null)'\n  };\n  const NAME$7 = 'backdrop';\n  const CLASS_NAME_BACKDROP = 'modal-backdrop';\n  const CLASS_NAME_FADE$5 = 'fade';\n  const CLASS_NAME_SHOW$6 = 'show';\n  const EVENT_MOUSEDOWN = `mousedown.bs.${NAME$7}`;\n\n  class Backdrop {\n    constructor(config) {\n      this._config = this._getConfig(config);\n      this._isAppended = false;\n      this._element = null;\n    }\n\n    show(callback) {\n      if (!this._config.isVisible) {\n        execute(callback);\n        return;\n      }\n\n      this._append();\n\n      if (this._config.isAnimated) {\n        reflow(this._getElement());\n      }\n\n      this._getElement().classList.add(CLASS_NAME_SHOW$6);\n\n      this._emulateAnimation(() => {\n        execute(callback);\n      });\n    }\n\n    hide(callback) {\n      if (!this._config.isVisible) {\n        execute(callback);\n        return;\n      }\n\n      this._getElement().classList.remove(CLASS_NAME_SHOW$6);\n\n      this._emulateAnimation(() => {\n        this.dispose();\n        execute(callback);\n      });\n    } // Private\n\n\n    _getElement() {\n      if (!this._element) {\n        const backdrop = document.createElement('div');\n        backdrop.className = CLASS_NAME_BACKDROP;\n\n        if (this._config.isAnimated) {\n          backdrop.classList.add(CLASS_NAME_FADE$5);\n        }\n\n        this._element = backdrop;\n      }\n\n      return this._element;\n    }\n\n    _getConfig(config) {\n      config = { ...Default$6,\n        ...(typeof config === 'object' ? config : {})\n      }; // use getElement() with the default \"body\" to get a fresh Element on each instantiation\n\n      config.rootElement = getElement(config.rootElement);\n      typeCheckConfig(NAME$7, config, DefaultType$6);\n      return config;\n    }\n\n    _append() {\n      if (this._isAppended) {\n        return;\n      }\n\n      this._config.rootElement.appendChild(this._getElement());\n\n      EventHandler.on(this._getElement(), EVENT_MOUSEDOWN, () => {\n        execute(this._config.clickCallback);\n      });\n      this._isAppended = true;\n    }\n\n    dispose() {\n      if (!this._isAppended) {\n        return;\n      }\n\n      EventHandler.off(this._element, EVENT_MOUSEDOWN);\n\n      this._element.remove();\n\n      this._isAppended = false;\n    }\n\n    _emulateAnimation(callback) {\n      executeAfterTransition(callback, this._getElement(), this._config.isAnimated);\n    }\n\n  }\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): modal.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$6 = 'modal';\n  const DATA_KEY$6 = 'bs.modal';\n  const EVENT_KEY$6 = `.${DATA_KEY$6}`;\n  const DATA_API_KEY$3 = '.data-api';\n  const ESCAPE_KEY$1 = 'Escape';\n  const Default$5 = {\n    backdrop: true,\n    keyboard: true,\n    focus: true\n  };\n  const DefaultType$5 = {\n    backdrop: '(boolean|string)',\n    keyboard: 'boolean',\n    focus: 'boolean'\n  };\n  const EVENT_HIDE$3 = `hide${EVENT_KEY$6}`;\n  const EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY$6}`;\n  const EVENT_HIDDEN$3 = `hidden${EVENT_KEY$6}`;\n  const EVENT_SHOW$3 = `show${EVENT_KEY$6}`;\n  const EVENT_SHOWN$3 = `shown${EVENT_KEY$6}`;\n  const EVENT_FOCUSIN$2 = `focusin${EVENT_KEY$6}`;\n  const EVENT_RESIZE = `resize${EVENT_KEY$6}`;\n  const EVENT_CLICK_DISMISS$2 = `click.dismiss${EVENT_KEY$6}`;\n  const EVENT_KEYDOWN_DISMISS$1 = `keydown.dismiss${EVENT_KEY$6}`;\n  const EVENT_MOUSEUP_DISMISS = `mouseup.dismiss${EVENT_KEY$6}`;\n  const EVENT_MOUSEDOWN_DISMISS = `mousedown.dismiss${EVENT_KEY$6}`;\n  const EVENT_CLICK_DATA_API$2 = `click${EVENT_KEY$6}${DATA_API_KEY$3}`;\n  const CLASS_NAME_OPEN = 'modal-open';\n  const CLASS_NAME_FADE$4 = 'fade';\n  const CLASS_NAME_SHOW$5 = 'show';\n  const CLASS_NAME_STATIC = 'modal-static';\n  const SELECTOR_DIALOG = '.modal-dialog';\n  const SELECTOR_MODAL_BODY = '.modal-body';\n  const SELECTOR_DATA_TOGGLE$2 = '[data-bs-toggle=\"modal\"]';\n  const SELECTOR_DATA_DISMISS$2 = '[data-bs-dismiss=\"modal\"]';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Modal extends BaseComponent {\n    constructor(element, config) {\n      super(element);\n      this._config = this._getConfig(config);\n      this._dialog = SelectorEngine.findOne(SELECTOR_DIALOG, this._element);\n      this._backdrop = this._initializeBackDrop();\n      this._isShown = false;\n      this._ignoreBackdropClick = false;\n      this._isTransitioning = false;\n      this._scrollBar = new ScrollBarHelper();\n    } // Getters\n\n\n    static get Default() {\n      return Default$5;\n    }\n\n    static get NAME() {\n      return NAME$6;\n    } // Public\n\n\n    toggle(relatedTarget) {\n      return this._isShown ? this.hide() : this.show(relatedTarget);\n    }\n\n    show(relatedTarget) {\n      if (this._isShown || this._isTransitioning) {\n        return;\n      }\n\n      const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$3, {\n        relatedTarget\n      });\n\n      if (showEvent.defaultPrevented) {\n        return;\n      }\n\n      this._isShown = true;\n\n      if (this._isAnimated()) {\n        this._isTransitioning = true;\n      }\n\n      this._scrollBar.hide();\n\n      document.body.classList.add(CLASS_NAME_OPEN);\n\n      this._adjustDialog();\n\n      this._setEscapeEvent();\n\n      this._setResizeEvent();\n\n      EventHandler.on(this._element, EVENT_CLICK_DISMISS$2, SELECTOR_DATA_DISMISS$2, event => this.hide(event));\n      EventHandler.on(this._dialog, EVENT_MOUSEDOWN_DISMISS, () => {\n        EventHandler.one(this._element, EVENT_MOUSEUP_DISMISS, event => {\n          if (event.target === this._element) {\n            this._ignoreBackdropClick = true;\n          }\n        });\n      });\n\n      this._showBackdrop(() => this._showElement(relatedTarget));\n    }\n\n    hide(event) {\n      if (event && ['A', 'AREA'].includes(event.target.tagName)) {\n        event.preventDefault();\n      }\n\n      if (!this._isShown || this._isTransitioning) {\n        return;\n      }\n\n      const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$3);\n\n      if (hideEvent.defaultPrevented) {\n        return;\n      }\n\n      this._isShown = false;\n\n      const isAnimated = this._isAnimated();\n\n      if (isAnimated) {\n        this._isTransitioning = true;\n      }\n\n      this._setEscapeEvent();\n\n      this._setResizeEvent();\n\n      EventHandler.off(document, EVENT_FOCUSIN$2);\n\n      this._element.classList.remove(CLASS_NAME_SHOW$5);\n\n      EventHandler.off(this._element, EVENT_CLICK_DISMISS$2);\n      EventHandler.off(this._dialog, EVENT_MOUSEDOWN_DISMISS);\n\n      this._queueCallback(() => this._hideModal(), this._element, isAnimated);\n    }\n\n    dispose() {\n      [window, this._dialog].forEach(htmlElement => EventHandler.off(htmlElement, EVENT_KEY$6));\n\n      this._backdrop.dispose();\n\n      super.dispose();\n      /**\n       * `document` has 2 events `EVENT_FOCUSIN` and `EVENT_CLICK_DATA_API`\n       * Do not move `document` in `htmlElements` array\n       * It will remove `EVENT_CLICK_DATA_API` event that should remain\n       */\n\n      EventHandler.off(document, EVENT_FOCUSIN$2);\n    }\n\n    handleUpdate() {\n      this._adjustDialog();\n    } // Private\n\n\n    _initializeBackDrop() {\n      return new Backdrop({\n        isVisible: Boolean(this._config.backdrop),\n        // 'static' option will be translated to true, and booleans will keep their value\n        isAnimated: this._isAnimated()\n      });\n    }\n\n    _getConfig(config) {\n      config = { ...Default$5,\n        ...Manipulator.getDataAttributes(this._element),\n        ...(typeof config === 'object' ? config : {})\n      };\n      typeCheckConfig(NAME$6, config, DefaultType$5);\n      return config;\n    }\n\n    _showElement(relatedTarget) {\n      const isAnimated = this._isAnimated();\n\n      const modalBody = SelectorEngine.findOne(SELECTOR_MODAL_BODY, this._dialog);\n\n      if (!this._element.parentNode || this._element.parentNode.nodeType !== Node.ELEMENT_NODE) {\n        // Don't move modal's DOM position\n        document.body.appendChild(this._element);\n      }\n\n      this._element.style.display = 'block';\n\n      this._element.removeAttribute('aria-hidden');\n\n      this._element.setAttribute('aria-modal', true);\n\n      this._element.setAttribute('role', 'dialog');\n\n      this._element.scrollTop = 0;\n\n      if (modalBody) {\n        modalBody.scrollTop = 0;\n      }\n\n      if (isAnimated) {\n        reflow(this._element);\n      }\n\n      this._element.classList.add(CLASS_NAME_SHOW$5);\n\n      if (this._config.focus) {\n        this._enforceFocus();\n      }\n\n      const transitionComplete = () => {\n        if (this._config.focus) {\n          this._element.focus();\n        }\n\n        this._isTransitioning = false;\n        EventHandler.trigger(this._element, EVENT_SHOWN$3, {\n          relatedTarget\n        });\n      };\n\n      this._queueCallback(transitionComplete, this._dialog, isAnimated);\n    }\n\n    _enforceFocus() {\n      EventHandler.off(document, EVENT_FOCUSIN$2); // guard against infinite focus loop\n\n      EventHandler.on(document, EVENT_FOCUSIN$2, event => {\n        if (document !== event.target && this._element !== event.target && !this._element.contains(event.target)) {\n          this._element.focus();\n        }\n      });\n    }\n\n    _setEscapeEvent() {\n      if (this._isShown) {\n        EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS$1, event => {\n          if (this._config.keyboard && event.key === ESCAPE_KEY$1) {\n            event.preventDefault();\n            this.hide();\n          } else if (!this._config.keyboard && event.key === ESCAPE_KEY$1) {\n            this._triggerBackdropTransition();\n          }\n        });\n      } else {\n        EventHandler.off(this._element, EVENT_KEYDOWN_DISMISS$1);\n      }\n    }\n\n    _setResizeEvent() {\n      if (this._isShown) {\n        EventHandler.on(window, EVENT_RESIZE, () => this._adjustDialog());\n      } else {\n        EventHandler.off(window, EVENT_RESIZE);\n      }\n    }\n\n    _hideModal() {\n      this._element.style.display = 'none';\n\n      this._element.setAttribute('aria-hidden', true);\n\n      this._element.removeAttribute('aria-modal');\n\n      this._element.removeAttribute('role');\n\n      this._isTransitioning = false;\n\n      this._backdrop.hide(() => {\n        document.body.classList.remove(CLASS_NAME_OPEN);\n\n        this._resetAdjustments();\n\n        this._scrollBar.reset();\n\n        EventHandler.trigger(this._element, EVENT_HIDDEN$3);\n      });\n    }\n\n    _showBackdrop(callback) {\n      EventHandler.on(this._element, EVENT_CLICK_DISMISS$2, event => {\n        if (this._ignoreBackdropClick) {\n          this._ignoreBackdropClick = false;\n          return;\n        }\n\n        if (event.target !== event.currentTarget) {\n          return;\n        }\n\n        if (this._config.backdrop === true) {\n          this.hide();\n        } else if (this._config.backdrop === 'static') {\n          this._triggerBackdropTransition();\n        }\n      });\n\n      this._backdrop.show(callback);\n    }\n\n    _isAnimated() {\n      return this._element.classList.contains(CLASS_NAME_FADE$4);\n    }\n\n    _triggerBackdropTransition() {\n      const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED);\n\n      if (hideEvent.defaultPrevented) {\n        return;\n      }\n\n      const {\n        classList,\n        scrollHeight,\n        style\n      } = this._element;\n      const isModalOverflowing = scrollHeight > document.documentElement.clientHeight; // return if the following background transition hasn't yet completed\n\n      if (!isModalOverflowing && style.overflowY === 'hidden' || classList.contains(CLASS_NAME_STATIC)) {\n        return;\n      }\n\n      if (!isModalOverflowing) {\n        style.overflowY = 'hidden';\n      }\n\n      classList.add(CLASS_NAME_STATIC);\n\n      this._queueCallback(() => {\n        classList.remove(CLASS_NAME_STATIC);\n\n        if (!isModalOverflowing) {\n          this._queueCallback(() => {\n            style.overflowY = '';\n          }, this._dialog);\n        }\n      }, this._dialog);\n\n      this._element.focus();\n    } // ----------------------------------------------------------------------\n    // the following methods are used to handle overflowing modals\n    // ----------------------------------------------------------------------\n\n\n    _adjustDialog() {\n      const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;\n\n      const scrollbarWidth = this._scrollBar.getWidth();\n\n      const isBodyOverflowing = scrollbarWidth > 0;\n\n      if (!isBodyOverflowing && isModalOverflowing && !isRTL() || isBodyOverflowing && !isModalOverflowing && isRTL()) {\n        this._element.style.paddingLeft = `${scrollbarWidth}px`;\n      }\n\n      if (isBodyOverflowing && !isModalOverflowing && !isRTL() || !isBodyOverflowing && isModalOverflowing && isRTL()) {\n        this._element.style.paddingRight = `${scrollbarWidth}px`;\n      }\n    }\n\n    _resetAdjustments() {\n      this._element.style.paddingLeft = '';\n      this._element.style.paddingRight = '';\n    } // Static\n\n\n    static jQueryInterface(config, relatedTarget) {\n      return this.each(function () {\n        const data = Modal.getOrCreateInstance(this, config);\n\n        if (typeof config !== 'string') {\n          return;\n        }\n\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config](relatedTarget);\n      });\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(document, EVENT_CLICK_DATA_API$2, SELECTOR_DATA_TOGGLE$2, function (event) {\n    const target = getElementFromSelector(this);\n\n    if (['A', 'AREA'].includes(this.tagName)) {\n      event.preventDefault();\n    }\n\n    EventHandler.one(target, EVENT_SHOW$3, showEvent => {\n      if (showEvent.defaultPrevented) {\n        // only register focus restorer if modal will actually get shown\n        return;\n      }\n\n      EventHandler.one(target, EVENT_HIDDEN$3, () => {\n        if (isVisible(this)) {\n          this.focus();\n        }\n      });\n    });\n    const data = Modal.getOrCreateInstance(target);\n    data.toggle(this);\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Modal to jQuery only if jQuery is present\n   */\n\n  defineJQueryPlugin(Modal);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): offcanvas.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$5 = 'offcanvas';\n  const DATA_KEY$5 = 'bs.offcanvas';\n  const EVENT_KEY$5 = `.${DATA_KEY$5}`;\n  const DATA_API_KEY$2 = '.data-api';\n  const EVENT_LOAD_DATA_API$1 = `load${EVENT_KEY$5}${DATA_API_KEY$2}`;\n  const ESCAPE_KEY = 'Escape';\n  const Default$4 = {\n    backdrop: true,\n    keyboard: true,\n    scroll: false\n  };\n  const DefaultType$4 = {\n    backdrop: 'boolean',\n    keyboard: 'boolean',\n    scroll: 'boolean'\n  };\n  const CLASS_NAME_SHOW$4 = 'show';\n  const OPEN_SELECTOR = '.offcanvas.show';\n  const EVENT_SHOW$2 = `show${EVENT_KEY$5}`;\n  const EVENT_SHOWN$2 = `shown${EVENT_KEY$5}`;\n  const EVENT_HIDE$2 = `hide${EVENT_KEY$5}`;\n  const EVENT_HIDDEN$2 = `hidden${EVENT_KEY$5}`;\n  const EVENT_FOCUSIN$1 = `focusin${EVENT_KEY$5}`;\n  const EVENT_CLICK_DATA_API$1 = `click${EVENT_KEY$5}${DATA_API_KEY$2}`;\n  const EVENT_CLICK_DISMISS$1 = `click.dismiss${EVENT_KEY$5}`;\n  const EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY$5}`;\n  const SELECTOR_DATA_DISMISS$1 = '[data-bs-dismiss=\"offcanvas\"]';\n  const SELECTOR_DATA_TOGGLE$1 = '[data-bs-toggle=\"offcanvas\"]';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Offcanvas extends BaseComponent {\n    constructor(element, config) {\n      super(element);\n      this._config = this._getConfig(config);\n      this._isShown = false;\n      this._backdrop = this._initializeBackDrop();\n\n      this._addEventListeners();\n    } // Getters\n\n\n    static get NAME() {\n      return NAME$5;\n    }\n\n    static get Default() {\n      return Default$4;\n    } // Public\n\n\n    toggle(relatedTarget) {\n      return this._isShown ? this.hide() : this.show(relatedTarget);\n    }\n\n    show(relatedTarget) {\n      if (this._isShown) {\n        return;\n      }\n\n      const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$2, {\n        relatedTarget\n      });\n\n      if (showEvent.defaultPrevented) {\n        return;\n      }\n\n      this._isShown = true;\n      this._element.style.visibility = 'visible';\n\n      this._backdrop.show();\n\n      if (!this._config.scroll) {\n        new ScrollBarHelper().hide();\n\n        this._enforceFocusOnElement(this._element);\n      }\n\n      this._element.removeAttribute('aria-hidden');\n\n      this._element.setAttribute('aria-modal', true);\n\n      this._element.setAttribute('role', 'dialog');\n\n      this._element.classList.add(CLASS_NAME_SHOW$4);\n\n      const completeCallBack = () => {\n        EventHandler.trigger(this._element, EVENT_SHOWN$2, {\n          relatedTarget\n        });\n      };\n\n      this._queueCallback(completeCallBack, this._element, true);\n    }\n\n    hide() {\n      if (!this._isShown) {\n        return;\n      }\n\n      const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$2);\n\n      if (hideEvent.defaultPrevented) {\n        return;\n      }\n\n      EventHandler.off(document, EVENT_FOCUSIN$1);\n\n      this._element.blur();\n\n      this._isShown = false;\n\n      this._element.classList.remove(CLASS_NAME_SHOW$4);\n\n      this._backdrop.hide();\n\n      const completeCallback = () => {\n        this._element.setAttribute('aria-hidden', true);\n\n        this._element.removeAttribute('aria-modal');\n\n        this._element.removeAttribute('role');\n\n        this._element.style.visibility = 'hidden';\n\n        if (!this._config.scroll) {\n          new ScrollBarHelper().reset();\n        }\n\n        EventHandler.trigger(this._element, EVENT_HIDDEN$2);\n      };\n\n      this._queueCallback(completeCallback, this._element, true);\n    }\n\n    dispose() {\n      this._backdrop.dispose();\n\n      super.dispose();\n      EventHandler.off(document, EVENT_FOCUSIN$1);\n    } // Private\n\n\n    _getConfig(config) {\n      config = { ...Default$4,\n        ...Manipulator.getDataAttributes(this._element),\n        ...(typeof config === 'object' ? config : {})\n      };\n      typeCheckConfig(NAME$5, config, DefaultType$4);\n      return config;\n    }\n\n    _initializeBackDrop() {\n      return new Backdrop({\n        isVisible: this._config.backdrop,\n        isAnimated: true,\n        rootElement: this._element.parentNode,\n        clickCallback: () => this.hide()\n      });\n    }\n\n    _enforceFocusOnElement(element) {\n      EventHandler.off(document, EVENT_FOCUSIN$1); // guard against infinite focus loop\n\n      EventHandler.on(document, EVENT_FOCUSIN$1, event => {\n        if (document !== event.target && element !== event.target && !element.contains(event.target)) {\n          element.focus();\n        }\n      });\n      element.focus();\n    }\n\n    _addEventListeners() {\n      EventHandler.on(this._element, EVENT_CLICK_DISMISS$1, SELECTOR_DATA_DISMISS$1, () => this.hide());\n      EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS, event => {\n        if (this._config.keyboard && event.key === ESCAPE_KEY) {\n          this.hide();\n        }\n      });\n    } // Static\n\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = Offcanvas.getOrCreateInstance(this, config);\n\n        if (typeof config !== 'string') {\n          return;\n        }\n\n        if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config](this);\n      });\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(document, EVENT_CLICK_DATA_API$1, SELECTOR_DATA_TOGGLE$1, function (event) {\n    const target = getElementFromSelector(this);\n\n    if (['A', 'AREA'].includes(this.tagName)) {\n      event.preventDefault();\n    }\n\n    if (isDisabled(this)) {\n      return;\n    }\n\n    EventHandler.one(target, EVENT_HIDDEN$2, () => {\n      // focus on trigger when it is closed\n      if (isVisible(this)) {\n        this.focus();\n      }\n    }); // avoid conflict when clicking a toggler of an offcanvas, while another is open\n\n    const allReadyOpen = SelectorEngine.findOne(OPEN_SELECTOR);\n\n    if (allReadyOpen && allReadyOpen !== target) {\n      Offcanvas.getInstance(allReadyOpen).hide();\n    }\n\n    const data = Offcanvas.getOrCreateInstance(target);\n    data.toggle(this);\n  });\n  EventHandler.on(window, EVENT_LOAD_DATA_API$1, () => SelectorEngine.find(OPEN_SELECTOR).forEach(el => Offcanvas.getOrCreateInstance(el).show()));\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   */\n\n  defineJQueryPlugin(Offcanvas);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): util/sanitizer.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  const uriAttrs = new Set(['background', 'cite', 'href', 'itemtype', 'longdesc', 'poster', 'src', 'xlink:href']);\n  const ARIA_ATTRIBUTE_PATTERN = /^aria-[\\w-]*$/i;\n  /**\n   * A pattern that recognizes a commonly useful subset of URLs that are safe.\n   *\n   * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts\n   */\n\n  const SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file):|[^#&/:?]*(?:[#/?]|$))/i;\n  /**\n   * A pattern that matches safe data URLs. Only matches image, video and audio types.\n   *\n   * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts\n   */\n\n  const DATA_URL_PATTERN = /^data:(?:image\\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\\/(?:mpeg|mp4|ogg|webm)|audio\\/(?:mp3|oga|ogg|opus));base64,[\\d+/a-z]+=*$/i;\n\n  const allowedAttribute = (attr, allowedAttributeList) => {\n    const attrName = attr.nodeName.toLowerCase();\n\n    if (allowedAttributeList.includes(attrName)) {\n      if (uriAttrs.has(attrName)) {\n        return Boolean(SAFE_URL_PATTERN.test(attr.nodeValue) || DATA_URL_PATTERN.test(attr.nodeValue));\n      }\n\n      return true;\n    }\n\n    const regExp = allowedAttributeList.filter(attrRegex => attrRegex instanceof RegExp); // Check if a regular expression validates the attribute.\n\n    for (let i = 0, len = regExp.length; i < len; i++) {\n      if (regExp[i].test(attrName)) {\n        return true;\n      }\n    }\n\n    return false;\n  };\n\n  const DefaultAllowlist = {\n    // Global attributes allowed on any supplied element below.\n    '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],\n    a: ['target', 'href', 'title', 'rel'],\n    area: [],\n    b: [],\n    br: [],\n    col: [],\n    code: [],\n    div: [],\n    em: [],\n    hr: [],\n    h1: [],\n    h2: [],\n    h3: [],\n    h4: [],\n    h5: [],\n    h6: [],\n    i: [],\n    img: ['src', 'srcset', 'alt', 'title', 'width', 'height'],\n    li: [],\n    ol: [],\n    p: [],\n    pre: [],\n    s: [],\n    small: [],\n    span: [],\n    sub: [],\n    sup: [],\n    strong: [],\n    u: [],\n    ul: []\n  };\n  function sanitizeHtml(unsafeHtml, allowList, sanitizeFn) {\n    if (!unsafeHtml.length) {\n      return unsafeHtml;\n    }\n\n    if (sanitizeFn && typeof sanitizeFn === 'function') {\n      return sanitizeFn(unsafeHtml);\n    }\n\n    const domParser = new window.DOMParser();\n    const createdDocument = domParser.parseFromString(unsafeHtml, 'text/html');\n    const allowlistKeys = Object.keys(allowList);\n    const elements = [].concat(...createdDocument.body.querySelectorAll('*'));\n\n    for (let i = 0, len = elements.length; i < len; i++) {\n      const el = elements[i];\n      const elName = el.nodeName.toLowerCase();\n\n      if (!allowlistKeys.includes(elName)) {\n        el.remove();\n        continue;\n      }\n\n      const attributeList = [].concat(...el.attributes);\n      const allowedAttributes = [].concat(allowList['*'] || [], allowList[elName] || []);\n      attributeList.forEach(attr => {\n        if (!allowedAttribute(attr, allowedAttributes)) {\n          el.removeAttribute(attr.nodeName);\n        }\n      });\n    }\n\n    return createdDocument.body.innerHTML;\n  }\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): tooltip.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$4 = 'tooltip';\n  const DATA_KEY$4 = 'bs.tooltip';\n  const EVENT_KEY$4 = `.${DATA_KEY$4}`;\n  const CLASS_PREFIX$1 = 'bs-tooltip';\n  const BSCLS_PREFIX_REGEX$1 = new RegExp(`(^|\\\\s)${CLASS_PREFIX$1}\\\\S+`, 'g');\n  const DISALLOWED_ATTRIBUTES = new Set(['sanitize', 'allowList', 'sanitizeFn']);\n  const DefaultType$3 = {\n    animation: 'boolean',\n    template: 'string',\n    title: '(string|element|function)',\n    trigger: 'string',\n    delay: '(number|object)',\n    html: 'boolean',\n    selector: '(string|boolean)',\n    placement: '(string|function)',\n    offset: '(array|string|function)',\n    container: '(string|element|boolean)',\n    fallbackPlacements: 'array',\n    boundary: '(string|element)',\n    customClass: '(string|function)',\n    sanitize: 'boolean',\n    sanitizeFn: '(null|function)',\n    allowList: 'object',\n    popperConfig: '(null|object|function)'\n  };\n  const AttachmentMap = {\n    AUTO: 'auto',\n    TOP: 'top',\n    RIGHT: isRTL() ? 'left' : 'right',\n    BOTTOM: 'bottom',\n    LEFT: isRTL() ? 'right' : 'left'\n  };\n  const Default$3 = {\n    animation: true,\n    template: '<div class=\"tooltip\" role=\"tooltip\">' + '<div class=\"tooltip-arrow\"></div>' + '<div class=\"tooltip-inner\"></div>' + '</div>',\n    trigger: 'hover focus',\n    title: '',\n    delay: 0,\n    html: false,\n    selector: false,\n    placement: 'top',\n    offset: [0, 0],\n    container: false,\n    fallbackPlacements: ['top', 'right', 'bottom', 'left'],\n    boundary: 'clippingParents',\n    customClass: '',\n    sanitize: true,\n    sanitizeFn: null,\n    allowList: DefaultAllowlist,\n    popperConfig: null\n  };\n  const Event$2 = {\n    HIDE: `hide${EVENT_KEY$4}`,\n    HIDDEN: `hidden${EVENT_KEY$4}`,\n    SHOW: `show${EVENT_KEY$4}`,\n    SHOWN: `shown${EVENT_KEY$4}`,\n    INSERTED: `inserted${EVENT_KEY$4}`,\n    CLICK: `click${EVENT_KEY$4}`,\n    FOCUSIN: `focusin${EVENT_KEY$4}`,\n    FOCUSOUT: `focusout${EVENT_KEY$4}`,\n    MOUSEENTER: `mouseenter${EVENT_KEY$4}`,\n    MOUSELEAVE: `mouseleave${EVENT_KEY$4}`\n  };\n  const CLASS_NAME_FADE$3 = 'fade';\n  const CLASS_NAME_MODAL = 'modal';\n  const CLASS_NAME_SHOW$3 = 'show';\n  const HOVER_STATE_SHOW = 'show';\n  const HOVER_STATE_OUT = 'out';\n  const SELECTOR_TOOLTIP_INNER = '.tooltip-inner';\n  const TRIGGER_HOVER = 'hover';\n  const TRIGGER_FOCUS = 'focus';\n  const TRIGGER_CLICK = 'click';\n  const TRIGGER_MANUAL = 'manual';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Tooltip extends BaseComponent {\n    constructor(element, config) {\n      if (typeof Popper === 'undefined') {\n        throw new TypeError('Bootstrap\\'s tooltips require Popper (https://popper.js.org)');\n      }\n\n      super(element); // private\n\n      this._isEnabled = true;\n      this._timeout = 0;\n      this._hoverState = '';\n      this._activeTrigger = {};\n      this._popper = null; // Protected\n\n      this._config = this._getConfig(config);\n      this.tip = null;\n\n      this._setListeners();\n    } // Getters\n\n\n    static get Default() {\n      return Default$3;\n    }\n\n    static get NAME() {\n      return NAME$4;\n    }\n\n    static get Event() {\n      return Event$2;\n    }\n\n    static get DefaultType() {\n      return DefaultType$3;\n    } // Public\n\n\n    enable() {\n      this._isEnabled = true;\n    }\n\n    disable() {\n      this._isEnabled = false;\n    }\n\n    toggleEnabled() {\n      this._isEnabled = !this._isEnabled;\n    }\n\n    toggle(event) {\n      if (!this._isEnabled) {\n        return;\n      }\n\n      if (event) {\n        const context = this._initializeOnDelegatedTarget(event);\n\n        context._activeTrigger.click = !context._activeTrigger.click;\n\n        if (context._isWithActiveTrigger()) {\n          context._enter(null, context);\n        } else {\n          context._leave(null, context);\n        }\n      } else {\n        if (this.getTipElement().classList.contains(CLASS_NAME_SHOW$3)) {\n          this._leave(null, this);\n\n          return;\n        }\n\n        this._enter(null, this);\n      }\n    }\n\n    dispose() {\n      clearTimeout(this._timeout);\n      EventHandler.off(this._element.closest(`.${CLASS_NAME_MODAL}`), 'hide.bs.modal', this._hideModalHandler);\n\n      if (this.tip) {\n        this.tip.remove();\n      }\n\n      if (this._popper) {\n        this._popper.destroy();\n      }\n\n      super.dispose();\n    }\n\n    show() {\n      if (this._element.style.display === 'none') {\n        throw new Error('Please use show on visible elements');\n      }\n\n      if (!(this.isWithContent() && this._isEnabled)) {\n        return;\n      }\n\n      const showEvent = EventHandler.trigger(this._element, this.constructor.Event.SHOW);\n      const shadowRoot = findShadowRoot(this._element);\n      const isInTheDom = shadowRoot === null ? this._element.ownerDocument.documentElement.contains(this._element) : shadowRoot.contains(this._element);\n\n      if (showEvent.defaultPrevented || !isInTheDom) {\n        return;\n      }\n\n      const tip = this.getTipElement();\n      const tipId = getUID(this.constructor.NAME);\n      tip.setAttribute('id', tipId);\n\n      this._element.setAttribute('aria-describedby', tipId);\n\n      this.setContent();\n\n      if (this._config.animation) {\n        tip.classList.add(CLASS_NAME_FADE$3);\n      }\n\n      const placement = typeof this._config.placement === 'function' ? this._config.placement.call(this, tip, this._element) : this._config.placement;\n\n      const attachment = this._getAttachment(placement);\n\n      this._addAttachmentClass(attachment);\n\n      const {\n        container\n      } = this._config;\n      Data.set(tip, this.constructor.DATA_KEY, this);\n\n      if (!this._element.ownerDocument.documentElement.contains(this.tip)) {\n        container.appendChild(tip);\n        EventHandler.trigger(this._element, this.constructor.Event.INSERTED);\n      }\n\n      if (this._popper) {\n        this._popper.update();\n      } else {\n        this._popper = createPopper(this._element, tip, this._getPopperConfig(attachment));\n      }\n\n      tip.classList.add(CLASS_NAME_SHOW$3);\n      const customClass = typeof this._config.customClass === 'function' ? this._config.customClass() : this._config.customClass;\n\n      if (customClass) {\n        tip.classList.add(...customClass.split(' '));\n      } // If this is a touch-enabled device we add extra\n      // empty mouseover listeners to the body's immediate children;\n      // only needed because of broken event delegation on iOS\n      // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n\n\n      if ('ontouchstart' in document.documentElement) {\n        [].concat(...document.body.children).forEach(element => {\n          EventHandler.on(element, 'mouseover', noop);\n        });\n      }\n\n      const complete = () => {\n        const prevHoverState = this._hoverState;\n        this._hoverState = null;\n        EventHandler.trigger(this._element, this.constructor.Event.SHOWN);\n\n        if (prevHoverState === HOVER_STATE_OUT) {\n          this._leave(null, this);\n        }\n      };\n\n      const isAnimated = this.tip.classList.contains(CLASS_NAME_FADE$3);\n\n      this._queueCallback(complete, this.tip, isAnimated);\n    }\n\n    hide() {\n      if (!this._popper) {\n        return;\n      }\n\n      const tip = this.getTipElement();\n\n      const complete = () => {\n        if (this._isWithActiveTrigger()) {\n          return;\n        }\n\n        if (this._hoverState !== HOVER_STATE_SHOW) {\n          tip.remove();\n        }\n\n        this._cleanTipClass();\n\n        this._element.removeAttribute('aria-describedby');\n\n        EventHandler.trigger(this._element, this.constructor.Event.HIDDEN);\n\n        if (this._popper) {\n          this._popper.destroy();\n\n          this._popper = null;\n        }\n      };\n\n      const hideEvent = EventHandler.trigger(this._element, this.constructor.Event.HIDE);\n\n      if (hideEvent.defaultPrevented) {\n        return;\n      }\n\n      tip.classList.remove(CLASS_NAME_SHOW$3); // If this is a touch-enabled device we remove the extra\n      // empty mouseover listeners we added for iOS support\n\n      if ('ontouchstart' in document.documentElement) {\n        [].concat(...document.body.children).forEach(element => EventHandler.off(element, 'mouseover', noop));\n      }\n\n      this._activeTrigger[TRIGGER_CLICK] = false;\n      this._activeTrigger[TRIGGER_FOCUS] = false;\n      this._activeTrigger[TRIGGER_HOVER] = false;\n      const isAnimated = this.tip.classList.contains(CLASS_NAME_FADE$3);\n\n      this._queueCallback(complete, this.tip, isAnimated);\n\n      this._hoverState = '';\n    }\n\n    update() {\n      if (this._popper !== null) {\n        this._popper.update();\n      }\n    } // Protected\n\n\n    isWithContent() {\n      return Boolean(this.getTitle());\n    }\n\n    getTipElement() {\n      if (this.tip) {\n        return this.tip;\n      }\n\n      const element = document.createElement('div');\n      element.innerHTML = this._config.template;\n      this.tip = element.children[0];\n      return this.tip;\n    }\n\n    setContent() {\n      const tip = this.getTipElement();\n      this.setElementContent(SelectorEngine.findOne(SELECTOR_TOOLTIP_INNER, tip), this.getTitle());\n      tip.classList.remove(CLASS_NAME_FADE$3, CLASS_NAME_SHOW$3);\n    }\n\n    setElementContent(element, content) {\n      if (element === null) {\n        return;\n      }\n\n      if (isElement$1(content)) {\n        content = getElement(content); // content is a DOM node or a jQuery\n\n        if (this._config.html) {\n          if (content.parentNode !== element) {\n            element.innerHTML = '';\n            element.appendChild(content);\n          }\n        } else {\n          element.textContent = content.textContent;\n        }\n\n        return;\n      }\n\n      if (this._config.html) {\n        if (this._config.sanitize) {\n          content = sanitizeHtml(content, this._config.allowList, this._config.sanitizeFn);\n        }\n\n        element.innerHTML = content;\n      } else {\n        element.textContent = content;\n      }\n    }\n\n    getTitle() {\n      let title = this._element.getAttribute('data-bs-original-title');\n\n      if (!title) {\n        title = typeof this._config.title === 'function' ? this._config.title.call(this._element) : this._config.title;\n      }\n\n      return title;\n    }\n\n    updateAttachment(attachment) {\n      if (attachment === 'right') {\n        return 'end';\n      }\n\n      if (attachment === 'left') {\n        return 'start';\n      }\n\n      return attachment;\n    } // Private\n\n\n    _initializeOnDelegatedTarget(event, context) {\n      const dataKey = this.constructor.DATA_KEY;\n      context = context || Data.get(event.delegateTarget, dataKey);\n\n      if (!context) {\n        context = new this.constructor(event.delegateTarget, this._getDelegateConfig());\n        Data.set(event.delegateTarget, dataKey, context);\n      }\n\n      return context;\n    }\n\n    _getOffset() {\n      const {\n        offset\n      } = this._config;\n\n      if (typeof offset === 'string') {\n        return offset.split(',').map(val => Number.parseInt(val, 10));\n      }\n\n      if (typeof offset === 'function') {\n        return popperData => offset(popperData, this._element);\n      }\n\n      return offset;\n    }\n\n    _getPopperConfig(attachment) {\n      const defaultBsPopperConfig = {\n        placement: attachment,\n        modifiers: [{\n          name: 'flip',\n          options: {\n            fallbackPlacements: this._config.fallbackPlacements\n          }\n        }, {\n          name: 'offset',\n          options: {\n            offset: this._getOffset()\n          }\n        }, {\n          name: 'preventOverflow',\n          options: {\n            boundary: this._config.boundary\n          }\n        }, {\n          name: 'arrow',\n          options: {\n            element: `.${this.constructor.NAME}-arrow`\n          }\n        }, {\n          name: 'onChange',\n          enabled: true,\n          phase: 'afterWrite',\n          fn: data => this._handlePopperPlacementChange(data)\n        }],\n        onFirstUpdate: data => {\n          if (data.options.placement !== data.placement) {\n            this._handlePopperPlacementChange(data);\n          }\n        }\n      };\n      return { ...defaultBsPopperConfig,\n        ...(typeof this._config.popperConfig === 'function' ? this._config.popperConfig(defaultBsPopperConfig) : this._config.popperConfig)\n      };\n    }\n\n    _addAttachmentClass(attachment) {\n      this.getTipElement().classList.add(`${CLASS_PREFIX$1}-${this.updateAttachment(attachment)}`);\n    }\n\n    _getAttachment(placement) {\n      return AttachmentMap[placement.toUpperCase()];\n    }\n\n    _setListeners() {\n      const triggers = this._config.trigger.split(' ');\n\n      triggers.forEach(trigger => {\n        if (trigger === 'click') {\n          EventHandler.on(this._element, this.constructor.Event.CLICK, this._config.selector, event => this.toggle(event));\n        } else if (trigger !== TRIGGER_MANUAL) {\n          const eventIn = trigger === TRIGGER_HOVER ? this.constructor.Event.MOUSEENTER : this.constructor.Event.FOCUSIN;\n          const eventOut = trigger === TRIGGER_HOVER ? this.constructor.Event.MOUSELEAVE : this.constructor.Event.FOCUSOUT;\n          EventHandler.on(this._element, eventIn, this._config.selector, event => this._enter(event));\n          EventHandler.on(this._element, eventOut, this._config.selector, event => this._leave(event));\n        }\n      });\n\n      this._hideModalHandler = () => {\n        if (this._element) {\n          this.hide();\n        }\n      };\n\n      EventHandler.on(this._element.closest(`.${CLASS_NAME_MODAL}`), 'hide.bs.modal', this._hideModalHandler);\n\n      if (this._config.selector) {\n        this._config = { ...this._config,\n          trigger: 'manual',\n          selector: ''\n        };\n      } else {\n        this._fixTitle();\n      }\n    }\n\n    _fixTitle() {\n      const title = this._element.getAttribute('title');\n\n      const originalTitleType = typeof this._element.getAttribute('data-bs-original-title');\n\n      if (title || originalTitleType !== 'string') {\n        this._element.setAttribute('data-bs-original-title', title || '');\n\n        if (title && !this._element.getAttribute('aria-label') && !this._element.textContent) {\n          this._element.setAttribute('aria-label', title);\n        }\n\n        this._element.setAttribute('title', '');\n      }\n    }\n\n    _enter(event, context) {\n      context = this._initializeOnDelegatedTarget(event, context);\n\n      if (event) {\n        context._activeTrigger[event.type === 'focusin' ? TRIGGER_FOCUS : TRIGGER_HOVER] = true;\n      }\n\n      if (context.getTipElement().classList.contains(CLASS_NAME_SHOW$3) || context._hoverState === HOVER_STATE_SHOW) {\n        context._hoverState = HOVER_STATE_SHOW;\n        return;\n      }\n\n      clearTimeout(context._timeout);\n      context._hoverState = HOVER_STATE_SHOW;\n\n      if (!context._config.delay || !context._config.delay.show) {\n        context.show();\n        return;\n      }\n\n      context._timeout = setTimeout(() => {\n        if (context._hoverState === HOVER_STATE_SHOW) {\n          context.show();\n        }\n      }, context._config.delay.show);\n    }\n\n    _leave(event, context) {\n      context = this._initializeOnDelegatedTarget(event, context);\n\n      if (event) {\n        context._activeTrigger[event.type === 'focusout' ? TRIGGER_FOCUS : TRIGGER_HOVER] = context._element.contains(event.relatedTarget);\n      }\n\n      if (context._isWithActiveTrigger()) {\n        return;\n      }\n\n      clearTimeout(context._timeout);\n      context._hoverState = HOVER_STATE_OUT;\n\n      if (!context._config.delay || !context._config.delay.hide) {\n        context.hide();\n        return;\n      }\n\n      context._timeout = setTimeout(() => {\n        if (context._hoverState === HOVER_STATE_OUT) {\n          context.hide();\n        }\n      }, context._config.delay.hide);\n    }\n\n    _isWithActiveTrigger() {\n      for (const trigger in this._activeTrigger) {\n        if (this._activeTrigger[trigger]) {\n          return true;\n        }\n      }\n\n      return false;\n    }\n\n    _getConfig(config) {\n      const dataAttributes = Manipulator.getDataAttributes(this._element);\n      Object.keys(dataAttributes).forEach(dataAttr => {\n        if (DISALLOWED_ATTRIBUTES.has(dataAttr)) {\n          delete dataAttributes[dataAttr];\n        }\n      });\n      config = { ...this.constructor.Default,\n        ...dataAttributes,\n        ...(typeof config === 'object' && config ? config : {})\n      };\n      config.container = config.container === false ? document.body : getElement(config.container);\n\n      if (typeof config.delay === 'number') {\n        config.delay = {\n          show: config.delay,\n          hide: config.delay\n        };\n      }\n\n      if (typeof config.title === 'number') {\n        config.title = config.title.toString();\n      }\n\n      if (typeof config.content === 'number') {\n        config.content = config.content.toString();\n      }\n\n      typeCheckConfig(NAME$4, config, this.constructor.DefaultType);\n\n      if (config.sanitize) {\n        config.template = sanitizeHtml(config.template, config.allowList, config.sanitizeFn);\n      }\n\n      return config;\n    }\n\n    _getDelegateConfig() {\n      const config = {};\n\n      if (this._config) {\n        for (const key in this._config) {\n          if (this.constructor.Default[key] !== this._config[key]) {\n            config[key] = this._config[key];\n          }\n        }\n      }\n\n      return config;\n    }\n\n    _cleanTipClass() {\n      const tip = this.getTipElement();\n      const tabClass = tip.getAttribute('class').match(BSCLS_PREFIX_REGEX$1);\n\n      if (tabClass !== null && tabClass.length > 0) {\n        tabClass.map(token => token.trim()).forEach(tClass => tip.classList.remove(tClass));\n      }\n    }\n\n    _handlePopperPlacementChange(popperData) {\n      const {\n        state\n      } = popperData;\n\n      if (!state) {\n        return;\n      }\n\n      this.tip = state.elements.popper;\n\n      this._cleanTipClass();\n\n      this._addAttachmentClass(this._getAttachment(state.placement));\n    } // Static\n\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = Tooltip.getOrCreateInstance(this, config);\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(`No method named \"${config}\"`);\n          }\n\n          data[config]();\n        }\n      });\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Tooltip to jQuery only if jQuery is present\n   */\n\n\n  defineJQueryPlugin(Tooltip);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): popover.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$3 = 'popover';\n  const DATA_KEY$3 = 'bs.popover';\n  const EVENT_KEY$3 = `.${DATA_KEY$3}`;\n  const CLASS_PREFIX = 'bs-popover';\n  const BSCLS_PREFIX_REGEX = new RegExp(`(^|\\\\s)${CLASS_PREFIX}\\\\S+`, 'g');\n  const Default$2 = { ...Tooltip.Default,\n    placement: 'right',\n    offset: [0, 8],\n    trigger: 'click',\n    content: '',\n    template: '<div class=\"popover\" role=\"tooltip\">' + '<div class=\"popover-arrow\"></div>' + '<h3 class=\"popover-header\"></h3>' + '<div class=\"popover-body\"></div>' + '</div>'\n  };\n  const DefaultType$2 = { ...Tooltip.DefaultType,\n    content: '(string|element|function)'\n  };\n  const Event$1 = {\n    HIDE: `hide${EVENT_KEY$3}`,\n    HIDDEN: `hidden${EVENT_KEY$3}`,\n    SHOW: `show${EVENT_KEY$3}`,\n    SHOWN: `shown${EVENT_KEY$3}`,\n    INSERTED: `inserted${EVENT_KEY$3}`,\n    CLICK: `click${EVENT_KEY$3}`,\n    FOCUSIN: `focusin${EVENT_KEY$3}`,\n    FOCUSOUT: `focusout${EVENT_KEY$3}`,\n    MOUSEENTER: `mouseenter${EVENT_KEY$3}`,\n    MOUSELEAVE: `mouseleave${EVENT_KEY$3}`\n  };\n  const CLASS_NAME_FADE$2 = 'fade';\n  const CLASS_NAME_SHOW$2 = 'show';\n  const SELECTOR_TITLE = '.popover-header';\n  const SELECTOR_CONTENT = '.popover-body';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Popover extends Tooltip {\n    // Getters\n    static get Default() {\n      return Default$2;\n    }\n\n    static get NAME() {\n      return NAME$3;\n    }\n\n    static get Event() {\n      return Event$1;\n    }\n\n    static get DefaultType() {\n      return DefaultType$2;\n    } // Overrides\n\n\n    isWithContent() {\n      return this.getTitle() || this._getContent();\n    }\n\n    getTipElement() {\n      if (this.tip) {\n        return this.tip;\n      }\n\n      this.tip = super.getTipElement();\n\n      if (!this.getTitle()) {\n        SelectorEngine.findOne(SELECTOR_TITLE, this.tip).remove();\n      }\n\n      if (!this._getContent()) {\n        SelectorEngine.findOne(SELECTOR_CONTENT, this.tip).remove();\n      }\n\n      return this.tip;\n    }\n\n    setContent() {\n      const tip = this.getTipElement(); // we use append for html objects to maintain js events\n\n      this.setElementContent(SelectorEngine.findOne(SELECTOR_TITLE, tip), this.getTitle());\n\n      let content = this._getContent();\n\n      if (typeof content === 'function') {\n        content = content.call(this._element);\n      }\n\n      this.setElementContent(SelectorEngine.findOne(SELECTOR_CONTENT, tip), content);\n      tip.classList.remove(CLASS_NAME_FADE$2, CLASS_NAME_SHOW$2);\n    } // Private\n\n\n    _addAttachmentClass(attachment) {\n      this.getTipElement().classList.add(`${CLASS_PREFIX}-${this.updateAttachment(attachment)}`);\n    }\n\n    _getContent() {\n      return this._element.getAttribute('data-bs-content') || this._config.content;\n    }\n\n    _cleanTipClass() {\n      const tip = this.getTipElement();\n      const tabClass = tip.getAttribute('class').match(BSCLS_PREFIX_REGEX);\n\n      if (tabClass !== null && tabClass.length > 0) {\n        tabClass.map(token => token.trim()).forEach(tClass => tip.classList.remove(tClass));\n      }\n    } // Static\n\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = Popover.getOrCreateInstance(this, config);\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(`No method named \"${config}\"`);\n          }\n\n          data[config]();\n        }\n      });\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Popover to jQuery only if jQuery is present\n   */\n\n\n  defineJQueryPlugin(Popover);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): scrollspy.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$2 = 'scrollspy';\n  const DATA_KEY$2 = 'bs.scrollspy';\n  const EVENT_KEY$2 = `.${DATA_KEY$2}`;\n  const DATA_API_KEY$1 = '.data-api';\n  const Default$1 = {\n    offset: 10,\n    method: 'auto',\n    target: ''\n  };\n  const DefaultType$1 = {\n    offset: 'number',\n    method: 'string',\n    target: '(string|element)'\n  };\n  const EVENT_ACTIVATE = `activate${EVENT_KEY$2}`;\n  const EVENT_SCROLL = `scroll${EVENT_KEY$2}`;\n  const EVENT_LOAD_DATA_API = `load${EVENT_KEY$2}${DATA_API_KEY$1}`;\n  const CLASS_NAME_DROPDOWN_ITEM = 'dropdown-item';\n  const CLASS_NAME_ACTIVE$1 = 'active';\n  const SELECTOR_DATA_SPY = '[data-bs-spy=\"scroll\"]';\n  const SELECTOR_NAV_LIST_GROUP$1 = '.nav, .list-group';\n  const SELECTOR_NAV_LINKS = '.nav-link';\n  const SELECTOR_NAV_ITEMS = '.nav-item';\n  const SELECTOR_LIST_ITEMS = '.list-group-item';\n  const SELECTOR_DROPDOWN$1 = '.dropdown';\n  const SELECTOR_DROPDOWN_TOGGLE$1 = '.dropdown-toggle';\n  const METHOD_OFFSET = 'offset';\n  const METHOD_POSITION = 'position';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class ScrollSpy extends BaseComponent {\n    constructor(element, config) {\n      super(element);\n      this._scrollElement = this._element.tagName === 'BODY' ? window : this._element;\n      this._config = this._getConfig(config);\n      this._selector = `${this._config.target} ${SELECTOR_NAV_LINKS}, ${this._config.target} ${SELECTOR_LIST_ITEMS}, ${this._config.target} .${CLASS_NAME_DROPDOWN_ITEM}`;\n      this._offsets = [];\n      this._targets = [];\n      this._activeTarget = null;\n      this._scrollHeight = 0;\n      EventHandler.on(this._scrollElement, EVENT_SCROLL, () => this._process());\n      this.refresh();\n\n      this._process();\n    } // Getters\n\n\n    static get Default() {\n      return Default$1;\n    }\n\n    static get NAME() {\n      return NAME$2;\n    } // Public\n\n\n    refresh() {\n      const autoMethod = this._scrollElement === this._scrollElement.window ? METHOD_OFFSET : METHOD_POSITION;\n      const offsetMethod = this._config.method === 'auto' ? autoMethod : this._config.method;\n      const offsetBase = offsetMethod === METHOD_POSITION ? this._getScrollTop() : 0;\n      this._offsets = [];\n      this._targets = [];\n      this._scrollHeight = this._getScrollHeight();\n      const targets = SelectorEngine.find(this._selector);\n      targets.map(element => {\n        const targetSelector = getSelectorFromElement(element);\n        const target = targetSelector ? SelectorEngine.findOne(targetSelector) : null;\n\n        if (target) {\n          const targetBCR = target.getBoundingClientRect();\n\n          if (targetBCR.width || targetBCR.height) {\n            return [Manipulator[offsetMethod](target).top + offsetBase, targetSelector];\n          }\n        }\n\n        return null;\n      }).filter(item => item).sort((a, b) => a[0] - b[0]).forEach(item => {\n        this._offsets.push(item[0]);\n\n        this._targets.push(item[1]);\n      });\n    }\n\n    dispose() {\n      EventHandler.off(this._scrollElement, EVENT_KEY$2);\n      super.dispose();\n    } // Private\n\n\n    _getConfig(config) {\n      config = { ...Default$1,\n        ...Manipulator.getDataAttributes(this._element),\n        ...(typeof config === 'object' && config ? config : {})\n      };\n\n      if (typeof config.target !== 'string' && isElement$1(config.target)) {\n        let {\n          id\n        } = config.target;\n\n        if (!id) {\n          id = getUID(NAME$2);\n          config.target.id = id;\n        }\n\n        config.target = `#${id}`;\n      }\n\n      typeCheckConfig(NAME$2, config, DefaultType$1);\n      return config;\n    }\n\n    _getScrollTop() {\n      return this._scrollElement === window ? this._scrollElement.pageYOffset : this._scrollElement.scrollTop;\n    }\n\n    _getScrollHeight() {\n      return this._scrollElement.scrollHeight || Math.max(document.body.scrollHeight, document.documentElement.scrollHeight);\n    }\n\n    _getOffsetHeight() {\n      return this._scrollElement === window ? window.innerHeight : this._scrollElement.getBoundingClientRect().height;\n    }\n\n    _process() {\n      const scrollTop = this._getScrollTop() + this._config.offset;\n\n      const scrollHeight = this._getScrollHeight();\n\n      const maxScroll = this._config.offset + scrollHeight - this._getOffsetHeight();\n\n      if (this._scrollHeight !== scrollHeight) {\n        this.refresh();\n      }\n\n      if (scrollTop >= maxScroll) {\n        const target = this._targets[this._targets.length - 1];\n\n        if (this._activeTarget !== target) {\n          this._activate(target);\n        }\n\n        return;\n      }\n\n      if (this._activeTarget && scrollTop < this._offsets[0] && this._offsets[0] > 0) {\n        this._activeTarget = null;\n\n        this._clear();\n\n        return;\n      }\n\n      for (let i = this._offsets.length; i--;) {\n        const isActiveTarget = this._activeTarget !== this._targets[i] && scrollTop >= this._offsets[i] && (typeof this._offsets[i + 1] === 'undefined' || scrollTop < this._offsets[i + 1]);\n\n        if (isActiveTarget) {\n          this._activate(this._targets[i]);\n        }\n      }\n    }\n\n    _activate(target) {\n      this._activeTarget = target;\n\n      this._clear();\n\n      const queries = this._selector.split(',').map(selector => `${selector}[data-bs-target=\"${target}\"],${selector}[href=\"${target}\"]`);\n\n      const link = SelectorEngine.findOne(queries.join(','));\n\n      if (link.classList.contains(CLASS_NAME_DROPDOWN_ITEM)) {\n        SelectorEngine.findOne(SELECTOR_DROPDOWN_TOGGLE$1, link.closest(SELECTOR_DROPDOWN$1)).classList.add(CLASS_NAME_ACTIVE$1);\n        link.classList.add(CLASS_NAME_ACTIVE$1);\n      } else {\n        // Set triggered link as active\n        link.classList.add(CLASS_NAME_ACTIVE$1);\n        SelectorEngine.parents(link, SELECTOR_NAV_LIST_GROUP$1).forEach(listGroup => {\n          // Set triggered links parents as active\n          // With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor\n          SelectorEngine.prev(listGroup, `${SELECTOR_NAV_LINKS}, ${SELECTOR_LIST_ITEMS}`).forEach(item => item.classList.add(CLASS_NAME_ACTIVE$1)); // Handle special case when .nav-link is inside .nav-item\n\n          SelectorEngine.prev(listGroup, SELECTOR_NAV_ITEMS).forEach(navItem => {\n            SelectorEngine.children(navItem, SELECTOR_NAV_LINKS).forEach(item => item.classList.add(CLASS_NAME_ACTIVE$1));\n          });\n        });\n      }\n\n      EventHandler.trigger(this._scrollElement, EVENT_ACTIVATE, {\n        relatedTarget: target\n      });\n    }\n\n    _clear() {\n      SelectorEngine.find(this._selector).filter(node => node.classList.contains(CLASS_NAME_ACTIVE$1)).forEach(node => node.classList.remove(CLASS_NAME_ACTIVE$1));\n    } // Static\n\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = ScrollSpy.getOrCreateInstance(this, config);\n\n        if (typeof config !== 'string') {\n          return;\n        }\n\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config]();\n      });\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n    SelectorEngine.find(SELECTOR_DATA_SPY).forEach(spy => new ScrollSpy(spy));\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .ScrollSpy to jQuery only if jQuery is present\n   */\n\n  defineJQueryPlugin(ScrollSpy);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): tab.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$1 = 'tab';\n  const DATA_KEY$1 = 'bs.tab';\n  const EVENT_KEY$1 = `.${DATA_KEY$1}`;\n  const DATA_API_KEY = '.data-api';\n  const EVENT_HIDE$1 = `hide${EVENT_KEY$1}`;\n  const EVENT_HIDDEN$1 = `hidden${EVENT_KEY$1}`;\n  const EVENT_SHOW$1 = `show${EVENT_KEY$1}`;\n  const EVENT_SHOWN$1 = `shown${EVENT_KEY$1}`;\n  const EVENT_CLICK_DATA_API = `click${EVENT_KEY$1}${DATA_API_KEY}`;\n  const CLASS_NAME_DROPDOWN_MENU = 'dropdown-menu';\n  const CLASS_NAME_ACTIVE = 'active';\n  const CLASS_NAME_FADE$1 = 'fade';\n  const CLASS_NAME_SHOW$1 = 'show';\n  const SELECTOR_DROPDOWN = '.dropdown';\n  const SELECTOR_NAV_LIST_GROUP = '.nav, .list-group';\n  const SELECTOR_ACTIVE = '.active';\n  const SELECTOR_ACTIVE_UL = ':scope > li > .active';\n  const SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"tab\"], [data-bs-toggle=\"pill\"], [data-bs-toggle=\"list\"]';\n  const SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle';\n  const SELECTOR_DROPDOWN_ACTIVE_CHILD = ':scope > .dropdown-menu .active';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Tab extends BaseComponent {\n    // Getters\n    static get NAME() {\n      return NAME$1;\n    } // Public\n\n\n    show() {\n      if (this._element.parentNode && this._element.parentNode.nodeType === Node.ELEMENT_NODE && this._element.classList.contains(CLASS_NAME_ACTIVE)) {\n        return;\n      }\n\n      let previous;\n      const target = getElementFromSelector(this._element);\n\n      const listElement = this._element.closest(SELECTOR_NAV_LIST_GROUP);\n\n      if (listElement) {\n        const itemSelector = listElement.nodeName === 'UL' || listElement.nodeName === 'OL' ? SELECTOR_ACTIVE_UL : SELECTOR_ACTIVE;\n        previous = SelectorEngine.find(itemSelector, listElement);\n        previous = previous[previous.length - 1];\n      }\n\n      const hideEvent = previous ? EventHandler.trigger(previous, EVENT_HIDE$1, {\n        relatedTarget: this._element\n      }) : null;\n      const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$1, {\n        relatedTarget: previous\n      });\n\n      if (showEvent.defaultPrevented || hideEvent !== null && hideEvent.defaultPrevented) {\n        return;\n      }\n\n      this._activate(this._element, listElement);\n\n      const complete = () => {\n        EventHandler.trigger(previous, EVENT_HIDDEN$1, {\n          relatedTarget: this._element\n        });\n        EventHandler.trigger(this._element, EVENT_SHOWN$1, {\n          relatedTarget: previous\n        });\n      };\n\n      if (target) {\n        this._activate(target, target.parentNode, complete);\n      } else {\n        complete();\n      }\n    } // Private\n\n\n    _activate(element, container, callback) {\n      const activeElements = container && (container.nodeName === 'UL' || container.nodeName === 'OL') ? SelectorEngine.find(SELECTOR_ACTIVE_UL, container) : SelectorEngine.children(container, SELECTOR_ACTIVE);\n      const active = activeElements[0];\n      const isTransitioning = callback && active && active.classList.contains(CLASS_NAME_FADE$1);\n\n      const complete = () => this._transitionComplete(element, active, callback);\n\n      if (active && isTransitioning) {\n        active.classList.remove(CLASS_NAME_SHOW$1);\n\n        this._queueCallback(complete, element, true);\n      } else {\n        complete();\n      }\n    }\n\n    _transitionComplete(element, active, callback) {\n      if (active) {\n        active.classList.remove(CLASS_NAME_ACTIVE);\n        const dropdownChild = SelectorEngine.findOne(SELECTOR_DROPDOWN_ACTIVE_CHILD, active.parentNode);\n\n        if (dropdownChild) {\n          dropdownChild.classList.remove(CLASS_NAME_ACTIVE);\n        }\n\n        if (active.getAttribute('role') === 'tab') {\n          active.setAttribute('aria-selected', false);\n        }\n      }\n\n      element.classList.add(CLASS_NAME_ACTIVE);\n\n      if (element.getAttribute('role') === 'tab') {\n        element.setAttribute('aria-selected', true);\n      }\n\n      reflow(element);\n\n      if (element.classList.contains(CLASS_NAME_FADE$1)) {\n        element.classList.add(CLASS_NAME_SHOW$1);\n      }\n\n      let parent = element.parentNode;\n\n      if (parent && parent.nodeName === 'LI') {\n        parent = parent.parentNode;\n      }\n\n      if (parent && parent.classList.contains(CLASS_NAME_DROPDOWN_MENU)) {\n        const dropdownElement = element.closest(SELECTOR_DROPDOWN);\n\n        if (dropdownElement) {\n          SelectorEngine.find(SELECTOR_DROPDOWN_TOGGLE, dropdownElement).forEach(dropdown => dropdown.classList.add(CLASS_NAME_ACTIVE));\n        }\n\n        element.setAttribute('aria-expanded', true);\n      }\n\n      if (callback) {\n        callback();\n      }\n    } // Static\n\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = Tab.getOrCreateInstance(this);\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(`No method named \"${config}\"`);\n          }\n\n          data[config]();\n        }\n      });\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n    if (['A', 'AREA'].includes(this.tagName)) {\n      event.preventDefault();\n    }\n\n    if (isDisabled(this)) {\n      return;\n    }\n\n    const data = Tab.getOrCreateInstance(this);\n    data.show();\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Tab to jQuery only if jQuery is present\n   */\n\n  defineJQueryPlugin(Tab);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): toast.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME = 'toast';\n  const DATA_KEY = 'bs.toast';\n  const EVENT_KEY = `.${DATA_KEY}`;\n  const EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY}`;\n  const EVENT_MOUSEOVER = `mouseover${EVENT_KEY}`;\n  const EVENT_MOUSEOUT = `mouseout${EVENT_KEY}`;\n  const EVENT_FOCUSIN = `focusin${EVENT_KEY}`;\n  const EVENT_FOCUSOUT = `focusout${EVENT_KEY}`;\n  const EVENT_HIDE = `hide${EVENT_KEY}`;\n  const EVENT_HIDDEN = `hidden${EVENT_KEY}`;\n  const EVENT_SHOW = `show${EVENT_KEY}`;\n  const EVENT_SHOWN = `shown${EVENT_KEY}`;\n  const CLASS_NAME_FADE = 'fade';\n  const CLASS_NAME_HIDE = 'hide';\n  const CLASS_NAME_SHOW = 'show';\n  const CLASS_NAME_SHOWING = 'showing';\n  const DefaultType = {\n    animation: 'boolean',\n    autohide: 'boolean',\n    delay: 'number'\n  };\n  const Default = {\n    animation: true,\n    autohide: true,\n    delay: 5000\n  };\n  const SELECTOR_DATA_DISMISS = '[data-bs-dismiss=\"toast\"]';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Toast extends BaseComponent {\n    constructor(element, config) {\n      super(element);\n      this._config = this._getConfig(config);\n      this._timeout = null;\n      this._hasMouseInteraction = false;\n      this._hasKeyboardInteraction = false;\n\n      this._setListeners();\n    } // Getters\n\n\n    static get DefaultType() {\n      return DefaultType;\n    }\n\n    static get Default() {\n      return Default;\n    }\n\n    static get NAME() {\n      return NAME;\n    } // Public\n\n\n    show() {\n      const showEvent = EventHandler.trigger(this._element, EVENT_SHOW);\n\n      if (showEvent.defaultPrevented) {\n        return;\n      }\n\n      this._clearTimeout();\n\n      if (this._config.animation) {\n        this._element.classList.add(CLASS_NAME_FADE);\n      }\n\n      const complete = () => {\n        this._element.classList.remove(CLASS_NAME_SHOWING);\n\n        this._element.classList.add(CLASS_NAME_SHOW);\n\n        EventHandler.trigger(this._element, EVENT_SHOWN);\n\n        this._maybeScheduleHide();\n      };\n\n      this._element.classList.remove(CLASS_NAME_HIDE);\n\n      reflow(this._element);\n\n      this._element.classList.add(CLASS_NAME_SHOWING);\n\n      this._queueCallback(complete, this._element, this._config.animation);\n    }\n\n    hide() {\n      if (!this._element.classList.contains(CLASS_NAME_SHOW)) {\n        return;\n      }\n\n      const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE);\n\n      if (hideEvent.defaultPrevented) {\n        return;\n      }\n\n      const complete = () => {\n        this._element.classList.add(CLASS_NAME_HIDE);\n\n        EventHandler.trigger(this._element, EVENT_HIDDEN);\n      };\n\n      this._element.classList.remove(CLASS_NAME_SHOW);\n\n      this._queueCallback(complete, this._element, this._config.animation);\n    }\n\n    dispose() {\n      this._clearTimeout();\n\n      if (this._element.classList.contains(CLASS_NAME_SHOW)) {\n        this._element.classList.remove(CLASS_NAME_SHOW);\n      }\n\n      super.dispose();\n    } // Private\n\n\n    _getConfig(config) {\n      config = { ...Default,\n        ...Manipulator.getDataAttributes(this._element),\n        ...(typeof config === 'object' && config ? config : {})\n      };\n      typeCheckConfig(NAME, config, this.constructor.DefaultType);\n      return config;\n    }\n\n    _maybeScheduleHide() {\n      if (!this._config.autohide) {\n        return;\n      }\n\n      if (this._hasMouseInteraction || this._hasKeyboardInteraction) {\n        return;\n      }\n\n      this._timeout = setTimeout(() => {\n        this.hide();\n      }, this._config.delay);\n    }\n\n    _onInteraction(event, isInteracting) {\n      switch (event.type) {\n        case 'mouseover':\n        case 'mouseout':\n          this._hasMouseInteraction = isInteracting;\n          break;\n\n        case 'focusin':\n        case 'focusout':\n          this._hasKeyboardInteraction = isInteracting;\n          break;\n      }\n\n      if (isInteracting) {\n        this._clearTimeout();\n\n        return;\n      }\n\n      const nextElement = event.relatedTarget;\n\n      if (this._element === nextElement || this._element.contains(nextElement)) {\n        return;\n      }\n\n      this._maybeScheduleHide();\n    }\n\n    _setListeners() {\n      EventHandler.on(this._element, EVENT_CLICK_DISMISS, SELECTOR_DATA_DISMISS, () => this.hide());\n      EventHandler.on(this._element, EVENT_MOUSEOVER, event => this._onInteraction(event, true));\n      EventHandler.on(this._element, EVENT_MOUSEOUT, event => this._onInteraction(event, false));\n      EventHandler.on(this._element, EVENT_FOCUSIN, event => this._onInteraction(event, true));\n      EventHandler.on(this._element, EVENT_FOCUSOUT, event => this._onInteraction(event, false));\n    }\n\n    _clearTimeout() {\n      clearTimeout(this._timeout);\n      this._timeout = null;\n    } // Static\n\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = Toast.getOrCreateInstance(this, config);\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(`No method named \"${config}\"`);\n          }\n\n          data[config](this);\n        }\n      });\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Toast to jQuery only if jQuery is present\n   */\n\n\n  defineJQueryPlugin(Toast);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): index.umd.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  var index_umd = {\n    Alert,\n    Button,\n    Carousel,\n    Collapse,\n    Dropdown,\n    Modal,\n    Offcanvas,\n    Popover,\n    ScrollSpy,\n    Tab,\n    Toast,\n    Tooltip\n  };\n\n  return index_umd;\n\n})));\n//# sourceMappingURL=bootstrap.bundle.js.map\n"
  },
  {
    "path": "src/sourceDev.WebApp/SharedThemes/pulse/wwwroot/js/bootstrap.esm.js",
    "content": "/*!\n  * Bootstrap v5.0.2 (https://getbootstrap.com/)\n  * Copyright 2011-2021 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)\n  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n  */\nimport * as Popper from '@popperjs/core';\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): dom/selector-engine.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\nconst NODE_TEXT = 3;\nconst SelectorEngine = {\n  find(selector, element = document.documentElement) {\n    return [].concat(...Element.prototype.querySelectorAll.call(element, selector));\n  },\n\n  findOne(selector, element = document.documentElement) {\n    return Element.prototype.querySelector.call(element, selector);\n  },\n\n  children(element, selector) {\n    return [].concat(...element.children).filter(child => child.matches(selector));\n  },\n\n  parents(element, selector) {\n    const parents = [];\n    let ancestor = element.parentNode;\n\n    while (ancestor && ancestor.nodeType === Node.ELEMENT_NODE && ancestor.nodeType !== NODE_TEXT) {\n      if (ancestor.matches(selector)) {\n        parents.push(ancestor);\n      }\n\n      ancestor = ancestor.parentNode;\n    }\n\n    return parents;\n  },\n\n  prev(element, selector) {\n    let previous = element.previousElementSibling;\n\n    while (previous) {\n      if (previous.matches(selector)) {\n        return [previous];\n      }\n\n      previous = previous.previousElementSibling;\n    }\n\n    return [];\n  },\n\n  next(element, selector) {\n    let next = element.nextElementSibling;\n\n    while (next) {\n      if (next.matches(selector)) {\n        return [next];\n      }\n\n      next = next.nextElementSibling;\n    }\n\n    return [];\n  }\n\n};\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): util/index.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst MAX_UID = 1000000;\nconst MILLISECONDS_MULTIPLIER = 1000;\nconst TRANSITION_END = 'transitionend'; // Shoutout AngusCroll (https://goo.gl/pxwQGp)\n\nconst toType = obj => {\n  if (obj === null || obj === undefined) {\n    return `${obj}`;\n  }\n\n  return {}.toString.call(obj).match(/\\s([a-z]+)/i)[1].toLowerCase();\n};\n/**\n * --------------------------------------------------------------------------\n * Public Util Api\n * --------------------------------------------------------------------------\n */\n\n\nconst getUID = prefix => {\n  do {\n    prefix += Math.floor(Math.random() * MAX_UID);\n  } while (document.getElementById(prefix));\n\n  return prefix;\n};\n\nconst getSelector = element => {\n  let selector = element.getAttribute('data-bs-target');\n\n  if (!selector || selector === '#') {\n    let hrefAttr = element.getAttribute('href'); // The only valid content that could double as a selector are IDs or classes,\n    // so everything starting with `#` or `.`. If a \"real\" URL is used as the selector,\n    // `document.querySelector` will rightfully complain it is invalid.\n    // See https://github.com/twbs/bootstrap/issues/32273\n\n    if (!hrefAttr || !hrefAttr.includes('#') && !hrefAttr.startsWith('.')) {\n      return null;\n    } // Just in case some CMS puts out a full URL with the anchor appended\n\n\n    if (hrefAttr.includes('#') && !hrefAttr.startsWith('#')) {\n      hrefAttr = `#${hrefAttr.split('#')[1]}`;\n    }\n\n    selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : null;\n  }\n\n  return selector;\n};\n\nconst getSelectorFromElement = element => {\n  const selector = getSelector(element);\n\n  if (selector) {\n    return document.querySelector(selector) ? selector : null;\n  }\n\n  return null;\n};\n\nconst getElementFromSelector = element => {\n  const selector = getSelector(element);\n  return selector ? document.querySelector(selector) : null;\n};\n\nconst getTransitionDurationFromElement = element => {\n  if (!element) {\n    return 0;\n  } // Get transition-duration of the element\n\n\n  let {\n    transitionDuration,\n    transitionDelay\n  } = window.getComputedStyle(element);\n  const floatTransitionDuration = Number.parseFloat(transitionDuration);\n  const floatTransitionDelay = Number.parseFloat(transitionDelay); // Return 0 if element or transition duration is not found\n\n  if (!floatTransitionDuration && !floatTransitionDelay) {\n    return 0;\n  } // If multiple durations are defined, take the first\n\n\n  transitionDuration = transitionDuration.split(',')[0];\n  transitionDelay = transitionDelay.split(',')[0];\n  return (Number.parseFloat(transitionDuration) + Number.parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER;\n};\n\nconst triggerTransitionEnd = element => {\n  element.dispatchEvent(new Event(TRANSITION_END));\n};\n\nconst isElement = obj => {\n  if (!obj || typeof obj !== 'object') {\n    return false;\n  }\n\n  if (typeof obj.jquery !== 'undefined') {\n    obj = obj[0];\n  }\n\n  return typeof obj.nodeType !== 'undefined';\n};\n\nconst getElement = obj => {\n  if (isElement(obj)) {\n    // it's a jQuery object or a node element\n    return obj.jquery ? obj[0] : obj;\n  }\n\n  if (typeof obj === 'string' && obj.length > 0) {\n    return SelectorEngine.findOne(obj);\n  }\n\n  return null;\n};\n\nconst typeCheckConfig = (componentName, config, configTypes) => {\n  Object.keys(configTypes).forEach(property => {\n    const expectedTypes = configTypes[property];\n    const value = config[property];\n    const valueType = value && isElement(value) ? 'element' : toType(value);\n\n    if (!new RegExp(expectedTypes).test(valueType)) {\n      throw new TypeError(`${componentName.toUpperCase()}: Option \"${property}\" provided type \"${valueType}\" but expected type \"${expectedTypes}\".`);\n    }\n  });\n};\n\nconst isVisible = element => {\n  if (!isElement(element) || element.getClientRects().length === 0) {\n    return false;\n  }\n\n  return getComputedStyle(element).getPropertyValue('visibility') === 'visible';\n};\n\nconst isDisabled = element => {\n  if (!element || element.nodeType !== Node.ELEMENT_NODE) {\n    return true;\n  }\n\n  if (element.classList.contains('disabled')) {\n    return true;\n  }\n\n  if (typeof element.disabled !== 'undefined') {\n    return element.disabled;\n  }\n\n  return element.hasAttribute('disabled') && element.getAttribute('disabled') !== 'false';\n};\n\nconst findShadowRoot = element => {\n  if (!document.documentElement.attachShadow) {\n    return null;\n  } // Can find the shadow root otherwise it'll return the document\n\n\n  if (typeof element.getRootNode === 'function') {\n    const root = element.getRootNode();\n    return root instanceof ShadowRoot ? root : null;\n  }\n\n  if (element instanceof ShadowRoot) {\n    return element;\n  } // when we don't find a shadow root\n\n\n  if (!element.parentNode) {\n    return null;\n  }\n\n  return findShadowRoot(element.parentNode);\n};\n\nconst noop = () => {};\n\nconst reflow = element => element.offsetHeight;\n\nconst getjQuery = () => {\n  const {\n    jQuery\n  } = window;\n\n  if (jQuery && !document.body.hasAttribute('data-bs-no-jquery')) {\n    return jQuery;\n  }\n\n  return null;\n};\n\nconst DOMContentLoadedCallbacks = [];\n\nconst onDOMContentLoaded = callback => {\n  if (document.readyState === 'loading') {\n    // add listener on the first call when the document is in loading state\n    if (!DOMContentLoadedCallbacks.length) {\n      document.addEventListener('DOMContentLoaded', () => {\n        DOMContentLoadedCallbacks.forEach(callback => callback());\n      });\n    }\n\n    DOMContentLoadedCallbacks.push(callback);\n  } else {\n    callback();\n  }\n};\n\nconst isRTL = () => document.documentElement.dir === 'rtl';\n\nconst defineJQueryPlugin = plugin => {\n  onDOMContentLoaded(() => {\n    const $ = getjQuery();\n    /* istanbul ignore if */\n\n    if ($) {\n      const name = plugin.NAME;\n      const JQUERY_NO_CONFLICT = $.fn[name];\n      $.fn[name] = plugin.jQueryInterface;\n      $.fn[name].Constructor = plugin;\n\n      $.fn[name].noConflict = () => {\n        $.fn[name] = JQUERY_NO_CONFLICT;\n        return plugin.jQueryInterface;\n      };\n    }\n  });\n};\n\nconst execute = callback => {\n  if (typeof callback === 'function') {\n    callback();\n  }\n};\n\nconst executeAfterTransition = (callback, transitionElement, waitForTransition = true) => {\n  if (!waitForTransition) {\n    execute(callback);\n    return;\n  }\n\n  const durationPadding = 5;\n  const emulatedDuration = getTransitionDurationFromElement(transitionElement) + durationPadding;\n  let called = false;\n\n  const handler = ({\n    target\n  }) => {\n    if (target !== transitionElement) {\n      return;\n    }\n\n    called = true;\n    transitionElement.removeEventListener(TRANSITION_END, handler);\n    execute(callback);\n  };\n\n  transitionElement.addEventListener(TRANSITION_END, handler);\n  setTimeout(() => {\n    if (!called) {\n      triggerTransitionEnd(transitionElement);\n    }\n  }, emulatedDuration);\n};\n/**\n * Return the previous/next element of a list.\n *\n * @param {array} list    The list of elements\n * @param activeElement   The active element\n * @param shouldGetNext   Choose to get next or previous element\n * @param isCycleAllowed\n * @return {Element|elem} The proper element\n */\n\n\nconst getNextActiveElement = (list, activeElement, shouldGetNext, isCycleAllowed) => {\n  let index = list.indexOf(activeElement); // if the element does not exist in the list return an element depending on the direction and if cycle is allowed\n\n  if (index === -1) {\n    return list[!shouldGetNext && isCycleAllowed ? list.length - 1 : 0];\n  }\n\n  const listLength = list.length;\n  index += shouldGetNext ? 1 : -1;\n\n  if (isCycleAllowed) {\n    index = (index + listLength) % listLength;\n  }\n\n  return list[Math.max(0, Math.min(index, listLength - 1))];\n};\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): dom/event-handler.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst namespaceRegex = /[^.]*(?=\\..*)\\.|.*/;\nconst stripNameRegex = /\\..*/;\nconst stripUidRegex = /::\\d+$/;\nconst eventRegistry = {}; // Events storage\n\nlet uidEvent = 1;\nconst customEvents = {\n  mouseenter: 'mouseover',\n  mouseleave: 'mouseout'\n};\nconst customEventsRegex = /^(mouseenter|mouseleave)/i;\nconst nativeEvents = new Set(['click', 'dblclick', 'mouseup', 'mousedown', 'contextmenu', 'mousewheel', 'DOMMouseScroll', 'mouseover', 'mouseout', 'mousemove', 'selectstart', 'selectend', 'keydown', 'keypress', 'keyup', 'orientationchange', 'touchstart', 'touchmove', 'touchend', 'touchcancel', 'pointerdown', 'pointermove', 'pointerup', 'pointerleave', 'pointercancel', 'gesturestart', 'gesturechange', 'gestureend', 'focus', 'blur', 'change', 'reset', 'select', 'submit', 'focusin', 'focusout', 'load', 'unload', 'beforeunload', 'resize', 'move', 'DOMContentLoaded', 'readystatechange', 'error', 'abort', 'scroll']);\n/**\n * ------------------------------------------------------------------------\n * Private methods\n * ------------------------------------------------------------------------\n */\n\nfunction getUidEvent(element, uid) {\n  return uid && `${uid}::${uidEvent++}` || element.uidEvent || uidEvent++;\n}\n\nfunction getEvent(element) {\n  const uid = getUidEvent(element);\n  element.uidEvent = uid;\n  eventRegistry[uid] = eventRegistry[uid] || {};\n  return eventRegistry[uid];\n}\n\nfunction bootstrapHandler(element, fn) {\n  return function handler(event) {\n    event.delegateTarget = element;\n\n    if (handler.oneOff) {\n      EventHandler.off(element, event.type, fn);\n    }\n\n    return fn.apply(element, [event]);\n  };\n}\n\nfunction bootstrapDelegationHandler(element, selector, fn) {\n  return function handler(event) {\n    const domElements = element.querySelectorAll(selector);\n\n    for (let {\n      target\n    } = event; target && target !== this; target = target.parentNode) {\n      for (let i = domElements.length; i--;) {\n        if (domElements[i] === target) {\n          event.delegateTarget = target;\n\n          if (handler.oneOff) {\n            // eslint-disable-next-line unicorn/consistent-destructuring\n            EventHandler.off(element, event.type, selector, fn);\n          }\n\n          return fn.apply(target, [event]);\n        }\n      }\n    } // To please ESLint\n\n\n    return null;\n  };\n}\n\nfunction findHandler(events, handler, delegationSelector = null) {\n  const uidEventList = Object.keys(events);\n\n  for (let i = 0, len = uidEventList.length; i < len; i++) {\n    const event = events[uidEventList[i]];\n\n    if (event.originalHandler === handler && event.delegationSelector === delegationSelector) {\n      return event;\n    }\n  }\n\n  return null;\n}\n\nfunction normalizeParams(originalTypeEvent, handler, delegationFn) {\n  const delegation = typeof handler === 'string';\n  const originalHandler = delegation ? delegationFn : handler;\n  let typeEvent = getTypeEvent(originalTypeEvent);\n  const isNative = nativeEvents.has(typeEvent);\n\n  if (!isNative) {\n    typeEvent = originalTypeEvent;\n  }\n\n  return [delegation, originalHandler, typeEvent];\n}\n\nfunction addHandler(element, originalTypeEvent, handler, delegationFn, oneOff) {\n  if (typeof originalTypeEvent !== 'string' || !element) {\n    return;\n  }\n\n  if (!handler) {\n    handler = delegationFn;\n    delegationFn = null;\n  } // in case of mouseenter or mouseleave wrap the handler within a function that checks for its DOM position\n  // this prevents the handler from being dispatched the same way as mouseover or mouseout does\n\n\n  if (customEventsRegex.test(originalTypeEvent)) {\n    const wrapFn = fn => {\n      return function (event) {\n        if (!event.relatedTarget || event.relatedTarget !== event.delegateTarget && !event.delegateTarget.contains(event.relatedTarget)) {\n          return fn.call(this, event);\n        }\n      };\n    };\n\n    if (delegationFn) {\n      delegationFn = wrapFn(delegationFn);\n    } else {\n      handler = wrapFn(handler);\n    }\n  }\n\n  const [delegation, originalHandler, typeEvent] = normalizeParams(originalTypeEvent, handler, delegationFn);\n  const events = getEvent(element);\n  const handlers = events[typeEvent] || (events[typeEvent] = {});\n  const previousFn = findHandler(handlers, originalHandler, delegation ? handler : null);\n\n  if (previousFn) {\n    previousFn.oneOff = previousFn.oneOff && oneOff;\n    return;\n  }\n\n  const uid = getUidEvent(originalHandler, originalTypeEvent.replace(namespaceRegex, ''));\n  const fn = delegation ? bootstrapDelegationHandler(element, handler, delegationFn) : bootstrapHandler(element, handler);\n  fn.delegationSelector = delegation ? handler : null;\n  fn.originalHandler = originalHandler;\n  fn.oneOff = oneOff;\n  fn.uidEvent = uid;\n  handlers[uid] = fn;\n  element.addEventListener(typeEvent, fn, delegation);\n}\n\nfunction removeHandler(element, events, typeEvent, handler, delegationSelector) {\n  const fn = findHandler(events[typeEvent], handler, delegationSelector);\n\n  if (!fn) {\n    return;\n  }\n\n  element.removeEventListener(typeEvent, fn, Boolean(delegationSelector));\n  delete events[typeEvent][fn.uidEvent];\n}\n\nfunction removeNamespacedHandlers(element, events, typeEvent, namespace) {\n  const storeElementEvent = events[typeEvent] || {};\n  Object.keys(storeElementEvent).forEach(handlerKey => {\n    if (handlerKey.includes(namespace)) {\n      const event = storeElementEvent[handlerKey];\n      removeHandler(element, events, typeEvent, event.originalHandler, event.delegationSelector);\n    }\n  });\n}\n\nfunction getTypeEvent(event) {\n  // allow to get the native events from namespaced events ('click.bs.button' --> 'click')\n  event = event.replace(stripNameRegex, '');\n  return customEvents[event] || event;\n}\n\nconst EventHandler = {\n  on(element, event, handler, delegationFn) {\n    addHandler(element, event, handler, delegationFn, false);\n  },\n\n  one(element, event, handler, delegationFn) {\n    addHandler(element, event, handler, delegationFn, true);\n  },\n\n  off(element, originalTypeEvent, handler, delegationFn) {\n    if (typeof originalTypeEvent !== 'string' || !element) {\n      return;\n    }\n\n    const [delegation, originalHandler, typeEvent] = normalizeParams(originalTypeEvent, handler, delegationFn);\n    const inNamespace = typeEvent !== originalTypeEvent;\n    const events = getEvent(element);\n    const isNamespace = originalTypeEvent.startsWith('.');\n\n    if (typeof originalHandler !== 'undefined') {\n      // Simplest case: handler is passed, remove that listener ONLY.\n      if (!events || !events[typeEvent]) {\n        return;\n      }\n\n      removeHandler(element, events, typeEvent, originalHandler, delegation ? handler : null);\n      return;\n    }\n\n    if (isNamespace) {\n      Object.keys(events).forEach(elementEvent => {\n        removeNamespacedHandlers(element, events, elementEvent, originalTypeEvent.slice(1));\n      });\n    }\n\n    const storeElementEvent = events[typeEvent] || {};\n    Object.keys(storeElementEvent).forEach(keyHandlers => {\n      const handlerKey = keyHandlers.replace(stripUidRegex, '');\n\n      if (!inNamespace || originalTypeEvent.includes(handlerKey)) {\n        const event = storeElementEvent[keyHandlers];\n        removeHandler(element, events, typeEvent, event.originalHandler, event.delegationSelector);\n      }\n    });\n  },\n\n  trigger(element, event, args) {\n    if (typeof event !== 'string' || !element) {\n      return null;\n    }\n\n    const $ = getjQuery();\n    const typeEvent = getTypeEvent(event);\n    const inNamespace = event !== typeEvent;\n    const isNative = nativeEvents.has(typeEvent);\n    let jQueryEvent;\n    let bubbles = true;\n    let nativeDispatch = true;\n    let defaultPrevented = false;\n    let evt = null;\n\n    if (inNamespace && $) {\n      jQueryEvent = $.Event(event, args);\n      $(element).trigger(jQueryEvent);\n      bubbles = !jQueryEvent.isPropagationStopped();\n      nativeDispatch = !jQueryEvent.isImmediatePropagationStopped();\n      defaultPrevented = jQueryEvent.isDefaultPrevented();\n    }\n\n    if (isNative) {\n      evt = document.createEvent('HTMLEvents');\n      evt.initEvent(typeEvent, bubbles, true);\n    } else {\n      evt = new CustomEvent(event, {\n        bubbles,\n        cancelable: true\n      });\n    } // merge custom information in our event\n\n\n    if (typeof args !== 'undefined') {\n      Object.keys(args).forEach(key => {\n        Object.defineProperty(evt, key, {\n          get() {\n            return args[key];\n          }\n\n        });\n      });\n    }\n\n    if (defaultPrevented) {\n      evt.preventDefault();\n    }\n\n    if (nativeDispatch) {\n      element.dispatchEvent(evt);\n    }\n\n    if (evt.defaultPrevented && typeof jQueryEvent !== 'undefined') {\n      jQueryEvent.preventDefault();\n    }\n\n    return evt;\n  }\n\n};\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): dom/data.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\nconst elementMap = new Map();\nvar Data = {\n  set(element, key, instance) {\n    if (!elementMap.has(element)) {\n      elementMap.set(element, new Map());\n    }\n\n    const instanceMap = elementMap.get(element); // make it clear we only want one instance per element\n    // can be removed later when multiple key/instances are fine to be used\n\n    if (!instanceMap.has(key) && instanceMap.size !== 0) {\n      // eslint-disable-next-line no-console\n      console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(instanceMap.keys())[0]}.`);\n      return;\n    }\n\n    instanceMap.set(key, instance);\n  },\n\n  get(element, key) {\n    if (elementMap.has(element)) {\n      return elementMap.get(element).get(key) || null;\n    }\n\n    return null;\n  },\n\n  remove(element, key) {\n    if (!elementMap.has(element)) {\n      return;\n    }\n\n    const instanceMap = elementMap.get(element);\n    instanceMap.delete(key); // free up element references if there are no instances left for an element\n\n    if (instanceMap.size === 0) {\n      elementMap.delete(element);\n    }\n  }\n\n};\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): base-component.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst VERSION = '5.0.2';\n\nclass BaseComponent {\n  constructor(element) {\n    element = getElement(element);\n\n    if (!element) {\n      return;\n    }\n\n    this._element = element;\n    Data.set(this._element, this.constructor.DATA_KEY, this);\n  }\n\n  dispose() {\n    Data.remove(this._element, this.constructor.DATA_KEY);\n    EventHandler.off(this._element, this.constructor.EVENT_KEY);\n    Object.getOwnPropertyNames(this).forEach(propertyName => {\n      this[propertyName] = null;\n    });\n  }\n\n  _queueCallback(callback, element, isAnimated = true) {\n    executeAfterTransition(callback, element, isAnimated);\n  }\n  /** Static */\n\n\n  static getInstance(element) {\n    return Data.get(element, this.DATA_KEY);\n  }\n\n  static getOrCreateInstance(element, config = {}) {\n    return this.getInstance(element) || new this(element, typeof config === 'object' ? config : null);\n  }\n\n  static get VERSION() {\n    return VERSION;\n  }\n\n  static get NAME() {\n    throw new Error('You have to implement the static method \"NAME\", for each component!');\n  }\n\n  static get DATA_KEY() {\n    return `bs.${this.NAME}`;\n  }\n\n  static get EVENT_KEY() {\n    return `.${this.DATA_KEY}`;\n  }\n\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): alert.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$c = 'alert';\nconst DATA_KEY$b = 'bs.alert';\nconst EVENT_KEY$b = `.${DATA_KEY$b}`;\nconst DATA_API_KEY$8 = '.data-api';\nconst SELECTOR_DISMISS = '[data-bs-dismiss=\"alert\"]';\nconst EVENT_CLOSE = `close${EVENT_KEY$b}`;\nconst EVENT_CLOSED = `closed${EVENT_KEY$b}`;\nconst EVENT_CLICK_DATA_API$7 = `click${EVENT_KEY$b}${DATA_API_KEY$8}`;\nconst CLASS_NAME_ALERT = 'alert';\nconst CLASS_NAME_FADE$6 = 'fade';\nconst CLASS_NAME_SHOW$9 = 'show';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Alert extends BaseComponent {\n  // Getters\n  static get NAME() {\n    return NAME$c;\n  } // Public\n\n\n  close(element) {\n    const rootElement = element ? this._getRootElement(element) : this._element;\n\n    const customEvent = this._triggerCloseEvent(rootElement);\n\n    if (customEvent === null || customEvent.defaultPrevented) {\n      return;\n    }\n\n    this._removeElement(rootElement);\n  } // Private\n\n\n  _getRootElement(element) {\n    return getElementFromSelector(element) || element.closest(`.${CLASS_NAME_ALERT}`);\n  }\n\n  _triggerCloseEvent(element) {\n    return EventHandler.trigger(element, EVENT_CLOSE);\n  }\n\n  _removeElement(element) {\n    element.classList.remove(CLASS_NAME_SHOW$9);\n    const isAnimated = element.classList.contains(CLASS_NAME_FADE$6);\n\n    this._queueCallback(() => this._destroyElement(element), element, isAnimated);\n  }\n\n  _destroyElement(element) {\n    element.remove();\n    EventHandler.trigger(element, EVENT_CLOSED);\n  } // Static\n\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Alert.getOrCreateInstance(this);\n\n      if (config === 'close') {\n        data[config](this);\n      }\n    });\n  }\n\n  static handleDismiss(alertInstance) {\n    return function (event) {\n      if (event) {\n        event.preventDefault();\n      }\n\n      alertInstance.close(this);\n    };\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$7, SELECTOR_DISMISS, Alert.handleDismiss(new Alert()));\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Alert to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Alert);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): button.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$b = 'button';\nconst DATA_KEY$a = 'bs.button';\nconst EVENT_KEY$a = `.${DATA_KEY$a}`;\nconst DATA_API_KEY$7 = '.data-api';\nconst CLASS_NAME_ACTIVE$3 = 'active';\nconst SELECTOR_DATA_TOGGLE$5 = '[data-bs-toggle=\"button\"]';\nconst EVENT_CLICK_DATA_API$6 = `click${EVENT_KEY$a}${DATA_API_KEY$7}`;\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Button extends BaseComponent {\n  // Getters\n  static get NAME() {\n    return NAME$b;\n  } // Public\n\n\n  toggle() {\n    // Toggle class and sync the `aria-pressed` attribute with the return value of the `.toggle()` method\n    this._element.setAttribute('aria-pressed', this._element.classList.toggle(CLASS_NAME_ACTIVE$3));\n  } // Static\n\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Button.getOrCreateInstance(this);\n\n      if (config === 'toggle') {\n        data[config]();\n      }\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$6, SELECTOR_DATA_TOGGLE$5, event => {\n  event.preventDefault();\n  const button = event.target.closest(SELECTOR_DATA_TOGGLE$5);\n  const data = Button.getOrCreateInstance(button);\n  data.toggle();\n});\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Button to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Button);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): dom/manipulator.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\nfunction normalizeData(val) {\n  if (val === 'true') {\n    return true;\n  }\n\n  if (val === 'false') {\n    return false;\n  }\n\n  if (val === Number(val).toString()) {\n    return Number(val);\n  }\n\n  if (val === '' || val === 'null') {\n    return null;\n  }\n\n  return val;\n}\n\nfunction normalizeDataKey(key) {\n  return key.replace(/[A-Z]/g, chr => `-${chr.toLowerCase()}`);\n}\n\nconst Manipulator = {\n  setDataAttribute(element, key, value) {\n    element.setAttribute(`data-bs-${normalizeDataKey(key)}`, value);\n  },\n\n  removeDataAttribute(element, key) {\n    element.removeAttribute(`data-bs-${normalizeDataKey(key)}`);\n  },\n\n  getDataAttributes(element) {\n    if (!element) {\n      return {};\n    }\n\n    const attributes = {};\n    Object.keys(element.dataset).filter(key => key.startsWith('bs')).forEach(key => {\n      let pureKey = key.replace(/^bs/, '');\n      pureKey = pureKey.charAt(0).toLowerCase() + pureKey.slice(1, pureKey.length);\n      attributes[pureKey] = normalizeData(element.dataset[key]);\n    });\n    return attributes;\n  },\n\n  getDataAttribute(element, key) {\n    return normalizeData(element.getAttribute(`data-bs-${normalizeDataKey(key)}`));\n  },\n\n  offset(element) {\n    const rect = element.getBoundingClientRect();\n    return {\n      top: rect.top + document.body.scrollTop,\n      left: rect.left + document.body.scrollLeft\n    };\n  },\n\n  position(element) {\n    return {\n      top: element.offsetTop,\n      left: element.offsetLeft\n    };\n  }\n\n};\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): carousel.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$a = 'carousel';\nconst DATA_KEY$9 = 'bs.carousel';\nconst EVENT_KEY$9 = `.${DATA_KEY$9}`;\nconst DATA_API_KEY$6 = '.data-api';\nconst ARROW_LEFT_KEY = 'ArrowLeft';\nconst ARROW_RIGHT_KEY = 'ArrowRight';\nconst TOUCHEVENT_COMPAT_WAIT = 500; // Time for mouse compat events to fire after touch\n\nconst SWIPE_THRESHOLD = 40;\nconst Default$9 = {\n  interval: 5000,\n  keyboard: true,\n  slide: false,\n  pause: 'hover',\n  wrap: true,\n  touch: true\n};\nconst DefaultType$9 = {\n  interval: '(number|boolean)',\n  keyboard: 'boolean',\n  slide: '(boolean|string)',\n  pause: '(string|boolean)',\n  wrap: 'boolean',\n  touch: 'boolean'\n};\nconst ORDER_NEXT = 'next';\nconst ORDER_PREV = 'prev';\nconst DIRECTION_LEFT = 'left';\nconst DIRECTION_RIGHT = 'right';\nconst KEY_TO_DIRECTION = {\n  [ARROW_LEFT_KEY]: DIRECTION_RIGHT,\n  [ARROW_RIGHT_KEY]: DIRECTION_LEFT\n};\nconst EVENT_SLIDE = `slide${EVENT_KEY$9}`;\nconst EVENT_SLID = `slid${EVENT_KEY$9}`;\nconst EVENT_KEYDOWN = `keydown${EVENT_KEY$9}`;\nconst EVENT_MOUSEENTER = `mouseenter${EVENT_KEY$9}`;\nconst EVENT_MOUSELEAVE = `mouseleave${EVENT_KEY$9}`;\nconst EVENT_TOUCHSTART = `touchstart${EVENT_KEY$9}`;\nconst EVENT_TOUCHMOVE = `touchmove${EVENT_KEY$9}`;\nconst EVENT_TOUCHEND = `touchend${EVENT_KEY$9}`;\nconst EVENT_POINTERDOWN = `pointerdown${EVENT_KEY$9}`;\nconst EVENT_POINTERUP = `pointerup${EVENT_KEY$9}`;\nconst EVENT_DRAG_START = `dragstart${EVENT_KEY$9}`;\nconst EVENT_LOAD_DATA_API$2 = `load${EVENT_KEY$9}${DATA_API_KEY$6}`;\nconst EVENT_CLICK_DATA_API$5 = `click${EVENT_KEY$9}${DATA_API_KEY$6}`;\nconst CLASS_NAME_CAROUSEL = 'carousel';\nconst CLASS_NAME_ACTIVE$2 = 'active';\nconst CLASS_NAME_SLIDE = 'slide';\nconst CLASS_NAME_END = 'carousel-item-end';\nconst CLASS_NAME_START = 'carousel-item-start';\nconst CLASS_NAME_NEXT = 'carousel-item-next';\nconst CLASS_NAME_PREV = 'carousel-item-prev';\nconst CLASS_NAME_POINTER_EVENT = 'pointer-event';\nconst SELECTOR_ACTIVE$1 = '.active';\nconst SELECTOR_ACTIVE_ITEM = '.active.carousel-item';\nconst SELECTOR_ITEM = '.carousel-item';\nconst SELECTOR_ITEM_IMG = '.carousel-item img';\nconst SELECTOR_NEXT_PREV = '.carousel-item-next, .carousel-item-prev';\nconst SELECTOR_INDICATORS = '.carousel-indicators';\nconst SELECTOR_INDICATOR = '[data-bs-target]';\nconst SELECTOR_DATA_SLIDE = '[data-bs-slide], [data-bs-slide-to]';\nconst SELECTOR_DATA_RIDE = '[data-bs-ride=\"carousel\"]';\nconst POINTER_TYPE_TOUCH = 'touch';\nconst POINTER_TYPE_PEN = 'pen';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Carousel extends BaseComponent {\n  constructor(element, config) {\n    super(element);\n    this._items = null;\n    this._interval = null;\n    this._activeElement = null;\n    this._isPaused = false;\n    this._isSliding = false;\n    this.touchTimeout = null;\n    this.touchStartX = 0;\n    this.touchDeltaX = 0;\n    this._config = this._getConfig(config);\n    this._indicatorsElement = SelectorEngine.findOne(SELECTOR_INDICATORS, this._element);\n    this._touchSupported = 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0;\n    this._pointerEvent = Boolean(window.PointerEvent);\n\n    this._addEventListeners();\n  } // Getters\n\n\n  static get Default() {\n    return Default$9;\n  }\n\n  static get NAME() {\n    return NAME$a;\n  } // Public\n\n\n  next() {\n    this._slide(ORDER_NEXT);\n  }\n\n  nextWhenVisible() {\n    // Don't call next when the page isn't visible\n    // or the carousel or its parent isn't visible\n    if (!document.hidden && isVisible(this._element)) {\n      this.next();\n    }\n  }\n\n  prev() {\n    this._slide(ORDER_PREV);\n  }\n\n  pause(event) {\n    if (!event) {\n      this._isPaused = true;\n    }\n\n    if (SelectorEngine.findOne(SELECTOR_NEXT_PREV, this._element)) {\n      triggerTransitionEnd(this._element);\n      this.cycle(true);\n    }\n\n    clearInterval(this._interval);\n    this._interval = null;\n  }\n\n  cycle(event) {\n    if (!event) {\n      this._isPaused = false;\n    }\n\n    if (this._interval) {\n      clearInterval(this._interval);\n      this._interval = null;\n    }\n\n    if (this._config && this._config.interval && !this._isPaused) {\n      this._updateInterval();\n\n      this._interval = setInterval((document.visibilityState ? this.nextWhenVisible : this.next).bind(this), this._config.interval);\n    }\n  }\n\n  to(index) {\n    this._activeElement = SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element);\n\n    const activeIndex = this._getItemIndex(this._activeElement);\n\n    if (index > this._items.length - 1 || index < 0) {\n      return;\n    }\n\n    if (this._isSliding) {\n      EventHandler.one(this._element, EVENT_SLID, () => this.to(index));\n      return;\n    }\n\n    if (activeIndex === index) {\n      this.pause();\n      this.cycle();\n      return;\n    }\n\n    const order = index > activeIndex ? ORDER_NEXT : ORDER_PREV;\n\n    this._slide(order, this._items[index]);\n  } // Private\n\n\n  _getConfig(config) {\n    config = { ...Default$9,\n      ...Manipulator.getDataAttributes(this._element),\n      ...(typeof config === 'object' ? config : {})\n    };\n    typeCheckConfig(NAME$a, config, DefaultType$9);\n    return config;\n  }\n\n  _handleSwipe() {\n    const absDeltax = Math.abs(this.touchDeltaX);\n\n    if (absDeltax <= SWIPE_THRESHOLD) {\n      return;\n    }\n\n    const direction = absDeltax / this.touchDeltaX;\n    this.touchDeltaX = 0;\n\n    if (!direction) {\n      return;\n    }\n\n    this._slide(direction > 0 ? DIRECTION_RIGHT : DIRECTION_LEFT);\n  }\n\n  _addEventListeners() {\n    if (this._config.keyboard) {\n      EventHandler.on(this._element, EVENT_KEYDOWN, event => this._keydown(event));\n    }\n\n    if (this._config.pause === 'hover') {\n      EventHandler.on(this._element, EVENT_MOUSEENTER, event => this.pause(event));\n      EventHandler.on(this._element, EVENT_MOUSELEAVE, event => this.cycle(event));\n    }\n\n    if (this._config.touch && this._touchSupported) {\n      this._addTouchEventListeners();\n    }\n  }\n\n  _addTouchEventListeners() {\n    const start = event => {\n      if (this._pointerEvent && (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH)) {\n        this.touchStartX = event.clientX;\n      } else if (!this._pointerEvent) {\n        this.touchStartX = event.touches[0].clientX;\n      }\n    };\n\n    const move = event => {\n      // ensure swiping with one touch and not pinching\n      this.touchDeltaX = event.touches && event.touches.length > 1 ? 0 : event.touches[0].clientX - this.touchStartX;\n    };\n\n    const end = event => {\n      if (this._pointerEvent && (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH)) {\n        this.touchDeltaX = event.clientX - this.touchStartX;\n      }\n\n      this._handleSwipe();\n\n      if (this._config.pause === 'hover') {\n        // If it's a touch-enabled device, mouseenter/leave are fired as\n        // part of the mouse compatibility events on first tap - the carousel\n        // would stop cycling until user tapped out of it;\n        // here, we listen for touchend, explicitly pause the carousel\n        // (as if it's the second time we tap on it, mouseenter compat event\n        // is NOT fired) and after a timeout (to allow for mouse compatibility\n        // events to fire) we explicitly restart cycling\n        this.pause();\n\n        if (this.touchTimeout) {\n          clearTimeout(this.touchTimeout);\n        }\n\n        this.touchTimeout = setTimeout(event => this.cycle(event), TOUCHEVENT_COMPAT_WAIT + this._config.interval);\n      }\n    };\n\n    SelectorEngine.find(SELECTOR_ITEM_IMG, this._element).forEach(itemImg => {\n      EventHandler.on(itemImg, EVENT_DRAG_START, e => e.preventDefault());\n    });\n\n    if (this._pointerEvent) {\n      EventHandler.on(this._element, EVENT_POINTERDOWN, event => start(event));\n      EventHandler.on(this._element, EVENT_POINTERUP, event => end(event));\n\n      this._element.classList.add(CLASS_NAME_POINTER_EVENT);\n    } else {\n      EventHandler.on(this._element, EVENT_TOUCHSTART, event => start(event));\n      EventHandler.on(this._element, EVENT_TOUCHMOVE, event => move(event));\n      EventHandler.on(this._element, EVENT_TOUCHEND, event => end(event));\n    }\n  }\n\n  _keydown(event) {\n    if (/input|textarea/i.test(event.target.tagName)) {\n      return;\n    }\n\n    const direction = KEY_TO_DIRECTION[event.key];\n\n    if (direction) {\n      event.preventDefault();\n\n      this._slide(direction);\n    }\n  }\n\n  _getItemIndex(element) {\n    this._items = element && element.parentNode ? SelectorEngine.find(SELECTOR_ITEM, element.parentNode) : [];\n    return this._items.indexOf(element);\n  }\n\n  _getItemByOrder(order, activeElement) {\n    const isNext = order === ORDER_NEXT;\n    return getNextActiveElement(this._items, activeElement, isNext, this._config.wrap);\n  }\n\n  _triggerSlideEvent(relatedTarget, eventDirectionName) {\n    const targetIndex = this._getItemIndex(relatedTarget);\n\n    const fromIndex = this._getItemIndex(SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element));\n\n    return EventHandler.trigger(this._element, EVENT_SLIDE, {\n      relatedTarget,\n      direction: eventDirectionName,\n      from: fromIndex,\n      to: targetIndex\n    });\n  }\n\n  _setActiveIndicatorElement(element) {\n    if (this._indicatorsElement) {\n      const activeIndicator = SelectorEngine.findOne(SELECTOR_ACTIVE$1, this._indicatorsElement);\n      activeIndicator.classList.remove(CLASS_NAME_ACTIVE$2);\n      activeIndicator.removeAttribute('aria-current');\n      const indicators = SelectorEngine.find(SELECTOR_INDICATOR, this._indicatorsElement);\n\n      for (let i = 0; i < indicators.length; i++) {\n        if (Number.parseInt(indicators[i].getAttribute('data-bs-slide-to'), 10) === this._getItemIndex(element)) {\n          indicators[i].classList.add(CLASS_NAME_ACTIVE$2);\n          indicators[i].setAttribute('aria-current', 'true');\n          break;\n        }\n      }\n    }\n  }\n\n  _updateInterval() {\n    const element = this._activeElement || SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element);\n\n    if (!element) {\n      return;\n    }\n\n    const elementInterval = Number.parseInt(element.getAttribute('data-bs-interval'), 10);\n\n    if (elementInterval) {\n      this._config.defaultInterval = this._config.defaultInterval || this._config.interval;\n      this._config.interval = elementInterval;\n    } else {\n      this._config.interval = this._config.defaultInterval || this._config.interval;\n    }\n  }\n\n  _slide(directionOrOrder, element) {\n    const order = this._directionToOrder(directionOrOrder);\n\n    const activeElement = SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element);\n\n    const activeElementIndex = this._getItemIndex(activeElement);\n\n    const nextElement = element || this._getItemByOrder(order, activeElement);\n\n    const nextElementIndex = this._getItemIndex(nextElement);\n\n    const isCycling = Boolean(this._interval);\n    const isNext = order === ORDER_NEXT;\n    const directionalClassName = isNext ? CLASS_NAME_START : CLASS_NAME_END;\n    const orderClassName = isNext ? CLASS_NAME_NEXT : CLASS_NAME_PREV;\n\n    const eventDirectionName = this._orderToDirection(order);\n\n    if (nextElement && nextElement.classList.contains(CLASS_NAME_ACTIVE$2)) {\n      this._isSliding = false;\n      return;\n    }\n\n    if (this._isSliding) {\n      return;\n    }\n\n    const slideEvent = this._triggerSlideEvent(nextElement, eventDirectionName);\n\n    if (slideEvent.defaultPrevented) {\n      return;\n    }\n\n    if (!activeElement || !nextElement) {\n      // Some weirdness is happening, so we bail\n      return;\n    }\n\n    this._isSliding = true;\n\n    if (isCycling) {\n      this.pause();\n    }\n\n    this._setActiveIndicatorElement(nextElement);\n\n    this._activeElement = nextElement;\n\n    const triggerSlidEvent = () => {\n      EventHandler.trigger(this._element, EVENT_SLID, {\n        relatedTarget: nextElement,\n        direction: eventDirectionName,\n        from: activeElementIndex,\n        to: nextElementIndex\n      });\n    };\n\n    if (this._element.classList.contains(CLASS_NAME_SLIDE)) {\n      nextElement.classList.add(orderClassName);\n      reflow(nextElement);\n      activeElement.classList.add(directionalClassName);\n      nextElement.classList.add(directionalClassName);\n\n      const completeCallBack = () => {\n        nextElement.classList.remove(directionalClassName, orderClassName);\n        nextElement.classList.add(CLASS_NAME_ACTIVE$2);\n        activeElement.classList.remove(CLASS_NAME_ACTIVE$2, orderClassName, directionalClassName);\n        this._isSliding = false;\n        setTimeout(triggerSlidEvent, 0);\n      };\n\n      this._queueCallback(completeCallBack, activeElement, true);\n    } else {\n      activeElement.classList.remove(CLASS_NAME_ACTIVE$2);\n      nextElement.classList.add(CLASS_NAME_ACTIVE$2);\n      this._isSliding = false;\n      triggerSlidEvent();\n    }\n\n    if (isCycling) {\n      this.cycle();\n    }\n  }\n\n  _directionToOrder(direction) {\n    if (![DIRECTION_RIGHT, DIRECTION_LEFT].includes(direction)) {\n      return direction;\n    }\n\n    if (isRTL()) {\n      return direction === DIRECTION_LEFT ? ORDER_PREV : ORDER_NEXT;\n    }\n\n    return direction === DIRECTION_LEFT ? ORDER_NEXT : ORDER_PREV;\n  }\n\n  _orderToDirection(order) {\n    if (![ORDER_NEXT, ORDER_PREV].includes(order)) {\n      return order;\n    }\n\n    if (isRTL()) {\n      return order === ORDER_PREV ? DIRECTION_LEFT : DIRECTION_RIGHT;\n    }\n\n    return order === ORDER_PREV ? DIRECTION_RIGHT : DIRECTION_LEFT;\n  } // Static\n\n\n  static carouselInterface(element, config) {\n    const data = Carousel.getOrCreateInstance(element, config);\n    let {\n      _config\n    } = data;\n\n    if (typeof config === 'object') {\n      _config = { ..._config,\n        ...config\n      };\n    }\n\n    const action = typeof config === 'string' ? config : _config.slide;\n\n    if (typeof config === 'number') {\n      data.to(config);\n    } else if (typeof action === 'string') {\n      if (typeof data[action] === 'undefined') {\n        throw new TypeError(`No method named \"${action}\"`);\n      }\n\n      data[action]();\n    } else if (_config.interval && _config.ride) {\n      data.pause();\n      data.cycle();\n    }\n  }\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      Carousel.carouselInterface(this, config);\n    });\n  }\n\n  static dataApiClickHandler(event) {\n    const target = getElementFromSelector(this);\n\n    if (!target || !target.classList.contains(CLASS_NAME_CAROUSEL)) {\n      return;\n    }\n\n    const config = { ...Manipulator.getDataAttributes(target),\n      ...Manipulator.getDataAttributes(this)\n    };\n    const slideIndex = this.getAttribute('data-bs-slide-to');\n\n    if (slideIndex) {\n      config.interval = false;\n    }\n\n    Carousel.carouselInterface(target, config);\n\n    if (slideIndex) {\n      Carousel.getInstance(target).to(slideIndex);\n    }\n\n    event.preventDefault();\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$5, SELECTOR_DATA_SLIDE, Carousel.dataApiClickHandler);\nEventHandler.on(window, EVENT_LOAD_DATA_API$2, () => {\n  const carousels = SelectorEngine.find(SELECTOR_DATA_RIDE);\n\n  for (let i = 0, len = carousels.length; i < len; i++) {\n    Carousel.carouselInterface(carousels[i], Carousel.getInstance(carousels[i]));\n  }\n});\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Carousel to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Carousel);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): collapse.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$9 = 'collapse';\nconst DATA_KEY$8 = 'bs.collapse';\nconst EVENT_KEY$8 = `.${DATA_KEY$8}`;\nconst DATA_API_KEY$5 = '.data-api';\nconst Default$8 = {\n  toggle: true,\n  parent: ''\n};\nconst DefaultType$8 = {\n  toggle: 'boolean',\n  parent: '(string|element)'\n};\nconst EVENT_SHOW$5 = `show${EVENT_KEY$8}`;\nconst EVENT_SHOWN$5 = `shown${EVENT_KEY$8}`;\nconst EVENT_HIDE$5 = `hide${EVENT_KEY$8}`;\nconst EVENT_HIDDEN$5 = `hidden${EVENT_KEY$8}`;\nconst EVENT_CLICK_DATA_API$4 = `click${EVENT_KEY$8}${DATA_API_KEY$5}`;\nconst CLASS_NAME_SHOW$8 = 'show';\nconst CLASS_NAME_COLLAPSE = 'collapse';\nconst CLASS_NAME_COLLAPSING = 'collapsing';\nconst CLASS_NAME_COLLAPSED = 'collapsed';\nconst WIDTH = 'width';\nconst HEIGHT = 'height';\nconst SELECTOR_ACTIVES = '.show, .collapsing';\nconst SELECTOR_DATA_TOGGLE$4 = '[data-bs-toggle=\"collapse\"]';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Collapse extends BaseComponent {\n  constructor(element, config) {\n    super(element);\n    this._isTransitioning = false;\n    this._config = this._getConfig(config);\n    this._triggerArray = SelectorEngine.find(`${SELECTOR_DATA_TOGGLE$4}[href=\"#${this._element.id}\"],` + `${SELECTOR_DATA_TOGGLE$4}[data-bs-target=\"#${this._element.id}\"]`);\n    const toggleList = SelectorEngine.find(SELECTOR_DATA_TOGGLE$4);\n\n    for (let i = 0, len = toggleList.length; i < len; i++) {\n      const elem = toggleList[i];\n      const selector = getSelectorFromElement(elem);\n      const filterElement = SelectorEngine.find(selector).filter(foundElem => foundElem === this._element);\n\n      if (selector !== null && filterElement.length) {\n        this._selector = selector;\n\n        this._triggerArray.push(elem);\n      }\n    }\n\n    this._parent = this._config.parent ? this._getParent() : null;\n\n    if (!this._config.parent) {\n      this._addAriaAndCollapsedClass(this._element, this._triggerArray);\n    }\n\n    if (this._config.toggle) {\n      this.toggle();\n    }\n  } // Getters\n\n\n  static get Default() {\n    return Default$8;\n  }\n\n  static get NAME() {\n    return NAME$9;\n  } // Public\n\n\n  toggle() {\n    if (this._element.classList.contains(CLASS_NAME_SHOW$8)) {\n      this.hide();\n    } else {\n      this.show();\n    }\n  }\n\n  show() {\n    if (this._isTransitioning || this._element.classList.contains(CLASS_NAME_SHOW$8)) {\n      return;\n    }\n\n    let actives;\n    let activesData;\n\n    if (this._parent) {\n      actives = SelectorEngine.find(SELECTOR_ACTIVES, this._parent).filter(elem => {\n        if (typeof this._config.parent === 'string') {\n          return elem.getAttribute('data-bs-parent') === this._config.parent;\n        }\n\n        return elem.classList.contains(CLASS_NAME_COLLAPSE);\n      });\n\n      if (actives.length === 0) {\n        actives = null;\n      }\n    }\n\n    const container = SelectorEngine.findOne(this._selector);\n\n    if (actives) {\n      const tempActiveData = actives.find(elem => container !== elem);\n      activesData = tempActiveData ? Collapse.getInstance(tempActiveData) : null;\n\n      if (activesData && activesData._isTransitioning) {\n        return;\n      }\n    }\n\n    const startEvent = EventHandler.trigger(this._element, EVENT_SHOW$5);\n\n    if (startEvent.defaultPrevented) {\n      return;\n    }\n\n    if (actives) {\n      actives.forEach(elemActive => {\n        if (container !== elemActive) {\n          Collapse.collapseInterface(elemActive, 'hide');\n        }\n\n        if (!activesData) {\n          Data.set(elemActive, DATA_KEY$8, null);\n        }\n      });\n    }\n\n    const dimension = this._getDimension();\n\n    this._element.classList.remove(CLASS_NAME_COLLAPSE);\n\n    this._element.classList.add(CLASS_NAME_COLLAPSING);\n\n    this._element.style[dimension] = 0;\n\n    if (this._triggerArray.length) {\n      this._triggerArray.forEach(element => {\n        element.classList.remove(CLASS_NAME_COLLAPSED);\n        element.setAttribute('aria-expanded', true);\n      });\n    }\n\n    this.setTransitioning(true);\n\n    const complete = () => {\n      this._element.classList.remove(CLASS_NAME_COLLAPSING);\n\n      this._element.classList.add(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$8);\n\n      this._element.style[dimension] = '';\n      this.setTransitioning(false);\n      EventHandler.trigger(this._element, EVENT_SHOWN$5);\n    };\n\n    const capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1);\n    const scrollSize = `scroll${capitalizedDimension}`;\n\n    this._queueCallback(complete, this._element, true);\n\n    this._element.style[dimension] = `${this._element[scrollSize]}px`;\n  }\n\n  hide() {\n    if (this._isTransitioning || !this._element.classList.contains(CLASS_NAME_SHOW$8)) {\n      return;\n    }\n\n    const startEvent = EventHandler.trigger(this._element, EVENT_HIDE$5);\n\n    if (startEvent.defaultPrevented) {\n      return;\n    }\n\n    const dimension = this._getDimension();\n\n    this._element.style[dimension] = `${this._element.getBoundingClientRect()[dimension]}px`;\n    reflow(this._element);\n\n    this._element.classList.add(CLASS_NAME_COLLAPSING);\n\n    this._element.classList.remove(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$8);\n\n    const triggerArrayLength = this._triggerArray.length;\n\n    if (triggerArrayLength > 0) {\n      for (let i = 0; i < triggerArrayLength; i++) {\n        const trigger = this._triggerArray[i];\n        const elem = getElementFromSelector(trigger);\n\n        if (elem && !elem.classList.contains(CLASS_NAME_SHOW$8)) {\n          trigger.classList.add(CLASS_NAME_COLLAPSED);\n          trigger.setAttribute('aria-expanded', false);\n        }\n      }\n    }\n\n    this.setTransitioning(true);\n\n    const complete = () => {\n      this.setTransitioning(false);\n\n      this._element.classList.remove(CLASS_NAME_COLLAPSING);\n\n      this._element.classList.add(CLASS_NAME_COLLAPSE);\n\n      EventHandler.trigger(this._element, EVENT_HIDDEN$5);\n    };\n\n    this._element.style[dimension] = '';\n\n    this._queueCallback(complete, this._element, true);\n  }\n\n  setTransitioning(isTransitioning) {\n    this._isTransitioning = isTransitioning;\n  } // Private\n\n\n  _getConfig(config) {\n    config = { ...Default$8,\n      ...config\n    };\n    config.toggle = Boolean(config.toggle); // Coerce string values\n\n    typeCheckConfig(NAME$9, config, DefaultType$8);\n    return config;\n  }\n\n  _getDimension() {\n    return this._element.classList.contains(WIDTH) ? WIDTH : HEIGHT;\n  }\n\n  _getParent() {\n    let {\n      parent\n    } = this._config;\n    parent = getElement(parent);\n    const selector = `${SELECTOR_DATA_TOGGLE$4}[data-bs-parent=\"${parent}\"]`;\n    SelectorEngine.find(selector, parent).forEach(element => {\n      const selected = getElementFromSelector(element);\n\n      this._addAriaAndCollapsedClass(selected, [element]);\n    });\n    return parent;\n  }\n\n  _addAriaAndCollapsedClass(element, triggerArray) {\n    if (!element || !triggerArray.length) {\n      return;\n    }\n\n    const isOpen = element.classList.contains(CLASS_NAME_SHOW$8);\n    triggerArray.forEach(elem => {\n      if (isOpen) {\n        elem.classList.remove(CLASS_NAME_COLLAPSED);\n      } else {\n        elem.classList.add(CLASS_NAME_COLLAPSED);\n      }\n\n      elem.setAttribute('aria-expanded', isOpen);\n    });\n  } // Static\n\n\n  static collapseInterface(element, config) {\n    let data = Collapse.getInstance(element);\n    const _config = { ...Default$8,\n      ...Manipulator.getDataAttributes(element),\n      ...(typeof config === 'object' && config ? config : {})\n    };\n\n    if (!data && _config.toggle && typeof config === 'string' && /show|hide/.test(config)) {\n      _config.toggle = false;\n    }\n\n    if (!data) {\n      data = new Collapse(element, _config);\n    }\n\n    if (typeof config === 'string') {\n      if (typeof data[config] === 'undefined') {\n        throw new TypeError(`No method named \"${config}\"`);\n      }\n\n      data[config]();\n    }\n  }\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      Collapse.collapseInterface(this, config);\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$4, SELECTOR_DATA_TOGGLE$4, function (event) {\n  // preventDefault only for <a> elements (which change the URL) not inside the collapsible element\n  if (event.target.tagName === 'A' || event.delegateTarget && event.delegateTarget.tagName === 'A') {\n    event.preventDefault();\n  }\n\n  const triggerData = Manipulator.getDataAttributes(this);\n  const selector = getSelectorFromElement(this);\n  const selectorElements = SelectorEngine.find(selector);\n  selectorElements.forEach(element => {\n    const data = Collapse.getInstance(element);\n    let config;\n\n    if (data) {\n      // update parent attribute\n      if (data._parent === null && typeof triggerData.parent === 'string') {\n        data._config.parent = triggerData.parent;\n        data._parent = data._getParent();\n      }\n\n      config = 'toggle';\n    } else {\n      config = triggerData;\n    }\n\n    Collapse.collapseInterface(element, config);\n  });\n});\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Collapse to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Collapse);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): dropdown.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$8 = 'dropdown';\nconst DATA_KEY$7 = 'bs.dropdown';\nconst EVENT_KEY$7 = `.${DATA_KEY$7}`;\nconst DATA_API_KEY$4 = '.data-api';\nconst ESCAPE_KEY$2 = 'Escape';\nconst SPACE_KEY = 'Space';\nconst TAB_KEY = 'Tab';\nconst ARROW_UP_KEY = 'ArrowUp';\nconst ARROW_DOWN_KEY = 'ArrowDown';\nconst RIGHT_MOUSE_BUTTON = 2; // MouseEvent.button value for the secondary button, usually the right button\n\nconst REGEXP_KEYDOWN = new RegExp(`${ARROW_UP_KEY}|${ARROW_DOWN_KEY}|${ESCAPE_KEY$2}`);\nconst EVENT_HIDE$4 = `hide${EVENT_KEY$7}`;\nconst EVENT_HIDDEN$4 = `hidden${EVENT_KEY$7}`;\nconst EVENT_SHOW$4 = `show${EVENT_KEY$7}`;\nconst EVENT_SHOWN$4 = `shown${EVENT_KEY$7}`;\nconst EVENT_CLICK = `click${EVENT_KEY$7}`;\nconst EVENT_CLICK_DATA_API$3 = `click${EVENT_KEY$7}${DATA_API_KEY$4}`;\nconst EVENT_KEYDOWN_DATA_API = `keydown${EVENT_KEY$7}${DATA_API_KEY$4}`;\nconst EVENT_KEYUP_DATA_API = `keyup${EVENT_KEY$7}${DATA_API_KEY$4}`;\nconst CLASS_NAME_SHOW$7 = 'show';\nconst CLASS_NAME_DROPUP = 'dropup';\nconst CLASS_NAME_DROPEND = 'dropend';\nconst CLASS_NAME_DROPSTART = 'dropstart';\nconst CLASS_NAME_NAVBAR = 'navbar';\nconst SELECTOR_DATA_TOGGLE$3 = '[data-bs-toggle=\"dropdown\"]';\nconst SELECTOR_MENU = '.dropdown-menu';\nconst SELECTOR_NAVBAR_NAV = '.navbar-nav';\nconst SELECTOR_VISIBLE_ITEMS = '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)';\nconst PLACEMENT_TOP = isRTL() ? 'top-end' : 'top-start';\nconst PLACEMENT_TOPEND = isRTL() ? 'top-start' : 'top-end';\nconst PLACEMENT_BOTTOM = isRTL() ? 'bottom-end' : 'bottom-start';\nconst PLACEMENT_BOTTOMEND = isRTL() ? 'bottom-start' : 'bottom-end';\nconst PLACEMENT_RIGHT = isRTL() ? 'left-start' : 'right-start';\nconst PLACEMENT_LEFT = isRTL() ? 'right-start' : 'left-start';\nconst Default$7 = {\n  offset: [0, 2],\n  boundary: 'clippingParents',\n  reference: 'toggle',\n  display: 'dynamic',\n  popperConfig: null,\n  autoClose: true\n};\nconst DefaultType$7 = {\n  offset: '(array|string|function)',\n  boundary: '(string|element)',\n  reference: '(string|element|object)',\n  display: 'string',\n  popperConfig: '(null|object|function)',\n  autoClose: '(boolean|string)'\n};\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Dropdown extends BaseComponent {\n  constructor(element, config) {\n    super(element);\n    this._popper = null;\n    this._config = this._getConfig(config);\n    this._menu = this._getMenuElement();\n    this._inNavbar = this._detectNavbar();\n\n    this._addEventListeners();\n  } // Getters\n\n\n  static get Default() {\n    return Default$7;\n  }\n\n  static get DefaultType() {\n    return DefaultType$7;\n  }\n\n  static get NAME() {\n    return NAME$8;\n  } // Public\n\n\n  toggle() {\n    if (isDisabled(this._element)) {\n      return;\n    }\n\n    const isActive = this._element.classList.contains(CLASS_NAME_SHOW$7);\n\n    if (isActive) {\n      this.hide();\n      return;\n    }\n\n    this.show();\n  }\n\n  show() {\n    if (isDisabled(this._element) || this._menu.classList.contains(CLASS_NAME_SHOW$7)) {\n      return;\n    }\n\n    const parent = Dropdown.getParentFromElement(this._element);\n    const relatedTarget = {\n      relatedTarget: this._element\n    };\n    const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$4, relatedTarget);\n\n    if (showEvent.defaultPrevented) {\n      return;\n    } // Totally disable Popper for Dropdowns in Navbar\n\n\n    if (this._inNavbar) {\n      Manipulator.setDataAttribute(this._menu, 'popper', 'none');\n    } else {\n      if (typeof Popper === 'undefined') {\n        throw new TypeError('Bootstrap\\'s dropdowns require Popper (https://popper.js.org)');\n      }\n\n      let referenceElement = this._element;\n\n      if (this._config.reference === 'parent') {\n        referenceElement = parent;\n      } else if (isElement(this._config.reference)) {\n        referenceElement = getElement(this._config.reference);\n      } else if (typeof this._config.reference === 'object') {\n        referenceElement = this._config.reference;\n      }\n\n      const popperConfig = this._getPopperConfig();\n\n      const isDisplayStatic = popperConfig.modifiers.find(modifier => modifier.name === 'applyStyles' && modifier.enabled === false);\n      this._popper = Popper.createPopper(referenceElement, this._menu, popperConfig);\n\n      if (isDisplayStatic) {\n        Manipulator.setDataAttribute(this._menu, 'popper', 'static');\n      }\n    } // If this is a touch-enabled device we add extra\n    // empty mouseover listeners to the body's immediate children;\n    // only needed because of broken event delegation on iOS\n    // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n\n\n    if ('ontouchstart' in document.documentElement && !parent.closest(SELECTOR_NAVBAR_NAV)) {\n      [].concat(...document.body.children).forEach(elem => EventHandler.on(elem, 'mouseover', noop));\n    }\n\n    this._element.focus();\n\n    this._element.setAttribute('aria-expanded', true);\n\n    this._menu.classList.toggle(CLASS_NAME_SHOW$7);\n\n    this._element.classList.toggle(CLASS_NAME_SHOW$7);\n\n    EventHandler.trigger(this._element, EVENT_SHOWN$4, relatedTarget);\n  }\n\n  hide() {\n    if (isDisabled(this._element) || !this._menu.classList.contains(CLASS_NAME_SHOW$7)) {\n      return;\n    }\n\n    const relatedTarget = {\n      relatedTarget: this._element\n    };\n\n    this._completeHide(relatedTarget);\n  }\n\n  dispose() {\n    if (this._popper) {\n      this._popper.destroy();\n    }\n\n    super.dispose();\n  }\n\n  update() {\n    this._inNavbar = this._detectNavbar();\n\n    if (this._popper) {\n      this._popper.update();\n    }\n  } // Private\n\n\n  _addEventListeners() {\n    EventHandler.on(this._element, EVENT_CLICK, event => {\n      event.preventDefault();\n      this.toggle();\n    });\n  }\n\n  _completeHide(relatedTarget) {\n    const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$4, relatedTarget);\n\n    if (hideEvent.defaultPrevented) {\n      return;\n    } // If this is a touch-enabled device we remove the extra\n    // empty mouseover listeners we added for iOS support\n\n\n    if ('ontouchstart' in document.documentElement) {\n      [].concat(...document.body.children).forEach(elem => EventHandler.off(elem, 'mouseover', noop));\n    }\n\n    if (this._popper) {\n      this._popper.destroy();\n    }\n\n    this._menu.classList.remove(CLASS_NAME_SHOW$7);\n\n    this._element.classList.remove(CLASS_NAME_SHOW$7);\n\n    this._element.setAttribute('aria-expanded', 'false');\n\n    Manipulator.removeDataAttribute(this._menu, 'popper');\n    EventHandler.trigger(this._element, EVENT_HIDDEN$4, relatedTarget);\n  }\n\n  _getConfig(config) {\n    config = { ...this.constructor.Default,\n      ...Manipulator.getDataAttributes(this._element),\n      ...config\n    };\n    typeCheckConfig(NAME$8, config, this.constructor.DefaultType);\n\n    if (typeof config.reference === 'object' && !isElement(config.reference) && typeof config.reference.getBoundingClientRect !== 'function') {\n      // Popper virtual elements require a getBoundingClientRect method\n      throw new TypeError(`${NAME$8.toUpperCase()}: Option \"reference\" provided type \"object\" without a required \"getBoundingClientRect\" method.`);\n    }\n\n    return config;\n  }\n\n  _getMenuElement() {\n    return SelectorEngine.next(this._element, SELECTOR_MENU)[0];\n  }\n\n  _getPlacement() {\n    const parentDropdown = this._element.parentNode;\n\n    if (parentDropdown.classList.contains(CLASS_NAME_DROPEND)) {\n      return PLACEMENT_RIGHT;\n    }\n\n    if (parentDropdown.classList.contains(CLASS_NAME_DROPSTART)) {\n      return PLACEMENT_LEFT;\n    } // We need to trim the value because custom properties can also include spaces\n\n\n    const isEnd = getComputedStyle(this._menu).getPropertyValue('--bs-position').trim() === 'end';\n\n    if (parentDropdown.classList.contains(CLASS_NAME_DROPUP)) {\n      return isEnd ? PLACEMENT_TOPEND : PLACEMENT_TOP;\n    }\n\n    return isEnd ? PLACEMENT_BOTTOMEND : PLACEMENT_BOTTOM;\n  }\n\n  _detectNavbar() {\n    return this._element.closest(`.${CLASS_NAME_NAVBAR}`) !== null;\n  }\n\n  _getOffset() {\n    const {\n      offset\n    } = this._config;\n\n    if (typeof offset === 'string') {\n      return offset.split(',').map(val => Number.parseInt(val, 10));\n    }\n\n    if (typeof offset === 'function') {\n      return popperData => offset(popperData, this._element);\n    }\n\n    return offset;\n  }\n\n  _getPopperConfig() {\n    const defaultBsPopperConfig = {\n      placement: this._getPlacement(),\n      modifiers: [{\n        name: 'preventOverflow',\n        options: {\n          boundary: this._config.boundary\n        }\n      }, {\n        name: 'offset',\n        options: {\n          offset: this._getOffset()\n        }\n      }]\n    }; // Disable Popper if we have a static display\n\n    if (this._config.display === 'static') {\n      defaultBsPopperConfig.modifiers = [{\n        name: 'applyStyles',\n        enabled: false\n      }];\n    }\n\n    return { ...defaultBsPopperConfig,\n      ...(typeof this._config.popperConfig === 'function' ? this._config.popperConfig(defaultBsPopperConfig) : this._config.popperConfig)\n    };\n  }\n\n  _selectMenuItem({\n    key,\n    target\n  }) {\n    const items = SelectorEngine.find(SELECTOR_VISIBLE_ITEMS, this._menu).filter(isVisible);\n\n    if (!items.length) {\n      return;\n    } // if target isn't included in items (e.g. when expanding the dropdown)\n    // allow cycling to get the last item in case key equals ARROW_UP_KEY\n\n\n    getNextActiveElement(items, target, key === ARROW_DOWN_KEY, !items.includes(target)).focus();\n  } // Static\n\n\n  static dropdownInterface(element, config) {\n    const data = Dropdown.getOrCreateInstance(element, config);\n\n    if (typeof config === 'string') {\n      if (typeof data[config] === 'undefined') {\n        throw new TypeError(`No method named \"${config}\"`);\n      }\n\n      data[config]();\n    }\n  }\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      Dropdown.dropdownInterface(this, config);\n    });\n  }\n\n  static clearMenus(event) {\n    if (event && (event.button === RIGHT_MOUSE_BUTTON || event.type === 'keyup' && event.key !== TAB_KEY)) {\n      return;\n    }\n\n    const toggles = SelectorEngine.find(SELECTOR_DATA_TOGGLE$3);\n\n    for (let i = 0, len = toggles.length; i < len; i++) {\n      const context = Dropdown.getInstance(toggles[i]);\n\n      if (!context || context._config.autoClose === false) {\n        continue;\n      }\n\n      if (!context._element.classList.contains(CLASS_NAME_SHOW$7)) {\n        continue;\n      }\n\n      const relatedTarget = {\n        relatedTarget: context._element\n      };\n\n      if (event) {\n        const composedPath = event.composedPath();\n        const isMenuTarget = composedPath.includes(context._menu);\n\n        if (composedPath.includes(context._element) || context._config.autoClose === 'inside' && !isMenuTarget || context._config.autoClose === 'outside' && isMenuTarget) {\n          continue;\n        } // Tab navigation through the dropdown menu or events from contained inputs shouldn't close the menu\n\n\n        if (context._menu.contains(event.target) && (event.type === 'keyup' && event.key === TAB_KEY || /input|select|option|textarea|form/i.test(event.target.tagName))) {\n          continue;\n        }\n\n        if (event.type === 'click') {\n          relatedTarget.clickEvent = event;\n        }\n      }\n\n      context._completeHide(relatedTarget);\n    }\n  }\n\n  static getParentFromElement(element) {\n    return getElementFromSelector(element) || element.parentNode;\n  }\n\n  static dataApiKeydownHandler(event) {\n    // If not input/textarea:\n    //  - And not a key in REGEXP_KEYDOWN => not a dropdown command\n    // If input/textarea:\n    //  - If space key => not a dropdown command\n    //  - If key is other than escape\n    //    - If key is not up or down => not a dropdown command\n    //    - If trigger inside the menu => not a dropdown command\n    if (/input|textarea/i.test(event.target.tagName) ? event.key === SPACE_KEY || event.key !== ESCAPE_KEY$2 && (event.key !== ARROW_DOWN_KEY && event.key !== ARROW_UP_KEY || event.target.closest(SELECTOR_MENU)) : !REGEXP_KEYDOWN.test(event.key)) {\n      return;\n    }\n\n    const isActive = this.classList.contains(CLASS_NAME_SHOW$7);\n\n    if (!isActive && event.key === ESCAPE_KEY$2) {\n      return;\n    }\n\n    event.preventDefault();\n    event.stopPropagation();\n\n    if (isDisabled(this)) {\n      return;\n    }\n\n    const getToggleButton = () => this.matches(SELECTOR_DATA_TOGGLE$3) ? this : SelectorEngine.prev(this, SELECTOR_DATA_TOGGLE$3)[0];\n\n    if (event.key === ESCAPE_KEY$2) {\n      getToggleButton().focus();\n      Dropdown.clearMenus();\n      return;\n    }\n\n    if (event.key === ARROW_UP_KEY || event.key === ARROW_DOWN_KEY) {\n      if (!isActive) {\n        getToggleButton().click();\n      }\n\n      Dropdown.getInstance(getToggleButton())._selectMenuItem(event);\n\n      return;\n    }\n\n    if (!isActive || event.key === SPACE_KEY) {\n      Dropdown.clearMenus();\n    }\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_DATA_TOGGLE$3, Dropdown.dataApiKeydownHandler);\nEventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown.dataApiKeydownHandler);\nEventHandler.on(document, EVENT_CLICK_DATA_API$3, Dropdown.clearMenus);\nEventHandler.on(document, EVENT_KEYUP_DATA_API, Dropdown.clearMenus);\nEventHandler.on(document, EVENT_CLICK_DATA_API$3, SELECTOR_DATA_TOGGLE$3, function (event) {\n  event.preventDefault();\n  Dropdown.dropdownInterface(this);\n});\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Dropdown to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Dropdown);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): util/scrollBar.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\nconst SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top';\nconst SELECTOR_STICKY_CONTENT = '.sticky-top';\n\nclass ScrollBarHelper {\n  constructor() {\n    this._element = document.body;\n  }\n\n  getWidth() {\n    // https://developer.mozilla.org/en-US/docs/Web/API/Window/innerWidth#usage_notes\n    const documentWidth = document.documentElement.clientWidth;\n    return Math.abs(window.innerWidth - documentWidth);\n  }\n\n  hide() {\n    const width = this.getWidth();\n\n    this._disableOverFlow(); // give padding to element to balance the hidden scrollbar width\n\n\n    this._setElementAttributes(this._element, 'paddingRight', calculatedValue => calculatedValue + width); // trick: We adjust positive paddingRight and negative marginRight to sticky-top elements to keep showing fullwidth\n\n\n    this._setElementAttributes(SELECTOR_FIXED_CONTENT, 'paddingRight', calculatedValue => calculatedValue + width);\n\n    this._setElementAttributes(SELECTOR_STICKY_CONTENT, 'marginRight', calculatedValue => calculatedValue - width);\n  }\n\n  _disableOverFlow() {\n    this._saveInitialAttribute(this._element, 'overflow');\n\n    this._element.style.overflow = 'hidden';\n  }\n\n  _setElementAttributes(selector, styleProp, callback) {\n    const scrollbarWidth = this.getWidth();\n\n    const manipulationCallBack = element => {\n      if (element !== this._element && window.innerWidth > element.clientWidth + scrollbarWidth) {\n        return;\n      }\n\n      this._saveInitialAttribute(element, styleProp);\n\n      const calculatedValue = window.getComputedStyle(element)[styleProp];\n      element.style[styleProp] = `${callback(Number.parseFloat(calculatedValue))}px`;\n    };\n\n    this._applyManipulationCallback(selector, manipulationCallBack);\n  }\n\n  reset() {\n    this._resetElementAttributes(this._element, 'overflow');\n\n    this._resetElementAttributes(this._element, 'paddingRight');\n\n    this._resetElementAttributes(SELECTOR_FIXED_CONTENT, 'paddingRight');\n\n    this._resetElementAttributes(SELECTOR_STICKY_CONTENT, 'marginRight');\n  }\n\n  _saveInitialAttribute(element, styleProp) {\n    const actualValue = element.style[styleProp];\n\n    if (actualValue) {\n      Manipulator.setDataAttribute(element, styleProp, actualValue);\n    }\n  }\n\n  _resetElementAttributes(selector, styleProp) {\n    const manipulationCallBack = element => {\n      const value = Manipulator.getDataAttribute(element, styleProp);\n\n      if (typeof value === 'undefined') {\n        element.style.removeProperty(styleProp);\n      } else {\n        Manipulator.removeDataAttribute(element, styleProp);\n        element.style[styleProp] = value;\n      }\n    };\n\n    this._applyManipulationCallback(selector, manipulationCallBack);\n  }\n\n  _applyManipulationCallback(selector, callBack) {\n    if (isElement(selector)) {\n      callBack(selector);\n    } else {\n      SelectorEngine.find(selector, this._element).forEach(callBack);\n    }\n  }\n\n  isOverflowing() {\n    return this.getWidth() > 0;\n  }\n\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): util/backdrop.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\nconst Default$6 = {\n  isVisible: true,\n  // if false, we use the backdrop helper without adding any element to the dom\n  isAnimated: false,\n  rootElement: 'body',\n  // give the choice to place backdrop under different elements\n  clickCallback: null\n};\nconst DefaultType$6 = {\n  isVisible: 'boolean',\n  isAnimated: 'boolean',\n  rootElement: '(element|string)',\n  clickCallback: '(function|null)'\n};\nconst NAME$7 = 'backdrop';\nconst CLASS_NAME_BACKDROP = 'modal-backdrop';\nconst CLASS_NAME_FADE$5 = 'fade';\nconst CLASS_NAME_SHOW$6 = 'show';\nconst EVENT_MOUSEDOWN = `mousedown.bs.${NAME$7}`;\n\nclass Backdrop {\n  constructor(config) {\n    this._config = this._getConfig(config);\n    this._isAppended = false;\n    this._element = null;\n  }\n\n  show(callback) {\n    if (!this._config.isVisible) {\n      execute(callback);\n      return;\n    }\n\n    this._append();\n\n    if (this._config.isAnimated) {\n      reflow(this._getElement());\n    }\n\n    this._getElement().classList.add(CLASS_NAME_SHOW$6);\n\n    this._emulateAnimation(() => {\n      execute(callback);\n    });\n  }\n\n  hide(callback) {\n    if (!this._config.isVisible) {\n      execute(callback);\n      return;\n    }\n\n    this._getElement().classList.remove(CLASS_NAME_SHOW$6);\n\n    this._emulateAnimation(() => {\n      this.dispose();\n      execute(callback);\n    });\n  } // Private\n\n\n  _getElement() {\n    if (!this._element) {\n      const backdrop = document.createElement('div');\n      backdrop.className = CLASS_NAME_BACKDROP;\n\n      if (this._config.isAnimated) {\n        backdrop.classList.add(CLASS_NAME_FADE$5);\n      }\n\n      this._element = backdrop;\n    }\n\n    return this._element;\n  }\n\n  _getConfig(config) {\n    config = { ...Default$6,\n      ...(typeof config === 'object' ? config : {})\n    }; // use getElement() with the default \"body\" to get a fresh Element on each instantiation\n\n    config.rootElement = getElement(config.rootElement);\n    typeCheckConfig(NAME$7, config, DefaultType$6);\n    return config;\n  }\n\n  _append() {\n    if (this._isAppended) {\n      return;\n    }\n\n    this._config.rootElement.appendChild(this._getElement());\n\n    EventHandler.on(this._getElement(), EVENT_MOUSEDOWN, () => {\n      execute(this._config.clickCallback);\n    });\n    this._isAppended = true;\n  }\n\n  dispose() {\n    if (!this._isAppended) {\n      return;\n    }\n\n    EventHandler.off(this._element, EVENT_MOUSEDOWN);\n\n    this._element.remove();\n\n    this._isAppended = false;\n  }\n\n  _emulateAnimation(callback) {\n    executeAfterTransition(callback, this._getElement(), this._config.isAnimated);\n  }\n\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): modal.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$6 = 'modal';\nconst DATA_KEY$6 = 'bs.modal';\nconst EVENT_KEY$6 = `.${DATA_KEY$6}`;\nconst DATA_API_KEY$3 = '.data-api';\nconst ESCAPE_KEY$1 = 'Escape';\nconst Default$5 = {\n  backdrop: true,\n  keyboard: true,\n  focus: true\n};\nconst DefaultType$5 = {\n  backdrop: '(boolean|string)',\n  keyboard: 'boolean',\n  focus: 'boolean'\n};\nconst EVENT_HIDE$3 = `hide${EVENT_KEY$6}`;\nconst EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY$6}`;\nconst EVENT_HIDDEN$3 = `hidden${EVENT_KEY$6}`;\nconst EVENT_SHOW$3 = `show${EVENT_KEY$6}`;\nconst EVENT_SHOWN$3 = `shown${EVENT_KEY$6}`;\nconst EVENT_FOCUSIN$2 = `focusin${EVENT_KEY$6}`;\nconst EVENT_RESIZE = `resize${EVENT_KEY$6}`;\nconst EVENT_CLICK_DISMISS$2 = `click.dismiss${EVENT_KEY$6}`;\nconst EVENT_KEYDOWN_DISMISS$1 = `keydown.dismiss${EVENT_KEY$6}`;\nconst EVENT_MOUSEUP_DISMISS = `mouseup.dismiss${EVENT_KEY$6}`;\nconst EVENT_MOUSEDOWN_DISMISS = `mousedown.dismiss${EVENT_KEY$6}`;\nconst EVENT_CLICK_DATA_API$2 = `click${EVENT_KEY$6}${DATA_API_KEY$3}`;\nconst CLASS_NAME_OPEN = 'modal-open';\nconst CLASS_NAME_FADE$4 = 'fade';\nconst CLASS_NAME_SHOW$5 = 'show';\nconst CLASS_NAME_STATIC = 'modal-static';\nconst SELECTOR_DIALOG = '.modal-dialog';\nconst SELECTOR_MODAL_BODY = '.modal-body';\nconst SELECTOR_DATA_TOGGLE$2 = '[data-bs-toggle=\"modal\"]';\nconst SELECTOR_DATA_DISMISS$2 = '[data-bs-dismiss=\"modal\"]';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Modal extends BaseComponent {\n  constructor(element, config) {\n    super(element);\n    this._config = this._getConfig(config);\n    this._dialog = SelectorEngine.findOne(SELECTOR_DIALOG, this._element);\n    this._backdrop = this._initializeBackDrop();\n    this._isShown = false;\n    this._ignoreBackdropClick = false;\n    this._isTransitioning = false;\n    this._scrollBar = new ScrollBarHelper();\n  } // Getters\n\n\n  static get Default() {\n    return Default$5;\n  }\n\n  static get NAME() {\n    return NAME$6;\n  } // Public\n\n\n  toggle(relatedTarget) {\n    return this._isShown ? this.hide() : this.show(relatedTarget);\n  }\n\n  show(relatedTarget) {\n    if (this._isShown || this._isTransitioning) {\n      return;\n    }\n\n    const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$3, {\n      relatedTarget\n    });\n\n    if (showEvent.defaultPrevented) {\n      return;\n    }\n\n    this._isShown = true;\n\n    if (this._isAnimated()) {\n      this._isTransitioning = true;\n    }\n\n    this._scrollBar.hide();\n\n    document.body.classList.add(CLASS_NAME_OPEN);\n\n    this._adjustDialog();\n\n    this._setEscapeEvent();\n\n    this._setResizeEvent();\n\n    EventHandler.on(this._element, EVENT_CLICK_DISMISS$2, SELECTOR_DATA_DISMISS$2, event => this.hide(event));\n    EventHandler.on(this._dialog, EVENT_MOUSEDOWN_DISMISS, () => {\n      EventHandler.one(this._element, EVENT_MOUSEUP_DISMISS, event => {\n        if (event.target === this._element) {\n          this._ignoreBackdropClick = true;\n        }\n      });\n    });\n\n    this._showBackdrop(() => this._showElement(relatedTarget));\n  }\n\n  hide(event) {\n    if (event && ['A', 'AREA'].includes(event.target.tagName)) {\n      event.preventDefault();\n    }\n\n    if (!this._isShown || this._isTransitioning) {\n      return;\n    }\n\n    const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$3);\n\n    if (hideEvent.defaultPrevented) {\n      return;\n    }\n\n    this._isShown = false;\n\n    const isAnimated = this._isAnimated();\n\n    if (isAnimated) {\n      this._isTransitioning = true;\n    }\n\n    this._setEscapeEvent();\n\n    this._setResizeEvent();\n\n    EventHandler.off(document, EVENT_FOCUSIN$2);\n\n    this._element.classList.remove(CLASS_NAME_SHOW$5);\n\n    EventHandler.off(this._element, EVENT_CLICK_DISMISS$2);\n    EventHandler.off(this._dialog, EVENT_MOUSEDOWN_DISMISS);\n\n    this._queueCallback(() => this._hideModal(), this._element, isAnimated);\n  }\n\n  dispose() {\n    [window, this._dialog].forEach(htmlElement => EventHandler.off(htmlElement, EVENT_KEY$6));\n\n    this._backdrop.dispose();\n\n    super.dispose();\n    /**\n     * `document` has 2 events `EVENT_FOCUSIN` and `EVENT_CLICK_DATA_API`\n     * Do not move `document` in `htmlElements` array\n     * It will remove `EVENT_CLICK_DATA_API` event that should remain\n     */\n\n    EventHandler.off(document, EVENT_FOCUSIN$2);\n  }\n\n  handleUpdate() {\n    this._adjustDialog();\n  } // Private\n\n\n  _initializeBackDrop() {\n    return new Backdrop({\n      isVisible: Boolean(this._config.backdrop),\n      // 'static' option will be translated to true, and booleans will keep their value\n      isAnimated: this._isAnimated()\n    });\n  }\n\n  _getConfig(config) {\n    config = { ...Default$5,\n      ...Manipulator.getDataAttributes(this._element),\n      ...(typeof config === 'object' ? config : {})\n    };\n    typeCheckConfig(NAME$6, config, DefaultType$5);\n    return config;\n  }\n\n  _showElement(relatedTarget) {\n    const isAnimated = this._isAnimated();\n\n    const modalBody = SelectorEngine.findOne(SELECTOR_MODAL_BODY, this._dialog);\n\n    if (!this._element.parentNode || this._element.parentNode.nodeType !== Node.ELEMENT_NODE) {\n      // Don't move modal's DOM position\n      document.body.appendChild(this._element);\n    }\n\n    this._element.style.display = 'block';\n\n    this._element.removeAttribute('aria-hidden');\n\n    this._element.setAttribute('aria-modal', true);\n\n    this._element.setAttribute('role', 'dialog');\n\n    this._element.scrollTop = 0;\n\n    if (modalBody) {\n      modalBody.scrollTop = 0;\n    }\n\n    if (isAnimated) {\n      reflow(this._element);\n    }\n\n    this._element.classList.add(CLASS_NAME_SHOW$5);\n\n    if (this._config.focus) {\n      this._enforceFocus();\n    }\n\n    const transitionComplete = () => {\n      if (this._config.focus) {\n        this._element.focus();\n      }\n\n      this._isTransitioning = false;\n      EventHandler.trigger(this._element, EVENT_SHOWN$3, {\n        relatedTarget\n      });\n    };\n\n    this._queueCallback(transitionComplete, this._dialog, isAnimated);\n  }\n\n  _enforceFocus() {\n    EventHandler.off(document, EVENT_FOCUSIN$2); // guard against infinite focus loop\n\n    EventHandler.on(document, EVENT_FOCUSIN$2, event => {\n      if (document !== event.target && this._element !== event.target && !this._element.contains(event.target)) {\n        this._element.focus();\n      }\n    });\n  }\n\n  _setEscapeEvent() {\n    if (this._isShown) {\n      EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS$1, event => {\n        if (this._config.keyboard && event.key === ESCAPE_KEY$1) {\n          event.preventDefault();\n          this.hide();\n        } else if (!this._config.keyboard && event.key === ESCAPE_KEY$1) {\n          this._triggerBackdropTransition();\n        }\n      });\n    } else {\n      EventHandler.off(this._element, EVENT_KEYDOWN_DISMISS$1);\n    }\n  }\n\n  _setResizeEvent() {\n    if (this._isShown) {\n      EventHandler.on(window, EVENT_RESIZE, () => this._adjustDialog());\n    } else {\n      EventHandler.off(window, EVENT_RESIZE);\n    }\n  }\n\n  _hideModal() {\n    this._element.style.display = 'none';\n\n    this._element.setAttribute('aria-hidden', true);\n\n    this._element.removeAttribute('aria-modal');\n\n    this._element.removeAttribute('role');\n\n    this._isTransitioning = false;\n\n    this._backdrop.hide(() => {\n      document.body.classList.remove(CLASS_NAME_OPEN);\n\n      this._resetAdjustments();\n\n      this._scrollBar.reset();\n\n      EventHandler.trigger(this._element, EVENT_HIDDEN$3);\n    });\n  }\n\n  _showBackdrop(callback) {\n    EventHandler.on(this._element, EVENT_CLICK_DISMISS$2, event => {\n      if (this._ignoreBackdropClick) {\n        this._ignoreBackdropClick = false;\n        return;\n      }\n\n      if (event.target !== event.currentTarget) {\n        return;\n      }\n\n      if (this._config.backdrop === true) {\n        this.hide();\n      } else if (this._config.backdrop === 'static') {\n        this._triggerBackdropTransition();\n      }\n    });\n\n    this._backdrop.show(callback);\n  }\n\n  _isAnimated() {\n    return this._element.classList.contains(CLASS_NAME_FADE$4);\n  }\n\n  _triggerBackdropTransition() {\n    const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED);\n\n    if (hideEvent.defaultPrevented) {\n      return;\n    }\n\n    const {\n      classList,\n      scrollHeight,\n      style\n    } = this._element;\n    const isModalOverflowing = scrollHeight > document.documentElement.clientHeight; // return if the following background transition hasn't yet completed\n\n    if (!isModalOverflowing && style.overflowY === 'hidden' || classList.contains(CLASS_NAME_STATIC)) {\n      return;\n    }\n\n    if (!isModalOverflowing) {\n      style.overflowY = 'hidden';\n    }\n\n    classList.add(CLASS_NAME_STATIC);\n\n    this._queueCallback(() => {\n      classList.remove(CLASS_NAME_STATIC);\n\n      if (!isModalOverflowing) {\n        this._queueCallback(() => {\n          style.overflowY = '';\n        }, this._dialog);\n      }\n    }, this._dialog);\n\n    this._element.focus();\n  } // ----------------------------------------------------------------------\n  // the following methods are used to handle overflowing modals\n  // ----------------------------------------------------------------------\n\n\n  _adjustDialog() {\n    const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;\n\n    const scrollbarWidth = this._scrollBar.getWidth();\n\n    const isBodyOverflowing = scrollbarWidth > 0;\n\n    if (!isBodyOverflowing && isModalOverflowing && !isRTL() || isBodyOverflowing && !isModalOverflowing && isRTL()) {\n      this._element.style.paddingLeft = `${scrollbarWidth}px`;\n    }\n\n    if (isBodyOverflowing && !isModalOverflowing && !isRTL() || !isBodyOverflowing && isModalOverflowing && isRTL()) {\n      this._element.style.paddingRight = `${scrollbarWidth}px`;\n    }\n  }\n\n  _resetAdjustments() {\n    this._element.style.paddingLeft = '';\n    this._element.style.paddingRight = '';\n  } // Static\n\n\n  static jQueryInterface(config, relatedTarget) {\n    return this.each(function () {\n      const data = Modal.getOrCreateInstance(this, config);\n\n      if (typeof config !== 'string') {\n        return;\n      }\n\n      if (typeof data[config] === 'undefined') {\n        throw new TypeError(`No method named \"${config}\"`);\n      }\n\n      data[config](relatedTarget);\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$2, SELECTOR_DATA_TOGGLE$2, function (event) {\n  const target = getElementFromSelector(this);\n\n  if (['A', 'AREA'].includes(this.tagName)) {\n    event.preventDefault();\n  }\n\n  EventHandler.one(target, EVENT_SHOW$3, showEvent => {\n    if (showEvent.defaultPrevented) {\n      // only register focus restorer if modal will actually get shown\n      return;\n    }\n\n    EventHandler.one(target, EVENT_HIDDEN$3, () => {\n      if (isVisible(this)) {\n        this.focus();\n      }\n    });\n  });\n  const data = Modal.getOrCreateInstance(target);\n  data.toggle(this);\n});\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Modal to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Modal);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): offcanvas.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$5 = 'offcanvas';\nconst DATA_KEY$5 = 'bs.offcanvas';\nconst EVENT_KEY$5 = `.${DATA_KEY$5}`;\nconst DATA_API_KEY$2 = '.data-api';\nconst EVENT_LOAD_DATA_API$1 = `load${EVENT_KEY$5}${DATA_API_KEY$2}`;\nconst ESCAPE_KEY = 'Escape';\nconst Default$4 = {\n  backdrop: true,\n  keyboard: true,\n  scroll: false\n};\nconst DefaultType$4 = {\n  backdrop: 'boolean',\n  keyboard: 'boolean',\n  scroll: 'boolean'\n};\nconst CLASS_NAME_SHOW$4 = 'show';\nconst OPEN_SELECTOR = '.offcanvas.show';\nconst EVENT_SHOW$2 = `show${EVENT_KEY$5}`;\nconst EVENT_SHOWN$2 = `shown${EVENT_KEY$5}`;\nconst EVENT_HIDE$2 = `hide${EVENT_KEY$5}`;\nconst EVENT_HIDDEN$2 = `hidden${EVENT_KEY$5}`;\nconst EVENT_FOCUSIN$1 = `focusin${EVENT_KEY$5}`;\nconst EVENT_CLICK_DATA_API$1 = `click${EVENT_KEY$5}${DATA_API_KEY$2}`;\nconst EVENT_CLICK_DISMISS$1 = `click.dismiss${EVENT_KEY$5}`;\nconst EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY$5}`;\nconst SELECTOR_DATA_DISMISS$1 = '[data-bs-dismiss=\"offcanvas\"]';\nconst SELECTOR_DATA_TOGGLE$1 = '[data-bs-toggle=\"offcanvas\"]';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Offcanvas extends BaseComponent {\n  constructor(element, config) {\n    super(element);\n    this._config = this._getConfig(config);\n    this._isShown = false;\n    this._backdrop = this._initializeBackDrop();\n\n    this._addEventListeners();\n  } // Getters\n\n\n  static get NAME() {\n    return NAME$5;\n  }\n\n  static get Default() {\n    return Default$4;\n  } // Public\n\n\n  toggle(relatedTarget) {\n    return this._isShown ? this.hide() : this.show(relatedTarget);\n  }\n\n  show(relatedTarget) {\n    if (this._isShown) {\n      return;\n    }\n\n    const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$2, {\n      relatedTarget\n    });\n\n    if (showEvent.defaultPrevented) {\n      return;\n    }\n\n    this._isShown = true;\n    this._element.style.visibility = 'visible';\n\n    this._backdrop.show();\n\n    if (!this._config.scroll) {\n      new ScrollBarHelper().hide();\n\n      this._enforceFocusOnElement(this._element);\n    }\n\n    this._element.removeAttribute('aria-hidden');\n\n    this._element.setAttribute('aria-modal', true);\n\n    this._element.setAttribute('role', 'dialog');\n\n    this._element.classList.add(CLASS_NAME_SHOW$4);\n\n    const completeCallBack = () => {\n      EventHandler.trigger(this._element, EVENT_SHOWN$2, {\n        relatedTarget\n      });\n    };\n\n    this._queueCallback(completeCallBack, this._element, true);\n  }\n\n  hide() {\n    if (!this._isShown) {\n      return;\n    }\n\n    const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$2);\n\n    if (hideEvent.defaultPrevented) {\n      return;\n    }\n\n    EventHandler.off(document, EVENT_FOCUSIN$1);\n\n    this._element.blur();\n\n    this._isShown = false;\n\n    this._element.classList.remove(CLASS_NAME_SHOW$4);\n\n    this._backdrop.hide();\n\n    const completeCallback = () => {\n      this._element.setAttribute('aria-hidden', true);\n\n      this._element.removeAttribute('aria-modal');\n\n      this._element.removeAttribute('role');\n\n      this._element.style.visibility = 'hidden';\n\n      if (!this._config.scroll) {\n        new ScrollBarHelper().reset();\n      }\n\n      EventHandler.trigger(this._element, EVENT_HIDDEN$2);\n    };\n\n    this._queueCallback(completeCallback, this._element, true);\n  }\n\n  dispose() {\n    this._backdrop.dispose();\n\n    super.dispose();\n    EventHandler.off(document, EVENT_FOCUSIN$1);\n  } // Private\n\n\n  _getConfig(config) {\n    config = { ...Default$4,\n      ...Manipulator.getDataAttributes(this._element),\n      ...(typeof config === 'object' ? config : {})\n    };\n    typeCheckConfig(NAME$5, config, DefaultType$4);\n    return config;\n  }\n\n  _initializeBackDrop() {\n    return new Backdrop({\n      isVisible: this._config.backdrop,\n      isAnimated: true,\n      rootElement: this._element.parentNode,\n      clickCallback: () => this.hide()\n    });\n  }\n\n  _enforceFocusOnElement(element) {\n    EventHandler.off(document, EVENT_FOCUSIN$1); // guard against infinite focus loop\n\n    EventHandler.on(document, EVENT_FOCUSIN$1, event => {\n      if (document !== event.target && element !== event.target && !element.contains(event.target)) {\n        element.focus();\n      }\n    });\n    element.focus();\n  }\n\n  _addEventListeners() {\n    EventHandler.on(this._element, EVENT_CLICK_DISMISS$1, SELECTOR_DATA_DISMISS$1, () => this.hide());\n    EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS, event => {\n      if (this._config.keyboard && event.key === ESCAPE_KEY) {\n        this.hide();\n      }\n    });\n  } // Static\n\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Offcanvas.getOrCreateInstance(this, config);\n\n      if (typeof config !== 'string') {\n        return;\n      }\n\n      if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n        throw new TypeError(`No method named \"${config}\"`);\n      }\n\n      data[config](this);\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$1, SELECTOR_DATA_TOGGLE$1, function (event) {\n  const target = getElementFromSelector(this);\n\n  if (['A', 'AREA'].includes(this.tagName)) {\n    event.preventDefault();\n  }\n\n  if (isDisabled(this)) {\n    return;\n  }\n\n  EventHandler.one(target, EVENT_HIDDEN$2, () => {\n    // focus on trigger when it is closed\n    if (isVisible(this)) {\n      this.focus();\n    }\n  }); // avoid conflict when clicking a toggler of an offcanvas, while another is open\n\n  const allReadyOpen = SelectorEngine.findOne(OPEN_SELECTOR);\n\n  if (allReadyOpen && allReadyOpen !== target) {\n    Offcanvas.getInstance(allReadyOpen).hide();\n  }\n\n  const data = Offcanvas.getOrCreateInstance(target);\n  data.toggle(this);\n});\nEventHandler.on(window, EVENT_LOAD_DATA_API$1, () => SelectorEngine.find(OPEN_SELECTOR).forEach(el => Offcanvas.getOrCreateInstance(el).show()));\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\ndefineJQueryPlugin(Offcanvas);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): util/sanitizer.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\nconst uriAttrs = new Set(['background', 'cite', 'href', 'itemtype', 'longdesc', 'poster', 'src', 'xlink:href']);\nconst ARIA_ATTRIBUTE_PATTERN = /^aria-[\\w-]*$/i;\n/**\n * A pattern that recognizes a commonly useful subset of URLs that are safe.\n *\n * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts\n */\n\nconst SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file):|[^#&/:?]*(?:[#/?]|$))/i;\n/**\n * A pattern that matches safe data URLs. Only matches image, video and audio types.\n *\n * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts\n */\n\nconst DATA_URL_PATTERN = /^data:(?:image\\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\\/(?:mpeg|mp4|ogg|webm)|audio\\/(?:mp3|oga|ogg|opus));base64,[\\d+/a-z]+=*$/i;\n\nconst allowedAttribute = (attr, allowedAttributeList) => {\n  const attrName = attr.nodeName.toLowerCase();\n\n  if (allowedAttributeList.includes(attrName)) {\n    if (uriAttrs.has(attrName)) {\n      return Boolean(SAFE_URL_PATTERN.test(attr.nodeValue) || DATA_URL_PATTERN.test(attr.nodeValue));\n    }\n\n    return true;\n  }\n\n  const regExp = allowedAttributeList.filter(attrRegex => attrRegex instanceof RegExp); // Check if a regular expression validates the attribute.\n\n  for (let i = 0, len = regExp.length; i < len; i++) {\n    if (regExp[i].test(attrName)) {\n      return true;\n    }\n  }\n\n  return false;\n};\n\nconst DefaultAllowlist = {\n  // Global attributes allowed on any supplied element below.\n  '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],\n  a: ['target', 'href', 'title', 'rel'],\n  area: [],\n  b: [],\n  br: [],\n  col: [],\n  code: [],\n  div: [],\n  em: [],\n  hr: [],\n  h1: [],\n  h2: [],\n  h3: [],\n  h4: [],\n  h5: [],\n  h6: [],\n  i: [],\n  img: ['src', 'srcset', 'alt', 'title', 'width', 'height'],\n  li: [],\n  ol: [],\n  p: [],\n  pre: [],\n  s: [],\n  small: [],\n  span: [],\n  sub: [],\n  sup: [],\n  strong: [],\n  u: [],\n  ul: []\n};\nfunction sanitizeHtml(unsafeHtml, allowList, sanitizeFn) {\n  if (!unsafeHtml.length) {\n    return unsafeHtml;\n  }\n\n  if (sanitizeFn && typeof sanitizeFn === 'function') {\n    return sanitizeFn(unsafeHtml);\n  }\n\n  const domParser = new window.DOMParser();\n  const createdDocument = domParser.parseFromString(unsafeHtml, 'text/html');\n  const allowlistKeys = Object.keys(allowList);\n  const elements = [].concat(...createdDocument.body.querySelectorAll('*'));\n\n  for (let i = 0, len = elements.length; i < len; i++) {\n    const el = elements[i];\n    const elName = el.nodeName.toLowerCase();\n\n    if (!allowlistKeys.includes(elName)) {\n      el.remove();\n      continue;\n    }\n\n    const attributeList = [].concat(...el.attributes);\n    const allowedAttributes = [].concat(allowList['*'] || [], allowList[elName] || []);\n    attributeList.forEach(attr => {\n      if (!allowedAttribute(attr, allowedAttributes)) {\n        el.removeAttribute(attr.nodeName);\n      }\n    });\n  }\n\n  return createdDocument.body.innerHTML;\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): tooltip.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$4 = 'tooltip';\nconst DATA_KEY$4 = 'bs.tooltip';\nconst EVENT_KEY$4 = `.${DATA_KEY$4}`;\nconst CLASS_PREFIX$1 = 'bs-tooltip';\nconst BSCLS_PREFIX_REGEX$1 = new RegExp(`(^|\\\\s)${CLASS_PREFIX$1}\\\\S+`, 'g');\nconst DISALLOWED_ATTRIBUTES = new Set(['sanitize', 'allowList', 'sanitizeFn']);\nconst DefaultType$3 = {\n  animation: 'boolean',\n  template: 'string',\n  title: '(string|element|function)',\n  trigger: 'string',\n  delay: '(number|object)',\n  html: 'boolean',\n  selector: '(string|boolean)',\n  placement: '(string|function)',\n  offset: '(array|string|function)',\n  container: '(string|element|boolean)',\n  fallbackPlacements: 'array',\n  boundary: '(string|element)',\n  customClass: '(string|function)',\n  sanitize: 'boolean',\n  sanitizeFn: '(null|function)',\n  allowList: 'object',\n  popperConfig: '(null|object|function)'\n};\nconst AttachmentMap = {\n  AUTO: 'auto',\n  TOP: 'top',\n  RIGHT: isRTL() ? 'left' : 'right',\n  BOTTOM: 'bottom',\n  LEFT: isRTL() ? 'right' : 'left'\n};\nconst Default$3 = {\n  animation: true,\n  template: '<div class=\"tooltip\" role=\"tooltip\">' + '<div class=\"tooltip-arrow\"></div>' + '<div class=\"tooltip-inner\"></div>' + '</div>',\n  trigger: 'hover focus',\n  title: '',\n  delay: 0,\n  html: false,\n  selector: false,\n  placement: 'top',\n  offset: [0, 0],\n  container: false,\n  fallbackPlacements: ['top', 'right', 'bottom', 'left'],\n  boundary: 'clippingParents',\n  customClass: '',\n  sanitize: true,\n  sanitizeFn: null,\n  allowList: DefaultAllowlist,\n  popperConfig: null\n};\nconst Event$2 = {\n  HIDE: `hide${EVENT_KEY$4}`,\n  HIDDEN: `hidden${EVENT_KEY$4}`,\n  SHOW: `show${EVENT_KEY$4}`,\n  SHOWN: `shown${EVENT_KEY$4}`,\n  INSERTED: `inserted${EVENT_KEY$4}`,\n  CLICK: `click${EVENT_KEY$4}`,\n  FOCUSIN: `focusin${EVENT_KEY$4}`,\n  FOCUSOUT: `focusout${EVENT_KEY$4}`,\n  MOUSEENTER: `mouseenter${EVENT_KEY$4}`,\n  MOUSELEAVE: `mouseleave${EVENT_KEY$4}`\n};\nconst CLASS_NAME_FADE$3 = 'fade';\nconst CLASS_NAME_MODAL = 'modal';\nconst CLASS_NAME_SHOW$3 = 'show';\nconst HOVER_STATE_SHOW = 'show';\nconst HOVER_STATE_OUT = 'out';\nconst SELECTOR_TOOLTIP_INNER = '.tooltip-inner';\nconst TRIGGER_HOVER = 'hover';\nconst TRIGGER_FOCUS = 'focus';\nconst TRIGGER_CLICK = 'click';\nconst TRIGGER_MANUAL = 'manual';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Tooltip extends BaseComponent {\n  constructor(element, config) {\n    if (typeof Popper === 'undefined') {\n      throw new TypeError('Bootstrap\\'s tooltips require Popper (https://popper.js.org)');\n    }\n\n    super(element); // private\n\n    this._isEnabled = true;\n    this._timeout = 0;\n    this._hoverState = '';\n    this._activeTrigger = {};\n    this._popper = null; // Protected\n\n    this._config = this._getConfig(config);\n    this.tip = null;\n\n    this._setListeners();\n  } // Getters\n\n\n  static get Default() {\n    return Default$3;\n  }\n\n  static get NAME() {\n    return NAME$4;\n  }\n\n  static get Event() {\n    return Event$2;\n  }\n\n  static get DefaultType() {\n    return DefaultType$3;\n  } // Public\n\n\n  enable() {\n    this._isEnabled = true;\n  }\n\n  disable() {\n    this._isEnabled = false;\n  }\n\n  toggleEnabled() {\n    this._isEnabled = !this._isEnabled;\n  }\n\n  toggle(event) {\n    if (!this._isEnabled) {\n      return;\n    }\n\n    if (event) {\n      const context = this._initializeOnDelegatedTarget(event);\n\n      context._activeTrigger.click = !context._activeTrigger.click;\n\n      if (context._isWithActiveTrigger()) {\n        context._enter(null, context);\n      } else {\n        context._leave(null, context);\n      }\n    } else {\n      if (this.getTipElement().classList.contains(CLASS_NAME_SHOW$3)) {\n        this._leave(null, this);\n\n        return;\n      }\n\n      this._enter(null, this);\n    }\n  }\n\n  dispose() {\n    clearTimeout(this._timeout);\n    EventHandler.off(this._element.closest(`.${CLASS_NAME_MODAL}`), 'hide.bs.modal', this._hideModalHandler);\n\n    if (this.tip) {\n      this.tip.remove();\n    }\n\n    if (this._popper) {\n      this._popper.destroy();\n    }\n\n    super.dispose();\n  }\n\n  show() {\n    if (this._element.style.display === 'none') {\n      throw new Error('Please use show on visible elements');\n    }\n\n    if (!(this.isWithContent() && this._isEnabled)) {\n      return;\n    }\n\n    const showEvent = EventHandler.trigger(this._element, this.constructor.Event.SHOW);\n    const shadowRoot = findShadowRoot(this._element);\n    const isInTheDom = shadowRoot === null ? this._element.ownerDocument.documentElement.contains(this._element) : shadowRoot.contains(this._element);\n\n    if (showEvent.defaultPrevented || !isInTheDom) {\n      return;\n    }\n\n    const tip = this.getTipElement();\n    const tipId = getUID(this.constructor.NAME);\n    tip.setAttribute('id', tipId);\n\n    this._element.setAttribute('aria-describedby', tipId);\n\n    this.setContent();\n\n    if (this._config.animation) {\n      tip.classList.add(CLASS_NAME_FADE$3);\n    }\n\n    const placement = typeof this._config.placement === 'function' ? this._config.placement.call(this, tip, this._element) : this._config.placement;\n\n    const attachment = this._getAttachment(placement);\n\n    this._addAttachmentClass(attachment);\n\n    const {\n      container\n    } = this._config;\n    Data.set(tip, this.constructor.DATA_KEY, this);\n\n    if (!this._element.ownerDocument.documentElement.contains(this.tip)) {\n      container.appendChild(tip);\n      EventHandler.trigger(this._element, this.constructor.Event.INSERTED);\n    }\n\n    if (this._popper) {\n      this._popper.update();\n    } else {\n      this._popper = Popper.createPopper(this._element, tip, this._getPopperConfig(attachment));\n    }\n\n    tip.classList.add(CLASS_NAME_SHOW$3);\n    const customClass = typeof this._config.customClass === 'function' ? this._config.customClass() : this._config.customClass;\n\n    if (customClass) {\n      tip.classList.add(...customClass.split(' '));\n    } // If this is a touch-enabled device we add extra\n    // empty mouseover listeners to the body's immediate children;\n    // only needed because of broken event delegation on iOS\n    // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n\n\n    if ('ontouchstart' in document.documentElement) {\n      [].concat(...document.body.children).forEach(element => {\n        EventHandler.on(element, 'mouseover', noop);\n      });\n    }\n\n    const complete = () => {\n      const prevHoverState = this._hoverState;\n      this._hoverState = null;\n      EventHandler.trigger(this._element, this.constructor.Event.SHOWN);\n\n      if (prevHoverState === HOVER_STATE_OUT) {\n        this._leave(null, this);\n      }\n    };\n\n    const isAnimated = this.tip.classList.contains(CLASS_NAME_FADE$3);\n\n    this._queueCallback(complete, this.tip, isAnimated);\n  }\n\n  hide() {\n    if (!this._popper) {\n      return;\n    }\n\n    const tip = this.getTipElement();\n\n    const complete = () => {\n      if (this._isWithActiveTrigger()) {\n        return;\n      }\n\n      if (this._hoverState !== HOVER_STATE_SHOW) {\n        tip.remove();\n      }\n\n      this._cleanTipClass();\n\n      this._element.removeAttribute('aria-describedby');\n\n      EventHandler.trigger(this._element, this.constructor.Event.HIDDEN);\n\n      if (this._popper) {\n        this._popper.destroy();\n\n        this._popper = null;\n      }\n    };\n\n    const hideEvent = EventHandler.trigger(this._element, this.constructor.Event.HIDE);\n\n    if (hideEvent.defaultPrevented) {\n      return;\n    }\n\n    tip.classList.remove(CLASS_NAME_SHOW$3); // If this is a touch-enabled device we remove the extra\n    // empty mouseover listeners we added for iOS support\n\n    if ('ontouchstart' in document.documentElement) {\n      [].concat(...document.body.children).forEach(element => EventHandler.off(element, 'mouseover', noop));\n    }\n\n    this._activeTrigger[TRIGGER_CLICK] = false;\n    this._activeTrigger[TRIGGER_FOCUS] = false;\n    this._activeTrigger[TRIGGER_HOVER] = false;\n    const isAnimated = this.tip.classList.contains(CLASS_NAME_FADE$3);\n\n    this._queueCallback(complete, this.tip, isAnimated);\n\n    this._hoverState = '';\n  }\n\n  update() {\n    if (this._popper !== null) {\n      this._popper.update();\n    }\n  } // Protected\n\n\n  isWithContent() {\n    return Boolean(this.getTitle());\n  }\n\n  getTipElement() {\n    if (this.tip) {\n      return this.tip;\n    }\n\n    const element = document.createElement('div');\n    element.innerHTML = this._config.template;\n    this.tip = element.children[0];\n    return this.tip;\n  }\n\n  setContent() {\n    const tip = this.getTipElement();\n    this.setElementContent(SelectorEngine.findOne(SELECTOR_TOOLTIP_INNER, tip), this.getTitle());\n    tip.classList.remove(CLASS_NAME_FADE$3, CLASS_NAME_SHOW$3);\n  }\n\n  setElementContent(element, content) {\n    if (element === null) {\n      return;\n    }\n\n    if (isElement(content)) {\n      content = getElement(content); // content is a DOM node or a jQuery\n\n      if (this._config.html) {\n        if (content.parentNode !== element) {\n          element.innerHTML = '';\n          element.appendChild(content);\n        }\n      } else {\n        element.textContent = content.textContent;\n      }\n\n      return;\n    }\n\n    if (this._config.html) {\n      if (this._config.sanitize) {\n        content = sanitizeHtml(content, this._config.allowList, this._config.sanitizeFn);\n      }\n\n      element.innerHTML = content;\n    } else {\n      element.textContent = content;\n    }\n  }\n\n  getTitle() {\n    let title = this._element.getAttribute('data-bs-original-title');\n\n    if (!title) {\n      title = typeof this._config.title === 'function' ? this._config.title.call(this._element) : this._config.title;\n    }\n\n    return title;\n  }\n\n  updateAttachment(attachment) {\n    if (attachment === 'right') {\n      return 'end';\n    }\n\n    if (attachment === 'left') {\n      return 'start';\n    }\n\n    return attachment;\n  } // Private\n\n\n  _initializeOnDelegatedTarget(event, context) {\n    const dataKey = this.constructor.DATA_KEY;\n    context = context || Data.get(event.delegateTarget, dataKey);\n\n    if (!context) {\n      context = new this.constructor(event.delegateTarget, this._getDelegateConfig());\n      Data.set(event.delegateTarget, dataKey, context);\n    }\n\n    return context;\n  }\n\n  _getOffset() {\n    const {\n      offset\n    } = this._config;\n\n    if (typeof offset === 'string') {\n      return offset.split(',').map(val => Number.parseInt(val, 10));\n    }\n\n    if (typeof offset === 'function') {\n      return popperData => offset(popperData, this._element);\n    }\n\n    return offset;\n  }\n\n  _getPopperConfig(attachment) {\n    const defaultBsPopperConfig = {\n      placement: attachment,\n      modifiers: [{\n        name: 'flip',\n        options: {\n          fallbackPlacements: this._config.fallbackPlacements\n        }\n      }, {\n        name: 'offset',\n        options: {\n          offset: this._getOffset()\n        }\n      }, {\n        name: 'preventOverflow',\n        options: {\n          boundary: this._config.boundary\n        }\n      }, {\n        name: 'arrow',\n        options: {\n          element: `.${this.constructor.NAME}-arrow`\n        }\n      }, {\n        name: 'onChange',\n        enabled: true,\n        phase: 'afterWrite',\n        fn: data => this._handlePopperPlacementChange(data)\n      }],\n      onFirstUpdate: data => {\n        if (data.options.placement !== data.placement) {\n          this._handlePopperPlacementChange(data);\n        }\n      }\n    };\n    return { ...defaultBsPopperConfig,\n      ...(typeof this._config.popperConfig === 'function' ? this._config.popperConfig(defaultBsPopperConfig) : this._config.popperConfig)\n    };\n  }\n\n  _addAttachmentClass(attachment) {\n    this.getTipElement().classList.add(`${CLASS_PREFIX$1}-${this.updateAttachment(attachment)}`);\n  }\n\n  _getAttachment(placement) {\n    return AttachmentMap[placement.toUpperCase()];\n  }\n\n  _setListeners() {\n    const triggers = this._config.trigger.split(' ');\n\n    triggers.forEach(trigger => {\n      if (trigger === 'click') {\n        EventHandler.on(this._element, this.constructor.Event.CLICK, this._config.selector, event => this.toggle(event));\n      } else if (trigger !== TRIGGER_MANUAL) {\n        const eventIn = trigger === TRIGGER_HOVER ? this.constructor.Event.MOUSEENTER : this.constructor.Event.FOCUSIN;\n        const eventOut = trigger === TRIGGER_HOVER ? this.constructor.Event.MOUSELEAVE : this.constructor.Event.FOCUSOUT;\n        EventHandler.on(this._element, eventIn, this._config.selector, event => this._enter(event));\n        EventHandler.on(this._element, eventOut, this._config.selector, event => this._leave(event));\n      }\n    });\n\n    this._hideModalHandler = () => {\n      if (this._element) {\n        this.hide();\n      }\n    };\n\n    EventHandler.on(this._element.closest(`.${CLASS_NAME_MODAL}`), 'hide.bs.modal', this._hideModalHandler);\n\n    if (this._config.selector) {\n      this._config = { ...this._config,\n        trigger: 'manual',\n        selector: ''\n      };\n    } else {\n      this._fixTitle();\n    }\n  }\n\n  _fixTitle() {\n    const title = this._element.getAttribute('title');\n\n    const originalTitleType = typeof this._element.getAttribute('data-bs-original-title');\n\n    if (title || originalTitleType !== 'string') {\n      this._element.setAttribute('data-bs-original-title', title || '');\n\n      if (title && !this._element.getAttribute('aria-label') && !this._element.textContent) {\n        this._element.setAttribute('aria-label', title);\n      }\n\n      this._element.setAttribute('title', '');\n    }\n  }\n\n  _enter(event, context) {\n    context = this._initializeOnDelegatedTarget(event, context);\n\n    if (event) {\n      context._activeTrigger[event.type === 'focusin' ? TRIGGER_FOCUS : TRIGGER_HOVER] = true;\n    }\n\n    if (context.getTipElement().classList.contains(CLASS_NAME_SHOW$3) || context._hoverState === HOVER_STATE_SHOW) {\n      context._hoverState = HOVER_STATE_SHOW;\n      return;\n    }\n\n    clearTimeout(context._timeout);\n    context._hoverState = HOVER_STATE_SHOW;\n\n    if (!context._config.delay || !context._config.delay.show) {\n      context.show();\n      return;\n    }\n\n    context._timeout = setTimeout(() => {\n      if (context._hoverState === HOVER_STATE_SHOW) {\n        context.show();\n      }\n    }, context._config.delay.show);\n  }\n\n  _leave(event, context) {\n    context = this._initializeOnDelegatedTarget(event, context);\n\n    if (event) {\n      context._activeTrigger[event.type === 'focusout' ? TRIGGER_FOCUS : TRIGGER_HOVER] = context._element.contains(event.relatedTarget);\n    }\n\n    if (context._isWithActiveTrigger()) {\n      return;\n    }\n\n    clearTimeout(context._timeout);\n    context._hoverState = HOVER_STATE_OUT;\n\n    if (!context._config.delay || !context._config.delay.hide) {\n      context.hide();\n      return;\n    }\n\n    context._timeout = setTimeout(() => {\n      if (context._hoverState === HOVER_STATE_OUT) {\n        context.hide();\n      }\n    }, context._config.delay.hide);\n  }\n\n  _isWithActiveTrigger() {\n    for (const trigger in this._activeTrigger) {\n      if (this._activeTrigger[trigger]) {\n        return true;\n      }\n    }\n\n    return false;\n  }\n\n  _getConfig(config) {\n    const dataAttributes = Manipulator.getDataAttributes(this._element);\n    Object.keys(dataAttributes).forEach(dataAttr => {\n      if (DISALLOWED_ATTRIBUTES.has(dataAttr)) {\n        delete dataAttributes[dataAttr];\n      }\n    });\n    config = { ...this.constructor.Default,\n      ...dataAttributes,\n      ...(typeof config === 'object' && config ? config : {})\n    };\n    config.container = config.container === false ? document.body : getElement(config.container);\n\n    if (typeof config.delay === 'number') {\n      config.delay = {\n        show: config.delay,\n        hide: config.delay\n      };\n    }\n\n    if (typeof config.title === 'number') {\n      config.title = config.title.toString();\n    }\n\n    if (typeof config.content === 'number') {\n      config.content = config.content.toString();\n    }\n\n    typeCheckConfig(NAME$4, config, this.constructor.DefaultType);\n\n    if (config.sanitize) {\n      config.template = sanitizeHtml(config.template, config.allowList, config.sanitizeFn);\n    }\n\n    return config;\n  }\n\n  _getDelegateConfig() {\n    const config = {};\n\n    if (this._config) {\n      for (const key in this._config) {\n        if (this.constructor.Default[key] !== this._config[key]) {\n          config[key] = this._config[key];\n        }\n      }\n    }\n\n    return config;\n  }\n\n  _cleanTipClass() {\n    const tip = this.getTipElement();\n    const tabClass = tip.getAttribute('class').match(BSCLS_PREFIX_REGEX$1);\n\n    if (tabClass !== null && tabClass.length > 0) {\n      tabClass.map(token => token.trim()).forEach(tClass => tip.classList.remove(tClass));\n    }\n  }\n\n  _handlePopperPlacementChange(popperData) {\n    const {\n      state\n    } = popperData;\n\n    if (!state) {\n      return;\n    }\n\n    this.tip = state.elements.popper;\n\n    this._cleanTipClass();\n\n    this._addAttachmentClass(this._getAttachment(state.placement));\n  } // Static\n\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Tooltip.getOrCreateInstance(this, config);\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config]();\n      }\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Tooltip to jQuery only if jQuery is present\n */\n\n\ndefineJQueryPlugin(Tooltip);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): popover.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$3 = 'popover';\nconst DATA_KEY$3 = 'bs.popover';\nconst EVENT_KEY$3 = `.${DATA_KEY$3}`;\nconst CLASS_PREFIX = 'bs-popover';\nconst BSCLS_PREFIX_REGEX = new RegExp(`(^|\\\\s)${CLASS_PREFIX}\\\\S+`, 'g');\nconst Default$2 = { ...Tooltip.Default,\n  placement: 'right',\n  offset: [0, 8],\n  trigger: 'click',\n  content: '',\n  template: '<div class=\"popover\" role=\"tooltip\">' + '<div class=\"popover-arrow\"></div>' + '<h3 class=\"popover-header\"></h3>' + '<div class=\"popover-body\"></div>' + '</div>'\n};\nconst DefaultType$2 = { ...Tooltip.DefaultType,\n  content: '(string|element|function)'\n};\nconst Event$1 = {\n  HIDE: `hide${EVENT_KEY$3}`,\n  HIDDEN: `hidden${EVENT_KEY$3}`,\n  SHOW: `show${EVENT_KEY$3}`,\n  SHOWN: `shown${EVENT_KEY$3}`,\n  INSERTED: `inserted${EVENT_KEY$3}`,\n  CLICK: `click${EVENT_KEY$3}`,\n  FOCUSIN: `focusin${EVENT_KEY$3}`,\n  FOCUSOUT: `focusout${EVENT_KEY$3}`,\n  MOUSEENTER: `mouseenter${EVENT_KEY$3}`,\n  MOUSELEAVE: `mouseleave${EVENT_KEY$3}`\n};\nconst CLASS_NAME_FADE$2 = 'fade';\nconst CLASS_NAME_SHOW$2 = 'show';\nconst SELECTOR_TITLE = '.popover-header';\nconst SELECTOR_CONTENT = '.popover-body';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Popover extends Tooltip {\n  // Getters\n  static get Default() {\n    return Default$2;\n  }\n\n  static get NAME() {\n    return NAME$3;\n  }\n\n  static get Event() {\n    return Event$1;\n  }\n\n  static get DefaultType() {\n    return DefaultType$2;\n  } // Overrides\n\n\n  isWithContent() {\n    return this.getTitle() || this._getContent();\n  }\n\n  getTipElement() {\n    if (this.tip) {\n      return this.tip;\n    }\n\n    this.tip = super.getTipElement();\n\n    if (!this.getTitle()) {\n      SelectorEngine.findOne(SELECTOR_TITLE, this.tip).remove();\n    }\n\n    if (!this._getContent()) {\n      SelectorEngine.findOne(SELECTOR_CONTENT, this.tip).remove();\n    }\n\n    return this.tip;\n  }\n\n  setContent() {\n    const tip = this.getTipElement(); // we use append for html objects to maintain js events\n\n    this.setElementContent(SelectorEngine.findOne(SELECTOR_TITLE, tip), this.getTitle());\n\n    let content = this._getContent();\n\n    if (typeof content === 'function') {\n      content = content.call(this._element);\n    }\n\n    this.setElementContent(SelectorEngine.findOne(SELECTOR_CONTENT, tip), content);\n    tip.classList.remove(CLASS_NAME_FADE$2, CLASS_NAME_SHOW$2);\n  } // Private\n\n\n  _addAttachmentClass(attachment) {\n    this.getTipElement().classList.add(`${CLASS_PREFIX}-${this.updateAttachment(attachment)}`);\n  }\n\n  _getContent() {\n    return this._element.getAttribute('data-bs-content') || this._config.content;\n  }\n\n  _cleanTipClass() {\n    const tip = this.getTipElement();\n    const tabClass = tip.getAttribute('class').match(BSCLS_PREFIX_REGEX);\n\n    if (tabClass !== null && tabClass.length > 0) {\n      tabClass.map(token => token.trim()).forEach(tClass => tip.classList.remove(tClass));\n    }\n  } // Static\n\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Popover.getOrCreateInstance(this, config);\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config]();\n      }\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Popover to jQuery only if jQuery is present\n */\n\n\ndefineJQueryPlugin(Popover);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): scrollspy.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$2 = 'scrollspy';\nconst DATA_KEY$2 = 'bs.scrollspy';\nconst EVENT_KEY$2 = `.${DATA_KEY$2}`;\nconst DATA_API_KEY$1 = '.data-api';\nconst Default$1 = {\n  offset: 10,\n  method: 'auto',\n  target: ''\n};\nconst DefaultType$1 = {\n  offset: 'number',\n  method: 'string',\n  target: '(string|element)'\n};\nconst EVENT_ACTIVATE = `activate${EVENT_KEY$2}`;\nconst EVENT_SCROLL = `scroll${EVENT_KEY$2}`;\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY$2}${DATA_API_KEY$1}`;\nconst CLASS_NAME_DROPDOWN_ITEM = 'dropdown-item';\nconst CLASS_NAME_ACTIVE$1 = 'active';\nconst SELECTOR_DATA_SPY = '[data-bs-spy=\"scroll\"]';\nconst SELECTOR_NAV_LIST_GROUP$1 = '.nav, .list-group';\nconst SELECTOR_NAV_LINKS = '.nav-link';\nconst SELECTOR_NAV_ITEMS = '.nav-item';\nconst SELECTOR_LIST_ITEMS = '.list-group-item';\nconst SELECTOR_DROPDOWN$1 = '.dropdown';\nconst SELECTOR_DROPDOWN_TOGGLE$1 = '.dropdown-toggle';\nconst METHOD_OFFSET = 'offset';\nconst METHOD_POSITION = 'position';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass ScrollSpy extends BaseComponent {\n  constructor(element, config) {\n    super(element);\n    this._scrollElement = this._element.tagName === 'BODY' ? window : this._element;\n    this._config = this._getConfig(config);\n    this._selector = `${this._config.target} ${SELECTOR_NAV_LINKS}, ${this._config.target} ${SELECTOR_LIST_ITEMS}, ${this._config.target} .${CLASS_NAME_DROPDOWN_ITEM}`;\n    this._offsets = [];\n    this._targets = [];\n    this._activeTarget = null;\n    this._scrollHeight = 0;\n    EventHandler.on(this._scrollElement, EVENT_SCROLL, () => this._process());\n    this.refresh();\n\n    this._process();\n  } // Getters\n\n\n  static get Default() {\n    return Default$1;\n  }\n\n  static get NAME() {\n    return NAME$2;\n  } // Public\n\n\n  refresh() {\n    const autoMethod = this._scrollElement === this._scrollElement.window ? METHOD_OFFSET : METHOD_POSITION;\n    const offsetMethod = this._config.method === 'auto' ? autoMethod : this._config.method;\n    const offsetBase = offsetMethod === METHOD_POSITION ? this._getScrollTop() : 0;\n    this._offsets = [];\n    this._targets = [];\n    this._scrollHeight = this._getScrollHeight();\n    const targets = SelectorEngine.find(this._selector);\n    targets.map(element => {\n      const targetSelector = getSelectorFromElement(element);\n      const target = targetSelector ? SelectorEngine.findOne(targetSelector) : null;\n\n      if (target) {\n        const targetBCR = target.getBoundingClientRect();\n\n        if (targetBCR.width || targetBCR.height) {\n          return [Manipulator[offsetMethod](target).top + offsetBase, targetSelector];\n        }\n      }\n\n      return null;\n    }).filter(item => item).sort((a, b) => a[0] - b[0]).forEach(item => {\n      this._offsets.push(item[0]);\n\n      this._targets.push(item[1]);\n    });\n  }\n\n  dispose() {\n    EventHandler.off(this._scrollElement, EVENT_KEY$2);\n    super.dispose();\n  } // Private\n\n\n  _getConfig(config) {\n    config = { ...Default$1,\n      ...Manipulator.getDataAttributes(this._element),\n      ...(typeof config === 'object' && config ? config : {})\n    };\n\n    if (typeof config.target !== 'string' && isElement(config.target)) {\n      let {\n        id\n      } = config.target;\n\n      if (!id) {\n        id = getUID(NAME$2);\n        config.target.id = id;\n      }\n\n      config.target = `#${id}`;\n    }\n\n    typeCheckConfig(NAME$2, config, DefaultType$1);\n    return config;\n  }\n\n  _getScrollTop() {\n    return this._scrollElement === window ? this._scrollElement.pageYOffset : this._scrollElement.scrollTop;\n  }\n\n  _getScrollHeight() {\n    return this._scrollElement.scrollHeight || Math.max(document.body.scrollHeight, document.documentElement.scrollHeight);\n  }\n\n  _getOffsetHeight() {\n    return this._scrollElement === window ? window.innerHeight : this._scrollElement.getBoundingClientRect().height;\n  }\n\n  _process() {\n    const scrollTop = this._getScrollTop() + this._config.offset;\n\n    const scrollHeight = this._getScrollHeight();\n\n    const maxScroll = this._config.offset + scrollHeight - this._getOffsetHeight();\n\n    if (this._scrollHeight !== scrollHeight) {\n      this.refresh();\n    }\n\n    if (scrollTop >= maxScroll) {\n      const target = this._targets[this._targets.length - 1];\n\n      if (this._activeTarget !== target) {\n        this._activate(target);\n      }\n\n      return;\n    }\n\n    if (this._activeTarget && scrollTop < this._offsets[0] && this._offsets[0] > 0) {\n      this._activeTarget = null;\n\n      this._clear();\n\n      return;\n    }\n\n    for (let i = this._offsets.length; i--;) {\n      const isActiveTarget = this._activeTarget !== this._targets[i] && scrollTop >= this._offsets[i] && (typeof this._offsets[i + 1] === 'undefined' || scrollTop < this._offsets[i + 1]);\n\n      if (isActiveTarget) {\n        this._activate(this._targets[i]);\n      }\n    }\n  }\n\n  _activate(target) {\n    this._activeTarget = target;\n\n    this._clear();\n\n    const queries = this._selector.split(',').map(selector => `${selector}[data-bs-target=\"${target}\"],${selector}[href=\"${target}\"]`);\n\n    const link = SelectorEngine.findOne(queries.join(','));\n\n    if (link.classList.contains(CLASS_NAME_DROPDOWN_ITEM)) {\n      SelectorEngine.findOne(SELECTOR_DROPDOWN_TOGGLE$1, link.closest(SELECTOR_DROPDOWN$1)).classList.add(CLASS_NAME_ACTIVE$1);\n      link.classList.add(CLASS_NAME_ACTIVE$1);\n    } else {\n      // Set triggered link as active\n      link.classList.add(CLASS_NAME_ACTIVE$1);\n      SelectorEngine.parents(link, SELECTOR_NAV_LIST_GROUP$1).forEach(listGroup => {\n        // Set triggered links parents as active\n        // With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor\n        SelectorEngine.prev(listGroup, `${SELECTOR_NAV_LINKS}, ${SELECTOR_LIST_ITEMS}`).forEach(item => item.classList.add(CLASS_NAME_ACTIVE$1)); // Handle special case when .nav-link is inside .nav-item\n\n        SelectorEngine.prev(listGroup, SELECTOR_NAV_ITEMS).forEach(navItem => {\n          SelectorEngine.children(navItem, SELECTOR_NAV_LINKS).forEach(item => item.classList.add(CLASS_NAME_ACTIVE$1));\n        });\n      });\n    }\n\n    EventHandler.trigger(this._scrollElement, EVENT_ACTIVATE, {\n      relatedTarget: target\n    });\n  }\n\n  _clear() {\n    SelectorEngine.find(this._selector).filter(node => node.classList.contains(CLASS_NAME_ACTIVE$1)).forEach(node => node.classList.remove(CLASS_NAME_ACTIVE$1));\n  } // Static\n\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = ScrollSpy.getOrCreateInstance(this, config);\n\n      if (typeof config !== 'string') {\n        return;\n      }\n\n      if (typeof data[config] === 'undefined') {\n        throw new TypeError(`No method named \"${config}\"`);\n      }\n\n      data[config]();\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n  SelectorEngine.find(SELECTOR_DATA_SPY).forEach(spy => new ScrollSpy(spy));\n});\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .ScrollSpy to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(ScrollSpy);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): tab.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$1 = 'tab';\nconst DATA_KEY$1 = 'bs.tab';\nconst EVENT_KEY$1 = `.${DATA_KEY$1}`;\nconst DATA_API_KEY = '.data-api';\nconst EVENT_HIDE$1 = `hide${EVENT_KEY$1}`;\nconst EVENT_HIDDEN$1 = `hidden${EVENT_KEY$1}`;\nconst EVENT_SHOW$1 = `show${EVENT_KEY$1}`;\nconst EVENT_SHOWN$1 = `shown${EVENT_KEY$1}`;\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY$1}${DATA_API_KEY}`;\nconst CLASS_NAME_DROPDOWN_MENU = 'dropdown-menu';\nconst CLASS_NAME_ACTIVE = 'active';\nconst CLASS_NAME_FADE$1 = 'fade';\nconst CLASS_NAME_SHOW$1 = 'show';\nconst SELECTOR_DROPDOWN = '.dropdown';\nconst SELECTOR_NAV_LIST_GROUP = '.nav, .list-group';\nconst SELECTOR_ACTIVE = '.active';\nconst SELECTOR_ACTIVE_UL = ':scope > li > .active';\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"tab\"], [data-bs-toggle=\"pill\"], [data-bs-toggle=\"list\"]';\nconst SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle';\nconst SELECTOR_DROPDOWN_ACTIVE_CHILD = ':scope > .dropdown-menu .active';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Tab extends BaseComponent {\n  // Getters\n  static get NAME() {\n    return NAME$1;\n  } // Public\n\n\n  show() {\n    if (this._element.parentNode && this._element.parentNode.nodeType === Node.ELEMENT_NODE && this._element.classList.contains(CLASS_NAME_ACTIVE)) {\n      return;\n    }\n\n    let previous;\n    const target = getElementFromSelector(this._element);\n\n    const listElement = this._element.closest(SELECTOR_NAV_LIST_GROUP);\n\n    if (listElement) {\n      const itemSelector = listElement.nodeName === 'UL' || listElement.nodeName === 'OL' ? SELECTOR_ACTIVE_UL : SELECTOR_ACTIVE;\n      previous = SelectorEngine.find(itemSelector, listElement);\n      previous = previous[previous.length - 1];\n    }\n\n    const hideEvent = previous ? EventHandler.trigger(previous, EVENT_HIDE$1, {\n      relatedTarget: this._element\n    }) : null;\n    const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$1, {\n      relatedTarget: previous\n    });\n\n    if (showEvent.defaultPrevented || hideEvent !== null && hideEvent.defaultPrevented) {\n      return;\n    }\n\n    this._activate(this._element, listElement);\n\n    const complete = () => {\n      EventHandler.trigger(previous, EVENT_HIDDEN$1, {\n        relatedTarget: this._element\n      });\n      EventHandler.trigger(this._element, EVENT_SHOWN$1, {\n        relatedTarget: previous\n      });\n    };\n\n    if (target) {\n      this._activate(target, target.parentNode, complete);\n    } else {\n      complete();\n    }\n  } // Private\n\n\n  _activate(element, container, callback) {\n    const activeElements = container && (container.nodeName === 'UL' || container.nodeName === 'OL') ? SelectorEngine.find(SELECTOR_ACTIVE_UL, container) : SelectorEngine.children(container, SELECTOR_ACTIVE);\n    const active = activeElements[0];\n    const isTransitioning = callback && active && active.classList.contains(CLASS_NAME_FADE$1);\n\n    const complete = () => this._transitionComplete(element, active, callback);\n\n    if (active && isTransitioning) {\n      active.classList.remove(CLASS_NAME_SHOW$1);\n\n      this._queueCallback(complete, element, true);\n    } else {\n      complete();\n    }\n  }\n\n  _transitionComplete(element, active, callback) {\n    if (active) {\n      active.classList.remove(CLASS_NAME_ACTIVE);\n      const dropdownChild = SelectorEngine.findOne(SELECTOR_DROPDOWN_ACTIVE_CHILD, active.parentNode);\n\n      if (dropdownChild) {\n        dropdownChild.classList.remove(CLASS_NAME_ACTIVE);\n      }\n\n      if (active.getAttribute('role') === 'tab') {\n        active.setAttribute('aria-selected', false);\n      }\n    }\n\n    element.classList.add(CLASS_NAME_ACTIVE);\n\n    if (element.getAttribute('role') === 'tab') {\n      element.setAttribute('aria-selected', true);\n    }\n\n    reflow(element);\n\n    if (element.classList.contains(CLASS_NAME_FADE$1)) {\n      element.classList.add(CLASS_NAME_SHOW$1);\n    }\n\n    let parent = element.parentNode;\n\n    if (parent && parent.nodeName === 'LI') {\n      parent = parent.parentNode;\n    }\n\n    if (parent && parent.classList.contains(CLASS_NAME_DROPDOWN_MENU)) {\n      const dropdownElement = element.closest(SELECTOR_DROPDOWN);\n\n      if (dropdownElement) {\n        SelectorEngine.find(SELECTOR_DROPDOWN_TOGGLE, dropdownElement).forEach(dropdown => dropdown.classList.add(CLASS_NAME_ACTIVE));\n      }\n\n      element.setAttribute('aria-expanded', true);\n    }\n\n    if (callback) {\n      callback();\n    }\n  } // Static\n\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Tab.getOrCreateInstance(this);\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config]();\n      }\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n  if (['A', 'AREA'].includes(this.tagName)) {\n    event.preventDefault();\n  }\n\n  if (isDisabled(this)) {\n    return;\n  }\n\n  const data = Tab.getOrCreateInstance(this);\n  data.show();\n});\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Tab to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Tab);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): toast.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'toast';\nconst DATA_KEY = 'bs.toast';\nconst EVENT_KEY = `.${DATA_KEY}`;\nconst EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY}`;\nconst EVENT_MOUSEOVER = `mouseover${EVENT_KEY}`;\nconst EVENT_MOUSEOUT = `mouseout${EVENT_KEY}`;\nconst EVENT_FOCUSIN = `focusin${EVENT_KEY}`;\nconst EVENT_FOCUSOUT = `focusout${EVENT_KEY}`;\nconst EVENT_HIDE = `hide${EVENT_KEY}`;\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`;\nconst EVENT_SHOW = `show${EVENT_KEY}`;\nconst EVENT_SHOWN = `shown${EVENT_KEY}`;\nconst CLASS_NAME_FADE = 'fade';\nconst CLASS_NAME_HIDE = 'hide';\nconst CLASS_NAME_SHOW = 'show';\nconst CLASS_NAME_SHOWING = 'showing';\nconst DefaultType = {\n  animation: 'boolean',\n  autohide: 'boolean',\n  delay: 'number'\n};\nconst Default = {\n  animation: true,\n  autohide: true,\n  delay: 5000\n};\nconst SELECTOR_DATA_DISMISS = '[data-bs-dismiss=\"toast\"]';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Toast extends BaseComponent {\n  constructor(element, config) {\n    super(element);\n    this._config = this._getConfig(config);\n    this._timeout = null;\n    this._hasMouseInteraction = false;\n    this._hasKeyboardInteraction = false;\n\n    this._setListeners();\n  } // Getters\n\n\n  static get DefaultType() {\n    return DefaultType;\n  }\n\n  static get Default() {\n    return Default;\n  }\n\n  static get NAME() {\n    return NAME;\n  } // Public\n\n\n  show() {\n    const showEvent = EventHandler.trigger(this._element, EVENT_SHOW);\n\n    if (showEvent.defaultPrevented) {\n      return;\n    }\n\n    this._clearTimeout();\n\n    if (this._config.animation) {\n      this._element.classList.add(CLASS_NAME_FADE);\n    }\n\n    const complete = () => {\n      this._element.classList.remove(CLASS_NAME_SHOWING);\n\n      this._element.classList.add(CLASS_NAME_SHOW);\n\n      EventHandler.trigger(this._element, EVENT_SHOWN);\n\n      this._maybeScheduleHide();\n    };\n\n    this._element.classList.remove(CLASS_NAME_HIDE);\n\n    reflow(this._element);\n\n    this._element.classList.add(CLASS_NAME_SHOWING);\n\n    this._queueCallback(complete, this._element, this._config.animation);\n  }\n\n  hide() {\n    if (!this._element.classList.contains(CLASS_NAME_SHOW)) {\n      return;\n    }\n\n    const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE);\n\n    if (hideEvent.defaultPrevented) {\n      return;\n    }\n\n    const complete = () => {\n      this._element.classList.add(CLASS_NAME_HIDE);\n\n      EventHandler.trigger(this._element, EVENT_HIDDEN);\n    };\n\n    this._element.classList.remove(CLASS_NAME_SHOW);\n\n    this._queueCallback(complete, this._element, this._config.animation);\n  }\n\n  dispose() {\n    this._clearTimeout();\n\n    if (this._element.classList.contains(CLASS_NAME_SHOW)) {\n      this._element.classList.remove(CLASS_NAME_SHOW);\n    }\n\n    super.dispose();\n  } // Private\n\n\n  _getConfig(config) {\n    config = { ...Default,\n      ...Manipulator.getDataAttributes(this._element),\n      ...(typeof config === 'object' && config ? config : {})\n    };\n    typeCheckConfig(NAME, config, this.constructor.DefaultType);\n    return config;\n  }\n\n  _maybeScheduleHide() {\n    if (!this._config.autohide) {\n      return;\n    }\n\n    if (this._hasMouseInteraction || this._hasKeyboardInteraction) {\n      return;\n    }\n\n    this._timeout = setTimeout(() => {\n      this.hide();\n    }, this._config.delay);\n  }\n\n  _onInteraction(event, isInteracting) {\n    switch (event.type) {\n      case 'mouseover':\n      case 'mouseout':\n        this._hasMouseInteraction = isInteracting;\n        break;\n\n      case 'focusin':\n      case 'focusout':\n        this._hasKeyboardInteraction = isInteracting;\n        break;\n    }\n\n    if (isInteracting) {\n      this._clearTimeout();\n\n      return;\n    }\n\n    const nextElement = event.relatedTarget;\n\n    if (this._element === nextElement || this._element.contains(nextElement)) {\n      return;\n    }\n\n    this._maybeScheduleHide();\n  }\n\n  _setListeners() {\n    EventHandler.on(this._element, EVENT_CLICK_DISMISS, SELECTOR_DATA_DISMISS, () => this.hide());\n    EventHandler.on(this._element, EVENT_MOUSEOVER, event => this._onInteraction(event, true));\n    EventHandler.on(this._element, EVENT_MOUSEOUT, event => this._onInteraction(event, false));\n    EventHandler.on(this._element, EVENT_FOCUSIN, event => this._onInteraction(event, true));\n    EventHandler.on(this._element, EVENT_FOCUSOUT, event => this._onInteraction(event, false));\n  }\n\n  _clearTimeout() {\n    clearTimeout(this._timeout);\n    this._timeout = null;\n  } // Static\n\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Toast.getOrCreateInstance(this, config);\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config](this);\n      }\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Toast to jQuery only if jQuery is present\n */\n\n\ndefineJQueryPlugin(Toast);\n\nexport { Alert, Button, Carousel, Collapse, Dropdown, Modal, Offcanvas, Popover, ScrollSpy, Tab, Toast, Tooltip };\n//# sourceMappingURL=bootstrap.esm.js.map\n"
  },
  {
    "path": "src/sourceDev.WebApp/SharedThemes/pulse/wwwroot/js/jquery.js",
    "content": "/*!\n * jQuery JavaScript Library v3.7.0\n * https://jquery.com/\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license\n * https://jquery.org/license\n *\n * Date: 2023-05-11T18:29Z\n */\n(function (global, factory) {\n\n\t\"use strict\";\n\n\tif (typeof module === \"object\" && typeof module.exports === \"object\") {\n\n\t\t// For CommonJS and CommonJS-like environments where a proper `window`\n\t\t// is present, execute the factory and get jQuery.\n\t\t// For environments that do not have a `window` with a `document`\n\t\t// (such as Node.js), expose a factory as module.exports.\n\t\t// This accentuates the need for the creation of a real `window`.\n\t\t// e.g. var jQuery = require(\"jquery\")(window);\n\t\t// See ticket trac-14549 for more info.\n\t\tmodule.exports = global.document ?\n\t\t\tfactory(global, true) :\n\t\t\tfunction (w) {\n\t\t\t\tif (!w.document) {\n\t\t\t\t\tthrow new Error(\"jQuery requires a window with a document\");\n\t\t\t\t}\n\t\t\t\treturn factory(w);\n\t\t\t};\n\t} else {\n\t\tfactory(global);\n\t}\n\n\t// Pass this if window is not defined yet\n})(typeof window !== \"undefined\" ? window : this, function (window, noGlobal) {\n\n\t// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1\n\t// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode\n\t// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common\n\t// enough that all such attempts are guarded in a try block.\n\t\"use strict\";\n\n\tvar arr = [];\n\n\tvar getProto = Object.getPrototypeOf;\n\n\tvar slice = arr.slice;\n\n\tvar flat = arr.flat ? function (array) {\n\t\treturn arr.flat.call(array);\n\t} : function (array) {\n\t\treturn arr.concat.apply([], array);\n\t};\n\n\n\tvar push = arr.push;\n\n\tvar indexOf = arr.indexOf;\n\n\tvar class2type = {};\n\n\tvar toString = class2type.toString;\n\n\tvar hasOwn = class2type.hasOwnProperty;\n\n\tvar fnToString = hasOwn.toString;\n\n\tvar ObjectFunctionString = fnToString.call(Object);\n\n\tvar support = {};\n\n\tvar isFunction = function isFunction(obj) {\n\n\t\t// Support: Chrome <=57, Firefox <=52\n\t\t// In some browsers, typeof returns \"function\" for HTML <object> elements\n\t\t// (i.e., `typeof document.createElement( \"object\" ) === \"function\"`).\n\t\t// We don't want to classify *any* DOM node as a function.\n\t\t// Support: QtWeb <=3.8.5, WebKit <=534.34, wkhtmltopdf tool <=0.12.5\n\t\t// Plus for old WebKit, typeof returns \"function\" for HTML collections\n\t\t// (e.g., `typeof document.getElementsByTagName(\"div\") === \"function\"`). (gh-4756)\n\t\treturn typeof obj === \"function\" && typeof obj.nodeType !== \"number\" &&\n\t\t\ttypeof obj.item !== \"function\";\n\t};\n\n\n\tvar isWindow = function isWindow(obj) {\n\t\treturn obj != null && obj === obj.window;\n\t};\n\n\n\tvar document = window.document;\n\n\n\n\tvar preservedScriptAttributes = {\n\t\ttype: true,\n\t\tsrc: true,\n\t\tnonce: true,\n\t\tnoModule: true\n\t};\n\n\tfunction DOMEval(code, node, doc) {\n\t\tdoc = doc || document;\n\n\t\tvar i, val,\n\t\t\tscript = doc.createElement(\"script\");\n\n\t\tscript.text = code;\n\t\tif (node) {\n\t\t\tfor (i in preservedScriptAttributes) {\n\n\t\t\t\t// Support: Firefox 64+, Edge 18+\n\t\t\t\t// Some browsers don't support the \"nonce\" property on scripts.\n\t\t\t\t// On the other hand, just using `getAttribute` is not enough as\n\t\t\t\t// the `nonce` attribute is reset to an empty string whenever it\n\t\t\t\t// becomes browsing-context connected.\n\t\t\t\t// See https://github.com/whatwg/html/issues/2369\n\t\t\t\t// See https://html.spec.whatwg.org/#nonce-attributes\n\t\t\t\t// The `node.getAttribute` check was added for the sake of\n\t\t\t\t// `jQuery.globalEval` so that it can fake a nonce-containing node\n\t\t\t\t// via an object.\n\t\t\t\tval = node[i] || node.getAttribute && node.getAttribute(i);\n\t\t\t\tif (val) {\n\t\t\t\t\tscript.setAttribute(i, val);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tdoc.head.appendChild(script).parentNode.removeChild(script);\n\t}\n\n\n\tfunction toType(obj) {\n\t\tif (obj == null) {\n\t\t\treturn obj + \"\";\n\t\t}\n\n\t\t// Support: Android <=2.3 only (functionish RegExp)\n\t\treturn typeof obj === \"object\" || typeof obj === \"function\" ?\n\t\t\tclass2type[toString.call(obj)] || \"object\" :\n\t\t\ttypeof obj;\n\t}\n\t/* global Symbol */\n\t// Defining this global in .eslintrc.json would create a danger of using the global\n\t// unguarded in another place, it seems safer to define global only for this module\n\n\n\n\tvar version = \"3.7.0\",\n\n\t\trhtmlSuffix = /HTML$/i,\n\n\t\t// Define a local copy of jQuery\n\t\tjQuery = function (selector, context) {\n\n\t\t\t// The jQuery object is actually just the init constructor 'enhanced'\n\t\t\t// Need init if jQuery is called (just allow error to be thrown if not included)\n\t\t\treturn new jQuery.fn.init(selector, context);\n\t\t};\n\n\tjQuery.fn = jQuery.prototype = {\n\n\t\t// The current version of jQuery being used\n\t\tjquery: version,\n\n\t\tconstructor: jQuery,\n\n\t\t// The default length of a jQuery object is 0\n\t\tlength: 0,\n\n\t\ttoArray: function () {\n\t\t\treturn slice.call(this);\n\t\t},\n\n\t\t// Get the Nth element in the matched element set OR\n\t\t// Get the whole matched element set as a clean array\n\t\tget: function (num) {\n\n\t\t\t// Return all the elements in a clean array\n\t\t\tif (num == null) {\n\t\t\t\treturn slice.call(this);\n\t\t\t}\n\n\t\t\t// Return just the one element from the set\n\t\t\treturn num < 0 ? this[num + this.length] : this[num];\n\t\t},\n\n\t\t// Take an array of elements and push it onto the stack\n\t\t// (returning the new matched element set)\n\t\tpushStack: function (elems) {\n\n\t\t\t// Build a new jQuery matched element set\n\t\t\tvar ret = jQuery.merge(this.constructor(), elems);\n\n\t\t\t// Add the old object onto the stack (as a reference)\n\t\t\tret.prevObject = this;\n\n\t\t\t// Return the newly-formed element set\n\t\t\treturn ret;\n\t\t},\n\n\t\t// Execute a callback for every element in the matched set.\n\t\teach: function (callback) {\n\t\t\treturn jQuery.each(this, callback);\n\t\t},\n\n\t\tmap: function (callback) {\n\t\t\treturn this.pushStack(jQuery.map(this, function (elem, i) {\n\t\t\t\treturn callback.call(elem, i, elem);\n\t\t\t}));\n\t\t},\n\n\t\tslice: function () {\n\t\t\treturn this.pushStack(slice.apply(this, arguments));\n\t\t},\n\n\t\tfirst: function () {\n\t\t\treturn this.eq(0);\n\t\t},\n\n\t\tlast: function () {\n\t\t\treturn this.eq(-1);\n\t\t},\n\n\t\teven: function () {\n\t\t\treturn this.pushStack(jQuery.grep(this, function (_elem, i) {\n\t\t\t\treturn (i + 1) % 2;\n\t\t\t}));\n\t\t},\n\n\t\todd: function () {\n\t\t\treturn this.pushStack(jQuery.grep(this, function (_elem, i) {\n\t\t\t\treturn i % 2;\n\t\t\t}));\n\t\t},\n\n\t\teq: function (i) {\n\t\t\tvar len = this.length,\n\t\t\t\tj = +i + (i < 0 ? len : 0);\n\t\t\treturn this.pushStack(j >= 0 && j < len ? [this[j]] : []);\n\t\t},\n\n\t\tend: function () {\n\t\t\treturn this.prevObject || this.constructor();\n\t\t},\n\n\t\t// For internal use only.\n\t\t// Behaves like an Array's method, not like a jQuery method.\n\t\tpush: push,\n\t\tsort: arr.sort,\n\t\tsplice: arr.splice\n\t};\n\n\tjQuery.extend = jQuery.fn.extend = function () {\n\t\tvar options, name, src, copy, copyIsArray, clone,\n\t\t\ttarget = arguments[0] || {},\n\t\t\ti = 1,\n\t\t\tlength = arguments.length,\n\t\t\tdeep = false;\n\n\t\t// Handle a deep copy situation\n\t\tif (typeof target === \"boolean\") {\n\t\t\tdeep = target;\n\n\t\t\t// Skip the boolean and the target\n\t\t\ttarget = arguments[i] || {};\n\t\t\ti++;\n\t\t}\n\n\t\t// Handle case when target is a string or something (possible in deep copy)\n\t\tif (typeof target !== \"object\" && !isFunction(target)) {\n\t\t\ttarget = {};\n\t\t}\n\n\t\t// Extend jQuery itself if only one argument is passed\n\t\tif (i === length) {\n\t\t\ttarget = this;\n\t\t\ti--;\n\t\t}\n\n\t\tfor (; i < length; i++) {\n\n\t\t\t// Only deal with non-null/undefined values\n\t\t\tif ((options = arguments[i]) != null) {\n\n\t\t\t\t// Extend the base object\n\t\t\t\tfor (name in options) {\n\t\t\t\t\tcopy = options[name];\n\n\t\t\t\t\t// Prevent Object.prototype pollution\n\t\t\t\t\t// Prevent never-ending loop\n\t\t\t\t\tif (name === \"__proto__\" || target === copy) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\t\tif (deep && copy && (jQuery.isPlainObject(copy) ||\n\t\t\t\t\t\t(copyIsArray = Array.isArray(copy)))) {\n\t\t\t\t\t\tsrc = target[name];\n\n\t\t\t\t\t\t// Ensure proper type for the source value\n\t\t\t\t\t\tif (copyIsArray && !Array.isArray(src)) {\n\t\t\t\t\t\t\tclone = [];\n\t\t\t\t\t\t} else if (!copyIsArray && !jQuery.isPlainObject(src)) {\n\t\t\t\t\t\t\tclone = {};\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tclone = src;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcopyIsArray = false;\n\n\t\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\t\ttarget[name] = jQuery.extend(deep, clone, copy);\n\n\t\t\t\t\t\t// Don't bring in undefined values\n\t\t\t\t\t} else if (copy !== undefined) {\n\t\t\t\t\t\ttarget[name] = copy;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Return the modified object\n\t\treturn target;\n\t};\n\n\tjQuery.extend({\n\n\t\t// Unique for each copy of jQuery on the page\n\t\texpando: \"jQuery\" + (version + Math.random()).replace(/\\D/g, \"\"),\n\n\t\t// Assume jQuery is ready without the ready module\n\t\tisReady: true,\n\n\t\terror: function (msg) {\n\t\t\tthrow new Error(msg);\n\t\t},\n\n\t\tnoop: function () { },\n\n\t\tisPlainObject: function (obj) {\n\t\t\tvar proto, Ctor;\n\n\t\t\t// Detect obvious negatives\n\t\t\t// Use toString instead of jQuery.type to catch host objects\n\t\t\tif (!obj || toString.call(obj) !== \"[object Object]\") {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tproto = getProto(obj);\n\n\t\t\t// Objects with no prototype (e.g., `Object.create( null )`) are plain\n\t\t\tif (!proto) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\t// Objects with prototype are plain iff they were constructed by a global Object function\n\t\t\tCtor = hasOwn.call(proto, \"constructor\") && proto.constructor;\n\t\t\treturn typeof Ctor === \"function\" && fnToString.call(Ctor) === ObjectFunctionString;\n\t\t},\n\n\t\tisEmptyObject: function (obj) {\n\t\t\tvar name;\n\n\t\t\tfor (name in obj) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\n\t\t// Evaluates a script in a provided context; falls back to the global one\n\t\t// if not specified.\n\t\tglobalEval: function (code, options, doc) {\n\t\t\tDOMEval(code, { nonce: options && options.nonce }, doc);\n\t\t},\n\n\t\teach: function (obj, callback) {\n\t\t\tvar length, i = 0;\n\n\t\t\tif (isArrayLike(obj)) {\n\t\t\t\tlength = obj.length;\n\t\t\t\tfor (; i < length; i++) {\n\t\t\t\t\tif (callback.call(obj[i], i, obj[i]) === false) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor (i in obj) {\n\t\t\t\t\tif (callback.call(obj[i], i, obj[i]) === false) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn obj;\n\t\t},\n\n\n\t\t// Retrieve the text value of an array of DOM nodes\n\t\ttext: function (elem) {\n\t\t\tvar node,\n\t\t\t\tret = \"\",\n\t\t\t\ti = 0,\n\t\t\t\tnodeType = elem.nodeType;\n\n\t\t\tif (!nodeType) {\n\n\t\t\t\t// If no nodeType, this is expected to be an array\n\t\t\t\twhile ((node = elem[i++])) {\n\n\t\t\t\t\t// Do not traverse comment nodes\n\t\t\t\t\tret += jQuery.text(node);\n\t\t\t\t}\n\t\t\t} else if (nodeType === 1 || nodeType === 9 || nodeType === 11) {\n\t\t\t\treturn elem.textContent;\n\t\t\t} else if (nodeType === 3 || nodeType === 4) {\n\t\t\t\treturn elem.nodeValue;\n\t\t\t}\n\n\t\t\t// Do not include comment or processing instruction nodes\n\n\t\t\treturn ret;\n\t\t},\n\n\t\t// results is for internal usage only\n\t\tmakeArray: function (arr, results) {\n\t\t\tvar ret = results || [];\n\n\t\t\tif (arr != null) {\n\t\t\t\tif (isArrayLike(Object(arr))) {\n\t\t\t\t\tjQuery.merge(ret,\n\t\t\t\t\t\ttypeof arr === \"string\" ?\n\t\t\t\t\t\t\t[arr] : arr\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\tpush.call(ret, arr);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn ret;\n\t\t},\n\n\t\tinArray: function (elem, arr, i) {\n\t\t\treturn arr == null ? -1 : indexOf.call(arr, elem, i);\n\t\t},\n\n\t\tisXMLDoc: function (elem) {\n\t\t\tvar namespace = elem && elem.namespaceURI,\n\t\t\t\tdocElem = elem && (elem.ownerDocument || elem).documentElement;\n\n\t\t\t// Assume HTML when documentElement doesn't yet exist, such as inside\n\t\t\t// document fragments.\n\t\t\treturn !rhtmlSuffix.test(namespace || docElem && docElem.nodeName || \"HTML\");\n\t\t},\n\n\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\tmerge: function (first, second) {\n\t\t\tvar len = +second.length,\n\t\t\t\tj = 0,\n\t\t\t\ti = first.length;\n\n\t\t\tfor (; j < len; j++) {\n\t\t\t\tfirst[i++] = second[j];\n\t\t\t}\n\n\t\t\tfirst.length = i;\n\n\t\t\treturn first;\n\t\t},\n\n\t\tgrep: function (elems, callback, invert) {\n\t\t\tvar callbackInverse,\n\t\t\t\tmatches = [],\n\t\t\t\ti = 0,\n\t\t\t\tlength = elems.length,\n\t\t\t\tcallbackExpect = !invert;\n\n\t\t\t// Go through the array, only saving the items\n\t\t\t// that pass the validator function\n\t\t\tfor (; i < length; i++) {\n\t\t\t\tcallbackInverse = !callback(elems[i], i);\n\t\t\t\tif (callbackInverse !== callbackExpect) {\n\t\t\t\t\tmatches.push(elems[i]);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn matches;\n\t\t},\n\n\t\t// arg is for internal usage only\n\t\tmap: function (elems, callback, arg) {\n\t\t\tvar length, value,\n\t\t\t\ti = 0,\n\t\t\t\tret = [];\n\n\t\t\t// Go through the array, translating each of the items to their new values\n\t\t\tif (isArrayLike(elems)) {\n\t\t\t\tlength = elems.length;\n\t\t\t\tfor (; i < length; i++) {\n\t\t\t\t\tvalue = callback(elems[i], i, arg);\n\n\t\t\t\t\tif (value != null) {\n\t\t\t\t\t\tret.push(value);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Go through every key on the object,\n\t\t\t} else {\n\t\t\t\tfor (i in elems) {\n\t\t\t\t\tvalue = callback(elems[i], i, arg);\n\n\t\t\t\t\tif (value != null) {\n\t\t\t\t\t\tret.push(value);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Flatten any nested arrays\n\t\t\treturn flat(ret);\n\t\t},\n\n\t\t// A global GUID counter for objects\n\t\tguid: 1,\n\n\t\t// jQuery.support is not used in Core but other projects attach their\n\t\t// properties to it so it needs to exist.\n\t\tsupport: support\n\t});\n\n\tif (typeof Symbol === \"function\") {\n\t\tjQuery.fn[Symbol.iterator] = arr[Symbol.iterator];\n\t}\n\n\t// Populate the class2type map\n\tjQuery.each(\"Boolean Number String Function Array Date RegExp Object Error Symbol\".split(\" \"),\n\t\tfunction (_i, name) {\n\t\t\tclass2type[\"[object \" + name + \"]\"] = name.toLowerCase();\n\t\t});\n\n\tfunction isArrayLike(obj) {\n\n\t\t// Support: real iOS 8.2 only (not reproducible in simulator)\n\t\t// `in` check used to prevent JIT error (gh-2145)\n\t\t// hasOwn isn't used here due to false negatives\n\t\t// regarding Nodelist length in IE\n\t\tvar length = !!obj && \"length\" in obj && obj.length,\n\t\t\ttype = toType(obj);\n\n\t\tif (isFunction(obj) || isWindow(obj)) {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn type === \"array\" || length === 0 ||\n\t\t\ttypeof length === \"number\" && length > 0 && (length - 1) in obj;\n\t}\n\n\n\tfunction nodeName(elem, name) {\n\n\t\treturn elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();\n\n\t}\n\tvar pop = arr.pop;\n\n\n\tvar sort = arr.sort;\n\n\n\tvar splice = arr.splice;\n\n\n\tvar whitespace = \"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\";\n\n\n\tvar rtrimCSS = new RegExp(\n\t\t\"^\" + whitespace + \"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\" + whitespace + \"+$\",\n\t\t\"g\"\n\t);\n\n\n\n\n\t// Note: an element does not contain itself\n\tjQuery.contains = function (a, b) {\n\t\tvar bup = b && b.parentNode;\n\n\t\treturn a === bup || !!(bup && bup.nodeType === 1 && (\n\n\t\t\t// Support: IE 9 - 11+\n\t\t\t// IE doesn't have `contains` on SVG.\n\t\t\ta.contains ?\n\t\t\t\ta.contains(bup) :\n\t\t\t\ta.compareDocumentPosition && a.compareDocumentPosition(bup) & 16\n\t\t));\n\t};\n\n\n\n\n\t// CSS string/identifier serialization\n\t// https://drafts.csswg.org/cssom/#common-serializing-idioms\n\tvar rcssescape = /([\\0-\\x1f\\x7f]|^-?\\d)|^-$|[^\\x80-\\uFFFF\\w-]/g;\n\n\tfunction fcssescape(ch, asCodePoint) {\n\t\tif (asCodePoint) {\n\n\t\t\t// U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER\n\t\t\tif (ch === \"\\0\") {\n\t\t\t\treturn \"\\uFFFD\";\n\t\t\t}\n\n\t\t\t// Control characters and (dependent upon position) numbers get escaped as code points\n\t\t\treturn ch.slice(0, -1) + \"\\\\\" + ch.charCodeAt(ch.length - 1).toString(16) + \" \";\n\t\t}\n\n\t\t// Other potentially-special ASCII characters get backslash-escaped\n\t\treturn \"\\\\\" + ch;\n\t}\n\n\tjQuery.escapeSelector = function (sel) {\n\t\treturn (sel + \"\").replace(rcssescape, fcssescape);\n\t};\n\n\n\n\n\tvar preferredDoc = document,\n\t\tpushNative = push;\n\n\t(function () {\n\n\t\tvar i,\n\t\t\tExpr,\n\t\t\toutermostContext,\n\t\t\tsortInput,\n\t\t\thasDuplicate,\n\t\t\tpush = pushNative,\n\n\t\t\t// Local document vars\n\t\t\tdocument,\n\t\t\tdocumentElement,\n\t\t\tdocumentIsHTML,\n\t\t\trbuggyQSA,\n\t\t\tmatches,\n\n\t\t\t// Instance-specific data\n\t\t\texpando = jQuery.expando,\n\t\t\tdirruns = 0,\n\t\t\tdone = 0,\n\t\t\tclassCache = createCache(),\n\t\t\ttokenCache = createCache(),\n\t\t\tcompilerCache = createCache(),\n\t\t\tnonnativeSelectorCache = createCache(),\n\t\t\tsortOrder = function (a, b) {\n\t\t\t\tif (a === b) {\n\t\t\t\t\thasDuplicate = true;\n\t\t\t\t}\n\t\t\t\treturn 0;\n\t\t\t},\n\n\t\t\tbooleans = \"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|\" +\n\t\t\t\t\"loop|multiple|open|readonly|required|scoped\",\n\n\t\t\t// Regular expressions\n\n\t\t\t// https://www.w3.org/TR/css-syntax-3/#ident-token-diagram\n\t\t\tidentifier = \"(?:\\\\\\\\[\\\\da-fA-F]{1,6}\" + whitespace +\n\t\t\t\t\"?|\\\\\\\\[^\\\\r\\\\n\\\\f]|[\\\\w-]|[^\\0-\\\\x7f])+\",\n\n\t\t\t// Attribute selectors: https://www.w3.org/TR/selectors/#attribute-selectors\n\t\t\tattributes = \"\\\\[\" + whitespace + \"*(\" + identifier + \")(?:\" + whitespace +\n\n\t\t\t\t// Operator (capture 2)\n\t\t\t\t\"*([*^$|!~]?=)\" + whitespace +\n\n\t\t\t\t// \"Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]\"\n\t\t\t\t\"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\" + identifier + \"))|)\" +\n\t\t\t\twhitespace + \"*\\\\]\",\n\n\t\t\tpseudos = \":(\" + identifier + \")(?:\\\\((\" +\n\n\t\t\t\t// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:\n\t\t\t\t// 1. quoted (capture 3; capture 4 or capture 5)\n\t\t\t\t\"('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|\" +\n\n\t\t\t\t// 2. simple (capture 6)\n\t\t\t\t\"((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\" + attributes + \")*)|\" +\n\n\t\t\t\t// 3. anything else (capture 2)\n\t\t\t\t\".*\" +\n\t\t\t\t\")\\\\)|)\",\n\n\t\t\t// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter\n\t\t\trwhitespace = new RegExp(whitespace + \"+\", \"g\"),\n\n\t\t\trcomma = new RegExp(\"^\" + whitespace + \"*,\" + whitespace + \"*\"),\n\t\t\trleadingCombinator = new RegExp(\"^\" + whitespace + \"*([>+~]|\" + whitespace + \")\" +\n\t\t\t\twhitespace + \"*\"),\n\t\t\trdescend = new RegExp(whitespace + \"|>\"),\n\n\t\t\trpseudo = new RegExp(pseudos),\n\t\t\tridentifier = new RegExp(\"^\" + identifier + \"$\"),\n\n\t\t\tmatchExpr = {\n\t\t\t\tID: new RegExp(\"^#(\" + identifier + \")\"),\n\t\t\t\tCLASS: new RegExp(\"^\\\\.(\" + identifier + \")\"),\n\t\t\t\tTAG: new RegExp(\"^(\" + identifier + \"|[*])\"),\n\t\t\t\tATTR: new RegExp(\"^\" + attributes),\n\t\t\t\tPSEUDO: new RegExp(\"^\" + pseudos),\n\t\t\t\tCHILD: new RegExp(\n\t\t\t\t\t\"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\" +\n\t\t\t\t\twhitespace + \"*(even|odd|(([+-]|)(\\\\d*)n|)\" + whitespace + \"*(?:([+-]|)\" +\n\t\t\t\t\twhitespace + \"*(\\\\d+)|))\" + whitespace + \"*\\\\)|)\", \"i\"),\n\t\t\t\tbool: new RegExp(\"^(?:\" + booleans + \")$\", \"i\"),\n\n\t\t\t\t// For use in libraries implementing .is()\n\t\t\t\t// We use this for POS matching in `select`\n\t\t\t\tneedsContext: new RegExp(\"^\" + whitespace +\n\t\t\t\t\t\"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\" + whitespace +\n\t\t\t\t\t\"*((?:-\\\\d)?\\\\d*)\" + whitespace + \"*\\\\)|)(?=[^-]|$)\", \"i\")\n\t\t\t},\n\n\t\t\trinputs = /^(?:input|select|textarea|button)$/i,\n\t\t\trheader = /^h\\d$/i,\n\n\t\t\t// Easily-parseable/retrievable ID or TAG or CLASS selectors\n\t\t\trquickExpr = /^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,\n\n\t\t\trsibling = /[+~]/,\n\n\t\t\t// CSS escapes\n\t\t\t// https://www.w3.org/TR/CSS21/syndata.html#escaped-characters\n\t\t\trunescape = new RegExp(\"\\\\\\\\[\\\\da-fA-F]{1,6}\" + whitespace +\n\t\t\t\t\"?|\\\\\\\\([^\\\\r\\\\n\\\\f])\", \"g\"),\n\t\t\tfunescape = function (escape, nonHex) {\n\t\t\t\tvar high = \"0x\" + escape.slice(1) - 0x10000;\n\n\t\t\t\tif (nonHex) {\n\n\t\t\t\t\t// Strip the backslash prefix from a non-hex escape sequence\n\t\t\t\t\treturn nonHex;\n\t\t\t\t}\n\n\t\t\t\t// Replace a hexadecimal escape sequence with the encoded Unicode code point\n\t\t\t\t// Support: IE <=11+\n\t\t\t\t// For values outside the Basic Multilingual Plane (BMP), manually construct a\n\t\t\t\t// surrogate pair\n\t\t\t\treturn high < 0 ?\n\t\t\t\t\tString.fromCharCode(high + 0x10000) :\n\t\t\t\t\tString.fromCharCode(high >> 10 | 0xD800, high & 0x3FF | 0xDC00);\n\t\t\t},\n\n\t\t\t// Used for iframes; see `setDocument`.\n\t\t\t// Support: IE 9 - 11+, Edge 12 - 18+\n\t\t\t// Removing the function wrapper causes a \"Permission Denied\"\n\t\t\t// error in IE/Edge.\n\t\t\tunloadHandler = function () {\n\t\t\t\tsetDocument();\n\t\t\t},\n\n\t\t\tinDisabledFieldset = addCombinator(\n\t\t\t\tfunction (elem) {\n\t\t\t\t\treturn elem.disabled === true && nodeName(elem, \"fieldset\");\n\t\t\t\t},\n\t\t\t\t{ dir: \"parentNode\", next: \"legend\" }\n\t\t\t);\n\n\t\t// Support: IE <=9 only\n\t\t// Accessing document.activeElement can throw unexpectedly\n\t\t// https://bugs.jquery.com/ticket/13393\n\t\tfunction safeActiveElement() {\n\t\t\ttry {\n\t\t\t\treturn document.activeElement;\n\t\t\t} catch (err) { }\n\t\t}\n\n\t\t// Optimize for push.apply( _, NodeList )\n\t\ttry {\n\t\t\tpush.apply(\n\t\t\t\t(arr = slice.call(preferredDoc.childNodes)),\n\t\t\t\tpreferredDoc.childNodes\n\t\t\t);\n\n\t\t\t// Support: Android <=4.0\n\t\t\t// Detect silently failing push.apply\n\t\t\t// eslint-disable-next-line no-unused-expressions\n\t\t\tarr[preferredDoc.childNodes.length].nodeType;\n\t\t} catch (e) {\n\t\t\tpush = {\n\t\t\t\tapply: function (target, els) {\n\t\t\t\t\tpushNative.apply(target, slice.call(els));\n\t\t\t\t},\n\t\t\t\tcall: function (target) {\n\t\t\t\t\tpushNative.apply(target, slice.call(arguments, 1));\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\n\t\tfunction find(selector, context, results, seed) {\n\t\t\tvar m, i, elem, nid, match, groups, newSelector,\n\t\t\t\tnewContext = context && context.ownerDocument,\n\n\t\t\t\t// nodeType defaults to 9, since context defaults to document\n\t\t\t\tnodeType = context ? context.nodeType : 9;\n\n\t\t\tresults = results || [];\n\n\t\t\t// Return early from calls with invalid selector or context\n\t\t\tif (typeof selector !== \"string\" || !selector ||\n\t\t\t\tnodeType !== 1 && nodeType !== 9 && nodeType !== 11) {\n\n\t\t\t\treturn results;\n\t\t\t}\n\n\t\t\t// Try to shortcut find operations (as opposed to filters) in HTML documents\n\t\t\tif (!seed) {\n\t\t\t\tsetDocument(context);\n\t\t\t\tcontext = context || document;\n\n\t\t\t\tif (documentIsHTML) {\n\n\t\t\t\t\t// If the selector is sufficiently simple, try using a \"get*By*\" DOM method\n\t\t\t\t\t// (excepting DocumentFragment context, where the methods don't exist)\n\t\t\t\t\tif (nodeType !== 11 && (match = rquickExpr.exec(selector))) {\n\n\t\t\t\t\t\t// ID selector\n\t\t\t\t\t\tif ((m = match[1])) {\n\n\t\t\t\t\t\t\t// Document context\n\t\t\t\t\t\t\tif (nodeType === 9) {\n\t\t\t\t\t\t\t\tif ((elem = context.getElementById(m))) {\n\n\t\t\t\t\t\t\t\t\t// Support: IE 9 only\n\t\t\t\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\t\t\t\tif (elem.id === m) {\n\t\t\t\t\t\t\t\t\t\tpush.call(results, elem);\n\t\t\t\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t// Element context\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t// Support: IE 9 only\n\t\t\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\t\t\tif (newContext && (elem = newContext.getElementById(m)) &&\n\t\t\t\t\t\t\t\t\tfind.contains(context, elem) &&\n\t\t\t\t\t\t\t\t\telem.id === m) {\n\n\t\t\t\t\t\t\t\t\tpush.call(results, elem);\n\t\t\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Type selector\n\t\t\t\t\t\t} else if (match[2]) {\n\t\t\t\t\t\t\tpush.apply(results, context.getElementsByTagName(selector));\n\t\t\t\t\t\t\treturn results;\n\n\t\t\t\t\t\t\t// Class selector\n\t\t\t\t\t\t} else if ((m = match[3]) && context.getElementsByClassName) {\n\t\t\t\t\t\t\tpush.apply(results, context.getElementsByClassName(m));\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Take advantage of querySelectorAll\n\t\t\t\t\tif (!nonnativeSelectorCache[selector + \" \"] &&\n\t\t\t\t\t\t(!rbuggyQSA || !rbuggyQSA.test(selector))) {\n\n\t\t\t\t\t\tnewSelector = selector;\n\t\t\t\t\t\tnewContext = context;\n\n\t\t\t\t\t\t// qSA considers elements outside a scoping root when evaluating child or\n\t\t\t\t\t\t// descendant combinators, which is not what we want.\n\t\t\t\t\t\t// In such cases, we work around the behavior by prefixing every selector in the\n\t\t\t\t\t\t// list with an ID selector referencing the scope context.\n\t\t\t\t\t\t// The technique has to be used as well when a leading combinator is used\n\t\t\t\t\t\t// as such selectors are not recognized by querySelectorAll.\n\t\t\t\t\t\t// Thanks to Andrew Dupont for this technique.\n\t\t\t\t\t\tif (nodeType === 1 &&\n\t\t\t\t\t\t\t(rdescend.test(selector) || rleadingCombinator.test(selector))) {\n\n\t\t\t\t\t\t\t// Expand context for sibling selectors\n\t\t\t\t\t\t\tnewContext = rsibling.test(selector) && testContext(context.parentNode) ||\n\t\t\t\t\t\t\t\tcontext;\n\n\t\t\t\t\t\t\t// We can use :scope instead of the ID hack if the browser\n\t\t\t\t\t\t\t// supports it & if we're not changing the context.\n\t\t\t\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when\n\t\t\t\t\t\t\t// strict-comparing two documents; shallow comparisons work.\n\t\t\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\t\t\tif (newContext != context || !support.scope) {\n\n\t\t\t\t\t\t\t\t// Capture the context ID, setting it first if necessary\n\t\t\t\t\t\t\t\tif ((nid = context.getAttribute(\"id\"))) {\n\t\t\t\t\t\t\t\t\tnid = jQuery.escapeSelector(nid);\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tcontext.setAttribute(\"id\", (nid = expando));\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Prefix every selector in the list\n\t\t\t\t\t\t\tgroups = tokenize(selector);\n\t\t\t\t\t\t\ti = groups.length;\n\t\t\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\t\t\tgroups[i] = (nid ? \"#\" + nid : \":scope\") + \" \" +\n\t\t\t\t\t\t\t\t\ttoSelector(groups[i]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tnewSelector = groups.join(\",\");\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tpush.apply(results,\n\t\t\t\t\t\t\t\tnewContext.querySelectorAll(newSelector)\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t} catch (qsaError) {\n\t\t\t\t\t\t\tnonnativeSelectorCache(selector, true);\n\t\t\t\t\t\t} finally {\n\t\t\t\t\t\t\tif (nid === expando) {\n\t\t\t\t\t\t\t\tcontext.removeAttribute(\"id\");\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// All others\n\t\t\treturn select(selector.replace(rtrimCSS, \"$1\"), context, results, seed);\n\t\t}\n\n\t\t/**\n\t\t * Create key-value caches of limited size\n\t\t * @returns {function(string, object)} Returns the Object data after storing it on itself with\n\t\t *\tproperty name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)\n\t\t *\tdeleting the oldest entry\n\t\t */\n\t\tfunction createCache() {\n\t\t\tvar keys = [];\n\n\t\t\tfunction cache(key, value) {\n\n\t\t\t\t// Use (key + \" \") to avoid collision with native prototype properties\n\t\t\t\t// (see https://github.com/jquery/sizzle/issues/157)\n\t\t\t\tif (keys.push(key + \" \") > Expr.cacheLength) {\n\n\t\t\t\t\t// Only keep the most recent entries\n\t\t\t\t\tdelete cache[keys.shift()];\n\t\t\t\t}\n\t\t\t\treturn (cache[key + \" \"] = value);\n\t\t\t}\n\t\t\treturn cache;\n\t\t}\n\n\t\t/**\n\t\t * Mark a function for special use by jQuery selector module\n\t\t * @param {Function} fn The function to mark\n\t\t */\n\t\tfunction markFunction(fn) {\n\t\t\tfn[expando] = true;\n\t\t\treturn fn;\n\t\t}\n\n\t\t/**\n\t\t * Support testing using an element\n\t\t * @param {Function} fn Passed the created element and returns a boolean result\n\t\t */\n\t\tfunction assert(fn) {\n\t\t\tvar el = document.createElement(\"fieldset\");\n\n\t\t\ttry {\n\t\t\t\treturn !!fn(el);\n\t\t\t} catch (e) {\n\t\t\t\treturn false;\n\t\t\t} finally {\n\n\t\t\t\t// Remove from its parent by default\n\t\t\t\tif (el.parentNode) {\n\t\t\t\t\tel.parentNode.removeChild(el);\n\t\t\t\t}\n\n\t\t\t\t// release memory in IE\n\t\t\t\tel = null;\n\t\t\t}\n\t\t}\n\n\t\t/**\n\t\t * Returns a function to use in pseudos for input types\n\t\t * @param {String} type\n\t\t */\n\t\tfunction createInputPseudo(type) {\n\t\t\treturn function (elem) {\n\t\t\t\treturn nodeName(elem, \"input\") && elem.type === type;\n\t\t\t};\n\t\t}\n\n\t\t/**\n\t\t * Returns a function to use in pseudos for buttons\n\t\t * @param {String} type\n\t\t */\n\t\tfunction createButtonPseudo(type) {\n\t\t\treturn function (elem) {\n\t\t\t\treturn (nodeName(elem, \"input\") || nodeName(elem, \"button\")) &&\n\t\t\t\t\telem.type === type;\n\t\t\t};\n\t\t}\n\n\t\t/**\n\t\t * Returns a function to use in pseudos for :enabled/:disabled\n\t\t * @param {Boolean} disabled true for :disabled; false for :enabled\n\t\t */\n\t\tfunction createDisabledPseudo(disabled) {\n\n\t\t\t// Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable\n\t\t\treturn function (elem) {\n\n\t\t\t\t// Only certain elements can match :enabled or :disabled\n\t\t\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled\n\t\t\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled\n\t\t\t\tif (\"form\" in elem) {\n\n\t\t\t\t\t// Check for inherited disabledness on relevant non-disabled elements:\n\t\t\t\t\t// * listed form-associated elements in a disabled fieldset\n\t\t\t\t\t//   https://html.spec.whatwg.org/multipage/forms.html#category-listed\n\t\t\t\t\t//   https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled\n\t\t\t\t\t// * option elements in a disabled optgroup\n\t\t\t\t\t//   https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled\n\t\t\t\t\t// All such elements have a \"form\" property.\n\t\t\t\t\tif (elem.parentNode && elem.disabled === false) {\n\n\t\t\t\t\t\t// Option elements defer to a parent optgroup if present\n\t\t\t\t\t\tif (\"label\" in elem) {\n\t\t\t\t\t\t\tif (\"label\" in elem.parentNode) {\n\t\t\t\t\t\t\t\treturn elem.parentNode.disabled === disabled;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\treturn elem.disabled === disabled;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Support: IE 6 - 11+\n\t\t\t\t\t\t// Use the isDisabled shortcut property to check for disabled fieldset ancestors\n\t\t\t\t\t\treturn elem.isDisabled === disabled ||\n\n\t\t\t\t\t\t\t// Where there is no isDisabled, check manually\n\t\t\t\t\t\t\telem.isDisabled !== !disabled &&\n\t\t\t\t\t\t\tinDisabledFieldset(elem) === disabled;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn elem.disabled === disabled;\n\n\t\t\t\t\t// Try to winnow out elements that can't be disabled before trusting the disabled property.\n\t\t\t\t\t// Some victims get caught in our net (label, legend, menu, track), but it shouldn't\n\t\t\t\t\t// even exist on them, let alone have a boolean value.\n\t\t\t\t} else if (\"label\" in elem) {\n\t\t\t\t\treturn elem.disabled === disabled;\n\t\t\t\t}\n\n\t\t\t\t// Remaining elements are neither :enabled nor :disabled\n\t\t\t\treturn false;\n\t\t\t};\n\t\t}\n\n\t\t/**\n\t\t * Returns a function to use in pseudos for positionals\n\t\t * @param {Function} fn\n\t\t */\n\t\tfunction createPositionalPseudo(fn) {\n\t\t\treturn markFunction(function (argument) {\n\t\t\t\targument = +argument;\n\t\t\t\treturn markFunction(function (seed, matches) {\n\t\t\t\t\tvar j,\n\t\t\t\t\t\tmatchIndexes = fn([], seed.length, argument),\n\t\t\t\t\t\ti = matchIndexes.length;\n\n\t\t\t\t\t// Match elements found at the specified indexes\n\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\tif (seed[(j = matchIndexes[i])]) {\n\t\t\t\t\t\t\tseed[j] = !(matches[j] = seed[j]);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\n\t\t/**\n\t\t * Checks a node for validity as a jQuery selector context\n\t\t * @param {Element|Object=} context\n\t\t * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value\n\t\t */\n\t\tfunction testContext(context) {\n\t\t\treturn context && typeof context.getElementsByTagName !== \"undefined\" && context;\n\t\t}\n\n\t\t/**\n\t\t * Sets document-related variables once based on the current document\n\t\t * @param {Element|Object} [node] An element or document object to use to set the document\n\t\t * @returns {Object} Returns the current document\n\t\t */\n\t\tfunction setDocument(node) {\n\t\t\tvar subWindow,\n\t\t\t\tdoc = node ? node.ownerDocument || node : preferredDoc;\n\n\t\t\t// Return early if doc is invalid or already selected\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tif (doc == document || doc.nodeType !== 9 || !doc.documentElement) {\n\t\t\t\treturn document;\n\t\t\t}\n\n\t\t\t// Update global variables\n\t\t\tdocument = doc;\n\t\t\tdocumentElement = document.documentElement;\n\t\t\tdocumentIsHTML = !jQuery.isXMLDoc(document);\n\n\t\t\t// Support: iOS 7 only, IE 9 - 11+\n\t\t\t// Older browsers didn't support unprefixed `matches`.\n\t\t\tmatches = documentElement.matches ||\n\t\t\t\tdocumentElement.webkitMatchesSelector ||\n\t\t\t\tdocumentElement.msMatchesSelector;\n\n\t\t\t// Support: IE 9 - 11+, Edge 12 - 18+\n\t\t\t// Accessing iframe documents after unload throws \"permission denied\" errors (see trac-13936)\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tif (preferredDoc != document &&\n\t\t\t\t(subWindow = document.defaultView) && subWindow.top !== subWindow) {\n\n\t\t\t\t// Support: IE 9 - 11+, Edge 12 - 18+\n\t\t\t\tsubWindow.addEventListener(\"unload\", unloadHandler);\n\t\t\t}\n\n\t\t\t// Support: IE <10\n\t\t\t// Check if getElementById returns elements by name\n\t\t\t// The broken getElementById methods don't pick up programmatically-set names,\n\t\t\t// so use a roundabout getElementsByName test\n\t\t\tsupport.getById = assert(function (el) {\n\t\t\t\tdocumentElement.appendChild(el).id = jQuery.expando;\n\t\t\t\treturn !document.getElementsByName ||\n\t\t\t\t\t!document.getElementsByName(jQuery.expando).length;\n\t\t\t});\n\n\t\t\t// Support: IE 9 only\n\t\t\t// Check to see if it's possible to do matchesSelector\n\t\t\t// on a disconnected node.\n\t\t\tsupport.disconnectedMatch = assert(function (el) {\n\t\t\t\treturn matches.call(el, \"*\");\n\t\t\t});\n\n\t\t\t// Support: IE 9 - 11+, Edge 12 - 18+\n\t\t\t// IE/Edge don't support the :scope pseudo-class.\n\t\t\tsupport.scope = assert(function () {\n\t\t\t\treturn document.querySelectorAll(\":scope\");\n\t\t\t});\n\n\t\t\t// Support: Chrome 105 - 111 only, Safari 15.4 - 16.3 only\n\t\t\t// Make sure the `:has()` argument is parsed unforgivingly.\n\t\t\t// We include `*` in the test to detect buggy implementations that are\n\t\t\t// _selectively_ forgiving (specifically when the list includes at least\n\t\t\t// one valid selector).\n\t\t\t// Note that we treat complete lack of support for `:has()` as if it were\n\t\t\t// spec-compliant support, which is fine because use of `:has()` in such\n\t\t\t// environments will fail in the qSA path and fall back to jQuery traversal\n\t\t\t// anyway.\n\t\t\tsupport.cssHas = assert(function () {\n\t\t\t\ttry {\n\t\t\t\t\tdocument.querySelector(\":has(*,:jqfake)\");\n\t\t\t\t\treturn false;\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t// ID filter and find\n\t\t\tif (support.getById) {\n\t\t\t\tExpr.filter.ID = function (id) {\n\t\t\t\t\tvar attrId = id.replace(runescape, funescape);\n\t\t\t\t\treturn function (elem) {\n\t\t\t\t\t\treturn elem.getAttribute(\"id\") === attrId;\n\t\t\t\t\t};\n\t\t\t\t};\n\t\t\t\tExpr.find.ID = function (id, context) {\n\t\t\t\t\tif (typeof context.getElementById !== \"undefined\" && documentIsHTML) {\n\t\t\t\t\t\tvar elem = context.getElementById(id);\n\t\t\t\t\t\treturn elem ? [elem] : [];\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t} else {\n\t\t\t\tExpr.filter.ID = function (id) {\n\t\t\t\t\tvar attrId = id.replace(runescape, funescape);\n\t\t\t\t\treturn function (elem) {\n\t\t\t\t\t\tvar node = typeof elem.getAttributeNode !== \"undefined\" &&\n\t\t\t\t\t\t\telem.getAttributeNode(\"id\");\n\t\t\t\t\t\treturn node && node.value === attrId;\n\t\t\t\t\t};\n\t\t\t\t};\n\n\t\t\t\t// Support: IE 6 - 7 only\n\t\t\t\t// getElementById is not reliable as a find shortcut\n\t\t\t\tExpr.find.ID = function (id, context) {\n\t\t\t\t\tif (typeof context.getElementById !== \"undefined\" && documentIsHTML) {\n\t\t\t\t\t\tvar node, i, elems,\n\t\t\t\t\t\t\telem = context.getElementById(id);\n\n\t\t\t\t\t\tif (elem) {\n\n\t\t\t\t\t\t\t// Verify the id attribute\n\t\t\t\t\t\t\tnode = elem.getAttributeNode(\"id\");\n\t\t\t\t\t\t\tif (node && node.value === id) {\n\t\t\t\t\t\t\t\treturn [elem];\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Fall back on getElementsByName\n\t\t\t\t\t\t\telems = context.getElementsByName(id);\n\t\t\t\t\t\t\ti = 0;\n\t\t\t\t\t\t\twhile ((elem = elems[i++])) {\n\t\t\t\t\t\t\t\tnode = elem.getAttributeNode(\"id\");\n\t\t\t\t\t\t\t\tif (node && node.value === id) {\n\t\t\t\t\t\t\t\t\treturn [elem];\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn [];\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\n\t\t\t// Tag\n\t\t\tExpr.find.TAG = function (tag, context) {\n\t\t\t\tif (typeof context.getElementsByTagName !== \"undefined\") {\n\t\t\t\t\treturn context.getElementsByTagName(tag);\n\n\t\t\t\t\t// DocumentFragment nodes don't have gEBTN\n\t\t\t\t} else {\n\t\t\t\t\treturn context.querySelectorAll(tag);\n\t\t\t\t}\n\t\t\t};\n\n\t\t\t// Class\n\t\t\tExpr.find.CLASS = function (className, context) {\n\t\t\t\tif (typeof context.getElementsByClassName !== \"undefined\" && documentIsHTML) {\n\t\t\t\t\treturn context.getElementsByClassName(className);\n\t\t\t\t}\n\t\t\t};\n\n\t\t\t/* QSA/matchesSelector\n\t\t\t---------------------------------------------------------------------- */\n\n\t\t\t// QSA and matchesSelector support\n\n\t\t\trbuggyQSA = [];\n\n\t\t\t// Build QSA regex\n\t\t\t// Regex strategy adopted from Diego Perini\n\t\t\tassert(function (el) {\n\n\t\t\t\tvar input;\n\n\t\t\t\tdocumentElement.appendChild(el).innerHTML =\n\t\t\t\t\t\"<a id='\" + expando + \"' href='' disabled='disabled'></a>\" +\n\t\t\t\t\t\"<select id='\" + expando + \"-\\r\\\\' disabled='disabled'>\" +\n\t\t\t\t\t\"<option selected=''></option></select>\";\n\n\t\t\t\t// Support: iOS <=7 - 8 only\n\t\t\t\t// Boolean attributes and \"value\" are not treated correctly in some XML documents\n\t\t\t\tif (!el.querySelectorAll(\"[selected]\").length) {\n\t\t\t\t\trbuggyQSA.push(\"\\\\[\" + whitespace + \"*(?:value|\" + booleans + \")\");\n\t\t\t\t}\n\n\t\t\t\t// Support: iOS <=7 - 8 only\n\t\t\t\tif (!el.querySelectorAll(\"[id~=\" + expando + \"-]\").length) {\n\t\t\t\t\trbuggyQSA.push(\"~=\");\n\t\t\t\t}\n\n\t\t\t\t// Support: iOS 8 only\n\t\t\t\t// https://bugs.webkit.org/show_bug.cgi?id=136851\n\t\t\t\t// In-page `selector#id sibling-combinator selector` fails\n\t\t\t\tif (!el.querySelectorAll(\"a#\" + expando + \"+*\").length) {\n\t\t\t\t\trbuggyQSA.push(\".#.+[+~]\");\n\t\t\t\t}\n\n\t\t\t\t// Support: Chrome <=105+, Firefox <=104+, Safari <=15.4+\n\t\t\t\t// In some of the document kinds, these selectors wouldn't work natively.\n\t\t\t\t// This is probably OK but for backwards compatibility we want to maintain\n\t\t\t\t// handling them through jQuery traversal in jQuery 3.x.\n\t\t\t\tif (!el.querySelectorAll(\":checked\").length) {\n\t\t\t\t\trbuggyQSA.push(\":checked\");\n\t\t\t\t}\n\n\t\t\t\t// Support: Windows 8 Native Apps\n\t\t\t\t// The type and name attributes are restricted during .innerHTML assignment\n\t\t\t\tinput = document.createElement(\"input\");\n\t\t\t\tinput.setAttribute(\"type\", \"hidden\");\n\t\t\t\tel.appendChild(input).setAttribute(\"name\", \"D\");\n\n\t\t\t\t// Support: IE 9 - 11+\n\t\t\t\t// IE's :disabled selector does not pick up the children of disabled fieldsets\n\t\t\t\t// Support: Chrome <=105+, Firefox <=104+, Safari <=15.4+\n\t\t\t\t// In some of the document kinds, these selectors wouldn't work natively.\n\t\t\t\t// This is probably OK but for backwards compatibility we want to maintain\n\t\t\t\t// handling them through jQuery traversal in jQuery 3.x.\n\t\t\t\tdocumentElement.appendChild(el).disabled = true;\n\t\t\t\tif (el.querySelectorAll(\":disabled\").length !== 2) {\n\t\t\t\t\trbuggyQSA.push(\":enabled\", \":disabled\");\n\t\t\t\t}\n\n\t\t\t\t// Support: IE 11+, Edge 15 - 18+\n\t\t\t\t// IE 11/Edge don't find elements on a `[name='']` query in some cases.\n\t\t\t\t// Adding a temporary attribute to the document before the selection works\n\t\t\t\t// around the issue.\n\t\t\t\t// Interestingly, IE 10 & older don't seem to have the issue.\n\t\t\t\tinput = document.createElement(\"input\");\n\t\t\t\tinput.setAttribute(\"name\", \"\");\n\t\t\t\tel.appendChild(input);\n\t\t\t\tif (!el.querySelectorAll(\"[name='']\").length) {\n\t\t\t\t\trbuggyQSA.push(\"\\\\[\" + whitespace + \"*name\" + whitespace + \"*=\" +\n\t\t\t\t\t\twhitespace + \"*(?:''|\\\"\\\")\");\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tif (!support.cssHas) {\n\n\t\t\t\t// Support: Chrome 105 - 110+, Safari 15.4 - 16.3+\n\t\t\t\t// Our regular `try-catch` mechanism fails to detect natively-unsupported\n\t\t\t\t// pseudo-classes inside `:has()` (such as `:has(:contains(\"Foo\"))`)\n\t\t\t\t// in browsers that parse the `:has()` argument as a forgiving selector list.\n\t\t\t\t// https://drafts.csswg.org/selectors/#relational now requires the argument\n\t\t\t\t// to be parsed unforgivingly, but browsers have not yet fully adjusted.\n\t\t\t\trbuggyQSA.push(\":has\");\n\t\t\t}\n\n\t\t\trbuggyQSA = rbuggyQSA.length && new RegExp(rbuggyQSA.join(\"|\"));\n\n\t\t\t/* Sorting\n\t\t\t---------------------------------------------------------------------- */\n\n\t\t\t// Document order sorting\n\t\t\tsortOrder = function (a, b) {\n\n\t\t\t\t// Flag for duplicate removal\n\t\t\t\tif (a === b) {\n\t\t\t\t\thasDuplicate = true;\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\n\t\t\t\t// Sort on method existence if only one input has compareDocumentPosition\n\t\t\t\tvar compare = !a.compareDocumentPosition - !b.compareDocumentPosition;\n\t\t\t\tif (compare) {\n\t\t\t\t\treturn compare;\n\t\t\t\t}\n\n\t\t\t\t// Calculate position if both inputs belong to the same document\n\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\tcompare = (a.ownerDocument || a) == (b.ownerDocument || b) ?\n\t\t\t\t\ta.compareDocumentPosition(b) :\n\n\t\t\t\t\t// Otherwise we know they are disconnected\n\t\t\t\t\t1;\n\n\t\t\t\t// Disconnected nodes\n\t\t\t\tif (compare & 1 ||\n\t\t\t\t\t(!support.sortDetached && b.compareDocumentPosition(a) === compare)) {\n\n\t\t\t\t\t// Choose the first element that is related to our preferred document\n\t\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\tif (a === document || a.ownerDocument == preferredDoc &&\n\t\t\t\t\t\tfind.contains(preferredDoc, a)) {\n\t\t\t\t\t\treturn -1;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\tif (b === document || b.ownerDocument == preferredDoc &&\n\t\t\t\t\t\tfind.contains(preferredDoc, b)) {\n\t\t\t\t\t\treturn 1;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Maintain original order\n\t\t\t\t\treturn sortInput ?\n\t\t\t\t\t\t(indexOf.call(sortInput, a) - indexOf.call(sortInput, b)) :\n\t\t\t\t\t\t0;\n\t\t\t\t}\n\n\t\t\t\treturn compare & 4 ? -1 : 1;\n\t\t\t};\n\n\t\t\treturn document;\n\t\t}\n\n\t\tfind.matches = function (expr, elements) {\n\t\t\treturn find(expr, null, null, elements);\n\t\t};\n\n\t\tfind.matchesSelector = function (elem, expr) {\n\t\t\tsetDocument(elem);\n\n\t\t\tif (documentIsHTML &&\n\t\t\t\t!nonnativeSelectorCache[expr + \" \"] &&\n\t\t\t\t(!rbuggyQSA || !rbuggyQSA.test(expr))) {\n\n\t\t\t\ttry {\n\t\t\t\t\tvar ret = matches.call(elem, expr);\n\n\t\t\t\t\t// IE 9's matchesSelector returns false on disconnected nodes\n\t\t\t\t\tif (ret || support.disconnectedMatch ||\n\n\t\t\t\t\t\t// As well, disconnected nodes are said to be in a document\n\t\t\t\t\t\t// fragment in IE 9\n\t\t\t\t\t\telem.document && elem.document.nodeType !== 11) {\n\t\t\t\t\t\treturn ret;\n\t\t\t\t\t}\n\t\t\t\t} catch (e) {\n\t\t\t\t\tnonnativeSelectorCache(expr, true);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn find(expr, document, null, [elem]).length > 0;\n\t\t};\n\n\t\tfind.contains = function (context, elem) {\n\n\t\t\t// Set document vars if needed\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tif ((context.ownerDocument || context) != document) {\n\t\t\t\tsetDocument(context);\n\t\t\t}\n\t\t\treturn jQuery.contains(context, elem);\n\t\t};\n\n\n\t\tfind.attr = function (elem, name) {\n\n\t\t\t// Set document vars if needed\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tif ((elem.ownerDocument || elem) != document) {\n\t\t\t\tsetDocument(elem);\n\t\t\t}\n\n\t\t\tvar fn = Expr.attrHandle[name.toLowerCase()],\n\n\t\t\t\t// Don't get fooled by Object.prototype properties (see trac-13807)\n\t\t\t\tval = fn && hasOwn.call(Expr.attrHandle, name.toLowerCase()) ?\n\t\t\t\t\tfn(elem, name, !documentIsHTML) :\n\t\t\t\t\tundefined;\n\n\t\t\tif (val !== undefined) {\n\t\t\t\treturn val;\n\t\t\t}\n\n\t\t\treturn elem.getAttribute(name);\n\t\t};\n\n\t\tfind.error = function (msg) {\n\t\t\tthrow new Error(\"Syntax error, unrecognized expression: \" + msg);\n\t\t};\n\n\t\t/**\n\t\t * Document sorting and removing duplicates\n\t\t * @param {ArrayLike} results\n\t\t */\n\t\tjQuery.uniqueSort = function (results) {\n\t\t\tvar elem,\n\t\t\t\tduplicates = [],\n\t\t\t\tj = 0,\n\t\t\t\ti = 0;\n\n\t\t\t// Unless we *know* we can detect duplicates, assume their presence\n\t\t\t//\n\t\t\t// Support: Android <=4.0+\n\t\t\t// Testing for detecting duplicates is unpredictable so instead assume we can't\n\t\t\t// depend on duplicate detection in all browsers without a stable sort.\n\t\t\thasDuplicate = !support.sortStable;\n\t\t\tsortInput = !support.sortStable && slice.call(results, 0);\n\t\t\tsort.call(results, sortOrder);\n\n\t\t\tif (hasDuplicate) {\n\t\t\t\twhile ((elem = results[i++])) {\n\t\t\t\t\tif (elem === results[i]) {\n\t\t\t\t\t\tj = duplicates.push(i);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\twhile (j--) {\n\t\t\t\t\tsplice.call(results, duplicates[j], 1);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Clear input after sorting to release objects\n\t\t\t// See https://github.com/jquery/sizzle/pull/225\n\t\t\tsortInput = null;\n\n\t\t\treturn results;\n\t\t};\n\n\t\tjQuery.fn.uniqueSort = function () {\n\t\t\treturn this.pushStack(jQuery.uniqueSort(slice.apply(this)));\n\t\t};\n\n\t\tExpr = jQuery.expr = {\n\n\t\t\t// Can be adjusted by the user\n\t\t\tcacheLength: 50,\n\n\t\t\tcreatePseudo: markFunction,\n\n\t\t\tmatch: matchExpr,\n\n\t\t\tattrHandle: {},\n\n\t\t\tfind: {},\n\n\t\t\trelative: {\n\t\t\t\t\">\": { dir: \"parentNode\", first: true },\n\t\t\t\t\" \": { dir: \"parentNode\" },\n\t\t\t\t\"+\": { dir: \"previousSibling\", first: true },\n\t\t\t\t\"~\": { dir: \"previousSibling\" }\n\t\t\t},\n\n\t\t\tpreFilter: {\n\t\t\t\tATTR: function (match) {\n\t\t\t\t\tmatch[1] = match[1].replace(runescape, funescape);\n\n\t\t\t\t\t// Move the given value to match[3] whether quoted or unquoted\n\t\t\t\t\tmatch[3] = (match[3] || match[4] || match[5] || \"\")\n\t\t\t\t\t\t.replace(runescape, funescape);\n\n\t\t\t\t\tif (match[2] === \"~=\") {\n\t\t\t\t\t\tmatch[3] = \" \" + match[3] + \" \";\n\t\t\t\t\t}\n\n\t\t\t\t\treturn match.slice(0, 4);\n\t\t\t\t},\n\n\t\t\t\tCHILD: function (match) {\n\n\t\t\t\t\t/* matches from matchExpr[\"CHILD\"]\n\t\t\t\t\t\t1 type (only|nth|...)\n\t\t\t\t\t\t2 what (child|of-type)\n\t\t\t\t\t\t3 argument (even|odd|\\d*|\\d*n([+-]\\d+)?|...)\n\t\t\t\t\t\t4 xn-component of xn+y argument ([+-]?\\d*n|)\n\t\t\t\t\t\t5 sign of xn-component\n\t\t\t\t\t\t6 x of xn-component\n\t\t\t\t\t\t7 sign of y-component\n\t\t\t\t\t\t8 y of y-component\n\t\t\t\t\t*/\n\t\t\t\t\tmatch[1] = match[1].toLowerCase();\n\n\t\t\t\t\tif (match[1].slice(0, 3) === \"nth\") {\n\n\t\t\t\t\t\t// nth-* requires argument\n\t\t\t\t\t\tif (!match[3]) {\n\t\t\t\t\t\t\tfind.error(match[0]);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// numeric x and y parameters for Expr.filter.CHILD\n\t\t\t\t\t\t// remember that false/true cast respectively to 0/1\n\t\t\t\t\t\tmatch[4] = +(match[4] ?\n\t\t\t\t\t\t\tmatch[5] + (match[6] || 1) :\n\t\t\t\t\t\t\t2 * (match[3] === \"even\" || match[3] === \"odd\")\n\t\t\t\t\t\t);\n\t\t\t\t\t\tmatch[5] = +((match[7] + match[8]) || match[3] === \"odd\");\n\n\t\t\t\t\t\t// other types prohibit arguments\n\t\t\t\t\t} else if (match[3]) {\n\t\t\t\t\t\tfind.error(match[0]);\n\t\t\t\t\t}\n\n\t\t\t\t\treturn match;\n\t\t\t\t},\n\n\t\t\t\tPSEUDO: function (match) {\n\t\t\t\t\tvar excess,\n\t\t\t\t\t\tunquoted = !match[6] && match[2];\n\n\t\t\t\t\tif (matchExpr.CHILD.test(match[0])) {\n\t\t\t\t\t\treturn null;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Accept quoted arguments as-is\n\t\t\t\t\tif (match[3]) {\n\t\t\t\t\t\tmatch[2] = match[4] || match[5] || \"\";\n\n\t\t\t\t\t\t// Strip excess characters from unquoted arguments\n\t\t\t\t\t} else if (unquoted && rpseudo.test(unquoted) &&\n\n\t\t\t\t\t\t// Get excess from tokenize (recursively)\n\t\t\t\t\t\t(excess = tokenize(unquoted, true)) &&\n\n\t\t\t\t\t\t// advance to the next closing parenthesis\n\t\t\t\t\t\t(excess = unquoted.indexOf(\")\", unquoted.length - excess) - unquoted.length)) {\n\n\t\t\t\t\t\t// excess is a negative index\n\t\t\t\t\t\tmatch[0] = match[0].slice(0, excess);\n\t\t\t\t\t\tmatch[2] = unquoted.slice(0, excess);\n\t\t\t\t\t}\n\n\t\t\t\t\t// Return only captures needed by the pseudo filter method (type and argument)\n\t\t\t\t\treturn match.slice(0, 3);\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tfilter: {\n\n\t\t\t\tTAG: function (nodeNameSelector) {\n\t\t\t\t\tvar expectedNodeName = nodeNameSelector.replace(runescape, funescape).toLowerCase();\n\t\t\t\t\treturn nodeNameSelector === \"*\" ?\n\t\t\t\t\t\tfunction () {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t} :\n\t\t\t\t\t\tfunction (elem) {\n\t\t\t\t\t\t\treturn nodeName(elem, expectedNodeName);\n\t\t\t\t\t\t};\n\t\t\t\t},\n\n\t\t\t\tCLASS: function (className) {\n\t\t\t\t\tvar pattern = classCache[className + \" \"];\n\n\t\t\t\t\treturn pattern ||\n\t\t\t\t\t\t(pattern = new RegExp(\"(^|\" + whitespace + \")\" + className +\n\t\t\t\t\t\t\t\"(\" + whitespace + \"|$)\")) &&\n\t\t\t\t\t\tclassCache(className, function (elem) {\n\t\t\t\t\t\t\treturn pattern.test(\n\t\t\t\t\t\t\t\ttypeof elem.className === \"string\" && elem.className ||\n\t\t\t\t\t\t\t\ttypeof elem.getAttribute !== \"undefined\" &&\n\t\t\t\t\t\t\t\telem.getAttribute(\"class\") ||\n\t\t\t\t\t\t\t\t\"\"\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t});\n\t\t\t\t},\n\n\t\t\t\tATTR: function (name, operator, check) {\n\t\t\t\t\treturn function (elem) {\n\t\t\t\t\t\tvar result = find.attr(elem, name);\n\n\t\t\t\t\t\tif (result == null) {\n\t\t\t\t\t\t\treturn operator === \"!=\";\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!operator) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tresult += \"\";\n\n\t\t\t\t\t\tif (operator === \"=\") {\n\t\t\t\t\t\t\treturn result === check;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (operator === \"!=\") {\n\t\t\t\t\t\t\treturn result !== check;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (operator === \"^=\") {\n\t\t\t\t\t\t\treturn check && result.indexOf(check) === 0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (operator === \"*=\") {\n\t\t\t\t\t\t\treturn check && result.indexOf(check) > -1;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (operator === \"$=\") {\n\t\t\t\t\t\t\treturn check && result.slice(-check.length) === check;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (operator === \"~=\") {\n\t\t\t\t\t\t\treturn (\" \" + result.replace(rwhitespace, \" \") + \" \")\n\t\t\t\t\t\t\t\t.indexOf(check) > -1;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (operator === \"|=\") {\n\t\t\t\t\t\t\treturn result === check || result.slice(0, check.length + 1) === check + \"-\";\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t};\n\t\t\t\t},\n\n\t\t\t\tCHILD: function (type, what, _argument, first, last) {\n\t\t\t\t\tvar simple = type.slice(0, 3) !== \"nth\",\n\t\t\t\t\t\tforward = type.slice(-4) !== \"last\",\n\t\t\t\t\t\tofType = what === \"of-type\";\n\n\t\t\t\t\treturn first === 1 && last === 0 ?\n\n\t\t\t\t\t\t// Shortcut for :nth-*(n)\n\t\t\t\t\t\tfunction (elem) {\n\t\t\t\t\t\t\treturn !!elem.parentNode;\n\t\t\t\t\t\t} :\n\n\t\t\t\t\t\tfunction (elem, _context, xml) {\n\t\t\t\t\t\t\tvar cache, outerCache, node, nodeIndex, start,\n\t\t\t\t\t\t\t\tdir = simple !== forward ? \"nextSibling\" : \"previousSibling\",\n\t\t\t\t\t\t\t\tparent = elem.parentNode,\n\t\t\t\t\t\t\t\tname = ofType && elem.nodeName.toLowerCase(),\n\t\t\t\t\t\t\t\tuseCache = !xml && !ofType,\n\t\t\t\t\t\t\t\tdiff = false;\n\n\t\t\t\t\t\t\tif (parent) {\n\n\t\t\t\t\t\t\t\t// :(first|last|only)-(child|of-type)\n\t\t\t\t\t\t\t\tif (simple) {\n\t\t\t\t\t\t\t\t\twhile (dir) {\n\t\t\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\t\t\twhile ((node = node[dir])) {\n\t\t\t\t\t\t\t\t\t\t\tif (ofType ?\n\t\t\t\t\t\t\t\t\t\t\t\tnodeName(node, name) :\n\t\t\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1) {\n\n\t\t\t\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t// Reverse direction for :only-* (if we haven't yet done so)\n\t\t\t\t\t\t\t\t\t\tstart = dir = type === \"only\" && !start && \"nextSibling\";\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tstart = [forward ? parent.firstChild : parent.lastChild];\n\n\t\t\t\t\t\t\t\t// non-xml :nth-child(...) stores cache data on `parent`\n\t\t\t\t\t\t\t\tif (forward && useCache) {\n\n\t\t\t\t\t\t\t\t\t// Seek `elem` from a previously-cached index\n\t\t\t\t\t\t\t\t\touterCache = parent[expando] || (parent[expando] = {});\n\t\t\t\t\t\t\t\t\tcache = outerCache[type] || [];\n\t\t\t\t\t\t\t\t\tnodeIndex = cache[0] === dirruns && cache[1];\n\t\t\t\t\t\t\t\t\tdiff = nodeIndex && cache[2];\n\t\t\t\t\t\t\t\t\tnode = nodeIndex && parent.childNodes[nodeIndex];\n\n\t\t\t\t\t\t\t\t\twhile ((node = ++nodeIndex && node && node[dir] ||\n\n\t\t\t\t\t\t\t\t\t\t// Fallback to seeking `elem` from the start\n\t\t\t\t\t\t\t\t\t\t(diff = nodeIndex = 0) || start.pop())) {\n\n\t\t\t\t\t\t\t\t\t\t// When found, cache indexes on `parent` and break\n\t\t\t\t\t\t\t\t\t\tif (node.nodeType === 1 && ++diff && node === elem) {\n\t\t\t\t\t\t\t\t\t\t\touterCache[type] = [dirruns, nodeIndex, diff];\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t// Use previously-cached element index if available\n\t\t\t\t\t\t\t\t\tif (useCache) {\n\t\t\t\t\t\t\t\t\t\touterCache = elem[expando] || (elem[expando] = {});\n\t\t\t\t\t\t\t\t\t\tcache = outerCache[type] || [];\n\t\t\t\t\t\t\t\t\t\tnodeIndex = cache[0] === dirruns && cache[1];\n\t\t\t\t\t\t\t\t\t\tdiff = nodeIndex;\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// xml :nth-child(...)\n\t\t\t\t\t\t\t\t\t// or :nth-last-child(...) or :nth(-last)?-of-type(...)\n\t\t\t\t\t\t\t\t\tif (diff === false) {\n\n\t\t\t\t\t\t\t\t\t\t// Use the same loop as above to seek `elem` from the start\n\t\t\t\t\t\t\t\t\t\twhile ((node = ++nodeIndex && node && node[dir] ||\n\t\t\t\t\t\t\t\t\t\t\t(diff = nodeIndex = 0) || start.pop())) {\n\n\t\t\t\t\t\t\t\t\t\t\tif ((ofType ?\n\t\t\t\t\t\t\t\t\t\t\t\tnodeName(node, name) :\n\t\t\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1) &&\n\t\t\t\t\t\t\t\t\t\t\t\t++diff) {\n\n\t\t\t\t\t\t\t\t\t\t\t\t// Cache the index of each encountered element\n\t\t\t\t\t\t\t\t\t\t\t\tif (useCache) {\n\t\t\t\t\t\t\t\t\t\t\t\t\touterCache = node[expando] ||\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t(node[expando] = {});\n\t\t\t\t\t\t\t\t\t\t\t\t\touterCache[type] = [dirruns, diff];\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\tif (node === elem) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t// Incorporate the offset, then check against cycle size\n\t\t\t\t\t\t\t\tdiff -= last;\n\t\t\t\t\t\t\t\treturn diff === first || (diff % first === 0 && diff / first >= 0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\t\t\t\t},\n\n\t\t\t\tPSEUDO: function (pseudo, argument) {\n\n\t\t\t\t\t// pseudo-class names are case-insensitive\n\t\t\t\t\t// https://www.w3.org/TR/selectors/#pseudo-classes\n\t\t\t\t\t// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters\n\t\t\t\t\t// Remember that setFilters inherits from pseudos\n\t\t\t\t\tvar args,\n\t\t\t\t\t\tfn = Expr.pseudos[pseudo] || Expr.setFilters[pseudo.toLowerCase()] ||\n\t\t\t\t\t\t\tfind.error(\"unsupported pseudo: \" + pseudo);\n\n\t\t\t\t\t// The user may use createPseudo to indicate that\n\t\t\t\t\t// arguments are needed to create the filter function\n\t\t\t\t\t// just as jQuery does\n\t\t\t\t\tif (fn[expando]) {\n\t\t\t\t\t\treturn fn(argument);\n\t\t\t\t\t}\n\n\t\t\t\t\t// But maintain support for old signatures\n\t\t\t\t\tif (fn.length > 1) {\n\t\t\t\t\t\targs = [pseudo, pseudo, \"\", argument];\n\t\t\t\t\t\treturn Expr.setFilters.hasOwnProperty(pseudo.toLowerCase()) ?\n\t\t\t\t\t\t\tmarkFunction(function (seed, matches) {\n\t\t\t\t\t\t\t\tvar idx,\n\t\t\t\t\t\t\t\t\tmatched = fn(seed, argument),\n\t\t\t\t\t\t\t\t\ti = matched.length;\n\t\t\t\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\t\t\t\tidx = indexOf.call(seed, matched[i]);\n\t\t\t\t\t\t\t\t\tseed[idx] = !(matches[idx] = matched[i]);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}) :\n\t\t\t\t\t\t\tfunction (elem) {\n\t\t\t\t\t\t\t\treturn fn(elem, 0, args);\n\t\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\treturn fn;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tpseudos: {\n\n\t\t\t\t// Potentially complex pseudos\n\t\t\t\tnot: markFunction(function (selector) {\n\n\t\t\t\t\t// Trim the selector passed to compile\n\t\t\t\t\t// to avoid treating leading and trailing\n\t\t\t\t\t// spaces as combinators\n\t\t\t\t\tvar input = [],\n\t\t\t\t\t\tresults = [],\n\t\t\t\t\t\tmatcher = compile(selector.replace(rtrimCSS, \"$1\"));\n\n\t\t\t\t\treturn matcher[expando] ?\n\t\t\t\t\t\tmarkFunction(function (seed, matches, _context, xml) {\n\t\t\t\t\t\t\tvar elem,\n\t\t\t\t\t\t\t\tunmatched = matcher(seed, null, xml, []),\n\t\t\t\t\t\t\t\ti = seed.length;\n\n\t\t\t\t\t\t\t// Match elements unmatched by `matcher`\n\t\t\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\t\t\tif ((elem = unmatched[i])) {\n\t\t\t\t\t\t\t\t\tseed[i] = !(matches[i] = elem);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}) :\n\t\t\t\t\t\tfunction (elem, _context, xml) {\n\t\t\t\t\t\t\tinput[0] = elem;\n\t\t\t\t\t\t\tmatcher(input, null, xml, results);\n\n\t\t\t\t\t\t\t// Don't keep the element\n\t\t\t\t\t\t\t// (see https://github.com/jquery/sizzle/issues/299)\n\t\t\t\t\t\t\tinput[0] = null;\n\t\t\t\t\t\t\treturn !results.pop();\n\t\t\t\t\t\t};\n\t\t\t\t}),\n\n\t\t\t\thas: markFunction(function (selector) {\n\t\t\t\t\treturn function (elem) {\n\t\t\t\t\t\treturn find(selector, elem).length > 0;\n\t\t\t\t\t};\n\t\t\t\t}),\n\n\t\t\t\tcontains: markFunction(function (text) {\n\t\t\t\t\ttext = text.replace(runescape, funescape);\n\t\t\t\t\treturn function (elem) {\n\t\t\t\t\t\treturn (elem.textContent || jQuery.text(elem)).indexOf(text) > -1;\n\t\t\t\t\t};\n\t\t\t\t}),\n\n\t\t\t\t// \"Whether an element is represented by a :lang() selector\n\t\t\t\t// is based solely on the element's language value\n\t\t\t\t// being equal to the identifier C,\n\t\t\t\t// or beginning with the identifier C immediately followed by \"-\".\n\t\t\t\t// The matching of C against the element's language value is performed case-insensitively.\n\t\t\t\t// The identifier C does not have to be a valid language name.\"\n\t\t\t\t// https://www.w3.org/TR/selectors/#lang-pseudo\n\t\t\t\tlang: markFunction(function (lang) {\n\n\t\t\t\t\t// lang value must be a valid identifier\n\t\t\t\t\tif (!ridentifier.test(lang || \"\")) {\n\t\t\t\t\t\tfind.error(\"unsupported lang: \" + lang);\n\t\t\t\t\t}\n\t\t\t\t\tlang = lang.replace(runescape, funescape).toLowerCase();\n\t\t\t\t\treturn function (elem) {\n\t\t\t\t\t\tvar elemLang;\n\t\t\t\t\t\tdo {\n\t\t\t\t\t\t\tif ((elemLang = documentIsHTML ?\n\t\t\t\t\t\t\t\telem.lang :\n\t\t\t\t\t\t\t\telem.getAttribute(\"xml:lang\") || elem.getAttribute(\"lang\"))) {\n\n\t\t\t\t\t\t\t\telemLang = elemLang.toLowerCase();\n\t\t\t\t\t\t\t\treturn elemLang === lang || elemLang.indexOf(lang + \"-\") === 0;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} while ((elem = elem.parentNode) && elem.nodeType === 1);\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t};\n\t\t\t\t}),\n\n\t\t\t\t// Miscellaneous\n\t\t\t\ttarget: function (elem) {\n\t\t\t\t\tvar hash = window.location && window.location.hash;\n\t\t\t\t\treturn hash && hash.slice(1) === elem.id;\n\t\t\t\t},\n\n\t\t\t\troot: function (elem) {\n\t\t\t\t\treturn elem === documentElement;\n\t\t\t\t},\n\n\t\t\t\tfocus: function (elem) {\n\t\t\t\t\treturn elem === safeActiveElement() &&\n\t\t\t\t\t\tdocument.hasFocus() &&\n\t\t\t\t\t\t!!(elem.type || elem.href || ~elem.tabIndex);\n\t\t\t\t},\n\n\t\t\t\t// Boolean properties\n\t\t\t\tenabled: createDisabledPseudo(false),\n\t\t\t\tdisabled: createDisabledPseudo(true),\n\n\t\t\t\tchecked: function (elem) {\n\n\t\t\t\t\t// In CSS3, :checked should return both checked and selected elements\n\t\t\t\t\t// https://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\t\t\treturn (nodeName(elem, \"input\") && !!elem.checked) ||\n\t\t\t\t\t\t(nodeName(elem, \"option\") && !!elem.selected);\n\t\t\t\t},\n\n\t\t\t\tselected: function (elem) {\n\n\t\t\t\t\t// Support: IE <=11+\n\t\t\t\t\t// Accessing the selectedIndex property\n\t\t\t\t\t// forces the browser to treat the default option as\n\t\t\t\t\t// selected when in an optgroup.\n\t\t\t\t\tif (elem.parentNode) {\n\t\t\t\t\t\t// eslint-disable-next-line no-unused-expressions\n\t\t\t\t\t\telem.parentNode.selectedIndex;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn elem.selected === true;\n\t\t\t\t},\n\n\t\t\t\t// Contents\n\t\t\t\tempty: function (elem) {\n\n\t\t\t\t\t// https://www.w3.org/TR/selectors/#empty-pseudo\n\t\t\t\t\t// :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),\n\t\t\t\t\t//   but not by others (comment: 8; processing instruction: 7; etc.)\n\t\t\t\t\t// nodeType < 6 works because attributes (2) do not appear as children\n\t\t\t\t\tfor (elem = elem.firstChild; elem; elem = elem.nextSibling) {\n\t\t\t\t\t\tif (elem.nodeType < 6) {\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn true;\n\t\t\t\t},\n\n\t\t\t\tparent: function (elem) {\n\t\t\t\t\treturn !Expr.pseudos.empty(elem);\n\t\t\t\t},\n\n\t\t\t\t// Element/input types\n\t\t\t\theader: function (elem) {\n\t\t\t\t\treturn rheader.test(elem.nodeName);\n\t\t\t\t},\n\n\t\t\t\tinput: function (elem) {\n\t\t\t\t\treturn rinputs.test(elem.nodeName);\n\t\t\t\t},\n\n\t\t\t\tbutton: function (elem) {\n\t\t\t\t\treturn nodeName(elem, \"input\") && elem.type === \"button\" ||\n\t\t\t\t\t\tnodeName(elem, \"button\");\n\t\t\t\t},\n\n\t\t\t\ttext: function (elem) {\n\t\t\t\t\tvar attr;\n\t\t\t\t\treturn nodeName(elem, \"input\") && elem.type === \"text\" &&\n\n\t\t\t\t\t\t// Support: IE <10 only\n\t\t\t\t\t\t// New HTML5 attribute values (e.g., \"search\") appear\n\t\t\t\t\t\t// with elem.type === \"text\"\n\t\t\t\t\t\t((attr = elem.getAttribute(\"type\")) == null ||\n\t\t\t\t\t\t\tattr.toLowerCase() === \"text\");\n\t\t\t\t},\n\n\t\t\t\t// Position-in-collection\n\t\t\t\tfirst: createPositionalPseudo(function () {\n\t\t\t\t\treturn [0];\n\t\t\t\t}),\n\n\t\t\t\tlast: createPositionalPseudo(function (_matchIndexes, length) {\n\t\t\t\t\treturn [length - 1];\n\t\t\t\t}),\n\n\t\t\t\teq: createPositionalPseudo(function (_matchIndexes, length, argument) {\n\t\t\t\t\treturn [argument < 0 ? argument + length : argument];\n\t\t\t\t}),\n\n\t\t\t\teven: createPositionalPseudo(function (matchIndexes, length) {\n\t\t\t\t\tvar i = 0;\n\t\t\t\t\tfor (; i < length; i += 2) {\n\t\t\t\t\t\tmatchIndexes.push(i);\n\t\t\t\t\t}\n\t\t\t\t\treturn matchIndexes;\n\t\t\t\t}),\n\n\t\t\t\todd: createPositionalPseudo(function (matchIndexes, length) {\n\t\t\t\t\tvar i = 1;\n\t\t\t\t\tfor (; i < length; i += 2) {\n\t\t\t\t\t\tmatchIndexes.push(i);\n\t\t\t\t\t}\n\t\t\t\t\treturn matchIndexes;\n\t\t\t\t}),\n\n\t\t\t\tlt: createPositionalPseudo(function (matchIndexes, length, argument) {\n\t\t\t\t\tvar i;\n\n\t\t\t\t\tif (argument < 0) {\n\t\t\t\t\t\ti = argument + length;\n\t\t\t\t\t} else if (argument > length) {\n\t\t\t\t\t\ti = length;\n\t\t\t\t\t} else {\n\t\t\t\t\t\ti = argument;\n\t\t\t\t\t}\n\n\t\t\t\t\tfor (; --i >= 0;) {\n\t\t\t\t\t\tmatchIndexes.push(i);\n\t\t\t\t\t}\n\t\t\t\t\treturn matchIndexes;\n\t\t\t\t}),\n\n\t\t\t\tgt: createPositionalPseudo(function (matchIndexes, length, argument) {\n\t\t\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\t\t\tfor (; ++i < length;) {\n\t\t\t\t\t\tmatchIndexes.push(i);\n\t\t\t\t\t}\n\t\t\t\t\treturn matchIndexes;\n\t\t\t\t})\n\t\t\t}\n\t\t};\n\n\t\tExpr.pseudos.nth = Expr.pseudos.eq;\n\n\t\t// Add button/input type pseudos\n\t\tfor (i in { radio: true, checkbox: true, file: true, password: true, image: true }) {\n\t\t\tExpr.pseudos[i] = createInputPseudo(i);\n\t\t}\n\t\tfor (i in { submit: true, reset: true }) {\n\t\t\tExpr.pseudos[i] = createButtonPseudo(i);\n\t\t}\n\n\t\t// Easy API for creating new setFilters\n\t\tfunction setFilters() { }\n\t\tsetFilters.prototype = Expr.filters = Expr.pseudos;\n\t\tExpr.setFilters = new setFilters();\n\n\t\tfunction tokenize(selector, parseOnly) {\n\t\t\tvar matched, match, tokens, type,\n\t\t\t\tsoFar, groups, preFilters,\n\t\t\t\tcached = tokenCache[selector + \" \"];\n\n\t\t\tif (cached) {\n\t\t\t\treturn parseOnly ? 0 : cached.slice(0);\n\t\t\t}\n\n\t\t\tsoFar = selector;\n\t\t\tgroups = [];\n\t\t\tpreFilters = Expr.preFilter;\n\n\t\t\twhile (soFar) {\n\n\t\t\t\t// Comma and first run\n\t\t\t\tif (!matched || (match = rcomma.exec(soFar))) {\n\t\t\t\t\tif (match) {\n\n\t\t\t\t\t\t// Don't consume trailing commas as valid\n\t\t\t\t\t\tsoFar = soFar.slice(match[0].length) || soFar;\n\t\t\t\t\t}\n\t\t\t\t\tgroups.push((tokens = []));\n\t\t\t\t}\n\n\t\t\t\tmatched = false;\n\n\t\t\t\t// Combinators\n\t\t\t\tif ((match = rleadingCombinator.exec(soFar))) {\n\t\t\t\t\tmatched = match.shift();\n\t\t\t\t\ttokens.push({\n\t\t\t\t\t\tvalue: matched,\n\n\t\t\t\t\t\t// Cast descendant combinators to space\n\t\t\t\t\t\ttype: match[0].replace(rtrimCSS, \" \")\n\t\t\t\t\t});\n\t\t\t\t\tsoFar = soFar.slice(matched.length);\n\t\t\t\t}\n\n\t\t\t\t// Filters\n\t\t\t\tfor (type in Expr.filter) {\n\t\t\t\t\tif ((match = matchExpr[type].exec(soFar)) && (!preFilters[type] ||\n\t\t\t\t\t\t(match = preFilters[type](match)))) {\n\t\t\t\t\t\tmatched = match.shift();\n\t\t\t\t\t\ttokens.push({\n\t\t\t\t\t\t\tvalue: matched,\n\t\t\t\t\t\t\ttype: type,\n\t\t\t\t\t\t\tmatches: match\n\t\t\t\t\t\t});\n\t\t\t\t\t\tsoFar = soFar.slice(matched.length);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (!matched) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Return the length of the invalid excess\n\t\t\t// if we're just parsing\n\t\t\t// Otherwise, throw an error or return tokens\n\t\t\tif (parseOnly) {\n\t\t\t\treturn soFar.length;\n\t\t\t}\n\n\t\t\treturn soFar ?\n\t\t\t\tfind.error(selector) :\n\n\t\t\t\t// Cache the tokens\n\t\t\t\ttokenCache(selector, groups).slice(0);\n\t\t}\n\n\t\tfunction toSelector(tokens) {\n\t\t\tvar i = 0,\n\t\t\t\tlen = tokens.length,\n\t\t\t\tselector = \"\";\n\t\t\tfor (; i < len; i++) {\n\t\t\t\tselector += tokens[i].value;\n\t\t\t}\n\t\t\treturn selector;\n\t\t}\n\n\t\tfunction addCombinator(matcher, combinator, base) {\n\t\t\tvar dir = combinator.dir,\n\t\t\t\tskip = combinator.next,\n\t\t\t\tkey = skip || dir,\n\t\t\t\tcheckNonElements = base && key === \"parentNode\",\n\t\t\t\tdoneName = done++;\n\n\t\t\treturn combinator.first ?\n\n\t\t\t\t// Check against closest ancestor/preceding element\n\t\t\t\tfunction (elem, context, xml) {\n\t\t\t\t\twhile ((elem = elem[dir])) {\n\t\t\t\t\t\tif (elem.nodeType === 1 || checkNonElements) {\n\t\t\t\t\t\t\treturn matcher(elem, context, xml);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn false;\n\t\t\t\t} :\n\n\t\t\t\t// Check against all ancestor/preceding elements\n\t\t\t\tfunction (elem, context, xml) {\n\t\t\t\t\tvar oldCache, outerCache,\n\t\t\t\t\t\tnewCache = [dirruns, doneName];\n\n\t\t\t\t\t// We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching\n\t\t\t\t\tif (xml) {\n\t\t\t\t\t\twhile ((elem = elem[dir])) {\n\t\t\t\t\t\t\tif (elem.nodeType === 1 || checkNonElements) {\n\t\t\t\t\t\t\t\tif (matcher(elem, context, xml)) {\n\t\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\twhile ((elem = elem[dir])) {\n\t\t\t\t\t\t\tif (elem.nodeType === 1 || checkNonElements) {\n\t\t\t\t\t\t\t\touterCache = elem[expando] || (elem[expando] = {});\n\n\t\t\t\t\t\t\t\tif (skip && nodeName(elem, skip)) {\n\t\t\t\t\t\t\t\t\telem = elem[dir] || elem;\n\t\t\t\t\t\t\t\t} else if ((oldCache = outerCache[key]) &&\n\t\t\t\t\t\t\t\t\toldCache[0] === dirruns && oldCache[1] === doneName) {\n\n\t\t\t\t\t\t\t\t\t// Assign to newCache so results back-propagate to previous elements\n\t\t\t\t\t\t\t\t\treturn (newCache[2] = oldCache[2]);\n\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t// Reuse newcache so results back-propagate to previous elements\n\t\t\t\t\t\t\t\t\touterCache[key] = newCache;\n\n\t\t\t\t\t\t\t\t\t// A match means we're done; a fail means we have to keep checking\n\t\t\t\t\t\t\t\t\tif ((newCache[2] = matcher(elem, context, xml))) {\n\t\t\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn false;\n\t\t\t\t};\n\t\t}\n\n\t\tfunction elementMatcher(matchers) {\n\t\t\treturn matchers.length > 1 ?\n\t\t\t\tfunction (elem, context, xml) {\n\t\t\t\t\tvar i = matchers.length;\n\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\tif (!matchers[i](elem, context, xml)) {\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn true;\n\t\t\t\t} :\n\t\t\t\tmatchers[0];\n\t\t}\n\n\t\tfunction multipleContexts(selector, contexts, results) {\n\t\t\tvar i = 0,\n\t\t\t\tlen = contexts.length;\n\t\t\tfor (; i < len; i++) {\n\t\t\t\tfind(selector, contexts[i], results);\n\t\t\t}\n\t\t\treturn results;\n\t\t}\n\n\t\tfunction condense(unmatched, map, filter, context, xml) {\n\t\t\tvar elem,\n\t\t\t\tnewUnmatched = [],\n\t\t\t\ti = 0,\n\t\t\t\tlen = unmatched.length,\n\t\t\t\tmapped = map != null;\n\n\t\t\tfor (; i < len; i++) {\n\t\t\t\tif ((elem = unmatched[i])) {\n\t\t\t\t\tif (!filter || filter(elem, context, xml)) {\n\t\t\t\t\t\tnewUnmatched.push(elem);\n\t\t\t\t\t\tif (mapped) {\n\t\t\t\t\t\t\tmap.push(i);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn newUnmatched;\n\t\t}\n\n\t\tfunction setMatcher(preFilter, selector, matcher, postFilter, postFinder, postSelector) {\n\t\t\tif (postFilter && !postFilter[expando]) {\n\t\t\t\tpostFilter = setMatcher(postFilter);\n\t\t\t}\n\t\t\tif (postFinder && !postFinder[expando]) {\n\t\t\t\tpostFinder = setMatcher(postFinder, postSelector);\n\t\t\t}\n\t\t\treturn markFunction(function (seed, results, context, xml) {\n\t\t\t\tvar temp, i, elem, matcherOut,\n\t\t\t\t\tpreMap = [],\n\t\t\t\t\tpostMap = [],\n\t\t\t\t\tpreexisting = results.length,\n\n\t\t\t\t\t// Get initial elements from seed or context\n\t\t\t\t\telems = seed ||\n\t\t\t\t\t\tmultipleContexts(selector || \"*\",\n\t\t\t\t\t\t\tcontext.nodeType ? [context] : context, []),\n\n\t\t\t\t\t// Prefilter to get matcher input, preserving a map for seed-results synchronization\n\t\t\t\t\tmatcherIn = preFilter && (seed || !selector) ?\n\t\t\t\t\t\tcondense(elems, preMap, preFilter, context, xml) :\n\t\t\t\t\t\telems;\n\n\t\t\t\tif (matcher) {\n\n\t\t\t\t\t// If we have a postFinder, or filtered seed, or non-seed postFilter\n\t\t\t\t\t// or preexisting results,\n\t\t\t\t\tmatcherOut = postFinder || (seed ? preFilter : preexisting || postFilter) ?\n\n\t\t\t\t\t\t// ...intermediate processing is necessary\n\t\t\t\t\t\t[] :\n\n\t\t\t\t\t\t// ...otherwise use results directly\n\t\t\t\t\t\tresults;\n\n\t\t\t\t\t// Find primary matches\n\t\t\t\t\tmatcher(matcherIn, matcherOut, context, xml);\n\t\t\t\t} else {\n\t\t\t\t\tmatcherOut = matcherIn;\n\t\t\t\t}\n\n\t\t\t\t// Apply postFilter\n\t\t\t\tif (postFilter) {\n\t\t\t\t\ttemp = condense(matcherOut, postMap);\n\t\t\t\t\tpostFilter(temp, [], context, xml);\n\n\t\t\t\t\t// Un-match failing elements by moving them back to matcherIn\n\t\t\t\t\ti = temp.length;\n\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\tif ((elem = temp[i])) {\n\t\t\t\t\t\t\tmatcherOut[postMap[i]] = !(matcherIn[postMap[i]] = elem);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (seed) {\n\t\t\t\t\tif (postFinder || preFilter) {\n\t\t\t\t\t\tif (postFinder) {\n\n\t\t\t\t\t\t\t// Get the final matcherOut by condensing this intermediate into postFinder contexts\n\t\t\t\t\t\t\ttemp = [];\n\t\t\t\t\t\t\ti = matcherOut.length;\n\t\t\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\t\t\tif ((elem = matcherOut[i])) {\n\n\t\t\t\t\t\t\t\t\t// Restore matcherIn since elem is not yet a final match\n\t\t\t\t\t\t\t\t\ttemp.push((matcherIn[i] = elem));\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tpostFinder(null, (matcherOut = []), temp, xml);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Move matched elements from seed to results to keep them synchronized\n\t\t\t\t\t\ti = matcherOut.length;\n\t\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\t\tif ((elem = matcherOut[i]) &&\n\t\t\t\t\t\t\t\t(temp = postFinder ? indexOf.call(seed, elem) : preMap[i]) > -1) {\n\n\t\t\t\t\t\t\t\tseed[temp] = !(results[temp] = elem);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Add elements to results, through postFinder if defined\n\t\t\t\t} else {\n\t\t\t\t\tmatcherOut = condense(\n\t\t\t\t\t\tmatcherOut === results ?\n\t\t\t\t\t\t\tmatcherOut.splice(preexisting, matcherOut.length) :\n\t\t\t\t\t\t\tmatcherOut\n\t\t\t\t\t);\n\t\t\t\t\tif (postFinder) {\n\t\t\t\t\t\tpostFinder(null, results, matcherOut, xml);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tpush.apply(results, matcherOut);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tfunction matcherFromTokens(tokens) {\n\t\t\tvar checkContext, matcher, j,\n\t\t\t\tlen = tokens.length,\n\t\t\t\tleadingRelative = Expr.relative[tokens[0].type],\n\t\t\t\timplicitRelative = leadingRelative || Expr.relative[\" \"],\n\t\t\t\ti = leadingRelative ? 1 : 0,\n\n\t\t\t\t// The foundational matcher ensures that elements are reachable from top-level context(s)\n\t\t\t\tmatchContext = addCombinator(function (elem) {\n\t\t\t\t\treturn elem === checkContext;\n\t\t\t\t}, implicitRelative, true),\n\t\t\t\tmatchAnyContext = addCombinator(function (elem) {\n\t\t\t\t\treturn indexOf.call(checkContext, elem) > -1;\n\t\t\t\t}, implicitRelative, true),\n\t\t\t\tmatchers = [function (elem, context, xml) {\n\n\t\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\tvar ret = (!leadingRelative && (xml || context != outermostContext)) || (\n\t\t\t\t\t\t(checkContext = context).nodeType ?\n\t\t\t\t\t\t\tmatchContext(elem, context, xml) :\n\t\t\t\t\t\t\tmatchAnyContext(elem, context, xml));\n\n\t\t\t\t\t// Avoid hanging onto element\n\t\t\t\t\t// (see https://github.com/jquery/sizzle/issues/299)\n\t\t\t\t\tcheckContext = null;\n\t\t\t\t\treturn ret;\n\t\t\t\t}];\n\n\t\t\tfor (; i < len; i++) {\n\t\t\t\tif ((matcher = Expr.relative[tokens[i].type])) {\n\t\t\t\t\tmatchers = [addCombinator(elementMatcher(matchers), matcher)];\n\t\t\t\t} else {\n\t\t\t\t\tmatcher = Expr.filter[tokens[i].type].apply(null, tokens[i].matches);\n\n\t\t\t\t\t// Return special upon seeing a positional matcher\n\t\t\t\t\tif (matcher[expando]) {\n\n\t\t\t\t\t\t// Find the next relative operator (if any) for proper handling\n\t\t\t\t\t\tj = ++i;\n\t\t\t\t\t\tfor (; j < len; j++) {\n\t\t\t\t\t\t\tif (Expr.relative[tokens[j].type]) {\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn setMatcher(\n\t\t\t\t\t\t\ti > 1 && elementMatcher(matchers),\n\t\t\t\t\t\t\ti > 1 && toSelector(\n\n\t\t\t\t\t\t\t\t// If the preceding token was a descendant combinator, insert an implicit any-element `*`\n\t\t\t\t\t\t\t\ttokens.slice(0, i - 1)\n\t\t\t\t\t\t\t\t\t.concat({ value: tokens[i - 2].type === \" \" ? \"*\" : \"\" })\n\t\t\t\t\t\t\t).replace(rtrimCSS, \"$1\"),\n\t\t\t\t\t\t\tmatcher,\n\t\t\t\t\t\t\ti < j && matcherFromTokens(tokens.slice(i, j)),\n\t\t\t\t\t\t\tj < len && matcherFromTokens((tokens = tokens.slice(j))),\n\t\t\t\t\t\t\tj < len && toSelector(tokens)\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\tmatchers.push(matcher);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn elementMatcher(matchers);\n\t\t}\n\n\t\tfunction matcherFromGroupMatchers(elementMatchers, setMatchers) {\n\t\t\tvar bySet = setMatchers.length > 0,\n\t\t\t\tbyElement = elementMatchers.length > 0,\n\t\t\t\tsuperMatcher = function (seed, context, xml, results, outermost) {\n\t\t\t\t\tvar elem, j, matcher,\n\t\t\t\t\t\tmatchedCount = 0,\n\t\t\t\t\t\ti = \"0\",\n\t\t\t\t\t\tunmatched = seed && [],\n\t\t\t\t\t\tsetMatched = [],\n\t\t\t\t\t\tcontextBackup = outermostContext,\n\n\t\t\t\t\t\t// We must always have either seed elements or outermost context\n\t\t\t\t\t\telems = seed || byElement && Expr.find.TAG(\"*\", outermost),\n\n\t\t\t\t\t\t// Use integer dirruns iff this is the outermost matcher\n\t\t\t\t\t\tdirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1),\n\t\t\t\t\t\tlen = elems.length;\n\n\t\t\t\t\tif (outermost) {\n\n\t\t\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\t\toutermostContext = context == document || context || outermost;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Add elements passing elementMatchers directly to results\n\t\t\t\t\t// Support: iOS <=7 - 9 only\n\t\t\t\t\t// Tolerate NodeList properties (IE: \"length\"; Safari: <number>) matching\n\t\t\t\t\t// elements by id. (see trac-14142)\n\t\t\t\t\tfor (; i !== len && (elem = elems[i]) != null; i++) {\n\t\t\t\t\t\tif (byElement && elem) {\n\t\t\t\t\t\t\tj = 0;\n\n\t\t\t\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\t\t\tif (!context && elem.ownerDocument != document) {\n\t\t\t\t\t\t\t\tsetDocument(elem);\n\t\t\t\t\t\t\t\txml = !documentIsHTML;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\twhile ((matcher = elementMatchers[j++])) {\n\t\t\t\t\t\t\t\tif (matcher(elem, context || document, xml)) {\n\t\t\t\t\t\t\t\t\tpush.call(results, elem);\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (outermost) {\n\t\t\t\t\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Track unmatched elements for set filters\n\t\t\t\t\t\tif (bySet) {\n\n\t\t\t\t\t\t\t// They will have gone through all possible matchers\n\t\t\t\t\t\t\tif ((elem = !matcher && elem)) {\n\t\t\t\t\t\t\t\tmatchedCount--;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Lengthen the array for every element, matched or not\n\t\t\t\t\t\t\tif (seed) {\n\t\t\t\t\t\t\t\tunmatched.push(elem);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// `i` is now the count of elements visited above, and adding it to `matchedCount`\n\t\t\t\t\t// makes the latter nonnegative.\n\t\t\t\t\tmatchedCount += i;\n\n\t\t\t\t\t// Apply set filters to unmatched elements\n\t\t\t\t\t// NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`\n\t\t\t\t\t// equals `i`), unless we didn't visit _any_ elements in the above loop because we have\n\t\t\t\t\t// no element matchers and no seed.\n\t\t\t\t\t// Incrementing an initially-string \"0\" `i` allows `i` to remain a string only in that\n\t\t\t\t\t// case, which will result in a \"00\" `matchedCount` that differs from `i` but is also\n\t\t\t\t\t// numerically zero.\n\t\t\t\t\tif (bySet && i !== matchedCount) {\n\t\t\t\t\t\tj = 0;\n\t\t\t\t\t\twhile ((matcher = setMatchers[j++])) {\n\t\t\t\t\t\t\tmatcher(unmatched, setMatched, context, xml);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (seed) {\n\n\t\t\t\t\t\t\t// Reintegrate element matches to eliminate the need for sorting\n\t\t\t\t\t\t\tif (matchedCount > 0) {\n\t\t\t\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\t\t\t\tif (!(unmatched[i] || setMatched[i])) {\n\t\t\t\t\t\t\t\t\t\tsetMatched[i] = pop.call(results);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Discard index placeholder values to get only actual matches\n\t\t\t\t\t\t\tsetMatched = condense(setMatched);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Add matches to results\n\t\t\t\t\t\tpush.apply(results, setMatched);\n\n\t\t\t\t\t\t// Seedless set matches succeeding multiple successful matchers stipulate sorting\n\t\t\t\t\t\tif (outermost && !seed && setMatched.length > 0 &&\n\t\t\t\t\t\t\t(matchedCount + setMatchers.length) > 1) {\n\n\t\t\t\t\t\t\tjQuery.uniqueSort(results);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Override manipulation of globals by nested matchers\n\t\t\t\t\tif (outermost) {\n\t\t\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\t\t\toutermostContext = contextBackup;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn unmatched;\n\t\t\t\t};\n\n\t\t\treturn bySet ?\n\t\t\t\tmarkFunction(superMatcher) :\n\t\t\t\tsuperMatcher;\n\t\t}\n\n\t\tfunction compile(selector, match /* Internal Use Only */) {\n\t\t\tvar i,\n\t\t\t\tsetMatchers = [],\n\t\t\t\telementMatchers = [],\n\t\t\t\tcached = compilerCache[selector + \" \"];\n\n\t\t\tif (!cached) {\n\n\t\t\t\t// Generate a function of recursive functions that can be used to check each element\n\t\t\t\tif (!match) {\n\t\t\t\t\tmatch = tokenize(selector);\n\t\t\t\t}\n\t\t\t\ti = match.length;\n\t\t\t\twhile (i--) {\n\t\t\t\t\tcached = matcherFromTokens(match[i]);\n\t\t\t\t\tif (cached[expando]) {\n\t\t\t\t\t\tsetMatchers.push(cached);\n\t\t\t\t\t} else {\n\t\t\t\t\t\telementMatchers.push(cached);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Cache the compiled function\n\t\t\t\tcached = compilerCache(selector,\n\t\t\t\t\tmatcherFromGroupMatchers(elementMatchers, setMatchers));\n\n\t\t\t\t// Save selector and tokenization\n\t\t\t\tcached.selector = selector;\n\t\t\t}\n\t\t\treturn cached;\n\t\t}\n\n\t\t/**\n\t\t * A low-level selection function that works with jQuery's compiled\n\t\t *  selector functions\n\t\t * @param {String|Function} selector A selector or a pre-compiled\n\t\t *  selector function built with jQuery selector compile\n\t\t * @param {Element} context\n\t\t * @param {Array} [results]\n\t\t * @param {Array} [seed] A set of elements to match against\n\t\t */\n\t\tfunction select(selector, context, results, seed) {\n\t\t\tvar i, tokens, token, type, find,\n\t\t\t\tcompiled = typeof selector === \"function\" && selector,\n\t\t\t\tmatch = !seed && tokenize((selector = compiled.selector || selector));\n\n\t\t\tresults = results || [];\n\n\t\t\t// Try to minimize operations if there is only one selector in the list and no seed\n\t\t\t// (the latter of which guarantees us context)\n\t\t\tif (match.length === 1) {\n\n\t\t\t\t// Reduce context if the leading compound selector is an ID\n\t\t\t\ttokens = match[0] = match[0].slice(0);\n\t\t\t\tif (tokens.length > 2 && (token = tokens[0]).type === \"ID\" &&\n\t\t\t\t\tcontext.nodeType === 9 && documentIsHTML && Expr.relative[tokens[1].type]) {\n\n\t\t\t\t\tcontext = (Expr.find.ID(\n\t\t\t\t\t\ttoken.matches[0].replace(runescape, funescape),\n\t\t\t\t\t\tcontext\n\t\t\t\t\t) || [])[0];\n\t\t\t\t\tif (!context) {\n\t\t\t\t\t\treturn results;\n\n\t\t\t\t\t\t// Precompiled matchers will still verify ancestry, so step up a level\n\t\t\t\t\t} else if (compiled) {\n\t\t\t\t\t\tcontext = context.parentNode;\n\t\t\t\t\t}\n\n\t\t\t\t\tselector = selector.slice(tokens.shift().value.length);\n\t\t\t\t}\n\n\t\t\t\t// Fetch a seed set for right-to-left matching\n\t\t\t\ti = matchExpr.needsContext.test(selector) ? 0 : tokens.length;\n\t\t\t\twhile (i--) {\n\t\t\t\t\ttoken = tokens[i];\n\n\t\t\t\t\t// Abort if we hit a combinator\n\t\t\t\t\tif (Expr.relative[(type = token.type)]) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tif ((find = Expr.find[type])) {\n\n\t\t\t\t\t\t// Search, expanding context for leading sibling combinators\n\t\t\t\t\t\tif ((seed = find(\n\t\t\t\t\t\t\ttoken.matches[0].replace(runescape, funescape),\n\t\t\t\t\t\t\trsibling.test(tokens[0].type) &&\n\t\t\t\t\t\t\ttestContext(context.parentNode) || context\n\t\t\t\t\t\t))) {\n\n\t\t\t\t\t\t\t// If seed is empty or no tokens remain, we can return early\n\t\t\t\t\t\t\ttokens.splice(i, 1);\n\t\t\t\t\t\t\tselector = seed.length && toSelector(tokens);\n\t\t\t\t\t\t\tif (!selector) {\n\t\t\t\t\t\t\t\tpush.apply(results, seed);\n\t\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Compile and execute a filtering function if one is not provided\n\t\t\t// Provide `match` to avoid retokenization if we modified the selector above\n\t\t\t(compiled || compile(selector, match))(\n\t\t\t\tseed,\n\t\t\t\tcontext,\n\t\t\t\t!documentIsHTML,\n\t\t\t\tresults,\n\t\t\t\t!context || rsibling.test(selector) && testContext(context.parentNode) || context\n\t\t\t);\n\t\t\treturn results;\n\t\t}\n\n\t\t// One-time assignments\n\n\t\t// Support: Android <=4.0 - 4.1+\n\t\t// Sort stability\n\t\tsupport.sortStable = expando.split(\"\").sort(sortOrder).join(\"\") === expando;\n\n\t\t// Initialize against the default document\n\t\tsetDocument();\n\n\t\t// Support: Android <=4.0 - 4.1+\n\t\t// Detached nodes confoundingly follow *each other*\n\t\tsupport.sortDetached = assert(function (el) {\n\n\t\t\t// Should return 1, but returns 4 (following)\n\t\t\treturn el.compareDocumentPosition(document.createElement(\"fieldset\")) & 1;\n\t\t});\n\n\t\tjQuery.find = find;\n\n\t\t// Deprecated\n\t\tjQuery.expr[\":\"] = jQuery.expr.pseudos;\n\t\tjQuery.unique = jQuery.uniqueSort;\n\n\t\t// These have always been private, but they used to be documented\n\t\t// as part of Sizzle so let's maintain them in the 3.x line\n\t\t// for backwards compatibility purposes.\n\t\tfind.compile = compile;\n\t\tfind.select = select;\n\t\tfind.setDocument = setDocument;\n\n\t\tfind.escape = jQuery.escapeSelector;\n\t\tfind.getText = jQuery.text;\n\t\tfind.isXML = jQuery.isXMLDoc;\n\t\tfind.selectors = jQuery.expr;\n\t\tfind.support = jQuery.support;\n\t\tfind.uniqueSort = jQuery.uniqueSort;\n\n\t\t/* eslint-enable */\n\n\t})();\n\n\n\tvar dir = function (elem, dir, until) {\n\t\tvar matched = [],\n\t\t\ttruncate = until !== undefined;\n\n\t\twhile ((elem = elem[dir]) && elem.nodeType !== 9) {\n\t\t\tif (elem.nodeType === 1) {\n\t\t\t\tif (truncate && jQuery(elem).is(until)) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tmatched.push(elem);\n\t\t\t}\n\t\t}\n\t\treturn matched;\n\t};\n\n\n\tvar siblings = function (n, elem) {\n\t\tvar matched = [];\n\n\t\tfor (; n; n = n.nextSibling) {\n\t\t\tif (n.nodeType === 1 && n !== elem) {\n\t\t\t\tmatched.push(n);\n\t\t\t}\n\t\t}\n\n\t\treturn matched;\n\t};\n\n\n\tvar rneedsContext = jQuery.expr.match.needsContext;\n\n\tvar rsingleTag = (/^<([a-z][^\\/\\0>:\\x20\\t\\r\\n\\f]*)[\\x20\\t\\r\\n\\f]*\\/?>(?:<\\/\\1>|)$/i);\n\n\n\n\t// Implement the identical functionality for filter and not\n\tfunction winnow(elements, qualifier, not) {\n\t\tif (isFunction(qualifier)) {\n\t\t\treturn jQuery.grep(elements, function (elem, i) {\n\t\t\t\treturn !!qualifier.call(elem, i, elem) !== not;\n\t\t\t});\n\t\t}\n\n\t\t// Single element\n\t\tif (qualifier.nodeType) {\n\t\t\treturn jQuery.grep(elements, function (elem) {\n\t\t\t\treturn (elem === qualifier) !== not;\n\t\t\t});\n\t\t}\n\n\t\t// Arraylike of elements (jQuery, arguments, Array)\n\t\tif (typeof qualifier !== \"string\") {\n\t\t\treturn jQuery.grep(elements, function (elem) {\n\t\t\t\treturn (indexOf.call(qualifier, elem) > -1) !== not;\n\t\t\t});\n\t\t}\n\n\t\t// Filtered directly for both simple and complex selectors\n\t\treturn jQuery.filter(qualifier, elements, not);\n\t}\n\n\tjQuery.filter = function (expr, elems, not) {\n\t\tvar elem = elems[0];\n\n\t\tif (not) {\n\t\t\texpr = \":not(\" + expr + \")\";\n\t\t}\n\n\t\tif (elems.length === 1 && elem.nodeType === 1) {\n\t\t\treturn jQuery.find.matchesSelector(elem, expr) ? [elem] : [];\n\t\t}\n\n\t\treturn jQuery.find.matches(expr, jQuery.grep(elems, function (elem) {\n\t\t\treturn elem.nodeType === 1;\n\t\t}));\n\t};\n\n\tjQuery.fn.extend({\n\t\tfind: function (selector) {\n\t\t\tvar i, ret,\n\t\t\t\tlen = this.length,\n\t\t\t\tself = this;\n\n\t\t\tif (typeof selector !== \"string\") {\n\t\t\t\treturn this.pushStack(jQuery(selector).filter(function () {\n\t\t\t\t\tfor (i = 0; i < len; i++) {\n\t\t\t\t\t\tif (jQuery.contains(self[i], this)) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}));\n\t\t\t}\n\n\t\t\tret = this.pushStack([]);\n\n\t\t\tfor (i = 0; i < len; i++) {\n\t\t\t\tjQuery.find(selector, self[i], ret);\n\t\t\t}\n\n\t\t\treturn len > 1 ? jQuery.uniqueSort(ret) : ret;\n\t\t},\n\t\tfilter: function (selector) {\n\t\t\treturn this.pushStack(winnow(this, selector || [], false));\n\t\t},\n\t\tnot: function (selector) {\n\t\t\treturn this.pushStack(winnow(this, selector || [], true));\n\t\t},\n\t\tis: function (selector) {\n\t\t\treturn !!winnow(\n\t\t\t\tthis,\n\n\t\t\t\t// If this is a positional/relative selector, check membership in the returned set\n\t\t\t\t// so $(\"p:first\").is(\"p:last\") won't return true for a doc with two \"p\".\n\t\t\t\ttypeof selector === \"string\" && rneedsContext.test(selector) ?\n\t\t\t\t\tjQuery(selector) :\n\t\t\t\t\tselector || [],\n\t\t\t\tfalse\n\t\t\t).length;\n\t\t}\n\t});\n\n\n\t// Initialize a jQuery object\n\n\n\t// A central reference to the root jQuery(document)\n\tvar rootjQuery,\n\n\t\t// A simple way to check for HTML strings\n\t\t// Prioritize #id over <tag> to avoid XSS via location.hash (trac-9521)\n\t\t// Strict HTML recognition (trac-11290: must start with <)\n\t\t// Shortcut simple #id case for speed\n\t\trquickExpr = /^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]+))$/,\n\n\t\tinit = jQuery.fn.init = function (selector, context, root) {\n\t\t\tvar match, elem;\n\n\t\t\t// HANDLE: $(\"\"), $(null), $(undefined), $(false)\n\t\t\tif (!selector) {\n\t\t\t\treturn this;\n\t\t\t}\n\n\t\t\t// Method init() accepts an alternate rootjQuery\n\t\t\t// so migrate can support jQuery.sub (gh-2101)\n\t\t\troot = root || rootjQuery;\n\n\t\t\t// Handle HTML strings\n\t\t\tif (typeof selector === \"string\") {\n\t\t\t\tif (selector[0] === \"<\" &&\n\t\t\t\t\tselector[selector.length - 1] === \">\" &&\n\t\t\t\t\tselector.length >= 3) {\n\n\t\t\t\t\t// Assume that strings that start and end with <> are HTML and skip the regex check\n\t\t\t\t\tmatch = [null, selector, null];\n\n\t\t\t\t} else {\n\t\t\t\t\tmatch = rquickExpr.exec(selector);\n\t\t\t\t}\n\n\t\t\t\t// Match html or make sure no context is specified for #id\n\t\t\t\tif (match && (match[1] || !context)) {\n\n\t\t\t\t\t// HANDLE: $(html) -> $(array)\n\t\t\t\t\tif (match[1]) {\n\t\t\t\t\t\tcontext = context instanceof jQuery ? context[0] : context;\n\n\t\t\t\t\t\t// Option to run scripts is true for back-compat\n\t\t\t\t\t\t// Intentionally let the error be thrown if parseHTML is not present\n\t\t\t\t\t\tjQuery.merge(this, jQuery.parseHTML(\n\t\t\t\t\t\t\tmatch[1],\n\t\t\t\t\t\t\tcontext && context.nodeType ? context.ownerDocument || context : document,\n\t\t\t\t\t\t\ttrue\n\t\t\t\t\t\t));\n\n\t\t\t\t\t\t// HANDLE: $(html, props)\n\t\t\t\t\t\tif (rsingleTag.test(match[1]) && jQuery.isPlainObject(context)) {\n\t\t\t\t\t\t\tfor (match in context) {\n\n\t\t\t\t\t\t\t\t// Properties of context are called as methods if possible\n\t\t\t\t\t\t\t\tif (isFunction(this[match])) {\n\t\t\t\t\t\t\t\t\tthis[match](context[match]);\n\n\t\t\t\t\t\t\t\t\t// ...and otherwise set as attributes\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tthis.attr(match, context[match]);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn this;\n\n\t\t\t\t\t\t// HANDLE: $(#id)\n\t\t\t\t\t} else {\n\t\t\t\t\t\telem = document.getElementById(match[2]);\n\n\t\t\t\t\t\tif (elem) {\n\n\t\t\t\t\t\t\t// Inject the element directly into the jQuery object\n\t\t\t\t\t\t\tthis[0] = elem;\n\t\t\t\t\t\t\tthis.length = 1;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn this;\n\t\t\t\t\t}\n\n\t\t\t\t\t// HANDLE: $(expr, $(...))\n\t\t\t\t} else if (!context || context.jquery) {\n\t\t\t\t\treturn (context || root).find(selector);\n\n\t\t\t\t\t// HANDLE: $(expr, context)\n\t\t\t\t\t// (which is just equivalent to: $(context).find(expr)\n\t\t\t\t} else {\n\t\t\t\t\treturn this.constructor(context).find(selector);\n\t\t\t\t}\n\n\t\t\t\t// HANDLE: $(DOMElement)\n\t\t\t} else if (selector.nodeType) {\n\t\t\t\tthis[0] = selector;\n\t\t\t\tthis.length = 1;\n\t\t\t\treturn this;\n\n\t\t\t\t// HANDLE: $(function)\n\t\t\t\t// Shortcut for document ready\n\t\t\t} else if (isFunction(selector)) {\n\t\t\t\treturn root.ready !== undefined ?\n\t\t\t\t\troot.ready(selector) :\n\n\t\t\t\t\t// Execute immediately if ready is not present\n\t\t\t\t\tselector(jQuery);\n\t\t\t}\n\n\t\t\treturn jQuery.makeArray(selector, this);\n\t\t};\n\n\t// Give the init function the jQuery prototype for later instantiation\n\tinit.prototype = jQuery.fn;\n\n\t// Initialize central reference\n\trootjQuery = jQuery(document);\n\n\n\tvar rparentsprev = /^(?:parents|prev(?:Until|All))/,\n\n\t\t// Methods guaranteed to produce a unique set when starting from a unique set\n\t\tguaranteedUnique = {\n\t\t\tchildren: true,\n\t\t\tcontents: true,\n\t\t\tnext: true,\n\t\t\tprev: true\n\t\t};\n\n\tjQuery.fn.extend({\n\t\thas: function (target) {\n\t\t\tvar targets = jQuery(target, this),\n\t\t\t\tl = targets.length;\n\n\t\t\treturn this.filter(function () {\n\t\t\t\tvar i = 0;\n\t\t\t\tfor (; i < l; i++) {\n\t\t\t\t\tif (jQuery.contains(this, targets[i])) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\tclosest: function (selectors, context) {\n\t\t\tvar cur,\n\t\t\t\ti = 0,\n\t\t\t\tl = this.length,\n\t\t\t\tmatched = [],\n\t\t\t\ttargets = typeof selectors !== \"string\" && jQuery(selectors);\n\n\t\t\t// Positional selectors never match, since there's no _selection_ context\n\t\t\tif (!rneedsContext.test(selectors)) {\n\t\t\t\tfor (; i < l; i++) {\n\t\t\t\t\tfor (cur = this[i]; cur && cur !== context; cur = cur.parentNode) {\n\n\t\t\t\t\t\t// Always skip document fragments\n\t\t\t\t\t\tif (cur.nodeType < 11 && (targets ?\n\t\t\t\t\t\t\ttargets.index(cur) > -1 :\n\n\t\t\t\t\t\t\t// Don't pass non-elements to jQuery#find\n\t\t\t\t\t\t\tcur.nodeType === 1 &&\n\t\t\t\t\t\t\tjQuery.find.matchesSelector(cur, selectors))) {\n\n\t\t\t\t\t\t\tmatched.push(cur);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn this.pushStack(matched.length > 1 ? jQuery.uniqueSort(matched) : matched);\n\t\t},\n\n\t\t// Determine the position of an element within the set\n\t\tindex: function (elem) {\n\n\t\t\t// No argument, return index in parent\n\t\t\tif (!elem) {\n\t\t\t\treturn (this[0] && this[0].parentNode) ? this.first().prevAll().length : -1;\n\t\t\t}\n\n\t\t\t// Index in selector\n\t\t\tif (typeof elem === \"string\") {\n\t\t\t\treturn indexOf.call(jQuery(elem), this[0]);\n\t\t\t}\n\n\t\t\t// Locate the position of the desired element\n\t\t\treturn indexOf.call(this,\n\n\t\t\t\t// If it receives a jQuery object, the first element is used\n\t\t\t\telem.jquery ? elem[0] : elem\n\t\t\t);\n\t\t},\n\n\t\tadd: function (selector, context) {\n\t\t\treturn this.pushStack(\n\t\t\t\tjQuery.uniqueSort(\n\t\t\t\t\tjQuery.merge(this.get(), jQuery(selector, context))\n\t\t\t\t)\n\t\t\t);\n\t\t},\n\n\t\taddBack: function (selector) {\n\t\t\treturn this.add(selector == null ?\n\t\t\t\tthis.prevObject : this.prevObject.filter(selector)\n\t\t\t);\n\t\t}\n\t});\n\n\tfunction sibling(cur, dir) {\n\t\twhile ((cur = cur[dir]) && cur.nodeType !== 1) { }\n\t\treturn cur;\n\t}\n\n\tjQuery.each({\n\t\tparent: function (elem) {\n\t\t\tvar parent = elem.parentNode;\n\t\t\treturn parent && parent.nodeType !== 11 ? parent : null;\n\t\t},\n\t\tparents: function (elem) {\n\t\t\treturn dir(elem, \"parentNode\");\n\t\t},\n\t\tparentsUntil: function (elem, _i, until) {\n\t\t\treturn dir(elem, \"parentNode\", until);\n\t\t},\n\t\tnext: function (elem) {\n\t\t\treturn sibling(elem, \"nextSibling\");\n\t\t},\n\t\tprev: function (elem) {\n\t\t\treturn sibling(elem, \"previousSibling\");\n\t\t},\n\t\tnextAll: function (elem) {\n\t\t\treturn dir(elem, \"nextSibling\");\n\t\t},\n\t\tprevAll: function (elem) {\n\t\t\treturn dir(elem, \"previousSibling\");\n\t\t},\n\t\tnextUntil: function (elem, _i, until) {\n\t\t\treturn dir(elem, \"nextSibling\", until);\n\t\t},\n\t\tprevUntil: function (elem, _i, until) {\n\t\t\treturn dir(elem, \"previousSibling\", until);\n\t\t},\n\t\tsiblings: function (elem) {\n\t\t\treturn siblings((elem.parentNode || {}).firstChild, elem);\n\t\t},\n\t\tchildren: function (elem) {\n\t\t\treturn siblings(elem.firstChild);\n\t\t},\n\t\tcontents: function (elem) {\n\t\t\tif (elem.contentDocument != null &&\n\n\t\t\t\t// Support: IE 11+\n\t\t\t\t// <object> elements with no `data` attribute has an object\n\t\t\t\t// `contentDocument` with a `null` prototype.\n\t\t\t\tgetProto(elem.contentDocument)) {\n\n\t\t\t\treturn elem.contentDocument;\n\t\t\t}\n\n\t\t\t// Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only\n\t\t\t// Treat the template element as a regular one in browsers that\n\t\t\t// don't support it.\n\t\t\tif (nodeName(elem, \"template\")) {\n\t\t\t\telem = elem.content || elem;\n\t\t\t}\n\n\t\t\treturn jQuery.merge([], elem.childNodes);\n\t\t}\n\t}, function (name, fn) {\n\t\tjQuery.fn[name] = function (until, selector) {\n\t\t\tvar matched = jQuery.map(this, fn, until);\n\n\t\t\tif (name.slice(-5) !== \"Until\") {\n\t\t\t\tselector = until;\n\t\t\t}\n\n\t\t\tif (selector && typeof selector === \"string\") {\n\t\t\t\tmatched = jQuery.filter(selector, matched);\n\t\t\t}\n\n\t\t\tif (this.length > 1) {\n\n\t\t\t\t// Remove duplicates\n\t\t\t\tif (!guaranteedUnique[name]) {\n\t\t\t\t\tjQuery.uniqueSort(matched);\n\t\t\t\t}\n\n\t\t\t\t// Reverse order for parents* and prev-derivatives\n\t\t\t\tif (rparentsprev.test(name)) {\n\t\t\t\t\tmatched.reverse();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn this.pushStack(matched);\n\t\t};\n\t});\n\tvar rnothtmlwhite = (/[^\\x20\\t\\r\\n\\f]+/g);\n\n\n\n\t// Convert String-formatted options into Object-formatted ones\n\tfunction createOptions(options) {\n\t\tvar object = {};\n\t\tjQuery.each(options.match(rnothtmlwhite) || [], function (_, flag) {\n\t\t\tobject[flag] = true;\n\t\t});\n\t\treturn object;\n\t}\n\n\t/*\n\t * Create a callback list using the following parameters:\n\t *\n\t *\toptions: an optional list of space-separated options that will change how\n\t *\t\t\tthe callback list behaves or a more traditional option object\n\t *\n\t * By default a callback list will act like an event callback list and can be\n\t * \"fired\" multiple times.\n\t *\n\t * Possible options:\n\t *\n\t *\tonce:\t\t\twill ensure the callback list can only be fired once (like a Deferred)\n\t *\n\t *\tmemory:\t\t\twill keep track of previous values and will call any callback added\n\t *\t\t\t\t\tafter the list has been fired right away with the latest \"memorized\"\n\t *\t\t\t\t\tvalues (like a Deferred)\n\t *\n\t *\tunique:\t\t\twill ensure a callback can only be added once (no duplicate in the list)\n\t *\n\t *\tstopOnFalse:\tinterrupt callings when a callback returns false\n\t *\n\t */\n\tjQuery.Callbacks = function (options) {\n\n\t\t// Convert options from String-formatted to Object-formatted if needed\n\t\t// (we check in cache first)\n\t\toptions = typeof options === \"string\" ?\n\t\t\tcreateOptions(options) :\n\t\t\tjQuery.extend({}, options);\n\n\t\tvar // Flag to know if list is currently firing\n\t\t\tfiring,\n\n\t\t\t// Last fire value for non-forgettable lists\n\t\t\tmemory,\n\n\t\t\t// Flag to know if list was already fired\n\t\t\tfired,\n\n\t\t\t// Flag to prevent firing\n\t\t\tlocked,\n\n\t\t\t// Actual callback list\n\t\t\tlist = [],\n\n\t\t\t// Queue of execution data for repeatable lists\n\t\t\tqueue = [],\n\n\t\t\t// Index of currently firing callback (modified by add/remove as needed)\n\t\t\tfiringIndex = -1,\n\n\t\t\t// Fire callbacks\n\t\t\tfire = function () {\n\n\t\t\t\t// Enforce single-firing\n\t\t\t\tlocked = locked || options.once;\n\n\t\t\t\t// Execute callbacks for all pending executions,\n\t\t\t\t// respecting firingIndex overrides and runtime changes\n\t\t\t\tfired = firing = true;\n\t\t\t\tfor (; queue.length; firingIndex = -1) {\n\t\t\t\t\tmemory = queue.shift();\n\t\t\t\t\twhile (++firingIndex < list.length) {\n\n\t\t\t\t\t\t// Run callback and check for early termination\n\t\t\t\t\t\tif (list[firingIndex].apply(memory[0], memory[1]) === false &&\n\t\t\t\t\t\t\toptions.stopOnFalse) {\n\n\t\t\t\t\t\t\t// Jump to end and forget the data so .add doesn't re-fire\n\t\t\t\t\t\t\tfiringIndex = list.length;\n\t\t\t\t\t\t\tmemory = false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Forget the data if we're done with it\n\t\t\t\tif (!options.memory) {\n\t\t\t\t\tmemory = false;\n\t\t\t\t}\n\n\t\t\t\tfiring = false;\n\n\t\t\t\t// Clean up if we're done firing for good\n\t\t\t\tif (locked) {\n\n\t\t\t\t\t// Keep an empty list if we have data for future add calls\n\t\t\t\t\tif (memory) {\n\t\t\t\t\t\tlist = [];\n\n\t\t\t\t\t\t// Otherwise, this object is spent\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlist = \"\";\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// Actual Callbacks object\n\t\t\tself = {\n\n\t\t\t\t// Add a callback or a collection of callbacks to the list\n\t\t\t\tadd: function () {\n\t\t\t\t\tif (list) {\n\n\t\t\t\t\t\t// If we have memory from a past run, we should fire after adding\n\t\t\t\t\t\tif (memory && !firing) {\n\t\t\t\t\t\t\tfiringIndex = list.length - 1;\n\t\t\t\t\t\t\tqueue.push(memory);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t(function add(args) {\n\t\t\t\t\t\t\tjQuery.each(args, function (_, arg) {\n\t\t\t\t\t\t\t\tif (isFunction(arg)) {\n\t\t\t\t\t\t\t\t\tif (!options.unique || !self.has(arg)) {\n\t\t\t\t\t\t\t\t\t\tlist.push(arg);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} else if (arg && arg.length && toType(arg) !== \"string\") {\n\n\t\t\t\t\t\t\t\t\t// Inspect recursively\n\t\t\t\t\t\t\t\t\tadd(arg);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t})(arguments);\n\n\t\t\t\t\t\tif (memory && !firing) {\n\t\t\t\t\t\t\tfire();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Remove a callback from the list\n\t\t\t\tremove: function () {\n\t\t\t\t\tjQuery.each(arguments, function (_, arg) {\n\t\t\t\t\t\tvar index;\n\t\t\t\t\t\twhile ((index = jQuery.inArray(arg, list, index)) > -1) {\n\t\t\t\t\t\t\tlist.splice(index, 1);\n\n\t\t\t\t\t\t\t// Handle firing indexes\n\t\t\t\t\t\t\tif (index <= firingIndex) {\n\t\t\t\t\t\t\t\tfiringIndex--;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Check if a given callback is in the list.\n\t\t\t\t// If no argument is given, return whether or not list has callbacks attached.\n\t\t\t\thas: function (fn) {\n\t\t\t\t\treturn fn ?\n\t\t\t\t\t\tjQuery.inArray(fn, list) > -1 :\n\t\t\t\t\t\tlist.length > 0;\n\t\t\t\t},\n\n\t\t\t\t// Remove all callbacks from the list\n\t\t\t\tempty: function () {\n\t\t\t\t\tif (list) {\n\t\t\t\t\t\tlist = [];\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Disable .fire and .add\n\t\t\t\t// Abort any current/pending executions\n\t\t\t\t// Clear all callbacks and values\n\t\t\t\tdisable: function () {\n\t\t\t\t\tlocked = queue = [];\n\t\t\t\t\tlist = memory = \"\";\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\t\t\t\tdisabled: function () {\n\t\t\t\t\treturn !list;\n\t\t\t\t},\n\n\t\t\t\t// Disable .fire\n\t\t\t\t// Also disable .add unless we have memory (since it would have no effect)\n\t\t\t\t// Abort any pending executions\n\t\t\t\tlock: function () {\n\t\t\t\t\tlocked = queue = [];\n\t\t\t\t\tif (!memory && !firing) {\n\t\t\t\t\t\tlist = memory = \"\";\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\t\t\t\tlocked: function () {\n\t\t\t\t\treturn !!locked;\n\t\t\t\t},\n\n\t\t\t\t// Call all callbacks with the given context and arguments\n\t\t\t\tfireWith: function (context, args) {\n\t\t\t\t\tif (!locked) {\n\t\t\t\t\t\targs = args || [];\n\t\t\t\t\t\targs = [context, args.slice ? args.slice() : args];\n\t\t\t\t\t\tqueue.push(args);\n\t\t\t\t\t\tif (!firing) {\n\t\t\t\t\t\t\tfire();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Call all the callbacks with the given arguments\n\t\t\t\tfire: function () {\n\t\t\t\t\tself.fireWith(this, arguments);\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// To know if the callbacks have already been called at least once\n\t\t\t\tfired: function () {\n\t\t\t\t\treturn !!fired;\n\t\t\t\t}\n\t\t\t};\n\n\t\treturn self;\n\t};\n\n\n\tfunction Identity(v) {\n\t\treturn v;\n\t}\n\tfunction Thrower(ex) {\n\t\tthrow ex;\n\t}\n\n\tfunction adoptValue(value, resolve, reject, noValue) {\n\t\tvar method;\n\n\t\ttry {\n\n\t\t\t// Check for promise aspect first to privilege synchronous behavior\n\t\t\tif (value && isFunction((method = value.promise))) {\n\t\t\t\tmethod.call(value).done(resolve).fail(reject);\n\n\t\t\t\t// Other thenables\n\t\t\t} else if (value && isFunction((method = value.then))) {\n\t\t\t\tmethod.call(value, resolve, reject);\n\n\t\t\t\t// Other non-thenables\n\t\t\t} else {\n\n\t\t\t\t// Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer:\n\t\t\t\t// * false: [ value ].slice( 0 ) => resolve( value )\n\t\t\t\t// * true: [ value ].slice( 1 ) => resolve()\n\t\t\t\tresolve.apply(undefined, [value].slice(noValue));\n\t\t\t}\n\n\t\t\t// For Promises/A+, convert exceptions into rejections\n\t\t\t// Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in\n\t\t\t// Deferred#then to conditionally suppress rejection.\n\t\t} catch (value) {\n\n\t\t\t// Support: Android 4.0 only\n\t\t\t// Strict mode functions invoked without .call/.apply get global-object context\n\t\t\treject.apply(undefined, [value]);\n\t\t}\n\t}\n\n\tjQuery.extend({\n\n\t\tDeferred: function (func) {\n\t\t\tvar tuples = [\n\n\t\t\t\t// action, add listener, callbacks,\n\t\t\t\t// ... .then handlers, argument index, [final state]\n\t\t\t\t[\"notify\", \"progress\", jQuery.Callbacks(\"memory\"),\n\t\t\t\t\tjQuery.Callbacks(\"memory\"), 2],\n\t\t\t\t[\"resolve\", \"done\", jQuery.Callbacks(\"once memory\"),\n\t\t\t\t\tjQuery.Callbacks(\"once memory\"), 0, \"resolved\"],\n\t\t\t\t[\"reject\", \"fail\", jQuery.Callbacks(\"once memory\"),\n\t\t\t\t\tjQuery.Callbacks(\"once memory\"), 1, \"rejected\"]\n\t\t\t],\n\t\t\t\tstate = \"pending\",\n\t\t\t\tpromise = {\n\t\t\t\t\tstate: function () {\n\t\t\t\t\t\treturn state;\n\t\t\t\t\t},\n\t\t\t\t\talways: function () {\n\t\t\t\t\t\tdeferred.done(arguments).fail(arguments);\n\t\t\t\t\t\treturn this;\n\t\t\t\t\t},\n\t\t\t\t\t\"catch\": function (fn) {\n\t\t\t\t\t\treturn promise.then(null, fn);\n\t\t\t\t\t},\n\n\t\t\t\t\t// Keep pipe for back-compat\n\t\t\t\t\tpipe: function ( /* fnDone, fnFail, fnProgress */) {\n\t\t\t\t\t\tvar fns = arguments;\n\n\t\t\t\t\t\treturn jQuery.Deferred(function (newDefer) {\n\t\t\t\t\t\t\tjQuery.each(tuples, function (_i, tuple) {\n\n\t\t\t\t\t\t\t\t// Map tuples (progress, done, fail) to arguments (done, fail, progress)\n\t\t\t\t\t\t\t\tvar fn = isFunction(fns[tuple[4]]) && fns[tuple[4]];\n\n\t\t\t\t\t\t\t\t// deferred.progress(function() { bind to newDefer or newDefer.notify })\n\t\t\t\t\t\t\t\t// deferred.done(function() { bind to newDefer or newDefer.resolve })\n\t\t\t\t\t\t\t\t// deferred.fail(function() { bind to newDefer or newDefer.reject })\n\t\t\t\t\t\t\t\tdeferred[tuple[1]](function () {\n\t\t\t\t\t\t\t\t\tvar returned = fn && fn.apply(this, arguments);\n\t\t\t\t\t\t\t\t\tif (returned && isFunction(returned.promise)) {\n\t\t\t\t\t\t\t\t\t\treturned.promise()\n\t\t\t\t\t\t\t\t\t\t\t.progress(newDefer.notify)\n\t\t\t\t\t\t\t\t\t\t\t.done(newDefer.resolve)\n\t\t\t\t\t\t\t\t\t\t\t.fail(newDefer.reject);\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tnewDefer[tuple[0] + \"With\"](\n\t\t\t\t\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\t\t\t\t\tfn ? [returned] : arguments\n\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tfns = null;\n\t\t\t\t\t\t}).promise();\n\t\t\t\t\t},\n\t\t\t\t\tthen: function (onFulfilled, onRejected, onProgress) {\n\t\t\t\t\t\tvar maxDepth = 0;\n\t\t\t\t\t\tfunction resolve(depth, deferred, handler, special) {\n\t\t\t\t\t\t\treturn function () {\n\t\t\t\t\t\t\t\tvar that = this,\n\t\t\t\t\t\t\t\t\targs = arguments,\n\t\t\t\t\t\t\t\t\tmightThrow = function () {\n\t\t\t\t\t\t\t\t\t\tvar returned, then;\n\n\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.3\n\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-59\n\t\t\t\t\t\t\t\t\t\t// Ignore double-resolution attempts\n\t\t\t\t\t\t\t\t\t\tif (depth < maxDepth) {\n\t\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\treturned = handler.apply(that, args);\n\n\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.1\n\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-48\n\t\t\t\t\t\t\t\t\t\tif (returned === deferred.promise()) {\n\t\t\t\t\t\t\t\t\t\t\tthrow new TypeError(\"Thenable self-resolution\");\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ sections 2.3.3.1, 3.5\n\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-54\n\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-75\n\t\t\t\t\t\t\t\t\t\t// Retrieve `then` only once\n\t\t\t\t\t\t\t\t\t\tthen = returned &&\n\n\t\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.4\n\t\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-64\n\t\t\t\t\t\t\t\t\t\t\t// Only check objects and functions for thenability\n\t\t\t\t\t\t\t\t\t\t\t(typeof returned === \"object\" ||\n\t\t\t\t\t\t\t\t\t\t\t\ttypeof returned === \"function\") &&\n\t\t\t\t\t\t\t\t\t\t\treturned.then;\n\n\t\t\t\t\t\t\t\t\t\t// Handle a returned thenable\n\t\t\t\t\t\t\t\t\t\tif (isFunction(then)) {\n\n\t\t\t\t\t\t\t\t\t\t\t// Special processors (notify) just wait for resolution\n\t\t\t\t\t\t\t\t\t\t\tif (special) {\n\t\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\t\tresolve(maxDepth, deferred, Identity, special),\n\t\t\t\t\t\t\t\t\t\t\t\t\tresolve(maxDepth, deferred, Thrower, special)\n\t\t\t\t\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t\t\t\t\t// Normal processors (resolve) also hook into progress\n\t\t\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t\t\t// ...and disregard older resolution values\n\t\t\t\t\t\t\t\t\t\t\t\tmaxDepth++;\n\n\t\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\t\tresolve(maxDepth, deferred, Identity, special),\n\t\t\t\t\t\t\t\t\t\t\t\t\tresolve(maxDepth, deferred, Thrower, special),\n\t\t\t\t\t\t\t\t\t\t\t\t\tresolve(maxDepth, deferred, Identity,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tdeferred.notifyWith)\n\t\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t// Handle all other returned values\n\t\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\t\tif (handler !== Identity) {\n\t\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\t\targs = [returned];\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t// Process the value(s)\n\t\t\t\t\t\t\t\t\t\t\t// Default process is resolve\n\t\t\t\t\t\t\t\t\t\t\t(special || deferred.resolveWith)(that, args);\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\n\t\t\t\t\t\t\t\t\t// Only normal processors (resolve) catch and reject exceptions\n\t\t\t\t\t\t\t\t\tprocess = special ?\n\t\t\t\t\t\t\t\t\t\tmightThrow :\n\t\t\t\t\t\t\t\t\t\tfunction () {\n\t\t\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\t\t\tmightThrow();\n\t\t\t\t\t\t\t\t\t\t\t} catch (e) {\n\n\t\t\t\t\t\t\t\t\t\t\t\tif (jQuery.Deferred.exceptionHook) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tjQuery.Deferred.exceptionHook(e,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tprocess.error);\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.4.1\n\t\t\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-61\n\t\t\t\t\t\t\t\t\t\t\t\t// Ignore post-resolution exceptions\n\t\t\t\t\t\t\t\t\t\t\t\tif (depth + 1 >= maxDepth) {\n\n\t\t\t\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\t\t\t\tif (handler !== Thrower) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\targs = [e];\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\t\tdeferred.rejectWith(that, args);\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.1\n\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-57\n\t\t\t\t\t\t\t\t// Re-resolve promises immediately to dodge false rejection from\n\t\t\t\t\t\t\t\t// subsequent errors\n\t\t\t\t\t\t\t\tif (depth) {\n\t\t\t\t\t\t\t\t\tprocess();\n\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t// Call an optional hook to record the error, in case of exception\n\t\t\t\t\t\t\t\t\t// since it's otherwise lost when execution goes async\n\t\t\t\t\t\t\t\t\tif (jQuery.Deferred.getErrorHook) {\n\t\t\t\t\t\t\t\t\t\tprocess.error = jQuery.Deferred.getErrorHook();\n\n\t\t\t\t\t\t\t\t\t\t// The deprecated alias of the above. While the name suggests\n\t\t\t\t\t\t\t\t\t\t// returning the stack, not an error instance, jQuery just passes\n\t\t\t\t\t\t\t\t\t\t// it directly to `console.warn` so both will work; an instance\n\t\t\t\t\t\t\t\t\t\t// just better cooperates with source maps.\n\t\t\t\t\t\t\t\t\t} else if (jQuery.Deferred.getStackHook) {\n\t\t\t\t\t\t\t\t\t\tprocess.error = jQuery.Deferred.getStackHook();\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\twindow.setTimeout(process);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn jQuery.Deferred(function (newDefer) {\n\n\t\t\t\t\t\t\t// progress_handlers.add( ... )\n\t\t\t\t\t\t\ttuples[0][3].add(\n\t\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\t\tisFunction(onProgress) ?\n\t\t\t\t\t\t\t\t\t\tonProgress :\n\t\t\t\t\t\t\t\t\t\tIdentity,\n\t\t\t\t\t\t\t\t\tnewDefer.notifyWith\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t// fulfilled_handlers.add( ... )\n\t\t\t\t\t\t\ttuples[1][3].add(\n\t\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\t\tisFunction(onFulfilled) ?\n\t\t\t\t\t\t\t\t\t\tonFulfilled :\n\t\t\t\t\t\t\t\t\t\tIdentity\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t// rejected_handlers.add( ... )\n\t\t\t\t\t\t\ttuples[2][3].add(\n\t\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\t\tisFunction(onRejected) ?\n\t\t\t\t\t\t\t\t\t\tonRejected :\n\t\t\t\t\t\t\t\t\t\tThrower\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}).promise();\n\t\t\t\t\t},\n\n\t\t\t\t\t// Get a promise for this deferred\n\t\t\t\t\t// If obj is provided, the promise aspect is added to the object\n\t\t\t\t\tpromise: function (obj) {\n\t\t\t\t\t\treturn obj != null ? jQuery.extend(obj, promise) : promise;\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tdeferred = {};\n\n\t\t\t// Add list-specific methods\n\t\t\tjQuery.each(tuples, function (i, tuple) {\n\t\t\t\tvar list = tuple[2],\n\t\t\t\t\tstateString = tuple[5];\n\n\t\t\t\t// promise.progress = list.add\n\t\t\t\t// promise.done = list.add\n\t\t\t\t// promise.fail = list.add\n\t\t\t\tpromise[tuple[1]] = list.add;\n\n\t\t\t\t// Handle state\n\t\t\t\tif (stateString) {\n\t\t\t\t\tlist.add(\n\t\t\t\t\t\tfunction () {\n\n\t\t\t\t\t\t\t// state = \"resolved\" (i.e., fulfilled)\n\t\t\t\t\t\t\t// state = \"rejected\"\n\t\t\t\t\t\t\tstate = stateString;\n\t\t\t\t\t\t},\n\n\t\t\t\t\t\t// rejected_callbacks.disable\n\t\t\t\t\t\t// fulfilled_callbacks.disable\n\t\t\t\t\t\ttuples[3 - i][2].disable,\n\n\t\t\t\t\t\t// rejected_handlers.disable\n\t\t\t\t\t\t// fulfilled_handlers.disable\n\t\t\t\t\t\ttuples[3 - i][3].disable,\n\n\t\t\t\t\t\t// progress_callbacks.lock\n\t\t\t\t\t\ttuples[0][2].lock,\n\n\t\t\t\t\t\t// progress_handlers.lock\n\t\t\t\t\t\ttuples[0][3].lock\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\t// progress_handlers.fire\n\t\t\t\t// fulfilled_handlers.fire\n\t\t\t\t// rejected_handlers.fire\n\t\t\t\tlist.add(tuple[3].fire);\n\n\t\t\t\t// deferred.notify = function() { deferred.notifyWith(...) }\n\t\t\t\t// deferred.resolve = function() { deferred.resolveWith(...) }\n\t\t\t\t// deferred.reject = function() { deferred.rejectWith(...) }\n\t\t\t\tdeferred[tuple[0]] = function () {\n\t\t\t\t\tdeferred[tuple[0] + \"With\"](this === deferred ? undefined : this, arguments);\n\t\t\t\t\treturn this;\n\t\t\t\t};\n\n\t\t\t\t// deferred.notifyWith = list.fireWith\n\t\t\t\t// deferred.resolveWith = list.fireWith\n\t\t\t\t// deferred.rejectWith = list.fireWith\n\t\t\t\tdeferred[tuple[0] + \"With\"] = list.fireWith;\n\t\t\t});\n\n\t\t\t// Make the deferred a promise\n\t\t\tpromise.promise(deferred);\n\n\t\t\t// Call given func if any\n\t\t\tif (func) {\n\t\t\t\tfunc.call(deferred, deferred);\n\t\t\t}\n\n\t\t\t// All done!\n\t\t\treturn deferred;\n\t\t},\n\n\t\t// Deferred helper\n\t\twhen: function (singleValue) {\n\t\t\tvar\n\n\t\t\t\t// count of uncompleted subordinates\n\t\t\t\tremaining = arguments.length,\n\n\t\t\t\t// count of unprocessed arguments\n\t\t\t\ti = remaining,\n\n\t\t\t\t// subordinate fulfillment data\n\t\t\t\tresolveContexts = Array(i),\n\t\t\t\tresolveValues = slice.call(arguments),\n\n\t\t\t\t// the primary Deferred\n\t\t\t\tprimary = jQuery.Deferred(),\n\n\t\t\t\t// subordinate callback factory\n\t\t\t\tupdateFunc = function (i) {\n\t\t\t\t\treturn function (value) {\n\t\t\t\t\t\tresolveContexts[i] = this;\n\t\t\t\t\t\tresolveValues[i] = arguments.length > 1 ? slice.call(arguments) : value;\n\t\t\t\t\t\tif (!(--remaining)) {\n\t\t\t\t\t\t\tprimary.resolveWith(resolveContexts, resolveValues);\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t};\n\n\t\t\t// Single- and empty arguments are adopted like Promise.resolve\n\t\t\tif (remaining <= 1) {\n\t\t\t\tadoptValue(singleValue, primary.done(updateFunc(i)).resolve, primary.reject,\n\t\t\t\t\t!remaining);\n\n\t\t\t\t// Use .then() to unwrap secondary thenables (cf. gh-3000)\n\t\t\t\tif (primary.state() === \"pending\" ||\n\t\t\t\t\tisFunction(resolveValues[i] && resolveValues[i].then)) {\n\n\t\t\t\t\treturn primary.then();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Multiple arguments are aggregated like Promise.all array elements\n\t\t\twhile (i--) {\n\t\t\t\tadoptValue(resolveValues[i], updateFunc(i), primary.reject);\n\t\t\t}\n\n\t\t\treturn primary.promise();\n\t\t}\n\t});\n\n\n\t// These usually indicate a programmer mistake during development,\n\t// warn about them ASAP rather than swallowing them by default.\n\tvar rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;\n\n\t// If `jQuery.Deferred.getErrorHook` is defined, `asyncError` is an error\n\t// captured before the async barrier to get the original error cause\n\t// which may otherwise be hidden.\n\tjQuery.Deferred.exceptionHook = function (error, asyncError) {\n\n\t\t// Support: IE 8 - 9 only\n\t\t// Console exists when dev tools are open, which can happen at any time\n\t\tif (window.console && window.console.warn && error && rerrorNames.test(error.name)) {\n\t\t\twindow.console.warn(\"jQuery.Deferred exception: \" + error.message,\n\t\t\t\terror.stack, asyncError);\n\t\t}\n\t};\n\n\n\n\n\tjQuery.readyException = function (error) {\n\t\twindow.setTimeout(function () {\n\t\t\tthrow error;\n\t\t});\n\t};\n\n\n\n\n\t// The deferred used on DOM ready\n\tvar readyList = jQuery.Deferred();\n\n\tjQuery.fn.ready = function (fn) {\n\n\t\treadyList\n\t\t\t.then(fn)\n\n\t\t\t// Wrap jQuery.readyException in a function so that the lookup\n\t\t\t// happens at the time of error handling instead of callback\n\t\t\t// registration.\n\t\t\t.catch(function (error) {\n\t\t\t\tjQuery.readyException(error);\n\t\t\t});\n\n\t\treturn this;\n\t};\n\n\tjQuery.extend({\n\n\t\t// Is the DOM ready to be used? Set to true once it occurs.\n\t\tisReady: false,\n\n\t\t// A counter to track how many items to wait for before\n\t\t// the ready event fires. See trac-6781\n\t\treadyWait: 1,\n\n\t\t// Handle when the DOM is ready\n\t\tready: function (wait) {\n\n\t\t\t// Abort if there are pending holds or we're already ready\n\t\t\tif (wait === true ? --jQuery.readyWait : jQuery.isReady) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Remember that the DOM is ready\n\t\t\tjQuery.isReady = true;\n\n\t\t\t// If a normal DOM Ready event fired, decrement, and wait if need be\n\t\t\tif (wait !== true && --jQuery.readyWait > 0) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If there are functions bound, to execute\n\t\t\treadyList.resolveWith(document, [jQuery]);\n\t\t}\n\t});\n\n\tjQuery.ready.then = readyList.then;\n\n\t// The ready event handler and self cleanup method\n\tfunction completed() {\n\t\tdocument.removeEventListener(\"DOMContentLoaded\", completed);\n\t\twindow.removeEventListener(\"load\", completed);\n\t\tjQuery.ready();\n\t}\n\n\t// Catch cases where $(document).ready() is called\n\t// after the browser event has already occurred.\n\t// Support: IE <=9 - 10 only\n\t// Older IE sometimes signals \"interactive\" too soon\n\tif (document.readyState === \"complete\" ||\n\t\t(document.readyState !== \"loading\" && !document.documentElement.doScroll)) {\n\n\t\t// Handle it asynchronously to allow scripts the opportunity to delay ready\n\t\twindow.setTimeout(jQuery.ready);\n\n\t} else {\n\n\t\t// Use the handy event callback\n\t\tdocument.addEventListener(\"DOMContentLoaded\", completed);\n\n\t\t// A fallback to window.onload, that will always work\n\t\twindow.addEventListener(\"load\", completed);\n\t}\n\n\n\n\n\t// Multifunctional method to get and set values of a collection\n\t// The value/s can optionally be executed if it's a function\n\tvar access = function (elems, fn, key, value, chainable, emptyGet, raw) {\n\t\tvar i = 0,\n\t\t\tlen = elems.length,\n\t\t\tbulk = key == null;\n\n\t\t// Sets many values\n\t\tif (toType(key) === \"object\") {\n\t\t\tchainable = true;\n\t\t\tfor (i in key) {\n\t\t\t\taccess(elems, fn, i, key[i], true, emptyGet, raw);\n\t\t\t}\n\n\t\t\t// Sets one value\n\t\t} else if (value !== undefined) {\n\t\t\tchainable = true;\n\n\t\t\tif (!isFunction(value)) {\n\t\t\t\traw = true;\n\t\t\t}\n\n\t\t\tif (bulk) {\n\n\t\t\t\t// Bulk operations run against the entire set\n\t\t\t\tif (raw) {\n\t\t\t\t\tfn.call(elems, value);\n\t\t\t\t\tfn = null;\n\n\t\t\t\t\t// ...except when executing function values\n\t\t\t\t} else {\n\t\t\t\t\tbulk = fn;\n\t\t\t\t\tfn = function (elem, _key, value) {\n\t\t\t\t\t\treturn bulk.call(jQuery(elem), value);\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (fn) {\n\t\t\t\tfor (; i < len; i++) {\n\t\t\t\t\tfn(\n\t\t\t\t\t\telems[i], key, raw ?\n\t\t\t\t\t\tvalue :\n\t\t\t\t\t\tvalue.call(elems[i], i, fn(elems[i], key))\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (chainable) {\n\t\t\treturn elems;\n\t\t}\n\n\t\t// Gets\n\t\tif (bulk) {\n\t\t\treturn fn.call(elems);\n\t\t}\n\n\t\treturn len ? fn(elems[0], key) : emptyGet;\n\t};\n\n\n\t// Matches dashed string for camelizing\n\tvar rmsPrefix = /^-ms-/,\n\t\trdashAlpha = /-([a-z])/g;\n\n\t// Used by camelCase as callback to replace()\n\tfunction fcamelCase(_all, letter) {\n\t\treturn letter.toUpperCase();\n\t}\n\n\t// Convert dashed to camelCase; used by the css and data modules\n\t// Support: IE <=9 - 11, Edge 12 - 15\n\t// Microsoft forgot to hump their vendor prefix (trac-9572)\n\tfunction camelCase(string) {\n\t\treturn string.replace(rmsPrefix, \"ms-\").replace(rdashAlpha, fcamelCase);\n\t}\n\tvar acceptData = function (owner) {\n\n\t\t// Accepts only:\n\t\t//  - Node\n\t\t//    - Node.ELEMENT_NODE\n\t\t//    - Node.DOCUMENT_NODE\n\t\t//  - Object\n\t\t//    - Any\n\t\treturn owner.nodeType === 1 || owner.nodeType === 9 || !(+owner.nodeType);\n\t};\n\n\n\n\n\tfunction Data() {\n\t\tthis.expando = jQuery.expando + Data.uid++;\n\t}\n\n\tData.uid = 1;\n\n\tData.prototype = {\n\n\t\tcache: function (owner) {\n\n\t\t\t// Check if the owner object already has a cache\n\t\t\tvar value = owner[this.expando];\n\n\t\t\t// If not, create one\n\t\t\tif (!value) {\n\t\t\t\tvalue = {};\n\n\t\t\t\t// We can accept data for non-element nodes in modern browsers,\n\t\t\t\t// but we should not, see trac-8335.\n\t\t\t\t// Always return an empty object.\n\t\t\t\tif (acceptData(owner)) {\n\n\t\t\t\t\t// If it is a node unlikely to be stringify-ed or looped over\n\t\t\t\t\t// use plain assignment\n\t\t\t\t\tif (owner.nodeType) {\n\t\t\t\t\t\towner[this.expando] = value;\n\n\t\t\t\t\t\t// Otherwise secure it in a non-enumerable property\n\t\t\t\t\t\t// configurable must be true to allow the property to be\n\t\t\t\t\t\t// deleted when data is removed\n\t\t\t\t\t} else {\n\t\t\t\t\t\tObject.defineProperty(owner, this.expando, {\n\t\t\t\t\t\t\tvalue: value,\n\t\t\t\t\t\t\tconfigurable: true\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn value;\n\t\t},\n\t\tset: function (owner, data, value) {\n\t\t\tvar prop,\n\t\t\t\tcache = this.cache(owner);\n\n\t\t\t// Handle: [ owner, key, value ] args\n\t\t\t// Always use camelCase key (gh-2257)\n\t\t\tif (typeof data === \"string\") {\n\t\t\t\tcache[camelCase(data)] = value;\n\n\t\t\t\t// Handle: [ owner, { properties } ] args\n\t\t\t} else {\n\n\t\t\t\t// Copy the properties one-by-one to the cache object\n\t\t\t\tfor (prop in data) {\n\t\t\t\t\tcache[camelCase(prop)] = data[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn cache;\n\t\t},\n\t\tget: function (owner, key) {\n\t\t\treturn key === undefined ?\n\t\t\t\tthis.cache(owner) :\n\n\t\t\t\t// Always use camelCase key (gh-2257)\n\t\t\t\towner[this.expando] && owner[this.expando][camelCase(key)];\n\t\t},\n\t\taccess: function (owner, key, value) {\n\n\t\t\t// In cases where either:\n\t\t\t//\n\t\t\t//   1. No key was specified\n\t\t\t//   2. A string key was specified, but no value provided\n\t\t\t//\n\t\t\t// Take the \"read\" path and allow the get method to determine\n\t\t\t// which value to return, respectively either:\n\t\t\t//\n\t\t\t//   1. The entire cache object\n\t\t\t//   2. The data stored at the key\n\t\t\t//\n\t\t\tif (key === undefined ||\n\t\t\t\t((key && typeof key === \"string\") && value === undefined)) {\n\n\t\t\t\treturn this.get(owner, key);\n\t\t\t}\n\n\t\t\t// When the key is not a string, or both a key and value\n\t\t\t// are specified, set or extend (existing objects) with either:\n\t\t\t//\n\t\t\t//   1. An object of properties\n\t\t\t//   2. A key and value\n\t\t\t//\n\t\t\tthis.set(owner, key, value);\n\n\t\t\t// Since the \"set\" path can have two possible entry points\n\t\t\t// return the expected data based on which path was taken[*]\n\t\t\treturn value !== undefined ? value : key;\n\t\t},\n\t\tremove: function (owner, key) {\n\t\t\tvar i,\n\t\t\t\tcache = owner[this.expando];\n\n\t\t\tif (cache === undefined) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (key !== undefined) {\n\n\t\t\t\t// Support array or space separated string of keys\n\t\t\t\tif (Array.isArray(key)) {\n\n\t\t\t\t\t// If key is an array of keys...\n\t\t\t\t\t// We always set camelCase keys, so remove that.\n\t\t\t\t\tkey = key.map(camelCase);\n\t\t\t\t} else {\n\t\t\t\t\tkey = camelCase(key);\n\n\t\t\t\t\t// If a key with the spaces exists, use it.\n\t\t\t\t\t// Otherwise, create an array by matching non-whitespace\n\t\t\t\t\tkey = key in cache ?\n\t\t\t\t\t\t[key] :\n\t\t\t\t\t\t(key.match(rnothtmlwhite) || []);\n\t\t\t\t}\n\n\t\t\t\ti = key.length;\n\n\t\t\t\twhile (i--) {\n\t\t\t\t\tdelete cache[key[i]];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove the expando if there's no more data\n\t\t\tif (key === undefined || jQuery.isEmptyObject(cache)) {\n\n\t\t\t\t// Support: Chrome <=35 - 45\n\t\t\t\t// Webkit & Blink performance suffers when deleting properties\n\t\t\t\t// from DOM nodes, so set to undefined instead\n\t\t\t\t// https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted)\n\t\t\t\tif (owner.nodeType) {\n\t\t\t\t\towner[this.expando] = undefined;\n\t\t\t\t} else {\n\t\t\t\t\tdelete owner[this.expando];\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\thasData: function (owner) {\n\t\t\tvar cache = owner[this.expando];\n\t\t\treturn cache !== undefined && !jQuery.isEmptyObject(cache);\n\t\t}\n\t};\n\tvar dataPriv = new Data();\n\n\tvar dataUser = new Data();\n\n\n\n\t//\tImplementation Summary\n\t//\n\t//\t1. Enforce API surface and semantic compatibility with 1.9.x branch\n\t//\t2. Improve the module's maintainability by reducing the storage\n\t//\t\tpaths to a single mechanism.\n\t//\t3. Use the same single mechanism to support \"private\" and \"user\" data.\n\t//\t4. _Never_ expose \"private\" data to user code (TODO: Drop _data, _removeData)\n\t//\t5. Avoid exposing implementation details on user objects (eg. expando properties)\n\t//\t6. Provide a clear path for implementation upgrade to WeakMap in 2014\n\n\tvar rbrace = /^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,\n\t\trmultiDash = /[A-Z]/g;\n\n\tfunction getData(data) {\n\t\tif (data === \"true\") {\n\t\t\treturn true;\n\t\t}\n\n\t\tif (data === \"false\") {\n\t\t\treturn false;\n\t\t}\n\n\t\tif (data === \"null\") {\n\t\t\treturn null;\n\t\t}\n\n\t\t// Only convert to a number if it doesn't change the string\n\t\tif (data === +data + \"\") {\n\t\t\treturn +data;\n\t\t}\n\n\t\tif (rbrace.test(data)) {\n\t\t\treturn JSON.parse(data);\n\t\t}\n\n\t\treturn data;\n\t}\n\n\tfunction dataAttr(elem, key, data) {\n\t\tvar name;\n\n\t\t// If nothing was found internally, try to fetch any\n\t\t// data from the HTML5 data-* attribute\n\t\tif (data === undefined && elem.nodeType === 1) {\n\t\t\tname = \"data-\" + key.replace(rmultiDash, \"-$&\").toLowerCase();\n\t\t\tdata = elem.getAttribute(name);\n\n\t\t\tif (typeof data === \"string\") {\n\t\t\t\ttry {\n\t\t\t\t\tdata = getData(data);\n\t\t\t\t} catch (e) { }\n\n\t\t\t\t// Make sure we set the data so it isn't changed later\n\t\t\t\tdataUser.set(elem, key, data);\n\t\t\t} else {\n\t\t\t\tdata = undefined;\n\t\t\t}\n\t\t}\n\t\treturn data;\n\t}\n\n\tjQuery.extend({\n\t\thasData: function (elem) {\n\t\t\treturn dataUser.hasData(elem) || dataPriv.hasData(elem);\n\t\t},\n\n\t\tdata: function (elem, name, data) {\n\t\t\treturn dataUser.access(elem, name, data);\n\t\t},\n\n\t\tremoveData: function (elem, name) {\n\t\t\tdataUser.remove(elem, name);\n\t\t},\n\n\t\t// TODO: Now that all calls to _data and _removeData have been replaced\n\t\t// with direct calls to dataPriv methods, these can be deprecated.\n\t\t_data: function (elem, name, data) {\n\t\t\treturn dataPriv.access(elem, name, data);\n\t\t},\n\n\t\t_removeData: function (elem, name) {\n\t\t\tdataPriv.remove(elem, name);\n\t\t}\n\t});\n\n\tjQuery.fn.extend({\n\t\tdata: function (key, value) {\n\t\t\tvar i, name, data,\n\t\t\t\telem = this[0],\n\t\t\t\tattrs = elem && elem.attributes;\n\n\t\t\t// Gets all values\n\t\t\tif (key === undefined) {\n\t\t\t\tif (this.length) {\n\t\t\t\t\tdata = dataUser.get(elem);\n\n\t\t\t\t\tif (elem.nodeType === 1 && !dataPriv.get(elem, \"hasDataAttrs\")) {\n\t\t\t\t\t\ti = attrs.length;\n\t\t\t\t\t\twhile (i--) {\n\n\t\t\t\t\t\t\t// Support: IE 11 only\n\t\t\t\t\t\t\t// The attrs elements can be null (trac-14894)\n\t\t\t\t\t\t\tif (attrs[i]) {\n\t\t\t\t\t\t\t\tname = attrs[i].name;\n\t\t\t\t\t\t\t\tif (name.indexOf(\"data-\") === 0) {\n\t\t\t\t\t\t\t\t\tname = camelCase(name.slice(5));\n\t\t\t\t\t\t\t\t\tdataAttr(elem, name, data[name]);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdataPriv.set(elem, \"hasDataAttrs\", true);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn data;\n\t\t\t}\n\n\t\t\t// Sets multiple values\n\t\t\tif (typeof key === \"object\") {\n\t\t\t\treturn this.each(function () {\n\t\t\t\t\tdataUser.set(this, key);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn access(this, function (value) {\n\t\t\t\tvar data;\n\n\t\t\t\t// The calling jQuery object (element matches) is not empty\n\t\t\t\t// (and therefore has an element appears at this[ 0 ]) and the\n\t\t\t\t// `value` parameter was not undefined. An empty jQuery object\n\t\t\t\t// will result in `undefined` for elem = this[ 0 ] which will\n\t\t\t\t// throw an exception if an attempt to read a data cache is made.\n\t\t\t\tif (elem && value === undefined) {\n\n\t\t\t\t\t// Attempt to get data from the cache\n\t\t\t\t\t// The key will always be camelCased in Data\n\t\t\t\t\tdata = dataUser.get(elem, key);\n\t\t\t\t\tif (data !== undefined) {\n\t\t\t\t\t\treturn data;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Attempt to \"discover\" the data in\n\t\t\t\t\t// HTML5 custom data-* attrs\n\t\t\t\t\tdata = dataAttr(elem, key);\n\t\t\t\t\tif (data !== undefined) {\n\t\t\t\t\t\treturn data;\n\t\t\t\t\t}\n\n\t\t\t\t\t// We tried really hard, but the data doesn't exist.\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Set the data...\n\t\t\t\tthis.each(function () {\n\n\t\t\t\t\t// We always store the camelCased key\n\t\t\t\t\tdataUser.set(this, key, value);\n\t\t\t\t});\n\t\t\t}, null, value, arguments.length > 1, null, true);\n\t\t},\n\n\t\tremoveData: function (key) {\n\t\t\treturn this.each(function () {\n\t\t\t\tdataUser.remove(this, key);\n\t\t\t});\n\t\t}\n\t});\n\n\n\tjQuery.extend({\n\t\tqueue: function (elem, type, data) {\n\t\t\tvar queue;\n\n\t\t\tif (elem) {\n\t\t\t\ttype = (type || \"fx\") + \"queue\";\n\t\t\t\tqueue = dataPriv.get(elem, type);\n\n\t\t\t\t// Speed up dequeue by getting out quickly if this is just a lookup\n\t\t\t\tif (data) {\n\t\t\t\t\tif (!queue || Array.isArray(data)) {\n\t\t\t\t\t\tqueue = dataPriv.access(elem, type, jQuery.makeArray(data));\n\t\t\t\t\t} else {\n\t\t\t\t\t\tqueue.push(data);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn queue || [];\n\t\t\t}\n\t\t},\n\n\t\tdequeue: function (elem, type) {\n\t\t\ttype = type || \"fx\";\n\n\t\t\tvar queue = jQuery.queue(elem, type),\n\t\t\t\tstartLength = queue.length,\n\t\t\t\tfn = queue.shift(),\n\t\t\t\thooks = jQuery._queueHooks(elem, type),\n\t\t\t\tnext = function () {\n\t\t\t\t\tjQuery.dequeue(elem, type);\n\t\t\t\t};\n\n\t\t\t// If the fx queue is dequeued, always remove the progress sentinel\n\t\t\tif (fn === \"inprogress\") {\n\t\t\t\tfn = queue.shift();\n\t\t\t\tstartLength--;\n\t\t\t}\n\n\t\t\tif (fn) {\n\n\t\t\t\t// Add a progress sentinel to prevent the fx queue from being\n\t\t\t\t// automatically dequeued\n\t\t\t\tif (type === \"fx\") {\n\t\t\t\t\tqueue.unshift(\"inprogress\");\n\t\t\t\t}\n\n\t\t\t\t// Clear up the last queue stop function\n\t\t\t\tdelete hooks.stop;\n\t\t\t\tfn.call(elem, next, hooks);\n\t\t\t}\n\n\t\t\tif (!startLength && hooks) {\n\t\t\t\thooks.empty.fire();\n\t\t\t}\n\t\t},\n\n\t\t// Not public - generate a queueHooks object, or return the current one\n\t\t_queueHooks: function (elem, type) {\n\t\t\tvar key = type + \"queueHooks\";\n\t\t\treturn dataPriv.get(elem, key) || dataPriv.access(elem, key, {\n\t\t\t\tempty: jQuery.Callbacks(\"once memory\").add(function () {\n\t\t\t\t\tdataPriv.remove(elem, [type + \"queue\", key]);\n\t\t\t\t})\n\t\t\t});\n\t\t}\n\t});\n\n\tjQuery.fn.extend({\n\t\tqueue: function (type, data) {\n\t\t\tvar setter = 2;\n\n\t\t\tif (typeof type !== \"string\") {\n\t\t\t\tdata = type;\n\t\t\t\ttype = \"fx\";\n\t\t\t\tsetter--;\n\t\t\t}\n\n\t\t\tif (arguments.length < setter) {\n\t\t\t\treturn jQuery.queue(this[0], type);\n\t\t\t}\n\n\t\t\treturn data === undefined ?\n\t\t\t\tthis :\n\t\t\t\tthis.each(function () {\n\t\t\t\t\tvar queue = jQuery.queue(this, type, data);\n\n\t\t\t\t\t// Ensure a hooks for this queue\n\t\t\t\t\tjQuery._queueHooks(this, type);\n\n\t\t\t\t\tif (type === \"fx\" && queue[0] !== \"inprogress\") {\n\t\t\t\t\t\tjQuery.dequeue(this, type);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t},\n\t\tdequeue: function (type) {\n\t\t\treturn this.each(function () {\n\t\t\t\tjQuery.dequeue(this, type);\n\t\t\t});\n\t\t},\n\t\tclearQueue: function (type) {\n\t\t\treturn this.queue(type || \"fx\", []);\n\t\t},\n\n\t\t// Get a promise resolved when queues of a certain type\n\t\t// are emptied (fx is the type by default)\n\t\tpromise: function (type, obj) {\n\t\t\tvar tmp,\n\t\t\t\tcount = 1,\n\t\t\t\tdefer = jQuery.Deferred(),\n\t\t\t\telements = this,\n\t\t\t\ti = this.length,\n\t\t\t\tresolve = function () {\n\t\t\t\t\tif (!(--count)) {\n\t\t\t\t\t\tdefer.resolveWith(elements, [elements]);\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\tif (typeof type !== \"string\") {\n\t\t\t\tobj = type;\n\t\t\t\ttype = undefined;\n\t\t\t}\n\t\t\ttype = type || \"fx\";\n\n\t\t\twhile (i--) {\n\t\t\t\ttmp = dataPriv.get(elements[i], type + \"queueHooks\");\n\t\t\t\tif (tmp && tmp.empty) {\n\t\t\t\t\tcount++;\n\t\t\t\t\ttmp.empty.add(resolve);\n\t\t\t\t}\n\t\t\t}\n\t\t\tresolve();\n\t\t\treturn defer.promise(obj);\n\t\t}\n\t});\n\tvar pnum = (/[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/).source;\n\n\tvar rcssNum = new RegExp(\"^(?:([+-])=|)(\" + pnum + \")([a-z%]*)$\", \"i\");\n\n\n\tvar cssExpand = [\"Top\", \"Right\", \"Bottom\", \"Left\"];\n\n\tvar documentElement = document.documentElement;\n\n\n\n\tvar isAttached = function (elem) {\n\t\treturn jQuery.contains(elem.ownerDocument, elem);\n\t},\n\t\tcomposed = { composed: true };\n\n\t// Support: IE 9 - 11+, Edge 12 - 18+, iOS 10.0 - 10.2 only\n\t// Check attachment across shadow DOM boundaries when possible (gh-3504)\n\t// Support: iOS 10.0-10.2 only\n\t// Early iOS 10 versions support `attachShadow` but not `getRootNode`,\n\t// leading to errors. We need to check for `getRootNode`.\n\tif (documentElement.getRootNode) {\n\t\tisAttached = function (elem) {\n\t\t\treturn jQuery.contains(elem.ownerDocument, elem) ||\n\t\t\t\telem.getRootNode(composed) === elem.ownerDocument;\n\t\t};\n\t}\n\tvar isHiddenWithinTree = function (elem, el) {\n\n\t\t// isHiddenWithinTree might be called from jQuery#filter function;\n\t\t// in that case, element will be second argument\n\t\telem = el || elem;\n\n\t\t// Inline style trumps all\n\t\treturn elem.style.display === \"none\" ||\n\t\t\telem.style.display === \"\" &&\n\n\t\t\t// Otherwise, check computed style\n\t\t\t// Support: Firefox <=43 - 45\n\t\t\t// Disconnected elements can have computed display: none, so first confirm that elem is\n\t\t\t// in the document.\n\t\t\tisAttached(elem) &&\n\n\t\t\tjQuery.css(elem, \"display\") === \"none\";\n\t};\n\n\n\n\tfunction adjustCSS(elem, prop, valueParts, tween) {\n\t\tvar adjusted, scale,\n\t\t\tmaxIterations = 20,\n\t\t\tcurrentValue = tween ?\n\t\t\t\tfunction () {\n\t\t\t\t\treturn tween.cur();\n\t\t\t\t} :\n\t\t\t\tfunction () {\n\t\t\t\t\treturn jQuery.css(elem, prop, \"\");\n\t\t\t\t},\n\t\t\tinitial = currentValue(),\n\t\t\tunit = valueParts && valueParts[3] || (jQuery.cssNumber[prop] ? \"\" : \"px\"),\n\n\t\t\t// Starting value computation is required for potential unit mismatches\n\t\t\tinitialInUnit = elem.nodeType &&\n\t\t\t\t(jQuery.cssNumber[prop] || unit !== \"px\" && +initial) &&\n\t\t\t\trcssNum.exec(jQuery.css(elem, prop));\n\n\t\tif (initialInUnit && initialInUnit[3] !== unit) {\n\n\t\t\t// Support: Firefox <=54\n\t\t\t// Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144)\n\t\t\tinitial = initial / 2;\n\n\t\t\t// Trust units reported by jQuery.css\n\t\t\tunit = unit || initialInUnit[3];\n\n\t\t\t// Iteratively approximate from a nonzero starting point\n\t\t\tinitialInUnit = +initial || 1;\n\n\t\t\twhile (maxIterations--) {\n\n\t\t\t\t// Evaluate and update our best guess (doubling guesses that zero out).\n\t\t\t\t// Finish if the scale equals or crosses 1 (making the old*new product non-positive).\n\t\t\t\tjQuery.style(elem, prop, initialInUnit + unit);\n\t\t\t\tif ((1 - scale) * (1 - (scale = currentValue() / initial || 0.5)) <= 0) {\n\t\t\t\t\tmaxIterations = 0;\n\t\t\t\t}\n\t\t\t\tinitialInUnit = initialInUnit / scale;\n\n\t\t\t}\n\n\t\t\tinitialInUnit = initialInUnit * 2;\n\t\t\tjQuery.style(elem, prop, initialInUnit + unit);\n\n\t\t\t// Make sure we update the tween properties later on\n\t\t\tvalueParts = valueParts || [];\n\t\t}\n\n\t\tif (valueParts) {\n\t\t\tinitialInUnit = +initialInUnit || +initial || 0;\n\n\t\t\t// Apply relative offset (+=/-=) if specified\n\t\t\tadjusted = valueParts[1] ?\n\t\t\t\tinitialInUnit + (valueParts[1] + 1) * valueParts[2] :\n\t\t\t\t+valueParts[2];\n\t\t\tif (tween) {\n\t\t\t\ttween.unit = unit;\n\t\t\t\ttween.start = initialInUnit;\n\t\t\t\ttween.end = adjusted;\n\t\t\t}\n\t\t}\n\t\treturn adjusted;\n\t}\n\n\n\tvar defaultDisplayMap = {};\n\n\tfunction getDefaultDisplay(elem) {\n\t\tvar temp,\n\t\t\tdoc = elem.ownerDocument,\n\t\t\tnodeName = elem.nodeName,\n\t\t\tdisplay = defaultDisplayMap[nodeName];\n\n\t\tif (display) {\n\t\t\treturn display;\n\t\t}\n\n\t\ttemp = doc.body.appendChild(doc.createElement(nodeName));\n\t\tdisplay = jQuery.css(temp, \"display\");\n\n\t\ttemp.parentNode.removeChild(temp);\n\n\t\tif (display === \"none\") {\n\t\t\tdisplay = \"block\";\n\t\t}\n\t\tdefaultDisplayMap[nodeName] = display;\n\n\t\treturn display;\n\t}\n\n\tfunction showHide(elements, show) {\n\t\tvar display, elem,\n\t\t\tvalues = [],\n\t\t\tindex = 0,\n\t\t\tlength = elements.length;\n\n\t\t// Determine new display value for elements that need to change\n\t\tfor (; index < length; index++) {\n\t\t\telem = elements[index];\n\t\t\tif (!elem.style) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tdisplay = elem.style.display;\n\t\t\tif (show) {\n\n\t\t\t\t// Since we force visibility upon cascade-hidden elements, an immediate (and slow)\n\t\t\t\t// check is required in this first loop unless we have a nonempty display value (either\n\t\t\t\t// inline or about-to-be-restored)\n\t\t\t\tif (display === \"none\") {\n\t\t\t\t\tvalues[index] = dataPriv.get(elem, \"display\") || null;\n\t\t\t\t\tif (!values[index]) {\n\t\t\t\t\t\telem.style.display = \"\";\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (elem.style.display === \"\" && isHiddenWithinTree(elem)) {\n\t\t\t\t\tvalues[index] = getDefaultDisplay(elem);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (display !== \"none\") {\n\t\t\t\t\tvalues[index] = \"none\";\n\n\t\t\t\t\t// Remember what we're overwriting\n\t\t\t\t\tdataPriv.set(elem, \"display\", display);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Set the display of the elements in a second loop to avoid constant reflow\n\t\tfor (index = 0; index < length; index++) {\n\t\t\tif (values[index] != null) {\n\t\t\t\telements[index].style.display = values[index];\n\t\t\t}\n\t\t}\n\n\t\treturn elements;\n\t}\n\n\tjQuery.fn.extend({\n\t\tshow: function () {\n\t\t\treturn showHide(this, true);\n\t\t},\n\t\thide: function () {\n\t\t\treturn showHide(this);\n\t\t},\n\t\ttoggle: function (state) {\n\t\t\tif (typeof state === \"boolean\") {\n\t\t\t\treturn state ? this.show() : this.hide();\n\t\t\t}\n\n\t\t\treturn this.each(function () {\n\t\t\t\tif (isHiddenWithinTree(this)) {\n\t\t\t\t\tjQuery(this).show();\n\t\t\t\t} else {\n\t\t\t\t\tjQuery(this).hide();\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t});\n\tvar rcheckableType = (/^(?:checkbox|radio)$/i);\n\n\tvar rtagName = (/<([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]*)/i);\n\n\tvar rscriptType = (/^$|^module$|\\/(?:java|ecma)script/i);\n\n\n\n\t(function () {\n\t\tvar fragment = document.createDocumentFragment(),\n\t\t\tdiv = fragment.appendChild(document.createElement(\"div\")),\n\t\t\tinput = document.createElement(\"input\");\n\n\t\t// Support: Android 4.0 - 4.3 only\n\t\t// Check state lost if the name is set (trac-11217)\n\t\t// Support: Windows Web Apps (WWA)\n\t\t// `name` and `type` must use .setAttribute for WWA (trac-14901)\n\t\tinput.setAttribute(\"type\", \"radio\");\n\t\tinput.setAttribute(\"checked\", \"checked\");\n\t\tinput.setAttribute(\"name\", \"t\");\n\n\t\tdiv.appendChild(input);\n\n\t\t// Support: Android <=4.1 only\n\t\t// Older WebKit doesn't clone checked state correctly in fragments\n\t\tsupport.checkClone = div.cloneNode(true).cloneNode(true).lastChild.checked;\n\n\t\t// Support: IE <=11 only\n\t\t// Make sure textarea (and checkbox) defaultValue is properly cloned\n\t\tdiv.innerHTML = \"<textarea>x</textarea>\";\n\t\tsupport.noCloneChecked = !!div.cloneNode(true).lastChild.defaultValue;\n\n\t\t// Support: IE <=9 only\n\t\t// IE <=9 replaces <option> tags with their contents when inserted outside of\n\t\t// the select element.\n\t\tdiv.innerHTML = \"<option></option>\";\n\t\tsupport.option = !!div.lastChild;\n\t})();\n\n\n\t// We have to close these tags to support XHTML (trac-13200)\n\tvar wrapMap = {\n\n\t\t// XHTML parsers do not magically insert elements in the\n\t\t// same way that tag soup parsers do. So we cannot shorten\n\t\t// this by omitting <tbody> or other required elements.\n\t\tthead: [1, \"<table>\", \"</table>\"],\n\t\tcol: [2, \"<table><colgroup>\", \"</colgroup></table>\"],\n\t\ttr: [2, \"<table><tbody>\", \"</tbody></table>\"],\n\t\ttd: [3, \"<table><tbody><tr>\", \"</tr></tbody></table>\"],\n\n\t\t_default: [0, \"\", \"\"]\n\t};\n\n\twrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;\n\twrapMap.th = wrapMap.td;\n\n\t// Support: IE <=9 only\n\tif (!support.option) {\n\t\twrapMap.optgroup = wrapMap.option = [1, \"<select multiple='multiple'>\", \"</select>\"];\n\t}\n\n\n\tfunction getAll(context, tag) {\n\n\t\t// Support: IE <=9 - 11 only\n\t\t// Use typeof to avoid zero-argument method invocation on host objects (trac-15151)\n\t\tvar ret;\n\n\t\tif (typeof context.getElementsByTagName !== \"undefined\") {\n\t\t\tret = context.getElementsByTagName(tag || \"*\");\n\n\t\t} else if (typeof context.querySelectorAll !== \"undefined\") {\n\t\t\tret = context.querySelectorAll(tag || \"*\");\n\n\t\t} else {\n\t\t\tret = [];\n\t\t}\n\n\t\tif (tag === undefined || tag && nodeName(context, tag)) {\n\t\t\treturn jQuery.merge([context], ret);\n\t\t}\n\n\t\treturn ret;\n\t}\n\n\n\t// Mark scripts as having already been evaluated\n\tfunction setGlobalEval(elems, refElements) {\n\t\tvar i = 0,\n\t\t\tl = elems.length;\n\n\t\tfor (; i < l; i++) {\n\t\t\tdataPriv.set(\n\t\t\t\telems[i],\n\t\t\t\t\"globalEval\",\n\t\t\t\t!refElements || dataPriv.get(refElements[i], \"globalEval\")\n\t\t\t);\n\t\t}\n\t}\n\n\n\tvar rhtml = /<|&#?\\w+;/;\n\n\tfunction buildFragment(elems, context, scripts, selection, ignored) {\n\t\tvar elem, tmp, tag, wrap, attached, j,\n\t\t\tfragment = context.createDocumentFragment(),\n\t\t\tnodes = [],\n\t\t\ti = 0,\n\t\t\tl = elems.length;\n\n\t\tfor (; i < l; i++) {\n\t\t\telem = elems[i];\n\n\t\t\tif (elem || elem === 0) {\n\n\t\t\t\t// Add nodes directly\n\t\t\t\tif (toType(elem) === \"object\") {\n\n\t\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\t\tjQuery.merge(nodes, elem.nodeType ? [elem] : elem);\n\n\t\t\t\t\t// Convert non-html into a text node\n\t\t\t\t} else if (!rhtml.test(elem)) {\n\t\t\t\t\tnodes.push(context.createTextNode(elem));\n\n\t\t\t\t\t// Convert html into DOM nodes\n\t\t\t\t} else {\n\t\t\t\t\ttmp = tmp || fragment.appendChild(context.createElement(\"div\"));\n\n\t\t\t\t\t// Deserialize a standard representation\n\t\t\t\t\ttag = (rtagName.exec(elem) || [\"\", \"\"])[1].toLowerCase();\n\t\t\t\t\twrap = wrapMap[tag] || wrapMap._default;\n\t\t\t\t\ttmp.innerHTML = wrap[1] + jQuery.htmlPrefilter(elem) + wrap[2];\n\n\t\t\t\t\t// Descend through wrappers to the right content\n\t\t\t\t\tj = wrap[0];\n\t\t\t\t\twhile (j--) {\n\t\t\t\t\t\ttmp = tmp.lastChild;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\t\tjQuery.merge(nodes, tmp.childNodes);\n\n\t\t\t\t\t// Remember the top-level container\n\t\t\t\t\ttmp = fragment.firstChild;\n\n\t\t\t\t\t// Ensure the created nodes are orphaned (trac-12392)\n\t\t\t\t\ttmp.textContent = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Remove wrapper from fragment\n\t\tfragment.textContent = \"\";\n\n\t\ti = 0;\n\t\twhile ((elem = nodes[i++])) {\n\n\t\t\t// Skip elements already in the context collection (trac-4087)\n\t\t\tif (selection && jQuery.inArray(elem, selection) > -1) {\n\t\t\t\tif (ignored) {\n\t\t\t\t\tignored.push(elem);\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tattached = isAttached(elem);\n\n\t\t\t// Append to fragment\n\t\t\ttmp = getAll(fragment.appendChild(elem), \"script\");\n\n\t\t\t// Preserve script evaluation history\n\t\t\tif (attached) {\n\t\t\t\tsetGlobalEval(tmp);\n\t\t\t}\n\n\t\t\t// Capture executables\n\t\t\tif (scripts) {\n\t\t\t\tj = 0;\n\t\t\t\twhile ((elem = tmp[j++])) {\n\t\t\t\t\tif (rscriptType.test(elem.type || \"\")) {\n\t\t\t\t\t\tscripts.push(elem);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn fragment;\n\t}\n\n\n\tvar rtypenamespace = /^([^.]*)(?:\\.(.+)|)/;\n\n\tfunction returnTrue() {\n\t\treturn true;\n\t}\n\n\tfunction returnFalse() {\n\t\treturn false;\n\t}\n\n\tfunction on(elem, types, selector, data, fn, one) {\n\t\tvar origFn, type;\n\n\t\t// Types can be a map of types/handlers\n\t\tif (typeof types === \"object\") {\n\n\t\t\t// ( types-Object, selector, data )\n\t\t\tif (typeof selector !== \"string\") {\n\n\t\t\t\t// ( types-Object, data )\n\t\t\t\tdata = data || selector;\n\t\t\t\tselector = undefined;\n\t\t\t}\n\t\t\tfor (type in types) {\n\t\t\t\ton(elem, type, selector, data, types[type], one);\n\t\t\t}\n\t\t\treturn elem;\n\t\t}\n\n\t\tif (data == null && fn == null) {\n\n\t\t\t// ( types, fn )\n\t\t\tfn = selector;\n\t\t\tdata = selector = undefined;\n\t\t} else if (fn == null) {\n\t\t\tif (typeof selector === \"string\") {\n\n\t\t\t\t// ( types, selector, fn )\n\t\t\t\tfn = data;\n\t\t\t\tdata = undefined;\n\t\t\t} else {\n\n\t\t\t\t// ( types, data, fn )\n\t\t\t\tfn = data;\n\t\t\t\tdata = selector;\n\t\t\t\tselector = undefined;\n\t\t\t}\n\t\t}\n\t\tif (fn === false) {\n\t\t\tfn = returnFalse;\n\t\t} else if (!fn) {\n\t\t\treturn elem;\n\t\t}\n\n\t\tif (one === 1) {\n\t\t\torigFn = fn;\n\t\t\tfn = function (event) {\n\n\t\t\t\t// Can use an empty set, since event contains the info\n\t\t\t\tjQuery().off(event);\n\t\t\t\treturn origFn.apply(this, arguments);\n\t\t\t};\n\n\t\t\t// Use same guid so caller can remove using origFn\n\t\t\tfn.guid = origFn.guid || (origFn.guid = jQuery.guid++);\n\t\t}\n\t\treturn elem.each(function () {\n\t\t\tjQuery.event.add(this, types, fn, data, selector);\n\t\t});\n\t}\n\n\t/*\n\t * Helper functions for managing events -- not part of the public interface.\n\t * Props to Dean Edwards' addEvent library for many of the ideas.\n\t */\n\tjQuery.event = {\n\n\t\tglobal: {},\n\n\t\tadd: function (elem, types, handler, data, selector) {\n\n\t\t\tvar handleObjIn, eventHandle, tmp,\n\t\t\t\tevents, t, handleObj,\n\t\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\t\telemData = dataPriv.get(elem);\n\n\t\t\t// Only attach events to objects that accept data\n\t\t\tif (!acceptData(elem)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Caller can pass in an object of custom data in lieu of the handler\n\t\t\tif (handler.handler) {\n\t\t\t\thandleObjIn = handler;\n\t\t\t\thandler = handleObjIn.handler;\n\t\t\t\tselector = handleObjIn.selector;\n\t\t\t}\n\n\t\t\t// Ensure that invalid selectors throw exceptions at attach time\n\t\t\t// Evaluate against documentElement in case elem is a non-element node (e.g., document)\n\t\t\tif (selector) {\n\t\t\t\tjQuery.find.matchesSelector(documentElement, selector);\n\t\t\t}\n\n\t\t\t// Make sure that the handler has a unique ID, used to find/remove it later\n\t\t\tif (!handler.guid) {\n\t\t\t\thandler.guid = jQuery.guid++;\n\t\t\t}\n\n\t\t\t// Init the element's event structure and main handler, if this is the first\n\t\t\tif (!(events = elemData.events)) {\n\t\t\t\tevents = elemData.events = Object.create(null);\n\t\t\t}\n\t\t\tif (!(eventHandle = elemData.handle)) {\n\t\t\t\teventHandle = elemData.handle = function (e) {\n\n\t\t\t\t\t// Discard the second event of a jQuery.event.trigger() and\n\t\t\t\t\t// when an event is called after a page has unloaded\n\t\t\t\t\treturn typeof jQuery !== \"undefined\" && jQuery.event.triggered !== e.type ?\n\t\t\t\t\t\tjQuery.event.dispatch.apply(elem, arguments) : undefined;\n\t\t\t\t};\n\t\t\t}\n\n\t\t\t// Handle multiple events separated by a space\n\t\t\ttypes = (types || \"\").match(rnothtmlwhite) || [\"\"];\n\t\t\tt = types.length;\n\t\t\twhile (t--) {\n\t\t\t\ttmp = rtypenamespace.exec(types[t]) || [];\n\t\t\t\ttype = origType = tmp[1];\n\t\t\t\tnamespaces = (tmp[2] || \"\").split(\".\").sort();\n\n\t\t\t\t// There *must* be a type, no attaching namespace-only handlers\n\t\t\t\tif (!type) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// If event changes its type, use the special event handlers for the changed type\n\t\t\t\tspecial = jQuery.event.special[type] || {};\n\n\t\t\t\t// If selector defined, determine special event api type, otherwise given type\n\t\t\t\ttype = (selector ? special.delegateType : special.bindType) || type;\n\n\t\t\t\t// Update special based on newly reset type\n\t\t\t\tspecial = jQuery.event.special[type] || {};\n\n\t\t\t\t// handleObj is passed to all event handlers\n\t\t\t\thandleObj = jQuery.extend({\n\t\t\t\t\ttype: type,\n\t\t\t\t\torigType: origType,\n\t\t\t\t\tdata: data,\n\t\t\t\t\thandler: handler,\n\t\t\t\t\tguid: handler.guid,\n\t\t\t\t\tselector: selector,\n\t\t\t\t\tneedsContext: selector && jQuery.expr.match.needsContext.test(selector),\n\t\t\t\t\tnamespace: namespaces.join(\".\")\n\t\t\t\t}, handleObjIn);\n\n\t\t\t\t// Init the event handler queue if we're the first\n\t\t\t\tif (!(handlers = events[type])) {\n\t\t\t\t\thandlers = events[type] = [];\n\t\t\t\t\thandlers.delegateCount = 0;\n\n\t\t\t\t\t// Only use addEventListener if the special events handler returns false\n\t\t\t\t\tif (!special.setup ||\n\t\t\t\t\t\tspecial.setup.call(elem, data, namespaces, eventHandle) === false) {\n\n\t\t\t\t\t\tif (elem.addEventListener) {\n\t\t\t\t\t\t\telem.addEventListener(type, eventHandle);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (special.add) {\n\t\t\t\t\tspecial.add.call(elem, handleObj);\n\n\t\t\t\t\tif (!handleObj.handler.guid) {\n\t\t\t\t\t\thandleObj.handler.guid = handler.guid;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Add to the element's handler list, delegates in front\n\t\t\t\tif (selector) {\n\t\t\t\t\thandlers.splice(handlers.delegateCount++, 0, handleObj);\n\t\t\t\t} else {\n\t\t\t\t\thandlers.push(handleObj);\n\t\t\t\t}\n\n\t\t\t\t// Keep track of which events have ever been used, for event optimization\n\t\t\t\tjQuery.event.global[type] = true;\n\t\t\t}\n\n\t\t},\n\n\t\t// Detach an event or set of events from an element\n\t\tremove: function (elem, types, handler, selector, mappedTypes) {\n\n\t\t\tvar j, origCount, tmp,\n\t\t\t\tevents, t, handleObj,\n\t\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\t\telemData = dataPriv.hasData(elem) && dataPriv.get(elem);\n\n\t\t\tif (!elemData || !(events = elemData.events)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Once for each type.namespace in types; type may be omitted\n\t\t\ttypes = (types || \"\").match(rnothtmlwhite) || [\"\"];\n\t\t\tt = types.length;\n\t\t\twhile (t--) {\n\t\t\t\ttmp = rtypenamespace.exec(types[t]) || [];\n\t\t\t\ttype = origType = tmp[1];\n\t\t\t\tnamespaces = (tmp[2] || \"\").split(\".\").sort();\n\n\t\t\t\t// Unbind all events (on this namespace, if provided) for the element\n\t\t\t\tif (!type) {\n\t\t\t\t\tfor (type in events) {\n\t\t\t\t\t\tjQuery.event.remove(elem, type + types[t], handler, selector, true);\n\t\t\t\t\t}\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tspecial = jQuery.event.special[type] || {};\n\t\t\t\ttype = (selector ? special.delegateType : special.bindType) || type;\n\t\t\t\thandlers = events[type] || [];\n\t\t\t\ttmp = tmp[2] &&\n\t\t\t\t\tnew RegExp(\"(^|\\\\.)\" + namespaces.join(\"\\\\.(?:.*\\\\.|)\") + \"(\\\\.|$)\");\n\n\t\t\t\t// Remove matching events\n\t\t\t\torigCount = j = handlers.length;\n\t\t\t\twhile (j--) {\n\t\t\t\t\thandleObj = handlers[j];\n\n\t\t\t\t\tif ((mappedTypes || origType === handleObj.origType) &&\n\t\t\t\t\t\t(!handler || handler.guid === handleObj.guid) &&\n\t\t\t\t\t\t(!tmp || tmp.test(handleObj.namespace)) &&\n\t\t\t\t\t\t(!selector || selector === handleObj.selector ||\n\t\t\t\t\t\t\tselector === \"**\" && handleObj.selector)) {\n\t\t\t\t\t\thandlers.splice(j, 1);\n\n\t\t\t\t\t\tif (handleObj.selector) {\n\t\t\t\t\t\t\thandlers.delegateCount--;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (special.remove) {\n\t\t\t\t\t\t\tspecial.remove.call(elem, handleObj);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Remove generic event handler if we removed something and no more handlers exist\n\t\t\t\t// (avoids potential for endless recursion during removal of special event handlers)\n\t\t\t\tif (origCount && !handlers.length) {\n\t\t\t\t\tif (!special.teardown ||\n\t\t\t\t\t\tspecial.teardown.call(elem, namespaces, elemData.handle) === false) {\n\n\t\t\t\t\t\tjQuery.removeEvent(elem, type, elemData.handle);\n\t\t\t\t\t}\n\n\t\t\t\t\tdelete events[type];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove data and the expando if it's no longer used\n\t\t\tif (jQuery.isEmptyObject(events)) {\n\t\t\t\tdataPriv.remove(elem, \"handle events\");\n\t\t\t}\n\t\t},\n\n\t\tdispatch: function (nativeEvent) {\n\n\t\t\tvar i, j, ret, matched, handleObj, handlerQueue,\n\t\t\t\targs = new Array(arguments.length),\n\n\t\t\t\t// Make a writable jQuery.Event from the native event object\n\t\t\t\tevent = jQuery.event.fix(nativeEvent),\n\n\t\t\t\thandlers = (\n\t\t\t\t\tdataPriv.get(this, \"events\") || Object.create(null)\n\t\t\t\t)[event.type] || [],\n\t\t\t\tspecial = jQuery.event.special[event.type] || {};\n\n\t\t\t// Use the fix-ed jQuery.Event rather than the (read-only) native event\n\t\t\targs[0] = event;\n\n\t\t\tfor (i = 1; i < arguments.length; i++) {\n\t\t\t\targs[i] = arguments[i];\n\t\t\t}\n\n\t\t\tevent.delegateTarget = this;\n\n\t\t\t// Call the preDispatch hook for the mapped type, and let it bail if desired\n\t\t\tif (special.preDispatch && special.preDispatch.call(this, event) === false) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Determine handlers\n\t\t\thandlerQueue = jQuery.event.handlers.call(this, event, handlers);\n\n\t\t\t// Run delegates first; they may want to stop propagation beneath us\n\t\t\ti = 0;\n\t\t\twhile ((matched = handlerQueue[i++]) && !event.isPropagationStopped()) {\n\t\t\t\tevent.currentTarget = matched.elem;\n\n\t\t\t\tj = 0;\n\t\t\t\twhile ((handleObj = matched.handlers[j++]) &&\n\t\t\t\t\t!event.isImmediatePropagationStopped()) {\n\n\t\t\t\t\t// If the event is namespaced, then each handler is only invoked if it is\n\t\t\t\t\t// specially universal or its namespaces are a superset of the event's.\n\t\t\t\t\tif (!event.rnamespace || handleObj.namespace === false ||\n\t\t\t\t\t\tevent.rnamespace.test(handleObj.namespace)) {\n\n\t\t\t\t\t\tevent.handleObj = handleObj;\n\t\t\t\t\t\tevent.data = handleObj.data;\n\n\t\t\t\t\t\tret = ((jQuery.event.special[handleObj.origType] || {}).handle ||\n\t\t\t\t\t\t\thandleObj.handler).apply(matched.elem, args);\n\n\t\t\t\t\t\tif (ret !== undefined) {\n\t\t\t\t\t\t\tif ((event.result = ret) === false) {\n\t\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Call the postDispatch hook for the mapped type\n\t\t\tif (special.postDispatch) {\n\t\t\t\tspecial.postDispatch.call(this, event);\n\t\t\t}\n\n\t\t\treturn event.result;\n\t\t},\n\n\t\thandlers: function (event, handlers) {\n\t\t\tvar i, handleObj, sel, matchedHandlers, matchedSelectors,\n\t\t\t\thandlerQueue = [],\n\t\t\t\tdelegateCount = handlers.delegateCount,\n\t\t\t\tcur = event.target;\n\n\t\t\t// Find delegate handlers\n\t\t\tif (delegateCount &&\n\n\t\t\t\t// Support: IE <=9\n\t\t\t\t// Black-hole SVG <use> instance trees (trac-13180)\n\t\t\t\tcur.nodeType &&\n\n\t\t\t\t// Support: Firefox <=42\n\t\t\t\t// Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861)\n\t\t\t\t// https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click\n\t\t\t\t// Support: IE 11 only\n\t\t\t\t// ...but not arrow key \"clicks\" of radio inputs, which can have `button` -1 (gh-2343)\n\t\t\t\t!(event.type === \"click\" && event.button >= 1)) {\n\n\t\t\t\tfor (; cur !== this; cur = cur.parentNode || this) {\n\n\t\t\t\t\t// Don't check non-elements (trac-13208)\n\t\t\t\t\t// Don't process clicks on disabled elements (trac-6911, trac-8165, trac-11382, trac-11764)\n\t\t\t\t\tif (cur.nodeType === 1 && !(event.type === \"click\" && cur.disabled === true)) {\n\t\t\t\t\t\tmatchedHandlers = [];\n\t\t\t\t\t\tmatchedSelectors = {};\n\t\t\t\t\t\tfor (i = 0; i < delegateCount; i++) {\n\t\t\t\t\t\t\thandleObj = handlers[i];\n\n\t\t\t\t\t\t\t// Don't conflict with Object.prototype properties (trac-13203)\n\t\t\t\t\t\t\tsel = handleObj.selector + \" \";\n\n\t\t\t\t\t\t\tif (matchedSelectors[sel] === undefined) {\n\t\t\t\t\t\t\t\tmatchedSelectors[sel] = handleObj.needsContext ?\n\t\t\t\t\t\t\t\t\tjQuery(sel, this).index(cur) > -1 :\n\t\t\t\t\t\t\t\t\tjQuery.find(sel, this, null, [cur]).length;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (matchedSelectors[sel]) {\n\t\t\t\t\t\t\t\tmatchedHandlers.push(handleObj);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (matchedHandlers.length) {\n\t\t\t\t\t\t\thandlerQueue.push({ elem: cur, handlers: matchedHandlers });\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Add the remaining (directly-bound) handlers\n\t\t\tcur = this;\n\t\t\tif (delegateCount < handlers.length) {\n\t\t\t\thandlerQueue.push({ elem: cur, handlers: handlers.slice(delegateCount) });\n\t\t\t}\n\n\t\t\treturn handlerQueue;\n\t\t},\n\n\t\taddProp: function (name, hook) {\n\t\t\tObject.defineProperty(jQuery.Event.prototype, name, {\n\t\t\t\tenumerable: true,\n\t\t\t\tconfigurable: true,\n\n\t\t\t\tget: isFunction(hook) ?\n\t\t\t\t\tfunction () {\n\t\t\t\t\t\tif (this.originalEvent) {\n\t\t\t\t\t\t\treturn hook(this.originalEvent);\n\t\t\t\t\t\t}\n\t\t\t\t\t} :\n\t\t\t\t\tfunction () {\n\t\t\t\t\t\tif (this.originalEvent) {\n\t\t\t\t\t\t\treturn this.originalEvent[name];\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\n\t\t\t\tset: function (value) {\n\t\t\t\t\tObject.defineProperty(this, name, {\n\t\t\t\t\t\tenumerable: true,\n\t\t\t\t\t\tconfigurable: true,\n\t\t\t\t\t\twritable: true,\n\t\t\t\t\t\tvalue: value\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\tfix: function (originalEvent) {\n\t\t\treturn originalEvent[jQuery.expando] ?\n\t\t\t\toriginalEvent :\n\t\t\t\tnew jQuery.Event(originalEvent);\n\t\t},\n\n\t\tspecial: {\n\t\t\tload: {\n\n\t\t\t\t// Prevent triggered image.load events from bubbling to window.load\n\t\t\t\tnoBubble: true\n\t\t\t},\n\t\t\tclick: {\n\n\t\t\t\t// Utilize native event to ensure correct state for checkable inputs\n\t\t\t\tsetup: function (data) {\n\n\t\t\t\t\t// For mutual compressibility with _default, replace `this` access with a local var.\n\t\t\t\t\t// `|| data` is dead code meant only to preserve the variable through minification.\n\t\t\t\t\tvar el = this || data;\n\n\t\t\t\t\t// Claim the first handler\n\t\t\t\t\tif (rcheckableType.test(el.type) &&\n\t\t\t\t\t\tel.click && nodeName(el, \"input\")) {\n\n\t\t\t\t\t\t// dataPriv.set( el, \"click\", ... )\n\t\t\t\t\t\tleverageNative(el, \"click\", true);\n\t\t\t\t\t}\n\n\t\t\t\t\t// Return false to allow normal processing in the caller\n\t\t\t\t\treturn false;\n\t\t\t\t},\n\t\t\t\ttrigger: function (data) {\n\n\t\t\t\t\t// For mutual compressibility with _default, replace `this` access with a local var.\n\t\t\t\t\t// `|| data` is dead code meant only to preserve the variable through minification.\n\t\t\t\t\tvar el = this || data;\n\n\t\t\t\t\t// Force setup before triggering a click\n\t\t\t\t\tif (rcheckableType.test(el.type) &&\n\t\t\t\t\t\tel.click && nodeName(el, \"input\")) {\n\n\t\t\t\t\t\tleverageNative(el, \"click\");\n\t\t\t\t\t}\n\n\t\t\t\t\t// Return non-false to allow normal event-path propagation\n\t\t\t\t\treturn true;\n\t\t\t\t},\n\n\t\t\t\t// For cross-browser consistency, suppress native .click() on links\n\t\t\t\t// Also prevent it if we're currently inside a leveraged native-event stack\n\t\t\t\t_default: function (event) {\n\t\t\t\t\tvar target = event.target;\n\t\t\t\t\treturn rcheckableType.test(target.type) &&\n\t\t\t\t\t\ttarget.click && nodeName(target, \"input\") &&\n\t\t\t\t\t\tdataPriv.get(target, \"click\") ||\n\t\t\t\t\t\tnodeName(target, \"a\");\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tbeforeunload: {\n\t\t\t\tpostDispatch: function (event) {\n\n\t\t\t\t\t// Support: Firefox 20+\n\t\t\t\t\t// Firefox doesn't alert if the returnValue field is not set.\n\t\t\t\t\tif (event.result !== undefined && event.originalEvent) {\n\t\t\t\t\t\tevent.originalEvent.returnValue = event.result;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t// Ensure the presence of an event listener that handles manually-triggered\n\t// synthetic events by interrupting progress until reinvoked in response to\n\t// *native* events that it fires directly, ensuring that state changes have\n\t// already occurred before other listeners are invoked.\n\tfunction leverageNative(el, type, isSetup) {\n\n\t\t// Missing `isSetup` indicates a trigger call, which must force setup through jQuery.event.add\n\t\tif (!isSetup) {\n\t\t\tif (dataPriv.get(el, type) === undefined) {\n\t\t\t\tjQuery.event.add(el, type, returnTrue);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\t// Register the controller as a special universal handler for all event namespaces\n\t\tdataPriv.set(el, type, false);\n\t\tjQuery.event.add(el, type, {\n\t\t\tnamespace: false,\n\t\t\thandler: function (event) {\n\t\t\t\tvar result,\n\t\t\t\t\tsaved = dataPriv.get(this, type);\n\n\t\t\t\tif ((event.isTrigger & 1) && this[type]) {\n\n\t\t\t\t\t// Interrupt processing of the outer synthetic .trigger()ed event\n\t\t\t\t\tif (!saved) {\n\n\t\t\t\t\t\t// Store arguments for use when handling the inner native event\n\t\t\t\t\t\t// There will always be at least one argument (an event object), so this array\n\t\t\t\t\t\t// will not be confused with a leftover capture object.\n\t\t\t\t\t\tsaved = slice.call(arguments);\n\t\t\t\t\t\tdataPriv.set(this, type, saved);\n\n\t\t\t\t\t\t// Trigger the native event and capture its result\n\t\t\t\t\t\tthis[type]();\n\t\t\t\t\t\tresult = dataPriv.get(this, type);\n\t\t\t\t\t\tdataPriv.set(this, type, false);\n\n\t\t\t\t\t\tif (saved !== result) {\n\n\t\t\t\t\t\t\t// Cancel the outer synthetic event\n\t\t\t\t\t\t\tevent.stopImmediatePropagation();\n\t\t\t\t\t\t\tevent.preventDefault();\n\n\t\t\t\t\t\t\treturn result;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// If this is an inner synthetic event for an event with a bubbling surrogate\n\t\t\t\t\t\t// (focus or blur), assume that the surrogate already propagated from triggering\n\t\t\t\t\t\t// the native event and prevent that from happening again here.\n\t\t\t\t\t\t// This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the\n\t\t\t\t\t\t// bubbling surrogate propagates *after* the non-bubbling base), but that seems\n\t\t\t\t\t\t// less bad than duplication.\n\t\t\t\t\t} else if ((jQuery.event.special[type] || {}).delegateType) {\n\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t}\n\n\t\t\t\t\t// If this is a native event triggered above, everything is now in order\n\t\t\t\t\t// Fire an inner synthetic event with the original arguments\n\t\t\t\t} else if (saved) {\n\n\t\t\t\t\t// ...and capture the result\n\t\t\t\t\tdataPriv.set(this, type, jQuery.event.trigger(\n\t\t\t\t\t\tsaved[0],\n\t\t\t\t\t\tsaved.slice(1),\n\t\t\t\t\t\tthis\n\t\t\t\t\t));\n\n\t\t\t\t\t// Abort handling of the native event by all jQuery handlers while allowing\n\t\t\t\t\t// native handlers on the same element to run. On target, this is achieved\n\t\t\t\t\t// by stopping immediate propagation just on the jQuery event. However,\n\t\t\t\t\t// the native event is re-wrapped by a jQuery one on each level of the\n\t\t\t\t\t// propagation so the only way to stop it for jQuery is to stop it for\n\t\t\t\t\t// everyone via native `stopPropagation()`. This is not a problem for\n\t\t\t\t\t// focus/blur which don't bubble, but it does also stop click on checkboxes\n\t\t\t\t\t// and radios. We accept this limitation.\n\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\tevent.isImmediatePropagationStopped = returnTrue;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\tjQuery.removeEvent = function (elem, type, handle) {\n\n\t\t// This \"if\" is needed for plain objects\n\t\tif (elem.removeEventListener) {\n\t\t\telem.removeEventListener(type, handle);\n\t\t}\n\t};\n\n\tjQuery.Event = function (src, props) {\n\n\t\t// Allow instantiation without the 'new' keyword\n\t\tif (!(this instanceof jQuery.Event)) {\n\t\t\treturn new jQuery.Event(src, props);\n\t\t}\n\n\t\t// Event object\n\t\tif (src && src.type) {\n\t\t\tthis.originalEvent = src;\n\t\t\tthis.type = src.type;\n\n\t\t\t// Events bubbling up the document may have been marked as prevented\n\t\t\t// by a handler lower down the tree; reflect the correct value.\n\t\t\tthis.isDefaultPrevented = src.defaultPrevented ||\n\t\t\t\tsrc.defaultPrevented === undefined &&\n\n\t\t\t\t// Support: Android <=2.3 only\n\t\t\t\tsrc.returnValue === false ?\n\t\t\t\treturnTrue :\n\t\t\t\treturnFalse;\n\n\t\t\t// Create target properties\n\t\t\t// Support: Safari <=6 - 7 only\n\t\t\t// Target should not be a text node (trac-504, trac-13143)\n\t\t\tthis.target = (src.target && src.target.nodeType === 3) ?\n\t\t\t\tsrc.target.parentNode :\n\t\t\t\tsrc.target;\n\n\t\t\tthis.currentTarget = src.currentTarget;\n\t\t\tthis.relatedTarget = src.relatedTarget;\n\n\t\t\t// Event type\n\t\t} else {\n\t\t\tthis.type = src;\n\t\t}\n\n\t\t// Put explicitly provided properties onto the event object\n\t\tif (props) {\n\t\t\tjQuery.extend(this, props);\n\t\t}\n\n\t\t// Create a timestamp if incoming event doesn't have one\n\t\tthis.timeStamp = src && src.timeStamp || Date.now();\n\n\t\t// Mark it as fixed\n\t\tthis[jQuery.expando] = true;\n\t};\n\n\t// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding\n\t// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html\n\tjQuery.Event.prototype = {\n\t\tconstructor: jQuery.Event,\n\t\tisDefaultPrevented: returnFalse,\n\t\tisPropagationStopped: returnFalse,\n\t\tisImmediatePropagationStopped: returnFalse,\n\t\tisSimulated: false,\n\n\t\tpreventDefault: function () {\n\t\t\tvar e = this.originalEvent;\n\n\t\t\tthis.isDefaultPrevented = returnTrue;\n\n\t\t\tif (e && !this.isSimulated) {\n\t\t\t\te.preventDefault();\n\t\t\t}\n\t\t},\n\t\tstopPropagation: function () {\n\t\t\tvar e = this.originalEvent;\n\n\t\t\tthis.isPropagationStopped = returnTrue;\n\n\t\t\tif (e && !this.isSimulated) {\n\t\t\t\te.stopPropagation();\n\t\t\t}\n\t\t},\n\t\tstopImmediatePropagation: function () {\n\t\t\tvar e = this.originalEvent;\n\n\t\t\tthis.isImmediatePropagationStopped = returnTrue;\n\n\t\t\tif (e && !this.isSimulated) {\n\t\t\t\te.stopImmediatePropagation();\n\t\t\t}\n\n\t\t\tthis.stopPropagation();\n\t\t}\n\t};\n\n\t// Includes all common event props including KeyEvent and MouseEvent specific props\n\tjQuery.each({\n\t\taltKey: true,\n\t\tbubbles: true,\n\t\tcancelable: true,\n\t\tchangedTouches: true,\n\t\tctrlKey: true,\n\t\tdetail: true,\n\t\teventPhase: true,\n\t\tmetaKey: true,\n\t\tpageX: true,\n\t\tpageY: true,\n\t\tshiftKey: true,\n\t\tview: true,\n\t\t\"char\": true,\n\t\tcode: true,\n\t\tcharCode: true,\n\t\tkey: true,\n\t\tkeyCode: true,\n\t\tbutton: true,\n\t\tbuttons: true,\n\t\tclientX: true,\n\t\tclientY: true,\n\t\toffsetX: true,\n\t\toffsetY: true,\n\t\tpointerId: true,\n\t\tpointerType: true,\n\t\tscreenX: true,\n\t\tscreenY: true,\n\t\ttargetTouches: true,\n\t\ttoElement: true,\n\t\ttouches: true,\n\t\twhich: true\n\t}, jQuery.event.addProp);\n\n\tjQuery.each({ focus: \"focusin\", blur: \"focusout\" }, function (type, delegateType) {\n\n\t\tfunction focusMappedHandler(nativeEvent) {\n\t\t\tif (document.documentMode) {\n\n\t\t\t\t// Support: IE 11+\n\t\t\t\t// Attach a single focusin/focusout handler on the document while someone wants\n\t\t\t\t// focus/blur. This is because the former are synchronous in IE while the latter\n\t\t\t\t// are async. In other browsers, all those handlers are invoked synchronously.\n\n\t\t\t\t// `handle` from private data would already wrap the event, but we need\n\t\t\t\t// to change the `type` here.\n\t\t\t\tvar handle = dataPriv.get(this, \"handle\"),\n\t\t\t\t\tevent = jQuery.event.fix(nativeEvent);\n\t\t\t\tevent.type = nativeEvent.type === \"focusin\" ? \"focus\" : \"blur\";\n\t\t\t\tevent.isSimulated = true;\n\n\t\t\t\t// First, handle focusin/focusout\n\t\t\t\thandle(nativeEvent);\n\n\t\t\t\t// ...then, handle focus/blur\n\t\t\t\t//\n\t\t\t\t// focus/blur don't bubble while focusin/focusout do; simulate the former by only\n\t\t\t\t// invoking the handler at the lower level.\n\t\t\t\tif (event.target === event.currentTarget) {\n\n\t\t\t\t\t// The setup part calls `leverageNative`, which, in turn, calls\n\t\t\t\t\t// `jQuery.event.add`, so event handle will already have been set\n\t\t\t\t\t// by this point.\n\t\t\t\t\thandle(event);\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\t// For non-IE browsers, attach a single capturing handler on the document\n\t\t\t\t// while someone wants focusin/focusout.\n\t\t\t\tjQuery.event.simulate(delegateType, nativeEvent.target,\n\t\t\t\t\tjQuery.event.fix(nativeEvent));\n\t\t\t}\n\t\t}\n\n\t\tjQuery.event.special[type] = {\n\n\t\t\t// Utilize native event if possible so blur/focus sequence is correct\n\t\t\tsetup: function () {\n\n\t\t\t\tvar attaches;\n\n\t\t\t\t// Claim the first handler\n\t\t\t\t// dataPriv.set( this, \"focus\", ... )\n\t\t\t\t// dataPriv.set( this, \"blur\", ... )\n\t\t\t\tleverageNative(this, type, true);\n\n\t\t\t\tif (document.documentMode) {\n\n\t\t\t\t\t// Support: IE 9 - 11+\n\t\t\t\t\t// We use the same native handler for focusin & focus (and focusout & blur)\n\t\t\t\t\t// so we need to coordinate setup & teardown parts between those events.\n\t\t\t\t\t// Use `delegateType` as the key as `type` is already used by `leverageNative`.\n\t\t\t\t\tattaches = dataPriv.get(this, delegateType);\n\t\t\t\t\tif (!attaches) {\n\t\t\t\t\t\tthis.addEventListener(delegateType, focusMappedHandler);\n\t\t\t\t\t}\n\t\t\t\t\tdataPriv.set(this, delegateType, (attaches || 0) + 1);\n\t\t\t\t} else {\n\n\t\t\t\t\t// Return false to allow normal processing in the caller\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\t\t\ttrigger: function () {\n\n\t\t\t\t// Force setup before trigger\n\t\t\t\tleverageNative(this, type);\n\n\t\t\t\t// Return non-false to allow normal event-path propagation\n\t\t\t\treturn true;\n\t\t\t},\n\n\t\t\tteardown: function () {\n\t\t\t\tvar attaches;\n\n\t\t\t\tif (document.documentMode) {\n\t\t\t\t\tattaches = dataPriv.get(this, delegateType) - 1;\n\t\t\t\t\tif (!attaches) {\n\t\t\t\t\t\tthis.removeEventListener(delegateType, focusMappedHandler);\n\t\t\t\t\t\tdataPriv.remove(this, delegateType);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdataPriv.set(this, delegateType, attaches);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\n\t\t\t\t\t// Return false to indicate standard teardown should be applied\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// Suppress native focus or blur if we're currently inside\n\t\t\t// a leveraged native-event stack\n\t\t\t_default: function (event) {\n\t\t\t\treturn dataPriv.get(event.target, type);\n\t\t\t},\n\n\t\t\tdelegateType: delegateType\n\t\t};\n\n\t\t// Support: Firefox <=44\n\t\t// Firefox doesn't have focus(in | out) events\n\t\t// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787\n\t\t//\n\t\t// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1\n\t\t// focus(in | out) events fire after focus & blur events,\n\t\t// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order\n\t\t// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857\n\t\t//\n\t\t// Support: IE 9 - 11+\n\t\t// To preserve relative focusin/focus & focusout/blur event order guaranteed on the 3.x branch,\n\t\t// attach a single handler for both events in IE.\n\t\tjQuery.event.special[delegateType] = {\n\t\t\tsetup: function () {\n\n\t\t\t\t// Handle: regular nodes (via `this.ownerDocument`), window\n\t\t\t\t// (via `this.document`) & document (via `this`).\n\t\t\t\tvar doc = this.ownerDocument || this.document || this,\n\t\t\t\t\tdataHolder = document.documentMode ? this : doc,\n\t\t\t\t\tattaches = dataPriv.get(dataHolder, delegateType);\n\n\t\t\t\t// Support: IE 9 - 11+\n\t\t\t\t// We use the same native handler for focusin & focus (and focusout & blur)\n\t\t\t\t// so we need to coordinate setup & teardown parts between those events.\n\t\t\t\t// Use `delegateType` as the key as `type` is already used by `leverageNative`.\n\t\t\t\tif (!attaches) {\n\t\t\t\t\tif (document.documentMode) {\n\t\t\t\t\t\tthis.addEventListener(delegateType, focusMappedHandler);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdoc.addEventListener(type, focusMappedHandler, true);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tdataPriv.set(dataHolder, delegateType, (attaches || 0) + 1);\n\t\t\t},\n\t\t\tteardown: function () {\n\t\t\t\tvar doc = this.ownerDocument || this.document || this,\n\t\t\t\t\tdataHolder = document.documentMode ? this : doc,\n\t\t\t\t\tattaches = dataPriv.get(dataHolder, delegateType) - 1;\n\n\t\t\t\tif (!attaches) {\n\t\t\t\t\tif (document.documentMode) {\n\t\t\t\t\t\tthis.removeEventListener(delegateType, focusMappedHandler);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdoc.removeEventListener(type, focusMappedHandler, true);\n\t\t\t\t\t}\n\t\t\t\t\tdataPriv.remove(dataHolder, delegateType);\n\t\t\t\t} else {\n\t\t\t\t\tdataPriv.set(dataHolder, delegateType, attaches);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t});\n\n\t// Create mouseenter/leave events using mouseover/out and event-time checks\n\t// so that event delegation works in jQuery.\n\t// Do the same for pointerenter/pointerleave and pointerover/pointerout\n\t//\n\t// Support: Safari 7 only\n\t// Safari sends mouseenter too often; see:\n\t// https://bugs.chromium.org/p/chromium/issues/detail?id=470258\n\t// for the description of the bug (it existed in older Chrome versions as well).\n\tjQuery.each({\n\t\tmouseenter: \"mouseover\",\n\t\tmouseleave: \"mouseout\",\n\t\tpointerenter: \"pointerover\",\n\t\tpointerleave: \"pointerout\"\n\t}, function (orig, fix) {\n\t\tjQuery.event.special[orig] = {\n\t\t\tdelegateType: fix,\n\t\t\tbindType: fix,\n\n\t\t\thandle: function (event) {\n\t\t\t\tvar ret,\n\t\t\t\t\ttarget = this,\n\t\t\t\t\trelated = event.relatedTarget,\n\t\t\t\t\thandleObj = event.handleObj;\n\n\t\t\t\t// For mouseenter/leave call the handler if related is outside the target.\n\t\t\t\t// NB: No relatedTarget if the mouse left/entered the browser window\n\t\t\t\tif (!related || (related !== target && !jQuery.contains(target, related))) {\n\t\t\t\t\tevent.type = handleObj.origType;\n\t\t\t\t\tret = handleObj.handler.apply(this, arguments);\n\t\t\t\t\tevent.type = fix;\n\t\t\t\t}\n\t\t\t\treturn ret;\n\t\t\t}\n\t\t};\n\t});\n\n\tjQuery.fn.extend({\n\n\t\ton: function (types, selector, data, fn) {\n\t\t\treturn on(this, types, selector, data, fn);\n\t\t},\n\t\tone: function (types, selector, data, fn) {\n\t\t\treturn on(this, types, selector, data, fn, 1);\n\t\t},\n\t\toff: function (types, selector, fn) {\n\t\t\tvar handleObj, type;\n\t\t\tif (types && types.preventDefault && types.handleObj) {\n\n\t\t\t\t// ( event )  dispatched jQuery.Event\n\t\t\t\thandleObj = types.handleObj;\n\t\t\t\tjQuery(types.delegateTarget).off(\n\t\t\t\t\thandleObj.namespace ?\n\t\t\t\t\t\thandleObj.origType + \".\" + handleObj.namespace :\n\t\t\t\t\t\thandleObj.origType,\n\t\t\t\t\thandleObj.selector,\n\t\t\t\t\thandleObj.handler\n\t\t\t\t);\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\tif (typeof types === \"object\") {\n\n\t\t\t\t// ( types-object [, selector] )\n\t\t\t\tfor (type in types) {\n\t\t\t\t\tthis.off(type, selector, types[type]);\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\tif (selector === false || typeof selector === \"function\") {\n\n\t\t\t\t// ( types [, fn] )\n\t\t\t\tfn = selector;\n\t\t\t\tselector = undefined;\n\t\t\t}\n\t\t\tif (fn === false) {\n\t\t\t\tfn = returnFalse;\n\t\t\t}\n\t\t\treturn this.each(function () {\n\t\t\t\tjQuery.event.remove(this, types, fn, selector);\n\t\t\t});\n\t\t}\n\t});\n\n\n\tvar\n\n\t\t// Support: IE <=10 - 11, Edge 12 - 13 only\n\t\t// In IE/Edge using regex groups here causes severe slowdowns.\n\t\t// See https://connect.microsoft.com/IE/feedback/details/1736512/\n\t\trnoInnerhtml = /<script|<style|<link/i,\n\n\t\t// checked=\"checked\" or checked\n\t\trchecked = /checked\\s*(?:[^=]|=\\s*.checked.)/i,\n\n\t\trcleanScript = /^\\s*<!\\[CDATA\\[|\\]\\]>\\s*$/g;\n\n\t// Prefer a tbody over its parent table for containing new rows\n\tfunction manipulationTarget(elem, content) {\n\t\tif (nodeName(elem, \"table\") &&\n\t\t\tnodeName(content.nodeType !== 11 ? content : content.firstChild, \"tr\")) {\n\n\t\t\treturn jQuery(elem).children(\"tbody\")[0] || elem;\n\t\t}\n\n\t\treturn elem;\n\t}\n\n\t// Replace/restore the type attribute of script elements for safe DOM manipulation\n\tfunction disableScript(elem) {\n\t\telem.type = (elem.getAttribute(\"type\") !== null) + \"/\" + elem.type;\n\t\treturn elem;\n\t}\n\tfunction restoreScript(elem) {\n\t\tif ((elem.type || \"\").slice(0, 5) === \"true/\") {\n\t\t\telem.type = elem.type.slice(5);\n\t\t} else {\n\t\t\telem.removeAttribute(\"type\");\n\t\t}\n\n\t\treturn elem;\n\t}\n\n\tfunction cloneCopyEvent(src, dest) {\n\t\tvar i, l, type, pdataOld, udataOld, udataCur, events;\n\n\t\tif (dest.nodeType !== 1) {\n\t\t\treturn;\n\t\t}\n\n\t\t// 1. Copy private data: events, handlers, etc.\n\t\tif (dataPriv.hasData(src)) {\n\t\t\tpdataOld = dataPriv.get(src);\n\t\t\tevents = pdataOld.events;\n\n\t\t\tif (events) {\n\t\t\t\tdataPriv.remove(dest, \"handle events\");\n\n\t\t\t\tfor (type in events) {\n\t\t\t\t\tfor (i = 0, l = events[type].length; i < l; i++) {\n\t\t\t\t\t\tjQuery.event.add(dest, type, events[type][i]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// 2. Copy user data\n\t\tif (dataUser.hasData(src)) {\n\t\t\tudataOld = dataUser.access(src);\n\t\t\tudataCur = jQuery.extend({}, udataOld);\n\n\t\t\tdataUser.set(dest, udataCur);\n\t\t}\n\t}\n\n\t// Fix IE bugs, see support tests\n\tfunction fixInput(src, dest) {\n\t\tvar nodeName = dest.nodeName.toLowerCase();\n\n\t\t// Fails to persist the checked state of a cloned checkbox or radio button.\n\t\tif (nodeName === \"input\" && rcheckableType.test(src.type)) {\n\t\t\tdest.checked = src.checked;\n\n\t\t\t// Fails to return the selected option to the default selected state when cloning options\n\t\t} else if (nodeName === \"input\" || nodeName === \"textarea\") {\n\t\t\tdest.defaultValue = src.defaultValue;\n\t\t}\n\t}\n\n\tfunction domManip(collection, args, callback, ignored) {\n\n\t\t// Flatten any nested arrays\n\t\targs = flat(args);\n\n\t\tvar fragment, first, scripts, hasScripts, node, doc,\n\t\t\ti = 0,\n\t\t\tl = collection.length,\n\t\t\tiNoClone = l - 1,\n\t\t\tvalue = args[0],\n\t\t\tvalueIsFunction = isFunction(value);\n\n\t\t// We can't cloneNode fragments that contain checked, in WebKit\n\t\tif (valueIsFunction ||\n\t\t\t(l > 1 && typeof value === \"string\" &&\n\t\t\t\t!support.checkClone && rchecked.test(value))) {\n\t\t\treturn collection.each(function (index) {\n\t\t\t\tvar self = collection.eq(index);\n\t\t\t\tif (valueIsFunction) {\n\t\t\t\t\targs[0] = value.call(this, index, self.html());\n\t\t\t\t}\n\t\t\t\tdomManip(self, args, callback, ignored);\n\t\t\t});\n\t\t}\n\n\t\tif (l) {\n\t\t\tfragment = buildFragment(args, collection[0].ownerDocument, false, collection, ignored);\n\t\t\tfirst = fragment.firstChild;\n\n\t\t\tif (fragment.childNodes.length === 1) {\n\t\t\t\tfragment = first;\n\t\t\t}\n\n\t\t\t// Require either new content or an interest in ignored elements to invoke the callback\n\t\t\tif (first || ignored) {\n\t\t\t\tscripts = jQuery.map(getAll(fragment, \"script\"), disableScript);\n\t\t\t\thasScripts = scripts.length;\n\n\t\t\t\t// Use the original fragment for the last item\n\t\t\t\t// instead of the first because it can end up\n\t\t\t\t// being emptied incorrectly in certain situations (trac-8070).\n\t\t\t\tfor (; i < l; i++) {\n\t\t\t\t\tnode = fragment;\n\n\t\t\t\t\tif (i !== iNoClone) {\n\t\t\t\t\t\tnode = jQuery.clone(node, true, true);\n\n\t\t\t\t\t\t// Keep references to cloned scripts for later restoration\n\t\t\t\t\t\tif (hasScripts) {\n\n\t\t\t\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\t\t\t\tjQuery.merge(scripts, getAll(node, \"script\"));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tcallback.call(collection[i], node, i);\n\t\t\t\t}\n\n\t\t\t\tif (hasScripts) {\n\t\t\t\t\tdoc = scripts[scripts.length - 1].ownerDocument;\n\n\t\t\t\t\t// Reenable scripts\n\t\t\t\t\tjQuery.map(scripts, restoreScript);\n\n\t\t\t\t\t// Evaluate executable scripts on first document insertion\n\t\t\t\t\tfor (i = 0; i < hasScripts; i++) {\n\t\t\t\t\t\tnode = scripts[i];\n\t\t\t\t\t\tif (rscriptType.test(node.type || \"\") &&\n\t\t\t\t\t\t\t!dataPriv.access(node, \"globalEval\") &&\n\t\t\t\t\t\t\tjQuery.contains(doc, node)) {\n\n\t\t\t\t\t\t\tif (node.src && (node.type || \"\").toLowerCase() !== \"module\") {\n\n\t\t\t\t\t\t\t\t// Optional AJAX dependency, but won't run scripts if not present\n\t\t\t\t\t\t\t\tif (jQuery._evalUrl && !node.noModule) {\n\t\t\t\t\t\t\t\t\tjQuery._evalUrl(node.src, {\n\t\t\t\t\t\t\t\t\t\tnonce: node.nonce || node.getAttribute(\"nonce\")\n\t\t\t\t\t\t\t\t\t}, doc);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t// Unwrap a CDATA section containing script contents. This shouldn't be\n\t\t\t\t\t\t\t\t// needed as in XML documents they're already not visible when\n\t\t\t\t\t\t\t\t// inspecting element contents and in HTML documents they have no\n\t\t\t\t\t\t\t\t// meaning but we're preserving that logic for backwards compatibility.\n\t\t\t\t\t\t\t\t// This will be removed completely in 4.0. See gh-4904.\n\t\t\t\t\t\t\t\tDOMEval(node.textContent.replace(rcleanScript, \"\"), node, doc);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn collection;\n\t}\n\n\tfunction remove(elem, selector, keepData) {\n\t\tvar node,\n\t\t\tnodes = selector ? jQuery.filter(selector, elem) : elem,\n\t\t\ti = 0;\n\n\t\tfor (; (node = nodes[i]) != null; i++) {\n\t\t\tif (!keepData && node.nodeType === 1) {\n\t\t\t\tjQuery.cleanData(getAll(node));\n\t\t\t}\n\n\t\t\tif (node.parentNode) {\n\t\t\t\tif (keepData && isAttached(node)) {\n\t\t\t\t\tsetGlobalEval(getAll(node, \"script\"));\n\t\t\t\t}\n\t\t\t\tnode.parentNode.removeChild(node);\n\t\t\t}\n\t\t}\n\n\t\treturn elem;\n\t}\n\n\tjQuery.extend({\n\t\thtmlPrefilter: function (html) {\n\t\t\treturn html;\n\t\t},\n\n\t\tclone: function (elem, dataAndEvents, deepDataAndEvents) {\n\t\t\tvar i, l, srcElements, destElements,\n\t\t\t\tclone = elem.cloneNode(true),\n\t\t\t\tinPage = isAttached(elem);\n\n\t\t\t// Fix IE cloning issues\n\t\t\tif (!support.noCloneChecked && (elem.nodeType === 1 || elem.nodeType === 11) &&\n\t\t\t\t!jQuery.isXMLDoc(elem)) {\n\n\t\t\t\t// We eschew jQuery#find here for performance reasons:\n\t\t\t\t// https://jsperf.com/getall-vs-sizzle/2\n\t\t\t\tdestElements = getAll(clone);\n\t\t\t\tsrcElements = getAll(elem);\n\n\t\t\t\tfor (i = 0, l = srcElements.length; i < l; i++) {\n\t\t\t\t\tfixInput(srcElements[i], destElements[i]);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Copy the events from the original to the clone\n\t\t\tif (dataAndEvents) {\n\t\t\t\tif (deepDataAndEvents) {\n\t\t\t\t\tsrcElements = srcElements || getAll(elem);\n\t\t\t\t\tdestElements = destElements || getAll(clone);\n\n\t\t\t\t\tfor (i = 0, l = srcElements.length; i < l; i++) {\n\t\t\t\t\t\tcloneCopyEvent(srcElements[i], destElements[i]);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tcloneCopyEvent(elem, clone);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Preserve script evaluation history\n\t\t\tdestElements = getAll(clone, \"script\");\n\t\t\tif (destElements.length > 0) {\n\t\t\t\tsetGlobalEval(destElements, !inPage && getAll(elem, \"script\"));\n\t\t\t}\n\n\t\t\t// Return the cloned set\n\t\t\treturn clone;\n\t\t},\n\n\t\tcleanData: function (elems) {\n\t\t\tvar data, elem, type,\n\t\t\t\tspecial = jQuery.event.special,\n\t\t\t\ti = 0;\n\n\t\t\tfor (; (elem = elems[i]) !== undefined; i++) {\n\t\t\t\tif (acceptData(elem)) {\n\t\t\t\t\tif ((data = elem[dataPriv.expando])) {\n\t\t\t\t\t\tif (data.events) {\n\t\t\t\t\t\t\tfor (type in data.events) {\n\t\t\t\t\t\t\t\tif (special[type]) {\n\t\t\t\t\t\t\t\t\tjQuery.event.remove(elem, type);\n\n\t\t\t\t\t\t\t\t\t// This is a shortcut to avoid jQuery.event.remove's overhead\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tjQuery.removeEvent(elem, type, data.handle);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\t\telem[dataPriv.expando] = undefined;\n\t\t\t\t\t}\n\t\t\t\t\tif (elem[dataUser.expando]) {\n\n\t\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\t\telem[dataUser.expando] = undefined;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\n\tjQuery.fn.extend({\n\t\tdetach: function (selector) {\n\t\t\treturn remove(this, selector, true);\n\t\t},\n\n\t\tremove: function (selector) {\n\t\t\treturn remove(this, selector);\n\t\t},\n\n\t\ttext: function (value) {\n\t\t\treturn access(this, function (value) {\n\t\t\t\treturn value === undefined ?\n\t\t\t\t\tjQuery.text(this) :\n\t\t\t\t\tthis.empty().each(function () {\n\t\t\t\t\t\tif (this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9) {\n\t\t\t\t\t\t\tthis.textContent = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t}, null, value, arguments.length);\n\t\t},\n\n\t\tappend: function () {\n\t\t\treturn domManip(this, arguments, function (elem) {\n\t\t\t\tif (this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9) {\n\t\t\t\t\tvar target = manipulationTarget(this, elem);\n\t\t\t\t\ttarget.appendChild(elem);\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\tprepend: function () {\n\t\t\treturn domManip(this, arguments, function (elem) {\n\t\t\t\tif (this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9) {\n\t\t\t\t\tvar target = manipulationTarget(this, elem);\n\t\t\t\t\ttarget.insertBefore(elem, target.firstChild);\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\tbefore: function () {\n\t\t\treturn domManip(this, arguments, function (elem) {\n\t\t\t\tif (this.parentNode) {\n\t\t\t\t\tthis.parentNode.insertBefore(elem, this);\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\tafter: function () {\n\t\t\treturn domManip(this, arguments, function (elem) {\n\t\t\t\tif (this.parentNode) {\n\t\t\t\t\tthis.parentNode.insertBefore(elem, this.nextSibling);\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\tempty: function () {\n\t\t\tvar elem,\n\t\t\t\ti = 0;\n\n\t\t\tfor (; (elem = this[i]) != null; i++) {\n\t\t\t\tif (elem.nodeType === 1) {\n\n\t\t\t\t\t// Prevent memory leaks\n\t\t\t\t\tjQuery.cleanData(getAll(elem, false));\n\n\t\t\t\t\t// Remove any remaining nodes\n\t\t\t\t\telem.textContent = \"\";\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn this;\n\t\t},\n\n\t\tclone: function (dataAndEvents, deepDataAndEvents) {\n\t\t\tdataAndEvents = dataAndEvents == null ? false : dataAndEvents;\n\t\t\tdeepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;\n\n\t\t\treturn this.map(function () {\n\t\t\t\treturn jQuery.clone(this, dataAndEvents, deepDataAndEvents);\n\t\t\t});\n\t\t},\n\n\t\thtml: function (value) {\n\t\t\treturn access(this, function (value) {\n\t\t\t\tvar elem = this[0] || {},\n\t\t\t\t\ti = 0,\n\t\t\t\t\tl = this.length;\n\n\t\t\t\tif (value === undefined && elem.nodeType === 1) {\n\t\t\t\t\treturn elem.innerHTML;\n\t\t\t\t}\n\n\t\t\t\t// See if we can take a shortcut and just use innerHTML\n\t\t\t\tif (typeof value === \"string\" && !rnoInnerhtml.test(value) &&\n\t\t\t\t\t!wrapMap[(rtagName.exec(value) || [\"\", \"\"])[1].toLowerCase()]) {\n\n\t\t\t\t\tvalue = jQuery.htmlPrefilter(value);\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tfor (; i < l; i++) {\n\t\t\t\t\t\t\telem = this[i] || {};\n\n\t\t\t\t\t\t\t// Remove element nodes and prevent memory leaks\n\t\t\t\t\t\t\tif (elem.nodeType === 1) {\n\t\t\t\t\t\t\t\tjQuery.cleanData(getAll(elem, false));\n\t\t\t\t\t\t\t\telem.innerHTML = value;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\telem = 0;\n\n\t\t\t\t\t\t// If using innerHTML throws an exception, use the fallback method\n\t\t\t\t\t} catch (e) { }\n\t\t\t\t}\n\n\t\t\t\tif (elem) {\n\t\t\t\t\tthis.empty().append(value);\n\t\t\t\t}\n\t\t\t}, null, value, arguments.length);\n\t\t},\n\n\t\treplaceWith: function () {\n\t\t\tvar ignored = [];\n\n\t\t\t// Make the changes, replacing each non-ignored context element with the new content\n\t\t\treturn domManip(this, arguments, function (elem) {\n\t\t\t\tvar parent = this.parentNode;\n\n\t\t\t\tif (jQuery.inArray(this, ignored) < 0) {\n\t\t\t\t\tjQuery.cleanData(getAll(this));\n\t\t\t\t\tif (parent) {\n\t\t\t\t\t\tparent.replaceChild(elem, this);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Force callback invocation\n\t\t\t}, ignored);\n\t\t}\n\t});\n\n\tjQuery.each({\n\t\tappendTo: \"append\",\n\t\tprependTo: \"prepend\",\n\t\tinsertBefore: \"before\",\n\t\tinsertAfter: \"after\",\n\t\treplaceAll: \"replaceWith\"\n\t}, function (name, original) {\n\t\tjQuery.fn[name] = function (selector) {\n\t\t\tvar elems,\n\t\t\t\tret = [],\n\t\t\t\tinsert = jQuery(selector),\n\t\t\t\tlast = insert.length - 1,\n\t\t\t\ti = 0;\n\n\t\t\tfor (; i <= last; i++) {\n\t\t\t\telems = i === last ? this : this.clone(true);\n\t\t\t\tjQuery(insert[i])[original](elems);\n\n\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t// .get() because push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\tpush.apply(ret, elems.get());\n\t\t\t}\n\n\t\t\treturn this.pushStack(ret);\n\t\t};\n\t});\n\tvar rnumnonpx = new RegExp(\"^(\" + pnum + \")(?!px)[a-z%]+$\", \"i\");\n\n\tvar rcustomProp = /^--/;\n\n\n\tvar getStyles = function (elem) {\n\n\t\t// Support: IE <=11 only, Firefox <=30 (trac-15098, trac-14150)\n\t\t// IE throws on elements created in popups\n\t\t// FF meanwhile throws on frame elements through \"defaultView.getComputedStyle\"\n\t\tvar view = elem.ownerDocument.defaultView;\n\n\t\tif (!view || !view.opener) {\n\t\t\tview = window;\n\t\t}\n\n\t\treturn view.getComputedStyle(elem);\n\t};\n\n\tvar swap = function (elem, options, callback) {\n\t\tvar ret, name,\n\t\t\told = {};\n\n\t\t// Remember the old values, and insert the new ones\n\t\tfor (name in options) {\n\t\t\told[name] = elem.style[name];\n\t\t\telem.style[name] = options[name];\n\t\t}\n\n\t\tret = callback.call(elem);\n\n\t\t// Revert the old values\n\t\tfor (name in options) {\n\t\t\telem.style[name] = old[name];\n\t\t}\n\n\t\treturn ret;\n\t};\n\n\n\tvar rboxStyle = new RegExp(cssExpand.join(\"|\"), \"i\");\n\n\n\n\t(function () {\n\n\t\t// Executing both pixelPosition & boxSizingReliable tests require only one layout\n\t\t// so they're executed at the same time to save the second computation.\n\t\tfunction computeStyleTests() {\n\n\t\t\t// This is a singleton, we need to execute it only once\n\t\t\tif (!div) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tcontainer.style.cssText = \"position:absolute;left:-11111px;width:60px;\" +\n\t\t\t\t\"margin-top:1px;padding:0;border:0\";\n\t\t\tdiv.style.cssText =\n\t\t\t\t\"position:relative;display:block;box-sizing:border-box;overflow:scroll;\" +\n\t\t\t\t\"margin:auto;border:1px;padding:1px;\" +\n\t\t\t\t\"width:60%;top:1%\";\n\t\t\tdocumentElement.appendChild(container).appendChild(div);\n\n\t\t\tvar divStyle = window.getComputedStyle(div);\n\t\t\tpixelPositionVal = divStyle.top !== \"1%\";\n\n\t\t\t// Support: Android 4.0 - 4.3 only, Firefox <=3 - 44\n\t\t\treliableMarginLeftVal = roundPixelMeasures(divStyle.marginLeft) === 12;\n\n\t\t\t// Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3\n\t\t\t// Some styles come back with percentage values, even though they shouldn't\n\t\t\tdiv.style.right = \"60%\";\n\t\t\tpixelBoxStylesVal = roundPixelMeasures(divStyle.right) === 36;\n\n\t\t\t// Support: IE 9 - 11 only\n\t\t\t// Detect misreporting of content dimensions for box-sizing:border-box elements\n\t\t\tboxSizingReliableVal = roundPixelMeasures(divStyle.width) === 36;\n\n\t\t\t// Support: IE 9 only\n\t\t\t// Detect overflow:scroll screwiness (gh-3699)\n\t\t\t// Support: Chrome <=64\n\t\t\t// Don't get tricked when zoom affects offsetWidth (gh-4029)\n\t\t\tdiv.style.position = \"absolute\";\n\t\t\tscrollboxSizeVal = roundPixelMeasures(div.offsetWidth / 3) === 12;\n\n\t\t\tdocumentElement.removeChild(container);\n\n\t\t\t// Nullify the div so it wouldn't be stored in the memory and\n\t\t\t// it will also be a sign that checks already performed\n\t\t\tdiv = null;\n\t\t}\n\n\t\tfunction roundPixelMeasures(measure) {\n\t\t\treturn Math.round(parseFloat(measure));\n\t\t}\n\n\t\tvar pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal,\n\t\t\treliableTrDimensionsVal, reliableMarginLeftVal,\n\t\t\tcontainer = document.createElement(\"div\"),\n\t\t\tdiv = document.createElement(\"div\");\n\n\t\t// Finish early in limited (non-browser) environments\n\t\tif (!div.style) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Support: IE <=9 - 11 only\n\t\t// Style of cloned element affects source element cloned (trac-8908)\n\t\tdiv.style.backgroundClip = \"content-box\";\n\t\tdiv.cloneNode(true).style.backgroundClip = \"\";\n\t\tsupport.clearCloneStyle = div.style.backgroundClip === \"content-box\";\n\n\t\tjQuery.extend(support, {\n\t\t\tboxSizingReliable: function () {\n\t\t\t\tcomputeStyleTests();\n\t\t\t\treturn boxSizingReliableVal;\n\t\t\t},\n\t\t\tpixelBoxStyles: function () {\n\t\t\t\tcomputeStyleTests();\n\t\t\t\treturn pixelBoxStylesVal;\n\t\t\t},\n\t\t\tpixelPosition: function () {\n\t\t\t\tcomputeStyleTests();\n\t\t\t\treturn pixelPositionVal;\n\t\t\t},\n\t\t\treliableMarginLeft: function () {\n\t\t\t\tcomputeStyleTests();\n\t\t\t\treturn reliableMarginLeftVal;\n\t\t\t},\n\t\t\tscrollboxSize: function () {\n\t\t\t\tcomputeStyleTests();\n\t\t\t\treturn scrollboxSizeVal;\n\t\t\t},\n\n\t\t\t// Support: IE 9 - 11+, Edge 15 - 18+\n\t\t\t// IE/Edge misreport `getComputedStyle` of table rows with width/height\n\t\t\t// set in CSS while `offset*` properties report correct values.\n\t\t\t// Behavior in IE 9 is more subtle than in newer versions & it passes\n\t\t\t// some versions of this test; make sure not to make it pass there!\n\t\t\t//\n\t\t\t// Support: Firefox 70+\n\t\t\t// Only Firefox includes border widths\n\t\t\t// in computed dimensions. (gh-4529)\n\t\t\treliableTrDimensions: function () {\n\t\t\t\tvar table, tr, trChild, trStyle;\n\t\t\t\tif (reliableTrDimensionsVal == null) {\n\t\t\t\t\ttable = document.createElement(\"table\");\n\t\t\t\t\ttr = document.createElement(\"tr\");\n\t\t\t\t\ttrChild = document.createElement(\"div\");\n\n\t\t\t\t\ttable.style.cssText = \"position:absolute;left:-11111px;border-collapse:separate\";\n\t\t\t\t\ttr.style.cssText = \"border:1px solid\";\n\n\t\t\t\t\t// Support: Chrome 86+\n\t\t\t\t\t// Height set through cssText does not get applied.\n\t\t\t\t\t// Computed height then comes back as 0.\n\t\t\t\t\ttr.style.height = \"1px\";\n\t\t\t\t\ttrChild.style.height = \"9px\";\n\n\t\t\t\t\t// Support: Android 8 Chrome 86+\n\t\t\t\t\t// In our bodyBackground.html iframe,\n\t\t\t\t\t// display for all div elements is set to \"inline\",\n\t\t\t\t\t// which causes a problem only in Android 8 Chrome 86.\n\t\t\t\t\t// Ensuring the div is display: block\n\t\t\t\t\t// gets around this issue.\n\t\t\t\t\ttrChild.style.display = \"block\";\n\n\t\t\t\t\tdocumentElement\n\t\t\t\t\t\t.appendChild(table)\n\t\t\t\t\t\t.appendChild(tr)\n\t\t\t\t\t\t.appendChild(trChild);\n\n\t\t\t\t\ttrStyle = window.getComputedStyle(tr);\n\t\t\t\t\treliableTrDimensionsVal = (parseInt(trStyle.height, 10) +\n\t\t\t\t\t\tparseInt(trStyle.borderTopWidth, 10) +\n\t\t\t\t\t\tparseInt(trStyle.borderBottomWidth, 10)) === tr.offsetHeight;\n\n\t\t\t\t\tdocumentElement.removeChild(table);\n\t\t\t\t}\n\t\t\t\treturn reliableTrDimensionsVal;\n\t\t\t}\n\t\t});\n\t})();\n\n\n\tfunction curCSS(elem, name, computed) {\n\t\tvar width, minWidth, maxWidth, ret,\n\t\t\tisCustomProp = rcustomProp.test(name),\n\n\t\t\t// Support: Firefox 51+\n\t\t\t// Retrieving style before computed somehow\n\t\t\t// fixes an issue with getting wrong values\n\t\t\t// on detached elements\n\t\t\tstyle = elem.style;\n\n\t\tcomputed = computed || getStyles(elem);\n\n\t\t// getPropertyValue is needed for:\n\t\t//   .css('filter') (IE 9 only, trac-12537)\n\t\t//   .css('--customProperty) (gh-3144)\n\t\tif (computed) {\n\n\t\t\t// Support: IE <=9 - 11+\n\t\t\t// IE only supports `\"float\"` in `getPropertyValue`; in computed styles\n\t\t\t// it's only available as `\"cssFloat\"`. We no longer modify properties\n\t\t\t// sent to `.css()` apart from camelCasing, so we need to check both.\n\t\t\t// Normally, this would create difference in behavior: if\n\t\t\t// `getPropertyValue` returns an empty string, the value returned\n\t\t\t// by `.css()` would be `undefined`. This is usually the case for\n\t\t\t// disconnected elements. However, in IE even disconnected elements\n\t\t\t// with no styles return `\"none\"` for `getPropertyValue( \"float\" )`\n\t\t\tret = computed.getPropertyValue(name) || computed[name];\n\n\t\t\tif (isCustomProp && ret) {\n\n\t\t\t\t// Support: Firefox 105+, Chrome <=105+\n\t\t\t\t// Spec requires trimming whitespace for custom properties (gh-4926).\n\t\t\t\t// Firefox only trims leading whitespace. Chrome just collapses\n\t\t\t\t// both leading & trailing whitespace to a single space.\n\t\t\t\t//\n\t\t\t\t// Fall back to `undefined` if empty string returned.\n\t\t\t\t// This collapses a missing definition with property defined\n\t\t\t\t// and set to an empty string but there's no standard API\n\t\t\t\t// allowing us to differentiate them without a performance penalty\n\t\t\t\t// and returning `undefined` aligns with older jQuery.\n\t\t\t\t//\n\t\t\t\t// rtrimCSS treats U+000D CARRIAGE RETURN and U+000C FORM FEED\n\t\t\t\t// as whitespace while CSS does not, but this is not a problem\n\t\t\t\t// because CSS preprocessing replaces them with U+000A LINE FEED\n\t\t\t\t// (which *is* CSS whitespace)\n\t\t\t\t// https://www.w3.org/TR/css-syntax-3/#input-preprocessing\n\t\t\t\tret = ret.replace(rtrimCSS, \"$1\") || undefined;\n\t\t\t}\n\n\t\t\tif (ret === \"\" && !isAttached(elem)) {\n\t\t\t\tret = jQuery.style(elem, name);\n\t\t\t}\n\n\t\t\t// A tribute to the \"awesome hack by Dean Edwards\"\n\t\t\t// Android Browser returns percentage for some values,\n\t\t\t// but width seems to be reliably pixels.\n\t\t\t// This is against the CSSOM draft spec:\n\t\t\t// https://drafts.csswg.org/cssom/#resolved-values\n\t\t\tif (!support.pixelBoxStyles() && rnumnonpx.test(ret) && rboxStyle.test(name)) {\n\n\t\t\t\t// Remember the original values\n\t\t\t\twidth = style.width;\n\t\t\t\tminWidth = style.minWidth;\n\t\t\t\tmaxWidth = style.maxWidth;\n\n\t\t\t\t// Put in the new values to get a computed value out\n\t\t\t\tstyle.minWidth = style.maxWidth = style.width = ret;\n\t\t\t\tret = computed.width;\n\n\t\t\t\t// Revert the changed values\n\t\t\t\tstyle.width = width;\n\t\t\t\tstyle.minWidth = minWidth;\n\t\t\t\tstyle.maxWidth = maxWidth;\n\t\t\t}\n\t\t}\n\n\t\treturn ret !== undefined ?\n\n\t\t\t// Support: IE <=9 - 11 only\n\t\t\t// IE returns zIndex value as an integer.\n\t\t\tret + \"\" :\n\t\t\tret;\n\t}\n\n\n\tfunction addGetHookIf(conditionFn, hookFn) {\n\n\t\t// Define the hook, we'll check on the first run if it's really needed.\n\t\treturn {\n\t\t\tget: function () {\n\t\t\t\tif (conditionFn()) {\n\n\t\t\t\t\t// Hook not needed (or it's not possible to use it due\n\t\t\t\t\t// to missing dependency), remove it.\n\t\t\t\t\tdelete this.get;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Hook needed; redefine it so that the support test is not executed again.\n\t\t\t\treturn (this.get = hookFn).apply(this, arguments);\n\t\t\t}\n\t\t};\n\t}\n\n\n\tvar cssPrefixes = [\"Webkit\", \"Moz\", \"ms\"],\n\t\temptyStyle = document.createElement(\"div\").style,\n\t\tvendorProps = {};\n\n\t// Return a vendor-prefixed property or undefined\n\tfunction vendorPropName(name) {\n\n\t\t// Check for vendor prefixed names\n\t\tvar capName = name[0].toUpperCase() + name.slice(1),\n\t\t\ti = cssPrefixes.length;\n\n\t\twhile (i--) {\n\t\t\tname = cssPrefixes[i] + capName;\n\t\t\tif (name in emptyStyle) {\n\t\t\t\treturn name;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return a potentially-mapped jQuery.cssProps or vendor prefixed property\n\tfunction finalPropName(name) {\n\t\tvar final = jQuery.cssProps[name] || vendorProps[name];\n\n\t\tif (final) {\n\t\t\treturn final;\n\t\t}\n\t\tif (name in emptyStyle) {\n\t\t\treturn name;\n\t\t}\n\t\treturn vendorProps[name] = vendorPropName(name) || name;\n\t}\n\n\n\tvar\n\n\t\t// Swappable if display is none or starts with table\n\t\t// except \"table\", \"table-cell\", or \"table-caption\"\n\t\t// See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display\n\t\trdisplayswap = /^(none|table(?!-c[ea]).+)/,\n\t\tcssShow = { position: \"absolute\", visibility: \"hidden\", display: \"block\" },\n\t\tcssNormalTransform = {\n\t\t\tletterSpacing: \"0\",\n\t\t\tfontWeight: \"400\"\n\t\t};\n\n\tfunction setPositiveNumber(_elem, value, subtract) {\n\n\t\t// Any relative (+/-) values have already been\n\t\t// normalized at this point\n\t\tvar matches = rcssNum.exec(value);\n\t\treturn matches ?\n\n\t\t\t// Guard against undefined \"subtract\", e.g., when used as in cssHooks\n\t\t\tMath.max(0, matches[2] - (subtract || 0)) + (matches[3] || \"px\") :\n\t\t\tvalue;\n\t}\n\n\tfunction boxModelAdjustment(elem, dimension, box, isBorderBox, styles, computedVal) {\n\t\tvar i = dimension === \"width\" ? 1 : 0,\n\t\t\textra = 0,\n\t\t\tdelta = 0,\n\t\t\tmarginDelta = 0;\n\n\t\t// Adjustment may not be necessary\n\t\tif (box === (isBorderBox ? \"border\" : \"content\")) {\n\t\t\treturn 0;\n\t\t}\n\n\t\tfor (; i < 4; i += 2) {\n\n\t\t\t// Both box models exclude margin\n\t\t\t// Count margin delta separately to only add it after scroll gutter adjustment.\n\t\t\t// This is needed to make negative margins work with `outerHeight( true )` (gh-3982).\n\t\t\tif (box === \"margin\") {\n\t\t\t\tmarginDelta += jQuery.css(elem, box + cssExpand[i], true, styles);\n\t\t\t}\n\n\t\t\t// If we get here with a content-box, we're seeking \"padding\" or \"border\" or \"margin\"\n\t\t\tif (!isBorderBox) {\n\n\t\t\t\t// Add padding\n\t\t\t\tdelta += jQuery.css(elem, \"padding\" + cssExpand[i], true, styles);\n\n\t\t\t\t// For \"border\" or \"margin\", add border\n\t\t\t\tif (box !== \"padding\") {\n\t\t\t\t\tdelta += jQuery.css(elem, \"border\" + cssExpand[i] + \"Width\", true, styles);\n\n\t\t\t\t\t// But still keep track of it otherwise\n\t\t\t\t} else {\n\t\t\t\t\textra += jQuery.css(elem, \"border\" + cssExpand[i] + \"Width\", true, styles);\n\t\t\t\t}\n\n\t\t\t\t// If we get here with a border-box (content + padding + border), we're seeking \"content\" or\n\t\t\t\t// \"padding\" or \"margin\"\n\t\t\t} else {\n\n\t\t\t\t// For \"content\", subtract padding\n\t\t\t\tif (box === \"content\") {\n\t\t\t\t\tdelta -= jQuery.css(elem, \"padding\" + cssExpand[i], true, styles);\n\t\t\t\t}\n\n\t\t\t\t// For \"content\" or \"padding\", subtract border\n\t\t\t\tif (box !== \"margin\") {\n\t\t\t\t\tdelta -= jQuery.css(elem, \"border\" + cssExpand[i] + \"Width\", true, styles);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Account for positive content-box scroll gutter when requested by providing computedVal\n\t\tif (!isBorderBox && computedVal >= 0) {\n\n\t\t\t// offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border\n\t\t\t// Assuming integer scroll gutter, subtract the rest and round down\n\t\t\tdelta += Math.max(0, Math.ceil(\n\t\t\t\telem[\"offset\" + dimension[0].toUpperCase() + dimension.slice(1)] -\n\t\t\t\tcomputedVal -\n\t\t\t\tdelta -\n\t\t\t\textra -\n\t\t\t\t0.5\n\n\t\t\t\t// If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter\n\t\t\t\t// Use an explicit zero to avoid NaN (gh-3964)\n\t\t\t)) || 0;\n\t\t}\n\n\t\treturn delta + marginDelta;\n\t}\n\n\tfunction getWidthOrHeight(elem, dimension, extra) {\n\n\t\t// Start with computed style\n\t\tvar styles = getStyles(elem),\n\n\t\t\t// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322).\n\t\t\t// Fake content-box until we know it's needed to know the true value.\n\t\t\tboxSizingNeeded = !support.boxSizingReliable() || extra,\n\t\t\tisBorderBox = boxSizingNeeded &&\n\t\t\t\tjQuery.css(elem, \"boxSizing\", false, styles) === \"border-box\",\n\t\t\tvalueIsBorderBox = isBorderBox,\n\n\t\t\tval = curCSS(elem, dimension, styles),\n\t\t\toffsetProp = \"offset\" + dimension[0].toUpperCase() + dimension.slice(1);\n\n\t\t// Support: Firefox <=54\n\t\t// Return a confounding non-pixel value or feign ignorance, as appropriate.\n\t\tif (rnumnonpx.test(val)) {\n\t\t\tif (!extra) {\n\t\t\t\treturn val;\n\t\t\t}\n\t\t\tval = \"auto\";\n\t\t}\n\n\n\t\t// Support: IE 9 - 11 only\n\t\t// Use offsetWidth/offsetHeight for when box sizing is unreliable.\n\t\t// In those cases, the computed value can be trusted to be border-box.\n\t\tif ((!support.boxSizingReliable() && isBorderBox ||\n\n\t\t\t// Support: IE 10 - 11+, Edge 15 - 18+\n\t\t\t// IE/Edge misreport `getComputedStyle` of table rows with width/height\n\t\t\t// set in CSS while `offset*` properties report correct values.\n\t\t\t// Interestingly, in some cases IE 9 doesn't suffer from this issue.\n\t\t\t!support.reliableTrDimensions() && nodeName(elem, \"tr\") ||\n\n\t\t\t// Fall back to offsetWidth/offsetHeight when value is \"auto\"\n\t\t\t// This happens for inline elements with no explicit setting (gh-3571)\n\t\t\tval === \"auto\" ||\n\n\t\t\t// Support: Android <=4.1 - 4.3 only\n\t\t\t// Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602)\n\t\t\t!parseFloat(val) && jQuery.css(elem, \"display\", false, styles) === \"inline\") &&\n\n\t\t\t// Make sure the element is visible & connected\n\t\t\telem.getClientRects().length) {\n\n\t\t\tisBorderBox = jQuery.css(elem, \"boxSizing\", false, styles) === \"border-box\";\n\n\t\t\t// Where available, offsetWidth/offsetHeight approximate border box dimensions.\n\t\t\t// Where not available (e.g., SVG), assume unreliable box-sizing and interpret the\n\t\t\t// retrieved value as a content box dimension.\n\t\t\tvalueIsBorderBox = offsetProp in elem;\n\t\t\tif (valueIsBorderBox) {\n\t\t\t\tval = elem[offsetProp];\n\t\t\t}\n\t\t}\n\n\t\t// Normalize \"\" and auto\n\t\tval = parseFloat(val) || 0;\n\n\t\t// Adjust for the element's box model\n\t\treturn (val +\n\t\t\tboxModelAdjustment(\n\t\t\t\telem,\n\t\t\t\tdimension,\n\t\t\t\textra || (isBorderBox ? \"border\" : \"content\"),\n\t\t\t\tvalueIsBorderBox,\n\t\t\t\tstyles,\n\n\t\t\t\t// Provide the current computed size to request scroll gutter calculation (gh-3589)\n\t\t\t\tval\n\t\t\t)\n\t\t) + \"px\";\n\t}\n\n\tjQuery.extend({\n\n\t\t// Add in style property hooks for overriding the default\n\t\t// behavior of getting and setting a style property\n\t\tcssHooks: {\n\t\t\topacity: {\n\t\t\t\tget: function (elem, computed) {\n\t\t\t\t\tif (computed) {\n\n\t\t\t\t\t\t// We should always get a number back from opacity\n\t\t\t\t\t\tvar ret = curCSS(elem, \"opacity\");\n\t\t\t\t\t\treturn ret === \"\" ? \"1\" : ret;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t// Don't automatically add \"px\" to these possibly-unitless properties\n\t\tcssNumber: {\n\t\t\tanimationIterationCount: true,\n\t\t\taspectRatio: true,\n\t\t\tborderImageSlice: true,\n\t\t\tcolumnCount: true,\n\t\t\tflexGrow: true,\n\t\t\tflexShrink: true,\n\t\t\tfontWeight: true,\n\t\t\tgridArea: true,\n\t\t\tgridColumn: true,\n\t\t\tgridColumnEnd: true,\n\t\t\tgridColumnStart: true,\n\t\t\tgridRow: true,\n\t\t\tgridRowEnd: true,\n\t\t\tgridRowStart: true,\n\t\t\tlineHeight: true,\n\t\t\topacity: true,\n\t\t\torder: true,\n\t\t\torphans: true,\n\t\t\tscale: true,\n\t\t\twidows: true,\n\t\t\tzIndex: true,\n\t\t\tzoom: true,\n\n\t\t\t// SVG-related\n\t\t\tfillOpacity: true,\n\t\t\tfloodOpacity: true,\n\t\t\tstopOpacity: true,\n\t\t\tstrokeMiterlimit: true,\n\t\t\tstrokeOpacity: true\n\t\t},\n\n\t\t// Add in properties whose names you wish to fix before\n\t\t// setting or getting the value\n\t\tcssProps: {},\n\n\t\t// Get and set the style property on a DOM Node\n\t\tstyle: function (elem, name, value, extra) {\n\n\t\t\t// Don't set styles on text and comment nodes\n\t\t\tif (!elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Make sure that we're working with the right name\n\t\t\tvar ret, type, hooks,\n\t\t\t\torigName = camelCase(name),\n\t\t\t\tisCustomProp = rcustomProp.test(name),\n\t\t\t\tstyle = elem.style;\n\n\t\t\t// Make sure that we're working with the right name. We don't\n\t\t\t// want to query the value if it is a CSS custom property\n\t\t\t// since they are user-defined.\n\t\t\tif (!isCustomProp) {\n\t\t\t\tname = finalPropName(origName);\n\t\t\t}\n\n\t\t\t// Gets hook for the prefixed version, then unprefixed version\n\t\t\thooks = jQuery.cssHooks[name] || jQuery.cssHooks[origName];\n\n\t\t\t// Check if we're setting a value\n\t\t\tif (value !== undefined) {\n\t\t\t\ttype = typeof value;\n\n\t\t\t\t// Convert \"+=\" or \"-=\" to relative numbers (trac-7345)\n\t\t\t\tif (type === \"string\" && (ret = rcssNum.exec(value)) && ret[1]) {\n\t\t\t\t\tvalue = adjustCSS(elem, name, ret);\n\n\t\t\t\t\t// Fixes bug trac-9237\n\t\t\t\t\ttype = \"number\";\n\t\t\t\t}\n\n\t\t\t\t// Make sure that null and NaN values aren't set (trac-7116)\n\t\t\t\tif (value == null || value !== value) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// If a number was passed in, add the unit (except for certain CSS properties)\n\t\t\t\t// The isCustomProp check can be removed in jQuery 4.0 when we only auto-append\n\t\t\t\t// \"px\" to a few hardcoded values.\n\t\t\t\tif (type === \"number\" && !isCustomProp) {\n\t\t\t\t\tvalue += ret && ret[3] || (jQuery.cssNumber[origName] ? \"\" : \"px\");\n\t\t\t\t}\n\n\t\t\t\t// background-* props affect original clone's values\n\t\t\t\tif (!support.clearCloneStyle && value === \"\" && name.indexOf(\"background\") === 0) {\n\t\t\t\t\tstyle[name] = \"inherit\";\n\t\t\t\t}\n\n\t\t\t\t// If a hook was provided, use that value, otherwise just set the specified value\n\t\t\t\tif (!hooks || !(\"set\" in hooks) ||\n\t\t\t\t\t(value = hooks.set(elem, value, extra)) !== undefined) {\n\n\t\t\t\t\tif (isCustomProp) {\n\t\t\t\t\t\tstyle.setProperty(name, value);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tstyle[name] = value;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\t// If a hook was provided get the non-computed value from there\n\t\t\t\tif (hooks && \"get\" in hooks &&\n\t\t\t\t\t(ret = hooks.get(elem, false, extra)) !== undefined) {\n\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\n\t\t\t\t// Otherwise just get the value from the style object\n\t\t\t\treturn style[name];\n\t\t\t}\n\t\t},\n\n\t\tcss: function (elem, name, extra, styles) {\n\t\t\tvar val, num, hooks,\n\t\t\t\torigName = camelCase(name),\n\t\t\t\tisCustomProp = rcustomProp.test(name);\n\n\t\t\t// Make sure that we're working with the right name. We don't\n\t\t\t// want to modify the value if it is a CSS custom property\n\t\t\t// since they are user-defined.\n\t\t\tif (!isCustomProp) {\n\t\t\t\tname = finalPropName(origName);\n\t\t\t}\n\n\t\t\t// Try prefixed name followed by the unprefixed name\n\t\t\thooks = jQuery.cssHooks[name] || jQuery.cssHooks[origName];\n\n\t\t\t// If a hook was provided get the computed value from there\n\t\t\tif (hooks && \"get\" in hooks) {\n\t\t\t\tval = hooks.get(elem, true, extra);\n\t\t\t}\n\n\t\t\t// Otherwise, if a way to get the computed value exists, use that\n\t\t\tif (val === undefined) {\n\t\t\t\tval = curCSS(elem, name, styles);\n\t\t\t}\n\n\t\t\t// Convert \"normal\" to computed value\n\t\t\tif (val === \"normal\" && name in cssNormalTransform) {\n\t\t\t\tval = cssNormalTransform[name];\n\t\t\t}\n\n\t\t\t// Make numeric if forced or a qualifier was provided and val looks numeric\n\t\t\tif (extra === \"\" || extra) {\n\t\t\t\tnum = parseFloat(val);\n\t\t\t\treturn extra === true || isFinite(num) ? num || 0 : val;\n\t\t\t}\n\n\t\t\treturn val;\n\t\t}\n\t});\n\n\tjQuery.each([\"height\", \"width\"], function (_i, dimension) {\n\t\tjQuery.cssHooks[dimension] = {\n\t\t\tget: function (elem, computed, extra) {\n\t\t\t\tif (computed) {\n\n\t\t\t\t\t// Certain elements can have dimension info if we invisibly show them\n\t\t\t\t\t// but it must have a current display style that would benefit\n\t\t\t\t\treturn rdisplayswap.test(jQuery.css(elem, \"display\")) &&\n\n\t\t\t\t\t\t// Support: Safari 8+\n\t\t\t\t\t\t// Table columns in Safari have non-zero offsetWidth & zero\n\t\t\t\t\t\t// getBoundingClientRect().width unless display is changed.\n\t\t\t\t\t\t// Support: IE <=11 only\n\t\t\t\t\t\t// Running getBoundingClientRect on a disconnected node\n\t\t\t\t\t\t// in IE throws an error.\n\t\t\t\t\t\t(!elem.getClientRects().length || !elem.getBoundingClientRect().width) ?\n\t\t\t\t\t\tswap(elem, cssShow, function () {\n\t\t\t\t\t\t\treturn getWidthOrHeight(elem, dimension, extra);\n\t\t\t\t\t\t}) :\n\t\t\t\t\t\tgetWidthOrHeight(elem, dimension, extra);\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tset: function (elem, value, extra) {\n\t\t\t\tvar matches,\n\t\t\t\t\tstyles = getStyles(elem),\n\n\t\t\t\t\t// Only read styles.position if the test has a chance to fail\n\t\t\t\t\t// to avoid forcing a reflow.\n\t\t\t\t\tscrollboxSizeBuggy = !support.scrollboxSize() &&\n\t\t\t\t\t\tstyles.position === \"absolute\",\n\n\t\t\t\t\t// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991)\n\t\t\t\t\tboxSizingNeeded = scrollboxSizeBuggy || extra,\n\t\t\t\t\tisBorderBox = boxSizingNeeded &&\n\t\t\t\t\t\tjQuery.css(elem, \"boxSizing\", false, styles) === \"border-box\",\n\t\t\t\t\tsubtract = extra ?\n\t\t\t\t\t\tboxModelAdjustment(\n\t\t\t\t\t\t\telem,\n\t\t\t\t\t\t\tdimension,\n\t\t\t\t\t\t\textra,\n\t\t\t\t\t\t\tisBorderBox,\n\t\t\t\t\t\t\tstyles\n\t\t\t\t\t\t) :\n\t\t\t\t\t\t0;\n\n\t\t\t\t// Account for unreliable border-box dimensions by comparing offset* to computed and\n\t\t\t\t// faking a content-box to get border and padding (gh-3699)\n\t\t\t\tif (isBorderBox && scrollboxSizeBuggy) {\n\t\t\t\t\tsubtract -= Math.ceil(\n\t\t\t\t\t\telem[\"offset\" + dimension[0].toUpperCase() + dimension.slice(1)] -\n\t\t\t\t\t\tparseFloat(styles[dimension]) -\n\t\t\t\t\t\tboxModelAdjustment(elem, dimension, \"border\", false, styles) -\n\t\t\t\t\t\t0.5\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\t// Convert to pixels if value adjustment is needed\n\t\t\t\tif (subtract && (matches = rcssNum.exec(value)) &&\n\t\t\t\t\t(matches[3] || \"px\") !== \"px\") {\n\n\t\t\t\t\telem.style[dimension] = value;\n\t\t\t\t\tvalue = jQuery.css(elem, dimension);\n\t\t\t\t}\n\n\t\t\t\treturn setPositiveNumber(elem, value, subtract);\n\t\t\t}\n\t\t};\n\t});\n\n\tjQuery.cssHooks.marginLeft = addGetHookIf(support.reliableMarginLeft,\n\t\tfunction (elem, computed) {\n\t\t\tif (computed) {\n\t\t\t\treturn (parseFloat(curCSS(elem, \"marginLeft\")) ||\n\t\t\t\t\telem.getBoundingClientRect().left -\n\t\t\t\t\tswap(elem, { marginLeft: 0 }, function () {\n\t\t\t\t\t\treturn elem.getBoundingClientRect().left;\n\t\t\t\t\t})\n\t\t\t\t) + \"px\";\n\t\t\t}\n\t\t}\n\t);\n\n\t// These hooks are used by animate to expand properties\n\tjQuery.each({\n\t\tmargin: \"\",\n\t\tpadding: \"\",\n\t\tborder: \"Width\"\n\t}, function (prefix, suffix) {\n\t\tjQuery.cssHooks[prefix + suffix] = {\n\t\t\texpand: function (value) {\n\t\t\t\tvar i = 0,\n\t\t\t\t\texpanded = {},\n\n\t\t\t\t\t// Assumes a single number if not a string\n\t\t\t\t\tparts = typeof value === \"string\" ? value.split(\" \") : [value];\n\n\t\t\t\tfor (; i < 4; i++) {\n\t\t\t\t\texpanded[prefix + cssExpand[i] + suffix] =\n\t\t\t\t\t\tparts[i] || parts[i - 2] || parts[0];\n\t\t\t\t}\n\n\t\t\t\treturn expanded;\n\t\t\t}\n\t\t};\n\n\t\tif (prefix !== \"margin\") {\n\t\t\tjQuery.cssHooks[prefix + suffix].set = setPositiveNumber;\n\t\t}\n\t});\n\n\tjQuery.fn.extend({\n\t\tcss: function (name, value) {\n\t\t\treturn access(this, function (elem, name, value) {\n\t\t\t\tvar styles, len,\n\t\t\t\t\tmap = {},\n\t\t\t\t\ti = 0;\n\n\t\t\t\tif (Array.isArray(name)) {\n\t\t\t\t\tstyles = getStyles(elem);\n\t\t\t\t\tlen = name.length;\n\n\t\t\t\t\tfor (; i < len; i++) {\n\t\t\t\t\t\tmap[name[i]] = jQuery.css(elem, name[i], false, styles);\n\t\t\t\t\t}\n\n\t\t\t\t\treturn map;\n\t\t\t\t}\n\n\t\t\t\treturn value !== undefined ?\n\t\t\t\t\tjQuery.style(elem, name, value) :\n\t\t\t\t\tjQuery.css(elem, name);\n\t\t\t}, name, value, arguments.length > 1);\n\t\t}\n\t});\n\n\n\tfunction Tween(elem, options, prop, end, easing) {\n\t\treturn new Tween.prototype.init(elem, options, prop, end, easing);\n\t}\n\tjQuery.Tween = Tween;\n\n\tTween.prototype = {\n\t\tconstructor: Tween,\n\t\tinit: function (elem, options, prop, end, easing, unit) {\n\t\t\tthis.elem = elem;\n\t\t\tthis.prop = prop;\n\t\t\tthis.easing = easing || jQuery.easing._default;\n\t\t\tthis.options = options;\n\t\t\tthis.start = this.now = this.cur();\n\t\t\tthis.end = end;\n\t\t\tthis.unit = unit || (jQuery.cssNumber[prop] ? \"\" : \"px\");\n\t\t},\n\t\tcur: function () {\n\t\t\tvar hooks = Tween.propHooks[this.prop];\n\n\t\t\treturn hooks && hooks.get ?\n\t\t\t\thooks.get(this) :\n\t\t\t\tTween.propHooks._default.get(this);\n\t\t},\n\t\trun: function (percent) {\n\t\t\tvar eased,\n\t\t\t\thooks = Tween.propHooks[this.prop];\n\n\t\t\tif (this.options.duration) {\n\t\t\t\tthis.pos = eased = jQuery.easing[this.easing](\n\t\t\t\t\tpercent, this.options.duration * percent, 0, 1, this.options.duration\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tthis.pos = eased = percent;\n\t\t\t}\n\t\t\tthis.now = (this.end - this.start) * eased + this.start;\n\n\t\t\tif (this.options.step) {\n\t\t\t\tthis.options.step.call(this.elem, this.now, this);\n\t\t\t}\n\n\t\t\tif (hooks && hooks.set) {\n\t\t\t\thooks.set(this);\n\t\t\t} else {\n\t\t\t\tTween.propHooks._default.set(this);\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t};\n\n\tTween.prototype.init.prototype = Tween.prototype;\n\n\tTween.propHooks = {\n\t\t_default: {\n\t\t\tget: function (tween) {\n\t\t\t\tvar result;\n\n\t\t\t\t// Use a property on the element directly when it is not a DOM element,\n\t\t\t\t// or when there is no matching style property that exists.\n\t\t\t\tif (tween.elem.nodeType !== 1 ||\n\t\t\t\t\ttween.elem[tween.prop] != null && tween.elem.style[tween.prop] == null) {\n\t\t\t\t\treturn tween.elem[tween.prop];\n\t\t\t\t}\n\n\t\t\t\t// Passing an empty string as a 3rd parameter to .css will automatically\n\t\t\t\t// attempt a parseFloat and fallback to a string if the parse fails.\n\t\t\t\t// Simple values such as \"10px\" are parsed to Float;\n\t\t\t\t// complex values such as \"rotate(1rad)\" are returned as-is.\n\t\t\t\tresult = jQuery.css(tween.elem, tween.prop, \"\");\n\n\t\t\t\t// Empty strings, null, undefined and \"auto\" are converted to 0.\n\t\t\t\treturn !result || result === \"auto\" ? 0 : result;\n\t\t\t},\n\t\t\tset: function (tween) {\n\n\t\t\t\t// Use step hook for back compat.\n\t\t\t\t// Use cssHook if its there.\n\t\t\t\t// Use .style if available and use plain properties where available.\n\t\t\t\tif (jQuery.fx.step[tween.prop]) {\n\t\t\t\t\tjQuery.fx.step[tween.prop](tween);\n\t\t\t\t} else if (tween.elem.nodeType === 1 && (\n\t\t\t\t\tjQuery.cssHooks[tween.prop] ||\n\t\t\t\t\ttween.elem.style[finalPropName(tween.prop)] != null)) {\n\t\t\t\t\tjQuery.style(tween.elem, tween.prop, tween.now + tween.unit);\n\t\t\t\t} else {\n\t\t\t\t\ttween.elem[tween.prop] = tween.now;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t// Support: IE <=9 only\n\t// Panic based approach to setting things on disconnected nodes\n\tTween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {\n\t\tset: function (tween) {\n\t\t\tif (tween.elem.nodeType && tween.elem.parentNode) {\n\t\t\t\ttween.elem[tween.prop] = tween.now;\n\t\t\t}\n\t\t}\n\t};\n\n\tjQuery.easing = {\n\t\tlinear: function (p) {\n\t\t\treturn p;\n\t\t},\n\t\tswing: function (p) {\n\t\t\treturn 0.5 - Math.cos(p * Math.PI) / 2;\n\t\t},\n\t\t_default: \"swing\"\n\t};\n\n\tjQuery.fx = Tween.prototype.init;\n\n\t// Back compat <1.8 extension point\n\tjQuery.fx.step = {};\n\n\n\n\n\tvar\n\t\tfxNow, inProgress,\n\t\trfxtypes = /^(?:toggle|show|hide)$/,\n\t\trrun = /queueHooks$/;\n\n\tfunction schedule() {\n\t\tif (inProgress) {\n\t\t\tif (document.hidden === false && window.requestAnimationFrame) {\n\t\t\t\twindow.requestAnimationFrame(schedule);\n\t\t\t} else {\n\t\t\t\twindow.setTimeout(schedule, jQuery.fx.interval);\n\t\t\t}\n\n\t\t\tjQuery.fx.tick();\n\t\t}\n\t}\n\n\t// Animations created synchronously will run synchronously\n\tfunction createFxNow() {\n\t\twindow.setTimeout(function () {\n\t\t\tfxNow = undefined;\n\t\t});\n\t\treturn (fxNow = Date.now());\n\t}\n\n\t// Generate parameters to create a standard animation\n\tfunction genFx(type, includeWidth) {\n\t\tvar which,\n\t\t\ti = 0,\n\t\t\tattrs = { height: type };\n\n\t\t// If we include width, step value is 1 to do all cssExpand values,\n\t\t// otherwise step value is 2 to skip over Left and Right\n\t\tincludeWidth = includeWidth ? 1 : 0;\n\t\tfor (; i < 4; i += 2 - includeWidth) {\n\t\t\twhich = cssExpand[i];\n\t\t\tattrs[\"margin\" + which] = attrs[\"padding\" + which] = type;\n\t\t}\n\n\t\tif (includeWidth) {\n\t\t\tattrs.opacity = attrs.width = type;\n\t\t}\n\n\t\treturn attrs;\n\t}\n\n\tfunction createTween(value, prop, animation) {\n\t\tvar tween,\n\t\t\tcollection = (Animation.tweeners[prop] || []).concat(Animation.tweeners[\"*\"]),\n\t\t\tindex = 0,\n\t\t\tlength = collection.length;\n\t\tfor (; index < length; index++) {\n\t\t\tif ((tween = collection[index].call(animation, prop, value))) {\n\n\t\t\t\t// We're done with this property\n\t\t\t\treturn tween;\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction defaultPrefilter(elem, props, opts) {\n\t\tvar prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display,\n\t\t\tisBox = \"width\" in props || \"height\" in props,\n\t\t\tanim = this,\n\t\t\torig = {},\n\t\t\tstyle = elem.style,\n\t\t\thidden = elem.nodeType && isHiddenWithinTree(elem),\n\t\t\tdataShow = dataPriv.get(elem, \"fxshow\");\n\n\t\t// Queue-skipping animations hijack the fx hooks\n\t\tif (!opts.queue) {\n\t\t\thooks = jQuery._queueHooks(elem, \"fx\");\n\t\t\tif (hooks.unqueued == null) {\n\t\t\t\thooks.unqueued = 0;\n\t\t\t\toldfire = hooks.empty.fire;\n\t\t\t\thooks.empty.fire = function () {\n\t\t\t\t\tif (!hooks.unqueued) {\n\t\t\t\t\t\toldfire();\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t\thooks.unqueued++;\n\n\t\t\tanim.always(function () {\n\n\t\t\t\t// Ensure the complete handler is called before this completes\n\t\t\t\tanim.always(function () {\n\t\t\t\t\thooks.unqueued--;\n\t\t\t\t\tif (!jQuery.queue(elem, \"fx\").length) {\n\t\t\t\t\t\thooks.empty.fire();\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\n\t\t// Detect show/hide animations\n\t\tfor (prop in props) {\n\t\t\tvalue = props[prop];\n\t\t\tif (rfxtypes.test(value)) {\n\t\t\t\tdelete props[prop];\n\t\t\t\ttoggle = toggle || value === \"toggle\";\n\t\t\t\tif (value === (hidden ? \"hide\" : \"show\")) {\n\n\t\t\t\t\t// Pretend to be hidden if this is a \"show\" and\n\t\t\t\t\t// there is still data from a stopped show/hide\n\t\t\t\t\tif (value === \"show\" && dataShow && dataShow[prop] !== undefined) {\n\t\t\t\t\t\thidden = true;\n\n\t\t\t\t\t\t// Ignore all other no-op show/hide data\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\torig[prop] = dataShow && dataShow[prop] || jQuery.style(elem, prop);\n\t\t\t}\n\t\t}\n\n\t\t// Bail out if this is a no-op like .hide().hide()\n\t\tpropTween = !jQuery.isEmptyObject(props);\n\t\tif (!propTween && jQuery.isEmptyObject(orig)) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Restrict \"overflow\" and \"display\" styles during box animations\n\t\tif (isBox && elem.nodeType === 1) {\n\n\t\t\t// Support: IE <=9 - 11, Edge 12 - 15\n\t\t\t// Record all 3 overflow attributes because IE does not infer the shorthand\n\t\t\t// from identically-valued overflowX and overflowY and Edge just mirrors\n\t\t\t// the overflowX value there.\n\t\t\topts.overflow = [style.overflow, style.overflowX, style.overflowY];\n\n\t\t\t// Identify a display type, preferring old show/hide data over the CSS cascade\n\t\t\trestoreDisplay = dataShow && dataShow.display;\n\t\t\tif (restoreDisplay == null) {\n\t\t\t\trestoreDisplay = dataPriv.get(elem, \"display\");\n\t\t\t}\n\t\t\tdisplay = jQuery.css(elem, \"display\");\n\t\t\tif (display === \"none\") {\n\t\t\t\tif (restoreDisplay) {\n\t\t\t\t\tdisplay = restoreDisplay;\n\t\t\t\t} else {\n\n\t\t\t\t\t// Get nonempty value(s) by temporarily forcing visibility\n\t\t\t\t\tshowHide([elem], true);\n\t\t\t\t\trestoreDisplay = elem.style.display || restoreDisplay;\n\t\t\t\t\tdisplay = jQuery.css(elem, \"display\");\n\t\t\t\t\tshowHide([elem]);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Animate inline elements as inline-block\n\t\t\tif (display === \"inline\" || display === \"inline-block\" && restoreDisplay != null) {\n\t\t\t\tif (jQuery.css(elem, \"float\") === \"none\") {\n\n\t\t\t\t\t// Restore the original display value at the end of pure show/hide animations\n\t\t\t\t\tif (!propTween) {\n\t\t\t\t\t\tanim.done(function () {\n\t\t\t\t\t\t\tstyle.display = restoreDisplay;\n\t\t\t\t\t\t});\n\t\t\t\t\t\tif (restoreDisplay == null) {\n\t\t\t\t\t\t\tdisplay = style.display;\n\t\t\t\t\t\t\trestoreDisplay = display === \"none\" ? \"\" : display;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tstyle.display = \"inline-block\";\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (opts.overflow) {\n\t\t\tstyle.overflow = \"hidden\";\n\t\t\tanim.always(function () {\n\t\t\t\tstyle.overflow = opts.overflow[0];\n\t\t\t\tstyle.overflowX = opts.overflow[1];\n\t\t\t\tstyle.overflowY = opts.overflow[2];\n\t\t\t});\n\t\t}\n\n\t\t// Implement show/hide animations\n\t\tpropTween = false;\n\t\tfor (prop in orig) {\n\n\t\t\t// General show/hide setup for this element animation\n\t\t\tif (!propTween) {\n\t\t\t\tif (dataShow) {\n\t\t\t\t\tif (\"hidden\" in dataShow) {\n\t\t\t\t\t\thidden = dataShow.hidden;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tdataShow = dataPriv.access(elem, \"fxshow\", { display: restoreDisplay });\n\t\t\t\t}\n\n\t\t\t\t// Store hidden/visible for toggle so `.stop().toggle()` \"reverses\"\n\t\t\t\tif (toggle) {\n\t\t\t\t\tdataShow.hidden = !hidden;\n\t\t\t\t}\n\n\t\t\t\t// Show elements before animating them\n\t\t\t\tif (hidden) {\n\t\t\t\t\tshowHide([elem], true);\n\t\t\t\t}\n\n\t\t\t\t/* eslint-disable no-loop-func */\n\n\t\t\t\tanim.done(function () {\n\n\t\t\t\t\t/* eslint-enable no-loop-func */\n\n\t\t\t\t\t// The final step of a \"hide\" animation is actually hiding the element\n\t\t\t\t\tif (!hidden) {\n\t\t\t\t\t\tshowHide([elem]);\n\t\t\t\t\t}\n\t\t\t\t\tdataPriv.remove(elem, \"fxshow\");\n\t\t\t\t\tfor (prop in orig) {\n\t\t\t\t\t\tjQuery.style(elem, prop, orig[prop]);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// Per-property setup\n\t\t\tpropTween = createTween(hidden ? dataShow[prop] : 0, prop, anim);\n\t\t\tif (!(prop in dataShow)) {\n\t\t\t\tdataShow[prop] = propTween.start;\n\t\t\t\tif (hidden) {\n\t\t\t\t\tpropTween.end = propTween.start;\n\t\t\t\t\tpropTween.start = 0;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction propFilter(props, specialEasing) {\n\t\tvar index, name, easing, value, hooks;\n\n\t\t// camelCase, specialEasing and expand cssHook pass\n\t\tfor (index in props) {\n\t\t\tname = camelCase(index);\n\t\t\teasing = specialEasing[name];\n\t\t\tvalue = props[index];\n\t\t\tif (Array.isArray(value)) {\n\t\t\t\teasing = value[1];\n\t\t\t\tvalue = props[index] = value[0];\n\t\t\t}\n\n\t\t\tif (index !== name) {\n\t\t\t\tprops[name] = value;\n\t\t\t\tdelete props[index];\n\t\t\t}\n\n\t\t\thooks = jQuery.cssHooks[name];\n\t\t\tif (hooks && \"expand\" in hooks) {\n\t\t\t\tvalue = hooks.expand(value);\n\t\t\t\tdelete props[name];\n\n\t\t\t\t// Not quite $.extend, this won't overwrite existing keys.\n\t\t\t\t// Reusing 'index' because we have the correct \"name\"\n\t\t\t\tfor (index in value) {\n\t\t\t\t\tif (!(index in props)) {\n\t\t\t\t\t\tprops[index] = value[index];\n\t\t\t\t\t\tspecialEasing[index] = easing;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tspecialEasing[name] = easing;\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction Animation(elem, properties, options) {\n\t\tvar result,\n\t\t\tstopped,\n\t\t\tindex = 0,\n\t\t\tlength = Animation.prefilters.length,\n\t\t\tdeferred = jQuery.Deferred().always(function () {\n\n\t\t\t\t// Don't match elem in the :animated selector\n\t\t\t\tdelete tick.elem;\n\t\t\t}),\n\t\t\ttick = function () {\n\t\t\t\tif (stopped) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tvar currentTime = fxNow || createFxNow(),\n\t\t\t\t\tremaining = Math.max(0, animation.startTime + animation.duration - currentTime),\n\n\t\t\t\t\t// Support: Android 2.3 only\n\t\t\t\t\t// Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (trac-12497)\n\t\t\t\t\ttemp = remaining / animation.duration || 0,\n\t\t\t\t\tpercent = 1 - temp,\n\t\t\t\t\tindex = 0,\n\t\t\t\t\tlength = animation.tweens.length;\n\n\t\t\t\tfor (; index < length; index++) {\n\t\t\t\t\tanimation.tweens[index].run(percent);\n\t\t\t\t}\n\n\t\t\t\tdeferred.notifyWith(elem, [animation, percent, remaining]);\n\n\t\t\t\t// If there's more to do, yield\n\t\t\t\tif (percent < 1 && length) {\n\t\t\t\t\treturn remaining;\n\t\t\t\t}\n\n\t\t\t\t// If this was an empty animation, synthesize a final progress notification\n\t\t\t\tif (!length) {\n\t\t\t\t\tdeferred.notifyWith(elem, [animation, 1, 0]);\n\t\t\t\t}\n\n\t\t\t\t// Resolve the animation and report its conclusion\n\t\t\t\tdeferred.resolveWith(elem, [animation]);\n\t\t\t\treturn false;\n\t\t\t},\n\t\t\tanimation = deferred.promise({\n\t\t\t\telem: elem,\n\t\t\t\tprops: jQuery.extend({}, properties),\n\t\t\t\topts: jQuery.extend(true, {\n\t\t\t\t\tspecialEasing: {},\n\t\t\t\t\teasing: jQuery.easing._default\n\t\t\t\t}, options),\n\t\t\t\toriginalProperties: properties,\n\t\t\t\toriginalOptions: options,\n\t\t\t\tstartTime: fxNow || createFxNow(),\n\t\t\t\tduration: options.duration,\n\t\t\t\ttweens: [],\n\t\t\t\tcreateTween: function (prop, end) {\n\t\t\t\t\tvar tween = jQuery.Tween(elem, animation.opts, prop, end,\n\t\t\t\t\t\tanimation.opts.specialEasing[prop] || animation.opts.easing);\n\t\t\t\t\tanimation.tweens.push(tween);\n\t\t\t\t\treturn tween;\n\t\t\t\t},\n\t\t\t\tstop: function (gotoEnd) {\n\t\t\t\t\tvar index = 0,\n\n\t\t\t\t\t\t// If we are going to the end, we want to run all the tweens\n\t\t\t\t\t\t// otherwise we skip this part\n\t\t\t\t\t\tlength = gotoEnd ? animation.tweens.length : 0;\n\t\t\t\t\tif (stopped) {\n\t\t\t\t\t\treturn this;\n\t\t\t\t\t}\n\t\t\t\t\tstopped = true;\n\t\t\t\t\tfor (; index < length; index++) {\n\t\t\t\t\t\tanimation.tweens[index].run(1);\n\t\t\t\t\t}\n\n\t\t\t\t\t// Resolve when we played the last frame; otherwise, reject\n\t\t\t\t\tif (gotoEnd) {\n\t\t\t\t\t\tdeferred.notifyWith(elem, [animation, 1, 0]);\n\t\t\t\t\t\tdeferred.resolveWith(elem, [animation, gotoEnd]);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdeferred.rejectWith(elem, [animation, gotoEnd]);\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t}),\n\t\t\tprops = animation.props;\n\n\t\tpropFilter(props, animation.opts.specialEasing);\n\n\t\tfor (; index < length; index++) {\n\t\t\tresult = Animation.prefilters[index].call(animation, elem, props, animation.opts);\n\t\t\tif (result) {\n\t\t\t\tif (isFunction(result.stop)) {\n\t\t\t\t\tjQuery._queueHooks(animation.elem, animation.opts.queue).stop =\n\t\t\t\t\t\tresult.stop.bind(result);\n\t\t\t\t}\n\t\t\t\treturn result;\n\t\t\t}\n\t\t}\n\n\t\tjQuery.map(props, createTween, animation);\n\n\t\tif (isFunction(animation.opts.start)) {\n\t\t\tanimation.opts.start.call(elem, animation);\n\t\t}\n\n\t\t// Attach callbacks from options\n\t\tanimation\n\t\t\t.progress(animation.opts.progress)\n\t\t\t.done(animation.opts.done, animation.opts.complete)\n\t\t\t.fail(animation.opts.fail)\n\t\t\t.always(animation.opts.always);\n\n\t\tjQuery.fx.timer(\n\t\t\tjQuery.extend(tick, {\n\t\t\t\telem: elem,\n\t\t\t\tanim: animation,\n\t\t\t\tqueue: animation.opts.queue\n\t\t\t})\n\t\t);\n\n\t\treturn animation;\n\t}\n\n\tjQuery.Animation = jQuery.extend(Animation, {\n\n\t\ttweeners: {\n\t\t\t\"*\": [function (prop, value) {\n\t\t\t\tvar tween = this.createTween(prop, value);\n\t\t\t\tadjustCSS(tween.elem, prop, rcssNum.exec(value), tween);\n\t\t\t\treturn tween;\n\t\t\t}]\n\t\t},\n\n\t\ttweener: function (props, callback) {\n\t\t\tif (isFunction(props)) {\n\t\t\t\tcallback = props;\n\t\t\t\tprops = [\"*\"];\n\t\t\t} else {\n\t\t\t\tprops = props.match(rnothtmlwhite);\n\t\t\t}\n\n\t\t\tvar prop,\n\t\t\t\tindex = 0,\n\t\t\t\tlength = props.length;\n\n\t\t\tfor (; index < length; index++) {\n\t\t\t\tprop = props[index];\n\t\t\t\tAnimation.tweeners[prop] = Animation.tweeners[prop] || [];\n\t\t\t\tAnimation.tweeners[prop].unshift(callback);\n\t\t\t}\n\t\t},\n\n\t\tprefilters: [defaultPrefilter],\n\n\t\tprefilter: function (callback, prepend) {\n\t\t\tif (prepend) {\n\t\t\t\tAnimation.prefilters.unshift(callback);\n\t\t\t} else {\n\t\t\t\tAnimation.prefilters.push(callback);\n\t\t\t}\n\t\t}\n\t});\n\n\tjQuery.speed = function (speed, easing, fn) {\n\t\tvar opt = speed && typeof speed === \"object\" ? jQuery.extend({}, speed) : {\n\t\t\tcomplete: fn || !fn && easing ||\n\t\t\t\tisFunction(speed) && speed,\n\t\t\tduration: speed,\n\t\t\teasing: fn && easing || easing && !isFunction(easing) && easing\n\t\t};\n\n\t\t// Go to the end state if fx are off\n\t\tif (jQuery.fx.off) {\n\t\t\topt.duration = 0;\n\n\t\t} else {\n\t\t\tif (typeof opt.duration !== \"number\") {\n\t\t\t\tif (opt.duration in jQuery.fx.speeds) {\n\t\t\t\t\topt.duration = jQuery.fx.speeds[opt.duration];\n\n\t\t\t\t} else {\n\t\t\t\t\topt.duration = jQuery.fx.speeds._default;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Normalize opt.queue - true/undefined/null -> \"fx\"\n\t\tif (opt.queue == null || opt.queue === true) {\n\t\t\topt.queue = \"fx\";\n\t\t}\n\n\t\t// Queueing\n\t\topt.old = opt.complete;\n\n\t\topt.complete = function () {\n\t\t\tif (isFunction(opt.old)) {\n\t\t\t\topt.old.call(this);\n\t\t\t}\n\n\t\t\tif (opt.queue) {\n\t\t\t\tjQuery.dequeue(this, opt.queue);\n\t\t\t}\n\t\t};\n\n\t\treturn opt;\n\t};\n\n\tjQuery.fn.extend({\n\t\tfadeTo: function (speed, to, easing, callback) {\n\n\t\t\t// Show any hidden elements after setting opacity to 0\n\t\t\treturn this.filter(isHiddenWithinTree).css(\"opacity\", 0).show()\n\n\t\t\t\t// Animate to the value specified\n\t\t\t\t.end().animate({ opacity: to }, speed, easing, callback);\n\t\t},\n\t\tanimate: function (prop, speed, easing, callback) {\n\t\t\tvar empty = jQuery.isEmptyObject(prop),\n\t\t\t\toptall = jQuery.speed(speed, easing, callback),\n\t\t\t\tdoAnimation = function () {\n\n\t\t\t\t\t// Operate on a copy of prop so per-property easing won't be lost\n\t\t\t\t\tvar anim = Animation(this, jQuery.extend({}, prop), optall);\n\n\t\t\t\t\t// Empty animations, or finishing resolves immediately\n\t\t\t\t\tif (empty || dataPriv.get(this, \"finish\")) {\n\t\t\t\t\t\tanim.stop(true);\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\tdoAnimation.finish = doAnimation;\n\n\t\t\treturn empty || optall.queue === false ?\n\t\t\t\tthis.each(doAnimation) :\n\t\t\t\tthis.queue(optall.queue, doAnimation);\n\t\t},\n\t\tstop: function (type, clearQueue, gotoEnd) {\n\t\t\tvar stopQueue = function (hooks) {\n\t\t\t\tvar stop = hooks.stop;\n\t\t\t\tdelete hooks.stop;\n\t\t\t\tstop(gotoEnd);\n\t\t\t};\n\n\t\t\tif (typeof type !== \"string\") {\n\t\t\t\tgotoEnd = clearQueue;\n\t\t\t\tclearQueue = type;\n\t\t\t\ttype = undefined;\n\t\t\t}\n\t\t\tif (clearQueue) {\n\t\t\t\tthis.queue(type || \"fx\", []);\n\t\t\t}\n\n\t\t\treturn this.each(function () {\n\t\t\t\tvar dequeue = true,\n\t\t\t\t\tindex = type != null && type + \"queueHooks\",\n\t\t\t\t\ttimers = jQuery.timers,\n\t\t\t\t\tdata = dataPriv.get(this);\n\n\t\t\t\tif (index) {\n\t\t\t\t\tif (data[index] && data[index].stop) {\n\t\t\t\t\t\tstopQueue(data[index]);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tfor (index in data) {\n\t\t\t\t\t\tif (data[index] && data[index].stop && rrun.test(index)) {\n\t\t\t\t\t\t\tstopQueue(data[index]);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tfor (index = timers.length; index--;) {\n\t\t\t\t\tif (timers[index].elem === this &&\n\t\t\t\t\t\t(type == null || timers[index].queue === type)) {\n\n\t\t\t\t\t\ttimers[index].anim.stop(gotoEnd);\n\t\t\t\t\t\tdequeue = false;\n\t\t\t\t\t\ttimers.splice(index, 1);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Start the next in the queue if the last step wasn't forced.\n\t\t\t\t// Timers currently will call their complete callbacks, which\n\t\t\t\t// will dequeue but only if they were gotoEnd.\n\t\t\t\tif (dequeue || !gotoEnd) {\n\t\t\t\t\tjQuery.dequeue(this, type);\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\t\tfinish: function (type) {\n\t\t\tif (type !== false) {\n\t\t\t\ttype = type || \"fx\";\n\t\t\t}\n\t\t\treturn this.each(function () {\n\t\t\t\tvar index,\n\t\t\t\t\tdata = dataPriv.get(this),\n\t\t\t\t\tqueue = data[type + \"queue\"],\n\t\t\t\t\thooks = data[type + \"queueHooks\"],\n\t\t\t\t\ttimers = jQuery.timers,\n\t\t\t\t\tlength = queue ? queue.length : 0;\n\n\t\t\t\t// Enable finishing flag on private data\n\t\t\t\tdata.finish = true;\n\n\t\t\t\t// Empty the queue first\n\t\t\t\tjQuery.queue(this, type, []);\n\n\t\t\t\tif (hooks && hooks.stop) {\n\t\t\t\t\thooks.stop.call(this, true);\n\t\t\t\t}\n\n\t\t\t\t// Look for any active animations, and finish them\n\t\t\t\tfor (index = timers.length; index--;) {\n\t\t\t\t\tif (timers[index].elem === this && timers[index].queue === type) {\n\t\t\t\t\t\ttimers[index].anim.stop(true);\n\t\t\t\t\t\ttimers.splice(index, 1);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Look for any animations in the old queue and finish them\n\t\t\t\tfor (index = 0; index < length; index++) {\n\t\t\t\t\tif (queue[index] && queue[index].finish) {\n\t\t\t\t\t\tqueue[index].finish.call(this);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Turn off finishing flag\n\t\t\t\tdelete data.finish;\n\t\t\t});\n\t\t}\n\t});\n\n\tjQuery.each([\"toggle\", \"show\", \"hide\"], function (_i, name) {\n\t\tvar cssFn = jQuery.fn[name];\n\t\tjQuery.fn[name] = function (speed, easing, callback) {\n\t\t\treturn speed == null || typeof speed === \"boolean\" ?\n\t\t\t\tcssFn.apply(this, arguments) :\n\t\t\t\tthis.animate(genFx(name, true), speed, easing, callback);\n\t\t};\n\t});\n\n\t// Generate shortcuts for custom animations\n\tjQuery.each({\n\t\tslideDown: genFx(\"show\"),\n\t\tslideUp: genFx(\"hide\"),\n\t\tslideToggle: genFx(\"toggle\"),\n\t\tfadeIn: { opacity: \"show\" },\n\t\tfadeOut: { opacity: \"hide\" },\n\t\tfadeToggle: { opacity: \"toggle\" }\n\t}, function (name, props) {\n\t\tjQuery.fn[name] = function (speed, easing, callback) {\n\t\t\treturn this.animate(props, speed, easing, callback);\n\t\t};\n\t});\n\n\tjQuery.timers = [];\n\tjQuery.fx.tick = function () {\n\t\tvar timer,\n\t\t\ti = 0,\n\t\t\ttimers = jQuery.timers;\n\n\t\tfxNow = Date.now();\n\n\t\tfor (; i < timers.length; i++) {\n\t\t\ttimer = timers[i];\n\n\t\t\t// Run the timer and safely remove it when done (allowing for external removal)\n\t\t\tif (!timer() && timers[i] === timer) {\n\t\t\t\ttimers.splice(i--, 1);\n\t\t\t}\n\t\t}\n\n\t\tif (!timers.length) {\n\t\t\tjQuery.fx.stop();\n\t\t}\n\t\tfxNow = undefined;\n\t};\n\n\tjQuery.fx.timer = function (timer) {\n\t\tjQuery.timers.push(timer);\n\t\tjQuery.fx.start();\n\t};\n\n\tjQuery.fx.interval = 13;\n\tjQuery.fx.start = function () {\n\t\tif (inProgress) {\n\t\t\treturn;\n\t\t}\n\n\t\tinProgress = true;\n\t\tschedule();\n\t};\n\n\tjQuery.fx.stop = function () {\n\t\tinProgress = null;\n\t};\n\n\tjQuery.fx.speeds = {\n\t\tslow: 600,\n\t\tfast: 200,\n\n\t\t// Default speed\n\t\t_default: 400\n\t};\n\n\n\t// Based off of the plugin by Clint Helfers, with permission.\n\tjQuery.fn.delay = function (time, type) {\n\t\ttime = jQuery.fx ? jQuery.fx.speeds[time] || time : time;\n\t\ttype = type || \"fx\";\n\n\t\treturn this.queue(type, function (next, hooks) {\n\t\t\tvar timeout = window.setTimeout(next, time);\n\t\t\thooks.stop = function () {\n\t\t\t\twindow.clearTimeout(timeout);\n\t\t\t};\n\t\t});\n\t};\n\n\n\t(function () {\n\t\tvar input = document.createElement(\"input\"),\n\t\t\tselect = document.createElement(\"select\"),\n\t\t\topt = select.appendChild(document.createElement(\"option\"));\n\n\t\tinput.type = \"checkbox\";\n\n\t\t// Support: Android <=4.3 only\n\t\t// Default value for a checkbox should be \"on\"\n\t\tsupport.checkOn = input.value !== \"\";\n\n\t\t// Support: IE <=11 only\n\t\t// Must access selectedIndex to make default options select\n\t\tsupport.optSelected = opt.selected;\n\n\t\t// Support: IE <=11 only\n\t\t// An input loses its value after becoming a radio\n\t\tinput = document.createElement(\"input\");\n\t\tinput.value = \"t\";\n\t\tinput.type = \"radio\";\n\t\tsupport.radioValue = input.value === \"t\";\n\t})();\n\n\n\tvar boolHook,\n\t\tattrHandle = jQuery.expr.attrHandle;\n\n\tjQuery.fn.extend({\n\t\tattr: function (name, value) {\n\t\t\treturn access(this, jQuery.attr, name, value, arguments.length > 1);\n\t\t},\n\n\t\tremoveAttr: function (name) {\n\t\t\treturn this.each(function () {\n\t\t\t\tjQuery.removeAttr(this, name);\n\t\t\t});\n\t\t}\n\t});\n\n\tjQuery.extend({\n\t\tattr: function (elem, name, value) {\n\t\t\tvar ret, hooks,\n\t\t\t\tnType = elem.nodeType;\n\n\t\t\t// Don't get/set attributes on text, comment and attribute nodes\n\t\t\tif (nType === 3 || nType === 8 || nType === 2) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Fallback to prop when attributes are not supported\n\t\t\tif (typeof elem.getAttribute === \"undefined\") {\n\t\t\t\treturn jQuery.prop(elem, name, value);\n\t\t\t}\n\n\t\t\t// Attribute hooks are determined by the lowercase version\n\t\t\t// Grab necessary hook if one is defined\n\t\t\tif (nType !== 1 || !jQuery.isXMLDoc(elem)) {\n\t\t\t\thooks = jQuery.attrHooks[name.toLowerCase()] ||\n\t\t\t\t\t(jQuery.expr.match.bool.test(name) ? boolHook : undefined);\n\t\t\t}\n\n\t\t\tif (value !== undefined) {\n\t\t\t\tif (value === null) {\n\t\t\t\t\tjQuery.removeAttr(elem, name);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (hooks && \"set\" in hooks &&\n\t\t\t\t\t(ret = hooks.set(elem, value, name)) !== undefined) {\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\n\t\t\t\telem.setAttribute(name, value + \"\");\n\t\t\t\treturn value;\n\t\t\t}\n\n\t\t\tif (hooks && \"get\" in hooks && (ret = hooks.get(elem, name)) !== null) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\tret = jQuery.find.attr(elem, name);\n\n\t\t\t// Non-existent attributes return null, we normalize to undefined\n\t\t\treturn ret == null ? undefined : ret;\n\t\t},\n\n\t\tattrHooks: {\n\t\t\ttype: {\n\t\t\t\tset: function (elem, value) {\n\t\t\t\t\tif (!support.radioValue && value === \"radio\" &&\n\t\t\t\t\t\tnodeName(elem, \"input\")) {\n\t\t\t\t\t\tvar val = elem.value;\n\t\t\t\t\t\telem.setAttribute(\"type\", value);\n\t\t\t\t\t\tif (val) {\n\t\t\t\t\t\t\telem.value = val;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn value;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tremoveAttr: function (elem, value) {\n\t\t\tvar name,\n\t\t\t\ti = 0,\n\n\t\t\t\t// Attribute names can contain non-HTML whitespace characters\n\t\t\t\t// https://html.spec.whatwg.org/multipage/syntax.html#attributes-2\n\t\t\t\tattrNames = value && value.match(rnothtmlwhite);\n\n\t\t\tif (attrNames && elem.nodeType === 1) {\n\t\t\t\twhile ((name = attrNames[i++])) {\n\t\t\t\t\telem.removeAttribute(name);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\n\t// Hooks for boolean attributes\n\tboolHook = {\n\t\tset: function (elem, value, name) {\n\t\t\tif (value === false) {\n\n\t\t\t\t// Remove boolean attributes when set to false\n\t\t\t\tjQuery.removeAttr(elem, name);\n\t\t\t} else {\n\t\t\t\telem.setAttribute(name, name);\n\t\t\t}\n\t\t\treturn name;\n\t\t}\n\t};\n\n\tjQuery.each(jQuery.expr.match.bool.source.match(/\\w+/g), function (_i, name) {\n\t\tvar getter = attrHandle[name] || jQuery.find.attr;\n\n\t\tattrHandle[name] = function (elem, name, isXML) {\n\t\t\tvar ret, handle,\n\t\t\t\tlowercaseName = name.toLowerCase();\n\n\t\t\tif (!isXML) {\n\n\t\t\t\t// Avoid an infinite loop by temporarily removing this function from the getter\n\t\t\t\thandle = attrHandle[lowercaseName];\n\t\t\t\tattrHandle[lowercaseName] = ret;\n\t\t\t\tret = getter(elem, name, isXML) != null ?\n\t\t\t\t\tlowercaseName :\n\t\t\t\t\tnull;\n\t\t\t\tattrHandle[lowercaseName] = handle;\n\t\t\t}\n\t\t\treturn ret;\n\t\t};\n\t});\n\n\n\n\n\tvar rfocusable = /^(?:input|select|textarea|button)$/i,\n\t\trclickable = /^(?:a|area)$/i;\n\n\tjQuery.fn.extend({\n\t\tprop: function (name, value) {\n\t\t\treturn access(this, jQuery.prop, name, value, arguments.length > 1);\n\t\t},\n\n\t\tremoveProp: function (name) {\n\t\t\treturn this.each(function () {\n\t\t\t\tdelete this[jQuery.propFix[name] || name];\n\t\t\t});\n\t\t}\n\t});\n\n\tjQuery.extend({\n\t\tprop: function (elem, name, value) {\n\t\t\tvar ret, hooks,\n\t\t\t\tnType = elem.nodeType;\n\n\t\t\t// Don't get/set properties on text, comment and attribute nodes\n\t\t\tif (nType === 3 || nType === 8 || nType === 2) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (nType !== 1 || !jQuery.isXMLDoc(elem)) {\n\n\t\t\t\t// Fix name and attach hooks\n\t\t\t\tname = jQuery.propFix[name] || name;\n\t\t\t\thooks = jQuery.propHooks[name];\n\t\t\t}\n\n\t\t\tif (value !== undefined) {\n\t\t\t\tif (hooks && \"set\" in hooks &&\n\t\t\t\t\t(ret = hooks.set(elem, value, name)) !== undefined) {\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\n\t\t\t\treturn (elem[name] = value);\n\t\t\t}\n\n\t\t\tif (hooks && \"get\" in hooks && (ret = hooks.get(elem, name)) !== null) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\treturn elem[name];\n\t\t},\n\n\t\tpropHooks: {\n\t\t\ttabIndex: {\n\t\t\t\tget: function (elem) {\n\n\t\t\t\t\t// Support: IE <=9 - 11 only\n\t\t\t\t\t// elem.tabIndex doesn't always return the\n\t\t\t\t\t// correct value when it hasn't been explicitly set\n\t\t\t\t\t// Use proper attribute retrieval (trac-12072)\n\t\t\t\t\tvar tabindex = jQuery.find.attr(elem, \"tabindex\");\n\n\t\t\t\t\tif (tabindex) {\n\t\t\t\t\t\treturn parseInt(tabindex, 10);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (\n\t\t\t\t\t\trfocusable.test(elem.nodeName) ||\n\t\t\t\t\t\trclickable.test(elem.nodeName) &&\n\t\t\t\t\t\telem.href\n\t\t\t\t\t) {\n\t\t\t\t\t\treturn 0;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn -1;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tpropFix: {\n\t\t\t\"for\": \"htmlFor\",\n\t\t\t\"class\": \"className\"\n\t\t}\n\t});\n\n\t// Support: IE <=11 only\n\t// Accessing the selectedIndex property\n\t// forces the browser to respect setting selected\n\t// on the option\n\t// The getter ensures a default option is selected\n\t// when in an optgroup\n\t// eslint rule \"no-unused-expressions\" is disabled for this code\n\t// since it considers such accessions noop\n\tif (!support.optSelected) {\n\t\tjQuery.propHooks.selected = {\n\t\t\tget: function (elem) {\n\n\t\t\t\t/* eslint no-unused-expressions: \"off\" */\n\n\t\t\t\tvar parent = elem.parentNode;\n\t\t\t\tif (parent && parent.parentNode) {\n\t\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t\t}\n\t\t\t\treturn null;\n\t\t\t},\n\t\t\tset: function (elem) {\n\n\t\t\t\t/* eslint no-unused-expressions: \"off\" */\n\n\t\t\t\tvar parent = elem.parentNode;\n\t\t\t\tif (parent) {\n\t\t\t\t\tparent.selectedIndex;\n\n\t\t\t\t\tif (parent.parentNode) {\n\t\t\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n\n\tjQuery.each([\n\t\t\"tabIndex\",\n\t\t\"readOnly\",\n\t\t\"maxLength\",\n\t\t\"cellSpacing\",\n\t\t\"cellPadding\",\n\t\t\"rowSpan\",\n\t\t\"colSpan\",\n\t\t\"useMap\",\n\t\t\"frameBorder\",\n\t\t\"contentEditable\"\n\t], function () {\n\t\tjQuery.propFix[this.toLowerCase()] = this;\n\t});\n\n\n\n\n\t// Strip and collapse whitespace according to HTML spec\n\t// https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace\n\tfunction stripAndCollapse(value) {\n\t\tvar tokens = value.match(rnothtmlwhite) || [];\n\t\treturn tokens.join(\" \");\n\t}\n\n\n\tfunction getClass(elem) {\n\t\treturn elem.getAttribute && elem.getAttribute(\"class\") || \"\";\n\t}\n\n\tfunction classesToArray(value) {\n\t\tif (Array.isArray(value)) {\n\t\t\treturn value;\n\t\t}\n\t\tif (typeof value === \"string\") {\n\t\t\treturn value.match(rnothtmlwhite) || [];\n\t\t}\n\t\treturn [];\n\t}\n\n\tjQuery.fn.extend({\n\t\taddClass: function (value) {\n\t\t\tvar classNames, cur, curValue, className, i, finalValue;\n\n\t\t\tif (isFunction(value)) {\n\t\t\t\treturn this.each(function (j) {\n\t\t\t\t\tjQuery(this).addClass(value.call(this, j, getClass(this)));\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tclassNames = classesToArray(value);\n\n\t\t\tif (classNames.length) {\n\t\t\t\treturn this.each(function () {\n\t\t\t\t\tcurValue = getClass(this);\n\t\t\t\t\tcur = this.nodeType === 1 && (\" \" + stripAndCollapse(curValue) + \" \");\n\n\t\t\t\t\tif (cur) {\n\t\t\t\t\t\tfor (i = 0; i < classNames.length; i++) {\n\t\t\t\t\t\t\tclassName = classNames[i];\n\t\t\t\t\t\t\tif (cur.indexOf(\" \" + className + \" \") < 0) {\n\t\t\t\t\t\t\t\tcur += className + \" \";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\t\tfinalValue = stripAndCollapse(cur);\n\t\t\t\t\t\tif (curValue !== finalValue) {\n\t\t\t\t\t\t\tthis.setAttribute(\"class\", finalValue);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn this;\n\t\t},\n\n\t\tremoveClass: function (value) {\n\t\t\tvar classNames, cur, curValue, className, i, finalValue;\n\n\t\t\tif (isFunction(value)) {\n\t\t\t\treturn this.each(function (j) {\n\t\t\t\t\tjQuery(this).removeClass(value.call(this, j, getClass(this)));\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (!arguments.length) {\n\t\t\t\treturn this.attr(\"class\", \"\");\n\t\t\t}\n\n\t\t\tclassNames = classesToArray(value);\n\n\t\t\tif (classNames.length) {\n\t\t\t\treturn this.each(function () {\n\t\t\t\t\tcurValue = getClass(this);\n\n\t\t\t\t\t// This expression is here for better compressibility (see addClass)\n\t\t\t\t\tcur = this.nodeType === 1 && (\" \" + stripAndCollapse(curValue) + \" \");\n\n\t\t\t\t\tif (cur) {\n\t\t\t\t\t\tfor (i = 0; i < classNames.length; i++) {\n\t\t\t\t\t\t\tclassName = classNames[i];\n\n\t\t\t\t\t\t\t// Remove *all* instances\n\t\t\t\t\t\t\twhile (cur.indexOf(\" \" + className + \" \") > -1) {\n\t\t\t\t\t\t\t\tcur = cur.replace(\" \" + className + \" \", \" \");\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\t\tfinalValue = stripAndCollapse(cur);\n\t\t\t\t\t\tif (curValue !== finalValue) {\n\t\t\t\t\t\t\tthis.setAttribute(\"class\", finalValue);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn this;\n\t\t},\n\n\t\ttoggleClass: function (value, stateVal) {\n\t\t\tvar classNames, className, i, self,\n\t\t\t\ttype = typeof value,\n\t\t\t\tisValidValue = type === \"string\" || Array.isArray(value);\n\n\t\t\tif (isFunction(value)) {\n\t\t\t\treturn this.each(function (i) {\n\t\t\t\t\tjQuery(this).toggleClass(\n\t\t\t\t\t\tvalue.call(this, i, getClass(this), stateVal),\n\t\t\t\t\t\tstateVal\n\t\t\t\t\t);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (typeof stateVal === \"boolean\" && isValidValue) {\n\t\t\t\treturn stateVal ? this.addClass(value) : this.removeClass(value);\n\t\t\t}\n\n\t\t\tclassNames = classesToArray(value);\n\n\t\t\treturn this.each(function () {\n\t\t\t\tif (isValidValue) {\n\n\t\t\t\t\t// Toggle individual class names\n\t\t\t\t\tself = jQuery(this);\n\n\t\t\t\t\tfor (i = 0; i < classNames.length; i++) {\n\t\t\t\t\t\tclassName = classNames[i];\n\n\t\t\t\t\t\t// Check each className given, space separated list\n\t\t\t\t\t\tif (self.hasClass(className)) {\n\t\t\t\t\t\t\tself.removeClass(className);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tself.addClass(className);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Toggle whole class name\n\t\t\t\t} else if (value === undefined || type === \"boolean\") {\n\t\t\t\t\tclassName = getClass(this);\n\t\t\t\t\tif (className) {\n\n\t\t\t\t\t\t// Store className if set\n\t\t\t\t\t\tdataPriv.set(this, \"__className__\", className);\n\t\t\t\t\t}\n\n\t\t\t\t\t// If the element has a class name or if we're passed `false`,\n\t\t\t\t\t// then remove the whole classname (if there was one, the above saved it).\n\t\t\t\t\t// Otherwise bring back whatever was previously saved (if anything),\n\t\t\t\t\t// falling back to the empty string if nothing was stored.\n\t\t\t\t\tif (this.setAttribute) {\n\t\t\t\t\t\tthis.setAttribute(\"class\",\n\t\t\t\t\t\t\tclassName || value === false ?\n\t\t\t\t\t\t\t\t\"\" :\n\t\t\t\t\t\t\t\tdataPriv.get(this, \"__className__\") || \"\"\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\thasClass: function (selector) {\n\t\t\tvar className, elem,\n\t\t\t\ti = 0;\n\n\t\t\tclassName = \" \" + selector + \" \";\n\t\t\twhile ((elem = this[i++])) {\n\t\t\t\tif (elem.nodeType === 1 &&\n\t\t\t\t\t(\" \" + stripAndCollapse(getClass(elem)) + \" \").indexOf(className) > -1) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn false;\n\t\t}\n\t});\n\n\n\n\n\tvar rreturn = /\\r/g;\n\n\tjQuery.fn.extend({\n\t\tval: function (value) {\n\t\t\tvar hooks, ret, valueIsFunction,\n\t\t\t\telem = this[0];\n\n\t\t\tif (!arguments.length) {\n\t\t\t\tif (elem) {\n\t\t\t\t\thooks = jQuery.valHooks[elem.type] ||\n\t\t\t\t\t\tjQuery.valHooks[elem.nodeName.toLowerCase()];\n\n\t\t\t\t\tif (hooks &&\n\t\t\t\t\t\t\"get\" in hooks &&\n\t\t\t\t\t\t(ret = hooks.get(elem, \"value\")) !== undefined\n\t\t\t\t\t) {\n\t\t\t\t\t\treturn ret;\n\t\t\t\t\t}\n\n\t\t\t\t\tret = elem.value;\n\n\t\t\t\t\t// Handle most common string cases\n\t\t\t\t\tif (typeof ret === \"string\") {\n\t\t\t\t\t\treturn ret.replace(rreturn, \"\");\n\t\t\t\t\t}\n\n\t\t\t\t\t// Handle cases where value is null/undef or number\n\t\t\t\t\treturn ret == null ? \"\" : ret;\n\t\t\t\t}\n\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvalueIsFunction = isFunction(value);\n\n\t\t\treturn this.each(function (i) {\n\t\t\t\tvar val;\n\n\t\t\t\tif (this.nodeType !== 1) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (valueIsFunction) {\n\t\t\t\t\tval = value.call(this, i, jQuery(this).val());\n\t\t\t\t} else {\n\t\t\t\t\tval = value;\n\t\t\t\t}\n\n\t\t\t\t// Treat null/undefined as \"\"; convert numbers to string\n\t\t\t\tif (val == null) {\n\t\t\t\t\tval = \"\";\n\n\t\t\t\t} else if (typeof val === \"number\") {\n\t\t\t\t\tval += \"\";\n\n\t\t\t\t} else if (Array.isArray(val)) {\n\t\t\t\t\tval = jQuery.map(val, function (value) {\n\t\t\t\t\t\treturn value == null ? \"\" : value + \"\";\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\thooks = jQuery.valHooks[this.type] || jQuery.valHooks[this.nodeName.toLowerCase()];\n\n\t\t\t\t// If set returns undefined, fall back to normal setting\n\t\t\t\tif (!hooks || !(\"set\" in hooks) || hooks.set(this, val, \"value\") === undefined) {\n\t\t\t\t\tthis.value = val;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t});\n\n\tjQuery.extend({\n\t\tvalHooks: {\n\t\t\toption: {\n\t\t\t\tget: function (elem) {\n\n\t\t\t\t\tvar val = jQuery.find.attr(elem, \"value\");\n\t\t\t\t\treturn val != null ?\n\t\t\t\t\t\tval :\n\n\t\t\t\t\t\t// Support: IE <=10 - 11 only\n\t\t\t\t\t\t// option.text throws exceptions (trac-14686, trac-14858)\n\t\t\t\t\t\t// Strip and collapse whitespace\n\t\t\t\t\t\t// https://html.spec.whatwg.org/#strip-and-collapse-whitespace\n\t\t\t\t\t\tstripAndCollapse(jQuery.text(elem));\n\t\t\t\t}\n\t\t\t},\n\t\t\tselect: {\n\t\t\t\tget: function (elem) {\n\t\t\t\t\tvar value, option, i,\n\t\t\t\t\t\toptions = elem.options,\n\t\t\t\t\t\tindex = elem.selectedIndex,\n\t\t\t\t\t\tone = elem.type === \"select-one\",\n\t\t\t\t\t\tvalues = one ? null : [],\n\t\t\t\t\t\tmax = one ? index + 1 : options.length;\n\n\t\t\t\t\tif (index < 0) {\n\t\t\t\t\t\ti = max;\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\ti = one ? index : 0;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Loop through all the selected options\n\t\t\t\t\tfor (; i < max; i++) {\n\t\t\t\t\t\toption = options[i];\n\n\t\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t\t// IE8-9 doesn't update selected after form reset (trac-2551)\n\t\t\t\t\t\tif ((option.selected || i === index) &&\n\n\t\t\t\t\t\t\t// Don't return options that are disabled or in a disabled optgroup\n\t\t\t\t\t\t\t!option.disabled &&\n\t\t\t\t\t\t\t(!option.parentNode.disabled ||\n\t\t\t\t\t\t\t\t!nodeName(option.parentNode, \"optgroup\"))) {\n\n\t\t\t\t\t\t\t// Get the specific value for the option\n\t\t\t\t\t\t\tvalue = jQuery(option).val();\n\n\t\t\t\t\t\t\t// We don't need an array for one selects\n\t\t\t\t\t\t\tif (one) {\n\t\t\t\t\t\t\t\treturn value;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Multi-Selects return an array\n\t\t\t\t\t\t\tvalues.push(value);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn values;\n\t\t\t\t},\n\n\t\t\t\tset: function (elem, value) {\n\t\t\t\t\tvar optionSet, option,\n\t\t\t\t\t\toptions = elem.options,\n\t\t\t\t\t\tvalues = jQuery.makeArray(value),\n\t\t\t\t\t\ti = options.length;\n\n\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\toption = options[i];\n\n\t\t\t\t\t\t/* eslint-disable no-cond-assign */\n\n\t\t\t\t\t\tif (option.selected =\n\t\t\t\t\t\t\tjQuery.inArray(jQuery.valHooks.option.get(option), values) > -1\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\toptionSet = true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t/* eslint-enable no-cond-assign */\n\t\t\t\t\t}\n\n\t\t\t\t\t// Force browsers to behave consistently when non-matching value is set\n\t\t\t\t\tif (!optionSet) {\n\t\t\t\t\t\telem.selectedIndex = -1;\n\t\t\t\t\t}\n\t\t\t\t\treturn values;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\n\t// Radios and checkboxes getter/setter\n\tjQuery.each([\"radio\", \"checkbox\"], function () {\n\t\tjQuery.valHooks[this] = {\n\t\t\tset: function (elem, value) {\n\t\t\t\tif (Array.isArray(value)) {\n\t\t\t\t\treturn (elem.checked = jQuery.inArray(jQuery(elem).val(), value) > -1);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\tif (!support.checkOn) {\n\t\t\tjQuery.valHooks[this].get = function (elem) {\n\t\t\t\treturn elem.getAttribute(\"value\") === null ? \"on\" : elem.value;\n\t\t\t};\n\t\t}\n\t});\n\n\n\n\n\t// Return jQuery for attributes-only inclusion\n\tvar location = window.location;\n\n\tvar nonce = { guid: Date.now() };\n\n\tvar rquery = (/\\?/);\n\n\n\n\t// Cross-browser xml parsing\n\tjQuery.parseXML = function (data) {\n\t\tvar xml, parserErrorElem;\n\t\tif (!data || typeof data !== \"string\") {\n\t\t\treturn null;\n\t\t}\n\n\t\t// Support: IE 9 - 11 only\n\t\t// IE throws on parseFromString with invalid input.\n\t\ttry {\n\t\t\txml = (new window.DOMParser()).parseFromString(data, \"text/xml\");\n\t\t} catch (e) { }\n\n\t\tparserErrorElem = xml && xml.getElementsByTagName(\"parsererror\")[0];\n\t\tif (!xml || parserErrorElem) {\n\t\t\tjQuery.error(\"Invalid XML: \" + (\n\t\t\t\tparserErrorElem ?\n\t\t\t\t\tjQuery.map(parserErrorElem.childNodes, function (el) {\n\t\t\t\t\t\treturn el.textContent;\n\t\t\t\t\t}).join(\"\\n\") :\n\t\t\t\t\tdata\n\t\t\t));\n\t\t}\n\t\treturn xml;\n\t};\n\n\n\tvar rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,\n\t\tstopPropagationCallback = function (e) {\n\t\t\te.stopPropagation();\n\t\t};\n\n\tjQuery.extend(jQuery.event, {\n\n\t\ttrigger: function (event, data, elem, onlyHandlers) {\n\n\t\t\tvar i, cur, tmp, bubbleType, ontype, handle, special, lastElement,\n\t\t\t\teventPath = [elem || document],\n\t\t\t\ttype = hasOwn.call(event, \"type\") ? event.type : event,\n\t\t\t\tnamespaces = hasOwn.call(event, \"namespace\") ? event.namespace.split(\".\") : [];\n\n\t\t\tcur = lastElement = tmp = elem = elem || document;\n\n\t\t\t// Don't do events on text and comment nodes\n\t\t\tif (elem.nodeType === 3 || elem.nodeType === 8) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// focus/blur morphs to focusin/out; ensure we're not firing them right now\n\t\t\tif (rfocusMorph.test(type + jQuery.event.triggered)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (type.indexOf(\".\") > -1) {\n\n\t\t\t\t// Namespaced trigger; create a regexp to match event type in handle()\n\t\t\t\tnamespaces = type.split(\".\");\n\t\t\t\ttype = namespaces.shift();\n\t\t\t\tnamespaces.sort();\n\t\t\t}\n\t\t\tontype = type.indexOf(\":\") < 0 && \"on\" + type;\n\n\t\t\t// Caller can pass in a jQuery.Event object, Object, or just an event type string\n\t\t\tevent = event[jQuery.expando] ?\n\t\t\t\tevent :\n\t\t\t\tnew jQuery.Event(type, typeof event === \"object\" && event);\n\n\t\t\t// Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)\n\t\t\tevent.isTrigger = onlyHandlers ? 2 : 3;\n\t\t\tevent.namespace = namespaces.join(\".\");\n\t\t\tevent.rnamespace = event.namespace ?\n\t\t\t\tnew RegExp(\"(^|\\\\.)\" + namespaces.join(\"\\\\.(?:.*\\\\.|)\") + \"(\\\\.|$)\") :\n\t\t\t\tnull;\n\n\t\t\t// Clean up the event in case it is being reused\n\t\t\tevent.result = undefined;\n\t\t\tif (!event.target) {\n\t\t\t\tevent.target = elem;\n\t\t\t}\n\n\t\t\t// Clone any incoming data and prepend the event, creating the handler arg list\n\t\t\tdata = data == null ?\n\t\t\t\t[event] :\n\t\t\t\tjQuery.makeArray(data, [event]);\n\n\t\t\t// Allow special events to draw outside the lines\n\t\t\tspecial = jQuery.event.special[type] || {};\n\t\t\tif (!onlyHandlers && special.trigger && special.trigger.apply(elem, data) === false) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Determine event propagation path in advance, per W3C events spec (trac-9951)\n\t\t\t// Bubble up to document, then to window; watch for a global ownerDocument var (trac-9724)\n\t\t\tif (!onlyHandlers && !special.noBubble && !isWindow(elem)) {\n\n\t\t\t\tbubbleType = special.delegateType || type;\n\t\t\t\tif (!rfocusMorph.test(bubbleType + type)) {\n\t\t\t\t\tcur = cur.parentNode;\n\t\t\t\t}\n\t\t\t\tfor (; cur; cur = cur.parentNode) {\n\t\t\t\t\teventPath.push(cur);\n\t\t\t\t\ttmp = cur;\n\t\t\t\t}\n\n\t\t\t\t// Only add window if we got to document (e.g., not plain obj or detached DOM)\n\t\t\t\tif (tmp === (elem.ownerDocument || document)) {\n\t\t\t\t\teventPath.push(tmp.defaultView || tmp.parentWindow || window);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Fire handlers on the event path\n\t\t\ti = 0;\n\t\t\twhile ((cur = eventPath[i++]) && !event.isPropagationStopped()) {\n\t\t\t\tlastElement = cur;\n\t\t\t\tevent.type = i > 1 ?\n\t\t\t\t\tbubbleType :\n\t\t\t\t\tspecial.bindType || type;\n\n\t\t\t\t// jQuery handler\n\t\t\t\thandle = (dataPriv.get(cur, \"events\") || Object.create(null))[event.type] &&\n\t\t\t\t\tdataPriv.get(cur, \"handle\");\n\t\t\t\tif (handle) {\n\t\t\t\t\thandle.apply(cur, data);\n\t\t\t\t}\n\n\t\t\t\t// Native handler\n\t\t\t\thandle = ontype && cur[ontype];\n\t\t\t\tif (handle && handle.apply && acceptData(cur)) {\n\t\t\t\t\tevent.result = handle.apply(cur, data);\n\t\t\t\t\tif (event.result === false) {\n\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tevent.type = type;\n\n\t\t\t// If nobody prevented the default action, do it now\n\t\t\tif (!onlyHandlers && !event.isDefaultPrevented()) {\n\n\t\t\t\tif ((!special._default ||\n\t\t\t\t\tspecial._default.apply(eventPath.pop(), data) === false) &&\n\t\t\t\t\tacceptData(elem)) {\n\n\t\t\t\t\t// Call a native DOM method on the target with the same name as the event.\n\t\t\t\t\t// Don't do default actions on window, that's where global variables be (trac-6170)\n\t\t\t\t\tif (ontype && isFunction(elem[type]) && !isWindow(elem)) {\n\n\t\t\t\t\t\t// Don't re-trigger an onFOO event when we call its FOO() method\n\t\t\t\t\t\ttmp = elem[ontype];\n\n\t\t\t\t\t\tif (tmp) {\n\t\t\t\t\t\t\telem[ontype] = null;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Prevent re-triggering of the same event, since we already bubbled it above\n\t\t\t\t\t\tjQuery.event.triggered = type;\n\n\t\t\t\t\t\tif (event.isPropagationStopped()) {\n\t\t\t\t\t\t\tlastElement.addEventListener(type, stopPropagationCallback);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\telem[type]();\n\n\t\t\t\t\t\tif (event.isPropagationStopped()) {\n\t\t\t\t\t\t\tlastElement.removeEventListener(type, stopPropagationCallback);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tjQuery.event.triggered = undefined;\n\n\t\t\t\t\t\tif (tmp) {\n\t\t\t\t\t\t\telem[ontype] = tmp;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn event.result;\n\t\t},\n\n\t\t// Piggyback on a donor event to simulate a different one\n\t\t// Used only for `focus(in | out)` events\n\t\tsimulate: function (type, elem, event) {\n\t\t\tvar e = jQuery.extend(\n\t\t\t\tnew jQuery.Event(),\n\t\t\t\tevent,\n\t\t\t\t{\n\t\t\t\t\ttype: type,\n\t\t\t\t\tisSimulated: true\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tjQuery.event.trigger(e, null, elem);\n\t\t}\n\n\t});\n\n\tjQuery.fn.extend({\n\n\t\ttrigger: function (type, data) {\n\t\t\treturn this.each(function () {\n\t\t\t\tjQuery.event.trigger(type, data, this);\n\t\t\t});\n\t\t},\n\t\ttriggerHandler: function (type, data) {\n\t\t\tvar elem = this[0];\n\t\t\tif (elem) {\n\t\t\t\treturn jQuery.event.trigger(type, data, elem, true);\n\t\t\t}\n\t\t}\n\t});\n\n\n\tvar\n\t\trbracket = /\\[\\]$/,\n\t\trCRLF = /\\r?\\n/g,\n\t\trsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,\n\t\trsubmittable = /^(?:input|select|textarea|keygen)/i;\n\n\tfunction buildParams(prefix, obj, traditional, add) {\n\t\tvar name;\n\n\t\tif (Array.isArray(obj)) {\n\n\t\t\t// Serialize array item.\n\t\t\tjQuery.each(obj, function (i, v) {\n\t\t\t\tif (traditional || rbracket.test(prefix)) {\n\n\t\t\t\t\t// Treat each array item as a scalar.\n\t\t\t\t\tadd(prefix, v);\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// Item is non-scalar (array or object), encode its numeric index.\n\t\t\t\t\tbuildParams(\n\t\t\t\t\t\tprefix + \"[\" + (typeof v === \"object\" && v != null ? i : \"\") + \"]\",\n\t\t\t\t\t\tv,\n\t\t\t\t\t\ttraditional,\n\t\t\t\t\t\tadd\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t});\n\n\t\t} else if (!traditional && toType(obj) === \"object\") {\n\n\t\t\t// Serialize object item.\n\t\t\tfor (name in obj) {\n\t\t\t\tbuildParams(prefix + \"[\" + name + \"]\", obj[name], traditional, add);\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// Serialize scalar item.\n\t\t\tadd(prefix, obj);\n\t\t}\n\t}\n\n\t// Serialize an array of form elements or a set of\n\t// key/values into a query string\n\tjQuery.param = function (a, traditional) {\n\t\tvar prefix,\n\t\t\ts = [],\n\t\t\tadd = function (key, valueOrFunction) {\n\n\t\t\t\t// If value is a function, invoke it and use its return value\n\t\t\t\tvar value = isFunction(valueOrFunction) ?\n\t\t\t\t\tvalueOrFunction() :\n\t\t\t\t\tvalueOrFunction;\n\n\t\t\t\ts[s.length] = encodeURIComponent(key) + \"=\" +\n\t\t\t\t\tencodeURIComponent(value == null ? \"\" : value);\n\t\t\t};\n\n\t\tif (a == null) {\n\t\t\treturn \"\";\n\t\t}\n\n\t\t// If an array was passed in, assume that it is an array of form elements.\n\t\tif (Array.isArray(a) || (a.jquery && !jQuery.isPlainObject(a))) {\n\n\t\t\t// Serialize the form elements\n\t\t\tjQuery.each(a, function () {\n\t\t\t\tadd(this.name, this.value);\n\t\t\t});\n\n\t\t} else {\n\n\t\t\t// If traditional, encode the \"old\" way (the way 1.3.2 or older\n\t\t\t// did it), otherwise encode params recursively.\n\t\t\tfor (prefix in a) {\n\t\t\t\tbuildParams(prefix, a[prefix], traditional, add);\n\t\t\t}\n\t\t}\n\n\t\t// Return the resulting serialization\n\t\treturn s.join(\"&\");\n\t};\n\n\tjQuery.fn.extend({\n\t\tserialize: function () {\n\t\t\treturn jQuery.param(this.serializeArray());\n\t\t},\n\t\tserializeArray: function () {\n\t\t\treturn this.map(function () {\n\n\t\t\t\t// Can add propHook for \"elements\" to filter or add form elements\n\t\t\t\tvar elements = jQuery.prop(this, \"elements\");\n\t\t\t\treturn elements ? jQuery.makeArray(elements) : this;\n\t\t\t}).filter(function () {\n\t\t\t\tvar type = this.type;\n\n\t\t\t\t// Use .is( \":disabled\" ) so that fieldset[disabled] works\n\t\t\t\treturn this.name && !jQuery(this).is(\":disabled\") &&\n\t\t\t\t\trsubmittable.test(this.nodeName) && !rsubmitterTypes.test(type) &&\n\t\t\t\t\t(this.checked || !rcheckableType.test(type));\n\t\t\t}).map(function (_i, elem) {\n\t\t\t\tvar val = jQuery(this).val();\n\n\t\t\t\tif (val == null) {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\n\t\t\t\tif (Array.isArray(val)) {\n\t\t\t\t\treturn jQuery.map(val, function (val) {\n\t\t\t\t\t\treturn { name: elem.name, value: val.replace(rCRLF, \"\\r\\n\") };\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\treturn { name: elem.name, value: val.replace(rCRLF, \"\\r\\n\") };\n\t\t\t}).get();\n\t\t}\n\t});\n\n\n\tvar\n\t\tr20 = /%20/g,\n\t\trhash = /#.*$/,\n\t\trantiCache = /([?&])_=[^&]*/,\n\t\trheaders = /^(.*?):[ \\t]*([^\\r\\n]*)$/mg,\n\n\t\t// trac-7653, trac-8125, trac-8152: local protocol detection\n\t\trlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,\n\t\trnoContent = /^(?:GET|HEAD)$/,\n\t\trprotocol = /^\\/\\//,\n\n\t\t/* Prefilters\n\t\t * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)\n\t\t * 2) These are called:\n\t\t *    - BEFORE asking for a transport\n\t\t *    - AFTER param serialization (s.data is a string if s.processData is true)\n\t\t * 3) key is the dataType\n\t\t * 4) the catchall symbol \"*\" can be used\n\t\t * 5) execution will start with transport dataType and THEN continue down to \"*\" if needed\n\t\t */\n\t\tprefilters = {},\n\n\t\t/* Transports bindings\n\t\t * 1) key is the dataType\n\t\t * 2) the catchall symbol \"*\" can be used\n\t\t * 3) selection will start with transport dataType and THEN go to \"*\" if needed\n\t\t */\n\t\ttransports = {},\n\n\t\t// Avoid comment-prolog char sequence (trac-10098); must appease lint and evade compression\n\t\tallTypes = \"*/\".concat(\"*\"),\n\n\t\t// Anchor tag for parsing the document origin\n\t\toriginAnchor = document.createElement(\"a\");\n\n\toriginAnchor.href = location.href;\n\n\t// Base \"constructor\" for jQuery.ajaxPrefilter and jQuery.ajaxTransport\n\tfunction addToPrefiltersOrTransports(structure) {\n\n\t\t// dataTypeExpression is optional and defaults to \"*\"\n\t\treturn function (dataTypeExpression, func) {\n\n\t\t\tif (typeof dataTypeExpression !== \"string\") {\n\t\t\t\tfunc = dataTypeExpression;\n\t\t\t\tdataTypeExpression = \"*\";\n\t\t\t}\n\n\t\t\tvar dataType,\n\t\t\t\ti = 0,\n\t\t\t\tdataTypes = dataTypeExpression.toLowerCase().match(rnothtmlwhite) || [];\n\n\t\t\tif (isFunction(func)) {\n\n\t\t\t\t// For each dataType in the dataTypeExpression\n\t\t\t\twhile ((dataType = dataTypes[i++])) {\n\n\t\t\t\t\t// Prepend if requested\n\t\t\t\t\tif (dataType[0] === \"+\") {\n\t\t\t\t\t\tdataType = dataType.slice(1) || \"*\";\n\t\t\t\t\t\t(structure[dataType] = structure[dataType] || []).unshift(func);\n\n\t\t\t\t\t\t// Otherwise append\n\t\t\t\t\t} else {\n\t\t\t\t\t\t(structure[dataType] = structure[dataType] || []).push(func);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n\n\t// Base inspection function for prefilters and transports\n\tfunction inspectPrefiltersOrTransports(structure, options, originalOptions, jqXHR) {\n\n\t\tvar inspected = {},\n\t\t\tseekingTransport = (structure === transports);\n\n\t\tfunction inspect(dataType) {\n\t\t\tvar selected;\n\t\t\tinspected[dataType] = true;\n\t\t\tjQuery.each(structure[dataType] || [], function (_, prefilterOrFactory) {\n\t\t\t\tvar dataTypeOrTransport = prefilterOrFactory(options, originalOptions, jqXHR);\n\t\t\t\tif (typeof dataTypeOrTransport === \"string\" &&\n\t\t\t\t\t!seekingTransport && !inspected[dataTypeOrTransport]) {\n\n\t\t\t\t\toptions.dataTypes.unshift(dataTypeOrTransport);\n\t\t\t\t\tinspect(dataTypeOrTransport);\n\t\t\t\t\treturn false;\n\t\t\t\t} else if (seekingTransport) {\n\t\t\t\t\treturn !(selected = dataTypeOrTransport);\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn selected;\n\t\t}\n\n\t\treturn inspect(options.dataTypes[0]) || !inspected[\"*\"] && inspect(\"*\");\n\t}\n\n\t// A special extend for ajax options\n\t// that takes \"flat\" options (not to be deep extended)\n\t// Fixes trac-9887\n\tfunction ajaxExtend(target, src) {\n\t\tvar key, deep,\n\t\t\tflatOptions = jQuery.ajaxSettings.flatOptions || {};\n\n\t\tfor (key in src) {\n\t\t\tif (src[key] !== undefined) {\n\t\t\t\t(flatOptions[key] ? target : (deep || (deep = {})))[key] = src[key];\n\t\t\t}\n\t\t}\n\t\tif (deep) {\n\t\t\tjQuery.extend(true, target, deep);\n\t\t}\n\n\t\treturn target;\n\t}\n\n\t/* Handles responses to an ajax request:\n\t * - finds the right dataType (mediates between content-type and expected dataType)\n\t * - returns the corresponding response\n\t */\n\tfunction ajaxHandleResponses(s, jqXHR, responses) {\n\n\t\tvar ct, type, finalDataType, firstDataType,\n\t\t\tcontents = s.contents,\n\t\t\tdataTypes = s.dataTypes;\n\n\t\t// Remove auto dataType and get content-type in the process\n\t\twhile (dataTypes[0] === \"*\") {\n\t\t\tdataTypes.shift();\n\t\t\tif (ct === undefined) {\n\t\t\t\tct = s.mimeType || jqXHR.getResponseHeader(\"Content-Type\");\n\t\t\t}\n\t\t}\n\n\t\t// Check if we're dealing with a known content-type\n\t\tif (ct) {\n\t\t\tfor (type in contents) {\n\t\t\t\tif (contents[type] && contents[type].test(ct)) {\n\t\t\t\t\tdataTypes.unshift(type);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Check to see if we have a response for the expected dataType\n\t\tif (dataTypes[0] in responses) {\n\t\t\tfinalDataType = dataTypes[0];\n\t\t} else {\n\n\t\t\t// Try convertible dataTypes\n\t\t\tfor (type in responses) {\n\t\t\t\tif (!dataTypes[0] || s.converters[type + \" \" + dataTypes[0]]) {\n\t\t\t\t\tfinalDataType = type;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (!firstDataType) {\n\t\t\t\t\tfirstDataType = type;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Or just use first one\n\t\t\tfinalDataType = finalDataType || firstDataType;\n\t\t}\n\n\t\t// If we found a dataType\n\t\t// We add the dataType to the list if needed\n\t\t// and return the corresponding response\n\t\tif (finalDataType) {\n\t\t\tif (finalDataType !== dataTypes[0]) {\n\t\t\t\tdataTypes.unshift(finalDataType);\n\t\t\t}\n\t\t\treturn responses[finalDataType];\n\t\t}\n\t}\n\n\t/* Chain conversions given the request and the original response\n\t * Also sets the responseXXX fields on the jqXHR instance\n\t */\n\tfunction ajaxConvert(s, response, jqXHR, isSuccess) {\n\t\tvar conv2, current, conv, tmp, prev,\n\t\t\tconverters = {},\n\n\t\t\t// Work with a copy of dataTypes in case we need to modify it for conversion\n\t\t\tdataTypes = s.dataTypes.slice();\n\n\t\t// Create converters map with lowercased keys\n\t\tif (dataTypes[1]) {\n\t\t\tfor (conv in s.converters) {\n\t\t\t\tconverters[conv.toLowerCase()] = s.converters[conv];\n\t\t\t}\n\t\t}\n\n\t\tcurrent = dataTypes.shift();\n\n\t\t// Convert to each sequential dataType\n\t\twhile (current) {\n\n\t\t\tif (s.responseFields[current]) {\n\t\t\t\tjqXHR[s.responseFields[current]] = response;\n\t\t\t}\n\n\t\t\t// Apply the dataFilter if provided\n\t\t\tif (!prev && isSuccess && s.dataFilter) {\n\t\t\t\tresponse = s.dataFilter(response, s.dataType);\n\t\t\t}\n\n\t\t\tprev = current;\n\t\t\tcurrent = dataTypes.shift();\n\n\t\t\tif (current) {\n\n\t\t\t\t// There's only work to do if current dataType is non-auto\n\t\t\t\tif (current === \"*\") {\n\n\t\t\t\t\tcurrent = prev;\n\n\t\t\t\t\t// Convert response if prev dataType is non-auto and differs from current\n\t\t\t\t} else if (prev !== \"*\" && prev !== current) {\n\n\t\t\t\t\t// Seek a direct converter\n\t\t\t\t\tconv = converters[prev + \" \" + current] || converters[\"* \" + current];\n\n\t\t\t\t\t// If none found, seek a pair\n\t\t\t\t\tif (!conv) {\n\t\t\t\t\t\tfor (conv2 in converters) {\n\n\t\t\t\t\t\t\t// If conv2 outputs current\n\t\t\t\t\t\t\ttmp = conv2.split(\" \");\n\t\t\t\t\t\t\tif (tmp[1] === current) {\n\n\t\t\t\t\t\t\t\t// If prev can be converted to accepted input\n\t\t\t\t\t\t\t\tconv = converters[prev + \" \" + tmp[0]] ||\n\t\t\t\t\t\t\t\t\tconverters[\"* \" + tmp[0]];\n\t\t\t\t\t\t\t\tif (conv) {\n\n\t\t\t\t\t\t\t\t\t// Condense equivalence converters\n\t\t\t\t\t\t\t\t\tif (conv === true) {\n\t\t\t\t\t\t\t\t\t\tconv = converters[conv2];\n\n\t\t\t\t\t\t\t\t\t\t// Otherwise, insert the intermediate dataType\n\t\t\t\t\t\t\t\t\t} else if (converters[conv2] !== true) {\n\t\t\t\t\t\t\t\t\t\tcurrent = tmp[0];\n\t\t\t\t\t\t\t\t\t\tdataTypes.unshift(tmp[1]);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Apply converter (if not an equivalence)\n\t\t\t\t\tif (conv !== true) {\n\n\t\t\t\t\t\t// Unless errors are allowed to bubble, catch and return them\n\t\t\t\t\t\tif (conv && s.throws) {\n\t\t\t\t\t\t\tresponse = conv(response);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\tresponse = conv(response);\n\t\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\tstate: \"parsererror\",\n\t\t\t\t\t\t\t\t\terror: conv ? e : \"No conversion from \" + prev + \" to \" + current\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn { state: \"success\", data: response };\n\t}\n\n\tjQuery.extend({\n\n\t\t// Counter for holding the number of active queries\n\t\tactive: 0,\n\n\t\t// Last-Modified header cache for next request\n\t\tlastModified: {},\n\t\tetag: {},\n\n\t\tajaxSettings: {\n\t\t\turl: location.href,\n\t\t\ttype: \"GET\",\n\t\t\tisLocal: rlocalProtocol.test(location.protocol),\n\t\t\tglobal: true,\n\t\t\tprocessData: true,\n\t\t\tasync: true,\n\t\t\tcontentType: \"application/x-www-form-urlencoded; charset=UTF-8\",\n\n\t\t\t/*\n\t\t\ttimeout: 0,\n\t\t\tdata: null,\n\t\t\tdataType: null,\n\t\t\tusername: null,\n\t\t\tpassword: null,\n\t\t\tcache: null,\n\t\t\tthrows: false,\n\t\t\ttraditional: false,\n\t\t\theaders: {},\n\t\t\t*/\n\n\t\t\taccepts: {\n\t\t\t\t\"*\": allTypes,\n\t\t\t\ttext: \"text/plain\",\n\t\t\t\thtml: \"text/html\",\n\t\t\t\txml: \"application/xml, text/xml\",\n\t\t\t\tjson: \"application/json, text/javascript\"\n\t\t\t},\n\n\t\t\tcontents: {\n\t\t\t\txml: /\\bxml\\b/,\n\t\t\t\thtml: /\\bhtml/,\n\t\t\t\tjson: /\\bjson\\b/\n\t\t\t},\n\n\t\t\tresponseFields: {\n\t\t\t\txml: \"responseXML\",\n\t\t\t\ttext: \"responseText\",\n\t\t\t\tjson: \"responseJSON\"\n\t\t\t},\n\n\t\t\t// Data converters\n\t\t\t// Keys separate source (or catchall \"*\") and destination types with a single space\n\t\t\tconverters: {\n\n\t\t\t\t// Convert anything to text\n\t\t\t\t\"* text\": String,\n\n\t\t\t\t// Text to html (true = no transformation)\n\t\t\t\t\"text html\": true,\n\n\t\t\t\t// Evaluate text as a json expression\n\t\t\t\t\"text json\": JSON.parse,\n\n\t\t\t\t// Parse text as xml\n\t\t\t\t\"text xml\": jQuery.parseXML\n\t\t\t},\n\n\t\t\t// For options that shouldn't be deep extended:\n\t\t\t// you can add your own custom options here if\n\t\t\t// and when you create one that shouldn't be\n\t\t\t// deep extended (see ajaxExtend)\n\t\t\tflatOptions: {\n\t\t\t\turl: true,\n\t\t\t\tcontext: true\n\t\t\t}\n\t\t},\n\n\t\t// Creates a full fledged settings object into target\n\t\t// with both ajaxSettings and settings fields.\n\t\t// If target is omitted, writes into ajaxSettings.\n\t\tajaxSetup: function (target, settings) {\n\t\t\treturn settings ?\n\n\t\t\t\t// Building a settings object\n\t\t\t\tajaxExtend(ajaxExtend(target, jQuery.ajaxSettings), settings) :\n\n\t\t\t\t// Extending ajaxSettings\n\t\t\t\tajaxExtend(jQuery.ajaxSettings, target);\n\t\t},\n\n\t\tajaxPrefilter: addToPrefiltersOrTransports(prefilters),\n\t\tajaxTransport: addToPrefiltersOrTransports(transports),\n\n\t\t// Main method\n\t\tajax: function (url, options) {\n\n\t\t\t// If url is an object, simulate pre-1.5 signature\n\t\t\tif (typeof url === \"object\") {\n\t\t\t\toptions = url;\n\t\t\t\turl = undefined;\n\t\t\t}\n\n\t\t\t// Force options to be an object\n\t\t\toptions = options || {};\n\n\t\t\tvar transport,\n\n\t\t\t\t// URL without anti-cache param\n\t\t\t\tcacheURL,\n\n\t\t\t\t// Response headers\n\t\t\t\tresponseHeadersString,\n\t\t\t\tresponseHeaders,\n\n\t\t\t\t// timeout handle\n\t\t\t\ttimeoutTimer,\n\n\t\t\t\t// Url cleanup var\n\t\t\t\turlAnchor,\n\n\t\t\t\t// Request state (becomes false upon send and true upon completion)\n\t\t\t\tcompleted,\n\n\t\t\t\t// To know if global events are to be dispatched\n\t\t\t\tfireGlobals,\n\n\t\t\t\t// Loop variable\n\t\t\t\ti,\n\n\t\t\t\t// uncached part of the url\n\t\t\t\tuncached,\n\n\t\t\t\t// Create the final options object\n\t\t\t\ts = jQuery.ajaxSetup({}, options),\n\n\t\t\t\t// Callbacks context\n\t\t\t\tcallbackContext = s.context || s,\n\n\t\t\t\t// Context for global events is callbackContext if it is a DOM node or jQuery collection\n\t\t\t\tglobalEventContext = s.context &&\n\t\t\t\t\t(callbackContext.nodeType || callbackContext.jquery) ?\n\t\t\t\t\tjQuery(callbackContext) :\n\t\t\t\t\tjQuery.event,\n\n\t\t\t\t// Deferreds\n\t\t\t\tdeferred = jQuery.Deferred(),\n\t\t\t\tcompleteDeferred = jQuery.Callbacks(\"once memory\"),\n\n\t\t\t\t// Status-dependent callbacks\n\t\t\t\tstatusCode = s.statusCode || {},\n\n\t\t\t\t// Headers (they are sent all at once)\n\t\t\t\trequestHeaders = {},\n\t\t\t\trequestHeadersNames = {},\n\n\t\t\t\t// Default abort message\n\t\t\t\tstrAbort = \"canceled\",\n\n\t\t\t\t// Fake xhr\n\t\t\t\tjqXHR = {\n\t\t\t\t\treadyState: 0,\n\n\t\t\t\t\t// Builds headers hashtable if needed\n\t\t\t\t\tgetResponseHeader: function (key) {\n\t\t\t\t\t\tvar match;\n\t\t\t\t\t\tif (completed) {\n\t\t\t\t\t\t\tif (!responseHeaders) {\n\t\t\t\t\t\t\t\tresponseHeaders = {};\n\t\t\t\t\t\t\t\twhile ((match = rheaders.exec(responseHeadersString))) {\n\t\t\t\t\t\t\t\t\tresponseHeaders[match[1].toLowerCase() + \" \"] =\n\t\t\t\t\t\t\t\t\t\t(responseHeaders[match[1].toLowerCase() + \" \"] || [])\n\t\t\t\t\t\t\t\t\t\t\t.concat(match[2]);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tmatch = responseHeaders[key.toLowerCase() + \" \"];\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn match == null ? null : match.join(\", \");\n\t\t\t\t\t},\n\n\t\t\t\t\t// Raw string\n\t\t\t\t\tgetAllResponseHeaders: function () {\n\t\t\t\t\t\treturn completed ? responseHeadersString : null;\n\t\t\t\t\t},\n\n\t\t\t\t\t// Caches the header\n\t\t\t\t\tsetRequestHeader: function (name, value) {\n\t\t\t\t\t\tif (completed == null) {\n\t\t\t\t\t\t\tname = requestHeadersNames[name.toLowerCase()] =\n\t\t\t\t\t\t\t\trequestHeadersNames[name.toLowerCase()] || name;\n\t\t\t\t\t\t\trequestHeaders[name] = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn this;\n\t\t\t\t\t},\n\n\t\t\t\t\t// Overrides response content-type header\n\t\t\t\t\toverrideMimeType: function (type) {\n\t\t\t\t\t\tif (completed == null) {\n\t\t\t\t\t\t\ts.mimeType = type;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn this;\n\t\t\t\t\t},\n\n\t\t\t\t\t// Status-dependent callbacks\n\t\t\t\t\tstatusCode: function (map) {\n\t\t\t\t\t\tvar code;\n\t\t\t\t\t\tif (map) {\n\t\t\t\t\t\t\tif (completed) {\n\n\t\t\t\t\t\t\t\t// Execute the appropriate callbacks\n\t\t\t\t\t\t\t\tjqXHR.always(map[jqXHR.status]);\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t// Lazy-add the new callbacks in a way that preserves old ones\n\t\t\t\t\t\t\t\tfor (code in map) {\n\t\t\t\t\t\t\t\t\tstatusCode[code] = [statusCode[code], map[code]];\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn this;\n\t\t\t\t\t},\n\n\t\t\t\t\t// Cancel the request\n\t\t\t\t\tabort: function (statusText) {\n\t\t\t\t\t\tvar finalText = statusText || strAbort;\n\t\t\t\t\t\tif (transport) {\n\t\t\t\t\t\t\ttransport.abort(finalText);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdone(0, finalText);\n\t\t\t\t\t\treturn this;\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t// Attach deferreds\n\t\t\tdeferred.promise(jqXHR);\n\n\t\t\t// Add protocol if not provided (prefilters might expect it)\n\t\t\t// Handle falsy url in the settings object (trac-10093: consistency with old signature)\n\t\t\t// We also use the url parameter if available\n\t\t\ts.url = ((url || s.url || location.href) + \"\")\n\t\t\t\t.replace(rprotocol, location.protocol + \"//\");\n\n\t\t\t// Alias method option to type as per ticket trac-12004\n\t\t\ts.type = options.method || options.type || s.method || s.type;\n\n\t\t\t// Extract dataTypes list\n\t\t\ts.dataTypes = (s.dataType || \"*\").toLowerCase().match(rnothtmlwhite) || [\"\"];\n\n\t\t\t// A cross-domain request is in order when the origin doesn't match the current origin.\n\t\t\tif (s.crossDomain == null) {\n\t\t\t\turlAnchor = document.createElement(\"a\");\n\n\t\t\t\t// Support: IE <=8 - 11, Edge 12 - 15\n\t\t\t\t// IE throws exception on accessing the href property if url is malformed,\n\t\t\t\t// e.g. http://example.com:80x/\n\t\t\t\ttry {\n\t\t\t\t\turlAnchor.href = s.url;\n\n\t\t\t\t\t// Support: IE <=8 - 11 only\n\t\t\t\t\t// Anchor's host property isn't correctly set when s.url is relative\n\t\t\t\t\turlAnchor.href = urlAnchor.href;\n\t\t\t\t\ts.crossDomain = originAnchor.protocol + \"//\" + originAnchor.host !==\n\t\t\t\t\t\turlAnchor.protocol + \"//\" + urlAnchor.host;\n\t\t\t\t} catch (e) {\n\n\t\t\t\t\t// If there is an error parsing the URL, assume it is crossDomain,\n\t\t\t\t\t// it can be rejected by the transport if it is invalid\n\t\t\t\t\ts.crossDomain = true;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Convert data if not already a string\n\t\t\tif (s.data && s.processData && typeof s.data !== \"string\") {\n\t\t\t\ts.data = jQuery.param(s.data, s.traditional);\n\t\t\t}\n\n\t\t\t// Apply prefilters\n\t\t\tinspectPrefiltersOrTransports(prefilters, s, options, jqXHR);\n\n\t\t\t// If request was aborted inside a prefilter, stop there\n\t\t\tif (completed) {\n\t\t\t\treturn jqXHR;\n\t\t\t}\n\n\t\t\t// We can fire global events as of now if asked to\n\t\t\t// Don't fire events if jQuery.event is undefined in an AMD-usage scenario (trac-15118)\n\t\t\tfireGlobals = jQuery.event && s.global;\n\n\t\t\t// Watch for a new set of requests\n\t\t\tif (fireGlobals && jQuery.active++ === 0) {\n\t\t\t\tjQuery.event.trigger(\"ajaxStart\");\n\t\t\t}\n\n\t\t\t// Uppercase the type\n\t\t\ts.type = s.type.toUpperCase();\n\n\t\t\t// Determine if request has content\n\t\t\ts.hasContent = !rnoContent.test(s.type);\n\n\t\t\t// Save the URL in case we're toying with the If-Modified-Since\n\t\t\t// and/or If-None-Match header later on\n\t\t\t// Remove hash to simplify url manipulation\n\t\t\tcacheURL = s.url.replace(rhash, \"\");\n\n\t\t\t// More options handling for requests with no content\n\t\t\tif (!s.hasContent) {\n\n\t\t\t\t// Remember the hash so we can put it back\n\t\t\t\tuncached = s.url.slice(cacheURL.length);\n\n\t\t\t\t// If data is available and should be processed, append data to url\n\t\t\t\tif (s.data && (s.processData || typeof s.data === \"string\")) {\n\t\t\t\t\tcacheURL += (rquery.test(cacheURL) ? \"&\" : \"?\") + s.data;\n\n\t\t\t\t\t// trac-9682: remove data so that it's not used in an eventual retry\n\t\t\t\t\tdelete s.data;\n\t\t\t\t}\n\n\t\t\t\t// Add or update anti-cache param if needed\n\t\t\t\tif (s.cache === false) {\n\t\t\t\t\tcacheURL = cacheURL.replace(rantiCache, \"$1\");\n\t\t\t\t\tuncached = (rquery.test(cacheURL) ? \"&\" : \"?\") + \"_=\" + (nonce.guid++) +\n\t\t\t\t\t\tuncached;\n\t\t\t\t}\n\n\t\t\t\t// Put hash and anti-cache on the URL that will be requested (gh-1732)\n\t\t\t\ts.url = cacheURL + uncached;\n\n\t\t\t\t// Change '%20' to '+' if this is encoded form body content (gh-2658)\n\t\t\t} else if (s.data && s.processData &&\n\t\t\t\t(s.contentType || \"\").indexOf(\"application/x-www-form-urlencoded\") === 0) {\n\t\t\t\ts.data = s.data.replace(r20, \"+\");\n\t\t\t}\n\n\t\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\t\tif (s.ifModified) {\n\t\t\t\tif (jQuery.lastModified[cacheURL]) {\n\t\t\t\t\tjqXHR.setRequestHeader(\"If-Modified-Since\", jQuery.lastModified[cacheURL]);\n\t\t\t\t}\n\t\t\t\tif (jQuery.etag[cacheURL]) {\n\t\t\t\t\tjqXHR.setRequestHeader(\"If-None-Match\", jQuery.etag[cacheURL]);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Set the correct header, if data is being sent\n\t\t\tif (s.data && s.hasContent && s.contentType !== false || options.contentType) {\n\t\t\t\tjqXHR.setRequestHeader(\"Content-Type\", s.contentType);\n\t\t\t}\n\n\t\t\t// Set the Accepts header for the server, depending on the dataType\n\t\t\tjqXHR.setRequestHeader(\n\t\t\t\t\"Accept\",\n\t\t\t\ts.dataTypes[0] && s.accepts[s.dataTypes[0]] ?\n\t\t\t\t\ts.accepts[s.dataTypes[0]] +\n\t\t\t\t\t(s.dataTypes[0] !== \"*\" ? \", \" + allTypes + \"; q=0.01\" : \"\") :\n\t\t\t\t\ts.accepts[\"*\"]\n\t\t\t);\n\n\t\t\t// Check for headers option\n\t\t\tfor (i in s.headers) {\n\t\t\t\tjqXHR.setRequestHeader(i, s.headers[i]);\n\t\t\t}\n\n\t\t\t// Allow custom headers/mimetypes and early abort\n\t\t\tif (s.beforeSend &&\n\t\t\t\t(s.beforeSend.call(callbackContext, jqXHR, s) === false || completed)) {\n\n\t\t\t\t// Abort if not done already and return\n\t\t\t\treturn jqXHR.abort();\n\t\t\t}\n\n\t\t\t// Aborting is no longer a cancellation\n\t\t\tstrAbort = \"abort\";\n\n\t\t\t// Install callbacks on deferreds\n\t\t\tcompleteDeferred.add(s.complete);\n\t\t\tjqXHR.done(s.success);\n\t\t\tjqXHR.fail(s.error);\n\n\t\t\t// Get transport\n\t\t\ttransport = inspectPrefiltersOrTransports(transports, s, options, jqXHR);\n\n\t\t\t// If no transport, we auto-abort\n\t\t\tif (!transport) {\n\t\t\t\tdone(-1, \"No Transport\");\n\t\t\t} else {\n\t\t\t\tjqXHR.readyState = 1;\n\n\t\t\t\t// Send global event\n\t\t\t\tif (fireGlobals) {\n\t\t\t\t\tglobalEventContext.trigger(\"ajaxSend\", [jqXHR, s]);\n\t\t\t\t}\n\n\t\t\t\t// If request was aborted inside ajaxSend, stop there\n\t\t\t\tif (completed) {\n\t\t\t\t\treturn jqXHR;\n\t\t\t\t}\n\n\t\t\t\t// Timeout\n\t\t\t\tif (s.async && s.timeout > 0) {\n\t\t\t\t\ttimeoutTimer = window.setTimeout(function () {\n\t\t\t\t\t\tjqXHR.abort(\"timeout\");\n\t\t\t\t\t}, s.timeout);\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tcompleted = false;\n\t\t\t\t\ttransport.send(requestHeaders, done);\n\t\t\t\t} catch (e) {\n\n\t\t\t\t\t// Rethrow post-completion exceptions\n\t\t\t\t\tif (completed) {\n\t\t\t\t\t\tthrow e;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Propagate others as results\n\t\t\t\t\tdone(-1, e);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Callback for when everything is done\n\t\t\tfunction done(status, nativeStatusText, responses, headers) {\n\t\t\t\tvar isSuccess, success, error, response, modified,\n\t\t\t\t\tstatusText = nativeStatusText;\n\n\t\t\t\t// Ignore repeat invocations\n\t\t\t\tif (completed) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tcompleted = true;\n\n\t\t\t\t// Clear timeout if it exists\n\t\t\t\tif (timeoutTimer) {\n\t\t\t\t\twindow.clearTimeout(timeoutTimer);\n\t\t\t\t}\n\n\t\t\t\t// Dereference transport for early garbage collection\n\t\t\t\t// (no matter how long the jqXHR object will be used)\n\t\t\t\ttransport = undefined;\n\n\t\t\t\t// Cache response headers\n\t\t\t\tresponseHeadersString = headers || \"\";\n\n\t\t\t\t// Set readyState\n\t\t\t\tjqXHR.readyState = status > 0 ? 4 : 0;\n\n\t\t\t\t// Determine if successful\n\t\t\t\tisSuccess = status >= 200 && status < 300 || status === 304;\n\n\t\t\t\t// Get response data\n\t\t\t\tif (responses) {\n\t\t\t\t\tresponse = ajaxHandleResponses(s, jqXHR, responses);\n\t\t\t\t}\n\n\t\t\t\t// Use a noop converter for missing script but not if jsonp\n\t\t\t\tif (!isSuccess &&\n\t\t\t\t\tjQuery.inArray(\"script\", s.dataTypes) > -1 &&\n\t\t\t\t\tjQuery.inArray(\"json\", s.dataTypes) < 0) {\n\t\t\t\t\ts.converters[\"text script\"] = function () { };\n\t\t\t\t}\n\n\t\t\t\t// Convert no matter what (that way responseXXX fields are always set)\n\t\t\t\tresponse = ajaxConvert(s, response, jqXHR, isSuccess);\n\n\t\t\t\t// If successful, handle type chaining\n\t\t\t\tif (isSuccess) {\n\n\t\t\t\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\t\t\t\tif (s.ifModified) {\n\t\t\t\t\t\tmodified = jqXHR.getResponseHeader(\"Last-Modified\");\n\t\t\t\t\t\tif (modified) {\n\t\t\t\t\t\t\tjQuery.lastModified[cacheURL] = modified;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmodified = jqXHR.getResponseHeader(\"etag\");\n\t\t\t\t\t\tif (modified) {\n\t\t\t\t\t\t\tjQuery.etag[cacheURL] = modified;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// if no content\n\t\t\t\t\tif (status === 204 || s.type === \"HEAD\") {\n\t\t\t\t\t\tstatusText = \"nocontent\";\n\n\t\t\t\t\t\t// if not modified\n\t\t\t\t\t} else if (status === 304) {\n\t\t\t\t\t\tstatusText = \"notmodified\";\n\n\t\t\t\t\t\t// If we have data, let's convert it\n\t\t\t\t\t} else {\n\t\t\t\t\t\tstatusText = response.state;\n\t\t\t\t\t\tsuccess = response.data;\n\t\t\t\t\t\terror = response.error;\n\t\t\t\t\t\tisSuccess = !error;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\n\t\t\t\t\t// Extract error from statusText and normalize for non-aborts\n\t\t\t\t\terror = statusText;\n\t\t\t\t\tif (status || !statusText) {\n\t\t\t\t\t\tstatusText = \"error\";\n\t\t\t\t\t\tif (status < 0) {\n\t\t\t\t\t\t\tstatus = 0;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Set data for the fake xhr object\n\t\t\t\tjqXHR.status = status;\n\t\t\t\tjqXHR.statusText = (nativeStatusText || statusText) + \"\";\n\n\t\t\t\t// Success/Error\n\t\t\t\tif (isSuccess) {\n\t\t\t\t\tdeferred.resolveWith(callbackContext, [success, statusText, jqXHR]);\n\t\t\t\t} else {\n\t\t\t\t\tdeferred.rejectWith(callbackContext, [jqXHR, statusText, error]);\n\t\t\t\t}\n\n\t\t\t\t// Status-dependent callbacks\n\t\t\t\tjqXHR.statusCode(statusCode);\n\t\t\t\tstatusCode = undefined;\n\n\t\t\t\tif (fireGlobals) {\n\t\t\t\t\tglobalEventContext.trigger(isSuccess ? \"ajaxSuccess\" : \"ajaxError\",\n\t\t\t\t\t\t[jqXHR, s, isSuccess ? success : error]);\n\t\t\t\t}\n\n\t\t\t\t// Complete\n\t\t\t\tcompleteDeferred.fireWith(callbackContext, [jqXHR, statusText]);\n\n\t\t\t\tif (fireGlobals) {\n\t\t\t\t\tglobalEventContext.trigger(\"ajaxComplete\", [jqXHR, s]);\n\n\t\t\t\t\t// Handle the global AJAX counter\n\t\t\t\t\tif (!(--jQuery.active)) {\n\t\t\t\t\t\tjQuery.event.trigger(\"ajaxStop\");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn jqXHR;\n\t\t},\n\n\t\tgetJSON: function (url, data, callback) {\n\t\t\treturn jQuery.get(url, data, callback, \"json\");\n\t\t},\n\n\t\tgetScript: function (url, callback) {\n\t\t\treturn jQuery.get(url, undefined, callback, \"script\");\n\t\t}\n\t});\n\n\tjQuery.each([\"get\", \"post\"], function (_i, method) {\n\t\tjQuery[method] = function (url, data, callback, type) {\n\n\t\t\t// Shift arguments if data argument was omitted\n\t\t\tif (isFunction(data)) {\n\t\t\t\ttype = type || callback;\n\t\t\t\tcallback = data;\n\t\t\t\tdata = undefined;\n\t\t\t}\n\n\t\t\t// The url can be an options object (which then must have .url)\n\t\t\treturn jQuery.ajax(jQuery.extend({\n\t\t\t\turl: url,\n\t\t\t\ttype: method,\n\t\t\t\tdataType: type,\n\t\t\t\tdata: data,\n\t\t\t\tsuccess: callback\n\t\t\t}, jQuery.isPlainObject(url) && url));\n\t\t};\n\t});\n\n\tjQuery.ajaxPrefilter(function (s) {\n\t\tvar i;\n\t\tfor (i in s.headers) {\n\t\t\tif (i.toLowerCase() === \"content-type\") {\n\t\t\t\ts.contentType = s.headers[i] || \"\";\n\t\t\t}\n\t\t}\n\t});\n\n\n\tjQuery._evalUrl = function (url, options, doc) {\n\t\treturn jQuery.ajax({\n\t\t\turl: url,\n\n\t\t\t// Make this explicit, since user can override this through ajaxSetup (trac-11264)\n\t\t\ttype: \"GET\",\n\t\t\tdataType: \"script\",\n\t\t\tcache: true,\n\t\t\tasync: false,\n\t\t\tglobal: false,\n\n\t\t\t// Only evaluate the response if it is successful (gh-4126)\n\t\t\t// dataFilter is not invoked for failure responses, so using it instead\n\t\t\t// of the default converter is kludgy but it works.\n\t\t\tconverters: {\n\t\t\t\t\"text script\": function () { }\n\t\t\t},\n\t\t\tdataFilter: function (response) {\n\t\t\t\tjQuery.globalEval(response, options, doc);\n\t\t\t}\n\t\t});\n\t};\n\n\n\tjQuery.fn.extend({\n\t\twrapAll: function (html) {\n\t\t\tvar wrap;\n\n\t\t\tif (this[0]) {\n\t\t\t\tif (isFunction(html)) {\n\t\t\t\t\thtml = html.call(this[0]);\n\t\t\t\t}\n\n\t\t\t\t// The elements to wrap the target around\n\t\t\t\twrap = jQuery(html, this[0].ownerDocument).eq(0).clone(true);\n\n\t\t\t\tif (this[0].parentNode) {\n\t\t\t\t\twrap.insertBefore(this[0]);\n\t\t\t\t}\n\n\t\t\t\twrap.map(function () {\n\t\t\t\t\tvar elem = this;\n\n\t\t\t\t\twhile (elem.firstElementChild) {\n\t\t\t\t\t\telem = elem.firstElementChild;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn elem;\n\t\t\t\t}).append(this);\n\t\t\t}\n\n\t\t\treturn this;\n\t\t},\n\n\t\twrapInner: function (html) {\n\t\t\tif (isFunction(html)) {\n\t\t\t\treturn this.each(function (i) {\n\t\t\t\t\tjQuery(this).wrapInner(html.call(this, i));\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn this.each(function () {\n\t\t\t\tvar self = jQuery(this),\n\t\t\t\t\tcontents = self.contents();\n\n\t\t\t\tif (contents.length) {\n\t\t\t\t\tcontents.wrapAll(html);\n\n\t\t\t\t} else {\n\t\t\t\t\tself.append(html);\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\twrap: function (html) {\n\t\t\tvar htmlIsFunction = isFunction(html);\n\n\t\t\treturn this.each(function (i) {\n\t\t\t\tjQuery(this).wrapAll(htmlIsFunction ? html.call(this, i) : html);\n\t\t\t});\n\t\t},\n\n\t\tunwrap: function (selector) {\n\t\t\tthis.parent(selector).not(\"body\").each(function () {\n\t\t\t\tjQuery(this).replaceWith(this.childNodes);\n\t\t\t});\n\t\t\treturn this;\n\t\t}\n\t});\n\n\n\tjQuery.expr.pseudos.hidden = function (elem) {\n\t\treturn !jQuery.expr.pseudos.visible(elem);\n\t};\n\tjQuery.expr.pseudos.visible = function (elem) {\n\t\treturn !!(elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length);\n\t};\n\n\n\n\n\tjQuery.ajaxSettings.xhr = function () {\n\t\ttry {\n\t\t\treturn new window.XMLHttpRequest();\n\t\t} catch (e) { }\n\t};\n\n\tvar xhrSuccessStatus = {\n\n\t\t// File protocol always yields status code 0, assume 200\n\t\t0: 200,\n\n\t\t// Support: IE <=9 only\n\t\t// trac-1450: sometimes IE returns 1223 when it should be 204\n\t\t1223: 204\n\t},\n\t\txhrSupported = jQuery.ajaxSettings.xhr();\n\n\tsupport.cors = !!xhrSupported && (\"withCredentials\" in xhrSupported);\n\tsupport.ajax = xhrSupported = !!xhrSupported;\n\n\tjQuery.ajaxTransport(function (options) {\n\t\tvar callback, errorCallback;\n\n\t\t// Cross domain only allowed if supported through XMLHttpRequest\n\t\tif (support.cors || xhrSupported && !options.crossDomain) {\n\t\t\treturn {\n\t\t\t\tsend: function (headers, complete) {\n\t\t\t\t\tvar i,\n\t\t\t\t\t\txhr = options.xhr();\n\n\t\t\t\t\txhr.open(\n\t\t\t\t\t\toptions.type,\n\t\t\t\t\t\toptions.url,\n\t\t\t\t\t\toptions.async,\n\t\t\t\t\t\toptions.username,\n\t\t\t\t\t\toptions.password\n\t\t\t\t\t);\n\n\t\t\t\t\t// Apply custom fields if provided\n\t\t\t\t\tif (options.xhrFields) {\n\t\t\t\t\t\tfor (i in options.xhrFields) {\n\t\t\t\t\t\t\txhr[i] = options.xhrFields[i];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Override mime type if needed\n\t\t\t\t\tif (options.mimeType && xhr.overrideMimeType) {\n\t\t\t\t\t\txhr.overrideMimeType(options.mimeType);\n\t\t\t\t\t}\n\n\t\t\t\t\t// X-Requested-With header\n\t\t\t\t\t// For cross-domain requests, seeing as conditions for a preflight are\n\t\t\t\t\t// akin to a jigsaw puzzle, we simply never set it to be sure.\n\t\t\t\t\t// (it can always be set on a per-request basis or even using ajaxSetup)\n\t\t\t\t\t// For same-domain requests, won't change header if already provided.\n\t\t\t\t\tif (!options.crossDomain && !headers[\"X-Requested-With\"]) {\n\t\t\t\t\t\theaders[\"X-Requested-With\"] = \"XMLHttpRequest\";\n\t\t\t\t\t}\n\n\t\t\t\t\t// Set headers\n\t\t\t\t\tfor (i in headers) {\n\t\t\t\t\t\txhr.setRequestHeader(i, headers[i]);\n\t\t\t\t\t}\n\n\t\t\t\t\t// Callback\n\t\t\t\t\tcallback = function (type) {\n\t\t\t\t\t\treturn function () {\n\t\t\t\t\t\t\tif (callback) {\n\t\t\t\t\t\t\t\tcallback = errorCallback = xhr.onload =\n\t\t\t\t\t\t\t\t\txhr.onerror = xhr.onabort = xhr.ontimeout =\n\t\t\t\t\t\t\t\t\txhr.onreadystatechange = null;\n\n\t\t\t\t\t\t\t\tif (type === \"abort\") {\n\t\t\t\t\t\t\t\t\txhr.abort();\n\t\t\t\t\t\t\t\t} else if (type === \"error\") {\n\n\t\t\t\t\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t\t\t\t\t// On a manual native abort, IE9 throws\n\t\t\t\t\t\t\t\t\t// errors on any property access that is not readyState\n\t\t\t\t\t\t\t\t\tif (typeof xhr.status !== \"number\") {\n\t\t\t\t\t\t\t\t\t\tcomplete(0, \"error\");\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tcomplete(\n\n\t\t\t\t\t\t\t\t\t\t\t// File: protocol always yields status 0; see trac-8605, trac-14207\n\t\t\t\t\t\t\t\t\t\t\txhr.status,\n\t\t\t\t\t\t\t\t\t\t\txhr.statusText\n\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tcomplete(\n\t\t\t\t\t\t\t\t\t\txhrSuccessStatus[xhr.status] || xhr.status,\n\t\t\t\t\t\t\t\t\t\txhr.statusText,\n\n\t\t\t\t\t\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t\t\t\t\t\t// IE9 has no XHR2 but throws on binary (trac-11426)\n\t\t\t\t\t\t\t\t\t\t// For XHR2 non-text, let the caller handle it (gh-2498)\n\t\t\t\t\t\t\t\t\t\t(xhr.responseType || \"text\") !== \"text\" ||\n\t\t\t\t\t\t\t\t\t\t\ttypeof xhr.responseText !== \"string\" ?\n\t\t\t\t\t\t\t\t\t\t\t{ binary: xhr.response } :\n\t\t\t\t\t\t\t\t\t\t\t{ text: xhr.responseText },\n\t\t\t\t\t\t\t\t\t\txhr.getAllResponseHeaders()\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\t\t\t\t\t};\n\n\t\t\t\t\t// Listen to events\n\t\t\t\t\txhr.onload = callback();\n\t\t\t\t\terrorCallback = xhr.onerror = xhr.ontimeout = callback(\"error\");\n\n\t\t\t\t\t// Support: IE 9 only\n\t\t\t\t\t// Use onreadystatechange to replace onabort\n\t\t\t\t\t// to handle uncaught aborts\n\t\t\t\t\tif (xhr.onabort !== undefined) {\n\t\t\t\t\t\txhr.onabort = errorCallback;\n\t\t\t\t\t} else {\n\t\t\t\t\t\txhr.onreadystatechange = function () {\n\n\t\t\t\t\t\t\t// Check readyState before timeout as it changes\n\t\t\t\t\t\t\tif (xhr.readyState === 4) {\n\n\t\t\t\t\t\t\t\t// Allow onerror to be called first,\n\t\t\t\t\t\t\t\t// but that will not handle a native abort\n\t\t\t\t\t\t\t\t// Also, save errorCallback to a variable\n\t\t\t\t\t\t\t\t// as xhr.onerror cannot be accessed\n\t\t\t\t\t\t\t\twindow.setTimeout(function () {\n\t\t\t\t\t\t\t\t\tif (callback) {\n\t\t\t\t\t\t\t\t\t\terrorCallback();\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\t// Create the abort callback\n\t\t\t\t\tcallback = callback(\"abort\");\n\n\t\t\t\t\ttry {\n\n\t\t\t\t\t\t// Do send the request (this may raise an exception)\n\t\t\t\t\t\txhr.send(options.hasContent && options.data || null);\n\t\t\t\t\t} catch (e) {\n\n\t\t\t\t\t\t// trac-14683: Only rethrow if this hasn't been notified as an error yet\n\t\t\t\t\t\tif (callback) {\n\t\t\t\t\t\t\tthrow e;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\t\tabort: function () {\n\t\t\t\t\tif (callback) {\n\t\t\t\t\t\tcallback();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t});\n\n\n\n\n\t// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432)\n\tjQuery.ajaxPrefilter(function (s) {\n\t\tif (s.crossDomain) {\n\t\t\ts.contents.script = false;\n\t\t}\n\t});\n\n\t// Install script dataType\n\tjQuery.ajaxSetup({\n\t\taccepts: {\n\t\t\tscript: \"text/javascript, application/javascript, \" +\n\t\t\t\t\"application/ecmascript, application/x-ecmascript\"\n\t\t},\n\t\tcontents: {\n\t\t\tscript: /\\b(?:java|ecma)script\\b/\n\t\t},\n\t\tconverters: {\n\t\t\t\"text script\": function (text) {\n\t\t\t\tjQuery.globalEval(text);\n\t\t\t\treturn text;\n\t\t\t}\n\t\t}\n\t});\n\n\t// Handle cache's special case and crossDomain\n\tjQuery.ajaxPrefilter(\"script\", function (s) {\n\t\tif (s.cache === undefined) {\n\t\t\ts.cache = false;\n\t\t}\n\t\tif (s.crossDomain) {\n\t\t\ts.type = \"GET\";\n\t\t}\n\t});\n\n\t// Bind script tag hack transport\n\tjQuery.ajaxTransport(\"script\", function (s) {\n\n\t\t// This transport only deals with cross domain or forced-by-attrs requests\n\t\tif (s.crossDomain || s.scriptAttrs) {\n\t\t\tvar script, callback;\n\t\t\treturn {\n\t\t\t\tsend: function (_, complete) {\n\t\t\t\t\tscript = jQuery(\"<script>\")\n\t\t\t\t\t\t.attr(s.scriptAttrs || {})\n\t\t\t\t\t\t.prop({ charset: s.scriptCharset, src: s.url })\n\t\t\t\t\t\t.on(\"load error\", callback = function (evt) {\n\t\t\t\t\t\t\tscript.remove();\n\t\t\t\t\t\t\tcallback = null;\n\t\t\t\t\t\t\tif (evt) {\n\t\t\t\t\t\t\t\tcomplete(evt.type === \"error\" ? 404 : 200, evt.type);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\n\t\t\t\t\t// Use native DOM manipulation to avoid our domManip AJAX trickery\n\t\t\t\t\tdocument.head.appendChild(script[0]);\n\t\t\t\t},\n\t\t\t\tabort: function () {\n\t\t\t\t\tif (callback) {\n\t\t\t\t\t\tcallback();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t});\n\n\n\n\n\tvar oldCallbacks = [],\n\t\trjsonp = /(=)\\?(?=&|$)|\\?\\?/;\n\n\t// Default jsonp settings\n\tjQuery.ajaxSetup({\n\t\tjsonp: \"callback\",\n\t\tjsonpCallback: function () {\n\t\t\tvar callback = oldCallbacks.pop() || (jQuery.expando + \"_\" + (nonce.guid++));\n\t\t\tthis[callback] = true;\n\t\t\treturn callback;\n\t\t}\n\t});\n\n\t// Detect, normalize options and install callbacks for jsonp requests\n\tjQuery.ajaxPrefilter(\"json jsonp\", function (s, originalSettings, jqXHR) {\n\n\t\tvar callbackName, overwritten, responseContainer,\n\t\t\tjsonProp = s.jsonp !== false && (rjsonp.test(s.url) ?\n\t\t\t\t\"url\" :\n\t\t\t\ttypeof s.data === \"string\" &&\n\t\t\t\t(s.contentType || \"\")\n\t\t\t\t\t.indexOf(\"application/x-www-form-urlencoded\") === 0 &&\n\t\t\t\trjsonp.test(s.data) && \"data\"\n\t\t\t);\n\n\t\t// Handle iff the expected data type is \"jsonp\" or we have a parameter to set\n\t\tif (jsonProp || s.dataTypes[0] === \"jsonp\") {\n\n\t\t\t// Get callback name, remembering preexisting value associated with it\n\t\t\tcallbackName = s.jsonpCallback = isFunction(s.jsonpCallback) ?\n\t\t\t\ts.jsonpCallback() :\n\t\t\t\ts.jsonpCallback;\n\n\t\t\t// Insert callback into url or form data\n\t\t\tif (jsonProp) {\n\t\t\t\ts[jsonProp] = s[jsonProp].replace(rjsonp, \"$1\" + callbackName);\n\t\t\t} else if (s.jsonp !== false) {\n\t\t\t\ts.url += (rquery.test(s.url) ? \"&\" : \"?\") + s.jsonp + \"=\" + callbackName;\n\t\t\t}\n\n\t\t\t// Use data converter to retrieve json after script execution\n\t\t\ts.converters[\"script json\"] = function () {\n\t\t\t\tif (!responseContainer) {\n\t\t\t\t\tjQuery.error(callbackName + \" was not called\");\n\t\t\t\t}\n\t\t\t\treturn responseContainer[0];\n\t\t\t};\n\n\t\t\t// Force json dataType\n\t\t\ts.dataTypes[0] = \"json\";\n\n\t\t\t// Install callback\n\t\t\toverwritten = window[callbackName];\n\t\t\twindow[callbackName] = function () {\n\t\t\t\tresponseContainer = arguments;\n\t\t\t};\n\n\t\t\t// Clean-up function (fires after converters)\n\t\t\tjqXHR.always(function () {\n\n\t\t\t\t// If previous value didn't exist - remove it\n\t\t\t\tif (overwritten === undefined) {\n\t\t\t\t\tjQuery(window).removeProp(callbackName);\n\n\t\t\t\t\t// Otherwise restore preexisting value\n\t\t\t\t} else {\n\t\t\t\t\twindow[callbackName] = overwritten;\n\t\t\t\t}\n\n\t\t\t\t// Save back as free\n\t\t\t\tif (s[callbackName]) {\n\n\t\t\t\t\t// Make sure that re-using the options doesn't screw things around\n\t\t\t\t\ts.jsonpCallback = originalSettings.jsonpCallback;\n\n\t\t\t\t\t// Save the callback name for future use\n\t\t\t\t\toldCallbacks.push(callbackName);\n\t\t\t\t}\n\n\t\t\t\t// Call if it was a function and we have a response\n\t\t\t\tif (responseContainer && isFunction(overwritten)) {\n\t\t\t\t\toverwritten(responseContainer[0]);\n\t\t\t\t}\n\n\t\t\t\tresponseContainer = overwritten = undefined;\n\t\t\t});\n\n\t\t\t// Delegate to script\n\t\t\treturn \"script\";\n\t\t}\n\t});\n\n\n\n\n\t// Support: Safari 8 only\n\t// In Safari 8 documents created via document.implementation.createHTMLDocument\n\t// collapse sibling forms: the second one becomes a child of the first one.\n\t// Because of that, this security measure has to be disabled in Safari 8.\n\t// https://bugs.webkit.org/show_bug.cgi?id=137337\n\tsupport.createHTMLDocument = (function () {\n\t\tvar body = document.implementation.createHTMLDocument(\"\").body;\n\t\tbody.innerHTML = \"<form></form><form></form>\";\n\t\treturn body.childNodes.length === 2;\n\t})();\n\n\n\t// Argument \"data\" should be string of html\n\t// context (optional): If specified, the fragment will be created in this context,\n\t// defaults to document\n\t// keepScripts (optional): If true, will include scripts passed in the html string\n\tjQuery.parseHTML = function (data, context, keepScripts) {\n\t\tif (typeof data !== \"string\") {\n\t\t\treturn [];\n\t\t}\n\t\tif (typeof context === \"boolean\") {\n\t\t\tkeepScripts = context;\n\t\t\tcontext = false;\n\t\t}\n\n\t\tvar base, parsed, scripts;\n\n\t\tif (!context) {\n\n\t\t\t// Stop scripts or inline event handlers from being executed immediately\n\t\t\t// by using document.implementation\n\t\t\tif (support.createHTMLDocument) {\n\t\t\t\tcontext = document.implementation.createHTMLDocument(\"\");\n\n\t\t\t\t// Set the base href for the created document\n\t\t\t\t// so any parsed elements with URLs\n\t\t\t\t// are based on the document's URL (gh-2965)\n\t\t\t\tbase = context.createElement(\"base\");\n\t\t\t\tbase.href = document.location.href;\n\t\t\t\tcontext.head.appendChild(base);\n\t\t\t} else {\n\t\t\t\tcontext = document;\n\t\t\t}\n\t\t}\n\n\t\tparsed = rsingleTag.exec(data);\n\t\tscripts = !keepScripts && [];\n\n\t\t// Single tag\n\t\tif (parsed) {\n\t\t\treturn [context.createElement(parsed[1])];\n\t\t}\n\n\t\tparsed = buildFragment([data], context, scripts);\n\n\t\tif (scripts && scripts.length) {\n\t\t\tjQuery(scripts).remove();\n\t\t}\n\n\t\treturn jQuery.merge([], parsed.childNodes);\n\t};\n\n\n\t/**\n\t * Load a url into a page\n\t */\n\tjQuery.fn.load = function (url, params, callback) {\n\t\tvar selector, type, response,\n\t\t\tself = this,\n\t\t\toff = url.indexOf(\" \");\n\n\t\tif (off > -1) {\n\t\t\tselector = stripAndCollapse(url.slice(off));\n\t\t\turl = url.slice(0, off);\n\t\t}\n\n\t\t// If it's a function\n\t\tif (isFunction(params)) {\n\n\t\t\t// We assume that it's the callback\n\t\t\tcallback = params;\n\t\t\tparams = undefined;\n\n\t\t\t// Otherwise, build a param string\n\t\t} else if (params && typeof params === \"object\") {\n\t\t\ttype = \"POST\";\n\t\t}\n\n\t\t// If we have elements to modify, make the request\n\t\tif (self.length > 0) {\n\t\t\tjQuery.ajax({\n\t\t\t\turl: url,\n\n\t\t\t\t// If \"type\" variable is undefined, then \"GET\" method will be used.\n\t\t\t\t// Make value of this field explicit since\n\t\t\t\t// user can override it through ajaxSetup method\n\t\t\t\ttype: type || \"GET\",\n\t\t\t\tdataType: \"html\",\n\t\t\t\tdata: params\n\t\t\t}).done(function (responseText) {\n\n\t\t\t\t// Save response for use in complete callback\n\t\t\t\tresponse = arguments;\n\n\t\t\t\tself.html(selector ?\n\n\t\t\t\t\t// If a selector was specified, locate the right elements in a dummy div\n\t\t\t\t\t// Exclude scripts to avoid IE 'Permission Denied' errors\n\t\t\t\t\tjQuery(\"<div>\").append(jQuery.parseHTML(responseText)).find(selector) :\n\n\t\t\t\t\t// Otherwise use the full result\n\t\t\t\t\tresponseText);\n\n\t\t\t\t// If the request succeeds, this function gets \"data\", \"status\", \"jqXHR\"\n\t\t\t\t// but they are ignored because response was set above.\n\t\t\t\t// If it fails, this function gets \"jqXHR\", \"status\", \"error\"\n\t\t\t}).always(callback && function (jqXHR, status) {\n\t\t\t\tself.each(function () {\n\t\t\t\t\tcallback.apply(this, response || [jqXHR.responseText, status, jqXHR]);\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\n\t\treturn this;\n\t};\n\n\n\n\n\tjQuery.expr.pseudos.animated = function (elem) {\n\t\treturn jQuery.grep(jQuery.timers, function (fn) {\n\t\t\treturn elem === fn.elem;\n\t\t}).length;\n\t};\n\n\n\n\n\tjQuery.offset = {\n\t\tsetOffset: function (elem, options, i) {\n\t\t\tvar curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition,\n\t\t\t\tposition = jQuery.css(elem, \"position\"),\n\t\t\t\tcurElem = jQuery(elem),\n\t\t\t\tprops = {};\n\n\t\t\t// Set position first, in-case top/left are set even on static elem\n\t\t\tif (position === \"static\") {\n\t\t\t\telem.style.position = \"relative\";\n\t\t\t}\n\n\t\t\tcurOffset = curElem.offset();\n\t\t\tcurCSSTop = jQuery.css(elem, \"top\");\n\t\t\tcurCSSLeft = jQuery.css(elem, \"left\");\n\t\t\tcalculatePosition = (position === \"absolute\" || position === \"fixed\") &&\n\t\t\t\t(curCSSTop + curCSSLeft).indexOf(\"auto\") > -1;\n\n\t\t\t// Need to be able to calculate position if either\n\t\t\t// top or left is auto and position is either absolute or fixed\n\t\t\tif (calculatePosition) {\n\t\t\t\tcurPosition = curElem.position();\n\t\t\t\tcurTop = curPosition.top;\n\t\t\t\tcurLeft = curPosition.left;\n\n\t\t\t} else {\n\t\t\t\tcurTop = parseFloat(curCSSTop) || 0;\n\t\t\t\tcurLeft = parseFloat(curCSSLeft) || 0;\n\t\t\t}\n\n\t\t\tif (isFunction(options)) {\n\n\t\t\t\t// Use jQuery.extend here to allow modification of coordinates argument (gh-1848)\n\t\t\t\toptions = options.call(elem, i, jQuery.extend({}, curOffset));\n\t\t\t}\n\n\t\t\tif (options.top != null) {\n\t\t\t\tprops.top = (options.top - curOffset.top) + curTop;\n\t\t\t}\n\t\t\tif (options.left != null) {\n\t\t\t\tprops.left = (options.left - curOffset.left) + curLeft;\n\t\t\t}\n\n\t\t\tif (\"using\" in options) {\n\t\t\t\toptions.using.call(elem, props);\n\n\t\t\t} else {\n\t\t\t\tcurElem.css(props);\n\t\t\t}\n\t\t}\n\t};\n\n\tjQuery.fn.extend({\n\n\t\t// offset() relates an element's border box to the document origin\n\t\toffset: function (options) {\n\n\t\t\t// Preserve chaining for setter\n\t\t\tif (arguments.length) {\n\t\t\t\treturn options === undefined ?\n\t\t\t\t\tthis :\n\t\t\t\t\tthis.each(function (i) {\n\t\t\t\t\t\tjQuery.offset.setOffset(this, options, i);\n\t\t\t\t\t});\n\t\t\t}\n\n\t\t\tvar rect, win,\n\t\t\t\telem = this[0];\n\n\t\t\tif (!elem) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Return zeros for disconnected and hidden (display: none) elements (gh-2310)\n\t\t\t// Support: IE <=11 only\n\t\t\t// Running getBoundingClientRect on a\n\t\t\t// disconnected node in IE throws an error\n\t\t\tif (!elem.getClientRects().length) {\n\t\t\t\treturn { top: 0, left: 0 };\n\t\t\t}\n\n\t\t\t// Get document-relative position by adding viewport scroll to viewport-relative gBCR\n\t\t\trect = elem.getBoundingClientRect();\n\t\t\twin = elem.ownerDocument.defaultView;\n\t\t\treturn {\n\t\t\t\ttop: rect.top + win.pageYOffset,\n\t\t\t\tleft: rect.left + win.pageXOffset\n\t\t\t};\n\t\t},\n\n\t\t// position() relates an element's margin box to its offset parent's padding box\n\t\t// This corresponds to the behavior of CSS absolute positioning\n\t\tposition: function () {\n\t\t\tif (!this[0]) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar offsetParent, offset, doc,\n\t\t\t\telem = this[0],\n\t\t\t\tparentOffset = { top: 0, left: 0 };\n\n\t\t\t// position:fixed elements are offset from the viewport, which itself always has zero offset\n\t\t\tif (jQuery.css(elem, \"position\") === \"fixed\") {\n\n\t\t\t\t// Assume position:fixed implies availability of getBoundingClientRect\n\t\t\t\toffset = elem.getBoundingClientRect();\n\n\t\t\t} else {\n\t\t\t\toffset = this.offset();\n\n\t\t\t\t// Account for the *real* offset parent, which can be the document or its root element\n\t\t\t\t// when a statically positioned element is identified\n\t\t\t\tdoc = elem.ownerDocument;\n\t\t\t\toffsetParent = elem.offsetParent || doc.documentElement;\n\t\t\t\twhile (offsetParent &&\n\t\t\t\t\t(offsetParent === doc.body || offsetParent === doc.documentElement) &&\n\t\t\t\t\tjQuery.css(offsetParent, \"position\") === \"static\") {\n\n\t\t\t\t\toffsetParent = offsetParent.parentNode;\n\t\t\t\t}\n\t\t\t\tif (offsetParent && offsetParent !== elem && offsetParent.nodeType === 1) {\n\n\t\t\t\t\t// Incorporate borders into its offset, since they are outside its content origin\n\t\t\t\t\tparentOffset = jQuery(offsetParent).offset();\n\t\t\t\t\tparentOffset.top += jQuery.css(offsetParent, \"borderTopWidth\", true);\n\t\t\t\t\tparentOffset.left += jQuery.css(offsetParent, \"borderLeftWidth\", true);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Subtract parent offsets and element margins\n\t\t\treturn {\n\t\t\t\ttop: offset.top - parentOffset.top - jQuery.css(elem, \"marginTop\", true),\n\t\t\t\tleft: offset.left - parentOffset.left - jQuery.css(elem, \"marginLeft\", true)\n\t\t\t};\n\t\t},\n\n\t\t// This method will return documentElement in the following cases:\n\t\t// 1) For the element inside the iframe without offsetParent, this method will return\n\t\t//    documentElement of the parent window\n\t\t// 2) For the hidden or detached element\n\t\t// 3) For body or html element, i.e. in case of the html node - it will return itself\n\t\t//\n\t\t// but those exceptions were never presented as a real life use-cases\n\t\t// and might be considered as more preferable results.\n\t\t//\n\t\t// This logic, however, is not guaranteed and can change at any point in the future\n\t\toffsetParent: function () {\n\t\t\treturn this.map(function () {\n\t\t\t\tvar offsetParent = this.offsetParent;\n\n\t\t\t\twhile (offsetParent && jQuery.css(offsetParent, \"position\") === \"static\") {\n\t\t\t\t\toffsetParent = offsetParent.offsetParent;\n\t\t\t\t}\n\n\t\t\t\treturn offsetParent || documentElement;\n\t\t\t});\n\t\t}\n\t});\n\n\t// Create scrollLeft and scrollTop methods\n\tjQuery.each({ scrollLeft: \"pageXOffset\", scrollTop: \"pageYOffset\" }, function (method, prop) {\n\t\tvar top = \"pageYOffset\" === prop;\n\n\t\tjQuery.fn[method] = function (val) {\n\t\t\treturn access(this, function (elem, method, val) {\n\n\t\t\t\t// Coalesce documents and windows\n\t\t\t\tvar win;\n\t\t\t\tif (isWindow(elem)) {\n\t\t\t\t\twin = elem;\n\t\t\t\t} else if (elem.nodeType === 9) {\n\t\t\t\t\twin = elem.defaultView;\n\t\t\t\t}\n\n\t\t\t\tif (val === undefined) {\n\t\t\t\t\treturn win ? win[prop] : elem[method];\n\t\t\t\t}\n\n\t\t\t\tif (win) {\n\t\t\t\t\twin.scrollTo(\n\t\t\t\t\t\t!top ? val : win.pageXOffset,\n\t\t\t\t\t\ttop ? val : win.pageYOffset\n\t\t\t\t\t);\n\n\t\t\t\t} else {\n\t\t\t\t\telem[method] = val;\n\t\t\t\t}\n\t\t\t}, method, val, arguments.length);\n\t\t};\n\t});\n\n\t// Support: Safari <=7 - 9.1, Chrome <=37 - 49\n\t// Add the top/left cssHooks using jQuery.fn.position\n\t// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084\n\t// Blink bug: https://bugs.chromium.org/p/chromium/issues/detail?id=589347\n\t// getComputedStyle returns percent when specified for top/left/bottom/right;\n\t// rather than make the css module depend on the offset module, just check for it here\n\tjQuery.each([\"top\", \"left\"], function (_i, prop) {\n\t\tjQuery.cssHooks[prop] = addGetHookIf(support.pixelPosition,\n\t\t\tfunction (elem, computed) {\n\t\t\t\tif (computed) {\n\t\t\t\t\tcomputed = curCSS(elem, prop);\n\n\t\t\t\t\t// If curCSS returns percentage, fallback to offset\n\t\t\t\t\treturn rnumnonpx.test(computed) ?\n\t\t\t\t\t\tjQuery(elem).position()[prop] + \"px\" :\n\t\t\t\t\t\tcomputed;\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\t});\n\n\n\t// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods\n\tjQuery.each({ Height: \"height\", Width: \"width\" }, function (name, type) {\n\t\tjQuery.each({\n\t\t\tpadding: \"inner\" + name,\n\t\t\tcontent: type,\n\t\t\t\"\": \"outer\" + name\n\t\t}, function (defaultExtra, funcName) {\n\n\t\t\t// Margin is only for outerHeight, outerWidth\n\t\t\tjQuery.fn[funcName] = function (margin, value) {\n\t\t\t\tvar chainable = arguments.length && (defaultExtra || typeof margin !== \"boolean\"),\n\t\t\t\t\textra = defaultExtra || (margin === true || value === true ? \"margin\" : \"border\");\n\n\t\t\t\treturn access(this, function (elem, type, value) {\n\t\t\t\t\tvar doc;\n\n\t\t\t\t\tif (isWindow(elem)) {\n\n\t\t\t\t\t\t// $( window ).outerWidth/Height return w/h including scrollbars (gh-1729)\n\t\t\t\t\t\treturn funcName.indexOf(\"outer\") === 0 ?\n\t\t\t\t\t\t\telem[\"inner\" + name] :\n\t\t\t\t\t\t\telem.document.documentElement[\"client\" + name];\n\t\t\t\t\t}\n\n\t\t\t\t\t// Get document width or height\n\t\t\t\t\tif (elem.nodeType === 9) {\n\t\t\t\t\t\tdoc = elem.documentElement;\n\n\t\t\t\t\t\t// Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height],\n\t\t\t\t\t\t// whichever is greatest\n\t\t\t\t\t\treturn Math.max(\n\t\t\t\t\t\t\telem.body[\"scroll\" + name], doc[\"scroll\" + name],\n\t\t\t\t\t\t\telem.body[\"offset\" + name], doc[\"offset\" + name],\n\t\t\t\t\t\t\tdoc[\"client\" + name]\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\n\t\t\t\t\treturn value === undefined ?\n\n\t\t\t\t\t\t// Get width or height on the element, requesting but not forcing parseFloat\n\t\t\t\t\t\tjQuery.css(elem, type, extra) :\n\n\t\t\t\t\t\t// Set width or height on the element\n\t\t\t\t\t\tjQuery.style(elem, type, value, extra);\n\t\t\t\t}, type, chainable ? margin : undefined, chainable);\n\t\t\t};\n\t\t});\n\t});\n\n\n\tjQuery.each([\n\t\t\"ajaxStart\",\n\t\t\"ajaxStop\",\n\t\t\"ajaxComplete\",\n\t\t\"ajaxError\",\n\t\t\"ajaxSuccess\",\n\t\t\"ajaxSend\"\n\t], function (_i, type) {\n\t\tjQuery.fn[type] = function (fn) {\n\t\t\treturn this.on(type, fn);\n\t\t};\n\t});\n\n\n\n\n\tjQuery.fn.extend({\n\n\t\tbind: function (types, data, fn) {\n\t\t\treturn this.on(types, null, data, fn);\n\t\t},\n\t\tunbind: function (types, fn) {\n\t\t\treturn this.off(types, null, fn);\n\t\t},\n\n\t\tdelegate: function (selector, types, data, fn) {\n\t\t\treturn this.on(types, selector, data, fn);\n\t\t},\n\t\tundelegate: function (selector, types, fn) {\n\n\t\t\t// ( namespace ) or ( selector, types [, fn] )\n\t\t\treturn arguments.length === 1 ?\n\t\t\t\tthis.off(selector, \"**\") :\n\t\t\t\tthis.off(types, selector || \"**\", fn);\n\t\t},\n\n\t\thover: function (fnOver, fnOut) {\n\t\t\treturn this.mouseenter(fnOver).mouseleave(fnOut || fnOver);\n\t\t}\n\t});\n\n\tjQuery.each(\n\t\t(\"blur focus focusin focusout resize scroll click dblclick \" +\n\t\t\t\"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave \" +\n\t\t\t\"change select submit keydown keypress keyup contextmenu\").split(\" \"),\n\t\tfunction (_i, name) {\n\n\t\t\t// Handle event binding\n\t\t\tjQuery.fn[name] = function (data, fn) {\n\t\t\t\treturn arguments.length > 0 ?\n\t\t\t\t\tthis.on(name, null, data, fn) :\n\t\t\t\t\tthis.trigger(name);\n\t\t\t};\n\t\t}\n\t);\n\n\n\n\n\t// Support: Android <=4.0 only\n\t// Make sure we trim BOM and NBSP\n\t// Require that the \"whitespace run\" starts from a non-whitespace\n\t// to avoid O(N^2) behavior when the engine would try matching \"\\s+$\" at each space position.\n\tvar rtrim = /^[\\s\\uFEFF\\xA0]+|([^\\s\\uFEFF\\xA0])[\\s\\uFEFF\\xA0]+$/g;\n\n\t// Bind a function to a context, optionally partially applying any\n\t// arguments.\n\t// jQuery.proxy is deprecated to promote standards (specifically Function#bind)\n\t// However, it is not slated for removal any time soon\n\tjQuery.proxy = function (fn, context) {\n\t\tvar tmp, args, proxy;\n\n\t\tif (typeof context === \"string\") {\n\t\t\ttmp = fn[context];\n\t\t\tcontext = fn;\n\t\t\tfn = tmp;\n\t\t}\n\n\t\t// Quick check to determine if target is callable, in the spec\n\t\t// this throws a TypeError, but we will just return undefined.\n\t\tif (!isFunction(fn)) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\t// Simulated bind\n\t\targs = slice.call(arguments, 2);\n\t\tproxy = function () {\n\t\t\treturn fn.apply(context || this, args.concat(slice.call(arguments)));\n\t\t};\n\n\t\t// Set the guid of unique handler to the same of original handler, so it can be removed\n\t\tproxy.guid = fn.guid = fn.guid || jQuery.guid++;\n\n\t\treturn proxy;\n\t};\n\n\tjQuery.holdReady = function (hold) {\n\t\tif (hold) {\n\t\t\tjQuery.readyWait++;\n\t\t} else {\n\t\t\tjQuery.ready(true);\n\t\t}\n\t};\n\tjQuery.isArray = Array.isArray;\n\tjQuery.parseJSON = JSON.parse;\n\tjQuery.nodeName = nodeName;\n\tjQuery.isFunction = isFunction;\n\tjQuery.isWindow = isWindow;\n\tjQuery.camelCase = camelCase;\n\tjQuery.type = toType;\n\n\tjQuery.now = Date.now;\n\n\tjQuery.isNumeric = function (obj) {\n\n\t\t// As of jQuery 3.0, isNumeric is limited to\n\t\t// strings and numbers (primitives or objects)\n\t\t// that can be coerced to finite numbers (gh-2662)\n\t\tvar type = jQuery.type(obj);\n\t\treturn (type === \"number\" || type === \"string\") &&\n\n\t\t\t// parseFloat NaNs numeric-cast false positives (\"\")\n\t\t\t// ...but misinterprets leading-number strings, particularly hex literals (\"0x...\")\n\t\t\t// subtraction forces infinities to NaN\n\t\t\t!isNaN(obj - parseFloat(obj));\n\t};\n\n\tjQuery.trim = function (text) {\n\t\treturn text == null ?\n\t\t\t\"\" :\n\t\t\t(text + \"\").replace(rtrim, \"$1\");\n\t};\n\n\n\n\t// Register as a named AMD module, since jQuery can be concatenated with other\n\t// files that may use define, but not via a proper concatenation script that\n\t// understands anonymous AMD modules. A named AMD is safest and most robust\n\t// way to register. Lowercase jquery is used because AMD module names are\n\t// derived from file names, and jQuery is normally delivered in a lowercase\n\t// file name. Do this after creating the global so that if an AMD module wants\n\t// to call noConflict to hide this version of jQuery, it will work.\n\n\t// Note that for maximum portability, libraries that are not jQuery should\n\t// declare themselves as anonymous modules, and avoid setting a global if an\n\t// AMD loader is present. jQuery is a special case. For more information, see\n\t// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon\n\n\tif (typeof define === \"function\" && define.amd) {\n\t\tdefine(\"jquery\", [], function () {\n\t\t\treturn jQuery;\n\t\t});\n\t}\n\n\n\n\n\tvar\n\n\t\t// Map over jQuery in case of overwrite\n\t\t_jQuery = window.jQuery,\n\n\t\t// Map over the $ in case of overwrite\n\t\t_$ = window.$;\n\n\tjQuery.noConflict = function (deep) {\n\t\tif (window.$ === jQuery) {\n\t\t\twindow.$ = _$;\n\t\t}\n\n\t\tif (deep && window.jQuery === jQuery) {\n\t\t\twindow.jQuery = _jQuery;\n\t\t}\n\n\t\treturn jQuery;\n\t};\n\n\t// Expose jQuery and $ identifiers, even in AMD\n\t// (trac-7102#comment:10, https://github.com/jquery/jquery/pull/557)\n\t// and CommonJS for browser emulators (trac-13566)\n\tif (typeof noGlobal === \"undefined\") {\n\t\twindow.jQuery = window.$ = jQuery;\n\t}\n\n\n\n\n\treturn jQuery;\n});"
  },
  {
    "path": "src/sourceDev.WebApp/SharedThemes/sandstone/Shared/_Layout.cshtml",
    "content": "﻿@inject ISiteContextResolver siteResolver\n@inject ICoreThemeHelper themeHelper\n@{\n    var themeSettings = themeHelper.GetThemeSettings();\n    @*\n        These settings can be set by a main view to show additional columns.\n        Views that push content into the optional sections SideNav, AsidePrimary, and AsideSecondary\n        are obligated to set the needed viewtate property to true to show the section,\n        otherwise an error will occur.\n        The sideNav column also supports a toggle so it can be hidden and toggled visible even though it renders.\n    *@\n    bool sideNavVisible = true.Equals(ViewData[\"SideNavVisible\"]);\n    string sideNavToggleClass = ViewData[\"SideNavToggle\"]?.ToString() ?? \"collapse\";\n    bool asidePrimaryVisible = true.Equals(ViewData[\"AsidePrimaryVisible\"]);\n    bool asideSecondaryVisible = true.Equals(ViewData[\"AsideSecondaryVisible\"]);\n    var Tenant = await siteResolver.ResolveSite(Context.Request.Host.Host, Context.Request.Path);\n    var siteRoot = \"\";\n    if (!string.IsNullOrWhiteSpace(Tenant.SiteFolderName)) { siteRoot = \"/\" + Tenant.SiteFolderName; }\n    \n}\n<!DOCTYPE html>\n<html lang=\"@CultureInfo.CurrentUICulture.Name\">\n<head>\n    <meta charset=\"utf-8\" />\n    <title>@ViewData[\"Title\"] - @(Tenant?.SiteName ?? \"Sample\")</title>\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1, shrink-to-fit=no\">\n    @RenderSection(\"Meta\", required: false)\n    <environment names=\"Development\">\n        <link rel=\"stylesheet\" href=\"~/css/bootstrap.css\" cs-resolve-theme-resource=\"true\" cs-shared-theme=\"true\" cs-tenant=\"@Tenant\" />\n        <link rel=\"stylesheet\" href=\"~/css/fontawesome-all.min.css\" cs-resolve-theme-resource=\"true\" cs-shared-theme=\"true\" cs-tenant=\"@Tenant\" />\n        <link rel=\"stylesheet\" href=\"~/css/site.css\" cs-resolve-theme-resource=\"true\" cs-shared-theme=\"true\" cs-tenant=\"@Tenant\" asp-append-version=\"true\" />\n    </environment>\n    <environment names=\"Staging,Production\">\n        <link rel=\"stylesheet\" href=\"~/css/bootstrap.min.css\" cs-resolve-theme-resource=\"true\" cs-shared-theme=\"true\" cs-tenant=\"@Tenant\" />\n        <link rel=\"stylesheet\" href=\"~/css/fontawesome-all.min.css\" cs-resolve-theme-resource=\"true\" cs-shared-theme=\"true\" cs-tenant=\"@Tenant\" />\n        <link rel=\"stylesheet\" href=\"~/css/site.min.css\" cs-resolve-theme-resource=\"true\" cs-shared-theme=\"true\" cs-tenant=\"@Tenant\" asp-append-version=\"true\" />\n    </environment>\n    @RenderSection(\"Styles\", required: false)    \n    \n    <google-analytics profile-id=\"@Tenant.GoogleAnalyticsProfileId\" user-id=\"@User.GetUserId()\"></google-analytics>\n    <base href=\"@Context.Request.Path\" />\n</head>\n<body class=\"d-flex flex-column @ViewData[\"BodyClass\"]\">\n    <header class=\"bg-white\">\n        <a id=\"skippy\" class=\"visually-hidden visually-hidden-focusable\" href=\"#content\">\n            <div class=\"container\">\n                <span class=\"skiplink-text\">Skip to main content</span>\n            </div>\n        </a>\n        <div class=\"fixed-top container-fluid brand-header bg-white\">\n            <div class=\"d-flex align-items-center bg-white\">\n                @if (!string.IsNullOrWhiteSpace(Tenant.LogoUrl))\n                {\n                    <div>\n                         <partial name=\"SiteLogoPartial\" model=\"@Tenant\" />\n                    </div>\n                }\n                @if (Tenant.ShowSiteNameLink)\n                {\n                    <div class=\"align-self-center pt-4 pt-sm-0\">\n                         <partial name=\"SiteTitlePartial\" model=\"@Tenant\" />\n                    </div>\n                }\n                @if (!string.IsNullOrWhiteSpace(Tenant.HeaderContent))\n                {\n                    <div class=\"flex-fill align-self-center pt-3 d-none d-md-block\">\n                        <partial name=\"SiteHeaderPartial\" />\n                    </div>\n                }\n            </div>\n        </div>\n        <nav class=\"navbar navbar-expand-md navbar-dark fixed-top bg-dark pt-0 pb-0\">\n            <button class=\"navbar-toggler\" type=\"button\" data-bs-toggle=\"collapse\" data-bs-target=\"#navbarNavDropdown\" aria-controls=\"navbarNavDropdown\" aria-expanded=\"false\" aria-label=\"Toggle navigation\">\n                <span class=\"navbar-toggler-icon\"></span>\n            </button>\n\n            <div class=\"collapse navbar-collapse bg-dark ps-2\" id=\"navbarNavDropdown\">\n                @await Component.InvokeAsync(\"Navigation\", new { viewName = \"Bootstrap5TopNavWithDropdowns\", filterName = NamedNavigationFilters.TopNav, startingNodeKey = \"\" })\n                <partial name=\"_LoginPartialWithDropdowns\" />\n            </div>\n        </nav>\n    </header>\n    <div id=\"wrapper\" class=\"container cs-container flex-fill\">\n        @await Component.InvokeAsync(\"Navigation\", new { viewName = \"Bootstrap5Breadcrumbs\", filterName = NamedNavigationFilters.Breadcrumbs, startingNodeKey = \"\" })\n        <div class=\"row\">\n            <main id=\"content\" class=\"col order-3\">\n                <partial name=\"AlertsPartial\" />\n                <partial name=\"_CookieConsentPartial\" />\n                <partial name=\"_AutoLogoutWarningPartial\" />\n                @RenderBody()\n            </main>\n            @if (sideNavVisible)\n            {\n                <nav id=\"sidenavmenu\" class=\" col col-3 order-1 @sideNavToggleClass\">\n                    @RenderSection(\"SideNav\", required: false)\n                </nav>\n\n            }\n            @if (asideSecondaryVisible)\n            {\n                <aside id=\"asideSecondary\" class=\"col col-1 order-2\">\n                    @RenderSection(\"AsideSecondary\", required: false)\n                </aside>\n\n            }\n            @if (asidePrimaryVisible)\n            {\n                <aside id=\"asidePrimary\" class=\"col-12 col-md-3 col-sm-12  col-sm-12 order-4\">\n                    @RenderSection(\"AsidePrimary\", required: false)\n                </aside>\n\n            }\n        </div>\n    </div>\n   <footer class=\"sticky-bottom border pt-2 h-100\">\n        <div class=\"w-100 text-center\">\n            <partial name=\"SiteFooterPartial\" />\n        </div>\n        <div class=\"d-flex flex-wrap flex-grow justify-content-center\">\n            <div class=\"p-2\">\n            <ul class=\"list-unstyled d-flex flex-wrap\">\n                @if (Tenant != null && !string.IsNullOrWhiteSpace(Tenant.PrivacyPolicy))\n                {\n                    <li class=\"border-left ps-2 me-2\">\n                        <a asp-controller=\"Privacy\" asp-action=\"Index\">Privacy Policy</a>\n                    </li>\n                }\n                <li class=\"border-left ps-2 me-2\">\n                    @* you are free to remove the powered by cloudscribe link but we appreciate it if you choose to keep it! *@\n                    <a class=\"text-nowrap\" target=\"_blank\" href=\"https://www.cloudscribe.com/?utm_source=@Context.Request.Host.Value&amp;utm_medium=referral&amp;utm_campaign=poweredbycloudscribe\">Powered by cloudscribe</a>\n                </li>\n            </ul>\n        </div>\n        <div class=\"ps-sm-2  text-center w-100\"><span class=\"text-nowrap\">Copyright &copy; @DateTime.Now.Year</span><span class=\"d-none d-sm-inline\"> - </span><span> @(Tenant?.SiteName ?? \"Sample\")</span></div>\n        <partial name=\"_CookieConsentRevokePartial\" />\n        </div>\n    </footer>\n    @RenderSection(\"Toolbar\", required: false)\n    <environment names=\"Development\">\n        <script src=\"~/js/jquery.js\" cs-resolve-theme-resource=\"true\" cs-shared-theme=\"true\" cs-tenant=\"@Tenant\"></script>\n        <script src=\"~/js/bootstrap.bundle.js\" cs-resolve-theme-resource=\"true\" cs-shared-theme=\"true\" cs-tenant=\"@Tenant\"></script>\n        <script src=\"~/cr/js/bs4.smartmenus.min.js\"></script>\n    </environment>\n    <environment names=\"Staging,Production\">\n        <script src=\"~/js/jquery.min.js\" cs-resolve-theme-resource=\"true\" cs-shared-theme=\"true\" cs-tenant=\"@Tenant\"></script>\n        <script src=\"~/js/bootstrap.bundle.min.js\" cs-resolve-theme-resource=\"true\" cs-shared-theme=\"true\" cs-tenant=\"@Tenant\"></script>\n        <script src=\"~/cr/js/bs4.smartmenus.min.js\"></script>\n    </environment>\n    @RenderSection(\"Bottom\", required: false)\n    @RenderSection(\"Scripts\", required: false)     \n    @Html.RenderResources(\"js\") @*render any js resources declared via helpers in partial views etc*@\n    <add-this profile-id=\"@Tenant.AddThisDotComUsername\" async></add-this>\n</body>\n</html>\n"
  },
  {
    "path": "src/sourceDev.WebApp/SharedThemes/sandstone/wwwroot/css/_bootswatch.scss",
    "content": "// Sandstone 5.1.3\n// Bootswatch\n\n\n// Variables\n\n$web-font-path: \"https://fonts.googleapis.com/css2?family=Roboto:wght@400;500;700&display=swap\" !default;\n@if $web-font-path {\n  @import url($web-font-path);\n}\n\n// Navbar\n\n.bg-primary {\n  background-color: $dark !important;\n}\n\n.bg-dark {\n  background-color: $secondary !important;\n}\n\n.bg-light {\n  background-color: $gray-200 !important;\n}\n\n.sandstone {\n  font-size: 13px;\n  line-height: 22px;\n  font-weight: 500;\n  text-transform: uppercase;\n}\n\n.navbar {\n  .nav-link {\n    @extend .sandstone;\n  }\n\n  &-form input,\n  &-form .form-control {\n    border: none;\n  }\n}\n\n// Buttons\n\n.btn {\n  @extend .sandstone;\n\n  &:hover {\n    border-color: transparent;\n  }\n\n  &-success,\n  &-warning {\n    color: $white;\n  }\n}\n\n// Tables\n\n.table {\n  .thead-dark th {\n    background-color: $dark;\n  }\n}\n\n// Forms\n\ninput,\n.form-control {\n  @include box-shadow(none);\n\n  &:focus {\n    @include box-shadow(none);\n  }\n}\n\n// Navs\n\n.nav-tabs {\n  .nav-link {\n    @extend .sandstone;\n    background-color: $gray-200;\n    border-color: $gray-300;\n  }\n\n  .nav-link,\n  .nav-link:hover,\n  .nav-link:focus {\n    color: $gray-600;\n  }\n\n  .nav-link.disabled,\n  .nav-link.disabled:hover,\n  .nav-link.disabled:focus {\n    background-color: $gray-200;\n    border-color: $gray-300;\n    color: $nav-link-disabled-color;\n  }\n}\n\n.nav-pills {\n  .nav-link {\n    @extend .sandstone;\n    border: 1px solid transparent;\n    color: $gray-600;\n  }\n\n  .nav-link.active,\n  .nav-link:hover,\n  .nav-link:focus {\n    background-color: $gray-200;\n    border-color: $gray-300;\n  }\n\n  .nav-link.disabled,\n  .nav-link.disabled:hover {\n    background-color: transparent;\n    border-color: transparent;\n    color: $gray-300;\n  }\n}\n\n\n.breadcrumb {\n  @extend .sandstone;\n  border: 1px solid $gray-300;\n}\n\n.pagination {\n  @extend .sandstone;\n\n  a:hover {\n    text-decoration: none;\n  }\n}\n\n.dropdown-menu {\n  .dropdown-item {\n    @extend .sandstone;\n  }\n}\n\n// Indicators\n\n.alert {\n  color: $white;\n\n  a,\n  .alert-link {\n    color: $white;\n    text-decoration: underline;\n  }\n\n  &-primary {\n    &,\n    > th,\n    > td {\n      background-color: $primary;\n    }\n  }\n\n  &-secondary {\n    &,\n    > th,\n    > td {\n      background-color: $secondary;\n    }\n  }\n\n  &-success {\n    &,\n    > th,\n    > td {\n      background-color: $success;\n    }\n  }\n\n  &-info {\n    &,\n    > th,\n    > td {\n      background-color: $info;\n    }\n  }\n\n  &-danger {\n    &,\n    > th,\n    > td {\n      background-color: $danger;\n    }\n  }\n\n  &-warning {\n    &,\n    > th,\n    > td {\n      background-color: $warning;\n    }\n  }\n\n  &-dark {\n    &,\n    > th,\n    > td {\n      background-color: $dark;\n    }\n  }\n\n  &-light {\n    &,\n    > th,\n    > td {\n      background-color: $light;\n    }\n\n    &,\n    a:not(.btn),\n    .alert-link {\n      color: $body-color;\n    }\n  }\n}\n\n.badge {\n  &.bg-light {\n    color: $dark;\n  }\n}\n\n.tooltip {\n  @extend .sandstone;\n}\n\n// Containers\n\n.modal,\n.toast {\n  .btn-close {\n    background-image: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23dfd7ca'><path d='M.293.293a1 1 0 011.414 0L8 6.586 14.293.293a1 1 0 111.414 1.414L9.414 8l6.293 6.293a1 1 0 01-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 01-1.414-1.414L6.586 8 .293 1.707a1 1 0 010-1.414z'/></svg>\");\n  }\n}\n"
  },
  {
    "path": "src/sourceDev.WebApp/SharedThemes/sandstone/wwwroot/css/_variables.scss",
    "content": "// Sandstone 5.1.3\n// Bootswatch\n\n$theme: \"sandstone\" !default;\n\n//\n// Color system\n//\n\n$white:    #fff !default;\n$gray-100: #f8f9fa !default;\n$gray-200: #f8f5f0 !default;\n$gray-300: #dfd7ca !default;\n$gray-400: #ced4da !default;\n$gray-500: #98978b !default;\n$gray-600: #8e8c84 !default;\n$gray-700: #495057 !default;\n$gray-800: #3e3f3a !default;\n$gray-900: #212529 !default;\n$black:    #000 !default;\n\n$blue:    #325d88 !default;\n$indigo:  #6610f2 !default;\n$purple:  #6f42c1 !default;\n$pink:    #e83e8c !default;\n$red:     #d9534f !default;\n$orange:  #f47c3c !default;\n$yellow:  #ffc107 !default;\n$green:   #93c54b !default;\n$teal:    #20c997 !default;\n$cyan:    #29abe0 !default;\n\n$primary:       $blue !default;\n$secondary:     $gray-600 !default;\n$success:       $green !default;\n$info:          $cyan !default;\n$warning:       $orange !default;\n$danger:        $red !default;\n$light:         $gray-200 !default;\n$dark:          $gray-800 !default;\n\n$min-contrast-ratio:   2 !default;\n\n// Body\n\n$body-color:                $gray-800 !default;\n\n// Links\n\n$link-color:                $success !default;\n\n// Fonts\n\n// stylelint-disable-next-line value-keyword-case\n$font-family-sans-serif:      Roboto, -apple-system, BlinkMacSystemFont, \"Segoe UI\", \"Helvetica Neue\", Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\" !default;\n$headings-font-weight:        400 !default;\n\n// Dropdowns\n\n$dropdown-link-color:               $gray-600 !default;\n$dropdown-link-hover-color:         $dropdown-link-color !default;\n$dropdown-link-hover-bg:            $gray-200 !default;\n$dropdown-link-active-color:        $dropdown-link-color !default;\n$dropdown-link-active-bg:           $dropdown-link-hover-bg !default;\n\n// Navs\n\n$nav-link-padding-x:                .9rem !default;\n$nav-link-disabled-color:           $gray-300 !default;\n$nav-tabs-border-color:             $gray-300 !default;\n$nav-tabs-link-hover-border-color:  $gray-300 !default;\n$nav-tabs-link-active-bg:           $white !default;\n$nav-pills-link-active-color:       $gray-600 !default;\n$nav-pills-link-active-bg:          $gray-200 !default;\n\n// Navbar\n\n$navbar-dark-hover-color:           $white !default;\n$navbar-light-hover-color:          $black !default;\n$navbar-light-active-color:         $black !default;\n\n// Pagination\n\n$pagination-color:                  $gray-600 !default;\n$pagination-bg:                     $gray-200 !default;\n$pagination-border-color:           $gray-300 !default;\n$pagination-hover-color:            $pagination-color !default;\n$pagination-active-color:           $pagination-color !default;\n$pagination-active-bg:              $gray-300 !default;\n$pagination-active-border-color:    $gray-300 !default;\n$pagination-disabled-color:         $gray-300 !default;\n$pagination-disabled-bg:            $gray-200 !default;\n$pagination-disabled-border-color:  $pagination-border-color !default;\n\n// Cards\n\n$card-border-color:                 rgba($gray-300, .75) !default;\n$card-cap-bg:                       rgba($gray-200, .25) !default;\n\n// Popovers\n\n$popover-header-bg:                 $gray-200 !default;\n\n// Modals\n\n$modal-content-border-color:        $gray-300 !default;\n$modal-header-border-color:         $modal-content-border-color !default;\n\n// Progress bars\n\n$progress-bg:                       $gray-300 !default;\n$progress-border-radius:            10px !default;\n$progress-bar-color:                $primary !default;\n\n// List group\n\n$list-group-border-color:           $gray-300 !default;\n$list-group-hover-bg:               $gray-200 !default;\n$list-group-active-color:           $body-color !default;\n$list-group-active-bg:              $gray-200 !default;\n$list-group-active-border-color:    $gray-300 !default;\n$list-group-disabled-color:         $gray-500 !default;\n$list-group-disabled-bg:            $white !default;\n$list-group-action-color:           $list-group-active-color !default;\n$list-group-action-active-color:    $list-group-active-color !default;\n$list-group-action-active-bg:       $gray-300 !default;\n\n// Breadcrumbs\n\n$breadcrumb-padding-y:              .375rem !default;\n$breadcrumb-padding-x:              .75rem !default;\n$breadcrumb-bg:                     $pagination-bg !default;\n$breadcrumb-border-radius:          .25rem !default;\n\n// Close\n\n$btn-close-color:            $white !default;\n$btn-close-opacity:          .8 !default;\n$btn-close-hover-opacity:    1 !default;\n"
  },
  {
    "path": "src/sourceDev.WebApp/SharedThemes/sandstone/wwwroot/css/bootstrap.css",
    "content": "/*!\n * Bootswatch v5.1.3\n * Homepage: https://bootswatch.com\n * Copyright 2012-2021 Thomas Park\n * Licensed under MIT\n * Based on Bootstrap\n*/\n/*!\n * Bootstrap v5.1.3 (https://getbootstrap.com/)\n * Copyright 2011-2021 The Bootstrap Authors\n * Copyright 2011-2021 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n@import url(\"https://fonts.googleapis.com/css2?family=Roboto:wght@400;500;700&display=swap\");\n:root {\n  --bs-blue: #325d88;\n  --bs-indigo: #6610f2;\n  --bs-purple: #6f42c1;\n  --bs-pink: #e83e8c;\n  --bs-red: #d9534f;\n  --bs-orange: #f47c3c;\n  --bs-yellow: #ffc107;\n  --bs-green: #93c54b;\n  --bs-teal: #20c997;\n  --bs-cyan: #29abe0;\n  --bs-white: #fff;\n  --bs-gray: #8e8c84;\n  --bs-gray-dark: #3e3f3a;\n  --bs-gray-100: #f8f9fa;\n  --bs-gray-200: #f8f5f0;\n  --bs-gray-300: #dfd7ca;\n  --bs-gray-400: #ced4da;\n  --bs-gray-500: #98978b;\n  --bs-gray-600: #8e8c84;\n  --bs-gray-700: #495057;\n  --bs-gray-800: #3e3f3a;\n  --bs-gray-900: #212529;\n  --bs-primary: #325d88;\n  --bs-secondary: #8e8c84;\n  --bs-success: #93c54b;\n  --bs-info: #29abe0;\n  --bs-warning: #f47c3c;\n  --bs-danger: #d9534f;\n  --bs-light: #f8f5f0;\n  --bs-dark: #3e3f3a;\n  --bs-primary-rgb: 50, 93, 136;\n  --bs-secondary-rgb: 142, 140, 132;\n  --bs-success-rgb: 147, 197, 75;\n  --bs-info-rgb: 41, 171, 224;\n  --bs-warning-rgb: 244, 124, 60;\n  --bs-danger-rgb: 217, 83, 79;\n  --bs-light-rgb: 248, 245, 240;\n  --bs-dark-rgb: 62, 63, 58;\n  --bs-white-rgb: 255, 255, 255;\n  --bs-black-rgb: 0, 0, 0;\n  --bs-body-color-rgb: 62, 63, 58;\n  --bs-body-bg-rgb: 255, 255, 255;\n  --bs-font-sans-serif: Roboto, -apple-system, BlinkMacSystemFont, \"Segoe UI\", \"Helvetica Neue\", Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\";\n  --bs-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n  --bs-gradient: linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));\n  --bs-body-font-family: var(--bs-font-sans-serif);\n  --bs-body-font-size: 1rem;\n  --bs-body-font-weight: 400;\n  --bs-body-line-height: 1.5;\n  --bs-body-color: #3e3f3a;\n  --bs-body-bg: #fff;\n}\n\n*,\n*::before,\n*::after {\n  box-sizing: border-box;\n}\n\n@media (prefers-reduced-motion: no-preference) {\n  :root {\n    scroll-behavior: smooth;\n  }\n}\n\nbody {\n  margin: 0;\n  font-family: var(--bs-body-font-family);\n  font-size: var(--bs-body-font-size);\n  font-weight: var(--bs-body-font-weight);\n  line-height: var(--bs-body-line-height);\n  color: var(--bs-body-color);\n  text-align: var(--bs-body-text-align);\n  background-color: var(--bs-body-bg);\n  -webkit-text-size-adjust: 100%;\n  -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\n\nhr {\n  margin: 1rem 0;\n  color: inherit;\n  background-color: currentColor;\n  border: 0;\n  opacity: 0.25;\n}\n\nhr:not([size]) {\n  height: 1px;\n}\n\nh1, .h1, h2, .h2, h3, .h3, h4, .h4, h5, .h5, h6, .h6 {\n  margin-top: 0;\n  margin-bottom: 0.5rem;\n  font-weight: 400;\n  line-height: 1.2;\n}\n\nh1, .h1 {\n  font-size: calc(1.375rem + 1.5vw);\n}\n\n@media (min-width: 1200px) {\n  h1, .h1 {\n    font-size: 2.5rem;\n  }\n}\n\nh2, .h2 {\n  font-size: calc(1.325rem + 0.9vw);\n}\n\n@media (min-width: 1200px) {\n  h2, .h2 {\n    font-size: 2rem;\n  }\n}\n\nh3, .h3 {\n  font-size: calc(1.3rem + 0.6vw);\n}\n\n@media (min-width: 1200px) {\n  h3, .h3 {\n    font-size: 1.75rem;\n  }\n}\n\nh4, .h4 {\n  font-size: calc(1.275rem + 0.3vw);\n}\n\n@media (min-width: 1200px) {\n  h4, .h4 {\n    font-size: 1.5rem;\n  }\n}\n\nh5, .h5 {\n  font-size: 1.25rem;\n}\n\nh6, .h6 {\n  font-size: 1rem;\n}\n\np {\n  margin-top: 0;\n  margin-bottom: 1rem;\n}\n\nabbr[title],\nabbr[data-bs-original-title] {\n  -webkit-text-decoration: underline dotted;\n  text-decoration: underline dotted;\n  cursor: help;\n  -webkit-text-decoration-skip-ink: none;\n  text-decoration-skip-ink: none;\n}\n\naddress {\n  margin-bottom: 1rem;\n  font-style: normal;\n  line-height: inherit;\n}\n\nol,\nul {\n  padding-left: 2rem;\n}\n\nol,\nul,\ndl {\n  margin-top: 0;\n  margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n  margin-bottom: 0;\n}\n\ndt {\n  font-weight: 700;\n}\n\ndd {\n  margin-bottom: .5rem;\n  margin-left: 0;\n}\n\nblockquote {\n  margin: 0 0 1rem;\n}\n\nb,\nstrong {\n  font-weight: bolder;\n}\n\nsmall, .small {\n  font-size: 0.875em;\n}\n\nmark, .mark {\n  padding: 0.2em;\n  background-color: #fcf8e3;\n}\n\nsub,\nsup {\n  position: relative;\n  font-size: 0.75em;\n  line-height: 0;\n  vertical-align: baseline;\n}\n\nsub {\n  bottom: -.25em;\n}\n\nsup {\n  top: -.5em;\n}\n\na {\n  color: #93c54b;\n  text-decoration: underline;\n}\n\na:hover {\n  color: #769e3c;\n}\n\na:not([href]):not([class]), a:not([href]):not([class]):hover {\n  color: inherit;\n  text-decoration: none;\n}\n\npre,\ncode,\nkbd,\nsamp {\n  font-family: var(--bs-font-monospace);\n  font-size: 1em;\n  direction: ltr /* rtl:ignore */;\n  unicode-bidi: bidi-override;\n}\n\npre {\n  display: block;\n  margin-top: 0;\n  margin-bottom: 1rem;\n  overflow: auto;\n  font-size: 0.875em;\n}\n\npre code {\n  font-size: inherit;\n  color: inherit;\n  word-break: normal;\n}\n\ncode {\n  font-size: 0.875em;\n  color: #e83e8c;\n  word-wrap: break-word;\n}\n\na > code {\n  color: inherit;\n}\n\nkbd {\n  padding: 0.2rem 0.4rem;\n  font-size: 0.875em;\n  color: #fff;\n  background-color: #212529;\n  border-radius: 0.2rem;\n}\n\nkbd kbd {\n  padding: 0;\n  font-size: 1em;\n  font-weight: 700;\n}\n\nfigure {\n  margin: 0 0 1rem;\n}\n\nimg,\nsvg {\n  vertical-align: middle;\n}\n\ntable {\n  caption-side: bottom;\n  border-collapse: collapse;\n}\n\ncaption {\n  padding-top: 0.5rem;\n  padding-bottom: 0.5rem;\n  color: #8e8c84;\n  text-align: left;\n}\n\nth {\n  text-align: inherit;\n  text-align: -webkit-match-parent;\n}\n\nthead,\ntbody,\ntfoot,\ntr,\ntd,\nth {\n  border-color: inherit;\n  border-style: solid;\n  border-width: 0;\n}\n\nlabel {\n  display: inline-block;\n}\n\nbutton {\n  border-radius: 0;\n}\n\nbutton:focus:not(:focus-visible) {\n  outline: 0;\n}\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n  margin: 0;\n  font-family: inherit;\n  font-size: inherit;\n  line-height: inherit;\n}\n\nbutton,\nselect {\n  text-transform: none;\n}\n\n[role=\"button\"] {\n  cursor: pointer;\n}\n\nselect {\n  word-wrap: normal;\n}\n\nselect:disabled {\n  opacity: 1;\n}\n\n[list]::-webkit-calendar-picker-indicator {\n  display: none;\n}\n\nbutton,\n[type=\"button\"],\n[type=\"reset\"],\n[type=\"submit\"] {\n  -webkit-appearance: button;\n}\n\nbutton:not(:disabled),\n[type=\"button\"]:not(:disabled),\n[type=\"reset\"]:not(:disabled),\n[type=\"submit\"]:not(:disabled) {\n  cursor: pointer;\n}\n\n::-moz-focus-inner {\n  padding: 0;\n  border-style: none;\n}\n\ntextarea {\n  resize: vertical;\n}\n\nfieldset {\n  min-width: 0;\n  padding: 0;\n  margin: 0;\n  border: 0;\n}\n\nlegend {\n  float: left;\n  width: 100%;\n  padding: 0;\n  margin-bottom: 0.5rem;\n  font-size: calc(1.275rem + 0.3vw);\n  line-height: inherit;\n}\n\n@media (min-width: 1200px) {\n  legend {\n    font-size: 1.5rem;\n  }\n}\n\nlegend + * {\n  clear: left;\n}\n\n::-webkit-datetime-edit-fields-wrapper,\n::-webkit-datetime-edit-text,\n::-webkit-datetime-edit-minute,\n::-webkit-datetime-edit-hour-field,\n::-webkit-datetime-edit-day-field,\n::-webkit-datetime-edit-month-field,\n::-webkit-datetime-edit-year-field {\n  padding: 0;\n}\n\n::-webkit-inner-spin-button {\n  height: auto;\n}\n\n[type=\"search\"] {\n  outline-offset: -2px;\n  -webkit-appearance: textfield;\n}\n\n/* rtl:raw:\n[type=\"tel\"],\n[type=\"url\"],\n[type=\"email\"],\n[type=\"number\"] {\n  direction: ltr;\n}\n*/\n::-webkit-search-decoration {\n  -webkit-appearance: none;\n}\n\n::-webkit-color-swatch-wrapper {\n  padding: 0;\n}\n\n::file-selector-button {\n  font: inherit;\n}\n\n::-webkit-file-upload-button {\n  font: inherit;\n  -webkit-appearance: button;\n}\n\noutput {\n  display: inline-block;\n}\n\niframe {\n  border: 0;\n}\n\nsummary {\n  display: list-item;\n  cursor: pointer;\n}\n\nprogress {\n  vertical-align: baseline;\n}\n\n[hidden] {\n  display: none !important;\n}\n\n.lead {\n  font-size: 1.25rem;\n  font-weight: 300;\n}\n\n.display-1 {\n  font-size: calc(1.625rem + 4.5vw);\n  font-weight: 300;\n  line-height: 1.2;\n}\n\n@media (min-width: 1200px) {\n  .display-1 {\n    font-size: 5rem;\n  }\n}\n\n.display-2 {\n  font-size: calc(1.575rem + 3.9vw);\n  font-weight: 300;\n  line-height: 1.2;\n}\n\n@media (min-width: 1200px) {\n  .display-2 {\n    font-size: 4.5rem;\n  }\n}\n\n.display-3 {\n  font-size: calc(1.525rem + 3.3vw);\n  font-weight: 300;\n  line-height: 1.2;\n}\n\n@media (min-width: 1200px) {\n  .display-3 {\n    font-size: 4rem;\n  }\n}\n\n.display-4 {\n  font-size: calc(1.475rem + 2.7vw);\n  font-weight: 300;\n  line-height: 1.2;\n}\n\n@media (min-width: 1200px) {\n  .display-4 {\n    font-size: 3.5rem;\n  }\n}\n\n.display-5 {\n  font-size: calc(1.425rem + 2.1vw);\n  font-weight: 300;\n  line-height: 1.2;\n}\n\n@media (min-width: 1200px) {\n  .display-5 {\n    font-size: 3rem;\n  }\n}\n\n.display-6 {\n  font-size: calc(1.375rem + 1.5vw);\n  font-weight: 300;\n  line-height: 1.2;\n}\n\n@media (min-width: 1200px) {\n  .display-6 {\n    font-size: 2.5rem;\n  }\n}\n\n.list-unstyled {\n  padding-left: 0;\n  list-style: none;\n}\n\n.list-inline {\n  padding-left: 0;\n  list-style: none;\n}\n\n.list-inline-item {\n  display: inline-block;\n}\n\n.list-inline-item:not(:last-child) {\n  margin-right: 0.5rem;\n}\n\n.initialism {\n  font-size: 0.875em;\n  text-transform: uppercase;\n}\n\n.blockquote {\n  margin-bottom: 1rem;\n  font-size: 1.25rem;\n}\n\n.blockquote > :last-child {\n  margin-bottom: 0;\n}\n\n.blockquote-footer {\n  margin-top: -1rem;\n  margin-bottom: 1rem;\n  font-size: 0.875em;\n  color: #8e8c84;\n}\n\n.blockquote-footer::before {\n  content: \"\\2014\\00A0\";\n}\n\n.img-fluid {\n  max-width: 100%;\n  height: auto;\n}\n\n.img-thumbnail {\n  padding: 0.25rem;\n  background-color: #fff;\n  border: 1px solid #dfd7ca;\n  border-radius: 0.25rem;\n  max-width: 100%;\n  height: auto;\n}\n\n.figure {\n  display: inline-block;\n}\n\n.figure-img {\n  margin-bottom: 0.5rem;\n  line-height: 1;\n}\n\n.figure-caption {\n  font-size: 0.875em;\n  color: #8e8c84;\n}\n\n.container,\n.container-fluid,\n.container-sm,\n.container-md,\n.container-lg,\n.container-xl,\n.container-xxl {\n  width: 100%;\n  padding-right: var(--bs-gutter-x, 0.75rem);\n  padding-left: var(--bs-gutter-x, 0.75rem);\n  margin-right: auto;\n  margin-left: auto;\n}\n\n@media (min-width: 576px) {\n  .container, .container-sm {\n    max-width: 540px;\n  }\n}\n\n@media (min-width: 768px) {\n  .container, .container-sm, .container-md {\n    max-width: 720px;\n  }\n}\n\n@media (min-width: 992px) {\n  .container, .container-sm, .container-md, .container-lg {\n    max-width: 960px;\n  }\n}\n\n@media (min-width: 1200px) {\n  .container, .container-sm, .container-md, .container-lg, .container-xl {\n    max-width: 1140px;\n  }\n}\n\n@media (min-width: 1400px) {\n  .container, .container-sm, .container-md, .container-lg, .container-xl, .container-xxl {\n    max-width: 1320px;\n  }\n}\n\n.row {\n  --bs-gutter-x: 1.5rem;\n  --bs-gutter-y: 0;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n  flex-wrap: wrap;\n  margin-top: calc(-1 * var(--bs-gutter-y));\n  margin-right: calc(-.5 * var(--bs-gutter-x));\n  margin-left: calc(-.5 * var(--bs-gutter-x));\n}\n\n.row > * {\n  -ms-flex-negative: 0;\n  flex-shrink: 0;\n  width: 100%;\n  max-width: 100%;\n  padding-right: calc(var(--bs-gutter-x) * .5);\n  padding-left: calc(var(--bs-gutter-x) * .5);\n  margin-top: var(--bs-gutter-y);\n}\n\n.col {\n  -ms-flex: 1 0 0%;\n  flex: 1 0 0%;\n}\n\n.row-cols-auto > * {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: auto;\n}\n\n.row-cols-1 > * {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 100%;\n}\n\n.row-cols-2 > * {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 50%;\n}\n\n.row-cols-3 > * {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 33.333333%;\n}\n\n.row-cols-4 > * {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 25%;\n}\n\n.row-cols-5 > * {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 20%;\n}\n\n.row-cols-6 > * {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 16.666667%;\n}\n\n.col-auto {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: auto;\n}\n\n.col-1 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 8.333333%;\n}\n\n.col-2 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 16.666667%;\n}\n\n.col-3 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 25%;\n}\n\n.col-4 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 33.333333%;\n}\n\n.col-5 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 41.666667%;\n}\n\n.col-6 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 50%;\n}\n\n.col-7 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 58.333333%;\n}\n\n.col-8 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 66.666667%;\n}\n\n.col-9 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 75%;\n}\n\n.col-10 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 83.333333%;\n}\n\n.col-11 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 91.666667%;\n}\n\n.col-12 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 100%;\n}\n\n.offset-1 {\n  margin-left: 8.333333%;\n}\n\n.offset-2 {\n  margin-left: 16.666667%;\n}\n\n.offset-3 {\n  margin-left: 25%;\n}\n\n.offset-4 {\n  margin-left: 33.333333%;\n}\n\n.offset-5 {\n  margin-left: 41.666667%;\n}\n\n.offset-6 {\n  margin-left: 50%;\n}\n\n.offset-7 {\n  margin-left: 58.333333%;\n}\n\n.offset-8 {\n  margin-left: 66.666667%;\n}\n\n.offset-9 {\n  margin-left: 75%;\n}\n\n.offset-10 {\n  margin-left: 83.333333%;\n}\n\n.offset-11 {\n  margin-left: 91.666667%;\n}\n\n.g-0,\n.gx-0 {\n  --bs-gutter-x: 0;\n}\n\n.g-0,\n.gy-0 {\n  --bs-gutter-y: 0;\n}\n\n.g-1,\n.gx-1 {\n  --bs-gutter-x: 0.25rem;\n}\n\n.g-1,\n.gy-1 {\n  --bs-gutter-y: 0.25rem;\n}\n\n.g-2,\n.gx-2 {\n  --bs-gutter-x: 0.5rem;\n}\n\n.g-2,\n.gy-2 {\n  --bs-gutter-y: 0.5rem;\n}\n\n.g-3,\n.gx-3 {\n  --bs-gutter-x: 1rem;\n}\n\n.g-3,\n.gy-3 {\n  --bs-gutter-y: 1rem;\n}\n\n.g-4,\n.gx-4 {\n  --bs-gutter-x: 1.5rem;\n}\n\n.g-4,\n.gy-4 {\n  --bs-gutter-y: 1.5rem;\n}\n\n.g-5,\n.gx-5 {\n  --bs-gutter-x: 3rem;\n}\n\n.g-5,\n.gy-5 {\n  --bs-gutter-y: 3rem;\n}\n\n@media (min-width: 576px) {\n  .col-sm {\n    -ms-flex: 1 0 0%;\n    flex: 1 0 0%;\n  }\n  .row-cols-sm-auto > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .row-cols-sm-1 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .row-cols-sm-2 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .row-cols-sm-3 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 33.333333%;\n  }\n  .row-cols-sm-4 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .row-cols-sm-5 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 20%;\n  }\n  .row-cols-sm-6 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 16.666667%;\n  }\n  .col-sm-auto {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .col-sm-1 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 8.333333%;\n  }\n  .col-sm-2 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 16.666667%;\n  }\n  .col-sm-3 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .col-sm-4 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 33.333333%;\n  }\n  .col-sm-5 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 41.666667%;\n  }\n  .col-sm-6 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .col-sm-7 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 58.333333%;\n  }\n  .col-sm-8 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 66.666667%;\n  }\n  .col-sm-9 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 75%;\n  }\n  .col-sm-10 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 83.333333%;\n  }\n  .col-sm-11 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 91.666667%;\n  }\n  .col-sm-12 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .offset-sm-0 {\n    margin-left: 0;\n  }\n  .offset-sm-1 {\n    margin-left: 8.333333%;\n  }\n  .offset-sm-2 {\n    margin-left: 16.666667%;\n  }\n  .offset-sm-3 {\n    margin-left: 25%;\n  }\n  .offset-sm-4 {\n    margin-left: 33.333333%;\n  }\n  .offset-sm-5 {\n    margin-left: 41.666667%;\n  }\n  .offset-sm-6 {\n    margin-left: 50%;\n  }\n  .offset-sm-7 {\n    margin-left: 58.333333%;\n  }\n  .offset-sm-8 {\n    margin-left: 66.666667%;\n  }\n  .offset-sm-9 {\n    margin-left: 75%;\n  }\n  .offset-sm-10 {\n    margin-left: 83.333333%;\n  }\n  .offset-sm-11 {\n    margin-left: 91.666667%;\n  }\n  .g-sm-0,\n  .gx-sm-0 {\n    --bs-gutter-x: 0;\n  }\n  .g-sm-0,\n  .gy-sm-0 {\n    --bs-gutter-y: 0;\n  }\n  .g-sm-1,\n  .gx-sm-1 {\n    --bs-gutter-x: 0.25rem;\n  }\n  .g-sm-1,\n  .gy-sm-1 {\n    --bs-gutter-y: 0.25rem;\n  }\n  .g-sm-2,\n  .gx-sm-2 {\n    --bs-gutter-x: 0.5rem;\n  }\n  .g-sm-2,\n  .gy-sm-2 {\n    --bs-gutter-y: 0.5rem;\n  }\n  .g-sm-3,\n  .gx-sm-3 {\n    --bs-gutter-x: 1rem;\n  }\n  .g-sm-3,\n  .gy-sm-3 {\n    --bs-gutter-y: 1rem;\n  }\n  .g-sm-4,\n  .gx-sm-4 {\n    --bs-gutter-x: 1.5rem;\n  }\n  .g-sm-4,\n  .gy-sm-4 {\n    --bs-gutter-y: 1.5rem;\n  }\n  .g-sm-5,\n  .gx-sm-5 {\n    --bs-gutter-x: 3rem;\n  }\n  .g-sm-5,\n  .gy-sm-5 {\n    --bs-gutter-y: 3rem;\n  }\n}\n\n@media (min-width: 768px) {\n  .col-md {\n    -ms-flex: 1 0 0%;\n    flex: 1 0 0%;\n  }\n  .row-cols-md-auto > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .row-cols-md-1 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .row-cols-md-2 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .row-cols-md-3 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 33.333333%;\n  }\n  .row-cols-md-4 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .row-cols-md-5 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 20%;\n  }\n  .row-cols-md-6 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 16.666667%;\n  }\n  .col-md-auto {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .col-md-1 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 8.333333%;\n  }\n  .col-md-2 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 16.666667%;\n  }\n  .col-md-3 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .col-md-4 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 33.333333%;\n  }\n  .col-md-5 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 41.666667%;\n  }\n  .col-md-6 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .col-md-7 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 58.333333%;\n  }\n  .col-md-8 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 66.666667%;\n  }\n  .col-md-9 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 75%;\n  }\n  .col-md-10 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 83.333333%;\n  }\n  .col-md-11 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 91.666667%;\n  }\n  .col-md-12 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .offset-md-0 {\n    margin-left: 0;\n  }\n  .offset-md-1 {\n    margin-left: 8.333333%;\n  }\n  .offset-md-2 {\n    margin-left: 16.666667%;\n  }\n  .offset-md-3 {\n    margin-left: 25%;\n  }\n  .offset-md-4 {\n    margin-left: 33.333333%;\n  }\n  .offset-md-5 {\n    margin-left: 41.666667%;\n  }\n  .offset-md-6 {\n    margin-left: 50%;\n  }\n  .offset-md-7 {\n    margin-left: 58.333333%;\n  }\n  .offset-md-8 {\n    margin-left: 66.666667%;\n  }\n  .offset-md-9 {\n    margin-left: 75%;\n  }\n  .offset-md-10 {\n    margin-left: 83.333333%;\n  }\n  .offset-md-11 {\n    margin-left: 91.666667%;\n  }\n  .g-md-0,\n  .gx-md-0 {\n    --bs-gutter-x: 0;\n  }\n  .g-md-0,\n  .gy-md-0 {\n    --bs-gutter-y: 0;\n  }\n  .g-md-1,\n  .gx-md-1 {\n    --bs-gutter-x: 0.25rem;\n  }\n  .g-md-1,\n  .gy-md-1 {\n    --bs-gutter-y: 0.25rem;\n  }\n  .g-md-2,\n  .gx-md-2 {\n    --bs-gutter-x: 0.5rem;\n  }\n  .g-md-2,\n  .gy-md-2 {\n    --bs-gutter-y: 0.5rem;\n  }\n  .g-md-3,\n  .gx-md-3 {\n    --bs-gutter-x: 1rem;\n  }\n  .g-md-3,\n  .gy-md-3 {\n    --bs-gutter-y: 1rem;\n  }\n  .g-md-4,\n  .gx-md-4 {\n    --bs-gutter-x: 1.5rem;\n  }\n  .g-md-4,\n  .gy-md-4 {\n    --bs-gutter-y: 1.5rem;\n  }\n  .g-md-5,\n  .gx-md-5 {\n    --bs-gutter-x: 3rem;\n  }\n  .g-md-5,\n  .gy-md-5 {\n    --bs-gutter-y: 3rem;\n  }\n}\n\n@media (min-width: 992px) {\n  .col-lg {\n    -ms-flex: 1 0 0%;\n    flex: 1 0 0%;\n  }\n  .row-cols-lg-auto > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .row-cols-lg-1 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .row-cols-lg-2 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .row-cols-lg-3 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 33.333333%;\n  }\n  .row-cols-lg-4 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .row-cols-lg-5 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 20%;\n  }\n  .row-cols-lg-6 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 16.666667%;\n  }\n  .col-lg-auto {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .col-lg-1 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 8.333333%;\n  }\n  .col-lg-2 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 16.666667%;\n  }\n  .col-lg-3 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .col-lg-4 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 33.333333%;\n  }\n  .col-lg-5 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 41.666667%;\n  }\n  .col-lg-6 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .col-lg-7 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 58.333333%;\n  }\n  .col-lg-8 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 66.666667%;\n  }\n  .col-lg-9 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 75%;\n  }\n  .col-lg-10 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 83.333333%;\n  }\n  .col-lg-11 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 91.666667%;\n  }\n  .col-lg-12 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .offset-lg-0 {\n    margin-left: 0;\n  }\n  .offset-lg-1 {\n    margin-left: 8.333333%;\n  }\n  .offset-lg-2 {\n    margin-left: 16.666667%;\n  }\n  .offset-lg-3 {\n    margin-left: 25%;\n  }\n  .offset-lg-4 {\n    margin-left: 33.333333%;\n  }\n  .offset-lg-5 {\n    margin-left: 41.666667%;\n  }\n  .offset-lg-6 {\n    margin-left: 50%;\n  }\n  .offset-lg-7 {\n    margin-left: 58.333333%;\n  }\n  .offset-lg-8 {\n    margin-left: 66.666667%;\n  }\n  .offset-lg-9 {\n    margin-left: 75%;\n  }\n  .offset-lg-10 {\n    margin-left: 83.333333%;\n  }\n  .offset-lg-11 {\n    margin-left: 91.666667%;\n  }\n  .g-lg-0,\n  .gx-lg-0 {\n    --bs-gutter-x: 0;\n  }\n  .g-lg-0,\n  .gy-lg-0 {\n    --bs-gutter-y: 0;\n  }\n  .g-lg-1,\n  .gx-lg-1 {\n    --bs-gutter-x: 0.25rem;\n  }\n  .g-lg-1,\n  .gy-lg-1 {\n    --bs-gutter-y: 0.25rem;\n  }\n  .g-lg-2,\n  .gx-lg-2 {\n    --bs-gutter-x: 0.5rem;\n  }\n  .g-lg-2,\n  .gy-lg-2 {\n    --bs-gutter-y: 0.5rem;\n  }\n  .g-lg-3,\n  .gx-lg-3 {\n    --bs-gutter-x: 1rem;\n  }\n  .g-lg-3,\n  .gy-lg-3 {\n    --bs-gutter-y: 1rem;\n  }\n  .g-lg-4,\n  .gx-lg-4 {\n    --bs-gutter-x: 1.5rem;\n  }\n  .g-lg-4,\n  .gy-lg-4 {\n    --bs-gutter-y: 1.5rem;\n  }\n  .g-lg-5,\n  .gx-lg-5 {\n    --bs-gutter-x: 3rem;\n  }\n  .g-lg-5,\n  .gy-lg-5 {\n    --bs-gutter-y: 3rem;\n  }\n}\n\n@media (min-width: 1200px) {\n  .col-xl {\n    -ms-flex: 1 0 0%;\n    flex: 1 0 0%;\n  }\n  .row-cols-xl-auto > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .row-cols-xl-1 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .row-cols-xl-2 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .row-cols-xl-3 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 33.333333%;\n  }\n  .row-cols-xl-4 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .row-cols-xl-5 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 20%;\n  }\n  .row-cols-xl-6 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 16.666667%;\n  }\n  .col-xl-auto {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .col-xl-1 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 8.333333%;\n  }\n  .col-xl-2 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 16.666667%;\n  }\n  .col-xl-3 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .col-xl-4 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 33.333333%;\n  }\n  .col-xl-5 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 41.666667%;\n  }\n  .col-xl-6 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .col-xl-7 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 58.333333%;\n  }\n  .col-xl-8 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 66.666667%;\n  }\n  .col-xl-9 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 75%;\n  }\n  .col-xl-10 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 83.333333%;\n  }\n  .col-xl-11 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 91.666667%;\n  }\n  .col-xl-12 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .offset-xl-0 {\n    margin-left: 0;\n  }\n  .offset-xl-1 {\n    margin-left: 8.333333%;\n  }\n  .offset-xl-2 {\n    margin-left: 16.666667%;\n  }\n  .offset-xl-3 {\n    margin-left: 25%;\n  }\n  .offset-xl-4 {\n    margin-left: 33.333333%;\n  }\n  .offset-xl-5 {\n    margin-left: 41.666667%;\n  }\n  .offset-xl-6 {\n    margin-left: 50%;\n  }\n  .offset-xl-7 {\n    margin-left: 58.333333%;\n  }\n  .offset-xl-8 {\n    margin-left: 66.666667%;\n  }\n  .offset-xl-9 {\n    margin-left: 75%;\n  }\n  .offset-xl-10 {\n    margin-left: 83.333333%;\n  }\n  .offset-xl-11 {\n    margin-left: 91.666667%;\n  }\n  .g-xl-0,\n  .gx-xl-0 {\n    --bs-gutter-x: 0;\n  }\n  .g-xl-0,\n  .gy-xl-0 {\n    --bs-gutter-y: 0;\n  }\n  .g-xl-1,\n  .gx-xl-1 {\n    --bs-gutter-x: 0.25rem;\n  }\n  .g-xl-1,\n  .gy-xl-1 {\n    --bs-gutter-y: 0.25rem;\n  }\n  .g-xl-2,\n  .gx-xl-2 {\n    --bs-gutter-x: 0.5rem;\n  }\n  .g-xl-2,\n  .gy-xl-2 {\n    --bs-gutter-y: 0.5rem;\n  }\n  .g-xl-3,\n  .gx-xl-3 {\n    --bs-gutter-x: 1rem;\n  }\n  .g-xl-3,\n  .gy-xl-3 {\n    --bs-gutter-y: 1rem;\n  }\n  .g-xl-4,\n  .gx-xl-4 {\n    --bs-gutter-x: 1.5rem;\n  }\n  .g-xl-4,\n  .gy-xl-4 {\n    --bs-gutter-y: 1.5rem;\n  }\n  .g-xl-5,\n  .gx-xl-5 {\n    --bs-gutter-x: 3rem;\n  }\n  .g-xl-5,\n  .gy-xl-5 {\n    --bs-gutter-y: 3rem;\n  }\n}\n\n@media (min-width: 1400px) {\n  .col-xxl {\n    -ms-flex: 1 0 0%;\n    flex: 1 0 0%;\n  }\n  .row-cols-xxl-auto > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .row-cols-xxl-1 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .row-cols-xxl-2 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .row-cols-xxl-3 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 33.333333%;\n  }\n  .row-cols-xxl-4 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .row-cols-xxl-5 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 20%;\n  }\n  .row-cols-xxl-6 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 16.666667%;\n  }\n  .col-xxl-auto {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .col-xxl-1 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 8.333333%;\n  }\n  .col-xxl-2 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 16.666667%;\n  }\n  .col-xxl-3 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .col-xxl-4 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 33.333333%;\n  }\n  .col-xxl-5 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 41.666667%;\n  }\n  .col-xxl-6 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .col-xxl-7 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 58.333333%;\n  }\n  .col-xxl-8 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 66.666667%;\n  }\n  .col-xxl-9 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 75%;\n  }\n  .col-xxl-10 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 83.333333%;\n  }\n  .col-xxl-11 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 91.666667%;\n  }\n  .col-xxl-12 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .offset-xxl-0 {\n    margin-left: 0;\n  }\n  .offset-xxl-1 {\n    margin-left: 8.333333%;\n  }\n  .offset-xxl-2 {\n    margin-left: 16.666667%;\n  }\n  .offset-xxl-3 {\n    margin-left: 25%;\n  }\n  .offset-xxl-4 {\n    margin-left: 33.333333%;\n  }\n  .offset-xxl-5 {\n    margin-left: 41.666667%;\n  }\n  .offset-xxl-6 {\n    margin-left: 50%;\n  }\n  .offset-xxl-7 {\n    margin-left: 58.333333%;\n  }\n  .offset-xxl-8 {\n    margin-left: 66.666667%;\n  }\n  .offset-xxl-9 {\n    margin-left: 75%;\n  }\n  .offset-xxl-10 {\n    margin-left: 83.333333%;\n  }\n  .offset-xxl-11 {\n    margin-left: 91.666667%;\n  }\n  .g-xxl-0,\n  .gx-xxl-0 {\n    --bs-gutter-x: 0;\n  }\n  .g-xxl-0,\n  .gy-xxl-0 {\n    --bs-gutter-y: 0;\n  }\n  .g-xxl-1,\n  .gx-xxl-1 {\n    --bs-gutter-x: 0.25rem;\n  }\n  .g-xxl-1,\n  .gy-xxl-1 {\n    --bs-gutter-y: 0.25rem;\n  }\n  .g-xxl-2,\n  .gx-xxl-2 {\n    --bs-gutter-x: 0.5rem;\n  }\n  .g-xxl-2,\n  .gy-xxl-2 {\n    --bs-gutter-y: 0.5rem;\n  }\n  .g-xxl-3,\n  .gx-xxl-3 {\n    --bs-gutter-x: 1rem;\n  }\n  .g-xxl-3,\n  .gy-xxl-3 {\n    --bs-gutter-y: 1rem;\n  }\n  .g-xxl-4,\n  .gx-xxl-4 {\n    --bs-gutter-x: 1.5rem;\n  }\n  .g-xxl-4,\n  .gy-xxl-4 {\n    --bs-gutter-y: 1.5rem;\n  }\n  .g-xxl-5,\n  .gx-xxl-5 {\n    --bs-gutter-x: 3rem;\n  }\n  .g-xxl-5,\n  .gy-xxl-5 {\n    --bs-gutter-y: 3rem;\n  }\n}\n\n.table {\n  --bs-table-bg: transparent;\n  --bs-table-accent-bg: transparent;\n  --bs-table-striped-color: #3e3f3a;\n  --bs-table-striped-bg: rgba(0, 0, 0, 0.05);\n  --bs-table-active-color: #3e3f3a;\n  --bs-table-active-bg: rgba(0, 0, 0, 0.1);\n  --bs-table-hover-color: #3e3f3a;\n  --bs-table-hover-bg: rgba(0, 0, 0, 0.075);\n  width: 100%;\n  margin-bottom: 1rem;\n  color: #3e3f3a;\n  vertical-align: top;\n  border-color: #dfd7ca;\n}\n\n.table > :not(caption) > * > * {\n  padding: 0.5rem 0.5rem;\n  background-color: var(--bs-table-bg);\n  border-bottom-width: 1px;\n  box-shadow: inset 0 0 0 9999px var(--bs-table-accent-bg);\n}\n\n.table > tbody {\n  vertical-align: inherit;\n}\n\n.table > thead {\n  vertical-align: bottom;\n}\n\n.table > :not(:first-child) {\n  border-top: 2px solid currentColor;\n}\n\n.caption-top {\n  caption-side: top;\n}\n\n.table-sm > :not(caption) > * > * {\n  padding: 0.25rem 0.25rem;\n}\n\n.table-bordered > :not(caption) > * {\n  border-width: 1px 0;\n}\n\n.table-bordered > :not(caption) > * > * {\n  border-width: 0 1px;\n}\n\n.table-borderless > :not(caption) > * > * {\n  border-bottom-width: 0;\n}\n\n.table-borderless > :not(:first-child) {\n  border-top-width: 0;\n}\n\n.table-striped > tbody > tr:nth-of-type(odd) > * {\n  --bs-table-accent-bg: var(--bs-table-striped-bg);\n  color: var(--bs-table-striped-color);\n}\n\n.table-active {\n  --bs-table-accent-bg: var(--bs-table-active-bg);\n  color: var(--bs-table-active-color);\n}\n\n.table-hover > tbody > tr:hover > * {\n  --bs-table-accent-bg: var(--bs-table-hover-bg);\n  color: var(--bs-table-hover-color);\n}\n\n.table-primary {\n  --bs-table-bg: #d6dfe7;\n  --bs-table-striped-bg: #cbd4db;\n  --bs-table-striped-color: #000;\n  --bs-table-active-bg: #c1c9d0;\n  --bs-table-active-color: #000;\n  --bs-table-hover-bg: #c6ced6;\n  --bs-table-hover-color: #000;\n  color: #000;\n  border-color: #c1c9d0;\n}\n\n.table-secondary {\n  --bs-table-bg: #e8e8e6;\n  --bs-table-striped-bg: #dcdcdb;\n  --bs-table-striped-color: #000;\n  --bs-table-active-bg: #d1d1cf;\n  --bs-table-active-color: #000;\n  --bs-table-hover-bg: #d7d7d5;\n  --bs-table-hover-color: #000;\n  color: #000;\n  border-color: #d1d1cf;\n}\n\n.table-success {\n  --bs-table-bg: #e9f3db;\n  --bs-table-striped-bg: #dde7d0;\n  --bs-table-striped-color: #000;\n  --bs-table-active-bg: #d2dbc5;\n  --bs-table-active-color: #000;\n  --bs-table-hover-bg: #d8e1cb;\n  --bs-table-hover-color: #000;\n  color: #000;\n  border-color: #d2dbc5;\n}\n\n.table-info {\n  --bs-table-bg: #d4eef9;\n  --bs-table-striped-bg: #c9e2ed;\n  --bs-table-striped-color: #000;\n  --bs-table-active-bg: #bfd6e0;\n  --bs-table-active-color: #000;\n  --bs-table-hover-bg: #c4dce6;\n  --bs-table-hover-color: #000;\n  color: #000;\n  border-color: #bfd6e0;\n}\n\n.table-warning {\n  --bs-table-bg: #fde5d8;\n  --bs-table-striped-bg: #f0dacd;\n  --bs-table-striped-color: #000;\n  --bs-table-active-bg: #e4cec2;\n  --bs-table-active-color: #000;\n  --bs-table-hover-bg: #ead4c8;\n  --bs-table-hover-color: #000;\n  color: #000;\n  border-color: #e4cec2;\n}\n\n.table-danger {\n  --bs-table-bg: #f7dddc;\n  --bs-table-striped-bg: #ebd2d1;\n  --bs-table-striped-color: #000;\n  --bs-table-active-bg: #dec7c6;\n  --bs-table-active-color: #000;\n  --bs-table-hover-bg: #e4cccc;\n  --bs-table-hover-color: #000;\n  color: #000;\n  border-color: #dec7c6;\n}\n\n.table-light {\n  --bs-table-bg: #f8f5f0;\n  --bs-table-striped-bg: #ece9e4;\n  --bs-table-striped-color: #000;\n  --bs-table-active-bg: #dfddd8;\n  --bs-table-active-color: #000;\n  --bs-table-hover-bg: #e5e3de;\n  --bs-table-hover-color: #000;\n  color: #000;\n  border-color: #dfddd8;\n}\n\n.table-dark {\n  --bs-table-bg: #3e3f3a;\n  --bs-table-striped-bg: #484944;\n  --bs-table-striped-color: #fff;\n  --bs-table-active-bg: #51524e;\n  --bs-table-active-color: #fff;\n  --bs-table-hover-bg: #4c4d49;\n  --bs-table-hover-color: #fff;\n  color: #fff;\n  border-color: #51524e;\n}\n\n.table-responsive {\n  overflow-x: auto;\n  -webkit-overflow-scrolling: touch;\n}\n\n@media (max-width: 575.98px) {\n  .table-responsive-sm {\n    overflow-x: auto;\n    -webkit-overflow-scrolling: touch;\n  }\n}\n\n@media (max-width: 767.98px) {\n  .table-responsive-md {\n    overflow-x: auto;\n    -webkit-overflow-scrolling: touch;\n  }\n}\n\n@media (max-width: 991.98px) {\n  .table-responsive-lg {\n    overflow-x: auto;\n    -webkit-overflow-scrolling: touch;\n  }\n}\n\n@media (max-width: 1199.98px) {\n  .table-responsive-xl {\n    overflow-x: auto;\n    -webkit-overflow-scrolling: touch;\n  }\n}\n\n@media (max-width: 1399.98px) {\n  .table-responsive-xxl {\n    overflow-x: auto;\n    -webkit-overflow-scrolling: touch;\n  }\n}\n\n.form-label {\n  margin-bottom: 0.5rem;\n}\n\n.col-form-label {\n  padding-top: calc(0.375rem + 1px);\n  padding-bottom: calc(0.375rem + 1px);\n  margin-bottom: 0;\n  font-size: inherit;\n  line-height: 1.5;\n}\n\n.col-form-label-lg {\n  padding-top: calc(0.5rem + 1px);\n  padding-bottom: calc(0.5rem + 1px);\n  font-size: 1.25rem;\n}\n\n.col-form-label-sm {\n  padding-top: calc(0.25rem + 1px);\n  padding-bottom: calc(0.25rem + 1px);\n  font-size: 0.875rem;\n}\n\n.form-text {\n  margin-top: 0.25rem;\n  font-size: 0.875em;\n  color: #8e8c84;\n}\n\n.form-control {\n  display: block;\n  width: 100%;\n  padding: 0.375rem 0.75rem;\n  font-size: 1rem;\n  font-weight: 400;\n  line-height: 1.5;\n  color: #3e3f3a;\n  background-color: #fff;\n  background-clip: padding-box;\n  border: 1px solid #ced4da;\n  -webkit-appearance: none;\n  -moz-appearance: none;\n  appearance: none;\n  border-radius: 0.25rem;\n  transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .form-control {\n    transition: none;\n  }\n}\n\n.form-control[type=\"file\"] {\n  overflow: hidden;\n}\n\n.form-control[type=\"file\"]:not(:disabled):not([readonly]) {\n  cursor: pointer;\n}\n\n.form-control:focus {\n  color: #3e3f3a;\n  background-color: #fff;\n  border-color: #99aec4;\n  outline: 0;\n  box-shadow: 0 0 0 0.25rem rgba(50, 93, 136, 0.25);\n}\n\n.form-control::-webkit-date-and-time-value {\n  height: 1.5em;\n}\n\n.form-control::-webkit-input-placeholder {\n  color: #8e8c84;\n  opacity: 1;\n}\n\n.form-control::-moz-placeholder {\n  color: #8e8c84;\n  opacity: 1;\n}\n\n.form-control:-ms-input-placeholder {\n  color: #8e8c84;\n  opacity: 1;\n}\n\n.form-control::-ms-input-placeholder {\n  color: #8e8c84;\n  opacity: 1;\n}\n\n.form-control::placeholder {\n  color: #8e8c84;\n  opacity: 1;\n}\n\n.form-control:disabled, .form-control[readonly] {\n  background-color: #f8f5f0;\n  opacity: 1;\n}\n\n.form-control::file-selector-button {\n  padding: 0.375rem 0.75rem;\n  margin: -0.375rem -0.75rem;\n  -webkit-margin-end: 0.75rem;\n  -moz-margin-end: 0.75rem;\n  margin-inline-end: 0.75rem;\n  color: #3e3f3a;\n  background-color: #f8f5f0;\n  pointer-events: none;\n  border-color: inherit;\n  border-style: solid;\n  border-width: 0;\n  border-inline-end-width: 1px;\n  border-radius: 0;\n  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .form-control::file-selector-button {\n    transition: none;\n  }\n}\n\n.form-control:hover:not(:disabled):not([readonly])::file-selector-button {\n  background-color: #ece9e4;\n}\n\n.form-control::-webkit-file-upload-button {\n  padding: 0.375rem 0.75rem;\n  margin: -0.375rem -0.75rem;\n  -webkit-margin-end: 0.75rem;\n  margin-inline-end: 0.75rem;\n  color: #3e3f3a;\n  background-color: #f8f5f0;\n  pointer-events: none;\n  border-color: inherit;\n  border-style: solid;\n  border-width: 0;\n  border-inline-end-width: 1px;\n  border-radius: 0;\n  -webkit-transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .form-control::-webkit-file-upload-button {\n    -webkit-transition: none;\n    transition: none;\n  }\n}\n\n.form-control:hover:not(:disabled):not([readonly])::-webkit-file-upload-button {\n  background-color: #ece9e4;\n}\n\n.form-control-plaintext {\n  display: block;\n  width: 100%;\n  padding: 0.375rem 0;\n  margin-bottom: 0;\n  line-height: 1.5;\n  color: #3e3f3a;\n  background-color: transparent;\n  border: solid transparent;\n  border-width: 1px 0;\n}\n\n.form-control-plaintext.form-control-sm, .form-control-plaintext.form-control-lg {\n  padding-right: 0;\n  padding-left: 0;\n}\n\n.form-control-sm {\n  min-height: calc(1.5em + 0.5rem + 2px);\n  padding: 0.25rem 0.5rem;\n  font-size: 0.875rem;\n  border-radius: 0.2rem;\n}\n\n.form-control-sm::file-selector-button {\n  padding: 0.25rem 0.5rem;\n  margin: -0.25rem -0.5rem;\n  -webkit-margin-end: 0.5rem;\n  -moz-margin-end: 0.5rem;\n  margin-inline-end: 0.5rem;\n}\n\n.form-control-sm::-webkit-file-upload-button {\n  padding: 0.25rem 0.5rem;\n  margin: -0.25rem -0.5rem;\n  -webkit-margin-end: 0.5rem;\n  margin-inline-end: 0.5rem;\n}\n\n.form-control-lg {\n  min-height: calc(1.5em + 1rem + 2px);\n  padding: 0.5rem 1rem;\n  font-size: 1.25rem;\n  border-radius: 0.3rem;\n}\n\n.form-control-lg::file-selector-button {\n  padding: 0.5rem 1rem;\n  margin: -0.5rem -1rem;\n  -webkit-margin-end: 1rem;\n  -moz-margin-end: 1rem;\n  margin-inline-end: 1rem;\n}\n\n.form-control-lg::-webkit-file-upload-button {\n  padding: 0.5rem 1rem;\n  margin: -0.5rem -1rem;\n  -webkit-margin-end: 1rem;\n  margin-inline-end: 1rem;\n}\n\ntextarea.form-control {\n  min-height: calc(1.5em + 0.75rem + 2px);\n}\n\ntextarea.form-control-sm {\n  min-height: calc(1.5em + 0.5rem + 2px);\n}\n\ntextarea.form-control-lg {\n  min-height: calc(1.5em + 1rem + 2px);\n}\n\n.form-control-color {\n  width: 3rem;\n  height: auto;\n  padding: 0.375rem;\n}\n\n.form-control-color:not(:disabled):not([readonly]) {\n  cursor: pointer;\n}\n\n.form-control-color::-moz-color-swatch {\n  height: 1.5em;\n  border-radius: 0.25rem;\n}\n\n.form-control-color::-webkit-color-swatch {\n  height: 1.5em;\n  border-radius: 0.25rem;\n}\n\n.form-select {\n  display: block;\n  width: 100%;\n  padding: 0.375rem 2.25rem 0.375rem 0.75rem;\n  -moz-padding-start: calc(0.75rem - 3px);\n  font-size: 1rem;\n  font-weight: 400;\n  line-height: 1.5;\n  color: #3e3f3a;\n  background-color: #fff;\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%233e3f3a' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e\");\n  background-repeat: no-repeat;\n  background-position: right 0.75rem center;\n  background-size: 16px 12px;\n  border: 1px solid #ced4da;\n  border-radius: 0.25rem;\n  transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n  -webkit-appearance: none;\n  -moz-appearance: none;\n  appearance: none;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .form-select {\n    transition: none;\n  }\n}\n\n.form-select:focus {\n  border-color: #99aec4;\n  outline: 0;\n  box-shadow: 0 0 0 0.25rem rgba(50, 93, 136, 0.25);\n}\n\n.form-select[multiple], .form-select[size]:not([size=\"1\"]) {\n  padding-right: 0.75rem;\n  background-image: none;\n}\n\n.form-select:disabled {\n  background-color: #f8f5f0;\n}\n\n.form-select:-moz-focusring {\n  color: transparent;\n  text-shadow: 0 0 0 #3e3f3a;\n}\n\n.form-select-sm {\n  padding-top: 0.25rem;\n  padding-bottom: 0.25rem;\n  padding-left: 0.5rem;\n  font-size: 0.875rem;\n  border-radius: 0.2rem;\n}\n\n.form-select-lg {\n  padding-top: 0.5rem;\n  padding-bottom: 0.5rem;\n  padding-left: 1rem;\n  font-size: 1.25rem;\n  border-radius: 0.3rem;\n}\n\n.form-check {\n  display: block;\n  min-height: 1.5rem;\n  padding-left: 1.5em;\n  margin-bottom: 0.125rem;\n}\n\n.form-check .form-check-input {\n  float: left;\n  margin-left: -1.5em;\n}\n\n.form-check-input {\n  width: 1em;\n  height: 1em;\n  margin-top: 0.25em;\n  vertical-align: top;\n  background-color: #fff;\n  background-repeat: no-repeat;\n  background-position: center;\n  background-size: contain;\n  border: 1px solid rgba(0, 0, 0, 0.25);\n  -webkit-appearance: none;\n  -moz-appearance: none;\n  appearance: none;\n  -webkit-print-color-adjust: exact;\n  color-adjust: exact;\n}\n\n.form-check-input[type=\"checkbox\"] {\n  border-radius: 0.25em;\n}\n\n.form-check-input[type=\"radio\"] {\n  border-radius: 50%;\n}\n\n.form-check-input:active {\n  -webkit-filter: brightness(90%);\n  filter: brightness(90%);\n}\n\n.form-check-input:focus {\n  border-color: #99aec4;\n  outline: 0;\n  box-shadow: 0 0 0 0.25rem rgba(50, 93, 136, 0.25);\n}\n\n.form-check-input:checked {\n  background-color: #325d88;\n  border-color: #325d88;\n}\n\n.form-check-input:checked[type=\"checkbox\"] {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10l3 3l6-6'/%3e%3c/svg%3e\");\n}\n\n.form-check-input:checked[type=\"radio\"] {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='2' fill='%23fff'/%3e%3c/svg%3e\");\n}\n\n.form-check-input[type=\"checkbox\"]:indeterminate {\n  background-color: #325d88;\n  border-color: #325d88;\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10h8'/%3e%3c/svg%3e\");\n}\n\n.form-check-input:disabled {\n  pointer-events: none;\n  -webkit-filter: none;\n  filter: none;\n  opacity: 0.5;\n}\n\n.form-check-input[disabled] ~ .form-check-label, .form-check-input:disabled ~ .form-check-label {\n  opacity: 0.5;\n}\n\n.form-switch {\n  padding-left: 2.5em;\n}\n\n.form-switch .form-check-input {\n  width: 2em;\n  margin-left: -2.5em;\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%280, 0, 0, 0.25%29'/%3e%3c/svg%3e\");\n  background-position: left center;\n  border-radius: 2em;\n  transition: background-position 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .form-switch .form-check-input {\n    transition: none;\n  }\n}\n\n.form-switch .form-check-input:focus {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%2399aec4'/%3e%3c/svg%3e\");\n}\n\n.form-switch .form-check-input:checked {\n  background-position: right center;\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e\");\n}\n\n.form-check-inline {\n  display: inline-block;\n  margin-right: 1rem;\n}\n\n.btn-check {\n  position: absolute;\n  clip: rect(0, 0, 0, 0);\n  pointer-events: none;\n}\n\n.btn-check[disabled] + .btn, .btn-check:disabled + .btn {\n  pointer-events: none;\n  -webkit-filter: none;\n  filter: none;\n  opacity: 0.65;\n}\n\n.form-range {\n  width: 100%;\n  height: 1.5rem;\n  padding: 0;\n  background-color: transparent;\n  -webkit-appearance: none;\n  -moz-appearance: none;\n  appearance: none;\n}\n\n.form-range:focus {\n  outline: 0;\n}\n\n.form-range:focus::-webkit-slider-thumb {\n  box-shadow: 0 0 0 1px #fff, 0 0 0 0.25rem rgba(50, 93, 136, 0.25);\n}\n\n.form-range:focus::-moz-range-thumb {\n  box-shadow: 0 0 0 1px #fff, 0 0 0 0.25rem rgba(50, 93, 136, 0.25);\n}\n\n.form-range::-moz-focus-outer {\n  border: 0;\n}\n\n.form-range::-webkit-slider-thumb {\n  width: 1rem;\n  height: 1rem;\n  margin-top: -0.25rem;\n  background-color: #325d88;\n  border: 0;\n  border-radius: 1rem;\n  -webkit-transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n  transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n  -webkit-appearance: none;\n  appearance: none;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .form-range::-webkit-slider-thumb {\n    -webkit-transition: none;\n    transition: none;\n  }\n}\n\n.form-range::-webkit-slider-thumb:active {\n  background-color: #c2cedb;\n}\n\n.form-range::-webkit-slider-runnable-track {\n  width: 100%;\n  height: 0.5rem;\n  color: transparent;\n  cursor: pointer;\n  background-color: #dfd7ca;\n  border-color: transparent;\n  border-radius: 1rem;\n}\n\n.form-range::-moz-range-thumb {\n  width: 1rem;\n  height: 1rem;\n  background-color: #325d88;\n  border: 0;\n  border-radius: 1rem;\n  -moz-transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n  transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n  -moz-appearance: none;\n  appearance: none;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .form-range::-moz-range-thumb {\n    -moz-transition: none;\n    transition: none;\n  }\n}\n\n.form-range::-moz-range-thumb:active {\n  background-color: #c2cedb;\n}\n\n.form-range::-moz-range-track {\n  width: 100%;\n  height: 0.5rem;\n  color: transparent;\n  cursor: pointer;\n  background-color: #dfd7ca;\n  border-color: transparent;\n  border-radius: 1rem;\n}\n\n.form-range:disabled {\n  pointer-events: none;\n}\n\n.form-range:disabled::-webkit-slider-thumb {\n  background-color: #98978b;\n}\n\n.form-range:disabled::-moz-range-thumb {\n  background-color: #98978b;\n}\n\n.form-floating {\n  position: relative;\n}\n\n.form-floating > .form-control,\n.form-floating > .form-select {\n  height: calc(3.5rem + 2px);\n  line-height: 1.25;\n}\n\n.form-floating > label {\n  position: absolute;\n  top: 0;\n  left: 0;\n  height: 100%;\n  padding: 1rem 0.75rem;\n  pointer-events: none;\n  border: 1px solid transparent;\n  -webkit-transform-origin: 0 0;\n  transform-origin: 0 0;\n  transition: opacity 0.1s ease-in-out, -webkit-transform 0.1s ease-in-out;\n  transition: opacity 0.1s ease-in-out, transform 0.1s ease-in-out;\n  transition: opacity 0.1s ease-in-out, transform 0.1s ease-in-out, -webkit-transform 0.1s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .form-floating > label {\n    transition: none;\n  }\n}\n\n.form-floating > .form-control {\n  padding: 1rem 0.75rem;\n}\n\n.form-floating > .form-control::-webkit-input-placeholder {\n  color: transparent;\n}\n\n.form-floating > .form-control::-moz-placeholder {\n  color: transparent;\n}\n\n.form-floating > .form-control:-ms-input-placeholder {\n  color: transparent;\n}\n\n.form-floating > .form-control::-ms-input-placeholder {\n  color: transparent;\n}\n\n.form-floating > .form-control::placeholder {\n  color: transparent;\n}\n\n.form-floating > .form-control:not(:-moz-placeholder-shown) {\n  padding-top: 1.625rem;\n  padding-bottom: 0.625rem;\n}\n\n.form-floating > .form-control:not(:-ms-input-placeholder) {\n  padding-top: 1.625rem;\n  padding-bottom: 0.625rem;\n}\n\n.form-floating > .form-control:focus, .form-floating > .form-control:not(:placeholder-shown) {\n  padding-top: 1.625rem;\n  padding-bottom: 0.625rem;\n}\n\n.form-floating > .form-control:-webkit-autofill {\n  padding-top: 1.625rem;\n  padding-bottom: 0.625rem;\n}\n\n.form-floating > .form-select {\n  padding-top: 1.625rem;\n  padding-bottom: 0.625rem;\n}\n\n.form-floating > .form-control:not(:-moz-placeholder-shown) ~ label {\n  opacity: 0.65;\n  transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);\n}\n\n.form-floating > .form-control:not(:-ms-input-placeholder) ~ label {\n  opacity: 0.65;\n  transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);\n}\n\n.form-floating > .form-control:focus ~ label,\n.form-floating > .form-control:not(:placeholder-shown) ~ label,\n.form-floating > .form-select ~ label {\n  opacity: 0.65;\n  -webkit-transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);\n  transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);\n}\n\n.form-floating > .form-control:-webkit-autofill ~ label {\n  opacity: 0.65;\n  -webkit-transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);\n  transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);\n}\n\n.input-group {\n  position: relative;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n  flex-wrap: wrap;\n  -ms-flex-align: stretch;\n  align-items: stretch;\n  width: 100%;\n}\n\n.input-group > .form-control,\n.input-group > .form-select {\n  position: relative;\n  -ms-flex: 1 1 auto;\n  flex: 1 1 auto;\n  width: 1%;\n  min-width: 0;\n}\n\n.input-group > .form-control:focus,\n.input-group > .form-select:focus {\n  z-index: 3;\n}\n\n.input-group .btn {\n  position: relative;\n  z-index: 2;\n}\n\n.input-group .btn:focus {\n  z-index: 3;\n}\n\n.input-group-text {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-align: center;\n  align-items: center;\n  padding: 0.375rem 0.75rem;\n  font-size: 1rem;\n  font-weight: 400;\n  line-height: 1.5;\n  color: #3e3f3a;\n  text-align: center;\n  white-space: nowrap;\n  background-color: #f8f5f0;\n  border: 1px solid #ced4da;\n  border-radius: 0.25rem;\n}\n\n.input-group-lg > .form-control,\n.input-group-lg > .form-select,\n.input-group-lg > .input-group-text,\n.input-group-lg > .btn {\n  padding: 0.5rem 1rem;\n  font-size: 1.25rem;\n  border-radius: 0.3rem;\n}\n\n.input-group-sm > .form-control,\n.input-group-sm > .form-select,\n.input-group-sm > .input-group-text,\n.input-group-sm > .btn {\n  padding: 0.25rem 0.5rem;\n  font-size: 0.875rem;\n  border-radius: 0.2rem;\n}\n\n.input-group-lg > .form-select,\n.input-group-sm > .form-select {\n  padding-right: 3rem;\n}\n\n.input-group:not(.has-validation) > :not(:last-child):not(.dropdown-toggle):not(.dropdown-menu),\n.input-group:not(.has-validation) > .dropdown-toggle:nth-last-child(n + 3) {\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n}\n\n.input-group.has-validation > :nth-last-child(n + 3):not(.dropdown-toggle):not(.dropdown-menu),\n.input-group.has-validation > .dropdown-toggle:nth-last-child(n + 4) {\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n}\n\n.input-group > :not(:first-child):not(.dropdown-menu):not(.valid-tooltip):not(.valid-feedback):not(.invalid-tooltip):not(.invalid-feedback) {\n  margin-left: -1px;\n  border-top-left-radius: 0;\n  border-bottom-left-radius: 0;\n}\n\n.valid-feedback {\n  display: none;\n  width: 100%;\n  margin-top: 0.25rem;\n  font-size: 0.875em;\n  color: #93c54b;\n}\n\n.valid-tooltip {\n  position: absolute;\n  top: 100%;\n  z-index: 5;\n  display: none;\n  max-width: 100%;\n  padding: 0.25rem 0.5rem;\n  margin-top: .1rem;\n  font-size: 0.875rem;\n  color: #fff;\n  background-color: rgba(147, 197, 75, 0.9);\n  border-radius: 0.25rem;\n}\n\n.was-validated :valid ~ .valid-feedback,\n.was-validated :valid ~ .valid-tooltip,\n.is-valid ~ .valid-feedback,\n.is-valid ~ .valid-tooltip {\n  display: block;\n}\n\n.was-validated .form-control:valid, .form-control.is-valid {\n  border-color: #93c54b;\n  padding-right: calc(1.5em + 0.75rem);\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%2393c54b' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e\");\n  background-repeat: no-repeat;\n  background-position: right calc(0.375em + 0.1875rem) center;\n  background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n\n.was-validated .form-control:valid:focus, .form-control.is-valid:focus {\n  border-color: #93c54b;\n  box-shadow: 0 0 0 0.25rem rgba(147, 197, 75, 0.25);\n}\n\n.was-validated textarea.form-control:valid, textarea.form-control.is-valid {\n  padding-right: calc(1.5em + 0.75rem);\n  background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem);\n}\n\n.was-validated .form-select:valid, .form-select.is-valid {\n  border-color: #93c54b;\n}\n\n.was-validated .form-select:valid:not([multiple]):not([size]), .was-validated .form-select:valid:not([multiple])[size=\"1\"], .form-select.is-valid:not([multiple]):not([size]), .form-select.is-valid:not([multiple])[size=\"1\"] {\n  padding-right: 4.125rem;\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%233e3f3a' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e\"), url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%2393c54b' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e\");\n  background-position: right 0.75rem center, center right 2.25rem;\n  background-size: 16px 12px, calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n\n.was-validated .form-select:valid:focus, .form-select.is-valid:focus {\n  border-color: #93c54b;\n  box-shadow: 0 0 0 0.25rem rgba(147, 197, 75, 0.25);\n}\n\n.was-validated .form-check-input:valid, .form-check-input.is-valid {\n  border-color: #93c54b;\n}\n\n.was-validated .form-check-input:valid:checked, .form-check-input.is-valid:checked {\n  background-color: #93c54b;\n}\n\n.was-validated .form-check-input:valid:focus, .form-check-input.is-valid:focus {\n  box-shadow: 0 0 0 0.25rem rgba(147, 197, 75, 0.25);\n}\n\n.was-validated .form-check-input:valid ~ .form-check-label, .form-check-input.is-valid ~ .form-check-label {\n  color: #93c54b;\n}\n\n.form-check-inline .form-check-input ~ .valid-feedback {\n  margin-left: .5em;\n}\n\n.was-validated .input-group .form-control:valid, .input-group .form-control.is-valid, .was-validated\n.input-group .form-select:valid,\n.input-group .form-select.is-valid {\n  z-index: 1;\n}\n\n.was-validated .input-group .form-control:valid:focus, .input-group .form-control.is-valid:focus, .was-validated\n.input-group .form-select:valid:focus,\n.input-group .form-select.is-valid:focus {\n  z-index: 3;\n}\n\n.invalid-feedback {\n  display: none;\n  width: 100%;\n  margin-top: 0.25rem;\n  font-size: 0.875em;\n  color: #d9534f;\n}\n\n.invalid-tooltip {\n  position: absolute;\n  top: 100%;\n  z-index: 5;\n  display: none;\n  max-width: 100%;\n  padding: 0.25rem 0.5rem;\n  margin-top: .1rem;\n  font-size: 0.875rem;\n  color: #fff;\n  background-color: rgba(217, 83, 79, 0.9);\n  border-radius: 0.25rem;\n}\n\n.was-validated :invalid ~ .invalid-feedback,\n.was-validated :invalid ~ .invalid-tooltip,\n.is-invalid ~ .invalid-feedback,\n.is-invalid ~ .invalid-tooltip {\n  display: block;\n}\n\n.was-validated .form-control:invalid, .form-control.is-invalid {\n  border-color: #d9534f;\n  padding-right: calc(1.5em + 0.75rem);\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23d9534f'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23d9534f' stroke='none'/%3e%3c/svg%3e\");\n  background-repeat: no-repeat;\n  background-position: right calc(0.375em + 0.1875rem) center;\n  background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n\n.was-validated .form-control:invalid:focus, .form-control.is-invalid:focus {\n  border-color: #d9534f;\n  box-shadow: 0 0 0 0.25rem rgba(217, 83, 79, 0.25);\n}\n\n.was-validated textarea.form-control:invalid, textarea.form-control.is-invalid {\n  padding-right: calc(1.5em + 0.75rem);\n  background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem);\n}\n\n.was-validated .form-select:invalid, .form-select.is-invalid {\n  border-color: #d9534f;\n}\n\n.was-validated .form-select:invalid:not([multiple]):not([size]), .was-validated .form-select:invalid:not([multiple])[size=\"1\"], .form-select.is-invalid:not([multiple]):not([size]), .form-select.is-invalid:not([multiple])[size=\"1\"] {\n  padding-right: 4.125rem;\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%233e3f3a' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e\"), url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23d9534f'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23d9534f' stroke='none'/%3e%3c/svg%3e\");\n  background-position: right 0.75rem center, center right 2.25rem;\n  background-size: 16px 12px, calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n\n.was-validated .form-select:invalid:focus, .form-select.is-invalid:focus {\n  border-color: #d9534f;\n  box-shadow: 0 0 0 0.25rem rgba(217, 83, 79, 0.25);\n}\n\n.was-validated .form-check-input:invalid, .form-check-input.is-invalid {\n  border-color: #d9534f;\n}\n\n.was-validated .form-check-input:invalid:checked, .form-check-input.is-invalid:checked {\n  background-color: #d9534f;\n}\n\n.was-validated .form-check-input:invalid:focus, .form-check-input.is-invalid:focus {\n  box-shadow: 0 0 0 0.25rem rgba(217, 83, 79, 0.25);\n}\n\n.was-validated .form-check-input:invalid ~ .form-check-label, .form-check-input.is-invalid ~ .form-check-label {\n  color: #d9534f;\n}\n\n.form-check-inline .form-check-input ~ .invalid-feedback {\n  margin-left: .5em;\n}\n\n.was-validated .input-group .form-control:invalid, .input-group .form-control.is-invalid, .was-validated\n.input-group .form-select:invalid,\n.input-group .form-select.is-invalid {\n  z-index: 2;\n}\n\n.was-validated .input-group .form-control:invalid:focus, .input-group .form-control.is-invalid:focus, .was-validated\n.input-group .form-select:invalid:focus,\n.input-group .form-select.is-invalid:focus {\n  z-index: 3;\n}\n\n.btn {\n  display: inline-block;\n  font-weight: 400;\n  line-height: 1.5;\n  color: #3e3f3a;\n  text-align: center;\n  text-decoration: none;\n  vertical-align: middle;\n  cursor: pointer;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  user-select: none;\n  background-color: transparent;\n  border: 1px solid transparent;\n  padding: 0.375rem 0.75rem;\n  font-size: 1rem;\n  border-radius: 0.25rem;\n  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .btn {\n    transition: none;\n  }\n}\n\n.btn:hover {\n  color: #3e3f3a;\n}\n\n.btn-check:focus + .btn, .btn:focus {\n  outline: 0;\n  box-shadow: 0 0 0 0.25rem rgba(50, 93, 136, 0.25);\n}\n\n.btn:disabled, .btn.disabled,\nfieldset:disabled .btn {\n  pointer-events: none;\n  opacity: 0.65;\n}\n\n.btn-primary {\n  color: #fff;\n  background-color: #325d88;\n  border-color: #325d88;\n}\n\n.btn-primary:hover {\n  color: #fff;\n  background-color: #2b4f74;\n  border-color: #284a6d;\n}\n\n.btn-check:focus + .btn-primary, .btn-primary:focus {\n  color: #fff;\n  background-color: #2b4f74;\n  border-color: #284a6d;\n  box-shadow: 0 0 0 0.25rem rgba(81, 117, 154, 0.5);\n}\n\n.btn-check:checked + .btn-primary,\n.btn-check:active + .btn-primary, .btn-primary:active, .btn-primary.active,\n.show > .btn-primary.dropdown-toggle {\n  color: #fff;\n  background-color: #284a6d;\n  border-color: #264666;\n}\n\n.btn-check:checked + .btn-primary:focus,\n.btn-check:active + .btn-primary:focus, .btn-primary:active:focus, .btn-primary.active:focus,\n.show > .btn-primary.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.25rem rgba(81, 117, 154, 0.5);\n}\n\n.btn-primary:disabled, .btn-primary.disabled {\n  color: #fff;\n  background-color: #325d88;\n  border-color: #325d88;\n}\n\n.btn-secondary {\n  color: #fff;\n  background-color: #8e8c84;\n  border-color: #8e8c84;\n}\n\n.btn-secondary:hover {\n  color: #fff;\n  background-color: #797770;\n  border-color: #72706a;\n}\n\n.btn-check:focus + .btn-secondary, .btn-secondary:focus {\n  color: #fff;\n  background-color: #797770;\n  border-color: #72706a;\n  box-shadow: 0 0 0 0.25rem rgba(159, 157, 150, 0.5);\n}\n\n.btn-check:checked + .btn-secondary,\n.btn-check:active + .btn-secondary, .btn-secondary:active, .btn-secondary.active,\n.show > .btn-secondary.dropdown-toggle {\n  color: #fff;\n  background-color: #72706a;\n  border-color: #6b6963;\n}\n\n.btn-check:checked + .btn-secondary:focus,\n.btn-check:active + .btn-secondary:focus, .btn-secondary:active:focus, .btn-secondary.active:focus,\n.show > .btn-secondary.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.25rem rgba(159, 157, 150, 0.5);\n}\n\n.btn-secondary:disabled, .btn-secondary.disabled {\n  color: #fff;\n  background-color: #8e8c84;\n  border-color: #8e8c84;\n}\n\n.btn-success {\n  color: #fff;\n  background-color: #93c54b;\n  border-color: #93c54b;\n}\n\n.btn-success:hover {\n  color: #fff;\n  background-color: #7da740;\n  border-color: #769e3c;\n}\n\n.btn-check:focus + .btn-success, .btn-success:focus {\n  color: #fff;\n  background-color: #7da740;\n  border-color: #769e3c;\n  box-shadow: 0 0 0 0.25rem rgba(163, 206, 102, 0.5);\n}\n\n.btn-check:checked + .btn-success,\n.btn-check:active + .btn-success, .btn-success:active, .btn-success.active,\n.show > .btn-success.dropdown-toggle {\n  color: #fff;\n  background-color: #769e3c;\n  border-color: #6e9438;\n}\n\n.btn-check:checked + .btn-success:focus,\n.btn-check:active + .btn-success:focus, .btn-success:active:focus, .btn-success.active:focus,\n.show > .btn-success.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.25rem rgba(163, 206, 102, 0.5);\n}\n\n.btn-success:disabled, .btn-success.disabled {\n  color: #fff;\n  background-color: #93c54b;\n  border-color: #93c54b;\n}\n\n.btn-info {\n  color: #fff;\n  background-color: #29abe0;\n  border-color: #29abe0;\n}\n\n.btn-info:hover {\n  color: #fff;\n  background-color: #2391be;\n  border-color: #2189b3;\n}\n\n.btn-check:focus + .btn-info, .btn-info:focus {\n  color: #fff;\n  background-color: #2391be;\n  border-color: #2189b3;\n  box-shadow: 0 0 0 0.25rem rgba(73, 184, 229, 0.5);\n}\n\n.btn-check:checked + .btn-info,\n.btn-check:active + .btn-info, .btn-info:active, .btn-info.active,\n.show > .btn-info.dropdown-toggle {\n  color: #fff;\n  background-color: #2189b3;\n  border-color: #1f80a8;\n}\n\n.btn-check:checked + .btn-info:focus,\n.btn-check:active + .btn-info:focus, .btn-info:active:focus, .btn-info.active:focus,\n.show > .btn-info.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.25rem rgba(73, 184, 229, 0.5);\n}\n\n.btn-info:disabled, .btn-info.disabled {\n  color: #fff;\n  background-color: #29abe0;\n  border-color: #29abe0;\n}\n\n.btn-warning {\n  color: #fff;\n  background-color: #f47c3c;\n  border-color: #f47c3c;\n}\n\n.btn-warning:hover {\n  color: #fff;\n  background-color: #cf6933;\n  border-color: #c36330;\n}\n\n.btn-check:focus + .btn-warning, .btn-warning:focus {\n  color: #fff;\n  background-color: #cf6933;\n  border-color: #c36330;\n  box-shadow: 0 0 0 0.25rem rgba(246, 144, 89, 0.5);\n}\n\n.btn-check:checked + .btn-warning,\n.btn-check:active + .btn-warning, .btn-warning:active, .btn-warning.active,\n.show > .btn-warning.dropdown-toggle {\n  color: #fff;\n  background-color: #c36330;\n  border-color: #b75d2d;\n}\n\n.btn-check:checked + .btn-warning:focus,\n.btn-check:active + .btn-warning:focus, .btn-warning:active:focus, .btn-warning.active:focus,\n.show > .btn-warning.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.25rem rgba(246, 144, 89, 0.5);\n}\n\n.btn-warning:disabled, .btn-warning.disabled {\n  color: #fff;\n  background-color: #f47c3c;\n  border-color: #f47c3c;\n}\n\n.btn-danger {\n  color: #fff;\n  background-color: #d9534f;\n  border-color: #d9534f;\n}\n\n.btn-danger:hover {\n  color: #fff;\n  background-color: #b84743;\n  border-color: #ae423f;\n}\n\n.btn-check:focus + .btn-danger, .btn-danger:focus {\n  color: #fff;\n  background-color: #b84743;\n  border-color: #ae423f;\n  box-shadow: 0 0 0 0.25rem rgba(223, 109, 105, 0.5);\n}\n\n.btn-check:checked + .btn-danger,\n.btn-check:active + .btn-danger, .btn-danger:active, .btn-danger.active,\n.show > .btn-danger.dropdown-toggle {\n  color: #fff;\n  background-color: #ae423f;\n  border-color: #a33e3b;\n}\n\n.btn-check:checked + .btn-danger:focus,\n.btn-check:active + .btn-danger:focus, .btn-danger:active:focus, .btn-danger.active:focus,\n.show > .btn-danger.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.25rem rgba(223, 109, 105, 0.5);\n}\n\n.btn-danger:disabled, .btn-danger.disabled {\n  color: #fff;\n  background-color: #d9534f;\n  border-color: #d9534f;\n}\n\n.btn-light {\n  color: #000;\n  background-color: #f8f5f0;\n  border-color: #f8f5f0;\n}\n\n.btn-light:hover {\n  color: #000;\n  background-color: #f9f7f2;\n  border-color: #f9f6f2;\n}\n\n.btn-check:focus + .btn-light, .btn-light:focus {\n  color: #000;\n  background-color: #f9f7f2;\n  border-color: #f9f6f2;\n  box-shadow: 0 0 0 0.25rem rgba(211, 208, 204, 0.5);\n}\n\n.btn-check:checked + .btn-light,\n.btn-check:active + .btn-light, .btn-light:active, .btn-light.active,\n.show > .btn-light.dropdown-toggle {\n  color: #000;\n  background-color: #f9f7f3;\n  border-color: #f9f6f2;\n}\n\n.btn-check:checked + .btn-light:focus,\n.btn-check:active + .btn-light:focus, .btn-light:active:focus, .btn-light.active:focus,\n.show > .btn-light.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.25rem rgba(211, 208, 204, 0.5);\n}\n\n.btn-light:disabled, .btn-light.disabled {\n  color: #000;\n  background-color: #f8f5f0;\n  border-color: #f8f5f0;\n}\n\n.btn-dark {\n  color: #fff;\n  background-color: #3e3f3a;\n  border-color: #3e3f3a;\n}\n\n.btn-dark:hover {\n  color: #fff;\n  background-color: #353631;\n  border-color: #32322e;\n}\n\n.btn-check:focus + .btn-dark, .btn-dark:focus {\n  color: #fff;\n  background-color: #353631;\n  border-color: #32322e;\n  box-shadow: 0 0 0 0.25rem rgba(91, 92, 88, 0.5);\n}\n\n.btn-check:checked + .btn-dark,\n.btn-check:active + .btn-dark, .btn-dark:active, .btn-dark.active,\n.show > .btn-dark.dropdown-toggle {\n  color: #fff;\n  background-color: #32322e;\n  border-color: #2f2f2c;\n}\n\n.btn-check:checked + .btn-dark:focus,\n.btn-check:active + .btn-dark:focus, .btn-dark:active:focus, .btn-dark.active:focus,\n.show > .btn-dark.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.25rem rgba(91, 92, 88, 0.5);\n}\n\n.btn-dark:disabled, .btn-dark.disabled {\n  color: #fff;\n  background-color: #3e3f3a;\n  border-color: #3e3f3a;\n}\n\n.btn-outline-primary {\n  color: #325d88;\n  border-color: #325d88;\n}\n\n.btn-outline-primary:hover {\n  color: #fff;\n  background-color: #325d88;\n  border-color: #325d88;\n}\n\n.btn-check:focus + .btn-outline-primary, .btn-outline-primary:focus {\n  box-shadow: 0 0 0 0.25rem rgba(50, 93, 136, 0.5);\n}\n\n.btn-check:checked + .btn-outline-primary,\n.btn-check:active + .btn-outline-primary, .btn-outline-primary:active, .btn-outline-primary.active, .btn-outline-primary.dropdown-toggle.show {\n  color: #fff;\n  background-color: #325d88;\n  border-color: #325d88;\n}\n\n.btn-check:checked + .btn-outline-primary:focus,\n.btn-check:active + .btn-outline-primary:focus, .btn-outline-primary:active:focus, .btn-outline-primary.active:focus, .btn-outline-primary.dropdown-toggle.show:focus {\n  box-shadow: 0 0 0 0.25rem rgba(50, 93, 136, 0.5);\n}\n\n.btn-outline-primary:disabled, .btn-outline-primary.disabled {\n  color: #325d88;\n  background-color: transparent;\n}\n\n.btn-outline-secondary {\n  color: #8e8c84;\n  border-color: #8e8c84;\n}\n\n.btn-outline-secondary:hover {\n  color: #fff;\n  background-color: #8e8c84;\n  border-color: #8e8c84;\n}\n\n.btn-check:focus + .btn-outline-secondary, .btn-outline-secondary:focus {\n  box-shadow: 0 0 0 0.25rem rgba(142, 140, 132, 0.5);\n}\n\n.btn-check:checked + .btn-outline-secondary,\n.btn-check:active + .btn-outline-secondary, .btn-outline-secondary:active, .btn-outline-secondary.active, .btn-outline-secondary.dropdown-toggle.show {\n  color: #fff;\n  background-color: #8e8c84;\n  border-color: #8e8c84;\n}\n\n.btn-check:checked + .btn-outline-secondary:focus,\n.btn-check:active + .btn-outline-secondary:focus, .btn-outline-secondary:active:focus, .btn-outline-secondary.active:focus, .btn-outline-secondary.dropdown-toggle.show:focus {\n  box-shadow: 0 0 0 0.25rem rgba(142, 140, 132, 0.5);\n}\n\n.btn-outline-secondary:disabled, .btn-outline-secondary.disabled {\n  color: #8e8c84;\n  background-color: transparent;\n}\n\n.btn-outline-success {\n  color: #93c54b;\n  border-color: #93c54b;\n}\n\n.btn-outline-success:hover {\n  color: #fff;\n  background-color: #93c54b;\n  border-color: #93c54b;\n}\n\n.btn-check:focus + .btn-outline-success, .btn-outline-success:focus {\n  box-shadow: 0 0 0 0.25rem rgba(147, 197, 75, 0.5);\n}\n\n.btn-check:checked + .btn-outline-success,\n.btn-check:active + .btn-outline-success, .btn-outline-success:active, .btn-outline-success.active, .btn-outline-success.dropdown-toggle.show {\n  color: #fff;\n  background-color: #93c54b;\n  border-color: #93c54b;\n}\n\n.btn-check:checked + .btn-outline-success:focus,\n.btn-check:active + .btn-outline-success:focus, .btn-outline-success:active:focus, .btn-outline-success.active:focus, .btn-outline-success.dropdown-toggle.show:focus {\n  box-shadow: 0 0 0 0.25rem rgba(147, 197, 75, 0.5);\n}\n\n.btn-outline-success:disabled, .btn-outline-success.disabled {\n  color: #93c54b;\n  background-color: transparent;\n}\n\n.btn-outline-info {\n  color: #29abe0;\n  border-color: #29abe0;\n}\n\n.btn-outline-info:hover {\n  color: #fff;\n  background-color: #29abe0;\n  border-color: #29abe0;\n}\n\n.btn-check:focus + .btn-outline-info, .btn-outline-info:focus {\n  box-shadow: 0 0 0 0.25rem rgba(41, 171, 224, 0.5);\n}\n\n.btn-check:checked + .btn-outline-info,\n.btn-check:active + .btn-outline-info, .btn-outline-info:active, .btn-outline-info.active, .btn-outline-info.dropdown-toggle.show {\n  color: #fff;\n  background-color: #29abe0;\n  border-color: #29abe0;\n}\n\n.btn-check:checked + .btn-outline-info:focus,\n.btn-check:active + .btn-outline-info:focus, .btn-outline-info:active:focus, .btn-outline-info.active:focus, .btn-outline-info.dropdown-toggle.show:focus {\n  box-shadow: 0 0 0 0.25rem rgba(41, 171, 224, 0.5);\n}\n\n.btn-outline-info:disabled, .btn-outline-info.disabled {\n  color: #29abe0;\n  background-color: transparent;\n}\n\n.btn-outline-warning {\n  color: #f47c3c;\n  border-color: #f47c3c;\n}\n\n.btn-outline-warning:hover {\n  color: #fff;\n  background-color: #f47c3c;\n  border-color: #f47c3c;\n}\n\n.btn-check:focus + .btn-outline-warning, .btn-outline-warning:focus {\n  box-shadow: 0 0 0 0.25rem rgba(244, 124, 60, 0.5);\n}\n\n.btn-check:checked + .btn-outline-warning,\n.btn-check:active + .btn-outline-warning, .btn-outline-warning:active, .btn-outline-warning.active, .btn-outline-warning.dropdown-toggle.show {\n  color: #fff;\n  background-color: #f47c3c;\n  border-color: #f47c3c;\n}\n\n.btn-check:checked + .btn-outline-warning:focus,\n.btn-check:active + .btn-outline-warning:focus, .btn-outline-warning:active:focus, .btn-outline-warning.active:focus, .btn-outline-warning.dropdown-toggle.show:focus {\n  box-shadow: 0 0 0 0.25rem rgba(244, 124, 60, 0.5);\n}\n\n.btn-outline-warning:disabled, .btn-outline-warning.disabled {\n  color: #f47c3c;\n  background-color: transparent;\n}\n\n.btn-outline-danger {\n  color: #d9534f;\n  border-color: #d9534f;\n}\n\n.btn-outline-danger:hover {\n  color: #fff;\n  background-color: #d9534f;\n  border-color: #d9534f;\n}\n\n.btn-check:focus + .btn-outline-danger, .btn-outline-danger:focus {\n  box-shadow: 0 0 0 0.25rem rgba(217, 83, 79, 0.5);\n}\n\n.btn-check:checked + .btn-outline-danger,\n.btn-check:active + .btn-outline-danger, .btn-outline-danger:active, .btn-outline-danger.active, .btn-outline-danger.dropdown-toggle.show {\n  color: #fff;\n  background-color: #d9534f;\n  border-color: #d9534f;\n}\n\n.btn-check:checked + .btn-outline-danger:focus,\n.btn-check:active + .btn-outline-danger:focus, .btn-outline-danger:active:focus, .btn-outline-danger.active:focus, .btn-outline-danger.dropdown-toggle.show:focus {\n  box-shadow: 0 0 0 0.25rem rgba(217, 83, 79, 0.5);\n}\n\n.btn-outline-danger:disabled, .btn-outline-danger.disabled {\n  color: #d9534f;\n  background-color: transparent;\n}\n\n.btn-outline-light {\n  color: #f8f5f0;\n  border-color: #f8f5f0;\n}\n\n.btn-outline-light:hover {\n  color: #000;\n  background-color: #f8f5f0;\n  border-color: #f8f5f0;\n}\n\n.btn-check:focus + .btn-outline-light, .btn-outline-light:focus {\n  box-shadow: 0 0 0 0.25rem rgba(248, 245, 240, 0.5);\n}\n\n.btn-check:checked + .btn-outline-light,\n.btn-check:active + .btn-outline-light, .btn-outline-light:active, .btn-outline-light.active, .btn-outline-light.dropdown-toggle.show {\n  color: #000;\n  background-color: #f8f5f0;\n  border-color: #f8f5f0;\n}\n\n.btn-check:checked + .btn-outline-light:focus,\n.btn-check:active + .btn-outline-light:focus, .btn-outline-light:active:focus, .btn-outline-light.active:focus, .btn-outline-light.dropdown-toggle.show:focus {\n  box-shadow: 0 0 0 0.25rem rgba(248, 245, 240, 0.5);\n}\n\n.btn-outline-light:disabled, .btn-outline-light.disabled {\n  color: #f8f5f0;\n  background-color: transparent;\n}\n\n.btn-outline-dark {\n  color: #3e3f3a;\n  border-color: #3e3f3a;\n}\n\n.btn-outline-dark:hover {\n  color: #fff;\n  background-color: #3e3f3a;\n  border-color: #3e3f3a;\n}\n\n.btn-check:focus + .btn-outline-dark, .btn-outline-dark:focus {\n  box-shadow: 0 0 0 0.25rem rgba(62, 63, 58, 0.5);\n}\n\n.btn-check:checked + .btn-outline-dark,\n.btn-check:active + .btn-outline-dark, .btn-outline-dark:active, .btn-outline-dark.active, .btn-outline-dark.dropdown-toggle.show {\n  color: #fff;\n  background-color: #3e3f3a;\n  border-color: #3e3f3a;\n}\n\n.btn-check:checked + .btn-outline-dark:focus,\n.btn-check:active + .btn-outline-dark:focus, .btn-outline-dark:active:focus, .btn-outline-dark.active:focus, .btn-outline-dark.dropdown-toggle.show:focus {\n  box-shadow: 0 0 0 0.25rem rgba(62, 63, 58, 0.5);\n}\n\n.btn-outline-dark:disabled, .btn-outline-dark.disabled {\n  color: #3e3f3a;\n  background-color: transparent;\n}\n\n.btn-link {\n  font-weight: 400;\n  color: #93c54b;\n  text-decoration: underline;\n}\n\n.btn-link:hover {\n  color: #769e3c;\n}\n\n.btn-link:disabled, .btn-link.disabled {\n  color: #8e8c84;\n}\n\n.btn-lg, .btn-group-lg > .btn {\n  padding: 0.5rem 1rem;\n  font-size: 1.25rem;\n  border-radius: 0.3rem;\n}\n\n.btn-sm, .btn-group-sm > .btn {\n  padding: 0.25rem 0.5rem;\n  font-size: 0.875rem;\n  border-radius: 0.2rem;\n}\n\n.fade {\n  transition: opacity 0.15s linear;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .fade {\n    transition: none;\n  }\n}\n\n.fade:not(.show) {\n  opacity: 0;\n}\n\n.collapse:not(.show) {\n  display: none;\n}\n\n.collapsing {\n  height: 0;\n  overflow: hidden;\n  transition: height 0.35s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .collapsing {\n    transition: none;\n  }\n}\n\n.collapsing.collapse-horizontal {\n  width: 0;\n  height: auto;\n  transition: width 0.35s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .collapsing.collapse-horizontal {\n    transition: none;\n  }\n}\n\n.dropup,\n.dropend,\n.dropdown,\n.dropstart {\n  position: relative;\n}\n\n.dropdown-toggle {\n  white-space: nowrap;\n}\n\n.dropdown-toggle::after {\n  display: inline-block;\n  margin-left: 0.255em;\n  vertical-align: 0.255em;\n  content: \"\";\n  border-top: 0.3em solid;\n  border-right: 0.3em solid transparent;\n  border-bottom: 0;\n  border-left: 0.3em solid transparent;\n}\n\n.dropdown-toggle:empty::after {\n  margin-left: 0;\n}\n\n.dropdown-menu {\n  position: absolute;\n  z-index: 1000;\n  display: none;\n  min-width: 10rem;\n  padding: 0.5rem 0;\n  margin: 0;\n  font-size: 1rem;\n  color: #3e3f3a;\n  text-align: left;\n  list-style: none;\n  background-color: #fff;\n  background-clip: padding-box;\n  border: 1px solid rgba(0, 0, 0, 0.15);\n  border-radius: 0.25rem;\n}\n\n.dropdown-menu[data-bs-popper] {\n  top: 100%;\n  left: 0;\n  margin-top: 0.125rem;\n}\n\n.dropdown-menu-start {\n  --bs-position: start;\n}\n\n.dropdown-menu-start[data-bs-popper] {\n  right: auto;\n  left: 0;\n}\n\n.dropdown-menu-end {\n  --bs-position: end;\n}\n\n.dropdown-menu-end[data-bs-popper] {\n  right: 0;\n  left: auto;\n}\n\n@media (min-width: 576px) {\n  .dropdown-menu-sm-start {\n    --bs-position: start;\n  }\n  .dropdown-menu-sm-start[data-bs-popper] {\n    right: auto;\n    left: 0;\n  }\n  .dropdown-menu-sm-end {\n    --bs-position: end;\n  }\n  .dropdown-menu-sm-end[data-bs-popper] {\n    right: 0;\n    left: auto;\n  }\n}\n\n@media (min-width: 768px) {\n  .dropdown-menu-md-start {\n    --bs-position: start;\n  }\n  .dropdown-menu-md-start[data-bs-popper] {\n    right: auto;\n    left: 0;\n  }\n  .dropdown-menu-md-end {\n    --bs-position: end;\n  }\n  .dropdown-menu-md-end[data-bs-popper] {\n    right: 0;\n    left: auto;\n  }\n}\n\n@media (min-width: 992px) {\n  .dropdown-menu-lg-start {\n    --bs-position: start;\n  }\n  .dropdown-menu-lg-start[data-bs-popper] {\n    right: auto;\n    left: 0;\n  }\n  .dropdown-menu-lg-end {\n    --bs-position: end;\n  }\n  .dropdown-menu-lg-end[data-bs-popper] {\n    right: 0;\n    left: auto;\n  }\n}\n\n@media (min-width: 1200px) {\n  .dropdown-menu-xl-start {\n    --bs-position: start;\n  }\n  .dropdown-menu-xl-start[data-bs-popper] {\n    right: auto;\n    left: 0;\n  }\n  .dropdown-menu-xl-end {\n    --bs-position: end;\n  }\n  .dropdown-menu-xl-end[data-bs-popper] {\n    right: 0;\n    left: auto;\n  }\n}\n\n@media (min-width: 1400px) {\n  .dropdown-menu-xxl-start {\n    --bs-position: start;\n  }\n  .dropdown-menu-xxl-start[data-bs-popper] {\n    right: auto;\n    left: 0;\n  }\n  .dropdown-menu-xxl-end {\n    --bs-position: end;\n  }\n  .dropdown-menu-xxl-end[data-bs-popper] {\n    right: 0;\n    left: auto;\n  }\n}\n\n.dropup .dropdown-menu[data-bs-popper] {\n  top: auto;\n  bottom: 100%;\n  margin-top: 0;\n  margin-bottom: 0.125rem;\n}\n\n.dropup .dropdown-toggle::after {\n  display: inline-block;\n  margin-left: 0.255em;\n  vertical-align: 0.255em;\n  content: \"\";\n  border-top: 0;\n  border-right: 0.3em solid transparent;\n  border-bottom: 0.3em solid;\n  border-left: 0.3em solid transparent;\n}\n\n.dropup .dropdown-toggle:empty::after {\n  margin-left: 0;\n}\n\n.dropend .dropdown-menu[data-bs-popper] {\n  top: 0;\n  right: auto;\n  left: 100%;\n  margin-top: 0;\n  margin-left: 0.125rem;\n}\n\n.dropend .dropdown-toggle::after {\n  display: inline-block;\n  margin-left: 0.255em;\n  vertical-align: 0.255em;\n  content: \"\";\n  border-top: 0.3em solid transparent;\n  border-right: 0;\n  border-bottom: 0.3em solid transparent;\n  border-left: 0.3em solid;\n}\n\n.dropend .dropdown-toggle:empty::after {\n  margin-left: 0;\n}\n\n.dropend .dropdown-toggle::after {\n  vertical-align: 0;\n}\n\n.dropstart .dropdown-menu[data-bs-popper] {\n  top: 0;\n  right: 100%;\n  left: auto;\n  margin-top: 0;\n  margin-right: 0.125rem;\n}\n\n.dropstart .dropdown-toggle::after {\n  display: inline-block;\n  margin-left: 0.255em;\n  vertical-align: 0.255em;\n  content: \"\";\n}\n\n.dropstart .dropdown-toggle::after {\n  display: none;\n}\n\n.dropstart .dropdown-toggle::before {\n  display: inline-block;\n  margin-right: 0.255em;\n  vertical-align: 0.255em;\n  content: \"\";\n  border-top: 0.3em solid transparent;\n  border-right: 0.3em solid;\n  border-bottom: 0.3em solid transparent;\n}\n\n.dropstart .dropdown-toggle:empty::after {\n  margin-left: 0;\n}\n\n.dropstart .dropdown-toggle::before {\n  vertical-align: 0;\n}\n\n.dropdown-divider {\n  height: 0;\n  margin: 0.5rem 0;\n  overflow: hidden;\n  border-top: 1px solid rgba(0, 0, 0, 0.15);\n}\n\n.dropdown-item {\n  display: block;\n  width: 100%;\n  padding: 0.25rem 1rem;\n  clear: both;\n  font-weight: 400;\n  color: #8e8c84;\n  text-align: inherit;\n  text-decoration: none;\n  white-space: nowrap;\n  background-color: transparent;\n  border: 0;\n}\n\n.dropdown-item:hover, .dropdown-item:focus {\n  color: #8e8c84;\n  background-color: #f8f5f0;\n}\n\n.dropdown-item.active, .dropdown-item:active {\n  color: #8e8c84;\n  text-decoration: none;\n  background-color: #f8f5f0;\n}\n\n.dropdown-item.disabled, .dropdown-item:disabled {\n  color: #98978b;\n  pointer-events: none;\n  background-color: transparent;\n}\n\n.dropdown-menu.show {\n  display: block;\n}\n\n.dropdown-header {\n  display: block;\n  padding: 0.5rem 1rem;\n  margin-bottom: 0;\n  font-size: 0.875rem;\n  color: #8e8c84;\n  white-space: nowrap;\n}\n\n.dropdown-item-text {\n  display: block;\n  padding: 0.25rem 1rem;\n  color: #8e8c84;\n}\n\n.dropdown-menu-dark {\n  color: #dfd7ca;\n  background-color: #3e3f3a;\n  border-color: rgba(0, 0, 0, 0.15);\n}\n\n.dropdown-menu-dark .dropdown-item {\n  color: #dfd7ca;\n}\n\n.dropdown-menu-dark .dropdown-item:hover, .dropdown-menu-dark .dropdown-item:focus {\n  color: #fff;\n  background-color: rgba(255, 255, 255, 0.15);\n}\n\n.dropdown-menu-dark .dropdown-item.active, .dropdown-menu-dark .dropdown-item:active {\n  color: #8e8c84;\n  background-color: #f8f5f0;\n}\n\n.dropdown-menu-dark .dropdown-item.disabled, .dropdown-menu-dark .dropdown-item:disabled {\n  color: #98978b;\n}\n\n.dropdown-menu-dark .dropdown-divider {\n  border-color: rgba(0, 0, 0, 0.15);\n}\n\n.dropdown-menu-dark .dropdown-item-text {\n  color: #dfd7ca;\n}\n\n.dropdown-menu-dark .dropdown-header {\n  color: #98978b;\n}\n\n.btn-group,\n.btn-group-vertical {\n  position: relative;\n  display: -ms-inline-flexbox;\n  display: inline-flex;\n  vertical-align: middle;\n}\n\n.btn-group > .btn,\n.btn-group-vertical > .btn {\n  position: relative;\n  -ms-flex: 1 1 auto;\n  flex: 1 1 auto;\n}\n\n.btn-group > .btn-check:checked + .btn,\n.btn-group > .btn-check:focus + .btn,\n.btn-group > .btn:hover,\n.btn-group > .btn:focus,\n.btn-group > .btn:active,\n.btn-group > .btn.active,\n.btn-group-vertical > .btn-check:checked + .btn,\n.btn-group-vertical > .btn-check:focus + .btn,\n.btn-group-vertical > .btn:hover,\n.btn-group-vertical > .btn:focus,\n.btn-group-vertical > .btn:active,\n.btn-group-vertical > .btn.active {\n  z-index: 1;\n}\n\n.btn-toolbar {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n  flex-wrap: wrap;\n  -ms-flex-pack: start;\n  justify-content: flex-start;\n}\n\n.btn-toolbar .input-group {\n  width: auto;\n}\n\n.btn-group > .btn:not(:first-child),\n.btn-group > .btn-group:not(:first-child) {\n  margin-left: -1px;\n}\n\n.btn-group > .btn:not(:last-child):not(.dropdown-toggle),\n.btn-group > .btn-group:not(:last-child) > .btn {\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n}\n\n.btn-group > .btn:nth-child(n + 3),\n.btn-group > :not(.btn-check) + .btn,\n.btn-group > .btn-group:not(:first-child) > .btn {\n  border-top-left-radius: 0;\n  border-bottom-left-radius: 0;\n}\n\n.dropdown-toggle-split {\n  padding-right: 0.5625rem;\n  padding-left: 0.5625rem;\n}\n\n.dropdown-toggle-split::after,\n.dropup .dropdown-toggle-split::after,\n.dropend .dropdown-toggle-split::after {\n  margin-left: 0;\n}\n\n.dropstart .dropdown-toggle-split::before {\n  margin-right: 0;\n}\n\n.btn-sm + .dropdown-toggle-split, .btn-group-sm > .btn + .dropdown-toggle-split {\n  padding-right: 0.375rem;\n  padding-left: 0.375rem;\n}\n\n.btn-lg + .dropdown-toggle-split, .btn-group-lg > .btn + .dropdown-toggle-split {\n  padding-right: 0.75rem;\n  padding-left: 0.75rem;\n}\n\n.btn-group-vertical {\n  -ms-flex-direction: column;\n  flex-direction: column;\n  -ms-flex-align: start;\n  align-items: flex-start;\n  -ms-flex-pack: center;\n  justify-content: center;\n}\n\n.btn-group-vertical > .btn,\n.btn-group-vertical > .btn-group {\n  width: 100%;\n}\n\n.btn-group-vertical > .btn:not(:first-child),\n.btn-group-vertical > .btn-group:not(:first-child) {\n  margin-top: -1px;\n}\n\n.btn-group-vertical > .btn:not(:last-child):not(.dropdown-toggle),\n.btn-group-vertical > .btn-group:not(:last-child) > .btn {\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 0;\n}\n\n.btn-group-vertical > .btn ~ .btn,\n.btn-group-vertical > .btn-group:not(:first-child) > .btn {\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n}\n\n.nav {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n  flex-wrap: wrap;\n  padding-left: 0;\n  margin-bottom: 0;\n  list-style: none;\n}\n\n.nav-link {\n  display: block;\n  padding: 0.5rem 0.9rem;\n  color: #93c54b;\n  text-decoration: none;\n  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .nav-link {\n    transition: none;\n  }\n}\n\n.nav-link:hover, .nav-link:focus {\n  color: #769e3c;\n}\n\n.nav-link.disabled {\n  color: #dfd7ca;\n  pointer-events: none;\n  cursor: default;\n}\n\n.nav-tabs {\n  border-bottom: 1px solid #dfd7ca;\n}\n\n.nav-tabs .nav-link {\n  margin-bottom: -1px;\n  background: none;\n  border: 1px solid transparent;\n  border-top-left-radius: 0.25rem;\n  border-top-right-radius: 0.25rem;\n}\n\n.nav-tabs .nav-link:hover, .nav-tabs .nav-link:focus {\n  border-color: #dfd7ca;\n  isolation: isolate;\n}\n\n.nav-tabs .nav-link.disabled {\n  color: #dfd7ca;\n  background-color: transparent;\n  border-color: transparent;\n}\n\n.nav-tabs .nav-link.active,\n.nav-tabs .nav-item.show .nav-link {\n  color: #495057;\n  background-color: #fff;\n  border-color: #dfd7ca #dfd7ca #fff;\n}\n\n.nav-tabs .dropdown-menu {\n  margin-top: -1px;\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n}\n\n.nav-pills .nav-link {\n  background: none;\n  border: 0;\n  border-radius: 0.25rem;\n}\n\n.nav-pills .nav-link.active,\n.nav-pills .show > .nav-link {\n  color: #8e8c84;\n  background-color: #f8f5f0;\n}\n\n.nav-fill > .nav-link,\n.nav-fill .nav-item {\n  -ms-flex: 1 1 auto;\n  flex: 1 1 auto;\n  text-align: center;\n}\n\n.nav-justified > .nav-link,\n.nav-justified .nav-item {\n  -ms-flex-preferred-size: 0;\n  flex-basis: 0;\n  -ms-flex-positive: 1;\n  flex-grow: 1;\n  text-align: center;\n}\n\n.nav-fill .nav-item .nav-link,\n.nav-justified .nav-item .nav-link {\n  width: 100%;\n}\n\n.tab-content > .tab-pane {\n  display: none;\n}\n\n.tab-content > .active {\n  display: block;\n}\n\n.navbar {\n  position: relative;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n  flex-wrap: wrap;\n  -ms-flex-align: center;\n  align-items: center;\n  -ms-flex-pack: justify;\n  justify-content: space-between;\n  padding-top: 0.5rem;\n  padding-bottom: 0.5rem;\n}\n\n.navbar > .container,\n.navbar > .container-fluid, .navbar > .container-sm, .navbar > .container-md, .navbar > .container-lg, .navbar > .container-xl, .navbar > .container-xxl {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: inherit;\n  flex-wrap: inherit;\n  -ms-flex-align: center;\n  align-items: center;\n  -ms-flex-pack: justify;\n  justify-content: space-between;\n}\n\n.navbar-brand {\n  padding-top: 0.3125rem;\n  padding-bottom: 0.3125rem;\n  margin-right: 1rem;\n  font-size: 1.25rem;\n  text-decoration: none;\n  white-space: nowrap;\n}\n\n.navbar-nav {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  padding-left: 0;\n  margin-bottom: 0;\n  list-style: none;\n}\n\n.navbar-nav .nav-link {\n  padding-right: 0;\n  padding-left: 0;\n}\n\n.navbar-nav .dropdown-menu {\n  position: static;\n}\n\n.navbar-text {\n  padding-top: 0.5rem;\n  padding-bottom: 0.5rem;\n}\n\n.navbar-collapse {\n  -ms-flex-preferred-size: 100%;\n  flex-basis: 100%;\n  -ms-flex-positive: 1;\n  flex-grow: 1;\n  -ms-flex-align: center;\n  align-items: center;\n}\n\n.navbar-toggler {\n  padding: 0.25rem 0.75rem;\n  font-size: 1.25rem;\n  line-height: 1;\n  background-color: transparent;\n  border: 1px solid transparent;\n  border-radius: 0.25rem;\n  transition: box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .navbar-toggler {\n    transition: none;\n  }\n}\n\n.navbar-toggler:hover {\n  text-decoration: none;\n}\n\n.navbar-toggler:focus {\n  text-decoration: none;\n  outline: 0;\n  box-shadow: 0 0 0 0.25rem;\n}\n\n.navbar-toggler-icon {\n  display: inline-block;\n  width: 1.5em;\n  height: 1.5em;\n  vertical-align: middle;\n  background-repeat: no-repeat;\n  background-position: center;\n  background-size: 100%;\n}\n\n.navbar-nav-scroll {\n  max-height: var(--bs-scroll-height, 75vh);\n  overflow-y: auto;\n}\n\n@media (min-width: 576px) {\n  .navbar-expand-sm {\n    -ms-flex-wrap: nowrap;\n    flex-wrap: nowrap;\n    -ms-flex-pack: start;\n    justify-content: flex-start;\n  }\n  .navbar-expand-sm .navbar-nav {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .navbar-expand-sm .navbar-nav .dropdown-menu {\n    position: absolute;\n  }\n  .navbar-expand-sm .navbar-nav .nav-link {\n    padding-right: 0.5rem;\n    padding-left: 0.5rem;\n  }\n  .navbar-expand-sm .navbar-nav-scroll {\n    overflow: visible;\n  }\n  .navbar-expand-sm .navbar-collapse {\n    display: -ms-flexbox !important;\n    display: flex !important;\n    -ms-flex-preferred-size: auto;\n    flex-basis: auto;\n  }\n  .navbar-expand-sm .navbar-toggler {\n    display: none;\n  }\n  .navbar-expand-sm .offcanvas-header {\n    display: none;\n  }\n  .navbar-expand-sm .offcanvas {\n    position: inherit;\n    bottom: 0;\n    z-index: 1000;\n    -ms-flex-positive: 1;\n    flex-grow: 1;\n    visibility: visible !important;\n    background-color: transparent;\n    border-right: 0;\n    border-left: 0;\n    transition: none;\n    -webkit-transform: none;\n    transform: none;\n  }\n  .navbar-expand-sm .offcanvas-top,\n  .navbar-expand-sm .offcanvas-bottom {\n    height: auto;\n    border-top: 0;\n    border-bottom: 0;\n  }\n  .navbar-expand-sm .offcanvas-body {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-positive: 0;\n    flex-grow: 0;\n    padding: 0;\n    overflow-y: visible;\n  }\n}\n\n@media (min-width: 768px) {\n  .navbar-expand-md {\n    -ms-flex-wrap: nowrap;\n    flex-wrap: nowrap;\n    -ms-flex-pack: start;\n    justify-content: flex-start;\n  }\n  .navbar-expand-md .navbar-nav {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .navbar-expand-md .navbar-nav .dropdown-menu {\n    position: absolute;\n  }\n  .navbar-expand-md .navbar-nav .nav-link {\n    padding-right: 0.5rem;\n    padding-left: 0.5rem;\n  }\n  .navbar-expand-md .navbar-nav-scroll {\n    overflow: visible;\n  }\n  .navbar-expand-md .navbar-collapse {\n    display: -ms-flexbox !important;\n    display: flex !important;\n    -ms-flex-preferred-size: auto;\n    flex-basis: auto;\n  }\n  .navbar-expand-md .navbar-toggler {\n    display: none;\n  }\n  .navbar-expand-md .offcanvas-header {\n    display: none;\n  }\n  .navbar-expand-md .offcanvas {\n    position: inherit;\n    bottom: 0;\n    z-index: 1000;\n    -ms-flex-positive: 1;\n    flex-grow: 1;\n    visibility: visible !important;\n    background-color: transparent;\n    border-right: 0;\n    border-left: 0;\n    transition: none;\n    -webkit-transform: none;\n    transform: none;\n  }\n  .navbar-expand-md .offcanvas-top,\n  .navbar-expand-md .offcanvas-bottom {\n    height: auto;\n    border-top: 0;\n    border-bottom: 0;\n  }\n  .navbar-expand-md .offcanvas-body {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-positive: 0;\n    flex-grow: 0;\n    padding: 0;\n    overflow-y: visible;\n  }\n}\n\n@media (min-width: 992px) {\n  .navbar-expand-lg {\n    -ms-flex-wrap: nowrap;\n    flex-wrap: nowrap;\n    -ms-flex-pack: start;\n    justify-content: flex-start;\n  }\n  .navbar-expand-lg .navbar-nav {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .navbar-expand-lg .navbar-nav .dropdown-menu {\n    position: absolute;\n  }\n  .navbar-expand-lg .navbar-nav .nav-link {\n    padding-right: 0.5rem;\n    padding-left: 0.5rem;\n  }\n  .navbar-expand-lg .navbar-nav-scroll {\n    overflow: visible;\n  }\n  .navbar-expand-lg .navbar-collapse {\n    display: -ms-flexbox !important;\n    display: flex !important;\n    -ms-flex-preferred-size: auto;\n    flex-basis: auto;\n  }\n  .navbar-expand-lg .navbar-toggler {\n    display: none;\n  }\n  .navbar-expand-lg .offcanvas-header {\n    display: none;\n  }\n  .navbar-expand-lg .offcanvas {\n    position: inherit;\n    bottom: 0;\n    z-index: 1000;\n    -ms-flex-positive: 1;\n    flex-grow: 1;\n    visibility: visible !important;\n    background-color: transparent;\n    border-right: 0;\n    border-left: 0;\n    transition: none;\n    -webkit-transform: none;\n    transform: none;\n  }\n  .navbar-expand-lg .offcanvas-top,\n  .navbar-expand-lg .offcanvas-bottom {\n    height: auto;\n    border-top: 0;\n    border-bottom: 0;\n  }\n  .navbar-expand-lg .offcanvas-body {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-positive: 0;\n    flex-grow: 0;\n    padding: 0;\n    overflow-y: visible;\n  }\n}\n\n@media (min-width: 1200px) {\n  .navbar-expand-xl {\n    -ms-flex-wrap: nowrap;\n    flex-wrap: nowrap;\n    -ms-flex-pack: start;\n    justify-content: flex-start;\n  }\n  .navbar-expand-xl .navbar-nav {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .navbar-expand-xl .navbar-nav .dropdown-menu {\n    position: absolute;\n  }\n  .navbar-expand-xl .navbar-nav .nav-link {\n    padding-right: 0.5rem;\n    padding-left: 0.5rem;\n  }\n  .navbar-expand-xl .navbar-nav-scroll {\n    overflow: visible;\n  }\n  .navbar-expand-xl .navbar-collapse {\n    display: -ms-flexbox !important;\n    display: flex !important;\n    -ms-flex-preferred-size: auto;\n    flex-basis: auto;\n  }\n  .navbar-expand-xl .navbar-toggler {\n    display: none;\n  }\n  .navbar-expand-xl .offcanvas-header {\n    display: none;\n  }\n  .navbar-expand-xl .offcanvas {\n    position: inherit;\n    bottom: 0;\n    z-index: 1000;\n    -ms-flex-positive: 1;\n    flex-grow: 1;\n    visibility: visible !important;\n    background-color: transparent;\n    border-right: 0;\n    border-left: 0;\n    transition: none;\n    -webkit-transform: none;\n    transform: none;\n  }\n  .navbar-expand-xl .offcanvas-top,\n  .navbar-expand-xl .offcanvas-bottom {\n    height: auto;\n    border-top: 0;\n    border-bottom: 0;\n  }\n  .navbar-expand-xl .offcanvas-body {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-positive: 0;\n    flex-grow: 0;\n    padding: 0;\n    overflow-y: visible;\n  }\n}\n\n@media (min-width: 1400px) {\n  .navbar-expand-xxl {\n    -ms-flex-wrap: nowrap;\n    flex-wrap: nowrap;\n    -ms-flex-pack: start;\n    justify-content: flex-start;\n  }\n  .navbar-expand-xxl .navbar-nav {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .navbar-expand-xxl .navbar-nav .dropdown-menu {\n    position: absolute;\n  }\n  .navbar-expand-xxl .navbar-nav .nav-link {\n    padding-right: 0.5rem;\n    padding-left: 0.5rem;\n  }\n  .navbar-expand-xxl .navbar-nav-scroll {\n    overflow: visible;\n  }\n  .navbar-expand-xxl .navbar-collapse {\n    display: -ms-flexbox !important;\n    display: flex !important;\n    -ms-flex-preferred-size: auto;\n    flex-basis: auto;\n  }\n  .navbar-expand-xxl .navbar-toggler {\n    display: none;\n  }\n  .navbar-expand-xxl .offcanvas-header {\n    display: none;\n  }\n  .navbar-expand-xxl .offcanvas {\n    position: inherit;\n    bottom: 0;\n    z-index: 1000;\n    -ms-flex-positive: 1;\n    flex-grow: 1;\n    visibility: visible !important;\n    background-color: transparent;\n    border-right: 0;\n    border-left: 0;\n    transition: none;\n    -webkit-transform: none;\n    transform: none;\n  }\n  .navbar-expand-xxl .offcanvas-top,\n  .navbar-expand-xxl .offcanvas-bottom {\n    height: auto;\n    border-top: 0;\n    border-bottom: 0;\n  }\n  .navbar-expand-xxl .offcanvas-body {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-positive: 0;\n    flex-grow: 0;\n    padding: 0;\n    overflow-y: visible;\n  }\n}\n\n.navbar-expand {\n  -ms-flex-wrap: nowrap;\n  flex-wrap: nowrap;\n  -ms-flex-pack: start;\n  justify-content: flex-start;\n}\n\n.navbar-expand .navbar-nav {\n  -ms-flex-direction: row;\n  flex-direction: row;\n}\n\n.navbar-expand .navbar-nav .dropdown-menu {\n  position: absolute;\n}\n\n.navbar-expand .navbar-nav .nav-link {\n  padding-right: 0.5rem;\n  padding-left: 0.5rem;\n}\n\n.navbar-expand .navbar-nav-scroll {\n  overflow: visible;\n}\n\n.navbar-expand .navbar-collapse {\n  display: -ms-flexbox !important;\n  display: flex !important;\n  -ms-flex-preferred-size: auto;\n  flex-basis: auto;\n}\n\n.navbar-expand .navbar-toggler {\n  display: none;\n}\n\n.navbar-expand .offcanvas-header {\n  display: none;\n}\n\n.navbar-expand .offcanvas {\n  position: inherit;\n  bottom: 0;\n  z-index: 1000;\n  -ms-flex-positive: 1;\n  flex-grow: 1;\n  visibility: visible !important;\n  background-color: transparent;\n  border-right: 0;\n  border-left: 0;\n  transition: none;\n  -webkit-transform: none;\n  transform: none;\n}\n\n.navbar-expand .offcanvas-top,\n.navbar-expand .offcanvas-bottom {\n  height: auto;\n  border-top: 0;\n  border-bottom: 0;\n}\n\n.navbar-expand .offcanvas-body {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-positive: 0;\n  flex-grow: 0;\n  padding: 0;\n  overflow-y: visible;\n}\n\n.navbar-light .navbar-brand {\n  color: #000;\n}\n\n.navbar-light .navbar-brand:hover, .navbar-light .navbar-brand:focus {\n  color: #000;\n}\n\n.navbar-light .navbar-nav .nav-link {\n  color: rgba(0, 0, 0, 0.55);\n}\n\n.navbar-light .navbar-nav .nav-link:hover, .navbar-light .navbar-nav .nav-link:focus {\n  color: #000;\n}\n\n.navbar-light .navbar-nav .nav-link.disabled {\n  color: rgba(0, 0, 0, 0.3);\n}\n\n.navbar-light .navbar-nav .show > .nav-link,\n.navbar-light .navbar-nav .nav-link.active {\n  color: #000;\n}\n\n.navbar-light .navbar-toggler {\n  color: rgba(0, 0, 0, 0.55);\n  border-color: rgba(0, 0, 0, 0.1);\n}\n\n.navbar-light .navbar-toggler-icon {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%280, 0, 0, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e\");\n}\n\n.navbar-light .navbar-text {\n  color: rgba(0, 0, 0, 0.55);\n}\n\n.navbar-light .navbar-text a,\n.navbar-light .navbar-text a:hover,\n.navbar-light .navbar-text a:focus {\n  color: #000;\n}\n\n.navbar-dark .navbar-brand {\n  color: #fff;\n}\n\n.navbar-dark .navbar-brand:hover, .navbar-dark .navbar-brand:focus {\n  color: #fff;\n}\n\n.navbar-dark .navbar-nav .nav-link {\n  color: rgba(255, 255, 255, 0.55);\n}\n\n.navbar-dark .navbar-nav .nav-link:hover, .navbar-dark .navbar-nav .nav-link:focus {\n  color: #fff;\n}\n\n.navbar-dark .navbar-nav .nav-link.disabled {\n  color: rgba(255, 255, 255, 0.25);\n}\n\n.navbar-dark .navbar-nav .show > .nav-link,\n.navbar-dark .navbar-nav .nav-link.active {\n  color: #fff;\n}\n\n.navbar-dark .navbar-toggler {\n  color: rgba(255, 255, 255, 0.55);\n  border-color: rgba(255, 255, 255, 0.1);\n}\n\n.navbar-dark .navbar-toggler-icon {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e\");\n}\n\n.navbar-dark .navbar-text {\n  color: rgba(255, 255, 255, 0.55);\n}\n\n.navbar-dark .navbar-text a,\n.navbar-dark .navbar-text a:hover,\n.navbar-dark .navbar-text a:focus {\n  color: #fff;\n}\n\n.card {\n  position: relative;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  min-width: 0;\n  word-wrap: break-word;\n  background-color: #fff;\n  background-clip: border-box;\n  border: 1px solid rgba(223, 215, 202, 0.75);\n  border-radius: 0.25rem;\n}\n\n.card > hr {\n  margin-right: 0;\n  margin-left: 0;\n}\n\n.card > .list-group {\n  border-top: inherit;\n  border-bottom: inherit;\n}\n\n.card > .list-group:first-child {\n  border-top-width: 0;\n  border-top-left-radius: calc(0.25rem - 1px);\n  border-top-right-radius: calc(0.25rem - 1px);\n}\n\n.card > .list-group:last-child {\n  border-bottom-width: 0;\n  border-bottom-right-radius: calc(0.25rem - 1px);\n  border-bottom-left-radius: calc(0.25rem - 1px);\n}\n\n.card > .card-header + .list-group,\n.card > .list-group + .card-footer {\n  border-top: 0;\n}\n\n.card-body {\n  -ms-flex: 1 1 auto;\n  flex: 1 1 auto;\n  padding: 1rem 1rem;\n}\n\n.card-title {\n  margin-bottom: 0.5rem;\n}\n\n.card-subtitle {\n  margin-top: -0.25rem;\n  margin-bottom: 0;\n}\n\n.card-text:last-child {\n  margin-bottom: 0;\n}\n\n.card-link + .card-link {\n  margin-left: 1rem;\n}\n\n.card-header {\n  padding: 0.5rem 1rem;\n  margin-bottom: 0;\n  background-color: rgba(248, 245, 240, 0.25);\n  border-bottom: 1px solid rgba(223, 215, 202, 0.75);\n}\n\n.card-header:first-child {\n  border-radius: calc(0.25rem - 1px) calc(0.25rem - 1px) 0 0;\n}\n\n.card-footer {\n  padding: 0.5rem 1rem;\n  background-color: rgba(248, 245, 240, 0.25);\n  border-top: 1px solid rgba(223, 215, 202, 0.75);\n}\n\n.card-footer:last-child {\n  border-radius: 0 0 calc(0.25rem - 1px) calc(0.25rem - 1px);\n}\n\n.card-header-tabs {\n  margin-right: -0.5rem;\n  margin-bottom: -0.5rem;\n  margin-left: -0.5rem;\n  border-bottom: 0;\n}\n\n.card-header-pills {\n  margin-right: -0.5rem;\n  margin-left: -0.5rem;\n}\n\n.card-img-overlay {\n  position: absolute;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  padding: 1rem;\n  border-radius: calc(0.25rem - 1px);\n}\n\n.card-img,\n.card-img-top,\n.card-img-bottom {\n  width: 100%;\n}\n\n.card-img,\n.card-img-top {\n  border-top-left-radius: calc(0.25rem - 1px);\n  border-top-right-radius: calc(0.25rem - 1px);\n}\n\n.card-img,\n.card-img-bottom {\n  border-bottom-right-radius: calc(0.25rem - 1px);\n  border-bottom-left-radius: calc(0.25rem - 1px);\n}\n\n.card-group > .card {\n  margin-bottom: 0.75rem;\n}\n\n@media (min-width: 576px) {\n  .card-group {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-flow: row wrap;\n    flex-flow: row wrap;\n  }\n  .card-group > .card {\n    -ms-flex: 1 0 0%;\n    flex: 1 0 0%;\n    margin-bottom: 0;\n  }\n  .card-group > .card + .card {\n    margin-left: 0;\n    border-left: 0;\n  }\n  .card-group > .card:not(:last-child) {\n    border-top-right-radius: 0;\n    border-bottom-right-radius: 0;\n  }\n  .card-group > .card:not(:last-child) .card-img-top,\n  .card-group > .card:not(:last-child) .card-header {\n    border-top-right-radius: 0;\n  }\n  .card-group > .card:not(:last-child) .card-img-bottom,\n  .card-group > .card:not(:last-child) .card-footer {\n    border-bottom-right-radius: 0;\n  }\n  .card-group > .card:not(:first-child) {\n    border-top-left-radius: 0;\n    border-bottom-left-radius: 0;\n  }\n  .card-group > .card:not(:first-child) .card-img-top,\n  .card-group > .card:not(:first-child) .card-header {\n    border-top-left-radius: 0;\n  }\n  .card-group > .card:not(:first-child) .card-img-bottom,\n  .card-group > .card:not(:first-child) .card-footer {\n    border-bottom-left-radius: 0;\n  }\n}\n\n.accordion-button {\n  position: relative;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-align: center;\n  align-items: center;\n  width: 100%;\n  padding: 1rem 1.25rem;\n  font-size: 1rem;\n  color: #3e3f3a;\n  text-align: left;\n  background-color: #fff;\n  border: 0;\n  border-radius: 0;\n  overflow-anchor: none;\n  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, border-radius 0.15s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .accordion-button {\n    transition: none;\n  }\n}\n\n.accordion-button:not(.collapsed) {\n  color: #2d547a;\n  background-color: #ebeff3;\n  box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.125);\n}\n\n.accordion-button:not(.collapsed)::after {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%232d547a'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e\");\n  -webkit-transform: rotate(-180deg);\n  transform: rotate(-180deg);\n}\n\n.accordion-button::after {\n  -ms-flex-negative: 0;\n  flex-shrink: 0;\n  width: 1.25rem;\n  height: 1.25rem;\n  margin-left: auto;\n  content: \"\";\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%233e3f3a'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e\");\n  background-repeat: no-repeat;\n  background-size: 1.25rem;\n  transition: -webkit-transform 0.2s ease-in-out;\n  transition: transform 0.2s ease-in-out;\n  transition: transform 0.2s ease-in-out, -webkit-transform 0.2s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .accordion-button::after {\n    transition: none;\n  }\n}\n\n.accordion-button:hover {\n  z-index: 2;\n}\n\n.accordion-button:focus {\n  z-index: 3;\n  border-color: #99aec4;\n  outline: 0;\n  box-shadow: 0 0 0 0.25rem rgba(50, 93, 136, 0.25);\n}\n\n.accordion-header {\n  margin-bottom: 0;\n}\n\n.accordion-item {\n  background-color: #fff;\n  border: 1px solid rgba(0, 0, 0, 0.125);\n}\n\n.accordion-item:first-of-type {\n  border-top-left-radius: 0.25rem;\n  border-top-right-radius: 0.25rem;\n}\n\n.accordion-item:first-of-type .accordion-button {\n  border-top-left-radius: calc(0.25rem - 1px);\n  border-top-right-radius: calc(0.25rem - 1px);\n}\n\n.accordion-item:not(:first-of-type) {\n  border-top: 0;\n}\n\n.accordion-item:last-of-type {\n  border-bottom-right-radius: 0.25rem;\n  border-bottom-left-radius: 0.25rem;\n}\n\n.accordion-item:last-of-type .accordion-button.collapsed {\n  border-bottom-right-radius: calc(0.25rem - 1px);\n  border-bottom-left-radius: calc(0.25rem - 1px);\n}\n\n.accordion-item:last-of-type .accordion-collapse {\n  border-bottom-right-radius: 0.25rem;\n  border-bottom-left-radius: 0.25rem;\n}\n\n.accordion-body {\n  padding: 1rem 1.25rem;\n}\n\n.accordion-flush .accordion-collapse {\n  border-width: 0;\n}\n\n.accordion-flush .accordion-item {\n  border-right: 0;\n  border-left: 0;\n  border-radius: 0;\n}\n\n.accordion-flush .accordion-item:first-child {\n  border-top: 0;\n}\n\n.accordion-flush .accordion-item:last-child {\n  border-bottom: 0;\n}\n\n.accordion-flush .accordion-item .accordion-button {\n  border-radius: 0;\n}\n\n.breadcrumb {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n  flex-wrap: wrap;\n  padding: 0.375rem 0.75rem;\n  margin-bottom: 1rem;\n  list-style: none;\n  background-color: #f8f5f0;\n  border-radius: 0.25rem;\n}\n\n.breadcrumb-item + .breadcrumb-item {\n  padding-left: 0.5rem;\n}\n\n.breadcrumb-item + .breadcrumb-item::before {\n  float: left;\n  padding-right: 0.5rem;\n  color: #8e8c84;\n  content: var(--bs-breadcrumb-divider, \"/\") /* rtl: var(--bs-breadcrumb-divider, \"/\") */;\n}\n\n.breadcrumb-item.active {\n  color: #8e8c84;\n}\n\n.pagination {\n  display: -ms-flexbox;\n  display: flex;\n  padding-left: 0;\n  list-style: none;\n}\n\n.page-link {\n  position: relative;\n  display: block;\n  color: #8e8c84;\n  text-decoration: none;\n  background-color: #f8f5f0;\n  border: 1px solid #dfd7ca;\n  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .page-link {\n    transition: none;\n  }\n}\n\n.page-link:hover {\n  z-index: 2;\n  color: #8e8c84;\n  background-color: #f8f5f0;\n  border-color: #dfd7ca;\n}\n\n.page-link:focus {\n  z-index: 3;\n  color: #769e3c;\n  background-color: #f8f5f0;\n  outline: 0;\n  box-shadow: 0 0 0 0.25rem rgba(50, 93, 136, 0.25);\n}\n\n.page-item:not(:first-child) .page-link {\n  margin-left: -1px;\n}\n\n.page-item.active .page-link {\n  z-index: 3;\n  color: #8e8c84;\n  background-color: #dfd7ca;\n  border-color: #dfd7ca;\n}\n\n.page-item.disabled .page-link {\n  color: #dfd7ca;\n  pointer-events: none;\n  background-color: #f8f5f0;\n  border-color: #dfd7ca;\n}\n\n.page-link {\n  padding: 0.375rem 0.75rem;\n}\n\n.page-item:first-child .page-link {\n  border-top-left-radius: 0.25rem;\n  border-bottom-left-radius: 0.25rem;\n}\n\n.page-item:last-child .page-link {\n  border-top-right-radius: 0.25rem;\n  border-bottom-right-radius: 0.25rem;\n}\n\n.pagination-lg .page-link {\n  padding: 0.75rem 1.5rem;\n  font-size: 1.25rem;\n}\n\n.pagination-lg .page-item:first-child .page-link {\n  border-top-left-radius: 0.3rem;\n  border-bottom-left-radius: 0.3rem;\n}\n\n.pagination-lg .page-item:last-child .page-link {\n  border-top-right-radius: 0.3rem;\n  border-bottom-right-radius: 0.3rem;\n}\n\n.pagination-sm .page-link {\n  padding: 0.25rem 0.5rem;\n  font-size: 0.875rem;\n}\n\n.pagination-sm .page-item:first-child .page-link {\n  border-top-left-radius: 0.2rem;\n  border-bottom-left-radius: 0.2rem;\n}\n\n.pagination-sm .page-item:last-child .page-link {\n  border-top-right-radius: 0.2rem;\n  border-bottom-right-radius: 0.2rem;\n}\n\n.badge {\n  display: inline-block;\n  padding: 0.35em 0.65em;\n  font-size: 0.75em;\n  font-weight: 700;\n  line-height: 1;\n  color: #fff;\n  text-align: center;\n  white-space: nowrap;\n  vertical-align: baseline;\n  border-radius: 0.25rem;\n}\n\n.badge:empty {\n  display: none;\n}\n\n.btn .badge {\n  position: relative;\n  top: -1px;\n}\n\n.alert {\n  position: relative;\n  padding: 1rem 1rem;\n  margin-bottom: 1rem;\n  border: 1px solid transparent;\n  border-radius: 0.25rem;\n}\n\n.alert-heading {\n  color: inherit;\n}\n\n.alert-link {\n  font-weight: 700;\n}\n\n.alert-dismissible {\n  padding-right: 3rem;\n}\n\n.alert-dismissible .btn-close {\n  position: absolute;\n  top: 0;\n  right: 0;\n  z-index: 2;\n  padding: 1.25rem 1rem;\n}\n\n.alert-primary {\n  color: #1e3852;\n  background-color: #d6dfe7;\n  border-color: #c2cedb;\n}\n\n.alert-primary .alert-link {\n  color: #182d42;\n}\n\n.alert-secondary {\n  color: #55544f;\n  background-color: #e8e8e6;\n  border-color: #ddddda;\n}\n\n.alert-secondary .alert-link {\n  color: #44433f;\n}\n\n.alert-success {\n  color: #58762d;\n  background-color: #e9f3db;\n  border-color: #dfeec9;\n}\n\n.alert-success .alert-link {\n  color: #465e24;\n}\n\n.alert-info {\n  color: #196786;\n  background-color: #d4eef9;\n  border-color: #bfe6f6;\n}\n\n.alert-info .alert-link {\n  color: #14526b;\n}\n\n.alert-warning {\n  color: #924a24;\n  background-color: #fde5d8;\n  border-color: #fcd8c5;\n}\n\n.alert-warning .alert-link {\n  color: #753b1d;\n}\n\n.alert-danger {\n  color: #82322f;\n  background-color: #f7dddc;\n  border-color: #f4cbca;\n}\n\n.alert-danger .alert-link {\n  color: #682826;\n}\n\n.alert-light {\n  color: #959390;\n  background-color: #fefdfc;\n  border-color: #fdfcfb;\n}\n\n.alert-light .alert-link {\n  color: #777673;\n}\n\n.alert-dark {\n  color: #252623;\n  background-color: #d8d9d8;\n  border-color: #c5c5c4;\n}\n\n.alert-dark .alert-link {\n  color: #1e1e1c;\n}\n\n@-webkit-keyframes progress-bar-stripes {\n  0% {\n    background-position-x: 1rem;\n  }\n}\n\n@keyframes progress-bar-stripes {\n  0% {\n    background-position-x: 1rem;\n  }\n}\n\n.progress {\n  display: -ms-flexbox;\n  display: flex;\n  height: 1rem;\n  overflow: hidden;\n  font-size: 0.75rem;\n  background-color: #dfd7ca;\n  border-radius: 10px;\n}\n\n.progress-bar {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  -ms-flex-pack: center;\n  justify-content: center;\n  overflow: hidden;\n  color: #325d88;\n  text-align: center;\n  white-space: nowrap;\n  background-color: #325d88;\n  transition: width 0.6s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .progress-bar {\n    transition: none;\n  }\n}\n\n.progress-bar-striped {\n  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-size: 1rem 1rem;\n}\n\n.progress-bar-animated {\n  -webkit-animation: 1s linear infinite progress-bar-stripes;\n  animation: 1s linear infinite progress-bar-stripes;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .progress-bar-animated {\n    -webkit-animation: none;\n    animation: none;\n  }\n}\n\n.list-group {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  padding-left: 0;\n  margin-bottom: 0;\n  border-radius: 0.25rem;\n}\n\n.list-group-numbered {\n  list-style-type: none;\n  counter-reset: section;\n}\n\n.list-group-numbered > li::before {\n  content: counters(section, \".\") \". \";\n  counter-increment: section;\n}\n\n.list-group-item-action {\n  width: 100%;\n  color: #3e3f3a;\n  text-align: inherit;\n}\n\n.list-group-item-action:hover, .list-group-item-action:focus {\n  z-index: 1;\n  color: #3e3f3a;\n  text-decoration: none;\n  background-color: #f8f5f0;\n}\n\n.list-group-item-action:active {\n  color: #3e3f3a;\n  background-color: #dfd7ca;\n}\n\n.list-group-item {\n  position: relative;\n  display: block;\n  padding: 0.5rem 1rem;\n  color: #212529;\n  text-decoration: none;\n  background-color: #fff;\n  border: 1px solid #dfd7ca;\n}\n\n.list-group-item:first-child {\n  border-top-left-radius: inherit;\n  border-top-right-radius: inherit;\n}\n\n.list-group-item:last-child {\n  border-bottom-right-radius: inherit;\n  border-bottom-left-radius: inherit;\n}\n\n.list-group-item.disabled, .list-group-item:disabled {\n  color: #98978b;\n  pointer-events: none;\n  background-color: #fff;\n}\n\n.list-group-item.active {\n  z-index: 2;\n  color: #3e3f3a;\n  background-color: #f8f5f0;\n  border-color: #dfd7ca;\n}\n\n.list-group-item + .list-group-item {\n  border-top-width: 0;\n}\n\n.list-group-item + .list-group-item.active {\n  margin-top: -1px;\n  border-top-width: 1px;\n}\n\n.list-group-horizontal {\n  -ms-flex-direction: row;\n  flex-direction: row;\n}\n\n.list-group-horizontal > .list-group-item:first-child {\n  border-bottom-left-radius: 0.25rem;\n  border-top-right-radius: 0;\n}\n\n.list-group-horizontal > .list-group-item:last-child {\n  border-top-right-radius: 0.25rem;\n  border-bottom-left-radius: 0;\n}\n\n.list-group-horizontal > .list-group-item.active {\n  margin-top: 0;\n}\n\n.list-group-horizontal > .list-group-item + .list-group-item {\n  border-top-width: 1px;\n  border-left-width: 0;\n}\n\n.list-group-horizontal > .list-group-item + .list-group-item.active {\n  margin-left: -1px;\n  border-left-width: 1px;\n}\n\n@media (min-width: 576px) {\n  .list-group-horizontal-sm {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .list-group-horizontal-sm > .list-group-item:first-child {\n    border-bottom-left-radius: 0.25rem;\n    border-top-right-radius: 0;\n  }\n  .list-group-horizontal-sm > .list-group-item:last-child {\n    border-top-right-radius: 0.25rem;\n    border-bottom-left-radius: 0;\n  }\n  .list-group-horizontal-sm > .list-group-item.active {\n    margin-top: 0;\n  }\n  .list-group-horizontal-sm > .list-group-item + .list-group-item {\n    border-top-width: 1px;\n    border-left-width: 0;\n  }\n  .list-group-horizontal-sm > .list-group-item + .list-group-item.active {\n    margin-left: -1px;\n    border-left-width: 1px;\n  }\n}\n\n@media (min-width: 768px) {\n  .list-group-horizontal-md {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .list-group-horizontal-md > .list-group-item:first-child {\n    border-bottom-left-radius: 0.25rem;\n    border-top-right-radius: 0;\n  }\n  .list-group-horizontal-md > .list-group-item:last-child {\n    border-top-right-radius: 0.25rem;\n    border-bottom-left-radius: 0;\n  }\n  .list-group-horizontal-md > .list-group-item.active {\n    margin-top: 0;\n  }\n  .list-group-horizontal-md > .list-group-item + .list-group-item {\n    border-top-width: 1px;\n    border-left-width: 0;\n  }\n  .list-group-horizontal-md > .list-group-item + .list-group-item.active {\n    margin-left: -1px;\n    border-left-width: 1px;\n  }\n}\n\n@media (min-width: 992px) {\n  .list-group-horizontal-lg {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .list-group-horizontal-lg > .list-group-item:first-child {\n    border-bottom-left-radius: 0.25rem;\n    border-top-right-radius: 0;\n  }\n  .list-group-horizontal-lg > .list-group-item:last-child {\n    border-top-right-radius: 0.25rem;\n    border-bottom-left-radius: 0;\n  }\n  .list-group-horizontal-lg > .list-group-item.active {\n    margin-top: 0;\n  }\n  .list-group-horizontal-lg > .list-group-item + .list-group-item {\n    border-top-width: 1px;\n    border-left-width: 0;\n  }\n  .list-group-horizontal-lg > .list-group-item + .list-group-item.active {\n    margin-left: -1px;\n    border-left-width: 1px;\n  }\n}\n\n@media (min-width: 1200px) {\n  .list-group-horizontal-xl {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .list-group-horizontal-xl > .list-group-item:first-child {\n    border-bottom-left-radius: 0.25rem;\n    border-top-right-radius: 0;\n  }\n  .list-group-horizontal-xl > .list-group-item:last-child {\n    border-top-right-radius: 0.25rem;\n    border-bottom-left-radius: 0;\n  }\n  .list-group-horizontal-xl > .list-group-item.active {\n    margin-top: 0;\n  }\n  .list-group-horizontal-xl > .list-group-item + .list-group-item {\n    border-top-width: 1px;\n    border-left-width: 0;\n  }\n  .list-group-horizontal-xl > .list-group-item + .list-group-item.active {\n    margin-left: -1px;\n    border-left-width: 1px;\n  }\n}\n\n@media (min-width: 1400px) {\n  .list-group-horizontal-xxl {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .list-group-horizontal-xxl > .list-group-item:first-child {\n    border-bottom-left-radius: 0.25rem;\n    border-top-right-radius: 0;\n  }\n  .list-group-horizontal-xxl > .list-group-item:last-child {\n    border-top-right-radius: 0.25rem;\n    border-bottom-left-radius: 0;\n  }\n  .list-group-horizontal-xxl > .list-group-item.active {\n    margin-top: 0;\n  }\n  .list-group-horizontal-xxl > .list-group-item + .list-group-item {\n    border-top-width: 1px;\n    border-left-width: 0;\n  }\n  .list-group-horizontal-xxl > .list-group-item + .list-group-item.active {\n    margin-left: -1px;\n    border-left-width: 1px;\n  }\n}\n\n.list-group-flush {\n  border-radius: 0;\n}\n\n.list-group-flush > .list-group-item {\n  border-width: 0 0 1px;\n}\n\n.list-group-flush > .list-group-item:last-child {\n  border-bottom-width: 0;\n}\n\n.list-group-item-primary {\n  color: #1e3852;\n  background-color: #d6dfe7;\n}\n\n.list-group-item-primary.list-group-item-action:hover, .list-group-item-primary.list-group-item-action:focus {\n  color: #1e3852;\n  background-color: #c1c9d0;\n}\n\n.list-group-item-primary.list-group-item-action.active {\n  color: #fff;\n  background-color: #1e3852;\n  border-color: #1e3852;\n}\n\n.list-group-item-secondary {\n  color: #55544f;\n  background-color: #e8e8e6;\n}\n\n.list-group-item-secondary.list-group-item-action:hover, .list-group-item-secondary.list-group-item-action:focus {\n  color: #55544f;\n  background-color: #d1d1cf;\n}\n\n.list-group-item-secondary.list-group-item-action.active {\n  color: #fff;\n  background-color: #55544f;\n  border-color: #55544f;\n}\n\n.list-group-item-success {\n  color: #58762d;\n  background-color: #e9f3db;\n}\n\n.list-group-item-success.list-group-item-action:hover, .list-group-item-success.list-group-item-action:focus {\n  color: #58762d;\n  background-color: #d2dbc5;\n}\n\n.list-group-item-success.list-group-item-action.active {\n  color: #fff;\n  background-color: #58762d;\n  border-color: #58762d;\n}\n\n.list-group-item-info {\n  color: #196786;\n  background-color: #d4eef9;\n}\n\n.list-group-item-info.list-group-item-action:hover, .list-group-item-info.list-group-item-action:focus {\n  color: #196786;\n  background-color: #bfd6e0;\n}\n\n.list-group-item-info.list-group-item-action.active {\n  color: #fff;\n  background-color: #196786;\n  border-color: #196786;\n}\n\n.list-group-item-warning {\n  color: #924a24;\n  background-color: #fde5d8;\n}\n\n.list-group-item-warning.list-group-item-action:hover, .list-group-item-warning.list-group-item-action:focus {\n  color: #924a24;\n  background-color: #e4cec2;\n}\n\n.list-group-item-warning.list-group-item-action.active {\n  color: #fff;\n  background-color: #924a24;\n  border-color: #924a24;\n}\n\n.list-group-item-danger {\n  color: #82322f;\n  background-color: #f7dddc;\n}\n\n.list-group-item-danger.list-group-item-action:hover, .list-group-item-danger.list-group-item-action:focus {\n  color: #82322f;\n  background-color: #dec7c6;\n}\n\n.list-group-item-danger.list-group-item-action.active {\n  color: #fff;\n  background-color: #82322f;\n  border-color: #82322f;\n}\n\n.list-group-item-light {\n  color: #959390;\n  background-color: #fefdfc;\n}\n\n.list-group-item-light.list-group-item-action:hover, .list-group-item-light.list-group-item-action:focus {\n  color: #959390;\n  background-color: #e5e4e3;\n}\n\n.list-group-item-light.list-group-item-action.active {\n  color: #fff;\n  background-color: #959390;\n  border-color: #959390;\n}\n\n.list-group-item-dark {\n  color: #252623;\n  background-color: #d8d9d8;\n}\n\n.list-group-item-dark.list-group-item-action:hover, .list-group-item-dark.list-group-item-action:focus {\n  color: #252623;\n  background-color: #c2c3c2;\n}\n\n.list-group-item-dark.list-group-item-action.active {\n  color: #fff;\n  background-color: #252623;\n  border-color: #252623;\n}\n\n.btn-close {\n  box-sizing: content-box;\n  width: 1em;\n  height: 1em;\n  padding: 0.25em 0.25em;\n  color: #fff;\n  background: transparent url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M.293.293a1 1 0 011.414 0L8 6.586 14.293.293a1 1 0 111.414 1.414L9.414 8l6.293 6.293a1 1 0 01-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 01-1.414-1.414L6.586 8 .293 1.707a1 1 0 010-1.414z'/%3e%3c/svg%3e\") center/1em auto no-repeat;\n  border: 0;\n  border-radius: 0.25rem;\n  opacity: 0.8;\n}\n\n.btn-close:hover {\n  color: #fff;\n  text-decoration: none;\n  opacity: 1;\n}\n\n.btn-close:focus {\n  outline: 0;\n  box-shadow: 0 0 0 0.25rem rgba(50, 93, 136, 0.25);\n  opacity: 1;\n}\n\n.btn-close:disabled, .btn-close.disabled {\n  pointer-events: none;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  user-select: none;\n  opacity: 0.25;\n}\n\n.btn-close-white {\n  -webkit-filter: invert(1) grayscale(100%) brightness(200%);\n  filter: invert(1) grayscale(100%) brightness(200%);\n}\n\n.toast {\n  width: 350px;\n  max-width: 100%;\n  font-size: 0.875rem;\n  pointer-events: auto;\n  background-color: rgba(255, 255, 255, 0.85);\n  background-clip: padding-box;\n  border: 1px solid rgba(0, 0, 0, 0.1);\n  box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15);\n  border-radius: 0.25rem;\n}\n\n.toast.showing {\n  opacity: 0;\n}\n\n.toast:not(.show) {\n  display: none;\n}\n\n.toast-container {\n  width: -webkit-max-content;\n  width: -moz-max-content;\n  width: max-content;\n  max-width: 100%;\n  pointer-events: none;\n}\n\n.toast-container > :not(:last-child) {\n  margin-bottom: 0.75rem;\n}\n\n.toast-header {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-align: center;\n  align-items: center;\n  padding: 0.5rem 0.75rem;\n  color: #8e8c84;\n  background-color: rgba(255, 255, 255, 0.85);\n  background-clip: padding-box;\n  border-bottom: 1px solid rgba(0, 0, 0, 0.05);\n  border-top-left-radius: calc(0.25rem - 1px);\n  border-top-right-radius: calc(0.25rem - 1px);\n}\n\n.toast-header .btn-close {\n  margin-right: -0.375rem;\n  margin-left: 0.75rem;\n}\n\n.toast-body {\n  padding: 0.75rem;\n  word-wrap: break-word;\n}\n\n.modal {\n  position: fixed;\n  top: 0;\n  left: 0;\n  z-index: 1055;\n  display: none;\n  width: 100%;\n  height: 100%;\n  overflow-x: hidden;\n  overflow-y: auto;\n  outline: 0;\n}\n\n.modal-dialog {\n  position: relative;\n  width: auto;\n  margin: 0.5rem;\n  pointer-events: none;\n}\n\n.modal.fade .modal-dialog {\n  transition: -webkit-transform 0.3s ease-out;\n  transition: transform 0.3s ease-out;\n  transition: transform 0.3s ease-out, -webkit-transform 0.3s ease-out;\n  -webkit-transform: translate(0, -50px);\n  transform: translate(0, -50px);\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .modal.fade .modal-dialog {\n    transition: none;\n  }\n}\n\n.modal.show .modal-dialog {\n  -webkit-transform: none;\n  transform: none;\n}\n\n.modal.modal-static .modal-dialog {\n  -webkit-transform: scale(1.02);\n  transform: scale(1.02);\n}\n\n.modal-dialog-scrollable {\n  height: calc(100% - 1rem);\n}\n\n.modal-dialog-scrollable .modal-content {\n  max-height: 100%;\n  overflow: hidden;\n}\n\n.modal-dialog-scrollable .modal-body {\n  overflow-y: auto;\n}\n\n.modal-dialog-centered {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-align: center;\n  align-items: center;\n  min-height: calc(100% - 1rem);\n}\n\n.modal-content {\n  position: relative;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  width: 100%;\n  pointer-events: auto;\n  background-color: #fff;\n  background-clip: padding-box;\n  border: 1px solid #dfd7ca;\n  border-radius: 0.3rem;\n  outline: 0;\n}\n\n.modal-backdrop {\n  position: fixed;\n  top: 0;\n  left: 0;\n  z-index: 1050;\n  width: 100vw;\n  height: 100vh;\n  background-color: #000;\n}\n\n.modal-backdrop.fade {\n  opacity: 0;\n}\n\n.modal-backdrop.show {\n  opacity: 0.5;\n}\n\n.modal-header {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-negative: 0;\n  flex-shrink: 0;\n  -ms-flex-align: center;\n  align-items: center;\n  -ms-flex-pack: justify;\n  justify-content: space-between;\n  padding: 1rem 1rem;\n  border-bottom: 1px solid #dfd7ca;\n  border-top-left-radius: calc(0.3rem - 1px);\n  border-top-right-radius: calc(0.3rem - 1px);\n}\n\n.modal-header .btn-close {\n  padding: 0.5rem 0.5rem;\n  margin: -0.5rem -0.5rem -0.5rem auto;\n}\n\n.modal-title {\n  margin-bottom: 0;\n  line-height: 1.5;\n}\n\n.modal-body {\n  position: relative;\n  -ms-flex: 1 1 auto;\n  flex: 1 1 auto;\n  padding: 1rem;\n}\n\n.modal-footer {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n  flex-wrap: wrap;\n  -ms-flex-negative: 0;\n  flex-shrink: 0;\n  -ms-flex-align: center;\n  align-items: center;\n  -ms-flex-pack: end;\n  justify-content: flex-end;\n  padding: 0.75rem;\n  border-top: 1px solid #dfd7ca;\n  border-bottom-right-radius: calc(0.3rem - 1px);\n  border-bottom-left-radius: calc(0.3rem - 1px);\n}\n\n.modal-footer > * {\n  margin: 0.25rem;\n}\n\n@media (min-width: 576px) {\n  .modal-dialog {\n    max-width: 500px;\n    margin: 1.75rem auto;\n  }\n  .modal-dialog-scrollable {\n    height: calc(100% - 3.5rem);\n  }\n  .modal-dialog-centered {\n    min-height: calc(100% - 3.5rem);\n  }\n  .modal-sm {\n    max-width: 300px;\n  }\n}\n\n@media (min-width: 992px) {\n  .modal-lg,\n  .modal-xl {\n    max-width: 800px;\n  }\n}\n\n@media (min-width: 1200px) {\n  .modal-xl {\n    max-width: 1140px;\n  }\n}\n\n.modal-fullscreen {\n  width: 100vw;\n  max-width: none;\n  height: 100%;\n  margin: 0;\n}\n\n.modal-fullscreen .modal-content {\n  height: 100%;\n  border: 0;\n  border-radius: 0;\n}\n\n.modal-fullscreen .modal-header {\n  border-radius: 0;\n}\n\n.modal-fullscreen .modal-body {\n  overflow-y: auto;\n}\n\n.modal-fullscreen .modal-footer {\n  border-radius: 0;\n}\n\n@media (max-width: 575.98px) {\n  .modal-fullscreen-sm-down {\n    width: 100vw;\n    max-width: none;\n    height: 100%;\n    margin: 0;\n  }\n  .modal-fullscreen-sm-down .modal-content {\n    height: 100%;\n    border: 0;\n    border-radius: 0;\n  }\n  .modal-fullscreen-sm-down .modal-header {\n    border-radius: 0;\n  }\n  .modal-fullscreen-sm-down .modal-body {\n    overflow-y: auto;\n  }\n  .modal-fullscreen-sm-down .modal-footer {\n    border-radius: 0;\n  }\n}\n\n@media (max-width: 767.98px) {\n  .modal-fullscreen-md-down {\n    width: 100vw;\n    max-width: none;\n    height: 100%;\n    margin: 0;\n  }\n  .modal-fullscreen-md-down .modal-content {\n    height: 100%;\n    border: 0;\n    border-radius: 0;\n  }\n  .modal-fullscreen-md-down .modal-header {\n    border-radius: 0;\n  }\n  .modal-fullscreen-md-down .modal-body {\n    overflow-y: auto;\n  }\n  .modal-fullscreen-md-down .modal-footer {\n    border-radius: 0;\n  }\n}\n\n@media (max-width: 991.98px) {\n  .modal-fullscreen-lg-down {\n    width: 100vw;\n    max-width: none;\n    height: 100%;\n    margin: 0;\n  }\n  .modal-fullscreen-lg-down .modal-content {\n    height: 100%;\n    border: 0;\n    border-radius: 0;\n  }\n  .modal-fullscreen-lg-down .modal-header {\n    border-radius: 0;\n  }\n  .modal-fullscreen-lg-down .modal-body {\n    overflow-y: auto;\n  }\n  .modal-fullscreen-lg-down .modal-footer {\n    border-radius: 0;\n  }\n}\n\n@media (max-width: 1199.98px) {\n  .modal-fullscreen-xl-down {\n    width: 100vw;\n    max-width: none;\n    height: 100%;\n    margin: 0;\n  }\n  .modal-fullscreen-xl-down .modal-content {\n    height: 100%;\n    border: 0;\n    border-radius: 0;\n  }\n  .modal-fullscreen-xl-down .modal-header {\n    border-radius: 0;\n  }\n  .modal-fullscreen-xl-down .modal-body {\n    overflow-y: auto;\n  }\n  .modal-fullscreen-xl-down .modal-footer {\n    border-radius: 0;\n  }\n}\n\n@media (max-width: 1399.98px) {\n  .modal-fullscreen-xxl-down {\n    width: 100vw;\n    max-width: none;\n    height: 100%;\n    margin: 0;\n  }\n  .modal-fullscreen-xxl-down .modal-content {\n    height: 100%;\n    border: 0;\n    border-radius: 0;\n  }\n  .modal-fullscreen-xxl-down .modal-header {\n    border-radius: 0;\n  }\n  .modal-fullscreen-xxl-down .modal-body {\n    overflow-y: auto;\n  }\n  .modal-fullscreen-xxl-down .modal-footer {\n    border-radius: 0;\n  }\n}\n\n.tooltip {\n  position: absolute;\n  z-index: 1080;\n  display: block;\n  margin: 0;\n  font-family: var(--bs-font-sans-serif);\n  font-style: normal;\n  font-weight: 400;\n  line-height: 1.5;\n  text-align: left;\n  text-align: start;\n  text-decoration: none;\n  text-shadow: none;\n  text-transform: none;\n  letter-spacing: normal;\n  word-break: normal;\n  word-spacing: normal;\n  white-space: normal;\n  line-break: auto;\n  font-size: 0.875rem;\n  word-wrap: break-word;\n  opacity: 0;\n}\n\n.tooltip.show {\n  opacity: 0.9;\n}\n\n.tooltip .tooltip-arrow {\n  position: absolute;\n  display: block;\n  width: 0.8rem;\n  height: 0.4rem;\n}\n\n.tooltip .tooltip-arrow::before {\n  position: absolute;\n  content: \"\";\n  border-color: transparent;\n  border-style: solid;\n}\n\n.bs-tooltip-top, .bs-tooltip-auto[data-popper-placement^=\"top\"] {\n  padding: 0.4rem 0;\n}\n\n.bs-tooltip-top .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=\"top\"] .tooltip-arrow {\n  bottom: 0;\n}\n\n.bs-tooltip-top .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=\"top\"] .tooltip-arrow::before {\n  top: -1px;\n  border-width: 0.4rem 0.4rem 0;\n  border-top-color: #000;\n}\n\n.bs-tooltip-end, .bs-tooltip-auto[data-popper-placement^=\"right\"] {\n  padding: 0 0.4rem;\n}\n\n.bs-tooltip-end .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=\"right\"] .tooltip-arrow {\n  left: 0;\n  width: 0.4rem;\n  height: 0.8rem;\n}\n\n.bs-tooltip-end .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=\"right\"] .tooltip-arrow::before {\n  right: -1px;\n  border-width: 0.4rem 0.4rem 0.4rem 0;\n  border-right-color: #000;\n}\n\n.bs-tooltip-bottom, .bs-tooltip-auto[data-popper-placement^=\"bottom\"] {\n  padding: 0.4rem 0;\n}\n\n.bs-tooltip-bottom .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=\"bottom\"] .tooltip-arrow {\n  top: 0;\n}\n\n.bs-tooltip-bottom .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=\"bottom\"] .tooltip-arrow::before {\n  bottom: -1px;\n  border-width: 0 0.4rem 0.4rem;\n  border-bottom-color: #000;\n}\n\n.bs-tooltip-start, .bs-tooltip-auto[data-popper-placement^=\"left\"] {\n  padding: 0 0.4rem;\n}\n\n.bs-tooltip-start .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=\"left\"] .tooltip-arrow {\n  right: 0;\n  width: 0.4rem;\n  height: 0.8rem;\n}\n\n.bs-tooltip-start .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=\"left\"] .tooltip-arrow::before {\n  left: -1px;\n  border-width: 0.4rem 0 0.4rem 0.4rem;\n  border-left-color: #000;\n}\n\n.tooltip-inner {\n  max-width: 200px;\n  padding: 0.25rem 0.5rem;\n  color: #fff;\n  text-align: center;\n  background-color: #000;\n  border-radius: 0.25rem;\n}\n\n.popover {\n  position: absolute;\n  top: 0;\n  left: 0 /* rtl:ignore */;\n  z-index: 1070;\n  display: block;\n  max-width: 276px;\n  font-family: var(--bs-font-sans-serif);\n  font-style: normal;\n  font-weight: 400;\n  line-height: 1.5;\n  text-align: left;\n  text-align: start;\n  text-decoration: none;\n  text-shadow: none;\n  text-transform: none;\n  letter-spacing: normal;\n  word-break: normal;\n  word-spacing: normal;\n  white-space: normal;\n  line-break: auto;\n  font-size: 0.875rem;\n  word-wrap: break-word;\n  background-color: #fff;\n  background-clip: padding-box;\n  border: 1px solid rgba(0, 0, 0, 0.2);\n  border-radius: 0.3rem;\n}\n\n.popover .popover-arrow {\n  position: absolute;\n  display: block;\n  width: 1rem;\n  height: 0.5rem;\n}\n\n.popover .popover-arrow::before, .popover .popover-arrow::after {\n  position: absolute;\n  display: block;\n  content: \"\";\n  border-color: transparent;\n  border-style: solid;\n}\n\n.bs-popover-top > .popover-arrow, .bs-popover-auto[data-popper-placement^=\"top\"] > .popover-arrow {\n  bottom: calc(-0.5rem - 1px);\n}\n\n.bs-popover-top > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=\"top\"] > .popover-arrow::before {\n  bottom: 0;\n  border-width: 0.5rem 0.5rem 0;\n  border-top-color: rgba(0, 0, 0, 0.25);\n}\n\n.bs-popover-top > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=\"top\"] > .popover-arrow::after {\n  bottom: 1px;\n  border-width: 0.5rem 0.5rem 0;\n  border-top-color: #fff;\n}\n\n.bs-popover-end > .popover-arrow, .bs-popover-auto[data-popper-placement^=\"right\"] > .popover-arrow {\n  left: calc(-0.5rem - 1px);\n  width: 0.5rem;\n  height: 1rem;\n}\n\n.bs-popover-end > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=\"right\"] > .popover-arrow::before {\n  left: 0;\n  border-width: 0.5rem 0.5rem 0.5rem 0;\n  border-right-color: rgba(0, 0, 0, 0.25);\n}\n\n.bs-popover-end > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=\"right\"] > .popover-arrow::after {\n  left: 1px;\n  border-width: 0.5rem 0.5rem 0.5rem 0;\n  border-right-color: #fff;\n}\n\n.bs-popover-bottom > .popover-arrow, .bs-popover-auto[data-popper-placement^=\"bottom\"] > .popover-arrow {\n  top: calc(-0.5rem - 1px);\n}\n\n.bs-popover-bottom > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=\"bottom\"] > .popover-arrow::before {\n  top: 0;\n  border-width: 0 0.5rem 0.5rem 0.5rem;\n  border-bottom-color: rgba(0, 0, 0, 0.25);\n}\n\n.bs-popover-bottom > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=\"bottom\"] > .popover-arrow::after {\n  top: 1px;\n  border-width: 0 0.5rem 0.5rem 0.5rem;\n  border-bottom-color: #fff;\n}\n\n.bs-popover-bottom .popover-header::before, .bs-popover-auto[data-popper-placement^=\"bottom\"] .popover-header::before {\n  position: absolute;\n  top: 0;\n  left: 50%;\n  display: block;\n  width: 1rem;\n  margin-left: -0.5rem;\n  content: \"\";\n  border-bottom: 1px solid #f8f5f0;\n}\n\n.bs-popover-start > .popover-arrow, .bs-popover-auto[data-popper-placement^=\"left\"] > .popover-arrow {\n  right: calc(-0.5rem - 1px);\n  width: 0.5rem;\n  height: 1rem;\n}\n\n.bs-popover-start > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=\"left\"] > .popover-arrow::before {\n  right: 0;\n  border-width: 0.5rem 0 0.5rem 0.5rem;\n  border-left-color: rgba(0, 0, 0, 0.25);\n}\n\n.bs-popover-start > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=\"left\"] > .popover-arrow::after {\n  right: 1px;\n  border-width: 0.5rem 0 0.5rem 0.5rem;\n  border-left-color: #fff;\n}\n\n.popover-header {\n  padding: 0.5rem 1rem;\n  margin-bottom: 0;\n  font-size: 1rem;\n  background-color: #f8f5f0;\n  border-bottom: 1px solid rgba(0, 0, 0, 0.2);\n  border-top-left-radius: calc(0.3rem - 1px);\n  border-top-right-radius: calc(0.3rem - 1px);\n}\n\n.popover-header:empty {\n  display: none;\n}\n\n.popover-body {\n  padding: 1rem 1rem;\n  color: #3e3f3a;\n}\n\n.carousel {\n  position: relative;\n}\n\n.carousel.pointer-event {\n  -ms-touch-action: pan-y;\n  touch-action: pan-y;\n}\n\n.carousel-inner {\n  position: relative;\n  width: 100%;\n  overflow: hidden;\n}\n\n.carousel-inner::after {\n  display: block;\n  clear: both;\n  content: \"\";\n}\n\n.carousel-item {\n  position: relative;\n  display: none;\n  float: left;\n  width: 100%;\n  margin-right: -100%;\n  -webkit-backface-visibility: hidden;\n  backface-visibility: hidden;\n  transition: -webkit-transform 0.6s ease-in-out;\n  transition: transform 0.6s ease-in-out;\n  transition: transform 0.6s ease-in-out, -webkit-transform 0.6s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .carousel-item {\n    transition: none;\n  }\n}\n\n.carousel-item.active,\n.carousel-item-next,\n.carousel-item-prev {\n  display: block;\n}\n\n/* rtl:begin:ignore */\n.carousel-item-next:not(.carousel-item-start),\n.active.carousel-item-end {\n  -webkit-transform: translateX(100%);\n  transform: translateX(100%);\n}\n\n.carousel-item-prev:not(.carousel-item-end),\n.active.carousel-item-start {\n  -webkit-transform: translateX(-100%);\n  transform: translateX(-100%);\n}\n\n/* rtl:end:ignore */\n.carousel-fade .carousel-item {\n  opacity: 0;\n  transition-property: opacity;\n  -webkit-transform: none;\n  transform: none;\n}\n\n.carousel-fade .carousel-item.active,\n.carousel-fade .carousel-item-next.carousel-item-start,\n.carousel-fade .carousel-item-prev.carousel-item-end {\n  z-index: 1;\n  opacity: 1;\n}\n\n.carousel-fade .active.carousel-item-start,\n.carousel-fade .active.carousel-item-end {\n  z-index: 0;\n  opacity: 0;\n  transition: opacity 0s 0.6s;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .carousel-fade .active.carousel-item-start,\n  .carousel-fade .active.carousel-item-end {\n    transition: none;\n  }\n}\n\n.carousel-control-prev,\n.carousel-control-next {\n  position: absolute;\n  top: 0;\n  bottom: 0;\n  z-index: 1;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-align: center;\n  align-items: center;\n  -ms-flex-pack: center;\n  justify-content: center;\n  width: 15%;\n  padding: 0;\n  color: #fff;\n  text-align: center;\n  background: none;\n  border: 0;\n  opacity: 0.5;\n  transition: opacity 0.15s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .carousel-control-prev,\n  .carousel-control-next {\n    transition: none;\n  }\n}\n\n.carousel-control-prev:hover, .carousel-control-prev:focus,\n.carousel-control-next:hover,\n.carousel-control-next:focus {\n  color: #fff;\n  text-decoration: none;\n  outline: 0;\n  opacity: 0.9;\n}\n\n.carousel-control-prev {\n  left: 0;\n}\n\n.carousel-control-next {\n  right: 0;\n}\n\n.carousel-control-prev-icon,\n.carousel-control-next-icon {\n  display: inline-block;\n  width: 2rem;\n  height: 2rem;\n  background-repeat: no-repeat;\n  background-position: 50%;\n  background-size: 100% 100%;\n}\n\n/* rtl:options: {\n  \"autoRename\": true,\n  \"stringMap\":[ {\n    \"name\"    : \"prev-next\",\n    \"search\"  : \"prev\",\n    \"replace\" : \"next\"\n  } ]\n} */\n.carousel-control-prev-icon {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0z'/%3e%3c/svg%3e\");\n}\n\n.carousel-control-next-icon {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e\");\n}\n\n.carousel-indicators {\n  position: absolute;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 2;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-pack: center;\n  justify-content: center;\n  padding: 0;\n  margin-right: 15%;\n  margin-bottom: 1rem;\n  margin-left: 15%;\n  list-style: none;\n}\n\n.carousel-indicators [data-bs-target] {\n  box-sizing: content-box;\n  -ms-flex: 0 1 auto;\n  flex: 0 1 auto;\n  width: 30px;\n  height: 3px;\n  padding: 0;\n  margin-right: 3px;\n  margin-left: 3px;\n  text-indent: -999px;\n  cursor: pointer;\n  background-color: #fff;\n  background-clip: padding-box;\n  border: 0;\n  border-top: 10px solid transparent;\n  border-bottom: 10px solid transparent;\n  opacity: 0.5;\n  transition: opacity 0.6s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .carousel-indicators [data-bs-target] {\n    transition: none;\n  }\n}\n\n.carousel-indicators .active {\n  opacity: 1;\n}\n\n.carousel-caption {\n  position: absolute;\n  right: 15%;\n  bottom: 1.25rem;\n  left: 15%;\n  padding-top: 1.25rem;\n  padding-bottom: 1.25rem;\n  color: #fff;\n  text-align: center;\n}\n\n.carousel-dark .carousel-control-prev-icon,\n.carousel-dark .carousel-control-next-icon {\n  -webkit-filter: invert(1) grayscale(100);\n  filter: invert(1) grayscale(100);\n}\n\n.carousel-dark .carousel-indicators [data-bs-target] {\n  background-color: #000;\n}\n\n.carousel-dark .carousel-caption {\n  color: #000;\n}\n\n@-webkit-keyframes spinner-border {\n  to {\n    -webkit-transform: rotate(360deg) /* rtl:ignore */;\n    transform: rotate(360deg) /* rtl:ignore */;\n  }\n}\n\n@keyframes spinner-border {\n  to {\n    -webkit-transform: rotate(360deg) /* rtl:ignore */;\n    transform: rotate(360deg) /* rtl:ignore */;\n  }\n}\n\n.spinner-border {\n  display: inline-block;\n  width: 2rem;\n  height: 2rem;\n  vertical-align: -0.125em;\n  border: 0.25em solid currentColor;\n  border-right-color: transparent;\n  border-radius: 50%;\n  -webkit-animation: 0.75s linear infinite spinner-border;\n  animation: 0.75s linear infinite spinner-border;\n}\n\n.spinner-border-sm {\n  width: 1rem;\n  height: 1rem;\n  border-width: 0.2em;\n}\n\n@-webkit-keyframes spinner-grow {\n  0% {\n    -webkit-transform: scale(0);\n    transform: scale(0);\n  }\n  50% {\n    opacity: 1;\n    -webkit-transform: none;\n    transform: none;\n  }\n}\n\n@keyframes spinner-grow {\n  0% {\n    -webkit-transform: scale(0);\n    transform: scale(0);\n  }\n  50% {\n    opacity: 1;\n    -webkit-transform: none;\n    transform: none;\n  }\n}\n\n.spinner-grow {\n  display: inline-block;\n  width: 2rem;\n  height: 2rem;\n  vertical-align: -0.125em;\n  background-color: currentColor;\n  border-radius: 50%;\n  opacity: 0;\n  -webkit-animation: 0.75s linear infinite spinner-grow;\n  animation: 0.75s linear infinite spinner-grow;\n}\n\n.spinner-grow-sm {\n  width: 1rem;\n  height: 1rem;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .spinner-border,\n  .spinner-grow {\n    -webkit-animation-duration: 1.5s;\n    animation-duration: 1.5s;\n  }\n}\n\n.offcanvas {\n  position: fixed;\n  bottom: 0;\n  z-index: 1045;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  max-width: 100%;\n  visibility: hidden;\n  background-color: #fff;\n  background-clip: padding-box;\n  outline: 0;\n  transition: -webkit-transform 0.3s ease-in-out;\n  transition: transform 0.3s ease-in-out;\n  transition: transform 0.3s ease-in-out, -webkit-transform 0.3s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .offcanvas {\n    transition: none;\n  }\n}\n\n.offcanvas-backdrop {\n  position: fixed;\n  top: 0;\n  left: 0;\n  z-index: 1040;\n  width: 100vw;\n  height: 100vh;\n  background-color: #000;\n}\n\n.offcanvas-backdrop.fade {\n  opacity: 0;\n}\n\n.offcanvas-backdrop.show {\n  opacity: 0.5;\n}\n\n.offcanvas-header {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-align: center;\n  align-items: center;\n  -ms-flex-pack: justify;\n  justify-content: space-between;\n  padding: 1rem 1rem;\n}\n\n.offcanvas-header .btn-close {\n  padding: 0.5rem 0.5rem;\n  margin-top: -0.5rem;\n  margin-right: -0.5rem;\n  margin-bottom: -0.5rem;\n}\n\n.offcanvas-title {\n  margin-bottom: 0;\n  line-height: 1.5;\n}\n\n.offcanvas-body {\n  -ms-flex-positive: 1;\n  flex-grow: 1;\n  padding: 1rem 1rem;\n  overflow-y: auto;\n}\n\n.offcanvas-start {\n  top: 0;\n  left: 0;\n  width: 400px;\n  border-right: 1px solid #dfd7ca;\n  -webkit-transform: translateX(-100%);\n  transform: translateX(-100%);\n}\n\n.offcanvas-end {\n  top: 0;\n  right: 0;\n  width: 400px;\n  border-left: 1px solid #dfd7ca;\n  -webkit-transform: translateX(100%);\n  transform: translateX(100%);\n}\n\n.offcanvas-top {\n  top: 0;\n  right: 0;\n  left: 0;\n  height: 30vh;\n  max-height: 100%;\n  border-bottom: 1px solid #dfd7ca;\n  -webkit-transform: translateY(-100%);\n  transform: translateY(-100%);\n}\n\n.offcanvas-bottom {\n  right: 0;\n  left: 0;\n  height: 30vh;\n  max-height: 100%;\n  border-top: 1px solid #dfd7ca;\n  -webkit-transform: translateY(100%);\n  transform: translateY(100%);\n}\n\n.offcanvas.show {\n  -webkit-transform: none;\n  transform: none;\n}\n\n.placeholder {\n  display: inline-block;\n  min-height: 1em;\n  vertical-align: middle;\n  cursor: wait;\n  background-color: currentColor;\n  opacity: 0.5;\n}\n\n.placeholder.btn::before {\n  display: inline-block;\n  content: \"\";\n}\n\n.placeholder-xs {\n  min-height: .6em;\n}\n\n.placeholder-sm {\n  min-height: .8em;\n}\n\n.placeholder-lg {\n  min-height: 1.2em;\n}\n\n.placeholder-glow .placeholder {\n  -webkit-animation: placeholder-glow 2s ease-in-out infinite;\n  animation: placeholder-glow 2s ease-in-out infinite;\n}\n\n@-webkit-keyframes placeholder-glow {\n  50% {\n    opacity: 0.2;\n  }\n}\n\n@keyframes placeholder-glow {\n  50% {\n    opacity: 0.2;\n  }\n}\n\n.placeholder-wave {\n  -webkit-mask-image: linear-gradient(130deg, #000 55%, rgba(0, 0, 0, 0.8) 75%, #000 95%);\n  mask-image: linear-gradient(130deg, #000 55%, rgba(0, 0, 0, 0.8) 75%, #000 95%);\n  -webkit-mask-size: 200% 100%;\n  mask-size: 200% 100%;\n  -webkit-animation: placeholder-wave 2s linear infinite;\n  animation: placeholder-wave 2s linear infinite;\n}\n\n@-webkit-keyframes placeholder-wave {\n  100% {\n    -webkit-mask-position: -200% 0%;\n    mask-position: -200% 0%;\n  }\n}\n\n@keyframes placeholder-wave {\n  100% {\n    -webkit-mask-position: -200% 0%;\n    mask-position: -200% 0%;\n  }\n}\n\n.clearfix::after {\n  display: block;\n  clear: both;\n  content: \"\";\n}\n\n.link-primary {\n  color: #325d88;\n}\n\n.link-primary:hover, .link-primary:focus {\n  color: #284a6d;\n}\n\n.link-secondary {\n  color: #8e8c84;\n}\n\n.link-secondary:hover, .link-secondary:focus {\n  color: #72706a;\n}\n\n.link-success {\n  color: #93c54b;\n}\n\n.link-success:hover, .link-success:focus {\n  color: #769e3c;\n}\n\n.link-info {\n  color: #29abe0;\n}\n\n.link-info:hover, .link-info:focus {\n  color: #2189b3;\n}\n\n.link-warning {\n  color: #f47c3c;\n}\n\n.link-warning:hover, .link-warning:focus {\n  color: #c36330;\n}\n\n.link-danger {\n  color: #d9534f;\n}\n\n.link-danger:hover, .link-danger:focus {\n  color: #ae423f;\n}\n\n.link-light {\n  color: #f8f5f0;\n}\n\n.link-light:hover, .link-light:focus {\n  color: #f9f7f3;\n}\n\n.link-dark {\n  color: #3e3f3a;\n}\n\n.link-dark:hover, .link-dark:focus {\n  color: #32322e;\n}\n\n.ratio {\n  position: relative;\n  width: 100%;\n}\n\n.ratio::before {\n  display: block;\n  padding-top: var(--bs-aspect-ratio);\n  content: \"\";\n}\n\n.ratio > * {\n  position: absolute;\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n}\n\n.ratio-1x1 {\n  --bs-aspect-ratio: 100%;\n}\n\n.ratio-4x3 {\n  --bs-aspect-ratio: calc(3 / 4 * 100%);\n}\n\n.ratio-16x9 {\n  --bs-aspect-ratio: calc(9 / 16 * 100%);\n}\n\n.ratio-21x9 {\n  --bs-aspect-ratio: calc(9 / 21 * 100%);\n}\n\n.fixed-top {\n  position: fixed;\n  top: 0;\n  right: 0;\n  left: 0;\n  z-index: 1030;\n}\n\n.fixed-bottom {\n  position: fixed;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 1030;\n}\n\n.sticky-top {\n  position: -webkit-sticky;\n  position: sticky;\n  top: 0;\n  z-index: 1020;\n}\n\n@media (min-width: 576px) {\n  .sticky-sm-top {\n    position: -webkit-sticky;\n    position: sticky;\n    top: 0;\n    z-index: 1020;\n  }\n}\n\n@media (min-width: 768px) {\n  .sticky-md-top {\n    position: -webkit-sticky;\n    position: sticky;\n    top: 0;\n    z-index: 1020;\n  }\n}\n\n@media (min-width: 992px) {\n  .sticky-lg-top {\n    position: -webkit-sticky;\n    position: sticky;\n    top: 0;\n    z-index: 1020;\n  }\n}\n\n@media (min-width: 1200px) {\n  .sticky-xl-top {\n    position: -webkit-sticky;\n    position: sticky;\n    top: 0;\n    z-index: 1020;\n  }\n}\n\n@media (min-width: 1400px) {\n  .sticky-xxl-top {\n    position: -webkit-sticky;\n    position: sticky;\n    top: 0;\n    z-index: 1020;\n  }\n}\n\n.hstack {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-direction: row;\n  flex-direction: row;\n  -ms-flex-align: center;\n  align-items: center;\n  -ms-flex-item-align: stretch;\n  align-self: stretch;\n}\n\n.vstack {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex: 1 1 auto;\n  flex: 1 1 auto;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  -ms-flex-item-align: stretch;\n  align-self: stretch;\n}\n\n.visually-hidden,\n.visually-hidden-focusable:not(:focus):not(:focus-within) {\n  position: absolute !important;\n  width: 1px !important;\n  height: 1px !important;\n  padding: 0 !important;\n  margin: -1px !important;\n  overflow: hidden !important;\n  clip: rect(0, 0, 0, 0) !important;\n  white-space: nowrap !important;\n  border: 0 !important;\n}\n\n.stretched-link::after {\n  position: absolute;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 1;\n  content: \"\";\n}\n\n.text-truncate {\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n}\n\n.vr {\n  display: inline-block;\n  -ms-flex-item-align: stretch;\n  align-self: stretch;\n  width: 1px;\n  min-height: 1em;\n  background-color: currentColor;\n  opacity: 0.25;\n}\n\n.align-baseline {\n  vertical-align: baseline !important;\n}\n\n.align-top {\n  vertical-align: top !important;\n}\n\n.align-middle {\n  vertical-align: middle !important;\n}\n\n.align-bottom {\n  vertical-align: bottom !important;\n}\n\n.align-text-bottom {\n  vertical-align: text-bottom !important;\n}\n\n.align-text-top {\n  vertical-align: text-top !important;\n}\n\n.float-start {\n  float: left !important;\n}\n\n.float-end {\n  float: right !important;\n}\n\n.float-none {\n  float: none !important;\n}\n\n.opacity-0 {\n  opacity: 0 !important;\n}\n\n.opacity-25 {\n  opacity: 0.25 !important;\n}\n\n.opacity-50 {\n  opacity: 0.5 !important;\n}\n\n.opacity-75 {\n  opacity: 0.75 !important;\n}\n\n.opacity-100 {\n  opacity: 1 !important;\n}\n\n.overflow-auto {\n  overflow: auto !important;\n}\n\n.overflow-hidden {\n  overflow: hidden !important;\n}\n\n.overflow-visible {\n  overflow: visible !important;\n}\n\n.overflow-scroll {\n  overflow: scroll !important;\n}\n\n.d-inline {\n  display: inline !important;\n}\n\n.d-inline-block {\n  display: inline-block !important;\n}\n\n.d-block {\n  display: block !important;\n}\n\n.d-grid {\n  display: grid !important;\n}\n\n.d-table {\n  display: table !important;\n}\n\n.d-table-row {\n  display: table-row !important;\n}\n\n.d-table-cell {\n  display: table-cell !important;\n}\n\n.d-flex {\n  display: -ms-flexbox !important;\n  display: flex !important;\n}\n\n.d-inline-flex {\n  display: -ms-inline-flexbox !important;\n  display: inline-flex !important;\n}\n\n.d-none {\n  display: none !important;\n}\n\n.shadow {\n  box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15) !important;\n}\n\n.shadow-sm {\n  box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075) !important;\n}\n\n.shadow-lg {\n  box-shadow: 0 1rem 3rem rgba(0, 0, 0, 0.175) !important;\n}\n\n.shadow-none {\n  box-shadow: none !important;\n}\n\n.position-static {\n  position: static !important;\n}\n\n.position-relative {\n  position: relative !important;\n}\n\n.position-absolute {\n  position: absolute !important;\n}\n\n.position-fixed {\n  position: fixed !important;\n}\n\n.position-sticky {\n  position: -webkit-sticky !important;\n  position: sticky !important;\n}\n\n.top-0 {\n  top: 0 !important;\n}\n\n.top-50 {\n  top: 50% !important;\n}\n\n.top-100 {\n  top: 100% !important;\n}\n\n.bottom-0 {\n  bottom: 0 !important;\n}\n\n.bottom-50 {\n  bottom: 50% !important;\n}\n\n.bottom-100 {\n  bottom: 100% !important;\n}\n\n.start-0 {\n  left: 0 !important;\n}\n\n.start-50 {\n  left: 50% !important;\n}\n\n.start-100 {\n  left: 100% !important;\n}\n\n.end-0 {\n  right: 0 !important;\n}\n\n.end-50 {\n  right: 50% !important;\n}\n\n.end-100 {\n  right: 100% !important;\n}\n\n.translate-middle {\n  -webkit-transform: translate(-50%, -50%) !important;\n  transform: translate(-50%, -50%) !important;\n}\n\n.translate-middle-x {\n  -webkit-transform: translateX(-50%) !important;\n  transform: translateX(-50%) !important;\n}\n\n.translate-middle-y {\n  -webkit-transform: translateY(-50%) !important;\n  transform: translateY(-50%) !important;\n}\n\n.border {\n  border: 1px solid #dfd7ca !important;\n}\n\n.border-0 {\n  border: 0 !important;\n}\n\n.border-top {\n  border-top: 1px solid #dfd7ca !important;\n}\n\n.border-top-0 {\n  border-top: 0 !important;\n}\n\n.border-end {\n  border-right: 1px solid #dfd7ca !important;\n}\n\n.border-end-0 {\n  border-right: 0 !important;\n}\n\n.border-bottom {\n  border-bottom: 1px solid #dfd7ca !important;\n}\n\n.border-bottom-0 {\n  border-bottom: 0 !important;\n}\n\n.border-start {\n  border-left: 1px solid #dfd7ca !important;\n}\n\n.border-start-0 {\n  border-left: 0 !important;\n}\n\n.border-primary {\n  border-color: #325d88 !important;\n}\n\n.border-secondary {\n  border-color: #8e8c84 !important;\n}\n\n.border-success {\n  border-color: #93c54b !important;\n}\n\n.border-info {\n  border-color: #29abe0 !important;\n}\n\n.border-warning {\n  border-color: #f47c3c !important;\n}\n\n.border-danger {\n  border-color: #d9534f !important;\n}\n\n.border-light {\n  border-color: #f8f5f0 !important;\n}\n\n.border-dark {\n  border-color: #3e3f3a !important;\n}\n\n.border-white {\n  border-color: #fff !important;\n}\n\n.border-1 {\n  border-width: 1px !important;\n}\n\n.border-2 {\n  border-width: 2px !important;\n}\n\n.border-3 {\n  border-width: 3px !important;\n}\n\n.border-4 {\n  border-width: 4px !important;\n}\n\n.border-5 {\n  border-width: 5px !important;\n}\n\n.w-25 {\n  width: 25% !important;\n}\n\n.w-50 {\n  width: 50% !important;\n}\n\n.w-75 {\n  width: 75% !important;\n}\n\n.w-100 {\n  width: 100% !important;\n}\n\n.w-auto {\n  width: auto !important;\n}\n\n.mw-100 {\n  max-width: 100% !important;\n}\n\n.vw-100 {\n  width: 100vw !important;\n}\n\n.min-vw-100 {\n  min-width: 100vw !important;\n}\n\n.h-25 {\n  height: 25% !important;\n}\n\n.h-50 {\n  height: 50% !important;\n}\n\n.h-75 {\n  height: 75% !important;\n}\n\n.h-100 {\n  height: 100% !important;\n}\n\n.h-auto {\n  height: auto !important;\n}\n\n.mh-100 {\n  max-height: 100% !important;\n}\n\n.vh-100 {\n  height: 100vh !important;\n}\n\n.min-vh-100 {\n  min-height: 100vh !important;\n}\n\n.flex-fill {\n  -ms-flex: 1 1 auto !important;\n  flex: 1 1 auto !important;\n}\n\n.flex-row {\n  -ms-flex-direction: row !important;\n  flex-direction: row !important;\n}\n\n.flex-column {\n  -ms-flex-direction: column !important;\n  flex-direction: column !important;\n}\n\n.flex-row-reverse {\n  -ms-flex-direction: row-reverse !important;\n  flex-direction: row-reverse !important;\n}\n\n.flex-column-reverse {\n  -ms-flex-direction: column-reverse !important;\n  flex-direction: column-reverse !important;\n}\n\n.flex-grow-0 {\n  -ms-flex-positive: 0 !important;\n  flex-grow: 0 !important;\n}\n\n.flex-grow-1 {\n  -ms-flex-positive: 1 !important;\n  flex-grow: 1 !important;\n}\n\n.flex-shrink-0 {\n  -ms-flex-negative: 0 !important;\n  flex-shrink: 0 !important;\n}\n\n.flex-shrink-1 {\n  -ms-flex-negative: 1 !important;\n  flex-shrink: 1 !important;\n}\n\n.flex-wrap {\n  -ms-flex-wrap: wrap !important;\n  flex-wrap: wrap !important;\n}\n\n.flex-nowrap {\n  -ms-flex-wrap: nowrap !important;\n  flex-wrap: nowrap !important;\n}\n\n.flex-wrap-reverse {\n  -ms-flex-wrap: wrap-reverse !important;\n  flex-wrap: wrap-reverse !important;\n}\n\n.gap-0 {\n  gap: 0 !important;\n}\n\n.gap-1 {\n  gap: 0.25rem !important;\n}\n\n.gap-2 {\n  gap: 0.5rem !important;\n}\n\n.gap-3 {\n  gap: 1rem !important;\n}\n\n.gap-4 {\n  gap: 1.5rem !important;\n}\n\n.gap-5 {\n  gap: 3rem !important;\n}\n\n.justify-content-start {\n  -ms-flex-pack: start !important;\n  justify-content: flex-start !important;\n}\n\n.justify-content-end {\n  -ms-flex-pack: end !important;\n  justify-content: flex-end !important;\n}\n\n.justify-content-center {\n  -ms-flex-pack: center !important;\n  justify-content: center !important;\n}\n\n.justify-content-between {\n  -ms-flex-pack: justify !important;\n  justify-content: space-between !important;\n}\n\n.justify-content-around {\n  -ms-flex-pack: distribute !important;\n  justify-content: space-around !important;\n}\n\n.justify-content-evenly {\n  -ms-flex-pack: space-evenly !important;\n  justify-content: space-evenly !important;\n}\n\n.align-items-start {\n  -ms-flex-align: start !important;\n  align-items: flex-start !important;\n}\n\n.align-items-end {\n  -ms-flex-align: end !important;\n  align-items: flex-end !important;\n}\n\n.align-items-center {\n  -ms-flex-align: center !important;\n  align-items: center !important;\n}\n\n.align-items-baseline {\n  -ms-flex-align: baseline !important;\n  align-items: baseline !important;\n}\n\n.align-items-stretch {\n  -ms-flex-align: stretch !important;\n  align-items: stretch !important;\n}\n\n.align-content-start {\n  -ms-flex-line-pack: start !important;\n  align-content: flex-start !important;\n}\n\n.align-content-end {\n  -ms-flex-line-pack: end !important;\n  align-content: flex-end !important;\n}\n\n.align-content-center {\n  -ms-flex-line-pack: center !important;\n  align-content: center !important;\n}\n\n.align-content-between {\n  -ms-flex-line-pack: justify !important;\n  align-content: space-between !important;\n}\n\n.align-content-around {\n  -ms-flex-line-pack: distribute !important;\n  align-content: space-around !important;\n}\n\n.align-content-stretch {\n  -ms-flex-line-pack: stretch !important;\n  align-content: stretch !important;\n}\n\n.align-self-auto {\n  -ms-flex-item-align: auto !important;\n  align-self: auto !important;\n}\n\n.align-self-start {\n  -ms-flex-item-align: start !important;\n  align-self: flex-start !important;\n}\n\n.align-self-end {\n  -ms-flex-item-align: end !important;\n  align-self: flex-end !important;\n}\n\n.align-self-center {\n  -ms-flex-item-align: center !important;\n  align-self: center !important;\n}\n\n.align-self-baseline {\n  -ms-flex-item-align: baseline !important;\n  align-self: baseline !important;\n}\n\n.align-self-stretch {\n  -ms-flex-item-align: stretch !important;\n  align-self: stretch !important;\n}\n\n.order-first {\n  -ms-flex-order: -1 !important;\n  order: -1 !important;\n}\n\n.order-0 {\n  -ms-flex-order: 0 !important;\n  order: 0 !important;\n}\n\n.order-1 {\n  -ms-flex-order: 1 !important;\n  order: 1 !important;\n}\n\n.order-2 {\n  -ms-flex-order: 2 !important;\n  order: 2 !important;\n}\n\n.order-3 {\n  -ms-flex-order: 3 !important;\n  order: 3 !important;\n}\n\n.order-4 {\n  -ms-flex-order: 4 !important;\n  order: 4 !important;\n}\n\n.order-5 {\n  -ms-flex-order: 5 !important;\n  order: 5 !important;\n}\n\n.order-last {\n  -ms-flex-order: 6 !important;\n  order: 6 !important;\n}\n\n.m-0 {\n  margin: 0 !important;\n}\n\n.m-1 {\n  margin: 0.25rem !important;\n}\n\n.m-2 {\n  margin: 0.5rem !important;\n}\n\n.m-3 {\n  margin: 1rem !important;\n}\n\n.m-4 {\n  margin: 1.5rem !important;\n}\n\n.m-5 {\n  margin: 3rem !important;\n}\n\n.m-auto {\n  margin: auto !important;\n}\n\n.mx-0 {\n  margin-right: 0 !important;\n  margin-left: 0 !important;\n}\n\n.mx-1 {\n  margin-right: 0.25rem !important;\n  margin-left: 0.25rem !important;\n}\n\n.mx-2 {\n  margin-right: 0.5rem !important;\n  margin-left: 0.5rem !important;\n}\n\n.mx-3 {\n  margin-right: 1rem !important;\n  margin-left: 1rem !important;\n}\n\n.mx-4 {\n  margin-right: 1.5rem !important;\n  margin-left: 1.5rem !important;\n}\n\n.mx-5 {\n  margin-right: 3rem !important;\n  margin-left: 3rem !important;\n}\n\n.mx-auto {\n  margin-right: auto !important;\n  margin-left: auto !important;\n}\n\n.my-0 {\n  margin-top: 0 !important;\n  margin-bottom: 0 !important;\n}\n\n.my-1 {\n  margin-top: 0.25rem !important;\n  margin-bottom: 0.25rem !important;\n}\n\n.my-2 {\n  margin-top: 0.5rem !important;\n  margin-bottom: 0.5rem !important;\n}\n\n.my-3 {\n  margin-top: 1rem !important;\n  margin-bottom: 1rem !important;\n}\n\n.my-4 {\n  margin-top: 1.5rem !important;\n  margin-bottom: 1.5rem !important;\n}\n\n.my-5 {\n  margin-top: 3rem !important;\n  margin-bottom: 3rem !important;\n}\n\n.my-auto {\n  margin-top: auto !important;\n  margin-bottom: auto !important;\n}\n\n.mt-0 {\n  margin-top: 0 !important;\n}\n\n.mt-1 {\n  margin-top: 0.25rem !important;\n}\n\n.mt-2 {\n  margin-top: 0.5rem !important;\n}\n\n.mt-3 {\n  margin-top: 1rem !important;\n}\n\n.mt-4 {\n  margin-top: 1.5rem !important;\n}\n\n.mt-5 {\n  margin-top: 3rem !important;\n}\n\n.mt-auto {\n  margin-top: auto !important;\n}\n\n.me-0 {\n  margin-right: 0 !important;\n}\n\n.me-1 {\n  margin-right: 0.25rem !important;\n}\n\n.me-2 {\n  margin-right: 0.5rem !important;\n}\n\n.me-3 {\n  margin-right: 1rem !important;\n}\n\n.me-4 {\n  margin-right: 1.5rem !important;\n}\n\n.me-5 {\n  margin-right: 3rem !important;\n}\n\n.me-auto {\n  margin-right: auto !important;\n}\n\n.mb-0 {\n  margin-bottom: 0 !important;\n}\n\n.mb-1 {\n  margin-bottom: 0.25rem !important;\n}\n\n.mb-2 {\n  margin-bottom: 0.5rem !important;\n}\n\n.mb-3 {\n  margin-bottom: 1rem !important;\n}\n\n.mb-4 {\n  margin-bottom: 1.5rem !important;\n}\n\n.mb-5 {\n  margin-bottom: 3rem !important;\n}\n\n.mb-auto {\n  margin-bottom: auto !important;\n}\n\n.ms-0 {\n  margin-left: 0 !important;\n}\n\n.ms-1 {\n  margin-left: 0.25rem !important;\n}\n\n.ms-2 {\n  margin-left: 0.5rem !important;\n}\n\n.ms-3 {\n  margin-left: 1rem !important;\n}\n\n.ms-4 {\n  margin-left: 1.5rem !important;\n}\n\n.ms-5 {\n  margin-left: 3rem !important;\n}\n\n.ms-auto {\n  margin-left: auto !important;\n}\n\n.p-0 {\n  padding: 0 !important;\n}\n\n.p-1 {\n  padding: 0.25rem !important;\n}\n\n.p-2 {\n  padding: 0.5rem !important;\n}\n\n.p-3 {\n  padding: 1rem !important;\n}\n\n.p-4 {\n  padding: 1.5rem !important;\n}\n\n.p-5 {\n  padding: 3rem !important;\n}\n\n.px-0 {\n  padding-right: 0 !important;\n  padding-left: 0 !important;\n}\n\n.px-1 {\n  padding-right: 0.25rem !important;\n  padding-left: 0.25rem !important;\n}\n\n.px-2 {\n  padding-right: 0.5rem !important;\n  padding-left: 0.5rem !important;\n}\n\n.px-3 {\n  padding-right: 1rem !important;\n  padding-left: 1rem !important;\n}\n\n.px-4 {\n  padding-right: 1.5rem !important;\n  padding-left: 1.5rem !important;\n}\n\n.px-5 {\n  padding-right: 3rem !important;\n  padding-left: 3rem !important;\n}\n\n.py-0 {\n  padding-top: 0 !important;\n  padding-bottom: 0 !important;\n}\n\n.py-1 {\n  padding-top: 0.25rem !important;\n  padding-bottom: 0.25rem !important;\n}\n\n.py-2 {\n  padding-top: 0.5rem !important;\n  padding-bottom: 0.5rem !important;\n}\n\n.py-3 {\n  padding-top: 1rem !important;\n  padding-bottom: 1rem !important;\n}\n\n.py-4 {\n  padding-top: 1.5rem !important;\n  padding-bottom: 1.5rem !important;\n}\n\n.py-5 {\n  padding-top: 3rem !important;\n  padding-bottom: 3rem !important;\n}\n\n.pt-0 {\n  padding-top: 0 !important;\n}\n\n.pt-1 {\n  padding-top: 0.25rem !important;\n}\n\n.pt-2 {\n  padding-top: 0.5rem !important;\n}\n\n.pt-3 {\n  padding-top: 1rem !important;\n}\n\n.pt-4 {\n  padding-top: 1.5rem !important;\n}\n\n.pt-5 {\n  padding-top: 3rem !important;\n}\n\n.pe-0 {\n  padding-right: 0 !important;\n}\n\n.pe-1 {\n  padding-right: 0.25rem !important;\n}\n\n.pe-2 {\n  padding-right: 0.5rem !important;\n}\n\n.pe-3 {\n  padding-right: 1rem !important;\n}\n\n.pe-4 {\n  padding-right: 1.5rem !important;\n}\n\n.pe-5 {\n  padding-right: 3rem !important;\n}\n\n.pb-0 {\n  padding-bottom: 0 !important;\n}\n\n.pb-1 {\n  padding-bottom: 0.25rem !important;\n}\n\n.pb-2 {\n  padding-bottom: 0.5rem !important;\n}\n\n.pb-3 {\n  padding-bottom: 1rem !important;\n}\n\n.pb-4 {\n  padding-bottom: 1.5rem !important;\n}\n\n.pb-5 {\n  padding-bottom: 3rem !important;\n}\n\n.ps-0 {\n  padding-left: 0 !important;\n}\n\n.ps-1 {\n  padding-left: 0.25rem !important;\n}\n\n.ps-2 {\n  padding-left: 0.5rem !important;\n}\n\n.ps-3 {\n  padding-left: 1rem !important;\n}\n\n.ps-4 {\n  padding-left: 1.5rem !important;\n}\n\n.ps-5 {\n  padding-left: 3rem !important;\n}\n\n.font-monospace {\n  font-family: var(--bs-font-monospace) !important;\n}\n\n.fs-1 {\n  font-size: calc(1.375rem + 1.5vw) !important;\n}\n\n.fs-2 {\n  font-size: calc(1.325rem + 0.9vw) !important;\n}\n\n.fs-3 {\n  font-size: calc(1.3rem + 0.6vw) !important;\n}\n\n.fs-4 {\n  font-size: calc(1.275rem + 0.3vw) !important;\n}\n\n.fs-5 {\n  font-size: 1.25rem !important;\n}\n\n.fs-6 {\n  font-size: 1rem !important;\n}\n\n.fst-italic {\n  font-style: italic !important;\n}\n\n.fst-normal {\n  font-style: normal !important;\n}\n\n.fw-light {\n  font-weight: 300 !important;\n}\n\n.fw-lighter {\n  font-weight: lighter !important;\n}\n\n.fw-normal {\n  font-weight: 400 !important;\n}\n\n.fw-bold {\n  font-weight: 700 !important;\n}\n\n.fw-bolder {\n  font-weight: bolder !important;\n}\n\n.lh-1 {\n  line-height: 1 !important;\n}\n\n.lh-sm {\n  line-height: 1.25 !important;\n}\n\n.lh-base {\n  line-height: 1.5 !important;\n}\n\n.lh-lg {\n  line-height: 2 !important;\n}\n\n.text-start {\n  text-align: left !important;\n}\n\n.text-end {\n  text-align: right !important;\n}\n\n.text-center {\n  text-align: center !important;\n}\n\n.text-decoration-none {\n  text-decoration: none !important;\n}\n\n.text-decoration-underline {\n  text-decoration: underline !important;\n}\n\n.text-decoration-line-through {\n  text-decoration: line-through !important;\n}\n\n.text-lowercase {\n  text-transform: lowercase !important;\n}\n\n.text-uppercase {\n  text-transform: uppercase !important;\n}\n\n.text-capitalize {\n  text-transform: capitalize !important;\n}\n\n.text-wrap {\n  white-space: normal !important;\n}\n\n.text-nowrap {\n  white-space: nowrap !important;\n}\n\n/* rtl:begin:remove */\n.text-break {\n  word-wrap: break-word !important;\n  word-break: break-word !important;\n}\n\n/* rtl:end:remove */\n.text-primary {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-primary-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-secondary {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-secondary-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-success {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-success-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-info {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-info-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-warning {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-warning-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-danger {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-danger-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-light {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-light-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-dark {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-dark-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-black {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-black-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-white {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-white-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-body {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-body-color-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-muted {\n  --bs-text-opacity: 1;\n  color: #8e8c84 !important;\n}\n\n.text-black-50 {\n  --bs-text-opacity: 1;\n  color: rgba(0, 0, 0, 0.5) !important;\n}\n\n.text-white-50 {\n  --bs-text-opacity: 1;\n  color: rgba(255, 255, 255, 0.5) !important;\n}\n\n.text-reset {\n  --bs-text-opacity: 1;\n  color: inherit !important;\n}\n\n.text-opacity-25 {\n  --bs-text-opacity: 0.25;\n}\n\n.text-opacity-50 {\n  --bs-text-opacity: 0.5;\n}\n\n.text-opacity-75 {\n  --bs-text-opacity: 0.75;\n}\n\n.text-opacity-100 {\n  --bs-text-opacity: 1;\n}\n\n.bg-primary {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-primary-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-secondary {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-secondary-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-success {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-success-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-info {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-info-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-warning {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-warning-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-danger {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-danger-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-light {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-light-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-dark {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-dark-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-black {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-black-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-white {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-white-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-body {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-body-bg-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-transparent {\n  --bs-bg-opacity: 1;\n  background-color: transparent !important;\n}\n\n.bg-opacity-10 {\n  --bs-bg-opacity: 0.1;\n}\n\n.bg-opacity-25 {\n  --bs-bg-opacity: 0.25;\n}\n\n.bg-opacity-50 {\n  --bs-bg-opacity: 0.5;\n}\n\n.bg-opacity-75 {\n  --bs-bg-opacity: 0.75;\n}\n\n.bg-opacity-100 {\n  --bs-bg-opacity: 1;\n}\n\n.bg-gradient {\n  background-image: var(--bs-gradient) !important;\n}\n\n.user-select-all {\n  -webkit-user-select: all !important;\n  -moz-user-select: all !important;\n  user-select: all !important;\n}\n\n.user-select-auto {\n  -webkit-user-select: auto !important;\n  -moz-user-select: auto !important;\n  -ms-user-select: auto !important;\n  user-select: auto !important;\n}\n\n.user-select-none {\n  -webkit-user-select: none !important;\n  -moz-user-select: none !important;\n  -ms-user-select: none !important;\n  user-select: none !important;\n}\n\n.pe-none {\n  pointer-events: none !important;\n}\n\n.pe-auto {\n  pointer-events: auto !important;\n}\n\n.rounded {\n  border-radius: 0.25rem !important;\n}\n\n.rounded-0 {\n  border-radius: 0 !important;\n}\n\n.rounded-1 {\n  border-radius: 0.2rem !important;\n}\n\n.rounded-2 {\n  border-radius: 0.25rem !important;\n}\n\n.rounded-3 {\n  border-radius: 0.3rem !important;\n}\n\n.rounded-circle {\n  border-radius: 50% !important;\n}\n\n.rounded-pill {\n  border-radius: 50rem !important;\n}\n\n.rounded-top {\n  border-top-left-radius: 0.25rem !important;\n  border-top-right-radius: 0.25rem !important;\n}\n\n.rounded-end {\n  border-top-right-radius: 0.25rem !important;\n  border-bottom-right-radius: 0.25rem !important;\n}\n\n.rounded-bottom {\n  border-bottom-right-radius: 0.25rem !important;\n  border-bottom-left-radius: 0.25rem !important;\n}\n\n.rounded-start {\n  border-bottom-left-radius: 0.25rem !important;\n  border-top-left-radius: 0.25rem !important;\n}\n\n.visible {\n  visibility: visible !important;\n}\n\n.invisible {\n  visibility: hidden !important;\n}\n\n@media (min-width: 576px) {\n  .float-sm-start {\n    float: left !important;\n  }\n  .float-sm-end {\n    float: right !important;\n  }\n  .float-sm-none {\n    float: none !important;\n  }\n  .d-sm-inline {\n    display: inline !important;\n  }\n  .d-sm-inline-block {\n    display: inline-block !important;\n  }\n  .d-sm-block {\n    display: block !important;\n  }\n  .d-sm-grid {\n    display: grid !important;\n  }\n  .d-sm-table {\n    display: table !important;\n  }\n  .d-sm-table-row {\n    display: table-row !important;\n  }\n  .d-sm-table-cell {\n    display: table-cell !important;\n  }\n  .d-sm-flex {\n    display: -ms-flexbox !important;\n    display: flex !important;\n  }\n  .d-sm-inline-flex {\n    display: -ms-inline-flexbox !important;\n    display: inline-flex !important;\n  }\n  .d-sm-none {\n    display: none !important;\n  }\n  .flex-sm-fill {\n    -ms-flex: 1 1 auto !important;\n    flex: 1 1 auto !important;\n  }\n  .flex-sm-row {\n    -ms-flex-direction: row !important;\n    flex-direction: row !important;\n  }\n  .flex-sm-column {\n    -ms-flex-direction: column !important;\n    flex-direction: column !important;\n  }\n  .flex-sm-row-reverse {\n    -ms-flex-direction: row-reverse !important;\n    flex-direction: row-reverse !important;\n  }\n  .flex-sm-column-reverse {\n    -ms-flex-direction: column-reverse !important;\n    flex-direction: column-reverse !important;\n  }\n  .flex-sm-grow-0 {\n    -ms-flex-positive: 0 !important;\n    flex-grow: 0 !important;\n  }\n  .flex-sm-grow-1 {\n    -ms-flex-positive: 1 !important;\n    flex-grow: 1 !important;\n  }\n  .flex-sm-shrink-0 {\n    -ms-flex-negative: 0 !important;\n    flex-shrink: 0 !important;\n  }\n  .flex-sm-shrink-1 {\n    -ms-flex-negative: 1 !important;\n    flex-shrink: 1 !important;\n  }\n  .flex-sm-wrap {\n    -ms-flex-wrap: wrap !important;\n    flex-wrap: wrap !important;\n  }\n  .flex-sm-nowrap {\n    -ms-flex-wrap: nowrap !important;\n    flex-wrap: nowrap !important;\n  }\n  .flex-sm-wrap-reverse {\n    -ms-flex-wrap: wrap-reverse !important;\n    flex-wrap: wrap-reverse !important;\n  }\n  .gap-sm-0 {\n    gap: 0 !important;\n  }\n  .gap-sm-1 {\n    gap: 0.25rem !important;\n  }\n  .gap-sm-2 {\n    gap: 0.5rem !important;\n  }\n  .gap-sm-3 {\n    gap: 1rem !important;\n  }\n  .gap-sm-4 {\n    gap: 1.5rem !important;\n  }\n  .gap-sm-5 {\n    gap: 3rem !important;\n  }\n  .justify-content-sm-start {\n    -ms-flex-pack: start !important;\n    justify-content: flex-start !important;\n  }\n  .justify-content-sm-end {\n    -ms-flex-pack: end !important;\n    justify-content: flex-end !important;\n  }\n  .justify-content-sm-center {\n    -ms-flex-pack: center !important;\n    justify-content: center !important;\n  }\n  .justify-content-sm-between {\n    -ms-flex-pack: justify !important;\n    justify-content: space-between !important;\n  }\n  .justify-content-sm-around {\n    -ms-flex-pack: distribute !important;\n    justify-content: space-around !important;\n  }\n  .justify-content-sm-evenly {\n    -ms-flex-pack: space-evenly !important;\n    justify-content: space-evenly !important;\n  }\n  .align-items-sm-start {\n    -ms-flex-align: start !important;\n    align-items: flex-start !important;\n  }\n  .align-items-sm-end {\n    -ms-flex-align: end !important;\n    align-items: flex-end !important;\n  }\n  .align-items-sm-center {\n    -ms-flex-align: center !important;\n    align-items: center !important;\n  }\n  .align-items-sm-baseline {\n    -ms-flex-align: baseline !important;\n    align-items: baseline !important;\n  }\n  .align-items-sm-stretch {\n    -ms-flex-align: stretch !important;\n    align-items: stretch !important;\n  }\n  .align-content-sm-start {\n    -ms-flex-line-pack: start !important;\n    align-content: flex-start !important;\n  }\n  .align-content-sm-end {\n    -ms-flex-line-pack: end !important;\n    align-content: flex-end !important;\n  }\n  .align-content-sm-center {\n    -ms-flex-line-pack: center !important;\n    align-content: center !important;\n  }\n  .align-content-sm-between {\n    -ms-flex-line-pack: justify !important;\n    align-content: space-between !important;\n  }\n  .align-content-sm-around {\n    -ms-flex-line-pack: distribute !important;\n    align-content: space-around !important;\n  }\n  .align-content-sm-stretch {\n    -ms-flex-line-pack: stretch !important;\n    align-content: stretch !important;\n  }\n  .align-self-sm-auto {\n    -ms-flex-item-align: auto !important;\n    align-self: auto !important;\n  }\n  .align-self-sm-start {\n    -ms-flex-item-align: start !important;\n    align-self: flex-start !important;\n  }\n  .align-self-sm-end {\n    -ms-flex-item-align: end !important;\n    align-self: flex-end !important;\n  }\n  .align-self-sm-center {\n    -ms-flex-item-align: center !important;\n    align-self: center !important;\n  }\n  .align-self-sm-baseline {\n    -ms-flex-item-align: baseline !important;\n    align-self: baseline !important;\n  }\n  .align-self-sm-stretch {\n    -ms-flex-item-align: stretch !important;\n    align-self: stretch !important;\n  }\n  .order-sm-first {\n    -ms-flex-order: -1 !important;\n    order: -1 !important;\n  }\n  .order-sm-0 {\n    -ms-flex-order: 0 !important;\n    order: 0 !important;\n  }\n  .order-sm-1 {\n    -ms-flex-order: 1 !important;\n    order: 1 !important;\n  }\n  .order-sm-2 {\n    -ms-flex-order: 2 !important;\n    order: 2 !important;\n  }\n  .order-sm-3 {\n    -ms-flex-order: 3 !important;\n    order: 3 !important;\n  }\n  .order-sm-4 {\n    -ms-flex-order: 4 !important;\n    order: 4 !important;\n  }\n  .order-sm-5 {\n    -ms-flex-order: 5 !important;\n    order: 5 !important;\n  }\n  .order-sm-last {\n    -ms-flex-order: 6 !important;\n    order: 6 !important;\n  }\n  .m-sm-0 {\n    margin: 0 !important;\n  }\n  .m-sm-1 {\n    margin: 0.25rem !important;\n  }\n  .m-sm-2 {\n    margin: 0.5rem !important;\n  }\n  .m-sm-3 {\n    margin: 1rem !important;\n  }\n  .m-sm-4 {\n    margin: 1.5rem !important;\n  }\n  .m-sm-5 {\n    margin: 3rem !important;\n  }\n  .m-sm-auto {\n    margin: auto !important;\n  }\n  .mx-sm-0 {\n    margin-right: 0 !important;\n    margin-left: 0 !important;\n  }\n  .mx-sm-1 {\n    margin-right: 0.25rem !important;\n    margin-left: 0.25rem !important;\n  }\n  .mx-sm-2 {\n    margin-right: 0.5rem !important;\n    margin-left: 0.5rem !important;\n  }\n  .mx-sm-3 {\n    margin-right: 1rem !important;\n    margin-left: 1rem !important;\n  }\n  .mx-sm-4 {\n    margin-right: 1.5rem !important;\n    margin-left: 1.5rem !important;\n  }\n  .mx-sm-5 {\n    margin-right: 3rem !important;\n    margin-left: 3rem !important;\n  }\n  .mx-sm-auto {\n    margin-right: auto !important;\n    margin-left: auto !important;\n  }\n  .my-sm-0 {\n    margin-top: 0 !important;\n    margin-bottom: 0 !important;\n  }\n  .my-sm-1 {\n    margin-top: 0.25rem !important;\n    margin-bottom: 0.25rem !important;\n  }\n  .my-sm-2 {\n    margin-top: 0.5rem !important;\n    margin-bottom: 0.5rem !important;\n  }\n  .my-sm-3 {\n    margin-top: 1rem !important;\n    margin-bottom: 1rem !important;\n  }\n  .my-sm-4 {\n    margin-top: 1.5rem !important;\n    margin-bottom: 1.5rem !important;\n  }\n  .my-sm-5 {\n    margin-top: 3rem !important;\n    margin-bottom: 3rem !important;\n  }\n  .my-sm-auto {\n    margin-top: auto !important;\n    margin-bottom: auto !important;\n  }\n  .mt-sm-0 {\n    margin-top: 0 !important;\n  }\n  .mt-sm-1 {\n    margin-top: 0.25rem !important;\n  }\n  .mt-sm-2 {\n    margin-top: 0.5rem !important;\n  }\n  .mt-sm-3 {\n    margin-top: 1rem !important;\n  }\n  .mt-sm-4 {\n    margin-top: 1.5rem !important;\n  }\n  .mt-sm-5 {\n    margin-top: 3rem !important;\n  }\n  .mt-sm-auto {\n    margin-top: auto !important;\n  }\n  .me-sm-0 {\n    margin-right: 0 !important;\n  }\n  .me-sm-1 {\n    margin-right: 0.25rem !important;\n  }\n  .me-sm-2 {\n    margin-right: 0.5rem !important;\n  }\n  .me-sm-3 {\n    margin-right: 1rem !important;\n  }\n  .me-sm-4 {\n    margin-right: 1.5rem !important;\n  }\n  .me-sm-5 {\n    margin-right: 3rem !important;\n  }\n  .me-sm-auto {\n    margin-right: auto !important;\n  }\n  .mb-sm-0 {\n    margin-bottom: 0 !important;\n  }\n  .mb-sm-1 {\n    margin-bottom: 0.25rem !important;\n  }\n  .mb-sm-2 {\n    margin-bottom: 0.5rem !important;\n  }\n  .mb-sm-3 {\n    margin-bottom: 1rem !important;\n  }\n  .mb-sm-4 {\n    margin-bottom: 1.5rem !important;\n  }\n  .mb-sm-5 {\n    margin-bottom: 3rem !important;\n  }\n  .mb-sm-auto {\n    margin-bottom: auto !important;\n  }\n  .ms-sm-0 {\n    margin-left: 0 !important;\n  }\n  .ms-sm-1 {\n    margin-left: 0.25rem !important;\n  }\n  .ms-sm-2 {\n    margin-left: 0.5rem !important;\n  }\n  .ms-sm-3 {\n    margin-left: 1rem !important;\n  }\n  .ms-sm-4 {\n    margin-left: 1.5rem !important;\n  }\n  .ms-sm-5 {\n    margin-left: 3rem !important;\n  }\n  .ms-sm-auto {\n    margin-left: auto !important;\n  }\n  .p-sm-0 {\n    padding: 0 !important;\n  }\n  .p-sm-1 {\n    padding: 0.25rem !important;\n  }\n  .p-sm-2 {\n    padding: 0.5rem !important;\n  }\n  .p-sm-3 {\n    padding: 1rem !important;\n  }\n  .p-sm-4 {\n    padding: 1.5rem !important;\n  }\n  .p-sm-5 {\n    padding: 3rem !important;\n  }\n  .px-sm-0 {\n    padding-right: 0 !important;\n    padding-left: 0 !important;\n  }\n  .px-sm-1 {\n    padding-right: 0.25rem !important;\n    padding-left: 0.25rem !important;\n  }\n  .px-sm-2 {\n    padding-right: 0.5rem !important;\n    padding-left: 0.5rem !important;\n  }\n  .px-sm-3 {\n    padding-right: 1rem !important;\n    padding-left: 1rem !important;\n  }\n  .px-sm-4 {\n    padding-right: 1.5rem !important;\n    padding-left: 1.5rem !important;\n  }\n  .px-sm-5 {\n    padding-right: 3rem !important;\n    padding-left: 3rem !important;\n  }\n  .py-sm-0 {\n    padding-top: 0 !important;\n    padding-bottom: 0 !important;\n  }\n  .py-sm-1 {\n    padding-top: 0.25rem !important;\n    padding-bottom: 0.25rem !important;\n  }\n  .py-sm-2 {\n    padding-top: 0.5rem !important;\n    padding-bottom: 0.5rem !important;\n  }\n  .py-sm-3 {\n    padding-top: 1rem !important;\n    padding-bottom: 1rem !important;\n  }\n  .py-sm-4 {\n    padding-top: 1.5rem !important;\n    padding-bottom: 1.5rem !important;\n  }\n  .py-sm-5 {\n    padding-top: 3rem !important;\n    padding-bottom: 3rem !important;\n  }\n  .pt-sm-0 {\n    padding-top: 0 !important;\n  }\n  .pt-sm-1 {\n    padding-top: 0.25rem !important;\n  }\n  .pt-sm-2 {\n    padding-top: 0.5rem !important;\n  }\n  .pt-sm-3 {\n    padding-top: 1rem !important;\n  }\n  .pt-sm-4 {\n    padding-top: 1.5rem !important;\n  }\n  .pt-sm-5 {\n    padding-top: 3rem !important;\n  }\n  .pe-sm-0 {\n    padding-right: 0 !important;\n  }\n  .pe-sm-1 {\n    padding-right: 0.25rem !important;\n  }\n  .pe-sm-2 {\n    padding-right: 0.5rem !important;\n  }\n  .pe-sm-3 {\n    padding-right: 1rem !important;\n  }\n  .pe-sm-4 {\n    padding-right: 1.5rem !important;\n  }\n  .pe-sm-5 {\n    padding-right: 3rem !important;\n  }\n  .pb-sm-0 {\n    padding-bottom: 0 !important;\n  }\n  .pb-sm-1 {\n    padding-bottom: 0.25rem !important;\n  }\n  .pb-sm-2 {\n    padding-bottom: 0.5rem !important;\n  }\n  .pb-sm-3 {\n    padding-bottom: 1rem !important;\n  }\n  .pb-sm-4 {\n    padding-bottom: 1.5rem !important;\n  }\n  .pb-sm-5 {\n    padding-bottom: 3rem !important;\n  }\n  .ps-sm-0 {\n    padding-left: 0 !important;\n  }\n  .ps-sm-1 {\n    padding-left: 0.25rem !important;\n  }\n  .ps-sm-2 {\n    padding-left: 0.5rem !important;\n  }\n  .ps-sm-3 {\n    padding-left: 1rem !important;\n  }\n  .ps-sm-4 {\n    padding-left: 1.5rem !important;\n  }\n  .ps-sm-5 {\n    padding-left: 3rem !important;\n  }\n  .text-sm-start {\n    text-align: left !important;\n  }\n  .text-sm-end {\n    text-align: right !important;\n  }\n  .text-sm-center {\n    text-align: center !important;\n  }\n}\n\n@media (min-width: 768px) {\n  .float-md-start {\n    float: left !important;\n  }\n  .float-md-end {\n    float: right !important;\n  }\n  .float-md-none {\n    float: none !important;\n  }\n  .d-md-inline {\n    display: inline !important;\n  }\n  .d-md-inline-block {\n    display: inline-block !important;\n  }\n  .d-md-block {\n    display: block !important;\n  }\n  .d-md-grid {\n    display: grid !important;\n  }\n  .d-md-table {\n    display: table !important;\n  }\n  .d-md-table-row {\n    display: table-row !important;\n  }\n  .d-md-table-cell {\n    display: table-cell !important;\n  }\n  .d-md-flex {\n    display: -ms-flexbox !important;\n    display: flex !important;\n  }\n  .d-md-inline-flex {\n    display: -ms-inline-flexbox !important;\n    display: inline-flex !important;\n  }\n  .d-md-none {\n    display: none !important;\n  }\n  .flex-md-fill {\n    -ms-flex: 1 1 auto !important;\n    flex: 1 1 auto !important;\n  }\n  .flex-md-row {\n    -ms-flex-direction: row !important;\n    flex-direction: row !important;\n  }\n  .flex-md-column {\n    -ms-flex-direction: column !important;\n    flex-direction: column !important;\n  }\n  .flex-md-row-reverse {\n    -ms-flex-direction: row-reverse !important;\n    flex-direction: row-reverse !important;\n  }\n  .flex-md-column-reverse {\n    -ms-flex-direction: column-reverse !important;\n    flex-direction: column-reverse !important;\n  }\n  .flex-md-grow-0 {\n    -ms-flex-positive: 0 !important;\n    flex-grow: 0 !important;\n  }\n  .flex-md-grow-1 {\n    -ms-flex-positive: 1 !important;\n    flex-grow: 1 !important;\n  }\n  .flex-md-shrink-0 {\n    -ms-flex-negative: 0 !important;\n    flex-shrink: 0 !important;\n  }\n  .flex-md-shrink-1 {\n    -ms-flex-negative: 1 !important;\n    flex-shrink: 1 !important;\n  }\n  .flex-md-wrap {\n    -ms-flex-wrap: wrap !important;\n    flex-wrap: wrap !important;\n  }\n  .flex-md-nowrap {\n    -ms-flex-wrap: nowrap !important;\n    flex-wrap: nowrap !important;\n  }\n  .flex-md-wrap-reverse {\n    -ms-flex-wrap: wrap-reverse !important;\n    flex-wrap: wrap-reverse !important;\n  }\n  .gap-md-0 {\n    gap: 0 !important;\n  }\n  .gap-md-1 {\n    gap: 0.25rem !important;\n  }\n  .gap-md-2 {\n    gap: 0.5rem !important;\n  }\n  .gap-md-3 {\n    gap: 1rem !important;\n  }\n  .gap-md-4 {\n    gap: 1.5rem !important;\n  }\n  .gap-md-5 {\n    gap: 3rem !important;\n  }\n  .justify-content-md-start {\n    -ms-flex-pack: start !important;\n    justify-content: flex-start !important;\n  }\n  .justify-content-md-end {\n    -ms-flex-pack: end !important;\n    justify-content: flex-end !important;\n  }\n  .justify-content-md-center {\n    -ms-flex-pack: center !important;\n    justify-content: center !important;\n  }\n  .justify-content-md-between {\n    -ms-flex-pack: justify !important;\n    justify-content: space-between !important;\n  }\n  .justify-content-md-around {\n    -ms-flex-pack: distribute !important;\n    justify-content: space-around !important;\n  }\n  .justify-content-md-evenly {\n    -ms-flex-pack: space-evenly !important;\n    justify-content: space-evenly !important;\n  }\n  .align-items-md-start {\n    -ms-flex-align: start !important;\n    align-items: flex-start !important;\n  }\n  .align-items-md-end {\n    -ms-flex-align: end !important;\n    align-items: flex-end !important;\n  }\n  .align-items-md-center {\n    -ms-flex-align: center !important;\n    align-items: center !important;\n  }\n  .align-items-md-baseline {\n    -ms-flex-align: baseline !important;\n    align-items: baseline !important;\n  }\n  .align-items-md-stretch {\n    -ms-flex-align: stretch !important;\n    align-items: stretch !important;\n  }\n  .align-content-md-start {\n    -ms-flex-line-pack: start !important;\n    align-content: flex-start !important;\n  }\n  .align-content-md-end {\n    -ms-flex-line-pack: end !important;\n    align-content: flex-end !important;\n  }\n  .align-content-md-center {\n    -ms-flex-line-pack: center !important;\n    align-content: center !important;\n  }\n  .align-content-md-between {\n    -ms-flex-line-pack: justify !important;\n    align-content: space-between !important;\n  }\n  .align-content-md-around {\n    -ms-flex-line-pack: distribute !important;\n    align-content: space-around !important;\n  }\n  .align-content-md-stretch {\n    -ms-flex-line-pack: stretch !important;\n    align-content: stretch !important;\n  }\n  .align-self-md-auto {\n    -ms-flex-item-align: auto !important;\n    align-self: auto !important;\n  }\n  .align-self-md-start {\n    -ms-flex-item-align: start !important;\n    align-self: flex-start !important;\n  }\n  .align-self-md-end {\n    -ms-flex-item-align: end !important;\n    align-self: flex-end !important;\n  }\n  .align-self-md-center {\n    -ms-flex-item-align: center !important;\n    align-self: center !important;\n  }\n  .align-self-md-baseline {\n    -ms-flex-item-align: baseline !important;\n    align-self: baseline !important;\n  }\n  .align-self-md-stretch {\n    -ms-flex-item-align: stretch !important;\n    align-self: stretch !important;\n  }\n  .order-md-first {\n    -ms-flex-order: -1 !important;\n    order: -1 !important;\n  }\n  .order-md-0 {\n    -ms-flex-order: 0 !important;\n    order: 0 !important;\n  }\n  .order-md-1 {\n    -ms-flex-order: 1 !important;\n    order: 1 !important;\n  }\n  .order-md-2 {\n    -ms-flex-order: 2 !important;\n    order: 2 !important;\n  }\n  .order-md-3 {\n    -ms-flex-order: 3 !important;\n    order: 3 !important;\n  }\n  .order-md-4 {\n    -ms-flex-order: 4 !important;\n    order: 4 !important;\n  }\n  .order-md-5 {\n    -ms-flex-order: 5 !important;\n    order: 5 !important;\n  }\n  .order-md-last {\n    -ms-flex-order: 6 !important;\n    order: 6 !important;\n  }\n  .m-md-0 {\n    margin: 0 !important;\n  }\n  .m-md-1 {\n    margin: 0.25rem !important;\n  }\n  .m-md-2 {\n    margin: 0.5rem !important;\n  }\n  .m-md-3 {\n    margin: 1rem !important;\n  }\n  .m-md-4 {\n    margin: 1.5rem !important;\n  }\n  .m-md-5 {\n    margin: 3rem !important;\n  }\n  .m-md-auto {\n    margin: auto !important;\n  }\n  .mx-md-0 {\n    margin-right: 0 !important;\n    margin-left: 0 !important;\n  }\n  .mx-md-1 {\n    margin-right: 0.25rem !important;\n    margin-left: 0.25rem !important;\n  }\n  .mx-md-2 {\n    margin-right: 0.5rem !important;\n    margin-left: 0.5rem !important;\n  }\n  .mx-md-3 {\n    margin-right: 1rem !important;\n    margin-left: 1rem !important;\n  }\n  .mx-md-4 {\n    margin-right: 1.5rem !important;\n    margin-left: 1.5rem !important;\n  }\n  .mx-md-5 {\n    margin-right: 3rem !important;\n    margin-left: 3rem !important;\n  }\n  .mx-md-auto {\n    margin-right: auto !important;\n    margin-left: auto !important;\n  }\n  .my-md-0 {\n    margin-top: 0 !important;\n    margin-bottom: 0 !important;\n  }\n  .my-md-1 {\n    margin-top: 0.25rem !important;\n    margin-bottom: 0.25rem !important;\n  }\n  .my-md-2 {\n    margin-top: 0.5rem !important;\n    margin-bottom: 0.5rem !important;\n  }\n  .my-md-3 {\n    margin-top: 1rem !important;\n    margin-bottom: 1rem !important;\n  }\n  .my-md-4 {\n    margin-top: 1.5rem !important;\n    margin-bottom: 1.5rem !important;\n  }\n  .my-md-5 {\n    margin-top: 3rem !important;\n    margin-bottom: 3rem !important;\n  }\n  .my-md-auto {\n    margin-top: auto !important;\n    margin-bottom: auto !important;\n  }\n  .mt-md-0 {\n    margin-top: 0 !important;\n  }\n  .mt-md-1 {\n    margin-top: 0.25rem !important;\n  }\n  .mt-md-2 {\n    margin-top: 0.5rem !important;\n  }\n  .mt-md-3 {\n    margin-top: 1rem !important;\n  }\n  .mt-md-4 {\n    margin-top: 1.5rem !important;\n  }\n  .mt-md-5 {\n    margin-top: 3rem !important;\n  }\n  .mt-md-auto {\n    margin-top: auto !important;\n  }\n  .me-md-0 {\n    margin-right: 0 !important;\n  }\n  .me-md-1 {\n    margin-right: 0.25rem !important;\n  }\n  .me-md-2 {\n    margin-right: 0.5rem !important;\n  }\n  .me-md-3 {\n    margin-right: 1rem !important;\n  }\n  .me-md-4 {\n    margin-right: 1.5rem !important;\n  }\n  .me-md-5 {\n    margin-right: 3rem !important;\n  }\n  .me-md-auto {\n    margin-right: auto !important;\n  }\n  .mb-md-0 {\n    margin-bottom: 0 !important;\n  }\n  .mb-md-1 {\n    margin-bottom: 0.25rem !important;\n  }\n  .mb-md-2 {\n    margin-bottom: 0.5rem !important;\n  }\n  .mb-md-3 {\n    margin-bottom: 1rem !important;\n  }\n  .mb-md-4 {\n    margin-bottom: 1.5rem !important;\n  }\n  .mb-md-5 {\n    margin-bottom: 3rem !important;\n  }\n  .mb-md-auto {\n    margin-bottom: auto !important;\n  }\n  .ms-md-0 {\n    margin-left: 0 !important;\n  }\n  .ms-md-1 {\n    margin-left: 0.25rem !important;\n  }\n  .ms-md-2 {\n    margin-left: 0.5rem !important;\n  }\n  .ms-md-3 {\n    margin-left: 1rem !important;\n  }\n  .ms-md-4 {\n    margin-left: 1.5rem !important;\n  }\n  .ms-md-5 {\n    margin-left: 3rem !important;\n  }\n  .ms-md-auto {\n    margin-left: auto !important;\n  }\n  .p-md-0 {\n    padding: 0 !important;\n  }\n  .p-md-1 {\n    padding: 0.25rem !important;\n  }\n  .p-md-2 {\n    padding: 0.5rem !important;\n  }\n  .p-md-3 {\n    padding: 1rem !important;\n  }\n  .p-md-4 {\n    padding: 1.5rem !important;\n  }\n  .p-md-5 {\n    padding: 3rem !important;\n  }\n  .px-md-0 {\n    padding-right: 0 !important;\n    padding-left: 0 !important;\n  }\n  .px-md-1 {\n    padding-right: 0.25rem !important;\n    padding-left: 0.25rem !important;\n  }\n  .px-md-2 {\n    padding-right: 0.5rem !important;\n    padding-left: 0.5rem !important;\n  }\n  .px-md-3 {\n    padding-right: 1rem !important;\n    padding-left: 1rem !important;\n  }\n  .px-md-4 {\n    padding-right: 1.5rem !important;\n    padding-left: 1.5rem !important;\n  }\n  .px-md-5 {\n    padding-right: 3rem !important;\n    padding-left: 3rem !important;\n  }\n  .py-md-0 {\n    padding-top: 0 !important;\n    padding-bottom: 0 !important;\n  }\n  .py-md-1 {\n    padding-top: 0.25rem !important;\n    padding-bottom: 0.25rem !important;\n  }\n  .py-md-2 {\n    padding-top: 0.5rem !important;\n    padding-bottom: 0.5rem !important;\n  }\n  .py-md-3 {\n    padding-top: 1rem !important;\n    padding-bottom: 1rem !important;\n  }\n  .py-md-4 {\n    padding-top: 1.5rem !important;\n    padding-bottom: 1.5rem !important;\n  }\n  .py-md-5 {\n    padding-top: 3rem !important;\n    padding-bottom: 3rem !important;\n  }\n  .pt-md-0 {\n    padding-top: 0 !important;\n  }\n  .pt-md-1 {\n    padding-top: 0.25rem !important;\n  }\n  .pt-md-2 {\n    padding-top: 0.5rem !important;\n  }\n  .pt-md-3 {\n    padding-top: 1rem !important;\n  }\n  .pt-md-4 {\n    padding-top: 1.5rem !important;\n  }\n  .pt-md-5 {\n    padding-top: 3rem !important;\n  }\n  .pe-md-0 {\n    padding-right: 0 !important;\n  }\n  .pe-md-1 {\n    padding-right: 0.25rem !important;\n  }\n  .pe-md-2 {\n    padding-right: 0.5rem !important;\n  }\n  .pe-md-3 {\n    padding-right: 1rem !important;\n  }\n  .pe-md-4 {\n    padding-right: 1.5rem !important;\n  }\n  .pe-md-5 {\n    padding-right: 3rem !important;\n  }\n  .pb-md-0 {\n    padding-bottom: 0 !important;\n  }\n  .pb-md-1 {\n    padding-bottom: 0.25rem !important;\n  }\n  .pb-md-2 {\n    padding-bottom: 0.5rem !important;\n  }\n  .pb-md-3 {\n    padding-bottom: 1rem !important;\n  }\n  .pb-md-4 {\n    padding-bottom: 1.5rem !important;\n  }\n  .pb-md-5 {\n    padding-bottom: 3rem !important;\n  }\n  .ps-md-0 {\n    padding-left: 0 !important;\n  }\n  .ps-md-1 {\n    padding-left: 0.25rem !important;\n  }\n  .ps-md-2 {\n    padding-left: 0.5rem !important;\n  }\n  .ps-md-3 {\n    padding-left: 1rem !important;\n  }\n  .ps-md-4 {\n    padding-left: 1.5rem !important;\n  }\n  .ps-md-5 {\n    padding-left: 3rem !important;\n  }\n  .text-md-start {\n    text-align: left !important;\n  }\n  .text-md-end {\n    text-align: right !important;\n  }\n  .text-md-center {\n    text-align: center !important;\n  }\n}\n\n@media (min-width: 992px) {\n  .float-lg-start {\n    float: left !important;\n  }\n  .float-lg-end {\n    float: right !important;\n  }\n  .float-lg-none {\n    float: none !important;\n  }\n  .d-lg-inline {\n    display: inline !important;\n  }\n  .d-lg-inline-block {\n    display: inline-block !important;\n  }\n  .d-lg-block {\n    display: block !important;\n  }\n  .d-lg-grid {\n    display: grid !important;\n  }\n  .d-lg-table {\n    display: table !important;\n  }\n  .d-lg-table-row {\n    display: table-row !important;\n  }\n  .d-lg-table-cell {\n    display: table-cell !important;\n  }\n  .d-lg-flex {\n    display: -ms-flexbox !important;\n    display: flex !important;\n  }\n  .d-lg-inline-flex {\n    display: -ms-inline-flexbox !important;\n    display: inline-flex !important;\n  }\n  .d-lg-none {\n    display: none !important;\n  }\n  .flex-lg-fill {\n    -ms-flex: 1 1 auto !important;\n    flex: 1 1 auto !important;\n  }\n  .flex-lg-row {\n    -ms-flex-direction: row !important;\n    flex-direction: row !important;\n  }\n  .flex-lg-column {\n    -ms-flex-direction: column !important;\n    flex-direction: column !important;\n  }\n  .flex-lg-row-reverse {\n    -ms-flex-direction: row-reverse !important;\n    flex-direction: row-reverse !important;\n  }\n  .flex-lg-column-reverse {\n    -ms-flex-direction: column-reverse !important;\n    flex-direction: column-reverse !important;\n  }\n  .flex-lg-grow-0 {\n    -ms-flex-positive: 0 !important;\n    flex-grow: 0 !important;\n  }\n  .flex-lg-grow-1 {\n    -ms-flex-positive: 1 !important;\n    flex-grow: 1 !important;\n  }\n  .flex-lg-shrink-0 {\n    -ms-flex-negative: 0 !important;\n    flex-shrink: 0 !important;\n  }\n  .flex-lg-shrink-1 {\n    -ms-flex-negative: 1 !important;\n    flex-shrink: 1 !important;\n  }\n  .flex-lg-wrap {\n    -ms-flex-wrap: wrap !important;\n    flex-wrap: wrap !important;\n  }\n  .flex-lg-nowrap {\n    -ms-flex-wrap: nowrap !important;\n    flex-wrap: nowrap !important;\n  }\n  .flex-lg-wrap-reverse {\n    -ms-flex-wrap: wrap-reverse !important;\n    flex-wrap: wrap-reverse !important;\n  }\n  .gap-lg-0 {\n    gap: 0 !important;\n  }\n  .gap-lg-1 {\n    gap: 0.25rem !important;\n  }\n  .gap-lg-2 {\n    gap: 0.5rem !important;\n  }\n  .gap-lg-3 {\n    gap: 1rem !important;\n  }\n  .gap-lg-4 {\n    gap: 1.5rem !important;\n  }\n  .gap-lg-5 {\n    gap: 3rem !important;\n  }\n  .justify-content-lg-start {\n    -ms-flex-pack: start !important;\n    justify-content: flex-start !important;\n  }\n  .justify-content-lg-end {\n    -ms-flex-pack: end !important;\n    justify-content: flex-end !important;\n  }\n  .justify-content-lg-center {\n    -ms-flex-pack: center !important;\n    justify-content: center !important;\n  }\n  .justify-content-lg-between {\n    -ms-flex-pack: justify !important;\n    justify-content: space-between !important;\n  }\n  .justify-content-lg-around {\n    -ms-flex-pack: distribute !important;\n    justify-content: space-around !important;\n  }\n  .justify-content-lg-evenly {\n    -ms-flex-pack: space-evenly !important;\n    justify-content: space-evenly !important;\n  }\n  .align-items-lg-start {\n    -ms-flex-align: start !important;\n    align-items: flex-start !important;\n  }\n  .align-items-lg-end {\n    -ms-flex-align: end !important;\n    align-items: flex-end !important;\n  }\n  .align-items-lg-center {\n    -ms-flex-align: center !important;\n    align-items: center !important;\n  }\n  .align-items-lg-baseline {\n    -ms-flex-align: baseline !important;\n    align-items: baseline !important;\n  }\n  .align-items-lg-stretch {\n    -ms-flex-align: stretch !important;\n    align-items: stretch !important;\n  }\n  .align-content-lg-start {\n    -ms-flex-line-pack: start !important;\n    align-content: flex-start !important;\n  }\n  .align-content-lg-end {\n    -ms-flex-line-pack: end !important;\n    align-content: flex-end !important;\n  }\n  .align-content-lg-center {\n    -ms-flex-line-pack: center !important;\n    align-content: center !important;\n  }\n  .align-content-lg-between {\n    -ms-flex-line-pack: justify !important;\n    align-content: space-between !important;\n  }\n  .align-content-lg-around {\n    -ms-flex-line-pack: distribute !important;\n    align-content: space-around !important;\n  }\n  .align-content-lg-stretch {\n    -ms-flex-line-pack: stretch !important;\n    align-content: stretch !important;\n  }\n  .align-self-lg-auto {\n    -ms-flex-item-align: auto !important;\n    align-self: auto !important;\n  }\n  .align-self-lg-start {\n    -ms-flex-item-align: start !important;\n    align-self: flex-start !important;\n  }\n  .align-self-lg-end {\n    -ms-flex-item-align: end !important;\n    align-self: flex-end !important;\n  }\n  .align-self-lg-center {\n    -ms-flex-item-align: center !important;\n    align-self: center !important;\n  }\n  .align-self-lg-baseline {\n    -ms-flex-item-align: baseline !important;\n    align-self: baseline !important;\n  }\n  .align-self-lg-stretch {\n    -ms-flex-item-align: stretch !important;\n    align-self: stretch !important;\n  }\n  .order-lg-first {\n    -ms-flex-order: -1 !important;\n    order: -1 !important;\n  }\n  .order-lg-0 {\n    -ms-flex-order: 0 !important;\n    order: 0 !important;\n  }\n  .order-lg-1 {\n    -ms-flex-order: 1 !important;\n    order: 1 !important;\n  }\n  .order-lg-2 {\n    -ms-flex-order: 2 !important;\n    order: 2 !important;\n  }\n  .order-lg-3 {\n    -ms-flex-order: 3 !important;\n    order: 3 !important;\n  }\n  .order-lg-4 {\n    -ms-flex-order: 4 !important;\n    order: 4 !important;\n  }\n  .order-lg-5 {\n    -ms-flex-order: 5 !important;\n    order: 5 !important;\n  }\n  .order-lg-last {\n    -ms-flex-order: 6 !important;\n    order: 6 !important;\n  }\n  .m-lg-0 {\n    margin: 0 !important;\n  }\n  .m-lg-1 {\n    margin: 0.25rem !important;\n  }\n  .m-lg-2 {\n    margin: 0.5rem !important;\n  }\n  .m-lg-3 {\n    margin: 1rem !important;\n  }\n  .m-lg-4 {\n    margin: 1.5rem !important;\n  }\n  .m-lg-5 {\n    margin: 3rem !important;\n  }\n  .m-lg-auto {\n    margin: auto !important;\n  }\n  .mx-lg-0 {\n    margin-right: 0 !important;\n    margin-left: 0 !important;\n  }\n  .mx-lg-1 {\n    margin-right: 0.25rem !important;\n    margin-left: 0.25rem !important;\n  }\n  .mx-lg-2 {\n    margin-right: 0.5rem !important;\n    margin-left: 0.5rem !important;\n  }\n  .mx-lg-3 {\n    margin-right: 1rem !important;\n    margin-left: 1rem !important;\n  }\n  .mx-lg-4 {\n    margin-right: 1.5rem !important;\n    margin-left: 1.5rem !important;\n  }\n  .mx-lg-5 {\n    margin-right: 3rem !important;\n    margin-left: 3rem !important;\n  }\n  .mx-lg-auto {\n    margin-right: auto !important;\n    margin-left: auto !important;\n  }\n  .my-lg-0 {\n    margin-top: 0 !important;\n    margin-bottom: 0 !important;\n  }\n  .my-lg-1 {\n    margin-top: 0.25rem !important;\n    margin-bottom: 0.25rem !important;\n  }\n  .my-lg-2 {\n    margin-top: 0.5rem !important;\n    margin-bottom: 0.5rem !important;\n  }\n  .my-lg-3 {\n    margin-top: 1rem !important;\n    margin-bottom: 1rem !important;\n  }\n  .my-lg-4 {\n    margin-top: 1.5rem !important;\n    margin-bottom: 1.5rem !important;\n  }\n  .my-lg-5 {\n    margin-top: 3rem !important;\n    margin-bottom: 3rem !important;\n  }\n  .my-lg-auto {\n    margin-top: auto !important;\n    margin-bottom: auto !important;\n  }\n  .mt-lg-0 {\n    margin-top: 0 !important;\n  }\n  .mt-lg-1 {\n    margin-top: 0.25rem !important;\n  }\n  .mt-lg-2 {\n    margin-top: 0.5rem !important;\n  }\n  .mt-lg-3 {\n    margin-top: 1rem !important;\n  }\n  .mt-lg-4 {\n    margin-top: 1.5rem !important;\n  }\n  .mt-lg-5 {\n    margin-top: 3rem !important;\n  }\n  .mt-lg-auto {\n    margin-top: auto !important;\n  }\n  .me-lg-0 {\n    margin-right: 0 !important;\n  }\n  .me-lg-1 {\n    margin-right: 0.25rem !important;\n  }\n  .me-lg-2 {\n    margin-right: 0.5rem !important;\n  }\n  .me-lg-3 {\n    margin-right: 1rem !important;\n  }\n  .me-lg-4 {\n    margin-right: 1.5rem !important;\n  }\n  .me-lg-5 {\n    margin-right: 3rem !important;\n  }\n  .me-lg-auto {\n    margin-right: auto !important;\n  }\n  .mb-lg-0 {\n    margin-bottom: 0 !important;\n  }\n  .mb-lg-1 {\n    margin-bottom: 0.25rem !important;\n  }\n  .mb-lg-2 {\n    margin-bottom: 0.5rem !important;\n  }\n  .mb-lg-3 {\n    margin-bottom: 1rem !important;\n  }\n  .mb-lg-4 {\n    margin-bottom: 1.5rem !important;\n  }\n  .mb-lg-5 {\n    margin-bottom: 3rem !important;\n  }\n  .mb-lg-auto {\n    margin-bottom: auto !important;\n  }\n  .ms-lg-0 {\n    margin-left: 0 !important;\n  }\n  .ms-lg-1 {\n    margin-left: 0.25rem !important;\n  }\n  .ms-lg-2 {\n    margin-left: 0.5rem !important;\n  }\n  .ms-lg-3 {\n    margin-left: 1rem !important;\n  }\n  .ms-lg-4 {\n    margin-left: 1.5rem !important;\n  }\n  .ms-lg-5 {\n    margin-left: 3rem !important;\n  }\n  .ms-lg-auto {\n    margin-left: auto !important;\n  }\n  .p-lg-0 {\n    padding: 0 !important;\n  }\n  .p-lg-1 {\n    padding: 0.25rem !important;\n  }\n  .p-lg-2 {\n    padding: 0.5rem !important;\n  }\n  .p-lg-3 {\n    padding: 1rem !important;\n  }\n  .p-lg-4 {\n    padding: 1.5rem !important;\n  }\n  .p-lg-5 {\n    padding: 3rem !important;\n  }\n  .px-lg-0 {\n    padding-right: 0 !important;\n    padding-left: 0 !important;\n  }\n  .px-lg-1 {\n    padding-right: 0.25rem !important;\n    padding-left: 0.25rem !important;\n  }\n  .px-lg-2 {\n    padding-right: 0.5rem !important;\n    padding-left: 0.5rem !important;\n  }\n  .px-lg-3 {\n    padding-right: 1rem !important;\n    padding-left: 1rem !important;\n  }\n  .px-lg-4 {\n    padding-right: 1.5rem !important;\n    padding-left: 1.5rem !important;\n  }\n  .px-lg-5 {\n    padding-right: 3rem !important;\n    padding-left: 3rem !important;\n  }\n  .py-lg-0 {\n    padding-top: 0 !important;\n    padding-bottom: 0 !important;\n  }\n  .py-lg-1 {\n    padding-top: 0.25rem !important;\n    padding-bottom: 0.25rem !important;\n  }\n  .py-lg-2 {\n    padding-top: 0.5rem !important;\n    padding-bottom: 0.5rem !important;\n  }\n  .py-lg-3 {\n    padding-top: 1rem !important;\n    padding-bottom: 1rem !important;\n  }\n  .py-lg-4 {\n    padding-top: 1.5rem !important;\n    padding-bottom: 1.5rem !important;\n  }\n  .py-lg-5 {\n    padding-top: 3rem !important;\n    padding-bottom: 3rem !important;\n  }\n  .pt-lg-0 {\n    padding-top: 0 !important;\n  }\n  .pt-lg-1 {\n    padding-top: 0.25rem !important;\n  }\n  .pt-lg-2 {\n    padding-top: 0.5rem !important;\n  }\n  .pt-lg-3 {\n    padding-top: 1rem !important;\n  }\n  .pt-lg-4 {\n    padding-top: 1.5rem !important;\n  }\n  .pt-lg-5 {\n    padding-top: 3rem !important;\n  }\n  .pe-lg-0 {\n    padding-right: 0 !important;\n  }\n  .pe-lg-1 {\n    padding-right: 0.25rem !important;\n  }\n  .pe-lg-2 {\n    padding-right: 0.5rem !important;\n  }\n  .pe-lg-3 {\n    padding-right: 1rem !important;\n  }\n  .pe-lg-4 {\n    padding-right: 1.5rem !important;\n  }\n  .pe-lg-5 {\n    padding-right: 3rem !important;\n  }\n  .pb-lg-0 {\n    padding-bottom: 0 !important;\n  }\n  .pb-lg-1 {\n    padding-bottom: 0.25rem !important;\n  }\n  .pb-lg-2 {\n    padding-bottom: 0.5rem !important;\n  }\n  .pb-lg-3 {\n    padding-bottom: 1rem !important;\n  }\n  .pb-lg-4 {\n    padding-bottom: 1.5rem !important;\n  }\n  .pb-lg-5 {\n    padding-bottom: 3rem !important;\n  }\n  .ps-lg-0 {\n    padding-left: 0 !important;\n  }\n  .ps-lg-1 {\n    padding-left: 0.25rem !important;\n  }\n  .ps-lg-2 {\n    padding-left: 0.5rem !important;\n  }\n  .ps-lg-3 {\n    padding-left: 1rem !important;\n  }\n  .ps-lg-4 {\n    padding-left: 1.5rem !important;\n  }\n  .ps-lg-5 {\n    padding-left: 3rem !important;\n  }\n  .text-lg-start {\n    text-align: left !important;\n  }\n  .text-lg-end {\n    text-align: right !important;\n  }\n  .text-lg-center {\n    text-align: center !important;\n  }\n}\n\n@media (min-width: 1200px) {\n  .float-xl-start {\n    float: left !important;\n  }\n  .float-xl-end {\n    float: right !important;\n  }\n  .float-xl-none {\n    float: none !important;\n  }\n  .d-xl-inline {\n    display: inline !important;\n  }\n  .d-xl-inline-block {\n    display: inline-block !important;\n  }\n  .d-xl-block {\n    display: block !important;\n  }\n  .d-xl-grid {\n    display: grid !important;\n  }\n  .d-xl-table {\n    display: table !important;\n  }\n  .d-xl-table-row {\n    display: table-row !important;\n  }\n  .d-xl-table-cell {\n    display: table-cell !important;\n  }\n  .d-xl-flex {\n    display: -ms-flexbox !important;\n    display: flex !important;\n  }\n  .d-xl-inline-flex {\n    display: -ms-inline-flexbox !important;\n    display: inline-flex !important;\n  }\n  .d-xl-none {\n    display: none !important;\n  }\n  .flex-xl-fill {\n    -ms-flex: 1 1 auto !important;\n    flex: 1 1 auto !important;\n  }\n  .flex-xl-row {\n    -ms-flex-direction: row !important;\n    flex-direction: row !important;\n  }\n  .flex-xl-column {\n    -ms-flex-direction: column !important;\n    flex-direction: column !important;\n  }\n  .flex-xl-row-reverse {\n    -ms-flex-direction: row-reverse !important;\n    flex-direction: row-reverse !important;\n  }\n  .flex-xl-column-reverse {\n    -ms-flex-direction: column-reverse !important;\n    flex-direction: column-reverse !important;\n  }\n  .flex-xl-grow-0 {\n    -ms-flex-positive: 0 !important;\n    flex-grow: 0 !important;\n  }\n  .flex-xl-grow-1 {\n    -ms-flex-positive: 1 !important;\n    flex-grow: 1 !important;\n  }\n  .flex-xl-shrink-0 {\n    -ms-flex-negative: 0 !important;\n    flex-shrink: 0 !important;\n  }\n  .flex-xl-shrink-1 {\n    -ms-flex-negative: 1 !important;\n    flex-shrink: 1 !important;\n  }\n  .flex-xl-wrap {\n    -ms-flex-wrap: wrap !important;\n    flex-wrap: wrap !important;\n  }\n  .flex-xl-nowrap {\n    -ms-flex-wrap: nowrap !important;\n    flex-wrap: nowrap !important;\n  }\n  .flex-xl-wrap-reverse {\n    -ms-flex-wrap: wrap-reverse !important;\n    flex-wrap: wrap-reverse !important;\n  }\n  .gap-xl-0 {\n    gap: 0 !important;\n  }\n  .gap-xl-1 {\n    gap: 0.25rem !important;\n  }\n  .gap-xl-2 {\n    gap: 0.5rem !important;\n  }\n  .gap-xl-3 {\n    gap: 1rem !important;\n  }\n  .gap-xl-4 {\n    gap: 1.5rem !important;\n  }\n  .gap-xl-5 {\n    gap: 3rem !important;\n  }\n  .justify-content-xl-start {\n    -ms-flex-pack: start !important;\n    justify-content: flex-start !important;\n  }\n  .justify-content-xl-end {\n    -ms-flex-pack: end !important;\n    justify-content: flex-end !important;\n  }\n  .justify-content-xl-center {\n    -ms-flex-pack: center !important;\n    justify-content: center !important;\n  }\n  .justify-content-xl-between {\n    -ms-flex-pack: justify !important;\n    justify-content: space-between !important;\n  }\n  .justify-content-xl-around {\n    -ms-flex-pack: distribute !important;\n    justify-content: space-around !important;\n  }\n  .justify-content-xl-evenly {\n    -ms-flex-pack: space-evenly !important;\n    justify-content: space-evenly !important;\n  }\n  .align-items-xl-start {\n    -ms-flex-align: start !important;\n    align-items: flex-start !important;\n  }\n  .align-items-xl-end {\n    -ms-flex-align: end !important;\n    align-items: flex-end !important;\n  }\n  .align-items-xl-center {\n    -ms-flex-align: center !important;\n    align-items: center !important;\n  }\n  .align-items-xl-baseline {\n    -ms-flex-align: baseline !important;\n    align-items: baseline !important;\n  }\n  .align-items-xl-stretch {\n    -ms-flex-align: stretch !important;\n    align-items: stretch !important;\n  }\n  .align-content-xl-start {\n    -ms-flex-line-pack: start !important;\n    align-content: flex-start !important;\n  }\n  .align-content-xl-end {\n    -ms-flex-line-pack: end !important;\n    align-content: flex-end !important;\n  }\n  .align-content-xl-center {\n    -ms-flex-line-pack: center !important;\n    align-content: center !important;\n  }\n  .align-content-xl-between {\n    -ms-flex-line-pack: justify !important;\n    align-content: space-between !important;\n  }\n  .align-content-xl-around {\n    -ms-flex-line-pack: distribute !important;\n    align-content: space-around !important;\n  }\n  .align-content-xl-stretch {\n    -ms-flex-line-pack: stretch !important;\n    align-content: stretch !important;\n  }\n  .align-self-xl-auto {\n    -ms-flex-item-align: auto !important;\n    align-self: auto !important;\n  }\n  .align-self-xl-start {\n    -ms-flex-item-align: start !important;\n    align-self: flex-start !important;\n  }\n  .align-self-xl-end {\n    -ms-flex-item-align: end !important;\n    align-self: flex-end !important;\n  }\n  .align-self-xl-center {\n    -ms-flex-item-align: center !important;\n    align-self: center !important;\n  }\n  .align-self-xl-baseline {\n    -ms-flex-item-align: baseline !important;\n    align-self: baseline !important;\n  }\n  .align-self-xl-stretch {\n    -ms-flex-item-align: stretch !important;\n    align-self: stretch !important;\n  }\n  .order-xl-first {\n    -ms-flex-order: -1 !important;\n    order: -1 !important;\n  }\n  .order-xl-0 {\n    -ms-flex-order: 0 !important;\n    order: 0 !important;\n  }\n  .order-xl-1 {\n    -ms-flex-order: 1 !important;\n    order: 1 !important;\n  }\n  .order-xl-2 {\n    -ms-flex-order: 2 !important;\n    order: 2 !important;\n  }\n  .order-xl-3 {\n    -ms-flex-order: 3 !important;\n    order: 3 !important;\n  }\n  .order-xl-4 {\n    -ms-flex-order: 4 !important;\n    order: 4 !important;\n  }\n  .order-xl-5 {\n    -ms-flex-order: 5 !important;\n    order: 5 !important;\n  }\n  .order-xl-last {\n    -ms-flex-order: 6 !important;\n    order: 6 !important;\n  }\n  .m-xl-0 {\n    margin: 0 !important;\n  }\n  .m-xl-1 {\n    margin: 0.25rem !important;\n  }\n  .m-xl-2 {\n    margin: 0.5rem !important;\n  }\n  .m-xl-3 {\n    margin: 1rem !important;\n  }\n  .m-xl-4 {\n    margin: 1.5rem !important;\n  }\n  .m-xl-5 {\n    margin: 3rem !important;\n  }\n  .m-xl-auto {\n    margin: auto !important;\n  }\n  .mx-xl-0 {\n    margin-right: 0 !important;\n    margin-left: 0 !important;\n  }\n  .mx-xl-1 {\n    margin-right: 0.25rem !important;\n    margin-left: 0.25rem !important;\n  }\n  .mx-xl-2 {\n    margin-right: 0.5rem !important;\n    margin-left: 0.5rem !important;\n  }\n  .mx-xl-3 {\n    margin-right: 1rem !important;\n    margin-left: 1rem !important;\n  }\n  .mx-xl-4 {\n    margin-right: 1.5rem !important;\n    margin-left: 1.5rem !important;\n  }\n  .mx-xl-5 {\n    margin-right: 3rem !important;\n    margin-left: 3rem !important;\n  }\n  .mx-xl-auto {\n    margin-right: auto !important;\n    margin-left: auto !important;\n  }\n  .my-xl-0 {\n    margin-top: 0 !important;\n    margin-bottom: 0 !important;\n  }\n  .my-xl-1 {\n    margin-top: 0.25rem !important;\n    margin-bottom: 0.25rem !important;\n  }\n  .my-xl-2 {\n    margin-top: 0.5rem !important;\n    margin-bottom: 0.5rem !important;\n  }\n  .my-xl-3 {\n    margin-top: 1rem !important;\n    margin-bottom: 1rem !important;\n  }\n  .my-xl-4 {\n    margin-top: 1.5rem !important;\n    margin-bottom: 1.5rem !important;\n  }\n  .my-xl-5 {\n    margin-top: 3rem !important;\n    margin-bottom: 3rem !important;\n  }\n  .my-xl-auto {\n    margin-top: auto !important;\n    margin-bottom: auto !important;\n  }\n  .mt-xl-0 {\n    margin-top: 0 !important;\n  }\n  .mt-xl-1 {\n    margin-top: 0.25rem !important;\n  }\n  .mt-xl-2 {\n    margin-top: 0.5rem !important;\n  }\n  .mt-xl-3 {\n    margin-top: 1rem !important;\n  }\n  .mt-xl-4 {\n    margin-top: 1.5rem !important;\n  }\n  .mt-xl-5 {\n    margin-top: 3rem !important;\n  }\n  .mt-xl-auto {\n    margin-top: auto !important;\n  }\n  .me-xl-0 {\n    margin-right: 0 !important;\n  }\n  .me-xl-1 {\n    margin-right: 0.25rem !important;\n  }\n  .me-xl-2 {\n    margin-right: 0.5rem !important;\n  }\n  .me-xl-3 {\n    margin-right: 1rem !important;\n  }\n  .me-xl-4 {\n    margin-right: 1.5rem !important;\n  }\n  .me-xl-5 {\n    margin-right: 3rem !important;\n  }\n  .me-xl-auto {\n    margin-right: auto !important;\n  }\n  .mb-xl-0 {\n    margin-bottom: 0 !important;\n  }\n  .mb-xl-1 {\n    margin-bottom: 0.25rem !important;\n  }\n  .mb-xl-2 {\n    margin-bottom: 0.5rem !important;\n  }\n  .mb-xl-3 {\n    margin-bottom: 1rem !important;\n  }\n  .mb-xl-4 {\n    margin-bottom: 1.5rem !important;\n  }\n  .mb-xl-5 {\n    margin-bottom: 3rem !important;\n  }\n  .mb-xl-auto {\n    margin-bottom: auto !important;\n  }\n  .ms-xl-0 {\n    margin-left: 0 !important;\n  }\n  .ms-xl-1 {\n    margin-left: 0.25rem !important;\n  }\n  .ms-xl-2 {\n    margin-left: 0.5rem !important;\n  }\n  .ms-xl-3 {\n    margin-left: 1rem !important;\n  }\n  .ms-xl-4 {\n    margin-left: 1.5rem !important;\n  }\n  .ms-xl-5 {\n    margin-left: 3rem !important;\n  }\n  .ms-xl-auto {\n    margin-left: auto !important;\n  }\n  .p-xl-0 {\n    padding: 0 !important;\n  }\n  .p-xl-1 {\n    padding: 0.25rem !important;\n  }\n  .p-xl-2 {\n    padding: 0.5rem !important;\n  }\n  .p-xl-3 {\n    padding: 1rem !important;\n  }\n  .p-xl-4 {\n    padding: 1.5rem !important;\n  }\n  .p-xl-5 {\n    padding: 3rem !important;\n  }\n  .px-xl-0 {\n    padding-right: 0 !important;\n    padding-left: 0 !important;\n  }\n  .px-xl-1 {\n    padding-right: 0.25rem !important;\n    padding-left: 0.25rem !important;\n  }\n  .px-xl-2 {\n    padding-right: 0.5rem !important;\n    padding-left: 0.5rem !important;\n  }\n  .px-xl-3 {\n    padding-right: 1rem !important;\n    padding-left: 1rem !important;\n  }\n  .px-xl-4 {\n    padding-right: 1.5rem !important;\n    padding-left: 1.5rem !important;\n  }\n  .px-xl-5 {\n    padding-right: 3rem !important;\n    padding-left: 3rem !important;\n  }\n  .py-xl-0 {\n    padding-top: 0 !important;\n    padding-bottom: 0 !important;\n  }\n  .py-xl-1 {\n    padding-top: 0.25rem !important;\n    padding-bottom: 0.25rem !important;\n  }\n  .py-xl-2 {\n    padding-top: 0.5rem !important;\n    padding-bottom: 0.5rem !important;\n  }\n  .py-xl-3 {\n    padding-top: 1rem !important;\n    padding-bottom: 1rem !important;\n  }\n  .py-xl-4 {\n    padding-top: 1.5rem !important;\n    padding-bottom: 1.5rem !important;\n  }\n  .py-xl-5 {\n    padding-top: 3rem !important;\n    padding-bottom: 3rem !important;\n  }\n  .pt-xl-0 {\n    padding-top: 0 !important;\n  }\n  .pt-xl-1 {\n    padding-top: 0.25rem !important;\n  }\n  .pt-xl-2 {\n    padding-top: 0.5rem !important;\n  }\n  .pt-xl-3 {\n    padding-top: 1rem !important;\n  }\n  .pt-xl-4 {\n    padding-top: 1.5rem !important;\n  }\n  .pt-xl-5 {\n    padding-top: 3rem !important;\n  }\n  .pe-xl-0 {\n    padding-right: 0 !important;\n  }\n  .pe-xl-1 {\n    padding-right: 0.25rem !important;\n  }\n  .pe-xl-2 {\n    padding-right: 0.5rem !important;\n  }\n  .pe-xl-3 {\n    padding-right: 1rem !important;\n  }\n  .pe-xl-4 {\n    padding-right: 1.5rem !important;\n  }\n  .pe-xl-5 {\n    padding-right: 3rem !important;\n  }\n  .pb-xl-0 {\n    padding-bottom: 0 !important;\n  }\n  .pb-xl-1 {\n    padding-bottom: 0.25rem !important;\n  }\n  .pb-xl-2 {\n    padding-bottom: 0.5rem !important;\n  }\n  .pb-xl-3 {\n    padding-bottom: 1rem !important;\n  }\n  .pb-xl-4 {\n    padding-bottom: 1.5rem !important;\n  }\n  .pb-xl-5 {\n    padding-bottom: 3rem !important;\n  }\n  .ps-xl-0 {\n    padding-left: 0 !important;\n  }\n  .ps-xl-1 {\n    padding-left: 0.25rem !important;\n  }\n  .ps-xl-2 {\n    padding-left: 0.5rem !important;\n  }\n  .ps-xl-3 {\n    padding-left: 1rem !important;\n  }\n  .ps-xl-4 {\n    padding-left: 1.5rem !important;\n  }\n  .ps-xl-5 {\n    padding-left: 3rem !important;\n  }\n  .text-xl-start {\n    text-align: left !important;\n  }\n  .text-xl-end {\n    text-align: right !important;\n  }\n  .text-xl-center {\n    text-align: center !important;\n  }\n}\n\n@media (min-width: 1400px) {\n  .float-xxl-start {\n    float: left !important;\n  }\n  .float-xxl-end {\n    float: right !important;\n  }\n  .float-xxl-none {\n    float: none !important;\n  }\n  .d-xxl-inline {\n    display: inline !important;\n  }\n  .d-xxl-inline-block {\n    display: inline-block !important;\n  }\n  .d-xxl-block {\n    display: block !important;\n  }\n  .d-xxl-grid {\n    display: grid !important;\n  }\n  .d-xxl-table {\n    display: table !important;\n  }\n  .d-xxl-table-row {\n    display: table-row !important;\n  }\n  .d-xxl-table-cell {\n    display: table-cell !important;\n  }\n  .d-xxl-flex {\n    display: -ms-flexbox !important;\n    display: flex !important;\n  }\n  .d-xxl-inline-flex {\n    display: -ms-inline-flexbox !important;\n    display: inline-flex !important;\n  }\n  .d-xxl-none {\n    display: none !important;\n  }\n  .flex-xxl-fill {\n    -ms-flex: 1 1 auto !important;\n    flex: 1 1 auto !important;\n  }\n  .flex-xxl-row {\n    -ms-flex-direction: row !important;\n    flex-direction: row !important;\n  }\n  .flex-xxl-column {\n    -ms-flex-direction: column !important;\n    flex-direction: column !important;\n  }\n  .flex-xxl-row-reverse {\n    -ms-flex-direction: row-reverse !important;\n    flex-direction: row-reverse !important;\n  }\n  .flex-xxl-column-reverse {\n    -ms-flex-direction: column-reverse !important;\n    flex-direction: column-reverse !important;\n  }\n  .flex-xxl-grow-0 {\n    -ms-flex-positive: 0 !important;\n    flex-grow: 0 !important;\n  }\n  .flex-xxl-grow-1 {\n    -ms-flex-positive: 1 !important;\n    flex-grow: 1 !important;\n  }\n  .flex-xxl-shrink-0 {\n    -ms-flex-negative: 0 !important;\n    flex-shrink: 0 !important;\n  }\n  .flex-xxl-shrink-1 {\n    -ms-flex-negative: 1 !important;\n    flex-shrink: 1 !important;\n  }\n  .flex-xxl-wrap {\n    -ms-flex-wrap: wrap !important;\n    flex-wrap: wrap !important;\n  }\n  .flex-xxl-nowrap {\n    -ms-flex-wrap: nowrap !important;\n    flex-wrap: nowrap !important;\n  }\n  .flex-xxl-wrap-reverse {\n    -ms-flex-wrap: wrap-reverse !important;\n    flex-wrap: wrap-reverse !important;\n  }\n  .gap-xxl-0 {\n    gap: 0 !important;\n  }\n  .gap-xxl-1 {\n    gap: 0.25rem !important;\n  }\n  .gap-xxl-2 {\n    gap: 0.5rem !important;\n  }\n  .gap-xxl-3 {\n    gap: 1rem !important;\n  }\n  .gap-xxl-4 {\n    gap: 1.5rem !important;\n  }\n  .gap-xxl-5 {\n    gap: 3rem !important;\n  }\n  .justify-content-xxl-start {\n    -ms-flex-pack: start !important;\n    justify-content: flex-start !important;\n  }\n  .justify-content-xxl-end {\n    -ms-flex-pack: end !important;\n    justify-content: flex-end !important;\n  }\n  .justify-content-xxl-center {\n    -ms-flex-pack: center !important;\n    justify-content: center !important;\n  }\n  .justify-content-xxl-between {\n    -ms-flex-pack: justify !important;\n    justify-content: space-between !important;\n  }\n  .justify-content-xxl-around {\n    -ms-flex-pack: distribute !important;\n    justify-content: space-around !important;\n  }\n  .justify-content-xxl-evenly {\n    -ms-flex-pack: space-evenly !important;\n    justify-content: space-evenly !important;\n  }\n  .align-items-xxl-start {\n    -ms-flex-align: start !important;\n    align-items: flex-start !important;\n  }\n  .align-items-xxl-end {\n    -ms-flex-align: end !important;\n    align-items: flex-end !important;\n  }\n  .align-items-xxl-center {\n    -ms-flex-align: center !important;\n    align-items: center !important;\n  }\n  .align-items-xxl-baseline {\n    -ms-flex-align: baseline !important;\n    align-items: baseline !important;\n  }\n  .align-items-xxl-stretch {\n    -ms-flex-align: stretch !important;\n    align-items: stretch !important;\n  }\n  .align-content-xxl-start {\n    -ms-flex-line-pack: start !important;\n    align-content: flex-start !important;\n  }\n  .align-content-xxl-end {\n    -ms-flex-line-pack: end !important;\n    align-content: flex-end !important;\n  }\n  .align-content-xxl-center {\n    -ms-flex-line-pack: center !important;\n    align-content: center !important;\n  }\n  .align-content-xxl-between {\n    -ms-flex-line-pack: justify !important;\n    align-content: space-between !important;\n  }\n  .align-content-xxl-around {\n    -ms-flex-line-pack: distribute !important;\n    align-content: space-around !important;\n  }\n  .align-content-xxl-stretch {\n    -ms-flex-line-pack: stretch !important;\n    align-content: stretch !important;\n  }\n  .align-self-xxl-auto {\n    -ms-flex-item-align: auto !important;\n    align-self: auto !important;\n  }\n  .align-self-xxl-start {\n    -ms-flex-item-align: start !important;\n    align-self: flex-start !important;\n  }\n  .align-self-xxl-end {\n    -ms-flex-item-align: end !important;\n    align-self: flex-end !important;\n  }\n  .align-self-xxl-center {\n    -ms-flex-item-align: center !important;\n    align-self: center !important;\n  }\n  .align-self-xxl-baseline {\n    -ms-flex-item-align: baseline !important;\n    align-self: baseline !important;\n  }\n  .align-self-xxl-stretch {\n    -ms-flex-item-align: stretch !important;\n    align-self: stretch !important;\n  }\n  .order-xxl-first {\n    -ms-flex-order: -1 !important;\n    order: -1 !important;\n  }\n  .order-xxl-0 {\n    -ms-flex-order: 0 !important;\n    order: 0 !important;\n  }\n  .order-xxl-1 {\n    -ms-flex-order: 1 !important;\n    order: 1 !important;\n  }\n  .order-xxl-2 {\n    -ms-flex-order: 2 !important;\n    order: 2 !important;\n  }\n  .order-xxl-3 {\n    -ms-flex-order: 3 !important;\n    order: 3 !important;\n  }\n  .order-xxl-4 {\n    -ms-flex-order: 4 !important;\n    order: 4 !important;\n  }\n  .order-xxl-5 {\n    -ms-flex-order: 5 !important;\n    order: 5 !important;\n  }\n  .order-xxl-last {\n    -ms-flex-order: 6 !important;\n    order: 6 !important;\n  }\n  .m-xxl-0 {\n    margin: 0 !important;\n  }\n  .m-xxl-1 {\n    margin: 0.25rem !important;\n  }\n  .m-xxl-2 {\n    margin: 0.5rem !important;\n  }\n  .m-xxl-3 {\n    margin: 1rem !important;\n  }\n  .m-xxl-4 {\n    margin: 1.5rem !important;\n  }\n  .m-xxl-5 {\n    margin: 3rem !important;\n  }\n  .m-xxl-auto {\n    margin: auto !important;\n  }\n  .mx-xxl-0 {\n    margin-right: 0 !important;\n    margin-left: 0 !important;\n  }\n  .mx-xxl-1 {\n    margin-right: 0.25rem !important;\n    margin-left: 0.25rem !important;\n  }\n  .mx-xxl-2 {\n    margin-right: 0.5rem !important;\n    margin-left: 0.5rem !important;\n  }\n  .mx-xxl-3 {\n    margin-right: 1rem !important;\n    margin-left: 1rem !important;\n  }\n  .mx-xxl-4 {\n    margin-right: 1.5rem !important;\n    margin-left: 1.5rem !important;\n  }\n  .mx-xxl-5 {\n    margin-right: 3rem !important;\n    margin-left: 3rem !important;\n  }\n  .mx-xxl-auto {\n    margin-right: auto !important;\n    margin-left: auto !important;\n  }\n  .my-xxl-0 {\n    margin-top: 0 !important;\n    margin-bottom: 0 !important;\n  }\n  .my-xxl-1 {\n    margin-top: 0.25rem !important;\n    margin-bottom: 0.25rem !important;\n  }\n  .my-xxl-2 {\n    margin-top: 0.5rem !important;\n    margin-bottom: 0.5rem !important;\n  }\n  .my-xxl-3 {\n    margin-top: 1rem !important;\n    margin-bottom: 1rem !important;\n  }\n  .my-xxl-4 {\n    margin-top: 1.5rem !important;\n    margin-bottom: 1.5rem !important;\n  }\n  .my-xxl-5 {\n    margin-top: 3rem !important;\n    margin-bottom: 3rem !important;\n  }\n  .my-xxl-auto {\n    margin-top: auto !important;\n    margin-bottom: auto !important;\n  }\n  .mt-xxl-0 {\n    margin-top: 0 !important;\n  }\n  .mt-xxl-1 {\n    margin-top: 0.25rem !important;\n  }\n  .mt-xxl-2 {\n    margin-top: 0.5rem !important;\n  }\n  .mt-xxl-3 {\n    margin-top: 1rem !important;\n  }\n  .mt-xxl-4 {\n    margin-top: 1.5rem !important;\n  }\n  .mt-xxl-5 {\n    margin-top: 3rem !important;\n  }\n  .mt-xxl-auto {\n    margin-top: auto !important;\n  }\n  .me-xxl-0 {\n    margin-right: 0 !important;\n  }\n  .me-xxl-1 {\n    margin-right: 0.25rem !important;\n  }\n  .me-xxl-2 {\n    margin-right: 0.5rem !important;\n  }\n  .me-xxl-3 {\n    margin-right: 1rem !important;\n  }\n  .me-xxl-4 {\n    margin-right: 1.5rem !important;\n  }\n  .me-xxl-5 {\n    margin-right: 3rem !important;\n  }\n  .me-xxl-auto {\n    margin-right: auto !important;\n  }\n  .mb-xxl-0 {\n    margin-bottom: 0 !important;\n  }\n  .mb-xxl-1 {\n    margin-bottom: 0.25rem !important;\n  }\n  .mb-xxl-2 {\n    margin-bottom: 0.5rem !important;\n  }\n  .mb-xxl-3 {\n    margin-bottom: 1rem !important;\n  }\n  .mb-xxl-4 {\n    margin-bottom: 1.5rem !important;\n  }\n  .mb-xxl-5 {\n    margin-bottom: 3rem !important;\n  }\n  .mb-xxl-auto {\n    margin-bottom: auto !important;\n  }\n  .ms-xxl-0 {\n    margin-left: 0 !important;\n  }\n  .ms-xxl-1 {\n    margin-left: 0.25rem !important;\n  }\n  .ms-xxl-2 {\n    margin-left: 0.5rem !important;\n  }\n  .ms-xxl-3 {\n    margin-left: 1rem !important;\n  }\n  .ms-xxl-4 {\n    margin-left: 1.5rem !important;\n  }\n  .ms-xxl-5 {\n    margin-left: 3rem !important;\n  }\n  .ms-xxl-auto {\n    margin-left: auto !important;\n  }\n  .p-xxl-0 {\n    padding: 0 !important;\n  }\n  .p-xxl-1 {\n    padding: 0.25rem !important;\n  }\n  .p-xxl-2 {\n    padding: 0.5rem !important;\n  }\n  .p-xxl-3 {\n    padding: 1rem !important;\n  }\n  .p-xxl-4 {\n    padding: 1.5rem !important;\n  }\n  .p-xxl-5 {\n    padding: 3rem !important;\n  }\n  .px-xxl-0 {\n    padding-right: 0 !important;\n    padding-left: 0 !important;\n  }\n  .px-xxl-1 {\n    padding-right: 0.25rem !important;\n    padding-left: 0.25rem !important;\n  }\n  .px-xxl-2 {\n    padding-right: 0.5rem !important;\n    padding-left: 0.5rem !important;\n  }\n  .px-xxl-3 {\n    padding-right: 1rem !important;\n    padding-left: 1rem !important;\n  }\n  .px-xxl-4 {\n    padding-right: 1.5rem !important;\n    padding-left: 1.5rem !important;\n  }\n  .px-xxl-5 {\n    padding-right: 3rem !important;\n    padding-left: 3rem !important;\n  }\n  .py-xxl-0 {\n    padding-top: 0 !important;\n    padding-bottom: 0 !important;\n  }\n  .py-xxl-1 {\n    padding-top: 0.25rem !important;\n    padding-bottom: 0.25rem !important;\n  }\n  .py-xxl-2 {\n    padding-top: 0.5rem !important;\n    padding-bottom: 0.5rem !important;\n  }\n  .py-xxl-3 {\n    padding-top: 1rem !important;\n    padding-bottom: 1rem !important;\n  }\n  .py-xxl-4 {\n    padding-top: 1.5rem !important;\n    padding-bottom: 1.5rem !important;\n  }\n  .py-xxl-5 {\n    padding-top: 3rem !important;\n    padding-bottom: 3rem !important;\n  }\n  .pt-xxl-0 {\n    padding-top: 0 !important;\n  }\n  .pt-xxl-1 {\n    padding-top: 0.25rem !important;\n  }\n  .pt-xxl-2 {\n    padding-top: 0.5rem !important;\n  }\n  .pt-xxl-3 {\n    padding-top: 1rem !important;\n  }\n  .pt-xxl-4 {\n    padding-top: 1.5rem !important;\n  }\n  .pt-xxl-5 {\n    padding-top: 3rem !important;\n  }\n  .pe-xxl-0 {\n    padding-right: 0 !important;\n  }\n  .pe-xxl-1 {\n    padding-right: 0.25rem !important;\n  }\n  .pe-xxl-2 {\n    padding-right: 0.5rem !important;\n  }\n  .pe-xxl-3 {\n    padding-right: 1rem !important;\n  }\n  .pe-xxl-4 {\n    padding-right: 1.5rem !important;\n  }\n  .pe-xxl-5 {\n    padding-right: 3rem !important;\n  }\n  .pb-xxl-0 {\n    padding-bottom: 0 !important;\n  }\n  .pb-xxl-1 {\n    padding-bottom: 0.25rem !important;\n  }\n  .pb-xxl-2 {\n    padding-bottom: 0.5rem !important;\n  }\n  .pb-xxl-3 {\n    padding-bottom: 1rem !important;\n  }\n  .pb-xxl-4 {\n    padding-bottom: 1.5rem !important;\n  }\n  .pb-xxl-5 {\n    padding-bottom: 3rem !important;\n  }\n  .ps-xxl-0 {\n    padding-left: 0 !important;\n  }\n  .ps-xxl-1 {\n    padding-left: 0.25rem !important;\n  }\n  .ps-xxl-2 {\n    padding-left: 0.5rem !important;\n  }\n  .ps-xxl-3 {\n    padding-left: 1rem !important;\n  }\n  .ps-xxl-4 {\n    padding-left: 1.5rem !important;\n  }\n  .ps-xxl-5 {\n    padding-left: 3rem !important;\n  }\n  .text-xxl-start {\n    text-align: left !important;\n  }\n  .text-xxl-end {\n    text-align: right !important;\n  }\n  .text-xxl-center {\n    text-align: center !important;\n  }\n}\n\n@media (min-width: 1200px) {\n  .fs-1 {\n    font-size: 2.5rem !important;\n  }\n  .fs-2 {\n    font-size: 2rem !important;\n  }\n  .fs-3 {\n    font-size: 1.75rem !important;\n  }\n  .fs-4 {\n    font-size: 1.5rem !important;\n  }\n}\n\n@media print {\n  .d-print-inline {\n    display: inline !important;\n  }\n  .d-print-inline-block {\n    display: inline-block !important;\n  }\n  .d-print-block {\n    display: block !important;\n  }\n  .d-print-grid {\n    display: grid !important;\n  }\n  .d-print-table {\n    display: table !important;\n  }\n  .d-print-table-row {\n    display: table-row !important;\n  }\n  .d-print-table-cell {\n    display: table-cell !important;\n  }\n  .d-print-flex {\n    display: -ms-flexbox !important;\n    display: flex !important;\n  }\n  .d-print-inline-flex {\n    display: -ms-inline-flexbox !important;\n    display: inline-flex !important;\n  }\n  .d-print-none {\n    display: none !important;\n  }\n}\n\n.bg-primary {\n  background-color: #3e3f3a !important;\n}\n\n.bg-dark {\n  background-color: #8e8c84 !important;\n}\n\n.bg-light {\n  background-color: #f8f5f0 !important;\n}\n\n.sandstone, .navbar .nav-link, .btn, .nav-tabs .nav-link, .nav-pills .nav-link, .breadcrumb, .pagination, .dropdown-menu .dropdown-item, .tooltip {\n  font-size: 13px;\n  line-height: 22px;\n  font-weight: 500;\n  text-transform: uppercase;\n}\n\n.navbar-form input,\n.navbar-form .form-control {\n  border: none;\n}\n\n.btn:hover {\n  border-color: transparent;\n}\n\n.btn-success, .btn-warning {\n  color: #fff;\n}\n\n.table .thead-dark th {\n  background-color: #3e3f3a;\n}\n\n.nav-tabs .nav-link {\n  background-color: #f8f5f0;\n  border-color: #dfd7ca;\n}\n\n.nav-tabs .nav-link,\n.nav-tabs .nav-link:hover,\n.nav-tabs .nav-link:focus {\n  color: #8e8c84;\n}\n\n.nav-tabs .nav-link.disabled,\n.nav-tabs .nav-link.disabled:hover,\n.nav-tabs .nav-link.disabled:focus {\n  background-color: #f8f5f0;\n  border-color: #dfd7ca;\n  color: #dfd7ca;\n}\n\n.nav-pills .nav-link {\n  border: 1px solid transparent;\n  color: #8e8c84;\n}\n\n.nav-pills .nav-link.active,\n.nav-pills .nav-link:hover,\n.nav-pills .nav-link:focus {\n  background-color: #f8f5f0;\n  border-color: #dfd7ca;\n}\n\n.nav-pills .nav-link.disabled,\n.nav-pills .nav-link.disabled:hover {\n  background-color: transparent;\n  border-color: transparent;\n  color: #dfd7ca;\n}\n\n.breadcrumb {\n  border: 1px solid #dfd7ca;\n}\n\n.pagination a:hover {\n  text-decoration: none;\n}\n\n.alert {\n  color: #fff;\n}\n\n.alert a,\n.alert .alert-link {\n  color: #fff;\n  text-decoration: underline;\n}\n\n.alert-primary,\n.alert-primary > th,\n.alert-primary > td {\n  background-color: #325d88;\n}\n\n.alert-secondary,\n.alert-secondary > th,\n.alert-secondary > td {\n  background-color: #8e8c84;\n}\n\n.alert-success,\n.alert-success > th,\n.alert-success > td {\n  background-color: #93c54b;\n}\n\n.alert-info,\n.alert-info > th,\n.alert-info > td {\n  background-color: #29abe0;\n}\n\n.alert-danger,\n.alert-danger > th,\n.alert-danger > td {\n  background-color: #d9534f;\n}\n\n.alert-warning,\n.alert-warning > th,\n.alert-warning > td {\n  background-color: #f47c3c;\n}\n\n.alert-dark,\n.alert-dark > th,\n.alert-dark > td {\n  background-color: #3e3f3a;\n}\n\n.alert-light,\n.alert-light > th,\n.alert-light > td {\n  background-color: #f8f5f0;\n}\n\n.alert-light,\n.alert-light a:not(.btn),\n.alert-light .alert-link {\n  color: #3e3f3a;\n}\n\n.badge.bg-light {\n  color: #3e3f3a;\n}\n\n.modal .btn-close,\n.toast .btn-close {\n  background-image: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23dfd7ca'><path d='M.293.293a1 1 0 011.414 0L8 6.586 14.293.293a1 1 0 111.414 1.414L9.414 8l6.293 6.293a1 1 0 01-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 01-1.414-1.414L6.586 8 .293 1.707a1 1 0 010-1.414z'/></svg>\");\n}\n"
  },
  {
    "path": "src/sourceDev.WebApp/SharedThemes/sandstone/wwwroot/css/fontawesome-all.css",
    "content": "/*!\n * Font Awesome Free 5.0.8 by @fontawesome - https://fontawesome.com\n * License - https://fontawesome.com/license (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)\n */\n.fa,\n.fas,\n.far,\n.fal,\n.fab {\n  -moz-osx-font-smoothing: grayscale;\n  -webkit-font-smoothing: antialiased;\n  display: inline-block;\n  font-style: normal;\n  font-variant: normal;\n  text-rendering: auto;\n  line-height: 1; }\n\n.fa-lg {\n  font-size: 1.33333em;\n  line-height: 0.75em;\n  vertical-align: -.0667em; }\n\n.fa-xs {\n  font-size: .75em; }\n\n.fa-sm {\n  font-size: .875em; }\n\n.fa-1x {\n  font-size: 1em; }\n\n.fa-2x {\n  font-size: 2em; }\n\n.fa-3x {\n  font-size: 3em; }\n\n.fa-4x {\n  font-size: 4em; }\n\n.fa-5x {\n  font-size: 5em; }\n\n.fa-6x {\n  font-size: 6em; }\n\n.fa-7x {\n  font-size: 7em; }\n\n.fa-8x {\n  font-size: 8em; }\n\n.fa-9x {\n  font-size: 9em; }\n\n.fa-10x {\n  font-size: 10em; }\n\n.fa-fw {\n  text-align: center;\n  width: 1.25em; }\n\n.fa-ul {\n  list-style-type: none;\n  margin-left: 2.5em;\n  padding-left: 0; }\n  .fa-ul > li {\n    position: relative; }\n\n.fa-li {\n  left: -2em;\n  position: absolute;\n  text-align: center;\n  width: 2em;\n  line-height: inherit; }\n\n.fa-border {\n  border: solid 0.08em #eee;\n  border-radius: .1em;\n  padding: .2em .25em .15em; }\n\n.fa-pull-left {\n  float: left; }\n\n.fa-pull-right {\n  float: right; }\n\n.fa.fa-pull-left,\n.fas.fa-pull-left,\n.far.fa-pull-left,\n.fal.fa-pull-left,\n.fab.fa-pull-left {\n  margin-right: .3em; }\n\n.fa.fa-pull-right,\n.fas.fa-pull-right,\n.far.fa-pull-right,\n.fal.fa-pull-right,\n.fab.fa-pull-right {\n  margin-left: .3em; }\n\n.fa-spin {\n  -webkit-animation: fa-spin 2s infinite linear;\n          animation: fa-spin 2s infinite linear; }\n\n.fa-pulse {\n  -webkit-animation: fa-spin 1s infinite steps(8);\n          animation: fa-spin 1s infinite steps(8); }\n\n@-webkit-keyframes fa-spin {\n  0% {\n    -webkit-transform: rotate(0deg);\n            transform: rotate(0deg); }\n  100% {\n    -webkit-transform: rotate(360deg);\n            transform: rotate(360deg); } }\n\n@keyframes fa-spin {\n  0% {\n    -webkit-transform: rotate(0deg);\n            transform: rotate(0deg); }\n  100% {\n    -webkit-transform: rotate(360deg);\n            transform: rotate(360deg); } }\n\n.fa-rotate-90 {\n  -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)\";\n  -webkit-transform: rotate(90deg);\n          transform: rotate(90deg); }\n\n.fa-rotate-180 {\n  -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)\";\n  -webkit-transform: rotate(180deg);\n          transform: rotate(180deg); }\n\n.fa-rotate-270 {\n  -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)\";\n  -webkit-transform: rotate(270deg);\n          transform: rotate(270deg); }\n\n.fa-flip-horizontal {\n  -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)\";\n  -webkit-transform: scale(-1, 1);\n          transform: scale(-1, 1); }\n\n.fa-flip-vertical {\n  -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)\";\n  -webkit-transform: scale(1, -1);\n          transform: scale(1, -1); }\n\n.fa-flip-horizontal.fa-flip-vertical {\n  -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)\";\n  -webkit-transform: scale(-1, -1);\n          transform: scale(-1, -1); }\n\n:root .fa-rotate-90,\n:root .fa-rotate-180,\n:root .fa-rotate-270,\n:root .fa-flip-horizontal,\n:root .fa-flip-vertical {\n  -webkit-filter: none;\n          filter: none; }\n\n.fa-stack {\n  display: inline-block;\n  height: 2em;\n  line-height: 2em;\n  position: relative;\n  vertical-align: middle;\n  width: 2em; }\n\n.fa-stack-1x,\n.fa-stack-2x {\n  left: 0;\n  position: absolute;\n  text-align: center;\n  width: 100%; }\n\n.fa-stack-1x {\n  line-height: inherit; }\n\n.fa-stack-2x {\n  font-size: 2em; }\n\n.fa-inverse {\n  color: #fff; }\n\n/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen\nreaders do not read off random characters that represent icons */\n.fa-500px:before {\n  content: \"\\f26e\"; }\n\n.fa-accessible-icon:before {\n  content: \"\\f368\"; }\n\n.fa-accusoft:before {\n  content: \"\\f369\"; }\n\n.fa-address-book:before {\n  content: \"\\f2b9\"; }\n\n.fa-address-card:before {\n  content: \"\\f2bb\"; }\n\n.fa-adjust:before {\n  content: \"\\f042\"; }\n\n.fa-adn:before {\n  content: \"\\f170\"; }\n\n.fa-adversal:before {\n  content: \"\\f36a\"; }\n\n.fa-affiliatetheme:before {\n  content: \"\\f36b\"; }\n\n.fa-algolia:before {\n  content: \"\\f36c\"; }\n\n.fa-align-center:before {\n  content: \"\\f037\"; }\n\n.fa-align-justify:before {\n  content: \"\\f039\"; }\n\n.fa-align-left:before {\n  content: \"\\f036\"; }\n\n.fa-align-right:before {\n  content: \"\\f038\"; }\n\n.fa-amazon:before {\n  content: \"\\f270\"; }\n\n.fa-amazon-pay:before {\n  content: \"\\f42c\"; }\n\n.fa-ambulance:before {\n  content: \"\\f0f9\"; }\n\n.fa-american-sign-language-interpreting:before {\n  content: \"\\f2a3\"; }\n\n.fa-amilia:before {\n  content: \"\\f36d\"; }\n\n.fa-anchor:before {\n  content: \"\\f13d\"; }\n\n.fa-android:before {\n  content: \"\\f17b\"; }\n\n.fa-angellist:before {\n  content: \"\\f209\"; }\n\n.fa-angle-double-down:before {\n  content: \"\\f103\"; }\n\n.fa-angle-double-left:before {\n  content: \"\\f100\"; }\n\n.fa-angle-double-right:before {\n  content: \"\\f101\"; }\n\n.fa-angle-double-up:before {\n  content: \"\\f102\"; }\n\n.fa-angle-down:before {\n  content: \"\\f107\"; }\n\n.fa-angle-left:before {\n  content: \"\\f104\"; }\n\n.fa-angle-right:before {\n  content: \"\\f105\"; }\n\n.fa-angle-up:before {\n  content: \"\\f106\"; }\n\n.fa-angrycreative:before {\n  content: \"\\f36e\"; }\n\n.fa-angular:before {\n  content: \"\\f420\"; }\n\n.fa-app-store:before {\n  content: \"\\f36f\"; }\n\n.fa-app-store-ios:before {\n  content: \"\\f370\"; }\n\n.fa-apper:before {\n  content: \"\\f371\"; }\n\n.fa-apple:before {\n  content: \"\\f179\"; }\n\n.fa-apple-pay:before {\n  content: \"\\f415\"; }\n\n.fa-archive:before {\n  content: \"\\f187\"; }\n\n.fa-arrow-alt-circle-down:before {\n  content: \"\\f358\"; }\n\n.fa-arrow-alt-circle-left:before {\n  content: \"\\f359\"; }\n\n.fa-arrow-alt-circle-right:before {\n  content: \"\\f35a\"; }\n\n.fa-arrow-alt-circle-up:before {\n  content: \"\\f35b\"; }\n\n.fa-arrow-circle-down:before {\n  content: \"\\f0ab\"; }\n\n.fa-arrow-circle-left:before {\n  content: \"\\f0a8\"; }\n\n.fa-arrow-circle-right:before {\n  content: \"\\f0a9\"; }\n\n.fa-arrow-circle-up:before {\n  content: \"\\f0aa\"; }\n\n.fa-arrow-down:before {\n  content: \"\\f063\"; }\n\n.fa-arrow-left:before {\n  content: \"\\f060\"; }\n\n.fa-arrow-right:before {\n  content: \"\\f061\"; }\n\n.fa-arrow-up:before {\n  content: \"\\f062\"; }\n\n.fa-arrows-alt:before {\n  content: \"\\f0b2\"; }\n\n.fa-arrows-alt-h:before {\n  content: \"\\f337\"; }\n\n.fa-arrows-alt-v:before {\n  content: \"\\f338\"; }\n\n.fa-assistive-listening-systems:before {\n  content: \"\\f2a2\"; }\n\n.fa-asterisk:before {\n  content: \"\\f069\"; }\n\n.fa-asymmetrik:before {\n  content: \"\\f372\"; }\n\n.fa-at:before {\n  content: \"\\f1fa\"; }\n\n.fa-audible:before {\n  content: \"\\f373\"; }\n\n.fa-audio-description:before {\n  content: \"\\f29e\"; }\n\n.fa-autoprefixer:before {\n  content: \"\\f41c\"; }\n\n.fa-avianex:before {\n  content: \"\\f374\"; }\n\n.fa-aviato:before {\n  content: \"\\f421\"; }\n\n.fa-aws:before {\n  content: \"\\f375\"; }\n\n.fa-backward:before {\n  content: \"\\f04a\"; }\n\n.fa-balance-scale:before {\n  content: \"\\f24e\"; }\n\n.fa-ban:before {\n  content: \"\\f05e\"; }\n\n.fa-band-aid:before {\n  content: \"\\f462\"; }\n\n.fa-bandcamp:before {\n  content: \"\\f2d5\"; }\n\n.fa-barcode:before {\n  content: \"\\f02a\"; }\n\n.fa-bars:before {\n  content: \"\\f0c9\"; }\n\n.fa-baseball-ball:before {\n  content: \"\\f433\"; }\n\n.fa-basketball-ball:before {\n  content: \"\\f434\"; }\n\n.fa-bath:before {\n  content: \"\\f2cd\"; }\n\n.fa-battery-empty:before {\n  content: \"\\f244\"; }\n\n.fa-battery-full:before {\n  content: \"\\f240\"; }\n\n.fa-battery-half:before {\n  content: \"\\f242\"; }\n\n.fa-battery-quarter:before {\n  content: \"\\f243\"; }\n\n.fa-battery-three-quarters:before {\n  content: \"\\f241\"; }\n\n.fa-bed:before {\n  content: \"\\f236\"; }\n\n.fa-beer:before {\n  content: \"\\f0fc\"; }\n\n.fa-behance:before {\n  content: \"\\f1b4\"; }\n\n.fa-behance-square:before {\n  content: \"\\f1b5\"; }\n\n.fa-bell:before {\n  content: \"\\f0f3\"; }\n\n.fa-bell-slash:before {\n  content: \"\\f1f6\"; }\n\n.fa-bicycle:before {\n  content: \"\\f206\"; }\n\n.fa-bimobject:before {\n  content: \"\\f378\"; }\n\n.fa-binoculars:before {\n  content: \"\\f1e5\"; }\n\n.fa-birthday-cake:before {\n  content: \"\\f1fd\"; }\n\n.fa-bitbucket:before {\n  content: \"\\f171\"; }\n\n.fa-bitcoin:before {\n  content: \"\\f379\"; }\n\n.fa-bity:before {\n  content: \"\\f37a\"; }\n\n.fa-black-tie:before {\n  content: \"\\f27e\"; }\n\n.fa-blackberry:before {\n  content: \"\\f37b\"; }\n\n.fa-blind:before {\n  content: \"\\f29d\"; }\n\n.fa-blogger:before {\n  content: \"\\f37c\"; }\n\n.fa-blogger-b:before {\n  content: \"\\f37d\"; }\n\n.fa-bluetooth:before {\n  content: \"\\f293\"; }\n\n.fa-bluetooth-b:before {\n  content: \"\\f294\"; }\n\n.fa-bold:before {\n  content: \"\\f032\"; }\n\n.fa-bolt:before {\n  content: \"\\f0e7\"; }\n\n.fa-bomb:before {\n  content: \"\\f1e2\"; }\n\n.fa-book:before {\n  content: \"\\f02d\"; }\n\n.fa-bookmark:before {\n  content: \"\\f02e\"; }\n\n.fa-bowling-ball:before {\n  content: \"\\f436\"; }\n\n.fa-box:before {\n  content: \"\\f466\"; }\n\n.fa-boxes:before {\n  content: \"\\f468\"; }\n\n.fa-braille:before {\n  content: \"\\f2a1\"; }\n\n.fa-briefcase:before {\n  content: \"\\f0b1\"; }\n\n.fa-btc:before {\n  content: \"\\f15a\"; }\n\n.fa-bug:before {\n  content: \"\\f188\"; }\n\n.fa-building:before {\n  content: \"\\f1ad\"; }\n\n.fa-bullhorn:before {\n  content: \"\\f0a1\"; }\n\n.fa-bullseye:before {\n  content: \"\\f140\"; }\n\n.fa-buromobelexperte:before {\n  content: \"\\f37f\"; }\n\n.fa-bus:before {\n  content: \"\\f207\"; }\n\n.fa-buysellads:before {\n  content: \"\\f20d\"; }\n\n.fa-calculator:before {\n  content: \"\\f1ec\"; }\n\n.fa-calendar:before {\n  content: \"\\f133\"; }\n\n.fa-calendar-alt:before {\n  content: \"\\f073\"; }\n\n.fa-calendar-check:before {\n  content: \"\\f274\"; }\n\n.fa-calendar-minus:before {\n  content: \"\\f272\"; }\n\n.fa-calendar-plus:before {\n  content: \"\\f271\"; }\n\n.fa-calendar-times:before {\n  content: \"\\f273\"; }\n\n.fa-camera:before {\n  content: \"\\f030\"; }\n\n.fa-camera-retro:before {\n  content: \"\\f083\"; }\n\n.fa-car:before {\n  content: \"\\f1b9\"; }\n\n.fa-caret-down:before {\n  content: \"\\f0d7\"; }\n\n.fa-caret-left:before {\n  content: \"\\f0d9\"; }\n\n.fa-caret-right:before {\n  content: \"\\f0da\"; }\n\n.fa-caret-square-down:before {\n  content: \"\\f150\"; }\n\n.fa-caret-square-left:before {\n  content: \"\\f191\"; }\n\n.fa-caret-square-right:before {\n  content: \"\\f152\"; }\n\n.fa-caret-square-up:before {\n  content: \"\\f151\"; }\n\n.fa-caret-up:before {\n  content: \"\\f0d8\"; }\n\n.fa-cart-arrow-down:before {\n  content: \"\\f218\"; }\n\n.fa-cart-plus:before {\n  content: \"\\f217\"; }\n\n.fa-cc-amazon-pay:before {\n  content: \"\\f42d\"; }\n\n.fa-cc-amex:before {\n  content: \"\\f1f3\"; }\n\n.fa-cc-apple-pay:before {\n  content: \"\\f416\"; }\n\n.fa-cc-diners-club:before {\n  content: \"\\f24c\"; }\n\n.fa-cc-discover:before {\n  content: \"\\f1f2\"; }\n\n.fa-cc-jcb:before {\n  content: \"\\f24b\"; }\n\n.fa-cc-mastercard:before {\n  content: \"\\f1f1\"; }\n\n.fa-cc-paypal:before {\n  content: \"\\f1f4\"; }\n\n.fa-cc-stripe:before {\n  content: \"\\f1f5\"; }\n\n.fa-cc-visa:before {\n  content: \"\\f1f0\"; }\n\n.fa-centercode:before {\n  content: \"\\f380\"; }\n\n.fa-certificate:before {\n  content: \"\\f0a3\"; }\n\n.fa-chart-area:before {\n  content: \"\\f1fe\"; }\n\n.fa-chart-bar:before {\n  content: \"\\f080\"; }\n\n.fa-chart-line:before {\n  content: \"\\f201\"; }\n\n.fa-chart-pie:before {\n  content: \"\\f200\"; }\n\n.fa-check:before {\n  content: \"\\f00c\"; }\n\n.fa-check-circle:before {\n  content: \"\\f058\"; }\n\n.fa-check-square:before {\n  content: \"\\f14a\"; }\n\n.fa-chess:before {\n  content: \"\\f439\"; }\n\n.fa-chess-bishop:before {\n  content: \"\\f43a\"; }\n\n.fa-chess-board:before {\n  content: \"\\f43c\"; }\n\n.fa-chess-king:before {\n  content: \"\\f43f\"; }\n\n.fa-chess-knight:before {\n  content: \"\\f441\"; }\n\n.fa-chess-pawn:before {\n  content: \"\\f443\"; }\n\n.fa-chess-queen:before {\n  content: \"\\f445\"; }\n\n.fa-chess-rook:before {\n  content: \"\\f447\"; }\n\n.fa-chevron-circle-down:before {\n  content: \"\\f13a\"; }\n\n.fa-chevron-circle-left:before {\n  content: \"\\f137\"; }\n\n.fa-chevron-circle-right:before {\n  content: \"\\f138\"; }\n\n.fa-chevron-circle-up:before {\n  content: \"\\f139\"; }\n\n.fa-chevron-down:before {\n  content: \"\\f078\"; }\n\n.fa-chevron-left:before {\n  content: \"\\f053\"; }\n\n.fa-chevron-right:before {\n  content: \"\\f054\"; }\n\n.fa-chevron-up:before {\n  content: \"\\f077\"; }\n\n.fa-child:before {\n  content: \"\\f1ae\"; }\n\n.fa-chrome:before {\n  content: \"\\f268\"; }\n\n.fa-circle:before {\n  content: \"\\f111\"; }\n\n.fa-circle-notch:before {\n  content: \"\\f1ce\"; }\n\n.fa-clipboard:before {\n  content: \"\\f328\"; }\n\n.fa-clipboard-check:before {\n  content: \"\\f46c\"; }\n\n.fa-clipboard-list:before {\n  content: \"\\f46d\"; }\n\n.fa-clock:before {\n  content: \"\\f017\"; }\n\n.fa-clone:before {\n  content: \"\\f24d\"; }\n\n.fa-closed-captioning:before {\n  content: \"\\f20a\"; }\n\n.fa-cloud:before {\n  content: \"\\f0c2\"; }\n\n.fa-cloud-download-alt:before {\n  content: \"\\f381\"; }\n\n.fa-cloud-upload-alt:before {\n  content: \"\\f382\"; }\n\n.fa-cloudscale:before {\n  content: \"\\f383\"; }\n\n.fa-cloudsmith:before {\n  content: \"\\f384\"; }\n\n.fa-cloudversify:before {\n  content: \"\\f385\"; }\n\n.fa-code:before {\n  content: \"\\f121\"; }\n\n.fa-code-branch:before {\n  content: \"\\f126\"; }\n\n.fa-codepen:before {\n  content: \"\\f1cb\"; }\n\n.fa-codiepie:before {\n  content: \"\\f284\"; }\n\n.fa-coffee:before {\n  content: \"\\f0f4\"; }\n\n.fa-cog:before {\n  content: \"\\f013\"; }\n\n.fa-cogs:before {\n  content: \"\\f085\"; }\n\n.fa-columns:before {\n  content: \"\\f0db\"; }\n\n.fa-comment:before {\n  content: \"\\f075\"; }\n\n.fa-comment-alt:before {\n  content: \"\\f27a\"; }\n\n.fa-comments:before {\n  content: \"\\f086\"; }\n\n.fa-compass:before {\n  content: \"\\f14e\"; }\n\n.fa-compress:before {\n  content: \"\\f066\"; }\n\n.fa-connectdevelop:before {\n  content: \"\\f20e\"; }\n\n.fa-contao:before {\n  content: \"\\f26d\"; }\n\n.fa-copy:before {\n  content: \"\\f0c5\"; }\n\n.fa-copyright:before {\n  content: \"\\f1f9\"; }\n\n.fa-cpanel:before {\n  content: \"\\f388\"; }\n\n.fa-creative-commons:before {\n  content: \"\\f25e\"; }\n\n.fa-credit-card:before {\n  content: \"\\f09d\"; }\n\n.fa-crop:before {\n  content: \"\\f125\"; }\n\n.fa-crosshairs:before {\n  content: \"\\f05b\"; }\n\n.fa-css3:before {\n  content: \"\\f13c\"; }\n\n.fa-css3-alt:before {\n  content: \"\\f38b\"; }\n\n.fa-cube:before {\n  content: \"\\f1b2\"; }\n\n.fa-cubes:before {\n  content: \"\\f1b3\"; }\n\n.fa-cut:before {\n  content: \"\\f0c4\"; }\n\n.fa-cuttlefish:before {\n  content: \"\\f38c\"; }\n\n.fa-d-and-d:before {\n  content: \"\\f38d\"; }\n\n.fa-dashcube:before {\n  content: \"\\f210\"; }\n\n.fa-database:before {\n  content: \"\\f1c0\"; }\n\n.fa-deaf:before {\n  content: \"\\f2a4\"; }\n\n.fa-delicious:before {\n  content: \"\\f1a5\"; }\n\n.fa-deploydog:before {\n  content: \"\\f38e\"; }\n\n.fa-deskpro:before {\n  content: \"\\f38f\"; }\n\n.fa-desktop:before {\n  content: \"\\f108\"; }\n\n.fa-deviantart:before {\n  content: \"\\f1bd\"; }\n\n.fa-digg:before {\n  content: \"\\f1a6\"; }\n\n.fa-digital-ocean:before {\n  content: \"\\f391\"; }\n\n.fa-discord:before {\n  content: \"\\f392\"; }\n\n.fa-discourse:before {\n  content: \"\\f393\"; }\n\n.fa-dna:before {\n  content: \"\\f471\"; }\n\n.fa-dochub:before {\n  content: \"\\f394\"; }\n\n.fa-docker:before {\n  content: \"\\f395\"; }\n\n.fa-dollar-sign:before {\n  content: \"\\f155\"; }\n\n.fa-dolly:before {\n  content: \"\\f472\"; }\n\n.fa-dolly-flatbed:before {\n  content: \"\\f474\"; }\n\n.fa-dot-circle:before {\n  content: \"\\f192\"; }\n\n.fa-download:before {\n  content: \"\\f019\"; }\n\n.fa-draft2digital:before {\n  content: \"\\f396\"; }\n\n.fa-dribbble:before {\n  content: \"\\f17d\"; }\n\n.fa-dribbble-square:before {\n  content: \"\\f397\"; }\n\n.fa-dropbox:before {\n  content: \"\\f16b\"; }\n\n.fa-drupal:before {\n  content: \"\\f1a9\"; }\n\n.fa-dyalog:before {\n  content: \"\\f399\"; }\n\n.fa-earlybirds:before {\n  content: \"\\f39a\"; }\n\n.fa-edge:before {\n  content: \"\\f282\"; }\n\n.fa-edit:before {\n  content: \"\\f044\"; }\n\n.fa-eject:before {\n  content: \"\\f052\"; }\n\n.fa-elementor:before {\n  content: \"\\f430\"; }\n\n.fa-ellipsis-h:before {\n  content: \"\\f141\"; }\n\n.fa-ellipsis-v:before {\n  content: \"\\f142\"; }\n\n.fa-ember:before {\n  content: \"\\f423\"; }\n\n.fa-empire:before {\n  content: \"\\f1d1\"; }\n\n.fa-envelope:before {\n  content: \"\\f0e0\"; }\n\n.fa-envelope-open:before {\n  content: \"\\f2b6\"; }\n\n.fa-envelope-square:before {\n  content: \"\\f199\"; }\n\n.fa-envira:before {\n  content: \"\\f299\"; }\n\n.fa-eraser:before {\n  content: \"\\f12d\"; }\n\n.fa-erlang:before {\n  content: \"\\f39d\"; }\n\n.fa-ethereum:before {\n  content: \"\\f42e\"; }\n\n.fa-etsy:before {\n  content: \"\\f2d7\"; }\n\n.fa-euro-sign:before {\n  content: \"\\f153\"; }\n\n.fa-exchange-alt:before {\n  content: \"\\f362\"; }\n\n.fa-exclamation:before {\n  content: \"\\f12a\"; }\n\n.fa-exclamation-circle:before {\n  content: \"\\f06a\"; }\n\n.fa-exclamation-triangle:before {\n  content: \"\\f071\"; }\n\n.fa-expand:before {\n  content: \"\\f065\"; }\n\n.fa-expand-arrows-alt:before {\n  content: \"\\f31e\"; }\n\n.fa-expeditedssl:before {\n  content: \"\\f23e\"; }\n\n.fa-external-link-alt:before {\n  content: \"\\f35d\"; }\n\n.fa-external-link-square-alt:before {\n  content: \"\\f360\"; }\n\n.fa-eye:before {\n  content: \"\\f06e\"; }\n\n.fa-eye-dropper:before {\n  content: \"\\f1fb\"; }\n\n.fa-eye-slash:before {\n  content: \"\\f070\"; }\n\n.fa-facebook:before {\n  content: \"\\f09a\"; }\n\n.fa-facebook-f:before {\n  content: \"\\f39e\"; }\n\n.fa-facebook-messenger:before {\n  content: \"\\f39f\"; }\n\n.fa-facebook-square:before {\n  content: \"\\f082\"; }\n\n.fa-fast-backward:before {\n  content: \"\\f049\"; }\n\n.fa-fast-forward:before {\n  content: \"\\f050\"; }\n\n.fa-fax:before {\n  content: \"\\f1ac\"; }\n\n.fa-female:before {\n  content: \"\\f182\"; }\n\n.fa-fighter-jet:before {\n  content: \"\\f0fb\"; }\n\n.fa-file:before {\n  content: \"\\f15b\"; }\n\n.fa-file-alt:before {\n  content: \"\\f15c\"; }\n\n.fa-file-archive:before {\n  content: \"\\f1c6\"; }\n\n.fa-file-audio:before {\n  content: \"\\f1c7\"; }\n\n.fa-file-code:before {\n  content: \"\\f1c9\"; }\n\n.fa-file-excel:before {\n  content: \"\\f1c3\"; }\n\n.fa-file-image:before {\n  content: \"\\f1c5\"; }\n\n.fa-file-pdf:before {\n  content: \"\\f1c1\"; }\n\n.fa-file-powerpoint:before {\n  content: \"\\f1c4\"; }\n\n.fa-file-video:before {\n  content: \"\\f1c8\"; }\n\n.fa-file-word:before {\n  content: \"\\f1c2\"; }\n\n.fa-film:before {\n  content: \"\\f008\"; }\n\n.fa-filter:before {\n  content: \"\\f0b0\"; }\n\n.fa-fire:before {\n  content: \"\\f06d\"; }\n\n.fa-fire-extinguisher:before {\n  content: \"\\f134\"; }\n\n.fa-firefox:before {\n  content: \"\\f269\"; }\n\n.fa-first-aid:before {\n  content: \"\\f479\"; }\n\n.fa-first-order:before {\n  content: \"\\f2b0\"; }\n\n.fa-firstdraft:before {\n  content: \"\\f3a1\"; }\n\n.fa-flag:before {\n  content: \"\\f024\"; }\n\n.fa-flag-checkered:before {\n  content: \"\\f11e\"; }\n\n.fa-flask:before {\n  content: \"\\f0c3\"; }\n\n.fa-flickr:before {\n  content: \"\\f16e\"; }\n\n.fa-flipboard:before {\n  content: \"\\f44d\"; }\n\n.fa-fly:before {\n  content: \"\\f417\"; }\n\n.fa-folder:before {\n  content: \"\\f07b\"; }\n\n.fa-folder-open:before {\n  content: \"\\f07c\"; }\n\n.fa-font:before {\n  content: \"\\f031\"; }\n\n.fa-font-awesome:before {\n  content: \"\\f2b4\"; }\n\n.fa-font-awesome-alt:before {\n  content: \"\\f35c\"; }\n\n.fa-font-awesome-flag:before {\n  content: \"\\f425\"; }\n\n.fa-fonticons:before {\n  content: \"\\f280\"; }\n\n.fa-fonticons-fi:before {\n  content: \"\\f3a2\"; }\n\n.fa-football-ball:before {\n  content: \"\\f44e\"; }\n\n.fa-fort-awesome:before {\n  content: \"\\f286\"; }\n\n.fa-fort-awesome-alt:before {\n  content: \"\\f3a3\"; }\n\n.fa-forumbee:before {\n  content: \"\\f211\"; }\n\n.fa-forward:before {\n  content: \"\\f04e\"; }\n\n.fa-foursquare:before {\n  content: \"\\f180\"; }\n\n.fa-free-code-camp:before {\n  content: \"\\f2c5\"; }\n\n.fa-freebsd:before {\n  content: \"\\f3a4\"; }\n\n.fa-frown:before {\n  content: \"\\f119\"; }\n\n.fa-futbol:before {\n  content: \"\\f1e3\"; }\n\n.fa-gamepad:before {\n  content: \"\\f11b\"; }\n\n.fa-gavel:before {\n  content: \"\\f0e3\"; }\n\n.fa-gem:before {\n  content: \"\\f3a5\"; }\n\n.fa-genderless:before {\n  content: \"\\f22d\"; }\n\n.fa-get-pocket:before {\n  content: \"\\f265\"; }\n\n.fa-gg:before {\n  content: \"\\f260\"; }\n\n.fa-gg-circle:before {\n  content: \"\\f261\"; }\n\n.fa-gift:before {\n  content: \"\\f06b\"; }\n\n.fa-git:before {\n  content: \"\\f1d3\"; }\n\n.fa-git-square:before {\n  content: \"\\f1d2\"; }\n\n.fa-github:before {\n  content: \"\\f09b\"; }\n\n.fa-github-alt:before {\n  content: \"\\f113\"; }\n\n.fa-github-square:before {\n  content: \"\\f092\"; }\n\n.fa-gitkraken:before {\n  content: \"\\f3a6\"; }\n\n.fa-gitlab:before {\n  content: \"\\f296\"; }\n\n.fa-gitter:before {\n  content: \"\\f426\"; }\n\n.fa-glass-martini:before {\n  content: \"\\f000\"; }\n\n.fa-glide:before {\n  content: \"\\f2a5\"; }\n\n.fa-glide-g:before {\n  content: \"\\f2a6\"; }\n\n.fa-globe:before {\n  content: \"\\f0ac\"; }\n\n.fa-gofore:before {\n  content: \"\\f3a7\"; }\n\n.fa-golf-ball:before {\n  content: \"\\f450\"; }\n\n.fa-goodreads:before {\n  content: \"\\f3a8\"; }\n\n.fa-goodreads-g:before {\n  content: \"\\f3a9\"; }\n\n.fa-google:before {\n  content: \"\\f1a0\"; }\n\n.fa-google-drive:before {\n  content: \"\\f3aa\"; }\n\n.fa-google-play:before {\n  content: \"\\f3ab\"; }\n\n.fa-google-plus:before {\n  content: \"\\f2b3\"; }\n\n.fa-google-plus-g:before {\n  content: \"\\f0d5\"; }\n\n.fa-google-plus-square:before {\n  content: \"\\f0d4\"; }\n\n.fa-google-wallet:before {\n  content: \"\\f1ee\"; }\n\n.fa-graduation-cap:before {\n  content: \"\\f19d\"; }\n\n.fa-gratipay:before {\n  content: \"\\f184\"; }\n\n.fa-grav:before {\n  content: \"\\f2d6\"; }\n\n.fa-gripfire:before {\n  content: \"\\f3ac\"; }\n\n.fa-grunt:before {\n  content: \"\\f3ad\"; }\n\n.fa-gulp:before {\n  content: \"\\f3ae\"; }\n\n.fa-h-square:before {\n  content: \"\\f0fd\"; }\n\n.fa-hacker-news:before {\n  content: \"\\f1d4\"; }\n\n.fa-hacker-news-square:before {\n  content: \"\\f3af\"; }\n\n.fa-hand-lizard:before {\n  content: \"\\f258\"; }\n\n.fa-hand-paper:before {\n  content: \"\\f256\"; }\n\n.fa-hand-peace:before {\n  content: \"\\f25b\"; }\n\n.fa-hand-point-down:before {\n  content: \"\\f0a7\"; }\n\n.fa-hand-point-left:before {\n  content: \"\\f0a5\"; }\n\n.fa-hand-point-right:before {\n  content: \"\\f0a4\"; }\n\n.fa-hand-point-up:before {\n  content: \"\\f0a6\"; }\n\n.fa-hand-pointer:before {\n  content: \"\\f25a\"; }\n\n.fa-hand-rock:before {\n  content: \"\\f255\"; }\n\n.fa-hand-scissors:before {\n  content: \"\\f257\"; }\n\n.fa-hand-spock:before {\n  content: \"\\f259\"; }\n\n.fa-handshake:before {\n  content: \"\\f2b5\"; }\n\n.fa-hashtag:before {\n  content: \"\\f292\"; }\n\n.fa-hdd:before {\n  content: \"\\f0a0\"; }\n\n.fa-heading:before {\n  content: \"\\f1dc\"; }\n\n.fa-headphones:before {\n  content: \"\\f025\"; }\n\n.fa-heart:before {\n  content: \"\\f004\"; }\n\n.fa-heartbeat:before {\n  content: \"\\f21e\"; }\n\n.fa-hips:before {\n  content: \"\\f452\"; }\n\n.fa-hire-a-helper:before {\n  content: \"\\f3b0\"; }\n\n.fa-history:before {\n  content: \"\\f1da\"; }\n\n.fa-hockey-puck:before {\n  content: \"\\f453\"; }\n\n.fa-home:before {\n  content: \"\\f015\"; }\n\n.fa-hooli:before {\n  content: \"\\f427\"; }\n\n.fa-hospital:before {\n  content: \"\\f0f8\"; }\n\n.fa-hospital-symbol:before {\n  content: \"\\f47e\"; }\n\n.fa-hotjar:before {\n  content: \"\\f3b1\"; }\n\n.fa-hourglass:before {\n  content: \"\\f254\"; }\n\n.fa-hourglass-end:before {\n  content: \"\\f253\"; }\n\n.fa-hourglass-half:before {\n  content: \"\\f252\"; }\n\n.fa-hourglass-start:before {\n  content: \"\\f251\"; }\n\n.fa-houzz:before {\n  content: \"\\f27c\"; }\n\n.fa-html5:before {\n  content: \"\\f13b\"; }\n\n.fa-hubspot:before {\n  content: \"\\f3b2\"; }\n\n.fa-i-cursor:before {\n  content: \"\\f246\"; }\n\n.fa-id-badge:before {\n  content: \"\\f2c1\"; }\n\n.fa-id-card:before {\n  content: \"\\f2c2\"; }\n\n.fa-image:before {\n  content: \"\\f03e\"; }\n\n.fa-images:before {\n  content: \"\\f302\"; }\n\n.fa-imdb:before {\n  content: \"\\f2d8\"; }\n\n.fa-inbox:before {\n  content: \"\\f01c\"; }\n\n.fa-indent:before {\n  content: \"\\f03c\"; }\n\n.fa-industry:before {\n  content: \"\\f275\"; }\n\n.fa-info:before {\n  content: \"\\f129\"; }\n\n.fa-info-circle:before {\n  content: \"\\f05a\"; }\n\n.fa-instagram:before {\n  content: \"\\f16d\"; }\n\n.fa-internet-explorer:before {\n  content: \"\\f26b\"; }\n\n.fa-ioxhost:before {\n  content: \"\\f208\"; }\n\n.fa-italic:before {\n  content: \"\\f033\"; }\n\n.fa-itunes:before {\n  content: \"\\f3b4\"; }\n\n.fa-itunes-note:before {\n  content: \"\\f3b5\"; }\n\n.fa-jenkins:before {\n  content: \"\\f3b6\"; }\n\n.fa-joget:before {\n  content: \"\\f3b7\"; }\n\n.fa-joomla:before {\n  content: \"\\f1aa\"; }\n\n.fa-js:before {\n  content: \"\\f3b8\"; }\n\n.fa-js-square:before {\n  content: \"\\f3b9\"; }\n\n.fa-jsfiddle:before {\n  content: \"\\f1cc\"; }\n\n.fa-key:before {\n  content: \"\\f084\"; }\n\n.fa-keyboard:before {\n  content: \"\\f11c\"; }\n\n.fa-keycdn:before {\n  content: \"\\f3ba\"; }\n\n.fa-kickstarter:before {\n  content: \"\\f3bb\"; }\n\n.fa-kickstarter-k:before {\n  content: \"\\f3bc\"; }\n\n.fa-korvue:before {\n  content: \"\\f42f\"; }\n\n.fa-language:before {\n  content: \"\\f1ab\"; }\n\n.fa-laptop:before {\n  content: \"\\f109\"; }\n\n.fa-laravel:before {\n  content: \"\\f3bd\"; }\n\n.fa-lastfm:before {\n  content: \"\\f202\"; }\n\n.fa-lastfm-square:before {\n  content: \"\\f203\"; }\n\n.fa-leaf:before {\n  content: \"\\f06c\"; }\n\n.fa-leanpub:before {\n  content: \"\\f212\"; }\n\n.fa-lemon:before {\n  content: \"\\f094\"; }\n\n.fa-less:before {\n  content: \"\\f41d\"; }\n\n.fa-level-down-alt:before {\n  content: \"\\f3be\"; }\n\n.fa-level-up-alt:before {\n  content: \"\\f3bf\"; }\n\n.fa-life-ring:before {\n  content: \"\\f1cd\"; }\n\n.fa-lightbulb:before {\n  content: \"\\f0eb\"; }\n\n.fa-line:before {\n  content: \"\\f3c0\"; }\n\n.fa-link:before {\n  content: \"\\f0c1\"; }\n\n.fa-linkedin:before {\n  content: \"\\f08c\"; }\n\n.fa-linkedin-in:before {\n  content: \"\\f0e1\"; }\n\n.fa-linode:before {\n  content: \"\\f2b8\"; }\n\n.fa-linux:before {\n  content: \"\\f17c\"; }\n\n.fa-lira-sign:before {\n  content: \"\\f195\"; }\n\n.fa-list:before {\n  content: \"\\f03a\"; }\n\n.fa-list-alt:before {\n  content: \"\\f022\"; }\n\n.fa-list-ol:before {\n  content: \"\\f0cb\"; }\n\n.fa-list-ul:before {\n  content: \"\\f0ca\"; }\n\n.fa-location-arrow:before {\n  content: \"\\f124\"; }\n\n.fa-lock:before {\n  content: \"\\f023\"; }\n\n.fa-lock-open:before {\n  content: \"\\f3c1\"; }\n\n.fa-long-arrow-alt-down:before {\n  content: \"\\f309\"; }\n\n.fa-long-arrow-alt-left:before {\n  content: \"\\f30a\"; }\n\n.fa-long-arrow-alt-right:before {\n  content: \"\\f30b\"; }\n\n.fa-long-arrow-alt-up:before {\n  content: \"\\f30c\"; }\n\n.fa-low-vision:before {\n  content: \"\\f2a8\"; }\n\n.fa-lyft:before {\n  content: \"\\f3c3\"; }\n\n.fa-magento:before {\n  content: \"\\f3c4\"; }\n\n.fa-magic:before {\n  content: \"\\f0d0\"; }\n\n.fa-magnet:before {\n  content: \"\\f076\"; }\n\n.fa-male:before {\n  content: \"\\f183\"; }\n\n.fa-map:before {\n  content: \"\\f279\"; }\n\n.fa-map-marker:before {\n  content: \"\\f041\"; }\n\n.fa-map-marker-alt:before {\n  content: \"\\f3c5\"; }\n\n.fa-map-pin:before {\n  content: \"\\f276\"; }\n\n.fa-map-signs:before {\n  content: \"\\f277\"; }\n\n.fa-mars:before {\n  content: \"\\f222\"; }\n\n.fa-mars-double:before {\n  content: \"\\f227\"; }\n\n.fa-mars-stroke:before {\n  content: \"\\f229\"; }\n\n.fa-mars-stroke-h:before {\n  content: \"\\f22b\"; }\n\n.fa-mars-stroke-v:before {\n  content: \"\\f22a\"; }\n\n.fa-maxcdn:before {\n  content: \"\\f136\"; }\n\n.fa-medapps:before {\n  content: \"\\f3c6\"; }\n\n.fa-medium:before {\n  content: \"\\f23a\"; }\n\n.fa-medium-m:before {\n  content: \"\\f3c7\"; }\n\n.fa-medkit:before {\n  content: \"\\f0fa\"; }\n\n.fa-medrt:before {\n  content: \"\\f3c8\"; }\n\n.fa-meetup:before {\n  content: \"\\f2e0\"; }\n\n.fa-meh:before {\n  content: \"\\f11a\"; }\n\n.fa-mercury:before {\n  content: \"\\f223\"; }\n\n.fa-microchip:before {\n  content: \"\\f2db\"; }\n\n.fa-microphone:before {\n  content: \"\\f130\"; }\n\n.fa-microphone-slash:before {\n  content: \"\\f131\"; }\n\n.fa-microsoft:before {\n  content: \"\\f3ca\"; }\n\n.fa-minus:before {\n  content: \"\\f068\"; }\n\n.fa-minus-circle:before {\n  content: \"\\f056\"; }\n\n.fa-minus-square:before {\n  content: \"\\f146\"; }\n\n.fa-mix:before {\n  content: \"\\f3cb\"; }\n\n.fa-mixcloud:before {\n  content: \"\\f289\"; }\n\n.fa-mizuni:before {\n  content: \"\\f3cc\"; }\n\n.fa-mobile:before {\n  content: \"\\f10b\"; }\n\n.fa-mobile-alt:before {\n  content: \"\\f3cd\"; }\n\n.fa-modx:before {\n  content: \"\\f285\"; }\n\n.fa-monero:before {\n  content: \"\\f3d0\"; }\n\n.fa-money-bill-alt:before {\n  content: \"\\f3d1\"; }\n\n.fa-moon:before {\n  content: \"\\f186\"; }\n\n.fa-motorcycle:before {\n  content: \"\\f21c\"; }\n\n.fa-mouse-pointer:before {\n  content: \"\\f245\"; }\n\n.fa-music:before {\n  content: \"\\f001\"; }\n\n.fa-napster:before {\n  content: \"\\f3d2\"; }\n\n.fa-neuter:before {\n  content: \"\\f22c\"; }\n\n.fa-newspaper:before {\n  content: \"\\f1ea\"; }\n\n.fa-nintendo-switch:before {\n  content: \"\\f418\"; }\n\n.fa-node:before {\n  content: \"\\f419\"; }\n\n.fa-node-js:before {\n  content: \"\\f3d3\"; }\n\n.fa-npm:before {\n  content: \"\\f3d4\"; }\n\n.fa-ns8:before {\n  content: \"\\f3d5\"; }\n\n.fa-nutritionix:before {\n  content: \"\\f3d6\"; }\n\n.fa-object-group:before {\n  content: \"\\f247\"; }\n\n.fa-object-ungroup:before {\n  content: \"\\f248\"; }\n\n.fa-odnoklassniki:before {\n  content: \"\\f263\"; }\n\n.fa-odnoklassniki-square:before {\n  content: \"\\f264\"; }\n\n.fa-opencart:before {\n  content: \"\\f23d\"; }\n\n.fa-openid:before {\n  content: \"\\f19b\"; }\n\n.fa-opera:before {\n  content: \"\\f26a\"; }\n\n.fa-optin-monster:before {\n  content: \"\\f23c\"; }\n\n.fa-osi:before {\n  content: \"\\f41a\"; }\n\n.fa-outdent:before {\n  content: \"\\f03b\"; }\n\n.fa-page4:before {\n  content: \"\\f3d7\"; }\n\n.fa-pagelines:before {\n  content: \"\\f18c\"; }\n\n.fa-paint-brush:before {\n  content: \"\\f1fc\"; }\n\n.fa-palfed:before {\n  content: \"\\f3d8\"; }\n\n.fa-pallet:before {\n  content: \"\\f482\"; }\n\n.fa-paper-plane:before {\n  content: \"\\f1d8\"; }\n\n.fa-paperclip:before {\n  content: \"\\f0c6\"; }\n\n.fa-paragraph:before {\n  content: \"\\f1dd\"; }\n\n.fa-paste:before {\n  content: \"\\f0ea\"; }\n\n.fa-patreon:before {\n  content: \"\\f3d9\"; }\n\n.fa-pause:before {\n  content: \"\\f04c\"; }\n\n.fa-pause-circle:before {\n  content: \"\\f28b\"; }\n\n.fa-paw:before {\n  content: \"\\f1b0\"; }\n\n.fa-paypal:before {\n  content: \"\\f1ed\"; }\n\n.fa-pen-square:before {\n  content: \"\\f14b\"; }\n\n.fa-pencil-alt:before {\n  content: \"\\f303\"; }\n\n.fa-percent:before {\n  content: \"\\f295\"; }\n\n.fa-periscope:before {\n  content: \"\\f3da\"; }\n\n.fa-phabricator:before {\n  content: \"\\f3db\"; }\n\n.fa-phoenix-framework:before {\n  content: \"\\f3dc\"; }\n\n.fa-phone:before {\n  content: \"\\f095\"; }\n\n.fa-phone-square:before {\n  content: \"\\f098\"; }\n\n.fa-phone-volume:before {\n  content: \"\\f2a0\"; }\n\n.fa-php:before {\n  content: \"\\f457\"; }\n\n.fa-pied-piper:before {\n  content: \"\\f2ae\"; }\n\n.fa-pied-piper-alt:before {\n  content: \"\\f1a8\"; }\n\n.fa-pied-piper-pp:before {\n  content: \"\\f1a7\"; }\n\n.fa-pills:before {\n  content: \"\\f484\"; }\n\n.fa-pinterest:before {\n  content: \"\\f0d2\"; }\n\n.fa-pinterest-p:before {\n  content: \"\\f231\"; }\n\n.fa-pinterest-square:before {\n  content: \"\\f0d3\"; }\n\n.fa-plane:before {\n  content: \"\\f072\"; }\n\n.fa-play:before {\n  content: \"\\f04b\"; }\n\n.fa-play-circle:before {\n  content: \"\\f144\"; }\n\n.fa-playstation:before {\n  content: \"\\f3df\"; }\n\n.fa-plug:before {\n  content: \"\\f1e6\"; }\n\n.fa-plus:before {\n  content: \"\\f067\"; }\n\n.fa-plus-circle:before {\n  content: \"\\f055\"; }\n\n.fa-plus-square:before {\n  content: \"\\f0fe\"; }\n\n.fa-podcast:before {\n  content: \"\\f2ce\"; }\n\n.fa-pound-sign:before {\n  content: \"\\f154\"; }\n\n.fa-power-off:before {\n  content: \"\\f011\"; }\n\n.fa-print:before {\n  content: \"\\f02f\"; }\n\n.fa-product-hunt:before {\n  content: \"\\f288\"; }\n\n.fa-pushed:before {\n  content: \"\\f3e1\"; }\n\n.fa-puzzle-piece:before {\n  content: \"\\f12e\"; }\n\n.fa-python:before {\n  content: \"\\f3e2\"; }\n\n.fa-qq:before {\n  content: \"\\f1d6\"; }\n\n.fa-qrcode:before {\n  content: \"\\f029\"; }\n\n.fa-question:before {\n  content: \"\\f128\"; }\n\n.fa-question-circle:before {\n  content: \"\\f059\"; }\n\n.fa-quidditch:before {\n  content: \"\\f458\"; }\n\n.fa-quinscape:before {\n  content: \"\\f459\"; }\n\n.fa-quora:before {\n  content: \"\\f2c4\"; }\n\n.fa-quote-left:before {\n  content: \"\\f10d\"; }\n\n.fa-quote-right:before {\n  content: \"\\f10e\"; }\n\n.fa-random:before {\n  content: \"\\f074\"; }\n\n.fa-ravelry:before {\n  content: \"\\f2d9\"; }\n\n.fa-react:before {\n  content: \"\\f41b\"; }\n\n.fa-rebel:before {\n  content: \"\\f1d0\"; }\n\n.fa-recycle:before {\n  content: \"\\f1b8\"; }\n\n.fa-red-river:before {\n  content: \"\\f3e3\"; }\n\n.fa-reddit:before {\n  content: \"\\f1a1\"; }\n\n.fa-reddit-alien:before {\n  content: \"\\f281\"; }\n\n.fa-reddit-square:before {\n  content: \"\\f1a2\"; }\n\n.fa-redo:before {\n  content: \"\\f01e\"; }\n\n.fa-redo-alt:before {\n  content: \"\\f2f9\"; }\n\n.fa-registered:before {\n  content: \"\\f25d\"; }\n\n.fa-rendact:before {\n  content: \"\\f3e4\"; }\n\n.fa-renren:before {\n  content: \"\\f18b\"; }\n\n.fa-reply:before {\n  content: \"\\f3e5\"; }\n\n.fa-reply-all:before {\n  content: \"\\f122\"; }\n\n.fa-replyd:before {\n  content: \"\\f3e6\"; }\n\n.fa-resolving:before {\n  content: \"\\f3e7\"; }\n\n.fa-retweet:before {\n  content: \"\\f079\"; }\n\n.fa-road:before {\n  content: \"\\f018\"; }\n\n.fa-rocket:before {\n  content: \"\\f135\"; }\n\n.fa-rocketchat:before {\n  content: \"\\f3e8\"; }\n\n.fa-rockrms:before {\n  content: \"\\f3e9\"; }\n\n.fa-rss:before {\n  content: \"\\f09e\"; }\n\n.fa-rss-square:before {\n  content: \"\\f143\"; }\n\n.fa-ruble-sign:before {\n  content: \"\\f158\"; }\n\n.fa-rupee-sign:before {\n  content: \"\\f156\"; }\n\n.fa-safari:before {\n  content: \"\\f267\"; }\n\n.fa-sass:before {\n  content: \"\\f41e\"; }\n\n.fa-save:before {\n  content: \"\\f0c7\"; }\n\n.fa-schlix:before {\n  content: \"\\f3ea\"; }\n\n.fa-scribd:before {\n  content: \"\\f28a\"; }\n\n.fa-search:before {\n  content: \"\\f002\"; }\n\n.fa-search-minus:before {\n  content: \"\\f010\"; }\n\n.fa-search-plus:before {\n  content: \"\\f00e\"; }\n\n.fa-searchengin:before {\n  content: \"\\f3eb\"; }\n\n.fa-sellcast:before {\n  content: \"\\f2da\"; }\n\n.fa-sellsy:before {\n  content: \"\\f213\"; }\n\n.fa-server:before {\n  content: \"\\f233\"; }\n\n.fa-servicestack:before {\n  content: \"\\f3ec\"; }\n\n.fa-share:before {\n  content: \"\\f064\"; }\n\n.fa-share-alt:before {\n  content: \"\\f1e0\"; }\n\n.fa-share-alt-square:before {\n  content: \"\\f1e1\"; }\n\n.fa-share-square:before {\n  content: \"\\f14d\"; }\n\n.fa-shekel-sign:before {\n  content: \"\\f20b\"; }\n\n.fa-shield-alt:before {\n  content: \"\\f3ed\"; }\n\n.fa-ship:before {\n  content: \"\\f21a\"; }\n\n.fa-shipping-fast:before {\n  content: \"\\f48b\"; }\n\n.fa-shirtsinbulk:before {\n  content: \"\\f214\"; }\n\n.fa-shopping-bag:before {\n  content: \"\\f290\"; }\n\n.fa-shopping-basket:before {\n  content: \"\\f291\"; }\n\n.fa-shopping-cart:before {\n  content: \"\\f07a\"; }\n\n.fa-shower:before {\n  content: \"\\f2cc\"; }\n\n.fa-sign-in-alt:before {\n  content: \"\\f2f6\"; }\n\n.fa-sign-language:before {\n  content: \"\\f2a7\"; }\n\n.fa-sign-out-alt:before {\n  content: \"\\f2f5\"; }\n\n.fa-signal:before {\n  content: \"\\f012\"; }\n\n.fa-simplybuilt:before {\n  content: \"\\f215\"; }\n\n.fa-sistrix:before {\n  content: \"\\f3ee\"; }\n\n.fa-sitemap:before {\n  content: \"\\f0e8\"; }\n\n.fa-skyatlas:before {\n  content: \"\\f216\"; }\n\n.fa-skype:before {\n  content: \"\\f17e\"; }\n\n.fa-slack:before {\n  content: \"\\f198\"; }\n\n.fa-slack-hash:before {\n  content: \"\\f3ef\"; }\n\n.fa-sliders-h:before {\n  content: \"\\f1de\"; }\n\n.fa-slideshare:before {\n  content: \"\\f1e7\"; }\n\n.fa-smile:before {\n  content: \"\\f118\"; }\n\n.fa-snapchat:before {\n  content: \"\\f2ab\"; }\n\n.fa-snapchat-ghost:before {\n  content: \"\\f2ac\"; }\n\n.fa-snapchat-square:before {\n  content: \"\\f2ad\"; }\n\n.fa-snowflake:before {\n  content: \"\\f2dc\"; }\n\n.fa-sort:before {\n  content: \"\\f0dc\"; }\n\n.fa-sort-alpha-down:before {\n  content: \"\\f15d\"; }\n\n.fa-sort-alpha-up:before {\n  content: \"\\f15e\"; }\n\n.fa-sort-amount-down:before {\n  content: \"\\f160\"; }\n\n.fa-sort-amount-up:before {\n  content: \"\\f161\"; }\n\n.fa-sort-down:before {\n  content: \"\\f0dd\"; }\n\n.fa-sort-numeric-down:before {\n  content: \"\\f162\"; }\n\n.fa-sort-numeric-up:before {\n  content: \"\\f163\"; }\n\n.fa-sort-up:before {\n  content: \"\\f0de\"; }\n\n.fa-soundcloud:before {\n  content: \"\\f1be\"; }\n\n.fa-space-shuttle:before {\n  content: \"\\f197\"; }\n\n.fa-speakap:before {\n  content: \"\\f3f3\"; }\n\n.fa-spinner:before {\n  content: \"\\f110\"; }\n\n.fa-spotify:before {\n  content: \"\\f1bc\"; }\n\n.fa-square:before {\n  content: \"\\f0c8\"; }\n\n.fa-square-full:before {\n  content: \"\\f45c\"; }\n\n.fa-stack-exchange:before {\n  content: \"\\f18d\"; }\n\n.fa-stack-overflow:before {\n  content: \"\\f16c\"; }\n\n.fa-star:before {\n  content: \"\\f005\"; }\n\n.fa-star-half:before {\n  content: \"\\f089\"; }\n\n.fa-staylinked:before {\n  content: \"\\f3f5\"; }\n\n.fa-steam:before {\n  content: \"\\f1b6\"; }\n\n.fa-steam-square:before {\n  content: \"\\f1b7\"; }\n\n.fa-steam-symbol:before {\n  content: \"\\f3f6\"; }\n\n.fa-step-backward:before {\n  content: \"\\f048\"; }\n\n.fa-step-forward:before {\n  content: \"\\f051\"; }\n\n.fa-stethoscope:before {\n  content: \"\\f0f1\"; }\n\n.fa-sticker-mule:before {\n  content: \"\\f3f7\"; }\n\n.fa-sticky-note:before {\n  content: \"\\f249\"; }\n\n.fa-stop:before {\n  content: \"\\f04d\"; }\n\n.fa-stop-circle:before {\n  content: \"\\f28d\"; }\n\n.fa-stopwatch:before {\n  content: \"\\f2f2\"; }\n\n.fa-strava:before {\n  content: \"\\f428\"; }\n\n.fa-street-view:before {\n  content: \"\\f21d\"; }\n\n.fa-strikethrough:before {\n  content: \"\\f0cc\"; }\n\n.fa-stripe:before {\n  content: \"\\f429\"; }\n\n.fa-stripe-s:before {\n  content: \"\\f42a\"; }\n\n.fa-studiovinari:before {\n  content: \"\\f3f8\"; }\n\n.fa-stumbleupon:before {\n  content: \"\\f1a4\"; }\n\n.fa-stumbleupon-circle:before {\n  content: \"\\f1a3\"; }\n\n.fa-subscript:before {\n  content: \"\\f12c\"; }\n\n.fa-subway:before {\n  content: \"\\f239\"; }\n\n.fa-suitcase:before {\n  content: \"\\f0f2\"; }\n\n.fa-sun:before {\n  content: \"\\f185\"; }\n\n.fa-superpowers:before {\n  content: \"\\f2dd\"; }\n\n.fa-superscript:before {\n  content: \"\\f12b\"; }\n\n.fa-supple:before {\n  content: \"\\f3f9\"; }\n\n.fa-sync:before {\n  content: \"\\f021\"; }\n\n.fa-sync-alt:before {\n  content: \"\\f2f1\"; }\n\n.fa-syringe:before {\n  content: \"\\f48e\"; }\n\n.fa-table:before {\n  content: \"\\f0ce\"; }\n\n.fa-table-tennis:before {\n  content: \"\\f45d\"; }\n\n.fa-tablet:before {\n  content: \"\\f10a\"; }\n\n.fa-tablet-alt:before {\n  content: \"\\f3fa\"; }\n\n.fa-tachometer-alt:before {\n  content: \"\\f3fd\"; }\n\n.fa-tag:before {\n  content: \"\\f02b\"; }\n\n.fa-tags:before {\n  content: \"\\f02c\"; }\n\n.fa-tasks:before {\n  content: \"\\f0ae\"; }\n\n.fa-taxi:before {\n  content: \"\\f1ba\"; }\n\n.fa-telegram:before {\n  content: \"\\f2c6\"; }\n\n.fa-telegram-plane:before {\n  content: \"\\f3fe\"; }\n\n.fa-tencent-weibo:before {\n  content: \"\\f1d5\"; }\n\n.fa-terminal:before {\n  content: \"\\f120\"; }\n\n.fa-text-height:before {\n  content: \"\\f034\"; }\n\n.fa-text-width:before {\n  content: \"\\f035\"; }\n\n.fa-th:before {\n  content: \"\\f00a\"; }\n\n.fa-th-large:before {\n  content: \"\\f009\"; }\n\n.fa-th-list:before {\n  content: \"\\f00b\"; }\n\n.fa-themeisle:before {\n  content: \"\\f2b2\"; }\n\n.fa-thermometer:before {\n  content: \"\\f491\"; }\n\n.fa-thermometer-empty:before {\n  content: \"\\f2cb\"; }\n\n.fa-thermometer-full:before {\n  content: \"\\f2c7\"; }\n\n.fa-thermometer-half:before {\n  content: \"\\f2c9\"; }\n\n.fa-thermometer-quarter:before {\n  content: \"\\f2ca\"; }\n\n.fa-thermometer-three-quarters:before {\n  content: \"\\f2c8\"; }\n\n.fa-thumbs-down:before {\n  content: \"\\f165\"; }\n\n.fa-thumbs-up:before {\n  content: \"\\f164\"; }\n\n.fa-thumbtack:before {\n  content: \"\\f08d\"; }\n\n.fa-ticket-alt:before {\n  content: \"\\f3ff\"; }\n\n.fa-times:before {\n  content: \"\\f00d\"; }\n\n.fa-times-circle:before {\n  content: \"\\f057\"; }\n\n.fa-tint:before {\n  content: \"\\f043\"; }\n\n.fa-toggle-off:before {\n  content: \"\\f204\"; }\n\n.fa-toggle-on:before {\n  content: \"\\f205\"; }\n\n.fa-trademark:before {\n  content: \"\\f25c\"; }\n\n.fa-train:before {\n  content: \"\\f238\"; }\n\n.fa-transgender:before {\n  content: \"\\f224\"; }\n\n.fa-transgender-alt:before {\n  content: \"\\f225\"; }\n\n.fa-trash:before {\n  content: \"\\f1f8\"; }\n\n.fa-trash-alt:before {\n  content: \"\\f2ed\"; }\n\n.fa-tree:before {\n  content: \"\\f1bb\"; }\n\n.fa-trello:before {\n  content: \"\\f181\"; }\n\n.fa-tripadvisor:before {\n  content: \"\\f262\"; }\n\n.fa-trophy:before {\n  content: \"\\f091\"; }\n\n.fa-truck:before {\n  content: \"\\f0d1\"; }\n\n.fa-tty:before {\n  content: \"\\f1e4\"; }\n\n.fa-tumblr:before {\n  content: \"\\f173\"; }\n\n.fa-tumblr-square:before {\n  content: \"\\f174\"; }\n\n.fa-tv:before {\n  content: \"\\f26c\"; }\n\n.fa-twitch:before {\n  content: \"\\f1e8\"; }\n\n.fa-twitter:before {\n  content: \"\\f099\"; }\n\n.fa-twitter-square:before {\n  content: \"\\f081\"; }\n\n.fa-typo3:before {\n  content: \"\\f42b\"; }\n\n.fa-uber:before {\n  content: \"\\f402\"; }\n\n.fa-uikit:before {\n  content: \"\\f403\"; }\n\n.fa-umbrella:before {\n  content: \"\\f0e9\"; }\n\n.fa-underline:before {\n  content: \"\\f0cd\"; }\n\n.fa-undo:before {\n  content: \"\\f0e2\"; }\n\n.fa-undo-alt:before {\n  content: \"\\f2ea\"; }\n\n.fa-uniregistry:before {\n  content: \"\\f404\"; }\n\n.fa-universal-access:before {\n  content: \"\\f29a\"; }\n\n.fa-university:before {\n  content: \"\\f19c\"; }\n\n.fa-unlink:before {\n  content: \"\\f127\"; }\n\n.fa-unlock:before {\n  content: \"\\f09c\"; }\n\n.fa-unlock-alt:before {\n  content: \"\\f13e\"; }\n\n.fa-untappd:before {\n  content: \"\\f405\"; }\n\n.fa-upload:before {\n  content: \"\\f093\"; }\n\n.fa-usb:before {\n  content: \"\\f287\"; }\n\n.fa-user:before {\n  content: \"\\f007\"; }\n\n.fa-user-circle:before {\n  content: \"\\f2bd\"; }\n\n.fa-user-md:before {\n  content: \"\\f0f0\"; }\n\n.fa-user-plus:before {\n  content: \"\\f234\"; }\n\n.fa-user-secret:before {\n  content: \"\\f21b\"; }\n\n.fa-user-times:before {\n  content: \"\\f235\"; }\n\n.fa-users:before {\n  content: \"\\f0c0\"; }\n\n.fa-ussunnah:before {\n  content: \"\\f407\"; }\n\n.fa-utensil-spoon:before {\n  content: \"\\f2e5\"; }\n\n.fa-utensils:before {\n  content: \"\\f2e7\"; }\n\n.fa-vaadin:before {\n  content: \"\\f408\"; }\n\n.fa-venus:before {\n  content: \"\\f221\"; }\n\n.fa-venus-double:before {\n  content: \"\\f226\"; }\n\n.fa-venus-mars:before {\n  content: \"\\f228\"; }\n\n.fa-viacoin:before {\n  content: \"\\f237\"; }\n\n.fa-viadeo:before {\n  content: \"\\f2a9\"; }\n\n.fa-viadeo-square:before {\n  content: \"\\f2aa\"; }\n\n.fa-viber:before {\n  content: \"\\f409\"; }\n\n.fa-video:before {\n  content: \"\\f03d\"; }\n\n.fa-vimeo:before {\n  content: \"\\f40a\"; }\n\n.fa-vimeo-square:before {\n  content: \"\\f194\"; }\n\n.fa-vimeo-v:before {\n  content: \"\\f27d\"; }\n\n.fa-vine:before {\n  content: \"\\f1ca\"; }\n\n.fa-vk:before {\n  content: \"\\f189\"; }\n\n.fa-vnv:before {\n  content: \"\\f40b\"; }\n\n.fa-volleyball-ball:before {\n  content: \"\\f45f\"; }\n\n.fa-volume-down:before {\n  content: \"\\f027\"; }\n\n.fa-volume-off:before {\n  content: \"\\f026\"; }\n\n.fa-volume-up:before {\n  content: \"\\f028\"; }\n\n.fa-vuejs:before {\n  content: \"\\f41f\"; }\n\n.fa-warehouse:before {\n  content: \"\\f494\"; }\n\n.fa-weibo:before {\n  content: \"\\f18a\"; }\n\n.fa-weight:before {\n  content: \"\\f496\"; }\n\n.fa-weixin:before {\n  content: \"\\f1d7\"; }\n\n.fa-whatsapp:before {\n  content: \"\\f232\"; }\n\n.fa-whatsapp-square:before {\n  content: \"\\f40c\"; }\n\n.fa-wheelchair:before {\n  content: \"\\f193\"; }\n\n.fa-whmcs:before {\n  content: \"\\f40d\"; }\n\n.fa-wifi:before {\n  content: \"\\f1eb\"; }\n\n.fa-wikipedia-w:before {\n  content: \"\\f266\"; }\n\n.fa-window-close:before {\n  content: \"\\f410\"; }\n\n.fa-window-maximize:before {\n  content: \"\\f2d0\"; }\n\n.fa-window-minimize:before {\n  content: \"\\f2d1\"; }\n\n.fa-window-restore:before {\n  content: \"\\f2d2\"; }\n\n.fa-windows:before {\n  content: \"\\f17a\"; }\n\n.fa-won-sign:before {\n  content: \"\\f159\"; }\n\n.fa-wordpress:before {\n  content: \"\\f19a\"; }\n\n.fa-wordpress-simple:before {\n  content: \"\\f411\"; }\n\n.fa-wpbeginner:before {\n  content: \"\\f297\"; }\n\n.fa-wpexplorer:before {\n  content: \"\\f2de\"; }\n\n.fa-wpforms:before {\n  content: \"\\f298\"; }\n\n.fa-wrench:before {\n  content: \"\\f0ad\"; }\n\n.fa-xbox:before {\n  content: \"\\f412\"; }\n\n.fa-xing:before {\n  content: \"\\f168\"; }\n\n.fa-xing-square:before {\n  content: \"\\f169\"; }\n\n.fa-y-combinator:before {\n  content: \"\\f23b\"; }\n\n.fa-yahoo:before {\n  content: \"\\f19e\"; }\n\n.fa-yandex:before {\n  content: \"\\f413\"; }\n\n.fa-yandex-international:before {\n  content: \"\\f414\"; }\n\n.fa-yelp:before {\n  content: \"\\f1e9\"; }\n\n.fa-yen-sign:before {\n  content: \"\\f157\"; }\n\n.fa-yoast:before {\n  content: \"\\f2b1\"; }\n\n.fa-youtube:before {\n  content: \"\\f167\"; }\n\n.fa-youtube-square:before {\n  content: \"\\f431\"; }\n\n.sr-only {\n  border: 0;\n  clip: rect(0, 0, 0, 0);\n  height: 1px;\n  margin: -1px;\n  overflow: hidden;\n  padding: 0;\n  position: absolute;\n  width: 1px; }\n\n.sr-only-focusable:active, .sr-only-focusable:focus {\n  clip: auto;\n  height: auto;\n  margin: 0;\n  overflow: visible;\n  position: static;\n  width: auto; }\n@font-face {\n  font-family: 'Font Awesome 5 Brands';\n  font-style: normal;\n  font-weight: normal;\n  src: url(\"../webfonts/fa-brands-400.eot\");\n  src: url(\"../webfonts/fa-brands-400.eot?#iefix\") format(\"embedded-opentype\"), url(\"../webfonts/fa-brands-400.woff2\") format(\"woff2\"), url(\"../webfonts/fa-brands-400.woff\") format(\"woff\"), url(\"../webfonts/fa-brands-400.ttf\") format(\"truetype\"), url(\"../webfonts/fa-brands-400.svg#fontawesome\") format(\"svg\"); }\n\n.fab {\n  font-family: 'Font Awesome 5 Brands'; }\n@font-face {\n  font-family: 'Font Awesome 5 Free';\n  font-style: normal;\n  font-weight: 400;\n  src: url(\"../webfonts/fa-regular-400.eot\");\n  src: url(\"../webfonts/fa-regular-400.eot?#iefix\") format(\"embedded-opentype\"), url(\"../webfonts/fa-regular-400.woff2\") format(\"woff2\"), url(\"../webfonts/fa-regular-400.woff\") format(\"woff\"), url(\"../webfonts/fa-regular-400.ttf\") format(\"truetype\"), url(\"../webfonts/fa-regular-400.svg#fontawesome\") format(\"svg\"); }\n\n.far {\n  font-family: 'Font Awesome 5 Free';\n  font-weight: 400; }\n@font-face {\n  font-family: 'Font Awesome 5 Free';\n  font-style: normal;\n  font-weight: 900;\n  src: url(\"../webfonts/fa-solid-900.eot\");\n  src: url(\"../webfonts/fa-solid-900.eot?#iefix\") format(\"embedded-opentype\"), url(\"../webfonts/fa-solid-900.woff2\") format(\"woff2\"), url(\"../webfonts/fa-solid-900.woff\") format(\"woff\"), url(\"../webfonts/fa-solid-900.ttf\") format(\"truetype\"), url(\"../webfonts/fa-solid-900.svg#fontawesome\") format(\"svg\"); }\n\n.fa,\n.fas {\n  font-family: 'Font Awesome 5 Free';\n  font-weight: 900; }\n"
  },
  {
    "path": "src/sourceDev.WebApp/SharedThemes/sandstone/wwwroot/css/site.css",
    "content": "﻿html {\n    position: relative;\n    min-height: 100%;\n}\n\nbody {\n    min-height: 100vh;\n    padding-top: 142px;\n}\n\n\n#newPostLink {\n    position: absolute;\n    top: 170px;\n    right: 0px;\n}\n\n#editPostLink {\n    position: absolute;\n    top: 200px;\n    right: 0px;\n}\n\n#unpublishPostLink {\n    position: absolute;\n    top: 230px !important;\n    right: 0px !important;\n}\n\n#pageManagerLink {\n    position: absolute;\n    top: 170px;\n    right: 0px;\n}\n\n#newPageLink {\n    position: absolute;\n    top: 200px;\n    right: 0px;\n}\n\n#editPageLink {\n    position: absolute;\n    top: 230px;\n    right: 0px\n}\n\n#unpublishPageLink {\n    position: absolute;\n    top: 260px !important;\n    right: 0px !important\n}\n\n#sidenavtoggle {\n    position: absolute;\n    top: 220px;\n    right: 5px;\n}\n\n\n\n@media screen and (max-width: 812px) {\n    #sidenavtoggle,\n    #sidenavmenu {\n        display: none;\n    }\n}\n\n.flex-fill {\n    flex: 1 1 auto !important;\n}\n\n\n.carousel-caption p {\n    font-size: 20px;\n    line-height: 1.4;\n}\n\n@media screen and (max-width: 768px) {\n    .carousel-caption {\n        display: none\n    }\n}\n\n\n\n\nimg, video, iframe {\n    max-width: 100%;\n}\n\ntd img, video, iframe {\n    max-width: none;\n}\n\n\n\n.table td, .table th {\n    vertical-align: inherit;\n}\n\n/******** jquery smartmenu bootstrap 4 ******/\n/* Carets in collapsible mode (make them look like +/- buttons) */\n.navbar-nav.sm-collapsible .sub-arrow {\n    position: absolute;\n    top: 50%;\n    right: 0;\n    margin: -0.7em 0.5em 0 0;\n    border: 1px solid rgba(0, 0, 0, .1);\n    border-radius: .25rem;\n    padding: 0;\n    width: 2em;\n    height: 1.4em;\n    font-size: 1.25rem;\n    line-height: 1.2em;\n    text-align: center;\n}\n\n    .navbar-nav.sm-collapsible .sub-arrow::before {\n        content: '+';\n    }\n\n.navbar-nav.sm-collapsible .show > a > .sub-arrow::before {\n    content: '-';\n}\n\n.navbar-dark .navbar-nav.sm-collapsible .nav-link .sub-arrow {\n    border-color: rgba(255, 255, 255, .1);\n}\n/* make sure there's room for the carets */\n.navbar-nav.sm-collapsible .has-submenu {\n    padding-right: 3em;\n}\n/* keep the carets properly positioned */\n.navbar-nav.sm-collapsible .nav-link,\n.navbar-nav.sm-collapsible .dropdown-item {\n    position: relative;\n}\n\n\n/* Nav carets in expanded mode */\n.navbar-nav:not(.sm-collapsible) .nav-link .sub-arrow {\n    display: inline-block;\n    width: 0;\n    height: 0;\n    margin-left: .255em;\n    vertical-align: .255em;\n    border-top: .3em solid;\n    border-right: .3em solid transparent;\n    border-left: .3em solid transparent;\n}\n/* point the arrows up for .fixed-bottom navbars */\n.fixed-bottom .navbar-nav:not(.sm-collapsible) .nav-link .sub-arrow,\n.fixed-bottom .navbar-nav:not(.sm-collapsible):not([data-sm-skip]) .dropdown-toggle::after {\n    border-top: 0;\n    border-bottom: .3em solid;\n}\n\n\n/* Dropdown carets in expanded mode */\n.navbar-nav:not(.sm-collapsible) .dropdown-item .sub-arrow,\n.navbar-nav:not(.sm-collapsible):not([data-sm-skip]) .dropdown-menu .dropdown-toggle::after {\n    position: absolute;\n    top: 50%;\n    right: 0;\n    width: 0;\n    height: 0;\n    margin-top: -.3em;\n    margin-right: 1em;\n    border-top: .3em solid transparent;\n    border-bottom: .3em solid transparent;\n    border-left: .3em solid;\n}\n/* make sure there's room for the carets */\n.navbar-nav:not(.sm-collapsible) .dropdown-item.has-submenu {\n    padding-right: 2em;\n}\n\n\n/* Scrolling arrows for tall menus */\n.navbar-nav .scroll-up,\n.navbar-nav .scroll-down {\n    position: absolute;\n    display: none;\n    visibility: hidden;\n    height: 20px;\n    overflow: hidden;\n    text-align: center;\n}\n\n.navbar-nav .scroll-up-arrow,\n.navbar-nav .scroll-down-arrow {\n    position: absolute;\n    top: -2px;\n    left: 50%;\n    margin-left: -8px;\n    width: 0;\n    height: 0;\n    overflow: hidden;\n    border-top: 7px solid transparent;\n    border-right: 7px solid transparent;\n    border-bottom: 7px solid;\n    border-left: 7px solid transparent;\n}\n\n.navbar-nav .scroll-down-arrow {\n    top: 6px;\n    border-top: 7px solid;\n    border-right: 7px solid transparent;\n    border-bottom: 7px solid transparent;\n    border-left: 7px solid transparent;\n}\n\n\n/* Add some spacing for 2+ level sub menus in collapsible mode */\n.navbar-nav.sm-collapsible .dropdown-menu .dropdown-menu {\n    margin: .5em;\n}\n\n\n/* Fix SmartMenus sub menus auto width (subMenusMinWidth/subMenusMaxWidth options) */\n.navbar-nav:not([data-sm-skip]) .dropdown-item {\n    white-space: normal;\n}\n\n.navbar-nav:not(.sm-collapsible) .sm-nowrap > li > .dropdown-item {\n    white-space: nowrap;\n}\n/******** end jquery smart menu bootstrap-4 *****************/\n\n.brand-header {\n    height: 100px;\n}\n\nheader .navbar {\n    top: 100px;\n}\n"
  },
  {
    "path": "src/sourceDev.WebApp/SharedThemes/sandstone/wwwroot/js/bootstrap.bundle.js",
    "content": "/*!\n  * Bootstrap v5.0.2 (https://getbootstrap.com/)\n  * Copyright 2011-2021 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)\n  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n  */\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n  typeof define === 'function' && define.amd ? define(factory) :\n  (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.bootstrap = factory());\n}(this, (function () { 'use strict';\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): dom/selector-engine.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n  const NODE_TEXT = 3;\n  const SelectorEngine = {\n    find(selector, element = document.documentElement) {\n      return [].concat(...Element.prototype.querySelectorAll.call(element, selector));\n    },\n\n    findOne(selector, element = document.documentElement) {\n      return Element.prototype.querySelector.call(element, selector);\n    },\n\n    children(element, selector) {\n      return [].concat(...element.children).filter(child => child.matches(selector));\n    },\n\n    parents(element, selector) {\n      const parents = [];\n      let ancestor = element.parentNode;\n\n      while (ancestor && ancestor.nodeType === Node.ELEMENT_NODE && ancestor.nodeType !== NODE_TEXT) {\n        if (ancestor.matches(selector)) {\n          parents.push(ancestor);\n        }\n\n        ancestor = ancestor.parentNode;\n      }\n\n      return parents;\n    },\n\n    prev(element, selector) {\n      let previous = element.previousElementSibling;\n\n      while (previous) {\n        if (previous.matches(selector)) {\n          return [previous];\n        }\n\n        previous = previous.previousElementSibling;\n      }\n\n      return [];\n    },\n\n    next(element, selector) {\n      let next = element.nextElementSibling;\n\n      while (next) {\n        if (next.matches(selector)) {\n          return [next];\n        }\n\n        next = next.nextElementSibling;\n      }\n\n      return [];\n    }\n\n  };\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): util/index.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n\n  const MAX_UID = 1000000;\n  const MILLISECONDS_MULTIPLIER = 1000;\n  const TRANSITION_END = 'transitionend'; // Shoutout AngusCroll (https://goo.gl/pxwQGp)\n\n  const toType = obj => {\n    if (obj === null || obj === undefined) {\n      return `${obj}`;\n    }\n\n    return {}.toString.call(obj).match(/\\s([a-z]+)/i)[1].toLowerCase();\n  };\n  /**\n   * --------------------------------------------------------------------------\n   * Public Util Api\n   * --------------------------------------------------------------------------\n   */\n\n\n  const getUID = prefix => {\n    do {\n      prefix += Math.floor(Math.random() * MAX_UID);\n    } while (document.getElementById(prefix));\n\n    return prefix;\n  };\n\n  const getSelector = element => {\n    let selector = element.getAttribute('data-bs-target');\n\n    if (!selector || selector === '#') {\n      let hrefAttr = element.getAttribute('href'); // The only valid content that could double as a selector are IDs or classes,\n      // so everything starting with `#` or `.`. If a \"real\" URL is used as the selector,\n      // `document.querySelector` will rightfully complain it is invalid.\n      // See https://github.com/twbs/bootstrap/issues/32273\n\n      if (!hrefAttr || !hrefAttr.includes('#') && !hrefAttr.startsWith('.')) {\n        return null;\n      } // Just in case some CMS puts out a full URL with the anchor appended\n\n\n      if (hrefAttr.includes('#') && !hrefAttr.startsWith('#')) {\n        hrefAttr = `#${hrefAttr.split('#')[1]}`;\n      }\n\n      selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : null;\n    }\n\n    return selector;\n  };\n\n  const getSelectorFromElement = element => {\n    const selector = getSelector(element);\n\n    if (selector) {\n      return document.querySelector(selector) ? selector : null;\n    }\n\n    return null;\n  };\n\n  const getElementFromSelector = element => {\n    const selector = getSelector(element);\n    return selector ? document.querySelector(selector) : null;\n  };\n\n  const getTransitionDurationFromElement = element => {\n    if (!element) {\n      return 0;\n    } // Get transition-duration of the element\n\n\n    let {\n      transitionDuration,\n      transitionDelay\n    } = window.getComputedStyle(element);\n    const floatTransitionDuration = Number.parseFloat(transitionDuration);\n    const floatTransitionDelay = Number.parseFloat(transitionDelay); // Return 0 if element or transition duration is not found\n\n    if (!floatTransitionDuration && !floatTransitionDelay) {\n      return 0;\n    } // If multiple durations are defined, take the first\n\n\n    transitionDuration = transitionDuration.split(',')[0];\n    transitionDelay = transitionDelay.split(',')[0];\n    return (Number.parseFloat(transitionDuration) + Number.parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER;\n  };\n\n  const triggerTransitionEnd = element => {\n    element.dispatchEvent(new Event(TRANSITION_END));\n  };\n\n  const isElement$1 = obj => {\n    if (!obj || typeof obj !== 'object') {\n      return false;\n    }\n\n    if (typeof obj.jquery !== 'undefined') {\n      obj = obj[0];\n    }\n\n    return typeof obj.nodeType !== 'undefined';\n  };\n\n  const getElement = obj => {\n    if (isElement$1(obj)) {\n      // it's a jQuery object or a node element\n      return obj.jquery ? obj[0] : obj;\n    }\n\n    if (typeof obj === 'string' && obj.length > 0) {\n      return SelectorEngine.findOne(obj);\n    }\n\n    return null;\n  };\n\n  const typeCheckConfig = (componentName, config, configTypes) => {\n    Object.keys(configTypes).forEach(property => {\n      const expectedTypes = configTypes[property];\n      const value = config[property];\n      const valueType = value && isElement$1(value) ? 'element' : toType(value);\n\n      if (!new RegExp(expectedTypes).test(valueType)) {\n        throw new TypeError(`${componentName.toUpperCase()}: Option \"${property}\" provided type \"${valueType}\" but expected type \"${expectedTypes}\".`);\n      }\n    });\n  };\n\n  const isVisible = element => {\n    if (!isElement$1(element) || element.getClientRects().length === 0) {\n      return false;\n    }\n\n    return getComputedStyle(element).getPropertyValue('visibility') === 'visible';\n  };\n\n  const isDisabled = element => {\n    if (!element || element.nodeType !== Node.ELEMENT_NODE) {\n      return true;\n    }\n\n    if (element.classList.contains('disabled')) {\n      return true;\n    }\n\n    if (typeof element.disabled !== 'undefined') {\n      return element.disabled;\n    }\n\n    return element.hasAttribute('disabled') && element.getAttribute('disabled') !== 'false';\n  };\n\n  const findShadowRoot = element => {\n    if (!document.documentElement.attachShadow) {\n      return null;\n    } // Can find the shadow root otherwise it'll return the document\n\n\n    if (typeof element.getRootNode === 'function') {\n      const root = element.getRootNode();\n      return root instanceof ShadowRoot ? root : null;\n    }\n\n    if (element instanceof ShadowRoot) {\n      return element;\n    } // when we don't find a shadow root\n\n\n    if (!element.parentNode) {\n      return null;\n    }\n\n    return findShadowRoot(element.parentNode);\n  };\n\n  const noop = () => {};\n\n  const reflow = element => element.offsetHeight;\n\n  const getjQuery = () => {\n    const {\n      jQuery\n    } = window;\n\n    if (jQuery && !document.body.hasAttribute('data-bs-no-jquery')) {\n      return jQuery;\n    }\n\n    return null;\n  };\n\n  const DOMContentLoadedCallbacks = [];\n\n  const onDOMContentLoaded = callback => {\n    if (document.readyState === 'loading') {\n      // add listener on the first call when the document is in loading state\n      if (!DOMContentLoadedCallbacks.length) {\n        document.addEventListener('DOMContentLoaded', () => {\n          DOMContentLoadedCallbacks.forEach(callback => callback());\n        });\n      }\n\n      DOMContentLoadedCallbacks.push(callback);\n    } else {\n      callback();\n    }\n  };\n\n  const isRTL = () => document.documentElement.dir === 'rtl';\n\n  const defineJQueryPlugin = plugin => {\n    onDOMContentLoaded(() => {\n      const $ = getjQuery();\n      /* istanbul ignore if */\n\n      if ($) {\n        const name = plugin.NAME;\n        const JQUERY_NO_CONFLICT = $.fn[name];\n        $.fn[name] = plugin.jQueryInterface;\n        $.fn[name].Constructor = plugin;\n\n        $.fn[name].noConflict = () => {\n          $.fn[name] = JQUERY_NO_CONFLICT;\n          return plugin.jQueryInterface;\n        };\n      }\n    });\n  };\n\n  const execute = callback => {\n    if (typeof callback === 'function') {\n      callback();\n    }\n  };\n\n  const executeAfterTransition = (callback, transitionElement, waitForTransition = true) => {\n    if (!waitForTransition) {\n      execute(callback);\n      return;\n    }\n\n    const durationPadding = 5;\n    const emulatedDuration = getTransitionDurationFromElement(transitionElement) + durationPadding;\n    let called = false;\n\n    const handler = ({\n      target\n    }) => {\n      if (target !== transitionElement) {\n        return;\n      }\n\n      called = true;\n      transitionElement.removeEventListener(TRANSITION_END, handler);\n      execute(callback);\n    };\n\n    transitionElement.addEventListener(TRANSITION_END, handler);\n    setTimeout(() => {\n      if (!called) {\n        triggerTransitionEnd(transitionElement);\n      }\n    }, emulatedDuration);\n  };\n  /**\n   * Return the previous/next element of a list.\n   *\n   * @param {array} list    The list of elements\n   * @param activeElement   The active element\n   * @param shouldGetNext   Choose to get next or previous element\n   * @param isCycleAllowed\n   * @return {Element|elem} The proper element\n   */\n\n\n  const getNextActiveElement = (list, activeElement, shouldGetNext, isCycleAllowed) => {\n    let index = list.indexOf(activeElement); // if the element does not exist in the list return an element depending on the direction and if cycle is allowed\n\n    if (index === -1) {\n      return list[!shouldGetNext && isCycleAllowed ? list.length - 1 : 0];\n    }\n\n    const listLength = list.length;\n    index += shouldGetNext ? 1 : -1;\n\n    if (isCycleAllowed) {\n      index = (index + listLength) % listLength;\n    }\n\n    return list[Math.max(0, Math.min(index, listLength - 1))];\n  };\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): dom/event-handler.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const namespaceRegex = /[^.]*(?=\\..*)\\.|.*/;\n  const stripNameRegex = /\\..*/;\n  const stripUidRegex = /::\\d+$/;\n  const eventRegistry = {}; // Events storage\n\n  let uidEvent = 1;\n  const customEvents = {\n    mouseenter: 'mouseover',\n    mouseleave: 'mouseout'\n  };\n  const customEventsRegex = /^(mouseenter|mouseleave)/i;\n  const nativeEvents = new Set(['click', 'dblclick', 'mouseup', 'mousedown', 'contextmenu', 'mousewheel', 'DOMMouseScroll', 'mouseover', 'mouseout', 'mousemove', 'selectstart', 'selectend', 'keydown', 'keypress', 'keyup', 'orientationchange', 'touchstart', 'touchmove', 'touchend', 'touchcancel', 'pointerdown', 'pointermove', 'pointerup', 'pointerleave', 'pointercancel', 'gesturestart', 'gesturechange', 'gestureend', 'focus', 'blur', 'change', 'reset', 'select', 'submit', 'focusin', 'focusout', 'load', 'unload', 'beforeunload', 'resize', 'move', 'DOMContentLoaded', 'readystatechange', 'error', 'abort', 'scroll']);\n  /**\n   * ------------------------------------------------------------------------\n   * Private methods\n   * ------------------------------------------------------------------------\n   */\n\n  function getUidEvent(element, uid) {\n    return uid && `${uid}::${uidEvent++}` || element.uidEvent || uidEvent++;\n  }\n\n  function getEvent(element) {\n    const uid = getUidEvent(element);\n    element.uidEvent = uid;\n    eventRegistry[uid] = eventRegistry[uid] || {};\n    return eventRegistry[uid];\n  }\n\n  function bootstrapHandler(element, fn) {\n    return function handler(event) {\n      event.delegateTarget = element;\n\n      if (handler.oneOff) {\n        EventHandler.off(element, event.type, fn);\n      }\n\n      return fn.apply(element, [event]);\n    };\n  }\n\n  function bootstrapDelegationHandler(element, selector, fn) {\n    return function handler(event) {\n      const domElements = element.querySelectorAll(selector);\n\n      for (let {\n        target\n      } = event; target && target !== this; target = target.parentNode) {\n        for (let i = domElements.length; i--;) {\n          if (domElements[i] === target) {\n            event.delegateTarget = target;\n\n            if (handler.oneOff) {\n              // eslint-disable-next-line unicorn/consistent-destructuring\n              EventHandler.off(element, event.type, selector, fn);\n            }\n\n            return fn.apply(target, [event]);\n          }\n        }\n      } // To please ESLint\n\n\n      return null;\n    };\n  }\n\n  function findHandler(events, handler, delegationSelector = null) {\n    const uidEventList = Object.keys(events);\n\n    for (let i = 0, len = uidEventList.length; i < len; i++) {\n      const event = events[uidEventList[i]];\n\n      if (event.originalHandler === handler && event.delegationSelector === delegationSelector) {\n        return event;\n      }\n    }\n\n    return null;\n  }\n\n  function normalizeParams(originalTypeEvent, handler, delegationFn) {\n    const delegation = typeof handler === 'string';\n    const originalHandler = delegation ? delegationFn : handler;\n    let typeEvent = getTypeEvent(originalTypeEvent);\n    const isNative = nativeEvents.has(typeEvent);\n\n    if (!isNative) {\n      typeEvent = originalTypeEvent;\n    }\n\n    return [delegation, originalHandler, typeEvent];\n  }\n\n  function addHandler(element, originalTypeEvent, handler, delegationFn, oneOff) {\n    if (typeof originalTypeEvent !== 'string' || !element) {\n      return;\n    }\n\n    if (!handler) {\n      handler = delegationFn;\n      delegationFn = null;\n    } // in case of mouseenter or mouseleave wrap the handler within a function that checks for its DOM position\n    // this prevents the handler from being dispatched the same way as mouseover or mouseout does\n\n\n    if (customEventsRegex.test(originalTypeEvent)) {\n      const wrapFn = fn => {\n        return function (event) {\n          if (!event.relatedTarget || event.relatedTarget !== event.delegateTarget && !event.delegateTarget.contains(event.relatedTarget)) {\n            return fn.call(this, event);\n          }\n        };\n      };\n\n      if (delegationFn) {\n        delegationFn = wrapFn(delegationFn);\n      } else {\n        handler = wrapFn(handler);\n      }\n    }\n\n    const [delegation, originalHandler, typeEvent] = normalizeParams(originalTypeEvent, handler, delegationFn);\n    const events = getEvent(element);\n    const handlers = events[typeEvent] || (events[typeEvent] = {});\n    const previousFn = findHandler(handlers, originalHandler, delegation ? handler : null);\n\n    if (previousFn) {\n      previousFn.oneOff = previousFn.oneOff && oneOff;\n      return;\n    }\n\n    const uid = getUidEvent(originalHandler, originalTypeEvent.replace(namespaceRegex, ''));\n    const fn = delegation ? bootstrapDelegationHandler(element, handler, delegationFn) : bootstrapHandler(element, handler);\n    fn.delegationSelector = delegation ? handler : null;\n    fn.originalHandler = originalHandler;\n    fn.oneOff = oneOff;\n    fn.uidEvent = uid;\n    handlers[uid] = fn;\n    element.addEventListener(typeEvent, fn, delegation);\n  }\n\n  function removeHandler(element, events, typeEvent, handler, delegationSelector) {\n    const fn = findHandler(events[typeEvent], handler, delegationSelector);\n\n    if (!fn) {\n      return;\n    }\n\n    element.removeEventListener(typeEvent, fn, Boolean(delegationSelector));\n    delete events[typeEvent][fn.uidEvent];\n  }\n\n  function removeNamespacedHandlers(element, events, typeEvent, namespace) {\n    const storeElementEvent = events[typeEvent] || {};\n    Object.keys(storeElementEvent).forEach(handlerKey => {\n      if (handlerKey.includes(namespace)) {\n        const event = storeElementEvent[handlerKey];\n        removeHandler(element, events, typeEvent, event.originalHandler, event.delegationSelector);\n      }\n    });\n  }\n\n  function getTypeEvent(event) {\n    // allow to get the native events from namespaced events ('click.bs.button' --> 'click')\n    event = event.replace(stripNameRegex, '');\n    return customEvents[event] || event;\n  }\n\n  const EventHandler = {\n    on(element, event, handler, delegationFn) {\n      addHandler(element, event, handler, delegationFn, false);\n    },\n\n    one(element, event, handler, delegationFn) {\n      addHandler(element, event, handler, delegationFn, true);\n    },\n\n    off(element, originalTypeEvent, handler, delegationFn) {\n      if (typeof originalTypeEvent !== 'string' || !element) {\n        return;\n      }\n\n      const [delegation, originalHandler, typeEvent] = normalizeParams(originalTypeEvent, handler, delegationFn);\n      const inNamespace = typeEvent !== originalTypeEvent;\n      const events = getEvent(element);\n      const isNamespace = originalTypeEvent.startsWith('.');\n\n      if (typeof originalHandler !== 'undefined') {\n        // Simplest case: handler is passed, remove that listener ONLY.\n        if (!events || !events[typeEvent]) {\n          return;\n        }\n\n        removeHandler(element, events, typeEvent, originalHandler, delegation ? handler : null);\n        return;\n      }\n\n      if (isNamespace) {\n        Object.keys(events).forEach(elementEvent => {\n          removeNamespacedHandlers(element, events, elementEvent, originalTypeEvent.slice(1));\n        });\n      }\n\n      const storeElementEvent = events[typeEvent] || {};\n      Object.keys(storeElementEvent).forEach(keyHandlers => {\n        const handlerKey = keyHandlers.replace(stripUidRegex, '');\n\n        if (!inNamespace || originalTypeEvent.includes(handlerKey)) {\n          const event = storeElementEvent[keyHandlers];\n          removeHandler(element, events, typeEvent, event.originalHandler, event.delegationSelector);\n        }\n      });\n    },\n\n    trigger(element, event, args) {\n      if (typeof event !== 'string' || !element) {\n        return null;\n      }\n\n      const $ = getjQuery();\n      const typeEvent = getTypeEvent(event);\n      const inNamespace = event !== typeEvent;\n      const isNative = nativeEvents.has(typeEvent);\n      let jQueryEvent;\n      let bubbles = true;\n      let nativeDispatch = true;\n      let defaultPrevented = false;\n      let evt = null;\n\n      if (inNamespace && $) {\n        jQueryEvent = $.Event(event, args);\n        $(element).trigger(jQueryEvent);\n        bubbles = !jQueryEvent.isPropagationStopped();\n        nativeDispatch = !jQueryEvent.isImmediatePropagationStopped();\n        defaultPrevented = jQueryEvent.isDefaultPrevented();\n      }\n\n      if (isNative) {\n        evt = document.createEvent('HTMLEvents');\n        evt.initEvent(typeEvent, bubbles, true);\n      } else {\n        evt = new CustomEvent(event, {\n          bubbles,\n          cancelable: true\n        });\n      } // merge custom information in our event\n\n\n      if (typeof args !== 'undefined') {\n        Object.keys(args).forEach(key => {\n          Object.defineProperty(evt, key, {\n            get() {\n              return args[key];\n            }\n\n          });\n        });\n      }\n\n      if (defaultPrevented) {\n        evt.preventDefault();\n      }\n\n      if (nativeDispatch) {\n        element.dispatchEvent(evt);\n      }\n\n      if (evt.defaultPrevented && typeof jQueryEvent !== 'undefined') {\n        jQueryEvent.preventDefault();\n      }\n\n      return evt;\n    }\n\n  };\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): dom/data.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n  const elementMap = new Map();\n  var Data = {\n    set(element, key, instance) {\n      if (!elementMap.has(element)) {\n        elementMap.set(element, new Map());\n      }\n\n      const instanceMap = elementMap.get(element); // make it clear we only want one instance per element\n      // can be removed later when multiple key/instances are fine to be used\n\n      if (!instanceMap.has(key) && instanceMap.size !== 0) {\n        // eslint-disable-next-line no-console\n        console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(instanceMap.keys())[0]}.`);\n        return;\n      }\n\n      instanceMap.set(key, instance);\n    },\n\n    get(element, key) {\n      if (elementMap.has(element)) {\n        return elementMap.get(element).get(key) || null;\n      }\n\n      return null;\n    },\n\n    remove(element, key) {\n      if (!elementMap.has(element)) {\n        return;\n      }\n\n      const instanceMap = elementMap.get(element);\n      instanceMap.delete(key); // free up element references if there are no instances left for an element\n\n      if (instanceMap.size === 0) {\n        elementMap.delete(element);\n      }\n    }\n\n  };\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): base-component.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const VERSION = '5.0.2';\n\n  class BaseComponent {\n    constructor(element) {\n      element = getElement(element);\n\n      if (!element) {\n        return;\n      }\n\n      this._element = element;\n      Data.set(this._element, this.constructor.DATA_KEY, this);\n    }\n\n    dispose() {\n      Data.remove(this._element, this.constructor.DATA_KEY);\n      EventHandler.off(this._element, this.constructor.EVENT_KEY);\n      Object.getOwnPropertyNames(this).forEach(propertyName => {\n        this[propertyName] = null;\n      });\n    }\n\n    _queueCallback(callback, element, isAnimated = true) {\n      executeAfterTransition(callback, element, isAnimated);\n    }\n    /** Static */\n\n\n    static getInstance(element) {\n      return Data.get(element, this.DATA_KEY);\n    }\n\n    static getOrCreateInstance(element, config = {}) {\n      return this.getInstance(element) || new this(element, typeof config === 'object' ? config : null);\n    }\n\n    static get VERSION() {\n      return VERSION;\n    }\n\n    static get NAME() {\n      throw new Error('You have to implement the static method \"NAME\", for each component!');\n    }\n\n    static get DATA_KEY() {\n      return `bs.${this.NAME}`;\n    }\n\n    static get EVENT_KEY() {\n      return `.${this.DATA_KEY}`;\n    }\n\n  }\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): alert.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$c = 'alert';\n  const DATA_KEY$b = 'bs.alert';\n  const EVENT_KEY$b = `.${DATA_KEY$b}`;\n  const DATA_API_KEY$8 = '.data-api';\n  const SELECTOR_DISMISS = '[data-bs-dismiss=\"alert\"]';\n  const EVENT_CLOSE = `close${EVENT_KEY$b}`;\n  const EVENT_CLOSED = `closed${EVENT_KEY$b}`;\n  const EVENT_CLICK_DATA_API$7 = `click${EVENT_KEY$b}${DATA_API_KEY$8}`;\n  const CLASS_NAME_ALERT = 'alert';\n  const CLASS_NAME_FADE$6 = 'fade';\n  const CLASS_NAME_SHOW$9 = 'show';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Alert extends BaseComponent {\n    // Getters\n    static get NAME() {\n      return NAME$c;\n    } // Public\n\n\n    close(element) {\n      const rootElement = element ? this._getRootElement(element) : this._element;\n\n      const customEvent = this._triggerCloseEvent(rootElement);\n\n      if (customEvent === null || customEvent.defaultPrevented) {\n        return;\n      }\n\n      this._removeElement(rootElement);\n    } // Private\n\n\n    _getRootElement(element) {\n      return getElementFromSelector(element) || element.closest(`.${CLASS_NAME_ALERT}`);\n    }\n\n    _triggerCloseEvent(element) {\n      return EventHandler.trigger(element, EVENT_CLOSE);\n    }\n\n    _removeElement(element) {\n      element.classList.remove(CLASS_NAME_SHOW$9);\n      const isAnimated = element.classList.contains(CLASS_NAME_FADE$6);\n\n      this._queueCallback(() => this._destroyElement(element), element, isAnimated);\n    }\n\n    _destroyElement(element) {\n      element.remove();\n      EventHandler.trigger(element, EVENT_CLOSED);\n    } // Static\n\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = Alert.getOrCreateInstance(this);\n\n        if (config === 'close') {\n          data[config](this);\n        }\n      });\n    }\n\n    static handleDismiss(alertInstance) {\n      return function (event) {\n        if (event) {\n          event.preventDefault();\n        }\n\n        alertInstance.close(this);\n      };\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(document, EVENT_CLICK_DATA_API$7, SELECTOR_DISMISS, Alert.handleDismiss(new Alert()));\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Alert to jQuery only if jQuery is present\n   */\n\n  defineJQueryPlugin(Alert);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): button.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$b = 'button';\n  const DATA_KEY$a = 'bs.button';\n  const EVENT_KEY$a = `.${DATA_KEY$a}`;\n  const DATA_API_KEY$7 = '.data-api';\n  const CLASS_NAME_ACTIVE$3 = 'active';\n  const SELECTOR_DATA_TOGGLE$5 = '[data-bs-toggle=\"button\"]';\n  const EVENT_CLICK_DATA_API$6 = `click${EVENT_KEY$a}${DATA_API_KEY$7}`;\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Button extends BaseComponent {\n    // Getters\n    static get NAME() {\n      return NAME$b;\n    } // Public\n\n\n    toggle() {\n      // Toggle class and sync the `aria-pressed` attribute with the return value of the `.toggle()` method\n      this._element.setAttribute('aria-pressed', this._element.classList.toggle(CLASS_NAME_ACTIVE$3));\n    } // Static\n\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = Button.getOrCreateInstance(this);\n\n        if (config === 'toggle') {\n          data[config]();\n        }\n      });\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(document, EVENT_CLICK_DATA_API$6, SELECTOR_DATA_TOGGLE$5, event => {\n    event.preventDefault();\n    const button = event.target.closest(SELECTOR_DATA_TOGGLE$5);\n    const data = Button.getOrCreateInstance(button);\n    data.toggle();\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Button to jQuery only if jQuery is present\n   */\n\n  defineJQueryPlugin(Button);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): dom/manipulator.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  function normalizeData(val) {\n    if (val === 'true') {\n      return true;\n    }\n\n    if (val === 'false') {\n      return false;\n    }\n\n    if (val === Number(val).toString()) {\n      return Number(val);\n    }\n\n    if (val === '' || val === 'null') {\n      return null;\n    }\n\n    return val;\n  }\n\n  function normalizeDataKey(key) {\n    return key.replace(/[A-Z]/g, chr => `-${chr.toLowerCase()}`);\n  }\n\n  const Manipulator = {\n    setDataAttribute(element, key, value) {\n      element.setAttribute(`data-bs-${normalizeDataKey(key)}`, value);\n    },\n\n    removeDataAttribute(element, key) {\n      element.removeAttribute(`data-bs-${normalizeDataKey(key)}`);\n    },\n\n    getDataAttributes(element) {\n      if (!element) {\n        return {};\n      }\n\n      const attributes = {};\n      Object.keys(element.dataset).filter(key => key.startsWith('bs')).forEach(key => {\n        let pureKey = key.replace(/^bs/, '');\n        pureKey = pureKey.charAt(0).toLowerCase() + pureKey.slice(1, pureKey.length);\n        attributes[pureKey] = normalizeData(element.dataset[key]);\n      });\n      return attributes;\n    },\n\n    getDataAttribute(element, key) {\n      return normalizeData(element.getAttribute(`data-bs-${normalizeDataKey(key)}`));\n    },\n\n    offset(element) {\n      const rect = element.getBoundingClientRect();\n      return {\n        top: rect.top + document.body.scrollTop,\n        left: rect.left + document.body.scrollLeft\n      };\n    },\n\n    position(element) {\n      return {\n        top: element.offsetTop,\n        left: element.offsetLeft\n      };\n    }\n\n  };\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): carousel.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$a = 'carousel';\n  const DATA_KEY$9 = 'bs.carousel';\n  const EVENT_KEY$9 = `.${DATA_KEY$9}`;\n  const DATA_API_KEY$6 = '.data-api';\n  const ARROW_LEFT_KEY = 'ArrowLeft';\n  const ARROW_RIGHT_KEY = 'ArrowRight';\n  const TOUCHEVENT_COMPAT_WAIT = 500; // Time for mouse compat events to fire after touch\n\n  const SWIPE_THRESHOLD = 40;\n  const Default$9 = {\n    interval: 5000,\n    keyboard: true,\n    slide: false,\n    pause: 'hover',\n    wrap: true,\n    touch: true\n  };\n  const DefaultType$9 = {\n    interval: '(number|boolean)',\n    keyboard: 'boolean',\n    slide: '(boolean|string)',\n    pause: '(string|boolean)',\n    wrap: 'boolean',\n    touch: 'boolean'\n  };\n  const ORDER_NEXT = 'next';\n  const ORDER_PREV = 'prev';\n  const DIRECTION_LEFT = 'left';\n  const DIRECTION_RIGHT = 'right';\n  const KEY_TO_DIRECTION = {\n    [ARROW_LEFT_KEY]: DIRECTION_RIGHT,\n    [ARROW_RIGHT_KEY]: DIRECTION_LEFT\n  };\n  const EVENT_SLIDE = `slide${EVENT_KEY$9}`;\n  const EVENT_SLID = `slid${EVENT_KEY$9}`;\n  const EVENT_KEYDOWN = `keydown${EVENT_KEY$9}`;\n  const EVENT_MOUSEENTER = `mouseenter${EVENT_KEY$9}`;\n  const EVENT_MOUSELEAVE = `mouseleave${EVENT_KEY$9}`;\n  const EVENT_TOUCHSTART = `touchstart${EVENT_KEY$9}`;\n  const EVENT_TOUCHMOVE = `touchmove${EVENT_KEY$9}`;\n  const EVENT_TOUCHEND = `touchend${EVENT_KEY$9}`;\n  const EVENT_POINTERDOWN = `pointerdown${EVENT_KEY$9}`;\n  const EVENT_POINTERUP = `pointerup${EVENT_KEY$9}`;\n  const EVENT_DRAG_START = `dragstart${EVENT_KEY$9}`;\n  const EVENT_LOAD_DATA_API$2 = `load${EVENT_KEY$9}${DATA_API_KEY$6}`;\n  const EVENT_CLICK_DATA_API$5 = `click${EVENT_KEY$9}${DATA_API_KEY$6}`;\n  const CLASS_NAME_CAROUSEL = 'carousel';\n  const CLASS_NAME_ACTIVE$2 = 'active';\n  const CLASS_NAME_SLIDE = 'slide';\n  const CLASS_NAME_END = 'carousel-item-end';\n  const CLASS_NAME_START = 'carousel-item-start';\n  const CLASS_NAME_NEXT = 'carousel-item-next';\n  const CLASS_NAME_PREV = 'carousel-item-prev';\n  const CLASS_NAME_POINTER_EVENT = 'pointer-event';\n  const SELECTOR_ACTIVE$1 = '.active';\n  const SELECTOR_ACTIVE_ITEM = '.active.carousel-item';\n  const SELECTOR_ITEM = '.carousel-item';\n  const SELECTOR_ITEM_IMG = '.carousel-item img';\n  const SELECTOR_NEXT_PREV = '.carousel-item-next, .carousel-item-prev';\n  const SELECTOR_INDICATORS = '.carousel-indicators';\n  const SELECTOR_INDICATOR = '[data-bs-target]';\n  const SELECTOR_DATA_SLIDE = '[data-bs-slide], [data-bs-slide-to]';\n  const SELECTOR_DATA_RIDE = '[data-bs-ride=\"carousel\"]';\n  const POINTER_TYPE_TOUCH = 'touch';\n  const POINTER_TYPE_PEN = 'pen';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Carousel extends BaseComponent {\n    constructor(element, config) {\n      super(element);\n      this._items = null;\n      this._interval = null;\n      this._activeElement = null;\n      this._isPaused = false;\n      this._isSliding = false;\n      this.touchTimeout = null;\n      this.touchStartX = 0;\n      this.touchDeltaX = 0;\n      this._config = this._getConfig(config);\n      this._indicatorsElement = SelectorEngine.findOne(SELECTOR_INDICATORS, this._element);\n      this._touchSupported = 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0;\n      this._pointerEvent = Boolean(window.PointerEvent);\n\n      this._addEventListeners();\n    } // Getters\n\n\n    static get Default() {\n      return Default$9;\n    }\n\n    static get NAME() {\n      return NAME$a;\n    } // Public\n\n\n    next() {\n      this._slide(ORDER_NEXT);\n    }\n\n    nextWhenVisible() {\n      // Don't call next when the page isn't visible\n      // or the carousel or its parent isn't visible\n      if (!document.hidden && isVisible(this._element)) {\n        this.next();\n      }\n    }\n\n    prev() {\n      this._slide(ORDER_PREV);\n    }\n\n    pause(event) {\n      if (!event) {\n        this._isPaused = true;\n      }\n\n      if (SelectorEngine.findOne(SELECTOR_NEXT_PREV, this._element)) {\n        triggerTransitionEnd(this._element);\n        this.cycle(true);\n      }\n\n      clearInterval(this._interval);\n      this._interval = null;\n    }\n\n    cycle(event) {\n      if (!event) {\n        this._isPaused = false;\n      }\n\n      if (this._interval) {\n        clearInterval(this._interval);\n        this._interval = null;\n      }\n\n      if (this._config && this._config.interval && !this._isPaused) {\n        this._updateInterval();\n\n        this._interval = setInterval((document.visibilityState ? this.nextWhenVisible : this.next).bind(this), this._config.interval);\n      }\n    }\n\n    to(index) {\n      this._activeElement = SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element);\n\n      const activeIndex = this._getItemIndex(this._activeElement);\n\n      if (index > this._items.length - 1 || index < 0) {\n        return;\n      }\n\n      if (this._isSliding) {\n        EventHandler.one(this._element, EVENT_SLID, () => this.to(index));\n        return;\n      }\n\n      if (activeIndex === index) {\n        this.pause();\n        this.cycle();\n        return;\n      }\n\n      const order = index > activeIndex ? ORDER_NEXT : ORDER_PREV;\n\n      this._slide(order, this._items[index]);\n    } // Private\n\n\n    _getConfig(config) {\n      config = { ...Default$9,\n        ...Manipulator.getDataAttributes(this._element),\n        ...(typeof config === 'object' ? config : {})\n      };\n      typeCheckConfig(NAME$a, config, DefaultType$9);\n      return config;\n    }\n\n    _handleSwipe() {\n      const absDeltax = Math.abs(this.touchDeltaX);\n\n      if (absDeltax <= SWIPE_THRESHOLD) {\n        return;\n      }\n\n      const direction = absDeltax / this.touchDeltaX;\n      this.touchDeltaX = 0;\n\n      if (!direction) {\n        return;\n      }\n\n      this._slide(direction > 0 ? DIRECTION_RIGHT : DIRECTION_LEFT);\n    }\n\n    _addEventListeners() {\n      if (this._config.keyboard) {\n        EventHandler.on(this._element, EVENT_KEYDOWN, event => this._keydown(event));\n      }\n\n      if (this._config.pause === 'hover') {\n        EventHandler.on(this._element, EVENT_MOUSEENTER, event => this.pause(event));\n        EventHandler.on(this._element, EVENT_MOUSELEAVE, event => this.cycle(event));\n      }\n\n      if (this._config.touch && this._touchSupported) {\n        this._addTouchEventListeners();\n      }\n    }\n\n    _addTouchEventListeners() {\n      const start = event => {\n        if (this._pointerEvent && (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH)) {\n          this.touchStartX = event.clientX;\n        } else if (!this._pointerEvent) {\n          this.touchStartX = event.touches[0].clientX;\n        }\n      };\n\n      const move = event => {\n        // ensure swiping with one touch and not pinching\n        this.touchDeltaX = event.touches && event.touches.length > 1 ? 0 : event.touches[0].clientX - this.touchStartX;\n      };\n\n      const end = event => {\n        if (this._pointerEvent && (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH)) {\n          this.touchDeltaX = event.clientX - this.touchStartX;\n        }\n\n        this._handleSwipe();\n\n        if (this._config.pause === 'hover') {\n          // If it's a touch-enabled device, mouseenter/leave are fired as\n          // part of the mouse compatibility events on first tap - the carousel\n          // would stop cycling until user tapped out of it;\n          // here, we listen for touchend, explicitly pause the carousel\n          // (as if it's the second time we tap on it, mouseenter compat event\n          // is NOT fired) and after a timeout (to allow for mouse compatibility\n          // events to fire) we explicitly restart cycling\n          this.pause();\n\n          if (this.touchTimeout) {\n            clearTimeout(this.touchTimeout);\n          }\n\n          this.touchTimeout = setTimeout(event => this.cycle(event), TOUCHEVENT_COMPAT_WAIT + this._config.interval);\n        }\n      };\n\n      SelectorEngine.find(SELECTOR_ITEM_IMG, this._element).forEach(itemImg => {\n        EventHandler.on(itemImg, EVENT_DRAG_START, e => e.preventDefault());\n      });\n\n      if (this._pointerEvent) {\n        EventHandler.on(this._element, EVENT_POINTERDOWN, event => start(event));\n        EventHandler.on(this._element, EVENT_POINTERUP, event => end(event));\n\n        this._element.classList.add(CLASS_NAME_POINTER_EVENT);\n      } else {\n        EventHandler.on(this._element, EVENT_TOUCHSTART, event => start(event));\n        EventHandler.on(this._element, EVENT_TOUCHMOVE, event => move(event));\n        EventHandler.on(this._element, EVENT_TOUCHEND, event => end(event));\n      }\n    }\n\n    _keydown(event) {\n      if (/input|textarea/i.test(event.target.tagName)) {\n        return;\n      }\n\n      const direction = KEY_TO_DIRECTION[event.key];\n\n      if (direction) {\n        event.preventDefault();\n\n        this._slide(direction);\n      }\n    }\n\n    _getItemIndex(element) {\n      this._items = element && element.parentNode ? SelectorEngine.find(SELECTOR_ITEM, element.parentNode) : [];\n      return this._items.indexOf(element);\n    }\n\n    _getItemByOrder(order, activeElement) {\n      const isNext = order === ORDER_NEXT;\n      return getNextActiveElement(this._items, activeElement, isNext, this._config.wrap);\n    }\n\n    _triggerSlideEvent(relatedTarget, eventDirectionName) {\n      const targetIndex = this._getItemIndex(relatedTarget);\n\n      const fromIndex = this._getItemIndex(SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element));\n\n      return EventHandler.trigger(this._element, EVENT_SLIDE, {\n        relatedTarget,\n        direction: eventDirectionName,\n        from: fromIndex,\n        to: targetIndex\n      });\n    }\n\n    _setActiveIndicatorElement(element) {\n      if (this._indicatorsElement) {\n        const activeIndicator = SelectorEngine.findOne(SELECTOR_ACTIVE$1, this._indicatorsElement);\n        activeIndicator.classList.remove(CLASS_NAME_ACTIVE$2);\n        activeIndicator.removeAttribute('aria-current');\n        const indicators = SelectorEngine.find(SELECTOR_INDICATOR, this._indicatorsElement);\n\n        for (let i = 0; i < indicators.length; i++) {\n          if (Number.parseInt(indicators[i].getAttribute('data-bs-slide-to'), 10) === this._getItemIndex(element)) {\n            indicators[i].classList.add(CLASS_NAME_ACTIVE$2);\n            indicators[i].setAttribute('aria-current', 'true');\n            break;\n          }\n        }\n      }\n    }\n\n    _updateInterval() {\n      const element = this._activeElement || SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element);\n\n      if (!element) {\n        return;\n      }\n\n      const elementInterval = Number.parseInt(element.getAttribute('data-bs-interval'), 10);\n\n      if (elementInterval) {\n        this._config.defaultInterval = this._config.defaultInterval || this._config.interval;\n        this._config.interval = elementInterval;\n      } else {\n        this._config.interval = this._config.defaultInterval || this._config.interval;\n      }\n    }\n\n    _slide(directionOrOrder, element) {\n      const order = this._directionToOrder(directionOrOrder);\n\n      const activeElement = SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element);\n\n      const activeElementIndex = this._getItemIndex(activeElement);\n\n      const nextElement = element || this._getItemByOrder(order, activeElement);\n\n      const nextElementIndex = this._getItemIndex(nextElement);\n\n      const isCycling = Boolean(this._interval);\n      const isNext = order === ORDER_NEXT;\n      const directionalClassName = isNext ? CLASS_NAME_START : CLASS_NAME_END;\n      const orderClassName = isNext ? CLASS_NAME_NEXT : CLASS_NAME_PREV;\n\n      const eventDirectionName = this._orderToDirection(order);\n\n      if (nextElement && nextElement.classList.contains(CLASS_NAME_ACTIVE$2)) {\n        this._isSliding = false;\n        return;\n      }\n\n      if (this._isSliding) {\n        return;\n      }\n\n      const slideEvent = this._triggerSlideEvent(nextElement, eventDirectionName);\n\n      if (slideEvent.defaultPrevented) {\n        return;\n      }\n\n      if (!activeElement || !nextElement) {\n        // Some weirdness is happening, so we bail\n        return;\n      }\n\n      this._isSliding = true;\n\n      if (isCycling) {\n        this.pause();\n      }\n\n      this._setActiveIndicatorElement(nextElement);\n\n      this._activeElement = nextElement;\n\n      const triggerSlidEvent = () => {\n        EventHandler.trigger(this._element, EVENT_SLID, {\n          relatedTarget: nextElement,\n          direction: eventDirectionName,\n          from: activeElementIndex,\n          to: nextElementIndex\n        });\n      };\n\n      if (this._element.classList.contains(CLASS_NAME_SLIDE)) {\n        nextElement.classList.add(orderClassName);\n        reflow(nextElement);\n        activeElement.classList.add(directionalClassName);\n        nextElement.classList.add(directionalClassName);\n\n        const completeCallBack = () => {\n          nextElement.classList.remove(directionalClassName, orderClassName);\n          nextElement.classList.add(CLASS_NAME_ACTIVE$2);\n          activeElement.classList.remove(CLASS_NAME_ACTIVE$2, orderClassName, directionalClassName);\n          this._isSliding = false;\n          setTimeout(triggerSlidEvent, 0);\n        };\n\n        this._queueCallback(completeCallBack, activeElement, true);\n      } else {\n        activeElement.classList.remove(CLASS_NAME_ACTIVE$2);\n        nextElement.classList.add(CLASS_NAME_ACTIVE$2);\n        this._isSliding = false;\n        triggerSlidEvent();\n      }\n\n      if (isCycling) {\n        this.cycle();\n      }\n    }\n\n    _directionToOrder(direction) {\n      if (![DIRECTION_RIGHT, DIRECTION_LEFT].includes(direction)) {\n        return direction;\n      }\n\n      if (isRTL()) {\n        return direction === DIRECTION_LEFT ? ORDER_PREV : ORDER_NEXT;\n      }\n\n      return direction === DIRECTION_LEFT ? ORDER_NEXT : ORDER_PREV;\n    }\n\n    _orderToDirection(order) {\n      if (![ORDER_NEXT, ORDER_PREV].includes(order)) {\n        return order;\n      }\n\n      if (isRTL()) {\n        return order === ORDER_PREV ? DIRECTION_LEFT : DIRECTION_RIGHT;\n      }\n\n      return order === ORDER_PREV ? DIRECTION_RIGHT : DIRECTION_LEFT;\n    } // Static\n\n\n    static carouselInterface(element, config) {\n      const data = Carousel.getOrCreateInstance(element, config);\n      let {\n        _config\n      } = data;\n\n      if (typeof config === 'object') {\n        _config = { ..._config,\n          ...config\n        };\n      }\n\n      const action = typeof config === 'string' ? config : _config.slide;\n\n      if (typeof config === 'number') {\n        data.to(config);\n      } else if (typeof action === 'string') {\n        if (typeof data[action] === 'undefined') {\n          throw new TypeError(`No method named \"${action}\"`);\n        }\n\n        data[action]();\n      } else if (_config.interval && _config.ride) {\n        data.pause();\n        data.cycle();\n      }\n    }\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        Carousel.carouselInterface(this, config);\n      });\n    }\n\n    static dataApiClickHandler(event) {\n      const target = getElementFromSelector(this);\n\n      if (!target || !target.classList.contains(CLASS_NAME_CAROUSEL)) {\n        return;\n      }\n\n      const config = { ...Manipulator.getDataAttributes(target),\n        ...Manipulator.getDataAttributes(this)\n      };\n      const slideIndex = this.getAttribute('data-bs-slide-to');\n\n      if (slideIndex) {\n        config.interval = false;\n      }\n\n      Carousel.carouselInterface(target, config);\n\n      if (slideIndex) {\n        Carousel.getInstance(target).to(slideIndex);\n      }\n\n      event.preventDefault();\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(document, EVENT_CLICK_DATA_API$5, SELECTOR_DATA_SLIDE, Carousel.dataApiClickHandler);\n  EventHandler.on(window, EVENT_LOAD_DATA_API$2, () => {\n    const carousels = SelectorEngine.find(SELECTOR_DATA_RIDE);\n\n    for (let i = 0, len = carousels.length; i < len; i++) {\n      Carousel.carouselInterface(carousels[i], Carousel.getInstance(carousels[i]));\n    }\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Carousel to jQuery only if jQuery is present\n   */\n\n  defineJQueryPlugin(Carousel);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): collapse.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$9 = 'collapse';\n  const DATA_KEY$8 = 'bs.collapse';\n  const EVENT_KEY$8 = `.${DATA_KEY$8}`;\n  const DATA_API_KEY$5 = '.data-api';\n  const Default$8 = {\n    toggle: true,\n    parent: ''\n  };\n  const DefaultType$8 = {\n    toggle: 'boolean',\n    parent: '(string|element)'\n  };\n  const EVENT_SHOW$5 = `show${EVENT_KEY$8}`;\n  const EVENT_SHOWN$5 = `shown${EVENT_KEY$8}`;\n  const EVENT_HIDE$5 = `hide${EVENT_KEY$8}`;\n  const EVENT_HIDDEN$5 = `hidden${EVENT_KEY$8}`;\n  const EVENT_CLICK_DATA_API$4 = `click${EVENT_KEY$8}${DATA_API_KEY$5}`;\n  const CLASS_NAME_SHOW$8 = 'show';\n  const CLASS_NAME_COLLAPSE = 'collapse';\n  const CLASS_NAME_COLLAPSING = 'collapsing';\n  const CLASS_NAME_COLLAPSED = 'collapsed';\n  const WIDTH = 'width';\n  const HEIGHT = 'height';\n  const SELECTOR_ACTIVES = '.show, .collapsing';\n  const SELECTOR_DATA_TOGGLE$4 = '[data-bs-toggle=\"collapse\"]';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Collapse extends BaseComponent {\n    constructor(element, config) {\n      super(element);\n      this._isTransitioning = false;\n      this._config = this._getConfig(config);\n      this._triggerArray = SelectorEngine.find(`${SELECTOR_DATA_TOGGLE$4}[href=\"#${this._element.id}\"],` + `${SELECTOR_DATA_TOGGLE$4}[data-bs-target=\"#${this._element.id}\"]`);\n      const toggleList = SelectorEngine.find(SELECTOR_DATA_TOGGLE$4);\n\n      for (let i = 0, len = toggleList.length; i < len; i++) {\n        const elem = toggleList[i];\n        const selector = getSelectorFromElement(elem);\n        const filterElement = SelectorEngine.find(selector).filter(foundElem => foundElem === this._element);\n\n        if (selector !== null && filterElement.length) {\n          this._selector = selector;\n\n          this._triggerArray.push(elem);\n        }\n      }\n\n      this._parent = this._config.parent ? this._getParent() : null;\n\n      if (!this._config.parent) {\n        this._addAriaAndCollapsedClass(this._element, this._triggerArray);\n      }\n\n      if (this._config.toggle) {\n        this.toggle();\n      }\n    } // Getters\n\n\n    static get Default() {\n      return Default$8;\n    }\n\n    static get NAME() {\n      return NAME$9;\n    } // Public\n\n\n    toggle() {\n      if (this._element.classList.contains(CLASS_NAME_SHOW$8)) {\n        this.hide();\n      } else {\n        this.show();\n      }\n    }\n\n    show() {\n      if (this._isTransitioning || this._element.classList.contains(CLASS_NAME_SHOW$8)) {\n        return;\n      }\n\n      let actives;\n      let activesData;\n\n      if (this._parent) {\n        actives = SelectorEngine.find(SELECTOR_ACTIVES, this._parent).filter(elem => {\n          if (typeof this._config.parent === 'string') {\n            return elem.getAttribute('data-bs-parent') === this._config.parent;\n          }\n\n          return elem.classList.contains(CLASS_NAME_COLLAPSE);\n        });\n\n        if (actives.length === 0) {\n          actives = null;\n        }\n      }\n\n      const container = SelectorEngine.findOne(this._selector);\n\n      if (actives) {\n        const tempActiveData = actives.find(elem => container !== elem);\n        activesData = tempActiveData ? Collapse.getInstance(tempActiveData) : null;\n\n        if (activesData && activesData._isTransitioning) {\n          return;\n        }\n      }\n\n      const startEvent = EventHandler.trigger(this._element, EVENT_SHOW$5);\n\n      if (startEvent.defaultPrevented) {\n        return;\n      }\n\n      if (actives) {\n        actives.forEach(elemActive => {\n          if (container !== elemActive) {\n            Collapse.collapseInterface(elemActive, 'hide');\n          }\n\n          if (!activesData) {\n            Data.set(elemActive, DATA_KEY$8, null);\n          }\n        });\n      }\n\n      const dimension = this._getDimension();\n\n      this._element.classList.remove(CLASS_NAME_COLLAPSE);\n\n      this._element.classList.add(CLASS_NAME_COLLAPSING);\n\n      this._element.style[dimension] = 0;\n\n      if (this._triggerArray.length) {\n        this._triggerArray.forEach(element => {\n          element.classList.remove(CLASS_NAME_COLLAPSED);\n          element.setAttribute('aria-expanded', true);\n        });\n      }\n\n      this.setTransitioning(true);\n\n      const complete = () => {\n        this._element.classList.remove(CLASS_NAME_COLLAPSING);\n\n        this._element.classList.add(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$8);\n\n        this._element.style[dimension] = '';\n        this.setTransitioning(false);\n        EventHandler.trigger(this._element, EVENT_SHOWN$5);\n      };\n\n      const capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1);\n      const scrollSize = `scroll${capitalizedDimension}`;\n\n      this._queueCallback(complete, this._element, true);\n\n      this._element.style[dimension] = `${this._element[scrollSize]}px`;\n    }\n\n    hide() {\n      if (this._isTransitioning || !this._element.classList.contains(CLASS_NAME_SHOW$8)) {\n        return;\n      }\n\n      const startEvent = EventHandler.trigger(this._element, EVENT_HIDE$5);\n\n      if (startEvent.defaultPrevented) {\n        return;\n      }\n\n      const dimension = this._getDimension();\n\n      this._element.style[dimension] = `${this._element.getBoundingClientRect()[dimension]}px`;\n      reflow(this._element);\n\n      this._element.classList.add(CLASS_NAME_COLLAPSING);\n\n      this._element.classList.remove(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$8);\n\n      const triggerArrayLength = this._triggerArray.length;\n\n      if (triggerArrayLength > 0) {\n        for (let i = 0; i < triggerArrayLength; i++) {\n          const trigger = this._triggerArray[i];\n          const elem = getElementFromSelector(trigger);\n\n          if (elem && !elem.classList.contains(CLASS_NAME_SHOW$8)) {\n            trigger.classList.add(CLASS_NAME_COLLAPSED);\n            trigger.setAttribute('aria-expanded', false);\n          }\n        }\n      }\n\n      this.setTransitioning(true);\n\n      const complete = () => {\n        this.setTransitioning(false);\n\n        this._element.classList.remove(CLASS_NAME_COLLAPSING);\n\n        this._element.classList.add(CLASS_NAME_COLLAPSE);\n\n        EventHandler.trigger(this._element, EVENT_HIDDEN$5);\n      };\n\n      this._element.style[dimension] = '';\n\n      this._queueCallback(complete, this._element, true);\n    }\n\n    setTransitioning(isTransitioning) {\n      this._isTransitioning = isTransitioning;\n    } // Private\n\n\n    _getConfig(config) {\n      config = { ...Default$8,\n        ...config\n      };\n      config.toggle = Boolean(config.toggle); // Coerce string values\n\n      typeCheckConfig(NAME$9, config, DefaultType$8);\n      return config;\n    }\n\n    _getDimension() {\n      return this._element.classList.contains(WIDTH) ? WIDTH : HEIGHT;\n    }\n\n    _getParent() {\n      let {\n        parent\n      } = this._config;\n      parent = getElement(parent);\n      const selector = `${SELECTOR_DATA_TOGGLE$4}[data-bs-parent=\"${parent}\"]`;\n      SelectorEngine.find(selector, parent).forEach(element => {\n        const selected = getElementFromSelector(element);\n\n        this._addAriaAndCollapsedClass(selected, [element]);\n      });\n      return parent;\n    }\n\n    _addAriaAndCollapsedClass(element, triggerArray) {\n      if (!element || !triggerArray.length) {\n        return;\n      }\n\n      const isOpen = element.classList.contains(CLASS_NAME_SHOW$8);\n      triggerArray.forEach(elem => {\n        if (isOpen) {\n          elem.classList.remove(CLASS_NAME_COLLAPSED);\n        } else {\n          elem.classList.add(CLASS_NAME_COLLAPSED);\n        }\n\n        elem.setAttribute('aria-expanded', isOpen);\n      });\n    } // Static\n\n\n    static collapseInterface(element, config) {\n      let data = Collapse.getInstance(element);\n      const _config = { ...Default$8,\n        ...Manipulator.getDataAttributes(element),\n        ...(typeof config === 'object' && config ? config : {})\n      };\n\n      if (!data && _config.toggle && typeof config === 'string' && /show|hide/.test(config)) {\n        _config.toggle = false;\n      }\n\n      if (!data) {\n        data = new Collapse(element, _config);\n      }\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config]();\n      }\n    }\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        Collapse.collapseInterface(this, config);\n      });\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(document, EVENT_CLICK_DATA_API$4, SELECTOR_DATA_TOGGLE$4, function (event) {\n    // preventDefault only for <a> elements (which change the URL) not inside the collapsible element\n    if (event.target.tagName === 'A' || event.delegateTarget && event.delegateTarget.tagName === 'A') {\n      event.preventDefault();\n    }\n\n    const triggerData = Manipulator.getDataAttributes(this);\n    const selector = getSelectorFromElement(this);\n    const selectorElements = SelectorEngine.find(selector);\n    selectorElements.forEach(element => {\n      const data = Collapse.getInstance(element);\n      let config;\n\n      if (data) {\n        // update parent attribute\n        if (data._parent === null && typeof triggerData.parent === 'string') {\n          data._config.parent = triggerData.parent;\n          data._parent = data._getParent();\n        }\n\n        config = 'toggle';\n      } else {\n        config = triggerData;\n      }\n\n      Collapse.collapseInterface(element, config);\n    });\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Collapse to jQuery only if jQuery is present\n   */\n\n  defineJQueryPlugin(Collapse);\n\n  var top = 'top';\n  var bottom = 'bottom';\n  var right = 'right';\n  var left = 'left';\n  var auto = 'auto';\n  var basePlacements = [top, bottom, right, left];\n  var start = 'start';\n  var end = 'end';\n  var clippingParents = 'clippingParents';\n  var viewport = 'viewport';\n  var popper = 'popper';\n  var reference = 'reference';\n  var variationPlacements = /*#__PURE__*/basePlacements.reduce(function (acc, placement) {\n    return acc.concat([placement + \"-\" + start, placement + \"-\" + end]);\n  }, []);\n  var placements = /*#__PURE__*/[].concat(basePlacements, [auto]).reduce(function (acc, placement) {\n    return acc.concat([placement, placement + \"-\" + start, placement + \"-\" + end]);\n  }, []); // modifiers that need to read the DOM\n\n  var beforeRead = 'beforeRead';\n  var read = 'read';\n  var afterRead = 'afterRead'; // pure-logic modifiers\n\n  var beforeMain = 'beforeMain';\n  var main = 'main';\n  var afterMain = 'afterMain'; // modifier with the purpose to write to the DOM (or write into a framework state)\n\n  var beforeWrite = 'beforeWrite';\n  var write = 'write';\n  var afterWrite = 'afterWrite';\n  var modifierPhases = [beforeRead, read, afterRead, beforeMain, main, afterMain, beforeWrite, write, afterWrite];\n\n  function getNodeName(element) {\n    return element ? (element.nodeName || '').toLowerCase() : null;\n  }\n\n  function getWindow(node) {\n    if (node == null) {\n      return window;\n    }\n\n    if (node.toString() !== '[object Window]') {\n      var ownerDocument = node.ownerDocument;\n      return ownerDocument ? ownerDocument.defaultView || window : window;\n    }\n\n    return node;\n  }\n\n  function isElement(node) {\n    var OwnElement = getWindow(node).Element;\n    return node instanceof OwnElement || node instanceof Element;\n  }\n\n  function isHTMLElement(node) {\n    var OwnElement = getWindow(node).HTMLElement;\n    return node instanceof OwnElement || node instanceof HTMLElement;\n  }\n\n  function isShadowRoot(node) {\n    // IE 11 has no ShadowRoot\n    if (typeof ShadowRoot === 'undefined') {\n      return false;\n    }\n\n    var OwnElement = getWindow(node).ShadowRoot;\n    return node instanceof OwnElement || node instanceof ShadowRoot;\n  }\n\n  // and applies them to the HTMLElements such as popper and arrow\n\n  function applyStyles(_ref) {\n    var state = _ref.state;\n    Object.keys(state.elements).forEach(function (name) {\n      var style = state.styles[name] || {};\n      var attributes = state.attributes[name] || {};\n      var element = state.elements[name]; // arrow is optional + virtual elements\n\n      if (!isHTMLElement(element) || !getNodeName(element)) {\n        return;\n      } // Flow doesn't support to extend this property, but it's the most\n      // effective way to apply styles to an HTMLElement\n      // $FlowFixMe[cannot-write]\n\n\n      Object.assign(element.style, style);\n      Object.keys(attributes).forEach(function (name) {\n        var value = attributes[name];\n\n        if (value === false) {\n          element.removeAttribute(name);\n        } else {\n          element.setAttribute(name, value === true ? '' : value);\n        }\n      });\n    });\n  }\n\n  function effect$2(_ref2) {\n    var state = _ref2.state;\n    var initialStyles = {\n      popper: {\n        position: state.options.strategy,\n        left: '0',\n        top: '0',\n        margin: '0'\n      },\n      arrow: {\n        position: 'absolute'\n      },\n      reference: {}\n    };\n    Object.assign(state.elements.popper.style, initialStyles.popper);\n    state.styles = initialStyles;\n\n    if (state.elements.arrow) {\n      Object.assign(state.elements.arrow.style, initialStyles.arrow);\n    }\n\n    return function () {\n      Object.keys(state.elements).forEach(function (name) {\n        var element = state.elements[name];\n        var attributes = state.attributes[name] || {};\n        var styleProperties = Object.keys(state.styles.hasOwnProperty(name) ? state.styles[name] : initialStyles[name]); // Set all values to an empty string to unset them\n\n        var style = styleProperties.reduce(function (style, property) {\n          style[property] = '';\n          return style;\n        }, {}); // arrow is optional + virtual elements\n\n        if (!isHTMLElement(element) || !getNodeName(element)) {\n          return;\n        }\n\n        Object.assign(element.style, style);\n        Object.keys(attributes).forEach(function (attribute) {\n          element.removeAttribute(attribute);\n        });\n      });\n    };\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  var applyStyles$1 = {\n    name: 'applyStyles',\n    enabled: true,\n    phase: 'write',\n    fn: applyStyles,\n    effect: effect$2,\n    requires: ['computeStyles']\n  };\n\n  function getBasePlacement(placement) {\n    return placement.split('-')[0];\n  }\n\n  function getBoundingClientRect(element) {\n    var rect = element.getBoundingClientRect();\n    return {\n      width: rect.width,\n      height: rect.height,\n      top: rect.top,\n      right: rect.right,\n      bottom: rect.bottom,\n      left: rect.left,\n      x: rect.left,\n      y: rect.top\n    };\n  }\n\n  // means it doesn't take into account transforms.\n\n  function getLayoutRect(element) {\n    var clientRect = getBoundingClientRect(element); // Use the clientRect sizes if it's not been transformed.\n    // Fixes https://github.com/popperjs/popper-core/issues/1223\n\n    var width = element.offsetWidth;\n    var height = element.offsetHeight;\n\n    if (Math.abs(clientRect.width - width) <= 1) {\n      width = clientRect.width;\n    }\n\n    if (Math.abs(clientRect.height - height) <= 1) {\n      height = clientRect.height;\n    }\n\n    return {\n      x: element.offsetLeft,\n      y: element.offsetTop,\n      width: width,\n      height: height\n    };\n  }\n\n  function contains(parent, child) {\n    var rootNode = child.getRootNode && child.getRootNode(); // First, attempt with faster native method\n\n    if (parent.contains(child)) {\n      return true;\n    } // then fallback to custom implementation with Shadow DOM support\n    else if (rootNode && isShadowRoot(rootNode)) {\n        var next = child;\n\n        do {\n          if (next && parent.isSameNode(next)) {\n            return true;\n          } // $FlowFixMe[prop-missing]: need a better way to handle this...\n\n\n          next = next.parentNode || next.host;\n        } while (next);\n      } // Give up, the result is false\n\n\n    return false;\n  }\n\n  function getComputedStyle$1(element) {\n    return getWindow(element).getComputedStyle(element);\n  }\n\n  function isTableElement(element) {\n    return ['table', 'td', 'th'].indexOf(getNodeName(element)) >= 0;\n  }\n\n  function getDocumentElement(element) {\n    // $FlowFixMe[incompatible-return]: assume body is always available\n    return ((isElement(element) ? element.ownerDocument : // $FlowFixMe[prop-missing]\n    element.document) || window.document).documentElement;\n  }\n\n  function getParentNode(element) {\n    if (getNodeName(element) === 'html') {\n      return element;\n    }\n\n    return (// this is a quicker (but less type safe) way to save quite some bytes from the bundle\n      // $FlowFixMe[incompatible-return]\n      // $FlowFixMe[prop-missing]\n      element.assignedSlot || // step into the shadow DOM of the parent of a slotted node\n      element.parentNode || ( // DOM Element detected\n      isShadowRoot(element) ? element.host : null) || // ShadowRoot detected\n      // $FlowFixMe[incompatible-call]: HTMLElement is a Node\n      getDocumentElement(element) // fallback\n\n    );\n  }\n\n  function getTrueOffsetParent(element) {\n    if (!isHTMLElement(element) || // https://github.com/popperjs/popper-core/issues/837\n    getComputedStyle$1(element).position === 'fixed') {\n      return null;\n    }\n\n    return element.offsetParent;\n  } // `.offsetParent` reports `null` for fixed elements, while absolute elements\n  // return the containing block\n\n\n  function getContainingBlock(element) {\n    var isFirefox = navigator.userAgent.toLowerCase().indexOf('firefox') !== -1;\n    var isIE = navigator.userAgent.indexOf('Trident') !== -1;\n\n    if (isIE && isHTMLElement(element)) {\n      // In IE 9, 10 and 11 fixed elements containing block is always established by the viewport\n      var elementCss = getComputedStyle$1(element);\n\n      if (elementCss.position === 'fixed') {\n        return null;\n      }\n    }\n\n    var currentNode = getParentNode(element);\n\n    while (isHTMLElement(currentNode) && ['html', 'body'].indexOf(getNodeName(currentNode)) < 0) {\n      var css = getComputedStyle$1(currentNode); // This is non-exhaustive but covers the most common CSS properties that\n      // create a containing block.\n      // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n\n      if (css.transform !== 'none' || css.perspective !== 'none' || css.contain === 'paint' || ['transform', 'perspective'].indexOf(css.willChange) !== -1 || isFirefox && css.willChange === 'filter' || isFirefox && css.filter && css.filter !== 'none') {\n        return currentNode;\n      } else {\n        currentNode = currentNode.parentNode;\n      }\n    }\n\n    return null;\n  } // Gets the closest ancestor positioned element. Handles some edge cases,\n  // such as table ancestors and cross browser bugs.\n\n\n  function getOffsetParent(element) {\n    var window = getWindow(element);\n    var offsetParent = getTrueOffsetParent(element);\n\n    while (offsetParent && isTableElement(offsetParent) && getComputedStyle$1(offsetParent).position === 'static') {\n      offsetParent = getTrueOffsetParent(offsetParent);\n    }\n\n    if (offsetParent && (getNodeName(offsetParent) === 'html' || getNodeName(offsetParent) === 'body' && getComputedStyle$1(offsetParent).position === 'static')) {\n      return window;\n    }\n\n    return offsetParent || getContainingBlock(element) || window;\n  }\n\n  function getMainAxisFromPlacement(placement) {\n    return ['top', 'bottom'].indexOf(placement) >= 0 ? 'x' : 'y';\n  }\n\n  var max = Math.max;\n  var min = Math.min;\n  var round = Math.round;\n\n  function within(min$1, value, max$1) {\n    return max(min$1, min(value, max$1));\n  }\n\n  function getFreshSideObject() {\n    return {\n      top: 0,\n      right: 0,\n      bottom: 0,\n      left: 0\n    };\n  }\n\n  function mergePaddingObject(paddingObject) {\n    return Object.assign({}, getFreshSideObject(), paddingObject);\n  }\n\n  function expandToHashMap(value, keys) {\n    return keys.reduce(function (hashMap, key) {\n      hashMap[key] = value;\n      return hashMap;\n    }, {});\n  }\n\n  var toPaddingObject = function toPaddingObject(padding, state) {\n    padding = typeof padding === 'function' ? padding(Object.assign({}, state.rects, {\n      placement: state.placement\n    })) : padding;\n    return mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));\n  };\n\n  function arrow(_ref) {\n    var _state$modifiersData$;\n\n    var state = _ref.state,\n        name = _ref.name,\n        options = _ref.options;\n    var arrowElement = state.elements.arrow;\n    var popperOffsets = state.modifiersData.popperOffsets;\n    var basePlacement = getBasePlacement(state.placement);\n    var axis = getMainAxisFromPlacement(basePlacement);\n    var isVertical = [left, right].indexOf(basePlacement) >= 0;\n    var len = isVertical ? 'height' : 'width';\n\n    if (!arrowElement || !popperOffsets) {\n      return;\n    }\n\n    var paddingObject = toPaddingObject(options.padding, state);\n    var arrowRect = getLayoutRect(arrowElement);\n    var minProp = axis === 'y' ? top : left;\n    var maxProp = axis === 'y' ? bottom : right;\n    var endDiff = state.rects.reference[len] + state.rects.reference[axis] - popperOffsets[axis] - state.rects.popper[len];\n    var startDiff = popperOffsets[axis] - state.rects.reference[axis];\n    var arrowOffsetParent = getOffsetParent(arrowElement);\n    var clientSize = arrowOffsetParent ? axis === 'y' ? arrowOffsetParent.clientHeight || 0 : arrowOffsetParent.clientWidth || 0 : 0;\n    var centerToReference = endDiff / 2 - startDiff / 2; // Make sure the arrow doesn't overflow the popper if the center point is\n    // outside of the popper bounds\n\n    var min = paddingObject[minProp];\n    var max = clientSize - arrowRect[len] - paddingObject[maxProp];\n    var center = clientSize / 2 - arrowRect[len] / 2 + centerToReference;\n    var offset = within(min, center, max); // Prevents breaking syntax highlighting...\n\n    var axisProp = axis;\n    state.modifiersData[name] = (_state$modifiersData$ = {}, _state$modifiersData$[axisProp] = offset, _state$modifiersData$.centerOffset = offset - center, _state$modifiersData$);\n  }\n\n  function effect$1(_ref2) {\n    var state = _ref2.state,\n        options = _ref2.options;\n    var _options$element = options.element,\n        arrowElement = _options$element === void 0 ? '[data-popper-arrow]' : _options$element;\n\n    if (arrowElement == null) {\n      return;\n    } // CSS selector\n\n\n    if (typeof arrowElement === 'string') {\n      arrowElement = state.elements.popper.querySelector(arrowElement);\n\n      if (!arrowElement) {\n        return;\n      }\n    }\n\n    if (!contains(state.elements.popper, arrowElement)) {\n\n      return;\n    }\n\n    state.elements.arrow = arrowElement;\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  var arrow$1 = {\n    name: 'arrow',\n    enabled: true,\n    phase: 'main',\n    fn: arrow,\n    effect: effect$1,\n    requires: ['popperOffsets'],\n    requiresIfExists: ['preventOverflow']\n  };\n\n  var unsetSides = {\n    top: 'auto',\n    right: 'auto',\n    bottom: 'auto',\n    left: 'auto'\n  }; // Round the offsets to the nearest suitable subpixel based on the DPR.\n  // Zooming can change the DPR, but it seems to report a value that will\n  // cleanly divide the values into the appropriate subpixels.\n\n  function roundOffsetsByDPR(_ref) {\n    var x = _ref.x,\n        y = _ref.y;\n    var win = window;\n    var dpr = win.devicePixelRatio || 1;\n    return {\n      x: round(round(x * dpr) / dpr) || 0,\n      y: round(round(y * dpr) / dpr) || 0\n    };\n  }\n\n  function mapToStyles(_ref2) {\n    var _Object$assign2;\n\n    var popper = _ref2.popper,\n        popperRect = _ref2.popperRect,\n        placement = _ref2.placement,\n        offsets = _ref2.offsets,\n        position = _ref2.position,\n        gpuAcceleration = _ref2.gpuAcceleration,\n        adaptive = _ref2.adaptive,\n        roundOffsets = _ref2.roundOffsets;\n\n    var _ref3 = roundOffsets === true ? roundOffsetsByDPR(offsets) : typeof roundOffsets === 'function' ? roundOffsets(offsets) : offsets,\n        _ref3$x = _ref3.x,\n        x = _ref3$x === void 0 ? 0 : _ref3$x,\n        _ref3$y = _ref3.y,\n        y = _ref3$y === void 0 ? 0 : _ref3$y;\n\n    var hasX = offsets.hasOwnProperty('x');\n    var hasY = offsets.hasOwnProperty('y');\n    var sideX = left;\n    var sideY = top;\n    var win = window;\n\n    if (adaptive) {\n      var offsetParent = getOffsetParent(popper);\n      var heightProp = 'clientHeight';\n      var widthProp = 'clientWidth';\n\n      if (offsetParent === getWindow(popper)) {\n        offsetParent = getDocumentElement(popper);\n\n        if (getComputedStyle$1(offsetParent).position !== 'static') {\n          heightProp = 'scrollHeight';\n          widthProp = 'scrollWidth';\n        }\n      } // $FlowFixMe[incompatible-cast]: force type refinement, we compare offsetParent with window above, but Flow doesn't detect it\n\n\n      offsetParent = offsetParent;\n\n      if (placement === top) {\n        sideY = bottom; // $FlowFixMe[prop-missing]\n\n        y -= offsetParent[heightProp] - popperRect.height;\n        y *= gpuAcceleration ? 1 : -1;\n      }\n\n      if (placement === left) {\n        sideX = right; // $FlowFixMe[prop-missing]\n\n        x -= offsetParent[widthProp] - popperRect.width;\n        x *= gpuAcceleration ? 1 : -1;\n      }\n    }\n\n    var commonStyles = Object.assign({\n      position: position\n    }, adaptive && unsetSides);\n\n    if (gpuAcceleration) {\n      var _Object$assign;\n\n      return Object.assign({}, commonStyles, (_Object$assign = {}, _Object$assign[sideY] = hasY ? '0' : '', _Object$assign[sideX] = hasX ? '0' : '', _Object$assign.transform = (win.devicePixelRatio || 1) < 2 ? \"translate(\" + x + \"px, \" + y + \"px)\" : \"translate3d(\" + x + \"px, \" + y + \"px, 0)\", _Object$assign));\n    }\n\n    return Object.assign({}, commonStyles, (_Object$assign2 = {}, _Object$assign2[sideY] = hasY ? y + \"px\" : '', _Object$assign2[sideX] = hasX ? x + \"px\" : '', _Object$assign2.transform = '', _Object$assign2));\n  }\n\n  function computeStyles(_ref4) {\n    var state = _ref4.state,\n        options = _ref4.options;\n    var _options$gpuAccelerat = options.gpuAcceleration,\n        gpuAcceleration = _options$gpuAccelerat === void 0 ? true : _options$gpuAccelerat,\n        _options$adaptive = options.adaptive,\n        adaptive = _options$adaptive === void 0 ? true : _options$adaptive,\n        _options$roundOffsets = options.roundOffsets,\n        roundOffsets = _options$roundOffsets === void 0 ? true : _options$roundOffsets;\n\n    var commonStyles = {\n      placement: getBasePlacement(state.placement),\n      popper: state.elements.popper,\n      popperRect: state.rects.popper,\n      gpuAcceleration: gpuAcceleration\n    };\n\n    if (state.modifiersData.popperOffsets != null) {\n      state.styles.popper = Object.assign({}, state.styles.popper, mapToStyles(Object.assign({}, commonStyles, {\n        offsets: state.modifiersData.popperOffsets,\n        position: state.options.strategy,\n        adaptive: adaptive,\n        roundOffsets: roundOffsets\n      })));\n    }\n\n    if (state.modifiersData.arrow != null) {\n      state.styles.arrow = Object.assign({}, state.styles.arrow, mapToStyles(Object.assign({}, commonStyles, {\n        offsets: state.modifiersData.arrow,\n        position: 'absolute',\n        adaptive: false,\n        roundOffsets: roundOffsets\n      })));\n    }\n\n    state.attributes.popper = Object.assign({}, state.attributes.popper, {\n      'data-popper-placement': state.placement\n    });\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  var computeStyles$1 = {\n    name: 'computeStyles',\n    enabled: true,\n    phase: 'beforeWrite',\n    fn: computeStyles,\n    data: {}\n  };\n\n  var passive = {\n    passive: true\n  };\n\n  function effect(_ref) {\n    var state = _ref.state,\n        instance = _ref.instance,\n        options = _ref.options;\n    var _options$scroll = options.scroll,\n        scroll = _options$scroll === void 0 ? true : _options$scroll,\n        _options$resize = options.resize,\n        resize = _options$resize === void 0 ? true : _options$resize;\n    var window = getWindow(state.elements.popper);\n    var scrollParents = [].concat(state.scrollParents.reference, state.scrollParents.popper);\n\n    if (scroll) {\n      scrollParents.forEach(function (scrollParent) {\n        scrollParent.addEventListener('scroll', instance.update, passive);\n      });\n    }\n\n    if (resize) {\n      window.addEventListener('resize', instance.update, passive);\n    }\n\n    return function () {\n      if (scroll) {\n        scrollParents.forEach(function (scrollParent) {\n          scrollParent.removeEventListener('scroll', instance.update, passive);\n        });\n      }\n\n      if (resize) {\n        window.removeEventListener('resize', instance.update, passive);\n      }\n    };\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  var eventListeners = {\n    name: 'eventListeners',\n    enabled: true,\n    phase: 'write',\n    fn: function fn() {},\n    effect: effect,\n    data: {}\n  };\n\n  var hash$1 = {\n    left: 'right',\n    right: 'left',\n    bottom: 'top',\n    top: 'bottom'\n  };\n  function getOppositePlacement(placement) {\n    return placement.replace(/left|right|bottom|top/g, function (matched) {\n      return hash$1[matched];\n    });\n  }\n\n  var hash = {\n    start: 'end',\n    end: 'start'\n  };\n  function getOppositeVariationPlacement(placement) {\n    return placement.replace(/start|end/g, function (matched) {\n      return hash[matched];\n    });\n  }\n\n  function getWindowScroll(node) {\n    var win = getWindow(node);\n    var scrollLeft = win.pageXOffset;\n    var scrollTop = win.pageYOffset;\n    return {\n      scrollLeft: scrollLeft,\n      scrollTop: scrollTop\n    };\n  }\n\n  function getWindowScrollBarX(element) {\n    // If <html> has a CSS width greater than the viewport, then this will be\n    // incorrect for RTL.\n    // Popper 1 is broken in this case and never had a bug report so let's assume\n    // it's not an issue. I don't think anyone ever specifies width on <html>\n    // anyway.\n    // Browsers where the left scrollbar doesn't cause an issue report `0` for\n    // this (e.g. Edge 2019, IE11, Safari)\n    return getBoundingClientRect(getDocumentElement(element)).left + getWindowScroll(element).scrollLeft;\n  }\n\n  function getViewportRect(element) {\n    var win = getWindow(element);\n    var html = getDocumentElement(element);\n    var visualViewport = win.visualViewport;\n    var width = html.clientWidth;\n    var height = html.clientHeight;\n    var x = 0;\n    var y = 0; // NB: This isn't supported on iOS <= 12. If the keyboard is open, the popper\n    // can be obscured underneath it.\n    // Also, `html.clientHeight` adds the bottom bar height in Safari iOS, even\n    // if it isn't open, so if this isn't available, the popper will be detected\n    // to overflow the bottom of the screen too early.\n\n    if (visualViewport) {\n      width = visualViewport.width;\n      height = visualViewport.height; // Uses Layout Viewport (like Chrome; Safari does not currently)\n      // In Chrome, it returns a value very close to 0 (+/-) but contains rounding\n      // errors due to floating point numbers, so we need to check precision.\n      // Safari returns a number <= 0, usually < -1 when pinch-zoomed\n      // Feature detection fails in mobile emulation mode in Chrome.\n      // Math.abs(win.innerWidth / visualViewport.scale - visualViewport.width) <\n      // 0.001\n      // Fallback here: \"Not Safari\" userAgent\n\n      if (!/^((?!chrome|android).)*safari/i.test(navigator.userAgent)) {\n        x = visualViewport.offsetLeft;\n        y = visualViewport.offsetTop;\n      }\n    }\n\n    return {\n      width: width,\n      height: height,\n      x: x + getWindowScrollBarX(element),\n      y: y\n    };\n  }\n\n  // of the `<html>` and `<body>` rect bounds if horizontally scrollable\n\n  function getDocumentRect(element) {\n    var _element$ownerDocumen;\n\n    var html = getDocumentElement(element);\n    var winScroll = getWindowScroll(element);\n    var body = (_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body;\n    var width = max(html.scrollWidth, html.clientWidth, body ? body.scrollWidth : 0, body ? body.clientWidth : 0);\n    var height = max(html.scrollHeight, html.clientHeight, body ? body.scrollHeight : 0, body ? body.clientHeight : 0);\n    var x = -winScroll.scrollLeft + getWindowScrollBarX(element);\n    var y = -winScroll.scrollTop;\n\n    if (getComputedStyle$1(body || html).direction === 'rtl') {\n      x += max(html.clientWidth, body ? body.clientWidth : 0) - width;\n    }\n\n    return {\n      width: width,\n      height: height,\n      x: x,\n      y: y\n    };\n  }\n\n  function isScrollParent(element) {\n    // Firefox wants us to check `-x` and `-y` variations as well\n    var _getComputedStyle = getComputedStyle$1(element),\n        overflow = _getComputedStyle.overflow,\n        overflowX = _getComputedStyle.overflowX,\n        overflowY = _getComputedStyle.overflowY;\n\n    return /auto|scroll|overlay|hidden/.test(overflow + overflowY + overflowX);\n  }\n\n  function getScrollParent(node) {\n    if (['html', 'body', '#document'].indexOf(getNodeName(node)) >= 0) {\n      // $FlowFixMe[incompatible-return]: assume body is always available\n      return node.ownerDocument.body;\n    }\n\n    if (isHTMLElement(node) && isScrollParent(node)) {\n      return node;\n    }\n\n    return getScrollParent(getParentNode(node));\n  }\n\n  /*\n  given a DOM element, return the list of all scroll parents, up the list of ancesors\n  until we get to the top window object. This list is what we attach scroll listeners\n  to, because if any of these parent elements scroll, we'll need to re-calculate the\n  reference element's position.\n  */\n\n  function listScrollParents(element, list) {\n    var _element$ownerDocumen;\n\n    if (list === void 0) {\n      list = [];\n    }\n\n    var scrollParent = getScrollParent(element);\n    var isBody = scrollParent === ((_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body);\n    var win = getWindow(scrollParent);\n    var target = isBody ? [win].concat(win.visualViewport || [], isScrollParent(scrollParent) ? scrollParent : []) : scrollParent;\n    var updatedList = list.concat(target);\n    return isBody ? updatedList : // $FlowFixMe[incompatible-call]: isBody tells us target will be an HTMLElement here\n    updatedList.concat(listScrollParents(getParentNode(target)));\n  }\n\n  function rectToClientRect(rect) {\n    return Object.assign({}, rect, {\n      left: rect.x,\n      top: rect.y,\n      right: rect.x + rect.width,\n      bottom: rect.y + rect.height\n    });\n  }\n\n  function getInnerBoundingClientRect(element) {\n    var rect = getBoundingClientRect(element);\n    rect.top = rect.top + element.clientTop;\n    rect.left = rect.left + element.clientLeft;\n    rect.bottom = rect.top + element.clientHeight;\n    rect.right = rect.left + element.clientWidth;\n    rect.width = element.clientWidth;\n    rect.height = element.clientHeight;\n    rect.x = rect.left;\n    rect.y = rect.top;\n    return rect;\n  }\n\n  function getClientRectFromMixedType(element, clippingParent) {\n    return clippingParent === viewport ? rectToClientRect(getViewportRect(element)) : isHTMLElement(clippingParent) ? getInnerBoundingClientRect(clippingParent) : rectToClientRect(getDocumentRect(getDocumentElement(element)));\n  } // A \"clipping parent\" is an overflowable container with the characteristic of\n  // clipping (or hiding) overflowing elements with a position different from\n  // `initial`\n\n\n  function getClippingParents(element) {\n    var clippingParents = listScrollParents(getParentNode(element));\n    var canEscapeClipping = ['absolute', 'fixed'].indexOf(getComputedStyle$1(element).position) >= 0;\n    var clipperElement = canEscapeClipping && isHTMLElement(element) ? getOffsetParent(element) : element;\n\n    if (!isElement(clipperElement)) {\n      return [];\n    } // $FlowFixMe[incompatible-return]: https://github.com/facebook/flow/issues/1414\n\n\n    return clippingParents.filter(function (clippingParent) {\n      return isElement(clippingParent) && contains(clippingParent, clipperElement) && getNodeName(clippingParent) !== 'body';\n    });\n  } // Gets the maximum area that the element is visible in due to any number of\n  // clipping parents\n\n\n  function getClippingRect(element, boundary, rootBoundary) {\n    var mainClippingParents = boundary === 'clippingParents' ? getClippingParents(element) : [].concat(boundary);\n    var clippingParents = [].concat(mainClippingParents, [rootBoundary]);\n    var firstClippingParent = clippingParents[0];\n    var clippingRect = clippingParents.reduce(function (accRect, clippingParent) {\n      var rect = getClientRectFromMixedType(element, clippingParent);\n      accRect.top = max(rect.top, accRect.top);\n      accRect.right = min(rect.right, accRect.right);\n      accRect.bottom = min(rect.bottom, accRect.bottom);\n      accRect.left = max(rect.left, accRect.left);\n      return accRect;\n    }, getClientRectFromMixedType(element, firstClippingParent));\n    clippingRect.width = clippingRect.right - clippingRect.left;\n    clippingRect.height = clippingRect.bottom - clippingRect.top;\n    clippingRect.x = clippingRect.left;\n    clippingRect.y = clippingRect.top;\n    return clippingRect;\n  }\n\n  function getVariation(placement) {\n    return placement.split('-')[1];\n  }\n\n  function computeOffsets(_ref) {\n    var reference = _ref.reference,\n        element = _ref.element,\n        placement = _ref.placement;\n    var basePlacement = placement ? getBasePlacement(placement) : null;\n    var variation = placement ? getVariation(placement) : null;\n    var commonX = reference.x + reference.width / 2 - element.width / 2;\n    var commonY = reference.y + reference.height / 2 - element.height / 2;\n    var offsets;\n\n    switch (basePlacement) {\n      case top:\n        offsets = {\n          x: commonX,\n          y: reference.y - element.height\n        };\n        break;\n\n      case bottom:\n        offsets = {\n          x: commonX,\n          y: reference.y + reference.height\n        };\n        break;\n\n      case right:\n        offsets = {\n          x: reference.x + reference.width,\n          y: commonY\n        };\n        break;\n\n      case left:\n        offsets = {\n          x: reference.x - element.width,\n          y: commonY\n        };\n        break;\n\n      default:\n        offsets = {\n          x: reference.x,\n          y: reference.y\n        };\n    }\n\n    var mainAxis = basePlacement ? getMainAxisFromPlacement(basePlacement) : null;\n\n    if (mainAxis != null) {\n      var len = mainAxis === 'y' ? 'height' : 'width';\n\n      switch (variation) {\n        case start:\n          offsets[mainAxis] = offsets[mainAxis] - (reference[len] / 2 - element[len] / 2);\n          break;\n\n        case end:\n          offsets[mainAxis] = offsets[mainAxis] + (reference[len] / 2 - element[len] / 2);\n          break;\n      }\n    }\n\n    return offsets;\n  }\n\n  function detectOverflow(state, options) {\n    if (options === void 0) {\n      options = {};\n    }\n\n    var _options = options,\n        _options$placement = _options.placement,\n        placement = _options$placement === void 0 ? state.placement : _options$placement,\n        _options$boundary = _options.boundary,\n        boundary = _options$boundary === void 0 ? clippingParents : _options$boundary,\n        _options$rootBoundary = _options.rootBoundary,\n        rootBoundary = _options$rootBoundary === void 0 ? viewport : _options$rootBoundary,\n        _options$elementConte = _options.elementContext,\n        elementContext = _options$elementConte === void 0 ? popper : _options$elementConte,\n        _options$altBoundary = _options.altBoundary,\n        altBoundary = _options$altBoundary === void 0 ? false : _options$altBoundary,\n        _options$padding = _options.padding,\n        padding = _options$padding === void 0 ? 0 : _options$padding;\n    var paddingObject = mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));\n    var altContext = elementContext === popper ? reference : popper;\n    var referenceElement = state.elements.reference;\n    var popperRect = state.rects.popper;\n    var element = state.elements[altBoundary ? altContext : elementContext];\n    var clippingClientRect = getClippingRect(isElement(element) ? element : element.contextElement || getDocumentElement(state.elements.popper), boundary, rootBoundary);\n    var referenceClientRect = getBoundingClientRect(referenceElement);\n    var popperOffsets = computeOffsets({\n      reference: referenceClientRect,\n      element: popperRect,\n      strategy: 'absolute',\n      placement: placement\n    });\n    var popperClientRect = rectToClientRect(Object.assign({}, popperRect, popperOffsets));\n    var elementClientRect = elementContext === popper ? popperClientRect : referenceClientRect; // positive = overflowing the clipping rect\n    // 0 or negative = within the clipping rect\n\n    var overflowOffsets = {\n      top: clippingClientRect.top - elementClientRect.top + paddingObject.top,\n      bottom: elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom,\n      left: clippingClientRect.left - elementClientRect.left + paddingObject.left,\n      right: elementClientRect.right - clippingClientRect.right + paddingObject.right\n    };\n    var offsetData = state.modifiersData.offset; // Offsets can be applied only to the popper element\n\n    if (elementContext === popper && offsetData) {\n      var offset = offsetData[placement];\n      Object.keys(overflowOffsets).forEach(function (key) {\n        var multiply = [right, bottom].indexOf(key) >= 0 ? 1 : -1;\n        var axis = [top, bottom].indexOf(key) >= 0 ? 'y' : 'x';\n        overflowOffsets[key] += offset[axis] * multiply;\n      });\n    }\n\n    return overflowOffsets;\n  }\n\n  function computeAutoPlacement(state, options) {\n    if (options === void 0) {\n      options = {};\n    }\n\n    var _options = options,\n        placement = _options.placement,\n        boundary = _options.boundary,\n        rootBoundary = _options.rootBoundary,\n        padding = _options.padding,\n        flipVariations = _options.flipVariations,\n        _options$allowedAutoP = _options.allowedAutoPlacements,\n        allowedAutoPlacements = _options$allowedAutoP === void 0 ? placements : _options$allowedAutoP;\n    var variation = getVariation(placement);\n    var placements$1 = variation ? flipVariations ? variationPlacements : variationPlacements.filter(function (placement) {\n      return getVariation(placement) === variation;\n    }) : basePlacements;\n    var allowedPlacements = placements$1.filter(function (placement) {\n      return allowedAutoPlacements.indexOf(placement) >= 0;\n    });\n\n    if (allowedPlacements.length === 0) {\n      allowedPlacements = placements$1;\n    } // $FlowFixMe[incompatible-type]: Flow seems to have problems with two array unions...\n\n\n    var overflows = allowedPlacements.reduce(function (acc, placement) {\n      acc[placement] = detectOverflow(state, {\n        placement: placement,\n        boundary: boundary,\n        rootBoundary: rootBoundary,\n        padding: padding\n      })[getBasePlacement(placement)];\n      return acc;\n    }, {});\n    return Object.keys(overflows).sort(function (a, b) {\n      return overflows[a] - overflows[b];\n    });\n  }\n\n  function getExpandedFallbackPlacements(placement) {\n    if (getBasePlacement(placement) === auto) {\n      return [];\n    }\n\n    var oppositePlacement = getOppositePlacement(placement);\n    return [getOppositeVariationPlacement(placement), oppositePlacement, getOppositeVariationPlacement(oppositePlacement)];\n  }\n\n  function flip(_ref) {\n    var state = _ref.state,\n        options = _ref.options,\n        name = _ref.name;\n\n    if (state.modifiersData[name]._skip) {\n      return;\n    }\n\n    var _options$mainAxis = options.mainAxis,\n        checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\n        _options$altAxis = options.altAxis,\n        checkAltAxis = _options$altAxis === void 0 ? true : _options$altAxis,\n        specifiedFallbackPlacements = options.fallbackPlacements,\n        padding = options.padding,\n        boundary = options.boundary,\n        rootBoundary = options.rootBoundary,\n        altBoundary = options.altBoundary,\n        _options$flipVariatio = options.flipVariations,\n        flipVariations = _options$flipVariatio === void 0 ? true : _options$flipVariatio,\n        allowedAutoPlacements = options.allowedAutoPlacements;\n    var preferredPlacement = state.options.placement;\n    var basePlacement = getBasePlacement(preferredPlacement);\n    var isBasePlacement = basePlacement === preferredPlacement;\n    var fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipVariations ? [getOppositePlacement(preferredPlacement)] : getExpandedFallbackPlacements(preferredPlacement));\n    var placements = [preferredPlacement].concat(fallbackPlacements).reduce(function (acc, placement) {\n      return acc.concat(getBasePlacement(placement) === auto ? computeAutoPlacement(state, {\n        placement: placement,\n        boundary: boundary,\n        rootBoundary: rootBoundary,\n        padding: padding,\n        flipVariations: flipVariations,\n        allowedAutoPlacements: allowedAutoPlacements\n      }) : placement);\n    }, []);\n    var referenceRect = state.rects.reference;\n    var popperRect = state.rects.popper;\n    var checksMap = new Map();\n    var makeFallbackChecks = true;\n    var firstFittingPlacement = placements[0];\n\n    for (var i = 0; i < placements.length; i++) {\n      var placement = placements[i];\n\n      var _basePlacement = getBasePlacement(placement);\n\n      var isStartVariation = getVariation(placement) === start;\n      var isVertical = [top, bottom].indexOf(_basePlacement) >= 0;\n      var len = isVertical ? 'width' : 'height';\n      var overflow = detectOverflow(state, {\n        placement: placement,\n        boundary: boundary,\n        rootBoundary: rootBoundary,\n        altBoundary: altBoundary,\n        padding: padding\n      });\n      var mainVariationSide = isVertical ? isStartVariation ? right : left : isStartVariation ? bottom : top;\n\n      if (referenceRect[len] > popperRect[len]) {\n        mainVariationSide = getOppositePlacement(mainVariationSide);\n      }\n\n      var altVariationSide = getOppositePlacement(mainVariationSide);\n      var checks = [];\n\n      if (checkMainAxis) {\n        checks.push(overflow[_basePlacement] <= 0);\n      }\n\n      if (checkAltAxis) {\n        checks.push(overflow[mainVariationSide] <= 0, overflow[altVariationSide] <= 0);\n      }\n\n      if (checks.every(function (check) {\n        return check;\n      })) {\n        firstFittingPlacement = placement;\n        makeFallbackChecks = false;\n        break;\n      }\n\n      checksMap.set(placement, checks);\n    }\n\n    if (makeFallbackChecks) {\n      // `2` may be desired in some cases – research later\n      var numberOfChecks = flipVariations ? 3 : 1;\n\n      var _loop = function _loop(_i) {\n        var fittingPlacement = placements.find(function (placement) {\n          var checks = checksMap.get(placement);\n\n          if (checks) {\n            return checks.slice(0, _i).every(function (check) {\n              return check;\n            });\n          }\n        });\n\n        if (fittingPlacement) {\n          firstFittingPlacement = fittingPlacement;\n          return \"break\";\n        }\n      };\n\n      for (var _i = numberOfChecks; _i > 0; _i--) {\n        var _ret = _loop(_i);\n\n        if (_ret === \"break\") break;\n      }\n    }\n\n    if (state.placement !== firstFittingPlacement) {\n      state.modifiersData[name]._skip = true;\n      state.placement = firstFittingPlacement;\n      state.reset = true;\n    }\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  var flip$1 = {\n    name: 'flip',\n    enabled: true,\n    phase: 'main',\n    fn: flip,\n    requiresIfExists: ['offset'],\n    data: {\n      _skip: false\n    }\n  };\n\n  function getSideOffsets(overflow, rect, preventedOffsets) {\n    if (preventedOffsets === void 0) {\n      preventedOffsets = {\n        x: 0,\n        y: 0\n      };\n    }\n\n    return {\n      top: overflow.top - rect.height - preventedOffsets.y,\n      right: overflow.right - rect.width + preventedOffsets.x,\n      bottom: overflow.bottom - rect.height + preventedOffsets.y,\n      left: overflow.left - rect.width - preventedOffsets.x\n    };\n  }\n\n  function isAnySideFullyClipped(overflow) {\n    return [top, right, bottom, left].some(function (side) {\n      return overflow[side] >= 0;\n    });\n  }\n\n  function hide(_ref) {\n    var state = _ref.state,\n        name = _ref.name;\n    var referenceRect = state.rects.reference;\n    var popperRect = state.rects.popper;\n    var preventedOffsets = state.modifiersData.preventOverflow;\n    var referenceOverflow = detectOverflow(state, {\n      elementContext: 'reference'\n    });\n    var popperAltOverflow = detectOverflow(state, {\n      altBoundary: true\n    });\n    var referenceClippingOffsets = getSideOffsets(referenceOverflow, referenceRect);\n    var popperEscapeOffsets = getSideOffsets(popperAltOverflow, popperRect, preventedOffsets);\n    var isReferenceHidden = isAnySideFullyClipped(referenceClippingOffsets);\n    var hasPopperEscaped = isAnySideFullyClipped(popperEscapeOffsets);\n    state.modifiersData[name] = {\n      referenceClippingOffsets: referenceClippingOffsets,\n      popperEscapeOffsets: popperEscapeOffsets,\n      isReferenceHidden: isReferenceHidden,\n      hasPopperEscaped: hasPopperEscaped\n    };\n    state.attributes.popper = Object.assign({}, state.attributes.popper, {\n      'data-popper-reference-hidden': isReferenceHidden,\n      'data-popper-escaped': hasPopperEscaped\n    });\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  var hide$1 = {\n    name: 'hide',\n    enabled: true,\n    phase: 'main',\n    requiresIfExists: ['preventOverflow'],\n    fn: hide\n  };\n\n  function distanceAndSkiddingToXY(placement, rects, offset) {\n    var basePlacement = getBasePlacement(placement);\n    var invertDistance = [left, top].indexOf(basePlacement) >= 0 ? -1 : 1;\n\n    var _ref = typeof offset === 'function' ? offset(Object.assign({}, rects, {\n      placement: placement\n    })) : offset,\n        skidding = _ref[0],\n        distance = _ref[1];\n\n    skidding = skidding || 0;\n    distance = (distance || 0) * invertDistance;\n    return [left, right].indexOf(basePlacement) >= 0 ? {\n      x: distance,\n      y: skidding\n    } : {\n      x: skidding,\n      y: distance\n    };\n  }\n\n  function offset(_ref2) {\n    var state = _ref2.state,\n        options = _ref2.options,\n        name = _ref2.name;\n    var _options$offset = options.offset,\n        offset = _options$offset === void 0 ? [0, 0] : _options$offset;\n    var data = placements.reduce(function (acc, placement) {\n      acc[placement] = distanceAndSkiddingToXY(placement, state.rects, offset);\n      return acc;\n    }, {});\n    var _data$state$placement = data[state.placement],\n        x = _data$state$placement.x,\n        y = _data$state$placement.y;\n\n    if (state.modifiersData.popperOffsets != null) {\n      state.modifiersData.popperOffsets.x += x;\n      state.modifiersData.popperOffsets.y += y;\n    }\n\n    state.modifiersData[name] = data;\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  var offset$1 = {\n    name: 'offset',\n    enabled: true,\n    phase: 'main',\n    requires: ['popperOffsets'],\n    fn: offset\n  };\n\n  function popperOffsets(_ref) {\n    var state = _ref.state,\n        name = _ref.name;\n    // Offsets are the actual position the popper needs to have to be\n    // properly positioned near its reference element\n    // This is the most basic placement, and will be adjusted by\n    // the modifiers in the next step\n    state.modifiersData[name] = computeOffsets({\n      reference: state.rects.reference,\n      element: state.rects.popper,\n      strategy: 'absolute',\n      placement: state.placement\n    });\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  var popperOffsets$1 = {\n    name: 'popperOffsets',\n    enabled: true,\n    phase: 'read',\n    fn: popperOffsets,\n    data: {}\n  };\n\n  function getAltAxis(axis) {\n    return axis === 'x' ? 'y' : 'x';\n  }\n\n  function preventOverflow(_ref) {\n    var state = _ref.state,\n        options = _ref.options,\n        name = _ref.name;\n    var _options$mainAxis = options.mainAxis,\n        checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\n        _options$altAxis = options.altAxis,\n        checkAltAxis = _options$altAxis === void 0 ? false : _options$altAxis,\n        boundary = options.boundary,\n        rootBoundary = options.rootBoundary,\n        altBoundary = options.altBoundary,\n        padding = options.padding,\n        _options$tether = options.tether,\n        tether = _options$tether === void 0 ? true : _options$tether,\n        _options$tetherOffset = options.tetherOffset,\n        tetherOffset = _options$tetherOffset === void 0 ? 0 : _options$tetherOffset;\n    var overflow = detectOverflow(state, {\n      boundary: boundary,\n      rootBoundary: rootBoundary,\n      padding: padding,\n      altBoundary: altBoundary\n    });\n    var basePlacement = getBasePlacement(state.placement);\n    var variation = getVariation(state.placement);\n    var isBasePlacement = !variation;\n    var mainAxis = getMainAxisFromPlacement(basePlacement);\n    var altAxis = getAltAxis(mainAxis);\n    var popperOffsets = state.modifiersData.popperOffsets;\n    var referenceRect = state.rects.reference;\n    var popperRect = state.rects.popper;\n    var tetherOffsetValue = typeof tetherOffset === 'function' ? tetherOffset(Object.assign({}, state.rects, {\n      placement: state.placement\n    })) : tetherOffset;\n    var data = {\n      x: 0,\n      y: 0\n    };\n\n    if (!popperOffsets) {\n      return;\n    }\n\n    if (checkMainAxis || checkAltAxis) {\n      var mainSide = mainAxis === 'y' ? top : left;\n      var altSide = mainAxis === 'y' ? bottom : right;\n      var len = mainAxis === 'y' ? 'height' : 'width';\n      var offset = popperOffsets[mainAxis];\n      var min$1 = popperOffsets[mainAxis] + overflow[mainSide];\n      var max$1 = popperOffsets[mainAxis] - overflow[altSide];\n      var additive = tether ? -popperRect[len] / 2 : 0;\n      var minLen = variation === start ? referenceRect[len] : popperRect[len];\n      var maxLen = variation === start ? -popperRect[len] : -referenceRect[len]; // We need to include the arrow in the calculation so the arrow doesn't go\n      // outside the reference bounds\n\n      var arrowElement = state.elements.arrow;\n      var arrowRect = tether && arrowElement ? getLayoutRect(arrowElement) : {\n        width: 0,\n        height: 0\n      };\n      var arrowPaddingObject = state.modifiersData['arrow#persistent'] ? state.modifiersData['arrow#persistent'].padding : getFreshSideObject();\n      var arrowPaddingMin = arrowPaddingObject[mainSide];\n      var arrowPaddingMax = arrowPaddingObject[altSide]; // If the reference length is smaller than the arrow length, we don't want\n      // to include its full size in the calculation. If the reference is small\n      // and near the edge of a boundary, the popper can overflow even if the\n      // reference is not overflowing as well (e.g. virtual elements with no\n      // width or height)\n\n      var arrowLen = within(0, referenceRect[len], arrowRect[len]);\n      var minOffset = isBasePlacement ? referenceRect[len] / 2 - additive - arrowLen - arrowPaddingMin - tetherOffsetValue : minLen - arrowLen - arrowPaddingMin - tetherOffsetValue;\n      var maxOffset = isBasePlacement ? -referenceRect[len] / 2 + additive + arrowLen + arrowPaddingMax + tetherOffsetValue : maxLen + arrowLen + arrowPaddingMax + tetherOffsetValue;\n      var arrowOffsetParent = state.elements.arrow && getOffsetParent(state.elements.arrow);\n      var clientOffset = arrowOffsetParent ? mainAxis === 'y' ? arrowOffsetParent.clientTop || 0 : arrowOffsetParent.clientLeft || 0 : 0;\n      var offsetModifierValue = state.modifiersData.offset ? state.modifiersData.offset[state.placement][mainAxis] : 0;\n      var tetherMin = popperOffsets[mainAxis] + minOffset - offsetModifierValue - clientOffset;\n      var tetherMax = popperOffsets[mainAxis] + maxOffset - offsetModifierValue;\n\n      if (checkMainAxis) {\n        var preventedOffset = within(tether ? min(min$1, tetherMin) : min$1, offset, tether ? max(max$1, tetherMax) : max$1);\n        popperOffsets[mainAxis] = preventedOffset;\n        data[mainAxis] = preventedOffset - offset;\n      }\n\n      if (checkAltAxis) {\n        var _mainSide = mainAxis === 'x' ? top : left;\n\n        var _altSide = mainAxis === 'x' ? bottom : right;\n\n        var _offset = popperOffsets[altAxis];\n\n        var _min = _offset + overflow[_mainSide];\n\n        var _max = _offset - overflow[_altSide];\n\n        var _preventedOffset = within(tether ? min(_min, tetherMin) : _min, _offset, tether ? max(_max, tetherMax) : _max);\n\n        popperOffsets[altAxis] = _preventedOffset;\n        data[altAxis] = _preventedOffset - _offset;\n      }\n    }\n\n    state.modifiersData[name] = data;\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  var preventOverflow$1 = {\n    name: 'preventOverflow',\n    enabled: true,\n    phase: 'main',\n    fn: preventOverflow,\n    requiresIfExists: ['offset']\n  };\n\n  function getHTMLElementScroll(element) {\n    return {\n      scrollLeft: element.scrollLeft,\n      scrollTop: element.scrollTop\n    };\n  }\n\n  function getNodeScroll(node) {\n    if (node === getWindow(node) || !isHTMLElement(node)) {\n      return getWindowScroll(node);\n    } else {\n      return getHTMLElementScroll(node);\n    }\n  }\n\n  // Composite means it takes into account transforms as well as layout.\n\n  function getCompositeRect(elementOrVirtualElement, offsetParent, isFixed) {\n    if (isFixed === void 0) {\n      isFixed = false;\n    }\n\n    var documentElement = getDocumentElement(offsetParent);\n    var rect = getBoundingClientRect(elementOrVirtualElement);\n    var isOffsetParentAnElement = isHTMLElement(offsetParent);\n    var scroll = {\n      scrollLeft: 0,\n      scrollTop: 0\n    };\n    var offsets = {\n      x: 0,\n      y: 0\n    };\n\n    if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {\n      if (getNodeName(offsetParent) !== 'body' || // https://github.com/popperjs/popper-core/issues/1078\n      isScrollParent(documentElement)) {\n        scroll = getNodeScroll(offsetParent);\n      }\n\n      if (isHTMLElement(offsetParent)) {\n        offsets = getBoundingClientRect(offsetParent);\n        offsets.x += offsetParent.clientLeft;\n        offsets.y += offsetParent.clientTop;\n      } else if (documentElement) {\n        offsets.x = getWindowScrollBarX(documentElement);\n      }\n    }\n\n    return {\n      x: rect.left + scroll.scrollLeft - offsets.x,\n      y: rect.top + scroll.scrollTop - offsets.y,\n      width: rect.width,\n      height: rect.height\n    };\n  }\n\n  function order(modifiers) {\n    var map = new Map();\n    var visited = new Set();\n    var result = [];\n    modifiers.forEach(function (modifier) {\n      map.set(modifier.name, modifier);\n    }); // On visiting object, check for its dependencies and visit them recursively\n\n    function sort(modifier) {\n      visited.add(modifier.name);\n      var requires = [].concat(modifier.requires || [], modifier.requiresIfExists || []);\n      requires.forEach(function (dep) {\n        if (!visited.has(dep)) {\n          var depModifier = map.get(dep);\n\n          if (depModifier) {\n            sort(depModifier);\n          }\n        }\n      });\n      result.push(modifier);\n    }\n\n    modifiers.forEach(function (modifier) {\n      if (!visited.has(modifier.name)) {\n        // check for visited object\n        sort(modifier);\n      }\n    });\n    return result;\n  }\n\n  function orderModifiers(modifiers) {\n    // order based on dependencies\n    var orderedModifiers = order(modifiers); // order based on phase\n\n    return modifierPhases.reduce(function (acc, phase) {\n      return acc.concat(orderedModifiers.filter(function (modifier) {\n        return modifier.phase === phase;\n      }));\n    }, []);\n  }\n\n  function debounce(fn) {\n    var pending;\n    return function () {\n      if (!pending) {\n        pending = new Promise(function (resolve) {\n          Promise.resolve().then(function () {\n            pending = undefined;\n            resolve(fn());\n          });\n        });\n      }\n\n      return pending;\n    };\n  }\n\n  function mergeByName(modifiers) {\n    var merged = modifiers.reduce(function (merged, current) {\n      var existing = merged[current.name];\n      merged[current.name] = existing ? Object.assign({}, existing, current, {\n        options: Object.assign({}, existing.options, current.options),\n        data: Object.assign({}, existing.data, current.data)\n      }) : current;\n      return merged;\n    }, {}); // IE11 does not support Object.values\n\n    return Object.keys(merged).map(function (key) {\n      return merged[key];\n    });\n  }\n\n  var DEFAULT_OPTIONS = {\n    placement: 'bottom',\n    modifiers: [],\n    strategy: 'absolute'\n  };\n\n  function areValidElements() {\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    return !args.some(function (element) {\n      return !(element && typeof element.getBoundingClientRect === 'function');\n    });\n  }\n\n  function popperGenerator(generatorOptions) {\n    if (generatorOptions === void 0) {\n      generatorOptions = {};\n    }\n\n    var _generatorOptions = generatorOptions,\n        _generatorOptions$def = _generatorOptions.defaultModifiers,\n        defaultModifiers = _generatorOptions$def === void 0 ? [] : _generatorOptions$def,\n        _generatorOptions$def2 = _generatorOptions.defaultOptions,\n        defaultOptions = _generatorOptions$def2 === void 0 ? DEFAULT_OPTIONS : _generatorOptions$def2;\n    return function createPopper(reference, popper, options) {\n      if (options === void 0) {\n        options = defaultOptions;\n      }\n\n      var state = {\n        placement: 'bottom',\n        orderedModifiers: [],\n        options: Object.assign({}, DEFAULT_OPTIONS, defaultOptions),\n        modifiersData: {},\n        elements: {\n          reference: reference,\n          popper: popper\n        },\n        attributes: {},\n        styles: {}\n      };\n      var effectCleanupFns = [];\n      var isDestroyed = false;\n      var instance = {\n        state: state,\n        setOptions: function setOptions(options) {\n          cleanupModifierEffects();\n          state.options = Object.assign({}, defaultOptions, state.options, options);\n          state.scrollParents = {\n            reference: isElement(reference) ? listScrollParents(reference) : reference.contextElement ? listScrollParents(reference.contextElement) : [],\n            popper: listScrollParents(popper)\n          }; // Orders the modifiers based on their dependencies and `phase`\n          // properties\n\n          var orderedModifiers = orderModifiers(mergeByName([].concat(defaultModifiers, state.options.modifiers))); // Strip out disabled modifiers\n\n          state.orderedModifiers = orderedModifiers.filter(function (m) {\n            return m.enabled;\n          }); // Validate the provided modifiers so that the consumer will get warned\n\n          runModifierEffects();\n          return instance.update();\n        },\n        // Sync update – it will always be executed, even if not necessary. This\n        // is useful for low frequency updates where sync behavior simplifies the\n        // logic.\n        // For high frequency updates (e.g. `resize` and `scroll` events), always\n        // prefer the async Popper#update method\n        forceUpdate: function forceUpdate() {\n          if (isDestroyed) {\n            return;\n          }\n\n          var _state$elements = state.elements,\n              reference = _state$elements.reference,\n              popper = _state$elements.popper; // Don't proceed if `reference` or `popper` are not valid elements\n          // anymore\n\n          if (!areValidElements(reference, popper)) {\n\n            return;\n          } // Store the reference and popper rects to be read by modifiers\n\n\n          state.rects = {\n            reference: getCompositeRect(reference, getOffsetParent(popper), state.options.strategy === 'fixed'),\n            popper: getLayoutRect(popper)\n          }; // Modifiers have the ability to reset the current update cycle. The\n          // most common use case for this is the `flip` modifier changing the\n          // placement, which then needs to re-run all the modifiers, because the\n          // logic was previously ran for the previous placement and is therefore\n          // stale/incorrect\n\n          state.reset = false;\n          state.placement = state.options.placement; // On each update cycle, the `modifiersData` property for each modifier\n          // is filled with the initial data specified by the modifier. This means\n          // it doesn't persist and is fresh on each update.\n          // To ensure persistent data, use `${name}#persistent`\n\n          state.orderedModifiers.forEach(function (modifier) {\n            return state.modifiersData[modifier.name] = Object.assign({}, modifier.data);\n          });\n\n          for (var index = 0; index < state.orderedModifiers.length; index++) {\n\n            if (state.reset === true) {\n              state.reset = false;\n              index = -1;\n              continue;\n            }\n\n            var _state$orderedModifie = state.orderedModifiers[index],\n                fn = _state$orderedModifie.fn,\n                _state$orderedModifie2 = _state$orderedModifie.options,\n                _options = _state$orderedModifie2 === void 0 ? {} : _state$orderedModifie2,\n                name = _state$orderedModifie.name;\n\n            if (typeof fn === 'function') {\n              state = fn({\n                state: state,\n                options: _options,\n                name: name,\n                instance: instance\n              }) || state;\n            }\n          }\n        },\n        // Async and optimistically optimized update – it will not be executed if\n        // not necessary (debounced to run at most once-per-tick)\n        update: debounce(function () {\n          return new Promise(function (resolve) {\n            instance.forceUpdate();\n            resolve(state);\n          });\n        }),\n        destroy: function destroy() {\n          cleanupModifierEffects();\n          isDestroyed = true;\n        }\n      };\n\n      if (!areValidElements(reference, popper)) {\n\n        return instance;\n      }\n\n      instance.setOptions(options).then(function (state) {\n        if (!isDestroyed && options.onFirstUpdate) {\n          options.onFirstUpdate(state);\n        }\n      }); // Modifiers have the ability to execute arbitrary code before the first\n      // update cycle runs. They will be executed in the same order as the update\n      // cycle. This is useful when a modifier adds some persistent data that\n      // other modifiers need to use, but the modifier is run after the dependent\n      // one.\n\n      function runModifierEffects() {\n        state.orderedModifiers.forEach(function (_ref3) {\n          var name = _ref3.name,\n              _ref3$options = _ref3.options,\n              options = _ref3$options === void 0 ? {} : _ref3$options,\n              effect = _ref3.effect;\n\n          if (typeof effect === 'function') {\n            var cleanupFn = effect({\n              state: state,\n              name: name,\n              instance: instance,\n              options: options\n            });\n\n            var noopFn = function noopFn() {};\n\n            effectCleanupFns.push(cleanupFn || noopFn);\n          }\n        });\n      }\n\n      function cleanupModifierEffects() {\n        effectCleanupFns.forEach(function (fn) {\n          return fn();\n        });\n        effectCleanupFns = [];\n      }\n\n      return instance;\n    };\n  }\n  var createPopper$2 = /*#__PURE__*/popperGenerator(); // eslint-disable-next-line import/no-unused-modules\n\n  var defaultModifiers$1 = [eventListeners, popperOffsets$1, computeStyles$1, applyStyles$1];\n  var createPopper$1 = /*#__PURE__*/popperGenerator({\n    defaultModifiers: defaultModifiers$1\n  }); // eslint-disable-next-line import/no-unused-modules\n\n  var defaultModifiers = [eventListeners, popperOffsets$1, computeStyles$1, applyStyles$1, offset$1, flip$1, preventOverflow$1, arrow$1, hide$1];\n  var createPopper = /*#__PURE__*/popperGenerator({\n    defaultModifiers: defaultModifiers\n  }); // eslint-disable-next-line import/no-unused-modules\n\n  var Popper = /*#__PURE__*/Object.freeze({\n    __proto__: null,\n    popperGenerator: popperGenerator,\n    detectOverflow: detectOverflow,\n    createPopperBase: createPopper$2,\n    createPopper: createPopper,\n    createPopperLite: createPopper$1,\n    top: top,\n    bottom: bottom,\n    right: right,\n    left: left,\n    auto: auto,\n    basePlacements: basePlacements,\n    start: start,\n    end: end,\n    clippingParents: clippingParents,\n    viewport: viewport,\n    popper: popper,\n    reference: reference,\n    variationPlacements: variationPlacements,\n    placements: placements,\n    beforeRead: beforeRead,\n    read: read,\n    afterRead: afterRead,\n    beforeMain: beforeMain,\n    main: main,\n    afterMain: afterMain,\n    beforeWrite: beforeWrite,\n    write: write,\n    afterWrite: afterWrite,\n    modifierPhases: modifierPhases,\n    applyStyles: applyStyles$1,\n    arrow: arrow$1,\n    computeStyles: computeStyles$1,\n    eventListeners: eventListeners,\n    flip: flip$1,\n    hide: hide$1,\n    offset: offset$1,\n    popperOffsets: popperOffsets$1,\n    preventOverflow: preventOverflow$1\n  });\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): dropdown.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$8 = 'dropdown';\n  const DATA_KEY$7 = 'bs.dropdown';\n  const EVENT_KEY$7 = `.${DATA_KEY$7}`;\n  const DATA_API_KEY$4 = '.data-api';\n  const ESCAPE_KEY$2 = 'Escape';\n  const SPACE_KEY = 'Space';\n  const TAB_KEY = 'Tab';\n  const ARROW_UP_KEY = 'ArrowUp';\n  const ARROW_DOWN_KEY = 'ArrowDown';\n  const RIGHT_MOUSE_BUTTON = 2; // MouseEvent.button value for the secondary button, usually the right button\n\n  const REGEXP_KEYDOWN = new RegExp(`${ARROW_UP_KEY}|${ARROW_DOWN_KEY}|${ESCAPE_KEY$2}`);\n  const EVENT_HIDE$4 = `hide${EVENT_KEY$7}`;\n  const EVENT_HIDDEN$4 = `hidden${EVENT_KEY$7}`;\n  const EVENT_SHOW$4 = `show${EVENT_KEY$7}`;\n  const EVENT_SHOWN$4 = `shown${EVENT_KEY$7}`;\n  const EVENT_CLICK = `click${EVENT_KEY$7}`;\n  const EVENT_CLICK_DATA_API$3 = `click${EVENT_KEY$7}${DATA_API_KEY$4}`;\n  const EVENT_KEYDOWN_DATA_API = `keydown${EVENT_KEY$7}${DATA_API_KEY$4}`;\n  const EVENT_KEYUP_DATA_API = `keyup${EVENT_KEY$7}${DATA_API_KEY$4}`;\n  const CLASS_NAME_SHOW$7 = 'show';\n  const CLASS_NAME_DROPUP = 'dropup';\n  const CLASS_NAME_DROPEND = 'dropend';\n  const CLASS_NAME_DROPSTART = 'dropstart';\n  const CLASS_NAME_NAVBAR = 'navbar';\n  const SELECTOR_DATA_TOGGLE$3 = '[data-bs-toggle=\"dropdown\"]';\n  const SELECTOR_MENU = '.dropdown-menu';\n  const SELECTOR_NAVBAR_NAV = '.navbar-nav';\n  const SELECTOR_VISIBLE_ITEMS = '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)';\n  const PLACEMENT_TOP = isRTL() ? 'top-end' : 'top-start';\n  const PLACEMENT_TOPEND = isRTL() ? 'top-start' : 'top-end';\n  const PLACEMENT_BOTTOM = isRTL() ? 'bottom-end' : 'bottom-start';\n  const PLACEMENT_BOTTOMEND = isRTL() ? 'bottom-start' : 'bottom-end';\n  const PLACEMENT_RIGHT = isRTL() ? 'left-start' : 'right-start';\n  const PLACEMENT_LEFT = isRTL() ? 'right-start' : 'left-start';\n  const Default$7 = {\n    offset: [0, 2],\n    boundary: 'clippingParents',\n    reference: 'toggle',\n    display: 'dynamic',\n    popperConfig: null,\n    autoClose: true\n  };\n  const DefaultType$7 = {\n    offset: '(array|string|function)',\n    boundary: '(string|element)',\n    reference: '(string|element|object)',\n    display: 'string',\n    popperConfig: '(null|object|function)',\n    autoClose: '(boolean|string)'\n  };\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Dropdown extends BaseComponent {\n    constructor(element, config) {\n      super(element);\n      this._popper = null;\n      this._config = this._getConfig(config);\n      this._menu = this._getMenuElement();\n      this._inNavbar = this._detectNavbar();\n\n      this._addEventListeners();\n    } // Getters\n\n\n    static get Default() {\n      return Default$7;\n    }\n\n    static get DefaultType() {\n      return DefaultType$7;\n    }\n\n    static get NAME() {\n      return NAME$8;\n    } // Public\n\n\n    toggle() {\n      if (isDisabled(this._element)) {\n        return;\n      }\n\n      const isActive = this._element.classList.contains(CLASS_NAME_SHOW$7);\n\n      if (isActive) {\n        this.hide();\n        return;\n      }\n\n      this.show();\n    }\n\n    show() {\n      if (isDisabled(this._element) || this._menu.classList.contains(CLASS_NAME_SHOW$7)) {\n        return;\n      }\n\n      const parent = Dropdown.getParentFromElement(this._element);\n      const relatedTarget = {\n        relatedTarget: this._element\n      };\n      const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$4, relatedTarget);\n\n      if (showEvent.defaultPrevented) {\n        return;\n      } // Totally disable Popper for Dropdowns in Navbar\n\n\n      if (this._inNavbar) {\n        Manipulator.setDataAttribute(this._menu, 'popper', 'none');\n      } else {\n        if (typeof Popper === 'undefined') {\n          throw new TypeError('Bootstrap\\'s dropdowns require Popper (https://popper.js.org)');\n        }\n\n        let referenceElement = this._element;\n\n        if (this._config.reference === 'parent') {\n          referenceElement = parent;\n        } else if (isElement$1(this._config.reference)) {\n          referenceElement = getElement(this._config.reference);\n        } else if (typeof this._config.reference === 'object') {\n          referenceElement = this._config.reference;\n        }\n\n        const popperConfig = this._getPopperConfig();\n\n        const isDisplayStatic = popperConfig.modifiers.find(modifier => modifier.name === 'applyStyles' && modifier.enabled === false);\n        this._popper = createPopper(referenceElement, this._menu, popperConfig);\n\n        if (isDisplayStatic) {\n          Manipulator.setDataAttribute(this._menu, 'popper', 'static');\n        }\n      } // If this is a touch-enabled device we add extra\n      // empty mouseover listeners to the body's immediate children;\n      // only needed because of broken event delegation on iOS\n      // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n\n\n      if ('ontouchstart' in document.documentElement && !parent.closest(SELECTOR_NAVBAR_NAV)) {\n        [].concat(...document.body.children).forEach(elem => EventHandler.on(elem, 'mouseover', noop));\n      }\n\n      this._element.focus();\n\n      this._element.setAttribute('aria-expanded', true);\n\n      this._menu.classList.toggle(CLASS_NAME_SHOW$7);\n\n      this._element.classList.toggle(CLASS_NAME_SHOW$7);\n\n      EventHandler.trigger(this._element, EVENT_SHOWN$4, relatedTarget);\n    }\n\n    hide() {\n      if (isDisabled(this._element) || !this._menu.classList.contains(CLASS_NAME_SHOW$7)) {\n        return;\n      }\n\n      const relatedTarget = {\n        relatedTarget: this._element\n      };\n\n      this._completeHide(relatedTarget);\n    }\n\n    dispose() {\n      if (this._popper) {\n        this._popper.destroy();\n      }\n\n      super.dispose();\n    }\n\n    update() {\n      this._inNavbar = this._detectNavbar();\n\n      if (this._popper) {\n        this._popper.update();\n      }\n    } // Private\n\n\n    _addEventListeners() {\n      EventHandler.on(this._element, EVENT_CLICK, event => {\n        event.preventDefault();\n        this.toggle();\n      });\n    }\n\n    _completeHide(relatedTarget) {\n      const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$4, relatedTarget);\n\n      if (hideEvent.defaultPrevented) {\n        return;\n      } // If this is a touch-enabled device we remove the extra\n      // empty mouseover listeners we added for iOS support\n\n\n      if ('ontouchstart' in document.documentElement) {\n        [].concat(...document.body.children).forEach(elem => EventHandler.off(elem, 'mouseover', noop));\n      }\n\n      if (this._popper) {\n        this._popper.destroy();\n      }\n\n      this._menu.classList.remove(CLASS_NAME_SHOW$7);\n\n      this._element.classList.remove(CLASS_NAME_SHOW$7);\n\n      this._element.setAttribute('aria-expanded', 'false');\n\n      Manipulator.removeDataAttribute(this._menu, 'popper');\n      EventHandler.trigger(this._element, EVENT_HIDDEN$4, relatedTarget);\n    }\n\n    _getConfig(config) {\n      config = { ...this.constructor.Default,\n        ...Manipulator.getDataAttributes(this._element),\n        ...config\n      };\n      typeCheckConfig(NAME$8, config, this.constructor.DefaultType);\n\n      if (typeof config.reference === 'object' && !isElement$1(config.reference) && typeof config.reference.getBoundingClientRect !== 'function') {\n        // Popper virtual elements require a getBoundingClientRect method\n        throw new TypeError(`${NAME$8.toUpperCase()}: Option \"reference\" provided type \"object\" without a required \"getBoundingClientRect\" method.`);\n      }\n\n      return config;\n    }\n\n    _getMenuElement() {\n      return SelectorEngine.next(this._element, SELECTOR_MENU)[0];\n    }\n\n    _getPlacement() {\n      const parentDropdown = this._element.parentNode;\n\n      if (parentDropdown.classList.contains(CLASS_NAME_DROPEND)) {\n        return PLACEMENT_RIGHT;\n      }\n\n      if (parentDropdown.classList.contains(CLASS_NAME_DROPSTART)) {\n        return PLACEMENT_LEFT;\n      } // We need to trim the value because custom properties can also include spaces\n\n\n      const isEnd = getComputedStyle(this._menu).getPropertyValue('--bs-position').trim() === 'end';\n\n      if (parentDropdown.classList.contains(CLASS_NAME_DROPUP)) {\n        return isEnd ? PLACEMENT_TOPEND : PLACEMENT_TOP;\n      }\n\n      return isEnd ? PLACEMENT_BOTTOMEND : PLACEMENT_BOTTOM;\n    }\n\n    _detectNavbar() {\n      return this._element.closest(`.${CLASS_NAME_NAVBAR}`) !== null;\n    }\n\n    _getOffset() {\n      const {\n        offset\n      } = this._config;\n\n      if (typeof offset === 'string') {\n        return offset.split(',').map(val => Number.parseInt(val, 10));\n      }\n\n      if (typeof offset === 'function') {\n        return popperData => offset(popperData, this._element);\n      }\n\n      return offset;\n    }\n\n    _getPopperConfig() {\n      const defaultBsPopperConfig = {\n        placement: this._getPlacement(),\n        modifiers: [{\n          name: 'preventOverflow',\n          options: {\n            boundary: this._config.boundary\n          }\n        }, {\n          name: 'offset',\n          options: {\n            offset: this._getOffset()\n          }\n        }]\n      }; // Disable Popper if we have a static display\n\n      if (this._config.display === 'static') {\n        defaultBsPopperConfig.modifiers = [{\n          name: 'applyStyles',\n          enabled: false\n        }];\n      }\n\n      return { ...defaultBsPopperConfig,\n        ...(typeof this._config.popperConfig === 'function' ? this._config.popperConfig(defaultBsPopperConfig) : this._config.popperConfig)\n      };\n    }\n\n    _selectMenuItem({\n      key,\n      target\n    }) {\n      const items = SelectorEngine.find(SELECTOR_VISIBLE_ITEMS, this._menu).filter(isVisible);\n\n      if (!items.length) {\n        return;\n      } // if target isn't included in items (e.g. when expanding the dropdown)\n      // allow cycling to get the last item in case key equals ARROW_UP_KEY\n\n\n      getNextActiveElement(items, target, key === ARROW_DOWN_KEY, !items.includes(target)).focus();\n    } // Static\n\n\n    static dropdownInterface(element, config) {\n      const data = Dropdown.getOrCreateInstance(element, config);\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config]();\n      }\n    }\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        Dropdown.dropdownInterface(this, config);\n      });\n    }\n\n    static clearMenus(event) {\n      if (event && (event.button === RIGHT_MOUSE_BUTTON || event.type === 'keyup' && event.key !== TAB_KEY)) {\n        return;\n      }\n\n      const toggles = SelectorEngine.find(SELECTOR_DATA_TOGGLE$3);\n\n      for (let i = 0, len = toggles.length; i < len; i++) {\n        const context = Dropdown.getInstance(toggles[i]);\n\n        if (!context || context._config.autoClose === false) {\n          continue;\n        }\n\n        if (!context._element.classList.contains(CLASS_NAME_SHOW$7)) {\n          continue;\n        }\n\n        const relatedTarget = {\n          relatedTarget: context._element\n        };\n\n        if (event) {\n          const composedPath = event.composedPath();\n          const isMenuTarget = composedPath.includes(context._menu);\n\n          if (composedPath.includes(context._element) || context._config.autoClose === 'inside' && !isMenuTarget || context._config.autoClose === 'outside' && isMenuTarget) {\n            continue;\n          } // Tab navigation through the dropdown menu or events from contained inputs shouldn't close the menu\n\n\n          if (context._menu.contains(event.target) && (event.type === 'keyup' && event.key === TAB_KEY || /input|select|option|textarea|form/i.test(event.target.tagName))) {\n            continue;\n          }\n\n          if (event.type === 'click') {\n            relatedTarget.clickEvent = event;\n          }\n        }\n\n        context._completeHide(relatedTarget);\n      }\n    }\n\n    static getParentFromElement(element) {\n      return getElementFromSelector(element) || element.parentNode;\n    }\n\n    static dataApiKeydownHandler(event) {\n      // If not input/textarea:\n      //  - And not a key in REGEXP_KEYDOWN => not a dropdown command\n      // If input/textarea:\n      //  - If space key => not a dropdown command\n      //  - If key is other than escape\n      //    - If key is not up or down => not a dropdown command\n      //    - If trigger inside the menu => not a dropdown command\n      if (/input|textarea/i.test(event.target.tagName) ? event.key === SPACE_KEY || event.key !== ESCAPE_KEY$2 && (event.key !== ARROW_DOWN_KEY && event.key !== ARROW_UP_KEY || event.target.closest(SELECTOR_MENU)) : !REGEXP_KEYDOWN.test(event.key)) {\n        return;\n      }\n\n      const isActive = this.classList.contains(CLASS_NAME_SHOW$7);\n\n      if (!isActive && event.key === ESCAPE_KEY$2) {\n        return;\n      }\n\n      event.preventDefault();\n      event.stopPropagation();\n\n      if (isDisabled(this)) {\n        return;\n      }\n\n      const getToggleButton = () => this.matches(SELECTOR_DATA_TOGGLE$3) ? this : SelectorEngine.prev(this, SELECTOR_DATA_TOGGLE$3)[0];\n\n      if (event.key === ESCAPE_KEY$2) {\n        getToggleButton().focus();\n        Dropdown.clearMenus();\n        return;\n      }\n\n      if (event.key === ARROW_UP_KEY || event.key === ARROW_DOWN_KEY) {\n        if (!isActive) {\n          getToggleButton().click();\n        }\n\n        Dropdown.getInstance(getToggleButton())._selectMenuItem(event);\n\n        return;\n      }\n\n      if (!isActive || event.key === SPACE_KEY) {\n        Dropdown.clearMenus();\n      }\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_DATA_TOGGLE$3, Dropdown.dataApiKeydownHandler);\n  EventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown.dataApiKeydownHandler);\n  EventHandler.on(document, EVENT_CLICK_DATA_API$3, Dropdown.clearMenus);\n  EventHandler.on(document, EVENT_KEYUP_DATA_API, Dropdown.clearMenus);\n  EventHandler.on(document, EVENT_CLICK_DATA_API$3, SELECTOR_DATA_TOGGLE$3, function (event) {\n    event.preventDefault();\n    Dropdown.dropdownInterface(this);\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Dropdown to jQuery only if jQuery is present\n   */\n\n  defineJQueryPlugin(Dropdown);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): util/scrollBar.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  const SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top';\n  const SELECTOR_STICKY_CONTENT = '.sticky-top';\n\n  class ScrollBarHelper {\n    constructor() {\n      this._element = document.body;\n    }\n\n    getWidth() {\n      // https://developer.mozilla.org/en-US/docs/Web/API/Window/innerWidth#usage_notes\n      const documentWidth = document.documentElement.clientWidth;\n      return Math.abs(window.innerWidth - documentWidth);\n    }\n\n    hide() {\n      const width = this.getWidth();\n\n      this._disableOverFlow(); // give padding to element to balance the hidden scrollbar width\n\n\n      this._setElementAttributes(this._element, 'paddingRight', calculatedValue => calculatedValue + width); // trick: We adjust positive paddingRight and negative marginRight to sticky-top elements to keep showing fullwidth\n\n\n      this._setElementAttributes(SELECTOR_FIXED_CONTENT, 'paddingRight', calculatedValue => calculatedValue + width);\n\n      this._setElementAttributes(SELECTOR_STICKY_CONTENT, 'marginRight', calculatedValue => calculatedValue - width);\n    }\n\n    _disableOverFlow() {\n      this._saveInitialAttribute(this._element, 'overflow');\n\n      this._element.style.overflow = 'hidden';\n    }\n\n    _setElementAttributes(selector, styleProp, callback) {\n      const scrollbarWidth = this.getWidth();\n\n      const manipulationCallBack = element => {\n        if (element !== this._element && window.innerWidth > element.clientWidth + scrollbarWidth) {\n          return;\n        }\n\n        this._saveInitialAttribute(element, styleProp);\n\n        const calculatedValue = window.getComputedStyle(element)[styleProp];\n        element.style[styleProp] = `${callback(Number.parseFloat(calculatedValue))}px`;\n      };\n\n      this._applyManipulationCallback(selector, manipulationCallBack);\n    }\n\n    reset() {\n      this._resetElementAttributes(this._element, 'overflow');\n\n      this._resetElementAttributes(this._element, 'paddingRight');\n\n      this._resetElementAttributes(SELECTOR_FIXED_CONTENT, 'paddingRight');\n\n      this._resetElementAttributes(SELECTOR_STICKY_CONTENT, 'marginRight');\n    }\n\n    _saveInitialAttribute(element, styleProp) {\n      const actualValue = element.style[styleProp];\n\n      if (actualValue) {\n        Manipulator.setDataAttribute(element, styleProp, actualValue);\n      }\n    }\n\n    _resetElementAttributes(selector, styleProp) {\n      const manipulationCallBack = element => {\n        const value = Manipulator.getDataAttribute(element, styleProp);\n\n        if (typeof value === 'undefined') {\n          element.style.removeProperty(styleProp);\n        } else {\n          Manipulator.removeDataAttribute(element, styleProp);\n          element.style[styleProp] = value;\n        }\n      };\n\n      this._applyManipulationCallback(selector, manipulationCallBack);\n    }\n\n    _applyManipulationCallback(selector, callBack) {\n      if (isElement$1(selector)) {\n        callBack(selector);\n      } else {\n        SelectorEngine.find(selector, this._element).forEach(callBack);\n      }\n    }\n\n    isOverflowing() {\n      return this.getWidth() > 0;\n    }\n\n  }\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): util/backdrop.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  const Default$6 = {\n    isVisible: true,\n    // if false, we use the backdrop helper without adding any element to the dom\n    isAnimated: false,\n    rootElement: 'body',\n    // give the choice to place backdrop under different elements\n    clickCallback: null\n  };\n  const DefaultType$6 = {\n    isVisible: 'boolean',\n    isAnimated: 'boolean',\n    rootElement: '(element|string)',\n    clickCallback: '(function|null)'\n  };\n  const NAME$7 = 'backdrop';\n  const CLASS_NAME_BACKDROP = 'modal-backdrop';\n  const CLASS_NAME_FADE$5 = 'fade';\n  const CLASS_NAME_SHOW$6 = 'show';\n  const EVENT_MOUSEDOWN = `mousedown.bs.${NAME$7}`;\n\n  class Backdrop {\n    constructor(config) {\n      this._config = this._getConfig(config);\n      this._isAppended = false;\n      this._element = null;\n    }\n\n    show(callback) {\n      if (!this._config.isVisible) {\n        execute(callback);\n        return;\n      }\n\n      this._append();\n\n      if (this._config.isAnimated) {\n        reflow(this._getElement());\n      }\n\n      this._getElement().classList.add(CLASS_NAME_SHOW$6);\n\n      this._emulateAnimation(() => {\n        execute(callback);\n      });\n    }\n\n    hide(callback) {\n      if (!this._config.isVisible) {\n        execute(callback);\n        return;\n      }\n\n      this._getElement().classList.remove(CLASS_NAME_SHOW$6);\n\n      this._emulateAnimation(() => {\n        this.dispose();\n        execute(callback);\n      });\n    } // Private\n\n\n    _getElement() {\n      if (!this._element) {\n        const backdrop = document.createElement('div');\n        backdrop.className = CLASS_NAME_BACKDROP;\n\n        if (this._config.isAnimated) {\n          backdrop.classList.add(CLASS_NAME_FADE$5);\n        }\n\n        this._element = backdrop;\n      }\n\n      return this._element;\n    }\n\n    _getConfig(config) {\n      config = { ...Default$6,\n        ...(typeof config === 'object' ? config : {})\n      }; // use getElement() with the default \"body\" to get a fresh Element on each instantiation\n\n      config.rootElement = getElement(config.rootElement);\n      typeCheckConfig(NAME$7, config, DefaultType$6);\n      return config;\n    }\n\n    _append() {\n      if (this._isAppended) {\n        return;\n      }\n\n      this._config.rootElement.appendChild(this._getElement());\n\n      EventHandler.on(this._getElement(), EVENT_MOUSEDOWN, () => {\n        execute(this._config.clickCallback);\n      });\n      this._isAppended = true;\n    }\n\n    dispose() {\n      if (!this._isAppended) {\n        return;\n      }\n\n      EventHandler.off(this._element, EVENT_MOUSEDOWN);\n\n      this._element.remove();\n\n      this._isAppended = false;\n    }\n\n    _emulateAnimation(callback) {\n      executeAfterTransition(callback, this._getElement(), this._config.isAnimated);\n    }\n\n  }\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): modal.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$6 = 'modal';\n  const DATA_KEY$6 = 'bs.modal';\n  const EVENT_KEY$6 = `.${DATA_KEY$6}`;\n  const DATA_API_KEY$3 = '.data-api';\n  const ESCAPE_KEY$1 = 'Escape';\n  const Default$5 = {\n    backdrop: true,\n    keyboard: true,\n    focus: true\n  };\n  const DefaultType$5 = {\n    backdrop: '(boolean|string)',\n    keyboard: 'boolean',\n    focus: 'boolean'\n  };\n  const EVENT_HIDE$3 = `hide${EVENT_KEY$6}`;\n  const EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY$6}`;\n  const EVENT_HIDDEN$3 = `hidden${EVENT_KEY$6}`;\n  const EVENT_SHOW$3 = `show${EVENT_KEY$6}`;\n  const EVENT_SHOWN$3 = `shown${EVENT_KEY$6}`;\n  const EVENT_FOCUSIN$2 = `focusin${EVENT_KEY$6}`;\n  const EVENT_RESIZE = `resize${EVENT_KEY$6}`;\n  const EVENT_CLICK_DISMISS$2 = `click.dismiss${EVENT_KEY$6}`;\n  const EVENT_KEYDOWN_DISMISS$1 = `keydown.dismiss${EVENT_KEY$6}`;\n  const EVENT_MOUSEUP_DISMISS = `mouseup.dismiss${EVENT_KEY$6}`;\n  const EVENT_MOUSEDOWN_DISMISS = `mousedown.dismiss${EVENT_KEY$6}`;\n  const EVENT_CLICK_DATA_API$2 = `click${EVENT_KEY$6}${DATA_API_KEY$3}`;\n  const CLASS_NAME_OPEN = 'modal-open';\n  const CLASS_NAME_FADE$4 = 'fade';\n  const CLASS_NAME_SHOW$5 = 'show';\n  const CLASS_NAME_STATIC = 'modal-static';\n  const SELECTOR_DIALOG = '.modal-dialog';\n  const SELECTOR_MODAL_BODY = '.modal-body';\n  const SELECTOR_DATA_TOGGLE$2 = '[data-bs-toggle=\"modal\"]';\n  const SELECTOR_DATA_DISMISS$2 = '[data-bs-dismiss=\"modal\"]';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Modal extends BaseComponent {\n    constructor(element, config) {\n      super(element);\n      this._config = this._getConfig(config);\n      this._dialog = SelectorEngine.findOne(SELECTOR_DIALOG, this._element);\n      this._backdrop = this._initializeBackDrop();\n      this._isShown = false;\n      this._ignoreBackdropClick = false;\n      this._isTransitioning = false;\n      this._scrollBar = new ScrollBarHelper();\n    } // Getters\n\n\n    static get Default() {\n      return Default$5;\n    }\n\n    static get NAME() {\n      return NAME$6;\n    } // Public\n\n\n    toggle(relatedTarget) {\n      return this._isShown ? this.hide() : this.show(relatedTarget);\n    }\n\n    show(relatedTarget) {\n      if (this._isShown || this._isTransitioning) {\n        return;\n      }\n\n      const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$3, {\n        relatedTarget\n      });\n\n      if (showEvent.defaultPrevented) {\n        return;\n      }\n\n      this._isShown = true;\n\n      if (this._isAnimated()) {\n        this._isTransitioning = true;\n      }\n\n      this._scrollBar.hide();\n\n      document.body.classList.add(CLASS_NAME_OPEN);\n\n      this._adjustDialog();\n\n      this._setEscapeEvent();\n\n      this._setResizeEvent();\n\n      EventHandler.on(this._element, EVENT_CLICK_DISMISS$2, SELECTOR_DATA_DISMISS$2, event => this.hide(event));\n      EventHandler.on(this._dialog, EVENT_MOUSEDOWN_DISMISS, () => {\n        EventHandler.one(this._element, EVENT_MOUSEUP_DISMISS, event => {\n          if (event.target === this._element) {\n            this._ignoreBackdropClick = true;\n          }\n        });\n      });\n\n      this._showBackdrop(() => this._showElement(relatedTarget));\n    }\n\n    hide(event) {\n      if (event && ['A', 'AREA'].includes(event.target.tagName)) {\n        event.preventDefault();\n      }\n\n      if (!this._isShown || this._isTransitioning) {\n        return;\n      }\n\n      const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$3);\n\n      if (hideEvent.defaultPrevented) {\n        return;\n      }\n\n      this._isShown = false;\n\n      const isAnimated = this._isAnimated();\n\n      if (isAnimated) {\n        this._isTransitioning = true;\n      }\n\n      this._setEscapeEvent();\n\n      this._setResizeEvent();\n\n      EventHandler.off(document, EVENT_FOCUSIN$2);\n\n      this._element.classList.remove(CLASS_NAME_SHOW$5);\n\n      EventHandler.off(this._element, EVENT_CLICK_DISMISS$2);\n      EventHandler.off(this._dialog, EVENT_MOUSEDOWN_DISMISS);\n\n      this._queueCallback(() => this._hideModal(), this._element, isAnimated);\n    }\n\n    dispose() {\n      [window, this._dialog].forEach(htmlElement => EventHandler.off(htmlElement, EVENT_KEY$6));\n\n      this._backdrop.dispose();\n\n      super.dispose();\n      /**\n       * `document` has 2 events `EVENT_FOCUSIN` and `EVENT_CLICK_DATA_API`\n       * Do not move `document` in `htmlElements` array\n       * It will remove `EVENT_CLICK_DATA_API` event that should remain\n       */\n\n      EventHandler.off(document, EVENT_FOCUSIN$2);\n    }\n\n    handleUpdate() {\n      this._adjustDialog();\n    } // Private\n\n\n    _initializeBackDrop() {\n      return new Backdrop({\n        isVisible: Boolean(this._config.backdrop),\n        // 'static' option will be translated to true, and booleans will keep their value\n        isAnimated: this._isAnimated()\n      });\n    }\n\n    _getConfig(config) {\n      config = { ...Default$5,\n        ...Manipulator.getDataAttributes(this._element),\n        ...(typeof config === 'object' ? config : {})\n      };\n      typeCheckConfig(NAME$6, config, DefaultType$5);\n      return config;\n    }\n\n    _showElement(relatedTarget) {\n      const isAnimated = this._isAnimated();\n\n      const modalBody = SelectorEngine.findOne(SELECTOR_MODAL_BODY, this._dialog);\n\n      if (!this._element.parentNode || this._element.parentNode.nodeType !== Node.ELEMENT_NODE) {\n        // Don't move modal's DOM position\n        document.body.appendChild(this._element);\n      }\n\n      this._element.style.display = 'block';\n\n      this._element.removeAttribute('aria-hidden');\n\n      this._element.setAttribute('aria-modal', true);\n\n      this._element.setAttribute('role', 'dialog');\n\n      this._element.scrollTop = 0;\n\n      if (modalBody) {\n        modalBody.scrollTop = 0;\n      }\n\n      if (isAnimated) {\n        reflow(this._element);\n      }\n\n      this._element.classList.add(CLASS_NAME_SHOW$5);\n\n      if (this._config.focus) {\n        this._enforceFocus();\n      }\n\n      const transitionComplete = () => {\n        if (this._config.focus) {\n          this._element.focus();\n        }\n\n        this._isTransitioning = false;\n        EventHandler.trigger(this._element, EVENT_SHOWN$3, {\n          relatedTarget\n        });\n      };\n\n      this._queueCallback(transitionComplete, this._dialog, isAnimated);\n    }\n\n    _enforceFocus() {\n      EventHandler.off(document, EVENT_FOCUSIN$2); // guard against infinite focus loop\n\n      EventHandler.on(document, EVENT_FOCUSIN$2, event => {\n        if (document !== event.target && this._element !== event.target && !this._element.contains(event.target)) {\n          this._element.focus();\n        }\n      });\n    }\n\n    _setEscapeEvent() {\n      if (this._isShown) {\n        EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS$1, event => {\n          if (this._config.keyboard && event.key === ESCAPE_KEY$1) {\n            event.preventDefault();\n            this.hide();\n          } else if (!this._config.keyboard && event.key === ESCAPE_KEY$1) {\n            this._triggerBackdropTransition();\n          }\n        });\n      } else {\n        EventHandler.off(this._element, EVENT_KEYDOWN_DISMISS$1);\n      }\n    }\n\n    _setResizeEvent() {\n      if (this._isShown) {\n        EventHandler.on(window, EVENT_RESIZE, () => this._adjustDialog());\n      } else {\n        EventHandler.off(window, EVENT_RESIZE);\n      }\n    }\n\n    _hideModal() {\n      this._element.style.display = 'none';\n\n      this._element.setAttribute('aria-hidden', true);\n\n      this._element.removeAttribute('aria-modal');\n\n      this._element.removeAttribute('role');\n\n      this._isTransitioning = false;\n\n      this._backdrop.hide(() => {\n        document.body.classList.remove(CLASS_NAME_OPEN);\n\n        this._resetAdjustments();\n\n        this._scrollBar.reset();\n\n        EventHandler.trigger(this._element, EVENT_HIDDEN$3);\n      });\n    }\n\n    _showBackdrop(callback) {\n      EventHandler.on(this._element, EVENT_CLICK_DISMISS$2, event => {\n        if (this._ignoreBackdropClick) {\n          this._ignoreBackdropClick = false;\n          return;\n        }\n\n        if (event.target !== event.currentTarget) {\n          return;\n        }\n\n        if (this._config.backdrop === true) {\n          this.hide();\n        } else if (this._config.backdrop === 'static') {\n          this._triggerBackdropTransition();\n        }\n      });\n\n      this._backdrop.show(callback);\n    }\n\n    _isAnimated() {\n      return this._element.classList.contains(CLASS_NAME_FADE$4);\n    }\n\n    _triggerBackdropTransition() {\n      const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED);\n\n      if (hideEvent.defaultPrevented) {\n        return;\n      }\n\n      const {\n        classList,\n        scrollHeight,\n        style\n      } = this._element;\n      const isModalOverflowing = scrollHeight > document.documentElement.clientHeight; // return if the following background transition hasn't yet completed\n\n      if (!isModalOverflowing && style.overflowY === 'hidden' || classList.contains(CLASS_NAME_STATIC)) {\n        return;\n      }\n\n      if (!isModalOverflowing) {\n        style.overflowY = 'hidden';\n      }\n\n      classList.add(CLASS_NAME_STATIC);\n\n      this._queueCallback(() => {\n        classList.remove(CLASS_NAME_STATIC);\n\n        if (!isModalOverflowing) {\n          this._queueCallback(() => {\n            style.overflowY = '';\n          }, this._dialog);\n        }\n      }, this._dialog);\n\n      this._element.focus();\n    } // ----------------------------------------------------------------------\n    // the following methods are used to handle overflowing modals\n    // ----------------------------------------------------------------------\n\n\n    _adjustDialog() {\n      const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;\n\n      const scrollbarWidth = this._scrollBar.getWidth();\n\n      const isBodyOverflowing = scrollbarWidth > 0;\n\n      if (!isBodyOverflowing && isModalOverflowing && !isRTL() || isBodyOverflowing && !isModalOverflowing && isRTL()) {\n        this._element.style.paddingLeft = `${scrollbarWidth}px`;\n      }\n\n      if (isBodyOverflowing && !isModalOverflowing && !isRTL() || !isBodyOverflowing && isModalOverflowing && isRTL()) {\n        this._element.style.paddingRight = `${scrollbarWidth}px`;\n      }\n    }\n\n    _resetAdjustments() {\n      this._element.style.paddingLeft = '';\n      this._element.style.paddingRight = '';\n    } // Static\n\n\n    static jQueryInterface(config, relatedTarget) {\n      return this.each(function () {\n        const data = Modal.getOrCreateInstance(this, config);\n\n        if (typeof config !== 'string') {\n          return;\n        }\n\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config](relatedTarget);\n      });\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(document, EVENT_CLICK_DATA_API$2, SELECTOR_DATA_TOGGLE$2, function (event) {\n    const target = getElementFromSelector(this);\n\n    if (['A', 'AREA'].includes(this.tagName)) {\n      event.preventDefault();\n    }\n\n    EventHandler.one(target, EVENT_SHOW$3, showEvent => {\n      if (showEvent.defaultPrevented) {\n        // only register focus restorer if modal will actually get shown\n        return;\n      }\n\n      EventHandler.one(target, EVENT_HIDDEN$3, () => {\n        if (isVisible(this)) {\n          this.focus();\n        }\n      });\n    });\n    const data = Modal.getOrCreateInstance(target);\n    data.toggle(this);\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Modal to jQuery only if jQuery is present\n   */\n\n  defineJQueryPlugin(Modal);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): offcanvas.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$5 = 'offcanvas';\n  const DATA_KEY$5 = 'bs.offcanvas';\n  const EVENT_KEY$5 = `.${DATA_KEY$5}`;\n  const DATA_API_KEY$2 = '.data-api';\n  const EVENT_LOAD_DATA_API$1 = `load${EVENT_KEY$5}${DATA_API_KEY$2}`;\n  const ESCAPE_KEY = 'Escape';\n  const Default$4 = {\n    backdrop: true,\n    keyboard: true,\n    scroll: false\n  };\n  const DefaultType$4 = {\n    backdrop: 'boolean',\n    keyboard: 'boolean',\n    scroll: 'boolean'\n  };\n  const CLASS_NAME_SHOW$4 = 'show';\n  const OPEN_SELECTOR = '.offcanvas.show';\n  const EVENT_SHOW$2 = `show${EVENT_KEY$5}`;\n  const EVENT_SHOWN$2 = `shown${EVENT_KEY$5}`;\n  const EVENT_HIDE$2 = `hide${EVENT_KEY$5}`;\n  const EVENT_HIDDEN$2 = `hidden${EVENT_KEY$5}`;\n  const EVENT_FOCUSIN$1 = `focusin${EVENT_KEY$5}`;\n  const EVENT_CLICK_DATA_API$1 = `click${EVENT_KEY$5}${DATA_API_KEY$2}`;\n  const EVENT_CLICK_DISMISS$1 = `click.dismiss${EVENT_KEY$5}`;\n  const EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY$5}`;\n  const SELECTOR_DATA_DISMISS$1 = '[data-bs-dismiss=\"offcanvas\"]';\n  const SELECTOR_DATA_TOGGLE$1 = '[data-bs-toggle=\"offcanvas\"]';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Offcanvas extends BaseComponent {\n    constructor(element, config) {\n      super(element);\n      this._config = this._getConfig(config);\n      this._isShown = false;\n      this._backdrop = this._initializeBackDrop();\n\n      this._addEventListeners();\n    } // Getters\n\n\n    static get NAME() {\n      return NAME$5;\n    }\n\n    static get Default() {\n      return Default$4;\n    } // Public\n\n\n    toggle(relatedTarget) {\n      return this._isShown ? this.hide() : this.show(relatedTarget);\n    }\n\n    show(relatedTarget) {\n      if (this._isShown) {\n        return;\n      }\n\n      const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$2, {\n        relatedTarget\n      });\n\n      if (showEvent.defaultPrevented) {\n        return;\n      }\n\n      this._isShown = true;\n      this._element.style.visibility = 'visible';\n\n      this._backdrop.show();\n\n      if (!this._config.scroll) {\n        new ScrollBarHelper().hide();\n\n        this._enforceFocusOnElement(this._element);\n      }\n\n      this._element.removeAttribute('aria-hidden');\n\n      this._element.setAttribute('aria-modal', true);\n\n      this._element.setAttribute('role', 'dialog');\n\n      this._element.classList.add(CLASS_NAME_SHOW$4);\n\n      const completeCallBack = () => {\n        EventHandler.trigger(this._element, EVENT_SHOWN$2, {\n          relatedTarget\n        });\n      };\n\n      this._queueCallback(completeCallBack, this._element, true);\n    }\n\n    hide() {\n      if (!this._isShown) {\n        return;\n      }\n\n      const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$2);\n\n      if (hideEvent.defaultPrevented) {\n        return;\n      }\n\n      EventHandler.off(document, EVENT_FOCUSIN$1);\n\n      this._element.blur();\n\n      this._isShown = false;\n\n      this._element.classList.remove(CLASS_NAME_SHOW$4);\n\n      this._backdrop.hide();\n\n      const completeCallback = () => {\n        this._element.setAttribute('aria-hidden', true);\n\n        this._element.removeAttribute('aria-modal');\n\n        this._element.removeAttribute('role');\n\n        this._element.style.visibility = 'hidden';\n\n        if (!this._config.scroll) {\n          new ScrollBarHelper().reset();\n        }\n\n        EventHandler.trigger(this._element, EVENT_HIDDEN$2);\n      };\n\n      this._queueCallback(completeCallback, this._element, true);\n    }\n\n    dispose() {\n      this._backdrop.dispose();\n\n      super.dispose();\n      EventHandler.off(document, EVENT_FOCUSIN$1);\n    } // Private\n\n\n    _getConfig(config) {\n      config = { ...Default$4,\n        ...Manipulator.getDataAttributes(this._element),\n        ...(typeof config === 'object' ? config : {})\n      };\n      typeCheckConfig(NAME$5, config, DefaultType$4);\n      return config;\n    }\n\n    _initializeBackDrop() {\n      return new Backdrop({\n        isVisible: this._config.backdrop,\n        isAnimated: true,\n        rootElement: this._element.parentNode,\n        clickCallback: () => this.hide()\n      });\n    }\n\n    _enforceFocusOnElement(element) {\n      EventHandler.off(document, EVENT_FOCUSIN$1); // guard against infinite focus loop\n\n      EventHandler.on(document, EVENT_FOCUSIN$1, event => {\n        if (document !== event.target && element !== event.target && !element.contains(event.target)) {\n          element.focus();\n        }\n      });\n      element.focus();\n    }\n\n    _addEventListeners() {\n      EventHandler.on(this._element, EVENT_CLICK_DISMISS$1, SELECTOR_DATA_DISMISS$1, () => this.hide());\n      EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS, event => {\n        if (this._config.keyboard && event.key === ESCAPE_KEY) {\n          this.hide();\n        }\n      });\n    } // Static\n\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = Offcanvas.getOrCreateInstance(this, config);\n\n        if (typeof config !== 'string') {\n          return;\n        }\n\n        if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config](this);\n      });\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(document, EVENT_CLICK_DATA_API$1, SELECTOR_DATA_TOGGLE$1, function (event) {\n    const target = getElementFromSelector(this);\n\n    if (['A', 'AREA'].includes(this.tagName)) {\n      event.preventDefault();\n    }\n\n    if (isDisabled(this)) {\n      return;\n    }\n\n    EventHandler.one(target, EVENT_HIDDEN$2, () => {\n      // focus on trigger when it is closed\n      if (isVisible(this)) {\n        this.focus();\n      }\n    }); // avoid conflict when clicking a toggler of an offcanvas, while another is open\n\n    const allReadyOpen = SelectorEngine.findOne(OPEN_SELECTOR);\n\n    if (allReadyOpen && allReadyOpen !== target) {\n      Offcanvas.getInstance(allReadyOpen).hide();\n    }\n\n    const data = Offcanvas.getOrCreateInstance(target);\n    data.toggle(this);\n  });\n  EventHandler.on(window, EVENT_LOAD_DATA_API$1, () => SelectorEngine.find(OPEN_SELECTOR).forEach(el => Offcanvas.getOrCreateInstance(el).show()));\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   */\n\n  defineJQueryPlugin(Offcanvas);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): util/sanitizer.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  const uriAttrs = new Set(['background', 'cite', 'href', 'itemtype', 'longdesc', 'poster', 'src', 'xlink:href']);\n  const ARIA_ATTRIBUTE_PATTERN = /^aria-[\\w-]*$/i;\n  /**\n   * A pattern that recognizes a commonly useful subset of URLs that are safe.\n   *\n   * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts\n   */\n\n  const SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file):|[^#&/:?]*(?:[#/?]|$))/i;\n  /**\n   * A pattern that matches safe data URLs. Only matches image, video and audio types.\n   *\n   * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts\n   */\n\n  const DATA_URL_PATTERN = /^data:(?:image\\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\\/(?:mpeg|mp4|ogg|webm)|audio\\/(?:mp3|oga|ogg|opus));base64,[\\d+/a-z]+=*$/i;\n\n  const allowedAttribute = (attr, allowedAttributeList) => {\n    const attrName = attr.nodeName.toLowerCase();\n\n    if (allowedAttributeList.includes(attrName)) {\n      if (uriAttrs.has(attrName)) {\n        return Boolean(SAFE_URL_PATTERN.test(attr.nodeValue) || DATA_URL_PATTERN.test(attr.nodeValue));\n      }\n\n      return true;\n    }\n\n    const regExp = allowedAttributeList.filter(attrRegex => attrRegex instanceof RegExp); // Check if a regular expression validates the attribute.\n\n    for (let i = 0, len = regExp.length; i < len; i++) {\n      if (regExp[i].test(attrName)) {\n        return true;\n      }\n    }\n\n    return false;\n  };\n\n  const DefaultAllowlist = {\n    // Global attributes allowed on any supplied element below.\n    '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],\n    a: ['target', 'href', 'title', 'rel'],\n    area: [],\n    b: [],\n    br: [],\n    col: [],\n    code: [],\n    div: [],\n    em: [],\n    hr: [],\n    h1: [],\n    h2: [],\n    h3: [],\n    h4: [],\n    h5: [],\n    h6: [],\n    i: [],\n    img: ['src', 'srcset', 'alt', 'title', 'width', 'height'],\n    li: [],\n    ol: [],\n    p: [],\n    pre: [],\n    s: [],\n    small: [],\n    span: [],\n    sub: [],\n    sup: [],\n    strong: [],\n    u: [],\n    ul: []\n  };\n  function sanitizeHtml(unsafeHtml, allowList, sanitizeFn) {\n    if (!unsafeHtml.length) {\n      return unsafeHtml;\n    }\n\n    if (sanitizeFn && typeof sanitizeFn === 'function') {\n      return sanitizeFn(unsafeHtml);\n    }\n\n    const domParser = new window.DOMParser();\n    const createdDocument = domParser.parseFromString(unsafeHtml, 'text/html');\n    const allowlistKeys = Object.keys(allowList);\n    const elements = [].concat(...createdDocument.body.querySelectorAll('*'));\n\n    for (let i = 0, len = elements.length; i < len; i++) {\n      const el = elements[i];\n      const elName = el.nodeName.toLowerCase();\n\n      if (!allowlistKeys.includes(elName)) {\n        el.remove();\n        continue;\n      }\n\n      const attributeList = [].concat(...el.attributes);\n      const allowedAttributes = [].concat(allowList['*'] || [], allowList[elName] || []);\n      attributeList.forEach(attr => {\n        if (!allowedAttribute(attr, allowedAttributes)) {\n          el.removeAttribute(attr.nodeName);\n        }\n      });\n    }\n\n    return createdDocument.body.innerHTML;\n  }\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): tooltip.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$4 = 'tooltip';\n  const DATA_KEY$4 = 'bs.tooltip';\n  const EVENT_KEY$4 = `.${DATA_KEY$4}`;\n  const CLASS_PREFIX$1 = 'bs-tooltip';\n  const BSCLS_PREFIX_REGEX$1 = new RegExp(`(^|\\\\s)${CLASS_PREFIX$1}\\\\S+`, 'g');\n  const DISALLOWED_ATTRIBUTES = new Set(['sanitize', 'allowList', 'sanitizeFn']);\n  const DefaultType$3 = {\n    animation: 'boolean',\n    template: 'string',\n    title: '(string|element|function)',\n    trigger: 'string',\n    delay: '(number|object)',\n    html: 'boolean',\n    selector: '(string|boolean)',\n    placement: '(string|function)',\n    offset: '(array|string|function)',\n    container: '(string|element|boolean)',\n    fallbackPlacements: 'array',\n    boundary: '(string|element)',\n    customClass: '(string|function)',\n    sanitize: 'boolean',\n    sanitizeFn: '(null|function)',\n    allowList: 'object',\n    popperConfig: '(null|object|function)'\n  };\n  const AttachmentMap = {\n    AUTO: 'auto',\n    TOP: 'top',\n    RIGHT: isRTL() ? 'left' : 'right',\n    BOTTOM: 'bottom',\n    LEFT: isRTL() ? 'right' : 'left'\n  };\n  const Default$3 = {\n    animation: true,\n    template: '<div class=\"tooltip\" role=\"tooltip\">' + '<div class=\"tooltip-arrow\"></div>' + '<div class=\"tooltip-inner\"></div>' + '</div>',\n    trigger: 'hover focus',\n    title: '',\n    delay: 0,\n    html: false,\n    selector: false,\n    placement: 'top',\n    offset: [0, 0],\n    container: false,\n    fallbackPlacements: ['top', 'right', 'bottom', 'left'],\n    boundary: 'clippingParents',\n    customClass: '',\n    sanitize: true,\n    sanitizeFn: null,\n    allowList: DefaultAllowlist,\n    popperConfig: null\n  };\n  const Event$2 = {\n    HIDE: `hide${EVENT_KEY$4}`,\n    HIDDEN: `hidden${EVENT_KEY$4}`,\n    SHOW: `show${EVENT_KEY$4}`,\n    SHOWN: `shown${EVENT_KEY$4}`,\n    INSERTED: `inserted${EVENT_KEY$4}`,\n    CLICK: `click${EVENT_KEY$4}`,\n    FOCUSIN: `focusin${EVENT_KEY$4}`,\n    FOCUSOUT: `focusout${EVENT_KEY$4}`,\n    MOUSEENTER: `mouseenter${EVENT_KEY$4}`,\n    MOUSELEAVE: `mouseleave${EVENT_KEY$4}`\n  };\n  const CLASS_NAME_FADE$3 = 'fade';\n  const CLASS_NAME_MODAL = 'modal';\n  const CLASS_NAME_SHOW$3 = 'show';\n  const HOVER_STATE_SHOW = 'show';\n  const HOVER_STATE_OUT = 'out';\n  const SELECTOR_TOOLTIP_INNER = '.tooltip-inner';\n  const TRIGGER_HOVER = 'hover';\n  const TRIGGER_FOCUS = 'focus';\n  const TRIGGER_CLICK = 'click';\n  const TRIGGER_MANUAL = 'manual';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Tooltip extends BaseComponent {\n    constructor(element, config) {\n      if (typeof Popper === 'undefined') {\n        throw new TypeError('Bootstrap\\'s tooltips require Popper (https://popper.js.org)');\n      }\n\n      super(element); // private\n\n      this._isEnabled = true;\n      this._timeout = 0;\n      this._hoverState = '';\n      this._activeTrigger = {};\n      this._popper = null; // Protected\n\n      this._config = this._getConfig(config);\n      this.tip = null;\n\n      this._setListeners();\n    } // Getters\n\n\n    static get Default() {\n      return Default$3;\n    }\n\n    static get NAME() {\n      return NAME$4;\n    }\n\n    static get Event() {\n      return Event$2;\n    }\n\n    static get DefaultType() {\n      return DefaultType$3;\n    } // Public\n\n\n    enable() {\n      this._isEnabled = true;\n    }\n\n    disable() {\n      this._isEnabled = false;\n    }\n\n    toggleEnabled() {\n      this._isEnabled = !this._isEnabled;\n    }\n\n    toggle(event) {\n      if (!this._isEnabled) {\n        return;\n      }\n\n      if (event) {\n        const context = this._initializeOnDelegatedTarget(event);\n\n        context._activeTrigger.click = !context._activeTrigger.click;\n\n        if (context._isWithActiveTrigger()) {\n          context._enter(null, context);\n        } else {\n          context._leave(null, context);\n        }\n      } else {\n        if (this.getTipElement().classList.contains(CLASS_NAME_SHOW$3)) {\n          this._leave(null, this);\n\n          return;\n        }\n\n        this._enter(null, this);\n      }\n    }\n\n    dispose() {\n      clearTimeout(this._timeout);\n      EventHandler.off(this._element.closest(`.${CLASS_NAME_MODAL}`), 'hide.bs.modal', this._hideModalHandler);\n\n      if (this.tip) {\n        this.tip.remove();\n      }\n\n      if (this._popper) {\n        this._popper.destroy();\n      }\n\n      super.dispose();\n    }\n\n    show() {\n      if (this._element.style.display === 'none') {\n        throw new Error('Please use show on visible elements');\n      }\n\n      if (!(this.isWithContent() && this._isEnabled)) {\n        return;\n      }\n\n      const showEvent = EventHandler.trigger(this._element, this.constructor.Event.SHOW);\n      const shadowRoot = findShadowRoot(this._element);\n      const isInTheDom = shadowRoot === null ? this._element.ownerDocument.documentElement.contains(this._element) : shadowRoot.contains(this._element);\n\n      if (showEvent.defaultPrevented || !isInTheDom) {\n        return;\n      }\n\n      const tip = this.getTipElement();\n      const tipId = getUID(this.constructor.NAME);\n      tip.setAttribute('id', tipId);\n\n      this._element.setAttribute('aria-describedby', tipId);\n\n      this.setContent();\n\n      if (this._config.animation) {\n        tip.classList.add(CLASS_NAME_FADE$3);\n      }\n\n      const placement = typeof this._config.placement === 'function' ? this._config.placement.call(this, tip, this._element) : this._config.placement;\n\n      const attachment = this._getAttachment(placement);\n\n      this._addAttachmentClass(attachment);\n\n      const {\n        container\n      } = this._config;\n      Data.set(tip, this.constructor.DATA_KEY, this);\n\n      if (!this._element.ownerDocument.documentElement.contains(this.tip)) {\n        container.appendChild(tip);\n        EventHandler.trigger(this._element, this.constructor.Event.INSERTED);\n      }\n\n      if (this._popper) {\n        this._popper.update();\n      } else {\n        this._popper = createPopper(this._element, tip, this._getPopperConfig(attachment));\n      }\n\n      tip.classList.add(CLASS_NAME_SHOW$3);\n      const customClass = typeof this._config.customClass === 'function' ? this._config.customClass() : this._config.customClass;\n\n      if (customClass) {\n        tip.classList.add(...customClass.split(' '));\n      } // If this is a touch-enabled device we add extra\n      // empty mouseover listeners to the body's immediate children;\n      // only needed because of broken event delegation on iOS\n      // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n\n\n      if ('ontouchstart' in document.documentElement) {\n        [].concat(...document.body.children).forEach(element => {\n          EventHandler.on(element, 'mouseover', noop);\n        });\n      }\n\n      const complete = () => {\n        const prevHoverState = this._hoverState;\n        this._hoverState = null;\n        EventHandler.trigger(this._element, this.constructor.Event.SHOWN);\n\n        if (prevHoverState === HOVER_STATE_OUT) {\n          this._leave(null, this);\n        }\n      };\n\n      const isAnimated = this.tip.classList.contains(CLASS_NAME_FADE$3);\n\n      this._queueCallback(complete, this.tip, isAnimated);\n    }\n\n    hide() {\n      if (!this._popper) {\n        return;\n      }\n\n      const tip = this.getTipElement();\n\n      const complete = () => {\n        if (this._isWithActiveTrigger()) {\n          return;\n        }\n\n        if (this._hoverState !== HOVER_STATE_SHOW) {\n          tip.remove();\n        }\n\n        this._cleanTipClass();\n\n        this._element.removeAttribute('aria-describedby');\n\n        EventHandler.trigger(this._element, this.constructor.Event.HIDDEN);\n\n        if (this._popper) {\n          this._popper.destroy();\n\n          this._popper = null;\n        }\n      };\n\n      const hideEvent = EventHandler.trigger(this._element, this.constructor.Event.HIDE);\n\n      if (hideEvent.defaultPrevented) {\n        return;\n      }\n\n      tip.classList.remove(CLASS_NAME_SHOW$3); // If this is a touch-enabled device we remove the extra\n      // empty mouseover listeners we added for iOS support\n\n      if ('ontouchstart' in document.documentElement) {\n        [].concat(...document.body.children).forEach(element => EventHandler.off(element, 'mouseover', noop));\n      }\n\n      this._activeTrigger[TRIGGER_CLICK] = false;\n      this._activeTrigger[TRIGGER_FOCUS] = false;\n      this._activeTrigger[TRIGGER_HOVER] = false;\n      const isAnimated = this.tip.classList.contains(CLASS_NAME_FADE$3);\n\n      this._queueCallback(complete, this.tip, isAnimated);\n\n      this._hoverState = '';\n    }\n\n    update() {\n      if (this._popper !== null) {\n        this._popper.update();\n      }\n    } // Protected\n\n\n    isWithContent() {\n      return Boolean(this.getTitle());\n    }\n\n    getTipElement() {\n      if (this.tip) {\n        return this.tip;\n      }\n\n      const element = document.createElement('div');\n      element.innerHTML = this._config.template;\n      this.tip = element.children[0];\n      return this.tip;\n    }\n\n    setContent() {\n      const tip = this.getTipElement();\n      this.setElementContent(SelectorEngine.findOne(SELECTOR_TOOLTIP_INNER, tip), this.getTitle());\n      tip.classList.remove(CLASS_NAME_FADE$3, CLASS_NAME_SHOW$3);\n    }\n\n    setElementContent(element, content) {\n      if (element === null) {\n        return;\n      }\n\n      if (isElement$1(content)) {\n        content = getElement(content); // content is a DOM node or a jQuery\n\n        if (this._config.html) {\n          if (content.parentNode !== element) {\n            element.innerHTML = '';\n            element.appendChild(content);\n          }\n        } else {\n          element.textContent = content.textContent;\n        }\n\n        return;\n      }\n\n      if (this._config.html) {\n        if (this._config.sanitize) {\n          content = sanitizeHtml(content, this._config.allowList, this._config.sanitizeFn);\n        }\n\n        element.innerHTML = content;\n      } else {\n        element.textContent = content;\n      }\n    }\n\n    getTitle() {\n      let title = this._element.getAttribute('data-bs-original-title');\n\n      if (!title) {\n        title = typeof this._config.title === 'function' ? this._config.title.call(this._element) : this._config.title;\n      }\n\n      return title;\n    }\n\n    updateAttachment(attachment) {\n      if (attachment === 'right') {\n        return 'end';\n      }\n\n      if (attachment === 'left') {\n        return 'start';\n      }\n\n      return attachment;\n    } // Private\n\n\n    _initializeOnDelegatedTarget(event, context) {\n      const dataKey = this.constructor.DATA_KEY;\n      context = context || Data.get(event.delegateTarget, dataKey);\n\n      if (!context) {\n        context = new this.constructor(event.delegateTarget, this._getDelegateConfig());\n        Data.set(event.delegateTarget, dataKey, context);\n      }\n\n      return context;\n    }\n\n    _getOffset() {\n      const {\n        offset\n      } = this._config;\n\n      if (typeof offset === 'string') {\n        return offset.split(',').map(val => Number.parseInt(val, 10));\n      }\n\n      if (typeof offset === 'function') {\n        return popperData => offset(popperData, this._element);\n      }\n\n      return offset;\n    }\n\n    _getPopperConfig(attachment) {\n      const defaultBsPopperConfig = {\n        placement: attachment,\n        modifiers: [{\n          name: 'flip',\n          options: {\n            fallbackPlacements: this._config.fallbackPlacements\n          }\n        }, {\n          name: 'offset',\n          options: {\n            offset: this._getOffset()\n          }\n        }, {\n          name: 'preventOverflow',\n          options: {\n            boundary: this._config.boundary\n          }\n        }, {\n          name: 'arrow',\n          options: {\n            element: `.${this.constructor.NAME}-arrow`\n          }\n        }, {\n          name: 'onChange',\n          enabled: true,\n          phase: 'afterWrite',\n          fn: data => this._handlePopperPlacementChange(data)\n        }],\n        onFirstUpdate: data => {\n          if (data.options.placement !== data.placement) {\n            this._handlePopperPlacementChange(data);\n          }\n        }\n      };\n      return { ...defaultBsPopperConfig,\n        ...(typeof this._config.popperConfig === 'function' ? this._config.popperConfig(defaultBsPopperConfig) : this._config.popperConfig)\n      };\n    }\n\n    _addAttachmentClass(attachment) {\n      this.getTipElement().classList.add(`${CLASS_PREFIX$1}-${this.updateAttachment(attachment)}`);\n    }\n\n    _getAttachment(placement) {\n      return AttachmentMap[placement.toUpperCase()];\n    }\n\n    _setListeners() {\n      const triggers = this._config.trigger.split(' ');\n\n      triggers.forEach(trigger => {\n        if (trigger === 'click') {\n          EventHandler.on(this._element, this.constructor.Event.CLICK, this._config.selector, event => this.toggle(event));\n        } else if (trigger !== TRIGGER_MANUAL) {\n          const eventIn = trigger === TRIGGER_HOVER ? this.constructor.Event.MOUSEENTER : this.constructor.Event.FOCUSIN;\n          const eventOut = trigger === TRIGGER_HOVER ? this.constructor.Event.MOUSELEAVE : this.constructor.Event.FOCUSOUT;\n          EventHandler.on(this._element, eventIn, this._config.selector, event => this._enter(event));\n          EventHandler.on(this._element, eventOut, this._config.selector, event => this._leave(event));\n        }\n      });\n\n      this._hideModalHandler = () => {\n        if (this._element) {\n          this.hide();\n        }\n      };\n\n      EventHandler.on(this._element.closest(`.${CLASS_NAME_MODAL}`), 'hide.bs.modal', this._hideModalHandler);\n\n      if (this._config.selector) {\n        this._config = { ...this._config,\n          trigger: 'manual',\n          selector: ''\n        };\n      } else {\n        this._fixTitle();\n      }\n    }\n\n    _fixTitle() {\n      const title = this._element.getAttribute('title');\n\n      const originalTitleType = typeof this._element.getAttribute('data-bs-original-title');\n\n      if (title || originalTitleType !== 'string') {\n        this._element.setAttribute('data-bs-original-title', title || '');\n\n        if (title && !this._element.getAttribute('aria-label') && !this._element.textContent) {\n          this._element.setAttribute('aria-label', title);\n        }\n\n        this._element.setAttribute('title', '');\n      }\n    }\n\n    _enter(event, context) {\n      context = this._initializeOnDelegatedTarget(event, context);\n\n      if (event) {\n        context._activeTrigger[event.type === 'focusin' ? TRIGGER_FOCUS : TRIGGER_HOVER] = true;\n      }\n\n      if (context.getTipElement().classList.contains(CLASS_NAME_SHOW$3) || context._hoverState === HOVER_STATE_SHOW) {\n        context._hoverState = HOVER_STATE_SHOW;\n        return;\n      }\n\n      clearTimeout(context._timeout);\n      context._hoverState = HOVER_STATE_SHOW;\n\n      if (!context._config.delay || !context._config.delay.show) {\n        context.show();\n        return;\n      }\n\n      context._timeout = setTimeout(() => {\n        if (context._hoverState === HOVER_STATE_SHOW) {\n          context.show();\n        }\n      }, context._config.delay.show);\n    }\n\n    _leave(event, context) {\n      context = this._initializeOnDelegatedTarget(event, context);\n\n      if (event) {\n        context._activeTrigger[event.type === 'focusout' ? TRIGGER_FOCUS : TRIGGER_HOVER] = context._element.contains(event.relatedTarget);\n      }\n\n      if (context._isWithActiveTrigger()) {\n        return;\n      }\n\n      clearTimeout(context._timeout);\n      context._hoverState = HOVER_STATE_OUT;\n\n      if (!context._config.delay || !context._config.delay.hide) {\n        context.hide();\n        return;\n      }\n\n      context._timeout = setTimeout(() => {\n        if (context._hoverState === HOVER_STATE_OUT) {\n          context.hide();\n        }\n      }, context._config.delay.hide);\n    }\n\n    _isWithActiveTrigger() {\n      for (const trigger in this._activeTrigger) {\n        if (this._activeTrigger[trigger]) {\n          return true;\n        }\n      }\n\n      return false;\n    }\n\n    _getConfig(config) {\n      const dataAttributes = Manipulator.getDataAttributes(this._element);\n      Object.keys(dataAttributes).forEach(dataAttr => {\n        if (DISALLOWED_ATTRIBUTES.has(dataAttr)) {\n          delete dataAttributes[dataAttr];\n        }\n      });\n      config = { ...this.constructor.Default,\n        ...dataAttributes,\n        ...(typeof config === 'object' && config ? config : {})\n      };\n      config.container = config.container === false ? document.body : getElement(config.container);\n\n      if (typeof config.delay === 'number') {\n        config.delay = {\n          show: config.delay,\n          hide: config.delay\n        };\n      }\n\n      if (typeof config.title === 'number') {\n        config.title = config.title.toString();\n      }\n\n      if (typeof config.content === 'number') {\n        config.content = config.content.toString();\n      }\n\n      typeCheckConfig(NAME$4, config, this.constructor.DefaultType);\n\n      if (config.sanitize) {\n        config.template = sanitizeHtml(config.template, config.allowList, config.sanitizeFn);\n      }\n\n      return config;\n    }\n\n    _getDelegateConfig() {\n      const config = {};\n\n      if (this._config) {\n        for (const key in this._config) {\n          if (this.constructor.Default[key] !== this._config[key]) {\n            config[key] = this._config[key];\n          }\n        }\n      }\n\n      return config;\n    }\n\n    _cleanTipClass() {\n      const tip = this.getTipElement();\n      const tabClass = tip.getAttribute('class').match(BSCLS_PREFIX_REGEX$1);\n\n      if (tabClass !== null && tabClass.length > 0) {\n        tabClass.map(token => token.trim()).forEach(tClass => tip.classList.remove(tClass));\n      }\n    }\n\n    _handlePopperPlacementChange(popperData) {\n      const {\n        state\n      } = popperData;\n\n      if (!state) {\n        return;\n      }\n\n      this.tip = state.elements.popper;\n\n      this._cleanTipClass();\n\n      this._addAttachmentClass(this._getAttachment(state.placement));\n    } // Static\n\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = Tooltip.getOrCreateInstance(this, config);\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(`No method named \"${config}\"`);\n          }\n\n          data[config]();\n        }\n      });\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Tooltip to jQuery only if jQuery is present\n   */\n\n\n  defineJQueryPlugin(Tooltip);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): popover.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$3 = 'popover';\n  const DATA_KEY$3 = 'bs.popover';\n  const EVENT_KEY$3 = `.${DATA_KEY$3}`;\n  const CLASS_PREFIX = 'bs-popover';\n  const BSCLS_PREFIX_REGEX = new RegExp(`(^|\\\\s)${CLASS_PREFIX}\\\\S+`, 'g');\n  const Default$2 = { ...Tooltip.Default,\n    placement: 'right',\n    offset: [0, 8],\n    trigger: 'click',\n    content: '',\n    template: '<div class=\"popover\" role=\"tooltip\">' + '<div class=\"popover-arrow\"></div>' + '<h3 class=\"popover-header\"></h3>' + '<div class=\"popover-body\"></div>' + '</div>'\n  };\n  const DefaultType$2 = { ...Tooltip.DefaultType,\n    content: '(string|element|function)'\n  };\n  const Event$1 = {\n    HIDE: `hide${EVENT_KEY$3}`,\n    HIDDEN: `hidden${EVENT_KEY$3}`,\n    SHOW: `show${EVENT_KEY$3}`,\n    SHOWN: `shown${EVENT_KEY$3}`,\n    INSERTED: `inserted${EVENT_KEY$3}`,\n    CLICK: `click${EVENT_KEY$3}`,\n    FOCUSIN: `focusin${EVENT_KEY$3}`,\n    FOCUSOUT: `focusout${EVENT_KEY$3}`,\n    MOUSEENTER: `mouseenter${EVENT_KEY$3}`,\n    MOUSELEAVE: `mouseleave${EVENT_KEY$3}`\n  };\n  const CLASS_NAME_FADE$2 = 'fade';\n  const CLASS_NAME_SHOW$2 = 'show';\n  const SELECTOR_TITLE = '.popover-header';\n  const SELECTOR_CONTENT = '.popover-body';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Popover extends Tooltip {\n    // Getters\n    static get Default() {\n      return Default$2;\n    }\n\n    static get NAME() {\n      return NAME$3;\n    }\n\n    static get Event() {\n      return Event$1;\n    }\n\n    static get DefaultType() {\n      return DefaultType$2;\n    } // Overrides\n\n\n    isWithContent() {\n      return this.getTitle() || this._getContent();\n    }\n\n    getTipElement() {\n      if (this.tip) {\n        return this.tip;\n      }\n\n      this.tip = super.getTipElement();\n\n      if (!this.getTitle()) {\n        SelectorEngine.findOne(SELECTOR_TITLE, this.tip).remove();\n      }\n\n      if (!this._getContent()) {\n        SelectorEngine.findOne(SELECTOR_CONTENT, this.tip).remove();\n      }\n\n      return this.tip;\n    }\n\n    setContent() {\n      const tip = this.getTipElement(); // we use append for html objects to maintain js events\n\n      this.setElementContent(SelectorEngine.findOne(SELECTOR_TITLE, tip), this.getTitle());\n\n      let content = this._getContent();\n\n      if (typeof content === 'function') {\n        content = content.call(this._element);\n      }\n\n      this.setElementContent(SelectorEngine.findOne(SELECTOR_CONTENT, tip), content);\n      tip.classList.remove(CLASS_NAME_FADE$2, CLASS_NAME_SHOW$2);\n    } // Private\n\n\n    _addAttachmentClass(attachment) {\n      this.getTipElement().classList.add(`${CLASS_PREFIX}-${this.updateAttachment(attachment)}`);\n    }\n\n    _getContent() {\n      return this._element.getAttribute('data-bs-content') || this._config.content;\n    }\n\n    _cleanTipClass() {\n      const tip = this.getTipElement();\n      const tabClass = tip.getAttribute('class').match(BSCLS_PREFIX_REGEX);\n\n      if (tabClass !== null && tabClass.length > 0) {\n        tabClass.map(token => token.trim()).forEach(tClass => tip.classList.remove(tClass));\n      }\n    } // Static\n\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = Popover.getOrCreateInstance(this, config);\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(`No method named \"${config}\"`);\n          }\n\n          data[config]();\n        }\n      });\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Popover to jQuery only if jQuery is present\n   */\n\n\n  defineJQueryPlugin(Popover);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): scrollspy.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$2 = 'scrollspy';\n  const DATA_KEY$2 = 'bs.scrollspy';\n  const EVENT_KEY$2 = `.${DATA_KEY$2}`;\n  const DATA_API_KEY$1 = '.data-api';\n  const Default$1 = {\n    offset: 10,\n    method: 'auto',\n    target: ''\n  };\n  const DefaultType$1 = {\n    offset: 'number',\n    method: 'string',\n    target: '(string|element)'\n  };\n  const EVENT_ACTIVATE = `activate${EVENT_KEY$2}`;\n  const EVENT_SCROLL = `scroll${EVENT_KEY$2}`;\n  const EVENT_LOAD_DATA_API = `load${EVENT_KEY$2}${DATA_API_KEY$1}`;\n  const CLASS_NAME_DROPDOWN_ITEM = 'dropdown-item';\n  const CLASS_NAME_ACTIVE$1 = 'active';\n  const SELECTOR_DATA_SPY = '[data-bs-spy=\"scroll\"]';\n  const SELECTOR_NAV_LIST_GROUP$1 = '.nav, .list-group';\n  const SELECTOR_NAV_LINKS = '.nav-link';\n  const SELECTOR_NAV_ITEMS = '.nav-item';\n  const SELECTOR_LIST_ITEMS = '.list-group-item';\n  const SELECTOR_DROPDOWN$1 = '.dropdown';\n  const SELECTOR_DROPDOWN_TOGGLE$1 = '.dropdown-toggle';\n  const METHOD_OFFSET = 'offset';\n  const METHOD_POSITION = 'position';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class ScrollSpy extends BaseComponent {\n    constructor(element, config) {\n      super(element);\n      this._scrollElement = this._element.tagName === 'BODY' ? window : this._element;\n      this._config = this._getConfig(config);\n      this._selector = `${this._config.target} ${SELECTOR_NAV_LINKS}, ${this._config.target} ${SELECTOR_LIST_ITEMS}, ${this._config.target} .${CLASS_NAME_DROPDOWN_ITEM}`;\n      this._offsets = [];\n      this._targets = [];\n      this._activeTarget = null;\n      this._scrollHeight = 0;\n      EventHandler.on(this._scrollElement, EVENT_SCROLL, () => this._process());\n      this.refresh();\n\n      this._process();\n    } // Getters\n\n\n    static get Default() {\n      return Default$1;\n    }\n\n    static get NAME() {\n      return NAME$2;\n    } // Public\n\n\n    refresh() {\n      const autoMethod = this._scrollElement === this._scrollElement.window ? METHOD_OFFSET : METHOD_POSITION;\n      const offsetMethod = this._config.method === 'auto' ? autoMethod : this._config.method;\n      const offsetBase = offsetMethod === METHOD_POSITION ? this._getScrollTop() : 0;\n      this._offsets = [];\n      this._targets = [];\n      this._scrollHeight = this._getScrollHeight();\n      const targets = SelectorEngine.find(this._selector);\n      targets.map(element => {\n        const targetSelector = getSelectorFromElement(element);\n        const target = targetSelector ? SelectorEngine.findOne(targetSelector) : null;\n\n        if (target) {\n          const targetBCR = target.getBoundingClientRect();\n\n          if (targetBCR.width || targetBCR.height) {\n            return [Manipulator[offsetMethod](target).top + offsetBase, targetSelector];\n          }\n        }\n\n        return null;\n      }).filter(item => item).sort((a, b) => a[0] - b[0]).forEach(item => {\n        this._offsets.push(item[0]);\n\n        this._targets.push(item[1]);\n      });\n    }\n\n    dispose() {\n      EventHandler.off(this._scrollElement, EVENT_KEY$2);\n      super.dispose();\n    } // Private\n\n\n    _getConfig(config) {\n      config = { ...Default$1,\n        ...Manipulator.getDataAttributes(this._element),\n        ...(typeof config === 'object' && config ? config : {})\n      };\n\n      if (typeof config.target !== 'string' && isElement$1(config.target)) {\n        let {\n          id\n        } = config.target;\n\n        if (!id) {\n          id = getUID(NAME$2);\n          config.target.id = id;\n        }\n\n        config.target = `#${id}`;\n      }\n\n      typeCheckConfig(NAME$2, config, DefaultType$1);\n      return config;\n    }\n\n    _getScrollTop() {\n      return this._scrollElement === window ? this._scrollElement.pageYOffset : this._scrollElement.scrollTop;\n    }\n\n    _getScrollHeight() {\n      return this._scrollElement.scrollHeight || Math.max(document.body.scrollHeight, document.documentElement.scrollHeight);\n    }\n\n    _getOffsetHeight() {\n      return this._scrollElement === window ? window.innerHeight : this._scrollElement.getBoundingClientRect().height;\n    }\n\n    _process() {\n      const scrollTop = this._getScrollTop() + this._config.offset;\n\n      const scrollHeight = this._getScrollHeight();\n\n      const maxScroll = this._config.offset + scrollHeight - this._getOffsetHeight();\n\n      if (this._scrollHeight !== scrollHeight) {\n        this.refresh();\n      }\n\n      if (scrollTop >= maxScroll) {\n        const target = this._targets[this._targets.length - 1];\n\n        if (this._activeTarget !== target) {\n          this._activate(target);\n        }\n\n        return;\n      }\n\n      if (this._activeTarget && scrollTop < this._offsets[0] && this._offsets[0] > 0) {\n        this._activeTarget = null;\n\n        this._clear();\n\n        return;\n      }\n\n      for (let i = this._offsets.length; i--;) {\n        const isActiveTarget = this._activeTarget !== this._targets[i] && scrollTop >= this._offsets[i] && (typeof this._offsets[i + 1] === 'undefined' || scrollTop < this._offsets[i + 1]);\n\n        if (isActiveTarget) {\n          this._activate(this._targets[i]);\n        }\n      }\n    }\n\n    _activate(target) {\n      this._activeTarget = target;\n\n      this._clear();\n\n      const queries = this._selector.split(',').map(selector => `${selector}[data-bs-target=\"${target}\"],${selector}[href=\"${target}\"]`);\n\n      const link = SelectorEngine.findOne(queries.join(','));\n\n      if (link.classList.contains(CLASS_NAME_DROPDOWN_ITEM)) {\n        SelectorEngine.findOne(SELECTOR_DROPDOWN_TOGGLE$1, link.closest(SELECTOR_DROPDOWN$1)).classList.add(CLASS_NAME_ACTIVE$1);\n        link.classList.add(CLASS_NAME_ACTIVE$1);\n      } else {\n        // Set triggered link as active\n        link.classList.add(CLASS_NAME_ACTIVE$1);\n        SelectorEngine.parents(link, SELECTOR_NAV_LIST_GROUP$1).forEach(listGroup => {\n          // Set triggered links parents as active\n          // With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor\n          SelectorEngine.prev(listGroup, `${SELECTOR_NAV_LINKS}, ${SELECTOR_LIST_ITEMS}`).forEach(item => item.classList.add(CLASS_NAME_ACTIVE$1)); // Handle special case when .nav-link is inside .nav-item\n\n          SelectorEngine.prev(listGroup, SELECTOR_NAV_ITEMS).forEach(navItem => {\n            SelectorEngine.children(navItem, SELECTOR_NAV_LINKS).forEach(item => item.classList.add(CLASS_NAME_ACTIVE$1));\n          });\n        });\n      }\n\n      EventHandler.trigger(this._scrollElement, EVENT_ACTIVATE, {\n        relatedTarget: target\n      });\n    }\n\n    _clear() {\n      SelectorEngine.find(this._selector).filter(node => node.classList.contains(CLASS_NAME_ACTIVE$1)).forEach(node => node.classList.remove(CLASS_NAME_ACTIVE$1));\n    } // Static\n\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = ScrollSpy.getOrCreateInstance(this, config);\n\n        if (typeof config !== 'string') {\n          return;\n        }\n\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config]();\n      });\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n    SelectorEngine.find(SELECTOR_DATA_SPY).forEach(spy => new ScrollSpy(spy));\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .ScrollSpy to jQuery only if jQuery is present\n   */\n\n  defineJQueryPlugin(ScrollSpy);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): tab.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$1 = 'tab';\n  const DATA_KEY$1 = 'bs.tab';\n  const EVENT_KEY$1 = `.${DATA_KEY$1}`;\n  const DATA_API_KEY = '.data-api';\n  const EVENT_HIDE$1 = `hide${EVENT_KEY$1}`;\n  const EVENT_HIDDEN$1 = `hidden${EVENT_KEY$1}`;\n  const EVENT_SHOW$1 = `show${EVENT_KEY$1}`;\n  const EVENT_SHOWN$1 = `shown${EVENT_KEY$1}`;\n  const EVENT_CLICK_DATA_API = `click${EVENT_KEY$1}${DATA_API_KEY}`;\n  const CLASS_NAME_DROPDOWN_MENU = 'dropdown-menu';\n  const CLASS_NAME_ACTIVE = 'active';\n  const CLASS_NAME_FADE$1 = 'fade';\n  const CLASS_NAME_SHOW$1 = 'show';\n  const SELECTOR_DROPDOWN = '.dropdown';\n  const SELECTOR_NAV_LIST_GROUP = '.nav, .list-group';\n  const SELECTOR_ACTIVE = '.active';\n  const SELECTOR_ACTIVE_UL = ':scope > li > .active';\n  const SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"tab\"], [data-bs-toggle=\"pill\"], [data-bs-toggle=\"list\"]';\n  const SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle';\n  const SELECTOR_DROPDOWN_ACTIVE_CHILD = ':scope > .dropdown-menu .active';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Tab extends BaseComponent {\n    // Getters\n    static get NAME() {\n      return NAME$1;\n    } // Public\n\n\n    show() {\n      if (this._element.parentNode && this._element.parentNode.nodeType === Node.ELEMENT_NODE && this._element.classList.contains(CLASS_NAME_ACTIVE)) {\n        return;\n      }\n\n      let previous;\n      const target = getElementFromSelector(this._element);\n\n      const listElement = this._element.closest(SELECTOR_NAV_LIST_GROUP);\n\n      if (listElement) {\n        const itemSelector = listElement.nodeName === 'UL' || listElement.nodeName === 'OL' ? SELECTOR_ACTIVE_UL : SELECTOR_ACTIVE;\n        previous = SelectorEngine.find(itemSelector, listElement);\n        previous = previous[previous.length - 1];\n      }\n\n      const hideEvent = previous ? EventHandler.trigger(previous, EVENT_HIDE$1, {\n        relatedTarget: this._element\n      }) : null;\n      const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$1, {\n        relatedTarget: previous\n      });\n\n      if (showEvent.defaultPrevented || hideEvent !== null && hideEvent.defaultPrevented) {\n        return;\n      }\n\n      this._activate(this._element, listElement);\n\n      const complete = () => {\n        EventHandler.trigger(previous, EVENT_HIDDEN$1, {\n          relatedTarget: this._element\n        });\n        EventHandler.trigger(this._element, EVENT_SHOWN$1, {\n          relatedTarget: previous\n        });\n      };\n\n      if (target) {\n        this._activate(target, target.parentNode, complete);\n      } else {\n        complete();\n      }\n    } // Private\n\n\n    _activate(element, container, callback) {\n      const activeElements = container && (container.nodeName === 'UL' || container.nodeName === 'OL') ? SelectorEngine.find(SELECTOR_ACTIVE_UL, container) : SelectorEngine.children(container, SELECTOR_ACTIVE);\n      const active = activeElements[0];\n      const isTransitioning = callback && active && active.classList.contains(CLASS_NAME_FADE$1);\n\n      const complete = () => this._transitionComplete(element, active, callback);\n\n      if (active && isTransitioning) {\n        active.classList.remove(CLASS_NAME_SHOW$1);\n\n        this._queueCallback(complete, element, true);\n      } else {\n        complete();\n      }\n    }\n\n    _transitionComplete(element, active, callback) {\n      if (active) {\n        active.classList.remove(CLASS_NAME_ACTIVE);\n        const dropdownChild = SelectorEngine.findOne(SELECTOR_DROPDOWN_ACTIVE_CHILD, active.parentNode);\n\n        if (dropdownChild) {\n          dropdownChild.classList.remove(CLASS_NAME_ACTIVE);\n        }\n\n        if (active.getAttribute('role') === 'tab') {\n          active.setAttribute('aria-selected', false);\n        }\n      }\n\n      element.classList.add(CLASS_NAME_ACTIVE);\n\n      if (element.getAttribute('role') === 'tab') {\n        element.setAttribute('aria-selected', true);\n      }\n\n      reflow(element);\n\n      if (element.classList.contains(CLASS_NAME_FADE$1)) {\n        element.classList.add(CLASS_NAME_SHOW$1);\n      }\n\n      let parent = element.parentNode;\n\n      if (parent && parent.nodeName === 'LI') {\n        parent = parent.parentNode;\n      }\n\n      if (parent && parent.classList.contains(CLASS_NAME_DROPDOWN_MENU)) {\n        const dropdownElement = element.closest(SELECTOR_DROPDOWN);\n\n        if (dropdownElement) {\n          SelectorEngine.find(SELECTOR_DROPDOWN_TOGGLE, dropdownElement).forEach(dropdown => dropdown.classList.add(CLASS_NAME_ACTIVE));\n        }\n\n        element.setAttribute('aria-expanded', true);\n      }\n\n      if (callback) {\n        callback();\n      }\n    } // Static\n\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = Tab.getOrCreateInstance(this);\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(`No method named \"${config}\"`);\n          }\n\n          data[config]();\n        }\n      });\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n    if (['A', 'AREA'].includes(this.tagName)) {\n      event.preventDefault();\n    }\n\n    if (isDisabled(this)) {\n      return;\n    }\n\n    const data = Tab.getOrCreateInstance(this);\n    data.show();\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Tab to jQuery only if jQuery is present\n   */\n\n  defineJQueryPlugin(Tab);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): toast.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME = 'toast';\n  const DATA_KEY = 'bs.toast';\n  const EVENT_KEY = `.${DATA_KEY}`;\n  const EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY}`;\n  const EVENT_MOUSEOVER = `mouseover${EVENT_KEY}`;\n  const EVENT_MOUSEOUT = `mouseout${EVENT_KEY}`;\n  const EVENT_FOCUSIN = `focusin${EVENT_KEY}`;\n  const EVENT_FOCUSOUT = `focusout${EVENT_KEY}`;\n  const EVENT_HIDE = `hide${EVENT_KEY}`;\n  const EVENT_HIDDEN = `hidden${EVENT_KEY}`;\n  const EVENT_SHOW = `show${EVENT_KEY}`;\n  const EVENT_SHOWN = `shown${EVENT_KEY}`;\n  const CLASS_NAME_FADE = 'fade';\n  const CLASS_NAME_HIDE = 'hide';\n  const CLASS_NAME_SHOW = 'show';\n  const CLASS_NAME_SHOWING = 'showing';\n  const DefaultType = {\n    animation: 'boolean',\n    autohide: 'boolean',\n    delay: 'number'\n  };\n  const Default = {\n    animation: true,\n    autohide: true,\n    delay: 5000\n  };\n  const SELECTOR_DATA_DISMISS = '[data-bs-dismiss=\"toast\"]';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Toast extends BaseComponent {\n    constructor(element, config) {\n      super(element);\n      this._config = this._getConfig(config);\n      this._timeout = null;\n      this._hasMouseInteraction = false;\n      this._hasKeyboardInteraction = false;\n\n      this._setListeners();\n    } // Getters\n\n\n    static get DefaultType() {\n      return DefaultType;\n    }\n\n    static get Default() {\n      return Default;\n    }\n\n    static get NAME() {\n      return NAME;\n    } // Public\n\n\n    show() {\n      const showEvent = EventHandler.trigger(this._element, EVENT_SHOW);\n\n      if (showEvent.defaultPrevented) {\n        return;\n      }\n\n      this._clearTimeout();\n\n      if (this._config.animation) {\n        this._element.classList.add(CLASS_NAME_FADE);\n      }\n\n      const complete = () => {\n        this._element.classList.remove(CLASS_NAME_SHOWING);\n\n        this._element.classList.add(CLASS_NAME_SHOW);\n\n        EventHandler.trigger(this._element, EVENT_SHOWN);\n\n        this._maybeScheduleHide();\n      };\n\n      this._element.classList.remove(CLASS_NAME_HIDE);\n\n      reflow(this._element);\n\n      this._element.classList.add(CLASS_NAME_SHOWING);\n\n      this._queueCallback(complete, this._element, this._config.animation);\n    }\n\n    hide() {\n      if (!this._element.classList.contains(CLASS_NAME_SHOW)) {\n        return;\n      }\n\n      const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE);\n\n      if (hideEvent.defaultPrevented) {\n        return;\n      }\n\n      const complete = () => {\n        this._element.classList.add(CLASS_NAME_HIDE);\n\n        EventHandler.trigger(this._element, EVENT_HIDDEN);\n      };\n\n      this._element.classList.remove(CLASS_NAME_SHOW);\n\n      this._queueCallback(complete, this._element, this._config.animation);\n    }\n\n    dispose() {\n      this._clearTimeout();\n\n      if (this._element.classList.contains(CLASS_NAME_SHOW)) {\n        this._element.classList.remove(CLASS_NAME_SHOW);\n      }\n\n      super.dispose();\n    } // Private\n\n\n    _getConfig(config) {\n      config = { ...Default,\n        ...Manipulator.getDataAttributes(this._element),\n        ...(typeof config === 'object' && config ? config : {})\n      };\n      typeCheckConfig(NAME, config, this.constructor.DefaultType);\n      return config;\n    }\n\n    _maybeScheduleHide() {\n      if (!this._config.autohide) {\n        return;\n      }\n\n      if (this._hasMouseInteraction || this._hasKeyboardInteraction) {\n        return;\n      }\n\n      this._timeout = setTimeout(() => {\n        this.hide();\n      }, this._config.delay);\n    }\n\n    _onInteraction(event, isInteracting) {\n      switch (event.type) {\n        case 'mouseover':\n        case 'mouseout':\n          this._hasMouseInteraction = isInteracting;\n          break;\n\n        case 'focusin':\n        case 'focusout':\n          this._hasKeyboardInteraction = isInteracting;\n          break;\n      }\n\n      if (isInteracting) {\n        this._clearTimeout();\n\n        return;\n      }\n\n      const nextElement = event.relatedTarget;\n\n      if (this._element === nextElement || this._element.contains(nextElement)) {\n        return;\n      }\n\n      this._maybeScheduleHide();\n    }\n\n    _setListeners() {\n      EventHandler.on(this._element, EVENT_CLICK_DISMISS, SELECTOR_DATA_DISMISS, () => this.hide());\n      EventHandler.on(this._element, EVENT_MOUSEOVER, event => this._onInteraction(event, true));\n      EventHandler.on(this._element, EVENT_MOUSEOUT, event => this._onInteraction(event, false));\n      EventHandler.on(this._element, EVENT_FOCUSIN, event => this._onInteraction(event, true));\n      EventHandler.on(this._element, EVENT_FOCUSOUT, event => this._onInteraction(event, false));\n    }\n\n    _clearTimeout() {\n      clearTimeout(this._timeout);\n      this._timeout = null;\n    } // Static\n\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = Toast.getOrCreateInstance(this, config);\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(`No method named \"${config}\"`);\n          }\n\n          data[config](this);\n        }\n      });\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Toast to jQuery only if jQuery is present\n   */\n\n\n  defineJQueryPlugin(Toast);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): index.umd.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  var index_umd = {\n    Alert,\n    Button,\n    Carousel,\n    Collapse,\n    Dropdown,\n    Modal,\n    Offcanvas,\n    Popover,\n    ScrollSpy,\n    Tab,\n    Toast,\n    Tooltip\n  };\n\n  return index_umd;\n\n})));\n//# sourceMappingURL=bootstrap.bundle.js.map\n"
  },
  {
    "path": "src/sourceDev.WebApp/SharedThemes/sandstone/wwwroot/js/bootstrap.esm.js",
    "content": "/*!\n  * Bootstrap v5.0.2 (https://getbootstrap.com/)\n  * Copyright 2011-2021 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)\n  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n  */\nimport * as Popper from '@popperjs/core';\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): dom/selector-engine.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\nconst NODE_TEXT = 3;\nconst SelectorEngine = {\n  find(selector, element = document.documentElement) {\n    return [].concat(...Element.prototype.querySelectorAll.call(element, selector));\n  },\n\n  findOne(selector, element = document.documentElement) {\n    return Element.prototype.querySelector.call(element, selector);\n  },\n\n  children(element, selector) {\n    return [].concat(...element.children).filter(child => child.matches(selector));\n  },\n\n  parents(element, selector) {\n    const parents = [];\n    let ancestor = element.parentNode;\n\n    while (ancestor && ancestor.nodeType === Node.ELEMENT_NODE && ancestor.nodeType !== NODE_TEXT) {\n      if (ancestor.matches(selector)) {\n        parents.push(ancestor);\n      }\n\n      ancestor = ancestor.parentNode;\n    }\n\n    return parents;\n  },\n\n  prev(element, selector) {\n    let previous = element.previousElementSibling;\n\n    while (previous) {\n      if (previous.matches(selector)) {\n        return [previous];\n      }\n\n      previous = previous.previousElementSibling;\n    }\n\n    return [];\n  },\n\n  next(element, selector) {\n    let next = element.nextElementSibling;\n\n    while (next) {\n      if (next.matches(selector)) {\n        return [next];\n      }\n\n      next = next.nextElementSibling;\n    }\n\n    return [];\n  }\n\n};\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): util/index.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst MAX_UID = 1000000;\nconst MILLISECONDS_MULTIPLIER = 1000;\nconst TRANSITION_END = 'transitionend'; // Shoutout AngusCroll (https://goo.gl/pxwQGp)\n\nconst toType = obj => {\n  if (obj === null || obj === undefined) {\n    return `${obj}`;\n  }\n\n  return {}.toString.call(obj).match(/\\s([a-z]+)/i)[1].toLowerCase();\n};\n/**\n * --------------------------------------------------------------------------\n * Public Util Api\n * --------------------------------------------------------------------------\n */\n\n\nconst getUID = prefix => {\n  do {\n    prefix += Math.floor(Math.random() * MAX_UID);\n  } while (document.getElementById(prefix));\n\n  return prefix;\n};\n\nconst getSelector = element => {\n  let selector = element.getAttribute('data-bs-target');\n\n  if (!selector || selector === '#') {\n    let hrefAttr = element.getAttribute('href'); // The only valid content that could double as a selector are IDs or classes,\n    // so everything starting with `#` or `.`. If a \"real\" URL is used as the selector,\n    // `document.querySelector` will rightfully complain it is invalid.\n    // See https://github.com/twbs/bootstrap/issues/32273\n\n    if (!hrefAttr || !hrefAttr.includes('#') && !hrefAttr.startsWith('.')) {\n      return null;\n    } // Just in case some CMS puts out a full URL with the anchor appended\n\n\n    if (hrefAttr.includes('#') && !hrefAttr.startsWith('#')) {\n      hrefAttr = `#${hrefAttr.split('#')[1]}`;\n    }\n\n    selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : null;\n  }\n\n  return selector;\n};\n\nconst getSelectorFromElement = element => {\n  const selector = getSelector(element);\n\n  if (selector) {\n    return document.querySelector(selector) ? selector : null;\n  }\n\n  return null;\n};\n\nconst getElementFromSelector = element => {\n  const selector = getSelector(element);\n  return selector ? document.querySelector(selector) : null;\n};\n\nconst getTransitionDurationFromElement = element => {\n  if (!element) {\n    return 0;\n  } // Get transition-duration of the element\n\n\n  let {\n    transitionDuration,\n    transitionDelay\n  } = window.getComputedStyle(element);\n  const floatTransitionDuration = Number.parseFloat(transitionDuration);\n  const floatTransitionDelay = Number.parseFloat(transitionDelay); // Return 0 if element or transition duration is not found\n\n  if (!floatTransitionDuration && !floatTransitionDelay) {\n    return 0;\n  } // If multiple durations are defined, take the first\n\n\n  transitionDuration = transitionDuration.split(',')[0];\n  transitionDelay = transitionDelay.split(',')[0];\n  return (Number.parseFloat(transitionDuration) + Number.parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER;\n};\n\nconst triggerTransitionEnd = element => {\n  element.dispatchEvent(new Event(TRANSITION_END));\n};\n\nconst isElement = obj => {\n  if (!obj || typeof obj !== 'object') {\n    return false;\n  }\n\n  if (typeof obj.jquery !== 'undefined') {\n    obj = obj[0];\n  }\n\n  return typeof obj.nodeType !== 'undefined';\n};\n\nconst getElement = obj => {\n  if (isElement(obj)) {\n    // it's a jQuery object or a node element\n    return obj.jquery ? obj[0] : obj;\n  }\n\n  if (typeof obj === 'string' && obj.length > 0) {\n    return SelectorEngine.findOne(obj);\n  }\n\n  return null;\n};\n\nconst typeCheckConfig = (componentName, config, configTypes) => {\n  Object.keys(configTypes).forEach(property => {\n    const expectedTypes = configTypes[property];\n    const value = config[property];\n    const valueType = value && isElement(value) ? 'element' : toType(value);\n\n    if (!new RegExp(expectedTypes).test(valueType)) {\n      throw new TypeError(`${componentName.toUpperCase()}: Option \"${property}\" provided type \"${valueType}\" but expected type \"${expectedTypes}\".`);\n    }\n  });\n};\n\nconst isVisible = element => {\n  if (!isElement(element) || element.getClientRects().length === 0) {\n    return false;\n  }\n\n  return getComputedStyle(element).getPropertyValue('visibility') === 'visible';\n};\n\nconst isDisabled = element => {\n  if (!element || element.nodeType !== Node.ELEMENT_NODE) {\n    return true;\n  }\n\n  if (element.classList.contains('disabled')) {\n    return true;\n  }\n\n  if (typeof element.disabled !== 'undefined') {\n    return element.disabled;\n  }\n\n  return element.hasAttribute('disabled') && element.getAttribute('disabled') !== 'false';\n};\n\nconst findShadowRoot = element => {\n  if (!document.documentElement.attachShadow) {\n    return null;\n  } // Can find the shadow root otherwise it'll return the document\n\n\n  if (typeof element.getRootNode === 'function') {\n    const root = element.getRootNode();\n    return root instanceof ShadowRoot ? root : null;\n  }\n\n  if (element instanceof ShadowRoot) {\n    return element;\n  } // when we don't find a shadow root\n\n\n  if (!element.parentNode) {\n    return null;\n  }\n\n  return findShadowRoot(element.parentNode);\n};\n\nconst noop = () => {};\n\nconst reflow = element => element.offsetHeight;\n\nconst getjQuery = () => {\n  const {\n    jQuery\n  } = window;\n\n  if (jQuery && !document.body.hasAttribute('data-bs-no-jquery')) {\n    return jQuery;\n  }\n\n  return null;\n};\n\nconst DOMContentLoadedCallbacks = [];\n\nconst onDOMContentLoaded = callback => {\n  if (document.readyState === 'loading') {\n    // add listener on the first call when the document is in loading state\n    if (!DOMContentLoadedCallbacks.length) {\n      document.addEventListener('DOMContentLoaded', () => {\n        DOMContentLoadedCallbacks.forEach(callback => callback());\n      });\n    }\n\n    DOMContentLoadedCallbacks.push(callback);\n  } else {\n    callback();\n  }\n};\n\nconst isRTL = () => document.documentElement.dir === 'rtl';\n\nconst defineJQueryPlugin = plugin => {\n  onDOMContentLoaded(() => {\n    const $ = getjQuery();\n    /* istanbul ignore if */\n\n    if ($) {\n      const name = plugin.NAME;\n      const JQUERY_NO_CONFLICT = $.fn[name];\n      $.fn[name] = plugin.jQueryInterface;\n      $.fn[name].Constructor = plugin;\n\n      $.fn[name].noConflict = () => {\n        $.fn[name] = JQUERY_NO_CONFLICT;\n        return plugin.jQueryInterface;\n      };\n    }\n  });\n};\n\nconst execute = callback => {\n  if (typeof callback === 'function') {\n    callback();\n  }\n};\n\nconst executeAfterTransition = (callback, transitionElement, waitForTransition = true) => {\n  if (!waitForTransition) {\n    execute(callback);\n    return;\n  }\n\n  const durationPadding = 5;\n  const emulatedDuration = getTransitionDurationFromElement(transitionElement) + durationPadding;\n  let called = false;\n\n  const handler = ({\n    target\n  }) => {\n    if (target !== transitionElement) {\n      return;\n    }\n\n    called = true;\n    transitionElement.removeEventListener(TRANSITION_END, handler);\n    execute(callback);\n  };\n\n  transitionElement.addEventListener(TRANSITION_END, handler);\n  setTimeout(() => {\n    if (!called) {\n      triggerTransitionEnd(transitionElement);\n    }\n  }, emulatedDuration);\n};\n/**\n * Return the previous/next element of a list.\n *\n * @param {array} list    The list of elements\n * @param activeElement   The active element\n * @param shouldGetNext   Choose to get next or previous element\n * @param isCycleAllowed\n * @return {Element|elem} The proper element\n */\n\n\nconst getNextActiveElement = (list, activeElement, shouldGetNext, isCycleAllowed) => {\n  let index = list.indexOf(activeElement); // if the element does not exist in the list return an element depending on the direction and if cycle is allowed\n\n  if (index === -1) {\n    return list[!shouldGetNext && isCycleAllowed ? list.length - 1 : 0];\n  }\n\n  const listLength = list.length;\n  index += shouldGetNext ? 1 : -1;\n\n  if (isCycleAllowed) {\n    index = (index + listLength) % listLength;\n  }\n\n  return list[Math.max(0, Math.min(index, listLength - 1))];\n};\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): dom/event-handler.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst namespaceRegex = /[^.]*(?=\\..*)\\.|.*/;\nconst stripNameRegex = /\\..*/;\nconst stripUidRegex = /::\\d+$/;\nconst eventRegistry = {}; // Events storage\n\nlet uidEvent = 1;\nconst customEvents = {\n  mouseenter: 'mouseover',\n  mouseleave: 'mouseout'\n};\nconst customEventsRegex = /^(mouseenter|mouseleave)/i;\nconst nativeEvents = new Set(['click', 'dblclick', 'mouseup', 'mousedown', 'contextmenu', 'mousewheel', 'DOMMouseScroll', 'mouseover', 'mouseout', 'mousemove', 'selectstart', 'selectend', 'keydown', 'keypress', 'keyup', 'orientationchange', 'touchstart', 'touchmove', 'touchend', 'touchcancel', 'pointerdown', 'pointermove', 'pointerup', 'pointerleave', 'pointercancel', 'gesturestart', 'gesturechange', 'gestureend', 'focus', 'blur', 'change', 'reset', 'select', 'submit', 'focusin', 'focusout', 'load', 'unload', 'beforeunload', 'resize', 'move', 'DOMContentLoaded', 'readystatechange', 'error', 'abort', 'scroll']);\n/**\n * ------------------------------------------------------------------------\n * Private methods\n * ------------------------------------------------------------------------\n */\n\nfunction getUidEvent(element, uid) {\n  return uid && `${uid}::${uidEvent++}` || element.uidEvent || uidEvent++;\n}\n\nfunction getEvent(element) {\n  const uid = getUidEvent(element);\n  element.uidEvent = uid;\n  eventRegistry[uid] = eventRegistry[uid] || {};\n  return eventRegistry[uid];\n}\n\nfunction bootstrapHandler(element, fn) {\n  return function handler(event) {\n    event.delegateTarget = element;\n\n    if (handler.oneOff) {\n      EventHandler.off(element, event.type, fn);\n    }\n\n    return fn.apply(element, [event]);\n  };\n}\n\nfunction bootstrapDelegationHandler(element, selector, fn) {\n  return function handler(event) {\n    const domElements = element.querySelectorAll(selector);\n\n    for (let {\n      target\n    } = event; target && target !== this; target = target.parentNode) {\n      for (let i = domElements.length; i--;) {\n        if (domElements[i] === target) {\n          event.delegateTarget = target;\n\n          if (handler.oneOff) {\n            // eslint-disable-next-line unicorn/consistent-destructuring\n            EventHandler.off(element, event.type, selector, fn);\n          }\n\n          return fn.apply(target, [event]);\n        }\n      }\n    } // To please ESLint\n\n\n    return null;\n  };\n}\n\nfunction findHandler(events, handler, delegationSelector = null) {\n  const uidEventList = Object.keys(events);\n\n  for (let i = 0, len = uidEventList.length; i < len; i++) {\n    const event = events[uidEventList[i]];\n\n    if (event.originalHandler === handler && event.delegationSelector === delegationSelector) {\n      return event;\n    }\n  }\n\n  return null;\n}\n\nfunction normalizeParams(originalTypeEvent, handler, delegationFn) {\n  const delegation = typeof handler === 'string';\n  const originalHandler = delegation ? delegationFn : handler;\n  let typeEvent = getTypeEvent(originalTypeEvent);\n  const isNative = nativeEvents.has(typeEvent);\n\n  if (!isNative) {\n    typeEvent = originalTypeEvent;\n  }\n\n  return [delegation, originalHandler, typeEvent];\n}\n\nfunction addHandler(element, originalTypeEvent, handler, delegationFn, oneOff) {\n  if (typeof originalTypeEvent !== 'string' || !element) {\n    return;\n  }\n\n  if (!handler) {\n    handler = delegationFn;\n    delegationFn = null;\n  } // in case of mouseenter or mouseleave wrap the handler within a function that checks for its DOM position\n  // this prevents the handler from being dispatched the same way as mouseover or mouseout does\n\n\n  if (customEventsRegex.test(originalTypeEvent)) {\n    const wrapFn = fn => {\n      return function (event) {\n        if (!event.relatedTarget || event.relatedTarget !== event.delegateTarget && !event.delegateTarget.contains(event.relatedTarget)) {\n          return fn.call(this, event);\n        }\n      };\n    };\n\n    if (delegationFn) {\n      delegationFn = wrapFn(delegationFn);\n    } else {\n      handler = wrapFn(handler);\n    }\n  }\n\n  const [delegation, originalHandler, typeEvent] = normalizeParams(originalTypeEvent, handler, delegationFn);\n  const events = getEvent(element);\n  const handlers = events[typeEvent] || (events[typeEvent] = {});\n  const previousFn = findHandler(handlers, originalHandler, delegation ? handler : null);\n\n  if (previousFn) {\n    previousFn.oneOff = previousFn.oneOff && oneOff;\n    return;\n  }\n\n  const uid = getUidEvent(originalHandler, originalTypeEvent.replace(namespaceRegex, ''));\n  const fn = delegation ? bootstrapDelegationHandler(element, handler, delegationFn) : bootstrapHandler(element, handler);\n  fn.delegationSelector = delegation ? handler : null;\n  fn.originalHandler = originalHandler;\n  fn.oneOff = oneOff;\n  fn.uidEvent = uid;\n  handlers[uid] = fn;\n  element.addEventListener(typeEvent, fn, delegation);\n}\n\nfunction removeHandler(element, events, typeEvent, handler, delegationSelector) {\n  const fn = findHandler(events[typeEvent], handler, delegationSelector);\n\n  if (!fn) {\n    return;\n  }\n\n  element.removeEventListener(typeEvent, fn, Boolean(delegationSelector));\n  delete events[typeEvent][fn.uidEvent];\n}\n\nfunction removeNamespacedHandlers(element, events, typeEvent, namespace) {\n  const storeElementEvent = events[typeEvent] || {};\n  Object.keys(storeElementEvent).forEach(handlerKey => {\n    if (handlerKey.includes(namespace)) {\n      const event = storeElementEvent[handlerKey];\n      removeHandler(element, events, typeEvent, event.originalHandler, event.delegationSelector);\n    }\n  });\n}\n\nfunction getTypeEvent(event) {\n  // allow to get the native events from namespaced events ('click.bs.button' --> 'click')\n  event = event.replace(stripNameRegex, '');\n  return customEvents[event] || event;\n}\n\nconst EventHandler = {\n  on(element, event, handler, delegationFn) {\n    addHandler(element, event, handler, delegationFn, false);\n  },\n\n  one(element, event, handler, delegationFn) {\n    addHandler(element, event, handler, delegationFn, true);\n  },\n\n  off(element, originalTypeEvent, handler, delegationFn) {\n    if (typeof originalTypeEvent !== 'string' || !element) {\n      return;\n    }\n\n    const [delegation, originalHandler, typeEvent] = normalizeParams(originalTypeEvent, handler, delegationFn);\n    const inNamespace = typeEvent !== originalTypeEvent;\n    const events = getEvent(element);\n    const isNamespace = originalTypeEvent.startsWith('.');\n\n    if (typeof originalHandler !== 'undefined') {\n      // Simplest case: handler is passed, remove that listener ONLY.\n      if (!events || !events[typeEvent]) {\n        return;\n      }\n\n      removeHandler(element, events, typeEvent, originalHandler, delegation ? handler : null);\n      return;\n    }\n\n    if (isNamespace) {\n      Object.keys(events).forEach(elementEvent => {\n        removeNamespacedHandlers(element, events, elementEvent, originalTypeEvent.slice(1));\n      });\n    }\n\n    const storeElementEvent = events[typeEvent] || {};\n    Object.keys(storeElementEvent).forEach(keyHandlers => {\n      const handlerKey = keyHandlers.replace(stripUidRegex, '');\n\n      if (!inNamespace || originalTypeEvent.includes(handlerKey)) {\n        const event = storeElementEvent[keyHandlers];\n        removeHandler(element, events, typeEvent, event.originalHandler, event.delegationSelector);\n      }\n    });\n  },\n\n  trigger(element, event, args) {\n    if (typeof event !== 'string' || !element) {\n      return null;\n    }\n\n    const $ = getjQuery();\n    const typeEvent = getTypeEvent(event);\n    const inNamespace = event !== typeEvent;\n    const isNative = nativeEvents.has(typeEvent);\n    let jQueryEvent;\n    let bubbles = true;\n    let nativeDispatch = true;\n    let defaultPrevented = false;\n    let evt = null;\n\n    if (inNamespace && $) {\n      jQueryEvent = $.Event(event, args);\n      $(element).trigger(jQueryEvent);\n      bubbles = !jQueryEvent.isPropagationStopped();\n      nativeDispatch = !jQueryEvent.isImmediatePropagationStopped();\n      defaultPrevented = jQueryEvent.isDefaultPrevented();\n    }\n\n    if (isNative) {\n      evt = document.createEvent('HTMLEvents');\n      evt.initEvent(typeEvent, bubbles, true);\n    } else {\n      evt = new CustomEvent(event, {\n        bubbles,\n        cancelable: true\n      });\n    } // merge custom information in our event\n\n\n    if (typeof args !== 'undefined') {\n      Object.keys(args).forEach(key => {\n        Object.defineProperty(evt, key, {\n          get() {\n            return args[key];\n          }\n\n        });\n      });\n    }\n\n    if (defaultPrevented) {\n      evt.preventDefault();\n    }\n\n    if (nativeDispatch) {\n      element.dispatchEvent(evt);\n    }\n\n    if (evt.defaultPrevented && typeof jQueryEvent !== 'undefined') {\n      jQueryEvent.preventDefault();\n    }\n\n    return evt;\n  }\n\n};\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): dom/data.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\nconst elementMap = new Map();\nvar Data = {\n  set(element, key, instance) {\n    if (!elementMap.has(element)) {\n      elementMap.set(element, new Map());\n    }\n\n    const instanceMap = elementMap.get(element); // make it clear we only want one instance per element\n    // can be removed later when multiple key/instances are fine to be used\n\n    if (!instanceMap.has(key) && instanceMap.size !== 0) {\n      // eslint-disable-next-line no-console\n      console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(instanceMap.keys())[0]}.`);\n      return;\n    }\n\n    instanceMap.set(key, instance);\n  },\n\n  get(element, key) {\n    if (elementMap.has(element)) {\n      return elementMap.get(element).get(key) || null;\n    }\n\n    return null;\n  },\n\n  remove(element, key) {\n    if (!elementMap.has(element)) {\n      return;\n    }\n\n    const instanceMap = elementMap.get(element);\n    instanceMap.delete(key); // free up element references if there are no instances left for an element\n\n    if (instanceMap.size === 0) {\n      elementMap.delete(element);\n    }\n  }\n\n};\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): base-component.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst VERSION = '5.0.2';\n\nclass BaseComponent {\n  constructor(element) {\n    element = getElement(element);\n\n    if (!element) {\n      return;\n    }\n\n    this._element = element;\n    Data.set(this._element, this.constructor.DATA_KEY, this);\n  }\n\n  dispose() {\n    Data.remove(this._element, this.constructor.DATA_KEY);\n    EventHandler.off(this._element, this.constructor.EVENT_KEY);\n    Object.getOwnPropertyNames(this).forEach(propertyName => {\n      this[propertyName] = null;\n    });\n  }\n\n  _queueCallback(callback, element, isAnimated = true) {\n    executeAfterTransition(callback, element, isAnimated);\n  }\n  /** Static */\n\n\n  static getInstance(element) {\n    return Data.get(element, this.DATA_KEY);\n  }\n\n  static getOrCreateInstance(element, config = {}) {\n    return this.getInstance(element) || new this(element, typeof config === 'object' ? config : null);\n  }\n\n  static get VERSION() {\n    return VERSION;\n  }\n\n  static get NAME() {\n    throw new Error('You have to implement the static method \"NAME\", for each component!');\n  }\n\n  static get DATA_KEY() {\n    return `bs.${this.NAME}`;\n  }\n\n  static get EVENT_KEY() {\n    return `.${this.DATA_KEY}`;\n  }\n\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): alert.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$c = 'alert';\nconst DATA_KEY$b = 'bs.alert';\nconst EVENT_KEY$b = `.${DATA_KEY$b}`;\nconst DATA_API_KEY$8 = '.data-api';\nconst SELECTOR_DISMISS = '[data-bs-dismiss=\"alert\"]';\nconst EVENT_CLOSE = `close${EVENT_KEY$b}`;\nconst EVENT_CLOSED = `closed${EVENT_KEY$b}`;\nconst EVENT_CLICK_DATA_API$7 = `click${EVENT_KEY$b}${DATA_API_KEY$8}`;\nconst CLASS_NAME_ALERT = 'alert';\nconst CLASS_NAME_FADE$6 = 'fade';\nconst CLASS_NAME_SHOW$9 = 'show';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Alert extends BaseComponent {\n  // Getters\n  static get NAME() {\n    return NAME$c;\n  } // Public\n\n\n  close(element) {\n    const rootElement = element ? this._getRootElement(element) : this._element;\n\n    const customEvent = this._triggerCloseEvent(rootElement);\n\n    if (customEvent === null || customEvent.defaultPrevented) {\n      return;\n    }\n\n    this._removeElement(rootElement);\n  } // Private\n\n\n  _getRootElement(element) {\n    return getElementFromSelector(element) || element.closest(`.${CLASS_NAME_ALERT}`);\n  }\n\n  _triggerCloseEvent(element) {\n    return EventHandler.trigger(element, EVENT_CLOSE);\n  }\n\n  _removeElement(element) {\n    element.classList.remove(CLASS_NAME_SHOW$9);\n    const isAnimated = element.classList.contains(CLASS_NAME_FADE$6);\n\n    this._queueCallback(() => this._destroyElement(element), element, isAnimated);\n  }\n\n  _destroyElement(element) {\n    element.remove();\n    EventHandler.trigger(element, EVENT_CLOSED);\n  } // Static\n\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Alert.getOrCreateInstance(this);\n\n      if (config === 'close') {\n        data[config](this);\n      }\n    });\n  }\n\n  static handleDismiss(alertInstance) {\n    return function (event) {\n      if (event) {\n        event.preventDefault();\n      }\n\n      alertInstance.close(this);\n    };\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$7, SELECTOR_DISMISS, Alert.handleDismiss(new Alert()));\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Alert to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Alert);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): button.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$b = 'button';\nconst DATA_KEY$a = 'bs.button';\nconst EVENT_KEY$a = `.${DATA_KEY$a}`;\nconst DATA_API_KEY$7 = '.data-api';\nconst CLASS_NAME_ACTIVE$3 = 'active';\nconst SELECTOR_DATA_TOGGLE$5 = '[data-bs-toggle=\"button\"]';\nconst EVENT_CLICK_DATA_API$6 = `click${EVENT_KEY$a}${DATA_API_KEY$7}`;\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Button extends BaseComponent {\n  // Getters\n  static get NAME() {\n    return NAME$b;\n  } // Public\n\n\n  toggle() {\n    // Toggle class and sync the `aria-pressed` attribute with the return value of the `.toggle()` method\n    this._element.setAttribute('aria-pressed', this._element.classList.toggle(CLASS_NAME_ACTIVE$3));\n  } // Static\n\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Button.getOrCreateInstance(this);\n\n      if (config === 'toggle') {\n        data[config]();\n      }\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$6, SELECTOR_DATA_TOGGLE$5, event => {\n  event.preventDefault();\n  const button = event.target.closest(SELECTOR_DATA_TOGGLE$5);\n  const data = Button.getOrCreateInstance(button);\n  data.toggle();\n});\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Button to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Button);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): dom/manipulator.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\nfunction normalizeData(val) {\n  if (val === 'true') {\n    return true;\n  }\n\n  if (val === 'false') {\n    return false;\n  }\n\n  if (val === Number(val).toString()) {\n    return Number(val);\n  }\n\n  if (val === '' || val === 'null') {\n    return null;\n  }\n\n  return val;\n}\n\nfunction normalizeDataKey(key) {\n  return key.replace(/[A-Z]/g, chr => `-${chr.toLowerCase()}`);\n}\n\nconst Manipulator = {\n  setDataAttribute(element, key, value) {\n    element.setAttribute(`data-bs-${normalizeDataKey(key)}`, value);\n  },\n\n  removeDataAttribute(element, key) {\n    element.removeAttribute(`data-bs-${normalizeDataKey(key)}`);\n  },\n\n  getDataAttributes(element) {\n    if (!element) {\n      return {};\n    }\n\n    const attributes = {};\n    Object.keys(element.dataset).filter(key => key.startsWith('bs')).forEach(key => {\n      let pureKey = key.replace(/^bs/, '');\n      pureKey = pureKey.charAt(0).toLowerCase() + pureKey.slice(1, pureKey.length);\n      attributes[pureKey] = normalizeData(element.dataset[key]);\n    });\n    return attributes;\n  },\n\n  getDataAttribute(element, key) {\n    return normalizeData(element.getAttribute(`data-bs-${normalizeDataKey(key)}`));\n  },\n\n  offset(element) {\n    const rect = element.getBoundingClientRect();\n    return {\n      top: rect.top + document.body.scrollTop,\n      left: rect.left + document.body.scrollLeft\n    };\n  },\n\n  position(element) {\n    return {\n      top: element.offsetTop,\n      left: element.offsetLeft\n    };\n  }\n\n};\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): carousel.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$a = 'carousel';\nconst DATA_KEY$9 = 'bs.carousel';\nconst EVENT_KEY$9 = `.${DATA_KEY$9}`;\nconst DATA_API_KEY$6 = '.data-api';\nconst ARROW_LEFT_KEY = 'ArrowLeft';\nconst ARROW_RIGHT_KEY = 'ArrowRight';\nconst TOUCHEVENT_COMPAT_WAIT = 500; // Time for mouse compat events to fire after touch\n\nconst SWIPE_THRESHOLD = 40;\nconst Default$9 = {\n  interval: 5000,\n  keyboard: true,\n  slide: false,\n  pause: 'hover',\n  wrap: true,\n  touch: true\n};\nconst DefaultType$9 = {\n  interval: '(number|boolean)',\n  keyboard: 'boolean',\n  slide: '(boolean|string)',\n  pause: '(string|boolean)',\n  wrap: 'boolean',\n  touch: 'boolean'\n};\nconst ORDER_NEXT = 'next';\nconst ORDER_PREV = 'prev';\nconst DIRECTION_LEFT = 'left';\nconst DIRECTION_RIGHT = 'right';\nconst KEY_TO_DIRECTION = {\n  [ARROW_LEFT_KEY]: DIRECTION_RIGHT,\n  [ARROW_RIGHT_KEY]: DIRECTION_LEFT\n};\nconst EVENT_SLIDE = `slide${EVENT_KEY$9}`;\nconst EVENT_SLID = `slid${EVENT_KEY$9}`;\nconst EVENT_KEYDOWN = `keydown${EVENT_KEY$9}`;\nconst EVENT_MOUSEENTER = `mouseenter${EVENT_KEY$9}`;\nconst EVENT_MOUSELEAVE = `mouseleave${EVENT_KEY$9}`;\nconst EVENT_TOUCHSTART = `touchstart${EVENT_KEY$9}`;\nconst EVENT_TOUCHMOVE = `touchmove${EVENT_KEY$9}`;\nconst EVENT_TOUCHEND = `touchend${EVENT_KEY$9}`;\nconst EVENT_POINTERDOWN = `pointerdown${EVENT_KEY$9}`;\nconst EVENT_POINTERUP = `pointerup${EVENT_KEY$9}`;\nconst EVENT_DRAG_START = `dragstart${EVENT_KEY$9}`;\nconst EVENT_LOAD_DATA_API$2 = `load${EVENT_KEY$9}${DATA_API_KEY$6}`;\nconst EVENT_CLICK_DATA_API$5 = `click${EVENT_KEY$9}${DATA_API_KEY$6}`;\nconst CLASS_NAME_CAROUSEL = 'carousel';\nconst CLASS_NAME_ACTIVE$2 = 'active';\nconst CLASS_NAME_SLIDE = 'slide';\nconst CLASS_NAME_END = 'carousel-item-end';\nconst CLASS_NAME_START = 'carousel-item-start';\nconst CLASS_NAME_NEXT = 'carousel-item-next';\nconst CLASS_NAME_PREV = 'carousel-item-prev';\nconst CLASS_NAME_POINTER_EVENT = 'pointer-event';\nconst SELECTOR_ACTIVE$1 = '.active';\nconst SELECTOR_ACTIVE_ITEM = '.active.carousel-item';\nconst SELECTOR_ITEM = '.carousel-item';\nconst SELECTOR_ITEM_IMG = '.carousel-item img';\nconst SELECTOR_NEXT_PREV = '.carousel-item-next, .carousel-item-prev';\nconst SELECTOR_INDICATORS = '.carousel-indicators';\nconst SELECTOR_INDICATOR = '[data-bs-target]';\nconst SELECTOR_DATA_SLIDE = '[data-bs-slide], [data-bs-slide-to]';\nconst SELECTOR_DATA_RIDE = '[data-bs-ride=\"carousel\"]';\nconst POINTER_TYPE_TOUCH = 'touch';\nconst POINTER_TYPE_PEN = 'pen';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Carousel extends BaseComponent {\n  constructor(element, config) {\n    super(element);\n    this._items = null;\n    this._interval = null;\n    this._activeElement = null;\n    this._isPaused = false;\n    this._isSliding = false;\n    this.touchTimeout = null;\n    this.touchStartX = 0;\n    this.touchDeltaX = 0;\n    this._config = this._getConfig(config);\n    this._indicatorsElement = SelectorEngine.findOne(SELECTOR_INDICATORS, this._element);\n    this._touchSupported = 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0;\n    this._pointerEvent = Boolean(window.PointerEvent);\n\n    this._addEventListeners();\n  } // Getters\n\n\n  static get Default() {\n    return Default$9;\n  }\n\n  static get NAME() {\n    return NAME$a;\n  } // Public\n\n\n  next() {\n    this._slide(ORDER_NEXT);\n  }\n\n  nextWhenVisible() {\n    // Don't call next when the page isn't visible\n    // or the carousel or its parent isn't visible\n    if (!document.hidden && isVisible(this._element)) {\n      this.next();\n    }\n  }\n\n  prev() {\n    this._slide(ORDER_PREV);\n  }\n\n  pause(event) {\n    if (!event) {\n      this._isPaused = true;\n    }\n\n    if (SelectorEngine.findOne(SELECTOR_NEXT_PREV, this._element)) {\n      triggerTransitionEnd(this._element);\n      this.cycle(true);\n    }\n\n    clearInterval(this._interval);\n    this._interval = null;\n  }\n\n  cycle(event) {\n    if (!event) {\n      this._isPaused = false;\n    }\n\n    if (this._interval) {\n      clearInterval(this._interval);\n      this._interval = null;\n    }\n\n    if (this._config && this._config.interval && !this._isPaused) {\n      this._updateInterval();\n\n      this._interval = setInterval((document.visibilityState ? this.nextWhenVisible : this.next).bind(this), this._config.interval);\n    }\n  }\n\n  to(index) {\n    this._activeElement = SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element);\n\n    const activeIndex = this._getItemIndex(this._activeElement);\n\n    if (index > this._items.length - 1 || index < 0) {\n      return;\n    }\n\n    if (this._isSliding) {\n      EventHandler.one(this._element, EVENT_SLID, () => this.to(index));\n      return;\n    }\n\n    if (activeIndex === index) {\n      this.pause();\n      this.cycle();\n      return;\n    }\n\n    const order = index > activeIndex ? ORDER_NEXT : ORDER_PREV;\n\n    this._slide(order, this._items[index]);\n  } // Private\n\n\n  _getConfig(config) {\n    config = { ...Default$9,\n      ...Manipulator.getDataAttributes(this._element),\n      ...(typeof config === 'object' ? config : {})\n    };\n    typeCheckConfig(NAME$a, config, DefaultType$9);\n    return config;\n  }\n\n  _handleSwipe() {\n    const absDeltax = Math.abs(this.touchDeltaX);\n\n    if (absDeltax <= SWIPE_THRESHOLD) {\n      return;\n    }\n\n    const direction = absDeltax / this.touchDeltaX;\n    this.touchDeltaX = 0;\n\n    if (!direction) {\n      return;\n    }\n\n    this._slide(direction > 0 ? DIRECTION_RIGHT : DIRECTION_LEFT);\n  }\n\n  _addEventListeners() {\n    if (this._config.keyboard) {\n      EventHandler.on(this._element, EVENT_KEYDOWN, event => this._keydown(event));\n    }\n\n    if (this._config.pause === 'hover') {\n      EventHandler.on(this._element, EVENT_MOUSEENTER, event => this.pause(event));\n      EventHandler.on(this._element, EVENT_MOUSELEAVE, event => this.cycle(event));\n    }\n\n    if (this._config.touch && this._touchSupported) {\n      this._addTouchEventListeners();\n    }\n  }\n\n  _addTouchEventListeners() {\n    const start = event => {\n      if (this._pointerEvent && (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH)) {\n        this.touchStartX = event.clientX;\n      } else if (!this._pointerEvent) {\n        this.touchStartX = event.touches[0].clientX;\n      }\n    };\n\n    const move = event => {\n      // ensure swiping with one touch and not pinching\n      this.touchDeltaX = event.touches && event.touches.length > 1 ? 0 : event.touches[0].clientX - this.touchStartX;\n    };\n\n    const end = event => {\n      if (this._pointerEvent && (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH)) {\n        this.touchDeltaX = event.clientX - this.touchStartX;\n      }\n\n      this._handleSwipe();\n\n      if (this._config.pause === 'hover') {\n        // If it's a touch-enabled device, mouseenter/leave are fired as\n        // part of the mouse compatibility events on first tap - the carousel\n        // would stop cycling until user tapped out of it;\n        // here, we listen for touchend, explicitly pause the carousel\n        // (as if it's the second time we tap on it, mouseenter compat event\n        // is NOT fired) and after a timeout (to allow for mouse compatibility\n        // events to fire) we explicitly restart cycling\n        this.pause();\n\n        if (this.touchTimeout) {\n          clearTimeout(this.touchTimeout);\n        }\n\n        this.touchTimeout = setTimeout(event => this.cycle(event), TOUCHEVENT_COMPAT_WAIT + this._config.interval);\n      }\n    };\n\n    SelectorEngine.find(SELECTOR_ITEM_IMG, this._element).forEach(itemImg => {\n      EventHandler.on(itemImg, EVENT_DRAG_START, e => e.preventDefault());\n    });\n\n    if (this._pointerEvent) {\n      EventHandler.on(this._element, EVENT_POINTERDOWN, event => start(event));\n      EventHandler.on(this._element, EVENT_POINTERUP, event => end(event));\n\n      this._element.classList.add(CLASS_NAME_POINTER_EVENT);\n    } else {\n      EventHandler.on(this._element, EVENT_TOUCHSTART, event => start(event));\n      EventHandler.on(this._element, EVENT_TOUCHMOVE, event => move(event));\n      EventHandler.on(this._element, EVENT_TOUCHEND, event => end(event));\n    }\n  }\n\n  _keydown(event) {\n    if (/input|textarea/i.test(event.target.tagName)) {\n      return;\n    }\n\n    const direction = KEY_TO_DIRECTION[event.key];\n\n    if (direction) {\n      event.preventDefault();\n\n      this._slide(direction);\n    }\n  }\n\n  _getItemIndex(element) {\n    this._items = element && element.parentNode ? SelectorEngine.find(SELECTOR_ITEM, element.parentNode) : [];\n    return this._items.indexOf(element);\n  }\n\n  _getItemByOrder(order, activeElement) {\n    const isNext = order === ORDER_NEXT;\n    return getNextActiveElement(this._items, activeElement, isNext, this._config.wrap);\n  }\n\n  _triggerSlideEvent(relatedTarget, eventDirectionName) {\n    const targetIndex = this._getItemIndex(relatedTarget);\n\n    const fromIndex = this._getItemIndex(SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element));\n\n    return EventHandler.trigger(this._element, EVENT_SLIDE, {\n      relatedTarget,\n      direction: eventDirectionName,\n      from: fromIndex,\n      to: targetIndex\n    });\n  }\n\n  _setActiveIndicatorElement(element) {\n    if (this._indicatorsElement) {\n      const activeIndicator = SelectorEngine.findOne(SELECTOR_ACTIVE$1, this._indicatorsElement);\n      activeIndicator.classList.remove(CLASS_NAME_ACTIVE$2);\n      activeIndicator.removeAttribute('aria-current');\n      const indicators = SelectorEngine.find(SELECTOR_INDICATOR, this._indicatorsElement);\n\n      for (let i = 0; i < indicators.length; i++) {\n        if (Number.parseInt(indicators[i].getAttribute('data-bs-slide-to'), 10) === this._getItemIndex(element)) {\n          indicators[i].classList.add(CLASS_NAME_ACTIVE$2);\n          indicators[i].setAttribute('aria-current', 'true');\n          break;\n        }\n      }\n    }\n  }\n\n  _updateInterval() {\n    const element = this._activeElement || SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element);\n\n    if (!element) {\n      return;\n    }\n\n    const elementInterval = Number.parseInt(element.getAttribute('data-bs-interval'), 10);\n\n    if (elementInterval) {\n      this._config.defaultInterval = this._config.defaultInterval || this._config.interval;\n      this._config.interval = elementInterval;\n    } else {\n      this._config.interval = this._config.defaultInterval || this._config.interval;\n    }\n  }\n\n  _slide(directionOrOrder, element) {\n    const order = this._directionToOrder(directionOrOrder);\n\n    const activeElement = SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element);\n\n    const activeElementIndex = this._getItemIndex(activeElement);\n\n    const nextElement = element || this._getItemByOrder(order, activeElement);\n\n    const nextElementIndex = this._getItemIndex(nextElement);\n\n    const isCycling = Boolean(this._interval);\n    const isNext = order === ORDER_NEXT;\n    const directionalClassName = isNext ? CLASS_NAME_START : CLASS_NAME_END;\n    const orderClassName = isNext ? CLASS_NAME_NEXT : CLASS_NAME_PREV;\n\n    const eventDirectionName = this._orderToDirection(order);\n\n    if (nextElement && nextElement.classList.contains(CLASS_NAME_ACTIVE$2)) {\n      this._isSliding = false;\n      return;\n    }\n\n    if (this._isSliding) {\n      return;\n    }\n\n    const slideEvent = this._triggerSlideEvent(nextElement, eventDirectionName);\n\n    if (slideEvent.defaultPrevented) {\n      return;\n    }\n\n    if (!activeElement || !nextElement) {\n      // Some weirdness is happening, so we bail\n      return;\n    }\n\n    this._isSliding = true;\n\n    if (isCycling) {\n      this.pause();\n    }\n\n    this._setActiveIndicatorElement(nextElement);\n\n    this._activeElement = nextElement;\n\n    const triggerSlidEvent = () => {\n      EventHandler.trigger(this._element, EVENT_SLID, {\n        relatedTarget: nextElement,\n        direction: eventDirectionName,\n        from: activeElementIndex,\n        to: nextElementIndex\n      });\n    };\n\n    if (this._element.classList.contains(CLASS_NAME_SLIDE)) {\n      nextElement.classList.add(orderClassName);\n      reflow(nextElement);\n      activeElement.classList.add(directionalClassName);\n      nextElement.classList.add(directionalClassName);\n\n      const completeCallBack = () => {\n        nextElement.classList.remove(directionalClassName, orderClassName);\n        nextElement.classList.add(CLASS_NAME_ACTIVE$2);\n        activeElement.classList.remove(CLASS_NAME_ACTIVE$2, orderClassName, directionalClassName);\n        this._isSliding = false;\n        setTimeout(triggerSlidEvent, 0);\n      };\n\n      this._queueCallback(completeCallBack, activeElement, true);\n    } else {\n      activeElement.classList.remove(CLASS_NAME_ACTIVE$2);\n      nextElement.classList.add(CLASS_NAME_ACTIVE$2);\n      this._isSliding = false;\n      triggerSlidEvent();\n    }\n\n    if (isCycling) {\n      this.cycle();\n    }\n  }\n\n  _directionToOrder(direction) {\n    if (![DIRECTION_RIGHT, DIRECTION_LEFT].includes(direction)) {\n      return direction;\n    }\n\n    if (isRTL()) {\n      return direction === DIRECTION_LEFT ? ORDER_PREV : ORDER_NEXT;\n    }\n\n    return direction === DIRECTION_LEFT ? ORDER_NEXT : ORDER_PREV;\n  }\n\n  _orderToDirection(order) {\n    if (![ORDER_NEXT, ORDER_PREV].includes(order)) {\n      return order;\n    }\n\n    if (isRTL()) {\n      return order === ORDER_PREV ? DIRECTION_LEFT : DIRECTION_RIGHT;\n    }\n\n    return order === ORDER_PREV ? DIRECTION_RIGHT : DIRECTION_LEFT;\n  } // Static\n\n\n  static carouselInterface(element, config) {\n    const data = Carousel.getOrCreateInstance(element, config);\n    let {\n      _config\n    } = data;\n\n    if (typeof config === 'object') {\n      _config = { ..._config,\n        ...config\n      };\n    }\n\n    const action = typeof config === 'string' ? config : _config.slide;\n\n    if (typeof config === 'number') {\n      data.to(config);\n    } else if (typeof action === 'string') {\n      if (typeof data[action] === 'undefined') {\n        throw new TypeError(`No method named \"${action}\"`);\n      }\n\n      data[action]();\n    } else if (_config.interval && _config.ride) {\n      data.pause();\n      data.cycle();\n    }\n  }\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      Carousel.carouselInterface(this, config);\n    });\n  }\n\n  static dataApiClickHandler(event) {\n    const target = getElementFromSelector(this);\n\n    if (!target || !target.classList.contains(CLASS_NAME_CAROUSEL)) {\n      return;\n    }\n\n    const config = { ...Manipulator.getDataAttributes(target),\n      ...Manipulator.getDataAttributes(this)\n    };\n    const slideIndex = this.getAttribute('data-bs-slide-to');\n\n    if (slideIndex) {\n      config.interval = false;\n    }\n\n    Carousel.carouselInterface(target, config);\n\n    if (slideIndex) {\n      Carousel.getInstance(target).to(slideIndex);\n    }\n\n    event.preventDefault();\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$5, SELECTOR_DATA_SLIDE, Carousel.dataApiClickHandler);\nEventHandler.on(window, EVENT_LOAD_DATA_API$2, () => {\n  const carousels = SelectorEngine.find(SELECTOR_DATA_RIDE);\n\n  for (let i = 0, len = carousels.length; i < len; i++) {\n    Carousel.carouselInterface(carousels[i], Carousel.getInstance(carousels[i]));\n  }\n});\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Carousel to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Carousel);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): collapse.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$9 = 'collapse';\nconst DATA_KEY$8 = 'bs.collapse';\nconst EVENT_KEY$8 = `.${DATA_KEY$8}`;\nconst DATA_API_KEY$5 = '.data-api';\nconst Default$8 = {\n  toggle: true,\n  parent: ''\n};\nconst DefaultType$8 = {\n  toggle: 'boolean',\n  parent: '(string|element)'\n};\nconst EVENT_SHOW$5 = `show${EVENT_KEY$8}`;\nconst EVENT_SHOWN$5 = `shown${EVENT_KEY$8}`;\nconst EVENT_HIDE$5 = `hide${EVENT_KEY$8}`;\nconst EVENT_HIDDEN$5 = `hidden${EVENT_KEY$8}`;\nconst EVENT_CLICK_DATA_API$4 = `click${EVENT_KEY$8}${DATA_API_KEY$5}`;\nconst CLASS_NAME_SHOW$8 = 'show';\nconst CLASS_NAME_COLLAPSE = 'collapse';\nconst CLASS_NAME_COLLAPSING = 'collapsing';\nconst CLASS_NAME_COLLAPSED = 'collapsed';\nconst WIDTH = 'width';\nconst HEIGHT = 'height';\nconst SELECTOR_ACTIVES = '.show, .collapsing';\nconst SELECTOR_DATA_TOGGLE$4 = '[data-bs-toggle=\"collapse\"]';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Collapse extends BaseComponent {\n  constructor(element, config) {\n    super(element);\n    this._isTransitioning = false;\n    this._config = this._getConfig(config);\n    this._triggerArray = SelectorEngine.find(`${SELECTOR_DATA_TOGGLE$4}[href=\"#${this._element.id}\"],` + `${SELECTOR_DATA_TOGGLE$4}[data-bs-target=\"#${this._element.id}\"]`);\n    const toggleList = SelectorEngine.find(SELECTOR_DATA_TOGGLE$4);\n\n    for (let i = 0, len = toggleList.length; i < len; i++) {\n      const elem = toggleList[i];\n      const selector = getSelectorFromElement(elem);\n      const filterElement = SelectorEngine.find(selector).filter(foundElem => foundElem === this._element);\n\n      if (selector !== null && filterElement.length) {\n        this._selector = selector;\n\n        this._triggerArray.push(elem);\n      }\n    }\n\n    this._parent = this._config.parent ? this._getParent() : null;\n\n    if (!this._config.parent) {\n      this._addAriaAndCollapsedClass(this._element, this._triggerArray);\n    }\n\n    if (this._config.toggle) {\n      this.toggle();\n    }\n  } // Getters\n\n\n  static get Default() {\n    return Default$8;\n  }\n\n  static get NAME() {\n    return NAME$9;\n  } // Public\n\n\n  toggle() {\n    if (this._element.classList.contains(CLASS_NAME_SHOW$8)) {\n      this.hide();\n    } else {\n      this.show();\n    }\n  }\n\n  show() {\n    if (this._isTransitioning || this._element.classList.contains(CLASS_NAME_SHOW$8)) {\n      return;\n    }\n\n    let actives;\n    let activesData;\n\n    if (this._parent) {\n      actives = SelectorEngine.find(SELECTOR_ACTIVES, this._parent).filter(elem => {\n        if (typeof this._config.parent === 'string') {\n          return elem.getAttribute('data-bs-parent') === this._config.parent;\n        }\n\n        return elem.classList.contains(CLASS_NAME_COLLAPSE);\n      });\n\n      if (actives.length === 0) {\n        actives = null;\n      }\n    }\n\n    const container = SelectorEngine.findOne(this._selector);\n\n    if (actives) {\n      const tempActiveData = actives.find(elem => container !== elem);\n      activesData = tempActiveData ? Collapse.getInstance(tempActiveData) : null;\n\n      if (activesData && activesData._isTransitioning) {\n        return;\n      }\n    }\n\n    const startEvent = EventHandler.trigger(this._element, EVENT_SHOW$5);\n\n    if (startEvent.defaultPrevented) {\n      return;\n    }\n\n    if (actives) {\n      actives.forEach(elemActive => {\n        if (container !== elemActive) {\n          Collapse.collapseInterface(elemActive, 'hide');\n        }\n\n        if (!activesData) {\n          Data.set(elemActive, DATA_KEY$8, null);\n        }\n      });\n    }\n\n    const dimension = this._getDimension();\n\n    this._element.classList.remove(CLASS_NAME_COLLAPSE);\n\n    this._element.classList.add(CLASS_NAME_COLLAPSING);\n\n    this._element.style[dimension] = 0;\n\n    if (this._triggerArray.length) {\n      this._triggerArray.forEach(element => {\n        element.classList.remove(CLASS_NAME_COLLAPSED);\n        element.setAttribute('aria-expanded', true);\n      });\n    }\n\n    this.setTransitioning(true);\n\n    const complete = () => {\n      this._element.classList.remove(CLASS_NAME_COLLAPSING);\n\n      this._element.classList.add(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$8);\n\n      this._element.style[dimension] = '';\n      this.setTransitioning(false);\n      EventHandler.trigger(this._element, EVENT_SHOWN$5);\n    };\n\n    const capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1);\n    const scrollSize = `scroll${capitalizedDimension}`;\n\n    this._queueCallback(complete, this._element, true);\n\n    this._element.style[dimension] = `${this._element[scrollSize]}px`;\n  }\n\n  hide() {\n    if (this._isTransitioning || !this._element.classList.contains(CLASS_NAME_SHOW$8)) {\n      return;\n    }\n\n    const startEvent = EventHandler.trigger(this._element, EVENT_HIDE$5);\n\n    if (startEvent.defaultPrevented) {\n      return;\n    }\n\n    const dimension = this._getDimension();\n\n    this._element.style[dimension] = `${this._element.getBoundingClientRect()[dimension]}px`;\n    reflow(this._element);\n\n    this._element.classList.add(CLASS_NAME_COLLAPSING);\n\n    this._element.classList.remove(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$8);\n\n    const triggerArrayLength = this._triggerArray.length;\n\n    if (triggerArrayLength > 0) {\n      for (let i = 0; i < triggerArrayLength; i++) {\n        const trigger = this._triggerArray[i];\n        const elem = getElementFromSelector(trigger);\n\n        if (elem && !elem.classList.contains(CLASS_NAME_SHOW$8)) {\n          trigger.classList.add(CLASS_NAME_COLLAPSED);\n          trigger.setAttribute('aria-expanded', false);\n        }\n      }\n    }\n\n    this.setTransitioning(true);\n\n    const complete = () => {\n      this.setTransitioning(false);\n\n      this._element.classList.remove(CLASS_NAME_COLLAPSING);\n\n      this._element.classList.add(CLASS_NAME_COLLAPSE);\n\n      EventHandler.trigger(this._element, EVENT_HIDDEN$5);\n    };\n\n    this._element.style[dimension] = '';\n\n    this._queueCallback(complete, this._element, true);\n  }\n\n  setTransitioning(isTransitioning) {\n    this._isTransitioning = isTransitioning;\n  } // Private\n\n\n  _getConfig(config) {\n    config = { ...Default$8,\n      ...config\n    };\n    config.toggle = Boolean(config.toggle); // Coerce string values\n\n    typeCheckConfig(NAME$9, config, DefaultType$8);\n    return config;\n  }\n\n  _getDimension() {\n    return this._element.classList.contains(WIDTH) ? WIDTH : HEIGHT;\n  }\n\n  _getParent() {\n    let {\n      parent\n    } = this._config;\n    parent = getElement(parent);\n    const selector = `${SELECTOR_DATA_TOGGLE$4}[data-bs-parent=\"${parent}\"]`;\n    SelectorEngine.find(selector, parent).forEach(element => {\n      const selected = getElementFromSelector(element);\n\n      this._addAriaAndCollapsedClass(selected, [element]);\n    });\n    return parent;\n  }\n\n  _addAriaAndCollapsedClass(element, triggerArray) {\n    if (!element || !triggerArray.length) {\n      return;\n    }\n\n    const isOpen = element.classList.contains(CLASS_NAME_SHOW$8);\n    triggerArray.forEach(elem => {\n      if (isOpen) {\n        elem.classList.remove(CLASS_NAME_COLLAPSED);\n      } else {\n        elem.classList.add(CLASS_NAME_COLLAPSED);\n      }\n\n      elem.setAttribute('aria-expanded', isOpen);\n    });\n  } // Static\n\n\n  static collapseInterface(element, config) {\n    let data = Collapse.getInstance(element);\n    const _config = { ...Default$8,\n      ...Manipulator.getDataAttributes(element),\n      ...(typeof config === 'object' && config ? config : {})\n    };\n\n    if (!data && _config.toggle && typeof config === 'string' && /show|hide/.test(config)) {\n      _config.toggle = false;\n    }\n\n    if (!data) {\n      data = new Collapse(element, _config);\n    }\n\n    if (typeof config === 'string') {\n      if (typeof data[config] === 'undefined') {\n        throw new TypeError(`No method named \"${config}\"`);\n      }\n\n      data[config]();\n    }\n  }\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      Collapse.collapseInterface(this, config);\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$4, SELECTOR_DATA_TOGGLE$4, function (event) {\n  // preventDefault only for <a> elements (which change the URL) not inside the collapsible element\n  if (event.target.tagName === 'A' || event.delegateTarget && event.delegateTarget.tagName === 'A') {\n    event.preventDefault();\n  }\n\n  const triggerData = Manipulator.getDataAttributes(this);\n  const selector = getSelectorFromElement(this);\n  const selectorElements = SelectorEngine.find(selector);\n  selectorElements.forEach(element => {\n    const data = Collapse.getInstance(element);\n    let config;\n\n    if (data) {\n      // update parent attribute\n      if (data._parent === null && typeof triggerData.parent === 'string') {\n        data._config.parent = triggerData.parent;\n        data._parent = data._getParent();\n      }\n\n      config = 'toggle';\n    } else {\n      config = triggerData;\n    }\n\n    Collapse.collapseInterface(element, config);\n  });\n});\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Collapse to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Collapse);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): dropdown.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$8 = 'dropdown';\nconst DATA_KEY$7 = 'bs.dropdown';\nconst EVENT_KEY$7 = `.${DATA_KEY$7}`;\nconst DATA_API_KEY$4 = '.data-api';\nconst ESCAPE_KEY$2 = 'Escape';\nconst SPACE_KEY = 'Space';\nconst TAB_KEY = 'Tab';\nconst ARROW_UP_KEY = 'ArrowUp';\nconst ARROW_DOWN_KEY = 'ArrowDown';\nconst RIGHT_MOUSE_BUTTON = 2; // MouseEvent.button value for the secondary button, usually the right button\n\nconst REGEXP_KEYDOWN = new RegExp(`${ARROW_UP_KEY}|${ARROW_DOWN_KEY}|${ESCAPE_KEY$2}`);\nconst EVENT_HIDE$4 = `hide${EVENT_KEY$7}`;\nconst EVENT_HIDDEN$4 = `hidden${EVENT_KEY$7}`;\nconst EVENT_SHOW$4 = `show${EVENT_KEY$7}`;\nconst EVENT_SHOWN$4 = `shown${EVENT_KEY$7}`;\nconst EVENT_CLICK = `click${EVENT_KEY$7}`;\nconst EVENT_CLICK_DATA_API$3 = `click${EVENT_KEY$7}${DATA_API_KEY$4}`;\nconst EVENT_KEYDOWN_DATA_API = `keydown${EVENT_KEY$7}${DATA_API_KEY$4}`;\nconst EVENT_KEYUP_DATA_API = `keyup${EVENT_KEY$7}${DATA_API_KEY$4}`;\nconst CLASS_NAME_SHOW$7 = 'show';\nconst CLASS_NAME_DROPUP = 'dropup';\nconst CLASS_NAME_DROPEND = 'dropend';\nconst CLASS_NAME_DROPSTART = 'dropstart';\nconst CLASS_NAME_NAVBAR = 'navbar';\nconst SELECTOR_DATA_TOGGLE$3 = '[data-bs-toggle=\"dropdown\"]';\nconst SELECTOR_MENU = '.dropdown-menu';\nconst SELECTOR_NAVBAR_NAV = '.navbar-nav';\nconst SELECTOR_VISIBLE_ITEMS = '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)';\nconst PLACEMENT_TOP = isRTL() ? 'top-end' : 'top-start';\nconst PLACEMENT_TOPEND = isRTL() ? 'top-start' : 'top-end';\nconst PLACEMENT_BOTTOM = isRTL() ? 'bottom-end' : 'bottom-start';\nconst PLACEMENT_BOTTOMEND = isRTL() ? 'bottom-start' : 'bottom-end';\nconst PLACEMENT_RIGHT = isRTL() ? 'left-start' : 'right-start';\nconst PLACEMENT_LEFT = isRTL() ? 'right-start' : 'left-start';\nconst Default$7 = {\n  offset: [0, 2],\n  boundary: 'clippingParents',\n  reference: 'toggle',\n  display: 'dynamic',\n  popperConfig: null,\n  autoClose: true\n};\nconst DefaultType$7 = {\n  offset: '(array|string|function)',\n  boundary: '(string|element)',\n  reference: '(string|element|object)',\n  display: 'string',\n  popperConfig: '(null|object|function)',\n  autoClose: '(boolean|string)'\n};\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Dropdown extends BaseComponent {\n  constructor(element, config) {\n    super(element);\n    this._popper = null;\n    this._config = this._getConfig(config);\n    this._menu = this._getMenuElement();\n    this._inNavbar = this._detectNavbar();\n\n    this._addEventListeners();\n  } // Getters\n\n\n  static get Default() {\n    return Default$7;\n  }\n\n  static get DefaultType() {\n    return DefaultType$7;\n  }\n\n  static get NAME() {\n    return NAME$8;\n  } // Public\n\n\n  toggle() {\n    if (isDisabled(this._element)) {\n      return;\n    }\n\n    const isActive = this._element.classList.contains(CLASS_NAME_SHOW$7);\n\n    if (isActive) {\n      this.hide();\n      return;\n    }\n\n    this.show();\n  }\n\n  show() {\n    if (isDisabled(this._element) || this._menu.classList.contains(CLASS_NAME_SHOW$7)) {\n      return;\n    }\n\n    const parent = Dropdown.getParentFromElement(this._element);\n    const relatedTarget = {\n      relatedTarget: this._element\n    };\n    const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$4, relatedTarget);\n\n    if (showEvent.defaultPrevented) {\n      return;\n    } // Totally disable Popper for Dropdowns in Navbar\n\n\n    if (this._inNavbar) {\n      Manipulator.setDataAttribute(this._menu, 'popper', 'none');\n    } else {\n      if (typeof Popper === 'undefined') {\n        throw new TypeError('Bootstrap\\'s dropdowns require Popper (https://popper.js.org)');\n      }\n\n      let referenceElement = this._element;\n\n      if (this._config.reference === 'parent') {\n        referenceElement = parent;\n      } else if (isElement(this._config.reference)) {\n        referenceElement = getElement(this._config.reference);\n      } else if (typeof this._config.reference === 'object') {\n        referenceElement = this._config.reference;\n      }\n\n      const popperConfig = this._getPopperConfig();\n\n      const isDisplayStatic = popperConfig.modifiers.find(modifier => modifier.name === 'applyStyles' && modifier.enabled === false);\n      this._popper = Popper.createPopper(referenceElement, this._menu, popperConfig);\n\n      if (isDisplayStatic) {\n        Manipulator.setDataAttribute(this._menu, 'popper', 'static');\n      }\n    } // If this is a touch-enabled device we add extra\n    // empty mouseover listeners to the body's immediate children;\n    // only needed because of broken event delegation on iOS\n    // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n\n\n    if ('ontouchstart' in document.documentElement && !parent.closest(SELECTOR_NAVBAR_NAV)) {\n      [].concat(...document.body.children).forEach(elem => EventHandler.on(elem, 'mouseover', noop));\n    }\n\n    this._element.focus();\n\n    this._element.setAttribute('aria-expanded', true);\n\n    this._menu.classList.toggle(CLASS_NAME_SHOW$7);\n\n    this._element.classList.toggle(CLASS_NAME_SHOW$7);\n\n    EventHandler.trigger(this._element, EVENT_SHOWN$4, relatedTarget);\n  }\n\n  hide() {\n    if (isDisabled(this._element) || !this._menu.classList.contains(CLASS_NAME_SHOW$7)) {\n      return;\n    }\n\n    const relatedTarget = {\n      relatedTarget: this._element\n    };\n\n    this._completeHide(relatedTarget);\n  }\n\n  dispose() {\n    if (this._popper) {\n      this._popper.destroy();\n    }\n\n    super.dispose();\n  }\n\n  update() {\n    this._inNavbar = this._detectNavbar();\n\n    if (this._popper) {\n      this._popper.update();\n    }\n  } // Private\n\n\n  _addEventListeners() {\n    EventHandler.on(this._element, EVENT_CLICK, event => {\n      event.preventDefault();\n      this.toggle();\n    });\n  }\n\n  _completeHide(relatedTarget) {\n    const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$4, relatedTarget);\n\n    if (hideEvent.defaultPrevented) {\n      return;\n    } // If this is a touch-enabled device we remove the extra\n    // empty mouseover listeners we added for iOS support\n\n\n    if ('ontouchstart' in document.documentElement) {\n      [].concat(...document.body.children).forEach(elem => EventHandler.off(elem, 'mouseover', noop));\n    }\n\n    if (this._popper) {\n      this._popper.destroy();\n    }\n\n    this._menu.classList.remove(CLASS_NAME_SHOW$7);\n\n    this._element.classList.remove(CLASS_NAME_SHOW$7);\n\n    this._element.setAttribute('aria-expanded', 'false');\n\n    Manipulator.removeDataAttribute(this._menu, 'popper');\n    EventHandler.trigger(this._element, EVENT_HIDDEN$4, relatedTarget);\n  }\n\n  _getConfig(config) {\n    config = { ...this.constructor.Default,\n      ...Manipulator.getDataAttributes(this._element),\n      ...config\n    };\n    typeCheckConfig(NAME$8, config, this.constructor.DefaultType);\n\n    if (typeof config.reference === 'object' && !isElement(config.reference) && typeof config.reference.getBoundingClientRect !== 'function') {\n      // Popper virtual elements require a getBoundingClientRect method\n      throw new TypeError(`${NAME$8.toUpperCase()}: Option \"reference\" provided type \"object\" without a required \"getBoundingClientRect\" method.`);\n    }\n\n    return config;\n  }\n\n  _getMenuElement() {\n    return SelectorEngine.next(this._element, SELECTOR_MENU)[0];\n  }\n\n  _getPlacement() {\n    const parentDropdown = this._element.parentNode;\n\n    if (parentDropdown.classList.contains(CLASS_NAME_DROPEND)) {\n      return PLACEMENT_RIGHT;\n    }\n\n    if (parentDropdown.classList.contains(CLASS_NAME_DROPSTART)) {\n      return PLACEMENT_LEFT;\n    } // We need to trim the value because custom properties can also include spaces\n\n\n    const isEnd = getComputedStyle(this._menu).getPropertyValue('--bs-position').trim() === 'end';\n\n    if (parentDropdown.classList.contains(CLASS_NAME_DROPUP)) {\n      return isEnd ? PLACEMENT_TOPEND : PLACEMENT_TOP;\n    }\n\n    return isEnd ? PLACEMENT_BOTTOMEND : PLACEMENT_BOTTOM;\n  }\n\n  _detectNavbar() {\n    return this._element.closest(`.${CLASS_NAME_NAVBAR}`) !== null;\n  }\n\n  _getOffset() {\n    const {\n      offset\n    } = this._config;\n\n    if (typeof offset === 'string') {\n      return offset.split(',').map(val => Number.parseInt(val, 10));\n    }\n\n    if (typeof offset === 'function') {\n      return popperData => offset(popperData, this._element);\n    }\n\n    return offset;\n  }\n\n  _getPopperConfig() {\n    const defaultBsPopperConfig = {\n      placement: this._getPlacement(),\n      modifiers: [{\n        name: 'preventOverflow',\n        options: {\n          boundary: this._config.boundary\n        }\n      }, {\n        name: 'offset',\n        options: {\n          offset: this._getOffset()\n        }\n      }]\n    }; // Disable Popper if we have a static display\n\n    if (this._config.display === 'static') {\n      defaultBsPopperConfig.modifiers = [{\n        name: 'applyStyles',\n        enabled: false\n      }];\n    }\n\n    return { ...defaultBsPopperConfig,\n      ...(typeof this._config.popperConfig === 'function' ? this._config.popperConfig(defaultBsPopperConfig) : this._config.popperConfig)\n    };\n  }\n\n  _selectMenuItem({\n    key,\n    target\n  }) {\n    const items = SelectorEngine.find(SELECTOR_VISIBLE_ITEMS, this._menu).filter(isVisible);\n\n    if (!items.length) {\n      return;\n    } // if target isn't included in items (e.g. when expanding the dropdown)\n    // allow cycling to get the last item in case key equals ARROW_UP_KEY\n\n\n    getNextActiveElement(items, target, key === ARROW_DOWN_KEY, !items.includes(target)).focus();\n  } // Static\n\n\n  static dropdownInterface(element, config) {\n    const data = Dropdown.getOrCreateInstance(element, config);\n\n    if (typeof config === 'string') {\n      if (typeof data[config] === 'undefined') {\n        throw new TypeError(`No method named \"${config}\"`);\n      }\n\n      data[config]();\n    }\n  }\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      Dropdown.dropdownInterface(this, config);\n    });\n  }\n\n  static clearMenus(event) {\n    if (event && (event.button === RIGHT_MOUSE_BUTTON || event.type === 'keyup' && event.key !== TAB_KEY)) {\n      return;\n    }\n\n    const toggles = SelectorEngine.find(SELECTOR_DATA_TOGGLE$3);\n\n    for (let i = 0, len = toggles.length; i < len; i++) {\n      const context = Dropdown.getInstance(toggles[i]);\n\n      if (!context || context._config.autoClose === false) {\n        continue;\n      }\n\n      if (!context._element.classList.contains(CLASS_NAME_SHOW$7)) {\n        continue;\n      }\n\n      const relatedTarget = {\n        relatedTarget: context._element\n      };\n\n      if (event) {\n        const composedPath = event.composedPath();\n        const isMenuTarget = composedPath.includes(context._menu);\n\n        if (composedPath.includes(context._element) || context._config.autoClose === 'inside' && !isMenuTarget || context._config.autoClose === 'outside' && isMenuTarget) {\n          continue;\n        } // Tab navigation through the dropdown menu or events from contained inputs shouldn't close the menu\n\n\n        if (context._menu.contains(event.target) && (event.type === 'keyup' && event.key === TAB_KEY || /input|select|option|textarea|form/i.test(event.target.tagName))) {\n          continue;\n        }\n\n        if (event.type === 'click') {\n          relatedTarget.clickEvent = event;\n        }\n      }\n\n      context._completeHide(relatedTarget);\n    }\n  }\n\n  static getParentFromElement(element) {\n    return getElementFromSelector(element) || element.parentNode;\n  }\n\n  static dataApiKeydownHandler(event) {\n    // If not input/textarea:\n    //  - And not a key in REGEXP_KEYDOWN => not a dropdown command\n    // If input/textarea:\n    //  - If space key => not a dropdown command\n    //  - If key is other than escape\n    //    - If key is not up or down => not a dropdown command\n    //    - If trigger inside the menu => not a dropdown command\n    if (/input|textarea/i.test(event.target.tagName) ? event.key === SPACE_KEY || event.key !== ESCAPE_KEY$2 && (event.key !== ARROW_DOWN_KEY && event.key !== ARROW_UP_KEY || event.target.closest(SELECTOR_MENU)) : !REGEXP_KEYDOWN.test(event.key)) {\n      return;\n    }\n\n    const isActive = this.classList.contains(CLASS_NAME_SHOW$7);\n\n    if (!isActive && event.key === ESCAPE_KEY$2) {\n      return;\n    }\n\n    event.preventDefault();\n    event.stopPropagation();\n\n    if (isDisabled(this)) {\n      return;\n    }\n\n    const getToggleButton = () => this.matches(SELECTOR_DATA_TOGGLE$3) ? this : SelectorEngine.prev(this, SELECTOR_DATA_TOGGLE$3)[0];\n\n    if (event.key === ESCAPE_KEY$2) {\n      getToggleButton().focus();\n      Dropdown.clearMenus();\n      return;\n    }\n\n    if (event.key === ARROW_UP_KEY || event.key === ARROW_DOWN_KEY) {\n      if (!isActive) {\n        getToggleButton().click();\n      }\n\n      Dropdown.getInstance(getToggleButton())._selectMenuItem(event);\n\n      return;\n    }\n\n    if (!isActive || event.key === SPACE_KEY) {\n      Dropdown.clearMenus();\n    }\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_DATA_TOGGLE$3, Dropdown.dataApiKeydownHandler);\nEventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown.dataApiKeydownHandler);\nEventHandler.on(document, EVENT_CLICK_DATA_API$3, Dropdown.clearMenus);\nEventHandler.on(document, EVENT_KEYUP_DATA_API, Dropdown.clearMenus);\nEventHandler.on(document, EVENT_CLICK_DATA_API$3, SELECTOR_DATA_TOGGLE$3, function (event) {\n  event.preventDefault();\n  Dropdown.dropdownInterface(this);\n});\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Dropdown to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Dropdown);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): util/scrollBar.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\nconst SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top';\nconst SELECTOR_STICKY_CONTENT = '.sticky-top';\n\nclass ScrollBarHelper {\n  constructor() {\n    this._element = document.body;\n  }\n\n  getWidth() {\n    // https://developer.mozilla.org/en-US/docs/Web/API/Window/innerWidth#usage_notes\n    const documentWidth = document.documentElement.clientWidth;\n    return Math.abs(window.innerWidth - documentWidth);\n  }\n\n  hide() {\n    const width = this.getWidth();\n\n    this._disableOverFlow(); // give padding to element to balance the hidden scrollbar width\n\n\n    this._setElementAttributes(this._element, 'paddingRight', calculatedValue => calculatedValue + width); // trick: We adjust positive paddingRight and negative marginRight to sticky-top elements to keep showing fullwidth\n\n\n    this._setElementAttributes(SELECTOR_FIXED_CONTENT, 'paddingRight', calculatedValue => calculatedValue + width);\n\n    this._setElementAttributes(SELECTOR_STICKY_CONTENT, 'marginRight', calculatedValue => calculatedValue - width);\n  }\n\n  _disableOverFlow() {\n    this._saveInitialAttribute(this._element, 'overflow');\n\n    this._element.style.overflow = 'hidden';\n  }\n\n  _setElementAttributes(selector, styleProp, callback) {\n    const scrollbarWidth = this.getWidth();\n\n    const manipulationCallBack = element => {\n      if (element !== this._element && window.innerWidth > element.clientWidth + scrollbarWidth) {\n        return;\n      }\n\n      this._saveInitialAttribute(element, styleProp);\n\n      const calculatedValue = window.getComputedStyle(element)[styleProp];\n      element.style[styleProp] = `${callback(Number.parseFloat(calculatedValue))}px`;\n    };\n\n    this._applyManipulationCallback(selector, manipulationCallBack);\n  }\n\n  reset() {\n    this._resetElementAttributes(this._element, 'overflow');\n\n    this._resetElementAttributes(this._element, 'paddingRight');\n\n    this._resetElementAttributes(SELECTOR_FIXED_CONTENT, 'paddingRight');\n\n    this._resetElementAttributes(SELECTOR_STICKY_CONTENT, 'marginRight');\n  }\n\n  _saveInitialAttribute(element, styleProp) {\n    const actualValue = element.style[styleProp];\n\n    if (actualValue) {\n      Manipulator.setDataAttribute(element, styleProp, actualValue);\n    }\n  }\n\n  _resetElementAttributes(selector, styleProp) {\n    const manipulationCallBack = element => {\n      const value = Manipulator.getDataAttribute(element, styleProp);\n\n      if (typeof value === 'undefined') {\n        element.style.removeProperty(styleProp);\n      } else {\n        Manipulator.removeDataAttribute(element, styleProp);\n        element.style[styleProp] = value;\n      }\n    };\n\n    this._applyManipulationCallback(selector, manipulationCallBack);\n  }\n\n  _applyManipulationCallback(selector, callBack) {\n    if (isElement(selector)) {\n      callBack(selector);\n    } else {\n      SelectorEngine.find(selector, this._element).forEach(callBack);\n    }\n  }\n\n  isOverflowing() {\n    return this.getWidth() > 0;\n  }\n\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): util/backdrop.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\nconst Default$6 = {\n  isVisible: true,\n  // if false, we use the backdrop helper without adding any element to the dom\n  isAnimated: false,\n  rootElement: 'body',\n  // give the choice to place backdrop under different elements\n  clickCallback: null\n};\nconst DefaultType$6 = {\n  isVisible: 'boolean',\n  isAnimated: 'boolean',\n  rootElement: '(element|string)',\n  clickCallback: '(function|null)'\n};\nconst NAME$7 = 'backdrop';\nconst CLASS_NAME_BACKDROP = 'modal-backdrop';\nconst CLASS_NAME_FADE$5 = 'fade';\nconst CLASS_NAME_SHOW$6 = 'show';\nconst EVENT_MOUSEDOWN = `mousedown.bs.${NAME$7}`;\n\nclass Backdrop {\n  constructor(config) {\n    this._config = this._getConfig(config);\n    this._isAppended = false;\n    this._element = null;\n  }\n\n  show(callback) {\n    if (!this._config.isVisible) {\n      execute(callback);\n      return;\n    }\n\n    this._append();\n\n    if (this._config.isAnimated) {\n      reflow(this._getElement());\n    }\n\n    this._getElement().classList.add(CLASS_NAME_SHOW$6);\n\n    this._emulateAnimation(() => {\n      execute(callback);\n    });\n  }\n\n  hide(callback) {\n    if (!this._config.isVisible) {\n      execute(callback);\n      return;\n    }\n\n    this._getElement().classList.remove(CLASS_NAME_SHOW$6);\n\n    this._emulateAnimation(() => {\n      this.dispose();\n      execute(callback);\n    });\n  } // Private\n\n\n  _getElement() {\n    if (!this._element) {\n      const backdrop = document.createElement('div');\n      backdrop.className = CLASS_NAME_BACKDROP;\n\n      if (this._config.isAnimated) {\n        backdrop.classList.add(CLASS_NAME_FADE$5);\n      }\n\n      this._element = backdrop;\n    }\n\n    return this._element;\n  }\n\n  _getConfig(config) {\n    config = { ...Default$6,\n      ...(typeof config === 'object' ? config : {})\n    }; // use getElement() with the default \"body\" to get a fresh Element on each instantiation\n\n    config.rootElement = getElement(config.rootElement);\n    typeCheckConfig(NAME$7, config, DefaultType$6);\n    return config;\n  }\n\n  _append() {\n    if (this._isAppended) {\n      return;\n    }\n\n    this._config.rootElement.appendChild(this._getElement());\n\n    EventHandler.on(this._getElement(), EVENT_MOUSEDOWN, () => {\n      execute(this._config.clickCallback);\n    });\n    this._isAppended = true;\n  }\n\n  dispose() {\n    if (!this._isAppended) {\n      return;\n    }\n\n    EventHandler.off(this._element, EVENT_MOUSEDOWN);\n\n    this._element.remove();\n\n    this._isAppended = false;\n  }\n\n  _emulateAnimation(callback) {\n    executeAfterTransition(callback, this._getElement(), this._config.isAnimated);\n  }\n\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): modal.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$6 = 'modal';\nconst DATA_KEY$6 = 'bs.modal';\nconst EVENT_KEY$6 = `.${DATA_KEY$6}`;\nconst DATA_API_KEY$3 = '.data-api';\nconst ESCAPE_KEY$1 = 'Escape';\nconst Default$5 = {\n  backdrop: true,\n  keyboard: true,\n  focus: true\n};\nconst DefaultType$5 = {\n  backdrop: '(boolean|string)',\n  keyboard: 'boolean',\n  focus: 'boolean'\n};\nconst EVENT_HIDE$3 = `hide${EVENT_KEY$6}`;\nconst EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY$6}`;\nconst EVENT_HIDDEN$3 = `hidden${EVENT_KEY$6}`;\nconst EVENT_SHOW$3 = `show${EVENT_KEY$6}`;\nconst EVENT_SHOWN$3 = `shown${EVENT_KEY$6}`;\nconst EVENT_FOCUSIN$2 = `focusin${EVENT_KEY$6}`;\nconst EVENT_RESIZE = `resize${EVENT_KEY$6}`;\nconst EVENT_CLICK_DISMISS$2 = `click.dismiss${EVENT_KEY$6}`;\nconst EVENT_KEYDOWN_DISMISS$1 = `keydown.dismiss${EVENT_KEY$6}`;\nconst EVENT_MOUSEUP_DISMISS = `mouseup.dismiss${EVENT_KEY$6}`;\nconst EVENT_MOUSEDOWN_DISMISS = `mousedown.dismiss${EVENT_KEY$6}`;\nconst EVENT_CLICK_DATA_API$2 = `click${EVENT_KEY$6}${DATA_API_KEY$3}`;\nconst CLASS_NAME_OPEN = 'modal-open';\nconst CLASS_NAME_FADE$4 = 'fade';\nconst CLASS_NAME_SHOW$5 = 'show';\nconst CLASS_NAME_STATIC = 'modal-static';\nconst SELECTOR_DIALOG = '.modal-dialog';\nconst SELECTOR_MODAL_BODY = '.modal-body';\nconst SELECTOR_DATA_TOGGLE$2 = '[data-bs-toggle=\"modal\"]';\nconst SELECTOR_DATA_DISMISS$2 = '[data-bs-dismiss=\"modal\"]';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Modal extends BaseComponent {\n  constructor(element, config) {\n    super(element);\n    this._config = this._getConfig(config);\n    this._dialog = SelectorEngine.findOne(SELECTOR_DIALOG, this._element);\n    this._backdrop = this._initializeBackDrop();\n    this._isShown = false;\n    this._ignoreBackdropClick = false;\n    this._isTransitioning = false;\n    this._scrollBar = new ScrollBarHelper();\n  } // Getters\n\n\n  static get Default() {\n    return Default$5;\n  }\n\n  static get NAME() {\n    return NAME$6;\n  } // Public\n\n\n  toggle(relatedTarget) {\n    return this._isShown ? this.hide() : this.show(relatedTarget);\n  }\n\n  show(relatedTarget) {\n    if (this._isShown || this._isTransitioning) {\n      return;\n    }\n\n    const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$3, {\n      relatedTarget\n    });\n\n    if (showEvent.defaultPrevented) {\n      return;\n    }\n\n    this._isShown = true;\n\n    if (this._isAnimated()) {\n      this._isTransitioning = true;\n    }\n\n    this._scrollBar.hide();\n\n    document.body.classList.add(CLASS_NAME_OPEN);\n\n    this._adjustDialog();\n\n    this._setEscapeEvent();\n\n    this._setResizeEvent();\n\n    EventHandler.on(this._element, EVENT_CLICK_DISMISS$2, SELECTOR_DATA_DISMISS$2, event => this.hide(event));\n    EventHandler.on(this._dialog, EVENT_MOUSEDOWN_DISMISS, () => {\n      EventHandler.one(this._element, EVENT_MOUSEUP_DISMISS, event => {\n        if (event.target === this._element) {\n          this._ignoreBackdropClick = true;\n        }\n      });\n    });\n\n    this._showBackdrop(() => this._showElement(relatedTarget));\n  }\n\n  hide(event) {\n    if (event && ['A', 'AREA'].includes(event.target.tagName)) {\n      event.preventDefault();\n    }\n\n    if (!this._isShown || this._isTransitioning) {\n      return;\n    }\n\n    const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$3);\n\n    if (hideEvent.defaultPrevented) {\n      return;\n    }\n\n    this._isShown = false;\n\n    const isAnimated = this._isAnimated();\n\n    if (isAnimated) {\n      this._isTransitioning = true;\n    }\n\n    this._setEscapeEvent();\n\n    this._setResizeEvent();\n\n    EventHandler.off(document, EVENT_FOCUSIN$2);\n\n    this._element.classList.remove(CLASS_NAME_SHOW$5);\n\n    EventHandler.off(this._element, EVENT_CLICK_DISMISS$2);\n    EventHandler.off(this._dialog, EVENT_MOUSEDOWN_DISMISS);\n\n    this._queueCallback(() => this._hideModal(), this._element, isAnimated);\n  }\n\n  dispose() {\n    [window, this._dialog].forEach(htmlElement => EventHandler.off(htmlElement, EVENT_KEY$6));\n\n    this._backdrop.dispose();\n\n    super.dispose();\n    /**\n     * `document` has 2 events `EVENT_FOCUSIN` and `EVENT_CLICK_DATA_API`\n     * Do not move `document` in `htmlElements` array\n     * It will remove `EVENT_CLICK_DATA_API` event that should remain\n     */\n\n    EventHandler.off(document, EVENT_FOCUSIN$2);\n  }\n\n  handleUpdate() {\n    this._adjustDialog();\n  } // Private\n\n\n  _initializeBackDrop() {\n    return new Backdrop({\n      isVisible: Boolean(this._config.backdrop),\n      // 'static' option will be translated to true, and booleans will keep their value\n      isAnimated: this._isAnimated()\n    });\n  }\n\n  _getConfig(config) {\n    config = { ...Default$5,\n      ...Manipulator.getDataAttributes(this._element),\n      ...(typeof config === 'object' ? config : {})\n    };\n    typeCheckConfig(NAME$6, config, DefaultType$5);\n    return config;\n  }\n\n  _showElement(relatedTarget) {\n    const isAnimated = this._isAnimated();\n\n    const modalBody = SelectorEngine.findOne(SELECTOR_MODAL_BODY, this._dialog);\n\n    if (!this._element.parentNode || this._element.parentNode.nodeType !== Node.ELEMENT_NODE) {\n      // Don't move modal's DOM position\n      document.body.appendChild(this._element);\n    }\n\n    this._element.style.display = 'block';\n\n    this._element.removeAttribute('aria-hidden');\n\n    this._element.setAttribute('aria-modal', true);\n\n    this._element.setAttribute('role', 'dialog');\n\n    this._element.scrollTop = 0;\n\n    if (modalBody) {\n      modalBody.scrollTop = 0;\n    }\n\n    if (isAnimated) {\n      reflow(this._element);\n    }\n\n    this._element.classList.add(CLASS_NAME_SHOW$5);\n\n    if (this._config.focus) {\n      this._enforceFocus();\n    }\n\n    const transitionComplete = () => {\n      if (this._config.focus) {\n        this._element.focus();\n      }\n\n      this._isTransitioning = false;\n      EventHandler.trigger(this._element, EVENT_SHOWN$3, {\n        relatedTarget\n      });\n    };\n\n    this._queueCallback(transitionComplete, this._dialog, isAnimated);\n  }\n\n  _enforceFocus() {\n    EventHandler.off(document, EVENT_FOCUSIN$2); // guard against infinite focus loop\n\n    EventHandler.on(document, EVENT_FOCUSIN$2, event => {\n      if (document !== event.target && this._element !== event.target && !this._element.contains(event.target)) {\n        this._element.focus();\n      }\n    });\n  }\n\n  _setEscapeEvent() {\n    if (this._isShown) {\n      EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS$1, event => {\n        if (this._config.keyboard && event.key === ESCAPE_KEY$1) {\n          event.preventDefault();\n          this.hide();\n        } else if (!this._config.keyboard && event.key === ESCAPE_KEY$1) {\n          this._triggerBackdropTransition();\n        }\n      });\n    } else {\n      EventHandler.off(this._element, EVENT_KEYDOWN_DISMISS$1);\n    }\n  }\n\n  _setResizeEvent() {\n    if (this._isShown) {\n      EventHandler.on(window, EVENT_RESIZE, () => this._adjustDialog());\n    } else {\n      EventHandler.off(window, EVENT_RESIZE);\n    }\n  }\n\n  _hideModal() {\n    this._element.style.display = 'none';\n\n    this._element.setAttribute('aria-hidden', true);\n\n    this._element.removeAttribute('aria-modal');\n\n    this._element.removeAttribute('role');\n\n    this._isTransitioning = false;\n\n    this._backdrop.hide(() => {\n      document.body.classList.remove(CLASS_NAME_OPEN);\n\n      this._resetAdjustments();\n\n      this._scrollBar.reset();\n\n      EventHandler.trigger(this._element, EVENT_HIDDEN$3);\n    });\n  }\n\n  _showBackdrop(callback) {\n    EventHandler.on(this._element, EVENT_CLICK_DISMISS$2, event => {\n      if (this._ignoreBackdropClick) {\n        this._ignoreBackdropClick = false;\n        return;\n      }\n\n      if (event.target !== event.currentTarget) {\n        return;\n      }\n\n      if (this._config.backdrop === true) {\n        this.hide();\n      } else if (this._config.backdrop === 'static') {\n        this._triggerBackdropTransition();\n      }\n    });\n\n    this._backdrop.show(callback);\n  }\n\n  _isAnimated() {\n    return this._element.classList.contains(CLASS_NAME_FADE$4);\n  }\n\n  _triggerBackdropTransition() {\n    const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED);\n\n    if (hideEvent.defaultPrevented) {\n      return;\n    }\n\n    const {\n      classList,\n      scrollHeight,\n      style\n    } = this._element;\n    const isModalOverflowing = scrollHeight > document.documentElement.clientHeight; // return if the following background transition hasn't yet completed\n\n    if (!isModalOverflowing && style.overflowY === 'hidden' || classList.contains(CLASS_NAME_STATIC)) {\n      return;\n    }\n\n    if (!isModalOverflowing) {\n      style.overflowY = 'hidden';\n    }\n\n    classList.add(CLASS_NAME_STATIC);\n\n    this._queueCallback(() => {\n      classList.remove(CLASS_NAME_STATIC);\n\n      if (!isModalOverflowing) {\n        this._queueCallback(() => {\n          style.overflowY = '';\n        }, this._dialog);\n      }\n    }, this._dialog);\n\n    this._element.focus();\n  } // ----------------------------------------------------------------------\n  // the following methods are used to handle overflowing modals\n  // ----------------------------------------------------------------------\n\n\n  _adjustDialog() {\n    const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;\n\n    const scrollbarWidth = this._scrollBar.getWidth();\n\n    const isBodyOverflowing = scrollbarWidth > 0;\n\n    if (!isBodyOverflowing && isModalOverflowing && !isRTL() || isBodyOverflowing && !isModalOverflowing && isRTL()) {\n      this._element.style.paddingLeft = `${scrollbarWidth}px`;\n    }\n\n    if (isBodyOverflowing && !isModalOverflowing && !isRTL() || !isBodyOverflowing && isModalOverflowing && isRTL()) {\n      this._element.style.paddingRight = `${scrollbarWidth}px`;\n    }\n  }\n\n  _resetAdjustments() {\n    this._element.style.paddingLeft = '';\n    this._element.style.paddingRight = '';\n  } // Static\n\n\n  static jQueryInterface(config, relatedTarget) {\n    return this.each(function () {\n      const data = Modal.getOrCreateInstance(this, config);\n\n      if (typeof config !== 'string') {\n        return;\n      }\n\n      if (typeof data[config] === 'undefined') {\n        throw new TypeError(`No method named \"${config}\"`);\n      }\n\n      data[config](relatedTarget);\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$2, SELECTOR_DATA_TOGGLE$2, function (event) {\n  const target = getElementFromSelector(this);\n\n  if (['A', 'AREA'].includes(this.tagName)) {\n    event.preventDefault();\n  }\n\n  EventHandler.one(target, EVENT_SHOW$3, showEvent => {\n    if (showEvent.defaultPrevented) {\n      // only register focus restorer if modal will actually get shown\n      return;\n    }\n\n    EventHandler.one(target, EVENT_HIDDEN$3, () => {\n      if (isVisible(this)) {\n        this.focus();\n      }\n    });\n  });\n  const data = Modal.getOrCreateInstance(target);\n  data.toggle(this);\n});\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Modal to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Modal);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): offcanvas.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$5 = 'offcanvas';\nconst DATA_KEY$5 = 'bs.offcanvas';\nconst EVENT_KEY$5 = `.${DATA_KEY$5}`;\nconst DATA_API_KEY$2 = '.data-api';\nconst EVENT_LOAD_DATA_API$1 = `load${EVENT_KEY$5}${DATA_API_KEY$2}`;\nconst ESCAPE_KEY = 'Escape';\nconst Default$4 = {\n  backdrop: true,\n  keyboard: true,\n  scroll: false\n};\nconst DefaultType$4 = {\n  backdrop: 'boolean',\n  keyboard: 'boolean',\n  scroll: 'boolean'\n};\nconst CLASS_NAME_SHOW$4 = 'show';\nconst OPEN_SELECTOR = '.offcanvas.show';\nconst EVENT_SHOW$2 = `show${EVENT_KEY$5}`;\nconst EVENT_SHOWN$2 = `shown${EVENT_KEY$5}`;\nconst EVENT_HIDE$2 = `hide${EVENT_KEY$5}`;\nconst EVENT_HIDDEN$2 = `hidden${EVENT_KEY$5}`;\nconst EVENT_FOCUSIN$1 = `focusin${EVENT_KEY$5}`;\nconst EVENT_CLICK_DATA_API$1 = `click${EVENT_KEY$5}${DATA_API_KEY$2}`;\nconst EVENT_CLICK_DISMISS$1 = `click.dismiss${EVENT_KEY$5}`;\nconst EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY$5}`;\nconst SELECTOR_DATA_DISMISS$1 = '[data-bs-dismiss=\"offcanvas\"]';\nconst SELECTOR_DATA_TOGGLE$1 = '[data-bs-toggle=\"offcanvas\"]';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Offcanvas extends BaseComponent {\n  constructor(element, config) {\n    super(element);\n    this._config = this._getConfig(config);\n    this._isShown = false;\n    this._backdrop = this._initializeBackDrop();\n\n    this._addEventListeners();\n  } // Getters\n\n\n  static get NAME() {\n    return NAME$5;\n  }\n\n  static get Default() {\n    return Default$4;\n  } // Public\n\n\n  toggle(relatedTarget) {\n    return this._isShown ? this.hide() : this.show(relatedTarget);\n  }\n\n  show(relatedTarget) {\n    if (this._isShown) {\n      return;\n    }\n\n    const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$2, {\n      relatedTarget\n    });\n\n    if (showEvent.defaultPrevented) {\n      return;\n    }\n\n    this._isShown = true;\n    this._element.style.visibility = 'visible';\n\n    this._backdrop.show();\n\n    if (!this._config.scroll) {\n      new ScrollBarHelper().hide();\n\n      this._enforceFocusOnElement(this._element);\n    }\n\n    this._element.removeAttribute('aria-hidden');\n\n    this._element.setAttribute('aria-modal', true);\n\n    this._element.setAttribute('role', 'dialog');\n\n    this._element.classList.add(CLASS_NAME_SHOW$4);\n\n    const completeCallBack = () => {\n      EventHandler.trigger(this._element, EVENT_SHOWN$2, {\n        relatedTarget\n      });\n    };\n\n    this._queueCallback(completeCallBack, this._element, true);\n  }\n\n  hide() {\n    if (!this._isShown) {\n      return;\n    }\n\n    const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$2);\n\n    if (hideEvent.defaultPrevented) {\n      return;\n    }\n\n    EventHandler.off(document, EVENT_FOCUSIN$1);\n\n    this._element.blur();\n\n    this._isShown = false;\n\n    this._element.classList.remove(CLASS_NAME_SHOW$4);\n\n    this._backdrop.hide();\n\n    const completeCallback = () => {\n      this._element.setAttribute('aria-hidden', true);\n\n      this._element.removeAttribute('aria-modal');\n\n      this._element.removeAttribute('role');\n\n      this._element.style.visibility = 'hidden';\n\n      if (!this._config.scroll) {\n        new ScrollBarHelper().reset();\n      }\n\n      EventHandler.trigger(this._element, EVENT_HIDDEN$2);\n    };\n\n    this._queueCallback(completeCallback, this._element, true);\n  }\n\n  dispose() {\n    this._backdrop.dispose();\n\n    super.dispose();\n    EventHandler.off(document, EVENT_FOCUSIN$1);\n  } // Private\n\n\n  _getConfig(config) {\n    config = { ...Default$4,\n      ...Manipulator.getDataAttributes(this._element),\n      ...(typeof config === 'object' ? config : {})\n    };\n    typeCheckConfig(NAME$5, config, DefaultType$4);\n    return config;\n  }\n\n  _initializeBackDrop() {\n    return new Backdrop({\n      isVisible: this._config.backdrop,\n      isAnimated: true,\n      rootElement: this._element.parentNode,\n      clickCallback: () => this.hide()\n    });\n  }\n\n  _enforceFocusOnElement(element) {\n    EventHandler.off(document, EVENT_FOCUSIN$1); // guard against infinite focus loop\n\n    EventHandler.on(document, EVENT_FOCUSIN$1, event => {\n      if (document !== event.target && element !== event.target && !element.contains(event.target)) {\n        element.focus();\n      }\n    });\n    element.focus();\n  }\n\n  _addEventListeners() {\n    EventHandler.on(this._element, EVENT_CLICK_DISMISS$1, SELECTOR_DATA_DISMISS$1, () => this.hide());\n    EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS, event => {\n      if (this._config.keyboard && event.key === ESCAPE_KEY) {\n        this.hide();\n      }\n    });\n  } // Static\n\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Offcanvas.getOrCreateInstance(this, config);\n\n      if (typeof config !== 'string') {\n        return;\n      }\n\n      if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n        throw new TypeError(`No method named \"${config}\"`);\n      }\n\n      data[config](this);\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$1, SELECTOR_DATA_TOGGLE$1, function (event) {\n  const target = getElementFromSelector(this);\n\n  if (['A', 'AREA'].includes(this.tagName)) {\n    event.preventDefault();\n  }\n\n  if (isDisabled(this)) {\n    return;\n  }\n\n  EventHandler.one(target, EVENT_HIDDEN$2, () => {\n    // focus on trigger when it is closed\n    if (isVisible(this)) {\n      this.focus();\n    }\n  }); // avoid conflict when clicking a toggler of an offcanvas, while another is open\n\n  const allReadyOpen = SelectorEngine.findOne(OPEN_SELECTOR);\n\n  if (allReadyOpen && allReadyOpen !== target) {\n    Offcanvas.getInstance(allReadyOpen).hide();\n  }\n\n  const data = Offcanvas.getOrCreateInstance(target);\n  data.toggle(this);\n});\nEventHandler.on(window, EVENT_LOAD_DATA_API$1, () => SelectorEngine.find(OPEN_SELECTOR).forEach(el => Offcanvas.getOrCreateInstance(el).show()));\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\ndefineJQueryPlugin(Offcanvas);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): util/sanitizer.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\nconst uriAttrs = new Set(['background', 'cite', 'href', 'itemtype', 'longdesc', 'poster', 'src', 'xlink:href']);\nconst ARIA_ATTRIBUTE_PATTERN = /^aria-[\\w-]*$/i;\n/**\n * A pattern that recognizes a commonly useful subset of URLs that are safe.\n *\n * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts\n */\n\nconst SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file):|[^#&/:?]*(?:[#/?]|$))/i;\n/**\n * A pattern that matches safe data URLs. Only matches image, video and audio types.\n *\n * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts\n */\n\nconst DATA_URL_PATTERN = /^data:(?:image\\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\\/(?:mpeg|mp4|ogg|webm)|audio\\/(?:mp3|oga|ogg|opus));base64,[\\d+/a-z]+=*$/i;\n\nconst allowedAttribute = (attr, allowedAttributeList) => {\n  const attrName = attr.nodeName.toLowerCase();\n\n  if (allowedAttributeList.includes(attrName)) {\n    if (uriAttrs.has(attrName)) {\n      return Boolean(SAFE_URL_PATTERN.test(attr.nodeValue) || DATA_URL_PATTERN.test(attr.nodeValue));\n    }\n\n    return true;\n  }\n\n  const regExp = allowedAttributeList.filter(attrRegex => attrRegex instanceof RegExp); // Check if a regular expression validates the attribute.\n\n  for (let i = 0, len = regExp.length; i < len; i++) {\n    if (regExp[i].test(attrName)) {\n      return true;\n    }\n  }\n\n  return false;\n};\n\nconst DefaultAllowlist = {\n  // Global attributes allowed on any supplied element below.\n  '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],\n  a: ['target', 'href', 'title', 'rel'],\n  area: [],\n  b: [],\n  br: [],\n  col: [],\n  code: [],\n  div: [],\n  em: [],\n  hr: [],\n  h1: [],\n  h2: [],\n  h3: [],\n  h4: [],\n  h5: [],\n  h6: [],\n  i: [],\n  img: ['src', 'srcset', 'alt', 'title', 'width', 'height'],\n  li: [],\n  ol: [],\n  p: [],\n  pre: [],\n  s: [],\n  small: [],\n  span: [],\n  sub: [],\n  sup: [],\n  strong: [],\n  u: [],\n  ul: []\n};\nfunction sanitizeHtml(unsafeHtml, allowList, sanitizeFn) {\n  if (!unsafeHtml.length) {\n    return unsafeHtml;\n  }\n\n  if (sanitizeFn && typeof sanitizeFn === 'function') {\n    return sanitizeFn(unsafeHtml);\n  }\n\n  const domParser = new window.DOMParser();\n  const createdDocument = domParser.parseFromString(unsafeHtml, 'text/html');\n  const allowlistKeys = Object.keys(allowList);\n  const elements = [].concat(...createdDocument.body.querySelectorAll('*'));\n\n  for (let i = 0, len = elements.length; i < len; i++) {\n    const el = elements[i];\n    const elName = el.nodeName.toLowerCase();\n\n    if (!allowlistKeys.includes(elName)) {\n      el.remove();\n      continue;\n    }\n\n    const attributeList = [].concat(...el.attributes);\n    const allowedAttributes = [].concat(allowList['*'] || [], allowList[elName] || []);\n    attributeList.forEach(attr => {\n      if (!allowedAttribute(attr, allowedAttributes)) {\n        el.removeAttribute(attr.nodeName);\n      }\n    });\n  }\n\n  return createdDocument.body.innerHTML;\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): tooltip.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$4 = 'tooltip';\nconst DATA_KEY$4 = 'bs.tooltip';\nconst EVENT_KEY$4 = `.${DATA_KEY$4}`;\nconst CLASS_PREFIX$1 = 'bs-tooltip';\nconst BSCLS_PREFIX_REGEX$1 = new RegExp(`(^|\\\\s)${CLASS_PREFIX$1}\\\\S+`, 'g');\nconst DISALLOWED_ATTRIBUTES = new Set(['sanitize', 'allowList', 'sanitizeFn']);\nconst DefaultType$3 = {\n  animation: 'boolean',\n  template: 'string',\n  title: '(string|element|function)',\n  trigger: 'string',\n  delay: '(number|object)',\n  html: 'boolean',\n  selector: '(string|boolean)',\n  placement: '(string|function)',\n  offset: '(array|string|function)',\n  container: '(string|element|boolean)',\n  fallbackPlacements: 'array',\n  boundary: '(string|element)',\n  customClass: '(string|function)',\n  sanitize: 'boolean',\n  sanitizeFn: '(null|function)',\n  allowList: 'object',\n  popperConfig: '(null|object|function)'\n};\nconst AttachmentMap = {\n  AUTO: 'auto',\n  TOP: 'top',\n  RIGHT: isRTL() ? 'left' : 'right',\n  BOTTOM: 'bottom',\n  LEFT: isRTL() ? 'right' : 'left'\n};\nconst Default$3 = {\n  animation: true,\n  template: '<div class=\"tooltip\" role=\"tooltip\">' + '<div class=\"tooltip-arrow\"></div>' + '<div class=\"tooltip-inner\"></div>' + '</div>',\n  trigger: 'hover focus',\n  title: '',\n  delay: 0,\n  html: false,\n  selector: false,\n  placement: 'top',\n  offset: [0, 0],\n  container: false,\n  fallbackPlacements: ['top', 'right', 'bottom', 'left'],\n  boundary: 'clippingParents',\n  customClass: '',\n  sanitize: true,\n  sanitizeFn: null,\n  allowList: DefaultAllowlist,\n  popperConfig: null\n};\nconst Event$2 = {\n  HIDE: `hide${EVENT_KEY$4}`,\n  HIDDEN: `hidden${EVENT_KEY$4}`,\n  SHOW: `show${EVENT_KEY$4}`,\n  SHOWN: `shown${EVENT_KEY$4}`,\n  INSERTED: `inserted${EVENT_KEY$4}`,\n  CLICK: `click${EVENT_KEY$4}`,\n  FOCUSIN: `focusin${EVENT_KEY$4}`,\n  FOCUSOUT: `focusout${EVENT_KEY$4}`,\n  MOUSEENTER: `mouseenter${EVENT_KEY$4}`,\n  MOUSELEAVE: `mouseleave${EVENT_KEY$4}`\n};\nconst CLASS_NAME_FADE$3 = 'fade';\nconst CLASS_NAME_MODAL = 'modal';\nconst CLASS_NAME_SHOW$3 = 'show';\nconst HOVER_STATE_SHOW = 'show';\nconst HOVER_STATE_OUT = 'out';\nconst SELECTOR_TOOLTIP_INNER = '.tooltip-inner';\nconst TRIGGER_HOVER = 'hover';\nconst TRIGGER_FOCUS = 'focus';\nconst TRIGGER_CLICK = 'click';\nconst TRIGGER_MANUAL = 'manual';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Tooltip extends BaseComponent {\n  constructor(element, config) {\n    if (typeof Popper === 'undefined') {\n      throw new TypeError('Bootstrap\\'s tooltips require Popper (https://popper.js.org)');\n    }\n\n    super(element); // private\n\n    this._isEnabled = true;\n    this._timeout = 0;\n    this._hoverState = '';\n    this._activeTrigger = {};\n    this._popper = null; // Protected\n\n    this._config = this._getConfig(config);\n    this.tip = null;\n\n    this._setListeners();\n  } // Getters\n\n\n  static get Default() {\n    return Default$3;\n  }\n\n  static get NAME() {\n    return NAME$4;\n  }\n\n  static get Event() {\n    return Event$2;\n  }\n\n  static get DefaultType() {\n    return DefaultType$3;\n  } // Public\n\n\n  enable() {\n    this._isEnabled = true;\n  }\n\n  disable() {\n    this._isEnabled = false;\n  }\n\n  toggleEnabled() {\n    this._isEnabled = !this._isEnabled;\n  }\n\n  toggle(event) {\n    if (!this._isEnabled) {\n      return;\n    }\n\n    if (event) {\n      const context = this._initializeOnDelegatedTarget(event);\n\n      context._activeTrigger.click = !context._activeTrigger.click;\n\n      if (context._isWithActiveTrigger()) {\n        context._enter(null, context);\n      } else {\n        context._leave(null, context);\n      }\n    } else {\n      if (this.getTipElement().classList.contains(CLASS_NAME_SHOW$3)) {\n        this._leave(null, this);\n\n        return;\n      }\n\n      this._enter(null, this);\n    }\n  }\n\n  dispose() {\n    clearTimeout(this._timeout);\n    EventHandler.off(this._element.closest(`.${CLASS_NAME_MODAL}`), 'hide.bs.modal', this._hideModalHandler);\n\n    if (this.tip) {\n      this.tip.remove();\n    }\n\n    if (this._popper) {\n      this._popper.destroy();\n    }\n\n    super.dispose();\n  }\n\n  show() {\n    if (this._element.style.display === 'none') {\n      throw new Error('Please use show on visible elements');\n    }\n\n    if (!(this.isWithContent() && this._isEnabled)) {\n      return;\n    }\n\n    const showEvent = EventHandler.trigger(this._element, this.constructor.Event.SHOW);\n    const shadowRoot = findShadowRoot(this._element);\n    const isInTheDom = shadowRoot === null ? this._element.ownerDocument.documentElement.contains(this._element) : shadowRoot.contains(this._element);\n\n    if (showEvent.defaultPrevented || !isInTheDom) {\n      return;\n    }\n\n    const tip = this.getTipElement();\n    const tipId = getUID(this.constructor.NAME);\n    tip.setAttribute('id', tipId);\n\n    this._element.setAttribute('aria-describedby', tipId);\n\n    this.setContent();\n\n    if (this._config.animation) {\n      tip.classList.add(CLASS_NAME_FADE$3);\n    }\n\n    const placement = typeof this._config.placement === 'function' ? this._config.placement.call(this, tip, this._element) : this._config.placement;\n\n    const attachment = this._getAttachment(placement);\n\n    this._addAttachmentClass(attachment);\n\n    const {\n      container\n    } = this._config;\n    Data.set(tip, this.constructor.DATA_KEY, this);\n\n    if (!this._element.ownerDocument.documentElement.contains(this.tip)) {\n      container.appendChild(tip);\n      EventHandler.trigger(this._element, this.constructor.Event.INSERTED);\n    }\n\n    if (this._popper) {\n      this._popper.update();\n    } else {\n      this._popper = Popper.createPopper(this._element, tip, this._getPopperConfig(attachment));\n    }\n\n    tip.classList.add(CLASS_NAME_SHOW$3);\n    const customClass = typeof this._config.customClass === 'function' ? this._config.customClass() : this._config.customClass;\n\n    if (customClass) {\n      tip.classList.add(...customClass.split(' '));\n    } // If this is a touch-enabled device we add extra\n    // empty mouseover listeners to the body's immediate children;\n    // only needed because of broken event delegation on iOS\n    // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n\n\n    if ('ontouchstart' in document.documentElement) {\n      [].concat(...document.body.children).forEach(element => {\n        EventHandler.on(element, 'mouseover', noop);\n      });\n    }\n\n    const complete = () => {\n      const prevHoverState = this._hoverState;\n      this._hoverState = null;\n      EventHandler.trigger(this._element, this.constructor.Event.SHOWN);\n\n      if (prevHoverState === HOVER_STATE_OUT) {\n        this._leave(null, this);\n      }\n    };\n\n    const isAnimated = this.tip.classList.contains(CLASS_NAME_FADE$3);\n\n    this._queueCallback(complete, this.tip, isAnimated);\n  }\n\n  hide() {\n    if (!this._popper) {\n      return;\n    }\n\n    const tip = this.getTipElement();\n\n    const complete = () => {\n      if (this._isWithActiveTrigger()) {\n        return;\n      }\n\n      if (this._hoverState !== HOVER_STATE_SHOW) {\n        tip.remove();\n      }\n\n      this._cleanTipClass();\n\n      this._element.removeAttribute('aria-describedby');\n\n      EventHandler.trigger(this._element, this.constructor.Event.HIDDEN);\n\n      if (this._popper) {\n        this._popper.destroy();\n\n        this._popper = null;\n      }\n    };\n\n    const hideEvent = EventHandler.trigger(this._element, this.constructor.Event.HIDE);\n\n    if (hideEvent.defaultPrevented) {\n      return;\n    }\n\n    tip.classList.remove(CLASS_NAME_SHOW$3); // If this is a touch-enabled device we remove the extra\n    // empty mouseover listeners we added for iOS support\n\n    if ('ontouchstart' in document.documentElement) {\n      [].concat(...document.body.children).forEach(element => EventHandler.off(element, 'mouseover', noop));\n    }\n\n    this._activeTrigger[TRIGGER_CLICK] = false;\n    this._activeTrigger[TRIGGER_FOCUS] = false;\n    this._activeTrigger[TRIGGER_HOVER] = false;\n    const isAnimated = this.tip.classList.contains(CLASS_NAME_FADE$3);\n\n    this._queueCallback(complete, this.tip, isAnimated);\n\n    this._hoverState = '';\n  }\n\n  update() {\n    if (this._popper !== null) {\n      this._popper.update();\n    }\n  } // Protected\n\n\n  isWithContent() {\n    return Boolean(this.getTitle());\n  }\n\n  getTipElement() {\n    if (this.tip) {\n      return this.tip;\n    }\n\n    const element = document.createElement('div');\n    element.innerHTML = this._config.template;\n    this.tip = element.children[0];\n    return this.tip;\n  }\n\n  setContent() {\n    const tip = this.getTipElement();\n    this.setElementContent(SelectorEngine.findOne(SELECTOR_TOOLTIP_INNER, tip), this.getTitle());\n    tip.classList.remove(CLASS_NAME_FADE$3, CLASS_NAME_SHOW$3);\n  }\n\n  setElementContent(element, content) {\n    if (element === null) {\n      return;\n    }\n\n    if (isElement(content)) {\n      content = getElement(content); // content is a DOM node or a jQuery\n\n      if (this._config.html) {\n        if (content.parentNode !== element) {\n          element.innerHTML = '';\n          element.appendChild(content);\n        }\n      } else {\n        element.textContent = content.textContent;\n      }\n\n      return;\n    }\n\n    if (this._config.html) {\n      if (this._config.sanitize) {\n        content = sanitizeHtml(content, this._config.allowList, this._config.sanitizeFn);\n      }\n\n      element.innerHTML = content;\n    } else {\n      element.textContent = content;\n    }\n  }\n\n  getTitle() {\n    let title = this._element.getAttribute('data-bs-original-title');\n\n    if (!title) {\n      title = typeof this._config.title === 'function' ? this._config.title.call(this._element) : this._config.title;\n    }\n\n    return title;\n  }\n\n  updateAttachment(attachment) {\n    if (attachment === 'right') {\n      return 'end';\n    }\n\n    if (attachment === 'left') {\n      return 'start';\n    }\n\n    return attachment;\n  } // Private\n\n\n  _initializeOnDelegatedTarget(event, context) {\n    const dataKey = this.constructor.DATA_KEY;\n    context = context || Data.get(event.delegateTarget, dataKey);\n\n    if (!context) {\n      context = new this.constructor(event.delegateTarget, this._getDelegateConfig());\n      Data.set(event.delegateTarget, dataKey, context);\n    }\n\n    return context;\n  }\n\n  _getOffset() {\n    const {\n      offset\n    } = this._config;\n\n    if (typeof offset === 'string') {\n      return offset.split(',').map(val => Number.parseInt(val, 10));\n    }\n\n    if (typeof offset === 'function') {\n      return popperData => offset(popperData, this._element);\n    }\n\n    return offset;\n  }\n\n  _getPopperConfig(attachment) {\n    const defaultBsPopperConfig = {\n      placement: attachment,\n      modifiers: [{\n        name: 'flip',\n        options: {\n          fallbackPlacements: this._config.fallbackPlacements\n        }\n      }, {\n        name: 'offset',\n        options: {\n          offset: this._getOffset()\n        }\n      }, {\n        name: 'preventOverflow',\n        options: {\n          boundary: this._config.boundary\n        }\n      }, {\n        name: 'arrow',\n        options: {\n          element: `.${this.constructor.NAME}-arrow`\n        }\n      }, {\n        name: 'onChange',\n        enabled: true,\n        phase: 'afterWrite',\n        fn: data => this._handlePopperPlacementChange(data)\n      }],\n      onFirstUpdate: data => {\n        if (data.options.placement !== data.placement) {\n          this._handlePopperPlacementChange(data);\n        }\n      }\n    };\n    return { ...defaultBsPopperConfig,\n      ...(typeof this._config.popperConfig === 'function' ? this._config.popperConfig(defaultBsPopperConfig) : this._config.popperConfig)\n    };\n  }\n\n  _addAttachmentClass(attachment) {\n    this.getTipElement().classList.add(`${CLASS_PREFIX$1}-${this.updateAttachment(attachment)}`);\n  }\n\n  _getAttachment(placement) {\n    return AttachmentMap[placement.toUpperCase()];\n  }\n\n  _setListeners() {\n    const triggers = this._config.trigger.split(' ');\n\n    triggers.forEach(trigger => {\n      if (trigger === 'click') {\n        EventHandler.on(this._element, this.constructor.Event.CLICK, this._config.selector, event => this.toggle(event));\n      } else if (trigger !== TRIGGER_MANUAL) {\n        const eventIn = trigger === TRIGGER_HOVER ? this.constructor.Event.MOUSEENTER : this.constructor.Event.FOCUSIN;\n        const eventOut = trigger === TRIGGER_HOVER ? this.constructor.Event.MOUSELEAVE : this.constructor.Event.FOCUSOUT;\n        EventHandler.on(this._element, eventIn, this._config.selector, event => this._enter(event));\n        EventHandler.on(this._element, eventOut, this._config.selector, event => this._leave(event));\n      }\n    });\n\n    this._hideModalHandler = () => {\n      if (this._element) {\n        this.hide();\n      }\n    };\n\n    EventHandler.on(this._element.closest(`.${CLASS_NAME_MODAL}`), 'hide.bs.modal', this._hideModalHandler);\n\n    if (this._config.selector) {\n      this._config = { ...this._config,\n        trigger: 'manual',\n        selector: ''\n      };\n    } else {\n      this._fixTitle();\n    }\n  }\n\n  _fixTitle() {\n    const title = this._element.getAttribute('title');\n\n    const originalTitleType = typeof this._element.getAttribute('data-bs-original-title');\n\n    if (title || originalTitleType !== 'string') {\n      this._element.setAttribute('data-bs-original-title', title || '');\n\n      if (title && !this._element.getAttribute('aria-label') && !this._element.textContent) {\n        this._element.setAttribute('aria-label', title);\n      }\n\n      this._element.setAttribute('title', '');\n    }\n  }\n\n  _enter(event, context) {\n    context = this._initializeOnDelegatedTarget(event, context);\n\n    if (event) {\n      context._activeTrigger[event.type === 'focusin' ? TRIGGER_FOCUS : TRIGGER_HOVER] = true;\n    }\n\n    if (context.getTipElement().classList.contains(CLASS_NAME_SHOW$3) || context._hoverState === HOVER_STATE_SHOW) {\n      context._hoverState = HOVER_STATE_SHOW;\n      return;\n    }\n\n    clearTimeout(context._timeout);\n    context._hoverState = HOVER_STATE_SHOW;\n\n    if (!context._config.delay || !context._config.delay.show) {\n      context.show();\n      return;\n    }\n\n    context._timeout = setTimeout(() => {\n      if (context._hoverState === HOVER_STATE_SHOW) {\n        context.show();\n      }\n    }, context._config.delay.show);\n  }\n\n  _leave(event, context) {\n    context = this._initializeOnDelegatedTarget(event, context);\n\n    if (event) {\n      context._activeTrigger[event.type === 'focusout' ? TRIGGER_FOCUS : TRIGGER_HOVER] = context._element.contains(event.relatedTarget);\n    }\n\n    if (context._isWithActiveTrigger()) {\n      return;\n    }\n\n    clearTimeout(context._timeout);\n    context._hoverState = HOVER_STATE_OUT;\n\n    if (!context._config.delay || !context._config.delay.hide) {\n      context.hide();\n      return;\n    }\n\n    context._timeout = setTimeout(() => {\n      if (context._hoverState === HOVER_STATE_OUT) {\n        context.hide();\n      }\n    }, context._config.delay.hide);\n  }\n\n  _isWithActiveTrigger() {\n    for (const trigger in this._activeTrigger) {\n      if (this._activeTrigger[trigger]) {\n        return true;\n      }\n    }\n\n    return false;\n  }\n\n  _getConfig(config) {\n    const dataAttributes = Manipulator.getDataAttributes(this._element);\n    Object.keys(dataAttributes).forEach(dataAttr => {\n      if (DISALLOWED_ATTRIBUTES.has(dataAttr)) {\n        delete dataAttributes[dataAttr];\n      }\n    });\n    config = { ...this.constructor.Default,\n      ...dataAttributes,\n      ...(typeof config === 'object' && config ? config : {})\n    };\n    config.container = config.container === false ? document.body : getElement(config.container);\n\n    if (typeof config.delay === 'number') {\n      config.delay = {\n        show: config.delay,\n        hide: config.delay\n      };\n    }\n\n    if (typeof config.title === 'number') {\n      config.title = config.title.toString();\n    }\n\n    if (typeof config.content === 'number') {\n      config.content = config.content.toString();\n    }\n\n    typeCheckConfig(NAME$4, config, this.constructor.DefaultType);\n\n    if (config.sanitize) {\n      config.template = sanitizeHtml(config.template, config.allowList, config.sanitizeFn);\n    }\n\n    return config;\n  }\n\n  _getDelegateConfig() {\n    const config = {};\n\n    if (this._config) {\n      for (const key in this._config) {\n        if (this.constructor.Default[key] !== this._config[key]) {\n          config[key] = this._config[key];\n        }\n      }\n    }\n\n    return config;\n  }\n\n  _cleanTipClass() {\n    const tip = this.getTipElement();\n    const tabClass = tip.getAttribute('class').match(BSCLS_PREFIX_REGEX$1);\n\n    if (tabClass !== null && tabClass.length > 0) {\n      tabClass.map(token => token.trim()).forEach(tClass => tip.classList.remove(tClass));\n    }\n  }\n\n  _handlePopperPlacementChange(popperData) {\n    const {\n      state\n    } = popperData;\n\n    if (!state) {\n      return;\n    }\n\n    this.tip = state.elements.popper;\n\n    this._cleanTipClass();\n\n    this._addAttachmentClass(this._getAttachment(state.placement));\n  } // Static\n\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Tooltip.getOrCreateInstance(this, config);\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config]();\n      }\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Tooltip to jQuery only if jQuery is present\n */\n\n\ndefineJQueryPlugin(Tooltip);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): popover.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$3 = 'popover';\nconst DATA_KEY$3 = 'bs.popover';\nconst EVENT_KEY$3 = `.${DATA_KEY$3}`;\nconst CLASS_PREFIX = 'bs-popover';\nconst BSCLS_PREFIX_REGEX = new RegExp(`(^|\\\\s)${CLASS_PREFIX}\\\\S+`, 'g');\nconst Default$2 = { ...Tooltip.Default,\n  placement: 'right',\n  offset: [0, 8],\n  trigger: 'click',\n  content: '',\n  template: '<div class=\"popover\" role=\"tooltip\">' + '<div class=\"popover-arrow\"></div>' + '<h3 class=\"popover-header\"></h3>' + '<div class=\"popover-body\"></div>' + '</div>'\n};\nconst DefaultType$2 = { ...Tooltip.DefaultType,\n  content: '(string|element|function)'\n};\nconst Event$1 = {\n  HIDE: `hide${EVENT_KEY$3}`,\n  HIDDEN: `hidden${EVENT_KEY$3}`,\n  SHOW: `show${EVENT_KEY$3}`,\n  SHOWN: `shown${EVENT_KEY$3}`,\n  INSERTED: `inserted${EVENT_KEY$3}`,\n  CLICK: `click${EVENT_KEY$3}`,\n  FOCUSIN: `focusin${EVENT_KEY$3}`,\n  FOCUSOUT: `focusout${EVENT_KEY$3}`,\n  MOUSEENTER: `mouseenter${EVENT_KEY$3}`,\n  MOUSELEAVE: `mouseleave${EVENT_KEY$3}`\n};\nconst CLASS_NAME_FADE$2 = 'fade';\nconst CLASS_NAME_SHOW$2 = 'show';\nconst SELECTOR_TITLE = '.popover-header';\nconst SELECTOR_CONTENT = '.popover-body';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Popover extends Tooltip {\n  // Getters\n  static get Default() {\n    return Default$2;\n  }\n\n  static get NAME() {\n    return NAME$3;\n  }\n\n  static get Event() {\n    return Event$1;\n  }\n\n  static get DefaultType() {\n    return DefaultType$2;\n  } // Overrides\n\n\n  isWithContent() {\n    return this.getTitle() || this._getContent();\n  }\n\n  getTipElement() {\n    if (this.tip) {\n      return this.tip;\n    }\n\n    this.tip = super.getTipElement();\n\n    if (!this.getTitle()) {\n      SelectorEngine.findOne(SELECTOR_TITLE, this.tip).remove();\n    }\n\n    if (!this._getContent()) {\n      SelectorEngine.findOne(SELECTOR_CONTENT, this.tip).remove();\n    }\n\n    return this.tip;\n  }\n\n  setContent() {\n    const tip = this.getTipElement(); // we use append for html objects to maintain js events\n\n    this.setElementContent(SelectorEngine.findOne(SELECTOR_TITLE, tip), this.getTitle());\n\n    let content = this._getContent();\n\n    if (typeof content === 'function') {\n      content = content.call(this._element);\n    }\n\n    this.setElementContent(SelectorEngine.findOne(SELECTOR_CONTENT, tip), content);\n    tip.classList.remove(CLASS_NAME_FADE$2, CLASS_NAME_SHOW$2);\n  } // Private\n\n\n  _addAttachmentClass(attachment) {\n    this.getTipElement().classList.add(`${CLASS_PREFIX}-${this.updateAttachment(attachment)}`);\n  }\n\n  _getContent() {\n    return this._element.getAttribute('data-bs-content') || this._config.content;\n  }\n\n  _cleanTipClass() {\n    const tip = this.getTipElement();\n    const tabClass = tip.getAttribute('class').match(BSCLS_PREFIX_REGEX);\n\n    if (tabClass !== null && tabClass.length > 0) {\n      tabClass.map(token => token.trim()).forEach(tClass => tip.classList.remove(tClass));\n    }\n  } // Static\n\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Popover.getOrCreateInstance(this, config);\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config]();\n      }\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Popover to jQuery only if jQuery is present\n */\n\n\ndefineJQueryPlugin(Popover);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): scrollspy.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$2 = 'scrollspy';\nconst DATA_KEY$2 = 'bs.scrollspy';\nconst EVENT_KEY$2 = `.${DATA_KEY$2}`;\nconst DATA_API_KEY$1 = '.data-api';\nconst Default$1 = {\n  offset: 10,\n  method: 'auto',\n  target: ''\n};\nconst DefaultType$1 = {\n  offset: 'number',\n  method: 'string',\n  target: '(string|element)'\n};\nconst EVENT_ACTIVATE = `activate${EVENT_KEY$2}`;\nconst EVENT_SCROLL = `scroll${EVENT_KEY$2}`;\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY$2}${DATA_API_KEY$1}`;\nconst CLASS_NAME_DROPDOWN_ITEM = 'dropdown-item';\nconst CLASS_NAME_ACTIVE$1 = 'active';\nconst SELECTOR_DATA_SPY = '[data-bs-spy=\"scroll\"]';\nconst SELECTOR_NAV_LIST_GROUP$1 = '.nav, .list-group';\nconst SELECTOR_NAV_LINKS = '.nav-link';\nconst SELECTOR_NAV_ITEMS = '.nav-item';\nconst SELECTOR_LIST_ITEMS = '.list-group-item';\nconst SELECTOR_DROPDOWN$1 = '.dropdown';\nconst SELECTOR_DROPDOWN_TOGGLE$1 = '.dropdown-toggle';\nconst METHOD_OFFSET = 'offset';\nconst METHOD_POSITION = 'position';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass ScrollSpy extends BaseComponent {\n  constructor(element, config) {\n    super(element);\n    this._scrollElement = this._element.tagName === 'BODY' ? window : this._element;\n    this._config = this._getConfig(config);\n    this._selector = `${this._config.target} ${SELECTOR_NAV_LINKS}, ${this._config.target} ${SELECTOR_LIST_ITEMS}, ${this._config.target} .${CLASS_NAME_DROPDOWN_ITEM}`;\n    this._offsets = [];\n    this._targets = [];\n    this._activeTarget = null;\n    this._scrollHeight = 0;\n    EventHandler.on(this._scrollElement, EVENT_SCROLL, () => this._process());\n    this.refresh();\n\n    this._process();\n  } // Getters\n\n\n  static get Default() {\n    return Default$1;\n  }\n\n  static get NAME() {\n    return NAME$2;\n  } // Public\n\n\n  refresh() {\n    const autoMethod = this._scrollElement === this._scrollElement.window ? METHOD_OFFSET : METHOD_POSITION;\n    const offsetMethod = this._config.method === 'auto' ? autoMethod : this._config.method;\n    const offsetBase = offsetMethod === METHOD_POSITION ? this._getScrollTop() : 0;\n    this._offsets = [];\n    this._targets = [];\n    this._scrollHeight = this._getScrollHeight();\n    const targets = SelectorEngine.find(this._selector);\n    targets.map(element => {\n      const targetSelector = getSelectorFromElement(element);\n      const target = targetSelector ? SelectorEngine.findOne(targetSelector) : null;\n\n      if (target) {\n        const targetBCR = target.getBoundingClientRect();\n\n        if (targetBCR.width || targetBCR.height) {\n          return [Manipulator[offsetMethod](target).top + offsetBase, targetSelector];\n        }\n      }\n\n      return null;\n    }).filter(item => item).sort((a, b) => a[0] - b[0]).forEach(item => {\n      this._offsets.push(item[0]);\n\n      this._targets.push(item[1]);\n    });\n  }\n\n  dispose() {\n    EventHandler.off(this._scrollElement, EVENT_KEY$2);\n    super.dispose();\n  } // Private\n\n\n  _getConfig(config) {\n    config = { ...Default$1,\n      ...Manipulator.getDataAttributes(this._element),\n      ...(typeof config === 'object' && config ? config : {})\n    };\n\n    if (typeof config.target !== 'string' && isElement(config.target)) {\n      let {\n        id\n      } = config.target;\n\n      if (!id) {\n        id = getUID(NAME$2);\n        config.target.id = id;\n      }\n\n      config.target = `#${id}`;\n    }\n\n    typeCheckConfig(NAME$2, config, DefaultType$1);\n    return config;\n  }\n\n  _getScrollTop() {\n    return this._scrollElement === window ? this._scrollElement.pageYOffset : this._scrollElement.scrollTop;\n  }\n\n  _getScrollHeight() {\n    return this._scrollElement.scrollHeight || Math.max(document.body.scrollHeight, document.documentElement.scrollHeight);\n  }\n\n  _getOffsetHeight() {\n    return this._scrollElement === window ? window.innerHeight : this._scrollElement.getBoundingClientRect().height;\n  }\n\n  _process() {\n    const scrollTop = this._getScrollTop() + this._config.offset;\n\n    const scrollHeight = this._getScrollHeight();\n\n    const maxScroll = this._config.offset + scrollHeight - this._getOffsetHeight();\n\n    if (this._scrollHeight !== scrollHeight) {\n      this.refresh();\n    }\n\n    if (scrollTop >= maxScroll) {\n      const target = this._targets[this._targets.length - 1];\n\n      if (this._activeTarget !== target) {\n        this._activate(target);\n      }\n\n      return;\n    }\n\n    if (this._activeTarget && scrollTop < this._offsets[0] && this._offsets[0] > 0) {\n      this._activeTarget = null;\n\n      this._clear();\n\n      return;\n    }\n\n    for (let i = this._offsets.length; i--;) {\n      const isActiveTarget = this._activeTarget !== this._targets[i] && scrollTop >= this._offsets[i] && (typeof this._offsets[i + 1] === 'undefined' || scrollTop < this._offsets[i + 1]);\n\n      if (isActiveTarget) {\n        this._activate(this._targets[i]);\n      }\n    }\n  }\n\n  _activate(target) {\n    this._activeTarget = target;\n\n    this._clear();\n\n    const queries = this._selector.split(',').map(selector => `${selector}[data-bs-target=\"${target}\"],${selector}[href=\"${target}\"]`);\n\n    const link = SelectorEngine.findOne(queries.join(','));\n\n    if (link.classList.contains(CLASS_NAME_DROPDOWN_ITEM)) {\n      SelectorEngine.findOne(SELECTOR_DROPDOWN_TOGGLE$1, link.closest(SELECTOR_DROPDOWN$1)).classList.add(CLASS_NAME_ACTIVE$1);\n      link.classList.add(CLASS_NAME_ACTIVE$1);\n    } else {\n      // Set triggered link as active\n      link.classList.add(CLASS_NAME_ACTIVE$1);\n      SelectorEngine.parents(link, SELECTOR_NAV_LIST_GROUP$1).forEach(listGroup => {\n        // Set triggered links parents as active\n        // With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor\n        SelectorEngine.prev(listGroup, `${SELECTOR_NAV_LINKS}, ${SELECTOR_LIST_ITEMS}`).forEach(item => item.classList.add(CLASS_NAME_ACTIVE$1)); // Handle special case when .nav-link is inside .nav-item\n\n        SelectorEngine.prev(listGroup, SELECTOR_NAV_ITEMS).forEach(navItem => {\n          SelectorEngine.children(navItem, SELECTOR_NAV_LINKS).forEach(item => item.classList.add(CLASS_NAME_ACTIVE$1));\n        });\n      });\n    }\n\n    EventHandler.trigger(this._scrollElement, EVENT_ACTIVATE, {\n      relatedTarget: target\n    });\n  }\n\n  _clear() {\n    SelectorEngine.find(this._selector).filter(node => node.classList.contains(CLASS_NAME_ACTIVE$1)).forEach(node => node.classList.remove(CLASS_NAME_ACTIVE$1));\n  } // Static\n\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = ScrollSpy.getOrCreateInstance(this, config);\n\n      if (typeof config !== 'string') {\n        return;\n      }\n\n      if (typeof data[config] === 'undefined') {\n        throw new TypeError(`No method named \"${config}\"`);\n      }\n\n      data[config]();\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n  SelectorEngine.find(SELECTOR_DATA_SPY).forEach(spy => new ScrollSpy(spy));\n});\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .ScrollSpy to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(ScrollSpy);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): tab.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$1 = 'tab';\nconst DATA_KEY$1 = 'bs.tab';\nconst EVENT_KEY$1 = `.${DATA_KEY$1}`;\nconst DATA_API_KEY = '.data-api';\nconst EVENT_HIDE$1 = `hide${EVENT_KEY$1}`;\nconst EVENT_HIDDEN$1 = `hidden${EVENT_KEY$1}`;\nconst EVENT_SHOW$1 = `show${EVENT_KEY$1}`;\nconst EVENT_SHOWN$1 = `shown${EVENT_KEY$1}`;\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY$1}${DATA_API_KEY}`;\nconst CLASS_NAME_DROPDOWN_MENU = 'dropdown-menu';\nconst CLASS_NAME_ACTIVE = 'active';\nconst CLASS_NAME_FADE$1 = 'fade';\nconst CLASS_NAME_SHOW$1 = 'show';\nconst SELECTOR_DROPDOWN = '.dropdown';\nconst SELECTOR_NAV_LIST_GROUP = '.nav, .list-group';\nconst SELECTOR_ACTIVE = '.active';\nconst SELECTOR_ACTIVE_UL = ':scope > li > .active';\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"tab\"], [data-bs-toggle=\"pill\"], [data-bs-toggle=\"list\"]';\nconst SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle';\nconst SELECTOR_DROPDOWN_ACTIVE_CHILD = ':scope > .dropdown-menu .active';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Tab extends BaseComponent {\n  // Getters\n  static get NAME() {\n    return NAME$1;\n  } // Public\n\n\n  show() {\n    if (this._element.parentNode && this._element.parentNode.nodeType === Node.ELEMENT_NODE && this._element.classList.contains(CLASS_NAME_ACTIVE)) {\n      return;\n    }\n\n    let previous;\n    const target = getElementFromSelector(this._element);\n\n    const listElement = this._element.closest(SELECTOR_NAV_LIST_GROUP);\n\n    if (listElement) {\n      const itemSelector = listElement.nodeName === 'UL' || listElement.nodeName === 'OL' ? SELECTOR_ACTIVE_UL : SELECTOR_ACTIVE;\n      previous = SelectorEngine.find(itemSelector, listElement);\n      previous = previous[previous.length - 1];\n    }\n\n    const hideEvent = previous ? EventHandler.trigger(previous, EVENT_HIDE$1, {\n      relatedTarget: this._element\n    }) : null;\n    const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$1, {\n      relatedTarget: previous\n    });\n\n    if (showEvent.defaultPrevented || hideEvent !== null && hideEvent.defaultPrevented) {\n      return;\n    }\n\n    this._activate(this._element, listElement);\n\n    const complete = () => {\n      EventHandler.trigger(previous, EVENT_HIDDEN$1, {\n        relatedTarget: this._element\n      });\n      EventHandler.trigger(this._element, EVENT_SHOWN$1, {\n        relatedTarget: previous\n      });\n    };\n\n    if (target) {\n      this._activate(target, target.parentNode, complete);\n    } else {\n      complete();\n    }\n  } // Private\n\n\n  _activate(element, container, callback) {\n    const activeElements = container && (container.nodeName === 'UL' || container.nodeName === 'OL') ? SelectorEngine.find(SELECTOR_ACTIVE_UL, container) : SelectorEngine.children(container, SELECTOR_ACTIVE);\n    const active = activeElements[0];\n    const isTransitioning = callback && active && active.classList.contains(CLASS_NAME_FADE$1);\n\n    const complete = () => this._transitionComplete(element, active, callback);\n\n    if (active && isTransitioning) {\n      active.classList.remove(CLASS_NAME_SHOW$1);\n\n      this._queueCallback(complete, element, true);\n    } else {\n      complete();\n    }\n  }\n\n  _transitionComplete(element, active, callback) {\n    if (active) {\n      active.classList.remove(CLASS_NAME_ACTIVE);\n      const dropdownChild = SelectorEngine.findOne(SELECTOR_DROPDOWN_ACTIVE_CHILD, active.parentNode);\n\n      if (dropdownChild) {\n        dropdownChild.classList.remove(CLASS_NAME_ACTIVE);\n      }\n\n      if (active.getAttribute('role') === 'tab') {\n        active.setAttribute('aria-selected', false);\n      }\n    }\n\n    element.classList.add(CLASS_NAME_ACTIVE);\n\n    if (element.getAttribute('role') === 'tab') {\n      element.setAttribute('aria-selected', true);\n    }\n\n    reflow(element);\n\n    if (element.classList.contains(CLASS_NAME_FADE$1)) {\n      element.classList.add(CLASS_NAME_SHOW$1);\n    }\n\n    let parent = element.parentNode;\n\n    if (parent && parent.nodeName === 'LI') {\n      parent = parent.parentNode;\n    }\n\n    if (parent && parent.classList.contains(CLASS_NAME_DROPDOWN_MENU)) {\n      const dropdownElement = element.closest(SELECTOR_DROPDOWN);\n\n      if (dropdownElement) {\n        SelectorEngine.find(SELECTOR_DROPDOWN_TOGGLE, dropdownElement).forEach(dropdown => dropdown.classList.add(CLASS_NAME_ACTIVE));\n      }\n\n      element.setAttribute('aria-expanded', true);\n    }\n\n    if (callback) {\n      callback();\n    }\n  } // Static\n\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Tab.getOrCreateInstance(this);\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config]();\n      }\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n  if (['A', 'AREA'].includes(this.tagName)) {\n    event.preventDefault();\n  }\n\n  if (isDisabled(this)) {\n    return;\n  }\n\n  const data = Tab.getOrCreateInstance(this);\n  data.show();\n});\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Tab to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Tab);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): toast.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'toast';\nconst DATA_KEY = 'bs.toast';\nconst EVENT_KEY = `.${DATA_KEY}`;\nconst EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY}`;\nconst EVENT_MOUSEOVER = `mouseover${EVENT_KEY}`;\nconst EVENT_MOUSEOUT = `mouseout${EVENT_KEY}`;\nconst EVENT_FOCUSIN = `focusin${EVENT_KEY}`;\nconst EVENT_FOCUSOUT = `focusout${EVENT_KEY}`;\nconst EVENT_HIDE = `hide${EVENT_KEY}`;\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`;\nconst EVENT_SHOW = `show${EVENT_KEY}`;\nconst EVENT_SHOWN = `shown${EVENT_KEY}`;\nconst CLASS_NAME_FADE = 'fade';\nconst CLASS_NAME_HIDE = 'hide';\nconst CLASS_NAME_SHOW = 'show';\nconst CLASS_NAME_SHOWING = 'showing';\nconst DefaultType = {\n  animation: 'boolean',\n  autohide: 'boolean',\n  delay: 'number'\n};\nconst Default = {\n  animation: true,\n  autohide: true,\n  delay: 5000\n};\nconst SELECTOR_DATA_DISMISS = '[data-bs-dismiss=\"toast\"]';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Toast extends BaseComponent {\n  constructor(element, config) {\n    super(element);\n    this._config = this._getConfig(config);\n    this._timeout = null;\n    this._hasMouseInteraction = false;\n    this._hasKeyboardInteraction = false;\n\n    this._setListeners();\n  } // Getters\n\n\n  static get DefaultType() {\n    return DefaultType;\n  }\n\n  static get Default() {\n    return Default;\n  }\n\n  static get NAME() {\n    return NAME;\n  } // Public\n\n\n  show() {\n    const showEvent = EventHandler.trigger(this._element, EVENT_SHOW);\n\n    if (showEvent.defaultPrevented) {\n      return;\n    }\n\n    this._clearTimeout();\n\n    if (this._config.animation) {\n      this._element.classList.add(CLASS_NAME_FADE);\n    }\n\n    const complete = () => {\n      this._element.classList.remove(CLASS_NAME_SHOWING);\n\n      this._element.classList.add(CLASS_NAME_SHOW);\n\n      EventHandler.trigger(this._element, EVENT_SHOWN);\n\n      this._maybeScheduleHide();\n    };\n\n    this._element.classList.remove(CLASS_NAME_HIDE);\n\n    reflow(this._element);\n\n    this._element.classList.add(CLASS_NAME_SHOWING);\n\n    this._queueCallback(complete, this._element, this._config.animation);\n  }\n\n  hide() {\n    if (!this._element.classList.contains(CLASS_NAME_SHOW)) {\n      return;\n    }\n\n    const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE);\n\n    if (hideEvent.defaultPrevented) {\n      return;\n    }\n\n    const complete = () => {\n      this._element.classList.add(CLASS_NAME_HIDE);\n\n      EventHandler.trigger(this._element, EVENT_HIDDEN);\n    };\n\n    this._element.classList.remove(CLASS_NAME_SHOW);\n\n    this._queueCallback(complete, this._element, this._config.animation);\n  }\n\n  dispose() {\n    this._clearTimeout();\n\n    if (this._element.classList.contains(CLASS_NAME_SHOW)) {\n      this._element.classList.remove(CLASS_NAME_SHOW);\n    }\n\n    super.dispose();\n  } // Private\n\n\n  _getConfig(config) {\n    config = { ...Default,\n      ...Manipulator.getDataAttributes(this._element),\n      ...(typeof config === 'object' && config ? config : {})\n    };\n    typeCheckConfig(NAME, config, this.constructor.DefaultType);\n    return config;\n  }\n\n  _maybeScheduleHide() {\n    if (!this._config.autohide) {\n      return;\n    }\n\n    if (this._hasMouseInteraction || this._hasKeyboardInteraction) {\n      return;\n    }\n\n    this._timeout = setTimeout(() => {\n      this.hide();\n    }, this._config.delay);\n  }\n\n  _onInteraction(event, isInteracting) {\n    switch (event.type) {\n      case 'mouseover':\n      case 'mouseout':\n        this._hasMouseInteraction = isInteracting;\n        break;\n\n      case 'focusin':\n      case 'focusout':\n        this._hasKeyboardInteraction = isInteracting;\n        break;\n    }\n\n    if (isInteracting) {\n      this._clearTimeout();\n\n      return;\n    }\n\n    const nextElement = event.relatedTarget;\n\n    if (this._element === nextElement || this._element.contains(nextElement)) {\n      return;\n    }\n\n    this._maybeScheduleHide();\n  }\n\n  _setListeners() {\n    EventHandler.on(this._element, EVENT_CLICK_DISMISS, SELECTOR_DATA_DISMISS, () => this.hide());\n    EventHandler.on(this._element, EVENT_MOUSEOVER, event => this._onInteraction(event, true));\n    EventHandler.on(this._element, EVENT_MOUSEOUT, event => this._onInteraction(event, false));\n    EventHandler.on(this._element, EVENT_FOCUSIN, event => this._onInteraction(event, true));\n    EventHandler.on(this._element, EVENT_FOCUSOUT, event => this._onInteraction(event, false));\n  }\n\n  _clearTimeout() {\n    clearTimeout(this._timeout);\n    this._timeout = null;\n  } // Static\n\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Toast.getOrCreateInstance(this, config);\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config](this);\n      }\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Toast to jQuery only if jQuery is present\n */\n\n\ndefineJQueryPlugin(Toast);\n\nexport { Alert, Button, Carousel, Collapse, Dropdown, Modal, Offcanvas, Popover, ScrollSpy, Tab, Toast, Tooltip };\n//# sourceMappingURL=bootstrap.esm.js.map\n"
  },
  {
    "path": "src/sourceDev.WebApp/SharedThemes/sandstone/wwwroot/js/jquery.js",
    "content": "/*!\n * jQuery JavaScript Library v3.7.0\n * https://jquery.com/\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license\n * https://jquery.org/license\n *\n * Date: 2023-05-11T18:29Z\n */\n(function (global, factory) {\n\n\t\"use strict\";\n\n\tif (typeof module === \"object\" && typeof module.exports === \"object\") {\n\n\t\t// For CommonJS and CommonJS-like environments where a proper `window`\n\t\t// is present, execute the factory and get jQuery.\n\t\t// For environments that do not have a `window` with a `document`\n\t\t// (such as Node.js), expose a factory as module.exports.\n\t\t// This accentuates the need for the creation of a real `window`.\n\t\t// e.g. var jQuery = require(\"jquery\")(window);\n\t\t// See ticket trac-14549 for more info.\n\t\tmodule.exports = global.document ?\n\t\t\tfactory(global, true) :\n\t\t\tfunction (w) {\n\t\t\t\tif (!w.document) {\n\t\t\t\t\tthrow new Error(\"jQuery requires a window with a document\");\n\t\t\t\t}\n\t\t\t\treturn factory(w);\n\t\t\t};\n\t} else {\n\t\tfactory(global);\n\t}\n\n\t// Pass this if window is not defined yet\n})(typeof window !== \"undefined\" ? window : this, function (window, noGlobal) {\n\n\t// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1\n\t// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode\n\t// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common\n\t// enough that all such attempts are guarded in a try block.\n\t\"use strict\";\n\n\tvar arr = [];\n\n\tvar getProto = Object.getPrototypeOf;\n\n\tvar slice = arr.slice;\n\n\tvar flat = arr.flat ? function (array) {\n\t\treturn arr.flat.call(array);\n\t} : function (array) {\n\t\treturn arr.concat.apply([], array);\n\t};\n\n\n\tvar push = arr.push;\n\n\tvar indexOf = arr.indexOf;\n\n\tvar class2type = {};\n\n\tvar toString = class2type.toString;\n\n\tvar hasOwn = class2type.hasOwnProperty;\n\n\tvar fnToString = hasOwn.toString;\n\n\tvar ObjectFunctionString = fnToString.call(Object);\n\n\tvar support = {};\n\n\tvar isFunction = function isFunction(obj) {\n\n\t\t// Support: Chrome <=57, Firefox <=52\n\t\t// In some browsers, typeof returns \"function\" for HTML <object> elements\n\t\t// (i.e., `typeof document.createElement( \"object\" ) === \"function\"`).\n\t\t// We don't want to classify *any* DOM node as a function.\n\t\t// Support: QtWeb <=3.8.5, WebKit <=534.34, wkhtmltopdf tool <=0.12.5\n\t\t// Plus for old WebKit, typeof returns \"function\" for HTML collections\n\t\t// (e.g., `typeof document.getElementsByTagName(\"div\") === \"function\"`). (gh-4756)\n\t\treturn typeof obj === \"function\" && typeof obj.nodeType !== \"number\" &&\n\t\t\ttypeof obj.item !== \"function\";\n\t};\n\n\n\tvar isWindow = function isWindow(obj) {\n\t\treturn obj != null && obj === obj.window;\n\t};\n\n\n\tvar document = window.document;\n\n\n\n\tvar preservedScriptAttributes = {\n\t\ttype: true,\n\t\tsrc: true,\n\t\tnonce: true,\n\t\tnoModule: true\n\t};\n\n\tfunction DOMEval(code, node, doc) {\n\t\tdoc = doc || document;\n\n\t\tvar i, val,\n\t\t\tscript = doc.createElement(\"script\");\n\n\t\tscript.text = code;\n\t\tif (node) {\n\t\t\tfor (i in preservedScriptAttributes) {\n\n\t\t\t\t// Support: Firefox 64+, Edge 18+\n\t\t\t\t// Some browsers don't support the \"nonce\" property on scripts.\n\t\t\t\t// On the other hand, just using `getAttribute` is not enough as\n\t\t\t\t// the `nonce` attribute is reset to an empty string whenever it\n\t\t\t\t// becomes browsing-context connected.\n\t\t\t\t// See https://github.com/whatwg/html/issues/2369\n\t\t\t\t// See https://html.spec.whatwg.org/#nonce-attributes\n\t\t\t\t// The `node.getAttribute` check was added for the sake of\n\t\t\t\t// `jQuery.globalEval` so that it can fake a nonce-containing node\n\t\t\t\t// via an object.\n\t\t\t\tval = node[i] || node.getAttribute && node.getAttribute(i);\n\t\t\t\tif (val) {\n\t\t\t\t\tscript.setAttribute(i, val);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tdoc.head.appendChild(script).parentNode.removeChild(script);\n\t}\n\n\n\tfunction toType(obj) {\n\t\tif (obj == null) {\n\t\t\treturn obj + \"\";\n\t\t}\n\n\t\t// Support: Android <=2.3 only (functionish RegExp)\n\t\treturn typeof obj === \"object\" || typeof obj === \"function\" ?\n\t\t\tclass2type[toString.call(obj)] || \"object\" :\n\t\t\ttypeof obj;\n\t}\n\t/* global Symbol */\n\t// Defining this global in .eslintrc.json would create a danger of using the global\n\t// unguarded in another place, it seems safer to define global only for this module\n\n\n\n\tvar version = \"3.7.0\",\n\n\t\trhtmlSuffix = /HTML$/i,\n\n\t\t// Define a local copy of jQuery\n\t\tjQuery = function (selector, context) {\n\n\t\t\t// The jQuery object is actually just the init constructor 'enhanced'\n\t\t\t// Need init if jQuery is called (just allow error to be thrown if not included)\n\t\t\treturn new jQuery.fn.init(selector, context);\n\t\t};\n\n\tjQuery.fn = jQuery.prototype = {\n\n\t\t// The current version of jQuery being used\n\t\tjquery: version,\n\n\t\tconstructor: jQuery,\n\n\t\t// The default length of a jQuery object is 0\n\t\tlength: 0,\n\n\t\ttoArray: function () {\n\t\t\treturn slice.call(this);\n\t\t},\n\n\t\t// Get the Nth element in the matched element set OR\n\t\t// Get the whole matched element set as a clean array\n\t\tget: function (num) {\n\n\t\t\t// Return all the elements in a clean array\n\t\t\tif (num == null) {\n\t\t\t\treturn slice.call(this);\n\t\t\t}\n\n\t\t\t// Return just the one element from the set\n\t\t\treturn num < 0 ? this[num + this.length] : this[num];\n\t\t},\n\n\t\t// Take an array of elements and push it onto the stack\n\t\t// (returning the new matched element set)\n\t\tpushStack: function (elems) {\n\n\t\t\t// Build a new jQuery matched element set\n\t\t\tvar ret = jQuery.merge(this.constructor(), elems);\n\n\t\t\t// Add the old object onto the stack (as a reference)\n\t\t\tret.prevObject = this;\n\n\t\t\t// Return the newly-formed element set\n\t\t\treturn ret;\n\t\t},\n\n\t\t// Execute a callback for every element in the matched set.\n\t\teach: function (callback) {\n\t\t\treturn jQuery.each(this, callback);\n\t\t},\n\n\t\tmap: function (callback) {\n\t\t\treturn this.pushStack(jQuery.map(this, function (elem, i) {\n\t\t\t\treturn callback.call(elem, i, elem);\n\t\t\t}));\n\t\t},\n\n\t\tslice: function () {\n\t\t\treturn this.pushStack(slice.apply(this, arguments));\n\t\t},\n\n\t\tfirst: function () {\n\t\t\treturn this.eq(0);\n\t\t},\n\n\t\tlast: function () {\n\t\t\treturn this.eq(-1);\n\t\t},\n\n\t\teven: function () {\n\t\t\treturn this.pushStack(jQuery.grep(this, function (_elem, i) {\n\t\t\t\treturn (i + 1) % 2;\n\t\t\t}));\n\t\t},\n\n\t\todd: function () {\n\t\t\treturn this.pushStack(jQuery.grep(this, function (_elem, i) {\n\t\t\t\treturn i % 2;\n\t\t\t}));\n\t\t},\n\n\t\teq: function (i) {\n\t\t\tvar len = this.length,\n\t\t\t\tj = +i + (i < 0 ? len : 0);\n\t\t\treturn this.pushStack(j >= 0 && j < len ? [this[j]] : []);\n\t\t},\n\n\t\tend: function () {\n\t\t\treturn this.prevObject || this.constructor();\n\t\t},\n\n\t\t// For internal use only.\n\t\t// Behaves like an Array's method, not like a jQuery method.\n\t\tpush: push,\n\t\tsort: arr.sort,\n\t\tsplice: arr.splice\n\t};\n\n\tjQuery.extend = jQuery.fn.extend = function () {\n\t\tvar options, name, src, copy, copyIsArray, clone,\n\t\t\ttarget = arguments[0] || {},\n\t\t\ti = 1,\n\t\t\tlength = arguments.length,\n\t\t\tdeep = false;\n\n\t\t// Handle a deep copy situation\n\t\tif (typeof target === \"boolean\") {\n\t\t\tdeep = target;\n\n\t\t\t// Skip the boolean and the target\n\t\t\ttarget = arguments[i] || {};\n\t\t\ti++;\n\t\t}\n\n\t\t// Handle case when target is a string or something (possible in deep copy)\n\t\tif (typeof target !== \"object\" && !isFunction(target)) {\n\t\t\ttarget = {};\n\t\t}\n\n\t\t// Extend jQuery itself if only one argument is passed\n\t\tif (i === length) {\n\t\t\ttarget = this;\n\t\t\ti--;\n\t\t}\n\n\t\tfor (; i < length; i++) {\n\n\t\t\t// Only deal with non-null/undefined values\n\t\t\tif ((options = arguments[i]) != null) {\n\n\t\t\t\t// Extend the base object\n\t\t\t\tfor (name in options) {\n\t\t\t\t\tcopy = options[name];\n\n\t\t\t\t\t// Prevent Object.prototype pollution\n\t\t\t\t\t// Prevent never-ending loop\n\t\t\t\t\tif (name === \"__proto__\" || target === copy) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\t\tif (deep && copy && (jQuery.isPlainObject(copy) ||\n\t\t\t\t\t\t(copyIsArray = Array.isArray(copy)))) {\n\t\t\t\t\t\tsrc = target[name];\n\n\t\t\t\t\t\t// Ensure proper type for the source value\n\t\t\t\t\t\tif (copyIsArray && !Array.isArray(src)) {\n\t\t\t\t\t\t\tclone = [];\n\t\t\t\t\t\t} else if (!copyIsArray && !jQuery.isPlainObject(src)) {\n\t\t\t\t\t\t\tclone = {};\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tclone = src;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcopyIsArray = false;\n\n\t\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\t\ttarget[name] = jQuery.extend(deep, clone, copy);\n\n\t\t\t\t\t\t// Don't bring in undefined values\n\t\t\t\t\t} else if (copy !== undefined) {\n\t\t\t\t\t\ttarget[name] = copy;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Return the modified object\n\t\treturn target;\n\t};\n\n\tjQuery.extend({\n\n\t\t// Unique for each copy of jQuery on the page\n\t\texpando: \"jQuery\" + (version + Math.random()).replace(/\\D/g, \"\"),\n\n\t\t// Assume jQuery is ready without the ready module\n\t\tisReady: true,\n\n\t\terror: function (msg) {\n\t\t\tthrow new Error(msg);\n\t\t},\n\n\t\tnoop: function () { },\n\n\t\tisPlainObject: function (obj) {\n\t\t\tvar proto, Ctor;\n\n\t\t\t// Detect obvious negatives\n\t\t\t// Use toString instead of jQuery.type to catch host objects\n\t\t\tif (!obj || toString.call(obj) !== \"[object Object]\") {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tproto = getProto(obj);\n\n\t\t\t// Objects with no prototype (e.g., `Object.create( null )`) are plain\n\t\t\tif (!proto) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\t// Objects with prototype are plain iff they were constructed by a global Object function\n\t\t\tCtor = hasOwn.call(proto, \"constructor\") && proto.constructor;\n\t\t\treturn typeof Ctor === \"function\" && fnToString.call(Ctor) === ObjectFunctionString;\n\t\t},\n\n\t\tisEmptyObject: function (obj) {\n\t\t\tvar name;\n\n\t\t\tfor (name in obj) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\n\t\t// Evaluates a script in a provided context; falls back to the global one\n\t\t// if not specified.\n\t\tglobalEval: function (code, options, doc) {\n\t\t\tDOMEval(code, { nonce: options && options.nonce }, doc);\n\t\t},\n\n\t\teach: function (obj, callback) {\n\t\t\tvar length, i = 0;\n\n\t\t\tif (isArrayLike(obj)) {\n\t\t\t\tlength = obj.length;\n\t\t\t\tfor (; i < length; i++) {\n\t\t\t\t\tif (callback.call(obj[i], i, obj[i]) === false) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor (i in obj) {\n\t\t\t\t\tif (callback.call(obj[i], i, obj[i]) === false) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn obj;\n\t\t},\n\n\n\t\t// Retrieve the text value of an array of DOM nodes\n\t\ttext: function (elem) {\n\t\t\tvar node,\n\t\t\t\tret = \"\",\n\t\t\t\ti = 0,\n\t\t\t\tnodeType = elem.nodeType;\n\n\t\t\tif (!nodeType) {\n\n\t\t\t\t// If no nodeType, this is expected to be an array\n\t\t\t\twhile ((node = elem[i++])) {\n\n\t\t\t\t\t// Do not traverse comment nodes\n\t\t\t\t\tret += jQuery.text(node);\n\t\t\t\t}\n\t\t\t} else if (nodeType === 1 || nodeType === 9 || nodeType === 11) {\n\t\t\t\treturn elem.textContent;\n\t\t\t} else if (nodeType === 3 || nodeType === 4) {\n\t\t\t\treturn elem.nodeValue;\n\t\t\t}\n\n\t\t\t// Do not include comment or processing instruction nodes\n\n\t\t\treturn ret;\n\t\t},\n\n\t\t// results is for internal usage only\n\t\tmakeArray: function (arr, results) {\n\t\t\tvar ret = results || [];\n\n\t\t\tif (arr != null) {\n\t\t\t\tif (isArrayLike(Object(arr))) {\n\t\t\t\t\tjQuery.merge(ret,\n\t\t\t\t\t\ttypeof arr === \"string\" ?\n\t\t\t\t\t\t\t[arr] : arr\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\tpush.call(ret, arr);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn ret;\n\t\t},\n\n\t\tinArray: function (elem, arr, i) {\n\t\t\treturn arr == null ? -1 : indexOf.call(arr, elem, i);\n\t\t},\n\n\t\tisXMLDoc: function (elem) {\n\t\t\tvar namespace = elem && elem.namespaceURI,\n\t\t\t\tdocElem = elem && (elem.ownerDocument || elem).documentElement;\n\n\t\t\t// Assume HTML when documentElement doesn't yet exist, such as inside\n\t\t\t// document fragments.\n\t\t\treturn !rhtmlSuffix.test(namespace || docElem && docElem.nodeName || \"HTML\");\n\t\t},\n\n\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\tmerge: function (first, second) {\n\t\t\tvar len = +second.length,\n\t\t\t\tj = 0,\n\t\t\t\ti = first.length;\n\n\t\t\tfor (; j < len; j++) {\n\t\t\t\tfirst[i++] = second[j];\n\t\t\t}\n\n\t\t\tfirst.length = i;\n\n\t\t\treturn first;\n\t\t},\n\n\t\tgrep: function (elems, callback, invert) {\n\t\t\tvar callbackInverse,\n\t\t\t\tmatches = [],\n\t\t\t\ti = 0,\n\t\t\t\tlength = elems.length,\n\t\t\t\tcallbackExpect = !invert;\n\n\t\t\t// Go through the array, only saving the items\n\t\t\t// that pass the validator function\n\t\t\tfor (; i < length; i++) {\n\t\t\t\tcallbackInverse = !callback(elems[i], i);\n\t\t\t\tif (callbackInverse !== callbackExpect) {\n\t\t\t\t\tmatches.push(elems[i]);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn matches;\n\t\t},\n\n\t\t// arg is for internal usage only\n\t\tmap: function (elems, callback, arg) {\n\t\t\tvar length, value,\n\t\t\t\ti = 0,\n\t\t\t\tret = [];\n\n\t\t\t// Go through the array, translating each of the items to their new values\n\t\t\tif (isArrayLike(elems)) {\n\t\t\t\tlength = elems.length;\n\t\t\t\tfor (; i < length; i++) {\n\t\t\t\t\tvalue = callback(elems[i], i, arg);\n\n\t\t\t\t\tif (value != null) {\n\t\t\t\t\t\tret.push(value);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Go through every key on the object,\n\t\t\t} else {\n\t\t\t\tfor (i in elems) {\n\t\t\t\t\tvalue = callback(elems[i], i, arg);\n\n\t\t\t\t\tif (value != null) {\n\t\t\t\t\t\tret.push(value);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Flatten any nested arrays\n\t\t\treturn flat(ret);\n\t\t},\n\n\t\t// A global GUID counter for objects\n\t\tguid: 1,\n\n\t\t// jQuery.support is not used in Core but other projects attach their\n\t\t// properties to it so it needs to exist.\n\t\tsupport: support\n\t});\n\n\tif (typeof Symbol === \"function\") {\n\t\tjQuery.fn[Symbol.iterator] = arr[Symbol.iterator];\n\t}\n\n\t// Populate the class2type map\n\tjQuery.each(\"Boolean Number String Function Array Date RegExp Object Error Symbol\".split(\" \"),\n\t\tfunction (_i, name) {\n\t\t\tclass2type[\"[object \" + name + \"]\"] = name.toLowerCase();\n\t\t});\n\n\tfunction isArrayLike(obj) {\n\n\t\t// Support: real iOS 8.2 only (not reproducible in simulator)\n\t\t// `in` check used to prevent JIT error (gh-2145)\n\t\t// hasOwn isn't used here due to false negatives\n\t\t// regarding Nodelist length in IE\n\t\tvar length = !!obj && \"length\" in obj && obj.length,\n\t\t\ttype = toType(obj);\n\n\t\tif (isFunction(obj) || isWindow(obj)) {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn type === \"array\" || length === 0 ||\n\t\t\ttypeof length === \"number\" && length > 0 && (length - 1) in obj;\n\t}\n\n\n\tfunction nodeName(elem, name) {\n\n\t\treturn elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();\n\n\t}\n\tvar pop = arr.pop;\n\n\n\tvar sort = arr.sort;\n\n\n\tvar splice = arr.splice;\n\n\n\tvar whitespace = \"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\";\n\n\n\tvar rtrimCSS = new RegExp(\n\t\t\"^\" + whitespace + \"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\" + whitespace + \"+$\",\n\t\t\"g\"\n\t);\n\n\n\n\n\t// Note: an element does not contain itself\n\tjQuery.contains = function (a, b) {\n\t\tvar bup = b && b.parentNode;\n\n\t\treturn a === bup || !!(bup && bup.nodeType === 1 && (\n\n\t\t\t// Support: IE 9 - 11+\n\t\t\t// IE doesn't have `contains` on SVG.\n\t\t\ta.contains ?\n\t\t\t\ta.contains(bup) :\n\t\t\t\ta.compareDocumentPosition && a.compareDocumentPosition(bup) & 16\n\t\t));\n\t};\n\n\n\n\n\t// CSS string/identifier serialization\n\t// https://drafts.csswg.org/cssom/#common-serializing-idioms\n\tvar rcssescape = /([\\0-\\x1f\\x7f]|^-?\\d)|^-$|[^\\x80-\\uFFFF\\w-]/g;\n\n\tfunction fcssescape(ch, asCodePoint) {\n\t\tif (asCodePoint) {\n\n\t\t\t// U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER\n\t\t\tif (ch === \"\\0\") {\n\t\t\t\treturn \"\\uFFFD\";\n\t\t\t}\n\n\t\t\t// Control characters and (dependent upon position) numbers get escaped as code points\n\t\t\treturn ch.slice(0, -1) + \"\\\\\" + ch.charCodeAt(ch.length - 1).toString(16) + \" \";\n\t\t}\n\n\t\t// Other potentially-special ASCII characters get backslash-escaped\n\t\treturn \"\\\\\" + ch;\n\t}\n\n\tjQuery.escapeSelector = function (sel) {\n\t\treturn (sel + \"\").replace(rcssescape, fcssescape);\n\t};\n\n\n\n\n\tvar preferredDoc = document,\n\t\tpushNative = push;\n\n\t(function () {\n\n\t\tvar i,\n\t\t\tExpr,\n\t\t\toutermostContext,\n\t\t\tsortInput,\n\t\t\thasDuplicate,\n\t\t\tpush = pushNative,\n\n\t\t\t// Local document vars\n\t\t\tdocument,\n\t\t\tdocumentElement,\n\t\t\tdocumentIsHTML,\n\t\t\trbuggyQSA,\n\t\t\tmatches,\n\n\t\t\t// Instance-specific data\n\t\t\texpando = jQuery.expando,\n\t\t\tdirruns = 0,\n\t\t\tdone = 0,\n\t\t\tclassCache = createCache(),\n\t\t\ttokenCache = createCache(),\n\t\t\tcompilerCache = createCache(),\n\t\t\tnonnativeSelectorCache = createCache(),\n\t\t\tsortOrder = function (a, b) {\n\t\t\t\tif (a === b) {\n\t\t\t\t\thasDuplicate = true;\n\t\t\t\t}\n\t\t\t\treturn 0;\n\t\t\t},\n\n\t\t\tbooleans = \"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|\" +\n\t\t\t\t\"loop|multiple|open|readonly|required|scoped\",\n\n\t\t\t// Regular expressions\n\n\t\t\t// https://www.w3.org/TR/css-syntax-3/#ident-token-diagram\n\t\t\tidentifier = \"(?:\\\\\\\\[\\\\da-fA-F]{1,6}\" + whitespace +\n\t\t\t\t\"?|\\\\\\\\[^\\\\r\\\\n\\\\f]|[\\\\w-]|[^\\0-\\\\x7f])+\",\n\n\t\t\t// Attribute selectors: https://www.w3.org/TR/selectors/#attribute-selectors\n\t\t\tattributes = \"\\\\[\" + whitespace + \"*(\" + identifier + \")(?:\" + whitespace +\n\n\t\t\t\t// Operator (capture 2)\n\t\t\t\t\"*([*^$|!~]?=)\" + whitespace +\n\n\t\t\t\t// \"Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]\"\n\t\t\t\t\"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\" + identifier + \"))|)\" +\n\t\t\t\twhitespace + \"*\\\\]\",\n\n\t\t\tpseudos = \":(\" + identifier + \")(?:\\\\((\" +\n\n\t\t\t\t// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:\n\t\t\t\t// 1. quoted (capture 3; capture 4 or capture 5)\n\t\t\t\t\"('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|\" +\n\n\t\t\t\t// 2. simple (capture 6)\n\t\t\t\t\"((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\" + attributes + \")*)|\" +\n\n\t\t\t\t// 3. anything else (capture 2)\n\t\t\t\t\".*\" +\n\t\t\t\t\")\\\\)|)\",\n\n\t\t\t// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter\n\t\t\trwhitespace = new RegExp(whitespace + \"+\", \"g\"),\n\n\t\t\trcomma = new RegExp(\"^\" + whitespace + \"*,\" + whitespace + \"*\"),\n\t\t\trleadingCombinator = new RegExp(\"^\" + whitespace + \"*([>+~]|\" + whitespace + \")\" +\n\t\t\t\twhitespace + \"*\"),\n\t\t\trdescend = new RegExp(whitespace + \"|>\"),\n\n\t\t\trpseudo = new RegExp(pseudos),\n\t\t\tridentifier = new RegExp(\"^\" + identifier + \"$\"),\n\n\t\t\tmatchExpr = {\n\t\t\t\tID: new RegExp(\"^#(\" + identifier + \")\"),\n\t\t\t\tCLASS: new RegExp(\"^\\\\.(\" + identifier + \")\"),\n\t\t\t\tTAG: new RegExp(\"^(\" + identifier + \"|[*])\"),\n\t\t\t\tATTR: new RegExp(\"^\" + attributes),\n\t\t\t\tPSEUDO: new RegExp(\"^\" + pseudos),\n\t\t\t\tCHILD: new RegExp(\n\t\t\t\t\t\"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\" +\n\t\t\t\t\twhitespace + \"*(even|odd|(([+-]|)(\\\\d*)n|)\" + whitespace + \"*(?:([+-]|)\" +\n\t\t\t\t\twhitespace + \"*(\\\\d+)|))\" + whitespace + \"*\\\\)|)\", \"i\"),\n\t\t\t\tbool: new RegExp(\"^(?:\" + booleans + \")$\", \"i\"),\n\n\t\t\t\t// For use in libraries implementing .is()\n\t\t\t\t// We use this for POS matching in `select`\n\t\t\t\tneedsContext: new RegExp(\"^\" + whitespace +\n\t\t\t\t\t\"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\" + whitespace +\n\t\t\t\t\t\"*((?:-\\\\d)?\\\\d*)\" + whitespace + \"*\\\\)|)(?=[^-]|$)\", \"i\")\n\t\t\t},\n\n\t\t\trinputs = /^(?:input|select|textarea|button)$/i,\n\t\t\trheader = /^h\\d$/i,\n\n\t\t\t// Easily-parseable/retrievable ID or TAG or CLASS selectors\n\t\t\trquickExpr = /^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,\n\n\t\t\trsibling = /[+~]/,\n\n\t\t\t// CSS escapes\n\t\t\t// https://www.w3.org/TR/CSS21/syndata.html#escaped-characters\n\t\t\trunescape = new RegExp(\"\\\\\\\\[\\\\da-fA-F]{1,6}\" + whitespace +\n\t\t\t\t\"?|\\\\\\\\([^\\\\r\\\\n\\\\f])\", \"g\"),\n\t\t\tfunescape = function (escape, nonHex) {\n\t\t\t\tvar high = \"0x\" + escape.slice(1) - 0x10000;\n\n\t\t\t\tif (nonHex) {\n\n\t\t\t\t\t// Strip the backslash prefix from a non-hex escape sequence\n\t\t\t\t\treturn nonHex;\n\t\t\t\t}\n\n\t\t\t\t// Replace a hexadecimal escape sequence with the encoded Unicode code point\n\t\t\t\t// Support: IE <=11+\n\t\t\t\t// For values outside the Basic Multilingual Plane (BMP), manually construct a\n\t\t\t\t// surrogate pair\n\t\t\t\treturn high < 0 ?\n\t\t\t\t\tString.fromCharCode(high + 0x10000) :\n\t\t\t\t\tString.fromCharCode(high >> 10 | 0xD800, high & 0x3FF | 0xDC00);\n\t\t\t},\n\n\t\t\t// Used for iframes; see `setDocument`.\n\t\t\t// Support: IE 9 - 11+, Edge 12 - 18+\n\t\t\t// Removing the function wrapper causes a \"Permission Denied\"\n\t\t\t// error in IE/Edge.\n\t\t\tunloadHandler = function () {\n\t\t\t\tsetDocument();\n\t\t\t},\n\n\t\t\tinDisabledFieldset = addCombinator(\n\t\t\t\tfunction (elem) {\n\t\t\t\t\treturn elem.disabled === true && nodeName(elem, \"fieldset\");\n\t\t\t\t},\n\t\t\t\t{ dir: \"parentNode\", next: \"legend\" }\n\t\t\t);\n\n\t\t// Support: IE <=9 only\n\t\t// Accessing document.activeElement can throw unexpectedly\n\t\t// https://bugs.jquery.com/ticket/13393\n\t\tfunction safeActiveElement() {\n\t\t\ttry {\n\t\t\t\treturn document.activeElement;\n\t\t\t} catch (err) { }\n\t\t}\n\n\t\t// Optimize for push.apply( _, NodeList )\n\t\ttry {\n\t\t\tpush.apply(\n\t\t\t\t(arr = slice.call(preferredDoc.childNodes)),\n\t\t\t\tpreferredDoc.childNodes\n\t\t\t);\n\n\t\t\t// Support: Android <=4.0\n\t\t\t// Detect silently failing push.apply\n\t\t\t// eslint-disable-next-line no-unused-expressions\n\t\t\tarr[preferredDoc.childNodes.length].nodeType;\n\t\t} catch (e) {\n\t\t\tpush = {\n\t\t\t\tapply: function (target, els) {\n\t\t\t\t\tpushNative.apply(target, slice.call(els));\n\t\t\t\t},\n\t\t\t\tcall: function (target) {\n\t\t\t\t\tpushNative.apply(target, slice.call(arguments, 1));\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\n\t\tfunction find(selector, context, results, seed) {\n\t\t\tvar m, i, elem, nid, match, groups, newSelector,\n\t\t\t\tnewContext = context && context.ownerDocument,\n\n\t\t\t\t// nodeType defaults to 9, since context defaults to document\n\t\t\t\tnodeType = context ? context.nodeType : 9;\n\n\t\t\tresults = results || [];\n\n\t\t\t// Return early from calls with invalid selector or context\n\t\t\tif (typeof selector !== \"string\" || !selector ||\n\t\t\t\tnodeType !== 1 && nodeType !== 9 && nodeType !== 11) {\n\n\t\t\t\treturn results;\n\t\t\t}\n\n\t\t\t// Try to shortcut find operations (as opposed to filters) in HTML documents\n\t\t\tif (!seed) {\n\t\t\t\tsetDocument(context);\n\t\t\t\tcontext = context || document;\n\n\t\t\t\tif (documentIsHTML) {\n\n\t\t\t\t\t// If the selector is sufficiently simple, try using a \"get*By*\" DOM method\n\t\t\t\t\t// (excepting DocumentFragment context, where the methods don't exist)\n\t\t\t\t\tif (nodeType !== 11 && (match = rquickExpr.exec(selector))) {\n\n\t\t\t\t\t\t// ID selector\n\t\t\t\t\t\tif ((m = match[1])) {\n\n\t\t\t\t\t\t\t// Document context\n\t\t\t\t\t\t\tif (nodeType === 9) {\n\t\t\t\t\t\t\t\tif ((elem = context.getElementById(m))) {\n\n\t\t\t\t\t\t\t\t\t// Support: IE 9 only\n\t\t\t\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\t\t\t\tif (elem.id === m) {\n\t\t\t\t\t\t\t\t\t\tpush.call(results, elem);\n\t\t\t\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t// Element context\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t// Support: IE 9 only\n\t\t\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\t\t\tif (newContext && (elem = newContext.getElementById(m)) &&\n\t\t\t\t\t\t\t\t\tfind.contains(context, elem) &&\n\t\t\t\t\t\t\t\t\telem.id === m) {\n\n\t\t\t\t\t\t\t\t\tpush.call(results, elem);\n\t\t\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Type selector\n\t\t\t\t\t\t} else if (match[2]) {\n\t\t\t\t\t\t\tpush.apply(results, context.getElementsByTagName(selector));\n\t\t\t\t\t\t\treturn results;\n\n\t\t\t\t\t\t\t// Class selector\n\t\t\t\t\t\t} else if ((m = match[3]) && context.getElementsByClassName) {\n\t\t\t\t\t\t\tpush.apply(results, context.getElementsByClassName(m));\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Take advantage of querySelectorAll\n\t\t\t\t\tif (!nonnativeSelectorCache[selector + \" \"] &&\n\t\t\t\t\t\t(!rbuggyQSA || !rbuggyQSA.test(selector))) {\n\n\t\t\t\t\t\tnewSelector = selector;\n\t\t\t\t\t\tnewContext = context;\n\n\t\t\t\t\t\t// qSA considers elements outside a scoping root when evaluating child or\n\t\t\t\t\t\t// descendant combinators, which is not what we want.\n\t\t\t\t\t\t// In such cases, we work around the behavior by prefixing every selector in the\n\t\t\t\t\t\t// list with an ID selector referencing the scope context.\n\t\t\t\t\t\t// The technique has to be used as well when a leading combinator is used\n\t\t\t\t\t\t// as such selectors are not recognized by querySelectorAll.\n\t\t\t\t\t\t// Thanks to Andrew Dupont for this technique.\n\t\t\t\t\t\tif (nodeType === 1 &&\n\t\t\t\t\t\t\t(rdescend.test(selector) || rleadingCombinator.test(selector))) {\n\n\t\t\t\t\t\t\t// Expand context for sibling selectors\n\t\t\t\t\t\t\tnewContext = rsibling.test(selector) && testContext(context.parentNode) ||\n\t\t\t\t\t\t\t\tcontext;\n\n\t\t\t\t\t\t\t// We can use :scope instead of the ID hack if the browser\n\t\t\t\t\t\t\t// supports it & if we're not changing the context.\n\t\t\t\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when\n\t\t\t\t\t\t\t// strict-comparing two documents; shallow comparisons work.\n\t\t\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\t\t\tif (newContext != context || !support.scope) {\n\n\t\t\t\t\t\t\t\t// Capture the context ID, setting it first if necessary\n\t\t\t\t\t\t\t\tif ((nid = context.getAttribute(\"id\"))) {\n\t\t\t\t\t\t\t\t\tnid = jQuery.escapeSelector(nid);\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tcontext.setAttribute(\"id\", (nid = expando));\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Prefix every selector in the list\n\t\t\t\t\t\t\tgroups = tokenize(selector);\n\t\t\t\t\t\t\ti = groups.length;\n\t\t\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\t\t\tgroups[i] = (nid ? \"#\" + nid : \":scope\") + \" \" +\n\t\t\t\t\t\t\t\t\ttoSelector(groups[i]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tnewSelector = groups.join(\",\");\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tpush.apply(results,\n\t\t\t\t\t\t\t\tnewContext.querySelectorAll(newSelector)\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t} catch (qsaError) {\n\t\t\t\t\t\t\tnonnativeSelectorCache(selector, true);\n\t\t\t\t\t\t} finally {\n\t\t\t\t\t\t\tif (nid === expando) {\n\t\t\t\t\t\t\t\tcontext.removeAttribute(\"id\");\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// All others\n\t\t\treturn select(selector.replace(rtrimCSS, \"$1\"), context, results, seed);\n\t\t}\n\n\t\t/**\n\t\t * Create key-value caches of limited size\n\t\t * @returns {function(string, object)} Returns the Object data after storing it on itself with\n\t\t *\tproperty name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)\n\t\t *\tdeleting the oldest entry\n\t\t */\n\t\tfunction createCache() {\n\t\t\tvar keys = [];\n\n\t\t\tfunction cache(key, value) {\n\n\t\t\t\t// Use (key + \" \") to avoid collision with native prototype properties\n\t\t\t\t// (see https://github.com/jquery/sizzle/issues/157)\n\t\t\t\tif (keys.push(key + \" \") > Expr.cacheLength) {\n\n\t\t\t\t\t// Only keep the most recent entries\n\t\t\t\t\tdelete cache[keys.shift()];\n\t\t\t\t}\n\t\t\t\treturn (cache[key + \" \"] = value);\n\t\t\t}\n\t\t\treturn cache;\n\t\t}\n\n\t\t/**\n\t\t * Mark a function for special use by jQuery selector module\n\t\t * @param {Function} fn The function to mark\n\t\t */\n\t\tfunction markFunction(fn) {\n\t\t\tfn[expando] = true;\n\t\t\treturn fn;\n\t\t}\n\n\t\t/**\n\t\t * Support testing using an element\n\t\t * @param {Function} fn Passed the created element and returns a boolean result\n\t\t */\n\t\tfunction assert(fn) {\n\t\t\tvar el = document.createElement(\"fieldset\");\n\n\t\t\ttry {\n\t\t\t\treturn !!fn(el);\n\t\t\t} catch (e) {\n\t\t\t\treturn false;\n\t\t\t} finally {\n\n\t\t\t\t// Remove from its parent by default\n\t\t\t\tif (el.parentNode) {\n\t\t\t\t\tel.parentNode.removeChild(el);\n\t\t\t\t}\n\n\t\t\t\t// release memory in IE\n\t\t\t\tel = null;\n\t\t\t}\n\t\t}\n\n\t\t/**\n\t\t * Returns a function to use in pseudos for input types\n\t\t * @param {String} type\n\t\t */\n\t\tfunction createInputPseudo(type) {\n\t\t\treturn function (elem) {\n\t\t\t\treturn nodeName(elem, \"input\") && elem.type === type;\n\t\t\t};\n\t\t}\n\n\t\t/**\n\t\t * Returns a function to use in pseudos for buttons\n\t\t * @param {String} type\n\t\t */\n\t\tfunction createButtonPseudo(type) {\n\t\t\treturn function (elem) {\n\t\t\t\treturn (nodeName(elem, \"input\") || nodeName(elem, \"button\")) &&\n\t\t\t\t\telem.type === type;\n\t\t\t};\n\t\t}\n\n\t\t/**\n\t\t * Returns a function to use in pseudos for :enabled/:disabled\n\t\t * @param {Boolean} disabled true for :disabled; false for :enabled\n\t\t */\n\t\tfunction createDisabledPseudo(disabled) {\n\n\t\t\t// Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable\n\t\t\treturn function (elem) {\n\n\t\t\t\t// Only certain elements can match :enabled or :disabled\n\t\t\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled\n\t\t\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled\n\t\t\t\tif (\"form\" in elem) {\n\n\t\t\t\t\t// Check for inherited disabledness on relevant non-disabled elements:\n\t\t\t\t\t// * listed form-associated elements in a disabled fieldset\n\t\t\t\t\t//   https://html.spec.whatwg.org/multipage/forms.html#category-listed\n\t\t\t\t\t//   https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled\n\t\t\t\t\t// * option elements in a disabled optgroup\n\t\t\t\t\t//   https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled\n\t\t\t\t\t// All such elements have a \"form\" property.\n\t\t\t\t\tif (elem.parentNode && elem.disabled === false) {\n\n\t\t\t\t\t\t// Option elements defer to a parent optgroup if present\n\t\t\t\t\t\tif (\"label\" in elem) {\n\t\t\t\t\t\t\tif (\"label\" in elem.parentNode) {\n\t\t\t\t\t\t\t\treturn elem.parentNode.disabled === disabled;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\treturn elem.disabled === disabled;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Support: IE 6 - 11+\n\t\t\t\t\t\t// Use the isDisabled shortcut property to check for disabled fieldset ancestors\n\t\t\t\t\t\treturn elem.isDisabled === disabled ||\n\n\t\t\t\t\t\t\t// Where there is no isDisabled, check manually\n\t\t\t\t\t\t\telem.isDisabled !== !disabled &&\n\t\t\t\t\t\t\tinDisabledFieldset(elem) === disabled;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn elem.disabled === disabled;\n\n\t\t\t\t\t// Try to winnow out elements that can't be disabled before trusting the disabled property.\n\t\t\t\t\t// Some victims get caught in our net (label, legend, menu, track), but it shouldn't\n\t\t\t\t\t// even exist on them, let alone have a boolean value.\n\t\t\t\t} else if (\"label\" in elem) {\n\t\t\t\t\treturn elem.disabled === disabled;\n\t\t\t\t}\n\n\t\t\t\t// Remaining elements are neither :enabled nor :disabled\n\t\t\t\treturn false;\n\t\t\t};\n\t\t}\n\n\t\t/**\n\t\t * Returns a function to use in pseudos for positionals\n\t\t * @param {Function} fn\n\t\t */\n\t\tfunction createPositionalPseudo(fn) {\n\t\t\treturn markFunction(function (argument) {\n\t\t\t\targument = +argument;\n\t\t\t\treturn markFunction(function (seed, matches) {\n\t\t\t\t\tvar j,\n\t\t\t\t\t\tmatchIndexes = fn([], seed.length, argument),\n\t\t\t\t\t\ti = matchIndexes.length;\n\n\t\t\t\t\t// Match elements found at the specified indexes\n\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\tif (seed[(j = matchIndexes[i])]) {\n\t\t\t\t\t\t\tseed[j] = !(matches[j] = seed[j]);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\n\t\t/**\n\t\t * Checks a node for validity as a jQuery selector context\n\t\t * @param {Element|Object=} context\n\t\t * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value\n\t\t */\n\t\tfunction testContext(context) {\n\t\t\treturn context && typeof context.getElementsByTagName !== \"undefined\" && context;\n\t\t}\n\n\t\t/**\n\t\t * Sets document-related variables once based on the current document\n\t\t * @param {Element|Object} [node] An element or document object to use to set the document\n\t\t * @returns {Object} Returns the current document\n\t\t */\n\t\tfunction setDocument(node) {\n\t\t\tvar subWindow,\n\t\t\t\tdoc = node ? node.ownerDocument || node : preferredDoc;\n\n\t\t\t// Return early if doc is invalid or already selected\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tif (doc == document || doc.nodeType !== 9 || !doc.documentElement) {\n\t\t\t\treturn document;\n\t\t\t}\n\n\t\t\t// Update global variables\n\t\t\tdocument = doc;\n\t\t\tdocumentElement = document.documentElement;\n\t\t\tdocumentIsHTML = !jQuery.isXMLDoc(document);\n\n\t\t\t// Support: iOS 7 only, IE 9 - 11+\n\t\t\t// Older browsers didn't support unprefixed `matches`.\n\t\t\tmatches = documentElement.matches ||\n\t\t\t\tdocumentElement.webkitMatchesSelector ||\n\t\t\t\tdocumentElement.msMatchesSelector;\n\n\t\t\t// Support: IE 9 - 11+, Edge 12 - 18+\n\t\t\t// Accessing iframe documents after unload throws \"permission denied\" errors (see trac-13936)\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tif (preferredDoc != document &&\n\t\t\t\t(subWindow = document.defaultView) && subWindow.top !== subWindow) {\n\n\t\t\t\t// Support: IE 9 - 11+, Edge 12 - 18+\n\t\t\t\tsubWindow.addEventListener(\"unload\", unloadHandler);\n\t\t\t}\n\n\t\t\t// Support: IE <10\n\t\t\t// Check if getElementById returns elements by name\n\t\t\t// The broken getElementById methods don't pick up programmatically-set names,\n\t\t\t// so use a roundabout getElementsByName test\n\t\t\tsupport.getById = assert(function (el) {\n\t\t\t\tdocumentElement.appendChild(el).id = jQuery.expando;\n\t\t\t\treturn !document.getElementsByName ||\n\t\t\t\t\t!document.getElementsByName(jQuery.expando).length;\n\t\t\t});\n\n\t\t\t// Support: IE 9 only\n\t\t\t// Check to see if it's possible to do matchesSelector\n\t\t\t// on a disconnected node.\n\t\t\tsupport.disconnectedMatch = assert(function (el) {\n\t\t\t\treturn matches.call(el, \"*\");\n\t\t\t});\n\n\t\t\t// Support: IE 9 - 11+, Edge 12 - 18+\n\t\t\t// IE/Edge don't support the :scope pseudo-class.\n\t\t\tsupport.scope = assert(function () {\n\t\t\t\treturn document.querySelectorAll(\":scope\");\n\t\t\t});\n\n\t\t\t// Support: Chrome 105 - 111 only, Safari 15.4 - 16.3 only\n\t\t\t// Make sure the `:has()` argument is parsed unforgivingly.\n\t\t\t// We include `*` in the test to detect buggy implementations that are\n\t\t\t// _selectively_ forgiving (specifically when the list includes at least\n\t\t\t// one valid selector).\n\t\t\t// Note that we treat complete lack of support for `:has()` as if it were\n\t\t\t// spec-compliant support, which is fine because use of `:has()` in such\n\t\t\t// environments will fail in the qSA path and fall back to jQuery traversal\n\t\t\t// anyway.\n\t\t\tsupport.cssHas = assert(function () {\n\t\t\t\ttry {\n\t\t\t\t\tdocument.querySelector(\":has(*,:jqfake)\");\n\t\t\t\t\treturn false;\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t// ID filter and find\n\t\t\tif (support.getById) {\n\t\t\t\tExpr.filter.ID = function (id) {\n\t\t\t\t\tvar attrId = id.replace(runescape, funescape);\n\t\t\t\t\treturn function (elem) {\n\t\t\t\t\t\treturn elem.getAttribute(\"id\") === attrId;\n\t\t\t\t\t};\n\t\t\t\t};\n\t\t\t\tExpr.find.ID = function (id, context) {\n\t\t\t\t\tif (typeof context.getElementById !== \"undefined\" && documentIsHTML) {\n\t\t\t\t\t\tvar elem = context.getElementById(id);\n\t\t\t\t\t\treturn elem ? [elem] : [];\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t} else {\n\t\t\t\tExpr.filter.ID = function (id) {\n\t\t\t\t\tvar attrId = id.replace(runescape, funescape);\n\t\t\t\t\treturn function (elem) {\n\t\t\t\t\t\tvar node = typeof elem.getAttributeNode !== \"undefined\" &&\n\t\t\t\t\t\t\telem.getAttributeNode(\"id\");\n\t\t\t\t\t\treturn node && node.value === attrId;\n\t\t\t\t\t};\n\t\t\t\t};\n\n\t\t\t\t// Support: IE 6 - 7 only\n\t\t\t\t// getElementById is not reliable as a find shortcut\n\t\t\t\tExpr.find.ID = function (id, context) {\n\t\t\t\t\tif (typeof context.getElementById !== \"undefined\" && documentIsHTML) {\n\t\t\t\t\t\tvar node, i, elems,\n\t\t\t\t\t\t\telem = context.getElementById(id);\n\n\t\t\t\t\t\tif (elem) {\n\n\t\t\t\t\t\t\t// Verify the id attribute\n\t\t\t\t\t\t\tnode = elem.getAttributeNode(\"id\");\n\t\t\t\t\t\t\tif (node && node.value === id) {\n\t\t\t\t\t\t\t\treturn [elem];\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Fall back on getElementsByName\n\t\t\t\t\t\t\telems = context.getElementsByName(id);\n\t\t\t\t\t\t\ti = 0;\n\t\t\t\t\t\t\twhile ((elem = elems[i++])) {\n\t\t\t\t\t\t\t\tnode = elem.getAttributeNode(\"id\");\n\t\t\t\t\t\t\t\tif (node && node.value === id) {\n\t\t\t\t\t\t\t\t\treturn [elem];\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn [];\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\n\t\t\t// Tag\n\t\t\tExpr.find.TAG = function (tag, context) {\n\t\t\t\tif (typeof context.getElementsByTagName !== \"undefined\") {\n\t\t\t\t\treturn context.getElementsByTagName(tag);\n\n\t\t\t\t\t// DocumentFragment nodes don't have gEBTN\n\t\t\t\t} else {\n\t\t\t\t\treturn context.querySelectorAll(tag);\n\t\t\t\t}\n\t\t\t};\n\n\t\t\t// Class\n\t\t\tExpr.find.CLASS = function (className, context) {\n\t\t\t\tif (typeof context.getElementsByClassName !== \"undefined\" && documentIsHTML) {\n\t\t\t\t\treturn context.getElementsByClassName(className);\n\t\t\t\t}\n\t\t\t};\n\n\t\t\t/* QSA/matchesSelector\n\t\t\t---------------------------------------------------------------------- */\n\n\t\t\t// QSA and matchesSelector support\n\n\t\t\trbuggyQSA = [];\n\n\t\t\t// Build QSA regex\n\t\t\t// Regex strategy adopted from Diego Perini\n\t\t\tassert(function (el) {\n\n\t\t\t\tvar input;\n\n\t\t\t\tdocumentElement.appendChild(el).innerHTML =\n\t\t\t\t\t\"<a id='\" + expando + \"' href='' disabled='disabled'></a>\" +\n\t\t\t\t\t\"<select id='\" + expando + \"-\\r\\\\' disabled='disabled'>\" +\n\t\t\t\t\t\"<option selected=''></option></select>\";\n\n\t\t\t\t// Support: iOS <=7 - 8 only\n\t\t\t\t// Boolean attributes and \"value\" are not treated correctly in some XML documents\n\t\t\t\tif (!el.querySelectorAll(\"[selected]\").length) {\n\t\t\t\t\trbuggyQSA.push(\"\\\\[\" + whitespace + \"*(?:value|\" + booleans + \")\");\n\t\t\t\t}\n\n\t\t\t\t// Support: iOS <=7 - 8 only\n\t\t\t\tif (!el.querySelectorAll(\"[id~=\" + expando + \"-]\").length) {\n\t\t\t\t\trbuggyQSA.push(\"~=\");\n\t\t\t\t}\n\n\t\t\t\t// Support: iOS 8 only\n\t\t\t\t// https://bugs.webkit.org/show_bug.cgi?id=136851\n\t\t\t\t// In-page `selector#id sibling-combinator selector` fails\n\t\t\t\tif (!el.querySelectorAll(\"a#\" + expando + \"+*\").length) {\n\t\t\t\t\trbuggyQSA.push(\".#.+[+~]\");\n\t\t\t\t}\n\n\t\t\t\t// Support: Chrome <=105+, Firefox <=104+, Safari <=15.4+\n\t\t\t\t// In some of the document kinds, these selectors wouldn't work natively.\n\t\t\t\t// This is probably OK but for backwards compatibility we want to maintain\n\t\t\t\t// handling them through jQuery traversal in jQuery 3.x.\n\t\t\t\tif (!el.querySelectorAll(\":checked\").length) {\n\t\t\t\t\trbuggyQSA.push(\":checked\");\n\t\t\t\t}\n\n\t\t\t\t// Support: Windows 8 Native Apps\n\t\t\t\t// The type and name attributes are restricted during .innerHTML assignment\n\t\t\t\tinput = document.createElement(\"input\");\n\t\t\t\tinput.setAttribute(\"type\", \"hidden\");\n\t\t\t\tel.appendChild(input).setAttribute(\"name\", \"D\");\n\n\t\t\t\t// Support: IE 9 - 11+\n\t\t\t\t// IE's :disabled selector does not pick up the children of disabled fieldsets\n\t\t\t\t// Support: Chrome <=105+, Firefox <=104+, Safari <=15.4+\n\t\t\t\t// In some of the document kinds, these selectors wouldn't work natively.\n\t\t\t\t// This is probably OK but for backwards compatibility we want to maintain\n\t\t\t\t// handling them through jQuery traversal in jQuery 3.x.\n\t\t\t\tdocumentElement.appendChild(el).disabled = true;\n\t\t\t\tif (el.querySelectorAll(\":disabled\").length !== 2) {\n\t\t\t\t\trbuggyQSA.push(\":enabled\", \":disabled\");\n\t\t\t\t}\n\n\t\t\t\t// Support: IE 11+, Edge 15 - 18+\n\t\t\t\t// IE 11/Edge don't find elements on a `[name='']` query in some cases.\n\t\t\t\t// Adding a temporary attribute to the document before the selection works\n\t\t\t\t// around the issue.\n\t\t\t\t// Interestingly, IE 10 & older don't seem to have the issue.\n\t\t\t\tinput = document.createElement(\"input\");\n\t\t\t\tinput.setAttribute(\"name\", \"\");\n\t\t\t\tel.appendChild(input);\n\t\t\t\tif (!el.querySelectorAll(\"[name='']\").length) {\n\t\t\t\t\trbuggyQSA.push(\"\\\\[\" + whitespace + \"*name\" + whitespace + \"*=\" +\n\t\t\t\t\t\twhitespace + \"*(?:''|\\\"\\\")\");\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tif (!support.cssHas) {\n\n\t\t\t\t// Support: Chrome 105 - 110+, Safari 15.4 - 16.3+\n\t\t\t\t// Our regular `try-catch` mechanism fails to detect natively-unsupported\n\t\t\t\t// pseudo-classes inside `:has()` (such as `:has(:contains(\"Foo\"))`)\n\t\t\t\t// in browsers that parse the `:has()` argument as a forgiving selector list.\n\t\t\t\t// https://drafts.csswg.org/selectors/#relational now requires the argument\n\t\t\t\t// to be parsed unforgivingly, but browsers have not yet fully adjusted.\n\t\t\t\trbuggyQSA.push(\":has\");\n\t\t\t}\n\n\t\t\trbuggyQSA = rbuggyQSA.length && new RegExp(rbuggyQSA.join(\"|\"));\n\n\t\t\t/* Sorting\n\t\t\t---------------------------------------------------------------------- */\n\n\t\t\t// Document order sorting\n\t\t\tsortOrder = function (a, b) {\n\n\t\t\t\t// Flag for duplicate removal\n\t\t\t\tif (a === b) {\n\t\t\t\t\thasDuplicate = true;\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\n\t\t\t\t// Sort on method existence if only one input has compareDocumentPosition\n\t\t\t\tvar compare = !a.compareDocumentPosition - !b.compareDocumentPosition;\n\t\t\t\tif (compare) {\n\t\t\t\t\treturn compare;\n\t\t\t\t}\n\n\t\t\t\t// Calculate position if both inputs belong to the same document\n\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\tcompare = (a.ownerDocument || a) == (b.ownerDocument || b) ?\n\t\t\t\t\ta.compareDocumentPosition(b) :\n\n\t\t\t\t\t// Otherwise we know they are disconnected\n\t\t\t\t\t1;\n\n\t\t\t\t// Disconnected nodes\n\t\t\t\tif (compare & 1 ||\n\t\t\t\t\t(!support.sortDetached && b.compareDocumentPosition(a) === compare)) {\n\n\t\t\t\t\t// Choose the first element that is related to our preferred document\n\t\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\tif (a === document || a.ownerDocument == preferredDoc &&\n\t\t\t\t\t\tfind.contains(preferredDoc, a)) {\n\t\t\t\t\t\treturn -1;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\tif (b === document || b.ownerDocument == preferredDoc &&\n\t\t\t\t\t\tfind.contains(preferredDoc, b)) {\n\t\t\t\t\t\treturn 1;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Maintain original order\n\t\t\t\t\treturn sortInput ?\n\t\t\t\t\t\t(indexOf.call(sortInput, a) - indexOf.call(sortInput, b)) :\n\t\t\t\t\t\t0;\n\t\t\t\t}\n\n\t\t\t\treturn compare & 4 ? -1 : 1;\n\t\t\t};\n\n\t\t\treturn document;\n\t\t}\n\n\t\tfind.matches = function (expr, elements) {\n\t\t\treturn find(expr, null, null, elements);\n\t\t};\n\n\t\tfind.matchesSelector = function (elem, expr) {\n\t\t\tsetDocument(elem);\n\n\t\t\tif (documentIsHTML &&\n\t\t\t\t!nonnativeSelectorCache[expr + \" \"] &&\n\t\t\t\t(!rbuggyQSA || !rbuggyQSA.test(expr))) {\n\n\t\t\t\ttry {\n\t\t\t\t\tvar ret = matches.call(elem, expr);\n\n\t\t\t\t\t// IE 9's matchesSelector returns false on disconnected nodes\n\t\t\t\t\tif (ret || support.disconnectedMatch ||\n\n\t\t\t\t\t\t// As well, disconnected nodes are said to be in a document\n\t\t\t\t\t\t// fragment in IE 9\n\t\t\t\t\t\telem.document && elem.document.nodeType !== 11) {\n\t\t\t\t\t\treturn ret;\n\t\t\t\t\t}\n\t\t\t\t} catch (e) {\n\t\t\t\t\tnonnativeSelectorCache(expr, true);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn find(expr, document, null, [elem]).length > 0;\n\t\t};\n\n\t\tfind.contains = function (context, elem) {\n\n\t\t\t// Set document vars if needed\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tif ((context.ownerDocument || context) != document) {\n\t\t\t\tsetDocument(context);\n\t\t\t}\n\t\t\treturn jQuery.contains(context, elem);\n\t\t};\n\n\n\t\tfind.attr = function (elem, name) {\n\n\t\t\t// Set document vars if needed\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tif ((elem.ownerDocument || elem) != document) {\n\t\t\t\tsetDocument(elem);\n\t\t\t}\n\n\t\t\tvar fn = Expr.attrHandle[name.toLowerCase()],\n\n\t\t\t\t// Don't get fooled by Object.prototype properties (see trac-13807)\n\t\t\t\tval = fn && hasOwn.call(Expr.attrHandle, name.toLowerCase()) ?\n\t\t\t\t\tfn(elem, name, !documentIsHTML) :\n\t\t\t\t\tundefined;\n\n\t\t\tif (val !== undefined) {\n\t\t\t\treturn val;\n\t\t\t}\n\n\t\t\treturn elem.getAttribute(name);\n\t\t};\n\n\t\tfind.error = function (msg) {\n\t\t\tthrow new Error(\"Syntax error, unrecognized expression: \" + msg);\n\t\t};\n\n\t\t/**\n\t\t * Document sorting and removing duplicates\n\t\t * @param {ArrayLike} results\n\t\t */\n\t\tjQuery.uniqueSort = function (results) {\n\t\t\tvar elem,\n\t\t\t\tduplicates = [],\n\t\t\t\tj = 0,\n\t\t\t\ti = 0;\n\n\t\t\t// Unless we *know* we can detect duplicates, assume their presence\n\t\t\t//\n\t\t\t// Support: Android <=4.0+\n\t\t\t// Testing for detecting duplicates is unpredictable so instead assume we can't\n\t\t\t// depend on duplicate detection in all browsers without a stable sort.\n\t\t\thasDuplicate = !support.sortStable;\n\t\t\tsortInput = !support.sortStable && slice.call(results, 0);\n\t\t\tsort.call(results, sortOrder);\n\n\t\t\tif (hasDuplicate) {\n\t\t\t\twhile ((elem = results[i++])) {\n\t\t\t\t\tif (elem === results[i]) {\n\t\t\t\t\t\tj = duplicates.push(i);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\twhile (j--) {\n\t\t\t\t\tsplice.call(results, duplicates[j], 1);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Clear input after sorting to release objects\n\t\t\t// See https://github.com/jquery/sizzle/pull/225\n\t\t\tsortInput = null;\n\n\t\t\treturn results;\n\t\t};\n\n\t\tjQuery.fn.uniqueSort = function () {\n\t\t\treturn this.pushStack(jQuery.uniqueSort(slice.apply(this)));\n\t\t};\n\n\t\tExpr = jQuery.expr = {\n\n\t\t\t// Can be adjusted by the user\n\t\t\tcacheLength: 50,\n\n\t\t\tcreatePseudo: markFunction,\n\n\t\t\tmatch: matchExpr,\n\n\t\t\tattrHandle: {},\n\n\t\t\tfind: {},\n\n\t\t\trelative: {\n\t\t\t\t\">\": { dir: \"parentNode\", first: true },\n\t\t\t\t\" \": { dir: \"parentNode\" },\n\t\t\t\t\"+\": { dir: \"previousSibling\", first: true },\n\t\t\t\t\"~\": { dir: \"previousSibling\" }\n\t\t\t},\n\n\t\t\tpreFilter: {\n\t\t\t\tATTR: function (match) {\n\t\t\t\t\tmatch[1] = match[1].replace(runescape, funescape);\n\n\t\t\t\t\t// Move the given value to match[3] whether quoted or unquoted\n\t\t\t\t\tmatch[3] = (match[3] || match[4] || match[5] || \"\")\n\t\t\t\t\t\t.replace(runescape, funescape);\n\n\t\t\t\t\tif (match[2] === \"~=\") {\n\t\t\t\t\t\tmatch[3] = \" \" + match[3] + \" \";\n\t\t\t\t\t}\n\n\t\t\t\t\treturn match.slice(0, 4);\n\t\t\t\t},\n\n\t\t\t\tCHILD: function (match) {\n\n\t\t\t\t\t/* matches from matchExpr[\"CHILD\"]\n\t\t\t\t\t\t1 type (only|nth|...)\n\t\t\t\t\t\t2 what (child|of-type)\n\t\t\t\t\t\t3 argument (even|odd|\\d*|\\d*n([+-]\\d+)?|...)\n\t\t\t\t\t\t4 xn-component of xn+y argument ([+-]?\\d*n|)\n\t\t\t\t\t\t5 sign of xn-component\n\t\t\t\t\t\t6 x of xn-component\n\t\t\t\t\t\t7 sign of y-component\n\t\t\t\t\t\t8 y of y-component\n\t\t\t\t\t*/\n\t\t\t\t\tmatch[1] = match[1].toLowerCase();\n\n\t\t\t\t\tif (match[1].slice(0, 3) === \"nth\") {\n\n\t\t\t\t\t\t// nth-* requires argument\n\t\t\t\t\t\tif (!match[3]) {\n\t\t\t\t\t\t\tfind.error(match[0]);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// numeric x and y parameters for Expr.filter.CHILD\n\t\t\t\t\t\t// remember that false/true cast respectively to 0/1\n\t\t\t\t\t\tmatch[4] = +(match[4] ?\n\t\t\t\t\t\t\tmatch[5] + (match[6] || 1) :\n\t\t\t\t\t\t\t2 * (match[3] === \"even\" || match[3] === \"odd\")\n\t\t\t\t\t\t);\n\t\t\t\t\t\tmatch[5] = +((match[7] + match[8]) || match[3] === \"odd\");\n\n\t\t\t\t\t\t// other types prohibit arguments\n\t\t\t\t\t} else if (match[3]) {\n\t\t\t\t\t\tfind.error(match[0]);\n\t\t\t\t\t}\n\n\t\t\t\t\treturn match;\n\t\t\t\t},\n\n\t\t\t\tPSEUDO: function (match) {\n\t\t\t\t\tvar excess,\n\t\t\t\t\t\tunquoted = !match[6] && match[2];\n\n\t\t\t\t\tif (matchExpr.CHILD.test(match[0])) {\n\t\t\t\t\t\treturn null;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Accept quoted arguments as-is\n\t\t\t\t\tif (match[3]) {\n\t\t\t\t\t\tmatch[2] = match[4] || match[5] || \"\";\n\n\t\t\t\t\t\t// Strip excess characters from unquoted arguments\n\t\t\t\t\t} else if (unquoted && rpseudo.test(unquoted) &&\n\n\t\t\t\t\t\t// Get excess from tokenize (recursively)\n\t\t\t\t\t\t(excess = tokenize(unquoted, true)) &&\n\n\t\t\t\t\t\t// advance to the next closing parenthesis\n\t\t\t\t\t\t(excess = unquoted.indexOf(\")\", unquoted.length - excess) - unquoted.length)) {\n\n\t\t\t\t\t\t// excess is a negative index\n\t\t\t\t\t\tmatch[0] = match[0].slice(0, excess);\n\t\t\t\t\t\tmatch[2] = unquoted.slice(0, excess);\n\t\t\t\t\t}\n\n\t\t\t\t\t// Return only captures needed by the pseudo filter method (type and argument)\n\t\t\t\t\treturn match.slice(0, 3);\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tfilter: {\n\n\t\t\t\tTAG: function (nodeNameSelector) {\n\t\t\t\t\tvar expectedNodeName = nodeNameSelector.replace(runescape, funescape).toLowerCase();\n\t\t\t\t\treturn nodeNameSelector === \"*\" ?\n\t\t\t\t\t\tfunction () {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t} :\n\t\t\t\t\t\tfunction (elem) {\n\t\t\t\t\t\t\treturn nodeName(elem, expectedNodeName);\n\t\t\t\t\t\t};\n\t\t\t\t},\n\n\t\t\t\tCLASS: function (className) {\n\t\t\t\t\tvar pattern = classCache[className + \" \"];\n\n\t\t\t\t\treturn pattern ||\n\t\t\t\t\t\t(pattern = new RegExp(\"(^|\" + whitespace + \")\" + className +\n\t\t\t\t\t\t\t\"(\" + whitespace + \"|$)\")) &&\n\t\t\t\t\t\tclassCache(className, function (elem) {\n\t\t\t\t\t\t\treturn pattern.test(\n\t\t\t\t\t\t\t\ttypeof elem.className === \"string\" && elem.className ||\n\t\t\t\t\t\t\t\ttypeof elem.getAttribute !== \"undefined\" &&\n\t\t\t\t\t\t\t\telem.getAttribute(\"class\") ||\n\t\t\t\t\t\t\t\t\"\"\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t});\n\t\t\t\t},\n\n\t\t\t\tATTR: function (name, operator, check) {\n\t\t\t\t\treturn function (elem) {\n\t\t\t\t\t\tvar result = find.attr(elem, name);\n\n\t\t\t\t\t\tif (result == null) {\n\t\t\t\t\t\t\treturn operator === \"!=\";\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!operator) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tresult += \"\";\n\n\t\t\t\t\t\tif (operator === \"=\") {\n\t\t\t\t\t\t\treturn result === check;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (operator === \"!=\") {\n\t\t\t\t\t\t\treturn result !== check;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (operator === \"^=\") {\n\t\t\t\t\t\t\treturn check && result.indexOf(check) === 0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (operator === \"*=\") {\n\t\t\t\t\t\t\treturn check && result.indexOf(check) > -1;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (operator === \"$=\") {\n\t\t\t\t\t\t\treturn check && result.slice(-check.length) === check;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (operator === \"~=\") {\n\t\t\t\t\t\t\treturn (\" \" + result.replace(rwhitespace, \" \") + \" \")\n\t\t\t\t\t\t\t\t.indexOf(check) > -1;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (operator === \"|=\") {\n\t\t\t\t\t\t\treturn result === check || result.slice(0, check.length + 1) === check + \"-\";\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t};\n\t\t\t\t},\n\n\t\t\t\tCHILD: function (type, what, _argument, first, last) {\n\t\t\t\t\tvar simple = type.slice(0, 3) !== \"nth\",\n\t\t\t\t\t\tforward = type.slice(-4) !== \"last\",\n\t\t\t\t\t\tofType = what === \"of-type\";\n\n\t\t\t\t\treturn first === 1 && last === 0 ?\n\n\t\t\t\t\t\t// Shortcut for :nth-*(n)\n\t\t\t\t\t\tfunction (elem) {\n\t\t\t\t\t\t\treturn !!elem.parentNode;\n\t\t\t\t\t\t} :\n\n\t\t\t\t\t\tfunction (elem, _context, xml) {\n\t\t\t\t\t\t\tvar cache, outerCache, node, nodeIndex, start,\n\t\t\t\t\t\t\t\tdir = simple !== forward ? \"nextSibling\" : \"previousSibling\",\n\t\t\t\t\t\t\t\tparent = elem.parentNode,\n\t\t\t\t\t\t\t\tname = ofType && elem.nodeName.toLowerCase(),\n\t\t\t\t\t\t\t\tuseCache = !xml && !ofType,\n\t\t\t\t\t\t\t\tdiff = false;\n\n\t\t\t\t\t\t\tif (parent) {\n\n\t\t\t\t\t\t\t\t// :(first|last|only)-(child|of-type)\n\t\t\t\t\t\t\t\tif (simple) {\n\t\t\t\t\t\t\t\t\twhile (dir) {\n\t\t\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\t\t\twhile ((node = node[dir])) {\n\t\t\t\t\t\t\t\t\t\t\tif (ofType ?\n\t\t\t\t\t\t\t\t\t\t\t\tnodeName(node, name) :\n\t\t\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1) {\n\n\t\t\t\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t// Reverse direction for :only-* (if we haven't yet done so)\n\t\t\t\t\t\t\t\t\t\tstart = dir = type === \"only\" && !start && \"nextSibling\";\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tstart = [forward ? parent.firstChild : parent.lastChild];\n\n\t\t\t\t\t\t\t\t// non-xml :nth-child(...) stores cache data on `parent`\n\t\t\t\t\t\t\t\tif (forward && useCache) {\n\n\t\t\t\t\t\t\t\t\t// Seek `elem` from a previously-cached index\n\t\t\t\t\t\t\t\t\touterCache = parent[expando] || (parent[expando] = {});\n\t\t\t\t\t\t\t\t\tcache = outerCache[type] || [];\n\t\t\t\t\t\t\t\t\tnodeIndex = cache[0] === dirruns && cache[1];\n\t\t\t\t\t\t\t\t\tdiff = nodeIndex && cache[2];\n\t\t\t\t\t\t\t\t\tnode = nodeIndex && parent.childNodes[nodeIndex];\n\n\t\t\t\t\t\t\t\t\twhile ((node = ++nodeIndex && node && node[dir] ||\n\n\t\t\t\t\t\t\t\t\t\t// Fallback to seeking `elem` from the start\n\t\t\t\t\t\t\t\t\t\t(diff = nodeIndex = 0) || start.pop())) {\n\n\t\t\t\t\t\t\t\t\t\t// When found, cache indexes on `parent` and break\n\t\t\t\t\t\t\t\t\t\tif (node.nodeType === 1 && ++diff && node === elem) {\n\t\t\t\t\t\t\t\t\t\t\touterCache[type] = [dirruns, nodeIndex, diff];\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t// Use previously-cached element index if available\n\t\t\t\t\t\t\t\t\tif (useCache) {\n\t\t\t\t\t\t\t\t\t\touterCache = elem[expando] || (elem[expando] = {});\n\t\t\t\t\t\t\t\t\t\tcache = outerCache[type] || [];\n\t\t\t\t\t\t\t\t\t\tnodeIndex = cache[0] === dirruns && cache[1];\n\t\t\t\t\t\t\t\t\t\tdiff = nodeIndex;\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// xml :nth-child(...)\n\t\t\t\t\t\t\t\t\t// or :nth-last-child(...) or :nth(-last)?-of-type(...)\n\t\t\t\t\t\t\t\t\tif (diff === false) {\n\n\t\t\t\t\t\t\t\t\t\t// Use the same loop as above to seek `elem` from the start\n\t\t\t\t\t\t\t\t\t\twhile ((node = ++nodeIndex && node && node[dir] ||\n\t\t\t\t\t\t\t\t\t\t\t(diff = nodeIndex = 0) || start.pop())) {\n\n\t\t\t\t\t\t\t\t\t\t\tif ((ofType ?\n\t\t\t\t\t\t\t\t\t\t\t\tnodeName(node, name) :\n\t\t\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1) &&\n\t\t\t\t\t\t\t\t\t\t\t\t++diff) {\n\n\t\t\t\t\t\t\t\t\t\t\t\t// Cache the index of each encountered element\n\t\t\t\t\t\t\t\t\t\t\t\tif (useCache) {\n\t\t\t\t\t\t\t\t\t\t\t\t\touterCache = node[expando] ||\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t(node[expando] = {});\n\t\t\t\t\t\t\t\t\t\t\t\t\touterCache[type] = [dirruns, diff];\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\tif (node === elem) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t// Incorporate the offset, then check against cycle size\n\t\t\t\t\t\t\t\tdiff -= last;\n\t\t\t\t\t\t\t\treturn diff === first || (diff % first === 0 && diff / first >= 0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\t\t\t\t},\n\n\t\t\t\tPSEUDO: function (pseudo, argument) {\n\n\t\t\t\t\t// pseudo-class names are case-insensitive\n\t\t\t\t\t// https://www.w3.org/TR/selectors/#pseudo-classes\n\t\t\t\t\t// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters\n\t\t\t\t\t// Remember that setFilters inherits from pseudos\n\t\t\t\t\tvar args,\n\t\t\t\t\t\tfn = Expr.pseudos[pseudo] || Expr.setFilters[pseudo.toLowerCase()] ||\n\t\t\t\t\t\t\tfind.error(\"unsupported pseudo: \" + pseudo);\n\n\t\t\t\t\t// The user may use createPseudo to indicate that\n\t\t\t\t\t// arguments are needed to create the filter function\n\t\t\t\t\t// just as jQuery does\n\t\t\t\t\tif (fn[expando]) {\n\t\t\t\t\t\treturn fn(argument);\n\t\t\t\t\t}\n\n\t\t\t\t\t// But maintain support for old signatures\n\t\t\t\t\tif (fn.length > 1) {\n\t\t\t\t\t\targs = [pseudo, pseudo, \"\", argument];\n\t\t\t\t\t\treturn Expr.setFilters.hasOwnProperty(pseudo.toLowerCase()) ?\n\t\t\t\t\t\t\tmarkFunction(function (seed, matches) {\n\t\t\t\t\t\t\t\tvar idx,\n\t\t\t\t\t\t\t\t\tmatched = fn(seed, argument),\n\t\t\t\t\t\t\t\t\ti = matched.length;\n\t\t\t\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\t\t\t\tidx = indexOf.call(seed, matched[i]);\n\t\t\t\t\t\t\t\t\tseed[idx] = !(matches[idx] = matched[i]);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}) :\n\t\t\t\t\t\t\tfunction (elem) {\n\t\t\t\t\t\t\t\treturn fn(elem, 0, args);\n\t\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\treturn fn;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tpseudos: {\n\n\t\t\t\t// Potentially complex pseudos\n\t\t\t\tnot: markFunction(function (selector) {\n\n\t\t\t\t\t// Trim the selector passed to compile\n\t\t\t\t\t// to avoid treating leading and trailing\n\t\t\t\t\t// spaces as combinators\n\t\t\t\t\tvar input = [],\n\t\t\t\t\t\tresults = [],\n\t\t\t\t\t\tmatcher = compile(selector.replace(rtrimCSS, \"$1\"));\n\n\t\t\t\t\treturn matcher[expando] ?\n\t\t\t\t\t\tmarkFunction(function (seed, matches, _context, xml) {\n\t\t\t\t\t\t\tvar elem,\n\t\t\t\t\t\t\t\tunmatched = matcher(seed, null, xml, []),\n\t\t\t\t\t\t\t\ti = seed.length;\n\n\t\t\t\t\t\t\t// Match elements unmatched by `matcher`\n\t\t\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\t\t\tif ((elem = unmatched[i])) {\n\t\t\t\t\t\t\t\t\tseed[i] = !(matches[i] = elem);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}) :\n\t\t\t\t\t\tfunction (elem, _context, xml) {\n\t\t\t\t\t\t\tinput[0] = elem;\n\t\t\t\t\t\t\tmatcher(input, null, xml, results);\n\n\t\t\t\t\t\t\t// Don't keep the element\n\t\t\t\t\t\t\t// (see https://github.com/jquery/sizzle/issues/299)\n\t\t\t\t\t\t\tinput[0] = null;\n\t\t\t\t\t\t\treturn !results.pop();\n\t\t\t\t\t\t};\n\t\t\t\t}),\n\n\t\t\t\thas: markFunction(function (selector) {\n\t\t\t\t\treturn function (elem) {\n\t\t\t\t\t\treturn find(selector, elem).length > 0;\n\t\t\t\t\t};\n\t\t\t\t}),\n\n\t\t\t\tcontains: markFunction(function (text) {\n\t\t\t\t\ttext = text.replace(runescape, funescape);\n\t\t\t\t\treturn function (elem) {\n\t\t\t\t\t\treturn (elem.textContent || jQuery.text(elem)).indexOf(text) > -1;\n\t\t\t\t\t};\n\t\t\t\t}),\n\n\t\t\t\t// \"Whether an element is represented by a :lang() selector\n\t\t\t\t// is based solely on the element's language value\n\t\t\t\t// being equal to the identifier C,\n\t\t\t\t// or beginning with the identifier C immediately followed by \"-\".\n\t\t\t\t// The matching of C against the element's language value is performed case-insensitively.\n\t\t\t\t// The identifier C does not have to be a valid language name.\"\n\t\t\t\t// https://www.w3.org/TR/selectors/#lang-pseudo\n\t\t\t\tlang: markFunction(function (lang) {\n\n\t\t\t\t\t// lang value must be a valid identifier\n\t\t\t\t\tif (!ridentifier.test(lang || \"\")) {\n\t\t\t\t\t\tfind.error(\"unsupported lang: \" + lang);\n\t\t\t\t\t}\n\t\t\t\t\tlang = lang.replace(runescape, funescape).toLowerCase();\n\t\t\t\t\treturn function (elem) {\n\t\t\t\t\t\tvar elemLang;\n\t\t\t\t\t\tdo {\n\t\t\t\t\t\t\tif ((elemLang = documentIsHTML ?\n\t\t\t\t\t\t\t\telem.lang :\n\t\t\t\t\t\t\t\telem.getAttribute(\"xml:lang\") || elem.getAttribute(\"lang\"))) {\n\n\t\t\t\t\t\t\t\telemLang = elemLang.toLowerCase();\n\t\t\t\t\t\t\t\treturn elemLang === lang || elemLang.indexOf(lang + \"-\") === 0;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} while ((elem = elem.parentNode) && elem.nodeType === 1);\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t};\n\t\t\t\t}),\n\n\t\t\t\t// Miscellaneous\n\t\t\t\ttarget: function (elem) {\n\t\t\t\t\tvar hash = window.location && window.location.hash;\n\t\t\t\t\treturn hash && hash.slice(1) === elem.id;\n\t\t\t\t},\n\n\t\t\t\troot: function (elem) {\n\t\t\t\t\treturn elem === documentElement;\n\t\t\t\t},\n\n\t\t\t\tfocus: function (elem) {\n\t\t\t\t\treturn elem === safeActiveElement() &&\n\t\t\t\t\t\tdocument.hasFocus() &&\n\t\t\t\t\t\t!!(elem.type || elem.href || ~elem.tabIndex);\n\t\t\t\t},\n\n\t\t\t\t// Boolean properties\n\t\t\t\tenabled: createDisabledPseudo(false),\n\t\t\t\tdisabled: createDisabledPseudo(true),\n\n\t\t\t\tchecked: function (elem) {\n\n\t\t\t\t\t// In CSS3, :checked should return both checked and selected elements\n\t\t\t\t\t// https://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\t\t\treturn (nodeName(elem, \"input\") && !!elem.checked) ||\n\t\t\t\t\t\t(nodeName(elem, \"option\") && !!elem.selected);\n\t\t\t\t},\n\n\t\t\t\tselected: function (elem) {\n\n\t\t\t\t\t// Support: IE <=11+\n\t\t\t\t\t// Accessing the selectedIndex property\n\t\t\t\t\t// forces the browser to treat the default option as\n\t\t\t\t\t// selected when in an optgroup.\n\t\t\t\t\tif (elem.parentNode) {\n\t\t\t\t\t\t// eslint-disable-next-line no-unused-expressions\n\t\t\t\t\t\telem.parentNode.selectedIndex;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn elem.selected === true;\n\t\t\t\t},\n\n\t\t\t\t// Contents\n\t\t\t\tempty: function (elem) {\n\n\t\t\t\t\t// https://www.w3.org/TR/selectors/#empty-pseudo\n\t\t\t\t\t// :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),\n\t\t\t\t\t//   but not by others (comment: 8; processing instruction: 7; etc.)\n\t\t\t\t\t// nodeType < 6 works because attributes (2) do not appear as children\n\t\t\t\t\tfor (elem = elem.firstChild; elem; elem = elem.nextSibling) {\n\t\t\t\t\t\tif (elem.nodeType < 6) {\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn true;\n\t\t\t\t},\n\n\t\t\t\tparent: function (elem) {\n\t\t\t\t\treturn !Expr.pseudos.empty(elem);\n\t\t\t\t},\n\n\t\t\t\t// Element/input types\n\t\t\t\theader: function (elem) {\n\t\t\t\t\treturn rheader.test(elem.nodeName);\n\t\t\t\t},\n\n\t\t\t\tinput: function (elem) {\n\t\t\t\t\treturn rinputs.test(elem.nodeName);\n\t\t\t\t},\n\n\t\t\t\tbutton: function (elem) {\n\t\t\t\t\treturn nodeName(elem, \"input\") && elem.type === \"button\" ||\n\t\t\t\t\t\tnodeName(elem, \"button\");\n\t\t\t\t},\n\n\t\t\t\ttext: function (elem) {\n\t\t\t\t\tvar attr;\n\t\t\t\t\treturn nodeName(elem, \"input\") && elem.type === \"text\" &&\n\n\t\t\t\t\t\t// Support: IE <10 only\n\t\t\t\t\t\t// New HTML5 attribute values (e.g., \"search\") appear\n\t\t\t\t\t\t// with elem.type === \"text\"\n\t\t\t\t\t\t((attr = elem.getAttribute(\"type\")) == null ||\n\t\t\t\t\t\t\tattr.toLowerCase() === \"text\");\n\t\t\t\t},\n\n\t\t\t\t// Position-in-collection\n\t\t\t\tfirst: createPositionalPseudo(function () {\n\t\t\t\t\treturn [0];\n\t\t\t\t}),\n\n\t\t\t\tlast: createPositionalPseudo(function (_matchIndexes, length) {\n\t\t\t\t\treturn [length - 1];\n\t\t\t\t}),\n\n\t\t\t\teq: createPositionalPseudo(function (_matchIndexes, length, argument) {\n\t\t\t\t\treturn [argument < 0 ? argument + length : argument];\n\t\t\t\t}),\n\n\t\t\t\teven: createPositionalPseudo(function (matchIndexes, length) {\n\t\t\t\t\tvar i = 0;\n\t\t\t\t\tfor (; i < length; i += 2) {\n\t\t\t\t\t\tmatchIndexes.push(i);\n\t\t\t\t\t}\n\t\t\t\t\treturn matchIndexes;\n\t\t\t\t}),\n\n\t\t\t\todd: createPositionalPseudo(function (matchIndexes, length) {\n\t\t\t\t\tvar i = 1;\n\t\t\t\t\tfor (; i < length; i += 2) {\n\t\t\t\t\t\tmatchIndexes.push(i);\n\t\t\t\t\t}\n\t\t\t\t\treturn matchIndexes;\n\t\t\t\t}),\n\n\t\t\t\tlt: createPositionalPseudo(function (matchIndexes, length, argument) {\n\t\t\t\t\tvar i;\n\n\t\t\t\t\tif (argument < 0) {\n\t\t\t\t\t\ti = argument + length;\n\t\t\t\t\t} else if (argument > length) {\n\t\t\t\t\t\ti = length;\n\t\t\t\t\t} else {\n\t\t\t\t\t\ti = argument;\n\t\t\t\t\t}\n\n\t\t\t\t\tfor (; --i >= 0;) {\n\t\t\t\t\t\tmatchIndexes.push(i);\n\t\t\t\t\t}\n\t\t\t\t\treturn matchIndexes;\n\t\t\t\t}),\n\n\t\t\t\tgt: createPositionalPseudo(function (matchIndexes, length, argument) {\n\t\t\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\t\t\tfor (; ++i < length;) {\n\t\t\t\t\t\tmatchIndexes.push(i);\n\t\t\t\t\t}\n\t\t\t\t\treturn matchIndexes;\n\t\t\t\t})\n\t\t\t}\n\t\t};\n\n\t\tExpr.pseudos.nth = Expr.pseudos.eq;\n\n\t\t// Add button/input type pseudos\n\t\tfor (i in { radio: true, checkbox: true, file: true, password: true, image: true }) {\n\t\t\tExpr.pseudos[i] = createInputPseudo(i);\n\t\t}\n\t\tfor (i in { submit: true, reset: true }) {\n\t\t\tExpr.pseudos[i] = createButtonPseudo(i);\n\t\t}\n\n\t\t// Easy API for creating new setFilters\n\t\tfunction setFilters() { }\n\t\tsetFilters.prototype = Expr.filters = Expr.pseudos;\n\t\tExpr.setFilters = new setFilters();\n\n\t\tfunction tokenize(selector, parseOnly) {\n\t\t\tvar matched, match, tokens, type,\n\t\t\t\tsoFar, groups, preFilters,\n\t\t\t\tcached = tokenCache[selector + \" \"];\n\n\t\t\tif (cached) {\n\t\t\t\treturn parseOnly ? 0 : cached.slice(0);\n\t\t\t}\n\n\t\t\tsoFar = selector;\n\t\t\tgroups = [];\n\t\t\tpreFilters = Expr.preFilter;\n\n\t\t\twhile (soFar) {\n\n\t\t\t\t// Comma and first run\n\t\t\t\tif (!matched || (match = rcomma.exec(soFar))) {\n\t\t\t\t\tif (match) {\n\n\t\t\t\t\t\t// Don't consume trailing commas as valid\n\t\t\t\t\t\tsoFar = soFar.slice(match[0].length) || soFar;\n\t\t\t\t\t}\n\t\t\t\t\tgroups.push((tokens = []));\n\t\t\t\t}\n\n\t\t\t\tmatched = false;\n\n\t\t\t\t// Combinators\n\t\t\t\tif ((match = rleadingCombinator.exec(soFar))) {\n\t\t\t\t\tmatched = match.shift();\n\t\t\t\t\ttokens.push({\n\t\t\t\t\t\tvalue: matched,\n\n\t\t\t\t\t\t// Cast descendant combinators to space\n\t\t\t\t\t\ttype: match[0].replace(rtrimCSS, \" \")\n\t\t\t\t\t});\n\t\t\t\t\tsoFar = soFar.slice(matched.length);\n\t\t\t\t}\n\n\t\t\t\t// Filters\n\t\t\t\tfor (type in Expr.filter) {\n\t\t\t\t\tif ((match = matchExpr[type].exec(soFar)) && (!preFilters[type] ||\n\t\t\t\t\t\t(match = preFilters[type](match)))) {\n\t\t\t\t\t\tmatched = match.shift();\n\t\t\t\t\t\ttokens.push({\n\t\t\t\t\t\t\tvalue: matched,\n\t\t\t\t\t\t\ttype: type,\n\t\t\t\t\t\t\tmatches: match\n\t\t\t\t\t\t});\n\t\t\t\t\t\tsoFar = soFar.slice(matched.length);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (!matched) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Return the length of the invalid excess\n\t\t\t// if we're just parsing\n\t\t\t// Otherwise, throw an error or return tokens\n\t\t\tif (parseOnly) {\n\t\t\t\treturn soFar.length;\n\t\t\t}\n\n\t\t\treturn soFar ?\n\t\t\t\tfind.error(selector) :\n\n\t\t\t\t// Cache the tokens\n\t\t\t\ttokenCache(selector, groups).slice(0);\n\t\t}\n\n\t\tfunction toSelector(tokens) {\n\t\t\tvar i = 0,\n\t\t\t\tlen = tokens.length,\n\t\t\t\tselector = \"\";\n\t\t\tfor (; i < len; i++) {\n\t\t\t\tselector += tokens[i].value;\n\t\t\t}\n\t\t\treturn selector;\n\t\t}\n\n\t\tfunction addCombinator(matcher, combinator, base) {\n\t\t\tvar dir = combinator.dir,\n\t\t\t\tskip = combinator.next,\n\t\t\t\tkey = skip || dir,\n\t\t\t\tcheckNonElements = base && key === \"parentNode\",\n\t\t\t\tdoneName = done++;\n\n\t\t\treturn combinator.first ?\n\n\t\t\t\t// Check against closest ancestor/preceding element\n\t\t\t\tfunction (elem, context, xml) {\n\t\t\t\t\twhile ((elem = elem[dir])) {\n\t\t\t\t\t\tif (elem.nodeType === 1 || checkNonElements) {\n\t\t\t\t\t\t\treturn matcher(elem, context, xml);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn false;\n\t\t\t\t} :\n\n\t\t\t\t// Check against all ancestor/preceding elements\n\t\t\t\tfunction (elem, context, xml) {\n\t\t\t\t\tvar oldCache, outerCache,\n\t\t\t\t\t\tnewCache = [dirruns, doneName];\n\n\t\t\t\t\t// We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching\n\t\t\t\t\tif (xml) {\n\t\t\t\t\t\twhile ((elem = elem[dir])) {\n\t\t\t\t\t\t\tif (elem.nodeType === 1 || checkNonElements) {\n\t\t\t\t\t\t\t\tif (matcher(elem, context, xml)) {\n\t\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\twhile ((elem = elem[dir])) {\n\t\t\t\t\t\t\tif (elem.nodeType === 1 || checkNonElements) {\n\t\t\t\t\t\t\t\touterCache = elem[expando] || (elem[expando] = {});\n\n\t\t\t\t\t\t\t\tif (skip && nodeName(elem, skip)) {\n\t\t\t\t\t\t\t\t\telem = elem[dir] || elem;\n\t\t\t\t\t\t\t\t} else if ((oldCache = outerCache[key]) &&\n\t\t\t\t\t\t\t\t\toldCache[0] === dirruns && oldCache[1] === doneName) {\n\n\t\t\t\t\t\t\t\t\t// Assign to newCache so results back-propagate to previous elements\n\t\t\t\t\t\t\t\t\treturn (newCache[2] = oldCache[2]);\n\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t// Reuse newcache so results back-propagate to previous elements\n\t\t\t\t\t\t\t\t\touterCache[key] = newCache;\n\n\t\t\t\t\t\t\t\t\t// A match means we're done; a fail means we have to keep checking\n\t\t\t\t\t\t\t\t\tif ((newCache[2] = matcher(elem, context, xml))) {\n\t\t\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn false;\n\t\t\t\t};\n\t\t}\n\n\t\tfunction elementMatcher(matchers) {\n\t\t\treturn matchers.length > 1 ?\n\t\t\t\tfunction (elem, context, xml) {\n\t\t\t\t\tvar i = matchers.length;\n\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\tif (!matchers[i](elem, context, xml)) {\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn true;\n\t\t\t\t} :\n\t\t\t\tmatchers[0];\n\t\t}\n\n\t\tfunction multipleContexts(selector, contexts, results) {\n\t\t\tvar i = 0,\n\t\t\t\tlen = contexts.length;\n\t\t\tfor (; i < len; i++) {\n\t\t\t\tfind(selector, contexts[i], results);\n\t\t\t}\n\t\t\treturn results;\n\t\t}\n\n\t\tfunction condense(unmatched, map, filter, context, xml) {\n\t\t\tvar elem,\n\t\t\t\tnewUnmatched = [],\n\t\t\t\ti = 0,\n\t\t\t\tlen = unmatched.length,\n\t\t\t\tmapped = map != null;\n\n\t\t\tfor (; i < len; i++) {\n\t\t\t\tif ((elem = unmatched[i])) {\n\t\t\t\t\tif (!filter || filter(elem, context, xml)) {\n\t\t\t\t\t\tnewUnmatched.push(elem);\n\t\t\t\t\t\tif (mapped) {\n\t\t\t\t\t\t\tmap.push(i);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn newUnmatched;\n\t\t}\n\n\t\tfunction setMatcher(preFilter, selector, matcher, postFilter, postFinder, postSelector) {\n\t\t\tif (postFilter && !postFilter[expando]) {\n\t\t\t\tpostFilter = setMatcher(postFilter);\n\t\t\t}\n\t\t\tif (postFinder && !postFinder[expando]) {\n\t\t\t\tpostFinder = setMatcher(postFinder, postSelector);\n\t\t\t}\n\t\t\treturn markFunction(function (seed, results, context, xml) {\n\t\t\t\tvar temp, i, elem, matcherOut,\n\t\t\t\t\tpreMap = [],\n\t\t\t\t\tpostMap = [],\n\t\t\t\t\tpreexisting = results.length,\n\n\t\t\t\t\t// Get initial elements from seed or context\n\t\t\t\t\telems = seed ||\n\t\t\t\t\t\tmultipleContexts(selector || \"*\",\n\t\t\t\t\t\t\tcontext.nodeType ? [context] : context, []),\n\n\t\t\t\t\t// Prefilter to get matcher input, preserving a map for seed-results synchronization\n\t\t\t\t\tmatcherIn = preFilter && (seed || !selector) ?\n\t\t\t\t\t\tcondense(elems, preMap, preFilter, context, xml) :\n\t\t\t\t\t\telems;\n\n\t\t\t\tif (matcher) {\n\n\t\t\t\t\t// If we have a postFinder, or filtered seed, or non-seed postFilter\n\t\t\t\t\t// or preexisting results,\n\t\t\t\t\tmatcherOut = postFinder || (seed ? preFilter : preexisting || postFilter) ?\n\n\t\t\t\t\t\t// ...intermediate processing is necessary\n\t\t\t\t\t\t[] :\n\n\t\t\t\t\t\t// ...otherwise use results directly\n\t\t\t\t\t\tresults;\n\n\t\t\t\t\t// Find primary matches\n\t\t\t\t\tmatcher(matcherIn, matcherOut, context, xml);\n\t\t\t\t} else {\n\t\t\t\t\tmatcherOut = matcherIn;\n\t\t\t\t}\n\n\t\t\t\t// Apply postFilter\n\t\t\t\tif (postFilter) {\n\t\t\t\t\ttemp = condense(matcherOut, postMap);\n\t\t\t\t\tpostFilter(temp, [], context, xml);\n\n\t\t\t\t\t// Un-match failing elements by moving them back to matcherIn\n\t\t\t\t\ti = temp.length;\n\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\tif ((elem = temp[i])) {\n\t\t\t\t\t\t\tmatcherOut[postMap[i]] = !(matcherIn[postMap[i]] = elem);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (seed) {\n\t\t\t\t\tif (postFinder || preFilter) {\n\t\t\t\t\t\tif (postFinder) {\n\n\t\t\t\t\t\t\t// Get the final matcherOut by condensing this intermediate into postFinder contexts\n\t\t\t\t\t\t\ttemp = [];\n\t\t\t\t\t\t\ti = matcherOut.length;\n\t\t\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\t\t\tif ((elem = matcherOut[i])) {\n\n\t\t\t\t\t\t\t\t\t// Restore matcherIn since elem is not yet a final match\n\t\t\t\t\t\t\t\t\ttemp.push((matcherIn[i] = elem));\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tpostFinder(null, (matcherOut = []), temp, xml);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Move matched elements from seed to results to keep them synchronized\n\t\t\t\t\t\ti = matcherOut.length;\n\t\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\t\tif ((elem = matcherOut[i]) &&\n\t\t\t\t\t\t\t\t(temp = postFinder ? indexOf.call(seed, elem) : preMap[i]) > -1) {\n\n\t\t\t\t\t\t\t\tseed[temp] = !(results[temp] = elem);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Add elements to results, through postFinder if defined\n\t\t\t\t} else {\n\t\t\t\t\tmatcherOut = condense(\n\t\t\t\t\t\tmatcherOut === results ?\n\t\t\t\t\t\t\tmatcherOut.splice(preexisting, matcherOut.length) :\n\t\t\t\t\t\t\tmatcherOut\n\t\t\t\t\t);\n\t\t\t\t\tif (postFinder) {\n\t\t\t\t\t\tpostFinder(null, results, matcherOut, xml);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tpush.apply(results, matcherOut);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tfunction matcherFromTokens(tokens) {\n\t\t\tvar checkContext, matcher, j,\n\t\t\t\tlen = tokens.length,\n\t\t\t\tleadingRelative = Expr.relative[tokens[0].type],\n\t\t\t\timplicitRelative = leadingRelative || Expr.relative[\" \"],\n\t\t\t\ti = leadingRelative ? 1 : 0,\n\n\t\t\t\t// The foundational matcher ensures that elements are reachable from top-level context(s)\n\t\t\t\tmatchContext = addCombinator(function (elem) {\n\t\t\t\t\treturn elem === checkContext;\n\t\t\t\t}, implicitRelative, true),\n\t\t\t\tmatchAnyContext = addCombinator(function (elem) {\n\t\t\t\t\treturn indexOf.call(checkContext, elem) > -1;\n\t\t\t\t}, implicitRelative, true),\n\t\t\t\tmatchers = [function (elem, context, xml) {\n\n\t\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\tvar ret = (!leadingRelative && (xml || context != outermostContext)) || (\n\t\t\t\t\t\t(checkContext = context).nodeType ?\n\t\t\t\t\t\t\tmatchContext(elem, context, xml) :\n\t\t\t\t\t\t\tmatchAnyContext(elem, context, xml));\n\n\t\t\t\t\t// Avoid hanging onto element\n\t\t\t\t\t// (see https://github.com/jquery/sizzle/issues/299)\n\t\t\t\t\tcheckContext = null;\n\t\t\t\t\treturn ret;\n\t\t\t\t}];\n\n\t\t\tfor (; i < len; i++) {\n\t\t\t\tif ((matcher = Expr.relative[tokens[i].type])) {\n\t\t\t\t\tmatchers = [addCombinator(elementMatcher(matchers), matcher)];\n\t\t\t\t} else {\n\t\t\t\t\tmatcher = Expr.filter[tokens[i].type].apply(null, tokens[i].matches);\n\n\t\t\t\t\t// Return special upon seeing a positional matcher\n\t\t\t\t\tif (matcher[expando]) {\n\n\t\t\t\t\t\t// Find the next relative operator (if any) for proper handling\n\t\t\t\t\t\tj = ++i;\n\t\t\t\t\t\tfor (; j < len; j++) {\n\t\t\t\t\t\t\tif (Expr.relative[tokens[j].type]) {\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn setMatcher(\n\t\t\t\t\t\t\ti > 1 && elementMatcher(matchers),\n\t\t\t\t\t\t\ti > 1 && toSelector(\n\n\t\t\t\t\t\t\t\t// If the preceding token was a descendant combinator, insert an implicit any-element `*`\n\t\t\t\t\t\t\t\ttokens.slice(0, i - 1)\n\t\t\t\t\t\t\t\t\t.concat({ value: tokens[i - 2].type === \" \" ? \"*\" : \"\" })\n\t\t\t\t\t\t\t).replace(rtrimCSS, \"$1\"),\n\t\t\t\t\t\t\tmatcher,\n\t\t\t\t\t\t\ti < j && matcherFromTokens(tokens.slice(i, j)),\n\t\t\t\t\t\t\tj < len && matcherFromTokens((tokens = tokens.slice(j))),\n\t\t\t\t\t\t\tj < len && toSelector(tokens)\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\tmatchers.push(matcher);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn elementMatcher(matchers);\n\t\t}\n\n\t\tfunction matcherFromGroupMatchers(elementMatchers, setMatchers) {\n\t\t\tvar bySet = setMatchers.length > 0,\n\t\t\t\tbyElement = elementMatchers.length > 0,\n\t\t\t\tsuperMatcher = function (seed, context, xml, results, outermost) {\n\t\t\t\t\tvar elem, j, matcher,\n\t\t\t\t\t\tmatchedCount = 0,\n\t\t\t\t\t\ti = \"0\",\n\t\t\t\t\t\tunmatched = seed && [],\n\t\t\t\t\t\tsetMatched = [],\n\t\t\t\t\t\tcontextBackup = outermostContext,\n\n\t\t\t\t\t\t// We must always have either seed elements or outermost context\n\t\t\t\t\t\telems = seed || byElement && Expr.find.TAG(\"*\", outermost),\n\n\t\t\t\t\t\t// Use integer dirruns iff this is the outermost matcher\n\t\t\t\t\t\tdirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1),\n\t\t\t\t\t\tlen = elems.length;\n\n\t\t\t\t\tif (outermost) {\n\n\t\t\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\t\toutermostContext = context == document || context || outermost;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Add elements passing elementMatchers directly to results\n\t\t\t\t\t// Support: iOS <=7 - 9 only\n\t\t\t\t\t// Tolerate NodeList properties (IE: \"length\"; Safari: <number>) matching\n\t\t\t\t\t// elements by id. (see trac-14142)\n\t\t\t\t\tfor (; i !== len && (elem = elems[i]) != null; i++) {\n\t\t\t\t\t\tif (byElement && elem) {\n\t\t\t\t\t\t\tj = 0;\n\n\t\t\t\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\t\t\tif (!context && elem.ownerDocument != document) {\n\t\t\t\t\t\t\t\tsetDocument(elem);\n\t\t\t\t\t\t\t\txml = !documentIsHTML;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\twhile ((matcher = elementMatchers[j++])) {\n\t\t\t\t\t\t\t\tif (matcher(elem, context || document, xml)) {\n\t\t\t\t\t\t\t\t\tpush.call(results, elem);\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (outermost) {\n\t\t\t\t\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Track unmatched elements for set filters\n\t\t\t\t\t\tif (bySet) {\n\n\t\t\t\t\t\t\t// They will have gone through all possible matchers\n\t\t\t\t\t\t\tif ((elem = !matcher && elem)) {\n\t\t\t\t\t\t\t\tmatchedCount--;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Lengthen the array for every element, matched or not\n\t\t\t\t\t\t\tif (seed) {\n\t\t\t\t\t\t\t\tunmatched.push(elem);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// `i` is now the count of elements visited above, and adding it to `matchedCount`\n\t\t\t\t\t// makes the latter nonnegative.\n\t\t\t\t\tmatchedCount += i;\n\n\t\t\t\t\t// Apply set filters to unmatched elements\n\t\t\t\t\t// NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`\n\t\t\t\t\t// equals `i`), unless we didn't visit _any_ elements in the above loop because we have\n\t\t\t\t\t// no element matchers and no seed.\n\t\t\t\t\t// Incrementing an initially-string \"0\" `i` allows `i` to remain a string only in that\n\t\t\t\t\t// case, which will result in a \"00\" `matchedCount` that differs from `i` but is also\n\t\t\t\t\t// numerically zero.\n\t\t\t\t\tif (bySet && i !== matchedCount) {\n\t\t\t\t\t\tj = 0;\n\t\t\t\t\t\twhile ((matcher = setMatchers[j++])) {\n\t\t\t\t\t\t\tmatcher(unmatched, setMatched, context, xml);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (seed) {\n\n\t\t\t\t\t\t\t// Reintegrate element matches to eliminate the need for sorting\n\t\t\t\t\t\t\tif (matchedCount > 0) {\n\t\t\t\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\t\t\t\tif (!(unmatched[i] || setMatched[i])) {\n\t\t\t\t\t\t\t\t\t\tsetMatched[i] = pop.call(results);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Discard index placeholder values to get only actual matches\n\t\t\t\t\t\t\tsetMatched = condense(setMatched);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Add matches to results\n\t\t\t\t\t\tpush.apply(results, setMatched);\n\n\t\t\t\t\t\t// Seedless set matches succeeding multiple successful matchers stipulate sorting\n\t\t\t\t\t\tif (outermost && !seed && setMatched.length > 0 &&\n\t\t\t\t\t\t\t(matchedCount + setMatchers.length) > 1) {\n\n\t\t\t\t\t\t\tjQuery.uniqueSort(results);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Override manipulation of globals by nested matchers\n\t\t\t\t\tif (outermost) {\n\t\t\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\t\t\toutermostContext = contextBackup;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn unmatched;\n\t\t\t\t};\n\n\t\t\treturn bySet ?\n\t\t\t\tmarkFunction(superMatcher) :\n\t\t\t\tsuperMatcher;\n\t\t}\n\n\t\tfunction compile(selector, match /* Internal Use Only */) {\n\t\t\tvar i,\n\t\t\t\tsetMatchers = [],\n\t\t\t\telementMatchers = [],\n\t\t\t\tcached = compilerCache[selector + \" \"];\n\n\t\t\tif (!cached) {\n\n\t\t\t\t// Generate a function of recursive functions that can be used to check each element\n\t\t\t\tif (!match) {\n\t\t\t\t\tmatch = tokenize(selector);\n\t\t\t\t}\n\t\t\t\ti = match.length;\n\t\t\t\twhile (i--) {\n\t\t\t\t\tcached = matcherFromTokens(match[i]);\n\t\t\t\t\tif (cached[expando]) {\n\t\t\t\t\t\tsetMatchers.push(cached);\n\t\t\t\t\t} else {\n\t\t\t\t\t\telementMatchers.push(cached);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Cache the compiled function\n\t\t\t\tcached = compilerCache(selector,\n\t\t\t\t\tmatcherFromGroupMatchers(elementMatchers, setMatchers));\n\n\t\t\t\t// Save selector and tokenization\n\t\t\t\tcached.selector = selector;\n\t\t\t}\n\t\t\treturn cached;\n\t\t}\n\n\t\t/**\n\t\t * A low-level selection function that works with jQuery's compiled\n\t\t *  selector functions\n\t\t * @param {String|Function} selector A selector or a pre-compiled\n\t\t *  selector function built with jQuery selector compile\n\t\t * @param {Element} context\n\t\t * @param {Array} [results]\n\t\t * @param {Array} [seed] A set of elements to match against\n\t\t */\n\t\tfunction select(selector, context, results, seed) {\n\t\t\tvar i, tokens, token, type, find,\n\t\t\t\tcompiled = typeof selector === \"function\" && selector,\n\t\t\t\tmatch = !seed && tokenize((selector = compiled.selector || selector));\n\n\t\t\tresults = results || [];\n\n\t\t\t// Try to minimize operations if there is only one selector in the list and no seed\n\t\t\t// (the latter of which guarantees us context)\n\t\t\tif (match.length === 1) {\n\n\t\t\t\t// Reduce context if the leading compound selector is an ID\n\t\t\t\ttokens = match[0] = match[0].slice(0);\n\t\t\t\tif (tokens.length > 2 && (token = tokens[0]).type === \"ID\" &&\n\t\t\t\t\tcontext.nodeType === 9 && documentIsHTML && Expr.relative[tokens[1].type]) {\n\n\t\t\t\t\tcontext = (Expr.find.ID(\n\t\t\t\t\t\ttoken.matches[0].replace(runescape, funescape),\n\t\t\t\t\t\tcontext\n\t\t\t\t\t) || [])[0];\n\t\t\t\t\tif (!context) {\n\t\t\t\t\t\treturn results;\n\n\t\t\t\t\t\t// Precompiled matchers will still verify ancestry, so step up a level\n\t\t\t\t\t} else if (compiled) {\n\t\t\t\t\t\tcontext = context.parentNode;\n\t\t\t\t\t}\n\n\t\t\t\t\tselector = selector.slice(tokens.shift().value.length);\n\t\t\t\t}\n\n\t\t\t\t// Fetch a seed set for right-to-left matching\n\t\t\t\ti = matchExpr.needsContext.test(selector) ? 0 : tokens.length;\n\t\t\t\twhile (i--) {\n\t\t\t\t\ttoken = tokens[i];\n\n\t\t\t\t\t// Abort if we hit a combinator\n\t\t\t\t\tif (Expr.relative[(type = token.type)]) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tif ((find = Expr.find[type])) {\n\n\t\t\t\t\t\t// Search, expanding context for leading sibling combinators\n\t\t\t\t\t\tif ((seed = find(\n\t\t\t\t\t\t\ttoken.matches[0].replace(runescape, funescape),\n\t\t\t\t\t\t\trsibling.test(tokens[0].type) &&\n\t\t\t\t\t\t\ttestContext(context.parentNode) || context\n\t\t\t\t\t\t))) {\n\n\t\t\t\t\t\t\t// If seed is empty or no tokens remain, we can return early\n\t\t\t\t\t\t\ttokens.splice(i, 1);\n\t\t\t\t\t\t\tselector = seed.length && toSelector(tokens);\n\t\t\t\t\t\t\tif (!selector) {\n\t\t\t\t\t\t\t\tpush.apply(results, seed);\n\t\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Compile and execute a filtering function if one is not provided\n\t\t\t// Provide `match` to avoid retokenization if we modified the selector above\n\t\t\t(compiled || compile(selector, match))(\n\t\t\t\tseed,\n\t\t\t\tcontext,\n\t\t\t\t!documentIsHTML,\n\t\t\t\tresults,\n\t\t\t\t!context || rsibling.test(selector) && testContext(context.parentNode) || context\n\t\t\t);\n\t\t\treturn results;\n\t\t}\n\n\t\t// One-time assignments\n\n\t\t// Support: Android <=4.0 - 4.1+\n\t\t// Sort stability\n\t\tsupport.sortStable = expando.split(\"\").sort(sortOrder).join(\"\") === expando;\n\n\t\t// Initialize against the default document\n\t\tsetDocument();\n\n\t\t// Support: Android <=4.0 - 4.1+\n\t\t// Detached nodes confoundingly follow *each other*\n\t\tsupport.sortDetached = assert(function (el) {\n\n\t\t\t// Should return 1, but returns 4 (following)\n\t\t\treturn el.compareDocumentPosition(document.createElement(\"fieldset\")) & 1;\n\t\t});\n\n\t\tjQuery.find = find;\n\n\t\t// Deprecated\n\t\tjQuery.expr[\":\"] = jQuery.expr.pseudos;\n\t\tjQuery.unique = jQuery.uniqueSort;\n\n\t\t// These have always been private, but they used to be documented\n\t\t// as part of Sizzle so let's maintain them in the 3.x line\n\t\t// for backwards compatibility purposes.\n\t\tfind.compile = compile;\n\t\tfind.select = select;\n\t\tfind.setDocument = setDocument;\n\n\t\tfind.escape = jQuery.escapeSelector;\n\t\tfind.getText = jQuery.text;\n\t\tfind.isXML = jQuery.isXMLDoc;\n\t\tfind.selectors = jQuery.expr;\n\t\tfind.support = jQuery.support;\n\t\tfind.uniqueSort = jQuery.uniqueSort;\n\n\t\t/* eslint-enable */\n\n\t})();\n\n\n\tvar dir = function (elem, dir, until) {\n\t\tvar matched = [],\n\t\t\ttruncate = until !== undefined;\n\n\t\twhile ((elem = elem[dir]) && elem.nodeType !== 9) {\n\t\t\tif (elem.nodeType === 1) {\n\t\t\t\tif (truncate && jQuery(elem).is(until)) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tmatched.push(elem);\n\t\t\t}\n\t\t}\n\t\treturn matched;\n\t};\n\n\n\tvar siblings = function (n, elem) {\n\t\tvar matched = [];\n\n\t\tfor (; n; n = n.nextSibling) {\n\t\t\tif (n.nodeType === 1 && n !== elem) {\n\t\t\t\tmatched.push(n);\n\t\t\t}\n\t\t}\n\n\t\treturn matched;\n\t};\n\n\n\tvar rneedsContext = jQuery.expr.match.needsContext;\n\n\tvar rsingleTag = (/^<([a-z][^\\/\\0>:\\x20\\t\\r\\n\\f]*)[\\x20\\t\\r\\n\\f]*\\/?>(?:<\\/\\1>|)$/i);\n\n\n\n\t// Implement the identical functionality for filter and not\n\tfunction winnow(elements, qualifier, not) {\n\t\tif (isFunction(qualifier)) {\n\t\t\treturn jQuery.grep(elements, function (elem, i) {\n\t\t\t\treturn !!qualifier.call(elem, i, elem) !== not;\n\t\t\t});\n\t\t}\n\n\t\t// Single element\n\t\tif (qualifier.nodeType) {\n\t\t\treturn jQuery.grep(elements, function (elem) {\n\t\t\t\treturn (elem === qualifier) !== not;\n\t\t\t});\n\t\t}\n\n\t\t// Arraylike of elements (jQuery, arguments, Array)\n\t\tif (typeof qualifier !== \"string\") {\n\t\t\treturn jQuery.grep(elements, function (elem) {\n\t\t\t\treturn (indexOf.call(qualifier, elem) > -1) !== not;\n\t\t\t});\n\t\t}\n\n\t\t// Filtered directly for both simple and complex selectors\n\t\treturn jQuery.filter(qualifier, elements, not);\n\t}\n\n\tjQuery.filter = function (expr, elems, not) {\n\t\tvar elem = elems[0];\n\n\t\tif (not) {\n\t\t\texpr = \":not(\" + expr + \")\";\n\t\t}\n\n\t\tif (elems.length === 1 && elem.nodeType === 1) {\n\t\t\treturn jQuery.find.matchesSelector(elem, expr) ? [elem] : [];\n\t\t}\n\n\t\treturn jQuery.find.matches(expr, jQuery.grep(elems, function (elem) {\n\t\t\treturn elem.nodeType === 1;\n\t\t}));\n\t};\n\n\tjQuery.fn.extend({\n\t\tfind: function (selector) {\n\t\t\tvar i, ret,\n\t\t\t\tlen = this.length,\n\t\t\t\tself = this;\n\n\t\t\tif (typeof selector !== \"string\") {\n\t\t\t\treturn this.pushStack(jQuery(selector).filter(function () {\n\t\t\t\t\tfor (i = 0; i < len; i++) {\n\t\t\t\t\t\tif (jQuery.contains(self[i], this)) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}));\n\t\t\t}\n\n\t\t\tret = this.pushStack([]);\n\n\t\t\tfor (i = 0; i < len; i++) {\n\t\t\t\tjQuery.find(selector, self[i], ret);\n\t\t\t}\n\n\t\t\treturn len > 1 ? jQuery.uniqueSort(ret) : ret;\n\t\t},\n\t\tfilter: function (selector) {\n\t\t\treturn this.pushStack(winnow(this, selector || [], false));\n\t\t},\n\t\tnot: function (selector) {\n\t\t\treturn this.pushStack(winnow(this, selector || [], true));\n\t\t},\n\t\tis: function (selector) {\n\t\t\treturn !!winnow(\n\t\t\t\tthis,\n\n\t\t\t\t// If this is a positional/relative selector, check membership in the returned set\n\t\t\t\t// so $(\"p:first\").is(\"p:last\") won't return true for a doc with two \"p\".\n\t\t\t\ttypeof selector === \"string\" && rneedsContext.test(selector) ?\n\t\t\t\t\tjQuery(selector) :\n\t\t\t\t\tselector || [],\n\t\t\t\tfalse\n\t\t\t).length;\n\t\t}\n\t});\n\n\n\t// Initialize a jQuery object\n\n\n\t// A central reference to the root jQuery(document)\n\tvar rootjQuery,\n\n\t\t// A simple way to check for HTML strings\n\t\t// Prioritize #id over <tag> to avoid XSS via location.hash (trac-9521)\n\t\t// Strict HTML recognition (trac-11290: must start with <)\n\t\t// Shortcut simple #id case for speed\n\t\trquickExpr = /^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]+))$/,\n\n\t\tinit = jQuery.fn.init = function (selector, context, root) {\n\t\t\tvar match, elem;\n\n\t\t\t// HANDLE: $(\"\"), $(null), $(undefined), $(false)\n\t\t\tif (!selector) {\n\t\t\t\treturn this;\n\t\t\t}\n\n\t\t\t// Method init() accepts an alternate rootjQuery\n\t\t\t// so migrate can support jQuery.sub (gh-2101)\n\t\t\troot = root || rootjQuery;\n\n\t\t\t// Handle HTML strings\n\t\t\tif (typeof selector === \"string\") {\n\t\t\t\tif (selector[0] === \"<\" &&\n\t\t\t\t\tselector[selector.length - 1] === \">\" &&\n\t\t\t\t\tselector.length >= 3) {\n\n\t\t\t\t\t// Assume that strings that start and end with <> are HTML and skip the regex check\n\t\t\t\t\tmatch = [null, selector, null];\n\n\t\t\t\t} else {\n\t\t\t\t\tmatch = rquickExpr.exec(selector);\n\t\t\t\t}\n\n\t\t\t\t// Match html or make sure no context is specified for #id\n\t\t\t\tif (match && (match[1] || !context)) {\n\n\t\t\t\t\t// HANDLE: $(html) -> $(array)\n\t\t\t\t\tif (match[1]) {\n\t\t\t\t\t\tcontext = context instanceof jQuery ? context[0] : context;\n\n\t\t\t\t\t\t// Option to run scripts is true for back-compat\n\t\t\t\t\t\t// Intentionally let the error be thrown if parseHTML is not present\n\t\t\t\t\t\tjQuery.merge(this, jQuery.parseHTML(\n\t\t\t\t\t\t\tmatch[1],\n\t\t\t\t\t\t\tcontext && context.nodeType ? context.ownerDocument || context : document,\n\t\t\t\t\t\t\ttrue\n\t\t\t\t\t\t));\n\n\t\t\t\t\t\t// HANDLE: $(html, props)\n\t\t\t\t\t\tif (rsingleTag.test(match[1]) && jQuery.isPlainObject(context)) {\n\t\t\t\t\t\t\tfor (match in context) {\n\n\t\t\t\t\t\t\t\t// Properties of context are called as methods if possible\n\t\t\t\t\t\t\t\tif (isFunction(this[match])) {\n\t\t\t\t\t\t\t\t\tthis[match](context[match]);\n\n\t\t\t\t\t\t\t\t\t// ...and otherwise set as attributes\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tthis.attr(match, context[match]);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn this;\n\n\t\t\t\t\t\t// HANDLE: $(#id)\n\t\t\t\t\t} else {\n\t\t\t\t\t\telem = document.getElementById(match[2]);\n\n\t\t\t\t\t\tif (elem) {\n\n\t\t\t\t\t\t\t// Inject the element directly into the jQuery object\n\t\t\t\t\t\t\tthis[0] = elem;\n\t\t\t\t\t\t\tthis.length = 1;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn this;\n\t\t\t\t\t}\n\n\t\t\t\t\t// HANDLE: $(expr, $(...))\n\t\t\t\t} else if (!context || context.jquery) {\n\t\t\t\t\treturn (context || root).find(selector);\n\n\t\t\t\t\t// HANDLE: $(expr, context)\n\t\t\t\t\t// (which is just equivalent to: $(context).find(expr)\n\t\t\t\t} else {\n\t\t\t\t\treturn this.constructor(context).find(selector);\n\t\t\t\t}\n\n\t\t\t\t// HANDLE: $(DOMElement)\n\t\t\t} else if (selector.nodeType) {\n\t\t\t\tthis[0] = selector;\n\t\t\t\tthis.length = 1;\n\t\t\t\treturn this;\n\n\t\t\t\t// HANDLE: $(function)\n\t\t\t\t// Shortcut for document ready\n\t\t\t} else if (isFunction(selector)) {\n\t\t\t\treturn root.ready !== undefined ?\n\t\t\t\t\troot.ready(selector) :\n\n\t\t\t\t\t// Execute immediately if ready is not present\n\t\t\t\t\tselector(jQuery);\n\t\t\t}\n\n\t\t\treturn jQuery.makeArray(selector, this);\n\t\t};\n\n\t// Give the init function the jQuery prototype for later instantiation\n\tinit.prototype = jQuery.fn;\n\n\t// Initialize central reference\n\trootjQuery = jQuery(document);\n\n\n\tvar rparentsprev = /^(?:parents|prev(?:Until|All))/,\n\n\t\t// Methods guaranteed to produce a unique set when starting from a unique set\n\t\tguaranteedUnique = {\n\t\t\tchildren: true,\n\t\t\tcontents: true,\n\t\t\tnext: true,\n\t\t\tprev: true\n\t\t};\n\n\tjQuery.fn.extend({\n\t\thas: function (target) {\n\t\t\tvar targets = jQuery(target, this),\n\t\t\t\tl = targets.length;\n\n\t\t\treturn this.filter(function () {\n\t\t\t\tvar i = 0;\n\t\t\t\tfor (; i < l; i++) {\n\t\t\t\t\tif (jQuery.contains(this, targets[i])) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\tclosest: function (selectors, context) {\n\t\t\tvar cur,\n\t\t\t\ti = 0,\n\t\t\t\tl = this.length,\n\t\t\t\tmatched = [],\n\t\t\t\ttargets = typeof selectors !== \"string\" && jQuery(selectors);\n\n\t\t\t// Positional selectors never match, since there's no _selection_ context\n\t\t\tif (!rneedsContext.test(selectors)) {\n\t\t\t\tfor (; i < l; i++) {\n\t\t\t\t\tfor (cur = this[i]; cur && cur !== context; cur = cur.parentNode) {\n\n\t\t\t\t\t\t// Always skip document fragments\n\t\t\t\t\t\tif (cur.nodeType < 11 && (targets ?\n\t\t\t\t\t\t\ttargets.index(cur) > -1 :\n\n\t\t\t\t\t\t\t// Don't pass non-elements to jQuery#find\n\t\t\t\t\t\t\tcur.nodeType === 1 &&\n\t\t\t\t\t\t\tjQuery.find.matchesSelector(cur, selectors))) {\n\n\t\t\t\t\t\t\tmatched.push(cur);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn this.pushStack(matched.length > 1 ? jQuery.uniqueSort(matched) : matched);\n\t\t},\n\n\t\t// Determine the position of an element within the set\n\t\tindex: function (elem) {\n\n\t\t\t// No argument, return index in parent\n\t\t\tif (!elem) {\n\t\t\t\treturn (this[0] && this[0].parentNode) ? this.first().prevAll().length : -1;\n\t\t\t}\n\n\t\t\t// Index in selector\n\t\t\tif (typeof elem === \"string\") {\n\t\t\t\treturn indexOf.call(jQuery(elem), this[0]);\n\t\t\t}\n\n\t\t\t// Locate the position of the desired element\n\t\t\treturn indexOf.call(this,\n\n\t\t\t\t// If it receives a jQuery object, the first element is used\n\t\t\t\telem.jquery ? elem[0] : elem\n\t\t\t);\n\t\t},\n\n\t\tadd: function (selector, context) {\n\t\t\treturn this.pushStack(\n\t\t\t\tjQuery.uniqueSort(\n\t\t\t\t\tjQuery.merge(this.get(), jQuery(selector, context))\n\t\t\t\t)\n\t\t\t);\n\t\t},\n\n\t\taddBack: function (selector) {\n\t\t\treturn this.add(selector == null ?\n\t\t\t\tthis.prevObject : this.prevObject.filter(selector)\n\t\t\t);\n\t\t}\n\t});\n\n\tfunction sibling(cur, dir) {\n\t\twhile ((cur = cur[dir]) && cur.nodeType !== 1) { }\n\t\treturn cur;\n\t}\n\n\tjQuery.each({\n\t\tparent: function (elem) {\n\t\t\tvar parent = elem.parentNode;\n\t\t\treturn parent && parent.nodeType !== 11 ? parent : null;\n\t\t},\n\t\tparents: function (elem) {\n\t\t\treturn dir(elem, \"parentNode\");\n\t\t},\n\t\tparentsUntil: function (elem, _i, until) {\n\t\t\treturn dir(elem, \"parentNode\", until);\n\t\t},\n\t\tnext: function (elem) {\n\t\t\treturn sibling(elem, \"nextSibling\");\n\t\t},\n\t\tprev: function (elem) {\n\t\t\treturn sibling(elem, \"previousSibling\");\n\t\t},\n\t\tnextAll: function (elem) {\n\t\t\treturn dir(elem, \"nextSibling\");\n\t\t},\n\t\tprevAll: function (elem) {\n\t\t\treturn dir(elem, \"previousSibling\");\n\t\t},\n\t\tnextUntil: function (elem, _i, until) {\n\t\t\treturn dir(elem, \"nextSibling\", until);\n\t\t},\n\t\tprevUntil: function (elem, _i, until) {\n\t\t\treturn dir(elem, \"previousSibling\", until);\n\t\t},\n\t\tsiblings: function (elem) {\n\t\t\treturn siblings((elem.parentNode || {}).firstChild, elem);\n\t\t},\n\t\tchildren: function (elem) {\n\t\t\treturn siblings(elem.firstChild);\n\t\t},\n\t\tcontents: function (elem) {\n\t\t\tif (elem.contentDocument != null &&\n\n\t\t\t\t// Support: IE 11+\n\t\t\t\t// <object> elements with no `data` attribute has an object\n\t\t\t\t// `contentDocument` with a `null` prototype.\n\t\t\t\tgetProto(elem.contentDocument)) {\n\n\t\t\t\treturn elem.contentDocument;\n\t\t\t}\n\n\t\t\t// Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only\n\t\t\t// Treat the template element as a regular one in browsers that\n\t\t\t// don't support it.\n\t\t\tif (nodeName(elem, \"template\")) {\n\t\t\t\telem = elem.content || elem;\n\t\t\t}\n\n\t\t\treturn jQuery.merge([], elem.childNodes);\n\t\t}\n\t}, function (name, fn) {\n\t\tjQuery.fn[name] = function (until, selector) {\n\t\t\tvar matched = jQuery.map(this, fn, until);\n\n\t\t\tif (name.slice(-5) !== \"Until\") {\n\t\t\t\tselector = until;\n\t\t\t}\n\n\t\t\tif (selector && typeof selector === \"string\") {\n\t\t\t\tmatched = jQuery.filter(selector, matched);\n\t\t\t}\n\n\t\t\tif (this.length > 1) {\n\n\t\t\t\t// Remove duplicates\n\t\t\t\tif (!guaranteedUnique[name]) {\n\t\t\t\t\tjQuery.uniqueSort(matched);\n\t\t\t\t}\n\n\t\t\t\t// Reverse order for parents* and prev-derivatives\n\t\t\t\tif (rparentsprev.test(name)) {\n\t\t\t\t\tmatched.reverse();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn this.pushStack(matched);\n\t\t};\n\t});\n\tvar rnothtmlwhite = (/[^\\x20\\t\\r\\n\\f]+/g);\n\n\n\n\t// Convert String-formatted options into Object-formatted ones\n\tfunction createOptions(options) {\n\t\tvar object = {};\n\t\tjQuery.each(options.match(rnothtmlwhite) || [], function (_, flag) {\n\t\t\tobject[flag] = true;\n\t\t});\n\t\treturn object;\n\t}\n\n\t/*\n\t * Create a callback list using the following parameters:\n\t *\n\t *\toptions: an optional list of space-separated options that will change how\n\t *\t\t\tthe callback list behaves or a more traditional option object\n\t *\n\t * By default a callback list will act like an event callback list and can be\n\t * \"fired\" multiple times.\n\t *\n\t * Possible options:\n\t *\n\t *\tonce:\t\t\twill ensure the callback list can only be fired once (like a Deferred)\n\t *\n\t *\tmemory:\t\t\twill keep track of previous values and will call any callback added\n\t *\t\t\t\t\tafter the list has been fired right away with the latest \"memorized\"\n\t *\t\t\t\t\tvalues (like a Deferred)\n\t *\n\t *\tunique:\t\t\twill ensure a callback can only be added once (no duplicate in the list)\n\t *\n\t *\tstopOnFalse:\tinterrupt callings when a callback returns false\n\t *\n\t */\n\tjQuery.Callbacks = function (options) {\n\n\t\t// Convert options from String-formatted to Object-formatted if needed\n\t\t// (we check in cache first)\n\t\toptions = typeof options === \"string\" ?\n\t\t\tcreateOptions(options) :\n\t\t\tjQuery.extend({}, options);\n\n\t\tvar // Flag to know if list is currently firing\n\t\t\tfiring,\n\n\t\t\t// Last fire value for non-forgettable lists\n\t\t\tmemory,\n\n\t\t\t// Flag to know if list was already fired\n\t\t\tfired,\n\n\t\t\t// Flag to prevent firing\n\t\t\tlocked,\n\n\t\t\t// Actual callback list\n\t\t\tlist = [],\n\n\t\t\t// Queue of execution data for repeatable lists\n\t\t\tqueue = [],\n\n\t\t\t// Index of currently firing callback (modified by add/remove as needed)\n\t\t\tfiringIndex = -1,\n\n\t\t\t// Fire callbacks\n\t\t\tfire = function () {\n\n\t\t\t\t// Enforce single-firing\n\t\t\t\tlocked = locked || options.once;\n\n\t\t\t\t// Execute callbacks for all pending executions,\n\t\t\t\t// respecting firingIndex overrides and runtime changes\n\t\t\t\tfired = firing = true;\n\t\t\t\tfor (; queue.length; firingIndex = -1) {\n\t\t\t\t\tmemory = queue.shift();\n\t\t\t\t\twhile (++firingIndex < list.length) {\n\n\t\t\t\t\t\t// Run callback and check for early termination\n\t\t\t\t\t\tif (list[firingIndex].apply(memory[0], memory[1]) === false &&\n\t\t\t\t\t\t\toptions.stopOnFalse) {\n\n\t\t\t\t\t\t\t// Jump to end and forget the data so .add doesn't re-fire\n\t\t\t\t\t\t\tfiringIndex = list.length;\n\t\t\t\t\t\t\tmemory = false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Forget the data if we're done with it\n\t\t\t\tif (!options.memory) {\n\t\t\t\t\tmemory = false;\n\t\t\t\t}\n\n\t\t\t\tfiring = false;\n\n\t\t\t\t// Clean up if we're done firing for good\n\t\t\t\tif (locked) {\n\n\t\t\t\t\t// Keep an empty list if we have data for future add calls\n\t\t\t\t\tif (memory) {\n\t\t\t\t\t\tlist = [];\n\n\t\t\t\t\t\t// Otherwise, this object is spent\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlist = \"\";\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// Actual Callbacks object\n\t\t\tself = {\n\n\t\t\t\t// Add a callback or a collection of callbacks to the list\n\t\t\t\tadd: function () {\n\t\t\t\t\tif (list) {\n\n\t\t\t\t\t\t// If we have memory from a past run, we should fire after adding\n\t\t\t\t\t\tif (memory && !firing) {\n\t\t\t\t\t\t\tfiringIndex = list.length - 1;\n\t\t\t\t\t\t\tqueue.push(memory);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t(function add(args) {\n\t\t\t\t\t\t\tjQuery.each(args, function (_, arg) {\n\t\t\t\t\t\t\t\tif (isFunction(arg)) {\n\t\t\t\t\t\t\t\t\tif (!options.unique || !self.has(arg)) {\n\t\t\t\t\t\t\t\t\t\tlist.push(arg);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} else if (arg && arg.length && toType(arg) !== \"string\") {\n\n\t\t\t\t\t\t\t\t\t// Inspect recursively\n\t\t\t\t\t\t\t\t\tadd(arg);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t})(arguments);\n\n\t\t\t\t\t\tif (memory && !firing) {\n\t\t\t\t\t\t\tfire();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Remove a callback from the list\n\t\t\t\tremove: function () {\n\t\t\t\t\tjQuery.each(arguments, function (_, arg) {\n\t\t\t\t\t\tvar index;\n\t\t\t\t\t\twhile ((index = jQuery.inArray(arg, list, index)) > -1) {\n\t\t\t\t\t\t\tlist.splice(index, 1);\n\n\t\t\t\t\t\t\t// Handle firing indexes\n\t\t\t\t\t\t\tif (index <= firingIndex) {\n\t\t\t\t\t\t\t\tfiringIndex--;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Check if a given callback is in the list.\n\t\t\t\t// If no argument is given, return whether or not list has callbacks attached.\n\t\t\t\thas: function (fn) {\n\t\t\t\t\treturn fn ?\n\t\t\t\t\t\tjQuery.inArray(fn, list) > -1 :\n\t\t\t\t\t\tlist.length > 0;\n\t\t\t\t},\n\n\t\t\t\t// Remove all callbacks from the list\n\t\t\t\tempty: function () {\n\t\t\t\t\tif (list) {\n\t\t\t\t\t\tlist = [];\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Disable .fire and .add\n\t\t\t\t// Abort any current/pending executions\n\t\t\t\t// Clear all callbacks and values\n\t\t\t\tdisable: function () {\n\t\t\t\t\tlocked = queue = [];\n\t\t\t\t\tlist = memory = \"\";\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\t\t\t\tdisabled: function () {\n\t\t\t\t\treturn !list;\n\t\t\t\t},\n\n\t\t\t\t// Disable .fire\n\t\t\t\t// Also disable .add unless we have memory (since it would have no effect)\n\t\t\t\t// Abort any pending executions\n\t\t\t\tlock: function () {\n\t\t\t\t\tlocked = queue = [];\n\t\t\t\t\tif (!memory && !firing) {\n\t\t\t\t\t\tlist = memory = \"\";\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\t\t\t\tlocked: function () {\n\t\t\t\t\treturn !!locked;\n\t\t\t\t},\n\n\t\t\t\t// Call all callbacks with the given context and arguments\n\t\t\t\tfireWith: function (context, args) {\n\t\t\t\t\tif (!locked) {\n\t\t\t\t\t\targs = args || [];\n\t\t\t\t\t\targs = [context, args.slice ? args.slice() : args];\n\t\t\t\t\t\tqueue.push(args);\n\t\t\t\t\t\tif (!firing) {\n\t\t\t\t\t\t\tfire();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Call all the callbacks with the given arguments\n\t\t\t\tfire: function () {\n\t\t\t\t\tself.fireWith(this, arguments);\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// To know if the callbacks have already been called at least once\n\t\t\t\tfired: function () {\n\t\t\t\t\treturn !!fired;\n\t\t\t\t}\n\t\t\t};\n\n\t\treturn self;\n\t};\n\n\n\tfunction Identity(v) {\n\t\treturn v;\n\t}\n\tfunction Thrower(ex) {\n\t\tthrow ex;\n\t}\n\n\tfunction adoptValue(value, resolve, reject, noValue) {\n\t\tvar method;\n\n\t\ttry {\n\n\t\t\t// Check for promise aspect first to privilege synchronous behavior\n\t\t\tif (value && isFunction((method = value.promise))) {\n\t\t\t\tmethod.call(value).done(resolve).fail(reject);\n\n\t\t\t\t// Other thenables\n\t\t\t} else if (value && isFunction((method = value.then))) {\n\t\t\t\tmethod.call(value, resolve, reject);\n\n\t\t\t\t// Other non-thenables\n\t\t\t} else {\n\n\t\t\t\t// Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer:\n\t\t\t\t// * false: [ value ].slice( 0 ) => resolve( value )\n\t\t\t\t// * true: [ value ].slice( 1 ) => resolve()\n\t\t\t\tresolve.apply(undefined, [value].slice(noValue));\n\t\t\t}\n\n\t\t\t// For Promises/A+, convert exceptions into rejections\n\t\t\t// Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in\n\t\t\t// Deferred#then to conditionally suppress rejection.\n\t\t} catch (value) {\n\n\t\t\t// Support: Android 4.0 only\n\t\t\t// Strict mode functions invoked without .call/.apply get global-object context\n\t\t\treject.apply(undefined, [value]);\n\t\t}\n\t}\n\n\tjQuery.extend({\n\n\t\tDeferred: function (func) {\n\t\t\tvar tuples = [\n\n\t\t\t\t// action, add listener, callbacks,\n\t\t\t\t// ... .then handlers, argument index, [final state]\n\t\t\t\t[\"notify\", \"progress\", jQuery.Callbacks(\"memory\"),\n\t\t\t\t\tjQuery.Callbacks(\"memory\"), 2],\n\t\t\t\t[\"resolve\", \"done\", jQuery.Callbacks(\"once memory\"),\n\t\t\t\t\tjQuery.Callbacks(\"once memory\"), 0, \"resolved\"],\n\t\t\t\t[\"reject\", \"fail\", jQuery.Callbacks(\"once memory\"),\n\t\t\t\t\tjQuery.Callbacks(\"once memory\"), 1, \"rejected\"]\n\t\t\t],\n\t\t\t\tstate = \"pending\",\n\t\t\t\tpromise = {\n\t\t\t\t\tstate: function () {\n\t\t\t\t\t\treturn state;\n\t\t\t\t\t},\n\t\t\t\t\talways: function () {\n\t\t\t\t\t\tdeferred.done(arguments).fail(arguments);\n\t\t\t\t\t\treturn this;\n\t\t\t\t\t},\n\t\t\t\t\t\"catch\": function (fn) {\n\t\t\t\t\t\treturn promise.then(null, fn);\n\t\t\t\t\t},\n\n\t\t\t\t\t// Keep pipe for back-compat\n\t\t\t\t\tpipe: function ( /* fnDone, fnFail, fnProgress */) {\n\t\t\t\t\t\tvar fns = arguments;\n\n\t\t\t\t\t\treturn jQuery.Deferred(function (newDefer) {\n\t\t\t\t\t\t\tjQuery.each(tuples, function (_i, tuple) {\n\n\t\t\t\t\t\t\t\t// Map tuples (progress, done, fail) to arguments (done, fail, progress)\n\t\t\t\t\t\t\t\tvar fn = isFunction(fns[tuple[4]]) && fns[tuple[4]];\n\n\t\t\t\t\t\t\t\t// deferred.progress(function() { bind to newDefer or newDefer.notify })\n\t\t\t\t\t\t\t\t// deferred.done(function() { bind to newDefer or newDefer.resolve })\n\t\t\t\t\t\t\t\t// deferred.fail(function() { bind to newDefer or newDefer.reject })\n\t\t\t\t\t\t\t\tdeferred[tuple[1]](function () {\n\t\t\t\t\t\t\t\t\tvar returned = fn && fn.apply(this, arguments);\n\t\t\t\t\t\t\t\t\tif (returned && isFunction(returned.promise)) {\n\t\t\t\t\t\t\t\t\t\treturned.promise()\n\t\t\t\t\t\t\t\t\t\t\t.progress(newDefer.notify)\n\t\t\t\t\t\t\t\t\t\t\t.done(newDefer.resolve)\n\t\t\t\t\t\t\t\t\t\t\t.fail(newDefer.reject);\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tnewDefer[tuple[0] + \"With\"](\n\t\t\t\t\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\t\t\t\t\tfn ? [returned] : arguments\n\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tfns = null;\n\t\t\t\t\t\t}).promise();\n\t\t\t\t\t},\n\t\t\t\t\tthen: function (onFulfilled, onRejected, onProgress) {\n\t\t\t\t\t\tvar maxDepth = 0;\n\t\t\t\t\t\tfunction resolve(depth, deferred, handler, special) {\n\t\t\t\t\t\t\treturn function () {\n\t\t\t\t\t\t\t\tvar that = this,\n\t\t\t\t\t\t\t\t\targs = arguments,\n\t\t\t\t\t\t\t\t\tmightThrow = function () {\n\t\t\t\t\t\t\t\t\t\tvar returned, then;\n\n\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.3\n\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-59\n\t\t\t\t\t\t\t\t\t\t// Ignore double-resolution attempts\n\t\t\t\t\t\t\t\t\t\tif (depth < maxDepth) {\n\t\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\treturned = handler.apply(that, args);\n\n\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.1\n\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-48\n\t\t\t\t\t\t\t\t\t\tif (returned === deferred.promise()) {\n\t\t\t\t\t\t\t\t\t\t\tthrow new TypeError(\"Thenable self-resolution\");\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ sections 2.3.3.1, 3.5\n\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-54\n\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-75\n\t\t\t\t\t\t\t\t\t\t// Retrieve `then` only once\n\t\t\t\t\t\t\t\t\t\tthen = returned &&\n\n\t\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.4\n\t\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-64\n\t\t\t\t\t\t\t\t\t\t\t// Only check objects and functions for thenability\n\t\t\t\t\t\t\t\t\t\t\t(typeof returned === \"object\" ||\n\t\t\t\t\t\t\t\t\t\t\t\ttypeof returned === \"function\") &&\n\t\t\t\t\t\t\t\t\t\t\treturned.then;\n\n\t\t\t\t\t\t\t\t\t\t// Handle a returned thenable\n\t\t\t\t\t\t\t\t\t\tif (isFunction(then)) {\n\n\t\t\t\t\t\t\t\t\t\t\t// Special processors (notify) just wait for resolution\n\t\t\t\t\t\t\t\t\t\t\tif (special) {\n\t\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\t\tresolve(maxDepth, deferred, Identity, special),\n\t\t\t\t\t\t\t\t\t\t\t\t\tresolve(maxDepth, deferred, Thrower, special)\n\t\t\t\t\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t\t\t\t\t// Normal processors (resolve) also hook into progress\n\t\t\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t\t\t// ...and disregard older resolution values\n\t\t\t\t\t\t\t\t\t\t\t\tmaxDepth++;\n\n\t\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\t\tresolve(maxDepth, deferred, Identity, special),\n\t\t\t\t\t\t\t\t\t\t\t\t\tresolve(maxDepth, deferred, Thrower, special),\n\t\t\t\t\t\t\t\t\t\t\t\t\tresolve(maxDepth, deferred, Identity,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tdeferred.notifyWith)\n\t\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t// Handle all other returned values\n\t\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\t\tif (handler !== Identity) {\n\t\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\t\targs = [returned];\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t// Process the value(s)\n\t\t\t\t\t\t\t\t\t\t\t// Default process is resolve\n\t\t\t\t\t\t\t\t\t\t\t(special || deferred.resolveWith)(that, args);\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\n\t\t\t\t\t\t\t\t\t// Only normal processors (resolve) catch and reject exceptions\n\t\t\t\t\t\t\t\t\tprocess = special ?\n\t\t\t\t\t\t\t\t\t\tmightThrow :\n\t\t\t\t\t\t\t\t\t\tfunction () {\n\t\t\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\t\t\tmightThrow();\n\t\t\t\t\t\t\t\t\t\t\t} catch (e) {\n\n\t\t\t\t\t\t\t\t\t\t\t\tif (jQuery.Deferred.exceptionHook) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tjQuery.Deferred.exceptionHook(e,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tprocess.error);\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.4.1\n\t\t\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-61\n\t\t\t\t\t\t\t\t\t\t\t\t// Ignore post-resolution exceptions\n\t\t\t\t\t\t\t\t\t\t\t\tif (depth + 1 >= maxDepth) {\n\n\t\t\t\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\t\t\t\tif (handler !== Thrower) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\targs = [e];\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\t\tdeferred.rejectWith(that, args);\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.1\n\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-57\n\t\t\t\t\t\t\t\t// Re-resolve promises immediately to dodge false rejection from\n\t\t\t\t\t\t\t\t// subsequent errors\n\t\t\t\t\t\t\t\tif (depth) {\n\t\t\t\t\t\t\t\t\tprocess();\n\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t// Call an optional hook to record the error, in case of exception\n\t\t\t\t\t\t\t\t\t// since it's otherwise lost when execution goes async\n\t\t\t\t\t\t\t\t\tif (jQuery.Deferred.getErrorHook) {\n\t\t\t\t\t\t\t\t\t\tprocess.error = jQuery.Deferred.getErrorHook();\n\n\t\t\t\t\t\t\t\t\t\t// The deprecated alias of the above. While the name suggests\n\t\t\t\t\t\t\t\t\t\t// returning the stack, not an error instance, jQuery just passes\n\t\t\t\t\t\t\t\t\t\t// it directly to `console.warn` so both will work; an instance\n\t\t\t\t\t\t\t\t\t\t// just better cooperates with source maps.\n\t\t\t\t\t\t\t\t\t} else if (jQuery.Deferred.getStackHook) {\n\t\t\t\t\t\t\t\t\t\tprocess.error = jQuery.Deferred.getStackHook();\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\twindow.setTimeout(process);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn jQuery.Deferred(function (newDefer) {\n\n\t\t\t\t\t\t\t// progress_handlers.add( ... )\n\t\t\t\t\t\t\ttuples[0][3].add(\n\t\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\t\tisFunction(onProgress) ?\n\t\t\t\t\t\t\t\t\t\tonProgress :\n\t\t\t\t\t\t\t\t\t\tIdentity,\n\t\t\t\t\t\t\t\t\tnewDefer.notifyWith\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t// fulfilled_handlers.add( ... )\n\t\t\t\t\t\t\ttuples[1][3].add(\n\t\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\t\tisFunction(onFulfilled) ?\n\t\t\t\t\t\t\t\t\t\tonFulfilled :\n\t\t\t\t\t\t\t\t\t\tIdentity\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t// rejected_handlers.add( ... )\n\t\t\t\t\t\t\ttuples[2][3].add(\n\t\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\t\tisFunction(onRejected) ?\n\t\t\t\t\t\t\t\t\t\tonRejected :\n\t\t\t\t\t\t\t\t\t\tThrower\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}).promise();\n\t\t\t\t\t},\n\n\t\t\t\t\t// Get a promise for this deferred\n\t\t\t\t\t// If obj is provided, the promise aspect is added to the object\n\t\t\t\t\tpromise: function (obj) {\n\t\t\t\t\t\treturn obj != null ? jQuery.extend(obj, promise) : promise;\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tdeferred = {};\n\n\t\t\t// Add list-specific methods\n\t\t\tjQuery.each(tuples, function (i, tuple) {\n\t\t\t\tvar list = tuple[2],\n\t\t\t\t\tstateString = tuple[5];\n\n\t\t\t\t// promise.progress = list.add\n\t\t\t\t// promise.done = list.add\n\t\t\t\t// promise.fail = list.add\n\t\t\t\tpromise[tuple[1]] = list.add;\n\n\t\t\t\t// Handle state\n\t\t\t\tif (stateString) {\n\t\t\t\t\tlist.add(\n\t\t\t\t\t\tfunction () {\n\n\t\t\t\t\t\t\t// state = \"resolved\" (i.e., fulfilled)\n\t\t\t\t\t\t\t// state = \"rejected\"\n\t\t\t\t\t\t\tstate = stateString;\n\t\t\t\t\t\t},\n\n\t\t\t\t\t\t// rejected_callbacks.disable\n\t\t\t\t\t\t// fulfilled_callbacks.disable\n\t\t\t\t\t\ttuples[3 - i][2].disable,\n\n\t\t\t\t\t\t// rejected_handlers.disable\n\t\t\t\t\t\t// fulfilled_handlers.disable\n\t\t\t\t\t\ttuples[3 - i][3].disable,\n\n\t\t\t\t\t\t// progress_callbacks.lock\n\t\t\t\t\t\ttuples[0][2].lock,\n\n\t\t\t\t\t\t// progress_handlers.lock\n\t\t\t\t\t\ttuples[0][3].lock\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\t// progress_handlers.fire\n\t\t\t\t// fulfilled_handlers.fire\n\t\t\t\t// rejected_handlers.fire\n\t\t\t\tlist.add(tuple[3].fire);\n\n\t\t\t\t// deferred.notify = function() { deferred.notifyWith(...) }\n\t\t\t\t// deferred.resolve = function() { deferred.resolveWith(...) }\n\t\t\t\t// deferred.reject = function() { deferred.rejectWith(...) }\n\t\t\t\tdeferred[tuple[0]] = function () {\n\t\t\t\t\tdeferred[tuple[0] + \"With\"](this === deferred ? undefined : this, arguments);\n\t\t\t\t\treturn this;\n\t\t\t\t};\n\n\t\t\t\t// deferred.notifyWith = list.fireWith\n\t\t\t\t// deferred.resolveWith = list.fireWith\n\t\t\t\t// deferred.rejectWith = list.fireWith\n\t\t\t\tdeferred[tuple[0] + \"With\"] = list.fireWith;\n\t\t\t});\n\n\t\t\t// Make the deferred a promise\n\t\t\tpromise.promise(deferred);\n\n\t\t\t// Call given func if any\n\t\t\tif (func) {\n\t\t\t\tfunc.call(deferred, deferred);\n\t\t\t}\n\n\t\t\t// All done!\n\t\t\treturn deferred;\n\t\t},\n\n\t\t// Deferred helper\n\t\twhen: function (singleValue) {\n\t\t\tvar\n\n\t\t\t\t// count of uncompleted subordinates\n\t\t\t\tremaining = arguments.length,\n\n\t\t\t\t// count of unprocessed arguments\n\t\t\t\ti = remaining,\n\n\t\t\t\t// subordinate fulfillment data\n\t\t\t\tresolveContexts = Array(i),\n\t\t\t\tresolveValues = slice.call(arguments),\n\n\t\t\t\t// the primary Deferred\n\t\t\t\tprimary = jQuery.Deferred(),\n\n\t\t\t\t// subordinate callback factory\n\t\t\t\tupdateFunc = function (i) {\n\t\t\t\t\treturn function (value) {\n\t\t\t\t\t\tresolveContexts[i] = this;\n\t\t\t\t\t\tresolveValues[i] = arguments.length > 1 ? slice.call(arguments) : value;\n\t\t\t\t\t\tif (!(--remaining)) {\n\t\t\t\t\t\t\tprimary.resolveWith(resolveContexts, resolveValues);\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t};\n\n\t\t\t// Single- and empty arguments are adopted like Promise.resolve\n\t\t\tif (remaining <= 1) {\n\t\t\t\tadoptValue(singleValue, primary.done(updateFunc(i)).resolve, primary.reject,\n\t\t\t\t\t!remaining);\n\n\t\t\t\t// Use .then() to unwrap secondary thenables (cf. gh-3000)\n\t\t\t\tif (primary.state() === \"pending\" ||\n\t\t\t\t\tisFunction(resolveValues[i] && resolveValues[i].then)) {\n\n\t\t\t\t\treturn primary.then();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Multiple arguments are aggregated like Promise.all array elements\n\t\t\twhile (i--) {\n\t\t\t\tadoptValue(resolveValues[i], updateFunc(i), primary.reject);\n\t\t\t}\n\n\t\t\treturn primary.promise();\n\t\t}\n\t});\n\n\n\t// These usually indicate a programmer mistake during development,\n\t// warn about them ASAP rather than swallowing them by default.\n\tvar rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;\n\n\t// If `jQuery.Deferred.getErrorHook` is defined, `asyncError` is an error\n\t// captured before the async barrier to get the original error cause\n\t// which may otherwise be hidden.\n\tjQuery.Deferred.exceptionHook = function (error, asyncError) {\n\n\t\t// Support: IE 8 - 9 only\n\t\t// Console exists when dev tools are open, which can happen at any time\n\t\tif (window.console && window.console.warn && error && rerrorNames.test(error.name)) {\n\t\t\twindow.console.warn(\"jQuery.Deferred exception: \" + error.message,\n\t\t\t\terror.stack, asyncError);\n\t\t}\n\t};\n\n\n\n\n\tjQuery.readyException = function (error) {\n\t\twindow.setTimeout(function () {\n\t\t\tthrow error;\n\t\t});\n\t};\n\n\n\n\n\t// The deferred used on DOM ready\n\tvar readyList = jQuery.Deferred();\n\n\tjQuery.fn.ready = function (fn) {\n\n\t\treadyList\n\t\t\t.then(fn)\n\n\t\t\t// Wrap jQuery.readyException in a function so that the lookup\n\t\t\t// happens at the time of error handling instead of callback\n\t\t\t// registration.\n\t\t\t.catch(function (error) {\n\t\t\t\tjQuery.readyException(error);\n\t\t\t});\n\n\t\treturn this;\n\t};\n\n\tjQuery.extend({\n\n\t\t// Is the DOM ready to be used? Set to true once it occurs.\n\t\tisReady: false,\n\n\t\t// A counter to track how many items to wait for before\n\t\t// the ready event fires. See trac-6781\n\t\treadyWait: 1,\n\n\t\t// Handle when the DOM is ready\n\t\tready: function (wait) {\n\n\t\t\t// Abort if there are pending holds or we're already ready\n\t\t\tif (wait === true ? --jQuery.readyWait : jQuery.isReady) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Remember that the DOM is ready\n\t\t\tjQuery.isReady = true;\n\n\t\t\t// If a normal DOM Ready event fired, decrement, and wait if need be\n\t\t\tif (wait !== true && --jQuery.readyWait > 0) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If there are functions bound, to execute\n\t\t\treadyList.resolveWith(document, [jQuery]);\n\t\t}\n\t});\n\n\tjQuery.ready.then = readyList.then;\n\n\t// The ready event handler and self cleanup method\n\tfunction completed() {\n\t\tdocument.removeEventListener(\"DOMContentLoaded\", completed);\n\t\twindow.removeEventListener(\"load\", completed);\n\t\tjQuery.ready();\n\t}\n\n\t// Catch cases where $(document).ready() is called\n\t// after the browser event has already occurred.\n\t// Support: IE <=9 - 10 only\n\t// Older IE sometimes signals \"interactive\" too soon\n\tif (document.readyState === \"complete\" ||\n\t\t(document.readyState !== \"loading\" && !document.documentElement.doScroll)) {\n\n\t\t// Handle it asynchronously to allow scripts the opportunity to delay ready\n\t\twindow.setTimeout(jQuery.ready);\n\n\t} else {\n\n\t\t// Use the handy event callback\n\t\tdocument.addEventListener(\"DOMContentLoaded\", completed);\n\n\t\t// A fallback to window.onload, that will always work\n\t\twindow.addEventListener(\"load\", completed);\n\t}\n\n\n\n\n\t// Multifunctional method to get and set values of a collection\n\t// The value/s can optionally be executed if it's a function\n\tvar access = function (elems, fn, key, value, chainable, emptyGet, raw) {\n\t\tvar i = 0,\n\t\t\tlen = elems.length,\n\t\t\tbulk = key == null;\n\n\t\t// Sets many values\n\t\tif (toType(key) === \"object\") {\n\t\t\tchainable = true;\n\t\t\tfor (i in key) {\n\t\t\t\taccess(elems, fn, i, key[i], true, emptyGet, raw);\n\t\t\t}\n\n\t\t\t// Sets one value\n\t\t} else if (value !== undefined) {\n\t\t\tchainable = true;\n\n\t\t\tif (!isFunction(value)) {\n\t\t\t\traw = true;\n\t\t\t}\n\n\t\t\tif (bulk) {\n\n\t\t\t\t// Bulk operations run against the entire set\n\t\t\t\tif (raw) {\n\t\t\t\t\tfn.call(elems, value);\n\t\t\t\t\tfn = null;\n\n\t\t\t\t\t// ...except when executing function values\n\t\t\t\t} else {\n\t\t\t\t\tbulk = fn;\n\t\t\t\t\tfn = function (elem, _key, value) {\n\t\t\t\t\t\treturn bulk.call(jQuery(elem), value);\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (fn) {\n\t\t\t\tfor (; i < len; i++) {\n\t\t\t\t\tfn(\n\t\t\t\t\t\telems[i], key, raw ?\n\t\t\t\t\t\tvalue :\n\t\t\t\t\t\tvalue.call(elems[i], i, fn(elems[i], key))\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (chainable) {\n\t\t\treturn elems;\n\t\t}\n\n\t\t// Gets\n\t\tif (bulk) {\n\t\t\treturn fn.call(elems);\n\t\t}\n\n\t\treturn len ? fn(elems[0], key) : emptyGet;\n\t};\n\n\n\t// Matches dashed string for camelizing\n\tvar rmsPrefix = /^-ms-/,\n\t\trdashAlpha = /-([a-z])/g;\n\n\t// Used by camelCase as callback to replace()\n\tfunction fcamelCase(_all, letter) {\n\t\treturn letter.toUpperCase();\n\t}\n\n\t// Convert dashed to camelCase; used by the css and data modules\n\t// Support: IE <=9 - 11, Edge 12 - 15\n\t// Microsoft forgot to hump their vendor prefix (trac-9572)\n\tfunction camelCase(string) {\n\t\treturn string.replace(rmsPrefix, \"ms-\").replace(rdashAlpha, fcamelCase);\n\t}\n\tvar acceptData = function (owner) {\n\n\t\t// Accepts only:\n\t\t//  - Node\n\t\t//    - Node.ELEMENT_NODE\n\t\t//    - Node.DOCUMENT_NODE\n\t\t//  - Object\n\t\t//    - Any\n\t\treturn owner.nodeType === 1 || owner.nodeType === 9 || !(+owner.nodeType);\n\t};\n\n\n\n\n\tfunction Data() {\n\t\tthis.expando = jQuery.expando + Data.uid++;\n\t}\n\n\tData.uid = 1;\n\n\tData.prototype = {\n\n\t\tcache: function (owner) {\n\n\t\t\t// Check if the owner object already has a cache\n\t\t\tvar value = owner[this.expando];\n\n\t\t\t// If not, create one\n\t\t\tif (!value) {\n\t\t\t\tvalue = {};\n\n\t\t\t\t// We can accept data for non-element nodes in modern browsers,\n\t\t\t\t// but we should not, see trac-8335.\n\t\t\t\t// Always return an empty object.\n\t\t\t\tif (acceptData(owner)) {\n\n\t\t\t\t\t// If it is a node unlikely to be stringify-ed or looped over\n\t\t\t\t\t// use plain assignment\n\t\t\t\t\tif (owner.nodeType) {\n\t\t\t\t\t\towner[this.expando] = value;\n\n\t\t\t\t\t\t// Otherwise secure it in a non-enumerable property\n\t\t\t\t\t\t// configurable must be true to allow the property to be\n\t\t\t\t\t\t// deleted when data is removed\n\t\t\t\t\t} else {\n\t\t\t\t\t\tObject.defineProperty(owner, this.expando, {\n\t\t\t\t\t\t\tvalue: value,\n\t\t\t\t\t\t\tconfigurable: true\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn value;\n\t\t},\n\t\tset: function (owner, data, value) {\n\t\t\tvar prop,\n\t\t\t\tcache = this.cache(owner);\n\n\t\t\t// Handle: [ owner, key, value ] args\n\t\t\t// Always use camelCase key (gh-2257)\n\t\t\tif (typeof data === \"string\") {\n\t\t\t\tcache[camelCase(data)] = value;\n\n\t\t\t\t// Handle: [ owner, { properties } ] args\n\t\t\t} else {\n\n\t\t\t\t// Copy the properties one-by-one to the cache object\n\t\t\t\tfor (prop in data) {\n\t\t\t\t\tcache[camelCase(prop)] = data[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn cache;\n\t\t},\n\t\tget: function (owner, key) {\n\t\t\treturn key === undefined ?\n\t\t\t\tthis.cache(owner) :\n\n\t\t\t\t// Always use camelCase key (gh-2257)\n\t\t\t\towner[this.expando] && owner[this.expando][camelCase(key)];\n\t\t},\n\t\taccess: function (owner, key, value) {\n\n\t\t\t// In cases where either:\n\t\t\t//\n\t\t\t//   1. No key was specified\n\t\t\t//   2. A string key was specified, but no value provided\n\t\t\t//\n\t\t\t// Take the \"read\" path and allow the get method to determine\n\t\t\t// which value to return, respectively either:\n\t\t\t//\n\t\t\t//   1. The entire cache object\n\t\t\t//   2. The data stored at the key\n\t\t\t//\n\t\t\tif (key === undefined ||\n\t\t\t\t((key && typeof key === \"string\") && value === undefined)) {\n\n\t\t\t\treturn this.get(owner, key);\n\t\t\t}\n\n\t\t\t// When the key is not a string, or both a key and value\n\t\t\t// are specified, set or extend (existing objects) with either:\n\t\t\t//\n\t\t\t//   1. An object of properties\n\t\t\t//   2. A key and value\n\t\t\t//\n\t\t\tthis.set(owner, key, value);\n\n\t\t\t// Since the \"set\" path can have two possible entry points\n\t\t\t// return the expected data based on which path was taken[*]\n\t\t\treturn value !== undefined ? value : key;\n\t\t},\n\t\tremove: function (owner, key) {\n\t\t\tvar i,\n\t\t\t\tcache = owner[this.expando];\n\n\t\t\tif (cache === undefined) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (key !== undefined) {\n\n\t\t\t\t// Support array or space separated string of keys\n\t\t\t\tif (Array.isArray(key)) {\n\n\t\t\t\t\t// If key is an array of keys...\n\t\t\t\t\t// We always set camelCase keys, so remove that.\n\t\t\t\t\tkey = key.map(camelCase);\n\t\t\t\t} else {\n\t\t\t\t\tkey = camelCase(key);\n\n\t\t\t\t\t// If a key with the spaces exists, use it.\n\t\t\t\t\t// Otherwise, create an array by matching non-whitespace\n\t\t\t\t\tkey = key in cache ?\n\t\t\t\t\t\t[key] :\n\t\t\t\t\t\t(key.match(rnothtmlwhite) || []);\n\t\t\t\t}\n\n\t\t\t\ti = key.length;\n\n\t\t\t\twhile (i--) {\n\t\t\t\t\tdelete cache[key[i]];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove the expando if there's no more data\n\t\t\tif (key === undefined || jQuery.isEmptyObject(cache)) {\n\n\t\t\t\t// Support: Chrome <=35 - 45\n\t\t\t\t// Webkit & Blink performance suffers when deleting properties\n\t\t\t\t// from DOM nodes, so set to undefined instead\n\t\t\t\t// https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted)\n\t\t\t\tif (owner.nodeType) {\n\t\t\t\t\towner[this.expando] = undefined;\n\t\t\t\t} else {\n\t\t\t\t\tdelete owner[this.expando];\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\thasData: function (owner) {\n\t\t\tvar cache = owner[this.expando];\n\t\t\treturn cache !== undefined && !jQuery.isEmptyObject(cache);\n\t\t}\n\t};\n\tvar dataPriv = new Data();\n\n\tvar dataUser = new Data();\n\n\n\n\t//\tImplementation Summary\n\t//\n\t//\t1. Enforce API surface and semantic compatibility with 1.9.x branch\n\t//\t2. Improve the module's maintainability by reducing the storage\n\t//\t\tpaths to a single mechanism.\n\t//\t3. Use the same single mechanism to support \"private\" and \"user\" data.\n\t//\t4. _Never_ expose \"private\" data to user code (TODO: Drop _data, _removeData)\n\t//\t5. Avoid exposing implementation details on user objects (eg. expando properties)\n\t//\t6. Provide a clear path for implementation upgrade to WeakMap in 2014\n\n\tvar rbrace = /^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,\n\t\trmultiDash = /[A-Z]/g;\n\n\tfunction getData(data) {\n\t\tif (data === \"true\") {\n\t\t\treturn true;\n\t\t}\n\n\t\tif (data === \"false\") {\n\t\t\treturn false;\n\t\t}\n\n\t\tif (data === \"null\") {\n\t\t\treturn null;\n\t\t}\n\n\t\t// Only convert to a number if it doesn't change the string\n\t\tif (data === +data + \"\") {\n\t\t\treturn +data;\n\t\t}\n\n\t\tif (rbrace.test(data)) {\n\t\t\treturn JSON.parse(data);\n\t\t}\n\n\t\treturn data;\n\t}\n\n\tfunction dataAttr(elem, key, data) {\n\t\tvar name;\n\n\t\t// If nothing was found internally, try to fetch any\n\t\t// data from the HTML5 data-* attribute\n\t\tif (data === undefined && elem.nodeType === 1) {\n\t\t\tname = \"data-\" + key.replace(rmultiDash, \"-$&\").toLowerCase();\n\t\t\tdata = elem.getAttribute(name);\n\n\t\t\tif (typeof data === \"string\") {\n\t\t\t\ttry {\n\t\t\t\t\tdata = getData(data);\n\t\t\t\t} catch (e) { }\n\n\t\t\t\t// Make sure we set the data so it isn't changed later\n\t\t\t\tdataUser.set(elem, key, data);\n\t\t\t} else {\n\t\t\t\tdata = undefined;\n\t\t\t}\n\t\t}\n\t\treturn data;\n\t}\n\n\tjQuery.extend({\n\t\thasData: function (elem) {\n\t\t\treturn dataUser.hasData(elem) || dataPriv.hasData(elem);\n\t\t},\n\n\t\tdata: function (elem, name, data) {\n\t\t\treturn dataUser.access(elem, name, data);\n\t\t},\n\n\t\tremoveData: function (elem, name) {\n\t\t\tdataUser.remove(elem, name);\n\t\t},\n\n\t\t// TODO: Now that all calls to _data and _removeData have been replaced\n\t\t// with direct calls to dataPriv methods, these can be deprecated.\n\t\t_data: function (elem, name, data) {\n\t\t\treturn dataPriv.access(elem, name, data);\n\t\t},\n\n\t\t_removeData: function (elem, name) {\n\t\t\tdataPriv.remove(elem, name);\n\t\t}\n\t});\n\n\tjQuery.fn.extend({\n\t\tdata: function (key, value) {\n\t\t\tvar i, name, data,\n\t\t\t\telem = this[0],\n\t\t\t\tattrs = elem && elem.attributes;\n\n\t\t\t// Gets all values\n\t\t\tif (key === undefined) {\n\t\t\t\tif (this.length) {\n\t\t\t\t\tdata = dataUser.get(elem);\n\n\t\t\t\t\tif (elem.nodeType === 1 && !dataPriv.get(elem, \"hasDataAttrs\")) {\n\t\t\t\t\t\ti = attrs.length;\n\t\t\t\t\t\twhile (i--) {\n\n\t\t\t\t\t\t\t// Support: IE 11 only\n\t\t\t\t\t\t\t// The attrs elements can be null (trac-14894)\n\t\t\t\t\t\t\tif (attrs[i]) {\n\t\t\t\t\t\t\t\tname = attrs[i].name;\n\t\t\t\t\t\t\t\tif (name.indexOf(\"data-\") === 0) {\n\t\t\t\t\t\t\t\t\tname = camelCase(name.slice(5));\n\t\t\t\t\t\t\t\t\tdataAttr(elem, name, data[name]);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdataPriv.set(elem, \"hasDataAttrs\", true);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn data;\n\t\t\t}\n\n\t\t\t// Sets multiple values\n\t\t\tif (typeof key === \"object\") {\n\t\t\t\treturn this.each(function () {\n\t\t\t\t\tdataUser.set(this, key);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn access(this, function (value) {\n\t\t\t\tvar data;\n\n\t\t\t\t// The calling jQuery object (element matches) is not empty\n\t\t\t\t// (and therefore has an element appears at this[ 0 ]) and the\n\t\t\t\t// `value` parameter was not undefined. An empty jQuery object\n\t\t\t\t// will result in `undefined` for elem = this[ 0 ] which will\n\t\t\t\t// throw an exception if an attempt to read a data cache is made.\n\t\t\t\tif (elem && value === undefined) {\n\n\t\t\t\t\t// Attempt to get data from the cache\n\t\t\t\t\t// The key will always be camelCased in Data\n\t\t\t\t\tdata = dataUser.get(elem, key);\n\t\t\t\t\tif (data !== undefined) {\n\t\t\t\t\t\treturn data;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Attempt to \"discover\" the data in\n\t\t\t\t\t// HTML5 custom data-* attrs\n\t\t\t\t\tdata = dataAttr(elem, key);\n\t\t\t\t\tif (data !== undefined) {\n\t\t\t\t\t\treturn data;\n\t\t\t\t\t}\n\n\t\t\t\t\t// We tried really hard, but the data doesn't exist.\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Set the data...\n\t\t\t\tthis.each(function () {\n\n\t\t\t\t\t// We always store the camelCased key\n\t\t\t\t\tdataUser.set(this, key, value);\n\t\t\t\t});\n\t\t\t}, null, value, arguments.length > 1, null, true);\n\t\t},\n\n\t\tremoveData: function (key) {\n\t\t\treturn this.each(function () {\n\t\t\t\tdataUser.remove(this, key);\n\t\t\t});\n\t\t}\n\t});\n\n\n\tjQuery.extend({\n\t\tqueue: function (elem, type, data) {\n\t\t\tvar queue;\n\n\t\t\tif (elem) {\n\t\t\t\ttype = (type || \"fx\") + \"queue\";\n\t\t\t\tqueue = dataPriv.get(elem, type);\n\n\t\t\t\t// Speed up dequeue by getting out quickly if this is just a lookup\n\t\t\t\tif (data) {\n\t\t\t\t\tif (!queue || Array.isArray(data)) {\n\t\t\t\t\t\tqueue = dataPriv.access(elem, type, jQuery.makeArray(data));\n\t\t\t\t\t} else {\n\t\t\t\t\t\tqueue.push(data);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn queue || [];\n\t\t\t}\n\t\t},\n\n\t\tdequeue: function (elem, type) {\n\t\t\ttype = type || \"fx\";\n\n\t\t\tvar queue = jQuery.queue(elem, type),\n\t\t\t\tstartLength = queue.length,\n\t\t\t\tfn = queue.shift(),\n\t\t\t\thooks = jQuery._queueHooks(elem, type),\n\t\t\t\tnext = function () {\n\t\t\t\t\tjQuery.dequeue(elem, type);\n\t\t\t\t};\n\n\t\t\t// If the fx queue is dequeued, always remove the progress sentinel\n\t\t\tif (fn === \"inprogress\") {\n\t\t\t\tfn = queue.shift();\n\t\t\t\tstartLength--;\n\t\t\t}\n\n\t\t\tif (fn) {\n\n\t\t\t\t// Add a progress sentinel to prevent the fx queue from being\n\t\t\t\t// automatically dequeued\n\t\t\t\tif (type === \"fx\") {\n\t\t\t\t\tqueue.unshift(\"inprogress\");\n\t\t\t\t}\n\n\t\t\t\t// Clear up the last queue stop function\n\t\t\t\tdelete hooks.stop;\n\t\t\t\tfn.call(elem, next, hooks);\n\t\t\t}\n\n\t\t\tif (!startLength && hooks) {\n\t\t\t\thooks.empty.fire();\n\t\t\t}\n\t\t},\n\n\t\t// Not public - generate a queueHooks object, or return the current one\n\t\t_queueHooks: function (elem, type) {\n\t\t\tvar key = type + \"queueHooks\";\n\t\t\treturn dataPriv.get(elem, key) || dataPriv.access(elem, key, {\n\t\t\t\tempty: jQuery.Callbacks(\"once memory\").add(function () {\n\t\t\t\t\tdataPriv.remove(elem, [type + \"queue\", key]);\n\t\t\t\t})\n\t\t\t});\n\t\t}\n\t});\n\n\tjQuery.fn.extend({\n\t\tqueue: function (type, data) {\n\t\t\tvar setter = 2;\n\n\t\t\tif (typeof type !== \"string\") {\n\t\t\t\tdata = type;\n\t\t\t\ttype = \"fx\";\n\t\t\t\tsetter--;\n\t\t\t}\n\n\t\t\tif (arguments.length < setter) {\n\t\t\t\treturn jQuery.queue(this[0], type);\n\t\t\t}\n\n\t\t\treturn data === undefined ?\n\t\t\t\tthis :\n\t\t\t\tthis.each(function () {\n\t\t\t\t\tvar queue = jQuery.queue(this, type, data);\n\n\t\t\t\t\t// Ensure a hooks for this queue\n\t\t\t\t\tjQuery._queueHooks(this, type);\n\n\t\t\t\t\tif (type === \"fx\" && queue[0] !== \"inprogress\") {\n\t\t\t\t\t\tjQuery.dequeue(this, type);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t},\n\t\tdequeue: function (type) {\n\t\t\treturn this.each(function () {\n\t\t\t\tjQuery.dequeue(this, type);\n\t\t\t});\n\t\t},\n\t\tclearQueue: function (type) {\n\t\t\treturn this.queue(type || \"fx\", []);\n\t\t},\n\n\t\t// Get a promise resolved when queues of a certain type\n\t\t// are emptied (fx is the type by default)\n\t\tpromise: function (type, obj) {\n\t\t\tvar tmp,\n\t\t\t\tcount = 1,\n\t\t\t\tdefer = jQuery.Deferred(),\n\t\t\t\telements = this,\n\t\t\t\ti = this.length,\n\t\t\t\tresolve = function () {\n\t\t\t\t\tif (!(--count)) {\n\t\t\t\t\t\tdefer.resolveWith(elements, [elements]);\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\tif (typeof type !== \"string\") {\n\t\t\t\tobj = type;\n\t\t\t\ttype = undefined;\n\t\t\t}\n\t\t\ttype = type || \"fx\";\n\n\t\t\twhile (i--) {\n\t\t\t\ttmp = dataPriv.get(elements[i], type + \"queueHooks\");\n\t\t\t\tif (tmp && tmp.empty) {\n\t\t\t\t\tcount++;\n\t\t\t\t\ttmp.empty.add(resolve);\n\t\t\t\t}\n\t\t\t}\n\t\t\tresolve();\n\t\t\treturn defer.promise(obj);\n\t\t}\n\t});\n\tvar pnum = (/[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/).source;\n\n\tvar rcssNum = new RegExp(\"^(?:([+-])=|)(\" + pnum + \")([a-z%]*)$\", \"i\");\n\n\n\tvar cssExpand = [\"Top\", \"Right\", \"Bottom\", \"Left\"];\n\n\tvar documentElement = document.documentElement;\n\n\n\n\tvar isAttached = function (elem) {\n\t\treturn jQuery.contains(elem.ownerDocument, elem);\n\t},\n\t\tcomposed = { composed: true };\n\n\t// Support: IE 9 - 11+, Edge 12 - 18+, iOS 10.0 - 10.2 only\n\t// Check attachment across shadow DOM boundaries when possible (gh-3504)\n\t// Support: iOS 10.0-10.2 only\n\t// Early iOS 10 versions support `attachShadow` but not `getRootNode`,\n\t// leading to errors. We need to check for `getRootNode`.\n\tif (documentElement.getRootNode) {\n\t\tisAttached = function (elem) {\n\t\t\treturn jQuery.contains(elem.ownerDocument, elem) ||\n\t\t\t\telem.getRootNode(composed) === elem.ownerDocument;\n\t\t};\n\t}\n\tvar isHiddenWithinTree = function (elem, el) {\n\n\t\t// isHiddenWithinTree might be called from jQuery#filter function;\n\t\t// in that case, element will be second argument\n\t\telem = el || elem;\n\n\t\t// Inline style trumps all\n\t\treturn elem.style.display === \"none\" ||\n\t\t\telem.style.display === \"\" &&\n\n\t\t\t// Otherwise, check computed style\n\t\t\t// Support: Firefox <=43 - 45\n\t\t\t// Disconnected elements can have computed display: none, so first confirm that elem is\n\t\t\t// in the document.\n\t\t\tisAttached(elem) &&\n\n\t\t\tjQuery.css(elem, \"display\") === \"none\";\n\t};\n\n\n\n\tfunction adjustCSS(elem, prop, valueParts, tween) {\n\t\tvar adjusted, scale,\n\t\t\tmaxIterations = 20,\n\t\t\tcurrentValue = tween ?\n\t\t\t\tfunction () {\n\t\t\t\t\treturn tween.cur();\n\t\t\t\t} :\n\t\t\t\tfunction () {\n\t\t\t\t\treturn jQuery.css(elem, prop, \"\");\n\t\t\t\t},\n\t\t\tinitial = currentValue(),\n\t\t\tunit = valueParts && valueParts[3] || (jQuery.cssNumber[prop] ? \"\" : \"px\"),\n\n\t\t\t// Starting value computation is required for potential unit mismatches\n\t\t\tinitialInUnit = elem.nodeType &&\n\t\t\t\t(jQuery.cssNumber[prop] || unit !== \"px\" && +initial) &&\n\t\t\t\trcssNum.exec(jQuery.css(elem, prop));\n\n\t\tif (initialInUnit && initialInUnit[3] !== unit) {\n\n\t\t\t// Support: Firefox <=54\n\t\t\t// Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144)\n\t\t\tinitial = initial / 2;\n\n\t\t\t// Trust units reported by jQuery.css\n\t\t\tunit = unit || initialInUnit[3];\n\n\t\t\t// Iteratively approximate from a nonzero starting point\n\t\t\tinitialInUnit = +initial || 1;\n\n\t\t\twhile (maxIterations--) {\n\n\t\t\t\t// Evaluate and update our best guess (doubling guesses that zero out).\n\t\t\t\t// Finish if the scale equals or crosses 1 (making the old*new product non-positive).\n\t\t\t\tjQuery.style(elem, prop, initialInUnit + unit);\n\t\t\t\tif ((1 - scale) * (1 - (scale = currentValue() / initial || 0.5)) <= 0) {\n\t\t\t\t\tmaxIterations = 0;\n\t\t\t\t}\n\t\t\t\tinitialInUnit = initialInUnit / scale;\n\n\t\t\t}\n\n\t\t\tinitialInUnit = initialInUnit * 2;\n\t\t\tjQuery.style(elem, prop, initialInUnit + unit);\n\n\t\t\t// Make sure we update the tween properties later on\n\t\t\tvalueParts = valueParts || [];\n\t\t}\n\n\t\tif (valueParts) {\n\t\t\tinitialInUnit = +initialInUnit || +initial || 0;\n\n\t\t\t// Apply relative offset (+=/-=) if specified\n\t\t\tadjusted = valueParts[1] ?\n\t\t\t\tinitialInUnit + (valueParts[1] + 1) * valueParts[2] :\n\t\t\t\t+valueParts[2];\n\t\t\tif (tween) {\n\t\t\t\ttween.unit = unit;\n\t\t\t\ttween.start = initialInUnit;\n\t\t\t\ttween.end = adjusted;\n\t\t\t}\n\t\t}\n\t\treturn adjusted;\n\t}\n\n\n\tvar defaultDisplayMap = {};\n\n\tfunction getDefaultDisplay(elem) {\n\t\tvar temp,\n\t\t\tdoc = elem.ownerDocument,\n\t\t\tnodeName = elem.nodeName,\n\t\t\tdisplay = defaultDisplayMap[nodeName];\n\n\t\tif (display) {\n\t\t\treturn display;\n\t\t}\n\n\t\ttemp = doc.body.appendChild(doc.createElement(nodeName));\n\t\tdisplay = jQuery.css(temp, \"display\");\n\n\t\ttemp.parentNode.removeChild(temp);\n\n\t\tif (display === \"none\") {\n\t\t\tdisplay = \"block\";\n\t\t}\n\t\tdefaultDisplayMap[nodeName] = display;\n\n\t\treturn display;\n\t}\n\n\tfunction showHide(elements, show) {\n\t\tvar display, elem,\n\t\t\tvalues = [],\n\t\t\tindex = 0,\n\t\t\tlength = elements.length;\n\n\t\t// Determine new display value for elements that need to change\n\t\tfor (; index < length; index++) {\n\t\t\telem = elements[index];\n\t\t\tif (!elem.style) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tdisplay = elem.style.display;\n\t\t\tif (show) {\n\n\t\t\t\t// Since we force visibility upon cascade-hidden elements, an immediate (and slow)\n\t\t\t\t// check is required in this first loop unless we have a nonempty display value (either\n\t\t\t\t// inline or about-to-be-restored)\n\t\t\t\tif (display === \"none\") {\n\t\t\t\t\tvalues[index] = dataPriv.get(elem, \"display\") || null;\n\t\t\t\t\tif (!values[index]) {\n\t\t\t\t\t\telem.style.display = \"\";\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (elem.style.display === \"\" && isHiddenWithinTree(elem)) {\n\t\t\t\t\tvalues[index] = getDefaultDisplay(elem);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (display !== \"none\") {\n\t\t\t\t\tvalues[index] = \"none\";\n\n\t\t\t\t\t// Remember what we're overwriting\n\t\t\t\t\tdataPriv.set(elem, \"display\", display);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Set the display of the elements in a second loop to avoid constant reflow\n\t\tfor (index = 0; index < length; index++) {\n\t\t\tif (values[index] != null) {\n\t\t\t\telements[index].style.display = values[index];\n\t\t\t}\n\t\t}\n\n\t\treturn elements;\n\t}\n\n\tjQuery.fn.extend({\n\t\tshow: function () {\n\t\t\treturn showHide(this, true);\n\t\t},\n\t\thide: function () {\n\t\t\treturn showHide(this);\n\t\t},\n\t\ttoggle: function (state) {\n\t\t\tif (typeof state === \"boolean\") {\n\t\t\t\treturn state ? this.show() : this.hide();\n\t\t\t}\n\n\t\t\treturn this.each(function () {\n\t\t\t\tif (isHiddenWithinTree(this)) {\n\t\t\t\t\tjQuery(this).show();\n\t\t\t\t} else {\n\t\t\t\t\tjQuery(this).hide();\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t});\n\tvar rcheckableType = (/^(?:checkbox|radio)$/i);\n\n\tvar rtagName = (/<([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]*)/i);\n\n\tvar rscriptType = (/^$|^module$|\\/(?:java|ecma)script/i);\n\n\n\n\t(function () {\n\t\tvar fragment = document.createDocumentFragment(),\n\t\t\tdiv = fragment.appendChild(document.createElement(\"div\")),\n\t\t\tinput = document.createElement(\"input\");\n\n\t\t// Support: Android 4.0 - 4.3 only\n\t\t// Check state lost if the name is set (trac-11217)\n\t\t// Support: Windows Web Apps (WWA)\n\t\t// `name` and `type` must use .setAttribute for WWA (trac-14901)\n\t\tinput.setAttribute(\"type\", \"radio\");\n\t\tinput.setAttribute(\"checked\", \"checked\");\n\t\tinput.setAttribute(\"name\", \"t\");\n\n\t\tdiv.appendChild(input);\n\n\t\t// Support: Android <=4.1 only\n\t\t// Older WebKit doesn't clone checked state correctly in fragments\n\t\tsupport.checkClone = div.cloneNode(true).cloneNode(true).lastChild.checked;\n\n\t\t// Support: IE <=11 only\n\t\t// Make sure textarea (and checkbox) defaultValue is properly cloned\n\t\tdiv.innerHTML = \"<textarea>x</textarea>\";\n\t\tsupport.noCloneChecked = !!div.cloneNode(true).lastChild.defaultValue;\n\n\t\t// Support: IE <=9 only\n\t\t// IE <=9 replaces <option> tags with their contents when inserted outside of\n\t\t// the select element.\n\t\tdiv.innerHTML = \"<option></option>\";\n\t\tsupport.option = !!div.lastChild;\n\t})();\n\n\n\t// We have to close these tags to support XHTML (trac-13200)\n\tvar wrapMap = {\n\n\t\t// XHTML parsers do not magically insert elements in the\n\t\t// same way that tag soup parsers do. So we cannot shorten\n\t\t// this by omitting <tbody> or other required elements.\n\t\tthead: [1, \"<table>\", \"</table>\"],\n\t\tcol: [2, \"<table><colgroup>\", \"</colgroup></table>\"],\n\t\ttr: [2, \"<table><tbody>\", \"</tbody></table>\"],\n\t\ttd: [3, \"<table><tbody><tr>\", \"</tr></tbody></table>\"],\n\n\t\t_default: [0, \"\", \"\"]\n\t};\n\n\twrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;\n\twrapMap.th = wrapMap.td;\n\n\t// Support: IE <=9 only\n\tif (!support.option) {\n\t\twrapMap.optgroup = wrapMap.option = [1, \"<select multiple='multiple'>\", \"</select>\"];\n\t}\n\n\n\tfunction getAll(context, tag) {\n\n\t\t// Support: IE <=9 - 11 only\n\t\t// Use typeof to avoid zero-argument method invocation on host objects (trac-15151)\n\t\tvar ret;\n\n\t\tif (typeof context.getElementsByTagName !== \"undefined\") {\n\t\t\tret = context.getElementsByTagName(tag || \"*\");\n\n\t\t} else if (typeof context.querySelectorAll !== \"undefined\") {\n\t\t\tret = context.querySelectorAll(tag || \"*\");\n\n\t\t} else {\n\t\t\tret = [];\n\t\t}\n\n\t\tif (tag === undefined || tag && nodeName(context, tag)) {\n\t\t\treturn jQuery.merge([context], ret);\n\t\t}\n\n\t\treturn ret;\n\t}\n\n\n\t// Mark scripts as having already been evaluated\n\tfunction setGlobalEval(elems, refElements) {\n\t\tvar i = 0,\n\t\t\tl = elems.length;\n\n\t\tfor (; i < l; i++) {\n\t\t\tdataPriv.set(\n\t\t\t\telems[i],\n\t\t\t\t\"globalEval\",\n\t\t\t\t!refElements || dataPriv.get(refElements[i], \"globalEval\")\n\t\t\t);\n\t\t}\n\t}\n\n\n\tvar rhtml = /<|&#?\\w+;/;\n\n\tfunction buildFragment(elems, context, scripts, selection, ignored) {\n\t\tvar elem, tmp, tag, wrap, attached, j,\n\t\t\tfragment = context.createDocumentFragment(),\n\t\t\tnodes = [],\n\t\t\ti = 0,\n\t\t\tl = elems.length;\n\n\t\tfor (; i < l; i++) {\n\t\t\telem = elems[i];\n\n\t\t\tif (elem || elem === 0) {\n\n\t\t\t\t// Add nodes directly\n\t\t\t\tif (toType(elem) === \"object\") {\n\n\t\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\t\tjQuery.merge(nodes, elem.nodeType ? [elem] : elem);\n\n\t\t\t\t\t// Convert non-html into a text node\n\t\t\t\t} else if (!rhtml.test(elem)) {\n\t\t\t\t\tnodes.push(context.createTextNode(elem));\n\n\t\t\t\t\t// Convert html into DOM nodes\n\t\t\t\t} else {\n\t\t\t\t\ttmp = tmp || fragment.appendChild(context.createElement(\"div\"));\n\n\t\t\t\t\t// Deserialize a standard representation\n\t\t\t\t\ttag = (rtagName.exec(elem) || [\"\", \"\"])[1].toLowerCase();\n\t\t\t\t\twrap = wrapMap[tag] || wrapMap._default;\n\t\t\t\t\ttmp.innerHTML = wrap[1] + jQuery.htmlPrefilter(elem) + wrap[2];\n\n\t\t\t\t\t// Descend through wrappers to the right content\n\t\t\t\t\tj = wrap[0];\n\t\t\t\t\twhile (j--) {\n\t\t\t\t\t\ttmp = tmp.lastChild;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\t\tjQuery.merge(nodes, tmp.childNodes);\n\n\t\t\t\t\t// Remember the top-level container\n\t\t\t\t\ttmp = fragment.firstChild;\n\n\t\t\t\t\t// Ensure the created nodes are orphaned (trac-12392)\n\t\t\t\t\ttmp.textContent = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Remove wrapper from fragment\n\t\tfragment.textContent = \"\";\n\n\t\ti = 0;\n\t\twhile ((elem = nodes[i++])) {\n\n\t\t\t// Skip elements already in the context collection (trac-4087)\n\t\t\tif (selection && jQuery.inArray(elem, selection) > -1) {\n\t\t\t\tif (ignored) {\n\t\t\t\t\tignored.push(elem);\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tattached = isAttached(elem);\n\n\t\t\t// Append to fragment\n\t\t\ttmp = getAll(fragment.appendChild(elem), \"script\");\n\n\t\t\t// Preserve script evaluation history\n\t\t\tif (attached) {\n\t\t\t\tsetGlobalEval(tmp);\n\t\t\t}\n\n\t\t\t// Capture executables\n\t\t\tif (scripts) {\n\t\t\t\tj = 0;\n\t\t\t\twhile ((elem = tmp[j++])) {\n\t\t\t\t\tif (rscriptType.test(elem.type || \"\")) {\n\t\t\t\t\t\tscripts.push(elem);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn fragment;\n\t}\n\n\n\tvar rtypenamespace = /^([^.]*)(?:\\.(.+)|)/;\n\n\tfunction returnTrue() {\n\t\treturn true;\n\t}\n\n\tfunction returnFalse() {\n\t\treturn false;\n\t}\n\n\tfunction on(elem, types, selector, data, fn, one) {\n\t\tvar origFn, type;\n\n\t\t// Types can be a map of types/handlers\n\t\tif (typeof types === \"object\") {\n\n\t\t\t// ( types-Object, selector, data )\n\t\t\tif (typeof selector !== \"string\") {\n\n\t\t\t\t// ( types-Object, data )\n\t\t\t\tdata = data || selector;\n\t\t\t\tselector = undefined;\n\t\t\t}\n\t\t\tfor (type in types) {\n\t\t\t\ton(elem, type, selector, data, types[type], one);\n\t\t\t}\n\t\t\treturn elem;\n\t\t}\n\n\t\tif (data == null && fn == null) {\n\n\t\t\t// ( types, fn )\n\t\t\tfn = selector;\n\t\t\tdata = selector = undefined;\n\t\t} else if (fn == null) {\n\t\t\tif (typeof selector === \"string\") {\n\n\t\t\t\t// ( types, selector, fn )\n\t\t\t\tfn = data;\n\t\t\t\tdata = undefined;\n\t\t\t} else {\n\n\t\t\t\t// ( types, data, fn )\n\t\t\t\tfn = data;\n\t\t\t\tdata = selector;\n\t\t\t\tselector = undefined;\n\t\t\t}\n\t\t}\n\t\tif (fn === false) {\n\t\t\tfn = returnFalse;\n\t\t} else if (!fn) {\n\t\t\treturn elem;\n\t\t}\n\n\t\tif (one === 1) {\n\t\t\torigFn = fn;\n\t\t\tfn = function (event) {\n\n\t\t\t\t// Can use an empty set, since event contains the info\n\t\t\t\tjQuery().off(event);\n\t\t\t\treturn origFn.apply(this, arguments);\n\t\t\t};\n\n\t\t\t// Use same guid so caller can remove using origFn\n\t\t\tfn.guid = origFn.guid || (origFn.guid = jQuery.guid++);\n\t\t}\n\t\treturn elem.each(function () {\n\t\t\tjQuery.event.add(this, types, fn, data, selector);\n\t\t});\n\t}\n\n\t/*\n\t * Helper functions for managing events -- not part of the public interface.\n\t * Props to Dean Edwards' addEvent library for many of the ideas.\n\t */\n\tjQuery.event = {\n\n\t\tglobal: {},\n\n\t\tadd: function (elem, types, handler, data, selector) {\n\n\t\t\tvar handleObjIn, eventHandle, tmp,\n\t\t\t\tevents, t, handleObj,\n\t\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\t\telemData = dataPriv.get(elem);\n\n\t\t\t// Only attach events to objects that accept data\n\t\t\tif (!acceptData(elem)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Caller can pass in an object of custom data in lieu of the handler\n\t\t\tif (handler.handler) {\n\t\t\t\thandleObjIn = handler;\n\t\t\t\thandler = handleObjIn.handler;\n\t\t\t\tselector = handleObjIn.selector;\n\t\t\t}\n\n\t\t\t// Ensure that invalid selectors throw exceptions at attach time\n\t\t\t// Evaluate against documentElement in case elem is a non-element node (e.g., document)\n\t\t\tif (selector) {\n\t\t\t\tjQuery.find.matchesSelector(documentElement, selector);\n\t\t\t}\n\n\t\t\t// Make sure that the handler has a unique ID, used to find/remove it later\n\t\t\tif (!handler.guid) {\n\t\t\t\thandler.guid = jQuery.guid++;\n\t\t\t}\n\n\t\t\t// Init the element's event structure and main handler, if this is the first\n\t\t\tif (!(events = elemData.events)) {\n\t\t\t\tevents = elemData.events = Object.create(null);\n\t\t\t}\n\t\t\tif (!(eventHandle = elemData.handle)) {\n\t\t\t\teventHandle = elemData.handle = function (e) {\n\n\t\t\t\t\t// Discard the second event of a jQuery.event.trigger() and\n\t\t\t\t\t// when an event is called after a page has unloaded\n\t\t\t\t\treturn typeof jQuery !== \"undefined\" && jQuery.event.triggered !== e.type ?\n\t\t\t\t\t\tjQuery.event.dispatch.apply(elem, arguments) : undefined;\n\t\t\t\t};\n\t\t\t}\n\n\t\t\t// Handle multiple events separated by a space\n\t\t\ttypes = (types || \"\").match(rnothtmlwhite) || [\"\"];\n\t\t\tt = types.length;\n\t\t\twhile (t--) {\n\t\t\t\ttmp = rtypenamespace.exec(types[t]) || [];\n\t\t\t\ttype = origType = tmp[1];\n\t\t\t\tnamespaces = (tmp[2] || \"\").split(\".\").sort();\n\n\t\t\t\t// There *must* be a type, no attaching namespace-only handlers\n\t\t\t\tif (!type) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// If event changes its type, use the special event handlers for the changed type\n\t\t\t\tspecial = jQuery.event.special[type] || {};\n\n\t\t\t\t// If selector defined, determine special event api type, otherwise given type\n\t\t\t\ttype = (selector ? special.delegateType : special.bindType) || type;\n\n\t\t\t\t// Update special based on newly reset type\n\t\t\t\tspecial = jQuery.event.special[type] || {};\n\n\t\t\t\t// handleObj is passed to all event handlers\n\t\t\t\thandleObj = jQuery.extend({\n\t\t\t\t\ttype: type,\n\t\t\t\t\torigType: origType,\n\t\t\t\t\tdata: data,\n\t\t\t\t\thandler: handler,\n\t\t\t\t\tguid: handler.guid,\n\t\t\t\t\tselector: selector,\n\t\t\t\t\tneedsContext: selector && jQuery.expr.match.needsContext.test(selector),\n\t\t\t\t\tnamespace: namespaces.join(\".\")\n\t\t\t\t}, handleObjIn);\n\n\t\t\t\t// Init the event handler queue if we're the first\n\t\t\t\tif (!(handlers = events[type])) {\n\t\t\t\t\thandlers = events[type] = [];\n\t\t\t\t\thandlers.delegateCount = 0;\n\n\t\t\t\t\t// Only use addEventListener if the special events handler returns false\n\t\t\t\t\tif (!special.setup ||\n\t\t\t\t\t\tspecial.setup.call(elem, data, namespaces, eventHandle) === false) {\n\n\t\t\t\t\t\tif (elem.addEventListener) {\n\t\t\t\t\t\t\telem.addEventListener(type, eventHandle);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (special.add) {\n\t\t\t\t\tspecial.add.call(elem, handleObj);\n\n\t\t\t\t\tif (!handleObj.handler.guid) {\n\t\t\t\t\t\thandleObj.handler.guid = handler.guid;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Add to the element's handler list, delegates in front\n\t\t\t\tif (selector) {\n\t\t\t\t\thandlers.splice(handlers.delegateCount++, 0, handleObj);\n\t\t\t\t} else {\n\t\t\t\t\thandlers.push(handleObj);\n\t\t\t\t}\n\n\t\t\t\t// Keep track of which events have ever been used, for event optimization\n\t\t\t\tjQuery.event.global[type] = true;\n\t\t\t}\n\n\t\t},\n\n\t\t// Detach an event or set of events from an element\n\t\tremove: function (elem, types, handler, selector, mappedTypes) {\n\n\t\t\tvar j, origCount, tmp,\n\t\t\t\tevents, t, handleObj,\n\t\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\t\telemData = dataPriv.hasData(elem) && dataPriv.get(elem);\n\n\t\t\tif (!elemData || !(events = elemData.events)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Once for each type.namespace in types; type may be omitted\n\t\t\ttypes = (types || \"\").match(rnothtmlwhite) || [\"\"];\n\t\t\tt = types.length;\n\t\t\twhile (t--) {\n\t\t\t\ttmp = rtypenamespace.exec(types[t]) || [];\n\t\t\t\ttype = origType = tmp[1];\n\t\t\t\tnamespaces = (tmp[2] || \"\").split(\".\").sort();\n\n\t\t\t\t// Unbind all events (on this namespace, if provided) for the element\n\t\t\t\tif (!type) {\n\t\t\t\t\tfor (type in events) {\n\t\t\t\t\t\tjQuery.event.remove(elem, type + types[t], handler, selector, true);\n\t\t\t\t\t}\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tspecial = jQuery.event.special[type] || {};\n\t\t\t\ttype = (selector ? special.delegateType : special.bindType) || type;\n\t\t\t\thandlers = events[type] || [];\n\t\t\t\ttmp = tmp[2] &&\n\t\t\t\t\tnew RegExp(\"(^|\\\\.)\" + namespaces.join(\"\\\\.(?:.*\\\\.|)\") + \"(\\\\.|$)\");\n\n\t\t\t\t// Remove matching events\n\t\t\t\torigCount = j = handlers.length;\n\t\t\t\twhile (j--) {\n\t\t\t\t\thandleObj = handlers[j];\n\n\t\t\t\t\tif ((mappedTypes || origType === handleObj.origType) &&\n\t\t\t\t\t\t(!handler || handler.guid === handleObj.guid) &&\n\t\t\t\t\t\t(!tmp || tmp.test(handleObj.namespace)) &&\n\t\t\t\t\t\t(!selector || selector === handleObj.selector ||\n\t\t\t\t\t\t\tselector === \"**\" && handleObj.selector)) {\n\t\t\t\t\t\thandlers.splice(j, 1);\n\n\t\t\t\t\t\tif (handleObj.selector) {\n\t\t\t\t\t\t\thandlers.delegateCount--;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (special.remove) {\n\t\t\t\t\t\t\tspecial.remove.call(elem, handleObj);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Remove generic event handler if we removed something and no more handlers exist\n\t\t\t\t// (avoids potential for endless recursion during removal of special event handlers)\n\t\t\t\tif (origCount && !handlers.length) {\n\t\t\t\t\tif (!special.teardown ||\n\t\t\t\t\t\tspecial.teardown.call(elem, namespaces, elemData.handle) === false) {\n\n\t\t\t\t\t\tjQuery.removeEvent(elem, type, elemData.handle);\n\t\t\t\t\t}\n\n\t\t\t\t\tdelete events[type];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove data and the expando if it's no longer used\n\t\t\tif (jQuery.isEmptyObject(events)) {\n\t\t\t\tdataPriv.remove(elem, \"handle events\");\n\t\t\t}\n\t\t},\n\n\t\tdispatch: function (nativeEvent) {\n\n\t\t\tvar i, j, ret, matched, handleObj, handlerQueue,\n\t\t\t\targs = new Array(arguments.length),\n\n\t\t\t\t// Make a writable jQuery.Event from the native event object\n\t\t\t\tevent = jQuery.event.fix(nativeEvent),\n\n\t\t\t\thandlers = (\n\t\t\t\t\tdataPriv.get(this, \"events\") || Object.create(null)\n\t\t\t\t)[event.type] || [],\n\t\t\t\tspecial = jQuery.event.special[event.type] || {};\n\n\t\t\t// Use the fix-ed jQuery.Event rather than the (read-only) native event\n\t\t\targs[0] = event;\n\n\t\t\tfor (i = 1; i < arguments.length; i++) {\n\t\t\t\targs[i] = arguments[i];\n\t\t\t}\n\n\t\t\tevent.delegateTarget = this;\n\n\t\t\t// Call the preDispatch hook for the mapped type, and let it bail if desired\n\t\t\tif (special.preDispatch && special.preDispatch.call(this, event) === false) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Determine handlers\n\t\t\thandlerQueue = jQuery.event.handlers.call(this, event, handlers);\n\n\t\t\t// Run delegates first; they may want to stop propagation beneath us\n\t\t\ti = 0;\n\t\t\twhile ((matched = handlerQueue[i++]) && !event.isPropagationStopped()) {\n\t\t\t\tevent.currentTarget = matched.elem;\n\n\t\t\t\tj = 0;\n\t\t\t\twhile ((handleObj = matched.handlers[j++]) &&\n\t\t\t\t\t!event.isImmediatePropagationStopped()) {\n\n\t\t\t\t\t// If the event is namespaced, then each handler is only invoked if it is\n\t\t\t\t\t// specially universal or its namespaces are a superset of the event's.\n\t\t\t\t\tif (!event.rnamespace || handleObj.namespace === false ||\n\t\t\t\t\t\tevent.rnamespace.test(handleObj.namespace)) {\n\n\t\t\t\t\t\tevent.handleObj = handleObj;\n\t\t\t\t\t\tevent.data = handleObj.data;\n\n\t\t\t\t\t\tret = ((jQuery.event.special[handleObj.origType] || {}).handle ||\n\t\t\t\t\t\t\thandleObj.handler).apply(matched.elem, args);\n\n\t\t\t\t\t\tif (ret !== undefined) {\n\t\t\t\t\t\t\tif ((event.result = ret) === false) {\n\t\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Call the postDispatch hook for the mapped type\n\t\t\tif (special.postDispatch) {\n\t\t\t\tspecial.postDispatch.call(this, event);\n\t\t\t}\n\n\t\t\treturn event.result;\n\t\t},\n\n\t\thandlers: function (event, handlers) {\n\t\t\tvar i, handleObj, sel, matchedHandlers, matchedSelectors,\n\t\t\t\thandlerQueue = [],\n\t\t\t\tdelegateCount = handlers.delegateCount,\n\t\t\t\tcur = event.target;\n\n\t\t\t// Find delegate handlers\n\t\t\tif (delegateCount &&\n\n\t\t\t\t// Support: IE <=9\n\t\t\t\t// Black-hole SVG <use> instance trees (trac-13180)\n\t\t\t\tcur.nodeType &&\n\n\t\t\t\t// Support: Firefox <=42\n\t\t\t\t// Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861)\n\t\t\t\t// https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click\n\t\t\t\t// Support: IE 11 only\n\t\t\t\t// ...but not arrow key \"clicks\" of radio inputs, which can have `button` -1 (gh-2343)\n\t\t\t\t!(event.type === \"click\" && event.button >= 1)) {\n\n\t\t\t\tfor (; cur !== this; cur = cur.parentNode || this) {\n\n\t\t\t\t\t// Don't check non-elements (trac-13208)\n\t\t\t\t\t// Don't process clicks on disabled elements (trac-6911, trac-8165, trac-11382, trac-11764)\n\t\t\t\t\tif (cur.nodeType === 1 && !(event.type === \"click\" && cur.disabled === true)) {\n\t\t\t\t\t\tmatchedHandlers = [];\n\t\t\t\t\t\tmatchedSelectors = {};\n\t\t\t\t\t\tfor (i = 0; i < delegateCount; i++) {\n\t\t\t\t\t\t\thandleObj = handlers[i];\n\n\t\t\t\t\t\t\t// Don't conflict with Object.prototype properties (trac-13203)\n\t\t\t\t\t\t\tsel = handleObj.selector + \" \";\n\n\t\t\t\t\t\t\tif (matchedSelectors[sel] === undefined) {\n\t\t\t\t\t\t\t\tmatchedSelectors[sel] = handleObj.needsContext ?\n\t\t\t\t\t\t\t\t\tjQuery(sel, this).index(cur) > -1 :\n\t\t\t\t\t\t\t\t\tjQuery.find(sel, this, null, [cur]).length;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (matchedSelectors[sel]) {\n\t\t\t\t\t\t\t\tmatchedHandlers.push(handleObj);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (matchedHandlers.length) {\n\t\t\t\t\t\t\thandlerQueue.push({ elem: cur, handlers: matchedHandlers });\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Add the remaining (directly-bound) handlers\n\t\t\tcur = this;\n\t\t\tif (delegateCount < handlers.length) {\n\t\t\t\thandlerQueue.push({ elem: cur, handlers: handlers.slice(delegateCount) });\n\t\t\t}\n\n\t\t\treturn handlerQueue;\n\t\t},\n\n\t\taddProp: function (name, hook) {\n\t\t\tObject.defineProperty(jQuery.Event.prototype, name, {\n\t\t\t\tenumerable: true,\n\t\t\t\tconfigurable: true,\n\n\t\t\t\tget: isFunction(hook) ?\n\t\t\t\t\tfunction () {\n\t\t\t\t\t\tif (this.originalEvent) {\n\t\t\t\t\t\t\treturn hook(this.originalEvent);\n\t\t\t\t\t\t}\n\t\t\t\t\t} :\n\t\t\t\t\tfunction () {\n\t\t\t\t\t\tif (this.originalEvent) {\n\t\t\t\t\t\t\treturn this.originalEvent[name];\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\n\t\t\t\tset: function (value) {\n\t\t\t\t\tObject.defineProperty(this, name, {\n\t\t\t\t\t\tenumerable: true,\n\t\t\t\t\t\tconfigurable: true,\n\t\t\t\t\t\twritable: true,\n\t\t\t\t\t\tvalue: value\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\tfix: function (originalEvent) {\n\t\t\treturn originalEvent[jQuery.expando] ?\n\t\t\t\toriginalEvent :\n\t\t\t\tnew jQuery.Event(originalEvent);\n\t\t},\n\n\t\tspecial: {\n\t\t\tload: {\n\n\t\t\t\t// Prevent triggered image.load events from bubbling to window.load\n\t\t\t\tnoBubble: true\n\t\t\t},\n\t\t\tclick: {\n\n\t\t\t\t// Utilize native event to ensure correct state for checkable inputs\n\t\t\t\tsetup: function (data) {\n\n\t\t\t\t\t// For mutual compressibility with _default, replace `this` access with a local var.\n\t\t\t\t\t// `|| data` is dead code meant only to preserve the variable through minification.\n\t\t\t\t\tvar el = this || data;\n\n\t\t\t\t\t// Claim the first handler\n\t\t\t\t\tif (rcheckableType.test(el.type) &&\n\t\t\t\t\t\tel.click && nodeName(el, \"input\")) {\n\n\t\t\t\t\t\t// dataPriv.set( el, \"click\", ... )\n\t\t\t\t\t\tleverageNative(el, \"click\", true);\n\t\t\t\t\t}\n\n\t\t\t\t\t// Return false to allow normal processing in the caller\n\t\t\t\t\treturn false;\n\t\t\t\t},\n\t\t\t\ttrigger: function (data) {\n\n\t\t\t\t\t// For mutual compressibility with _default, replace `this` access with a local var.\n\t\t\t\t\t// `|| data` is dead code meant only to preserve the variable through minification.\n\t\t\t\t\tvar el = this || data;\n\n\t\t\t\t\t// Force setup before triggering a click\n\t\t\t\t\tif (rcheckableType.test(el.type) &&\n\t\t\t\t\t\tel.click && nodeName(el, \"input\")) {\n\n\t\t\t\t\t\tleverageNative(el, \"click\");\n\t\t\t\t\t}\n\n\t\t\t\t\t// Return non-false to allow normal event-path propagation\n\t\t\t\t\treturn true;\n\t\t\t\t},\n\n\t\t\t\t// For cross-browser consistency, suppress native .click() on links\n\t\t\t\t// Also prevent it if we're currently inside a leveraged native-event stack\n\t\t\t\t_default: function (event) {\n\t\t\t\t\tvar target = event.target;\n\t\t\t\t\treturn rcheckableType.test(target.type) &&\n\t\t\t\t\t\ttarget.click && nodeName(target, \"input\") &&\n\t\t\t\t\t\tdataPriv.get(target, \"click\") ||\n\t\t\t\t\t\tnodeName(target, \"a\");\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tbeforeunload: {\n\t\t\t\tpostDispatch: function (event) {\n\n\t\t\t\t\t// Support: Firefox 20+\n\t\t\t\t\t// Firefox doesn't alert if the returnValue field is not set.\n\t\t\t\t\tif (event.result !== undefined && event.originalEvent) {\n\t\t\t\t\t\tevent.originalEvent.returnValue = event.result;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t// Ensure the presence of an event listener that handles manually-triggered\n\t// synthetic events by interrupting progress until reinvoked in response to\n\t// *native* events that it fires directly, ensuring that state changes have\n\t// already occurred before other listeners are invoked.\n\tfunction leverageNative(el, type, isSetup) {\n\n\t\t// Missing `isSetup` indicates a trigger call, which must force setup through jQuery.event.add\n\t\tif (!isSetup) {\n\t\t\tif (dataPriv.get(el, type) === undefined) {\n\t\t\t\tjQuery.event.add(el, type, returnTrue);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\t// Register the controller as a special universal handler for all event namespaces\n\t\tdataPriv.set(el, type, false);\n\t\tjQuery.event.add(el, type, {\n\t\t\tnamespace: false,\n\t\t\thandler: function (event) {\n\t\t\t\tvar result,\n\t\t\t\t\tsaved = dataPriv.get(this, type);\n\n\t\t\t\tif ((event.isTrigger & 1) && this[type]) {\n\n\t\t\t\t\t// Interrupt processing of the outer synthetic .trigger()ed event\n\t\t\t\t\tif (!saved) {\n\n\t\t\t\t\t\t// Store arguments for use when handling the inner native event\n\t\t\t\t\t\t// There will always be at least one argument (an event object), so this array\n\t\t\t\t\t\t// will not be confused with a leftover capture object.\n\t\t\t\t\t\tsaved = slice.call(arguments);\n\t\t\t\t\t\tdataPriv.set(this, type, saved);\n\n\t\t\t\t\t\t// Trigger the native event and capture its result\n\t\t\t\t\t\tthis[type]();\n\t\t\t\t\t\tresult = dataPriv.get(this, type);\n\t\t\t\t\t\tdataPriv.set(this, type, false);\n\n\t\t\t\t\t\tif (saved !== result) {\n\n\t\t\t\t\t\t\t// Cancel the outer synthetic event\n\t\t\t\t\t\t\tevent.stopImmediatePropagation();\n\t\t\t\t\t\t\tevent.preventDefault();\n\n\t\t\t\t\t\t\treturn result;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// If this is an inner synthetic event for an event with a bubbling surrogate\n\t\t\t\t\t\t// (focus or blur), assume that the surrogate already propagated from triggering\n\t\t\t\t\t\t// the native event and prevent that from happening again here.\n\t\t\t\t\t\t// This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the\n\t\t\t\t\t\t// bubbling surrogate propagates *after* the non-bubbling base), but that seems\n\t\t\t\t\t\t// less bad than duplication.\n\t\t\t\t\t} else if ((jQuery.event.special[type] || {}).delegateType) {\n\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t}\n\n\t\t\t\t\t// If this is a native event triggered above, everything is now in order\n\t\t\t\t\t// Fire an inner synthetic event with the original arguments\n\t\t\t\t} else if (saved) {\n\n\t\t\t\t\t// ...and capture the result\n\t\t\t\t\tdataPriv.set(this, type, jQuery.event.trigger(\n\t\t\t\t\t\tsaved[0],\n\t\t\t\t\t\tsaved.slice(1),\n\t\t\t\t\t\tthis\n\t\t\t\t\t));\n\n\t\t\t\t\t// Abort handling of the native event by all jQuery handlers while allowing\n\t\t\t\t\t// native handlers on the same element to run. On target, this is achieved\n\t\t\t\t\t// by stopping immediate propagation just on the jQuery event. However,\n\t\t\t\t\t// the native event is re-wrapped by a jQuery one on each level of the\n\t\t\t\t\t// propagation so the only way to stop it for jQuery is to stop it for\n\t\t\t\t\t// everyone via native `stopPropagation()`. This is not a problem for\n\t\t\t\t\t// focus/blur which don't bubble, but it does also stop click on checkboxes\n\t\t\t\t\t// and radios. We accept this limitation.\n\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\tevent.isImmediatePropagationStopped = returnTrue;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\tjQuery.removeEvent = function (elem, type, handle) {\n\n\t\t// This \"if\" is needed for plain objects\n\t\tif (elem.removeEventListener) {\n\t\t\telem.removeEventListener(type, handle);\n\t\t}\n\t};\n\n\tjQuery.Event = function (src, props) {\n\n\t\t// Allow instantiation without the 'new' keyword\n\t\tif (!(this instanceof jQuery.Event)) {\n\t\t\treturn new jQuery.Event(src, props);\n\t\t}\n\n\t\t// Event object\n\t\tif (src && src.type) {\n\t\t\tthis.originalEvent = src;\n\t\t\tthis.type = src.type;\n\n\t\t\t// Events bubbling up the document may have been marked as prevented\n\t\t\t// by a handler lower down the tree; reflect the correct value.\n\t\t\tthis.isDefaultPrevented = src.defaultPrevented ||\n\t\t\t\tsrc.defaultPrevented === undefined &&\n\n\t\t\t\t// Support: Android <=2.3 only\n\t\t\t\tsrc.returnValue === false ?\n\t\t\t\treturnTrue :\n\t\t\t\treturnFalse;\n\n\t\t\t// Create target properties\n\t\t\t// Support: Safari <=6 - 7 only\n\t\t\t// Target should not be a text node (trac-504, trac-13143)\n\t\t\tthis.target = (src.target && src.target.nodeType === 3) ?\n\t\t\t\tsrc.target.parentNode :\n\t\t\t\tsrc.target;\n\n\t\t\tthis.currentTarget = src.currentTarget;\n\t\t\tthis.relatedTarget = src.relatedTarget;\n\n\t\t\t// Event type\n\t\t} else {\n\t\t\tthis.type = src;\n\t\t}\n\n\t\t// Put explicitly provided properties onto the event object\n\t\tif (props) {\n\t\t\tjQuery.extend(this, props);\n\t\t}\n\n\t\t// Create a timestamp if incoming event doesn't have one\n\t\tthis.timeStamp = src && src.timeStamp || Date.now();\n\n\t\t// Mark it as fixed\n\t\tthis[jQuery.expando] = true;\n\t};\n\n\t// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding\n\t// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html\n\tjQuery.Event.prototype = {\n\t\tconstructor: jQuery.Event,\n\t\tisDefaultPrevented: returnFalse,\n\t\tisPropagationStopped: returnFalse,\n\t\tisImmediatePropagationStopped: returnFalse,\n\t\tisSimulated: false,\n\n\t\tpreventDefault: function () {\n\t\t\tvar e = this.originalEvent;\n\n\t\t\tthis.isDefaultPrevented = returnTrue;\n\n\t\t\tif (e && !this.isSimulated) {\n\t\t\t\te.preventDefault();\n\t\t\t}\n\t\t},\n\t\tstopPropagation: function () {\n\t\t\tvar e = this.originalEvent;\n\n\t\t\tthis.isPropagationStopped = returnTrue;\n\n\t\t\tif (e && !this.isSimulated) {\n\t\t\t\te.stopPropagation();\n\t\t\t}\n\t\t},\n\t\tstopImmediatePropagation: function () {\n\t\t\tvar e = this.originalEvent;\n\n\t\t\tthis.isImmediatePropagationStopped = returnTrue;\n\n\t\t\tif (e && !this.isSimulated) {\n\t\t\t\te.stopImmediatePropagation();\n\t\t\t}\n\n\t\t\tthis.stopPropagation();\n\t\t}\n\t};\n\n\t// Includes all common event props including KeyEvent and MouseEvent specific props\n\tjQuery.each({\n\t\taltKey: true,\n\t\tbubbles: true,\n\t\tcancelable: true,\n\t\tchangedTouches: true,\n\t\tctrlKey: true,\n\t\tdetail: true,\n\t\teventPhase: true,\n\t\tmetaKey: true,\n\t\tpageX: true,\n\t\tpageY: true,\n\t\tshiftKey: true,\n\t\tview: true,\n\t\t\"char\": true,\n\t\tcode: true,\n\t\tcharCode: true,\n\t\tkey: true,\n\t\tkeyCode: true,\n\t\tbutton: true,\n\t\tbuttons: true,\n\t\tclientX: true,\n\t\tclientY: true,\n\t\toffsetX: true,\n\t\toffsetY: true,\n\t\tpointerId: true,\n\t\tpointerType: true,\n\t\tscreenX: true,\n\t\tscreenY: true,\n\t\ttargetTouches: true,\n\t\ttoElement: true,\n\t\ttouches: true,\n\t\twhich: true\n\t}, jQuery.event.addProp);\n\n\tjQuery.each({ focus: \"focusin\", blur: \"focusout\" }, function (type, delegateType) {\n\n\t\tfunction focusMappedHandler(nativeEvent) {\n\t\t\tif (document.documentMode) {\n\n\t\t\t\t// Support: IE 11+\n\t\t\t\t// Attach a single focusin/focusout handler on the document while someone wants\n\t\t\t\t// focus/blur. This is because the former are synchronous in IE while the latter\n\t\t\t\t// are async. In other browsers, all those handlers are invoked synchronously.\n\n\t\t\t\t// `handle` from private data would already wrap the event, but we need\n\t\t\t\t// to change the `type` here.\n\t\t\t\tvar handle = dataPriv.get(this, \"handle\"),\n\t\t\t\t\tevent = jQuery.event.fix(nativeEvent);\n\t\t\t\tevent.type = nativeEvent.type === \"focusin\" ? \"focus\" : \"blur\";\n\t\t\t\tevent.isSimulated = true;\n\n\t\t\t\t// First, handle focusin/focusout\n\t\t\t\thandle(nativeEvent);\n\n\t\t\t\t// ...then, handle focus/blur\n\t\t\t\t//\n\t\t\t\t// focus/blur don't bubble while focusin/focusout do; simulate the former by only\n\t\t\t\t// invoking the handler at the lower level.\n\t\t\t\tif (event.target === event.currentTarget) {\n\n\t\t\t\t\t// The setup part calls `leverageNative`, which, in turn, calls\n\t\t\t\t\t// `jQuery.event.add`, so event handle will already have been set\n\t\t\t\t\t// by this point.\n\t\t\t\t\thandle(event);\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\t// For non-IE browsers, attach a single capturing handler on the document\n\t\t\t\t// while someone wants focusin/focusout.\n\t\t\t\tjQuery.event.simulate(delegateType, nativeEvent.target,\n\t\t\t\t\tjQuery.event.fix(nativeEvent));\n\t\t\t}\n\t\t}\n\n\t\tjQuery.event.special[type] = {\n\n\t\t\t// Utilize native event if possible so blur/focus sequence is correct\n\t\t\tsetup: function () {\n\n\t\t\t\tvar attaches;\n\n\t\t\t\t// Claim the first handler\n\t\t\t\t// dataPriv.set( this, \"focus\", ... )\n\t\t\t\t// dataPriv.set( this, \"blur\", ... )\n\t\t\t\tleverageNative(this, type, true);\n\n\t\t\t\tif (document.documentMode) {\n\n\t\t\t\t\t// Support: IE 9 - 11+\n\t\t\t\t\t// We use the same native handler for focusin & focus (and focusout & blur)\n\t\t\t\t\t// so we need to coordinate setup & teardown parts between those events.\n\t\t\t\t\t// Use `delegateType` as the key as `type` is already used by `leverageNative`.\n\t\t\t\t\tattaches = dataPriv.get(this, delegateType);\n\t\t\t\t\tif (!attaches) {\n\t\t\t\t\t\tthis.addEventListener(delegateType, focusMappedHandler);\n\t\t\t\t\t}\n\t\t\t\t\tdataPriv.set(this, delegateType, (attaches || 0) + 1);\n\t\t\t\t} else {\n\n\t\t\t\t\t// Return false to allow normal processing in the caller\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\t\t\ttrigger: function () {\n\n\t\t\t\t// Force setup before trigger\n\t\t\t\tleverageNative(this, type);\n\n\t\t\t\t// Return non-false to allow normal event-path propagation\n\t\t\t\treturn true;\n\t\t\t},\n\n\t\t\tteardown: function () {\n\t\t\t\tvar attaches;\n\n\t\t\t\tif (document.documentMode) {\n\t\t\t\t\tattaches = dataPriv.get(this, delegateType) - 1;\n\t\t\t\t\tif (!attaches) {\n\t\t\t\t\t\tthis.removeEventListener(delegateType, focusMappedHandler);\n\t\t\t\t\t\tdataPriv.remove(this, delegateType);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdataPriv.set(this, delegateType, attaches);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\n\t\t\t\t\t// Return false to indicate standard teardown should be applied\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// Suppress native focus or blur if we're currently inside\n\t\t\t// a leveraged native-event stack\n\t\t\t_default: function (event) {\n\t\t\t\treturn dataPriv.get(event.target, type);\n\t\t\t},\n\n\t\t\tdelegateType: delegateType\n\t\t};\n\n\t\t// Support: Firefox <=44\n\t\t// Firefox doesn't have focus(in | out) events\n\t\t// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787\n\t\t//\n\t\t// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1\n\t\t// focus(in | out) events fire after focus & blur events,\n\t\t// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order\n\t\t// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857\n\t\t//\n\t\t// Support: IE 9 - 11+\n\t\t// To preserve relative focusin/focus & focusout/blur event order guaranteed on the 3.x branch,\n\t\t// attach a single handler for both events in IE.\n\t\tjQuery.event.special[delegateType] = {\n\t\t\tsetup: function () {\n\n\t\t\t\t// Handle: regular nodes (via `this.ownerDocument`), window\n\t\t\t\t// (via `this.document`) & document (via `this`).\n\t\t\t\tvar doc = this.ownerDocument || this.document || this,\n\t\t\t\t\tdataHolder = document.documentMode ? this : doc,\n\t\t\t\t\tattaches = dataPriv.get(dataHolder, delegateType);\n\n\t\t\t\t// Support: IE 9 - 11+\n\t\t\t\t// We use the same native handler for focusin & focus (and focusout & blur)\n\t\t\t\t// so we need to coordinate setup & teardown parts between those events.\n\t\t\t\t// Use `delegateType` as the key as `type` is already used by `leverageNative`.\n\t\t\t\tif (!attaches) {\n\t\t\t\t\tif (document.documentMode) {\n\t\t\t\t\t\tthis.addEventListener(delegateType, focusMappedHandler);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdoc.addEventListener(type, focusMappedHandler, true);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tdataPriv.set(dataHolder, delegateType, (attaches || 0) + 1);\n\t\t\t},\n\t\t\tteardown: function () {\n\t\t\t\tvar doc = this.ownerDocument || this.document || this,\n\t\t\t\t\tdataHolder = document.documentMode ? this : doc,\n\t\t\t\t\tattaches = dataPriv.get(dataHolder, delegateType) - 1;\n\n\t\t\t\tif (!attaches) {\n\t\t\t\t\tif (document.documentMode) {\n\t\t\t\t\t\tthis.removeEventListener(delegateType, focusMappedHandler);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdoc.removeEventListener(type, focusMappedHandler, true);\n\t\t\t\t\t}\n\t\t\t\t\tdataPriv.remove(dataHolder, delegateType);\n\t\t\t\t} else {\n\t\t\t\t\tdataPriv.set(dataHolder, delegateType, attaches);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t});\n\n\t// Create mouseenter/leave events using mouseover/out and event-time checks\n\t// so that event delegation works in jQuery.\n\t// Do the same for pointerenter/pointerleave and pointerover/pointerout\n\t//\n\t// Support: Safari 7 only\n\t// Safari sends mouseenter too often; see:\n\t// https://bugs.chromium.org/p/chromium/issues/detail?id=470258\n\t// for the description of the bug (it existed in older Chrome versions as well).\n\tjQuery.each({\n\t\tmouseenter: \"mouseover\",\n\t\tmouseleave: \"mouseout\",\n\t\tpointerenter: \"pointerover\",\n\t\tpointerleave: \"pointerout\"\n\t}, function (orig, fix) {\n\t\tjQuery.event.special[orig] = {\n\t\t\tdelegateType: fix,\n\t\t\tbindType: fix,\n\n\t\t\thandle: function (event) {\n\t\t\t\tvar ret,\n\t\t\t\t\ttarget = this,\n\t\t\t\t\trelated = event.relatedTarget,\n\t\t\t\t\thandleObj = event.handleObj;\n\n\t\t\t\t// For mouseenter/leave call the handler if related is outside the target.\n\t\t\t\t// NB: No relatedTarget if the mouse left/entered the browser window\n\t\t\t\tif (!related || (related !== target && !jQuery.contains(target, related))) {\n\t\t\t\t\tevent.type = handleObj.origType;\n\t\t\t\t\tret = handleObj.handler.apply(this, arguments);\n\t\t\t\t\tevent.type = fix;\n\t\t\t\t}\n\t\t\t\treturn ret;\n\t\t\t}\n\t\t};\n\t});\n\n\tjQuery.fn.extend({\n\n\t\ton: function (types, selector, data, fn) {\n\t\t\treturn on(this, types, selector, data, fn);\n\t\t},\n\t\tone: function (types, selector, data, fn) {\n\t\t\treturn on(this, types, selector, data, fn, 1);\n\t\t},\n\t\toff: function (types, selector, fn) {\n\t\t\tvar handleObj, type;\n\t\t\tif (types && types.preventDefault && types.handleObj) {\n\n\t\t\t\t// ( event )  dispatched jQuery.Event\n\t\t\t\thandleObj = types.handleObj;\n\t\t\t\tjQuery(types.delegateTarget).off(\n\t\t\t\t\thandleObj.namespace ?\n\t\t\t\t\t\thandleObj.origType + \".\" + handleObj.namespace :\n\t\t\t\t\t\thandleObj.origType,\n\t\t\t\t\thandleObj.selector,\n\t\t\t\t\thandleObj.handler\n\t\t\t\t);\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\tif (typeof types === \"object\") {\n\n\t\t\t\t// ( types-object [, selector] )\n\t\t\t\tfor (type in types) {\n\t\t\t\t\tthis.off(type, selector, types[type]);\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\tif (selector === false || typeof selector === \"function\") {\n\n\t\t\t\t// ( types [, fn] )\n\t\t\t\tfn = selector;\n\t\t\t\tselector = undefined;\n\t\t\t}\n\t\t\tif (fn === false) {\n\t\t\t\tfn = returnFalse;\n\t\t\t}\n\t\t\treturn this.each(function () {\n\t\t\t\tjQuery.event.remove(this, types, fn, selector);\n\t\t\t});\n\t\t}\n\t});\n\n\n\tvar\n\n\t\t// Support: IE <=10 - 11, Edge 12 - 13 only\n\t\t// In IE/Edge using regex groups here causes severe slowdowns.\n\t\t// See https://connect.microsoft.com/IE/feedback/details/1736512/\n\t\trnoInnerhtml = /<script|<style|<link/i,\n\n\t\t// checked=\"checked\" or checked\n\t\trchecked = /checked\\s*(?:[^=]|=\\s*.checked.)/i,\n\n\t\trcleanScript = /^\\s*<!\\[CDATA\\[|\\]\\]>\\s*$/g;\n\n\t// Prefer a tbody over its parent table for containing new rows\n\tfunction manipulationTarget(elem, content) {\n\t\tif (nodeName(elem, \"table\") &&\n\t\t\tnodeName(content.nodeType !== 11 ? content : content.firstChild, \"tr\")) {\n\n\t\t\treturn jQuery(elem).children(\"tbody\")[0] || elem;\n\t\t}\n\n\t\treturn elem;\n\t}\n\n\t// Replace/restore the type attribute of script elements for safe DOM manipulation\n\tfunction disableScript(elem) {\n\t\telem.type = (elem.getAttribute(\"type\") !== null) + \"/\" + elem.type;\n\t\treturn elem;\n\t}\n\tfunction restoreScript(elem) {\n\t\tif ((elem.type || \"\").slice(0, 5) === \"true/\") {\n\t\t\telem.type = elem.type.slice(5);\n\t\t} else {\n\t\t\telem.removeAttribute(\"type\");\n\t\t}\n\n\t\treturn elem;\n\t}\n\n\tfunction cloneCopyEvent(src, dest) {\n\t\tvar i, l, type, pdataOld, udataOld, udataCur, events;\n\n\t\tif (dest.nodeType !== 1) {\n\t\t\treturn;\n\t\t}\n\n\t\t// 1. Copy private data: events, handlers, etc.\n\t\tif (dataPriv.hasData(src)) {\n\t\t\tpdataOld = dataPriv.get(src);\n\t\t\tevents = pdataOld.events;\n\n\t\t\tif (events) {\n\t\t\t\tdataPriv.remove(dest, \"handle events\");\n\n\t\t\t\tfor (type in events) {\n\t\t\t\t\tfor (i = 0, l = events[type].length; i < l; i++) {\n\t\t\t\t\t\tjQuery.event.add(dest, type, events[type][i]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// 2. Copy user data\n\t\tif (dataUser.hasData(src)) {\n\t\t\tudataOld = dataUser.access(src);\n\t\t\tudataCur = jQuery.extend({}, udataOld);\n\n\t\t\tdataUser.set(dest, udataCur);\n\t\t}\n\t}\n\n\t// Fix IE bugs, see support tests\n\tfunction fixInput(src, dest) {\n\t\tvar nodeName = dest.nodeName.toLowerCase();\n\n\t\t// Fails to persist the checked state of a cloned checkbox or radio button.\n\t\tif (nodeName === \"input\" && rcheckableType.test(src.type)) {\n\t\t\tdest.checked = src.checked;\n\n\t\t\t// Fails to return the selected option to the default selected state when cloning options\n\t\t} else if (nodeName === \"input\" || nodeName === \"textarea\") {\n\t\t\tdest.defaultValue = src.defaultValue;\n\t\t}\n\t}\n\n\tfunction domManip(collection, args, callback, ignored) {\n\n\t\t// Flatten any nested arrays\n\t\targs = flat(args);\n\n\t\tvar fragment, first, scripts, hasScripts, node, doc,\n\t\t\ti = 0,\n\t\t\tl = collection.length,\n\t\t\tiNoClone = l - 1,\n\t\t\tvalue = args[0],\n\t\t\tvalueIsFunction = isFunction(value);\n\n\t\t// We can't cloneNode fragments that contain checked, in WebKit\n\t\tif (valueIsFunction ||\n\t\t\t(l > 1 && typeof value === \"string\" &&\n\t\t\t\t!support.checkClone && rchecked.test(value))) {\n\t\t\treturn collection.each(function (index) {\n\t\t\t\tvar self = collection.eq(index);\n\t\t\t\tif (valueIsFunction) {\n\t\t\t\t\targs[0] = value.call(this, index, self.html());\n\t\t\t\t}\n\t\t\t\tdomManip(self, args, callback, ignored);\n\t\t\t});\n\t\t}\n\n\t\tif (l) {\n\t\t\tfragment = buildFragment(args, collection[0].ownerDocument, false, collection, ignored);\n\t\t\tfirst = fragment.firstChild;\n\n\t\t\tif (fragment.childNodes.length === 1) {\n\t\t\t\tfragment = first;\n\t\t\t}\n\n\t\t\t// Require either new content or an interest in ignored elements to invoke the callback\n\t\t\tif (first || ignored) {\n\t\t\t\tscripts = jQuery.map(getAll(fragment, \"script\"), disableScript);\n\t\t\t\thasScripts = scripts.length;\n\n\t\t\t\t// Use the original fragment for the last item\n\t\t\t\t// instead of the first because it can end up\n\t\t\t\t// being emptied incorrectly in certain situations (trac-8070).\n\t\t\t\tfor (; i < l; i++) {\n\t\t\t\t\tnode = fragment;\n\n\t\t\t\t\tif (i !== iNoClone) {\n\t\t\t\t\t\tnode = jQuery.clone(node, true, true);\n\n\t\t\t\t\t\t// Keep references to cloned scripts for later restoration\n\t\t\t\t\t\tif (hasScripts) {\n\n\t\t\t\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\t\t\t\tjQuery.merge(scripts, getAll(node, \"script\"));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tcallback.call(collection[i], node, i);\n\t\t\t\t}\n\n\t\t\t\tif (hasScripts) {\n\t\t\t\t\tdoc = scripts[scripts.length - 1].ownerDocument;\n\n\t\t\t\t\t// Reenable scripts\n\t\t\t\t\tjQuery.map(scripts, restoreScript);\n\n\t\t\t\t\t// Evaluate executable scripts on first document insertion\n\t\t\t\t\tfor (i = 0; i < hasScripts; i++) {\n\t\t\t\t\t\tnode = scripts[i];\n\t\t\t\t\t\tif (rscriptType.test(node.type || \"\") &&\n\t\t\t\t\t\t\t!dataPriv.access(node, \"globalEval\") &&\n\t\t\t\t\t\t\tjQuery.contains(doc, node)) {\n\n\t\t\t\t\t\t\tif (node.src && (node.type || \"\").toLowerCase() !== \"module\") {\n\n\t\t\t\t\t\t\t\t// Optional AJAX dependency, but won't run scripts if not present\n\t\t\t\t\t\t\t\tif (jQuery._evalUrl && !node.noModule) {\n\t\t\t\t\t\t\t\t\tjQuery._evalUrl(node.src, {\n\t\t\t\t\t\t\t\t\t\tnonce: node.nonce || node.getAttribute(\"nonce\")\n\t\t\t\t\t\t\t\t\t}, doc);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t// Unwrap a CDATA section containing script contents. This shouldn't be\n\t\t\t\t\t\t\t\t// needed as in XML documents they're already not visible when\n\t\t\t\t\t\t\t\t// inspecting element contents and in HTML documents they have no\n\t\t\t\t\t\t\t\t// meaning but we're preserving that logic for backwards compatibility.\n\t\t\t\t\t\t\t\t// This will be removed completely in 4.0. See gh-4904.\n\t\t\t\t\t\t\t\tDOMEval(node.textContent.replace(rcleanScript, \"\"), node, doc);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn collection;\n\t}\n\n\tfunction remove(elem, selector, keepData) {\n\t\tvar node,\n\t\t\tnodes = selector ? jQuery.filter(selector, elem) : elem,\n\t\t\ti = 0;\n\n\t\tfor (; (node = nodes[i]) != null; i++) {\n\t\t\tif (!keepData && node.nodeType === 1) {\n\t\t\t\tjQuery.cleanData(getAll(node));\n\t\t\t}\n\n\t\t\tif (node.parentNode) {\n\t\t\t\tif (keepData && isAttached(node)) {\n\t\t\t\t\tsetGlobalEval(getAll(node, \"script\"));\n\t\t\t\t}\n\t\t\t\tnode.parentNode.removeChild(node);\n\t\t\t}\n\t\t}\n\n\t\treturn elem;\n\t}\n\n\tjQuery.extend({\n\t\thtmlPrefilter: function (html) {\n\t\t\treturn html;\n\t\t},\n\n\t\tclone: function (elem, dataAndEvents, deepDataAndEvents) {\n\t\t\tvar i, l, srcElements, destElements,\n\t\t\t\tclone = elem.cloneNode(true),\n\t\t\t\tinPage = isAttached(elem);\n\n\t\t\t// Fix IE cloning issues\n\t\t\tif (!support.noCloneChecked && (elem.nodeType === 1 || elem.nodeType === 11) &&\n\t\t\t\t!jQuery.isXMLDoc(elem)) {\n\n\t\t\t\t// We eschew jQuery#find here for performance reasons:\n\t\t\t\t// https://jsperf.com/getall-vs-sizzle/2\n\t\t\t\tdestElements = getAll(clone);\n\t\t\t\tsrcElements = getAll(elem);\n\n\t\t\t\tfor (i = 0, l = srcElements.length; i < l; i++) {\n\t\t\t\t\tfixInput(srcElements[i], destElements[i]);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Copy the events from the original to the clone\n\t\t\tif (dataAndEvents) {\n\t\t\t\tif (deepDataAndEvents) {\n\t\t\t\t\tsrcElements = srcElements || getAll(elem);\n\t\t\t\t\tdestElements = destElements || getAll(clone);\n\n\t\t\t\t\tfor (i = 0, l = srcElements.length; i < l; i++) {\n\t\t\t\t\t\tcloneCopyEvent(srcElements[i], destElements[i]);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tcloneCopyEvent(elem, clone);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Preserve script evaluation history\n\t\t\tdestElements = getAll(clone, \"script\");\n\t\t\tif (destElements.length > 0) {\n\t\t\t\tsetGlobalEval(destElements, !inPage && getAll(elem, \"script\"));\n\t\t\t}\n\n\t\t\t// Return the cloned set\n\t\t\treturn clone;\n\t\t},\n\n\t\tcleanData: function (elems) {\n\t\t\tvar data, elem, type,\n\t\t\t\tspecial = jQuery.event.special,\n\t\t\t\ti = 0;\n\n\t\t\tfor (; (elem = elems[i]) !== undefined; i++) {\n\t\t\t\tif (acceptData(elem)) {\n\t\t\t\t\tif ((data = elem[dataPriv.expando])) {\n\t\t\t\t\t\tif (data.events) {\n\t\t\t\t\t\t\tfor (type in data.events) {\n\t\t\t\t\t\t\t\tif (special[type]) {\n\t\t\t\t\t\t\t\t\tjQuery.event.remove(elem, type);\n\n\t\t\t\t\t\t\t\t\t// This is a shortcut to avoid jQuery.event.remove's overhead\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tjQuery.removeEvent(elem, type, data.handle);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\t\telem[dataPriv.expando] = undefined;\n\t\t\t\t\t}\n\t\t\t\t\tif (elem[dataUser.expando]) {\n\n\t\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\t\telem[dataUser.expando] = undefined;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\n\tjQuery.fn.extend({\n\t\tdetach: function (selector) {\n\t\t\treturn remove(this, selector, true);\n\t\t},\n\n\t\tremove: function (selector) {\n\t\t\treturn remove(this, selector);\n\t\t},\n\n\t\ttext: function (value) {\n\t\t\treturn access(this, function (value) {\n\t\t\t\treturn value === undefined ?\n\t\t\t\t\tjQuery.text(this) :\n\t\t\t\t\tthis.empty().each(function () {\n\t\t\t\t\t\tif (this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9) {\n\t\t\t\t\t\t\tthis.textContent = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t}, null, value, arguments.length);\n\t\t},\n\n\t\tappend: function () {\n\t\t\treturn domManip(this, arguments, function (elem) {\n\t\t\t\tif (this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9) {\n\t\t\t\t\tvar target = manipulationTarget(this, elem);\n\t\t\t\t\ttarget.appendChild(elem);\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\tprepend: function () {\n\t\t\treturn domManip(this, arguments, function (elem) {\n\t\t\t\tif (this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9) {\n\t\t\t\t\tvar target = manipulationTarget(this, elem);\n\t\t\t\t\ttarget.insertBefore(elem, target.firstChild);\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\tbefore: function () {\n\t\t\treturn domManip(this, arguments, function (elem) {\n\t\t\t\tif (this.parentNode) {\n\t\t\t\t\tthis.parentNode.insertBefore(elem, this);\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\tafter: function () {\n\t\t\treturn domManip(this, arguments, function (elem) {\n\t\t\t\tif (this.parentNode) {\n\t\t\t\t\tthis.parentNode.insertBefore(elem, this.nextSibling);\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\tempty: function () {\n\t\t\tvar elem,\n\t\t\t\ti = 0;\n\n\t\t\tfor (; (elem = this[i]) != null; i++) {\n\t\t\t\tif (elem.nodeType === 1) {\n\n\t\t\t\t\t// Prevent memory leaks\n\t\t\t\t\tjQuery.cleanData(getAll(elem, false));\n\n\t\t\t\t\t// Remove any remaining nodes\n\t\t\t\t\telem.textContent = \"\";\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn this;\n\t\t},\n\n\t\tclone: function (dataAndEvents, deepDataAndEvents) {\n\t\t\tdataAndEvents = dataAndEvents == null ? false : dataAndEvents;\n\t\t\tdeepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;\n\n\t\t\treturn this.map(function () {\n\t\t\t\treturn jQuery.clone(this, dataAndEvents, deepDataAndEvents);\n\t\t\t});\n\t\t},\n\n\t\thtml: function (value) {\n\t\t\treturn access(this, function (value) {\n\t\t\t\tvar elem = this[0] || {},\n\t\t\t\t\ti = 0,\n\t\t\t\t\tl = this.length;\n\n\t\t\t\tif (value === undefined && elem.nodeType === 1) {\n\t\t\t\t\treturn elem.innerHTML;\n\t\t\t\t}\n\n\t\t\t\t// See if we can take a shortcut and just use innerHTML\n\t\t\t\tif (typeof value === \"string\" && !rnoInnerhtml.test(value) &&\n\t\t\t\t\t!wrapMap[(rtagName.exec(value) || [\"\", \"\"])[1].toLowerCase()]) {\n\n\t\t\t\t\tvalue = jQuery.htmlPrefilter(value);\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tfor (; i < l; i++) {\n\t\t\t\t\t\t\telem = this[i] || {};\n\n\t\t\t\t\t\t\t// Remove element nodes and prevent memory leaks\n\t\t\t\t\t\t\tif (elem.nodeType === 1) {\n\t\t\t\t\t\t\t\tjQuery.cleanData(getAll(elem, false));\n\t\t\t\t\t\t\t\telem.innerHTML = value;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\telem = 0;\n\n\t\t\t\t\t\t// If using innerHTML throws an exception, use the fallback method\n\t\t\t\t\t} catch (e) { }\n\t\t\t\t}\n\n\t\t\t\tif (elem) {\n\t\t\t\t\tthis.empty().append(value);\n\t\t\t\t}\n\t\t\t}, null, value, arguments.length);\n\t\t},\n\n\t\treplaceWith: function () {\n\t\t\tvar ignored = [];\n\n\t\t\t// Make the changes, replacing each non-ignored context element with the new content\n\t\t\treturn domManip(this, arguments, function (elem) {\n\t\t\t\tvar parent = this.parentNode;\n\n\t\t\t\tif (jQuery.inArray(this, ignored) < 0) {\n\t\t\t\t\tjQuery.cleanData(getAll(this));\n\t\t\t\t\tif (parent) {\n\t\t\t\t\t\tparent.replaceChild(elem, this);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Force callback invocation\n\t\t\t}, ignored);\n\t\t}\n\t});\n\n\tjQuery.each({\n\t\tappendTo: \"append\",\n\t\tprependTo: \"prepend\",\n\t\tinsertBefore: \"before\",\n\t\tinsertAfter: \"after\",\n\t\treplaceAll: \"replaceWith\"\n\t}, function (name, original) {\n\t\tjQuery.fn[name] = function (selector) {\n\t\t\tvar elems,\n\t\t\t\tret = [],\n\t\t\t\tinsert = jQuery(selector),\n\t\t\t\tlast = insert.length - 1,\n\t\t\t\ti = 0;\n\n\t\t\tfor (; i <= last; i++) {\n\t\t\t\telems = i === last ? this : this.clone(true);\n\t\t\t\tjQuery(insert[i])[original](elems);\n\n\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t// .get() because push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\tpush.apply(ret, elems.get());\n\t\t\t}\n\n\t\t\treturn this.pushStack(ret);\n\t\t};\n\t});\n\tvar rnumnonpx = new RegExp(\"^(\" + pnum + \")(?!px)[a-z%]+$\", \"i\");\n\n\tvar rcustomProp = /^--/;\n\n\n\tvar getStyles = function (elem) {\n\n\t\t// Support: IE <=11 only, Firefox <=30 (trac-15098, trac-14150)\n\t\t// IE throws on elements created in popups\n\t\t// FF meanwhile throws on frame elements through \"defaultView.getComputedStyle\"\n\t\tvar view = elem.ownerDocument.defaultView;\n\n\t\tif (!view || !view.opener) {\n\t\t\tview = window;\n\t\t}\n\n\t\treturn view.getComputedStyle(elem);\n\t};\n\n\tvar swap = function (elem, options, callback) {\n\t\tvar ret, name,\n\t\t\told = {};\n\n\t\t// Remember the old values, and insert the new ones\n\t\tfor (name in options) {\n\t\t\told[name] = elem.style[name];\n\t\t\telem.style[name] = options[name];\n\t\t}\n\n\t\tret = callback.call(elem);\n\n\t\t// Revert the old values\n\t\tfor (name in options) {\n\t\t\telem.style[name] = old[name];\n\t\t}\n\n\t\treturn ret;\n\t};\n\n\n\tvar rboxStyle = new RegExp(cssExpand.join(\"|\"), \"i\");\n\n\n\n\t(function () {\n\n\t\t// Executing both pixelPosition & boxSizingReliable tests require only one layout\n\t\t// so they're executed at the same time to save the second computation.\n\t\tfunction computeStyleTests() {\n\n\t\t\t// This is a singleton, we need to execute it only once\n\t\t\tif (!div) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tcontainer.style.cssText = \"position:absolute;left:-11111px;width:60px;\" +\n\t\t\t\t\"margin-top:1px;padding:0;border:0\";\n\t\t\tdiv.style.cssText =\n\t\t\t\t\"position:relative;display:block;box-sizing:border-box;overflow:scroll;\" +\n\t\t\t\t\"margin:auto;border:1px;padding:1px;\" +\n\t\t\t\t\"width:60%;top:1%\";\n\t\t\tdocumentElement.appendChild(container).appendChild(div);\n\n\t\t\tvar divStyle = window.getComputedStyle(div);\n\t\t\tpixelPositionVal = divStyle.top !== \"1%\";\n\n\t\t\t// Support: Android 4.0 - 4.3 only, Firefox <=3 - 44\n\t\t\treliableMarginLeftVal = roundPixelMeasures(divStyle.marginLeft) === 12;\n\n\t\t\t// Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3\n\t\t\t// Some styles come back with percentage values, even though they shouldn't\n\t\t\tdiv.style.right = \"60%\";\n\t\t\tpixelBoxStylesVal = roundPixelMeasures(divStyle.right) === 36;\n\n\t\t\t// Support: IE 9 - 11 only\n\t\t\t// Detect misreporting of content dimensions for box-sizing:border-box elements\n\t\t\tboxSizingReliableVal = roundPixelMeasures(divStyle.width) === 36;\n\n\t\t\t// Support: IE 9 only\n\t\t\t// Detect overflow:scroll screwiness (gh-3699)\n\t\t\t// Support: Chrome <=64\n\t\t\t// Don't get tricked when zoom affects offsetWidth (gh-4029)\n\t\t\tdiv.style.position = \"absolute\";\n\t\t\tscrollboxSizeVal = roundPixelMeasures(div.offsetWidth / 3) === 12;\n\n\t\t\tdocumentElement.removeChild(container);\n\n\t\t\t// Nullify the div so it wouldn't be stored in the memory and\n\t\t\t// it will also be a sign that checks already performed\n\t\t\tdiv = null;\n\t\t}\n\n\t\tfunction roundPixelMeasures(measure) {\n\t\t\treturn Math.round(parseFloat(measure));\n\t\t}\n\n\t\tvar pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal,\n\t\t\treliableTrDimensionsVal, reliableMarginLeftVal,\n\t\t\tcontainer = document.createElement(\"div\"),\n\t\t\tdiv = document.createElement(\"div\");\n\n\t\t// Finish early in limited (non-browser) environments\n\t\tif (!div.style) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Support: IE <=9 - 11 only\n\t\t// Style of cloned element affects source element cloned (trac-8908)\n\t\tdiv.style.backgroundClip = \"content-box\";\n\t\tdiv.cloneNode(true).style.backgroundClip = \"\";\n\t\tsupport.clearCloneStyle = div.style.backgroundClip === \"content-box\";\n\n\t\tjQuery.extend(support, {\n\t\t\tboxSizingReliable: function () {\n\t\t\t\tcomputeStyleTests();\n\t\t\t\treturn boxSizingReliableVal;\n\t\t\t},\n\t\t\tpixelBoxStyles: function () {\n\t\t\t\tcomputeStyleTests();\n\t\t\t\treturn pixelBoxStylesVal;\n\t\t\t},\n\t\t\tpixelPosition: function () {\n\t\t\t\tcomputeStyleTests();\n\t\t\t\treturn pixelPositionVal;\n\t\t\t},\n\t\t\treliableMarginLeft: function () {\n\t\t\t\tcomputeStyleTests();\n\t\t\t\treturn reliableMarginLeftVal;\n\t\t\t},\n\t\t\tscrollboxSize: function () {\n\t\t\t\tcomputeStyleTests();\n\t\t\t\treturn scrollboxSizeVal;\n\t\t\t},\n\n\t\t\t// Support: IE 9 - 11+, Edge 15 - 18+\n\t\t\t// IE/Edge misreport `getComputedStyle` of table rows with width/height\n\t\t\t// set in CSS while `offset*` properties report correct values.\n\t\t\t// Behavior in IE 9 is more subtle than in newer versions & it passes\n\t\t\t// some versions of this test; make sure not to make it pass there!\n\t\t\t//\n\t\t\t// Support: Firefox 70+\n\t\t\t// Only Firefox includes border widths\n\t\t\t// in computed dimensions. (gh-4529)\n\t\t\treliableTrDimensions: function () {\n\t\t\t\tvar table, tr, trChild, trStyle;\n\t\t\t\tif (reliableTrDimensionsVal == null) {\n\t\t\t\t\ttable = document.createElement(\"table\");\n\t\t\t\t\ttr = document.createElement(\"tr\");\n\t\t\t\t\ttrChild = document.createElement(\"div\");\n\n\t\t\t\t\ttable.style.cssText = \"position:absolute;left:-11111px;border-collapse:separate\";\n\t\t\t\t\ttr.style.cssText = \"border:1px solid\";\n\n\t\t\t\t\t// Support: Chrome 86+\n\t\t\t\t\t// Height set through cssText does not get applied.\n\t\t\t\t\t// Computed height then comes back as 0.\n\t\t\t\t\ttr.style.height = \"1px\";\n\t\t\t\t\ttrChild.style.height = \"9px\";\n\n\t\t\t\t\t// Support: Android 8 Chrome 86+\n\t\t\t\t\t// In our bodyBackground.html iframe,\n\t\t\t\t\t// display for all div elements is set to \"inline\",\n\t\t\t\t\t// which causes a problem only in Android 8 Chrome 86.\n\t\t\t\t\t// Ensuring the div is display: block\n\t\t\t\t\t// gets around this issue.\n\t\t\t\t\ttrChild.style.display = \"block\";\n\n\t\t\t\t\tdocumentElement\n\t\t\t\t\t\t.appendChild(table)\n\t\t\t\t\t\t.appendChild(tr)\n\t\t\t\t\t\t.appendChild(trChild);\n\n\t\t\t\t\ttrStyle = window.getComputedStyle(tr);\n\t\t\t\t\treliableTrDimensionsVal = (parseInt(trStyle.height, 10) +\n\t\t\t\t\t\tparseInt(trStyle.borderTopWidth, 10) +\n\t\t\t\t\t\tparseInt(trStyle.borderBottomWidth, 10)) === tr.offsetHeight;\n\n\t\t\t\t\tdocumentElement.removeChild(table);\n\t\t\t\t}\n\t\t\t\treturn reliableTrDimensionsVal;\n\t\t\t}\n\t\t});\n\t})();\n\n\n\tfunction curCSS(elem, name, computed) {\n\t\tvar width, minWidth, maxWidth, ret,\n\t\t\tisCustomProp = rcustomProp.test(name),\n\n\t\t\t// Support: Firefox 51+\n\t\t\t// Retrieving style before computed somehow\n\t\t\t// fixes an issue with getting wrong values\n\t\t\t// on detached elements\n\t\t\tstyle = elem.style;\n\n\t\tcomputed = computed || getStyles(elem);\n\n\t\t// getPropertyValue is needed for:\n\t\t//   .css('filter') (IE 9 only, trac-12537)\n\t\t//   .css('--customProperty) (gh-3144)\n\t\tif (computed) {\n\n\t\t\t// Support: IE <=9 - 11+\n\t\t\t// IE only supports `\"float\"` in `getPropertyValue`; in computed styles\n\t\t\t// it's only available as `\"cssFloat\"`. We no longer modify properties\n\t\t\t// sent to `.css()` apart from camelCasing, so we need to check both.\n\t\t\t// Normally, this would create difference in behavior: if\n\t\t\t// `getPropertyValue` returns an empty string, the value returned\n\t\t\t// by `.css()` would be `undefined`. This is usually the case for\n\t\t\t// disconnected elements. However, in IE even disconnected elements\n\t\t\t// with no styles return `\"none\"` for `getPropertyValue( \"float\" )`\n\t\t\tret = computed.getPropertyValue(name) || computed[name];\n\n\t\t\tif (isCustomProp && ret) {\n\n\t\t\t\t// Support: Firefox 105+, Chrome <=105+\n\t\t\t\t// Spec requires trimming whitespace for custom properties (gh-4926).\n\t\t\t\t// Firefox only trims leading whitespace. Chrome just collapses\n\t\t\t\t// both leading & trailing whitespace to a single space.\n\t\t\t\t//\n\t\t\t\t// Fall back to `undefined` if empty string returned.\n\t\t\t\t// This collapses a missing definition with property defined\n\t\t\t\t// and set to an empty string but there's no standard API\n\t\t\t\t// allowing us to differentiate them without a performance penalty\n\t\t\t\t// and returning `undefined` aligns with older jQuery.\n\t\t\t\t//\n\t\t\t\t// rtrimCSS treats U+000D CARRIAGE RETURN and U+000C FORM FEED\n\t\t\t\t// as whitespace while CSS does not, but this is not a problem\n\t\t\t\t// because CSS preprocessing replaces them with U+000A LINE FEED\n\t\t\t\t// (which *is* CSS whitespace)\n\t\t\t\t// https://www.w3.org/TR/css-syntax-3/#input-preprocessing\n\t\t\t\tret = ret.replace(rtrimCSS, \"$1\") || undefined;\n\t\t\t}\n\n\t\t\tif (ret === \"\" && !isAttached(elem)) {\n\t\t\t\tret = jQuery.style(elem, name);\n\t\t\t}\n\n\t\t\t// A tribute to the \"awesome hack by Dean Edwards\"\n\t\t\t// Android Browser returns percentage for some values,\n\t\t\t// but width seems to be reliably pixels.\n\t\t\t// This is against the CSSOM draft spec:\n\t\t\t// https://drafts.csswg.org/cssom/#resolved-values\n\t\t\tif (!support.pixelBoxStyles() && rnumnonpx.test(ret) && rboxStyle.test(name)) {\n\n\t\t\t\t// Remember the original values\n\t\t\t\twidth = style.width;\n\t\t\t\tminWidth = style.minWidth;\n\t\t\t\tmaxWidth = style.maxWidth;\n\n\t\t\t\t// Put in the new values to get a computed value out\n\t\t\t\tstyle.minWidth = style.maxWidth = style.width = ret;\n\t\t\t\tret = computed.width;\n\n\t\t\t\t// Revert the changed values\n\t\t\t\tstyle.width = width;\n\t\t\t\tstyle.minWidth = minWidth;\n\t\t\t\tstyle.maxWidth = maxWidth;\n\t\t\t}\n\t\t}\n\n\t\treturn ret !== undefined ?\n\n\t\t\t// Support: IE <=9 - 11 only\n\t\t\t// IE returns zIndex value as an integer.\n\t\t\tret + \"\" :\n\t\t\tret;\n\t}\n\n\n\tfunction addGetHookIf(conditionFn, hookFn) {\n\n\t\t// Define the hook, we'll check on the first run if it's really needed.\n\t\treturn {\n\t\t\tget: function () {\n\t\t\t\tif (conditionFn()) {\n\n\t\t\t\t\t// Hook not needed (or it's not possible to use it due\n\t\t\t\t\t// to missing dependency), remove it.\n\t\t\t\t\tdelete this.get;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Hook needed; redefine it so that the support test is not executed again.\n\t\t\t\treturn (this.get = hookFn).apply(this, arguments);\n\t\t\t}\n\t\t};\n\t}\n\n\n\tvar cssPrefixes = [\"Webkit\", \"Moz\", \"ms\"],\n\t\temptyStyle = document.createElement(\"div\").style,\n\t\tvendorProps = {};\n\n\t// Return a vendor-prefixed property or undefined\n\tfunction vendorPropName(name) {\n\n\t\t// Check for vendor prefixed names\n\t\tvar capName = name[0].toUpperCase() + name.slice(1),\n\t\t\ti = cssPrefixes.length;\n\n\t\twhile (i--) {\n\t\t\tname = cssPrefixes[i] + capName;\n\t\t\tif (name in emptyStyle) {\n\t\t\t\treturn name;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return a potentially-mapped jQuery.cssProps or vendor prefixed property\n\tfunction finalPropName(name) {\n\t\tvar final = jQuery.cssProps[name] || vendorProps[name];\n\n\t\tif (final) {\n\t\t\treturn final;\n\t\t}\n\t\tif (name in emptyStyle) {\n\t\t\treturn name;\n\t\t}\n\t\treturn vendorProps[name] = vendorPropName(name) || name;\n\t}\n\n\n\tvar\n\n\t\t// Swappable if display is none or starts with table\n\t\t// except \"table\", \"table-cell\", or \"table-caption\"\n\t\t// See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display\n\t\trdisplayswap = /^(none|table(?!-c[ea]).+)/,\n\t\tcssShow = { position: \"absolute\", visibility: \"hidden\", display: \"block\" },\n\t\tcssNormalTransform = {\n\t\t\tletterSpacing: \"0\",\n\t\t\tfontWeight: \"400\"\n\t\t};\n\n\tfunction setPositiveNumber(_elem, value, subtract) {\n\n\t\t// Any relative (+/-) values have already been\n\t\t// normalized at this point\n\t\tvar matches = rcssNum.exec(value);\n\t\treturn matches ?\n\n\t\t\t// Guard against undefined \"subtract\", e.g., when used as in cssHooks\n\t\t\tMath.max(0, matches[2] - (subtract || 0)) + (matches[3] || \"px\") :\n\t\t\tvalue;\n\t}\n\n\tfunction boxModelAdjustment(elem, dimension, box, isBorderBox, styles, computedVal) {\n\t\tvar i = dimension === \"width\" ? 1 : 0,\n\t\t\textra = 0,\n\t\t\tdelta = 0,\n\t\t\tmarginDelta = 0;\n\n\t\t// Adjustment may not be necessary\n\t\tif (box === (isBorderBox ? \"border\" : \"content\")) {\n\t\t\treturn 0;\n\t\t}\n\n\t\tfor (; i < 4; i += 2) {\n\n\t\t\t// Both box models exclude margin\n\t\t\t// Count margin delta separately to only add it after scroll gutter adjustment.\n\t\t\t// This is needed to make negative margins work with `outerHeight( true )` (gh-3982).\n\t\t\tif (box === \"margin\") {\n\t\t\t\tmarginDelta += jQuery.css(elem, box + cssExpand[i], true, styles);\n\t\t\t}\n\n\t\t\t// If we get here with a content-box, we're seeking \"padding\" or \"border\" or \"margin\"\n\t\t\tif (!isBorderBox) {\n\n\t\t\t\t// Add padding\n\t\t\t\tdelta += jQuery.css(elem, \"padding\" + cssExpand[i], true, styles);\n\n\t\t\t\t// For \"border\" or \"margin\", add border\n\t\t\t\tif (box !== \"padding\") {\n\t\t\t\t\tdelta += jQuery.css(elem, \"border\" + cssExpand[i] + \"Width\", true, styles);\n\n\t\t\t\t\t// But still keep track of it otherwise\n\t\t\t\t} else {\n\t\t\t\t\textra += jQuery.css(elem, \"border\" + cssExpand[i] + \"Width\", true, styles);\n\t\t\t\t}\n\n\t\t\t\t// If we get here with a border-box (content + padding + border), we're seeking \"content\" or\n\t\t\t\t// \"padding\" or \"margin\"\n\t\t\t} else {\n\n\t\t\t\t// For \"content\", subtract padding\n\t\t\t\tif (box === \"content\") {\n\t\t\t\t\tdelta -= jQuery.css(elem, \"padding\" + cssExpand[i], true, styles);\n\t\t\t\t}\n\n\t\t\t\t// For \"content\" or \"padding\", subtract border\n\t\t\t\tif (box !== \"margin\") {\n\t\t\t\t\tdelta -= jQuery.css(elem, \"border\" + cssExpand[i] + \"Width\", true, styles);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Account for positive content-box scroll gutter when requested by providing computedVal\n\t\tif (!isBorderBox && computedVal >= 0) {\n\n\t\t\t// offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border\n\t\t\t// Assuming integer scroll gutter, subtract the rest and round down\n\t\t\tdelta += Math.max(0, Math.ceil(\n\t\t\t\telem[\"offset\" + dimension[0].toUpperCase() + dimension.slice(1)] -\n\t\t\t\tcomputedVal -\n\t\t\t\tdelta -\n\t\t\t\textra -\n\t\t\t\t0.5\n\n\t\t\t\t// If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter\n\t\t\t\t// Use an explicit zero to avoid NaN (gh-3964)\n\t\t\t)) || 0;\n\t\t}\n\n\t\treturn delta + marginDelta;\n\t}\n\n\tfunction getWidthOrHeight(elem, dimension, extra) {\n\n\t\t// Start with computed style\n\t\tvar styles = getStyles(elem),\n\n\t\t\t// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322).\n\t\t\t// Fake content-box until we know it's needed to know the true value.\n\t\t\tboxSizingNeeded = !support.boxSizingReliable() || extra,\n\t\t\tisBorderBox = boxSizingNeeded &&\n\t\t\t\tjQuery.css(elem, \"boxSizing\", false, styles) === \"border-box\",\n\t\t\tvalueIsBorderBox = isBorderBox,\n\n\t\t\tval = curCSS(elem, dimension, styles),\n\t\t\toffsetProp = \"offset\" + dimension[0].toUpperCase() + dimension.slice(1);\n\n\t\t// Support: Firefox <=54\n\t\t// Return a confounding non-pixel value or feign ignorance, as appropriate.\n\t\tif (rnumnonpx.test(val)) {\n\t\t\tif (!extra) {\n\t\t\t\treturn val;\n\t\t\t}\n\t\t\tval = \"auto\";\n\t\t}\n\n\n\t\t// Support: IE 9 - 11 only\n\t\t// Use offsetWidth/offsetHeight for when box sizing is unreliable.\n\t\t// In those cases, the computed value can be trusted to be border-box.\n\t\tif ((!support.boxSizingReliable() && isBorderBox ||\n\n\t\t\t// Support: IE 10 - 11+, Edge 15 - 18+\n\t\t\t// IE/Edge misreport `getComputedStyle` of table rows with width/height\n\t\t\t// set in CSS while `offset*` properties report correct values.\n\t\t\t// Interestingly, in some cases IE 9 doesn't suffer from this issue.\n\t\t\t!support.reliableTrDimensions() && nodeName(elem, \"tr\") ||\n\n\t\t\t// Fall back to offsetWidth/offsetHeight when value is \"auto\"\n\t\t\t// This happens for inline elements with no explicit setting (gh-3571)\n\t\t\tval === \"auto\" ||\n\n\t\t\t// Support: Android <=4.1 - 4.3 only\n\t\t\t// Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602)\n\t\t\t!parseFloat(val) && jQuery.css(elem, \"display\", false, styles) === \"inline\") &&\n\n\t\t\t// Make sure the element is visible & connected\n\t\t\telem.getClientRects().length) {\n\n\t\t\tisBorderBox = jQuery.css(elem, \"boxSizing\", false, styles) === \"border-box\";\n\n\t\t\t// Where available, offsetWidth/offsetHeight approximate border box dimensions.\n\t\t\t// Where not available (e.g., SVG), assume unreliable box-sizing and interpret the\n\t\t\t// retrieved value as a content box dimension.\n\t\t\tvalueIsBorderBox = offsetProp in elem;\n\t\t\tif (valueIsBorderBox) {\n\t\t\t\tval = elem[offsetProp];\n\t\t\t}\n\t\t}\n\n\t\t// Normalize \"\" and auto\n\t\tval = parseFloat(val) || 0;\n\n\t\t// Adjust for the element's box model\n\t\treturn (val +\n\t\t\tboxModelAdjustment(\n\t\t\t\telem,\n\t\t\t\tdimension,\n\t\t\t\textra || (isBorderBox ? \"border\" : \"content\"),\n\t\t\t\tvalueIsBorderBox,\n\t\t\t\tstyles,\n\n\t\t\t\t// Provide the current computed size to request scroll gutter calculation (gh-3589)\n\t\t\t\tval\n\t\t\t)\n\t\t) + \"px\";\n\t}\n\n\tjQuery.extend({\n\n\t\t// Add in style property hooks for overriding the default\n\t\t// behavior of getting and setting a style property\n\t\tcssHooks: {\n\t\t\topacity: {\n\t\t\t\tget: function (elem, computed) {\n\t\t\t\t\tif (computed) {\n\n\t\t\t\t\t\t// We should always get a number back from opacity\n\t\t\t\t\t\tvar ret = curCSS(elem, \"opacity\");\n\t\t\t\t\t\treturn ret === \"\" ? \"1\" : ret;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t// Don't automatically add \"px\" to these possibly-unitless properties\n\t\tcssNumber: {\n\t\t\tanimationIterationCount: true,\n\t\t\taspectRatio: true,\n\t\t\tborderImageSlice: true,\n\t\t\tcolumnCount: true,\n\t\t\tflexGrow: true,\n\t\t\tflexShrink: true,\n\t\t\tfontWeight: true,\n\t\t\tgridArea: true,\n\t\t\tgridColumn: true,\n\t\t\tgridColumnEnd: true,\n\t\t\tgridColumnStart: true,\n\t\t\tgridRow: true,\n\t\t\tgridRowEnd: true,\n\t\t\tgridRowStart: true,\n\t\t\tlineHeight: true,\n\t\t\topacity: true,\n\t\t\torder: true,\n\t\t\torphans: true,\n\t\t\tscale: true,\n\t\t\twidows: true,\n\t\t\tzIndex: true,\n\t\t\tzoom: true,\n\n\t\t\t// SVG-related\n\t\t\tfillOpacity: true,\n\t\t\tfloodOpacity: true,\n\t\t\tstopOpacity: true,\n\t\t\tstrokeMiterlimit: true,\n\t\t\tstrokeOpacity: true\n\t\t},\n\n\t\t// Add in properties whose names you wish to fix before\n\t\t// setting or getting the value\n\t\tcssProps: {},\n\n\t\t// Get and set the style property on a DOM Node\n\t\tstyle: function (elem, name, value, extra) {\n\n\t\t\t// Don't set styles on text and comment nodes\n\t\t\tif (!elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Make sure that we're working with the right name\n\t\t\tvar ret, type, hooks,\n\t\t\t\torigName = camelCase(name),\n\t\t\t\tisCustomProp = rcustomProp.test(name),\n\t\t\t\tstyle = elem.style;\n\n\t\t\t// Make sure that we're working with the right name. We don't\n\t\t\t// want to query the value if it is a CSS custom property\n\t\t\t// since they are user-defined.\n\t\t\tif (!isCustomProp) {\n\t\t\t\tname = finalPropName(origName);\n\t\t\t}\n\n\t\t\t// Gets hook for the prefixed version, then unprefixed version\n\t\t\thooks = jQuery.cssHooks[name] || jQuery.cssHooks[origName];\n\n\t\t\t// Check if we're setting a value\n\t\t\tif (value !== undefined) {\n\t\t\t\ttype = typeof value;\n\n\t\t\t\t// Convert \"+=\" or \"-=\" to relative numbers (trac-7345)\n\t\t\t\tif (type === \"string\" && (ret = rcssNum.exec(value)) && ret[1]) {\n\t\t\t\t\tvalue = adjustCSS(elem, name, ret);\n\n\t\t\t\t\t// Fixes bug trac-9237\n\t\t\t\t\ttype = \"number\";\n\t\t\t\t}\n\n\t\t\t\t// Make sure that null and NaN values aren't set (trac-7116)\n\t\t\t\tif (value == null || value !== value) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// If a number was passed in, add the unit (except for certain CSS properties)\n\t\t\t\t// The isCustomProp check can be removed in jQuery 4.0 when we only auto-append\n\t\t\t\t// \"px\" to a few hardcoded values.\n\t\t\t\tif (type === \"number\" && !isCustomProp) {\n\t\t\t\t\tvalue += ret && ret[3] || (jQuery.cssNumber[origName] ? \"\" : \"px\");\n\t\t\t\t}\n\n\t\t\t\t// background-* props affect original clone's values\n\t\t\t\tif (!support.clearCloneStyle && value === \"\" && name.indexOf(\"background\") === 0) {\n\t\t\t\t\tstyle[name] = \"inherit\";\n\t\t\t\t}\n\n\t\t\t\t// If a hook was provided, use that value, otherwise just set the specified value\n\t\t\t\tif (!hooks || !(\"set\" in hooks) ||\n\t\t\t\t\t(value = hooks.set(elem, value, extra)) !== undefined) {\n\n\t\t\t\t\tif (isCustomProp) {\n\t\t\t\t\t\tstyle.setProperty(name, value);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tstyle[name] = value;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\t// If a hook was provided get the non-computed value from there\n\t\t\t\tif (hooks && \"get\" in hooks &&\n\t\t\t\t\t(ret = hooks.get(elem, false, extra)) !== undefined) {\n\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\n\t\t\t\t// Otherwise just get the value from the style object\n\t\t\t\treturn style[name];\n\t\t\t}\n\t\t},\n\n\t\tcss: function (elem, name, extra, styles) {\n\t\t\tvar val, num, hooks,\n\t\t\t\torigName = camelCase(name),\n\t\t\t\tisCustomProp = rcustomProp.test(name);\n\n\t\t\t// Make sure that we're working with the right name. We don't\n\t\t\t// want to modify the value if it is a CSS custom property\n\t\t\t// since they are user-defined.\n\t\t\tif (!isCustomProp) {\n\t\t\t\tname = finalPropName(origName);\n\t\t\t}\n\n\t\t\t// Try prefixed name followed by the unprefixed name\n\t\t\thooks = jQuery.cssHooks[name] || jQuery.cssHooks[origName];\n\n\t\t\t// If a hook was provided get the computed value from there\n\t\t\tif (hooks && \"get\" in hooks) {\n\t\t\t\tval = hooks.get(elem, true, extra);\n\t\t\t}\n\n\t\t\t// Otherwise, if a way to get the computed value exists, use that\n\t\t\tif (val === undefined) {\n\t\t\t\tval = curCSS(elem, name, styles);\n\t\t\t}\n\n\t\t\t// Convert \"normal\" to computed value\n\t\t\tif (val === \"normal\" && name in cssNormalTransform) {\n\t\t\t\tval = cssNormalTransform[name];\n\t\t\t}\n\n\t\t\t// Make numeric if forced or a qualifier was provided and val looks numeric\n\t\t\tif (extra === \"\" || extra) {\n\t\t\t\tnum = parseFloat(val);\n\t\t\t\treturn extra === true || isFinite(num) ? num || 0 : val;\n\t\t\t}\n\n\t\t\treturn val;\n\t\t}\n\t});\n\n\tjQuery.each([\"height\", \"width\"], function (_i, dimension) {\n\t\tjQuery.cssHooks[dimension] = {\n\t\t\tget: function (elem, computed, extra) {\n\t\t\t\tif (computed) {\n\n\t\t\t\t\t// Certain elements can have dimension info if we invisibly show them\n\t\t\t\t\t// but it must have a current display style that would benefit\n\t\t\t\t\treturn rdisplayswap.test(jQuery.css(elem, \"display\")) &&\n\n\t\t\t\t\t\t// Support: Safari 8+\n\t\t\t\t\t\t// Table columns in Safari have non-zero offsetWidth & zero\n\t\t\t\t\t\t// getBoundingClientRect().width unless display is changed.\n\t\t\t\t\t\t// Support: IE <=11 only\n\t\t\t\t\t\t// Running getBoundingClientRect on a disconnected node\n\t\t\t\t\t\t// in IE throws an error.\n\t\t\t\t\t\t(!elem.getClientRects().length || !elem.getBoundingClientRect().width) ?\n\t\t\t\t\t\tswap(elem, cssShow, function () {\n\t\t\t\t\t\t\treturn getWidthOrHeight(elem, dimension, extra);\n\t\t\t\t\t\t}) :\n\t\t\t\t\t\tgetWidthOrHeight(elem, dimension, extra);\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tset: function (elem, value, extra) {\n\t\t\t\tvar matches,\n\t\t\t\t\tstyles = getStyles(elem),\n\n\t\t\t\t\t// Only read styles.position if the test has a chance to fail\n\t\t\t\t\t// to avoid forcing a reflow.\n\t\t\t\t\tscrollboxSizeBuggy = !support.scrollboxSize() &&\n\t\t\t\t\t\tstyles.position === \"absolute\",\n\n\t\t\t\t\t// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991)\n\t\t\t\t\tboxSizingNeeded = scrollboxSizeBuggy || extra,\n\t\t\t\t\tisBorderBox = boxSizingNeeded &&\n\t\t\t\t\t\tjQuery.css(elem, \"boxSizing\", false, styles) === \"border-box\",\n\t\t\t\t\tsubtract = extra ?\n\t\t\t\t\t\tboxModelAdjustment(\n\t\t\t\t\t\t\telem,\n\t\t\t\t\t\t\tdimension,\n\t\t\t\t\t\t\textra,\n\t\t\t\t\t\t\tisBorderBox,\n\t\t\t\t\t\t\tstyles\n\t\t\t\t\t\t) :\n\t\t\t\t\t\t0;\n\n\t\t\t\t// Account for unreliable border-box dimensions by comparing offset* to computed and\n\t\t\t\t// faking a content-box to get border and padding (gh-3699)\n\t\t\t\tif (isBorderBox && scrollboxSizeBuggy) {\n\t\t\t\t\tsubtract -= Math.ceil(\n\t\t\t\t\t\telem[\"offset\" + dimension[0].toUpperCase() + dimension.slice(1)] -\n\t\t\t\t\t\tparseFloat(styles[dimension]) -\n\t\t\t\t\t\tboxModelAdjustment(elem, dimension, \"border\", false, styles) -\n\t\t\t\t\t\t0.5\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\t// Convert to pixels if value adjustment is needed\n\t\t\t\tif (subtract && (matches = rcssNum.exec(value)) &&\n\t\t\t\t\t(matches[3] || \"px\") !== \"px\") {\n\n\t\t\t\t\telem.style[dimension] = value;\n\t\t\t\t\tvalue = jQuery.css(elem, dimension);\n\t\t\t\t}\n\n\t\t\t\treturn setPositiveNumber(elem, value, subtract);\n\t\t\t}\n\t\t};\n\t});\n\n\tjQuery.cssHooks.marginLeft = addGetHookIf(support.reliableMarginLeft,\n\t\tfunction (elem, computed) {\n\t\t\tif (computed) {\n\t\t\t\treturn (parseFloat(curCSS(elem, \"marginLeft\")) ||\n\t\t\t\t\telem.getBoundingClientRect().left -\n\t\t\t\t\tswap(elem, { marginLeft: 0 }, function () {\n\t\t\t\t\t\treturn elem.getBoundingClientRect().left;\n\t\t\t\t\t})\n\t\t\t\t) + \"px\";\n\t\t\t}\n\t\t}\n\t);\n\n\t// These hooks are used by animate to expand properties\n\tjQuery.each({\n\t\tmargin: \"\",\n\t\tpadding: \"\",\n\t\tborder: \"Width\"\n\t}, function (prefix, suffix) {\n\t\tjQuery.cssHooks[prefix + suffix] = {\n\t\t\texpand: function (value) {\n\t\t\t\tvar i = 0,\n\t\t\t\t\texpanded = {},\n\n\t\t\t\t\t// Assumes a single number if not a string\n\t\t\t\t\tparts = typeof value === \"string\" ? value.split(\" \") : [value];\n\n\t\t\t\tfor (; i < 4; i++) {\n\t\t\t\t\texpanded[prefix + cssExpand[i] + suffix] =\n\t\t\t\t\t\tparts[i] || parts[i - 2] || parts[0];\n\t\t\t\t}\n\n\t\t\t\treturn expanded;\n\t\t\t}\n\t\t};\n\n\t\tif (prefix !== \"margin\") {\n\t\t\tjQuery.cssHooks[prefix + suffix].set = setPositiveNumber;\n\t\t}\n\t});\n\n\tjQuery.fn.extend({\n\t\tcss: function (name, value) {\n\t\t\treturn access(this, function (elem, name, value) {\n\t\t\t\tvar styles, len,\n\t\t\t\t\tmap = {},\n\t\t\t\t\ti = 0;\n\n\t\t\t\tif (Array.isArray(name)) {\n\t\t\t\t\tstyles = getStyles(elem);\n\t\t\t\t\tlen = name.length;\n\n\t\t\t\t\tfor (; i < len; i++) {\n\t\t\t\t\t\tmap[name[i]] = jQuery.css(elem, name[i], false, styles);\n\t\t\t\t\t}\n\n\t\t\t\t\treturn map;\n\t\t\t\t}\n\n\t\t\t\treturn value !== undefined ?\n\t\t\t\t\tjQuery.style(elem, name, value) :\n\t\t\t\t\tjQuery.css(elem, name);\n\t\t\t}, name, value, arguments.length > 1);\n\t\t}\n\t});\n\n\n\tfunction Tween(elem, options, prop, end, easing) {\n\t\treturn new Tween.prototype.init(elem, options, prop, end, easing);\n\t}\n\tjQuery.Tween = Tween;\n\n\tTween.prototype = {\n\t\tconstructor: Tween,\n\t\tinit: function (elem, options, prop, end, easing, unit) {\n\t\t\tthis.elem = elem;\n\t\t\tthis.prop = prop;\n\t\t\tthis.easing = easing || jQuery.easing._default;\n\t\t\tthis.options = options;\n\t\t\tthis.start = this.now = this.cur();\n\t\t\tthis.end = end;\n\t\t\tthis.unit = unit || (jQuery.cssNumber[prop] ? \"\" : \"px\");\n\t\t},\n\t\tcur: function () {\n\t\t\tvar hooks = Tween.propHooks[this.prop];\n\n\t\t\treturn hooks && hooks.get ?\n\t\t\t\thooks.get(this) :\n\t\t\t\tTween.propHooks._default.get(this);\n\t\t},\n\t\trun: function (percent) {\n\t\t\tvar eased,\n\t\t\t\thooks = Tween.propHooks[this.prop];\n\n\t\t\tif (this.options.duration) {\n\t\t\t\tthis.pos = eased = jQuery.easing[this.easing](\n\t\t\t\t\tpercent, this.options.duration * percent, 0, 1, this.options.duration\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tthis.pos = eased = percent;\n\t\t\t}\n\t\t\tthis.now = (this.end - this.start) * eased + this.start;\n\n\t\t\tif (this.options.step) {\n\t\t\t\tthis.options.step.call(this.elem, this.now, this);\n\t\t\t}\n\n\t\t\tif (hooks && hooks.set) {\n\t\t\t\thooks.set(this);\n\t\t\t} else {\n\t\t\t\tTween.propHooks._default.set(this);\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t};\n\n\tTween.prototype.init.prototype = Tween.prototype;\n\n\tTween.propHooks = {\n\t\t_default: {\n\t\t\tget: function (tween) {\n\t\t\t\tvar result;\n\n\t\t\t\t// Use a property on the element directly when it is not a DOM element,\n\t\t\t\t// or when there is no matching style property that exists.\n\t\t\t\tif (tween.elem.nodeType !== 1 ||\n\t\t\t\t\ttween.elem[tween.prop] != null && tween.elem.style[tween.prop] == null) {\n\t\t\t\t\treturn tween.elem[tween.prop];\n\t\t\t\t}\n\n\t\t\t\t// Passing an empty string as a 3rd parameter to .css will automatically\n\t\t\t\t// attempt a parseFloat and fallback to a string if the parse fails.\n\t\t\t\t// Simple values such as \"10px\" are parsed to Float;\n\t\t\t\t// complex values such as \"rotate(1rad)\" are returned as-is.\n\t\t\t\tresult = jQuery.css(tween.elem, tween.prop, \"\");\n\n\t\t\t\t// Empty strings, null, undefined and \"auto\" are converted to 0.\n\t\t\t\treturn !result || result === \"auto\" ? 0 : result;\n\t\t\t},\n\t\t\tset: function (tween) {\n\n\t\t\t\t// Use step hook for back compat.\n\t\t\t\t// Use cssHook if its there.\n\t\t\t\t// Use .style if available and use plain properties where available.\n\t\t\t\tif (jQuery.fx.step[tween.prop]) {\n\t\t\t\t\tjQuery.fx.step[tween.prop](tween);\n\t\t\t\t} else if (tween.elem.nodeType === 1 && (\n\t\t\t\t\tjQuery.cssHooks[tween.prop] ||\n\t\t\t\t\ttween.elem.style[finalPropName(tween.prop)] != null)) {\n\t\t\t\t\tjQuery.style(tween.elem, tween.prop, tween.now + tween.unit);\n\t\t\t\t} else {\n\t\t\t\t\ttween.elem[tween.prop] = tween.now;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t// Support: IE <=9 only\n\t// Panic based approach to setting things on disconnected nodes\n\tTween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {\n\t\tset: function (tween) {\n\t\t\tif (tween.elem.nodeType && tween.elem.parentNode) {\n\t\t\t\ttween.elem[tween.prop] = tween.now;\n\t\t\t}\n\t\t}\n\t};\n\n\tjQuery.easing = {\n\t\tlinear: function (p) {\n\t\t\treturn p;\n\t\t},\n\t\tswing: function (p) {\n\t\t\treturn 0.5 - Math.cos(p * Math.PI) / 2;\n\t\t},\n\t\t_default: \"swing\"\n\t};\n\n\tjQuery.fx = Tween.prototype.init;\n\n\t// Back compat <1.8 extension point\n\tjQuery.fx.step = {};\n\n\n\n\n\tvar\n\t\tfxNow, inProgress,\n\t\trfxtypes = /^(?:toggle|show|hide)$/,\n\t\trrun = /queueHooks$/;\n\n\tfunction schedule() {\n\t\tif (inProgress) {\n\t\t\tif (document.hidden === false && window.requestAnimationFrame) {\n\t\t\t\twindow.requestAnimationFrame(schedule);\n\t\t\t} else {\n\t\t\t\twindow.setTimeout(schedule, jQuery.fx.interval);\n\t\t\t}\n\n\t\t\tjQuery.fx.tick();\n\t\t}\n\t}\n\n\t// Animations created synchronously will run synchronously\n\tfunction createFxNow() {\n\t\twindow.setTimeout(function () {\n\t\t\tfxNow = undefined;\n\t\t});\n\t\treturn (fxNow = Date.now());\n\t}\n\n\t// Generate parameters to create a standard animation\n\tfunction genFx(type, includeWidth) {\n\t\tvar which,\n\t\t\ti = 0,\n\t\t\tattrs = { height: type };\n\n\t\t// If we include width, step value is 1 to do all cssExpand values,\n\t\t// otherwise step value is 2 to skip over Left and Right\n\t\tincludeWidth = includeWidth ? 1 : 0;\n\t\tfor (; i < 4; i += 2 - includeWidth) {\n\t\t\twhich = cssExpand[i];\n\t\t\tattrs[\"margin\" + which] = attrs[\"padding\" + which] = type;\n\t\t}\n\n\t\tif (includeWidth) {\n\t\t\tattrs.opacity = attrs.width = type;\n\t\t}\n\n\t\treturn attrs;\n\t}\n\n\tfunction createTween(value, prop, animation) {\n\t\tvar tween,\n\t\t\tcollection = (Animation.tweeners[prop] || []).concat(Animation.tweeners[\"*\"]),\n\t\t\tindex = 0,\n\t\t\tlength = collection.length;\n\t\tfor (; index < length; index++) {\n\t\t\tif ((tween = collection[index].call(animation, prop, value))) {\n\n\t\t\t\t// We're done with this property\n\t\t\t\treturn tween;\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction defaultPrefilter(elem, props, opts) {\n\t\tvar prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display,\n\t\t\tisBox = \"width\" in props || \"height\" in props,\n\t\t\tanim = this,\n\t\t\torig = {},\n\t\t\tstyle = elem.style,\n\t\t\thidden = elem.nodeType && isHiddenWithinTree(elem),\n\t\t\tdataShow = dataPriv.get(elem, \"fxshow\");\n\n\t\t// Queue-skipping animations hijack the fx hooks\n\t\tif (!opts.queue) {\n\t\t\thooks = jQuery._queueHooks(elem, \"fx\");\n\t\t\tif (hooks.unqueued == null) {\n\t\t\t\thooks.unqueued = 0;\n\t\t\t\toldfire = hooks.empty.fire;\n\t\t\t\thooks.empty.fire = function () {\n\t\t\t\t\tif (!hooks.unqueued) {\n\t\t\t\t\t\toldfire();\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t\thooks.unqueued++;\n\n\t\t\tanim.always(function () {\n\n\t\t\t\t// Ensure the complete handler is called before this completes\n\t\t\t\tanim.always(function () {\n\t\t\t\t\thooks.unqueued--;\n\t\t\t\t\tif (!jQuery.queue(elem, \"fx\").length) {\n\t\t\t\t\t\thooks.empty.fire();\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\n\t\t// Detect show/hide animations\n\t\tfor (prop in props) {\n\t\t\tvalue = props[prop];\n\t\t\tif (rfxtypes.test(value)) {\n\t\t\t\tdelete props[prop];\n\t\t\t\ttoggle = toggle || value === \"toggle\";\n\t\t\t\tif (value === (hidden ? \"hide\" : \"show\")) {\n\n\t\t\t\t\t// Pretend to be hidden if this is a \"show\" and\n\t\t\t\t\t// there is still data from a stopped show/hide\n\t\t\t\t\tif (value === \"show\" && dataShow && dataShow[prop] !== undefined) {\n\t\t\t\t\t\thidden = true;\n\n\t\t\t\t\t\t// Ignore all other no-op show/hide data\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\torig[prop] = dataShow && dataShow[prop] || jQuery.style(elem, prop);\n\t\t\t}\n\t\t}\n\n\t\t// Bail out if this is a no-op like .hide().hide()\n\t\tpropTween = !jQuery.isEmptyObject(props);\n\t\tif (!propTween && jQuery.isEmptyObject(orig)) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Restrict \"overflow\" and \"display\" styles during box animations\n\t\tif (isBox && elem.nodeType === 1) {\n\n\t\t\t// Support: IE <=9 - 11, Edge 12 - 15\n\t\t\t// Record all 3 overflow attributes because IE does not infer the shorthand\n\t\t\t// from identically-valued overflowX and overflowY and Edge just mirrors\n\t\t\t// the overflowX value there.\n\t\t\topts.overflow = [style.overflow, style.overflowX, style.overflowY];\n\n\t\t\t// Identify a display type, preferring old show/hide data over the CSS cascade\n\t\t\trestoreDisplay = dataShow && dataShow.display;\n\t\t\tif (restoreDisplay == null) {\n\t\t\t\trestoreDisplay = dataPriv.get(elem, \"display\");\n\t\t\t}\n\t\t\tdisplay = jQuery.css(elem, \"display\");\n\t\t\tif (display === \"none\") {\n\t\t\t\tif (restoreDisplay) {\n\t\t\t\t\tdisplay = restoreDisplay;\n\t\t\t\t} else {\n\n\t\t\t\t\t// Get nonempty value(s) by temporarily forcing visibility\n\t\t\t\t\tshowHide([elem], true);\n\t\t\t\t\trestoreDisplay = elem.style.display || restoreDisplay;\n\t\t\t\t\tdisplay = jQuery.css(elem, \"display\");\n\t\t\t\t\tshowHide([elem]);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Animate inline elements as inline-block\n\t\t\tif (display === \"inline\" || display === \"inline-block\" && restoreDisplay != null) {\n\t\t\t\tif (jQuery.css(elem, \"float\") === \"none\") {\n\n\t\t\t\t\t// Restore the original display value at the end of pure show/hide animations\n\t\t\t\t\tif (!propTween) {\n\t\t\t\t\t\tanim.done(function () {\n\t\t\t\t\t\t\tstyle.display = restoreDisplay;\n\t\t\t\t\t\t});\n\t\t\t\t\t\tif (restoreDisplay == null) {\n\t\t\t\t\t\t\tdisplay = style.display;\n\t\t\t\t\t\t\trestoreDisplay = display === \"none\" ? \"\" : display;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tstyle.display = \"inline-block\";\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (opts.overflow) {\n\t\t\tstyle.overflow = \"hidden\";\n\t\t\tanim.always(function () {\n\t\t\t\tstyle.overflow = opts.overflow[0];\n\t\t\t\tstyle.overflowX = opts.overflow[1];\n\t\t\t\tstyle.overflowY = opts.overflow[2];\n\t\t\t});\n\t\t}\n\n\t\t// Implement show/hide animations\n\t\tpropTween = false;\n\t\tfor (prop in orig) {\n\n\t\t\t// General show/hide setup for this element animation\n\t\t\tif (!propTween) {\n\t\t\t\tif (dataShow) {\n\t\t\t\t\tif (\"hidden\" in dataShow) {\n\t\t\t\t\t\thidden = dataShow.hidden;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tdataShow = dataPriv.access(elem, \"fxshow\", { display: restoreDisplay });\n\t\t\t\t}\n\n\t\t\t\t// Store hidden/visible for toggle so `.stop().toggle()` \"reverses\"\n\t\t\t\tif (toggle) {\n\t\t\t\t\tdataShow.hidden = !hidden;\n\t\t\t\t}\n\n\t\t\t\t// Show elements before animating them\n\t\t\t\tif (hidden) {\n\t\t\t\t\tshowHide([elem], true);\n\t\t\t\t}\n\n\t\t\t\t/* eslint-disable no-loop-func */\n\n\t\t\t\tanim.done(function () {\n\n\t\t\t\t\t/* eslint-enable no-loop-func */\n\n\t\t\t\t\t// The final step of a \"hide\" animation is actually hiding the element\n\t\t\t\t\tif (!hidden) {\n\t\t\t\t\t\tshowHide([elem]);\n\t\t\t\t\t}\n\t\t\t\t\tdataPriv.remove(elem, \"fxshow\");\n\t\t\t\t\tfor (prop in orig) {\n\t\t\t\t\t\tjQuery.style(elem, prop, orig[prop]);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// Per-property setup\n\t\t\tpropTween = createTween(hidden ? dataShow[prop] : 0, prop, anim);\n\t\t\tif (!(prop in dataShow)) {\n\t\t\t\tdataShow[prop] = propTween.start;\n\t\t\t\tif (hidden) {\n\t\t\t\t\tpropTween.end = propTween.start;\n\t\t\t\t\tpropTween.start = 0;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction propFilter(props, specialEasing) {\n\t\tvar index, name, easing, value, hooks;\n\n\t\t// camelCase, specialEasing and expand cssHook pass\n\t\tfor (index in props) {\n\t\t\tname = camelCase(index);\n\t\t\teasing = specialEasing[name];\n\t\t\tvalue = props[index];\n\t\t\tif (Array.isArray(value)) {\n\t\t\t\teasing = value[1];\n\t\t\t\tvalue = props[index] = value[0];\n\t\t\t}\n\n\t\t\tif (index !== name) {\n\t\t\t\tprops[name] = value;\n\t\t\t\tdelete props[index];\n\t\t\t}\n\n\t\t\thooks = jQuery.cssHooks[name];\n\t\t\tif (hooks && \"expand\" in hooks) {\n\t\t\t\tvalue = hooks.expand(value);\n\t\t\t\tdelete props[name];\n\n\t\t\t\t// Not quite $.extend, this won't overwrite existing keys.\n\t\t\t\t// Reusing 'index' because we have the correct \"name\"\n\t\t\t\tfor (index in value) {\n\t\t\t\t\tif (!(index in props)) {\n\t\t\t\t\t\tprops[index] = value[index];\n\t\t\t\t\t\tspecialEasing[index] = easing;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tspecialEasing[name] = easing;\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction Animation(elem, properties, options) {\n\t\tvar result,\n\t\t\tstopped,\n\t\t\tindex = 0,\n\t\t\tlength = Animation.prefilters.length,\n\t\t\tdeferred = jQuery.Deferred().always(function () {\n\n\t\t\t\t// Don't match elem in the :animated selector\n\t\t\t\tdelete tick.elem;\n\t\t\t}),\n\t\t\ttick = function () {\n\t\t\t\tif (stopped) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tvar currentTime = fxNow || createFxNow(),\n\t\t\t\t\tremaining = Math.max(0, animation.startTime + animation.duration - currentTime),\n\n\t\t\t\t\t// Support: Android 2.3 only\n\t\t\t\t\t// Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (trac-12497)\n\t\t\t\t\ttemp = remaining / animation.duration || 0,\n\t\t\t\t\tpercent = 1 - temp,\n\t\t\t\t\tindex = 0,\n\t\t\t\t\tlength = animation.tweens.length;\n\n\t\t\t\tfor (; index < length; index++) {\n\t\t\t\t\tanimation.tweens[index].run(percent);\n\t\t\t\t}\n\n\t\t\t\tdeferred.notifyWith(elem, [animation, percent, remaining]);\n\n\t\t\t\t// If there's more to do, yield\n\t\t\t\tif (percent < 1 && length) {\n\t\t\t\t\treturn remaining;\n\t\t\t\t}\n\n\t\t\t\t// If this was an empty animation, synthesize a final progress notification\n\t\t\t\tif (!length) {\n\t\t\t\t\tdeferred.notifyWith(elem, [animation, 1, 0]);\n\t\t\t\t}\n\n\t\t\t\t// Resolve the animation and report its conclusion\n\t\t\t\tdeferred.resolveWith(elem, [animation]);\n\t\t\t\treturn false;\n\t\t\t},\n\t\t\tanimation = deferred.promise({\n\t\t\t\telem: elem,\n\t\t\t\tprops: jQuery.extend({}, properties),\n\t\t\t\topts: jQuery.extend(true, {\n\t\t\t\t\tspecialEasing: {},\n\t\t\t\t\teasing: jQuery.easing._default\n\t\t\t\t}, options),\n\t\t\t\toriginalProperties: properties,\n\t\t\t\toriginalOptions: options,\n\t\t\t\tstartTime: fxNow || createFxNow(),\n\t\t\t\tduration: options.duration,\n\t\t\t\ttweens: [],\n\t\t\t\tcreateTween: function (prop, end) {\n\t\t\t\t\tvar tween = jQuery.Tween(elem, animation.opts, prop, end,\n\t\t\t\t\t\tanimation.opts.specialEasing[prop] || animation.opts.easing);\n\t\t\t\t\tanimation.tweens.push(tween);\n\t\t\t\t\treturn tween;\n\t\t\t\t},\n\t\t\t\tstop: function (gotoEnd) {\n\t\t\t\t\tvar index = 0,\n\n\t\t\t\t\t\t// If we are going to the end, we want to run all the tweens\n\t\t\t\t\t\t// otherwise we skip this part\n\t\t\t\t\t\tlength = gotoEnd ? animation.tweens.length : 0;\n\t\t\t\t\tif (stopped) {\n\t\t\t\t\t\treturn this;\n\t\t\t\t\t}\n\t\t\t\t\tstopped = true;\n\t\t\t\t\tfor (; index < length; index++) {\n\t\t\t\t\t\tanimation.tweens[index].run(1);\n\t\t\t\t\t}\n\n\t\t\t\t\t// Resolve when we played the last frame; otherwise, reject\n\t\t\t\t\tif (gotoEnd) {\n\t\t\t\t\t\tdeferred.notifyWith(elem, [animation, 1, 0]);\n\t\t\t\t\t\tdeferred.resolveWith(elem, [animation, gotoEnd]);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdeferred.rejectWith(elem, [animation, gotoEnd]);\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t}),\n\t\t\tprops = animation.props;\n\n\t\tpropFilter(props, animation.opts.specialEasing);\n\n\t\tfor (; index < length; index++) {\n\t\t\tresult = Animation.prefilters[index].call(animation, elem, props, animation.opts);\n\t\t\tif (result) {\n\t\t\t\tif (isFunction(result.stop)) {\n\t\t\t\t\tjQuery._queueHooks(animation.elem, animation.opts.queue).stop =\n\t\t\t\t\t\tresult.stop.bind(result);\n\t\t\t\t}\n\t\t\t\treturn result;\n\t\t\t}\n\t\t}\n\n\t\tjQuery.map(props, createTween, animation);\n\n\t\tif (isFunction(animation.opts.start)) {\n\t\t\tanimation.opts.start.call(elem, animation);\n\t\t}\n\n\t\t// Attach callbacks from options\n\t\tanimation\n\t\t\t.progress(animation.opts.progress)\n\t\t\t.done(animation.opts.done, animation.opts.complete)\n\t\t\t.fail(animation.opts.fail)\n\t\t\t.always(animation.opts.always);\n\n\t\tjQuery.fx.timer(\n\t\t\tjQuery.extend(tick, {\n\t\t\t\telem: elem,\n\t\t\t\tanim: animation,\n\t\t\t\tqueue: animation.opts.queue\n\t\t\t})\n\t\t);\n\n\t\treturn animation;\n\t}\n\n\tjQuery.Animation = jQuery.extend(Animation, {\n\n\t\ttweeners: {\n\t\t\t\"*\": [function (prop, value) {\n\t\t\t\tvar tween = this.createTween(prop, value);\n\t\t\t\tadjustCSS(tween.elem, prop, rcssNum.exec(value), tween);\n\t\t\t\treturn tween;\n\t\t\t}]\n\t\t},\n\n\t\ttweener: function (props, callback) {\n\t\t\tif (isFunction(props)) {\n\t\t\t\tcallback = props;\n\t\t\t\tprops = [\"*\"];\n\t\t\t} else {\n\t\t\t\tprops = props.match(rnothtmlwhite);\n\t\t\t}\n\n\t\t\tvar prop,\n\t\t\t\tindex = 0,\n\t\t\t\tlength = props.length;\n\n\t\t\tfor (; index < length; index++) {\n\t\t\t\tprop = props[index];\n\t\t\t\tAnimation.tweeners[prop] = Animation.tweeners[prop] || [];\n\t\t\t\tAnimation.tweeners[prop].unshift(callback);\n\t\t\t}\n\t\t},\n\n\t\tprefilters: [defaultPrefilter],\n\n\t\tprefilter: function (callback, prepend) {\n\t\t\tif (prepend) {\n\t\t\t\tAnimation.prefilters.unshift(callback);\n\t\t\t} else {\n\t\t\t\tAnimation.prefilters.push(callback);\n\t\t\t}\n\t\t}\n\t});\n\n\tjQuery.speed = function (speed, easing, fn) {\n\t\tvar opt = speed && typeof speed === \"object\" ? jQuery.extend({}, speed) : {\n\t\t\tcomplete: fn || !fn && easing ||\n\t\t\t\tisFunction(speed) && speed,\n\t\t\tduration: speed,\n\t\t\teasing: fn && easing || easing && !isFunction(easing) && easing\n\t\t};\n\n\t\t// Go to the end state if fx are off\n\t\tif (jQuery.fx.off) {\n\t\t\topt.duration = 0;\n\n\t\t} else {\n\t\t\tif (typeof opt.duration !== \"number\") {\n\t\t\t\tif (opt.duration in jQuery.fx.speeds) {\n\t\t\t\t\topt.duration = jQuery.fx.speeds[opt.duration];\n\n\t\t\t\t} else {\n\t\t\t\t\topt.duration = jQuery.fx.speeds._default;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Normalize opt.queue - true/undefined/null -> \"fx\"\n\t\tif (opt.queue == null || opt.queue === true) {\n\t\t\topt.queue = \"fx\";\n\t\t}\n\n\t\t// Queueing\n\t\topt.old = opt.complete;\n\n\t\topt.complete = function () {\n\t\t\tif (isFunction(opt.old)) {\n\t\t\t\topt.old.call(this);\n\t\t\t}\n\n\t\t\tif (opt.queue) {\n\t\t\t\tjQuery.dequeue(this, opt.queue);\n\t\t\t}\n\t\t};\n\n\t\treturn opt;\n\t};\n\n\tjQuery.fn.extend({\n\t\tfadeTo: function (speed, to, easing, callback) {\n\n\t\t\t// Show any hidden elements after setting opacity to 0\n\t\t\treturn this.filter(isHiddenWithinTree).css(\"opacity\", 0).show()\n\n\t\t\t\t// Animate to the value specified\n\t\t\t\t.end().animate({ opacity: to }, speed, easing, callback);\n\t\t},\n\t\tanimate: function (prop, speed, easing, callback) {\n\t\t\tvar empty = jQuery.isEmptyObject(prop),\n\t\t\t\toptall = jQuery.speed(speed, easing, callback),\n\t\t\t\tdoAnimation = function () {\n\n\t\t\t\t\t// Operate on a copy of prop so per-property easing won't be lost\n\t\t\t\t\tvar anim = Animation(this, jQuery.extend({}, prop), optall);\n\n\t\t\t\t\t// Empty animations, or finishing resolves immediately\n\t\t\t\t\tif (empty || dataPriv.get(this, \"finish\")) {\n\t\t\t\t\t\tanim.stop(true);\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\tdoAnimation.finish = doAnimation;\n\n\t\t\treturn empty || optall.queue === false ?\n\t\t\t\tthis.each(doAnimation) :\n\t\t\t\tthis.queue(optall.queue, doAnimation);\n\t\t},\n\t\tstop: function (type, clearQueue, gotoEnd) {\n\t\t\tvar stopQueue = function (hooks) {\n\t\t\t\tvar stop = hooks.stop;\n\t\t\t\tdelete hooks.stop;\n\t\t\t\tstop(gotoEnd);\n\t\t\t};\n\n\t\t\tif (typeof type !== \"string\") {\n\t\t\t\tgotoEnd = clearQueue;\n\t\t\t\tclearQueue = type;\n\t\t\t\ttype = undefined;\n\t\t\t}\n\t\t\tif (clearQueue) {\n\t\t\t\tthis.queue(type || \"fx\", []);\n\t\t\t}\n\n\t\t\treturn this.each(function () {\n\t\t\t\tvar dequeue = true,\n\t\t\t\t\tindex = type != null && type + \"queueHooks\",\n\t\t\t\t\ttimers = jQuery.timers,\n\t\t\t\t\tdata = dataPriv.get(this);\n\n\t\t\t\tif (index) {\n\t\t\t\t\tif (data[index] && data[index].stop) {\n\t\t\t\t\t\tstopQueue(data[index]);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tfor (index in data) {\n\t\t\t\t\t\tif (data[index] && data[index].stop && rrun.test(index)) {\n\t\t\t\t\t\t\tstopQueue(data[index]);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tfor (index = timers.length; index--;) {\n\t\t\t\t\tif (timers[index].elem === this &&\n\t\t\t\t\t\t(type == null || timers[index].queue === type)) {\n\n\t\t\t\t\t\ttimers[index].anim.stop(gotoEnd);\n\t\t\t\t\t\tdequeue = false;\n\t\t\t\t\t\ttimers.splice(index, 1);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Start the next in the queue if the last step wasn't forced.\n\t\t\t\t// Timers currently will call their complete callbacks, which\n\t\t\t\t// will dequeue but only if they were gotoEnd.\n\t\t\t\tif (dequeue || !gotoEnd) {\n\t\t\t\t\tjQuery.dequeue(this, type);\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\t\tfinish: function (type) {\n\t\t\tif (type !== false) {\n\t\t\t\ttype = type || \"fx\";\n\t\t\t}\n\t\t\treturn this.each(function () {\n\t\t\t\tvar index,\n\t\t\t\t\tdata = dataPriv.get(this),\n\t\t\t\t\tqueue = data[type + \"queue\"],\n\t\t\t\t\thooks = data[type + \"queueHooks\"],\n\t\t\t\t\ttimers = jQuery.timers,\n\t\t\t\t\tlength = queue ? queue.length : 0;\n\n\t\t\t\t// Enable finishing flag on private data\n\t\t\t\tdata.finish = true;\n\n\t\t\t\t// Empty the queue first\n\t\t\t\tjQuery.queue(this, type, []);\n\n\t\t\t\tif (hooks && hooks.stop) {\n\t\t\t\t\thooks.stop.call(this, true);\n\t\t\t\t}\n\n\t\t\t\t// Look for any active animations, and finish them\n\t\t\t\tfor (index = timers.length; index--;) {\n\t\t\t\t\tif (timers[index].elem === this && timers[index].queue === type) {\n\t\t\t\t\t\ttimers[index].anim.stop(true);\n\t\t\t\t\t\ttimers.splice(index, 1);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Look for any animations in the old queue and finish them\n\t\t\t\tfor (index = 0; index < length; index++) {\n\t\t\t\t\tif (queue[index] && queue[index].finish) {\n\t\t\t\t\t\tqueue[index].finish.call(this);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Turn off finishing flag\n\t\t\t\tdelete data.finish;\n\t\t\t});\n\t\t}\n\t});\n\n\tjQuery.each([\"toggle\", \"show\", \"hide\"], function (_i, name) {\n\t\tvar cssFn = jQuery.fn[name];\n\t\tjQuery.fn[name] = function (speed, easing, callback) {\n\t\t\treturn speed == null || typeof speed === \"boolean\" ?\n\t\t\t\tcssFn.apply(this, arguments) :\n\t\t\t\tthis.animate(genFx(name, true), speed, easing, callback);\n\t\t};\n\t});\n\n\t// Generate shortcuts for custom animations\n\tjQuery.each({\n\t\tslideDown: genFx(\"show\"),\n\t\tslideUp: genFx(\"hide\"),\n\t\tslideToggle: genFx(\"toggle\"),\n\t\tfadeIn: { opacity: \"show\" },\n\t\tfadeOut: { opacity: \"hide\" },\n\t\tfadeToggle: { opacity: \"toggle\" }\n\t}, function (name, props) {\n\t\tjQuery.fn[name] = function (speed, easing, callback) {\n\t\t\treturn this.animate(props, speed, easing, callback);\n\t\t};\n\t});\n\n\tjQuery.timers = [];\n\tjQuery.fx.tick = function () {\n\t\tvar timer,\n\t\t\ti = 0,\n\t\t\ttimers = jQuery.timers;\n\n\t\tfxNow = Date.now();\n\n\t\tfor (; i < timers.length; i++) {\n\t\t\ttimer = timers[i];\n\n\t\t\t// Run the timer and safely remove it when done (allowing for external removal)\n\t\t\tif (!timer() && timers[i] === timer) {\n\t\t\t\ttimers.splice(i--, 1);\n\t\t\t}\n\t\t}\n\n\t\tif (!timers.length) {\n\t\t\tjQuery.fx.stop();\n\t\t}\n\t\tfxNow = undefined;\n\t};\n\n\tjQuery.fx.timer = function (timer) {\n\t\tjQuery.timers.push(timer);\n\t\tjQuery.fx.start();\n\t};\n\n\tjQuery.fx.interval = 13;\n\tjQuery.fx.start = function () {\n\t\tif (inProgress) {\n\t\t\treturn;\n\t\t}\n\n\t\tinProgress = true;\n\t\tschedule();\n\t};\n\n\tjQuery.fx.stop = function () {\n\t\tinProgress = null;\n\t};\n\n\tjQuery.fx.speeds = {\n\t\tslow: 600,\n\t\tfast: 200,\n\n\t\t// Default speed\n\t\t_default: 400\n\t};\n\n\n\t// Based off of the plugin by Clint Helfers, with permission.\n\tjQuery.fn.delay = function (time, type) {\n\t\ttime = jQuery.fx ? jQuery.fx.speeds[time] || time : time;\n\t\ttype = type || \"fx\";\n\n\t\treturn this.queue(type, function (next, hooks) {\n\t\t\tvar timeout = window.setTimeout(next, time);\n\t\t\thooks.stop = function () {\n\t\t\t\twindow.clearTimeout(timeout);\n\t\t\t};\n\t\t});\n\t};\n\n\n\t(function () {\n\t\tvar input = document.createElement(\"input\"),\n\t\t\tselect = document.createElement(\"select\"),\n\t\t\topt = select.appendChild(document.createElement(\"option\"));\n\n\t\tinput.type = \"checkbox\";\n\n\t\t// Support: Android <=4.3 only\n\t\t// Default value for a checkbox should be \"on\"\n\t\tsupport.checkOn = input.value !== \"\";\n\n\t\t// Support: IE <=11 only\n\t\t// Must access selectedIndex to make default options select\n\t\tsupport.optSelected = opt.selected;\n\n\t\t// Support: IE <=11 only\n\t\t// An input loses its value after becoming a radio\n\t\tinput = document.createElement(\"input\");\n\t\tinput.value = \"t\";\n\t\tinput.type = \"radio\";\n\t\tsupport.radioValue = input.value === \"t\";\n\t})();\n\n\n\tvar boolHook,\n\t\tattrHandle = jQuery.expr.attrHandle;\n\n\tjQuery.fn.extend({\n\t\tattr: function (name, value) {\n\t\t\treturn access(this, jQuery.attr, name, value, arguments.length > 1);\n\t\t},\n\n\t\tremoveAttr: function (name) {\n\t\t\treturn this.each(function () {\n\t\t\t\tjQuery.removeAttr(this, name);\n\t\t\t});\n\t\t}\n\t});\n\n\tjQuery.extend({\n\t\tattr: function (elem, name, value) {\n\t\t\tvar ret, hooks,\n\t\t\t\tnType = elem.nodeType;\n\n\t\t\t// Don't get/set attributes on text, comment and attribute nodes\n\t\t\tif (nType === 3 || nType === 8 || nType === 2) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Fallback to prop when attributes are not supported\n\t\t\tif (typeof elem.getAttribute === \"undefined\") {\n\t\t\t\treturn jQuery.prop(elem, name, value);\n\t\t\t}\n\n\t\t\t// Attribute hooks are determined by the lowercase version\n\t\t\t// Grab necessary hook if one is defined\n\t\t\tif (nType !== 1 || !jQuery.isXMLDoc(elem)) {\n\t\t\t\thooks = jQuery.attrHooks[name.toLowerCase()] ||\n\t\t\t\t\t(jQuery.expr.match.bool.test(name) ? boolHook : undefined);\n\t\t\t}\n\n\t\t\tif (value !== undefined) {\n\t\t\t\tif (value === null) {\n\t\t\t\t\tjQuery.removeAttr(elem, name);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (hooks && \"set\" in hooks &&\n\t\t\t\t\t(ret = hooks.set(elem, value, name)) !== undefined) {\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\n\t\t\t\telem.setAttribute(name, value + \"\");\n\t\t\t\treturn value;\n\t\t\t}\n\n\t\t\tif (hooks && \"get\" in hooks && (ret = hooks.get(elem, name)) !== null) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\tret = jQuery.find.attr(elem, name);\n\n\t\t\t// Non-existent attributes return null, we normalize to undefined\n\t\t\treturn ret == null ? undefined : ret;\n\t\t},\n\n\t\tattrHooks: {\n\t\t\ttype: {\n\t\t\t\tset: function (elem, value) {\n\t\t\t\t\tif (!support.radioValue && value === \"radio\" &&\n\t\t\t\t\t\tnodeName(elem, \"input\")) {\n\t\t\t\t\t\tvar val = elem.value;\n\t\t\t\t\t\telem.setAttribute(\"type\", value);\n\t\t\t\t\t\tif (val) {\n\t\t\t\t\t\t\telem.value = val;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn value;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tremoveAttr: function (elem, value) {\n\t\t\tvar name,\n\t\t\t\ti = 0,\n\n\t\t\t\t// Attribute names can contain non-HTML whitespace characters\n\t\t\t\t// https://html.spec.whatwg.org/multipage/syntax.html#attributes-2\n\t\t\t\tattrNames = value && value.match(rnothtmlwhite);\n\n\t\t\tif (attrNames && elem.nodeType === 1) {\n\t\t\t\twhile ((name = attrNames[i++])) {\n\t\t\t\t\telem.removeAttribute(name);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\n\t// Hooks for boolean attributes\n\tboolHook = {\n\t\tset: function (elem, value, name) {\n\t\t\tif (value === false) {\n\n\t\t\t\t// Remove boolean attributes when set to false\n\t\t\t\tjQuery.removeAttr(elem, name);\n\t\t\t} else {\n\t\t\t\telem.setAttribute(name, name);\n\t\t\t}\n\t\t\treturn name;\n\t\t}\n\t};\n\n\tjQuery.each(jQuery.expr.match.bool.source.match(/\\w+/g), function (_i, name) {\n\t\tvar getter = attrHandle[name] || jQuery.find.attr;\n\n\t\tattrHandle[name] = function (elem, name, isXML) {\n\t\t\tvar ret, handle,\n\t\t\t\tlowercaseName = name.toLowerCase();\n\n\t\t\tif (!isXML) {\n\n\t\t\t\t// Avoid an infinite loop by temporarily removing this function from the getter\n\t\t\t\thandle = attrHandle[lowercaseName];\n\t\t\t\tattrHandle[lowercaseName] = ret;\n\t\t\t\tret = getter(elem, name, isXML) != null ?\n\t\t\t\t\tlowercaseName :\n\t\t\t\t\tnull;\n\t\t\t\tattrHandle[lowercaseName] = handle;\n\t\t\t}\n\t\t\treturn ret;\n\t\t};\n\t});\n\n\n\n\n\tvar rfocusable = /^(?:input|select|textarea|button)$/i,\n\t\trclickable = /^(?:a|area)$/i;\n\n\tjQuery.fn.extend({\n\t\tprop: function (name, value) {\n\t\t\treturn access(this, jQuery.prop, name, value, arguments.length > 1);\n\t\t},\n\n\t\tremoveProp: function (name) {\n\t\t\treturn this.each(function () {\n\t\t\t\tdelete this[jQuery.propFix[name] || name];\n\t\t\t});\n\t\t}\n\t});\n\n\tjQuery.extend({\n\t\tprop: function (elem, name, value) {\n\t\t\tvar ret, hooks,\n\t\t\t\tnType = elem.nodeType;\n\n\t\t\t// Don't get/set properties on text, comment and attribute nodes\n\t\t\tif (nType === 3 || nType === 8 || nType === 2) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (nType !== 1 || !jQuery.isXMLDoc(elem)) {\n\n\t\t\t\t// Fix name and attach hooks\n\t\t\t\tname = jQuery.propFix[name] || name;\n\t\t\t\thooks = jQuery.propHooks[name];\n\t\t\t}\n\n\t\t\tif (value !== undefined) {\n\t\t\t\tif (hooks && \"set\" in hooks &&\n\t\t\t\t\t(ret = hooks.set(elem, value, name)) !== undefined) {\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\n\t\t\t\treturn (elem[name] = value);\n\t\t\t}\n\n\t\t\tif (hooks && \"get\" in hooks && (ret = hooks.get(elem, name)) !== null) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\treturn elem[name];\n\t\t},\n\n\t\tpropHooks: {\n\t\t\ttabIndex: {\n\t\t\t\tget: function (elem) {\n\n\t\t\t\t\t// Support: IE <=9 - 11 only\n\t\t\t\t\t// elem.tabIndex doesn't always return the\n\t\t\t\t\t// correct value when it hasn't been explicitly set\n\t\t\t\t\t// Use proper attribute retrieval (trac-12072)\n\t\t\t\t\tvar tabindex = jQuery.find.attr(elem, \"tabindex\");\n\n\t\t\t\t\tif (tabindex) {\n\t\t\t\t\t\treturn parseInt(tabindex, 10);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (\n\t\t\t\t\t\trfocusable.test(elem.nodeName) ||\n\t\t\t\t\t\trclickable.test(elem.nodeName) &&\n\t\t\t\t\t\telem.href\n\t\t\t\t\t) {\n\t\t\t\t\t\treturn 0;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn -1;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tpropFix: {\n\t\t\t\"for\": \"htmlFor\",\n\t\t\t\"class\": \"className\"\n\t\t}\n\t});\n\n\t// Support: IE <=11 only\n\t// Accessing the selectedIndex property\n\t// forces the browser to respect setting selected\n\t// on the option\n\t// The getter ensures a default option is selected\n\t// when in an optgroup\n\t// eslint rule \"no-unused-expressions\" is disabled for this code\n\t// since it considers such accessions noop\n\tif (!support.optSelected) {\n\t\tjQuery.propHooks.selected = {\n\t\t\tget: function (elem) {\n\n\t\t\t\t/* eslint no-unused-expressions: \"off\" */\n\n\t\t\t\tvar parent = elem.parentNode;\n\t\t\t\tif (parent && parent.parentNode) {\n\t\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t\t}\n\t\t\t\treturn null;\n\t\t\t},\n\t\t\tset: function (elem) {\n\n\t\t\t\t/* eslint no-unused-expressions: \"off\" */\n\n\t\t\t\tvar parent = elem.parentNode;\n\t\t\t\tif (parent) {\n\t\t\t\t\tparent.selectedIndex;\n\n\t\t\t\t\tif (parent.parentNode) {\n\t\t\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n\n\tjQuery.each([\n\t\t\"tabIndex\",\n\t\t\"readOnly\",\n\t\t\"maxLength\",\n\t\t\"cellSpacing\",\n\t\t\"cellPadding\",\n\t\t\"rowSpan\",\n\t\t\"colSpan\",\n\t\t\"useMap\",\n\t\t\"frameBorder\",\n\t\t\"contentEditable\"\n\t], function () {\n\t\tjQuery.propFix[this.toLowerCase()] = this;\n\t});\n\n\n\n\n\t// Strip and collapse whitespace according to HTML spec\n\t// https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace\n\tfunction stripAndCollapse(value) {\n\t\tvar tokens = value.match(rnothtmlwhite) || [];\n\t\treturn tokens.join(\" \");\n\t}\n\n\n\tfunction getClass(elem) {\n\t\treturn elem.getAttribute && elem.getAttribute(\"class\") || \"\";\n\t}\n\n\tfunction classesToArray(value) {\n\t\tif (Array.isArray(value)) {\n\t\t\treturn value;\n\t\t}\n\t\tif (typeof value === \"string\") {\n\t\t\treturn value.match(rnothtmlwhite) || [];\n\t\t}\n\t\treturn [];\n\t}\n\n\tjQuery.fn.extend({\n\t\taddClass: function (value) {\n\t\t\tvar classNames, cur, curValue, className, i, finalValue;\n\n\t\t\tif (isFunction(value)) {\n\t\t\t\treturn this.each(function (j) {\n\t\t\t\t\tjQuery(this).addClass(value.call(this, j, getClass(this)));\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tclassNames = classesToArray(value);\n\n\t\t\tif (classNames.length) {\n\t\t\t\treturn this.each(function () {\n\t\t\t\t\tcurValue = getClass(this);\n\t\t\t\t\tcur = this.nodeType === 1 && (\" \" + stripAndCollapse(curValue) + \" \");\n\n\t\t\t\t\tif (cur) {\n\t\t\t\t\t\tfor (i = 0; i < classNames.length; i++) {\n\t\t\t\t\t\t\tclassName = classNames[i];\n\t\t\t\t\t\t\tif (cur.indexOf(\" \" + className + \" \") < 0) {\n\t\t\t\t\t\t\t\tcur += className + \" \";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\t\tfinalValue = stripAndCollapse(cur);\n\t\t\t\t\t\tif (curValue !== finalValue) {\n\t\t\t\t\t\t\tthis.setAttribute(\"class\", finalValue);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn this;\n\t\t},\n\n\t\tremoveClass: function (value) {\n\t\t\tvar classNames, cur, curValue, className, i, finalValue;\n\n\t\t\tif (isFunction(value)) {\n\t\t\t\treturn this.each(function (j) {\n\t\t\t\t\tjQuery(this).removeClass(value.call(this, j, getClass(this)));\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (!arguments.length) {\n\t\t\t\treturn this.attr(\"class\", \"\");\n\t\t\t}\n\n\t\t\tclassNames = classesToArray(value);\n\n\t\t\tif (classNames.length) {\n\t\t\t\treturn this.each(function () {\n\t\t\t\t\tcurValue = getClass(this);\n\n\t\t\t\t\t// This expression is here for better compressibility (see addClass)\n\t\t\t\t\tcur = this.nodeType === 1 && (\" \" + stripAndCollapse(curValue) + \" \");\n\n\t\t\t\t\tif (cur) {\n\t\t\t\t\t\tfor (i = 0; i < classNames.length; i++) {\n\t\t\t\t\t\t\tclassName = classNames[i];\n\n\t\t\t\t\t\t\t// Remove *all* instances\n\t\t\t\t\t\t\twhile (cur.indexOf(\" \" + className + \" \") > -1) {\n\t\t\t\t\t\t\t\tcur = cur.replace(\" \" + className + \" \", \" \");\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\t\tfinalValue = stripAndCollapse(cur);\n\t\t\t\t\t\tif (curValue !== finalValue) {\n\t\t\t\t\t\t\tthis.setAttribute(\"class\", finalValue);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn this;\n\t\t},\n\n\t\ttoggleClass: function (value, stateVal) {\n\t\t\tvar classNames, className, i, self,\n\t\t\t\ttype = typeof value,\n\t\t\t\tisValidValue = type === \"string\" || Array.isArray(value);\n\n\t\t\tif (isFunction(value)) {\n\t\t\t\treturn this.each(function (i) {\n\t\t\t\t\tjQuery(this).toggleClass(\n\t\t\t\t\t\tvalue.call(this, i, getClass(this), stateVal),\n\t\t\t\t\t\tstateVal\n\t\t\t\t\t);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (typeof stateVal === \"boolean\" && isValidValue) {\n\t\t\t\treturn stateVal ? this.addClass(value) : this.removeClass(value);\n\t\t\t}\n\n\t\t\tclassNames = classesToArray(value);\n\n\t\t\treturn this.each(function () {\n\t\t\t\tif (isValidValue) {\n\n\t\t\t\t\t// Toggle individual class names\n\t\t\t\t\tself = jQuery(this);\n\n\t\t\t\t\tfor (i = 0; i < classNames.length; i++) {\n\t\t\t\t\t\tclassName = classNames[i];\n\n\t\t\t\t\t\t// Check each className given, space separated list\n\t\t\t\t\t\tif (self.hasClass(className)) {\n\t\t\t\t\t\t\tself.removeClass(className);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tself.addClass(className);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Toggle whole class name\n\t\t\t\t} else if (value === undefined || type === \"boolean\") {\n\t\t\t\t\tclassName = getClass(this);\n\t\t\t\t\tif (className) {\n\n\t\t\t\t\t\t// Store className if set\n\t\t\t\t\t\tdataPriv.set(this, \"__className__\", className);\n\t\t\t\t\t}\n\n\t\t\t\t\t// If the element has a class name or if we're passed `false`,\n\t\t\t\t\t// then remove the whole classname (if there was one, the above saved it).\n\t\t\t\t\t// Otherwise bring back whatever was previously saved (if anything),\n\t\t\t\t\t// falling back to the empty string if nothing was stored.\n\t\t\t\t\tif (this.setAttribute) {\n\t\t\t\t\t\tthis.setAttribute(\"class\",\n\t\t\t\t\t\t\tclassName || value === false ?\n\t\t\t\t\t\t\t\t\"\" :\n\t\t\t\t\t\t\t\tdataPriv.get(this, \"__className__\") || \"\"\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\thasClass: function (selector) {\n\t\t\tvar className, elem,\n\t\t\t\ti = 0;\n\n\t\t\tclassName = \" \" + selector + \" \";\n\t\t\twhile ((elem = this[i++])) {\n\t\t\t\tif (elem.nodeType === 1 &&\n\t\t\t\t\t(\" \" + stripAndCollapse(getClass(elem)) + \" \").indexOf(className) > -1) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn false;\n\t\t}\n\t});\n\n\n\n\n\tvar rreturn = /\\r/g;\n\n\tjQuery.fn.extend({\n\t\tval: function (value) {\n\t\t\tvar hooks, ret, valueIsFunction,\n\t\t\t\telem = this[0];\n\n\t\t\tif (!arguments.length) {\n\t\t\t\tif (elem) {\n\t\t\t\t\thooks = jQuery.valHooks[elem.type] ||\n\t\t\t\t\t\tjQuery.valHooks[elem.nodeName.toLowerCase()];\n\n\t\t\t\t\tif (hooks &&\n\t\t\t\t\t\t\"get\" in hooks &&\n\t\t\t\t\t\t(ret = hooks.get(elem, \"value\")) !== undefined\n\t\t\t\t\t) {\n\t\t\t\t\t\treturn ret;\n\t\t\t\t\t}\n\n\t\t\t\t\tret = elem.value;\n\n\t\t\t\t\t// Handle most common string cases\n\t\t\t\t\tif (typeof ret === \"string\") {\n\t\t\t\t\t\treturn ret.replace(rreturn, \"\");\n\t\t\t\t\t}\n\n\t\t\t\t\t// Handle cases where value is null/undef or number\n\t\t\t\t\treturn ret == null ? \"\" : ret;\n\t\t\t\t}\n\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvalueIsFunction = isFunction(value);\n\n\t\t\treturn this.each(function (i) {\n\t\t\t\tvar val;\n\n\t\t\t\tif (this.nodeType !== 1) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (valueIsFunction) {\n\t\t\t\t\tval = value.call(this, i, jQuery(this).val());\n\t\t\t\t} else {\n\t\t\t\t\tval = value;\n\t\t\t\t}\n\n\t\t\t\t// Treat null/undefined as \"\"; convert numbers to string\n\t\t\t\tif (val == null) {\n\t\t\t\t\tval = \"\";\n\n\t\t\t\t} else if (typeof val === \"number\") {\n\t\t\t\t\tval += \"\";\n\n\t\t\t\t} else if (Array.isArray(val)) {\n\t\t\t\t\tval = jQuery.map(val, function (value) {\n\t\t\t\t\t\treturn value == null ? \"\" : value + \"\";\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\thooks = jQuery.valHooks[this.type] || jQuery.valHooks[this.nodeName.toLowerCase()];\n\n\t\t\t\t// If set returns undefined, fall back to normal setting\n\t\t\t\tif (!hooks || !(\"set\" in hooks) || hooks.set(this, val, \"value\") === undefined) {\n\t\t\t\t\tthis.value = val;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t});\n\n\tjQuery.extend({\n\t\tvalHooks: {\n\t\t\toption: {\n\t\t\t\tget: function (elem) {\n\n\t\t\t\t\tvar val = jQuery.find.attr(elem, \"value\");\n\t\t\t\t\treturn val != null ?\n\t\t\t\t\t\tval :\n\n\t\t\t\t\t\t// Support: IE <=10 - 11 only\n\t\t\t\t\t\t// option.text throws exceptions (trac-14686, trac-14858)\n\t\t\t\t\t\t// Strip and collapse whitespace\n\t\t\t\t\t\t// https://html.spec.whatwg.org/#strip-and-collapse-whitespace\n\t\t\t\t\t\tstripAndCollapse(jQuery.text(elem));\n\t\t\t\t}\n\t\t\t},\n\t\t\tselect: {\n\t\t\t\tget: function (elem) {\n\t\t\t\t\tvar value, option, i,\n\t\t\t\t\t\toptions = elem.options,\n\t\t\t\t\t\tindex = elem.selectedIndex,\n\t\t\t\t\t\tone = elem.type === \"select-one\",\n\t\t\t\t\t\tvalues = one ? null : [],\n\t\t\t\t\t\tmax = one ? index + 1 : options.length;\n\n\t\t\t\t\tif (index < 0) {\n\t\t\t\t\t\ti = max;\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\ti = one ? index : 0;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Loop through all the selected options\n\t\t\t\t\tfor (; i < max; i++) {\n\t\t\t\t\t\toption = options[i];\n\n\t\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t\t// IE8-9 doesn't update selected after form reset (trac-2551)\n\t\t\t\t\t\tif ((option.selected || i === index) &&\n\n\t\t\t\t\t\t\t// Don't return options that are disabled or in a disabled optgroup\n\t\t\t\t\t\t\t!option.disabled &&\n\t\t\t\t\t\t\t(!option.parentNode.disabled ||\n\t\t\t\t\t\t\t\t!nodeName(option.parentNode, \"optgroup\"))) {\n\n\t\t\t\t\t\t\t// Get the specific value for the option\n\t\t\t\t\t\t\tvalue = jQuery(option).val();\n\n\t\t\t\t\t\t\t// We don't need an array for one selects\n\t\t\t\t\t\t\tif (one) {\n\t\t\t\t\t\t\t\treturn value;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Multi-Selects return an array\n\t\t\t\t\t\t\tvalues.push(value);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn values;\n\t\t\t\t},\n\n\t\t\t\tset: function (elem, value) {\n\t\t\t\t\tvar optionSet, option,\n\t\t\t\t\t\toptions = elem.options,\n\t\t\t\t\t\tvalues = jQuery.makeArray(value),\n\t\t\t\t\t\ti = options.length;\n\n\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\toption = options[i];\n\n\t\t\t\t\t\t/* eslint-disable no-cond-assign */\n\n\t\t\t\t\t\tif (option.selected =\n\t\t\t\t\t\t\tjQuery.inArray(jQuery.valHooks.option.get(option), values) > -1\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\toptionSet = true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t/* eslint-enable no-cond-assign */\n\t\t\t\t\t}\n\n\t\t\t\t\t// Force browsers to behave consistently when non-matching value is set\n\t\t\t\t\tif (!optionSet) {\n\t\t\t\t\t\telem.selectedIndex = -1;\n\t\t\t\t\t}\n\t\t\t\t\treturn values;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\n\t// Radios and checkboxes getter/setter\n\tjQuery.each([\"radio\", \"checkbox\"], function () {\n\t\tjQuery.valHooks[this] = {\n\t\t\tset: function (elem, value) {\n\t\t\t\tif (Array.isArray(value)) {\n\t\t\t\t\treturn (elem.checked = jQuery.inArray(jQuery(elem).val(), value) > -1);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\tif (!support.checkOn) {\n\t\t\tjQuery.valHooks[this].get = function (elem) {\n\t\t\t\treturn elem.getAttribute(\"value\") === null ? \"on\" : elem.value;\n\t\t\t};\n\t\t}\n\t});\n\n\n\n\n\t// Return jQuery for attributes-only inclusion\n\tvar location = window.location;\n\n\tvar nonce = { guid: Date.now() };\n\n\tvar rquery = (/\\?/);\n\n\n\n\t// Cross-browser xml parsing\n\tjQuery.parseXML = function (data) {\n\t\tvar xml, parserErrorElem;\n\t\tif (!data || typeof data !== \"string\") {\n\t\t\treturn null;\n\t\t}\n\n\t\t// Support: IE 9 - 11 only\n\t\t// IE throws on parseFromString with invalid input.\n\t\ttry {\n\t\t\txml = (new window.DOMParser()).parseFromString(data, \"text/xml\");\n\t\t} catch (e) { }\n\n\t\tparserErrorElem = xml && xml.getElementsByTagName(\"parsererror\")[0];\n\t\tif (!xml || parserErrorElem) {\n\t\t\tjQuery.error(\"Invalid XML: \" + (\n\t\t\t\tparserErrorElem ?\n\t\t\t\t\tjQuery.map(parserErrorElem.childNodes, function (el) {\n\t\t\t\t\t\treturn el.textContent;\n\t\t\t\t\t}).join(\"\\n\") :\n\t\t\t\t\tdata\n\t\t\t));\n\t\t}\n\t\treturn xml;\n\t};\n\n\n\tvar rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,\n\t\tstopPropagationCallback = function (e) {\n\t\t\te.stopPropagation();\n\t\t};\n\n\tjQuery.extend(jQuery.event, {\n\n\t\ttrigger: function (event, data, elem, onlyHandlers) {\n\n\t\t\tvar i, cur, tmp, bubbleType, ontype, handle, special, lastElement,\n\t\t\t\teventPath = [elem || document],\n\t\t\t\ttype = hasOwn.call(event, \"type\") ? event.type : event,\n\t\t\t\tnamespaces = hasOwn.call(event, \"namespace\") ? event.namespace.split(\".\") : [];\n\n\t\t\tcur = lastElement = tmp = elem = elem || document;\n\n\t\t\t// Don't do events on text and comment nodes\n\t\t\tif (elem.nodeType === 3 || elem.nodeType === 8) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// focus/blur morphs to focusin/out; ensure we're not firing them right now\n\t\t\tif (rfocusMorph.test(type + jQuery.event.triggered)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (type.indexOf(\".\") > -1) {\n\n\t\t\t\t// Namespaced trigger; create a regexp to match event type in handle()\n\t\t\t\tnamespaces = type.split(\".\");\n\t\t\t\ttype = namespaces.shift();\n\t\t\t\tnamespaces.sort();\n\t\t\t}\n\t\t\tontype = type.indexOf(\":\") < 0 && \"on\" + type;\n\n\t\t\t// Caller can pass in a jQuery.Event object, Object, or just an event type string\n\t\t\tevent = event[jQuery.expando] ?\n\t\t\t\tevent :\n\t\t\t\tnew jQuery.Event(type, typeof event === \"object\" && event);\n\n\t\t\t// Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)\n\t\t\tevent.isTrigger = onlyHandlers ? 2 : 3;\n\t\t\tevent.namespace = namespaces.join(\".\");\n\t\t\tevent.rnamespace = event.namespace ?\n\t\t\t\tnew RegExp(\"(^|\\\\.)\" + namespaces.join(\"\\\\.(?:.*\\\\.|)\") + \"(\\\\.|$)\") :\n\t\t\t\tnull;\n\n\t\t\t// Clean up the event in case it is being reused\n\t\t\tevent.result = undefined;\n\t\t\tif (!event.target) {\n\t\t\t\tevent.target = elem;\n\t\t\t}\n\n\t\t\t// Clone any incoming data and prepend the event, creating the handler arg list\n\t\t\tdata = data == null ?\n\t\t\t\t[event] :\n\t\t\t\tjQuery.makeArray(data, [event]);\n\n\t\t\t// Allow special events to draw outside the lines\n\t\t\tspecial = jQuery.event.special[type] || {};\n\t\t\tif (!onlyHandlers && special.trigger && special.trigger.apply(elem, data) === false) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Determine event propagation path in advance, per W3C events spec (trac-9951)\n\t\t\t// Bubble up to document, then to window; watch for a global ownerDocument var (trac-9724)\n\t\t\tif (!onlyHandlers && !special.noBubble && !isWindow(elem)) {\n\n\t\t\t\tbubbleType = special.delegateType || type;\n\t\t\t\tif (!rfocusMorph.test(bubbleType + type)) {\n\t\t\t\t\tcur = cur.parentNode;\n\t\t\t\t}\n\t\t\t\tfor (; cur; cur = cur.parentNode) {\n\t\t\t\t\teventPath.push(cur);\n\t\t\t\t\ttmp = cur;\n\t\t\t\t}\n\n\t\t\t\t// Only add window if we got to document (e.g., not plain obj or detached DOM)\n\t\t\t\tif (tmp === (elem.ownerDocument || document)) {\n\t\t\t\t\teventPath.push(tmp.defaultView || tmp.parentWindow || window);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Fire handlers on the event path\n\t\t\ti = 0;\n\t\t\twhile ((cur = eventPath[i++]) && !event.isPropagationStopped()) {\n\t\t\t\tlastElement = cur;\n\t\t\t\tevent.type = i > 1 ?\n\t\t\t\t\tbubbleType :\n\t\t\t\t\tspecial.bindType || type;\n\n\t\t\t\t// jQuery handler\n\t\t\t\thandle = (dataPriv.get(cur, \"events\") || Object.create(null))[event.type] &&\n\t\t\t\t\tdataPriv.get(cur, \"handle\");\n\t\t\t\tif (handle) {\n\t\t\t\t\thandle.apply(cur, data);\n\t\t\t\t}\n\n\t\t\t\t// Native handler\n\t\t\t\thandle = ontype && cur[ontype];\n\t\t\t\tif (handle && handle.apply && acceptData(cur)) {\n\t\t\t\t\tevent.result = handle.apply(cur, data);\n\t\t\t\t\tif (event.result === false) {\n\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tevent.type = type;\n\n\t\t\t// If nobody prevented the default action, do it now\n\t\t\tif (!onlyHandlers && !event.isDefaultPrevented()) {\n\n\t\t\t\tif ((!special._default ||\n\t\t\t\t\tspecial._default.apply(eventPath.pop(), data) === false) &&\n\t\t\t\t\tacceptData(elem)) {\n\n\t\t\t\t\t// Call a native DOM method on the target with the same name as the event.\n\t\t\t\t\t// Don't do default actions on window, that's where global variables be (trac-6170)\n\t\t\t\t\tif (ontype && isFunction(elem[type]) && !isWindow(elem)) {\n\n\t\t\t\t\t\t// Don't re-trigger an onFOO event when we call its FOO() method\n\t\t\t\t\t\ttmp = elem[ontype];\n\n\t\t\t\t\t\tif (tmp) {\n\t\t\t\t\t\t\telem[ontype] = null;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Prevent re-triggering of the same event, since we already bubbled it above\n\t\t\t\t\t\tjQuery.event.triggered = type;\n\n\t\t\t\t\t\tif (event.isPropagationStopped()) {\n\t\t\t\t\t\t\tlastElement.addEventListener(type, stopPropagationCallback);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\telem[type]();\n\n\t\t\t\t\t\tif (event.isPropagationStopped()) {\n\t\t\t\t\t\t\tlastElement.removeEventListener(type, stopPropagationCallback);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tjQuery.event.triggered = undefined;\n\n\t\t\t\t\t\tif (tmp) {\n\t\t\t\t\t\t\telem[ontype] = tmp;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn event.result;\n\t\t},\n\n\t\t// Piggyback on a donor event to simulate a different one\n\t\t// Used only for `focus(in | out)` events\n\t\tsimulate: function (type, elem, event) {\n\t\t\tvar e = jQuery.extend(\n\t\t\t\tnew jQuery.Event(),\n\t\t\t\tevent,\n\t\t\t\t{\n\t\t\t\t\ttype: type,\n\t\t\t\t\tisSimulated: true\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tjQuery.event.trigger(e, null, elem);\n\t\t}\n\n\t});\n\n\tjQuery.fn.extend({\n\n\t\ttrigger: function (type, data) {\n\t\t\treturn this.each(function () {\n\t\t\t\tjQuery.event.trigger(type, data, this);\n\t\t\t});\n\t\t},\n\t\ttriggerHandler: function (type, data) {\n\t\t\tvar elem = this[0];\n\t\t\tif (elem) {\n\t\t\t\treturn jQuery.event.trigger(type, data, elem, true);\n\t\t\t}\n\t\t}\n\t});\n\n\n\tvar\n\t\trbracket = /\\[\\]$/,\n\t\trCRLF = /\\r?\\n/g,\n\t\trsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,\n\t\trsubmittable = /^(?:input|select|textarea|keygen)/i;\n\n\tfunction buildParams(prefix, obj, traditional, add) {\n\t\tvar name;\n\n\t\tif (Array.isArray(obj)) {\n\n\t\t\t// Serialize array item.\n\t\t\tjQuery.each(obj, function (i, v) {\n\t\t\t\tif (traditional || rbracket.test(prefix)) {\n\n\t\t\t\t\t// Treat each array item as a scalar.\n\t\t\t\t\tadd(prefix, v);\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// Item is non-scalar (array or object), encode its numeric index.\n\t\t\t\t\tbuildParams(\n\t\t\t\t\t\tprefix + \"[\" + (typeof v === \"object\" && v != null ? i : \"\") + \"]\",\n\t\t\t\t\t\tv,\n\t\t\t\t\t\ttraditional,\n\t\t\t\t\t\tadd\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t});\n\n\t\t} else if (!traditional && toType(obj) === \"object\") {\n\n\t\t\t// Serialize object item.\n\t\t\tfor (name in obj) {\n\t\t\t\tbuildParams(prefix + \"[\" + name + \"]\", obj[name], traditional, add);\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// Serialize scalar item.\n\t\t\tadd(prefix, obj);\n\t\t}\n\t}\n\n\t// Serialize an array of form elements or a set of\n\t// key/values into a query string\n\tjQuery.param = function (a, traditional) {\n\t\tvar prefix,\n\t\t\ts = [],\n\t\t\tadd = function (key, valueOrFunction) {\n\n\t\t\t\t// If value is a function, invoke it and use its return value\n\t\t\t\tvar value = isFunction(valueOrFunction) ?\n\t\t\t\t\tvalueOrFunction() :\n\t\t\t\t\tvalueOrFunction;\n\n\t\t\t\ts[s.length] = encodeURIComponent(key) + \"=\" +\n\t\t\t\t\tencodeURIComponent(value == null ? \"\" : value);\n\t\t\t};\n\n\t\tif (a == null) {\n\t\t\treturn \"\";\n\t\t}\n\n\t\t// If an array was passed in, assume that it is an array of form elements.\n\t\tif (Array.isArray(a) || (a.jquery && !jQuery.isPlainObject(a))) {\n\n\t\t\t// Serialize the form elements\n\t\t\tjQuery.each(a, function () {\n\t\t\t\tadd(this.name, this.value);\n\t\t\t});\n\n\t\t} else {\n\n\t\t\t// If traditional, encode the \"old\" way (the way 1.3.2 or older\n\t\t\t// did it), otherwise encode params recursively.\n\t\t\tfor (prefix in a) {\n\t\t\t\tbuildParams(prefix, a[prefix], traditional, add);\n\t\t\t}\n\t\t}\n\n\t\t// Return the resulting serialization\n\t\treturn s.join(\"&\");\n\t};\n\n\tjQuery.fn.extend({\n\t\tserialize: function () {\n\t\t\treturn jQuery.param(this.serializeArray());\n\t\t},\n\t\tserializeArray: function () {\n\t\t\treturn this.map(function () {\n\n\t\t\t\t// Can add propHook for \"elements\" to filter or add form elements\n\t\t\t\tvar elements = jQuery.prop(this, \"elements\");\n\t\t\t\treturn elements ? jQuery.makeArray(elements) : this;\n\t\t\t}).filter(function () {\n\t\t\t\tvar type = this.type;\n\n\t\t\t\t// Use .is( \":disabled\" ) so that fieldset[disabled] works\n\t\t\t\treturn this.name && !jQuery(this).is(\":disabled\") &&\n\t\t\t\t\trsubmittable.test(this.nodeName) && !rsubmitterTypes.test(type) &&\n\t\t\t\t\t(this.checked || !rcheckableType.test(type));\n\t\t\t}).map(function (_i, elem) {\n\t\t\t\tvar val = jQuery(this).val();\n\n\t\t\t\tif (val == null) {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\n\t\t\t\tif (Array.isArray(val)) {\n\t\t\t\t\treturn jQuery.map(val, function (val) {\n\t\t\t\t\t\treturn { name: elem.name, value: val.replace(rCRLF, \"\\r\\n\") };\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\treturn { name: elem.name, value: val.replace(rCRLF, \"\\r\\n\") };\n\t\t\t}).get();\n\t\t}\n\t});\n\n\n\tvar\n\t\tr20 = /%20/g,\n\t\trhash = /#.*$/,\n\t\trantiCache = /([?&])_=[^&]*/,\n\t\trheaders = /^(.*?):[ \\t]*([^\\r\\n]*)$/mg,\n\n\t\t// trac-7653, trac-8125, trac-8152: local protocol detection\n\t\trlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,\n\t\trnoContent = /^(?:GET|HEAD)$/,\n\t\trprotocol = /^\\/\\//,\n\n\t\t/* Prefilters\n\t\t * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)\n\t\t * 2) These are called:\n\t\t *    - BEFORE asking for a transport\n\t\t *    - AFTER param serialization (s.data is a string if s.processData is true)\n\t\t * 3) key is the dataType\n\t\t * 4) the catchall symbol \"*\" can be used\n\t\t * 5) execution will start with transport dataType and THEN continue down to \"*\" if needed\n\t\t */\n\t\tprefilters = {},\n\n\t\t/* Transports bindings\n\t\t * 1) key is the dataType\n\t\t * 2) the catchall symbol \"*\" can be used\n\t\t * 3) selection will start with transport dataType and THEN go to \"*\" if needed\n\t\t */\n\t\ttransports = {},\n\n\t\t// Avoid comment-prolog char sequence (trac-10098); must appease lint and evade compression\n\t\tallTypes = \"*/\".concat(\"*\"),\n\n\t\t// Anchor tag for parsing the document origin\n\t\toriginAnchor = document.createElement(\"a\");\n\n\toriginAnchor.href = location.href;\n\n\t// Base \"constructor\" for jQuery.ajaxPrefilter and jQuery.ajaxTransport\n\tfunction addToPrefiltersOrTransports(structure) {\n\n\t\t// dataTypeExpression is optional and defaults to \"*\"\n\t\treturn function (dataTypeExpression, func) {\n\n\t\t\tif (typeof dataTypeExpression !== \"string\") {\n\t\t\t\tfunc = dataTypeExpression;\n\t\t\t\tdataTypeExpression = \"*\";\n\t\t\t}\n\n\t\t\tvar dataType,\n\t\t\t\ti = 0,\n\t\t\t\tdataTypes = dataTypeExpression.toLowerCase().match(rnothtmlwhite) || [];\n\n\t\t\tif (isFunction(func)) {\n\n\t\t\t\t// For each dataType in the dataTypeExpression\n\t\t\t\twhile ((dataType = dataTypes[i++])) {\n\n\t\t\t\t\t// Prepend if requested\n\t\t\t\t\tif (dataType[0] === \"+\") {\n\t\t\t\t\t\tdataType = dataType.slice(1) || \"*\";\n\t\t\t\t\t\t(structure[dataType] = structure[dataType] || []).unshift(func);\n\n\t\t\t\t\t\t// Otherwise append\n\t\t\t\t\t} else {\n\t\t\t\t\t\t(structure[dataType] = structure[dataType] || []).push(func);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n\n\t// Base inspection function for prefilters and transports\n\tfunction inspectPrefiltersOrTransports(structure, options, originalOptions, jqXHR) {\n\n\t\tvar inspected = {},\n\t\t\tseekingTransport = (structure === transports);\n\n\t\tfunction inspect(dataType) {\n\t\t\tvar selected;\n\t\t\tinspected[dataType] = true;\n\t\t\tjQuery.each(structure[dataType] || [], function (_, prefilterOrFactory) {\n\t\t\t\tvar dataTypeOrTransport = prefilterOrFactory(options, originalOptions, jqXHR);\n\t\t\t\tif (typeof dataTypeOrTransport === \"string\" &&\n\t\t\t\t\t!seekingTransport && !inspected[dataTypeOrTransport]) {\n\n\t\t\t\t\toptions.dataTypes.unshift(dataTypeOrTransport);\n\t\t\t\t\tinspect(dataTypeOrTransport);\n\t\t\t\t\treturn false;\n\t\t\t\t} else if (seekingTransport) {\n\t\t\t\t\treturn !(selected = dataTypeOrTransport);\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn selected;\n\t\t}\n\n\t\treturn inspect(options.dataTypes[0]) || !inspected[\"*\"] && inspect(\"*\");\n\t}\n\n\t// A special extend for ajax options\n\t// that takes \"flat\" options (not to be deep extended)\n\t// Fixes trac-9887\n\tfunction ajaxExtend(target, src) {\n\t\tvar key, deep,\n\t\t\tflatOptions = jQuery.ajaxSettings.flatOptions || {};\n\n\t\tfor (key in src) {\n\t\t\tif (src[key] !== undefined) {\n\t\t\t\t(flatOptions[key] ? target : (deep || (deep = {})))[key] = src[key];\n\t\t\t}\n\t\t}\n\t\tif (deep) {\n\t\t\tjQuery.extend(true, target, deep);\n\t\t}\n\n\t\treturn target;\n\t}\n\n\t/* Handles responses to an ajax request:\n\t * - finds the right dataType (mediates between content-type and expected dataType)\n\t * - returns the corresponding response\n\t */\n\tfunction ajaxHandleResponses(s, jqXHR, responses) {\n\n\t\tvar ct, type, finalDataType, firstDataType,\n\t\t\tcontents = s.contents,\n\t\t\tdataTypes = s.dataTypes;\n\n\t\t// Remove auto dataType and get content-type in the process\n\t\twhile (dataTypes[0] === \"*\") {\n\t\t\tdataTypes.shift();\n\t\t\tif (ct === undefined) {\n\t\t\t\tct = s.mimeType || jqXHR.getResponseHeader(\"Content-Type\");\n\t\t\t}\n\t\t}\n\n\t\t// Check if we're dealing with a known content-type\n\t\tif (ct) {\n\t\t\tfor (type in contents) {\n\t\t\t\tif (contents[type] && contents[type].test(ct)) {\n\t\t\t\t\tdataTypes.unshift(type);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Check to see if we have a response for the expected dataType\n\t\tif (dataTypes[0] in responses) {\n\t\t\tfinalDataType = dataTypes[0];\n\t\t} else {\n\n\t\t\t// Try convertible dataTypes\n\t\t\tfor (type in responses) {\n\t\t\t\tif (!dataTypes[0] || s.converters[type + \" \" + dataTypes[0]]) {\n\t\t\t\t\tfinalDataType = type;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (!firstDataType) {\n\t\t\t\t\tfirstDataType = type;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Or just use first one\n\t\t\tfinalDataType = finalDataType || firstDataType;\n\t\t}\n\n\t\t// If we found a dataType\n\t\t// We add the dataType to the list if needed\n\t\t// and return the corresponding response\n\t\tif (finalDataType) {\n\t\t\tif (finalDataType !== dataTypes[0]) {\n\t\t\t\tdataTypes.unshift(finalDataType);\n\t\t\t}\n\t\t\treturn responses[finalDataType];\n\t\t}\n\t}\n\n\t/* Chain conversions given the request and the original response\n\t * Also sets the responseXXX fields on the jqXHR instance\n\t */\n\tfunction ajaxConvert(s, response, jqXHR, isSuccess) {\n\t\tvar conv2, current, conv, tmp, prev,\n\t\t\tconverters = {},\n\n\t\t\t// Work with a copy of dataTypes in case we need to modify it for conversion\n\t\t\tdataTypes = s.dataTypes.slice();\n\n\t\t// Create converters map with lowercased keys\n\t\tif (dataTypes[1]) {\n\t\t\tfor (conv in s.converters) {\n\t\t\t\tconverters[conv.toLowerCase()] = s.converters[conv];\n\t\t\t}\n\t\t}\n\n\t\tcurrent = dataTypes.shift();\n\n\t\t// Convert to each sequential dataType\n\t\twhile (current) {\n\n\t\t\tif (s.responseFields[current]) {\n\t\t\t\tjqXHR[s.responseFields[current]] = response;\n\t\t\t}\n\n\t\t\t// Apply the dataFilter if provided\n\t\t\tif (!prev && isSuccess && s.dataFilter) {\n\t\t\t\tresponse = s.dataFilter(response, s.dataType);\n\t\t\t}\n\n\t\t\tprev = current;\n\t\t\tcurrent = dataTypes.shift();\n\n\t\t\tif (current) {\n\n\t\t\t\t// There's only work to do if current dataType is non-auto\n\t\t\t\tif (current === \"*\") {\n\n\t\t\t\t\tcurrent = prev;\n\n\t\t\t\t\t// Convert response if prev dataType is non-auto and differs from current\n\t\t\t\t} else if (prev !== \"*\" && prev !== current) {\n\n\t\t\t\t\t// Seek a direct converter\n\t\t\t\t\tconv = converters[prev + \" \" + current] || converters[\"* \" + current];\n\n\t\t\t\t\t// If none found, seek a pair\n\t\t\t\t\tif (!conv) {\n\t\t\t\t\t\tfor (conv2 in converters) {\n\n\t\t\t\t\t\t\t// If conv2 outputs current\n\t\t\t\t\t\t\ttmp = conv2.split(\" \");\n\t\t\t\t\t\t\tif (tmp[1] === current) {\n\n\t\t\t\t\t\t\t\t// If prev can be converted to accepted input\n\t\t\t\t\t\t\t\tconv = converters[prev + \" \" + tmp[0]] ||\n\t\t\t\t\t\t\t\t\tconverters[\"* \" + tmp[0]];\n\t\t\t\t\t\t\t\tif (conv) {\n\n\t\t\t\t\t\t\t\t\t// Condense equivalence converters\n\t\t\t\t\t\t\t\t\tif (conv === true) {\n\t\t\t\t\t\t\t\t\t\tconv = converters[conv2];\n\n\t\t\t\t\t\t\t\t\t\t// Otherwise, insert the intermediate dataType\n\t\t\t\t\t\t\t\t\t} else if (converters[conv2] !== true) {\n\t\t\t\t\t\t\t\t\t\tcurrent = tmp[0];\n\t\t\t\t\t\t\t\t\t\tdataTypes.unshift(tmp[1]);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Apply converter (if not an equivalence)\n\t\t\t\t\tif (conv !== true) {\n\n\t\t\t\t\t\t// Unless errors are allowed to bubble, catch and return them\n\t\t\t\t\t\tif (conv && s.throws) {\n\t\t\t\t\t\t\tresponse = conv(response);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\tresponse = conv(response);\n\t\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\tstate: \"parsererror\",\n\t\t\t\t\t\t\t\t\terror: conv ? e : \"No conversion from \" + prev + \" to \" + current\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn { state: \"success\", data: response };\n\t}\n\n\tjQuery.extend({\n\n\t\t// Counter for holding the number of active queries\n\t\tactive: 0,\n\n\t\t// Last-Modified header cache for next request\n\t\tlastModified: {},\n\t\tetag: {},\n\n\t\tajaxSettings: {\n\t\t\turl: location.href,\n\t\t\ttype: \"GET\",\n\t\t\tisLocal: rlocalProtocol.test(location.protocol),\n\t\t\tglobal: true,\n\t\t\tprocessData: true,\n\t\t\tasync: true,\n\t\t\tcontentType: \"application/x-www-form-urlencoded; charset=UTF-8\",\n\n\t\t\t/*\n\t\t\ttimeout: 0,\n\t\t\tdata: null,\n\t\t\tdataType: null,\n\t\t\tusername: null,\n\t\t\tpassword: null,\n\t\t\tcache: null,\n\t\t\tthrows: false,\n\t\t\ttraditional: false,\n\t\t\theaders: {},\n\t\t\t*/\n\n\t\t\taccepts: {\n\t\t\t\t\"*\": allTypes,\n\t\t\t\ttext: \"text/plain\",\n\t\t\t\thtml: \"text/html\",\n\t\t\t\txml: \"application/xml, text/xml\",\n\t\t\t\tjson: \"application/json, text/javascript\"\n\t\t\t},\n\n\t\t\tcontents: {\n\t\t\t\txml: /\\bxml\\b/,\n\t\t\t\thtml: /\\bhtml/,\n\t\t\t\tjson: /\\bjson\\b/\n\t\t\t},\n\n\t\t\tresponseFields: {\n\t\t\t\txml: \"responseXML\",\n\t\t\t\ttext: \"responseText\",\n\t\t\t\tjson: \"responseJSON\"\n\t\t\t},\n\n\t\t\t// Data converters\n\t\t\t// Keys separate source (or catchall \"*\") and destination types with a single space\n\t\t\tconverters: {\n\n\t\t\t\t// Convert anything to text\n\t\t\t\t\"* text\": String,\n\n\t\t\t\t// Text to html (true = no transformation)\n\t\t\t\t\"text html\": true,\n\n\t\t\t\t// Evaluate text as a json expression\n\t\t\t\t\"text json\": JSON.parse,\n\n\t\t\t\t// Parse text as xml\n\t\t\t\t\"text xml\": jQuery.parseXML\n\t\t\t},\n\n\t\t\t// For options that shouldn't be deep extended:\n\t\t\t// you can add your own custom options here if\n\t\t\t// and when you create one that shouldn't be\n\t\t\t// deep extended (see ajaxExtend)\n\t\t\tflatOptions: {\n\t\t\t\turl: true,\n\t\t\t\tcontext: true\n\t\t\t}\n\t\t},\n\n\t\t// Creates a full fledged settings object into target\n\t\t// with both ajaxSettings and settings fields.\n\t\t// If target is omitted, writes into ajaxSettings.\n\t\tajaxSetup: function (target, settings) {\n\t\t\treturn settings ?\n\n\t\t\t\t// Building a settings object\n\t\t\t\tajaxExtend(ajaxExtend(target, jQuery.ajaxSettings), settings) :\n\n\t\t\t\t// Extending ajaxSettings\n\t\t\t\tajaxExtend(jQuery.ajaxSettings, target);\n\t\t},\n\n\t\tajaxPrefilter: addToPrefiltersOrTransports(prefilters),\n\t\tajaxTransport: addToPrefiltersOrTransports(transports),\n\n\t\t// Main method\n\t\tajax: function (url, options) {\n\n\t\t\t// If url is an object, simulate pre-1.5 signature\n\t\t\tif (typeof url === \"object\") {\n\t\t\t\toptions = url;\n\t\t\t\turl = undefined;\n\t\t\t}\n\n\t\t\t// Force options to be an object\n\t\t\toptions = options || {};\n\n\t\t\tvar transport,\n\n\t\t\t\t// URL without anti-cache param\n\t\t\t\tcacheURL,\n\n\t\t\t\t// Response headers\n\t\t\t\tresponseHeadersString,\n\t\t\t\tresponseHeaders,\n\n\t\t\t\t// timeout handle\n\t\t\t\ttimeoutTimer,\n\n\t\t\t\t// Url cleanup var\n\t\t\t\turlAnchor,\n\n\t\t\t\t// Request state (becomes false upon send and true upon completion)\n\t\t\t\tcompleted,\n\n\t\t\t\t// To know if global events are to be dispatched\n\t\t\t\tfireGlobals,\n\n\t\t\t\t// Loop variable\n\t\t\t\ti,\n\n\t\t\t\t// uncached part of the url\n\t\t\t\tuncached,\n\n\t\t\t\t// Create the final options object\n\t\t\t\ts = jQuery.ajaxSetup({}, options),\n\n\t\t\t\t// Callbacks context\n\t\t\t\tcallbackContext = s.context || s,\n\n\t\t\t\t// Context for global events is callbackContext if it is a DOM node or jQuery collection\n\t\t\t\tglobalEventContext = s.context &&\n\t\t\t\t\t(callbackContext.nodeType || callbackContext.jquery) ?\n\t\t\t\t\tjQuery(callbackContext) :\n\t\t\t\t\tjQuery.event,\n\n\t\t\t\t// Deferreds\n\t\t\t\tdeferred = jQuery.Deferred(),\n\t\t\t\tcompleteDeferred = jQuery.Callbacks(\"once memory\"),\n\n\t\t\t\t// Status-dependent callbacks\n\t\t\t\tstatusCode = s.statusCode || {},\n\n\t\t\t\t// Headers (they are sent all at once)\n\t\t\t\trequestHeaders = {},\n\t\t\t\trequestHeadersNames = {},\n\n\t\t\t\t// Default abort message\n\t\t\t\tstrAbort = \"canceled\",\n\n\t\t\t\t// Fake xhr\n\t\t\t\tjqXHR = {\n\t\t\t\t\treadyState: 0,\n\n\t\t\t\t\t// Builds headers hashtable if needed\n\t\t\t\t\tgetResponseHeader: function (key) {\n\t\t\t\t\t\tvar match;\n\t\t\t\t\t\tif (completed) {\n\t\t\t\t\t\t\tif (!responseHeaders) {\n\t\t\t\t\t\t\t\tresponseHeaders = {};\n\t\t\t\t\t\t\t\twhile ((match = rheaders.exec(responseHeadersString))) {\n\t\t\t\t\t\t\t\t\tresponseHeaders[match[1].toLowerCase() + \" \"] =\n\t\t\t\t\t\t\t\t\t\t(responseHeaders[match[1].toLowerCase() + \" \"] || [])\n\t\t\t\t\t\t\t\t\t\t\t.concat(match[2]);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tmatch = responseHeaders[key.toLowerCase() + \" \"];\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn match == null ? null : match.join(\", \");\n\t\t\t\t\t},\n\n\t\t\t\t\t// Raw string\n\t\t\t\t\tgetAllResponseHeaders: function () {\n\t\t\t\t\t\treturn completed ? responseHeadersString : null;\n\t\t\t\t\t},\n\n\t\t\t\t\t// Caches the header\n\t\t\t\t\tsetRequestHeader: function (name, value) {\n\t\t\t\t\t\tif (completed == null) {\n\t\t\t\t\t\t\tname = requestHeadersNames[name.toLowerCase()] =\n\t\t\t\t\t\t\t\trequestHeadersNames[name.toLowerCase()] || name;\n\t\t\t\t\t\t\trequestHeaders[name] = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn this;\n\t\t\t\t\t},\n\n\t\t\t\t\t// Overrides response content-type header\n\t\t\t\t\toverrideMimeType: function (type) {\n\t\t\t\t\t\tif (completed == null) {\n\t\t\t\t\t\t\ts.mimeType = type;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn this;\n\t\t\t\t\t},\n\n\t\t\t\t\t// Status-dependent callbacks\n\t\t\t\t\tstatusCode: function (map) {\n\t\t\t\t\t\tvar code;\n\t\t\t\t\t\tif (map) {\n\t\t\t\t\t\t\tif (completed) {\n\n\t\t\t\t\t\t\t\t// Execute the appropriate callbacks\n\t\t\t\t\t\t\t\tjqXHR.always(map[jqXHR.status]);\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t// Lazy-add the new callbacks in a way that preserves old ones\n\t\t\t\t\t\t\t\tfor (code in map) {\n\t\t\t\t\t\t\t\t\tstatusCode[code] = [statusCode[code], map[code]];\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn this;\n\t\t\t\t\t},\n\n\t\t\t\t\t// Cancel the request\n\t\t\t\t\tabort: function (statusText) {\n\t\t\t\t\t\tvar finalText = statusText || strAbort;\n\t\t\t\t\t\tif (transport) {\n\t\t\t\t\t\t\ttransport.abort(finalText);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdone(0, finalText);\n\t\t\t\t\t\treturn this;\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t// Attach deferreds\n\t\t\tdeferred.promise(jqXHR);\n\n\t\t\t// Add protocol if not provided (prefilters might expect it)\n\t\t\t// Handle falsy url in the settings object (trac-10093: consistency with old signature)\n\t\t\t// We also use the url parameter if available\n\t\t\ts.url = ((url || s.url || location.href) + \"\")\n\t\t\t\t.replace(rprotocol, location.protocol + \"//\");\n\n\t\t\t// Alias method option to type as per ticket trac-12004\n\t\t\ts.type = options.method || options.type || s.method || s.type;\n\n\t\t\t// Extract dataTypes list\n\t\t\ts.dataTypes = (s.dataType || \"*\").toLowerCase().match(rnothtmlwhite) || [\"\"];\n\n\t\t\t// A cross-domain request is in order when the origin doesn't match the current origin.\n\t\t\tif (s.crossDomain == null) {\n\t\t\t\turlAnchor = document.createElement(\"a\");\n\n\t\t\t\t// Support: IE <=8 - 11, Edge 12 - 15\n\t\t\t\t// IE throws exception on accessing the href property if url is malformed,\n\t\t\t\t// e.g. http://example.com:80x/\n\t\t\t\ttry {\n\t\t\t\t\turlAnchor.href = s.url;\n\n\t\t\t\t\t// Support: IE <=8 - 11 only\n\t\t\t\t\t// Anchor's host property isn't correctly set when s.url is relative\n\t\t\t\t\turlAnchor.href = urlAnchor.href;\n\t\t\t\t\ts.crossDomain = originAnchor.protocol + \"//\" + originAnchor.host !==\n\t\t\t\t\t\turlAnchor.protocol + \"//\" + urlAnchor.host;\n\t\t\t\t} catch (e) {\n\n\t\t\t\t\t// If there is an error parsing the URL, assume it is crossDomain,\n\t\t\t\t\t// it can be rejected by the transport if it is invalid\n\t\t\t\t\ts.crossDomain = true;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Convert data if not already a string\n\t\t\tif (s.data && s.processData && typeof s.data !== \"string\") {\n\t\t\t\ts.data = jQuery.param(s.data, s.traditional);\n\t\t\t}\n\n\t\t\t// Apply prefilters\n\t\t\tinspectPrefiltersOrTransports(prefilters, s, options, jqXHR);\n\n\t\t\t// If request was aborted inside a prefilter, stop there\n\t\t\tif (completed) {\n\t\t\t\treturn jqXHR;\n\t\t\t}\n\n\t\t\t// We can fire global events as of now if asked to\n\t\t\t// Don't fire events if jQuery.event is undefined in an AMD-usage scenario (trac-15118)\n\t\t\tfireGlobals = jQuery.event && s.global;\n\n\t\t\t// Watch for a new set of requests\n\t\t\tif (fireGlobals && jQuery.active++ === 0) {\n\t\t\t\tjQuery.event.trigger(\"ajaxStart\");\n\t\t\t}\n\n\t\t\t// Uppercase the type\n\t\t\ts.type = s.type.toUpperCase();\n\n\t\t\t// Determine if request has content\n\t\t\ts.hasContent = !rnoContent.test(s.type);\n\n\t\t\t// Save the URL in case we're toying with the If-Modified-Since\n\t\t\t// and/or If-None-Match header later on\n\t\t\t// Remove hash to simplify url manipulation\n\t\t\tcacheURL = s.url.replace(rhash, \"\");\n\n\t\t\t// More options handling for requests with no content\n\t\t\tif (!s.hasContent) {\n\n\t\t\t\t// Remember the hash so we can put it back\n\t\t\t\tuncached = s.url.slice(cacheURL.length);\n\n\t\t\t\t// If data is available and should be processed, append data to url\n\t\t\t\tif (s.data && (s.processData || typeof s.data === \"string\")) {\n\t\t\t\t\tcacheURL += (rquery.test(cacheURL) ? \"&\" : \"?\") + s.data;\n\n\t\t\t\t\t// trac-9682: remove data so that it's not used in an eventual retry\n\t\t\t\t\tdelete s.data;\n\t\t\t\t}\n\n\t\t\t\t// Add or update anti-cache param if needed\n\t\t\t\tif (s.cache === false) {\n\t\t\t\t\tcacheURL = cacheURL.replace(rantiCache, \"$1\");\n\t\t\t\t\tuncached = (rquery.test(cacheURL) ? \"&\" : \"?\") + \"_=\" + (nonce.guid++) +\n\t\t\t\t\t\tuncached;\n\t\t\t\t}\n\n\t\t\t\t// Put hash and anti-cache on the URL that will be requested (gh-1732)\n\t\t\t\ts.url = cacheURL + uncached;\n\n\t\t\t\t// Change '%20' to '+' if this is encoded form body content (gh-2658)\n\t\t\t} else if (s.data && s.processData &&\n\t\t\t\t(s.contentType || \"\").indexOf(\"application/x-www-form-urlencoded\") === 0) {\n\t\t\t\ts.data = s.data.replace(r20, \"+\");\n\t\t\t}\n\n\t\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\t\tif (s.ifModified) {\n\t\t\t\tif (jQuery.lastModified[cacheURL]) {\n\t\t\t\t\tjqXHR.setRequestHeader(\"If-Modified-Since\", jQuery.lastModified[cacheURL]);\n\t\t\t\t}\n\t\t\t\tif (jQuery.etag[cacheURL]) {\n\t\t\t\t\tjqXHR.setRequestHeader(\"If-None-Match\", jQuery.etag[cacheURL]);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Set the correct header, if data is being sent\n\t\t\tif (s.data && s.hasContent && s.contentType !== false || options.contentType) {\n\t\t\t\tjqXHR.setRequestHeader(\"Content-Type\", s.contentType);\n\t\t\t}\n\n\t\t\t// Set the Accepts header for the server, depending on the dataType\n\t\t\tjqXHR.setRequestHeader(\n\t\t\t\t\"Accept\",\n\t\t\t\ts.dataTypes[0] && s.accepts[s.dataTypes[0]] ?\n\t\t\t\t\ts.accepts[s.dataTypes[0]] +\n\t\t\t\t\t(s.dataTypes[0] !== \"*\" ? \", \" + allTypes + \"; q=0.01\" : \"\") :\n\t\t\t\t\ts.accepts[\"*\"]\n\t\t\t);\n\n\t\t\t// Check for headers option\n\t\t\tfor (i in s.headers) {\n\t\t\t\tjqXHR.setRequestHeader(i, s.headers[i]);\n\t\t\t}\n\n\t\t\t// Allow custom headers/mimetypes and early abort\n\t\t\tif (s.beforeSend &&\n\t\t\t\t(s.beforeSend.call(callbackContext, jqXHR, s) === false || completed)) {\n\n\t\t\t\t// Abort if not done already and return\n\t\t\t\treturn jqXHR.abort();\n\t\t\t}\n\n\t\t\t// Aborting is no longer a cancellation\n\t\t\tstrAbort = \"abort\";\n\n\t\t\t// Install callbacks on deferreds\n\t\t\tcompleteDeferred.add(s.complete);\n\t\t\tjqXHR.done(s.success);\n\t\t\tjqXHR.fail(s.error);\n\n\t\t\t// Get transport\n\t\t\ttransport = inspectPrefiltersOrTransports(transports, s, options, jqXHR);\n\n\t\t\t// If no transport, we auto-abort\n\t\t\tif (!transport) {\n\t\t\t\tdone(-1, \"No Transport\");\n\t\t\t} else {\n\t\t\t\tjqXHR.readyState = 1;\n\n\t\t\t\t// Send global event\n\t\t\t\tif (fireGlobals) {\n\t\t\t\t\tglobalEventContext.trigger(\"ajaxSend\", [jqXHR, s]);\n\t\t\t\t}\n\n\t\t\t\t// If request was aborted inside ajaxSend, stop there\n\t\t\t\tif (completed) {\n\t\t\t\t\treturn jqXHR;\n\t\t\t\t}\n\n\t\t\t\t// Timeout\n\t\t\t\tif (s.async && s.timeout > 0) {\n\t\t\t\t\ttimeoutTimer = window.setTimeout(function () {\n\t\t\t\t\t\tjqXHR.abort(\"timeout\");\n\t\t\t\t\t}, s.timeout);\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tcompleted = false;\n\t\t\t\t\ttransport.send(requestHeaders, done);\n\t\t\t\t} catch (e) {\n\n\t\t\t\t\t// Rethrow post-completion exceptions\n\t\t\t\t\tif (completed) {\n\t\t\t\t\t\tthrow e;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Propagate others as results\n\t\t\t\t\tdone(-1, e);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Callback for when everything is done\n\t\t\tfunction done(status, nativeStatusText, responses, headers) {\n\t\t\t\tvar isSuccess, success, error, response, modified,\n\t\t\t\t\tstatusText = nativeStatusText;\n\n\t\t\t\t// Ignore repeat invocations\n\t\t\t\tif (completed) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tcompleted = true;\n\n\t\t\t\t// Clear timeout if it exists\n\t\t\t\tif (timeoutTimer) {\n\t\t\t\t\twindow.clearTimeout(timeoutTimer);\n\t\t\t\t}\n\n\t\t\t\t// Dereference transport for early garbage collection\n\t\t\t\t// (no matter how long the jqXHR object will be used)\n\t\t\t\ttransport = undefined;\n\n\t\t\t\t// Cache response headers\n\t\t\t\tresponseHeadersString = headers || \"\";\n\n\t\t\t\t// Set readyState\n\t\t\t\tjqXHR.readyState = status > 0 ? 4 : 0;\n\n\t\t\t\t// Determine if successful\n\t\t\t\tisSuccess = status >= 200 && status < 300 || status === 304;\n\n\t\t\t\t// Get response data\n\t\t\t\tif (responses) {\n\t\t\t\t\tresponse = ajaxHandleResponses(s, jqXHR, responses);\n\t\t\t\t}\n\n\t\t\t\t// Use a noop converter for missing script but not if jsonp\n\t\t\t\tif (!isSuccess &&\n\t\t\t\t\tjQuery.inArray(\"script\", s.dataTypes) > -1 &&\n\t\t\t\t\tjQuery.inArray(\"json\", s.dataTypes) < 0) {\n\t\t\t\t\ts.converters[\"text script\"] = function () { };\n\t\t\t\t}\n\n\t\t\t\t// Convert no matter what (that way responseXXX fields are always set)\n\t\t\t\tresponse = ajaxConvert(s, response, jqXHR, isSuccess);\n\n\t\t\t\t// If successful, handle type chaining\n\t\t\t\tif (isSuccess) {\n\n\t\t\t\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\t\t\t\tif (s.ifModified) {\n\t\t\t\t\t\tmodified = jqXHR.getResponseHeader(\"Last-Modified\");\n\t\t\t\t\t\tif (modified) {\n\t\t\t\t\t\t\tjQuery.lastModified[cacheURL] = modified;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmodified = jqXHR.getResponseHeader(\"etag\");\n\t\t\t\t\t\tif (modified) {\n\t\t\t\t\t\t\tjQuery.etag[cacheURL] = modified;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// if no content\n\t\t\t\t\tif (status === 204 || s.type === \"HEAD\") {\n\t\t\t\t\t\tstatusText = \"nocontent\";\n\n\t\t\t\t\t\t// if not modified\n\t\t\t\t\t} else if (status === 304) {\n\t\t\t\t\t\tstatusText = \"notmodified\";\n\n\t\t\t\t\t\t// If we have data, let's convert it\n\t\t\t\t\t} else {\n\t\t\t\t\t\tstatusText = response.state;\n\t\t\t\t\t\tsuccess = response.data;\n\t\t\t\t\t\terror = response.error;\n\t\t\t\t\t\tisSuccess = !error;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\n\t\t\t\t\t// Extract error from statusText and normalize for non-aborts\n\t\t\t\t\terror = statusText;\n\t\t\t\t\tif (status || !statusText) {\n\t\t\t\t\t\tstatusText = \"error\";\n\t\t\t\t\t\tif (status < 0) {\n\t\t\t\t\t\t\tstatus = 0;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Set data for the fake xhr object\n\t\t\t\tjqXHR.status = status;\n\t\t\t\tjqXHR.statusText = (nativeStatusText || statusText) + \"\";\n\n\t\t\t\t// Success/Error\n\t\t\t\tif (isSuccess) {\n\t\t\t\t\tdeferred.resolveWith(callbackContext, [success, statusText, jqXHR]);\n\t\t\t\t} else {\n\t\t\t\t\tdeferred.rejectWith(callbackContext, [jqXHR, statusText, error]);\n\t\t\t\t}\n\n\t\t\t\t// Status-dependent callbacks\n\t\t\t\tjqXHR.statusCode(statusCode);\n\t\t\t\tstatusCode = undefined;\n\n\t\t\t\tif (fireGlobals) {\n\t\t\t\t\tglobalEventContext.trigger(isSuccess ? \"ajaxSuccess\" : \"ajaxError\",\n\t\t\t\t\t\t[jqXHR, s, isSuccess ? success : error]);\n\t\t\t\t}\n\n\t\t\t\t// Complete\n\t\t\t\tcompleteDeferred.fireWith(callbackContext, [jqXHR, statusText]);\n\n\t\t\t\tif (fireGlobals) {\n\t\t\t\t\tglobalEventContext.trigger(\"ajaxComplete\", [jqXHR, s]);\n\n\t\t\t\t\t// Handle the global AJAX counter\n\t\t\t\t\tif (!(--jQuery.active)) {\n\t\t\t\t\t\tjQuery.event.trigger(\"ajaxStop\");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn jqXHR;\n\t\t},\n\n\t\tgetJSON: function (url, data, callback) {\n\t\t\treturn jQuery.get(url, data, callback, \"json\");\n\t\t},\n\n\t\tgetScript: function (url, callback) {\n\t\t\treturn jQuery.get(url, undefined, callback, \"script\");\n\t\t}\n\t});\n\n\tjQuery.each([\"get\", \"post\"], function (_i, method) {\n\t\tjQuery[method] = function (url, data, callback, type) {\n\n\t\t\t// Shift arguments if data argument was omitted\n\t\t\tif (isFunction(data)) {\n\t\t\t\ttype = type || callback;\n\t\t\t\tcallback = data;\n\t\t\t\tdata = undefined;\n\t\t\t}\n\n\t\t\t// The url can be an options object (which then must have .url)\n\t\t\treturn jQuery.ajax(jQuery.extend({\n\t\t\t\turl: url,\n\t\t\t\ttype: method,\n\t\t\t\tdataType: type,\n\t\t\t\tdata: data,\n\t\t\t\tsuccess: callback\n\t\t\t}, jQuery.isPlainObject(url) && url));\n\t\t};\n\t});\n\n\tjQuery.ajaxPrefilter(function (s) {\n\t\tvar i;\n\t\tfor (i in s.headers) {\n\t\t\tif (i.toLowerCase() === \"content-type\") {\n\t\t\t\ts.contentType = s.headers[i] || \"\";\n\t\t\t}\n\t\t}\n\t});\n\n\n\tjQuery._evalUrl = function (url, options, doc) {\n\t\treturn jQuery.ajax({\n\t\t\turl: url,\n\n\t\t\t// Make this explicit, since user can override this through ajaxSetup (trac-11264)\n\t\t\ttype: \"GET\",\n\t\t\tdataType: \"script\",\n\t\t\tcache: true,\n\t\t\tasync: false,\n\t\t\tglobal: false,\n\n\t\t\t// Only evaluate the response if it is successful (gh-4126)\n\t\t\t// dataFilter is not invoked for failure responses, so using it instead\n\t\t\t// of the default converter is kludgy but it works.\n\t\t\tconverters: {\n\t\t\t\t\"text script\": function () { }\n\t\t\t},\n\t\t\tdataFilter: function (response) {\n\t\t\t\tjQuery.globalEval(response, options, doc);\n\t\t\t}\n\t\t});\n\t};\n\n\n\tjQuery.fn.extend({\n\t\twrapAll: function (html) {\n\t\t\tvar wrap;\n\n\t\t\tif (this[0]) {\n\t\t\t\tif (isFunction(html)) {\n\t\t\t\t\thtml = html.call(this[0]);\n\t\t\t\t}\n\n\t\t\t\t// The elements to wrap the target around\n\t\t\t\twrap = jQuery(html, this[0].ownerDocument).eq(0).clone(true);\n\n\t\t\t\tif (this[0].parentNode) {\n\t\t\t\t\twrap.insertBefore(this[0]);\n\t\t\t\t}\n\n\t\t\t\twrap.map(function () {\n\t\t\t\t\tvar elem = this;\n\n\t\t\t\t\twhile (elem.firstElementChild) {\n\t\t\t\t\t\telem = elem.firstElementChild;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn elem;\n\t\t\t\t}).append(this);\n\t\t\t}\n\n\t\t\treturn this;\n\t\t},\n\n\t\twrapInner: function (html) {\n\t\t\tif (isFunction(html)) {\n\t\t\t\treturn this.each(function (i) {\n\t\t\t\t\tjQuery(this).wrapInner(html.call(this, i));\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn this.each(function () {\n\t\t\t\tvar self = jQuery(this),\n\t\t\t\t\tcontents = self.contents();\n\n\t\t\t\tif (contents.length) {\n\t\t\t\t\tcontents.wrapAll(html);\n\n\t\t\t\t} else {\n\t\t\t\t\tself.append(html);\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\twrap: function (html) {\n\t\t\tvar htmlIsFunction = isFunction(html);\n\n\t\t\treturn this.each(function (i) {\n\t\t\t\tjQuery(this).wrapAll(htmlIsFunction ? html.call(this, i) : html);\n\t\t\t});\n\t\t},\n\n\t\tunwrap: function (selector) {\n\t\t\tthis.parent(selector).not(\"body\").each(function () {\n\t\t\t\tjQuery(this).replaceWith(this.childNodes);\n\t\t\t});\n\t\t\treturn this;\n\t\t}\n\t});\n\n\n\tjQuery.expr.pseudos.hidden = function (elem) {\n\t\treturn !jQuery.expr.pseudos.visible(elem);\n\t};\n\tjQuery.expr.pseudos.visible = function (elem) {\n\t\treturn !!(elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length);\n\t};\n\n\n\n\n\tjQuery.ajaxSettings.xhr = function () {\n\t\ttry {\n\t\t\treturn new window.XMLHttpRequest();\n\t\t} catch (e) { }\n\t};\n\n\tvar xhrSuccessStatus = {\n\n\t\t// File protocol always yields status code 0, assume 200\n\t\t0: 200,\n\n\t\t// Support: IE <=9 only\n\t\t// trac-1450: sometimes IE returns 1223 when it should be 204\n\t\t1223: 204\n\t},\n\t\txhrSupported = jQuery.ajaxSettings.xhr();\n\n\tsupport.cors = !!xhrSupported && (\"withCredentials\" in xhrSupported);\n\tsupport.ajax = xhrSupported = !!xhrSupported;\n\n\tjQuery.ajaxTransport(function (options) {\n\t\tvar callback, errorCallback;\n\n\t\t// Cross domain only allowed if supported through XMLHttpRequest\n\t\tif (support.cors || xhrSupported && !options.crossDomain) {\n\t\t\treturn {\n\t\t\t\tsend: function (headers, complete) {\n\t\t\t\t\tvar i,\n\t\t\t\t\t\txhr = options.xhr();\n\n\t\t\t\t\txhr.open(\n\t\t\t\t\t\toptions.type,\n\t\t\t\t\t\toptions.url,\n\t\t\t\t\t\toptions.async,\n\t\t\t\t\t\toptions.username,\n\t\t\t\t\t\toptions.password\n\t\t\t\t\t);\n\n\t\t\t\t\t// Apply custom fields if provided\n\t\t\t\t\tif (options.xhrFields) {\n\t\t\t\t\t\tfor (i in options.xhrFields) {\n\t\t\t\t\t\t\txhr[i] = options.xhrFields[i];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Override mime type if needed\n\t\t\t\t\tif (options.mimeType && xhr.overrideMimeType) {\n\t\t\t\t\t\txhr.overrideMimeType(options.mimeType);\n\t\t\t\t\t}\n\n\t\t\t\t\t// X-Requested-With header\n\t\t\t\t\t// For cross-domain requests, seeing as conditions for a preflight are\n\t\t\t\t\t// akin to a jigsaw puzzle, we simply never set it to be sure.\n\t\t\t\t\t// (it can always be set on a per-request basis or even using ajaxSetup)\n\t\t\t\t\t// For same-domain requests, won't change header if already provided.\n\t\t\t\t\tif (!options.crossDomain && !headers[\"X-Requested-With\"]) {\n\t\t\t\t\t\theaders[\"X-Requested-With\"] = \"XMLHttpRequest\";\n\t\t\t\t\t}\n\n\t\t\t\t\t// Set headers\n\t\t\t\t\tfor (i in headers) {\n\t\t\t\t\t\txhr.setRequestHeader(i, headers[i]);\n\t\t\t\t\t}\n\n\t\t\t\t\t// Callback\n\t\t\t\t\tcallback = function (type) {\n\t\t\t\t\t\treturn function () {\n\t\t\t\t\t\t\tif (callback) {\n\t\t\t\t\t\t\t\tcallback = errorCallback = xhr.onload =\n\t\t\t\t\t\t\t\t\txhr.onerror = xhr.onabort = xhr.ontimeout =\n\t\t\t\t\t\t\t\t\txhr.onreadystatechange = null;\n\n\t\t\t\t\t\t\t\tif (type === \"abort\") {\n\t\t\t\t\t\t\t\t\txhr.abort();\n\t\t\t\t\t\t\t\t} else if (type === \"error\") {\n\n\t\t\t\t\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t\t\t\t\t// On a manual native abort, IE9 throws\n\t\t\t\t\t\t\t\t\t// errors on any property access that is not readyState\n\t\t\t\t\t\t\t\t\tif (typeof xhr.status !== \"number\") {\n\t\t\t\t\t\t\t\t\t\tcomplete(0, \"error\");\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tcomplete(\n\n\t\t\t\t\t\t\t\t\t\t\t// File: protocol always yields status 0; see trac-8605, trac-14207\n\t\t\t\t\t\t\t\t\t\t\txhr.status,\n\t\t\t\t\t\t\t\t\t\t\txhr.statusText\n\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tcomplete(\n\t\t\t\t\t\t\t\t\t\txhrSuccessStatus[xhr.status] || xhr.status,\n\t\t\t\t\t\t\t\t\t\txhr.statusText,\n\n\t\t\t\t\t\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t\t\t\t\t\t// IE9 has no XHR2 but throws on binary (trac-11426)\n\t\t\t\t\t\t\t\t\t\t// For XHR2 non-text, let the caller handle it (gh-2498)\n\t\t\t\t\t\t\t\t\t\t(xhr.responseType || \"text\") !== \"text\" ||\n\t\t\t\t\t\t\t\t\t\t\ttypeof xhr.responseText !== \"string\" ?\n\t\t\t\t\t\t\t\t\t\t\t{ binary: xhr.response } :\n\t\t\t\t\t\t\t\t\t\t\t{ text: xhr.responseText },\n\t\t\t\t\t\t\t\t\t\txhr.getAllResponseHeaders()\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\t\t\t\t\t};\n\n\t\t\t\t\t// Listen to events\n\t\t\t\t\txhr.onload = callback();\n\t\t\t\t\terrorCallback = xhr.onerror = xhr.ontimeout = callback(\"error\");\n\n\t\t\t\t\t// Support: IE 9 only\n\t\t\t\t\t// Use onreadystatechange to replace onabort\n\t\t\t\t\t// to handle uncaught aborts\n\t\t\t\t\tif (xhr.onabort !== undefined) {\n\t\t\t\t\t\txhr.onabort = errorCallback;\n\t\t\t\t\t} else {\n\t\t\t\t\t\txhr.onreadystatechange = function () {\n\n\t\t\t\t\t\t\t// Check readyState before timeout as it changes\n\t\t\t\t\t\t\tif (xhr.readyState === 4) {\n\n\t\t\t\t\t\t\t\t// Allow onerror to be called first,\n\t\t\t\t\t\t\t\t// but that will not handle a native abort\n\t\t\t\t\t\t\t\t// Also, save errorCallback to a variable\n\t\t\t\t\t\t\t\t// as xhr.onerror cannot be accessed\n\t\t\t\t\t\t\t\twindow.setTimeout(function () {\n\t\t\t\t\t\t\t\t\tif (callback) {\n\t\t\t\t\t\t\t\t\t\terrorCallback();\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\t// Create the abort callback\n\t\t\t\t\tcallback = callback(\"abort\");\n\n\t\t\t\t\ttry {\n\n\t\t\t\t\t\t// Do send the request (this may raise an exception)\n\t\t\t\t\t\txhr.send(options.hasContent && options.data || null);\n\t\t\t\t\t} catch (e) {\n\n\t\t\t\t\t\t// trac-14683: Only rethrow if this hasn't been notified as an error yet\n\t\t\t\t\t\tif (callback) {\n\t\t\t\t\t\t\tthrow e;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\t\tabort: function () {\n\t\t\t\t\tif (callback) {\n\t\t\t\t\t\tcallback();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t});\n\n\n\n\n\t// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432)\n\tjQuery.ajaxPrefilter(function (s) {\n\t\tif (s.crossDomain) {\n\t\t\ts.contents.script = false;\n\t\t}\n\t});\n\n\t// Install script dataType\n\tjQuery.ajaxSetup({\n\t\taccepts: {\n\t\t\tscript: \"text/javascript, application/javascript, \" +\n\t\t\t\t\"application/ecmascript, application/x-ecmascript\"\n\t\t},\n\t\tcontents: {\n\t\t\tscript: /\\b(?:java|ecma)script\\b/\n\t\t},\n\t\tconverters: {\n\t\t\t\"text script\": function (text) {\n\t\t\t\tjQuery.globalEval(text);\n\t\t\t\treturn text;\n\t\t\t}\n\t\t}\n\t});\n\n\t// Handle cache's special case and crossDomain\n\tjQuery.ajaxPrefilter(\"script\", function (s) {\n\t\tif (s.cache === undefined) {\n\t\t\ts.cache = false;\n\t\t}\n\t\tif (s.crossDomain) {\n\t\t\ts.type = \"GET\";\n\t\t}\n\t});\n\n\t// Bind script tag hack transport\n\tjQuery.ajaxTransport(\"script\", function (s) {\n\n\t\t// This transport only deals with cross domain or forced-by-attrs requests\n\t\tif (s.crossDomain || s.scriptAttrs) {\n\t\t\tvar script, callback;\n\t\t\treturn {\n\t\t\t\tsend: function (_, complete) {\n\t\t\t\t\tscript = jQuery(\"<script>\")\n\t\t\t\t\t\t.attr(s.scriptAttrs || {})\n\t\t\t\t\t\t.prop({ charset: s.scriptCharset, src: s.url })\n\t\t\t\t\t\t.on(\"load error\", callback = function (evt) {\n\t\t\t\t\t\t\tscript.remove();\n\t\t\t\t\t\t\tcallback = null;\n\t\t\t\t\t\t\tif (evt) {\n\t\t\t\t\t\t\t\tcomplete(evt.type === \"error\" ? 404 : 200, evt.type);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\n\t\t\t\t\t// Use native DOM manipulation to avoid our domManip AJAX trickery\n\t\t\t\t\tdocument.head.appendChild(script[0]);\n\t\t\t\t},\n\t\t\t\tabort: function () {\n\t\t\t\t\tif (callback) {\n\t\t\t\t\t\tcallback();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t});\n\n\n\n\n\tvar oldCallbacks = [],\n\t\trjsonp = /(=)\\?(?=&|$)|\\?\\?/;\n\n\t// Default jsonp settings\n\tjQuery.ajaxSetup({\n\t\tjsonp: \"callback\",\n\t\tjsonpCallback: function () {\n\t\t\tvar callback = oldCallbacks.pop() || (jQuery.expando + \"_\" + (nonce.guid++));\n\t\t\tthis[callback] = true;\n\t\t\treturn callback;\n\t\t}\n\t});\n\n\t// Detect, normalize options and install callbacks for jsonp requests\n\tjQuery.ajaxPrefilter(\"json jsonp\", function (s, originalSettings, jqXHR) {\n\n\t\tvar callbackName, overwritten, responseContainer,\n\t\t\tjsonProp = s.jsonp !== false && (rjsonp.test(s.url) ?\n\t\t\t\t\"url\" :\n\t\t\t\ttypeof s.data === \"string\" &&\n\t\t\t\t(s.contentType || \"\")\n\t\t\t\t\t.indexOf(\"application/x-www-form-urlencoded\") === 0 &&\n\t\t\t\trjsonp.test(s.data) && \"data\"\n\t\t\t);\n\n\t\t// Handle iff the expected data type is \"jsonp\" or we have a parameter to set\n\t\tif (jsonProp || s.dataTypes[0] === \"jsonp\") {\n\n\t\t\t// Get callback name, remembering preexisting value associated with it\n\t\t\tcallbackName = s.jsonpCallback = isFunction(s.jsonpCallback) ?\n\t\t\t\ts.jsonpCallback() :\n\t\t\t\ts.jsonpCallback;\n\n\t\t\t// Insert callback into url or form data\n\t\t\tif (jsonProp) {\n\t\t\t\ts[jsonProp] = s[jsonProp].replace(rjsonp, \"$1\" + callbackName);\n\t\t\t} else if (s.jsonp !== false) {\n\t\t\t\ts.url += (rquery.test(s.url) ? \"&\" : \"?\") + s.jsonp + \"=\" + callbackName;\n\t\t\t}\n\n\t\t\t// Use data converter to retrieve json after script execution\n\t\t\ts.converters[\"script json\"] = function () {\n\t\t\t\tif (!responseContainer) {\n\t\t\t\t\tjQuery.error(callbackName + \" was not called\");\n\t\t\t\t}\n\t\t\t\treturn responseContainer[0];\n\t\t\t};\n\n\t\t\t// Force json dataType\n\t\t\ts.dataTypes[0] = \"json\";\n\n\t\t\t// Install callback\n\t\t\toverwritten = window[callbackName];\n\t\t\twindow[callbackName] = function () {\n\t\t\t\tresponseContainer = arguments;\n\t\t\t};\n\n\t\t\t// Clean-up function (fires after converters)\n\t\t\tjqXHR.always(function () {\n\n\t\t\t\t// If previous value didn't exist - remove it\n\t\t\t\tif (overwritten === undefined) {\n\t\t\t\t\tjQuery(window).removeProp(callbackName);\n\n\t\t\t\t\t// Otherwise restore preexisting value\n\t\t\t\t} else {\n\t\t\t\t\twindow[callbackName] = overwritten;\n\t\t\t\t}\n\n\t\t\t\t// Save back as free\n\t\t\t\tif (s[callbackName]) {\n\n\t\t\t\t\t// Make sure that re-using the options doesn't screw things around\n\t\t\t\t\ts.jsonpCallback = originalSettings.jsonpCallback;\n\n\t\t\t\t\t// Save the callback name for future use\n\t\t\t\t\toldCallbacks.push(callbackName);\n\t\t\t\t}\n\n\t\t\t\t// Call if it was a function and we have a response\n\t\t\t\tif (responseContainer && isFunction(overwritten)) {\n\t\t\t\t\toverwritten(responseContainer[0]);\n\t\t\t\t}\n\n\t\t\t\tresponseContainer = overwritten = undefined;\n\t\t\t});\n\n\t\t\t// Delegate to script\n\t\t\treturn \"script\";\n\t\t}\n\t});\n\n\n\n\n\t// Support: Safari 8 only\n\t// In Safari 8 documents created via document.implementation.createHTMLDocument\n\t// collapse sibling forms: the second one becomes a child of the first one.\n\t// Because of that, this security measure has to be disabled in Safari 8.\n\t// https://bugs.webkit.org/show_bug.cgi?id=137337\n\tsupport.createHTMLDocument = (function () {\n\t\tvar body = document.implementation.createHTMLDocument(\"\").body;\n\t\tbody.innerHTML = \"<form></form><form></form>\";\n\t\treturn body.childNodes.length === 2;\n\t})();\n\n\n\t// Argument \"data\" should be string of html\n\t// context (optional): If specified, the fragment will be created in this context,\n\t// defaults to document\n\t// keepScripts (optional): If true, will include scripts passed in the html string\n\tjQuery.parseHTML = function (data, context, keepScripts) {\n\t\tif (typeof data !== \"string\") {\n\t\t\treturn [];\n\t\t}\n\t\tif (typeof context === \"boolean\") {\n\t\t\tkeepScripts = context;\n\t\t\tcontext = false;\n\t\t}\n\n\t\tvar base, parsed, scripts;\n\n\t\tif (!context) {\n\n\t\t\t// Stop scripts or inline event handlers from being executed immediately\n\t\t\t// by using document.implementation\n\t\t\tif (support.createHTMLDocument) {\n\t\t\t\tcontext = document.implementation.createHTMLDocument(\"\");\n\n\t\t\t\t// Set the base href for the created document\n\t\t\t\t// so any parsed elements with URLs\n\t\t\t\t// are based on the document's URL (gh-2965)\n\t\t\t\tbase = context.createElement(\"base\");\n\t\t\t\tbase.href = document.location.href;\n\t\t\t\tcontext.head.appendChild(base);\n\t\t\t} else {\n\t\t\t\tcontext = document;\n\t\t\t}\n\t\t}\n\n\t\tparsed = rsingleTag.exec(data);\n\t\tscripts = !keepScripts && [];\n\n\t\t// Single tag\n\t\tif (parsed) {\n\t\t\treturn [context.createElement(parsed[1])];\n\t\t}\n\n\t\tparsed = buildFragment([data], context, scripts);\n\n\t\tif (scripts && scripts.length) {\n\t\t\tjQuery(scripts).remove();\n\t\t}\n\n\t\treturn jQuery.merge([], parsed.childNodes);\n\t};\n\n\n\t/**\n\t * Load a url into a page\n\t */\n\tjQuery.fn.load = function (url, params, callback) {\n\t\tvar selector, type, response,\n\t\t\tself = this,\n\t\t\toff = url.indexOf(\" \");\n\n\t\tif (off > -1) {\n\t\t\tselector = stripAndCollapse(url.slice(off));\n\t\t\turl = url.slice(0, off);\n\t\t}\n\n\t\t// If it's a function\n\t\tif (isFunction(params)) {\n\n\t\t\t// We assume that it's the callback\n\t\t\tcallback = params;\n\t\t\tparams = undefined;\n\n\t\t\t// Otherwise, build a param string\n\t\t} else if (params && typeof params === \"object\") {\n\t\t\ttype = \"POST\";\n\t\t}\n\n\t\t// If we have elements to modify, make the request\n\t\tif (self.length > 0) {\n\t\t\tjQuery.ajax({\n\t\t\t\turl: url,\n\n\t\t\t\t// If \"type\" variable is undefined, then \"GET\" method will be used.\n\t\t\t\t// Make value of this field explicit since\n\t\t\t\t// user can override it through ajaxSetup method\n\t\t\t\ttype: type || \"GET\",\n\t\t\t\tdataType: \"html\",\n\t\t\t\tdata: params\n\t\t\t}).done(function (responseText) {\n\n\t\t\t\t// Save response for use in complete callback\n\t\t\t\tresponse = arguments;\n\n\t\t\t\tself.html(selector ?\n\n\t\t\t\t\t// If a selector was specified, locate the right elements in a dummy div\n\t\t\t\t\t// Exclude scripts to avoid IE 'Permission Denied' errors\n\t\t\t\t\tjQuery(\"<div>\").append(jQuery.parseHTML(responseText)).find(selector) :\n\n\t\t\t\t\t// Otherwise use the full result\n\t\t\t\t\tresponseText);\n\n\t\t\t\t// If the request succeeds, this function gets \"data\", \"status\", \"jqXHR\"\n\t\t\t\t// but they are ignored because response was set above.\n\t\t\t\t// If it fails, this function gets \"jqXHR\", \"status\", \"error\"\n\t\t\t}).always(callback && function (jqXHR, status) {\n\t\t\t\tself.each(function () {\n\t\t\t\t\tcallback.apply(this, response || [jqXHR.responseText, status, jqXHR]);\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\n\t\treturn this;\n\t};\n\n\n\n\n\tjQuery.expr.pseudos.animated = function (elem) {\n\t\treturn jQuery.grep(jQuery.timers, function (fn) {\n\t\t\treturn elem === fn.elem;\n\t\t}).length;\n\t};\n\n\n\n\n\tjQuery.offset = {\n\t\tsetOffset: function (elem, options, i) {\n\t\t\tvar curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition,\n\t\t\t\tposition = jQuery.css(elem, \"position\"),\n\t\t\t\tcurElem = jQuery(elem),\n\t\t\t\tprops = {};\n\n\t\t\t// Set position first, in-case top/left are set even on static elem\n\t\t\tif (position === \"static\") {\n\t\t\t\telem.style.position = \"relative\";\n\t\t\t}\n\n\t\t\tcurOffset = curElem.offset();\n\t\t\tcurCSSTop = jQuery.css(elem, \"top\");\n\t\t\tcurCSSLeft = jQuery.css(elem, \"left\");\n\t\t\tcalculatePosition = (position === \"absolute\" || position === \"fixed\") &&\n\t\t\t\t(curCSSTop + curCSSLeft).indexOf(\"auto\") > -1;\n\n\t\t\t// Need to be able to calculate position if either\n\t\t\t// top or left is auto and position is either absolute or fixed\n\t\t\tif (calculatePosition) {\n\t\t\t\tcurPosition = curElem.position();\n\t\t\t\tcurTop = curPosition.top;\n\t\t\t\tcurLeft = curPosition.left;\n\n\t\t\t} else {\n\t\t\t\tcurTop = parseFloat(curCSSTop) || 0;\n\t\t\t\tcurLeft = parseFloat(curCSSLeft) || 0;\n\t\t\t}\n\n\t\t\tif (isFunction(options)) {\n\n\t\t\t\t// Use jQuery.extend here to allow modification of coordinates argument (gh-1848)\n\t\t\t\toptions = options.call(elem, i, jQuery.extend({}, curOffset));\n\t\t\t}\n\n\t\t\tif (options.top != null) {\n\t\t\t\tprops.top = (options.top - curOffset.top) + curTop;\n\t\t\t}\n\t\t\tif (options.left != null) {\n\t\t\t\tprops.left = (options.left - curOffset.left) + curLeft;\n\t\t\t}\n\n\t\t\tif (\"using\" in options) {\n\t\t\t\toptions.using.call(elem, props);\n\n\t\t\t} else {\n\t\t\t\tcurElem.css(props);\n\t\t\t}\n\t\t}\n\t};\n\n\tjQuery.fn.extend({\n\n\t\t// offset() relates an element's border box to the document origin\n\t\toffset: function (options) {\n\n\t\t\t// Preserve chaining for setter\n\t\t\tif (arguments.length) {\n\t\t\t\treturn options === undefined ?\n\t\t\t\t\tthis :\n\t\t\t\t\tthis.each(function (i) {\n\t\t\t\t\t\tjQuery.offset.setOffset(this, options, i);\n\t\t\t\t\t});\n\t\t\t}\n\n\t\t\tvar rect, win,\n\t\t\t\telem = this[0];\n\n\t\t\tif (!elem) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Return zeros for disconnected and hidden (display: none) elements (gh-2310)\n\t\t\t// Support: IE <=11 only\n\t\t\t// Running getBoundingClientRect on a\n\t\t\t// disconnected node in IE throws an error\n\t\t\tif (!elem.getClientRects().length) {\n\t\t\t\treturn { top: 0, left: 0 };\n\t\t\t}\n\n\t\t\t// Get document-relative position by adding viewport scroll to viewport-relative gBCR\n\t\t\trect = elem.getBoundingClientRect();\n\t\t\twin = elem.ownerDocument.defaultView;\n\t\t\treturn {\n\t\t\t\ttop: rect.top + win.pageYOffset,\n\t\t\t\tleft: rect.left + win.pageXOffset\n\t\t\t};\n\t\t},\n\n\t\t// position() relates an element's margin box to its offset parent's padding box\n\t\t// This corresponds to the behavior of CSS absolute positioning\n\t\tposition: function () {\n\t\t\tif (!this[0]) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar offsetParent, offset, doc,\n\t\t\t\telem = this[0],\n\t\t\t\tparentOffset = { top: 0, left: 0 };\n\n\t\t\t// position:fixed elements are offset from the viewport, which itself always has zero offset\n\t\t\tif (jQuery.css(elem, \"position\") === \"fixed\") {\n\n\t\t\t\t// Assume position:fixed implies availability of getBoundingClientRect\n\t\t\t\toffset = elem.getBoundingClientRect();\n\n\t\t\t} else {\n\t\t\t\toffset = this.offset();\n\n\t\t\t\t// Account for the *real* offset parent, which can be the document or its root element\n\t\t\t\t// when a statically positioned element is identified\n\t\t\t\tdoc = elem.ownerDocument;\n\t\t\t\toffsetParent = elem.offsetParent || doc.documentElement;\n\t\t\t\twhile (offsetParent &&\n\t\t\t\t\t(offsetParent === doc.body || offsetParent === doc.documentElement) &&\n\t\t\t\t\tjQuery.css(offsetParent, \"position\") === \"static\") {\n\n\t\t\t\t\toffsetParent = offsetParent.parentNode;\n\t\t\t\t}\n\t\t\t\tif (offsetParent && offsetParent !== elem && offsetParent.nodeType === 1) {\n\n\t\t\t\t\t// Incorporate borders into its offset, since they are outside its content origin\n\t\t\t\t\tparentOffset = jQuery(offsetParent).offset();\n\t\t\t\t\tparentOffset.top += jQuery.css(offsetParent, \"borderTopWidth\", true);\n\t\t\t\t\tparentOffset.left += jQuery.css(offsetParent, \"borderLeftWidth\", true);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Subtract parent offsets and element margins\n\t\t\treturn {\n\t\t\t\ttop: offset.top - parentOffset.top - jQuery.css(elem, \"marginTop\", true),\n\t\t\t\tleft: offset.left - parentOffset.left - jQuery.css(elem, \"marginLeft\", true)\n\t\t\t};\n\t\t},\n\n\t\t// This method will return documentElement in the following cases:\n\t\t// 1) For the element inside the iframe without offsetParent, this method will return\n\t\t//    documentElement of the parent window\n\t\t// 2) For the hidden or detached element\n\t\t// 3) For body or html element, i.e. in case of the html node - it will return itself\n\t\t//\n\t\t// but those exceptions were never presented as a real life use-cases\n\t\t// and might be considered as more preferable results.\n\t\t//\n\t\t// This logic, however, is not guaranteed and can change at any point in the future\n\t\toffsetParent: function () {\n\t\t\treturn this.map(function () {\n\t\t\t\tvar offsetParent = this.offsetParent;\n\n\t\t\t\twhile (offsetParent && jQuery.css(offsetParent, \"position\") === \"static\") {\n\t\t\t\t\toffsetParent = offsetParent.offsetParent;\n\t\t\t\t}\n\n\t\t\t\treturn offsetParent || documentElement;\n\t\t\t});\n\t\t}\n\t});\n\n\t// Create scrollLeft and scrollTop methods\n\tjQuery.each({ scrollLeft: \"pageXOffset\", scrollTop: \"pageYOffset\" }, function (method, prop) {\n\t\tvar top = \"pageYOffset\" === prop;\n\n\t\tjQuery.fn[method] = function (val) {\n\t\t\treturn access(this, function (elem, method, val) {\n\n\t\t\t\t// Coalesce documents and windows\n\t\t\t\tvar win;\n\t\t\t\tif (isWindow(elem)) {\n\t\t\t\t\twin = elem;\n\t\t\t\t} else if (elem.nodeType === 9) {\n\t\t\t\t\twin = elem.defaultView;\n\t\t\t\t}\n\n\t\t\t\tif (val === undefined) {\n\t\t\t\t\treturn win ? win[prop] : elem[method];\n\t\t\t\t}\n\n\t\t\t\tif (win) {\n\t\t\t\t\twin.scrollTo(\n\t\t\t\t\t\t!top ? val : win.pageXOffset,\n\t\t\t\t\t\ttop ? val : win.pageYOffset\n\t\t\t\t\t);\n\n\t\t\t\t} else {\n\t\t\t\t\telem[method] = val;\n\t\t\t\t}\n\t\t\t}, method, val, arguments.length);\n\t\t};\n\t});\n\n\t// Support: Safari <=7 - 9.1, Chrome <=37 - 49\n\t// Add the top/left cssHooks using jQuery.fn.position\n\t// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084\n\t// Blink bug: https://bugs.chromium.org/p/chromium/issues/detail?id=589347\n\t// getComputedStyle returns percent when specified for top/left/bottom/right;\n\t// rather than make the css module depend on the offset module, just check for it here\n\tjQuery.each([\"top\", \"left\"], function (_i, prop) {\n\t\tjQuery.cssHooks[prop] = addGetHookIf(support.pixelPosition,\n\t\t\tfunction (elem, computed) {\n\t\t\t\tif (computed) {\n\t\t\t\t\tcomputed = curCSS(elem, prop);\n\n\t\t\t\t\t// If curCSS returns percentage, fallback to offset\n\t\t\t\t\treturn rnumnonpx.test(computed) ?\n\t\t\t\t\t\tjQuery(elem).position()[prop] + \"px\" :\n\t\t\t\t\t\tcomputed;\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\t});\n\n\n\t// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods\n\tjQuery.each({ Height: \"height\", Width: \"width\" }, function (name, type) {\n\t\tjQuery.each({\n\t\t\tpadding: \"inner\" + name,\n\t\t\tcontent: type,\n\t\t\t\"\": \"outer\" + name\n\t\t}, function (defaultExtra, funcName) {\n\n\t\t\t// Margin is only for outerHeight, outerWidth\n\t\t\tjQuery.fn[funcName] = function (margin, value) {\n\t\t\t\tvar chainable = arguments.length && (defaultExtra || typeof margin !== \"boolean\"),\n\t\t\t\t\textra = defaultExtra || (margin === true || value === true ? \"margin\" : \"border\");\n\n\t\t\t\treturn access(this, function (elem, type, value) {\n\t\t\t\t\tvar doc;\n\n\t\t\t\t\tif (isWindow(elem)) {\n\n\t\t\t\t\t\t// $( window ).outerWidth/Height return w/h including scrollbars (gh-1729)\n\t\t\t\t\t\treturn funcName.indexOf(\"outer\") === 0 ?\n\t\t\t\t\t\t\telem[\"inner\" + name] :\n\t\t\t\t\t\t\telem.document.documentElement[\"client\" + name];\n\t\t\t\t\t}\n\n\t\t\t\t\t// Get document width or height\n\t\t\t\t\tif (elem.nodeType === 9) {\n\t\t\t\t\t\tdoc = elem.documentElement;\n\n\t\t\t\t\t\t// Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height],\n\t\t\t\t\t\t// whichever is greatest\n\t\t\t\t\t\treturn Math.max(\n\t\t\t\t\t\t\telem.body[\"scroll\" + name], doc[\"scroll\" + name],\n\t\t\t\t\t\t\telem.body[\"offset\" + name], doc[\"offset\" + name],\n\t\t\t\t\t\t\tdoc[\"client\" + name]\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\n\t\t\t\t\treturn value === undefined ?\n\n\t\t\t\t\t\t// Get width or height on the element, requesting but not forcing parseFloat\n\t\t\t\t\t\tjQuery.css(elem, type, extra) :\n\n\t\t\t\t\t\t// Set width or height on the element\n\t\t\t\t\t\tjQuery.style(elem, type, value, extra);\n\t\t\t\t}, type, chainable ? margin : undefined, chainable);\n\t\t\t};\n\t\t});\n\t});\n\n\n\tjQuery.each([\n\t\t\"ajaxStart\",\n\t\t\"ajaxStop\",\n\t\t\"ajaxComplete\",\n\t\t\"ajaxError\",\n\t\t\"ajaxSuccess\",\n\t\t\"ajaxSend\"\n\t], function (_i, type) {\n\t\tjQuery.fn[type] = function (fn) {\n\t\t\treturn this.on(type, fn);\n\t\t};\n\t});\n\n\n\n\n\tjQuery.fn.extend({\n\n\t\tbind: function (types, data, fn) {\n\t\t\treturn this.on(types, null, data, fn);\n\t\t},\n\t\tunbind: function (types, fn) {\n\t\t\treturn this.off(types, null, fn);\n\t\t},\n\n\t\tdelegate: function (selector, types, data, fn) {\n\t\t\treturn this.on(types, selector, data, fn);\n\t\t},\n\t\tundelegate: function (selector, types, fn) {\n\n\t\t\t// ( namespace ) or ( selector, types [, fn] )\n\t\t\treturn arguments.length === 1 ?\n\t\t\t\tthis.off(selector, \"**\") :\n\t\t\t\tthis.off(types, selector || \"**\", fn);\n\t\t},\n\n\t\thover: function (fnOver, fnOut) {\n\t\t\treturn this.mouseenter(fnOver).mouseleave(fnOut || fnOver);\n\t\t}\n\t});\n\n\tjQuery.each(\n\t\t(\"blur focus focusin focusout resize scroll click dblclick \" +\n\t\t\t\"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave \" +\n\t\t\t\"change select submit keydown keypress keyup contextmenu\").split(\" \"),\n\t\tfunction (_i, name) {\n\n\t\t\t// Handle event binding\n\t\t\tjQuery.fn[name] = function (data, fn) {\n\t\t\t\treturn arguments.length > 0 ?\n\t\t\t\t\tthis.on(name, null, data, fn) :\n\t\t\t\t\tthis.trigger(name);\n\t\t\t};\n\t\t}\n\t);\n\n\n\n\n\t// Support: Android <=4.0 only\n\t// Make sure we trim BOM and NBSP\n\t// Require that the \"whitespace run\" starts from a non-whitespace\n\t// to avoid O(N^2) behavior when the engine would try matching \"\\s+$\" at each space position.\n\tvar rtrim = /^[\\s\\uFEFF\\xA0]+|([^\\s\\uFEFF\\xA0])[\\s\\uFEFF\\xA0]+$/g;\n\n\t// Bind a function to a context, optionally partially applying any\n\t// arguments.\n\t// jQuery.proxy is deprecated to promote standards (specifically Function#bind)\n\t// However, it is not slated for removal any time soon\n\tjQuery.proxy = function (fn, context) {\n\t\tvar tmp, args, proxy;\n\n\t\tif (typeof context === \"string\") {\n\t\t\ttmp = fn[context];\n\t\t\tcontext = fn;\n\t\t\tfn = tmp;\n\t\t}\n\n\t\t// Quick check to determine if target is callable, in the spec\n\t\t// this throws a TypeError, but we will just return undefined.\n\t\tif (!isFunction(fn)) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\t// Simulated bind\n\t\targs = slice.call(arguments, 2);\n\t\tproxy = function () {\n\t\t\treturn fn.apply(context || this, args.concat(slice.call(arguments)));\n\t\t};\n\n\t\t// Set the guid of unique handler to the same of original handler, so it can be removed\n\t\tproxy.guid = fn.guid = fn.guid || jQuery.guid++;\n\n\t\treturn proxy;\n\t};\n\n\tjQuery.holdReady = function (hold) {\n\t\tif (hold) {\n\t\t\tjQuery.readyWait++;\n\t\t} else {\n\t\t\tjQuery.ready(true);\n\t\t}\n\t};\n\tjQuery.isArray = Array.isArray;\n\tjQuery.parseJSON = JSON.parse;\n\tjQuery.nodeName = nodeName;\n\tjQuery.isFunction = isFunction;\n\tjQuery.isWindow = isWindow;\n\tjQuery.camelCase = camelCase;\n\tjQuery.type = toType;\n\n\tjQuery.now = Date.now;\n\n\tjQuery.isNumeric = function (obj) {\n\n\t\t// As of jQuery 3.0, isNumeric is limited to\n\t\t// strings and numbers (primitives or objects)\n\t\t// that can be coerced to finite numbers (gh-2662)\n\t\tvar type = jQuery.type(obj);\n\t\treturn (type === \"number\" || type === \"string\") &&\n\n\t\t\t// parseFloat NaNs numeric-cast false positives (\"\")\n\t\t\t// ...but misinterprets leading-number strings, particularly hex literals (\"0x...\")\n\t\t\t// subtraction forces infinities to NaN\n\t\t\t!isNaN(obj - parseFloat(obj));\n\t};\n\n\tjQuery.trim = function (text) {\n\t\treturn text == null ?\n\t\t\t\"\" :\n\t\t\t(text + \"\").replace(rtrim, \"$1\");\n\t};\n\n\n\n\t// Register as a named AMD module, since jQuery can be concatenated with other\n\t// files that may use define, but not via a proper concatenation script that\n\t// understands anonymous AMD modules. A named AMD is safest and most robust\n\t// way to register. Lowercase jquery is used because AMD module names are\n\t// derived from file names, and jQuery is normally delivered in a lowercase\n\t// file name. Do this after creating the global so that if an AMD module wants\n\t// to call noConflict to hide this version of jQuery, it will work.\n\n\t// Note that for maximum portability, libraries that are not jQuery should\n\t// declare themselves as anonymous modules, and avoid setting a global if an\n\t// AMD loader is present. jQuery is a special case. For more information, see\n\t// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon\n\n\tif (typeof define === \"function\" && define.amd) {\n\t\tdefine(\"jquery\", [], function () {\n\t\t\treturn jQuery;\n\t\t});\n\t}\n\n\n\n\n\tvar\n\n\t\t// Map over jQuery in case of overwrite\n\t\t_jQuery = window.jQuery,\n\n\t\t// Map over the $ in case of overwrite\n\t\t_$ = window.$;\n\n\tjQuery.noConflict = function (deep) {\n\t\tif (window.$ === jQuery) {\n\t\t\twindow.$ = _$;\n\t\t}\n\n\t\tif (deep && window.jQuery === jQuery) {\n\t\t\twindow.jQuery = _jQuery;\n\t\t}\n\n\t\treturn jQuery;\n\t};\n\n\t// Expose jQuery and $ identifiers, even in AMD\n\t// (trac-7102#comment:10, https://github.com/jquery/jquery/pull/557)\n\t// and CommonJS for browser emulators (trac-13566)\n\tif (typeof noGlobal === \"undefined\") {\n\t\twindow.jQuery = window.$ = jQuery;\n\t}\n\n\n\n\n\treturn jQuery;\n});"
  },
  {
    "path": "src/sourceDev.WebApp/SharedThemes/simplex/Shared/_Layout.cshtml",
    "content": "﻿@inject ISiteContextResolver siteResolver\n@inject ICoreThemeHelper themeHelper\n@{\n    var themeSettings = themeHelper.GetThemeSettings();\n    @*\n        These settings can be set by a main view to show additional columns.\n        Views that push content into the optional sections SideNav, AsidePrimary, and AsideSecondary\n        are obligated to set the needed viewtate property to true to show the section,\n        otherwise an error will occur.\n        The sideNav column also supports a toggle so it can be hidden and toggled visible even though it renders.\n    *@\n    bool sideNavVisible = true.Equals(ViewData[\"SideNavVisible\"]);\n    string sideNavToggleClass = ViewData[\"SideNavToggle\"]?.ToString() ?? \"collapse\";\n    bool asidePrimaryVisible = true.Equals(ViewData[\"AsidePrimaryVisible\"]);\n    bool asideSecondaryVisible = true.Equals(ViewData[\"AsideSecondaryVisible\"]);\n    var Tenant = await siteResolver.ResolveSite(Context.Request.Host.Host, Context.Request.Path);\n    var siteRoot = \"\";\n    if (!string.IsNullOrWhiteSpace(Tenant.SiteFolderName)) { siteRoot = \"/\" + Tenant.SiteFolderName; }\n   \n}\n<!DOCTYPE html>\n<html lang=\"@CultureInfo.CurrentUICulture.Name\">\n<head>\n    <meta charset=\"utf-8\" />\n    <title>@ViewData[\"Title\"] - @(Tenant?.SiteName ?? \"Sample\")</title>\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1, shrink-to-fit=no\">\n    @RenderSection(\"Meta\", required: false)\n    <environment names=\"Development\">\n        <link rel=\"stylesheet\" href=\"~/css/bootstrap.css\" cs-resolve-theme-resource=\"true\" cs-shared-theme=\"true\" cs-tenant=\"@Tenant\" />\n        <link rel=\"stylesheet\" href=\"~/css/fontawesome-all.min.css\" cs-resolve-theme-resource=\"true\" cs-shared-theme=\"true\" cs-tenant=\"@Tenant\" />\n        <link rel=\"stylesheet\" href=\"~/css/site.css\" cs-resolve-theme-resource=\"true\" cs-shared-theme=\"true\" cs-tenant=\"@Tenant\" asp-append-version=\"true\" />\n    </environment>\n    <environment names=\"Staging,Production\">\n        <link rel=\"stylesheet\" href=\"~/css/bootstrap.min.css\" cs-resolve-theme-resource=\"true\" cs-shared-theme=\"true\" cs-tenant=\"@Tenant\" />\n        <link rel=\"stylesheet\" href=\"~/css/fontawesome-all.min.css\" cs-resolve-theme-resource=\"true\" cs-shared-theme=\"true\" cs-tenant=\"@Tenant\" />\n        <link rel=\"stylesheet\" href=\"~/css/site.min.css\" cs-resolve-theme-resource=\"true\" cs-shared-theme=\"true\" cs-tenant=\"@Tenant\" asp-append-version=\"true\" />\n    </environment>\n    @RenderSection(\"Styles\", required: false)    \n    \n    <google-analytics profile-id=\"@Tenant.GoogleAnalyticsProfileId\" user-id=\"@User.GetUserId()\"></google-analytics>\n    <base href=\"@Context.Request.Path\" />\n</head>\n<body class=\"d-flex flex-column @ViewData[\"BodyClass\"]\">\n    <header class=\"bg-white\">\n        <a id=\"skippy\" class=\"visually-hidden visually-hidden-focusable\" href=\"#content\">\n            <div class=\"container\">\n                <span class=\"skiplink-text\">Skip to main content</span>\n            </div>\n        </a>\n        <div class=\"fixed-top container-fluid brand-header bg-white\">\n            <div class=\"d-flex align-items-center bg-white\">\n                @if (!string.IsNullOrWhiteSpace(Tenant.LogoUrl))\n                {\n                    <div>\n                         <partial name=\"SiteLogoPartial\" model=\"@Tenant\" />\n                    </div>\n                }\n                @if (Tenant.ShowSiteNameLink)\n                {\n                    <div class=\"align-self-center pt-4 pt-sm-0\">\n                         <partial name=\"SiteTitlePartial\" model=\"@Tenant\" />\n                    </div>\n                }\n                @if (!string.IsNullOrWhiteSpace(Tenant.HeaderContent))\n                {\n                    <div class=\"flex-fill align-self-center pt-3 d-none d-md-block\">\n                        <partial name=\"SiteHeaderPartial\" />\n                    </div>\n                }\n            </div>\n        </div>\n        <nav class=\"navbar navbar-expand-md navbar-dark fixed-top bg-dark pt-0 pb-0\">\n            <button class=\"navbar-toggler\" type=\"button\" data-bs-toggle=\"collapse\" data-bs-target=\"#navbarNavDropdown\" aria-controls=\"navbarNavDropdown\" aria-expanded=\"false\" aria-label=\"Toggle navigation\">\n                <span class=\"navbar-toggler-icon\"></span>\n            </button>\n\n            <div class=\"collapse navbar-collapse bg-dark ps-2\" id=\"navbarNavDropdown\">\n                @await Component.InvokeAsync(\"Navigation\", new { viewName = \"Bootstrap5TopNavWithDropdowns\", filterName = NamedNavigationFilters.TopNav, startingNodeKey = \"\" })\n                <partial name=\"_LoginPartialWithDropdowns\" />\n            </div>\n        </nav>\n    </header>\n    <div id=\"wrapper\" class=\"container-fluid cs-container flex-fill\">\n        @await Component.InvokeAsync(\"Navigation\", new { viewName = \"Bootstrap5Breadcrumbs\", filterName = NamedNavigationFilters.Breadcrumbs, startingNodeKey = \"\" })\n        <div class=\"row\">\n            <main id=\"content\" class=\"col order-3\">\n                <partial name=\"AlertsPartial\" />\n                <partial name=\"_CookieConsentPartial\" />\n                <partial name=\"_AutoLogoutWarningPartial\" />\n                @RenderBody()\n            </main>\n            @if (sideNavVisible)\n            {\n                <nav id=\"sidenavmenu\" class=\" col col-3 order-1 @sideNavToggleClass\">\n                    @RenderSection(\"SideNav\", required: false)\n                </nav>\n\n            }\n            @if (asideSecondaryVisible)\n            {\n                <aside id=\"asideSecondary\" class=\"col col-1 order-2\">\n                    @RenderSection(\"AsideSecondary\", required: false)\n                </aside>\n\n            }\n            @if (asidePrimaryVisible)\n            {\n                <aside id=\"asidePrimary\" class=\"col-12 col-md-3 col-sm-12  col-sm-12 order-4\">\n                    @RenderSection(\"AsidePrimary\", required: false)\n                </aside>\n\n            }\n        </div>\n    </div>\n     <footer class=\"sticky-bottom border pt-2 h-100\">\n        <div class=\"w-100 text-center\">\n            <partial name=\"SiteFooterPartial\" />\n        </div>\n        <div class=\"d-flex flex-wrap flex-grow justify-content-center\">\n            <div class=\"p-2\">\n            <ul class=\"list-unstyled d-flex flex-wrap\">\n                @if (Tenant != null && !string.IsNullOrWhiteSpace(Tenant.PrivacyPolicy))\n                {\n                    <li class=\"border-left ps-2 me-2\">\n                        <a asp-controller=\"Privacy\" asp-action=\"Index\">Privacy Policy</a>\n                    </li>\n                }\n                <li class=\"border-left ps-2 me-2\">\n                    @* you are free to remove the powered by cloudscribe link but we appreciate it if you choose to keep it! *@\n                    <a class=\"text-nowrap\" target=\"_blank\" href=\"https://www.cloudscribe.com/?utm_source=@Context.Request.Host.Value&amp;utm_medium=referral&amp;utm_campaign=poweredbycloudscribe\">Powered by cloudscribe</a>\n                </li>\n            </ul>\n        </div>\n        <<div class=\"ps-sm-2  text-center w-100\"><span class=\"text-nowrap\">Copyright &copy; @DateTime.Now.Year</span><span class=\"d-none d-sm-inline\"> - </span><span> @(Tenant?.SiteName ?? \"Sample\")</span></div>\n        <partial name=\"_CookieConsentRevokePartial\" />\n        </div>\n    </footer>\n    @RenderSection(\"Toolbar\", required: false)\n    <environment names=\"Development\">\n        <script src=\"~/js/jquery.js\" cs-resolve-theme-resource=\"true\" cs-shared-theme=\"true\" cs-tenant=\"@Tenant\"></script>\n        <script src=\"~/js/bootstrap.bundle.js\" cs-resolve-theme-resource=\"true\" cs-shared-theme=\"true\" cs-tenant=\"@Tenant\"></script>\n        <script src=\"~/cr/js/bs4.smartmenus.min.js\"></script>\n    </environment>\n    <environment names=\"Staging,Production\">\n        <script src=\"~/js/jquery.min.js\" cs-resolve-theme-resource=\"true\" cs-shared-theme=\"true\" cs-tenant=\"@Tenant\"></script>\n        <script src=\"~/js/bootstrap.bundle.min.js\" cs-resolve-theme-resource=\"true\" cs-shared-theme=\"true\" cs-tenant=\"@Tenant\"></script>\n        <script src=\"~/cr/js/bs4.smartmenus.min.js\"></script>\n    </environment>\n    @RenderSection(\"Bottom\", required: false)\n    @RenderSection(\"Scripts\", required: false)     \n    @Html.RenderResources(\"js\") @*render any js resources declared via helpers in partial views etc*@\n    <add-this profile-id=\"@Tenant.AddThisDotComUsername\" async></add-this>\n</body>\n</html>\n"
  },
  {
    "path": "src/sourceDev.WebApp/SharedThemes/simplex/wwwroot/css/_bootswatch.scss",
    "content": "// Simplex 5.1.3\n// Bootswatch\n\n\n// Variables\n\n$web-font-path: \"https://fonts.googleapis.com/css2?family=Open+Sans:wght@400;700&display=swap\" !default;\n@if $web-font-path {\n  @import url($web-font-path);\n}\n\n// Mixins\n\n@mixin btn-shadow($color){\n  @include gradient-y-three-colors(tint-color($color, 6%), $color, 6%, shade-color($color, 6%));\n  filter: none;\n  border: 1px solid shade-color($color, 13%);\n}\n\n// Navbar\n\n.navbar {\n  border-width: 1px;\n  border-style: solid;\n\n  &-fixed-top {\n    border-width: 0 0 1px;\n  }\n\n  &-fixed-bottom {\n    border-top-width: 1px 0 0 0;\n    border-style: solid;\n  }\n\n  &.bg-primary {\n    background-color: $primary !important;\n    border-color: shade-color($primary, 13%) !important;\n  }\n\n  &.bg-dark {\n    border-color: shade-color($dark, 13%) !important;\n  }\n\n  &.bg-light {\n    border-color: shade-color($white, 13%);\n  }\n}\n\n// Buttons\n\n.btn-primary,\n.btn-primary:hover {\n  @include btn-shadow($primary);\n}\n\n.btn-secondary,\n.btn-secondary:hover {\n  @include btn-shadow($secondary);\n}\n\n.btn-secondary:focus,\n.btn-secondary:not([disabled]):not(.disabled):active,\n.btn-secondary:not([disabled]):not(.disabled).active {\n  box-shadow: 0 0 0 .2rem rgba($gray-200, .5);\n}\n\n.btn-success,\n.btn-success:hover {\n  @include btn-shadow($success);\n}\n\n.btn-info,\n.btn-info:hover {\n  @include btn-shadow($info);\n}\n\n.btn-warning,\n.btn-warning:hover {\n  @include btn-shadow($warning);\n}\n\n.btn-danger,\n.btn-danger:hover {\n  @include btn-shadow($danger);\n}\n\n.btn-dark,\n.btn-dark:hover {\n  @include btn-shadow($dark);\n}\n\n.btn-light,\n.btn-light:hover {\n  @include btn-shadow($light);\n}\n\n.btn-outline-secondary {\n  border-color: $gray-400;\n  color: $gray-400;\n\n  &:hover {\n    background-color: $gray-400;\n    color: $white;\n  }\n}\n\n// Typography\n\n.text-secondary {\n  color: $gray-600 !important;\n}\n\n// Forms\n\nlegend,\nlabel {\n  color: $headings-color;\n}\n\n// Navs\n\n.breadcrumb {\n  border: 1px solid shade-color($white, 13%);\n}\n\n.pagination {\n  .page-link:hover {\n    text-decoration: none;\n  }\n}\n\n// Indicators\n\n.badge {\n  &.bg-secondary,\n  &.bg-light {\n    color: $dark;\n  }\n}\n"
  },
  {
    "path": "src/sourceDev.WebApp/SharedThemes/simplex/wwwroot/css/_variables.scss",
    "content": "// Simplex 5.1.3\n// Bootswatch\n\n$theme: \"simplex\" !default;\n\n//\n// Color system\n//\n\n$white:    #fff !default;\n$gray-100: #f8f9fa !default;\n$gray-200: #ddd !default;\n$gray-300: #ccc !default;\n$gray-400: #bbb !default;\n$gray-500: #adb5bd !default;\n$gray-600: #777 !default;\n$gray-700: #444 !default;\n$gray-800: #373a3c !default;\n$gray-900: #212529 !default;\n$black:    #000 !default;\n\n$blue:    #007bff !default;\n$indigo:  #6610f2 !default;\n$purple:  #9b479f !default;\n$pink:    #e83e8c !default;\n$red:     #d9230f !default;\n$orange:  #d9831f !default;\n$yellow:  #ffc107 !default;\n$green:   #469408 !default;\n$teal:    #20c997 !default;\n$cyan:    #029acf !default;\n\n$primary:       $red !default;\n$secondary:     $white !default;\n$success:       $green !default;\n$info:          $cyan !default;\n$warning:       $orange !default;\n$danger:        $purple !default;\n$light:         $white !default;\n$dark:          $gray-800 !default;\n\n$min-contrast-ratio:   2.8 !default;\n\n// Body\n\n$body-bg:                   #fcfcfc !default;\n\n// Fonts\n\n// stylelint-disable-next-line value-keyword-case\n$font-family-sans-serif:      \"Open Sans\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\" !default;\n\n// Dropdowns\n\n$dropdown-link-hover-color:         $white !default;\n$dropdown-link-hover-bg:            $primary !default;\n\n// Navs\n\n$nav-link-padding-y:                .9rem !default;\n$nav-link-disabled-color:           $gray-400 !default;\n$nav-tabs-border-color:             darken(#fff, 6.5%) !default;\n\n// Navbar\n\n$navbar-dark-color:                 rgba($white, .75) !default;\n$navbar-dark-hover-color:           $white !default;\n\n// Pagination\n\n$pagination-border-color:           $nav-tabs-border-color !default;\n$pagination-hover-color:            $white !default;\n$pagination-hover-bg:               $primary !default;\n$pagination-hover-border-color:     $primary !default;\n$pagination-disabled-color:         $gray-400 !default;\n$pagination-disabled-border-color:  $pagination-border-color !default;\n\n// Cards\n\n$card-border-color:                 $nav-tabs-border-color !default;\n\n// Popovers\n\n$popover-border-color:              $nav-tabs-border-color !default;\n\n// Modals\n\n$modal-content-border-color:        $nav-tabs-border-color !default;\n$modal-header-border-color:         $nav-tabs-border-color !default;\n\n// Progress bars\n\n$progress-bar-color:                $primary !default;\n\n// List group\n\n$list-group-border-color:           $nav-tabs-border-color !default;\n$list-group-disabled-bg:            $nav-tabs-border-color !default;\n\n// Breadcrumbs\n\n$breadcrumb-padding-y:              .375rem !default;\n$breadcrumb-padding-x:              .75rem !default;\n$breadcrumb-border-radius:          .25rem !default;\n"
  },
  {
    "path": "src/sourceDev.WebApp/SharedThemes/simplex/wwwroot/css/bootstrap.css",
    "content": "/*!\n * Bootswatch v5.1.3\n * Homepage: https://bootswatch.com\n * Copyright 2012-2021 Thomas Park\n * Licensed under MIT\n * Based on Bootstrap\n*/\n/*!\n * Bootstrap v5.1.3 (https://getbootstrap.com/)\n * Copyright 2011-2021 The Bootstrap Authors\n * Copyright 2011-2021 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n@import url(\"https://fonts.googleapis.com/css2?family=Open+Sans:wght@400;700&display=swap\");\n:root {\n  --bs-blue: #007bff;\n  --bs-indigo: #6610f2;\n  --bs-purple: #9b479f;\n  --bs-pink: #e83e8c;\n  --bs-red: #d9230f;\n  --bs-orange: #d9831f;\n  --bs-yellow: #ffc107;\n  --bs-green: #469408;\n  --bs-teal: #20c997;\n  --bs-cyan: #029acf;\n  --bs-white: #fff;\n  --bs-gray: #777;\n  --bs-gray-dark: #373a3c;\n  --bs-gray-100: #f8f9fa;\n  --bs-gray-200: #ddd;\n  --bs-gray-300: #ccc;\n  --bs-gray-400: #bbb;\n  --bs-gray-500: #adb5bd;\n  --bs-gray-600: #777;\n  --bs-gray-700: #444;\n  --bs-gray-800: #373a3c;\n  --bs-gray-900: #212529;\n  --bs-primary: #d9230f;\n  --bs-secondary: #fff;\n  --bs-success: #469408;\n  --bs-info: #029acf;\n  --bs-warning: #d9831f;\n  --bs-danger: #9b479f;\n  --bs-light: #fff;\n  --bs-dark: #373a3c;\n  --bs-primary-rgb: 217, 35, 15;\n  --bs-secondary-rgb: 255, 255, 255;\n  --bs-success-rgb: 70, 148, 8;\n  --bs-info-rgb: 2, 154, 207;\n  --bs-warning-rgb: 217, 131, 31;\n  --bs-danger-rgb: 155, 71, 159;\n  --bs-light-rgb: 255, 255, 255;\n  --bs-dark-rgb: 55, 58, 60;\n  --bs-white-rgb: 255, 255, 255;\n  --bs-black-rgb: 0, 0, 0;\n  --bs-body-color-rgb: 33, 37, 41;\n  --bs-body-bg-rgb: 252, 252, 252;\n  --bs-font-sans-serif: \"Open Sans\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\";\n  --bs-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n  --bs-gradient: linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));\n  --bs-body-font-family: var(--bs-font-sans-serif);\n  --bs-body-font-size: 1rem;\n  --bs-body-font-weight: 400;\n  --bs-body-line-height: 1.5;\n  --bs-body-color: #212529;\n  --bs-body-bg: #fcfcfc;\n}\n\n*,\n*::before,\n*::after {\n  box-sizing: border-box;\n}\n\n@media (prefers-reduced-motion: no-preference) {\n  :root {\n    scroll-behavior: smooth;\n  }\n}\n\nbody {\n  margin: 0;\n  font-family: var(--bs-body-font-family);\n  font-size: var(--bs-body-font-size);\n  font-weight: var(--bs-body-font-weight);\n  line-height: var(--bs-body-line-height);\n  color: var(--bs-body-color);\n  text-align: var(--bs-body-text-align);\n  background-color: var(--bs-body-bg);\n  -webkit-text-size-adjust: 100%;\n  -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\n\nhr {\n  margin: 1rem 0;\n  color: inherit;\n  background-color: currentColor;\n  border: 0;\n  opacity: 0.25;\n}\n\nhr:not([size]) {\n  height: 1px;\n}\n\nh1, .h1, h2, .h2, h3, .h3, h4, .h4, h5, .h5, h6, .h6 {\n  margin-top: 0;\n  margin-bottom: 0.5rem;\n  font-weight: 500;\n  line-height: 1.2;\n}\n\nh1, .h1 {\n  font-size: calc(1.375rem + 1.5vw);\n}\n\n@media (min-width: 1200px) {\n  h1, .h1 {\n    font-size: 2.5rem;\n  }\n}\n\nh2, .h2 {\n  font-size: calc(1.325rem + 0.9vw);\n}\n\n@media (min-width: 1200px) {\n  h2, .h2 {\n    font-size: 2rem;\n  }\n}\n\nh3, .h3 {\n  font-size: calc(1.3rem + 0.6vw);\n}\n\n@media (min-width: 1200px) {\n  h3, .h3 {\n    font-size: 1.75rem;\n  }\n}\n\nh4, .h4 {\n  font-size: calc(1.275rem + 0.3vw);\n}\n\n@media (min-width: 1200px) {\n  h4, .h4 {\n    font-size: 1.5rem;\n  }\n}\n\nh5, .h5 {\n  font-size: 1.25rem;\n}\n\nh6, .h6 {\n  font-size: 1rem;\n}\n\np {\n  margin-top: 0;\n  margin-bottom: 1rem;\n}\n\nabbr[title],\nabbr[data-bs-original-title] {\n  -webkit-text-decoration: underline dotted;\n  text-decoration: underline dotted;\n  cursor: help;\n  -webkit-text-decoration-skip-ink: none;\n  text-decoration-skip-ink: none;\n}\n\naddress {\n  margin-bottom: 1rem;\n  font-style: normal;\n  line-height: inherit;\n}\n\nol,\nul {\n  padding-left: 2rem;\n}\n\nol,\nul,\ndl {\n  margin-top: 0;\n  margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n  margin-bottom: 0;\n}\n\ndt {\n  font-weight: 700;\n}\n\ndd {\n  margin-bottom: .5rem;\n  margin-left: 0;\n}\n\nblockquote {\n  margin: 0 0 1rem;\n}\n\nb,\nstrong {\n  font-weight: bolder;\n}\n\nsmall, .small {\n  font-size: 0.875em;\n}\n\nmark, .mark {\n  padding: 0.2em;\n  background-color: #fcf8e3;\n}\n\nsub,\nsup {\n  position: relative;\n  font-size: 0.75em;\n  line-height: 0;\n  vertical-align: baseline;\n}\n\nsub {\n  bottom: -.25em;\n}\n\nsup {\n  top: -.5em;\n}\n\na {\n  color: #d9230f;\n  text-decoration: underline;\n}\n\na:hover {\n  color: #ae1c0c;\n}\n\na:not([href]):not([class]), a:not([href]):not([class]):hover {\n  color: inherit;\n  text-decoration: none;\n}\n\npre,\ncode,\nkbd,\nsamp {\n  font-family: var(--bs-font-monospace);\n  font-size: 1em;\n  direction: ltr /* rtl:ignore */;\n  unicode-bidi: bidi-override;\n}\n\npre {\n  display: block;\n  margin-top: 0;\n  margin-bottom: 1rem;\n  overflow: auto;\n  font-size: 0.875em;\n}\n\npre code {\n  font-size: inherit;\n  color: inherit;\n  word-break: normal;\n}\n\ncode {\n  font-size: 0.875em;\n  color: #e83e8c;\n  word-wrap: break-word;\n}\n\na > code {\n  color: inherit;\n}\n\nkbd {\n  padding: 0.2rem 0.4rem;\n  font-size: 0.875em;\n  color: #fff;\n  background-color: #212529;\n  border-radius: 0.2rem;\n}\n\nkbd kbd {\n  padding: 0;\n  font-size: 1em;\n  font-weight: 700;\n}\n\nfigure {\n  margin: 0 0 1rem;\n}\n\nimg,\nsvg {\n  vertical-align: middle;\n}\n\ntable {\n  caption-side: bottom;\n  border-collapse: collapse;\n}\n\ncaption {\n  padding-top: 0.5rem;\n  padding-bottom: 0.5rem;\n  color: #777;\n  text-align: left;\n}\n\nth {\n  text-align: inherit;\n  text-align: -webkit-match-parent;\n}\n\nthead,\ntbody,\ntfoot,\ntr,\ntd,\nth {\n  border-color: inherit;\n  border-style: solid;\n  border-width: 0;\n}\n\nlabel {\n  display: inline-block;\n}\n\nbutton {\n  border-radius: 0;\n}\n\nbutton:focus:not(:focus-visible) {\n  outline: 0;\n}\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n  margin: 0;\n  font-family: inherit;\n  font-size: inherit;\n  line-height: inherit;\n}\n\nbutton,\nselect {\n  text-transform: none;\n}\n\n[role=\"button\"] {\n  cursor: pointer;\n}\n\nselect {\n  word-wrap: normal;\n}\n\nselect:disabled {\n  opacity: 1;\n}\n\n[list]::-webkit-calendar-picker-indicator {\n  display: none;\n}\n\nbutton,\n[type=\"button\"],\n[type=\"reset\"],\n[type=\"submit\"] {\n  -webkit-appearance: button;\n}\n\nbutton:not(:disabled),\n[type=\"button\"]:not(:disabled),\n[type=\"reset\"]:not(:disabled),\n[type=\"submit\"]:not(:disabled) {\n  cursor: pointer;\n}\n\n::-moz-focus-inner {\n  padding: 0;\n  border-style: none;\n}\n\ntextarea {\n  resize: vertical;\n}\n\nfieldset {\n  min-width: 0;\n  padding: 0;\n  margin: 0;\n  border: 0;\n}\n\nlegend {\n  float: left;\n  width: 100%;\n  padding: 0;\n  margin-bottom: 0.5rem;\n  font-size: calc(1.275rem + 0.3vw);\n  line-height: inherit;\n}\n\n@media (min-width: 1200px) {\n  legend {\n    font-size: 1.5rem;\n  }\n}\n\nlegend + * {\n  clear: left;\n}\n\n::-webkit-datetime-edit-fields-wrapper,\n::-webkit-datetime-edit-text,\n::-webkit-datetime-edit-minute,\n::-webkit-datetime-edit-hour-field,\n::-webkit-datetime-edit-day-field,\n::-webkit-datetime-edit-month-field,\n::-webkit-datetime-edit-year-field {\n  padding: 0;\n}\n\n::-webkit-inner-spin-button {\n  height: auto;\n}\n\n[type=\"search\"] {\n  outline-offset: -2px;\n  -webkit-appearance: textfield;\n}\n\n/* rtl:raw:\n[type=\"tel\"],\n[type=\"url\"],\n[type=\"email\"],\n[type=\"number\"] {\n  direction: ltr;\n}\n*/\n::-webkit-search-decoration {\n  -webkit-appearance: none;\n}\n\n::-webkit-color-swatch-wrapper {\n  padding: 0;\n}\n\n::file-selector-button {\n  font: inherit;\n}\n\n::-webkit-file-upload-button {\n  font: inherit;\n  -webkit-appearance: button;\n}\n\noutput {\n  display: inline-block;\n}\n\niframe {\n  border: 0;\n}\n\nsummary {\n  display: list-item;\n  cursor: pointer;\n}\n\nprogress {\n  vertical-align: baseline;\n}\n\n[hidden] {\n  display: none !important;\n}\n\n.lead {\n  font-size: 1.25rem;\n  font-weight: 300;\n}\n\n.display-1 {\n  font-size: calc(1.625rem + 4.5vw);\n  font-weight: 300;\n  line-height: 1.2;\n}\n\n@media (min-width: 1200px) {\n  .display-1 {\n    font-size: 5rem;\n  }\n}\n\n.display-2 {\n  font-size: calc(1.575rem + 3.9vw);\n  font-weight: 300;\n  line-height: 1.2;\n}\n\n@media (min-width: 1200px) {\n  .display-2 {\n    font-size: 4.5rem;\n  }\n}\n\n.display-3 {\n  font-size: calc(1.525rem + 3.3vw);\n  font-weight: 300;\n  line-height: 1.2;\n}\n\n@media (min-width: 1200px) {\n  .display-3 {\n    font-size: 4rem;\n  }\n}\n\n.display-4 {\n  font-size: calc(1.475rem + 2.7vw);\n  font-weight: 300;\n  line-height: 1.2;\n}\n\n@media (min-width: 1200px) {\n  .display-4 {\n    font-size: 3.5rem;\n  }\n}\n\n.display-5 {\n  font-size: calc(1.425rem + 2.1vw);\n  font-weight: 300;\n  line-height: 1.2;\n}\n\n@media (min-width: 1200px) {\n  .display-5 {\n    font-size: 3rem;\n  }\n}\n\n.display-6 {\n  font-size: calc(1.375rem + 1.5vw);\n  font-weight: 300;\n  line-height: 1.2;\n}\n\n@media (min-width: 1200px) {\n  .display-6 {\n    font-size: 2.5rem;\n  }\n}\n\n.list-unstyled {\n  padding-left: 0;\n  list-style: none;\n}\n\n.list-inline {\n  padding-left: 0;\n  list-style: none;\n}\n\n.list-inline-item {\n  display: inline-block;\n}\n\n.list-inline-item:not(:last-child) {\n  margin-right: 0.5rem;\n}\n\n.initialism {\n  font-size: 0.875em;\n  text-transform: uppercase;\n}\n\n.blockquote {\n  margin-bottom: 1rem;\n  font-size: 1.25rem;\n}\n\n.blockquote > :last-child {\n  margin-bottom: 0;\n}\n\n.blockquote-footer {\n  margin-top: -1rem;\n  margin-bottom: 1rem;\n  font-size: 0.875em;\n  color: #777;\n}\n\n.blockquote-footer::before {\n  content: \"\\2014\\00A0\";\n}\n\n.img-fluid {\n  max-width: 100%;\n  height: auto;\n}\n\n.img-thumbnail {\n  padding: 0.25rem;\n  background-color: #fcfcfc;\n  border: 1px solid #ccc;\n  border-radius: 0.25rem;\n  max-width: 100%;\n  height: auto;\n}\n\n.figure {\n  display: inline-block;\n}\n\n.figure-img {\n  margin-bottom: 0.5rem;\n  line-height: 1;\n}\n\n.figure-caption {\n  font-size: 0.875em;\n  color: #777;\n}\n\n.container,\n.container-fluid,\n.container-sm,\n.container-md,\n.container-lg,\n.container-xl,\n.container-xxl {\n  width: 100%;\n  padding-right: var(--bs-gutter-x, 0.75rem);\n  padding-left: var(--bs-gutter-x, 0.75rem);\n  margin-right: auto;\n  margin-left: auto;\n}\n\n@media (min-width: 576px) {\n  .container, .container-sm {\n    max-width: 540px;\n  }\n}\n\n@media (min-width: 768px) {\n  .container, .container-sm, .container-md {\n    max-width: 720px;\n  }\n}\n\n@media (min-width: 992px) {\n  .container, .container-sm, .container-md, .container-lg {\n    max-width: 960px;\n  }\n}\n\n@media (min-width: 1200px) {\n  .container, .container-sm, .container-md, .container-lg, .container-xl {\n    max-width: 1140px;\n  }\n}\n\n@media (min-width: 1400px) {\n  .container, .container-sm, .container-md, .container-lg, .container-xl, .container-xxl {\n    max-width: 1320px;\n  }\n}\n\n.row {\n  --bs-gutter-x: 1.5rem;\n  --bs-gutter-y: 0;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n  flex-wrap: wrap;\n  margin-top: calc(-1 * var(--bs-gutter-y));\n  margin-right: calc(-.5 * var(--bs-gutter-x));\n  margin-left: calc(-.5 * var(--bs-gutter-x));\n}\n\n.row > * {\n  -ms-flex-negative: 0;\n  flex-shrink: 0;\n  width: 100%;\n  max-width: 100%;\n  padding-right: calc(var(--bs-gutter-x) * .5);\n  padding-left: calc(var(--bs-gutter-x) * .5);\n  margin-top: var(--bs-gutter-y);\n}\n\n.col {\n  -ms-flex: 1 0 0%;\n  flex: 1 0 0%;\n}\n\n.row-cols-auto > * {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: auto;\n}\n\n.row-cols-1 > * {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 100%;\n}\n\n.row-cols-2 > * {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 50%;\n}\n\n.row-cols-3 > * {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 33.333333%;\n}\n\n.row-cols-4 > * {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 25%;\n}\n\n.row-cols-5 > * {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 20%;\n}\n\n.row-cols-6 > * {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 16.666667%;\n}\n\n.col-auto {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: auto;\n}\n\n.col-1 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 8.333333%;\n}\n\n.col-2 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 16.666667%;\n}\n\n.col-3 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 25%;\n}\n\n.col-4 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 33.333333%;\n}\n\n.col-5 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 41.666667%;\n}\n\n.col-6 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 50%;\n}\n\n.col-7 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 58.333333%;\n}\n\n.col-8 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 66.666667%;\n}\n\n.col-9 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 75%;\n}\n\n.col-10 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 83.333333%;\n}\n\n.col-11 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 91.666667%;\n}\n\n.col-12 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 100%;\n}\n\n.offset-1 {\n  margin-left: 8.333333%;\n}\n\n.offset-2 {\n  margin-left: 16.666667%;\n}\n\n.offset-3 {\n  margin-left: 25%;\n}\n\n.offset-4 {\n  margin-left: 33.333333%;\n}\n\n.offset-5 {\n  margin-left: 41.666667%;\n}\n\n.offset-6 {\n  margin-left: 50%;\n}\n\n.offset-7 {\n  margin-left: 58.333333%;\n}\n\n.offset-8 {\n  margin-left: 66.666667%;\n}\n\n.offset-9 {\n  margin-left: 75%;\n}\n\n.offset-10 {\n  margin-left: 83.333333%;\n}\n\n.offset-11 {\n  margin-left: 91.666667%;\n}\n\n.g-0,\n.gx-0 {\n  --bs-gutter-x: 0;\n}\n\n.g-0,\n.gy-0 {\n  --bs-gutter-y: 0;\n}\n\n.g-1,\n.gx-1 {\n  --bs-gutter-x: 0.25rem;\n}\n\n.g-1,\n.gy-1 {\n  --bs-gutter-y: 0.25rem;\n}\n\n.g-2,\n.gx-2 {\n  --bs-gutter-x: 0.5rem;\n}\n\n.g-2,\n.gy-2 {\n  --bs-gutter-y: 0.5rem;\n}\n\n.g-3,\n.gx-3 {\n  --bs-gutter-x: 1rem;\n}\n\n.g-3,\n.gy-3 {\n  --bs-gutter-y: 1rem;\n}\n\n.g-4,\n.gx-4 {\n  --bs-gutter-x: 1.5rem;\n}\n\n.g-4,\n.gy-4 {\n  --bs-gutter-y: 1.5rem;\n}\n\n.g-5,\n.gx-5 {\n  --bs-gutter-x: 3rem;\n}\n\n.g-5,\n.gy-5 {\n  --bs-gutter-y: 3rem;\n}\n\n@media (min-width: 576px) {\n  .col-sm {\n    -ms-flex: 1 0 0%;\n    flex: 1 0 0%;\n  }\n  .row-cols-sm-auto > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .row-cols-sm-1 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .row-cols-sm-2 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .row-cols-sm-3 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 33.333333%;\n  }\n  .row-cols-sm-4 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .row-cols-sm-5 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 20%;\n  }\n  .row-cols-sm-6 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 16.666667%;\n  }\n  .col-sm-auto {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .col-sm-1 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 8.333333%;\n  }\n  .col-sm-2 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 16.666667%;\n  }\n  .col-sm-3 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .col-sm-4 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 33.333333%;\n  }\n  .col-sm-5 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 41.666667%;\n  }\n  .col-sm-6 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .col-sm-7 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 58.333333%;\n  }\n  .col-sm-8 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 66.666667%;\n  }\n  .col-sm-9 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 75%;\n  }\n  .col-sm-10 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 83.333333%;\n  }\n  .col-sm-11 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 91.666667%;\n  }\n  .col-sm-12 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .offset-sm-0 {\n    margin-left: 0;\n  }\n  .offset-sm-1 {\n    margin-left: 8.333333%;\n  }\n  .offset-sm-2 {\n    margin-left: 16.666667%;\n  }\n  .offset-sm-3 {\n    margin-left: 25%;\n  }\n  .offset-sm-4 {\n    margin-left: 33.333333%;\n  }\n  .offset-sm-5 {\n    margin-left: 41.666667%;\n  }\n  .offset-sm-6 {\n    margin-left: 50%;\n  }\n  .offset-sm-7 {\n    margin-left: 58.333333%;\n  }\n  .offset-sm-8 {\n    margin-left: 66.666667%;\n  }\n  .offset-sm-9 {\n    margin-left: 75%;\n  }\n  .offset-sm-10 {\n    margin-left: 83.333333%;\n  }\n  .offset-sm-11 {\n    margin-left: 91.666667%;\n  }\n  .g-sm-0,\n  .gx-sm-0 {\n    --bs-gutter-x: 0;\n  }\n  .g-sm-0,\n  .gy-sm-0 {\n    --bs-gutter-y: 0;\n  }\n  .g-sm-1,\n  .gx-sm-1 {\n    --bs-gutter-x: 0.25rem;\n  }\n  .g-sm-1,\n  .gy-sm-1 {\n    --bs-gutter-y: 0.25rem;\n  }\n  .g-sm-2,\n  .gx-sm-2 {\n    --bs-gutter-x: 0.5rem;\n  }\n  .g-sm-2,\n  .gy-sm-2 {\n    --bs-gutter-y: 0.5rem;\n  }\n  .g-sm-3,\n  .gx-sm-3 {\n    --bs-gutter-x: 1rem;\n  }\n  .g-sm-3,\n  .gy-sm-3 {\n    --bs-gutter-y: 1rem;\n  }\n  .g-sm-4,\n  .gx-sm-4 {\n    --bs-gutter-x: 1.5rem;\n  }\n  .g-sm-4,\n  .gy-sm-4 {\n    --bs-gutter-y: 1.5rem;\n  }\n  .g-sm-5,\n  .gx-sm-5 {\n    --bs-gutter-x: 3rem;\n  }\n  .g-sm-5,\n  .gy-sm-5 {\n    --bs-gutter-y: 3rem;\n  }\n}\n\n@media (min-width: 768px) {\n  .col-md {\n    -ms-flex: 1 0 0%;\n    flex: 1 0 0%;\n  }\n  .row-cols-md-auto > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .row-cols-md-1 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .row-cols-md-2 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .row-cols-md-3 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 33.333333%;\n  }\n  .row-cols-md-4 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .row-cols-md-5 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 20%;\n  }\n  .row-cols-md-6 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 16.666667%;\n  }\n  .col-md-auto {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .col-md-1 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 8.333333%;\n  }\n  .col-md-2 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 16.666667%;\n  }\n  .col-md-3 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .col-md-4 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 33.333333%;\n  }\n  .col-md-5 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 41.666667%;\n  }\n  .col-md-6 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .col-md-7 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 58.333333%;\n  }\n  .col-md-8 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 66.666667%;\n  }\n  .col-md-9 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 75%;\n  }\n  .col-md-10 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 83.333333%;\n  }\n  .col-md-11 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 91.666667%;\n  }\n  .col-md-12 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .offset-md-0 {\n    margin-left: 0;\n  }\n  .offset-md-1 {\n    margin-left: 8.333333%;\n  }\n  .offset-md-2 {\n    margin-left: 16.666667%;\n  }\n  .offset-md-3 {\n    margin-left: 25%;\n  }\n  .offset-md-4 {\n    margin-left: 33.333333%;\n  }\n  .offset-md-5 {\n    margin-left: 41.666667%;\n  }\n  .offset-md-6 {\n    margin-left: 50%;\n  }\n  .offset-md-7 {\n    margin-left: 58.333333%;\n  }\n  .offset-md-8 {\n    margin-left: 66.666667%;\n  }\n  .offset-md-9 {\n    margin-left: 75%;\n  }\n  .offset-md-10 {\n    margin-left: 83.333333%;\n  }\n  .offset-md-11 {\n    margin-left: 91.666667%;\n  }\n  .g-md-0,\n  .gx-md-0 {\n    --bs-gutter-x: 0;\n  }\n  .g-md-0,\n  .gy-md-0 {\n    --bs-gutter-y: 0;\n  }\n  .g-md-1,\n  .gx-md-1 {\n    --bs-gutter-x: 0.25rem;\n  }\n  .g-md-1,\n  .gy-md-1 {\n    --bs-gutter-y: 0.25rem;\n  }\n  .g-md-2,\n  .gx-md-2 {\n    --bs-gutter-x: 0.5rem;\n  }\n  .g-md-2,\n  .gy-md-2 {\n    --bs-gutter-y: 0.5rem;\n  }\n  .g-md-3,\n  .gx-md-3 {\n    --bs-gutter-x: 1rem;\n  }\n  .g-md-3,\n  .gy-md-3 {\n    --bs-gutter-y: 1rem;\n  }\n  .g-md-4,\n  .gx-md-4 {\n    --bs-gutter-x: 1.5rem;\n  }\n  .g-md-4,\n  .gy-md-4 {\n    --bs-gutter-y: 1.5rem;\n  }\n  .g-md-5,\n  .gx-md-5 {\n    --bs-gutter-x: 3rem;\n  }\n  .g-md-5,\n  .gy-md-5 {\n    --bs-gutter-y: 3rem;\n  }\n}\n\n@media (min-width: 992px) {\n  .col-lg {\n    -ms-flex: 1 0 0%;\n    flex: 1 0 0%;\n  }\n  .row-cols-lg-auto > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .row-cols-lg-1 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .row-cols-lg-2 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .row-cols-lg-3 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 33.333333%;\n  }\n  .row-cols-lg-4 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .row-cols-lg-5 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 20%;\n  }\n  .row-cols-lg-6 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 16.666667%;\n  }\n  .col-lg-auto {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .col-lg-1 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 8.333333%;\n  }\n  .col-lg-2 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 16.666667%;\n  }\n  .col-lg-3 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .col-lg-4 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 33.333333%;\n  }\n  .col-lg-5 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 41.666667%;\n  }\n  .col-lg-6 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .col-lg-7 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 58.333333%;\n  }\n  .col-lg-8 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 66.666667%;\n  }\n  .col-lg-9 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 75%;\n  }\n  .col-lg-10 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 83.333333%;\n  }\n  .col-lg-11 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 91.666667%;\n  }\n  .col-lg-12 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .offset-lg-0 {\n    margin-left: 0;\n  }\n  .offset-lg-1 {\n    margin-left: 8.333333%;\n  }\n  .offset-lg-2 {\n    margin-left: 16.666667%;\n  }\n  .offset-lg-3 {\n    margin-left: 25%;\n  }\n  .offset-lg-4 {\n    margin-left: 33.333333%;\n  }\n  .offset-lg-5 {\n    margin-left: 41.666667%;\n  }\n  .offset-lg-6 {\n    margin-left: 50%;\n  }\n  .offset-lg-7 {\n    margin-left: 58.333333%;\n  }\n  .offset-lg-8 {\n    margin-left: 66.666667%;\n  }\n  .offset-lg-9 {\n    margin-left: 75%;\n  }\n  .offset-lg-10 {\n    margin-left: 83.333333%;\n  }\n  .offset-lg-11 {\n    margin-left: 91.666667%;\n  }\n  .g-lg-0,\n  .gx-lg-0 {\n    --bs-gutter-x: 0;\n  }\n  .g-lg-0,\n  .gy-lg-0 {\n    --bs-gutter-y: 0;\n  }\n  .g-lg-1,\n  .gx-lg-1 {\n    --bs-gutter-x: 0.25rem;\n  }\n  .g-lg-1,\n  .gy-lg-1 {\n    --bs-gutter-y: 0.25rem;\n  }\n  .g-lg-2,\n  .gx-lg-2 {\n    --bs-gutter-x: 0.5rem;\n  }\n  .g-lg-2,\n  .gy-lg-2 {\n    --bs-gutter-y: 0.5rem;\n  }\n  .g-lg-3,\n  .gx-lg-3 {\n    --bs-gutter-x: 1rem;\n  }\n  .g-lg-3,\n  .gy-lg-3 {\n    --bs-gutter-y: 1rem;\n  }\n  .g-lg-4,\n  .gx-lg-4 {\n    --bs-gutter-x: 1.5rem;\n  }\n  .g-lg-4,\n  .gy-lg-4 {\n    --bs-gutter-y: 1.5rem;\n  }\n  .g-lg-5,\n  .gx-lg-5 {\n    --bs-gutter-x: 3rem;\n  }\n  .g-lg-5,\n  .gy-lg-5 {\n    --bs-gutter-y: 3rem;\n  }\n}\n\n@media (min-width: 1200px) {\n  .col-xl {\n    -ms-flex: 1 0 0%;\n    flex: 1 0 0%;\n  }\n  .row-cols-xl-auto > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .row-cols-xl-1 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .row-cols-xl-2 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .row-cols-xl-3 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 33.333333%;\n  }\n  .row-cols-xl-4 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .row-cols-xl-5 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 20%;\n  }\n  .row-cols-xl-6 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 16.666667%;\n  }\n  .col-xl-auto {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .col-xl-1 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 8.333333%;\n  }\n  .col-xl-2 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 16.666667%;\n  }\n  .col-xl-3 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .col-xl-4 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 33.333333%;\n  }\n  .col-xl-5 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 41.666667%;\n  }\n  .col-xl-6 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .col-xl-7 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 58.333333%;\n  }\n  .col-xl-8 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 66.666667%;\n  }\n  .col-xl-9 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 75%;\n  }\n  .col-xl-10 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 83.333333%;\n  }\n  .col-xl-11 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 91.666667%;\n  }\n  .col-xl-12 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .offset-xl-0 {\n    margin-left: 0;\n  }\n  .offset-xl-1 {\n    margin-left: 8.333333%;\n  }\n  .offset-xl-2 {\n    margin-left: 16.666667%;\n  }\n  .offset-xl-3 {\n    margin-left: 25%;\n  }\n  .offset-xl-4 {\n    margin-left: 33.333333%;\n  }\n  .offset-xl-5 {\n    margin-left: 41.666667%;\n  }\n  .offset-xl-6 {\n    margin-left: 50%;\n  }\n  .offset-xl-7 {\n    margin-left: 58.333333%;\n  }\n  .offset-xl-8 {\n    margin-left: 66.666667%;\n  }\n  .offset-xl-9 {\n    margin-left: 75%;\n  }\n  .offset-xl-10 {\n    margin-left: 83.333333%;\n  }\n  .offset-xl-11 {\n    margin-left: 91.666667%;\n  }\n  .g-xl-0,\n  .gx-xl-0 {\n    --bs-gutter-x: 0;\n  }\n  .g-xl-0,\n  .gy-xl-0 {\n    --bs-gutter-y: 0;\n  }\n  .g-xl-1,\n  .gx-xl-1 {\n    --bs-gutter-x: 0.25rem;\n  }\n  .g-xl-1,\n  .gy-xl-1 {\n    --bs-gutter-y: 0.25rem;\n  }\n  .g-xl-2,\n  .gx-xl-2 {\n    --bs-gutter-x: 0.5rem;\n  }\n  .g-xl-2,\n  .gy-xl-2 {\n    --bs-gutter-y: 0.5rem;\n  }\n  .g-xl-3,\n  .gx-xl-3 {\n    --bs-gutter-x: 1rem;\n  }\n  .g-xl-3,\n  .gy-xl-3 {\n    --bs-gutter-y: 1rem;\n  }\n  .g-xl-4,\n  .gx-xl-4 {\n    --bs-gutter-x: 1.5rem;\n  }\n  .g-xl-4,\n  .gy-xl-4 {\n    --bs-gutter-y: 1.5rem;\n  }\n  .g-xl-5,\n  .gx-xl-5 {\n    --bs-gutter-x: 3rem;\n  }\n  .g-xl-5,\n  .gy-xl-5 {\n    --bs-gutter-y: 3rem;\n  }\n}\n\n@media (min-width: 1400px) {\n  .col-xxl {\n    -ms-flex: 1 0 0%;\n    flex: 1 0 0%;\n  }\n  .row-cols-xxl-auto > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .row-cols-xxl-1 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .row-cols-xxl-2 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .row-cols-xxl-3 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 33.333333%;\n  }\n  .row-cols-xxl-4 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .row-cols-xxl-5 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 20%;\n  }\n  .row-cols-xxl-6 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 16.666667%;\n  }\n  .col-xxl-auto {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .col-xxl-1 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 8.333333%;\n  }\n  .col-xxl-2 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 16.666667%;\n  }\n  .col-xxl-3 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .col-xxl-4 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 33.333333%;\n  }\n  .col-xxl-5 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 41.666667%;\n  }\n  .col-xxl-6 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .col-xxl-7 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 58.333333%;\n  }\n  .col-xxl-8 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 66.666667%;\n  }\n  .col-xxl-9 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 75%;\n  }\n  .col-xxl-10 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 83.333333%;\n  }\n  .col-xxl-11 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 91.666667%;\n  }\n  .col-xxl-12 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .offset-xxl-0 {\n    margin-left: 0;\n  }\n  .offset-xxl-1 {\n    margin-left: 8.333333%;\n  }\n  .offset-xxl-2 {\n    margin-left: 16.666667%;\n  }\n  .offset-xxl-3 {\n    margin-left: 25%;\n  }\n  .offset-xxl-4 {\n    margin-left: 33.333333%;\n  }\n  .offset-xxl-5 {\n    margin-left: 41.666667%;\n  }\n  .offset-xxl-6 {\n    margin-left: 50%;\n  }\n  .offset-xxl-7 {\n    margin-left: 58.333333%;\n  }\n  .offset-xxl-8 {\n    margin-left: 66.666667%;\n  }\n  .offset-xxl-9 {\n    margin-left: 75%;\n  }\n  .offset-xxl-10 {\n    margin-left: 83.333333%;\n  }\n  .offset-xxl-11 {\n    margin-left: 91.666667%;\n  }\n  .g-xxl-0,\n  .gx-xxl-0 {\n    --bs-gutter-x: 0;\n  }\n  .g-xxl-0,\n  .gy-xxl-0 {\n    --bs-gutter-y: 0;\n  }\n  .g-xxl-1,\n  .gx-xxl-1 {\n    --bs-gutter-x: 0.25rem;\n  }\n  .g-xxl-1,\n  .gy-xxl-1 {\n    --bs-gutter-y: 0.25rem;\n  }\n  .g-xxl-2,\n  .gx-xxl-2 {\n    --bs-gutter-x: 0.5rem;\n  }\n  .g-xxl-2,\n  .gy-xxl-2 {\n    --bs-gutter-y: 0.5rem;\n  }\n  .g-xxl-3,\n  .gx-xxl-3 {\n    --bs-gutter-x: 1rem;\n  }\n  .g-xxl-3,\n  .gy-xxl-3 {\n    --bs-gutter-y: 1rem;\n  }\n  .g-xxl-4,\n  .gx-xxl-4 {\n    --bs-gutter-x: 1.5rem;\n  }\n  .g-xxl-4,\n  .gy-xxl-4 {\n    --bs-gutter-y: 1.5rem;\n  }\n  .g-xxl-5,\n  .gx-xxl-5 {\n    --bs-gutter-x: 3rem;\n  }\n  .g-xxl-5,\n  .gy-xxl-5 {\n    --bs-gutter-y: 3rem;\n  }\n}\n\n.table {\n  --bs-table-bg: transparent;\n  --bs-table-accent-bg: transparent;\n  --bs-table-striped-color: #212529;\n  --bs-table-striped-bg: rgba(0, 0, 0, 0.05);\n  --bs-table-active-color: #212529;\n  --bs-table-active-bg: rgba(0, 0, 0, 0.1);\n  --bs-table-hover-color: #212529;\n  --bs-table-hover-bg: rgba(0, 0, 0, 0.075);\n  width: 100%;\n  margin-bottom: 1rem;\n  color: #212529;\n  vertical-align: top;\n  border-color: #ccc;\n}\n\n.table > :not(caption) > * > * {\n  padding: 0.5rem 0.5rem;\n  background-color: var(--bs-table-bg);\n  border-bottom-width: 1px;\n  box-shadow: inset 0 0 0 9999px var(--bs-table-accent-bg);\n}\n\n.table > tbody {\n  vertical-align: inherit;\n}\n\n.table > thead {\n  vertical-align: bottom;\n}\n\n.table > :not(:first-child) {\n  border-top: 2px solid currentColor;\n}\n\n.caption-top {\n  caption-side: top;\n}\n\n.table-sm > :not(caption) > * > * {\n  padding: 0.25rem 0.25rem;\n}\n\n.table-bordered > :not(caption) > * {\n  border-width: 1px 0;\n}\n\n.table-bordered > :not(caption) > * > * {\n  border-width: 0 1px;\n}\n\n.table-borderless > :not(caption) > * > * {\n  border-bottom-width: 0;\n}\n\n.table-borderless > :not(:first-child) {\n  border-top-width: 0;\n}\n\n.table-striped > tbody > tr:nth-of-type(odd) > * {\n  --bs-table-accent-bg: var(--bs-table-striped-bg);\n  color: var(--bs-table-striped-color);\n}\n\n.table-active {\n  --bs-table-accent-bg: var(--bs-table-active-bg);\n  color: var(--bs-table-active-color);\n}\n\n.table-hover > tbody > tr:hover > * {\n  --bs-table-accent-bg: var(--bs-table-hover-bg);\n  color: var(--bs-table-hover-color);\n}\n\n.table-primary {\n  --bs-table-bg: #f7d3cf;\n  --bs-table-striped-bg: #ebc8c5;\n  --bs-table-striped-color: #000;\n  --bs-table-active-bg: #debeba;\n  --bs-table-active-color: #000;\n  --bs-table-hover-bg: #e4c3bf;\n  --bs-table-hover-color: #000;\n  color: #000;\n  border-color: #debeba;\n}\n\n.table-secondary {\n  --bs-table-bg: white;\n  --bs-table-striped-bg: #f2f2f2;\n  --bs-table-striped-color: #000;\n  --bs-table-active-bg: #e6e6e6;\n  --bs-table-active-color: #000;\n  --bs-table-hover-bg: #ececec;\n  --bs-table-hover-color: #000;\n  color: #000;\n  border-color: #e6e6e6;\n}\n\n.table-success {\n  --bs-table-bg: #daeace;\n  --bs-table-striped-bg: #cfdec4;\n  --bs-table-striped-color: #000;\n  --bs-table-active-bg: #c4d3b9;\n  --bs-table-active-color: #000;\n  --bs-table-hover-bg: #cad8bf;\n  --bs-table-hover-color: #000;\n  color: #000;\n  border-color: #c4d3b9;\n}\n\n.table-info {\n  --bs-table-bg: #ccebf5;\n  --bs-table-striped-bg: #c2dfe9;\n  --bs-table-striped-color: #000;\n  --bs-table-active-bg: #b8d4dd;\n  --bs-table-active-color: #000;\n  --bs-table-hover-bg: #bdd9e3;\n  --bs-table-hover-color: #000;\n  color: #000;\n  border-color: #b8d4dd;\n}\n\n.table-warning {\n  --bs-table-bg: #f7e6d2;\n  --bs-table-striped-bg: #ebdbc8;\n  --bs-table-striped-color: #000;\n  --bs-table-active-bg: #decfbd;\n  --bs-table-active-color: #000;\n  --bs-table-hover-bg: #e4d5c2;\n  --bs-table-hover-color: #000;\n  color: #000;\n  border-color: #decfbd;\n}\n\n.table-danger {\n  --bs-table-bg: #ebdaec;\n  --bs-table-striped-bg: #dfcfe0;\n  --bs-table-striped-color: #000;\n  --bs-table-active-bg: #d4c4d4;\n  --bs-table-active-color: #000;\n  --bs-table-hover-bg: #d9cada;\n  --bs-table-hover-color: #000;\n  color: #000;\n  border-color: #d4c4d4;\n}\n\n.table-light {\n  --bs-table-bg: #fff;\n  --bs-table-striped-bg: #f2f2f2;\n  --bs-table-striped-color: #000;\n  --bs-table-active-bg: #e6e6e6;\n  --bs-table-active-color: #000;\n  --bs-table-hover-bg: #ececec;\n  --bs-table-hover-color: #000;\n  color: #000;\n  border-color: #e6e6e6;\n}\n\n.table-dark {\n  --bs-table-bg: #373a3c;\n  --bs-table-striped-bg: #414446;\n  --bs-table-striped-color: #fff;\n  --bs-table-active-bg: #4b4e50;\n  --bs-table-active-color: #fff;\n  --bs-table-hover-bg: #46494b;\n  --bs-table-hover-color: #fff;\n  color: #fff;\n  border-color: #4b4e50;\n}\n\n.table-responsive {\n  overflow-x: auto;\n  -webkit-overflow-scrolling: touch;\n}\n\n@media (max-width: 575.98px) {\n  .table-responsive-sm {\n    overflow-x: auto;\n    -webkit-overflow-scrolling: touch;\n  }\n}\n\n@media (max-width: 767.98px) {\n  .table-responsive-md {\n    overflow-x: auto;\n    -webkit-overflow-scrolling: touch;\n  }\n}\n\n@media (max-width: 991.98px) {\n  .table-responsive-lg {\n    overflow-x: auto;\n    -webkit-overflow-scrolling: touch;\n  }\n}\n\n@media (max-width: 1199.98px) {\n  .table-responsive-xl {\n    overflow-x: auto;\n    -webkit-overflow-scrolling: touch;\n  }\n}\n\n@media (max-width: 1399.98px) {\n  .table-responsive-xxl {\n    overflow-x: auto;\n    -webkit-overflow-scrolling: touch;\n  }\n}\n\n.form-label {\n  margin-bottom: 0.5rem;\n}\n\n.col-form-label {\n  padding-top: calc(0.375rem + 1px);\n  padding-bottom: calc(0.375rem + 1px);\n  margin-bottom: 0;\n  font-size: inherit;\n  line-height: 1.5;\n}\n\n.col-form-label-lg {\n  padding-top: calc(0.5rem + 1px);\n  padding-bottom: calc(0.5rem + 1px);\n  font-size: 1.25rem;\n}\n\n.col-form-label-sm {\n  padding-top: calc(0.25rem + 1px);\n  padding-bottom: calc(0.25rem + 1px);\n  font-size: 0.875rem;\n}\n\n.form-text {\n  margin-top: 0.25rem;\n  font-size: 0.875em;\n  color: #777;\n}\n\n.form-control {\n  display: block;\n  width: 100%;\n  padding: 0.375rem 0.75rem;\n  font-size: 1rem;\n  font-weight: 400;\n  line-height: 1.5;\n  color: #212529;\n  background-color: #fcfcfc;\n  background-clip: padding-box;\n  border: 1px solid #bbb;\n  -webkit-appearance: none;\n  -moz-appearance: none;\n  appearance: none;\n  border-radius: 0.25rem;\n  transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .form-control {\n    transition: none;\n  }\n}\n\n.form-control[type=\"file\"] {\n  overflow: hidden;\n}\n\n.form-control[type=\"file\"]:not(:disabled):not([readonly]) {\n  cursor: pointer;\n}\n\n.form-control:focus {\n  color: #212529;\n  background-color: #fcfcfc;\n  border-color: #ec9187;\n  outline: 0;\n  box-shadow: 0 0 0 0.25rem rgba(217, 35, 15, 0.25);\n}\n\n.form-control::-webkit-date-and-time-value {\n  height: 1.5em;\n}\n\n.form-control::-webkit-input-placeholder {\n  color: #777;\n  opacity: 1;\n}\n\n.form-control::-moz-placeholder {\n  color: #777;\n  opacity: 1;\n}\n\n.form-control:-ms-input-placeholder {\n  color: #777;\n  opacity: 1;\n}\n\n.form-control::-ms-input-placeholder {\n  color: #777;\n  opacity: 1;\n}\n\n.form-control::placeholder {\n  color: #777;\n  opacity: 1;\n}\n\n.form-control:disabled, .form-control[readonly] {\n  background-color: #ddd;\n  opacity: 1;\n}\n\n.form-control::file-selector-button {\n  padding: 0.375rem 0.75rem;\n  margin: -0.375rem -0.75rem;\n  -webkit-margin-end: 0.75rem;\n  -moz-margin-end: 0.75rem;\n  margin-inline-end: 0.75rem;\n  color: #212529;\n  background-color: #ddd;\n  pointer-events: none;\n  border-color: inherit;\n  border-style: solid;\n  border-width: 0;\n  border-inline-end-width: 1px;\n  border-radius: 0;\n  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .form-control::file-selector-button {\n    transition: none;\n  }\n}\n\n.form-control:hover:not(:disabled):not([readonly])::file-selector-button {\n  background-color: #d2d2d2;\n}\n\n.form-control::-webkit-file-upload-button {\n  padding: 0.375rem 0.75rem;\n  margin: -0.375rem -0.75rem;\n  -webkit-margin-end: 0.75rem;\n  margin-inline-end: 0.75rem;\n  color: #212529;\n  background-color: #ddd;\n  pointer-events: none;\n  border-color: inherit;\n  border-style: solid;\n  border-width: 0;\n  border-inline-end-width: 1px;\n  border-radius: 0;\n  -webkit-transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .form-control::-webkit-file-upload-button {\n    -webkit-transition: none;\n    transition: none;\n  }\n}\n\n.form-control:hover:not(:disabled):not([readonly])::-webkit-file-upload-button {\n  background-color: #d2d2d2;\n}\n\n.form-control-plaintext {\n  display: block;\n  width: 100%;\n  padding: 0.375rem 0;\n  margin-bottom: 0;\n  line-height: 1.5;\n  color: #212529;\n  background-color: transparent;\n  border: solid transparent;\n  border-width: 1px 0;\n}\n\n.form-control-plaintext.form-control-sm, .form-control-plaintext.form-control-lg {\n  padding-right: 0;\n  padding-left: 0;\n}\n\n.form-control-sm {\n  min-height: calc(1.5em + 0.5rem + 2px);\n  padding: 0.25rem 0.5rem;\n  font-size: 0.875rem;\n  border-radius: 0.2rem;\n}\n\n.form-control-sm::file-selector-button {\n  padding: 0.25rem 0.5rem;\n  margin: -0.25rem -0.5rem;\n  -webkit-margin-end: 0.5rem;\n  -moz-margin-end: 0.5rem;\n  margin-inline-end: 0.5rem;\n}\n\n.form-control-sm::-webkit-file-upload-button {\n  padding: 0.25rem 0.5rem;\n  margin: -0.25rem -0.5rem;\n  -webkit-margin-end: 0.5rem;\n  margin-inline-end: 0.5rem;\n}\n\n.form-control-lg {\n  min-height: calc(1.5em + 1rem + 2px);\n  padding: 0.5rem 1rem;\n  font-size: 1.25rem;\n  border-radius: 0.3rem;\n}\n\n.form-control-lg::file-selector-button {\n  padding: 0.5rem 1rem;\n  margin: -0.5rem -1rem;\n  -webkit-margin-end: 1rem;\n  -moz-margin-end: 1rem;\n  margin-inline-end: 1rem;\n}\n\n.form-control-lg::-webkit-file-upload-button {\n  padding: 0.5rem 1rem;\n  margin: -0.5rem -1rem;\n  -webkit-margin-end: 1rem;\n  margin-inline-end: 1rem;\n}\n\ntextarea.form-control {\n  min-height: calc(1.5em + 0.75rem + 2px);\n}\n\ntextarea.form-control-sm {\n  min-height: calc(1.5em + 0.5rem + 2px);\n}\n\ntextarea.form-control-lg {\n  min-height: calc(1.5em + 1rem + 2px);\n}\n\n.form-control-color {\n  width: 3rem;\n  height: auto;\n  padding: 0.375rem;\n}\n\n.form-control-color:not(:disabled):not([readonly]) {\n  cursor: pointer;\n}\n\n.form-control-color::-moz-color-swatch {\n  height: 1.5em;\n  border-radius: 0.25rem;\n}\n\n.form-control-color::-webkit-color-swatch {\n  height: 1.5em;\n  border-radius: 0.25rem;\n}\n\n.form-select {\n  display: block;\n  width: 100%;\n  padding: 0.375rem 2.25rem 0.375rem 0.75rem;\n  -moz-padding-start: calc(0.75rem - 3px);\n  font-size: 1rem;\n  font-weight: 400;\n  line-height: 1.5;\n  color: #212529;\n  background-color: #fcfcfc;\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23373a3c' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e\");\n  background-repeat: no-repeat;\n  background-position: right 0.75rem center;\n  background-size: 16px 12px;\n  border: 1px solid #bbb;\n  border-radius: 0.25rem;\n  transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n  -webkit-appearance: none;\n  -moz-appearance: none;\n  appearance: none;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .form-select {\n    transition: none;\n  }\n}\n\n.form-select:focus {\n  border-color: #ec9187;\n  outline: 0;\n  box-shadow: 0 0 0 0.25rem rgba(217, 35, 15, 0.25);\n}\n\n.form-select[multiple], .form-select[size]:not([size=\"1\"]) {\n  padding-right: 0.75rem;\n  background-image: none;\n}\n\n.form-select:disabled {\n  background-color: #ddd;\n}\n\n.form-select:-moz-focusring {\n  color: transparent;\n  text-shadow: 0 0 0 #212529;\n}\n\n.form-select-sm {\n  padding-top: 0.25rem;\n  padding-bottom: 0.25rem;\n  padding-left: 0.5rem;\n  font-size: 0.875rem;\n  border-radius: 0.2rem;\n}\n\n.form-select-lg {\n  padding-top: 0.5rem;\n  padding-bottom: 0.5rem;\n  padding-left: 1rem;\n  font-size: 1.25rem;\n  border-radius: 0.3rem;\n}\n\n.form-check {\n  display: block;\n  min-height: 1.5rem;\n  padding-left: 1.5em;\n  margin-bottom: 0.125rem;\n}\n\n.form-check .form-check-input {\n  float: left;\n  margin-left: -1.5em;\n}\n\n.form-check-input {\n  width: 1em;\n  height: 1em;\n  margin-top: 0.25em;\n  vertical-align: top;\n  background-color: #fcfcfc;\n  background-repeat: no-repeat;\n  background-position: center;\n  background-size: contain;\n  border: 1px solid rgba(0, 0, 0, 0.25);\n  -webkit-appearance: none;\n  -moz-appearance: none;\n  appearance: none;\n  -webkit-print-color-adjust: exact;\n  color-adjust: exact;\n}\n\n.form-check-input[type=\"checkbox\"] {\n  border-radius: 0.25em;\n}\n\n.form-check-input[type=\"radio\"] {\n  border-radius: 50%;\n}\n\n.form-check-input:active {\n  -webkit-filter: brightness(90%);\n  filter: brightness(90%);\n}\n\n.form-check-input:focus {\n  border-color: #ec9187;\n  outline: 0;\n  box-shadow: 0 0 0 0.25rem rgba(217, 35, 15, 0.25);\n}\n\n.form-check-input:checked {\n  background-color: #d9230f;\n  border-color: #d9230f;\n}\n\n.form-check-input:checked[type=\"checkbox\"] {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10l3 3l6-6'/%3e%3c/svg%3e\");\n}\n\n.form-check-input:checked[type=\"radio\"] {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='2' fill='%23fff'/%3e%3c/svg%3e\");\n}\n\n.form-check-input[type=\"checkbox\"]:indeterminate {\n  background-color: #d9230f;\n  border-color: #d9230f;\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10h8'/%3e%3c/svg%3e\");\n}\n\n.form-check-input:disabled {\n  pointer-events: none;\n  -webkit-filter: none;\n  filter: none;\n  opacity: 0.5;\n}\n\n.form-check-input[disabled] ~ .form-check-label, .form-check-input:disabled ~ .form-check-label {\n  opacity: 0.5;\n}\n\n.form-switch {\n  padding-left: 2.5em;\n}\n\n.form-switch .form-check-input {\n  width: 2em;\n  margin-left: -2.5em;\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%280, 0, 0, 0.25%29'/%3e%3c/svg%3e\");\n  background-position: left center;\n  border-radius: 2em;\n  transition: background-position 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .form-switch .form-check-input {\n    transition: none;\n  }\n}\n\n.form-switch .form-check-input:focus {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23ec9187'/%3e%3c/svg%3e\");\n}\n\n.form-switch .form-check-input:checked {\n  background-position: right center;\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e\");\n}\n\n.form-check-inline {\n  display: inline-block;\n  margin-right: 1rem;\n}\n\n.btn-check {\n  position: absolute;\n  clip: rect(0, 0, 0, 0);\n  pointer-events: none;\n}\n\n.btn-check[disabled] + .btn, .btn-check:disabled + .btn {\n  pointer-events: none;\n  -webkit-filter: none;\n  filter: none;\n  opacity: 0.65;\n}\n\n.form-range {\n  width: 100%;\n  height: 1.5rem;\n  padding: 0;\n  background-color: transparent;\n  -webkit-appearance: none;\n  -moz-appearance: none;\n  appearance: none;\n}\n\n.form-range:focus {\n  outline: 0;\n}\n\n.form-range:focus::-webkit-slider-thumb {\n  box-shadow: 0 0 0 1px #fcfcfc, 0 0 0 0.25rem rgba(217, 35, 15, 0.25);\n}\n\n.form-range:focus::-moz-range-thumb {\n  box-shadow: 0 0 0 1px #fcfcfc, 0 0 0 0.25rem rgba(217, 35, 15, 0.25);\n}\n\n.form-range::-moz-focus-outer {\n  border: 0;\n}\n\n.form-range::-webkit-slider-thumb {\n  width: 1rem;\n  height: 1rem;\n  margin-top: -0.25rem;\n  background-color: #d9230f;\n  border: 0;\n  border-radius: 1rem;\n  -webkit-transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n  transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n  -webkit-appearance: none;\n  appearance: none;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .form-range::-webkit-slider-thumb {\n    -webkit-transition: none;\n    transition: none;\n  }\n}\n\n.form-range::-webkit-slider-thumb:active {\n  background-color: #f4bdb7;\n}\n\n.form-range::-webkit-slider-runnable-track {\n  width: 100%;\n  height: 0.5rem;\n  color: transparent;\n  cursor: pointer;\n  background-color: #ccc;\n  border-color: transparent;\n  border-radius: 1rem;\n}\n\n.form-range::-moz-range-thumb {\n  width: 1rem;\n  height: 1rem;\n  background-color: #d9230f;\n  border: 0;\n  border-radius: 1rem;\n  -moz-transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n  transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n  -moz-appearance: none;\n  appearance: none;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .form-range::-moz-range-thumb {\n    -moz-transition: none;\n    transition: none;\n  }\n}\n\n.form-range::-moz-range-thumb:active {\n  background-color: #f4bdb7;\n}\n\n.form-range::-moz-range-track {\n  width: 100%;\n  height: 0.5rem;\n  color: transparent;\n  cursor: pointer;\n  background-color: #ccc;\n  border-color: transparent;\n  border-radius: 1rem;\n}\n\n.form-range:disabled {\n  pointer-events: none;\n}\n\n.form-range:disabled::-webkit-slider-thumb {\n  background-color: #adb5bd;\n}\n\n.form-range:disabled::-moz-range-thumb {\n  background-color: #adb5bd;\n}\n\n.form-floating {\n  position: relative;\n}\n\n.form-floating > .form-control,\n.form-floating > .form-select {\n  height: calc(3.5rem + 2px);\n  line-height: 1.25;\n}\n\n.form-floating > label {\n  position: absolute;\n  top: 0;\n  left: 0;\n  height: 100%;\n  padding: 1rem 0.75rem;\n  pointer-events: none;\n  border: 1px solid transparent;\n  -webkit-transform-origin: 0 0;\n  transform-origin: 0 0;\n  transition: opacity 0.1s ease-in-out, -webkit-transform 0.1s ease-in-out;\n  transition: opacity 0.1s ease-in-out, transform 0.1s ease-in-out;\n  transition: opacity 0.1s ease-in-out, transform 0.1s ease-in-out, -webkit-transform 0.1s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .form-floating > label {\n    transition: none;\n  }\n}\n\n.form-floating > .form-control {\n  padding: 1rem 0.75rem;\n}\n\n.form-floating > .form-control::-webkit-input-placeholder {\n  color: transparent;\n}\n\n.form-floating > .form-control::-moz-placeholder {\n  color: transparent;\n}\n\n.form-floating > .form-control:-ms-input-placeholder {\n  color: transparent;\n}\n\n.form-floating > .form-control::-ms-input-placeholder {\n  color: transparent;\n}\n\n.form-floating > .form-control::placeholder {\n  color: transparent;\n}\n\n.form-floating > .form-control:not(:-moz-placeholder-shown) {\n  padding-top: 1.625rem;\n  padding-bottom: 0.625rem;\n}\n\n.form-floating > .form-control:not(:-ms-input-placeholder) {\n  padding-top: 1.625rem;\n  padding-bottom: 0.625rem;\n}\n\n.form-floating > .form-control:focus, .form-floating > .form-control:not(:placeholder-shown) {\n  padding-top: 1.625rem;\n  padding-bottom: 0.625rem;\n}\n\n.form-floating > .form-control:-webkit-autofill {\n  padding-top: 1.625rem;\n  padding-bottom: 0.625rem;\n}\n\n.form-floating > .form-select {\n  padding-top: 1.625rem;\n  padding-bottom: 0.625rem;\n}\n\n.form-floating > .form-control:not(:-moz-placeholder-shown) ~ label {\n  opacity: 0.65;\n  transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);\n}\n\n.form-floating > .form-control:not(:-ms-input-placeholder) ~ label {\n  opacity: 0.65;\n  transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);\n}\n\n.form-floating > .form-control:focus ~ label,\n.form-floating > .form-control:not(:placeholder-shown) ~ label,\n.form-floating > .form-select ~ label {\n  opacity: 0.65;\n  -webkit-transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);\n  transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);\n}\n\n.form-floating > .form-control:-webkit-autofill ~ label {\n  opacity: 0.65;\n  -webkit-transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);\n  transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);\n}\n\n.input-group {\n  position: relative;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n  flex-wrap: wrap;\n  -ms-flex-align: stretch;\n  align-items: stretch;\n  width: 100%;\n}\n\n.input-group > .form-control,\n.input-group > .form-select {\n  position: relative;\n  -ms-flex: 1 1 auto;\n  flex: 1 1 auto;\n  width: 1%;\n  min-width: 0;\n}\n\n.input-group > .form-control:focus,\n.input-group > .form-select:focus {\n  z-index: 3;\n}\n\n.input-group .btn {\n  position: relative;\n  z-index: 2;\n}\n\n.input-group .btn:focus {\n  z-index: 3;\n}\n\n.input-group-text {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-align: center;\n  align-items: center;\n  padding: 0.375rem 0.75rem;\n  font-size: 1rem;\n  font-weight: 400;\n  line-height: 1.5;\n  color: #212529;\n  text-align: center;\n  white-space: nowrap;\n  background-color: #ddd;\n  border: 1px solid #bbb;\n  border-radius: 0.25rem;\n}\n\n.input-group-lg > .form-control,\n.input-group-lg > .form-select,\n.input-group-lg > .input-group-text,\n.input-group-lg > .btn {\n  padding: 0.5rem 1rem;\n  font-size: 1.25rem;\n  border-radius: 0.3rem;\n}\n\n.input-group-sm > .form-control,\n.input-group-sm > .form-select,\n.input-group-sm > .input-group-text,\n.input-group-sm > .btn {\n  padding: 0.25rem 0.5rem;\n  font-size: 0.875rem;\n  border-radius: 0.2rem;\n}\n\n.input-group-lg > .form-select,\n.input-group-sm > .form-select {\n  padding-right: 3rem;\n}\n\n.input-group:not(.has-validation) > :not(:last-child):not(.dropdown-toggle):not(.dropdown-menu),\n.input-group:not(.has-validation) > .dropdown-toggle:nth-last-child(n + 3) {\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n}\n\n.input-group.has-validation > :nth-last-child(n + 3):not(.dropdown-toggle):not(.dropdown-menu),\n.input-group.has-validation > .dropdown-toggle:nth-last-child(n + 4) {\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n}\n\n.input-group > :not(:first-child):not(.dropdown-menu):not(.valid-tooltip):not(.valid-feedback):not(.invalid-tooltip):not(.invalid-feedback) {\n  margin-left: -1px;\n  border-top-left-radius: 0;\n  border-bottom-left-radius: 0;\n}\n\n.valid-feedback {\n  display: none;\n  width: 100%;\n  margin-top: 0.25rem;\n  font-size: 0.875em;\n  color: #469408;\n}\n\n.valid-tooltip {\n  position: absolute;\n  top: 100%;\n  z-index: 5;\n  display: none;\n  max-width: 100%;\n  padding: 0.25rem 0.5rem;\n  margin-top: .1rem;\n  font-size: 0.875rem;\n  color: #fff;\n  background-color: rgba(70, 148, 8, 0.9);\n  border-radius: 0.25rem;\n}\n\n.was-validated :valid ~ .valid-feedback,\n.was-validated :valid ~ .valid-tooltip,\n.is-valid ~ .valid-feedback,\n.is-valid ~ .valid-tooltip {\n  display: block;\n}\n\n.was-validated .form-control:valid, .form-control.is-valid {\n  border-color: #469408;\n  padding-right: calc(1.5em + 0.75rem);\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23469408' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e\");\n  background-repeat: no-repeat;\n  background-position: right calc(0.375em + 0.1875rem) center;\n  background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n\n.was-validated .form-control:valid:focus, .form-control.is-valid:focus {\n  border-color: #469408;\n  box-shadow: 0 0 0 0.25rem rgba(70, 148, 8, 0.25);\n}\n\n.was-validated textarea.form-control:valid, textarea.form-control.is-valid {\n  padding-right: calc(1.5em + 0.75rem);\n  background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem);\n}\n\n.was-validated .form-select:valid, .form-select.is-valid {\n  border-color: #469408;\n}\n\n.was-validated .form-select:valid:not([multiple]):not([size]), .was-validated .form-select:valid:not([multiple])[size=\"1\"], .form-select.is-valid:not([multiple]):not([size]), .form-select.is-valid:not([multiple])[size=\"1\"] {\n  padding-right: 4.125rem;\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23373a3c' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e\"), url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23469408' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e\");\n  background-position: right 0.75rem center, center right 2.25rem;\n  background-size: 16px 12px, calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n\n.was-validated .form-select:valid:focus, .form-select.is-valid:focus {\n  border-color: #469408;\n  box-shadow: 0 0 0 0.25rem rgba(70, 148, 8, 0.25);\n}\n\n.was-validated .form-check-input:valid, .form-check-input.is-valid {\n  border-color: #469408;\n}\n\n.was-validated .form-check-input:valid:checked, .form-check-input.is-valid:checked {\n  background-color: #469408;\n}\n\n.was-validated .form-check-input:valid:focus, .form-check-input.is-valid:focus {\n  box-shadow: 0 0 0 0.25rem rgba(70, 148, 8, 0.25);\n}\n\n.was-validated .form-check-input:valid ~ .form-check-label, .form-check-input.is-valid ~ .form-check-label {\n  color: #469408;\n}\n\n.form-check-inline .form-check-input ~ .valid-feedback {\n  margin-left: .5em;\n}\n\n.was-validated .input-group .form-control:valid, .input-group .form-control.is-valid, .was-validated\n.input-group .form-select:valid,\n.input-group .form-select.is-valid {\n  z-index: 1;\n}\n\n.was-validated .input-group .form-control:valid:focus, .input-group .form-control.is-valid:focus, .was-validated\n.input-group .form-select:valid:focus,\n.input-group .form-select.is-valid:focus {\n  z-index: 3;\n}\n\n.invalid-feedback {\n  display: none;\n  width: 100%;\n  margin-top: 0.25rem;\n  font-size: 0.875em;\n  color: #9b479f;\n}\n\n.invalid-tooltip {\n  position: absolute;\n  top: 100%;\n  z-index: 5;\n  display: none;\n  max-width: 100%;\n  padding: 0.25rem 0.5rem;\n  margin-top: .1rem;\n  font-size: 0.875rem;\n  color: #fff;\n  background-color: rgba(155, 71, 159, 0.9);\n  border-radius: 0.25rem;\n}\n\n.was-validated :invalid ~ .invalid-feedback,\n.was-validated :invalid ~ .invalid-tooltip,\n.is-invalid ~ .invalid-feedback,\n.is-invalid ~ .invalid-tooltip {\n  display: block;\n}\n\n.was-validated .form-control:invalid, .form-control.is-invalid {\n  border-color: #9b479f;\n  padding-right: calc(1.5em + 0.75rem);\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%239b479f'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%239b479f' stroke='none'/%3e%3c/svg%3e\");\n  background-repeat: no-repeat;\n  background-position: right calc(0.375em + 0.1875rem) center;\n  background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n\n.was-validated .form-control:invalid:focus, .form-control.is-invalid:focus {\n  border-color: #9b479f;\n  box-shadow: 0 0 0 0.25rem rgba(155, 71, 159, 0.25);\n}\n\n.was-validated textarea.form-control:invalid, textarea.form-control.is-invalid {\n  padding-right: calc(1.5em + 0.75rem);\n  background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem);\n}\n\n.was-validated .form-select:invalid, .form-select.is-invalid {\n  border-color: #9b479f;\n}\n\n.was-validated .form-select:invalid:not([multiple]):not([size]), .was-validated .form-select:invalid:not([multiple])[size=\"1\"], .form-select.is-invalid:not([multiple]):not([size]), .form-select.is-invalid:not([multiple])[size=\"1\"] {\n  padding-right: 4.125rem;\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23373a3c' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e\"), url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%239b479f'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%239b479f' stroke='none'/%3e%3c/svg%3e\");\n  background-position: right 0.75rem center, center right 2.25rem;\n  background-size: 16px 12px, calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n\n.was-validated .form-select:invalid:focus, .form-select.is-invalid:focus {\n  border-color: #9b479f;\n  box-shadow: 0 0 0 0.25rem rgba(155, 71, 159, 0.25);\n}\n\n.was-validated .form-check-input:invalid, .form-check-input.is-invalid {\n  border-color: #9b479f;\n}\n\n.was-validated .form-check-input:invalid:checked, .form-check-input.is-invalid:checked {\n  background-color: #9b479f;\n}\n\n.was-validated .form-check-input:invalid:focus, .form-check-input.is-invalid:focus {\n  box-shadow: 0 0 0 0.25rem rgba(155, 71, 159, 0.25);\n}\n\n.was-validated .form-check-input:invalid ~ .form-check-label, .form-check-input.is-invalid ~ .form-check-label {\n  color: #9b479f;\n}\n\n.form-check-inline .form-check-input ~ .invalid-feedback {\n  margin-left: .5em;\n}\n\n.was-validated .input-group .form-control:invalid, .input-group .form-control.is-invalid, .was-validated\n.input-group .form-select:invalid,\n.input-group .form-select.is-invalid {\n  z-index: 2;\n}\n\n.was-validated .input-group .form-control:invalid:focus, .input-group .form-control.is-invalid:focus, .was-validated\n.input-group .form-select:invalid:focus,\n.input-group .form-select.is-invalid:focus {\n  z-index: 3;\n}\n\n.btn {\n  display: inline-block;\n  font-weight: 400;\n  line-height: 1.5;\n  color: #212529;\n  text-align: center;\n  text-decoration: none;\n  vertical-align: middle;\n  cursor: pointer;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  user-select: none;\n  background-color: transparent;\n  border: 1px solid transparent;\n  padding: 0.375rem 0.75rem;\n  font-size: 1rem;\n  border-radius: 0.25rem;\n  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .btn {\n    transition: none;\n  }\n}\n\n.btn:hover {\n  color: #212529;\n}\n\n.btn-check:focus + .btn, .btn:focus {\n  outline: 0;\n  box-shadow: 0 0 0 0.25rem rgba(217, 35, 15, 0.25);\n}\n\n.btn:disabled, .btn.disabled,\nfieldset:disabled .btn {\n  pointer-events: none;\n  opacity: 0.65;\n}\n\n.btn-primary {\n  color: #fff;\n  background-color: #d9230f;\n  border-color: #d9230f;\n}\n\n.btn-primary:hover {\n  color: #fff;\n  background-color: #b81e0d;\n  border-color: #ae1c0c;\n}\n\n.btn-check:focus + .btn-primary, .btn-primary:focus {\n  color: #fff;\n  background-color: #b81e0d;\n  border-color: #ae1c0c;\n  box-shadow: 0 0 0 0.25rem rgba(223, 68, 51, 0.5);\n}\n\n.btn-check:checked + .btn-primary,\n.btn-check:active + .btn-primary, .btn-primary:active, .btn-primary.active,\n.show > .btn-primary.dropdown-toggle {\n  color: #fff;\n  background-color: #ae1c0c;\n  border-color: #a31a0b;\n}\n\n.btn-check:checked + .btn-primary:focus,\n.btn-check:active + .btn-primary:focus, .btn-primary:active:focus, .btn-primary.active:focus,\n.show > .btn-primary.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.25rem rgba(223, 68, 51, 0.5);\n}\n\n.btn-primary:disabled, .btn-primary.disabled {\n  color: #fff;\n  background-color: #d9230f;\n  border-color: #d9230f;\n}\n\n.btn-secondary {\n  color: #000;\n  background-color: #fff;\n  border-color: #fff;\n}\n\n.btn-secondary:hover {\n  color: #000;\n  background-color: white;\n  border-color: white;\n}\n\n.btn-check:focus + .btn-secondary, .btn-secondary:focus {\n  color: #000;\n  background-color: white;\n  border-color: white;\n  box-shadow: 0 0 0 0.25rem rgba(217, 217, 217, 0.5);\n}\n\n.btn-check:checked + .btn-secondary,\n.btn-check:active + .btn-secondary, .btn-secondary:active, .btn-secondary.active,\n.show > .btn-secondary.dropdown-toggle {\n  color: #000;\n  background-color: white;\n  border-color: white;\n}\n\n.btn-check:checked + .btn-secondary:focus,\n.btn-check:active + .btn-secondary:focus, .btn-secondary:active:focus, .btn-secondary.active:focus,\n.show > .btn-secondary.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.25rem rgba(217, 217, 217, 0.5);\n}\n\n.btn-secondary:disabled, .btn-secondary.disabled {\n  color: #000;\n  background-color: #fff;\n  border-color: #fff;\n}\n\n.btn-success {\n  color: #fff;\n  background-color: #469408;\n  border-color: #469408;\n}\n\n.btn-success:hover {\n  color: #fff;\n  background-color: #3c7e07;\n  border-color: #387606;\n}\n\n.btn-check:focus + .btn-success, .btn-success:focus {\n  color: #fff;\n  background-color: #3c7e07;\n  border-color: #387606;\n  box-shadow: 0 0 0 0.25rem rgba(98, 164, 45, 0.5);\n}\n\n.btn-check:checked + .btn-success,\n.btn-check:active + .btn-success, .btn-success:active, .btn-success.active,\n.show > .btn-success.dropdown-toggle {\n  color: #fff;\n  background-color: #387606;\n  border-color: #356f06;\n}\n\n.btn-check:checked + .btn-success:focus,\n.btn-check:active + .btn-success:focus, .btn-success:active:focus, .btn-success.active:focus,\n.show > .btn-success.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.25rem rgba(98, 164, 45, 0.5);\n}\n\n.btn-success:disabled, .btn-success.disabled {\n  color: #fff;\n  background-color: #469408;\n  border-color: #469408;\n}\n\n.btn-info {\n  color: #fff;\n  background-color: #029acf;\n  border-color: #029acf;\n}\n\n.btn-info:hover {\n  color: #fff;\n  background-color: #0283b0;\n  border-color: #027ba6;\n}\n\n.btn-check:focus + .btn-info, .btn-info:focus {\n  color: #fff;\n  background-color: #0283b0;\n  border-color: #027ba6;\n  box-shadow: 0 0 0 0.25rem rgba(40, 169, 214, 0.5);\n}\n\n.btn-check:checked + .btn-info,\n.btn-check:active + .btn-info, .btn-info:active, .btn-info.active,\n.show > .btn-info.dropdown-toggle {\n  color: #fff;\n  background-color: #027ba6;\n  border-color: #02749b;\n}\n\n.btn-check:checked + .btn-info:focus,\n.btn-check:active + .btn-info:focus, .btn-info:active:focus, .btn-info.active:focus,\n.show > .btn-info.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.25rem rgba(40, 169, 214, 0.5);\n}\n\n.btn-info:disabled, .btn-info.disabled {\n  color: #fff;\n  background-color: #029acf;\n  border-color: #029acf;\n}\n\n.btn-warning {\n  color: #fff;\n  background-color: #d9831f;\n  border-color: #d9831f;\n}\n\n.btn-warning:hover {\n  color: #fff;\n  background-color: #b86f1a;\n  border-color: #ae6919;\n}\n\n.btn-check:focus + .btn-warning, .btn-warning:focus {\n  color: #fff;\n  background-color: #b86f1a;\n  border-color: #ae6919;\n  box-shadow: 0 0 0 0.25rem rgba(223, 150, 65, 0.5);\n}\n\n.btn-check:checked + .btn-warning,\n.btn-check:active + .btn-warning, .btn-warning:active, .btn-warning.active,\n.show > .btn-warning.dropdown-toggle {\n  color: #fff;\n  background-color: #ae6919;\n  border-color: #a36217;\n}\n\n.btn-check:checked + .btn-warning:focus,\n.btn-check:active + .btn-warning:focus, .btn-warning:active:focus, .btn-warning.active:focus,\n.show > .btn-warning.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.25rem rgba(223, 150, 65, 0.5);\n}\n\n.btn-warning:disabled, .btn-warning.disabled {\n  color: #fff;\n  background-color: #d9831f;\n  border-color: #d9831f;\n}\n\n.btn-danger {\n  color: #fff;\n  background-color: #9b479f;\n  border-color: #9b479f;\n}\n\n.btn-danger:hover {\n  color: #fff;\n  background-color: #843c87;\n  border-color: #7c397f;\n}\n\n.btn-check:focus + .btn-danger, .btn-danger:focus {\n  color: #fff;\n  background-color: #843c87;\n  border-color: #7c397f;\n  box-shadow: 0 0 0 0.25rem rgba(170, 99, 173, 0.5);\n}\n\n.btn-check:checked + .btn-danger,\n.btn-check:active + .btn-danger, .btn-danger:active, .btn-danger.active,\n.show > .btn-danger.dropdown-toggle {\n  color: #fff;\n  background-color: #7c397f;\n  border-color: #743577;\n}\n\n.btn-check:checked + .btn-danger:focus,\n.btn-check:active + .btn-danger:focus, .btn-danger:active:focus, .btn-danger.active:focus,\n.show > .btn-danger.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.25rem rgba(170, 99, 173, 0.5);\n}\n\n.btn-danger:disabled, .btn-danger.disabled {\n  color: #fff;\n  background-color: #9b479f;\n  border-color: #9b479f;\n}\n\n.btn-light {\n  color: #000;\n  background-color: #fff;\n  border-color: #fff;\n}\n\n.btn-light:hover {\n  color: #000;\n  background-color: white;\n  border-color: white;\n}\n\n.btn-check:focus + .btn-light, .btn-light:focus {\n  color: #000;\n  background-color: white;\n  border-color: white;\n  box-shadow: 0 0 0 0.25rem rgba(217, 217, 217, 0.5);\n}\n\n.btn-check:checked + .btn-light,\n.btn-check:active + .btn-light, .btn-light:active, .btn-light.active,\n.show > .btn-light.dropdown-toggle {\n  color: #000;\n  background-color: white;\n  border-color: white;\n}\n\n.btn-check:checked + .btn-light:focus,\n.btn-check:active + .btn-light:focus, .btn-light:active:focus, .btn-light.active:focus,\n.show > .btn-light.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.25rem rgba(217, 217, 217, 0.5);\n}\n\n.btn-light:disabled, .btn-light.disabled {\n  color: #000;\n  background-color: #fff;\n  border-color: #fff;\n}\n\n.btn-dark {\n  color: #fff;\n  background-color: #373a3c;\n  border-color: #373a3c;\n}\n\n.btn-dark:hover {\n  color: #fff;\n  background-color: #2f3133;\n  border-color: #2c2e30;\n}\n\n.btn-check:focus + .btn-dark, .btn-dark:focus {\n  color: #fff;\n  background-color: #2f3133;\n  border-color: #2c2e30;\n  box-shadow: 0 0 0 0.25rem rgba(85, 88, 89, 0.5);\n}\n\n.btn-check:checked + .btn-dark,\n.btn-check:active + .btn-dark, .btn-dark:active, .btn-dark.active,\n.show > .btn-dark.dropdown-toggle {\n  color: #fff;\n  background-color: #2c2e30;\n  border-color: #292c2d;\n}\n\n.btn-check:checked + .btn-dark:focus,\n.btn-check:active + .btn-dark:focus, .btn-dark:active:focus, .btn-dark.active:focus,\n.show > .btn-dark.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.25rem rgba(85, 88, 89, 0.5);\n}\n\n.btn-dark:disabled, .btn-dark.disabled {\n  color: #fff;\n  background-color: #373a3c;\n  border-color: #373a3c;\n}\n\n.btn-outline-primary {\n  color: #d9230f;\n  border-color: #d9230f;\n}\n\n.btn-outline-primary:hover {\n  color: #fff;\n  background-color: #d9230f;\n  border-color: #d9230f;\n}\n\n.btn-check:focus + .btn-outline-primary, .btn-outline-primary:focus {\n  box-shadow: 0 0 0 0.25rem rgba(217, 35, 15, 0.5);\n}\n\n.btn-check:checked + .btn-outline-primary,\n.btn-check:active + .btn-outline-primary, .btn-outline-primary:active, .btn-outline-primary.active, .btn-outline-primary.dropdown-toggle.show {\n  color: #fff;\n  background-color: #d9230f;\n  border-color: #d9230f;\n}\n\n.btn-check:checked + .btn-outline-primary:focus,\n.btn-check:active + .btn-outline-primary:focus, .btn-outline-primary:active:focus, .btn-outline-primary.active:focus, .btn-outline-primary.dropdown-toggle.show:focus {\n  box-shadow: 0 0 0 0.25rem rgba(217, 35, 15, 0.5);\n}\n\n.btn-outline-primary:disabled, .btn-outline-primary.disabled {\n  color: #d9230f;\n  background-color: transparent;\n}\n\n.btn-outline-secondary {\n  color: #fff;\n  border-color: #fff;\n}\n\n.btn-outline-secondary:hover {\n  color: #000;\n  background-color: #fff;\n  border-color: #fff;\n}\n\n.btn-check:focus + .btn-outline-secondary, .btn-outline-secondary:focus {\n  box-shadow: 0 0 0 0.25rem rgba(255, 255, 255, 0.5);\n}\n\n.btn-check:checked + .btn-outline-secondary,\n.btn-check:active + .btn-outline-secondary, .btn-outline-secondary:active, .btn-outline-secondary.active, .btn-outline-secondary.dropdown-toggle.show {\n  color: #000;\n  background-color: #fff;\n  border-color: #fff;\n}\n\n.btn-check:checked + .btn-outline-secondary:focus,\n.btn-check:active + .btn-outline-secondary:focus, .btn-outline-secondary:active:focus, .btn-outline-secondary.active:focus, .btn-outline-secondary.dropdown-toggle.show:focus {\n  box-shadow: 0 0 0 0.25rem rgba(255, 255, 255, 0.5);\n}\n\n.btn-outline-secondary:disabled, .btn-outline-secondary.disabled {\n  color: #fff;\n  background-color: transparent;\n}\n\n.btn-outline-success {\n  color: #469408;\n  border-color: #469408;\n}\n\n.btn-outline-success:hover {\n  color: #fff;\n  background-color: #469408;\n  border-color: #469408;\n}\n\n.btn-check:focus + .btn-outline-success, .btn-outline-success:focus {\n  box-shadow: 0 0 0 0.25rem rgba(70, 148, 8, 0.5);\n}\n\n.btn-check:checked + .btn-outline-success,\n.btn-check:active + .btn-outline-success, .btn-outline-success:active, .btn-outline-success.active, .btn-outline-success.dropdown-toggle.show {\n  color: #fff;\n  background-color: #469408;\n  border-color: #469408;\n}\n\n.btn-check:checked + .btn-outline-success:focus,\n.btn-check:active + .btn-outline-success:focus, .btn-outline-success:active:focus, .btn-outline-success.active:focus, .btn-outline-success.dropdown-toggle.show:focus {\n  box-shadow: 0 0 0 0.25rem rgba(70, 148, 8, 0.5);\n}\n\n.btn-outline-success:disabled, .btn-outline-success.disabled {\n  color: #469408;\n  background-color: transparent;\n}\n\n.btn-outline-info {\n  color: #029acf;\n  border-color: #029acf;\n}\n\n.btn-outline-info:hover {\n  color: #fff;\n  background-color: #029acf;\n  border-color: #029acf;\n}\n\n.btn-check:focus + .btn-outline-info, .btn-outline-info:focus {\n  box-shadow: 0 0 0 0.25rem rgba(2, 154, 207, 0.5);\n}\n\n.btn-check:checked + .btn-outline-info,\n.btn-check:active + .btn-outline-info, .btn-outline-info:active, .btn-outline-info.active, .btn-outline-info.dropdown-toggle.show {\n  color: #fff;\n  background-color: #029acf;\n  border-color: #029acf;\n}\n\n.btn-check:checked + .btn-outline-info:focus,\n.btn-check:active + .btn-outline-info:focus, .btn-outline-info:active:focus, .btn-outline-info.active:focus, .btn-outline-info.dropdown-toggle.show:focus {\n  box-shadow: 0 0 0 0.25rem rgba(2, 154, 207, 0.5);\n}\n\n.btn-outline-info:disabled, .btn-outline-info.disabled {\n  color: #029acf;\n  background-color: transparent;\n}\n\n.btn-outline-warning {\n  color: #d9831f;\n  border-color: #d9831f;\n}\n\n.btn-outline-warning:hover {\n  color: #fff;\n  background-color: #d9831f;\n  border-color: #d9831f;\n}\n\n.btn-check:focus + .btn-outline-warning, .btn-outline-warning:focus {\n  box-shadow: 0 0 0 0.25rem rgba(217, 131, 31, 0.5);\n}\n\n.btn-check:checked + .btn-outline-warning,\n.btn-check:active + .btn-outline-warning, .btn-outline-warning:active, .btn-outline-warning.active, .btn-outline-warning.dropdown-toggle.show {\n  color: #fff;\n  background-color: #d9831f;\n  border-color: #d9831f;\n}\n\n.btn-check:checked + .btn-outline-warning:focus,\n.btn-check:active + .btn-outline-warning:focus, .btn-outline-warning:active:focus, .btn-outline-warning.active:focus, .btn-outline-warning.dropdown-toggle.show:focus {\n  box-shadow: 0 0 0 0.25rem rgba(217, 131, 31, 0.5);\n}\n\n.btn-outline-warning:disabled, .btn-outline-warning.disabled {\n  color: #d9831f;\n  background-color: transparent;\n}\n\n.btn-outline-danger {\n  color: #9b479f;\n  border-color: #9b479f;\n}\n\n.btn-outline-danger:hover {\n  color: #fff;\n  background-color: #9b479f;\n  border-color: #9b479f;\n}\n\n.btn-check:focus + .btn-outline-danger, .btn-outline-danger:focus {\n  box-shadow: 0 0 0 0.25rem rgba(155, 71, 159, 0.5);\n}\n\n.btn-check:checked + .btn-outline-danger,\n.btn-check:active + .btn-outline-danger, .btn-outline-danger:active, .btn-outline-danger.active, .btn-outline-danger.dropdown-toggle.show {\n  color: #fff;\n  background-color: #9b479f;\n  border-color: #9b479f;\n}\n\n.btn-check:checked + .btn-outline-danger:focus,\n.btn-check:active + .btn-outline-danger:focus, .btn-outline-danger:active:focus, .btn-outline-danger.active:focus, .btn-outline-danger.dropdown-toggle.show:focus {\n  box-shadow: 0 0 0 0.25rem rgba(155, 71, 159, 0.5);\n}\n\n.btn-outline-danger:disabled, .btn-outline-danger.disabled {\n  color: #9b479f;\n  background-color: transparent;\n}\n\n.btn-outline-light {\n  color: #fff;\n  border-color: #fff;\n}\n\n.btn-outline-light:hover {\n  color: #000;\n  background-color: #fff;\n  border-color: #fff;\n}\n\n.btn-check:focus + .btn-outline-light, .btn-outline-light:focus {\n  box-shadow: 0 0 0 0.25rem rgba(255, 255, 255, 0.5);\n}\n\n.btn-check:checked + .btn-outline-light,\n.btn-check:active + .btn-outline-light, .btn-outline-light:active, .btn-outline-light.active, .btn-outline-light.dropdown-toggle.show {\n  color: #000;\n  background-color: #fff;\n  border-color: #fff;\n}\n\n.btn-check:checked + .btn-outline-light:focus,\n.btn-check:active + .btn-outline-light:focus, .btn-outline-light:active:focus, .btn-outline-light.active:focus, .btn-outline-light.dropdown-toggle.show:focus {\n  box-shadow: 0 0 0 0.25rem rgba(255, 255, 255, 0.5);\n}\n\n.btn-outline-light:disabled, .btn-outline-light.disabled {\n  color: #fff;\n  background-color: transparent;\n}\n\n.btn-outline-dark {\n  color: #373a3c;\n  border-color: #373a3c;\n}\n\n.btn-outline-dark:hover {\n  color: #fff;\n  background-color: #373a3c;\n  border-color: #373a3c;\n}\n\n.btn-check:focus + .btn-outline-dark, .btn-outline-dark:focus {\n  box-shadow: 0 0 0 0.25rem rgba(55, 58, 60, 0.5);\n}\n\n.btn-check:checked + .btn-outline-dark,\n.btn-check:active + .btn-outline-dark, .btn-outline-dark:active, .btn-outline-dark.active, .btn-outline-dark.dropdown-toggle.show {\n  color: #fff;\n  background-color: #373a3c;\n  border-color: #373a3c;\n}\n\n.btn-check:checked + .btn-outline-dark:focus,\n.btn-check:active + .btn-outline-dark:focus, .btn-outline-dark:active:focus, .btn-outline-dark.active:focus, .btn-outline-dark.dropdown-toggle.show:focus {\n  box-shadow: 0 0 0 0.25rem rgba(55, 58, 60, 0.5);\n}\n\n.btn-outline-dark:disabled, .btn-outline-dark.disabled {\n  color: #373a3c;\n  background-color: transparent;\n}\n\n.btn-link {\n  font-weight: 400;\n  color: #d9230f;\n  text-decoration: underline;\n}\n\n.btn-link:hover {\n  color: #ae1c0c;\n}\n\n.btn-link:disabled, .btn-link.disabled {\n  color: #777;\n}\n\n.btn-lg, .btn-group-lg > .btn {\n  padding: 0.5rem 1rem;\n  font-size: 1.25rem;\n  border-radius: 0.3rem;\n}\n\n.btn-sm, .btn-group-sm > .btn {\n  padding: 0.25rem 0.5rem;\n  font-size: 0.875rem;\n  border-radius: 0.2rem;\n}\n\n.fade {\n  transition: opacity 0.15s linear;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .fade {\n    transition: none;\n  }\n}\n\n.fade:not(.show) {\n  opacity: 0;\n}\n\n.collapse:not(.show) {\n  display: none;\n}\n\n.collapsing {\n  height: 0;\n  overflow: hidden;\n  transition: height 0.35s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .collapsing {\n    transition: none;\n  }\n}\n\n.collapsing.collapse-horizontal {\n  width: 0;\n  height: auto;\n  transition: width 0.35s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .collapsing.collapse-horizontal {\n    transition: none;\n  }\n}\n\n.dropup,\n.dropend,\n.dropdown,\n.dropstart {\n  position: relative;\n}\n\n.dropdown-toggle {\n  white-space: nowrap;\n}\n\n.dropdown-toggle::after {\n  display: inline-block;\n  margin-left: 0.255em;\n  vertical-align: 0.255em;\n  content: \"\";\n  border-top: 0.3em solid;\n  border-right: 0.3em solid transparent;\n  border-bottom: 0;\n  border-left: 0.3em solid transparent;\n}\n\n.dropdown-toggle:empty::after {\n  margin-left: 0;\n}\n\n.dropdown-menu {\n  position: absolute;\n  z-index: 1000;\n  display: none;\n  min-width: 10rem;\n  padding: 0.5rem 0;\n  margin: 0;\n  font-size: 1rem;\n  color: #212529;\n  text-align: left;\n  list-style: none;\n  background-color: #fff;\n  background-clip: padding-box;\n  border: 1px solid rgba(0, 0, 0, 0.15);\n  border-radius: 0.25rem;\n}\n\n.dropdown-menu[data-bs-popper] {\n  top: 100%;\n  left: 0;\n  margin-top: 0.125rem;\n}\n\n.dropdown-menu-start {\n  --bs-position: start;\n}\n\n.dropdown-menu-start[data-bs-popper] {\n  right: auto;\n  left: 0;\n}\n\n.dropdown-menu-end {\n  --bs-position: end;\n}\n\n.dropdown-menu-end[data-bs-popper] {\n  right: 0;\n  left: auto;\n}\n\n@media (min-width: 576px) {\n  .dropdown-menu-sm-start {\n    --bs-position: start;\n  }\n  .dropdown-menu-sm-start[data-bs-popper] {\n    right: auto;\n    left: 0;\n  }\n  .dropdown-menu-sm-end {\n    --bs-position: end;\n  }\n  .dropdown-menu-sm-end[data-bs-popper] {\n    right: 0;\n    left: auto;\n  }\n}\n\n@media (min-width: 768px) {\n  .dropdown-menu-md-start {\n    --bs-position: start;\n  }\n  .dropdown-menu-md-start[data-bs-popper] {\n    right: auto;\n    left: 0;\n  }\n  .dropdown-menu-md-end {\n    --bs-position: end;\n  }\n  .dropdown-menu-md-end[data-bs-popper] {\n    right: 0;\n    left: auto;\n  }\n}\n\n@media (min-width: 992px) {\n  .dropdown-menu-lg-start {\n    --bs-position: start;\n  }\n  .dropdown-menu-lg-start[data-bs-popper] {\n    right: auto;\n    left: 0;\n  }\n  .dropdown-menu-lg-end {\n    --bs-position: end;\n  }\n  .dropdown-menu-lg-end[data-bs-popper] {\n    right: 0;\n    left: auto;\n  }\n}\n\n@media (min-width: 1200px) {\n  .dropdown-menu-xl-start {\n    --bs-position: start;\n  }\n  .dropdown-menu-xl-start[data-bs-popper] {\n    right: auto;\n    left: 0;\n  }\n  .dropdown-menu-xl-end {\n    --bs-position: end;\n  }\n  .dropdown-menu-xl-end[data-bs-popper] {\n    right: 0;\n    left: auto;\n  }\n}\n\n@media (min-width: 1400px) {\n  .dropdown-menu-xxl-start {\n    --bs-position: start;\n  }\n  .dropdown-menu-xxl-start[data-bs-popper] {\n    right: auto;\n    left: 0;\n  }\n  .dropdown-menu-xxl-end {\n    --bs-position: end;\n  }\n  .dropdown-menu-xxl-end[data-bs-popper] {\n    right: 0;\n    left: auto;\n  }\n}\n\n.dropup .dropdown-menu[data-bs-popper] {\n  top: auto;\n  bottom: 100%;\n  margin-top: 0;\n  margin-bottom: 0.125rem;\n}\n\n.dropup .dropdown-toggle::after {\n  display: inline-block;\n  margin-left: 0.255em;\n  vertical-align: 0.255em;\n  content: \"\";\n  border-top: 0;\n  border-right: 0.3em solid transparent;\n  border-bottom: 0.3em solid;\n  border-left: 0.3em solid transparent;\n}\n\n.dropup .dropdown-toggle:empty::after {\n  margin-left: 0;\n}\n\n.dropend .dropdown-menu[data-bs-popper] {\n  top: 0;\n  right: auto;\n  left: 100%;\n  margin-top: 0;\n  margin-left: 0.125rem;\n}\n\n.dropend .dropdown-toggle::after {\n  display: inline-block;\n  margin-left: 0.255em;\n  vertical-align: 0.255em;\n  content: \"\";\n  border-top: 0.3em solid transparent;\n  border-right: 0;\n  border-bottom: 0.3em solid transparent;\n  border-left: 0.3em solid;\n}\n\n.dropend .dropdown-toggle:empty::after {\n  margin-left: 0;\n}\n\n.dropend .dropdown-toggle::after {\n  vertical-align: 0;\n}\n\n.dropstart .dropdown-menu[data-bs-popper] {\n  top: 0;\n  right: 100%;\n  left: auto;\n  margin-top: 0;\n  margin-right: 0.125rem;\n}\n\n.dropstart .dropdown-toggle::after {\n  display: inline-block;\n  margin-left: 0.255em;\n  vertical-align: 0.255em;\n  content: \"\";\n}\n\n.dropstart .dropdown-toggle::after {\n  display: none;\n}\n\n.dropstart .dropdown-toggle::before {\n  display: inline-block;\n  margin-right: 0.255em;\n  vertical-align: 0.255em;\n  content: \"\";\n  border-top: 0.3em solid transparent;\n  border-right: 0.3em solid;\n  border-bottom: 0.3em solid transparent;\n}\n\n.dropstart .dropdown-toggle:empty::after {\n  margin-left: 0;\n}\n\n.dropstart .dropdown-toggle::before {\n  vertical-align: 0;\n}\n\n.dropdown-divider {\n  height: 0;\n  margin: 0.5rem 0;\n  overflow: hidden;\n  border-top: 1px solid rgba(0, 0, 0, 0.15);\n}\n\n.dropdown-item {\n  display: block;\n  width: 100%;\n  padding: 0.25rem 1rem;\n  clear: both;\n  font-weight: 400;\n  color: #212529;\n  text-align: inherit;\n  text-decoration: none;\n  white-space: nowrap;\n  background-color: transparent;\n  border: 0;\n}\n\n.dropdown-item:hover, .dropdown-item:focus {\n  color: #fff;\n  background-color: #d9230f;\n}\n\n.dropdown-item.active, .dropdown-item:active {\n  color: #fff;\n  text-decoration: none;\n  background-color: #d9230f;\n}\n\n.dropdown-item.disabled, .dropdown-item:disabled {\n  color: #adb5bd;\n  pointer-events: none;\n  background-color: transparent;\n}\n\n.dropdown-menu.show {\n  display: block;\n}\n\n.dropdown-header {\n  display: block;\n  padding: 0.5rem 1rem;\n  margin-bottom: 0;\n  font-size: 0.875rem;\n  color: #777;\n  white-space: nowrap;\n}\n\n.dropdown-item-text {\n  display: block;\n  padding: 0.25rem 1rem;\n  color: #212529;\n}\n\n.dropdown-menu-dark {\n  color: #ccc;\n  background-color: #373a3c;\n  border-color: rgba(0, 0, 0, 0.15);\n}\n\n.dropdown-menu-dark .dropdown-item {\n  color: #ccc;\n}\n\n.dropdown-menu-dark .dropdown-item:hover, .dropdown-menu-dark .dropdown-item:focus {\n  color: #fff;\n  background-color: rgba(255, 255, 255, 0.15);\n}\n\n.dropdown-menu-dark .dropdown-item.active, .dropdown-menu-dark .dropdown-item:active {\n  color: #fff;\n  background-color: #d9230f;\n}\n\n.dropdown-menu-dark .dropdown-item.disabled, .dropdown-menu-dark .dropdown-item:disabled {\n  color: #adb5bd;\n}\n\n.dropdown-menu-dark .dropdown-divider {\n  border-color: rgba(0, 0, 0, 0.15);\n}\n\n.dropdown-menu-dark .dropdown-item-text {\n  color: #ccc;\n}\n\n.dropdown-menu-dark .dropdown-header {\n  color: #adb5bd;\n}\n\n.btn-group,\n.btn-group-vertical {\n  position: relative;\n  display: -ms-inline-flexbox;\n  display: inline-flex;\n  vertical-align: middle;\n}\n\n.btn-group > .btn,\n.btn-group-vertical > .btn {\n  position: relative;\n  -ms-flex: 1 1 auto;\n  flex: 1 1 auto;\n}\n\n.btn-group > .btn-check:checked + .btn,\n.btn-group > .btn-check:focus + .btn,\n.btn-group > .btn:hover,\n.btn-group > .btn:focus,\n.btn-group > .btn:active,\n.btn-group > .btn.active,\n.btn-group-vertical > .btn-check:checked + .btn,\n.btn-group-vertical > .btn-check:focus + .btn,\n.btn-group-vertical > .btn:hover,\n.btn-group-vertical > .btn:focus,\n.btn-group-vertical > .btn:active,\n.btn-group-vertical > .btn.active {\n  z-index: 1;\n}\n\n.btn-toolbar {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n  flex-wrap: wrap;\n  -ms-flex-pack: start;\n  justify-content: flex-start;\n}\n\n.btn-toolbar .input-group {\n  width: auto;\n}\n\n.btn-group > .btn:not(:first-child),\n.btn-group > .btn-group:not(:first-child) {\n  margin-left: -1px;\n}\n\n.btn-group > .btn:not(:last-child):not(.dropdown-toggle),\n.btn-group > .btn-group:not(:last-child) > .btn {\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n}\n\n.btn-group > .btn:nth-child(n + 3),\n.btn-group > :not(.btn-check) + .btn,\n.btn-group > .btn-group:not(:first-child) > .btn {\n  border-top-left-radius: 0;\n  border-bottom-left-radius: 0;\n}\n\n.dropdown-toggle-split {\n  padding-right: 0.5625rem;\n  padding-left: 0.5625rem;\n}\n\n.dropdown-toggle-split::after,\n.dropup .dropdown-toggle-split::after,\n.dropend .dropdown-toggle-split::after {\n  margin-left: 0;\n}\n\n.dropstart .dropdown-toggle-split::before {\n  margin-right: 0;\n}\n\n.btn-sm + .dropdown-toggle-split, .btn-group-sm > .btn + .dropdown-toggle-split {\n  padding-right: 0.375rem;\n  padding-left: 0.375rem;\n}\n\n.btn-lg + .dropdown-toggle-split, .btn-group-lg > .btn + .dropdown-toggle-split {\n  padding-right: 0.75rem;\n  padding-left: 0.75rem;\n}\n\n.btn-group-vertical {\n  -ms-flex-direction: column;\n  flex-direction: column;\n  -ms-flex-align: start;\n  align-items: flex-start;\n  -ms-flex-pack: center;\n  justify-content: center;\n}\n\n.btn-group-vertical > .btn,\n.btn-group-vertical > .btn-group {\n  width: 100%;\n}\n\n.btn-group-vertical > .btn:not(:first-child),\n.btn-group-vertical > .btn-group:not(:first-child) {\n  margin-top: -1px;\n}\n\n.btn-group-vertical > .btn:not(:last-child):not(.dropdown-toggle),\n.btn-group-vertical > .btn-group:not(:last-child) > .btn {\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 0;\n}\n\n.btn-group-vertical > .btn ~ .btn,\n.btn-group-vertical > .btn-group:not(:first-child) > .btn {\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n}\n\n.nav {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n  flex-wrap: wrap;\n  padding-left: 0;\n  margin-bottom: 0;\n  list-style: none;\n}\n\n.nav-link {\n  display: block;\n  padding: 0.9rem 1rem;\n  color: #d9230f;\n  text-decoration: none;\n  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .nav-link {\n    transition: none;\n  }\n}\n\n.nav-link:hover, .nav-link:focus {\n  color: #ae1c0c;\n}\n\n.nav-link.disabled {\n  color: #bbb;\n  pointer-events: none;\n  cursor: default;\n}\n\n.nav-tabs {\n  border-bottom: 1px solid #eeeeee;\n}\n\n.nav-tabs .nav-link {\n  margin-bottom: -1px;\n  background: none;\n  border: 1px solid transparent;\n  border-top-left-radius: 0.25rem;\n  border-top-right-radius: 0.25rem;\n}\n\n.nav-tabs .nav-link:hover, .nav-tabs .nav-link:focus {\n  border-color: #ddd #ddd #eeeeee;\n  isolation: isolate;\n}\n\n.nav-tabs .nav-link.disabled {\n  color: #bbb;\n  background-color: transparent;\n  border-color: transparent;\n}\n\n.nav-tabs .nav-link.active,\n.nav-tabs .nav-item.show .nav-link {\n  color: #444;\n  background-color: #fcfcfc;\n  border-color: #ccc #ccc #fcfcfc;\n}\n\n.nav-tabs .dropdown-menu {\n  margin-top: -1px;\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n}\n\n.nav-pills .nav-link {\n  background: none;\n  border: 0;\n  border-radius: 0.25rem;\n}\n\n.nav-pills .nav-link.active,\n.nav-pills .show > .nav-link {\n  color: #fff;\n  background-color: #d9230f;\n}\n\n.nav-fill > .nav-link,\n.nav-fill .nav-item {\n  -ms-flex: 1 1 auto;\n  flex: 1 1 auto;\n  text-align: center;\n}\n\n.nav-justified > .nav-link,\n.nav-justified .nav-item {\n  -ms-flex-preferred-size: 0;\n  flex-basis: 0;\n  -ms-flex-positive: 1;\n  flex-grow: 1;\n  text-align: center;\n}\n\n.nav-fill .nav-item .nav-link,\n.nav-justified .nav-item .nav-link {\n  width: 100%;\n}\n\n.tab-content > .tab-pane {\n  display: none;\n}\n\n.tab-content > .active {\n  display: block;\n}\n\n.navbar {\n  position: relative;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n  flex-wrap: wrap;\n  -ms-flex-align: center;\n  align-items: center;\n  -ms-flex-pack: justify;\n  justify-content: space-between;\n  padding-top: 0.5rem;\n  padding-bottom: 0.5rem;\n}\n\n.navbar > .container,\n.navbar > .container-fluid, .navbar > .container-sm, .navbar > .container-md, .navbar > .container-lg, .navbar > .container-xl, .navbar > .container-xxl {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: inherit;\n  flex-wrap: inherit;\n  -ms-flex-align: center;\n  align-items: center;\n  -ms-flex-pack: justify;\n  justify-content: space-between;\n}\n\n.navbar-brand {\n  padding-top: 0.7125rem;\n  padding-bottom: 0.7125rem;\n  margin-right: 1rem;\n  font-size: 1.25rem;\n  text-decoration: none;\n  white-space: nowrap;\n}\n\n.navbar-nav {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  padding-left: 0;\n  margin-bottom: 0;\n  list-style: none;\n}\n\n.navbar-nav .nav-link {\n  padding-right: 0;\n  padding-left: 0;\n}\n\n.navbar-nav .dropdown-menu {\n  position: static;\n}\n\n.navbar-text {\n  padding-top: 0.9rem;\n  padding-bottom: 0.9rem;\n}\n\n.navbar-collapse {\n  -ms-flex-preferred-size: 100%;\n  flex-basis: 100%;\n  -ms-flex-positive: 1;\n  flex-grow: 1;\n  -ms-flex-align: center;\n  align-items: center;\n}\n\n.navbar-toggler {\n  padding: 0.25rem 0.75rem;\n  font-size: 1.25rem;\n  line-height: 1;\n  background-color: transparent;\n  border: 1px solid transparent;\n  border-radius: 0.25rem;\n  transition: box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .navbar-toggler {\n    transition: none;\n  }\n}\n\n.navbar-toggler:hover {\n  text-decoration: none;\n}\n\n.navbar-toggler:focus {\n  text-decoration: none;\n  outline: 0;\n  box-shadow: 0 0 0 0.25rem;\n}\n\n.navbar-toggler-icon {\n  display: inline-block;\n  width: 1.5em;\n  height: 1.5em;\n  vertical-align: middle;\n  background-repeat: no-repeat;\n  background-position: center;\n  background-size: 100%;\n}\n\n.navbar-nav-scroll {\n  max-height: var(--bs-scroll-height, 75vh);\n  overflow-y: auto;\n}\n\n@media (min-width: 576px) {\n  .navbar-expand-sm {\n    -ms-flex-wrap: nowrap;\n    flex-wrap: nowrap;\n    -ms-flex-pack: start;\n    justify-content: flex-start;\n  }\n  .navbar-expand-sm .navbar-nav {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .navbar-expand-sm .navbar-nav .dropdown-menu {\n    position: absolute;\n  }\n  .navbar-expand-sm .navbar-nav .nav-link {\n    padding-right: 0.5rem;\n    padding-left: 0.5rem;\n  }\n  .navbar-expand-sm .navbar-nav-scroll {\n    overflow: visible;\n  }\n  .navbar-expand-sm .navbar-collapse {\n    display: -ms-flexbox !important;\n    display: flex !important;\n    -ms-flex-preferred-size: auto;\n    flex-basis: auto;\n  }\n  .navbar-expand-sm .navbar-toggler {\n    display: none;\n  }\n  .navbar-expand-sm .offcanvas-header {\n    display: none;\n  }\n  .navbar-expand-sm .offcanvas {\n    position: inherit;\n    bottom: 0;\n    z-index: 1000;\n    -ms-flex-positive: 1;\n    flex-grow: 1;\n    visibility: visible !important;\n    background-color: transparent;\n    border-right: 0;\n    border-left: 0;\n    transition: none;\n    -webkit-transform: none;\n    transform: none;\n  }\n  .navbar-expand-sm .offcanvas-top,\n  .navbar-expand-sm .offcanvas-bottom {\n    height: auto;\n    border-top: 0;\n    border-bottom: 0;\n  }\n  .navbar-expand-sm .offcanvas-body {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-positive: 0;\n    flex-grow: 0;\n    padding: 0;\n    overflow-y: visible;\n  }\n}\n\n@media (min-width: 768px) {\n  .navbar-expand-md {\n    -ms-flex-wrap: nowrap;\n    flex-wrap: nowrap;\n    -ms-flex-pack: start;\n    justify-content: flex-start;\n  }\n  .navbar-expand-md .navbar-nav {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .navbar-expand-md .navbar-nav .dropdown-menu {\n    position: absolute;\n  }\n  .navbar-expand-md .navbar-nav .nav-link {\n    padding-right: 0.5rem;\n    padding-left: 0.5rem;\n  }\n  .navbar-expand-md .navbar-nav-scroll {\n    overflow: visible;\n  }\n  .navbar-expand-md .navbar-collapse {\n    display: -ms-flexbox !important;\n    display: flex !important;\n    -ms-flex-preferred-size: auto;\n    flex-basis: auto;\n  }\n  .navbar-expand-md .navbar-toggler {\n    display: none;\n  }\n  .navbar-expand-md .offcanvas-header {\n    display: none;\n  }\n  .navbar-expand-md .offcanvas {\n    position: inherit;\n    bottom: 0;\n    z-index: 1000;\n    -ms-flex-positive: 1;\n    flex-grow: 1;\n    visibility: visible !important;\n    background-color: transparent;\n    border-right: 0;\n    border-left: 0;\n    transition: none;\n    -webkit-transform: none;\n    transform: none;\n  }\n  .navbar-expand-md .offcanvas-top,\n  .navbar-expand-md .offcanvas-bottom {\n    height: auto;\n    border-top: 0;\n    border-bottom: 0;\n  }\n  .navbar-expand-md .offcanvas-body {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-positive: 0;\n    flex-grow: 0;\n    padding: 0;\n    overflow-y: visible;\n  }\n}\n\n@media (min-width: 992px) {\n  .navbar-expand-lg {\n    -ms-flex-wrap: nowrap;\n    flex-wrap: nowrap;\n    -ms-flex-pack: start;\n    justify-content: flex-start;\n  }\n  .navbar-expand-lg .navbar-nav {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .navbar-expand-lg .navbar-nav .dropdown-menu {\n    position: absolute;\n  }\n  .navbar-expand-lg .navbar-nav .nav-link {\n    padding-right: 0.5rem;\n    padding-left: 0.5rem;\n  }\n  .navbar-expand-lg .navbar-nav-scroll {\n    overflow: visible;\n  }\n  .navbar-expand-lg .navbar-collapse {\n    display: -ms-flexbox !important;\n    display: flex !important;\n    -ms-flex-preferred-size: auto;\n    flex-basis: auto;\n  }\n  .navbar-expand-lg .navbar-toggler {\n    display: none;\n  }\n  .navbar-expand-lg .offcanvas-header {\n    display: none;\n  }\n  .navbar-expand-lg .offcanvas {\n    position: inherit;\n    bottom: 0;\n    z-index: 1000;\n    -ms-flex-positive: 1;\n    flex-grow: 1;\n    visibility: visible !important;\n    background-color: transparent;\n    border-right: 0;\n    border-left: 0;\n    transition: none;\n    -webkit-transform: none;\n    transform: none;\n  }\n  .navbar-expand-lg .offcanvas-top,\n  .navbar-expand-lg .offcanvas-bottom {\n    height: auto;\n    border-top: 0;\n    border-bottom: 0;\n  }\n  .navbar-expand-lg .offcanvas-body {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-positive: 0;\n    flex-grow: 0;\n    padding: 0;\n    overflow-y: visible;\n  }\n}\n\n@media (min-width: 1200px) {\n  .navbar-expand-xl {\n    -ms-flex-wrap: nowrap;\n    flex-wrap: nowrap;\n    -ms-flex-pack: start;\n    justify-content: flex-start;\n  }\n  .navbar-expand-xl .navbar-nav {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .navbar-expand-xl .navbar-nav .dropdown-menu {\n    position: absolute;\n  }\n  .navbar-expand-xl .navbar-nav .nav-link {\n    padding-right: 0.5rem;\n    padding-left: 0.5rem;\n  }\n  .navbar-expand-xl .navbar-nav-scroll {\n    overflow: visible;\n  }\n  .navbar-expand-xl .navbar-collapse {\n    display: -ms-flexbox !important;\n    display: flex !important;\n    -ms-flex-preferred-size: auto;\n    flex-basis: auto;\n  }\n  .navbar-expand-xl .navbar-toggler {\n    display: none;\n  }\n  .navbar-expand-xl .offcanvas-header {\n    display: none;\n  }\n  .navbar-expand-xl .offcanvas {\n    position: inherit;\n    bottom: 0;\n    z-index: 1000;\n    -ms-flex-positive: 1;\n    flex-grow: 1;\n    visibility: visible !important;\n    background-color: transparent;\n    border-right: 0;\n    border-left: 0;\n    transition: none;\n    -webkit-transform: none;\n    transform: none;\n  }\n  .navbar-expand-xl .offcanvas-top,\n  .navbar-expand-xl .offcanvas-bottom {\n    height: auto;\n    border-top: 0;\n    border-bottom: 0;\n  }\n  .navbar-expand-xl .offcanvas-body {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-positive: 0;\n    flex-grow: 0;\n    padding: 0;\n    overflow-y: visible;\n  }\n}\n\n@media (min-width: 1400px) {\n  .navbar-expand-xxl {\n    -ms-flex-wrap: nowrap;\n    flex-wrap: nowrap;\n    -ms-flex-pack: start;\n    justify-content: flex-start;\n  }\n  .navbar-expand-xxl .navbar-nav {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .navbar-expand-xxl .navbar-nav .dropdown-menu {\n    position: absolute;\n  }\n  .navbar-expand-xxl .navbar-nav .nav-link {\n    padding-right: 0.5rem;\n    padding-left: 0.5rem;\n  }\n  .navbar-expand-xxl .navbar-nav-scroll {\n    overflow: visible;\n  }\n  .navbar-expand-xxl .navbar-collapse {\n    display: -ms-flexbox !important;\n    display: flex !important;\n    -ms-flex-preferred-size: auto;\n    flex-basis: auto;\n  }\n  .navbar-expand-xxl .navbar-toggler {\n    display: none;\n  }\n  .navbar-expand-xxl .offcanvas-header {\n    display: none;\n  }\n  .navbar-expand-xxl .offcanvas {\n    position: inherit;\n    bottom: 0;\n    z-index: 1000;\n    -ms-flex-positive: 1;\n    flex-grow: 1;\n    visibility: visible !important;\n    background-color: transparent;\n    border-right: 0;\n    border-left: 0;\n    transition: none;\n    -webkit-transform: none;\n    transform: none;\n  }\n  .navbar-expand-xxl .offcanvas-top,\n  .navbar-expand-xxl .offcanvas-bottom {\n    height: auto;\n    border-top: 0;\n    border-bottom: 0;\n  }\n  .navbar-expand-xxl .offcanvas-body {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-positive: 0;\n    flex-grow: 0;\n    padding: 0;\n    overflow-y: visible;\n  }\n}\n\n.navbar-expand {\n  -ms-flex-wrap: nowrap;\n  flex-wrap: nowrap;\n  -ms-flex-pack: start;\n  justify-content: flex-start;\n}\n\n.navbar-expand .navbar-nav {\n  -ms-flex-direction: row;\n  flex-direction: row;\n}\n\n.navbar-expand .navbar-nav .dropdown-menu {\n  position: absolute;\n}\n\n.navbar-expand .navbar-nav .nav-link {\n  padding-right: 0.5rem;\n  padding-left: 0.5rem;\n}\n\n.navbar-expand .navbar-nav-scroll {\n  overflow: visible;\n}\n\n.navbar-expand .navbar-collapse {\n  display: -ms-flexbox !important;\n  display: flex !important;\n  -ms-flex-preferred-size: auto;\n  flex-basis: auto;\n}\n\n.navbar-expand .navbar-toggler {\n  display: none;\n}\n\n.navbar-expand .offcanvas-header {\n  display: none;\n}\n\n.navbar-expand .offcanvas {\n  position: inherit;\n  bottom: 0;\n  z-index: 1000;\n  -ms-flex-positive: 1;\n  flex-grow: 1;\n  visibility: visible !important;\n  background-color: transparent;\n  border-right: 0;\n  border-left: 0;\n  transition: none;\n  -webkit-transform: none;\n  transform: none;\n}\n\n.navbar-expand .offcanvas-top,\n.navbar-expand .offcanvas-bottom {\n  height: auto;\n  border-top: 0;\n  border-bottom: 0;\n}\n\n.navbar-expand .offcanvas-body {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-positive: 0;\n  flex-grow: 0;\n  padding: 0;\n  overflow-y: visible;\n}\n\n.navbar-light .navbar-brand {\n  color: rgba(0, 0, 0, 0.9);\n}\n\n.navbar-light .navbar-brand:hover, .navbar-light .navbar-brand:focus {\n  color: rgba(0, 0, 0, 0.9);\n}\n\n.navbar-light .navbar-nav .nav-link {\n  color: rgba(0, 0, 0, 0.55);\n}\n\n.navbar-light .navbar-nav .nav-link:hover, .navbar-light .navbar-nav .nav-link:focus {\n  color: rgba(0, 0, 0, 0.7);\n}\n\n.navbar-light .navbar-nav .nav-link.disabled {\n  color: rgba(0, 0, 0, 0.3);\n}\n\n.navbar-light .navbar-nav .show > .nav-link,\n.navbar-light .navbar-nav .nav-link.active {\n  color: rgba(0, 0, 0, 0.9);\n}\n\n.navbar-light .navbar-toggler {\n  color: rgba(0, 0, 0, 0.55);\n  border-color: rgba(0, 0, 0, 0.1);\n}\n\n.navbar-light .navbar-toggler-icon {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%280, 0, 0, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e\");\n}\n\n.navbar-light .navbar-text {\n  color: rgba(0, 0, 0, 0.55);\n}\n\n.navbar-light .navbar-text a,\n.navbar-light .navbar-text a:hover,\n.navbar-light .navbar-text a:focus {\n  color: rgba(0, 0, 0, 0.9);\n}\n\n.navbar-dark .navbar-brand {\n  color: #fff;\n}\n\n.navbar-dark .navbar-brand:hover, .navbar-dark .navbar-brand:focus {\n  color: #fff;\n}\n\n.navbar-dark .navbar-nav .nav-link {\n  color: rgba(255, 255, 255, 0.75);\n}\n\n.navbar-dark .navbar-nav .nav-link:hover, .navbar-dark .navbar-nav .nav-link:focus {\n  color: #fff;\n}\n\n.navbar-dark .navbar-nav .nav-link.disabled {\n  color: rgba(255, 255, 255, 0.25);\n}\n\n.navbar-dark .navbar-nav .show > .nav-link,\n.navbar-dark .navbar-nav .nav-link.active {\n  color: #fff;\n}\n\n.navbar-dark .navbar-toggler {\n  color: rgba(255, 255, 255, 0.75);\n  border-color: rgba(255, 255, 255, 0.1);\n}\n\n.navbar-dark .navbar-toggler-icon {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.75%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e\");\n}\n\n.navbar-dark .navbar-text {\n  color: rgba(255, 255, 255, 0.75);\n}\n\n.navbar-dark .navbar-text a,\n.navbar-dark .navbar-text a:hover,\n.navbar-dark .navbar-text a:focus {\n  color: #fff;\n}\n\n.card {\n  position: relative;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  min-width: 0;\n  word-wrap: break-word;\n  background-color: #fff;\n  background-clip: border-box;\n  border: 1px solid #eeeeee;\n  border-radius: 0.25rem;\n}\n\n.card > hr {\n  margin-right: 0;\n  margin-left: 0;\n}\n\n.card > .list-group {\n  border-top: inherit;\n  border-bottom: inherit;\n}\n\n.card > .list-group:first-child {\n  border-top-width: 0;\n  border-top-left-radius: calc(0.25rem - 1px);\n  border-top-right-radius: calc(0.25rem - 1px);\n}\n\n.card > .list-group:last-child {\n  border-bottom-width: 0;\n  border-bottom-right-radius: calc(0.25rem - 1px);\n  border-bottom-left-radius: calc(0.25rem - 1px);\n}\n\n.card > .card-header + .list-group,\n.card > .list-group + .card-footer {\n  border-top: 0;\n}\n\n.card-body {\n  -ms-flex: 1 1 auto;\n  flex: 1 1 auto;\n  padding: 1rem 1rem;\n}\n\n.card-title {\n  margin-bottom: 0.5rem;\n}\n\n.card-subtitle {\n  margin-top: -0.25rem;\n  margin-bottom: 0;\n}\n\n.card-text:last-child {\n  margin-bottom: 0;\n}\n\n.card-link + .card-link {\n  margin-left: 1rem;\n}\n\n.card-header {\n  padding: 0.5rem 1rem;\n  margin-bottom: 0;\n  background-color: rgba(0, 0, 0, 0.03);\n  border-bottom: 1px solid #eeeeee;\n}\n\n.card-header:first-child {\n  border-radius: calc(0.25rem - 1px) calc(0.25rem - 1px) 0 0;\n}\n\n.card-footer {\n  padding: 0.5rem 1rem;\n  background-color: rgba(0, 0, 0, 0.03);\n  border-top: 1px solid #eeeeee;\n}\n\n.card-footer:last-child {\n  border-radius: 0 0 calc(0.25rem - 1px) calc(0.25rem - 1px);\n}\n\n.card-header-tabs {\n  margin-right: -0.5rem;\n  margin-bottom: -0.5rem;\n  margin-left: -0.5rem;\n  border-bottom: 0;\n}\n\n.card-header-tabs .nav-link.active {\n  background-color: #fff;\n  border-bottom-color: #fff;\n}\n\n.card-header-pills {\n  margin-right: -0.5rem;\n  margin-left: -0.5rem;\n}\n\n.card-img-overlay {\n  position: absolute;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  padding: 1rem;\n  border-radius: calc(0.25rem - 1px);\n}\n\n.card-img,\n.card-img-top,\n.card-img-bottom {\n  width: 100%;\n}\n\n.card-img,\n.card-img-top {\n  border-top-left-radius: calc(0.25rem - 1px);\n  border-top-right-radius: calc(0.25rem - 1px);\n}\n\n.card-img,\n.card-img-bottom {\n  border-bottom-right-radius: calc(0.25rem - 1px);\n  border-bottom-left-radius: calc(0.25rem - 1px);\n}\n\n.card-group > .card {\n  margin-bottom: 0.75rem;\n}\n\n@media (min-width: 576px) {\n  .card-group {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-flow: row wrap;\n    flex-flow: row wrap;\n  }\n  .card-group > .card {\n    -ms-flex: 1 0 0%;\n    flex: 1 0 0%;\n    margin-bottom: 0;\n  }\n  .card-group > .card + .card {\n    margin-left: 0;\n    border-left: 0;\n  }\n  .card-group > .card:not(:last-child) {\n    border-top-right-radius: 0;\n    border-bottom-right-radius: 0;\n  }\n  .card-group > .card:not(:last-child) .card-img-top,\n  .card-group > .card:not(:last-child) .card-header {\n    border-top-right-radius: 0;\n  }\n  .card-group > .card:not(:last-child) .card-img-bottom,\n  .card-group > .card:not(:last-child) .card-footer {\n    border-bottom-right-radius: 0;\n  }\n  .card-group > .card:not(:first-child) {\n    border-top-left-radius: 0;\n    border-bottom-left-radius: 0;\n  }\n  .card-group > .card:not(:first-child) .card-img-top,\n  .card-group > .card:not(:first-child) .card-header {\n    border-top-left-radius: 0;\n  }\n  .card-group > .card:not(:first-child) .card-img-bottom,\n  .card-group > .card:not(:first-child) .card-footer {\n    border-bottom-left-radius: 0;\n  }\n}\n\n.accordion-button {\n  position: relative;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-align: center;\n  align-items: center;\n  width: 100%;\n  padding: 1rem 1.25rem;\n  font-size: 1rem;\n  color: #212529;\n  text-align: left;\n  background-color: #fcfcfc;\n  border: 0;\n  border-radius: 0;\n  overflow-anchor: none;\n  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, border-radius 0.15s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .accordion-button {\n    transition: none;\n  }\n}\n\n.accordion-button:not(.collapsed) {\n  color: #c3200e;\n  background-color: #fbe9e7;\n  box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.125);\n}\n\n.accordion-button:not(.collapsed)::after {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23c3200e'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e\");\n  -webkit-transform: rotate(-180deg);\n  transform: rotate(-180deg);\n}\n\n.accordion-button::after {\n  -ms-flex-negative: 0;\n  flex-shrink: 0;\n  width: 1.25rem;\n  height: 1.25rem;\n  margin-left: auto;\n  content: \"\";\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23212529'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e\");\n  background-repeat: no-repeat;\n  background-size: 1.25rem;\n  transition: -webkit-transform 0.2s ease-in-out;\n  transition: transform 0.2s ease-in-out;\n  transition: transform 0.2s ease-in-out, -webkit-transform 0.2s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .accordion-button::after {\n    transition: none;\n  }\n}\n\n.accordion-button:hover {\n  z-index: 2;\n}\n\n.accordion-button:focus {\n  z-index: 3;\n  border-color: #ec9187;\n  outline: 0;\n  box-shadow: 0 0 0 0.25rem rgba(217, 35, 15, 0.25);\n}\n\n.accordion-header {\n  margin-bottom: 0;\n}\n\n.accordion-item {\n  background-color: #fcfcfc;\n  border: 1px solid rgba(0, 0, 0, 0.125);\n}\n\n.accordion-item:first-of-type {\n  border-top-left-radius: 0.25rem;\n  border-top-right-radius: 0.25rem;\n}\n\n.accordion-item:first-of-type .accordion-button {\n  border-top-left-radius: calc(0.25rem - 1px);\n  border-top-right-radius: calc(0.25rem - 1px);\n}\n\n.accordion-item:not(:first-of-type) {\n  border-top: 0;\n}\n\n.accordion-item:last-of-type {\n  border-bottom-right-radius: 0.25rem;\n  border-bottom-left-radius: 0.25rem;\n}\n\n.accordion-item:last-of-type .accordion-button.collapsed {\n  border-bottom-right-radius: calc(0.25rem - 1px);\n  border-bottom-left-radius: calc(0.25rem - 1px);\n}\n\n.accordion-item:last-of-type .accordion-collapse {\n  border-bottom-right-radius: 0.25rem;\n  border-bottom-left-radius: 0.25rem;\n}\n\n.accordion-body {\n  padding: 1rem 1.25rem;\n}\n\n.accordion-flush .accordion-collapse {\n  border-width: 0;\n}\n\n.accordion-flush .accordion-item {\n  border-right: 0;\n  border-left: 0;\n  border-radius: 0;\n}\n\n.accordion-flush .accordion-item:first-child {\n  border-top: 0;\n}\n\n.accordion-flush .accordion-item:last-child {\n  border-bottom: 0;\n}\n\n.accordion-flush .accordion-item .accordion-button {\n  border-radius: 0;\n}\n\n.breadcrumb {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n  flex-wrap: wrap;\n  padding: 0.375rem 0.75rem;\n  margin-bottom: 1rem;\n  list-style: none;\n  border-radius: 0.25rem;\n}\n\n.breadcrumb-item + .breadcrumb-item {\n  padding-left: 0.5rem;\n}\n\n.breadcrumb-item + .breadcrumb-item::before {\n  float: left;\n  padding-right: 0.5rem;\n  color: #777;\n  content: var(--bs-breadcrumb-divider, \"/\") /* rtl: var(--bs-breadcrumb-divider, \"/\") */;\n}\n\n.breadcrumb-item.active {\n  color: #777;\n}\n\n.pagination {\n  display: -ms-flexbox;\n  display: flex;\n  padding-left: 0;\n  list-style: none;\n}\n\n.page-link {\n  position: relative;\n  display: block;\n  color: #d9230f;\n  text-decoration: none;\n  background-color: #fff;\n  border: 1px solid #eeeeee;\n  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .page-link {\n    transition: none;\n  }\n}\n\n.page-link:hover {\n  z-index: 2;\n  color: #fff;\n  background-color: #d9230f;\n  border-color: #d9230f;\n}\n\n.page-link:focus {\n  z-index: 3;\n  color: #ae1c0c;\n  background-color: #ddd;\n  outline: 0;\n  box-shadow: 0 0 0 0.25rem rgba(217, 35, 15, 0.25);\n}\n\n.page-item:not(:first-child) .page-link {\n  margin-left: -1px;\n}\n\n.page-item.active .page-link {\n  z-index: 3;\n  color: #fff;\n  background-color: #d9230f;\n  border-color: #d9230f;\n}\n\n.page-item.disabled .page-link {\n  color: #bbb;\n  pointer-events: none;\n  background-color: #fff;\n  border-color: #eeeeee;\n}\n\n.page-link {\n  padding: 0.375rem 0.75rem;\n}\n\n.page-item:first-child .page-link {\n  border-top-left-radius: 0.25rem;\n  border-bottom-left-radius: 0.25rem;\n}\n\n.page-item:last-child .page-link {\n  border-top-right-radius: 0.25rem;\n  border-bottom-right-radius: 0.25rem;\n}\n\n.pagination-lg .page-link {\n  padding: 0.75rem 1.5rem;\n  font-size: 1.25rem;\n}\n\n.pagination-lg .page-item:first-child .page-link {\n  border-top-left-radius: 0.3rem;\n  border-bottom-left-radius: 0.3rem;\n}\n\n.pagination-lg .page-item:last-child .page-link {\n  border-top-right-radius: 0.3rem;\n  border-bottom-right-radius: 0.3rem;\n}\n\n.pagination-sm .page-link {\n  padding: 0.25rem 0.5rem;\n  font-size: 0.875rem;\n}\n\n.pagination-sm .page-item:first-child .page-link {\n  border-top-left-radius: 0.2rem;\n  border-bottom-left-radius: 0.2rem;\n}\n\n.pagination-sm .page-item:last-child .page-link {\n  border-top-right-radius: 0.2rem;\n  border-bottom-right-radius: 0.2rem;\n}\n\n.badge {\n  display: inline-block;\n  padding: 0.35em 0.65em;\n  font-size: 0.75em;\n  font-weight: 700;\n  line-height: 1;\n  color: #fff;\n  text-align: center;\n  white-space: nowrap;\n  vertical-align: baseline;\n  border-radius: 0.25rem;\n}\n\n.badge:empty {\n  display: none;\n}\n\n.btn .badge {\n  position: relative;\n  top: -1px;\n}\n\n.alert {\n  position: relative;\n  padding: 1rem 1rem;\n  margin-bottom: 1rem;\n  border: 1px solid transparent;\n  border-radius: 0.25rem;\n}\n\n.alert-heading {\n  color: inherit;\n}\n\n.alert-link {\n  font-weight: 700;\n}\n\n.alert-dismissible {\n  padding-right: 3rem;\n}\n\n.alert-dismissible .btn-close {\n  position: absolute;\n  top: 0;\n  right: 0;\n  z-index: 2;\n  padding: 1.25rem 1rem;\n}\n\n.alert-primary {\n  color: #821509;\n  background-color: #f7d3cf;\n  border-color: #f4bdb7;\n}\n\n.alert-primary .alert-link {\n  color: #681107;\n}\n\n.alert-secondary {\n  color: #999999;\n  background-color: white;\n  border-color: white;\n}\n\n.alert-secondary .alert-link {\n  color: #7a7a7a;\n}\n\n.alert-success {\n  color: #2a5905;\n  background-color: #daeace;\n  border-color: #c8dfb5;\n}\n\n.alert-success .alert-link {\n  color: #224704;\n}\n\n.alert-info {\n  color: #015c7c;\n  background-color: #ccebf5;\n  border-color: #b3e1f1;\n}\n\n.alert-info .alert-link {\n  color: #014a63;\n}\n\n.alert-warning {\n  color: #824f13;\n  background-color: #f7e6d2;\n  border-color: #f4dabc;\n}\n\n.alert-warning .alert-link {\n  color: #683f0f;\n}\n\n.alert-danger {\n  color: #5d2b5f;\n  background-color: #ebdaec;\n  border-color: #e1c8e2;\n}\n\n.alert-danger .alert-link {\n  color: #4a224c;\n}\n\n.alert-light {\n  color: #999999;\n  background-color: white;\n  border-color: white;\n}\n\n.alert-light .alert-link {\n  color: #7a7a7a;\n}\n\n.alert-dark {\n  color: #212324;\n  background-color: #d7d8d8;\n  border-color: #c3c4c5;\n}\n\n.alert-dark .alert-link {\n  color: #1a1c1d;\n}\n\n@-webkit-keyframes progress-bar-stripes {\n  0% {\n    background-position-x: 1rem;\n  }\n}\n\n@keyframes progress-bar-stripes {\n  0% {\n    background-position-x: 1rem;\n  }\n}\n\n.progress {\n  display: -ms-flexbox;\n  display: flex;\n  height: 1rem;\n  overflow: hidden;\n  font-size: 0.75rem;\n  background-color: #ddd;\n  border-radius: 0.25rem;\n}\n\n.progress-bar {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  -ms-flex-pack: center;\n  justify-content: center;\n  overflow: hidden;\n  color: #d9230f;\n  text-align: center;\n  white-space: nowrap;\n  background-color: #d9230f;\n  transition: width 0.6s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .progress-bar {\n    transition: none;\n  }\n}\n\n.progress-bar-striped {\n  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-size: 1rem 1rem;\n}\n\n.progress-bar-animated {\n  -webkit-animation: 1s linear infinite progress-bar-stripes;\n  animation: 1s linear infinite progress-bar-stripes;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .progress-bar-animated {\n    -webkit-animation: none;\n    animation: none;\n  }\n}\n\n.list-group {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  padding-left: 0;\n  margin-bottom: 0;\n  border-radius: 0.25rem;\n}\n\n.list-group-numbered {\n  list-style-type: none;\n  counter-reset: section;\n}\n\n.list-group-numbered > li::before {\n  content: counters(section, \".\") \". \";\n  counter-increment: section;\n}\n\n.list-group-item-action {\n  width: 100%;\n  color: #444;\n  text-align: inherit;\n}\n\n.list-group-item-action:hover, .list-group-item-action:focus {\n  z-index: 1;\n  color: #444;\n  text-decoration: none;\n  background-color: #f8f9fa;\n}\n\n.list-group-item-action:active {\n  color: #212529;\n  background-color: #ddd;\n}\n\n.list-group-item {\n  position: relative;\n  display: block;\n  padding: 0.5rem 1rem;\n  color: #212529;\n  text-decoration: none;\n  background-color: #fff;\n  border: 1px solid #eeeeee;\n}\n\n.list-group-item:first-child {\n  border-top-left-radius: inherit;\n  border-top-right-radius: inherit;\n}\n\n.list-group-item:last-child {\n  border-bottom-right-radius: inherit;\n  border-bottom-left-radius: inherit;\n}\n\n.list-group-item.disabled, .list-group-item:disabled {\n  color: #777;\n  pointer-events: none;\n  background-color: #eeeeee;\n}\n\n.list-group-item.active {\n  z-index: 2;\n  color: #fff;\n  background-color: #d9230f;\n  border-color: #d9230f;\n}\n\n.list-group-item + .list-group-item {\n  border-top-width: 0;\n}\n\n.list-group-item + .list-group-item.active {\n  margin-top: -1px;\n  border-top-width: 1px;\n}\n\n.list-group-horizontal {\n  -ms-flex-direction: row;\n  flex-direction: row;\n}\n\n.list-group-horizontal > .list-group-item:first-child {\n  border-bottom-left-radius: 0.25rem;\n  border-top-right-radius: 0;\n}\n\n.list-group-horizontal > .list-group-item:last-child {\n  border-top-right-radius: 0.25rem;\n  border-bottom-left-radius: 0;\n}\n\n.list-group-horizontal > .list-group-item.active {\n  margin-top: 0;\n}\n\n.list-group-horizontal > .list-group-item + .list-group-item {\n  border-top-width: 1px;\n  border-left-width: 0;\n}\n\n.list-group-horizontal > .list-group-item + .list-group-item.active {\n  margin-left: -1px;\n  border-left-width: 1px;\n}\n\n@media (min-width: 576px) {\n  .list-group-horizontal-sm {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .list-group-horizontal-sm > .list-group-item:first-child {\n    border-bottom-left-radius: 0.25rem;\n    border-top-right-radius: 0;\n  }\n  .list-group-horizontal-sm > .list-group-item:last-child {\n    border-top-right-radius: 0.25rem;\n    border-bottom-left-radius: 0;\n  }\n  .list-group-horizontal-sm > .list-group-item.active {\n    margin-top: 0;\n  }\n  .list-group-horizontal-sm > .list-group-item + .list-group-item {\n    border-top-width: 1px;\n    border-left-width: 0;\n  }\n  .list-group-horizontal-sm > .list-group-item + .list-group-item.active {\n    margin-left: -1px;\n    border-left-width: 1px;\n  }\n}\n\n@media (min-width: 768px) {\n  .list-group-horizontal-md {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .list-group-horizontal-md > .list-group-item:first-child {\n    border-bottom-left-radius: 0.25rem;\n    border-top-right-radius: 0;\n  }\n  .list-group-horizontal-md > .list-group-item:last-child {\n    border-top-right-radius: 0.25rem;\n    border-bottom-left-radius: 0;\n  }\n  .list-group-horizontal-md > .list-group-item.active {\n    margin-top: 0;\n  }\n  .list-group-horizontal-md > .list-group-item + .list-group-item {\n    border-top-width: 1px;\n    border-left-width: 0;\n  }\n  .list-group-horizontal-md > .list-group-item + .list-group-item.active {\n    margin-left: -1px;\n    border-left-width: 1px;\n  }\n}\n\n@media (min-width: 992px) {\n  .list-group-horizontal-lg {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .list-group-horizontal-lg > .list-group-item:first-child {\n    border-bottom-left-radius: 0.25rem;\n    border-top-right-radius: 0;\n  }\n  .list-group-horizontal-lg > .list-group-item:last-child {\n    border-top-right-radius: 0.25rem;\n    border-bottom-left-radius: 0;\n  }\n  .list-group-horizontal-lg > .list-group-item.active {\n    margin-top: 0;\n  }\n  .list-group-horizontal-lg > .list-group-item + .list-group-item {\n    border-top-width: 1px;\n    border-left-width: 0;\n  }\n  .list-group-horizontal-lg > .list-group-item + .list-group-item.active {\n    margin-left: -1px;\n    border-left-width: 1px;\n  }\n}\n\n@media (min-width: 1200px) {\n  .list-group-horizontal-xl {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .list-group-horizontal-xl > .list-group-item:first-child {\n    border-bottom-left-radius: 0.25rem;\n    border-top-right-radius: 0;\n  }\n  .list-group-horizontal-xl > .list-group-item:last-child {\n    border-top-right-radius: 0.25rem;\n    border-bottom-left-radius: 0;\n  }\n  .list-group-horizontal-xl > .list-group-item.active {\n    margin-top: 0;\n  }\n  .list-group-horizontal-xl > .list-group-item + .list-group-item {\n    border-top-width: 1px;\n    border-left-width: 0;\n  }\n  .list-group-horizontal-xl > .list-group-item + .list-group-item.active {\n    margin-left: -1px;\n    border-left-width: 1px;\n  }\n}\n\n@media (min-width: 1400px) {\n  .list-group-horizontal-xxl {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .list-group-horizontal-xxl > .list-group-item:first-child {\n    border-bottom-left-radius: 0.25rem;\n    border-top-right-radius: 0;\n  }\n  .list-group-horizontal-xxl > .list-group-item:last-child {\n    border-top-right-radius: 0.25rem;\n    border-bottom-left-radius: 0;\n  }\n  .list-group-horizontal-xxl > .list-group-item.active {\n    margin-top: 0;\n  }\n  .list-group-horizontal-xxl > .list-group-item + .list-group-item {\n    border-top-width: 1px;\n    border-left-width: 0;\n  }\n  .list-group-horizontal-xxl > .list-group-item + .list-group-item.active {\n    margin-left: -1px;\n    border-left-width: 1px;\n  }\n}\n\n.list-group-flush {\n  border-radius: 0;\n}\n\n.list-group-flush > .list-group-item {\n  border-width: 0 0 1px;\n}\n\n.list-group-flush > .list-group-item:last-child {\n  border-bottom-width: 0;\n}\n\n.list-group-item-primary {\n  color: #821509;\n  background-color: #f7d3cf;\n}\n\n.list-group-item-primary.list-group-item-action:hover, .list-group-item-primary.list-group-item-action:focus {\n  color: #821509;\n  background-color: #debeba;\n}\n\n.list-group-item-primary.list-group-item-action.active {\n  color: #fff;\n  background-color: #821509;\n  border-color: #821509;\n}\n\n.list-group-item-secondary {\n  color: #999999;\n  background-color: white;\n}\n\n.list-group-item-secondary.list-group-item-action:hover, .list-group-item-secondary.list-group-item-action:focus {\n  color: #999999;\n  background-color: #e6e6e6;\n}\n\n.list-group-item-secondary.list-group-item-action.active {\n  color: #fff;\n  background-color: #999999;\n  border-color: #999999;\n}\n\n.list-group-item-success {\n  color: #2a5905;\n  background-color: #daeace;\n}\n\n.list-group-item-success.list-group-item-action:hover, .list-group-item-success.list-group-item-action:focus {\n  color: #2a5905;\n  background-color: #c4d3b9;\n}\n\n.list-group-item-success.list-group-item-action.active {\n  color: #fff;\n  background-color: #2a5905;\n  border-color: #2a5905;\n}\n\n.list-group-item-info {\n  color: #015c7c;\n  background-color: #ccebf5;\n}\n\n.list-group-item-info.list-group-item-action:hover, .list-group-item-info.list-group-item-action:focus {\n  color: #015c7c;\n  background-color: #b8d4dd;\n}\n\n.list-group-item-info.list-group-item-action.active {\n  color: #fff;\n  background-color: #015c7c;\n  border-color: #015c7c;\n}\n\n.list-group-item-warning {\n  color: #824f13;\n  background-color: #f7e6d2;\n}\n\n.list-group-item-warning.list-group-item-action:hover, .list-group-item-warning.list-group-item-action:focus {\n  color: #824f13;\n  background-color: #decfbd;\n}\n\n.list-group-item-warning.list-group-item-action.active {\n  color: #fff;\n  background-color: #824f13;\n  border-color: #824f13;\n}\n\n.list-group-item-danger {\n  color: #5d2b5f;\n  background-color: #ebdaec;\n}\n\n.list-group-item-danger.list-group-item-action:hover, .list-group-item-danger.list-group-item-action:focus {\n  color: #5d2b5f;\n  background-color: #d4c4d4;\n}\n\n.list-group-item-danger.list-group-item-action.active {\n  color: #fff;\n  background-color: #5d2b5f;\n  border-color: #5d2b5f;\n}\n\n.list-group-item-light {\n  color: #999999;\n  background-color: white;\n}\n\n.list-group-item-light.list-group-item-action:hover, .list-group-item-light.list-group-item-action:focus {\n  color: #999999;\n  background-color: #e6e6e6;\n}\n\n.list-group-item-light.list-group-item-action.active {\n  color: #fff;\n  background-color: #999999;\n  border-color: #999999;\n}\n\n.list-group-item-dark {\n  color: #212324;\n  background-color: #d7d8d8;\n}\n\n.list-group-item-dark.list-group-item-action:hover, .list-group-item-dark.list-group-item-action:focus {\n  color: #212324;\n  background-color: #c2c2c2;\n}\n\n.list-group-item-dark.list-group-item-action.active {\n  color: #fff;\n  background-color: #212324;\n  border-color: #212324;\n}\n\n.btn-close {\n  box-sizing: content-box;\n  width: 1em;\n  height: 1em;\n  padding: 0.25em 0.25em;\n  color: #000;\n  background: transparent url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23000'%3e%3cpath d='M.293.293a1 1 0 011.414 0L8 6.586 14.293.293a1 1 0 111.414 1.414L9.414 8l6.293 6.293a1 1 0 01-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 01-1.414-1.414L6.586 8 .293 1.707a1 1 0 010-1.414z'/%3e%3c/svg%3e\") center/1em auto no-repeat;\n  border: 0;\n  border-radius: 0.25rem;\n  opacity: 0.5;\n}\n\n.btn-close:hover {\n  color: #000;\n  text-decoration: none;\n  opacity: 0.75;\n}\n\n.btn-close:focus {\n  outline: 0;\n  box-shadow: 0 0 0 0.25rem rgba(217, 35, 15, 0.25);\n  opacity: 1;\n}\n\n.btn-close:disabled, .btn-close.disabled {\n  pointer-events: none;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  user-select: none;\n  opacity: 0.25;\n}\n\n.btn-close-white {\n  -webkit-filter: invert(1) grayscale(100%) brightness(200%);\n  filter: invert(1) grayscale(100%) brightness(200%);\n}\n\n.toast {\n  width: 350px;\n  max-width: 100%;\n  font-size: 0.875rem;\n  pointer-events: auto;\n  background-color: rgba(255, 255, 255, 0.85);\n  background-clip: padding-box;\n  border: 1px solid rgba(0, 0, 0, 0.1);\n  box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15);\n  border-radius: 0.25rem;\n}\n\n.toast.showing {\n  opacity: 0;\n}\n\n.toast:not(.show) {\n  display: none;\n}\n\n.toast-container {\n  width: -webkit-max-content;\n  width: -moz-max-content;\n  width: max-content;\n  max-width: 100%;\n  pointer-events: none;\n}\n\n.toast-container > :not(:last-child) {\n  margin-bottom: 0.75rem;\n}\n\n.toast-header {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-align: center;\n  align-items: center;\n  padding: 0.5rem 0.75rem;\n  color: #777;\n  background-color: rgba(255, 255, 255, 0.85);\n  background-clip: padding-box;\n  border-bottom: 1px solid rgba(0, 0, 0, 0.05);\n  border-top-left-radius: calc(0.25rem - 1px);\n  border-top-right-radius: calc(0.25rem - 1px);\n}\n\n.toast-header .btn-close {\n  margin-right: -0.375rem;\n  margin-left: 0.75rem;\n}\n\n.toast-body {\n  padding: 0.75rem;\n  word-wrap: break-word;\n}\n\n.modal {\n  position: fixed;\n  top: 0;\n  left: 0;\n  z-index: 1055;\n  display: none;\n  width: 100%;\n  height: 100%;\n  overflow-x: hidden;\n  overflow-y: auto;\n  outline: 0;\n}\n\n.modal-dialog {\n  position: relative;\n  width: auto;\n  margin: 0.5rem;\n  pointer-events: none;\n}\n\n.modal.fade .modal-dialog {\n  transition: -webkit-transform 0.3s ease-out;\n  transition: transform 0.3s ease-out;\n  transition: transform 0.3s ease-out, -webkit-transform 0.3s ease-out;\n  -webkit-transform: translate(0, -50px);\n  transform: translate(0, -50px);\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .modal.fade .modal-dialog {\n    transition: none;\n  }\n}\n\n.modal.show .modal-dialog {\n  -webkit-transform: none;\n  transform: none;\n}\n\n.modal.modal-static .modal-dialog {\n  -webkit-transform: scale(1.02);\n  transform: scale(1.02);\n}\n\n.modal-dialog-scrollable {\n  height: calc(100% - 1rem);\n}\n\n.modal-dialog-scrollable .modal-content {\n  max-height: 100%;\n  overflow: hidden;\n}\n\n.modal-dialog-scrollable .modal-body {\n  overflow-y: auto;\n}\n\n.modal-dialog-centered {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-align: center;\n  align-items: center;\n  min-height: calc(100% - 1rem);\n}\n\n.modal-content {\n  position: relative;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  width: 100%;\n  pointer-events: auto;\n  background-color: #fff;\n  background-clip: padding-box;\n  border: 1px solid #eeeeee;\n  border-radius: 0.3rem;\n  outline: 0;\n}\n\n.modal-backdrop {\n  position: fixed;\n  top: 0;\n  left: 0;\n  z-index: 1050;\n  width: 100vw;\n  height: 100vh;\n  background-color: #000;\n}\n\n.modal-backdrop.fade {\n  opacity: 0;\n}\n\n.modal-backdrop.show {\n  opacity: 0.5;\n}\n\n.modal-header {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-negative: 0;\n  flex-shrink: 0;\n  -ms-flex-align: center;\n  align-items: center;\n  -ms-flex-pack: justify;\n  justify-content: space-between;\n  padding: 1rem 1rem;\n  border-bottom: 1px solid #eeeeee;\n  border-top-left-radius: calc(0.3rem - 1px);\n  border-top-right-radius: calc(0.3rem - 1px);\n}\n\n.modal-header .btn-close {\n  padding: 0.5rem 0.5rem;\n  margin: -0.5rem -0.5rem -0.5rem auto;\n}\n\n.modal-title {\n  margin-bottom: 0;\n  line-height: 1.5;\n}\n\n.modal-body {\n  position: relative;\n  -ms-flex: 1 1 auto;\n  flex: 1 1 auto;\n  padding: 1rem;\n}\n\n.modal-footer {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n  flex-wrap: wrap;\n  -ms-flex-negative: 0;\n  flex-shrink: 0;\n  -ms-flex-align: center;\n  align-items: center;\n  -ms-flex-pack: end;\n  justify-content: flex-end;\n  padding: 0.75rem;\n  border-top: 1px solid #eeeeee;\n  border-bottom-right-radius: calc(0.3rem - 1px);\n  border-bottom-left-radius: calc(0.3rem - 1px);\n}\n\n.modal-footer > * {\n  margin: 0.25rem;\n}\n\n@media (min-width: 576px) {\n  .modal-dialog {\n    max-width: 500px;\n    margin: 1.75rem auto;\n  }\n  .modal-dialog-scrollable {\n    height: calc(100% - 3.5rem);\n  }\n  .modal-dialog-centered {\n    min-height: calc(100% - 3.5rem);\n  }\n  .modal-sm {\n    max-width: 300px;\n  }\n}\n\n@media (min-width: 992px) {\n  .modal-lg,\n  .modal-xl {\n    max-width: 800px;\n  }\n}\n\n@media (min-width: 1200px) {\n  .modal-xl {\n    max-width: 1140px;\n  }\n}\n\n.modal-fullscreen {\n  width: 100vw;\n  max-width: none;\n  height: 100%;\n  margin: 0;\n}\n\n.modal-fullscreen .modal-content {\n  height: 100%;\n  border: 0;\n  border-radius: 0;\n}\n\n.modal-fullscreen .modal-header {\n  border-radius: 0;\n}\n\n.modal-fullscreen .modal-body {\n  overflow-y: auto;\n}\n\n.modal-fullscreen .modal-footer {\n  border-radius: 0;\n}\n\n@media (max-width: 575.98px) {\n  .modal-fullscreen-sm-down {\n    width: 100vw;\n    max-width: none;\n    height: 100%;\n    margin: 0;\n  }\n  .modal-fullscreen-sm-down .modal-content {\n    height: 100%;\n    border: 0;\n    border-radius: 0;\n  }\n  .modal-fullscreen-sm-down .modal-header {\n    border-radius: 0;\n  }\n  .modal-fullscreen-sm-down .modal-body {\n    overflow-y: auto;\n  }\n  .modal-fullscreen-sm-down .modal-footer {\n    border-radius: 0;\n  }\n}\n\n@media (max-width: 767.98px) {\n  .modal-fullscreen-md-down {\n    width: 100vw;\n    max-width: none;\n    height: 100%;\n    margin: 0;\n  }\n  .modal-fullscreen-md-down .modal-content {\n    height: 100%;\n    border: 0;\n    border-radius: 0;\n  }\n  .modal-fullscreen-md-down .modal-header {\n    border-radius: 0;\n  }\n  .modal-fullscreen-md-down .modal-body {\n    overflow-y: auto;\n  }\n  .modal-fullscreen-md-down .modal-footer {\n    border-radius: 0;\n  }\n}\n\n@media (max-width: 991.98px) {\n  .modal-fullscreen-lg-down {\n    width: 100vw;\n    max-width: none;\n    height: 100%;\n    margin: 0;\n  }\n  .modal-fullscreen-lg-down .modal-content {\n    height: 100%;\n    border: 0;\n    border-radius: 0;\n  }\n  .modal-fullscreen-lg-down .modal-header {\n    border-radius: 0;\n  }\n  .modal-fullscreen-lg-down .modal-body {\n    overflow-y: auto;\n  }\n  .modal-fullscreen-lg-down .modal-footer {\n    border-radius: 0;\n  }\n}\n\n@media (max-width: 1199.98px) {\n  .modal-fullscreen-xl-down {\n    width: 100vw;\n    max-width: none;\n    height: 100%;\n    margin: 0;\n  }\n  .modal-fullscreen-xl-down .modal-content {\n    height: 100%;\n    border: 0;\n    border-radius: 0;\n  }\n  .modal-fullscreen-xl-down .modal-header {\n    border-radius: 0;\n  }\n  .modal-fullscreen-xl-down .modal-body {\n    overflow-y: auto;\n  }\n  .modal-fullscreen-xl-down .modal-footer {\n    border-radius: 0;\n  }\n}\n\n@media (max-width: 1399.98px) {\n  .modal-fullscreen-xxl-down {\n    width: 100vw;\n    max-width: none;\n    height: 100%;\n    margin: 0;\n  }\n  .modal-fullscreen-xxl-down .modal-content {\n    height: 100%;\n    border: 0;\n    border-radius: 0;\n  }\n  .modal-fullscreen-xxl-down .modal-header {\n    border-radius: 0;\n  }\n  .modal-fullscreen-xxl-down .modal-body {\n    overflow-y: auto;\n  }\n  .modal-fullscreen-xxl-down .modal-footer {\n    border-radius: 0;\n  }\n}\n\n.tooltip {\n  position: absolute;\n  z-index: 1080;\n  display: block;\n  margin: 0;\n  font-family: var(--bs-font-sans-serif);\n  font-style: normal;\n  font-weight: 400;\n  line-height: 1.5;\n  text-align: left;\n  text-align: start;\n  text-decoration: none;\n  text-shadow: none;\n  text-transform: none;\n  letter-spacing: normal;\n  word-break: normal;\n  word-spacing: normal;\n  white-space: normal;\n  line-break: auto;\n  font-size: 0.875rem;\n  word-wrap: break-word;\n  opacity: 0;\n}\n\n.tooltip.show {\n  opacity: 0.9;\n}\n\n.tooltip .tooltip-arrow {\n  position: absolute;\n  display: block;\n  width: 0.8rem;\n  height: 0.4rem;\n}\n\n.tooltip .tooltip-arrow::before {\n  position: absolute;\n  content: \"\";\n  border-color: transparent;\n  border-style: solid;\n}\n\n.bs-tooltip-top, .bs-tooltip-auto[data-popper-placement^=\"top\"] {\n  padding: 0.4rem 0;\n}\n\n.bs-tooltip-top .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=\"top\"] .tooltip-arrow {\n  bottom: 0;\n}\n\n.bs-tooltip-top .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=\"top\"] .tooltip-arrow::before {\n  top: -1px;\n  border-width: 0.4rem 0.4rem 0;\n  border-top-color: #000;\n}\n\n.bs-tooltip-end, .bs-tooltip-auto[data-popper-placement^=\"right\"] {\n  padding: 0 0.4rem;\n}\n\n.bs-tooltip-end .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=\"right\"] .tooltip-arrow {\n  left: 0;\n  width: 0.4rem;\n  height: 0.8rem;\n}\n\n.bs-tooltip-end .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=\"right\"] .tooltip-arrow::before {\n  right: -1px;\n  border-width: 0.4rem 0.4rem 0.4rem 0;\n  border-right-color: #000;\n}\n\n.bs-tooltip-bottom, .bs-tooltip-auto[data-popper-placement^=\"bottom\"] {\n  padding: 0.4rem 0;\n}\n\n.bs-tooltip-bottom .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=\"bottom\"] .tooltip-arrow {\n  top: 0;\n}\n\n.bs-tooltip-bottom .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=\"bottom\"] .tooltip-arrow::before {\n  bottom: -1px;\n  border-width: 0 0.4rem 0.4rem;\n  border-bottom-color: #000;\n}\n\n.bs-tooltip-start, .bs-tooltip-auto[data-popper-placement^=\"left\"] {\n  padding: 0 0.4rem;\n}\n\n.bs-tooltip-start .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=\"left\"] .tooltip-arrow {\n  right: 0;\n  width: 0.4rem;\n  height: 0.8rem;\n}\n\n.bs-tooltip-start .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=\"left\"] .tooltip-arrow::before {\n  left: -1px;\n  border-width: 0.4rem 0 0.4rem 0.4rem;\n  border-left-color: #000;\n}\n\n.tooltip-inner {\n  max-width: 200px;\n  padding: 0.25rem 0.5rem;\n  color: #fff;\n  text-align: center;\n  background-color: #000;\n  border-radius: 0.25rem;\n}\n\n.popover {\n  position: absolute;\n  top: 0;\n  left: 0 /* rtl:ignore */;\n  z-index: 1070;\n  display: block;\n  max-width: 276px;\n  font-family: var(--bs-font-sans-serif);\n  font-style: normal;\n  font-weight: 400;\n  line-height: 1.5;\n  text-align: left;\n  text-align: start;\n  text-decoration: none;\n  text-shadow: none;\n  text-transform: none;\n  letter-spacing: normal;\n  word-break: normal;\n  word-spacing: normal;\n  white-space: normal;\n  line-break: auto;\n  font-size: 0.875rem;\n  word-wrap: break-word;\n  background-color: #fff;\n  background-clip: padding-box;\n  border: 1px solid #eeeeee;\n  border-radius: 0.3rem;\n}\n\n.popover .popover-arrow {\n  position: absolute;\n  display: block;\n  width: 1rem;\n  height: 0.5rem;\n}\n\n.popover .popover-arrow::before, .popover .popover-arrow::after {\n  position: absolute;\n  display: block;\n  content: \"\";\n  border-color: transparent;\n  border-style: solid;\n}\n\n.bs-popover-top > .popover-arrow, .bs-popover-auto[data-popper-placement^=\"top\"] > .popover-arrow {\n  bottom: calc(-0.5rem - 1px);\n}\n\n.bs-popover-top > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=\"top\"] > .popover-arrow::before {\n  bottom: 0;\n  border-width: 0.5rem 0.5rem 0;\n  border-top-color: #eeeeee;\n}\n\n.bs-popover-top > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=\"top\"] > .popover-arrow::after {\n  bottom: 1px;\n  border-width: 0.5rem 0.5rem 0;\n  border-top-color: #fff;\n}\n\n.bs-popover-end > .popover-arrow, .bs-popover-auto[data-popper-placement^=\"right\"] > .popover-arrow {\n  left: calc(-0.5rem - 1px);\n  width: 0.5rem;\n  height: 1rem;\n}\n\n.bs-popover-end > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=\"right\"] > .popover-arrow::before {\n  left: 0;\n  border-width: 0.5rem 0.5rem 0.5rem 0;\n  border-right-color: #eeeeee;\n}\n\n.bs-popover-end > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=\"right\"] > .popover-arrow::after {\n  left: 1px;\n  border-width: 0.5rem 0.5rem 0.5rem 0;\n  border-right-color: #fff;\n}\n\n.bs-popover-bottom > .popover-arrow, .bs-popover-auto[data-popper-placement^=\"bottom\"] > .popover-arrow {\n  top: calc(-0.5rem - 1px);\n}\n\n.bs-popover-bottom > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=\"bottom\"] > .popover-arrow::before {\n  top: 0;\n  border-width: 0 0.5rem 0.5rem 0.5rem;\n  border-bottom-color: #eeeeee;\n}\n\n.bs-popover-bottom > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=\"bottom\"] > .popover-arrow::after {\n  top: 1px;\n  border-width: 0 0.5rem 0.5rem 0.5rem;\n  border-bottom-color: #fff;\n}\n\n.bs-popover-bottom .popover-header::before, .bs-popover-auto[data-popper-placement^=\"bottom\"] .popover-header::before {\n  position: absolute;\n  top: 0;\n  left: 50%;\n  display: block;\n  width: 1rem;\n  margin-left: -0.5rem;\n  content: \"\";\n  border-bottom: 1px solid #f0f0f0;\n}\n\n.bs-popover-start > .popover-arrow, .bs-popover-auto[data-popper-placement^=\"left\"] > .popover-arrow {\n  right: calc(-0.5rem - 1px);\n  width: 0.5rem;\n  height: 1rem;\n}\n\n.bs-popover-start > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=\"left\"] > .popover-arrow::before {\n  right: 0;\n  border-width: 0.5rem 0 0.5rem 0.5rem;\n  border-left-color: #eeeeee;\n}\n\n.bs-popover-start > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=\"left\"] > .popover-arrow::after {\n  right: 1px;\n  border-width: 0.5rem 0 0.5rem 0.5rem;\n  border-left-color: #fff;\n}\n\n.popover-header {\n  padding: 0.5rem 1rem;\n  margin-bottom: 0;\n  font-size: 1rem;\n  background-color: #f0f0f0;\n  border-bottom: 1px solid #eeeeee;\n  border-top-left-radius: calc(0.3rem - 1px);\n  border-top-right-radius: calc(0.3rem - 1px);\n}\n\n.popover-header:empty {\n  display: none;\n}\n\n.popover-body {\n  padding: 1rem 1rem;\n  color: #212529;\n}\n\n.carousel {\n  position: relative;\n}\n\n.carousel.pointer-event {\n  -ms-touch-action: pan-y;\n  touch-action: pan-y;\n}\n\n.carousel-inner {\n  position: relative;\n  width: 100%;\n  overflow: hidden;\n}\n\n.carousel-inner::after {\n  display: block;\n  clear: both;\n  content: \"\";\n}\n\n.carousel-item {\n  position: relative;\n  display: none;\n  float: left;\n  width: 100%;\n  margin-right: -100%;\n  -webkit-backface-visibility: hidden;\n  backface-visibility: hidden;\n  transition: -webkit-transform 0.6s ease-in-out;\n  transition: transform 0.6s ease-in-out;\n  transition: transform 0.6s ease-in-out, -webkit-transform 0.6s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .carousel-item {\n    transition: none;\n  }\n}\n\n.carousel-item.active,\n.carousel-item-next,\n.carousel-item-prev {\n  display: block;\n}\n\n/* rtl:begin:ignore */\n.carousel-item-next:not(.carousel-item-start),\n.active.carousel-item-end {\n  -webkit-transform: translateX(100%);\n  transform: translateX(100%);\n}\n\n.carousel-item-prev:not(.carousel-item-end),\n.active.carousel-item-start {\n  -webkit-transform: translateX(-100%);\n  transform: translateX(-100%);\n}\n\n/* rtl:end:ignore */\n.carousel-fade .carousel-item {\n  opacity: 0;\n  transition-property: opacity;\n  -webkit-transform: none;\n  transform: none;\n}\n\n.carousel-fade .carousel-item.active,\n.carousel-fade .carousel-item-next.carousel-item-start,\n.carousel-fade .carousel-item-prev.carousel-item-end {\n  z-index: 1;\n  opacity: 1;\n}\n\n.carousel-fade .active.carousel-item-start,\n.carousel-fade .active.carousel-item-end {\n  z-index: 0;\n  opacity: 0;\n  transition: opacity 0s 0.6s;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .carousel-fade .active.carousel-item-start,\n  .carousel-fade .active.carousel-item-end {\n    transition: none;\n  }\n}\n\n.carousel-control-prev,\n.carousel-control-next {\n  position: absolute;\n  top: 0;\n  bottom: 0;\n  z-index: 1;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-align: center;\n  align-items: center;\n  -ms-flex-pack: center;\n  justify-content: center;\n  width: 15%;\n  padding: 0;\n  color: #fff;\n  text-align: center;\n  background: none;\n  border: 0;\n  opacity: 0.5;\n  transition: opacity 0.15s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .carousel-control-prev,\n  .carousel-control-next {\n    transition: none;\n  }\n}\n\n.carousel-control-prev:hover, .carousel-control-prev:focus,\n.carousel-control-next:hover,\n.carousel-control-next:focus {\n  color: #fff;\n  text-decoration: none;\n  outline: 0;\n  opacity: 0.9;\n}\n\n.carousel-control-prev {\n  left: 0;\n}\n\n.carousel-control-next {\n  right: 0;\n}\n\n.carousel-control-prev-icon,\n.carousel-control-next-icon {\n  display: inline-block;\n  width: 2rem;\n  height: 2rem;\n  background-repeat: no-repeat;\n  background-position: 50%;\n  background-size: 100% 100%;\n}\n\n/* rtl:options: {\n  \"autoRename\": true,\n  \"stringMap\":[ {\n    \"name\"    : \"prev-next\",\n    \"search\"  : \"prev\",\n    \"replace\" : \"next\"\n  } ]\n} */\n.carousel-control-prev-icon {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0z'/%3e%3c/svg%3e\");\n}\n\n.carousel-control-next-icon {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e\");\n}\n\n.carousel-indicators {\n  position: absolute;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 2;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-pack: center;\n  justify-content: center;\n  padding: 0;\n  margin-right: 15%;\n  margin-bottom: 1rem;\n  margin-left: 15%;\n  list-style: none;\n}\n\n.carousel-indicators [data-bs-target] {\n  box-sizing: content-box;\n  -ms-flex: 0 1 auto;\n  flex: 0 1 auto;\n  width: 30px;\n  height: 3px;\n  padding: 0;\n  margin-right: 3px;\n  margin-left: 3px;\n  text-indent: -999px;\n  cursor: pointer;\n  background-color: #fff;\n  background-clip: padding-box;\n  border: 0;\n  border-top: 10px solid transparent;\n  border-bottom: 10px solid transparent;\n  opacity: 0.5;\n  transition: opacity 0.6s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .carousel-indicators [data-bs-target] {\n    transition: none;\n  }\n}\n\n.carousel-indicators .active {\n  opacity: 1;\n}\n\n.carousel-caption {\n  position: absolute;\n  right: 15%;\n  bottom: 1.25rem;\n  left: 15%;\n  padding-top: 1.25rem;\n  padding-bottom: 1.25rem;\n  color: #fff;\n  text-align: center;\n}\n\n.carousel-dark .carousel-control-prev-icon,\n.carousel-dark .carousel-control-next-icon {\n  -webkit-filter: invert(1) grayscale(100);\n  filter: invert(1) grayscale(100);\n}\n\n.carousel-dark .carousel-indicators [data-bs-target] {\n  background-color: #000;\n}\n\n.carousel-dark .carousel-caption {\n  color: #000;\n}\n\n@-webkit-keyframes spinner-border {\n  to {\n    -webkit-transform: rotate(360deg) /* rtl:ignore */;\n    transform: rotate(360deg) /* rtl:ignore */;\n  }\n}\n\n@keyframes spinner-border {\n  to {\n    -webkit-transform: rotate(360deg) /* rtl:ignore */;\n    transform: rotate(360deg) /* rtl:ignore */;\n  }\n}\n\n.spinner-border {\n  display: inline-block;\n  width: 2rem;\n  height: 2rem;\n  vertical-align: -0.125em;\n  border: 0.25em solid currentColor;\n  border-right-color: transparent;\n  border-radius: 50%;\n  -webkit-animation: 0.75s linear infinite spinner-border;\n  animation: 0.75s linear infinite spinner-border;\n}\n\n.spinner-border-sm {\n  width: 1rem;\n  height: 1rem;\n  border-width: 0.2em;\n}\n\n@-webkit-keyframes spinner-grow {\n  0% {\n    -webkit-transform: scale(0);\n    transform: scale(0);\n  }\n  50% {\n    opacity: 1;\n    -webkit-transform: none;\n    transform: none;\n  }\n}\n\n@keyframes spinner-grow {\n  0% {\n    -webkit-transform: scale(0);\n    transform: scale(0);\n  }\n  50% {\n    opacity: 1;\n    -webkit-transform: none;\n    transform: none;\n  }\n}\n\n.spinner-grow {\n  display: inline-block;\n  width: 2rem;\n  height: 2rem;\n  vertical-align: -0.125em;\n  background-color: currentColor;\n  border-radius: 50%;\n  opacity: 0;\n  -webkit-animation: 0.75s linear infinite spinner-grow;\n  animation: 0.75s linear infinite spinner-grow;\n}\n\n.spinner-grow-sm {\n  width: 1rem;\n  height: 1rem;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .spinner-border,\n  .spinner-grow {\n    -webkit-animation-duration: 1.5s;\n    animation-duration: 1.5s;\n  }\n}\n\n.offcanvas {\n  position: fixed;\n  bottom: 0;\n  z-index: 1045;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  max-width: 100%;\n  visibility: hidden;\n  background-color: #fff;\n  background-clip: padding-box;\n  outline: 0;\n  transition: -webkit-transform 0.3s ease-in-out;\n  transition: transform 0.3s ease-in-out;\n  transition: transform 0.3s ease-in-out, -webkit-transform 0.3s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .offcanvas {\n    transition: none;\n  }\n}\n\n.offcanvas-backdrop {\n  position: fixed;\n  top: 0;\n  left: 0;\n  z-index: 1040;\n  width: 100vw;\n  height: 100vh;\n  background-color: #000;\n}\n\n.offcanvas-backdrop.fade {\n  opacity: 0;\n}\n\n.offcanvas-backdrop.show {\n  opacity: 0.5;\n}\n\n.offcanvas-header {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-align: center;\n  align-items: center;\n  -ms-flex-pack: justify;\n  justify-content: space-between;\n  padding: 1rem 1rem;\n}\n\n.offcanvas-header .btn-close {\n  padding: 0.5rem 0.5rem;\n  margin-top: -0.5rem;\n  margin-right: -0.5rem;\n  margin-bottom: -0.5rem;\n}\n\n.offcanvas-title {\n  margin-bottom: 0;\n  line-height: 1.5;\n}\n\n.offcanvas-body {\n  -ms-flex-positive: 1;\n  flex-grow: 1;\n  padding: 1rem 1rem;\n  overflow-y: auto;\n}\n\n.offcanvas-start {\n  top: 0;\n  left: 0;\n  width: 400px;\n  border-right: 1px solid #eeeeee;\n  -webkit-transform: translateX(-100%);\n  transform: translateX(-100%);\n}\n\n.offcanvas-end {\n  top: 0;\n  right: 0;\n  width: 400px;\n  border-left: 1px solid #eeeeee;\n  -webkit-transform: translateX(100%);\n  transform: translateX(100%);\n}\n\n.offcanvas-top {\n  top: 0;\n  right: 0;\n  left: 0;\n  height: 30vh;\n  max-height: 100%;\n  border-bottom: 1px solid #eeeeee;\n  -webkit-transform: translateY(-100%);\n  transform: translateY(-100%);\n}\n\n.offcanvas-bottom {\n  right: 0;\n  left: 0;\n  height: 30vh;\n  max-height: 100%;\n  border-top: 1px solid #eeeeee;\n  -webkit-transform: translateY(100%);\n  transform: translateY(100%);\n}\n\n.offcanvas.show {\n  -webkit-transform: none;\n  transform: none;\n}\n\n.placeholder {\n  display: inline-block;\n  min-height: 1em;\n  vertical-align: middle;\n  cursor: wait;\n  background-color: currentColor;\n  opacity: 0.5;\n}\n\n.placeholder.btn::before {\n  display: inline-block;\n  content: \"\";\n}\n\n.placeholder-xs {\n  min-height: .6em;\n}\n\n.placeholder-sm {\n  min-height: .8em;\n}\n\n.placeholder-lg {\n  min-height: 1.2em;\n}\n\n.placeholder-glow .placeholder {\n  -webkit-animation: placeholder-glow 2s ease-in-out infinite;\n  animation: placeholder-glow 2s ease-in-out infinite;\n}\n\n@-webkit-keyframes placeholder-glow {\n  50% {\n    opacity: 0.2;\n  }\n}\n\n@keyframes placeholder-glow {\n  50% {\n    opacity: 0.2;\n  }\n}\n\n.placeholder-wave {\n  -webkit-mask-image: linear-gradient(130deg, #000 55%, rgba(0, 0, 0, 0.8) 75%, #000 95%);\n  mask-image: linear-gradient(130deg, #000 55%, rgba(0, 0, 0, 0.8) 75%, #000 95%);\n  -webkit-mask-size: 200% 100%;\n  mask-size: 200% 100%;\n  -webkit-animation: placeholder-wave 2s linear infinite;\n  animation: placeholder-wave 2s linear infinite;\n}\n\n@-webkit-keyframes placeholder-wave {\n  100% {\n    -webkit-mask-position: -200% 0%;\n    mask-position: -200% 0%;\n  }\n}\n\n@keyframes placeholder-wave {\n  100% {\n    -webkit-mask-position: -200% 0%;\n    mask-position: -200% 0%;\n  }\n}\n\n.clearfix::after {\n  display: block;\n  clear: both;\n  content: \"\";\n}\n\n.link-primary {\n  color: #d9230f;\n}\n\n.link-primary:hover, .link-primary:focus {\n  color: #ae1c0c;\n}\n\n.link-secondary {\n  color: #fff;\n}\n\n.link-secondary:hover, .link-secondary:focus {\n  color: white;\n}\n\n.link-success {\n  color: #469408;\n}\n\n.link-success:hover, .link-success:focus {\n  color: #387606;\n}\n\n.link-info {\n  color: #029acf;\n}\n\n.link-info:hover, .link-info:focus {\n  color: #027ba6;\n}\n\n.link-warning {\n  color: #d9831f;\n}\n\n.link-warning:hover, .link-warning:focus {\n  color: #ae6919;\n}\n\n.link-danger {\n  color: #9b479f;\n}\n\n.link-danger:hover, .link-danger:focus {\n  color: #7c397f;\n}\n\n.link-light {\n  color: #fff;\n}\n\n.link-light:hover, .link-light:focus {\n  color: white;\n}\n\n.link-dark {\n  color: #373a3c;\n}\n\n.link-dark:hover, .link-dark:focus {\n  color: #2c2e30;\n}\n\n.ratio {\n  position: relative;\n  width: 100%;\n}\n\n.ratio::before {\n  display: block;\n  padding-top: var(--bs-aspect-ratio);\n  content: \"\";\n}\n\n.ratio > * {\n  position: absolute;\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n}\n\n.ratio-1x1 {\n  --bs-aspect-ratio: 100%;\n}\n\n.ratio-4x3 {\n  --bs-aspect-ratio: calc(3 / 4 * 100%);\n}\n\n.ratio-16x9 {\n  --bs-aspect-ratio: calc(9 / 16 * 100%);\n}\n\n.ratio-21x9 {\n  --bs-aspect-ratio: calc(9 / 21 * 100%);\n}\n\n.fixed-top {\n  position: fixed;\n  top: 0;\n  right: 0;\n  left: 0;\n  z-index: 1030;\n}\n\n.fixed-bottom {\n  position: fixed;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 1030;\n}\n\n.sticky-top {\n  position: -webkit-sticky;\n  position: sticky;\n  top: 0;\n  z-index: 1020;\n}\n\n@media (min-width: 576px) {\n  .sticky-sm-top {\n    position: -webkit-sticky;\n    position: sticky;\n    top: 0;\n    z-index: 1020;\n  }\n}\n\n@media (min-width: 768px) {\n  .sticky-md-top {\n    position: -webkit-sticky;\n    position: sticky;\n    top: 0;\n    z-index: 1020;\n  }\n}\n\n@media (min-width: 992px) {\n  .sticky-lg-top {\n    position: -webkit-sticky;\n    position: sticky;\n    top: 0;\n    z-index: 1020;\n  }\n}\n\n@media (min-width: 1200px) {\n  .sticky-xl-top {\n    position: -webkit-sticky;\n    position: sticky;\n    top: 0;\n    z-index: 1020;\n  }\n}\n\n@media (min-width: 1400px) {\n  .sticky-xxl-top {\n    position: -webkit-sticky;\n    position: sticky;\n    top: 0;\n    z-index: 1020;\n  }\n}\n\n.hstack {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-direction: row;\n  flex-direction: row;\n  -ms-flex-align: center;\n  align-items: center;\n  -ms-flex-item-align: stretch;\n  align-self: stretch;\n}\n\n.vstack {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex: 1 1 auto;\n  flex: 1 1 auto;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  -ms-flex-item-align: stretch;\n  align-self: stretch;\n}\n\n.visually-hidden,\n.visually-hidden-focusable:not(:focus):not(:focus-within) {\n  position: absolute !important;\n  width: 1px !important;\n  height: 1px !important;\n  padding: 0 !important;\n  margin: -1px !important;\n  overflow: hidden !important;\n  clip: rect(0, 0, 0, 0) !important;\n  white-space: nowrap !important;\n  border: 0 !important;\n}\n\n.stretched-link::after {\n  position: absolute;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 1;\n  content: \"\";\n}\n\n.text-truncate {\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n}\n\n.vr {\n  display: inline-block;\n  -ms-flex-item-align: stretch;\n  align-self: stretch;\n  width: 1px;\n  min-height: 1em;\n  background-color: currentColor;\n  opacity: 0.25;\n}\n\n.align-baseline {\n  vertical-align: baseline !important;\n}\n\n.align-top {\n  vertical-align: top !important;\n}\n\n.align-middle {\n  vertical-align: middle !important;\n}\n\n.align-bottom {\n  vertical-align: bottom !important;\n}\n\n.align-text-bottom {\n  vertical-align: text-bottom !important;\n}\n\n.align-text-top {\n  vertical-align: text-top !important;\n}\n\n.float-start {\n  float: left !important;\n}\n\n.float-end {\n  float: right !important;\n}\n\n.float-none {\n  float: none !important;\n}\n\n.opacity-0 {\n  opacity: 0 !important;\n}\n\n.opacity-25 {\n  opacity: 0.25 !important;\n}\n\n.opacity-50 {\n  opacity: 0.5 !important;\n}\n\n.opacity-75 {\n  opacity: 0.75 !important;\n}\n\n.opacity-100 {\n  opacity: 1 !important;\n}\n\n.overflow-auto {\n  overflow: auto !important;\n}\n\n.overflow-hidden {\n  overflow: hidden !important;\n}\n\n.overflow-visible {\n  overflow: visible !important;\n}\n\n.overflow-scroll {\n  overflow: scroll !important;\n}\n\n.d-inline {\n  display: inline !important;\n}\n\n.d-inline-block {\n  display: inline-block !important;\n}\n\n.d-block {\n  display: block !important;\n}\n\n.d-grid {\n  display: grid !important;\n}\n\n.d-table {\n  display: table !important;\n}\n\n.d-table-row {\n  display: table-row !important;\n}\n\n.d-table-cell {\n  display: table-cell !important;\n}\n\n.d-flex {\n  display: -ms-flexbox !important;\n  display: flex !important;\n}\n\n.d-inline-flex {\n  display: -ms-inline-flexbox !important;\n  display: inline-flex !important;\n}\n\n.d-none {\n  display: none !important;\n}\n\n.shadow {\n  box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15) !important;\n}\n\n.shadow-sm {\n  box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075) !important;\n}\n\n.shadow-lg {\n  box-shadow: 0 1rem 3rem rgba(0, 0, 0, 0.175) !important;\n}\n\n.shadow-none {\n  box-shadow: none !important;\n}\n\n.position-static {\n  position: static !important;\n}\n\n.position-relative {\n  position: relative !important;\n}\n\n.position-absolute {\n  position: absolute !important;\n}\n\n.position-fixed {\n  position: fixed !important;\n}\n\n.position-sticky {\n  position: -webkit-sticky !important;\n  position: sticky !important;\n}\n\n.top-0 {\n  top: 0 !important;\n}\n\n.top-50 {\n  top: 50% !important;\n}\n\n.top-100 {\n  top: 100% !important;\n}\n\n.bottom-0 {\n  bottom: 0 !important;\n}\n\n.bottom-50 {\n  bottom: 50% !important;\n}\n\n.bottom-100 {\n  bottom: 100% !important;\n}\n\n.start-0 {\n  left: 0 !important;\n}\n\n.start-50 {\n  left: 50% !important;\n}\n\n.start-100 {\n  left: 100% !important;\n}\n\n.end-0 {\n  right: 0 !important;\n}\n\n.end-50 {\n  right: 50% !important;\n}\n\n.end-100 {\n  right: 100% !important;\n}\n\n.translate-middle {\n  -webkit-transform: translate(-50%, -50%) !important;\n  transform: translate(-50%, -50%) !important;\n}\n\n.translate-middle-x {\n  -webkit-transform: translateX(-50%) !important;\n  transform: translateX(-50%) !important;\n}\n\n.translate-middle-y {\n  -webkit-transform: translateY(-50%) !important;\n  transform: translateY(-50%) !important;\n}\n\n.border {\n  border: 1px solid #ccc !important;\n}\n\n.border-0 {\n  border: 0 !important;\n}\n\n.border-top {\n  border-top: 1px solid #ccc !important;\n}\n\n.border-top-0 {\n  border-top: 0 !important;\n}\n\n.border-end {\n  border-right: 1px solid #ccc !important;\n}\n\n.border-end-0 {\n  border-right: 0 !important;\n}\n\n.border-bottom {\n  border-bottom: 1px solid #ccc !important;\n}\n\n.border-bottom-0 {\n  border-bottom: 0 !important;\n}\n\n.border-start {\n  border-left: 1px solid #ccc !important;\n}\n\n.border-start-0 {\n  border-left: 0 !important;\n}\n\n.border-primary {\n  border-color: #d9230f !important;\n}\n\n.border-secondary {\n  border-color: #fff !important;\n}\n\n.border-success {\n  border-color: #469408 !important;\n}\n\n.border-info {\n  border-color: #029acf !important;\n}\n\n.border-warning {\n  border-color: #d9831f !important;\n}\n\n.border-danger {\n  border-color: #9b479f !important;\n}\n\n.border-light {\n  border-color: #fff !important;\n}\n\n.border-dark {\n  border-color: #373a3c !important;\n}\n\n.border-white {\n  border-color: #fff !important;\n}\n\n.border-1 {\n  border-width: 1px !important;\n}\n\n.border-2 {\n  border-width: 2px !important;\n}\n\n.border-3 {\n  border-width: 3px !important;\n}\n\n.border-4 {\n  border-width: 4px !important;\n}\n\n.border-5 {\n  border-width: 5px !important;\n}\n\n.w-25 {\n  width: 25% !important;\n}\n\n.w-50 {\n  width: 50% !important;\n}\n\n.w-75 {\n  width: 75% !important;\n}\n\n.w-100 {\n  width: 100% !important;\n}\n\n.w-auto {\n  width: auto !important;\n}\n\n.mw-100 {\n  max-width: 100% !important;\n}\n\n.vw-100 {\n  width: 100vw !important;\n}\n\n.min-vw-100 {\n  min-width: 100vw !important;\n}\n\n.h-25 {\n  height: 25% !important;\n}\n\n.h-50 {\n  height: 50% !important;\n}\n\n.h-75 {\n  height: 75% !important;\n}\n\n.h-100 {\n  height: 100% !important;\n}\n\n.h-auto {\n  height: auto !important;\n}\n\n.mh-100 {\n  max-height: 100% !important;\n}\n\n.vh-100 {\n  height: 100vh !important;\n}\n\n.min-vh-100 {\n  min-height: 100vh !important;\n}\n\n.flex-fill {\n  -ms-flex: 1 1 auto !important;\n  flex: 1 1 auto !important;\n}\n\n.flex-row {\n  -ms-flex-direction: row !important;\n  flex-direction: row !important;\n}\n\n.flex-column {\n  -ms-flex-direction: column !important;\n  flex-direction: column !important;\n}\n\n.flex-row-reverse {\n  -ms-flex-direction: row-reverse !important;\n  flex-direction: row-reverse !important;\n}\n\n.flex-column-reverse {\n  -ms-flex-direction: column-reverse !important;\n  flex-direction: column-reverse !important;\n}\n\n.flex-grow-0 {\n  -ms-flex-positive: 0 !important;\n  flex-grow: 0 !important;\n}\n\n.flex-grow-1 {\n  -ms-flex-positive: 1 !important;\n  flex-grow: 1 !important;\n}\n\n.flex-shrink-0 {\n  -ms-flex-negative: 0 !important;\n  flex-shrink: 0 !important;\n}\n\n.flex-shrink-1 {\n  -ms-flex-negative: 1 !important;\n  flex-shrink: 1 !important;\n}\n\n.flex-wrap {\n  -ms-flex-wrap: wrap !important;\n  flex-wrap: wrap !important;\n}\n\n.flex-nowrap {\n  -ms-flex-wrap: nowrap !important;\n  flex-wrap: nowrap !important;\n}\n\n.flex-wrap-reverse {\n  -ms-flex-wrap: wrap-reverse !important;\n  flex-wrap: wrap-reverse !important;\n}\n\n.gap-0 {\n  gap: 0 !important;\n}\n\n.gap-1 {\n  gap: 0.25rem !important;\n}\n\n.gap-2 {\n  gap: 0.5rem !important;\n}\n\n.gap-3 {\n  gap: 1rem !important;\n}\n\n.gap-4 {\n  gap: 1.5rem !important;\n}\n\n.gap-5 {\n  gap: 3rem !important;\n}\n\n.justify-content-start {\n  -ms-flex-pack: start !important;\n  justify-content: flex-start !important;\n}\n\n.justify-content-end {\n  -ms-flex-pack: end !important;\n  justify-content: flex-end !important;\n}\n\n.justify-content-center {\n  -ms-flex-pack: center !important;\n  justify-content: center !important;\n}\n\n.justify-content-between {\n  -ms-flex-pack: justify !important;\n  justify-content: space-between !important;\n}\n\n.justify-content-around {\n  -ms-flex-pack: distribute !important;\n  justify-content: space-around !important;\n}\n\n.justify-content-evenly {\n  -ms-flex-pack: space-evenly !important;\n  justify-content: space-evenly !important;\n}\n\n.align-items-start {\n  -ms-flex-align: start !important;\n  align-items: flex-start !important;\n}\n\n.align-items-end {\n  -ms-flex-align: end !important;\n  align-items: flex-end !important;\n}\n\n.align-items-center {\n  -ms-flex-align: center !important;\n  align-items: center !important;\n}\n\n.align-items-baseline {\n  -ms-flex-align: baseline !important;\n  align-items: baseline !important;\n}\n\n.align-items-stretch {\n  -ms-flex-align: stretch !important;\n  align-items: stretch !important;\n}\n\n.align-content-start {\n  -ms-flex-line-pack: start !important;\n  align-content: flex-start !important;\n}\n\n.align-content-end {\n  -ms-flex-line-pack: end !important;\n  align-content: flex-end !important;\n}\n\n.align-content-center {\n  -ms-flex-line-pack: center !important;\n  align-content: center !important;\n}\n\n.align-content-between {\n  -ms-flex-line-pack: justify !important;\n  align-content: space-between !important;\n}\n\n.align-content-around {\n  -ms-flex-line-pack: distribute !important;\n  align-content: space-around !important;\n}\n\n.align-content-stretch {\n  -ms-flex-line-pack: stretch !important;\n  align-content: stretch !important;\n}\n\n.align-self-auto {\n  -ms-flex-item-align: auto !important;\n  align-self: auto !important;\n}\n\n.align-self-start {\n  -ms-flex-item-align: start !important;\n  align-self: flex-start !important;\n}\n\n.align-self-end {\n  -ms-flex-item-align: end !important;\n  align-self: flex-end !important;\n}\n\n.align-self-center {\n  -ms-flex-item-align: center !important;\n  align-self: center !important;\n}\n\n.align-self-baseline {\n  -ms-flex-item-align: baseline !important;\n  align-self: baseline !important;\n}\n\n.align-self-stretch {\n  -ms-flex-item-align: stretch !important;\n  align-self: stretch !important;\n}\n\n.order-first {\n  -ms-flex-order: -1 !important;\n  order: -1 !important;\n}\n\n.order-0 {\n  -ms-flex-order: 0 !important;\n  order: 0 !important;\n}\n\n.order-1 {\n  -ms-flex-order: 1 !important;\n  order: 1 !important;\n}\n\n.order-2 {\n  -ms-flex-order: 2 !important;\n  order: 2 !important;\n}\n\n.order-3 {\n  -ms-flex-order: 3 !important;\n  order: 3 !important;\n}\n\n.order-4 {\n  -ms-flex-order: 4 !important;\n  order: 4 !important;\n}\n\n.order-5 {\n  -ms-flex-order: 5 !important;\n  order: 5 !important;\n}\n\n.order-last {\n  -ms-flex-order: 6 !important;\n  order: 6 !important;\n}\n\n.m-0 {\n  margin: 0 !important;\n}\n\n.m-1 {\n  margin: 0.25rem !important;\n}\n\n.m-2 {\n  margin: 0.5rem !important;\n}\n\n.m-3 {\n  margin: 1rem !important;\n}\n\n.m-4 {\n  margin: 1.5rem !important;\n}\n\n.m-5 {\n  margin: 3rem !important;\n}\n\n.m-auto {\n  margin: auto !important;\n}\n\n.mx-0 {\n  margin-right: 0 !important;\n  margin-left: 0 !important;\n}\n\n.mx-1 {\n  margin-right: 0.25rem !important;\n  margin-left: 0.25rem !important;\n}\n\n.mx-2 {\n  margin-right: 0.5rem !important;\n  margin-left: 0.5rem !important;\n}\n\n.mx-3 {\n  margin-right: 1rem !important;\n  margin-left: 1rem !important;\n}\n\n.mx-4 {\n  margin-right: 1.5rem !important;\n  margin-left: 1.5rem !important;\n}\n\n.mx-5 {\n  margin-right: 3rem !important;\n  margin-left: 3rem !important;\n}\n\n.mx-auto {\n  margin-right: auto !important;\n  margin-left: auto !important;\n}\n\n.my-0 {\n  margin-top: 0 !important;\n  margin-bottom: 0 !important;\n}\n\n.my-1 {\n  margin-top: 0.25rem !important;\n  margin-bottom: 0.25rem !important;\n}\n\n.my-2 {\n  margin-top: 0.5rem !important;\n  margin-bottom: 0.5rem !important;\n}\n\n.my-3 {\n  margin-top: 1rem !important;\n  margin-bottom: 1rem !important;\n}\n\n.my-4 {\n  margin-top: 1.5rem !important;\n  margin-bottom: 1.5rem !important;\n}\n\n.my-5 {\n  margin-top: 3rem !important;\n  margin-bottom: 3rem !important;\n}\n\n.my-auto {\n  margin-top: auto !important;\n  margin-bottom: auto !important;\n}\n\n.mt-0 {\n  margin-top: 0 !important;\n}\n\n.mt-1 {\n  margin-top: 0.25rem !important;\n}\n\n.mt-2 {\n  margin-top: 0.5rem !important;\n}\n\n.mt-3 {\n  margin-top: 1rem !important;\n}\n\n.mt-4 {\n  margin-top: 1.5rem !important;\n}\n\n.mt-5 {\n  margin-top: 3rem !important;\n}\n\n.mt-auto {\n  margin-top: auto !important;\n}\n\n.me-0 {\n  margin-right: 0 !important;\n}\n\n.me-1 {\n  margin-right: 0.25rem !important;\n}\n\n.me-2 {\n  margin-right: 0.5rem !important;\n}\n\n.me-3 {\n  margin-right: 1rem !important;\n}\n\n.me-4 {\n  margin-right: 1.5rem !important;\n}\n\n.me-5 {\n  margin-right: 3rem !important;\n}\n\n.me-auto {\n  margin-right: auto !important;\n}\n\n.mb-0 {\n  margin-bottom: 0 !important;\n}\n\n.mb-1 {\n  margin-bottom: 0.25rem !important;\n}\n\n.mb-2 {\n  margin-bottom: 0.5rem !important;\n}\n\n.mb-3 {\n  margin-bottom: 1rem !important;\n}\n\n.mb-4 {\n  margin-bottom: 1.5rem !important;\n}\n\n.mb-5 {\n  margin-bottom: 3rem !important;\n}\n\n.mb-auto {\n  margin-bottom: auto !important;\n}\n\n.ms-0 {\n  margin-left: 0 !important;\n}\n\n.ms-1 {\n  margin-left: 0.25rem !important;\n}\n\n.ms-2 {\n  margin-left: 0.5rem !important;\n}\n\n.ms-3 {\n  margin-left: 1rem !important;\n}\n\n.ms-4 {\n  margin-left: 1.5rem !important;\n}\n\n.ms-5 {\n  margin-left: 3rem !important;\n}\n\n.ms-auto {\n  margin-left: auto !important;\n}\n\n.p-0 {\n  padding: 0 !important;\n}\n\n.p-1 {\n  padding: 0.25rem !important;\n}\n\n.p-2 {\n  padding: 0.5rem !important;\n}\n\n.p-3 {\n  padding: 1rem !important;\n}\n\n.p-4 {\n  padding: 1.5rem !important;\n}\n\n.p-5 {\n  padding: 3rem !important;\n}\n\n.px-0 {\n  padding-right: 0 !important;\n  padding-left: 0 !important;\n}\n\n.px-1 {\n  padding-right: 0.25rem !important;\n  padding-left: 0.25rem !important;\n}\n\n.px-2 {\n  padding-right: 0.5rem !important;\n  padding-left: 0.5rem !important;\n}\n\n.px-3 {\n  padding-right: 1rem !important;\n  padding-left: 1rem !important;\n}\n\n.px-4 {\n  padding-right: 1.5rem !important;\n  padding-left: 1.5rem !important;\n}\n\n.px-5 {\n  padding-right: 3rem !important;\n  padding-left: 3rem !important;\n}\n\n.py-0 {\n  padding-top: 0 !important;\n  padding-bottom: 0 !important;\n}\n\n.py-1 {\n  padding-top: 0.25rem !important;\n  padding-bottom: 0.25rem !important;\n}\n\n.py-2 {\n  padding-top: 0.5rem !important;\n  padding-bottom: 0.5rem !important;\n}\n\n.py-3 {\n  padding-top: 1rem !important;\n  padding-bottom: 1rem !important;\n}\n\n.py-4 {\n  padding-top: 1.5rem !important;\n  padding-bottom: 1.5rem !important;\n}\n\n.py-5 {\n  padding-top: 3rem !important;\n  padding-bottom: 3rem !important;\n}\n\n.pt-0 {\n  padding-top: 0 !important;\n}\n\n.pt-1 {\n  padding-top: 0.25rem !important;\n}\n\n.pt-2 {\n  padding-top: 0.5rem !important;\n}\n\n.pt-3 {\n  padding-top: 1rem !important;\n}\n\n.pt-4 {\n  padding-top: 1.5rem !important;\n}\n\n.pt-5 {\n  padding-top: 3rem !important;\n}\n\n.pe-0 {\n  padding-right: 0 !important;\n}\n\n.pe-1 {\n  padding-right: 0.25rem !important;\n}\n\n.pe-2 {\n  padding-right: 0.5rem !important;\n}\n\n.pe-3 {\n  padding-right: 1rem !important;\n}\n\n.pe-4 {\n  padding-right: 1.5rem !important;\n}\n\n.pe-5 {\n  padding-right: 3rem !important;\n}\n\n.pb-0 {\n  padding-bottom: 0 !important;\n}\n\n.pb-1 {\n  padding-bottom: 0.25rem !important;\n}\n\n.pb-2 {\n  padding-bottom: 0.5rem !important;\n}\n\n.pb-3 {\n  padding-bottom: 1rem !important;\n}\n\n.pb-4 {\n  padding-bottom: 1.5rem !important;\n}\n\n.pb-5 {\n  padding-bottom: 3rem !important;\n}\n\n.ps-0 {\n  padding-left: 0 !important;\n}\n\n.ps-1 {\n  padding-left: 0.25rem !important;\n}\n\n.ps-2 {\n  padding-left: 0.5rem !important;\n}\n\n.ps-3 {\n  padding-left: 1rem !important;\n}\n\n.ps-4 {\n  padding-left: 1.5rem !important;\n}\n\n.ps-5 {\n  padding-left: 3rem !important;\n}\n\n.font-monospace {\n  font-family: var(--bs-font-monospace) !important;\n}\n\n.fs-1 {\n  font-size: calc(1.375rem + 1.5vw) !important;\n}\n\n.fs-2 {\n  font-size: calc(1.325rem + 0.9vw) !important;\n}\n\n.fs-3 {\n  font-size: calc(1.3rem + 0.6vw) !important;\n}\n\n.fs-4 {\n  font-size: calc(1.275rem + 0.3vw) !important;\n}\n\n.fs-5 {\n  font-size: 1.25rem !important;\n}\n\n.fs-6 {\n  font-size: 1rem !important;\n}\n\n.fst-italic {\n  font-style: italic !important;\n}\n\n.fst-normal {\n  font-style: normal !important;\n}\n\n.fw-light {\n  font-weight: 300 !important;\n}\n\n.fw-lighter {\n  font-weight: lighter !important;\n}\n\n.fw-normal {\n  font-weight: 400 !important;\n}\n\n.fw-bold {\n  font-weight: 700 !important;\n}\n\n.fw-bolder {\n  font-weight: bolder !important;\n}\n\n.lh-1 {\n  line-height: 1 !important;\n}\n\n.lh-sm {\n  line-height: 1.25 !important;\n}\n\n.lh-base {\n  line-height: 1.5 !important;\n}\n\n.lh-lg {\n  line-height: 2 !important;\n}\n\n.text-start {\n  text-align: left !important;\n}\n\n.text-end {\n  text-align: right !important;\n}\n\n.text-center {\n  text-align: center !important;\n}\n\n.text-decoration-none {\n  text-decoration: none !important;\n}\n\n.text-decoration-underline {\n  text-decoration: underline !important;\n}\n\n.text-decoration-line-through {\n  text-decoration: line-through !important;\n}\n\n.text-lowercase {\n  text-transform: lowercase !important;\n}\n\n.text-uppercase {\n  text-transform: uppercase !important;\n}\n\n.text-capitalize {\n  text-transform: capitalize !important;\n}\n\n.text-wrap {\n  white-space: normal !important;\n}\n\n.text-nowrap {\n  white-space: nowrap !important;\n}\n\n/* rtl:begin:remove */\n.text-break {\n  word-wrap: break-word !important;\n  word-break: break-word !important;\n}\n\n/* rtl:end:remove */\n.text-primary {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-primary-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-secondary {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-secondary-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-success {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-success-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-info {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-info-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-warning {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-warning-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-danger {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-danger-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-light {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-light-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-dark {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-dark-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-black {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-black-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-white {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-white-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-body {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-body-color-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-muted {\n  --bs-text-opacity: 1;\n  color: #777 !important;\n}\n\n.text-black-50 {\n  --bs-text-opacity: 1;\n  color: rgba(0, 0, 0, 0.5) !important;\n}\n\n.text-white-50 {\n  --bs-text-opacity: 1;\n  color: rgba(255, 255, 255, 0.5) !important;\n}\n\n.text-reset {\n  --bs-text-opacity: 1;\n  color: inherit !important;\n}\n\n.text-opacity-25 {\n  --bs-text-opacity: 0.25;\n}\n\n.text-opacity-50 {\n  --bs-text-opacity: 0.5;\n}\n\n.text-opacity-75 {\n  --bs-text-opacity: 0.75;\n}\n\n.text-opacity-100 {\n  --bs-text-opacity: 1;\n}\n\n.bg-primary {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-primary-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-secondary {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-secondary-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-success {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-success-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-info {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-info-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-warning {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-warning-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-danger {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-danger-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-light {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-light-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-dark {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-dark-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-black {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-black-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-white {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-white-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-body {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-body-bg-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-transparent {\n  --bs-bg-opacity: 1;\n  background-color: transparent !important;\n}\n\n.bg-opacity-10 {\n  --bs-bg-opacity: 0.1;\n}\n\n.bg-opacity-25 {\n  --bs-bg-opacity: 0.25;\n}\n\n.bg-opacity-50 {\n  --bs-bg-opacity: 0.5;\n}\n\n.bg-opacity-75 {\n  --bs-bg-opacity: 0.75;\n}\n\n.bg-opacity-100 {\n  --bs-bg-opacity: 1;\n}\n\n.bg-gradient {\n  background-image: var(--bs-gradient) !important;\n}\n\n.user-select-all {\n  -webkit-user-select: all !important;\n  -moz-user-select: all !important;\n  user-select: all !important;\n}\n\n.user-select-auto {\n  -webkit-user-select: auto !important;\n  -moz-user-select: auto !important;\n  -ms-user-select: auto !important;\n  user-select: auto !important;\n}\n\n.user-select-none {\n  -webkit-user-select: none !important;\n  -moz-user-select: none !important;\n  -ms-user-select: none !important;\n  user-select: none !important;\n}\n\n.pe-none {\n  pointer-events: none !important;\n}\n\n.pe-auto {\n  pointer-events: auto !important;\n}\n\n.rounded {\n  border-radius: 0.25rem !important;\n}\n\n.rounded-0 {\n  border-radius: 0 !important;\n}\n\n.rounded-1 {\n  border-radius: 0.2rem !important;\n}\n\n.rounded-2 {\n  border-radius: 0.25rem !important;\n}\n\n.rounded-3 {\n  border-radius: 0.3rem !important;\n}\n\n.rounded-circle {\n  border-radius: 50% !important;\n}\n\n.rounded-pill {\n  border-radius: 50rem !important;\n}\n\n.rounded-top {\n  border-top-left-radius: 0.25rem !important;\n  border-top-right-radius: 0.25rem !important;\n}\n\n.rounded-end {\n  border-top-right-radius: 0.25rem !important;\n  border-bottom-right-radius: 0.25rem !important;\n}\n\n.rounded-bottom {\n  border-bottom-right-radius: 0.25rem !important;\n  border-bottom-left-radius: 0.25rem !important;\n}\n\n.rounded-start {\n  border-bottom-left-radius: 0.25rem !important;\n  border-top-left-radius: 0.25rem !important;\n}\n\n.visible {\n  visibility: visible !important;\n}\n\n.invisible {\n  visibility: hidden !important;\n}\n\n@media (min-width: 576px) {\n  .float-sm-start {\n    float: left !important;\n  }\n  .float-sm-end {\n    float: right !important;\n  }\n  .float-sm-none {\n    float: none !important;\n  }\n  .d-sm-inline {\n    display: inline !important;\n  }\n  .d-sm-inline-block {\n    display: inline-block !important;\n  }\n  .d-sm-block {\n    display: block !important;\n  }\n  .d-sm-grid {\n    display: grid !important;\n  }\n  .d-sm-table {\n    display: table !important;\n  }\n  .d-sm-table-row {\n    display: table-row !important;\n  }\n  .d-sm-table-cell {\n    display: table-cell !important;\n  }\n  .d-sm-flex {\n    display: -ms-flexbox !important;\n    display: flex !important;\n  }\n  .d-sm-inline-flex {\n    display: -ms-inline-flexbox !important;\n    display: inline-flex !important;\n  }\n  .d-sm-none {\n    display: none !important;\n  }\n  .flex-sm-fill {\n    -ms-flex: 1 1 auto !important;\n    flex: 1 1 auto !important;\n  }\n  .flex-sm-row {\n    -ms-flex-direction: row !important;\n    flex-direction: row !important;\n  }\n  .flex-sm-column {\n    -ms-flex-direction: column !important;\n    flex-direction: column !important;\n  }\n  .flex-sm-row-reverse {\n    -ms-flex-direction: row-reverse !important;\n    flex-direction: row-reverse !important;\n  }\n  .flex-sm-column-reverse {\n    -ms-flex-direction: column-reverse !important;\n    flex-direction: column-reverse !important;\n  }\n  .flex-sm-grow-0 {\n    -ms-flex-positive: 0 !important;\n    flex-grow: 0 !important;\n  }\n  .flex-sm-grow-1 {\n    -ms-flex-positive: 1 !important;\n    flex-grow: 1 !important;\n  }\n  .flex-sm-shrink-0 {\n    -ms-flex-negative: 0 !important;\n    flex-shrink: 0 !important;\n  }\n  .flex-sm-shrink-1 {\n    -ms-flex-negative: 1 !important;\n    flex-shrink: 1 !important;\n  }\n  .flex-sm-wrap {\n    -ms-flex-wrap: wrap !important;\n    flex-wrap: wrap !important;\n  }\n  .flex-sm-nowrap {\n    -ms-flex-wrap: nowrap !important;\n    flex-wrap: nowrap !important;\n  }\n  .flex-sm-wrap-reverse {\n    -ms-flex-wrap: wrap-reverse !important;\n    flex-wrap: wrap-reverse !important;\n  }\n  .gap-sm-0 {\n    gap: 0 !important;\n  }\n  .gap-sm-1 {\n    gap: 0.25rem !important;\n  }\n  .gap-sm-2 {\n    gap: 0.5rem !important;\n  }\n  .gap-sm-3 {\n    gap: 1rem !important;\n  }\n  .gap-sm-4 {\n    gap: 1.5rem !important;\n  }\n  .gap-sm-5 {\n    gap: 3rem !important;\n  }\n  .justify-content-sm-start {\n    -ms-flex-pack: start !important;\n    justify-content: flex-start !important;\n  }\n  .justify-content-sm-end {\n    -ms-flex-pack: end !important;\n    justify-content: flex-end !important;\n  }\n  .justify-content-sm-center {\n    -ms-flex-pack: center !important;\n    justify-content: center !important;\n  }\n  .justify-content-sm-between {\n    -ms-flex-pack: justify !important;\n    justify-content: space-between !important;\n  }\n  .justify-content-sm-around {\n    -ms-flex-pack: distribute !important;\n    justify-content: space-around !important;\n  }\n  .justify-content-sm-evenly {\n    -ms-flex-pack: space-evenly !important;\n    justify-content: space-evenly !important;\n  }\n  .align-items-sm-start {\n    -ms-flex-align: start !important;\n    align-items: flex-start !important;\n  }\n  .align-items-sm-end {\n    -ms-flex-align: end !important;\n    align-items: flex-end !important;\n  }\n  .align-items-sm-center {\n    -ms-flex-align: center !important;\n    align-items: center !important;\n  }\n  .align-items-sm-baseline {\n    -ms-flex-align: baseline !important;\n    align-items: baseline !important;\n  }\n  .align-items-sm-stretch {\n    -ms-flex-align: stretch !important;\n    align-items: stretch !important;\n  }\n  .align-content-sm-start {\n    -ms-flex-line-pack: start !important;\n    align-content: flex-start !important;\n  }\n  .align-content-sm-end {\n    -ms-flex-line-pack: end !important;\n    align-content: flex-end !important;\n  }\n  .align-content-sm-center {\n    -ms-flex-line-pack: center !important;\n    align-content: center !important;\n  }\n  .align-content-sm-between {\n    -ms-flex-line-pack: justify !important;\n    align-content: space-between !important;\n  }\n  .align-content-sm-around {\n    -ms-flex-line-pack: distribute !important;\n    align-content: space-around !important;\n  }\n  .align-content-sm-stretch {\n    -ms-flex-line-pack: stretch !important;\n    align-content: stretch !important;\n  }\n  .align-self-sm-auto {\n    -ms-flex-item-align: auto !important;\n    align-self: auto !important;\n  }\n  .align-self-sm-start {\n    -ms-flex-item-align: start !important;\n    align-self: flex-start !important;\n  }\n  .align-self-sm-end {\n    -ms-flex-item-align: end !important;\n    align-self: flex-end !important;\n  }\n  .align-self-sm-center {\n    -ms-flex-item-align: center !important;\n    align-self: center !important;\n  }\n  .align-self-sm-baseline {\n    -ms-flex-item-align: baseline !important;\n    align-self: baseline !important;\n  }\n  .align-self-sm-stretch {\n    -ms-flex-item-align: stretch !important;\n    align-self: stretch !important;\n  }\n  .order-sm-first {\n    -ms-flex-order: -1 !important;\n    order: -1 !important;\n  }\n  .order-sm-0 {\n    -ms-flex-order: 0 !important;\n    order: 0 !important;\n  }\n  .order-sm-1 {\n    -ms-flex-order: 1 !important;\n    order: 1 !important;\n  }\n  .order-sm-2 {\n    -ms-flex-order: 2 !important;\n    order: 2 !important;\n  }\n  .order-sm-3 {\n    -ms-flex-order: 3 !important;\n    order: 3 !important;\n  }\n  .order-sm-4 {\n    -ms-flex-order: 4 !important;\n    order: 4 !important;\n  }\n  .order-sm-5 {\n    -ms-flex-order: 5 !important;\n    order: 5 !important;\n  }\n  .order-sm-last {\n    -ms-flex-order: 6 !important;\n    order: 6 !important;\n  }\n  .m-sm-0 {\n    margin: 0 !important;\n  }\n  .m-sm-1 {\n    margin: 0.25rem !important;\n  }\n  .m-sm-2 {\n    margin: 0.5rem !important;\n  }\n  .m-sm-3 {\n    margin: 1rem !important;\n  }\n  .m-sm-4 {\n    margin: 1.5rem !important;\n  }\n  .m-sm-5 {\n    margin: 3rem !important;\n  }\n  .m-sm-auto {\n    margin: auto !important;\n  }\n  .mx-sm-0 {\n    margin-right: 0 !important;\n    margin-left: 0 !important;\n  }\n  .mx-sm-1 {\n    margin-right: 0.25rem !important;\n    margin-left: 0.25rem !important;\n  }\n  .mx-sm-2 {\n    margin-right: 0.5rem !important;\n    margin-left: 0.5rem !important;\n  }\n  .mx-sm-3 {\n    margin-right: 1rem !important;\n    margin-left: 1rem !important;\n  }\n  .mx-sm-4 {\n    margin-right: 1.5rem !important;\n    margin-left: 1.5rem !important;\n  }\n  .mx-sm-5 {\n    margin-right: 3rem !important;\n    margin-left: 3rem !important;\n  }\n  .mx-sm-auto {\n    margin-right: auto !important;\n    margin-left: auto !important;\n  }\n  .my-sm-0 {\n    margin-top: 0 !important;\n    margin-bottom: 0 !important;\n  }\n  .my-sm-1 {\n    margin-top: 0.25rem !important;\n    margin-bottom: 0.25rem !important;\n  }\n  .my-sm-2 {\n    margin-top: 0.5rem !important;\n    margin-bottom: 0.5rem !important;\n  }\n  .my-sm-3 {\n    margin-top: 1rem !important;\n    margin-bottom: 1rem !important;\n  }\n  .my-sm-4 {\n    margin-top: 1.5rem !important;\n    margin-bottom: 1.5rem !important;\n  }\n  .my-sm-5 {\n    margin-top: 3rem !important;\n    margin-bottom: 3rem !important;\n  }\n  .my-sm-auto {\n    margin-top: auto !important;\n    margin-bottom: auto !important;\n  }\n  .mt-sm-0 {\n    margin-top: 0 !important;\n  }\n  .mt-sm-1 {\n    margin-top: 0.25rem !important;\n  }\n  .mt-sm-2 {\n    margin-top: 0.5rem !important;\n  }\n  .mt-sm-3 {\n    margin-top: 1rem !important;\n  }\n  .mt-sm-4 {\n    margin-top: 1.5rem !important;\n  }\n  .mt-sm-5 {\n    margin-top: 3rem !important;\n  }\n  .mt-sm-auto {\n    margin-top: auto !important;\n  }\n  .me-sm-0 {\n    margin-right: 0 !important;\n  }\n  .me-sm-1 {\n    margin-right: 0.25rem !important;\n  }\n  .me-sm-2 {\n    margin-right: 0.5rem !important;\n  }\n  .me-sm-3 {\n    margin-right: 1rem !important;\n  }\n  .me-sm-4 {\n    margin-right: 1.5rem !important;\n  }\n  .me-sm-5 {\n    margin-right: 3rem !important;\n  }\n  .me-sm-auto {\n    margin-right: auto !important;\n  }\n  .mb-sm-0 {\n    margin-bottom: 0 !important;\n  }\n  .mb-sm-1 {\n    margin-bottom: 0.25rem !important;\n  }\n  .mb-sm-2 {\n    margin-bottom: 0.5rem !important;\n  }\n  .mb-sm-3 {\n    margin-bottom: 1rem !important;\n  }\n  .mb-sm-4 {\n    margin-bottom: 1.5rem !important;\n  }\n  .mb-sm-5 {\n    margin-bottom: 3rem !important;\n  }\n  .mb-sm-auto {\n    margin-bottom: auto !important;\n  }\n  .ms-sm-0 {\n    margin-left: 0 !important;\n  }\n  .ms-sm-1 {\n    margin-left: 0.25rem !important;\n  }\n  .ms-sm-2 {\n    margin-left: 0.5rem !important;\n  }\n  .ms-sm-3 {\n    margin-left: 1rem !important;\n  }\n  .ms-sm-4 {\n    margin-left: 1.5rem !important;\n  }\n  .ms-sm-5 {\n    margin-left: 3rem !important;\n  }\n  .ms-sm-auto {\n    margin-left: auto !important;\n  }\n  .p-sm-0 {\n    padding: 0 !important;\n  }\n  .p-sm-1 {\n    padding: 0.25rem !important;\n  }\n  .p-sm-2 {\n    padding: 0.5rem !important;\n  }\n  .p-sm-3 {\n    padding: 1rem !important;\n  }\n  .p-sm-4 {\n    padding: 1.5rem !important;\n  }\n  .p-sm-5 {\n    padding: 3rem !important;\n  }\n  .px-sm-0 {\n    padding-right: 0 !important;\n    padding-left: 0 !important;\n  }\n  .px-sm-1 {\n    padding-right: 0.25rem !important;\n    padding-left: 0.25rem !important;\n  }\n  .px-sm-2 {\n    padding-right: 0.5rem !important;\n    padding-left: 0.5rem !important;\n  }\n  .px-sm-3 {\n    padding-right: 1rem !important;\n    padding-left: 1rem !important;\n  }\n  .px-sm-4 {\n    padding-right: 1.5rem !important;\n    padding-left: 1.5rem !important;\n  }\n  .px-sm-5 {\n    padding-right: 3rem !important;\n    padding-left: 3rem !important;\n  }\n  .py-sm-0 {\n    padding-top: 0 !important;\n    padding-bottom: 0 !important;\n  }\n  .py-sm-1 {\n    padding-top: 0.25rem !important;\n    padding-bottom: 0.25rem !important;\n  }\n  .py-sm-2 {\n    padding-top: 0.5rem !important;\n    padding-bottom: 0.5rem !important;\n  }\n  .py-sm-3 {\n    padding-top: 1rem !important;\n    padding-bottom: 1rem !important;\n  }\n  .py-sm-4 {\n    padding-top: 1.5rem !important;\n    padding-bottom: 1.5rem !important;\n  }\n  .py-sm-5 {\n    padding-top: 3rem !important;\n    padding-bottom: 3rem !important;\n  }\n  .pt-sm-0 {\n    padding-top: 0 !important;\n  }\n  .pt-sm-1 {\n    padding-top: 0.25rem !important;\n  }\n  .pt-sm-2 {\n    padding-top: 0.5rem !important;\n  }\n  .pt-sm-3 {\n    padding-top: 1rem !important;\n  }\n  .pt-sm-4 {\n    padding-top: 1.5rem !important;\n  }\n  .pt-sm-5 {\n    padding-top: 3rem !important;\n  }\n  .pe-sm-0 {\n    padding-right: 0 !important;\n  }\n  .pe-sm-1 {\n    padding-right: 0.25rem !important;\n  }\n  .pe-sm-2 {\n    padding-right: 0.5rem !important;\n  }\n  .pe-sm-3 {\n    padding-right: 1rem !important;\n  }\n  .pe-sm-4 {\n    padding-right: 1.5rem !important;\n  }\n  .pe-sm-5 {\n    padding-right: 3rem !important;\n  }\n  .pb-sm-0 {\n    padding-bottom: 0 !important;\n  }\n  .pb-sm-1 {\n    padding-bottom: 0.25rem !important;\n  }\n  .pb-sm-2 {\n    padding-bottom: 0.5rem !important;\n  }\n  .pb-sm-3 {\n    padding-bottom: 1rem !important;\n  }\n  .pb-sm-4 {\n    padding-bottom: 1.5rem !important;\n  }\n  .pb-sm-5 {\n    padding-bottom: 3rem !important;\n  }\n  .ps-sm-0 {\n    padding-left: 0 !important;\n  }\n  .ps-sm-1 {\n    padding-left: 0.25rem !important;\n  }\n  .ps-sm-2 {\n    padding-left: 0.5rem !important;\n  }\n  .ps-sm-3 {\n    padding-left: 1rem !important;\n  }\n  .ps-sm-4 {\n    padding-left: 1.5rem !important;\n  }\n  .ps-sm-5 {\n    padding-left: 3rem !important;\n  }\n  .text-sm-start {\n    text-align: left !important;\n  }\n  .text-sm-end {\n    text-align: right !important;\n  }\n  .text-sm-center {\n    text-align: center !important;\n  }\n}\n\n@media (min-width: 768px) {\n  .float-md-start {\n    float: left !important;\n  }\n  .float-md-end {\n    float: right !important;\n  }\n  .float-md-none {\n    float: none !important;\n  }\n  .d-md-inline {\n    display: inline !important;\n  }\n  .d-md-inline-block {\n    display: inline-block !important;\n  }\n  .d-md-block {\n    display: block !important;\n  }\n  .d-md-grid {\n    display: grid !important;\n  }\n  .d-md-table {\n    display: table !important;\n  }\n  .d-md-table-row {\n    display: table-row !important;\n  }\n  .d-md-table-cell {\n    display: table-cell !important;\n  }\n  .d-md-flex {\n    display: -ms-flexbox !important;\n    display: flex !important;\n  }\n  .d-md-inline-flex {\n    display: -ms-inline-flexbox !important;\n    display: inline-flex !important;\n  }\n  .d-md-none {\n    display: none !important;\n  }\n  .flex-md-fill {\n    -ms-flex: 1 1 auto !important;\n    flex: 1 1 auto !important;\n  }\n  .flex-md-row {\n    -ms-flex-direction: row !important;\n    flex-direction: row !important;\n  }\n  .flex-md-column {\n    -ms-flex-direction: column !important;\n    flex-direction: column !important;\n  }\n  .flex-md-row-reverse {\n    -ms-flex-direction: row-reverse !important;\n    flex-direction: row-reverse !important;\n  }\n  .flex-md-column-reverse {\n    -ms-flex-direction: column-reverse !important;\n    flex-direction: column-reverse !important;\n  }\n  .flex-md-grow-0 {\n    -ms-flex-positive: 0 !important;\n    flex-grow: 0 !important;\n  }\n  .flex-md-grow-1 {\n    -ms-flex-positive: 1 !important;\n    flex-grow: 1 !important;\n  }\n  .flex-md-shrink-0 {\n    -ms-flex-negative: 0 !important;\n    flex-shrink: 0 !important;\n  }\n  .flex-md-shrink-1 {\n    -ms-flex-negative: 1 !important;\n    flex-shrink: 1 !important;\n  }\n  .flex-md-wrap {\n    -ms-flex-wrap: wrap !important;\n    flex-wrap: wrap !important;\n  }\n  .flex-md-nowrap {\n    -ms-flex-wrap: nowrap !important;\n    flex-wrap: nowrap !important;\n  }\n  .flex-md-wrap-reverse {\n    -ms-flex-wrap: wrap-reverse !important;\n    flex-wrap: wrap-reverse !important;\n  }\n  .gap-md-0 {\n    gap: 0 !important;\n  }\n  .gap-md-1 {\n    gap: 0.25rem !important;\n  }\n  .gap-md-2 {\n    gap: 0.5rem !important;\n  }\n  .gap-md-3 {\n    gap: 1rem !important;\n  }\n  .gap-md-4 {\n    gap: 1.5rem !important;\n  }\n  .gap-md-5 {\n    gap: 3rem !important;\n  }\n  .justify-content-md-start {\n    -ms-flex-pack: start !important;\n    justify-content: flex-start !important;\n  }\n  .justify-content-md-end {\n    -ms-flex-pack: end !important;\n    justify-content: flex-end !important;\n  }\n  .justify-content-md-center {\n    -ms-flex-pack: center !important;\n    justify-content: center !important;\n  }\n  .justify-content-md-between {\n    -ms-flex-pack: justify !important;\n    justify-content: space-between !important;\n  }\n  .justify-content-md-around {\n    -ms-flex-pack: distribute !important;\n    justify-content: space-around !important;\n  }\n  .justify-content-md-evenly {\n    -ms-flex-pack: space-evenly !important;\n    justify-content: space-evenly !important;\n  }\n  .align-items-md-start {\n    -ms-flex-align: start !important;\n    align-items: flex-start !important;\n  }\n  .align-items-md-end {\n    -ms-flex-align: end !important;\n    align-items: flex-end !important;\n  }\n  .align-items-md-center {\n    -ms-flex-align: center !important;\n    align-items: center !important;\n  }\n  .align-items-md-baseline {\n    -ms-flex-align: baseline !important;\n    align-items: baseline !important;\n  }\n  .align-items-md-stretch {\n    -ms-flex-align: stretch !important;\n    align-items: stretch !important;\n  }\n  .align-content-md-start {\n    -ms-flex-line-pack: start !important;\n    align-content: flex-start !important;\n  }\n  .align-content-md-end {\n    -ms-flex-line-pack: end !important;\n    align-content: flex-end !important;\n  }\n  .align-content-md-center {\n    -ms-flex-line-pack: center !important;\n    align-content: center !important;\n  }\n  .align-content-md-between {\n    -ms-flex-line-pack: justify !important;\n    align-content: space-between !important;\n  }\n  .align-content-md-around {\n    -ms-flex-line-pack: distribute !important;\n    align-content: space-around !important;\n  }\n  .align-content-md-stretch {\n    -ms-flex-line-pack: stretch !important;\n    align-content: stretch !important;\n  }\n  .align-self-md-auto {\n    -ms-flex-item-align: auto !important;\n    align-self: auto !important;\n  }\n  .align-self-md-start {\n    -ms-flex-item-align: start !important;\n    align-self: flex-start !important;\n  }\n  .align-self-md-end {\n    -ms-flex-item-align: end !important;\n    align-self: flex-end !important;\n  }\n  .align-self-md-center {\n    -ms-flex-item-align: center !important;\n    align-self: center !important;\n  }\n  .align-self-md-baseline {\n    -ms-flex-item-align: baseline !important;\n    align-self: baseline !important;\n  }\n  .align-self-md-stretch {\n    -ms-flex-item-align: stretch !important;\n    align-self: stretch !important;\n  }\n  .order-md-first {\n    -ms-flex-order: -1 !important;\n    order: -1 !important;\n  }\n  .order-md-0 {\n    -ms-flex-order: 0 !important;\n    order: 0 !important;\n  }\n  .order-md-1 {\n    -ms-flex-order: 1 !important;\n    order: 1 !important;\n  }\n  .order-md-2 {\n    -ms-flex-order: 2 !important;\n    order: 2 !important;\n  }\n  .order-md-3 {\n    -ms-flex-order: 3 !important;\n    order: 3 !important;\n  }\n  .order-md-4 {\n    -ms-flex-order: 4 !important;\n    order: 4 !important;\n  }\n  .order-md-5 {\n    -ms-flex-order: 5 !important;\n    order: 5 !important;\n  }\n  .order-md-last {\n    -ms-flex-order: 6 !important;\n    order: 6 !important;\n  }\n  .m-md-0 {\n    margin: 0 !important;\n  }\n  .m-md-1 {\n    margin: 0.25rem !important;\n  }\n  .m-md-2 {\n    margin: 0.5rem !important;\n  }\n  .m-md-3 {\n    margin: 1rem !important;\n  }\n  .m-md-4 {\n    margin: 1.5rem !important;\n  }\n  .m-md-5 {\n    margin: 3rem !important;\n  }\n  .m-md-auto {\n    margin: auto !important;\n  }\n  .mx-md-0 {\n    margin-right: 0 !important;\n    margin-left: 0 !important;\n  }\n  .mx-md-1 {\n    margin-right: 0.25rem !important;\n    margin-left: 0.25rem !important;\n  }\n  .mx-md-2 {\n    margin-right: 0.5rem !important;\n    margin-left: 0.5rem !important;\n  }\n  .mx-md-3 {\n    margin-right: 1rem !important;\n    margin-left: 1rem !important;\n  }\n  .mx-md-4 {\n    margin-right: 1.5rem !important;\n    margin-left: 1.5rem !important;\n  }\n  .mx-md-5 {\n    margin-right: 3rem !important;\n    margin-left: 3rem !important;\n  }\n  .mx-md-auto {\n    margin-right: auto !important;\n    margin-left: auto !important;\n  }\n  .my-md-0 {\n    margin-top: 0 !important;\n    margin-bottom: 0 !important;\n  }\n  .my-md-1 {\n    margin-top: 0.25rem !important;\n    margin-bottom: 0.25rem !important;\n  }\n  .my-md-2 {\n    margin-top: 0.5rem !important;\n    margin-bottom: 0.5rem !important;\n  }\n  .my-md-3 {\n    margin-top: 1rem !important;\n    margin-bottom: 1rem !important;\n  }\n  .my-md-4 {\n    margin-top: 1.5rem !important;\n    margin-bottom: 1.5rem !important;\n  }\n  .my-md-5 {\n    margin-top: 3rem !important;\n    margin-bottom: 3rem !important;\n  }\n  .my-md-auto {\n    margin-top: auto !important;\n    margin-bottom: auto !important;\n  }\n  .mt-md-0 {\n    margin-top: 0 !important;\n  }\n  .mt-md-1 {\n    margin-top: 0.25rem !important;\n  }\n  .mt-md-2 {\n    margin-top: 0.5rem !important;\n  }\n  .mt-md-3 {\n    margin-top: 1rem !important;\n  }\n  .mt-md-4 {\n    margin-top: 1.5rem !important;\n  }\n  .mt-md-5 {\n    margin-top: 3rem !important;\n  }\n  .mt-md-auto {\n    margin-top: auto !important;\n  }\n  .me-md-0 {\n    margin-right: 0 !important;\n  }\n  .me-md-1 {\n    margin-right: 0.25rem !important;\n  }\n  .me-md-2 {\n    margin-right: 0.5rem !important;\n  }\n  .me-md-3 {\n    margin-right: 1rem !important;\n  }\n  .me-md-4 {\n    margin-right: 1.5rem !important;\n  }\n  .me-md-5 {\n    margin-right: 3rem !important;\n  }\n  .me-md-auto {\n    margin-right: auto !important;\n  }\n  .mb-md-0 {\n    margin-bottom: 0 !important;\n  }\n  .mb-md-1 {\n    margin-bottom: 0.25rem !important;\n  }\n  .mb-md-2 {\n    margin-bottom: 0.5rem !important;\n  }\n  .mb-md-3 {\n    margin-bottom: 1rem !important;\n  }\n  .mb-md-4 {\n    margin-bottom: 1.5rem !important;\n  }\n  .mb-md-5 {\n    margin-bottom: 3rem !important;\n  }\n  .mb-md-auto {\n    margin-bottom: auto !important;\n  }\n  .ms-md-0 {\n    margin-left: 0 !important;\n  }\n  .ms-md-1 {\n    margin-left: 0.25rem !important;\n  }\n  .ms-md-2 {\n    margin-left: 0.5rem !important;\n  }\n  .ms-md-3 {\n    margin-left: 1rem !important;\n  }\n  .ms-md-4 {\n    margin-left: 1.5rem !important;\n  }\n  .ms-md-5 {\n    margin-left: 3rem !important;\n  }\n  .ms-md-auto {\n    margin-left: auto !important;\n  }\n  .p-md-0 {\n    padding: 0 !important;\n  }\n  .p-md-1 {\n    padding: 0.25rem !important;\n  }\n  .p-md-2 {\n    padding: 0.5rem !important;\n  }\n  .p-md-3 {\n    padding: 1rem !important;\n  }\n  .p-md-4 {\n    padding: 1.5rem !important;\n  }\n  .p-md-5 {\n    padding: 3rem !important;\n  }\n  .px-md-0 {\n    padding-right: 0 !important;\n    padding-left: 0 !important;\n  }\n  .px-md-1 {\n    padding-right: 0.25rem !important;\n    padding-left: 0.25rem !important;\n  }\n  .px-md-2 {\n    padding-right: 0.5rem !important;\n    padding-left: 0.5rem !important;\n  }\n  .px-md-3 {\n    padding-right: 1rem !important;\n    padding-left: 1rem !important;\n  }\n  .px-md-4 {\n    padding-right: 1.5rem !important;\n    padding-left: 1.5rem !important;\n  }\n  .px-md-5 {\n    padding-right: 3rem !important;\n    padding-left: 3rem !important;\n  }\n  .py-md-0 {\n    padding-top: 0 !important;\n    padding-bottom: 0 !important;\n  }\n  .py-md-1 {\n    padding-top: 0.25rem !important;\n    padding-bottom: 0.25rem !important;\n  }\n  .py-md-2 {\n    padding-top: 0.5rem !important;\n    padding-bottom: 0.5rem !important;\n  }\n  .py-md-3 {\n    padding-top: 1rem !important;\n    padding-bottom: 1rem !important;\n  }\n  .py-md-4 {\n    padding-top: 1.5rem !important;\n    padding-bottom: 1.5rem !important;\n  }\n  .py-md-5 {\n    padding-top: 3rem !important;\n    padding-bottom: 3rem !important;\n  }\n  .pt-md-0 {\n    padding-top: 0 !important;\n  }\n  .pt-md-1 {\n    padding-top: 0.25rem !important;\n  }\n  .pt-md-2 {\n    padding-top: 0.5rem !important;\n  }\n  .pt-md-3 {\n    padding-top: 1rem !important;\n  }\n  .pt-md-4 {\n    padding-top: 1.5rem !important;\n  }\n  .pt-md-5 {\n    padding-top: 3rem !important;\n  }\n  .pe-md-0 {\n    padding-right: 0 !important;\n  }\n  .pe-md-1 {\n    padding-right: 0.25rem !important;\n  }\n  .pe-md-2 {\n    padding-right: 0.5rem !important;\n  }\n  .pe-md-3 {\n    padding-right: 1rem !important;\n  }\n  .pe-md-4 {\n    padding-right: 1.5rem !important;\n  }\n  .pe-md-5 {\n    padding-right: 3rem !important;\n  }\n  .pb-md-0 {\n    padding-bottom: 0 !important;\n  }\n  .pb-md-1 {\n    padding-bottom: 0.25rem !important;\n  }\n  .pb-md-2 {\n    padding-bottom: 0.5rem !important;\n  }\n  .pb-md-3 {\n    padding-bottom: 1rem !important;\n  }\n  .pb-md-4 {\n    padding-bottom: 1.5rem !important;\n  }\n  .pb-md-5 {\n    padding-bottom: 3rem !important;\n  }\n  .ps-md-0 {\n    padding-left: 0 !important;\n  }\n  .ps-md-1 {\n    padding-left: 0.25rem !important;\n  }\n  .ps-md-2 {\n    padding-left: 0.5rem !important;\n  }\n  .ps-md-3 {\n    padding-left: 1rem !important;\n  }\n  .ps-md-4 {\n    padding-left: 1.5rem !important;\n  }\n  .ps-md-5 {\n    padding-left: 3rem !important;\n  }\n  .text-md-start {\n    text-align: left !important;\n  }\n  .text-md-end {\n    text-align: right !important;\n  }\n  .text-md-center {\n    text-align: center !important;\n  }\n}\n\n@media (min-width: 992px) {\n  .float-lg-start {\n    float: left !important;\n  }\n  .float-lg-end {\n    float: right !important;\n  }\n  .float-lg-none {\n    float: none !important;\n  }\n  .d-lg-inline {\n    display: inline !important;\n  }\n  .d-lg-inline-block {\n    display: inline-block !important;\n  }\n  .d-lg-block {\n    display: block !important;\n  }\n  .d-lg-grid {\n    display: grid !important;\n  }\n  .d-lg-table {\n    display: table !important;\n  }\n  .d-lg-table-row {\n    display: table-row !important;\n  }\n  .d-lg-table-cell {\n    display: table-cell !important;\n  }\n  .d-lg-flex {\n    display: -ms-flexbox !important;\n    display: flex !important;\n  }\n  .d-lg-inline-flex {\n    display: -ms-inline-flexbox !important;\n    display: inline-flex !important;\n  }\n  .d-lg-none {\n    display: none !important;\n  }\n  .flex-lg-fill {\n    -ms-flex: 1 1 auto !important;\n    flex: 1 1 auto !important;\n  }\n  .flex-lg-row {\n    -ms-flex-direction: row !important;\n    flex-direction: row !important;\n  }\n  .flex-lg-column {\n    -ms-flex-direction: column !important;\n    flex-direction: column !important;\n  }\n  .flex-lg-row-reverse {\n    -ms-flex-direction: row-reverse !important;\n    flex-direction: row-reverse !important;\n  }\n  .flex-lg-column-reverse {\n    -ms-flex-direction: column-reverse !important;\n    flex-direction: column-reverse !important;\n  }\n  .flex-lg-grow-0 {\n    -ms-flex-positive: 0 !important;\n    flex-grow: 0 !important;\n  }\n  .flex-lg-grow-1 {\n    -ms-flex-positive: 1 !important;\n    flex-grow: 1 !important;\n  }\n  .flex-lg-shrink-0 {\n    -ms-flex-negative: 0 !important;\n    flex-shrink: 0 !important;\n  }\n  .flex-lg-shrink-1 {\n    -ms-flex-negative: 1 !important;\n    flex-shrink: 1 !important;\n  }\n  .flex-lg-wrap {\n    -ms-flex-wrap: wrap !important;\n    flex-wrap: wrap !important;\n  }\n  .flex-lg-nowrap {\n    -ms-flex-wrap: nowrap !important;\n    flex-wrap: nowrap !important;\n  }\n  .flex-lg-wrap-reverse {\n    -ms-flex-wrap: wrap-reverse !important;\n    flex-wrap: wrap-reverse !important;\n  }\n  .gap-lg-0 {\n    gap: 0 !important;\n  }\n  .gap-lg-1 {\n    gap: 0.25rem !important;\n  }\n  .gap-lg-2 {\n    gap: 0.5rem !important;\n  }\n  .gap-lg-3 {\n    gap: 1rem !important;\n  }\n  .gap-lg-4 {\n    gap: 1.5rem !important;\n  }\n  .gap-lg-5 {\n    gap: 3rem !important;\n  }\n  .justify-content-lg-start {\n    -ms-flex-pack: start !important;\n    justify-content: flex-start !important;\n  }\n  .justify-content-lg-end {\n    -ms-flex-pack: end !important;\n    justify-content: flex-end !important;\n  }\n  .justify-content-lg-center {\n    -ms-flex-pack: center !important;\n    justify-content: center !important;\n  }\n  .justify-content-lg-between {\n    -ms-flex-pack: justify !important;\n    justify-content: space-between !important;\n  }\n  .justify-content-lg-around {\n    -ms-flex-pack: distribute !important;\n    justify-content: space-around !important;\n  }\n  .justify-content-lg-evenly {\n    -ms-flex-pack: space-evenly !important;\n    justify-content: space-evenly !important;\n  }\n  .align-items-lg-start {\n    -ms-flex-align: start !important;\n    align-items: flex-start !important;\n  }\n  .align-items-lg-end {\n    -ms-flex-align: end !important;\n    align-items: flex-end !important;\n  }\n  .align-items-lg-center {\n    -ms-flex-align: center !important;\n    align-items: center !important;\n  }\n  .align-items-lg-baseline {\n    -ms-flex-align: baseline !important;\n    align-items: baseline !important;\n  }\n  .align-items-lg-stretch {\n    -ms-flex-align: stretch !important;\n    align-items: stretch !important;\n  }\n  .align-content-lg-start {\n    -ms-flex-line-pack: start !important;\n    align-content: flex-start !important;\n  }\n  .align-content-lg-end {\n    -ms-flex-line-pack: end !important;\n    align-content: flex-end !important;\n  }\n  .align-content-lg-center {\n    -ms-flex-line-pack: center !important;\n    align-content: center !important;\n  }\n  .align-content-lg-between {\n    -ms-flex-line-pack: justify !important;\n    align-content: space-between !important;\n  }\n  .align-content-lg-around {\n    -ms-flex-line-pack: distribute !important;\n    align-content: space-around !important;\n  }\n  .align-content-lg-stretch {\n    -ms-flex-line-pack: stretch !important;\n    align-content: stretch !important;\n  }\n  .align-self-lg-auto {\n    -ms-flex-item-align: auto !important;\n    align-self: auto !important;\n  }\n  .align-self-lg-start {\n    -ms-flex-item-align: start !important;\n    align-self: flex-start !important;\n  }\n  .align-self-lg-end {\n    -ms-flex-item-align: end !important;\n    align-self: flex-end !important;\n  }\n  .align-self-lg-center {\n    -ms-flex-item-align: center !important;\n    align-self: center !important;\n  }\n  .align-self-lg-baseline {\n    -ms-flex-item-align: baseline !important;\n    align-self: baseline !important;\n  }\n  .align-self-lg-stretch {\n    -ms-flex-item-align: stretch !important;\n    align-self: stretch !important;\n  }\n  .order-lg-first {\n    -ms-flex-order: -1 !important;\n    order: -1 !important;\n  }\n  .order-lg-0 {\n    -ms-flex-order: 0 !important;\n    order: 0 !important;\n  }\n  .order-lg-1 {\n    -ms-flex-order: 1 !important;\n    order: 1 !important;\n  }\n  .order-lg-2 {\n    -ms-flex-order: 2 !important;\n    order: 2 !important;\n  }\n  .order-lg-3 {\n    -ms-flex-order: 3 !important;\n    order: 3 !important;\n  }\n  .order-lg-4 {\n    -ms-flex-order: 4 !important;\n    order: 4 !important;\n  }\n  .order-lg-5 {\n    -ms-flex-order: 5 !important;\n    order: 5 !important;\n  }\n  .order-lg-last {\n    -ms-flex-order: 6 !important;\n    order: 6 !important;\n  }\n  .m-lg-0 {\n    margin: 0 !important;\n  }\n  .m-lg-1 {\n    margin: 0.25rem !important;\n  }\n  .m-lg-2 {\n    margin: 0.5rem !important;\n  }\n  .m-lg-3 {\n    margin: 1rem !important;\n  }\n  .m-lg-4 {\n    margin: 1.5rem !important;\n  }\n  .m-lg-5 {\n    margin: 3rem !important;\n  }\n  .m-lg-auto {\n    margin: auto !important;\n  }\n  .mx-lg-0 {\n    margin-right: 0 !important;\n    margin-left: 0 !important;\n  }\n  .mx-lg-1 {\n    margin-right: 0.25rem !important;\n    margin-left: 0.25rem !important;\n  }\n  .mx-lg-2 {\n    margin-right: 0.5rem !important;\n    margin-left: 0.5rem !important;\n  }\n  .mx-lg-3 {\n    margin-right: 1rem !important;\n    margin-left: 1rem !important;\n  }\n  .mx-lg-4 {\n    margin-right: 1.5rem !important;\n    margin-left: 1.5rem !important;\n  }\n  .mx-lg-5 {\n    margin-right: 3rem !important;\n    margin-left: 3rem !important;\n  }\n  .mx-lg-auto {\n    margin-right: auto !important;\n    margin-left: auto !important;\n  }\n  .my-lg-0 {\n    margin-top: 0 !important;\n    margin-bottom: 0 !important;\n  }\n  .my-lg-1 {\n    margin-top: 0.25rem !important;\n    margin-bottom: 0.25rem !important;\n  }\n  .my-lg-2 {\n    margin-top: 0.5rem !important;\n    margin-bottom: 0.5rem !important;\n  }\n  .my-lg-3 {\n    margin-top: 1rem !important;\n    margin-bottom: 1rem !important;\n  }\n  .my-lg-4 {\n    margin-top: 1.5rem !important;\n    margin-bottom: 1.5rem !important;\n  }\n  .my-lg-5 {\n    margin-top: 3rem !important;\n    margin-bottom: 3rem !important;\n  }\n  .my-lg-auto {\n    margin-top: auto !important;\n    margin-bottom: auto !important;\n  }\n  .mt-lg-0 {\n    margin-top: 0 !important;\n  }\n  .mt-lg-1 {\n    margin-top: 0.25rem !important;\n  }\n  .mt-lg-2 {\n    margin-top: 0.5rem !important;\n  }\n  .mt-lg-3 {\n    margin-top: 1rem !important;\n  }\n  .mt-lg-4 {\n    margin-top: 1.5rem !important;\n  }\n  .mt-lg-5 {\n    margin-top: 3rem !important;\n  }\n  .mt-lg-auto {\n    margin-top: auto !important;\n  }\n  .me-lg-0 {\n    margin-right: 0 !important;\n  }\n  .me-lg-1 {\n    margin-right: 0.25rem !important;\n  }\n  .me-lg-2 {\n    margin-right: 0.5rem !important;\n  }\n  .me-lg-3 {\n    margin-right: 1rem !important;\n  }\n  .me-lg-4 {\n    margin-right: 1.5rem !important;\n  }\n  .me-lg-5 {\n    margin-right: 3rem !important;\n  }\n  .me-lg-auto {\n    margin-right: auto !important;\n  }\n  .mb-lg-0 {\n    margin-bottom: 0 !important;\n  }\n  .mb-lg-1 {\n    margin-bottom: 0.25rem !important;\n  }\n  .mb-lg-2 {\n    margin-bottom: 0.5rem !important;\n  }\n  .mb-lg-3 {\n    margin-bottom: 1rem !important;\n  }\n  .mb-lg-4 {\n    margin-bottom: 1.5rem !important;\n  }\n  .mb-lg-5 {\n    margin-bottom: 3rem !important;\n  }\n  .mb-lg-auto {\n    margin-bottom: auto !important;\n  }\n  .ms-lg-0 {\n    margin-left: 0 !important;\n  }\n  .ms-lg-1 {\n    margin-left: 0.25rem !important;\n  }\n  .ms-lg-2 {\n    margin-left: 0.5rem !important;\n  }\n  .ms-lg-3 {\n    margin-left: 1rem !important;\n  }\n  .ms-lg-4 {\n    margin-left: 1.5rem !important;\n  }\n  .ms-lg-5 {\n    margin-left: 3rem !important;\n  }\n  .ms-lg-auto {\n    margin-left: auto !important;\n  }\n  .p-lg-0 {\n    padding: 0 !important;\n  }\n  .p-lg-1 {\n    padding: 0.25rem !important;\n  }\n  .p-lg-2 {\n    padding: 0.5rem !important;\n  }\n  .p-lg-3 {\n    padding: 1rem !important;\n  }\n  .p-lg-4 {\n    padding: 1.5rem !important;\n  }\n  .p-lg-5 {\n    padding: 3rem !important;\n  }\n  .px-lg-0 {\n    padding-right: 0 !important;\n    padding-left: 0 !important;\n  }\n  .px-lg-1 {\n    padding-right: 0.25rem !important;\n    padding-left: 0.25rem !important;\n  }\n  .px-lg-2 {\n    padding-right: 0.5rem !important;\n    padding-left: 0.5rem !important;\n  }\n  .px-lg-3 {\n    padding-right: 1rem !important;\n    padding-left: 1rem !important;\n  }\n  .px-lg-4 {\n    padding-right: 1.5rem !important;\n    padding-left: 1.5rem !important;\n  }\n  .px-lg-5 {\n    padding-right: 3rem !important;\n    padding-left: 3rem !important;\n  }\n  .py-lg-0 {\n    padding-top: 0 !important;\n    padding-bottom: 0 !important;\n  }\n  .py-lg-1 {\n    padding-top: 0.25rem !important;\n    padding-bottom: 0.25rem !important;\n  }\n  .py-lg-2 {\n    padding-top: 0.5rem !important;\n    padding-bottom: 0.5rem !important;\n  }\n  .py-lg-3 {\n    padding-top: 1rem !important;\n    padding-bottom: 1rem !important;\n  }\n  .py-lg-4 {\n    padding-top: 1.5rem !important;\n    padding-bottom: 1.5rem !important;\n  }\n  .py-lg-5 {\n    padding-top: 3rem !important;\n    padding-bottom: 3rem !important;\n  }\n  .pt-lg-0 {\n    padding-top: 0 !important;\n  }\n  .pt-lg-1 {\n    padding-top: 0.25rem !important;\n  }\n  .pt-lg-2 {\n    padding-top: 0.5rem !important;\n  }\n  .pt-lg-3 {\n    padding-top: 1rem !important;\n  }\n  .pt-lg-4 {\n    padding-top: 1.5rem !important;\n  }\n  .pt-lg-5 {\n    padding-top: 3rem !important;\n  }\n  .pe-lg-0 {\n    padding-right: 0 !important;\n  }\n  .pe-lg-1 {\n    padding-right: 0.25rem !important;\n  }\n  .pe-lg-2 {\n    padding-right: 0.5rem !important;\n  }\n  .pe-lg-3 {\n    padding-right: 1rem !important;\n  }\n  .pe-lg-4 {\n    padding-right: 1.5rem !important;\n  }\n  .pe-lg-5 {\n    padding-right: 3rem !important;\n  }\n  .pb-lg-0 {\n    padding-bottom: 0 !important;\n  }\n  .pb-lg-1 {\n    padding-bottom: 0.25rem !important;\n  }\n  .pb-lg-2 {\n    padding-bottom: 0.5rem !important;\n  }\n  .pb-lg-3 {\n    padding-bottom: 1rem !important;\n  }\n  .pb-lg-4 {\n    padding-bottom: 1.5rem !important;\n  }\n  .pb-lg-5 {\n    padding-bottom: 3rem !important;\n  }\n  .ps-lg-0 {\n    padding-left: 0 !important;\n  }\n  .ps-lg-1 {\n    padding-left: 0.25rem !important;\n  }\n  .ps-lg-2 {\n    padding-left: 0.5rem !important;\n  }\n  .ps-lg-3 {\n    padding-left: 1rem !important;\n  }\n  .ps-lg-4 {\n    padding-left: 1.5rem !important;\n  }\n  .ps-lg-5 {\n    padding-left: 3rem !important;\n  }\n  .text-lg-start {\n    text-align: left !important;\n  }\n  .text-lg-end {\n    text-align: right !important;\n  }\n  .text-lg-center {\n    text-align: center !important;\n  }\n}\n\n@media (min-width: 1200px) {\n  .float-xl-start {\n    float: left !important;\n  }\n  .float-xl-end {\n    float: right !important;\n  }\n  .float-xl-none {\n    float: none !important;\n  }\n  .d-xl-inline {\n    display: inline !important;\n  }\n  .d-xl-inline-block {\n    display: inline-block !important;\n  }\n  .d-xl-block {\n    display: block !important;\n  }\n  .d-xl-grid {\n    display: grid !important;\n  }\n  .d-xl-table {\n    display: table !important;\n  }\n  .d-xl-table-row {\n    display: table-row !important;\n  }\n  .d-xl-table-cell {\n    display: table-cell !important;\n  }\n  .d-xl-flex {\n    display: -ms-flexbox !important;\n    display: flex !important;\n  }\n  .d-xl-inline-flex {\n    display: -ms-inline-flexbox !important;\n    display: inline-flex !important;\n  }\n  .d-xl-none {\n    display: none !important;\n  }\n  .flex-xl-fill {\n    -ms-flex: 1 1 auto !important;\n    flex: 1 1 auto !important;\n  }\n  .flex-xl-row {\n    -ms-flex-direction: row !important;\n    flex-direction: row !important;\n  }\n  .flex-xl-column {\n    -ms-flex-direction: column !important;\n    flex-direction: column !important;\n  }\n  .flex-xl-row-reverse {\n    -ms-flex-direction: row-reverse !important;\n    flex-direction: row-reverse !important;\n  }\n  .flex-xl-column-reverse {\n    -ms-flex-direction: column-reverse !important;\n    flex-direction: column-reverse !important;\n  }\n  .flex-xl-grow-0 {\n    -ms-flex-positive: 0 !important;\n    flex-grow: 0 !important;\n  }\n  .flex-xl-grow-1 {\n    -ms-flex-positive: 1 !important;\n    flex-grow: 1 !important;\n  }\n  .flex-xl-shrink-0 {\n    -ms-flex-negative: 0 !important;\n    flex-shrink: 0 !important;\n  }\n  .flex-xl-shrink-1 {\n    -ms-flex-negative: 1 !important;\n    flex-shrink: 1 !important;\n  }\n  .flex-xl-wrap {\n    -ms-flex-wrap: wrap !important;\n    flex-wrap: wrap !important;\n  }\n  .flex-xl-nowrap {\n    -ms-flex-wrap: nowrap !important;\n    flex-wrap: nowrap !important;\n  }\n  .flex-xl-wrap-reverse {\n    -ms-flex-wrap: wrap-reverse !important;\n    flex-wrap: wrap-reverse !important;\n  }\n  .gap-xl-0 {\n    gap: 0 !important;\n  }\n  .gap-xl-1 {\n    gap: 0.25rem !important;\n  }\n  .gap-xl-2 {\n    gap: 0.5rem !important;\n  }\n  .gap-xl-3 {\n    gap: 1rem !important;\n  }\n  .gap-xl-4 {\n    gap: 1.5rem !important;\n  }\n  .gap-xl-5 {\n    gap: 3rem !important;\n  }\n  .justify-content-xl-start {\n    -ms-flex-pack: start !important;\n    justify-content: flex-start !important;\n  }\n  .justify-content-xl-end {\n    -ms-flex-pack: end !important;\n    justify-content: flex-end !important;\n  }\n  .justify-content-xl-center {\n    -ms-flex-pack: center !important;\n    justify-content: center !important;\n  }\n  .justify-content-xl-between {\n    -ms-flex-pack: justify !important;\n    justify-content: space-between !important;\n  }\n  .justify-content-xl-around {\n    -ms-flex-pack: distribute !important;\n    justify-content: space-around !important;\n  }\n  .justify-content-xl-evenly {\n    -ms-flex-pack: space-evenly !important;\n    justify-content: space-evenly !important;\n  }\n  .align-items-xl-start {\n    -ms-flex-align: start !important;\n    align-items: flex-start !important;\n  }\n  .align-items-xl-end {\n    -ms-flex-align: end !important;\n    align-items: flex-end !important;\n  }\n  .align-items-xl-center {\n    -ms-flex-align: center !important;\n    align-items: center !important;\n  }\n  .align-items-xl-baseline {\n    -ms-flex-align: baseline !important;\n    align-items: baseline !important;\n  }\n  .align-items-xl-stretch {\n    -ms-flex-align: stretch !important;\n    align-items: stretch !important;\n  }\n  .align-content-xl-start {\n    -ms-flex-line-pack: start !important;\n    align-content: flex-start !important;\n  }\n  .align-content-xl-end {\n    -ms-flex-line-pack: end !important;\n    align-content: flex-end !important;\n  }\n  .align-content-xl-center {\n    -ms-flex-line-pack: center !important;\n    align-content: center !important;\n  }\n  .align-content-xl-between {\n    -ms-flex-line-pack: justify !important;\n    align-content: space-between !important;\n  }\n  .align-content-xl-around {\n    -ms-flex-line-pack: distribute !important;\n    align-content: space-around !important;\n  }\n  .align-content-xl-stretch {\n    -ms-flex-line-pack: stretch !important;\n    align-content: stretch !important;\n  }\n  .align-self-xl-auto {\n    -ms-flex-item-align: auto !important;\n    align-self: auto !important;\n  }\n  .align-self-xl-start {\n    -ms-flex-item-align: start !important;\n    align-self: flex-start !important;\n  }\n  .align-self-xl-end {\n    -ms-flex-item-align: end !important;\n    align-self: flex-end !important;\n  }\n  .align-self-xl-center {\n    -ms-flex-item-align: center !important;\n    align-self: center !important;\n  }\n  .align-self-xl-baseline {\n    -ms-flex-item-align: baseline !important;\n    align-self: baseline !important;\n  }\n  .align-self-xl-stretch {\n    -ms-flex-item-align: stretch !important;\n    align-self: stretch !important;\n  }\n  .order-xl-first {\n    -ms-flex-order: -1 !important;\n    order: -1 !important;\n  }\n  .order-xl-0 {\n    -ms-flex-order: 0 !important;\n    order: 0 !important;\n  }\n  .order-xl-1 {\n    -ms-flex-order: 1 !important;\n    order: 1 !important;\n  }\n  .order-xl-2 {\n    -ms-flex-order: 2 !important;\n    order: 2 !important;\n  }\n  .order-xl-3 {\n    -ms-flex-order: 3 !important;\n    order: 3 !important;\n  }\n  .order-xl-4 {\n    -ms-flex-order: 4 !important;\n    order: 4 !important;\n  }\n  .order-xl-5 {\n    -ms-flex-order: 5 !important;\n    order: 5 !important;\n  }\n  .order-xl-last {\n    -ms-flex-order: 6 !important;\n    order: 6 !important;\n  }\n  .m-xl-0 {\n    margin: 0 !important;\n  }\n  .m-xl-1 {\n    margin: 0.25rem !important;\n  }\n  .m-xl-2 {\n    margin: 0.5rem !important;\n  }\n  .m-xl-3 {\n    margin: 1rem !important;\n  }\n  .m-xl-4 {\n    margin: 1.5rem !important;\n  }\n  .m-xl-5 {\n    margin: 3rem !important;\n  }\n  .m-xl-auto {\n    margin: auto !important;\n  }\n  .mx-xl-0 {\n    margin-right: 0 !important;\n    margin-left: 0 !important;\n  }\n  .mx-xl-1 {\n    margin-right: 0.25rem !important;\n    margin-left: 0.25rem !important;\n  }\n  .mx-xl-2 {\n    margin-right: 0.5rem !important;\n    margin-left: 0.5rem !important;\n  }\n  .mx-xl-3 {\n    margin-right: 1rem !important;\n    margin-left: 1rem !important;\n  }\n  .mx-xl-4 {\n    margin-right: 1.5rem !important;\n    margin-left: 1.5rem !important;\n  }\n  .mx-xl-5 {\n    margin-right: 3rem !important;\n    margin-left: 3rem !important;\n  }\n  .mx-xl-auto {\n    margin-right: auto !important;\n    margin-left: auto !important;\n  }\n  .my-xl-0 {\n    margin-top: 0 !important;\n    margin-bottom: 0 !important;\n  }\n  .my-xl-1 {\n    margin-top: 0.25rem !important;\n    margin-bottom: 0.25rem !important;\n  }\n  .my-xl-2 {\n    margin-top: 0.5rem !important;\n    margin-bottom: 0.5rem !important;\n  }\n  .my-xl-3 {\n    margin-top: 1rem !important;\n    margin-bottom: 1rem !important;\n  }\n  .my-xl-4 {\n    margin-top: 1.5rem !important;\n    margin-bottom: 1.5rem !important;\n  }\n  .my-xl-5 {\n    margin-top: 3rem !important;\n    margin-bottom: 3rem !important;\n  }\n  .my-xl-auto {\n    margin-top: auto !important;\n    margin-bottom: auto !important;\n  }\n  .mt-xl-0 {\n    margin-top: 0 !important;\n  }\n  .mt-xl-1 {\n    margin-top: 0.25rem !important;\n  }\n  .mt-xl-2 {\n    margin-top: 0.5rem !important;\n  }\n  .mt-xl-3 {\n    margin-top: 1rem !important;\n  }\n  .mt-xl-4 {\n    margin-top: 1.5rem !important;\n  }\n  .mt-xl-5 {\n    margin-top: 3rem !important;\n  }\n  .mt-xl-auto {\n    margin-top: auto !important;\n  }\n  .me-xl-0 {\n    margin-right: 0 !important;\n  }\n  .me-xl-1 {\n    margin-right: 0.25rem !important;\n  }\n  .me-xl-2 {\n    margin-right: 0.5rem !important;\n  }\n  .me-xl-3 {\n    margin-right: 1rem !important;\n  }\n  .me-xl-4 {\n    margin-right: 1.5rem !important;\n  }\n  .me-xl-5 {\n    margin-right: 3rem !important;\n  }\n  .me-xl-auto {\n    margin-right: auto !important;\n  }\n  .mb-xl-0 {\n    margin-bottom: 0 !important;\n  }\n  .mb-xl-1 {\n    margin-bottom: 0.25rem !important;\n  }\n  .mb-xl-2 {\n    margin-bottom: 0.5rem !important;\n  }\n  .mb-xl-3 {\n    margin-bottom: 1rem !important;\n  }\n  .mb-xl-4 {\n    margin-bottom: 1.5rem !important;\n  }\n  .mb-xl-5 {\n    margin-bottom: 3rem !important;\n  }\n  .mb-xl-auto {\n    margin-bottom: auto !important;\n  }\n  .ms-xl-0 {\n    margin-left: 0 !important;\n  }\n  .ms-xl-1 {\n    margin-left: 0.25rem !important;\n  }\n  .ms-xl-2 {\n    margin-left: 0.5rem !important;\n  }\n  .ms-xl-3 {\n    margin-left: 1rem !important;\n  }\n  .ms-xl-4 {\n    margin-left: 1.5rem !important;\n  }\n  .ms-xl-5 {\n    margin-left: 3rem !important;\n  }\n  .ms-xl-auto {\n    margin-left: auto !important;\n  }\n  .p-xl-0 {\n    padding: 0 !important;\n  }\n  .p-xl-1 {\n    padding: 0.25rem !important;\n  }\n  .p-xl-2 {\n    padding: 0.5rem !important;\n  }\n  .p-xl-3 {\n    padding: 1rem !important;\n  }\n  .p-xl-4 {\n    padding: 1.5rem !important;\n  }\n  .p-xl-5 {\n    padding: 3rem !important;\n  }\n  .px-xl-0 {\n    padding-right: 0 !important;\n    padding-left: 0 !important;\n  }\n  .px-xl-1 {\n    padding-right: 0.25rem !important;\n    padding-left: 0.25rem !important;\n  }\n  .px-xl-2 {\n    padding-right: 0.5rem !important;\n    padding-left: 0.5rem !important;\n  }\n  .px-xl-3 {\n    padding-right: 1rem !important;\n    padding-left: 1rem !important;\n  }\n  .px-xl-4 {\n    padding-right: 1.5rem !important;\n    padding-left: 1.5rem !important;\n  }\n  .px-xl-5 {\n    padding-right: 3rem !important;\n    padding-left: 3rem !important;\n  }\n  .py-xl-0 {\n    padding-top: 0 !important;\n    padding-bottom: 0 !important;\n  }\n  .py-xl-1 {\n    padding-top: 0.25rem !important;\n    padding-bottom: 0.25rem !important;\n  }\n  .py-xl-2 {\n    padding-top: 0.5rem !important;\n    padding-bottom: 0.5rem !important;\n  }\n  .py-xl-3 {\n    padding-top: 1rem !important;\n    padding-bottom: 1rem !important;\n  }\n  .py-xl-4 {\n    padding-top: 1.5rem !important;\n    padding-bottom: 1.5rem !important;\n  }\n  .py-xl-5 {\n    padding-top: 3rem !important;\n    padding-bottom: 3rem !important;\n  }\n  .pt-xl-0 {\n    padding-top: 0 !important;\n  }\n  .pt-xl-1 {\n    padding-top: 0.25rem !important;\n  }\n  .pt-xl-2 {\n    padding-top: 0.5rem !important;\n  }\n  .pt-xl-3 {\n    padding-top: 1rem !important;\n  }\n  .pt-xl-4 {\n    padding-top: 1.5rem !important;\n  }\n  .pt-xl-5 {\n    padding-top: 3rem !important;\n  }\n  .pe-xl-0 {\n    padding-right: 0 !important;\n  }\n  .pe-xl-1 {\n    padding-right: 0.25rem !important;\n  }\n  .pe-xl-2 {\n    padding-right: 0.5rem !important;\n  }\n  .pe-xl-3 {\n    padding-right: 1rem !important;\n  }\n  .pe-xl-4 {\n    padding-right: 1.5rem !important;\n  }\n  .pe-xl-5 {\n    padding-right: 3rem !important;\n  }\n  .pb-xl-0 {\n    padding-bottom: 0 !important;\n  }\n  .pb-xl-1 {\n    padding-bottom: 0.25rem !important;\n  }\n  .pb-xl-2 {\n    padding-bottom: 0.5rem !important;\n  }\n  .pb-xl-3 {\n    padding-bottom: 1rem !important;\n  }\n  .pb-xl-4 {\n    padding-bottom: 1.5rem !important;\n  }\n  .pb-xl-5 {\n    padding-bottom: 3rem !important;\n  }\n  .ps-xl-0 {\n    padding-left: 0 !important;\n  }\n  .ps-xl-1 {\n    padding-left: 0.25rem !important;\n  }\n  .ps-xl-2 {\n    padding-left: 0.5rem !important;\n  }\n  .ps-xl-3 {\n    padding-left: 1rem !important;\n  }\n  .ps-xl-4 {\n    padding-left: 1.5rem !important;\n  }\n  .ps-xl-5 {\n    padding-left: 3rem !important;\n  }\n  .text-xl-start {\n    text-align: left !important;\n  }\n  .text-xl-end {\n    text-align: right !important;\n  }\n  .text-xl-center {\n    text-align: center !important;\n  }\n}\n\n@media (min-width: 1400px) {\n  .float-xxl-start {\n    float: left !important;\n  }\n  .float-xxl-end {\n    float: right !important;\n  }\n  .float-xxl-none {\n    float: none !important;\n  }\n  .d-xxl-inline {\n    display: inline !important;\n  }\n  .d-xxl-inline-block {\n    display: inline-block !important;\n  }\n  .d-xxl-block {\n    display: block !important;\n  }\n  .d-xxl-grid {\n    display: grid !important;\n  }\n  .d-xxl-table {\n    display: table !important;\n  }\n  .d-xxl-table-row {\n    display: table-row !important;\n  }\n  .d-xxl-table-cell {\n    display: table-cell !important;\n  }\n  .d-xxl-flex {\n    display: -ms-flexbox !important;\n    display: flex !important;\n  }\n  .d-xxl-inline-flex {\n    display: -ms-inline-flexbox !important;\n    display: inline-flex !important;\n  }\n  .d-xxl-none {\n    display: none !important;\n  }\n  .flex-xxl-fill {\n    -ms-flex: 1 1 auto !important;\n    flex: 1 1 auto !important;\n  }\n  .flex-xxl-row {\n    -ms-flex-direction: row !important;\n    flex-direction: row !important;\n  }\n  .flex-xxl-column {\n    -ms-flex-direction: column !important;\n    flex-direction: column !important;\n  }\n  .flex-xxl-row-reverse {\n    -ms-flex-direction: row-reverse !important;\n    flex-direction: row-reverse !important;\n  }\n  .flex-xxl-column-reverse {\n    -ms-flex-direction: column-reverse !important;\n    flex-direction: column-reverse !important;\n  }\n  .flex-xxl-grow-0 {\n    -ms-flex-positive: 0 !important;\n    flex-grow: 0 !important;\n  }\n  .flex-xxl-grow-1 {\n    -ms-flex-positive: 1 !important;\n    flex-grow: 1 !important;\n  }\n  .flex-xxl-shrink-0 {\n    -ms-flex-negative: 0 !important;\n    flex-shrink: 0 !important;\n  }\n  .flex-xxl-shrink-1 {\n    -ms-flex-negative: 1 !important;\n    flex-shrink: 1 !important;\n  }\n  .flex-xxl-wrap {\n    -ms-flex-wrap: wrap !important;\n    flex-wrap: wrap !important;\n  }\n  .flex-xxl-nowrap {\n    -ms-flex-wrap: nowrap !important;\n    flex-wrap: nowrap !important;\n  }\n  .flex-xxl-wrap-reverse {\n    -ms-flex-wrap: wrap-reverse !important;\n    flex-wrap: wrap-reverse !important;\n  }\n  .gap-xxl-0 {\n    gap: 0 !important;\n  }\n  .gap-xxl-1 {\n    gap: 0.25rem !important;\n  }\n  .gap-xxl-2 {\n    gap: 0.5rem !important;\n  }\n  .gap-xxl-3 {\n    gap: 1rem !important;\n  }\n  .gap-xxl-4 {\n    gap: 1.5rem !important;\n  }\n  .gap-xxl-5 {\n    gap: 3rem !important;\n  }\n  .justify-content-xxl-start {\n    -ms-flex-pack: start !important;\n    justify-content: flex-start !important;\n  }\n  .justify-content-xxl-end {\n    -ms-flex-pack: end !important;\n    justify-content: flex-end !important;\n  }\n  .justify-content-xxl-center {\n    -ms-flex-pack: center !important;\n    justify-content: center !important;\n  }\n  .justify-content-xxl-between {\n    -ms-flex-pack: justify !important;\n    justify-content: space-between !important;\n  }\n  .justify-content-xxl-around {\n    -ms-flex-pack: distribute !important;\n    justify-content: space-around !important;\n  }\n  .justify-content-xxl-evenly {\n    -ms-flex-pack: space-evenly !important;\n    justify-content: space-evenly !important;\n  }\n  .align-items-xxl-start {\n    -ms-flex-align: start !important;\n    align-items: flex-start !important;\n  }\n  .align-items-xxl-end {\n    -ms-flex-align: end !important;\n    align-items: flex-end !important;\n  }\n  .align-items-xxl-center {\n    -ms-flex-align: center !important;\n    align-items: center !important;\n  }\n  .align-items-xxl-baseline {\n    -ms-flex-align: baseline !important;\n    align-items: baseline !important;\n  }\n  .align-items-xxl-stretch {\n    -ms-flex-align: stretch !important;\n    align-items: stretch !important;\n  }\n  .align-content-xxl-start {\n    -ms-flex-line-pack: start !important;\n    align-content: flex-start !important;\n  }\n  .align-content-xxl-end {\n    -ms-flex-line-pack: end !important;\n    align-content: flex-end !important;\n  }\n  .align-content-xxl-center {\n    -ms-flex-line-pack: center !important;\n    align-content: center !important;\n  }\n  .align-content-xxl-between {\n    -ms-flex-line-pack: justify !important;\n    align-content: space-between !important;\n  }\n  .align-content-xxl-around {\n    -ms-flex-line-pack: distribute !important;\n    align-content: space-around !important;\n  }\n  .align-content-xxl-stretch {\n    -ms-flex-line-pack: stretch !important;\n    align-content: stretch !important;\n  }\n  .align-self-xxl-auto {\n    -ms-flex-item-align: auto !important;\n    align-self: auto !important;\n  }\n  .align-self-xxl-start {\n    -ms-flex-item-align: start !important;\n    align-self: flex-start !important;\n  }\n  .align-self-xxl-end {\n    -ms-flex-item-align: end !important;\n    align-self: flex-end !important;\n  }\n  .align-self-xxl-center {\n    -ms-flex-item-align: center !important;\n    align-self: center !important;\n  }\n  .align-self-xxl-baseline {\n    -ms-flex-item-align: baseline !important;\n    align-self: baseline !important;\n  }\n  .align-self-xxl-stretch {\n    -ms-flex-item-align: stretch !important;\n    align-self: stretch !important;\n  }\n  .order-xxl-first {\n    -ms-flex-order: -1 !important;\n    order: -1 !important;\n  }\n  .order-xxl-0 {\n    -ms-flex-order: 0 !important;\n    order: 0 !important;\n  }\n  .order-xxl-1 {\n    -ms-flex-order: 1 !important;\n    order: 1 !important;\n  }\n  .order-xxl-2 {\n    -ms-flex-order: 2 !important;\n    order: 2 !important;\n  }\n  .order-xxl-3 {\n    -ms-flex-order: 3 !important;\n    order: 3 !important;\n  }\n  .order-xxl-4 {\n    -ms-flex-order: 4 !important;\n    order: 4 !important;\n  }\n  .order-xxl-5 {\n    -ms-flex-order: 5 !important;\n    order: 5 !important;\n  }\n  .order-xxl-last {\n    -ms-flex-order: 6 !important;\n    order: 6 !important;\n  }\n  .m-xxl-0 {\n    margin: 0 !important;\n  }\n  .m-xxl-1 {\n    margin: 0.25rem !important;\n  }\n  .m-xxl-2 {\n    margin: 0.5rem !important;\n  }\n  .m-xxl-3 {\n    margin: 1rem !important;\n  }\n  .m-xxl-4 {\n    margin: 1.5rem !important;\n  }\n  .m-xxl-5 {\n    margin: 3rem !important;\n  }\n  .m-xxl-auto {\n    margin: auto !important;\n  }\n  .mx-xxl-0 {\n    margin-right: 0 !important;\n    margin-left: 0 !important;\n  }\n  .mx-xxl-1 {\n    margin-right: 0.25rem !important;\n    margin-left: 0.25rem !important;\n  }\n  .mx-xxl-2 {\n    margin-right: 0.5rem !important;\n    margin-left: 0.5rem !important;\n  }\n  .mx-xxl-3 {\n    margin-right: 1rem !important;\n    margin-left: 1rem !important;\n  }\n  .mx-xxl-4 {\n    margin-right: 1.5rem !important;\n    margin-left: 1.5rem !important;\n  }\n  .mx-xxl-5 {\n    margin-right: 3rem !important;\n    margin-left: 3rem !important;\n  }\n  .mx-xxl-auto {\n    margin-right: auto !important;\n    margin-left: auto !important;\n  }\n  .my-xxl-0 {\n    margin-top: 0 !important;\n    margin-bottom: 0 !important;\n  }\n  .my-xxl-1 {\n    margin-top: 0.25rem !important;\n    margin-bottom: 0.25rem !important;\n  }\n  .my-xxl-2 {\n    margin-top: 0.5rem !important;\n    margin-bottom: 0.5rem !important;\n  }\n  .my-xxl-3 {\n    margin-top: 1rem !important;\n    margin-bottom: 1rem !important;\n  }\n  .my-xxl-4 {\n    margin-top: 1.5rem !important;\n    margin-bottom: 1.5rem !important;\n  }\n  .my-xxl-5 {\n    margin-top: 3rem !important;\n    margin-bottom: 3rem !important;\n  }\n  .my-xxl-auto {\n    margin-top: auto !important;\n    margin-bottom: auto !important;\n  }\n  .mt-xxl-0 {\n    margin-top: 0 !important;\n  }\n  .mt-xxl-1 {\n    margin-top: 0.25rem !important;\n  }\n  .mt-xxl-2 {\n    margin-top: 0.5rem !important;\n  }\n  .mt-xxl-3 {\n    margin-top: 1rem !important;\n  }\n  .mt-xxl-4 {\n    margin-top: 1.5rem !important;\n  }\n  .mt-xxl-5 {\n    margin-top: 3rem !important;\n  }\n  .mt-xxl-auto {\n    margin-top: auto !important;\n  }\n  .me-xxl-0 {\n    margin-right: 0 !important;\n  }\n  .me-xxl-1 {\n    margin-right: 0.25rem !important;\n  }\n  .me-xxl-2 {\n    margin-right: 0.5rem !important;\n  }\n  .me-xxl-3 {\n    margin-right: 1rem !important;\n  }\n  .me-xxl-4 {\n    margin-right: 1.5rem !important;\n  }\n  .me-xxl-5 {\n    margin-right: 3rem !important;\n  }\n  .me-xxl-auto {\n    margin-right: auto !important;\n  }\n  .mb-xxl-0 {\n    margin-bottom: 0 !important;\n  }\n  .mb-xxl-1 {\n    margin-bottom: 0.25rem !important;\n  }\n  .mb-xxl-2 {\n    margin-bottom: 0.5rem !important;\n  }\n  .mb-xxl-3 {\n    margin-bottom: 1rem !important;\n  }\n  .mb-xxl-4 {\n    margin-bottom: 1.5rem !important;\n  }\n  .mb-xxl-5 {\n    margin-bottom: 3rem !important;\n  }\n  .mb-xxl-auto {\n    margin-bottom: auto !important;\n  }\n  .ms-xxl-0 {\n    margin-left: 0 !important;\n  }\n  .ms-xxl-1 {\n    margin-left: 0.25rem !important;\n  }\n  .ms-xxl-2 {\n    margin-left: 0.5rem !important;\n  }\n  .ms-xxl-3 {\n    margin-left: 1rem !important;\n  }\n  .ms-xxl-4 {\n    margin-left: 1.5rem !important;\n  }\n  .ms-xxl-5 {\n    margin-left: 3rem !important;\n  }\n  .ms-xxl-auto {\n    margin-left: auto !important;\n  }\n  .p-xxl-0 {\n    padding: 0 !important;\n  }\n  .p-xxl-1 {\n    padding: 0.25rem !important;\n  }\n  .p-xxl-2 {\n    padding: 0.5rem !important;\n  }\n  .p-xxl-3 {\n    padding: 1rem !important;\n  }\n  .p-xxl-4 {\n    padding: 1.5rem !important;\n  }\n  .p-xxl-5 {\n    padding: 3rem !important;\n  }\n  .px-xxl-0 {\n    padding-right: 0 !important;\n    padding-left: 0 !important;\n  }\n  .px-xxl-1 {\n    padding-right: 0.25rem !important;\n    padding-left: 0.25rem !important;\n  }\n  .px-xxl-2 {\n    padding-right: 0.5rem !important;\n    padding-left: 0.5rem !important;\n  }\n  .px-xxl-3 {\n    padding-right: 1rem !important;\n    padding-left: 1rem !important;\n  }\n  .px-xxl-4 {\n    padding-right: 1.5rem !important;\n    padding-left: 1.5rem !important;\n  }\n  .px-xxl-5 {\n    padding-right: 3rem !important;\n    padding-left: 3rem !important;\n  }\n  .py-xxl-0 {\n    padding-top: 0 !important;\n    padding-bottom: 0 !important;\n  }\n  .py-xxl-1 {\n    padding-top: 0.25rem !important;\n    padding-bottom: 0.25rem !important;\n  }\n  .py-xxl-2 {\n    padding-top: 0.5rem !important;\n    padding-bottom: 0.5rem !important;\n  }\n  .py-xxl-3 {\n    padding-top: 1rem !important;\n    padding-bottom: 1rem !important;\n  }\n  .py-xxl-4 {\n    padding-top: 1.5rem !important;\n    padding-bottom: 1.5rem !important;\n  }\n  .py-xxl-5 {\n    padding-top: 3rem !important;\n    padding-bottom: 3rem !important;\n  }\n  .pt-xxl-0 {\n    padding-top: 0 !important;\n  }\n  .pt-xxl-1 {\n    padding-top: 0.25rem !important;\n  }\n  .pt-xxl-2 {\n    padding-top: 0.5rem !important;\n  }\n  .pt-xxl-3 {\n    padding-top: 1rem !important;\n  }\n  .pt-xxl-4 {\n    padding-top: 1.5rem !important;\n  }\n  .pt-xxl-5 {\n    padding-top: 3rem !important;\n  }\n  .pe-xxl-0 {\n    padding-right: 0 !important;\n  }\n  .pe-xxl-1 {\n    padding-right: 0.25rem !important;\n  }\n  .pe-xxl-2 {\n    padding-right: 0.5rem !important;\n  }\n  .pe-xxl-3 {\n    padding-right: 1rem !important;\n  }\n  .pe-xxl-4 {\n    padding-right: 1.5rem !important;\n  }\n  .pe-xxl-5 {\n    padding-right: 3rem !important;\n  }\n  .pb-xxl-0 {\n    padding-bottom: 0 !important;\n  }\n  .pb-xxl-1 {\n    padding-bottom: 0.25rem !important;\n  }\n  .pb-xxl-2 {\n    padding-bottom: 0.5rem !important;\n  }\n  .pb-xxl-3 {\n    padding-bottom: 1rem !important;\n  }\n  .pb-xxl-4 {\n    padding-bottom: 1.5rem !important;\n  }\n  .pb-xxl-5 {\n    padding-bottom: 3rem !important;\n  }\n  .ps-xxl-0 {\n    padding-left: 0 !important;\n  }\n  .ps-xxl-1 {\n    padding-left: 0.25rem !important;\n  }\n  .ps-xxl-2 {\n    padding-left: 0.5rem !important;\n  }\n  .ps-xxl-3 {\n    padding-left: 1rem !important;\n  }\n  .ps-xxl-4 {\n    padding-left: 1.5rem !important;\n  }\n  .ps-xxl-5 {\n    padding-left: 3rem !important;\n  }\n  .text-xxl-start {\n    text-align: left !important;\n  }\n  .text-xxl-end {\n    text-align: right !important;\n  }\n  .text-xxl-center {\n    text-align: center !important;\n  }\n}\n\n@media (min-width: 1200px) {\n  .fs-1 {\n    font-size: 2.5rem !important;\n  }\n  .fs-2 {\n    font-size: 2rem !important;\n  }\n  .fs-3 {\n    font-size: 1.75rem !important;\n  }\n  .fs-4 {\n    font-size: 1.5rem !important;\n  }\n}\n\n@media print {\n  .d-print-inline {\n    display: inline !important;\n  }\n  .d-print-inline-block {\n    display: inline-block !important;\n  }\n  .d-print-block {\n    display: block !important;\n  }\n  .d-print-grid {\n    display: grid !important;\n  }\n  .d-print-table {\n    display: table !important;\n  }\n  .d-print-table-row {\n    display: table-row !important;\n  }\n  .d-print-table-cell {\n    display: table-cell !important;\n  }\n  .d-print-flex {\n    display: -ms-flexbox !important;\n    display: flex !important;\n  }\n  .d-print-inline-flex {\n    display: -ms-inline-flexbox !important;\n    display: inline-flex !important;\n  }\n  .d-print-none {\n    display: none !important;\n  }\n}\n\n.navbar {\n  border-width: 1px;\n  border-style: solid;\n}\n\n.navbar-fixed-top {\n  border-width: 0 0 1px;\n}\n\n.navbar-fixed-bottom {\n  border-top-width: 1px 0 0 0;\n  border-style: solid;\n}\n\n.navbar.bg-primary {\n  background-color: #d9230f !important;\n  border-color: #bd1e0d !important;\n}\n\n.navbar.bg-dark {\n  border-color: #303234 !important;\n}\n\n.navbar.bg-light {\n  border-color: #dedede;\n}\n\n.btn-primary,\n.btn-primary:hover {\n  background-image: linear-gradient(#db301d, #d9230f 6%, #cc210e);\n  -webkit-filter: none;\n  filter: none;\n  border: 1px solid #bd1e0d;\n}\n\n.btn-secondary,\n.btn-secondary:hover {\n  background-image: linear-gradient(white, #fff 6%, #f0f0f0);\n  -webkit-filter: none;\n  filter: none;\n  border: 1px solid #dedede;\n}\n\n.btn-secondary:focus,\n.btn-secondary:not([disabled]):not(.disabled):active,\n.btn-secondary:not([disabled]):not(.disabled).active {\n  box-shadow: 0 0 0 0.2rem rgba(221, 221, 221, 0.5);\n}\n\n.btn-success,\n.btn-success:hover {\n  background-image: linear-gradient(#519a17, #469408 6%, #428b08);\n  -webkit-filter: none;\n  filter: none;\n  border: 1px solid #3d8107;\n}\n\n.btn-info,\n.btn-info:hover {\n  background-image: linear-gradient(#11a0d2, #029acf 6%, #0291c3);\n  -webkit-filter: none;\n  filter: none;\n  border: 1px solid #0286b4;\n}\n\n.btn-warning,\n.btn-warning:hover {\n  background-image: linear-gradient(#db8a2c, #d9831f 6%, #cc7b1d);\n  -webkit-filter: none;\n  filter: none;\n  border: 1px solid #bd721b;\n}\n\n.btn-danger,\n.btn-danger:hover {\n  background-image: linear-gradient(#a152a5, #9b479f 6%, #924395);\n  -webkit-filter: none;\n  filter: none;\n  border: 1px solid #873e8a;\n}\n\n.btn-dark,\n.btn-dark:hover {\n  background-image: linear-gradient(#434648, #373a3c 6%, #343738);\n  -webkit-filter: none;\n  filter: none;\n  border: 1px solid #303234;\n}\n\n.btn-light,\n.btn-light:hover {\n  background-image: linear-gradient(white, #fff 6%, #f0f0f0);\n  -webkit-filter: none;\n  filter: none;\n  border: 1px solid #dedede;\n}\n\n.btn-outline-secondary {\n  border-color: #bbb;\n  color: #bbb;\n}\n\n.btn-outline-secondary:hover {\n  background-color: #bbb;\n  color: #fff;\n}\n\n.text-secondary {\n  color: #777 !important;\n}\n\n.breadcrumb {\n  border: 1px solid #dedede;\n}\n\n.pagination .page-link:hover {\n  text-decoration: none;\n}\n\n.badge.bg-secondary, .badge.bg-light {\n  color: #373a3c;\n}\n"
  },
  {
    "path": "src/sourceDev.WebApp/SharedThemes/simplex/wwwroot/css/fontawesome-all.css",
    "content": "/*!\n * Font Awesome Free 5.0.8 by @fontawesome - https://fontawesome.com\n * License - https://fontawesome.com/license (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)\n */\n.fa,\n.fas,\n.far,\n.fal,\n.fab {\n  -moz-osx-font-smoothing: grayscale;\n  -webkit-font-smoothing: antialiased;\n  display: inline-block;\n  font-style: normal;\n  font-variant: normal;\n  text-rendering: auto;\n  line-height: 1; }\n\n.fa-lg {\n  font-size: 1.33333em;\n  line-height: 0.75em;\n  vertical-align: -.0667em; }\n\n.fa-xs {\n  font-size: .75em; }\n\n.fa-sm {\n  font-size: .875em; }\n\n.fa-1x {\n  font-size: 1em; }\n\n.fa-2x {\n  font-size: 2em; }\n\n.fa-3x {\n  font-size: 3em; }\n\n.fa-4x {\n  font-size: 4em; }\n\n.fa-5x {\n  font-size: 5em; }\n\n.fa-6x {\n  font-size: 6em; }\n\n.fa-7x {\n  font-size: 7em; }\n\n.fa-8x {\n  font-size: 8em; }\n\n.fa-9x {\n  font-size: 9em; }\n\n.fa-10x {\n  font-size: 10em; }\n\n.fa-fw {\n  text-align: center;\n  width: 1.25em; }\n\n.fa-ul {\n  list-style-type: none;\n  margin-left: 2.5em;\n  padding-left: 0; }\n  .fa-ul > li {\n    position: relative; }\n\n.fa-li {\n  left: -2em;\n  position: absolute;\n  text-align: center;\n  width: 2em;\n  line-height: inherit; }\n\n.fa-border {\n  border: solid 0.08em #eee;\n  border-radius: .1em;\n  padding: .2em .25em .15em; }\n\n.fa-pull-left {\n  float: left; }\n\n.fa-pull-right {\n  float: right; }\n\n.fa.fa-pull-left,\n.fas.fa-pull-left,\n.far.fa-pull-left,\n.fal.fa-pull-left,\n.fab.fa-pull-left {\n  margin-right: .3em; }\n\n.fa.fa-pull-right,\n.fas.fa-pull-right,\n.far.fa-pull-right,\n.fal.fa-pull-right,\n.fab.fa-pull-right {\n  margin-left: .3em; }\n\n.fa-spin {\n  -webkit-animation: fa-spin 2s infinite linear;\n          animation: fa-spin 2s infinite linear; }\n\n.fa-pulse {\n  -webkit-animation: fa-spin 1s infinite steps(8);\n          animation: fa-spin 1s infinite steps(8); }\n\n@-webkit-keyframes fa-spin {\n  0% {\n    -webkit-transform: rotate(0deg);\n            transform: rotate(0deg); }\n  100% {\n    -webkit-transform: rotate(360deg);\n            transform: rotate(360deg); } }\n\n@keyframes fa-spin {\n  0% {\n    -webkit-transform: rotate(0deg);\n            transform: rotate(0deg); }\n  100% {\n    -webkit-transform: rotate(360deg);\n            transform: rotate(360deg); } }\n\n.fa-rotate-90 {\n  -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)\";\n  -webkit-transform: rotate(90deg);\n          transform: rotate(90deg); }\n\n.fa-rotate-180 {\n  -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)\";\n  -webkit-transform: rotate(180deg);\n          transform: rotate(180deg); }\n\n.fa-rotate-270 {\n  -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)\";\n  -webkit-transform: rotate(270deg);\n          transform: rotate(270deg); }\n\n.fa-flip-horizontal {\n  -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)\";\n  -webkit-transform: scale(-1, 1);\n          transform: scale(-1, 1); }\n\n.fa-flip-vertical {\n  -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)\";\n  -webkit-transform: scale(1, -1);\n          transform: scale(1, -1); }\n\n.fa-flip-horizontal.fa-flip-vertical {\n  -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)\";\n  -webkit-transform: scale(-1, -1);\n          transform: scale(-1, -1); }\n\n:root .fa-rotate-90,\n:root .fa-rotate-180,\n:root .fa-rotate-270,\n:root .fa-flip-horizontal,\n:root .fa-flip-vertical {\n  -webkit-filter: none;\n          filter: none; }\n\n.fa-stack {\n  display: inline-block;\n  height: 2em;\n  line-height: 2em;\n  position: relative;\n  vertical-align: middle;\n  width: 2em; }\n\n.fa-stack-1x,\n.fa-stack-2x {\n  left: 0;\n  position: absolute;\n  text-align: center;\n  width: 100%; }\n\n.fa-stack-1x {\n  line-height: inherit; }\n\n.fa-stack-2x {\n  font-size: 2em; }\n\n.fa-inverse {\n  color: #fff; }\n\n/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen\nreaders do not read off random characters that represent icons */\n.fa-500px:before {\n  content: \"\\f26e\"; }\n\n.fa-accessible-icon:before {\n  content: \"\\f368\"; }\n\n.fa-accusoft:before {\n  content: \"\\f369\"; }\n\n.fa-address-book:before {\n  content: \"\\f2b9\"; }\n\n.fa-address-card:before {\n  content: \"\\f2bb\"; }\n\n.fa-adjust:before {\n  content: \"\\f042\"; }\n\n.fa-adn:before {\n  content: \"\\f170\"; }\n\n.fa-adversal:before {\n  content: \"\\f36a\"; }\n\n.fa-affiliatetheme:before {\n  content: \"\\f36b\"; }\n\n.fa-algolia:before {\n  content: \"\\f36c\"; }\n\n.fa-align-center:before {\n  content: \"\\f037\"; }\n\n.fa-align-justify:before {\n  content: \"\\f039\"; }\n\n.fa-align-left:before {\n  content: \"\\f036\"; }\n\n.fa-align-right:before {\n  content: \"\\f038\"; }\n\n.fa-amazon:before {\n  content: \"\\f270\"; }\n\n.fa-amazon-pay:before {\n  content: \"\\f42c\"; }\n\n.fa-ambulance:before {\n  content: \"\\f0f9\"; }\n\n.fa-american-sign-language-interpreting:before {\n  content: \"\\f2a3\"; }\n\n.fa-amilia:before {\n  content: \"\\f36d\"; }\n\n.fa-anchor:before {\n  content: \"\\f13d\"; }\n\n.fa-android:before {\n  content: \"\\f17b\"; }\n\n.fa-angellist:before {\n  content: \"\\f209\"; }\n\n.fa-angle-double-down:before {\n  content: \"\\f103\"; }\n\n.fa-angle-double-left:before {\n  content: \"\\f100\"; }\n\n.fa-angle-double-right:before {\n  content: \"\\f101\"; }\n\n.fa-angle-double-up:before {\n  content: \"\\f102\"; }\n\n.fa-angle-down:before {\n  content: \"\\f107\"; }\n\n.fa-angle-left:before {\n  content: \"\\f104\"; }\n\n.fa-angle-right:before {\n  content: \"\\f105\"; }\n\n.fa-angle-up:before {\n  content: \"\\f106\"; }\n\n.fa-angrycreative:before {\n  content: \"\\f36e\"; }\n\n.fa-angular:before {\n  content: \"\\f420\"; }\n\n.fa-app-store:before {\n  content: \"\\f36f\"; }\n\n.fa-app-store-ios:before {\n  content: \"\\f370\"; }\n\n.fa-apper:before {\n  content: \"\\f371\"; }\n\n.fa-apple:before {\n  content: \"\\f179\"; }\n\n.fa-apple-pay:before {\n  content: \"\\f415\"; }\n\n.fa-archive:before {\n  content: \"\\f187\"; }\n\n.fa-arrow-alt-circle-down:before {\n  content: \"\\f358\"; }\n\n.fa-arrow-alt-circle-left:before {\n  content: \"\\f359\"; }\n\n.fa-arrow-alt-circle-right:before {\n  content: \"\\f35a\"; }\n\n.fa-arrow-alt-circle-up:before {\n  content: \"\\f35b\"; }\n\n.fa-arrow-circle-down:before {\n  content: \"\\f0ab\"; }\n\n.fa-arrow-circle-left:before {\n  content: \"\\f0a8\"; }\n\n.fa-arrow-circle-right:before {\n  content: \"\\f0a9\"; }\n\n.fa-arrow-circle-up:before {\n  content: \"\\f0aa\"; }\n\n.fa-arrow-down:before {\n  content: \"\\f063\"; }\n\n.fa-arrow-left:before {\n  content: \"\\f060\"; }\n\n.fa-arrow-right:before {\n  content: \"\\f061\"; }\n\n.fa-arrow-up:before {\n  content: \"\\f062\"; }\n\n.fa-arrows-alt:before {\n  content: \"\\f0b2\"; }\n\n.fa-arrows-alt-h:before {\n  content: \"\\f337\"; }\n\n.fa-arrows-alt-v:before {\n  content: \"\\f338\"; }\n\n.fa-assistive-listening-systems:before {\n  content: \"\\f2a2\"; }\n\n.fa-asterisk:before {\n  content: \"\\f069\"; }\n\n.fa-asymmetrik:before {\n  content: \"\\f372\"; }\n\n.fa-at:before {\n  content: \"\\f1fa\"; }\n\n.fa-audible:before {\n  content: \"\\f373\"; }\n\n.fa-audio-description:before {\n  content: \"\\f29e\"; }\n\n.fa-autoprefixer:before {\n  content: \"\\f41c\"; }\n\n.fa-avianex:before {\n  content: \"\\f374\"; }\n\n.fa-aviato:before {\n  content: \"\\f421\"; }\n\n.fa-aws:before {\n  content: \"\\f375\"; }\n\n.fa-backward:before {\n  content: \"\\f04a\"; }\n\n.fa-balance-scale:before {\n  content: \"\\f24e\"; }\n\n.fa-ban:before {\n  content: \"\\f05e\"; }\n\n.fa-band-aid:before {\n  content: \"\\f462\"; }\n\n.fa-bandcamp:before {\n  content: \"\\f2d5\"; }\n\n.fa-barcode:before {\n  content: \"\\f02a\"; }\n\n.fa-bars:before {\n  content: \"\\f0c9\"; }\n\n.fa-baseball-ball:before {\n  content: \"\\f433\"; }\n\n.fa-basketball-ball:before {\n  content: \"\\f434\"; }\n\n.fa-bath:before {\n  content: \"\\f2cd\"; }\n\n.fa-battery-empty:before {\n  content: \"\\f244\"; }\n\n.fa-battery-full:before {\n  content: \"\\f240\"; }\n\n.fa-battery-half:before {\n  content: \"\\f242\"; }\n\n.fa-battery-quarter:before {\n  content: \"\\f243\"; }\n\n.fa-battery-three-quarters:before {\n  content: \"\\f241\"; }\n\n.fa-bed:before {\n  content: \"\\f236\"; }\n\n.fa-beer:before {\n  content: \"\\f0fc\"; }\n\n.fa-behance:before {\n  content: \"\\f1b4\"; }\n\n.fa-behance-square:before {\n  content: \"\\f1b5\"; }\n\n.fa-bell:before {\n  content: \"\\f0f3\"; }\n\n.fa-bell-slash:before {\n  content: \"\\f1f6\"; }\n\n.fa-bicycle:before {\n  content: \"\\f206\"; }\n\n.fa-bimobject:before {\n  content: \"\\f378\"; }\n\n.fa-binoculars:before {\n  content: \"\\f1e5\"; }\n\n.fa-birthday-cake:before {\n  content: \"\\f1fd\"; }\n\n.fa-bitbucket:before {\n  content: \"\\f171\"; }\n\n.fa-bitcoin:before {\n  content: \"\\f379\"; }\n\n.fa-bity:before {\n  content: \"\\f37a\"; }\n\n.fa-black-tie:before {\n  content: \"\\f27e\"; }\n\n.fa-blackberry:before {\n  content: \"\\f37b\"; }\n\n.fa-blind:before {\n  content: \"\\f29d\"; }\n\n.fa-blogger:before {\n  content: \"\\f37c\"; }\n\n.fa-blogger-b:before {\n  content: \"\\f37d\"; }\n\n.fa-bluetooth:before {\n  content: \"\\f293\"; }\n\n.fa-bluetooth-b:before {\n  content: \"\\f294\"; }\n\n.fa-bold:before {\n  content: \"\\f032\"; }\n\n.fa-bolt:before {\n  content: \"\\f0e7\"; }\n\n.fa-bomb:before {\n  content: \"\\f1e2\"; }\n\n.fa-book:before {\n  content: \"\\f02d\"; }\n\n.fa-bookmark:before {\n  content: \"\\f02e\"; }\n\n.fa-bowling-ball:before {\n  content: \"\\f436\"; }\n\n.fa-box:before {\n  content: \"\\f466\"; }\n\n.fa-boxes:before {\n  content: \"\\f468\"; }\n\n.fa-braille:before {\n  content: \"\\f2a1\"; }\n\n.fa-briefcase:before {\n  content: \"\\f0b1\"; }\n\n.fa-btc:before {\n  content: \"\\f15a\"; }\n\n.fa-bug:before {\n  content: \"\\f188\"; }\n\n.fa-building:before {\n  content: \"\\f1ad\"; }\n\n.fa-bullhorn:before {\n  content: \"\\f0a1\"; }\n\n.fa-bullseye:before {\n  content: \"\\f140\"; }\n\n.fa-buromobelexperte:before {\n  content: \"\\f37f\"; }\n\n.fa-bus:before {\n  content: \"\\f207\"; }\n\n.fa-buysellads:before {\n  content: \"\\f20d\"; }\n\n.fa-calculator:before {\n  content: \"\\f1ec\"; }\n\n.fa-calendar:before {\n  content: \"\\f133\"; }\n\n.fa-calendar-alt:before {\n  content: \"\\f073\"; }\n\n.fa-calendar-check:before {\n  content: \"\\f274\"; }\n\n.fa-calendar-minus:before {\n  content: \"\\f272\"; }\n\n.fa-calendar-plus:before {\n  content: \"\\f271\"; }\n\n.fa-calendar-times:before {\n  content: \"\\f273\"; }\n\n.fa-camera:before {\n  content: \"\\f030\"; }\n\n.fa-camera-retro:before {\n  content: \"\\f083\"; }\n\n.fa-car:before {\n  content: \"\\f1b9\"; }\n\n.fa-caret-down:before {\n  content: \"\\f0d7\"; }\n\n.fa-caret-left:before {\n  content: \"\\f0d9\"; }\n\n.fa-caret-right:before {\n  content: \"\\f0da\"; }\n\n.fa-caret-square-down:before {\n  content: \"\\f150\"; }\n\n.fa-caret-square-left:before {\n  content: \"\\f191\"; }\n\n.fa-caret-square-right:before {\n  content: \"\\f152\"; }\n\n.fa-caret-square-up:before {\n  content: \"\\f151\"; }\n\n.fa-caret-up:before {\n  content: \"\\f0d8\"; }\n\n.fa-cart-arrow-down:before {\n  content: \"\\f218\"; }\n\n.fa-cart-plus:before {\n  content: \"\\f217\"; }\n\n.fa-cc-amazon-pay:before {\n  content: \"\\f42d\"; }\n\n.fa-cc-amex:before {\n  content: \"\\f1f3\"; }\n\n.fa-cc-apple-pay:before {\n  content: \"\\f416\"; }\n\n.fa-cc-diners-club:before {\n  content: \"\\f24c\"; }\n\n.fa-cc-discover:before {\n  content: \"\\f1f2\"; }\n\n.fa-cc-jcb:before {\n  content: \"\\f24b\"; }\n\n.fa-cc-mastercard:before {\n  content: \"\\f1f1\"; }\n\n.fa-cc-paypal:before {\n  content: \"\\f1f4\"; }\n\n.fa-cc-stripe:before {\n  content: \"\\f1f5\"; }\n\n.fa-cc-visa:before {\n  content: \"\\f1f0\"; }\n\n.fa-centercode:before {\n  content: \"\\f380\"; }\n\n.fa-certificate:before {\n  content: \"\\f0a3\"; }\n\n.fa-chart-area:before {\n  content: \"\\f1fe\"; }\n\n.fa-chart-bar:before {\n  content: \"\\f080\"; }\n\n.fa-chart-line:before {\n  content: \"\\f201\"; }\n\n.fa-chart-pie:before {\n  content: \"\\f200\"; }\n\n.fa-check:before {\n  content: \"\\f00c\"; }\n\n.fa-check-circle:before {\n  content: \"\\f058\"; }\n\n.fa-check-square:before {\n  content: \"\\f14a\"; }\n\n.fa-chess:before {\n  content: \"\\f439\"; }\n\n.fa-chess-bishop:before {\n  content: \"\\f43a\"; }\n\n.fa-chess-board:before {\n  content: \"\\f43c\"; }\n\n.fa-chess-king:before {\n  content: \"\\f43f\"; }\n\n.fa-chess-knight:before {\n  content: \"\\f441\"; }\n\n.fa-chess-pawn:before {\n  content: \"\\f443\"; }\n\n.fa-chess-queen:before {\n  content: \"\\f445\"; }\n\n.fa-chess-rook:before {\n  content: \"\\f447\"; }\n\n.fa-chevron-circle-down:before {\n  content: \"\\f13a\"; }\n\n.fa-chevron-circle-left:before {\n  content: \"\\f137\"; }\n\n.fa-chevron-circle-right:before {\n  content: \"\\f138\"; }\n\n.fa-chevron-circle-up:before {\n  content: \"\\f139\"; }\n\n.fa-chevron-down:before {\n  content: \"\\f078\"; }\n\n.fa-chevron-left:before {\n  content: \"\\f053\"; }\n\n.fa-chevron-right:before {\n  content: \"\\f054\"; }\n\n.fa-chevron-up:before {\n  content: \"\\f077\"; }\n\n.fa-child:before {\n  content: \"\\f1ae\"; }\n\n.fa-chrome:before {\n  content: \"\\f268\"; }\n\n.fa-circle:before {\n  content: \"\\f111\"; }\n\n.fa-circle-notch:before {\n  content: \"\\f1ce\"; }\n\n.fa-clipboard:before {\n  content: \"\\f328\"; }\n\n.fa-clipboard-check:before {\n  content: \"\\f46c\"; }\n\n.fa-clipboard-list:before {\n  content: \"\\f46d\"; }\n\n.fa-clock:before {\n  content: \"\\f017\"; }\n\n.fa-clone:before {\n  content: \"\\f24d\"; }\n\n.fa-closed-captioning:before {\n  content: \"\\f20a\"; }\n\n.fa-cloud:before {\n  content: \"\\f0c2\"; }\n\n.fa-cloud-download-alt:before {\n  content: \"\\f381\"; }\n\n.fa-cloud-upload-alt:before {\n  content: \"\\f382\"; }\n\n.fa-cloudscale:before {\n  content: \"\\f383\"; }\n\n.fa-cloudsmith:before {\n  content: \"\\f384\"; }\n\n.fa-cloudversify:before {\n  content: \"\\f385\"; }\n\n.fa-code:before {\n  content: \"\\f121\"; }\n\n.fa-code-branch:before {\n  content: \"\\f126\"; }\n\n.fa-codepen:before {\n  content: \"\\f1cb\"; }\n\n.fa-codiepie:before {\n  content: \"\\f284\"; }\n\n.fa-coffee:before {\n  content: \"\\f0f4\"; }\n\n.fa-cog:before {\n  content: \"\\f013\"; }\n\n.fa-cogs:before {\n  content: \"\\f085\"; }\n\n.fa-columns:before {\n  content: \"\\f0db\"; }\n\n.fa-comment:before {\n  content: \"\\f075\"; }\n\n.fa-comment-alt:before {\n  content: \"\\f27a\"; }\n\n.fa-comments:before {\n  content: \"\\f086\"; }\n\n.fa-compass:before {\n  content: \"\\f14e\"; }\n\n.fa-compress:before {\n  content: \"\\f066\"; }\n\n.fa-connectdevelop:before {\n  content: \"\\f20e\"; }\n\n.fa-contao:before {\n  content: \"\\f26d\"; }\n\n.fa-copy:before {\n  content: \"\\f0c5\"; }\n\n.fa-copyright:before {\n  content: \"\\f1f9\"; }\n\n.fa-cpanel:before {\n  content: \"\\f388\"; }\n\n.fa-creative-commons:before {\n  content: \"\\f25e\"; }\n\n.fa-credit-card:before {\n  content: \"\\f09d\"; }\n\n.fa-crop:before {\n  content: \"\\f125\"; }\n\n.fa-crosshairs:before {\n  content: \"\\f05b\"; }\n\n.fa-css3:before {\n  content: \"\\f13c\"; }\n\n.fa-css3-alt:before {\n  content: \"\\f38b\"; }\n\n.fa-cube:before {\n  content: \"\\f1b2\"; }\n\n.fa-cubes:before {\n  content: \"\\f1b3\"; }\n\n.fa-cut:before {\n  content: \"\\f0c4\"; }\n\n.fa-cuttlefish:before {\n  content: \"\\f38c\"; }\n\n.fa-d-and-d:before {\n  content: \"\\f38d\"; }\n\n.fa-dashcube:before {\n  content: \"\\f210\"; }\n\n.fa-database:before {\n  content: \"\\f1c0\"; }\n\n.fa-deaf:before {\n  content: \"\\f2a4\"; }\n\n.fa-delicious:before {\n  content: \"\\f1a5\"; }\n\n.fa-deploydog:before {\n  content: \"\\f38e\"; }\n\n.fa-deskpro:before {\n  content: \"\\f38f\"; }\n\n.fa-desktop:before {\n  content: \"\\f108\"; }\n\n.fa-deviantart:before {\n  content: \"\\f1bd\"; }\n\n.fa-digg:before {\n  content: \"\\f1a6\"; }\n\n.fa-digital-ocean:before {\n  content: \"\\f391\"; }\n\n.fa-discord:before {\n  content: \"\\f392\"; }\n\n.fa-discourse:before {\n  content: \"\\f393\"; }\n\n.fa-dna:before {\n  content: \"\\f471\"; }\n\n.fa-dochub:before {\n  content: \"\\f394\"; }\n\n.fa-docker:before {\n  content: \"\\f395\"; }\n\n.fa-dollar-sign:before {\n  content: \"\\f155\"; }\n\n.fa-dolly:before {\n  content: \"\\f472\"; }\n\n.fa-dolly-flatbed:before {\n  content: \"\\f474\"; }\n\n.fa-dot-circle:before {\n  content: \"\\f192\"; }\n\n.fa-download:before {\n  content: \"\\f019\"; }\n\n.fa-draft2digital:before {\n  content: \"\\f396\"; }\n\n.fa-dribbble:before {\n  content: \"\\f17d\"; }\n\n.fa-dribbble-square:before {\n  content: \"\\f397\"; }\n\n.fa-dropbox:before {\n  content: \"\\f16b\"; }\n\n.fa-drupal:before {\n  content: \"\\f1a9\"; }\n\n.fa-dyalog:before {\n  content: \"\\f399\"; }\n\n.fa-earlybirds:before {\n  content: \"\\f39a\"; }\n\n.fa-edge:before {\n  content: \"\\f282\"; }\n\n.fa-edit:before {\n  content: \"\\f044\"; }\n\n.fa-eject:before {\n  content: \"\\f052\"; }\n\n.fa-elementor:before {\n  content: \"\\f430\"; }\n\n.fa-ellipsis-h:before {\n  content: \"\\f141\"; }\n\n.fa-ellipsis-v:before {\n  content: \"\\f142\"; }\n\n.fa-ember:before {\n  content: \"\\f423\"; }\n\n.fa-empire:before {\n  content: \"\\f1d1\"; }\n\n.fa-envelope:before {\n  content: \"\\f0e0\"; }\n\n.fa-envelope-open:before {\n  content: \"\\f2b6\"; }\n\n.fa-envelope-square:before {\n  content: \"\\f199\"; }\n\n.fa-envira:before {\n  content: \"\\f299\"; }\n\n.fa-eraser:before {\n  content: \"\\f12d\"; }\n\n.fa-erlang:before {\n  content: \"\\f39d\"; }\n\n.fa-ethereum:before {\n  content: \"\\f42e\"; }\n\n.fa-etsy:before {\n  content: \"\\f2d7\"; }\n\n.fa-euro-sign:before {\n  content: \"\\f153\"; }\n\n.fa-exchange-alt:before {\n  content: \"\\f362\"; }\n\n.fa-exclamation:before {\n  content: \"\\f12a\"; }\n\n.fa-exclamation-circle:before {\n  content: \"\\f06a\"; }\n\n.fa-exclamation-triangle:before {\n  content: \"\\f071\"; }\n\n.fa-expand:before {\n  content: \"\\f065\"; }\n\n.fa-expand-arrows-alt:before {\n  content: \"\\f31e\"; }\n\n.fa-expeditedssl:before {\n  content: \"\\f23e\"; }\n\n.fa-external-link-alt:before {\n  content: \"\\f35d\"; }\n\n.fa-external-link-square-alt:before {\n  content: \"\\f360\"; }\n\n.fa-eye:before {\n  content: \"\\f06e\"; }\n\n.fa-eye-dropper:before {\n  content: \"\\f1fb\"; }\n\n.fa-eye-slash:before {\n  content: \"\\f070\"; }\n\n.fa-facebook:before {\n  content: \"\\f09a\"; }\n\n.fa-facebook-f:before {\n  content: \"\\f39e\"; }\n\n.fa-facebook-messenger:before {\n  content: \"\\f39f\"; }\n\n.fa-facebook-square:before {\n  content: \"\\f082\"; }\n\n.fa-fast-backward:before {\n  content: \"\\f049\"; }\n\n.fa-fast-forward:before {\n  content: \"\\f050\"; }\n\n.fa-fax:before {\n  content: \"\\f1ac\"; }\n\n.fa-female:before {\n  content: \"\\f182\"; }\n\n.fa-fighter-jet:before {\n  content: \"\\f0fb\"; }\n\n.fa-file:before {\n  content: \"\\f15b\"; }\n\n.fa-file-alt:before {\n  content: \"\\f15c\"; }\n\n.fa-file-archive:before {\n  content: \"\\f1c6\"; }\n\n.fa-file-audio:before {\n  content: \"\\f1c7\"; }\n\n.fa-file-code:before {\n  content: \"\\f1c9\"; }\n\n.fa-file-excel:before {\n  content: \"\\f1c3\"; }\n\n.fa-file-image:before {\n  content: \"\\f1c5\"; }\n\n.fa-file-pdf:before {\n  content: \"\\f1c1\"; }\n\n.fa-file-powerpoint:before {\n  content: \"\\f1c4\"; }\n\n.fa-file-video:before {\n  content: \"\\f1c8\"; }\n\n.fa-file-word:before {\n  content: \"\\f1c2\"; }\n\n.fa-film:before {\n  content: \"\\f008\"; }\n\n.fa-filter:before {\n  content: \"\\f0b0\"; }\n\n.fa-fire:before {\n  content: \"\\f06d\"; }\n\n.fa-fire-extinguisher:before {\n  content: \"\\f134\"; }\n\n.fa-firefox:before {\n  content: \"\\f269\"; }\n\n.fa-first-aid:before {\n  content: \"\\f479\"; }\n\n.fa-first-order:before {\n  content: \"\\f2b0\"; }\n\n.fa-firstdraft:before {\n  content: \"\\f3a1\"; }\n\n.fa-flag:before {\n  content: \"\\f024\"; }\n\n.fa-flag-checkered:before {\n  content: \"\\f11e\"; }\n\n.fa-flask:before {\n  content: \"\\f0c3\"; }\n\n.fa-flickr:before {\n  content: \"\\f16e\"; }\n\n.fa-flipboard:before {\n  content: \"\\f44d\"; }\n\n.fa-fly:before {\n  content: \"\\f417\"; }\n\n.fa-folder:before {\n  content: \"\\f07b\"; }\n\n.fa-folder-open:before {\n  content: \"\\f07c\"; }\n\n.fa-font:before {\n  content: \"\\f031\"; }\n\n.fa-font-awesome:before {\n  content: \"\\f2b4\"; }\n\n.fa-font-awesome-alt:before {\n  content: \"\\f35c\"; }\n\n.fa-font-awesome-flag:before {\n  content: \"\\f425\"; }\n\n.fa-fonticons:before {\n  content: \"\\f280\"; }\n\n.fa-fonticons-fi:before {\n  content: \"\\f3a2\"; }\n\n.fa-football-ball:before {\n  content: \"\\f44e\"; }\n\n.fa-fort-awesome:before {\n  content: \"\\f286\"; }\n\n.fa-fort-awesome-alt:before {\n  content: \"\\f3a3\"; }\n\n.fa-forumbee:before {\n  content: \"\\f211\"; }\n\n.fa-forward:before {\n  content: \"\\f04e\"; }\n\n.fa-foursquare:before {\n  content: \"\\f180\"; }\n\n.fa-free-code-camp:before {\n  content: \"\\f2c5\"; }\n\n.fa-freebsd:before {\n  content: \"\\f3a4\"; }\n\n.fa-frown:before {\n  content: \"\\f119\"; }\n\n.fa-futbol:before {\n  content: \"\\f1e3\"; }\n\n.fa-gamepad:before {\n  content: \"\\f11b\"; }\n\n.fa-gavel:before {\n  content: \"\\f0e3\"; }\n\n.fa-gem:before {\n  content: \"\\f3a5\"; }\n\n.fa-genderless:before {\n  content: \"\\f22d\"; }\n\n.fa-get-pocket:before {\n  content: \"\\f265\"; }\n\n.fa-gg:before {\n  content: \"\\f260\"; }\n\n.fa-gg-circle:before {\n  content: \"\\f261\"; }\n\n.fa-gift:before {\n  content: \"\\f06b\"; }\n\n.fa-git:before {\n  content: \"\\f1d3\"; }\n\n.fa-git-square:before {\n  content: \"\\f1d2\"; }\n\n.fa-github:before {\n  content: \"\\f09b\"; }\n\n.fa-github-alt:before {\n  content: \"\\f113\"; }\n\n.fa-github-square:before {\n  content: \"\\f092\"; }\n\n.fa-gitkraken:before {\n  content: \"\\f3a6\"; }\n\n.fa-gitlab:before {\n  content: \"\\f296\"; }\n\n.fa-gitter:before {\n  content: \"\\f426\"; }\n\n.fa-glass-martini:before {\n  content: \"\\f000\"; }\n\n.fa-glide:before {\n  content: \"\\f2a5\"; }\n\n.fa-glide-g:before {\n  content: \"\\f2a6\"; }\n\n.fa-globe:before {\n  content: \"\\f0ac\"; }\n\n.fa-gofore:before {\n  content: \"\\f3a7\"; }\n\n.fa-golf-ball:before {\n  content: \"\\f450\"; }\n\n.fa-goodreads:before {\n  content: \"\\f3a8\"; }\n\n.fa-goodreads-g:before {\n  content: \"\\f3a9\"; }\n\n.fa-google:before {\n  content: \"\\f1a0\"; }\n\n.fa-google-drive:before {\n  content: \"\\f3aa\"; }\n\n.fa-google-play:before {\n  content: \"\\f3ab\"; }\n\n.fa-google-plus:before {\n  content: \"\\f2b3\"; }\n\n.fa-google-plus-g:before {\n  content: \"\\f0d5\"; }\n\n.fa-google-plus-square:before {\n  content: \"\\f0d4\"; }\n\n.fa-google-wallet:before {\n  content: \"\\f1ee\"; }\n\n.fa-graduation-cap:before {\n  content: \"\\f19d\"; }\n\n.fa-gratipay:before {\n  content: \"\\f184\"; }\n\n.fa-grav:before {\n  content: \"\\f2d6\"; }\n\n.fa-gripfire:before {\n  content: \"\\f3ac\"; }\n\n.fa-grunt:before {\n  content: \"\\f3ad\"; }\n\n.fa-gulp:before {\n  content: \"\\f3ae\"; }\n\n.fa-h-square:before {\n  content: \"\\f0fd\"; }\n\n.fa-hacker-news:before {\n  content: \"\\f1d4\"; }\n\n.fa-hacker-news-square:before {\n  content: \"\\f3af\"; }\n\n.fa-hand-lizard:before {\n  content: \"\\f258\"; }\n\n.fa-hand-paper:before {\n  content: \"\\f256\"; }\n\n.fa-hand-peace:before {\n  content: \"\\f25b\"; }\n\n.fa-hand-point-down:before {\n  content: \"\\f0a7\"; }\n\n.fa-hand-point-left:before {\n  content: \"\\f0a5\"; }\n\n.fa-hand-point-right:before {\n  content: \"\\f0a4\"; }\n\n.fa-hand-point-up:before {\n  content: \"\\f0a6\"; }\n\n.fa-hand-pointer:before {\n  content: \"\\f25a\"; }\n\n.fa-hand-rock:before {\n  content: \"\\f255\"; }\n\n.fa-hand-scissors:before {\n  content: \"\\f257\"; }\n\n.fa-hand-spock:before {\n  content: \"\\f259\"; }\n\n.fa-handshake:before {\n  content: \"\\f2b5\"; }\n\n.fa-hashtag:before {\n  content: \"\\f292\"; }\n\n.fa-hdd:before {\n  content: \"\\f0a0\"; }\n\n.fa-heading:before {\n  content: \"\\f1dc\"; }\n\n.fa-headphones:before {\n  content: \"\\f025\"; }\n\n.fa-heart:before {\n  content: \"\\f004\"; }\n\n.fa-heartbeat:before {\n  content: \"\\f21e\"; }\n\n.fa-hips:before {\n  content: \"\\f452\"; }\n\n.fa-hire-a-helper:before {\n  content: \"\\f3b0\"; }\n\n.fa-history:before {\n  content: \"\\f1da\"; }\n\n.fa-hockey-puck:before {\n  content: \"\\f453\"; }\n\n.fa-home:before {\n  content: \"\\f015\"; }\n\n.fa-hooli:before {\n  content: \"\\f427\"; }\n\n.fa-hospital:before {\n  content: \"\\f0f8\"; }\n\n.fa-hospital-symbol:before {\n  content: \"\\f47e\"; }\n\n.fa-hotjar:before {\n  content: \"\\f3b1\"; }\n\n.fa-hourglass:before {\n  content: \"\\f254\"; }\n\n.fa-hourglass-end:before {\n  content: \"\\f253\"; }\n\n.fa-hourglass-half:before {\n  content: \"\\f252\"; }\n\n.fa-hourglass-start:before {\n  content: \"\\f251\"; }\n\n.fa-houzz:before {\n  content: \"\\f27c\"; }\n\n.fa-html5:before {\n  content: \"\\f13b\"; }\n\n.fa-hubspot:before {\n  content: \"\\f3b2\"; }\n\n.fa-i-cursor:before {\n  content: \"\\f246\"; }\n\n.fa-id-badge:before {\n  content: \"\\f2c1\"; }\n\n.fa-id-card:before {\n  content: \"\\f2c2\"; }\n\n.fa-image:before {\n  content: \"\\f03e\"; }\n\n.fa-images:before {\n  content: \"\\f302\"; }\n\n.fa-imdb:before {\n  content: \"\\f2d8\"; }\n\n.fa-inbox:before {\n  content: \"\\f01c\"; }\n\n.fa-indent:before {\n  content: \"\\f03c\"; }\n\n.fa-industry:before {\n  content: \"\\f275\"; }\n\n.fa-info:before {\n  content: \"\\f129\"; }\n\n.fa-info-circle:before {\n  content: \"\\f05a\"; }\n\n.fa-instagram:before {\n  content: \"\\f16d\"; }\n\n.fa-internet-explorer:before {\n  content: \"\\f26b\"; }\n\n.fa-ioxhost:before {\n  content: \"\\f208\"; }\n\n.fa-italic:before {\n  content: \"\\f033\"; }\n\n.fa-itunes:before {\n  content: \"\\f3b4\"; }\n\n.fa-itunes-note:before {\n  content: \"\\f3b5\"; }\n\n.fa-jenkins:before {\n  content: \"\\f3b6\"; }\n\n.fa-joget:before {\n  content: \"\\f3b7\"; }\n\n.fa-joomla:before {\n  content: \"\\f1aa\"; }\n\n.fa-js:before {\n  content: \"\\f3b8\"; }\n\n.fa-js-square:before {\n  content: \"\\f3b9\"; }\n\n.fa-jsfiddle:before {\n  content: \"\\f1cc\"; }\n\n.fa-key:before {\n  content: \"\\f084\"; }\n\n.fa-keyboard:before {\n  content: \"\\f11c\"; }\n\n.fa-keycdn:before {\n  content: \"\\f3ba\"; }\n\n.fa-kickstarter:before {\n  content: \"\\f3bb\"; }\n\n.fa-kickstarter-k:before {\n  content: \"\\f3bc\"; }\n\n.fa-korvue:before {\n  content: \"\\f42f\"; }\n\n.fa-language:before {\n  content: \"\\f1ab\"; }\n\n.fa-laptop:before {\n  content: \"\\f109\"; }\n\n.fa-laravel:before {\n  content: \"\\f3bd\"; }\n\n.fa-lastfm:before {\n  content: \"\\f202\"; }\n\n.fa-lastfm-square:before {\n  content: \"\\f203\"; }\n\n.fa-leaf:before {\n  content: \"\\f06c\"; }\n\n.fa-leanpub:before {\n  content: \"\\f212\"; }\n\n.fa-lemon:before {\n  content: \"\\f094\"; }\n\n.fa-less:before {\n  content: \"\\f41d\"; }\n\n.fa-level-down-alt:before {\n  content: \"\\f3be\"; }\n\n.fa-level-up-alt:before {\n  content: \"\\f3bf\"; }\n\n.fa-life-ring:before {\n  content: \"\\f1cd\"; }\n\n.fa-lightbulb:before {\n  content: \"\\f0eb\"; }\n\n.fa-line:before {\n  content: \"\\f3c0\"; }\n\n.fa-link:before {\n  content: \"\\f0c1\"; }\n\n.fa-linkedin:before {\n  content: \"\\f08c\"; }\n\n.fa-linkedin-in:before {\n  content: \"\\f0e1\"; }\n\n.fa-linode:before {\n  content: \"\\f2b8\"; }\n\n.fa-linux:before {\n  content: \"\\f17c\"; }\n\n.fa-lira-sign:before {\n  content: \"\\f195\"; }\n\n.fa-list:before {\n  content: \"\\f03a\"; }\n\n.fa-list-alt:before {\n  content: \"\\f022\"; }\n\n.fa-list-ol:before {\n  content: \"\\f0cb\"; }\n\n.fa-list-ul:before {\n  content: \"\\f0ca\"; }\n\n.fa-location-arrow:before {\n  content: \"\\f124\"; }\n\n.fa-lock:before {\n  content: \"\\f023\"; }\n\n.fa-lock-open:before {\n  content: \"\\f3c1\"; }\n\n.fa-long-arrow-alt-down:before {\n  content: \"\\f309\"; }\n\n.fa-long-arrow-alt-left:before {\n  content: \"\\f30a\"; }\n\n.fa-long-arrow-alt-right:before {\n  content: \"\\f30b\"; }\n\n.fa-long-arrow-alt-up:before {\n  content: \"\\f30c\"; }\n\n.fa-low-vision:before {\n  content: \"\\f2a8\"; }\n\n.fa-lyft:before {\n  content: \"\\f3c3\"; }\n\n.fa-magento:before {\n  content: \"\\f3c4\"; }\n\n.fa-magic:before {\n  content: \"\\f0d0\"; }\n\n.fa-magnet:before {\n  content: \"\\f076\"; }\n\n.fa-male:before {\n  content: \"\\f183\"; }\n\n.fa-map:before {\n  content: \"\\f279\"; }\n\n.fa-map-marker:before {\n  content: \"\\f041\"; }\n\n.fa-map-marker-alt:before {\n  content: \"\\f3c5\"; }\n\n.fa-map-pin:before {\n  content: \"\\f276\"; }\n\n.fa-map-signs:before {\n  content: \"\\f277\"; }\n\n.fa-mars:before {\n  content: \"\\f222\"; }\n\n.fa-mars-double:before {\n  content: \"\\f227\"; }\n\n.fa-mars-stroke:before {\n  content: \"\\f229\"; }\n\n.fa-mars-stroke-h:before {\n  content: \"\\f22b\"; }\n\n.fa-mars-stroke-v:before {\n  content: \"\\f22a\"; }\n\n.fa-maxcdn:before {\n  content: \"\\f136\"; }\n\n.fa-medapps:before {\n  content: \"\\f3c6\"; }\n\n.fa-medium:before {\n  content: \"\\f23a\"; }\n\n.fa-medium-m:before {\n  content: \"\\f3c7\"; }\n\n.fa-medkit:before {\n  content: \"\\f0fa\"; }\n\n.fa-medrt:before {\n  content: \"\\f3c8\"; }\n\n.fa-meetup:before {\n  content: \"\\f2e0\"; }\n\n.fa-meh:before {\n  content: \"\\f11a\"; }\n\n.fa-mercury:before {\n  content: \"\\f223\"; }\n\n.fa-microchip:before {\n  content: \"\\f2db\"; }\n\n.fa-microphone:before {\n  content: \"\\f130\"; }\n\n.fa-microphone-slash:before {\n  content: \"\\f131\"; }\n\n.fa-microsoft:before {\n  content: \"\\f3ca\"; }\n\n.fa-minus:before {\n  content: \"\\f068\"; }\n\n.fa-minus-circle:before {\n  content: \"\\f056\"; }\n\n.fa-minus-square:before {\n  content: \"\\f146\"; }\n\n.fa-mix:before {\n  content: \"\\f3cb\"; }\n\n.fa-mixcloud:before {\n  content: \"\\f289\"; }\n\n.fa-mizuni:before {\n  content: \"\\f3cc\"; }\n\n.fa-mobile:before {\n  content: \"\\f10b\"; }\n\n.fa-mobile-alt:before {\n  content: \"\\f3cd\"; }\n\n.fa-modx:before {\n  content: \"\\f285\"; }\n\n.fa-monero:before {\n  content: \"\\f3d0\"; }\n\n.fa-money-bill-alt:before {\n  content: \"\\f3d1\"; }\n\n.fa-moon:before {\n  content: \"\\f186\"; }\n\n.fa-motorcycle:before {\n  content: \"\\f21c\"; }\n\n.fa-mouse-pointer:before {\n  content: \"\\f245\"; }\n\n.fa-music:before {\n  content: \"\\f001\"; }\n\n.fa-napster:before {\n  content: \"\\f3d2\"; }\n\n.fa-neuter:before {\n  content: \"\\f22c\"; }\n\n.fa-newspaper:before {\n  content: \"\\f1ea\"; }\n\n.fa-nintendo-switch:before {\n  content: \"\\f418\"; }\n\n.fa-node:before {\n  content: \"\\f419\"; }\n\n.fa-node-js:before {\n  content: \"\\f3d3\"; }\n\n.fa-npm:before {\n  content: \"\\f3d4\"; }\n\n.fa-ns8:before {\n  content: \"\\f3d5\"; }\n\n.fa-nutritionix:before {\n  content: \"\\f3d6\"; }\n\n.fa-object-group:before {\n  content: \"\\f247\"; }\n\n.fa-object-ungroup:before {\n  content: \"\\f248\"; }\n\n.fa-odnoklassniki:before {\n  content: \"\\f263\"; }\n\n.fa-odnoklassniki-square:before {\n  content: \"\\f264\"; }\n\n.fa-opencart:before {\n  content: \"\\f23d\"; }\n\n.fa-openid:before {\n  content: \"\\f19b\"; }\n\n.fa-opera:before {\n  content: \"\\f26a\"; }\n\n.fa-optin-monster:before {\n  content: \"\\f23c\"; }\n\n.fa-osi:before {\n  content: \"\\f41a\"; }\n\n.fa-outdent:before {\n  content: \"\\f03b\"; }\n\n.fa-page4:before {\n  content: \"\\f3d7\"; }\n\n.fa-pagelines:before {\n  content: \"\\f18c\"; }\n\n.fa-paint-brush:before {\n  content: \"\\f1fc\"; }\n\n.fa-palfed:before {\n  content: \"\\f3d8\"; }\n\n.fa-pallet:before {\n  content: \"\\f482\"; }\n\n.fa-paper-plane:before {\n  content: \"\\f1d8\"; }\n\n.fa-paperclip:before {\n  content: \"\\f0c6\"; }\n\n.fa-paragraph:before {\n  content: \"\\f1dd\"; }\n\n.fa-paste:before {\n  content: \"\\f0ea\"; }\n\n.fa-patreon:before {\n  content: \"\\f3d9\"; }\n\n.fa-pause:before {\n  content: \"\\f04c\"; }\n\n.fa-pause-circle:before {\n  content: \"\\f28b\"; }\n\n.fa-paw:before {\n  content: \"\\f1b0\"; }\n\n.fa-paypal:before {\n  content: \"\\f1ed\"; }\n\n.fa-pen-square:before {\n  content: \"\\f14b\"; }\n\n.fa-pencil-alt:before {\n  content: \"\\f303\"; }\n\n.fa-percent:before {\n  content: \"\\f295\"; }\n\n.fa-periscope:before {\n  content: \"\\f3da\"; }\n\n.fa-phabricator:before {\n  content: \"\\f3db\"; }\n\n.fa-phoenix-framework:before {\n  content: \"\\f3dc\"; }\n\n.fa-phone:before {\n  content: \"\\f095\"; }\n\n.fa-phone-square:before {\n  content: \"\\f098\"; }\n\n.fa-phone-volume:before {\n  content: \"\\f2a0\"; }\n\n.fa-php:before {\n  content: \"\\f457\"; }\n\n.fa-pied-piper:before {\n  content: \"\\f2ae\"; }\n\n.fa-pied-piper-alt:before {\n  content: \"\\f1a8\"; }\n\n.fa-pied-piper-pp:before {\n  content: \"\\f1a7\"; }\n\n.fa-pills:before {\n  content: \"\\f484\"; }\n\n.fa-pinterest:before {\n  content: \"\\f0d2\"; }\n\n.fa-pinterest-p:before {\n  content: \"\\f231\"; }\n\n.fa-pinterest-square:before {\n  content: \"\\f0d3\"; }\n\n.fa-plane:before {\n  content: \"\\f072\"; }\n\n.fa-play:before {\n  content: \"\\f04b\"; }\n\n.fa-play-circle:before {\n  content: \"\\f144\"; }\n\n.fa-playstation:before {\n  content: \"\\f3df\"; }\n\n.fa-plug:before {\n  content: \"\\f1e6\"; }\n\n.fa-plus:before {\n  content: \"\\f067\"; }\n\n.fa-plus-circle:before {\n  content: \"\\f055\"; }\n\n.fa-plus-square:before {\n  content: \"\\f0fe\"; }\n\n.fa-podcast:before {\n  content: \"\\f2ce\"; }\n\n.fa-pound-sign:before {\n  content: \"\\f154\"; }\n\n.fa-power-off:before {\n  content: \"\\f011\"; }\n\n.fa-print:before {\n  content: \"\\f02f\"; }\n\n.fa-product-hunt:before {\n  content: \"\\f288\"; }\n\n.fa-pushed:before {\n  content: \"\\f3e1\"; }\n\n.fa-puzzle-piece:before {\n  content: \"\\f12e\"; }\n\n.fa-python:before {\n  content: \"\\f3e2\"; }\n\n.fa-qq:before {\n  content: \"\\f1d6\"; }\n\n.fa-qrcode:before {\n  content: \"\\f029\"; }\n\n.fa-question:before {\n  content: \"\\f128\"; }\n\n.fa-question-circle:before {\n  content: \"\\f059\"; }\n\n.fa-quidditch:before {\n  content: \"\\f458\"; }\n\n.fa-quinscape:before {\n  content: \"\\f459\"; }\n\n.fa-quora:before {\n  content: \"\\f2c4\"; }\n\n.fa-quote-left:before {\n  content: \"\\f10d\"; }\n\n.fa-quote-right:before {\n  content: \"\\f10e\"; }\n\n.fa-random:before {\n  content: \"\\f074\"; }\n\n.fa-ravelry:before {\n  content: \"\\f2d9\"; }\n\n.fa-react:before {\n  content: \"\\f41b\"; }\n\n.fa-rebel:before {\n  content: \"\\f1d0\"; }\n\n.fa-recycle:before {\n  content: \"\\f1b8\"; }\n\n.fa-red-river:before {\n  content: \"\\f3e3\"; }\n\n.fa-reddit:before {\n  content: \"\\f1a1\"; }\n\n.fa-reddit-alien:before {\n  content: \"\\f281\"; }\n\n.fa-reddit-square:before {\n  content: \"\\f1a2\"; }\n\n.fa-redo:before {\n  content: \"\\f01e\"; }\n\n.fa-redo-alt:before {\n  content: \"\\f2f9\"; }\n\n.fa-registered:before {\n  content: \"\\f25d\"; }\n\n.fa-rendact:before {\n  content: \"\\f3e4\"; }\n\n.fa-renren:before {\n  content: \"\\f18b\"; }\n\n.fa-reply:before {\n  content: \"\\f3e5\"; }\n\n.fa-reply-all:before {\n  content: \"\\f122\"; }\n\n.fa-replyd:before {\n  content: \"\\f3e6\"; }\n\n.fa-resolving:before {\n  content: \"\\f3e7\"; }\n\n.fa-retweet:before {\n  content: \"\\f079\"; }\n\n.fa-road:before {\n  content: \"\\f018\"; }\n\n.fa-rocket:before {\n  content: \"\\f135\"; }\n\n.fa-rocketchat:before {\n  content: \"\\f3e8\"; }\n\n.fa-rockrms:before {\n  content: \"\\f3e9\"; }\n\n.fa-rss:before {\n  content: \"\\f09e\"; }\n\n.fa-rss-square:before {\n  content: \"\\f143\"; }\n\n.fa-ruble-sign:before {\n  content: \"\\f158\"; }\n\n.fa-rupee-sign:before {\n  content: \"\\f156\"; }\n\n.fa-safari:before {\n  content: \"\\f267\"; }\n\n.fa-sass:before {\n  content: \"\\f41e\"; }\n\n.fa-save:before {\n  content: \"\\f0c7\"; }\n\n.fa-schlix:before {\n  content: \"\\f3ea\"; }\n\n.fa-scribd:before {\n  content: \"\\f28a\"; }\n\n.fa-search:before {\n  content: \"\\f002\"; }\n\n.fa-search-minus:before {\n  content: \"\\f010\"; }\n\n.fa-search-plus:before {\n  content: \"\\f00e\"; }\n\n.fa-searchengin:before {\n  content: \"\\f3eb\"; }\n\n.fa-sellcast:before {\n  content: \"\\f2da\"; }\n\n.fa-sellsy:before {\n  content: \"\\f213\"; }\n\n.fa-server:before {\n  content: \"\\f233\"; }\n\n.fa-servicestack:before {\n  content: \"\\f3ec\"; }\n\n.fa-share:before {\n  content: \"\\f064\"; }\n\n.fa-share-alt:before {\n  content: \"\\f1e0\"; }\n\n.fa-share-alt-square:before {\n  content: \"\\f1e1\"; }\n\n.fa-share-square:before {\n  content: \"\\f14d\"; }\n\n.fa-shekel-sign:before {\n  content: \"\\f20b\"; }\n\n.fa-shield-alt:before {\n  content: \"\\f3ed\"; }\n\n.fa-ship:before {\n  content: \"\\f21a\"; }\n\n.fa-shipping-fast:before {\n  content: \"\\f48b\"; }\n\n.fa-shirtsinbulk:before {\n  content: \"\\f214\"; }\n\n.fa-shopping-bag:before {\n  content: \"\\f290\"; }\n\n.fa-shopping-basket:before {\n  content: \"\\f291\"; }\n\n.fa-shopping-cart:before {\n  content: \"\\f07a\"; }\n\n.fa-shower:before {\n  content: \"\\f2cc\"; }\n\n.fa-sign-in-alt:before {\n  content: \"\\f2f6\"; }\n\n.fa-sign-language:before {\n  content: \"\\f2a7\"; }\n\n.fa-sign-out-alt:before {\n  content: \"\\f2f5\"; }\n\n.fa-signal:before {\n  content: \"\\f012\"; }\n\n.fa-simplybuilt:before {\n  content: \"\\f215\"; }\n\n.fa-sistrix:before {\n  content: \"\\f3ee\"; }\n\n.fa-sitemap:before {\n  content: \"\\f0e8\"; }\n\n.fa-skyatlas:before {\n  content: \"\\f216\"; }\n\n.fa-skype:before {\n  content: \"\\f17e\"; }\n\n.fa-slack:before {\n  content: \"\\f198\"; }\n\n.fa-slack-hash:before {\n  content: \"\\f3ef\"; }\n\n.fa-sliders-h:before {\n  content: \"\\f1de\"; }\n\n.fa-slideshare:before {\n  content: \"\\f1e7\"; }\n\n.fa-smile:before {\n  content: \"\\f118\"; }\n\n.fa-snapchat:before {\n  content: \"\\f2ab\"; }\n\n.fa-snapchat-ghost:before {\n  content: \"\\f2ac\"; }\n\n.fa-snapchat-square:before {\n  content: \"\\f2ad\"; }\n\n.fa-snowflake:before {\n  content: \"\\f2dc\"; }\n\n.fa-sort:before {\n  content: \"\\f0dc\"; }\n\n.fa-sort-alpha-down:before {\n  content: \"\\f15d\"; }\n\n.fa-sort-alpha-up:before {\n  content: \"\\f15e\"; }\n\n.fa-sort-amount-down:before {\n  content: \"\\f160\"; }\n\n.fa-sort-amount-up:before {\n  content: \"\\f161\"; }\n\n.fa-sort-down:before {\n  content: \"\\f0dd\"; }\n\n.fa-sort-numeric-down:before {\n  content: \"\\f162\"; }\n\n.fa-sort-numeric-up:before {\n  content: \"\\f163\"; }\n\n.fa-sort-up:before {\n  content: \"\\f0de\"; }\n\n.fa-soundcloud:before {\n  content: \"\\f1be\"; }\n\n.fa-space-shuttle:before {\n  content: \"\\f197\"; }\n\n.fa-speakap:before {\n  content: \"\\f3f3\"; }\n\n.fa-spinner:before {\n  content: \"\\f110\"; }\n\n.fa-spotify:before {\n  content: \"\\f1bc\"; }\n\n.fa-square:before {\n  content: \"\\f0c8\"; }\n\n.fa-square-full:before {\n  content: \"\\f45c\"; }\n\n.fa-stack-exchange:before {\n  content: \"\\f18d\"; }\n\n.fa-stack-overflow:before {\n  content: \"\\f16c\"; }\n\n.fa-star:before {\n  content: \"\\f005\"; }\n\n.fa-star-half:before {\n  content: \"\\f089\"; }\n\n.fa-staylinked:before {\n  content: \"\\f3f5\"; }\n\n.fa-steam:before {\n  content: \"\\f1b6\"; }\n\n.fa-steam-square:before {\n  content: \"\\f1b7\"; }\n\n.fa-steam-symbol:before {\n  content: \"\\f3f6\"; }\n\n.fa-step-backward:before {\n  content: \"\\f048\"; }\n\n.fa-step-forward:before {\n  content: \"\\f051\"; }\n\n.fa-stethoscope:before {\n  content: \"\\f0f1\"; }\n\n.fa-sticker-mule:before {\n  content: \"\\f3f7\"; }\n\n.fa-sticky-note:before {\n  content: \"\\f249\"; }\n\n.fa-stop:before {\n  content: \"\\f04d\"; }\n\n.fa-stop-circle:before {\n  content: \"\\f28d\"; }\n\n.fa-stopwatch:before {\n  content: \"\\f2f2\"; }\n\n.fa-strava:before {\n  content: \"\\f428\"; }\n\n.fa-street-view:before {\n  content: \"\\f21d\"; }\n\n.fa-strikethrough:before {\n  content: \"\\f0cc\"; }\n\n.fa-stripe:before {\n  content: \"\\f429\"; }\n\n.fa-stripe-s:before {\n  content: \"\\f42a\"; }\n\n.fa-studiovinari:before {\n  content: \"\\f3f8\"; }\n\n.fa-stumbleupon:before {\n  content: \"\\f1a4\"; }\n\n.fa-stumbleupon-circle:before {\n  content: \"\\f1a3\"; }\n\n.fa-subscript:before {\n  content: \"\\f12c\"; }\n\n.fa-subway:before {\n  content: \"\\f239\"; }\n\n.fa-suitcase:before {\n  content: \"\\f0f2\"; }\n\n.fa-sun:before {\n  content: \"\\f185\"; }\n\n.fa-superpowers:before {\n  content: \"\\f2dd\"; }\n\n.fa-superscript:before {\n  content: \"\\f12b\"; }\n\n.fa-supple:before {\n  content: \"\\f3f9\"; }\n\n.fa-sync:before {\n  content: \"\\f021\"; }\n\n.fa-sync-alt:before {\n  content: \"\\f2f1\"; }\n\n.fa-syringe:before {\n  content: \"\\f48e\"; }\n\n.fa-table:before {\n  content: \"\\f0ce\"; }\n\n.fa-table-tennis:before {\n  content: \"\\f45d\"; }\n\n.fa-tablet:before {\n  content: \"\\f10a\"; }\n\n.fa-tablet-alt:before {\n  content: \"\\f3fa\"; }\n\n.fa-tachometer-alt:before {\n  content: \"\\f3fd\"; }\n\n.fa-tag:before {\n  content: \"\\f02b\"; }\n\n.fa-tags:before {\n  content: \"\\f02c\"; }\n\n.fa-tasks:before {\n  content: \"\\f0ae\"; }\n\n.fa-taxi:before {\n  content: \"\\f1ba\"; }\n\n.fa-telegram:before {\n  content: \"\\f2c6\"; }\n\n.fa-telegram-plane:before {\n  content: \"\\f3fe\"; }\n\n.fa-tencent-weibo:before {\n  content: \"\\f1d5\"; }\n\n.fa-terminal:before {\n  content: \"\\f120\"; }\n\n.fa-text-height:before {\n  content: \"\\f034\"; }\n\n.fa-text-width:before {\n  content: \"\\f035\"; }\n\n.fa-th:before {\n  content: \"\\f00a\"; }\n\n.fa-th-large:before {\n  content: \"\\f009\"; }\n\n.fa-th-list:before {\n  content: \"\\f00b\"; }\n\n.fa-themeisle:before {\n  content: \"\\f2b2\"; }\n\n.fa-thermometer:before {\n  content: \"\\f491\"; }\n\n.fa-thermometer-empty:before {\n  content: \"\\f2cb\"; }\n\n.fa-thermometer-full:before {\n  content: \"\\f2c7\"; }\n\n.fa-thermometer-half:before {\n  content: \"\\f2c9\"; }\n\n.fa-thermometer-quarter:before {\n  content: \"\\f2ca\"; }\n\n.fa-thermometer-three-quarters:before {\n  content: \"\\f2c8\"; }\n\n.fa-thumbs-down:before {\n  content: \"\\f165\"; }\n\n.fa-thumbs-up:before {\n  content: \"\\f164\"; }\n\n.fa-thumbtack:before {\n  content: \"\\f08d\"; }\n\n.fa-ticket-alt:before {\n  content: \"\\f3ff\"; }\n\n.fa-times:before {\n  content: \"\\f00d\"; }\n\n.fa-times-circle:before {\n  content: \"\\f057\"; }\n\n.fa-tint:before {\n  content: \"\\f043\"; }\n\n.fa-toggle-off:before {\n  content: \"\\f204\"; }\n\n.fa-toggle-on:before {\n  content: \"\\f205\"; }\n\n.fa-trademark:before {\n  content: \"\\f25c\"; }\n\n.fa-train:before {\n  content: \"\\f238\"; }\n\n.fa-transgender:before {\n  content: \"\\f224\"; }\n\n.fa-transgender-alt:before {\n  content: \"\\f225\"; }\n\n.fa-trash:before {\n  content: \"\\f1f8\"; }\n\n.fa-trash-alt:before {\n  content: \"\\f2ed\"; }\n\n.fa-tree:before {\n  content: \"\\f1bb\"; }\n\n.fa-trello:before {\n  content: \"\\f181\"; }\n\n.fa-tripadvisor:before {\n  content: \"\\f262\"; }\n\n.fa-trophy:before {\n  content: \"\\f091\"; }\n\n.fa-truck:before {\n  content: \"\\f0d1\"; }\n\n.fa-tty:before {\n  content: \"\\f1e4\"; }\n\n.fa-tumblr:before {\n  content: \"\\f173\"; }\n\n.fa-tumblr-square:before {\n  content: \"\\f174\"; }\n\n.fa-tv:before {\n  content: \"\\f26c\"; }\n\n.fa-twitch:before {\n  content: \"\\f1e8\"; }\n\n.fa-twitter:before {\n  content: \"\\f099\"; }\n\n.fa-twitter-square:before {\n  content: \"\\f081\"; }\n\n.fa-typo3:before {\n  content: \"\\f42b\"; }\n\n.fa-uber:before {\n  content: \"\\f402\"; }\n\n.fa-uikit:before {\n  content: \"\\f403\"; }\n\n.fa-umbrella:before {\n  content: \"\\f0e9\"; }\n\n.fa-underline:before {\n  content: \"\\f0cd\"; }\n\n.fa-undo:before {\n  content: \"\\f0e2\"; }\n\n.fa-undo-alt:before {\n  content: \"\\f2ea\"; }\n\n.fa-uniregistry:before {\n  content: \"\\f404\"; }\n\n.fa-universal-access:before {\n  content: \"\\f29a\"; }\n\n.fa-university:before {\n  content: \"\\f19c\"; }\n\n.fa-unlink:before {\n  content: \"\\f127\"; }\n\n.fa-unlock:before {\n  content: \"\\f09c\"; }\n\n.fa-unlock-alt:before {\n  content: \"\\f13e\"; }\n\n.fa-untappd:before {\n  content: \"\\f405\"; }\n\n.fa-upload:before {\n  content: \"\\f093\"; }\n\n.fa-usb:before {\n  content: \"\\f287\"; }\n\n.fa-user:before {\n  content: \"\\f007\"; }\n\n.fa-user-circle:before {\n  content: \"\\f2bd\"; }\n\n.fa-user-md:before {\n  content: \"\\f0f0\"; }\n\n.fa-user-plus:before {\n  content: \"\\f234\"; }\n\n.fa-user-secret:before {\n  content: \"\\f21b\"; }\n\n.fa-user-times:before {\n  content: \"\\f235\"; }\n\n.fa-users:before {\n  content: \"\\f0c0\"; }\n\n.fa-ussunnah:before {\n  content: \"\\f407\"; }\n\n.fa-utensil-spoon:before {\n  content: \"\\f2e5\"; }\n\n.fa-utensils:before {\n  content: \"\\f2e7\"; }\n\n.fa-vaadin:before {\n  content: \"\\f408\"; }\n\n.fa-venus:before {\n  content: \"\\f221\"; }\n\n.fa-venus-double:before {\n  content: \"\\f226\"; }\n\n.fa-venus-mars:before {\n  content: \"\\f228\"; }\n\n.fa-viacoin:before {\n  content: \"\\f237\"; }\n\n.fa-viadeo:before {\n  content: \"\\f2a9\"; }\n\n.fa-viadeo-square:before {\n  content: \"\\f2aa\"; }\n\n.fa-viber:before {\n  content: \"\\f409\"; }\n\n.fa-video:before {\n  content: \"\\f03d\"; }\n\n.fa-vimeo:before {\n  content: \"\\f40a\"; }\n\n.fa-vimeo-square:before {\n  content: \"\\f194\"; }\n\n.fa-vimeo-v:before {\n  content: \"\\f27d\"; }\n\n.fa-vine:before {\n  content: \"\\f1ca\"; }\n\n.fa-vk:before {\n  content: \"\\f189\"; }\n\n.fa-vnv:before {\n  content: \"\\f40b\"; }\n\n.fa-volleyball-ball:before {\n  content: \"\\f45f\"; }\n\n.fa-volume-down:before {\n  content: \"\\f027\"; }\n\n.fa-volume-off:before {\n  content: \"\\f026\"; }\n\n.fa-volume-up:before {\n  content: \"\\f028\"; }\n\n.fa-vuejs:before {\n  content: \"\\f41f\"; }\n\n.fa-warehouse:before {\n  content: \"\\f494\"; }\n\n.fa-weibo:before {\n  content: \"\\f18a\"; }\n\n.fa-weight:before {\n  content: \"\\f496\"; }\n\n.fa-weixin:before {\n  content: \"\\f1d7\"; }\n\n.fa-whatsapp:before {\n  content: \"\\f232\"; }\n\n.fa-whatsapp-square:before {\n  content: \"\\f40c\"; }\n\n.fa-wheelchair:before {\n  content: \"\\f193\"; }\n\n.fa-whmcs:before {\n  content: \"\\f40d\"; }\n\n.fa-wifi:before {\n  content: \"\\f1eb\"; }\n\n.fa-wikipedia-w:before {\n  content: \"\\f266\"; }\n\n.fa-window-close:before {\n  content: \"\\f410\"; }\n\n.fa-window-maximize:before {\n  content: \"\\f2d0\"; }\n\n.fa-window-minimize:before {\n  content: \"\\f2d1\"; }\n\n.fa-window-restore:before {\n  content: \"\\f2d2\"; }\n\n.fa-windows:before {\n  content: \"\\f17a\"; }\n\n.fa-won-sign:before {\n  content: \"\\f159\"; }\n\n.fa-wordpress:before {\n  content: \"\\f19a\"; }\n\n.fa-wordpress-simple:before {\n  content: \"\\f411\"; }\n\n.fa-wpbeginner:before {\n  content: \"\\f297\"; }\n\n.fa-wpexplorer:before {\n  content: \"\\f2de\"; }\n\n.fa-wpforms:before {\n  content: \"\\f298\"; }\n\n.fa-wrench:before {\n  content: \"\\f0ad\"; }\n\n.fa-xbox:before {\n  content: \"\\f412\"; }\n\n.fa-xing:before {\n  content: \"\\f168\"; }\n\n.fa-xing-square:before {\n  content: \"\\f169\"; }\n\n.fa-y-combinator:before {\n  content: \"\\f23b\"; }\n\n.fa-yahoo:before {\n  content: \"\\f19e\"; }\n\n.fa-yandex:before {\n  content: \"\\f413\"; }\n\n.fa-yandex-international:before {\n  content: \"\\f414\"; }\n\n.fa-yelp:before {\n  content: \"\\f1e9\"; }\n\n.fa-yen-sign:before {\n  content: \"\\f157\"; }\n\n.fa-yoast:before {\n  content: \"\\f2b1\"; }\n\n.fa-youtube:before {\n  content: \"\\f167\"; }\n\n.fa-youtube-square:before {\n  content: \"\\f431\"; }\n\n.sr-only {\n  border: 0;\n  clip: rect(0, 0, 0, 0);\n  height: 1px;\n  margin: -1px;\n  overflow: hidden;\n  padding: 0;\n  position: absolute;\n  width: 1px; }\n\n.sr-only-focusable:active, .sr-only-focusable:focus {\n  clip: auto;\n  height: auto;\n  margin: 0;\n  overflow: visible;\n  position: static;\n  width: auto; }\n@font-face {\n  font-family: 'Font Awesome 5 Brands';\n  font-style: normal;\n  font-weight: normal;\n  src: url(\"../webfonts/fa-brands-400.eot\");\n  src: url(\"../webfonts/fa-brands-400.eot?#iefix\") format(\"embedded-opentype\"), url(\"../webfonts/fa-brands-400.woff2\") format(\"woff2\"), url(\"../webfonts/fa-brands-400.woff\") format(\"woff\"), url(\"../webfonts/fa-brands-400.ttf\") format(\"truetype\"), url(\"../webfonts/fa-brands-400.svg#fontawesome\") format(\"svg\"); }\n\n.fab {\n  font-family: 'Font Awesome 5 Brands'; }\n@font-face {\n  font-family: 'Font Awesome 5 Free';\n  font-style: normal;\n  font-weight: 400;\n  src: url(\"../webfonts/fa-regular-400.eot\");\n  src: url(\"../webfonts/fa-regular-400.eot?#iefix\") format(\"embedded-opentype\"), url(\"../webfonts/fa-regular-400.woff2\") format(\"woff2\"), url(\"../webfonts/fa-regular-400.woff\") format(\"woff\"), url(\"../webfonts/fa-regular-400.ttf\") format(\"truetype\"), url(\"../webfonts/fa-regular-400.svg#fontawesome\") format(\"svg\"); }\n\n.far {\n  font-family: 'Font Awesome 5 Free';\n  font-weight: 400; }\n@font-face {\n  font-family: 'Font Awesome 5 Free';\n  font-style: normal;\n  font-weight: 900;\n  src: url(\"../webfonts/fa-solid-900.eot\");\n  src: url(\"../webfonts/fa-solid-900.eot?#iefix\") format(\"embedded-opentype\"), url(\"../webfonts/fa-solid-900.woff2\") format(\"woff2\"), url(\"../webfonts/fa-solid-900.woff\") format(\"woff\"), url(\"../webfonts/fa-solid-900.ttf\") format(\"truetype\"), url(\"../webfonts/fa-solid-900.svg#fontawesome\") format(\"svg\"); }\n\n.fa,\n.fas {\n  font-family: 'Font Awesome 5 Free';\n  font-weight: 900; }\n"
  },
  {
    "path": "src/sourceDev.WebApp/SharedThemes/simplex/wwwroot/css/site.css",
    "content": "﻿html {\n    position: relative;\n    min-height: 100%;\n}\n\nbody {\n    min-height: 100vh;\n    padding-top: 158px;\n}\n\n\n#newPostLink {\n    position: absolute;\n    top: 170px;\n    right: 0px;\n}\n\n#editPostLink {\n    position: absolute;\n    top: 200px;\n    right: 0px;\n}\n\n#unpublishPostLink {\n    position: absolute;\n    top: 230px !important;\n    right: 0px !important;\n}\n\n#pageManagerLink {\n    position: absolute;\n    top: 170px;\n    right: 0px;\n}\n\n#newPageLink {\n    position: absolute;\n    top: 200px;\n    right: 0px;\n}\n\n#editPageLink {\n    position: absolute;\n    top: 230px;\n    right: 0px\n}\n\n#unpublishPageLink {\n    position: absolute;\n    top: 260px !important;\n    right: 0px !important\n}\n\n#sidenavtoggle {\n    position: absolute;\n    top: 220px;\n    right: 5px;\n}\n\n\n@media screen and (max-width: 812px) {\n    #sidenavtoggle,\n    #sidenavmenu {\n        display: none;\n    }\n}\n\n.flex-fill {\n    flex: 1 1 auto !important;\n}\n\n\n.carousel-caption p {\n    font-size: 20px;\n    line-height: 1.4;\n}\n\n@media screen and (max-width: 768px) {\n    .carousel-caption {\n        display: none\n    }\n}\n\n\n\n\nimg, video, iframe {\n    max-width: 100%;\n}\n\ntd img, video, iframe {\n    max-width: none;\n}\n\n\n\n.table td, .table th {\n    vertical-align: inherit;\n}\n\n/******** jquery smartmenu bootstrap 4 ******/\n/* Carets in collapsible mode (make them look like +/- buttons) */\n.navbar-nav.sm-collapsible .sub-arrow {\n    position: absolute;\n    top: 50%;\n    right: 0;\n    margin: -0.7em 0.5em 0 0;\n    border: 1px solid rgba(0, 0, 0, .1);\n    border-radius: .25rem;\n    padding: 0;\n    width: 2em;\n    height: 1.4em;\n    font-size: 1.25rem;\n    line-height: 1.2em;\n    text-align: center;\n}\n\n    .navbar-nav.sm-collapsible .sub-arrow::before {\n        content: '+';\n    }\n\n.navbar-nav.sm-collapsible .show > a > .sub-arrow::before {\n    content: '-';\n}\n\n.navbar-dark .navbar-nav.sm-collapsible .nav-link .sub-arrow {\n    border-color: rgba(255, 255, 255, .1);\n}\n/* make sure there's room for the carets */\n.navbar-nav.sm-collapsible .has-submenu {\n    padding-right: 3em;\n}\n/* keep the carets properly positioned */\n.navbar-nav.sm-collapsible .nav-link,\n.navbar-nav.sm-collapsible .dropdown-item {\n    position: relative;\n}\n\n\n/* Nav carets in expanded mode */\n.navbar-nav:not(.sm-collapsible) .nav-link .sub-arrow {\n    display: inline-block;\n    width: 0;\n    height: 0;\n    margin-left: .255em;\n    vertical-align: .255em;\n    border-top: .3em solid;\n    border-right: .3em solid transparent;\n    border-left: .3em solid transparent;\n}\n/* point the arrows up for .fixed-bottom navbars */\n.fixed-bottom .navbar-nav:not(.sm-collapsible) .nav-link .sub-arrow,\n.fixed-bottom .navbar-nav:not(.sm-collapsible):not([data-sm-skip]) .dropdown-toggle::after {\n    border-top: 0;\n    border-bottom: .3em solid;\n}\n\n\n/* Dropdown carets in expanded mode */\n.navbar-nav:not(.sm-collapsible) .dropdown-item .sub-arrow,\n.navbar-nav:not(.sm-collapsible):not([data-sm-skip]) .dropdown-menu .dropdown-toggle::after {\n    position: absolute;\n    top: 50%;\n    right: 0;\n    width: 0;\n    height: 0;\n    margin-top: -.3em;\n    margin-right: 1em;\n    border-top: .3em solid transparent;\n    border-bottom: .3em solid transparent;\n    border-left: .3em solid;\n}\n/* make sure there's room for the carets */\n.navbar-nav:not(.sm-collapsible) .dropdown-item.has-submenu {\n    padding-right: 2em;\n}\n\n\n/* Scrolling arrows for tall menus */\n.navbar-nav .scroll-up,\n.navbar-nav .scroll-down {\n    position: absolute;\n    display: none;\n    visibility: hidden;\n    height: 20px;\n    overflow: hidden;\n    text-align: center;\n}\n\n.navbar-nav .scroll-up-arrow,\n.navbar-nav .scroll-down-arrow {\n    position: absolute;\n    top: -2px;\n    left: 50%;\n    margin-left: -8px;\n    width: 0;\n    height: 0;\n    overflow: hidden;\n    border-top: 7px solid transparent;\n    border-right: 7px solid transparent;\n    border-bottom: 7px solid;\n    border-left: 7px solid transparent;\n}\n\n.navbar-nav .scroll-down-arrow {\n    top: 6px;\n    border-top: 7px solid;\n    border-right: 7px solid transparent;\n    border-bottom: 7px solid transparent;\n    border-left: 7px solid transparent;\n}\n\n\n/* Add some spacing for 2+ level sub menus in collapsible mode */\n.navbar-nav.sm-collapsible .dropdown-menu .dropdown-menu {\n    margin: .5em;\n}\n\n\n/* Fix SmartMenus sub menus auto width (subMenusMinWidth/subMenusMaxWidth options) */\n.navbar-nav:not([data-sm-skip]) .dropdown-item {\n    white-space: normal;\n}\n\n.navbar-nav:not(.sm-collapsible) .sm-nowrap > li > .dropdown-item {\n    white-space: nowrap;\n}\n/******** end jquery smart menu bootstrap-4 *****************/\n\n.brand-header {\n    height: 100px;\n}\n\nheader .navbar {\n    top: 100px;\n}\n\n"
  },
  {
    "path": "src/sourceDev.WebApp/SharedThemes/simplex/wwwroot/js/bootstrap.bundle.js",
    "content": "/*!\n  * Bootstrap v5.0.2 (https://getbootstrap.com/)\n  * Copyright 2011-2021 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)\n  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n  */\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n  typeof define === 'function' && define.amd ? define(factory) :\n  (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.bootstrap = factory());\n}(this, (function () { 'use strict';\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): dom/selector-engine.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n  const NODE_TEXT = 3;\n  const SelectorEngine = {\n    find(selector, element = document.documentElement) {\n      return [].concat(...Element.prototype.querySelectorAll.call(element, selector));\n    },\n\n    findOne(selector, element = document.documentElement) {\n      return Element.prototype.querySelector.call(element, selector);\n    },\n\n    children(element, selector) {\n      return [].concat(...element.children).filter(child => child.matches(selector));\n    },\n\n    parents(element, selector) {\n      const parents = [];\n      let ancestor = element.parentNode;\n\n      while (ancestor && ancestor.nodeType === Node.ELEMENT_NODE && ancestor.nodeType !== NODE_TEXT) {\n        if (ancestor.matches(selector)) {\n          parents.push(ancestor);\n        }\n\n        ancestor = ancestor.parentNode;\n      }\n\n      return parents;\n    },\n\n    prev(element, selector) {\n      let previous = element.previousElementSibling;\n\n      while (previous) {\n        if (previous.matches(selector)) {\n          return [previous];\n        }\n\n        previous = previous.previousElementSibling;\n      }\n\n      return [];\n    },\n\n    next(element, selector) {\n      let next = element.nextElementSibling;\n\n      while (next) {\n        if (next.matches(selector)) {\n          return [next];\n        }\n\n        next = next.nextElementSibling;\n      }\n\n      return [];\n    }\n\n  };\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): util/index.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n\n  const MAX_UID = 1000000;\n  const MILLISECONDS_MULTIPLIER = 1000;\n  const TRANSITION_END = 'transitionend'; // Shoutout AngusCroll (https://goo.gl/pxwQGp)\n\n  const toType = obj => {\n    if (obj === null || obj === undefined) {\n      return `${obj}`;\n    }\n\n    return {}.toString.call(obj).match(/\\s([a-z]+)/i)[1].toLowerCase();\n  };\n  /**\n   * --------------------------------------------------------------------------\n   * Public Util Api\n   * --------------------------------------------------------------------------\n   */\n\n\n  const getUID = prefix => {\n    do {\n      prefix += Math.floor(Math.random() * MAX_UID);\n    } while (document.getElementById(prefix));\n\n    return prefix;\n  };\n\n  const getSelector = element => {\n    let selector = element.getAttribute('data-bs-target');\n\n    if (!selector || selector === '#') {\n      let hrefAttr = element.getAttribute('href'); // The only valid content that could double as a selector are IDs or classes,\n      // so everything starting with `#` or `.`. If a \"real\" URL is used as the selector,\n      // `document.querySelector` will rightfully complain it is invalid.\n      // See https://github.com/twbs/bootstrap/issues/32273\n\n      if (!hrefAttr || !hrefAttr.includes('#') && !hrefAttr.startsWith('.')) {\n        return null;\n      } // Just in case some CMS puts out a full URL with the anchor appended\n\n\n      if (hrefAttr.includes('#') && !hrefAttr.startsWith('#')) {\n        hrefAttr = `#${hrefAttr.split('#')[1]}`;\n      }\n\n      selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : null;\n    }\n\n    return selector;\n  };\n\n  const getSelectorFromElement = element => {\n    const selector = getSelector(element);\n\n    if (selector) {\n      return document.querySelector(selector) ? selector : null;\n    }\n\n    return null;\n  };\n\n  const getElementFromSelector = element => {\n    const selector = getSelector(element);\n    return selector ? document.querySelector(selector) : null;\n  };\n\n  const getTransitionDurationFromElement = element => {\n    if (!element) {\n      return 0;\n    } // Get transition-duration of the element\n\n\n    let {\n      transitionDuration,\n      transitionDelay\n    } = window.getComputedStyle(element);\n    const floatTransitionDuration = Number.parseFloat(transitionDuration);\n    const floatTransitionDelay = Number.parseFloat(transitionDelay); // Return 0 if element or transition duration is not found\n\n    if (!floatTransitionDuration && !floatTransitionDelay) {\n      return 0;\n    } // If multiple durations are defined, take the first\n\n\n    transitionDuration = transitionDuration.split(',')[0];\n    transitionDelay = transitionDelay.split(',')[0];\n    return (Number.parseFloat(transitionDuration) + Number.parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER;\n  };\n\n  const triggerTransitionEnd = element => {\n    element.dispatchEvent(new Event(TRANSITION_END));\n  };\n\n  const isElement$1 = obj => {\n    if (!obj || typeof obj !== 'object') {\n      return false;\n    }\n\n    if (typeof obj.jquery !== 'undefined') {\n      obj = obj[0];\n    }\n\n    return typeof obj.nodeType !== 'undefined';\n  };\n\n  const getElement = obj => {\n    if (isElement$1(obj)) {\n      // it's a jQuery object or a node element\n      return obj.jquery ? obj[0] : obj;\n    }\n\n    if (typeof obj === 'string' && obj.length > 0) {\n      return SelectorEngine.findOne(obj);\n    }\n\n    return null;\n  };\n\n  const typeCheckConfig = (componentName, config, configTypes) => {\n    Object.keys(configTypes).forEach(property => {\n      const expectedTypes = configTypes[property];\n      const value = config[property];\n      const valueType = value && isElement$1(value) ? 'element' : toType(value);\n\n      if (!new RegExp(expectedTypes).test(valueType)) {\n        throw new TypeError(`${componentName.toUpperCase()}: Option \"${property}\" provided type \"${valueType}\" but expected type \"${expectedTypes}\".`);\n      }\n    });\n  };\n\n  const isVisible = element => {\n    if (!isElement$1(element) || element.getClientRects().length === 0) {\n      return false;\n    }\n\n    return getComputedStyle(element).getPropertyValue('visibility') === 'visible';\n  };\n\n  const isDisabled = element => {\n    if (!element || element.nodeType !== Node.ELEMENT_NODE) {\n      return true;\n    }\n\n    if (element.classList.contains('disabled')) {\n      return true;\n    }\n\n    if (typeof element.disabled !== 'undefined') {\n      return element.disabled;\n    }\n\n    return element.hasAttribute('disabled') && element.getAttribute('disabled') !== 'false';\n  };\n\n  const findShadowRoot = element => {\n    if (!document.documentElement.attachShadow) {\n      return null;\n    } // Can find the shadow root otherwise it'll return the document\n\n\n    if (typeof element.getRootNode === 'function') {\n      const root = element.getRootNode();\n      return root instanceof ShadowRoot ? root : null;\n    }\n\n    if (element instanceof ShadowRoot) {\n      return element;\n    } // when we don't find a shadow root\n\n\n    if (!element.parentNode) {\n      return null;\n    }\n\n    return findShadowRoot(element.parentNode);\n  };\n\n  const noop = () => {};\n\n  const reflow = element => element.offsetHeight;\n\n  const getjQuery = () => {\n    const {\n      jQuery\n    } = window;\n\n    if (jQuery && !document.body.hasAttribute('data-bs-no-jquery')) {\n      return jQuery;\n    }\n\n    return null;\n  };\n\n  const DOMContentLoadedCallbacks = [];\n\n  const onDOMContentLoaded = callback => {\n    if (document.readyState === 'loading') {\n      // add listener on the first call when the document is in loading state\n      if (!DOMContentLoadedCallbacks.length) {\n        document.addEventListener('DOMContentLoaded', () => {\n          DOMContentLoadedCallbacks.forEach(callback => callback());\n        });\n      }\n\n      DOMContentLoadedCallbacks.push(callback);\n    } else {\n      callback();\n    }\n  };\n\n  const isRTL = () => document.documentElement.dir === 'rtl';\n\n  const defineJQueryPlugin = plugin => {\n    onDOMContentLoaded(() => {\n      const $ = getjQuery();\n      /* istanbul ignore if */\n\n      if ($) {\n        const name = plugin.NAME;\n        const JQUERY_NO_CONFLICT = $.fn[name];\n        $.fn[name] = plugin.jQueryInterface;\n        $.fn[name].Constructor = plugin;\n\n        $.fn[name].noConflict = () => {\n          $.fn[name] = JQUERY_NO_CONFLICT;\n          return plugin.jQueryInterface;\n        };\n      }\n    });\n  };\n\n  const execute = callback => {\n    if (typeof callback === 'function') {\n      callback();\n    }\n  };\n\n  const executeAfterTransition = (callback, transitionElement, waitForTransition = true) => {\n    if (!waitForTransition) {\n      execute(callback);\n      return;\n    }\n\n    const durationPadding = 5;\n    const emulatedDuration = getTransitionDurationFromElement(transitionElement) + durationPadding;\n    let called = false;\n\n    const handler = ({\n      target\n    }) => {\n      if (target !== transitionElement) {\n        return;\n      }\n\n      called = true;\n      transitionElement.removeEventListener(TRANSITION_END, handler);\n      execute(callback);\n    };\n\n    transitionElement.addEventListener(TRANSITION_END, handler);\n    setTimeout(() => {\n      if (!called) {\n        triggerTransitionEnd(transitionElement);\n      }\n    }, emulatedDuration);\n  };\n  /**\n   * Return the previous/next element of a list.\n   *\n   * @param {array} list    The list of elements\n   * @param activeElement   The active element\n   * @param shouldGetNext   Choose to get next or previous element\n   * @param isCycleAllowed\n   * @return {Element|elem} The proper element\n   */\n\n\n  const getNextActiveElement = (list, activeElement, shouldGetNext, isCycleAllowed) => {\n    let index = list.indexOf(activeElement); // if the element does not exist in the list return an element depending on the direction and if cycle is allowed\n\n    if (index === -1) {\n      return list[!shouldGetNext && isCycleAllowed ? list.length - 1 : 0];\n    }\n\n    const listLength = list.length;\n    index += shouldGetNext ? 1 : -1;\n\n    if (isCycleAllowed) {\n      index = (index + listLength) % listLength;\n    }\n\n    return list[Math.max(0, Math.min(index, listLength - 1))];\n  };\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): dom/event-handler.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const namespaceRegex = /[^.]*(?=\\..*)\\.|.*/;\n  const stripNameRegex = /\\..*/;\n  const stripUidRegex = /::\\d+$/;\n  const eventRegistry = {}; // Events storage\n\n  let uidEvent = 1;\n  const customEvents = {\n    mouseenter: 'mouseover',\n    mouseleave: 'mouseout'\n  };\n  const customEventsRegex = /^(mouseenter|mouseleave)/i;\n  const nativeEvents = new Set(['click', 'dblclick', 'mouseup', 'mousedown', 'contextmenu', 'mousewheel', 'DOMMouseScroll', 'mouseover', 'mouseout', 'mousemove', 'selectstart', 'selectend', 'keydown', 'keypress', 'keyup', 'orientationchange', 'touchstart', 'touchmove', 'touchend', 'touchcancel', 'pointerdown', 'pointermove', 'pointerup', 'pointerleave', 'pointercancel', 'gesturestart', 'gesturechange', 'gestureend', 'focus', 'blur', 'change', 'reset', 'select', 'submit', 'focusin', 'focusout', 'load', 'unload', 'beforeunload', 'resize', 'move', 'DOMContentLoaded', 'readystatechange', 'error', 'abort', 'scroll']);\n  /**\n   * ------------------------------------------------------------------------\n   * Private methods\n   * ------------------------------------------------------------------------\n   */\n\n  function getUidEvent(element, uid) {\n    return uid && `${uid}::${uidEvent++}` || element.uidEvent || uidEvent++;\n  }\n\n  function getEvent(element) {\n    const uid = getUidEvent(element);\n    element.uidEvent = uid;\n    eventRegistry[uid] = eventRegistry[uid] || {};\n    return eventRegistry[uid];\n  }\n\n  function bootstrapHandler(element, fn) {\n    return function handler(event) {\n      event.delegateTarget = element;\n\n      if (handler.oneOff) {\n        EventHandler.off(element, event.type, fn);\n      }\n\n      return fn.apply(element, [event]);\n    };\n  }\n\n  function bootstrapDelegationHandler(element, selector, fn) {\n    return function handler(event) {\n      const domElements = element.querySelectorAll(selector);\n\n      for (let {\n        target\n      } = event; target && target !== this; target = target.parentNode) {\n        for (let i = domElements.length; i--;) {\n          if (domElements[i] === target) {\n            event.delegateTarget = target;\n\n            if (handler.oneOff) {\n              // eslint-disable-next-line unicorn/consistent-destructuring\n              EventHandler.off(element, event.type, selector, fn);\n            }\n\n            return fn.apply(target, [event]);\n          }\n        }\n      } // To please ESLint\n\n\n      return null;\n    };\n  }\n\n  function findHandler(events, handler, delegationSelector = null) {\n    const uidEventList = Object.keys(events);\n\n    for (let i = 0, len = uidEventList.length; i < len; i++) {\n      const event = events[uidEventList[i]];\n\n      if (event.originalHandler === handler && event.delegationSelector === delegationSelector) {\n        return event;\n      }\n    }\n\n    return null;\n  }\n\n  function normalizeParams(originalTypeEvent, handler, delegationFn) {\n    const delegation = typeof handler === 'string';\n    const originalHandler = delegation ? delegationFn : handler;\n    let typeEvent = getTypeEvent(originalTypeEvent);\n    const isNative = nativeEvents.has(typeEvent);\n\n    if (!isNative) {\n      typeEvent = originalTypeEvent;\n    }\n\n    return [delegation, originalHandler, typeEvent];\n  }\n\n  function addHandler(element, originalTypeEvent, handler, delegationFn, oneOff) {\n    if (typeof originalTypeEvent !== 'string' || !element) {\n      return;\n    }\n\n    if (!handler) {\n      handler = delegationFn;\n      delegationFn = null;\n    } // in case of mouseenter or mouseleave wrap the handler within a function that checks for its DOM position\n    // this prevents the handler from being dispatched the same way as mouseover or mouseout does\n\n\n    if (customEventsRegex.test(originalTypeEvent)) {\n      const wrapFn = fn => {\n        return function (event) {\n          if (!event.relatedTarget || event.relatedTarget !== event.delegateTarget && !event.delegateTarget.contains(event.relatedTarget)) {\n            return fn.call(this, event);\n          }\n        };\n      };\n\n      if (delegationFn) {\n        delegationFn = wrapFn(delegationFn);\n      } else {\n        handler = wrapFn(handler);\n      }\n    }\n\n    const [delegation, originalHandler, typeEvent] = normalizeParams(originalTypeEvent, handler, delegationFn);\n    const events = getEvent(element);\n    const handlers = events[typeEvent] || (events[typeEvent] = {});\n    const previousFn = findHandler(handlers, originalHandler, delegation ? handler : null);\n\n    if (previousFn) {\n      previousFn.oneOff = previousFn.oneOff && oneOff;\n      return;\n    }\n\n    const uid = getUidEvent(originalHandler, originalTypeEvent.replace(namespaceRegex, ''));\n    const fn = delegation ? bootstrapDelegationHandler(element, handler, delegationFn) : bootstrapHandler(element, handler);\n    fn.delegationSelector = delegation ? handler : null;\n    fn.originalHandler = originalHandler;\n    fn.oneOff = oneOff;\n    fn.uidEvent = uid;\n    handlers[uid] = fn;\n    element.addEventListener(typeEvent, fn, delegation);\n  }\n\n  function removeHandler(element, events, typeEvent, handler, delegationSelector) {\n    const fn = findHandler(events[typeEvent], handler, delegationSelector);\n\n    if (!fn) {\n      return;\n    }\n\n    element.removeEventListener(typeEvent, fn, Boolean(delegationSelector));\n    delete events[typeEvent][fn.uidEvent];\n  }\n\n  function removeNamespacedHandlers(element, events, typeEvent, namespace) {\n    const storeElementEvent = events[typeEvent] || {};\n    Object.keys(storeElementEvent).forEach(handlerKey => {\n      if (handlerKey.includes(namespace)) {\n        const event = storeElementEvent[handlerKey];\n        removeHandler(element, events, typeEvent, event.originalHandler, event.delegationSelector);\n      }\n    });\n  }\n\n  function getTypeEvent(event) {\n    // allow to get the native events from namespaced events ('click.bs.button' --> 'click')\n    event = event.replace(stripNameRegex, '');\n    return customEvents[event] || event;\n  }\n\n  const EventHandler = {\n    on(element, event, handler, delegationFn) {\n      addHandler(element, event, handler, delegationFn, false);\n    },\n\n    one(element, event, handler, delegationFn) {\n      addHandler(element, event, handler, delegationFn, true);\n    },\n\n    off(element, originalTypeEvent, handler, delegationFn) {\n      if (typeof originalTypeEvent !== 'string' || !element) {\n        return;\n      }\n\n      const [delegation, originalHandler, typeEvent] = normalizeParams(originalTypeEvent, handler, delegationFn);\n      const inNamespace = typeEvent !== originalTypeEvent;\n      const events = getEvent(element);\n      const isNamespace = originalTypeEvent.startsWith('.');\n\n      if (typeof originalHandler !== 'undefined') {\n        // Simplest case: handler is passed, remove that listener ONLY.\n        if (!events || !events[typeEvent]) {\n          return;\n        }\n\n        removeHandler(element, events, typeEvent, originalHandler, delegation ? handler : null);\n        return;\n      }\n\n      if (isNamespace) {\n        Object.keys(events).forEach(elementEvent => {\n          removeNamespacedHandlers(element, events, elementEvent, originalTypeEvent.slice(1));\n        });\n      }\n\n      const storeElementEvent = events[typeEvent] || {};\n      Object.keys(storeElementEvent).forEach(keyHandlers => {\n        const handlerKey = keyHandlers.replace(stripUidRegex, '');\n\n        if (!inNamespace || originalTypeEvent.includes(handlerKey)) {\n          const event = storeElementEvent[keyHandlers];\n          removeHandler(element, events, typeEvent, event.originalHandler, event.delegationSelector);\n        }\n      });\n    },\n\n    trigger(element, event, args) {\n      if (typeof event !== 'string' || !element) {\n        return null;\n      }\n\n      const $ = getjQuery();\n      const typeEvent = getTypeEvent(event);\n      const inNamespace = event !== typeEvent;\n      const isNative = nativeEvents.has(typeEvent);\n      let jQueryEvent;\n      let bubbles = true;\n      let nativeDispatch = true;\n      let defaultPrevented = false;\n      let evt = null;\n\n      if (inNamespace && $) {\n        jQueryEvent = $.Event(event, args);\n        $(element).trigger(jQueryEvent);\n        bubbles = !jQueryEvent.isPropagationStopped();\n        nativeDispatch = !jQueryEvent.isImmediatePropagationStopped();\n        defaultPrevented = jQueryEvent.isDefaultPrevented();\n      }\n\n      if (isNative) {\n        evt = document.createEvent('HTMLEvents');\n        evt.initEvent(typeEvent, bubbles, true);\n      } else {\n        evt = new CustomEvent(event, {\n          bubbles,\n          cancelable: true\n        });\n      } // merge custom information in our event\n\n\n      if (typeof args !== 'undefined') {\n        Object.keys(args).forEach(key => {\n          Object.defineProperty(evt, key, {\n            get() {\n              return args[key];\n            }\n\n          });\n        });\n      }\n\n      if (defaultPrevented) {\n        evt.preventDefault();\n      }\n\n      if (nativeDispatch) {\n        element.dispatchEvent(evt);\n      }\n\n      if (evt.defaultPrevented && typeof jQueryEvent !== 'undefined') {\n        jQueryEvent.preventDefault();\n      }\n\n      return evt;\n    }\n\n  };\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): dom/data.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n  const elementMap = new Map();\n  var Data = {\n    set(element, key, instance) {\n      if (!elementMap.has(element)) {\n        elementMap.set(element, new Map());\n      }\n\n      const instanceMap = elementMap.get(element); // make it clear we only want one instance per element\n      // can be removed later when multiple key/instances are fine to be used\n\n      if (!instanceMap.has(key) && instanceMap.size !== 0) {\n        // eslint-disable-next-line no-console\n        console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(instanceMap.keys())[0]}.`);\n        return;\n      }\n\n      instanceMap.set(key, instance);\n    },\n\n    get(element, key) {\n      if (elementMap.has(element)) {\n        return elementMap.get(element).get(key) || null;\n      }\n\n      return null;\n    },\n\n    remove(element, key) {\n      if (!elementMap.has(element)) {\n        return;\n      }\n\n      const instanceMap = elementMap.get(element);\n      instanceMap.delete(key); // free up element references if there are no instances left for an element\n\n      if (instanceMap.size === 0) {\n        elementMap.delete(element);\n      }\n    }\n\n  };\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): base-component.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const VERSION = '5.0.2';\n\n  class BaseComponent {\n    constructor(element) {\n      element = getElement(element);\n\n      if (!element) {\n        return;\n      }\n\n      this._element = element;\n      Data.set(this._element, this.constructor.DATA_KEY, this);\n    }\n\n    dispose() {\n      Data.remove(this._element, this.constructor.DATA_KEY);\n      EventHandler.off(this._element, this.constructor.EVENT_KEY);\n      Object.getOwnPropertyNames(this).forEach(propertyName => {\n        this[propertyName] = null;\n      });\n    }\n\n    _queueCallback(callback, element, isAnimated = true) {\n      executeAfterTransition(callback, element, isAnimated);\n    }\n    /** Static */\n\n\n    static getInstance(element) {\n      return Data.get(element, this.DATA_KEY);\n    }\n\n    static getOrCreateInstance(element, config = {}) {\n      return this.getInstance(element) || new this(element, typeof config === 'object' ? config : null);\n    }\n\n    static get VERSION() {\n      return VERSION;\n    }\n\n    static get NAME() {\n      throw new Error('You have to implement the static method \"NAME\", for each component!');\n    }\n\n    static get DATA_KEY() {\n      return `bs.${this.NAME}`;\n    }\n\n    static get EVENT_KEY() {\n      return `.${this.DATA_KEY}`;\n    }\n\n  }\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): alert.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$c = 'alert';\n  const DATA_KEY$b = 'bs.alert';\n  const EVENT_KEY$b = `.${DATA_KEY$b}`;\n  const DATA_API_KEY$8 = '.data-api';\n  const SELECTOR_DISMISS = '[data-bs-dismiss=\"alert\"]';\n  const EVENT_CLOSE = `close${EVENT_KEY$b}`;\n  const EVENT_CLOSED = `closed${EVENT_KEY$b}`;\n  const EVENT_CLICK_DATA_API$7 = `click${EVENT_KEY$b}${DATA_API_KEY$8}`;\n  const CLASS_NAME_ALERT = 'alert';\n  const CLASS_NAME_FADE$6 = 'fade';\n  const CLASS_NAME_SHOW$9 = 'show';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Alert extends BaseComponent {\n    // Getters\n    static get NAME() {\n      return NAME$c;\n    } // Public\n\n\n    close(element) {\n      const rootElement = element ? this._getRootElement(element) : this._element;\n\n      const customEvent = this._triggerCloseEvent(rootElement);\n\n      if (customEvent === null || customEvent.defaultPrevented) {\n        return;\n      }\n\n      this._removeElement(rootElement);\n    } // Private\n\n\n    _getRootElement(element) {\n      return getElementFromSelector(element) || element.closest(`.${CLASS_NAME_ALERT}`);\n    }\n\n    _triggerCloseEvent(element) {\n      return EventHandler.trigger(element, EVENT_CLOSE);\n    }\n\n    _removeElement(element) {\n      element.classList.remove(CLASS_NAME_SHOW$9);\n      const isAnimated = element.classList.contains(CLASS_NAME_FADE$6);\n\n      this._queueCallback(() => this._destroyElement(element), element, isAnimated);\n    }\n\n    _destroyElement(element) {\n      element.remove();\n      EventHandler.trigger(element, EVENT_CLOSED);\n    } // Static\n\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = Alert.getOrCreateInstance(this);\n\n        if (config === 'close') {\n          data[config](this);\n        }\n      });\n    }\n\n    static handleDismiss(alertInstance) {\n      return function (event) {\n        if (event) {\n          event.preventDefault();\n        }\n\n        alertInstance.close(this);\n      };\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(document, EVENT_CLICK_DATA_API$7, SELECTOR_DISMISS, Alert.handleDismiss(new Alert()));\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Alert to jQuery only if jQuery is present\n   */\n\n  defineJQueryPlugin(Alert);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): button.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$b = 'button';\n  const DATA_KEY$a = 'bs.button';\n  const EVENT_KEY$a = `.${DATA_KEY$a}`;\n  const DATA_API_KEY$7 = '.data-api';\n  const CLASS_NAME_ACTIVE$3 = 'active';\n  const SELECTOR_DATA_TOGGLE$5 = '[data-bs-toggle=\"button\"]';\n  const EVENT_CLICK_DATA_API$6 = `click${EVENT_KEY$a}${DATA_API_KEY$7}`;\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Button extends BaseComponent {\n    // Getters\n    static get NAME() {\n      return NAME$b;\n    } // Public\n\n\n    toggle() {\n      // Toggle class and sync the `aria-pressed` attribute with the return value of the `.toggle()` method\n      this._element.setAttribute('aria-pressed', this._element.classList.toggle(CLASS_NAME_ACTIVE$3));\n    } // Static\n\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = Button.getOrCreateInstance(this);\n\n        if (config === 'toggle') {\n          data[config]();\n        }\n      });\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(document, EVENT_CLICK_DATA_API$6, SELECTOR_DATA_TOGGLE$5, event => {\n    event.preventDefault();\n    const button = event.target.closest(SELECTOR_DATA_TOGGLE$5);\n    const data = Button.getOrCreateInstance(button);\n    data.toggle();\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Button to jQuery only if jQuery is present\n   */\n\n  defineJQueryPlugin(Button);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): dom/manipulator.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  function normalizeData(val) {\n    if (val === 'true') {\n      return true;\n    }\n\n    if (val === 'false') {\n      return false;\n    }\n\n    if (val === Number(val).toString()) {\n      return Number(val);\n    }\n\n    if (val === '' || val === 'null') {\n      return null;\n    }\n\n    return val;\n  }\n\n  function normalizeDataKey(key) {\n    return key.replace(/[A-Z]/g, chr => `-${chr.toLowerCase()}`);\n  }\n\n  const Manipulator = {\n    setDataAttribute(element, key, value) {\n      element.setAttribute(`data-bs-${normalizeDataKey(key)}`, value);\n    },\n\n    removeDataAttribute(element, key) {\n      element.removeAttribute(`data-bs-${normalizeDataKey(key)}`);\n    },\n\n    getDataAttributes(element) {\n      if (!element) {\n        return {};\n      }\n\n      const attributes = {};\n      Object.keys(element.dataset).filter(key => key.startsWith('bs')).forEach(key => {\n        let pureKey = key.replace(/^bs/, '');\n        pureKey = pureKey.charAt(0).toLowerCase() + pureKey.slice(1, pureKey.length);\n        attributes[pureKey] = normalizeData(element.dataset[key]);\n      });\n      return attributes;\n    },\n\n    getDataAttribute(element, key) {\n      return normalizeData(element.getAttribute(`data-bs-${normalizeDataKey(key)}`));\n    },\n\n    offset(element) {\n      const rect = element.getBoundingClientRect();\n      return {\n        top: rect.top + document.body.scrollTop,\n        left: rect.left + document.body.scrollLeft\n      };\n    },\n\n    position(element) {\n      return {\n        top: element.offsetTop,\n        left: element.offsetLeft\n      };\n    }\n\n  };\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): carousel.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$a = 'carousel';\n  const DATA_KEY$9 = 'bs.carousel';\n  const EVENT_KEY$9 = `.${DATA_KEY$9}`;\n  const DATA_API_KEY$6 = '.data-api';\n  const ARROW_LEFT_KEY = 'ArrowLeft';\n  const ARROW_RIGHT_KEY = 'ArrowRight';\n  const TOUCHEVENT_COMPAT_WAIT = 500; // Time for mouse compat events to fire after touch\n\n  const SWIPE_THRESHOLD = 40;\n  const Default$9 = {\n    interval: 5000,\n    keyboard: true,\n    slide: false,\n    pause: 'hover',\n    wrap: true,\n    touch: true\n  };\n  const DefaultType$9 = {\n    interval: '(number|boolean)',\n    keyboard: 'boolean',\n    slide: '(boolean|string)',\n    pause: '(string|boolean)',\n    wrap: 'boolean',\n    touch: 'boolean'\n  };\n  const ORDER_NEXT = 'next';\n  const ORDER_PREV = 'prev';\n  const DIRECTION_LEFT = 'left';\n  const DIRECTION_RIGHT = 'right';\n  const KEY_TO_DIRECTION = {\n    [ARROW_LEFT_KEY]: DIRECTION_RIGHT,\n    [ARROW_RIGHT_KEY]: DIRECTION_LEFT\n  };\n  const EVENT_SLIDE = `slide${EVENT_KEY$9}`;\n  const EVENT_SLID = `slid${EVENT_KEY$9}`;\n  const EVENT_KEYDOWN = `keydown${EVENT_KEY$9}`;\n  const EVENT_MOUSEENTER = `mouseenter${EVENT_KEY$9}`;\n  const EVENT_MOUSELEAVE = `mouseleave${EVENT_KEY$9}`;\n  const EVENT_TOUCHSTART = `touchstart${EVENT_KEY$9}`;\n  const EVENT_TOUCHMOVE = `touchmove${EVENT_KEY$9}`;\n  const EVENT_TOUCHEND = `touchend${EVENT_KEY$9}`;\n  const EVENT_POINTERDOWN = `pointerdown${EVENT_KEY$9}`;\n  const EVENT_POINTERUP = `pointerup${EVENT_KEY$9}`;\n  const EVENT_DRAG_START = `dragstart${EVENT_KEY$9}`;\n  const EVENT_LOAD_DATA_API$2 = `load${EVENT_KEY$9}${DATA_API_KEY$6}`;\n  const EVENT_CLICK_DATA_API$5 = `click${EVENT_KEY$9}${DATA_API_KEY$6}`;\n  const CLASS_NAME_CAROUSEL = 'carousel';\n  const CLASS_NAME_ACTIVE$2 = 'active';\n  const CLASS_NAME_SLIDE = 'slide';\n  const CLASS_NAME_END = 'carousel-item-end';\n  const CLASS_NAME_START = 'carousel-item-start';\n  const CLASS_NAME_NEXT = 'carousel-item-next';\n  const CLASS_NAME_PREV = 'carousel-item-prev';\n  const CLASS_NAME_POINTER_EVENT = 'pointer-event';\n  const SELECTOR_ACTIVE$1 = '.active';\n  const SELECTOR_ACTIVE_ITEM = '.active.carousel-item';\n  const SELECTOR_ITEM = '.carousel-item';\n  const SELECTOR_ITEM_IMG = '.carousel-item img';\n  const SELECTOR_NEXT_PREV = '.carousel-item-next, .carousel-item-prev';\n  const SELECTOR_INDICATORS = '.carousel-indicators';\n  const SELECTOR_INDICATOR = '[data-bs-target]';\n  const SELECTOR_DATA_SLIDE = '[data-bs-slide], [data-bs-slide-to]';\n  const SELECTOR_DATA_RIDE = '[data-bs-ride=\"carousel\"]';\n  const POINTER_TYPE_TOUCH = 'touch';\n  const POINTER_TYPE_PEN = 'pen';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Carousel extends BaseComponent {\n    constructor(element, config) {\n      super(element);\n      this._items = null;\n      this._interval = null;\n      this._activeElement = null;\n      this._isPaused = false;\n      this._isSliding = false;\n      this.touchTimeout = null;\n      this.touchStartX = 0;\n      this.touchDeltaX = 0;\n      this._config = this._getConfig(config);\n      this._indicatorsElement = SelectorEngine.findOne(SELECTOR_INDICATORS, this._element);\n      this._touchSupported = 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0;\n      this._pointerEvent = Boolean(window.PointerEvent);\n\n      this._addEventListeners();\n    } // Getters\n\n\n    static get Default() {\n      return Default$9;\n    }\n\n    static get NAME() {\n      return NAME$a;\n    } // Public\n\n\n    next() {\n      this._slide(ORDER_NEXT);\n    }\n\n    nextWhenVisible() {\n      // Don't call next when the page isn't visible\n      // or the carousel or its parent isn't visible\n      if (!document.hidden && isVisible(this._element)) {\n        this.next();\n      }\n    }\n\n    prev() {\n      this._slide(ORDER_PREV);\n    }\n\n    pause(event) {\n      if (!event) {\n        this._isPaused = true;\n      }\n\n      if (SelectorEngine.findOne(SELECTOR_NEXT_PREV, this._element)) {\n        triggerTransitionEnd(this._element);\n        this.cycle(true);\n      }\n\n      clearInterval(this._interval);\n      this._interval = null;\n    }\n\n    cycle(event) {\n      if (!event) {\n        this._isPaused = false;\n      }\n\n      if (this._interval) {\n        clearInterval(this._interval);\n        this._interval = null;\n      }\n\n      if (this._config && this._config.interval && !this._isPaused) {\n        this._updateInterval();\n\n        this._interval = setInterval((document.visibilityState ? this.nextWhenVisible : this.next).bind(this), this._config.interval);\n      }\n    }\n\n    to(index) {\n      this._activeElement = SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element);\n\n      const activeIndex = this._getItemIndex(this._activeElement);\n\n      if (index > this._items.length - 1 || index < 0) {\n        return;\n      }\n\n      if (this._isSliding) {\n        EventHandler.one(this._element, EVENT_SLID, () => this.to(index));\n        return;\n      }\n\n      if (activeIndex === index) {\n        this.pause();\n        this.cycle();\n        return;\n      }\n\n      const order = index > activeIndex ? ORDER_NEXT : ORDER_PREV;\n\n      this._slide(order, this._items[index]);\n    } // Private\n\n\n    _getConfig(config) {\n      config = { ...Default$9,\n        ...Manipulator.getDataAttributes(this._element),\n        ...(typeof config === 'object' ? config : {})\n      };\n      typeCheckConfig(NAME$a, config, DefaultType$9);\n      return config;\n    }\n\n    _handleSwipe() {\n      const absDeltax = Math.abs(this.touchDeltaX);\n\n      if (absDeltax <= SWIPE_THRESHOLD) {\n        return;\n      }\n\n      const direction = absDeltax / this.touchDeltaX;\n      this.touchDeltaX = 0;\n\n      if (!direction) {\n        return;\n      }\n\n      this._slide(direction > 0 ? DIRECTION_RIGHT : DIRECTION_LEFT);\n    }\n\n    _addEventListeners() {\n      if (this._config.keyboard) {\n        EventHandler.on(this._element, EVENT_KEYDOWN, event => this._keydown(event));\n      }\n\n      if (this._config.pause === 'hover') {\n        EventHandler.on(this._element, EVENT_MOUSEENTER, event => this.pause(event));\n        EventHandler.on(this._element, EVENT_MOUSELEAVE, event => this.cycle(event));\n      }\n\n      if (this._config.touch && this._touchSupported) {\n        this._addTouchEventListeners();\n      }\n    }\n\n    _addTouchEventListeners() {\n      const start = event => {\n        if (this._pointerEvent && (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH)) {\n          this.touchStartX = event.clientX;\n        } else if (!this._pointerEvent) {\n          this.touchStartX = event.touches[0].clientX;\n        }\n      };\n\n      const move = event => {\n        // ensure swiping with one touch and not pinching\n        this.touchDeltaX = event.touches && event.touches.length > 1 ? 0 : event.touches[0].clientX - this.touchStartX;\n      };\n\n      const end = event => {\n        if (this._pointerEvent && (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH)) {\n          this.touchDeltaX = event.clientX - this.touchStartX;\n        }\n\n        this._handleSwipe();\n\n        if (this._config.pause === 'hover') {\n          // If it's a touch-enabled device, mouseenter/leave are fired as\n          // part of the mouse compatibility events on first tap - the carousel\n          // would stop cycling until user tapped out of it;\n          // here, we listen for touchend, explicitly pause the carousel\n          // (as if it's the second time we tap on it, mouseenter compat event\n          // is NOT fired) and after a timeout (to allow for mouse compatibility\n          // events to fire) we explicitly restart cycling\n          this.pause();\n\n          if (this.touchTimeout) {\n            clearTimeout(this.touchTimeout);\n          }\n\n          this.touchTimeout = setTimeout(event => this.cycle(event), TOUCHEVENT_COMPAT_WAIT + this._config.interval);\n        }\n      };\n\n      SelectorEngine.find(SELECTOR_ITEM_IMG, this._element).forEach(itemImg => {\n        EventHandler.on(itemImg, EVENT_DRAG_START, e => e.preventDefault());\n      });\n\n      if (this._pointerEvent) {\n        EventHandler.on(this._element, EVENT_POINTERDOWN, event => start(event));\n        EventHandler.on(this._element, EVENT_POINTERUP, event => end(event));\n\n        this._element.classList.add(CLASS_NAME_POINTER_EVENT);\n      } else {\n        EventHandler.on(this._element, EVENT_TOUCHSTART, event => start(event));\n        EventHandler.on(this._element, EVENT_TOUCHMOVE, event => move(event));\n        EventHandler.on(this._element, EVENT_TOUCHEND, event => end(event));\n      }\n    }\n\n    _keydown(event) {\n      if (/input|textarea/i.test(event.target.tagName)) {\n        return;\n      }\n\n      const direction = KEY_TO_DIRECTION[event.key];\n\n      if (direction) {\n        event.preventDefault();\n\n        this._slide(direction);\n      }\n    }\n\n    _getItemIndex(element) {\n      this._items = element && element.parentNode ? SelectorEngine.find(SELECTOR_ITEM, element.parentNode) : [];\n      return this._items.indexOf(element);\n    }\n\n    _getItemByOrder(order, activeElement) {\n      const isNext = order === ORDER_NEXT;\n      return getNextActiveElement(this._items, activeElement, isNext, this._config.wrap);\n    }\n\n    _triggerSlideEvent(relatedTarget, eventDirectionName) {\n      const targetIndex = this._getItemIndex(relatedTarget);\n\n      const fromIndex = this._getItemIndex(SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element));\n\n      return EventHandler.trigger(this._element, EVENT_SLIDE, {\n        relatedTarget,\n        direction: eventDirectionName,\n        from: fromIndex,\n        to: targetIndex\n      });\n    }\n\n    _setActiveIndicatorElement(element) {\n      if (this._indicatorsElement) {\n        const activeIndicator = SelectorEngine.findOne(SELECTOR_ACTIVE$1, this._indicatorsElement);\n        activeIndicator.classList.remove(CLASS_NAME_ACTIVE$2);\n        activeIndicator.removeAttribute('aria-current');\n        const indicators = SelectorEngine.find(SELECTOR_INDICATOR, this._indicatorsElement);\n\n        for (let i = 0; i < indicators.length; i++) {\n          if (Number.parseInt(indicators[i].getAttribute('data-bs-slide-to'), 10) === this._getItemIndex(element)) {\n            indicators[i].classList.add(CLASS_NAME_ACTIVE$2);\n            indicators[i].setAttribute('aria-current', 'true');\n            break;\n          }\n        }\n      }\n    }\n\n    _updateInterval() {\n      const element = this._activeElement || SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element);\n\n      if (!element) {\n        return;\n      }\n\n      const elementInterval = Number.parseInt(element.getAttribute('data-bs-interval'), 10);\n\n      if (elementInterval) {\n        this._config.defaultInterval = this._config.defaultInterval || this._config.interval;\n        this._config.interval = elementInterval;\n      } else {\n        this._config.interval = this._config.defaultInterval || this._config.interval;\n      }\n    }\n\n    _slide(directionOrOrder, element) {\n      const order = this._directionToOrder(directionOrOrder);\n\n      const activeElement = SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element);\n\n      const activeElementIndex = this._getItemIndex(activeElement);\n\n      const nextElement = element || this._getItemByOrder(order, activeElement);\n\n      const nextElementIndex = this._getItemIndex(nextElement);\n\n      const isCycling = Boolean(this._interval);\n      const isNext = order === ORDER_NEXT;\n      const directionalClassName = isNext ? CLASS_NAME_START : CLASS_NAME_END;\n      const orderClassName = isNext ? CLASS_NAME_NEXT : CLASS_NAME_PREV;\n\n      const eventDirectionName = this._orderToDirection(order);\n\n      if (nextElement && nextElement.classList.contains(CLASS_NAME_ACTIVE$2)) {\n        this._isSliding = false;\n        return;\n      }\n\n      if (this._isSliding) {\n        return;\n      }\n\n      const slideEvent = this._triggerSlideEvent(nextElement, eventDirectionName);\n\n      if (slideEvent.defaultPrevented) {\n        return;\n      }\n\n      if (!activeElement || !nextElement) {\n        // Some weirdness is happening, so we bail\n        return;\n      }\n\n      this._isSliding = true;\n\n      if (isCycling) {\n        this.pause();\n      }\n\n      this._setActiveIndicatorElement(nextElement);\n\n      this._activeElement = nextElement;\n\n      const triggerSlidEvent = () => {\n        EventHandler.trigger(this._element, EVENT_SLID, {\n          relatedTarget: nextElement,\n          direction: eventDirectionName,\n          from: activeElementIndex,\n          to: nextElementIndex\n        });\n      };\n\n      if (this._element.classList.contains(CLASS_NAME_SLIDE)) {\n        nextElement.classList.add(orderClassName);\n        reflow(nextElement);\n        activeElement.classList.add(directionalClassName);\n        nextElement.classList.add(directionalClassName);\n\n        const completeCallBack = () => {\n          nextElement.classList.remove(directionalClassName, orderClassName);\n          nextElement.classList.add(CLASS_NAME_ACTIVE$2);\n          activeElement.classList.remove(CLASS_NAME_ACTIVE$2, orderClassName, directionalClassName);\n          this._isSliding = false;\n          setTimeout(triggerSlidEvent, 0);\n        };\n\n        this._queueCallback(completeCallBack, activeElement, true);\n      } else {\n        activeElement.classList.remove(CLASS_NAME_ACTIVE$2);\n        nextElement.classList.add(CLASS_NAME_ACTIVE$2);\n        this._isSliding = false;\n        triggerSlidEvent();\n      }\n\n      if (isCycling) {\n        this.cycle();\n      }\n    }\n\n    _directionToOrder(direction) {\n      if (![DIRECTION_RIGHT, DIRECTION_LEFT].includes(direction)) {\n        return direction;\n      }\n\n      if (isRTL()) {\n        return direction === DIRECTION_LEFT ? ORDER_PREV : ORDER_NEXT;\n      }\n\n      return direction === DIRECTION_LEFT ? ORDER_NEXT : ORDER_PREV;\n    }\n\n    _orderToDirection(order) {\n      if (![ORDER_NEXT, ORDER_PREV].includes(order)) {\n        return order;\n      }\n\n      if (isRTL()) {\n        return order === ORDER_PREV ? DIRECTION_LEFT : DIRECTION_RIGHT;\n      }\n\n      return order === ORDER_PREV ? DIRECTION_RIGHT : DIRECTION_LEFT;\n    } // Static\n\n\n    static carouselInterface(element, config) {\n      const data = Carousel.getOrCreateInstance(element, config);\n      let {\n        _config\n      } = data;\n\n      if (typeof config === 'object') {\n        _config = { ..._config,\n          ...config\n        };\n      }\n\n      const action = typeof config === 'string' ? config : _config.slide;\n\n      if (typeof config === 'number') {\n        data.to(config);\n      } else if (typeof action === 'string') {\n        if (typeof data[action] === 'undefined') {\n          throw new TypeError(`No method named \"${action}\"`);\n        }\n\n        data[action]();\n      } else if (_config.interval && _config.ride) {\n        data.pause();\n        data.cycle();\n      }\n    }\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        Carousel.carouselInterface(this, config);\n      });\n    }\n\n    static dataApiClickHandler(event) {\n      const target = getElementFromSelector(this);\n\n      if (!target || !target.classList.contains(CLASS_NAME_CAROUSEL)) {\n        return;\n      }\n\n      const config = { ...Manipulator.getDataAttributes(target),\n        ...Manipulator.getDataAttributes(this)\n      };\n      const slideIndex = this.getAttribute('data-bs-slide-to');\n\n      if (slideIndex) {\n        config.interval = false;\n      }\n\n      Carousel.carouselInterface(target, config);\n\n      if (slideIndex) {\n        Carousel.getInstance(target).to(slideIndex);\n      }\n\n      event.preventDefault();\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(document, EVENT_CLICK_DATA_API$5, SELECTOR_DATA_SLIDE, Carousel.dataApiClickHandler);\n  EventHandler.on(window, EVENT_LOAD_DATA_API$2, () => {\n    const carousels = SelectorEngine.find(SELECTOR_DATA_RIDE);\n\n    for (let i = 0, len = carousels.length; i < len; i++) {\n      Carousel.carouselInterface(carousels[i], Carousel.getInstance(carousels[i]));\n    }\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Carousel to jQuery only if jQuery is present\n   */\n\n  defineJQueryPlugin(Carousel);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): collapse.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$9 = 'collapse';\n  const DATA_KEY$8 = 'bs.collapse';\n  const EVENT_KEY$8 = `.${DATA_KEY$8}`;\n  const DATA_API_KEY$5 = '.data-api';\n  const Default$8 = {\n    toggle: true,\n    parent: ''\n  };\n  const DefaultType$8 = {\n    toggle: 'boolean',\n    parent: '(string|element)'\n  };\n  const EVENT_SHOW$5 = `show${EVENT_KEY$8}`;\n  const EVENT_SHOWN$5 = `shown${EVENT_KEY$8}`;\n  const EVENT_HIDE$5 = `hide${EVENT_KEY$8}`;\n  const EVENT_HIDDEN$5 = `hidden${EVENT_KEY$8}`;\n  const EVENT_CLICK_DATA_API$4 = `click${EVENT_KEY$8}${DATA_API_KEY$5}`;\n  const CLASS_NAME_SHOW$8 = 'show';\n  const CLASS_NAME_COLLAPSE = 'collapse';\n  const CLASS_NAME_COLLAPSING = 'collapsing';\n  const CLASS_NAME_COLLAPSED = 'collapsed';\n  const WIDTH = 'width';\n  const HEIGHT = 'height';\n  const SELECTOR_ACTIVES = '.show, .collapsing';\n  const SELECTOR_DATA_TOGGLE$4 = '[data-bs-toggle=\"collapse\"]';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Collapse extends BaseComponent {\n    constructor(element, config) {\n      super(element);\n      this._isTransitioning = false;\n      this._config = this._getConfig(config);\n      this._triggerArray = SelectorEngine.find(`${SELECTOR_DATA_TOGGLE$4}[href=\"#${this._element.id}\"],` + `${SELECTOR_DATA_TOGGLE$4}[data-bs-target=\"#${this._element.id}\"]`);\n      const toggleList = SelectorEngine.find(SELECTOR_DATA_TOGGLE$4);\n\n      for (let i = 0, len = toggleList.length; i < len; i++) {\n        const elem = toggleList[i];\n        const selector = getSelectorFromElement(elem);\n        const filterElement = SelectorEngine.find(selector).filter(foundElem => foundElem === this._element);\n\n        if (selector !== null && filterElement.length) {\n          this._selector = selector;\n\n          this._triggerArray.push(elem);\n        }\n      }\n\n      this._parent = this._config.parent ? this._getParent() : null;\n\n      if (!this._config.parent) {\n        this._addAriaAndCollapsedClass(this._element, this._triggerArray);\n      }\n\n      if (this._config.toggle) {\n        this.toggle();\n      }\n    } // Getters\n\n\n    static get Default() {\n      return Default$8;\n    }\n\n    static get NAME() {\n      return NAME$9;\n    } // Public\n\n\n    toggle() {\n      if (this._element.classList.contains(CLASS_NAME_SHOW$8)) {\n        this.hide();\n      } else {\n        this.show();\n      }\n    }\n\n    show() {\n      if (this._isTransitioning || this._element.classList.contains(CLASS_NAME_SHOW$8)) {\n        return;\n      }\n\n      let actives;\n      let activesData;\n\n      if (this._parent) {\n        actives = SelectorEngine.find(SELECTOR_ACTIVES, this._parent).filter(elem => {\n          if (typeof this._config.parent === 'string') {\n            return elem.getAttribute('data-bs-parent') === this._config.parent;\n          }\n\n          return elem.classList.contains(CLASS_NAME_COLLAPSE);\n        });\n\n        if (actives.length === 0) {\n          actives = null;\n        }\n      }\n\n      const container = SelectorEngine.findOne(this._selector);\n\n      if (actives) {\n        const tempActiveData = actives.find(elem => container !== elem);\n        activesData = tempActiveData ? Collapse.getInstance(tempActiveData) : null;\n\n        if (activesData && activesData._isTransitioning) {\n          return;\n        }\n      }\n\n      const startEvent = EventHandler.trigger(this._element, EVENT_SHOW$5);\n\n      if (startEvent.defaultPrevented) {\n        return;\n      }\n\n      if (actives) {\n        actives.forEach(elemActive => {\n          if (container !== elemActive) {\n            Collapse.collapseInterface(elemActive, 'hide');\n          }\n\n          if (!activesData) {\n            Data.set(elemActive, DATA_KEY$8, null);\n          }\n        });\n      }\n\n      const dimension = this._getDimension();\n\n      this._element.classList.remove(CLASS_NAME_COLLAPSE);\n\n      this._element.classList.add(CLASS_NAME_COLLAPSING);\n\n      this._element.style[dimension] = 0;\n\n      if (this._triggerArray.length) {\n        this._triggerArray.forEach(element => {\n          element.classList.remove(CLASS_NAME_COLLAPSED);\n          element.setAttribute('aria-expanded', true);\n        });\n      }\n\n      this.setTransitioning(true);\n\n      const complete = () => {\n        this._element.classList.remove(CLASS_NAME_COLLAPSING);\n\n        this._element.classList.add(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$8);\n\n        this._element.style[dimension] = '';\n        this.setTransitioning(false);\n        EventHandler.trigger(this._element, EVENT_SHOWN$5);\n      };\n\n      const capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1);\n      const scrollSize = `scroll${capitalizedDimension}`;\n\n      this._queueCallback(complete, this._element, true);\n\n      this._element.style[dimension] = `${this._element[scrollSize]}px`;\n    }\n\n    hide() {\n      if (this._isTransitioning || !this._element.classList.contains(CLASS_NAME_SHOW$8)) {\n        return;\n      }\n\n      const startEvent = EventHandler.trigger(this._element, EVENT_HIDE$5);\n\n      if (startEvent.defaultPrevented) {\n        return;\n      }\n\n      const dimension = this._getDimension();\n\n      this._element.style[dimension] = `${this._element.getBoundingClientRect()[dimension]}px`;\n      reflow(this._element);\n\n      this._element.classList.add(CLASS_NAME_COLLAPSING);\n\n      this._element.classList.remove(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$8);\n\n      const triggerArrayLength = this._triggerArray.length;\n\n      if (triggerArrayLength > 0) {\n        for (let i = 0; i < triggerArrayLength; i++) {\n          const trigger = this._triggerArray[i];\n          const elem = getElementFromSelector(trigger);\n\n          if (elem && !elem.classList.contains(CLASS_NAME_SHOW$8)) {\n            trigger.classList.add(CLASS_NAME_COLLAPSED);\n            trigger.setAttribute('aria-expanded', false);\n          }\n        }\n      }\n\n      this.setTransitioning(true);\n\n      const complete = () => {\n        this.setTransitioning(false);\n\n        this._element.classList.remove(CLASS_NAME_COLLAPSING);\n\n        this._element.classList.add(CLASS_NAME_COLLAPSE);\n\n        EventHandler.trigger(this._element, EVENT_HIDDEN$5);\n      };\n\n      this._element.style[dimension] = '';\n\n      this._queueCallback(complete, this._element, true);\n    }\n\n    setTransitioning(isTransitioning) {\n      this._isTransitioning = isTransitioning;\n    } // Private\n\n\n    _getConfig(config) {\n      config = { ...Default$8,\n        ...config\n      };\n      config.toggle = Boolean(config.toggle); // Coerce string values\n\n      typeCheckConfig(NAME$9, config, DefaultType$8);\n      return config;\n    }\n\n    _getDimension() {\n      return this._element.classList.contains(WIDTH) ? WIDTH : HEIGHT;\n    }\n\n    _getParent() {\n      let {\n        parent\n      } = this._config;\n      parent = getElement(parent);\n      const selector = `${SELECTOR_DATA_TOGGLE$4}[data-bs-parent=\"${parent}\"]`;\n      SelectorEngine.find(selector, parent).forEach(element => {\n        const selected = getElementFromSelector(element);\n\n        this._addAriaAndCollapsedClass(selected, [element]);\n      });\n      return parent;\n    }\n\n    _addAriaAndCollapsedClass(element, triggerArray) {\n      if (!element || !triggerArray.length) {\n        return;\n      }\n\n      const isOpen = element.classList.contains(CLASS_NAME_SHOW$8);\n      triggerArray.forEach(elem => {\n        if (isOpen) {\n          elem.classList.remove(CLASS_NAME_COLLAPSED);\n        } else {\n          elem.classList.add(CLASS_NAME_COLLAPSED);\n        }\n\n        elem.setAttribute('aria-expanded', isOpen);\n      });\n    } // Static\n\n\n    static collapseInterface(element, config) {\n      let data = Collapse.getInstance(element);\n      const _config = { ...Default$8,\n        ...Manipulator.getDataAttributes(element),\n        ...(typeof config === 'object' && config ? config : {})\n      };\n\n      if (!data && _config.toggle && typeof config === 'string' && /show|hide/.test(config)) {\n        _config.toggle = false;\n      }\n\n      if (!data) {\n        data = new Collapse(element, _config);\n      }\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config]();\n      }\n    }\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        Collapse.collapseInterface(this, config);\n      });\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(document, EVENT_CLICK_DATA_API$4, SELECTOR_DATA_TOGGLE$4, function (event) {\n    // preventDefault only for <a> elements (which change the URL) not inside the collapsible element\n    if (event.target.tagName === 'A' || event.delegateTarget && event.delegateTarget.tagName === 'A') {\n      event.preventDefault();\n    }\n\n    const triggerData = Manipulator.getDataAttributes(this);\n    const selector = getSelectorFromElement(this);\n    const selectorElements = SelectorEngine.find(selector);\n    selectorElements.forEach(element => {\n      const data = Collapse.getInstance(element);\n      let config;\n\n      if (data) {\n        // update parent attribute\n        if (data._parent === null && typeof triggerData.parent === 'string') {\n          data._config.parent = triggerData.parent;\n          data._parent = data._getParent();\n        }\n\n        config = 'toggle';\n      } else {\n        config = triggerData;\n      }\n\n      Collapse.collapseInterface(element, config);\n    });\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Collapse to jQuery only if jQuery is present\n   */\n\n  defineJQueryPlugin(Collapse);\n\n  var top = 'top';\n  var bottom = 'bottom';\n  var right = 'right';\n  var left = 'left';\n  var auto = 'auto';\n  var basePlacements = [top, bottom, right, left];\n  var start = 'start';\n  var end = 'end';\n  var clippingParents = 'clippingParents';\n  var viewport = 'viewport';\n  var popper = 'popper';\n  var reference = 'reference';\n  var variationPlacements = /*#__PURE__*/basePlacements.reduce(function (acc, placement) {\n    return acc.concat([placement + \"-\" + start, placement + \"-\" + end]);\n  }, []);\n  var placements = /*#__PURE__*/[].concat(basePlacements, [auto]).reduce(function (acc, placement) {\n    return acc.concat([placement, placement + \"-\" + start, placement + \"-\" + end]);\n  }, []); // modifiers that need to read the DOM\n\n  var beforeRead = 'beforeRead';\n  var read = 'read';\n  var afterRead = 'afterRead'; // pure-logic modifiers\n\n  var beforeMain = 'beforeMain';\n  var main = 'main';\n  var afterMain = 'afterMain'; // modifier with the purpose to write to the DOM (or write into a framework state)\n\n  var beforeWrite = 'beforeWrite';\n  var write = 'write';\n  var afterWrite = 'afterWrite';\n  var modifierPhases = [beforeRead, read, afterRead, beforeMain, main, afterMain, beforeWrite, write, afterWrite];\n\n  function getNodeName(element) {\n    return element ? (element.nodeName || '').toLowerCase() : null;\n  }\n\n  function getWindow(node) {\n    if (node == null) {\n      return window;\n    }\n\n    if (node.toString() !== '[object Window]') {\n      var ownerDocument = node.ownerDocument;\n      return ownerDocument ? ownerDocument.defaultView || window : window;\n    }\n\n    return node;\n  }\n\n  function isElement(node) {\n    var OwnElement = getWindow(node).Element;\n    return node instanceof OwnElement || node instanceof Element;\n  }\n\n  function isHTMLElement(node) {\n    var OwnElement = getWindow(node).HTMLElement;\n    return node instanceof OwnElement || node instanceof HTMLElement;\n  }\n\n  function isShadowRoot(node) {\n    // IE 11 has no ShadowRoot\n    if (typeof ShadowRoot === 'undefined') {\n      return false;\n    }\n\n    var OwnElement = getWindow(node).ShadowRoot;\n    return node instanceof OwnElement || node instanceof ShadowRoot;\n  }\n\n  // and applies them to the HTMLElements such as popper and arrow\n\n  function applyStyles(_ref) {\n    var state = _ref.state;\n    Object.keys(state.elements).forEach(function (name) {\n      var style = state.styles[name] || {};\n      var attributes = state.attributes[name] || {};\n      var element = state.elements[name]; // arrow is optional + virtual elements\n\n      if (!isHTMLElement(element) || !getNodeName(element)) {\n        return;\n      } // Flow doesn't support to extend this property, but it's the most\n      // effective way to apply styles to an HTMLElement\n      // $FlowFixMe[cannot-write]\n\n\n      Object.assign(element.style, style);\n      Object.keys(attributes).forEach(function (name) {\n        var value = attributes[name];\n\n        if (value === false) {\n          element.removeAttribute(name);\n        } else {\n          element.setAttribute(name, value === true ? '' : value);\n        }\n      });\n    });\n  }\n\n  function effect$2(_ref2) {\n    var state = _ref2.state;\n    var initialStyles = {\n      popper: {\n        position: state.options.strategy,\n        left: '0',\n        top: '0',\n        margin: '0'\n      },\n      arrow: {\n        position: 'absolute'\n      },\n      reference: {}\n    };\n    Object.assign(state.elements.popper.style, initialStyles.popper);\n    state.styles = initialStyles;\n\n    if (state.elements.arrow) {\n      Object.assign(state.elements.arrow.style, initialStyles.arrow);\n    }\n\n    return function () {\n      Object.keys(state.elements).forEach(function (name) {\n        var element = state.elements[name];\n        var attributes = state.attributes[name] || {};\n        var styleProperties = Object.keys(state.styles.hasOwnProperty(name) ? state.styles[name] : initialStyles[name]); // Set all values to an empty string to unset them\n\n        var style = styleProperties.reduce(function (style, property) {\n          style[property] = '';\n          return style;\n        }, {}); // arrow is optional + virtual elements\n\n        if (!isHTMLElement(element) || !getNodeName(element)) {\n          return;\n        }\n\n        Object.assign(element.style, style);\n        Object.keys(attributes).forEach(function (attribute) {\n          element.removeAttribute(attribute);\n        });\n      });\n    };\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  var applyStyles$1 = {\n    name: 'applyStyles',\n    enabled: true,\n    phase: 'write',\n    fn: applyStyles,\n    effect: effect$2,\n    requires: ['computeStyles']\n  };\n\n  function getBasePlacement(placement) {\n    return placement.split('-')[0];\n  }\n\n  function getBoundingClientRect(element) {\n    var rect = element.getBoundingClientRect();\n    return {\n      width: rect.width,\n      height: rect.height,\n      top: rect.top,\n      right: rect.right,\n      bottom: rect.bottom,\n      left: rect.left,\n      x: rect.left,\n      y: rect.top\n    };\n  }\n\n  // means it doesn't take into account transforms.\n\n  function getLayoutRect(element) {\n    var clientRect = getBoundingClientRect(element); // Use the clientRect sizes if it's not been transformed.\n    // Fixes https://github.com/popperjs/popper-core/issues/1223\n\n    var width = element.offsetWidth;\n    var height = element.offsetHeight;\n\n    if (Math.abs(clientRect.width - width) <= 1) {\n      width = clientRect.width;\n    }\n\n    if (Math.abs(clientRect.height - height) <= 1) {\n      height = clientRect.height;\n    }\n\n    return {\n      x: element.offsetLeft,\n      y: element.offsetTop,\n      width: width,\n      height: height\n    };\n  }\n\n  function contains(parent, child) {\n    var rootNode = child.getRootNode && child.getRootNode(); // First, attempt with faster native method\n\n    if (parent.contains(child)) {\n      return true;\n    } // then fallback to custom implementation with Shadow DOM support\n    else if (rootNode && isShadowRoot(rootNode)) {\n        var next = child;\n\n        do {\n          if (next && parent.isSameNode(next)) {\n            return true;\n          } // $FlowFixMe[prop-missing]: need a better way to handle this...\n\n\n          next = next.parentNode || next.host;\n        } while (next);\n      } // Give up, the result is false\n\n\n    return false;\n  }\n\n  function getComputedStyle$1(element) {\n    return getWindow(element).getComputedStyle(element);\n  }\n\n  function isTableElement(element) {\n    return ['table', 'td', 'th'].indexOf(getNodeName(element)) >= 0;\n  }\n\n  function getDocumentElement(element) {\n    // $FlowFixMe[incompatible-return]: assume body is always available\n    return ((isElement(element) ? element.ownerDocument : // $FlowFixMe[prop-missing]\n    element.document) || window.document).documentElement;\n  }\n\n  function getParentNode(element) {\n    if (getNodeName(element) === 'html') {\n      return element;\n    }\n\n    return (// this is a quicker (but less type safe) way to save quite some bytes from the bundle\n      // $FlowFixMe[incompatible-return]\n      // $FlowFixMe[prop-missing]\n      element.assignedSlot || // step into the shadow DOM of the parent of a slotted node\n      element.parentNode || ( // DOM Element detected\n      isShadowRoot(element) ? element.host : null) || // ShadowRoot detected\n      // $FlowFixMe[incompatible-call]: HTMLElement is a Node\n      getDocumentElement(element) // fallback\n\n    );\n  }\n\n  function getTrueOffsetParent(element) {\n    if (!isHTMLElement(element) || // https://github.com/popperjs/popper-core/issues/837\n    getComputedStyle$1(element).position === 'fixed') {\n      return null;\n    }\n\n    return element.offsetParent;\n  } // `.offsetParent` reports `null` for fixed elements, while absolute elements\n  // return the containing block\n\n\n  function getContainingBlock(element) {\n    var isFirefox = navigator.userAgent.toLowerCase().indexOf('firefox') !== -1;\n    var isIE = navigator.userAgent.indexOf('Trident') !== -1;\n\n    if (isIE && isHTMLElement(element)) {\n      // In IE 9, 10 and 11 fixed elements containing block is always established by the viewport\n      var elementCss = getComputedStyle$1(element);\n\n      if (elementCss.position === 'fixed') {\n        return null;\n      }\n    }\n\n    var currentNode = getParentNode(element);\n\n    while (isHTMLElement(currentNode) && ['html', 'body'].indexOf(getNodeName(currentNode)) < 0) {\n      var css = getComputedStyle$1(currentNode); // This is non-exhaustive but covers the most common CSS properties that\n      // create a containing block.\n      // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n\n      if (css.transform !== 'none' || css.perspective !== 'none' || css.contain === 'paint' || ['transform', 'perspective'].indexOf(css.willChange) !== -1 || isFirefox && css.willChange === 'filter' || isFirefox && css.filter && css.filter !== 'none') {\n        return currentNode;\n      } else {\n        currentNode = currentNode.parentNode;\n      }\n    }\n\n    return null;\n  } // Gets the closest ancestor positioned element. Handles some edge cases,\n  // such as table ancestors and cross browser bugs.\n\n\n  function getOffsetParent(element) {\n    var window = getWindow(element);\n    var offsetParent = getTrueOffsetParent(element);\n\n    while (offsetParent && isTableElement(offsetParent) && getComputedStyle$1(offsetParent).position === 'static') {\n      offsetParent = getTrueOffsetParent(offsetParent);\n    }\n\n    if (offsetParent && (getNodeName(offsetParent) === 'html' || getNodeName(offsetParent) === 'body' && getComputedStyle$1(offsetParent).position === 'static')) {\n      return window;\n    }\n\n    return offsetParent || getContainingBlock(element) || window;\n  }\n\n  function getMainAxisFromPlacement(placement) {\n    return ['top', 'bottom'].indexOf(placement) >= 0 ? 'x' : 'y';\n  }\n\n  var max = Math.max;\n  var min = Math.min;\n  var round = Math.round;\n\n  function within(min$1, value, max$1) {\n    return max(min$1, min(value, max$1));\n  }\n\n  function getFreshSideObject() {\n    return {\n      top: 0,\n      right: 0,\n      bottom: 0,\n      left: 0\n    };\n  }\n\n  function mergePaddingObject(paddingObject) {\n    return Object.assign({}, getFreshSideObject(), paddingObject);\n  }\n\n  function expandToHashMap(value, keys) {\n    return keys.reduce(function (hashMap, key) {\n      hashMap[key] = value;\n      return hashMap;\n    }, {});\n  }\n\n  var toPaddingObject = function toPaddingObject(padding, state) {\n    padding = typeof padding === 'function' ? padding(Object.assign({}, state.rects, {\n      placement: state.placement\n    })) : padding;\n    return mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));\n  };\n\n  function arrow(_ref) {\n    var _state$modifiersData$;\n\n    var state = _ref.state,\n        name = _ref.name,\n        options = _ref.options;\n    var arrowElement = state.elements.arrow;\n    var popperOffsets = state.modifiersData.popperOffsets;\n    var basePlacement = getBasePlacement(state.placement);\n    var axis = getMainAxisFromPlacement(basePlacement);\n    var isVertical = [left, right].indexOf(basePlacement) >= 0;\n    var len = isVertical ? 'height' : 'width';\n\n    if (!arrowElement || !popperOffsets) {\n      return;\n    }\n\n    var paddingObject = toPaddingObject(options.padding, state);\n    var arrowRect = getLayoutRect(arrowElement);\n    var minProp = axis === 'y' ? top : left;\n    var maxProp = axis === 'y' ? bottom : right;\n    var endDiff = state.rects.reference[len] + state.rects.reference[axis] - popperOffsets[axis] - state.rects.popper[len];\n    var startDiff = popperOffsets[axis] - state.rects.reference[axis];\n    var arrowOffsetParent = getOffsetParent(arrowElement);\n    var clientSize = arrowOffsetParent ? axis === 'y' ? arrowOffsetParent.clientHeight || 0 : arrowOffsetParent.clientWidth || 0 : 0;\n    var centerToReference = endDiff / 2 - startDiff / 2; // Make sure the arrow doesn't overflow the popper if the center point is\n    // outside of the popper bounds\n\n    var min = paddingObject[minProp];\n    var max = clientSize - arrowRect[len] - paddingObject[maxProp];\n    var center = clientSize / 2 - arrowRect[len] / 2 + centerToReference;\n    var offset = within(min, center, max); // Prevents breaking syntax highlighting...\n\n    var axisProp = axis;\n    state.modifiersData[name] = (_state$modifiersData$ = {}, _state$modifiersData$[axisProp] = offset, _state$modifiersData$.centerOffset = offset - center, _state$modifiersData$);\n  }\n\n  function effect$1(_ref2) {\n    var state = _ref2.state,\n        options = _ref2.options;\n    var _options$element = options.element,\n        arrowElement = _options$element === void 0 ? '[data-popper-arrow]' : _options$element;\n\n    if (arrowElement == null) {\n      return;\n    } // CSS selector\n\n\n    if (typeof arrowElement === 'string') {\n      arrowElement = state.elements.popper.querySelector(arrowElement);\n\n      if (!arrowElement) {\n        return;\n      }\n    }\n\n    if (!contains(state.elements.popper, arrowElement)) {\n\n      return;\n    }\n\n    state.elements.arrow = arrowElement;\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  var arrow$1 = {\n    name: 'arrow',\n    enabled: true,\n    phase: 'main',\n    fn: arrow,\n    effect: effect$1,\n    requires: ['popperOffsets'],\n    requiresIfExists: ['preventOverflow']\n  };\n\n  var unsetSides = {\n    top: 'auto',\n    right: 'auto',\n    bottom: 'auto',\n    left: 'auto'\n  }; // Round the offsets to the nearest suitable subpixel based on the DPR.\n  // Zooming can change the DPR, but it seems to report a value that will\n  // cleanly divide the values into the appropriate subpixels.\n\n  function roundOffsetsByDPR(_ref) {\n    var x = _ref.x,\n        y = _ref.y;\n    var win = window;\n    var dpr = win.devicePixelRatio || 1;\n    return {\n      x: round(round(x * dpr) / dpr) || 0,\n      y: round(round(y * dpr) / dpr) || 0\n    };\n  }\n\n  function mapToStyles(_ref2) {\n    var _Object$assign2;\n\n    var popper = _ref2.popper,\n        popperRect = _ref2.popperRect,\n        placement = _ref2.placement,\n        offsets = _ref2.offsets,\n        position = _ref2.position,\n        gpuAcceleration = _ref2.gpuAcceleration,\n        adaptive = _ref2.adaptive,\n        roundOffsets = _ref2.roundOffsets;\n\n    var _ref3 = roundOffsets === true ? roundOffsetsByDPR(offsets) : typeof roundOffsets === 'function' ? roundOffsets(offsets) : offsets,\n        _ref3$x = _ref3.x,\n        x = _ref3$x === void 0 ? 0 : _ref3$x,\n        _ref3$y = _ref3.y,\n        y = _ref3$y === void 0 ? 0 : _ref3$y;\n\n    var hasX = offsets.hasOwnProperty('x');\n    var hasY = offsets.hasOwnProperty('y');\n    var sideX = left;\n    var sideY = top;\n    var win = window;\n\n    if (adaptive) {\n      var offsetParent = getOffsetParent(popper);\n      var heightProp = 'clientHeight';\n      var widthProp = 'clientWidth';\n\n      if (offsetParent === getWindow(popper)) {\n        offsetParent = getDocumentElement(popper);\n\n        if (getComputedStyle$1(offsetParent).position !== 'static') {\n          heightProp = 'scrollHeight';\n          widthProp = 'scrollWidth';\n        }\n      } // $FlowFixMe[incompatible-cast]: force type refinement, we compare offsetParent with window above, but Flow doesn't detect it\n\n\n      offsetParent = offsetParent;\n\n      if (placement === top) {\n        sideY = bottom; // $FlowFixMe[prop-missing]\n\n        y -= offsetParent[heightProp] - popperRect.height;\n        y *= gpuAcceleration ? 1 : -1;\n      }\n\n      if (placement === left) {\n        sideX = right; // $FlowFixMe[prop-missing]\n\n        x -= offsetParent[widthProp] - popperRect.width;\n        x *= gpuAcceleration ? 1 : -1;\n      }\n    }\n\n    var commonStyles = Object.assign({\n      position: position\n    }, adaptive && unsetSides);\n\n    if (gpuAcceleration) {\n      var _Object$assign;\n\n      return Object.assign({}, commonStyles, (_Object$assign = {}, _Object$assign[sideY] = hasY ? '0' : '', _Object$assign[sideX] = hasX ? '0' : '', _Object$assign.transform = (win.devicePixelRatio || 1) < 2 ? \"translate(\" + x + \"px, \" + y + \"px)\" : \"translate3d(\" + x + \"px, \" + y + \"px, 0)\", _Object$assign));\n    }\n\n    return Object.assign({}, commonStyles, (_Object$assign2 = {}, _Object$assign2[sideY] = hasY ? y + \"px\" : '', _Object$assign2[sideX] = hasX ? x + \"px\" : '', _Object$assign2.transform = '', _Object$assign2));\n  }\n\n  function computeStyles(_ref4) {\n    var state = _ref4.state,\n        options = _ref4.options;\n    var _options$gpuAccelerat = options.gpuAcceleration,\n        gpuAcceleration = _options$gpuAccelerat === void 0 ? true : _options$gpuAccelerat,\n        _options$adaptive = options.adaptive,\n        adaptive = _options$adaptive === void 0 ? true : _options$adaptive,\n        _options$roundOffsets = options.roundOffsets,\n        roundOffsets = _options$roundOffsets === void 0 ? true : _options$roundOffsets;\n\n    var commonStyles = {\n      placement: getBasePlacement(state.placement),\n      popper: state.elements.popper,\n      popperRect: state.rects.popper,\n      gpuAcceleration: gpuAcceleration\n    };\n\n    if (state.modifiersData.popperOffsets != null) {\n      state.styles.popper = Object.assign({}, state.styles.popper, mapToStyles(Object.assign({}, commonStyles, {\n        offsets: state.modifiersData.popperOffsets,\n        position: state.options.strategy,\n        adaptive: adaptive,\n        roundOffsets: roundOffsets\n      })));\n    }\n\n    if (state.modifiersData.arrow != null) {\n      state.styles.arrow = Object.assign({}, state.styles.arrow, mapToStyles(Object.assign({}, commonStyles, {\n        offsets: state.modifiersData.arrow,\n        position: 'absolute',\n        adaptive: false,\n        roundOffsets: roundOffsets\n      })));\n    }\n\n    state.attributes.popper = Object.assign({}, state.attributes.popper, {\n      'data-popper-placement': state.placement\n    });\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  var computeStyles$1 = {\n    name: 'computeStyles',\n    enabled: true,\n    phase: 'beforeWrite',\n    fn: computeStyles,\n    data: {}\n  };\n\n  var passive = {\n    passive: true\n  };\n\n  function effect(_ref) {\n    var state = _ref.state,\n        instance = _ref.instance,\n        options = _ref.options;\n    var _options$scroll = options.scroll,\n        scroll = _options$scroll === void 0 ? true : _options$scroll,\n        _options$resize = options.resize,\n        resize = _options$resize === void 0 ? true : _options$resize;\n    var window = getWindow(state.elements.popper);\n    var scrollParents = [].concat(state.scrollParents.reference, state.scrollParents.popper);\n\n    if (scroll) {\n      scrollParents.forEach(function (scrollParent) {\n        scrollParent.addEventListener('scroll', instance.update, passive);\n      });\n    }\n\n    if (resize) {\n      window.addEventListener('resize', instance.update, passive);\n    }\n\n    return function () {\n      if (scroll) {\n        scrollParents.forEach(function (scrollParent) {\n          scrollParent.removeEventListener('scroll', instance.update, passive);\n        });\n      }\n\n      if (resize) {\n        window.removeEventListener('resize', instance.update, passive);\n      }\n    };\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  var eventListeners = {\n    name: 'eventListeners',\n    enabled: true,\n    phase: 'write',\n    fn: function fn() {},\n    effect: effect,\n    data: {}\n  };\n\n  var hash$1 = {\n    left: 'right',\n    right: 'left',\n    bottom: 'top',\n    top: 'bottom'\n  };\n  function getOppositePlacement(placement) {\n    return placement.replace(/left|right|bottom|top/g, function (matched) {\n      return hash$1[matched];\n    });\n  }\n\n  var hash = {\n    start: 'end',\n    end: 'start'\n  };\n  function getOppositeVariationPlacement(placement) {\n    return placement.replace(/start|end/g, function (matched) {\n      return hash[matched];\n    });\n  }\n\n  function getWindowScroll(node) {\n    var win = getWindow(node);\n    var scrollLeft = win.pageXOffset;\n    var scrollTop = win.pageYOffset;\n    return {\n      scrollLeft: scrollLeft,\n      scrollTop: scrollTop\n    };\n  }\n\n  function getWindowScrollBarX(element) {\n    // If <html> has a CSS width greater than the viewport, then this will be\n    // incorrect for RTL.\n    // Popper 1 is broken in this case and never had a bug report so let's assume\n    // it's not an issue. I don't think anyone ever specifies width on <html>\n    // anyway.\n    // Browsers where the left scrollbar doesn't cause an issue report `0` for\n    // this (e.g. Edge 2019, IE11, Safari)\n    return getBoundingClientRect(getDocumentElement(element)).left + getWindowScroll(element).scrollLeft;\n  }\n\n  function getViewportRect(element) {\n    var win = getWindow(element);\n    var html = getDocumentElement(element);\n    var visualViewport = win.visualViewport;\n    var width = html.clientWidth;\n    var height = html.clientHeight;\n    var x = 0;\n    var y = 0; // NB: This isn't supported on iOS <= 12. If the keyboard is open, the popper\n    // can be obscured underneath it.\n    // Also, `html.clientHeight` adds the bottom bar height in Safari iOS, even\n    // if it isn't open, so if this isn't available, the popper will be detected\n    // to overflow the bottom of the screen too early.\n\n    if (visualViewport) {\n      width = visualViewport.width;\n      height = visualViewport.height; // Uses Layout Viewport (like Chrome; Safari does not currently)\n      // In Chrome, it returns a value very close to 0 (+/-) but contains rounding\n      // errors due to floating point numbers, so we need to check precision.\n      // Safari returns a number <= 0, usually < -1 when pinch-zoomed\n      // Feature detection fails in mobile emulation mode in Chrome.\n      // Math.abs(win.innerWidth / visualViewport.scale - visualViewport.width) <\n      // 0.001\n      // Fallback here: \"Not Safari\" userAgent\n\n      if (!/^((?!chrome|android).)*safari/i.test(navigator.userAgent)) {\n        x = visualViewport.offsetLeft;\n        y = visualViewport.offsetTop;\n      }\n    }\n\n    return {\n      width: width,\n      height: height,\n      x: x + getWindowScrollBarX(element),\n      y: y\n    };\n  }\n\n  // of the `<html>` and `<body>` rect bounds if horizontally scrollable\n\n  function getDocumentRect(element) {\n    var _element$ownerDocumen;\n\n    var html = getDocumentElement(element);\n    var winScroll = getWindowScroll(element);\n    var body = (_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body;\n    var width = max(html.scrollWidth, html.clientWidth, body ? body.scrollWidth : 0, body ? body.clientWidth : 0);\n    var height = max(html.scrollHeight, html.clientHeight, body ? body.scrollHeight : 0, body ? body.clientHeight : 0);\n    var x = -winScroll.scrollLeft + getWindowScrollBarX(element);\n    var y = -winScroll.scrollTop;\n\n    if (getComputedStyle$1(body || html).direction === 'rtl') {\n      x += max(html.clientWidth, body ? body.clientWidth : 0) - width;\n    }\n\n    return {\n      width: width,\n      height: height,\n      x: x,\n      y: y\n    };\n  }\n\n  function isScrollParent(element) {\n    // Firefox wants us to check `-x` and `-y` variations as well\n    var _getComputedStyle = getComputedStyle$1(element),\n        overflow = _getComputedStyle.overflow,\n        overflowX = _getComputedStyle.overflowX,\n        overflowY = _getComputedStyle.overflowY;\n\n    return /auto|scroll|overlay|hidden/.test(overflow + overflowY + overflowX);\n  }\n\n  function getScrollParent(node) {\n    if (['html', 'body', '#document'].indexOf(getNodeName(node)) >= 0) {\n      // $FlowFixMe[incompatible-return]: assume body is always available\n      return node.ownerDocument.body;\n    }\n\n    if (isHTMLElement(node) && isScrollParent(node)) {\n      return node;\n    }\n\n    return getScrollParent(getParentNode(node));\n  }\n\n  /*\n  given a DOM element, return the list of all scroll parents, up the list of ancesors\n  until we get to the top window object. This list is what we attach scroll listeners\n  to, because if any of these parent elements scroll, we'll need to re-calculate the\n  reference element's position.\n  */\n\n  function listScrollParents(element, list) {\n    var _element$ownerDocumen;\n\n    if (list === void 0) {\n      list = [];\n    }\n\n    var scrollParent = getScrollParent(element);\n    var isBody = scrollParent === ((_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body);\n    var win = getWindow(scrollParent);\n    var target = isBody ? [win].concat(win.visualViewport || [], isScrollParent(scrollParent) ? scrollParent : []) : scrollParent;\n    var updatedList = list.concat(target);\n    return isBody ? updatedList : // $FlowFixMe[incompatible-call]: isBody tells us target will be an HTMLElement here\n    updatedList.concat(listScrollParents(getParentNode(target)));\n  }\n\n  function rectToClientRect(rect) {\n    return Object.assign({}, rect, {\n      left: rect.x,\n      top: rect.y,\n      right: rect.x + rect.width,\n      bottom: rect.y + rect.height\n    });\n  }\n\n  function getInnerBoundingClientRect(element) {\n    var rect = getBoundingClientRect(element);\n    rect.top = rect.top + element.clientTop;\n    rect.left = rect.left + element.clientLeft;\n    rect.bottom = rect.top + element.clientHeight;\n    rect.right = rect.left + element.clientWidth;\n    rect.width = element.clientWidth;\n    rect.height = element.clientHeight;\n    rect.x = rect.left;\n    rect.y = rect.top;\n    return rect;\n  }\n\n  function getClientRectFromMixedType(element, clippingParent) {\n    return clippingParent === viewport ? rectToClientRect(getViewportRect(element)) : isHTMLElement(clippingParent) ? getInnerBoundingClientRect(clippingParent) : rectToClientRect(getDocumentRect(getDocumentElement(element)));\n  } // A \"clipping parent\" is an overflowable container with the characteristic of\n  // clipping (or hiding) overflowing elements with a position different from\n  // `initial`\n\n\n  function getClippingParents(element) {\n    var clippingParents = listScrollParents(getParentNode(element));\n    var canEscapeClipping = ['absolute', 'fixed'].indexOf(getComputedStyle$1(element).position) >= 0;\n    var clipperElement = canEscapeClipping && isHTMLElement(element) ? getOffsetParent(element) : element;\n\n    if (!isElement(clipperElement)) {\n      return [];\n    } // $FlowFixMe[incompatible-return]: https://github.com/facebook/flow/issues/1414\n\n\n    return clippingParents.filter(function (clippingParent) {\n      return isElement(clippingParent) && contains(clippingParent, clipperElement) && getNodeName(clippingParent) !== 'body';\n    });\n  } // Gets the maximum area that the element is visible in due to any number of\n  // clipping parents\n\n\n  function getClippingRect(element, boundary, rootBoundary) {\n    var mainClippingParents = boundary === 'clippingParents' ? getClippingParents(element) : [].concat(boundary);\n    var clippingParents = [].concat(mainClippingParents, [rootBoundary]);\n    var firstClippingParent = clippingParents[0];\n    var clippingRect = clippingParents.reduce(function (accRect, clippingParent) {\n      var rect = getClientRectFromMixedType(element, clippingParent);\n      accRect.top = max(rect.top, accRect.top);\n      accRect.right = min(rect.right, accRect.right);\n      accRect.bottom = min(rect.bottom, accRect.bottom);\n      accRect.left = max(rect.left, accRect.left);\n      return accRect;\n    }, getClientRectFromMixedType(element, firstClippingParent));\n    clippingRect.width = clippingRect.right - clippingRect.left;\n    clippingRect.height = clippingRect.bottom - clippingRect.top;\n    clippingRect.x = clippingRect.left;\n    clippingRect.y = clippingRect.top;\n    return clippingRect;\n  }\n\n  function getVariation(placement) {\n    return placement.split('-')[1];\n  }\n\n  function computeOffsets(_ref) {\n    var reference = _ref.reference,\n        element = _ref.element,\n        placement = _ref.placement;\n    var basePlacement = placement ? getBasePlacement(placement) : null;\n    var variation = placement ? getVariation(placement) : null;\n    var commonX = reference.x + reference.width / 2 - element.width / 2;\n    var commonY = reference.y + reference.height / 2 - element.height / 2;\n    var offsets;\n\n    switch (basePlacement) {\n      case top:\n        offsets = {\n          x: commonX,\n          y: reference.y - element.height\n        };\n        break;\n\n      case bottom:\n        offsets = {\n          x: commonX,\n          y: reference.y + reference.height\n        };\n        break;\n\n      case right:\n        offsets = {\n          x: reference.x + reference.width,\n          y: commonY\n        };\n        break;\n\n      case left:\n        offsets = {\n          x: reference.x - element.width,\n          y: commonY\n        };\n        break;\n\n      default:\n        offsets = {\n          x: reference.x,\n          y: reference.y\n        };\n    }\n\n    var mainAxis = basePlacement ? getMainAxisFromPlacement(basePlacement) : null;\n\n    if (mainAxis != null) {\n      var len = mainAxis === 'y' ? 'height' : 'width';\n\n      switch (variation) {\n        case start:\n          offsets[mainAxis] = offsets[mainAxis] - (reference[len] / 2 - element[len] / 2);\n          break;\n\n        case end:\n          offsets[mainAxis] = offsets[mainAxis] + (reference[len] / 2 - element[len] / 2);\n          break;\n      }\n    }\n\n    return offsets;\n  }\n\n  function detectOverflow(state, options) {\n    if (options === void 0) {\n      options = {};\n    }\n\n    var _options = options,\n        _options$placement = _options.placement,\n        placement = _options$placement === void 0 ? state.placement : _options$placement,\n        _options$boundary = _options.boundary,\n        boundary = _options$boundary === void 0 ? clippingParents : _options$boundary,\n        _options$rootBoundary = _options.rootBoundary,\n        rootBoundary = _options$rootBoundary === void 0 ? viewport : _options$rootBoundary,\n        _options$elementConte = _options.elementContext,\n        elementContext = _options$elementConte === void 0 ? popper : _options$elementConte,\n        _options$altBoundary = _options.altBoundary,\n        altBoundary = _options$altBoundary === void 0 ? false : _options$altBoundary,\n        _options$padding = _options.padding,\n        padding = _options$padding === void 0 ? 0 : _options$padding;\n    var paddingObject = mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));\n    var altContext = elementContext === popper ? reference : popper;\n    var referenceElement = state.elements.reference;\n    var popperRect = state.rects.popper;\n    var element = state.elements[altBoundary ? altContext : elementContext];\n    var clippingClientRect = getClippingRect(isElement(element) ? element : element.contextElement || getDocumentElement(state.elements.popper), boundary, rootBoundary);\n    var referenceClientRect = getBoundingClientRect(referenceElement);\n    var popperOffsets = computeOffsets({\n      reference: referenceClientRect,\n      element: popperRect,\n      strategy: 'absolute',\n      placement: placement\n    });\n    var popperClientRect = rectToClientRect(Object.assign({}, popperRect, popperOffsets));\n    var elementClientRect = elementContext === popper ? popperClientRect : referenceClientRect; // positive = overflowing the clipping rect\n    // 0 or negative = within the clipping rect\n\n    var overflowOffsets = {\n      top: clippingClientRect.top - elementClientRect.top + paddingObject.top,\n      bottom: elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom,\n      left: clippingClientRect.left - elementClientRect.left + paddingObject.left,\n      right: elementClientRect.right - clippingClientRect.right + paddingObject.right\n    };\n    var offsetData = state.modifiersData.offset; // Offsets can be applied only to the popper element\n\n    if (elementContext === popper && offsetData) {\n      var offset = offsetData[placement];\n      Object.keys(overflowOffsets).forEach(function (key) {\n        var multiply = [right, bottom].indexOf(key) >= 0 ? 1 : -1;\n        var axis = [top, bottom].indexOf(key) >= 0 ? 'y' : 'x';\n        overflowOffsets[key] += offset[axis] * multiply;\n      });\n    }\n\n    return overflowOffsets;\n  }\n\n  function computeAutoPlacement(state, options) {\n    if (options === void 0) {\n      options = {};\n    }\n\n    var _options = options,\n        placement = _options.placement,\n        boundary = _options.boundary,\n        rootBoundary = _options.rootBoundary,\n        padding = _options.padding,\n        flipVariations = _options.flipVariations,\n        _options$allowedAutoP = _options.allowedAutoPlacements,\n        allowedAutoPlacements = _options$allowedAutoP === void 0 ? placements : _options$allowedAutoP;\n    var variation = getVariation(placement);\n    var placements$1 = variation ? flipVariations ? variationPlacements : variationPlacements.filter(function (placement) {\n      return getVariation(placement) === variation;\n    }) : basePlacements;\n    var allowedPlacements = placements$1.filter(function (placement) {\n      return allowedAutoPlacements.indexOf(placement) >= 0;\n    });\n\n    if (allowedPlacements.length === 0) {\n      allowedPlacements = placements$1;\n    } // $FlowFixMe[incompatible-type]: Flow seems to have problems with two array unions...\n\n\n    var overflows = allowedPlacements.reduce(function (acc, placement) {\n      acc[placement] = detectOverflow(state, {\n        placement: placement,\n        boundary: boundary,\n        rootBoundary: rootBoundary,\n        padding: padding\n      })[getBasePlacement(placement)];\n      return acc;\n    }, {});\n    return Object.keys(overflows).sort(function (a, b) {\n      return overflows[a] - overflows[b];\n    });\n  }\n\n  function getExpandedFallbackPlacements(placement) {\n    if (getBasePlacement(placement) === auto) {\n      return [];\n    }\n\n    var oppositePlacement = getOppositePlacement(placement);\n    return [getOppositeVariationPlacement(placement), oppositePlacement, getOppositeVariationPlacement(oppositePlacement)];\n  }\n\n  function flip(_ref) {\n    var state = _ref.state,\n        options = _ref.options,\n        name = _ref.name;\n\n    if (state.modifiersData[name]._skip) {\n      return;\n    }\n\n    var _options$mainAxis = options.mainAxis,\n        checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\n        _options$altAxis = options.altAxis,\n        checkAltAxis = _options$altAxis === void 0 ? true : _options$altAxis,\n        specifiedFallbackPlacements = options.fallbackPlacements,\n        padding = options.padding,\n        boundary = options.boundary,\n        rootBoundary = options.rootBoundary,\n        altBoundary = options.altBoundary,\n        _options$flipVariatio = options.flipVariations,\n        flipVariations = _options$flipVariatio === void 0 ? true : _options$flipVariatio,\n        allowedAutoPlacements = options.allowedAutoPlacements;\n    var preferredPlacement = state.options.placement;\n    var basePlacement = getBasePlacement(preferredPlacement);\n    var isBasePlacement = basePlacement === preferredPlacement;\n    var fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipVariations ? [getOppositePlacement(preferredPlacement)] : getExpandedFallbackPlacements(preferredPlacement));\n    var placements = [preferredPlacement].concat(fallbackPlacements).reduce(function (acc, placement) {\n      return acc.concat(getBasePlacement(placement) === auto ? computeAutoPlacement(state, {\n        placement: placement,\n        boundary: boundary,\n        rootBoundary: rootBoundary,\n        padding: padding,\n        flipVariations: flipVariations,\n        allowedAutoPlacements: allowedAutoPlacements\n      }) : placement);\n    }, []);\n    var referenceRect = state.rects.reference;\n    var popperRect = state.rects.popper;\n    var checksMap = new Map();\n    var makeFallbackChecks = true;\n    var firstFittingPlacement = placements[0];\n\n    for (var i = 0; i < placements.length; i++) {\n      var placement = placements[i];\n\n      var _basePlacement = getBasePlacement(placement);\n\n      var isStartVariation = getVariation(placement) === start;\n      var isVertical = [top, bottom].indexOf(_basePlacement) >= 0;\n      var len = isVertical ? 'width' : 'height';\n      var overflow = detectOverflow(state, {\n        placement: placement,\n        boundary: boundary,\n        rootBoundary: rootBoundary,\n        altBoundary: altBoundary,\n        padding: padding\n      });\n      var mainVariationSide = isVertical ? isStartVariation ? right : left : isStartVariation ? bottom : top;\n\n      if (referenceRect[len] > popperRect[len]) {\n        mainVariationSide = getOppositePlacement(mainVariationSide);\n      }\n\n      var altVariationSide = getOppositePlacement(mainVariationSide);\n      var checks = [];\n\n      if (checkMainAxis) {\n        checks.push(overflow[_basePlacement] <= 0);\n      }\n\n      if (checkAltAxis) {\n        checks.push(overflow[mainVariationSide] <= 0, overflow[altVariationSide] <= 0);\n      }\n\n      if (checks.every(function (check) {\n        return check;\n      })) {\n        firstFittingPlacement = placement;\n        makeFallbackChecks = false;\n        break;\n      }\n\n      checksMap.set(placement, checks);\n    }\n\n    if (makeFallbackChecks) {\n      // `2` may be desired in some cases – research later\n      var numberOfChecks = flipVariations ? 3 : 1;\n\n      var _loop = function _loop(_i) {\n        var fittingPlacement = placements.find(function (placement) {\n          var checks = checksMap.get(placement);\n\n          if (checks) {\n            return checks.slice(0, _i).every(function (check) {\n              return check;\n            });\n          }\n        });\n\n        if (fittingPlacement) {\n          firstFittingPlacement = fittingPlacement;\n          return \"break\";\n        }\n      };\n\n      for (var _i = numberOfChecks; _i > 0; _i--) {\n        var _ret = _loop(_i);\n\n        if (_ret === \"break\") break;\n      }\n    }\n\n    if (state.placement !== firstFittingPlacement) {\n      state.modifiersData[name]._skip = true;\n      state.placement = firstFittingPlacement;\n      state.reset = true;\n    }\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  var flip$1 = {\n    name: 'flip',\n    enabled: true,\n    phase: 'main',\n    fn: flip,\n    requiresIfExists: ['offset'],\n    data: {\n      _skip: false\n    }\n  };\n\n  function getSideOffsets(overflow, rect, preventedOffsets) {\n    if (preventedOffsets === void 0) {\n      preventedOffsets = {\n        x: 0,\n        y: 0\n      };\n    }\n\n    return {\n      top: overflow.top - rect.height - preventedOffsets.y,\n      right: overflow.right - rect.width + preventedOffsets.x,\n      bottom: overflow.bottom - rect.height + preventedOffsets.y,\n      left: overflow.left - rect.width - preventedOffsets.x\n    };\n  }\n\n  function isAnySideFullyClipped(overflow) {\n    return [top, right, bottom, left].some(function (side) {\n      return overflow[side] >= 0;\n    });\n  }\n\n  function hide(_ref) {\n    var state = _ref.state,\n        name = _ref.name;\n    var referenceRect = state.rects.reference;\n    var popperRect = state.rects.popper;\n    var preventedOffsets = state.modifiersData.preventOverflow;\n    var referenceOverflow = detectOverflow(state, {\n      elementContext: 'reference'\n    });\n    var popperAltOverflow = detectOverflow(state, {\n      altBoundary: true\n    });\n    var referenceClippingOffsets = getSideOffsets(referenceOverflow, referenceRect);\n    var popperEscapeOffsets = getSideOffsets(popperAltOverflow, popperRect, preventedOffsets);\n    var isReferenceHidden = isAnySideFullyClipped(referenceClippingOffsets);\n    var hasPopperEscaped = isAnySideFullyClipped(popperEscapeOffsets);\n    state.modifiersData[name] = {\n      referenceClippingOffsets: referenceClippingOffsets,\n      popperEscapeOffsets: popperEscapeOffsets,\n      isReferenceHidden: isReferenceHidden,\n      hasPopperEscaped: hasPopperEscaped\n    };\n    state.attributes.popper = Object.assign({}, state.attributes.popper, {\n      'data-popper-reference-hidden': isReferenceHidden,\n      'data-popper-escaped': hasPopperEscaped\n    });\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  var hide$1 = {\n    name: 'hide',\n    enabled: true,\n    phase: 'main',\n    requiresIfExists: ['preventOverflow'],\n    fn: hide\n  };\n\n  function distanceAndSkiddingToXY(placement, rects, offset) {\n    var basePlacement = getBasePlacement(placement);\n    var invertDistance = [left, top].indexOf(basePlacement) >= 0 ? -1 : 1;\n\n    var _ref = typeof offset === 'function' ? offset(Object.assign({}, rects, {\n      placement: placement\n    })) : offset,\n        skidding = _ref[0],\n        distance = _ref[1];\n\n    skidding = skidding || 0;\n    distance = (distance || 0) * invertDistance;\n    return [left, right].indexOf(basePlacement) >= 0 ? {\n      x: distance,\n      y: skidding\n    } : {\n      x: skidding,\n      y: distance\n    };\n  }\n\n  function offset(_ref2) {\n    var state = _ref2.state,\n        options = _ref2.options,\n        name = _ref2.name;\n    var _options$offset = options.offset,\n        offset = _options$offset === void 0 ? [0, 0] : _options$offset;\n    var data = placements.reduce(function (acc, placement) {\n      acc[placement] = distanceAndSkiddingToXY(placement, state.rects, offset);\n      return acc;\n    }, {});\n    var _data$state$placement = data[state.placement],\n        x = _data$state$placement.x,\n        y = _data$state$placement.y;\n\n    if (state.modifiersData.popperOffsets != null) {\n      state.modifiersData.popperOffsets.x += x;\n      state.modifiersData.popperOffsets.y += y;\n    }\n\n    state.modifiersData[name] = data;\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  var offset$1 = {\n    name: 'offset',\n    enabled: true,\n    phase: 'main',\n    requires: ['popperOffsets'],\n    fn: offset\n  };\n\n  function popperOffsets(_ref) {\n    var state = _ref.state,\n        name = _ref.name;\n    // Offsets are the actual position the popper needs to have to be\n    // properly positioned near its reference element\n    // This is the most basic placement, and will be adjusted by\n    // the modifiers in the next step\n    state.modifiersData[name] = computeOffsets({\n      reference: state.rects.reference,\n      element: state.rects.popper,\n      strategy: 'absolute',\n      placement: state.placement\n    });\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  var popperOffsets$1 = {\n    name: 'popperOffsets',\n    enabled: true,\n    phase: 'read',\n    fn: popperOffsets,\n    data: {}\n  };\n\n  function getAltAxis(axis) {\n    return axis === 'x' ? 'y' : 'x';\n  }\n\n  function preventOverflow(_ref) {\n    var state = _ref.state,\n        options = _ref.options,\n        name = _ref.name;\n    var _options$mainAxis = options.mainAxis,\n        checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\n        _options$altAxis = options.altAxis,\n        checkAltAxis = _options$altAxis === void 0 ? false : _options$altAxis,\n        boundary = options.boundary,\n        rootBoundary = options.rootBoundary,\n        altBoundary = options.altBoundary,\n        padding = options.padding,\n        _options$tether = options.tether,\n        tether = _options$tether === void 0 ? true : _options$tether,\n        _options$tetherOffset = options.tetherOffset,\n        tetherOffset = _options$tetherOffset === void 0 ? 0 : _options$tetherOffset;\n    var overflow = detectOverflow(state, {\n      boundary: boundary,\n      rootBoundary: rootBoundary,\n      padding: padding,\n      altBoundary: altBoundary\n    });\n    var basePlacement = getBasePlacement(state.placement);\n    var variation = getVariation(state.placement);\n    var isBasePlacement = !variation;\n    var mainAxis = getMainAxisFromPlacement(basePlacement);\n    var altAxis = getAltAxis(mainAxis);\n    var popperOffsets = state.modifiersData.popperOffsets;\n    var referenceRect = state.rects.reference;\n    var popperRect = state.rects.popper;\n    var tetherOffsetValue = typeof tetherOffset === 'function' ? tetherOffset(Object.assign({}, state.rects, {\n      placement: state.placement\n    })) : tetherOffset;\n    var data = {\n      x: 0,\n      y: 0\n    };\n\n    if (!popperOffsets) {\n      return;\n    }\n\n    if (checkMainAxis || checkAltAxis) {\n      var mainSide = mainAxis === 'y' ? top : left;\n      var altSide = mainAxis === 'y' ? bottom : right;\n      var len = mainAxis === 'y' ? 'height' : 'width';\n      var offset = popperOffsets[mainAxis];\n      var min$1 = popperOffsets[mainAxis] + overflow[mainSide];\n      var max$1 = popperOffsets[mainAxis] - overflow[altSide];\n      var additive = tether ? -popperRect[len] / 2 : 0;\n      var minLen = variation === start ? referenceRect[len] : popperRect[len];\n      var maxLen = variation === start ? -popperRect[len] : -referenceRect[len]; // We need to include the arrow in the calculation so the arrow doesn't go\n      // outside the reference bounds\n\n      var arrowElement = state.elements.arrow;\n      var arrowRect = tether && arrowElement ? getLayoutRect(arrowElement) : {\n        width: 0,\n        height: 0\n      };\n      var arrowPaddingObject = state.modifiersData['arrow#persistent'] ? state.modifiersData['arrow#persistent'].padding : getFreshSideObject();\n      var arrowPaddingMin = arrowPaddingObject[mainSide];\n      var arrowPaddingMax = arrowPaddingObject[altSide]; // If the reference length is smaller than the arrow length, we don't want\n      // to include its full size in the calculation. If the reference is small\n      // and near the edge of a boundary, the popper can overflow even if the\n      // reference is not overflowing as well (e.g. virtual elements with no\n      // width or height)\n\n      var arrowLen = within(0, referenceRect[len], arrowRect[len]);\n      var minOffset = isBasePlacement ? referenceRect[len] / 2 - additive - arrowLen - arrowPaddingMin - tetherOffsetValue : minLen - arrowLen - arrowPaddingMin - tetherOffsetValue;\n      var maxOffset = isBasePlacement ? -referenceRect[len] / 2 + additive + arrowLen + arrowPaddingMax + tetherOffsetValue : maxLen + arrowLen + arrowPaddingMax + tetherOffsetValue;\n      var arrowOffsetParent = state.elements.arrow && getOffsetParent(state.elements.arrow);\n      var clientOffset = arrowOffsetParent ? mainAxis === 'y' ? arrowOffsetParent.clientTop || 0 : arrowOffsetParent.clientLeft || 0 : 0;\n      var offsetModifierValue = state.modifiersData.offset ? state.modifiersData.offset[state.placement][mainAxis] : 0;\n      var tetherMin = popperOffsets[mainAxis] + minOffset - offsetModifierValue - clientOffset;\n      var tetherMax = popperOffsets[mainAxis] + maxOffset - offsetModifierValue;\n\n      if (checkMainAxis) {\n        var preventedOffset = within(tether ? min(min$1, tetherMin) : min$1, offset, tether ? max(max$1, tetherMax) : max$1);\n        popperOffsets[mainAxis] = preventedOffset;\n        data[mainAxis] = preventedOffset - offset;\n      }\n\n      if (checkAltAxis) {\n        var _mainSide = mainAxis === 'x' ? top : left;\n\n        var _altSide = mainAxis === 'x' ? bottom : right;\n\n        var _offset = popperOffsets[altAxis];\n\n        var _min = _offset + overflow[_mainSide];\n\n        var _max = _offset - overflow[_altSide];\n\n        var _preventedOffset = within(tether ? min(_min, tetherMin) : _min, _offset, tether ? max(_max, tetherMax) : _max);\n\n        popperOffsets[altAxis] = _preventedOffset;\n        data[altAxis] = _preventedOffset - _offset;\n      }\n    }\n\n    state.modifiersData[name] = data;\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  var preventOverflow$1 = {\n    name: 'preventOverflow',\n    enabled: true,\n    phase: 'main',\n    fn: preventOverflow,\n    requiresIfExists: ['offset']\n  };\n\n  function getHTMLElementScroll(element) {\n    return {\n      scrollLeft: element.scrollLeft,\n      scrollTop: element.scrollTop\n    };\n  }\n\n  function getNodeScroll(node) {\n    if (node === getWindow(node) || !isHTMLElement(node)) {\n      return getWindowScroll(node);\n    } else {\n      return getHTMLElementScroll(node);\n    }\n  }\n\n  // Composite means it takes into account transforms as well as layout.\n\n  function getCompositeRect(elementOrVirtualElement, offsetParent, isFixed) {\n    if (isFixed === void 0) {\n      isFixed = false;\n    }\n\n    var documentElement = getDocumentElement(offsetParent);\n    var rect = getBoundingClientRect(elementOrVirtualElement);\n    var isOffsetParentAnElement = isHTMLElement(offsetParent);\n    var scroll = {\n      scrollLeft: 0,\n      scrollTop: 0\n    };\n    var offsets = {\n      x: 0,\n      y: 0\n    };\n\n    if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {\n      if (getNodeName(offsetParent) !== 'body' || // https://github.com/popperjs/popper-core/issues/1078\n      isScrollParent(documentElement)) {\n        scroll = getNodeScroll(offsetParent);\n      }\n\n      if (isHTMLElement(offsetParent)) {\n        offsets = getBoundingClientRect(offsetParent);\n        offsets.x += offsetParent.clientLeft;\n        offsets.y += offsetParent.clientTop;\n      } else if (documentElement) {\n        offsets.x = getWindowScrollBarX(documentElement);\n      }\n    }\n\n    return {\n      x: rect.left + scroll.scrollLeft - offsets.x,\n      y: rect.top + scroll.scrollTop - offsets.y,\n      width: rect.width,\n      height: rect.height\n    };\n  }\n\n  function order(modifiers) {\n    var map = new Map();\n    var visited = new Set();\n    var result = [];\n    modifiers.forEach(function (modifier) {\n      map.set(modifier.name, modifier);\n    }); // On visiting object, check for its dependencies and visit them recursively\n\n    function sort(modifier) {\n      visited.add(modifier.name);\n      var requires = [].concat(modifier.requires || [], modifier.requiresIfExists || []);\n      requires.forEach(function (dep) {\n        if (!visited.has(dep)) {\n          var depModifier = map.get(dep);\n\n          if (depModifier) {\n            sort(depModifier);\n          }\n        }\n      });\n      result.push(modifier);\n    }\n\n    modifiers.forEach(function (modifier) {\n      if (!visited.has(modifier.name)) {\n        // check for visited object\n        sort(modifier);\n      }\n    });\n    return result;\n  }\n\n  function orderModifiers(modifiers) {\n    // order based on dependencies\n    var orderedModifiers = order(modifiers); // order based on phase\n\n    return modifierPhases.reduce(function (acc, phase) {\n      return acc.concat(orderedModifiers.filter(function (modifier) {\n        return modifier.phase === phase;\n      }));\n    }, []);\n  }\n\n  function debounce(fn) {\n    var pending;\n    return function () {\n      if (!pending) {\n        pending = new Promise(function (resolve) {\n          Promise.resolve().then(function () {\n            pending = undefined;\n            resolve(fn());\n          });\n        });\n      }\n\n      return pending;\n    };\n  }\n\n  function mergeByName(modifiers) {\n    var merged = modifiers.reduce(function (merged, current) {\n      var existing = merged[current.name];\n      merged[current.name] = existing ? Object.assign({}, existing, current, {\n        options: Object.assign({}, existing.options, current.options),\n        data: Object.assign({}, existing.data, current.data)\n      }) : current;\n      return merged;\n    }, {}); // IE11 does not support Object.values\n\n    return Object.keys(merged).map(function (key) {\n      return merged[key];\n    });\n  }\n\n  var DEFAULT_OPTIONS = {\n    placement: 'bottom',\n    modifiers: [],\n    strategy: 'absolute'\n  };\n\n  function areValidElements() {\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    return !args.some(function (element) {\n      return !(element && typeof element.getBoundingClientRect === 'function');\n    });\n  }\n\n  function popperGenerator(generatorOptions) {\n    if (generatorOptions === void 0) {\n      generatorOptions = {};\n    }\n\n    var _generatorOptions = generatorOptions,\n        _generatorOptions$def = _generatorOptions.defaultModifiers,\n        defaultModifiers = _generatorOptions$def === void 0 ? [] : _generatorOptions$def,\n        _generatorOptions$def2 = _generatorOptions.defaultOptions,\n        defaultOptions = _generatorOptions$def2 === void 0 ? DEFAULT_OPTIONS : _generatorOptions$def2;\n    return function createPopper(reference, popper, options) {\n      if (options === void 0) {\n        options = defaultOptions;\n      }\n\n      var state = {\n        placement: 'bottom',\n        orderedModifiers: [],\n        options: Object.assign({}, DEFAULT_OPTIONS, defaultOptions),\n        modifiersData: {},\n        elements: {\n          reference: reference,\n          popper: popper\n        },\n        attributes: {},\n        styles: {}\n      };\n      var effectCleanupFns = [];\n      var isDestroyed = false;\n      var instance = {\n        state: state,\n        setOptions: function setOptions(options) {\n          cleanupModifierEffects();\n          state.options = Object.assign({}, defaultOptions, state.options, options);\n          state.scrollParents = {\n            reference: isElement(reference) ? listScrollParents(reference) : reference.contextElement ? listScrollParents(reference.contextElement) : [],\n            popper: listScrollParents(popper)\n          }; // Orders the modifiers based on their dependencies and `phase`\n          // properties\n\n          var orderedModifiers = orderModifiers(mergeByName([].concat(defaultModifiers, state.options.modifiers))); // Strip out disabled modifiers\n\n          state.orderedModifiers = orderedModifiers.filter(function (m) {\n            return m.enabled;\n          }); // Validate the provided modifiers so that the consumer will get warned\n\n          runModifierEffects();\n          return instance.update();\n        },\n        // Sync update – it will always be executed, even if not necessary. This\n        // is useful for low frequency updates where sync behavior simplifies the\n        // logic.\n        // For high frequency updates (e.g. `resize` and `scroll` events), always\n        // prefer the async Popper#update method\n        forceUpdate: function forceUpdate() {\n          if (isDestroyed) {\n            return;\n          }\n\n          var _state$elements = state.elements,\n              reference = _state$elements.reference,\n              popper = _state$elements.popper; // Don't proceed if `reference` or `popper` are not valid elements\n          // anymore\n\n          if (!areValidElements(reference, popper)) {\n\n            return;\n          } // Store the reference and popper rects to be read by modifiers\n\n\n          state.rects = {\n            reference: getCompositeRect(reference, getOffsetParent(popper), state.options.strategy === 'fixed'),\n            popper: getLayoutRect(popper)\n          }; // Modifiers have the ability to reset the current update cycle. The\n          // most common use case for this is the `flip` modifier changing the\n          // placement, which then needs to re-run all the modifiers, because the\n          // logic was previously ran for the previous placement and is therefore\n          // stale/incorrect\n\n          state.reset = false;\n          state.placement = state.options.placement; // On each update cycle, the `modifiersData` property for each modifier\n          // is filled with the initial data specified by the modifier. This means\n          // it doesn't persist and is fresh on each update.\n          // To ensure persistent data, use `${name}#persistent`\n\n          state.orderedModifiers.forEach(function (modifier) {\n            return state.modifiersData[modifier.name] = Object.assign({}, modifier.data);\n          });\n\n          for (var index = 0; index < state.orderedModifiers.length; index++) {\n\n            if (state.reset === true) {\n              state.reset = false;\n              index = -1;\n              continue;\n            }\n\n            var _state$orderedModifie = state.orderedModifiers[index],\n                fn = _state$orderedModifie.fn,\n                _state$orderedModifie2 = _state$orderedModifie.options,\n                _options = _state$orderedModifie2 === void 0 ? {} : _state$orderedModifie2,\n                name = _state$orderedModifie.name;\n\n            if (typeof fn === 'function') {\n              state = fn({\n                state: state,\n                options: _options,\n                name: name,\n                instance: instance\n              }) || state;\n            }\n          }\n        },\n        // Async and optimistically optimized update – it will not be executed if\n        // not necessary (debounced to run at most once-per-tick)\n        update: debounce(function () {\n          return new Promise(function (resolve) {\n            instance.forceUpdate();\n            resolve(state);\n          });\n        }),\n        destroy: function destroy() {\n          cleanupModifierEffects();\n          isDestroyed = true;\n        }\n      };\n\n      if (!areValidElements(reference, popper)) {\n\n        return instance;\n      }\n\n      instance.setOptions(options).then(function (state) {\n        if (!isDestroyed && options.onFirstUpdate) {\n          options.onFirstUpdate(state);\n        }\n      }); // Modifiers have the ability to execute arbitrary code before the first\n      // update cycle runs. They will be executed in the same order as the update\n      // cycle. This is useful when a modifier adds some persistent data that\n      // other modifiers need to use, but the modifier is run after the dependent\n      // one.\n\n      function runModifierEffects() {\n        state.orderedModifiers.forEach(function (_ref3) {\n          var name = _ref3.name,\n              _ref3$options = _ref3.options,\n              options = _ref3$options === void 0 ? {} : _ref3$options,\n              effect = _ref3.effect;\n\n          if (typeof effect === 'function') {\n            var cleanupFn = effect({\n              state: state,\n              name: name,\n              instance: instance,\n              options: options\n            });\n\n            var noopFn = function noopFn() {};\n\n            effectCleanupFns.push(cleanupFn || noopFn);\n          }\n        });\n      }\n\n      function cleanupModifierEffects() {\n        effectCleanupFns.forEach(function (fn) {\n          return fn();\n        });\n        effectCleanupFns = [];\n      }\n\n      return instance;\n    };\n  }\n  var createPopper$2 = /*#__PURE__*/popperGenerator(); // eslint-disable-next-line import/no-unused-modules\n\n  var defaultModifiers$1 = [eventListeners, popperOffsets$1, computeStyles$1, applyStyles$1];\n  var createPopper$1 = /*#__PURE__*/popperGenerator({\n    defaultModifiers: defaultModifiers$1\n  }); // eslint-disable-next-line import/no-unused-modules\n\n  var defaultModifiers = [eventListeners, popperOffsets$1, computeStyles$1, applyStyles$1, offset$1, flip$1, preventOverflow$1, arrow$1, hide$1];\n  var createPopper = /*#__PURE__*/popperGenerator({\n    defaultModifiers: defaultModifiers\n  }); // eslint-disable-next-line import/no-unused-modules\n\n  var Popper = /*#__PURE__*/Object.freeze({\n    __proto__: null,\n    popperGenerator: popperGenerator,\n    detectOverflow: detectOverflow,\n    createPopperBase: createPopper$2,\n    createPopper: createPopper,\n    createPopperLite: createPopper$1,\n    top: top,\n    bottom: bottom,\n    right: right,\n    left: left,\n    auto: auto,\n    basePlacements: basePlacements,\n    start: start,\n    end: end,\n    clippingParents: clippingParents,\n    viewport: viewport,\n    popper: popper,\n    reference: reference,\n    variationPlacements: variationPlacements,\n    placements: placements,\n    beforeRead: beforeRead,\n    read: read,\n    afterRead: afterRead,\n    beforeMain: beforeMain,\n    main: main,\n    afterMain: afterMain,\n    beforeWrite: beforeWrite,\n    write: write,\n    afterWrite: afterWrite,\n    modifierPhases: modifierPhases,\n    applyStyles: applyStyles$1,\n    arrow: arrow$1,\n    computeStyles: computeStyles$1,\n    eventListeners: eventListeners,\n    flip: flip$1,\n    hide: hide$1,\n    offset: offset$1,\n    popperOffsets: popperOffsets$1,\n    preventOverflow: preventOverflow$1\n  });\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): dropdown.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$8 = 'dropdown';\n  const DATA_KEY$7 = 'bs.dropdown';\n  const EVENT_KEY$7 = `.${DATA_KEY$7}`;\n  const DATA_API_KEY$4 = '.data-api';\n  const ESCAPE_KEY$2 = 'Escape';\n  const SPACE_KEY = 'Space';\n  const TAB_KEY = 'Tab';\n  const ARROW_UP_KEY = 'ArrowUp';\n  const ARROW_DOWN_KEY = 'ArrowDown';\n  const RIGHT_MOUSE_BUTTON = 2; // MouseEvent.button value for the secondary button, usually the right button\n\n  const REGEXP_KEYDOWN = new RegExp(`${ARROW_UP_KEY}|${ARROW_DOWN_KEY}|${ESCAPE_KEY$2}`);\n  const EVENT_HIDE$4 = `hide${EVENT_KEY$7}`;\n  const EVENT_HIDDEN$4 = `hidden${EVENT_KEY$7}`;\n  const EVENT_SHOW$4 = `show${EVENT_KEY$7}`;\n  const EVENT_SHOWN$4 = `shown${EVENT_KEY$7}`;\n  const EVENT_CLICK = `click${EVENT_KEY$7}`;\n  const EVENT_CLICK_DATA_API$3 = `click${EVENT_KEY$7}${DATA_API_KEY$4}`;\n  const EVENT_KEYDOWN_DATA_API = `keydown${EVENT_KEY$7}${DATA_API_KEY$4}`;\n  const EVENT_KEYUP_DATA_API = `keyup${EVENT_KEY$7}${DATA_API_KEY$4}`;\n  const CLASS_NAME_SHOW$7 = 'show';\n  const CLASS_NAME_DROPUP = 'dropup';\n  const CLASS_NAME_DROPEND = 'dropend';\n  const CLASS_NAME_DROPSTART = 'dropstart';\n  const CLASS_NAME_NAVBAR = 'navbar';\n  const SELECTOR_DATA_TOGGLE$3 = '[data-bs-toggle=\"dropdown\"]';\n  const SELECTOR_MENU = '.dropdown-menu';\n  const SELECTOR_NAVBAR_NAV = '.navbar-nav';\n  const SELECTOR_VISIBLE_ITEMS = '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)';\n  const PLACEMENT_TOP = isRTL() ? 'top-end' : 'top-start';\n  const PLACEMENT_TOPEND = isRTL() ? 'top-start' : 'top-end';\n  const PLACEMENT_BOTTOM = isRTL() ? 'bottom-end' : 'bottom-start';\n  const PLACEMENT_BOTTOMEND = isRTL() ? 'bottom-start' : 'bottom-end';\n  const PLACEMENT_RIGHT = isRTL() ? 'left-start' : 'right-start';\n  const PLACEMENT_LEFT = isRTL() ? 'right-start' : 'left-start';\n  const Default$7 = {\n    offset: [0, 2],\n    boundary: 'clippingParents',\n    reference: 'toggle',\n    display: 'dynamic',\n    popperConfig: null,\n    autoClose: true\n  };\n  const DefaultType$7 = {\n    offset: '(array|string|function)',\n    boundary: '(string|element)',\n    reference: '(string|element|object)',\n    display: 'string',\n    popperConfig: '(null|object|function)',\n    autoClose: '(boolean|string)'\n  };\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Dropdown extends BaseComponent {\n    constructor(element, config) {\n      super(element);\n      this._popper = null;\n      this._config = this._getConfig(config);\n      this._menu = this._getMenuElement();\n      this._inNavbar = this._detectNavbar();\n\n      this._addEventListeners();\n    } // Getters\n\n\n    static get Default() {\n      return Default$7;\n    }\n\n    static get DefaultType() {\n      return DefaultType$7;\n    }\n\n    static get NAME() {\n      return NAME$8;\n    } // Public\n\n\n    toggle() {\n      if (isDisabled(this._element)) {\n        return;\n      }\n\n      const isActive = this._element.classList.contains(CLASS_NAME_SHOW$7);\n\n      if (isActive) {\n        this.hide();\n        return;\n      }\n\n      this.show();\n    }\n\n    show() {\n      if (isDisabled(this._element) || this._menu.classList.contains(CLASS_NAME_SHOW$7)) {\n        return;\n      }\n\n      const parent = Dropdown.getParentFromElement(this._element);\n      const relatedTarget = {\n        relatedTarget: this._element\n      };\n      const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$4, relatedTarget);\n\n      if (showEvent.defaultPrevented) {\n        return;\n      } // Totally disable Popper for Dropdowns in Navbar\n\n\n      if (this._inNavbar) {\n        Manipulator.setDataAttribute(this._menu, 'popper', 'none');\n      } else {\n        if (typeof Popper === 'undefined') {\n          throw new TypeError('Bootstrap\\'s dropdowns require Popper (https://popper.js.org)');\n        }\n\n        let referenceElement = this._element;\n\n        if (this._config.reference === 'parent') {\n          referenceElement = parent;\n        } else if (isElement$1(this._config.reference)) {\n          referenceElement = getElement(this._config.reference);\n        } else if (typeof this._config.reference === 'object') {\n          referenceElement = this._config.reference;\n        }\n\n        const popperConfig = this._getPopperConfig();\n\n        const isDisplayStatic = popperConfig.modifiers.find(modifier => modifier.name === 'applyStyles' && modifier.enabled === false);\n        this._popper = createPopper(referenceElement, this._menu, popperConfig);\n\n        if (isDisplayStatic) {\n          Manipulator.setDataAttribute(this._menu, 'popper', 'static');\n        }\n      } // If this is a touch-enabled device we add extra\n      // empty mouseover listeners to the body's immediate children;\n      // only needed because of broken event delegation on iOS\n      // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n\n\n      if ('ontouchstart' in document.documentElement && !parent.closest(SELECTOR_NAVBAR_NAV)) {\n        [].concat(...document.body.children).forEach(elem => EventHandler.on(elem, 'mouseover', noop));\n      }\n\n      this._element.focus();\n\n      this._element.setAttribute('aria-expanded', true);\n\n      this._menu.classList.toggle(CLASS_NAME_SHOW$7);\n\n      this._element.classList.toggle(CLASS_NAME_SHOW$7);\n\n      EventHandler.trigger(this._element, EVENT_SHOWN$4, relatedTarget);\n    }\n\n    hide() {\n      if (isDisabled(this._element) || !this._menu.classList.contains(CLASS_NAME_SHOW$7)) {\n        return;\n      }\n\n      const relatedTarget = {\n        relatedTarget: this._element\n      };\n\n      this._completeHide(relatedTarget);\n    }\n\n    dispose() {\n      if (this._popper) {\n        this._popper.destroy();\n      }\n\n      super.dispose();\n    }\n\n    update() {\n      this._inNavbar = this._detectNavbar();\n\n      if (this._popper) {\n        this._popper.update();\n      }\n    } // Private\n\n\n    _addEventListeners() {\n      EventHandler.on(this._element, EVENT_CLICK, event => {\n        event.preventDefault();\n        this.toggle();\n      });\n    }\n\n    _completeHide(relatedTarget) {\n      const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$4, relatedTarget);\n\n      if (hideEvent.defaultPrevented) {\n        return;\n      } // If this is a touch-enabled device we remove the extra\n      // empty mouseover listeners we added for iOS support\n\n\n      if ('ontouchstart' in document.documentElement) {\n        [].concat(...document.body.children).forEach(elem => EventHandler.off(elem, 'mouseover', noop));\n      }\n\n      if (this._popper) {\n        this._popper.destroy();\n      }\n\n      this._menu.classList.remove(CLASS_NAME_SHOW$7);\n\n      this._element.classList.remove(CLASS_NAME_SHOW$7);\n\n      this._element.setAttribute('aria-expanded', 'false');\n\n      Manipulator.removeDataAttribute(this._menu, 'popper');\n      EventHandler.trigger(this._element, EVENT_HIDDEN$4, relatedTarget);\n    }\n\n    _getConfig(config) {\n      config = { ...this.constructor.Default,\n        ...Manipulator.getDataAttributes(this._element),\n        ...config\n      };\n      typeCheckConfig(NAME$8, config, this.constructor.DefaultType);\n\n      if (typeof config.reference === 'object' && !isElement$1(config.reference) && typeof config.reference.getBoundingClientRect !== 'function') {\n        // Popper virtual elements require a getBoundingClientRect method\n        throw new TypeError(`${NAME$8.toUpperCase()}: Option \"reference\" provided type \"object\" without a required \"getBoundingClientRect\" method.`);\n      }\n\n      return config;\n    }\n\n    _getMenuElement() {\n      return SelectorEngine.next(this._element, SELECTOR_MENU)[0];\n    }\n\n    _getPlacement() {\n      const parentDropdown = this._element.parentNode;\n\n      if (parentDropdown.classList.contains(CLASS_NAME_DROPEND)) {\n        return PLACEMENT_RIGHT;\n      }\n\n      if (parentDropdown.classList.contains(CLASS_NAME_DROPSTART)) {\n        return PLACEMENT_LEFT;\n      } // We need to trim the value because custom properties can also include spaces\n\n\n      const isEnd = getComputedStyle(this._menu).getPropertyValue('--bs-position').trim() === 'end';\n\n      if (parentDropdown.classList.contains(CLASS_NAME_DROPUP)) {\n        return isEnd ? PLACEMENT_TOPEND : PLACEMENT_TOP;\n      }\n\n      return isEnd ? PLACEMENT_BOTTOMEND : PLACEMENT_BOTTOM;\n    }\n\n    _detectNavbar() {\n      return this._element.closest(`.${CLASS_NAME_NAVBAR}`) !== null;\n    }\n\n    _getOffset() {\n      const {\n        offset\n      } = this._config;\n\n      if (typeof offset === 'string') {\n        return offset.split(',').map(val => Number.parseInt(val, 10));\n      }\n\n      if (typeof offset === 'function') {\n        return popperData => offset(popperData, this._element);\n      }\n\n      return offset;\n    }\n\n    _getPopperConfig() {\n      const defaultBsPopperConfig = {\n        placement: this._getPlacement(),\n        modifiers: [{\n          name: 'preventOverflow',\n          options: {\n            boundary: this._config.boundary\n          }\n        }, {\n          name: 'offset',\n          options: {\n            offset: this._getOffset()\n          }\n        }]\n      }; // Disable Popper if we have a static display\n\n      if (this._config.display === 'static') {\n        defaultBsPopperConfig.modifiers = [{\n          name: 'applyStyles',\n          enabled: false\n        }];\n      }\n\n      return { ...defaultBsPopperConfig,\n        ...(typeof this._config.popperConfig === 'function' ? this._config.popperConfig(defaultBsPopperConfig) : this._config.popperConfig)\n      };\n    }\n\n    _selectMenuItem({\n      key,\n      target\n    }) {\n      const items = SelectorEngine.find(SELECTOR_VISIBLE_ITEMS, this._menu).filter(isVisible);\n\n      if (!items.length) {\n        return;\n      } // if target isn't included in items (e.g. when expanding the dropdown)\n      // allow cycling to get the last item in case key equals ARROW_UP_KEY\n\n\n      getNextActiveElement(items, target, key === ARROW_DOWN_KEY, !items.includes(target)).focus();\n    } // Static\n\n\n    static dropdownInterface(element, config) {\n      const data = Dropdown.getOrCreateInstance(element, config);\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config]();\n      }\n    }\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        Dropdown.dropdownInterface(this, config);\n      });\n    }\n\n    static clearMenus(event) {\n      if (event && (event.button === RIGHT_MOUSE_BUTTON || event.type === 'keyup' && event.key !== TAB_KEY)) {\n        return;\n      }\n\n      const toggles = SelectorEngine.find(SELECTOR_DATA_TOGGLE$3);\n\n      for (let i = 0, len = toggles.length; i < len; i++) {\n        const context = Dropdown.getInstance(toggles[i]);\n\n        if (!context || context._config.autoClose === false) {\n          continue;\n        }\n\n        if (!context._element.classList.contains(CLASS_NAME_SHOW$7)) {\n          continue;\n        }\n\n        const relatedTarget = {\n          relatedTarget: context._element\n        };\n\n        if (event) {\n          const composedPath = event.composedPath();\n          const isMenuTarget = composedPath.includes(context._menu);\n\n          if (composedPath.includes(context._element) || context._config.autoClose === 'inside' && !isMenuTarget || context._config.autoClose === 'outside' && isMenuTarget) {\n            continue;\n          } // Tab navigation through the dropdown menu or events from contained inputs shouldn't close the menu\n\n\n          if (context._menu.contains(event.target) && (event.type === 'keyup' && event.key === TAB_KEY || /input|select|option|textarea|form/i.test(event.target.tagName))) {\n            continue;\n          }\n\n          if (event.type === 'click') {\n            relatedTarget.clickEvent = event;\n          }\n        }\n\n        context._completeHide(relatedTarget);\n      }\n    }\n\n    static getParentFromElement(element) {\n      return getElementFromSelector(element) || element.parentNode;\n    }\n\n    static dataApiKeydownHandler(event) {\n      // If not input/textarea:\n      //  - And not a key in REGEXP_KEYDOWN => not a dropdown command\n      // If input/textarea:\n      //  - If space key => not a dropdown command\n      //  - If key is other than escape\n      //    - If key is not up or down => not a dropdown command\n      //    - If trigger inside the menu => not a dropdown command\n      if (/input|textarea/i.test(event.target.tagName) ? event.key === SPACE_KEY || event.key !== ESCAPE_KEY$2 && (event.key !== ARROW_DOWN_KEY && event.key !== ARROW_UP_KEY || event.target.closest(SELECTOR_MENU)) : !REGEXP_KEYDOWN.test(event.key)) {\n        return;\n      }\n\n      const isActive = this.classList.contains(CLASS_NAME_SHOW$7);\n\n      if (!isActive && event.key === ESCAPE_KEY$2) {\n        return;\n      }\n\n      event.preventDefault();\n      event.stopPropagation();\n\n      if (isDisabled(this)) {\n        return;\n      }\n\n      const getToggleButton = () => this.matches(SELECTOR_DATA_TOGGLE$3) ? this : SelectorEngine.prev(this, SELECTOR_DATA_TOGGLE$3)[0];\n\n      if (event.key === ESCAPE_KEY$2) {\n        getToggleButton().focus();\n        Dropdown.clearMenus();\n        return;\n      }\n\n      if (event.key === ARROW_UP_KEY || event.key === ARROW_DOWN_KEY) {\n        if (!isActive) {\n          getToggleButton().click();\n        }\n\n        Dropdown.getInstance(getToggleButton())._selectMenuItem(event);\n\n        return;\n      }\n\n      if (!isActive || event.key === SPACE_KEY) {\n        Dropdown.clearMenus();\n      }\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_DATA_TOGGLE$3, Dropdown.dataApiKeydownHandler);\n  EventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown.dataApiKeydownHandler);\n  EventHandler.on(document, EVENT_CLICK_DATA_API$3, Dropdown.clearMenus);\n  EventHandler.on(document, EVENT_KEYUP_DATA_API, Dropdown.clearMenus);\n  EventHandler.on(document, EVENT_CLICK_DATA_API$3, SELECTOR_DATA_TOGGLE$3, function (event) {\n    event.preventDefault();\n    Dropdown.dropdownInterface(this);\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Dropdown to jQuery only if jQuery is present\n   */\n\n  defineJQueryPlugin(Dropdown);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): util/scrollBar.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  const SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top';\n  const SELECTOR_STICKY_CONTENT = '.sticky-top';\n\n  class ScrollBarHelper {\n    constructor() {\n      this._element = document.body;\n    }\n\n    getWidth() {\n      // https://developer.mozilla.org/en-US/docs/Web/API/Window/innerWidth#usage_notes\n      const documentWidth = document.documentElement.clientWidth;\n      return Math.abs(window.innerWidth - documentWidth);\n    }\n\n    hide() {\n      const width = this.getWidth();\n\n      this._disableOverFlow(); // give padding to element to balance the hidden scrollbar width\n\n\n      this._setElementAttributes(this._element, 'paddingRight', calculatedValue => calculatedValue + width); // trick: We adjust positive paddingRight and negative marginRight to sticky-top elements to keep showing fullwidth\n\n\n      this._setElementAttributes(SELECTOR_FIXED_CONTENT, 'paddingRight', calculatedValue => calculatedValue + width);\n\n      this._setElementAttributes(SELECTOR_STICKY_CONTENT, 'marginRight', calculatedValue => calculatedValue - width);\n    }\n\n    _disableOverFlow() {\n      this._saveInitialAttribute(this._element, 'overflow');\n\n      this._element.style.overflow = 'hidden';\n    }\n\n    _setElementAttributes(selector, styleProp, callback) {\n      const scrollbarWidth = this.getWidth();\n\n      const manipulationCallBack = element => {\n        if (element !== this._element && window.innerWidth > element.clientWidth + scrollbarWidth) {\n          return;\n        }\n\n        this._saveInitialAttribute(element, styleProp);\n\n        const calculatedValue = window.getComputedStyle(element)[styleProp];\n        element.style[styleProp] = `${callback(Number.parseFloat(calculatedValue))}px`;\n      };\n\n      this._applyManipulationCallback(selector, manipulationCallBack);\n    }\n\n    reset() {\n      this._resetElementAttributes(this._element, 'overflow');\n\n      this._resetElementAttributes(this._element, 'paddingRight');\n\n      this._resetElementAttributes(SELECTOR_FIXED_CONTENT, 'paddingRight');\n\n      this._resetElementAttributes(SELECTOR_STICKY_CONTENT, 'marginRight');\n    }\n\n    _saveInitialAttribute(element, styleProp) {\n      const actualValue = element.style[styleProp];\n\n      if (actualValue) {\n        Manipulator.setDataAttribute(element, styleProp, actualValue);\n      }\n    }\n\n    _resetElementAttributes(selector, styleProp) {\n      const manipulationCallBack = element => {\n        const value = Manipulator.getDataAttribute(element, styleProp);\n\n        if (typeof value === 'undefined') {\n          element.style.removeProperty(styleProp);\n        } else {\n          Manipulator.removeDataAttribute(element, styleProp);\n          element.style[styleProp] = value;\n        }\n      };\n\n      this._applyManipulationCallback(selector, manipulationCallBack);\n    }\n\n    _applyManipulationCallback(selector, callBack) {\n      if (isElement$1(selector)) {\n        callBack(selector);\n      } else {\n        SelectorEngine.find(selector, this._element).forEach(callBack);\n      }\n    }\n\n    isOverflowing() {\n      return this.getWidth() > 0;\n    }\n\n  }\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): util/backdrop.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  const Default$6 = {\n    isVisible: true,\n    // if false, we use the backdrop helper without adding any element to the dom\n    isAnimated: false,\n    rootElement: 'body',\n    // give the choice to place backdrop under different elements\n    clickCallback: null\n  };\n  const DefaultType$6 = {\n    isVisible: 'boolean',\n    isAnimated: 'boolean',\n    rootElement: '(element|string)',\n    clickCallback: '(function|null)'\n  };\n  const NAME$7 = 'backdrop';\n  const CLASS_NAME_BACKDROP = 'modal-backdrop';\n  const CLASS_NAME_FADE$5 = 'fade';\n  const CLASS_NAME_SHOW$6 = 'show';\n  const EVENT_MOUSEDOWN = `mousedown.bs.${NAME$7}`;\n\n  class Backdrop {\n    constructor(config) {\n      this._config = this._getConfig(config);\n      this._isAppended = false;\n      this._element = null;\n    }\n\n    show(callback) {\n      if (!this._config.isVisible) {\n        execute(callback);\n        return;\n      }\n\n      this._append();\n\n      if (this._config.isAnimated) {\n        reflow(this._getElement());\n      }\n\n      this._getElement().classList.add(CLASS_NAME_SHOW$6);\n\n      this._emulateAnimation(() => {\n        execute(callback);\n      });\n    }\n\n    hide(callback) {\n      if (!this._config.isVisible) {\n        execute(callback);\n        return;\n      }\n\n      this._getElement().classList.remove(CLASS_NAME_SHOW$6);\n\n      this._emulateAnimation(() => {\n        this.dispose();\n        execute(callback);\n      });\n    } // Private\n\n\n    _getElement() {\n      if (!this._element) {\n        const backdrop = document.createElement('div');\n        backdrop.className = CLASS_NAME_BACKDROP;\n\n        if (this._config.isAnimated) {\n          backdrop.classList.add(CLASS_NAME_FADE$5);\n        }\n\n        this._element = backdrop;\n      }\n\n      return this._element;\n    }\n\n    _getConfig(config) {\n      config = { ...Default$6,\n        ...(typeof config === 'object' ? config : {})\n      }; // use getElement() with the default \"body\" to get a fresh Element on each instantiation\n\n      config.rootElement = getElement(config.rootElement);\n      typeCheckConfig(NAME$7, config, DefaultType$6);\n      return config;\n    }\n\n    _append() {\n      if (this._isAppended) {\n        return;\n      }\n\n      this._config.rootElement.appendChild(this._getElement());\n\n      EventHandler.on(this._getElement(), EVENT_MOUSEDOWN, () => {\n        execute(this._config.clickCallback);\n      });\n      this._isAppended = true;\n    }\n\n    dispose() {\n      if (!this._isAppended) {\n        return;\n      }\n\n      EventHandler.off(this._element, EVENT_MOUSEDOWN);\n\n      this._element.remove();\n\n      this._isAppended = false;\n    }\n\n    _emulateAnimation(callback) {\n      executeAfterTransition(callback, this._getElement(), this._config.isAnimated);\n    }\n\n  }\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): modal.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$6 = 'modal';\n  const DATA_KEY$6 = 'bs.modal';\n  const EVENT_KEY$6 = `.${DATA_KEY$6}`;\n  const DATA_API_KEY$3 = '.data-api';\n  const ESCAPE_KEY$1 = 'Escape';\n  const Default$5 = {\n    backdrop: true,\n    keyboard: true,\n    focus: true\n  };\n  const DefaultType$5 = {\n    backdrop: '(boolean|string)',\n    keyboard: 'boolean',\n    focus: 'boolean'\n  };\n  const EVENT_HIDE$3 = `hide${EVENT_KEY$6}`;\n  const EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY$6}`;\n  const EVENT_HIDDEN$3 = `hidden${EVENT_KEY$6}`;\n  const EVENT_SHOW$3 = `show${EVENT_KEY$6}`;\n  const EVENT_SHOWN$3 = `shown${EVENT_KEY$6}`;\n  const EVENT_FOCUSIN$2 = `focusin${EVENT_KEY$6}`;\n  const EVENT_RESIZE = `resize${EVENT_KEY$6}`;\n  const EVENT_CLICK_DISMISS$2 = `click.dismiss${EVENT_KEY$6}`;\n  const EVENT_KEYDOWN_DISMISS$1 = `keydown.dismiss${EVENT_KEY$6}`;\n  const EVENT_MOUSEUP_DISMISS = `mouseup.dismiss${EVENT_KEY$6}`;\n  const EVENT_MOUSEDOWN_DISMISS = `mousedown.dismiss${EVENT_KEY$6}`;\n  const EVENT_CLICK_DATA_API$2 = `click${EVENT_KEY$6}${DATA_API_KEY$3}`;\n  const CLASS_NAME_OPEN = 'modal-open';\n  const CLASS_NAME_FADE$4 = 'fade';\n  const CLASS_NAME_SHOW$5 = 'show';\n  const CLASS_NAME_STATIC = 'modal-static';\n  const SELECTOR_DIALOG = '.modal-dialog';\n  const SELECTOR_MODAL_BODY = '.modal-body';\n  const SELECTOR_DATA_TOGGLE$2 = '[data-bs-toggle=\"modal\"]';\n  const SELECTOR_DATA_DISMISS$2 = '[data-bs-dismiss=\"modal\"]';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Modal extends BaseComponent {\n    constructor(element, config) {\n      super(element);\n      this._config = this._getConfig(config);\n      this._dialog = SelectorEngine.findOne(SELECTOR_DIALOG, this._element);\n      this._backdrop = this._initializeBackDrop();\n      this._isShown = false;\n      this._ignoreBackdropClick = false;\n      this._isTransitioning = false;\n      this._scrollBar = new ScrollBarHelper();\n    } // Getters\n\n\n    static get Default() {\n      return Default$5;\n    }\n\n    static get NAME() {\n      return NAME$6;\n    } // Public\n\n\n    toggle(relatedTarget) {\n      return this._isShown ? this.hide() : this.show(relatedTarget);\n    }\n\n    show(relatedTarget) {\n      if (this._isShown || this._isTransitioning) {\n        return;\n      }\n\n      const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$3, {\n        relatedTarget\n      });\n\n      if (showEvent.defaultPrevented) {\n        return;\n      }\n\n      this._isShown = true;\n\n      if (this._isAnimated()) {\n        this._isTransitioning = true;\n      }\n\n      this._scrollBar.hide();\n\n      document.body.classList.add(CLASS_NAME_OPEN);\n\n      this._adjustDialog();\n\n      this._setEscapeEvent();\n\n      this._setResizeEvent();\n\n      EventHandler.on(this._element, EVENT_CLICK_DISMISS$2, SELECTOR_DATA_DISMISS$2, event => this.hide(event));\n      EventHandler.on(this._dialog, EVENT_MOUSEDOWN_DISMISS, () => {\n        EventHandler.one(this._element, EVENT_MOUSEUP_DISMISS, event => {\n          if (event.target === this._element) {\n            this._ignoreBackdropClick = true;\n          }\n        });\n      });\n\n      this._showBackdrop(() => this._showElement(relatedTarget));\n    }\n\n    hide(event) {\n      if (event && ['A', 'AREA'].includes(event.target.tagName)) {\n        event.preventDefault();\n      }\n\n      if (!this._isShown || this._isTransitioning) {\n        return;\n      }\n\n      const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$3);\n\n      if (hideEvent.defaultPrevented) {\n        return;\n      }\n\n      this._isShown = false;\n\n      const isAnimated = this._isAnimated();\n\n      if (isAnimated) {\n        this._isTransitioning = true;\n      }\n\n      this._setEscapeEvent();\n\n      this._setResizeEvent();\n\n      EventHandler.off(document, EVENT_FOCUSIN$2);\n\n      this._element.classList.remove(CLASS_NAME_SHOW$5);\n\n      EventHandler.off(this._element, EVENT_CLICK_DISMISS$2);\n      EventHandler.off(this._dialog, EVENT_MOUSEDOWN_DISMISS);\n\n      this._queueCallback(() => this._hideModal(), this._element, isAnimated);\n    }\n\n    dispose() {\n      [window, this._dialog].forEach(htmlElement => EventHandler.off(htmlElement, EVENT_KEY$6));\n\n      this._backdrop.dispose();\n\n      super.dispose();\n      /**\n       * `document` has 2 events `EVENT_FOCUSIN` and `EVENT_CLICK_DATA_API`\n       * Do not move `document` in `htmlElements` array\n       * It will remove `EVENT_CLICK_DATA_API` event that should remain\n       */\n\n      EventHandler.off(document, EVENT_FOCUSIN$2);\n    }\n\n    handleUpdate() {\n      this._adjustDialog();\n    } // Private\n\n\n    _initializeBackDrop() {\n      return new Backdrop({\n        isVisible: Boolean(this._config.backdrop),\n        // 'static' option will be translated to true, and booleans will keep their value\n        isAnimated: this._isAnimated()\n      });\n    }\n\n    _getConfig(config) {\n      config = { ...Default$5,\n        ...Manipulator.getDataAttributes(this._element),\n        ...(typeof config === 'object' ? config : {})\n      };\n      typeCheckConfig(NAME$6, config, DefaultType$5);\n      return config;\n    }\n\n    _showElement(relatedTarget) {\n      const isAnimated = this._isAnimated();\n\n      const modalBody = SelectorEngine.findOne(SELECTOR_MODAL_BODY, this._dialog);\n\n      if (!this._element.parentNode || this._element.parentNode.nodeType !== Node.ELEMENT_NODE) {\n        // Don't move modal's DOM position\n        document.body.appendChild(this._element);\n      }\n\n      this._element.style.display = 'block';\n\n      this._element.removeAttribute('aria-hidden');\n\n      this._element.setAttribute('aria-modal', true);\n\n      this._element.setAttribute('role', 'dialog');\n\n      this._element.scrollTop = 0;\n\n      if (modalBody) {\n        modalBody.scrollTop = 0;\n      }\n\n      if (isAnimated) {\n        reflow(this._element);\n      }\n\n      this._element.classList.add(CLASS_NAME_SHOW$5);\n\n      if (this._config.focus) {\n        this._enforceFocus();\n      }\n\n      const transitionComplete = () => {\n        if (this._config.focus) {\n          this._element.focus();\n        }\n\n        this._isTransitioning = false;\n        EventHandler.trigger(this._element, EVENT_SHOWN$3, {\n          relatedTarget\n        });\n      };\n\n      this._queueCallback(transitionComplete, this._dialog, isAnimated);\n    }\n\n    _enforceFocus() {\n      EventHandler.off(document, EVENT_FOCUSIN$2); // guard against infinite focus loop\n\n      EventHandler.on(document, EVENT_FOCUSIN$2, event => {\n        if (document !== event.target && this._element !== event.target && !this._element.contains(event.target)) {\n          this._element.focus();\n        }\n      });\n    }\n\n    _setEscapeEvent() {\n      if (this._isShown) {\n        EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS$1, event => {\n          if (this._config.keyboard && event.key === ESCAPE_KEY$1) {\n            event.preventDefault();\n            this.hide();\n          } else if (!this._config.keyboard && event.key === ESCAPE_KEY$1) {\n            this._triggerBackdropTransition();\n          }\n        });\n      } else {\n        EventHandler.off(this._element, EVENT_KEYDOWN_DISMISS$1);\n      }\n    }\n\n    _setResizeEvent() {\n      if (this._isShown) {\n        EventHandler.on(window, EVENT_RESIZE, () => this._adjustDialog());\n      } else {\n        EventHandler.off(window, EVENT_RESIZE);\n      }\n    }\n\n    _hideModal() {\n      this._element.style.display = 'none';\n\n      this._element.setAttribute('aria-hidden', true);\n\n      this._element.removeAttribute('aria-modal');\n\n      this._element.removeAttribute('role');\n\n      this._isTransitioning = false;\n\n      this._backdrop.hide(() => {\n        document.body.classList.remove(CLASS_NAME_OPEN);\n\n        this._resetAdjustments();\n\n        this._scrollBar.reset();\n\n        EventHandler.trigger(this._element, EVENT_HIDDEN$3);\n      });\n    }\n\n    _showBackdrop(callback) {\n      EventHandler.on(this._element, EVENT_CLICK_DISMISS$2, event => {\n        if (this._ignoreBackdropClick) {\n          this._ignoreBackdropClick = false;\n          return;\n        }\n\n        if (event.target !== event.currentTarget) {\n          return;\n        }\n\n        if (this._config.backdrop === true) {\n          this.hide();\n        } else if (this._config.backdrop === 'static') {\n          this._triggerBackdropTransition();\n        }\n      });\n\n      this._backdrop.show(callback);\n    }\n\n    _isAnimated() {\n      return this._element.classList.contains(CLASS_NAME_FADE$4);\n    }\n\n    _triggerBackdropTransition() {\n      const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED);\n\n      if (hideEvent.defaultPrevented) {\n        return;\n      }\n\n      const {\n        classList,\n        scrollHeight,\n        style\n      } = this._element;\n      const isModalOverflowing = scrollHeight > document.documentElement.clientHeight; // return if the following background transition hasn't yet completed\n\n      if (!isModalOverflowing && style.overflowY === 'hidden' || classList.contains(CLASS_NAME_STATIC)) {\n        return;\n      }\n\n      if (!isModalOverflowing) {\n        style.overflowY = 'hidden';\n      }\n\n      classList.add(CLASS_NAME_STATIC);\n\n      this._queueCallback(() => {\n        classList.remove(CLASS_NAME_STATIC);\n\n        if (!isModalOverflowing) {\n          this._queueCallback(() => {\n            style.overflowY = '';\n          }, this._dialog);\n        }\n      }, this._dialog);\n\n      this._element.focus();\n    } // ----------------------------------------------------------------------\n    // the following methods are used to handle overflowing modals\n    // ----------------------------------------------------------------------\n\n\n    _adjustDialog() {\n      const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;\n\n      const scrollbarWidth = this._scrollBar.getWidth();\n\n      const isBodyOverflowing = scrollbarWidth > 0;\n\n      if (!isBodyOverflowing && isModalOverflowing && !isRTL() || isBodyOverflowing && !isModalOverflowing && isRTL()) {\n        this._element.style.paddingLeft = `${scrollbarWidth}px`;\n      }\n\n      if (isBodyOverflowing && !isModalOverflowing && !isRTL() || !isBodyOverflowing && isModalOverflowing && isRTL()) {\n        this._element.style.paddingRight = `${scrollbarWidth}px`;\n      }\n    }\n\n    _resetAdjustments() {\n      this._element.style.paddingLeft = '';\n      this._element.style.paddingRight = '';\n    } // Static\n\n\n    static jQueryInterface(config, relatedTarget) {\n      return this.each(function () {\n        const data = Modal.getOrCreateInstance(this, config);\n\n        if (typeof config !== 'string') {\n          return;\n        }\n\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config](relatedTarget);\n      });\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(document, EVENT_CLICK_DATA_API$2, SELECTOR_DATA_TOGGLE$2, function (event) {\n    const target = getElementFromSelector(this);\n\n    if (['A', 'AREA'].includes(this.tagName)) {\n      event.preventDefault();\n    }\n\n    EventHandler.one(target, EVENT_SHOW$3, showEvent => {\n      if (showEvent.defaultPrevented) {\n        // only register focus restorer if modal will actually get shown\n        return;\n      }\n\n      EventHandler.one(target, EVENT_HIDDEN$3, () => {\n        if (isVisible(this)) {\n          this.focus();\n        }\n      });\n    });\n    const data = Modal.getOrCreateInstance(target);\n    data.toggle(this);\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Modal to jQuery only if jQuery is present\n   */\n\n  defineJQueryPlugin(Modal);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): offcanvas.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$5 = 'offcanvas';\n  const DATA_KEY$5 = 'bs.offcanvas';\n  const EVENT_KEY$5 = `.${DATA_KEY$5}`;\n  const DATA_API_KEY$2 = '.data-api';\n  const EVENT_LOAD_DATA_API$1 = `load${EVENT_KEY$5}${DATA_API_KEY$2}`;\n  const ESCAPE_KEY = 'Escape';\n  const Default$4 = {\n    backdrop: true,\n    keyboard: true,\n    scroll: false\n  };\n  const DefaultType$4 = {\n    backdrop: 'boolean',\n    keyboard: 'boolean',\n    scroll: 'boolean'\n  };\n  const CLASS_NAME_SHOW$4 = 'show';\n  const OPEN_SELECTOR = '.offcanvas.show';\n  const EVENT_SHOW$2 = `show${EVENT_KEY$5}`;\n  const EVENT_SHOWN$2 = `shown${EVENT_KEY$5}`;\n  const EVENT_HIDE$2 = `hide${EVENT_KEY$5}`;\n  const EVENT_HIDDEN$2 = `hidden${EVENT_KEY$5}`;\n  const EVENT_FOCUSIN$1 = `focusin${EVENT_KEY$5}`;\n  const EVENT_CLICK_DATA_API$1 = `click${EVENT_KEY$5}${DATA_API_KEY$2}`;\n  const EVENT_CLICK_DISMISS$1 = `click.dismiss${EVENT_KEY$5}`;\n  const EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY$5}`;\n  const SELECTOR_DATA_DISMISS$1 = '[data-bs-dismiss=\"offcanvas\"]';\n  const SELECTOR_DATA_TOGGLE$1 = '[data-bs-toggle=\"offcanvas\"]';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Offcanvas extends BaseComponent {\n    constructor(element, config) {\n      super(element);\n      this._config = this._getConfig(config);\n      this._isShown = false;\n      this._backdrop = this._initializeBackDrop();\n\n      this._addEventListeners();\n    } // Getters\n\n\n    static get NAME() {\n      return NAME$5;\n    }\n\n    static get Default() {\n      return Default$4;\n    } // Public\n\n\n    toggle(relatedTarget) {\n      return this._isShown ? this.hide() : this.show(relatedTarget);\n    }\n\n    show(relatedTarget) {\n      if (this._isShown) {\n        return;\n      }\n\n      const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$2, {\n        relatedTarget\n      });\n\n      if (showEvent.defaultPrevented) {\n        return;\n      }\n\n      this._isShown = true;\n      this._element.style.visibility = 'visible';\n\n      this._backdrop.show();\n\n      if (!this._config.scroll) {\n        new ScrollBarHelper().hide();\n\n        this._enforceFocusOnElement(this._element);\n      }\n\n      this._element.removeAttribute('aria-hidden');\n\n      this._element.setAttribute('aria-modal', true);\n\n      this._element.setAttribute('role', 'dialog');\n\n      this._element.classList.add(CLASS_NAME_SHOW$4);\n\n      const completeCallBack = () => {\n        EventHandler.trigger(this._element, EVENT_SHOWN$2, {\n          relatedTarget\n        });\n      };\n\n      this._queueCallback(completeCallBack, this._element, true);\n    }\n\n    hide() {\n      if (!this._isShown) {\n        return;\n      }\n\n      const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$2);\n\n      if (hideEvent.defaultPrevented) {\n        return;\n      }\n\n      EventHandler.off(document, EVENT_FOCUSIN$1);\n\n      this._element.blur();\n\n      this._isShown = false;\n\n      this._element.classList.remove(CLASS_NAME_SHOW$4);\n\n      this._backdrop.hide();\n\n      const completeCallback = () => {\n        this._element.setAttribute('aria-hidden', true);\n\n        this._element.removeAttribute('aria-modal');\n\n        this._element.removeAttribute('role');\n\n        this._element.style.visibility = 'hidden';\n\n        if (!this._config.scroll) {\n          new ScrollBarHelper().reset();\n        }\n\n        EventHandler.trigger(this._element, EVENT_HIDDEN$2);\n      };\n\n      this._queueCallback(completeCallback, this._element, true);\n    }\n\n    dispose() {\n      this._backdrop.dispose();\n\n      super.dispose();\n      EventHandler.off(document, EVENT_FOCUSIN$1);\n    } // Private\n\n\n    _getConfig(config) {\n      config = { ...Default$4,\n        ...Manipulator.getDataAttributes(this._element),\n        ...(typeof config === 'object' ? config : {})\n      };\n      typeCheckConfig(NAME$5, config, DefaultType$4);\n      return config;\n    }\n\n    _initializeBackDrop() {\n      return new Backdrop({\n        isVisible: this._config.backdrop,\n        isAnimated: true,\n        rootElement: this._element.parentNode,\n        clickCallback: () => this.hide()\n      });\n    }\n\n    _enforceFocusOnElement(element) {\n      EventHandler.off(document, EVENT_FOCUSIN$1); // guard against infinite focus loop\n\n      EventHandler.on(document, EVENT_FOCUSIN$1, event => {\n        if (document !== event.target && element !== event.target && !element.contains(event.target)) {\n          element.focus();\n        }\n      });\n      element.focus();\n    }\n\n    _addEventListeners() {\n      EventHandler.on(this._element, EVENT_CLICK_DISMISS$1, SELECTOR_DATA_DISMISS$1, () => this.hide());\n      EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS, event => {\n        if (this._config.keyboard && event.key === ESCAPE_KEY) {\n          this.hide();\n        }\n      });\n    } // Static\n\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = Offcanvas.getOrCreateInstance(this, config);\n\n        if (typeof config !== 'string') {\n          return;\n        }\n\n        if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config](this);\n      });\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(document, EVENT_CLICK_DATA_API$1, SELECTOR_DATA_TOGGLE$1, function (event) {\n    const target = getElementFromSelector(this);\n\n    if (['A', 'AREA'].includes(this.tagName)) {\n      event.preventDefault();\n    }\n\n    if (isDisabled(this)) {\n      return;\n    }\n\n    EventHandler.one(target, EVENT_HIDDEN$2, () => {\n      // focus on trigger when it is closed\n      if (isVisible(this)) {\n        this.focus();\n      }\n    }); // avoid conflict when clicking a toggler of an offcanvas, while another is open\n\n    const allReadyOpen = SelectorEngine.findOne(OPEN_SELECTOR);\n\n    if (allReadyOpen && allReadyOpen !== target) {\n      Offcanvas.getInstance(allReadyOpen).hide();\n    }\n\n    const data = Offcanvas.getOrCreateInstance(target);\n    data.toggle(this);\n  });\n  EventHandler.on(window, EVENT_LOAD_DATA_API$1, () => SelectorEngine.find(OPEN_SELECTOR).forEach(el => Offcanvas.getOrCreateInstance(el).show()));\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   */\n\n  defineJQueryPlugin(Offcanvas);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): util/sanitizer.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  const uriAttrs = new Set(['background', 'cite', 'href', 'itemtype', 'longdesc', 'poster', 'src', 'xlink:href']);\n  const ARIA_ATTRIBUTE_PATTERN = /^aria-[\\w-]*$/i;\n  /**\n   * A pattern that recognizes a commonly useful subset of URLs that are safe.\n   *\n   * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts\n   */\n\n  const SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file):|[^#&/:?]*(?:[#/?]|$))/i;\n  /**\n   * A pattern that matches safe data URLs. Only matches image, video and audio types.\n   *\n   * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts\n   */\n\n  const DATA_URL_PATTERN = /^data:(?:image\\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\\/(?:mpeg|mp4|ogg|webm)|audio\\/(?:mp3|oga|ogg|opus));base64,[\\d+/a-z]+=*$/i;\n\n  const allowedAttribute = (attr, allowedAttributeList) => {\n    const attrName = attr.nodeName.toLowerCase();\n\n    if (allowedAttributeList.includes(attrName)) {\n      if (uriAttrs.has(attrName)) {\n        return Boolean(SAFE_URL_PATTERN.test(attr.nodeValue) || DATA_URL_PATTERN.test(attr.nodeValue));\n      }\n\n      return true;\n    }\n\n    const regExp = allowedAttributeList.filter(attrRegex => attrRegex instanceof RegExp); // Check if a regular expression validates the attribute.\n\n    for (let i = 0, len = regExp.length; i < len; i++) {\n      if (regExp[i].test(attrName)) {\n        return true;\n      }\n    }\n\n    return false;\n  };\n\n  const DefaultAllowlist = {\n    // Global attributes allowed on any supplied element below.\n    '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],\n    a: ['target', 'href', 'title', 'rel'],\n    area: [],\n    b: [],\n    br: [],\n    col: [],\n    code: [],\n    div: [],\n    em: [],\n    hr: [],\n    h1: [],\n    h2: [],\n    h3: [],\n    h4: [],\n    h5: [],\n    h6: [],\n    i: [],\n    img: ['src', 'srcset', 'alt', 'title', 'width', 'height'],\n    li: [],\n    ol: [],\n    p: [],\n    pre: [],\n    s: [],\n    small: [],\n    span: [],\n    sub: [],\n    sup: [],\n    strong: [],\n    u: [],\n    ul: []\n  };\n  function sanitizeHtml(unsafeHtml, allowList, sanitizeFn) {\n    if (!unsafeHtml.length) {\n      return unsafeHtml;\n    }\n\n    if (sanitizeFn && typeof sanitizeFn === 'function') {\n      return sanitizeFn(unsafeHtml);\n    }\n\n    const domParser = new window.DOMParser();\n    const createdDocument = domParser.parseFromString(unsafeHtml, 'text/html');\n    const allowlistKeys = Object.keys(allowList);\n    const elements = [].concat(...createdDocument.body.querySelectorAll('*'));\n\n    for (let i = 0, len = elements.length; i < len; i++) {\n      const el = elements[i];\n      const elName = el.nodeName.toLowerCase();\n\n      if (!allowlistKeys.includes(elName)) {\n        el.remove();\n        continue;\n      }\n\n      const attributeList = [].concat(...el.attributes);\n      const allowedAttributes = [].concat(allowList['*'] || [], allowList[elName] || []);\n      attributeList.forEach(attr => {\n        if (!allowedAttribute(attr, allowedAttributes)) {\n          el.removeAttribute(attr.nodeName);\n        }\n      });\n    }\n\n    return createdDocument.body.innerHTML;\n  }\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): tooltip.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$4 = 'tooltip';\n  const DATA_KEY$4 = 'bs.tooltip';\n  const EVENT_KEY$4 = `.${DATA_KEY$4}`;\n  const CLASS_PREFIX$1 = 'bs-tooltip';\n  const BSCLS_PREFIX_REGEX$1 = new RegExp(`(^|\\\\s)${CLASS_PREFIX$1}\\\\S+`, 'g');\n  const DISALLOWED_ATTRIBUTES = new Set(['sanitize', 'allowList', 'sanitizeFn']);\n  const DefaultType$3 = {\n    animation: 'boolean',\n    template: 'string',\n    title: '(string|element|function)',\n    trigger: 'string',\n    delay: '(number|object)',\n    html: 'boolean',\n    selector: '(string|boolean)',\n    placement: '(string|function)',\n    offset: '(array|string|function)',\n    container: '(string|element|boolean)',\n    fallbackPlacements: 'array',\n    boundary: '(string|element)',\n    customClass: '(string|function)',\n    sanitize: 'boolean',\n    sanitizeFn: '(null|function)',\n    allowList: 'object',\n    popperConfig: '(null|object|function)'\n  };\n  const AttachmentMap = {\n    AUTO: 'auto',\n    TOP: 'top',\n    RIGHT: isRTL() ? 'left' : 'right',\n    BOTTOM: 'bottom',\n    LEFT: isRTL() ? 'right' : 'left'\n  };\n  const Default$3 = {\n    animation: true,\n    template: '<div class=\"tooltip\" role=\"tooltip\">' + '<div class=\"tooltip-arrow\"></div>' + '<div class=\"tooltip-inner\"></div>' + '</div>',\n    trigger: 'hover focus',\n    title: '',\n    delay: 0,\n    html: false,\n    selector: false,\n    placement: 'top',\n    offset: [0, 0],\n    container: false,\n    fallbackPlacements: ['top', 'right', 'bottom', 'left'],\n    boundary: 'clippingParents',\n    customClass: '',\n    sanitize: true,\n    sanitizeFn: null,\n    allowList: DefaultAllowlist,\n    popperConfig: null\n  };\n  const Event$2 = {\n    HIDE: `hide${EVENT_KEY$4}`,\n    HIDDEN: `hidden${EVENT_KEY$4}`,\n    SHOW: `show${EVENT_KEY$4}`,\n    SHOWN: `shown${EVENT_KEY$4}`,\n    INSERTED: `inserted${EVENT_KEY$4}`,\n    CLICK: `click${EVENT_KEY$4}`,\n    FOCUSIN: `focusin${EVENT_KEY$4}`,\n    FOCUSOUT: `focusout${EVENT_KEY$4}`,\n    MOUSEENTER: `mouseenter${EVENT_KEY$4}`,\n    MOUSELEAVE: `mouseleave${EVENT_KEY$4}`\n  };\n  const CLASS_NAME_FADE$3 = 'fade';\n  const CLASS_NAME_MODAL = 'modal';\n  const CLASS_NAME_SHOW$3 = 'show';\n  const HOVER_STATE_SHOW = 'show';\n  const HOVER_STATE_OUT = 'out';\n  const SELECTOR_TOOLTIP_INNER = '.tooltip-inner';\n  const TRIGGER_HOVER = 'hover';\n  const TRIGGER_FOCUS = 'focus';\n  const TRIGGER_CLICK = 'click';\n  const TRIGGER_MANUAL = 'manual';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Tooltip extends BaseComponent {\n    constructor(element, config) {\n      if (typeof Popper === 'undefined') {\n        throw new TypeError('Bootstrap\\'s tooltips require Popper (https://popper.js.org)');\n      }\n\n      super(element); // private\n\n      this._isEnabled = true;\n      this._timeout = 0;\n      this._hoverState = '';\n      this._activeTrigger = {};\n      this._popper = null; // Protected\n\n      this._config = this._getConfig(config);\n      this.tip = null;\n\n      this._setListeners();\n    } // Getters\n\n\n    static get Default() {\n      return Default$3;\n    }\n\n    static get NAME() {\n      return NAME$4;\n    }\n\n    static get Event() {\n      return Event$2;\n    }\n\n    static get DefaultType() {\n      return DefaultType$3;\n    } // Public\n\n\n    enable() {\n      this._isEnabled = true;\n    }\n\n    disable() {\n      this._isEnabled = false;\n    }\n\n    toggleEnabled() {\n      this._isEnabled = !this._isEnabled;\n    }\n\n    toggle(event) {\n      if (!this._isEnabled) {\n        return;\n      }\n\n      if (event) {\n        const context = this._initializeOnDelegatedTarget(event);\n\n        context._activeTrigger.click = !context._activeTrigger.click;\n\n        if (context._isWithActiveTrigger()) {\n          context._enter(null, context);\n        } else {\n          context._leave(null, context);\n        }\n      } else {\n        if (this.getTipElement().classList.contains(CLASS_NAME_SHOW$3)) {\n          this._leave(null, this);\n\n          return;\n        }\n\n        this._enter(null, this);\n      }\n    }\n\n    dispose() {\n      clearTimeout(this._timeout);\n      EventHandler.off(this._element.closest(`.${CLASS_NAME_MODAL}`), 'hide.bs.modal', this._hideModalHandler);\n\n      if (this.tip) {\n        this.tip.remove();\n      }\n\n      if (this._popper) {\n        this._popper.destroy();\n      }\n\n      super.dispose();\n    }\n\n    show() {\n      if (this._element.style.display === 'none') {\n        throw new Error('Please use show on visible elements');\n      }\n\n      if (!(this.isWithContent() && this._isEnabled)) {\n        return;\n      }\n\n      const showEvent = EventHandler.trigger(this._element, this.constructor.Event.SHOW);\n      const shadowRoot = findShadowRoot(this._element);\n      const isInTheDom = shadowRoot === null ? this._element.ownerDocument.documentElement.contains(this._element) : shadowRoot.contains(this._element);\n\n      if (showEvent.defaultPrevented || !isInTheDom) {\n        return;\n      }\n\n      const tip = this.getTipElement();\n      const tipId = getUID(this.constructor.NAME);\n      tip.setAttribute('id', tipId);\n\n      this._element.setAttribute('aria-describedby', tipId);\n\n      this.setContent();\n\n      if (this._config.animation) {\n        tip.classList.add(CLASS_NAME_FADE$3);\n      }\n\n      const placement = typeof this._config.placement === 'function' ? this._config.placement.call(this, tip, this._element) : this._config.placement;\n\n      const attachment = this._getAttachment(placement);\n\n      this._addAttachmentClass(attachment);\n\n      const {\n        container\n      } = this._config;\n      Data.set(tip, this.constructor.DATA_KEY, this);\n\n      if (!this._element.ownerDocument.documentElement.contains(this.tip)) {\n        container.appendChild(tip);\n        EventHandler.trigger(this._element, this.constructor.Event.INSERTED);\n      }\n\n      if (this._popper) {\n        this._popper.update();\n      } else {\n        this._popper = createPopper(this._element, tip, this._getPopperConfig(attachment));\n      }\n\n      tip.classList.add(CLASS_NAME_SHOW$3);\n      const customClass = typeof this._config.customClass === 'function' ? this._config.customClass() : this._config.customClass;\n\n      if (customClass) {\n        tip.classList.add(...customClass.split(' '));\n      } // If this is a touch-enabled device we add extra\n      // empty mouseover listeners to the body's immediate children;\n      // only needed because of broken event delegation on iOS\n      // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n\n\n      if ('ontouchstart' in document.documentElement) {\n        [].concat(...document.body.children).forEach(element => {\n          EventHandler.on(element, 'mouseover', noop);\n        });\n      }\n\n      const complete = () => {\n        const prevHoverState = this._hoverState;\n        this._hoverState = null;\n        EventHandler.trigger(this._element, this.constructor.Event.SHOWN);\n\n        if (prevHoverState === HOVER_STATE_OUT) {\n          this._leave(null, this);\n        }\n      };\n\n      const isAnimated = this.tip.classList.contains(CLASS_NAME_FADE$3);\n\n      this._queueCallback(complete, this.tip, isAnimated);\n    }\n\n    hide() {\n      if (!this._popper) {\n        return;\n      }\n\n      const tip = this.getTipElement();\n\n      const complete = () => {\n        if (this._isWithActiveTrigger()) {\n          return;\n        }\n\n        if (this._hoverState !== HOVER_STATE_SHOW) {\n          tip.remove();\n        }\n\n        this._cleanTipClass();\n\n        this._element.removeAttribute('aria-describedby');\n\n        EventHandler.trigger(this._element, this.constructor.Event.HIDDEN);\n\n        if (this._popper) {\n          this._popper.destroy();\n\n          this._popper = null;\n        }\n      };\n\n      const hideEvent = EventHandler.trigger(this._element, this.constructor.Event.HIDE);\n\n      if (hideEvent.defaultPrevented) {\n        return;\n      }\n\n      tip.classList.remove(CLASS_NAME_SHOW$3); // If this is a touch-enabled device we remove the extra\n      // empty mouseover listeners we added for iOS support\n\n      if ('ontouchstart' in document.documentElement) {\n        [].concat(...document.body.children).forEach(element => EventHandler.off(element, 'mouseover', noop));\n      }\n\n      this._activeTrigger[TRIGGER_CLICK] = false;\n      this._activeTrigger[TRIGGER_FOCUS] = false;\n      this._activeTrigger[TRIGGER_HOVER] = false;\n      const isAnimated = this.tip.classList.contains(CLASS_NAME_FADE$3);\n\n      this._queueCallback(complete, this.tip, isAnimated);\n\n      this._hoverState = '';\n    }\n\n    update() {\n      if (this._popper !== null) {\n        this._popper.update();\n      }\n    } // Protected\n\n\n    isWithContent() {\n      return Boolean(this.getTitle());\n    }\n\n    getTipElement() {\n      if (this.tip) {\n        return this.tip;\n      }\n\n      const element = document.createElement('div');\n      element.innerHTML = this._config.template;\n      this.tip = element.children[0];\n      return this.tip;\n    }\n\n    setContent() {\n      const tip = this.getTipElement();\n      this.setElementContent(SelectorEngine.findOne(SELECTOR_TOOLTIP_INNER, tip), this.getTitle());\n      tip.classList.remove(CLASS_NAME_FADE$3, CLASS_NAME_SHOW$3);\n    }\n\n    setElementContent(element, content) {\n      if (element === null) {\n        return;\n      }\n\n      if (isElement$1(content)) {\n        content = getElement(content); // content is a DOM node or a jQuery\n\n        if (this._config.html) {\n          if (content.parentNode !== element) {\n            element.innerHTML = '';\n            element.appendChild(content);\n          }\n        } else {\n          element.textContent = content.textContent;\n        }\n\n        return;\n      }\n\n      if (this._config.html) {\n        if (this._config.sanitize) {\n          content = sanitizeHtml(content, this._config.allowList, this._config.sanitizeFn);\n        }\n\n        element.innerHTML = content;\n      } else {\n        element.textContent = content;\n      }\n    }\n\n    getTitle() {\n      let title = this._element.getAttribute('data-bs-original-title');\n\n      if (!title) {\n        title = typeof this._config.title === 'function' ? this._config.title.call(this._element) : this._config.title;\n      }\n\n      return title;\n    }\n\n    updateAttachment(attachment) {\n      if (attachment === 'right') {\n        return 'end';\n      }\n\n      if (attachment === 'left') {\n        return 'start';\n      }\n\n      return attachment;\n    } // Private\n\n\n    _initializeOnDelegatedTarget(event, context) {\n      const dataKey = this.constructor.DATA_KEY;\n      context = context || Data.get(event.delegateTarget, dataKey);\n\n      if (!context) {\n        context = new this.constructor(event.delegateTarget, this._getDelegateConfig());\n        Data.set(event.delegateTarget, dataKey, context);\n      }\n\n      return context;\n    }\n\n    _getOffset() {\n      const {\n        offset\n      } = this._config;\n\n      if (typeof offset === 'string') {\n        return offset.split(',').map(val => Number.parseInt(val, 10));\n      }\n\n      if (typeof offset === 'function') {\n        return popperData => offset(popperData, this._element);\n      }\n\n      return offset;\n    }\n\n    _getPopperConfig(attachment) {\n      const defaultBsPopperConfig = {\n        placement: attachment,\n        modifiers: [{\n          name: 'flip',\n          options: {\n            fallbackPlacements: this._config.fallbackPlacements\n          }\n        }, {\n          name: 'offset',\n          options: {\n            offset: this._getOffset()\n          }\n        }, {\n          name: 'preventOverflow',\n          options: {\n            boundary: this._config.boundary\n          }\n        }, {\n          name: 'arrow',\n          options: {\n            element: `.${this.constructor.NAME}-arrow`\n          }\n        }, {\n          name: 'onChange',\n          enabled: true,\n          phase: 'afterWrite',\n          fn: data => this._handlePopperPlacementChange(data)\n        }],\n        onFirstUpdate: data => {\n          if (data.options.placement !== data.placement) {\n            this._handlePopperPlacementChange(data);\n          }\n        }\n      };\n      return { ...defaultBsPopperConfig,\n        ...(typeof this._config.popperConfig === 'function' ? this._config.popperConfig(defaultBsPopperConfig) : this._config.popperConfig)\n      };\n    }\n\n    _addAttachmentClass(attachment) {\n      this.getTipElement().classList.add(`${CLASS_PREFIX$1}-${this.updateAttachment(attachment)}`);\n    }\n\n    _getAttachment(placement) {\n      return AttachmentMap[placement.toUpperCase()];\n    }\n\n    _setListeners() {\n      const triggers = this._config.trigger.split(' ');\n\n      triggers.forEach(trigger => {\n        if (trigger === 'click') {\n          EventHandler.on(this._element, this.constructor.Event.CLICK, this._config.selector, event => this.toggle(event));\n        } else if (trigger !== TRIGGER_MANUAL) {\n          const eventIn = trigger === TRIGGER_HOVER ? this.constructor.Event.MOUSEENTER : this.constructor.Event.FOCUSIN;\n          const eventOut = trigger === TRIGGER_HOVER ? this.constructor.Event.MOUSELEAVE : this.constructor.Event.FOCUSOUT;\n          EventHandler.on(this._element, eventIn, this._config.selector, event => this._enter(event));\n          EventHandler.on(this._element, eventOut, this._config.selector, event => this._leave(event));\n        }\n      });\n\n      this._hideModalHandler = () => {\n        if (this._element) {\n          this.hide();\n        }\n      };\n\n      EventHandler.on(this._element.closest(`.${CLASS_NAME_MODAL}`), 'hide.bs.modal', this._hideModalHandler);\n\n      if (this._config.selector) {\n        this._config = { ...this._config,\n          trigger: 'manual',\n          selector: ''\n        };\n      } else {\n        this._fixTitle();\n      }\n    }\n\n    _fixTitle() {\n      const title = this._element.getAttribute('title');\n\n      const originalTitleType = typeof this._element.getAttribute('data-bs-original-title');\n\n      if (title || originalTitleType !== 'string') {\n        this._element.setAttribute('data-bs-original-title', title || '');\n\n        if (title && !this._element.getAttribute('aria-label') && !this._element.textContent) {\n          this._element.setAttribute('aria-label', title);\n        }\n\n        this._element.setAttribute('title', '');\n      }\n    }\n\n    _enter(event, context) {\n      context = this._initializeOnDelegatedTarget(event, context);\n\n      if (event) {\n        context._activeTrigger[event.type === 'focusin' ? TRIGGER_FOCUS : TRIGGER_HOVER] = true;\n      }\n\n      if (context.getTipElement().classList.contains(CLASS_NAME_SHOW$3) || context._hoverState === HOVER_STATE_SHOW) {\n        context._hoverState = HOVER_STATE_SHOW;\n        return;\n      }\n\n      clearTimeout(context._timeout);\n      context._hoverState = HOVER_STATE_SHOW;\n\n      if (!context._config.delay || !context._config.delay.show) {\n        context.show();\n        return;\n      }\n\n      context._timeout = setTimeout(() => {\n        if (context._hoverState === HOVER_STATE_SHOW) {\n          context.show();\n        }\n      }, context._config.delay.show);\n    }\n\n    _leave(event, context) {\n      context = this._initializeOnDelegatedTarget(event, context);\n\n      if (event) {\n        context._activeTrigger[event.type === 'focusout' ? TRIGGER_FOCUS : TRIGGER_HOVER] = context._element.contains(event.relatedTarget);\n      }\n\n      if (context._isWithActiveTrigger()) {\n        return;\n      }\n\n      clearTimeout(context._timeout);\n      context._hoverState = HOVER_STATE_OUT;\n\n      if (!context._config.delay || !context._config.delay.hide) {\n        context.hide();\n        return;\n      }\n\n      context._timeout = setTimeout(() => {\n        if (context._hoverState === HOVER_STATE_OUT) {\n          context.hide();\n        }\n      }, context._config.delay.hide);\n    }\n\n    _isWithActiveTrigger() {\n      for (const trigger in this._activeTrigger) {\n        if (this._activeTrigger[trigger]) {\n          return true;\n        }\n      }\n\n      return false;\n    }\n\n    _getConfig(config) {\n      const dataAttributes = Manipulator.getDataAttributes(this._element);\n      Object.keys(dataAttributes).forEach(dataAttr => {\n        if (DISALLOWED_ATTRIBUTES.has(dataAttr)) {\n          delete dataAttributes[dataAttr];\n        }\n      });\n      config = { ...this.constructor.Default,\n        ...dataAttributes,\n        ...(typeof config === 'object' && config ? config : {})\n      };\n      config.container = config.container === false ? document.body : getElement(config.container);\n\n      if (typeof config.delay === 'number') {\n        config.delay = {\n          show: config.delay,\n          hide: config.delay\n        };\n      }\n\n      if (typeof config.title === 'number') {\n        config.title = config.title.toString();\n      }\n\n      if (typeof config.content === 'number') {\n        config.content = config.content.toString();\n      }\n\n      typeCheckConfig(NAME$4, config, this.constructor.DefaultType);\n\n      if (config.sanitize) {\n        config.template = sanitizeHtml(config.template, config.allowList, config.sanitizeFn);\n      }\n\n      return config;\n    }\n\n    _getDelegateConfig() {\n      const config = {};\n\n      if (this._config) {\n        for (const key in this._config) {\n          if (this.constructor.Default[key] !== this._config[key]) {\n            config[key] = this._config[key];\n          }\n        }\n      }\n\n      return config;\n    }\n\n    _cleanTipClass() {\n      const tip = this.getTipElement();\n      const tabClass = tip.getAttribute('class').match(BSCLS_PREFIX_REGEX$1);\n\n      if (tabClass !== null && tabClass.length > 0) {\n        tabClass.map(token => token.trim()).forEach(tClass => tip.classList.remove(tClass));\n      }\n    }\n\n    _handlePopperPlacementChange(popperData) {\n      const {\n        state\n      } = popperData;\n\n      if (!state) {\n        return;\n      }\n\n      this.tip = state.elements.popper;\n\n      this._cleanTipClass();\n\n      this._addAttachmentClass(this._getAttachment(state.placement));\n    } // Static\n\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = Tooltip.getOrCreateInstance(this, config);\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(`No method named \"${config}\"`);\n          }\n\n          data[config]();\n        }\n      });\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Tooltip to jQuery only if jQuery is present\n   */\n\n\n  defineJQueryPlugin(Tooltip);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): popover.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$3 = 'popover';\n  const DATA_KEY$3 = 'bs.popover';\n  const EVENT_KEY$3 = `.${DATA_KEY$3}`;\n  const CLASS_PREFIX = 'bs-popover';\n  const BSCLS_PREFIX_REGEX = new RegExp(`(^|\\\\s)${CLASS_PREFIX}\\\\S+`, 'g');\n  const Default$2 = { ...Tooltip.Default,\n    placement: 'right',\n    offset: [0, 8],\n    trigger: 'click',\n    content: '',\n    template: '<div class=\"popover\" role=\"tooltip\">' + '<div class=\"popover-arrow\"></div>' + '<h3 class=\"popover-header\"></h3>' + '<div class=\"popover-body\"></div>' + '</div>'\n  };\n  const DefaultType$2 = { ...Tooltip.DefaultType,\n    content: '(string|element|function)'\n  };\n  const Event$1 = {\n    HIDE: `hide${EVENT_KEY$3}`,\n    HIDDEN: `hidden${EVENT_KEY$3}`,\n    SHOW: `show${EVENT_KEY$3}`,\n    SHOWN: `shown${EVENT_KEY$3}`,\n    INSERTED: `inserted${EVENT_KEY$3}`,\n    CLICK: `click${EVENT_KEY$3}`,\n    FOCUSIN: `focusin${EVENT_KEY$3}`,\n    FOCUSOUT: `focusout${EVENT_KEY$3}`,\n    MOUSEENTER: `mouseenter${EVENT_KEY$3}`,\n    MOUSELEAVE: `mouseleave${EVENT_KEY$3}`\n  };\n  const CLASS_NAME_FADE$2 = 'fade';\n  const CLASS_NAME_SHOW$2 = 'show';\n  const SELECTOR_TITLE = '.popover-header';\n  const SELECTOR_CONTENT = '.popover-body';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Popover extends Tooltip {\n    // Getters\n    static get Default() {\n      return Default$2;\n    }\n\n    static get NAME() {\n      return NAME$3;\n    }\n\n    static get Event() {\n      return Event$1;\n    }\n\n    static get DefaultType() {\n      return DefaultType$2;\n    } // Overrides\n\n\n    isWithContent() {\n      return this.getTitle() || this._getContent();\n    }\n\n    getTipElement() {\n      if (this.tip) {\n        return this.tip;\n      }\n\n      this.tip = super.getTipElement();\n\n      if (!this.getTitle()) {\n        SelectorEngine.findOne(SELECTOR_TITLE, this.tip).remove();\n      }\n\n      if (!this._getContent()) {\n        SelectorEngine.findOne(SELECTOR_CONTENT, this.tip).remove();\n      }\n\n      return this.tip;\n    }\n\n    setContent() {\n      const tip = this.getTipElement(); // we use append for html objects to maintain js events\n\n      this.setElementContent(SelectorEngine.findOne(SELECTOR_TITLE, tip), this.getTitle());\n\n      let content = this._getContent();\n\n      if (typeof content === 'function') {\n        content = content.call(this._element);\n      }\n\n      this.setElementContent(SelectorEngine.findOne(SELECTOR_CONTENT, tip), content);\n      tip.classList.remove(CLASS_NAME_FADE$2, CLASS_NAME_SHOW$2);\n    } // Private\n\n\n    _addAttachmentClass(attachment) {\n      this.getTipElement().classList.add(`${CLASS_PREFIX}-${this.updateAttachment(attachment)}`);\n    }\n\n    _getContent() {\n      return this._element.getAttribute('data-bs-content') || this._config.content;\n    }\n\n    _cleanTipClass() {\n      const tip = this.getTipElement();\n      const tabClass = tip.getAttribute('class').match(BSCLS_PREFIX_REGEX);\n\n      if (tabClass !== null && tabClass.length > 0) {\n        tabClass.map(token => token.trim()).forEach(tClass => tip.classList.remove(tClass));\n      }\n    } // Static\n\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = Popover.getOrCreateInstance(this, config);\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(`No method named \"${config}\"`);\n          }\n\n          data[config]();\n        }\n      });\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Popover to jQuery only if jQuery is present\n   */\n\n\n  defineJQueryPlugin(Popover);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): scrollspy.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$2 = 'scrollspy';\n  const DATA_KEY$2 = 'bs.scrollspy';\n  const EVENT_KEY$2 = `.${DATA_KEY$2}`;\n  const DATA_API_KEY$1 = '.data-api';\n  const Default$1 = {\n    offset: 10,\n    method: 'auto',\n    target: ''\n  };\n  const DefaultType$1 = {\n    offset: 'number',\n    method: 'string',\n    target: '(string|element)'\n  };\n  const EVENT_ACTIVATE = `activate${EVENT_KEY$2}`;\n  const EVENT_SCROLL = `scroll${EVENT_KEY$2}`;\n  const EVENT_LOAD_DATA_API = `load${EVENT_KEY$2}${DATA_API_KEY$1}`;\n  const CLASS_NAME_DROPDOWN_ITEM = 'dropdown-item';\n  const CLASS_NAME_ACTIVE$1 = 'active';\n  const SELECTOR_DATA_SPY = '[data-bs-spy=\"scroll\"]';\n  const SELECTOR_NAV_LIST_GROUP$1 = '.nav, .list-group';\n  const SELECTOR_NAV_LINKS = '.nav-link';\n  const SELECTOR_NAV_ITEMS = '.nav-item';\n  const SELECTOR_LIST_ITEMS = '.list-group-item';\n  const SELECTOR_DROPDOWN$1 = '.dropdown';\n  const SELECTOR_DROPDOWN_TOGGLE$1 = '.dropdown-toggle';\n  const METHOD_OFFSET = 'offset';\n  const METHOD_POSITION = 'position';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class ScrollSpy extends BaseComponent {\n    constructor(element, config) {\n      super(element);\n      this._scrollElement = this._element.tagName === 'BODY' ? window : this._element;\n      this._config = this._getConfig(config);\n      this._selector = `${this._config.target} ${SELECTOR_NAV_LINKS}, ${this._config.target} ${SELECTOR_LIST_ITEMS}, ${this._config.target} .${CLASS_NAME_DROPDOWN_ITEM}`;\n      this._offsets = [];\n      this._targets = [];\n      this._activeTarget = null;\n      this._scrollHeight = 0;\n      EventHandler.on(this._scrollElement, EVENT_SCROLL, () => this._process());\n      this.refresh();\n\n      this._process();\n    } // Getters\n\n\n    static get Default() {\n      return Default$1;\n    }\n\n    static get NAME() {\n      return NAME$2;\n    } // Public\n\n\n    refresh() {\n      const autoMethod = this._scrollElement === this._scrollElement.window ? METHOD_OFFSET : METHOD_POSITION;\n      const offsetMethod = this._config.method === 'auto' ? autoMethod : this._config.method;\n      const offsetBase = offsetMethod === METHOD_POSITION ? this._getScrollTop() : 0;\n      this._offsets = [];\n      this._targets = [];\n      this._scrollHeight = this._getScrollHeight();\n      const targets = SelectorEngine.find(this._selector);\n      targets.map(element => {\n        const targetSelector = getSelectorFromElement(element);\n        const target = targetSelector ? SelectorEngine.findOne(targetSelector) : null;\n\n        if (target) {\n          const targetBCR = target.getBoundingClientRect();\n\n          if (targetBCR.width || targetBCR.height) {\n            return [Manipulator[offsetMethod](target).top + offsetBase, targetSelector];\n          }\n        }\n\n        return null;\n      }).filter(item => item).sort((a, b) => a[0] - b[0]).forEach(item => {\n        this._offsets.push(item[0]);\n\n        this._targets.push(item[1]);\n      });\n    }\n\n    dispose() {\n      EventHandler.off(this._scrollElement, EVENT_KEY$2);\n      super.dispose();\n    } // Private\n\n\n    _getConfig(config) {\n      config = { ...Default$1,\n        ...Manipulator.getDataAttributes(this._element),\n        ...(typeof config === 'object' && config ? config : {})\n      };\n\n      if (typeof config.target !== 'string' && isElement$1(config.target)) {\n        let {\n          id\n        } = config.target;\n\n        if (!id) {\n          id = getUID(NAME$2);\n          config.target.id = id;\n        }\n\n        config.target = `#${id}`;\n      }\n\n      typeCheckConfig(NAME$2, config, DefaultType$1);\n      return config;\n    }\n\n    _getScrollTop() {\n      return this._scrollElement === window ? this._scrollElement.pageYOffset : this._scrollElement.scrollTop;\n    }\n\n    _getScrollHeight() {\n      return this._scrollElement.scrollHeight || Math.max(document.body.scrollHeight, document.documentElement.scrollHeight);\n    }\n\n    _getOffsetHeight() {\n      return this._scrollElement === window ? window.innerHeight : this._scrollElement.getBoundingClientRect().height;\n    }\n\n    _process() {\n      const scrollTop = this._getScrollTop() + this._config.offset;\n\n      const scrollHeight = this._getScrollHeight();\n\n      const maxScroll = this._config.offset + scrollHeight - this._getOffsetHeight();\n\n      if (this._scrollHeight !== scrollHeight) {\n        this.refresh();\n      }\n\n      if (scrollTop >= maxScroll) {\n        const target = this._targets[this._targets.length - 1];\n\n        if (this._activeTarget !== target) {\n          this._activate(target);\n        }\n\n        return;\n      }\n\n      if (this._activeTarget && scrollTop < this._offsets[0] && this._offsets[0] > 0) {\n        this._activeTarget = null;\n\n        this._clear();\n\n        return;\n      }\n\n      for (let i = this._offsets.length; i--;) {\n        const isActiveTarget = this._activeTarget !== this._targets[i] && scrollTop >= this._offsets[i] && (typeof this._offsets[i + 1] === 'undefined' || scrollTop < this._offsets[i + 1]);\n\n        if (isActiveTarget) {\n          this._activate(this._targets[i]);\n        }\n      }\n    }\n\n    _activate(target) {\n      this._activeTarget = target;\n\n      this._clear();\n\n      const queries = this._selector.split(',').map(selector => `${selector}[data-bs-target=\"${target}\"],${selector}[href=\"${target}\"]`);\n\n      const link = SelectorEngine.findOne(queries.join(','));\n\n      if (link.classList.contains(CLASS_NAME_DROPDOWN_ITEM)) {\n        SelectorEngine.findOne(SELECTOR_DROPDOWN_TOGGLE$1, link.closest(SELECTOR_DROPDOWN$1)).classList.add(CLASS_NAME_ACTIVE$1);\n        link.classList.add(CLASS_NAME_ACTIVE$1);\n      } else {\n        // Set triggered link as active\n        link.classList.add(CLASS_NAME_ACTIVE$1);\n        SelectorEngine.parents(link, SELECTOR_NAV_LIST_GROUP$1).forEach(listGroup => {\n          // Set triggered links parents as active\n          // With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor\n          SelectorEngine.prev(listGroup, `${SELECTOR_NAV_LINKS}, ${SELECTOR_LIST_ITEMS}`).forEach(item => item.classList.add(CLASS_NAME_ACTIVE$1)); // Handle special case when .nav-link is inside .nav-item\n\n          SelectorEngine.prev(listGroup, SELECTOR_NAV_ITEMS).forEach(navItem => {\n            SelectorEngine.children(navItem, SELECTOR_NAV_LINKS).forEach(item => item.classList.add(CLASS_NAME_ACTIVE$1));\n          });\n        });\n      }\n\n      EventHandler.trigger(this._scrollElement, EVENT_ACTIVATE, {\n        relatedTarget: target\n      });\n    }\n\n    _clear() {\n      SelectorEngine.find(this._selector).filter(node => node.classList.contains(CLASS_NAME_ACTIVE$1)).forEach(node => node.classList.remove(CLASS_NAME_ACTIVE$1));\n    } // Static\n\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = ScrollSpy.getOrCreateInstance(this, config);\n\n        if (typeof config !== 'string') {\n          return;\n        }\n\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config]();\n      });\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n    SelectorEngine.find(SELECTOR_DATA_SPY).forEach(spy => new ScrollSpy(spy));\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .ScrollSpy to jQuery only if jQuery is present\n   */\n\n  defineJQueryPlugin(ScrollSpy);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): tab.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$1 = 'tab';\n  const DATA_KEY$1 = 'bs.tab';\n  const EVENT_KEY$1 = `.${DATA_KEY$1}`;\n  const DATA_API_KEY = '.data-api';\n  const EVENT_HIDE$1 = `hide${EVENT_KEY$1}`;\n  const EVENT_HIDDEN$1 = `hidden${EVENT_KEY$1}`;\n  const EVENT_SHOW$1 = `show${EVENT_KEY$1}`;\n  const EVENT_SHOWN$1 = `shown${EVENT_KEY$1}`;\n  const EVENT_CLICK_DATA_API = `click${EVENT_KEY$1}${DATA_API_KEY}`;\n  const CLASS_NAME_DROPDOWN_MENU = 'dropdown-menu';\n  const CLASS_NAME_ACTIVE = 'active';\n  const CLASS_NAME_FADE$1 = 'fade';\n  const CLASS_NAME_SHOW$1 = 'show';\n  const SELECTOR_DROPDOWN = '.dropdown';\n  const SELECTOR_NAV_LIST_GROUP = '.nav, .list-group';\n  const SELECTOR_ACTIVE = '.active';\n  const SELECTOR_ACTIVE_UL = ':scope > li > .active';\n  const SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"tab\"], [data-bs-toggle=\"pill\"], [data-bs-toggle=\"list\"]';\n  const SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle';\n  const SELECTOR_DROPDOWN_ACTIVE_CHILD = ':scope > .dropdown-menu .active';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Tab extends BaseComponent {\n    // Getters\n    static get NAME() {\n      return NAME$1;\n    } // Public\n\n\n    show() {\n      if (this._element.parentNode && this._element.parentNode.nodeType === Node.ELEMENT_NODE && this._element.classList.contains(CLASS_NAME_ACTIVE)) {\n        return;\n      }\n\n      let previous;\n      const target = getElementFromSelector(this._element);\n\n      const listElement = this._element.closest(SELECTOR_NAV_LIST_GROUP);\n\n      if (listElement) {\n        const itemSelector = listElement.nodeName === 'UL' || listElement.nodeName === 'OL' ? SELECTOR_ACTIVE_UL : SELECTOR_ACTIVE;\n        previous = SelectorEngine.find(itemSelector, listElement);\n        previous = previous[previous.length - 1];\n      }\n\n      const hideEvent = previous ? EventHandler.trigger(previous, EVENT_HIDE$1, {\n        relatedTarget: this._element\n      }) : null;\n      const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$1, {\n        relatedTarget: previous\n      });\n\n      if (showEvent.defaultPrevented || hideEvent !== null && hideEvent.defaultPrevented) {\n        return;\n      }\n\n      this._activate(this._element, listElement);\n\n      const complete = () => {\n        EventHandler.trigger(previous, EVENT_HIDDEN$1, {\n          relatedTarget: this._element\n        });\n        EventHandler.trigger(this._element, EVENT_SHOWN$1, {\n          relatedTarget: previous\n        });\n      };\n\n      if (target) {\n        this._activate(target, target.parentNode, complete);\n      } else {\n        complete();\n      }\n    } // Private\n\n\n    _activate(element, container, callback) {\n      const activeElements = container && (container.nodeName === 'UL' || container.nodeName === 'OL') ? SelectorEngine.find(SELECTOR_ACTIVE_UL, container) : SelectorEngine.children(container, SELECTOR_ACTIVE);\n      const active = activeElements[0];\n      const isTransitioning = callback && active && active.classList.contains(CLASS_NAME_FADE$1);\n\n      const complete = () => this._transitionComplete(element, active, callback);\n\n      if (active && isTransitioning) {\n        active.classList.remove(CLASS_NAME_SHOW$1);\n\n        this._queueCallback(complete, element, true);\n      } else {\n        complete();\n      }\n    }\n\n    _transitionComplete(element, active, callback) {\n      if (active) {\n        active.classList.remove(CLASS_NAME_ACTIVE);\n        const dropdownChild = SelectorEngine.findOne(SELECTOR_DROPDOWN_ACTIVE_CHILD, active.parentNode);\n\n        if (dropdownChild) {\n          dropdownChild.classList.remove(CLASS_NAME_ACTIVE);\n        }\n\n        if (active.getAttribute('role') === 'tab') {\n          active.setAttribute('aria-selected', false);\n        }\n      }\n\n      element.classList.add(CLASS_NAME_ACTIVE);\n\n      if (element.getAttribute('role') === 'tab') {\n        element.setAttribute('aria-selected', true);\n      }\n\n      reflow(element);\n\n      if (element.classList.contains(CLASS_NAME_FADE$1)) {\n        element.classList.add(CLASS_NAME_SHOW$1);\n      }\n\n      let parent = element.parentNode;\n\n      if (parent && parent.nodeName === 'LI') {\n        parent = parent.parentNode;\n      }\n\n      if (parent && parent.classList.contains(CLASS_NAME_DROPDOWN_MENU)) {\n        const dropdownElement = element.closest(SELECTOR_DROPDOWN);\n\n        if (dropdownElement) {\n          SelectorEngine.find(SELECTOR_DROPDOWN_TOGGLE, dropdownElement).forEach(dropdown => dropdown.classList.add(CLASS_NAME_ACTIVE));\n        }\n\n        element.setAttribute('aria-expanded', true);\n      }\n\n      if (callback) {\n        callback();\n      }\n    } // Static\n\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = Tab.getOrCreateInstance(this);\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(`No method named \"${config}\"`);\n          }\n\n          data[config]();\n        }\n      });\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n    if (['A', 'AREA'].includes(this.tagName)) {\n      event.preventDefault();\n    }\n\n    if (isDisabled(this)) {\n      return;\n    }\n\n    const data = Tab.getOrCreateInstance(this);\n    data.show();\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Tab to jQuery only if jQuery is present\n   */\n\n  defineJQueryPlugin(Tab);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): toast.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME = 'toast';\n  const DATA_KEY = 'bs.toast';\n  const EVENT_KEY = `.${DATA_KEY}`;\n  const EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY}`;\n  const EVENT_MOUSEOVER = `mouseover${EVENT_KEY}`;\n  const EVENT_MOUSEOUT = `mouseout${EVENT_KEY}`;\n  const EVENT_FOCUSIN = `focusin${EVENT_KEY}`;\n  const EVENT_FOCUSOUT = `focusout${EVENT_KEY}`;\n  const EVENT_HIDE = `hide${EVENT_KEY}`;\n  const EVENT_HIDDEN = `hidden${EVENT_KEY}`;\n  const EVENT_SHOW = `show${EVENT_KEY}`;\n  const EVENT_SHOWN = `shown${EVENT_KEY}`;\n  const CLASS_NAME_FADE = 'fade';\n  const CLASS_NAME_HIDE = 'hide';\n  const CLASS_NAME_SHOW = 'show';\n  const CLASS_NAME_SHOWING = 'showing';\n  const DefaultType = {\n    animation: 'boolean',\n    autohide: 'boolean',\n    delay: 'number'\n  };\n  const Default = {\n    animation: true,\n    autohide: true,\n    delay: 5000\n  };\n  const SELECTOR_DATA_DISMISS = '[data-bs-dismiss=\"toast\"]';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Toast extends BaseComponent {\n    constructor(element, config) {\n      super(element);\n      this._config = this._getConfig(config);\n      this._timeout = null;\n      this._hasMouseInteraction = false;\n      this._hasKeyboardInteraction = false;\n\n      this._setListeners();\n    } // Getters\n\n\n    static get DefaultType() {\n      return DefaultType;\n    }\n\n    static get Default() {\n      return Default;\n    }\n\n    static get NAME() {\n      return NAME;\n    } // Public\n\n\n    show() {\n      const showEvent = EventHandler.trigger(this._element, EVENT_SHOW);\n\n      if (showEvent.defaultPrevented) {\n        return;\n      }\n\n      this._clearTimeout();\n\n      if (this._config.animation) {\n        this._element.classList.add(CLASS_NAME_FADE);\n      }\n\n      const complete = () => {\n        this._element.classList.remove(CLASS_NAME_SHOWING);\n\n        this._element.classList.add(CLASS_NAME_SHOW);\n\n        EventHandler.trigger(this._element, EVENT_SHOWN);\n\n        this._maybeScheduleHide();\n      };\n\n      this._element.classList.remove(CLASS_NAME_HIDE);\n\n      reflow(this._element);\n\n      this._element.classList.add(CLASS_NAME_SHOWING);\n\n      this._queueCallback(complete, this._element, this._config.animation);\n    }\n\n    hide() {\n      if (!this._element.classList.contains(CLASS_NAME_SHOW)) {\n        return;\n      }\n\n      const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE);\n\n      if (hideEvent.defaultPrevented) {\n        return;\n      }\n\n      const complete = () => {\n        this._element.classList.add(CLASS_NAME_HIDE);\n\n        EventHandler.trigger(this._element, EVENT_HIDDEN);\n      };\n\n      this._element.classList.remove(CLASS_NAME_SHOW);\n\n      this._queueCallback(complete, this._element, this._config.animation);\n    }\n\n    dispose() {\n      this._clearTimeout();\n\n      if (this._element.classList.contains(CLASS_NAME_SHOW)) {\n        this._element.classList.remove(CLASS_NAME_SHOW);\n      }\n\n      super.dispose();\n    } // Private\n\n\n    _getConfig(config) {\n      config = { ...Default,\n        ...Manipulator.getDataAttributes(this._element),\n        ...(typeof config === 'object' && config ? config : {})\n      };\n      typeCheckConfig(NAME, config, this.constructor.DefaultType);\n      return config;\n    }\n\n    _maybeScheduleHide() {\n      if (!this._config.autohide) {\n        return;\n      }\n\n      if (this._hasMouseInteraction || this._hasKeyboardInteraction) {\n        return;\n      }\n\n      this._timeout = setTimeout(() => {\n        this.hide();\n      }, this._config.delay);\n    }\n\n    _onInteraction(event, isInteracting) {\n      switch (event.type) {\n        case 'mouseover':\n        case 'mouseout':\n          this._hasMouseInteraction = isInteracting;\n          break;\n\n        case 'focusin':\n        case 'focusout':\n          this._hasKeyboardInteraction = isInteracting;\n          break;\n      }\n\n      if (isInteracting) {\n        this._clearTimeout();\n\n        return;\n      }\n\n      const nextElement = event.relatedTarget;\n\n      if (this._element === nextElement || this._element.contains(nextElement)) {\n        return;\n      }\n\n      this._maybeScheduleHide();\n    }\n\n    _setListeners() {\n      EventHandler.on(this._element, EVENT_CLICK_DISMISS, SELECTOR_DATA_DISMISS, () => this.hide());\n      EventHandler.on(this._element, EVENT_MOUSEOVER, event => this._onInteraction(event, true));\n      EventHandler.on(this._element, EVENT_MOUSEOUT, event => this._onInteraction(event, false));\n      EventHandler.on(this._element, EVENT_FOCUSIN, event => this._onInteraction(event, true));\n      EventHandler.on(this._element, EVENT_FOCUSOUT, event => this._onInteraction(event, false));\n    }\n\n    _clearTimeout() {\n      clearTimeout(this._timeout);\n      this._timeout = null;\n    } // Static\n\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = Toast.getOrCreateInstance(this, config);\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(`No method named \"${config}\"`);\n          }\n\n          data[config](this);\n        }\n      });\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Toast to jQuery only if jQuery is present\n   */\n\n\n  defineJQueryPlugin(Toast);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): index.umd.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  var index_umd = {\n    Alert,\n    Button,\n    Carousel,\n    Collapse,\n    Dropdown,\n    Modal,\n    Offcanvas,\n    Popover,\n    ScrollSpy,\n    Tab,\n    Toast,\n    Tooltip\n  };\n\n  return index_umd;\n\n})));\n//# sourceMappingURL=bootstrap.bundle.js.map\n"
  },
  {
    "path": "src/sourceDev.WebApp/SharedThemes/simplex/wwwroot/js/bootstrap.esm.js",
    "content": "/*!\n  * Bootstrap v5.0.2 (https://getbootstrap.com/)\n  * Copyright 2011-2021 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)\n  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n  */\nimport * as Popper from '@popperjs/core';\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): dom/selector-engine.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\nconst NODE_TEXT = 3;\nconst SelectorEngine = {\n  find(selector, element = document.documentElement) {\n    return [].concat(...Element.prototype.querySelectorAll.call(element, selector));\n  },\n\n  findOne(selector, element = document.documentElement) {\n    return Element.prototype.querySelector.call(element, selector);\n  },\n\n  children(element, selector) {\n    return [].concat(...element.children).filter(child => child.matches(selector));\n  },\n\n  parents(element, selector) {\n    const parents = [];\n    let ancestor = element.parentNode;\n\n    while (ancestor && ancestor.nodeType === Node.ELEMENT_NODE && ancestor.nodeType !== NODE_TEXT) {\n      if (ancestor.matches(selector)) {\n        parents.push(ancestor);\n      }\n\n      ancestor = ancestor.parentNode;\n    }\n\n    return parents;\n  },\n\n  prev(element, selector) {\n    let previous = element.previousElementSibling;\n\n    while (previous) {\n      if (previous.matches(selector)) {\n        return [previous];\n      }\n\n      previous = previous.previousElementSibling;\n    }\n\n    return [];\n  },\n\n  next(element, selector) {\n    let next = element.nextElementSibling;\n\n    while (next) {\n      if (next.matches(selector)) {\n        return [next];\n      }\n\n      next = next.nextElementSibling;\n    }\n\n    return [];\n  }\n\n};\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): util/index.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst MAX_UID = 1000000;\nconst MILLISECONDS_MULTIPLIER = 1000;\nconst TRANSITION_END = 'transitionend'; // Shoutout AngusCroll (https://goo.gl/pxwQGp)\n\nconst toType = obj => {\n  if (obj === null || obj === undefined) {\n    return `${obj}`;\n  }\n\n  return {}.toString.call(obj).match(/\\s([a-z]+)/i)[1].toLowerCase();\n};\n/**\n * --------------------------------------------------------------------------\n * Public Util Api\n * --------------------------------------------------------------------------\n */\n\n\nconst getUID = prefix => {\n  do {\n    prefix += Math.floor(Math.random() * MAX_UID);\n  } while (document.getElementById(prefix));\n\n  return prefix;\n};\n\nconst getSelector = element => {\n  let selector = element.getAttribute('data-bs-target');\n\n  if (!selector || selector === '#') {\n    let hrefAttr = element.getAttribute('href'); // The only valid content that could double as a selector are IDs or classes,\n    // so everything starting with `#` or `.`. If a \"real\" URL is used as the selector,\n    // `document.querySelector` will rightfully complain it is invalid.\n    // See https://github.com/twbs/bootstrap/issues/32273\n\n    if (!hrefAttr || !hrefAttr.includes('#') && !hrefAttr.startsWith('.')) {\n      return null;\n    } // Just in case some CMS puts out a full URL with the anchor appended\n\n\n    if (hrefAttr.includes('#') && !hrefAttr.startsWith('#')) {\n      hrefAttr = `#${hrefAttr.split('#')[1]}`;\n    }\n\n    selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : null;\n  }\n\n  return selector;\n};\n\nconst getSelectorFromElement = element => {\n  const selector = getSelector(element);\n\n  if (selector) {\n    return document.querySelector(selector) ? selector : null;\n  }\n\n  return null;\n};\n\nconst getElementFromSelector = element => {\n  const selector = getSelector(element);\n  return selector ? document.querySelector(selector) : null;\n};\n\nconst getTransitionDurationFromElement = element => {\n  if (!element) {\n    return 0;\n  } // Get transition-duration of the element\n\n\n  let {\n    transitionDuration,\n    transitionDelay\n  } = window.getComputedStyle(element);\n  const floatTransitionDuration = Number.parseFloat(transitionDuration);\n  const floatTransitionDelay = Number.parseFloat(transitionDelay); // Return 0 if element or transition duration is not found\n\n  if (!floatTransitionDuration && !floatTransitionDelay) {\n    return 0;\n  } // If multiple durations are defined, take the first\n\n\n  transitionDuration = transitionDuration.split(',')[0];\n  transitionDelay = transitionDelay.split(',')[0];\n  return (Number.parseFloat(transitionDuration) + Number.parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER;\n};\n\nconst triggerTransitionEnd = element => {\n  element.dispatchEvent(new Event(TRANSITION_END));\n};\n\nconst isElement = obj => {\n  if (!obj || typeof obj !== 'object') {\n    return false;\n  }\n\n  if (typeof obj.jquery !== 'undefined') {\n    obj = obj[0];\n  }\n\n  return typeof obj.nodeType !== 'undefined';\n};\n\nconst getElement = obj => {\n  if (isElement(obj)) {\n    // it's a jQuery object or a node element\n    return obj.jquery ? obj[0] : obj;\n  }\n\n  if (typeof obj === 'string' && obj.length > 0) {\n    return SelectorEngine.findOne(obj);\n  }\n\n  return null;\n};\n\nconst typeCheckConfig = (componentName, config, configTypes) => {\n  Object.keys(configTypes).forEach(property => {\n    const expectedTypes = configTypes[property];\n    const value = config[property];\n    const valueType = value && isElement(value) ? 'element' : toType(value);\n\n    if (!new RegExp(expectedTypes).test(valueType)) {\n      throw new TypeError(`${componentName.toUpperCase()}: Option \"${property}\" provided type \"${valueType}\" but expected type \"${expectedTypes}\".`);\n    }\n  });\n};\n\nconst isVisible = element => {\n  if (!isElement(element) || element.getClientRects().length === 0) {\n    return false;\n  }\n\n  return getComputedStyle(element).getPropertyValue('visibility') === 'visible';\n};\n\nconst isDisabled = element => {\n  if (!element || element.nodeType !== Node.ELEMENT_NODE) {\n    return true;\n  }\n\n  if (element.classList.contains('disabled')) {\n    return true;\n  }\n\n  if (typeof element.disabled !== 'undefined') {\n    return element.disabled;\n  }\n\n  return element.hasAttribute('disabled') && element.getAttribute('disabled') !== 'false';\n};\n\nconst findShadowRoot = element => {\n  if (!document.documentElement.attachShadow) {\n    return null;\n  } // Can find the shadow root otherwise it'll return the document\n\n\n  if (typeof element.getRootNode === 'function') {\n    const root = element.getRootNode();\n    return root instanceof ShadowRoot ? root : null;\n  }\n\n  if (element instanceof ShadowRoot) {\n    return element;\n  } // when we don't find a shadow root\n\n\n  if (!element.parentNode) {\n    return null;\n  }\n\n  return findShadowRoot(element.parentNode);\n};\n\nconst noop = () => {};\n\nconst reflow = element => element.offsetHeight;\n\nconst getjQuery = () => {\n  const {\n    jQuery\n  } = window;\n\n  if (jQuery && !document.body.hasAttribute('data-bs-no-jquery')) {\n    return jQuery;\n  }\n\n  return null;\n};\n\nconst DOMContentLoadedCallbacks = [];\n\nconst onDOMContentLoaded = callback => {\n  if (document.readyState === 'loading') {\n    // add listener on the first call when the document is in loading state\n    if (!DOMContentLoadedCallbacks.length) {\n      document.addEventListener('DOMContentLoaded', () => {\n        DOMContentLoadedCallbacks.forEach(callback => callback());\n      });\n    }\n\n    DOMContentLoadedCallbacks.push(callback);\n  } else {\n    callback();\n  }\n};\n\nconst isRTL = () => document.documentElement.dir === 'rtl';\n\nconst defineJQueryPlugin = plugin => {\n  onDOMContentLoaded(() => {\n    const $ = getjQuery();\n    /* istanbul ignore if */\n\n    if ($) {\n      const name = plugin.NAME;\n      const JQUERY_NO_CONFLICT = $.fn[name];\n      $.fn[name] = plugin.jQueryInterface;\n      $.fn[name].Constructor = plugin;\n\n      $.fn[name].noConflict = () => {\n        $.fn[name] = JQUERY_NO_CONFLICT;\n        return plugin.jQueryInterface;\n      };\n    }\n  });\n};\n\nconst execute = callback => {\n  if (typeof callback === 'function') {\n    callback();\n  }\n};\n\nconst executeAfterTransition = (callback, transitionElement, waitForTransition = true) => {\n  if (!waitForTransition) {\n    execute(callback);\n    return;\n  }\n\n  const durationPadding = 5;\n  const emulatedDuration = getTransitionDurationFromElement(transitionElement) + durationPadding;\n  let called = false;\n\n  const handler = ({\n    target\n  }) => {\n    if (target !== transitionElement) {\n      return;\n    }\n\n    called = true;\n    transitionElement.removeEventListener(TRANSITION_END, handler);\n    execute(callback);\n  };\n\n  transitionElement.addEventListener(TRANSITION_END, handler);\n  setTimeout(() => {\n    if (!called) {\n      triggerTransitionEnd(transitionElement);\n    }\n  }, emulatedDuration);\n};\n/**\n * Return the previous/next element of a list.\n *\n * @param {array} list    The list of elements\n * @param activeElement   The active element\n * @param shouldGetNext   Choose to get next or previous element\n * @param isCycleAllowed\n * @return {Element|elem} The proper element\n */\n\n\nconst getNextActiveElement = (list, activeElement, shouldGetNext, isCycleAllowed) => {\n  let index = list.indexOf(activeElement); // if the element does not exist in the list return an element depending on the direction and if cycle is allowed\n\n  if (index === -1) {\n    return list[!shouldGetNext && isCycleAllowed ? list.length - 1 : 0];\n  }\n\n  const listLength = list.length;\n  index += shouldGetNext ? 1 : -1;\n\n  if (isCycleAllowed) {\n    index = (index + listLength) % listLength;\n  }\n\n  return list[Math.max(0, Math.min(index, listLength - 1))];\n};\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): dom/event-handler.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst namespaceRegex = /[^.]*(?=\\..*)\\.|.*/;\nconst stripNameRegex = /\\..*/;\nconst stripUidRegex = /::\\d+$/;\nconst eventRegistry = {}; // Events storage\n\nlet uidEvent = 1;\nconst customEvents = {\n  mouseenter: 'mouseover',\n  mouseleave: 'mouseout'\n};\nconst customEventsRegex = /^(mouseenter|mouseleave)/i;\nconst nativeEvents = new Set(['click', 'dblclick', 'mouseup', 'mousedown', 'contextmenu', 'mousewheel', 'DOMMouseScroll', 'mouseover', 'mouseout', 'mousemove', 'selectstart', 'selectend', 'keydown', 'keypress', 'keyup', 'orientationchange', 'touchstart', 'touchmove', 'touchend', 'touchcancel', 'pointerdown', 'pointermove', 'pointerup', 'pointerleave', 'pointercancel', 'gesturestart', 'gesturechange', 'gestureend', 'focus', 'blur', 'change', 'reset', 'select', 'submit', 'focusin', 'focusout', 'load', 'unload', 'beforeunload', 'resize', 'move', 'DOMContentLoaded', 'readystatechange', 'error', 'abort', 'scroll']);\n/**\n * ------------------------------------------------------------------------\n * Private methods\n * ------------------------------------------------------------------------\n */\n\nfunction getUidEvent(element, uid) {\n  return uid && `${uid}::${uidEvent++}` || element.uidEvent || uidEvent++;\n}\n\nfunction getEvent(element) {\n  const uid = getUidEvent(element);\n  element.uidEvent = uid;\n  eventRegistry[uid] = eventRegistry[uid] || {};\n  return eventRegistry[uid];\n}\n\nfunction bootstrapHandler(element, fn) {\n  return function handler(event) {\n    event.delegateTarget = element;\n\n    if (handler.oneOff) {\n      EventHandler.off(element, event.type, fn);\n    }\n\n    return fn.apply(element, [event]);\n  };\n}\n\nfunction bootstrapDelegationHandler(element, selector, fn) {\n  return function handler(event) {\n    const domElements = element.querySelectorAll(selector);\n\n    for (let {\n      target\n    } = event; target && target !== this; target = target.parentNode) {\n      for (let i = domElements.length; i--;) {\n        if (domElements[i] === target) {\n          event.delegateTarget = target;\n\n          if (handler.oneOff) {\n            // eslint-disable-next-line unicorn/consistent-destructuring\n            EventHandler.off(element, event.type, selector, fn);\n          }\n\n          return fn.apply(target, [event]);\n        }\n      }\n    } // To please ESLint\n\n\n    return null;\n  };\n}\n\nfunction findHandler(events, handler, delegationSelector = null) {\n  const uidEventList = Object.keys(events);\n\n  for (let i = 0, len = uidEventList.length; i < len; i++) {\n    const event = events[uidEventList[i]];\n\n    if (event.originalHandler === handler && event.delegationSelector === delegationSelector) {\n      return event;\n    }\n  }\n\n  return null;\n}\n\nfunction normalizeParams(originalTypeEvent, handler, delegationFn) {\n  const delegation = typeof handler === 'string';\n  const originalHandler = delegation ? delegationFn : handler;\n  let typeEvent = getTypeEvent(originalTypeEvent);\n  const isNative = nativeEvents.has(typeEvent);\n\n  if (!isNative) {\n    typeEvent = originalTypeEvent;\n  }\n\n  return [delegation, originalHandler, typeEvent];\n}\n\nfunction addHandler(element, originalTypeEvent, handler, delegationFn, oneOff) {\n  if (typeof originalTypeEvent !== 'string' || !element) {\n    return;\n  }\n\n  if (!handler) {\n    handler = delegationFn;\n    delegationFn = null;\n  } // in case of mouseenter or mouseleave wrap the handler within a function that checks for its DOM position\n  // this prevents the handler from being dispatched the same way as mouseover or mouseout does\n\n\n  if (customEventsRegex.test(originalTypeEvent)) {\n    const wrapFn = fn => {\n      return function (event) {\n        if (!event.relatedTarget || event.relatedTarget !== event.delegateTarget && !event.delegateTarget.contains(event.relatedTarget)) {\n          return fn.call(this, event);\n        }\n      };\n    };\n\n    if (delegationFn) {\n      delegationFn = wrapFn(delegationFn);\n    } else {\n      handler = wrapFn(handler);\n    }\n  }\n\n  const [delegation, originalHandler, typeEvent] = normalizeParams(originalTypeEvent, handler, delegationFn);\n  const events = getEvent(element);\n  const handlers = events[typeEvent] || (events[typeEvent] = {});\n  const previousFn = findHandler(handlers, originalHandler, delegation ? handler : null);\n\n  if (previousFn) {\n    previousFn.oneOff = previousFn.oneOff && oneOff;\n    return;\n  }\n\n  const uid = getUidEvent(originalHandler, originalTypeEvent.replace(namespaceRegex, ''));\n  const fn = delegation ? bootstrapDelegationHandler(element, handler, delegationFn) : bootstrapHandler(element, handler);\n  fn.delegationSelector = delegation ? handler : null;\n  fn.originalHandler = originalHandler;\n  fn.oneOff = oneOff;\n  fn.uidEvent = uid;\n  handlers[uid] = fn;\n  element.addEventListener(typeEvent, fn, delegation);\n}\n\nfunction removeHandler(element, events, typeEvent, handler, delegationSelector) {\n  const fn = findHandler(events[typeEvent], handler, delegationSelector);\n\n  if (!fn) {\n    return;\n  }\n\n  element.removeEventListener(typeEvent, fn, Boolean(delegationSelector));\n  delete events[typeEvent][fn.uidEvent];\n}\n\nfunction removeNamespacedHandlers(element, events, typeEvent, namespace) {\n  const storeElementEvent = events[typeEvent] || {};\n  Object.keys(storeElementEvent).forEach(handlerKey => {\n    if (handlerKey.includes(namespace)) {\n      const event = storeElementEvent[handlerKey];\n      removeHandler(element, events, typeEvent, event.originalHandler, event.delegationSelector);\n    }\n  });\n}\n\nfunction getTypeEvent(event) {\n  // allow to get the native events from namespaced events ('click.bs.button' --> 'click')\n  event = event.replace(stripNameRegex, '');\n  return customEvents[event] || event;\n}\n\nconst EventHandler = {\n  on(element, event, handler, delegationFn) {\n    addHandler(element, event, handler, delegationFn, false);\n  },\n\n  one(element, event, handler, delegationFn) {\n    addHandler(element, event, handler, delegationFn, true);\n  },\n\n  off(element, originalTypeEvent, handler, delegationFn) {\n    if (typeof originalTypeEvent !== 'string' || !element) {\n      return;\n    }\n\n    const [delegation, originalHandler, typeEvent] = normalizeParams(originalTypeEvent, handler, delegationFn);\n    const inNamespace = typeEvent !== originalTypeEvent;\n    const events = getEvent(element);\n    const isNamespace = originalTypeEvent.startsWith('.');\n\n    if (typeof originalHandler !== 'undefined') {\n      // Simplest case: handler is passed, remove that listener ONLY.\n      if (!events || !events[typeEvent]) {\n        return;\n      }\n\n      removeHandler(element, events, typeEvent, originalHandler, delegation ? handler : null);\n      return;\n    }\n\n    if (isNamespace) {\n      Object.keys(events).forEach(elementEvent => {\n        removeNamespacedHandlers(element, events, elementEvent, originalTypeEvent.slice(1));\n      });\n    }\n\n    const storeElementEvent = events[typeEvent] || {};\n    Object.keys(storeElementEvent).forEach(keyHandlers => {\n      const handlerKey = keyHandlers.replace(stripUidRegex, '');\n\n      if (!inNamespace || originalTypeEvent.includes(handlerKey)) {\n        const event = storeElementEvent[keyHandlers];\n        removeHandler(element, events, typeEvent, event.originalHandler, event.delegationSelector);\n      }\n    });\n  },\n\n  trigger(element, event, args) {\n    if (typeof event !== 'string' || !element) {\n      return null;\n    }\n\n    const $ = getjQuery();\n    const typeEvent = getTypeEvent(event);\n    const inNamespace = event !== typeEvent;\n    const isNative = nativeEvents.has(typeEvent);\n    let jQueryEvent;\n    let bubbles = true;\n    let nativeDispatch = true;\n    let defaultPrevented = false;\n    let evt = null;\n\n    if (inNamespace && $) {\n      jQueryEvent = $.Event(event, args);\n      $(element).trigger(jQueryEvent);\n      bubbles = !jQueryEvent.isPropagationStopped();\n      nativeDispatch = !jQueryEvent.isImmediatePropagationStopped();\n      defaultPrevented = jQueryEvent.isDefaultPrevented();\n    }\n\n    if (isNative) {\n      evt = document.createEvent('HTMLEvents');\n      evt.initEvent(typeEvent, bubbles, true);\n    } else {\n      evt = new CustomEvent(event, {\n        bubbles,\n        cancelable: true\n      });\n    } // merge custom information in our event\n\n\n    if (typeof args !== 'undefined') {\n      Object.keys(args).forEach(key => {\n        Object.defineProperty(evt, key, {\n          get() {\n            return args[key];\n          }\n\n        });\n      });\n    }\n\n    if (defaultPrevented) {\n      evt.preventDefault();\n    }\n\n    if (nativeDispatch) {\n      element.dispatchEvent(evt);\n    }\n\n    if (evt.defaultPrevented && typeof jQueryEvent !== 'undefined') {\n      jQueryEvent.preventDefault();\n    }\n\n    return evt;\n  }\n\n};\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): dom/data.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\nconst elementMap = new Map();\nvar Data = {\n  set(element, key, instance) {\n    if (!elementMap.has(element)) {\n      elementMap.set(element, new Map());\n    }\n\n    const instanceMap = elementMap.get(element); // make it clear we only want one instance per element\n    // can be removed later when multiple key/instances are fine to be used\n\n    if (!instanceMap.has(key) && instanceMap.size !== 0) {\n      // eslint-disable-next-line no-console\n      console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(instanceMap.keys())[0]}.`);\n      return;\n    }\n\n    instanceMap.set(key, instance);\n  },\n\n  get(element, key) {\n    if (elementMap.has(element)) {\n      return elementMap.get(element).get(key) || null;\n    }\n\n    return null;\n  },\n\n  remove(element, key) {\n    if (!elementMap.has(element)) {\n      return;\n    }\n\n    const instanceMap = elementMap.get(element);\n    instanceMap.delete(key); // free up element references if there are no instances left for an element\n\n    if (instanceMap.size === 0) {\n      elementMap.delete(element);\n    }\n  }\n\n};\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): base-component.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst VERSION = '5.0.2';\n\nclass BaseComponent {\n  constructor(element) {\n    element = getElement(element);\n\n    if (!element) {\n      return;\n    }\n\n    this._element = element;\n    Data.set(this._element, this.constructor.DATA_KEY, this);\n  }\n\n  dispose() {\n    Data.remove(this._element, this.constructor.DATA_KEY);\n    EventHandler.off(this._element, this.constructor.EVENT_KEY);\n    Object.getOwnPropertyNames(this).forEach(propertyName => {\n      this[propertyName] = null;\n    });\n  }\n\n  _queueCallback(callback, element, isAnimated = true) {\n    executeAfterTransition(callback, element, isAnimated);\n  }\n  /** Static */\n\n\n  static getInstance(element) {\n    return Data.get(element, this.DATA_KEY);\n  }\n\n  static getOrCreateInstance(element, config = {}) {\n    return this.getInstance(element) || new this(element, typeof config === 'object' ? config : null);\n  }\n\n  static get VERSION() {\n    return VERSION;\n  }\n\n  static get NAME() {\n    throw new Error('You have to implement the static method \"NAME\", for each component!');\n  }\n\n  static get DATA_KEY() {\n    return `bs.${this.NAME}`;\n  }\n\n  static get EVENT_KEY() {\n    return `.${this.DATA_KEY}`;\n  }\n\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): alert.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$c = 'alert';\nconst DATA_KEY$b = 'bs.alert';\nconst EVENT_KEY$b = `.${DATA_KEY$b}`;\nconst DATA_API_KEY$8 = '.data-api';\nconst SELECTOR_DISMISS = '[data-bs-dismiss=\"alert\"]';\nconst EVENT_CLOSE = `close${EVENT_KEY$b}`;\nconst EVENT_CLOSED = `closed${EVENT_KEY$b}`;\nconst EVENT_CLICK_DATA_API$7 = `click${EVENT_KEY$b}${DATA_API_KEY$8}`;\nconst CLASS_NAME_ALERT = 'alert';\nconst CLASS_NAME_FADE$6 = 'fade';\nconst CLASS_NAME_SHOW$9 = 'show';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Alert extends BaseComponent {\n  // Getters\n  static get NAME() {\n    return NAME$c;\n  } // Public\n\n\n  close(element) {\n    const rootElement = element ? this._getRootElement(element) : this._element;\n\n    const customEvent = this._triggerCloseEvent(rootElement);\n\n    if (customEvent === null || customEvent.defaultPrevented) {\n      return;\n    }\n\n    this._removeElement(rootElement);\n  } // Private\n\n\n  _getRootElement(element) {\n    return getElementFromSelector(element) || element.closest(`.${CLASS_NAME_ALERT}`);\n  }\n\n  _triggerCloseEvent(element) {\n    return EventHandler.trigger(element, EVENT_CLOSE);\n  }\n\n  _removeElement(element) {\n    element.classList.remove(CLASS_NAME_SHOW$9);\n    const isAnimated = element.classList.contains(CLASS_NAME_FADE$6);\n\n    this._queueCallback(() => this._destroyElement(element), element, isAnimated);\n  }\n\n  _destroyElement(element) {\n    element.remove();\n    EventHandler.trigger(element, EVENT_CLOSED);\n  } // Static\n\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Alert.getOrCreateInstance(this);\n\n      if (config === 'close') {\n        data[config](this);\n      }\n    });\n  }\n\n  static handleDismiss(alertInstance) {\n    return function (event) {\n      if (event) {\n        event.preventDefault();\n      }\n\n      alertInstance.close(this);\n    };\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$7, SELECTOR_DISMISS, Alert.handleDismiss(new Alert()));\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Alert to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Alert);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): button.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$b = 'button';\nconst DATA_KEY$a = 'bs.button';\nconst EVENT_KEY$a = `.${DATA_KEY$a}`;\nconst DATA_API_KEY$7 = '.data-api';\nconst CLASS_NAME_ACTIVE$3 = 'active';\nconst SELECTOR_DATA_TOGGLE$5 = '[data-bs-toggle=\"button\"]';\nconst EVENT_CLICK_DATA_API$6 = `click${EVENT_KEY$a}${DATA_API_KEY$7}`;\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Button extends BaseComponent {\n  // Getters\n  static get NAME() {\n    return NAME$b;\n  } // Public\n\n\n  toggle() {\n    // Toggle class and sync the `aria-pressed` attribute with the return value of the `.toggle()` method\n    this._element.setAttribute('aria-pressed', this._element.classList.toggle(CLASS_NAME_ACTIVE$3));\n  } // Static\n\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Button.getOrCreateInstance(this);\n\n      if (config === 'toggle') {\n        data[config]();\n      }\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$6, SELECTOR_DATA_TOGGLE$5, event => {\n  event.preventDefault();\n  const button = event.target.closest(SELECTOR_DATA_TOGGLE$5);\n  const data = Button.getOrCreateInstance(button);\n  data.toggle();\n});\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Button to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Button);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): dom/manipulator.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\nfunction normalizeData(val) {\n  if (val === 'true') {\n    return true;\n  }\n\n  if (val === 'false') {\n    return false;\n  }\n\n  if (val === Number(val).toString()) {\n    return Number(val);\n  }\n\n  if (val === '' || val === 'null') {\n    return null;\n  }\n\n  return val;\n}\n\nfunction normalizeDataKey(key) {\n  return key.replace(/[A-Z]/g, chr => `-${chr.toLowerCase()}`);\n}\n\nconst Manipulator = {\n  setDataAttribute(element, key, value) {\n    element.setAttribute(`data-bs-${normalizeDataKey(key)}`, value);\n  },\n\n  removeDataAttribute(element, key) {\n    element.removeAttribute(`data-bs-${normalizeDataKey(key)}`);\n  },\n\n  getDataAttributes(element) {\n    if (!element) {\n      return {};\n    }\n\n    const attributes = {};\n    Object.keys(element.dataset).filter(key => key.startsWith('bs')).forEach(key => {\n      let pureKey = key.replace(/^bs/, '');\n      pureKey = pureKey.charAt(0).toLowerCase() + pureKey.slice(1, pureKey.length);\n      attributes[pureKey] = normalizeData(element.dataset[key]);\n    });\n    return attributes;\n  },\n\n  getDataAttribute(element, key) {\n    return normalizeData(element.getAttribute(`data-bs-${normalizeDataKey(key)}`));\n  },\n\n  offset(element) {\n    const rect = element.getBoundingClientRect();\n    return {\n      top: rect.top + document.body.scrollTop,\n      left: rect.left + document.body.scrollLeft\n    };\n  },\n\n  position(element) {\n    return {\n      top: element.offsetTop,\n      left: element.offsetLeft\n    };\n  }\n\n};\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): carousel.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$a = 'carousel';\nconst DATA_KEY$9 = 'bs.carousel';\nconst EVENT_KEY$9 = `.${DATA_KEY$9}`;\nconst DATA_API_KEY$6 = '.data-api';\nconst ARROW_LEFT_KEY = 'ArrowLeft';\nconst ARROW_RIGHT_KEY = 'ArrowRight';\nconst TOUCHEVENT_COMPAT_WAIT = 500; // Time for mouse compat events to fire after touch\n\nconst SWIPE_THRESHOLD = 40;\nconst Default$9 = {\n  interval: 5000,\n  keyboard: true,\n  slide: false,\n  pause: 'hover',\n  wrap: true,\n  touch: true\n};\nconst DefaultType$9 = {\n  interval: '(number|boolean)',\n  keyboard: 'boolean',\n  slide: '(boolean|string)',\n  pause: '(string|boolean)',\n  wrap: 'boolean',\n  touch: 'boolean'\n};\nconst ORDER_NEXT = 'next';\nconst ORDER_PREV = 'prev';\nconst DIRECTION_LEFT = 'left';\nconst DIRECTION_RIGHT = 'right';\nconst KEY_TO_DIRECTION = {\n  [ARROW_LEFT_KEY]: DIRECTION_RIGHT,\n  [ARROW_RIGHT_KEY]: DIRECTION_LEFT\n};\nconst EVENT_SLIDE = `slide${EVENT_KEY$9}`;\nconst EVENT_SLID = `slid${EVENT_KEY$9}`;\nconst EVENT_KEYDOWN = `keydown${EVENT_KEY$9}`;\nconst EVENT_MOUSEENTER = `mouseenter${EVENT_KEY$9}`;\nconst EVENT_MOUSELEAVE = `mouseleave${EVENT_KEY$9}`;\nconst EVENT_TOUCHSTART = `touchstart${EVENT_KEY$9}`;\nconst EVENT_TOUCHMOVE = `touchmove${EVENT_KEY$9}`;\nconst EVENT_TOUCHEND = `touchend${EVENT_KEY$9}`;\nconst EVENT_POINTERDOWN = `pointerdown${EVENT_KEY$9}`;\nconst EVENT_POINTERUP = `pointerup${EVENT_KEY$9}`;\nconst EVENT_DRAG_START = `dragstart${EVENT_KEY$9}`;\nconst EVENT_LOAD_DATA_API$2 = `load${EVENT_KEY$9}${DATA_API_KEY$6}`;\nconst EVENT_CLICK_DATA_API$5 = `click${EVENT_KEY$9}${DATA_API_KEY$6}`;\nconst CLASS_NAME_CAROUSEL = 'carousel';\nconst CLASS_NAME_ACTIVE$2 = 'active';\nconst CLASS_NAME_SLIDE = 'slide';\nconst CLASS_NAME_END = 'carousel-item-end';\nconst CLASS_NAME_START = 'carousel-item-start';\nconst CLASS_NAME_NEXT = 'carousel-item-next';\nconst CLASS_NAME_PREV = 'carousel-item-prev';\nconst CLASS_NAME_POINTER_EVENT = 'pointer-event';\nconst SELECTOR_ACTIVE$1 = '.active';\nconst SELECTOR_ACTIVE_ITEM = '.active.carousel-item';\nconst SELECTOR_ITEM = '.carousel-item';\nconst SELECTOR_ITEM_IMG = '.carousel-item img';\nconst SELECTOR_NEXT_PREV = '.carousel-item-next, .carousel-item-prev';\nconst SELECTOR_INDICATORS = '.carousel-indicators';\nconst SELECTOR_INDICATOR = '[data-bs-target]';\nconst SELECTOR_DATA_SLIDE = '[data-bs-slide], [data-bs-slide-to]';\nconst SELECTOR_DATA_RIDE = '[data-bs-ride=\"carousel\"]';\nconst POINTER_TYPE_TOUCH = 'touch';\nconst POINTER_TYPE_PEN = 'pen';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Carousel extends BaseComponent {\n  constructor(element, config) {\n    super(element);\n    this._items = null;\n    this._interval = null;\n    this._activeElement = null;\n    this._isPaused = false;\n    this._isSliding = false;\n    this.touchTimeout = null;\n    this.touchStartX = 0;\n    this.touchDeltaX = 0;\n    this._config = this._getConfig(config);\n    this._indicatorsElement = SelectorEngine.findOne(SELECTOR_INDICATORS, this._element);\n    this._touchSupported = 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0;\n    this._pointerEvent = Boolean(window.PointerEvent);\n\n    this._addEventListeners();\n  } // Getters\n\n\n  static get Default() {\n    return Default$9;\n  }\n\n  static get NAME() {\n    return NAME$a;\n  } // Public\n\n\n  next() {\n    this._slide(ORDER_NEXT);\n  }\n\n  nextWhenVisible() {\n    // Don't call next when the page isn't visible\n    // or the carousel or its parent isn't visible\n    if (!document.hidden && isVisible(this._element)) {\n      this.next();\n    }\n  }\n\n  prev() {\n    this._slide(ORDER_PREV);\n  }\n\n  pause(event) {\n    if (!event) {\n      this._isPaused = true;\n    }\n\n    if (SelectorEngine.findOne(SELECTOR_NEXT_PREV, this._element)) {\n      triggerTransitionEnd(this._element);\n      this.cycle(true);\n    }\n\n    clearInterval(this._interval);\n    this._interval = null;\n  }\n\n  cycle(event) {\n    if (!event) {\n      this._isPaused = false;\n    }\n\n    if (this._interval) {\n      clearInterval(this._interval);\n      this._interval = null;\n    }\n\n    if (this._config && this._config.interval && !this._isPaused) {\n      this._updateInterval();\n\n      this._interval = setInterval((document.visibilityState ? this.nextWhenVisible : this.next).bind(this), this._config.interval);\n    }\n  }\n\n  to(index) {\n    this._activeElement = SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element);\n\n    const activeIndex = this._getItemIndex(this._activeElement);\n\n    if (index > this._items.length - 1 || index < 0) {\n      return;\n    }\n\n    if (this._isSliding) {\n      EventHandler.one(this._element, EVENT_SLID, () => this.to(index));\n      return;\n    }\n\n    if (activeIndex === index) {\n      this.pause();\n      this.cycle();\n      return;\n    }\n\n    const order = index > activeIndex ? ORDER_NEXT : ORDER_PREV;\n\n    this._slide(order, this._items[index]);\n  } // Private\n\n\n  _getConfig(config) {\n    config = { ...Default$9,\n      ...Manipulator.getDataAttributes(this._element),\n      ...(typeof config === 'object' ? config : {})\n    };\n    typeCheckConfig(NAME$a, config, DefaultType$9);\n    return config;\n  }\n\n  _handleSwipe() {\n    const absDeltax = Math.abs(this.touchDeltaX);\n\n    if (absDeltax <= SWIPE_THRESHOLD) {\n      return;\n    }\n\n    const direction = absDeltax / this.touchDeltaX;\n    this.touchDeltaX = 0;\n\n    if (!direction) {\n      return;\n    }\n\n    this._slide(direction > 0 ? DIRECTION_RIGHT : DIRECTION_LEFT);\n  }\n\n  _addEventListeners() {\n    if (this._config.keyboard) {\n      EventHandler.on(this._element, EVENT_KEYDOWN, event => this._keydown(event));\n    }\n\n    if (this._config.pause === 'hover') {\n      EventHandler.on(this._element, EVENT_MOUSEENTER, event => this.pause(event));\n      EventHandler.on(this._element, EVENT_MOUSELEAVE, event => this.cycle(event));\n    }\n\n    if (this._config.touch && this._touchSupported) {\n      this._addTouchEventListeners();\n    }\n  }\n\n  _addTouchEventListeners() {\n    const start = event => {\n      if (this._pointerEvent && (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH)) {\n        this.touchStartX = event.clientX;\n      } else if (!this._pointerEvent) {\n        this.touchStartX = event.touches[0].clientX;\n      }\n    };\n\n    const move = event => {\n      // ensure swiping with one touch and not pinching\n      this.touchDeltaX = event.touches && event.touches.length > 1 ? 0 : event.touches[0].clientX - this.touchStartX;\n    };\n\n    const end = event => {\n      if (this._pointerEvent && (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH)) {\n        this.touchDeltaX = event.clientX - this.touchStartX;\n      }\n\n      this._handleSwipe();\n\n      if (this._config.pause === 'hover') {\n        // If it's a touch-enabled device, mouseenter/leave are fired as\n        // part of the mouse compatibility events on first tap - the carousel\n        // would stop cycling until user tapped out of it;\n        // here, we listen for touchend, explicitly pause the carousel\n        // (as if it's the second time we tap on it, mouseenter compat event\n        // is NOT fired) and after a timeout (to allow for mouse compatibility\n        // events to fire) we explicitly restart cycling\n        this.pause();\n\n        if (this.touchTimeout) {\n          clearTimeout(this.touchTimeout);\n        }\n\n        this.touchTimeout = setTimeout(event => this.cycle(event), TOUCHEVENT_COMPAT_WAIT + this._config.interval);\n      }\n    };\n\n    SelectorEngine.find(SELECTOR_ITEM_IMG, this._element).forEach(itemImg => {\n      EventHandler.on(itemImg, EVENT_DRAG_START, e => e.preventDefault());\n    });\n\n    if (this._pointerEvent) {\n      EventHandler.on(this._element, EVENT_POINTERDOWN, event => start(event));\n      EventHandler.on(this._element, EVENT_POINTERUP, event => end(event));\n\n      this._element.classList.add(CLASS_NAME_POINTER_EVENT);\n    } else {\n      EventHandler.on(this._element, EVENT_TOUCHSTART, event => start(event));\n      EventHandler.on(this._element, EVENT_TOUCHMOVE, event => move(event));\n      EventHandler.on(this._element, EVENT_TOUCHEND, event => end(event));\n    }\n  }\n\n  _keydown(event) {\n    if (/input|textarea/i.test(event.target.tagName)) {\n      return;\n    }\n\n    const direction = KEY_TO_DIRECTION[event.key];\n\n    if (direction) {\n      event.preventDefault();\n\n      this._slide(direction);\n    }\n  }\n\n  _getItemIndex(element) {\n    this._items = element && element.parentNode ? SelectorEngine.find(SELECTOR_ITEM, element.parentNode) : [];\n    return this._items.indexOf(element);\n  }\n\n  _getItemByOrder(order, activeElement) {\n    const isNext = order === ORDER_NEXT;\n    return getNextActiveElement(this._items, activeElement, isNext, this._config.wrap);\n  }\n\n  _triggerSlideEvent(relatedTarget, eventDirectionName) {\n    const targetIndex = this._getItemIndex(relatedTarget);\n\n    const fromIndex = this._getItemIndex(SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element));\n\n    return EventHandler.trigger(this._element, EVENT_SLIDE, {\n      relatedTarget,\n      direction: eventDirectionName,\n      from: fromIndex,\n      to: targetIndex\n    });\n  }\n\n  _setActiveIndicatorElement(element) {\n    if (this._indicatorsElement) {\n      const activeIndicator = SelectorEngine.findOne(SELECTOR_ACTIVE$1, this._indicatorsElement);\n      activeIndicator.classList.remove(CLASS_NAME_ACTIVE$2);\n      activeIndicator.removeAttribute('aria-current');\n      const indicators = SelectorEngine.find(SELECTOR_INDICATOR, this._indicatorsElement);\n\n      for (let i = 0; i < indicators.length; i++) {\n        if (Number.parseInt(indicators[i].getAttribute('data-bs-slide-to'), 10) === this._getItemIndex(element)) {\n          indicators[i].classList.add(CLASS_NAME_ACTIVE$2);\n          indicators[i].setAttribute('aria-current', 'true');\n          break;\n        }\n      }\n    }\n  }\n\n  _updateInterval() {\n    const element = this._activeElement || SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element);\n\n    if (!element) {\n      return;\n    }\n\n    const elementInterval = Number.parseInt(element.getAttribute('data-bs-interval'), 10);\n\n    if (elementInterval) {\n      this._config.defaultInterval = this._config.defaultInterval || this._config.interval;\n      this._config.interval = elementInterval;\n    } else {\n      this._config.interval = this._config.defaultInterval || this._config.interval;\n    }\n  }\n\n  _slide(directionOrOrder, element) {\n    const order = this._directionToOrder(directionOrOrder);\n\n    const activeElement = SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element);\n\n    const activeElementIndex = this._getItemIndex(activeElement);\n\n    const nextElement = element || this._getItemByOrder(order, activeElement);\n\n    const nextElementIndex = this._getItemIndex(nextElement);\n\n    const isCycling = Boolean(this._interval);\n    const isNext = order === ORDER_NEXT;\n    const directionalClassName = isNext ? CLASS_NAME_START : CLASS_NAME_END;\n    const orderClassName = isNext ? CLASS_NAME_NEXT : CLASS_NAME_PREV;\n\n    const eventDirectionName = this._orderToDirection(order);\n\n    if (nextElement && nextElement.classList.contains(CLASS_NAME_ACTIVE$2)) {\n      this._isSliding = false;\n      return;\n    }\n\n    if (this._isSliding) {\n      return;\n    }\n\n    const slideEvent = this._triggerSlideEvent(nextElement, eventDirectionName);\n\n    if (slideEvent.defaultPrevented) {\n      return;\n    }\n\n    if (!activeElement || !nextElement) {\n      // Some weirdness is happening, so we bail\n      return;\n    }\n\n    this._isSliding = true;\n\n    if (isCycling) {\n      this.pause();\n    }\n\n    this._setActiveIndicatorElement(nextElement);\n\n    this._activeElement = nextElement;\n\n    const triggerSlidEvent = () => {\n      EventHandler.trigger(this._element, EVENT_SLID, {\n        relatedTarget: nextElement,\n        direction: eventDirectionName,\n        from: activeElementIndex,\n        to: nextElementIndex\n      });\n    };\n\n    if (this._element.classList.contains(CLASS_NAME_SLIDE)) {\n      nextElement.classList.add(orderClassName);\n      reflow(nextElement);\n      activeElement.classList.add(directionalClassName);\n      nextElement.classList.add(directionalClassName);\n\n      const completeCallBack = () => {\n        nextElement.classList.remove(directionalClassName, orderClassName);\n        nextElement.classList.add(CLASS_NAME_ACTIVE$2);\n        activeElement.classList.remove(CLASS_NAME_ACTIVE$2, orderClassName, directionalClassName);\n        this._isSliding = false;\n        setTimeout(triggerSlidEvent, 0);\n      };\n\n      this._queueCallback(completeCallBack, activeElement, true);\n    } else {\n      activeElement.classList.remove(CLASS_NAME_ACTIVE$2);\n      nextElement.classList.add(CLASS_NAME_ACTIVE$2);\n      this._isSliding = false;\n      triggerSlidEvent();\n    }\n\n    if (isCycling) {\n      this.cycle();\n    }\n  }\n\n  _directionToOrder(direction) {\n    if (![DIRECTION_RIGHT, DIRECTION_LEFT].includes(direction)) {\n      return direction;\n    }\n\n    if (isRTL()) {\n      return direction === DIRECTION_LEFT ? ORDER_PREV : ORDER_NEXT;\n    }\n\n    return direction === DIRECTION_LEFT ? ORDER_NEXT : ORDER_PREV;\n  }\n\n  _orderToDirection(order) {\n    if (![ORDER_NEXT, ORDER_PREV].includes(order)) {\n      return order;\n    }\n\n    if (isRTL()) {\n      return order === ORDER_PREV ? DIRECTION_LEFT : DIRECTION_RIGHT;\n    }\n\n    return order === ORDER_PREV ? DIRECTION_RIGHT : DIRECTION_LEFT;\n  } // Static\n\n\n  static carouselInterface(element, config) {\n    const data = Carousel.getOrCreateInstance(element, config);\n    let {\n      _config\n    } = data;\n\n    if (typeof config === 'object') {\n      _config = { ..._config,\n        ...config\n      };\n    }\n\n    const action = typeof config === 'string' ? config : _config.slide;\n\n    if (typeof config === 'number') {\n      data.to(config);\n    } else if (typeof action === 'string') {\n      if (typeof data[action] === 'undefined') {\n        throw new TypeError(`No method named \"${action}\"`);\n      }\n\n      data[action]();\n    } else if (_config.interval && _config.ride) {\n      data.pause();\n      data.cycle();\n    }\n  }\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      Carousel.carouselInterface(this, config);\n    });\n  }\n\n  static dataApiClickHandler(event) {\n    const target = getElementFromSelector(this);\n\n    if (!target || !target.classList.contains(CLASS_NAME_CAROUSEL)) {\n      return;\n    }\n\n    const config = { ...Manipulator.getDataAttributes(target),\n      ...Manipulator.getDataAttributes(this)\n    };\n    const slideIndex = this.getAttribute('data-bs-slide-to');\n\n    if (slideIndex) {\n      config.interval = false;\n    }\n\n    Carousel.carouselInterface(target, config);\n\n    if (slideIndex) {\n      Carousel.getInstance(target).to(slideIndex);\n    }\n\n    event.preventDefault();\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$5, SELECTOR_DATA_SLIDE, Carousel.dataApiClickHandler);\nEventHandler.on(window, EVENT_LOAD_DATA_API$2, () => {\n  const carousels = SelectorEngine.find(SELECTOR_DATA_RIDE);\n\n  for (let i = 0, len = carousels.length; i < len; i++) {\n    Carousel.carouselInterface(carousels[i], Carousel.getInstance(carousels[i]));\n  }\n});\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Carousel to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Carousel);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): collapse.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$9 = 'collapse';\nconst DATA_KEY$8 = 'bs.collapse';\nconst EVENT_KEY$8 = `.${DATA_KEY$8}`;\nconst DATA_API_KEY$5 = '.data-api';\nconst Default$8 = {\n  toggle: true,\n  parent: ''\n};\nconst DefaultType$8 = {\n  toggle: 'boolean',\n  parent: '(string|element)'\n};\nconst EVENT_SHOW$5 = `show${EVENT_KEY$8}`;\nconst EVENT_SHOWN$5 = `shown${EVENT_KEY$8}`;\nconst EVENT_HIDE$5 = `hide${EVENT_KEY$8}`;\nconst EVENT_HIDDEN$5 = `hidden${EVENT_KEY$8}`;\nconst EVENT_CLICK_DATA_API$4 = `click${EVENT_KEY$8}${DATA_API_KEY$5}`;\nconst CLASS_NAME_SHOW$8 = 'show';\nconst CLASS_NAME_COLLAPSE = 'collapse';\nconst CLASS_NAME_COLLAPSING = 'collapsing';\nconst CLASS_NAME_COLLAPSED = 'collapsed';\nconst WIDTH = 'width';\nconst HEIGHT = 'height';\nconst SELECTOR_ACTIVES = '.show, .collapsing';\nconst SELECTOR_DATA_TOGGLE$4 = '[data-bs-toggle=\"collapse\"]';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Collapse extends BaseComponent {\n  constructor(element, config) {\n    super(element);\n    this._isTransitioning = false;\n    this._config = this._getConfig(config);\n    this._triggerArray = SelectorEngine.find(`${SELECTOR_DATA_TOGGLE$4}[href=\"#${this._element.id}\"],` + `${SELECTOR_DATA_TOGGLE$4}[data-bs-target=\"#${this._element.id}\"]`);\n    const toggleList = SelectorEngine.find(SELECTOR_DATA_TOGGLE$4);\n\n    for (let i = 0, len = toggleList.length; i < len; i++) {\n      const elem = toggleList[i];\n      const selector = getSelectorFromElement(elem);\n      const filterElement = SelectorEngine.find(selector).filter(foundElem => foundElem === this._element);\n\n      if (selector !== null && filterElement.length) {\n        this._selector = selector;\n\n        this._triggerArray.push(elem);\n      }\n    }\n\n    this._parent = this._config.parent ? this._getParent() : null;\n\n    if (!this._config.parent) {\n      this._addAriaAndCollapsedClass(this._element, this._triggerArray);\n    }\n\n    if (this._config.toggle) {\n      this.toggle();\n    }\n  } // Getters\n\n\n  static get Default() {\n    return Default$8;\n  }\n\n  static get NAME() {\n    return NAME$9;\n  } // Public\n\n\n  toggle() {\n    if (this._element.classList.contains(CLASS_NAME_SHOW$8)) {\n      this.hide();\n    } else {\n      this.show();\n    }\n  }\n\n  show() {\n    if (this._isTransitioning || this._element.classList.contains(CLASS_NAME_SHOW$8)) {\n      return;\n    }\n\n    let actives;\n    let activesData;\n\n    if (this._parent) {\n      actives = SelectorEngine.find(SELECTOR_ACTIVES, this._parent).filter(elem => {\n        if (typeof this._config.parent === 'string') {\n          return elem.getAttribute('data-bs-parent') === this._config.parent;\n        }\n\n        return elem.classList.contains(CLASS_NAME_COLLAPSE);\n      });\n\n      if (actives.length === 0) {\n        actives = null;\n      }\n    }\n\n    const container = SelectorEngine.findOne(this._selector);\n\n    if (actives) {\n      const tempActiveData = actives.find(elem => container !== elem);\n      activesData = tempActiveData ? Collapse.getInstance(tempActiveData) : null;\n\n      if (activesData && activesData._isTransitioning) {\n        return;\n      }\n    }\n\n    const startEvent = EventHandler.trigger(this._element, EVENT_SHOW$5);\n\n    if (startEvent.defaultPrevented) {\n      return;\n    }\n\n    if (actives) {\n      actives.forEach(elemActive => {\n        if (container !== elemActive) {\n          Collapse.collapseInterface(elemActive, 'hide');\n        }\n\n        if (!activesData) {\n          Data.set(elemActive, DATA_KEY$8, null);\n        }\n      });\n    }\n\n    const dimension = this._getDimension();\n\n    this._element.classList.remove(CLASS_NAME_COLLAPSE);\n\n    this._element.classList.add(CLASS_NAME_COLLAPSING);\n\n    this._element.style[dimension] = 0;\n\n    if (this._triggerArray.length) {\n      this._triggerArray.forEach(element => {\n        element.classList.remove(CLASS_NAME_COLLAPSED);\n        element.setAttribute('aria-expanded', true);\n      });\n    }\n\n    this.setTransitioning(true);\n\n    const complete = () => {\n      this._element.classList.remove(CLASS_NAME_COLLAPSING);\n\n      this._element.classList.add(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$8);\n\n      this._element.style[dimension] = '';\n      this.setTransitioning(false);\n      EventHandler.trigger(this._element, EVENT_SHOWN$5);\n    };\n\n    const capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1);\n    const scrollSize = `scroll${capitalizedDimension}`;\n\n    this._queueCallback(complete, this._element, true);\n\n    this._element.style[dimension] = `${this._element[scrollSize]}px`;\n  }\n\n  hide() {\n    if (this._isTransitioning || !this._element.classList.contains(CLASS_NAME_SHOW$8)) {\n      return;\n    }\n\n    const startEvent = EventHandler.trigger(this._element, EVENT_HIDE$5);\n\n    if (startEvent.defaultPrevented) {\n      return;\n    }\n\n    const dimension = this._getDimension();\n\n    this._element.style[dimension] = `${this._element.getBoundingClientRect()[dimension]}px`;\n    reflow(this._element);\n\n    this._element.classList.add(CLASS_NAME_COLLAPSING);\n\n    this._element.classList.remove(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$8);\n\n    const triggerArrayLength = this._triggerArray.length;\n\n    if (triggerArrayLength > 0) {\n      for (let i = 0; i < triggerArrayLength; i++) {\n        const trigger = this._triggerArray[i];\n        const elem = getElementFromSelector(trigger);\n\n        if (elem && !elem.classList.contains(CLASS_NAME_SHOW$8)) {\n          trigger.classList.add(CLASS_NAME_COLLAPSED);\n          trigger.setAttribute('aria-expanded', false);\n        }\n      }\n    }\n\n    this.setTransitioning(true);\n\n    const complete = () => {\n      this.setTransitioning(false);\n\n      this._element.classList.remove(CLASS_NAME_COLLAPSING);\n\n      this._element.classList.add(CLASS_NAME_COLLAPSE);\n\n      EventHandler.trigger(this._element, EVENT_HIDDEN$5);\n    };\n\n    this._element.style[dimension] = '';\n\n    this._queueCallback(complete, this._element, true);\n  }\n\n  setTransitioning(isTransitioning) {\n    this._isTransitioning = isTransitioning;\n  } // Private\n\n\n  _getConfig(config) {\n    config = { ...Default$8,\n      ...config\n    };\n    config.toggle = Boolean(config.toggle); // Coerce string values\n\n    typeCheckConfig(NAME$9, config, DefaultType$8);\n    return config;\n  }\n\n  _getDimension() {\n    return this._element.classList.contains(WIDTH) ? WIDTH : HEIGHT;\n  }\n\n  _getParent() {\n    let {\n      parent\n    } = this._config;\n    parent = getElement(parent);\n    const selector = `${SELECTOR_DATA_TOGGLE$4}[data-bs-parent=\"${parent}\"]`;\n    SelectorEngine.find(selector, parent).forEach(element => {\n      const selected = getElementFromSelector(element);\n\n      this._addAriaAndCollapsedClass(selected, [element]);\n    });\n    return parent;\n  }\n\n  _addAriaAndCollapsedClass(element, triggerArray) {\n    if (!element || !triggerArray.length) {\n      return;\n    }\n\n    const isOpen = element.classList.contains(CLASS_NAME_SHOW$8);\n    triggerArray.forEach(elem => {\n      if (isOpen) {\n        elem.classList.remove(CLASS_NAME_COLLAPSED);\n      } else {\n        elem.classList.add(CLASS_NAME_COLLAPSED);\n      }\n\n      elem.setAttribute('aria-expanded', isOpen);\n    });\n  } // Static\n\n\n  static collapseInterface(element, config) {\n    let data = Collapse.getInstance(element);\n    const _config = { ...Default$8,\n      ...Manipulator.getDataAttributes(element),\n      ...(typeof config === 'object' && config ? config : {})\n    };\n\n    if (!data && _config.toggle && typeof config === 'string' && /show|hide/.test(config)) {\n      _config.toggle = false;\n    }\n\n    if (!data) {\n      data = new Collapse(element, _config);\n    }\n\n    if (typeof config === 'string') {\n      if (typeof data[config] === 'undefined') {\n        throw new TypeError(`No method named \"${config}\"`);\n      }\n\n      data[config]();\n    }\n  }\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      Collapse.collapseInterface(this, config);\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$4, SELECTOR_DATA_TOGGLE$4, function (event) {\n  // preventDefault only for <a> elements (which change the URL) not inside the collapsible element\n  if (event.target.tagName === 'A' || event.delegateTarget && event.delegateTarget.tagName === 'A') {\n    event.preventDefault();\n  }\n\n  const triggerData = Manipulator.getDataAttributes(this);\n  const selector = getSelectorFromElement(this);\n  const selectorElements = SelectorEngine.find(selector);\n  selectorElements.forEach(element => {\n    const data = Collapse.getInstance(element);\n    let config;\n\n    if (data) {\n      // update parent attribute\n      if (data._parent === null && typeof triggerData.parent === 'string') {\n        data._config.parent = triggerData.parent;\n        data._parent = data._getParent();\n      }\n\n      config = 'toggle';\n    } else {\n      config = triggerData;\n    }\n\n    Collapse.collapseInterface(element, config);\n  });\n});\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Collapse to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Collapse);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): dropdown.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$8 = 'dropdown';\nconst DATA_KEY$7 = 'bs.dropdown';\nconst EVENT_KEY$7 = `.${DATA_KEY$7}`;\nconst DATA_API_KEY$4 = '.data-api';\nconst ESCAPE_KEY$2 = 'Escape';\nconst SPACE_KEY = 'Space';\nconst TAB_KEY = 'Tab';\nconst ARROW_UP_KEY = 'ArrowUp';\nconst ARROW_DOWN_KEY = 'ArrowDown';\nconst RIGHT_MOUSE_BUTTON = 2; // MouseEvent.button value for the secondary button, usually the right button\n\nconst REGEXP_KEYDOWN = new RegExp(`${ARROW_UP_KEY}|${ARROW_DOWN_KEY}|${ESCAPE_KEY$2}`);\nconst EVENT_HIDE$4 = `hide${EVENT_KEY$7}`;\nconst EVENT_HIDDEN$4 = `hidden${EVENT_KEY$7}`;\nconst EVENT_SHOW$4 = `show${EVENT_KEY$7}`;\nconst EVENT_SHOWN$4 = `shown${EVENT_KEY$7}`;\nconst EVENT_CLICK = `click${EVENT_KEY$7}`;\nconst EVENT_CLICK_DATA_API$3 = `click${EVENT_KEY$7}${DATA_API_KEY$4}`;\nconst EVENT_KEYDOWN_DATA_API = `keydown${EVENT_KEY$7}${DATA_API_KEY$4}`;\nconst EVENT_KEYUP_DATA_API = `keyup${EVENT_KEY$7}${DATA_API_KEY$4}`;\nconst CLASS_NAME_SHOW$7 = 'show';\nconst CLASS_NAME_DROPUP = 'dropup';\nconst CLASS_NAME_DROPEND = 'dropend';\nconst CLASS_NAME_DROPSTART = 'dropstart';\nconst CLASS_NAME_NAVBAR = 'navbar';\nconst SELECTOR_DATA_TOGGLE$3 = '[data-bs-toggle=\"dropdown\"]';\nconst SELECTOR_MENU = '.dropdown-menu';\nconst SELECTOR_NAVBAR_NAV = '.navbar-nav';\nconst SELECTOR_VISIBLE_ITEMS = '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)';\nconst PLACEMENT_TOP = isRTL() ? 'top-end' : 'top-start';\nconst PLACEMENT_TOPEND = isRTL() ? 'top-start' : 'top-end';\nconst PLACEMENT_BOTTOM = isRTL() ? 'bottom-end' : 'bottom-start';\nconst PLACEMENT_BOTTOMEND = isRTL() ? 'bottom-start' : 'bottom-end';\nconst PLACEMENT_RIGHT = isRTL() ? 'left-start' : 'right-start';\nconst PLACEMENT_LEFT = isRTL() ? 'right-start' : 'left-start';\nconst Default$7 = {\n  offset: [0, 2],\n  boundary: 'clippingParents',\n  reference: 'toggle',\n  display: 'dynamic',\n  popperConfig: null,\n  autoClose: true\n};\nconst DefaultType$7 = {\n  offset: '(array|string|function)',\n  boundary: '(string|element)',\n  reference: '(string|element|object)',\n  display: 'string',\n  popperConfig: '(null|object|function)',\n  autoClose: '(boolean|string)'\n};\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Dropdown extends BaseComponent {\n  constructor(element, config) {\n    super(element);\n    this._popper = null;\n    this._config = this._getConfig(config);\n    this._menu = this._getMenuElement();\n    this._inNavbar = this._detectNavbar();\n\n    this._addEventListeners();\n  } // Getters\n\n\n  static get Default() {\n    return Default$7;\n  }\n\n  static get DefaultType() {\n    return DefaultType$7;\n  }\n\n  static get NAME() {\n    return NAME$8;\n  } // Public\n\n\n  toggle() {\n    if (isDisabled(this._element)) {\n      return;\n    }\n\n    const isActive = this._element.classList.contains(CLASS_NAME_SHOW$7);\n\n    if (isActive) {\n      this.hide();\n      return;\n    }\n\n    this.show();\n  }\n\n  show() {\n    if (isDisabled(this._element) || this._menu.classList.contains(CLASS_NAME_SHOW$7)) {\n      return;\n    }\n\n    const parent = Dropdown.getParentFromElement(this._element);\n    const relatedTarget = {\n      relatedTarget: this._element\n    };\n    const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$4, relatedTarget);\n\n    if (showEvent.defaultPrevented) {\n      return;\n    } // Totally disable Popper for Dropdowns in Navbar\n\n\n    if (this._inNavbar) {\n      Manipulator.setDataAttribute(this._menu, 'popper', 'none');\n    } else {\n      if (typeof Popper === 'undefined') {\n        throw new TypeError('Bootstrap\\'s dropdowns require Popper (https://popper.js.org)');\n      }\n\n      let referenceElement = this._element;\n\n      if (this._config.reference === 'parent') {\n        referenceElement = parent;\n      } else if (isElement(this._config.reference)) {\n        referenceElement = getElement(this._config.reference);\n      } else if (typeof this._config.reference === 'object') {\n        referenceElement = this._config.reference;\n      }\n\n      const popperConfig = this._getPopperConfig();\n\n      const isDisplayStatic = popperConfig.modifiers.find(modifier => modifier.name === 'applyStyles' && modifier.enabled === false);\n      this._popper = Popper.createPopper(referenceElement, this._menu, popperConfig);\n\n      if (isDisplayStatic) {\n        Manipulator.setDataAttribute(this._menu, 'popper', 'static');\n      }\n    } // If this is a touch-enabled device we add extra\n    // empty mouseover listeners to the body's immediate children;\n    // only needed because of broken event delegation on iOS\n    // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n\n\n    if ('ontouchstart' in document.documentElement && !parent.closest(SELECTOR_NAVBAR_NAV)) {\n      [].concat(...document.body.children).forEach(elem => EventHandler.on(elem, 'mouseover', noop));\n    }\n\n    this._element.focus();\n\n    this._element.setAttribute('aria-expanded', true);\n\n    this._menu.classList.toggle(CLASS_NAME_SHOW$7);\n\n    this._element.classList.toggle(CLASS_NAME_SHOW$7);\n\n    EventHandler.trigger(this._element, EVENT_SHOWN$4, relatedTarget);\n  }\n\n  hide() {\n    if (isDisabled(this._element) || !this._menu.classList.contains(CLASS_NAME_SHOW$7)) {\n      return;\n    }\n\n    const relatedTarget = {\n      relatedTarget: this._element\n    };\n\n    this._completeHide(relatedTarget);\n  }\n\n  dispose() {\n    if (this._popper) {\n      this._popper.destroy();\n    }\n\n    super.dispose();\n  }\n\n  update() {\n    this._inNavbar = this._detectNavbar();\n\n    if (this._popper) {\n      this._popper.update();\n    }\n  } // Private\n\n\n  _addEventListeners() {\n    EventHandler.on(this._element, EVENT_CLICK, event => {\n      event.preventDefault();\n      this.toggle();\n    });\n  }\n\n  _completeHide(relatedTarget) {\n    const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$4, relatedTarget);\n\n    if (hideEvent.defaultPrevented) {\n      return;\n    } // If this is a touch-enabled device we remove the extra\n    // empty mouseover listeners we added for iOS support\n\n\n    if ('ontouchstart' in document.documentElement) {\n      [].concat(...document.body.children).forEach(elem => EventHandler.off(elem, 'mouseover', noop));\n    }\n\n    if (this._popper) {\n      this._popper.destroy();\n    }\n\n    this._menu.classList.remove(CLASS_NAME_SHOW$7);\n\n    this._element.classList.remove(CLASS_NAME_SHOW$7);\n\n    this._element.setAttribute('aria-expanded', 'false');\n\n    Manipulator.removeDataAttribute(this._menu, 'popper');\n    EventHandler.trigger(this._element, EVENT_HIDDEN$4, relatedTarget);\n  }\n\n  _getConfig(config) {\n    config = { ...this.constructor.Default,\n      ...Manipulator.getDataAttributes(this._element),\n      ...config\n    };\n    typeCheckConfig(NAME$8, config, this.constructor.DefaultType);\n\n    if (typeof config.reference === 'object' && !isElement(config.reference) && typeof config.reference.getBoundingClientRect !== 'function') {\n      // Popper virtual elements require a getBoundingClientRect method\n      throw new TypeError(`${NAME$8.toUpperCase()}: Option \"reference\" provided type \"object\" without a required \"getBoundingClientRect\" method.`);\n    }\n\n    return config;\n  }\n\n  _getMenuElement() {\n    return SelectorEngine.next(this._element, SELECTOR_MENU)[0];\n  }\n\n  _getPlacement() {\n    const parentDropdown = this._element.parentNode;\n\n    if (parentDropdown.classList.contains(CLASS_NAME_DROPEND)) {\n      return PLACEMENT_RIGHT;\n    }\n\n    if (parentDropdown.classList.contains(CLASS_NAME_DROPSTART)) {\n      return PLACEMENT_LEFT;\n    } // We need to trim the value because custom properties can also include spaces\n\n\n    const isEnd = getComputedStyle(this._menu).getPropertyValue('--bs-position').trim() === 'end';\n\n    if (parentDropdown.classList.contains(CLASS_NAME_DROPUP)) {\n      return isEnd ? PLACEMENT_TOPEND : PLACEMENT_TOP;\n    }\n\n    return isEnd ? PLACEMENT_BOTTOMEND : PLACEMENT_BOTTOM;\n  }\n\n  _detectNavbar() {\n    return this._element.closest(`.${CLASS_NAME_NAVBAR}`) !== null;\n  }\n\n  _getOffset() {\n    const {\n      offset\n    } = this._config;\n\n    if (typeof offset === 'string') {\n      return offset.split(',').map(val => Number.parseInt(val, 10));\n    }\n\n    if (typeof offset === 'function') {\n      return popperData => offset(popperData, this._element);\n    }\n\n    return offset;\n  }\n\n  _getPopperConfig() {\n    const defaultBsPopperConfig = {\n      placement: this._getPlacement(),\n      modifiers: [{\n        name: 'preventOverflow',\n        options: {\n          boundary: this._config.boundary\n        }\n      }, {\n        name: 'offset',\n        options: {\n          offset: this._getOffset()\n        }\n      }]\n    }; // Disable Popper if we have a static display\n\n    if (this._config.display === 'static') {\n      defaultBsPopperConfig.modifiers = [{\n        name: 'applyStyles',\n        enabled: false\n      }];\n    }\n\n    return { ...defaultBsPopperConfig,\n      ...(typeof this._config.popperConfig === 'function' ? this._config.popperConfig(defaultBsPopperConfig) : this._config.popperConfig)\n    };\n  }\n\n  _selectMenuItem({\n    key,\n    target\n  }) {\n    const items = SelectorEngine.find(SELECTOR_VISIBLE_ITEMS, this._menu).filter(isVisible);\n\n    if (!items.length) {\n      return;\n    } // if target isn't included in items (e.g. when expanding the dropdown)\n    // allow cycling to get the last item in case key equals ARROW_UP_KEY\n\n\n    getNextActiveElement(items, target, key === ARROW_DOWN_KEY, !items.includes(target)).focus();\n  } // Static\n\n\n  static dropdownInterface(element, config) {\n    const data = Dropdown.getOrCreateInstance(element, config);\n\n    if (typeof config === 'string') {\n      if (typeof data[config] === 'undefined') {\n        throw new TypeError(`No method named \"${config}\"`);\n      }\n\n      data[config]();\n    }\n  }\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      Dropdown.dropdownInterface(this, config);\n    });\n  }\n\n  static clearMenus(event) {\n    if (event && (event.button === RIGHT_MOUSE_BUTTON || event.type === 'keyup' && event.key !== TAB_KEY)) {\n      return;\n    }\n\n    const toggles = SelectorEngine.find(SELECTOR_DATA_TOGGLE$3);\n\n    for (let i = 0, len = toggles.length; i < len; i++) {\n      const context = Dropdown.getInstance(toggles[i]);\n\n      if (!context || context._config.autoClose === false) {\n        continue;\n      }\n\n      if (!context._element.classList.contains(CLASS_NAME_SHOW$7)) {\n        continue;\n      }\n\n      const relatedTarget = {\n        relatedTarget: context._element\n      };\n\n      if (event) {\n        const composedPath = event.composedPath();\n        const isMenuTarget = composedPath.includes(context._menu);\n\n        if (composedPath.includes(context._element) || context._config.autoClose === 'inside' && !isMenuTarget || context._config.autoClose === 'outside' && isMenuTarget) {\n          continue;\n        } // Tab navigation through the dropdown menu or events from contained inputs shouldn't close the menu\n\n\n        if (context._menu.contains(event.target) && (event.type === 'keyup' && event.key === TAB_KEY || /input|select|option|textarea|form/i.test(event.target.tagName))) {\n          continue;\n        }\n\n        if (event.type === 'click') {\n          relatedTarget.clickEvent = event;\n        }\n      }\n\n      context._completeHide(relatedTarget);\n    }\n  }\n\n  static getParentFromElement(element) {\n    return getElementFromSelector(element) || element.parentNode;\n  }\n\n  static dataApiKeydownHandler(event) {\n    // If not input/textarea:\n    //  - And not a key in REGEXP_KEYDOWN => not a dropdown command\n    // If input/textarea:\n    //  - If space key => not a dropdown command\n    //  - If key is other than escape\n    //    - If key is not up or down => not a dropdown command\n    //    - If trigger inside the menu => not a dropdown command\n    if (/input|textarea/i.test(event.target.tagName) ? event.key === SPACE_KEY || event.key !== ESCAPE_KEY$2 && (event.key !== ARROW_DOWN_KEY && event.key !== ARROW_UP_KEY || event.target.closest(SELECTOR_MENU)) : !REGEXP_KEYDOWN.test(event.key)) {\n      return;\n    }\n\n    const isActive = this.classList.contains(CLASS_NAME_SHOW$7);\n\n    if (!isActive && event.key === ESCAPE_KEY$2) {\n      return;\n    }\n\n    event.preventDefault();\n    event.stopPropagation();\n\n    if (isDisabled(this)) {\n      return;\n    }\n\n    const getToggleButton = () => this.matches(SELECTOR_DATA_TOGGLE$3) ? this : SelectorEngine.prev(this, SELECTOR_DATA_TOGGLE$3)[0];\n\n    if (event.key === ESCAPE_KEY$2) {\n      getToggleButton().focus();\n      Dropdown.clearMenus();\n      return;\n    }\n\n    if (event.key === ARROW_UP_KEY || event.key === ARROW_DOWN_KEY) {\n      if (!isActive) {\n        getToggleButton().click();\n      }\n\n      Dropdown.getInstance(getToggleButton())._selectMenuItem(event);\n\n      return;\n    }\n\n    if (!isActive || event.key === SPACE_KEY) {\n      Dropdown.clearMenus();\n    }\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_DATA_TOGGLE$3, Dropdown.dataApiKeydownHandler);\nEventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown.dataApiKeydownHandler);\nEventHandler.on(document, EVENT_CLICK_DATA_API$3, Dropdown.clearMenus);\nEventHandler.on(document, EVENT_KEYUP_DATA_API, Dropdown.clearMenus);\nEventHandler.on(document, EVENT_CLICK_DATA_API$3, SELECTOR_DATA_TOGGLE$3, function (event) {\n  event.preventDefault();\n  Dropdown.dropdownInterface(this);\n});\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Dropdown to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Dropdown);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): util/scrollBar.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\nconst SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top';\nconst SELECTOR_STICKY_CONTENT = '.sticky-top';\n\nclass ScrollBarHelper {\n  constructor() {\n    this._element = document.body;\n  }\n\n  getWidth() {\n    // https://developer.mozilla.org/en-US/docs/Web/API/Window/innerWidth#usage_notes\n    const documentWidth = document.documentElement.clientWidth;\n    return Math.abs(window.innerWidth - documentWidth);\n  }\n\n  hide() {\n    const width = this.getWidth();\n\n    this._disableOverFlow(); // give padding to element to balance the hidden scrollbar width\n\n\n    this._setElementAttributes(this._element, 'paddingRight', calculatedValue => calculatedValue + width); // trick: We adjust positive paddingRight and negative marginRight to sticky-top elements to keep showing fullwidth\n\n\n    this._setElementAttributes(SELECTOR_FIXED_CONTENT, 'paddingRight', calculatedValue => calculatedValue + width);\n\n    this._setElementAttributes(SELECTOR_STICKY_CONTENT, 'marginRight', calculatedValue => calculatedValue - width);\n  }\n\n  _disableOverFlow() {\n    this._saveInitialAttribute(this._element, 'overflow');\n\n    this._element.style.overflow = 'hidden';\n  }\n\n  _setElementAttributes(selector, styleProp, callback) {\n    const scrollbarWidth = this.getWidth();\n\n    const manipulationCallBack = element => {\n      if (element !== this._element && window.innerWidth > element.clientWidth + scrollbarWidth) {\n        return;\n      }\n\n      this._saveInitialAttribute(element, styleProp);\n\n      const calculatedValue = window.getComputedStyle(element)[styleProp];\n      element.style[styleProp] = `${callback(Number.parseFloat(calculatedValue))}px`;\n    };\n\n    this._applyManipulationCallback(selector, manipulationCallBack);\n  }\n\n  reset() {\n    this._resetElementAttributes(this._element, 'overflow');\n\n    this._resetElementAttributes(this._element, 'paddingRight');\n\n    this._resetElementAttributes(SELECTOR_FIXED_CONTENT, 'paddingRight');\n\n    this._resetElementAttributes(SELECTOR_STICKY_CONTENT, 'marginRight');\n  }\n\n  _saveInitialAttribute(element, styleProp) {\n    const actualValue = element.style[styleProp];\n\n    if (actualValue) {\n      Manipulator.setDataAttribute(element, styleProp, actualValue);\n    }\n  }\n\n  _resetElementAttributes(selector, styleProp) {\n    const manipulationCallBack = element => {\n      const value = Manipulator.getDataAttribute(element, styleProp);\n\n      if (typeof value === 'undefined') {\n        element.style.removeProperty(styleProp);\n      } else {\n        Manipulator.removeDataAttribute(element, styleProp);\n        element.style[styleProp] = value;\n      }\n    };\n\n    this._applyManipulationCallback(selector, manipulationCallBack);\n  }\n\n  _applyManipulationCallback(selector, callBack) {\n    if (isElement(selector)) {\n      callBack(selector);\n    } else {\n      SelectorEngine.find(selector, this._element).forEach(callBack);\n    }\n  }\n\n  isOverflowing() {\n    return this.getWidth() > 0;\n  }\n\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): util/backdrop.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\nconst Default$6 = {\n  isVisible: true,\n  // if false, we use the backdrop helper without adding any element to the dom\n  isAnimated: false,\n  rootElement: 'body',\n  // give the choice to place backdrop under different elements\n  clickCallback: null\n};\nconst DefaultType$6 = {\n  isVisible: 'boolean',\n  isAnimated: 'boolean',\n  rootElement: '(element|string)',\n  clickCallback: '(function|null)'\n};\nconst NAME$7 = 'backdrop';\nconst CLASS_NAME_BACKDROP = 'modal-backdrop';\nconst CLASS_NAME_FADE$5 = 'fade';\nconst CLASS_NAME_SHOW$6 = 'show';\nconst EVENT_MOUSEDOWN = `mousedown.bs.${NAME$7}`;\n\nclass Backdrop {\n  constructor(config) {\n    this._config = this._getConfig(config);\n    this._isAppended = false;\n    this._element = null;\n  }\n\n  show(callback) {\n    if (!this._config.isVisible) {\n      execute(callback);\n      return;\n    }\n\n    this._append();\n\n    if (this._config.isAnimated) {\n      reflow(this._getElement());\n    }\n\n    this._getElement().classList.add(CLASS_NAME_SHOW$6);\n\n    this._emulateAnimation(() => {\n      execute(callback);\n    });\n  }\n\n  hide(callback) {\n    if (!this._config.isVisible) {\n      execute(callback);\n      return;\n    }\n\n    this._getElement().classList.remove(CLASS_NAME_SHOW$6);\n\n    this._emulateAnimation(() => {\n      this.dispose();\n      execute(callback);\n    });\n  } // Private\n\n\n  _getElement() {\n    if (!this._element) {\n      const backdrop = document.createElement('div');\n      backdrop.className = CLASS_NAME_BACKDROP;\n\n      if (this._config.isAnimated) {\n        backdrop.classList.add(CLASS_NAME_FADE$5);\n      }\n\n      this._element = backdrop;\n    }\n\n    return this._element;\n  }\n\n  _getConfig(config) {\n    config = { ...Default$6,\n      ...(typeof config === 'object' ? config : {})\n    }; // use getElement() with the default \"body\" to get a fresh Element on each instantiation\n\n    config.rootElement = getElement(config.rootElement);\n    typeCheckConfig(NAME$7, config, DefaultType$6);\n    return config;\n  }\n\n  _append() {\n    if (this._isAppended) {\n      return;\n    }\n\n    this._config.rootElement.appendChild(this._getElement());\n\n    EventHandler.on(this._getElement(), EVENT_MOUSEDOWN, () => {\n      execute(this._config.clickCallback);\n    });\n    this._isAppended = true;\n  }\n\n  dispose() {\n    if (!this._isAppended) {\n      return;\n    }\n\n    EventHandler.off(this._element, EVENT_MOUSEDOWN);\n\n    this._element.remove();\n\n    this._isAppended = false;\n  }\n\n  _emulateAnimation(callback) {\n    executeAfterTransition(callback, this._getElement(), this._config.isAnimated);\n  }\n\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): modal.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$6 = 'modal';\nconst DATA_KEY$6 = 'bs.modal';\nconst EVENT_KEY$6 = `.${DATA_KEY$6}`;\nconst DATA_API_KEY$3 = '.data-api';\nconst ESCAPE_KEY$1 = 'Escape';\nconst Default$5 = {\n  backdrop: true,\n  keyboard: true,\n  focus: true\n};\nconst DefaultType$5 = {\n  backdrop: '(boolean|string)',\n  keyboard: 'boolean',\n  focus: 'boolean'\n};\nconst EVENT_HIDE$3 = `hide${EVENT_KEY$6}`;\nconst EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY$6}`;\nconst EVENT_HIDDEN$3 = `hidden${EVENT_KEY$6}`;\nconst EVENT_SHOW$3 = `show${EVENT_KEY$6}`;\nconst EVENT_SHOWN$3 = `shown${EVENT_KEY$6}`;\nconst EVENT_FOCUSIN$2 = `focusin${EVENT_KEY$6}`;\nconst EVENT_RESIZE = `resize${EVENT_KEY$6}`;\nconst EVENT_CLICK_DISMISS$2 = `click.dismiss${EVENT_KEY$6}`;\nconst EVENT_KEYDOWN_DISMISS$1 = `keydown.dismiss${EVENT_KEY$6}`;\nconst EVENT_MOUSEUP_DISMISS = `mouseup.dismiss${EVENT_KEY$6}`;\nconst EVENT_MOUSEDOWN_DISMISS = `mousedown.dismiss${EVENT_KEY$6}`;\nconst EVENT_CLICK_DATA_API$2 = `click${EVENT_KEY$6}${DATA_API_KEY$3}`;\nconst CLASS_NAME_OPEN = 'modal-open';\nconst CLASS_NAME_FADE$4 = 'fade';\nconst CLASS_NAME_SHOW$5 = 'show';\nconst CLASS_NAME_STATIC = 'modal-static';\nconst SELECTOR_DIALOG = '.modal-dialog';\nconst SELECTOR_MODAL_BODY = '.modal-body';\nconst SELECTOR_DATA_TOGGLE$2 = '[data-bs-toggle=\"modal\"]';\nconst SELECTOR_DATA_DISMISS$2 = '[data-bs-dismiss=\"modal\"]';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Modal extends BaseComponent {\n  constructor(element, config) {\n    super(element);\n    this._config = this._getConfig(config);\n    this._dialog = SelectorEngine.findOne(SELECTOR_DIALOG, this._element);\n    this._backdrop = this._initializeBackDrop();\n    this._isShown = false;\n    this._ignoreBackdropClick = false;\n    this._isTransitioning = false;\n    this._scrollBar = new ScrollBarHelper();\n  } // Getters\n\n\n  static get Default() {\n    return Default$5;\n  }\n\n  static get NAME() {\n    return NAME$6;\n  } // Public\n\n\n  toggle(relatedTarget) {\n    return this._isShown ? this.hide() : this.show(relatedTarget);\n  }\n\n  show(relatedTarget) {\n    if (this._isShown || this._isTransitioning) {\n      return;\n    }\n\n    const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$3, {\n      relatedTarget\n    });\n\n    if (showEvent.defaultPrevented) {\n      return;\n    }\n\n    this._isShown = true;\n\n    if (this._isAnimated()) {\n      this._isTransitioning = true;\n    }\n\n    this._scrollBar.hide();\n\n    document.body.classList.add(CLASS_NAME_OPEN);\n\n    this._adjustDialog();\n\n    this._setEscapeEvent();\n\n    this._setResizeEvent();\n\n    EventHandler.on(this._element, EVENT_CLICK_DISMISS$2, SELECTOR_DATA_DISMISS$2, event => this.hide(event));\n    EventHandler.on(this._dialog, EVENT_MOUSEDOWN_DISMISS, () => {\n      EventHandler.one(this._element, EVENT_MOUSEUP_DISMISS, event => {\n        if (event.target === this._element) {\n          this._ignoreBackdropClick = true;\n        }\n      });\n    });\n\n    this._showBackdrop(() => this._showElement(relatedTarget));\n  }\n\n  hide(event) {\n    if (event && ['A', 'AREA'].includes(event.target.tagName)) {\n      event.preventDefault();\n    }\n\n    if (!this._isShown || this._isTransitioning) {\n      return;\n    }\n\n    const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$3);\n\n    if (hideEvent.defaultPrevented) {\n      return;\n    }\n\n    this._isShown = false;\n\n    const isAnimated = this._isAnimated();\n\n    if (isAnimated) {\n      this._isTransitioning = true;\n    }\n\n    this._setEscapeEvent();\n\n    this._setResizeEvent();\n\n    EventHandler.off(document, EVENT_FOCUSIN$2);\n\n    this._element.classList.remove(CLASS_NAME_SHOW$5);\n\n    EventHandler.off(this._element, EVENT_CLICK_DISMISS$2);\n    EventHandler.off(this._dialog, EVENT_MOUSEDOWN_DISMISS);\n\n    this._queueCallback(() => this._hideModal(), this._element, isAnimated);\n  }\n\n  dispose() {\n    [window, this._dialog].forEach(htmlElement => EventHandler.off(htmlElement, EVENT_KEY$6));\n\n    this._backdrop.dispose();\n\n    super.dispose();\n    /**\n     * `document` has 2 events `EVENT_FOCUSIN` and `EVENT_CLICK_DATA_API`\n     * Do not move `document` in `htmlElements` array\n     * It will remove `EVENT_CLICK_DATA_API` event that should remain\n     */\n\n    EventHandler.off(document, EVENT_FOCUSIN$2);\n  }\n\n  handleUpdate() {\n    this._adjustDialog();\n  } // Private\n\n\n  _initializeBackDrop() {\n    return new Backdrop({\n      isVisible: Boolean(this._config.backdrop),\n      // 'static' option will be translated to true, and booleans will keep their value\n      isAnimated: this._isAnimated()\n    });\n  }\n\n  _getConfig(config) {\n    config = { ...Default$5,\n      ...Manipulator.getDataAttributes(this._element),\n      ...(typeof config === 'object' ? config : {})\n    };\n    typeCheckConfig(NAME$6, config, DefaultType$5);\n    return config;\n  }\n\n  _showElement(relatedTarget) {\n    const isAnimated = this._isAnimated();\n\n    const modalBody = SelectorEngine.findOne(SELECTOR_MODAL_BODY, this._dialog);\n\n    if (!this._element.parentNode || this._element.parentNode.nodeType !== Node.ELEMENT_NODE) {\n      // Don't move modal's DOM position\n      document.body.appendChild(this._element);\n    }\n\n    this._element.style.display = 'block';\n\n    this._element.removeAttribute('aria-hidden');\n\n    this._element.setAttribute('aria-modal', true);\n\n    this._element.setAttribute('role', 'dialog');\n\n    this._element.scrollTop = 0;\n\n    if (modalBody) {\n      modalBody.scrollTop = 0;\n    }\n\n    if (isAnimated) {\n      reflow(this._element);\n    }\n\n    this._element.classList.add(CLASS_NAME_SHOW$5);\n\n    if (this._config.focus) {\n      this._enforceFocus();\n    }\n\n    const transitionComplete = () => {\n      if (this._config.focus) {\n        this._element.focus();\n      }\n\n      this._isTransitioning = false;\n      EventHandler.trigger(this._element, EVENT_SHOWN$3, {\n        relatedTarget\n      });\n    };\n\n    this._queueCallback(transitionComplete, this._dialog, isAnimated);\n  }\n\n  _enforceFocus() {\n    EventHandler.off(document, EVENT_FOCUSIN$2); // guard against infinite focus loop\n\n    EventHandler.on(document, EVENT_FOCUSIN$2, event => {\n      if (document !== event.target && this._element !== event.target && !this._element.contains(event.target)) {\n        this._element.focus();\n      }\n    });\n  }\n\n  _setEscapeEvent() {\n    if (this._isShown) {\n      EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS$1, event => {\n        if (this._config.keyboard && event.key === ESCAPE_KEY$1) {\n          event.preventDefault();\n          this.hide();\n        } else if (!this._config.keyboard && event.key === ESCAPE_KEY$1) {\n          this._triggerBackdropTransition();\n        }\n      });\n    } else {\n      EventHandler.off(this._element, EVENT_KEYDOWN_DISMISS$1);\n    }\n  }\n\n  _setResizeEvent() {\n    if (this._isShown) {\n      EventHandler.on(window, EVENT_RESIZE, () => this._adjustDialog());\n    } else {\n      EventHandler.off(window, EVENT_RESIZE);\n    }\n  }\n\n  _hideModal() {\n    this._element.style.display = 'none';\n\n    this._element.setAttribute('aria-hidden', true);\n\n    this._element.removeAttribute('aria-modal');\n\n    this._element.removeAttribute('role');\n\n    this._isTransitioning = false;\n\n    this._backdrop.hide(() => {\n      document.body.classList.remove(CLASS_NAME_OPEN);\n\n      this._resetAdjustments();\n\n      this._scrollBar.reset();\n\n      EventHandler.trigger(this._element, EVENT_HIDDEN$3);\n    });\n  }\n\n  _showBackdrop(callback) {\n    EventHandler.on(this._element, EVENT_CLICK_DISMISS$2, event => {\n      if (this._ignoreBackdropClick) {\n        this._ignoreBackdropClick = false;\n        return;\n      }\n\n      if (event.target !== event.currentTarget) {\n        return;\n      }\n\n      if (this._config.backdrop === true) {\n        this.hide();\n      } else if (this._config.backdrop === 'static') {\n        this._triggerBackdropTransition();\n      }\n    });\n\n    this._backdrop.show(callback);\n  }\n\n  _isAnimated() {\n    return this._element.classList.contains(CLASS_NAME_FADE$4);\n  }\n\n  _triggerBackdropTransition() {\n    const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED);\n\n    if (hideEvent.defaultPrevented) {\n      return;\n    }\n\n    const {\n      classList,\n      scrollHeight,\n      style\n    } = this._element;\n    const isModalOverflowing = scrollHeight > document.documentElement.clientHeight; // return if the following background transition hasn't yet completed\n\n    if (!isModalOverflowing && style.overflowY === 'hidden' || classList.contains(CLASS_NAME_STATIC)) {\n      return;\n    }\n\n    if (!isModalOverflowing) {\n      style.overflowY = 'hidden';\n    }\n\n    classList.add(CLASS_NAME_STATIC);\n\n    this._queueCallback(() => {\n      classList.remove(CLASS_NAME_STATIC);\n\n      if (!isModalOverflowing) {\n        this._queueCallback(() => {\n          style.overflowY = '';\n        }, this._dialog);\n      }\n    }, this._dialog);\n\n    this._element.focus();\n  } // ----------------------------------------------------------------------\n  // the following methods are used to handle overflowing modals\n  // ----------------------------------------------------------------------\n\n\n  _adjustDialog() {\n    const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;\n\n    const scrollbarWidth = this._scrollBar.getWidth();\n\n    const isBodyOverflowing = scrollbarWidth > 0;\n\n    if (!isBodyOverflowing && isModalOverflowing && !isRTL() || isBodyOverflowing && !isModalOverflowing && isRTL()) {\n      this._element.style.paddingLeft = `${scrollbarWidth}px`;\n    }\n\n    if (isBodyOverflowing && !isModalOverflowing && !isRTL() || !isBodyOverflowing && isModalOverflowing && isRTL()) {\n      this._element.style.paddingRight = `${scrollbarWidth}px`;\n    }\n  }\n\n  _resetAdjustments() {\n    this._element.style.paddingLeft = '';\n    this._element.style.paddingRight = '';\n  } // Static\n\n\n  static jQueryInterface(config, relatedTarget) {\n    return this.each(function () {\n      const data = Modal.getOrCreateInstance(this, config);\n\n      if (typeof config !== 'string') {\n        return;\n      }\n\n      if (typeof data[config] === 'undefined') {\n        throw new TypeError(`No method named \"${config}\"`);\n      }\n\n      data[config](relatedTarget);\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$2, SELECTOR_DATA_TOGGLE$2, function (event) {\n  const target = getElementFromSelector(this);\n\n  if (['A', 'AREA'].includes(this.tagName)) {\n    event.preventDefault();\n  }\n\n  EventHandler.one(target, EVENT_SHOW$3, showEvent => {\n    if (showEvent.defaultPrevented) {\n      // only register focus restorer if modal will actually get shown\n      return;\n    }\n\n    EventHandler.one(target, EVENT_HIDDEN$3, () => {\n      if (isVisible(this)) {\n        this.focus();\n      }\n    });\n  });\n  const data = Modal.getOrCreateInstance(target);\n  data.toggle(this);\n});\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Modal to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Modal);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): offcanvas.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$5 = 'offcanvas';\nconst DATA_KEY$5 = 'bs.offcanvas';\nconst EVENT_KEY$5 = `.${DATA_KEY$5}`;\nconst DATA_API_KEY$2 = '.data-api';\nconst EVENT_LOAD_DATA_API$1 = `load${EVENT_KEY$5}${DATA_API_KEY$2}`;\nconst ESCAPE_KEY = 'Escape';\nconst Default$4 = {\n  backdrop: true,\n  keyboard: true,\n  scroll: false\n};\nconst DefaultType$4 = {\n  backdrop: 'boolean',\n  keyboard: 'boolean',\n  scroll: 'boolean'\n};\nconst CLASS_NAME_SHOW$4 = 'show';\nconst OPEN_SELECTOR = '.offcanvas.show';\nconst EVENT_SHOW$2 = `show${EVENT_KEY$5}`;\nconst EVENT_SHOWN$2 = `shown${EVENT_KEY$5}`;\nconst EVENT_HIDE$2 = `hide${EVENT_KEY$5}`;\nconst EVENT_HIDDEN$2 = `hidden${EVENT_KEY$5}`;\nconst EVENT_FOCUSIN$1 = `focusin${EVENT_KEY$5}`;\nconst EVENT_CLICK_DATA_API$1 = `click${EVENT_KEY$5}${DATA_API_KEY$2}`;\nconst EVENT_CLICK_DISMISS$1 = `click.dismiss${EVENT_KEY$5}`;\nconst EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY$5}`;\nconst SELECTOR_DATA_DISMISS$1 = '[data-bs-dismiss=\"offcanvas\"]';\nconst SELECTOR_DATA_TOGGLE$1 = '[data-bs-toggle=\"offcanvas\"]';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Offcanvas extends BaseComponent {\n  constructor(element, config) {\n    super(element);\n    this._config = this._getConfig(config);\n    this._isShown = false;\n    this._backdrop = this._initializeBackDrop();\n\n    this._addEventListeners();\n  } // Getters\n\n\n  static get NAME() {\n    return NAME$5;\n  }\n\n  static get Default() {\n    return Default$4;\n  } // Public\n\n\n  toggle(relatedTarget) {\n    return this._isShown ? this.hide() : this.show(relatedTarget);\n  }\n\n  show(relatedTarget) {\n    if (this._isShown) {\n      return;\n    }\n\n    const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$2, {\n      relatedTarget\n    });\n\n    if (showEvent.defaultPrevented) {\n      return;\n    }\n\n    this._isShown = true;\n    this._element.style.visibility = 'visible';\n\n    this._backdrop.show();\n\n    if (!this._config.scroll) {\n      new ScrollBarHelper().hide();\n\n      this._enforceFocusOnElement(this._element);\n    }\n\n    this._element.removeAttribute('aria-hidden');\n\n    this._element.setAttribute('aria-modal', true);\n\n    this._element.setAttribute('role', 'dialog');\n\n    this._element.classList.add(CLASS_NAME_SHOW$4);\n\n    const completeCallBack = () => {\n      EventHandler.trigger(this._element, EVENT_SHOWN$2, {\n        relatedTarget\n      });\n    };\n\n    this._queueCallback(completeCallBack, this._element, true);\n  }\n\n  hide() {\n    if (!this._isShown) {\n      return;\n    }\n\n    const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$2);\n\n    if (hideEvent.defaultPrevented) {\n      return;\n    }\n\n    EventHandler.off(document, EVENT_FOCUSIN$1);\n\n    this._element.blur();\n\n    this._isShown = false;\n\n    this._element.classList.remove(CLASS_NAME_SHOW$4);\n\n    this._backdrop.hide();\n\n    const completeCallback = () => {\n      this._element.setAttribute('aria-hidden', true);\n\n      this._element.removeAttribute('aria-modal');\n\n      this._element.removeAttribute('role');\n\n      this._element.style.visibility = 'hidden';\n\n      if (!this._config.scroll) {\n        new ScrollBarHelper().reset();\n      }\n\n      EventHandler.trigger(this._element, EVENT_HIDDEN$2);\n    };\n\n    this._queueCallback(completeCallback, this._element, true);\n  }\n\n  dispose() {\n    this._backdrop.dispose();\n\n    super.dispose();\n    EventHandler.off(document, EVENT_FOCUSIN$1);\n  } // Private\n\n\n  _getConfig(config) {\n    config = { ...Default$4,\n      ...Manipulator.getDataAttributes(this._element),\n      ...(typeof config === 'object' ? config : {})\n    };\n    typeCheckConfig(NAME$5, config, DefaultType$4);\n    return config;\n  }\n\n  _initializeBackDrop() {\n    return new Backdrop({\n      isVisible: this._config.backdrop,\n      isAnimated: true,\n      rootElement: this._element.parentNode,\n      clickCallback: () => this.hide()\n    });\n  }\n\n  _enforceFocusOnElement(element) {\n    EventHandler.off(document, EVENT_FOCUSIN$1); // guard against infinite focus loop\n\n    EventHandler.on(document, EVENT_FOCUSIN$1, event => {\n      if (document !== event.target && element !== event.target && !element.contains(event.target)) {\n        element.focus();\n      }\n    });\n    element.focus();\n  }\n\n  _addEventListeners() {\n    EventHandler.on(this._element, EVENT_CLICK_DISMISS$1, SELECTOR_DATA_DISMISS$1, () => this.hide());\n    EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS, event => {\n      if (this._config.keyboard && event.key === ESCAPE_KEY) {\n        this.hide();\n      }\n    });\n  } // Static\n\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Offcanvas.getOrCreateInstance(this, config);\n\n      if (typeof config !== 'string') {\n        return;\n      }\n\n      if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n        throw new TypeError(`No method named \"${config}\"`);\n      }\n\n      data[config](this);\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$1, SELECTOR_DATA_TOGGLE$1, function (event) {\n  const target = getElementFromSelector(this);\n\n  if (['A', 'AREA'].includes(this.tagName)) {\n    event.preventDefault();\n  }\n\n  if (isDisabled(this)) {\n    return;\n  }\n\n  EventHandler.one(target, EVENT_HIDDEN$2, () => {\n    // focus on trigger when it is closed\n    if (isVisible(this)) {\n      this.focus();\n    }\n  }); // avoid conflict when clicking a toggler of an offcanvas, while another is open\n\n  const allReadyOpen = SelectorEngine.findOne(OPEN_SELECTOR);\n\n  if (allReadyOpen && allReadyOpen !== target) {\n    Offcanvas.getInstance(allReadyOpen).hide();\n  }\n\n  const data = Offcanvas.getOrCreateInstance(target);\n  data.toggle(this);\n});\nEventHandler.on(window, EVENT_LOAD_DATA_API$1, () => SelectorEngine.find(OPEN_SELECTOR).forEach(el => Offcanvas.getOrCreateInstance(el).show()));\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\ndefineJQueryPlugin(Offcanvas);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): util/sanitizer.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\nconst uriAttrs = new Set(['background', 'cite', 'href', 'itemtype', 'longdesc', 'poster', 'src', 'xlink:href']);\nconst ARIA_ATTRIBUTE_PATTERN = /^aria-[\\w-]*$/i;\n/**\n * A pattern that recognizes a commonly useful subset of URLs that are safe.\n *\n * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts\n */\n\nconst SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file):|[^#&/:?]*(?:[#/?]|$))/i;\n/**\n * A pattern that matches safe data URLs. Only matches image, video and audio types.\n *\n * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts\n */\n\nconst DATA_URL_PATTERN = /^data:(?:image\\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\\/(?:mpeg|mp4|ogg|webm)|audio\\/(?:mp3|oga|ogg|opus));base64,[\\d+/a-z]+=*$/i;\n\nconst allowedAttribute = (attr, allowedAttributeList) => {\n  const attrName = attr.nodeName.toLowerCase();\n\n  if (allowedAttributeList.includes(attrName)) {\n    if (uriAttrs.has(attrName)) {\n      return Boolean(SAFE_URL_PATTERN.test(attr.nodeValue) || DATA_URL_PATTERN.test(attr.nodeValue));\n    }\n\n    return true;\n  }\n\n  const regExp = allowedAttributeList.filter(attrRegex => attrRegex instanceof RegExp); // Check if a regular expression validates the attribute.\n\n  for (let i = 0, len = regExp.length; i < len; i++) {\n    if (regExp[i].test(attrName)) {\n      return true;\n    }\n  }\n\n  return false;\n};\n\nconst DefaultAllowlist = {\n  // Global attributes allowed on any supplied element below.\n  '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],\n  a: ['target', 'href', 'title', 'rel'],\n  area: [],\n  b: [],\n  br: [],\n  col: [],\n  code: [],\n  div: [],\n  em: [],\n  hr: [],\n  h1: [],\n  h2: [],\n  h3: [],\n  h4: [],\n  h5: [],\n  h6: [],\n  i: [],\n  img: ['src', 'srcset', 'alt', 'title', 'width', 'height'],\n  li: [],\n  ol: [],\n  p: [],\n  pre: [],\n  s: [],\n  small: [],\n  span: [],\n  sub: [],\n  sup: [],\n  strong: [],\n  u: [],\n  ul: []\n};\nfunction sanitizeHtml(unsafeHtml, allowList, sanitizeFn) {\n  if (!unsafeHtml.length) {\n    return unsafeHtml;\n  }\n\n  if (sanitizeFn && typeof sanitizeFn === 'function') {\n    return sanitizeFn(unsafeHtml);\n  }\n\n  const domParser = new window.DOMParser();\n  const createdDocument = domParser.parseFromString(unsafeHtml, 'text/html');\n  const allowlistKeys = Object.keys(allowList);\n  const elements = [].concat(...createdDocument.body.querySelectorAll('*'));\n\n  for (let i = 0, len = elements.length; i < len; i++) {\n    const el = elements[i];\n    const elName = el.nodeName.toLowerCase();\n\n    if (!allowlistKeys.includes(elName)) {\n      el.remove();\n      continue;\n    }\n\n    const attributeList = [].concat(...el.attributes);\n    const allowedAttributes = [].concat(allowList['*'] || [], allowList[elName] || []);\n    attributeList.forEach(attr => {\n      if (!allowedAttribute(attr, allowedAttributes)) {\n        el.removeAttribute(attr.nodeName);\n      }\n    });\n  }\n\n  return createdDocument.body.innerHTML;\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): tooltip.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$4 = 'tooltip';\nconst DATA_KEY$4 = 'bs.tooltip';\nconst EVENT_KEY$4 = `.${DATA_KEY$4}`;\nconst CLASS_PREFIX$1 = 'bs-tooltip';\nconst BSCLS_PREFIX_REGEX$1 = new RegExp(`(^|\\\\s)${CLASS_PREFIX$1}\\\\S+`, 'g');\nconst DISALLOWED_ATTRIBUTES = new Set(['sanitize', 'allowList', 'sanitizeFn']);\nconst DefaultType$3 = {\n  animation: 'boolean',\n  template: 'string',\n  title: '(string|element|function)',\n  trigger: 'string',\n  delay: '(number|object)',\n  html: 'boolean',\n  selector: '(string|boolean)',\n  placement: '(string|function)',\n  offset: '(array|string|function)',\n  container: '(string|element|boolean)',\n  fallbackPlacements: 'array',\n  boundary: '(string|element)',\n  customClass: '(string|function)',\n  sanitize: 'boolean',\n  sanitizeFn: '(null|function)',\n  allowList: 'object',\n  popperConfig: '(null|object|function)'\n};\nconst AttachmentMap = {\n  AUTO: 'auto',\n  TOP: 'top',\n  RIGHT: isRTL() ? 'left' : 'right',\n  BOTTOM: 'bottom',\n  LEFT: isRTL() ? 'right' : 'left'\n};\nconst Default$3 = {\n  animation: true,\n  template: '<div class=\"tooltip\" role=\"tooltip\">' + '<div class=\"tooltip-arrow\"></div>' + '<div class=\"tooltip-inner\"></div>' + '</div>',\n  trigger: 'hover focus',\n  title: '',\n  delay: 0,\n  html: false,\n  selector: false,\n  placement: 'top',\n  offset: [0, 0],\n  container: false,\n  fallbackPlacements: ['top', 'right', 'bottom', 'left'],\n  boundary: 'clippingParents',\n  customClass: '',\n  sanitize: true,\n  sanitizeFn: null,\n  allowList: DefaultAllowlist,\n  popperConfig: null\n};\nconst Event$2 = {\n  HIDE: `hide${EVENT_KEY$4}`,\n  HIDDEN: `hidden${EVENT_KEY$4}`,\n  SHOW: `show${EVENT_KEY$4}`,\n  SHOWN: `shown${EVENT_KEY$4}`,\n  INSERTED: `inserted${EVENT_KEY$4}`,\n  CLICK: `click${EVENT_KEY$4}`,\n  FOCUSIN: `focusin${EVENT_KEY$4}`,\n  FOCUSOUT: `focusout${EVENT_KEY$4}`,\n  MOUSEENTER: `mouseenter${EVENT_KEY$4}`,\n  MOUSELEAVE: `mouseleave${EVENT_KEY$4}`\n};\nconst CLASS_NAME_FADE$3 = 'fade';\nconst CLASS_NAME_MODAL = 'modal';\nconst CLASS_NAME_SHOW$3 = 'show';\nconst HOVER_STATE_SHOW = 'show';\nconst HOVER_STATE_OUT = 'out';\nconst SELECTOR_TOOLTIP_INNER = '.tooltip-inner';\nconst TRIGGER_HOVER = 'hover';\nconst TRIGGER_FOCUS = 'focus';\nconst TRIGGER_CLICK = 'click';\nconst TRIGGER_MANUAL = 'manual';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Tooltip extends BaseComponent {\n  constructor(element, config) {\n    if (typeof Popper === 'undefined') {\n      throw new TypeError('Bootstrap\\'s tooltips require Popper (https://popper.js.org)');\n    }\n\n    super(element); // private\n\n    this._isEnabled = true;\n    this._timeout = 0;\n    this._hoverState = '';\n    this._activeTrigger = {};\n    this._popper = null; // Protected\n\n    this._config = this._getConfig(config);\n    this.tip = null;\n\n    this._setListeners();\n  } // Getters\n\n\n  static get Default() {\n    return Default$3;\n  }\n\n  static get NAME() {\n    return NAME$4;\n  }\n\n  static get Event() {\n    return Event$2;\n  }\n\n  static get DefaultType() {\n    return DefaultType$3;\n  } // Public\n\n\n  enable() {\n    this._isEnabled = true;\n  }\n\n  disable() {\n    this._isEnabled = false;\n  }\n\n  toggleEnabled() {\n    this._isEnabled = !this._isEnabled;\n  }\n\n  toggle(event) {\n    if (!this._isEnabled) {\n      return;\n    }\n\n    if (event) {\n      const context = this._initializeOnDelegatedTarget(event);\n\n      context._activeTrigger.click = !context._activeTrigger.click;\n\n      if (context._isWithActiveTrigger()) {\n        context._enter(null, context);\n      } else {\n        context._leave(null, context);\n      }\n    } else {\n      if (this.getTipElement().classList.contains(CLASS_NAME_SHOW$3)) {\n        this._leave(null, this);\n\n        return;\n      }\n\n      this._enter(null, this);\n    }\n  }\n\n  dispose() {\n    clearTimeout(this._timeout);\n    EventHandler.off(this._element.closest(`.${CLASS_NAME_MODAL}`), 'hide.bs.modal', this._hideModalHandler);\n\n    if (this.tip) {\n      this.tip.remove();\n    }\n\n    if (this._popper) {\n      this._popper.destroy();\n    }\n\n    super.dispose();\n  }\n\n  show() {\n    if (this._element.style.display === 'none') {\n      throw new Error('Please use show on visible elements');\n    }\n\n    if (!(this.isWithContent() && this._isEnabled)) {\n      return;\n    }\n\n    const showEvent = EventHandler.trigger(this._element, this.constructor.Event.SHOW);\n    const shadowRoot = findShadowRoot(this._element);\n    const isInTheDom = shadowRoot === null ? this._element.ownerDocument.documentElement.contains(this._element) : shadowRoot.contains(this._element);\n\n    if (showEvent.defaultPrevented || !isInTheDom) {\n      return;\n    }\n\n    const tip = this.getTipElement();\n    const tipId = getUID(this.constructor.NAME);\n    tip.setAttribute('id', tipId);\n\n    this._element.setAttribute('aria-describedby', tipId);\n\n    this.setContent();\n\n    if (this._config.animation) {\n      tip.classList.add(CLASS_NAME_FADE$3);\n    }\n\n    const placement = typeof this._config.placement === 'function' ? this._config.placement.call(this, tip, this._element) : this._config.placement;\n\n    const attachment = this._getAttachment(placement);\n\n    this._addAttachmentClass(attachment);\n\n    const {\n      container\n    } = this._config;\n    Data.set(tip, this.constructor.DATA_KEY, this);\n\n    if (!this._element.ownerDocument.documentElement.contains(this.tip)) {\n      container.appendChild(tip);\n      EventHandler.trigger(this._element, this.constructor.Event.INSERTED);\n    }\n\n    if (this._popper) {\n      this._popper.update();\n    } else {\n      this._popper = Popper.createPopper(this._element, tip, this._getPopperConfig(attachment));\n    }\n\n    tip.classList.add(CLASS_NAME_SHOW$3);\n    const customClass = typeof this._config.customClass === 'function' ? this._config.customClass() : this._config.customClass;\n\n    if (customClass) {\n      tip.classList.add(...customClass.split(' '));\n    } // If this is a touch-enabled device we add extra\n    // empty mouseover listeners to the body's immediate children;\n    // only needed because of broken event delegation on iOS\n    // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n\n\n    if ('ontouchstart' in document.documentElement) {\n      [].concat(...document.body.children).forEach(element => {\n        EventHandler.on(element, 'mouseover', noop);\n      });\n    }\n\n    const complete = () => {\n      const prevHoverState = this._hoverState;\n      this._hoverState = null;\n      EventHandler.trigger(this._element, this.constructor.Event.SHOWN);\n\n      if (prevHoverState === HOVER_STATE_OUT) {\n        this._leave(null, this);\n      }\n    };\n\n    const isAnimated = this.tip.classList.contains(CLASS_NAME_FADE$3);\n\n    this._queueCallback(complete, this.tip, isAnimated);\n  }\n\n  hide() {\n    if (!this._popper) {\n      return;\n    }\n\n    const tip = this.getTipElement();\n\n    const complete = () => {\n      if (this._isWithActiveTrigger()) {\n        return;\n      }\n\n      if (this._hoverState !== HOVER_STATE_SHOW) {\n        tip.remove();\n      }\n\n      this._cleanTipClass();\n\n      this._element.removeAttribute('aria-describedby');\n\n      EventHandler.trigger(this._element, this.constructor.Event.HIDDEN);\n\n      if (this._popper) {\n        this._popper.destroy();\n\n        this._popper = null;\n      }\n    };\n\n    const hideEvent = EventHandler.trigger(this._element, this.constructor.Event.HIDE);\n\n    if (hideEvent.defaultPrevented) {\n      return;\n    }\n\n    tip.classList.remove(CLASS_NAME_SHOW$3); // If this is a touch-enabled device we remove the extra\n    // empty mouseover listeners we added for iOS support\n\n    if ('ontouchstart' in document.documentElement) {\n      [].concat(...document.body.children).forEach(element => EventHandler.off(element, 'mouseover', noop));\n    }\n\n    this._activeTrigger[TRIGGER_CLICK] = false;\n    this._activeTrigger[TRIGGER_FOCUS] = false;\n    this._activeTrigger[TRIGGER_HOVER] = false;\n    const isAnimated = this.tip.classList.contains(CLASS_NAME_FADE$3);\n\n    this._queueCallback(complete, this.tip, isAnimated);\n\n    this._hoverState = '';\n  }\n\n  update() {\n    if (this._popper !== null) {\n      this._popper.update();\n    }\n  } // Protected\n\n\n  isWithContent() {\n    return Boolean(this.getTitle());\n  }\n\n  getTipElement() {\n    if (this.tip) {\n      return this.tip;\n    }\n\n    const element = document.createElement('div');\n    element.innerHTML = this._config.template;\n    this.tip = element.children[0];\n    return this.tip;\n  }\n\n  setContent() {\n    const tip = this.getTipElement();\n    this.setElementContent(SelectorEngine.findOne(SELECTOR_TOOLTIP_INNER, tip), this.getTitle());\n    tip.classList.remove(CLASS_NAME_FADE$3, CLASS_NAME_SHOW$3);\n  }\n\n  setElementContent(element, content) {\n    if (element === null) {\n      return;\n    }\n\n    if (isElement(content)) {\n      content = getElement(content); // content is a DOM node or a jQuery\n\n      if (this._config.html) {\n        if (content.parentNode !== element) {\n          element.innerHTML = '';\n          element.appendChild(content);\n        }\n      } else {\n        element.textContent = content.textContent;\n      }\n\n      return;\n    }\n\n    if (this._config.html) {\n      if (this._config.sanitize) {\n        content = sanitizeHtml(content, this._config.allowList, this._config.sanitizeFn);\n      }\n\n      element.innerHTML = content;\n    } else {\n      element.textContent = content;\n    }\n  }\n\n  getTitle() {\n    let title = this._element.getAttribute('data-bs-original-title');\n\n    if (!title) {\n      title = typeof this._config.title === 'function' ? this._config.title.call(this._element) : this._config.title;\n    }\n\n    return title;\n  }\n\n  updateAttachment(attachment) {\n    if (attachment === 'right') {\n      return 'end';\n    }\n\n    if (attachment === 'left') {\n      return 'start';\n    }\n\n    return attachment;\n  } // Private\n\n\n  _initializeOnDelegatedTarget(event, context) {\n    const dataKey = this.constructor.DATA_KEY;\n    context = context || Data.get(event.delegateTarget, dataKey);\n\n    if (!context) {\n      context = new this.constructor(event.delegateTarget, this._getDelegateConfig());\n      Data.set(event.delegateTarget, dataKey, context);\n    }\n\n    return context;\n  }\n\n  _getOffset() {\n    const {\n      offset\n    } = this._config;\n\n    if (typeof offset === 'string') {\n      return offset.split(',').map(val => Number.parseInt(val, 10));\n    }\n\n    if (typeof offset === 'function') {\n      return popperData => offset(popperData, this._element);\n    }\n\n    return offset;\n  }\n\n  _getPopperConfig(attachment) {\n    const defaultBsPopperConfig = {\n      placement: attachment,\n      modifiers: [{\n        name: 'flip',\n        options: {\n          fallbackPlacements: this._config.fallbackPlacements\n        }\n      }, {\n        name: 'offset',\n        options: {\n          offset: this._getOffset()\n        }\n      }, {\n        name: 'preventOverflow',\n        options: {\n          boundary: this._config.boundary\n        }\n      }, {\n        name: 'arrow',\n        options: {\n          element: `.${this.constructor.NAME}-arrow`\n        }\n      }, {\n        name: 'onChange',\n        enabled: true,\n        phase: 'afterWrite',\n        fn: data => this._handlePopperPlacementChange(data)\n      }],\n      onFirstUpdate: data => {\n        if (data.options.placement !== data.placement) {\n          this._handlePopperPlacementChange(data);\n        }\n      }\n    };\n    return { ...defaultBsPopperConfig,\n      ...(typeof this._config.popperConfig === 'function' ? this._config.popperConfig(defaultBsPopperConfig) : this._config.popperConfig)\n    };\n  }\n\n  _addAttachmentClass(attachment) {\n    this.getTipElement().classList.add(`${CLASS_PREFIX$1}-${this.updateAttachment(attachment)}`);\n  }\n\n  _getAttachment(placement) {\n    return AttachmentMap[placement.toUpperCase()];\n  }\n\n  _setListeners() {\n    const triggers = this._config.trigger.split(' ');\n\n    triggers.forEach(trigger => {\n      if (trigger === 'click') {\n        EventHandler.on(this._element, this.constructor.Event.CLICK, this._config.selector, event => this.toggle(event));\n      } else if (trigger !== TRIGGER_MANUAL) {\n        const eventIn = trigger === TRIGGER_HOVER ? this.constructor.Event.MOUSEENTER : this.constructor.Event.FOCUSIN;\n        const eventOut = trigger === TRIGGER_HOVER ? this.constructor.Event.MOUSELEAVE : this.constructor.Event.FOCUSOUT;\n        EventHandler.on(this._element, eventIn, this._config.selector, event => this._enter(event));\n        EventHandler.on(this._element, eventOut, this._config.selector, event => this._leave(event));\n      }\n    });\n\n    this._hideModalHandler = () => {\n      if (this._element) {\n        this.hide();\n      }\n    };\n\n    EventHandler.on(this._element.closest(`.${CLASS_NAME_MODAL}`), 'hide.bs.modal', this._hideModalHandler);\n\n    if (this._config.selector) {\n      this._config = { ...this._config,\n        trigger: 'manual',\n        selector: ''\n      };\n    } else {\n      this._fixTitle();\n    }\n  }\n\n  _fixTitle() {\n    const title = this._element.getAttribute('title');\n\n    const originalTitleType = typeof this._element.getAttribute('data-bs-original-title');\n\n    if (title || originalTitleType !== 'string') {\n      this._element.setAttribute('data-bs-original-title', title || '');\n\n      if (title && !this._element.getAttribute('aria-label') && !this._element.textContent) {\n        this._element.setAttribute('aria-label', title);\n      }\n\n      this._element.setAttribute('title', '');\n    }\n  }\n\n  _enter(event, context) {\n    context = this._initializeOnDelegatedTarget(event, context);\n\n    if (event) {\n      context._activeTrigger[event.type === 'focusin' ? TRIGGER_FOCUS : TRIGGER_HOVER] = true;\n    }\n\n    if (context.getTipElement().classList.contains(CLASS_NAME_SHOW$3) || context._hoverState === HOVER_STATE_SHOW) {\n      context._hoverState = HOVER_STATE_SHOW;\n      return;\n    }\n\n    clearTimeout(context._timeout);\n    context._hoverState = HOVER_STATE_SHOW;\n\n    if (!context._config.delay || !context._config.delay.show) {\n      context.show();\n      return;\n    }\n\n    context._timeout = setTimeout(() => {\n      if (context._hoverState === HOVER_STATE_SHOW) {\n        context.show();\n      }\n    }, context._config.delay.show);\n  }\n\n  _leave(event, context) {\n    context = this._initializeOnDelegatedTarget(event, context);\n\n    if (event) {\n      context._activeTrigger[event.type === 'focusout' ? TRIGGER_FOCUS : TRIGGER_HOVER] = context._element.contains(event.relatedTarget);\n    }\n\n    if (context._isWithActiveTrigger()) {\n      return;\n    }\n\n    clearTimeout(context._timeout);\n    context._hoverState = HOVER_STATE_OUT;\n\n    if (!context._config.delay || !context._config.delay.hide) {\n      context.hide();\n      return;\n    }\n\n    context._timeout = setTimeout(() => {\n      if (context._hoverState === HOVER_STATE_OUT) {\n        context.hide();\n      }\n    }, context._config.delay.hide);\n  }\n\n  _isWithActiveTrigger() {\n    for (const trigger in this._activeTrigger) {\n      if (this._activeTrigger[trigger]) {\n        return true;\n      }\n    }\n\n    return false;\n  }\n\n  _getConfig(config) {\n    const dataAttributes = Manipulator.getDataAttributes(this._element);\n    Object.keys(dataAttributes).forEach(dataAttr => {\n      if (DISALLOWED_ATTRIBUTES.has(dataAttr)) {\n        delete dataAttributes[dataAttr];\n      }\n    });\n    config = { ...this.constructor.Default,\n      ...dataAttributes,\n      ...(typeof config === 'object' && config ? config : {})\n    };\n    config.container = config.container === false ? document.body : getElement(config.container);\n\n    if (typeof config.delay === 'number') {\n      config.delay = {\n        show: config.delay,\n        hide: config.delay\n      };\n    }\n\n    if (typeof config.title === 'number') {\n      config.title = config.title.toString();\n    }\n\n    if (typeof config.content === 'number') {\n      config.content = config.content.toString();\n    }\n\n    typeCheckConfig(NAME$4, config, this.constructor.DefaultType);\n\n    if (config.sanitize) {\n      config.template = sanitizeHtml(config.template, config.allowList, config.sanitizeFn);\n    }\n\n    return config;\n  }\n\n  _getDelegateConfig() {\n    const config = {};\n\n    if (this._config) {\n      for (const key in this._config) {\n        if (this.constructor.Default[key] !== this._config[key]) {\n          config[key] = this._config[key];\n        }\n      }\n    }\n\n    return config;\n  }\n\n  _cleanTipClass() {\n    const tip = this.getTipElement();\n    const tabClass = tip.getAttribute('class').match(BSCLS_PREFIX_REGEX$1);\n\n    if (tabClass !== null && tabClass.length > 0) {\n      tabClass.map(token => token.trim()).forEach(tClass => tip.classList.remove(tClass));\n    }\n  }\n\n  _handlePopperPlacementChange(popperData) {\n    const {\n      state\n    } = popperData;\n\n    if (!state) {\n      return;\n    }\n\n    this.tip = state.elements.popper;\n\n    this._cleanTipClass();\n\n    this._addAttachmentClass(this._getAttachment(state.placement));\n  } // Static\n\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Tooltip.getOrCreateInstance(this, config);\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config]();\n      }\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Tooltip to jQuery only if jQuery is present\n */\n\n\ndefineJQueryPlugin(Tooltip);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): popover.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$3 = 'popover';\nconst DATA_KEY$3 = 'bs.popover';\nconst EVENT_KEY$3 = `.${DATA_KEY$3}`;\nconst CLASS_PREFIX = 'bs-popover';\nconst BSCLS_PREFIX_REGEX = new RegExp(`(^|\\\\s)${CLASS_PREFIX}\\\\S+`, 'g');\nconst Default$2 = { ...Tooltip.Default,\n  placement: 'right',\n  offset: [0, 8],\n  trigger: 'click',\n  content: '',\n  template: '<div class=\"popover\" role=\"tooltip\">' + '<div class=\"popover-arrow\"></div>' + '<h3 class=\"popover-header\"></h3>' + '<div class=\"popover-body\"></div>' + '</div>'\n};\nconst DefaultType$2 = { ...Tooltip.DefaultType,\n  content: '(string|element|function)'\n};\nconst Event$1 = {\n  HIDE: `hide${EVENT_KEY$3}`,\n  HIDDEN: `hidden${EVENT_KEY$3}`,\n  SHOW: `show${EVENT_KEY$3}`,\n  SHOWN: `shown${EVENT_KEY$3}`,\n  INSERTED: `inserted${EVENT_KEY$3}`,\n  CLICK: `click${EVENT_KEY$3}`,\n  FOCUSIN: `focusin${EVENT_KEY$3}`,\n  FOCUSOUT: `focusout${EVENT_KEY$3}`,\n  MOUSEENTER: `mouseenter${EVENT_KEY$3}`,\n  MOUSELEAVE: `mouseleave${EVENT_KEY$3}`\n};\nconst CLASS_NAME_FADE$2 = 'fade';\nconst CLASS_NAME_SHOW$2 = 'show';\nconst SELECTOR_TITLE = '.popover-header';\nconst SELECTOR_CONTENT = '.popover-body';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Popover extends Tooltip {\n  // Getters\n  static get Default() {\n    return Default$2;\n  }\n\n  static get NAME() {\n    return NAME$3;\n  }\n\n  static get Event() {\n    return Event$1;\n  }\n\n  static get DefaultType() {\n    return DefaultType$2;\n  } // Overrides\n\n\n  isWithContent() {\n    return this.getTitle() || this._getContent();\n  }\n\n  getTipElement() {\n    if (this.tip) {\n      return this.tip;\n    }\n\n    this.tip = super.getTipElement();\n\n    if (!this.getTitle()) {\n      SelectorEngine.findOne(SELECTOR_TITLE, this.tip).remove();\n    }\n\n    if (!this._getContent()) {\n      SelectorEngine.findOne(SELECTOR_CONTENT, this.tip).remove();\n    }\n\n    return this.tip;\n  }\n\n  setContent() {\n    const tip = this.getTipElement(); // we use append for html objects to maintain js events\n\n    this.setElementContent(SelectorEngine.findOne(SELECTOR_TITLE, tip), this.getTitle());\n\n    let content = this._getContent();\n\n    if (typeof content === 'function') {\n      content = content.call(this._element);\n    }\n\n    this.setElementContent(SelectorEngine.findOne(SELECTOR_CONTENT, tip), content);\n    tip.classList.remove(CLASS_NAME_FADE$2, CLASS_NAME_SHOW$2);\n  } // Private\n\n\n  _addAttachmentClass(attachment) {\n    this.getTipElement().classList.add(`${CLASS_PREFIX}-${this.updateAttachment(attachment)}`);\n  }\n\n  _getContent() {\n    return this._element.getAttribute('data-bs-content') || this._config.content;\n  }\n\n  _cleanTipClass() {\n    const tip = this.getTipElement();\n    const tabClass = tip.getAttribute('class').match(BSCLS_PREFIX_REGEX);\n\n    if (tabClass !== null && tabClass.length > 0) {\n      tabClass.map(token => token.trim()).forEach(tClass => tip.classList.remove(tClass));\n    }\n  } // Static\n\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Popover.getOrCreateInstance(this, config);\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config]();\n      }\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Popover to jQuery only if jQuery is present\n */\n\n\ndefineJQueryPlugin(Popover);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): scrollspy.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$2 = 'scrollspy';\nconst DATA_KEY$2 = 'bs.scrollspy';\nconst EVENT_KEY$2 = `.${DATA_KEY$2}`;\nconst DATA_API_KEY$1 = '.data-api';\nconst Default$1 = {\n  offset: 10,\n  method: 'auto',\n  target: ''\n};\nconst DefaultType$1 = {\n  offset: 'number',\n  method: 'string',\n  target: '(string|element)'\n};\nconst EVENT_ACTIVATE = `activate${EVENT_KEY$2}`;\nconst EVENT_SCROLL = `scroll${EVENT_KEY$2}`;\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY$2}${DATA_API_KEY$1}`;\nconst CLASS_NAME_DROPDOWN_ITEM = 'dropdown-item';\nconst CLASS_NAME_ACTIVE$1 = 'active';\nconst SELECTOR_DATA_SPY = '[data-bs-spy=\"scroll\"]';\nconst SELECTOR_NAV_LIST_GROUP$1 = '.nav, .list-group';\nconst SELECTOR_NAV_LINKS = '.nav-link';\nconst SELECTOR_NAV_ITEMS = '.nav-item';\nconst SELECTOR_LIST_ITEMS = '.list-group-item';\nconst SELECTOR_DROPDOWN$1 = '.dropdown';\nconst SELECTOR_DROPDOWN_TOGGLE$1 = '.dropdown-toggle';\nconst METHOD_OFFSET = 'offset';\nconst METHOD_POSITION = 'position';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass ScrollSpy extends BaseComponent {\n  constructor(element, config) {\n    super(element);\n    this._scrollElement = this._element.tagName === 'BODY' ? window : this._element;\n    this._config = this._getConfig(config);\n    this._selector = `${this._config.target} ${SELECTOR_NAV_LINKS}, ${this._config.target} ${SELECTOR_LIST_ITEMS}, ${this._config.target} .${CLASS_NAME_DROPDOWN_ITEM}`;\n    this._offsets = [];\n    this._targets = [];\n    this._activeTarget = null;\n    this._scrollHeight = 0;\n    EventHandler.on(this._scrollElement, EVENT_SCROLL, () => this._process());\n    this.refresh();\n\n    this._process();\n  } // Getters\n\n\n  static get Default() {\n    return Default$1;\n  }\n\n  static get NAME() {\n    return NAME$2;\n  } // Public\n\n\n  refresh() {\n    const autoMethod = this._scrollElement === this._scrollElement.window ? METHOD_OFFSET : METHOD_POSITION;\n    const offsetMethod = this._config.method === 'auto' ? autoMethod : this._config.method;\n    const offsetBase = offsetMethod === METHOD_POSITION ? this._getScrollTop() : 0;\n    this._offsets = [];\n    this._targets = [];\n    this._scrollHeight = this._getScrollHeight();\n    const targets = SelectorEngine.find(this._selector);\n    targets.map(element => {\n      const targetSelector = getSelectorFromElement(element);\n      const target = targetSelector ? SelectorEngine.findOne(targetSelector) : null;\n\n      if (target) {\n        const targetBCR = target.getBoundingClientRect();\n\n        if (targetBCR.width || targetBCR.height) {\n          return [Manipulator[offsetMethod](target).top + offsetBase, targetSelector];\n        }\n      }\n\n      return null;\n    }).filter(item => item).sort((a, b) => a[0] - b[0]).forEach(item => {\n      this._offsets.push(item[0]);\n\n      this._targets.push(item[1]);\n    });\n  }\n\n  dispose() {\n    EventHandler.off(this._scrollElement, EVENT_KEY$2);\n    super.dispose();\n  } // Private\n\n\n  _getConfig(config) {\n    config = { ...Default$1,\n      ...Manipulator.getDataAttributes(this._element),\n      ...(typeof config === 'object' && config ? config : {})\n    };\n\n    if (typeof config.target !== 'string' && isElement(config.target)) {\n      let {\n        id\n      } = config.target;\n\n      if (!id) {\n        id = getUID(NAME$2);\n        config.target.id = id;\n      }\n\n      config.target = `#${id}`;\n    }\n\n    typeCheckConfig(NAME$2, config, DefaultType$1);\n    return config;\n  }\n\n  _getScrollTop() {\n    return this._scrollElement === window ? this._scrollElement.pageYOffset : this._scrollElement.scrollTop;\n  }\n\n  _getScrollHeight() {\n    return this._scrollElement.scrollHeight || Math.max(document.body.scrollHeight, document.documentElement.scrollHeight);\n  }\n\n  _getOffsetHeight() {\n    return this._scrollElement === window ? window.innerHeight : this._scrollElement.getBoundingClientRect().height;\n  }\n\n  _process() {\n    const scrollTop = this._getScrollTop() + this._config.offset;\n\n    const scrollHeight = this._getScrollHeight();\n\n    const maxScroll = this._config.offset + scrollHeight - this._getOffsetHeight();\n\n    if (this._scrollHeight !== scrollHeight) {\n      this.refresh();\n    }\n\n    if (scrollTop >= maxScroll) {\n      const target = this._targets[this._targets.length - 1];\n\n      if (this._activeTarget !== target) {\n        this._activate(target);\n      }\n\n      return;\n    }\n\n    if (this._activeTarget && scrollTop < this._offsets[0] && this._offsets[0] > 0) {\n      this._activeTarget = null;\n\n      this._clear();\n\n      return;\n    }\n\n    for (let i = this._offsets.length; i--;) {\n      const isActiveTarget = this._activeTarget !== this._targets[i] && scrollTop >= this._offsets[i] && (typeof this._offsets[i + 1] === 'undefined' || scrollTop < this._offsets[i + 1]);\n\n      if (isActiveTarget) {\n        this._activate(this._targets[i]);\n      }\n    }\n  }\n\n  _activate(target) {\n    this._activeTarget = target;\n\n    this._clear();\n\n    const queries = this._selector.split(',').map(selector => `${selector}[data-bs-target=\"${target}\"],${selector}[href=\"${target}\"]`);\n\n    const link = SelectorEngine.findOne(queries.join(','));\n\n    if (link.classList.contains(CLASS_NAME_DROPDOWN_ITEM)) {\n      SelectorEngine.findOne(SELECTOR_DROPDOWN_TOGGLE$1, link.closest(SELECTOR_DROPDOWN$1)).classList.add(CLASS_NAME_ACTIVE$1);\n      link.classList.add(CLASS_NAME_ACTIVE$1);\n    } else {\n      // Set triggered link as active\n      link.classList.add(CLASS_NAME_ACTIVE$1);\n      SelectorEngine.parents(link, SELECTOR_NAV_LIST_GROUP$1).forEach(listGroup => {\n        // Set triggered links parents as active\n        // With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor\n        SelectorEngine.prev(listGroup, `${SELECTOR_NAV_LINKS}, ${SELECTOR_LIST_ITEMS}`).forEach(item => item.classList.add(CLASS_NAME_ACTIVE$1)); // Handle special case when .nav-link is inside .nav-item\n\n        SelectorEngine.prev(listGroup, SELECTOR_NAV_ITEMS).forEach(navItem => {\n          SelectorEngine.children(navItem, SELECTOR_NAV_LINKS).forEach(item => item.classList.add(CLASS_NAME_ACTIVE$1));\n        });\n      });\n    }\n\n    EventHandler.trigger(this._scrollElement, EVENT_ACTIVATE, {\n      relatedTarget: target\n    });\n  }\n\n  _clear() {\n    SelectorEngine.find(this._selector).filter(node => node.classList.contains(CLASS_NAME_ACTIVE$1)).forEach(node => node.classList.remove(CLASS_NAME_ACTIVE$1));\n  } // Static\n\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = ScrollSpy.getOrCreateInstance(this, config);\n\n      if (typeof config !== 'string') {\n        return;\n      }\n\n      if (typeof data[config] === 'undefined') {\n        throw new TypeError(`No method named \"${config}\"`);\n      }\n\n      data[config]();\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n  SelectorEngine.find(SELECTOR_DATA_SPY).forEach(spy => new ScrollSpy(spy));\n});\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .ScrollSpy to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(ScrollSpy);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): tab.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$1 = 'tab';\nconst DATA_KEY$1 = 'bs.tab';\nconst EVENT_KEY$1 = `.${DATA_KEY$1}`;\nconst DATA_API_KEY = '.data-api';\nconst EVENT_HIDE$1 = `hide${EVENT_KEY$1}`;\nconst EVENT_HIDDEN$1 = `hidden${EVENT_KEY$1}`;\nconst EVENT_SHOW$1 = `show${EVENT_KEY$1}`;\nconst EVENT_SHOWN$1 = `shown${EVENT_KEY$1}`;\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY$1}${DATA_API_KEY}`;\nconst CLASS_NAME_DROPDOWN_MENU = 'dropdown-menu';\nconst CLASS_NAME_ACTIVE = 'active';\nconst CLASS_NAME_FADE$1 = 'fade';\nconst CLASS_NAME_SHOW$1 = 'show';\nconst SELECTOR_DROPDOWN = '.dropdown';\nconst SELECTOR_NAV_LIST_GROUP = '.nav, .list-group';\nconst SELECTOR_ACTIVE = '.active';\nconst SELECTOR_ACTIVE_UL = ':scope > li > .active';\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"tab\"], [data-bs-toggle=\"pill\"], [data-bs-toggle=\"list\"]';\nconst SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle';\nconst SELECTOR_DROPDOWN_ACTIVE_CHILD = ':scope > .dropdown-menu .active';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Tab extends BaseComponent {\n  // Getters\n  static get NAME() {\n    return NAME$1;\n  } // Public\n\n\n  show() {\n    if (this._element.parentNode && this._element.parentNode.nodeType === Node.ELEMENT_NODE && this._element.classList.contains(CLASS_NAME_ACTIVE)) {\n      return;\n    }\n\n    let previous;\n    const target = getElementFromSelector(this._element);\n\n    const listElement = this._element.closest(SELECTOR_NAV_LIST_GROUP);\n\n    if (listElement) {\n      const itemSelector = listElement.nodeName === 'UL' || listElement.nodeName === 'OL' ? SELECTOR_ACTIVE_UL : SELECTOR_ACTIVE;\n      previous = SelectorEngine.find(itemSelector, listElement);\n      previous = previous[previous.length - 1];\n    }\n\n    const hideEvent = previous ? EventHandler.trigger(previous, EVENT_HIDE$1, {\n      relatedTarget: this._element\n    }) : null;\n    const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$1, {\n      relatedTarget: previous\n    });\n\n    if (showEvent.defaultPrevented || hideEvent !== null && hideEvent.defaultPrevented) {\n      return;\n    }\n\n    this._activate(this._element, listElement);\n\n    const complete = () => {\n      EventHandler.trigger(previous, EVENT_HIDDEN$1, {\n        relatedTarget: this._element\n      });\n      EventHandler.trigger(this._element, EVENT_SHOWN$1, {\n        relatedTarget: previous\n      });\n    };\n\n    if (target) {\n      this._activate(target, target.parentNode, complete);\n    } else {\n      complete();\n    }\n  } // Private\n\n\n  _activate(element, container, callback) {\n    const activeElements = container && (container.nodeName === 'UL' || container.nodeName === 'OL') ? SelectorEngine.find(SELECTOR_ACTIVE_UL, container) : SelectorEngine.children(container, SELECTOR_ACTIVE);\n    const active = activeElements[0];\n    const isTransitioning = callback && active && active.classList.contains(CLASS_NAME_FADE$1);\n\n    const complete = () => this._transitionComplete(element, active, callback);\n\n    if (active && isTransitioning) {\n      active.classList.remove(CLASS_NAME_SHOW$1);\n\n      this._queueCallback(complete, element, true);\n    } else {\n      complete();\n    }\n  }\n\n  _transitionComplete(element, active, callback) {\n    if (active) {\n      active.classList.remove(CLASS_NAME_ACTIVE);\n      const dropdownChild = SelectorEngine.findOne(SELECTOR_DROPDOWN_ACTIVE_CHILD, active.parentNode);\n\n      if (dropdownChild) {\n        dropdownChild.classList.remove(CLASS_NAME_ACTIVE);\n      }\n\n      if (active.getAttribute('role') === 'tab') {\n        active.setAttribute('aria-selected', false);\n      }\n    }\n\n    element.classList.add(CLASS_NAME_ACTIVE);\n\n    if (element.getAttribute('role') === 'tab') {\n      element.setAttribute('aria-selected', true);\n    }\n\n    reflow(element);\n\n    if (element.classList.contains(CLASS_NAME_FADE$1)) {\n      element.classList.add(CLASS_NAME_SHOW$1);\n    }\n\n    let parent = element.parentNode;\n\n    if (parent && parent.nodeName === 'LI') {\n      parent = parent.parentNode;\n    }\n\n    if (parent && parent.classList.contains(CLASS_NAME_DROPDOWN_MENU)) {\n      const dropdownElement = element.closest(SELECTOR_DROPDOWN);\n\n      if (dropdownElement) {\n        SelectorEngine.find(SELECTOR_DROPDOWN_TOGGLE, dropdownElement).forEach(dropdown => dropdown.classList.add(CLASS_NAME_ACTIVE));\n      }\n\n      element.setAttribute('aria-expanded', true);\n    }\n\n    if (callback) {\n      callback();\n    }\n  } // Static\n\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Tab.getOrCreateInstance(this);\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config]();\n      }\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n  if (['A', 'AREA'].includes(this.tagName)) {\n    event.preventDefault();\n  }\n\n  if (isDisabled(this)) {\n    return;\n  }\n\n  const data = Tab.getOrCreateInstance(this);\n  data.show();\n});\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Tab to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Tab);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): toast.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'toast';\nconst DATA_KEY = 'bs.toast';\nconst EVENT_KEY = `.${DATA_KEY}`;\nconst EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY}`;\nconst EVENT_MOUSEOVER = `mouseover${EVENT_KEY}`;\nconst EVENT_MOUSEOUT = `mouseout${EVENT_KEY}`;\nconst EVENT_FOCUSIN = `focusin${EVENT_KEY}`;\nconst EVENT_FOCUSOUT = `focusout${EVENT_KEY}`;\nconst EVENT_HIDE = `hide${EVENT_KEY}`;\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`;\nconst EVENT_SHOW = `show${EVENT_KEY}`;\nconst EVENT_SHOWN = `shown${EVENT_KEY}`;\nconst CLASS_NAME_FADE = 'fade';\nconst CLASS_NAME_HIDE = 'hide';\nconst CLASS_NAME_SHOW = 'show';\nconst CLASS_NAME_SHOWING = 'showing';\nconst DefaultType = {\n  animation: 'boolean',\n  autohide: 'boolean',\n  delay: 'number'\n};\nconst Default = {\n  animation: true,\n  autohide: true,\n  delay: 5000\n};\nconst SELECTOR_DATA_DISMISS = '[data-bs-dismiss=\"toast\"]';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Toast extends BaseComponent {\n  constructor(element, config) {\n    super(element);\n    this._config = this._getConfig(config);\n    this._timeout = null;\n    this._hasMouseInteraction = false;\n    this._hasKeyboardInteraction = false;\n\n    this._setListeners();\n  } // Getters\n\n\n  static get DefaultType() {\n    return DefaultType;\n  }\n\n  static get Default() {\n    return Default;\n  }\n\n  static get NAME() {\n    return NAME;\n  } // Public\n\n\n  show() {\n    const showEvent = EventHandler.trigger(this._element, EVENT_SHOW);\n\n    if (showEvent.defaultPrevented) {\n      return;\n    }\n\n    this._clearTimeout();\n\n    if (this._config.animation) {\n      this._element.classList.add(CLASS_NAME_FADE);\n    }\n\n    const complete = () => {\n      this._element.classList.remove(CLASS_NAME_SHOWING);\n\n      this._element.classList.add(CLASS_NAME_SHOW);\n\n      EventHandler.trigger(this._element, EVENT_SHOWN);\n\n      this._maybeScheduleHide();\n    };\n\n    this._element.classList.remove(CLASS_NAME_HIDE);\n\n    reflow(this._element);\n\n    this._element.classList.add(CLASS_NAME_SHOWING);\n\n    this._queueCallback(complete, this._element, this._config.animation);\n  }\n\n  hide() {\n    if (!this._element.classList.contains(CLASS_NAME_SHOW)) {\n      return;\n    }\n\n    const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE);\n\n    if (hideEvent.defaultPrevented) {\n      return;\n    }\n\n    const complete = () => {\n      this._element.classList.add(CLASS_NAME_HIDE);\n\n      EventHandler.trigger(this._element, EVENT_HIDDEN);\n    };\n\n    this._element.classList.remove(CLASS_NAME_SHOW);\n\n    this._queueCallback(complete, this._element, this._config.animation);\n  }\n\n  dispose() {\n    this._clearTimeout();\n\n    if (this._element.classList.contains(CLASS_NAME_SHOW)) {\n      this._element.classList.remove(CLASS_NAME_SHOW);\n    }\n\n    super.dispose();\n  } // Private\n\n\n  _getConfig(config) {\n    config = { ...Default,\n      ...Manipulator.getDataAttributes(this._element),\n      ...(typeof config === 'object' && config ? config : {})\n    };\n    typeCheckConfig(NAME, config, this.constructor.DefaultType);\n    return config;\n  }\n\n  _maybeScheduleHide() {\n    if (!this._config.autohide) {\n      return;\n    }\n\n    if (this._hasMouseInteraction || this._hasKeyboardInteraction) {\n      return;\n    }\n\n    this._timeout = setTimeout(() => {\n      this.hide();\n    }, this._config.delay);\n  }\n\n  _onInteraction(event, isInteracting) {\n    switch (event.type) {\n      case 'mouseover':\n      case 'mouseout':\n        this._hasMouseInteraction = isInteracting;\n        break;\n\n      case 'focusin':\n      case 'focusout':\n        this._hasKeyboardInteraction = isInteracting;\n        break;\n    }\n\n    if (isInteracting) {\n      this._clearTimeout();\n\n      return;\n    }\n\n    const nextElement = event.relatedTarget;\n\n    if (this._element === nextElement || this._element.contains(nextElement)) {\n      return;\n    }\n\n    this._maybeScheduleHide();\n  }\n\n  _setListeners() {\n    EventHandler.on(this._element, EVENT_CLICK_DISMISS, SELECTOR_DATA_DISMISS, () => this.hide());\n    EventHandler.on(this._element, EVENT_MOUSEOVER, event => this._onInteraction(event, true));\n    EventHandler.on(this._element, EVENT_MOUSEOUT, event => this._onInteraction(event, false));\n    EventHandler.on(this._element, EVENT_FOCUSIN, event => this._onInteraction(event, true));\n    EventHandler.on(this._element, EVENT_FOCUSOUT, event => this._onInteraction(event, false));\n  }\n\n  _clearTimeout() {\n    clearTimeout(this._timeout);\n    this._timeout = null;\n  } // Static\n\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Toast.getOrCreateInstance(this, config);\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config](this);\n      }\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Toast to jQuery only if jQuery is present\n */\n\n\ndefineJQueryPlugin(Toast);\n\nexport { Alert, Button, Carousel, Collapse, Dropdown, Modal, Offcanvas, Popover, ScrollSpy, Tab, Toast, Tooltip };\n//# sourceMappingURL=bootstrap.esm.js.map\n"
  },
  {
    "path": "src/sourceDev.WebApp/SharedThemes/simplex/wwwroot/js/jquery.js",
    "content": "/*!\n * jQuery JavaScript Library v3.7.0\n * https://jquery.com/\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license\n * https://jquery.org/license\n *\n * Date: 2023-05-11T18:29Z\n */\n(function (global, factory) {\n\n\t\"use strict\";\n\n\tif (typeof module === \"object\" && typeof module.exports === \"object\") {\n\n\t\t// For CommonJS and CommonJS-like environments where a proper `window`\n\t\t// is present, execute the factory and get jQuery.\n\t\t// For environments that do not have a `window` with a `document`\n\t\t// (such as Node.js), expose a factory as module.exports.\n\t\t// This accentuates the need for the creation of a real `window`.\n\t\t// e.g. var jQuery = require(\"jquery\")(window);\n\t\t// See ticket trac-14549 for more info.\n\t\tmodule.exports = global.document ?\n\t\t\tfactory(global, true) :\n\t\t\tfunction (w) {\n\t\t\t\tif (!w.document) {\n\t\t\t\t\tthrow new Error(\"jQuery requires a window with a document\");\n\t\t\t\t}\n\t\t\t\treturn factory(w);\n\t\t\t};\n\t} else {\n\t\tfactory(global);\n\t}\n\n\t// Pass this if window is not defined yet\n})(typeof window !== \"undefined\" ? window : this, function (window, noGlobal) {\n\n\t// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1\n\t// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode\n\t// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common\n\t// enough that all such attempts are guarded in a try block.\n\t\"use strict\";\n\n\tvar arr = [];\n\n\tvar getProto = Object.getPrototypeOf;\n\n\tvar slice = arr.slice;\n\n\tvar flat = arr.flat ? function (array) {\n\t\treturn arr.flat.call(array);\n\t} : function (array) {\n\t\treturn arr.concat.apply([], array);\n\t};\n\n\n\tvar push = arr.push;\n\n\tvar indexOf = arr.indexOf;\n\n\tvar class2type = {};\n\n\tvar toString = class2type.toString;\n\n\tvar hasOwn = class2type.hasOwnProperty;\n\n\tvar fnToString = hasOwn.toString;\n\n\tvar ObjectFunctionString = fnToString.call(Object);\n\n\tvar support = {};\n\n\tvar isFunction = function isFunction(obj) {\n\n\t\t// Support: Chrome <=57, Firefox <=52\n\t\t// In some browsers, typeof returns \"function\" for HTML <object> elements\n\t\t// (i.e., `typeof document.createElement( \"object\" ) === \"function\"`).\n\t\t// We don't want to classify *any* DOM node as a function.\n\t\t// Support: QtWeb <=3.8.5, WebKit <=534.34, wkhtmltopdf tool <=0.12.5\n\t\t// Plus for old WebKit, typeof returns \"function\" for HTML collections\n\t\t// (e.g., `typeof document.getElementsByTagName(\"div\") === \"function\"`). (gh-4756)\n\t\treturn typeof obj === \"function\" && typeof obj.nodeType !== \"number\" &&\n\t\t\ttypeof obj.item !== \"function\";\n\t};\n\n\n\tvar isWindow = function isWindow(obj) {\n\t\treturn obj != null && obj === obj.window;\n\t};\n\n\n\tvar document = window.document;\n\n\n\n\tvar preservedScriptAttributes = {\n\t\ttype: true,\n\t\tsrc: true,\n\t\tnonce: true,\n\t\tnoModule: true\n\t};\n\n\tfunction DOMEval(code, node, doc) {\n\t\tdoc = doc || document;\n\n\t\tvar i, val,\n\t\t\tscript = doc.createElement(\"script\");\n\n\t\tscript.text = code;\n\t\tif (node) {\n\t\t\tfor (i in preservedScriptAttributes) {\n\n\t\t\t\t// Support: Firefox 64+, Edge 18+\n\t\t\t\t// Some browsers don't support the \"nonce\" property on scripts.\n\t\t\t\t// On the other hand, just using `getAttribute` is not enough as\n\t\t\t\t// the `nonce` attribute is reset to an empty string whenever it\n\t\t\t\t// becomes browsing-context connected.\n\t\t\t\t// See https://github.com/whatwg/html/issues/2369\n\t\t\t\t// See https://html.spec.whatwg.org/#nonce-attributes\n\t\t\t\t// The `node.getAttribute` check was added for the sake of\n\t\t\t\t// `jQuery.globalEval` so that it can fake a nonce-containing node\n\t\t\t\t// via an object.\n\t\t\t\tval = node[i] || node.getAttribute && node.getAttribute(i);\n\t\t\t\tif (val) {\n\t\t\t\t\tscript.setAttribute(i, val);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tdoc.head.appendChild(script).parentNode.removeChild(script);\n\t}\n\n\n\tfunction toType(obj) {\n\t\tif (obj == null) {\n\t\t\treturn obj + \"\";\n\t\t}\n\n\t\t// Support: Android <=2.3 only (functionish RegExp)\n\t\treturn typeof obj === \"object\" || typeof obj === \"function\" ?\n\t\t\tclass2type[toString.call(obj)] || \"object\" :\n\t\t\ttypeof obj;\n\t}\n\t/* global Symbol */\n\t// Defining this global in .eslintrc.json would create a danger of using the global\n\t// unguarded in another place, it seems safer to define global only for this module\n\n\n\n\tvar version = \"3.7.0\",\n\n\t\trhtmlSuffix = /HTML$/i,\n\n\t\t// Define a local copy of jQuery\n\t\tjQuery = function (selector, context) {\n\n\t\t\t// The jQuery object is actually just the init constructor 'enhanced'\n\t\t\t// Need init if jQuery is called (just allow error to be thrown if not included)\n\t\t\treturn new jQuery.fn.init(selector, context);\n\t\t};\n\n\tjQuery.fn = jQuery.prototype = {\n\n\t\t// The current version of jQuery being used\n\t\tjquery: version,\n\n\t\tconstructor: jQuery,\n\n\t\t// The default length of a jQuery object is 0\n\t\tlength: 0,\n\n\t\ttoArray: function () {\n\t\t\treturn slice.call(this);\n\t\t},\n\n\t\t// Get the Nth element in the matched element set OR\n\t\t// Get the whole matched element set as a clean array\n\t\tget: function (num) {\n\n\t\t\t// Return all the elements in a clean array\n\t\t\tif (num == null) {\n\t\t\t\treturn slice.call(this);\n\t\t\t}\n\n\t\t\t// Return just the one element from the set\n\t\t\treturn num < 0 ? this[num + this.length] : this[num];\n\t\t},\n\n\t\t// Take an array of elements and push it onto the stack\n\t\t// (returning the new matched element set)\n\t\tpushStack: function (elems) {\n\n\t\t\t// Build a new jQuery matched element set\n\t\t\tvar ret = jQuery.merge(this.constructor(), elems);\n\n\t\t\t// Add the old object onto the stack (as a reference)\n\t\t\tret.prevObject = this;\n\n\t\t\t// Return the newly-formed element set\n\t\t\treturn ret;\n\t\t},\n\n\t\t// Execute a callback for every element in the matched set.\n\t\teach: function (callback) {\n\t\t\treturn jQuery.each(this, callback);\n\t\t},\n\n\t\tmap: function (callback) {\n\t\t\treturn this.pushStack(jQuery.map(this, function (elem, i) {\n\t\t\t\treturn callback.call(elem, i, elem);\n\t\t\t}));\n\t\t},\n\n\t\tslice: function () {\n\t\t\treturn this.pushStack(slice.apply(this, arguments));\n\t\t},\n\n\t\tfirst: function () {\n\t\t\treturn this.eq(0);\n\t\t},\n\n\t\tlast: function () {\n\t\t\treturn this.eq(-1);\n\t\t},\n\n\t\teven: function () {\n\t\t\treturn this.pushStack(jQuery.grep(this, function (_elem, i) {\n\t\t\t\treturn (i + 1) % 2;\n\t\t\t}));\n\t\t},\n\n\t\todd: function () {\n\t\t\treturn this.pushStack(jQuery.grep(this, function (_elem, i) {\n\t\t\t\treturn i % 2;\n\t\t\t}));\n\t\t},\n\n\t\teq: function (i) {\n\t\t\tvar len = this.length,\n\t\t\t\tj = +i + (i < 0 ? len : 0);\n\t\t\treturn this.pushStack(j >= 0 && j < len ? [this[j]] : []);\n\t\t},\n\n\t\tend: function () {\n\t\t\treturn this.prevObject || this.constructor();\n\t\t},\n\n\t\t// For internal use only.\n\t\t// Behaves like an Array's method, not like a jQuery method.\n\t\tpush: push,\n\t\tsort: arr.sort,\n\t\tsplice: arr.splice\n\t};\n\n\tjQuery.extend = jQuery.fn.extend = function () {\n\t\tvar options, name, src, copy, copyIsArray, clone,\n\t\t\ttarget = arguments[0] || {},\n\t\t\ti = 1,\n\t\t\tlength = arguments.length,\n\t\t\tdeep = false;\n\n\t\t// Handle a deep copy situation\n\t\tif (typeof target === \"boolean\") {\n\t\t\tdeep = target;\n\n\t\t\t// Skip the boolean and the target\n\t\t\ttarget = arguments[i] || {};\n\t\t\ti++;\n\t\t}\n\n\t\t// Handle case when target is a string or something (possible in deep copy)\n\t\tif (typeof target !== \"object\" && !isFunction(target)) {\n\t\t\ttarget = {};\n\t\t}\n\n\t\t// Extend jQuery itself if only one argument is passed\n\t\tif (i === length) {\n\t\t\ttarget = this;\n\t\t\ti--;\n\t\t}\n\n\t\tfor (; i < length; i++) {\n\n\t\t\t// Only deal with non-null/undefined values\n\t\t\tif ((options = arguments[i]) != null) {\n\n\t\t\t\t// Extend the base object\n\t\t\t\tfor (name in options) {\n\t\t\t\t\tcopy = options[name];\n\n\t\t\t\t\t// Prevent Object.prototype pollution\n\t\t\t\t\t// Prevent never-ending loop\n\t\t\t\t\tif (name === \"__proto__\" || target === copy) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\t\tif (deep && copy && (jQuery.isPlainObject(copy) ||\n\t\t\t\t\t\t(copyIsArray = Array.isArray(copy)))) {\n\t\t\t\t\t\tsrc = target[name];\n\n\t\t\t\t\t\t// Ensure proper type for the source value\n\t\t\t\t\t\tif (copyIsArray && !Array.isArray(src)) {\n\t\t\t\t\t\t\tclone = [];\n\t\t\t\t\t\t} else if (!copyIsArray && !jQuery.isPlainObject(src)) {\n\t\t\t\t\t\t\tclone = {};\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tclone = src;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcopyIsArray = false;\n\n\t\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\t\ttarget[name] = jQuery.extend(deep, clone, copy);\n\n\t\t\t\t\t\t// Don't bring in undefined values\n\t\t\t\t\t} else if (copy !== undefined) {\n\t\t\t\t\t\ttarget[name] = copy;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Return the modified object\n\t\treturn target;\n\t};\n\n\tjQuery.extend({\n\n\t\t// Unique for each copy of jQuery on the page\n\t\texpando: \"jQuery\" + (version + Math.random()).replace(/\\D/g, \"\"),\n\n\t\t// Assume jQuery is ready without the ready module\n\t\tisReady: true,\n\n\t\terror: function (msg) {\n\t\t\tthrow new Error(msg);\n\t\t},\n\n\t\tnoop: function () { },\n\n\t\tisPlainObject: function (obj) {\n\t\t\tvar proto, Ctor;\n\n\t\t\t// Detect obvious negatives\n\t\t\t// Use toString instead of jQuery.type to catch host objects\n\t\t\tif (!obj || toString.call(obj) !== \"[object Object]\") {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tproto = getProto(obj);\n\n\t\t\t// Objects with no prototype (e.g., `Object.create( null )`) are plain\n\t\t\tif (!proto) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\t// Objects with prototype are plain iff they were constructed by a global Object function\n\t\t\tCtor = hasOwn.call(proto, \"constructor\") && proto.constructor;\n\t\t\treturn typeof Ctor === \"function\" && fnToString.call(Ctor) === ObjectFunctionString;\n\t\t},\n\n\t\tisEmptyObject: function (obj) {\n\t\t\tvar name;\n\n\t\t\tfor (name in obj) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\n\t\t// Evaluates a script in a provided context; falls back to the global one\n\t\t// if not specified.\n\t\tglobalEval: function (code, options, doc) {\n\t\t\tDOMEval(code, { nonce: options && options.nonce }, doc);\n\t\t},\n\n\t\teach: function (obj, callback) {\n\t\t\tvar length, i = 0;\n\n\t\t\tif (isArrayLike(obj)) {\n\t\t\t\tlength = obj.length;\n\t\t\t\tfor (; i < length; i++) {\n\t\t\t\t\tif (callback.call(obj[i], i, obj[i]) === false) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor (i in obj) {\n\t\t\t\t\tif (callback.call(obj[i], i, obj[i]) === false) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn obj;\n\t\t},\n\n\n\t\t// Retrieve the text value of an array of DOM nodes\n\t\ttext: function (elem) {\n\t\t\tvar node,\n\t\t\t\tret = \"\",\n\t\t\t\ti = 0,\n\t\t\t\tnodeType = elem.nodeType;\n\n\t\t\tif (!nodeType) {\n\n\t\t\t\t// If no nodeType, this is expected to be an array\n\t\t\t\twhile ((node = elem[i++])) {\n\n\t\t\t\t\t// Do not traverse comment nodes\n\t\t\t\t\tret += jQuery.text(node);\n\t\t\t\t}\n\t\t\t} else if (nodeType === 1 || nodeType === 9 || nodeType === 11) {\n\t\t\t\treturn elem.textContent;\n\t\t\t} else if (nodeType === 3 || nodeType === 4) {\n\t\t\t\treturn elem.nodeValue;\n\t\t\t}\n\n\t\t\t// Do not include comment or processing instruction nodes\n\n\t\t\treturn ret;\n\t\t},\n\n\t\t// results is for internal usage only\n\t\tmakeArray: function (arr, results) {\n\t\t\tvar ret = results || [];\n\n\t\t\tif (arr != null) {\n\t\t\t\tif (isArrayLike(Object(arr))) {\n\t\t\t\t\tjQuery.merge(ret,\n\t\t\t\t\t\ttypeof arr === \"string\" ?\n\t\t\t\t\t\t\t[arr] : arr\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\tpush.call(ret, arr);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn ret;\n\t\t},\n\n\t\tinArray: function (elem, arr, i) {\n\t\t\treturn arr == null ? -1 : indexOf.call(arr, elem, i);\n\t\t},\n\n\t\tisXMLDoc: function (elem) {\n\t\t\tvar namespace = elem && elem.namespaceURI,\n\t\t\t\tdocElem = elem && (elem.ownerDocument || elem).documentElement;\n\n\t\t\t// Assume HTML when documentElement doesn't yet exist, such as inside\n\t\t\t// document fragments.\n\t\t\treturn !rhtmlSuffix.test(namespace || docElem && docElem.nodeName || \"HTML\");\n\t\t},\n\n\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\tmerge: function (first, second) {\n\t\t\tvar len = +second.length,\n\t\t\t\tj = 0,\n\t\t\t\ti = first.length;\n\n\t\t\tfor (; j < len; j++) {\n\t\t\t\tfirst[i++] = second[j];\n\t\t\t}\n\n\t\t\tfirst.length = i;\n\n\t\t\treturn first;\n\t\t},\n\n\t\tgrep: function (elems, callback, invert) {\n\t\t\tvar callbackInverse,\n\t\t\t\tmatches = [],\n\t\t\t\ti = 0,\n\t\t\t\tlength = elems.length,\n\t\t\t\tcallbackExpect = !invert;\n\n\t\t\t// Go through the array, only saving the items\n\t\t\t// that pass the validator function\n\t\t\tfor (; i < length; i++) {\n\t\t\t\tcallbackInverse = !callback(elems[i], i);\n\t\t\t\tif (callbackInverse !== callbackExpect) {\n\t\t\t\t\tmatches.push(elems[i]);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn matches;\n\t\t},\n\n\t\t// arg is for internal usage only\n\t\tmap: function (elems, callback, arg) {\n\t\t\tvar length, value,\n\t\t\t\ti = 0,\n\t\t\t\tret = [];\n\n\t\t\t// Go through the array, translating each of the items to their new values\n\t\t\tif (isArrayLike(elems)) {\n\t\t\t\tlength = elems.length;\n\t\t\t\tfor (; i < length; i++) {\n\t\t\t\t\tvalue = callback(elems[i], i, arg);\n\n\t\t\t\t\tif (value != null) {\n\t\t\t\t\t\tret.push(value);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Go through every key on the object,\n\t\t\t} else {\n\t\t\t\tfor (i in elems) {\n\t\t\t\t\tvalue = callback(elems[i], i, arg);\n\n\t\t\t\t\tif (value != null) {\n\t\t\t\t\t\tret.push(value);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Flatten any nested arrays\n\t\t\treturn flat(ret);\n\t\t},\n\n\t\t// A global GUID counter for objects\n\t\tguid: 1,\n\n\t\t// jQuery.support is not used in Core but other projects attach their\n\t\t// properties to it so it needs to exist.\n\t\tsupport: support\n\t});\n\n\tif (typeof Symbol === \"function\") {\n\t\tjQuery.fn[Symbol.iterator] = arr[Symbol.iterator];\n\t}\n\n\t// Populate the class2type map\n\tjQuery.each(\"Boolean Number String Function Array Date RegExp Object Error Symbol\".split(\" \"),\n\t\tfunction (_i, name) {\n\t\t\tclass2type[\"[object \" + name + \"]\"] = name.toLowerCase();\n\t\t});\n\n\tfunction isArrayLike(obj) {\n\n\t\t// Support: real iOS 8.2 only (not reproducible in simulator)\n\t\t// `in` check used to prevent JIT error (gh-2145)\n\t\t// hasOwn isn't used here due to false negatives\n\t\t// regarding Nodelist length in IE\n\t\tvar length = !!obj && \"length\" in obj && obj.length,\n\t\t\ttype = toType(obj);\n\n\t\tif (isFunction(obj) || isWindow(obj)) {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn type === \"array\" || length === 0 ||\n\t\t\ttypeof length === \"number\" && length > 0 && (length - 1) in obj;\n\t}\n\n\n\tfunction nodeName(elem, name) {\n\n\t\treturn elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();\n\n\t}\n\tvar pop = arr.pop;\n\n\n\tvar sort = arr.sort;\n\n\n\tvar splice = arr.splice;\n\n\n\tvar whitespace = \"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\";\n\n\n\tvar rtrimCSS = new RegExp(\n\t\t\"^\" + whitespace + \"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\" + whitespace + \"+$\",\n\t\t\"g\"\n\t);\n\n\n\n\n\t// Note: an element does not contain itself\n\tjQuery.contains = function (a, b) {\n\t\tvar bup = b && b.parentNode;\n\n\t\treturn a === bup || !!(bup && bup.nodeType === 1 && (\n\n\t\t\t// Support: IE 9 - 11+\n\t\t\t// IE doesn't have `contains` on SVG.\n\t\t\ta.contains ?\n\t\t\t\ta.contains(bup) :\n\t\t\t\ta.compareDocumentPosition && a.compareDocumentPosition(bup) & 16\n\t\t));\n\t};\n\n\n\n\n\t// CSS string/identifier serialization\n\t// https://drafts.csswg.org/cssom/#common-serializing-idioms\n\tvar rcssescape = /([\\0-\\x1f\\x7f]|^-?\\d)|^-$|[^\\x80-\\uFFFF\\w-]/g;\n\n\tfunction fcssescape(ch, asCodePoint) {\n\t\tif (asCodePoint) {\n\n\t\t\t// U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER\n\t\t\tif (ch === \"\\0\") {\n\t\t\t\treturn \"\\uFFFD\";\n\t\t\t}\n\n\t\t\t// Control characters and (dependent upon position) numbers get escaped as code points\n\t\t\treturn ch.slice(0, -1) + \"\\\\\" + ch.charCodeAt(ch.length - 1).toString(16) + \" \";\n\t\t}\n\n\t\t// Other potentially-special ASCII characters get backslash-escaped\n\t\treturn \"\\\\\" + ch;\n\t}\n\n\tjQuery.escapeSelector = function (sel) {\n\t\treturn (sel + \"\").replace(rcssescape, fcssescape);\n\t};\n\n\n\n\n\tvar preferredDoc = document,\n\t\tpushNative = push;\n\n\t(function () {\n\n\t\tvar i,\n\t\t\tExpr,\n\t\t\toutermostContext,\n\t\t\tsortInput,\n\t\t\thasDuplicate,\n\t\t\tpush = pushNative,\n\n\t\t\t// Local document vars\n\t\t\tdocument,\n\t\t\tdocumentElement,\n\t\t\tdocumentIsHTML,\n\t\t\trbuggyQSA,\n\t\t\tmatches,\n\n\t\t\t// Instance-specific data\n\t\t\texpando = jQuery.expando,\n\t\t\tdirruns = 0,\n\t\t\tdone = 0,\n\t\t\tclassCache = createCache(),\n\t\t\ttokenCache = createCache(),\n\t\t\tcompilerCache = createCache(),\n\t\t\tnonnativeSelectorCache = createCache(),\n\t\t\tsortOrder = function (a, b) {\n\t\t\t\tif (a === b) {\n\t\t\t\t\thasDuplicate = true;\n\t\t\t\t}\n\t\t\t\treturn 0;\n\t\t\t},\n\n\t\t\tbooleans = \"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|\" +\n\t\t\t\t\"loop|multiple|open|readonly|required|scoped\",\n\n\t\t\t// Regular expressions\n\n\t\t\t// https://www.w3.org/TR/css-syntax-3/#ident-token-diagram\n\t\t\tidentifier = \"(?:\\\\\\\\[\\\\da-fA-F]{1,6}\" + whitespace +\n\t\t\t\t\"?|\\\\\\\\[^\\\\r\\\\n\\\\f]|[\\\\w-]|[^\\0-\\\\x7f])+\",\n\n\t\t\t// Attribute selectors: https://www.w3.org/TR/selectors/#attribute-selectors\n\t\t\tattributes = \"\\\\[\" + whitespace + \"*(\" + identifier + \")(?:\" + whitespace +\n\n\t\t\t\t// Operator (capture 2)\n\t\t\t\t\"*([*^$|!~]?=)\" + whitespace +\n\n\t\t\t\t// \"Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]\"\n\t\t\t\t\"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\" + identifier + \"))|)\" +\n\t\t\t\twhitespace + \"*\\\\]\",\n\n\t\t\tpseudos = \":(\" + identifier + \")(?:\\\\((\" +\n\n\t\t\t\t// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:\n\t\t\t\t// 1. quoted (capture 3; capture 4 or capture 5)\n\t\t\t\t\"('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|\" +\n\n\t\t\t\t// 2. simple (capture 6)\n\t\t\t\t\"((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\" + attributes + \")*)|\" +\n\n\t\t\t\t// 3. anything else (capture 2)\n\t\t\t\t\".*\" +\n\t\t\t\t\")\\\\)|)\",\n\n\t\t\t// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter\n\t\t\trwhitespace = new RegExp(whitespace + \"+\", \"g\"),\n\n\t\t\trcomma = new RegExp(\"^\" + whitespace + \"*,\" + whitespace + \"*\"),\n\t\t\trleadingCombinator = new RegExp(\"^\" + whitespace + \"*([>+~]|\" + whitespace + \")\" +\n\t\t\t\twhitespace + \"*\"),\n\t\t\trdescend = new RegExp(whitespace + \"|>\"),\n\n\t\t\trpseudo = new RegExp(pseudos),\n\t\t\tridentifier = new RegExp(\"^\" + identifier + \"$\"),\n\n\t\t\tmatchExpr = {\n\t\t\t\tID: new RegExp(\"^#(\" + identifier + \")\"),\n\t\t\t\tCLASS: new RegExp(\"^\\\\.(\" + identifier + \")\"),\n\t\t\t\tTAG: new RegExp(\"^(\" + identifier + \"|[*])\"),\n\t\t\t\tATTR: new RegExp(\"^\" + attributes),\n\t\t\t\tPSEUDO: new RegExp(\"^\" + pseudos),\n\t\t\t\tCHILD: new RegExp(\n\t\t\t\t\t\"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\" +\n\t\t\t\t\twhitespace + \"*(even|odd|(([+-]|)(\\\\d*)n|)\" + whitespace + \"*(?:([+-]|)\" +\n\t\t\t\t\twhitespace + \"*(\\\\d+)|))\" + whitespace + \"*\\\\)|)\", \"i\"),\n\t\t\t\tbool: new RegExp(\"^(?:\" + booleans + \")$\", \"i\"),\n\n\t\t\t\t// For use in libraries implementing .is()\n\t\t\t\t// We use this for POS matching in `select`\n\t\t\t\tneedsContext: new RegExp(\"^\" + whitespace +\n\t\t\t\t\t\"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\" + whitespace +\n\t\t\t\t\t\"*((?:-\\\\d)?\\\\d*)\" + whitespace + \"*\\\\)|)(?=[^-]|$)\", \"i\")\n\t\t\t},\n\n\t\t\trinputs = /^(?:input|select|textarea|button)$/i,\n\t\t\trheader = /^h\\d$/i,\n\n\t\t\t// Easily-parseable/retrievable ID or TAG or CLASS selectors\n\t\t\trquickExpr = /^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,\n\n\t\t\trsibling = /[+~]/,\n\n\t\t\t// CSS escapes\n\t\t\t// https://www.w3.org/TR/CSS21/syndata.html#escaped-characters\n\t\t\trunescape = new RegExp(\"\\\\\\\\[\\\\da-fA-F]{1,6}\" + whitespace +\n\t\t\t\t\"?|\\\\\\\\([^\\\\r\\\\n\\\\f])\", \"g\"),\n\t\t\tfunescape = function (escape, nonHex) {\n\t\t\t\tvar high = \"0x\" + escape.slice(1) - 0x10000;\n\n\t\t\t\tif (nonHex) {\n\n\t\t\t\t\t// Strip the backslash prefix from a non-hex escape sequence\n\t\t\t\t\treturn nonHex;\n\t\t\t\t}\n\n\t\t\t\t// Replace a hexadecimal escape sequence with the encoded Unicode code point\n\t\t\t\t// Support: IE <=11+\n\t\t\t\t// For values outside the Basic Multilingual Plane (BMP), manually construct a\n\t\t\t\t// surrogate pair\n\t\t\t\treturn high < 0 ?\n\t\t\t\t\tString.fromCharCode(high + 0x10000) :\n\t\t\t\t\tString.fromCharCode(high >> 10 | 0xD800, high & 0x3FF | 0xDC00);\n\t\t\t},\n\n\t\t\t// Used for iframes; see `setDocument`.\n\t\t\t// Support: IE 9 - 11+, Edge 12 - 18+\n\t\t\t// Removing the function wrapper causes a \"Permission Denied\"\n\t\t\t// error in IE/Edge.\n\t\t\tunloadHandler = function () {\n\t\t\t\tsetDocument();\n\t\t\t},\n\n\t\t\tinDisabledFieldset = addCombinator(\n\t\t\t\tfunction (elem) {\n\t\t\t\t\treturn elem.disabled === true && nodeName(elem, \"fieldset\");\n\t\t\t\t},\n\t\t\t\t{ dir: \"parentNode\", next: \"legend\" }\n\t\t\t);\n\n\t\t// Support: IE <=9 only\n\t\t// Accessing document.activeElement can throw unexpectedly\n\t\t// https://bugs.jquery.com/ticket/13393\n\t\tfunction safeActiveElement() {\n\t\t\ttry {\n\t\t\t\treturn document.activeElement;\n\t\t\t} catch (err) { }\n\t\t}\n\n\t\t// Optimize for push.apply( _, NodeList )\n\t\ttry {\n\t\t\tpush.apply(\n\t\t\t\t(arr = slice.call(preferredDoc.childNodes)),\n\t\t\t\tpreferredDoc.childNodes\n\t\t\t);\n\n\t\t\t// Support: Android <=4.0\n\t\t\t// Detect silently failing push.apply\n\t\t\t// eslint-disable-next-line no-unused-expressions\n\t\t\tarr[preferredDoc.childNodes.length].nodeType;\n\t\t} catch (e) {\n\t\t\tpush = {\n\t\t\t\tapply: function (target, els) {\n\t\t\t\t\tpushNative.apply(target, slice.call(els));\n\t\t\t\t},\n\t\t\t\tcall: function (target) {\n\t\t\t\t\tpushNative.apply(target, slice.call(arguments, 1));\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\n\t\tfunction find(selector, context, results, seed) {\n\t\t\tvar m, i, elem, nid, match, groups, newSelector,\n\t\t\t\tnewContext = context && context.ownerDocument,\n\n\t\t\t\t// nodeType defaults to 9, since context defaults to document\n\t\t\t\tnodeType = context ? context.nodeType : 9;\n\n\t\t\tresults = results || [];\n\n\t\t\t// Return early from calls with invalid selector or context\n\t\t\tif (typeof selector !== \"string\" || !selector ||\n\t\t\t\tnodeType !== 1 && nodeType !== 9 && nodeType !== 11) {\n\n\t\t\t\treturn results;\n\t\t\t}\n\n\t\t\t// Try to shortcut find operations (as opposed to filters) in HTML documents\n\t\t\tif (!seed) {\n\t\t\t\tsetDocument(context);\n\t\t\t\tcontext = context || document;\n\n\t\t\t\tif (documentIsHTML) {\n\n\t\t\t\t\t// If the selector is sufficiently simple, try using a \"get*By*\" DOM method\n\t\t\t\t\t// (excepting DocumentFragment context, where the methods don't exist)\n\t\t\t\t\tif (nodeType !== 11 && (match = rquickExpr.exec(selector))) {\n\n\t\t\t\t\t\t// ID selector\n\t\t\t\t\t\tif ((m = match[1])) {\n\n\t\t\t\t\t\t\t// Document context\n\t\t\t\t\t\t\tif (nodeType === 9) {\n\t\t\t\t\t\t\t\tif ((elem = context.getElementById(m))) {\n\n\t\t\t\t\t\t\t\t\t// Support: IE 9 only\n\t\t\t\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\t\t\t\tif (elem.id === m) {\n\t\t\t\t\t\t\t\t\t\tpush.call(results, elem);\n\t\t\t\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t// Element context\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t// Support: IE 9 only\n\t\t\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\t\t\tif (newContext && (elem = newContext.getElementById(m)) &&\n\t\t\t\t\t\t\t\t\tfind.contains(context, elem) &&\n\t\t\t\t\t\t\t\t\telem.id === m) {\n\n\t\t\t\t\t\t\t\t\tpush.call(results, elem);\n\t\t\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Type selector\n\t\t\t\t\t\t} else if (match[2]) {\n\t\t\t\t\t\t\tpush.apply(results, context.getElementsByTagName(selector));\n\t\t\t\t\t\t\treturn results;\n\n\t\t\t\t\t\t\t// Class selector\n\t\t\t\t\t\t} else if ((m = match[3]) && context.getElementsByClassName) {\n\t\t\t\t\t\t\tpush.apply(results, context.getElementsByClassName(m));\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Take advantage of querySelectorAll\n\t\t\t\t\tif (!nonnativeSelectorCache[selector + \" \"] &&\n\t\t\t\t\t\t(!rbuggyQSA || !rbuggyQSA.test(selector))) {\n\n\t\t\t\t\t\tnewSelector = selector;\n\t\t\t\t\t\tnewContext = context;\n\n\t\t\t\t\t\t// qSA considers elements outside a scoping root when evaluating child or\n\t\t\t\t\t\t// descendant combinators, which is not what we want.\n\t\t\t\t\t\t// In such cases, we work around the behavior by prefixing every selector in the\n\t\t\t\t\t\t// list with an ID selector referencing the scope context.\n\t\t\t\t\t\t// The technique has to be used as well when a leading combinator is used\n\t\t\t\t\t\t// as such selectors are not recognized by querySelectorAll.\n\t\t\t\t\t\t// Thanks to Andrew Dupont for this technique.\n\t\t\t\t\t\tif (nodeType === 1 &&\n\t\t\t\t\t\t\t(rdescend.test(selector) || rleadingCombinator.test(selector))) {\n\n\t\t\t\t\t\t\t// Expand context for sibling selectors\n\t\t\t\t\t\t\tnewContext = rsibling.test(selector) && testContext(context.parentNode) ||\n\t\t\t\t\t\t\t\tcontext;\n\n\t\t\t\t\t\t\t// We can use :scope instead of the ID hack if the browser\n\t\t\t\t\t\t\t// supports it & if we're not changing the context.\n\t\t\t\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when\n\t\t\t\t\t\t\t// strict-comparing two documents; shallow comparisons work.\n\t\t\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\t\t\tif (newContext != context || !support.scope) {\n\n\t\t\t\t\t\t\t\t// Capture the context ID, setting it first if necessary\n\t\t\t\t\t\t\t\tif ((nid = context.getAttribute(\"id\"))) {\n\t\t\t\t\t\t\t\t\tnid = jQuery.escapeSelector(nid);\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tcontext.setAttribute(\"id\", (nid = expando));\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Prefix every selector in the list\n\t\t\t\t\t\t\tgroups = tokenize(selector);\n\t\t\t\t\t\t\ti = groups.length;\n\t\t\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\t\t\tgroups[i] = (nid ? \"#\" + nid : \":scope\") + \" \" +\n\t\t\t\t\t\t\t\t\ttoSelector(groups[i]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tnewSelector = groups.join(\",\");\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tpush.apply(results,\n\t\t\t\t\t\t\t\tnewContext.querySelectorAll(newSelector)\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t} catch (qsaError) {\n\t\t\t\t\t\t\tnonnativeSelectorCache(selector, true);\n\t\t\t\t\t\t} finally {\n\t\t\t\t\t\t\tif (nid === expando) {\n\t\t\t\t\t\t\t\tcontext.removeAttribute(\"id\");\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// All others\n\t\t\treturn select(selector.replace(rtrimCSS, \"$1\"), context, results, seed);\n\t\t}\n\n\t\t/**\n\t\t * Create key-value caches of limited size\n\t\t * @returns {function(string, object)} Returns the Object data after storing it on itself with\n\t\t *\tproperty name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)\n\t\t *\tdeleting the oldest entry\n\t\t */\n\t\tfunction createCache() {\n\t\t\tvar keys = [];\n\n\t\t\tfunction cache(key, value) {\n\n\t\t\t\t// Use (key + \" \") to avoid collision with native prototype properties\n\t\t\t\t// (see https://github.com/jquery/sizzle/issues/157)\n\t\t\t\tif (keys.push(key + \" \") > Expr.cacheLength) {\n\n\t\t\t\t\t// Only keep the most recent entries\n\t\t\t\t\tdelete cache[keys.shift()];\n\t\t\t\t}\n\t\t\t\treturn (cache[key + \" \"] = value);\n\t\t\t}\n\t\t\treturn cache;\n\t\t}\n\n\t\t/**\n\t\t * Mark a function for special use by jQuery selector module\n\t\t * @param {Function} fn The function to mark\n\t\t */\n\t\tfunction markFunction(fn) {\n\t\t\tfn[expando] = true;\n\t\t\treturn fn;\n\t\t}\n\n\t\t/**\n\t\t * Support testing using an element\n\t\t * @param {Function} fn Passed the created element and returns a boolean result\n\t\t */\n\t\tfunction assert(fn) {\n\t\t\tvar el = document.createElement(\"fieldset\");\n\n\t\t\ttry {\n\t\t\t\treturn !!fn(el);\n\t\t\t} catch (e) {\n\t\t\t\treturn false;\n\t\t\t} finally {\n\n\t\t\t\t// Remove from its parent by default\n\t\t\t\tif (el.parentNode) {\n\t\t\t\t\tel.parentNode.removeChild(el);\n\t\t\t\t}\n\n\t\t\t\t// release memory in IE\n\t\t\t\tel = null;\n\t\t\t}\n\t\t}\n\n\t\t/**\n\t\t * Returns a function to use in pseudos for input types\n\t\t * @param {String} type\n\t\t */\n\t\tfunction createInputPseudo(type) {\n\t\t\treturn function (elem) {\n\t\t\t\treturn nodeName(elem, \"input\") && elem.type === type;\n\t\t\t};\n\t\t}\n\n\t\t/**\n\t\t * Returns a function to use in pseudos for buttons\n\t\t * @param {String} type\n\t\t */\n\t\tfunction createButtonPseudo(type) {\n\t\t\treturn function (elem) {\n\t\t\t\treturn (nodeName(elem, \"input\") || nodeName(elem, \"button\")) &&\n\t\t\t\t\telem.type === type;\n\t\t\t};\n\t\t}\n\n\t\t/**\n\t\t * Returns a function to use in pseudos for :enabled/:disabled\n\t\t * @param {Boolean} disabled true for :disabled; false for :enabled\n\t\t */\n\t\tfunction createDisabledPseudo(disabled) {\n\n\t\t\t// Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable\n\t\t\treturn function (elem) {\n\n\t\t\t\t// Only certain elements can match :enabled or :disabled\n\t\t\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled\n\t\t\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled\n\t\t\t\tif (\"form\" in elem) {\n\n\t\t\t\t\t// Check for inherited disabledness on relevant non-disabled elements:\n\t\t\t\t\t// * listed form-associated elements in a disabled fieldset\n\t\t\t\t\t//   https://html.spec.whatwg.org/multipage/forms.html#category-listed\n\t\t\t\t\t//   https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled\n\t\t\t\t\t// * option elements in a disabled optgroup\n\t\t\t\t\t//   https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled\n\t\t\t\t\t// All such elements have a \"form\" property.\n\t\t\t\t\tif (elem.parentNode && elem.disabled === false) {\n\n\t\t\t\t\t\t// Option elements defer to a parent optgroup if present\n\t\t\t\t\t\tif (\"label\" in elem) {\n\t\t\t\t\t\t\tif (\"label\" in elem.parentNode) {\n\t\t\t\t\t\t\t\treturn elem.parentNode.disabled === disabled;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\treturn elem.disabled === disabled;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Support: IE 6 - 11+\n\t\t\t\t\t\t// Use the isDisabled shortcut property to check for disabled fieldset ancestors\n\t\t\t\t\t\treturn elem.isDisabled === disabled ||\n\n\t\t\t\t\t\t\t// Where there is no isDisabled, check manually\n\t\t\t\t\t\t\telem.isDisabled !== !disabled &&\n\t\t\t\t\t\t\tinDisabledFieldset(elem) === disabled;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn elem.disabled === disabled;\n\n\t\t\t\t\t// Try to winnow out elements that can't be disabled before trusting the disabled property.\n\t\t\t\t\t// Some victims get caught in our net (label, legend, menu, track), but it shouldn't\n\t\t\t\t\t// even exist on them, let alone have a boolean value.\n\t\t\t\t} else if (\"label\" in elem) {\n\t\t\t\t\treturn elem.disabled === disabled;\n\t\t\t\t}\n\n\t\t\t\t// Remaining elements are neither :enabled nor :disabled\n\t\t\t\treturn false;\n\t\t\t};\n\t\t}\n\n\t\t/**\n\t\t * Returns a function to use in pseudos for positionals\n\t\t * @param {Function} fn\n\t\t */\n\t\tfunction createPositionalPseudo(fn) {\n\t\t\treturn markFunction(function (argument) {\n\t\t\t\targument = +argument;\n\t\t\t\treturn markFunction(function (seed, matches) {\n\t\t\t\t\tvar j,\n\t\t\t\t\t\tmatchIndexes = fn([], seed.length, argument),\n\t\t\t\t\t\ti = matchIndexes.length;\n\n\t\t\t\t\t// Match elements found at the specified indexes\n\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\tif (seed[(j = matchIndexes[i])]) {\n\t\t\t\t\t\t\tseed[j] = !(matches[j] = seed[j]);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\n\t\t/**\n\t\t * Checks a node for validity as a jQuery selector context\n\t\t * @param {Element|Object=} context\n\t\t * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value\n\t\t */\n\t\tfunction testContext(context) {\n\t\t\treturn context && typeof context.getElementsByTagName !== \"undefined\" && context;\n\t\t}\n\n\t\t/**\n\t\t * Sets document-related variables once based on the current document\n\t\t * @param {Element|Object} [node] An element or document object to use to set the document\n\t\t * @returns {Object} Returns the current document\n\t\t */\n\t\tfunction setDocument(node) {\n\t\t\tvar subWindow,\n\t\t\t\tdoc = node ? node.ownerDocument || node : preferredDoc;\n\n\t\t\t// Return early if doc is invalid or already selected\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tif (doc == document || doc.nodeType !== 9 || !doc.documentElement) {\n\t\t\t\treturn document;\n\t\t\t}\n\n\t\t\t// Update global variables\n\t\t\tdocument = doc;\n\t\t\tdocumentElement = document.documentElement;\n\t\t\tdocumentIsHTML = !jQuery.isXMLDoc(document);\n\n\t\t\t// Support: iOS 7 only, IE 9 - 11+\n\t\t\t// Older browsers didn't support unprefixed `matches`.\n\t\t\tmatches = documentElement.matches ||\n\t\t\t\tdocumentElement.webkitMatchesSelector ||\n\t\t\t\tdocumentElement.msMatchesSelector;\n\n\t\t\t// Support: IE 9 - 11+, Edge 12 - 18+\n\t\t\t// Accessing iframe documents after unload throws \"permission denied\" errors (see trac-13936)\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tif (preferredDoc != document &&\n\t\t\t\t(subWindow = document.defaultView) && subWindow.top !== subWindow) {\n\n\t\t\t\t// Support: IE 9 - 11+, Edge 12 - 18+\n\t\t\t\tsubWindow.addEventListener(\"unload\", unloadHandler);\n\t\t\t}\n\n\t\t\t// Support: IE <10\n\t\t\t// Check if getElementById returns elements by name\n\t\t\t// The broken getElementById methods don't pick up programmatically-set names,\n\t\t\t// so use a roundabout getElementsByName test\n\t\t\tsupport.getById = assert(function (el) {\n\t\t\t\tdocumentElement.appendChild(el).id = jQuery.expando;\n\t\t\t\treturn !document.getElementsByName ||\n\t\t\t\t\t!document.getElementsByName(jQuery.expando).length;\n\t\t\t});\n\n\t\t\t// Support: IE 9 only\n\t\t\t// Check to see if it's possible to do matchesSelector\n\t\t\t// on a disconnected node.\n\t\t\tsupport.disconnectedMatch = assert(function (el) {\n\t\t\t\treturn matches.call(el, \"*\");\n\t\t\t});\n\n\t\t\t// Support: IE 9 - 11+, Edge 12 - 18+\n\t\t\t// IE/Edge don't support the :scope pseudo-class.\n\t\t\tsupport.scope = assert(function () {\n\t\t\t\treturn document.querySelectorAll(\":scope\");\n\t\t\t});\n\n\t\t\t// Support: Chrome 105 - 111 only, Safari 15.4 - 16.3 only\n\t\t\t// Make sure the `:has()` argument is parsed unforgivingly.\n\t\t\t// We include `*` in the test to detect buggy implementations that are\n\t\t\t// _selectively_ forgiving (specifically when the list includes at least\n\t\t\t// one valid selector).\n\t\t\t// Note that we treat complete lack of support for `:has()` as if it were\n\t\t\t// spec-compliant support, which is fine because use of `:has()` in such\n\t\t\t// environments will fail in the qSA path and fall back to jQuery traversal\n\t\t\t// anyway.\n\t\t\tsupport.cssHas = assert(function () {\n\t\t\t\ttry {\n\t\t\t\t\tdocument.querySelector(\":has(*,:jqfake)\");\n\t\t\t\t\treturn false;\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t// ID filter and find\n\t\t\tif (support.getById) {\n\t\t\t\tExpr.filter.ID = function (id) {\n\t\t\t\t\tvar attrId = id.replace(runescape, funescape);\n\t\t\t\t\treturn function (elem) {\n\t\t\t\t\t\treturn elem.getAttribute(\"id\") === attrId;\n\t\t\t\t\t};\n\t\t\t\t};\n\t\t\t\tExpr.find.ID = function (id, context) {\n\t\t\t\t\tif (typeof context.getElementById !== \"undefined\" && documentIsHTML) {\n\t\t\t\t\t\tvar elem = context.getElementById(id);\n\t\t\t\t\t\treturn elem ? [elem] : [];\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t} else {\n\t\t\t\tExpr.filter.ID = function (id) {\n\t\t\t\t\tvar attrId = id.replace(runescape, funescape);\n\t\t\t\t\treturn function (elem) {\n\t\t\t\t\t\tvar node = typeof elem.getAttributeNode !== \"undefined\" &&\n\t\t\t\t\t\t\telem.getAttributeNode(\"id\");\n\t\t\t\t\t\treturn node && node.value === attrId;\n\t\t\t\t\t};\n\t\t\t\t};\n\n\t\t\t\t// Support: IE 6 - 7 only\n\t\t\t\t// getElementById is not reliable as a find shortcut\n\t\t\t\tExpr.find.ID = function (id, context) {\n\t\t\t\t\tif (typeof context.getElementById !== \"undefined\" && documentIsHTML) {\n\t\t\t\t\t\tvar node, i, elems,\n\t\t\t\t\t\t\telem = context.getElementById(id);\n\n\t\t\t\t\t\tif (elem) {\n\n\t\t\t\t\t\t\t// Verify the id attribute\n\t\t\t\t\t\t\tnode = elem.getAttributeNode(\"id\");\n\t\t\t\t\t\t\tif (node && node.value === id) {\n\t\t\t\t\t\t\t\treturn [elem];\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Fall back on getElementsByName\n\t\t\t\t\t\t\telems = context.getElementsByName(id);\n\t\t\t\t\t\t\ti = 0;\n\t\t\t\t\t\t\twhile ((elem = elems[i++])) {\n\t\t\t\t\t\t\t\tnode = elem.getAttributeNode(\"id\");\n\t\t\t\t\t\t\t\tif (node && node.value === id) {\n\t\t\t\t\t\t\t\t\treturn [elem];\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn [];\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\n\t\t\t// Tag\n\t\t\tExpr.find.TAG = function (tag, context) {\n\t\t\t\tif (typeof context.getElementsByTagName !== \"undefined\") {\n\t\t\t\t\treturn context.getElementsByTagName(tag);\n\n\t\t\t\t\t// DocumentFragment nodes don't have gEBTN\n\t\t\t\t} else {\n\t\t\t\t\treturn context.querySelectorAll(tag);\n\t\t\t\t}\n\t\t\t};\n\n\t\t\t// Class\n\t\t\tExpr.find.CLASS = function (className, context) {\n\t\t\t\tif (typeof context.getElementsByClassName !== \"undefined\" && documentIsHTML) {\n\t\t\t\t\treturn context.getElementsByClassName(className);\n\t\t\t\t}\n\t\t\t};\n\n\t\t\t/* QSA/matchesSelector\n\t\t\t---------------------------------------------------------------------- */\n\n\t\t\t// QSA and matchesSelector support\n\n\t\t\trbuggyQSA = [];\n\n\t\t\t// Build QSA regex\n\t\t\t// Regex strategy adopted from Diego Perini\n\t\t\tassert(function (el) {\n\n\t\t\t\tvar input;\n\n\t\t\t\tdocumentElement.appendChild(el).innerHTML =\n\t\t\t\t\t\"<a id='\" + expando + \"' href='' disabled='disabled'></a>\" +\n\t\t\t\t\t\"<select id='\" + expando + \"-\\r\\\\' disabled='disabled'>\" +\n\t\t\t\t\t\"<option selected=''></option></select>\";\n\n\t\t\t\t// Support: iOS <=7 - 8 only\n\t\t\t\t// Boolean attributes and \"value\" are not treated correctly in some XML documents\n\t\t\t\tif (!el.querySelectorAll(\"[selected]\").length) {\n\t\t\t\t\trbuggyQSA.push(\"\\\\[\" + whitespace + \"*(?:value|\" + booleans + \")\");\n\t\t\t\t}\n\n\t\t\t\t// Support: iOS <=7 - 8 only\n\t\t\t\tif (!el.querySelectorAll(\"[id~=\" + expando + \"-]\").length) {\n\t\t\t\t\trbuggyQSA.push(\"~=\");\n\t\t\t\t}\n\n\t\t\t\t// Support: iOS 8 only\n\t\t\t\t// https://bugs.webkit.org/show_bug.cgi?id=136851\n\t\t\t\t// In-page `selector#id sibling-combinator selector` fails\n\t\t\t\tif (!el.querySelectorAll(\"a#\" + expando + \"+*\").length) {\n\t\t\t\t\trbuggyQSA.push(\".#.+[+~]\");\n\t\t\t\t}\n\n\t\t\t\t// Support: Chrome <=105+, Firefox <=104+, Safari <=15.4+\n\t\t\t\t// In some of the document kinds, these selectors wouldn't work natively.\n\t\t\t\t// This is probably OK but for backwards compatibility we want to maintain\n\t\t\t\t// handling them through jQuery traversal in jQuery 3.x.\n\t\t\t\tif (!el.querySelectorAll(\":checked\").length) {\n\t\t\t\t\trbuggyQSA.push(\":checked\");\n\t\t\t\t}\n\n\t\t\t\t// Support: Windows 8 Native Apps\n\t\t\t\t// The type and name attributes are restricted during .innerHTML assignment\n\t\t\t\tinput = document.createElement(\"input\");\n\t\t\t\tinput.setAttribute(\"type\", \"hidden\");\n\t\t\t\tel.appendChild(input).setAttribute(\"name\", \"D\");\n\n\t\t\t\t// Support: IE 9 - 11+\n\t\t\t\t// IE's :disabled selector does not pick up the children of disabled fieldsets\n\t\t\t\t// Support: Chrome <=105+, Firefox <=104+, Safari <=15.4+\n\t\t\t\t// In some of the document kinds, these selectors wouldn't work natively.\n\t\t\t\t// This is probably OK but for backwards compatibility we want to maintain\n\t\t\t\t// handling them through jQuery traversal in jQuery 3.x.\n\t\t\t\tdocumentElement.appendChild(el).disabled = true;\n\t\t\t\tif (el.querySelectorAll(\":disabled\").length !== 2) {\n\t\t\t\t\trbuggyQSA.push(\":enabled\", \":disabled\");\n\t\t\t\t}\n\n\t\t\t\t// Support: IE 11+, Edge 15 - 18+\n\t\t\t\t// IE 11/Edge don't find elements on a `[name='']` query in some cases.\n\t\t\t\t// Adding a temporary attribute to the document before the selection works\n\t\t\t\t// around the issue.\n\t\t\t\t// Interestingly, IE 10 & older don't seem to have the issue.\n\t\t\t\tinput = document.createElement(\"input\");\n\t\t\t\tinput.setAttribute(\"name\", \"\");\n\t\t\t\tel.appendChild(input);\n\t\t\t\tif (!el.querySelectorAll(\"[name='']\").length) {\n\t\t\t\t\trbuggyQSA.push(\"\\\\[\" + whitespace + \"*name\" + whitespace + \"*=\" +\n\t\t\t\t\t\twhitespace + \"*(?:''|\\\"\\\")\");\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tif (!support.cssHas) {\n\n\t\t\t\t// Support: Chrome 105 - 110+, Safari 15.4 - 16.3+\n\t\t\t\t// Our regular `try-catch` mechanism fails to detect natively-unsupported\n\t\t\t\t// pseudo-classes inside `:has()` (such as `:has(:contains(\"Foo\"))`)\n\t\t\t\t// in browsers that parse the `:has()` argument as a forgiving selector list.\n\t\t\t\t// https://drafts.csswg.org/selectors/#relational now requires the argument\n\t\t\t\t// to be parsed unforgivingly, but browsers have not yet fully adjusted.\n\t\t\t\trbuggyQSA.push(\":has\");\n\t\t\t}\n\n\t\t\trbuggyQSA = rbuggyQSA.length && new RegExp(rbuggyQSA.join(\"|\"));\n\n\t\t\t/* Sorting\n\t\t\t---------------------------------------------------------------------- */\n\n\t\t\t// Document order sorting\n\t\t\tsortOrder = function (a, b) {\n\n\t\t\t\t// Flag for duplicate removal\n\t\t\t\tif (a === b) {\n\t\t\t\t\thasDuplicate = true;\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\n\t\t\t\t// Sort on method existence if only one input has compareDocumentPosition\n\t\t\t\tvar compare = !a.compareDocumentPosition - !b.compareDocumentPosition;\n\t\t\t\tif (compare) {\n\t\t\t\t\treturn compare;\n\t\t\t\t}\n\n\t\t\t\t// Calculate position if both inputs belong to the same document\n\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\tcompare = (a.ownerDocument || a) == (b.ownerDocument || b) ?\n\t\t\t\t\ta.compareDocumentPosition(b) :\n\n\t\t\t\t\t// Otherwise we know they are disconnected\n\t\t\t\t\t1;\n\n\t\t\t\t// Disconnected nodes\n\t\t\t\tif (compare & 1 ||\n\t\t\t\t\t(!support.sortDetached && b.compareDocumentPosition(a) === compare)) {\n\n\t\t\t\t\t// Choose the first element that is related to our preferred document\n\t\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\tif (a === document || a.ownerDocument == preferredDoc &&\n\t\t\t\t\t\tfind.contains(preferredDoc, a)) {\n\t\t\t\t\t\treturn -1;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\tif (b === document || b.ownerDocument == preferredDoc &&\n\t\t\t\t\t\tfind.contains(preferredDoc, b)) {\n\t\t\t\t\t\treturn 1;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Maintain original order\n\t\t\t\t\treturn sortInput ?\n\t\t\t\t\t\t(indexOf.call(sortInput, a) - indexOf.call(sortInput, b)) :\n\t\t\t\t\t\t0;\n\t\t\t\t}\n\n\t\t\t\treturn compare & 4 ? -1 : 1;\n\t\t\t};\n\n\t\t\treturn document;\n\t\t}\n\n\t\tfind.matches = function (expr, elements) {\n\t\t\treturn find(expr, null, null, elements);\n\t\t};\n\n\t\tfind.matchesSelector = function (elem, expr) {\n\t\t\tsetDocument(elem);\n\n\t\t\tif (documentIsHTML &&\n\t\t\t\t!nonnativeSelectorCache[expr + \" \"] &&\n\t\t\t\t(!rbuggyQSA || !rbuggyQSA.test(expr))) {\n\n\t\t\t\ttry {\n\t\t\t\t\tvar ret = matches.call(elem, expr);\n\n\t\t\t\t\t// IE 9's matchesSelector returns false on disconnected nodes\n\t\t\t\t\tif (ret || support.disconnectedMatch ||\n\n\t\t\t\t\t\t// As well, disconnected nodes are said to be in a document\n\t\t\t\t\t\t// fragment in IE 9\n\t\t\t\t\t\telem.document && elem.document.nodeType !== 11) {\n\t\t\t\t\t\treturn ret;\n\t\t\t\t\t}\n\t\t\t\t} catch (e) {\n\t\t\t\t\tnonnativeSelectorCache(expr, true);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn find(expr, document, null, [elem]).length > 0;\n\t\t};\n\n\t\tfind.contains = function (context, elem) {\n\n\t\t\t// Set document vars if needed\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tif ((context.ownerDocument || context) != document) {\n\t\t\t\tsetDocument(context);\n\t\t\t}\n\t\t\treturn jQuery.contains(context, elem);\n\t\t};\n\n\n\t\tfind.attr = function (elem, name) {\n\n\t\t\t// Set document vars if needed\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tif ((elem.ownerDocument || elem) != document) {\n\t\t\t\tsetDocument(elem);\n\t\t\t}\n\n\t\t\tvar fn = Expr.attrHandle[name.toLowerCase()],\n\n\t\t\t\t// Don't get fooled by Object.prototype properties (see trac-13807)\n\t\t\t\tval = fn && hasOwn.call(Expr.attrHandle, name.toLowerCase()) ?\n\t\t\t\t\tfn(elem, name, !documentIsHTML) :\n\t\t\t\t\tundefined;\n\n\t\t\tif (val !== undefined) {\n\t\t\t\treturn val;\n\t\t\t}\n\n\t\t\treturn elem.getAttribute(name);\n\t\t};\n\n\t\tfind.error = function (msg) {\n\t\t\tthrow new Error(\"Syntax error, unrecognized expression: \" + msg);\n\t\t};\n\n\t\t/**\n\t\t * Document sorting and removing duplicates\n\t\t * @param {ArrayLike} results\n\t\t */\n\t\tjQuery.uniqueSort = function (results) {\n\t\t\tvar elem,\n\t\t\t\tduplicates = [],\n\t\t\t\tj = 0,\n\t\t\t\ti = 0;\n\n\t\t\t// Unless we *know* we can detect duplicates, assume their presence\n\t\t\t//\n\t\t\t// Support: Android <=4.0+\n\t\t\t// Testing for detecting duplicates is unpredictable so instead assume we can't\n\t\t\t// depend on duplicate detection in all browsers without a stable sort.\n\t\t\thasDuplicate = !support.sortStable;\n\t\t\tsortInput = !support.sortStable && slice.call(results, 0);\n\t\t\tsort.call(results, sortOrder);\n\n\t\t\tif (hasDuplicate) {\n\t\t\t\twhile ((elem = results[i++])) {\n\t\t\t\t\tif (elem === results[i]) {\n\t\t\t\t\t\tj = duplicates.push(i);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\twhile (j--) {\n\t\t\t\t\tsplice.call(results, duplicates[j], 1);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Clear input after sorting to release objects\n\t\t\t// See https://github.com/jquery/sizzle/pull/225\n\t\t\tsortInput = null;\n\n\t\t\treturn results;\n\t\t};\n\n\t\tjQuery.fn.uniqueSort = function () {\n\t\t\treturn this.pushStack(jQuery.uniqueSort(slice.apply(this)));\n\t\t};\n\n\t\tExpr = jQuery.expr = {\n\n\t\t\t// Can be adjusted by the user\n\t\t\tcacheLength: 50,\n\n\t\t\tcreatePseudo: markFunction,\n\n\t\t\tmatch: matchExpr,\n\n\t\t\tattrHandle: {},\n\n\t\t\tfind: {},\n\n\t\t\trelative: {\n\t\t\t\t\">\": { dir: \"parentNode\", first: true },\n\t\t\t\t\" \": { dir: \"parentNode\" },\n\t\t\t\t\"+\": { dir: \"previousSibling\", first: true },\n\t\t\t\t\"~\": { dir: \"previousSibling\" }\n\t\t\t},\n\n\t\t\tpreFilter: {\n\t\t\t\tATTR: function (match) {\n\t\t\t\t\tmatch[1] = match[1].replace(runescape, funescape);\n\n\t\t\t\t\t// Move the given value to match[3] whether quoted or unquoted\n\t\t\t\t\tmatch[3] = (match[3] || match[4] || match[5] || \"\")\n\t\t\t\t\t\t.replace(runescape, funescape);\n\n\t\t\t\t\tif (match[2] === \"~=\") {\n\t\t\t\t\t\tmatch[3] = \" \" + match[3] + \" \";\n\t\t\t\t\t}\n\n\t\t\t\t\treturn match.slice(0, 4);\n\t\t\t\t},\n\n\t\t\t\tCHILD: function (match) {\n\n\t\t\t\t\t/* matches from matchExpr[\"CHILD\"]\n\t\t\t\t\t\t1 type (only|nth|...)\n\t\t\t\t\t\t2 what (child|of-type)\n\t\t\t\t\t\t3 argument (even|odd|\\d*|\\d*n([+-]\\d+)?|...)\n\t\t\t\t\t\t4 xn-component of xn+y argument ([+-]?\\d*n|)\n\t\t\t\t\t\t5 sign of xn-component\n\t\t\t\t\t\t6 x of xn-component\n\t\t\t\t\t\t7 sign of y-component\n\t\t\t\t\t\t8 y of y-component\n\t\t\t\t\t*/\n\t\t\t\t\tmatch[1] = match[1].toLowerCase();\n\n\t\t\t\t\tif (match[1].slice(0, 3) === \"nth\") {\n\n\t\t\t\t\t\t// nth-* requires argument\n\t\t\t\t\t\tif (!match[3]) {\n\t\t\t\t\t\t\tfind.error(match[0]);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// numeric x and y parameters for Expr.filter.CHILD\n\t\t\t\t\t\t// remember that false/true cast respectively to 0/1\n\t\t\t\t\t\tmatch[4] = +(match[4] ?\n\t\t\t\t\t\t\tmatch[5] + (match[6] || 1) :\n\t\t\t\t\t\t\t2 * (match[3] === \"even\" || match[3] === \"odd\")\n\t\t\t\t\t\t);\n\t\t\t\t\t\tmatch[5] = +((match[7] + match[8]) || match[3] === \"odd\");\n\n\t\t\t\t\t\t// other types prohibit arguments\n\t\t\t\t\t} else if (match[3]) {\n\t\t\t\t\t\tfind.error(match[0]);\n\t\t\t\t\t}\n\n\t\t\t\t\treturn match;\n\t\t\t\t},\n\n\t\t\t\tPSEUDO: function (match) {\n\t\t\t\t\tvar excess,\n\t\t\t\t\t\tunquoted = !match[6] && match[2];\n\n\t\t\t\t\tif (matchExpr.CHILD.test(match[0])) {\n\t\t\t\t\t\treturn null;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Accept quoted arguments as-is\n\t\t\t\t\tif (match[3]) {\n\t\t\t\t\t\tmatch[2] = match[4] || match[5] || \"\";\n\n\t\t\t\t\t\t// Strip excess characters from unquoted arguments\n\t\t\t\t\t} else if (unquoted && rpseudo.test(unquoted) &&\n\n\t\t\t\t\t\t// Get excess from tokenize (recursively)\n\t\t\t\t\t\t(excess = tokenize(unquoted, true)) &&\n\n\t\t\t\t\t\t// advance to the next closing parenthesis\n\t\t\t\t\t\t(excess = unquoted.indexOf(\")\", unquoted.length - excess) - unquoted.length)) {\n\n\t\t\t\t\t\t// excess is a negative index\n\t\t\t\t\t\tmatch[0] = match[0].slice(0, excess);\n\t\t\t\t\t\tmatch[2] = unquoted.slice(0, excess);\n\t\t\t\t\t}\n\n\t\t\t\t\t// Return only captures needed by the pseudo filter method (type and argument)\n\t\t\t\t\treturn match.slice(0, 3);\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tfilter: {\n\n\t\t\t\tTAG: function (nodeNameSelector) {\n\t\t\t\t\tvar expectedNodeName = nodeNameSelector.replace(runescape, funescape).toLowerCase();\n\t\t\t\t\treturn nodeNameSelector === \"*\" ?\n\t\t\t\t\t\tfunction () {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t} :\n\t\t\t\t\t\tfunction (elem) {\n\t\t\t\t\t\t\treturn nodeName(elem, expectedNodeName);\n\t\t\t\t\t\t};\n\t\t\t\t},\n\n\t\t\t\tCLASS: function (className) {\n\t\t\t\t\tvar pattern = classCache[className + \" \"];\n\n\t\t\t\t\treturn pattern ||\n\t\t\t\t\t\t(pattern = new RegExp(\"(^|\" + whitespace + \")\" + className +\n\t\t\t\t\t\t\t\"(\" + whitespace + \"|$)\")) &&\n\t\t\t\t\t\tclassCache(className, function (elem) {\n\t\t\t\t\t\t\treturn pattern.test(\n\t\t\t\t\t\t\t\ttypeof elem.className === \"string\" && elem.className ||\n\t\t\t\t\t\t\t\ttypeof elem.getAttribute !== \"undefined\" &&\n\t\t\t\t\t\t\t\telem.getAttribute(\"class\") ||\n\t\t\t\t\t\t\t\t\"\"\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t});\n\t\t\t\t},\n\n\t\t\t\tATTR: function (name, operator, check) {\n\t\t\t\t\treturn function (elem) {\n\t\t\t\t\t\tvar result = find.attr(elem, name);\n\n\t\t\t\t\t\tif (result == null) {\n\t\t\t\t\t\t\treturn operator === \"!=\";\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!operator) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tresult += \"\";\n\n\t\t\t\t\t\tif (operator === \"=\") {\n\t\t\t\t\t\t\treturn result === check;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (operator === \"!=\") {\n\t\t\t\t\t\t\treturn result !== check;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (operator === \"^=\") {\n\t\t\t\t\t\t\treturn check && result.indexOf(check) === 0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (operator === \"*=\") {\n\t\t\t\t\t\t\treturn check && result.indexOf(check) > -1;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (operator === \"$=\") {\n\t\t\t\t\t\t\treturn check && result.slice(-check.length) === check;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (operator === \"~=\") {\n\t\t\t\t\t\t\treturn (\" \" + result.replace(rwhitespace, \" \") + \" \")\n\t\t\t\t\t\t\t\t.indexOf(check) > -1;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (operator === \"|=\") {\n\t\t\t\t\t\t\treturn result === check || result.slice(0, check.length + 1) === check + \"-\";\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t};\n\t\t\t\t},\n\n\t\t\t\tCHILD: function (type, what, _argument, first, last) {\n\t\t\t\t\tvar simple = type.slice(0, 3) !== \"nth\",\n\t\t\t\t\t\tforward = type.slice(-4) !== \"last\",\n\t\t\t\t\t\tofType = what === \"of-type\";\n\n\t\t\t\t\treturn first === 1 && last === 0 ?\n\n\t\t\t\t\t\t// Shortcut for :nth-*(n)\n\t\t\t\t\t\tfunction (elem) {\n\t\t\t\t\t\t\treturn !!elem.parentNode;\n\t\t\t\t\t\t} :\n\n\t\t\t\t\t\tfunction (elem, _context, xml) {\n\t\t\t\t\t\t\tvar cache, outerCache, node, nodeIndex, start,\n\t\t\t\t\t\t\t\tdir = simple !== forward ? \"nextSibling\" : \"previousSibling\",\n\t\t\t\t\t\t\t\tparent = elem.parentNode,\n\t\t\t\t\t\t\t\tname = ofType && elem.nodeName.toLowerCase(),\n\t\t\t\t\t\t\t\tuseCache = !xml && !ofType,\n\t\t\t\t\t\t\t\tdiff = false;\n\n\t\t\t\t\t\t\tif (parent) {\n\n\t\t\t\t\t\t\t\t// :(first|last|only)-(child|of-type)\n\t\t\t\t\t\t\t\tif (simple) {\n\t\t\t\t\t\t\t\t\twhile (dir) {\n\t\t\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\t\t\twhile ((node = node[dir])) {\n\t\t\t\t\t\t\t\t\t\t\tif (ofType ?\n\t\t\t\t\t\t\t\t\t\t\t\tnodeName(node, name) :\n\t\t\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1) {\n\n\t\t\t\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t// Reverse direction for :only-* (if we haven't yet done so)\n\t\t\t\t\t\t\t\t\t\tstart = dir = type === \"only\" && !start && \"nextSibling\";\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tstart = [forward ? parent.firstChild : parent.lastChild];\n\n\t\t\t\t\t\t\t\t// non-xml :nth-child(...) stores cache data on `parent`\n\t\t\t\t\t\t\t\tif (forward && useCache) {\n\n\t\t\t\t\t\t\t\t\t// Seek `elem` from a previously-cached index\n\t\t\t\t\t\t\t\t\touterCache = parent[expando] || (parent[expando] = {});\n\t\t\t\t\t\t\t\t\tcache = outerCache[type] || [];\n\t\t\t\t\t\t\t\t\tnodeIndex = cache[0] === dirruns && cache[1];\n\t\t\t\t\t\t\t\t\tdiff = nodeIndex && cache[2];\n\t\t\t\t\t\t\t\t\tnode = nodeIndex && parent.childNodes[nodeIndex];\n\n\t\t\t\t\t\t\t\t\twhile ((node = ++nodeIndex && node && node[dir] ||\n\n\t\t\t\t\t\t\t\t\t\t// Fallback to seeking `elem` from the start\n\t\t\t\t\t\t\t\t\t\t(diff = nodeIndex = 0) || start.pop())) {\n\n\t\t\t\t\t\t\t\t\t\t// When found, cache indexes on `parent` and break\n\t\t\t\t\t\t\t\t\t\tif (node.nodeType === 1 && ++diff && node === elem) {\n\t\t\t\t\t\t\t\t\t\t\touterCache[type] = [dirruns, nodeIndex, diff];\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t// Use previously-cached element index if available\n\t\t\t\t\t\t\t\t\tif (useCache) {\n\t\t\t\t\t\t\t\t\t\touterCache = elem[expando] || (elem[expando] = {});\n\t\t\t\t\t\t\t\t\t\tcache = outerCache[type] || [];\n\t\t\t\t\t\t\t\t\t\tnodeIndex = cache[0] === dirruns && cache[1];\n\t\t\t\t\t\t\t\t\t\tdiff = nodeIndex;\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// xml :nth-child(...)\n\t\t\t\t\t\t\t\t\t// or :nth-last-child(...) or :nth(-last)?-of-type(...)\n\t\t\t\t\t\t\t\t\tif (diff === false) {\n\n\t\t\t\t\t\t\t\t\t\t// Use the same loop as above to seek `elem` from the start\n\t\t\t\t\t\t\t\t\t\twhile ((node = ++nodeIndex && node && node[dir] ||\n\t\t\t\t\t\t\t\t\t\t\t(diff = nodeIndex = 0) || start.pop())) {\n\n\t\t\t\t\t\t\t\t\t\t\tif ((ofType ?\n\t\t\t\t\t\t\t\t\t\t\t\tnodeName(node, name) :\n\t\t\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1) &&\n\t\t\t\t\t\t\t\t\t\t\t\t++diff) {\n\n\t\t\t\t\t\t\t\t\t\t\t\t// Cache the index of each encountered element\n\t\t\t\t\t\t\t\t\t\t\t\tif (useCache) {\n\t\t\t\t\t\t\t\t\t\t\t\t\touterCache = node[expando] ||\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t(node[expando] = {});\n\t\t\t\t\t\t\t\t\t\t\t\t\touterCache[type] = [dirruns, diff];\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\tif (node === elem) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t// Incorporate the offset, then check against cycle size\n\t\t\t\t\t\t\t\tdiff -= last;\n\t\t\t\t\t\t\t\treturn diff === first || (diff % first === 0 && diff / first >= 0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\t\t\t\t},\n\n\t\t\t\tPSEUDO: function (pseudo, argument) {\n\n\t\t\t\t\t// pseudo-class names are case-insensitive\n\t\t\t\t\t// https://www.w3.org/TR/selectors/#pseudo-classes\n\t\t\t\t\t// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters\n\t\t\t\t\t// Remember that setFilters inherits from pseudos\n\t\t\t\t\tvar args,\n\t\t\t\t\t\tfn = Expr.pseudos[pseudo] || Expr.setFilters[pseudo.toLowerCase()] ||\n\t\t\t\t\t\t\tfind.error(\"unsupported pseudo: \" + pseudo);\n\n\t\t\t\t\t// The user may use createPseudo to indicate that\n\t\t\t\t\t// arguments are needed to create the filter function\n\t\t\t\t\t// just as jQuery does\n\t\t\t\t\tif (fn[expando]) {\n\t\t\t\t\t\treturn fn(argument);\n\t\t\t\t\t}\n\n\t\t\t\t\t// But maintain support for old signatures\n\t\t\t\t\tif (fn.length > 1) {\n\t\t\t\t\t\targs = [pseudo, pseudo, \"\", argument];\n\t\t\t\t\t\treturn Expr.setFilters.hasOwnProperty(pseudo.toLowerCase()) ?\n\t\t\t\t\t\t\tmarkFunction(function (seed, matches) {\n\t\t\t\t\t\t\t\tvar idx,\n\t\t\t\t\t\t\t\t\tmatched = fn(seed, argument),\n\t\t\t\t\t\t\t\t\ti = matched.length;\n\t\t\t\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\t\t\t\tidx = indexOf.call(seed, matched[i]);\n\t\t\t\t\t\t\t\t\tseed[idx] = !(matches[idx] = matched[i]);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}) :\n\t\t\t\t\t\t\tfunction (elem) {\n\t\t\t\t\t\t\t\treturn fn(elem, 0, args);\n\t\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\treturn fn;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tpseudos: {\n\n\t\t\t\t// Potentially complex pseudos\n\t\t\t\tnot: markFunction(function (selector) {\n\n\t\t\t\t\t// Trim the selector passed to compile\n\t\t\t\t\t// to avoid treating leading and trailing\n\t\t\t\t\t// spaces as combinators\n\t\t\t\t\tvar input = [],\n\t\t\t\t\t\tresults = [],\n\t\t\t\t\t\tmatcher = compile(selector.replace(rtrimCSS, \"$1\"));\n\n\t\t\t\t\treturn matcher[expando] ?\n\t\t\t\t\t\tmarkFunction(function (seed, matches, _context, xml) {\n\t\t\t\t\t\t\tvar elem,\n\t\t\t\t\t\t\t\tunmatched = matcher(seed, null, xml, []),\n\t\t\t\t\t\t\t\ti = seed.length;\n\n\t\t\t\t\t\t\t// Match elements unmatched by `matcher`\n\t\t\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\t\t\tif ((elem = unmatched[i])) {\n\t\t\t\t\t\t\t\t\tseed[i] = !(matches[i] = elem);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}) :\n\t\t\t\t\t\tfunction (elem, _context, xml) {\n\t\t\t\t\t\t\tinput[0] = elem;\n\t\t\t\t\t\t\tmatcher(input, null, xml, results);\n\n\t\t\t\t\t\t\t// Don't keep the element\n\t\t\t\t\t\t\t// (see https://github.com/jquery/sizzle/issues/299)\n\t\t\t\t\t\t\tinput[0] = null;\n\t\t\t\t\t\t\treturn !results.pop();\n\t\t\t\t\t\t};\n\t\t\t\t}),\n\n\t\t\t\thas: markFunction(function (selector) {\n\t\t\t\t\treturn function (elem) {\n\t\t\t\t\t\treturn find(selector, elem).length > 0;\n\t\t\t\t\t};\n\t\t\t\t}),\n\n\t\t\t\tcontains: markFunction(function (text) {\n\t\t\t\t\ttext = text.replace(runescape, funescape);\n\t\t\t\t\treturn function (elem) {\n\t\t\t\t\t\treturn (elem.textContent || jQuery.text(elem)).indexOf(text) > -1;\n\t\t\t\t\t};\n\t\t\t\t}),\n\n\t\t\t\t// \"Whether an element is represented by a :lang() selector\n\t\t\t\t// is based solely on the element's language value\n\t\t\t\t// being equal to the identifier C,\n\t\t\t\t// or beginning with the identifier C immediately followed by \"-\".\n\t\t\t\t// The matching of C against the element's language value is performed case-insensitively.\n\t\t\t\t// The identifier C does not have to be a valid language name.\"\n\t\t\t\t// https://www.w3.org/TR/selectors/#lang-pseudo\n\t\t\t\tlang: markFunction(function (lang) {\n\n\t\t\t\t\t// lang value must be a valid identifier\n\t\t\t\t\tif (!ridentifier.test(lang || \"\")) {\n\t\t\t\t\t\tfind.error(\"unsupported lang: \" + lang);\n\t\t\t\t\t}\n\t\t\t\t\tlang = lang.replace(runescape, funescape).toLowerCase();\n\t\t\t\t\treturn function (elem) {\n\t\t\t\t\t\tvar elemLang;\n\t\t\t\t\t\tdo {\n\t\t\t\t\t\t\tif ((elemLang = documentIsHTML ?\n\t\t\t\t\t\t\t\telem.lang :\n\t\t\t\t\t\t\t\telem.getAttribute(\"xml:lang\") || elem.getAttribute(\"lang\"))) {\n\n\t\t\t\t\t\t\t\telemLang = elemLang.toLowerCase();\n\t\t\t\t\t\t\t\treturn elemLang === lang || elemLang.indexOf(lang + \"-\") === 0;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} while ((elem = elem.parentNode) && elem.nodeType === 1);\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t};\n\t\t\t\t}),\n\n\t\t\t\t// Miscellaneous\n\t\t\t\ttarget: function (elem) {\n\t\t\t\t\tvar hash = window.location && window.location.hash;\n\t\t\t\t\treturn hash && hash.slice(1) === elem.id;\n\t\t\t\t},\n\n\t\t\t\troot: function (elem) {\n\t\t\t\t\treturn elem === documentElement;\n\t\t\t\t},\n\n\t\t\t\tfocus: function (elem) {\n\t\t\t\t\treturn elem === safeActiveElement() &&\n\t\t\t\t\t\tdocument.hasFocus() &&\n\t\t\t\t\t\t!!(elem.type || elem.href || ~elem.tabIndex);\n\t\t\t\t},\n\n\t\t\t\t// Boolean properties\n\t\t\t\tenabled: createDisabledPseudo(false),\n\t\t\t\tdisabled: createDisabledPseudo(true),\n\n\t\t\t\tchecked: function (elem) {\n\n\t\t\t\t\t// In CSS3, :checked should return both checked and selected elements\n\t\t\t\t\t// https://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\t\t\treturn (nodeName(elem, \"input\") && !!elem.checked) ||\n\t\t\t\t\t\t(nodeName(elem, \"option\") && !!elem.selected);\n\t\t\t\t},\n\n\t\t\t\tselected: function (elem) {\n\n\t\t\t\t\t// Support: IE <=11+\n\t\t\t\t\t// Accessing the selectedIndex property\n\t\t\t\t\t// forces the browser to treat the default option as\n\t\t\t\t\t// selected when in an optgroup.\n\t\t\t\t\tif (elem.parentNode) {\n\t\t\t\t\t\t// eslint-disable-next-line no-unused-expressions\n\t\t\t\t\t\telem.parentNode.selectedIndex;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn elem.selected === true;\n\t\t\t\t},\n\n\t\t\t\t// Contents\n\t\t\t\tempty: function (elem) {\n\n\t\t\t\t\t// https://www.w3.org/TR/selectors/#empty-pseudo\n\t\t\t\t\t// :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),\n\t\t\t\t\t//   but not by others (comment: 8; processing instruction: 7; etc.)\n\t\t\t\t\t// nodeType < 6 works because attributes (2) do not appear as children\n\t\t\t\t\tfor (elem = elem.firstChild; elem; elem = elem.nextSibling) {\n\t\t\t\t\t\tif (elem.nodeType < 6) {\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn true;\n\t\t\t\t},\n\n\t\t\t\tparent: function (elem) {\n\t\t\t\t\treturn !Expr.pseudos.empty(elem);\n\t\t\t\t},\n\n\t\t\t\t// Element/input types\n\t\t\t\theader: function (elem) {\n\t\t\t\t\treturn rheader.test(elem.nodeName);\n\t\t\t\t},\n\n\t\t\t\tinput: function (elem) {\n\t\t\t\t\treturn rinputs.test(elem.nodeName);\n\t\t\t\t},\n\n\t\t\t\tbutton: function (elem) {\n\t\t\t\t\treturn nodeName(elem, \"input\") && elem.type === \"button\" ||\n\t\t\t\t\t\tnodeName(elem, \"button\");\n\t\t\t\t},\n\n\t\t\t\ttext: function (elem) {\n\t\t\t\t\tvar attr;\n\t\t\t\t\treturn nodeName(elem, \"input\") && elem.type === \"text\" &&\n\n\t\t\t\t\t\t// Support: IE <10 only\n\t\t\t\t\t\t// New HTML5 attribute values (e.g., \"search\") appear\n\t\t\t\t\t\t// with elem.type === \"text\"\n\t\t\t\t\t\t((attr = elem.getAttribute(\"type\")) == null ||\n\t\t\t\t\t\t\tattr.toLowerCase() === \"text\");\n\t\t\t\t},\n\n\t\t\t\t// Position-in-collection\n\t\t\t\tfirst: createPositionalPseudo(function () {\n\t\t\t\t\treturn [0];\n\t\t\t\t}),\n\n\t\t\t\tlast: createPositionalPseudo(function (_matchIndexes, length) {\n\t\t\t\t\treturn [length - 1];\n\t\t\t\t}),\n\n\t\t\t\teq: createPositionalPseudo(function (_matchIndexes, length, argument) {\n\t\t\t\t\treturn [argument < 0 ? argument + length : argument];\n\t\t\t\t}),\n\n\t\t\t\teven: createPositionalPseudo(function (matchIndexes, length) {\n\t\t\t\t\tvar i = 0;\n\t\t\t\t\tfor (; i < length; i += 2) {\n\t\t\t\t\t\tmatchIndexes.push(i);\n\t\t\t\t\t}\n\t\t\t\t\treturn matchIndexes;\n\t\t\t\t}),\n\n\t\t\t\todd: createPositionalPseudo(function (matchIndexes, length) {\n\t\t\t\t\tvar i = 1;\n\t\t\t\t\tfor (; i < length; i += 2) {\n\t\t\t\t\t\tmatchIndexes.push(i);\n\t\t\t\t\t}\n\t\t\t\t\treturn matchIndexes;\n\t\t\t\t}),\n\n\t\t\t\tlt: createPositionalPseudo(function (matchIndexes, length, argument) {\n\t\t\t\t\tvar i;\n\n\t\t\t\t\tif (argument < 0) {\n\t\t\t\t\t\ti = argument + length;\n\t\t\t\t\t} else if (argument > length) {\n\t\t\t\t\t\ti = length;\n\t\t\t\t\t} else {\n\t\t\t\t\t\ti = argument;\n\t\t\t\t\t}\n\n\t\t\t\t\tfor (; --i >= 0;) {\n\t\t\t\t\t\tmatchIndexes.push(i);\n\t\t\t\t\t}\n\t\t\t\t\treturn matchIndexes;\n\t\t\t\t}),\n\n\t\t\t\tgt: createPositionalPseudo(function (matchIndexes, length, argument) {\n\t\t\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\t\t\tfor (; ++i < length;) {\n\t\t\t\t\t\tmatchIndexes.push(i);\n\t\t\t\t\t}\n\t\t\t\t\treturn matchIndexes;\n\t\t\t\t})\n\t\t\t}\n\t\t};\n\n\t\tExpr.pseudos.nth = Expr.pseudos.eq;\n\n\t\t// Add button/input type pseudos\n\t\tfor (i in { radio: true, checkbox: true, file: true, password: true, image: true }) {\n\t\t\tExpr.pseudos[i] = createInputPseudo(i);\n\t\t}\n\t\tfor (i in { submit: true, reset: true }) {\n\t\t\tExpr.pseudos[i] = createButtonPseudo(i);\n\t\t}\n\n\t\t// Easy API for creating new setFilters\n\t\tfunction setFilters() { }\n\t\tsetFilters.prototype = Expr.filters = Expr.pseudos;\n\t\tExpr.setFilters = new setFilters();\n\n\t\tfunction tokenize(selector, parseOnly) {\n\t\t\tvar matched, match, tokens, type,\n\t\t\t\tsoFar, groups, preFilters,\n\t\t\t\tcached = tokenCache[selector + \" \"];\n\n\t\t\tif (cached) {\n\t\t\t\treturn parseOnly ? 0 : cached.slice(0);\n\t\t\t}\n\n\t\t\tsoFar = selector;\n\t\t\tgroups = [];\n\t\t\tpreFilters = Expr.preFilter;\n\n\t\t\twhile (soFar) {\n\n\t\t\t\t// Comma and first run\n\t\t\t\tif (!matched || (match = rcomma.exec(soFar))) {\n\t\t\t\t\tif (match) {\n\n\t\t\t\t\t\t// Don't consume trailing commas as valid\n\t\t\t\t\t\tsoFar = soFar.slice(match[0].length) || soFar;\n\t\t\t\t\t}\n\t\t\t\t\tgroups.push((tokens = []));\n\t\t\t\t}\n\n\t\t\t\tmatched = false;\n\n\t\t\t\t// Combinators\n\t\t\t\tif ((match = rleadingCombinator.exec(soFar))) {\n\t\t\t\t\tmatched = match.shift();\n\t\t\t\t\ttokens.push({\n\t\t\t\t\t\tvalue: matched,\n\n\t\t\t\t\t\t// Cast descendant combinators to space\n\t\t\t\t\t\ttype: match[0].replace(rtrimCSS, \" \")\n\t\t\t\t\t});\n\t\t\t\t\tsoFar = soFar.slice(matched.length);\n\t\t\t\t}\n\n\t\t\t\t// Filters\n\t\t\t\tfor (type in Expr.filter) {\n\t\t\t\t\tif ((match = matchExpr[type].exec(soFar)) && (!preFilters[type] ||\n\t\t\t\t\t\t(match = preFilters[type](match)))) {\n\t\t\t\t\t\tmatched = match.shift();\n\t\t\t\t\t\ttokens.push({\n\t\t\t\t\t\t\tvalue: matched,\n\t\t\t\t\t\t\ttype: type,\n\t\t\t\t\t\t\tmatches: match\n\t\t\t\t\t\t});\n\t\t\t\t\t\tsoFar = soFar.slice(matched.length);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (!matched) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Return the length of the invalid excess\n\t\t\t// if we're just parsing\n\t\t\t// Otherwise, throw an error or return tokens\n\t\t\tif (parseOnly) {\n\t\t\t\treturn soFar.length;\n\t\t\t}\n\n\t\t\treturn soFar ?\n\t\t\t\tfind.error(selector) :\n\n\t\t\t\t// Cache the tokens\n\t\t\t\ttokenCache(selector, groups).slice(0);\n\t\t}\n\n\t\tfunction toSelector(tokens) {\n\t\t\tvar i = 0,\n\t\t\t\tlen = tokens.length,\n\t\t\t\tselector = \"\";\n\t\t\tfor (; i < len; i++) {\n\t\t\t\tselector += tokens[i].value;\n\t\t\t}\n\t\t\treturn selector;\n\t\t}\n\n\t\tfunction addCombinator(matcher, combinator, base) {\n\t\t\tvar dir = combinator.dir,\n\t\t\t\tskip = combinator.next,\n\t\t\t\tkey = skip || dir,\n\t\t\t\tcheckNonElements = base && key === \"parentNode\",\n\t\t\t\tdoneName = done++;\n\n\t\t\treturn combinator.first ?\n\n\t\t\t\t// Check against closest ancestor/preceding element\n\t\t\t\tfunction (elem, context, xml) {\n\t\t\t\t\twhile ((elem = elem[dir])) {\n\t\t\t\t\t\tif (elem.nodeType === 1 || checkNonElements) {\n\t\t\t\t\t\t\treturn matcher(elem, context, xml);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn false;\n\t\t\t\t} :\n\n\t\t\t\t// Check against all ancestor/preceding elements\n\t\t\t\tfunction (elem, context, xml) {\n\t\t\t\t\tvar oldCache, outerCache,\n\t\t\t\t\t\tnewCache = [dirruns, doneName];\n\n\t\t\t\t\t// We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching\n\t\t\t\t\tif (xml) {\n\t\t\t\t\t\twhile ((elem = elem[dir])) {\n\t\t\t\t\t\t\tif (elem.nodeType === 1 || checkNonElements) {\n\t\t\t\t\t\t\t\tif (matcher(elem, context, xml)) {\n\t\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\twhile ((elem = elem[dir])) {\n\t\t\t\t\t\t\tif (elem.nodeType === 1 || checkNonElements) {\n\t\t\t\t\t\t\t\touterCache = elem[expando] || (elem[expando] = {});\n\n\t\t\t\t\t\t\t\tif (skip && nodeName(elem, skip)) {\n\t\t\t\t\t\t\t\t\telem = elem[dir] || elem;\n\t\t\t\t\t\t\t\t} else if ((oldCache = outerCache[key]) &&\n\t\t\t\t\t\t\t\t\toldCache[0] === dirruns && oldCache[1] === doneName) {\n\n\t\t\t\t\t\t\t\t\t// Assign to newCache so results back-propagate to previous elements\n\t\t\t\t\t\t\t\t\treturn (newCache[2] = oldCache[2]);\n\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t// Reuse newcache so results back-propagate to previous elements\n\t\t\t\t\t\t\t\t\touterCache[key] = newCache;\n\n\t\t\t\t\t\t\t\t\t// A match means we're done; a fail means we have to keep checking\n\t\t\t\t\t\t\t\t\tif ((newCache[2] = matcher(elem, context, xml))) {\n\t\t\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn false;\n\t\t\t\t};\n\t\t}\n\n\t\tfunction elementMatcher(matchers) {\n\t\t\treturn matchers.length > 1 ?\n\t\t\t\tfunction (elem, context, xml) {\n\t\t\t\t\tvar i = matchers.length;\n\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\tif (!matchers[i](elem, context, xml)) {\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn true;\n\t\t\t\t} :\n\t\t\t\tmatchers[0];\n\t\t}\n\n\t\tfunction multipleContexts(selector, contexts, results) {\n\t\t\tvar i = 0,\n\t\t\t\tlen = contexts.length;\n\t\t\tfor (; i < len; i++) {\n\t\t\t\tfind(selector, contexts[i], results);\n\t\t\t}\n\t\t\treturn results;\n\t\t}\n\n\t\tfunction condense(unmatched, map, filter, context, xml) {\n\t\t\tvar elem,\n\t\t\t\tnewUnmatched = [],\n\t\t\t\ti = 0,\n\t\t\t\tlen = unmatched.length,\n\t\t\t\tmapped = map != null;\n\n\t\t\tfor (; i < len; i++) {\n\t\t\t\tif ((elem = unmatched[i])) {\n\t\t\t\t\tif (!filter || filter(elem, context, xml)) {\n\t\t\t\t\t\tnewUnmatched.push(elem);\n\t\t\t\t\t\tif (mapped) {\n\t\t\t\t\t\t\tmap.push(i);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn newUnmatched;\n\t\t}\n\n\t\tfunction setMatcher(preFilter, selector, matcher, postFilter, postFinder, postSelector) {\n\t\t\tif (postFilter && !postFilter[expando]) {\n\t\t\t\tpostFilter = setMatcher(postFilter);\n\t\t\t}\n\t\t\tif (postFinder && !postFinder[expando]) {\n\t\t\t\tpostFinder = setMatcher(postFinder, postSelector);\n\t\t\t}\n\t\t\treturn markFunction(function (seed, results, context, xml) {\n\t\t\t\tvar temp, i, elem, matcherOut,\n\t\t\t\t\tpreMap = [],\n\t\t\t\t\tpostMap = [],\n\t\t\t\t\tpreexisting = results.length,\n\n\t\t\t\t\t// Get initial elements from seed or context\n\t\t\t\t\telems = seed ||\n\t\t\t\t\t\tmultipleContexts(selector || \"*\",\n\t\t\t\t\t\t\tcontext.nodeType ? [context] : context, []),\n\n\t\t\t\t\t// Prefilter to get matcher input, preserving a map for seed-results synchronization\n\t\t\t\t\tmatcherIn = preFilter && (seed || !selector) ?\n\t\t\t\t\t\tcondense(elems, preMap, preFilter, context, xml) :\n\t\t\t\t\t\telems;\n\n\t\t\t\tif (matcher) {\n\n\t\t\t\t\t// If we have a postFinder, or filtered seed, or non-seed postFilter\n\t\t\t\t\t// or preexisting results,\n\t\t\t\t\tmatcherOut = postFinder || (seed ? preFilter : preexisting || postFilter) ?\n\n\t\t\t\t\t\t// ...intermediate processing is necessary\n\t\t\t\t\t\t[] :\n\n\t\t\t\t\t\t// ...otherwise use results directly\n\t\t\t\t\t\tresults;\n\n\t\t\t\t\t// Find primary matches\n\t\t\t\t\tmatcher(matcherIn, matcherOut, context, xml);\n\t\t\t\t} else {\n\t\t\t\t\tmatcherOut = matcherIn;\n\t\t\t\t}\n\n\t\t\t\t// Apply postFilter\n\t\t\t\tif (postFilter) {\n\t\t\t\t\ttemp = condense(matcherOut, postMap);\n\t\t\t\t\tpostFilter(temp, [], context, xml);\n\n\t\t\t\t\t// Un-match failing elements by moving them back to matcherIn\n\t\t\t\t\ti = temp.length;\n\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\tif ((elem = temp[i])) {\n\t\t\t\t\t\t\tmatcherOut[postMap[i]] = !(matcherIn[postMap[i]] = elem);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (seed) {\n\t\t\t\t\tif (postFinder || preFilter) {\n\t\t\t\t\t\tif (postFinder) {\n\n\t\t\t\t\t\t\t// Get the final matcherOut by condensing this intermediate into postFinder contexts\n\t\t\t\t\t\t\ttemp = [];\n\t\t\t\t\t\t\ti = matcherOut.length;\n\t\t\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\t\t\tif ((elem = matcherOut[i])) {\n\n\t\t\t\t\t\t\t\t\t// Restore matcherIn since elem is not yet a final match\n\t\t\t\t\t\t\t\t\ttemp.push((matcherIn[i] = elem));\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tpostFinder(null, (matcherOut = []), temp, xml);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Move matched elements from seed to results to keep them synchronized\n\t\t\t\t\t\ti = matcherOut.length;\n\t\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\t\tif ((elem = matcherOut[i]) &&\n\t\t\t\t\t\t\t\t(temp = postFinder ? indexOf.call(seed, elem) : preMap[i]) > -1) {\n\n\t\t\t\t\t\t\t\tseed[temp] = !(results[temp] = elem);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Add elements to results, through postFinder if defined\n\t\t\t\t} else {\n\t\t\t\t\tmatcherOut = condense(\n\t\t\t\t\t\tmatcherOut === results ?\n\t\t\t\t\t\t\tmatcherOut.splice(preexisting, matcherOut.length) :\n\t\t\t\t\t\t\tmatcherOut\n\t\t\t\t\t);\n\t\t\t\t\tif (postFinder) {\n\t\t\t\t\t\tpostFinder(null, results, matcherOut, xml);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tpush.apply(results, matcherOut);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tfunction matcherFromTokens(tokens) {\n\t\t\tvar checkContext, matcher, j,\n\t\t\t\tlen = tokens.length,\n\t\t\t\tleadingRelative = Expr.relative[tokens[0].type],\n\t\t\t\timplicitRelative = leadingRelative || Expr.relative[\" \"],\n\t\t\t\ti = leadingRelative ? 1 : 0,\n\n\t\t\t\t// The foundational matcher ensures that elements are reachable from top-level context(s)\n\t\t\t\tmatchContext = addCombinator(function (elem) {\n\t\t\t\t\treturn elem === checkContext;\n\t\t\t\t}, implicitRelative, true),\n\t\t\t\tmatchAnyContext = addCombinator(function (elem) {\n\t\t\t\t\treturn indexOf.call(checkContext, elem) > -1;\n\t\t\t\t}, implicitRelative, true),\n\t\t\t\tmatchers = [function (elem, context, xml) {\n\n\t\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\tvar ret = (!leadingRelative && (xml || context != outermostContext)) || (\n\t\t\t\t\t\t(checkContext = context).nodeType ?\n\t\t\t\t\t\t\tmatchContext(elem, context, xml) :\n\t\t\t\t\t\t\tmatchAnyContext(elem, context, xml));\n\n\t\t\t\t\t// Avoid hanging onto element\n\t\t\t\t\t// (see https://github.com/jquery/sizzle/issues/299)\n\t\t\t\t\tcheckContext = null;\n\t\t\t\t\treturn ret;\n\t\t\t\t}];\n\n\t\t\tfor (; i < len; i++) {\n\t\t\t\tif ((matcher = Expr.relative[tokens[i].type])) {\n\t\t\t\t\tmatchers = [addCombinator(elementMatcher(matchers), matcher)];\n\t\t\t\t} else {\n\t\t\t\t\tmatcher = Expr.filter[tokens[i].type].apply(null, tokens[i].matches);\n\n\t\t\t\t\t// Return special upon seeing a positional matcher\n\t\t\t\t\tif (matcher[expando]) {\n\n\t\t\t\t\t\t// Find the next relative operator (if any) for proper handling\n\t\t\t\t\t\tj = ++i;\n\t\t\t\t\t\tfor (; j < len; j++) {\n\t\t\t\t\t\t\tif (Expr.relative[tokens[j].type]) {\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn setMatcher(\n\t\t\t\t\t\t\ti > 1 && elementMatcher(matchers),\n\t\t\t\t\t\t\ti > 1 && toSelector(\n\n\t\t\t\t\t\t\t\t// If the preceding token was a descendant combinator, insert an implicit any-element `*`\n\t\t\t\t\t\t\t\ttokens.slice(0, i - 1)\n\t\t\t\t\t\t\t\t\t.concat({ value: tokens[i - 2].type === \" \" ? \"*\" : \"\" })\n\t\t\t\t\t\t\t).replace(rtrimCSS, \"$1\"),\n\t\t\t\t\t\t\tmatcher,\n\t\t\t\t\t\t\ti < j && matcherFromTokens(tokens.slice(i, j)),\n\t\t\t\t\t\t\tj < len && matcherFromTokens((tokens = tokens.slice(j))),\n\t\t\t\t\t\t\tj < len && toSelector(tokens)\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\tmatchers.push(matcher);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn elementMatcher(matchers);\n\t\t}\n\n\t\tfunction matcherFromGroupMatchers(elementMatchers, setMatchers) {\n\t\t\tvar bySet = setMatchers.length > 0,\n\t\t\t\tbyElement = elementMatchers.length > 0,\n\t\t\t\tsuperMatcher = function (seed, context, xml, results, outermost) {\n\t\t\t\t\tvar elem, j, matcher,\n\t\t\t\t\t\tmatchedCount = 0,\n\t\t\t\t\t\ti = \"0\",\n\t\t\t\t\t\tunmatched = seed && [],\n\t\t\t\t\t\tsetMatched = [],\n\t\t\t\t\t\tcontextBackup = outermostContext,\n\n\t\t\t\t\t\t// We must always have either seed elements or outermost context\n\t\t\t\t\t\telems = seed || byElement && Expr.find.TAG(\"*\", outermost),\n\n\t\t\t\t\t\t// Use integer dirruns iff this is the outermost matcher\n\t\t\t\t\t\tdirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1),\n\t\t\t\t\t\tlen = elems.length;\n\n\t\t\t\t\tif (outermost) {\n\n\t\t\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\t\toutermostContext = context == document || context || outermost;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Add elements passing elementMatchers directly to results\n\t\t\t\t\t// Support: iOS <=7 - 9 only\n\t\t\t\t\t// Tolerate NodeList properties (IE: \"length\"; Safari: <number>) matching\n\t\t\t\t\t// elements by id. (see trac-14142)\n\t\t\t\t\tfor (; i !== len && (elem = elems[i]) != null; i++) {\n\t\t\t\t\t\tif (byElement && elem) {\n\t\t\t\t\t\t\tj = 0;\n\n\t\t\t\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\t\t\tif (!context && elem.ownerDocument != document) {\n\t\t\t\t\t\t\t\tsetDocument(elem);\n\t\t\t\t\t\t\t\txml = !documentIsHTML;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\twhile ((matcher = elementMatchers[j++])) {\n\t\t\t\t\t\t\t\tif (matcher(elem, context || document, xml)) {\n\t\t\t\t\t\t\t\t\tpush.call(results, elem);\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (outermost) {\n\t\t\t\t\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Track unmatched elements for set filters\n\t\t\t\t\t\tif (bySet) {\n\n\t\t\t\t\t\t\t// They will have gone through all possible matchers\n\t\t\t\t\t\t\tif ((elem = !matcher && elem)) {\n\t\t\t\t\t\t\t\tmatchedCount--;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Lengthen the array for every element, matched or not\n\t\t\t\t\t\t\tif (seed) {\n\t\t\t\t\t\t\t\tunmatched.push(elem);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// `i` is now the count of elements visited above, and adding it to `matchedCount`\n\t\t\t\t\t// makes the latter nonnegative.\n\t\t\t\t\tmatchedCount += i;\n\n\t\t\t\t\t// Apply set filters to unmatched elements\n\t\t\t\t\t// NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`\n\t\t\t\t\t// equals `i`), unless we didn't visit _any_ elements in the above loop because we have\n\t\t\t\t\t// no element matchers and no seed.\n\t\t\t\t\t// Incrementing an initially-string \"0\" `i` allows `i` to remain a string only in that\n\t\t\t\t\t// case, which will result in a \"00\" `matchedCount` that differs from `i` but is also\n\t\t\t\t\t// numerically zero.\n\t\t\t\t\tif (bySet && i !== matchedCount) {\n\t\t\t\t\t\tj = 0;\n\t\t\t\t\t\twhile ((matcher = setMatchers[j++])) {\n\t\t\t\t\t\t\tmatcher(unmatched, setMatched, context, xml);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (seed) {\n\n\t\t\t\t\t\t\t// Reintegrate element matches to eliminate the need for sorting\n\t\t\t\t\t\t\tif (matchedCount > 0) {\n\t\t\t\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\t\t\t\tif (!(unmatched[i] || setMatched[i])) {\n\t\t\t\t\t\t\t\t\t\tsetMatched[i] = pop.call(results);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Discard index placeholder values to get only actual matches\n\t\t\t\t\t\t\tsetMatched = condense(setMatched);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Add matches to results\n\t\t\t\t\t\tpush.apply(results, setMatched);\n\n\t\t\t\t\t\t// Seedless set matches succeeding multiple successful matchers stipulate sorting\n\t\t\t\t\t\tif (outermost && !seed && setMatched.length > 0 &&\n\t\t\t\t\t\t\t(matchedCount + setMatchers.length) > 1) {\n\n\t\t\t\t\t\t\tjQuery.uniqueSort(results);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Override manipulation of globals by nested matchers\n\t\t\t\t\tif (outermost) {\n\t\t\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\t\t\toutermostContext = contextBackup;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn unmatched;\n\t\t\t\t};\n\n\t\t\treturn bySet ?\n\t\t\t\tmarkFunction(superMatcher) :\n\t\t\t\tsuperMatcher;\n\t\t}\n\n\t\tfunction compile(selector, match /* Internal Use Only */) {\n\t\t\tvar i,\n\t\t\t\tsetMatchers = [],\n\t\t\t\telementMatchers = [],\n\t\t\t\tcached = compilerCache[selector + \" \"];\n\n\t\t\tif (!cached) {\n\n\t\t\t\t// Generate a function of recursive functions that can be used to check each element\n\t\t\t\tif (!match) {\n\t\t\t\t\tmatch = tokenize(selector);\n\t\t\t\t}\n\t\t\t\ti = match.length;\n\t\t\t\twhile (i--) {\n\t\t\t\t\tcached = matcherFromTokens(match[i]);\n\t\t\t\t\tif (cached[expando]) {\n\t\t\t\t\t\tsetMatchers.push(cached);\n\t\t\t\t\t} else {\n\t\t\t\t\t\telementMatchers.push(cached);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Cache the compiled function\n\t\t\t\tcached = compilerCache(selector,\n\t\t\t\t\tmatcherFromGroupMatchers(elementMatchers, setMatchers));\n\n\t\t\t\t// Save selector and tokenization\n\t\t\t\tcached.selector = selector;\n\t\t\t}\n\t\t\treturn cached;\n\t\t}\n\n\t\t/**\n\t\t * A low-level selection function that works with jQuery's compiled\n\t\t *  selector functions\n\t\t * @param {String|Function} selector A selector or a pre-compiled\n\t\t *  selector function built with jQuery selector compile\n\t\t * @param {Element} context\n\t\t * @param {Array} [results]\n\t\t * @param {Array} [seed] A set of elements to match against\n\t\t */\n\t\tfunction select(selector, context, results, seed) {\n\t\t\tvar i, tokens, token, type, find,\n\t\t\t\tcompiled = typeof selector === \"function\" && selector,\n\t\t\t\tmatch = !seed && tokenize((selector = compiled.selector || selector));\n\n\t\t\tresults = results || [];\n\n\t\t\t// Try to minimize operations if there is only one selector in the list and no seed\n\t\t\t// (the latter of which guarantees us context)\n\t\t\tif (match.length === 1) {\n\n\t\t\t\t// Reduce context if the leading compound selector is an ID\n\t\t\t\ttokens = match[0] = match[0].slice(0);\n\t\t\t\tif (tokens.length > 2 && (token = tokens[0]).type === \"ID\" &&\n\t\t\t\t\tcontext.nodeType === 9 && documentIsHTML && Expr.relative[tokens[1].type]) {\n\n\t\t\t\t\tcontext = (Expr.find.ID(\n\t\t\t\t\t\ttoken.matches[0].replace(runescape, funescape),\n\t\t\t\t\t\tcontext\n\t\t\t\t\t) || [])[0];\n\t\t\t\t\tif (!context) {\n\t\t\t\t\t\treturn results;\n\n\t\t\t\t\t\t// Precompiled matchers will still verify ancestry, so step up a level\n\t\t\t\t\t} else if (compiled) {\n\t\t\t\t\t\tcontext = context.parentNode;\n\t\t\t\t\t}\n\n\t\t\t\t\tselector = selector.slice(tokens.shift().value.length);\n\t\t\t\t}\n\n\t\t\t\t// Fetch a seed set for right-to-left matching\n\t\t\t\ti = matchExpr.needsContext.test(selector) ? 0 : tokens.length;\n\t\t\t\twhile (i--) {\n\t\t\t\t\ttoken = tokens[i];\n\n\t\t\t\t\t// Abort if we hit a combinator\n\t\t\t\t\tif (Expr.relative[(type = token.type)]) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tif ((find = Expr.find[type])) {\n\n\t\t\t\t\t\t// Search, expanding context for leading sibling combinators\n\t\t\t\t\t\tif ((seed = find(\n\t\t\t\t\t\t\ttoken.matches[0].replace(runescape, funescape),\n\t\t\t\t\t\t\trsibling.test(tokens[0].type) &&\n\t\t\t\t\t\t\ttestContext(context.parentNode) || context\n\t\t\t\t\t\t))) {\n\n\t\t\t\t\t\t\t// If seed is empty or no tokens remain, we can return early\n\t\t\t\t\t\t\ttokens.splice(i, 1);\n\t\t\t\t\t\t\tselector = seed.length && toSelector(tokens);\n\t\t\t\t\t\t\tif (!selector) {\n\t\t\t\t\t\t\t\tpush.apply(results, seed);\n\t\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Compile and execute a filtering function if one is not provided\n\t\t\t// Provide `match` to avoid retokenization if we modified the selector above\n\t\t\t(compiled || compile(selector, match))(\n\t\t\t\tseed,\n\t\t\t\tcontext,\n\t\t\t\t!documentIsHTML,\n\t\t\t\tresults,\n\t\t\t\t!context || rsibling.test(selector) && testContext(context.parentNode) || context\n\t\t\t);\n\t\t\treturn results;\n\t\t}\n\n\t\t// One-time assignments\n\n\t\t// Support: Android <=4.0 - 4.1+\n\t\t// Sort stability\n\t\tsupport.sortStable = expando.split(\"\").sort(sortOrder).join(\"\") === expando;\n\n\t\t// Initialize against the default document\n\t\tsetDocument();\n\n\t\t// Support: Android <=4.0 - 4.1+\n\t\t// Detached nodes confoundingly follow *each other*\n\t\tsupport.sortDetached = assert(function (el) {\n\n\t\t\t// Should return 1, but returns 4 (following)\n\t\t\treturn el.compareDocumentPosition(document.createElement(\"fieldset\")) & 1;\n\t\t});\n\n\t\tjQuery.find = find;\n\n\t\t// Deprecated\n\t\tjQuery.expr[\":\"] = jQuery.expr.pseudos;\n\t\tjQuery.unique = jQuery.uniqueSort;\n\n\t\t// These have always been private, but they used to be documented\n\t\t// as part of Sizzle so let's maintain them in the 3.x line\n\t\t// for backwards compatibility purposes.\n\t\tfind.compile = compile;\n\t\tfind.select = select;\n\t\tfind.setDocument = setDocument;\n\n\t\tfind.escape = jQuery.escapeSelector;\n\t\tfind.getText = jQuery.text;\n\t\tfind.isXML = jQuery.isXMLDoc;\n\t\tfind.selectors = jQuery.expr;\n\t\tfind.support = jQuery.support;\n\t\tfind.uniqueSort = jQuery.uniqueSort;\n\n\t\t/* eslint-enable */\n\n\t})();\n\n\n\tvar dir = function (elem, dir, until) {\n\t\tvar matched = [],\n\t\t\ttruncate = until !== undefined;\n\n\t\twhile ((elem = elem[dir]) && elem.nodeType !== 9) {\n\t\t\tif (elem.nodeType === 1) {\n\t\t\t\tif (truncate && jQuery(elem).is(until)) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tmatched.push(elem);\n\t\t\t}\n\t\t}\n\t\treturn matched;\n\t};\n\n\n\tvar siblings = function (n, elem) {\n\t\tvar matched = [];\n\n\t\tfor (; n; n = n.nextSibling) {\n\t\t\tif (n.nodeType === 1 && n !== elem) {\n\t\t\t\tmatched.push(n);\n\t\t\t}\n\t\t}\n\n\t\treturn matched;\n\t};\n\n\n\tvar rneedsContext = jQuery.expr.match.needsContext;\n\n\tvar rsingleTag = (/^<([a-z][^\\/\\0>:\\x20\\t\\r\\n\\f]*)[\\x20\\t\\r\\n\\f]*\\/?>(?:<\\/\\1>|)$/i);\n\n\n\n\t// Implement the identical functionality for filter and not\n\tfunction winnow(elements, qualifier, not) {\n\t\tif (isFunction(qualifier)) {\n\t\t\treturn jQuery.grep(elements, function (elem, i) {\n\t\t\t\treturn !!qualifier.call(elem, i, elem) !== not;\n\t\t\t});\n\t\t}\n\n\t\t// Single element\n\t\tif (qualifier.nodeType) {\n\t\t\treturn jQuery.grep(elements, function (elem) {\n\t\t\t\treturn (elem === qualifier) !== not;\n\t\t\t});\n\t\t}\n\n\t\t// Arraylike of elements (jQuery, arguments, Array)\n\t\tif (typeof qualifier !== \"string\") {\n\t\t\treturn jQuery.grep(elements, function (elem) {\n\t\t\t\treturn (indexOf.call(qualifier, elem) > -1) !== not;\n\t\t\t});\n\t\t}\n\n\t\t// Filtered directly for both simple and complex selectors\n\t\treturn jQuery.filter(qualifier, elements, not);\n\t}\n\n\tjQuery.filter = function (expr, elems, not) {\n\t\tvar elem = elems[0];\n\n\t\tif (not) {\n\t\t\texpr = \":not(\" + expr + \")\";\n\t\t}\n\n\t\tif (elems.length === 1 && elem.nodeType === 1) {\n\t\t\treturn jQuery.find.matchesSelector(elem, expr) ? [elem] : [];\n\t\t}\n\n\t\treturn jQuery.find.matches(expr, jQuery.grep(elems, function (elem) {\n\t\t\treturn elem.nodeType === 1;\n\t\t}));\n\t};\n\n\tjQuery.fn.extend({\n\t\tfind: function (selector) {\n\t\t\tvar i, ret,\n\t\t\t\tlen = this.length,\n\t\t\t\tself = this;\n\n\t\t\tif (typeof selector !== \"string\") {\n\t\t\t\treturn this.pushStack(jQuery(selector).filter(function () {\n\t\t\t\t\tfor (i = 0; i < len; i++) {\n\t\t\t\t\t\tif (jQuery.contains(self[i], this)) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}));\n\t\t\t}\n\n\t\t\tret = this.pushStack([]);\n\n\t\t\tfor (i = 0; i < len; i++) {\n\t\t\t\tjQuery.find(selector, self[i], ret);\n\t\t\t}\n\n\t\t\treturn len > 1 ? jQuery.uniqueSort(ret) : ret;\n\t\t},\n\t\tfilter: function (selector) {\n\t\t\treturn this.pushStack(winnow(this, selector || [], false));\n\t\t},\n\t\tnot: function (selector) {\n\t\t\treturn this.pushStack(winnow(this, selector || [], true));\n\t\t},\n\t\tis: function (selector) {\n\t\t\treturn !!winnow(\n\t\t\t\tthis,\n\n\t\t\t\t// If this is a positional/relative selector, check membership in the returned set\n\t\t\t\t// so $(\"p:first\").is(\"p:last\") won't return true for a doc with two \"p\".\n\t\t\t\ttypeof selector === \"string\" && rneedsContext.test(selector) ?\n\t\t\t\t\tjQuery(selector) :\n\t\t\t\t\tselector || [],\n\t\t\t\tfalse\n\t\t\t).length;\n\t\t}\n\t});\n\n\n\t// Initialize a jQuery object\n\n\n\t// A central reference to the root jQuery(document)\n\tvar rootjQuery,\n\n\t\t// A simple way to check for HTML strings\n\t\t// Prioritize #id over <tag> to avoid XSS via location.hash (trac-9521)\n\t\t// Strict HTML recognition (trac-11290: must start with <)\n\t\t// Shortcut simple #id case for speed\n\t\trquickExpr = /^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]+))$/,\n\n\t\tinit = jQuery.fn.init = function (selector, context, root) {\n\t\t\tvar match, elem;\n\n\t\t\t// HANDLE: $(\"\"), $(null), $(undefined), $(false)\n\t\t\tif (!selector) {\n\t\t\t\treturn this;\n\t\t\t}\n\n\t\t\t// Method init() accepts an alternate rootjQuery\n\t\t\t// so migrate can support jQuery.sub (gh-2101)\n\t\t\troot = root || rootjQuery;\n\n\t\t\t// Handle HTML strings\n\t\t\tif (typeof selector === \"string\") {\n\t\t\t\tif (selector[0] === \"<\" &&\n\t\t\t\t\tselector[selector.length - 1] === \">\" &&\n\t\t\t\t\tselector.length >= 3) {\n\n\t\t\t\t\t// Assume that strings that start and end with <> are HTML and skip the regex check\n\t\t\t\t\tmatch = [null, selector, null];\n\n\t\t\t\t} else {\n\t\t\t\t\tmatch = rquickExpr.exec(selector);\n\t\t\t\t}\n\n\t\t\t\t// Match html or make sure no context is specified for #id\n\t\t\t\tif (match && (match[1] || !context)) {\n\n\t\t\t\t\t// HANDLE: $(html) -> $(array)\n\t\t\t\t\tif (match[1]) {\n\t\t\t\t\t\tcontext = context instanceof jQuery ? context[0] : context;\n\n\t\t\t\t\t\t// Option to run scripts is true for back-compat\n\t\t\t\t\t\t// Intentionally let the error be thrown if parseHTML is not present\n\t\t\t\t\t\tjQuery.merge(this, jQuery.parseHTML(\n\t\t\t\t\t\t\tmatch[1],\n\t\t\t\t\t\t\tcontext && context.nodeType ? context.ownerDocument || context : document,\n\t\t\t\t\t\t\ttrue\n\t\t\t\t\t\t));\n\n\t\t\t\t\t\t// HANDLE: $(html, props)\n\t\t\t\t\t\tif (rsingleTag.test(match[1]) && jQuery.isPlainObject(context)) {\n\t\t\t\t\t\t\tfor (match in context) {\n\n\t\t\t\t\t\t\t\t// Properties of context are called as methods if possible\n\t\t\t\t\t\t\t\tif (isFunction(this[match])) {\n\t\t\t\t\t\t\t\t\tthis[match](context[match]);\n\n\t\t\t\t\t\t\t\t\t// ...and otherwise set as attributes\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tthis.attr(match, context[match]);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn this;\n\n\t\t\t\t\t\t// HANDLE: $(#id)\n\t\t\t\t\t} else {\n\t\t\t\t\t\telem = document.getElementById(match[2]);\n\n\t\t\t\t\t\tif (elem) {\n\n\t\t\t\t\t\t\t// Inject the element directly into the jQuery object\n\t\t\t\t\t\t\tthis[0] = elem;\n\t\t\t\t\t\t\tthis.length = 1;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn this;\n\t\t\t\t\t}\n\n\t\t\t\t\t// HANDLE: $(expr, $(...))\n\t\t\t\t} else if (!context || context.jquery) {\n\t\t\t\t\treturn (context || root).find(selector);\n\n\t\t\t\t\t// HANDLE: $(expr, context)\n\t\t\t\t\t// (which is just equivalent to: $(context).find(expr)\n\t\t\t\t} else {\n\t\t\t\t\treturn this.constructor(context).find(selector);\n\t\t\t\t}\n\n\t\t\t\t// HANDLE: $(DOMElement)\n\t\t\t} else if (selector.nodeType) {\n\t\t\t\tthis[0] = selector;\n\t\t\t\tthis.length = 1;\n\t\t\t\treturn this;\n\n\t\t\t\t// HANDLE: $(function)\n\t\t\t\t// Shortcut for document ready\n\t\t\t} else if (isFunction(selector)) {\n\t\t\t\treturn root.ready !== undefined ?\n\t\t\t\t\troot.ready(selector) :\n\n\t\t\t\t\t// Execute immediately if ready is not present\n\t\t\t\t\tselector(jQuery);\n\t\t\t}\n\n\t\t\treturn jQuery.makeArray(selector, this);\n\t\t};\n\n\t// Give the init function the jQuery prototype for later instantiation\n\tinit.prototype = jQuery.fn;\n\n\t// Initialize central reference\n\trootjQuery = jQuery(document);\n\n\n\tvar rparentsprev = /^(?:parents|prev(?:Until|All))/,\n\n\t\t// Methods guaranteed to produce a unique set when starting from a unique set\n\t\tguaranteedUnique = {\n\t\t\tchildren: true,\n\t\t\tcontents: true,\n\t\t\tnext: true,\n\t\t\tprev: true\n\t\t};\n\n\tjQuery.fn.extend({\n\t\thas: function (target) {\n\t\t\tvar targets = jQuery(target, this),\n\t\t\t\tl = targets.length;\n\n\t\t\treturn this.filter(function () {\n\t\t\t\tvar i = 0;\n\t\t\t\tfor (; i < l; i++) {\n\t\t\t\t\tif (jQuery.contains(this, targets[i])) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\tclosest: function (selectors, context) {\n\t\t\tvar cur,\n\t\t\t\ti = 0,\n\t\t\t\tl = this.length,\n\t\t\t\tmatched = [],\n\t\t\t\ttargets = typeof selectors !== \"string\" && jQuery(selectors);\n\n\t\t\t// Positional selectors never match, since there's no _selection_ context\n\t\t\tif (!rneedsContext.test(selectors)) {\n\t\t\t\tfor (; i < l; i++) {\n\t\t\t\t\tfor (cur = this[i]; cur && cur !== context; cur = cur.parentNode) {\n\n\t\t\t\t\t\t// Always skip document fragments\n\t\t\t\t\t\tif (cur.nodeType < 11 && (targets ?\n\t\t\t\t\t\t\ttargets.index(cur) > -1 :\n\n\t\t\t\t\t\t\t// Don't pass non-elements to jQuery#find\n\t\t\t\t\t\t\tcur.nodeType === 1 &&\n\t\t\t\t\t\t\tjQuery.find.matchesSelector(cur, selectors))) {\n\n\t\t\t\t\t\t\tmatched.push(cur);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn this.pushStack(matched.length > 1 ? jQuery.uniqueSort(matched) : matched);\n\t\t},\n\n\t\t// Determine the position of an element within the set\n\t\tindex: function (elem) {\n\n\t\t\t// No argument, return index in parent\n\t\t\tif (!elem) {\n\t\t\t\treturn (this[0] && this[0].parentNode) ? this.first().prevAll().length : -1;\n\t\t\t}\n\n\t\t\t// Index in selector\n\t\t\tif (typeof elem === \"string\") {\n\t\t\t\treturn indexOf.call(jQuery(elem), this[0]);\n\t\t\t}\n\n\t\t\t// Locate the position of the desired element\n\t\t\treturn indexOf.call(this,\n\n\t\t\t\t// If it receives a jQuery object, the first element is used\n\t\t\t\telem.jquery ? elem[0] : elem\n\t\t\t);\n\t\t},\n\n\t\tadd: function (selector, context) {\n\t\t\treturn this.pushStack(\n\t\t\t\tjQuery.uniqueSort(\n\t\t\t\t\tjQuery.merge(this.get(), jQuery(selector, context))\n\t\t\t\t)\n\t\t\t);\n\t\t},\n\n\t\taddBack: function (selector) {\n\t\t\treturn this.add(selector == null ?\n\t\t\t\tthis.prevObject : this.prevObject.filter(selector)\n\t\t\t);\n\t\t}\n\t});\n\n\tfunction sibling(cur, dir) {\n\t\twhile ((cur = cur[dir]) && cur.nodeType !== 1) { }\n\t\treturn cur;\n\t}\n\n\tjQuery.each({\n\t\tparent: function (elem) {\n\t\t\tvar parent = elem.parentNode;\n\t\t\treturn parent && parent.nodeType !== 11 ? parent : null;\n\t\t},\n\t\tparents: function (elem) {\n\t\t\treturn dir(elem, \"parentNode\");\n\t\t},\n\t\tparentsUntil: function (elem, _i, until) {\n\t\t\treturn dir(elem, \"parentNode\", until);\n\t\t},\n\t\tnext: function (elem) {\n\t\t\treturn sibling(elem, \"nextSibling\");\n\t\t},\n\t\tprev: function (elem) {\n\t\t\treturn sibling(elem, \"previousSibling\");\n\t\t},\n\t\tnextAll: function (elem) {\n\t\t\treturn dir(elem, \"nextSibling\");\n\t\t},\n\t\tprevAll: function (elem) {\n\t\t\treturn dir(elem, \"previousSibling\");\n\t\t},\n\t\tnextUntil: function (elem, _i, until) {\n\t\t\treturn dir(elem, \"nextSibling\", until);\n\t\t},\n\t\tprevUntil: function (elem, _i, until) {\n\t\t\treturn dir(elem, \"previousSibling\", until);\n\t\t},\n\t\tsiblings: function (elem) {\n\t\t\treturn siblings((elem.parentNode || {}).firstChild, elem);\n\t\t},\n\t\tchildren: function (elem) {\n\t\t\treturn siblings(elem.firstChild);\n\t\t},\n\t\tcontents: function (elem) {\n\t\t\tif (elem.contentDocument != null &&\n\n\t\t\t\t// Support: IE 11+\n\t\t\t\t// <object> elements with no `data` attribute has an object\n\t\t\t\t// `contentDocument` with a `null` prototype.\n\t\t\t\tgetProto(elem.contentDocument)) {\n\n\t\t\t\treturn elem.contentDocument;\n\t\t\t}\n\n\t\t\t// Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only\n\t\t\t// Treat the template element as a regular one in browsers that\n\t\t\t// don't support it.\n\t\t\tif (nodeName(elem, \"template\")) {\n\t\t\t\telem = elem.content || elem;\n\t\t\t}\n\n\t\t\treturn jQuery.merge([], elem.childNodes);\n\t\t}\n\t}, function (name, fn) {\n\t\tjQuery.fn[name] = function (until, selector) {\n\t\t\tvar matched = jQuery.map(this, fn, until);\n\n\t\t\tif (name.slice(-5) !== \"Until\") {\n\t\t\t\tselector = until;\n\t\t\t}\n\n\t\t\tif (selector && typeof selector === \"string\") {\n\t\t\t\tmatched = jQuery.filter(selector, matched);\n\t\t\t}\n\n\t\t\tif (this.length > 1) {\n\n\t\t\t\t// Remove duplicates\n\t\t\t\tif (!guaranteedUnique[name]) {\n\t\t\t\t\tjQuery.uniqueSort(matched);\n\t\t\t\t}\n\n\t\t\t\t// Reverse order for parents* and prev-derivatives\n\t\t\t\tif (rparentsprev.test(name)) {\n\t\t\t\t\tmatched.reverse();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn this.pushStack(matched);\n\t\t};\n\t});\n\tvar rnothtmlwhite = (/[^\\x20\\t\\r\\n\\f]+/g);\n\n\n\n\t// Convert String-formatted options into Object-formatted ones\n\tfunction createOptions(options) {\n\t\tvar object = {};\n\t\tjQuery.each(options.match(rnothtmlwhite) || [], function (_, flag) {\n\t\t\tobject[flag] = true;\n\t\t});\n\t\treturn object;\n\t}\n\n\t/*\n\t * Create a callback list using the following parameters:\n\t *\n\t *\toptions: an optional list of space-separated options that will change how\n\t *\t\t\tthe callback list behaves or a more traditional option object\n\t *\n\t * By default a callback list will act like an event callback list and can be\n\t * \"fired\" multiple times.\n\t *\n\t * Possible options:\n\t *\n\t *\tonce:\t\t\twill ensure the callback list can only be fired once (like a Deferred)\n\t *\n\t *\tmemory:\t\t\twill keep track of previous values and will call any callback added\n\t *\t\t\t\t\tafter the list has been fired right away with the latest \"memorized\"\n\t *\t\t\t\t\tvalues (like a Deferred)\n\t *\n\t *\tunique:\t\t\twill ensure a callback can only be added once (no duplicate in the list)\n\t *\n\t *\tstopOnFalse:\tinterrupt callings when a callback returns false\n\t *\n\t */\n\tjQuery.Callbacks = function (options) {\n\n\t\t// Convert options from String-formatted to Object-formatted if needed\n\t\t// (we check in cache first)\n\t\toptions = typeof options === \"string\" ?\n\t\t\tcreateOptions(options) :\n\t\t\tjQuery.extend({}, options);\n\n\t\tvar // Flag to know if list is currently firing\n\t\t\tfiring,\n\n\t\t\t// Last fire value for non-forgettable lists\n\t\t\tmemory,\n\n\t\t\t// Flag to know if list was already fired\n\t\t\tfired,\n\n\t\t\t// Flag to prevent firing\n\t\t\tlocked,\n\n\t\t\t// Actual callback list\n\t\t\tlist = [],\n\n\t\t\t// Queue of execution data for repeatable lists\n\t\t\tqueue = [],\n\n\t\t\t// Index of currently firing callback (modified by add/remove as needed)\n\t\t\tfiringIndex = -1,\n\n\t\t\t// Fire callbacks\n\t\t\tfire = function () {\n\n\t\t\t\t// Enforce single-firing\n\t\t\t\tlocked = locked || options.once;\n\n\t\t\t\t// Execute callbacks for all pending executions,\n\t\t\t\t// respecting firingIndex overrides and runtime changes\n\t\t\t\tfired = firing = true;\n\t\t\t\tfor (; queue.length; firingIndex = -1) {\n\t\t\t\t\tmemory = queue.shift();\n\t\t\t\t\twhile (++firingIndex < list.length) {\n\n\t\t\t\t\t\t// Run callback and check for early termination\n\t\t\t\t\t\tif (list[firingIndex].apply(memory[0], memory[1]) === false &&\n\t\t\t\t\t\t\toptions.stopOnFalse) {\n\n\t\t\t\t\t\t\t// Jump to end and forget the data so .add doesn't re-fire\n\t\t\t\t\t\t\tfiringIndex = list.length;\n\t\t\t\t\t\t\tmemory = false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Forget the data if we're done with it\n\t\t\t\tif (!options.memory) {\n\t\t\t\t\tmemory = false;\n\t\t\t\t}\n\n\t\t\t\tfiring = false;\n\n\t\t\t\t// Clean up if we're done firing for good\n\t\t\t\tif (locked) {\n\n\t\t\t\t\t// Keep an empty list if we have data for future add calls\n\t\t\t\t\tif (memory) {\n\t\t\t\t\t\tlist = [];\n\n\t\t\t\t\t\t// Otherwise, this object is spent\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlist = \"\";\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// Actual Callbacks object\n\t\t\tself = {\n\n\t\t\t\t// Add a callback or a collection of callbacks to the list\n\t\t\t\tadd: function () {\n\t\t\t\t\tif (list) {\n\n\t\t\t\t\t\t// If we have memory from a past run, we should fire after adding\n\t\t\t\t\t\tif (memory && !firing) {\n\t\t\t\t\t\t\tfiringIndex = list.length - 1;\n\t\t\t\t\t\t\tqueue.push(memory);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t(function add(args) {\n\t\t\t\t\t\t\tjQuery.each(args, function (_, arg) {\n\t\t\t\t\t\t\t\tif (isFunction(arg)) {\n\t\t\t\t\t\t\t\t\tif (!options.unique || !self.has(arg)) {\n\t\t\t\t\t\t\t\t\t\tlist.push(arg);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} else if (arg && arg.length && toType(arg) !== \"string\") {\n\n\t\t\t\t\t\t\t\t\t// Inspect recursively\n\t\t\t\t\t\t\t\t\tadd(arg);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t})(arguments);\n\n\t\t\t\t\t\tif (memory && !firing) {\n\t\t\t\t\t\t\tfire();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Remove a callback from the list\n\t\t\t\tremove: function () {\n\t\t\t\t\tjQuery.each(arguments, function (_, arg) {\n\t\t\t\t\t\tvar index;\n\t\t\t\t\t\twhile ((index = jQuery.inArray(arg, list, index)) > -1) {\n\t\t\t\t\t\t\tlist.splice(index, 1);\n\n\t\t\t\t\t\t\t// Handle firing indexes\n\t\t\t\t\t\t\tif (index <= firingIndex) {\n\t\t\t\t\t\t\t\tfiringIndex--;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Check if a given callback is in the list.\n\t\t\t\t// If no argument is given, return whether or not list has callbacks attached.\n\t\t\t\thas: function (fn) {\n\t\t\t\t\treturn fn ?\n\t\t\t\t\t\tjQuery.inArray(fn, list) > -1 :\n\t\t\t\t\t\tlist.length > 0;\n\t\t\t\t},\n\n\t\t\t\t// Remove all callbacks from the list\n\t\t\t\tempty: function () {\n\t\t\t\t\tif (list) {\n\t\t\t\t\t\tlist = [];\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Disable .fire and .add\n\t\t\t\t// Abort any current/pending executions\n\t\t\t\t// Clear all callbacks and values\n\t\t\t\tdisable: function () {\n\t\t\t\t\tlocked = queue = [];\n\t\t\t\t\tlist = memory = \"\";\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\t\t\t\tdisabled: function () {\n\t\t\t\t\treturn !list;\n\t\t\t\t},\n\n\t\t\t\t// Disable .fire\n\t\t\t\t// Also disable .add unless we have memory (since it would have no effect)\n\t\t\t\t// Abort any pending executions\n\t\t\t\tlock: function () {\n\t\t\t\t\tlocked = queue = [];\n\t\t\t\t\tif (!memory && !firing) {\n\t\t\t\t\t\tlist = memory = \"\";\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\t\t\t\tlocked: function () {\n\t\t\t\t\treturn !!locked;\n\t\t\t\t},\n\n\t\t\t\t// Call all callbacks with the given context and arguments\n\t\t\t\tfireWith: function (context, args) {\n\t\t\t\t\tif (!locked) {\n\t\t\t\t\t\targs = args || [];\n\t\t\t\t\t\targs = [context, args.slice ? args.slice() : args];\n\t\t\t\t\t\tqueue.push(args);\n\t\t\t\t\t\tif (!firing) {\n\t\t\t\t\t\t\tfire();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Call all the callbacks with the given arguments\n\t\t\t\tfire: function () {\n\t\t\t\t\tself.fireWith(this, arguments);\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// To know if the callbacks have already been called at least once\n\t\t\t\tfired: function () {\n\t\t\t\t\treturn !!fired;\n\t\t\t\t}\n\t\t\t};\n\n\t\treturn self;\n\t};\n\n\n\tfunction Identity(v) {\n\t\treturn v;\n\t}\n\tfunction Thrower(ex) {\n\t\tthrow ex;\n\t}\n\n\tfunction adoptValue(value, resolve, reject, noValue) {\n\t\tvar method;\n\n\t\ttry {\n\n\t\t\t// Check for promise aspect first to privilege synchronous behavior\n\t\t\tif (value && isFunction((method = value.promise))) {\n\t\t\t\tmethod.call(value).done(resolve).fail(reject);\n\n\t\t\t\t// Other thenables\n\t\t\t} else if (value && isFunction((method = value.then))) {\n\t\t\t\tmethod.call(value, resolve, reject);\n\n\t\t\t\t// Other non-thenables\n\t\t\t} else {\n\n\t\t\t\t// Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer:\n\t\t\t\t// * false: [ value ].slice( 0 ) => resolve( value )\n\t\t\t\t// * true: [ value ].slice( 1 ) => resolve()\n\t\t\t\tresolve.apply(undefined, [value].slice(noValue));\n\t\t\t}\n\n\t\t\t// For Promises/A+, convert exceptions into rejections\n\t\t\t// Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in\n\t\t\t// Deferred#then to conditionally suppress rejection.\n\t\t} catch (value) {\n\n\t\t\t// Support: Android 4.0 only\n\t\t\t// Strict mode functions invoked without .call/.apply get global-object context\n\t\t\treject.apply(undefined, [value]);\n\t\t}\n\t}\n\n\tjQuery.extend({\n\n\t\tDeferred: function (func) {\n\t\t\tvar tuples = [\n\n\t\t\t\t// action, add listener, callbacks,\n\t\t\t\t// ... .then handlers, argument index, [final state]\n\t\t\t\t[\"notify\", \"progress\", jQuery.Callbacks(\"memory\"),\n\t\t\t\t\tjQuery.Callbacks(\"memory\"), 2],\n\t\t\t\t[\"resolve\", \"done\", jQuery.Callbacks(\"once memory\"),\n\t\t\t\t\tjQuery.Callbacks(\"once memory\"), 0, \"resolved\"],\n\t\t\t\t[\"reject\", \"fail\", jQuery.Callbacks(\"once memory\"),\n\t\t\t\t\tjQuery.Callbacks(\"once memory\"), 1, \"rejected\"]\n\t\t\t],\n\t\t\t\tstate = \"pending\",\n\t\t\t\tpromise = {\n\t\t\t\t\tstate: function () {\n\t\t\t\t\t\treturn state;\n\t\t\t\t\t},\n\t\t\t\t\talways: function () {\n\t\t\t\t\t\tdeferred.done(arguments).fail(arguments);\n\t\t\t\t\t\treturn this;\n\t\t\t\t\t},\n\t\t\t\t\t\"catch\": function (fn) {\n\t\t\t\t\t\treturn promise.then(null, fn);\n\t\t\t\t\t},\n\n\t\t\t\t\t// Keep pipe for back-compat\n\t\t\t\t\tpipe: function ( /* fnDone, fnFail, fnProgress */) {\n\t\t\t\t\t\tvar fns = arguments;\n\n\t\t\t\t\t\treturn jQuery.Deferred(function (newDefer) {\n\t\t\t\t\t\t\tjQuery.each(tuples, function (_i, tuple) {\n\n\t\t\t\t\t\t\t\t// Map tuples (progress, done, fail) to arguments (done, fail, progress)\n\t\t\t\t\t\t\t\tvar fn = isFunction(fns[tuple[4]]) && fns[tuple[4]];\n\n\t\t\t\t\t\t\t\t// deferred.progress(function() { bind to newDefer or newDefer.notify })\n\t\t\t\t\t\t\t\t// deferred.done(function() { bind to newDefer or newDefer.resolve })\n\t\t\t\t\t\t\t\t// deferred.fail(function() { bind to newDefer or newDefer.reject })\n\t\t\t\t\t\t\t\tdeferred[tuple[1]](function () {\n\t\t\t\t\t\t\t\t\tvar returned = fn && fn.apply(this, arguments);\n\t\t\t\t\t\t\t\t\tif (returned && isFunction(returned.promise)) {\n\t\t\t\t\t\t\t\t\t\treturned.promise()\n\t\t\t\t\t\t\t\t\t\t\t.progress(newDefer.notify)\n\t\t\t\t\t\t\t\t\t\t\t.done(newDefer.resolve)\n\t\t\t\t\t\t\t\t\t\t\t.fail(newDefer.reject);\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tnewDefer[tuple[0] + \"With\"](\n\t\t\t\t\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\t\t\t\t\tfn ? [returned] : arguments\n\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tfns = null;\n\t\t\t\t\t\t}).promise();\n\t\t\t\t\t},\n\t\t\t\t\tthen: function (onFulfilled, onRejected, onProgress) {\n\t\t\t\t\t\tvar maxDepth = 0;\n\t\t\t\t\t\tfunction resolve(depth, deferred, handler, special) {\n\t\t\t\t\t\t\treturn function () {\n\t\t\t\t\t\t\t\tvar that = this,\n\t\t\t\t\t\t\t\t\targs = arguments,\n\t\t\t\t\t\t\t\t\tmightThrow = function () {\n\t\t\t\t\t\t\t\t\t\tvar returned, then;\n\n\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.3\n\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-59\n\t\t\t\t\t\t\t\t\t\t// Ignore double-resolution attempts\n\t\t\t\t\t\t\t\t\t\tif (depth < maxDepth) {\n\t\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\treturned = handler.apply(that, args);\n\n\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.1\n\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-48\n\t\t\t\t\t\t\t\t\t\tif (returned === deferred.promise()) {\n\t\t\t\t\t\t\t\t\t\t\tthrow new TypeError(\"Thenable self-resolution\");\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ sections 2.3.3.1, 3.5\n\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-54\n\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-75\n\t\t\t\t\t\t\t\t\t\t// Retrieve `then` only once\n\t\t\t\t\t\t\t\t\t\tthen = returned &&\n\n\t\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.4\n\t\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-64\n\t\t\t\t\t\t\t\t\t\t\t// Only check objects and functions for thenability\n\t\t\t\t\t\t\t\t\t\t\t(typeof returned === \"object\" ||\n\t\t\t\t\t\t\t\t\t\t\t\ttypeof returned === \"function\") &&\n\t\t\t\t\t\t\t\t\t\t\treturned.then;\n\n\t\t\t\t\t\t\t\t\t\t// Handle a returned thenable\n\t\t\t\t\t\t\t\t\t\tif (isFunction(then)) {\n\n\t\t\t\t\t\t\t\t\t\t\t// Special processors (notify) just wait for resolution\n\t\t\t\t\t\t\t\t\t\t\tif (special) {\n\t\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\t\tresolve(maxDepth, deferred, Identity, special),\n\t\t\t\t\t\t\t\t\t\t\t\t\tresolve(maxDepth, deferred, Thrower, special)\n\t\t\t\t\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t\t\t\t\t// Normal processors (resolve) also hook into progress\n\t\t\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t\t\t// ...and disregard older resolution values\n\t\t\t\t\t\t\t\t\t\t\t\tmaxDepth++;\n\n\t\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\t\tresolve(maxDepth, deferred, Identity, special),\n\t\t\t\t\t\t\t\t\t\t\t\t\tresolve(maxDepth, deferred, Thrower, special),\n\t\t\t\t\t\t\t\t\t\t\t\t\tresolve(maxDepth, deferred, Identity,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tdeferred.notifyWith)\n\t\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t// Handle all other returned values\n\t\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\t\tif (handler !== Identity) {\n\t\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\t\targs = [returned];\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t// Process the value(s)\n\t\t\t\t\t\t\t\t\t\t\t// Default process is resolve\n\t\t\t\t\t\t\t\t\t\t\t(special || deferred.resolveWith)(that, args);\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\n\t\t\t\t\t\t\t\t\t// Only normal processors (resolve) catch and reject exceptions\n\t\t\t\t\t\t\t\t\tprocess = special ?\n\t\t\t\t\t\t\t\t\t\tmightThrow :\n\t\t\t\t\t\t\t\t\t\tfunction () {\n\t\t\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\t\t\tmightThrow();\n\t\t\t\t\t\t\t\t\t\t\t} catch (e) {\n\n\t\t\t\t\t\t\t\t\t\t\t\tif (jQuery.Deferred.exceptionHook) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tjQuery.Deferred.exceptionHook(e,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tprocess.error);\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.4.1\n\t\t\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-61\n\t\t\t\t\t\t\t\t\t\t\t\t// Ignore post-resolution exceptions\n\t\t\t\t\t\t\t\t\t\t\t\tif (depth + 1 >= maxDepth) {\n\n\t\t\t\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\t\t\t\tif (handler !== Thrower) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\targs = [e];\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\t\tdeferred.rejectWith(that, args);\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.1\n\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-57\n\t\t\t\t\t\t\t\t// Re-resolve promises immediately to dodge false rejection from\n\t\t\t\t\t\t\t\t// subsequent errors\n\t\t\t\t\t\t\t\tif (depth) {\n\t\t\t\t\t\t\t\t\tprocess();\n\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t// Call an optional hook to record the error, in case of exception\n\t\t\t\t\t\t\t\t\t// since it's otherwise lost when execution goes async\n\t\t\t\t\t\t\t\t\tif (jQuery.Deferred.getErrorHook) {\n\t\t\t\t\t\t\t\t\t\tprocess.error = jQuery.Deferred.getErrorHook();\n\n\t\t\t\t\t\t\t\t\t\t// The deprecated alias of the above. While the name suggests\n\t\t\t\t\t\t\t\t\t\t// returning the stack, not an error instance, jQuery just passes\n\t\t\t\t\t\t\t\t\t\t// it directly to `console.warn` so both will work; an instance\n\t\t\t\t\t\t\t\t\t\t// just better cooperates with source maps.\n\t\t\t\t\t\t\t\t\t} else if (jQuery.Deferred.getStackHook) {\n\t\t\t\t\t\t\t\t\t\tprocess.error = jQuery.Deferred.getStackHook();\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\twindow.setTimeout(process);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn jQuery.Deferred(function (newDefer) {\n\n\t\t\t\t\t\t\t// progress_handlers.add( ... )\n\t\t\t\t\t\t\ttuples[0][3].add(\n\t\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\t\tisFunction(onProgress) ?\n\t\t\t\t\t\t\t\t\t\tonProgress :\n\t\t\t\t\t\t\t\t\t\tIdentity,\n\t\t\t\t\t\t\t\t\tnewDefer.notifyWith\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t// fulfilled_handlers.add( ... )\n\t\t\t\t\t\t\ttuples[1][3].add(\n\t\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\t\tisFunction(onFulfilled) ?\n\t\t\t\t\t\t\t\t\t\tonFulfilled :\n\t\t\t\t\t\t\t\t\t\tIdentity\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t// rejected_handlers.add( ... )\n\t\t\t\t\t\t\ttuples[2][3].add(\n\t\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\t\tisFunction(onRejected) ?\n\t\t\t\t\t\t\t\t\t\tonRejected :\n\t\t\t\t\t\t\t\t\t\tThrower\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}).promise();\n\t\t\t\t\t},\n\n\t\t\t\t\t// Get a promise for this deferred\n\t\t\t\t\t// If obj is provided, the promise aspect is added to the object\n\t\t\t\t\tpromise: function (obj) {\n\t\t\t\t\t\treturn obj != null ? jQuery.extend(obj, promise) : promise;\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tdeferred = {};\n\n\t\t\t// Add list-specific methods\n\t\t\tjQuery.each(tuples, function (i, tuple) {\n\t\t\t\tvar list = tuple[2],\n\t\t\t\t\tstateString = tuple[5];\n\n\t\t\t\t// promise.progress = list.add\n\t\t\t\t// promise.done = list.add\n\t\t\t\t// promise.fail = list.add\n\t\t\t\tpromise[tuple[1]] = list.add;\n\n\t\t\t\t// Handle state\n\t\t\t\tif (stateString) {\n\t\t\t\t\tlist.add(\n\t\t\t\t\t\tfunction () {\n\n\t\t\t\t\t\t\t// state = \"resolved\" (i.e., fulfilled)\n\t\t\t\t\t\t\t// state = \"rejected\"\n\t\t\t\t\t\t\tstate = stateString;\n\t\t\t\t\t\t},\n\n\t\t\t\t\t\t// rejected_callbacks.disable\n\t\t\t\t\t\t// fulfilled_callbacks.disable\n\t\t\t\t\t\ttuples[3 - i][2].disable,\n\n\t\t\t\t\t\t// rejected_handlers.disable\n\t\t\t\t\t\t// fulfilled_handlers.disable\n\t\t\t\t\t\ttuples[3 - i][3].disable,\n\n\t\t\t\t\t\t// progress_callbacks.lock\n\t\t\t\t\t\ttuples[0][2].lock,\n\n\t\t\t\t\t\t// progress_handlers.lock\n\t\t\t\t\t\ttuples[0][3].lock\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\t// progress_handlers.fire\n\t\t\t\t// fulfilled_handlers.fire\n\t\t\t\t// rejected_handlers.fire\n\t\t\t\tlist.add(tuple[3].fire);\n\n\t\t\t\t// deferred.notify = function() { deferred.notifyWith(...) }\n\t\t\t\t// deferred.resolve = function() { deferred.resolveWith(...) }\n\t\t\t\t// deferred.reject = function() { deferred.rejectWith(...) }\n\t\t\t\tdeferred[tuple[0]] = function () {\n\t\t\t\t\tdeferred[tuple[0] + \"With\"](this === deferred ? undefined : this, arguments);\n\t\t\t\t\treturn this;\n\t\t\t\t};\n\n\t\t\t\t// deferred.notifyWith = list.fireWith\n\t\t\t\t// deferred.resolveWith = list.fireWith\n\t\t\t\t// deferred.rejectWith = list.fireWith\n\t\t\t\tdeferred[tuple[0] + \"With\"] = list.fireWith;\n\t\t\t});\n\n\t\t\t// Make the deferred a promise\n\t\t\tpromise.promise(deferred);\n\n\t\t\t// Call given func if any\n\t\t\tif (func) {\n\t\t\t\tfunc.call(deferred, deferred);\n\t\t\t}\n\n\t\t\t// All done!\n\t\t\treturn deferred;\n\t\t},\n\n\t\t// Deferred helper\n\t\twhen: function (singleValue) {\n\t\t\tvar\n\n\t\t\t\t// count of uncompleted subordinates\n\t\t\t\tremaining = arguments.length,\n\n\t\t\t\t// count of unprocessed arguments\n\t\t\t\ti = remaining,\n\n\t\t\t\t// subordinate fulfillment data\n\t\t\t\tresolveContexts = Array(i),\n\t\t\t\tresolveValues = slice.call(arguments),\n\n\t\t\t\t// the primary Deferred\n\t\t\t\tprimary = jQuery.Deferred(),\n\n\t\t\t\t// subordinate callback factory\n\t\t\t\tupdateFunc = function (i) {\n\t\t\t\t\treturn function (value) {\n\t\t\t\t\t\tresolveContexts[i] = this;\n\t\t\t\t\t\tresolveValues[i] = arguments.length > 1 ? slice.call(arguments) : value;\n\t\t\t\t\t\tif (!(--remaining)) {\n\t\t\t\t\t\t\tprimary.resolveWith(resolveContexts, resolveValues);\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t};\n\n\t\t\t// Single- and empty arguments are adopted like Promise.resolve\n\t\t\tif (remaining <= 1) {\n\t\t\t\tadoptValue(singleValue, primary.done(updateFunc(i)).resolve, primary.reject,\n\t\t\t\t\t!remaining);\n\n\t\t\t\t// Use .then() to unwrap secondary thenables (cf. gh-3000)\n\t\t\t\tif (primary.state() === \"pending\" ||\n\t\t\t\t\tisFunction(resolveValues[i] && resolveValues[i].then)) {\n\n\t\t\t\t\treturn primary.then();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Multiple arguments are aggregated like Promise.all array elements\n\t\t\twhile (i--) {\n\t\t\t\tadoptValue(resolveValues[i], updateFunc(i), primary.reject);\n\t\t\t}\n\n\t\t\treturn primary.promise();\n\t\t}\n\t});\n\n\n\t// These usually indicate a programmer mistake during development,\n\t// warn about them ASAP rather than swallowing them by default.\n\tvar rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;\n\n\t// If `jQuery.Deferred.getErrorHook` is defined, `asyncError` is an error\n\t// captured before the async barrier to get the original error cause\n\t// which may otherwise be hidden.\n\tjQuery.Deferred.exceptionHook = function (error, asyncError) {\n\n\t\t// Support: IE 8 - 9 only\n\t\t// Console exists when dev tools are open, which can happen at any time\n\t\tif (window.console && window.console.warn && error && rerrorNames.test(error.name)) {\n\t\t\twindow.console.warn(\"jQuery.Deferred exception: \" + error.message,\n\t\t\t\terror.stack, asyncError);\n\t\t}\n\t};\n\n\n\n\n\tjQuery.readyException = function (error) {\n\t\twindow.setTimeout(function () {\n\t\t\tthrow error;\n\t\t});\n\t};\n\n\n\n\n\t// The deferred used on DOM ready\n\tvar readyList = jQuery.Deferred();\n\n\tjQuery.fn.ready = function (fn) {\n\n\t\treadyList\n\t\t\t.then(fn)\n\n\t\t\t// Wrap jQuery.readyException in a function so that the lookup\n\t\t\t// happens at the time of error handling instead of callback\n\t\t\t// registration.\n\t\t\t.catch(function (error) {\n\t\t\t\tjQuery.readyException(error);\n\t\t\t});\n\n\t\treturn this;\n\t};\n\n\tjQuery.extend({\n\n\t\t// Is the DOM ready to be used? Set to true once it occurs.\n\t\tisReady: false,\n\n\t\t// A counter to track how many items to wait for before\n\t\t// the ready event fires. See trac-6781\n\t\treadyWait: 1,\n\n\t\t// Handle when the DOM is ready\n\t\tready: function (wait) {\n\n\t\t\t// Abort if there are pending holds or we're already ready\n\t\t\tif (wait === true ? --jQuery.readyWait : jQuery.isReady) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Remember that the DOM is ready\n\t\t\tjQuery.isReady = true;\n\n\t\t\t// If a normal DOM Ready event fired, decrement, and wait if need be\n\t\t\tif (wait !== true && --jQuery.readyWait > 0) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If there are functions bound, to execute\n\t\t\treadyList.resolveWith(document, [jQuery]);\n\t\t}\n\t});\n\n\tjQuery.ready.then = readyList.then;\n\n\t// The ready event handler and self cleanup method\n\tfunction completed() {\n\t\tdocument.removeEventListener(\"DOMContentLoaded\", completed);\n\t\twindow.removeEventListener(\"load\", completed);\n\t\tjQuery.ready();\n\t}\n\n\t// Catch cases where $(document).ready() is called\n\t// after the browser event has already occurred.\n\t// Support: IE <=9 - 10 only\n\t// Older IE sometimes signals \"interactive\" too soon\n\tif (document.readyState === \"complete\" ||\n\t\t(document.readyState !== \"loading\" && !document.documentElement.doScroll)) {\n\n\t\t// Handle it asynchronously to allow scripts the opportunity to delay ready\n\t\twindow.setTimeout(jQuery.ready);\n\n\t} else {\n\n\t\t// Use the handy event callback\n\t\tdocument.addEventListener(\"DOMContentLoaded\", completed);\n\n\t\t// A fallback to window.onload, that will always work\n\t\twindow.addEventListener(\"load\", completed);\n\t}\n\n\n\n\n\t// Multifunctional method to get and set values of a collection\n\t// The value/s can optionally be executed if it's a function\n\tvar access = function (elems, fn, key, value, chainable, emptyGet, raw) {\n\t\tvar i = 0,\n\t\t\tlen = elems.length,\n\t\t\tbulk = key == null;\n\n\t\t// Sets many values\n\t\tif (toType(key) === \"object\") {\n\t\t\tchainable = true;\n\t\t\tfor (i in key) {\n\t\t\t\taccess(elems, fn, i, key[i], true, emptyGet, raw);\n\t\t\t}\n\n\t\t\t// Sets one value\n\t\t} else if (value !== undefined) {\n\t\t\tchainable = true;\n\n\t\t\tif (!isFunction(value)) {\n\t\t\t\traw = true;\n\t\t\t}\n\n\t\t\tif (bulk) {\n\n\t\t\t\t// Bulk operations run against the entire set\n\t\t\t\tif (raw) {\n\t\t\t\t\tfn.call(elems, value);\n\t\t\t\t\tfn = null;\n\n\t\t\t\t\t// ...except when executing function values\n\t\t\t\t} else {\n\t\t\t\t\tbulk = fn;\n\t\t\t\t\tfn = function (elem, _key, value) {\n\t\t\t\t\t\treturn bulk.call(jQuery(elem), value);\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (fn) {\n\t\t\t\tfor (; i < len; i++) {\n\t\t\t\t\tfn(\n\t\t\t\t\t\telems[i], key, raw ?\n\t\t\t\t\t\tvalue :\n\t\t\t\t\t\tvalue.call(elems[i], i, fn(elems[i], key))\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (chainable) {\n\t\t\treturn elems;\n\t\t}\n\n\t\t// Gets\n\t\tif (bulk) {\n\t\t\treturn fn.call(elems);\n\t\t}\n\n\t\treturn len ? fn(elems[0], key) : emptyGet;\n\t};\n\n\n\t// Matches dashed string for camelizing\n\tvar rmsPrefix = /^-ms-/,\n\t\trdashAlpha = /-([a-z])/g;\n\n\t// Used by camelCase as callback to replace()\n\tfunction fcamelCase(_all, letter) {\n\t\treturn letter.toUpperCase();\n\t}\n\n\t// Convert dashed to camelCase; used by the css and data modules\n\t// Support: IE <=9 - 11, Edge 12 - 15\n\t// Microsoft forgot to hump their vendor prefix (trac-9572)\n\tfunction camelCase(string) {\n\t\treturn string.replace(rmsPrefix, \"ms-\").replace(rdashAlpha, fcamelCase);\n\t}\n\tvar acceptData = function (owner) {\n\n\t\t// Accepts only:\n\t\t//  - Node\n\t\t//    - Node.ELEMENT_NODE\n\t\t//    - Node.DOCUMENT_NODE\n\t\t//  - Object\n\t\t//    - Any\n\t\treturn owner.nodeType === 1 || owner.nodeType === 9 || !(+owner.nodeType);\n\t};\n\n\n\n\n\tfunction Data() {\n\t\tthis.expando = jQuery.expando + Data.uid++;\n\t}\n\n\tData.uid = 1;\n\n\tData.prototype = {\n\n\t\tcache: function (owner) {\n\n\t\t\t// Check if the owner object already has a cache\n\t\t\tvar value = owner[this.expando];\n\n\t\t\t// If not, create one\n\t\t\tif (!value) {\n\t\t\t\tvalue = {};\n\n\t\t\t\t// We can accept data for non-element nodes in modern browsers,\n\t\t\t\t// but we should not, see trac-8335.\n\t\t\t\t// Always return an empty object.\n\t\t\t\tif (acceptData(owner)) {\n\n\t\t\t\t\t// If it is a node unlikely to be stringify-ed or looped over\n\t\t\t\t\t// use plain assignment\n\t\t\t\t\tif (owner.nodeType) {\n\t\t\t\t\t\towner[this.expando] = value;\n\n\t\t\t\t\t\t// Otherwise secure it in a non-enumerable property\n\t\t\t\t\t\t// configurable must be true to allow the property to be\n\t\t\t\t\t\t// deleted when data is removed\n\t\t\t\t\t} else {\n\t\t\t\t\t\tObject.defineProperty(owner, this.expando, {\n\t\t\t\t\t\t\tvalue: value,\n\t\t\t\t\t\t\tconfigurable: true\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn value;\n\t\t},\n\t\tset: function (owner, data, value) {\n\t\t\tvar prop,\n\t\t\t\tcache = this.cache(owner);\n\n\t\t\t// Handle: [ owner, key, value ] args\n\t\t\t// Always use camelCase key (gh-2257)\n\t\t\tif (typeof data === \"string\") {\n\t\t\t\tcache[camelCase(data)] = value;\n\n\t\t\t\t// Handle: [ owner, { properties } ] args\n\t\t\t} else {\n\n\t\t\t\t// Copy the properties one-by-one to the cache object\n\t\t\t\tfor (prop in data) {\n\t\t\t\t\tcache[camelCase(prop)] = data[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn cache;\n\t\t},\n\t\tget: function (owner, key) {\n\t\t\treturn key === undefined ?\n\t\t\t\tthis.cache(owner) :\n\n\t\t\t\t// Always use camelCase key (gh-2257)\n\t\t\t\towner[this.expando] && owner[this.expando][camelCase(key)];\n\t\t},\n\t\taccess: function (owner, key, value) {\n\n\t\t\t// In cases where either:\n\t\t\t//\n\t\t\t//   1. No key was specified\n\t\t\t//   2. A string key was specified, but no value provided\n\t\t\t//\n\t\t\t// Take the \"read\" path and allow the get method to determine\n\t\t\t// which value to return, respectively either:\n\t\t\t//\n\t\t\t//   1. The entire cache object\n\t\t\t//   2. The data stored at the key\n\t\t\t//\n\t\t\tif (key === undefined ||\n\t\t\t\t((key && typeof key === \"string\") && value === undefined)) {\n\n\t\t\t\treturn this.get(owner, key);\n\t\t\t}\n\n\t\t\t// When the key is not a string, or both a key and value\n\t\t\t// are specified, set or extend (existing objects) with either:\n\t\t\t//\n\t\t\t//   1. An object of properties\n\t\t\t//   2. A key and value\n\t\t\t//\n\t\t\tthis.set(owner, key, value);\n\n\t\t\t// Since the \"set\" path can have two possible entry points\n\t\t\t// return the expected data based on which path was taken[*]\n\t\t\treturn value !== undefined ? value : key;\n\t\t},\n\t\tremove: function (owner, key) {\n\t\t\tvar i,\n\t\t\t\tcache = owner[this.expando];\n\n\t\t\tif (cache === undefined) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (key !== undefined) {\n\n\t\t\t\t// Support array or space separated string of keys\n\t\t\t\tif (Array.isArray(key)) {\n\n\t\t\t\t\t// If key is an array of keys...\n\t\t\t\t\t// We always set camelCase keys, so remove that.\n\t\t\t\t\tkey = key.map(camelCase);\n\t\t\t\t} else {\n\t\t\t\t\tkey = camelCase(key);\n\n\t\t\t\t\t// If a key with the spaces exists, use it.\n\t\t\t\t\t// Otherwise, create an array by matching non-whitespace\n\t\t\t\t\tkey = key in cache ?\n\t\t\t\t\t\t[key] :\n\t\t\t\t\t\t(key.match(rnothtmlwhite) || []);\n\t\t\t\t}\n\n\t\t\t\ti = key.length;\n\n\t\t\t\twhile (i--) {\n\t\t\t\t\tdelete cache[key[i]];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove the expando if there's no more data\n\t\t\tif (key === undefined || jQuery.isEmptyObject(cache)) {\n\n\t\t\t\t// Support: Chrome <=35 - 45\n\t\t\t\t// Webkit & Blink performance suffers when deleting properties\n\t\t\t\t// from DOM nodes, so set to undefined instead\n\t\t\t\t// https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted)\n\t\t\t\tif (owner.nodeType) {\n\t\t\t\t\towner[this.expando] = undefined;\n\t\t\t\t} else {\n\t\t\t\t\tdelete owner[this.expando];\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\thasData: function (owner) {\n\t\t\tvar cache = owner[this.expando];\n\t\t\treturn cache !== undefined && !jQuery.isEmptyObject(cache);\n\t\t}\n\t};\n\tvar dataPriv = new Data();\n\n\tvar dataUser = new Data();\n\n\n\n\t//\tImplementation Summary\n\t//\n\t//\t1. Enforce API surface and semantic compatibility with 1.9.x branch\n\t//\t2. Improve the module's maintainability by reducing the storage\n\t//\t\tpaths to a single mechanism.\n\t//\t3. Use the same single mechanism to support \"private\" and \"user\" data.\n\t//\t4. _Never_ expose \"private\" data to user code (TODO: Drop _data, _removeData)\n\t//\t5. Avoid exposing implementation details on user objects (eg. expando properties)\n\t//\t6. Provide a clear path for implementation upgrade to WeakMap in 2014\n\n\tvar rbrace = /^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,\n\t\trmultiDash = /[A-Z]/g;\n\n\tfunction getData(data) {\n\t\tif (data === \"true\") {\n\t\t\treturn true;\n\t\t}\n\n\t\tif (data === \"false\") {\n\t\t\treturn false;\n\t\t}\n\n\t\tif (data === \"null\") {\n\t\t\treturn null;\n\t\t}\n\n\t\t// Only convert to a number if it doesn't change the string\n\t\tif (data === +data + \"\") {\n\t\t\treturn +data;\n\t\t}\n\n\t\tif (rbrace.test(data)) {\n\t\t\treturn JSON.parse(data);\n\t\t}\n\n\t\treturn data;\n\t}\n\n\tfunction dataAttr(elem, key, data) {\n\t\tvar name;\n\n\t\t// If nothing was found internally, try to fetch any\n\t\t// data from the HTML5 data-* attribute\n\t\tif (data === undefined && elem.nodeType === 1) {\n\t\t\tname = \"data-\" + key.replace(rmultiDash, \"-$&\").toLowerCase();\n\t\t\tdata = elem.getAttribute(name);\n\n\t\t\tif (typeof data === \"string\") {\n\t\t\t\ttry {\n\t\t\t\t\tdata = getData(data);\n\t\t\t\t} catch (e) { }\n\n\t\t\t\t// Make sure we set the data so it isn't changed later\n\t\t\t\tdataUser.set(elem, key, data);\n\t\t\t} else {\n\t\t\t\tdata = undefined;\n\t\t\t}\n\t\t}\n\t\treturn data;\n\t}\n\n\tjQuery.extend({\n\t\thasData: function (elem) {\n\t\t\treturn dataUser.hasData(elem) || dataPriv.hasData(elem);\n\t\t},\n\n\t\tdata: function (elem, name, data) {\n\t\t\treturn dataUser.access(elem, name, data);\n\t\t},\n\n\t\tremoveData: function (elem, name) {\n\t\t\tdataUser.remove(elem, name);\n\t\t},\n\n\t\t// TODO: Now that all calls to _data and _removeData have been replaced\n\t\t// with direct calls to dataPriv methods, these can be deprecated.\n\t\t_data: function (elem, name, data) {\n\t\t\treturn dataPriv.access(elem, name, data);\n\t\t},\n\n\t\t_removeData: function (elem, name) {\n\t\t\tdataPriv.remove(elem, name);\n\t\t}\n\t});\n\n\tjQuery.fn.extend({\n\t\tdata: function (key, value) {\n\t\t\tvar i, name, data,\n\t\t\t\telem = this[0],\n\t\t\t\tattrs = elem && elem.attributes;\n\n\t\t\t// Gets all values\n\t\t\tif (key === undefined) {\n\t\t\t\tif (this.length) {\n\t\t\t\t\tdata = dataUser.get(elem);\n\n\t\t\t\t\tif (elem.nodeType === 1 && !dataPriv.get(elem, \"hasDataAttrs\")) {\n\t\t\t\t\t\ti = attrs.length;\n\t\t\t\t\t\twhile (i--) {\n\n\t\t\t\t\t\t\t// Support: IE 11 only\n\t\t\t\t\t\t\t// The attrs elements can be null (trac-14894)\n\t\t\t\t\t\t\tif (attrs[i]) {\n\t\t\t\t\t\t\t\tname = attrs[i].name;\n\t\t\t\t\t\t\t\tif (name.indexOf(\"data-\") === 0) {\n\t\t\t\t\t\t\t\t\tname = camelCase(name.slice(5));\n\t\t\t\t\t\t\t\t\tdataAttr(elem, name, data[name]);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdataPriv.set(elem, \"hasDataAttrs\", true);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn data;\n\t\t\t}\n\n\t\t\t// Sets multiple values\n\t\t\tif (typeof key === \"object\") {\n\t\t\t\treturn this.each(function () {\n\t\t\t\t\tdataUser.set(this, key);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn access(this, function (value) {\n\t\t\t\tvar data;\n\n\t\t\t\t// The calling jQuery object (element matches) is not empty\n\t\t\t\t// (and therefore has an element appears at this[ 0 ]) and the\n\t\t\t\t// `value` parameter was not undefined. An empty jQuery object\n\t\t\t\t// will result in `undefined` for elem = this[ 0 ] which will\n\t\t\t\t// throw an exception if an attempt to read a data cache is made.\n\t\t\t\tif (elem && value === undefined) {\n\n\t\t\t\t\t// Attempt to get data from the cache\n\t\t\t\t\t// The key will always be camelCased in Data\n\t\t\t\t\tdata = dataUser.get(elem, key);\n\t\t\t\t\tif (data !== undefined) {\n\t\t\t\t\t\treturn data;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Attempt to \"discover\" the data in\n\t\t\t\t\t// HTML5 custom data-* attrs\n\t\t\t\t\tdata = dataAttr(elem, key);\n\t\t\t\t\tif (data !== undefined) {\n\t\t\t\t\t\treturn data;\n\t\t\t\t\t}\n\n\t\t\t\t\t// We tried really hard, but the data doesn't exist.\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Set the data...\n\t\t\t\tthis.each(function () {\n\n\t\t\t\t\t// We always store the camelCased key\n\t\t\t\t\tdataUser.set(this, key, value);\n\t\t\t\t});\n\t\t\t}, null, value, arguments.length > 1, null, true);\n\t\t},\n\n\t\tremoveData: function (key) {\n\t\t\treturn this.each(function () {\n\t\t\t\tdataUser.remove(this, key);\n\t\t\t});\n\t\t}\n\t});\n\n\n\tjQuery.extend({\n\t\tqueue: function (elem, type, data) {\n\t\t\tvar queue;\n\n\t\t\tif (elem) {\n\t\t\t\ttype = (type || \"fx\") + \"queue\";\n\t\t\t\tqueue = dataPriv.get(elem, type);\n\n\t\t\t\t// Speed up dequeue by getting out quickly if this is just a lookup\n\t\t\t\tif (data) {\n\t\t\t\t\tif (!queue || Array.isArray(data)) {\n\t\t\t\t\t\tqueue = dataPriv.access(elem, type, jQuery.makeArray(data));\n\t\t\t\t\t} else {\n\t\t\t\t\t\tqueue.push(data);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn queue || [];\n\t\t\t}\n\t\t},\n\n\t\tdequeue: function (elem, type) {\n\t\t\ttype = type || \"fx\";\n\n\t\t\tvar queue = jQuery.queue(elem, type),\n\t\t\t\tstartLength = queue.length,\n\t\t\t\tfn = queue.shift(),\n\t\t\t\thooks = jQuery._queueHooks(elem, type),\n\t\t\t\tnext = function () {\n\t\t\t\t\tjQuery.dequeue(elem, type);\n\t\t\t\t};\n\n\t\t\t// If the fx queue is dequeued, always remove the progress sentinel\n\t\t\tif (fn === \"inprogress\") {\n\t\t\t\tfn = queue.shift();\n\t\t\t\tstartLength--;\n\t\t\t}\n\n\t\t\tif (fn) {\n\n\t\t\t\t// Add a progress sentinel to prevent the fx queue from being\n\t\t\t\t// automatically dequeued\n\t\t\t\tif (type === \"fx\") {\n\t\t\t\t\tqueue.unshift(\"inprogress\");\n\t\t\t\t}\n\n\t\t\t\t// Clear up the last queue stop function\n\t\t\t\tdelete hooks.stop;\n\t\t\t\tfn.call(elem, next, hooks);\n\t\t\t}\n\n\t\t\tif (!startLength && hooks) {\n\t\t\t\thooks.empty.fire();\n\t\t\t}\n\t\t},\n\n\t\t// Not public - generate a queueHooks object, or return the current one\n\t\t_queueHooks: function (elem, type) {\n\t\t\tvar key = type + \"queueHooks\";\n\t\t\treturn dataPriv.get(elem, key) || dataPriv.access(elem, key, {\n\t\t\t\tempty: jQuery.Callbacks(\"once memory\").add(function () {\n\t\t\t\t\tdataPriv.remove(elem, [type + \"queue\", key]);\n\t\t\t\t})\n\t\t\t});\n\t\t}\n\t});\n\n\tjQuery.fn.extend({\n\t\tqueue: function (type, data) {\n\t\t\tvar setter = 2;\n\n\t\t\tif (typeof type !== \"string\") {\n\t\t\t\tdata = type;\n\t\t\t\ttype = \"fx\";\n\t\t\t\tsetter--;\n\t\t\t}\n\n\t\t\tif (arguments.length < setter) {\n\t\t\t\treturn jQuery.queue(this[0], type);\n\t\t\t}\n\n\t\t\treturn data === undefined ?\n\t\t\t\tthis :\n\t\t\t\tthis.each(function () {\n\t\t\t\t\tvar queue = jQuery.queue(this, type, data);\n\n\t\t\t\t\t// Ensure a hooks for this queue\n\t\t\t\t\tjQuery._queueHooks(this, type);\n\n\t\t\t\t\tif (type === \"fx\" && queue[0] !== \"inprogress\") {\n\t\t\t\t\t\tjQuery.dequeue(this, type);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t},\n\t\tdequeue: function (type) {\n\t\t\treturn this.each(function () {\n\t\t\t\tjQuery.dequeue(this, type);\n\t\t\t});\n\t\t},\n\t\tclearQueue: function (type) {\n\t\t\treturn this.queue(type || \"fx\", []);\n\t\t},\n\n\t\t// Get a promise resolved when queues of a certain type\n\t\t// are emptied (fx is the type by default)\n\t\tpromise: function (type, obj) {\n\t\t\tvar tmp,\n\t\t\t\tcount = 1,\n\t\t\t\tdefer = jQuery.Deferred(),\n\t\t\t\telements = this,\n\t\t\t\ti = this.length,\n\t\t\t\tresolve = function () {\n\t\t\t\t\tif (!(--count)) {\n\t\t\t\t\t\tdefer.resolveWith(elements, [elements]);\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\tif (typeof type !== \"string\") {\n\t\t\t\tobj = type;\n\t\t\t\ttype = undefined;\n\t\t\t}\n\t\t\ttype = type || \"fx\";\n\n\t\t\twhile (i--) {\n\t\t\t\ttmp = dataPriv.get(elements[i], type + \"queueHooks\");\n\t\t\t\tif (tmp && tmp.empty) {\n\t\t\t\t\tcount++;\n\t\t\t\t\ttmp.empty.add(resolve);\n\t\t\t\t}\n\t\t\t}\n\t\t\tresolve();\n\t\t\treturn defer.promise(obj);\n\t\t}\n\t});\n\tvar pnum = (/[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/).source;\n\n\tvar rcssNum = new RegExp(\"^(?:([+-])=|)(\" + pnum + \")([a-z%]*)$\", \"i\");\n\n\n\tvar cssExpand = [\"Top\", \"Right\", \"Bottom\", \"Left\"];\n\n\tvar documentElement = document.documentElement;\n\n\n\n\tvar isAttached = function (elem) {\n\t\treturn jQuery.contains(elem.ownerDocument, elem);\n\t},\n\t\tcomposed = { composed: true };\n\n\t// Support: IE 9 - 11+, Edge 12 - 18+, iOS 10.0 - 10.2 only\n\t// Check attachment across shadow DOM boundaries when possible (gh-3504)\n\t// Support: iOS 10.0-10.2 only\n\t// Early iOS 10 versions support `attachShadow` but not `getRootNode`,\n\t// leading to errors. We need to check for `getRootNode`.\n\tif (documentElement.getRootNode) {\n\t\tisAttached = function (elem) {\n\t\t\treturn jQuery.contains(elem.ownerDocument, elem) ||\n\t\t\t\telem.getRootNode(composed) === elem.ownerDocument;\n\t\t};\n\t}\n\tvar isHiddenWithinTree = function (elem, el) {\n\n\t\t// isHiddenWithinTree might be called from jQuery#filter function;\n\t\t// in that case, element will be second argument\n\t\telem = el || elem;\n\n\t\t// Inline style trumps all\n\t\treturn elem.style.display === \"none\" ||\n\t\t\telem.style.display === \"\" &&\n\n\t\t\t// Otherwise, check computed style\n\t\t\t// Support: Firefox <=43 - 45\n\t\t\t// Disconnected elements can have computed display: none, so first confirm that elem is\n\t\t\t// in the document.\n\t\t\tisAttached(elem) &&\n\n\t\t\tjQuery.css(elem, \"display\") === \"none\";\n\t};\n\n\n\n\tfunction adjustCSS(elem, prop, valueParts, tween) {\n\t\tvar adjusted, scale,\n\t\t\tmaxIterations = 20,\n\t\t\tcurrentValue = tween ?\n\t\t\t\tfunction () {\n\t\t\t\t\treturn tween.cur();\n\t\t\t\t} :\n\t\t\t\tfunction () {\n\t\t\t\t\treturn jQuery.css(elem, prop, \"\");\n\t\t\t\t},\n\t\t\tinitial = currentValue(),\n\t\t\tunit = valueParts && valueParts[3] || (jQuery.cssNumber[prop] ? \"\" : \"px\"),\n\n\t\t\t// Starting value computation is required for potential unit mismatches\n\t\t\tinitialInUnit = elem.nodeType &&\n\t\t\t\t(jQuery.cssNumber[prop] || unit !== \"px\" && +initial) &&\n\t\t\t\trcssNum.exec(jQuery.css(elem, prop));\n\n\t\tif (initialInUnit && initialInUnit[3] !== unit) {\n\n\t\t\t// Support: Firefox <=54\n\t\t\t// Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144)\n\t\t\tinitial = initial / 2;\n\n\t\t\t// Trust units reported by jQuery.css\n\t\t\tunit = unit || initialInUnit[3];\n\n\t\t\t// Iteratively approximate from a nonzero starting point\n\t\t\tinitialInUnit = +initial || 1;\n\n\t\t\twhile (maxIterations--) {\n\n\t\t\t\t// Evaluate and update our best guess (doubling guesses that zero out).\n\t\t\t\t// Finish if the scale equals or crosses 1 (making the old*new product non-positive).\n\t\t\t\tjQuery.style(elem, prop, initialInUnit + unit);\n\t\t\t\tif ((1 - scale) * (1 - (scale = currentValue() / initial || 0.5)) <= 0) {\n\t\t\t\t\tmaxIterations = 0;\n\t\t\t\t}\n\t\t\t\tinitialInUnit = initialInUnit / scale;\n\n\t\t\t}\n\n\t\t\tinitialInUnit = initialInUnit * 2;\n\t\t\tjQuery.style(elem, prop, initialInUnit + unit);\n\n\t\t\t// Make sure we update the tween properties later on\n\t\t\tvalueParts = valueParts || [];\n\t\t}\n\n\t\tif (valueParts) {\n\t\t\tinitialInUnit = +initialInUnit || +initial || 0;\n\n\t\t\t// Apply relative offset (+=/-=) if specified\n\t\t\tadjusted = valueParts[1] ?\n\t\t\t\tinitialInUnit + (valueParts[1] + 1) * valueParts[2] :\n\t\t\t\t+valueParts[2];\n\t\t\tif (tween) {\n\t\t\t\ttween.unit = unit;\n\t\t\t\ttween.start = initialInUnit;\n\t\t\t\ttween.end = adjusted;\n\t\t\t}\n\t\t}\n\t\treturn adjusted;\n\t}\n\n\n\tvar defaultDisplayMap = {};\n\n\tfunction getDefaultDisplay(elem) {\n\t\tvar temp,\n\t\t\tdoc = elem.ownerDocument,\n\t\t\tnodeName = elem.nodeName,\n\t\t\tdisplay = defaultDisplayMap[nodeName];\n\n\t\tif (display) {\n\t\t\treturn display;\n\t\t}\n\n\t\ttemp = doc.body.appendChild(doc.createElement(nodeName));\n\t\tdisplay = jQuery.css(temp, \"display\");\n\n\t\ttemp.parentNode.removeChild(temp);\n\n\t\tif (display === \"none\") {\n\t\t\tdisplay = \"block\";\n\t\t}\n\t\tdefaultDisplayMap[nodeName] = display;\n\n\t\treturn display;\n\t}\n\n\tfunction showHide(elements, show) {\n\t\tvar display, elem,\n\t\t\tvalues = [],\n\t\t\tindex = 0,\n\t\t\tlength = elements.length;\n\n\t\t// Determine new display value for elements that need to change\n\t\tfor (; index < length; index++) {\n\t\t\telem = elements[index];\n\t\t\tif (!elem.style) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tdisplay = elem.style.display;\n\t\t\tif (show) {\n\n\t\t\t\t// Since we force visibility upon cascade-hidden elements, an immediate (and slow)\n\t\t\t\t// check is required in this first loop unless we have a nonempty display value (either\n\t\t\t\t// inline or about-to-be-restored)\n\t\t\t\tif (display === \"none\") {\n\t\t\t\t\tvalues[index] = dataPriv.get(elem, \"display\") || null;\n\t\t\t\t\tif (!values[index]) {\n\t\t\t\t\t\telem.style.display = \"\";\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (elem.style.display === \"\" && isHiddenWithinTree(elem)) {\n\t\t\t\t\tvalues[index] = getDefaultDisplay(elem);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (display !== \"none\") {\n\t\t\t\t\tvalues[index] = \"none\";\n\n\t\t\t\t\t// Remember what we're overwriting\n\t\t\t\t\tdataPriv.set(elem, \"display\", display);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Set the display of the elements in a second loop to avoid constant reflow\n\t\tfor (index = 0; index < length; index++) {\n\t\t\tif (values[index] != null) {\n\t\t\t\telements[index].style.display = values[index];\n\t\t\t}\n\t\t}\n\n\t\treturn elements;\n\t}\n\n\tjQuery.fn.extend({\n\t\tshow: function () {\n\t\t\treturn showHide(this, true);\n\t\t},\n\t\thide: function () {\n\t\t\treturn showHide(this);\n\t\t},\n\t\ttoggle: function (state) {\n\t\t\tif (typeof state === \"boolean\") {\n\t\t\t\treturn state ? this.show() : this.hide();\n\t\t\t}\n\n\t\t\treturn this.each(function () {\n\t\t\t\tif (isHiddenWithinTree(this)) {\n\t\t\t\t\tjQuery(this).show();\n\t\t\t\t} else {\n\t\t\t\t\tjQuery(this).hide();\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t});\n\tvar rcheckableType = (/^(?:checkbox|radio)$/i);\n\n\tvar rtagName = (/<([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]*)/i);\n\n\tvar rscriptType = (/^$|^module$|\\/(?:java|ecma)script/i);\n\n\n\n\t(function () {\n\t\tvar fragment = document.createDocumentFragment(),\n\t\t\tdiv = fragment.appendChild(document.createElement(\"div\")),\n\t\t\tinput = document.createElement(\"input\");\n\n\t\t// Support: Android 4.0 - 4.3 only\n\t\t// Check state lost if the name is set (trac-11217)\n\t\t// Support: Windows Web Apps (WWA)\n\t\t// `name` and `type` must use .setAttribute for WWA (trac-14901)\n\t\tinput.setAttribute(\"type\", \"radio\");\n\t\tinput.setAttribute(\"checked\", \"checked\");\n\t\tinput.setAttribute(\"name\", \"t\");\n\n\t\tdiv.appendChild(input);\n\n\t\t// Support: Android <=4.1 only\n\t\t// Older WebKit doesn't clone checked state correctly in fragments\n\t\tsupport.checkClone = div.cloneNode(true).cloneNode(true).lastChild.checked;\n\n\t\t// Support: IE <=11 only\n\t\t// Make sure textarea (and checkbox) defaultValue is properly cloned\n\t\tdiv.innerHTML = \"<textarea>x</textarea>\";\n\t\tsupport.noCloneChecked = !!div.cloneNode(true).lastChild.defaultValue;\n\n\t\t// Support: IE <=9 only\n\t\t// IE <=9 replaces <option> tags with their contents when inserted outside of\n\t\t// the select element.\n\t\tdiv.innerHTML = \"<option></option>\";\n\t\tsupport.option = !!div.lastChild;\n\t})();\n\n\n\t// We have to close these tags to support XHTML (trac-13200)\n\tvar wrapMap = {\n\n\t\t// XHTML parsers do not magically insert elements in the\n\t\t// same way that tag soup parsers do. So we cannot shorten\n\t\t// this by omitting <tbody> or other required elements.\n\t\tthead: [1, \"<table>\", \"</table>\"],\n\t\tcol: [2, \"<table><colgroup>\", \"</colgroup></table>\"],\n\t\ttr: [2, \"<table><tbody>\", \"</tbody></table>\"],\n\t\ttd: [3, \"<table><tbody><tr>\", \"</tr></tbody></table>\"],\n\n\t\t_default: [0, \"\", \"\"]\n\t};\n\n\twrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;\n\twrapMap.th = wrapMap.td;\n\n\t// Support: IE <=9 only\n\tif (!support.option) {\n\t\twrapMap.optgroup = wrapMap.option = [1, \"<select multiple='multiple'>\", \"</select>\"];\n\t}\n\n\n\tfunction getAll(context, tag) {\n\n\t\t// Support: IE <=9 - 11 only\n\t\t// Use typeof to avoid zero-argument method invocation on host objects (trac-15151)\n\t\tvar ret;\n\n\t\tif (typeof context.getElementsByTagName !== \"undefined\") {\n\t\t\tret = context.getElementsByTagName(tag || \"*\");\n\n\t\t} else if (typeof context.querySelectorAll !== \"undefined\") {\n\t\t\tret = context.querySelectorAll(tag || \"*\");\n\n\t\t} else {\n\t\t\tret = [];\n\t\t}\n\n\t\tif (tag === undefined || tag && nodeName(context, tag)) {\n\t\t\treturn jQuery.merge([context], ret);\n\t\t}\n\n\t\treturn ret;\n\t}\n\n\n\t// Mark scripts as having already been evaluated\n\tfunction setGlobalEval(elems, refElements) {\n\t\tvar i = 0,\n\t\t\tl = elems.length;\n\n\t\tfor (; i < l; i++) {\n\t\t\tdataPriv.set(\n\t\t\t\telems[i],\n\t\t\t\t\"globalEval\",\n\t\t\t\t!refElements || dataPriv.get(refElements[i], \"globalEval\")\n\t\t\t);\n\t\t}\n\t}\n\n\n\tvar rhtml = /<|&#?\\w+;/;\n\n\tfunction buildFragment(elems, context, scripts, selection, ignored) {\n\t\tvar elem, tmp, tag, wrap, attached, j,\n\t\t\tfragment = context.createDocumentFragment(),\n\t\t\tnodes = [],\n\t\t\ti = 0,\n\t\t\tl = elems.length;\n\n\t\tfor (; i < l; i++) {\n\t\t\telem = elems[i];\n\n\t\t\tif (elem || elem === 0) {\n\n\t\t\t\t// Add nodes directly\n\t\t\t\tif (toType(elem) === \"object\") {\n\n\t\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\t\tjQuery.merge(nodes, elem.nodeType ? [elem] : elem);\n\n\t\t\t\t\t// Convert non-html into a text node\n\t\t\t\t} else if (!rhtml.test(elem)) {\n\t\t\t\t\tnodes.push(context.createTextNode(elem));\n\n\t\t\t\t\t// Convert html into DOM nodes\n\t\t\t\t} else {\n\t\t\t\t\ttmp = tmp || fragment.appendChild(context.createElement(\"div\"));\n\n\t\t\t\t\t// Deserialize a standard representation\n\t\t\t\t\ttag = (rtagName.exec(elem) || [\"\", \"\"])[1].toLowerCase();\n\t\t\t\t\twrap = wrapMap[tag] || wrapMap._default;\n\t\t\t\t\ttmp.innerHTML = wrap[1] + jQuery.htmlPrefilter(elem) + wrap[2];\n\n\t\t\t\t\t// Descend through wrappers to the right content\n\t\t\t\t\tj = wrap[0];\n\t\t\t\t\twhile (j--) {\n\t\t\t\t\t\ttmp = tmp.lastChild;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\t\tjQuery.merge(nodes, tmp.childNodes);\n\n\t\t\t\t\t// Remember the top-level container\n\t\t\t\t\ttmp = fragment.firstChild;\n\n\t\t\t\t\t// Ensure the created nodes are orphaned (trac-12392)\n\t\t\t\t\ttmp.textContent = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Remove wrapper from fragment\n\t\tfragment.textContent = \"\";\n\n\t\ti = 0;\n\t\twhile ((elem = nodes[i++])) {\n\n\t\t\t// Skip elements already in the context collection (trac-4087)\n\t\t\tif (selection && jQuery.inArray(elem, selection) > -1) {\n\t\t\t\tif (ignored) {\n\t\t\t\t\tignored.push(elem);\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tattached = isAttached(elem);\n\n\t\t\t// Append to fragment\n\t\t\ttmp = getAll(fragment.appendChild(elem), \"script\");\n\n\t\t\t// Preserve script evaluation history\n\t\t\tif (attached) {\n\t\t\t\tsetGlobalEval(tmp);\n\t\t\t}\n\n\t\t\t// Capture executables\n\t\t\tif (scripts) {\n\t\t\t\tj = 0;\n\t\t\t\twhile ((elem = tmp[j++])) {\n\t\t\t\t\tif (rscriptType.test(elem.type || \"\")) {\n\t\t\t\t\t\tscripts.push(elem);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn fragment;\n\t}\n\n\n\tvar rtypenamespace = /^([^.]*)(?:\\.(.+)|)/;\n\n\tfunction returnTrue() {\n\t\treturn true;\n\t}\n\n\tfunction returnFalse() {\n\t\treturn false;\n\t}\n\n\tfunction on(elem, types, selector, data, fn, one) {\n\t\tvar origFn, type;\n\n\t\t// Types can be a map of types/handlers\n\t\tif (typeof types === \"object\") {\n\n\t\t\t// ( types-Object, selector, data )\n\t\t\tif (typeof selector !== \"string\") {\n\n\t\t\t\t// ( types-Object, data )\n\t\t\t\tdata = data || selector;\n\t\t\t\tselector = undefined;\n\t\t\t}\n\t\t\tfor (type in types) {\n\t\t\t\ton(elem, type, selector, data, types[type], one);\n\t\t\t}\n\t\t\treturn elem;\n\t\t}\n\n\t\tif (data == null && fn == null) {\n\n\t\t\t// ( types, fn )\n\t\t\tfn = selector;\n\t\t\tdata = selector = undefined;\n\t\t} else if (fn == null) {\n\t\t\tif (typeof selector === \"string\") {\n\n\t\t\t\t// ( types, selector, fn )\n\t\t\t\tfn = data;\n\t\t\t\tdata = undefined;\n\t\t\t} else {\n\n\t\t\t\t// ( types, data, fn )\n\t\t\t\tfn = data;\n\t\t\t\tdata = selector;\n\t\t\t\tselector = undefined;\n\t\t\t}\n\t\t}\n\t\tif (fn === false) {\n\t\t\tfn = returnFalse;\n\t\t} else if (!fn) {\n\t\t\treturn elem;\n\t\t}\n\n\t\tif (one === 1) {\n\t\t\torigFn = fn;\n\t\t\tfn = function (event) {\n\n\t\t\t\t// Can use an empty set, since event contains the info\n\t\t\t\tjQuery().off(event);\n\t\t\t\treturn origFn.apply(this, arguments);\n\t\t\t};\n\n\t\t\t// Use same guid so caller can remove using origFn\n\t\t\tfn.guid = origFn.guid || (origFn.guid = jQuery.guid++);\n\t\t}\n\t\treturn elem.each(function () {\n\t\t\tjQuery.event.add(this, types, fn, data, selector);\n\t\t});\n\t}\n\n\t/*\n\t * Helper functions for managing events -- not part of the public interface.\n\t * Props to Dean Edwards' addEvent library for many of the ideas.\n\t */\n\tjQuery.event = {\n\n\t\tglobal: {},\n\n\t\tadd: function (elem, types, handler, data, selector) {\n\n\t\t\tvar handleObjIn, eventHandle, tmp,\n\t\t\t\tevents, t, handleObj,\n\t\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\t\telemData = dataPriv.get(elem);\n\n\t\t\t// Only attach events to objects that accept data\n\t\t\tif (!acceptData(elem)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Caller can pass in an object of custom data in lieu of the handler\n\t\t\tif (handler.handler) {\n\t\t\t\thandleObjIn = handler;\n\t\t\t\thandler = handleObjIn.handler;\n\t\t\t\tselector = handleObjIn.selector;\n\t\t\t}\n\n\t\t\t// Ensure that invalid selectors throw exceptions at attach time\n\t\t\t// Evaluate against documentElement in case elem is a non-element node (e.g., document)\n\t\t\tif (selector) {\n\t\t\t\tjQuery.find.matchesSelector(documentElement, selector);\n\t\t\t}\n\n\t\t\t// Make sure that the handler has a unique ID, used to find/remove it later\n\t\t\tif (!handler.guid) {\n\t\t\t\thandler.guid = jQuery.guid++;\n\t\t\t}\n\n\t\t\t// Init the element's event structure and main handler, if this is the first\n\t\t\tif (!(events = elemData.events)) {\n\t\t\t\tevents = elemData.events = Object.create(null);\n\t\t\t}\n\t\t\tif (!(eventHandle = elemData.handle)) {\n\t\t\t\teventHandle = elemData.handle = function (e) {\n\n\t\t\t\t\t// Discard the second event of a jQuery.event.trigger() and\n\t\t\t\t\t// when an event is called after a page has unloaded\n\t\t\t\t\treturn typeof jQuery !== \"undefined\" && jQuery.event.triggered !== e.type ?\n\t\t\t\t\t\tjQuery.event.dispatch.apply(elem, arguments) : undefined;\n\t\t\t\t};\n\t\t\t}\n\n\t\t\t// Handle multiple events separated by a space\n\t\t\ttypes = (types || \"\").match(rnothtmlwhite) || [\"\"];\n\t\t\tt = types.length;\n\t\t\twhile (t--) {\n\t\t\t\ttmp = rtypenamespace.exec(types[t]) || [];\n\t\t\t\ttype = origType = tmp[1];\n\t\t\t\tnamespaces = (tmp[2] || \"\").split(\".\").sort();\n\n\t\t\t\t// There *must* be a type, no attaching namespace-only handlers\n\t\t\t\tif (!type) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// If event changes its type, use the special event handlers for the changed type\n\t\t\t\tspecial = jQuery.event.special[type] || {};\n\n\t\t\t\t// If selector defined, determine special event api type, otherwise given type\n\t\t\t\ttype = (selector ? special.delegateType : special.bindType) || type;\n\n\t\t\t\t// Update special based on newly reset type\n\t\t\t\tspecial = jQuery.event.special[type] || {};\n\n\t\t\t\t// handleObj is passed to all event handlers\n\t\t\t\thandleObj = jQuery.extend({\n\t\t\t\t\ttype: type,\n\t\t\t\t\torigType: origType,\n\t\t\t\t\tdata: data,\n\t\t\t\t\thandler: handler,\n\t\t\t\t\tguid: handler.guid,\n\t\t\t\t\tselector: selector,\n\t\t\t\t\tneedsContext: selector && jQuery.expr.match.needsContext.test(selector),\n\t\t\t\t\tnamespace: namespaces.join(\".\")\n\t\t\t\t}, handleObjIn);\n\n\t\t\t\t// Init the event handler queue if we're the first\n\t\t\t\tif (!(handlers = events[type])) {\n\t\t\t\t\thandlers = events[type] = [];\n\t\t\t\t\thandlers.delegateCount = 0;\n\n\t\t\t\t\t// Only use addEventListener if the special events handler returns false\n\t\t\t\t\tif (!special.setup ||\n\t\t\t\t\t\tspecial.setup.call(elem, data, namespaces, eventHandle) === false) {\n\n\t\t\t\t\t\tif (elem.addEventListener) {\n\t\t\t\t\t\t\telem.addEventListener(type, eventHandle);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (special.add) {\n\t\t\t\t\tspecial.add.call(elem, handleObj);\n\n\t\t\t\t\tif (!handleObj.handler.guid) {\n\t\t\t\t\t\thandleObj.handler.guid = handler.guid;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Add to the element's handler list, delegates in front\n\t\t\t\tif (selector) {\n\t\t\t\t\thandlers.splice(handlers.delegateCount++, 0, handleObj);\n\t\t\t\t} else {\n\t\t\t\t\thandlers.push(handleObj);\n\t\t\t\t}\n\n\t\t\t\t// Keep track of which events have ever been used, for event optimization\n\t\t\t\tjQuery.event.global[type] = true;\n\t\t\t}\n\n\t\t},\n\n\t\t// Detach an event or set of events from an element\n\t\tremove: function (elem, types, handler, selector, mappedTypes) {\n\n\t\t\tvar j, origCount, tmp,\n\t\t\t\tevents, t, handleObj,\n\t\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\t\telemData = dataPriv.hasData(elem) && dataPriv.get(elem);\n\n\t\t\tif (!elemData || !(events = elemData.events)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Once for each type.namespace in types; type may be omitted\n\t\t\ttypes = (types || \"\").match(rnothtmlwhite) || [\"\"];\n\t\t\tt = types.length;\n\t\t\twhile (t--) {\n\t\t\t\ttmp = rtypenamespace.exec(types[t]) || [];\n\t\t\t\ttype = origType = tmp[1];\n\t\t\t\tnamespaces = (tmp[2] || \"\").split(\".\").sort();\n\n\t\t\t\t// Unbind all events (on this namespace, if provided) for the element\n\t\t\t\tif (!type) {\n\t\t\t\t\tfor (type in events) {\n\t\t\t\t\t\tjQuery.event.remove(elem, type + types[t], handler, selector, true);\n\t\t\t\t\t}\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tspecial = jQuery.event.special[type] || {};\n\t\t\t\ttype = (selector ? special.delegateType : special.bindType) || type;\n\t\t\t\thandlers = events[type] || [];\n\t\t\t\ttmp = tmp[2] &&\n\t\t\t\t\tnew RegExp(\"(^|\\\\.)\" + namespaces.join(\"\\\\.(?:.*\\\\.|)\") + \"(\\\\.|$)\");\n\n\t\t\t\t// Remove matching events\n\t\t\t\torigCount = j = handlers.length;\n\t\t\t\twhile (j--) {\n\t\t\t\t\thandleObj = handlers[j];\n\n\t\t\t\t\tif ((mappedTypes || origType === handleObj.origType) &&\n\t\t\t\t\t\t(!handler || handler.guid === handleObj.guid) &&\n\t\t\t\t\t\t(!tmp || tmp.test(handleObj.namespace)) &&\n\t\t\t\t\t\t(!selector || selector === handleObj.selector ||\n\t\t\t\t\t\t\tselector === \"**\" && handleObj.selector)) {\n\t\t\t\t\t\thandlers.splice(j, 1);\n\n\t\t\t\t\t\tif (handleObj.selector) {\n\t\t\t\t\t\t\thandlers.delegateCount--;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (special.remove) {\n\t\t\t\t\t\t\tspecial.remove.call(elem, handleObj);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Remove generic event handler if we removed something and no more handlers exist\n\t\t\t\t// (avoids potential for endless recursion during removal of special event handlers)\n\t\t\t\tif (origCount && !handlers.length) {\n\t\t\t\t\tif (!special.teardown ||\n\t\t\t\t\t\tspecial.teardown.call(elem, namespaces, elemData.handle) === false) {\n\n\t\t\t\t\t\tjQuery.removeEvent(elem, type, elemData.handle);\n\t\t\t\t\t}\n\n\t\t\t\t\tdelete events[type];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove data and the expando if it's no longer used\n\t\t\tif (jQuery.isEmptyObject(events)) {\n\t\t\t\tdataPriv.remove(elem, \"handle events\");\n\t\t\t}\n\t\t},\n\n\t\tdispatch: function (nativeEvent) {\n\n\t\t\tvar i, j, ret, matched, handleObj, handlerQueue,\n\t\t\t\targs = new Array(arguments.length),\n\n\t\t\t\t// Make a writable jQuery.Event from the native event object\n\t\t\t\tevent = jQuery.event.fix(nativeEvent),\n\n\t\t\t\thandlers = (\n\t\t\t\t\tdataPriv.get(this, \"events\") || Object.create(null)\n\t\t\t\t)[event.type] || [],\n\t\t\t\tspecial = jQuery.event.special[event.type] || {};\n\n\t\t\t// Use the fix-ed jQuery.Event rather than the (read-only) native event\n\t\t\targs[0] = event;\n\n\t\t\tfor (i = 1; i < arguments.length; i++) {\n\t\t\t\targs[i] = arguments[i];\n\t\t\t}\n\n\t\t\tevent.delegateTarget = this;\n\n\t\t\t// Call the preDispatch hook for the mapped type, and let it bail if desired\n\t\t\tif (special.preDispatch && special.preDispatch.call(this, event) === false) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Determine handlers\n\t\t\thandlerQueue = jQuery.event.handlers.call(this, event, handlers);\n\n\t\t\t// Run delegates first; they may want to stop propagation beneath us\n\t\t\ti = 0;\n\t\t\twhile ((matched = handlerQueue[i++]) && !event.isPropagationStopped()) {\n\t\t\t\tevent.currentTarget = matched.elem;\n\n\t\t\t\tj = 0;\n\t\t\t\twhile ((handleObj = matched.handlers[j++]) &&\n\t\t\t\t\t!event.isImmediatePropagationStopped()) {\n\n\t\t\t\t\t// If the event is namespaced, then each handler is only invoked if it is\n\t\t\t\t\t// specially universal or its namespaces are a superset of the event's.\n\t\t\t\t\tif (!event.rnamespace || handleObj.namespace === false ||\n\t\t\t\t\t\tevent.rnamespace.test(handleObj.namespace)) {\n\n\t\t\t\t\t\tevent.handleObj = handleObj;\n\t\t\t\t\t\tevent.data = handleObj.data;\n\n\t\t\t\t\t\tret = ((jQuery.event.special[handleObj.origType] || {}).handle ||\n\t\t\t\t\t\t\thandleObj.handler).apply(matched.elem, args);\n\n\t\t\t\t\t\tif (ret !== undefined) {\n\t\t\t\t\t\t\tif ((event.result = ret) === false) {\n\t\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Call the postDispatch hook for the mapped type\n\t\t\tif (special.postDispatch) {\n\t\t\t\tspecial.postDispatch.call(this, event);\n\t\t\t}\n\n\t\t\treturn event.result;\n\t\t},\n\n\t\thandlers: function (event, handlers) {\n\t\t\tvar i, handleObj, sel, matchedHandlers, matchedSelectors,\n\t\t\t\thandlerQueue = [],\n\t\t\t\tdelegateCount = handlers.delegateCount,\n\t\t\t\tcur = event.target;\n\n\t\t\t// Find delegate handlers\n\t\t\tif (delegateCount &&\n\n\t\t\t\t// Support: IE <=9\n\t\t\t\t// Black-hole SVG <use> instance trees (trac-13180)\n\t\t\t\tcur.nodeType &&\n\n\t\t\t\t// Support: Firefox <=42\n\t\t\t\t// Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861)\n\t\t\t\t// https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click\n\t\t\t\t// Support: IE 11 only\n\t\t\t\t// ...but not arrow key \"clicks\" of radio inputs, which can have `button` -1 (gh-2343)\n\t\t\t\t!(event.type === \"click\" && event.button >= 1)) {\n\n\t\t\t\tfor (; cur !== this; cur = cur.parentNode || this) {\n\n\t\t\t\t\t// Don't check non-elements (trac-13208)\n\t\t\t\t\t// Don't process clicks on disabled elements (trac-6911, trac-8165, trac-11382, trac-11764)\n\t\t\t\t\tif (cur.nodeType === 1 && !(event.type === \"click\" && cur.disabled === true)) {\n\t\t\t\t\t\tmatchedHandlers = [];\n\t\t\t\t\t\tmatchedSelectors = {};\n\t\t\t\t\t\tfor (i = 0; i < delegateCount; i++) {\n\t\t\t\t\t\t\thandleObj = handlers[i];\n\n\t\t\t\t\t\t\t// Don't conflict with Object.prototype properties (trac-13203)\n\t\t\t\t\t\t\tsel = handleObj.selector + \" \";\n\n\t\t\t\t\t\t\tif (matchedSelectors[sel] === undefined) {\n\t\t\t\t\t\t\t\tmatchedSelectors[sel] = handleObj.needsContext ?\n\t\t\t\t\t\t\t\t\tjQuery(sel, this).index(cur) > -1 :\n\t\t\t\t\t\t\t\t\tjQuery.find(sel, this, null, [cur]).length;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (matchedSelectors[sel]) {\n\t\t\t\t\t\t\t\tmatchedHandlers.push(handleObj);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (matchedHandlers.length) {\n\t\t\t\t\t\t\thandlerQueue.push({ elem: cur, handlers: matchedHandlers });\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Add the remaining (directly-bound) handlers\n\t\t\tcur = this;\n\t\t\tif (delegateCount < handlers.length) {\n\t\t\t\thandlerQueue.push({ elem: cur, handlers: handlers.slice(delegateCount) });\n\t\t\t}\n\n\t\t\treturn handlerQueue;\n\t\t},\n\n\t\taddProp: function (name, hook) {\n\t\t\tObject.defineProperty(jQuery.Event.prototype, name, {\n\t\t\t\tenumerable: true,\n\t\t\t\tconfigurable: true,\n\n\t\t\t\tget: isFunction(hook) ?\n\t\t\t\t\tfunction () {\n\t\t\t\t\t\tif (this.originalEvent) {\n\t\t\t\t\t\t\treturn hook(this.originalEvent);\n\t\t\t\t\t\t}\n\t\t\t\t\t} :\n\t\t\t\t\tfunction () {\n\t\t\t\t\t\tif (this.originalEvent) {\n\t\t\t\t\t\t\treturn this.originalEvent[name];\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\n\t\t\t\tset: function (value) {\n\t\t\t\t\tObject.defineProperty(this, name, {\n\t\t\t\t\t\tenumerable: true,\n\t\t\t\t\t\tconfigurable: true,\n\t\t\t\t\t\twritable: true,\n\t\t\t\t\t\tvalue: value\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\tfix: function (originalEvent) {\n\t\t\treturn originalEvent[jQuery.expando] ?\n\t\t\t\toriginalEvent :\n\t\t\t\tnew jQuery.Event(originalEvent);\n\t\t},\n\n\t\tspecial: {\n\t\t\tload: {\n\n\t\t\t\t// Prevent triggered image.load events from bubbling to window.load\n\t\t\t\tnoBubble: true\n\t\t\t},\n\t\t\tclick: {\n\n\t\t\t\t// Utilize native event to ensure correct state for checkable inputs\n\t\t\t\tsetup: function (data) {\n\n\t\t\t\t\t// For mutual compressibility with _default, replace `this` access with a local var.\n\t\t\t\t\t// `|| data` is dead code meant only to preserve the variable through minification.\n\t\t\t\t\tvar el = this || data;\n\n\t\t\t\t\t// Claim the first handler\n\t\t\t\t\tif (rcheckableType.test(el.type) &&\n\t\t\t\t\t\tel.click && nodeName(el, \"input\")) {\n\n\t\t\t\t\t\t// dataPriv.set( el, \"click\", ... )\n\t\t\t\t\t\tleverageNative(el, \"click\", true);\n\t\t\t\t\t}\n\n\t\t\t\t\t// Return false to allow normal processing in the caller\n\t\t\t\t\treturn false;\n\t\t\t\t},\n\t\t\t\ttrigger: function (data) {\n\n\t\t\t\t\t// For mutual compressibility with _default, replace `this` access with a local var.\n\t\t\t\t\t// `|| data` is dead code meant only to preserve the variable through minification.\n\t\t\t\t\tvar el = this || data;\n\n\t\t\t\t\t// Force setup before triggering a click\n\t\t\t\t\tif (rcheckableType.test(el.type) &&\n\t\t\t\t\t\tel.click && nodeName(el, \"input\")) {\n\n\t\t\t\t\t\tleverageNative(el, \"click\");\n\t\t\t\t\t}\n\n\t\t\t\t\t// Return non-false to allow normal event-path propagation\n\t\t\t\t\treturn true;\n\t\t\t\t},\n\n\t\t\t\t// For cross-browser consistency, suppress native .click() on links\n\t\t\t\t// Also prevent it if we're currently inside a leveraged native-event stack\n\t\t\t\t_default: function (event) {\n\t\t\t\t\tvar target = event.target;\n\t\t\t\t\treturn rcheckableType.test(target.type) &&\n\t\t\t\t\t\ttarget.click && nodeName(target, \"input\") &&\n\t\t\t\t\t\tdataPriv.get(target, \"click\") ||\n\t\t\t\t\t\tnodeName(target, \"a\");\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tbeforeunload: {\n\t\t\t\tpostDispatch: function (event) {\n\n\t\t\t\t\t// Support: Firefox 20+\n\t\t\t\t\t// Firefox doesn't alert if the returnValue field is not set.\n\t\t\t\t\tif (event.result !== undefined && event.originalEvent) {\n\t\t\t\t\t\tevent.originalEvent.returnValue = event.result;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t// Ensure the presence of an event listener that handles manually-triggered\n\t// synthetic events by interrupting progress until reinvoked in response to\n\t// *native* events that it fires directly, ensuring that state changes have\n\t// already occurred before other listeners are invoked.\n\tfunction leverageNative(el, type, isSetup) {\n\n\t\t// Missing `isSetup` indicates a trigger call, which must force setup through jQuery.event.add\n\t\tif (!isSetup) {\n\t\t\tif (dataPriv.get(el, type) === undefined) {\n\t\t\t\tjQuery.event.add(el, type, returnTrue);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\t// Register the controller as a special universal handler for all event namespaces\n\t\tdataPriv.set(el, type, false);\n\t\tjQuery.event.add(el, type, {\n\t\t\tnamespace: false,\n\t\t\thandler: function (event) {\n\t\t\t\tvar result,\n\t\t\t\t\tsaved = dataPriv.get(this, type);\n\n\t\t\t\tif ((event.isTrigger & 1) && this[type]) {\n\n\t\t\t\t\t// Interrupt processing of the outer synthetic .trigger()ed event\n\t\t\t\t\tif (!saved) {\n\n\t\t\t\t\t\t// Store arguments for use when handling the inner native event\n\t\t\t\t\t\t// There will always be at least one argument (an event object), so this array\n\t\t\t\t\t\t// will not be confused with a leftover capture object.\n\t\t\t\t\t\tsaved = slice.call(arguments);\n\t\t\t\t\t\tdataPriv.set(this, type, saved);\n\n\t\t\t\t\t\t// Trigger the native event and capture its result\n\t\t\t\t\t\tthis[type]();\n\t\t\t\t\t\tresult = dataPriv.get(this, type);\n\t\t\t\t\t\tdataPriv.set(this, type, false);\n\n\t\t\t\t\t\tif (saved !== result) {\n\n\t\t\t\t\t\t\t// Cancel the outer synthetic event\n\t\t\t\t\t\t\tevent.stopImmediatePropagation();\n\t\t\t\t\t\t\tevent.preventDefault();\n\n\t\t\t\t\t\t\treturn result;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// If this is an inner synthetic event for an event with a bubbling surrogate\n\t\t\t\t\t\t// (focus or blur), assume that the surrogate already propagated from triggering\n\t\t\t\t\t\t// the native event and prevent that from happening again here.\n\t\t\t\t\t\t// This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the\n\t\t\t\t\t\t// bubbling surrogate propagates *after* the non-bubbling base), but that seems\n\t\t\t\t\t\t// less bad than duplication.\n\t\t\t\t\t} else if ((jQuery.event.special[type] || {}).delegateType) {\n\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t}\n\n\t\t\t\t\t// If this is a native event triggered above, everything is now in order\n\t\t\t\t\t// Fire an inner synthetic event with the original arguments\n\t\t\t\t} else if (saved) {\n\n\t\t\t\t\t// ...and capture the result\n\t\t\t\t\tdataPriv.set(this, type, jQuery.event.trigger(\n\t\t\t\t\t\tsaved[0],\n\t\t\t\t\t\tsaved.slice(1),\n\t\t\t\t\t\tthis\n\t\t\t\t\t));\n\n\t\t\t\t\t// Abort handling of the native event by all jQuery handlers while allowing\n\t\t\t\t\t// native handlers on the same element to run. On target, this is achieved\n\t\t\t\t\t// by stopping immediate propagation just on the jQuery event. However,\n\t\t\t\t\t// the native event is re-wrapped by a jQuery one on each level of the\n\t\t\t\t\t// propagation so the only way to stop it for jQuery is to stop it for\n\t\t\t\t\t// everyone via native `stopPropagation()`. This is not a problem for\n\t\t\t\t\t// focus/blur which don't bubble, but it does also stop click on checkboxes\n\t\t\t\t\t// and radios. We accept this limitation.\n\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\tevent.isImmediatePropagationStopped = returnTrue;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\tjQuery.removeEvent = function (elem, type, handle) {\n\n\t\t// This \"if\" is needed for plain objects\n\t\tif (elem.removeEventListener) {\n\t\t\telem.removeEventListener(type, handle);\n\t\t}\n\t};\n\n\tjQuery.Event = function (src, props) {\n\n\t\t// Allow instantiation without the 'new' keyword\n\t\tif (!(this instanceof jQuery.Event)) {\n\t\t\treturn new jQuery.Event(src, props);\n\t\t}\n\n\t\t// Event object\n\t\tif (src && src.type) {\n\t\t\tthis.originalEvent = src;\n\t\t\tthis.type = src.type;\n\n\t\t\t// Events bubbling up the document may have been marked as prevented\n\t\t\t// by a handler lower down the tree; reflect the correct value.\n\t\t\tthis.isDefaultPrevented = src.defaultPrevented ||\n\t\t\t\tsrc.defaultPrevented === undefined &&\n\n\t\t\t\t// Support: Android <=2.3 only\n\t\t\t\tsrc.returnValue === false ?\n\t\t\t\treturnTrue :\n\t\t\t\treturnFalse;\n\n\t\t\t// Create target properties\n\t\t\t// Support: Safari <=6 - 7 only\n\t\t\t// Target should not be a text node (trac-504, trac-13143)\n\t\t\tthis.target = (src.target && src.target.nodeType === 3) ?\n\t\t\t\tsrc.target.parentNode :\n\t\t\t\tsrc.target;\n\n\t\t\tthis.currentTarget = src.currentTarget;\n\t\t\tthis.relatedTarget = src.relatedTarget;\n\n\t\t\t// Event type\n\t\t} else {\n\t\t\tthis.type = src;\n\t\t}\n\n\t\t// Put explicitly provided properties onto the event object\n\t\tif (props) {\n\t\t\tjQuery.extend(this, props);\n\t\t}\n\n\t\t// Create a timestamp if incoming event doesn't have one\n\t\tthis.timeStamp = src && src.timeStamp || Date.now();\n\n\t\t// Mark it as fixed\n\t\tthis[jQuery.expando] = true;\n\t};\n\n\t// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding\n\t// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html\n\tjQuery.Event.prototype = {\n\t\tconstructor: jQuery.Event,\n\t\tisDefaultPrevented: returnFalse,\n\t\tisPropagationStopped: returnFalse,\n\t\tisImmediatePropagationStopped: returnFalse,\n\t\tisSimulated: false,\n\n\t\tpreventDefault: function () {\n\t\t\tvar e = this.originalEvent;\n\n\t\t\tthis.isDefaultPrevented = returnTrue;\n\n\t\t\tif (e && !this.isSimulated) {\n\t\t\t\te.preventDefault();\n\t\t\t}\n\t\t},\n\t\tstopPropagation: function () {\n\t\t\tvar e = this.originalEvent;\n\n\t\t\tthis.isPropagationStopped = returnTrue;\n\n\t\t\tif (e && !this.isSimulated) {\n\t\t\t\te.stopPropagation();\n\t\t\t}\n\t\t},\n\t\tstopImmediatePropagation: function () {\n\t\t\tvar e = this.originalEvent;\n\n\t\t\tthis.isImmediatePropagationStopped = returnTrue;\n\n\t\t\tif (e && !this.isSimulated) {\n\t\t\t\te.stopImmediatePropagation();\n\t\t\t}\n\n\t\t\tthis.stopPropagation();\n\t\t}\n\t};\n\n\t// Includes all common event props including KeyEvent and MouseEvent specific props\n\tjQuery.each({\n\t\taltKey: true,\n\t\tbubbles: true,\n\t\tcancelable: true,\n\t\tchangedTouches: true,\n\t\tctrlKey: true,\n\t\tdetail: true,\n\t\teventPhase: true,\n\t\tmetaKey: true,\n\t\tpageX: true,\n\t\tpageY: true,\n\t\tshiftKey: true,\n\t\tview: true,\n\t\t\"char\": true,\n\t\tcode: true,\n\t\tcharCode: true,\n\t\tkey: true,\n\t\tkeyCode: true,\n\t\tbutton: true,\n\t\tbuttons: true,\n\t\tclientX: true,\n\t\tclientY: true,\n\t\toffsetX: true,\n\t\toffsetY: true,\n\t\tpointerId: true,\n\t\tpointerType: true,\n\t\tscreenX: true,\n\t\tscreenY: true,\n\t\ttargetTouches: true,\n\t\ttoElement: true,\n\t\ttouches: true,\n\t\twhich: true\n\t}, jQuery.event.addProp);\n\n\tjQuery.each({ focus: \"focusin\", blur: \"focusout\" }, function (type, delegateType) {\n\n\t\tfunction focusMappedHandler(nativeEvent) {\n\t\t\tif (document.documentMode) {\n\n\t\t\t\t// Support: IE 11+\n\t\t\t\t// Attach a single focusin/focusout handler on the document while someone wants\n\t\t\t\t// focus/blur. This is because the former are synchronous in IE while the latter\n\t\t\t\t// are async. In other browsers, all those handlers are invoked synchronously.\n\n\t\t\t\t// `handle` from private data would already wrap the event, but we need\n\t\t\t\t// to change the `type` here.\n\t\t\t\tvar handle = dataPriv.get(this, \"handle\"),\n\t\t\t\t\tevent = jQuery.event.fix(nativeEvent);\n\t\t\t\tevent.type = nativeEvent.type === \"focusin\" ? \"focus\" : \"blur\";\n\t\t\t\tevent.isSimulated = true;\n\n\t\t\t\t// First, handle focusin/focusout\n\t\t\t\thandle(nativeEvent);\n\n\t\t\t\t// ...then, handle focus/blur\n\t\t\t\t//\n\t\t\t\t// focus/blur don't bubble while focusin/focusout do; simulate the former by only\n\t\t\t\t// invoking the handler at the lower level.\n\t\t\t\tif (event.target === event.currentTarget) {\n\n\t\t\t\t\t// The setup part calls `leverageNative`, which, in turn, calls\n\t\t\t\t\t// `jQuery.event.add`, so event handle will already have been set\n\t\t\t\t\t// by this point.\n\t\t\t\t\thandle(event);\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\t// For non-IE browsers, attach a single capturing handler on the document\n\t\t\t\t// while someone wants focusin/focusout.\n\t\t\t\tjQuery.event.simulate(delegateType, nativeEvent.target,\n\t\t\t\t\tjQuery.event.fix(nativeEvent));\n\t\t\t}\n\t\t}\n\n\t\tjQuery.event.special[type] = {\n\n\t\t\t// Utilize native event if possible so blur/focus sequence is correct\n\t\t\tsetup: function () {\n\n\t\t\t\tvar attaches;\n\n\t\t\t\t// Claim the first handler\n\t\t\t\t// dataPriv.set( this, \"focus\", ... )\n\t\t\t\t// dataPriv.set( this, \"blur\", ... )\n\t\t\t\tleverageNative(this, type, true);\n\n\t\t\t\tif (document.documentMode) {\n\n\t\t\t\t\t// Support: IE 9 - 11+\n\t\t\t\t\t// We use the same native handler for focusin & focus (and focusout & blur)\n\t\t\t\t\t// so we need to coordinate setup & teardown parts between those events.\n\t\t\t\t\t// Use `delegateType` as the key as `type` is already used by `leverageNative`.\n\t\t\t\t\tattaches = dataPriv.get(this, delegateType);\n\t\t\t\t\tif (!attaches) {\n\t\t\t\t\t\tthis.addEventListener(delegateType, focusMappedHandler);\n\t\t\t\t\t}\n\t\t\t\t\tdataPriv.set(this, delegateType, (attaches || 0) + 1);\n\t\t\t\t} else {\n\n\t\t\t\t\t// Return false to allow normal processing in the caller\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\t\t\ttrigger: function () {\n\n\t\t\t\t// Force setup before trigger\n\t\t\t\tleverageNative(this, type);\n\n\t\t\t\t// Return non-false to allow normal event-path propagation\n\t\t\t\treturn true;\n\t\t\t},\n\n\t\t\tteardown: function () {\n\t\t\t\tvar attaches;\n\n\t\t\t\tif (document.documentMode) {\n\t\t\t\t\tattaches = dataPriv.get(this, delegateType) - 1;\n\t\t\t\t\tif (!attaches) {\n\t\t\t\t\t\tthis.removeEventListener(delegateType, focusMappedHandler);\n\t\t\t\t\t\tdataPriv.remove(this, delegateType);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdataPriv.set(this, delegateType, attaches);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\n\t\t\t\t\t// Return false to indicate standard teardown should be applied\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// Suppress native focus or blur if we're currently inside\n\t\t\t// a leveraged native-event stack\n\t\t\t_default: function (event) {\n\t\t\t\treturn dataPriv.get(event.target, type);\n\t\t\t},\n\n\t\t\tdelegateType: delegateType\n\t\t};\n\n\t\t// Support: Firefox <=44\n\t\t// Firefox doesn't have focus(in | out) events\n\t\t// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787\n\t\t//\n\t\t// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1\n\t\t// focus(in | out) events fire after focus & blur events,\n\t\t// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order\n\t\t// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857\n\t\t//\n\t\t// Support: IE 9 - 11+\n\t\t// To preserve relative focusin/focus & focusout/blur event order guaranteed on the 3.x branch,\n\t\t// attach a single handler for both events in IE.\n\t\tjQuery.event.special[delegateType] = {\n\t\t\tsetup: function () {\n\n\t\t\t\t// Handle: regular nodes (via `this.ownerDocument`), window\n\t\t\t\t// (via `this.document`) & document (via `this`).\n\t\t\t\tvar doc = this.ownerDocument || this.document || this,\n\t\t\t\t\tdataHolder = document.documentMode ? this : doc,\n\t\t\t\t\tattaches = dataPriv.get(dataHolder, delegateType);\n\n\t\t\t\t// Support: IE 9 - 11+\n\t\t\t\t// We use the same native handler for focusin & focus (and focusout & blur)\n\t\t\t\t// so we need to coordinate setup & teardown parts between those events.\n\t\t\t\t// Use `delegateType` as the key as `type` is already used by `leverageNative`.\n\t\t\t\tif (!attaches) {\n\t\t\t\t\tif (document.documentMode) {\n\t\t\t\t\t\tthis.addEventListener(delegateType, focusMappedHandler);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdoc.addEventListener(type, focusMappedHandler, true);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tdataPriv.set(dataHolder, delegateType, (attaches || 0) + 1);\n\t\t\t},\n\t\t\tteardown: function () {\n\t\t\t\tvar doc = this.ownerDocument || this.document || this,\n\t\t\t\t\tdataHolder = document.documentMode ? this : doc,\n\t\t\t\t\tattaches = dataPriv.get(dataHolder, delegateType) - 1;\n\n\t\t\t\tif (!attaches) {\n\t\t\t\t\tif (document.documentMode) {\n\t\t\t\t\t\tthis.removeEventListener(delegateType, focusMappedHandler);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdoc.removeEventListener(type, focusMappedHandler, true);\n\t\t\t\t\t}\n\t\t\t\t\tdataPriv.remove(dataHolder, delegateType);\n\t\t\t\t} else {\n\t\t\t\t\tdataPriv.set(dataHolder, delegateType, attaches);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t});\n\n\t// Create mouseenter/leave events using mouseover/out and event-time checks\n\t// so that event delegation works in jQuery.\n\t// Do the same for pointerenter/pointerleave and pointerover/pointerout\n\t//\n\t// Support: Safari 7 only\n\t// Safari sends mouseenter too often; see:\n\t// https://bugs.chromium.org/p/chromium/issues/detail?id=470258\n\t// for the description of the bug (it existed in older Chrome versions as well).\n\tjQuery.each({\n\t\tmouseenter: \"mouseover\",\n\t\tmouseleave: \"mouseout\",\n\t\tpointerenter: \"pointerover\",\n\t\tpointerleave: \"pointerout\"\n\t}, function (orig, fix) {\n\t\tjQuery.event.special[orig] = {\n\t\t\tdelegateType: fix,\n\t\t\tbindType: fix,\n\n\t\t\thandle: function (event) {\n\t\t\t\tvar ret,\n\t\t\t\t\ttarget = this,\n\t\t\t\t\trelated = event.relatedTarget,\n\t\t\t\t\thandleObj = event.handleObj;\n\n\t\t\t\t// For mouseenter/leave call the handler if related is outside the target.\n\t\t\t\t// NB: No relatedTarget if the mouse left/entered the browser window\n\t\t\t\tif (!related || (related !== target && !jQuery.contains(target, related))) {\n\t\t\t\t\tevent.type = handleObj.origType;\n\t\t\t\t\tret = handleObj.handler.apply(this, arguments);\n\t\t\t\t\tevent.type = fix;\n\t\t\t\t}\n\t\t\t\treturn ret;\n\t\t\t}\n\t\t};\n\t});\n\n\tjQuery.fn.extend({\n\n\t\ton: function (types, selector, data, fn) {\n\t\t\treturn on(this, types, selector, data, fn);\n\t\t},\n\t\tone: function (types, selector, data, fn) {\n\t\t\treturn on(this, types, selector, data, fn, 1);\n\t\t},\n\t\toff: function (types, selector, fn) {\n\t\t\tvar handleObj, type;\n\t\t\tif (types && types.preventDefault && types.handleObj) {\n\n\t\t\t\t// ( event )  dispatched jQuery.Event\n\t\t\t\thandleObj = types.handleObj;\n\t\t\t\tjQuery(types.delegateTarget).off(\n\t\t\t\t\thandleObj.namespace ?\n\t\t\t\t\t\thandleObj.origType + \".\" + handleObj.namespace :\n\t\t\t\t\t\thandleObj.origType,\n\t\t\t\t\thandleObj.selector,\n\t\t\t\t\thandleObj.handler\n\t\t\t\t);\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\tif (typeof types === \"object\") {\n\n\t\t\t\t// ( types-object [, selector] )\n\t\t\t\tfor (type in types) {\n\t\t\t\t\tthis.off(type, selector, types[type]);\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\tif (selector === false || typeof selector === \"function\") {\n\n\t\t\t\t// ( types [, fn] )\n\t\t\t\tfn = selector;\n\t\t\t\tselector = undefined;\n\t\t\t}\n\t\t\tif (fn === false) {\n\t\t\t\tfn = returnFalse;\n\t\t\t}\n\t\t\treturn this.each(function () {\n\t\t\t\tjQuery.event.remove(this, types, fn, selector);\n\t\t\t});\n\t\t}\n\t});\n\n\n\tvar\n\n\t\t// Support: IE <=10 - 11, Edge 12 - 13 only\n\t\t// In IE/Edge using regex groups here causes severe slowdowns.\n\t\t// See https://connect.microsoft.com/IE/feedback/details/1736512/\n\t\trnoInnerhtml = /<script|<style|<link/i,\n\n\t\t// checked=\"checked\" or checked\n\t\trchecked = /checked\\s*(?:[^=]|=\\s*.checked.)/i,\n\n\t\trcleanScript = /^\\s*<!\\[CDATA\\[|\\]\\]>\\s*$/g;\n\n\t// Prefer a tbody over its parent table for containing new rows\n\tfunction manipulationTarget(elem, content) {\n\t\tif (nodeName(elem, \"table\") &&\n\t\t\tnodeName(content.nodeType !== 11 ? content : content.firstChild, \"tr\")) {\n\n\t\t\treturn jQuery(elem).children(\"tbody\")[0] || elem;\n\t\t}\n\n\t\treturn elem;\n\t}\n\n\t// Replace/restore the type attribute of script elements for safe DOM manipulation\n\tfunction disableScript(elem) {\n\t\telem.type = (elem.getAttribute(\"type\") !== null) + \"/\" + elem.type;\n\t\treturn elem;\n\t}\n\tfunction restoreScript(elem) {\n\t\tif ((elem.type || \"\").slice(0, 5) === \"true/\") {\n\t\t\telem.type = elem.type.slice(5);\n\t\t} else {\n\t\t\telem.removeAttribute(\"type\");\n\t\t}\n\n\t\treturn elem;\n\t}\n\n\tfunction cloneCopyEvent(src, dest) {\n\t\tvar i, l, type, pdataOld, udataOld, udataCur, events;\n\n\t\tif (dest.nodeType !== 1) {\n\t\t\treturn;\n\t\t}\n\n\t\t// 1. Copy private data: events, handlers, etc.\n\t\tif (dataPriv.hasData(src)) {\n\t\t\tpdataOld = dataPriv.get(src);\n\t\t\tevents = pdataOld.events;\n\n\t\t\tif (events) {\n\t\t\t\tdataPriv.remove(dest, \"handle events\");\n\n\t\t\t\tfor (type in events) {\n\t\t\t\t\tfor (i = 0, l = events[type].length; i < l; i++) {\n\t\t\t\t\t\tjQuery.event.add(dest, type, events[type][i]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// 2. Copy user data\n\t\tif (dataUser.hasData(src)) {\n\t\t\tudataOld = dataUser.access(src);\n\t\t\tudataCur = jQuery.extend({}, udataOld);\n\n\t\t\tdataUser.set(dest, udataCur);\n\t\t}\n\t}\n\n\t// Fix IE bugs, see support tests\n\tfunction fixInput(src, dest) {\n\t\tvar nodeName = dest.nodeName.toLowerCase();\n\n\t\t// Fails to persist the checked state of a cloned checkbox or radio button.\n\t\tif (nodeName === \"input\" && rcheckableType.test(src.type)) {\n\t\t\tdest.checked = src.checked;\n\n\t\t\t// Fails to return the selected option to the default selected state when cloning options\n\t\t} else if (nodeName === \"input\" || nodeName === \"textarea\") {\n\t\t\tdest.defaultValue = src.defaultValue;\n\t\t}\n\t}\n\n\tfunction domManip(collection, args, callback, ignored) {\n\n\t\t// Flatten any nested arrays\n\t\targs = flat(args);\n\n\t\tvar fragment, first, scripts, hasScripts, node, doc,\n\t\t\ti = 0,\n\t\t\tl = collection.length,\n\t\t\tiNoClone = l - 1,\n\t\t\tvalue = args[0],\n\t\t\tvalueIsFunction = isFunction(value);\n\n\t\t// We can't cloneNode fragments that contain checked, in WebKit\n\t\tif (valueIsFunction ||\n\t\t\t(l > 1 && typeof value === \"string\" &&\n\t\t\t\t!support.checkClone && rchecked.test(value))) {\n\t\t\treturn collection.each(function (index) {\n\t\t\t\tvar self = collection.eq(index);\n\t\t\t\tif (valueIsFunction) {\n\t\t\t\t\targs[0] = value.call(this, index, self.html());\n\t\t\t\t}\n\t\t\t\tdomManip(self, args, callback, ignored);\n\t\t\t});\n\t\t}\n\n\t\tif (l) {\n\t\t\tfragment = buildFragment(args, collection[0].ownerDocument, false, collection, ignored);\n\t\t\tfirst = fragment.firstChild;\n\n\t\t\tif (fragment.childNodes.length === 1) {\n\t\t\t\tfragment = first;\n\t\t\t}\n\n\t\t\t// Require either new content or an interest in ignored elements to invoke the callback\n\t\t\tif (first || ignored) {\n\t\t\t\tscripts = jQuery.map(getAll(fragment, \"script\"), disableScript);\n\t\t\t\thasScripts = scripts.length;\n\n\t\t\t\t// Use the original fragment for the last item\n\t\t\t\t// instead of the first because it can end up\n\t\t\t\t// being emptied incorrectly in certain situations (trac-8070).\n\t\t\t\tfor (; i < l; i++) {\n\t\t\t\t\tnode = fragment;\n\n\t\t\t\t\tif (i !== iNoClone) {\n\t\t\t\t\t\tnode = jQuery.clone(node, true, true);\n\n\t\t\t\t\t\t// Keep references to cloned scripts for later restoration\n\t\t\t\t\t\tif (hasScripts) {\n\n\t\t\t\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\t\t\t\tjQuery.merge(scripts, getAll(node, \"script\"));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tcallback.call(collection[i], node, i);\n\t\t\t\t}\n\n\t\t\t\tif (hasScripts) {\n\t\t\t\t\tdoc = scripts[scripts.length - 1].ownerDocument;\n\n\t\t\t\t\t// Reenable scripts\n\t\t\t\t\tjQuery.map(scripts, restoreScript);\n\n\t\t\t\t\t// Evaluate executable scripts on first document insertion\n\t\t\t\t\tfor (i = 0; i < hasScripts; i++) {\n\t\t\t\t\t\tnode = scripts[i];\n\t\t\t\t\t\tif (rscriptType.test(node.type || \"\") &&\n\t\t\t\t\t\t\t!dataPriv.access(node, \"globalEval\") &&\n\t\t\t\t\t\t\tjQuery.contains(doc, node)) {\n\n\t\t\t\t\t\t\tif (node.src && (node.type || \"\").toLowerCase() !== \"module\") {\n\n\t\t\t\t\t\t\t\t// Optional AJAX dependency, but won't run scripts if not present\n\t\t\t\t\t\t\t\tif (jQuery._evalUrl && !node.noModule) {\n\t\t\t\t\t\t\t\t\tjQuery._evalUrl(node.src, {\n\t\t\t\t\t\t\t\t\t\tnonce: node.nonce || node.getAttribute(\"nonce\")\n\t\t\t\t\t\t\t\t\t}, doc);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t// Unwrap a CDATA section containing script contents. This shouldn't be\n\t\t\t\t\t\t\t\t// needed as in XML documents they're already not visible when\n\t\t\t\t\t\t\t\t// inspecting element contents and in HTML documents they have no\n\t\t\t\t\t\t\t\t// meaning but we're preserving that logic for backwards compatibility.\n\t\t\t\t\t\t\t\t// This will be removed completely in 4.0. See gh-4904.\n\t\t\t\t\t\t\t\tDOMEval(node.textContent.replace(rcleanScript, \"\"), node, doc);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn collection;\n\t}\n\n\tfunction remove(elem, selector, keepData) {\n\t\tvar node,\n\t\t\tnodes = selector ? jQuery.filter(selector, elem) : elem,\n\t\t\ti = 0;\n\n\t\tfor (; (node = nodes[i]) != null; i++) {\n\t\t\tif (!keepData && node.nodeType === 1) {\n\t\t\t\tjQuery.cleanData(getAll(node));\n\t\t\t}\n\n\t\t\tif (node.parentNode) {\n\t\t\t\tif (keepData && isAttached(node)) {\n\t\t\t\t\tsetGlobalEval(getAll(node, \"script\"));\n\t\t\t\t}\n\t\t\t\tnode.parentNode.removeChild(node);\n\t\t\t}\n\t\t}\n\n\t\treturn elem;\n\t}\n\n\tjQuery.extend({\n\t\thtmlPrefilter: function (html) {\n\t\t\treturn html;\n\t\t},\n\n\t\tclone: function (elem, dataAndEvents, deepDataAndEvents) {\n\t\t\tvar i, l, srcElements, destElements,\n\t\t\t\tclone = elem.cloneNode(true),\n\t\t\t\tinPage = isAttached(elem);\n\n\t\t\t// Fix IE cloning issues\n\t\t\tif (!support.noCloneChecked && (elem.nodeType === 1 || elem.nodeType === 11) &&\n\t\t\t\t!jQuery.isXMLDoc(elem)) {\n\n\t\t\t\t// We eschew jQuery#find here for performance reasons:\n\t\t\t\t// https://jsperf.com/getall-vs-sizzle/2\n\t\t\t\tdestElements = getAll(clone);\n\t\t\t\tsrcElements = getAll(elem);\n\n\t\t\t\tfor (i = 0, l = srcElements.length; i < l; i++) {\n\t\t\t\t\tfixInput(srcElements[i], destElements[i]);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Copy the events from the original to the clone\n\t\t\tif (dataAndEvents) {\n\t\t\t\tif (deepDataAndEvents) {\n\t\t\t\t\tsrcElements = srcElements || getAll(elem);\n\t\t\t\t\tdestElements = destElements || getAll(clone);\n\n\t\t\t\t\tfor (i = 0, l = srcElements.length; i < l; i++) {\n\t\t\t\t\t\tcloneCopyEvent(srcElements[i], destElements[i]);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tcloneCopyEvent(elem, clone);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Preserve script evaluation history\n\t\t\tdestElements = getAll(clone, \"script\");\n\t\t\tif (destElements.length > 0) {\n\t\t\t\tsetGlobalEval(destElements, !inPage && getAll(elem, \"script\"));\n\t\t\t}\n\n\t\t\t// Return the cloned set\n\t\t\treturn clone;\n\t\t},\n\n\t\tcleanData: function (elems) {\n\t\t\tvar data, elem, type,\n\t\t\t\tspecial = jQuery.event.special,\n\t\t\t\ti = 0;\n\n\t\t\tfor (; (elem = elems[i]) !== undefined; i++) {\n\t\t\t\tif (acceptData(elem)) {\n\t\t\t\t\tif ((data = elem[dataPriv.expando])) {\n\t\t\t\t\t\tif (data.events) {\n\t\t\t\t\t\t\tfor (type in data.events) {\n\t\t\t\t\t\t\t\tif (special[type]) {\n\t\t\t\t\t\t\t\t\tjQuery.event.remove(elem, type);\n\n\t\t\t\t\t\t\t\t\t// This is a shortcut to avoid jQuery.event.remove's overhead\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tjQuery.removeEvent(elem, type, data.handle);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\t\telem[dataPriv.expando] = undefined;\n\t\t\t\t\t}\n\t\t\t\t\tif (elem[dataUser.expando]) {\n\n\t\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\t\telem[dataUser.expando] = undefined;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\n\tjQuery.fn.extend({\n\t\tdetach: function (selector) {\n\t\t\treturn remove(this, selector, true);\n\t\t},\n\n\t\tremove: function (selector) {\n\t\t\treturn remove(this, selector);\n\t\t},\n\n\t\ttext: function (value) {\n\t\t\treturn access(this, function (value) {\n\t\t\t\treturn value === undefined ?\n\t\t\t\t\tjQuery.text(this) :\n\t\t\t\t\tthis.empty().each(function () {\n\t\t\t\t\t\tif (this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9) {\n\t\t\t\t\t\t\tthis.textContent = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t}, null, value, arguments.length);\n\t\t},\n\n\t\tappend: function () {\n\t\t\treturn domManip(this, arguments, function (elem) {\n\t\t\t\tif (this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9) {\n\t\t\t\t\tvar target = manipulationTarget(this, elem);\n\t\t\t\t\ttarget.appendChild(elem);\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\tprepend: function () {\n\t\t\treturn domManip(this, arguments, function (elem) {\n\t\t\t\tif (this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9) {\n\t\t\t\t\tvar target = manipulationTarget(this, elem);\n\t\t\t\t\ttarget.insertBefore(elem, target.firstChild);\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\tbefore: function () {\n\t\t\treturn domManip(this, arguments, function (elem) {\n\t\t\t\tif (this.parentNode) {\n\t\t\t\t\tthis.parentNode.insertBefore(elem, this);\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\tafter: function () {\n\t\t\treturn domManip(this, arguments, function (elem) {\n\t\t\t\tif (this.parentNode) {\n\t\t\t\t\tthis.parentNode.insertBefore(elem, this.nextSibling);\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\tempty: function () {\n\t\t\tvar elem,\n\t\t\t\ti = 0;\n\n\t\t\tfor (; (elem = this[i]) != null; i++) {\n\t\t\t\tif (elem.nodeType === 1) {\n\n\t\t\t\t\t// Prevent memory leaks\n\t\t\t\t\tjQuery.cleanData(getAll(elem, false));\n\n\t\t\t\t\t// Remove any remaining nodes\n\t\t\t\t\telem.textContent = \"\";\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn this;\n\t\t},\n\n\t\tclone: function (dataAndEvents, deepDataAndEvents) {\n\t\t\tdataAndEvents = dataAndEvents == null ? false : dataAndEvents;\n\t\t\tdeepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;\n\n\t\t\treturn this.map(function () {\n\t\t\t\treturn jQuery.clone(this, dataAndEvents, deepDataAndEvents);\n\t\t\t});\n\t\t},\n\n\t\thtml: function (value) {\n\t\t\treturn access(this, function (value) {\n\t\t\t\tvar elem = this[0] || {},\n\t\t\t\t\ti = 0,\n\t\t\t\t\tl = this.length;\n\n\t\t\t\tif (value === undefined && elem.nodeType === 1) {\n\t\t\t\t\treturn elem.innerHTML;\n\t\t\t\t}\n\n\t\t\t\t// See if we can take a shortcut and just use innerHTML\n\t\t\t\tif (typeof value === \"string\" && !rnoInnerhtml.test(value) &&\n\t\t\t\t\t!wrapMap[(rtagName.exec(value) || [\"\", \"\"])[1].toLowerCase()]) {\n\n\t\t\t\t\tvalue = jQuery.htmlPrefilter(value);\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tfor (; i < l; i++) {\n\t\t\t\t\t\t\telem = this[i] || {};\n\n\t\t\t\t\t\t\t// Remove element nodes and prevent memory leaks\n\t\t\t\t\t\t\tif (elem.nodeType === 1) {\n\t\t\t\t\t\t\t\tjQuery.cleanData(getAll(elem, false));\n\t\t\t\t\t\t\t\telem.innerHTML = value;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\telem = 0;\n\n\t\t\t\t\t\t// If using innerHTML throws an exception, use the fallback method\n\t\t\t\t\t} catch (e) { }\n\t\t\t\t}\n\n\t\t\t\tif (elem) {\n\t\t\t\t\tthis.empty().append(value);\n\t\t\t\t}\n\t\t\t}, null, value, arguments.length);\n\t\t},\n\n\t\treplaceWith: function () {\n\t\t\tvar ignored = [];\n\n\t\t\t// Make the changes, replacing each non-ignored context element with the new content\n\t\t\treturn domManip(this, arguments, function (elem) {\n\t\t\t\tvar parent = this.parentNode;\n\n\t\t\t\tif (jQuery.inArray(this, ignored) < 0) {\n\t\t\t\t\tjQuery.cleanData(getAll(this));\n\t\t\t\t\tif (parent) {\n\t\t\t\t\t\tparent.replaceChild(elem, this);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Force callback invocation\n\t\t\t}, ignored);\n\t\t}\n\t});\n\n\tjQuery.each({\n\t\tappendTo: \"append\",\n\t\tprependTo: \"prepend\",\n\t\tinsertBefore: \"before\",\n\t\tinsertAfter: \"after\",\n\t\treplaceAll: \"replaceWith\"\n\t}, function (name, original) {\n\t\tjQuery.fn[name] = function (selector) {\n\t\t\tvar elems,\n\t\t\t\tret = [],\n\t\t\t\tinsert = jQuery(selector),\n\t\t\t\tlast = insert.length - 1,\n\t\t\t\ti = 0;\n\n\t\t\tfor (; i <= last; i++) {\n\t\t\t\telems = i === last ? this : this.clone(true);\n\t\t\t\tjQuery(insert[i])[original](elems);\n\n\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t// .get() because push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\tpush.apply(ret, elems.get());\n\t\t\t}\n\n\t\t\treturn this.pushStack(ret);\n\t\t};\n\t});\n\tvar rnumnonpx = new RegExp(\"^(\" + pnum + \")(?!px)[a-z%]+$\", \"i\");\n\n\tvar rcustomProp = /^--/;\n\n\n\tvar getStyles = function (elem) {\n\n\t\t// Support: IE <=11 only, Firefox <=30 (trac-15098, trac-14150)\n\t\t// IE throws on elements created in popups\n\t\t// FF meanwhile throws on frame elements through \"defaultView.getComputedStyle\"\n\t\tvar view = elem.ownerDocument.defaultView;\n\n\t\tif (!view || !view.opener) {\n\t\t\tview = window;\n\t\t}\n\n\t\treturn view.getComputedStyle(elem);\n\t};\n\n\tvar swap = function (elem, options, callback) {\n\t\tvar ret, name,\n\t\t\told = {};\n\n\t\t// Remember the old values, and insert the new ones\n\t\tfor (name in options) {\n\t\t\told[name] = elem.style[name];\n\t\t\telem.style[name] = options[name];\n\t\t}\n\n\t\tret = callback.call(elem);\n\n\t\t// Revert the old values\n\t\tfor (name in options) {\n\t\t\telem.style[name] = old[name];\n\t\t}\n\n\t\treturn ret;\n\t};\n\n\n\tvar rboxStyle = new RegExp(cssExpand.join(\"|\"), \"i\");\n\n\n\n\t(function () {\n\n\t\t// Executing both pixelPosition & boxSizingReliable tests require only one layout\n\t\t// so they're executed at the same time to save the second computation.\n\t\tfunction computeStyleTests() {\n\n\t\t\t// This is a singleton, we need to execute it only once\n\t\t\tif (!div) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tcontainer.style.cssText = \"position:absolute;left:-11111px;width:60px;\" +\n\t\t\t\t\"margin-top:1px;padding:0;border:0\";\n\t\t\tdiv.style.cssText =\n\t\t\t\t\"position:relative;display:block;box-sizing:border-box;overflow:scroll;\" +\n\t\t\t\t\"margin:auto;border:1px;padding:1px;\" +\n\t\t\t\t\"width:60%;top:1%\";\n\t\t\tdocumentElement.appendChild(container).appendChild(div);\n\n\t\t\tvar divStyle = window.getComputedStyle(div);\n\t\t\tpixelPositionVal = divStyle.top !== \"1%\";\n\n\t\t\t// Support: Android 4.0 - 4.3 only, Firefox <=3 - 44\n\t\t\treliableMarginLeftVal = roundPixelMeasures(divStyle.marginLeft) === 12;\n\n\t\t\t// Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3\n\t\t\t// Some styles come back with percentage values, even though they shouldn't\n\t\t\tdiv.style.right = \"60%\";\n\t\t\tpixelBoxStylesVal = roundPixelMeasures(divStyle.right) === 36;\n\n\t\t\t// Support: IE 9 - 11 only\n\t\t\t// Detect misreporting of content dimensions for box-sizing:border-box elements\n\t\t\tboxSizingReliableVal = roundPixelMeasures(divStyle.width) === 36;\n\n\t\t\t// Support: IE 9 only\n\t\t\t// Detect overflow:scroll screwiness (gh-3699)\n\t\t\t// Support: Chrome <=64\n\t\t\t// Don't get tricked when zoom affects offsetWidth (gh-4029)\n\t\t\tdiv.style.position = \"absolute\";\n\t\t\tscrollboxSizeVal = roundPixelMeasures(div.offsetWidth / 3) === 12;\n\n\t\t\tdocumentElement.removeChild(container);\n\n\t\t\t// Nullify the div so it wouldn't be stored in the memory and\n\t\t\t// it will also be a sign that checks already performed\n\t\t\tdiv = null;\n\t\t}\n\n\t\tfunction roundPixelMeasures(measure) {\n\t\t\treturn Math.round(parseFloat(measure));\n\t\t}\n\n\t\tvar pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal,\n\t\t\treliableTrDimensionsVal, reliableMarginLeftVal,\n\t\t\tcontainer = document.createElement(\"div\"),\n\t\t\tdiv = document.createElement(\"div\");\n\n\t\t// Finish early in limited (non-browser) environments\n\t\tif (!div.style) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Support: IE <=9 - 11 only\n\t\t// Style of cloned element affects source element cloned (trac-8908)\n\t\tdiv.style.backgroundClip = \"content-box\";\n\t\tdiv.cloneNode(true).style.backgroundClip = \"\";\n\t\tsupport.clearCloneStyle = div.style.backgroundClip === \"content-box\";\n\n\t\tjQuery.extend(support, {\n\t\t\tboxSizingReliable: function () {\n\t\t\t\tcomputeStyleTests();\n\t\t\t\treturn boxSizingReliableVal;\n\t\t\t},\n\t\t\tpixelBoxStyles: function () {\n\t\t\t\tcomputeStyleTests();\n\t\t\t\treturn pixelBoxStylesVal;\n\t\t\t},\n\t\t\tpixelPosition: function () {\n\t\t\t\tcomputeStyleTests();\n\t\t\t\treturn pixelPositionVal;\n\t\t\t},\n\t\t\treliableMarginLeft: function () {\n\t\t\t\tcomputeStyleTests();\n\t\t\t\treturn reliableMarginLeftVal;\n\t\t\t},\n\t\t\tscrollboxSize: function () {\n\t\t\t\tcomputeStyleTests();\n\t\t\t\treturn scrollboxSizeVal;\n\t\t\t},\n\n\t\t\t// Support: IE 9 - 11+, Edge 15 - 18+\n\t\t\t// IE/Edge misreport `getComputedStyle` of table rows with width/height\n\t\t\t// set in CSS while `offset*` properties report correct values.\n\t\t\t// Behavior in IE 9 is more subtle than in newer versions & it passes\n\t\t\t// some versions of this test; make sure not to make it pass there!\n\t\t\t//\n\t\t\t// Support: Firefox 70+\n\t\t\t// Only Firefox includes border widths\n\t\t\t// in computed dimensions. (gh-4529)\n\t\t\treliableTrDimensions: function () {\n\t\t\t\tvar table, tr, trChild, trStyle;\n\t\t\t\tif (reliableTrDimensionsVal == null) {\n\t\t\t\t\ttable = document.createElement(\"table\");\n\t\t\t\t\ttr = document.createElement(\"tr\");\n\t\t\t\t\ttrChild = document.createElement(\"div\");\n\n\t\t\t\t\ttable.style.cssText = \"position:absolute;left:-11111px;border-collapse:separate\";\n\t\t\t\t\ttr.style.cssText = \"border:1px solid\";\n\n\t\t\t\t\t// Support: Chrome 86+\n\t\t\t\t\t// Height set through cssText does not get applied.\n\t\t\t\t\t// Computed height then comes back as 0.\n\t\t\t\t\ttr.style.height = \"1px\";\n\t\t\t\t\ttrChild.style.height = \"9px\";\n\n\t\t\t\t\t// Support: Android 8 Chrome 86+\n\t\t\t\t\t// In our bodyBackground.html iframe,\n\t\t\t\t\t// display for all div elements is set to \"inline\",\n\t\t\t\t\t// which causes a problem only in Android 8 Chrome 86.\n\t\t\t\t\t// Ensuring the div is display: block\n\t\t\t\t\t// gets around this issue.\n\t\t\t\t\ttrChild.style.display = \"block\";\n\n\t\t\t\t\tdocumentElement\n\t\t\t\t\t\t.appendChild(table)\n\t\t\t\t\t\t.appendChild(tr)\n\t\t\t\t\t\t.appendChild(trChild);\n\n\t\t\t\t\ttrStyle = window.getComputedStyle(tr);\n\t\t\t\t\treliableTrDimensionsVal = (parseInt(trStyle.height, 10) +\n\t\t\t\t\t\tparseInt(trStyle.borderTopWidth, 10) +\n\t\t\t\t\t\tparseInt(trStyle.borderBottomWidth, 10)) === tr.offsetHeight;\n\n\t\t\t\t\tdocumentElement.removeChild(table);\n\t\t\t\t}\n\t\t\t\treturn reliableTrDimensionsVal;\n\t\t\t}\n\t\t});\n\t})();\n\n\n\tfunction curCSS(elem, name, computed) {\n\t\tvar width, minWidth, maxWidth, ret,\n\t\t\tisCustomProp = rcustomProp.test(name),\n\n\t\t\t// Support: Firefox 51+\n\t\t\t// Retrieving style before computed somehow\n\t\t\t// fixes an issue with getting wrong values\n\t\t\t// on detached elements\n\t\t\tstyle = elem.style;\n\n\t\tcomputed = computed || getStyles(elem);\n\n\t\t// getPropertyValue is needed for:\n\t\t//   .css('filter') (IE 9 only, trac-12537)\n\t\t//   .css('--customProperty) (gh-3144)\n\t\tif (computed) {\n\n\t\t\t// Support: IE <=9 - 11+\n\t\t\t// IE only supports `\"float\"` in `getPropertyValue`; in computed styles\n\t\t\t// it's only available as `\"cssFloat\"`. We no longer modify properties\n\t\t\t// sent to `.css()` apart from camelCasing, so we need to check both.\n\t\t\t// Normally, this would create difference in behavior: if\n\t\t\t// `getPropertyValue` returns an empty string, the value returned\n\t\t\t// by `.css()` would be `undefined`. This is usually the case for\n\t\t\t// disconnected elements. However, in IE even disconnected elements\n\t\t\t// with no styles return `\"none\"` for `getPropertyValue( \"float\" )`\n\t\t\tret = computed.getPropertyValue(name) || computed[name];\n\n\t\t\tif (isCustomProp && ret) {\n\n\t\t\t\t// Support: Firefox 105+, Chrome <=105+\n\t\t\t\t// Spec requires trimming whitespace for custom properties (gh-4926).\n\t\t\t\t// Firefox only trims leading whitespace. Chrome just collapses\n\t\t\t\t// both leading & trailing whitespace to a single space.\n\t\t\t\t//\n\t\t\t\t// Fall back to `undefined` if empty string returned.\n\t\t\t\t// This collapses a missing definition with property defined\n\t\t\t\t// and set to an empty string but there's no standard API\n\t\t\t\t// allowing us to differentiate them without a performance penalty\n\t\t\t\t// and returning `undefined` aligns with older jQuery.\n\t\t\t\t//\n\t\t\t\t// rtrimCSS treats U+000D CARRIAGE RETURN and U+000C FORM FEED\n\t\t\t\t// as whitespace while CSS does not, but this is not a problem\n\t\t\t\t// because CSS preprocessing replaces them with U+000A LINE FEED\n\t\t\t\t// (which *is* CSS whitespace)\n\t\t\t\t// https://www.w3.org/TR/css-syntax-3/#input-preprocessing\n\t\t\t\tret = ret.replace(rtrimCSS, \"$1\") || undefined;\n\t\t\t}\n\n\t\t\tif (ret === \"\" && !isAttached(elem)) {\n\t\t\t\tret = jQuery.style(elem, name);\n\t\t\t}\n\n\t\t\t// A tribute to the \"awesome hack by Dean Edwards\"\n\t\t\t// Android Browser returns percentage for some values,\n\t\t\t// but width seems to be reliably pixels.\n\t\t\t// This is against the CSSOM draft spec:\n\t\t\t// https://drafts.csswg.org/cssom/#resolved-values\n\t\t\tif (!support.pixelBoxStyles() && rnumnonpx.test(ret) && rboxStyle.test(name)) {\n\n\t\t\t\t// Remember the original values\n\t\t\t\twidth = style.width;\n\t\t\t\tminWidth = style.minWidth;\n\t\t\t\tmaxWidth = style.maxWidth;\n\n\t\t\t\t// Put in the new values to get a computed value out\n\t\t\t\tstyle.minWidth = style.maxWidth = style.width = ret;\n\t\t\t\tret = computed.width;\n\n\t\t\t\t// Revert the changed values\n\t\t\t\tstyle.width = width;\n\t\t\t\tstyle.minWidth = minWidth;\n\t\t\t\tstyle.maxWidth = maxWidth;\n\t\t\t}\n\t\t}\n\n\t\treturn ret !== undefined ?\n\n\t\t\t// Support: IE <=9 - 11 only\n\t\t\t// IE returns zIndex value as an integer.\n\t\t\tret + \"\" :\n\t\t\tret;\n\t}\n\n\n\tfunction addGetHookIf(conditionFn, hookFn) {\n\n\t\t// Define the hook, we'll check on the first run if it's really needed.\n\t\treturn {\n\t\t\tget: function () {\n\t\t\t\tif (conditionFn()) {\n\n\t\t\t\t\t// Hook not needed (or it's not possible to use it due\n\t\t\t\t\t// to missing dependency), remove it.\n\t\t\t\t\tdelete this.get;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Hook needed; redefine it so that the support test is not executed again.\n\t\t\t\treturn (this.get = hookFn).apply(this, arguments);\n\t\t\t}\n\t\t};\n\t}\n\n\n\tvar cssPrefixes = [\"Webkit\", \"Moz\", \"ms\"],\n\t\temptyStyle = document.createElement(\"div\").style,\n\t\tvendorProps = {};\n\n\t// Return a vendor-prefixed property or undefined\n\tfunction vendorPropName(name) {\n\n\t\t// Check for vendor prefixed names\n\t\tvar capName = name[0].toUpperCase() + name.slice(1),\n\t\t\ti = cssPrefixes.length;\n\n\t\twhile (i--) {\n\t\t\tname = cssPrefixes[i] + capName;\n\t\t\tif (name in emptyStyle) {\n\t\t\t\treturn name;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return a potentially-mapped jQuery.cssProps or vendor prefixed property\n\tfunction finalPropName(name) {\n\t\tvar final = jQuery.cssProps[name] || vendorProps[name];\n\n\t\tif (final) {\n\t\t\treturn final;\n\t\t}\n\t\tif (name in emptyStyle) {\n\t\t\treturn name;\n\t\t}\n\t\treturn vendorProps[name] = vendorPropName(name) || name;\n\t}\n\n\n\tvar\n\n\t\t// Swappable if display is none or starts with table\n\t\t// except \"table\", \"table-cell\", or \"table-caption\"\n\t\t// See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display\n\t\trdisplayswap = /^(none|table(?!-c[ea]).+)/,\n\t\tcssShow = { position: \"absolute\", visibility: \"hidden\", display: \"block\" },\n\t\tcssNormalTransform = {\n\t\t\tletterSpacing: \"0\",\n\t\t\tfontWeight: \"400\"\n\t\t};\n\n\tfunction setPositiveNumber(_elem, value, subtract) {\n\n\t\t// Any relative (+/-) values have already been\n\t\t// normalized at this point\n\t\tvar matches = rcssNum.exec(value);\n\t\treturn matches ?\n\n\t\t\t// Guard against undefined \"subtract\", e.g., when used as in cssHooks\n\t\t\tMath.max(0, matches[2] - (subtract || 0)) + (matches[3] || \"px\") :\n\t\t\tvalue;\n\t}\n\n\tfunction boxModelAdjustment(elem, dimension, box, isBorderBox, styles, computedVal) {\n\t\tvar i = dimension === \"width\" ? 1 : 0,\n\t\t\textra = 0,\n\t\t\tdelta = 0,\n\t\t\tmarginDelta = 0;\n\n\t\t// Adjustment may not be necessary\n\t\tif (box === (isBorderBox ? \"border\" : \"content\")) {\n\t\t\treturn 0;\n\t\t}\n\n\t\tfor (; i < 4; i += 2) {\n\n\t\t\t// Both box models exclude margin\n\t\t\t// Count margin delta separately to only add it after scroll gutter adjustment.\n\t\t\t// This is needed to make negative margins work with `outerHeight( true )` (gh-3982).\n\t\t\tif (box === \"margin\") {\n\t\t\t\tmarginDelta += jQuery.css(elem, box + cssExpand[i], true, styles);\n\t\t\t}\n\n\t\t\t// If we get here with a content-box, we're seeking \"padding\" or \"border\" or \"margin\"\n\t\t\tif (!isBorderBox) {\n\n\t\t\t\t// Add padding\n\t\t\t\tdelta += jQuery.css(elem, \"padding\" + cssExpand[i], true, styles);\n\n\t\t\t\t// For \"border\" or \"margin\", add border\n\t\t\t\tif (box !== \"padding\") {\n\t\t\t\t\tdelta += jQuery.css(elem, \"border\" + cssExpand[i] + \"Width\", true, styles);\n\n\t\t\t\t\t// But still keep track of it otherwise\n\t\t\t\t} else {\n\t\t\t\t\textra += jQuery.css(elem, \"border\" + cssExpand[i] + \"Width\", true, styles);\n\t\t\t\t}\n\n\t\t\t\t// If we get here with a border-box (content + padding + border), we're seeking \"content\" or\n\t\t\t\t// \"padding\" or \"margin\"\n\t\t\t} else {\n\n\t\t\t\t// For \"content\", subtract padding\n\t\t\t\tif (box === \"content\") {\n\t\t\t\t\tdelta -= jQuery.css(elem, \"padding\" + cssExpand[i], true, styles);\n\t\t\t\t}\n\n\t\t\t\t// For \"content\" or \"padding\", subtract border\n\t\t\t\tif (box !== \"margin\") {\n\t\t\t\t\tdelta -= jQuery.css(elem, \"border\" + cssExpand[i] + \"Width\", true, styles);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Account for positive content-box scroll gutter when requested by providing computedVal\n\t\tif (!isBorderBox && computedVal >= 0) {\n\n\t\t\t// offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border\n\t\t\t// Assuming integer scroll gutter, subtract the rest and round down\n\t\t\tdelta += Math.max(0, Math.ceil(\n\t\t\t\telem[\"offset\" + dimension[0].toUpperCase() + dimension.slice(1)] -\n\t\t\t\tcomputedVal -\n\t\t\t\tdelta -\n\t\t\t\textra -\n\t\t\t\t0.5\n\n\t\t\t\t// If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter\n\t\t\t\t// Use an explicit zero to avoid NaN (gh-3964)\n\t\t\t)) || 0;\n\t\t}\n\n\t\treturn delta + marginDelta;\n\t}\n\n\tfunction getWidthOrHeight(elem, dimension, extra) {\n\n\t\t// Start with computed style\n\t\tvar styles = getStyles(elem),\n\n\t\t\t// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322).\n\t\t\t// Fake content-box until we know it's needed to know the true value.\n\t\t\tboxSizingNeeded = !support.boxSizingReliable() || extra,\n\t\t\tisBorderBox = boxSizingNeeded &&\n\t\t\t\tjQuery.css(elem, \"boxSizing\", false, styles) === \"border-box\",\n\t\t\tvalueIsBorderBox = isBorderBox,\n\n\t\t\tval = curCSS(elem, dimension, styles),\n\t\t\toffsetProp = \"offset\" + dimension[0].toUpperCase() + dimension.slice(1);\n\n\t\t// Support: Firefox <=54\n\t\t// Return a confounding non-pixel value or feign ignorance, as appropriate.\n\t\tif (rnumnonpx.test(val)) {\n\t\t\tif (!extra) {\n\t\t\t\treturn val;\n\t\t\t}\n\t\t\tval = \"auto\";\n\t\t}\n\n\n\t\t// Support: IE 9 - 11 only\n\t\t// Use offsetWidth/offsetHeight for when box sizing is unreliable.\n\t\t// In those cases, the computed value can be trusted to be border-box.\n\t\tif ((!support.boxSizingReliable() && isBorderBox ||\n\n\t\t\t// Support: IE 10 - 11+, Edge 15 - 18+\n\t\t\t// IE/Edge misreport `getComputedStyle` of table rows with width/height\n\t\t\t// set in CSS while `offset*` properties report correct values.\n\t\t\t// Interestingly, in some cases IE 9 doesn't suffer from this issue.\n\t\t\t!support.reliableTrDimensions() && nodeName(elem, \"tr\") ||\n\n\t\t\t// Fall back to offsetWidth/offsetHeight when value is \"auto\"\n\t\t\t// This happens for inline elements with no explicit setting (gh-3571)\n\t\t\tval === \"auto\" ||\n\n\t\t\t// Support: Android <=4.1 - 4.3 only\n\t\t\t// Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602)\n\t\t\t!parseFloat(val) && jQuery.css(elem, \"display\", false, styles) === \"inline\") &&\n\n\t\t\t// Make sure the element is visible & connected\n\t\t\telem.getClientRects().length) {\n\n\t\t\tisBorderBox = jQuery.css(elem, \"boxSizing\", false, styles) === \"border-box\";\n\n\t\t\t// Where available, offsetWidth/offsetHeight approximate border box dimensions.\n\t\t\t// Where not available (e.g., SVG), assume unreliable box-sizing and interpret the\n\t\t\t// retrieved value as a content box dimension.\n\t\t\tvalueIsBorderBox = offsetProp in elem;\n\t\t\tif (valueIsBorderBox) {\n\t\t\t\tval = elem[offsetProp];\n\t\t\t}\n\t\t}\n\n\t\t// Normalize \"\" and auto\n\t\tval = parseFloat(val) || 0;\n\n\t\t// Adjust for the element's box model\n\t\treturn (val +\n\t\t\tboxModelAdjustment(\n\t\t\t\telem,\n\t\t\t\tdimension,\n\t\t\t\textra || (isBorderBox ? \"border\" : \"content\"),\n\t\t\t\tvalueIsBorderBox,\n\t\t\t\tstyles,\n\n\t\t\t\t// Provide the current computed size to request scroll gutter calculation (gh-3589)\n\t\t\t\tval\n\t\t\t)\n\t\t) + \"px\";\n\t}\n\n\tjQuery.extend({\n\n\t\t// Add in style property hooks for overriding the default\n\t\t// behavior of getting and setting a style property\n\t\tcssHooks: {\n\t\t\topacity: {\n\t\t\t\tget: function (elem, computed) {\n\t\t\t\t\tif (computed) {\n\n\t\t\t\t\t\t// We should always get a number back from opacity\n\t\t\t\t\t\tvar ret = curCSS(elem, \"opacity\");\n\t\t\t\t\t\treturn ret === \"\" ? \"1\" : ret;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t// Don't automatically add \"px\" to these possibly-unitless properties\n\t\tcssNumber: {\n\t\t\tanimationIterationCount: true,\n\t\t\taspectRatio: true,\n\t\t\tborderImageSlice: true,\n\t\t\tcolumnCount: true,\n\t\t\tflexGrow: true,\n\t\t\tflexShrink: true,\n\t\t\tfontWeight: true,\n\t\t\tgridArea: true,\n\t\t\tgridColumn: true,\n\t\t\tgridColumnEnd: true,\n\t\t\tgridColumnStart: true,\n\t\t\tgridRow: true,\n\t\t\tgridRowEnd: true,\n\t\t\tgridRowStart: true,\n\t\t\tlineHeight: true,\n\t\t\topacity: true,\n\t\t\torder: true,\n\t\t\torphans: true,\n\t\t\tscale: true,\n\t\t\twidows: true,\n\t\t\tzIndex: true,\n\t\t\tzoom: true,\n\n\t\t\t// SVG-related\n\t\t\tfillOpacity: true,\n\t\t\tfloodOpacity: true,\n\t\t\tstopOpacity: true,\n\t\t\tstrokeMiterlimit: true,\n\t\t\tstrokeOpacity: true\n\t\t},\n\n\t\t// Add in properties whose names you wish to fix before\n\t\t// setting or getting the value\n\t\tcssProps: {},\n\n\t\t// Get and set the style property on a DOM Node\n\t\tstyle: function (elem, name, value, extra) {\n\n\t\t\t// Don't set styles on text and comment nodes\n\t\t\tif (!elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Make sure that we're working with the right name\n\t\t\tvar ret, type, hooks,\n\t\t\t\torigName = camelCase(name),\n\t\t\t\tisCustomProp = rcustomProp.test(name),\n\t\t\t\tstyle = elem.style;\n\n\t\t\t// Make sure that we're working with the right name. We don't\n\t\t\t// want to query the value if it is a CSS custom property\n\t\t\t// since they are user-defined.\n\t\t\tif (!isCustomProp) {\n\t\t\t\tname = finalPropName(origName);\n\t\t\t}\n\n\t\t\t// Gets hook for the prefixed version, then unprefixed version\n\t\t\thooks = jQuery.cssHooks[name] || jQuery.cssHooks[origName];\n\n\t\t\t// Check if we're setting a value\n\t\t\tif (value !== undefined) {\n\t\t\t\ttype = typeof value;\n\n\t\t\t\t// Convert \"+=\" or \"-=\" to relative numbers (trac-7345)\n\t\t\t\tif (type === \"string\" && (ret = rcssNum.exec(value)) && ret[1]) {\n\t\t\t\t\tvalue = adjustCSS(elem, name, ret);\n\n\t\t\t\t\t// Fixes bug trac-9237\n\t\t\t\t\ttype = \"number\";\n\t\t\t\t}\n\n\t\t\t\t// Make sure that null and NaN values aren't set (trac-7116)\n\t\t\t\tif (value == null || value !== value) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// If a number was passed in, add the unit (except for certain CSS properties)\n\t\t\t\t// The isCustomProp check can be removed in jQuery 4.0 when we only auto-append\n\t\t\t\t// \"px\" to a few hardcoded values.\n\t\t\t\tif (type === \"number\" && !isCustomProp) {\n\t\t\t\t\tvalue += ret && ret[3] || (jQuery.cssNumber[origName] ? \"\" : \"px\");\n\t\t\t\t}\n\n\t\t\t\t// background-* props affect original clone's values\n\t\t\t\tif (!support.clearCloneStyle && value === \"\" && name.indexOf(\"background\") === 0) {\n\t\t\t\t\tstyle[name] = \"inherit\";\n\t\t\t\t}\n\n\t\t\t\t// If a hook was provided, use that value, otherwise just set the specified value\n\t\t\t\tif (!hooks || !(\"set\" in hooks) ||\n\t\t\t\t\t(value = hooks.set(elem, value, extra)) !== undefined) {\n\n\t\t\t\t\tif (isCustomProp) {\n\t\t\t\t\t\tstyle.setProperty(name, value);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tstyle[name] = value;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\t// If a hook was provided get the non-computed value from there\n\t\t\t\tif (hooks && \"get\" in hooks &&\n\t\t\t\t\t(ret = hooks.get(elem, false, extra)) !== undefined) {\n\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\n\t\t\t\t// Otherwise just get the value from the style object\n\t\t\t\treturn style[name];\n\t\t\t}\n\t\t},\n\n\t\tcss: function (elem, name, extra, styles) {\n\t\t\tvar val, num, hooks,\n\t\t\t\torigName = camelCase(name),\n\t\t\t\tisCustomProp = rcustomProp.test(name);\n\n\t\t\t// Make sure that we're working with the right name. We don't\n\t\t\t// want to modify the value if it is a CSS custom property\n\t\t\t// since they are user-defined.\n\t\t\tif (!isCustomProp) {\n\t\t\t\tname = finalPropName(origName);\n\t\t\t}\n\n\t\t\t// Try prefixed name followed by the unprefixed name\n\t\t\thooks = jQuery.cssHooks[name] || jQuery.cssHooks[origName];\n\n\t\t\t// If a hook was provided get the computed value from there\n\t\t\tif (hooks && \"get\" in hooks) {\n\t\t\t\tval = hooks.get(elem, true, extra);\n\t\t\t}\n\n\t\t\t// Otherwise, if a way to get the computed value exists, use that\n\t\t\tif (val === undefined) {\n\t\t\t\tval = curCSS(elem, name, styles);\n\t\t\t}\n\n\t\t\t// Convert \"normal\" to computed value\n\t\t\tif (val === \"normal\" && name in cssNormalTransform) {\n\t\t\t\tval = cssNormalTransform[name];\n\t\t\t}\n\n\t\t\t// Make numeric if forced or a qualifier was provided and val looks numeric\n\t\t\tif (extra === \"\" || extra) {\n\t\t\t\tnum = parseFloat(val);\n\t\t\t\treturn extra === true || isFinite(num) ? num || 0 : val;\n\t\t\t}\n\n\t\t\treturn val;\n\t\t}\n\t});\n\n\tjQuery.each([\"height\", \"width\"], function (_i, dimension) {\n\t\tjQuery.cssHooks[dimension] = {\n\t\t\tget: function (elem, computed, extra) {\n\t\t\t\tif (computed) {\n\n\t\t\t\t\t// Certain elements can have dimension info if we invisibly show them\n\t\t\t\t\t// but it must have a current display style that would benefit\n\t\t\t\t\treturn rdisplayswap.test(jQuery.css(elem, \"display\")) &&\n\n\t\t\t\t\t\t// Support: Safari 8+\n\t\t\t\t\t\t// Table columns in Safari have non-zero offsetWidth & zero\n\t\t\t\t\t\t// getBoundingClientRect().width unless display is changed.\n\t\t\t\t\t\t// Support: IE <=11 only\n\t\t\t\t\t\t// Running getBoundingClientRect on a disconnected node\n\t\t\t\t\t\t// in IE throws an error.\n\t\t\t\t\t\t(!elem.getClientRects().length || !elem.getBoundingClientRect().width) ?\n\t\t\t\t\t\tswap(elem, cssShow, function () {\n\t\t\t\t\t\t\treturn getWidthOrHeight(elem, dimension, extra);\n\t\t\t\t\t\t}) :\n\t\t\t\t\t\tgetWidthOrHeight(elem, dimension, extra);\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tset: function (elem, value, extra) {\n\t\t\t\tvar matches,\n\t\t\t\t\tstyles = getStyles(elem),\n\n\t\t\t\t\t// Only read styles.position if the test has a chance to fail\n\t\t\t\t\t// to avoid forcing a reflow.\n\t\t\t\t\tscrollboxSizeBuggy = !support.scrollboxSize() &&\n\t\t\t\t\t\tstyles.position === \"absolute\",\n\n\t\t\t\t\t// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991)\n\t\t\t\t\tboxSizingNeeded = scrollboxSizeBuggy || extra,\n\t\t\t\t\tisBorderBox = boxSizingNeeded &&\n\t\t\t\t\t\tjQuery.css(elem, \"boxSizing\", false, styles) === \"border-box\",\n\t\t\t\t\tsubtract = extra ?\n\t\t\t\t\t\tboxModelAdjustment(\n\t\t\t\t\t\t\telem,\n\t\t\t\t\t\t\tdimension,\n\t\t\t\t\t\t\textra,\n\t\t\t\t\t\t\tisBorderBox,\n\t\t\t\t\t\t\tstyles\n\t\t\t\t\t\t) :\n\t\t\t\t\t\t0;\n\n\t\t\t\t// Account for unreliable border-box dimensions by comparing offset* to computed and\n\t\t\t\t// faking a content-box to get border and padding (gh-3699)\n\t\t\t\tif (isBorderBox && scrollboxSizeBuggy) {\n\t\t\t\t\tsubtract -= Math.ceil(\n\t\t\t\t\t\telem[\"offset\" + dimension[0].toUpperCase() + dimension.slice(1)] -\n\t\t\t\t\t\tparseFloat(styles[dimension]) -\n\t\t\t\t\t\tboxModelAdjustment(elem, dimension, \"border\", false, styles) -\n\t\t\t\t\t\t0.5\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\t// Convert to pixels if value adjustment is needed\n\t\t\t\tif (subtract && (matches = rcssNum.exec(value)) &&\n\t\t\t\t\t(matches[3] || \"px\") !== \"px\") {\n\n\t\t\t\t\telem.style[dimension] = value;\n\t\t\t\t\tvalue = jQuery.css(elem, dimension);\n\t\t\t\t}\n\n\t\t\t\treturn setPositiveNumber(elem, value, subtract);\n\t\t\t}\n\t\t};\n\t});\n\n\tjQuery.cssHooks.marginLeft = addGetHookIf(support.reliableMarginLeft,\n\t\tfunction (elem, computed) {\n\t\t\tif (computed) {\n\t\t\t\treturn (parseFloat(curCSS(elem, \"marginLeft\")) ||\n\t\t\t\t\telem.getBoundingClientRect().left -\n\t\t\t\t\tswap(elem, { marginLeft: 0 }, function () {\n\t\t\t\t\t\treturn elem.getBoundingClientRect().left;\n\t\t\t\t\t})\n\t\t\t\t) + \"px\";\n\t\t\t}\n\t\t}\n\t);\n\n\t// These hooks are used by animate to expand properties\n\tjQuery.each({\n\t\tmargin: \"\",\n\t\tpadding: \"\",\n\t\tborder: \"Width\"\n\t}, function (prefix, suffix) {\n\t\tjQuery.cssHooks[prefix + suffix] = {\n\t\t\texpand: function (value) {\n\t\t\t\tvar i = 0,\n\t\t\t\t\texpanded = {},\n\n\t\t\t\t\t// Assumes a single number if not a string\n\t\t\t\t\tparts = typeof value === \"string\" ? value.split(\" \") : [value];\n\n\t\t\t\tfor (; i < 4; i++) {\n\t\t\t\t\texpanded[prefix + cssExpand[i] + suffix] =\n\t\t\t\t\t\tparts[i] || parts[i - 2] || parts[0];\n\t\t\t\t}\n\n\t\t\t\treturn expanded;\n\t\t\t}\n\t\t};\n\n\t\tif (prefix !== \"margin\") {\n\t\t\tjQuery.cssHooks[prefix + suffix].set = setPositiveNumber;\n\t\t}\n\t});\n\n\tjQuery.fn.extend({\n\t\tcss: function (name, value) {\n\t\t\treturn access(this, function (elem, name, value) {\n\t\t\t\tvar styles, len,\n\t\t\t\t\tmap = {},\n\t\t\t\t\ti = 0;\n\n\t\t\t\tif (Array.isArray(name)) {\n\t\t\t\t\tstyles = getStyles(elem);\n\t\t\t\t\tlen = name.length;\n\n\t\t\t\t\tfor (; i < len; i++) {\n\t\t\t\t\t\tmap[name[i]] = jQuery.css(elem, name[i], false, styles);\n\t\t\t\t\t}\n\n\t\t\t\t\treturn map;\n\t\t\t\t}\n\n\t\t\t\treturn value !== undefined ?\n\t\t\t\t\tjQuery.style(elem, name, value) :\n\t\t\t\t\tjQuery.css(elem, name);\n\t\t\t}, name, value, arguments.length > 1);\n\t\t}\n\t});\n\n\n\tfunction Tween(elem, options, prop, end, easing) {\n\t\treturn new Tween.prototype.init(elem, options, prop, end, easing);\n\t}\n\tjQuery.Tween = Tween;\n\n\tTween.prototype = {\n\t\tconstructor: Tween,\n\t\tinit: function (elem, options, prop, end, easing, unit) {\n\t\t\tthis.elem = elem;\n\t\t\tthis.prop = prop;\n\t\t\tthis.easing = easing || jQuery.easing._default;\n\t\t\tthis.options = options;\n\t\t\tthis.start = this.now = this.cur();\n\t\t\tthis.end = end;\n\t\t\tthis.unit = unit || (jQuery.cssNumber[prop] ? \"\" : \"px\");\n\t\t},\n\t\tcur: function () {\n\t\t\tvar hooks = Tween.propHooks[this.prop];\n\n\t\t\treturn hooks && hooks.get ?\n\t\t\t\thooks.get(this) :\n\t\t\t\tTween.propHooks._default.get(this);\n\t\t},\n\t\trun: function (percent) {\n\t\t\tvar eased,\n\t\t\t\thooks = Tween.propHooks[this.prop];\n\n\t\t\tif (this.options.duration) {\n\t\t\t\tthis.pos = eased = jQuery.easing[this.easing](\n\t\t\t\t\tpercent, this.options.duration * percent, 0, 1, this.options.duration\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tthis.pos = eased = percent;\n\t\t\t}\n\t\t\tthis.now = (this.end - this.start) * eased + this.start;\n\n\t\t\tif (this.options.step) {\n\t\t\t\tthis.options.step.call(this.elem, this.now, this);\n\t\t\t}\n\n\t\t\tif (hooks && hooks.set) {\n\t\t\t\thooks.set(this);\n\t\t\t} else {\n\t\t\t\tTween.propHooks._default.set(this);\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t};\n\n\tTween.prototype.init.prototype = Tween.prototype;\n\n\tTween.propHooks = {\n\t\t_default: {\n\t\t\tget: function (tween) {\n\t\t\t\tvar result;\n\n\t\t\t\t// Use a property on the element directly when it is not a DOM element,\n\t\t\t\t// or when there is no matching style property that exists.\n\t\t\t\tif (tween.elem.nodeType !== 1 ||\n\t\t\t\t\ttween.elem[tween.prop] != null && tween.elem.style[tween.prop] == null) {\n\t\t\t\t\treturn tween.elem[tween.prop];\n\t\t\t\t}\n\n\t\t\t\t// Passing an empty string as a 3rd parameter to .css will automatically\n\t\t\t\t// attempt a parseFloat and fallback to a string if the parse fails.\n\t\t\t\t// Simple values such as \"10px\" are parsed to Float;\n\t\t\t\t// complex values such as \"rotate(1rad)\" are returned as-is.\n\t\t\t\tresult = jQuery.css(tween.elem, tween.prop, \"\");\n\n\t\t\t\t// Empty strings, null, undefined and \"auto\" are converted to 0.\n\t\t\t\treturn !result || result === \"auto\" ? 0 : result;\n\t\t\t},\n\t\t\tset: function (tween) {\n\n\t\t\t\t// Use step hook for back compat.\n\t\t\t\t// Use cssHook if its there.\n\t\t\t\t// Use .style if available and use plain properties where available.\n\t\t\t\tif (jQuery.fx.step[tween.prop]) {\n\t\t\t\t\tjQuery.fx.step[tween.prop](tween);\n\t\t\t\t} else if (tween.elem.nodeType === 1 && (\n\t\t\t\t\tjQuery.cssHooks[tween.prop] ||\n\t\t\t\t\ttween.elem.style[finalPropName(tween.prop)] != null)) {\n\t\t\t\t\tjQuery.style(tween.elem, tween.prop, tween.now + tween.unit);\n\t\t\t\t} else {\n\t\t\t\t\ttween.elem[tween.prop] = tween.now;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t// Support: IE <=9 only\n\t// Panic based approach to setting things on disconnected nodes\n\tTween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {\n\t\tset: function (tween) {\n\t\t\tif (tween.elem.nodeType && tween.elem.parentNode) {\n\t\t\t\ttween.elem[tween.prop] = tween.now;\n\t\t\t}\n\t\t}\n\t};\n\n\tjQuery.easing = {\n\t\tlinear: function (p) {\n\t\t\treturn p;\n\t\t},\n\t\tswing: function (p) {\n\t\t\treturn 0.5 - Math.cos(p * Math.PI) / 2;\n\t\t},\n\t\t_default: \"swing\"\n\t};\n\n\tjQuery.fx = Tween.prototype.init;\n\n\t// Back compat <1.8 extension point\n\tjQuery.fx.step = {};\n\n\n\n\n\tvar\n\t\tfxNow, inProgress,\n\t\trfxtypes = /^(?:toggle|show|hide)$/,\n\t\trrun = /queueHooks$/;\n\n\tfunction schedule() {\n\t\tif (inProgress) {\n\t\t\tif (document.hidden === false && window.requestAnimationFrame) {\n\t\t\t\twindow.requestAnimationFrame(schedule);\n\t\t\t} else {\n\t\t\t\twindow.setTimeout(schedule, jQuery.fx.interval);\n\t\t\t}\n\n\t\t\tjQuery.fx.tick();\n\t\t}\n\t}\n\n\t// Animations created synchronously will run synchronously\n\tfunction createFxNow() {\n\t\twindow.setTimeout(function () {\n\t\t\tfxNow = undefined;\n\t\t});\n\t\treturn (fxNow = Date.now());\n\t}\n\n\t// Generate parameters to create a standard animation\n\tfunction genFx(type, includeWidth) {\n\t\tvar which,\n\t\t\ti = 0,\n\t\t\tattrs = { height: type };\n\n\t\t// If we include width, step value is 1 to do all cssExpand values,\n\t\t// otherwise step value is 2 to skip over Left and Right\n\t\tincludeWidth = includeWidth ? 1 : 0;\n\t\tfor (; i < 4; i += 2 - includeWidth) {\n\t\t\twhich = cssExpand[i];\n\t\t\tattrs[\"margin\" + which] = attrs[\"padding\" + which] = type;\n\t\t}\n\n\t\tif (includeWidth) {\n\t\t\tattrs.opacity = attrs.width = type;\n\t\t}\n\n\t\treturn attrs;\n\t}\n\n\tfunction createTween(value, prop, animation) {\n\t\tvar tween,\n\t\t\tcollection = (Animation.tweeners[prop] || []).concat(Animation.tweeners[\"*\"]),\n\t\t\tindex = 0,\n\t\t\tlength = collection.length;\n\t\tfor (; index < length; index++) {\n\t\t\tif ((tween = collection[index].call(animation, prop, value))) {\n\n\t\t\t\t// We're done with this property\n\t\t\t\treturn tween;\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction defaultPrefilter(elem, props, opts) {\n\t\tvar prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display,\n\t\t\tisBox = \"width\" in props || \"height\" in props,\n\t\t\tanim = this,\n\t\t\torig = {},\n\t\t\tstyle = elem.style,\n\t\t\thidden = elem.nodeType && isHiddenWithinTree(elem),\n\t\t\tdataShow = dataPriv.get(elem, \"fxshow\");\n\n\t\t// Queue-skipping animations hijack the fx hooks\n\t\tif (!opts.queue) {\n\t\t\thooks = jQuery._queueHooks(elem, \"fx\");\n\t\t\tif (hooks.unqueued == null) {\n\t\t\t\thooks.unqueued = 0;\n\t\t\t\toldfire = hooks.empty.fire;\n\t\t\t\thooks.empty.fire = function () {\n\t\t\t\t\tif (!hooks.unqueued) {\n\t\t\t\t\t\toldfire();\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t\thooks.unqueued++;\n\n\t\t\tanim.always(function () {\n\n\t\t\t\t// Ensure the complete handler is called before this completes\n\t\t\t\tanim.always(function () {\n\t\t\t\t\thooks.unqueued--;\n\t\t\t\t\tif (!jQuery.queue(elem, \"fx\").length) {\n\t\t\t\t\t\thooks.empty.fire();\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\n\t\t// Detect show/hide animations\n\t\tfor (prop in props) {\n\t\t\tvalue = props[prop];\n\t\t\tif (rfxtypes.test(value)) {\n\t\t\t\tdelete props[prop];\n\t\t\t\ttoggle = toggle || value === \"toggle\";\n\t\t\t\tif (value === (hidden ? \"hide\" : \"show\")) {\n\n\t\t\t\t\t// Pretend to be hidden if this is a \"show\" and\n\t\t\t\t\t// there is still data from a stopped show/hide\n\t\t\t\t\tif (value === \"show\" && dataShow && dataShow[prop] !== undefined) {\n\t\t\t\t\t\thidden = true;\n\n\t\t\t\t\t\t// Ignore all other no-op show/hide data\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\torig[prop] = dataShow && dataShow[prop] || jQuery.style(elem, prop);\n\t\t\t}\n\t\t}\n\n\t\t// Bail out if this is a no-op like .hide().hide()\n\t\tpropTween = !jQuery.isEmptyObject(props);\n\t\tif (!propTween && jQuery.isEmptyObject(orig)) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Restrict \"overflow\" and \"display\" styles during box animations\n\t\tif (isBox && elem.nodeType === 1) {\n\n\t\t\t// Support: IE <=9 - 11, Edge 12 - 15\n\t\t\t// Record all 3 overflow attributes because IE does not infer the shorthand\n\t\t\t// from identically-valued overflowX and overflowY and Edge just mirrors\n\t\t\t// the overflowX value there.\n\t\t\topts.overflow = [style.overflow, style.overflowX, style.overflowY];\n\n\t\t\t// Identify a display type, preferring old show/hide data over the CSS cascade\n\t\t\trestoreDisplay = dataShow && dataShow.display;\n\t\t\tif (restoreDisplay == null) {\n\t\t\t\trestoreDisplay = dataPriv.get(elem, \"display\");\n\t\t\t}\n\t\t\tdisplay = jQuery.css(elem, \"display\");\n\t\t\tif (display === \"none\") {\n\t\t\t\tif (restoreDisplay) {\n\t\t\t\t\tdisplay = restoreDisplay;\n\t\t\t\t} else {\n\n\t\t\t\t\t// Get nonempty value(s) by temporarily forcing visibility\n\t\t\t\t\tshowHide([elem], true);\n\t\t\t\t\trestoreDisplay = elem.style.display || restoreDisplay;\n\t\t\t\t\tdisplay = jQuery.css(elem, \"display\");\n\t\t\t\t\tshowHide([elem]);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Animate inline elements as inline-block\n\t\t\tif (display === \"inline\" || display === \"inline-block\" && restoreDisplay != null) {\n\t\t\t\tif (jQuery.css(elem, \"float\") === \"none\") {\n\n\t\t\t\t\t// Restore the original display value at the end of pure show/hide animations\n\t\t\t\t\tif (!propTween) {\n\t\t\t\t\t\tanim.done(function () {\n\t\t\t\t\t\t\tstyle.display = restoreDisplay;\n\t\t\t\t\t\t});\n\t\t\t\t\t\tif (restoreDisplay == null) {\n\t\t\t\t\t\t\tdisplay = style.display;\n\t\t\t\t\t\t\trestoreDisplay = display === \"none\" ? \"\" : display;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tstyle.display = \"inline-block\";\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (opts.overflow) {\n\t\t\tstyle.overflow = \"hidden\";\n\t\t\tanim.always(function () {\n\t\t\t\tstyle.overflow = opts.overflow[0];\n\t\t\t\tstyle.overflowX = opts.overflow[1];\n\t\t\t\tstyle.overflowY = opts.overflow[2];\n\t\t\t});\n\t\t}\n\n\t\t// Implement show/hide animations\n\t\tpropTween = false;\n\t\tfor (prop in orig) {\n\n\t\t\t// General show/hide setup for this element animation\n\t\t\tif (!propTween) {\n\t\t\t\tif (dataShow) {\n\t\t\t\t\tif (\"hidden\" in dataShow) {\n\t\t\t\t\t\thidden = dataShow.hidden;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tdataShow = dataPriv.access(elem, \"fxshow\", { display: restoreDisplay });\n\t\t\t\t}\n\n\t\t\t\t// Store hidden/visible for toggle so `.stop().toggle()` \"reverses\"\n\t\t\t\tif (toggle) {\n\t\t\t\t\tdataShow.hidden = !hidden;\n\t\t\t\t}\n\n\t\t\t\t// Show elements before animating them\n\t\t\t\tif (hidden) {\n\t\t\t\t\tshowHide([elem], true);\n\t\t\t\t}\n\n\t\t\t\t/* eslint-disable no-loop-func */\n\n\t\t\t\tanim.done(function () {\n\n\t\t\t\t\t/* eslint-enable no-loop-func */\n\n\t\t\t\t\t// The final step of a \"hide\" animation is actually hiding the element\n\t\t\t\t\tif (!hidden) {\n\t\t\t\t\t\tshowHide([elem]);\n\t\t\t\t\t}\n\t\t\t\t\tdataPriv.remove(elem, \"fxshow\");\n\t\t\t\t\tfor (prop in orig) {\n\t\t\t\t\t\tjQuery.style(elem, prop, orig[prop]);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// Per-property setup\n\t\t\tpropTween = createTween(hidden ? dataShow[prop] : 0, prop, anim);\n\t\t\tif (!(prop in dataShow)) {\n\t\t\t\tdataShow[prop] = propTween.start;\n\t\t\t\tif (hidden) {\n\t\t\t\t\tpropTween.end = propTween.start;\n\t\t\t\t\tpropTween.start = 0;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction propFilter(props, specialEasing) {\n\t\tvar index, name, easing, value, hooks;\n\n\t\t// camelCase, specialEasing and expand cssHook pass\n\t\tfor (index in props) {\n\t\t\tname = camelCase(index);\n\t\t\teasing = specialEasing[name];\n\t\t\tvalue = props[index];\n\t\t\tif (Array.isArray(value)) {\n\t\t\t\teasing = value[1];\n\t\t\t\tvalue = props[index] = value[0];\n\t\t\t}\n\n\t\t\tif (index !== name) {\n\t\t\t\tprops[name] = value;\n\t\t\t\tdelete props[index];\n\t\t\t}\n\n\t\t\thooks = jQuery.cssHooks[name];\n\t\t\tif (hooks && \"expand\" in hooks) {\n\t\t\t\tvalue = hooks.expand(value);\n\t\t\t\tdelete props[name];\n\n\t\t\t\t// Not quite $.extend, this won't overwrite existing keys.\n\t\t\t\t// Reusing 'index' because we have the correct \"name\"\n\t\t\t\tfor (index in value) {\n\t\t\t\t\tif (!(index in props)) {\n\t\t\t\t\t\tprops[index] = value[index];\n\t\t\t\t\t\tspecialEasing[index] = easing;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tspecialEasing[name] = easing;\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction Animation(elem, properties, options) {\n\t\tvar result,\n\t\t\tstopped,\n\t\t\tindex = 0,\n\t\t\tlength = Animation.prefilters.length,\n\t\t\tdeferred = jQuery.Deferred().always(function () {\n\n\t\t\t\t// Don't match elem in the :animated selector\n\t\t\t\tdelete tick.elem;\n\t\t\t}),\n\t\t\ttick = function () {\n\t\t\t\tif (stopped) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tvar currentTime = fxNow || createFxNow(),\n\t\t\t\t\tremaining = Math.max(0, animation.startTime + animation.duration - currentTime),\n\n\t\t\t\t\t// Support: Android 2.3 only\n\t\t\t\t\t// Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (trac-12497)\n\t\t\t\t\ttemp = remaining / animation.duration || 0,\n\t\t\t\t\tpercent = 1 - temp,\n\t\t\t\t\tindex = 0,\n\t\t\t\t\tlength = animation.tweens.length;\n\n\t\t\t\tfor (; index < length; index++) {\n\t\t\t\t\tanimation.tweens[index].run(percent);\n\t\t\t\t}\n\n\t\t\t\tdeferred.notifyWith(elem, [animation, percent, remaining]);\n\n\t\t\t\t// If there's more to do, yield\n\t\t\t\tif (percent < 1 && length) {\n\t\t\t\t\treturn remaining;\n\t\t\t\t}\n\n\t\t\t\t// If this was an empty animation, synthesize a final progress notification\n\t\t\t\tif (!length) {\n\t\t\t\t\tdeferred.notifyWith(elem, [animation, 1, 0]);\n\t\t\t\t}\n\n\t\t\t\t// Resolve the animation and report its conclusion\n\t\t\t\tdeferred.resolveWith(elem, [animation]);\n\t\t\t\treturn false;\n\t\t\t},\n\t\t\tanimation = deferred.promise({\n\t\t\t\telem: elem,\n\t\t\t\tprops: jQuery.extend({}, properties),\n\t\t\t\topts: jQuery.extend(true, {\n\t\t\t\t\tspecialEasing: {},\n\t\t\t\t\teasing: jQuery.easing._default\n\t\t\t\t}, options),\n\t\t\t\toriginalProperties: properties,\n\t\t\t\toriginalOptions: options,\n\t\t\t\tstartTime: fxNow || createFxNow(),\n\t\t\t\tduration: options.duration,\n\t\t\t\ttweens: [],\n\t\t\t\tcreateTween: function (prop, end) {\n\t\t\t\t\tvar tween = jQuery.Tween(elem, animation.opts, prop, end,\n\t\t\t\t\t\tanimation.opts.specialEasing[prop] || animation.opts.easing);\n\t\t\t\t\tanimation.tweens.push(tween);\n\t\t\t\t\treturn tween;\n\t\t\t\t},\n\t\t\t\tstop: function (gotoEnd) {\n\t\t\t\t\tvar index = 0,\n\n\t\t\t\t\t\t// If we are going to the end, we want to run all the tweens\n\t\t\t\t\t\t// otherwise we skip this part\n\t\t\t\t\t\tlength = gotoEnd ? animation.tweens.length : 0;\n\t\t\t\t\tif (stopped) {\n\t\t\t\t\t\treturn this;\n\t\t\t\t\t}\n\t\t\t\t\tstopped = true;\n\t\t\t\t\tfor (; index < length; index++) {\n\t\t\t\t\t\tanimation.tweens[index].run(1);\n\t\t\t\t\t}\n\n\t\t\t\t\t// Resolve when we played the last frame; otherwise, reject\n\t\t\t\t\tif (gotoEnd) {\n\t\t\t\t\t\tdeferred.notifyWith(elem, [animation, 1, 0]);\n\t\t\t\t\t\tdeferred.resolveWith(elem, [animation, gotoEnd]);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdeferred.rejectWith(elem, [animation, gotoEnd]);\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t}),\n\t\t\tprops = animation.props;\n\n\t\tpropFilter(props, animation.opts.specialEasing);\n\n\t\tfor (; index < length; index++) {\n\t\t\tresult = Animation.prefilters[index].call(animation, elem, props, animation.opts);\n\t\t\tif (result) {\n\t\t\t\tif (isFunction(result.stop)) {\n\t\t\t\t\tjQuery._queueHooks(animation.elem, animation.opts.queue).stop =\n\t\t\t\t\t\tresult.stop.bind(result);\n\t\t\t\t}\n\t\t\t\treturn result;\n\t\t\t}\n\t\t}\n\n\t\tjQuery.map(props, createTween, animation);\n\n\t\tif (isFunction(animation.opts.start)) {\n\t\t\tanimation.opts.start.call(elem, animation);\n\t\t}\n\n\t\t// Attach callbacks from options\n\t\tanimation\n\t\t\t.progress(animation.opts.progress)\n\t\t\t.done(animation.opts.done, animation.opts.complete)\n\t\t\t.fail(animation.opts.fail)\n\t\t\t.always(animation.opts.always);\n\n\t\tjQuery.fx.timer(\n\t\t\tjQuery.extend(tick, {\n\t\t\t\telem: elem,\n\t\t\t\tanim: animation,\n\t\t\t\tqueue: animation.opts.queue\n\t\t\t})\n\t\t);\n\n\t\treturn animation;\n\t}\n\n\tjQuery.Animation = jQuery.extend(Animation, {\n\n\t\ttweeners: {\n\t\t\t\"*\": [function (prop, value) {\n\t\t\t\tvar tween = this.createTween(prop, value);\n\t\t\t\tadjustCSS(tween.elem, prop, rcssNum.exec(value), tween);\n\t\t\t\treturn tween;\n\t\t\t}]\n\t\t},\n\n\t\ttweener: function (props, callback) {\n\t\t\tif (isFunction(props)) {\n\t\t\t\tcallback = props;\n\t\t\t\tprops = [\"*\"];\n\t\t\t} else {\n\t\t\t\tprops = props.match(rnothtmlwhite);\n\t\t\t}\n\n\t\t\tvar prop,\n\t\t\t\tindex = 0,\n\t\t\t\tlength = props.length;\n\n\t\t\tfor (; index < length; index++) {\n\t\t\t\tprop = props[index];\n\t\t\t\tAnimation.tweeners[prop] = Animation.tweeners[prop] || [];\n\t\t\t\tAnimation.tweeners[prop].unshift(callback);\n\t\t\t}\n\t\t},\n\n\t\tprefilters: [defaultPrefilter],\n\n\t\tprefilter: function (callback, prepend) {\n\t\t\tif (prepend) {\n\t\t\t\tAnimation.prefilters.unshift(callback);\n\t\t\t} else {\n\t\t\t\tAnimation.prefilters.push(callback);\n\t\t\t}\n\t\t}\n\t});\n\n\tjQuery.speed = function (speed, easing, fn) {\n\t\tvar opt = speed && typeof speed === \"object\" ? jQuery.extend({}, speed) : {\n\t\t\tcomplete: fn || !fn && easing ||\n\t\t\t\tisFunction(speed) && speed,\n\t\t\tduration: speed,\n\t\t\teasing: fn && easing || easing && !isFunction(easing) && easing\n\t\t};\n\n\t\t// Go to the end state if fx are off\n\t\tif (jQuery.fx.off) {\n\t\t\topt.duration = 0;\n\n\t\t} else {\n\t\t\tif (typeof opt.duration !== \"number\") {\n\t\t\t\tif (opt.duration in jQuery.fx.speeds) {\n\t\t\t\t\topt.duration = jQuery.fx.speeds[opt.duration];\n\n\t\t\t\t} else {\n\t\t\t\t\topt.duration = jQuery.fx.speeds._default;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Normalize opt.queue - true/undefined/null -> \"fx\"\n\t\tif (opt.queue == null || opt.queue === true) {\n\t\t\topt.queue = \"fx\";\n\t\t}\n\n\t\t// Queueing\n\t\topt.old = opt.complete;\n\n\t\topt.complete = function () {\n\t\t\tif (isFunction(opt.old)) {\n\t\t\t\topt.old.call(this);\n\t\t\t}\n\n\t\t\tif (opt.queue) {\n\t\t\t\tjQuery.dequeue(this, opt.queue);\n\t\t\t}\n\t\t};\n\n\t\treturn opt;\n\t};\n\n\tjQuery.fn.extend({\n\t\tfadeTo: function (speed, to, easing, callback) {\n\n\t\t\t// Show any hidden elements after setting opacity to 0\n\t\t\treturn this.filter(isHiddenWithinTree).css(\"opacity\", 0).show()\n\n\t\t\t\t// Animate to the value specified\n\t\t\t\t.end().animate({ opacity: to }, speed, easing, callback);\n\t\t},\n\t\tanimate: function (prop, speed, easing, callback) {\n\t\t\tvar empty = jQuery.isEmptyObject(prop),\n\t\t\t\toptall = jQuery.speed(speed, easing, callback),\n\t\t\t\tdoAnimation = function () {\n\n\t\t\t\t\t// Operate on a copy of prop so per-property easing won't be lost\n\t\t\t\t\tvar anim = Animation(this, jQuery.extend({}, prop), optall);\n\n\t\t\t\t\t// Empty animations, or finishing resolves immediately\n\t\t\t\t\tif (empty || dataPriv.get(this, \"finish\")) {\n\t\t\t\t\t\tanim.stop(true);\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\tdoAnimation.finish = doAnimation;\n\n\t\t\treturn empty || optall.queue === false ?\n\t\t\t\tthis.each(doAnimation) :\n\t\t\t\tthis.queue(optall.queue, doAnimation);\n\t\t},\n\t\tstop: function (type, clearQueue, gotoEnd) {\n\t\t\tvar stopQueue = function (hooks) {\n\t\t\t\tvar stop = hooks.stop;\n\t\t\t\tdelete hooks.stop;\n\t\t\t\tstop(gotoEnd);\n\t\t\t};\n\n\t\t\tif (typeof type !== \"string\") {\n\t\t\t\tgotoEnd = clearQueue;\n\t\t\t\tclearQueue = type;\n\t\t\t\ttype = undefined;\n\t\t\t}\n\t\t\tif (clearQueue) {\n\t\t\t\tthis.queue(type || \"fx\", []);\n\t\t\t}\n\n\t\t\treturn this.each(function () {\n\t\t\t\tvar dequeue = true,\n\t\t\t\t\tindex = type != null && type + \"queueHooks\",\n\t\t\t\t\ttimers = jQuery.timers,\n\t\t\t\t\tdata = dataPriv.get(this);\n\n\t\t\t\tif (index) {\n\t\t\t\t\tif (data[index] && data[index].stop) {\n\t\t\t\t\t\tstopQueue(data[index]);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tfor (index in data) {\n\t\t\t\t\t\tif (data[index] && data[index].stop && rrun.test(index)) {\n\t\t\t\t\t\t\tstopQueue(data[index]);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tfor (index = timers.length; index--;) {\n\t\t\t\t\tif (timers[index].elem === this &&\n\t\t\t\t\t\t(type == null || timers[index].queue === type)) {\n\n\t\t\t\t\t\ttimers[index].anim.stop(gotoEnd);\n\t\t\t\t\t\tdequeue = false;\n\t\t\t\t\t\ttimers.splice(index, 1);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Start the next in the queue if the last step wasn't forced.\n\t\t\t\t// Timers currently will call their complete callbacks, which\n\t\t\t\t// will dequeue but only if they were gotoEnd.\n\t\t\t\tif (dequeue || !gotoEnd) {\n\t\t\t\t\tjQuery.dequeue(this, type);\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\t\tfinish: function (type) {\n\t\t\tif (type !== false) {\n\t\t\t\ttype = type || \"fx\";\n\t\t\t}\n\t\t\treturn this.each(function () {\n\t\t\t\tvar index,\n\t\t\t\t\tdata = dataPriv.get(this),\n\t\t\t\t\tqueue = data[type + \"queue\"],\n\t\t\t\t\thooks = data[type + \"queueHooks\"],\n\t\t\t\t\ttimers = jQuery.timers,\n\t\t\t\t\tlength = queue ? queue.length : 0;\n\n\t\t\t\t// Enable finishing flag on private data\n\t\t\t\tdata.finish = true;\n\n\t\t\t\t// Empty the queue first\n\t\t\t\tjQuery.queue(this, type, []);\n\n\t\t\t\tif (hooks && hooks.stop) {\n\t\t\t\t\thooks.stop.call(this, true);\n\t\t\t\t}\n\n\t\t\t\t// Look for any active animations, and finish them\n\t\t\t\tfor (index = timers.length; index--;) {\n\t\t\t\t\tif (timers[index].elem === this && timers[index].queue === type) {\n\t\t\t\t\t\ttimers[index].anim.stop(true);\n\t\t\t\t\t\ttimers.splice(index, 1);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Look for any animations in the old queue and finish them\n\t\t\t\tfor (index = 0; index < length; index++) {\n\t\t\t\t\tif (queue[index] && queue[index].finish) {\n\t\t\t\t\t\tqueue[index].finish.call(this);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Turn off finishing flag\n\t\t\t\tdelete data.finish;\n\t\t\t});\n\t\t}\n\t});\n\n\tjQuery.each([\"toggle\", \"show\", \"hide\"], function (_i, name) {\n\t\tvar cssFn = jQuery.fn[name];\n\t\tjQuery.fn[name] = function (speed, easing, callback) {\n\t\t\treturn speed == null || typeof speed === \"boolean\" ?\n\t\t\t\tcssFn.apply(this, arguments) :\n\t\t\t\tthis.animate(genFx(name, true), speed, easing, callback);\n\t\t};\n\t});\n\n\t// Generate shortcuts for custom animations\n\tjQuery.each({\n\t\tslideDown: genFx(\"show\"),\n\t\tslideUp: genFx(\"hide\"),\n\t\tslideToggle: genFx(\"toggle\"),\n\t\tfadeIn: { opacity: \"show\" },\n\t\tfadeOut: { opacity: \"hide\" },\n\t\tfadeToggle: { opacity: \"toggle\" }\n\t}, function (name, props) {\n\t\tjQuery.fn[name] = function (speed, easing, callback) {\n\t\t\treturn this.animate(props, speed, easing, callback);\n\t\t};\n\t});\n\n\tjQuery.timers = [];\n\tjQuery.fx.tick = function () {\n\t\tvar timer,\n\t\t\ti = 0,\n\t\t\ttimers = jQuery.timers;\n\n\t\tfxNow = Date.now();\n\n\t\tfor (; i < timers.length; i++) {\n\t\t\ttimer = timers[i];\n\n\t\t\t// Run the timer and safely remove it when done (allowing for external removal)\n\t\t\tif (!timer() && timers[i] === timer) {\n\t\t\t\ttimers.splice(i--, 1);\n\t\t\t}\n\t\t}\n\n\t\tif (!timers.length) {\n\t\t\tjQuery.fx.stop();\n\t\t}\n\t\tfxNow = undefined;\n\t};\n\n\tjQuery.fx.timer = function (timer) {\n\t\tjQuery.timers.push(timer);\n\t\tjQuery.fx.start();\n\t};\n\n\tjQuery.fx.interval = 13;\n\tjQuery.fx.start = function () {\n\t\tif (inProgress) {\n\t\t\treturn;\n\t\t}\n\n\t\tinProgress = true;\n\t\tschedule();\n\t};\n\n\tjQuery.fx.stop = function () {\n\t\tinProgress = null;\n\t};\n\n\tjQuery.fx.speeds = {\n\t\tslow: 600,\n\t\tfast: 200,\n\n\t\t// Default speed\n\t\t_default: 400\n\t};\n\n\n\t// Based off of the plugin by Clint Helfers, with permission.\n\tjQuery.fn.delay = function (time, type) {\n\t\ttime = jQuery.fx ? jQuery.fx.speeds[time] || time : time;\n\t\ttype = type || \"fx\";\n\n\t\treturn this.queue(type, function (next, hooks) {\n\t\t\tvar timeout = window.setTimeout(next, time);\n\t\t\thooks.stop = function () {\n\t\t\t\twindow.clearTimeout(timeout);\n\t\t\t};\n\t\t});\n\t};\n\n\n\t(function () {\n\t\tvar input = document.createElement(\"input\"),\n\t\t\tselect = document.createElement(\"select\"),\n\t\t\topt = select.appendChild(document.createElement(\"option\"));\n\n\t\tinput.type = \"checkbox\";\n\n\t\t// Support: Android <=4.3 only\n\t\t// Default value for a checkbox should be \"on\"\n\t\tsupport.checkOn = input.value !== \"\";\n\n\t\t// Support: IE <=11 only\n\t\t// Must access selectedIndex to make default options select\n\t\tsupport.optSelected = opt.selected;\n\n\t\t// Support: IE <=11 only\n\t\t// An input loses its value after becoming a radio\n\t\tinput = document.createElement(\"input\");\n\t\tinput.value = \"t\";\n\t\tinput.type = \"radio\";\n\t\tsupport.radioValue = input.value === \"t\";\n\t})();\n\n\n\tvar boolHook,\n\t\tattrHandle = jQuery.expr.attrHandle;\n\n\tjQuery.fn.extend({\n\t\tattr: function (name, value) {\n\t\t\treturn access(this, jQuery.attr, name, value, arguments.length > 1);\n\t\t},\n\n\t\tremoveAttr: function (name) {\n\t\t\treturn this.each(function () {\n\t\t\t\tjQuery.removeAttr(this, name);\n\t\t\t});\n\t\t}\n\t});\n\n\tjQuery.extend({\n\t\tattr: function (elem, name, value) {\n\t\t\tvar ret, hooks,\n\t\t\t\tnType = elem.nodeType;\n\n\t\t\t// Don't get/set attributes on text, comment and attribute nodes\n\t\t\tif (nType === 3 || nType === 8 || nType === 2) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Fallback to prop when attributes are not supported\n\t\t\tif (typeof elem.getAttribute === \"undefined\") {\n\t\t\t\treturn jQuery.prop(elem, name, value);\n\t\t\t}\n\n\t\t\t// Attribute hooks are determined by the lowercase version\n\t\t\t// Grab necessary hook if one is defined\n\t\t\tif (nType !== 1 || !jQuery.isXMLDoc(elem)) {\n\t\t\t\thooks = jQuery.attrHooks[name.toLowerCase()] ||\n\t\t\t\t\t(jQuery.expr.match.bool.test(name) ? boolHook : undefined);\n\t\t\t}\n\n\t\t\tif (value !== undefined) {\n\t\t\t\tif (value === null) {\n\t\t\t\t\tjQuery.removeAttr(elem, name);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (hooks && \"set\" in hooks &&\n\t\t\t\t\t(ret = hooks.set(elem, value, name)) !== undefined) {\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\n\t\t\t\telem.setAttribute(name, value + \"\");\n\t\t\t\treturn value;\n\t\t\t}\n\n\t\t\tif (hooks && \"get\" in hooks && (ret = hooks.get(elem, name)) !== null) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\tret = jQuery.find.attr(elem, name);\n\n\t\t\t// Non-existent attributes return null, we normalize to undefined\n\t\t\treturn ret == null ? undefined : ret;\n\t\t},\n\n\t\tattrHooks: {\n\t\t\ttype: {\n\t\t\t\tset: function (elem, value) {\n\t\t\t\t\tif (!support.radioValue && value === \"radio\" &&\n\t\t\t\t\t\tnodeName(elem, \"input\")) {\n\t\t\t\t\t\tvar val = elem.value;\n\t\t\t\t\t\telem.setAttribute(\"type\", value);\n\t\t\t\t\t\tif (val) {\n\t\t\t\t\t\t\telem.value = val;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn value;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tremoveAttr: function (elem, value) {\n\t\t\tvar name,\n\t\t\t\ti = 0,\n\n\t\t\t\t// Attribute names can contain non-HTML whitespace characters\n\t\t\t\t// https://html.spec.whatwg.org/multipage/syntax.html#attributes-2\n\t\t\t\tattrNames = value && value.match(rnothtmlwhite);\n\n\t\t\tif (attrNames && elem.nodeType === 1) {\n\t\t\t\twhile ((name = attrNames[i++])) {\n\t\t\t\t\telem.removeAttribute(name);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\n\t// Hooks for boolean attributes\n\tboolHook = {\n\t\tset: function (elem, value, name) {\n\t\t\tif (value === false) {\n\n\t\t\t\t// Remove boolean attributes when set to false\n\t\t\t\tjQuery.removeAttr(elem, name);\n\t\t\t} else {\n\t\t\t\telem.setAttribute(name, name);\n\t\t\t}\n\t\t\treturn name;\n\t\t}\n\t};\n\n\tjQuery.each(jQuery.expr.match.bool.source.match(/\\w+/g), function (_i, name) {\n\t\tvar getter = attrHandle[name] || jQuery.find.attr;\n\n\t\tattrHandle[name] = function (elem, name, isXML) {\n\t\t\tvar ret, handle,\n\t\t\t\tlowercaseName = name.toLowerCase();\n\n\t\t\tif (!isXML) {\n\n\t\t\t\t// Avoid an infinite loop by temporarily removing this function from the getter\n\t\t\t\thandle = attrHandle[lowercaseName];\n\t\t\t\tattrHandle[lowercaseName] = ret;\n\t\t\t\tret = getter(elem, name, isXML) != null ?\n\t\t\t\t\tlowercaseName :\n\t\t\t\t\tnull;\n\t\t\t\tattrHandle[lowercaseName] = handle;\n\t\t\t}\n\t\t\treturn ret;\n\t\t};\n\t});\n\n\n\n\n\tvar rfocusable = /^(?:input|select|textarea|button)$/i,\n\t\trclickable = /^(?:a|area)$/i;\n\n\tjQuery.fn.extend({\n\t\tprop: function (name, value) {\n\t\t\treturn access(this, jQuery.prop, name, value, arguments.length > 1);\n\t\t},\n\n\t\tremoveProp: function (name) {\n\t\t\treturn this.each(function () {\n\t\t\t\tdelete this[jQuery.propFix[name] || name];\n\t\t\t});\n\t\t}\n\t});\n\n\tjQuery.extend({\n\t\tprop: function (elem, name, value) {\n\t\t\tvar ret, hooks,\n\t\t\t\tnType = elem.nodeType;\n\n\t\t\t// Don't get/set properties on text, comment and attribute nodes\n\t\t\tif (nType === 3 || nType === 8 || nType === 2) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (nType !== 1 || !jQuery.isXMLDoc(elem)) {\n\n\t\t\t\t// Fix name and attach hooks\n\t\t\t\tname = jQuery.propFix[name] || name;\n\t\t\t\thooks = jQuery.propHooks[name];\n\t\t\t}\n\n\t\t\tif (value !== undefined) {\n\t\t\t\tif (hooks && \"set\" in hooks &&\n\t\t\t\t\t(ret = hooks.set(elem, value, name)) !== undefined) {\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\n\t\t\t\treturn (elem[name] = value);\n\t\t\t}\n\n\t\t\tif (hooks && \"get\" in hooks && (ret = hooks.get(elem, name)) !== null) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\treturn elem[name];\n\t\t},\n\n\t\tpropHooks: {\n\t\t\ttabIndex: {\n\t\t\t\tget: function (elem) {\n\n\t\t\t\t\t// Support: IE <=9 - 11 only\n\t\t\t\t\t// elem.tabIndex doesn't always return the\n\t\t\t\t\t// correct value when it hasn't been explicitly set\n\t\t\t\t\t// Use proper attribute retrieval (trac-12072)\n\t\t\t\t\tvar tabindex = jQuery.find.attr(elem, \"tabindex\");\n\n\t\t\t\t\tif (tabindex) {\n\t\t\t\t\t\treturn parseInt(tabindex, 10);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (\n\t\t\t\t\t\trfocusable.test(elem.nodeName) ||\n\t\t\t\t\t\trclickable.test(elem.nodeName) &&\n\t\t\t\t\t\telem.href\n\t\t\t\t\t) {\n\t\t\t\t\t\treturn 0;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn -1;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tpropFix: {\n\t\t\t\"for\": \"htmlFor\",\n\t\t\t\"class\": \"className\"\n\t\t}\n\t});\n\n\t// Support: IE <=11 only\n\t// Accessing the selectedIndex property\n\t// forces the browser to respect setting selected\n\t// on the option\n\t// The getter ensures a default option is selected\n\t// when in an optgroup\n\t// eslint rule \"no-unused-expressions\" is disabled for this code\n\t// since it considers such accessions noop\n\tif (!support.optSelected) {\n\t\tjQuery.propHooks.selected = {\n\t\t\tget: function (elem) {\n\n\t\t\t\t/* eslint no-unused-expressions: \"off\" */\n\n\t\t\t\tvar parent = elem.parentNode;\n\t\t\t\tif (parent && parent.parentNode) {\n\t\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t\t}\n\t\t\t\treturn null;\n\t\t\t},\n\t\t\tset: function (elem) {\n\n\t\t\t\t/* eslint no-unused-expressions: \"off\" */\n\n\t\t\t\tvar parent = elem.parentNode;\n\t\t\t\tif (parent) {\n\t\t\t\t\tparent.selectedIndex;\n\n\t\t\t\t\tif (parent.parentNode) {\n\t\t\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n\n\tjQuery.each([\n\t\t\"tabIndex\",\n\t\t\"readOnly\",\n\t\t\"maxLength\",\n\t\t\"cellSpacing\",\n\t\t\"cellPadding\",\n\t\t\"rowSpan\",\n\t\t\"colSpan\",\n\t\t\"useMap\",\n\t\t\"frameBorder\",\n\t\t\"contentEditable\"\n\t], function () {\n\t\tjQuery.propFix[this.toLowerCase()] = this;\n\t});\n\n\n\n\n\t// Strip and collapse whitespace according to HTML spec\n\t// https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace\n\tfunction stripAndCollapse(value) {\n\t\tvar tokens = value.match(rnothtmlwhite) || [];\n\t\treturn tokens.join(\" \");\n\t}\n\n\n\tfunction getClass(elem) {\n\t\treturn elem.getAttribute && elem.getAttribute(\"class\") || \"\";\n\t}\n\n\tfunction classesToArray(value) {\n\t\tif (Array.isArray(value)) {\n\t\t\treturn value;\n\t\t}\n\t\tif (typeof value === \"string\") {\n\t\t\treturn value.match(rnothtmlwhite) || [];\n\t\t}\n\t\treturn [];\n\t}\n\n\tjQuery.fn.extend({\n\t\taddClass: function (value) {\n\t\t\tvar classNames, cur, curValue, className, i, finalValue;\n\n\t\t\tif (isFunction(value)) {\n\t\t\t\treturn this.each(function (j) {\n\t\t\t\t\tjQuery(this).addClass(value.call(this, j, getClass(this)));\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tclassNames = classesToArray(value);\n\n\t\t\tif (classNames.length) {\n\t\t\t\treturn this.each(function () {\n\t\t\t\t\tcurValue = getClass(this);\n\t\t\t\t\tcur = this.nodeType === 1 && (\" \" + stripAndCollapse(curValue) + \" \");\n\n\t\t\t\t\tif (cur) {\n\t\t\t\t\t\tfor (i = 0; i < classNames.length; i++) {\n\t\t\t\t\t\t\tclassName = classNames[i];\n\t\t\t\t\t\t\tif (cur.indexOf(\" \" + className + \" \") < 0) {\n\t\t\t\t\t\t\t\tcur += className + \" \";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\t\tfinalValue = stripAndCollapse(cur);\n\t\t\t\t\t\tif (curValue !== finalValue) {\n\t\t\t\t\t\t\tthis.setAttribute(\"class\", finalValue);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn this;\n\t\t},\n\n\t\tremoveClass: function (value) {\n\t\t\tvar classNames, cur, curValue, className, i, finalValue;\n\n\t\t\tif (isFunction(value)) {\n\t\t\t\treturn this.each(function (j) {\n\t\t\t\t\tjQuery(this).removeClass(value.call(this, j, getClass(this)));\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (!arguments.length) {\n\t\t\t\treturn this.attr(\"class\", \"\");\n\t\t\t}\n\n\t\t\tclassNames = classesToArray(value);\n\n\t\t\tif (classNames.length) {\n\t\t\t\treturn this.each(function () {\n\t\t\t\t\tcurValue = getClass(this);\n\n\t\t\t\t\t// This expression is here for better compressibility (see addClass)\n\t\t\t\t\tcur = this.nodeType === 1 && (\" \" + stripAndCollapse(curValue) + \" \");\n\n\t\t\t\t\tif (cur) {\n\t\t\t\t\t\tfor (i = 0; i < classNames.length; i++) {\n\t\t\t\t\t\t\tclassName = classNames[i];\n\n\t\t\t\t\t\t\t// Remove *all* instances\n\t\t\t\t\t\t\twhile (cur.indexOf(\" \" + className + \" \") > -1) {\n\t\t\t\t\t\t\t\tcur = cur.replace(\" \" + className + \" \", \" \");\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\t\tfinalValue = stripAndCollapse(cur);\n\t\t\t\t\t\tif (curValue !== finalValue) {\n\t\t\t\t\t\t\tthis.setAttribute(\"class\", finalValue);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn this;\n\t\t},\n\n\t\ttoggleClass: function (value, stateVal) {\n\t\t\tvar classNames, className, i, self,\n\t\t\t\ttype = typeof value,\n\t\t\t\tisValidValue = type === \"string\" || Array.isArray(value);\n\n\t\t\tif (isFunction(value)) {\n\t\t\t\treturn this.each(function (i) {\n\t\t\t\t\tjQuery(this).toggleClass(\n\t\t\t\t\t\tvalue.call(this, i, getClass(this), stateVal),\n\t\t\t\t\t\tstateVal\n\t\t\t\t\t);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (typeof stateVal === \"boolean\" && isValidValue) {\n\t\t\t\treturn stateVal ? this.addClass(value) : this.removeClass(value);\n\t\t\t}\n\n\t\t\tclassNames = classesToArray(value);\n\n\t\t\treturn this.each(function () {\n\t\t\t\tif (isValidValue) {\n\n\t\t\t\t\t// Toggle individual class names\n\t\t\t\t\tself = jQuery(this);\n\n\t\t\t\t\tfor (i = 0; i < classNames.length; i++) {\n\t\t\t\t\t\tclassName = classNames[i];\n\n\t\t\t\t\t\t// Check each className given, space separated list\n\t\t\t\t\t\tif (self.hasClass(className)) {\n\t\t\t\t\t\t\tself.removeClass(className);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tself.addClass(className);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Toggle whole class name\n\t\t\t\t} else if (value === undefined || type === \"boolean\") {\n\t\t\t\t\tclassName = getClass(this);\n\t\t\t\t\tif (className) {\n\n\t\t\t\t\t\t// Store className if set\n\t\t\t\t\t\tdataPriv.set(this, \"__className__\", className);\n\t\t\t\t\t}\n\n\t\t\t\t\t// If the element has a class name or if we're passed `false`,\n\t\t\t\t\t// then remove the whole classname (if there was one, the above saved it).\n\t\t\t\t\t// Otherwise bring back whatever was previously saved (if anything),\n\t\t\t\t\t// falling back to the empty string if nothing was stored.\n\t\t\t\t\tif (this.setAttribute) {\n\t\t\t\t\t\tthis.setAttribute(\"class\",\n\t\t\t\t\t\t\tclassName || value === false ?\n\t\t\t\t\t\t\t\t\"\" :\n\t\t\t\t\t\t\t\tdataPriv.get(this, \"__className__\") || \"\"\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\thasClass: function (selector) {\n\t\t\tvar className, elem,\n\t\t\t\ti = 0;\n\n\t\t\tclassName = \" \" + selector + \" \";\n\t\t\twhile ((elem = this[i++])) {\n\t\t\t\tif (elem.nodeType === 1 &&\n\t\t\t\t\t(\" \" + stripAndCollapse(getClass(elem)) + \" \").indexOf(className) > -1) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn false;\n\t\t}\n\t});\n\n\n\n\n\tvar rreturn = /\\r/g;\n\n\tjQuery.fn.extend({\n\t\tval: function (value) {\n\t\t\tvar hooks, ret, valueIsFunction,\n\t\t\t\telem = this[0];\n\n\t\t\tif (!arguments.length) {\n\t\t\t\tif (elem) {\n\t\t\t\t\thooks = jQuery.valHooks[elem.type] ||\n\t\t\t\t\t\tjQuery.valHooks[elem.nodeName.toLowerCase()];\n\n\t\t\t\t\tif (hooks &&\n\t\t\t\t\t\t\"get\" in hooks &&\n\t\t\t\t\t\t(ret = hooks.get(elem, \"value\")) !== undefined\n\t\t\t\t\t) {\n\t\t\t\t\t\treturn ret;\n\t\t\t\t\t}\n\n\t\t\t\t\tret = elem.value;\n\n\t\t\t\t\t// Handle most common string cases\n\t\t\t\t\tif (typeof ret === \"string\") {\n\t\t\t\t\t\treturn ret.replace(rreturn, \"\");\n\t\t\t\t\t}\n\n\t\t\t\t\t// Handle cases where value is null/undef or number\n\t\t\t\t\treturn ret == null ? \"\" : ret;\n\t\t\t\t}\n\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvalueIsFunction = isFunction(value);\n\n\t\t\treturn this.each(function (i) {\n\t\t\t\tvar val;\n\n\t\t\t\tif (this.nodeType !== 1) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (valueIsFunction) {\n\t\t\t\t\tval = value.call(this, i, jQuery(this).val());\n\t\t\t\t} else {\n\t\t\t\t\tval = value;\n\t\t\t\t}\n\n\t\t\t\t// Treat null/undefined as \"\"; convert numbers to string\n\t\t\t\tif (val == null) {\n\t\t\t\t\tval = \"\";\n\n\t\t\t\t} else if (typeof val === \"number\") {\n\t\t\t\t\tval += \"\";\n\n\t\t\t\t} else if (Array.isArray(val)) {\n\t\t\t\t\tval = jQuery.map(val, function (value) {\n\t\t\t\t\t\treturn value == null ? \"\" : value + \"\";\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\thooks = jQuery.valHooks[this.type] || jQuery.valHooks[this.nodeName.toLowerCase()];\n\n\t\t\t\t// If set returns undefined, fall back to normal setting\n\t\t\t\tif (!hooks || !(\"set\" in hooks) || hooks.set(this, val, \"value\") === undefined) {\n\t\t\t\t\tthis.value = val;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t});\n\n\tjQuery.extend({\n\t\tvalHooks: {\n\t\t\toption: {\n\t\t\t\tget: function (elem) {\n\n\t\t\t\t\tvar val = jQuery.find.attr(elem, \"value\");\n\t\t\t\t\treturn val != null ?\n\t\t\t\t\t\tval :\n\n\t\t\t\t\t\t// Support: IE <=10 - 11 only\n\t\t\t\t\t\t// option.text throws exceptions (trac-14686, trac-14858)\n\t\t\t\t\t\t// Strip and collapse whitespace\n\t\t\t\t\t\t// https://html.spec.whatwg.org/#strip-and-collapse-whitespace\n\t\t\t\t\t\tstripAndCollapse(jQuery.text(elem));\n\t\t\t\t}\n\t\t\t},\n\t\t\tselect: {\n\t\t\t\tget: function (elem) {\n\t\t\t\t\tvar value, option, i,\n\t\t\t\t\t\toptions = elem.options,\n\t\t\t\t\t\tindex = elem.selectedIndex,\n\t\t\t\t\t\tone = elem.type === \"select-one\",\n\t\t\t\t\t\tvalues = one ? null : [],\n\t\t\t\t\t\tmax = one ? index + 1 : options.length;\n\n\t\t\t\t\tif (index < 0) {\n\t\t\t\t\t\ti = max;\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\ti = one ? index : 0;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Loop through all the selected options\n\t\t\t\t\tfor (; i < max; i++) {\n\t\t\t\t\t\toption = options[i];\n\n\t\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t\t// IE8-9 doesn't update selected after form reset (trac-2551)\n\t\t\t\t\t\tif ((option.selected || i === index) &&\n\n\t\t\t\t\t\t\t// Don't return options that are disabled or in a disabled optgroup\n\t\t\t\t\t\t\t!option.disabled &&\n\t\t\t\t\t\t\t(!option.parentNode.disabled ||\n\t\t\t\t\t\t\t\t!nodeName(option.parentNode, \"optgroup\"))) {\n\n\t\t\t\t\t\t\t// Get the specific value for the option\n\t\t\t\t\t\t\tvalue = jQuery(option).val();\n\n\t\t\t\t\t\t\t// We don't need an array for one selects\n\t\t\t\t\t\t\tif (one) {\n\t\t\t\t\t\t\t\treturn value;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Multi-Selects return an array\n\t\t\t\t\t\t\tvalues.push(value);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn values;\n\t\t\t\t},\n\n\t\t\t\tset: function (elem, value) {\n\t\t\t\t\tvar optionSet, option,\n\t\t\t\t\t\toptions = elem.options,\n\t\t\t\t\t\tvalues = jQuery.makeArray(value),\n\t\t\t\t\t\ti = options.length;\n\n\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\toption = options[i];\n\n\t\t\t\t\t\t/* eslint-disable no-cond-assign */\n\n\t\t\t\t\t\tif (option.selected =\n\t\t\t\t\t\t\tjQuery.inArray(jQuery.valHooks.option.get(option), values) > -1\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\toptionSet = true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t/* eslint-enable no-cond-assign */\n\t\t\t\t\t}\n\n\t\t\t\t\t// Force browsers to behave consistently when non-matching value is set\n\t\t\t\t\tif (!optionSet) {\n\t\t\t\t\t\telem.selectedIndex = -1;\n\t\t\t\t\t}\n\t\t\t\t\treturn values;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\n\t// Radios and checkboxes getter/setter\n\tjQuery.each([\"radio\", \"checkbox\"], function () {\n\t\tjQuery.valHooks[this] = {\n\t\t\tset: function (elem, value) {\n\t\t\t\tif (Array.isArray(value)) {\n\t\t\t\t\treturn (elem.checked = jQuery.inArray(jQuery(elem).val(), value) > -1);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\tif (!support.checkOn) {\n\t\t\tjQuery.valHooks[this].get = function (elem) {\n\t\t\t\treturn elem.getAttribute(\"value\") === null ? \"on\" : elem.value;\n\t\t\t};\n\t\t}\n\t});\n\n\n\n\n\t// Return jQuery for attributes-only inclusion\n\tvar location = window.location;\n\n\tvar nonce = { guid: Date.now() };\n\n\tvar rquery = (/\\?/);\n\n\n\n\t// Cross-browser xml parsing\n\tjQuery.parseXML = function (data) {\n\t\tvar xml, parserErrorElem;\n\t\tif (!data || typeof data !== \"string\") {\n\t\t\treturn null;\n\t\t}\n\n\t\t// Support: IE 9 - 11 only\n\t\t// IE throws on parseFromString with invalid input.\n\t\ttry {\n\t\t\txml = (new window.DOMParser()).parseFromString(data, \"text/xml\");\n\t\t} catch (e) { }\n\n\t\tparserErrorElem = xml && xml.getElementsByTagName(\"parsererror\")[0];\n\t\tif (!xml || parserErrorElem) {\n\t\t\tjQuery.error(\"Invalid XML: \" + (\n\t\t\t\tparserErrorElem ?\n\t\t\t\t\tjQuery.map(parserErrorElem.childNodes, function (el) {\n\t\t\t\t\t\treturn el.textContent;\n\t\t\t\t\t}).join(\"\\n\") :\n\t\t\t\t\tdata\n\t\t\t));\n\t\t}\n\t\treturn xml;\n\t};\n\n\n\tvar rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,\n\t\tstopPropagationCallback = function (e) {\n\t\t\te.stopPropagation();\n\t\t};\n\n\tjQuery.extend(jQuery.event, {\n\n\t\ttrigger: function (event, data, elem, onlyHandlers) {\n\n\t\t\tvar i, cur, tmp, bubbleType, ontype, handle, special, lastElement,\n\t\t\t\teventPath = [elem || document],\n\t\t\t\ttype = hasOwn.call(event, \"type\") ? event.type : event,\n\t\t\t\tnamespaces = hasOwn.call(event, \"namespace\") ? event.namespace.split(\".\") : [];\n\n\t\t\tcur = lastElement = tmp = elem = elem || document;\n\n\t\t\t// Don't do events on text and comment nodes\n\t\t\tif (elem.nodeType === 3 || elem.nodeType === 8) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// focus/blur morphs to focusin/out; ensure we're not firing them right now\n\t\t\tif (rfocusMorph.test(type + jQuery.event.triggered)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (type.indexOf(\".\") > -1) {\n\n\t\t\t\t// Namespaced trigger; create a regexp to match event type in handle()\n\t\t\t\tnamespaces = type.split(\".\");\n\t\t\t\ttype = namespaces.shift();\n\t\t\t\tnamespaces.sort();\n\t\t\t}\n\t\t\tontype = type.indexOf(\":\") < 0 && \"on\" + type;\n\n\t\t\t// Caller can pass in a jQuery.Event object, Object, or just an event type string\n\t\t\tevent = event[jQuery.expando] ?\n\t\t\t\tevent :\n\t\t\t\tnew jQuery.Event(type, typeof event === \"object\" && event);\n\n\t\t\t// Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)\n\t\t\tevent.isTrigger = onlyHandlers ? 2 : 3;\n\t\t\tevent.namespace = namespaces.join(\".\");\n\t\t\tevent.rnamespace = event.namespace ?\n\t\t\t\tnew RegExp(\"(^|\\\\.)\" + namespaces.join(\"\\\\.(?:.*\\\\.|)\") + \"(\\\\.|$)\") :\n\t\t\t\tnull;\n\n\t\t\t// Clean up the event in case it is being reused\n\t\t\tevent.result = undefined;\n\t\t\tif (!event.target) {\n\t\t\t\tevent.target = elem;\n\t\t\t}\n\n\t\t\t// Clone any incoming data and prepend the event, creating the handler arg list\n\t\t\tdata = data == null ?\n\t\t\t\t[event] :\n\t\t\t\tjQuery.makeArray(data, [event]);\n\n\t\t\t// Allow special events to draw outside the lines\n\t\t\tspecial = jQuery.event.special[type] || {};\n\t\t\tif (!onlyHandlers && special.trigger && special.trigger.apply(elem, data) === false) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Determine event propagation path in advance, per W3C events spec (trac-9951)\n\t\t\t// Bubble up to document, then to window; watch for a global ownerDocument var (trac-9724)\n\t\t\tif (!onlyHandlers && !special.noBubble && !isWindow(elem)) {\n\n\t\t\t\tbubbleType = special.delegateType || type;\n\t\t\t\tif (!rfocusMorph.test(bubbleType + type)) {\n\t\t\t\t\tcur = cur.parentNode;\n\t\t\t\t}\n\t\t\t\tfor (; cur; cur = cur.parentNode) {\n\t\t\t\t\teventPath.push(cur);\n\t\t\t\t\ttmp = cur;\n\t\t\t\t}\n\n\t\t\t\t// Only add window if we got to document (e.g., not plain obj or detached DOM)\n\t\t\t\tif (tmp === (elem.ownerDocument || document)) {\n\t\t\t\t\teventPath.push(tmp.defaultView || tmp.parentWindow || window);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Fire handlers on the event path\n\t\t\ti = 0;\n\t\t\twhile ((cur = eventPath[i++]) && !event.isPropagationStopped()) {\n\t\t\t\tlastElement = cur;\n\t\t\t\tevent.type = i > 1 ?\n\t\t\t\t\tbubbleType :\n\t\t\t\t\tspecial.bindType || type;\n\n\t\t\t\t// jQuery handler\n\t\t\t\thandle = (dataPriv.get(cur, \"events\") || Object.create(null))[event.type] &&\n\t\t\t\t\tdataPriv.get(cur, \"handle\");\n\t\t\t\tif (handle) {\n\t\t\t\t\thandle.apply(cur, data);\n\t\t\t\t}\n\n\t\t\t\t// Native handler\n\t\t\t\thandle = ontype && cur[ontype];\n\t\t\t\tif (handle && handle.apply && acceptData(cur)) {\n\t\t\t\t\tevent.result = handle.apply(cur, data);\n\t\t\t\t\tif (event.result === false) {\n\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tevent.type = type;\n\n\t\t\t// If nobody prevented the default action, do it now\n\t\t\tif (!onlyHandlers && !event.isDefaultPrevented()) {\n\n\t\t\t\tif ((!special._default ||\n\t\t\t\t\tspecial._default.apply(eventPath.pop(), data) === false) &&\n\t\t\t\t\tacceptData(elem)) {\n\n\t\t\t\t\t// Call a native DOM method on the target with the same name as the event.\n\t\t\t\t\t// Don't do default actions on window, that's where global variables be (trac-6170)\n\t\t\t\t\tif (ontype && isFunction(elem[type]) && !isWindow(elem)) {\n\n\t\t\t\t\t\t// Don't re-trigger an onFOO event when we call its FOO() method\n\t\t\t\t\t\ttmp = elem[ontype];\n\n\t\t\t\t\t\tif (tmp) {\n\t\t\t\t\t\t\telem[ontype] = null;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Prevent re-triggering of the same event, since we already bubbled it above\n\t\t\t\t\t\tjQuery.event.triggered = type;\n\n\t\t\t\t\t\tif (event.isPropagationStopped()) {\n\t\t\t\t\t\t\tlastElement.addEventListener(type, stopPropagationCallback);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\telem[type]();\n\n\t\t\t\t\t\tif (event.isPropagationStopped()) {\n\t\t\t\t\t\t\tlastElement.removeEventListener(type, stopPropagationCallback);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tjQuery.event.triggered = undefined;\n\n\t\t\t\t\t\tif (tmp) {\n\t\t\t\t\t\t\telem[ontype] = tmp;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn event.result;\n\t\t},\n\n\t\t// Piggyback on a donor event to simulate a different one\n\t\t// Used only for `focus(in | out)` events\n\t\tsimulate: function (type, elem, event) {\n\t\t\tvar e = jQuery.extend(\n\t\t\t\tnew jQuery.Event(),\n\t\t\t\tevent,\n\t\t\t\t{\n\t\t\t\t\ttype: type,\n\t\t\t\t\tisSimulated: true\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tjQuery.event.trigger(e, null, elem);\n\t\t}\n\n\t});\n\n\tjQuery.fn.extend({\n\n\t\ttrigger: function (type, data) {\n\t\t\treturn this.each(function () {\n\t\t\t\tjQuery.event.trigger(type, data, this);\n\t\t\t});\n\t\t},\n\t\ttriggerHandler: function (type, data) {\n\t\t\tvar elem = this[0];\n\t\t\tif (elem) {\n\t\t\t\treturn jQuery.event.trigger(type, data, elem, true);\n\t\t\t}\n\t\t}\n\t});\n\n\n\tvar\n\t\trbracket = /\\[\\]$/,\n\t\trCRLF = /\\r?\\n/g,\n\t\trsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,\n\t\trsubmittable = /^(?:input|select|textarea|keygen)/i;\n\n\tfunction buildParams(prefix, obj, traditional, add) {\n\t\tvar name;\n\n\t\tif (Array.isArray(obj)) {\n\n\t\t\t// Serialize array item.\n\t\t\tjQuery.each(obj, function (i, v) {\n\t\t\t\tif (traditional || rbracket.test(prefix)) {\n\n\t\t\t\t\t// Treat each array item as a scalar.\n\t\t\t\t\tadd(prefix, v);\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// Item is non-scalar (array or object), encode its numeric index.\n\t\t\t\t\tbuildParams(\n\t\t\t\t\t\tprefix + \"[\" + (typeof v === \"object\" && v != null ? i : \"\") + \"]\",\n\t\t\t\t\t\tv,\n\t\t\t\t\t\ttraditional,\n\t\t\t\t\t\tadd\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t});\n\n\t\t} else if (!traditional && toType(obj) === \"object\") {\n\n\t\t\t// Serialize object item.\n\t\t\tfor (name in obj) {\n\t\t\t\tbuildParams(prefix + \"[\" + name + \"]\", obj[name], traditional, add);\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// Serialize scalar item.\n\t\t\tadd(prefix, obj);\n\t\t}\n\t}\n\n\t// Serialize an array of form elements or a set of\n\t// key/values into a query string\n\tjQuery.param = function (a, traditional) {\n\t\tvar prefix,\n\t\t\ts = [],\n\t\t\tadd = function (key, valueOrFunction) {\n\n\t\t\t\t// If value is a function, invoke it and use its return value\n\t\t\t\tvar value = isFunction(valueOrFunction) ?\n\t\t\t\t\tvalueOrFunction() :\n\t\t\t\t\tvalueOrFunction;\n\n\t\t\t\ts[s.length] = encodeURIComponent(key) + \"=\" +\n\t\t\t\t\tencodeURIComponent(value == null ? \"\" : value);\n\t\t\t};\n\n\t\tif (a == null) {\n\t\t\treturn \"\";\n\t\t}\n\n\t\t// If an array was passed in, assume that it is an array of form elements.\n\t\tif (Array.isArray(a) || (a.jquery && !jQuery.isPlainObject(a))) {\n\n\t\t\t// Serialize the form elements\n\t\t\tjQuery.each(a, function () {\n\t\t\t\tadd(this.name, this.value);\n\t\t\t});\n\n\t\t} else {\n\n\t\t\t// If traditional, encode the \"old\" way (the way 1.3.2 or older\n\t\t\t// did it), otherwise encode params recursively.\n\t\t\tfor (prefix in a) {\n\t\t\t\tbuildParams(prefix, a[prefix], traditional, add);\n\t\t\t}\n\t\t}\n\n\t\t// Return the resulting serialization\n\t\treturn s.join(\"&\");\n\t};\n\n\tjQuery.fn.extend({\n\t\tserialize: function () {\n\t\t\treturn jQuery.param(this.serializeArray());\n\t\t},\n\t\tserializeArray: function () {\n\t\t\treturn this.map(function () {\n\n\t\t\t\t// Can add propHook for \"elements\" to filter or add form elements\n\t\t\t\tvar elements = jQuery.prop(this, \"elements\");\n\t\t\t\treturn elements ? jQuery.makeArray(elements) : this;\n\t\t\t}).filter(function () {\n\t\t\t\tvar type = this.type;\n\n\t\t\t\t// Use .is( \":disabled\" ) so that fieldset[disabled] works\n\t\t\t\treturn this.name && !jQuery(this).is(\":disabled\") &&\n\t\t\t\t\trsubmittable.test(this.nodeName) && !rsubmitterTypes.test(type) &&\n\t\t\t\t\t(this.checked || !rcheckableType.test(type));\n\t\t\t}).map(function (_i, elem) {\n\t\t\t\tvar val = jQuery(this).val();\n\n\t\t\t\tif (val == null) {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\n\t\t\t\tif (Array.isArray(val)) {\n\t\t\t\t\treturn jQuery.map(val, function (val) {\n\t\t\t\t\t\treturn { name: elem.name, value: val.replace(rCRLF, \"\\r\\n\") };\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\treturn { name: elem.name, value: val.replace(rCRLF, \"\\r\\n\") };\n\t\t\t}).get();\n\t\t}\n\t});\n\n\n\tvar\n\t\tr20 = /%20/g,\n\t\trhash = /#.*$/,\n\t\trantiCache = /([?&])_=[^&]*/,\n\t\trheaders = /^(.*?):[ \\t]*([^\\r\\n]*)$/mg,\n\n\t\t// trac-7653, trac-8125, trac-8152: local protocol detection\n\t\trlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,\n\t\trnoContent = /^(?:GET|HEAD)$/,\n\t\trprotocol = /^\\/\\//,\n\n\t\t/* Prefilters\n\t\t * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)\n\t\t * 2) These are called:\n\t\t *    - BEFORE asking for a transport\n\t\t *    - AFTER param serialization (s.data is a string if s.processData is true)\n\t\t * 3) key is the dataType\n\t\t * 4) the catchall symbol \"*\" can be used\n\t\t * 5) execution will start with transport dataType and THEN continue down to \"*\" if needed\n\t\t */\n\t\tprefilters = {},\n\n\t\t/* Transports bindings\n\t\t * 1) key is the dataType\n\t\t * 2) the catchall symbol \"*\" can be used\n\t\t * 3) selection will start with transport dataType and THEN go to \"*\" if needed\n\t\t */\n\t\ttransports = {},\n\n\t\t// Avoid comment-prolog char sequence (trac-10098); must appease lint and evade compression\n\t\tallTypes = \"*/\".concat(\"*\"),\n\n\t\t// Anchor tag for parsing the document origin\n\t\toriginAnchor = document.createElement(\"a\");\n\n\toriginAnchor.href = location.href;\n\n\t// Base \"constructor\" for jQuery.ajaxPrefilter and jQuery.ajaxTransport\n\tfunction addToPrefiltersOrTransports(structure) {\n\n\t\t// dataTypeExpression is optional and defaults to \"*\"\n\t\treturn function (dataTypeExpression, func) {\n\n\t\t\tif (typeof dataTypeExpression !== \"string\") {\n\t\t\t\tfunc = dataTypeExpression;\n\t\t\t\tdataTypeExpression = \"*\";\n\t\t\t}\n\n\t\t\tvar dataType,\n\t\t\t\ti = 0,\n\t\t\t\tdataTypes = dataTypeExpression.toLowerCase().match(rnothtmlwhite) || [];\n\n\t\t\tif (isFunction(func)) {\n\n\t\t\t\t// For each dataType in the dataTypeExpression\n\t\t\t\twhile ((dataType = dataTypes[i++])) {\n\n\t\t\t\t\t// Prepend if requested\n\t\t\t\t\tif (dataType[0] === \"+\") {\n\t\t\t\t\t\tdataType = dataType.slice(1) || \"*\";\n\t\t\t\t\t\t(structure[dataType] = structure[dataType] || []).unshift(func);\n\n\t\t\t\t\t\t// Otherwise append\n\t\t\t\t\t} else {\n\t\t\t\t\t\t(structure[dataType] = structure[dataType] || []).push(func);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n\n\t// Base inspection function for prefilters and transports\n\tfunction inspectPrefiltersOrTransports(structure, options, originalOptions, jqXHR) {\n\n\t\tvar inspected = {},\n\t\t\tseekingTransport = (structure === transports);\n\n\t\tfunction inspect(dataType) {\n\t\t\tvar selected;\n\t\t\tinspected[dataType] = true;\n\t\t\tjQuery.each(structure[dataType] || [], function (_, prefilterOrFactory) {\n\t\t\t\tvar dataTypeOrTransport = prefilterOrFactory(options, originalOptions, jqXHR);\n\t\t\t\tif (typeof dataTypeOrTransport === \"string\" &&\n\t\t\t\t\t!seekingTransport && !inspected[dataTypeOrTransport]) {\n\n\t\t\t\t\toptions.dataTypes.unshift(dataTypeOrTransport);\n\t\t\t\t\tinspect(dataTypeOrTransport);\n\t\t\t\t\treturn false;\n\t\t\t\t} else if (seekingTransport) {\n\t\t\t\t\treturn !(selected = dataTypeOrTransport);\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn selected;\n\t\t}\n\n\t\treturn inspect(options.dataTypes[0]) || !inspected[\"*\"] && inspect(\"*\");\n\t}\n\n\t// A special extend for ajax options\n\t// that takes \"flat\" options (not to be deep extended)\n\t// Fixes trac-9887\n\tfunction ajaxExtend(target, src) {\n\t\tvar key, deep,\n\t\t\tflatOptions = jQuery.ajaxSettings.flatOptions || {};\n\n\t\tfor (key in src) {\n\t\t\tif (src[key] !== undefined) {\n\t\t\t\t(flatOptions[key] ? target : (deep || (deep = {})))[key] = src[key];\n\t\t\t}\n\t\t}\n\t\tif (deep) {\n\t\t\tjQuery.extend(true, target, deep);\n\t\t}\n\n\t\treturn target;\n\t}\n\n\t/* Handles responses to an ajax request:\n\t * - finds the right dataType (mediates between content-type and expected dataType)\n\t * - returns the corresponding response\n\t */\n\tfunction ajaxHandleResponses(s, jqXHR, responses) {\n\n\t\tvar ct, type, finalDataType, firstDataType,\n\t\t\tcontents = s.contents,\n\t\t\tdataTypes = s.dataTypes;\n\n\t\t// Remove auto dataType and get content-type in the process\n\t\twhile (dataTypes[0] === \"*\") {\n\t\t\tdataTypes.shift();\n\t\t\tif (ct === undefined) {\n\t\t\t\tct = s.mimeType || jqXHR.getResponseHeader(\"Content-Type\");\n\t\t\t}\n\t\t}\n\n\t\t// Check if we're dealing with a known content-type\n\t\tif (ct) {\n\t\t\tfor (type in contents) {\n\t\t\t\tif (contents[type] && contents[type].test(ct)) {\n\t\t\t\t\tdataTypes.unshift(type);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Check to see if we have a response for the expected dataType\n\t\tif (dataTypes[0] in responses) {\n\t\t\tfinalDataType = dataTypes[0];\n\t\t} else {\n\n\t\t\t// Try convertible dataTypes\n\t\t\tfor (type in responses) {\n\t\t\t\tif (!dataTypes[0] || s.converters[type + \" \" + dataTypes[0]]) {\n\t\t\t\t\tfinalDataType = type;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (!firstDataType) {\n\t\t\t\t\tfirstDataType = type;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Or just use first one\n\t\t\tfinalDataType = finalDataType || firstDataType;\n\t\t}\n\n\t\t// If we found a dataType\n\t\t// We add the dataType to the list if needed\n\t\t// and return the corresponding response\n\t\tif (finalDataType) {\n\t\t\tif (finalDataType !== dataTypes[0]) {\n\t\t\t\tdataTypes.unshift(finalDataType);\n\t\t\t}\n\t\t\treturn responses[finalDataType];\n\t\t}\n\t}\n\n\t/* Chain conversions given the request and the original response\n\t * Also sets the responseXXX fields on the jqXHR instance\n\t */\n\tfunction ajaxConvert(s, response, jqXHR, isSuccess) {\n\t\tvar conv2, current, conv, tmp, prev,\n\t\t\tconverters = {},\n\n\t\t\t// Work with a copy of dataTypes in case we need to modify it for conversion\n\t\t\tdataTypes = s.dataTypes.slice();\n\n\t\t// Create converters map with lowercased keys\n\t\tif (dataTypes[1]) {\n\t\t\tfor (conv in s.converters) {\n\t\t\t\tconverters[conv.toLowerCase()] = s.converters[conv];\n\t\t\t}\n\t\t}\n\n\t\tcurrent = dataTypes.shift();\n\n\t\t// Convert to each sequential dataType\n\t\twhile (current) {\n\n\t\t\tif (s.responseFields[current]) {\n\t\t\t\tjqXHR[s.responseFields[current]] = response;\n\t\t\t}\n\n\t\t\t// Apply the dataFilter if provided\n\t\t\tif (!prev && isSuccess && s.dataFilter) {\n\t\t\t\tresponse = s.dataFilter(response, s.dataType);\n\t\t\t}\n\n\t\t\tprev = current;\n\t\t\tcurrent = dataTypes.shift();\n\n\t\t\tif (current) {\n\n\t\t\t\t// There's only work to do if current dataType is non-auto\n\t\t\t\tif (current === \"*\") {\n\n\t\t\t\t\tcurrent = prev;\n\n\t\t\t\t\t// Convert response if prev dataType is non-auto and differs from current\n\t\t\t\t} else if (prev !== \"*\" && prev !== current) {\n\n\t\t\t\t\t// Seek a direct converter\n\t\t\t\t\tconv = converters[prev + \" \" + current] || converters[\"* \" + current];\n\n\t\t\t\t\t// If none found, seek a pair\n\t\t\t\t\tif (!conv) {\n\t\t\t\t\t\tfor (conv2 in converters) {\n\n\t\t\t\t\t\t\t// If conv2 outputs current\n\t\t\t\t\t\t\ttmp = conv2.split(\" \");\n\t\t\t\t\t\t\tif (tmp[1] === current) {\n\n\t\t\t\t\t\t\t\t// If prev can be converted to accepted input\n\t\t\t\t\t\t\t\tconv = converters[prev + \" \" + tmp[0]] ||\n\t\t\t\t\t\t\t\t\tconverters[\"* \" + tmp[0]];\n\t\t\t\t\t\t\t\tif (conv) {\n\n\t\t\t\t\t\t\t\t\t// Condense equivalence converters\n\t\t\t\t\t\t\t\t\tif (conv === true) {\n\t\t\t\t\t\t\t\t\t\tconv = converters[conv2];\n\n\t\t\t\t\t\t\t\t\t\t// Otherwise, insert the intermediate dataType\n\t\t\t\t\t\t\t\t\t} else if (converters[conv2] !== true) {\n\t\t\t\t\t\t\t\t\t\tcurrent = tmp[0];\n\t\t\t\t\t\t\t\t\t\tdataTypes.unshift(tmp[1]);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Apply converter (if not an equivalence)\n\t\t\t\t\tif (conv !== true) {\n\n\t\t\t\t\t\t// Unless errors are allowed to bubble, catch and return them\n\t\t\t\t\t\tif (conv && s.throws) {\n\t\t\t\t\t\t\tresponse = conv(response);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\tresponse = conv(response);\n\t\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\tstate: \"parsererror\",\n\t\t\t\t\t\t\t\t\terror: conv ? e : \"No conversion from \" + prev + \" to \" + current\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn { state: \"success\", data: response };\n\t}\n\n\tjQuery.extend({\n\n\t\t// Counter for holding the number of active queries\n\t\tactive: 0,\n\n\t\t// Last-Modified header cache for next request\n\t\tlastModified: {},\n\t\tetag: {},\n\n\t\tajaxSettings: {\n\t\t\turl: location.href,\n\t\t\ttype: \"GET\",\n\t\t\tisLocal: rlocalProtocol.test(location.protocol),\n\t\t\tglobal: true,\n\t\t\tprocessData: true,\n\t\t\tasync: true,\n\t\t\tcontentType: \"application/x-www-form-urlencoded; charset=UTF-8\",\n\n\t\t\t/*\n\t\t\ttimeout: 0,\n\t\t\tdata: null,\n\t\t\tdataType: null,\n\t\t\tusername: null,\n\t\t\tpassword: null,\n\t\t\tcache: null,\n\t\t\tthrows: false,\n\t\t\ttraditional: false,\n\t\t\theaders: {},\n\t\t\t*/\n\n\t\t\taccepts: {\n\t\t\t\t\"*\": allTypes,\n\t\t\t\ttext: \"text/plain\",\n\t\t\t\thtml: \"text/html\",\n\t\t\t\txml: \"application/xml, text/xml\",\n\t\t\t\tjson: \"application/json, text/javascript\"\n\t\t\t},\n\n\t\t\tcontents: {\n\t\t\t\txml: /\\bxml\\b/,\n\t\t\t\thtml: /\\bhtml/,\n\t\t\t\tjson: /\\bjson\\b/\n\t\t\t},\n\n\t\t\tresponseFields: {\n\t\t\t\txml: \"responseXML\",\n\t\t\t\ttext: \"responseText\",\n\t\t\t\tjson: \"responseJSON\"\n\t\t\t},\n\n\t\t\t// Data converters\n\t\t\t// Keys separate source (or catchall \"*\") and destination types with a single space\n\t\t\tconverters: {\n\n\t\t\t\t// Convert anything to text\n\t\t\t\t\"* text\": String,\n\n\t\t\t\t// Text to html (true = no transformation)\n\t\t\t\t\"text html\": true,\n\n\t\t\t\t// Evaluate text as a json expression\n\t\t\t\t\"text json\": JSON.parse,\n\n\t\t\t\t// Parse text as xml\n\t\t\t\t\"text xml\": jQuery.parseXML\n\t\t\t},\n\n\t\t\t// For options that shouldn't be deep extended:\n\t\t\t// you can add your own custom options here if\n\t\t\t// and when you create one that shouldn't be\n\t\t\t// deep extended (see ajaxExtend)\n\t\t\tflatOptions: {\n\t\t\t\turl: true,\n\t\t\t\tcontext: true\n\t\t\t}\n\t\t},\n\n\t\t// Creates a full fledged settings object into target\n\t\t// with both ajaxSettings and settings fields.\n\t\t// If target is omitted, writes into ajaxSettings.\n\t\tajaxSetup: function (target, settings) {\n\t\t\treturn settings ?\n\n\t\t\t\t// Building a settings object\n\t\t\t\tajaxExtend(ajaxExtend(target, jQuery.ajaxSettings), settings) :\n\n\t\t\t\t// Extending ajaxSettings\n\t\t\t\tajaxExtend(jQuery.ajaxSettings, target);\n\t\t},\n\n\t\tajaxPrefilter: addToPrefiltersOrTransports(prefilters),\n\t\tajaxTransport: addToPrefiltersOrTransports(transports),\n\n\t\t// Main method\n\t\tajax: function (url, options) {\n\n\t\t\t// If url is an object, simulate pre-1.5 signature\n\t\t\tif (typeof url === \"object\") {\n\t\t\t\toptions = url;\n\t\t\t\turl = undefined;\n\t\t\t}\n\n\t\t\t// Force options to be an object\n\t\t\toptions = options || {};\n\n\t\t\tvar transport,\n\n\t\t\t\t// URL without anti-cache param\n\t\t\t\tcacheURL,\n\n\t\t\t\t// Response headers\n\t\t\t\tresponseHeadersString,\n\t\t\t\tresponseHeaders,\n\n\t\t\t\t// timeout handle\n\t\t\t\ttimeoutTimer,\n\n\t\t\t\t// Url cleanup var\n\t\t\t\turlAnchor,\n\n\t\t\t\t// Request state (becomes false upon send and true upon completion)\n\t\t\t\tcompleted,\n\n\t\t\t\t// To know if global events are to be dispatched\n\t\t\t\tfireGlobals,\n\n\t\t\t\t// Loop variable\n\t\t\t\ti,\n\n\t\t\t\t// uncached part of the url\n\t\t\t\tuncached,\n\n\t\t\t\t// Create the final options object\n\t\t\t\ts = jQuery.ajaxSetup({}, options),\n\n\t\t\t\t// Callbacks context\n\t\t\t\tcallbackContext = s.context || s,\n\n\t\t\t\t// Context for global events is callbackContext if it is a DOM node or jQuery collection\n\t\t\t\tglobalEventContext = s.context &&\n\t\t\t\t\t(callbackContext.nodeType || callbackContext.jquery) ?\n\t\t\t\t\tjQuery(callbackContext) :\n\t\t\t\t\tjQuery.event,\n\n\t\t\t\t// Deferreds\n\t\t\t\tdeferred = jQuery.Deferred(),\n\t\t\t\tcompleteDeferred = jQuery.Callbacks(\"once memory\"),\n\n\t\t\t\t// Status-dependent callbacks\n\t\t\t\tstatusCode = s.statusCode || {},\n\n\t\t\t\t// Headers (they are sent all at once)\n\t\t\t\trequestHeaders = {},\n\t\t\t\trequestHeadersNames = {},\n\n\t\t\t\t// Default abort message\n\t\t\t\tstrAbort = \"canceled\",\n\n\t\t\t\t// Fake xhr\n\t\t\t\tjqXHR = {\n\t\t\t\t\treadyState: 0,\n\n\t\t\t\t\t// Builds headers hashtable if needed\n\t\t\t\t\tgetResponseHeader: function (key) {\n\t\t\t\t\t\tvar match;\n\t\t\t\t\t\tif (completed) {\n\t\t\t\t\t\t\tif (!responseHeaders) {\n\t\t\t\t\t\t\t\tresponseHeaders = {};\n\t\t\t\t\t\t\t\twhile ((match = rheaders.exec(responseHeadersString))) {\n\t\t\t\t\t\t\t\t\tresponseHeaders[match[1].toLowerCase() + \" \"] =\n\t\t\t\t\t\t\t\t\t\t(responseHeaders[match[1].toLowerCase() + \" \"] || [])\n\t\t\t\t\t\t\t\t\t\t\t.concat(match[2]);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tmatch = responseHeaders[key.toLowerCase() + \" \"];\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn match == null ? null : match.join(\", \");\n\t\t\t\t\t},\n\n\t\t\t\t\t// Raw string\n\t\t\t\t\tgetAllResponseHeaders: function () {\n\t\t\t\t\t\treturn completed ? responseHeadersString : null;\n\t\t\t\t\t},\n\n\t\t\t\t\t// Caches the header\n\t\t\t\t\tsetRequestHeader: function (name, value) {\n\t\t\t\t\t\tif (completed == null) {\n\t\t\t\t\t\t\tname = requestHeadersNames[name.toLowerCase()] =\n\t\t\t\t\t\t\t\trequestHeadersNames[name.toLowerCase()] || name;\n\t\t\t\t\t\t\trequestHeaders[name] = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn this;\n\t\t\t\t\t},\n\n\t\t\t\t\t// Overrides response content-type header\n\t\t\t\t\toverrideMimeType: function (type) {\n\t\t\t\t\t\tif (completed == null) {\n\t\t\t\t\t\t\ts.mimeType = type;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn this;\n\t\t\t\t\t},\n\n\t\t\t\t\t// Status-dependent callbacks\n\t\t\t\t\tstatusCode: function (map) {\n\t\t\t\t\t\tvar code;\n\t\t\t\t\t\tif (map) {\n\t\t\t\t\t\t\tif (completed) {\n\n\t\t\t\t\t\t\t\t// Execute the appropriate callbacks\n\t\t\t\t\t\t\t\tjqXHR.always(map[jqXHR.status]);\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t// Lazy-add the new callbacks in a way that preserves old ones\n\t\t\t\t\t\t\t\tfor (code in map) {\n\t\t\t\t\t\t\t\t\tstatusCode[code] = [statusCode[code], map[code]];\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn this;\n\t\t\t\t\t},\n\n\t\t\t\t\t// Cancel the request\n\t\t\t\t\tabort: function (statusText) {\n\t\t\t\t\t\tvar finalText = statusText || strAbort;\n\t\t\t\t\t\tif (transport) {\n\t\t\t\t\t\t\ttransport.abort(finalText);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdone(0, finalText);\n\t\t\t\t\t\treturn this;\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t// Attach deferreds\n\t\t\tdeferred.promise(jqXHR);\n\n\t\t\t// Add protocol if not provided (prefilters might expect it)\n\t\t\t// Handle falsy url in the settings object (trac-10093: consistency with old signature)\n\t\t\t// We also use the url parameter if available\n\t\t\ts.url = ((url || s.url || location.href) + \"\")\n\t\t\t\t.replace(rprotocol, location.protocol + \"//\");\n\n\t\t\t// Alias method option to type as per ticket trac-12004\n\t\t\ts.type = options.method || options.type || s.method || s.type;\n\n\t\t\t// Extract dataTypes list\n\t\t\ts.dataTypes = (s.dataType || \"*\").toLowerCase().match(rnothtmlwhite) || [\"\"];\n\n\t\t\t// A cross-domain request is in order when the origin doesn't match the current origin.\n\t\t\tif (s.crossDomain == null) {\n\t\t\t\turlAnchor = document.createElement(\"a\");\n\n\t\t\t\t// Support: IE <=8 - 11, Edge 12 - 15\n\t\t\t\t// IE throws exception on accessing the href property if url is malformed,\n\t\t\t\t// e.g. http://example.com:80x/\n\t\t\t\ttry {\n\t\t\t\t\turlAnchor.href = s.url;\n\n\t\t\t\t\t// Support: IE <=8 - 11 only\n\t\t\t\t\t// Anchor's host property isn't correctly set when s.url is relative\n\t\t\t\t\turlAnchor.href = urlAnchor.href;\n\t\t\t\t\ts.crossDomain = originAnchor.protocol + \"//\" + originAnchor.host !==\n\t\t\t\t\t\turlAnchor.protocol + \"//\" + urlAnchor.host;\n\t\t\t\t} catch (e) {\n\n\t\t\t\t\t// If there is an error parsing the URL, assume it is crossDomain,\n\t\t\t\t\t// it can be rejected by the transport if it is invalid\n\t\t\t\t\ts.crossDomain = true;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Convert data if not already a string\n\t\t\tif (s.data && s.processData && typeof s.data !== \"string\") {\n\t\t\t\ts.data = jQuery.param(s.data, s.traditional);\n\t\t\t}\n\n\t\t\t// Apply prefilters\n\t\t\tinspectPrefiltersOrTransports(prefilters, s, options, jqXHR);\n\n\t\t\t// If request was aborted inside a prefilter, stop there\n\t\t\tif (completed) {\n\t\t\t\treturn jqXHR;\n\t\t\t}\n\n\t\t\t// We can fire global events as of now if asked to\n\t\t\t// Don't fire events if jQuery.event is undefined in an AMD-usage scenario (trac-15118)\n\t\t\tfireGlobals = jQuery.event && s.global;\n\n\t\t\t// Watch for a new set of requests\n\t\t\tif (fireGlobals && jQuery.active++ === 0) {\n\t\t\t\tjQuery.event.trigger(\"ajaxStart\");\n\t\t\t}\n\n\t\t\t// Uppercase the type\n\t\t\ts.type = s.type.toUpperCase();\n\n\t\t\t// Determine if request has content\n\t\t\ts.hasContent = !rnoContent.test(s.type);\n\n\t\t\t// Save the URL in case we're toying with the If-Modified-Since\n\t\t\t// and/or If-None-Match header later on\n\t\t\t// Remove hash to simplify url manipulation\n\t\t\tcacheURL = s.url.replace(rhash, \"\");\n\n\t\t\t// More options handling for requests with no content\n\t\t\tif (!s.hasContent) {\n\n\t\t\t\t// Remember the hash so we can put it back\n\t\t\t\tuncached = s.url.slice(cacheURL.length);\n\n\t\t\t\t// If data is available and should be processed, append data to url\n\t\t\t\tif (s.data && (s.processData || typeof s.data === \"string\")) {\n\t\t\t\t\tcacheURL += (rquery.test(cacheURL) ? \"&\" : \"?\") + s.data;\n\n\t\t\t\t\t// trac-9682: remove data so that it's not used in an eventual retry\n\t\t\t\t\tdelete s.data;\n\t\t\t\t}\n\n\t\t\t\t// Add or update anti-cache param if needed\n\t\t\t\tif (s.cache === false) {\n\t\t\t\t\tcacheURL = cacheURL.replace(rantiCache, \"$1\");\n\t\t\t\t\tuncached = (rquery.test(cacheURL) ? \"&\" : \"?\") + \"_=\" + (nonce.guid++) +\n\t\t\t\t\t\tuncached;\n\t\t\t\t}\n\n\t\t\t\t// Put hash and anti-cache on the URL that will be requested (gh-1732)\n\t\t\t\ts.url = cacheURL + uncached;\n\n\t\t\t\t// Change '%20' to '+' if this is encoded form body content (gh-2658)\n\t\t\t} else if (s.data && s.processData &&\n\t\t\t\t(s.contentType || \"\").indexOf(\"application/x-www-form-urlencoded\") === 0) {\n\t\t\t\ts.data = s.data.replace(r20, \"+\");\n\t\t\t}\n\n\t\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\t\tif (s.ifModified) {\n\t\t\t\tif (jQuery.lastModified[cacheURL]) {\n\t\t\t\t\tjqXHR.setRequestHeader(\"If-Modified-Since\", jQuery.lastModified[cacheURL]);\n\t\t\t\t}\n\t\t\t\tif (jQuery.etag[cacheURL]) {\n\t\t\t\t\tjqXHR.setRequestHeader(\"If-None-Match\", jQuery.etag[cacheURL]);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Set the correct header, if data is being sent\n\t\t\tif (s.data && s.hasContent && s.contentType !== false || options.contentType) {\n\t\t\t\tjqXHR.setRequestHeader(\"Content-Type\", s.contentType);\n\t\t\t}\n\n\t\t\t// Set the Accepts header for the server, depending on the dataType\n\t\t\tjqXHR.setRequestHeader(\n\t\t\t\t\"Accept\",\n\t\t\t\ts.dataTypes[0] && s.accepts[s.dataTypes[0]] ?\n\t\t\t\t\ts.accepts[s.dataTypes[0]] +\n\t\t\t\t\t(s.dataTypes[0] !== \"*\" ? \", \" + allTypes + \"; q=0.01\" : \"\") :\n\t\t\t\t\ts.accepts[\"*\"]\n\t\t\t);\n\n\t\t\t// Check for headers option\n\t\t\tfor (i in s.headers) {\n\t\t\t\tjqXHR.setRequestHeader(i, s.headers[i]);\n\t\t\t}\n\n\t\t\t// Allow custom headers/mimetypes and early abort\n\t\t\tif (s.beforeSend &&\n\t\t\t\t(s.beforeSend.call(callbackContext, jqXHR, s) === false || completed)) {\n\n\t\t\t\t// Abort if not done already and return\n\t\t\t\treturn jqXHR.abort();\n\t\t\t}\n\n\t\t\t// Aborting is no longer a cancellation\n\t\t\tstrAbort = \"abort\";\n\n\t\t\t// Install callbacks on deferreds\n\t\t\tcompleteDeferred.add(s.complete);\n\t\t\tjqXHR.done(s.success);\n\t\t\tjqXHR.fail(s.error);\n\n\t\t\t// Get transport\n\t\t\ttransport = inspectPrefiltersOrTransports(transports, s, options, jqXHR);\n\n\t\t\t// If no transport, we auto-abort\n\t\t\tif (!transport) {\n\t\t\t\tdone(-1, \"No Transport\");\n\t\t\t} else {\n\t\t\t\tjqXHR.readyState = 1;\n\n\t\t\t\t// Send global event\n\t\t\t\tif (fireGlobals) {\n\t\t\t\t\tglobalEventContext.trigger(\"ajaxSend\", [jqXHR, s]);\n\t\t\t\t}\n\n\t\t\t\t// If request was aborted inside ajaxSend, stop there\n\t\t\t\tif (completed) {\n\t\t\t\t\treturn jqXHR;\n\t\t\t\t}\n\n\t\t\t\t// Timeout\n\t\t\t\tif (s.async && s.timeout > 0) {\n\t\t\t\t\ttimeoutTimer = window.setTimeout(function () {\n\t\t\t\t\t\tjqXHR.abort(\"timeout\");\n\t\t\t\t\t}, s.timeout);\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tcompleted = false;\n\t\t\t\t\ttransport.send(requestHeaders, done);\n\t\t\t\t} catch (e) {\n\n\t\t\t\t\t// Rethrow post-completion exceptions\n\t\t\t\t\tif (completed) {\n\t\t\t\t\t\tthrow e;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Propagate others as results\n\t\t\t\t\tdone(-1, e);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Callback for when everything is done\n\t\t\tfunction done(status, nativeStatusText, responses, headers) {\n\t\t\t\tvar isSuccess, success, error, response, modified,\n\t\t\t\t\tstatusText = nativeStatusText;\n\n\t\t\t\t// Ignore repeat invocations\n\t\t\t\tif (completed) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tcompleted = true;\n\n\t\t\t\t// Clear timeout if it exists\n\t\t\t\tif (timeoutTimer) {\n\t\t\t\t\twindow.clearTimeout(timeoutTimer);\n\t\t\t\t}\n\n\t\t\t\t// Dereference transport for early garbage collection\n\t\t\t\t// (no matter how long the jqXHR object will be used)\n\t\t\t\ttransport = undefined;\n\n\t\t\t\t// Cache response headers\n\t\t\t\tresponseHeadersString = headers || \"\";\n\n\t\t\t\t// Set readyState\n\t\t\t\tjqXHR.readyState = status > 0 ? 4 : 0;\n\n\t\t\t\t// Determine if successful\n\t\t\t\tisSuccess = status >= 200 && status < 300 || status === 304;\n\n\t\t\t\t// Get response data\n\t\t\t\tif (responses) {\n\t\t\t\t\tresponse = ajaxHandleResponses(s, jqXHR, responses);\n\t\t\t\t}\n\n\t\t\t\t// Use a noop converter for missing script but not if jsonp\n\t\t\t\tif (!isSuccess &&\n\t\t\t\t\tjQuery.inArray(\"script\", s.dataTypes) > -1 &&\n\t\t\t\t\tjQuery.inArray(\"json\", s.dataTypes) < 0) {\n\t\t\t\t\ts.converters[\"text script\"] = function () { };\n\t\t\t\t}\n\n\t\t\t\t// Convert no matter what (that way responseXXX fields are always set)\n\t\t\t\tresponse = ajaxConvert(s, response, jqXHR, isSuccess);\n\n\t\t\t\t// If successful, handle type chaining\n\t\t\t\tif (isSuccess) {\n\n\t\t\t\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\t\t\t\tif (s.ifModified) {\n\t\t\t\t\t\tmodified = jqXHR.getResponseHeader(\"Last-Modified\");\n\t\t\t\t\t\tif (modified) {\n\t\t\t\t\t\t\tjQuery.lastModified[cacheURL] = modified;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmodified = jqXHR.getResponseHeader(\"etag\");\n\t\t\t\t\t\tif (modified) {\n\t\t\t\t\t\t\tjQuery.etag[cacheURL] = modified;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// if no content\n\t\t\t\t\tif (status === 204 || s.type === \"HEAD\") {\n\t\t\t\t\t\tstatusText = \"nocontent\";\n\n\t\t\t\t\t\t// if not modified\n\t\t\t\t\t} else if (status === 304) {\n\t\t\t\t\t\tstatusText = \"notmodified\";\n\n\t\t\t\t\t\t// If we have data, let's convert it\n\t\t\t\t\t} else {\n\t\t\t\t\t\tstatusText = response.state;\n\t\t\t\t\t\tsuccess = response.data;\n\t\t\t\t\t\terror = response.error;\n\t\t\t\t\t\tisSuccess = !error;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\n\t\t\t\t\t// Extract error from statusText and normalize for non-aborts\n\t\t\t\t\terror = statusText;\n\t\t\t\t\tif (status || !statusText) {\n\t\t\t\t\t\tstatusText = \"error\";\n\t\t\t\t\t\tif (status < 0) {\n\t\t\t\t\t\t\tstatus = 0;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Set data for the fake xhr object\n\t\t\t\tjqXHR.status = status;\n\t\t\t\tjqXHR.statusText = (nativeStatusText || statusText) + \"\";\n\n\t\t\t\t// Success/Error\n\t\t\t\tif (isSuccess) {\n\t\t\t\t\tdeferred.resolveWith(callbackContext, [success, statusText, jqXHR]);\n\t\t\t\t} else {\n\t\t\t\t\tdeferred.rejectWith(callbackContext, [jqXHR, statusText, error]);\n\t\t\t\t}\n\n\t\t\t\t// Status-dependent callbacks\n\t\t\t\tjqXHR.statusCode(statusCode);\n\t\t\t\tstatusCode = undefined;\n\n\t\t\t\tif (fireGlobals) {\n\t\t\t\t\tglobalEventContext.trigger(isSuccess ? \"ajaxSuccess\" : \"ajaxError\",\n\t\t\t\t\t\t[jqXHR, s, isSuccess ? success : error]);\n\t\t\t\t}\n\n\t\t\t\t// Complete\n\t\t\t\tcompleteDeferred.fireWith(callbackContext, [jqXHR, statusText]);\n\n\t\t\t\tif (fireGlobals) {\n\t\t\t\t\tglobalEventContext.trigger(\"ajaxComplete\", [jqXHR, s]);\n\n\t\t\t\t\t// Handle the global AJAX counter\n\t\t\t\t\tif (!(--jQuery.active)) {\n\t\t\t\t\t\tjQuery.event.trigger(\"ajaxStop\");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn jqXHR;\n\t\t},\n\n\t\tgetJSON: function (url, data, callback) {\n\t\t\treturn jQuery.get(url, data, callback, \"json\");\n\t\t},\n\n\t\tgetScript: function (url, callback) {\n\t\t\treturn jQuery.get(url, undefined, callback, \"script\");\n\t\t}\n\t});\n\n\tjQuery.each([\"get\", \"post\"], function (_i, method) {\n\t\tjQuery[method] = function (url, data, callback, type) {\n\n\t\t\t// Shift arguments if data argument was omitted\n\t\t\tif (isFunction(data)) {\n\t\t\t\ttype = type || callback;\n\t\t\t\tcallback = data;\n\t\t\t\tdata = undefined;\n\t\t\t}\n\n\t\t\t// The url can be an options object (which then must have .url)\n\t\t\treturn jQuery.ajax(jQuery.extend({\n\t\t\t\turl: url,\n\t\t\t\ttype: method,\n\t\t\t\tdataType: type,\n\t\t\t\tdata: data,\n\t\t\t\tsuccess: callback\n\t\t\t}, jQuery.isPlainObject(url) && url));\n\t\t};\n\t});\n\n\tjQuery.ajaxPrefilter(function (s) {\n\t\tvar i;\n\t\tfor (i in s.headers) {\n\t\t\tif (i.toLowerCase() === \"content-type\") {\n\t\t\t\ts.contentType = s.headers[i] || \"\";\n\t\t\t}\n\t\t}\n\t});\n\n\n\tjQuery._evalUrl = function (url, options, doc) {\n\t\treturn jQuery.ajax({\n\t\t\turl: url,\n\n\t\t\t// Make this explicit, since user can override this through ajaxSetup (trac-11264)\n\t\t\ttype: \"GET\",\n\t\t\tdataType: \"script\",\n\t\t\tcache: true,\n\t\t\tasync: false,\n\t\t\tglobal: false,\n\n\t\t\t// Only evaluate the response if it is successful (gh-4126)\n\t\t\t// dataFilter is not invoked for failure responses, so using it instead\n\t\t\t// of the default converter is kludgy but it works.\n\t\t\tconverters: {\n\t\t\t\t\"text script\": function () { }\n\t\t\t},\n\t\t\tdataFilter: function (response) {\n\t\t\t\tjQuery.globalEval(response, options, doc);\n\t\t\t}\n\t\t});\n\t};\n\n\n\tjQuery.fn.extend({\n\t\twrapAll: function (html) {\n\t\t\tvar wrap;\n\n\t\t\tif (this[0]) {\n\t\t\t\tif (isFunction(html)) {\n\t\t\t\t\thtml = html.call(this[0]);\n\t\t\t\t}\n\n\t\t\t\t// The elements to wrap the target around\n\t\t\t\twrap = jQuery(html, this[0].ownerDocument).eq(0).clone(true);\n\n\t\t\t\tif (this[0].parentNode) {\n\t\t\t\t\twrap.insertBefore(this[0]);\n\t\t\t\t}\n\n\t\t\t\twrap.map(function () {\n\t\t\t\t\tvar elem = this;\n\n\t\t\t\t\twhile (elem.firstElementChild) {\n\t\t\t\t\t\telem = elem.firstElementChild;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn elem;\n\t\t\t\t}).append(this);\n\t\t\t}\n\n\t\t\treturn this;\n\t\t},\n\n\t\twrapInner: function (html) {\n\t\t\tif (isFunction(html)) {\n\t\t\t\treturn this.each(function (i) {\n\t\t\t\t\tjQuery(this).wrapInner(html.call(this, i));\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn this.each(function () {\n\t\t\t\tvar self = jQuery(this),\n\t\t\t\t\tcontents = self.contents();\n\n\t\t\t\tif (contents.length) {\n\t\t\t\t\tcontents.wrapAll(html);\n\n\t\t\t\t} else {\n\t\t\t\t\tself.append(html);\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\twrap: function (html) {\n\t\t\tvar htmlIsFunction = isFunction(html);\n\n\t\t\treturn this.each(function (i) {\n\t\t\t\tjQuery(this).wrapAll(htmlIsFunction ? html.call(this, i) : html);\n\t\t\t});\n\t\t},\n\n\t\tunwrap: function (selector) {\n\t\t\tthis.parent(selector).not(\"body\").each(function () {\n\t\t\t\tjQuery(this).replaceWith(this.childNodes);\n\t\t\t});\n\t\t\treturn this;\n\t\t}\n\t});\n\n\n\tjQuery.expr.pseudos.hidden = function (elem) {\n\t\treturn !jQuery.expr.pseudos.visible(elem);\n\t};\n\tjQuery.expr.pseudos.visible = function (elem) {\n\t\treturn !!(elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length);\n\t};\n\n\n\n\n\tjQuery.ajaxSettings.xhr = function () {\n\t\ttry {\n\t\t\treturn new window.XMLHttpRequest();\n\t\t} catch (e) { }\n\t};\n\n\tvar xhrSuccessStatus = {\n\n\t\t// File protocol always yields status code 0, assume 200\n\t\t0: 200,\n\n\t\t// Support: IE <=9 only\n\t\t// trac-1450: sometimes IE returns 1223 when it should be 204\n\t\t1223: 204\n\t},\n\t\txhrSupported = jQuery.ajaxSettings.xhr();\n\n\tsupport.cors = !!xhrSupported && (\"withCredentials\" in xhrSupported);\n\tsupport.ajax = xhrSupported = !!xhrSupported;\n\n\tjQuery.ajaxTransport(function (options) {\n\t\tvar callback, errorCallback;\n\n\t\t// Cross domain only allowed if supported through XMLHttpRequest\n\t\tif (support.cors || xhrSupported && !options.crossDomain) {\n\t\t\treturn {\n\t\t\t\tsend: function (headers, complete) {\n\t\t\t\t\tvar i,\n\t\t\t\t\t\txhr = options.xhr();\n\n\t\t\t\t\txhr.open(\n\t\t\t\t\t\toptions.type,\n\t\t\t\t\t\toptions.url,\n\t\t\t\t\t\toptions.async,\n\t\t\t\t\t\toptions.username,\n\t\t\t\t\t\toptions.password\n\t\t\t\t\t);\n\n\t\t\t\t\t// Apply custom fields if provided\n\t\t\t\t\tif (options.xhrFields) {\n\t\t\t\t\t\tfor (i in options.xhrFields) {\n\t\t\t\t\t\t\txhr[i] = options.xhrFields[i];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Override mime type if needed\n\t\t\t\t\tif (options.mimeType && xhr.overrideMimeType) {\n\t\t\t\t\t\txhr.overrideMimeType(options.mimeType);\n\t\t\t\t\t}\n\n\t\t\t\t\t// X-Requested-With header\n\t\t\t\t\t// For cross-domain requests, seeing as conditions for a preflight are\n\t\t\t\t\t// akin to a jigsaw puzzle, we simply never set it to be sure.\n\t\t\t\t\t// (it can always be set on a per-request basis or even using ajaxSetup)\n\t\t\t\t\t// For same-domain requests, won't change header if already provided.\n\t\t\t\t\tif (!options.crossDomain && !headers[\"X-Requested-With\"]) {\n\t\t\t\t\t\theaders[\"X-Requested-With\"] = \"XMLHttpRequest\";\n\t\t\t\t\t}\n\n\t\t\t\t\t// Set headers\n\t\t\t\t\tfor (i in headers) {\n\t\t\t\t\t\txhr.setRequestHeader(i, headers[i]);\n\t\t\t\t\t}\n\n\t\t\t\t\t// Callback\n\t\t\t\t\tcallback = function (type) {\n\t\t\t\t\t\treturn function () {\n\t\t\t\t\t\t\tif (callback) {\n\t\t\t\t\t\t\t\tcallback = errorCallback = xhr.onload =\n\t\t\t\t\t\t\t\t\txhr.onerror = xhr.onabort = xhr.ontimeout =\n\t\t\t\t\t\t\t\t\txhr.onreadystatechange = null;\n\n\t\t\t\t\t\t\t\tif (type === \"abort\") {\n\t\t\t\t\t\t\t\t\txhr.abort();\n\t\t\t\t\t\t\t\t} else if (type === \"error\") {\n\n\t\t\t\t\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t\t\t\t\t// On a manual native abort, IE9 throws\n\t\t\t\t\t\t\t\t\t// errors on any property access that is not readyState\n\t\t\t\t\t\t\t\t\tif (typeof xhr.status !== \"number\") {\n\t\t\t\t\t\t\t\t\t\tcomplete(0, \"error\");\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tcomplete(\n\n\t\t\t\t\t\t\t\t\t\t\t// File: protocol always yields status 0; see trac-8605, trac-14207\n\t\t\t\t\t\t\t\t\t\t\txhr.status,\n\t\t\t\t\t\t\t\t\t\t\txhr.statusText\n\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tcomplete(\n\t\t\t\t\t\t\t\t\t\txhrSuccessStatus[xhr.status] || xhr.status,\n\t\t\t\t\t\t\t\t\t\txhr.statusText,\n\n\t\t\t\t\t\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t\t\t\t\t\t// IE9 has no XHR2 but throws on binary (trac-11426)\n\t\t\t\t\t\t\t\t\t\t// For XHR2 non-text, let the caller handle it (gh-2498)\n\t\t\t\t\t\t\t\t\t\t(xhr.responseType || \"text\") !== \"text\" ||\n\t\t\t\t\t\t\t\t\t\t\ttypeof xhr.responseText !== \"string\" ?\n\t\t\t\t\t\t\t\t\t\t\t{ binary: xhr.response } :\n\t\t\t\t\t\t\t\t\t\t\t{ text: xhr.responseText },\n\t\t\t\t\t\t\t\t\t\txhr.getAllResponseHeaders()\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\t\t\t\t\t};\n\n\t\t\t\t\t// Listen to events\n\t\t\t\t\txhr.onload = callback();\n\t\t\t\t\terrorCallback = xhr.onerror = xhr.ontimeout = callback(\"error\");\n\n\t\t\t\t\t// Support: IE 9 only\n\t\t\t\t\t// Use onreadystatechange to replace onabort\n\t\t\t\t\t// to handle uncaught aborts\n\t\t\t\t\tif (xhr.onabort !== undefined) {\n\t\t\t\t\t\txhr.onabort = errorCallback;\n\t\t\t\t\t} else {\n\t\t\t\t\t\txhr.onreadystatechange = function () {\n\n\t\t\t\t\t\t\t// Check readyState before timeout as it changes\n\t\t\t\t\t\t\tif (xhr.readyState === 4) {\n\n\t\t\t\t\t\t\t\t// Allow onerror to be called first,\n\t\t\t\t\t\t\t\t// but that will not handle a native abort\n\t\t\t\t\t\t\t\t// Also, save errorCallback to a variable\n\t\t\t\t\t\t\t\t// as xhr.onerror cannot be accessed\n\t\t\t\t\t\t\t\twindow.setTimeout(function () {\n\t\t\t\t\t\t\t\t\tif (callback) {\n\t\t\t\t\t\t\t\t\t\terrorCallback();\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\t// Create the abort callback\n\t\t\t\t\tcallback = callback(\"abort\");\n\n\t\t\t\t\ttry {\n\n\t\t\t\t\t\t// Do send the request (this may raise an exception)\n\t\t\t\t\t\txhr.send(options.hasContent && options.data || null);\n\t\t\t\t\t} catch (e) {\n\n\t\t\t\t\t\t// trac-14683: Only rethrow if this hasn't been notified as an error yet\n\t\t\t\t\t\tif (callback) {\n\t\t\t\t\t\t\tthrow e;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\t\tabort: function () {\n\t\t\t\t\tif (callback) {\n\t\t\t\t\t\tcallback();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t});\n\n\n\n\n\t// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432)\n\tjQuery.ajaxPrefilter(function (s) {\n\t\tif (s.crossDomain) {\n\t\t\ts.contents.script = false;\n\t\t}\n\t});\n\n\t// Install script dataType\n\tjQuery.ajaxSetup({\n\t\taccepts: {\n\t\t\tscript: \"text/javascript, application/javascript, \" +\n\t\t\t\t\"application/ecmascript, application/x-ecmascript\"\n\t\t},\n\t\tcontents: {\n\t\t\tscript: /\\b(?:java|ecma)script\\b/\n\t\t},\n\t\tconverters: {\n\t\t\t\"text script\": function (text) {\n\t\t\t\tjQuery.globalEval(text);\n\t\t\t\treturn text;\n\t\t\t}\n\t\t}\n\t});\n\n\t// Handle cache's special case and crossDomain\n\tjQuery.ajaxPrefilter(\"script\", function (s) {\n\t\tif (s.cache === undefined) {\n\t\t\ts.cache = false;\n\t\t}\n\t\tif (s.crossDomain) {\n\t\t\ts.type = \"GET\";\n\t\t}\n\t});\n\n\t// Bind script tag hack transport\n\tjQuery.ajaxTransport(\"script\", function (s) {\n\n\t\t// This transport only deals with cross domain or forced-by-attrs requests\n\t\tif (s.crossDomain || s.scriptAttrs) {\n\t\t\tvar script, callback;\n\t\t\treturn {\n\t\t\t\tsend: function (_, complete) {\n\t\t\t\t\tscript = jQuery(\"<script>\")\n\t\t\t\t\t\t.attr(s.scriptAttrs || {})\n\t\t\t\t\t\t.prop({ charset: s.scriptCharset, src: s.url })\n\t\t\t\t\t\t.on(\"load error\", callback = function (evt) {\n\t\t\t\t\t\t\tscript.remove();\n\t\t\t\t\t\t\tcallback = null;\n\t\t\t\t\t\t\tif (evt) {\n\t\t\t\t\t\t\t\tcomplete(evt.type === \"error\" ? 404 : 200, evt.type);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\n\t\t\t\t\t// Use native DOM manipulation to avoid our domManip AJAX trickery\n\t\t\t\t\tdocument.head.appendChild(script[0]);\n\t\t\t\t},\n\t\t\t\tabort: function () {\n\t\t\t\t\tif (callback) {\n\t\t\t\t\t\tcallback();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t});\n\n\n\n\n\tvar oldCallbacks = [],\n\t\trjsonp = /(=)\\?(?=&|$)|\\?\\?/;\n\n\t// Default jsonp settings\n\tjQuery.ajaxSetup({\n\t\tjsonp: \"callback\",\n\t\tjsonpCallback: function () {\n\t\t\tvar callback = oldCallbacks.pop() || (jQuery.expando + \"_\" + (nonce.guid++));\n\t\t\tthis[callback] = true;\n\t\t\treturn callback;\n\t\t}\n\t});\n\n\t// Detect, normalize options and install callbacks for jsonp requests\n\tjQuery.ajaxPrefilter(\"json jsonp\", function (s, originalSettings, jqXHR) {\n\n\t\tvar callbackName, overwritten, responseContainer,\n\t\t\tjsonProp = s.jsonp !== false && (rjsonp.test(s.url) ?\n\t\t\t\t\"url\" :\n\t\t\t\ttypeof s.data === \"string\" &&\n\t\t\t\t(s.contentType || \"\")\n\t\t\t\t\t.indexOf(\"application/x-www-form-urlencoded\") === 0 &&\n\t\t\t\trjsonp.test(s.data) && \"data\"\n\t\t\t);\n\n\t\t// Handle iff the expected data type is \"jsonp\" or we have a parameter to set\n\t\tif (jsonProp || s.dataTypes[0] === \"jsonp\") {\n\n\t\t\t// Get callback name, remembering preexisting value associated with it\n\t\t\tcallbackName = s.jsonpCallback = isFunction(s.jsonpCallback) ?\n\t\t\t\ts.jsonpCallback() :\n\t\t\t\ts.jsonpCallback;\n\n\t\t\t// Insert callback into url or form data\n\t\t\tif (jsonProp) {\n\t\t\t\ts[jsonProp] = s[jsonProp].replace(rjsonp, \"$1\" + callbackName);\n\t\t\t} else if (s.jsonp !== false) {\n\t\t\t\ts.url += (rquery.test(s.url) ? \"&\" : \"?\") + s.jsonp + \"=\" + callbackName;\n\t\t\t}\n\n\t\t\t// Use data converter to retrieve json after script execution\n\t\t\ts.converters[\"script json\"] = function () {\n\t\t\t\tif (!responseContainer) {\n\t\t\t\t\tjQuery.error(callbackName + \" was not called\");\n\t\t\t\t}\n\t\t\t\treturn responseContainer[0];\n\t\t\t};\n\n\t\t\t// Force json dataType\n\t\t\ts.dataTypes[0] = \"json\";\n\n\t\t\t// Install callback\n\t\t\toverwritten = window[callbackName];\n\t\t\twindow[callbackName] = function () {\n\t\t\t\tresponseContainer = arguments;\n\t\t\t};\n\n\t\t\t// Clean-up function (fires after converters)\n\t\t\tjqXHR.always(function () {\n\n\t\t\t\t// If previous value didn't exist - remove it\n\t\t\t\tif (overwritten === undefined) {\n\t\t\t\t\tjQuery(window).removeProp(callbackName);\n\n\t\t\t\t\t// Otherwise restore preexisting value\n\t\t\t\t} else {\n\t\t\t\t\twindow[callbackName] = overwritten;\n\t\t\t\t}\n\n\t\t\t\t// Save back as free\n\t\t\t\tif (s[callbackName]) {\n\n\t\t\t\t\t// Make sure that re-using the options doesn't screw things around\n\t\t\t\t\ts.jsonpCallback = originalSettings.jsonpCallback;\n\n\t\t\t\t\t// Save the callback name for future use\n\t\t\t\t\toldCallbacks.push(callbackName);\n\t\t\t\t}\n\n\t\t\t\t// Call if it was a function and we have a response\n\t\t\t\tif (responseContainer && isFunction(overwritten)) {\n\t\t\t\t\toverwritten(responseContainer[0]);\n\t\t\t\t}\n\n\t\t\t\tresponseContainer = overwritten = undefined;\n\t\t\t});\n\n\t\t\t// Delegate to script\n\t\t\treturn \"script\";\n\t\t}\n\t});\n\n\n\n\n\t// Support: Safari 8 only\n\t// In Safari 8 documents created via document.implementation.createHTMLDocument\n\t// collapse sibling forms: the second one becomes a child of the first one.\n\t// Because of that, this security measure has to be disabled in Safari 8.\n\t// https://bugs.webkit.org/show_bug.cgi?id=137337\n\tsupport.createHTMLDocument = (function () {\n\t\tvar body = document.implementation.createHTMLDocument(\"\").body;\n\t\tbody.innerHTML = \"<form></form><form></form>\";\n\t\treturn body.childNodes.length === 2;\n\t})();\n\n\n\t// Argument \"data\" should be string of html\n\t// context (optional): If specified, the fragment will be created in this context,\n\t// defaults to document\n\t// keepScripts (optional): If true, will include scripts passed in the html string\n\tjQuery.parseHTML = function (data, context, keepScripts) {\n\t\tif (typeof data !== \"string\") {\n\t\t\treturn [];\n\t\t}\n\t\tif (typeof context === \"boolean\") {\n\t\t\tkeepScripts = context;\n\t\t\tcontext = false;\n\t\t}\n\n\t\tvar base, parsed, scripts;\n\n\t\tif (!context) {\n\n\t\t\t// Stop scripts or inline event handlers from being executed immediately\n\t\t\t// by using document.implementation\n\t\t\tif (support.createHTMLDocument) {\n\t\t\t\tcontext = document.implementation.createHTMLDocument(\"\");\n\n\t\t\t\t// Set the base href for the created document\n\t\t\t\t// so any parsed elements with URLs\n\t\t\t\t// are based on the document's URL (gh-2965)\n\t\t\t\tbase = context.createElement(\"base\");\n\t\t\t\tbase.href = document.location.href;\n\t\t\t\tcontext.head.appendChild(base);\n\t\t\t} else {\n\t\t\t\tcontext = document;\n\t\t\t}\n\t\t}\n\n\t\tparsed = rsingleTag.exec(data);\n\t\tscripts = !keepScripts && [];\n\n\t\t// Single tag\n\t\tif (parsed) {\n\t\t\treturn [context.createElement(parsed[1])];\n\t\t}\n\n\t\tparsed = buildFragment([data], context, scripts);\n\n\t\tif (scripts && scripts.length) {\n\t\t\tjQuery(scripts).remove();\n\t\t}\n\n\t\treturn jQuery.merge([], parsed.childNodes);\n\t};\n\n\n\t/**\n\t * Load a url into a page\n\t */\n\tjQuery.fn.load = function (url, params, callback) {\n\t\tvar selector, type, response,\n\t\t\tself = this,\n\t\t\toff = url.indexOf(\" \");\n\n\t\tif (off > -1) {\n\t\t\tselector = stripAndCollapse(url.slice(off));\n\t\t\turl = url.slice(0, off);\n\t\t}\n\n\t\t// If it's a function\n\t\tif (isFunction(params)) {\n\n\t\t\t// We assume that it's the callback\n\t\t\tcallback = params;\n\t\t\tparams = undefined;\n\n\t\t\t// Otherwise, build a param string\n\t\t} else if (params && typeof params === \"object\") {\n\t\t\ttype = \"POST\";\n\t\t}\n\n\t\t// If we have elements to modify, make the request\n\t\tif (self.length > 0) {\n\t\t\tjQuery.ajax({\n\t\t\t\turl: url,\n\n\t\t\t\t// If \"type\" variable is undefined, then \"GET\" method will be used.\n\t\t\t\t// Make value of this field explicit since\n\t\t\t\t// user can override it through ajaxSetup method\n\t\t\t\ttype: type || \"GET\",\n\t\t\t\tdataType: \"html\",\n\t\t\t\tdata: params\n\t\t\t}).done(function (responseText) {\n\n\t\t\t\t// Save response for use in complete callback\n\t\t\t\tresponse = arguments;\n\n\t\t\t\tself.html(selector ?\n\n\t\t\t\t\t// If a selector was specified, locate the right elements in a dummy div\n\t\t\t\t\t// Exclude scripts to avoid IE 'Permission Denied' errors\n\t\t\t\t\tjQuery(\"<div>\").append(jQuery.parseHTML(responseText)).find(selector) :\n\n\t\t\t\t\t// Otherwise use the full result\n\t\t\t\t\tresponseText);\n\n\t\t\t\t// If the request succeeds, this function gets \"data\", \"status\", \"jqXHR\"\n\t\t\t\t// but they are ignored because response was set above.\n\t\t\t\t// If it fails, this function gets \"jqXHR\", \"status\", \"error\"\n\t\t\t}).always(callback && function (jqXHR, status) {\n\t\t\t\tself.each(function () {\n\t\t\t\t\tcallback.apply(this, response || [jqXHR.responseText, status, jqXHR]);\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\n\t\treturn this;\n\t};\n\n\n\n\n\tjQuery.expr.pseudos.animated = function (elem) {\n\t\treturn jQuery.grep(jQuery.timers, function (fn) {\n\t\t\treturn elem === fn.elem;\n\t\t}).length;\n\t};\n\n\n\n\n\tjQuery.offset = {\n\t\tsetOffset: function (elem, options, i) {\n\t\t\tvar curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition,\n\t\t\t\tposition = jQuery.css(elem, \"position\"),\n\t\t\t\tcurElem = jQuery(elem),\n\t\t\t\tprops = {};\n\n\t\t\t// Set position first, in-case top/left are set even on static elem\n\t\t\tif (position === \"static\") {\n\t\t\t\telem.style.position = \"relative\";\n\t\t\t}\n\n\t\t\tcurOffset = curElem.offset();\n\t\t\tcurCSSTop = jQuery.css(elem, \"top\");\n\t\t\tcurCSSLeft = jQuery.css(elem, \"left\");\n\t\t\tcalculatePosition = (position === \"absolute\" || position === \"fixed\") &&\n\t\t\t\t(curCSSTop + curCSSLeft).indexOf(\"auto\") > -1;\n\n\t\t\t// Need to be able to calculate position if either\n\t\t\t// top or left is auto and position is either absolute or fixed\n\t\t\tif (calculatePosition) {\n\t\t\t\tcurPosition = curElem.position();\n\t\t\t\tcurTop = curPosition.top;\n\t\t\t\tcurLeft = curPosition.left;\n\n\t\t\t} else {\n\t\t\t\tcurTop = parseFloat(curCSSTop) || 0;\n\t\t\t\tcurLeft = parseFloat(curCSSLeft) || 0;\n\t\t\t}\n\n\t\t\tif (isFunction(options)) {\n\n\t\t\t\t// Use jQuery.extend here to allow modification of coordinates argument (gh-1848)\n\t\t\t\toptions = options.call(elem, i, jQuery.extend({}, curOffset));\n\t\t\t}\n\n\t\t\tif (options.top != null) {\n\t\t\t\tprops.top = (options.top - curOffset.top) + curTop;\n\t\t\t}\n\t\t\tif (options.left != null) {\n\t\t\t\tprops.left = (options.left - curOffset.left) + curLeft;\n\t\t\t}\n\n\t\t\tif (\"using\" in options) {\n\t\t\t\toptions.using.call(elem, props);\n\n\t\t\t} else {\n\t\t\t\tcurElem.css(props);\n\t\t\t}\n\t\t}\n\t};\n\n\tjQuery.fn.extend({\n\n\t\t// offset() relates an element's border box to the document origin\n\t\toffset: function (options) {\n\n\t\t\t// Preserve chaining for setter\n\t\t\tif (arguments.length) {\n\t\t\t\treturn options === undefined ?\n\t\t\t\t\tthis :\n\t\t\t\t\tthis.each(function (i) {\n\t\t\t\t\t\tjQuery.offset.setOffset(this, options, i);\n\t\t\t\t\t});\n\t\t\t}\n\n\t\t\tvar rect, win,\n\t\t\t\telem = this[0];\n\n\t\t\tif (!elem) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Return zeros for disconnected and hidden (display: none) elements (gh-2310)\n\t\t\t// Support: IE <=11 only\n\t\t\t// Running getBoundingClientRect on a\n\t\t\t// disconnected node in IE throws an error\n\t\t\tif (!elem.getClientRects().length) {\n\t\t\t\treturn { top: 0, left: 0 };\n\t\t\t}\n\n\t\t\t// Get document-relative position by adding viewport scroll to viewport-relative gBCR\n\t\t\trect = elem.getBoundingClientRect();\n\t\t\twin = elem.ownerDocument.defaultView;\n\t\t\treturn {\n\t\t\t\ttop: rect.top + win.pageYOffset,\n\t\t\t\tleft: rect.left + win.pageXOffset\n\t\t\t};\n\t\t},\n\n\t\t// position() relates an element's margin box to its offset parent's padding box\n\t\t// This corresponds to the behavior of CSS absolute positioning\n\t\tposition: function () {\n\t\t\tif (!this[0]) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar offsetParent, offset, doc,\n\t\t\t\telem = this[0],\n\t\t\t\tparentOffset = { top: 0, left: 0 };\n\n\t\t\t// position:fixed elements are offset from the viewport, which itself always has zero offset\n\t\t\tif (jQuery.css(elem, \"position\") === \"fixed\") {\n\n\t\t\t\t// Assume position:fixed implies availability of getBoundingClientRect\n\t\t\t\toffset = elem.getBoundingClientRect();\n\n\t\t\t} else {\n\t\t\t\toffset = this.offset();\n\n\t\t\t\t// Account for the *real* offset parent, which can be the document or its root element\n\t\t\t\t// when a statically positioned element is identified\n\t\t\t\tdoc = elem.ownerDocument;\n\t\t\t\toffsetParent = elem.offsetParent || doc.documentElement;\n\t\t\t\twhile (offsetParent &&\n\t\t\t\t\t(offsetParent === doc.body || offsetParent === doc.documentElement) &&\n\t\t\t\t\tjQuery.css(offsetParent, \"position\") === \"static\") {\n\n\t\t\t\t\toffsetParent = offsetParent.parentNode;\n\t\t\t\t}\n\t\t\t\tif (offsetParent && offsetParent !== elem && offsetParent.nodeType === 1) {\n\n\t\t\t\t\t// Incorporate borders into its offset, since they are outside its content origin\n\t\t\t\t\tparentOffset = jQuery(offsetParent).offset();\n\t\t\t\t\tparentOffset.top += jQuery.css(offsetParent, \"borderTopWidth\", true);\n\t\t\t\t\tparentOffset.left += jQuery.css(offsetParent, \"borderLeftWidth\", true);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Subtract parent offsets and element margins\n\t\t\treturn {\n\t\t\t\ttop: offset.top - parentOffset.top - jQuery.css(elem, \"marginTop\", true),\n\t\t\t\tleft: offset.left - parentOffset.left - jQuery.css(elem, \"marginLeft\", true)\n\t\t\t};\n\t\t},\n\n\t\t// This method will return documentElement in the following cases:\n\t\t// 1) For the element inside the iframe without offsetParent, this method will return\n\t\t//    documentElement of the parent window\n\t\t// 2) For the hidden or detached element\n\t\t// 3) For body or html element, i.e. in case of the html node - it will return itself\n\t\t//\n\t\t// but those exceptions were never presented as a real life use-cases\n\t\t// and might be considered as more preferable results.\n\t\t//\n\t\t// This logic, however, is not guaranteed and can change at any point in the future\n\t\toffsetParent: function () {\n\t\t\treturn this.map(function () {\n\t\t\t\tvar offsetParent = this.offsetParent;\n\n\t\t\t\twhile (offsetParent && jQuery.css(offsetParent, \"position\") === \"static\") {\n\t\t\t\t\toffsetParent = offsetParent.offsetParent;\n\t\t\t\t}\n\n\t\t\t\treturn offsetParent || documentElement;\n\t\t\t});\n\t\t}\n\t});\n\n\t// Create scrollLeft and scrollTop methods\n\tjQuery.each({ scrollLeft: \"pageXOffset\", scrollTop: \"pageYOffset\" }, function (method, prop) {\n\t\tvar top = \"pageYOffset\" === prop;\n\n\t\tjQuery.fn[method] = function (val) {\n\t\t\treturn access(this, function (elem, method, val) {\n\n\t\t\t\t// Coalesce documents and windows\n\t\t\t\tvar win;\n\t\t\t\tif (isWindow(elem)) {\n\t\t\t\t\twin = elem;\n\t\t\t\t} else if (elem.nodeType === 9) {\n\t\t\t\t\twin = elem.defaultView;\n\t\t\t\t}\n\n\t\t\t\tif (val === undefined) {\n\t\t\t\t\treturn win ? win[prop] : elem[method];\n\t\t\t\t}\n\n\t\t\t\tif (win) {\n\t\t\t\t\twin.scrollTo(\n\t\t\t\t\t\t!top ? val : win.pageXOffset,\n\t\t\t\t\t\ttop ? val : win.pageYOffset\n\t\t\t\t\t);\n\n\t\t\t\t} else {\n\t\t\t\t\telem[method] = val;\n\t\t\t\t}\n\t\t\t}, method, val, arguments.length);\n\t\t};\n\t});\n\n\t// Support: Safari <=7 - 9.1, Chrome <=37 - 49\n\t// Add the top/left cssHooks using jQuery.fn.position\n\t// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084\n\t// Blink bug: https://bugs.chromium.org/p/chromium/issues/detail?id=589347\n\t// getComputedStyle returns percent when specified for top/left/bottom/right;\n\t// rather than make the css module depend on the offset module, just check for it here\n\tjQuery.each([\"top\", \"left\"], function (_i, prop) {\n\t\tjQuery.cssHooks[prop] = addGetHookIf(support.pixelPosition,\n\t\t\tfunction (elem, computed) {\n\t\t\t\tif (computed) {\n\t\t\t\t\tcomputed = curCSS(elem, prop);\n\n\t\t\t\t\t// If curCSS returns percentage, fallback to offset\n\t\t\t\t\treturn rnumnonpx.test(computed) ?\n\t\t\t\t\t\tjQuery(elem).position()[prop] + \"px\" :\n\t\t\t\t\t\tcomputed;\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\t});\n\n\n\t// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods\n\tjQuery.each({ Height: \"height\", Width: \"width\" }, function (name, type) {\n\t\tjQuery.each({\n\t\t\tpadding: \"inner\" + name,\n\t\t\tcontent: type,\n\t\t\t\"\": \"outer\" + name\n\t\t}, function (defaultExtra, funcName) {\n\n\t\t\t// Margin is only for outerHeight, outerWidth\n\t\t\tjQuery.fn[funcName] = function (margin, value) {\n\t\t\t\tvar chainable = arguments.length && (defaultExtra || typeof margin !== \"boolean\"),\n\t\t\t\t\textra = defaultExtra || (margin === true || value === true ? \"margin\" : \"border\");\n\n\t\t\t\treturn access(this, function (elem, type, value) {\n\t\t\t\t\tvar doc;\n\n\t\t\t\t\tif (isWindow(elem)) {\n\n\t\t\t\t\t\t// $( window ).outerWidth/Height return w/h including scrollbars (gh-1729)\n\t\t\t\t\t\treturn funcName.indexOf(\"outer\") === 0 ?\n\t\t\t\t\t\t\telem[\"inner\" + name] :\n\t\t\t\t\t\t\telem.document.documentElement[\"client\" + name];\n\t\t\t\t\t}\n\n\t\t\t\t\t// Get document width or height\n\t\t\t\t\tif (elem.nodeType === 9) {\n\t\t\t\t\t\tdoc = elem.documentElement;\n\n\t\t\t\t\t\t// Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height],\n\t\t\t\t\t\t// whichever is greatest\n\t\t\t\t\t\treturn Math.max(\n\t\t\t\t\t\t\telem.body[\"scroll\" + name], doc[\"scroll\" + name],\n\t\t\t\t\t\t\telem.body[\"offset\" + name], doc[\"offset\" + name],\n\t\t\t\t\t\t\tdoc[\"client\" + name]\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\n\t\t\t\t\treturn value === undefined ?\n\n\t\t\t\t\t\t// Get width or height on the element, requesting but not forcing parseFloat\n\t\t\t\t\t\tjQuery.css(elem, type, extra) :\n\n\t\t\t\t\t\t// Set width or height on the element\n\t\t\t\t\t\tjQuery.style(elem, type, value, extra);\n\t\t\t\t}, type, chainable ? margin : undefined, chainable);\n\t\t\t};\n\t\t});\n\t});\n\n\n\tjQuery.each([\n\t\t\"ajaxStart\",\n\t\t\"ajaxStop\",\n\t\t\"ajaxComplete\",\n\t\t\"ajaxError\",\n\t\t\"ajaxSuccess\",\n\t\t\"ajaxSend\"\n\t], function (_i, type) {\n\t\tjQuery.fn[type] = function (fn) {\n\t\t\treturn this.on(type, fn);\n\t\t};\n\t});\n\n\n\n\n\tjQuery.fn.extend({\n\n\t\tbind: function (types, data, fn) {\n\t\t\treturn this.on(types, null, data, fn);\n\t\t},\n\t\tunbind: function (types, fn) {\n\t\t\treturn this.off(types, null, fn);\n\t\t},\n\n\t\tdelegate: function (selector, types, data, fn) {\n\t\t\treturn this.on(types, selector, data, fn);\n\t\t},\n\t\tundelegate: function (selector, types, fn) {\n\n\t\t\t// ( namespace ) or ( selector, types [, fn] )\n\t\t\treturn arguments.length === 1 ?\n\t\t\t\tthis.off(selector, \"**\") :\n\t\t\t\tthis.off(types, selector || \"**\", fn);\n\t\t},\n\n\t\thover: function (fnOver, fnOut) {\n\t\t\treturn this.mouseenter(fnOver).mouseleave(fnOut || fnOver);\n\t\t}\n\t});\n\n\tjQuery.each(\n\t\t(\"blur focus focusin focusout resize scroll click dblclick \" +\n\t\t\t\"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave \" +\n\t\t\t\"change select submit keydown keypress keyup contextmenu\").split(\" \"),\n\t\tfunction (_i, name) {\n\n\t\t\t// Handle event binding\n\t\t\tjQuery.fn[name] = function (data, fn) {\n\t\t\t\treturn arguments.length > 0 ?\n\t\t\t\t\tthis.on(name, null, data, fn) :\n\t\t\t\t\tthis.trigger(name);\n\t\t\t};\n\t\t}\n\t);\n\n\n\n\n\t// Support: Android <=4.0 only\n\t// Make sure we trim BOM and NBSP\n\t// Require that the \"whitespace run\" starts from a non-whitespace\n\t// to avoid O(N^2) behavior when the engine would try matching \"\\s+$\" at each space position.\n\tvar rtrim = /^[\\s\\uFEFF\\xA0]+|([^\\s\\uFEFF\\xA0])[\\s\\uFEFF\\xA0]+$/g;\n\n\t// Bind a function to a context, optionally partially applying any\n\t// arguments.\n\t// jQuery.proxy is deprecated to promote standards (specifically Function#bind)\n\t// However, it is not slated for removal any time soon\n\tjQuery.proxy = function (fn, context) {\n\t\tvar tmp, args, proxy;\n\n\t\tif (typeof context === \"string\") {\n\t\t\ttmp = fn[context];\n\t\t\tcontext = fn;\n\t\t\tfn = tmp;\n\t\t}\n\n\t\t// Quick check to determine if target is callable, in the spec\n\t\t// this throws a TypeError, but we will just return undefined.\n\t\tif (!isFunction(fn)) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\t// Simulated bind\n\t\targs = slice.call(arguments, 2);\n\t\tproxy = function () {\n\t\t\treturn fn.apply(context || this, args.concat(slice.call(arguments)));\n\t\t};\n\n\t\t// Set the guid of unique handler to the same of original handler, so it can be removed\n\t\tproxy.guid = fn.guid = fn.guid || jQuery.guid++;\n\n\t\treturn proxy;\n\t};\n\n\tjQuery.holdReady = function (hold) {\n\t\tif (hold) {\n\t\t\tjQuery.readyWait++;\n\t\t} else {\n\t\t\tjQuery.ready(true);\n\t\t}\n\t};\n\tjQuery.isArray = Array.isArray;\n\tjQuery.parseJSON = JSON.parse;\n\tjQuery.nodeName = nodeName;\n\tjQuery.isFunction = isFunction;\n\tjQuery.isWindow = isWindow;\n\tjQuery.camelCase = camelCase;\n\tjQuery.type = toType;\n\n\tjQuery.now = Date.now;\n\n\tjQuery.isNumeric = function (obj) {\n\n\t\t// As of jQuery 3.0, isNumeric is limited to\n\t\t// strings and numbers (primitives or objects)\n\t\t// that can be coerced to finite numbers (gh-2662)\n\t\tvar type = jQuery.type(obj);\n\t\treturn (type === \"number\" || type === \"string\") &&\n\n\t\t\t// parseFloat NaNs numeric-cast false positives (\"\")\n\t\t\t// ...but misinterprets leading-number strings, particularly hex literals (\"0x...\")\n\t\t\t// subtraction forces infinities to NaN\n\t\t\t!isNaN(obj - parseFloat(obj));\n\t};\n\n\tjQuery.trim = function (text) {\n\t\treturn text == null ?\n\t\t\t\"\" :\n\t\t\t(text + \"\").replace(rtrim, \"$1\");\n\t};\n\n\n\n\t// Register as a named AMD module, since jQuery can be concatenated with other\n\t// files that may use define, but not via a proper concatenation script that\n\t// understands anonymous AMD modules. A named AMD is safest and most robust\n\t// way to register. Lowercase jquery is used because AMD module names are\n\t// derived from file names, and jQuery is normally delivered in a lowercase\n\t// file name. Do this after creating the global so that if an AMD module wants\n\t// to call noConflict to hide this version of jQuery, it will work.\n\n\t// Note that for maximum portability, libraries that are not jQuery should\n\t// declare themselves as anonymous modules, and avoid setting a global if an\n\t// AMD loader is present. jQuery is a special case. For more information, see\n\t// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon\n\n\tif (typeof define === \"function\" && define.amd) {\n\t\tdefine(\"jquery\", [], function () {\n\t\t\treturn jQuery;\n\t\t});\n\t}\n\n\n\n\n\tvar\n\n\t\t// Map over jQuery in case of overwrite\n\t\t_jQuery = window.jQuery,\n\n\t\t// Map over the $ in case of overwrite\n\t\t_$ = window.$;\n\n\tjQuery.noConflict = function (deep) {\n\t\tif (window.$ === jQuery) {\n\t\t\twindow.$ = _$;\n\t\t}\n\n\t\tif (deep && window.jQuery === jQuery) {\n\t\t\twindow.jQuery = _jQuery;\n\t\t}\n\n\t\treturn jQuery;\n\t};\n\n\t// Expose jQuery and $ identifiers, even in AMD\n\t// (trac-7102#comment:10, https://github.com/jquery/jquery/pull/557)\n\t// and CommonJS for browser emulators (trac-13566)\n\tif (typeof noGlobal === \"undefined\") {\n\t\twindow.jQuery = window.$ = jQuery;\n\t}\n\n\n\n\n\treturn jQuery;\n});"
  },
  {
    "path": "src/sourceDev.WebApp/SharedThemes/slate/Shared/_Layout.cshtml",
    "content": "﻿@inject ISiteContextResolver siteResolver\n@inject ICoreThemeHelper themeHelper\n@{\n    var themeSettings = themeHelper.GetThemeSettings();\n    @*\n        These settings can be set by a main view to show additional columns.\n        Views that push content into the optional sections SideNav, AsidePrimary, and AsideSecondary\n        are obligated to set the needed viewtate property to true to show the section,\n        otherwise an error will occur.\n        The sideNav column also supports a toggle so it can be hidden and toggled visible even though it renders.\n    *@\n    bool sideNavVisible = true.Equals(ViewData[\"SideNavVisible\"]);\n    string sideNavToggleClass = ViewData[\"SideNavToggle\"]?.ToString() ?? \"collapse\";\n    bool asidePrimaryVisible = true.Equals(ViewData[\"AsidePrimaryVisible\"]);\n    bool asideSecondaryVisible = true.Equals(ViewData[\"AsideSecondaryVisible\"]);\n    var Tenant = await siteResolver.ResolveSite(Context.Request.Host.Host, Context.Request.Path);\n    var siteRoot = \"\";\n    if (!string.IsNullOrWhiteSpace(Tenant.SiteFolderName)) { siteRoot = \"/\" + Tenant.SiteFolderName; }\n    \n}\n<!DOCTYPE html>\n<html lang=\"@CultureInfo.CurrentUICulture.Name\">\n<head>\n    <meta charset=\"utf-8\" />\n    <title>@ViewData[\"Title\"] - @(Tenant?.SiteName ?? \"Sample\")</title>\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1, shrink-to-fit=no\">\n    @RenderSection(\"Meta\", required: false)\n    <environment names=\"Development\">\n        <link rel=\"stylesheet\" href=\"~/css/bootstrap.css\" cs-resolve-theme-resource=\"true\" cs-shared-theme=\"true\" cs-tenant=\"@Tenant\" />\n        <link rel=\"stylesheet\" href=\"~/css/fontawesome-all.min.css\" cs-resolve-theme-resource=\"true\" cs-shared-theme=\"true\" cs-tenant=\"@Tenant\" />\n        <link rel=\"stylesheet\" href=\"~/css/site.css\" cs-resolve-theme-resource=\"true\" cs-shared-theme=\"true\" cs-tenant=\"@Tenant\" asp-append-version=\"true\" />\n    </environment>\n    <environment names=\"Staging,Production\">\n        <link rel=\"stylesheet\" href=\"~/css/bootstrap.min.css\" cs-resolve-theme-resource=\"true\" cs-shared-theme=\"true\" cs-tenant=\"@Tenant\" />\n        <link rel=\"stylesheet\" href=\"~/css/fontawesome-all.min.css\" cs-resolve-theme-resource=\"true\" cs-shared-theme=\"true\" cs-tenant=\"@Tenant\" />\n        <link rel=\"stylesheet\" href=\"~/css/site.min.css\" cs-resolve-theme-resource=\"true\" cs-shared-theme=\"true\" cs-tenant=\"@Tenant\" asp-append-version=\"true\" />\n    </environment>\n    @RenderSection(\"Styles\", required: false)    \n    \n    <google-analytics profile-id=\"@Tenant.GoogleAnalyticsProfileId\" user-id=\"@User.GetUserId()\"></google-analytics>\n    <base href=\"@Context.Request.Path\" />\n</head>\n<body class=\"d-flex flex-column @ViewData[\"BodyClass\"]\">\n    <header class=\"bg-dark\">\n        <a id=\"skippy\" class=\"visually-hidden visually-hidden-focusable\" href=\"#content\">\n            <div class=\"container\">\n                <span class=\"skiplink-text\">Skip to main content</span>\n            </div>\n        </a>\n        <div class=\"fixed-top brand-header bg-dark\">\n            <div class=\"d-flex align-items-center bg-dark\">\n                @if (!string.IsNullOrWhiteSpace(Tenant.LogoUrl))\n                {\n                    <div>\n                         <partial name=\"SiteLogoPartial\" model=\"@Tenant\" />\n                    </div>\n                }\n                @if (Tenant.ShowSiteNameLink)\n                {\n                    <div class=\"align-self-center pt-4 pt-sm-0\">\n                         <partial name=\"SiteTitlePartial\" model=\"@Tenant\" />\n                    </div>\n                }\n                @if (!string.IsNullOrWhiteSpace(Tenant.HeaderContent))\n                {\n                    <div class=\"flex-fill align-self-center pt-3 d-none d-md-block\">\n                        <partial name=\"SiteHeaderPartial\" />\n                    </div>\n                }\n            </div>\n        </div>\n        <nav class=\"navbar navbar-expand-md navbar-dark fixed-top bg-dark\">\n            <button class=\"navbar-toggler\" type=\"button\" data-bs-toggle=\"collapse\" data-bs-target=\"#navbarNavDropdown\" aria-controls=\"navbarNavDropdown\" aria-expanded=\"false\" aria-label=\"Toggle navigation\">\n                <span class=\"navbar-toggler-icon\"></span>\n            </button>\n            <div class=\"collapse navbar-collapse bg-dark ps-2\" id=\"navbarNavDropdown\">\n                @await Component.InvokeAsync(\"Navigation\", new { viewName = \"Bootstrap5TopNavWithDropdowns\", filterName = NamedNavigationFilters.TopNav, startingNodeKey = \"\" })\n                <partial name=\"_LoginPartialWithDropdowns\" />\n            </div>\n        </nav>\n    </header>\n    <div id=\"wrapper\" class=\"container-fluid cs-container flex-fill\">\n        @await Component.InvokeAsync(\"Navigation\", new { viewName = \"Bootstrap5Breadcrumbs\", filterName = NamedNavigationFilters.Breadcrumbs, startingNodeKey = \"\" })\n        <div class=\"row\">\n            <main id=\"content\" class=\"col order-3\">\n                <partial name=\"AlertsPartial\" />\n                <partial name=\"_CookieConsentPartial\" />\n                <partial name=\"_AutoLogoutWarningPartial\" />\n                @RenderBody()\n            </main>\n            @if (sideNavVisible)\n            {\n                <nav id=\"sidenavmenu\" class=\" col col-3 order-1 @sideNavToggleClass\">\n                    @RenderSection(\"SideNav\", required: false)\n                </nav>\n\n            }\n            @if (asideSecondaryVisible)\n            {\n                <aside id=\"asideSecondary\" class=\"col col-1 order-2\">\n                    @RenderSection(\"AsideSecondary\", required: false)\n                </aside>\n\n            }\n            @if (asidePrimaryVisible)\n            {\n                <aside id=\"asidePrimary\" class=\"col-12 col-md-3 col-sm-12  col-sm-12 order-4\">\n                    @RenderSection(\"AsidePrimary\", required: false)\n                </aside>\n\n            }\n        </div>\n    </div>\n    <footer class=\"sticky-bottom border pt-2 h-100\">\n        <div class=\"w-100 text-center\">\n            <partial name=\"SiteFooterPartial\" />\n        </div>\n        <div class=\"d-flex flex-wrap flex-grow justify-content-center\">\n            <div class=\"p-2\">\n            <ul class=\"list-unstyled d-flex flex-wrap\">\n                @if (Tenant != null && !string.IsNullOrWhiteSpace(Tenant.PrivacyPolicy))\n                {\n                    <li class=\"border-left ps-2 me-2\">\n                        <a asp-controller=\"Privacy\" asp-action=\"Index\">Privacy Policy</a>\n                    </li>\n                }\n                <li class=\"border-left ps-2 me-2\">\n                    @* you are free to remove the powered by cloudscribe link but we appreciate it if you choose to keep it! *@\n                    <a class=\"text-nowrap\" target=\"_blank\" href=\"https://www.cloudscribe.com/?utm_source=@Context.Request.Host.Value&amp;utm_medium=referral&amp;utm_campaign=poweredbycloudscribe\">Powered by cloudscribe</a>\n                </li>\n            </ul>\n        </div>\n        <div class=\"ps-sm-2  text-center w-100\"><span class=\"text-nowrap\">Copyright &copy; @DateTime.Now.Year</span><span class=\"d-none d-sm-inline\"> - </span><span> @(Tenant?.SiteName ?? \"Sample\")</span></div>\n        <partial name=\"_CookieConsentRevokePartial\" />\n        </div>\n    </footer>\n    @RenderSection(\"Toolbar\", required: false)\n    <environment names=\"Development\">\n        <script src=\"~/js/jquery.js\" cs-resolve-theme-resource=\"true\" cs-shared-theme=\"true\" cs-tenant=\"@Tenant\"></script>\n        <script src=\"~/js/bootstrap.bundle.js\" cs-resolve-theme-resource=\"true\" cs-shared-theme=\"true\" cs-tenant=\"@Tenant\"></script>\n        <script src=\"~/cr/js/bs4.smartmenus.min.js\"></script>\n    </environment>\n    <environment names=\"Staging,Production\">\n        <script src=\"~/js/jquery.min.js\" cs-resolve-theme-resource=\"true\" cs-shared-theme=\"true\" cs-tenant=\"@Tenant\"></script>\n        <script src=\"~/js/bootstrap.bundle.min.js\" cs-resolve-theme-resource=\"true\" cs-shared-theme=\"true\" cs-tenant=\"@Tenant\"></script>\n        <script src=\"~/cr/js/bs4.smartmenus.min.js\"></script>\n    </environment>\n    @RenderSection(\"Bottom\", required: false)\n    @RenderSection(\"Scripts\", required: false)     \n    @Html.RenderResources(\"js\") @*render any js resources declared via helpers in partial views etc*@\n    <add-this profile-id=\"@Tenant.AddThisDotComUsername\" async></add-this>\n</body>\n</html>\n"
  },
  {
    "path": "src/sourceDev.WebApp/SharedThemes/slate/wwwroot/css/_bootswatch.scss",
    "content": "// Slate 5.1.3\n// Bootswatch\n\n\n// Mixins\n\n@mixin btn-shadow($color){\n  @include gradient-y-three-colors(tint-color($color, 12%), $color, 60%, shade-color($color, 8%));\n  filter: none;\n}\n\n@mixin btn-shadow-inverse($color){\n  @include gradient-y-three-colors(shade-color($color, 36%), shade-color($color, 30%), 40%, shade-color($color, 26%));\n  filter: none;\n}\n\n// Navbar\n\n.navbar {\n  border: 1px solid rgba(0, 0, 0, .6);\n  text-shadow: 1px 1px 1px rgba(0, 0, 0, .3);\n\n  .container {\n    padding: 0;\n  }\n\n  .navbar-toggler {\n    border-color: rgba(0, 0, 0, .6);\n  }\n\n  &-fixed-top {\n    border-width: 0 0 1px;\n  }\n\n  &-fixed-bottom {\n    border-width: 1px 0 0;\n  }\n\n  .nav-link {\n    padding: 1rem;\n    border-left: 1px solid rgba(255, 255, 255, .1);\n    border-right: 1px solid rgba(0, 0, 0, .2);\n\n    &:hover,\n    &:focus {\n      @include btn-shadow-inverse($gray-800);\n      border-left: 1px solid rgba(0, 0, 0, .2);\n    }\n  }\n\n  &-brand {\n    padding: .75rem 1rem subtract(24px, .75rem);\n    margin-right: 0;\n    border-right: 1px solid rgba(0, 0, 0, .2);\n  }\n\n  .nav-item.active .nav-link {\n    background-color: rgba(0, 0, 0, .3);\n    border-left: 1px solid rgba(0, 0, 0, .2);\n  }\n\n  &-nav .nav-item + .nav-item {\n    margin-left: 0;\n  }\n\n  &.bg-light {\n    text-shadow: 1px 1px 1px rgba(0, 0, 0, .1);\n\n    .nav-link {\n      &:hover,\n      &:focus {\n        @include btn-shadow-inverse($gray-600);\n        border-left: 1px solid rgba(0, 0, 0, .2);\n      }\n    }\n  }\n}\n\n@media (max-width: 576px) {\n  .navbar-expand-sm {\n    .navbar-brand,\n    .nav-link {\n      border: none !important;\n    }\n  }\n}\n\n@media (max-width: 768px) {\n  .navbar-expand-md {\n    .navbar-brand,\n    .nav-link {\n      border: none !important;\n    }\n  }\n}\n\n@media (max-width: 992px) {\n  .navbar-expand-lg {\n    .navbar-brand,\n    .nav-link {\n      border: none !important;\n    }\n  }\n}\n\n// Buttons\n\n.btn {\n  border-color: rgba(0, 0, 0, .6);\n  text-shadow: 1px 1px 1px rgba(0, 0, 0, .3);\n\n  &:not([disabled]):not(.disabled).active,\n  &.disabled {\n    border-color: rgba(0, 0, 0, .6);\n    box-shadow: none;\n  }\n\n  &:hover,\n  &:focus,\n  &:not([disabled]):not(.disabled):active,\n  &:not([disabled]):not(.disabled):active:hover,\n  &:not([disabled]):not(.disabled).active:hover {\n    border-color: rgba(0, 0, 0, .6);\n  }\n}\n\n.btn-primary {\n  @include btn-shadow($primary);\n\n  &:not([disabled]):not(.disabled):hover,\n  &:not([disabled]):not(.disabled):focus,\n  &:not([disabled]):not(.disabled):active:hover,\n  &:not([disabled]):not(.disabled).active:hover {\n    @include btn-shadow-inverse($primary);\n  }\n}\n\n.btn-secondary {\n  @include btn-shadow($secondary);\n\n  &:not([disabled]):not(.disabled):hover,\n  &:not([disabled]):not(.disabled):focus,\n  &:not([disabled]):not(.disabled):active,\n  &:not([disabled]):not(.disabled).active {\n    @include btn-shadow-inverse($secondary);\n  }\n}\n\n.btn-success {\n  @include btn-shadow($success);\n  color: $white;\n\n  &:not([disabled]):not(.disabled):hover,\n  &:not([disabled]):not(.disabled):focus,\n  &:not([disabled]):not(.disabled):active,\n  &:not([disabled]):not(.disabled).active {\n    @include btn-shadow-inverse($success);\n  }\n}\n\n.btn-info {\n  @include btn-shadow($info);\n  color: $white;\n\n  &:not([disabled]):not(.disabled):hover,\n  &:not([disabled]):not(.disabled):focus,\n  &:not([disabled]):not(.disabled):active,\n  &:not([disabled]):not(.disabled).active {\n    @include btn-shadow-inverse($info);\n  }\n}\n\n.btn-warning {\n  @include btn-shadow($warning);\n  color: $white;\n\n  &:not([disabled]):not(.disabled):hover,\n  &:not([disabled]):not(.disabled):focus,\n  &:not([disabled]):not(.disabled):active,\n  &:not([disabled]):not(.disabled).active {\n    @include btn-shadow-inverse($warning);\n  }\n}\n\n.btn-danger {\n  @include btn-shadow($danger);\n\n  &:not([disabled]):not(.disabled):hover,\n  &:not([disabled]):not(.disabled):focus,\n  &:not([disabled]):not(.disabled):active,\n  &:not([disabled]):not(.disabled).active {\n    @include btn-shadow-inverse($danger);\n  }\n}\n\n.btn-outline {\n  &-primary {\n    color: $white;\n  }\n}\n\n.btn-link,\n.btn-link:hover {\n  border-color: transparent;\n}\n\n.btn-group,\n.btn-group-vertical {\n  .btn.active {\n    border-color: rgba(0, 0, 0, .6);\n  }\n}\n\n// Typography\n\nh1,\nh2,\nh3,\nh4,\nh5,\nh6 {\n  text-shadow: -1px -1px 0 rgba(0, 0, 0, .3);\n}\n\n// Forms\n\nlegend {\n  color: $white;\n}\n\n.input-group-addon {\n  @include btn-shadow($secondary);\n  text-shadow: 1px 1px 1px rgba(0, 0, 0, .3);\n  color: $white;\n}\n\n// Navs\n\n.nav-tabs {\n  .nav-link {\n    @include btn-shadow-inverse($gray-800);\n    border: 1px solid rgba(0, 0, 0, .6);\n\n    &:not([disabled]):not(.disabled):hover,\n    &:not([disabled]):not(.disabled):focus,\n    &:not([disabled]):not(.disabled):active,\n    &:not([disabled]):not(.disabled).active {\n      @include btn-shadow($gray-800);\n    }\n\n    &.disabled {\n      border: 1px solid rgba(0, 0, 0, .6);\n    }\n  }\n\n  .nav-link,\n  .nav-link:hover {\n    color: $white;\n  }\n}\n\n.nav-pills {\n  .nav-link {\n    @include btn-shadow($gray-800);\n    border: 1px solid rgba(0, 0, 0, .6);\n    text-shadow: 1px 1px 1px rgba(0, 0, 0, .3);\n    color: $white;\n\n    &:hover {\n      @include btn-shadow-inverse($gray-800);\n      border: 1px solid rgba(0, 0, 0, .6);\n    }\n  }\n\n  .nav-link.active,\n  .nav-link:hover {\n    background-color: transparent;\n    @include btn-shadow-inverse($gray-800);\n    border: 1px solid rgba(0, 0, 0, .6);\n  }\n\n  .nav-link.disabled,\n  .nav-link.disabled:hover {\n    @include btn-shadow($gray-800);\n    color: $nav-link-disabled-color;\n  }\n}\n\n.pagination {\n  .page-link {\n    text-shadow: 1px 1px 1px rgba(0, 0, 0, .3);\n    @include btn-shadow($gray-800);\n\n    &:hover {\n      @include btn-shadow-inverse($gray-800);\n      text-decoration: none;\n    }\n  }\n\n  .page-item.active .page-link {\n    @include btn-shadow-inverse($gray-800);\n  }\n\n  .page-item.disabled .page-link {\n    @include btn-shadow($gray-800);\n  }\n}\n\n.breadcrumb {\n  border: 1px solid rgba(0, 0, 0, .6);\n  text-shadow: 1px 1px 1px rgba(0, 0, 0, .3);\n  background-color: transparent;\n  @include btn-shadow($gray-800);\n\n  a,\n  a:hover {\n    color: $white;\n  }\n}\n\n// Indicators\n\n.alert {\n  border: none;\n  color: $white;\n\n  a,\n  .alert-link {\n    color: $white;\n    text-decoration: underline;\n  }\n\n  @each $color, $value in $theme-colors {\n    &-#{$color} {\n      background-color: $value;\n    }\n  }\n\n  &-light {\n    &,\n    a:not(.btn),\n    .alert-link {\n      color: $body-bg;\n    }\n  }\n}\n\n.badge {\n  &.bg-light {\n    color: $dark;\n  }\n}\n\n// Containers\n\n.list-group {\n  &-item-action:hover {\n    background-color: shade-color($gray-900, 10%);\n  }\n}\n"
  },
  {
    "path": "src/sourceDev.WebApp/SharedThemes/slate/wwwroot/css/_variables.scss",
    "content": "// Slate 5.1.3\n// Bootswatch\n\n$theme: \"slate\" !default;\n\n//\n// Color system\n//\n\n$white:    #fff !default;\n$gray-100: #f8f9fa !default;\n$gray-200: #e9ecef !default;\n$gray-300: #dee2e6 !default;\n$gray-400: #ced4da !default;\n$gray-500: #999 !default;\n$gray-600: #7a8288 !default;\n$gray-700: #52575c !default;\n$gray-800: #3a3f44 !default;\n$gray-900: #272b30 !default;\n$black:    #000 !default;\n\n$blue:    #007bff !default;\n$indigo:  #6610f2 !default;\n$purple:  #6f42c1 !default;\n$pink:    #e83e8c !default;\n$red:     #ee5f5b !default;\n$orange:  #fd7e14 !default;\n$yellow:  #f89406 !default;\n$green:   #62c462 !default;\n$teal:    #20c997 !default;\n$cyan:    #5bc0de !default;\n\n$primary:       $gray-800 !default;\n$secondary:     $gray-600 !default;\n$success:       $green !default;\n$info:          $cyan !default;\n$warning:       $yellow !default;\n$danger:        $red !default;\n$light:         $gray-200 !default;\n$dark:          $gray-900 !default;\n\n$min-contrast-ratio:   1.95 !default;\n\n// Body\n\n$body-bg:                   $gray-900 !default;\n$body-color:                #aaa !default;\n\n// Links\n\n$link-color:                $white !default;\n\n// Fonts\n\n// Tables\n\n$table-color:                 $white !default;\n$table-accent-bg:             rgba($white, .05) !default;\n$table-hover-bg:              rgba($white, .075) !default;\n$table-border-color:          rgba($black, .6) !default;\n$table-dark-border-color:     $table-border-color !default;\n$table-dark-color:            $white !default;\n\n$table-bg-scale:              0 !default;\n\n// Buttons\n\n$input-btn-padding-y:         .75rem !default;\n$input-btn-padding-x:         1rem !default;\n\n// Forms\n\n$input-bg:                              $white !default;\n$input-disabled-bg:                     #ccc !default;\n\n$input-color:                       $gray-900 !default;\n\n$form-check-input-bg:                     $white !default;\n\n// Dropdowns\n\n$dropdown-bg:                       $gray-800 !default;\n$dropdown-border-color:             rgba($black, .6) !default;\n$dropdown-divider-bg:               rgba($black, .15) !default;\n$dropdown-link-color:               $body-color !default;\n$dropdown-link-hover-color:         $white !default;\n$dropdown-link-hover-bg:            $body-bg !default;\n$dropdown-link-active-color:        $dropdown-link-hover-color !default;\n$dropdown-link-active-bg:           $dropdown-link-hover-bg !default;\n\n// Navs\n\n$nav-tabs-border-color:             rgba($black, .6) !default;\n$nav-tabs-link-hover-border-color:  $nav-tabs-border-color !default;\n$nav-tabs-link-active-color:        $white !default;\n$nav-tabs-link-active-border-color: $nav-tabs-border-color !default;\n\n// Navbar\n\n$navbar-padding-y:                  0 !default;\n$navbar-dark-hover-color:           $white !default;\n$navbar-light-hover-color:          $gray-800 !default;\n$navbar-light-active-color:         $gray-800 !default;\n\n\n// Pagination\n\n$pagination-color:                  $white !default;\n$pagination-bg:                     transparent !default;\n$pagination-border-color:           rgba($black, .6) !default;\n$pagination-hover-color:            $white !default;\n$pagination-hover-bg:               transparent !default;\n$pagination-hover-border-color:     rgba($black, .6) !default;\n$pagination-active-bg:              transparent !default;\n$pagination-active-border-color:    rgba($black, .6) !default;\n$pagination-disabled-bg:            transparent !default;\n$pagination-disabled-border-color:  rgba($black, .6) !default;\n\n// Cards\n\n$card-border-color:                 rgba($black, .6) !default;\n$card-cap-bg:                       lighten($gray-800, 10%) !default;\n$card-bg:                           lighten($body-bg, 5%) !default;\n\n// Popovers\n\n$popover-bg:                        lighten($body-bg, 5%) !default;\n\n// Toasts\n\n$toast-background-color:            lighten($body-bg, 5%) !default;\n$toast-border-color:                rgba(0, 0, 0, .2) !default;\n$toast-header-color:                $body-color !default;\n$toast-header-background-color:     $toast-background-color !default;\n$toast-header-border-color:         $toast-border-color !default;\n\n// Modals\n\n$modal-content-bg:                  lighten($body-bg, 5%) !default;\n$modal-header-border-color:         rgba(0, 0, 0, .2) !default;\n\n// Progress bars\n\n$progress-bg:                       darken($gray-900, 5%) !default;\n$progress-bar-color:                $gray-600 !default;\n\n// List group\n\n$list-group-color:                  $white !default;\n$list-group-bg:                     lighten($body-bg, 5%) !default;\n$list-group-border-color:           rgba($black, .6) !default;\n$list-group-hover-bg:               lighten($body-bg, 10%) !default;\n$list-group-active-color:           $white !default;\n$list-group-active-bg:              $list-group-hover-bg !default;\n$list-group-active-border-color:    $list-group-border-color !default;\n$list-group-disabled-color:         $gray-700 !default;\n$list-group-action-color:           $white !default;\n\n// Breadcrumbs\n\n$breadcrumb-padding-y:              .375rem !default;\n$breadcrumb-padding-x:              .75rem !default;\n$breadcrumb-active-color:           $gray-500 !default;\n$breadcrumb-border-radius:          .25rem !default;\n\n// Code\n\n$pre-color:                         inherit !default;\n"
  },
  {
    "path": "src/sourceDev.WebApp/SharedThemes/slate/wwwroot/css/bootstrap.css",
    "content": "/*!\n * Bootswatch v5.1.3\n * Homepage: https://bootswatch.com\n * Copyright 2012-2021 Thomas Park\n * Licensed under MIT\n * Based on Bootstrap\n*/\n/*!\n * Bootstrap v5.1.3 (https://getbootstrap.com/)\n * Copyright 2011-2021 The Bootstrap Authors\n * Copyright 2011-2021 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n:root {\n  --bs-blue: #007bff;\n  --bs-indigo: #6610f2;\n  --bs-purple: #6f42c1;\n  --bs-pink: #e83e8c;\n  --bs-red: #ee5f5b;\n  --bs-orange: #fd7e14;\n  --bs-yellow: #f89406;\n  --bs-green: #62c462;\n  --bs-teal: #20c997;\n  --bs-cyan: #5bc0de;\n  --bs-white: #fff;\n  --bs-gray: #7a8288;\n  --bs-gray-dark: #3a3f44;\n  --bs-gray-100: #f8f9fa;\n  --bs-gray-200: #e9ecef;\n  --bs-gray-300: #dee2e6;\n  --bs-gray-400: #ced4da;\n  --bs-gray-500: #999;\n  --bs-gray-600: #7a8288;\n  --bs-gray-700: #52575c;\n  --bs-gray-800: #3a3f44;\n  --bs-gray-900: #272b30;\n  --bs-primary: #3a3f44;\n  --bs-secondary: #7a8288;\n  --bs-success: #62c462;\n  --bs-info: #5bc0de;\n  --bs-warning: #f89406;\n  --bs-danger: #ee5f5b;\n  --bs-light: #e9ecef;\n  --bs-dark: #272b30;\n  --bs-primary-rgb: 58, 63, 68;\n  --bs-secondary-rgb: 122, 130, 136;\n  --bs-success-rgb: 98, 196, 98;\n  --bs-info-rgb: 91, 192, 222;\n  --bs-warning-rgb: 248, 148, 6;\n  --bs-danger-rgb: 238, 95, 91;\n  --bs-light-rgb: 233, 236, 239;\n  --bs-dark-rgb: 39, 43, 48;\n  --bs-white-rgb: 255, 255, 255;\n  --bs-black-rgb: 0, 0, 0;\n  --bs-body-color-rgb: 170, 170, 170;\n  --bs-body-bg-rgb: 39, 43, 48;\n  --bs-font-sans-serif: system-ui, -apple-system, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, \"Noto Sans\", \"Liberation Sans\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n  --bs-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n  --bs-gradient: linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));\n  --bs-body-font-family: var(--bs-font-sans-serif);\n  --bs-body-font-size: 1rem;\n  --bs-body-font-weight: 400;\n  --bs-body-line-height: 1.5;\n  --bs-body-color: #aaa;\n  --bs-body-bg: #272b30;\n}\n\n*,\n*::before,\n*::after {\n  box-sizing: border-box;\n}\n\n@media (prefers-reduced-motion: no-preference) {\n  :root {\n    scroll-behavior: smooth;\n  }\n}\n\nbody {\n  margin: 0;\n  font-family: var(--bs-body-font-family);\n  font-size: var(--bs-body-font-size);\n  font-weight: var(--bs-body-font-weight);\n  line-height: var(--bs-body-line-height);\n  color: var(--bs-body-color);\n  text-align: var(--bs-body-text-align);\n  background-color: var(--bs-body-bg);\n  -webkit-text-size-adjust: 100%;\n  -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\n\nhr {\n  margin: 1rem 0;\n  color: inherit;\n  background-color: currentColor;\n  border: 0;\n  opacity: 0.25;\n}\n\nhr:not([size]) {\n  height: 1px;\n}\n\nh1, .h1, h2, .h2, h3, .h3, h4, .h4, h5, .h5, h6, .h6 {\n  margin-top: 0;\n  margin-bottom: 0.5rem;\n  font-weight: 500;\n  line-height: 1.2;\n}\n\nh1, .h1 {\n  font-size: calc(1.375rem + 1.5vw);\n}\n\n@media (min-width: 1200px) {\n  h1, .h1 {\n    font-size: 2.5rem;\n  }\n}\n\nh2, .h2 {\n  font-size: calc(1.325rem + 0.9vw);\n}\n\n@media (min-width: 1200px) {\n  h2, .h2 {\n    font-size: 2rem;\n  }\n}\n\nh3, .h3 {\n  font-size: calc(1.3rem + 0.6vw);\n}\n\n@media (min-width: 1200px) {\n  h3, .h3 {\n    font-size: 1.75rem;\n  }\n}\n\nh4, .h4 {\n  font-size: calc(1.275rem + 0.3vw);\n}\n\n@media (min-width: 1200px) {\n  h4, .h4 {\n    font-size: 1.5rem;\n  }\n}\n\nh5, .h5 {\n  font-size: 1.25rem;\n}\n\nh6, .h6 {\n  font-size: 1rem;\n}\n\np {\n  margin-top: 0;\n  margin-bottom: 1rem;\n}\n\nabbr[title],\nabbr[data-bs-original-title] {\n  -webkit-text-decoration: underline dotted;\n  text-decoration: underline dotted;\n  cursor: help;\n  -webkit-text-decoration-skip-ink: none;\n  text-decoration-skip-ink: none;\n}\n\naddress {\n  margin-bottom: 1rem;\n  font-style: normal;\n  line-height: inherit;\n}\n\nol,\nul {\n  padding-left: 2rem;\n}\n\nol,\nul,\ndl {\n  margin-top: 0;\n  margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n  margin-bottom: 0;\n}\n\ndt {\n  font-weight: 700;\n}\n\ndd {\n  margin-bottom: .5rem;\n  margin-left: 0;\n}\n\nblockquote {\n  margin: 0 0 1rem;\n}\n\nb,\nstrong {\n  font-weight: bolder;\n}\n\nsmall, .small {\n  font-size: 0.875em;\n}\n\nmark, .mark {\n  padding: 0.2em;\n  background-color: #fcf8e3;\n}\n\nsub,\nsup {\n  position: relative;\n  font-size: 0.75em;\n  line-height: 0;\n  vertical-align: baseline;\n}\n\nsub {\n  bottom: -.25em;\n}\n\nsup {\n  top: -.5em;\n}\n\na {\n  color: #fff;\n  text-decoration: underline;\n}\n\na:hover {\n  color: #cccccc;\n}\n\na:not([href]):not([class]), a:not([href]):not([class]):hover {\n  color: inherit;\n  text-decoration: none;\n}\n\npre,\ncode,\nkbd,\nsamp {\n  font-family: var(--bs-font-monospace);\n  font-size: 1em;\n  direction: ltr /* rtl:ignore */;\n  unicode-bidi: bidi-override;\n}\n\npre {\n  display: block;\n  margin-top: 0;\n  margin-bottom: 1rem;\n  overflow: auto;\n  font-size: 0.875em;\n  color: inherit;\n}\n\npre code {\n  font-size: inherit;\n  color: inherit;\n  word-break: normal;\n}\n\ncode {\n  font-size: 0.875em;\n  color: #e83e8c;\n  word-wrap: break-word;\n}\n\na > code {\n  color: inherit;\n}\n\nkbd {\n  padding: 0.2rem 0.4rem;\n  font-size: 0.875em;\n  color: #fff;\n  background-color: #272b30;\n  border-radius: 0.2rem;\n}\n\nkbd kbd {\n  padding: 0;\n  font-size: 1em;\n  font-weight: 700;\n}\n\nfigure {\n  margin: 0 0 1rem;\n}\n\nimg,\nsvg {\n  vertical-align: middle;\n}\n\ntable {\n  caption-side: bottom;\n  border-collapse: collapse;\n}\n\ncaption {\n  padding-top: 0.5rem;\n  padding-bottom: 0.5rem;\n  color: #7a8288;\n  text-align: left;\n}\n\nth {\n  text-align: inherit;\n  text-align: -webkit-match-parent;\n}\n\nthead,\ntbody,\ntfoot,\ntr,\ntd,\nth {\n  border-color: inherit;\n  border-style: solid;\n  border-width: 0;\n}\n\nlabel {\n  display: inline-block;\n}\n\nbutton {\n  border-radius: 0;\n}\n\nbutton:focus:not(:focus-visible) {\n  outline: 0;\n}\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n  margin: 0;\n  font-family: inherit;\n  font-size: inherit;\n  line-height: inherit;\n}\n\nbutton,\nselect {\n  text-transform: none;\n}\n\n[role=\"button\"] {\n  cursor: pointer;\n}\n\nselect {\n  word-wrap: normal;\n}\n\nselect:disabled {\n  opacity: 1;\n}\n\n[list]::-webkit-calendar-picker-indicator {\n  display: none;\n}\n\nbutton,\n[type=\"button\"],\n[type=\"reset\"],\n[type=\"submit\"] {\n  -webkit-appearance: button;\n}\n\nbutton:not(:disabled),\n[type=\"button\"]:not(:disabled),\n[type=\"reset\"]:not(:disabled),\n[type=\"submit\"]:not(:disabled) {\n  cursor: pointer;\n}\n\n::-moz-focus-inner {\n  padding: 0;\n  border-style: none;\n}\n\ntextarea {\n  resize: vertical;\n}\n\nfieldset {\n  min-width: 0;\n  padding: 0;\n  margin: 0;\n  border: 0;\n}\n\nlegend {\n  float: left;\n  width: 100%;\n  padding: 0;\n  margin-bottom: 0.5rem;\n  font-size: calc(1.275rem + 0.3vw);\n  line-height: inherit;\n}\n\n@media (min-width: 1200px) {\n  legend {\n    font-size: 1.5rem;\n  }\n}\n\nlegend + * {\n  clear: left;\n}\n\n::-webkit-datetime-edit-fields-wrapper,\n::-webkit-datetime-edit-text,\n::-webkit-datetime-edit-minute,\n::-webkit-datetime-edit-hour-field,\n::-webkit-datetime-edit-day-field,\n::-webkit-datetime-edit-month-field,\n::-webkit-datetime-edit-year-field {\n  padding: 0;\n}\n\n::-webkit-inner-spin-button {\n  height: auto;\n}\n\n[type=\"search\"] {\n  outline-offset: -2px;\n  -webkit-appearance: textfield;\n}\n\n/* rtl:raw:\n[type=\"tel\"],\n[type=\"url\"],\n[type=\"email\"],\n[type=\"number\"] {\n  direction: ltr;\n}\n*/\n::-webkit-search-decoration {\n  -webkit-appearance: none;\n}\n\n::-webkit-color-swatch-wrapper {\n  padding: 0;\n}\n\n::file-selector-button {\n  font: inherit;\n}\n\n::-webkit-file-upload-button {\n  font: inherit;\n  -webkit-appearance: button;\n}\n\noutput {\n  display: inline-block;\n}\n\niframe {\n  border: 0;\n}\n\nsummary {\n  display: list-item;\n  cursor: pointer;\n}\n\nprogress {\n  vertical-align: baseline;\n}\n\n[hidden] {\n  display: none !important;\n}\n\n.lead {\n  font-size: 1.25rem;\n  font-weight: 300;\n}\n\n.display-1 {\n  font-size: calc(1.625rem + 4.5vw);\n  font-weight: 300;\n  line-height: 1.2;\n}\n\n@media (min-width: 1200px) {\n  .display-1 {\n    font-size: 5rem;\n  }\n}\n\n.display-2 {\n  font-size: calc(1.575rem + 3.9vw);\n  font-weight: 300;\n  line-height: 1.2;\n}\n\n@media (min-width: 1200px) {\n  .display-2 {\n    font-size: 4.5rem;\n  }\n}\n\n.display-3 {\n  font-size: calc(1.525rem + 3.3vw);\n  font-weight: 300;\n  line-height: 1.2;\n}\n\n@media (min-width: 1200px) {\n  .display-3 {\n    font-size: 4rem;\n  }\n}\n\n.display-4 {\n  font-size: calc(1.475rem + 2.7vw);\n  font-weight: 300;\n  line-height: 1.2;\n}\n\n@media (min-width: 1200px) {\n  .display-4 {\n    font-size: 3.5rem;\n  }\n}\n\n.display-5 {\n  font-size: calc(1.425rem + 2.1vw);\n  font-weight: 300;\n  line-height: 1.2;\n}\n\n@media (min-width: 1200px) {\n  .display-5 {\n    font-size: 3rem;\n  }\n}\n\n.display-6 {\n  font-size: calc(1.375rem + 1.5vw);\n  font-weight: 300;\n  line-height: 1.2;\n}\n\n@media (min-width: 1200px) {\n  .display-6 {\n    font-size: 2.5rem;\n  }\n}\n\n.list-unstyled {\n  padding-left: 0;\n  list-style: none;\n}\n\n.list-inline {\n  padding-left: 0;\n  list-style: none;\n}\n\n.list-inline-item {\n  display: inline-block;\n}\n\n.list-inline-item:not(:last-child) {\n  margin-right: 0.5rem;\n}\n\n.initialism {\n  font-size: 0.875em;\n  text-transform: uppercase;\n}\n\n.blockquote {\n  margin-bottom: 1rem;\n  font-size: 1.25rem;\n}\n\n.blockquote > :last-child {\n  margin-bottom: 0;\n}\n\n.blockquote-footer {\n  margin-top: -1rem;\n  margin-bottom: 1rem;\n  font-size: 0.875em;\n  color: #7a8288;\n}\n\n.blockquote-footer::before {\n  content: \"\\2014\\00A0\";\n}\n\n.img-fluid {\n  max-width: 100%;\n  height: auto;\n}\n\n.img-thumbnail {\n  padding: 0.25rem;\n  background-color: #272b30;\n  border: 1px solid #dee2e6;\n  border-radius: 0.25rem;\n  max-width: 100%;\n  height: auto;\n}\n\n.figure {\n  display: inline-block;\n}\n\n.figure-img {\n  margin-bottom: 0.5rem;\n  line-height: 1;\n}\n\n.figure-caption {\n  font-size: 0.875em;\n  color: #7a8288;\n}\n\n.container,\n.container-fluid,\n.container-sm,\n.container-md,\n.container-lg,\n.container-xl,\n.container-xxl {\n  width: 100%;\n  padding-right: var(--bs-gutter-x, 0.75rem);\n  padding-left: var(--bs-gutter-x, 0.75rem);\n  margin-right: auto;\n  margin-left: auto;\n}\n\n@media (min-width: 576px) {\n  .container, .container-sm {\n    max-width: 540px;\n  }\n}\n\n@media (min-width: 768px) {\n  .container, .container-sm, .container-md {\n    max-width: 720px;\n  }\n}\n\n@media (min-width: 992px) {\n  .container, .container-sm, .container-md, .container-lg {\n    max-width: 960px;\n  }\n}\n\n@media (min-width: 1200px) {\n  .container, .container-sm, .container-md, .container-lg, .container-xl {\n    max-width: 1140px;\n  }\n}\n\n@media (min-width: 1400px) {\n  .container, .container-sm, .container-md, .container-lg, .container-xl, .container-xxl {\n    max-width: 1320px;\n  }\n}\n\n.row {\n  --bs-gutter-x: 1.5rem;\n  --bs-gutter-y: 0;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n  flex-wrap: wrap;\n  margin-top: calc(-1 * var(--bs-gutter-y));\n  margin-right: calc(-.5 * var(--bs-gutter-x));\n  margin-left: calc(-.5 * var(--bs-gutter-x));\n}\n\n.row > * {\n  -ms-flex-negative: 0;\n  flex-shrink: 0;\n  width: 100%;\n  max-width: 100%;\n  padding-right: calc(var(--bs-gutter-x) * .5);\n  padding-left: calc(var(--bs-gutter-x) * .5);\n  margin-top: var(--bs-gutter-y);\n}\n\n.col {\n  -ms-flex: 1 0 0%;\n  flex: 1 0 0%;\n}\n\n.row-cols-auto > * {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: auto;\n}\n\n.row-cols-1 > * {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 100%;\n}\n\n.row-cols-2 > * {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 50%;\n}\n\n.row-cols-3 > * {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 33.333333%;\n}\n\n.row-cols-4 > * {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 25%;\n}\n\n.row-cols-5 > * {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 20%;\n}\n\n.row-cols-6 > * {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 16.666667%;\n}\n\n.col-auto {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: auto;\n}\n\n.col-1 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 8.333333%;\n}\n\n.col-2 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 16.666667%;\n}\n\n.col-3 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 25%;\n}\n\n.col-4 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 33.333333%;\n}\n\n.col-5 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 41.666667%;\n}\n\n.col-6 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 50%;\n}\n\n.col-7 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 58.333333%;\n}\n\n.col-8 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 66.666667%;\n}\n\n.col-9 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 75%;\n}\n\n.col-10 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 83.333333%;\n}\n\n.col-11 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 91.666667%;\n}\n\n.col-12 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 100%;\n}\n\n.offset-1 {\n  margin-left: 8.333333%;\n}\n\n.offset-2 {\n  margin-left: 16.666667%;\n}\n\n.offset-3 {\n  margin-left: 25%;\n}\n\n.offset-4 {\n  margin-left: 33.333333%;\n}\n\n.offset-5 {\n  margin-left: 41.666667%;\n}\n\n.offset-6 {\n  margin-left: 50%;\n}\n\n.offset-7 {\n  margin-left: 58.333333%;\n}\n\n.offset-8 {\n  margin-left: 66.666667%;\n}\n\n.offset-9 {\n  margin-left: 75%;\n}\n\n.offset-10 {\n  margin-left: 83.333333%;\n}\n\n.offset-11 {\n  margin-left: 91.666667%;\n}\n\n.g-0,\n.gx-0 {\n  --bs-gutter-x: 0;\n}\n\n.g-0,\n.gy-0 {\n  --bs-gutter-y: 0;\n}\n\n.g-1,\n.gx-1 {\n  --bs-gutter-x: 0.25rem;\n}\n\n.g-1,\n.gy-1 {\n  --bs-gutter-y: 0.25rem;\n}\n\n.g-2,\n.gx-2 {\n  --bs-gutter-x: 0.5rem;\n}\n\n.g-2,\n.gy-2 {\n  --bs-gutter-y: 0.5rem;\n}\n\n.g-3,\n.gx-3 {\n  --bs-gutter-x: 1rem;\n}\n\n.g-3,\n.gy-3 {\n  --bs-gutter-y: 1rem;\n}\n\n.g-4,\n.gx-4 {\n  --bs-gutter-x: 1.5rem;\n}\n\n.g-4,\n.gy-4 {\n  --bs-gutter-y: 1.5rem;\n}\n\n.g-5,\n.gx-5 {\n  --bs-gutter-x: 3rem;\n}\n\n.g-5,\n.gy-5 {\n  --bs-gutter-y: 3rem;\n}\n\n@media (min-width: 576px) {\n  .col-sm {\n    -ms-flex: 1 0 0%;\n    flex: 1 0 0%;\n  }\n  .row-cols-sm-auto > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .row-cols-sm-1 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .row-cols-sm-2 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .row-cols-sm-3 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 33.333333%;\n  }\n  .row-cols-sm-4 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .row-cols-sm-5 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 20%;\n  }\n  .row-cols-sm-6 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 16.666667%;\n  }\n  .col-sm-auto {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .col-sm-1 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 8.333333%;\n  }\n  .col-sm-2 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 16.666667%;\n  }\n  .col-sm-3 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .col-sm-4 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 33.333333%;\n  }\n  .col-sm-5 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 41.666667%;\n  }\n  .col-sm-6 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .col-sm-7 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 58.333333%;\n  }\n  .col-sm-8 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 66.666667%;\n  }\n  .col-sm-9 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 75%;\n  }\n  .col-sm-10 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 83.333333%;\n  }\n  .col-sm-11 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 91.666667%;\n  }\n  .col-sm-12 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .offset-sm-0 {\n    margin-left: 0;\n  }\n  .offset-sm-1 {\n    margin-left: 8.333333%;\n  }\n  .offset-sm-2 {\n    margin-left: 16.666667%;\n  }\n  .offset-sm-3 {\n    margin-left: 25%;\n  }\n  .offset-sm-4 {\n    margin-left: 33.333333%;\n  }\n  .offset-sm-5 {\n    margin-left: 41.666667%;\n  }\n  .offset-sm-6 {\n    margin-left: 50%;\n  }\n  .offset-sm-7 {\n    margin-left: 58.333333%;\n  }\n  .offset-sm-8 {\n    margin-left: 66.666667%;\n  }\n  .offset-sm-9 {\n    margin-left: 75%;\n  }\n  .offset-sm-10 {\n    margin-left: 83.333333%;\n  }\n  .offset-sm-11 {\n    margin-left: 91.666667%;\n  }\n  .g-sm-0,\n  .gx-sm-0 {\n    --bs-gutter-x: 0;\n  }\n  .g-sm-0,\n  .gy-sm-0 {\n    --bs-gutter-y: 0;\n  }\n  .g-sm-1,\n  .gx-sm-1 {\n    --bs-gutter-x: 0.25rem;\n  }\n  .g-sm-1,\n  .gy-sm-1 {\n    --bs-gutter-y: 0.25rem;\n  }\n  .g-sm-2,\n  .gx-sm-2 {\n    --bs-gutter-x: 0.5rem;\n  }\n  .g-sm-2,\n  .gy-sm-2 {\n    --bs-gutter-y: 0.5rem;\n  }\n  .g-sm-3,\n  .gx-sm-3 {\n    --bs-gutter-x: 1rem;\n  }\n  .g-sm-3,\n  .gy-sm-3 {\n    --bs-gutter-y: 1rem;\n  }\n  .g-sm-4,\n  .gx-sm-4 {\n    --bs-gutter-x: 1.5rem;\n  }\n  .g-sm-4,\n  .gy-sm-4 {\n    --bs-gutter-y: 1.5rem;\n  }\n  .g-sm-5,\n  .gx-sm-5 {\n    --bs-gutter-x: 3rem;\n  }\n  .g-sm-5,\n  .gy-sm-5 {\n    --bs-gutter-y: 3rem;\n  }\n}\n\n@media (min-width: 768px) {\n  .col-md {\n    -ms-flex: 1 0 0%;\n    flex: 1 0 0%;\n  }\n  .row-cols-md-auto > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .row-cols-md-1 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .row-cols-md-2 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .row-cols-md-3 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 33.333333%;\n  }\n  .row-cols-md-4 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .row-cols-md-5 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 20%;\n  }\n  .row-cols-md-6 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 16.666667%;\n  }\n  .col-md-auto {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .col-md-1 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 8.333333%;\n  }\n  .col-md-2 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 16.666667%;\n  }\n  .col-md-3 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .col-md-4 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 33.333333%;\n  }\n  .col-md-5 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 41.666667%;\n  }\n  .col-md-6 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .col-md-7 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 58.333333%;\n  }\n  .col-md-8 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 66.666667%;\n  }\n  .col-md-9 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 75%;\n  }\n  .col-md-10 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 83.333333%;\n  }\n  .col-md-11 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 91.666667%;\n  }\n  .col-md-12 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .offset-md-0 {\n    margin-left: 0;\n  }\n  .offset-md-1 {\n    margin-left: 8.333333%;\n  }\n  .offset-md-2 {\n    margin-left: 16.666667%;\n  }\n  .offset-md-3 {\n    margin-left: 25%;\n  }\n  .offset-md-4 {\n    margin-left: 33.333333%;\n  }\n  .offset-md-5 {\n    margin-left: 41.666667%;\n  }\n  .offset-md-6 {\n    margin-left: 50%;\n  }\n  .offset-md-7 {\n    margin-left: 58.333333%;\n  }\n  .offset-md-8 {\n    margin-left: 66.666667%;\n  }\n  .offset-md-9 {\n    margin-left: 75%;\n  }\n  .offset-md-10 {\n    margin-left: 83.333333%;\n  }\n  .offset-md-11 {\n    margin-left: 91.666667%;\n  }\n  .g-md-0,\n  .gx-md-0 {\n    --bs-gutter-x: 0;\n  }\n  .g-md-0,\n  .gy-md-0 {\n    --bs-gutter-y: 0;\n  }\n  .g-md-1,\n  .gx-md-1 {\n    --bs-gutter-x: 0.25rem;\n  }\n  .g-md-1,\n  .gy-md-1 {\n    --bs-gutter-y: 0.25rem;\n  }\n  .g-md-2,\n  .gx-md-2 {\n    --bs-gutter-x: 0.5rem;\n  }\n  .g-md-2,\n  .gy-md-2 {\n    --bs-gutter-y: 0.5rem;\n  }\n  .g-md-3,\n  .gx-md-3 {\n    --bs-gutter-x: 1rem;\n  }\n  .g-md-3,\n  .gy-md-3 {\n    --bs-gutter-y: 1rem;\n  }\n  .g-md-4,\n  .gx-md-4 {\n    --bs-gutter-x: 1.5rem;\n  }\n  .g-md-4,\n  .gy-md-4 {\n    --bs-gutter-y: 1.5rem;\n  }\n  .g-md-5,\n  .gx-md-5 {\n    --bs-gutter-x: 3rem;\n  }\n  .g-md-5,\n  .gy-md-5 {\n    --bs-gutter-y: 3rem;\n  }\n}\n\n@media (min-width: 992px) {\n  .col-lg {\n    -ms-flex: 1 0 0%;\n    flex: 1 0 0%;\n  }\n  .row-cols-lg-auto > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .row-cols-lg-1 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .row-cols-lg-2 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .row-cols-lg-3 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 33.333333%;\n  }\n  .row-cols-lg-4 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .row-cols-lg-5 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 20%;\n  }\n  .row-cols-lg-6 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 16.666667%;\n  }\n  .col-lg-auto {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .col-lg-1 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 8.333333%;\n  }\n  .col-lg-2 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 16.666667%;\n  }\n  .col-lg-3 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .col-lg-4 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 33.333333%;\n  }\n  .col-lg-5 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 41.666667%;\n  }\n  .col-lg-6 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .col-lg-7 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 58.333333%;\n  }\n  .col-lg-8 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 66.666667%;\n  }\n  .col-lg-9 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 75%;\n  }\n  .col-lg-10 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 83.333333%;\n  }\n  .col-lg-11 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 91.666667%;\n  }\n  .col-lg-12 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .offset-lg-0 {\n    margin-left: 0;\n  }\n  .offset-lg-1 {\n    margin-left: 8.333333%;\n  }\n  .offset-lg-2 {\n    margin-left: 16.666667%;\n  }\n  .offset-lg-3 {\n    margin-left: 25%;\n  }\n  .offset-lg-4 {\n    margin-left: 33.333333%;\n  }\n  .offset-lg-5 {\n    margin-left: 41.666667%;\n  }\n  .offset-lg-6 {\n    margin-left: 50%;\n  }\n  .offset-lg-7 {\n    margin-left: 58.333333%;\n  }\n  .offset-lg-8 {\n    margin-left: 66.666667%;\n  }\n  .offset-lg-9 {\n    margin-left: 75%;\n  }\n  .offset-lg-10 {\n    margin-left: 83.333333%;\n  }\n  .offset-lg-11 {\n    margin-left: 91.666667%;\n  }\n  .g-lg-0,\n  .gx-lg-0 {\n    --bs-gutter-x: 0;\n  }\n  .g-lg-0,\n  .gy-lg-0 {\n    --bs-gutter-y: 0;\n  }\n  .g-lg-1,\n  .gx-lg-1 {\n    --bs-gutter-x: 0.25rem;\n  }\n  .g-lg-1,\n  .gy-lg-1 {\n    --bs-gutter-y: 0.25rem;\n  }\n  .g-lg-2,\n  .gx-lg-2 {\n    --bs-gutter-x: 0.5rem;\n  }\n  .g-lg-2,\n  .gy-lg-2 {\n    --bs-gutter-y: 0.5rem;\n  }\n  .g-lg-3,\n  .gx-lg-3 {\n    --bs-gutter-x: 1rem;\n  }\n  .g-lg-3,\n  .gy-lg-3 {\n    --bs-gutter-y: 1rem;\n  }\n  .g-lg-4,\n  .gx-lg-4 {\n    --bs-gutter-x: 1.5rem;\n  }\n  .g-lg-4,\n  .gy-lg-4 {\n    --bs-gutter-y: 1.5rem;\n  }\n  .g-lg-5,\n  .gx-lg-5 {\n    --bs-gutter-x: 3rem;\n  }\n  .g-lg-5,\n  .gy-lg-5 {\n    --bs-gutter-y: 3rem;\n  }\n}\n\n@media (min-width: 1200px) {\n  .col-xl {\n    -ms-flex: 1 0 0%;\n    flex: 1 0 0%;\n  }\n  .row-cols-xl-auto > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .row-cols-xl-1 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .row-cols-xl-2 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .row-cols-xl-3 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 33.333333%;\n  }\n  .row-cols-xl-4 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .row-cols-xl-5 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 20%;\n  }\n  .row-cols-xl-6 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 16.666667%;\n  }\n  .col-xl-auto {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .col-xl-1 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 8.333333%;\n  }\n  .col-xl-2 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 16.666667%;\n  }\n  .col-xl-3 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .col-xl-4 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 33.333333%;\n  }\n  .col-xl-5 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 41.666667%;\n  }\n  .col-xl-6 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .col-xl-7 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 58.333333%;\n  }\n  .col-xl-8 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 66.666667%;\n  }\n  .col-xl-9 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 75%;\n  }\n  .col-xl-10 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 83.333333%;\n  }\n  .col-xl-11 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 91.666667%;\n  }\n  .col-xl-12 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .offset-xl-0 {\n    margin-left: 0;\n  }\n  .offset-xl-1 {\n    margin-left: 8.333333%;\n  }\n  .offset-xl-2 {\n    margin-left: 16.666667%;\n  }\n  .offset-xl-3 {\n    margin-left: 25%;\n  }\n  .offset-xl-4 {\n    margin-left: 33.333333%;\n  }\n  .offset-xl-5 {\n    margin-left: 41.666667%;\n  }\n  .offset-xl-6 {\n    margin-left: 50%;\n  }\n  .offset-xl-7 {\n    margin-left: 58.333333%;\n  }\n  .offset-xl-8 {\n    margin-left: 66.666667%;\n  }\n  .offset-xl-9 {\n    margin-left: 75%;\n  }\n  .offset-xl-10 {\n    margin-left: 83.333333%;\n  }\n  .offset-xl-11 {\n    margin-left: 91.666667%;\n  }\n  .g-xl-0,\n  .gx-xl-0 {\n    --bs-gutter-x: 0;\n  }\n  .g-xl-0,\n  .gy-xl-0 {\n    --bs-gutter-y: 0;\n  }\n  .g-xl-1,\n  .gx-xl-1 {\n    --bs-gutter-x: 0.25rem;\n  }\n  .g-xl-1,\n  .gy-xl-1 {\n    --bs-gutter-y: 0.25rem;\n  }\n  .g-xl-2,\n  .gx-xl-2 {\n    --bs-gutter-x: 0.5rem;\n  }\n  .g-xl-2,\n  .gy-xl-2 {\n    --bs-gutter-y: 0.5rem;\n  }\n  .g-xl-3,\n  .gx-xl-3 {\n    --bs-gutter-x: 1rem;\n  }\n  .g-xl-3,\n  .gy-xl-3 {\n    --bs-gutter-y: 1rem;\n  }\n  .g-xl-4,\n  .gx-xl-4 {\n    --bs-gutter-x: 1.5rem;\n  }\n  .g-xl-4,\n  .gy-xl-4 {\n    --bs-gutter-y: 1.5rem;\n  }\n  .g-xl-5,\n  .gx-xl-5 {\n    --bs-gutter-x: 3rem;\n  }\n  .g-xl-5,\n  .gy-xl-5 {\n    --bs-gutter-y: 3rem;\n  }\n}\n\n@media (min-width: 1400px) {\n  .col-xxl {\n    -ms-flex: 1 0 0%;\n    flex: 1 0 0%;\n  }\n  .row-cols-xxl-auto > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .row-cols-xxl-1 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .row-cols-xxl-2 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .row-cols-xxl-3 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 33.333333%;\n  }\n  .row-cols-xxl-4 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .row-cols-xxl-5 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 20%;\n  }\n  .row-cols-xxl-6 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 16.666667%;\n  }\n  .col-xxl-auto {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .col-xxl-1 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 8.333333%;\n  }\n  .col-xxl-2 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 16.666667%;\n  }\n  .col-xxl-3 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .col-xxl-4 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 33.333333%;\n  }\n  .col-xxl-5 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 41.666667%;\n  }\n  .col-xxl-6 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .col-xxl-7 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 58.333333%;\n  }\n  .col-xxl-8 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 66.666667%;\n  }\n  .col-xxl-9 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 75%;\n  }\n  .col-xxl-10 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 83.333333%;\n  }\n  .col-xxl-11 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 91.666667%;\n  }\n  .col-xxl-12 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .offset-xxl-0 {\n    margin-left: 0;\n  }\n  .offset-xxl-1 {\n    margin-left: 8.333333%;\n  }\n  .offset-xxl-2 {\n    margin-left: 16.666667%;\n  }\n  .offset-xxl-3 {\n    margin-left: 25%;\n  }\n  .offset-xxl-4 {\n    margin-left: 33.333333%;\n  }\n  .offset-xxl-5 {\n    margin-left: 41.666667%;\n  }\n  .offset-xxl-6 {\n    margin-left: 50%;\n  }\n  .offset-xxl-7 {\n    margin-left: 58.333333%;\n  }\n  .offset-xxl-8 {\n    margin-left: 66.666667%;\n  }\n  .offset-xxl-9 {\n    margin-left: 75%;\n  }\n  .offset-xxl-10 {\n    margin-left: 83.333333%;\n  }\n  .offset-xxl-11 {\n    margin-left: 91.666667%;\n  }\n  .g-xxl-0,\n  .gx-xxl-0 {\n    --bs-gutter-x: 0;\n  }\n  .g-xxl-0,\n  .gy-xxl-0 {\n    --bs-gutter-y: 0;\n  }\n  .g-xxl-1,\n  .gx-xxl-1 {\n    --bs-gutter-x: 0.25rem;\n  }\n  .g-xxl-1,\n  .gy-xxl-1 {\n    --bs-gutter-y: 0.25rem;\n  }\n  .g-xxl-2,\n  .gx-xxl-2 {\n    --bs-gutter-x: 0.5rem;\n  }\n  .g-xxl-2,\n  .gy-xxl-2 {\n    --bs-gutter-y: 0.5rem;\n  }\n  .g-xxl-3,\n  .gx-xxl-3 {\n    --bs-gutter-x: 1rem;\n  }\n  .g-xxl-3,\n  .gy-xxl-3 {\n    --bs-gutter-y: 1rem;\n  }\n  .g-xxl-4,\n  .gx-xxl-4 {\n    --bs-gutter-x: 1.5rem;\n  }\n  .g-xxl-4,\n  .gy-xxl-4 {\n    --bs-gutter-y: 1.5rem;\n  }\n  .g-xxl-5,\n  .gx-xxl-5 {\n    --bs-gutter-x: 3rem;\n  }\n  .g-xxl-5,\n  .gy-xxl-5 {\n    --bs-gutter-y: 3rem;\n  }\n}\n\n.table {\n  --bs-table-bg: transparent;\n  --bs-table-accent-bg: rgba(255, 255, 255, 0.05);\n  --bs-table-striped-color: #fff;\n  --bs-table-striped-bg: rgba(0, 0, 0, 0.05);\n  --bs-table-active-color: #fff;\n  --bs-table-active-bg: rgba(0, 0, 0, 0.1);\n  --bs-table-hover-color: #fff;\n  --bs-table-hover-bg: rgba(255, 255, 255, 0.075);\n  width: 100%;\n  margin-bottom: 1rem;\n  color: #fff;\n  vertical-align: top;\n  border-color: rgba(0, 0, 0, 0.6);\n}\n\n.table > :not(caption) > * > * {\n  padding: 0.5rem 0.5rem;\n  background-color: var(--bs-table-bg);\n  border-bottom-width: 1px;\n  box-shadow: inset 0 0 0 9999px var(--bs-table-accent-bg);\n}\n\n.table > tbody {\n  vertical-align: inherit;\n}\n\n.table > thead {\n  vertical-align: bottom;\n}\n\n.table > :not(:first-child) {\n  border-top: 2px solid currentColor;\n}\n\n.caption-top {\n  caption-side: top;\n}\n\n.table-sm > :not(caption) > * > * {\n  padding: 0.25rem 0.25rem;\n}\n\n.table-bordered > :not(caption) > * {\n  border-width: 1px 0;\n}\n\n.table-bordered > :not(caption) > * > * {\n  border-width: 0 1px;\n}\n\n.table-borderless > :not(caption) > * > * {\n  border-bottom-width: 0;\n}\n\n.table-borderless > :not(:first-child) {\n  border-top-width: 0;\n}\n\n.table-striped > tbody > tr:nth-of-type(odd) > * {\n  --bs-table-accent-bg: var(--bs-table-striped-bg);\n  color: var(--bs-table-striped-color);\n}\n\n.table-active {\n  --bs-table-accent-bg: var(--bs-table-active-bg);\n  color: var(--bs-table-active-color);\n}\n\n.table-hover > tbody > tr:hover > * {\n  --bs-table-accent-bg: var(--bs-table-hover-bg);\n  color: var(--bs-table-hover-color);\n}\n\n.table-primary {\n  --bs-table-bg: #3a3f44;\n  --bs-table-striped-bg: #44494d;\n  --bs-table-striped-color: #fff;\n  --bs-table-active-bg: #4e5257;\n  --bs-table-active-color: #fff;\n  --bs-table-hover-bg: #494d52;\n  --bs-table-hover-color: #fff;\n  color: #fff;\n  border-color: #4e5257;\n}\n\n.table-secondary {\n  --bs-table-bg: #7a8288;\n  --bs-table-striped-bg: #81888e;\n  --bs-table-striped-color: #fff;\n  --bs-table-active-bg: #878f94;\n  --bs-table-active-color: #fff;\n  --bs-table-hover-bg: #848b91;\n  --bs-table-hover-color: #fff;\n  color: #fff;\n  border-color: #878f94;\n}\n\n.table-success {\n  --bs-table-bg: #62c462;\n  --bs-table-striped-bg: #6ac76a;\n  --bs-table-striped-color: #fff;\n  --bs-table-active-bg: #72ca72;\n  --bs-table-active-color: #fff;\n  --bs-table-hover-bg: #6ec86e;\n  --bs-table-hover-color: #fff;\n  color: #fff;\n  border-color: #72ca72;\n}\n\n.table-info {\n  --bs-table-bg: #5bc0de;\n  --bs-table-striped-bg: #63c3e0;\n  --bs-table-striped-color: #fff;\n  --bs-table-active-bg: #6bc6e1;\n  --bs-table-active-color: #000;\n  --bs-table-hover-bg: #67c5e0;\n  --bs-table-hover-color: #fff;\n  color: #fff;\n  border-color: #6bc6e1;\n}\n\n.table-warning {\n  --bs-table-bg: #f89406;\n  --bs-table-striped-bg: #f89912;\n  --bs-table-striped-color: #fff;\n  --bs-table-active-bg: #f99f1f;\n  --bs-table-active-color: #fff;\n  --bs-table-hover-bg: #f99c19;\n  --bs-table-hover-color: #fff;\n  color: #fff;\n  border-color: #f99f1f;\n}\n\n.table-danger {\n  --bs-table-bg: #ee5f5b;\n  --bs-table-striped-bg: #ef6763;\n  --bs-table-striped-color: #fff;\n  --bs-table-active-bg: #f06f6b;\n  --bs-table-active-color: #fff;\n  --bs-table-hover-bg: #ef6b67;\n  --bs-table-hover-color: #fff;\n  color: #fff;\n  border-color: #f06f6b;\n}\n\n.table-light {\n  --bs-table-bg: #e9ecef;\n  --bs-table-striped-bg: #dde0e3;\n  --bs-table-striped-color: #000;\n  --bs-table-active-bg: #d2d4d7;\n  --bs-table-active-color: #000;\n  --bs-table-hover-bg: #d8dadd;\n  --bs-table-hover-color: #000;\n  color: #000;\n  border-color: #d2d4d7;\n}\n\n.table-dark {\n  --bs-table-bg: #272b30;\n  --bs-table-striped-bg: #32363a;\n  --bs-table-striped-color: #fff;\n  --bs-table-active-bg: #3d4045;\n  --bs-table-active-color: #fff;\n  --bs-table-hover-bg: #373b40;\n  --bs-table-hover-color: #fff;\n  color: #fff;\n  border-color: #3d4045;\n}\n\n.table-responsive {\n  overflow-x: auto;\n  -webkit-overflow-scrolling: touch;\n}\n\n@media (max-width: 575.98px) {\n  .table-responsive-sm {\n    overflow-x: auto;\n    -webkit-overflow-scrolling: touch;\n  }\n}\n\n@media (max-width: 767.98px) {\n  .table-responsive-md {\n    overflow-x: auto;\n    -webkit-overflow-scrolling: touch;\n  }\n}\n\n@media (max-width: 991.98px) {\n  .table-responsive-lg {\n    overflow-x: auto;\n    -webkit-overflow-scrolling: touch;\n  }\n}\n\n@media (max-width: 1199.98px) {\n  .table-responsive-xl {\n    overflow-x: auto;\n    -webkit-overflow-scrolling: touch;\n  }\n}\n\n@media (max-width: 1399.98px) {\n  .table-responsive-xxl {\n    overflow-x: auto;\n    -webkit-overflow-scrolling: touch;\n  }\n}\n\n.form-label {\n  margin-bottom: 0.5rem;\n}\n\n.col-form-label {\n  padding-top: calc(0.75rem + 1px);\n  padding-bottom: calc(0.75rem + 1px);\n  margin-bottom: 0;\n  font-size: inherit;\n  line-height: 1.5;\n}\n\n.col-form-label-lg {\n  padding-top: calc(0.5rem + 1px);\n  padding-bottom: calc(0.5rem + 1px);\n  font-size: 1.25rem;\n}\n\n.col-form-label-sm {\n  padding-top: calc(0.25rem + 1px);\n  padding-bottom: calc(0.25rem + 1px);\n  font-size: 0.875rem;\n}\n\n.form-text {\n  margin-top: 0.25rem;\n  font-size: 0.875em;\n  color: #7a8288;\n}\n\n.form-control {\n  display: block;\n  width: 100%;\n  padding: 0.75rem 1rem;\n  font-size: 1rem;\n  font-weight: 400;\n  line-height: 1.5;\n  color: #272b30;\n  background-color: #fff;\n  background-clip: padding-box;\n  border: 1px solid #ced4da;\n  -webkit-appearance: none;\n  -moz-appearance: none;\n  appearance: none;\n  border-radius: 0.25rem;\n  transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .form-control {\n    transition: none;\n  }\n}\n\n.form-control[type=\"file\"] {\n  overflow: hidden;\n}\n\n.form-control[type=\"file\"]:not(:disabled):not([readonly]) {\n  cursor: pointer;\n}\n\n.form-control:focus {\n  color: #272b30;\n  background-color: #fff;\n  border-color: #9d9fa2;\n  outline: 0;\n  box-shadow: 0 0 0 0.25rem rgba(58, 63, 68, 0.25);\n}\n\n.form-control::-webkit-date-and-time-value {\n  height: 1.5em;\n}\n\n.form-control::-webkit-input-placeholder {\n  color: #7a8288;\n  opacity: 1;\n}\n\n.form-control::-moz-placeholder {\n  color: #7a8288;\n  opacity: 1;\n}\n\n.form-control:-ms-input-placeholder {\n  color: #7a8288;\n  opacity: 1;\n}\n\n.form-control::-ms-input-placeholder {\n  color: #7a8288;\n  opacity: 1;\n}\n\n.form-control::placeholder {\n  color: #7a8288;\n  opacity: 1;\n}\n\n.form-control:disabled, .form-control[readonly] {\n  background-color: #ccc;\n  opacity: 1;\n}\n\n.form-control::file-selector-button {\n  padding: 0.75rem 1rem;\n  margin: -0.75rem -1rem;\n  -webkit-margin-end: 1rem;\n  -moz-margin-end: 1rem;\n  margin-inline-end: 1rem;\n  color: #272b30;\n  background-color: #e9ecef;\n  pointer-events: none;\n  border-color: inherit;\n  border-style: solid;\n  border-width: 0;\n  border-inline-end-width: 1px;\n  border-radius: 0;\n  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .form-control::file-selector-button {\n    transition: none;\n  }\n}\n\n.form-control:hover:not(:disabled):not([readonly])::file-selector-button {\n  background-color: #dde0e3;\n}\n\n.form-control::-webkit-file-upload-button {\n  padding: 0.75rem 1rem;\n  margin: -0.75rem -1rem;\n  -webkit-margin-end: 1rem;\n  margin-inline-end: 1rem;\n  color: #272b30;\n  background-color: #e9ecef;\n  pointer-events: none;\n  border-color: inherit;\n  border-style: solid;\n  border-width: 0;\n  border-inline-end-width: 1px;\n  border-radius: 0;\n  -webkit-transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .form-control::-webkit-file-upload-button {\n    -webkit-transition: none;\n    transition: none;\n  }\n}\n\n.form-control:hover:not(:disabled):not([readonly])::-webkit-file-upload-button {\n  background-color: #dde0e3;\n}\n\n.form-control-plaintext {\n  display: block;\n  width: 100%;\n  padding: 0.75rem 0;\n  margin-bottom: 0;\n  line-height: 1.5;\n  color: #aaa;\n  background-color: transparent;\n  border: solid transparent;\n  border-width: 1px 0;\n}\n\n.form-control-plaintext.form-control-sm, .form-control-plaintext.form-control-lg {\n  padding-right: 0;\n  padding-left: 0;\n}\n\n.form-control-sm {\n  min-height: calc(1.5em + 0.5rem + 2px);\n  padding: 0.25rem 0.5rem;\n  font-size: 0.875rem;\n  border-radius: 0.2rem;\n}\n\n.form-control-sm::file-selector-button {\n  padding: 0.25rem 0.5rem;\n  margin: -0.25rem -0.5rem;\n  -webkit-margin-end: 0.5rem;\n  -moz-margin-end: 0.5rem;\n  margin-inline-end: 0.5rem;\n}\n\n.form-control-sm::-webkit-file-upload-button {\n  padding: 0.25rem 0.5rem;\n  margin: -0.25rem -0.5rem;\n  -webkit-margin-end: 0.5rem;\n  margin-inline-end: 0.5rem;\n}\n\n.form-control-lg {\n  min-height: calc(1.5em + 1rem + 2px);\n  padding: 0.5rem 1rem;\n  font-size: 1.25rem;\n  border-radius: 0.3rem;\n}\n\n.form-control-lg::file-selector-button {\n  padding: 0.5rem 1rem;\n  margin: -0.5rem -1rem;\n  -webkit-margin-end: 1rem;\n  -moz-margin-end: 1rem;\n  margin-inline-end: 1rem;\n}\n\n.form-control-lg::-webkit-file-upload-button {\n  padding: 0.5rem 1rem;\n  margin: -0.5rem -1rem;\n  -webkit-margin-end: 1rem;\n  margin-inline-end: 1rem;\n}\n\ntextarea.form-control {\n  min-height: calc(1.5em + 1.5rem + 2px);\n}\n\ntextarea.form-control-sm {\n  min-height: calc(1.5em + 0.5rem + 2px);\n}\n\ntextarea.form-control-lg {\n  min-height: calc(1.5em + 1rem + 2px);\n}\n\n.form-control-color {\n  width: 3rem;\n  height: auto;\n  padding: 0.75rem;\n}\n\n.form-control-color:not(:disabled):not([readonly]) {\n  cursor: pointer;\n}\n\n.form-control-color::-moz-color-swatch {\n  height: 1.5em;\n  border-radius: 0.25rem;\n}\n\n.form-control-color::-webkit-color-swatch {\n  height: 1.5em;\n  border-radius: 0.25rem;\n}\n\n.form-select {\n  display: block;\n  width: 100%;\n  padding: 0.75rem 3rem 0.75rem 1rem;\n  -moz-padding-start: calc(1rem - 3px);\n  font-size: 1rem;\n  font-weight: 400;\n  line-height: 1.5;\n  color: #272b30;\n  background-color: #fff;\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%233a3f44' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e\");\n  background-repeat: no-repeat;\n  background-position: right 1rem center;\n  background-size: 16px 12px;\n  border: 1px solid #ced4da;\n  border-radius: 0.25rem;\n  transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n  -webkit-appearance: none;\n  -moz-appearance: none;\n  appearance: none;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .form-select {\n    transition: none;\n  }\n}\n\n.form-select:focus {\n  border-color: #9d9fa2;\n  outline: 0;\n  box-shadow: 0 0 0 0.25rem rgba(58, 63, 68, 0.25);\n}\n\n.form-select[multiple], .form-select[size]:not([size=\"1\"]) {\n  padding-right: 1rem;\n  background-image: none;\n}\n\n.form-select:disabled {\n  background-color: #e9ecef;\n}\n\n.form-select:-moz-focusring {\n  color: transparent;\n  text-shadow: 0 0 0 #272b30;\n}\n\n.form-select-sm {\n  padding-top: 0.25rem;\n  padding-bottom: 0.25rem;\n  padding-left: 0.5rem;\n  font-size: 0.875rem;\n  border-radius: 0.2rem;\n}\n\n.form-select-lg {\n  padding-top: 0.5rem;\n  padding-bottom: 0.5rem;\n  padding-left: 1rem;\n  font-size: 1.25rem;\n  border-radius: 0.3rem;\n}\n\n.form-check {\n  display: block;\n  min-height: 1.5rem;\n  padding-left: 1.5em;\n  margin-bottom: 0.125rem;\n}\n\n.form-check .form-check-input {\n  float: left;\n  margin-left: -1.5em;\n}\n\n.form-check-input {\n  width: 1em;\n  height: 1em;\n  margin-top: 0.25em;\n  vertical-align: top;\n  background-color: #fff;\n  background-repeat: no-repeat;\n  background-position: center;\n  background-size: contain;\n  border: 1px solid rgba(0, 0, 0, 0.25);\n  -webkit-appearance: none;\n  -moz-appearance: none;\n  appearance: none;\n  -webkit-print-color-adjust: exact;\n  color-adjust: exact;\n}\n\n.form-check-input[type=\"checkbox\"] {\n  border-radius: 0.25em;\n}\n\n.form-check-input[type=\"radio\"] {\n  border-radius: 50%;\n}\n\n.form-check-input:active {\n  -webkit-filter: brightness(90%);\n  filter: brightness(90%);\n}\n\n.form-check-input:focus {\n  border-color: #9d9fa2;\n  outline: 0;\n  box-shadow: 0 0 0 0.25rem rgba(58, 63, 68, 0.25);\n}\n\n.form-check-input:checked {\n  background-color: #3a3f44;\n  border-color: #3a3f44;\n}\n\n.form-check-input:checked[type=\"checkbox\"] {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10l3 3l6-6'/%3e%3c/svg%3e\");\n}\n\n.form-check-input:checked[type=\"radio\"] {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='2' fill='%23fff'/%3e%3c/svg%3e\");\n}\n\n.form-check-input[type=\"checkbox\"]:indeterminate {\n  background-color: #3a3f44;\n  border-color: #3a3f44;\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10h8'/%3e%3c/svg%3e\");\n}\n\n.form-check-input:disabled {\n  pointer-events: none;\n  -webkit-filter: none;\n  filter: none;\n  opacity: 0.5;\n}\n\n.form-check-input[disabled] ~ .form-check-label, .form-check-input:disabled ~ .form-check-label {\n  opacity: 0.5;\n}\n\n.form-switch {\n  padding-left: 2.5em;\n}\n\n.form-switch .form-check-input {\n  width: 2em;\n  margin-left: -2.5em;\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%280, 0, 0, 0.25%29'/%3e%3c/svg%3e\");\n  background-position: left center;\n  border-radius: 2em;\n  transition: background-position 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .form-switch .form-check-input {\n    transition: none;\n  }\n}\n\n.form-switch .form-check-input:focus {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%239d9fa2'/%3e%3c/svg%3e\");\n}\n\n.form-switch .form-check-input:checked {\n  background-position: right center;\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e\");\n}\n\n.form-check-inline {\n  display: inline-block;\n  margin-right: 1rem;\n}\n\n.btn-check {\n  position: absolute;\n  clip: rect(0, 0, 0, 0);\n  pointer-events: none;\n}\n\n.btn-check[disabled] + .btn, .btn-check:disabled + .btn {\n  pointer-events: none;\n  -webkit-filter: none;\n  filter: none;\n  opacity: 0.65;\n}\n\n.form-range {\n  width: 100%;\n  height: 1.5rem;\n  padding: 0;\n  background-color: transparent;\n  -webkit-appearance: none;\n  -moz-appearance: none;\n  appearance: none;\n}\n\n.form-range:focus {\n  outline: 0;\n}\n\n.form-range:focus::-webkit-slider-thumb {\n  box-shadow: 0 0 0 1px #272b30, 0 0 0 0.25rem rgba(58, 63, 68, 0.25);\n}\n\n.form-range:focus::-moz-range-thumb {\n  box-shadow: 0 0 0 1px #272b30, 0 0 0 0.25rem rgba(58, 63, 68, 0.25);\n}\n\n.form-range::-moz-focus-outer {\n  border: 0;\n}\n\n.form-range::-webkit-slider-thumb {\n  width: 1rem;\n  height: 1rem;\n  margin-top: -0.25rem;\n  background-color: #3a3f44;\n  border: 0;\n  border-radius: 1rem;\n  -webkit-transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n  transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n  -webkit-appearance: none;\n  appearance: none;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .form-range::-webkit-slider-thumb {\n    -webkit-transition: none;\n    transition: none;\n  }\n}\n\n.form-range::-webkit-slider-thumb:active {\n  background-color: #c4c5c7;\n}\n\n.form-range::-webkit-slider-runnable-track {\n  width: 100%;\n  height: 0.5rem;\n  color: transparent;\n  cursor: pointer;\n  background-color: #dee2e6;\n  border-color: transparent;\n  border-radius: 1rem;\n}\n\n.form-range::-moz-range-thumb {\n  width: 1rem;\n  height: 1rem;\n  background-color: #3a3f44;\n  border: 0;\n  border-radius: 1rem;\n  -moz-transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n  transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n  -moz-appearance: none;\n  appearance: none;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .form-range::-moz-range-thumb {\n    -moz-transition: none;\n    transition: none;\n  }\n}\n\n.form-range::-moz-range-thumb:active {\n  background-color: #c4c5c7;\n}\n\n.form-range::-moz-range-track {\n  width: 100%;\n  height: 0.5rem;\n  color: transparent;\n  cursor: pointer;\n  background-color: #dee2e6;\n  border-color: transparent;\n  border-radius: 1rem;\n}\n\n.form-range:disabled {\n  pointer-events: none;\n}\n\n.form-range:disabled::-webkit-slider-thumb {\n  background-color: #999;\n}\n\n.form-range:disabled::-moz-range-thumb {\n  background-color: #999;\n}\n\n.form-floating {\n  position: relative;\n}\n\n.form-floating > .form-control,\n.form-floating > .form-select {\n  height: calc(3.5rem + 2px);\n  line-height: 1.25;\n}\n\n.form-floating > label {\n  position: absolute;\n  top: 0;\n  left: 0;\n  height: 100%;\n  padding: 1rem 1rem;\n  pointer-events: none;\n  border: 1px solid transparent;\n  -webkit-transform-origin: 0 0;\n  transform-origin: 0 0;\n  transition: opacity 0.1s ease-in-out, -webkit-transform 0.1s ease-in-out;\n  transition: opacity 0.1s ease-in-out, transform 0.1s ease-in-out;\n  transition: opacity 0.1s ease-in-out, transform 0.1s ease-in-out, -webkit-transform 0.1s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .form-floating > label {\n    transition: none;\n  }\n}\n\n.form-floating > .form-control {\n  padding: 1rem 1rem;\n}\n\n.form-floating > .form-control::-webkit-input-placeholder {\n  color: transparent;\n}\n\n.form-floating > .form-control::-moz-placeholder {\n  color: transparent;\n}\n\n.form-floating > .form-control:-ms-input-placeholder {\n  color: transparent;\n}\n\n.form-floating > .form-control::-ms-input-placeholder {\n  color: transparent;\n}\n\n.form-floating > .form-control::placeholder {\n  color: transparent;\n}\n\n.form-floating > .form-control:not(:-moz-placeholder-shown) {\n  padding-top: 1.625rem;\n  padding-bottom: 0.625rem;\n}\n\n.form-floating > .form-control:not(:-ms-input-placeholder) {\n  padding-top: 1.625rem;\n  padding-bottom: 0.625rem;\n}\n\n.form-floating > .form-control:focus, .form-floating > .form-control:not(:placeholder-shown) {\n  padding-top: 1.625rem;\n  padding-bottom: 0.625rem;\n}\n\n.form-floating > .form-control:-webkit-autofill {\n  padding-top: 1.625rem;\n  padding-bottom: 0.625rem;\n}\n\n.form-floating > .form-select {\n  padding-top: 1.625rem;\n  padding-bottom: 0.625rem;\n}\n\n.form-floating > .form-control:not(:-moz-placeholder-shown) ~ label {\n  opacity: 0.65;\n  transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);\n}\n\n.form-floating > .form-control:not(:-ms-input-placeholder) ~ label {\n  opacity: 0.65;\n  transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);\n}\n\n.form-floating > .form-control:focus ~ label,\n.form-floating > .form-control:not(:placeholder-shown) ~ label,\n.form-floating > .form-select ~ label {\n  opacity: 0.65;\n  -webkit-transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);\n  transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);\n}\n\n.form-floating > .form-control:-webkit-autofill ~ label {\n  opacity: 0.65;\n  -webkit-transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);\n  transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);\n}\n\n.input-group {\n  position: relative;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n  flex-wrap: wrap;\n  -ms-flex-align: stretch;\n  align-items: stretch;\n  width: 100%;\n}\n\n.input-group > .form-control,\n.input-group > .form-select {\n  position: relative;\n  -ms-flex: 1 1 auto;\n  flex: 1 1 auto;\n  width: 1%;\n  min-width: 0;\n}\n\n.input-group > .form-control:focus,\n.input-group > .form-select:focus {\n  z-index: 3;\n}\n\n.input-group .btn {\n  position: relative;\n  z-index: 2;\n}\n\n.input-group .btn:focus {\n  z-index: 3;\n}\n\n.input-group-text {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-align: center;\n  align-items: center;\n  padding: 0.75rem 1rem;\n  font-size: 1rem;\n  font-weight: 400;\n  line-height: 1.5;\n  color: #272b30;\n  text-align: center;\n  white-space: nowrap;\n  background-color: #e9ecef;\n  border: 1px solid #ced4da;\n  border-radius: 0.25rem;\n}\n\n.input-group-lg > .form-control,\n.input-group-lg > .form-select,\n.input-group-lg > .input-group-text,\n.input-group-lg > .btn {\n  padding: 0.5rem 1rem;\n  font-size: 1.25rem;\n  border-radius: 0.3rem;\n}\n\n.input-group-sm > .form-control,\n.input-group-sm > .form-select,\n.input-group-sm > .input-group-text,\n.input-group-sm > .btn {\n  padding: 0.25rem 0.5rem;\n  font-size: 0.875rem;\n  border-radius: 0.2rem;\n}\n\n.input-group-lg > .form-select,\n.input-group-sm > .form-select {\n  padding-right: 4rem;\n}\n\n.input-group:not(.has-validation) > :not(:last-child):not(.dropdown-toggle):not(.dropdown-menu),\n.input-group:not(.has-validation) > .dropdown-toggle:nth-last-child(n + 3) {\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n}\n\n.input-group.has-validation > :nth-last-child(n + 3):not(.dropdown-toggle):not(.dropdown-menu),\n.input-group.has-validation > .dropdown-toggle:nth-last-child(n + 4) {\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n}\n\n.input-group > :not(:first-child):not(.dropdown-menu):not(.valid-tooltip):not(.valid-feedback):not(.invalid-tooltip):not(.invalid-feedback) {\n  margin-left: -1px;\n  border-top-left-radius: 0;\n  border-bottom-left-radius: 0;\n}\n\n.valid-feedback {\n  display: none;\n  width: 100%;\n  margin-top: 0.25rem;\n  font-size: 0.875em;\n  color: #62c462;\n}\n\n.valid-tooltip {\n  position: absolute;\n  top: 100%;\n  z-index: 5;\n  display: none;\n  max-width: 100%;\n  padding: 0.25rem 0.5rem;\n  margin-top: .1rem;\n  font-size: 0.875rem;\n  color: #fff;\n  background-color: rgba(98, 196, 98, 0.9);\n  border-radius: 0.25rem;\n}\n\n.was-validated :valid ~ .valid-feedback,\n.was-validated :valid ~ .valid-tooltip,\n.is-valid ~ .valid-feedback,\n.is-valid ~ .valid-tooltip {\n  display: block;\n}\n\n.was-validated .form-control:valid, .form-control.is-valid {\n  border-color: #62c462;\n  padding-right: calc(1.5em + 1.5rem);\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%2362c462' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e\");\n  background-repeat: no-repeat;\n  background-position: right calc(0.375em + 0.375rem) center;\n  background-size: calc(0.75em + 0.75rem) calc(0.75em + 0.75rem);\n}\n\n.was-validated .form-control:valid:focus, .form-control.is-valid:focus {\n  border-color: #62c462;\n  box-shadow: 0 0 0 0.25rem rgba(98, 196, 98, 0.25);\n}\n\n.was-validated textarea.form-control:valid, textarea.form-control.is-valid {\n  padding-right: calc(1.5em + 1.5rem);\n  background-position: top calc(0.375em + 0.375rem) right calc(0.375em + 0.375rem);\n}\n\n.was-validated .form-select:valid, .form-select.is-valid {\n  border-color: #62c462;\n}\n\n.was-validated .form-select:valid:not([multiple]):not([size]), .was-validated .form-select:valid:not([multiple])[size=\"1\"], .form-select.is-valid:not([multiple]):not([size]), .form-select.is-valid:not([multiple])[size=\"1\"] {\n  padding-right: 5.5rem;\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%233a3f44' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e\"), url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%2362c462' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e\");\n  background-position: right 1rem center, center right 3rem;\n  background-size: 16px 12px, calc(0.75em + 0.75rem) calc(0.75em + 0.75rem);\n}\n\n.was-validated .form-select:valid:focus, .form-select.is-valid:focus {\n  border-color: #62c462;\n  box-shadow: 0 0 0 0.25rem rgba(98, 196, 98, 0.25);\n}\n\n.was-validated .form-check-input:valid, .form-check-input.is-valid {\n  border-color: #62c462;\n}\n\n.was-validated .form-check-input:valid:checked, .form-check-input.is-valid:checked {\n  background-color: #62c462;\n}\n\n.was-validated .form-check-input:valid:focus, .form-check-input.is-valid:focus {\n  box-shadow: 0 0 0 0.25rem rgba(98, 196, 98, 0.25);\n}\n\n.was-validated .form-check-input:valid ~ .form-check-label, .form-check-input.is-valid ~ .form-check-label {\n  color: #62c462;\n}\n\n.form-check-inline .form-check-input ~ .valid-feedback {\n  margin-left: .5em;\n}\n\n.was-validated .input-group .form-control:valid, .input-group .form-control.is-valid, .was-validated\n.input-group .form-select:valid,\n.input-group .form-select.is-valid {\n  z-index: 1;\n}\n\n.was-validated .input-group .form-control:valid:focus, .input-group .form-control.is-valid:focus, .was-validated\n.input-group .form-select:valid:focus,\n.input-group .form-select.is-valid:focus {\n  z-index: 3;\n}\n\n.invalid-feedback {\n  display: none;\n  width: 100%;\n  margin-top: 0.25rem;\n  font-size: 0.875em;\n  color: #ee5f5b;\n}\n\n.invalid-tooltip {\n  position: absolute;\n  top: 100%;\n  z-index: 5;\n  display: none;\n  max-width: 100%;\n  padding: 0.25rem 0.5rem;\n  margin-top: .1rem;\n  font-size: 0.875rem;\n  color: #fff;\n  background-color: rgba(238, 95, 91, 0.9);\n  border-radius: 0.25rem;\n}\n\n.was-validated :invalid ~ .invalid-feedback,\n.was-validated :invalid ~ .invalid-tooltip,\n.is-invalid ~ .invalid-feedback,\n.is-invalid ~ .invalid-tooltip {\n  display: block;\n}\n\n.was-validated .form-control:invalid, .form-control.is-invalid {\n  border-color: #ee5f5b;\n  padding-right: calc(1.5em + 1.5rem);\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23ee5f5b'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23ee5f5b' stroke='none'/%3e%3c/svg%3e\");\n  background-repeat: no-repeat;\n  background-position: right calc(0.375em + 0.375rem) center;\n  background-size: calc(0.75em + 0.75rem) calc(0.75em + 0.75rem);\n}\n\n.was-validated .form-control:invalid:focus, .form-control.is-invalid:focus {\n  border-color: #ee5f5b;\n  box-shadow: 0 0 0 0.25rem rgba(238, 95, 91, 0.25);\n}\n\n.was-validated textarea.form-control:invalid, textarea.form-control.is-invalid {\n  padding-right: calc(1.5em + 1.5rem);\n  background-position: top calc(0.375em + 0.375rem) right calc(0.375em + 0.375rem);\n}\n\n.was-validated .form-select:invalid, .form-select.is-invalid {\n  border-color: #ee5f5b;\n}\n\n.was-validated .form-select:invalid:not([multiple]):not([size]), .was-validated .form-select:invalid:not([multiple])[size=\"1\"], .form-select.is-invalid:not([multiple]):not([size]), .form-select.is-invalid:not([multiple])[size=\"1\"] {\n  padding-right: 5.5rem;\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%233a3f44' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e\"), url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23ee5f5b'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23ee5f5b' stroke='none'/%3e%3c/svg%3e\");\n  background-position: right 1rem center, center right 3rem;\n  background-size: 16px 12px, calc(0.75em + 0.75rem) calc(0.75em + 0.75rem);\n}\n\n.was-validated .form-select:invalid:focus, .form-select.is-invalid:focus {\n  border-color: #ee5f5b;\n  box-shadow: 0 0 0 0.25rem rgba(238, 95, 91, 0.25);\n}\n\n.was-validated .form-check-input:invalid, .form-check-input.is-invalid {\n  border-color: #ee5f5b;\n}\n\n.was-validated .form-check-input:invalid:checked, .form-check-input.is-invalid:checked {\n  background-color: #ee5f5b;\n}\n\n.was-validated .form-check-input:invalid:focus, .form-check-input.is-invalid:focus {\n  box-shadow: 0 0 0 0.25rem rgba(238, 95, 91, 0.25);\n}\n\n.was-validated .form-check-input:invalid ~ .form-check-label, .form-check-input.is-invalid ~ .form-check-label {\n  color: #ee5f5b;\n}\n\n.form-check-inline .form-check-input ~ .invalid-feedback {\n  margin-left: .5em;\n}\n\n.was-validated .input-group .form-control:invalid, .input-group .form-control.is-invalid, .was-validated\n.input-group .form-select:invalid,\n.input-group .form-select.is-invalid {\n  z-index: 2;\n}\n\n.was-validated .input-group .form-control:invalid:focus, .input-group .form-control.is-invalid:focus, .was-validated\n.input-group .form-select:invalid:focus,\n.input-group .form-select.is-invalid:focus {\n  z-index: 3;\n}\n\n.btn {\n  display: inline-block;\n  font-weight: 400;\n  line-height: 1.5;\n  color: #aaa;\n  text-align: center;\n  text-decoration: none;\n  vertical-align: middle;\n  cursor: pointer;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  user-select: none;\n  background-color: transparent;\n  border: 1px solid transparent;\n  padding: 0.75rem 1rem;\n  font-size: 1rem;\n  border-radius: 0.25rem;\n  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .btn {\n    transition: none;\n  }\n}\n\n.btn:hover {\n  color: #aaa;\n}\n\n.btn-check:focus + .btn, .btn:focus {\n  outline: 0;\n  box-shadow: 0 0 0 0.25rem rgba(58, 63, 68, 0.25);\n}\n\n.btn:disabled, .btn.disabled,\nfieldset:disabled .btn {\n  pointer-events: none;\n  opacity: 0.65;\n}\n\n.btn-primary {\n  color: #fff;\n  background-color: #3a3f44;\n  border-color: #3a3f44;\n}\n\n.btn-primary:hover {\n  color: #fff;\n  background-color: #31363a;\n  border-color: #2e3236;\n}\n\n.btn-check:focus + .btn-primary, .btn-primary:focus {\n  color: #fff;\n  background-color: #31363a;\n  border-color: #2e3236;\n  box-shadow: 0 0 0 0.25rem rgba(88, 92, 96, 0.5);\n}\n\n.btn-check:checked + .btn-primary,\n.btn-check:active + .btn-primary, .btn-primary:active, .btn-primary.active,\n.show > .btn-primary.dropdown-toggle {\n  color: #fff;\n  background-color: #2e3236;\n  border-color: #2c2f33;\n}\n\n.btn-check:checked + .btn-primary:focus,\n.btn-check:active + .btn-primary:focus, .btn-primary:active:focus, .btn-primary.active:focus,\n.show > .btn-primary.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.25rem rgba(88, 92, 96, 0.5);\n}\n\n.btn-primary:disabled, .btn-primary.disabled {\n  color: #fff;\n  background-color: #3a3f44;\n  border-color: #3a3f44;\n}\n\n.btn-secondary {\n  color: #fff;\n  background-color: #7a8288;\n  border-color: #7a8288;\n}\n\n.btn-secondary:hover {\n  color: #fff;\n  background-color: #686f74;\n  border-color: #62686d;\n}\n\n.btn-check:focus + .btn-secondary, .btn-secondary:focus {\n  color: #fff;\n  background-color: #686f74;\n  border-color: #62686d;\n  box-shadow: 0 0 0 0.25rem rgba(142, 149, 154, 0.5);\n}\n\n.btn-check:checked + .btn-secondary,\n.btn-check:active + .btn-secondary, .btn-secondary:active, .btn-secondary.active,\n.show > .btn-secondary.dropdown-toggle {\n  color: #fff;\n  background-color: #62686d;\n  border-color: #5c6266;\n}\n\n.btn-check:checked + .btn-secondary:focus,\n.btn-check:active + .btn-secondary:focus, .btn-secondary:active:focus, .btn-secondary.active:focus,\n.show > .btn-secondary.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.25rem rgba(142, 149, 154, 0.5);\n}\n\n.btn-secondary:disabled, .btn-secondary.disabled {\n  color: #fff;\n  background-color: #7a8288;\n  border-color: #7a8288;\n}\n\n.btn-success {\n  color: #fff;\n  background-color: #62c462;\n  border-color: #62c462;\n}\n\n.btn-success:hover {\n  color: #fff;\n  background-color: #53a753;\n  border-color: #4e9d4e;\n}\n\n.btn-check:focus + .btn-success, .btn-success:focus {\n  color: #fff;\n  background-color: #53a753;\n  border-color: #4e9d4e;\n  box-shadow: 0 0 0 0.25rem rgba(122, 205, 122, 0.5);\n}\n\n.btn-check:checked + .btn-success,\n.btn-check:active + .btn-success, .btn-success:active, .btn-success.active,\n.show > .btn-success.dropdown-toggle {\n  color: #fff;\n  background-color: #4e9d4e;\n  border-color: #4a934a;\n}\n\n.btn-check:checked + .btn-success:focus,\n.btn-check:active + .btn-success:focus, .btn-success:active:focus, .btn-success.active:focus,\n.show > .btn-success.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.25rem rgba(122, 205, 122, 0.5);\n}\n\n.btn-success:disabled, .btn-success.disabled {\n  color: #fff;\n  background-color: #62c462;\n  border-color: #62c462;\n}\n\n.btn-info {\n  color: #fff;\n  background-color: #5bc0de;\n  border-color: #5bc0de;\n}\n\n.btn-info:hover {\n  color: #fff;\n  background-color: #4da3bd;\n  border-color: #499ab2;\n}\n\n.btn-check:focus + .btn-info, .btn-info:focus {\n  color: #fff;\n  background-color: #4da3bd;\n  border-color: #499ab2;\n  box-shadow: 0 0 0 0.25rem rgba(116, 201, 227, 0.5);\n}\n\n.btn-check:checked + .btn-info,\n.btn-check:active + .btn-info, .btn-info:active, .btn-info.active,\n.show > .btn-info.dropdown-toggle {\n  color: #fff;\n  background-color: #499ab2;\n  border-color: #4490a7;\n}\n\n.btn-check:checked + .btn-info:focus,\n.btn-check:active + .btn-info:focus, .btn-info:active:focus, .btn-info.active:focus,\n.show > .btn-info.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.25rem rgba(116, 201, 227, 0.5);\n}\n\n.btn-info:disabled, .btn-info.disabled {\n  color: #fff;\n  background-color: #5bc0de;\n  border-color: #5bc0de;\n}\n\n.btn-warning {\n  color: #fff;\n  background-color: #f89406;\n  border-color: #f89406;\n}\n\n.btn-warning:hover {\n  color: #fff;\n  background-color: #d37e05;\n  border-color: #c67605;\n}\n\n.btn-check:focus + .btn-warning, .btn-warning:focus {\n  color: #fff;\n  background-color: #d37e05;\n  border-color: #c67605;\n  box-shadow: 0 0 0 0.25rem rgba(249, 164, 43, 0.5);\n}\n\n.btn-check:checked + .btn-warning,\n.btn-check:active + .btn-warning, .btn-warning:active, .btn-warning.active,\n.show > .btn-warning.dropdown-toggle {\n  color: #fff;\n  background-color: #c67605;\n  border-color: #ba6f05;\n}\n\n.btn-check:checked + .btn-warning:focus,\n.btn-check:active + .btn-warning:focus, .btn-warning:active:focus, .btn-warning.active:focus,\n.show > .btn-warning.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.25rem rgba(249, 164, 43, 0.5);\n}\n\n.btn-warning:disabled, .btn-warning.disabled {\n  color: #fff;\n  background-color: #f89406;\n  border-color: #f89406;\n}\n\n.btn-danger {\n  color: #fff;\n  background-color: #ee5f5b;\n  border-color: #ee5f5b;\n}\n\n.btn-danger:hover {\n  color: #fff;\n  background-color: #ca514d;\n  border-color: #be4c49;\n}\n\n.btn-check:focus + .btn-danger, .btn-danger:focus {\n  color: #fff;\n  background-color: #ca514d;\n  border-color: #be4c49;\n  box-shadow: 0 0 0 0.25rem rgba(241, 119, 116, 0.5);\n}\n\n.btn-check:checked + .btn-danger,\n.btn-check:active + .btn-danger, .btn-danger:active, .btn-danger.active,\n.show > .btn-danger.dropdown-toggle {\n  color: #fff;\n  background-color: #be4c49;\n  border-color: #b34744;\n}\n\n.btn-check:checked + .btn-danger:focus,\n.btn-check:active + .btn-danger:focus, .btn-danger:active:focus, .btn-danger.active:focus,\n.show > .btn-danger.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.25rem rgba(241, 119, 116, 0.5);\n}\n\n.btn-danger:disabled, .btn-danger.disabled {\n  color: #fff;\n  background-color: #ee5f5b;\n  border-color: #ee5f5b;\n}\n\n.btn-light {\n  color: #000;\n  background-color: #e9ecef;\n  border-color: #e9ecef;\n}\n\n.btn-light:hover {\n  color: #000;\n  background-color: #eceff1;\n  border-color: #ebeef1;\n}\n\n.btn-check:focus + .btn-light, .btn-light:focus {\n  color: #000;\n  background-color: #eceff1;\n  border-color: #ebeef1;\n  box-shadow: 0 0 0 0.25rem rgba(198, 201, 203, 0.5);\n}\n\n.btn-check:checked + .btn-light,\n.btn-check:active + .btn-light, .btn-light:active, .btn-light.active,\n.show > .btn-light.dropdown-toggle {\n  color: #000;\n  background-color: #edf0f2;\n  border-color: #ebeef1;\n}\n\n.btn-check:checked + .btn-light:focus,\n.btn-check:active + .btn-light:focus, .btn-light:active:focus, .btn-light.active:focus,\n.show > .btn-light.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.25rem rgba(198, 201, 203, 0.5);\n}\n\n.btn-light:disabled, .btn-light.disabled {\n  color: #000;\n  background-color: #e9ecef;\n  border-color: #e9ecef;\n}\n\n.btn-dark {\n  color: #fff;\n  background-color: #272b30;\n  border-color: #272b30;\n}\n\n.btn-dark:hover {\n  color: #fff;\n  background-color: #212529;\n  border-color: #1f2226;\n}\n\n.btn-check:focus + .btn-dark, .btn-dark:focus {\n  color: #fff;\n  background-color: #212529;\n  border-color: #1f2226;\n  box-shadow: 0 0 0 0.25rem rgba(71, 75, 79, 0.5);\n}\n\n.btn-check:checked + .btn-dark,\n.btn-check:active + .btn-dark, .btn-dark:active, .btn-dark.active,\n.show > .btn-dark.dropdown-toggle {\n  color: #fff;\n  background-color: #1f2226;\n  border-color: #1d2024;\n}\n\n.btn-check:checked + .btn-dark:focus,\n.btn-check:active + .btn-dark:focus, .btn-dark:active:focus, .btn-dark.active:focus,\n.show > .btn-dark.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.25rem rgba(71, 75, 79, 0.5);\n}\n\n.btn-dark:disabled, .btn-dark.disabled {\n  color: #fff;\n  background-color: #272b30;\n  border-color: #272b30;\n}\n\n.btn-outline-primary {\n  color: #3a3f44;\n  border-color: #3a3f44;\n}\n\n.btn-outline-primary:hover {\n  color: #fff;\n  background-color: #3a3f44;\n  border-color: #3a3f44;\n}\n\n.btn-check:focus + .btn-outline-primary, .btn-outline-primary:focus {\n  box-shadow: 0 0 0 0.25rem rgba(58, 63, 68, 0.5);\n}\n\n.btn-check:checked + .btn-outline-primary,\n.btn-check:active + .btn-outline-primary, .btn-outline-primary:active, .btn-outline-primary.active, .btn-outline-primary.dropdown-toggle.show {\n  color: #fff;\n  background-color: #3a3f44;\n  border-color: #3a3f44;\n}\n\n.btn-check:checked + .btn-outline-primary:focus,\n.btn-check:active + .btn-outline-primary:focus, .btn-outline-primary:active:focus, .btn-outline-primary.active:focus, .btn-outline-primary.dropdown-toggle.show:focus {\n  box-shadow: 0 0 0 0.25rem rgba(58, 63, 68, 0.5);\n}\n\n.btn-outline-primary:disabled, .btn-outline-primary.disabled {\n  color: #3a3f44;\n  background-color: transparent;\n}\n\n.btn-outline-secondary {\n  color: #7a8288;\n  border-color: #7a8288;\n}\n\n.btn-outline-secondary:hover {\n  color: #fff;\n  background-color: #7a8288;\n  border-color: #7a8288;\n}\n\n.btn-check:focus + .btn-outline-secondary, .btn-outline-secondary:focus {\n  box-shadow: 0 0 0 0.25rem rgba(122, 130, 136, 0.5);\n}\n\n.btn-check:checked + .btn-outline-secondary,\n.btn-check:active + .btn-outline-secondary, .btn-outline-secondary:active, .btn-outline-secondary.active, .btn-outline-secondary.dropdown-toggle.show {\n  color: #fff;\n  background-color: #7a8288;\n  border-color: #7a8288;\n}\n\n.btn-check:checked + .btn-outline-secondary:focus,\n.btn-check:active + .btn-outline-secondary:focus, .btn-outline-secondary:active:focus, .btn-outline-secondary.active:focus, .btn-outline-secondary.dropdown-toggle.show:focus {\n  box-shadow: 0 0 0 0.25rem rgba(122, 130, 136, 0.5);\n}\n\n.btn-outline-secondary:disabled, .btn-outline-secondary.disabled {\n  color: #7a8288;\n  background-color: transparent;\n}\n\n.btn-outline-success {\n  color: #62c462;\n  border-color: #62c462;\n}\n\n.btn-outline-success:hover {\n  color: #fff;\n  background-color: #62c462;\n  border-color: #62c462;\n}\n\n.btn-check:focus + .btn-outline-success, .btn-outline-success:focus {\n  box-shadow: 0 0 0 0.25rem rgba(98, 196, 98, 0.5);\n}\n\n.btn-check:checked + .btn-outline-success,\n.btn-check:active + .btn-outline-success, .btn-outline-success:active, .btn-outline-success.active, .btn-outline-success.dropdown-toggle.show {\n  color: #fff;\n  background-color: #62c462;\n  border-color: #62c462;\n}\n\n.btn-check:checked + .btn-outline-success:focus,\n.btn-check:active + .btn-outline-success:focus, .btn-outline-success:active:focus, .btn-outline-success.active:focus, .btn-outline-success.dropdown-toggle.show:focus {\n  box-shadow: 0 0 0 0.25rem rgba(98, 196, 98, 0.5);\n}\n\n.btn-outline-success:disabled, .btn-outline-success.disabled {\n  color: #62c462;\n  background-color: transparent;\n}\n\n.btn-outline-info {\n  color: #5bc0de;\n  border-color: #5bc0de;\n}\n\n.btn-outline-info:hover {\n  color: #fff;\n  background-color: #5bc0de;\n  border-color: #5bc0de;\n}\n\n.btn-check:focus + .btn-outline-info, .btn-outline-info:focus {\n  box-shadow: 0 0 0 0.25rem rgba(91, 192, 222, 0.5);\n}\n\n.btn-check:checked + .btn-outline-info,\n.btn-check:active + .btn-outline-info, .btn-outline-info:active, .btn-outline-info.active, .btn-outline-info.dropdown-toggle.show {\n  color: #fff;\n  background-color: #5bc0de;\n  border-color: #5bc0de;\n}\n\n.btn-check:checked + .btn-outline-info:focus,\n.btn-check:active + .btn-outline-info:focus, .btn-outline-info:active:focus, .btn-outline-info.active:focus, .btn-outline-info.dropdown-toggle.show:focus {\n  box-shadow: 0 0 0 0.25rem rgba(91, 192, 222, 0.5);\n}\n\n.btn-outline-info:disabled, .btn-outline-info.disabled {\n  color: #5bc0de;\n  background-color: transparent;\n}\n\n.btn-outline-warning {\n  color: #f89406;\n  border-color: #f89406;\n}\n\n.btn-outline-warning:hover {\n  color: #fff;\n  background-color: #f89406;\n  border-color: #f89406;\n}\n\n.btn-check:focus + .btn-outline-warning, .btn-outline-warning:focus {\n  box-shadow: 0 0 0 0.25rem rgba(248, 148, 6, 0.5);\n}\n\n.btn-check:checked + .btn-outline-warning,\n.btn-check:active + .btn-outline-warning, .btn-outline-warning:active, .btn-outline-warning.active, .btn-outline-warning.dropdown-toggle.show {\n  color: #fff;\n  background-color: #f89406;\n  border-color: #f89406;\n}\n\n.btn-check:checked + .btn-outline-warning:focus,\n.btn-check:active + .btn-outline-warning:focus, .btn-outline-warning:active:focus, .btn-outline-warning.active:focus, .btn-outline-warning.dropdown-toggle.show:focus {\n  box-shadow: 0 0 0 0.25rem rgba(248, 148, 6, 0.5);\n}\n\n.btn-outline-warning:disabled, .btn-outline-warning.disabled {\n  color: #f89406;\n  background-color: transparent;\n}\n\n.btn-outline-danger {\n  color: #ee5f5b;\n  border-color: #ee5f5b;\n}\n\n.btn-outline-danger:hover {\n  color: #fff;\n  background-color: #ee5f5b;\n  border-color: #ee5f5b;\n}\n\n.btn-check:focus + .btn-outline-danger, .btn-outline-danger:focus {\n  box-shadow: 0 0 0 0.25rem rgba(238, 95, 91, 0.5);\n}\n\n.btn-check:checked + .btn-outline-danger,\n.btn-check:active + .btn-outline-danger, .btn-outline-danger:active, .btn-outline-danger.active, .btn-outline-danger.dropdown-toggle.show {\n  color: #fff;\n  background-color: #ee5f5b;\n  border-color: #ee5f5b;\n}\n\n.btn-check:checked + .btn-outline-danger:focus,\n.btn-check:active + .btn-outline-danger:focus, .btn-outline-danger:active:focus, .btn-outline-danger.active:focus, .btn-outline-danger.dropdown-toggle.show:focus {\n  box-shadow: 0 0 0 0.25rem rgba(238, 95, 91, 0.5);\n}\n\n.btn-outline-danger:disabled, .btn-outline-danger.disabled {\n  color: #ee5f5b;\n  background-color: transparent;\n}\n\n.btn-outline-light {\n  color: #e9ecef;\n  border-color: #e9ecef;\n}\n\n.btn-outline-light:hover {\n  color: #000;\n  background-color: #e9ecef;\n  border-color: #e9ecef;\n}\n\n.btn-check:focus + .btn-outline-light, .btn-outline-light:focus {\n  box-shadow: 0 0 0 0.25rem rgba(233, 236, 239, 0.5);\n}\n\n.btn-check:checked + .btn-outline-light,\n.btn-check:active + .btn-outline-light, .btn-outline-light:active, .btn-outline-light.active, .btn-outline-light.dropdown-toggle.show {\n  color: #000;\n  background-color: #e9ecef;\n  border-color: #e9ecef;\n}\n\n.btn-check:checked + .btn-outline-light:focus,\n.btn-check:active + .btn-outline-light:focus, .btn-outline-light:active:focus, .btn-outline-light.active:focus, .btn-outline-light.dropdown-toggle.show:focus {\n  box-shadow: 0 0 0 0.25rem rgba(233, 236, 239, 0.5);\n}\n\n.btn-outline-light:disabled, .btn-outline-light.disabled {\n  color: #e9ecef;\n  background-color: transparent;\n}\n\n.btn-outline-dark {\n  color: #272b30;\n  border-color: #272b30;\n}\n\n.btn-outline-dark:hover {\n  color: #fff;\n  background-color: #272b30;\n  border-color: #272b30;\n}\n\n.btn-check:focus + .btn-outline-dark, .btn-outline-dark:focus {\n  box-shadow: 0 0 0 0.25rem rgba(39, 43, 48, 0.5);\n}\n\n.btn-check:checked + .btn-outline-dark,\n.btn-check:active + .btn-outline-dark, .btn-outline-dark:active, .btn-outline-dark.active, .btn-outline-dark.dropdown-toggle.show {\n  color: #fff;\n  background-color: #272b30;\n  border-color: #272b30;\n}\n\n.btn-check:checked + .btn-outline-dark:focus,\n.btn-check:active + .btn-outline-dark:focus, .btn-outline-dark:active:focus, .btn-outline-dark.active:focus, .btn-outline-dark.dropdown-toggle.show:focus {\n  box-shadow: 0 0 0 0.25rem rgba(39, 43, 48, 0.5);\n}\n\n.btn-outline-dark:disabled, .btn-outline-dark.disabled {\n  color: #272b30;\n  background-color: transparent;\n}\n\n.btn-link {\n  font-weight: 400;\n  color: #fff;\n  text-decoration: underline;\n}\n\n.btn-link:hover {\n  color: #cccccc;\n}\n\n.btn-link:disabled, .btn-link.disabled {\n  color: #7a8288;\n}\n\n.btn-lg, .btn-group-lg > .btn {\n  padding: 0.5rem 1rem;\n  font-size: 1.25rem;\n  border-radius: 0.3rem;\n}\n\n.btn-sm, .btn-group-sm > .btn {\n  padding: 0.25rem 0.5rem;\n  font-size: 0.875rem;\n  border-radius: 0.2rem;\n}\n\n.fade {\n  transition: opacity 0.15s linear;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .fade {\n    transition: none;\n  }\n}\n\n.fade:not(.show) {\n  opacity: 0;\n}\n\n.collapse:not(.show) {\n  display: none;\n}\n\n.collapsing {\n  height: 0;\n  overflow: hidden;\n  transition: height 0.35s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .collapsing {\n    transition: none;\n  }\n}\n\n.collapsing.collapse-horizontal {\n  width: 0;\n  height: auto;\n  transition: width 0.35s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .collapsing.collapse-horizontal {\n    transition: none;\n  }\n}\n\n.dropup,\n.dropend,\n.dropdown,\n.dropstart {\n  position: relative;\n}\n\n.dropdown-toggle {\n  white-space: nowrap;\n}\n\n.dropdown-toggle::after {\n  display: inline-block;\n  margin-left: 0.255em;\n  vertical-align: 0.255em;\n  content: \"\";\n  border-top: 0.3em solid;\n  border-right: 0.3em solid transparent;\n  border-bottom: 0;\n  border-left: 0.3em solid transparent;\n}\n\n.dropdown-toggle:empty::after {\n  margin-left: 0;\n}\n\n.dropdown-menu {\n  position: absolute;\n  z-index: 1000;\n  display: none;\n  min-width: 10rem;\n  padding: 0.5rem 0;\n  margin: 0;\n  font-size: 1rem;\n  color: #aaa;\n  text-align: left;\n  list-style: none;\n  background-color: #3a3f44;\n  background-clip: padding-box;\n  border: 1px solid rgba(0, 0, 0, 0.6);\n  border-radius: 0.25rem;\n}\n\n.dropdown-menu[data-bs-popper] {\n  top: 100%;\n  left: 0;\n  margin-top: 0.125rem;\n}\n\n.dropdown-menu-start {\n  --bs-position: start;\n}\n\n.dropdown-menu-start[data-bs-popper] {\n  right: auto;\n  left: 0;\n}\n\n.dropdown-menu-end {\n  --bs-position: end;\n}\n\n.dropdown-menu-end[data-bs-popper] {\n  right: 0;\n  left: auto;\n}\n\n@media (min-width: 576px) {\n  .dropdown-menu-sm-start {\n    --bs-position: start;\n  }\n  .dropdown-menu-sm-start[data-bs-popper] {\n    right: auto;\n    left: 0;\n  }\n  .dropdown-menu-sm-end {\n    --bs-position: end;\n  }\n  .dropdown-menu-sm-end[data-bs-popper] {\n    right: 0;\n    left: auto;\n  }\n}\n\n@media (min-width: 768px) {\n  .dropdown-menu-md-start {\n    --bs-position: start;\n  }\n  .dropdown-menu-md-start[data-bs-popper] {\n    right: auto;\n    left: 0;\n  }\n  .dropdown-menu-md-end {\n    --bs-position: end;\n  }\n  .dropdown-menu-md-end[data-bs-popper] {\n    right: 0;\n    left: auto;\n  }\n}\n\n@media (min-width: 992px) {\n  .dropdown-menu-lg-start {\n    --bs-position: start;\n  }\n  .dropdown-menu-lg-start[data-bs-popper] {\n    right: auto;\n    left: 0;\n  }\n  .dropdown-menu-lg-end {\n    --bs-position: end;\n  }\n  .dropdown-menu-lg-end[data-bs-popper] {\n    right: 0;\n    left: auto;\n  }\n}\n\n@media (min-width: 1200px) {\n  .dropdown-menu-xl-start {\n    --bs-position: start;\n  }\n  .dropdown-menu-xl-start[data-bs-popper] {\n    right: auto;\n    left: 0;\n  }\n  .dropdown-menu-xl-end {\n    --bs-position: end;\n  }\n  .dropdown-menu-xl-end[data-bs-popper] {\n    right: 0;\n    left: auto;\n  }\n}\n\n@media (min-width: 1400px) {\n  .dropdown-menu-xxl-start {\n    --bs-position: start;\n  }\n  .dropdown-menu-xxl-start[data-bs-popper] {\n    right: auto;\n    left: 0;\n  }\n  .dropdown-menu-xxl-end {\n    --bs-position: end;\n  }\n  .dropdown-menu-xxl-end[data-bs-popper] {\n    right: 0;\n    left: auto;\n  }\n}\n\n.dropup .dropdown-menu[data-bs-popper] {\n  top: auto;\n  bottom: 100%;\n  margin-top: 0;\n  margin-bottom: 0.125rem;\n}\n\n.dropup .dropdown-toggle::after {\n  display: inline-block;\n  margin-left: 0.255em;\n  vertical-align: 0.255em;\n  content: \"\";\n  border-top: 0;\n  border-right: 0.3em solid transparent;\n  border-bottom: 0.3em solid;\n  border-left: 0.3em solid transparent;\n}\n\n.dropup .dropdown-toggle:empty::after {\n  margin-left: 0;\n}\n\n.dropend .dropdown-menu[data-bs-popper] {\n  top: 0;\n  right: auto;\n  left: 100%;\n  margin-top: 0;\n  margin-left: 0.125rem;\n}\n\n.dropend .dropdown-toggle::after {\n  display: inline-block;\n  margin-left: 0.255em;\n  vertical-align: 0.255em;\n  content: \"\";\n  border-top: 0.3em solid transparent;\n  border-right: 0;\n  border-bottom: 0.3em solid transparent;\n  border-left: 0.3em solid;\n}\n\n.dropend .dropdown-toggle:empty::after {\n  margin-left: 0;\n}\n\n.dropend .dropdown-toggle::after {\n  vertical-align: 0;\n}\n\n.dropstart .dropdown-menu[data-bs-popper] {\n  top: 0;\n  right: 100%;\n  left: auto;\n  margin-top: 0;\n  margin-right: 0.125rem;\n}\n\n.dropstart .dropdown-toggle::after {\n  display: inline-block;\n  margin-left: 0.255em;\n  vertical-align: 0.255em;\n  content: \"\";\n}\n\n.dropstart .dropdown-toggle::after {\n  display: none;\n}\n\n.dropstart .dropdown-toggle::before {\n  display: inline-block;\n  margin-right: 0.255em;\n  vertical-align: 0.255em;\n  content: \"\";\n  border-top: 0.3em solid transparent;\n  border-right: 0.3em solid;\n  border-bottom: 0.3em solid transparent;\n}\n\n.dropstart .dropdown-toggle:empty::after {\n  margin-left: 0;\n}\n\n.dropstart .dropdown-toggle::before {\n  vertical-align: 0;\n}\n\n.dropdown-divider {\n  height: 0;\n  margin: 0.5rem 0;\n  overflow: hidden;\n  border-top: 1px solid rgba(0, 0, 0, 0.15);\n}\n\n.dropdown-item {\n  display: block;\n  width: 100%;\n  padding: 0.25rem 1rem;\n  clear: both;\n  font-weight: 400;\n  color: #aaa;\n  text-align: inherit;\n  text-decoration: none;\n  white-space: nowrap;\n  background-color: transparent;\n  border: 0;\n}\n\n.dropdown-item:hover, .dropdown-item:focus {\n  color: #fff;\n  background-color: #272b30;\n}\n\n.dropdown-item.active, .dropdown-item:active {\n  color: #fff;\n  text-decoration: none;\n  background-color: #272b30;\n}\n\n.dropdown-item.disabled, .dropdown-item:disabled {\n  color: #999;\n  pointer-events: none;\n  background-color: transparent;\n}\n\n.dropdown-menu.show {\n  display: block;\n}\n\n.dropdown-header {\n  display: block;\n  padding: 0.5rem 1rem;\n  margin-bottom: 0;\n  font-size: 0.875rem;\n  color: #7a8288;\n  white-space: nowrap;\n}\n\n.dropdown-item-text {\n  display: block;\n  padding: 0.25rem 1rem;\n  color: #aaa;\n}\n\n.dropdown-menu-dark {\n  color: #dee2e6;\n  background-color: #3a3f44;\n  border-color: rgba(0, 0, 0, 0.6);\n}\n\n.dropdown-menu-dark .dropdown-item {\n  color: #dee2e6;\n}\n\n.dropdown-menu-dark .dropdown-item:hover, .dropdown-menu-dark .dropdown-item:focus {\n  color: #fff;\n  background-color: rgba(255, 255, 255, 0.15);\n}\n\n.dropdown-menu-dark .dropdown-item.active, .dropdown-menu-dark .dropdown-item:active {\n  color: #fff;\n  background-color: #272b30;\n}\n\n.dropdown-menu-dark .dropdown-item.disabled, .dropdown-menu-dark .dropdown-item:disabled {\n  color: #999;\n}\n\n.dropdown-menu-dark .dropdown-divider {\n  border-color: rgba(0, 0, 0, 0.15);\n}\n\n.dropdown-menu-dark .dropdown-item-text {\n  color: #dee2e6;\n}\n\n.dropdown-menu-dark .dropdown-header {\n  color: #999;\n}\n\n.btn-group,\n.btn-group-vertical {\n  position: relative;\n  display: -ms-inline-flexbox;\n  display: inline-flex;\n  vertical-align: middle;\n}\n\n.btn-group > .btn,\n.btn-group-vertical > .btn {\n  position: relative;\n  -ms-flex: 1 1 auto;\n  flex: 1 1 auto;\n}\n\n.btn-group > .btn-check:checked + .btn,\n.btn-group > .btn-check:focus + .btn,\n.btn-group > .btn:hover,\n.btn-group > .btn:focus,\n.btn-group > .btn:active,\n.btn-group > .btn.active,\n.btn-group-vertical > .btn-check:checked + .btn,\n.btn-group-vertical > .btn-check:focus + .btn,\n.btn-group-vertical > .btn:hover,\n.btn-group-vertical > .btn:focus,\n.btn-group-vertical > .btn:active,\n.btn-group-vertical > .btn.active {\n  z-index: 1;\n}\n\n.btn-toolbar {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n  flex-wrap: wrap;\n  -ms-flex-pack: start;\n  justify-content: flex-start;\n}\n\n.btn-toolbar .input-group {\n  width: auto;\n}\n\n.btn-group > .btn:not(:first-child),\n.btn-group > .btn-group:not(:first-child) {\n  margin-left: -1px;\n}\n\n.btn-group > .btn:not(:last-child):not(.dropdown-toggle),\n.btn-group > .btn-group:not(:last-child) > .btn {\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n}\n\n.btn-group > .btn:nth-child(n + 3),\n.btn-group > :not(.btn-check) + .btn,\n.btn-group > .btn-group:not(:first-child) > .btn {\n  border-top-left-radius: 0;\n  border-bottom-left-radius: 0;\n}\n\n.dropdown-toggle-split {\n  padding-right: 0.75rem;\n  padding-left: 0.75rem;\n}\n\n.dropdown-toggle-split::after,\n.dropup .dropdown-toggle-split::after,\n.dropend .dropdown-toggle-split::after {\n  margin-left: 0;\n}\n\n.dropstart .dropdown-toggle-split::before {\n  margin-right: 0;\n}\n\n.btn-sm + .dropdown-toggle-split, .btn-group-sm > .btn + .dropdown-toggle-split {\n  padding-right: 0.375rem;\n  padding-left: 0.375rem;\n}\n\n.btn-lg + .dropdown-toggle-split, .btn-group-lg > .btn + .dropdown-toggle-split {\n  padding-right: 0.75rem;\n  padding-left: 0.75rem;\n}\n\n.btn-group-vertical {\n  -ms-flex-direction: column;\n  flex-direction: column;\n  -ms-flex-align: start;\n  align-items: flex-start;\n  -ms-flex-pack: center;\n  justify-content: center;\n}\n\n.btn-group-vertical > .btn,\n.btn-group-vertical > .btn-group {\n  width: 100%;\n}\n\n.btn-group-vertical > .btn:not(:first-child),\n.btn-group-vertical > .btn-group:not(:first-child) {\n  margin-top: -1px;\n}\n\n.btn-group-vertical > .btn:not(:last-child):not(.dropdown-toggle),\n.btn-group-vertical > .btn-group:not(:last-child) > .btn {\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 0;\n}\n\n.btn-group-vertical > .btn ~ .btn,\n.btn-group-vertical > .btn-group:not(:first-child) > .btn {\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n}\n\n.nav {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n  flex-wrap: wrap;\n  padding-left: 0;\n  margin-bottom: 0;\n  list-style: none;\n}\n\n.nav-link {\n  display: block;\n  padding: 0.5rem 1rem;\n  color: #fff;\n  text-decoration: none;\n  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .nav-link {\n    transition: none;\n  }\n}\n\n.nav-link:hover, .nav-link:focus {\n  color: #cccccc;\n}\n\n.nav-link.disabled {\n  color: #7a8288;\n  pointer-events: none;\n  cursor: default;\n}\n\n.nav-tabs {\n  border-bottom: 1px solid rgba(0, 0, 0, 0.6);\n}\n\n.nav-tabs .nav-link {\n  margin-bottom: -1px;\n  background: none;\n  border: 1px solid transparent;\n  border-top-left-radius: 0.25rem;\n  border-top-right-radius: 0.25rem;\n}\n\n.nav-tabs .nav-link:hover, .nav-tabs .nav-link:focus {\n  border-color: rgba(0, 0, 0, 0.6);\n  isolation: isolate;\n}\n\n.nav-tabs .nav-link.disabled {\n  color: #7a8288;\n  background-color: transparent;\n  border-color: transparent;\n}\n\n.nav-tabs .nav-link.active,\n.nav-tabs .nav-item.show .nav-link {\n  color: #fff;\n  background-color: #272b30;\n  border-color: rgba(0, 0, 0, 0.6);\n}\n\n.nav-tabs .dropdown-menu {\n  margin-top: -1px;\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n}\n\n.nav-pills .nav-link {\n  background: none;\n  border: 0;\n  border-radius: 0.25rem;\n}\n\n.nav-pills .nav-link.active,\n.nav-pills .show > .nav-link {\n  color: #fff;\n  background-color: #3a3f44;\n}\n\n.nav-fill > .nav-link,\n.nav-fill .nav-item {\n  -ms-flex: 1 1 auto;\n  flex: 1 1 auto;\n  text-align: center;\n}\n\n.nav-justified > .nav-link,\n.nav-justified .nav-item {\n  -ms-flex-preferred-size: 0;\n  flex-basis: 0;\n  -ms-flex-positive: 1;\n  flex-grow: 1;\n  text-align: center;\n}\n\n.nav-fill .nav-item .nav-link,\n.nav-justified .nav-item .nav-link {\n  width: 100%;\n}\n\n.tab-content > .tab-pane {\n  display: none;\n}\n\n.tab-content > .active {\n  display: block;\n}\n\n.navbar {\n  position: relative;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n  flex-wrap: wrap;\n  -ms-flex-align: center;\n  align-items: center;\n  -ms-flex-pack: justify;\n  justify-content: space-between;\n  padding-top: 0;\n  padding-bottom: 0;\n}\n\n.navbar > .container,\n.navbar > .container-fluid, .navbar > .container-sm, .navbar > .container-md, .navbar > .container-lg, .navbar > .container-xl, .navbar > .container-xxl {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: inherit;\n  flex-wrap: inherit;\n  -ms-flex-align: center;\n  align-items: center;\n  -ms-flex-pack: justify;\n  justify-content: space-between;\n}\n\n.navbar-brand {\n  padding-top: 0.3125rem;\n  padding-bottom: 0.3125rem;\n  margin-right: 1rem;\n  font-size: 1.25rem;\n  text-decoration: none;\n  white-space: nowrap;\n}\n\n.navbar-nav {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  padding-left: 0;\n  margin-bottom: 0;\n  list-style: none;\n}\n\n.navbar-nav .nav-link {\n  padding-right: 0;\n  padding-left: 0;\n}\n\n.navbar-nav .dropdown-menu {\n  position: static;\n}\n\n.navbar-text {\n  padding-top: 0.5rem;\n  padding-bottom: 0.5rem;\n}\n\n.navbar-collapse {\n  -ms-flex-preferred-size: 100%;\n  flex-basis: 100%;\n  -ms-flex-positive: 1;\n  flex-grow: 1;\n  -ms-flex-align: center;\n  align-items: center;\n}\n\n.navbar-toggler {\n  padding: 0.25rem 0.75rem;\n  font-size: 1.25rem;\n  line-height: 1;\n  background-color: transparent;\n  border: 1px solid transparent;\n  border-radius: 0.25rem;\n  transition: box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .navbar-toggler {\n    transition: none;\n  }\n}\n\n.navbar-toggler:hover {\n  text-decoration: none;\n}\n\n.navbar-toggler:focus {\n  text-decoration: none;\n  outline: 0;\n  box-shadow: 0 0 0 0.25rem;\n}\n\n.navbar-toggler-icon {\n  display: inline-block;\n  width: 1.5em;\n  height: 1.5em;\n  vertical-align: middle;\n  background-repeat: no-repeat;\n  background-position: center;\n  background-size: 100%;\n}\n\n.navbar-nav-scroll {\n  max-height: var(--bs-scroll-height, 75vh);\n  overflow-y: auto;\n}\n\n@media (min-width: 576px) {\n  .navbar-expand-sm {\n    -ms-flex-wrap: nowrap;\n    flex-wrap: nowrap;\n    -ms-flex-pack: start;\n    justify-content: flex-start;\n  }\n  .navbar-expand-sm .navbar-nav {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .navbar-expand-sm .navbar-nav .dropdown-menu {\n    position: absolute;\n  }\n  .navbar-expand-sm .navbar-nav .nav-link {\n    padding-right: 0.5rem;\n    padding-left: 0.5rem;\n  }\n  .navbar-expand-sm .navbar-nav-scroll {\n    overflow: visible;\n  }\n  .navbar-expand-sm .navbar-collapse {\n    display: -ms-flexbox !important;\n    display: flex !important;\n    -ms-flex-preferred-size: auto;\n    flex-basis: auto;\n  }\n  .navbar-expand-sm .navbar-toggler {\n    display: none;\n  }\n  .navbar-expand-sm .offcanvas-header {\n    display: none;\n  }\n  .navbar-expand-sm .offcanvas {\n    position: inherit;\n    bottom: 0;\n    z-index: 1000;\n    -ms-flex-positive: 1;\n    flex-grow: 1;\n    visibility: visible !important;\n    background-color: transparent;\n    border-right: 0;\n    border-left: 0;\n    transition: none;\n    -webkit-transform: none;\n    transform: none;\n  }\n  .navbar-expand-sm .offcanvas-top,\n  .navbar-expand-sm .offcanvas-bottom {\n    height: auto;\n    border-top: 0;\n    border-bottom: 0;\n  }\n  .navbar-expand-sm .offcanvas-body {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-positive: 0;\n    flex-grow: 0;\n    padding: 0;\n    overflow-y: visible;\n  }\n}\n\n@media (min-width: 768px) {\n  .navbar-expand-md {\n    -ms-flex-wrap: nowrap;\n    flex-wrap: nowrap;\n    -ms-flex-pack: start;\n    justify-content: flex-start;\n  }\n  .navbar-expand-md .navbar-nav {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .navbar-expand-md .navbar-nav .dropdown-menu {\n    position: absolute;\n  }\n  .navbar-expand-md .navbar-nav .nav-link {\n    padding-right: 0.5rem;\n    padding-left: 0.5rem;\n  }\n  .navbar-expand-md .navbar-nav-scroll {\n    overflow: visible;\n  }\n  .navbar-expand-md .navbar-collapse {\n    display: -ms-flexbox !important;\n    display: flex !important;\n    -ms-flex-preferred-size: auto;\n    flex-basis: auto;\n  }\n  .navbar-expand-md .navbar-toggler {\n    display: none;\n  }\n  .navbar-expand-md .offcanvas-header {\n    display: none;\n  }\n  .navbar-expand-md .offcanvas {\n    position: inherit;\n    bottom: 0;\n    z-index: 1000;\n    -ms-flex-positive: 1;\n    flex-grow: 1;\n    visibility: visible !important;\n    background-color: transparent;\n    border-right: 0;\n    border-left: 0;\n    transition: none;\n    -webkit-transform: none;\n    transform: none;\n  }\n  .navbar-expand-md .offcanvas-top,\n  .navbar-expand-md .offcanvas-bottom {\n    height: auto;\n    border-top: 0;\n    border-bottom: 0;\n  }\n  .navbar-expand-md .offcanvas-body {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-positive: 0;\n    flex-grow: 0;\n    padding: 0;\n    overflow-y: visible;\n  }\n}\n\n@media (min-width: 992px) {\n  .navbar-expand-lg {\n    -ms-flex-wrap: nowrap;\n    flex-wrap: nowrap;\n    -ms-flex-pack: start;\n    justify-content: flex-start;\n  }\n  .navbar-expand-lg .navbar-nav {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .navbar-expand-lg .navbar-nav .dropdown-menu {\n    position: absolute;\n  }\n  .navbar-expand-lg .navbar-nav .nav-link {\n    padding-right: 0.5rem;\n    padding-left: 0.5rem;\n  }\n  .navbar-expand-lg .navbar-nav-scroll {\n    overflow: visible;\n  }\n  .navbar-expand-lg .navbar-collapse {\n    display: -ms-flexbox !important;\n    display: flex !important;\n    -ms-flex-preferred-size: auto;\n    flex-basis: auto;\n  }\n  .navbar-expand-lg .navbar-toggler {\n    display: none;\n  }\n  .navbar-expand-lg .offcanvas-header {\n    display: none;\n  }\n  .navbar-expand-lg .offcanvas {\n    position: inherit;\n    bottom: 0;\n    z-index: 1000;\n    -ms-flex-positive: 1;\n    flex-grow: 1;\n    visibility: visible !important;\n    background-color: transparent;\n    border-right: 0;\n    border-left: 0;\n    transition: none;\n    -webkit-transform: none;\n    transform: none;\n  }\n  .navbar-expand-lg .offcanvas-top,\n  .navbar-expand-lg .offcanvas-bottom {\n    height: auto;\n    border-top: 0;\n    border-bottom: 0;\n  }\n  .navbar-expand-lg .offcanvas-body {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-positive: 0;\n    flex-grow: 0;\n    padding: 0;\n    overflow-y: visible;\n  }\n}\n\n@media (min-width: 1200px) {\n  .navbar-expand-xl {\n    -ms-flex-wrap: nowrap;\n    flex-wrap: nowrap;\n    -ms-flex-pack: start;\n    justify-content: flex-start;\n  }\n  .navbar-expand-xl .navbar-nav {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .navbar-expand-xl .navbar-nav .dropdown-menu {\n    position: absolute;\n  }\n  .navbar-expand-xl .navbar-nav .nav-link {\n    padding-right: 0.5rem;\n    padding-left: 0.5rem;\n  }\n  .navbar-expand-xl .navbar-nav-scroll {\n    overflow: visible;\n  }\n  .navbar-expand-xl .navbar-collapse {\n    display: -ms-flexbox !important;\n    display: flex !important;\n    -ms-flex-preferred-size: auto;\n    flex-basis: auto;\n  }\n  .navbar-expand-xl .navbar-toggler {\n    display: none;\n  }\n  .navbar-expand-xl .offcanvas-header {\n    display: none;\n  }\n  .navbar-expand-xl .offcanvas {\n    position: inherit;\n    bottom: 0;\n    z-index: 1000;\n    -ms-flex-positive: 1;\n    flex-grow: 1;\n    visibility: visible !important;\n    background-color: transparent;\n    border-right: 0;\n    border-left: 0;\n    transition: none;\n    -webkit-transform: none;\n    transform: none;\n  }\n  .navbar-expand-xl .offcanvas-top,\n  .navbar-expand-xl .offcanvas-bottom {\n    height: auto;\n    border-top: 0;\n    border-bottom: 0;\n  }\n  .navbar-expand-xl .offcanvas-body {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-positive: 0;\n    flex-grow: 0;\n    padding: 0;\n    overflow-y: visible;\n  }\n}\n\n@media (min-width: 1400px) {\n  .navbar-expand-xxl {\n    -ms-flex-wrap: nowrap;\n    flex-wrap: nowrap;\n    -ms-flex-pack: start;\n    justify-content: flex-start;\n  }\n  .navbar-expand-xxl .navbar-nav {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .navbar-expand-xxl .navbar-nav .dropdown-menu {\n    position: absolute;\n  }\n  .navbar-expand-xxl .navbar-nav .nav-link {\n    padding-right: 0.5rem;\n    padding-left: 0.5rem;\n  }\n  .navbar-expand-xxl .navbar-nav-scroll {\n    overflow: visible;\n  }\n  .navbar-expand-xxl .navbar-collapse {\n    display: -ms-flexbox !important;\n    display: flex !important;\n    -ms-flex-preferred-size: auto;\n    flex-basis: auto;\n  }\n  .navbar-expand-xxl .navbar-toggler {\n    display: none;\n  }\n  .navbar-expand-xxl .offcanvas-header {\n    display: none;\n  }\n  .navbar-expand-xxl .offcanvas {\n    position: inherit;\n    bottom: 0;\n    z-index: 1000;\n    -ms-flex-positive: 1;\n    flex-grow: 1;\n    visibility: visible !important;\n    background-color: transparent;\n    border-right: 0;\n    border-left: 0;\n    transition: none;\n    -webkit-transform: none;\n    transform: none;\n  }\n  .navbar-expand-xxl .offcanvas-top,\n  .navbar-expand-xxl .offcanvas-bottom {\n    height: auto;\n    border-top: 0;\n    border-bottom: 0;\n  }\n  .navbar-expand-xxl .offcanvas-body {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-positive: 0;\n    flex-grow: 0;\n    padding: 0;\n    overflow-y: visible;\n  }\n}\n\n.navbar-expand {\n  -ms-flex-wrap: nowrap;\n  flex-wrap: nowrap;\n  -ms-flex-pack: start;\n  justify-content: flex-start;\n}\n\n.navbar-expand .navbar-nav {\n  -ms-flex-direction: row;\n  flex-direction: row;\n}\n\n.navbar-expand .navbar-nav .dropdown-menu {\n  position: absolute;\n}\n\n.navbar-expand .navbar-nav .nav-link {\n  padding-right: 0.5rem;\n  padding-left: 0.5rem;\n}\n\n.navbar-expand .navbar-nav-scroll {\n  overflow: visible;\n}\n\n.navbar-expand .navbar-collapse {\n  display: -ms-flexbox !important;\n  display: flex !important;\n  -ms-flex-preferred-size: auto;\n  flex-basis: auto;\n}\n\n.navbar-expand .navbar-toggler {\n  display: none;\n}\n\n.navbar-expand .offcanvas-header {\n  display: none;\n}\n\n.navbar-expand .offcanvas {\n  position: inherit;\n  bottom: 0;\n  z-index: 1000;\n  -ms-flex-positive: 1;\n  flex-grow: 1;\n  visibility: visible !important;\n  background-color: transparent;\n  border-right: 0;\n  border-left: 0;\n  transition: none;\n  -webkit-transform: none;\n  transform: none;\n}\n\n.navbar-expand .offcanvas-top,\n.navbar-expand .offcanvas-bottom {\n  height: auto;\n  border-top: 0;\n  border-bottom: 0;\n}\n\n.navbar-expand .offcanvas-body {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-positive: 0;\n  flex-grow: 0;\n  padding: 0;\n  overflow-y: visible;\n}\n\n.navbar-light .navbar-brand {\n  color: #3a3f44;\n}\n\n.navbar-light .navbar-brand:hover, .navbar-light .navbar-brand:focus {\n  color: #3a3f44;\n}\n\n.navbar-light .navbar-nav .nav-link {\n  color: rgba(0, 0, 0, 0.55);\n}\n\n.navbar-light .navbar-nav .nav-link:hover, .navbar-light .navbar-nav .nav-link:focus {\n  color: #3a3f44;\n}\n\n.navbar-light .navbar-nav .nav-link.disabled {\n  color: rgba(0, 0, 0, 0.3);\n}\n\n.navbar-light .navbar-nav .show > .nav-link,\n.navbar-light .navbar-nav .nav-link.active {\n  color: #3a3f44;\n}\n\n.navbar-light .navbar-toggler {\n  color: rgba(0, 0, 0, 0.55);\n  border-color: rgba(0, 0, 0, 0.1);\n}\n\n.navbar-light .navbar-toggler-icon {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%280, 0, 0, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e\");\n}\n\n.navbar-light .navbar-text {\n  color: rgba(0, 0, 0, 0.55);\n}\n\n.navbar-light .navbar-text a,\n.navbar-light .navbar-text a:hover,\n.navbar-light .navbar-text a:focus {\n  color: #3a3f44;\n}\n\n.navbar-dark .navbar-brand {\n  color: #fff;\n}\n\n.navbar-dark .navbar-brand:hover, .navbar-dark .navbar-brand:focus {\n  color: #fff;\n}\n\n.navbar-dark .navbar-nav .nav-link {\n  color: rgba(255, 255, 255, 0.55);\n}\n\n.navbar-dark .navbar-nav .nav-link:hover, .navbar-dark .navbar-nav .nav-link:focus {\n  color: #fff;\n}\n\n.navbar-dark .navbar-nav .nav-link.disabled {\n  color: rgba(255, 255, 255, 0.25);\n}\n\n.navbar-dark .navbar-nav .show > .nav-link,\n.navbar-dark .navbar-nav .nav-link.active {\n  color: #fff;\n}\n\n.navbar-dark .navbar-toggler {\n  color: rgba(255, 255, 255, 0.55);\n  border-color: rgba(255, 255, 255, 0.1);\n}\n\n.navbar-dark .navbar-toggler-icon {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e\");\n}\n\n.navbar-dark .navbar-text {\n  color: rgba(255, 255, 255, 0.55);\n}\n\n.navbar-dark .navbar-text a,\n.navbar-dark .navbar-text a:hover,\n.navbar-dark .navbar-text a:focus {\n  color: #fff;\n}\n\n.card {\n  position: relative;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  min-width: 0;\n  word-wrap: break-word;\n  background-color: #32383e;\n  background-clip: border-box;\n  border: 1px solid rgba(0, 0, 0, 0.6);\n  border-radius: 0.25rem;\n}\n\n.card > hr {\n  margin-right: 0;\n  margin-left: 0;\n}\n\n.card > .list-group {\n  border-top: inherit;\n  border-bottom: inherit;\n}\n\n.card > .list-group:first-child {\n  border-top-width: 0;\n  border-top-left-radius: calc(0.25rem - 1px);\n  border-top-right-radius: calc(0.25rem - 1px);\n}\n\n.card > .list-group:last-child {\n  border-bottom-width: 0;\n  border-bottom-right-radius: calc(0.25rem - 1px);\n  border-bottom-left-radius: calc(0.25rem - 1px);\n}\n\n.card > .card-header + .list-group,\n.card > .list-group + .card-footer {\n  border-top: 0;\n}\n\n.card-body {\n  -ms-flex: 1 1 auto;\n  flex: 1 1 auto;\n  padding: 1rem 1rem;\n}\n\n.card-title {\n  margin-bottom: 0.5rem;\n}\n\n.card-subtitle {\n  margin-top: -0.25rem;\n  margin-bottom: 0;\n}\n\n.card-text:last-child {\n  margin-bottom: 0;\n}\n\n.card-link + .card-link {\n  margin-left: 1rem;\n}\n\n.card-header {\n  padding: 0.5rem 1rem;\n  margin-bottom: 0;\n  background-color: #515960;\n  border-bottom: 1px solid rgba(0, 0, 0, 0.6);\n}\n\n.card-header:first-child {\n  border-radius: calc(0.25rem - 1px) calc(0.25rem - 1px) 0 0;\n}\n\n.card-footer {\n  padding: 0.5rem 1rem;\n  background-color: #515960;\n  border-top: 1px solid rgba(0, 0, 0, 0.6);\n}\n\n.card-footer:last-child {\n  border-radius: 0 0 calc(0.25rem - 1px) calc(0.25rem - 1px);\n}\n\n.card-header-tabs {\n  margin-right: -0.5rem;\n  margin-bottom: -0.5rem;\n  margin-left: -0.5rem;\n  border-bottom: 0;\n}\n\n.card-header-tabs .nav-link.active {\n  background-color: #32383e;\n  border-bottom-color: #32383e;\n}\n\n.card-header-pills {\n  margin-right: -0.5rem;\n  margin-left: -0.5rem;\n}\n\n.card-img-overlay {\n  position: absolute;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  padding: 1rem;\n  border-radius: calc(0.25rem - 1px);\n}\n\n.card-img,\n.card-img-top,\n.card-img-bottom {\n  width: 100%;\n}\n\n.card-img,\n.card-img-top {\n  border-top-left-radius: calc(0.25rem - 1px);\n  border-top-right-radius: calc(0.25rem - 1px);\n}\n\n.card-img,\n.card-img-bottom {\n  border-bottom-right-radius: calc(0.25rem - 1px);\n  border-bottom-left-radius: calc(0.25rem - 1px);\n}\n\n.card-group > .card {\n  margin-bottom: 0.75rem;\n}\n\n@media (min-width: 576px) {\n  .card-group {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-flow: row wrap;\n    flex-flow: row wrap;\n  }\n  .card-group > .card {\n    -ms-flex: 1 0 0%;\n    flex: 1 0 0%;\n    margin-bottom: 0;\n  }\n  .card-group > .card + .card {\n    margin-left: 0;\n    border-left: 0;\n  }\n  .card-group > .card:not(:last-child) {\n    border-top-right-radius: 0;\n    border-bottom-right-radius: 0;\n  }\n  .card-group > .card:not(:last-child) .card-img-top,\n  .card-group > .card:not(:last-child) .card-header {\n    border-top-right-radius: 0;\n  }\n  .card-group > .card:not(:last-child) .card-img-bottom,\n  .card-group > .card:not(:last-child) .card-footer {\n    border-bottom-right-radius: 0;\n  }\n  .card-group > .card:not(:first-child) {\n    border-top-left-radius: 0;\n    border-bottom-left-radius: 0;\n  }\n  .card-group > .card:not(:first-child) .card-img-top,\n  .card-group > .card:not(:first-child) .card-header {\n    border-top-left-radius: 0;\n  }\n  .card-group > .card:not(:first-child) .card-img-bottom,\n  .card-group > .card:not(:first-child) .card-footer {\n    border-bottom-left-radius: 0;\n  }\n}\n\n.accordion-button {\n  position: relative;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-align: center;\n  align-items: center;\n  width: 100%;\n  padding: 1rem 1.25rem;\n  font-size: 1rem;\n  color: #aaa;\n  text-align: left;\n  background-color: #272b30;\n  border: 0;\n  border-radius: 0;\n  overflow-anchor: none;\n  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, border-radius 0.15s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .accordion-button {\n    transition: none;\n  }\n}\n\n.accordion-button:not(.collapsed) {\n  color: #34393d;\n  background-color: #ebecec;\n  box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.125);\n}\n\n.accordion-button:not(.collapsed)::after {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%2334393d'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e\");\n  -webkit-transform: rotate(-180deg);\n  transform: rotate(-180deg);\n}\n\n.accordion-button::after {\n  -ms-flex-negative: 0;\n  flex-shrink: 0;\n  width: 1.25rem;\n  height: 1.25rem;\n  margin-left: auto;\n  content: \"\";\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23aaa'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e\");\n  background-repeat: no-repeat;\n  background-size: 1.25rem;\n  transition: -webkit-transform 0.2s ease-in-out;\n  transition: transform 0.2s ease-in-out;\n  transition: transform 0.2s ease-in-out, -webkit-transform 0.2s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .accordion-button::after {\n    transition: none;\n  }\n}\n\n.accordion-button:hover {\n  z-index: 2;\n}\n\n.accordion-button:focus {\n  z-index: 3;\n  border-color: #9d9fa2;\n  outline: 0;\n  box-shadow: 0 0 0 0.25rem rgba(58, 63, 68, 0.25);\n}\n\n.accordion-header {\n  margin-bottom: 0;\n}\n\n.accordion-item {\n  background-color: #272b30;\n  border: 1px solid rgba(0, 0, 0, 0.125);\n}\n\n.accordion-item:first-of-type {\n  border-top-left-radius: 0.25rem;\n  border-top-right-radius: 0.25rem;\n}\n\n.accordion-item:first-of-type .accordion-button {\n  border-top-left-radius: calc(0.25rem - 1px);\n  border-top-right-radius: calc(0.25rem - 1px);\n}\n\n.accordion-item:not(:first-of-type) {\n  border-top: 0;\n}\n\n.accordion-item:last-of-type {\n  border-bottom-right-radius: 0.25rem;\n  border-bottom-left-radius: 0.25rem;\n}\n\n.accordion-item:last-of-type .accordion-button.collapsed {\n  border-bottom-right-radius: calc(0.25rem - 1px);\n  border-bottom-left-radius: calc(0.25rem - 1px);\n}\n\n.accordion-item:last-of-type .accordion-collapse {\n  border-bottom-right-radius: 0.25rem;\n  border-bottom-left-radius: 0.25rem;\n}\n\n.accordion-body {\n  padding: 1rem 1.25rem;\n}\n\n.accordion-flush .accordion-collapse {\n  border-width: 0;\n}\n\n.accordion-flush .accordion-item {\n  border-right: 0;\n  border-left: 0;\n  border-radius: 0;\n}\n\n.accordion-flush .accordion-item:first-child {\n  border-top: 0;\n}\n\n.accordion-flush .accordion-item:last-child {\n  border-bottom: 0;\n}\n\n.accordion-flush .accordion-item .accordion-button {\n  border-radius: 0;\n}\n\n.breadcrumb {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n  flex-wrap: wrap;\n  padding: 0.375rem 0.75rem;\n  margin-bottom: 1rem;\n  list-style: none;\n  border-radius: 0.25rem;\n}\n\n.breadcrumb-item + .breadcrumb-item {\n  padding-left: 0.5rem;\n}\n\n.breadcrumb-item + .breadcrumb-item::before {\n  float: left;\n  padding-right: 0.5rem;\n  color: #7a8288;\n  content: var(--bs-breadcrumb-divider, \"/\") /* rtl: var(--bs-breadcrumb-divider, \"/\") */;\n}\n\n.breadcrumb-item.active {\n  color: #999;\n}\n\n.pagination {\n  display: -ms-flexbox;\n  display: flex;\n  padding-left: 0;\n  list-style: none;\n}\n\n.page-link {\n  position: relative;\n  display: block;\n  color: #fff;\n  text-decoration: none;\n  background-color: transparent;\n  border: 1px solid rgba(0, 0, 0, 0.6);\n  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .page-link {\n    transition: none;\n  }\n}\n\n.page-link:hover {\n  z-index: 2;\n  color: #fff;\n  background-color: transparent;\n  border-color: rgba(0, 0, 0, 0.6);\n}\n\n.page-link:focus {\n  z-index: 3;\n  color: #cccccc;\n  background-color: #e9ecef;\n  outline: 0;\n  box-shadow: 0 0 0 0.25rem rgba(58, 63, 68, 0.25);\n}\n\n.page-item:not(:first-child) .page-link {\n  margin-left: -1px;\n}\n\n.page-item.active .page-link {\n  z-index: 3;\n  color: #fff;\n  background-color: transparent;\n  border-color: rgba(0, 0, 0, 0.6);\n}\n\n.page-item.disabled .page-link {\n  color: #7a8288;\n  pointer-events: none;\n  background-color: transparent;\n  border-color: rgba(0, 0, 0, 0.6);\n}\n\n.page-link {\n  padding: 0.375rem 0.75rem;\n}\n\n.page-item:first-child .page-link {\n  border-top-left-radius: 0.25rem;\n  border-bottom-left-radius: 0.25rem;\n}\n\n.page-item:last-child .page-link {\n  border-top-right-radius: 0.25rem;\n  border-bottom-right-radius: 0.25rem;\n}\n\n.pagination-lg .page-link {\n  padding: 0.75rem 1.5rem;\n  font-size: 1.25rem;\n}\n\n.pagination-lg .page-item:first-child .page-link {\n  border-top-left-radius: 0.3rem;\n  border-bottom-left-radius: 0.3rem;\n}\n\n.pagination-lg .page-item:last-child .page-link {\n  border-top-right-radius: 0.3rem;\n  border-bottom-right-radius: 0.3rem;\n}\n\n.pagination-sm .page-link {\n  padding: 0.25rem 0.5rem;\n  font-size: 0.875rem;\n}\n\n.pagination-sm .page-item:first-child .page-link {\n  border-top-left-radius: 0.2rem;\n  border-bottom-left-radius: 0.2rem;\n}\n\n.pagination-sm .page-item:last-child .page-link {\n  border-top-right-radius: 0.2rem;\n  border-bottom-right-radius: 0.2rem;\n}\n\n.badge {\n  display: inline-block;\n  padding: 0.35em 0.65em;\n  font-size: 0.75em;\n  font-weight: 700;\n  line-height: 1;\n  color: #fff;\n  text-align: center;\n  white-space: nowrap;\n  vertical-align: baseline;\n  border-radius: 0.25rem;\n}\n\n.badge:empty {\n  display: none;\n}\n\n.btn .badge {\n  position: relative;\n  top: -1px;\n}\n\n.alert {\n  position: relative;\n  padding: 1rem 1rem;\n  margin-bottom: 1rem;\n  border: 1px solid transparent;\n  border-radius: 0.25rem;\n}\n\n.alert-heading {\n  color: inherit;\n}\n\n.alert-link {\n  font-weight: 700;\n}\n\n.alert-dismissible {\n  padding-right: 3rem;\n}\n\n.alert-dismissible .btn-close {\n  position: absolute;\n  top: 0;\n  right: 0;\n  z-index: 2;\n  padding: 1.25rem 1rem;\n}\n\n.alert-primary {\n  color: #232629;\n  background-color: #d8d9da;\n  border-color: #c4c5c7;\n}\n\n.alert-primary .alert-link {\n  color: #1c1e21;\n}\n\n.alert-secondary {\n  color: #494e52;\n  background-color: #e4e6e7;\n  border-color: #d7dadb;\n}\n\n.alert-secondary .alert-link {\n  color: #3a3e42;\n}\n\n.alert-success {\n  color: #3b763b;\n  background-color: #e0f3e0;\n  border-color: #d0edd0;\n}\n\n.alert-success .alert-link {\n  color: #2f5e2f;\n}\n\n.alert-info {\n  color: #377385;\n  background-color: #def2f8;\n  border-color: #ceecf5;\n}\n\n.alert-info .alert-link {\n  color: #2c5c6a;\n}\n\n.alert-warning {\n  color: #955904;\n  background-color: #feeacd;\n  border-color: #fddfb4;\n}\n\n.alert-warning .alert-link {\n  color: #774703;\n}\n\n.alert-danger {\n  color: #8f3937;\n  background-color: #fcdfde;\n  border-color: #facfce;\n}\n\n.alert-danger .alert-link {\n  color: #722e2c;\n}\n\n.alert-light {\n  color: #8c8e8f;\n  background-color: #fbfbfc;\n  border-color: #f8f9fa;\n}\n\n.alert-light .alert-link {\n  color: #707272;\n}\n\n.alert-dark {\n  color: #171a1d;\n  background-color: #d4d5d6;\n  border-color: #bebfc1;\n}\n\n.alert-dark .alert-link {\n  color: #121517;\n}\n\n@-webkit-keyframes progress-bar-stripes {\n  0% {\n    background-position-x: 1rem;\n  }\n}\n\n@keyframes progress-bar-stripes {\n  0% {\n    background-position-x: 1rem;\n  }\n}\n\n.progress {\n  display: -ms-flexbox;\n  display: flex;\n  height: 1rem;\n  overflow: hidden;\n  font-size: 0.75rem;\n  background-color: #1c1e22;\n  border-radius: 0.25rem;\n}\n\n.progress-bar {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  -ms-flex-pack: center;\n  justify-content: center;\n  overflow: hidden;\n  color: #7a8288;\n  text-align: center;\n  white-space: nowrap;\n  background-color: #3a3f44;\n  transition: width 0.6s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .progress-bar {\n    transition: none;\n  }\n}\n\n.progress-bar-striped {\n  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-size: 1rem 1rem;\n}\n\n.progress-bar-animated {\n  -webkit-animation: 1s linear infinite progress-bar-stripes;\n  animation: 1s linear infinite progress-bar-stripes;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .progress-bar-animated {\n    -webkit-animation: none;\n    animation: none;\n  }\n}\n\n.list-group {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  padding-left: 0;\n  margin-bottom: 0;\n  border-radius: 0.25rem;\n}\n\n.list-group-numbered {\n  list-style-type: none;\n  counter-reset: section;\n}\n\n.list-group-numbered > li::before {\n  content: counters(section, \".\") \". \";\n  counter-increment: section;\n}\n\n.list-group-item-action {\n  width: 100%;\n  color: #fff;\n  text-align: inherit;\n}\n\n.list-group-item-action:hover, .list-group-item-action:focus {\n  z-index: 1;\n  color: #fff;\n  text-decoration: none;\n  background-color: #3e444c;\n}\n\n.list-group-item-action:active {\n  color: #aaa;\n  background-color: #e9ecef;\n}\n\n.list-group-item {\n  position: relative;\n  display: block;\n  padding: 0.5rem 1rem;\n  color: #fff;\n  text-decoration: none;\n  background-color: #32383e;\n  border: 1px solid rgba(0, 0, 0, 0.6);\n}\n\n.list-group-item:first-child {\n  border-top-left-radius: inherit;\n  border-top-right-radius: inherit;\n}\n\n.list-group-item:last-child {\n  border-bottom-right-radius: inherit;\n  border-bottom-left-radius: inherit;\n}\n\n.list-group-item.disabled, .list-group-item:disabled {\n  color: #52575c;\n  pointer-events: none;\n  background-color: #32383e;\n}\n\n.list-group-item.active {\n  z-index: 2;\n  color: #fff;\n  background-color: #3e444c;\n  border-color: rgba(0, 0, 0, 0.6);\n}\n\n.list-group-item + .list-group-item {\n  border-top-width: 0;\n}\n\n.list-group-item + .list-group-item.active {\n  margin-top: -1px;\n  border-top-width: 1px;\n}\n\n.list-group-horizontal {\n  -ms-flex-direction: row;\n  flex-direction: row;\n}\n\n.list-group-horizontal > .list-group-item:first-child {\n  border-bottom-left-radius: 0.25rem;\n  border-top-right-radius: 0;\n}\n\n.list-group-horizontal > .list-group-item:last-child {\n  border-top-right-radius: 0.25rem;\n  border-bottom-left-radius: 0;\n}\n\n.list-group-horizontal > .list-group-item.active {\n  margin-top: 0;\n}\n\n.list-group-horizontal > .list-group-item + .list-group-item {\n  border-top-width: 1px;\n  border-left-width: 0;\n}\n\n.list-group-horizontal > .list-group-item + .list-group-item.active {\n  margin-left: -1px;\n  border-left-width: 1px;\n}\n\n@media (min-width: 576px) {\n  .list-group-horizontal-sm {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .list-group-horizontal-sm > .list-group-item:first-child {\n    border-bottom-left-radius: 0.25rem;\n    border-top-right-radius: 0;\n  }\n  .list-group-horizontal-sm > .list-group-item:last-child {\n    border-top-right-radius: 0.25rem;\n    border-bottom-left-radius: 0;\n  }\n  .list-group-horizontal-sm > .list-group-item.active {\n    margin-top: 0;\n  }\n  .list-group-horizontal-sm > .list-group-item + .list-group-item {\n    border-top-width: 1px;\n    border-left-width: 0;\n  }\n  .list-group-horizontal-sm > .list-group-item + .list-group-item.active {\n    margin-left: -1px;\n    border-left-width: 1px;\n  }\n}\n\n@media (min-width: 768px) {\n  .list-group-horizontal-md {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .list-group-horizontal-md > .list-group-item:first-child {\n    border-bottom-left-radius: 0.25rem;\n    border-top-right-radius: 0;\n  }\n  .list-group-horizontal-md > .list-group-item:last-child {\n    border-top-right-radius: 0.25rem;\n    border-bottom-left-radius: 0;\n  }\n  .list-group-horizontal-md > .list-group-item.active {\n    margin-top: 0;\n  }\n  .list-group-horizontal-md > .list-group-item + .list-group-item {\n    border-top-width: 1px;\n    border-left-width: 0;\n  }\n  .list-group-horizontal-md > .list-group-item + .list-group-item.active {\n    margin-left: -1px;\n    border-left-width: 1px;\n  }\n}\n\n@media (min-width: 992px) {\n  .list-group-horizontal-lg {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .list-group-horizontal-lg > .list-group-item:first-child {\n    border-bottom-left-radius: 0.25rem;\n    border-top-right-radius: 0;\n  }\n  .list-group-horizontal-lg > .list-group-item:last-child {\n    border-top-right-radius: 0.25rem;\n    border-bottom-left-radius: 0;\n  }\n  .list-group-horizontal-lg > .list-group-item.active {\n    margin-top: 0;\n  }\n  .list-group-horizontal-lg > .list-group-item + .list-group-item {\n    border-top-width: 1px;\n    border-left-width: 0;\n  }\n  .list-group-horizontal-lg > .list-group-item + .list-group-item.active {\n    margin-left: -1px;\n    border-left-width: 1px;\n  }\n}\n\n@media (min-width: 1200px) {\n  .list-group-horizontal-xl {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .list-group-horizontal-xl > .list-group-item:first-child {\n    border-bottom-left-radius: 0.25rem;\n    border-top-right-radius: 0;\n  }\n  .list-group-horizontal-xl > .list-group-item:last-child {\n    border-top-right-radius: 0.25rem;\n    border-bottom-left-radius: 0;\n  }\n  .list-group-horizontal-xl > .list-group-item.active {\n    margin-top: 0;\n  }\n  .list-group-horizontal-xl > .list-group-item + .list-group-item {\n    border-top-width: 1px;\n    border-left-width: 0;\n  }\n  .list-group-horizontal-xl > .list-group-item + .list-group-item.active {\n    margin-left: -1px;\n    border-left-width: 1px;\n  }\n}\n\n@media (min-width: 1400px) {\n  .list-group-horizontal-xxl {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .list-group-horizontal-xxl > .list-group-item:first-child {\n    border-bottom-left-radius: 0.25rem;\n    border-top-right-radius: 0;\n  }\n  .list-group-horizontal-xxl > .list-group-item:last-child {\n    border-top-right-radius: 0.25rem;\n    border-bottom-left-radius: 0;\n  }\n  .list-group-horizontal-xxl > .list-group-item.active {\n    margin-top: 0;\n  }\n  .list-group-horizontal-xxl > .list-group-item + .list-group-item {\n    border-top-width: 1px;\n    border-left-width: 0;\n  }\n  .list-group-horizontal-xxl > .list-group-item + .list-group-item.active {\n    margin-left: -1px;\n    border-left-width: 1px;\n  }\n}\n\n.list-group-flush {\n  border-radius: 0;\n}\n\n.list-group-flush > .list-group-item {\n  border-width: 0 0 1px;\n}\n\n.list-group-flush > .list-group-item:last-child {\n  border-bottom-width: 0;\n}\n\n.list-group-item-primary {\n  color: #232629;\n  background-color: #d8d9da;\n}\n\n.list-group-item-primary.list-group-item-action:hover, .list-group-item-primary.list-group-item-action:focus {\n  color: #232629;\n  background-color: #c2c3c4;\n}\n\n.list-group-item-primary.list-group-item-action.active {\n  color: #fff;\n  background-color: #232629;\n  border-color: #232629;\n}\n\n.list-group-item-secondary {\n  color: #494e52;\n  background-color: #e4e6e7;\n}\n\n.list-group-item-secondary.list-group-item-action:hover, .list-group-item-secondary.list-group-item-action:focus {\n  color: #494e52;\n  background-color: #cdcfd0;\n}\n\n.list-group-item-secondary.list-group-item-action.active {\n  color: #fff;\n  background-color: #494e52;\n  border-color: #494e52;\n}\n\n.list-group-item-success {\n  color: #3b763b;\n  background-color: #e0f3e0;\n}\n\n.list-group-item-success.list-group-item-action:hover, .list-group-item-success.list-group-item-action:focus {\n  color: #3b763b;\n  background-color: #cadbca;\n}\n\n.list-group-item-success.list-group-item-action.active {\n  color: #fff;\n  background-color: #3b763b;\n  border-color: #3b763b;\n}\n\n.list-group-item-info {\n  color: #377385;\n  background-color: #def2f8;\n}\n\n.list-group-item-info.list-group-item-action:hover, .list-group-item-info.list-group-item-action:focus {\n  color: #377385;\n  background-color: #c8dadf;\n}\n\n.list-group-item-info.list-group-item-action.active {\n  color: #fff;\n  background-color: #377385;\n  border-color: #377385;\n}\n\n.list-group-item-warning {\n  color: #955904;\n  background-color: #feeacd;\n}\n\n.list-group-item-warning.list-group-item-action:hover, .list-group-item-warning.list-group-item-action:focus {\n  color: #955904;\n  background-color: #e5d3b9;\n}\n\n.list-group-item-warning.list-group-item-action.active {\n  color: #fff;\n  background-color: #955904;\n  border-color: #955904;\n}\n\n.list-group-item-danger {\n  color: #8f3937;\n  background-color: #fcdfde;\n}\n\n.list-group-item-danger.list-group-item-action:hover, .list-group-item-danger.list-group-item-action:focus {\n  color: #8f3937;\n  background-color: #e3c9c8;\n}\n\n.list-group-item-danger.list-group-item-action.active {\n  color: #fff;\n  background-color: #8f3937;\n  border-color: #8f3937;\n}\n\n.list-group-item-light {\n  color: #8c8e8f;\n  background-color: #fbfbfc;\n}\n\n.list-group-item-light.list-group-item-action:hover, .list-group-item-light.list-group-item-action:focus {\n  color: #8c8e8f;\n  background-color: #e2e2e3;\n}\n\n.list-group-item-light.list-group-item-action.active {\n  color: #fff;\n  background-color: #8c8e8f;\n  border-color: #8c8e8f;\n}\n\n.list-group-item-dark {\n  color: #171a1d;\n  background-color: #d4d5d6;\n}\n\n.list-group-item-dark.list-group-item-action:hover, .list-group-item-dark.list-group-item-action:focus {\n  color: #171a1d;\n  background-color: #bfc0c1;\n}\n\n.list-group-item-dark.list-group-item-action.active {\n  color: #fff;\n  background-color: #171a1d;\n  border-color: #171a1d;\n}\n\n.btn-close {\n  box-sizing: content-box;\n  width: 1em;\n  height: 1em;\n  padding: 0.25em 0.25em;\n  color: #000;\n  background: transparent url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23000'%3e%3cpath d='M.293.293a1 1 0 011.414 0L8 6.586 14.293.293a1 1 0 111.414 1.414L9.414 8l6.293 6.293a1 1 0 01-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 01-1.414-1.414L6.586 8 .293 1.707a1 1 0 010-1.414z'/%3e%3c/svg%3e\") center/1em auto no-repeat;\n  border: 0;\n  border-radius: 0.25rem;\n  opacity: 0.5;\n}\n\n.btn-close:hover {\n  color: #000;\n  text-decoration: none;\n  opacity: 0.75;\n}\n\n.btn-close:focus {\n  outline: 0;\n  box-shadow: 0 0 0 0.25rem rgba(58, 63, 68, 0.25);\n  opacity: 1;\n}\n\n.btn-close:disabled, .btn-close.disabled {\n  pointer-events: none;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  user-select: none;\n  opacity: 0.25;\n}\n\n.btn-close-white {\n  -webkit-filter: invert(1) grayscale(100%) brightness(200%);\n  filter: invert(1) grayscale(100%) brightness(200%);\n}\n\n.toast {\n  width: 350px;\n  max-width: 100%;\n  font-size: 0.875rem;\n  pointer-events: auto;\n  background-color: #32383e;\n  background-clip: padding-box;\n  border: 1px solid rgba(0, 0, 0, 0.2);\n  box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15);\n  border-radius: 0.25rem;\n}\n\n.toast.showing {\n  opacity: 0;\n}\n\n.toast:not(.show) {\n  display: none;\n}\n\n.toast-container {\n  width: -webkit-max-content;\n  width: -moz-max-content;\n  width: max-content;\n  max-width: 100%;\n  pointer-events: none;\n}\n\n.toast-container > :not(:last-child) {\n  margin-bottom: 0.75rem;\n}\n\n.toast-header {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-align: center;\n  align-items: center;\n  padding: 0.5rem 0.75rem;\n  color: #aaa;\n  background-color: #32383e;\n  background-clip: padding-box;\n  border-bottom: 1px solid rgba(0, 0, 0, 0.2);\n  border-top-left-radius: calc(0.25rem - 1px);\n  border-top-right-radius: calc(0.25rem - 1px);\n}\n\n.toast-header .btn-close {\n  margin-right: -0.375rem;\n  margin-left: 0.75rem;\n}\n\n.toast-body {\n  padding: 0.75rem;\n  word-wrap: break-word;\n}\n\n.modal {\n  position: fixed;\n  top: 0;\n  left: 0;\n  z-index: 1055;\n  display: none;\n  width: 100%;\n  height: 100%;\n  overflow-x: hidden;\n  overflow-y: auto;\n  outline: 0;\n}\n\n.modal-dialog {\n  position: relative;\n  width: auto;\n  margin: 0.5rem;\n  pointer-events: none;\n}\n\n.modal.fade .modal-dialog {\n  transition: -webkit-transform 0.3s ease-out;\n  transition: transform 0.3s ease-out;\n  transition: transform 0.3s ease-out, -webkit-transform 0.3s ease-out;\n  -webkit-transform: translate(0, -50px);\n  transform: translate(0, -50px);\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .modal.fade .modal-dialog {\n    transition: none;\n  }\n}\n\n.modal.show .modal-dialog {\n  -webkit-transform: none;\n  transform: none;\n}\n\n.modal.modal-static .modal-dialog {\n  -webkit-transform: scale(1.02);\n  transform: scale(1.02);\n}\n\n.modal-dialog-scrollable {\n  height: calc(100% - 1rem);\n}\n\n.modal-dialog-scrollable .modal-content {\n  max-height: 100%;\n  overflow: hidden;\n}\n\n.modal-dialog-scrollable .modal-body {\n  overflow-y: auto;\n}\n\n.modal-dialog-centered {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-align: center;\n  align-items: center;\n  min-height: calc(100% - 1rem);\n}\n\n.modal-content {\n  position: relative;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  width: 100%;\n  pointer-events: auto;\n  background-color: #32383e;\n  background-clip: padding-box;\n  border: 1px solid rgba(0, 0, 0, 0.2);\n  border-radius: 0.3rem;\n  outline: 0;\n}\n\n.modal-backdrop {\n  position: fixed;\n  top: 0;\n  left: 0;\n  z-index: 1050;\n  width: 100vw;\n  height: 100vh;\n  background-color: #000;\n}\n\n.modal-backdrop.fade {\n  opacity: 0;\n}\n\n.modal-backdrop.show {\n  opacity: 0.5;\n}\n\n.modal-header {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-negative: 0;\n  flex-shrink: 0;\n  -ms-flex-align: center;\n  align-items: center;\n  -ms-flex-pack: justify;\n  justify-content: space-between;\n  padding: 1rem 1rem;\n  border-bottom: 1px solid rgba(0, 0, 0, 0.2);\n  border-top-left-radius: calc(0.3rem - 1px);\n  border-top-right-radius: calc(0.3rem - 1px);\n}\n\n.modal-header .btn-close {\n  padding: 0.5rem 0.5rem;\n  margin: -0.5rem -0.5rem -0.5rem auto;\n}\n\n.modal-title {\n  margin-bottom: 0;\n  line-height: 1.5;\n}\n\n.modal-body {\n  position: relative;\n  -ms-flex: 1 1 auto;\n  flex: 1 1 auto;\n  padding: 1rem;\n}\n\n.modal-footer {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n  flex-wrap: wrap;\n  -ms-flex-negative: 0;\n  flex-shrink: 0;\n  -ms-flex-align: center;\n  align-items: center;\n  -ms-flex-pack: end;\n  justify-content: flex-end;\n  padding: 0.75rem;\n  border-top: 1px solid rgba(0, 0, 0, 0.2);\n  border-bottom-right-radius: calc(0.3rem - 1px);\n  border-bottom-left-radius: calc(0.3rem - 1px);\n}\n\n.modal-footer > * {\n  margin: 0.25rem;\n}\n\n@media (min-width: 576px) {\n  .modal-dialog {\n    max-width: 500px;\n    margin: 1.75rem auto;\n  }\n  .modal-dialog-scrollable {\n    height: calc(100% - 3.5rem);\n  }\n  .modal-dialog-centered {\n    min-height: calc(100% - 3.5rem);\n  }\n  .modal-sm {\n    max-width: 300px;\n  }\n}\n\n@media (min-width: 992px) {\n  .modal-lg,\n  .modal-xl {\n    max-width: 800px;\n  }\n}\n\n@media (min-width: 1200px) {\n  .modal-xl {\n    max-width: 1140px;\n  }\n}\n\n.modal-fullscreen {\n  width: 100vw;\n  max-width: none;\n  height: 100%;\n  margin: 0;\n}\n\n.modal-fullscreen .modal-content {\n  height: 100%;\n  border: 0;\n  border-radius: 0;\n}\n\n.modal-fullscreen .modal-header {\n  border-radius: 0;\n}\n\n.modal-fullscreen .modal-body {\n  overflow-y: auto;\n}\n\n.modal-fullscreen .modal-footer {\n  border-radius: 0;\n}\n\n@media (max-width: 575.98px) {\n  .modal-fullscreen-sm-down {\n    width: 100vw;\n    max-width: none;\n    height: 100%;\n    margin: 0;\n  }\n  .modal-fullscreen-sm-down .modal-content {\n    height: 100%;\n    border: 0;\n    border-radius: 0;\n  }\n  .modal-fullscreen-sm-down .modal-header {\n    border-radius: 0;\n  }\n  .modal-fullscreen-sm-down .modal-body {\n    overflow-y: auto;\n  }\n  .modal-fullscreen-sm-down .modal-footer {\n    border-radius: 0;\n  }\n}\n\n@media (max-width: 767.98px) {\n  .modal-fullscreen-md-down {\n    width: 100vw;\n    max-width: none;\n    height: 100%;\n    margin: 0;\n  }\n  .modal-fullscreen-md-down .modal-content {\n    height: 100%;\n    border: 0;\n    border-radius: 0;\n  }\n  .modal-fullscreen-md-down .modal-header {\n    border-radius: 0;\n  }\n  .modal-fullscreen-md-down .modal-body {\n    overflow-y: auto;\n  }\n  .modal-fullscreen-md-down .modal-footer {\n    border-radius: 0;\n  }\n}\n\n@media (max-width: 991.98px) {\n  .modal-fullscreen-lg-down {\n    width: 100vw;\n    max-width: none;\n    height: 100%;\n    margin: 0;\n  }\n  .modal-fullscreen-lg-down .modal-content {\n    height: 100%;\n    border: 0;\n    border-radius: 0;\n  }\n  .modal-fullscreen-lg-down .modal-header {\n    border-radius: 0;\n  }\n  .modal-fullscreen-lg-down .modal-body {\n    overflow-y: auto;\n  }\n  .modal-fullscreen-lg-down .modal-footer {\n    border-radius: 0;\n  }\n}\n\n@media (max-width: 1199.98px) {\n  .modal-fullscreen-xl-down {\n    width: 100vw;\n    max-width: none;\n    height: 100%;\n    margin: 0;\n  }\n  .modal-fullscreen-xl-down .modal-content {\n    height: 100%;\n    border: 0;\n    border-radius: 0;\n  }\n  .modal-fullscreen-xl-down .modal-header {\n    border-radius: 0;\n  }\n  .modal-fullscreen-xl-down .modal-body {\n    overflow-y: auto;\n  }\n  .modal-fullscreen-xl-down .modal-footer {\n    border-radius: 0;\n  }\n}\n\n@media (max-width: 1399.98px) {\n  .modal-fullscreen-xxl-down {\n    width: 100vw;\n    max-width: none;\n    height: 100%;\n    margin: 0;\n  }\n  .modal-fullscreen-xxl-down .modal-content {\n    height: 100%;\n    border: 0;\n    border-radius: 0;\n  }\n  .modal-fullscreen-xxl-down .modal-header {\n    border-radius: 0;\n  }\n  .modal-fullscreen-xxl-down .modal-body {\n    overflow-y: auto;\n  }\n  .modal-fullscreen-xxl-down .modal-footer {\n    border-radius: 0;\n  }\n}\n\n.tooltip {\n  position: absolute;\n  z-index: 1080;\n  display: block;\n  margin: 0;\n  font-family: var(--bs-font-sans-serif);\n  font-style: normal;\n  font-weight: 400;\n  line-height: 1.5;\n  text-align: left;\n  text-align: start;\n  text-decoration: none;\n  text-shadow: none;\n  text-transform: none;\n  letter-spacing: normal;\n  word-break: normal;\n  word-spacing: normal;\n  white-space: normal;\n  line-break: auto;\n  font-size: 0.875rem;\n  word-wrap: break-word;\n  opacity: 0;\n}\n\n.tooltip.show {\n  opacity: 0.9;\n}\n\n.tooltip .tooltip-arrow {\n  position: absolute;\n  display: block;\n  width: 0.8rem;\n  height: 0.4rem;\n}\n\n.tooltip .tooltip-arrow::before {\n  position: absolute;\n  content: \"\";\n  border-color: transparent;\n  border-style: solid;\n}\n\n.bs-tooltip-top, .bs-tooltip-auto[data-popper-placement^=\"top\"] {\n  padding: 0.4rem 0;\n}\n\n.bs-tooltip-top .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=\"top\"] .tooltip-arrow {\n  bottom: 0;\n}\n\n.bs-tooltip-top .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=\"top\"] .tooltip-arrow::before {\n  top: -1px;\n  border-width: 0.4rem 0.4rem 0;\n  border-top-color: #000;\n}\n\n.bs-tooltip-end, .bs-tooltip-auto[data-popper-placement^=\"right\"] {\n  padding: 0 0.4rem;\n}\n\n.bs-tooltip-end .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=\"right\"] .tooltip-arrow {\n  left: 0;\n  width: 0.4rem;\n  height: 0.8rem;\n}\n\n.bs-tooltip-end .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=\"right\"] .tooltip-arrow::before {\n  right: -1px;\n  border-width: 0.4rem 0.4rem 0.4rem 0;\n  border-right-color: #000;\n}\n\n.bs-tooltip-bottom, .bs-tooltip-auto[data-popper-placement^=\"bottom\"] {\n  padding: 0.4rem 0;\n}\n\n.bs-tooltip-bottom .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=\"bottom\"] .tooltip-arrow {\n  top: 0;\n}\n\n.bs-tooltip-bottom .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=\"bottom\"] .tooltip-arrow::before {\n  bottom: -1px;\n  border-width: 0 0.4rem 0.4rem;\n  border-bottom-color: #000;\n}\n\n.bs-tooltip-start, .bs-tooltip-auto[data-popper-placement^=\"left\"] {\n  padding: 0 0.4rem;\n}\n\n.bs-tooltip-start .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=\"left\"] .tooltip-arrow {\n  right: 0;\n  width: 0.4rem;\n  height: 0.8rem;\n}\n\n.bs-tooltip-start .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=\"left\"] .tooltip-arrow::before {\n  left: -1px;\n  border-width: 0.4rem 0 0.4rem 0.4rem;\n  border-left-color: #000;\n}\n\n.tooltip-inner {\n  max-width: 200px;\n  padding: 0.25rem 0.5rem;\n  color: #fff;\n  text-align: center;\n  background-color: #000;\n  border-radius: 0.25rem;\n}\n\n.popover {\n  position: absolute;\n  top: 0;\n  left: 0 /* rtl:ignore */;\n  z-index: 1070;\n  display: block;\n  max-width: 276px;\n  font-family: var(--bs-font-sans-serif);\n  font-style: normal;\n  font-weight: 400;\n  line-height: 1.5;\n  text-align: left;\n  text-align: start;\n  text-decoration: none;\n  text-shadow: none;\n  text-transform: none;\n  letter-spacing: normal;\n  word-break: normal;\n  word-spacing: normal;\n  white-space: normal;\n  line-break: auto;\n  font-size: 0.875rem;\n  word-wrap: break-word;\n  background-color: #32383e;\n  background-clip: padding-box;\n  border: 1px solid rgba(0, 0, 0, 0.2);\n  border-radius: 0.3rem;\n}\n\n.popover .popover-arrow {\n  position: absolute;\n  display: block;\n  width: 1rem;\n  height: 0.5rem;\n}\n\n.popover .popover-arrow::before, .popover .popover-arrow::after {\n  position: absolute;\n  display: block;\n  content: \"\";\n  border-color: transparent;\n  border-style: solid;\n}\n\n.bs-popover-top > .popover-arrow, .bs-popover-auto[data-popper-placement^=\"top\"] > .popover-arrow {\n  bottom: calc(-0.5rem - 1px);\n}\n\n.bs-popover-top > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=\"top\"] > .popover-arrow::before {\n  bottom: 0;\n  border-width: 0.5rem 0.5rem 0;\n  border-top-color: rgba(0, 0, 0, 0.25);\n}\n\n.bs-popover-top > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=\"top\"] > .popover-arrow::after {\n  bottom: 1px;\n  border-width: 0.5rem 0.5rem 0;\n  border-top-color: #32383e;\n}\n\n.bs-popover-end > .popover-arrow, .bs-popover-auto[data-popper-placement^=\"right\"] > .popover-arrow {\n  left: calc(-0.5rem - 1px);\n  width: 0.5rem;\n  height: 1rem;\n}\n\n.bs-popover-end > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=\"right\"] > .popover-arrow::before {\n  left: 0;\n  border-width: 0.5rem 0.5rem 0.5rem 0;\n  border-right-color: rgba(0, 0, 0, 0.25);\n}\n\n.bs-popover-end > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=\"right\"] > .popover-arrow::after {\n  left: 1px;\n  border-width: 0.5rem 0.5rem 0.5rem 0;\n  border-right-color: #32383e;\n}\n\n.bs-popover-bottom > .popover-arrow, .bs-popover-auto[data-popper-placement^=\"bottom\"] > .popover-arrow {\n  top: calc(-0.5rem - 1px);\n}\n\n.bs-popover-bottom > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=\"bottom\"] > .popover-arrow::before {\n  top: 0;\n  border-width: 0 0.5rem 0.5rem 0.5rem;\n  border-bottom-color: rgba(0, 0, 0, 0.25);\n}\n\n.bs-popover-bottom > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=\"bottom\"] > .popover-arrow::after {\n  top: 1px;\n  border-width: 0 0.5rem 0.5rem 0.5rem;\n  border-bottom-color: #32383e;\n}\n\n.bs-popover-bottom .popover-header::before, .bs-popover-auto[data-popper-placement^=\"bottom\"] .popover-header::before {\n  position: absolute;\n  top: 0;\n  left: 50%;\n  display: block;\n  width: 1rem;\n  margin-left: -0.5rem;\n  content: \"\";\n  border-bottom: 1px solid #2f343a;\n}\n\n.bs-popover-start > .popover-arrow, .bs-popover-auto[data-popper-placement^=\"left\"] > .popover-arrow {\n  right: calc(-0.5rem - 1px);\n  width: 0.5rem;\n  height: 1rem;\n}\n\n.bs-popover-start > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=\"left\"] > .popover-arrow::before {\n  right: 0;\n  border-width: 0.5rem 0 0.5rem 0.5rem;\n  border-left-color: rgba(0, 0, 0, 0.25);\n}\n\n.bs-popover-start > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=\"left\"] > .popover-arrow::after {\n  right: 1px;\n  border-width: 0.5rem 0 0.5rem 0.5rem;\n  border-left-color: #32383e;\n}\n\n.popover-header {\n  padding: 0.5rem 1rem;\n  margin-bottom: 0;\n  font-size: 1rem;\n  background-color: #2f343a;\n  border-bottom: 1px solid rgba(0, 0, 0, 0.2);\n  border-top-left-radius: calc(0.3rem - 1px);\n  border-top-right-radius: calc(0.3rem - 1px);\n}\n\n.popover-header:empty {\n  display: none;\n}\n\n.popover-body {\n  padding: 1rem 1rem;\n  color: #aaa;\n}\n\n.carousel {\n  position: relative;\n}\n\n.carousel.pointer-event {\n  -ms-touch-action: pan-y;\n  touch-action: pan-y;\n}\n\n.carousel-inner {\n  position: relative;\n  width: 100%;\n  overflow: hidden;\n}\n\n.carousel-inner::after {\n  display: block;\n  clear: both;\n  content: \"\";\n}\n\n.carousel-item {\n  position: relative;\n  display: none;\n  float: left;\n  width: 100%;\n  margin-right: -100%;\n  -webkit-backface-visibility: hidden;\n  backface-visibility: hidden;\n  transition: -webkit-transform 0.6s ease-in-out;\n  transition: transform 0.6s ease-in-out;\n  transition: transform 0.6s ease-in-out, -webkit-transform 0.6s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .carousel-item {\n    transition: none;\n  }\n}\n\n.carousel-item.active,\n.carousel-item-next,\n.carousel-item-prev {\n  display: block;\n}\n\n/* rtl:begin:ignore */\n.carousel-item-next:not(.carousel-item-start),\n.active.carousel-item-end {\n  -webkit-transform: translateX(100%);\n  transform: translateX(100%);\n}\n\n.carousel-item-prev:not(.carousel-item-end),\n.active.carousel-item-start {\n  -webkit-transform: translateX(-100%);\n  transform: translateX(-100%);\n}\n\n/* rtl:end:ignore */\n.carousel-fade .carousel-item {\n  opacity: 0;\n  transition-property: opacity;\n  -webkit-transform: none;\n  transform: none;\n}\n\n.carousel-fade .carousel-item.active,\n.carousel-fade .carousel-item-next.carousel-item-start,\n.carousel-fade .carousel-item-prev.carousel-item-end {\n  z-index: 1;\n  opacity: 1;\n}\n\n.carousel-fade .active.carousel-item-start,\n.carousel-fade .active.carousel-item-end {\n  z-index: 0;\n  opacity: 0;\n  transition: opacity 0s 0.6s;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .carousel-fade .active.carousel-item-start,\n  .carousel-fade .active.carousel-item-end {\n    transition: none;\n  }\n}\n\n.carousel-control-prev,\n.carousel-control-next {\n  position: absolute;\n  top: 0;\n  bottom: 0;\n  z-index: 1;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-align: center;\n  align-items: center;\n  -ms-flex-pack: center;\n  justify-content: center;\n  width: 15%;\n  padding: 0;\n  color: #fff;\n  text-align: center;\n  background: none;\n  border: 0;\n  opacity: 0.5;\n  transition: opacity 0.15s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .carousel-control-prev,\n  .carousel-control-next {\n    transition: none;\n  }\n}\n\n.carousel-control-prev:hover, .carousel-control-prev:focus,\n.carousel-control-next:hover,\n.carousel-control-next:focus {\n  color: #fff;\n  text-decoration: none;\n  outline: 0;\n  opacity: 0.9;\n}\n\n.carousel-control-prev {\n  left: 0;\n}\n\n.carousel-control-next {\n  right: 0;\n}\n\n.carousel-control-prev-icon,\n.carousel-control-next-icon {\n  display: inline-block;\n  width: 2rem;\n  height: 2rem;\n  background-repeat: no-repeat;\n  background-position: 50%;\n  background-size: 100% 100%;\n}\n\n/* rtl:options: {\n  \"autoRename\": true,\n  \"stringMap\":[ {\n    \"name\"    : \"prev-next\",\n    \"search\"  : \"prev\",\n    \"replace\" : \"next\"\n  } ]\n} */\n.carousel-control-prev-icon {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0z'/%3e%3c/svg%3e\");\n}\n\n.carousel-control-next-icon {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e\");\n}\n\n.carousel-indicators {\n  position: absolute;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 2;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-pack: center;\n  justify-content: center;\n  padding: 0;\n  margin-right: 15%;\n  margin-bottom: 1rem;\n  margin-left: 15%;\n  list-style: none;\n}\n\n.carousel-indicators [data-bs-target] {\n  box-sizing: content-box;\n  -ms-flex: 0 1 auto;\n  flex: 0 1 auto;\n  width: 30px;\n  height: 3px;\n  padding: 0;\n  margin-right: 3px;\n  margin-left: 3px;\n  text-indent: -999px;\n  cursor: pointer;\n  background-color: #fff;\n  background-clip: padding-box;\n  border: 0;\n  border-top: 10px solid transparent;\n  border-bottom: 10px solid transparent;\n  opacity: 0.5;\n  transition: opacity 0.6s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .carousel-indicators [data-bs-target] {\n    transition: none;\n  }\n}\n\n.carousel-indicators .active {\n  opacity: 1;\n}\n\n.carousel-caption {\n  position: absolute;\n  right: 15%;\n  bottom: 1.25rem;\n  left: 15%;\n  padding-top: 1.25rem;\n  padding-bottom: 1.25rem;\n  color: #fff;\n  text-align: center;\n}\n\n.carousel-dark .carousel-control-prev-icon,\n.carousel-dark .carousel-control-next-icon {\n  -webkit-filter: invert(1) grayscale(100);\n  filter: invert(1) grayscale(100);\n}\n\n.carousel-dark .carousel-indicators [data-bs-target] {\n  background-color: #000;\n}\n\n.carousel-dark .carousel-caption {\n  color: #000;\n}\n\n@-webkit-keyframes spinner-border {\n  to {\n    -webkit-transform: rotate(360deg) /* rtl:ignore */;\n    transform: rotate(360deg) /* rtl:ignore */;\n  }\n}\n\n@keyframes spinner-border {\n  to {\n    -webkit-transform: rotate(360deg) /* rtl:ignore */;\n    transform: rotate(360deg) /* rtl:ignore */;\n  }\n}\n\n.spinner-border {\n  display: inline-block;\n  width: 2rem;\n  height: 2rem;\n  vertical-align: -0.125em;\n  border: 0.25em solid currentColor;\n  border-right-color: transparent;\n  border-radius: 50%;\n  -webkit-animation: 0.75s linear infinite spinner-border;\n  animation: 0.75s linear infinite spinner-border;\n}\n\n.spinner-border-sm {\n  width: 1rem;\n  height: 1rem;\n  border-width: 0.2em;\n}\n\n@-webkit-keyframes spinner-grow {\n  0% {\n    -webkit-transform: scale(0);\n    transform: scale(0);\n  }\n  50% {\n    opacity: 1;\n    -webkit-transform: none;\n    transform: none;\n  }\n}\n\n@keyframes spinner-grow {\n  0% {\n    -webkit-transform: scale(0);\n    transform: scale(0);\n  }\n  50% {\n    opacity: 1;\n    -webkit-transform: none;\n    transform: none;\n  }\n}\n\n.spinner-grow {\n  display: inline-block;\n  width: 2rem;\n  height: 2rem;\n  vertical-align: -0.125em;\n  background-color: currentColor;\n  border-radius: 50%;\n  opacity: 0;\n  -webkit-animation: 0.75s linear infinite spinner-grow;\n  animation: 0.75s linear infinite spinner-grow;\n}\n\n.spinner-grow-sm {\n  width: 1rem;\n  height: 1rem;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .spinner-border,\n  .spinner-grow {\n    -webkit-animation-duration: 1.5s;\n    animation-duration: 1.5s;\n  }\n}\n\n.offcanvas {\n  position: fixed;\n  bottom: 0;\n  z-index: 1045;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  max-width: 100%;\n  visibility: hidden;\n  background-color: #32383e;\n  background-clip: padding-box;\n  outline: 0;\n  transition: -webkit-transform 0.3s ease-in-out;\n  transition: transform 0.3s ease-in-out;\n  transition: transform 0.3s ease-in-out, -webkit-transform 0.3s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .offcanvas {\n    transition: none;\n  }\n}\n\n.offcanvas-backdrop {\n  position: fixed;\n  top: 0;\n  left: 0;\n  z-index: 1040;\n  width: 100vw;\n  height: 100vh;\n  background-color: #000;\n}\n\n.offcanvas-backdrop.fade {\n  opacity: 0;\n}\n\n.offcanvas-backdrop.show {\n  opacity: 0.5;\n}\n\n.offcanvas-header {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-align: center;\n  align-items: center;\n  -ms-flex-pack: justify;\n  justify-content: space-between;\n  padding: 1rem 1rem;\n}\n\n.offcanvas-header .btn-close {\n  padding: 0.5rem 0.5rem;\n  margin-top: -0.5rem;\n  margin-right: -0.5rem;\n  margin-bottom: -0.5rem;\n}\n\n.offcanvas-title {\n  margin-bottom: 0;\n  line-height: 1.5;\n}\n\n.offcanvas-body {\n  -ms-flex-positive: 1;\n  flex-grow: 1;\n  padding: 1rem 1rem;\n  overflow-y: auto;\n}\n\n.offcanvas-start {\n  top: 0;\n  left: 0;\n  width: 400px;\n  border-right: 1px solid rgba(0, 0, 0, 0.2);\n  -webkit-transform: translateX(-100%);\n  transform: translateX(-100%);\n}\n\n.offcanvas-end {\n  top: 0;\n  right: 0;\n  width: 400px;\n  border-left: 1px solid rgba(0, 0, 0, 0.2);\n  -webkit-transform: translateX(100%);\n  transform: translateX(100%);\n}\n\n.offcanvas-top {\n  top: 0;\n  right: 0;\n  left: 0;\n  height: 30vh;\n  max-height: 100%;\n  border-bottom: 1px solid rgba(0, 0, 0, 0.2);\n  -webkit-transform: translateY(-100%);\n  transform: translateY(-100%);\n}\n\n.offcanvas-bottom {\n  right: 0;\n  left: 0;\n  height: 30vh;\n  max-height: 100%;\n  border-top: 1px solid rgba(0, 0, 0, 0.2);\n  -webkit-transform: translateY(100%);\n  transform: translateY(100%);\n}\n\n.offcanvas.show {\n  -webkit-transform: none;\n  transform: none;\n}\n\n.placeholder {\n  display: inline-block;\n  min-height: 1em;\n  vertical-align: middle;\n  cursor: wait;\n  background-color: currentColor;\n  opacity: 0.5;\n}\n\n.placeholder.btn::before {\n  display: inline-block;\n  content: \"\";\n}\n\n.placeholder-xs {\n  min-height: .6em;\n}\n\n.placeholder-sm {\n  min-height: .8em;\n}\n\n.placeholder-lg {\n  min-height: 1.2em;\n}\n\n.placeholder-glow .placeholder {\n  -webkit-animation: placeholder-glow 2s ease-in-out infinite;\n  animation: placeholder-glow 2s ease-in-out infinite;\n}\n\n@-webkit-keyframes placeholder-glow {\n  50% {\n    opacity: 0.2;\n  }\n}\n\n@keyframes placeholder-glow {\n  50% {\n    opacity: 0.2;\n  }\n}\n\n.placeholder-wave {\n  -webkit-mask-image: linear-gradient(130deg, #000 55%, rgba(0, 0, 0, 0.8) 75%, #000 95%);\n  mask-image: linear-gradient(130deg, #000 55%, rgba(0, 0, 0, 0.8) 75%, #000 95%);\n  -webkit-mask-size: 200% 100%;\n  mask-size: 200% 100%;\n  -webkit-animation: placeholder-wave 2s linear infinite;\n  animation: placeholder-wave 2s linear infinite;\n}\n\n@-webkit-keyframes placeholder-wave {\n  100% {\n    -webkit-mask-position: -200% 0%;\n    mask-position: -200% 0%;\n  }\n}\n\n@keyframes placeholder-wave {\n  100% {\n    -webkit-mask-position: -200% 0%;\n    mask-position: -200% 0%;\n  }\n}\n\n.clearfix::after {\n  display: block;\n  clear: both;\n  content: \"\";\n}\n\n.link-primary {\n  color: #3a3f44;\n}\n\n.link-primary:hover, .link-primary:focus {\n  color: #2e3236;\n}\n\n.link-secondary {\n  color: #7a8288;\n}\n\n.link-secondary:hover, .link-secondary:focus {\n  color: #62686d;\n}\n\n.link-success {\n  color: #62c462;\n}\n\n.link-success:hover, .link-success:focus {\n  color: #4e9d4e;\n}\n\n.link-info {\n  color: #5bc0de;\n}\n\n.link-info:hover, .link-info:focus {\n  color: #499ab2;\n}\n\n.link-warning {\n  color: #f89406;\n}\n\n.link-warning:hover, .link-warning:focus {\n  color: #c67605;\n}\n\n.link-danger {\n  color: #ee5f5b;\n}\n\n.link-danger:hover, .link-danger:focus {\n  color: #be4c49;\n}\n\n.link-light {\n  color: #e9ecef;\n}\n\n.link-light:hover, .link-light:focus {\n  color: #edf0f2;\n}\n\n.link-dark {\n  color: #272b30;\n}\n\n.link-dark:hover, .link-dark:focus {\n  color: #1f2226;\n}\n\n.ratio {\n  position: relative;\n  width: 100%;\n}\n\n.ratio::before {\n  display: block;\n  padding-top: var(--bs-aspect-ratio);\n  content: \"\";\n}\n\n.ratio > * {\n  position: absolute;\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n}\n\n.ratio-1x1 {\n  --bs-aspect-ratio: 100%;\n}\n\n.ratio-4x3 {\n  --bs-aspect-ratio: calc(3 / 4 * 100%);\n}\n\n.ratio-16x9 {\n  --bs-aspect-ratio: calc(9 / 16 * 100%);\n}\n\n.ratio-21x9 {\n  --bs-aspect-ratio: calc(9 / 21 * 100%);\n}\n\n.fixed-top {\n  position: fixed;\n  top: 0;\n  right: 0;\n  left: 0;\n  z-index: 1030;\n}\n\n.fixed-bottom {\n  position: fixed;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 1030;\n}\n\n.sticky-top {\n  position: -webkit-sticky;\n  position: sticky;\n  top: 0;\n  z-index: 1020;\n}\n\n@media (min-width: 576px) {\n  .sticky-sm-top {\n    position: -webkit-sticky;\n    position: sticky;\n    top: 0;\n    z-index: 1020;\n  }\n}\n\n@media (min-width: 768px) {\n  .sticky-md-top {\n    position: -webkit-sticky;\n    position: sticky;\n    top: 0;\n    z-index: 1020;\n  }\n}\n\n@media (min-width: 992px) {\n  .sticky-lg-top {\n    position: -webkit-sticky;\n    position: sticky;\n    top: 0;\n    z-index: 1020;\n  }\n}\n\n@media (min-width: 1200px) {\n  .sticky-xl-top {\n    position: -webkit-sticky;\n    position: sticky;\n    top: 0;\n    z-index: 1020;\n  }\n}\n\n@media (min-width: 1400px) {\n  .sticky-xxl-top {\n    position: -webkit-sticky;\n    position: sticky;\n    top: 0;\n    z-index: 1020;\n  }\n}\n\n.hstack {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-direction: row;\n  flex-direction: row;\n  -ms-flex-align: center;\n  align-items: center;\n  -ms-flex-item-align: stretch;\n  align-self: stretch;\n}\n\n.vstack {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex: 1 1 auto;\n  flex: 1 1 auto;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  -ms-flex-item-align: stretch;\n  align-self: stretch;\n}\n\n.visually-hidden,\n.visually-hidden-focusable:not(:focus):not(:focus-within) {\n  position: absolute !important;\n  width: 1px !important;\n  height: 1px !important;\n  padding: 0 !important;\n  margin: -1px !important;\n  overflow: hidden !important;\n  clip: rect(0, 0, 0, 0) !important;\n  white-space: nowrap !important;\n  border: 0 !important;\n}\n\n.stretched-link::after {\n  position: absolute;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 1;\n  content: \"\";\n}\n\n.text-truncate {\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n}\n\n.vr {\n  display: inline-block;\n  -ms-flex-item-align: stretch;\n  align-self: stretch;\n  width: 1px;\n  min-height: 1em;\n  background-color: currentColor;\n  opacity: 0.25;\n}\n\n.align-baseline {\n  vertical-align: baseline !important;\n}\n\n.align-top {\n  vertical-align: top !important;\n}\n\n.align-middle {\n  vertical-align: middle !important;\n}\n\n.align-bottom {\n  vertical-align: bottom !important;\n}\n\n.align-text-bottom {\n  vertical-align: text-bottom !important;\n}\n\n.align-text-top {\n  vertical-align: text-top !important;\n}\n\n.float-start {\n  float: left !important;\n}\n\n.float-end {\n  float: right !important;\n}\n\n.float-none {\n  float: none !important;\n}\n\n.opacity-0 {\n  opacity: 0 !important;\n}\n\n.opacity-25 {\n  opacity: 0.25 !important;\n}\n\n.opacity-50 {\n  opacity: 0.5 !important;\n}\n\n.opacity-75 {\n  opacity: 0.75 !important;\n}\n\n.opacity-100 {\n  opacity: 1 !important;\n}\n\n.overflow-auto {\n  overflow: auto !important;\n}\n\n.overflow-hidden {\n  overflow: hidden !important;\n}\n\n.overflow-visible {\n  overflow: visible !important;\n}\n\n.overflow-scroll {\n  overflow: scroll !important;\n}\n\n.d-inline {\n  display: inline !important;\n}\n\n.d-inline-block {\n  display: inline-block !important;\n}\n\n.d-block {\n  display: block !important;\n}\n\n.d-grid {\n  display: grid !important;\n}\n\n.d-table {\n  display: table !important;\n}\n\n.d-table-row {\n  display: table-row !important;\n}\n\n.d-table-cell {\n  display: table-cell !important;\n}\n\n.d-flex {\n  display: -ms-flexbox !important;\n  display: flex !important;\n}\n\n.d-inline-flex {\n  display: -ms-inline-flexbox !important;\n  display: inline-flex !important;\n}\n\n.d-none {\n  display: none !important;\n}\n\n.shadow {\n  box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15) !important;\n}\n\n.shadow-sm {\n  box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075) !important;\n}\n\n.shadow-lg {\n  box-shadow: 0 1rem 3rem rgba(0, 0, 0, 0.175) !important;\n}\n\n.shadow-none {\n  box-shadow: none !important;\n}\n\n.position-static {\n  position: static !important;\n}\n\n.position-relative {\n  position: relative !important;\n}\n\n.position-absolute {\n  position: absolute !important;\n}\n\n.position-fixed {\n  position: fixed !important;\n}\n\n.position-sticky {\n  position: -webkit-sticky !important;\n  position: sticky !important;\n}\n\n.top-0 {\n  top: 0 !important;\n}\n\n.top-50 {\n  top: 50% !important;\n}\n\n.top-100 {\n  top: 100% !important;\n}\n\n.bottom-0 {\n  bottom: 0 !important;\n}\n\n.bottom-50 {\n  bottom: 50% !important;\n}\n\n.bottom-100 {\n  bottom: 100% !important;\n}\n\n.start-0 {\n  left: 0 !important;\n}\n\n.start-50 {\n  left: 50% !important;\n}\n\n.start-100 {\n  left: 100% !important;\n}\n\n.end-0 {\n  right: 0 !important;\n}\n\n.end-50 {\n  right: 50% !important;\n}\n\n.end-100 {\n  right: 100% !important;\n}\n\n.translate-middle {\n  -webkit-transform: translate(-50%, -50%) !important;\n  transform: translate(-50%, -50%) !important;\n}\n\n.translate-middle-x {\n  -webkit-transform: translateX(-50%) !important;\n  transform: translateX(-50%) !important;\n}\n\n.translate-middle-y {\n  -webkit-transform: translateY(-50%) !important;\n  transform: translateY(-50%) !important;\n}\n\n.border {\n  border: 1px solid #dee2e6 !important;\n}\n\n.border-0 {\n  border: 0 !important;\n}\n\n.border-top {\n  border-top: 1px solid #dee2e6 !important;\n}\n\n.border-top-0 {\n  border-top: 0 !important;\n}\n\n.border-end {\n  border-right: 1px solid #dee2e6 !important;\n}\n\n.border-end-0 {\n  border-right: 0 !important;\n}\n\n.border-bottom {\n  border-bottom: 1px solid #dee2e6 !important;\n}\n\n.border-bottom-0 {\n  border-bottom: 0 !important;\n}\n\n.border-start {\n  border-left: 1px solid #dee2e6 !important;\n}\n\n.border-start-0 {\n  border-left: 0 !important;\n}\n\n.border-primary {\n  border-color: #3a3f44 !important;\n}\n\n.border-secondary {\n  border-color: #7a8288 !important;\n}\n\n.border-success {\n  border-color: #62c462 !important;\n}\n\n.border-info {\n  border-color: #5bc0de !important;\n}\n\n.border-warning {\n  border-color: #f89406 !important;\n}\n\n.border-danger {\n  border-color: #ee5f5b !important;\n}\n\n.border-light {\n  border-color: #e9ecef !important;\n}\n\n.border-dark {\n  border-color: #272b30 !important;\n}\n\n.border-white {\n  border-color: #fff !important;\n}\n\n.border-1 {\n  border-width: 1px !important;\n}\n\n.border-2 {\n  border-width: 2px !important;\n}\n\n.border-3 {\n  border-width: 3px !important;\n}\n\n.border-4 {\n  border-width: 4px !important;\n}\n\n.border-5 {\n  border-width: 5px !important;\n}\n\n.w-25 {\n  width: 25% !important;\n}\n\n.w-50 {\n  width: 50% !important;\n}\n\n.w-75 {\n  width: 75% !important;\n}\n\n.w-100 {\n  width: 100% !important;\n}\n\n.w-auto {\n  width: auto !important;\n}\n\n.mw-100 {\n  max-width: 100% !important;\n}\n\n.vw-100 {\n  width: 100vw !important;\n}\n\n.min-vw-100 {\n  min-width: 100vw !important;\n}\n\n.h-25 {\n  height: 25% !important;\n}\n\n.h-50 {\n  height: 50% !important;\n}\n\n.h-75 {\n  height: 75% !important;\n}\n\n.h-100 {\n  height: 100% !important;\n}\n\n.h-auto {\n  height: auto !important;\n}\n\n.mh-100 {\n  max-height: 100% !important;\n}\n\n.vh-100 {\n  height: 100vh !important;\n}\n\n.min-vh-100 {\n  min-height: 100vh !important;\n}\n\n.flex-fill {\n  -ms-flex: 1 1 auto !important;\n  flex: 1 1 auto !important;\n}\n\n.flex-row {\n  -ms-flex-direction: row !important;\n  flex-direction: row !important;\n}\n\n.flex-column {\n  -ms-flex-direction: column !important;\n  flex-direction: column !important;\n}\n\n.flex-row-reverse {\n  -ms-flex-direction: row-reverse !important;\n  flex-direction: row-reverse !important;\n}\n\n.flex-column-reverse {\n  -ms-flex-direction: column-reverse !important;\n  flex-direction: column-reverse !important;\n}\n\n.flex-grow-0 {\n  -ms-flex-positive: 0 !important;\n  flex-grow: 0 !important;\n}\n\n.flex-grow-1 {\n  -ms-flex-positive: 1 !important;\n  flex-grow: 1 !important;\n}\n\n.flex-shrink-0 {\n  -ms-flex-negative: 0 !important;\n  flex-shrink: 0 !important;\n}\n\n.flex-shrink-1 {\n  -ms-flex-negative: 1 !important;\n  flex-shrink: 1 !important;\n}\n\n.flex-wrap {\n  -ms-flex-wrap: wrap !important;\n  flex-wrap: wrap !important;\n}\n\n.flex-nowrap {\n  -ms-flex-wrap: nowrap !important;\n  flex-wrap: nowrap !important;\n}\n\n.flex-wrap-reverse {\n  -ms-flex-wrap: wrap-reverse !important;\n  flex-wrap: wrap-reverse !important;\n}\n\n.gap-0 {\n  gap: 0 !important;\n}\n\n.gap-1 {\n  gap: 0.25rem !important;\n}\n\n.gap-2 {\n  gap: 0.5rem !important;\n}\n\n.gap-3 {\n  gap: 1rem !important;\n}\n\n.gap-4 {\n  gap: 1.5rem !important;\n}\n\n.gap-5 {\n  gap: 3rem !important;\n}\n\n.justify-content-start {\n  -ms-flex-pack: start !important;\n  justify-content: flex-start !important;\n}\n\n.justify-content-end {\n  -ms-flex-pack: end !important;\n  justify-content: flex-end !important;\n}\n\n.justify-content-center {\n  -ms-flex-pack: center !important;\n  justify-content: center !important;\n}\n\n.justify-content-between {\n  -ms-flex-pack: justify !important;\n  justify-content: space-between !important;\n}\n\n.justify-content-around {\n  -ms-flex-pack: distribute !important;\n  justify-content: space-around !important;\n}\n\n.justify-content-evenly {\n  -ms-flex-pack: space-evenly !important;\n  justify-content: space-evenly !important;\n}\n\n.align-items-start {\n  -ms-flex-align: start !important;\n  align-items: flex-start !important;\n}\n\n.align-items-end {\n  -ms-flex-align: end !important;\n  align-items: flex-end !important;\n}\n\n.align-items-center {\n  -ms-flex-align: center !important;\n  align-items: center !important;\n}\n\n.align-items-baseline {\n  -ms-flex-align: baseline !important;\n  align-items: baseline !important;\n}\n\n.align-items-stretch {\n  -ms-flex-align: stretch !important;\n  align-items: stretch !important;\n}\n\n.align-content-start {\n  -ms-flex-line-pack: start !important;\n  align-content: flex-start !important;\n}\n\n.align-content-end {\n  -ms-flex-line-pack: end !important;\n  align-content: flex-end !important;\n}\n\n.align-content-center {\n  -ms-flex-line-pack: center !important;\n  align-content: center !important;\n}\n\n.align-content-between {\n  -ms-flex-line-pack: justify !important;\n  align-content: space-between !important;\n}\n\n.align-content-around {\n  -ms-flex-line-pack: distribute !important;\n  align-content: space-around !important;\n}\n\n.align-content-stretch {\n  -ms-flex-line-pack: stretch !important;\n  align-content: stretch !important;\n}\n\n.align-self-auto {\n  -ms-flex-item-align: auto !important;\n  align-self: auto !important;\n}\n\n.align-self-start {\n  -ms-flex-item-align: start !important;\n  align-self: flex-start !important;\n}\n\n.align-self-end {\n  -ms-flex-item-align: end !important;\n  align-self: flex-end !important;\n}\n\n.align-self-center {\n  -ms-flex-item-align: center !important;\n  align-self: center !important;\n}\n\n.align-self-baseline {\n  -ms-flex-item-align: baseline !important;\n  align-self: baseline !important;\n}\n\n.align-self-stretch {\n  -ms-flex-item-align: stretch !important;\n  align-self: stretch !important;\n}\n\n.order-first {\n  -ms-flex-order: -1 !important;\n  order: -1 !important;\n}\n\n.order-0 {\n  -ms-flex-order: 0 !important;\n  order: 0 !important;\n}\n\n.order-1 {\n  -ms-flex-order: 1 !important;\n  order: 1 !important;\n}\n\n.order-2 {\n  -ms-flex-order: 2 !important;\n  order: 2 !important;\n}\n\n.order-3 {\n  -ms-flex-order: 3 !important;\n  order: 3 !important;\n}\n\n.order-4 {\n  -ms-flex-order: 4 !important;\n  order: 4 !important;\n}\n\n.order-5 {\n  -ms-flex-order: 5 !important;\n  order: 5 !important;\n}\n\n.order-last {\n  -ms-flex-order: 6 !important;\n  order: 6 !important;\n}\n\n.m-0 {\n  margin: 0 !important;\n}\n\n.m-1 {\n  margin: 0.25rem !important;\n}\n\n.m-2 {\n  margin: 0.5rem !important;\n}\n\n.m-3 {\n  margin: 1rem !important;\n}\n\n.m-4 {\n  margin: 1.5rem !important;\n}\n\n.m-5 {\n  margin: 3rem !important;\n}\n\n.m-auto {\n  margin: auto !important;\n}\n\n.mx-0 {\n  margin-right: 0 !important;\n  margin-left: 0 !important;\n}\n\n.mx-1 {\n  margin-right: 0.25rem !important;\n  margin-left: 0.25rem !important;\n}\n\n.mx-2 {\n  margin-right: 0.5rem !important;\n  margin-left: 0.5rem !important;\n}\n\n.mx-3 {\n  margin-right: 1rem !important;\n  margin-left: 1rem !important;\n}\n\n.mx-4 {\n  margin-right: 1.5rem !important;\n  margin-left: 1.5rem !important;\n}\n\n.mx-5 {\n  margin-right: 3rem !important;\n  margin-left: 3rem !important;\n}\n\n.mx-auto {\n  margin-right: auto !important;\n  margin-left: auto !important;\n}\n\n.my-0 {\n  margin-top: 0 !important;\n  margin-bottom: 0 !important;\n}\n\n.my-1 {\n  margin-top: 0.25rem !important;\n  margin-bottom: 0.25rem !important;\n}\n\n.my-2 {\n  margin-top: 0.5rem !important;\n  margin-bottom: 0.5rem !important;\n}\n\n.my-3 {\n  margin-top: 1rem !important;\n  margin-bottom: 1rem !important;\n}\n\n.my-4 {\n  margin-top: 1.5rem !important;\n  margin-bottom: 1.5rem !important;\n}\n\n.my-5 {\n  margin-top: 3rem !important;\n  margin-bottom: 3rem !important;\n}\n\n.my-auto {\n  margin-top: auto !important;\n  margin-bottom: auto !important;\n}\n\n.mt-0 {\n  margin-top: 0 !important;\n}\n\n.mt-1 {\n  margin-top: 0.25rem !important;\n}\n\n.mt-2 {\n  margin-top: 0.5rem !important;\n}\n\n.mt-3 {\n  margin-top: 1rem !important;\n}\n\n.mt-4 {\n  margin-top: 1.5rem !important;\n}\n\n.mt-5 {\n  margin-top: 3rem !important;\n}\n\n.mt-auto {\n  margin-top: auto !important;\n}\n\n.me-0 {\n  margin-right: 0 !important;\n}\n\n.me-1 {\n  margin-right: 0.25rem !important;\n}\n\n.me-2 {\n  margin-right: 0.5rem !important;\n}\n\n.me-3 {\n  margin-right: 1rem !important;\n}\n\n.me-4 {\n  margin-right: 1.5rem !important;\n}\n\n.me-5 {\n  margin-right: 3rem !important;\n}\n\n.me-auto {\n  margin-right: auto !important;\n}\n\n.mb-0 {\n  margin-bottom: 0 !important;\n}\n\n.mb-1 {\n  margin-bottom: 0.25rem !important;\n}\n\n.mb-2 {\n  margin-bottom: 0.5rem !important;\n}\n\n.mb-3 {\n  margin-bottom: 1rem !important;\n}\n\n.mb-4 {\n  margin-bottom: 1.5rem !important;\n}\n\n.mb-5 {\n  margin-bottom: 3rem !important;\n}\n\n.mb-auto {\n  margin-bottom: auto !important;\n}\n\n.ms-0 {\n  margin-left: 0 !important;\n}\n\n.ms-1 {\n  margin-left: 0.25rem !important;\n}\n\n.ms-2 {\n  margin-left: 0.5rem !important;\n}\n\n.ms-3 {\n  margin-left: 1rem !important;\n}\n\n.ms-4 {\n  margin-left: 1.5rem !important;\n}\n\n.ms-5 {\n  margin-left: 3rem !important;\n}\n\n.ms-auto {\n  margin-left: auto !important;\n}\n\n.p-0 {\n  padding: 0 !important;\n}\n\n.p-1 {\n  padding: 0.25rem !important;\n}\n\n.p-2 {\n  padding: 0.5rem !important;\n}\n\n.p-3 {\n  padding: 1rem !important;\n}\n\n.p-4 {\n  padding: 1.5rem !important;\n}\n\n.p-5 {\n  padding: 3rem !important;\n}\n\n.px-0 {\n  padding-right: 0 !important;\n  padding-left: 0 !important;\n}\n\n.px-1 {\n  padding-right: 0.25rem !important;\n  padding-left: 0.25rem !important;\n}\n\n.px-2 {\n  padding-right: 0.5rem !important;\n  padding-left: 0.5rem !important;\n}\n\n.px-3 {\n  padding-right: 1rem !important;\n  padding-left: 1rem !important;\n}\n\n.px-4 {\n  padding-right: 1.5rem !important;\n  padding-left: 1.5rem !important;\n}\n\n.px-5 {\n  padding-right: 3rem !important;\n  padding-left: 3rem !important;\n}\n\n.py-0 {\n  padding-top: 0 !important;\n  padding-bottom: 0 !important;\n}\n\n.py-1 {\n  padding-top: 0.25rem !important;\n  padding-bottom: 0.25rem !important;\n}\n\n.py-2 {\n  padding-top: 0.5rem !important;\n  padding-bottom: 0.5rem !important;\n}\n\n.py-3 {\n  padding-top: 1rem !important;\n  padding-bottom: 1rem !important;\n}\n\n.py-4 {\n  padding-top: 1.5rem !important;\n  padding-bottom: 1.5rem !important;\n}\n\n.py-5 {\n  padding-top: 3rem !important;\n  padding-bottom: 3rem !important;\n}\n\n.pt-0 {\n  padding-top: 0 !important;\n}\n\n.pt-1 {\n  padding-top: 0.25rem !important;\n}\n\n.pt-2 {\n  padding-top: 0.5rem !important;\n}\n\n.pt-3 {\n  padding-top: 1rem !important;\n}\n\n.pt-4 {\n  padding-top: 1.5rem !important;\n}\n\n.pt-5 {\n  padding-top: 3rem !important;\n}\n\n.pe-0 {\n  padding-right: 0 !important;\n}\n\n.pe-1 {\n  padding-right: 0.25rem !important;\n}\n\n.pe-2 {\n  padding-right: 0.5rem !important;\n}\n\n.pe-3 {\n  padding-right: 1rem !important;\n}\n\n.pe-4 {\n  padding-right: 1.5rem !important;\n}\n\n.pe-5 {\n  padding-right: 3rem !important;\n}\n\n.pb-0 {\n  padding-bottom: 0 !important;\n}\n\n.pb-1 {\n  padding-bottom: 0.25rem !important;\n}\n\n.pb-2 {\n  padding-bottom: 0.5rem !important;\n}\n\n.pb-3 {\n  padding-bottom: 1rem !important;\n}\n\n.pb-4 {\n  padding-bottom: 1.5rem !important;\n}\n\n.pb-5 {\n  padding-bottom: 3rem !important;\n}\n\n.ps-0 {\n  padding-left: 0 !important;\n}\n\n.ps-1 {\n  padding-left: 0.25rem !important;\n}\n\n.ps-2 {\n  padding-left: 0.5rem !important;\n}\n\n.ps-3 {\n  padding-left: 1rem !important;\n}\n\n.ps-4 {\n  padding-left: 1.5rem !important;\n}\n\n.ps-5 {\n  padding-left: 3rem !important;\n}\n\n.font-monospace {\n  font-family: var(--bs-font-monospace) !important;\n}\n\n.fs-1 {\n  font-size: calc(1.375rem + 1.5vw) !important;\n}\n\n.fs-2 {\n  font-size: calc(1.325rem + 0.9vw) !important;\n}\n\n.fs-3 {\n  font-size: calc(1.3rem + 0.6vw) !important;\n}\n\n.fs-4 {\n  font-size: calc(1.275rem + 0.3vw) !important;\n}\n\n.fs-5 {\n  font-size: 1.25rem !important;\n}\n\n.fs-6 {\n  font-size: 1rem !important;\n}\n\n.fst-italic {\n  font-style: italic !important;\n}\n\n.fst-normal {\n  font-style: normal !important;\n}\n\n.fw-light {\n  font-weight: 300 !important;\n}\n\n.fw-lighter {\n  font-weight: lighter !important;\n}\n\n.fw-normal {\n  font-weight: 400 !important;\n}\n\n.fw-bold {\n  font-weight: 700 !important;\n}\n\n.fw-bolder {\n  font-weight: bolder !important;\n}\n\n.lh-1 {\n  line-height: 1 !important;\n}\n\n.lh-sm {\n  line-height: 1.25 !important;\n}\n\n.lh-base {\n  line-height: 1.5 !important;\n}\n\n.lh-lg {\n  line-height: 2 !important;\n}\n\n.text-start {\n  text-align: left !important;\n}\n\n.text-end {\n  text-align: right !important;\n}\n\n.text-center {\n  text-align: center !important;\n}\n\n.text-decoration-none {\n  text-decoration: none !important;\n}\n\n.text-decoration-underline {\n  text-decoration: underline !important;\n}\n\n.text-decoration-line-through {\n  text-decoration: line-through !important;\n}\n\n.text-lowercase {\n  text-transform: lowercase !important;\n}\n\n.text-uppercase {\n  text-transform: uppercase !important;\n}\n\n.text-capitalize {\n  text-transform: capitalize !important;\n}\n\n.text-wrap {\n  white-space: normal !important;\n}\n\n.text-nowrap {\n  white-space: nowrap !important;\n}\n\n/* rtl:begin:remove */\n.text-break {\n  word-wrap: break-word !important;\n  word-break: break-word !important;\n}\n\n/* rtl:end:remove */\n.text-primary {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-primary-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-secondary {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-secondary-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-success {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-success-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-info {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-info-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-warning {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-warning-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-danger {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-danger-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-light {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-light-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-dark {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-dark-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-black {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-black-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-white {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-white-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-body {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-body-color-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-muted {\n  --bs-text-opacity: 1;\n  color: #7a8288 !important;\n}\n\n.text-black-50 {\n  --bs-text-opacity: 1;\n  color: rgba(0, 0, 0, 0.5) !important;\n}\n\n.text-white-50 {\n  --bs-text-opacity: 1;\n  color: rgba(255, 255, 255, 0.5) !important;\n}\n\n.text-reset {\n  --bs-text-opacity: 1;\n  color: inherit !important;\n}\n\n.text-opacity-25 {\n  --bs-text-opacity: 0.25;\n}\n\n.text-opacity-50 {\n  --bs-text-opacity: 0.5;\n}\n\n.text-opacity-75 {\n  --bs-text-opacity: 0.75;\n}\n\n.text-opacity-100 {\n  --bs-text-opacity: 1;\n}\n\n.bg-primary {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-primary-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-secondary {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-secondary-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-success {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-success-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-info {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-info-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-warning {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-warning-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-danger {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-danger-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-light {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-light-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-dark {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-dark-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-black {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-black-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-white {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-white-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-body {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-body-bg-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-transparent {\n  --bs-bg-opacity: 1;\n  background-color: transparent !important;\n}\n\n.bg-opacity-10 {\n  --bs-bg-opacity: 0.1;\n}\n\n.bg-opacity-25 {\n  --bs-bg-opacity: 0.25;\n}\n\n.bg-opacity-50 {\n  --bs-bg-opacity: 0.5;\n}\n\n.bg-opacity-75 {\n  --bs-bg-opacity: 0.75;\n}\n\n.bg-opacity-100 {\n  --bs-bg-opacity: 1;\n}\n\n.bg-gradient {\n  background-image: var(--bs-gradient) !important;\n}\n\n.user-select-all {\n  -webkit-user-select: all !important;\n  -moz-user-select: all !important;\n  user-select: all !important;\n}\n\n.user-select-auto {\n  -webkit-user-select: auto !important;\n  -moz-user-select: auto !important;\n  -ms-user-select: auto !important;\n  user-select: auto !important;\n}\n\n.user-select-none {\n  -webkit-user-select: none !important;\n  -moz-user-select: none !important;\n  -ms-user-select: none !important;\n  user-select: none !important;\n}\n\n.pe-none {\n  pointer-events: none !important;\n}\n\n.pe-auto {\n  pointer-events: auto !important;\n}\n\n.rounded {\n  border-radius: 0.25rem !important;\n}\n\n.rounded-0 {\n  border-radius: 0 !important;\n}\n\n.rounded-1 {\n  border-radius: 0.2rem !important;\n}\n\n.rounded-2 {\n  border-radius: 0.25rem !important;\n}\n\n.rounded-3 {\n  border-radius: 0.3rem !important;\n}\n\n.rounded-circle {\n  border-radius: 50% !important;\n}\n\n.rounded-pill {\n  border-radius: 50rem !important;\n}\n\n.rounded-top {\n  border-top-left-radius: 0.25rem !important;\n  border-top-right-radius: 0.25rem !important;\n}\n\n.rounded-end {\n  border-top-right-radius: 0.25rem !important;\n  border-bottom-right-radius: 0.25rem !important;\n}\n\n.rounded-bottom {\n  border-bottom-right-radius: 0.25rem !important;\n  border-bottom-left-radius: 0.25rem !important;\n}\n\n.rounded-start {\n  border-bottom-left-radius: 0.25rem !important;\n  border-top-left-radius: 0.25rem !important;\n}\n\n.visible {\n  visibility: visible !important;\n}\n\n.invisible {\n  visibility: hidden !important;\n}\n\n@media (min-width: 576px) {\n  .float-sm-start {\n    float: left !important;\n  }\n  .float-sm-end {\n    float: right !important;\n  }\n  .float-sm-none {\n    float: none !important;\n  }\n  .d-sm-inline {\n    display: inline !important;\n  }\n  .d-sm-inline-block {\n    display: inline-block !important;\n  }\n  .d-sm-block {\n    display: block !important;\n  }\n  .d-sm-grid {\n    display: grid !important;\n  }\n  .d-sm-table {\n    display: table !important;\n  }\n  .d-sm-table-row {\n    display: table-row !important;\n  }\n  .d-sm-table-cell {\n    display: table-cell !important;\n  }\n  .d-sm-flex {\n    display: -ms-flexbox !important;\n    display: flex !important;\n  }\n  .d-sm-inline-flex {\n    display: -ms-inline-flexbox !important;\n    display: inline-flex !important;\n  }\n  .d-sm-none {\n    display: none !important;\n  }\n  .flex-sm-fill {\n    -ms-flex: 1 1 auto !important;\n    flex: 1 1 auto !important;\n  }\n  .flex-sm-row {\n    -ms-flex-direction: row !important;\n    flex-direction: row !important;\n  }\n  .flex-sm-column {\n    -ms-flex-direction: column !important;\n    flex-direction: column !important;\n  }\n  .flex-sm-row-reverse {\n    -ms-flex-direction: row-reverse !important;\n    flex-direction: row-reverse !important;\n  }\n  .flex-sm-column-reverse {\n    -ms-flex-direction: column-reverse !important;\n    flex-direction: column-reverse !important;\n  }\n  .flex-sm-grow-0 {\n    -ms-flex-positive: 0 !important;\n    flex-grow: 0 !important;\n  }\n  .flex-sm-grow-1 {\n    -ms-flex-positive: 1 !important;\n    flex-grow: 1 !important;\n  }\n  .flex-sm-shrink-0 {\n    -ms-flex-negative: 0 !important;\n    flex-shrink: 0 !important;\n  }\n  .flex-sm-shrink-1 {\n    -ms-flex-negative: 1 !important;\n    flex-shrink: 1 !important;\n  }\n  .flex-sm-wrap {\n    -ms-flex-wrap: wrap !important;\n    flex-wrap: wrap !important;\n  }\n  .flex-sm-nowrap {\n    -ms-flex-wrap: nowrap !important;\n    flex-wrap: nowrap !important;\n  }\n  .flex-sm-wrap-reverse {\n    -ms-flex-wrap: wrap-reverse !important;\n    flex-wrap: wrap-reverse !important;\n  }\n  .gap-sm-0 {\n    gap: 0 !important;\n  }\n  .gap-sm-1 {\n    gap: 0.25rem !important;\n  }\n  .gap-sm-2 {\n    gap: 0.5rem !important;\n  }\n  .gap-sm-3 {\n    gap: 1rem !important;\n  }\n  .gap-sm-4 {\n    gap: 1.5rem !important;\n  }\n  .gap-sm-5 {\n    gap: 3rem !important;\n  }\n  .justify-content-sm-start {\n    -ms-flex-pack: start !important;\n    justify-content: flex-start !important;\n  }\n  .justify-content-sm-end {\n    -ms-flex-pack: end !important;\n    justify-content: flex-end !important;\n  }\n  .justify-content-sm-center {\n    -ms-flex-pack: center !important;\n    justify-content: center !important;\n  }\n  .justify-content-sm-between {\n    -ms-flex-pack: justify !important;\n    justify-content: space-between !important;\n  }\n  .justify-content-sm-around {\n    -ms-flex-pack: distribute !important;\n    justify-content: space-around !important;\n  }\n  .justify-content-sm-evenly {\n    -ms-flex-pack: space-evenly !important;\n    justify-content: space-evenly !important;\n  }\n  .align-items-sm-start {\n    -ms-flex-align: start !important;\n    align-items: flex-start !important;\n  }\n  .align-items-sm-end {\n    -ms-flex-align: end !important;\n    align-items: flex-end !important;\n  }\n  .align-items-sm-center {\n    -ms-flex-align: center !important;\n    align-items: center !important;\n  }\n  .align-items-sm-baseline {\n    -ms-flex-align: baseline !important;\n    align-items: baseline !important;\n  }\n  .align-items-sm-stretch {\n    -ms-flex-align: stretch !important;\n    align-items: stretch !important;\n  }\n  .align-content-sm-start {\n    -ms-flex-line-pack: start !important;\n    align-content: flex-start !important;\n  }\n  .align-content-sm-end {\n    -ms-flex-line-pack: end !important;\n    align-content: flex-end !important;\n  }\n  .align-content-sm-center {\n    -ms-flex-line-pack: center !important;\n    align-content: center !important;\n  }\n  .align-content-sm-between {\n    -ms-flex-line-pack: justify !important;\n    align-content: space-between !important;\n  }\n  .align-content-sm-around {\n    -ms-flex-line-pack: distribute !important;\n    align-content: space-around !important;\n  }\n  .align-content-sm-stretch {\n    -ms-flex-line-pack: stretch !important;\n    align-content: stretch !important;\n  }\n  .align-self-sm-auto {\n    -ms-flex-item-align: auto !important;\n    align-self: auto !important;\n  }\n  .align-self-sm-start {\n    -ms-flex-item-align: start !important;\n    align-self: flex-start !important;\n  }\n  .align-self-sm-end {\n    -ms-flex-item-align: end !important;\n    align-self: flex-end !important;\n  }\n  .align-self-sm-center {\n    -ms-flex-item-align: center !important;\n    align-self: center !important;\n  }\n  .align-self-sm-baseline {\n    -ms-flex-item-align: baseline !important;\n    align-self: baseline !important;\n  }\n  .align-self-sm-stretch {\n    -ms-flex-item-align: stretch !important;\n    align-self: stretch !important;\n  }\n  .order-sm-first {\n    -ms-flex-order: -1 !important;\n    order: -1 !important;\n  }\n  .order-sm-0 {\n    -ms-flex-order: 0 !important;\n    order: 0 !important;\n  }\n  .order-sm-1 {\n    -ms-flex-order: 1 !important;\n    order: 1 !important;\n  }\n  .order-sm-2 {\n    -ms-flex-order: 2 !important;\n    order: 2 !important;\n  }\n  .order-sm-3 {\n    -ms-flex-order: 3 !important;\n    order: 3 !important;\n  }\n  .order-sm-4 {\n    -ms-flex-order: 4 !important;\n    order: 4 !important;\n  }\n  .order-sm-5 {\n    -ms-flex-order: 5 !important;\n    order: 5 !important;\n  }\n  .order-sm-last {\n    -ms-flex-order: 6 !important;\n    order: 6 !important;\n  }\n  .m-sm-0 {\n    margin: 0 !important;\n  }\n  .m-sm-1 {\n    margin: 0.25rem !important;\n  }\n  .m-sm-2 {\n    margin: 0.5rem !important;\n  }\n  .m-sm-3 {\n    margin: 1rem !important;\n  }\n  .m-sm-4 {\n    margin: 1.5rem !important;\n  }\n  .m-sm-5 {\n    margin: 3rem !important;\n  }\n  .m-sm-auto {\n    margin: auto !important;\n  }\n  .mx-sm-0 {\n    margin-right: 0 !important;\n    margin-left: 0 !important;\n  }\n  .mx-sm-1 {\n    margin-right: 0.25rem !important;\n    margin-left: 0.25rem !important;\n  }\n  .mx-sm-2 {\n    margin-right: 0.5rem !important;\n    margin-left: 0.5rem !important;\n  }\n  .mx-sm-3 {\n    margin-right: 1rem !important;\n    margin-left: 1rem !important;\n  }\n  .mx-sm-4 {\n    margin-right: 1.5rem !important;\n    margin-left: 1.5rem !important;\n  }\n  .mx-sm-5 {\n    margin-right: 3rem !important;\n    margin-left: 3rem !important;\n  }\n  .mx-sm-auto {\n    margin-right: auto !important;\n    margin-left: auto !important;\n  }\n  .my-sm-0 {\n    margin-top: 0 !important;\n    margin-bottom: 0 !important;\n  }\n  .my-sm-1 {\n    margin-top: 0.25rem !important;\n    margin-bottom: 0.25rem !important;\n  }\n  .my-sm-2 {\n    margin-top: 0.5rem !important;\n    margin-bottom: 0.5rem !important;\n  }\n  .my-sm-3 {\n    margin-top: 1rem !important;\n    margin-bottom: 1rem !important;\n  }\n  .my-sm-4 {\n    margin-top: 1.5rem !important;\n    margin-bottom: 1.5rem !important;\n  }\n  .my-sm-5 {\n    margin-top: 3rem !important;\n    margin-bottom: 3rem !important;\n  }\n  .my-sm-auto {\n    margin-top: auto !important;\n    margin-bottom: auto !important;\n  }\n  .mt-sm-0 {\n    margin-top: 0 !important;\n  }\n  .mt-sm-1 {\n    margin-top: 0.25rem !important;\n  }\n  .mt-sm-2 {\n    margin-top: 0.5rem !important;\n  }\n  .mt-sm-3 {\n    margin-top: 1rem !important;\n  }\n  .mt-sm-4 {\n    margin-top: 1.5rem !important;\n  }\n  .mt-sm-5 {\n    margin-top: 3rem !important;\n  }\n  .mt-sm-auto {\n    margin-top: auto !important;\n  }\n  .me-sm-0 {\n    margin-right: 0 !important;\n  }\n  .me-sm-1 {\n    margin-right: 0.25rem !important;\n  }\n  .me-sm-2 {\n    margin-right: 0.5rem !important;\n  }\n  .me-sm-3 {\n    margin-right: 1rem !important;\n  }\n  .me-sm-4 {\n    margin-right: 1.5rem !important;\n  }\n  .me-sm-5 {\n    margin-right: 3rem !important;\n  }\n  .me-sm-auto {\n    margin-right: auto !important;\n  }\n  .mb-sm-0 {\n    margin-bottom: 0 !important;\n  }\n  .mb-sm-1 {\n    margin-bottom: 0.25rem !important;\n  }\n  .mb-sm-2 {\n    margin-bottom: 0.5rem !important;\n  }\n  .mb-sm-3 {\n    margin-bottom: 1rem !important;\n  }\n  .mb-sm-4 {\n    margin-bottom: 1.5rem !important;\n  }\n  .mb-sm-5 {\n    margin-bottom: 3rem !important;\n  }\n  .mb-sm-auto {\n    margin-bottom: auto !important;\n  }\n  .ms-sm-0 {\n    margin-left: 0 !important;\n  }\n  .ms-sm-1 {\n    margin-left: 0.25rem !important;\n  }\n  .ms-sm-2 {\n    margin-left: 0.5rem !important;\n  }\n  .ms-sm-3 {\n    margin-left: 1rem !important;\n  }\n  .ms-sm-4 {\n    margin-left: 1.5rem !important;\n  }\n  .ms-sm-5 {\n    margin-left: 3rem !important;\n  }\n  .ms-sm-auto {\n    margin-left: auto !important;\n  }\n  .p-sm-0 {\n    padding: 0 !important;\n  }\n  .p-sm-1 {\n    padding: 0.25rem !important;\n  }\n  .p-sm-2 {\n    padding: 0.5rem !important;\n  }\n  .p-sm-3 {\n    padding: 1rem !important;\n  }\n  .p-sm-4 {\n    padding: 1.5rem !important;\n  }\n  .p-sm-5 {\n    padding: 3rem !important;\n  }\n  .px-sm-0 {\n    padding-right: 0 !important;\n    padding-left: 0 !important;\n  }\n  .px-sm-1 {\n    padding-right: 0.25rem !important;\n    padding-left: 0.25rem !important;\n  }\n  .px-sm-2 {\n    padding-right: 0.5rem !important;\n    padding-left: 0.5rem !important;\n  }\n  .px-sm-3 {\n    padding-right: 1rem !important;\n    padding-left: 1rem !important;\n  }\n  .px-sm-4 {\n    padding-right: 1.5rem !important;\n    padding-left: 1.5rem !important;\n  }\n  .px-sm-5 {\n    padding-right: 3rem !important;\n    padding-left: 3rem !important;\n  }\n  .py-sm-0 {\n    padding-top: 0 !important;\n    padding-bottom: 0 !important;\n  }\n  .py-sm-1 {\n    padding-top: 0.25rem !important;\n    padding-bottom: 0.25rem !important;\n  }\n  .py-sm-2 {\n    padding-top: 0.5rem !important;\n    padding-bottom: 0.5rem !important;\n  }\n  .py-sm-3 {\n    padding-top: 1rem !important;\n    padding-bottom: 1rem !important;\n  }\n  .py-sm-4 {\n    padding-top: 1.5rem !important;\n    padding-bottom: 1.5rem !important;\n  }\n  .py-sm-5 {\n    padding-top: 3rem !important;\n    padding-bottom: 3rem !important;\n  }\n  .pt-sm-0 {\n    padding-top: 0 !important;\n  }\n  .pt-sm-1 {\n    padding-top: 0.25rem !important;\n  }\n  .pt-sm-2 {\n    padding-top: 0.5rem !important;\n  }\n  .pt-sm-3 {\n    padding-top: 1rem !important;\n  }\n  .pt-sm-4 {\n    padding-top: 1.5rem !important;\n  }\n  .pt-sm-5 {\n    padding-top: 3rem !important;\n  }\n  .pe-sm-0 {\n    padding-right: 0 !important;\n  }\n  .pe-sm-1 {\n    padding-right: 0.25rem !important;\n  }\n  .pe-sm-2 {\n    padding-right: 0.5rem !important;\n  }\n  .pe-sm-3 {\n    padding-right: 1rem !important;\n  }\n  .pe-sm-4 {\n    padding-right: 1.5rem !important;\n  }\n  .pe-sm-5 {\n    padding-right: 3rem !important;\n  }\n  .pb-sm-0 {\n    padding-bottom: 0 !important;\n  }\n  .pb-sm-1 {\n    padding-bottom: 0.25rem !important;\n  }\n  .pb-sm-2 {\n    padding-bottom: 0.5rem !important;\n  }\n  .pb-sm-3 {\n    padding-bottom: 1rem !important;\n  }\n  .pb-sm-4 {\n    padding-bottom: 1.5rem !important;\n  }\n  .pb-sm-5 {\n    padding-bottom: 3rem !important;\n  }\n  .ps-sm-0 {\n    padding-left: 0 !important;\n  }\n  .ps-sm-1 {\n    padding-left: 0.25rem !important;\n  }\n  .ps-sm-2 {\n    padding-left: 0.5rem !important;\n  }\n  .ps-sm-3 {\n    padding-left: 1rem !important;\n  }\n  .ps-sm-4 {\n    padding-left: 1.5rem !important;\n  }\n  .ps-sm-5 {\n    padding-left: 3rem !important;\n  }\n  .text-sm-start {\n    text-align: left !important;\n  }\n  .text-sm-end {\n    text-align: right !important;\n  }\n  .text-sm-center {\n    text-align: center !important;\n  }\n}\n\n@media (min-width: 768px) {\n  .float-md-start {\n    float: left !important;\n  }\n  .float-md-end {\n    float: right !important;\n  }\n  .float-md-none {\n    float: none !important;\n  }\n  .d-md-inline {\n    display: inline !important;\n  }\n  .d-md-inline-block {\n    display: inline-block !important;\n  }\n  .d-md-block {\n    display: block !important;\n  }\n  .d-md-grid {\n    display: grid !important;\n  }\n  .d-md-table {\n    display: table !important;\n  }\n  .d-md-table-row {\n    display: table-row !important;\n  }\n  .d-md-table-cell {\n    display: table-cell !important;\n  }\n  .d-md-flex {\n    display: -ms-flexbox !important;\n    display: flex !important;\n  }\n  .d-md-inline-flex {\n    display: -ms-inline-flexbox !important;\n    display: inline-flex !important;\n  }\n  .d-md-none {\n    display: none !important;\n  }\n  .flex-md-fill {\n    -ms-flex: 1 1 auto !important;\n    flex: 1 1 auto !important;\n  }\n  .flex-md-row {\n    -ms-flex-direction: row !important;\n    flex-direction: row !important;\n  }\n  .flex-md-column {\n    -ms-flex-direction: column !important;\n    flex-direction: column !important;\n  }\n  .flex-md-row-reverse {\n    -ms-flex-direction: row-reverse !important;\n    flex-direction: row-reverse !important;\n  }\n  .flex-md-column-reverse {\n    -ms-flex-direction: column-reverse !important;\n    flex-direction: column-reverse !important;\n  }\n  .flex-md-grow-0 {\n    -ms-flex-positive: 0 !important;\n    flex-grow: 0 !important;\n  }\n  .flex-md-grow-1 {\n    -ms-flex-positive: 1 !important;\n    flex-grow: 1 !important;\n  }\n  .flex-md-shrink-0 {\n    -ms-flex-negative: 0 !important;\n    flex-shrink: 0 !important;\n  }\n  .flex-md-shrink-1 {\n    -ms-flex-negative: 1 !important;\n    flex-shrink: 1 !important;\n  }\n  .flex-md-wrap {\n    -ms-flex-wrap: wrap !important;\n    flex-wrap: wrap !important;\n  }\n  .flex-md-nowrap {\n    -ms-flex-wrap: nowrap !important;\n    flex-wrap: nowrap !important;\n  }\n  .flex-md-wrap-reverse {\n    -ms-flex-wrap: wrap-reverse !important;\n    flex-wrap: wrap-reverse !important;\n  }\n  .gap-md-0 {\n    gap: 0 !important;\n  }\n  .gap-md-1 {\n    gap: 0.25rem !important;\n  }\n  .gap-md-2 {\n    gap: 0.5rem !important;\n  }\n  .gap-md-3 {\n    gap: 1rem !important;\n  }\n  .gap-md-4 {\n    gap: 1.5rem !important;\n  }\n  .gap-md-5 {\n    gap: 3rem !important;\n  }\n  .justify-content-md-start {\n    -ms-flex-pack: start !important;\n    justify-content: flex-start !important;\n  }\n  .justify-content-md-end {\n    -ms-flex-pack: end !important;\n    justify-content: flex-end !important;\n  }\n  .justify-content-md-center {\n    -ms-flex-pack: center !important;\n    justify-content: center !important;\n  }\n  .justify-content-md-between {\n    -ms-flex-pack: justify !important;\n    justify-content: space-between !important;\n  }\n  .justify-content-md-around {\n    -ms-flex-pack: distribute !important;\n    justify-content: space-around !important;\n  }\n  .justify-content-md-evenly {\n    -ms-flex-pack: space-evenly !important;\n    justify-content: space-evenly !important;\n  }\n  .align-items-md-start {\n    -ms-flex-align: start !important;\n    align-items: flex-start !important;\n  }\n  .align-items-md-end {\n    -ms-flex-align: end !important;\n    align-items: flex-end !important;\n  }\n  .align-items-md-center {\n    -ms-flex-align: center !important;\n    align-items: center !important;\n  }\n  .align-items-md-baseline {\n    -ms-flex-align: baseline !important;\n    align-items: baseline !important;\n  }\n  .align-items-md-stretch {\n    -ms-flex-align: stretch !important;\n    align-items: stretch !important;\n  }\n  .align-content-md-start {\n    -ms-flex-line-pack: start !important;\n    align-content: flex-start !important;\n  }\n  .align-content-md-end {\n    -ms-flex-line-pack: end !important;\n    align-content: flex-end !important;\n  }\n  .align-content-md-center {\n    -ms-flex-line-pack: center !important;\n    align-content: center !important;\n  }\n  .align-content-md-between {\n    -ms-flex-line-pack: justify !important;\n    align-content: space-between !important;\n  }\n  .align-content-md-around {\n    -ms-flex-line-pack: distribute !important;\n    align-content: space-around !important;\n  }\n  .align-content-md-stretch {\n    -ms-flex-line-pack: stretch !important;\n    align-content: stretch !important;\n  }\n  .align-self-md-auto {\n    -ms-flex-item-align: auto !important;\n    align-self: auto !important;\n  }\n  .align-self-md-start {\n    -ms-flex-item-align: start !important;\n    align-self: flex-start !important;\n  }\n  .align-self-md-end {\n    -ms-flex-item-align: end !important;\n    align-self: flex-end !important;\n  }\n  .align-self-md-center {\n    -ms-flex-item-align: center !important;\n    align-self: center !important;\n  }\n  .align-self-md-baseline {\n    -ms-flex-item-align: baseline !important;\n    align-self: baseline !important;\n  }\n  .align-self-md-stretch {\n    -ms-flex-item-align: stretch !important;\n    align-self: stretch !important;\n  }\n  .order-md-first {\n    -ms-flex-order: -1 !important;\n    order: -1 !important;\n  }\n  .order-md-0 {\n    -ms-flex-order: 0 !important;\n    order: 0 !important;\n  }\n  .order-md-1 {\n    -ms-flex-order: 1 !important;\n    order: 1 !important;\n  }\n  .order-md-2 {\n    -ms-flex-order: 2 !important;\n    order: 2 !important;\n  }\n  .order-md-3 {\n    -ms-flex-order: 3 !important;\n    order: 3 !important;\n  }\n  .order-md-4 {\n    -ms-flex-order: 4 !important;\n    order: 4 !important;\n  }\n  .order-md-5 {\n    -ms-flex-order: 5 !important;\n    order: 5 !important;\n  }\n  .order-md-last {\n    -ms-flex-order: 6 !important;\n    order: 6 !important;\n  }\n  .m-md-0 {\n    margin: 0 !important;\n  }\n  .m-md-1 {\n    margin: 0.25rem !important;\n  }\n  .m-md-2 {\n    margin: 0.5rem !important;\n  }\n  .m-md-3 {\n    margin: 1rem !important;\n  }\n  .m-md-4 {\n    margin: 1.5rem !important;\n  }\n  .m-md-5 {\n    margin: 3rem !important;\n  }\n  .m-md-auto {\n    margin: auto !important;\n  }\n  .mx-md-0 {\n    margin-right: 0 !important;\n    margin-left: 0 !important;\n  }\n  .mx-md-1 {\n    margin-right: 0.25rem !important;\n    margin-left: 0.25rem !important;\n  }\n  .mx-md-2 {\n    margin-right: 0.5rem !important;\n    margin-left: 0.5rem !important;\n  }\n  .mx-md-3 {\n    margin-right: 1rem !important;\n    margin-left: 1rem !important;\n  }\n  .mx-md-4 {\n    margin-right: 1.5rem !important;\n    margin-left: 1.5rem !important;\n  }\n  .mx-md-5 {\n    margin-right: 3rem !important;\n    margin-left: 3rem !important;\n  }\n  .mx-md-auto {\n    margin-right: auto !important;\n    margin-left: auto !important;\n  }\n  .my-md-0 {\n    margin-top: 0 !important;\n    margin-bottom: 0 !important;\n  }\n  .my-md-1 {\n    margin-top: 0.25rem !important;\n    margin-bottom: 0.25rem !important;\n  }\n  .my-md-2 {\n    margin-top: 0.5rem !important;\n    margin-bottom: 0.5rem !important;\n  }\n  .my-md-3 {\n    margin-top: 1rem !important;\n    margin-bottom: 1rem !important;\n  }\n  .my-md-4 {\n    margin-top: 1.5rem !important;\n    margin-bottom: 1.5rem !important;\n  }\n  .my-md-5 {\n    margin-top: 3rem !important;\n    margin-bottom: 3rem !important;\n  }\n  .my-md-auto {\n    margin-top: auto !important;\n    margin-bottom: auto !important;\n  }\n  .mt-md-0 {\n    margin-top: 0 !important;\n  }\n  .mt-md-1 {\n    margin-top: 0.25rem !important;\n  }\n  .mt-md-2 {\n    margin-top: 0.5rem !important;\n  }\n  .mt-md-3 {\n    margin-top: 1rem !important;\n  }\n  .mt-md-4 {\n    margin-top: 1.5rem !important;\n  }\n  .mt-md-5 {\n    margin-top: 3rem !important;\n  }\n  .mt-md-auto {\n    margin-top: auto !important;\n  }\n  .me-md-0 {\n    margin-right: 0 !important;\n  }\n  .me-md-1 {\n    margin-right: 0.25rem !important;\n  }\n  .me-md-2 {\n    margin-right: 0.5rem !important;\n  }\n  .me-md-3 {\n    margin-right: 1rem !important;\n  }\n  .me-md-4 {\n    margin-right: 1.5rem !important;\n  }\n  .me-md-5 {\n    margin-right: 3rem !important;\n  }\n  .me-md-auto {\n    margin-right: auto !important;\n  }\n  .mb-md-0 {\n    margin-bottom: 0 !important;\n  }\n  .mb-md-1 {\n    margin-bottom: 0.25rem !important;\n  }\n  .mb-md-2 {\n    margin-bottom: 0.5rem !important;\n  }\n  .mb-md-3 {\n    margin-bottom: 1rem !important;\n  }\n  .mb-md-4 {\n    margin-bottom: 1.5rem !important;\n  }\n  .mb-md-5 {\n    margin-bottom: 3rem !important;\n  }\n  .mb-md-auto {\n    margin-bottom: auto !important;\n  }\n  .ms-md-0 {\n    margin-left: 0 !important;\n  }\n  .ms-md-1 {\n    margin-left: 0.25rem !important;\n  }\n  .ms-md-2 {\n    margin-left: 0.5rem !important;\n  }\n  .ms-md-3 {\n    margin-left: 1rem !important;\n  }\n  .ms-md-4 {\n    margin-left: 1.5rem !important;\n  }\n  .ms-md-5 {\n    margin-left: 3rem !important;\n  }\n  .ms-md-auto {\n    margin-left: auto !important;\n  }\n  .p-md-0 {\n    padding: 0 !important;\n  }\n  .p-md-1 {\n    padding: 0.25rem !important;\n  }\n  .p-md-2 {\n    padding: 0.5rem !important;\n  }\n  .p-md-3 {\n    padding: 1rem !important;\n  }\n  .p-md-4 {\n    padding: 1.5rem !important;\n  }\n  .p-md-5 {\n    padding: 3rem !important;\n  }\n  .px-md-0 {\n    padding-right: 0 !important;\n    padding-left: 0 !important;\n  }\n  .px-md-1 {\n    padding-right: 0.25rem !important;\n    padding-left: 0.25rem !important;\n  }\n  .px-md-2 {\n    padding-right: 0.5rem !important;\n    padding-left: 0.5rem !important;\n  }\n  .px-md-3 {\n    padding-right: 1rem !important;\n    padding-left: 1rem !important;\n  }\n  .px-md-4 {\n    padding-right: 1.5rem !important;\n    padding-left: 1.5rem !important;\n  }\n  .px-md-5 {\n    padding-right: 3rem !important;\n    padding-left: 3rem !important;\n  }\n  .py-md-0 {\n    padding-top: 0 !important;\n    padding-bottom: 0 !important;\n  }\n  .py-md-1 {\n    padding-top: 0.25rem !important;\n    padding-bottom: 0.25rem !important;\n  }\n  .py-md-2 {\n    padding-top: 0.5rem !important;\n    padding-bottom: 0.5rem !important;\n  }\n  .py-md-3 {\n    padding-top: 1rem !important;\n    padding-bottom: 1rem !important;\n  }\n  .py-md-4 {\n    padding-top: 1.5rem !important;\n    padding-bottom: 1.5rem !important;\n  }\n  .py-md-5 {\n    padding-top: 3rem !important;\n    padding-bottom: 3rem !important;\n  }\n  .pt-md-0 {\n    padding-top: 0 !important;\n  }\n  .pt-md-1 {\n    padding-top: 0.25rem !important;\n  }\n  .pt-md-2 {\n    padding-top: 0.5rem !important;\n  }\n  .pt-md-3 {\n    padding-top: 1rem !important;\n  }\n  .pt-md-4 {\n    padding-top: 1.5rem !important;\n  }\n  .pt-md-5 {\n    padding-top: 3rem !important;\n  }\n  .pe-md-0 {\n    padding-right: 0 !important;\n  }\n  .pe-md-1 {\n    padding-right: 0.25rem !important;\n  }\n  .pe-md-2 {\n    padding-right: 0.5rem !important;\n  }\n  .pe-md-3 {\n    padding-right: 1rem !important;\n  }\n  .pe-md-4 {\n    padding-right: 1.5rem !important;\n  }\n  .pe-md-5 {\n    padding-right: 3rem !important;\n  }\n  .pb-md-0 {\n    padding-bottom: 0 !important;\n  }\n  .pb-md-1 {\n    padding-bottom: 0.25rem !important;\n  }\n  .pb-md-2 {\n    padding-bottom: 0.5rem !important;\n  }\n  .pb-md-3 {\n    padding-bottom: 1rem !important;\n  }\n  .pb-md-4 {\n    padding-bottom: 1.5rem !important;\n  }\n  .pb-md-5 {\n    padding-bottom: 3rem !important;\n  }\n  .ps-md-0 {\n    padding-left: 0 !important;\n  }\n  .ps-md-1 {\n    padding-left: 0.25rem !important;\n  }\n  .ps-md-2 {\n    padding-left: 0.5rem !important;\n  }\n  .ps-md-3 {\n    padding-left: 1rem !important;\n  }\n  .ps-md-4 {\n    padding-left: 1.5rem !important;\n  }\n  .ps-md-5 {\n    padding-left: 3rem !important;\n  }\n  .text-md-start {\n    text-align: left !important;\n  }\n  .text-md-end {\n    text-align: right !important;\n  }\n  .text-md-center {\n    text-align: center !important;\n  }\n}\n\n@media (min-width: 992px) {\n  .float-lg-start {\n    float: left !important;\n  }\n  .float-lg-end {\n    float: right !important;\n  }\n  .float-lg-none {\n    float: none !important;\n  }\n  .d-lg-inline {\n    display: inline !important;\n  }\n  .d-lg-inline-block {\n    display: inline-block !important;\n  }\n  .d-lg-block {\n    display: block !important;\n  }\n  .d-lg-grid {\n    display: grid !important;\n  }\n  .d-lg-table {\n    display: table !important;\n  }\n  .d-lg-table-row {\n    display: table-row !important;\n  }\n  .d-lg-table-cell {\n    display: table-cell !important;\n  }\n  .d-lg-flex {\n    display: -ms-flexbox !important;\n    display: flex !important;\n  }\n  .d-lg-inline-flex {\n    display: -ms-inline-flexbox !important;\n    display: inline-flex !important;\n  }\n  .d-lg-none {\n    display: none !important;\n  }\n  .flex-lg-fill {\n    -ms-flex: 1 1 auto !important;\n    flex: 1 1 auto !important;\n  }\n  .flex-lg-row {\n    -ms-flex-direction: row !important;\n    flex-direction: row !important;\n  }\n  .flex-lg-column {\n    -ms-flex-direction: column !important;\n    flex-direction: column !important;\n  }\n  .flex-lg-row-reverse {\n    -ms-flex-direction: row-reverse !important;\n    flex-direction: row-reverse !important;\n  }\n  .flex-lg-column-reverse {\n    -ms-flex-direction: column-reverse !important;\n    flex-direction: column-reverse !important;\n  }\n  .flex-lg-grow-0 {\n    -ms-flex-positive: 0 !important;\n    flex-grow: 0 !important;\n  }\n  .flex-lg-grow-1 {\n    -ms-flex-positive: 1 !important;\n    flex-grow: 1 !important;\n  }\n  .flex-lg-shrink-0 {\n    -ms-flex-negative: 0 !important;\n    flex-shrink: 0 !important;\n  }\n  .flex-lg-shrink-1 {\n    -ms-flex-negative: 1 !important;\n    flex-shrink: 1 !important;\n  }\n  .flex-lg-wrap {\n    -ms-flex-wrap: wrap !important;\n    flex-wrap: wrap !important;\n  }\n  .flex-lg-nowrap {\n    -ms-flex-wrap: nowrap !important;\n    flex-wrap: nowrap !important;\n  }\n  .flex-lg-wrap-reverse {\n    -ms-flex-wrap: wrap-reverse !important;\n    flex-wrap: wrap-reverse !important;\n  }\n  .gap-lg-0 {\n    gap: 0 !important;\n  }\n  .gap-lg-1 {\n    gap: 0.25rem !important;\n  }\n  .gap-lg-2 {\n    gap: 0.5rem !important;\n  }\n  .gap-lg-3 {\n    gap: 1rem !important;\n  }\n  .gap-lg-4 {\n    gap: 1.5rem !important;\n  }\n  .gap-lg-5 {\n    gap: 3rem !important;\n  }\n  .justify-content-lg-start {\n    -ms-flex-pack: start !important;\n    justify-content: flex-start !important;\n  }\n  .justify-content-lg-end {\n    -ms-flex-pack: end !important;\n    justify-content: flex-end !important;\n  }\n  .justify-content-lg-center {\n    -ms-flex-pack: center !important;\n    justify-content: center !important;\n  }\n  .justify-content-lg-between {\n    -ms-flex-pack: justify !important;\n    justify-content: space-between !important;\n  }\n  .justify-content-lg-around {\n    -ms-flex-pack: distribute !important;\n    justify-content: space-around !important;\n  }\n  .justify-content-lg-evenly {\n    -ms-flex-pack: space-evenly !important;\n    justify-content: space-evenly !important;\n  }\n  .align-items-lg-start {\n    -ms-flex-align: start !important;\n    align-items: flex-start !important;\n  }\n  .align-items-lg-end {\n    -ms-flex-align: end !important;\n    align-items: flex-end !important;\n  }\n  .align-items-lg-center {\n    -ms-flex-align: center !important;\n    align-items: center !important;\n  }\n  .align-items-lg-baseline {\n    -ms-flex-align: baseline !important;\n    align-items: baseline !important;\n  }\n  .align-items-lg-stretch {\n    -ms-flex-align: stretch !important;\n    align-items: stretch !important;\n  }\n  .align-content-lg-start {\n    -ms-flex-line-pack: start !important;\n    align-content: flex-start !important;\n  }\n  .align-content-lg-end {\n    -ms-flex-line-pack: end !important;\n    align-content: flex-end !important;\n  }\n  .align-content-lg-center {\n    -ms-flex-line-pack: center !important;\n    align-content: center !important;\n  }\n  .align-content-lg-between {\n    -ms-flex-line-pack: justify !important;\n    align-content: space-between !important;\n  }\n  .align-content-lg-around {\n    -ms-flex-line-pack: distribute !important;\n    align-content: space-around !important;\n  }\n  .align-content-lg-stretch {\n    -ms-flex-line-pack: stretch !important;\n    align-content: stretch !important;\n  }\n  .align-self-lg-auto {\n    -ms-flex-item-align: auto !important;\n    align-self: auto !important;\n  }\n  .align-self-lg-start {\n    -ms-flex-item-align: start !important;\n    align-self: flex-start !important;\n  }\n  .align-self-lg-end {\n    -ms-flex-item-align: end !important;\n    align-self: flex-end !important;\n  }\n  .align-self-lg-center {\n    -ms-flex-item-align: center !important;\n    align-self: center !important;\n  }\n  .align-self-lg-baseline {\n    -ms-flex-item-align: baseline !important;\n    align-self: baseline !important;\n  }\n  .align-self-lg-stretch {\n    -ms-flex-item-align: stretch !important;\n    align-self: stretch !important;\n  }\n  .order-lg-first {\n    -ms-flex-order: -1 !important;\n    order: -1 !important;\n  }\n  .order-lg-0 {\n    -ms-flex-order: 0 !important;\n    order: 0 !important;\n  }\n  .order-lg-1 {\n    -ms-flex-order: 1 !important;\n    order: 1 !important;\n  }\n  .order-lg-2 {\n    -ms-flex-order: 2 !important;\n    order: 2 !important;\n  }\n  .order-lg-3 {\n    -ms-flex-order: 3 !important;\n    order: 3 !important;\n  }\n  .order-lg-4 {\n    -ms-flex-order: 4 !important;\n    order: 4 !important;\n  }\n  .order-lg-5 {\n    -ms-flex-order: 5 !important;\n    order: 5 !important;\n  }\n  .order-lg-last {\n    -ms-flex-order: 6 !important;\n    order: 6 !important;\n  }\n  .m-lg-0 {\n    margin: 0 !important;\n  }\n  .m-lg-1 {\n    margin: 0.25rem !important;\n  }\n  .m-lg-2 {\n    margin: 0.5rem !important;\n  }\n  .m-lg-3 {\n    margin: 1rem !important;\n  }\n  .m-lg-4 {\n    margin: 1.5rem !important;\n  }\n  .m-lg-5 {\n    margin: 3rem !important;\n  }\n  .m-lg-auto {\n    margin: auto !important;\n  }\n  .mx-lg-0 {\n    margin-right: 0 !important;\n    margin-left: 0 !important;\n  }\n  .mx-lg-1 {\n    margin-right: 0.25rem !important;\n    margin-left: 0.25rem !important;\n  }\n  .mx-lg-2 {\n    margin-right: 0.5rem !important;\n    margin-left: 0.5rem !important;\n  }\n  .mx-lg-3 {\n    margin-right: 1rem !important;\n    margin-left: 1rem !important;\n  }\n  .mx-lg-4 {\n    margin-right: 1.5rem !important;\n    margin-left: 1.5rem !important;\n  }\n  .mx-lg-5 {\n    margin-right: 3rem !important;\n    margin-left: 3rem !important;\n  }\n  .mx-lg-auto {\n    margin-right: auto !important;\n    margin-left: auto !important;\n  }\n  .my-lg-0 {\n    margin-top: 0 !important;\n    margin-bottom: 0 !important;\n  }\n  .my-lg-1 {\n    margin-top: 0.25rem !important;\n    margin-bottom: 0.25rem !important;\n  }\n  .my-lg-2 {\n    margin-top: 0.5rem !important;\n    margin-bottom: 0.5rem !important;\n  }\n  .my-lg-3 {\n    margin-top: 1rem !important;\n    margin-bottom: 1rem !important;\n  }\n  .my-lg-4 {\n    margin-top: 1.5rem !important;\n    margin-bottom: 1.5rem !important;\n  }\n  .my-lg-5 {\n    margin-top: 3rem !important;\n    margin-bottom: 3rem !important;\n  }\n  .my-lg-auto {\n    margin-top: auto !important;\n    margin-bottom: auto !important;\n  }\n  .mt-lg-0 {\n    margin-top: 0 !important;\n  }\n  .mt-lg-1 {\n    margin-top: 0.25rem !important;\n  }\n  .mt-lg-2 {\n    margin-top: 0.5rem !important;\n  }\n  .mt-lg-3 {\n    margin-top: 1rem !important;\n  }\n  .mt-lg-4 {\n    margin-top: 1.5rem !important;\n  }\n  .mt-lg-5 {\n    margin-top: 3rem !important;\n  }\n  .mt-lg-auto {\n    margin-top: auto !important;\n  }\n  .me-lg-0 {\n    margin-right: 0 !important;\n  }\n  .me-lg-1 {\n    margin-right: 0.25rem !important;\n  }\n  .me-lg-2 {\n    margin-right: 0.5rem !important;\n  }\n  .me-lg-3 {\n    margin-right: 1rem !important;\n  }\n  .me-lg-4 {\n    margin-right: 1.5rem !important;\n  }\n  .me-lg-5 {\n    margin-right: 3rem !important;\n  }\n  .me-lg-auto {\n    margin-right: auto !important;\n  }\n  .mb-lg-0 {\n    margin-bottom: 0 !important;\n  }\n  .mb-lg-1 {\n    margin-bottom: 0.25rem !important;\n  }\n  .mb-lg-2 {\n    margin-bottom: 0.5rem !important;\n  }\n  .mb-lg-3 {\n    margin-bottom: 1rem !important;\n  }\n  .mb-lg-4 {\n    margin-bottom: 1.5rem !important;\n  }\n  .mb-lg-5 {\n    margin-bottom: 3rem !important;\n  }\n  .mb-lg-auto {\n    margin-bottom: auto !important;\n  }\n  .ms-lg-0 {\n    margin-left: 0 !important;\n  }\n  .ms-lg-1 {\n    margin-left: 0.25rem !important;\n  }\n  .ms-lg-2 {\n    margin-left: 0.5rem !important;\n  }\n  .ms-lg-3 {\n    margin-left: 1rem !important;\n  }\n  .ms-lg-4 {\n    margin-left: 1.5rem !important;\n  }\n  .ms-lg-5 {\n    margin-left: 3rem !important;\n  }\n  .ms-lg-auto {\n    margin-left: auto !important;\n  }\n  .p-lg-0 {\n    padding: 0 !important;\n  }\n  .p-lg-1 {\n    padding: 0.25rem !important;\n  }\n  .p-lg-2 {\n    padding: 0.5rem !important;\n  }\n  .p-lg-3 {\n    padding: 1rem !important;\n  }\n  .p-lg-4 {\n    padding: 1.5rem !important;\n  }\n  .p-lg-5 {\n    padding: 3rem !important;\n  }\n  .px-lg-0 {\n    padding-right: 0 !important;\n    padding-left: 0 !important;\n  }\n  .px-lg-1 {\n    padding-right: 0.25rem !important;\n    padding-left: 0.25rem !important;\n  }\n  .px-lg-2 {\n    padding-right: 0.5rem !important;\n    padding-left: 0.5rem !important;\n  }\n  .px-lg-3 {\n    padding-right: 1rem !important;\n    padding-left: 1rem !important;\n  }\n  .px-lg-4 {\n    padding-right: 1.5rem !important;\n    padding-left: 1.5rem !important;\n  }\n  .px-lg-5 {\n    padding-right: 3rem !important;\n    padding-left: 3rem !important;\n  }\n  .py-lg-0 {\n    padding-top: 0 !important;\n    padding-bottom: 0 !important;\n  }\n  .py-lg-1 {\n    padding-top: 0.25rem !important;\n    padding-bottom: 0.25rem !important;\n  }\n  .py-lg-2 {\n    padding-top: 0.5rem !important;\n    padding-bottom: 0.5rem !important;\n  }\n  .py-lg-3 {\n    padding-top: 1rem !important;\n    padding-bottom: 1rem !important;\n  }\n  .py-lg-4 {\n    padding-top: 1.5rem !important;\n    padding-bottom: 1.5rem !important;\n  }\n  .py-lg-5 {\n    padding-top: 3rem !important;\n    padding-bottom: 3rem !important;\n  }\n  .pt-lg-0 {\n    padding-top: 0 !important;\n  }\n  .pt-lg-1 {\n    padding-top: 0.25rem !important;\n  }\n  .pt-lg-2 {\n    padding-top: 0.5rem !important;\n  }\n  .pt-lg-3 {\n    padding-top: 1rem !important;\n  }\n  .pt-lg-4 {\n    padding-top: 1.5rem !important;\n  }\n  .pt-lg-5 {\n    padding-top: 3rem !important;\n  }\n  .pe-lg-0 {\n    padding-right: 0 !important;\n  }\n  .pe-lg-1 {\n    padding-right: 0.25rem !important;\n  }\n  .pe-lg-2 {\n    padding-right: 0.5rem !important;\n  }\n  .pe-lg-3 {\n    padding-right: 1rem !important;\n  }\n  .pe-lg-4 {\n    padding-right: 1.5rem !important;\n  }\n  .pe-lg-5 {\n    padding-right: 3rem !important;\n  }\n  .pb-lg-0 {\n    padding-bottom: 0 !important;\n  }\n  .pb-lg-1 {\n    padding-bottom: 0.25rem !important;\n  }\n  .pb-lg-2 {\n    padding-bottom: 0.5rem !important;\n  }\n  .pb-lg-3 {\n    padding-bottom: 1rem !important;\n  }\n  .pb-lg-4 {\n    padding-bottom: 1.5rem !important;\n  }\n  .pb-lg-5 {\n    padding-bottom: 3rem !important;\n  }\n  .ps-lg-0 {\n    padding-left: 0 !important;\n  }\n  .ps-lg-1 {\n    padding-left: 0.25rem !important;\n  }\n  .ps-lg-2 {\n    padding-left: 0.5rem !important;\n  }\n  .ps-lg-3 {\n    padding-left: 1rem !important;\n  }\n  .ps-lg-4 {\n    padding-left: 1.5rem !important;\n  }\n  .ps-lg-5 {\n    padding-left: 3rem !important;\n  }\n  .text-lg-start {\n    text-align: left !important;\n  }\n  .text-lg-end {\n    text-align: right !important;\n  }\n  .text-lg-center {\n    text-align: center !important;\n  }\n}\n\n@media (min-width: 1200px) {\n  .float-xl-start {\n    float: left !important;\n  }\n  .float-xl-end {\n    float: right !important;\n  }\n  .float-xl-none {\n    float: none !important;\n  }\n  .d-xl-inline {\n    display: inline !important;\n  }\n  .d-xl-inline-block {\n    display: inline-block !important;\n  }\n  .d-xl-block {\n    display: block !important;\n  }\n  .d-xl-grid {\n    display: grid !important;\n  }\n  .d-xl-table {\n    display: table !important;\n  }\n  .d-xl-table-row {\n    display: table-row !important;\n  }\n  .d-xl-table-cell {\n    display: table-cell !important;\n  }\n  .d-xl-flex {\n    display: -ms-flexbox !important;\n    display: flex !important;\n  }\n  .d-xl-inline-flex {\n    display: -ms-inline-flexbox !important;\n    display: inline-flex !important;\n  }\n  .d-xl-none {\n    display: none !important;\n  }\n  .flex-xl-fill {\n    -ms-flex: 1 1 auto !important;\n    flex: 1 1 auto !important;\n  }\n  .flex-xl-row {\n    -ms-flex-direction: row !important;\n    flex-direction: row !important;\n  }\n  .flex-xl-column {\n    -ms-flex-direction: column !important;\n    flex-direction: column !important;\n  }\n  .flex-xl-row-reverse {\n    -ms-flex-direction: row-reverse !important;\n    flex-direction: row-reverse !important;\n  }\n  .flex-xl-column-reverse {\n    -ms-flex-direction: column-reverse !important;\n    flex-direction: column-reverse !important;\n  }\n  .flex-xl-grow-0 {\n    -ms-flex-positive: 0 !important;\n    flex-grow: 0 !important;\n  }\n  .flex-xl-grow-1 {\n    -ms-flex-positive: 1 !important;\n    flex-grow: 1 !important;\n  }\n  .flex-xl-shrink-0 {\n    -ms-flex-negative: 0 !important;\n    flex-shrink: 0 !important;\n  }\n  .flex-xl-shrink-1 {\n    -ms-flex-negative: 1 !important;\n    flex-shrink: 1 !important;\n  }\n  .flex-xl-wrap {\n    -ms-flex-wrap: wrap !important;\n    flex-wrap: wrap !important;\n  }\n  .flex-xl-nowrap {\n    -ms-flex-wrap: nowrap !important;\n    flex-wrap: nowrap !important;\n  }\n  .flex-xl-wrap-reverse {\n    -ms-flex-wrap: wrap-reverse !important;\n    flex-wrap: wrap-reverse !important;\n  }\n  .gap-xl-0 {\n    gap: 0 !important;\n  }\n  .gap-xl-1 {\n    gap: 0.25rem !important;\n  }\n  .gap-xl-2 {\n    gap: 0.5rem !important;\n  }\n  .gap-xl-3 {\n    gap: 1rem !important;\n  }\n  .gap-xl-4 {\n    gap: 1.5rem !important;\n  }\n  .gap-xl-5 {\n    gap: 3rem !important;\n  }\n  .justify-content-xl-start {\n    -ms-flex-pack: start !important;\n    justify-content: flex-start !important;\n  }\n  .justify-content-xl-end {\n    -ms-flex-pack: end !important;\n    justify-content: flex-end !important;\n  }\n  .justify-content-xl-center {\n    -ms-flex-pack: center !important;\n    justify-content: center !important;\n  }\n  .justify-content-xl-between {\n    -ms-flex-pack: justify !important;\n    justify-content: space-between !important;\n  }\n  .justify-content-xl-around {\n    -ms-flex-pack: distribute !important;\n    justify-content: space-around !important;\n  }\n  .justify-content-xl-evenly {\n    -ms-flex-pack: space-evenly !important;\n    justify-content: space-evenly !important;\n  }\n  .align-items-xl-start {\n    -ms-flex-align: start !important;\n    align-items: flex-start !important;\n  }\n  .align-items-xl-end {\n    -ms-flex-align: end !important;\n    align-items: flex-end !important;\n  }\n  .align-items-xl-center {\n    -ms-flex-align: center !important;\n    align-items: center !important;\n  }\n  .align-items-xl-baseline {\n    -ms-flex-align: baseline !important;\n    align-items: baseline !important;\n  }\n  .align-items-xl-stretch {\n    -ms-flex-align: stretch !important;\n    align-items: stretch !important;\n  }\n  .align-content-xl-start {\n    -ms-flex-line-pack: start !important;\n    align-content: flex-start !important;\n  }\n  .align-content-xl-end {\n    -ms-flex-line-pack: end !important;\n    align-content: flex-end !important;\n  }\n  .align-content-xl-center {\n    -ms-flex-line-pack: center !important;\n    align-content: center !important;\n  }\n  .align-content-xl-between {\n    -ms-flex-line-pack: justify !important;\n    align-content: space-between !important;\n  }\n  .align-content-xl-around {\n    -ms-flex-line-pack: distribute !important;\n    align-content: space-around !important;\n  }\n  .align-content-xl-stretch {\n    -ms-flex-line-pack: stretch !important;\n    align-content: stretch !important;\n  }\n  .align-self-xl-auto {\n    -ms-flex-item-align: auto !important;\n    align-self: auto !important;\n  }\n  .align-self-xl-start {\n    -ms-flex-item-align: start !important;\n    align-self: flex-start !important;\n  }\n  .align-self-xl-end {\n    -ms-flex-item-align: end !important;\n    align-self: flex-end !important;\n  }\n  .align-self-xl-center {\n    -ms-flex-item-align: center !important;\n    align-self: center !important;\n  }\n  .align-self-xl-baseline {\n    -ms-flex-item-align: baseline !important;\n    align-self: baseline !important;\n  }\n  .align-self-xl-stretch {\n    -ms-flex-item-align: stretch !important;\n    align-self: stretch !important;\n  }\n  .order-xl-first {\n    -ms-flex-order: -1 !important;\n    order: -1 !important;\n  }\n  .order-xl-0 {\n    -ms-flex-order: 0 !important;\n    order: 0 !important;\n  }\n  .order-xl-1 {\n    -ms-flex-order: 1 !important;\n    order: 1 !important;\n  }\n  .order-xl-2 {\n    -ms-flex-order: 2 !important;\n    order: 2 !important;\n  }\n  .order-xl-3 {\n    -ms-flex-order: 3 !important;\n    order: 3 !important;\n  }\n  .order-xl-4 {\n    -ms-flex-order: 4 !important;\n    order: 4 !important;\n  }\n  .order-xl-5 {\n    -ms-flex-order: 5 !important;\n    order: 5 !important;\n  }\n  .order-xl-last {\n    -ms-flex-order: 6 !important;\n    order: 6 !important;\n  }\n  .m-xl-0 {\n    margin: 0 !important;\n  }\n  .m-xl-1 {\n    margin: 0.25rem !important;\n  }\n  .m-xl-2 {\n    margin: 0.5rem !important;\n  }\n  .m-xl-3 {\n    margin: 1rem !important;\n  }\n  .m-xl-4 {\n    margin: 1.5rem !important;\n  }\n  .m-xl-5 {\n    margin: 3rem !important;\n  }\n  .m-xl-auto {\n    margin: auto !important;\n  }\n  .mx-xl-0 {\n    margin-right: 0 !important;\n    margin-left: 0 !important;\n  }\n  .mx-xl-1 {\n    margin-right: 0.25rem !important;\n    margin-left: 0.25rem !important;\n  }\n  .mx-xl-2 {\n    margin-right: 0.5rem !important;\n    margin-left: 0.5rem !important;\n  }\n  .mx-xl-3 {\n    margin-right: 1rem !important;\n    margin-left: 1rem !important;\n  }\n  .mx-xl-4 {\n    margin-right: 1.5rem !important;\n    margin-left: 1.5rem !important;\n  }\n  .mx-xl-5 {\n    margin-right: 3rem !important;\n    margin-left: 3rem !important;\n  }\n  .mx-xl-auto {\n    margin-right: auto !important;\n    margin-left: auto !important;\n  }\n  .my-xl-0 {\n    margin-top: 0 !important;\n    margin-bottom: 0 !important;\n  }\n  .my-xl-1 {\n    margin-top: 0.25rem !important;\n    margin-bottom: 0.25rem !important;\n  }\n  .my-xl-2 {\n    margin-top: 0.5rem !important;\n    margin-bottom: 0.5rem !important;\n  }\n  .my-xl-3 {\n    margin-top: 1rem !important;\n    margin-bottom: 1rem !important;\n  }\n  .my-xl-4 {\n    margin-top: 1.5rem !important;\n    margin-bottom: 1.5rem !important;\n  }\n  .my-xl-5 {\n    margin-top: 3rem !important;\n    margin-bottom: 3rem !important;\n  }\n  .my-xl-auto {\n    margin-top: auto !important;\n    margin-bottom: auto !important;\n  }\n  .mt-xl-0 {\n    margin-top: 0 !important;\n  }\n  .mt-xl-1 {\n    margin-top: 0.25rem !important;\n  }\n  .mt-xl-2 {\n    margin-top: 0.5rem !important;\n  }\n  .mt-xl-3 {\n    margin-top: 1rem !important;\n  }\n  .mt-xl-4 {\n    margin-top: 1.5rem !important;\n  }\n  .mt-xl-5 {\n    margin-top: 3rem !important;\n  }\n  .mt-xl-auto {\n    margin-top: auto !important;\n  }\n  .me-xl-0 {\n    margin-right: 0 !important;\n  }\n  .me-xl-1 {\n    margin-right: 0.25rem !important;\n  }\n  .me-xl-2 {\n    margin-right: 0.5rem !important;\n  }\n  .me-xl-3 {\n    margin-right: 1rem !important;\n  }\n  .me-xl-4 {\n    margin-right: 1.5rem !important;\n  }\n  .me-xl-5 {\n    margin-right: 3rem !important;\n  }\n  .me-xl-auto {\n    margin-right: auto !important;\n  }\n  .mb-xl-0 {\n    margin-bottom: 0 !important;\n  }\n  .mb-xl-1 {\n    margin-bottom: 0.25rem !important;\n  }\n  .mb-xl-2 {\n    margin-bottom: 0.5rem !important;\n  }\n  .mb-xl-3 {\n    margin-bottom: 1rem !important;\n  }\n  .mb-xl-4 {\n    margin-bottom: 1.5rem !important;\n  }\n  .mb-xl-5 {\n    margin-bottom: 3rem !important;\n  }\n  .mb-xl-auto {\n    margin-bottom: auto !important;\n  }\n  .ms-xl-0 {\n    margin-left: 0 !important;\n  }\n  .ms-xl-1 {\n    margin-left: 0.25rem !important;\n  }\n  .ms-xl-2 {\n    margin-left: 0.5rem !important;\n  }\n  .ms-xl-3 {\n    margin-left: 1rem !important;\n  }\n  .ms-xl-4 {\n    margin-left: 1.5rem !important;\n  }\n  .ms-xl-5 {\n    margin-left: 3rem !important;\n  }\n  .ms-xl-auto {\n    margin-left: auto !important;\n  }\n  .p-xl-0 {\n    padding: 0 !important;\n  }\n  .p-xl-1 {\n    padding: 0.25rem !important;\n  }\n  .p-xl-2 {\n    padding: 0.5rem !important;\n  }\n  .p-xl-3 {\n    padding: 1rem !important;\n  }\n  .p-xl-4 {\n    padding: 1.5rem !important;\n  }\n  .p-xl-5 {\n    padding: 3rem !important;\n  }\n  .px-xl-0 {\n    padding-right: 0 !important;\n    padding-left: 0 !important;\n  }\n  .px-xl-1 {\n    padding-right: 0.25rem !important;\n    padding-left: 0.25rem !important;\n  }\n  .px-xl-2 {\n    padding-right: 0.5rem !important;\n    padding-left: 0.5rem !important;\n  }\n  .px-xl-3 {\n    padding-right: 1rem !important;\n    padding-left: 1rem !important;\n  }\n  .px-xl-4 {\n    padding-right: 1.5rem !important;\n    padding-left: 1.5rem !important;\n  }\n  .px-xl-5 {\n    padding-right: 3rem !important;\n    padding-left: 3rem !important;\n  }\n  .py-xl-0 {\n    padding-top: 0 !important;\n    padding-bottom: 0 !important;\n  }\n  .py-xl-1 {\n    padding-top: 0.25rem !important;\n    padding-bottom: 0.25rem !important;\n  }\n  .py-xl-2 {\n    padding-top: 0.5rem !important;\n    padding-bottom: 0.5rem !important;\n  }\n  .py-xl-3 {\n    padding-top: 1rem !important;\n    padding-bottom: 1rem !important;\n  }\n  .py-xl-4 {\n    padding-top: 1.5rem !important;\n    padding-bottom: 1.5rem !important;\n  }\n  .py-xl-5 {\n    padding-top: 3rem !important;\n    padding-bottom: 3rem !important;\n  }\n  .pt-xl-0 {\n    padding-top: 0 !important;\n  }\n  .pt-xl-1 {\n    padding-top: 0.25rem !important;\n  }\n  .pt-xl-2 {\n    padding-top: 0.5rem !important;\n  }\n  .pt-xl-3 {\n    padding-top: 1rem !important;\n  }\n  .pt-xl-4 {\n    padding-top: 1.5rem !important;\n  }\n  .pt-xl-5 {\n    padding-top: 3rem !important;\n  }\n  .pe-xl-0 {\n    padding-right: 0 !important;\n  }\n  .pe-xl-1 {\n    padding-right: 0.25rem !important;\n  }\n  .pe-xl-2 {\n    padding-right: 0.5rem !important;\n  }\n  .pe-xl-3 {\n    padding-right: 1rem !important;\n  }\n  .pe-xl-4 {\n    padding-right: 1.5rem !important;\n  }\n  .pe-xl-5 {\n    padding-right: 3rem !important;\n  }\n  .pb-xl-0 {\n    padding-bottom: 0 !important;\n  }\n  .pb-xl-1 {\n    padding-bottom: 0.25rem !important;\n  }\n  .pb-xl-2 {\n    padding-bottom: 0.5rem !important;\n  }\n  .pb-xl-3 {\n    padding-bottom: 1rem !important;\n  }\n  .pb-xl-4 {\n    padding-bottom: 1.5rem !important;\n  }\n  .pb-xl-5 {\n    padding-bottom: 3rem !important;\n  }\n  .ps-xl-0 {\n    padding-left: 0 !important;\n  }\n  .ps-xl-1 {\n    padding-left: 0.25rem !important;\n  }\n  .ps-xl-2 {\n    padding-left: 0.5rem !important;\n  }\n  .ps-xl-3 {\n    padding-left: 1rem !important;\n  }\n  .ps-xl-4 {\n    padding-left: 1.5rem !important;\n  }\n  .ps-xl-5 {\n    padding-left: 3rem !important;\n  }\n  .text-xl-start {\n    text-align: left !important;\n  }\n  .text-xl-end {\n    text-align: right !important;\n  }\n  .text-xl-center {\n    text-align: center !important;\n  }\n}\n\n@media (min-width: 1400px) {\n  .float-xxl-start {\n    float: left !important;\n  }\n  .float-xxl-end {\n    float: right !important;\n  }\n  .float-xxl-none {\n    float: none !important;\n  }\n  .d-xxl-inline {\n    display: inline !important;\n  }\n  .d-xxl-inline-block {\n    display: inline-block !important;\n  }\n  .d-xxl-block {\n    display: block !important;\n  }\n  .d-xxl-grid {\n    display: grid !important;\n  }\n  .d-xxl-table {\n    display: table !important;\n  }\n  .d-xxl-table-row {\n    display: table-row !important;\n  }\n  .d-xxl-table-cell {\n    display: table-cell !important;\n  }\n  .d-xxl-flex {\n    display: -ms-flexbox !important;\n    display: flex !important;\n  }\n  .d-xxl-inline-flex {\n    display: -ms-inline-flexbox !important;\n    display: inline-flex !important;\n  }\n  .d-xxl-none {\n    display: none !important;\n  }\n  .flex-xxl-fill {\n    -ms-flex: 1 1 auto !important;\n    flex: 1 1 auto !important;\n  }\n  .flex-xxl-row {\n    -ms-flex-direction: row !important;\n    flex-direction: row !important;\n  }\n  .flex-xxl-column {\n    -ms-flex-direction: column !important;\n    flex-direction: column !important;\n  }\n  .flex-xxl-row-reverse {\n    -ms-flex-direction: row-reverse !important;\n    flex-direction: row-reverse !important;\n  }\n  .flex-xxl-column-reverse {\n    -ms-flex-direction: column-reverse !important;\n    flex-direction: column-reverse !important;\n  }\n  .flex-xxl-grow-0 {\n    -ms-flex-positive: 0 !important;\n    flex-grow: 0 !important;\n  }\n  .flex-xxl-grow-1 {\n    -ms-flex-positive: 1 !important;\n    flex-grow: 1 !important;\n  }\n  .flex-xxl-shrink-0 {\n    -ms-flex-negative: 0 !important;\n    flex-shrink: 0 !important;\n  }\n  .flex-xxl-shrink-1 {\n    -ms-flex-negative: 1 !important;\n    flex-shrink: 1 !important;\n  }\n  .flex-xxl-wrap {\n    -ms-flex-wrap: wrap !important;\n    flex-wrap: wrap !important;\n  }\n  .flex-xxl-nowrap {\n    -ms-flex-wrap: nowrap !important;\n    flex-wrap: nowrap !important;\n  }\n  .flex-xxl-wrap-reverse {\n    -ms-flex-wrap: wrap-reverse !important;\n    flex-wrap: wrap-reverse !important;\n  }\n  .gap-xxl-0 {\n    gap: 0 !important;\n  }\n  .gap-xxl-1 {\n    gap: 0.25rem !important;\n  }\n  .gap-xxl-2 {\n    gap: 0.5rem !important;\n  }\n  .gap-xxl-3 {\n    gap: 1rem !important;\n  }\n  .gap-xxl-4 {\n    gap: 1.5rem !important;\n  }\n  .gap-xxl-5 {\n    gap: 3rem !important;\n  }\n  .justify-content-xxl-start {\n    -ms-flex-pack: start !important;\n    justify-content: flex-start !important;\n  }\n  .justify-content-xxl-end {\n    -ms-flex-pack: end !important;\n    justify-content: flex-end !important;\n  }\n  .justify-content-xxl-center {\n    -ms-flex-pack: center !important;\n    justify-content: center !important;\n  }\n  .justify-content-xxl-between {\n    -ms-flex-pack: justify !important;\n    justify-content: space-between !important;\n  }\n  .justify-content-xxl-around {\n    -ms-flex-pack: distribute !important;\n    justify-content: space-around !important;\n  }\n  .justify-content-xxl-evenly {\n    -ms-flex-pack: space-evenly !important;\n    justify-content: space-evenly !important;\n  }\n  .align-items-xxl-start {\n    -ms-flex-align: start !important;\n    align-items: flex-start !important;\n  }\n  .align-items-xxl-end {\n    -ms-flex-align: end !important;\n    align-items: flex-end !important;\n  }\n  .align-items-xxl-center {\n    -ms-flex-align: center !important;\n    align-items: center !important;\n  }\n  .align-items-xxl-baseline {\n    -ms-flex-align: baseline !important;\n    align-items: baseline !important;\n  }\n  .align-items-xxl-stretch {\n    -ms-flex-align: stretch !important;\n    align-items: stretch !important;\n  }\n  .align-content-xxl-start {\n    -ms-flex-line-pack: start !important;\n    align-content: flex-start !important;\n  }\n  .align-content-xxl-end {\n    -ms-flex-line-pack: end !important;\n    align-content: flex-end !important;\n  }\n  .align-content-xxl-center {\n    -ms-flex-line-pack: center !important;\n    align-content: center !important;\n  }\n  .align-content-xxl-between {\n    -ms-flex-line-pack: justify !important;\n    align-content: space-between !important;\n  }\n  .align-content-xxl-around {\n    -ms-flex-line-pack: distribute !important;\n    align-content: space-around !important;\n  }\n  .align-content-xxl-stretch {\n    -ms-flex-line-pack: stretch !important;\n    align-content: stretch !important;\n  }\n  .align-self-xxl-auto {\n    -ms-flex-item-align: auto !important;\n    align-self: auto !important;\n  }\n  .align-self-xxl-start {\n    -ms-flex-item-align: start !important;\n    align-self: flex-start !important;\n  }\n  .align-self-xxl-end {\n    -ms-flex-item-align: end !important;\n    align-self: flex-end !important;\n  }\n  .align-self-xxl-center {\n    -ms-flex-item-align: center !important;\n    align-self: center !important;\n  }\n  .align-self-xxl-baseline {\n    -ms-flex-item-align: baseline !important;\n    align-self: baseline !important;\n  }\n  .align-self-xxl-stretch {\n    -ms-flex-item-align: stretch !important;\n    align-self: stretch !important;\n  }\n  .order-xxl-first {\n    -ms-flex-order: -1 !important;\n    order: -1 !important;\n  }\n  .order-xxl-0 {\n    -ms-flex-order: 0 !important;\n    order: 0 !important;\n  }\n  .order-xxl-1 {\n    -ms-flex-order: 1 !important;\n    order: 1 !important;\n  }\n  .order-xxl-2 {\n    -ms-flex-order: 2 !important;\n    order: 2 !important;\n  }\n  .order-xxl-3 {\n    -ms-flex-order: 3 !important;\n    order: 3 !important;\n  }\n  .order-xxl-4 {\n    -ms-flex-order: 4 !important;\n    order: 4 !important;\n  }\n  .order-xxl-5 {\n    -ms-flex-order: 5 !important;\n    order: 5 !important;\n  }\n  .order-xxl-last {\n    -ms-flex-order: 6 !important;\n    order: 6 !important;\n  }\n  .m-xxl-0 {\n    margin: 0 !important;\n  }\n  .m-xxl-1 {\n    margin: 0.25rem !important;\n  }\n  .m-xxl-2 {\n    margin: 0.5rem !important;\n  }\n  .m-xxl-3 {\n    margin: 1rem !important;\n  }\n  .m-xxl-4 {\n    margin: 1.5rem !important;\n  }\n  .m-xxl-5 {\n    margin: 3rem !important;\n  }\n  .m-xxl-auto {\n    margin: auto !important;\n  }\n  .mx-xxl-0 {\n    margin-right: 0 !important;\n    margin-left: 0 !important;\n  }\n  .mx-xxl-1 {\n    margin-right: 0.25rem !important;\n    margin-left: 0.25rem !important;\n  }\n  .mx-xxl-2 {\n    margin-right: 0.5rem !important;\n    margin-left: 0.5rem !important;\n  }\n  .mx-xxl-3 {\n    margin-right: 1rem !important;\n    margin-left: 1rem !important;\n  }\n  .mx-xxl-4 {\n    margin-right: 1.5rem !important;\n    margin-left: 1.5rem !important;\n  }\n  .mx-xxl-5 {\n    margin-right: 3rem !important;\n    margin-left: 3rem !important;\n  }\n  .mx-xxl-auto {\n    margin-right: auto !important;\n    margin-left: auto !important;\n  }\n  .my-xxl-0 {\n    margin-top: 0 !important;\n    margin-bottom: 0 !important;\n  }\n  .my-xxl-1 {\n    margin-top: 0.25rem !important;\n    margin-bottom: 0.25rem !important;\n  }\n  .my-xxl-2 {\n    margin-top: 0.5rem !important;\n    margin-bottom: 0.5rem !important;\n  }\n  .my-xxl-3 {\n    margin-top: 1rem !important;\n    margin-bottom: 1rem !important;\n  }\n  .my-xxl-4 {\n    margin-top: 1.5rem !important;\n    margin-bottom: 1.5rem !important;\n  }\n  .my-xxl-5 {\n    margin-top: 3rem !important;\n    margin-bottom: 3rem !important;\n  }\n  .my-xxl-auto {\n    margin-top: auto !important;\n    margin-bottom: auto !important;\n  }\n  .mt-xxl-0 {\n    margin-top: 0 !important;\n  }\n  .mt-xxl-1 {\n    margin-top: 0.25rem !important;\n  }\n  .mt-xxl-2 {\n    margin-top: 0.5rem !important;\n  }\n  .mt-xxl-3 {\n    margin-top: 1rem !important;\n  }\n  .mt-xxl-4 {\n    margin-top: 1.5rem !important;\n  }\n  .mt-xxl-5 {\n    margin-top: 3rem !important;\n  }\n  .mt-xxl-auto {\n    margin-top: auto !important;\n  }\n  .me-xxl-0 {\n    margin-right: 0 !important;\n  }\n  .me-xxl-1 {\n    margin-right: 0.25rem !important;\n  }\n  .me-xxl-2 {\n    margin-right: 0.5rem !important;\n  }\n  .me-xxl-3 {\n    margin-right: 1rem !important;\n  }\n  .me-xxl-4 {\n    margin-right: 1.5rem !important;\n  }\n  .me-xxl-5 {\n    margin-right: 3rem !important;\n  }\n  .me-xxl-auto {\n    margin-right: auto !important;\n  }\n  .mb-xxl-0 {\n    margin-bottom: 0 !important;\n  }\n  .mb-xxl-1 {\n    margin-bottom: 0.25rem !important;\n  }\n  .mb-xxl-2 {\n    margin-bottom: 0.5rem !important;\n  }\n  .mb-xxl-3 {\n    margin-bottom: 1rem !important;\n  }\n  .mb-xxl-4 {\n    margin-bottom: 1.5rem !important;\n  }\n  .mb-xxl-5 {\n    margin-bottom: 3rem !important;\n  }\n  .mb-xxl-auto {\n    margin-bottom: auto !important;\n  }\n  .ms-xxl-0 {\n    margin-left: 0 !important;\n  }\n  .ms-xxl-1 {\n    margin-left: 0.25rem !important;\n  }\n  .ms-xxl-2 {\n    margin-left: 0.5rem !important;\n  }\n  .ms-xxl-3 {\n    margin-left: 1rem !important;\n  }\n  .ms-xxl-4 {\n    margin-left: 1.5rem !important;\n  }\n  .ms-xxl-5 {\n    margin-left: 3rem !important;\n  }\n  .ms-xxl-auto {\n    margin-left: auto !important;\n  }\n  .p-xxl-0 {\n    padding: 0 !important;\n  }\n  .p-xxl-1 {\n    padding: 0.25rem !important;\n  }\n  .p-xxl-2 {\n    padding: 0.5rem !important;\n  }\n  .p-xxl-3 {\n    padding: 1rem !important;\n  }\n  .p-xxl-4 {\n    padding: 1.5rem !important;\n  }\n  .p-xxl-5 {\n    padding: 3rem !important;\n  }\n  .px-xxl-0 {\n    padding-right: 0 !important;\n    padding-left: 0 !important;\n  }\n  .px-xxl-1 {\n    padding-right: 0.25rem !important;\n    padding-left: 0.25rem !important;\n  }\n  .px-xxl-2 {\n    padding-right: 0.5rem !important;\n    padding-left: 0.5rem !important;\n  }\n  .px-xxl-3 {\n    padding-right: 1rem !important;\n    padding-left: 1rem !important;\n  }\n  .px-xxl-4 {\n    padding-right: 1.5rem !important;\n    padding-left: 1.5rem !important;\n  }\n  .px-xxl-5 {\n    padding-right: 3rem !important;\n    padding-left: 3rem !important;\n  }\n  .py-xxl-0 {\n    padding-top: 0 !important;\n    padding-bottom: 0 !important;\n  }\n  .py-xxl-1 {\n    padding-top: 0.25rem !important;\n    padding-bottom: 0.25rem !important;\n  }\n  .py-xxl-2 {\n    padding-top: 0.5rem !important;\n    padding-bottom: 0.5rem !important;\n  }\n  .py-xxl-3 {\n    padding-top: 1rem !important;\n    padding-bottom: 1rem !important;\n  }\n  .py-xxl-4 {\n    padding-top: 1.5rem !important;\n    padding-bottom: 1.5rem !important;\n  }\n  .py-xxl-5 {\n    padding-top: 3rem !important;\n    padding-bottom: 3rem !important;\n  }\n  .pt-xxl-0 {\n    padding-top: 0 !important;\n  }\n  .pt-xxl-1 {\n    padding-top: 0.25rem !important;\n  }\n  .pt-xxl-2 {\n    padding-top: 0.5rem !important;\n  }\n  .pt-xxl-3 {\n    padding-top: 1rem !important;\n  }\n  .pt-xxl-4 {\n    padding-top: 1.5rem !important;\n  }\n  .pt-xxl-5 {\n    padding-top: 3rem !important;\n  }\n  .pe-xxl-0 {\n    padding-right: 0 !important;\n  }\n  .pe-xxl-1 {\n    padding-right: 0.25rem !important;\n  }\n  .pe-xxl-2 {\n    padding-right: 0.5rem !important;\n  }\n  .pe-xxl-3 {\n    padding-right: 1rem !important;\n  }\n  .pe-xxl-4 {\n    padding-right: 1.5rem !important;\n  }\n  .pe-xxl-5 {\n    padding-right: 3rem !important;\n  }\n  .pb-xxl-0 {\n    padding-bottom: 0 !important;\n  }\n  .pb-xxl-1 {\n    padding-bottom: 0.25rem !important;\n  }\n  .pb-xxl-2 {\n    padding-bottom: 0.5rem !important;\n  }\n  .pb-xxl-3 {\n    padding-bottom: 1rem !important;\n  }\n  .pb-xxl-4 {\n    padding-bottom: 1.5rem !important;\n  }\n  .pb-xxl-5 {\n    padding-bottom: 3rem !important;\n  }\n  .ps-xxl-0 {\n    padding-left: 0 !important;\n  }\n  .ps-xxl-1 {\n    padding-left: 0.25rem !important;\n  }\n  .ps-xxl-2 {\n    padding-left: 0.5rem !important;\n  }\n  .ps-xxl-3 {\n    padding-left: 1rem !important;\n  }\n  .ps-xxl-4 {\n    padding-left: 1.5rem !important;\n  }\n  .ps-xxl-5 {\n    padding-left: 3rem !important;\n  }\n  .text-xxl-start {\n    text-align: left !important;\n  }\n  .text-xxl-end {\n    text-align: right !important;\n  }\n  .text-xxl-center {\n    text-align: center !important;\n  }\n}\n\n@media (min-width: 1200px) {\n  .fs-1 {\n    font-size: 2.5rem !important;\n  }\n  .fs-2 {\n    font-size: 2rem !important;\n  }\n  .fs-3 {\n    font-size: 1.75rem !important;\n  }\n  .fs-4 {\n    font-size: 1.5rem !important;\n  }\n}\n\n@media print {\n  .d-print-inline {\n    display: inline !important;\n  }\n  .d-print-inline-block {\n    display: inline-block !important;\n  }\n  .d-print-block {\n    display: block !important;\n  }\n  .d-print-grid {\n    display: grid !important;\n  }\n  .d-print-table {\n    display: table !important;\n  }\n  .d-print-table-row {\n    display: table-row !important;\n  }\n  .d-print-table-cell {\n    display: table-cell !important;\n  }\n  .d-print-flex {\n    display: -ms-flexbox !important;\n    display: flex !important;\n  }\n  .d-print-inline-flex {\n    display: -ms-inline-flexbox !important;\n    display: inline-flex !important;\n  }\n  .d-print-none {\n    display: none !important;\n  }\n}\n\n.navbar {\n  border: 1px solid rgba(0, 0, 0, 0.6);\n  text-shadow: 1px 1px 1px rgba(0, 0, 0, 0.3);\n}\n\n.navbar .container {\n  padding: 0;\n}\n\n.navbar .navbar-toggler {\n  border-color: rgba(0, 0, 0, 0.6);\n}\n\n.navbar-fixed-top {\n  border-width: 0 0 1px;\n}\n\n.navbar-fixed-bottom {\n  border-width: 1px 0 0;\n}\n\n.navbar .nav-link {\n  padding: 1rem;\n  border-left: 1px solid rgba(255, 255, 255, 0.1);\n  border-right: 1px solid rgba(0, 0, 0, 0.2);\n}\n\n.navbar .nav-link:hover, .navbar .nav-link:focus {\n  background-image: linear-gradient(#25282c, #292c30 40%, #2b2f32);\n  -webkit-filter: none;\n  filter: none;\n  border-left: 1px solid rgba(0, 0, 0, 0.2);\n}\n\n.navbar-brand {\n  padding: 0.75rem 1rem calc(24px - 0.75rem);\n  margin-right: 0;\n  border-right: 1px solid rgba(0, 0, 0, 0.2);\n}\n\n.navbar .nav-item.active .nav-link {\n  background-color: rgba(0, 0, 0, 0.3);\n  border-left: 1px solid rgba(0, 0, 0, 0.2);\n}\n\n.navbar-nav .nav-item + .nav-item {\n  margin-left: 0;\n}\n\n.navbar.bg-light {\n  text-shadow: 1px 1px 1px rgba(0, 0, 0, 0.1);\n}\n\n.navbar.bg-light .nav-link:hover, .navbar.bg-light .nav-link:focus {\n  background-image: linear-gradient(#4e5357, #555b5f 40%, #5a6065);\n  -webkit-filter: none;\n  filter: none;\n  border-left: 1px solid rgba(0, 0, 0, 0.2);\n}\n\n@media (max-width: 576px) {\n  .navbar-expand-sm .navbar-brand,\n  .navbar-expand-sm .nav-link {\n    border: none !important;\n  }\n}\n\n@media (max-width: 768px) {\n  .navbar-expand-md .navbar-brand,\n  .navbar-expand-md .nav-link {\n    border: none !important;\n  }\n}\n\n@media (max-width: 992px) {\n  .navbar-expand-lg .navbar-brand,\n  .navbar-expand-lg .nav-link {\n    border: none !important;\n  }\n}\n\n.btn {\n  border-color: rgba(0, 0, 0, 0.6);\n  text-shadow: 1px 1px 1px rgba(0, 0, 0, 0.3);\n}\n\n.btn:not([disabled]):not(.disabled).active, .btn.disabled {\n  border-color: rgba(0, 0, 0, 0.6);\n  box-shadow: none;\n}\n\n.btn:hover, .btn:focus, .btn:not([disabled]):not(.disabled):active, .btn:not([disabled]):not(.disabled):active:hover, .btn:not([disabled]):not(.disabled).active:hover {\n  border-color: rgba(0, 0, 0, 0.6);\n}\n\n.btn-primary {\n  background-image: linear-gradient(#52565a, #3a3f44 60%, #353a3f);\n  -webkit-filter: none;\n  filter: none;\n}\n\n.btn-primary:not([disabled]):not(.disabled):hover, .btn-primary:not([disabled]):not(.disabled):focus, .btn-primary:not([disabled]):not(.disabled):active:hover, .btn-primary:not([disabled]):not(.disabled).active:hover {\n  background-image: linear-gradient(#25282c, #292c30 40%, #2b2f32);\n  -webkit-filter: none;\n  filter: none;\n}\n\n.btn-secondary {\n  background-image: linear-gradient(#8a9196, #7a8288 60%, #70787d);\n  -webkit-filter: none;\n  filter: none;\n}\n\n.btn-secondary:not([disabled]):not(.disabled):hover, .btn-secondary:not([disabled]):not(.disabled):focus, .btn-secondary:not([disabled]):not(.disabled):active, .btn-secondary:not([disabled]):not(.disabled).active {\n  background-image: linear-gradient(#4e5357, #555b5f 40%, #5a6065);\n  -webkit-filter: none;\n  filter: none;\n}\n\n.btn-success {\n  background-image: linear-gradient(#75cb75, #62c462 60%, #5ab45a);\n  -webkit-filter: none;\n  filter: none;\n  color: #fff;\n}\n\n.btn-success:not([disabled]):not(.disabled):hover, .btn-success:not([disabled]):not(.disabled):focus, .btn-success:not([disabled]):not(.disabled):active, .btn-success:not([disabled]):not(.disabled).active {\n  background-image: linear-gradient(#3f7d3f, #458945 40%, #499149);\n  -webkit-filter: none;\n  filter: none;\n}\n\n.btn-info {\n  background-image: linear-gradient(#6fc8e2, #5bc0de 60%, #54b1cc);\n  -webkit-filter: none;\n  filter: none;\n  color: #fff;\n}\n\n.btn-info:not([disabled]):not(.disabled):hover, .btn-info:not([disabled]):not(.disabled):focus, .btn-info:not([disabled]):not(.disabled):active, .btn-info:not([disabled]):not(.disabled).active {\n  background-image: linear-gradient(#3a7b8e, #40869b 40%, #438ea4);\n  -webkit-filter: none;\n  filter: none;\n}\n\n.btn-warning {\n  background-image: linear-gradient(#f9a124, #f89406 60%, #e48806);\n  -webkit-filter: none;\n  filter: none;\n  color: #fff;\n}\n\n.btn-warning:not([disabled]):not(.disabled):hover, .btn-warning:not([disabled]):not(.disabled):focus, .btn-warning:not([disabled]):not(.disabled):active, .btn-warning:not([disabled]):not(.disabled).active {\n  background-image: linear-gradient(#9f5f04, #ae6804 40%, #b86e04);\n  -webkit-filter: none;\n  filter: none;\n}\n\n.btn-danger {\n  background-image: linear-gradient(#f0726f, #ee5f5b 60%, #db5754);\n  -webkit-filter: none;\n  filter: none;\n}\n\n.btn-danger:not([disabled]):not(.disabled):hover, .btn-danger:not([disabled]):not(.disabled):focus, .btn-danger:not([disabled]):not(.disabled):active, .btn-danger:not([disabled]):not(.disabled).active {\n  background-image: linear-gradient(#983d3a, #a74340 40%, #b04643);\n  -webkit-filter: none;\n  filter: none;\n}\n\n.btn-outline-primary {\n  color: #fff;\n}\n\n.btn-link,\n.btn-link:hover {\n  border-color: transparent;\n}\n\n.btn-group .btn.active,\n.btn-group-vertical .btn.active {\n  border-color: rgba(0, 0, 0, 0.6);\n}\n\nh1, .h1, h2, .h2, h3, .h3, h4, .h4, h5, .h5, h6, .h6 {\n  text-shadow: -1px -1px 0 rgba(0, 0, 0, 0.3);\n}\n\nlegend {\n  color: #fff;\n}\n\n.input-group-addon {\n  background-image: linear-gradient(#8a9196, #7a8288 60%, #70787d);\n  -webkit-filter: none;\n  filter: none;\n  text-shadow: 1px 1px 1px rgba(0, 0, 0, 0.3);\n  color: #fff;\n}\n\n.nav-tabs .nav-link {\n  background-image: linear-gradient(#25282c, #292c30 40%, #2b2f32);\n  -webkit-filter: none;\n  filter: none;\n  border: 1px solid rgba(0, 0, 0, 0.6);\n}\n\n.nav-tabs .nav-link:not([disabled]):not(.disabled):hover, .nav-tabs .nav-link:not([disabled]):not(.disabled):focus, .nav-tabs .nav-link:not([disabled]):not(.disabled):active, .nav-tabs .nav-link:not([disabled]):not(.disabled).active {\n  background-image: linear-gradient(#52565a, #3a3f44 60%, #353a3f);\n  -webkit-filter: none;\n  filter: none;\n}\n\n.nav-tabs .nav-link.disabled {\n  border: 1px solid rgba(0, 0, 0, 0.6);\n}\n\n.nav-tabs .nav-link,\n.nav-tabs .nav-link:hover {\n  color: #fff;\n}\n\n.nav-pills .nav-link {\n  background-image: linear-gradient(#52565a, #3a3f44 60%, #353a3f);\n  -webkit-filter: none;\n  filter: none;\n  border: 1px solid rgba(0, 0, 0, 0.6);\n  text-shadow: 1px 1px 1px rgba(0, 0, 0, 0.3);\n  color: #fff;\n}\n\n.nav-pills .nav-link:hover {\n  background-image: linear-gradient(#25282c, #292c30 40%, #2b2f32);\n  -webkit-filter: none;\n  filter: none;\n  border: 1px solid rgba(0, 0, 0, 0.6);\n}\n\n.nav-pills .nav-link.active,\n.nav-pills .nav-link:hover {\n  background-color: transparent;\n  background-image: linear-gradient(#25282c, #292c30 40%, #2b2f32);\n  -webkit-filter: none;\n  filter: none;\n  border: 1px solid rgba(0, 0, 0, 0.6);\n}\n\n.nav-pills .nav-link.disabled,\n.nav-pills .nav-link.disabled:hover {\n  background-image: linear-gradient(#52565a, #3a3f44 60%, #353a3f);\n  -webkit-filter: none;\n  filter: none;\n  color: #7a8288;\n}\n\n.pagination .page-link {\n  text-shadow: 1px 1px 1px rgba(0, 0, 0, 0.3);\n  background-image: linear-gradient(#52565a, #3a3f44 60%, #353a3f);\n  -webkit-filter: none;\n  filter: none;\n}\n\n.pagination .page-link:hover {\n  background-image: linear-gradient(#25282c, #292c30 40%, #2b2f32);\n  -webkit-filter: none;\n  filter: none;\n  text-decoration: none;\n}\n\n.pagination .page-item.active .page-link {\n  background-image: linear-gradient(#25282c, #292c30 40%, #2b2f32);\n  -webkit-filter: none;\n  filter: none;\n}\n\n.pagination .page-item.disabled .page-link {\n  background-image: linear-gradient(#52565a, #3a3f44 60%, #353a3f);\n  -webkit-filter: none;\n  filter: none;\n}\n\n.breadcrumb {\n  border: 1px solid rgba(0, 0, 0, 0.6);\n  text-shadow: 1px 1px 1px rgba(0, 0, 0, 0.3);\n  background-color: transparent;\n  background-image: linear-gradient(#52565a, #3a3f44 60%, #353a3f);\n  -webkit-filter: none;\n  filter: none;\n}\n\n.breadcrumb a,\n.breadcrumb a:hover {\n  color: #fff;\n}\n\n.alert {\n  border: none;\n  color: #fff;\n}\n\n.alert a,\n.alert .alert-link {\n  color: #fff;\n  text-decoration: underline;\n}\n\n.alert-primary {\n  background-color: #3a3f44;\n}\n\n.alert-secondary {\n  background-color: #7a8288;\n}\n\n.alert-success {\n  background-color: #62c462;\n}\n\n.alert-info {\n  background-color: #5bc0de;\n}\n\n.alert-warning {\n  background-color: #f89406;\n}\n\n.alert-danger {\n  background-color: #ee5f5b;\n}\n\n.alert-light {\n  background-color: #e9ecef;\n}\n\n.alert-dark {\n  background-color: #272b30;\n}\n\n.alert-light,\n.alert-light a:not(.btn),\n.alert-light .alert-link {\n  color: #272b30;\n}\n\n.badge.bg-light {\n  color: #272b30;\n}\n\n.list-group-item-action:hover {\n  background-color: #23272b;\n}\n"
  },
  {
    "path": "src/sourceDev.WebApp/SharedThemes/slate/wwwroot/css/fontawesome-all.css",
    "content": "/*!\n * Font Awesome Free 5.0.8 by @fontawesome - https://fontawesome.com\n * License - https://fontawesome.com/license (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)\n */\n.fa,\n.fas,\n.far,\n.fal,\n.fab {\n  -moz-osx-font-smoothing: grayscale;\n  -webkit-font-smoothing: antialiased;\n  display: inline-block;\n  font-style: normal;\n  font-variant: normal;\n  text-rendering: auto;\n  line-height: 1; }\n\n.fa-lg {\n  font-size: 1.33333em;\n  line-height: 0.75em;\n  vertical-align: -.0667em; }\n\n.fa-xs {\n  font-size: .75em; }\n\n.fa-sm {\n  font-size: .875em; }\n\n.fa-1x {\n  font-size: 1em; }\n\n.fa-2x {\n  font-size: 2em; }\n\n.fa-3x {\n  font-size: 3em; }\n\n.fa-4x {\n  font-size: 4em; }\n\n.fa-5x {\n  font-size: 5em; }\n\n.fa-6x {\n  font-size: 6em; }\n\n.fa-7x {\n  font-size: 7em; }\n\n.fa-8x {\n  font-size: 8em; }\n\n.fa-9x {\n  font-size: 9em; }\n\n.fa-10x {\n  font-size: 10em; }\n\n.fa-fw {\n  text-align: center;\n  width: 1.25em; }\n\n.fa-ul {\n  list-style-type: none;\n  margin-left: 2.5em;\n  padding-left: 0; }\n  .fa-ul > li {\n    position: relative; }\n\n.fa-li {\n  left: -2em;\n  position: absolute;\n  text-align: center;\n  width: 2em;\n  line-height: inherit; }\n\n.fa-border {\n  border: solid 0.08em #eee;\n  border-radius: .1em;\n  padding: .2em .25em .15em; }\n\n.fa-pull-left {\n  float: left; }\n\n.fa-pull-right {\n  float: right; }\n\n.fa.fa-pull-left,\n.fas.fa-pull-left,\n.far.fa-pull-left,\n.fal.fa-pull-left,\n.fab.fa-pull-left {\n  margin-right: .3em; }\n\n.fa.fa-pull-right,\n.fas.fa-pull-right,\n.far.fa-pull-right,\n.fal.fa-pull-right,\n.fab.fa-pull-right {\n  margin-left: .3em; }\n\n.fa-spin {\n  -webkit-animation: fa-spin 2s infinite linear;\n          animation: fa-spin 2s infinite linear; }\n\n.fa-pulse {\n  -webkit-animation: fa-spin 1s infinite steps(8);\n          animation: fa-spin 1s infinite steps(8); }\n\n@-webkit-keyframes fa-spin {\n  0% {\n    -webkit-transform: rotate(0deg);\n            transform: rotate(0deg); }\n  100% {\n    -webkit-transform: rotate(360deg);\n            transform: rotate(360deg); } }\n\n@keyframes fa-spin {\n  0% {\n    -webkit-transform: rotate(0deg);\n            transform: rotate(0deg); }\n  100% {\n    -webkit-transform: rotate(360deg);\n            transform: rotate(360deg); } }\n\n.fa-rotate-90 {\n  -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)\";\n  -webkit-transform: rotate(90deg);\n          transform: rotate(90deg); }\n\n.fa-rotate-180 {\n  -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)\";\n  -webkit-transform: rotate(180deg);\n          transform: rotate(180deg); }\n\n.fa-rotate-270 {\n  -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)\";\n  -webkit-transform: rotate(270deg);\n          transform: rotate(270deg); }\n\n.fa-flip-horizontal {\n  -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)\";\n  -webkit-transform: scale(-1, 1);\n          transform: scale(-1, 1); }\n\n.fa-flip-vertical {\n  -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)\";\n  -webkit-transform: scale(1, -1);\n          transform: scale(1, -1); }\n\n.fa-flip-horizontal.fa-flip-vertical {\n  -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)\";\n  -webkit-transform: scale(-1, -1);\n          transform: scale(-1, -1); }\n\n:root .fa-rotate-90,\n:root .fa-rotate-180,\n:root .fa-rotate-270,\n:root .fa-flip-horizontal,\n:root .fa-flip-vertical {\n  -webkit-filter: none;\n          filter: none; }\n\n.fa-stack {\n  display: inline-block;\n  height: 2em;\n  line-height: 2em;\n  position: relative;\n  vertical-align: middle;\n  width: 2em; }\n\n.fa-stack-1x,\n.fa-stack-2x {\n  left: 0;\n  position: absolute;\n  text-align: center;\n  width: 100%; }\n\n.fa-stack-1x {\n  line-height: inherit; }\n\n.fa-stack-2x {\n  font-size: 2em; }\n\n.fa-inverse {\n  color: #fff; }\n\n/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen\nreaders do not read off random characters that represent icons */\n.fa-500px:before {\n  content: \"\\f26e\"; }\n\n.fa-accessible-icon:before {\n  content: \"\\f368\"; }\n\n.fa-accusoft:before {\n  content: \"\\f369\"; }\n\n.fa-address-book:before {\n  content: \"\\f2b9\"; }\n\n.fa-address-card:before {\n  content: \"\\f2bb\"; }\n\n.fa-adjust:before {\n  content: \"\\f042\"; }\n\n.fa-adn:before {\n  content: \"\\f170\"; }\n\n.fa-adversal:before {\n  content: \"\\f36a\"; }\n\n.fa-affiliatetheme:before {\n  content: \"\\f36b\"; }\n\n.fa-algolia:before {\n  content: \"\\f36c\"; }\n\n.fa-align-center:before {\n  content: \"\\f037\"; }\n\n.fa-align-justify:before {\n  content: \"\\f039\"; }\n\n.fa-align-left:before {\n  content: \"\\f036\"; }\n\n.fa-align-right:before {\n  content: \"\\f038\"; }\n\n.fa-amazon:before {\n  content: \"\\f270\"; }\n\n.fa-amazon-pay:before {\n  content: \"\\f42c\"; }\n\n.fa-ambulance:before {\n  content: \"\\f0f9\"; }\n\n.fa-american-sign-language-interpreting:before {\n  content: \"\\f2a3\"; }\n\n.fa-amilia:before {\n  content: \"\\f36d\"; }\n\n.fa-anchor:before {\n  content: \"\\f13d\"; }\n\n.fa-android:before {\n  content: \"\\f17b\"; }\n\n.fa-angellist:before {\n  content: \"\\f209\"; }\n\n.fa-angle-double-down:before {\n  content: \"\\f103\"; }\n\n.fa-angle-double-left:before {\n  content: \"\\f100\"; }\n\n.fa-angle-double-right:before {\n  content: \"\\f101\"; }\n\n.fa-angle-double-up:before {\n  content: \"\\f102\"; }\n\n.fa-angle-down:before {\n  content: \"\\f107\"; }\n\n.fa-angle-left:before {\n  content: \"\\f104\"; }\n\n.fa-angle-right:before {\n  content: \"\\f105\"; }\n\n.fa-angle-up:before {\n  content: \"\\f106\"; }\n\n.fa-angrycreative:before {\n  content: \"\\f36e\"; }\n\n.fa-angular:before {\n  content: \"\\f420\"; }\n\n.fa-app-store:before {\n  content: \"\\f36f\"; }\n\n.fa-app-store-ios:before {\n  content: \"\\f370\"; }\n\n.fa-apper:before {\n  content: \"\\f371\"; }\n\n.fa-apple:before {\n  content: \"\\f179\"; }\n\n.fa-apple-pay:before {\n  content: \"\\f415\"; }\n\n.fa-archive:before {\n  content: \"\\f187\"; }\n\n.fa-arrow-alt-circle-down:before {\n  content: \"\\f358\"; }\n\n.fa-arrow-alt-circle-left:before {\n  content: \"\\f359\"; }\n\n.fa-arrow-alt-circle-right:before {\n  content: \"\\f35a\"; }\n\n.fa-arrow-alt-circle-up:before {\n  content: \"\\f35b\"; }\n\n.fa-arrow-circle-down:before {\n  content: \"\\f0ab\"; }\n\n.fa-arrow-circle-left:before {\n  content: \"\\f0a8\"; }\n\n.fa-arrow-circle-right:before {\n  content: \"\\f0a9\"; }\n\n.fa-arrow-circle-up:before {\n  content: \"\\f0aa\"; }\n\n.fa-arrow-down:before {\n  content: \"\\f063\"; }\n\n.fa-arrow-left:before {\n  content: \"\\f060\"; }\n\n.fa-arrow-right:before {\n  content: \"\\f061\"; }\n\n.fa-arrow-up:before {\n  content: \"\\f062\"; }\n\n.fa-arrows-alt:before {\n  content: \"\\f0b2\"; }\n\n.fa-arrows-alt-h:before {\n  content: \"\\f337\"; }\n\n.fa-arrows-alt-v:before {\n  content: \"\\f338\"; }\n\n.fa-assistive-listening-systems:before {\n  content: \"\\f2a2\"; }\n\n.fa-asterisk:before {\n  content: \"\\f069\"; }\n\n.fa-asymmetrik:before {\n  content: \"\\f372\"; }\n\n.fa-at:before {\n  content: \"\\f1fa\"; }\n\n.fa-audible:before {\n  content: \"\\f373\"; }\n\n.fa-audio-description:before {\n  content: \"\\f29e\"; }\n\n.fa-autoprefixer:before {\n  content: \"\\f41c\"; }\n\n.fa-avianex:before {\n  content: \"\\f374\"; }\n\n.fa-aviato:before {\n  content: \"\\f421\"; }\n\n.fa-aws:before {\n  content: \"\\f375\"; }\n\n.fa-backward:before {\n  content: \"\\f04a\"; }\n\n.fa-balance-scale:before {\n  content: \"\\f24e\"; }\n\n.fa-ban:before {\n  content: \"\\f05e\"; }\n\n.fa-band-aid:before {\n  content: \"\\f462\"; }\n\n.fa-bandcamp:before {\n  content: \"\\f2d5\"; }\n\n.fa-barcode:before {\n  content: \"\\f02a\"; }\n\n.fa-bars:before {\n  content: \"\\f0c9\"; }\n\n.fa-baseball-ball:before {\n  content: \"\\f433\"; }\n\n.fa-basketball-ball:before {\n  content: \"\\f434\"; }\n\n.fa-bath:before {\n  content: \"\\f2cd\"; }\n\n.fa-battery-empty:before {\n  content: \"\\f244\"; }\n\n.fa-battery-full:before {\n  content: \"\\f240\"; }\n\n.fa-battery-half:before {\n  content: \"\\f242\"; }\n\n.fa-battery-quarter:before {\n  content: \"\\f243\"; }\n\n.fa-battery-three-quarters:before {\n  content: \"\\f241\"; }\n\n.fa-bed:before {\n  content: \"\\f236\"; }\n\n.fa-beer:before {\n  content: \"\\f0fc\"; }\n\n.fa-behance:before {\n  content: \"\\f1b4\"; }\n\n.fa-behance-square:before {\n  content: \"\\f1b5\"; }\n\n.fa-bell:before {\n  content: \"\\f0f3\"; }\n\n.fa-bell-slash:before {\n  content: \"\\f1f6\"; }\n\n.fa-bicycle:before {\n  content: \"\\f206\"; }\n\n.fa-bimobject:before {\n  content: \"\\f378\"; }\n\n.fa-binoculars:before {\n  content: \"\\f1e5\"; }\n\n.fa-birthday-cake:before {\n  content: \"\\f1fd\"; }\n\n.fa-bitbucket:before {\n  content: \"\\f171\"; }\n\n.fa-bitcoin:before {\n  content: \"\\f379\"; }\n\n.fa-bity:before {\n  content: \"\\f37a\"; }\n\n.fa-black-tie:before {\n  content: \"\\f27e\"; }\n\n.fa-blackberry:before {\n  content: \"\\f37b\"; }\n\n.fa-blind:before {\n  content: \"\\f29d\"; }\n\n.fa-blogger:before {\n  content: \"\\f37c\"; }\n\n.fa-blogger-b:before {\n  content: \"\\f37d\"; }\n\n.fa-bluetooth:before {\n  content: \"\\f293\"; }\n\n.fa-bluetooth-b:before {\n  content: \"\\f294\"; }\n\n.fa-bold:before {\n  content: \"\\f032\"; }\n\n.fa-bolt:before {\n  content: \"\\f0e7\"; }\n\n.fa-bomb:before {\n  content: \"\\f1e2\"; }\n\n.fa-book:before {\n  content: \"\\f02d\"; }\n\n.fa-bookmark:before {\n  content: \"\\f02e\"; }\n\n.fa-bowling-ball:before {\n  content: \"\\f436\"; }\n\n.fa-box:before {\n  content: \"\\f466\"; }\n\n.fa-boxes:before {\n  content: \"\\f468\"; }\n\n.fa-braille:before {\n  content: \"\\f2a1\"; }\n\n.fa-briefcase:before {\n  content: \"\\f0b1\"; }\n\n.fa-btc:before {\n  content: \"\\f15a\"; }\n\n.fa-bug:before {\n  content: \"\\f188\"; }\n\n.fa-building:before {\n  content: \"\\f1ad\"; }\n\n.fa-bullhorn:before {\n  content: \"\\f0a1\"; }\n\n.fa-bullseye:before {\n  content: \"\\f140\"; }\n\n.fa-buromobelexperte:before {\n  content: \"\\f37f\"; }\n\n.fa-bus:before {\n  content: \"\\f207\"; }\n\n.fa-buysellads:before {\n  content: \"\\f20d\"; }\n\n.fa-calculator:before {\n  content: \"\\f1ec\"; }\n\n.fa-calendar:before {\n  content: \"\\f133\"; }\n\n.fa-calendar-alt:before {\n  content: \"\\f073\"; }\n\n.fa-calendar-check:before {\n  content: \"\\f274\"; }\n\n.fa-calendar-minus:before {\n  content: \"\\f272\"; }\n\n.fa-calendar-plus:before {\n  content: \"\\f271\"; }\n\n.fa-calendar-times:before {\n  content: \"\\f273\"; }\n\n.fa-camera:before {\n  content: \"\\f030\"; }\n\n.fa-camera-retro:before {\n  content: \"\\f083\"; }\n\n.fa-car:before {\n  content: \"\\f1b9\"; }\n\n.fa-caret-down:before {\n  content: \"\\f0d7\"; }\n\n.fa-caret-left:before {\n  content: \"\\f0d9\"; }\n\n.fa-caret-right:before {\n  content: \"\\f0da\"; }\n\n.fa-caret-square-down:before {\n  content: \"\\f150\"; }\n\n.fa-caret-square-left:before {\n  content: \"\\f191\"; }\n\n.fa-caret-square-right:before {\n  content: \"\\f152\"; }\n\n.fa-caret-square-up:before {\n  content: \"\\f151\"; }\n\n.fa-caret-up:before {\n  content: \"\\f0d8\"; }\n\n.fa-cart-arrow-down:before {\n  content: \"\\f218\"; }\n\n.fa-cart-plus:before {\n  content: \"\\f217\"; }\n\n.fa-cc-amazon-pay:before {\n  content: \"\\f42d\"; }\n\n.fa-cc-amex:before {\n  content: \"\\f1f3\"; }\n\n.fa-cc-apple-pay:before {\n  content: \"\\f416\"; }\n\n.fa-cc-diners-club:before {\n  content: \"\\f24c\"; }\n\n.fa-cc-discover:before {\n  content: \"\\f1f2\"; }\n\n.fa-cc-jcb:before {\n  content: \"\\f24b\"; }\n\n.fa-cc-mastercard:before {\n  content: \"\\f1f1\"; }\n\n.fa-cc-paypal:before {\n  content: \"\\f1f4\"; }\n\n.fa-cc-stripe:before {\n  content: \"\\f1f5\"; }\n\n.fa-cc-visa:before {\n  content: \"\\f1f0\"; }\n\n.fa-centercode:before {\n  content: \"\\f380\"; }\n\n.fa-certificate:before {\n  content: \"\\f0a3\"; }\n\n.fa-chart-area:before {\n  content: \"\\f1fe\"; }\n\n.fa-chart-bar:before {\n  content: \"\\f080\"; }\n\n.fa-chart-line:before {\n  content: \"\\f201\"; }\n\n.fa-chart-pie:before {\n  content: \"\\f200\"; }\n\n.fa-check:before {\n  content: \"\\f00c\"; }\n\n.fa-check-circle:before {\n  content: \"\\f058\"; }\n\n.fa-check-square:before {\n  content: \"\\f14a\"; }\n\n.fa-chess:before {\n  content: \"\\f439\"; }\n\n.fa-chess-bishop:before {\n  content: \"\\f43a\"; }\n\n.fa-chess-board:before {\n  content: \"\\f43c\"; }\n\n.fa-chess-king:before {\n  content: \"\\f43f\"; }\n\n.fa-chess-knight:before {\n  content: \"\\f441\"; }\n\n.fa-chess-pawn:before {\n  content: \"\\f443\"; }\n\n.fa-chess-queen:before {\n  content: \"\\f445\"; }\n\n.fa-chess-rook:before {\n  content: \"\\f447\"; }\n\n.fa-chevron-circle-down:before {\n  content: \"\\f13a\"; }\n\n.fa-chevron-circle-left:before {\n  content: \"\\f137\"; }\n\n.fa-chevron-circle-right:before {\n  content: \"\\f138\"; }\n\n.fa-chevron-circle-up:before {\n  content: \"\\f139\"; }\n\n.fa-chevron-down:before {\n  content: \"\\f078\"; }\n\n.fa-chevron-left:before {\n  content: \"\\f053\"; }\n\n.fa-chevron-right:before {\n  content: \"\\f054\"; }\n\n.fa-chevron-up:before {\n  content: \"\\f077\"; }\n\n.fa-child:before {\n  content: \"\\f1ae\"; }\n\n.fa-chrome:before {\n  content: \"\\f268\"; }\n\n.fa-circle:before {\n  content: \"\\f111\"; }\n\n.fa-circle-notch:before {\n  content: \"\\f1ce\"; }\n\n.fa-clipboard:before {\n  content: \"\\f328\"; }\n\n.fa-clipboard-check:before {\n  content: \"\\f46c\"; }\n\n.fa-clipboard-list:before {\n  content: \"\\f46d\"; }\n\n.fa-clock:before {\n  content: \"\\f017\"; }\n\n.fa-clone:before {\n  content: \"\\f24d\"; }\n\n.fa-closed-captioning:before {\n  content: \"\\f20a\"; }\n\n.fa-cloud:before {\n  content: \"\\f0c2\"; }\n\n.fa-cloud-download-alt:before {\n  content: \"\\f381\"; }\n\n.fa-cloud-upload-alt:before {\n  content: \"\\f382\"; }\n\n.fa-cloudscale:before {\n  content: \"\\f383\"; }\n\n.fa-cloudsmith:before {\n  content: \"\\f384\"; }\n\n.fa-cloudversify:before {\n  content: \"\\f385\"; }\n\n.fa-code:before {\n  content: \"\\f121\"; }\n\n.fa-code-branch:before {\n  content: \"\\f126\"; }\n\n.fa-codepen:before {\n  content: \"\\f1cb\"; }\n\n.fa-codiepie:before {\n  content: \"\\f284\"; }\n\n.fa-coffee:before {\n  content: \"\\f0f4\"; }\n\n.fa-cog:before {\n  content: \"\\f013\"; }\n\n.fa-cogs:before {\n  content: \"\\f085\"; }\n\n.fa-columns:before {\n  content: \"\\f0db\"; }\n\n.fa-comment:before {\n  content: \"\\f075\"; }\n\n.fa-comment-alt:before {\n  content: \"\\f27a\"; }\n\n.fa-comments:before {\n  content: \"\\f086\"; }\n\n.fa-compass:before {\n  content: \"\\f14e\"; }\n\n.fa-compress:before {\n  content: \"\\f066\"; }\n\n.fa-connectdevelop:before {\n  content: \"\\f20e\"; }\n\n.fa-contao:before {\n  content: \"\\f26d\"; }\n\n.fa-copy:before {\n  content: \"\\f0c5\"; }\n\n.fa-copyright:before {\n  content: \"\\f1f9\"; }\n\n.fa-cpanel:before {\n  content: \"\\f388\"; }\n\n.fa-creative-commons:before {\n  content: \"\\f25e\"; }\n\n.fa-credit-card:before {\n  content: \"\\f09d\"; }\n\n.fa-crop:before {\n  content: \"\\f125\"; }\n\n.fa-crosshairs:before {\n  content: \"\\f05b\"; }\n\n.fa-css3:before {\n  content: \"\\f13c\"; }\n\n.fa-css3-alt:before {\n  content: \"\\f38b\"; }\n\n.fa-cube:before {\n  content: \"\\f1b2\"; }\n\n.fa-cubes:before {\n  content: \"\\f1b3\"; }\n\n.fa-cut:before {\n  content: \"\\f0c4\"; }\n\n.fa-cuttlefish:before {\n  content: \"\\f38c\"; }\n\n.fa-d-and-d:before {\n  content: \"\\f38d\"; }\n\n.fa-dashcube:before {\n  content: \"\\f210\"; }\n\n.fa-database:before {\n  content: \"\\f1c0\"; }\n\n.fa-deaf:before {\n  content: \"\\f2a4\"; }\n\n.fa-delicious:before {\n  content: \"\\f1a5\"; }\n\n.fa-deploydog:before {\n  content: \"\\f38e\"; }\n\n.fa-deskpro:before {\n  content: \"\\f38f\"; }\n\n.fa-desktop:before {\n  content: \"\\f108\"; }\n\n.fa-deviantart:before {\n  content: \"\\f1bd\"; }\n\n.fa-digg:before {\n  content: \"\\f1a6\"; }\n\n.fa-digital-ocean:before {\n  content: \"\\f391\"; }\n\n.fa-discord:before {\n  content: \"\\f392\"; }\n\n.fa-discourse:before {\n  content: \"\\f393\"; }\n\n.fa-dna:before {\n  content: \"\\f471\"; }\n\n.fa-dochub:before {\n  content: \"\\f394\"; }\n\n.fa-docker:before {\n  content: \"\\f395\"; }\n\n.fa-dollar-sign:before {\n  content: \"\\f155\"; }\n\n.fa-dolly:before {\n  content: \"\\f472\"; }\n\n.fa-dolly-flatbed:before {\n  content: \"\\f474\"; }\n\n.fa-dot-circle:before {\n  content: \"\\f192\"; }\n\n.fa-download:before {\n  content: \"\\f019\"; }\n\n.fa-draft2digital:before {\n  content: \"\\f396\"; }\n\n.fa-dribbble:before {\n  content: \"\\f17d\"; }\n\n.fa-dribbble-square:before {\n  content: \"\\f397\"; }\n\n.fa-dropbox:before {\n  content: \"\\f16b\"; }\n\n.fa-drupal:before {\n  content: \"\\f1a9\"; }\n\n.fa-dyalog:before {\n  content: \"\\f399\"; }\n\n.fa-earlybirds:before {\n  content: \"\\f39a\"; }\n\n.fa-edge:before {\n  content: \"\\f282\"; }\n\n.fa-edit:before {\n  content: \"\\f044\"; }\n\n.fa-eject:before {\n  content: \"\\f052\"; }\n\n.fa-elementor:before {\n  content: \"\\f430\"; }\n\n.fa-ellipsis-h:before {\n  content: \"\\f141\"; }\n\n.fa-ellipsis-v:before {\n  content: \"\\f142\"; }\n\n.fa-ember:before {\n  content: \"\\f423\"; }\n\n.fa-empire:before {\n  content: \"\\f1d1\"; }\n\n.fa-envelope:before {\n  content: \"\\f0e0\"; }\n\n.fa-envelope-open:before {\n  content: \"\\f2b6\"; }\n\n.fa-envelope-square:before {\n  content: \"\\f199\"; }\n\n.fa-envira:before {\n  content: \"\\f299\"; }\n\n.fa-eraser:before {\n  content: \"\\f12d\"; }\n\n.fa-erlang:before {\n  content: \"\\f39d\"; }\n\n.fa-ethereum:before {\n  content: \"\\f42e\"; }\n\n.fa-etsy:before {\n  content: \"\\f2d7\"; }\n\n.fa-euro-sign:before {\n  content: \"\\f153\"; }\n\n.fa-exchange-alt:before {\n  content: \"\\f362\"; }\n\n.fa-exclamation:before {\n  content: \"\\f12a\"; }\n\n.fa-exclamation-circle:before {\n  content: \"\\f06a\"; }\n\n.fa-exclamation-triangle:before {\n  content: \"\\f071\"; }\n\n.fa-expand:before {\n  content: \"\\f065\"; }\n\n.fa-expand-arrows-alt:before {\n  content: \"\\f31e\"; }\n\n.fa-expeditedssl:before {\n  content: \"\\f23e\"; }\n\n.fa-external-link-alt:before {\n  content: \"\\f35d\"; }\n\n.fa-external-link-square-alt:before {\n  content: \"\\f360\"; }\n\n.fa-eye:before {\n  content: \"\\f06e\"; }\n\n.fa-eye-dropper:before {\n  content: \"\\f1fb\"; }\n\n.fa-eye-slash:before {\n  content: \"\\f070\"; }\n\n.fa-facebook:before {\n  content: \"\\f09a\"; }\n\n.fa-facebook-f:before {\n  content: \"\\f39e\"; }\n\n.fa-facebook-messenger:before {\n  content: \"\\f39f\"; }\n\n.fa-facebook-square:before {\n  content: \"\\f082\"; }\n\n.fa-fast-backward:before {\n  content: \"\\f049\"; }\n\n.fa-fast-forward:before {\n  content: \"\\f050\"; }\n\n.fa-fax:before {\n  content: \"\\f1ac\"; }\n\n.fa-female:before {\n  content: \"\\f182\"; }\n\n.fa-fighter-jet:before {\n  content: \"\\f0fb\"; }\n\n.fa-file:before {\n  content: \"\\f15b\"; }\n\n.fa-file-alt:before {\n  content: \"\\f15c\"; }\n\n.fa-file-archive:before {\n  content: \"\\f1c6\"; }\n\n.fa-file-audio:before {\n  content: \"\\f1c7\"; }\n\n.fa-file-code:before {\n  content: \"\\f1c9\"; }\n\n.fa-file-excel:before {\n  content: \"\\f1c3\"; }\n\n.fa-file-image:before {\n  content: \"\\f1c5\"; }\n\n.fa-file-pdf:before {\n  content: \"\\f1c1\"; }\n\n.fa-file-powerpoint:before {\n  content: \"\\f1c4\"; }\n\n.fa-file-video:before {\n  content: \"\\f1c8\"; }\n\n.fa-file-word:before {\n  content: \"\\f1c2\"; }\n\n.fa-film:before {\n  content: \"\\f008\"; }\n\n.fa-filter:before {\n  content: \"\\f0b0\"; }\n\n.fa-fire:before {\n  content: \"\\f06d\"; }\n\n.fa-fire-extinguisher:before {\n  content: \"\\f134\"; }\n\n.fa-firefox:before {\n  content: \"\\f269\"; }\n\n.fa-first-aid:before {\n  content: \"\\f479\"; }\n\n.fa-first-order:before {\n  content: \"\\f2b0\"; }\n\n.fa-firstdraft:before {\n  content: \"\\f3a1\"; }\n\n.fa-flag:before {\n  content: \"\\f024\"; }\n\n.fa-flag-checkered:before {\n  content: \"\\f11e\"; }\n\n.fa-flask:before {\n  content: \"\\f0c3\"; }\n\n.fa-flickr:before {\n  content: \"\\f16e\"; }\n\n.fa-flipboard:before {\n  content: \"\\f44d\"; }\n\n.fa-fly:before {\n  content: \"\\f417\"; }\n\n.fa-folder:before {\n  content: \"\\f07b\"; }\n\n.fa-folder-open:before {\n  content: \"\\f07c\"; }\n\n.fa-font:before {\n  content: \"\\f031\"; }\n\n.fa-font-awesome:before {\n  content: \"\\f2b4\"; }\n\n.fa-font-awesome-alt:before {\n  content: \"\\f35c\"; }\n\n.fa-font-awesome-flag:before {\n  content: \"\\f425\"; }\n\n.fa-fonticons:before {\n  content: \"\\f280\"; }\n\n.fa-fonticons-fi:before {\n  content: \"\\f3a2\"; }\n\n.fa-football-ball:before {\n  content: \"\\f44e\"; }\n\n.fa-fort-awesome:before {\n  content: \"\\f286\"; }\n\n.fa-fort-awesome-alt:before {\n  content: \"\\f3a3\"; }\n\n.fa-forumbee:before {\n  content: \"\\f211\"; }\n\n.fa-forward:before {\n  content: \"\\f04e\"; }\n\n.fa-foursquare:before {\n  content: \"\\f180\"; }\n\n.fa-free-code-camp:before {\n  content: \"\\f2c5\"; }\n\n.fa-freebsd:before {\n  content: \"\\f3a4\"; }\n\n.fa-frown:before {\n  content: \"\\f119\"; }\n\n.fa-futbol:before {\n  content: \"\\f1e3\"; }\n\n.fa-gamepad:before {\n  content: \"\\f11b\"; }\n\n.fa-gavel:before {\n  content: \"\\f0e3\"; }\n\n.fa-gem:before {\n  content: \"\\f3a5\"; }\n\n.fa-genderless:before {\n  content: \"\\f22d\"; }\n\n.fa-get-pocket:before {\n  content: \"\\f265\"; }\n\n.fa-gg:before {\n  content: \"\\f260\"; }\n\n.fa-gg-circle:before {\n  content: \"\\f261\"; }\n\n.fa-gift:before {\n  content: \"\\f06b\"; }\n\n.fa-git:before {\n  content: \"\\f1d3\"; }\n\n.fa-git-square:before {\n  content: \"\\f1d2\"; }\n\n.fa-github:before {\n  content: \"\\f09b\"; }\n\n.fa-github-alt:before {\n  content: \"\\f113\"; }\n\n.fa-github-square:before {\n  content: \"\\f092\"; }\n\n.fa-gitkraken:before {\n  content: \"\\f3a6\"; }\n\n.fa-gitlab:before {\n  content: \"\\f296\"; }\n\n.fa-gitter:before {\n  content: \"\\f426\"; }\n\n.fa-glass-martini:before {\n  content: \"\\f000\"; }\n\n.fa-glide:before {\n  content: \"\\f2a5\"; }\n\n.fa-glide-g:before {\n  content: \"\\f2a6\"; }\n\n.fa-globe:before {\n  content: \"\\f0ac\"; }\n\n.fa-gofore:before {\n  content: \"\\f3a7\"; }\n\n.fa-golf-ball:before {\n  content: \"\\f450\"; }\n\n.fa-goodreads:before {\n  content: \"\\f3a8\"; }\n\n.fa-goodreads-g:before {\n  content: \"\\f3a9\"; }\n\n.fa-google:before {\n  content: \"\\f1a0\"; }\n\n.fa-google-drive:before {\n  content: \"\\f3aa\"; }\n\n.fa-google-play:before {\n  content: \"\\f3ab\"; }\n\n.fa-google-plus:before {\n  content: \"\\f2b3\"; }\n\n.fa-google-plus-g:before {\n  content: \"\\f0d5\"; }\n\n.fa-google-plus-square:before {\n  content: \"\\f0d4\"; }\n\n.fa-google-wallet:before {\n  content: \"\\f1ee\"; }\n\n.fa-graduation-cap:before {\n  content: \"\\f19d\"; }\n\n.fa-gratipay:before {\n  content: \"\\f184\"; }\n\n.fa-grav:before {\n  content: \"\\f2d6\"; }\n\n.fa-gripfire:before {\n  content: \"\\f3ac\"; }\n\n.fa-grunt:before {\n  content: \"\\f3ad\"; }\n\n.fa-gulp:before {\n  content: \"\\f3ae\"; }\n\n.fa-h-square:before {\n  content: \"\\f0fd\"; }\n\n.fa-hacker-news:before {\n  content: \"\\f1d4\"; }\n\n.fa-hacker-news-square:before {\n  content: \"\\f3af\"; }\n\n.fa-hand-lizard:before {\n  content: \"\\f258\"; }\n\n.fa-hand-paper:before {\n  content: \"\\f256\"; }\n\n.fa-hand-peace:before {\n  content: \"\\f25b\"; }\n\n.fa-hand-point-down:before {\n  content: \"\\f0a7\"; }\n\n.fa-hand-point-left:before {\n  content: \"\\f0a5\"; }\n\n.fa-hand-point-right:before {\n  content: \"\\f0a4\"; }\n\n.fa-hand-point-up:before {\n  content: \"\\f0a6\"; }\n\n.fa-hand-pointer:before {\n  content: \"\\f25a\"; }\n\n.fa-hand-rock:before {\n  content: \"\\f255\"; }\n\n.fa-hand-scissors:before {\n  content: \"\\f257\"; }\n\n.fa-hand-spock:before {\n  content: \"\\f259\"; }\n\n.fa-handshake:before {\n  content: \"\\f2b5\"; }\n\n.fa-hashtag:before {\n  content: \"\\f292\"; }\n\n.fa-hdd:before {\n  content: \"\\f0a0\"; }\n\n.fa-heading:before {\n  content: \"\\f1dc\"; }\n\n.fa-headphones:before {\n  content: \"\\f025\"; }\n\n.fa-heart:before {\n  content: \"\\f004\"; }\n\n.fa-heartbeat:before {\n  content: \"\\f21e\"; }\n\n.fa-hips:before {\n  content: \"\\f452\"; }\n\n.fa-hire-a-helper:before {\n  content: \"\\f3b0\"; }\n\n.fa-history:before {\n  content: \"\\f1da\"; }\n\n.fa-hockey-puck:before {\n  content: \"\\f453\"; }\n\n.fa-home:before {\n  content: \"\\f015\"; }\n\n.fa-hooli:before {\n  content: \"\\f427\"; }\n\n.fa-hospital:before {\n  content: \"\\f0f8\"; }\n\n.fa-hospital-symbol:before {\n  content: \"\\f47e\"; }\n\n.fa-hotjar:before {\n  content: \"\\f3b1\"; }\n\n.fa-hourglass:before {\n  content: \"\\f254\"; }\n\n.fa-hourglass-end:before {\n  content: \"\\f253\"; }\n\n.fa-hourglass-half:before {\n  content: \"\\f252\"; }\n\n.fa-hourglass-start:before {\n  content: \"\\f251\"; }\n\n.fa-houzz:before {\n  content: \"\\f27c\"; }\n\n.fa-html5:before {\n  content: \"\\f13b\"; }\n\n.fa-hubspot:before {\n  content: \"\\f3b2\"; }\n\n.fa-i-cursor:before {\n  content: \"\\f246\"; }\n\n.fa-id-badge:before {\n  content: \"\\f2c1\"; }\n\n.fa-id-card:before {\n  content: \"\\f2c2\"; }\n\n.fa-image:before {\n  content: \"\\f03e\"; }\n\n.fa-images:before {\n  content: \"\\f302\"; }\n\n.fa-imdb:before {\n  content: \"\\f2d8\"; }\n\n.fa-inbox:before {\n  content: \"\\f01c\"; }\n\n.fa-indent:before {\n  content: \"\\f03c\"; }\n\n.fa-industry:before {\n  content: \"\\f275\"; }\n\n.fa-info:before {\n  content: \"\\f129\"; }\n\n.fa-info-circle:before {\n  content: \"\\f05a\"; }\n\n.fa-instagram:before {\n  content: \"\\f16d\"; }\n\n.fa-internet-explorer:before {\n  content: \"\\f26b\"; }\n\n.fa-ioxhost:before {\n  content: \"\\f208\"; }\n\n.fa-italic:before {\n  content: \"\\f033\"; }\n\n.fa-itunes:before {\n  content: \"\\f3b4\"; }\n\n.fa-itunes-note:before {\n  content: \"\\f3b5\"; }\n\n.fa-jenkins:before {\n  content: \"\\f3b6\"; }\n\n.fa-joget:before {\n  content: \"\\f3b7\"; }\n\n.fa-joomla:before {\n  content: \"\\f1aa\"; }\n\n.fa-js:before {\n  content: \"\\f3b8\"; }\n\n.fa-js-square:before {\n  content: \"\\f3b9\"; }\n\n.fa-jsfiddle:before {\n  content: \"\\f1cc\"; }\n\n.fa-key:before {\n  content: \"\\f084\"; }\n\n.fa-keyboard:before {\n  content: \"\\f11c\"; }\n\n.fa-keycdn:before {\n  content: \"\\f3ba\"; }\n\n.fa-kickstarter:before {\n  content: \"\\f3bb\"; }\n\n.fa-kickstarter-k:before {\n  content: \"\\f3bc\"; }\n\n.fa-korvue:before {\n  content: \"\\f42f\"; }\n\n.fa-language:before {\n  content: \"\\f1ab\"; }\n\n.fa-laptop:before {\n  content: \"\\f109\"; }\n\n.fa-laravel:before {\n  content: \"\\f3bd\"; }\n\n.fa-lastfm:before {\n  content: \"\\f202\"; }\n\n.fa-lastfm-square:before {\n  content: \"\\f203\"; }\n\n.fa-leaf:before {\n  content: \"\\f06c\"; }\n\n.fa-leanpub:before {\n  content: \"\\f212\"; }\n\n.fa-lemon:before {\n  content: \"\\f094\"; }\n\n.fa-less:before {\n  content: \"\\f41d\"; }\n\n.fa-level-down-alt:before {\n  content: \"\\f3be\"; }\n\n.fa-level-up-alt:before {\n  content: \"\\f3bf\"; }\n\n.fa-life-ring:before {\n  content: \"\\f1cd\"; }\n\n.fa-lightbulb:before {\n  content: \"\\f0eb\"; }\n\n.fa-line:before {\n  content: \"\\f3c0\"; }\n\n.fa-link:before {\n  content: \"\\f0c1\"; }\n\n.fa-linkedin:before {\n  content: \"\\f08c\"; }\n\n.fa-linkedin-in:before {\n  content: \"\\f0e1\"; }\n\n.fa-linode:before {\n  content: \"\\f2b8\"; }\n\n.fa-linux:before {\n  content: \"\\f17c\"; }\n\n.fa-lira-sign:before {\n  content: \"\\f195\"; }\n\n.fa-list:before {\n  content: \"\\f03a\"; }\n\n.fa-list-alt:before {\n  content: \"\\f022\"; }\n\n.fa-list-ol:before {\n  content: \"\\f0cb\"; }\n\n.fa-list-ul:before {\n  content: \"\\f0ca\"; }\n\n.fa-location-arrow:before {\n  content: \"\\f124\"; }\n\n.fa-lock:before {\n  content: \"\\f023\"; }\n\n.fa-lock-open:before {\n  content: \"\\f3c1\"; }\n\n.fa-long-arrow-alt-down:before {\n  content: \"\\f309\"; }\n\n.fa-long-arrow-alt-left:before {\n  content: \"\\f30a\"; }\n\n.fa-long-arrow-alt-right:before {\n  content: \"\\f30b\"; }\n\n.fa-long-arrow-alt-up:before {\n  content: \"\\f30c\"; }\n\n.fa-low-vision:before {\n  content: \"\\f2a8\"; }\n\n.fa-lyft:before {\n  content: \"\\f3c3\"; }\n\n.fa-magento:before {\n  content: \"\\f3c4\"; }\n\n.fa-magic:before {\n  content: \"\\f0d0\"; }\n\n.fa-magnet:before {\n  content: \"\\f076\"; }\n\n.fa-male:before {\n  content: \"\\f183\"; }\n\n.fa-map:before {\n  content: \"\\f279\"; }\n\n.fa-map-marker:before {\n  content: \"\\f041\"; }\n\n.fa-map-marker-alt:before {\n  content: \"\\f3c5\"; }\n\n.fa-map-pin:before {\n  content: \"\\f276\"; }\n\n.fa-map-signs:before {\n  content: \"\\f277\"; }\n\n.fa-mars:before {\n  content: \"\\f222\"; }\n\n.fa-mars-double:before {\n  content: \"\\f227\"; }\n\n.fa-mars-stroke:before {\n  content: \"\\f229\"; }\n\n.fa-mars-stroke-h:before {\n  content: \"\\f22b\"; }\n\n.fa-mars-stroke-v:before {\n  content: \"\\f22a\"; }\n\n.fa-maxcdn:before {\n  content: \"\\f136\"; }\n\n.fa-medapps:before {\n  content: \"\\f3c6\"; }\n\n.fa-medium:before {\n  content: \"\\f23a\"; }\n\n.fa-medium-m:before {\n  content: \"\\f3c7\"; }\n\n.fa-medkit:before {\n  content: \"\\f0fa\"; }\n\n.fa-medrt:before {\n  content: \"\\f3c8\"; }\n\n.fa-meetup:before {\n  content: \"\\f2e0\"; }\n\n.fa-meh:before {\n  content: \"\\f11a\"; }\n\n.fa-mercury:before {\n  content: \"\\f223\"; }\n\n.fa-microchip:before {\n  content: \"\\f2db\"; }\n\n.fa-microphone:before {\n  content: \"\\f130\"; }\n\n.fa-microphone-slash:before {\n  content: \"\\f131\"; }\n\n.fa-microsoft:before {\n  content: \"\\f3ca\"; }\n\n.fa-minus:before {\n  content: \"\\f068\"; }\n\n.fa-minus-circle:before {\n  content: \"\\f056\"; }\n\n.fa-minus-square:before {\n  content: \"\\f146\"; }\n\n.fa-mix:before {\n  content: \"\\f3cb\"; }\n\n.fa-mixcloud:before {\n  content: \"\\f289\"; }\n\n.fa-mizuni:before {\n  content: \"\\f3cc\"; }\n\n.fa-mobile:before {\n  content: \"\\f10b\"; }\n\n.fa-mobile-alt:before {\n  content: \"\\f3cd\"; }\n\n.fa-modx:before {\n  content: \"\\f285\"; }\n\n.fa-monero:before {\n  content: \"\\f3d0\"; }\n\n.fa-money-bill-alt:before {\n  content: \"\\f3d1\"; }\n\n.fa-moon:before {\n  content: \"\\f186\"; }\n\n.fa-motorcycle:before {\n  content: \"\\f21c\"; }\n\n.fa-mouse-pointer:before {\n  content: \"\\f245\"; }\n\n.fa-music:before {\n  content: \"\\f001\"; }\n\n.fa-napster:before {\n  content: \"\\f3d2\"; }\n\n.fa-neuter:before {\n  content: \"\\f22c\"; }\n\n.fa-newspaper:before {\n  content: \"\\f1ea\"; }\n\n.fa-nintendo-switch:before {\n  content: \"\\f418\"; }\n\n.fa-node:before {\n  content: \"\\f419\"; }\n\n.fa-node-js:before {\n  content: \"\\f3d3\"; }\n\n.fa-npm:before {\n  content: \"\\f3d4\"; }\n\n.fa-ns8:before {\n  content: \"\\f3d5\"; }\n\n.fa-nutritionix:before {\n  content: \"\\f3d6\"; }\n\n.fa-object-group:before {\n  content: \"\\f247\"; }\n\n.fa-object-ungroup:before {\n  content: \"\\f248\"; }\n\n.fa-odnoklassniki:before {\n  content: \"\\f263\"; }\n\n.fa-odnoklassniki-square:before {\n  content: \"\\f264\"; }\n\n.fa-opencart:before {\n  content: \"\\f23d\"; }\n\n.fa-openid:before {\n  content: \"\\f19b\"; }\n\n.fa-opera:before {\n  content: \"\\f26a\"; }\n\n.fa-optin-monster:before {\n  content: \"\\f23c\"; }\n\n.fa-osi:before {\n  content: \"\\f41a\"; }\n\n.fa-outdent:before {\n  content: \"\\f03b\"; }\n\n.fa-page4:before {\n  content: \"\\f3d7\"; }\n\n.fa-pagelines:before {\n  content: \"\\f18c\"; }\n\n.fa-paint-brush:before {\n  content: \"\\f1fc\"; }\n\n.fa-palfed:before {\n  content: \"\\f3d8\"; }\n\n.fa-pallet:before {\n  content: \"\\f482\"; }\n\n.fa-paper-plane:before {\n  content: \"\\f1d8\"; }\n\n.fa-paperclip:before {\n  content: \"\\f0c6\"; }\n\n.fa-paragraph:before {\n  content: \"\\f1dd\"; }\n\n.fa-paste:before {\n  content: \"\\f0ea\"; }\n\n.fa-patreon:before {\n  content: \"\\f3d9\"; }\n\n.fa-pause:before {\n  content: \"\\f04c\"; }\n\n.fa-pause-circle:before {\n  content: \"\\f28b\"; }\n\n.fa-paw:before {\n  content: \"\\f1b0\"; }\n\n.fa-paypal:before {\n  content: \"\\f1ed\"; }\n\n.fa-pen-square:before {\n  content: \"\\f14b\"; }\n\n.fa-pencil-alt:before {\n  content: \"\\f303\"; }\n\n.fa-percent:before {\n  content: \"\\f295\"; }\n\n.fa-periscope:before {\n  content: \"\\f3da\"; }\n\n.fa-phabricator:before {\n  content: \"\\f3db\"; }\n\n.fa-phoenix-framework:before {\n  content: \"\\f3dc\"; }\n\n.fa-phone:before {\n  content: \"\\f095\"; }\n\n.fa-phone-square:before {\n  content: \"\\f098\"; }\n\n.fa-phone-volume:before {\n  content: \"\\f2a0\"; }\n\n.fa-php:before {\n  content: \"\\f457\"; }\n\n.fa-pied-piper:before {\n  content: \"\\f2ae\"; }\n\n.fa-pied-piper-alt:before {\n  content: \"\\f1a8\"; }\n\n.fa-pied-piper-pp:before {\n  content: \"\\f1a7\"; }\n\n.fa-pills:before {\n  content: \"\\f484\"; }\n\n.fa-pinterest:before {\n  content: \"\\f0d2\"; }\n\n.fa-pinterest-p:before {\n  content: \"\\f231\"; }\n\n.fa-pinterest-square:before {\n  content: \"\\f0d3\"; }\n\n.fa-plane:before {\n  content: \"\\f072\"; }\n\n.fa-play:before {\n  content: \"\\f04b\"; }\n\n.fa-play-circle:before {\n  content: \"\\f144\"; }\n\n.fa-playstation:before {\n  content: \"\\f3df\"; }\n\n.fa-plug:before {\n  content: \"\\f1e6\"; }\n\n.fa-plus:before {\n  content: \"\\f067\"; }\n\n.fa-plus-circle:before {\n  content: \"\\f055\"; }\n\n.fa-plus-square:before {\n  content: \"\\f0fe\"; }\n\n.fa-podcast:before {\n  content: \"\\f2ce\"; }\n\n.fa-pound-sign:before {\n  content: \"\\f154\"; }\n\n.fa-power-off:before {\n  content: \"\\f011\"; }\n\n.fa-print:before {\n  content: \"\\f02f\"; }\n\n.fa-product-hunt:before {\n  content: \"\\f288\"; }\n\n.fa-pushed:before {\n  content: \"\\f3e1\"; }\n\n.fa-puzzle-piece:before {\n  content: \"\\f12e\"; }\n\n.fa-python:before {\n  content: \"\\f3e2\"; }\n\n.fa-qq:before {\n  content: \"\\f1d6\"; }\n\n.fa-qrcode:before {\n  content: \"\\f029\"; }\n\n.fa-question:before {\n  content: \"\\f128\"; }\n\n.fa-question-circle:before {\n  content: \"\\f059\"; }\n\n.fa-quidditch:before {\n  content: \"\\f458\"; }\n\n.fa-quinscape:before {\n  content: \"\\f459\"; }\n\n.fa-quora:before {\n  content: \"\\f2c4\"; }\n\n.fa-quote-left:before {\n  content: \"\\f10d\"; }\n\n.fa-quote-right:before {\n  content: \"\\f10e\"; }\n\n.fa-random:before {\n  content: \"\\f074\"; }\n\n.fa-ravelry:before {\n  content: \"\\f2d9\"; }\n\n.fa-react:before {\n  content: \"\\f41b\"; }\n\n.fa-rebel:before {\n  content: \"\\f1d0\"; }\n\n.fa-recycle:before {\n  content: \"\\f1b8\"; }\n\n.fa-red-river:before {\n  content: \"\\f3e3\"; }\n\n.fa-reddit:before {\n  content: \"\\f1a1\"; }\n\n.fa-reddit-alien:before {\n  content: \"\\f281\"; }\n\n.fa-reddit-square:before {\n  content: \"\\f1a2\"; }\n\n.fa-redo:before {\n  content: \"\\f01e\"; }\n\n.fa-redo-alt:before {\n  content: \"\\f2f9\"; }\n\n.fa-registered:before {\n  content: \"\\f25d\"; }\n\n.fa-rendact:before {\n  content: \"\\f3e4\"; }\n\n.fa-renren:before {\n  content: \"\\f18b\"; }\n\n.fa-reply:before {\n  content: \"\\f3e5\"; }\n\n.fa-reply-all:before {\n  content: \"\\f122\"; }\n\n.fa-replyd:before {\n  content: \"\\f3e6\"; }\n\n.fa-resolving:before {\n  content: \"\\f3e7\"; }\n\n.fa-retweet:before {\n  content: \"\\f079\"; }\n\n.fa-road:before {\n  content: \"\\f018\"; }\n\n.fa-rocket:before {\n  content: \"\\f135\"; }\n\n.fa-rocketchat:before {\n  content: \"\\f3e8\"; }\n\n.fa-rockrms:before {\n  content: \"\\f3e9\"; }\n\n.fa-rss:before {\n  content: \"\\f09e\"; }\n\n.fa-rss-square:before {\n  content: \"\\f143\"; }\n\n.fa-ruble-sign:before {\n  content: \"\\f158\"; }\n\n.fa-rupee-sign:before {\n  content: \"\\f156\"; }\n\n.fa-safari:before {\n  content: \"\\f267\"; }\n\n.fa-sass:before {\n  content: \"\\f41e\"; }\n\n.fa-save:before {\n  content: \"\\f0c7\"; }\n\n.fa-schlix:before {\n  content: \"\\f3ea\"; }\n\n.fa-scribd:before {\n  content: \"\\f28a\"; }\n\n.fa-search:before {\n  content: \"\\f002\"; }\n\n.fa-search-minus:before {\n  content: \"\\f010\"; }\n\n.fa-search-plus:before {\n  content: \"\\f00e\"; }\n\n.fa-searchengin:before {\n  content: \"\\f3eb\"; }\n\n.fa-sellcast:before {\n  content: \"\\f2da\"; }\n\n.fa-sellsy:before {\n  content: \"\\f213\"; }\n\n.fa-server:before {\n  content: \"\\f233\"; }\n\n.fa-servicestack:before {\n  content: \"\\f3ec\"; }\n\n.fa-share:before {\n  content: \"\\f064\"; }\n\n.fa-share-alt:before {\n  content: \"\\f1e0\"; }\n\n.fa-share-alt-square:before {\n  content: \"\\f1e1\"; }\n\n.fa-share-square:before {\n  content: \"\\f14d\"; }\n\n.fa-shekel-sign:before {\n  content: \"\\f20b\"; }\n\n.fa-shield-alt:before {\n  content: \"\\f3ed\"; }\n\n.fa-ship:before {\n  content: \"\\f21a\"; }\n\n.fa-shipping-fast:before {\n  content: \"\\f48b\"; }\n\n.fa-shirtsinbulk:before {\n  content: \"\\f214\"; }\n\n.fa-shopping-bag:before {\n  content: \"\\f290\"; }\n\n.fa-shopping-basket:before {\n  content: \"\\f291\"; }\n\n.fa-shopping-cart:before {\n  content: \"\\f07a\"; }\n\n.fa-shower:before {\n  content: \"\\f2cc\"; }\n\n.fa-sign-in-alt:before {\n  content: \"\\f2f6\"; }\n\n.fa-sign-language:before {\n  content: \"\\f2a7\"; }\n\n.fa-sign-out-alt:before {\n  content: \"\\f2f5\"; }\n\n.fa-signal:before {\n  content: \"\\f012\"; }\n\n.fa-simplybuilt:before {\n  content: \"\\f215\"; }\n\n.fa-sistrix:before {\n  content: \"\\f3ee\"; }\n\n.fa-sitemap:before {\n  content: \"\\f0e8\"; }\n\n.fa-skyatlas:before {\n  content: \"\\f216\"; }\n\n.fa-skype:before {\n  content: \"\\f17e\"; }\n\n.fa-slack:before {\n  content: \"\\f198\"; }\n\n.fa-slack-hash:before {\n  content: \"\\f3ef\"; }\n\n.fa-sliders-h:before {\n  content: \"\\f1de\"; }\n\n.fa-slideshare:before {\n  content: \"\\f1e7\"; }\n\n.fa-smile:before {\n  content: \"\\f118\"; }\n\n.fa-snapchat:before {\n  content: \"\\f2ab\"; }\n\n.fa-snapchat-ghost:before {\n  content: \"\\f2ac\"; }\n\n.fa-snapchat-square:before {\n  content: \"\\f2ad\"; }\n\n.fa-snowflake:before {\n  content: \"\\f2dc\"; }\n\n.fa-sort:before {\n  content: \"\\f0dc\"; }\n\n.fa-sort-alpha-down:before {\n  content: \"\\f15d\"; }\n\n.fa-sort-alpha-up:before {\n  content: \"\\f15e\"; }\n\n.fa-sort-amount-down:before {\n  content: \"\\f160\"; }\n\n.fa-sort-amount-up:before {\n  content: \"\\f161\"; }\n\n.fa-sort-down:before {\n  content: \"\\f0dd\"; }\n\n.fa-sort-numeric-down:before {\n  content: \"\\f162\"; }\n\n.fa-sort-numeric-up:before {\n  content: \"\\f163\"; }\n\n.fa-sort-up:before {\n  content: \"\\f0de\"; }\n\n.fa-soundcloud:before {\n  content: \"\\f1be\"; }\n\n.fa-space-shuttle:before {\n  content: \"\\f197\"; }\n\n.fa-speakap:before {\n  content: \"\\f3f3\"; }\n\n.fa-spinner:before {\n  content: \"\\f110\"; }\n\n.fa-spotify:before {\n  content: \"\\f1bc\"; }\n\n.fa-square:before {\n  content: \"\\f0c8\"; }\n\n.fa-square-full:before {\n  content: \"\\f45c\"; }\n\n.fa-stack-exchange:before {\n  content: \"\\f18d\"; }\n\n.fa-stack-overflow:before {\n  content: \"\\f16c\"; }\n\n.fa-star:before {\n  content: \"\\f005\"; }\n\n.fa-star-half:before {\n  content: \"\\f089\"; }\n\n.fa-staylinked:before {\n  content: \"\\f3f5\"; }\n\n.fa-steam:before {\n  content: \"\\f1b6\"; }\n\n.fa-steam-square:before {\n  content: \"\\f1b7\"; }\n\n.fa-steam-symbol:before {\n  content: \"\\f3f6\"; }\n\n.fa-step-backward:before {\n  content: \"\\f048\"; }\n\n.fa-step-forward:before {\n  content: \"\\f051\"; }\n\n.fa-stethoscope:before {\n  content: \"\\f0f1\"; }\n\n.fa-sticker-mule:before {\n  content: \"\\f3f7\"; }\n\n.fa-sticky-note:before {\n  content: \"\\f249\"; }\n\n.fa-stop:before {\n  content: \"\\f04d\"; }\n\n.fa-stop-circle:before {\n  content: \"\\f28d\"; }\n\n.fa-stopwatch:before {\n  content: \"\\f2f2\"; }\n\n.fa-strava:before {\n  content: \"\\f428\"; }\n\n.fa-street-view:before {\n  content: \"\\f21d\"; }\n\n.fa-strikethrough:before {\n  content: \"\\f0cc\"; }\n\n.fa-stripe:before {\n  content: \"\\f429\"; }\n\n.fa-stripe-s:before {\n  content: \"\\f42a\"; }\n\n.fa-studiovinari:before {\n  content: \"\\f3f8\"; }\n\n.fa-stumbleupon:before {\n  content: \"\\f1a4\"; }\n\n.fa-stumbleupon-circle:before {\n  content: \"\\f1a3\"; }\n\n.fa-subscript:before {\n  content: \"\\f12c\"; }\n\n.fa-subway:before {\n  content: \"\\f239\"; }\n\n.fa-suitcase:before {\n  content: \"\\f0f2\"; }\n\n.fa-sun:before {\n  content: \"\\f185\"; }\n\n.fa-superpowers:before {\n  content: \"\\f2dd\"; }\n\n.fa-superscript:before {\n  content: \"\\f12b\"; }\n\n.fa-supple:before {\n  content: \"\\f3f9\"; }\n\n.fa-sync:before {\n  content: \"\\f021\"; }\n\n.fa-sync-alt:before {\n  content: \"\\f2f1\"; }\n\n.fa-syringe:before {\n  content: \"\\f48e\"; }\n\n.fa-table:before {\n  content: \"\\f0ce\"; }\n\n.fa-table-tennis:before {\n  content: \"\\f45d\"; }\n\n.fa-tablet:before {\n  content: \"\\f10a\"; }\n\n.fa-tablet-alt:before {\n  content: \"\\f3fa\"; }\n\n.fa-tachometer-alt:before {\n  content: \"\\f3fd\"; }\n\n.fa-tag:before {\n  content: \"\\f02b\"; }\n\n.fa-tags:before {\n  content: \"\\f02c\"; }\n\n.fa-tasks:before {\n  content: \"\\f0ae\"; }\n\n.fa-taxi:before {\n  content: \"\\f1ba\"; }\n\n.fa-telegram:before {\n  content: \"\\f2c6\"; }\n\n.fa-telegram-plane:before {\n  content: \"\\f3fe\"; }\n\n.fa-tencent-weibo:before {\n  content: \"\\f1d5\"; }\n\n.fa-terminal:before {\n  content: \"\\f120\"; }\n\n.fa-text-height:before {\n  content: \"\\f034\"; }\n\n.fa-text-width:before {\n  content: \"\\f035\"; }\n\n.fa-th:before {\n  content: \"\\f00a\"; }\n\n.fa-th-large:before {\n  content: \"\\f009\"; }\n\n.fa-th-list:before {\n  content: \"\\f00b\"; }\n\n.fa-themeisle:before {\n  content: \"\\f2b2\"; }\n\n.fa-thermometer:before {\n  content: \"\\f491\"; }\n\n.fa-thermometer-empty:before {\n  content: \"\\f2cb\"; }\n\n.fa-thermometer-full:before {\n  content: \"\\f2c7\"; }\n\n.fa-thermometer-half:before {\n  content: \"\\f2c9\"; }\n\n.fa-thermometer-quarter:before {\n  content: \"\\f2ca\"; }\n\n.fa-thermometer-three-quarters:before {\n  content: \"\\f2c8\"; }\n\n.fa-thumbs-down:before {\n  content: \"\\f165\"; }\n\n.fa-thumbs-up:before {\n  content: \"\\f164\"; }\n\n.fa-thumbtack:before {\n  content: \"\\f08d\"; }\n\n.fa-ticket-alt:before {\n  content: \"\\f3ff\"; }\n\n.fa-times:before {\n  content: \"\\f00d\"; }\n\n.fa-times-circle:before {\n  content: \"\\f057\"; }\n\n.fa-tint:before {\n  content: \"\\f043\"; }\n\n.fa-toggle-off:before {\n  content: \"\\f204\"; }\n\n.fa-toggle-on:before {\n  content: \"\\f205\"; }\n\n.fa-trademark:before {\n  content: \"\\f25c\"; }\n\n.fa-train:before {\n  content: \"\\f238\"; }\n\n.fa-transgender:before {\n  content: \"\\f224\"; }\n\n.fa-transgender-alt:before {\n  content: \"\\f225\"; }\n\n.fa-trash:before {\n  content: \"\\f1f8\"; }\n\n.fa-trash-alt:before {\n  content: \"\\f2ed\"; }\n\n.fa-tree:before {\n  content: \"\\f1bb\"; }\n\n.fa-trello:before {\n  content: \"\\f181\"; }\n\n.fa-tripadvisor:before {\n  content: \"\\f262\"; }\n\n.fa-trophy:before {\n  content: \"\\f091\"; }\n\n.fa-truck:before {\n  content: \"\\f0d1\"; }\n\n.fa-tty:before {\n  content: \"\\f1e4\"; }\n\n.fa-tumblr:before {\n  content: \"\\f173\"; }\n\n.fa-tumblr-square:before {\n  content: \"\\f174\"; }\n\n.fa-tv:before {\n  content: \"\\f26c\"; }\n\n.fa-twitch:before {\n  content: \"\\f1e8\"; }\n\n.fa-twitter:before {\n  content: \"\\f099\"; }\n\n.fa-twitter-square:before {\n  content: \"\\f081\"; }\n\n.fa-typo3:before {\n  content: \"\\f42b\"; }\n\n.fa-uber:before {\n  content: \"\\f402\"; }\n\n.fa-uikit:before {\n  content: \"\\f403\"; }\n\n.fa-umbrella:before {\n  content: \"\\f0e9\"; }\n\n.fa-underline:before {\n  content: \"\\f0cd\"; }\n\n.fa-undo:before {\n  content: \"\\f0e2\"; }\n\n.fa-undo-alt:before {\n  content: \"\\f2ea\"; }\n\n.fa-uniregistry:before {\n  content: \"\\f404\"; }\n\n.fa-universal-access:before {\n  content: \"\\f29a\"; }\n\n.fa-university:before {\n  content: \"\\f19c\"; }\n\n.fa-unlink:before {\n  content: \"\\f127\"; }\n\n.fa-unlock:before {\n  content: \"\\f09c\"; }\n\n.fa-unlock-alt:before {\n  content: \"\\f13e\"; }\n\n.fa-untappd:before {\n  content: \"\\f405\"; }\n\n.fa-upload:before {\n  content: \"\\f093\"; }\n\n.fa-usb:before {\n  content: \"\\f287\"; }\n\n.fa-user:before {\n  content: \"\\f007\"; }\n\n.fa-user-circle:before {\n  content: \"\\f2bd\"; }\n\n.fa-user-md:before {\n  content: \"\\f0f0\"; }\n\n.fa-user-plus:before {\n  content: \"\\f234\"; }\n\n.fa-user-secret:before {\n  content: \"\\f21b\"; }\n\n.fa-user-times:before {\n  content: \"\\f235\"; }\n\n.fa-users:before {\n  content: \"\\f0c0\"; }\n\n.fa-ussunnah:before {\n  content: \"\\f407\"; }\n\n.fa-utensil-spoon:before {\n  content: \"\\f2e5\"; }\n\n.fa-utensils:before {\n  content: \"\\f2e7\"; }\n\n.fa-vaadin:before {\n  content: \"\\f408\"; }\n\n.fa-venus:before {\n  content: \"\\f221\"; }\n\n.fa-venus-double:before {\n  content: \"\\f226\"; }\n\n.fa-venus-mars:before {\n  content: \"\\f228\"; }\n\n.fa-viacoin:before {\n  content: \"\\f237\"; }\n\n.fa-viadeo:before {\n  content: \"\\f2a9\"; }\n\n.fa-viadeo-square:before {\n  content: \"\\f2aa\"; }\n\n.fa-viber:before {\n  content: \"\\f409\"; }\n\n.fa-video:before {\n  content: \"\\f03d\"; }\n\n.fa-vimeo:before {\n  content: \"\\f40a\"; }\n\n.fa-vimeo-square:before {\n  content: \"\\f194\"; }\n\n.fa-vimeo-v:before {\n  content: \"\\f27d\"; }\n\n.fa-vine:before {\n  content: \"\\f1ca\"; }\n\n.fa-vk:before {\n  content: \"\\f189\"; }\n\n.fa-vnv:before {\n  content: \"\\f40b\"; }\n\n.fa-volleyball-ball:before {\n  content: \"\\f45f\"; }\n\n.fa-volume-down:before {\n  content: \"\\f027\"; }\n\n.fa-volume-off:before {\n  content: \"\\f026\"; }\n\n.fa-volume-up:before {\n  content: \"\\f028\"; }\n\n.fa-vuejs:before {\n  content: \"\\f41f\"; }\n\n.fa-warehouse:before {\n  content: \"\\f494\"; }\n\n.fa-weibo:before {\n  content: \"\\f18a\"; }\n\n.fa-weight:before {\n  content: \"\\f496\"; }\n\n.fa-weixin:before {\n  content: \"\\f1d7\"; }\n\n.fa-whatsapp:before {\n  content: \"\\f232\"; }\n\n.fa-whatsapp-square:before {\n  content: \"\\f40c\"; }\n\n.fa-wheelchair:before {\n  content: \"\\f193\"; }\n\n.fa-whmcs:before {\n  content: \"\\f40d\"; }\n\n.fa-wifi:before {\n  content: \"\\f1eb\"; }\n\n.fa-wikipedia-w:before {\n  content: \"\\f266\"; }\n\n.fa-window-close:before {\n  content: \"\\f410\"; }\n\n.fa-window-maximize:before {\n  content: \"\\f2d0\"; }\n\n.fa-window-minimize:before {\n  content: \"\\f2d1\"; }\n\n.fa-window-restore:before {\n  content: \"\\f2d2\"; }\n\n.fa-windows:before {\n  content: \"\\f17a\"; }\n\n.fa-won-sign:before {\n  content: \"\\f159\"; }\n\n.fa-wordpress:before {\n  content: \"\\f19a\"; }\n\n.fa-wordpress-simple:before {\n  content: \"\\f411\"; }\n\n.fa-wpbeginner:before {\n  content: \"\\f297\"; }\n\n.fa-wpexplorer:before {\n  content: \"\\f2de\"; }\n\n.fa-wpforms:before {\n  content: \"\\f298\"; }\n\n.fa-wrench:before {\n  content: \"\\f0ad\"; }\n\n.fa-xbox:before {\n  content: \"\\f412\"; }\n\n.fa-xing:before {\n  content: \"\\f168\"; }\n\n.fa-xing-square:before {\n  content: \"\\f169\"; }\n\n.fa-y-combinator:before {\n  content: \"\\f23b\"; }\n\n.fa-yahoo:before {\n  content: \"\\f19e\"; }\n\n.fa-yandex:before {\n  content: \"\\f413\"; }\n\n.fa-yandex-international:before {\n  content: \"\\f414\"; }\n\n.fa-yelp:before {\n  content: \"\\f1e9\"; }\n\n.fa-yen-sign:before {\n  content: \"\\f157\"; }\n\n.fa-yoast:before {\n  content: \"\\f2b1\"; }\n\n.fa-youtube:before {\n  content: \"\\f167\"; }\n\n.fa-youtube-square:before {\n  content: \"\\f431\"; }\n\n.sr-only {\n  border: 0;\n  clip: rect(0, 0, 0, 0);\n  height: 1px;\n  margin: -1px;\n  overflow: hidden;\n  padding: 0;\n  position: absolute;\n  width: 1px; }\n\n.sr-only-focusable:active, .sr-only-focusable:focus {\n  clip: auto;\n  height: auto;\n  margin: 0;\n  overflow: visible;\n  position: static;\n  width: auto; }\n@font-face {\n  font-family: 'Font Awesome 5 Brands';\n  font-style: normal;\n  font-weight: normal;\n  src: url(\"../webfonts/fa-brands-400.eot\");\n  src: url(\"../webfonts/fa-brands-400.eot?#iefix\") format(\"embedded-opentype\"), url(\"../webfonts/fa-brands-400.woff2\") format(\"woff2\"), url(\"../webfonts/fa-brands-400.woff\") format(\"woff\"), url(\"../webfonts/fa-brands-400.ttf\") format(\"truetype\"), url(\"../webfonts/fa-brands-400.svg#fontawesome\") format(\"svg\"); }\n\n.fab {\n  font-family: 'Font Awesome 5 Brands'; }\n@font-face {\n  font-family: 'Font Awesome 5 Free';\n  font-style: normal;\n  font-weight: 400;\n  src: url(\"../webfonts/fa-regular-400.eot\");\n  src: url(\"../webfonts/fa-regular-400.eot?#iefix\") format(\"embedded-opentype\"), url(\"../webfonts/fa-regular-400.woff2\") format(\"woff2\"), url(\"../webfonts/fa-regular-400.woff\") format(\"woff\"), url(\"../webfonts/fa-regular-400.ttf\") format(\"truetype\"), url(\"../webfonts/fa-regular-400.svg#fontawesome\") format(\"svg\"); }\n\n.far {\n  font-family: 'Font Awesome 5 Free';\n  font-weight: 400; }\n@font-face {\n  font-family: 'Font Awesome 5 Free';\n  font-style: normal;\n  font-weight: 900;\n  src: url(\"../webfonts/fa-solid-900.eot\");\n  src: url(\"../webfonts/fa-solid-900.eot?#iefix\") format(\"embedded-opentype\"), url(\"../webfonts/fa-solid-900.woff2\") format(\"woff2\"), url(\"../webfonts/fa-solid-900.woff\") format(\"woff\"), url(\"../webfonts/fa-solid-900.ttf\") format(\"truetype\"), url(\"../webfonts/fa-solid-900.svg#fontawesome\") format(\"svg\"); }\n\n.fa,\n.fas {\n  font-family: 'Font Awesome 5 Free';\n  font-weight: 900; }\n"
  },
  {
    "path": "src/sourceDev.WebApp/SharedThemes/slate/wwwroot/css/site.css",
    "content": "﻿html {\n    position: relative;\n    min-height: 100%;\n}\n\nbody {\n    min-height: 100vh;\n    padding-top: 158px;\n}\n\n\n#newPostLink {\n    position: absolute;\n    top: 170px;\n    right: 0px;\n}\n\n#editPostLink {\n    position: absolute;\n    top: 200px;\n    right: 0px;\n}\n\n#unpublishPostLink {\n    position: absolute;\n    top: 230px !important;\n    right: 0px !important;\n}\n\n#pageManagerLink {\n    position: absolute;\n    top: 170px;\n    right: 0px;\n}\n\n#newPageLink {\n    position: absolute;\n    top: 200px;\n    right: 0px;\n}\n\n#editPageLink {\n    position: absolute;\n    top: 230px;\n    right: 0px\n}\n\n#unpublishPageLink {\n    position: absolute;\n    top: 260px !important;\n    right: 0px !important\n}\n\n#sidenavtoggle {\n    position: absolute;\n    top: 220px;\n    right: 5px;\n}\n\n\n@media screen and (max-width: 812px) {\n    #sidenavtoggle,\n    #sidenavmenu {\n        display: none;\n    }\n}\n\n.flex-fill {\n    flex: 1 1 auto !important;\n}\n\n\n.carousel-caption p {\n    font-size: 20px;\n    line-height: 1.4;\n}\n\n@media screen and (max-width: 768px) {\n    .carousel-caption {\n        display: none\n    }\n}\n\n\n\n\nimg, video, iframe {\n    max-width: 100%;\n}\n\ntd img, video, iframe {\n    max-width: none;\n}\n\n\n\n.table td, .table th {\n    vertical-align: inherit;\n}\n\n/******** jquery smartmenu bootstrap 4 ******/\n/* Carets in collapsible mode (make them look like +/- buttons) */\n.navbar-nav.sm-collapsible .sub-arrow {\n    position: absolute;\n    top: 50%;\n    right: 0;\n    margin: -0.7em 0.5em 0 0;\n    border: 1px solid rgba(0, 0, 0, .1);\n    border-radius: .25rem;\n    padding: 0;\n    width: 2em;\n    height: 1.4em;\n    font-size: 1.25rem;\n    line-height: 1.2em;\n    text-align: center;\n}\n\n    .navbar-nav.sm-collapsible .sub-arrow::before {\n        content: '+';\n    }\n\n.navbar-nav.sm-collapsible .show > a > .sub-arrow::before {\n    content: '-';\n}\n\n.navbar-dark .navbar-nav.sm-collapsible .nav-link .sub-arrow {\n    border-color: rgba(255, 255, 255, .1);\n}\n/* make sure there's room for the carets */\n.navbar-nav.sm-collapsible .has-submenu {\n    padding-right: 3em;\n}\n/* keep the carets properly positioned */\n.navbar-nav.sm-collapsible .nav-link,\n.navbar-nav.sm-collapsible .dropdown-item {\n    position: relative;\n}\n\n\n/* Nav carets in expanded mode */\n.navbar-nav:not(.sm-collapsible) .nav-link .sub-arrow {\n    display: inline-block;\n    width: 0;\n    height: 0;\n    margin-left: .255em;\n    vertical-align: .255em;\n    border-top: .3em solid;\n    border-right: .3em solid transparent;\n    border-left: .3em solid transparent;\n}\n/* point the arrows up for .fixed-bottom navbars */\n.fixed-bottom .navbar-nav:not(.sm-collapsible) .nav-link .sub-arrow,\n.fixed-bottom .navbar-nav:not(.sm-collapsible):not([data-sm-skip]) .dropdown-toggle::after {\n    border-top: 0;\n    border-bottom: .3em solid;\n}\n\n\n/* Dropdown carets in expanded mode */\n.navbar-nav:not(.sm-collapsible) .dropdown-item .sub-arrow,\n.navbar-nav:not(.sm-collapsible):not([data-sm-skip]) .dropdown-menu .dropdown-toggle::after {\n    position: absolute;\n    top: 50%;\n    right: 0;\n    width: 0;\n    height: 0;\n    margin-top: -.3em;\n    margin-right: 1em;\n    border-top: .3em solid transparent;\n    border-bottom: .3em solid transparent;\n    border-left: .3em solid;\n}\n/* make sure there's room for the carets */\n.navbar-nav:not(.sm-collapsible) .dropdown-item.has-submenu {\n    padding-right: 2em;\n}\n\n\n/* Scrolling arrows for tall menus */\n.navbar-nav .scroll-up,\n.navbar-nav .scroll-down {\n    position: absolute;\n    display: none;\n    visibility: hidden;\n    height: 20px;\n    overflow: hidden;\n    text-align: center;\n}\n\n.navbar-nav .scroll-up-arrow,\n.navbar-nav .scroll-down-arrow {\n    position: absolute;\n    top: -2px;\n    left: 50%;\n    margin-left: -8px;\n    width: 0;\n    height: 0;\n    overflow: hidden;\n    border-top: 7px solid transparent;\n    border-right: 7px solid transparent;\n    border-bottom: 7px solid;\n    border-left: 7px solid transparent;\n}\n\n.navbar-nav .scroll-down-arrow {\n    top: 6px;\n    border-top: 7px solid;\n    border-right: 7px solid transparent;\n    border-bottom: 7px solid transparent;\n    border-left: 7px solid transparent;\n}\n\n\n/* Add some spacing for 2+ level sub menus in collapsible mode */\n.navbar-nav.sm-collapsible .dropdown-menu .dropdown-menu {\n    margin: .5em;\n}\n\n\n/* Fix SmartMenus sub menus auto width (subMenusMinWidth/subMenusMaxWidth options) */\n.navbar-nav:not([data-sm-skip]) .dropdown-item {\n    white-space: normal;\n}\n\n.navbar-nav:not(.sm-collapsible) .sm-nowrap > li > .dropdown-item {\n    white-space: nowrap;\n}\n/******** end jquery smart menu bootstrap-4 *****************/\n\n.brand-header {\n    height: 100px;\n}\n\nheader .navbar {\n    top: 100px;\n}\n"
  },
  {
    "path": "src/sourceDev.WebApp/SharedThemes/slate/wwwroot/js/bootstrap.bundle.js",
    "content": "/*!\n  * Bootstrap v5.0.2 (https://getbootstrap.com/)\n  * Copyright 2011-2021 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)\n  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n  */\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n  typeof define === 'function' && define.amd ? define(factory) :\n  (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.bootstrap = factory());\n}(this, (function () { 'use strict';\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): dom/selector-engine.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n  const NODE_TEXT = 3;\n  const SelectorEngine = {\n    find(selector, element = document.documentElement) {\n      return [].concat(...Element.prototype.querySelectorAll.call(element, selector));\n    },\n\n    findOne(selector, element = document.documentElement) {\n      return Element.prototype.querySelector.call(element, selector);\n    },\n\n    children(element, selector) {\n      return [].concat(...element.children).filter(child => child.matches(selector));\n    },\n\n    parents(element, selector) {\n      const parents = [];\n      let ancestor = element.parentNode;\n\n      while (ancestor && ancestor.nodeType === Node.ELEMENT_NODE && ancestor.nodeType !== NODE_TEXT) {\n        if (ancestor.matches(selector)) {\n          parents.push(ancestor);\n        }\n\n        ancestor = ancestor.parentNode;\n      }\n\n      return parents;\n    },\n\n    prev(element, selector) {\n      let previous = element.previousElementSibling;\n\n      while (previous) {\n        if (previous.matches(selector)) {\n          return [previous];\n        }\n\n        previous = previous.previousElementSibling;\n      }\n\n      return [];\n    },\n\n    next(element, selector) {\n      let next = element.nextElementSibling;\n\n      while (next) {\n        if (next.matches(selector)) {\n          return [next];\n        }\n\n        next = next.nextElementSibling;\n      }\n\n      return [];\n    }\n\n  };\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): util/index.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n\n  const MAX_UID = 1000000;\n  const MILLISECONDS_MULTIPLIER = 1000;\n  const TRANSITION_END = 'transitionend'; // Shoutout AngusCroll (https://goo.gl/pxwQGp)\n\n  const toType = obj => {\n    if (obj === null || obj === undefined) {\n      return `${obj}`;\n    }\n\n    return {}.toString.call(obj).match(/\\s([a-z]+)/i)[1].toLowerCase();\n  };\n  /**\n   * --------------------------------------------------------------------------\n   * Public Util Api\n   * --------------------------------------------------------------------------\n   */\n\n\n  const getUID = prefix => {\n    do {\n      prefix += Math.floor(Math.random() * MAX_UID);\n    } while (document.getElementById(prefix));\n\n    return prefix;\n  };\n\n  const getSelector = element => {\n    let selector = element.getAttribute('data-bs-target');\n\n    if (!selector || selector === '#') {\n      let hrefAttr = element.getAttribute('href'); // The only valid content that could double as a selector are IDs or classes,\n      // so everything starting with `#` or `.`. If a \"real\" URL is used as the selector,\n      // `document.querySelector` will rightfully complain it is invalid.\n      // See https://github.com/twbs/bootstrap/issues/32273\n\n      if (!hrefAttr || !hrefAttr.includes('#') && !hrefAttr.startsWith('.')) {\n        return null;\n      } // Just in case some CMS puts out a full URL with the anchor appended\n\n\n      if (hrefAttr.includes('#') && !hrefAttr.startsWith('#')) {\n        hrefAttr = `#${hrefAttr.split('#')[1]}`;\n      }\n\n      selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : null;\n    }\n\n    return selector;\n  };\n\n  const getSelectorFromElement = element => {\n    const selector = getSelector(element);\n\n    if (selector) {\n      return document.querySelector(selector) ? selector : null;\n    }\n\n    return null;\n  };\n\n  const getElementFromSelector = element => {\n    const selector = getSelector(element);\n    return selector ? document.querySelector(selector) : null;\n  };\n\n  const getTransitionDurationFromElement = element => {\n    if (!element) {\n      return 0;\n    } // Get transition-duration of the element\n\n\n    let {\n      transitionDuration,\n      transitionDelay\n    } = window.getComputedStyle(element);\n    const floatTransitionDuration = Number.parseFloat(transitionDuration);\n    const floatTransitionDelay = Number.parseFloat(transitionDelay); // Return 0 if element or transition duration is not found\n\n    if (!floatTransitionDuration && !floatTransitionDelay) {\n      return 0;\n    } // If multiple durations are defined, take the first\n\n\n    transitionDuration = transitionDuration.split(',')[0];\n    transitionDelay = transitionDelay.split(',')[0];\n    return (Number.parseFloat(transitionDuration) + Number.parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER;\n  };\n\n  const triggerTransitionEnd = element => {\n    element.dispatchEvent(new Event(TRANSITION_END));\n  };\n\n  const isElement$1 = obj => {\n    if (!obj || typeof obj !== 'object') {\n      return false;\n    }\n\n    if (typeof obj.jquery !== 'undefined') {\n      obj = obj[0];\n    }\n\n    return typeof obj.nodeType !== 'undefined';\n  };\n\n  const getElement = obj => {\n    if (isElement$1(obj)) {\n      // it's a jQuery object or a node element\n      return obj.jquery ? obj[0] : obj;\n    }\n\n    if (typeof obj === 'string' && obj.length > 0) {\n      return SelectorEngine.findOne(obj);\n    }\n\n    return null;\n  };\n\n  const typeCheckConfig = (componentName, config, configTypes) => {\n    Object.keys(configTypes).forEach(property => {\n      const expectedTypes = configTypes[property];\n      const value = config[property];\n      const valueType = value && isElement$1(value) ? 'element' : toType(value);\n\n      if (!new RegExp(expectedTypes).test(valueType)) {\n        throw new TypeError(`${componentName.toUpperCase()}: Option \"${property}\" provided type \"${valueType}\" but expected type \"${expectedTypes}\".`);\n      }\n    });\n  };\n\n  const isVisible = element => {\n    if (!isElement$1(element) || element.getClientRects().length === 0) {\n      return false;\n    }\n\n    return getComputedStyle(element).getPropertyValue('visibility') === 'visible';\n  };\n\n  const isDisabled = element => {\n    if (!element || element.nodeType !== Node.ELEMENT_NODE) {\n      return true;\n    }\n\n    if (element.classList.contains('disabled')) {\n      return true;\n    }\n\n    if (typeof element.disabled !== 'undefined') {\n      return element.disabled;\n    }\n\n    return element.hasAttribute('disabled') && element.getAttribute('disabled') !== 'false';\n  };\n\n  const findShadowRoot = element => {\n    if (!document.documentElement.attachShadow) {\n      return null;\n    } // Can find the shadow root otherwise it'll return the document\n\n\n    if (typeof element.getRootNode === 'function') {\n      const root = element.getRootNode();\n      return root instanceof ShadowRoot ? root : null;\n    }\n\n    if (element instanceof ShadowRoot) {\n      return element;\n    } // when we don't find a shadow root\n\n\n    if (!element.parentNode) {\n      return null;\n    }\n\n    return findShadowRoot(element.parentNode);\n  };\n\n  const noop = () => {};\n\n  const reflow = element => element.offsetHeight;\n\n  const getjQuery = () => {\n    const {\n      jQuery\n    } = window;\n\n    if (jQuery && !document.body.hasAttribute('data-bs-no-jquery')) {\n      return jQuery;\n    }\n\n    return null;\n  };\n\n  const DOMContentLoadedCallbacks = [];\n\n  const onDOMContentLoaded = callback => {\n    if (document.readyState === 'loading') {\n      // add listener on the first call when the document is in loading state\n      if (!DOMContentLoadedCallbacks.length) {\n        document.addEventListener('DOMContentLoaded', () => {\n          DOMContentLoadedCallbacks.forEach(callback => callback());\n        });\n      }\n\n      DOMContentLoadedCallbacks.push(callback);\n    } else {\n      callback();\n    }\n  };\n\n  const isRTL = () => document.documentElement.dir === 'rtl';\n\n  const defineJQueryPlugin = plugin => {\n    onDOMContentLoaded(() => {\n      const $ = getjQuery();\n      /* istanbul ignore if */\n\n      if ($) {\n        const name = plugin.NAME;\n        const JQUERY_NO_CONFLICT = $.fn[name];\n        $.fn[name] = plugin.jQueryInterface;\n        $.fn[name].Constructor = plugin;\n\n        $.fn[name].noConflict = () => {\n          $.fn[name] = JQUERY_NO_CONFLICT;\n          return plugin.jQueryInterface;\n        };\n      }\n    });\n  };\n\n  const execute = callback => {\n    if (typeof callback === 'function') {\n      callback();\n    }\n  };\n\n  const executeAfterTransition = (callback, transitionElement, waitForTransition = true) => {\n    if (!waitForTransition) {\n      execute(callback);\n      return;\n    }\n\n    const durationPadding = 5;\n    const emulatedDuration = getTransitionDurationFromElement(transitionElement) + durationPadding;\n    let called = false;\n\n    const handler = ({\n      target\n    }) => {\n      if (target !== transitionElement) {\n        return;\n      }\n\n      called = true;\n      transitionElement.removeEventListener(TRANSITION_END, handler);\n      execute(callback);\n    };\n\n    transitionElement.addEventListener(TRANSITION_END, handler);\n    setTimeout(() => {\n      if (!called) {\n        triggerTransitionEnd(transitionElement);\n      }\n    }, emulatedDuration);\n  };\n  /**\n   * Return the previous/next element of a list.\n   *\n   * @param {array} list    The list of elements\n   * @param activeElement   The active element\n   * @param shouldGetNext   Choose to get next or previous element\n   * @param isCycleAllowed\n   * @return {Element|elem} The proper element\n   */\n\n\n  const getNextActiveElement = (list, activeElement, shouldGetNext, isCycleAllowed) => {\n    let index = list.indexOf(activeElement); // if the element does not exist in the list return an element depending on the direction and if cycle is allowed\n\n    if (index === -1) {\n      return list[!shouldGetNext && isCycleAllowed ? list.length - 1 : 0];\n    }\n\n    const listLength = list.length;\n    index += shouldGetNext ? 1 : -1;\n\n    if (isCycleAllowed) {\n      index = (index + listLength) % listLength;\n    }\n\n    return list[Math.max(0, Math.min(index, listLength - 1))];\n  };\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): dom/event-handler.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const namespaceRegex = /[^.]*(?=\\..*)\\.|.*/;\n  const stripNameRegex = /\\..*/;\n  const stripUidRegex = /::\\d+$/;\n  const eventRegistry = {}; // Events storage\n\n  let uidEvent = 1;\n  const customEvents = {\n    mouseenter: 'mouseover',\n    mouseleave: 'mouseout'\n  };\n  const customEventsRegex = /^(mouseenter|mouseleave)/i;\n  const nativeEvents = new Set(['click', 'dblclick', 'mouseup', 'mousedown', 'contextmenu', 'mousewheel', 'DOMMouseScroll', 'mouseover', 'mouseout', 'mousemove', 'selectstart', 'selectend', 'keydown', 'keypress', 'keyup', 'orientationchange', 'touchstart', 'touchmove', 'touchend', 'touchcancel', 'pointerdown', 'pointermove', 'pointerup', 'pointerleave', 'pointercancel', 'gesturestart', 'gesturechange', 'gestureend', 'focus', 'blur', 'change', 'reset', 'select', 'submit', 'focusin', 'focusout', 'load', 'unload', 'beforeunload', 'resize', 'move', 'DOMContentLoaded', 'readystatechange', 'error', 'abort', 'scroll']);\n  /**\n   * ------------------------------------------------------------------------\n   * Private methods\n   * ------------------------------------------------------------------------\n   */\n\n  function getUidEvent(element, uid) {\n    return uid && `${uid}::${uidEvent++}` || element.uidEvent || uidEvent++;\n  }\n\n  function getEvent(element) {\n    const uid = getUidEvent(element);\n    element.uidEvent = uid;\n    eventRegistry[uid] = eventRegistry[uid] || {};\n    return eventRegistry[uid];\n  }\n\n  function bootstrapHandler(element, fn) {\n    return function handler(event) {\n      event.delegateTarget = element;\n\n      if (handler.oneOff) {\n        EventHandler.off(element, event.type, fn);\n      }\n\n      return fn.apply(element, [event]);\n    };\n  }\n\n  function bootstrapDelegationHandler(element, selector, fn) {\n    return function handler(event) {\n      const domElements = element.querySelectorAll(selector);\n\n      for (let {\n        target\n      } = event; target && target !== this; target = target.parentNode) {\n        for (let i = domElements.length; i--;) {\n          if (domElements[i] === target) {\n            event.delegateTarget = target;\n\n            if (handler.oneOff) {\n              // eslint-disable-next-line unicorn/consistent-destructuring\n              EventHandler.off(element, event.type, selector, fn);\n            }\n\n            return fn.apply(target, [event]);\n          }\n        }\n      } // To please ESLint\n\n\n      return null;\n    };\n  }\n\n  function findHandler(events, handler, delegationSelector = null) {\n    const uidEventList = Object.keys(events);\n\n    for (let i = 0, len = uidEventList.length; i < len; i++) {\n      const event = events[uidEventList[i]];\n\n      if (event.originalHandler === handler && event.delegationSelector === delegationSelector) {\n        return event;\n      }\n    }\n\n    return null;\n  }\n\n  function normalizeParams(originalTypeEvent, handler, delegationFn) {\n    const delegation = typeof handler === 'string';\n    const originalHandler = delegation ? delegationFn : handler;\n    let typeEvent = getTypeEvent(originalTypeEvent);\n    const isNative = nativeEvents.has(typeEvent);\n\n    if (!isNative) {\n      typeEvent = originalTypeEvent;\n    }\n\n    return [delegation, originalHandler, typeEvent];\n  }\n\n  function addHandler(element, originalTypeEvent, handler, delegationFn, oneOff) {\n    if (typeof originalTypeEvent !== 'string' || !element) {\n      return;\n    }\n\n    if (!handler) {\n      handler = delegationFn;\n      delegationFn = null;\n    } // in case of mouseenter or mouseleave wrap the handler within a function that checks for its DOM position\n    // this prevents the handler from being dispatched the same way as mouseover or mouseout does\n\n\n    if (customEventsRegex.test(originalTypeEvent)) {\n      const wrapFn = fn => {\n        return function (event) {\n          if (!event.relatedTarget || event.relatedTarget !== event.delegateTarget && !event.delegateTarget.contains(event.relatedTarget)) {\n            return fn.call(this, event);\n          }\n        };\n      };\n\n      if (delegationFn) {\n        delegationFn = wrapFn(delegationFn);\n      } else {\n        handler = wrapFn(handler);\n      }\n    }\n\n    const [delegation, originalHandler, typeEvent] = normalizeParams(originalTypeEvent, handler, delegationFn);\n    const events = getEvent(element);\n    const handlers = events[typeEvent] || (events[typeEvent] = {});\n    const previousFn = findHandler(handlers, originalHandler, delegation ? handler : null);\n\n    if (previousFn) {\n      previousFn.oneOff = previousFn.oneOff && oneOff;\n      return;\n    }\n\n    const uid = getUidEvent(originalHandler, originalTypeEvent.replace(namespaceRegex, ''));\n    const fn = delegation ? bootstrapDelegationHandler(element, handler, delegationFn) : bootstrapHandler(element, handler);\n    fn.delegationSelector = delegation ? handler : null;\n    fn.originalHandler = originalHandler;\n    fn.oneOff = oneOff;\n    fn.uidEvent = uid;\n    handlers[uid] = fn;\n    element.addEventListener(typeEvent, fn, delegation);\n  }\n\n  function removeHandler(element, events, typeEvent, handler, delegationSelector) {\n    const fn = findHandler(events[typeEvent], handler, delegationSelector);\n\n    if (!fn) {\n      return;\n    }\n\n    element.removeEventListener(typeEvent, fn, Boolean(delegationSelector));\n    delete events[typeEvent][fn.uidEvent];\n  }\n\n  function removeNamespacedHandlers(element, events, typeEvent, namespace) {\n    const storeElementEvent = events[typeEvent] || {};\n    Object.keys(storeElementEvent).forEach(handlerKey => {\n      if (handlerKey.includes(namespace)) {\n        const event = storeElementEvent[handlerKey];\n        removeHandler(element, events, typeEvent, event.originalHandler, event.delegationSelector);\n      }\n    });\n  }\n\n  function getTypeEvent(event) {\n    // allow to get the native events from namespaced events ('click.bs.button' --> 'click')\n    event = event.replace(stripNameRegex, '');\n    return customEvents[event] || event;\n  }\n\n  const EventHandler = {\n    on(element, event, handler, delegationFn) {\n      addHandler(element, event, handler, delegationFn, false);\n    },\n\n    one(element, event, handler, delegationFn) {\n      addHandler(element, event, handler, delegationFn, true);\n    },\n\n    off(element, originalTypeEvent, handler, delegationFn) {\n      if (typeof originalTypeEvent !== 'string' || !element) {\n        return;\n      }\n\n      const [delegation, originalHandler, typeEvent] = normalizeParams(originalTypeEvent, handler, delegationFn);\n      const inNamespace = typeEvent !== originalTypeEvent;\n      const events = getEvent(element);\n      const isNamespace = originalTypeEvent.startsWith('.');\n\n      if (typeof originalHandler !== 'undefined') {\n        // Simplest case: handler is passed, remove that listener ONLY.\n        if (!events || !events[typeEvent]) {\n          return;\n        }\n\n        removeHandler(element, events, typeEvent, originalHandler, delegation ? handler : null);\n        return;\n      }\n\n      if (isNamespace) {\n        Object.keys(events).forEach(elementEvent => {\n          removeNamespacedHandlers(element, events, elementEvent, originalTypeEvent.slice(1));\n        });\n      }\n\n      const storeElementEvent = events[typeEvent] || {};\n      Object.keys(storeElementEvent).forEach(keyHandlers => {\n        const handlerKey = keyHandlers.replace(stripUidRegex, '');\n\n        if (!inNamespace || originalTypeEvent.includes(handlerKey)) {\n          const event = storeElementEvent[keyHandlers];\n          removeHandler(element, events, typeEvent, event.originalHandler, event.delegationSelector);\n        }\n      });\n    },\n\n    trigger(element, event, args) {\n      if (typeof event !== 'string' || !element) {\n        return null;\n      }\n\n      const $ = getjQuery();\n      const typeEvent = getTypeEvent(event);\n      const inNamespace = event !== typeEvent;\n      const isNative = nativeEvents.has(typeEvent);\n      let jQueryEvent;\n      let bubbles = true;\n      let nativeDispatch = true;\n      let defaultPrevented = false;\n      let evt = null;\n\n      if (inNamespace && $) {\n        jQueryEvent = $.Event(event, args);\n        $(element).trigger(jQueryEvent);\n        bubbles = !jQueryEvent.isPropagationStopped();\n        nativeDispatch = !jQueryEvent.isImmediatePropagationStopped();\n        defaultPrevented = jQueryEvent.isDefaultPrevented();\n      }\n\n      if (isNative) {\n        evt = document.createEvent('HTMLEvents');\n        evt.initEvent(typeEvent, bubbles, true);\n      } else {\n        evt = new CustomEvent(event, {\n          bubbles,\n          cancelable: true\n        });\n      } // merge custom information in our event\n\n\n      if (typeof args !== 'undefined') {\n        Object.keys(args).forEach(key => {\n          Object.defineProperty(evt, key, {\n            get() {\n              return args[key];\n            }\n\n          });\n        });\n      }\n\n      if (defaultPrevented) {\n        evt.preventDefault();\n      }\n\n      if (nativeDispatch) {\n        element.dispatchEvent(evt);\n      }\n\n      if (evt.defaultPrevented && typeof jQueryEvent !== 'undefined') {\n        jQueryEvent.preventDefault();\n      }\n\n      return evt;\n    }\n\n  };\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): dom/data.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n  const elementMap = new Map();\n  var Data = {\n    set(element, key, instance) {\n      if (!elementMap.has(element)) {\n        elementMap.set(element, new Map());\n      }\n\n      const instanceMap = elementMap.get(element); // make it clear we only want one instance per element\n      // can be removed later when multiple key/instances are fine to be used\n\n      if (!instanceMap.has(key) && instanceMap.size !== 0) {\n        // eslint-disable-next-line no-console\n        console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(instanceMap.keys())[0]}.`);\n        return;\n      }\n\n      instanceMap.set(key, instance);\n    },\n\n    get(element, key) {\n      if (elementMap.has(element)) {\n        return elementMap.get(element).get(key) || null;\n      }\n\n      return null;\n    },\n\n    remove(element, key) {\n      if (!elementMap.has(element)) {\n        return;\n      }\n\n      const instanceMap = elementMap.get(element);\n      instanceMap.delete(key); // free up element references if there are no instances left for an element\n\n      if (instanceMap.size === 0) {\n        elementMap.delete(element);\n      }\n    }\n\n  };\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): base-component.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const VERSION = '5.0.2';\n\n  class BaseComponent {\n    constructor(element) {\n      element = getElement(element);\n\n      if (!element) {\n        return;\n      }\n\n      this._element = element;\n      Data.set(this._element, this.constructor.DATA_KEY, this);\n    }\n\n    dispose() {\n      Data.remove(this._element, this.constructor.DATA_KEY);\n      EventHandler.off(this._element, this.constructor.EVENT_KEY);\n      Object.getOwnPropertyNames(this).forEach(propertyName => {\n        this[propertyName] = null;\n      });\n    }\n\n    _queueCallback(callback, element, isAnimated = true) {\n      executeAfterTransition(callback, element, isAnimated);\n    }\n    /** Static */\n\n\n    static getInstance(element) {\n      return Data.get(element, this.DATA_KEY);\n    }\n\n    static getOrCreateInstance(element, config = {}) {\n      return this.getInstance(element) || new this(element, typeof config === 'object' ? config : null);\n    }\n\n    static get VERSION() {\n      return VERSION;\n    }\n\n    static get NAME() {\n      throw new Error('You have to implement the static method \"NAME\", for each component!');\n    }\n\n    static get DATA_KEY() {\n      return `bs.${this.NAME}`;\n    }\n\n    static get EVENT_KEY() {\n      return `.${this.DATA_KEY}`;\n    }\n\n  }\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): alert.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$c = 'alert';\n  const DATA_KEY$b = 'bs.alert';\n  const EVENT_KEY$b = `.${DATA_KEY$b}`;\n  const DATA_API_KEY$8 = '.data-api';\n  const SELECTOR_DISMISS = '[data-bs-dismiss=\"alert\"]';\n  const EVENT_CLOSE = `close${EVENT_KEY$b}`;\n  const EVENT_CLOSED = `closed${EVENT_KEY$b}`;\n  const EVENT_CLICK_DATA_API$7 = `click${EVENT_KEY$b}${DATA_API_KEY$8}`;\n  const CLASS_NAME_ALERT = 'alert';\n  const CLASS_NAME_FADE$6 = 'fade';\n  const CLASS_NAME_SHOW$9 = 'show';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Alert extends BaseComponent {\n    // Getters\n    static get NAME() {\n      return NAME$c;\n    } // Public\n\n\n    close(element) {\n      const rootElement = element ? this._getRootElement(element) : this._element;\n\n      const customEvent = this._triggerCloseEvent(rootElement);\n\n      if (customEvent === null || customEvent.defaultPrevented) {\n        return;\n      }\n\n      this._removeElement(rootElement);\n    } // Private\n\n\n    _getRootElement(element) {\n      return getElementFromSelector(element) || element.closest(`.${CLASS_NAME_ALERT}`);\n    }\n\n    _triggerCloseEvent(element) {\n      return EventHandler.trigger(element, EVENT_CLOSE);\n    }\n\n    _removeElement(element) {\n      element.classList.remove(CLASS_NAME_SHOW$9);\n      const isAnimated = element.classList.contains(CLASS_NAME_FADE$6);\n\n      this._queueCallback(() => this._destroyElement(element), element, isAnimated);\n    }\n\n    _destroyElement(element) {\n      element.remove();\n      EventHandler.trigger(element, EVENT_CLOSED);\n    } // Static\n\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = Alert.getOrCreateInstance(this);\n\n        if (config === 'close') {\n          data[config](this);\n        }\n      });\n    }\n\n    static handleDismiss(alertInstance) {\n      return function (event) {\n        if (event) {\n          event.preventDefault();\n        }\n\n        alertInstance.close(this);\n      };\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(document, EVENT_CLICK_DATA_API$7, SELECTOR_DISMISS, Alert.handleDismiss(new Alert()));\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Alert to jQuery only if jQuery is present\n   */\n\n  defineJQueryPlugin(Alert);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): button.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$b = 'button';\n  const DATA_KEY$a = 'bs.button';\n  const EVENT_KEY$a = `.${DATA_KEY$a}`;\n  const DATA_API_KEY$7 = '.data-api';\n  const CLASS_NAME_ACTIVE$3 = 'active';\n  const SELECTOR_DATA_TOGGLE$5 = '[data-bs-toggle=\"button\"]';\n  const EVENT_CLICK_DATA_API$6 = `click${EVENT_KEY$a}${DATA_API_KEY$7}`;\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Button extends BaseComponent {\n    // Getters\n    static get NAME() {\n      return NAME$b;\n    } // Public\n\n\n    toggle() {\n      // Toggle class and sync the `aria-pressed` attribute with the return value of the `.toggle()` method\n      this._element.setAttribute('aria-pressed', this._element.classList.toggle(CLASS_NAME_ACTIVE$3));\n    } // Static\n\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = Button.getOrCreateInstance(this);\n\n        if (config === 'toggle') {\n          data[config]();\n        }\n      });\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(document, EVENT_CLICK_DATA_API$6, SELECTOR_DATA_TOGGLE$5, event => {\n    event.preventDefault();\n    const button = event.target.closest(SELECTOR_DATA_TOGGLE$5);\n    const data = Button.getOrCreateInstance(button);\n    data.toggle();\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Button to jQuery only if jQuery is present\n   */\n\n  defineJQueryPlugin(Button);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): dom/manipulator.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  function normalizeData(val) {\n    if (val === 'true') {\n      return true;\n    }\n\n    if (val === 'false') {\n      return false;\n    }\n\n    if (val === Number(val).toString()) {\n      return Number(val);\n    }\n\n    if (val === '' || val === 'null') {\n      return null;\n    }\n\n    return val;\n  }\n\n  function normalizeDataKey(key) {\n    return key.replace(/[A-Z]/g, chr => `-${chr.toLowerCase()}`);\n  }\n\n  const Manipulator = {\n    setDataAttribute(element, key, value) {\n      element.setAttribute(`data-bs-${normalizeDataKey(key)}`, value);\n    },\n\n    removeDataAttribute(element, key) {\n      element.removeAttribute(`data-bs-${normalizeDataKey(key)}`);\n    },\n\n    getDataAttributes(element) {\n      if (!element) {\n        return {};\n      }\n\n      const attributes = {};\n      Object.keys(element.dataset).filter(key => key.startsWith('bs')).forEach(key => {\n        let pureKey = key.replace(/^bs/, '');\n        pureKey = pureKey.charAt(0).toLowerCase() + pureKey.slice(1, pureKey.length);\n        attributes[pureKey] = normalizeData(element.dataset[key]);\n      });\n      return attributes;\n    },\n\n    getDataAttribute(element, key) {\n      return normalizeData(element.getAttribute(`data-bs-${normalizeDataKey(key)}`));\n    },\n\n    offset(element) {\n      const rect = element.getBoundingClientRect();\n      return {\n        top: rect.top + document.body.scrollTop,\n        left: rect.left + document.body.scrollLeft\n      };\n    },\n\n    position(element) {\n      return {\n        top: element.offsetTop,\n        left: element.offsetLeft\n      };\n    }\n\n  };\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): carousel.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$a = 'carousel';\n  const DATA_KEY$9 = 'bs.carousel';\n  const EVENT_KEY$9 = `.${DATA_KEY$9}`;\n  const DATA_API_KEY$6 = '.data-api';\n  const ARROW_LEFT_KEY = 'ArrowLeft';\n  const ARROW_RIGHT_KEY = 'ArrowRight';\n  const TOUCHEVENT_COMPAT_WAIT = 500; // Time for mouse compat events to fire after touch\n\n  const SWIPE_THRESHOLD = 40;\n  const Default$9 = {\n    interval: 5000,\n    keyboard: true,\n    slide: false,\n    pause: 'hover',\n    wrap: true,\n    touch: true\n  };\n  const DefaultType$9 = {\n    interval: '(number|boolean)',\n    keyboard: 'boolean',\n    slide: '(boolean|string)',\n    pause: '(string|boolean)',\n    wrap: 'boolean',\n    touch: 'boolean'\n  };\n  const ORDER_NEXT = 'next';\n  const ORDER_PREV = 'prev';\n  const DIRECTION_LEFT = 'left';\n  const DIRECTION_RIGHT = 'right';\n  const KEY_TO_DIRECTION = {\n    [ARROW_LEFT_KEY]: DIRECTION_RIGHT,\n    [ARROW_RIGHT_KEY]: DIRECTION_LEFT\n  };\n  const EVENT_SLIDE = `slide${EVENT_KEY$9}`;\n  const EVENT_SLID = `slid${EVENT_KEY$9}`;\n  const EVENT_KEYDOWN = `keydown${EVENT_KEY$9}`;\n  const EVENT_MOUSEENTER = `mouseenter${EVENT_KEY$9}`;\n  const EVENT_MOUSELEAVE = `mouseleave${EVENT_KEY$9}`;\n  const EVENT_TOUCHSTART = `touchstart${EVENT_KEY$9}`;\n  const EVENT_TOUCHMOVE = `touchmove${EVENT_KEY$9}`;\n  const EVENT_TOUCHEND = `touchend${EVENT_KEY$9}`;\n  const EVENT_POINTERDOWN = `pointerdown${EVENT_KEY$9}`;\n  const EVENT_POINTERUP = `pointerup${EVENT_KEY$9}`;\n  const EVENT_DRAG_START = `dragstart${EVENT_KEY$9}`;\n  const EVENT_LOAD_DATA_API$2 = `load${EVENT_KEY$9}${DATA_API_KEY$6}`;\n  const EVENT_CLICK_DATA_API$5 = `click${EVENT_KEY$9}${DATA_API_KEY$6}`;\n  const CLASS_NAME_CAROUSEL = 'carousel';\n  const CLASS_NAME_ACTIVE$2 = 'active';\n  const CLASS_NAME_SLIDE = 'slide';\n  const CLASS_NAME_END = 'carousel-item-end';\n  const CLASS_NAME_START = 'carousel-item-start';\n  const CLASS_NAME_NEXT = 'carousel-item-next';\n  const CLASS_NAME_PREV = 'carousel-item-prev';\n  const CLASS_NAME_POINTER_EVENT = 'pointer-event';\n  const SELECTOR_ACTIVE$1 = '.active';\n  const SELECTOR_ACTIVE_ITEM = '.active.carousel-item';\n  const SELECTOR_ITEM = '.carousel-item';\n  const SELECTOR_ITEM_IMG = '.carousel-item img';\n  const SELECTOR_NEXT_PREV = '.carousel-item-next, .carousel-item-prev';\n  const SELECTOR_INDICATORS = '.carousel-indicators';\n  const SELECTOR_INDICATOR = '[data-bs-target]';\n  const SELECTOR_DATA_SLIDE = '[data-bs-slide], [data-bs-slide-to]';\n  const SELECTOR_DATA_RIDE = '[data-bs-ride=\"carousel\"]';\n  const POINTER_TYPE_TOUCH = 'touch';\n  const POINTER_TYPE_PEN = 'pen';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Carousel extends BaseComponent {\n    constructor(element, config) {\n      super(element);\n      this._items = null;\n      this._interval = null;\n      this._activeElement = null;\n      this._isPaused = false;\n      this._isSliding = false;\n      this.touchTimeout = null;\n      this.touchStartX = 0;\n      this.touchDeltaX = 0;\n      this._config = this._getConfig(config);\n      this._indicatorsElement = SelectorEngine.findOne(SELECTOR_INDICATORS, this._element);\n      this._touchSupported = 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0;\n      this._pointerEvent = Boolean(window.PointerEvent);\n\n      this._addEventListeners();\n    } // Getters\n\n\n    static get Default() {\n      return Default$9;\n    }\n\n    static get NAME() {\n      return NAME$a;\n    } // Public\n\n\n    next() {\n      this._slide(ORDER_NEXT);\n    }\n\n    nextWhenVisible() {\n      // Don't call next when the page isn't visible\n      // or the carousel or its parent isn't visible\n      if (!document.hidden && isVisible(this._element)) {\n        this.next();\n      }\n    }\n\n    prev() {\n      this._slide(ORDER_PREV);\n    }\n\n    pause(event) {\n      if (!event) {\n        this._isPaused = true;\n      }\n\n      if (SelectorEngine.findOne(SELECTOR_NEXT_PREV, this._element)) {\n        triggerTransitionEnd(this._element);\n        this.cycle(true);\n      }\n\n      clearInterval(this._interval);\n      this._interval = null;\n    }\n\n    cycle(event) {\n      if (!event) {\n        this._isPaused = false;\n      }\n\n      if (this._interval) {\n        clearInterval(this._interval);\n        this._interval = null;\n      }\n\n      if (this._config && this._config.interval && !this._isPaused) {\n        this._updateInterval();\n\n        this._interval = setInterval((document.visibilityState ? this.nextWhenVisible : this.next).bind(this), this._config.interval);\n      }\n    }\n\n    to(index) {\n      this._activeElement = SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element);\n\n      const activeIndex = this._getItemIndex(this._activeElement);\n\n      if (index > this._items.length - 1 || index < 0) {\n        return;\n      }\n\n      if (this._isSliding) {\n        EventHandler.one(this._element, EVENT_SLID, () => this.to(index));\n        return;\n      }\n\n      if (activeIndex === index) {\n        this.pause();\n        this.cycle();\n        return;\n      }\n\n      const order = index > activeIndex ? ORDER_NEXT : ORDER_PREV;\n\n      this._slide(order, this._items[index]);\n    } // Private\n\n\n    _getConfig(config) {\n      config = { ...Default$9,\n        ...Manipulator.getDataAttributes(this._element),\n        ...(typeof config === 'object' ? config : {})\n      };\n      typeCheckConfig(NAME$a, config, DefaultType$9);\n      return config;\n    }\n\n    _handleSwipe() {\n      const absDeltax = Math.abs(this.touchDeltaX);\n\n      if (absDeltax <= SWIPE_THRESHOLD) {\n        return;\n      }\n\n      const direction = absDeltax / this.touchDeltaX;\n      this.touchDeltaX = 0;\n\n      if (!direction) {\n        return;\n      }\n\n      this._slide(direction > 0 ? DIRECTION_RIGHT : DIRECTION_LEFT);\n    }\n\n    _addEventListeners() {\n      if (this._config.keyboard) {\n        EventHandler.on(this._element, EVENT_KEYDOWN, event => this._keydown(event));\n      }\n\n      if (this._config.pause === 'hover') {\n        EventHandler.on(this._element, EVENT_MOUSEENTER, event => this.pause(event));\n        EventHandler.on(this._element, EVENT_MOUSELEAVE, event => this.cycle(event));\n      }\n\n      if (this._config.touch && this._touchSupported) {\n        this._addTouchEventListeners();\n      }\n    }\n\n    _addTouchEventListeners() {\n      const start = event => {\n        if (this._pointerEvent && (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH)) {\n          this.touchStartX = event.clientX;\n        } else if (!this._pointerEvent) {\n          this.touchStartX = event.touches[0].clientX;\n        }\n      };\n\n      const move = event => {\n        // ensure swiping with one touch and not pinching\n        this.touchDeltaX = event.touches && event.touches.length > 1 ? 0 : event.touches[0].clientX - this.touchStartX;\n      };\n\n      const end = event => {\n        if (this._pointerEvent && (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH)) {\n          this.touchDeltaX = event.clientX - this.touchStartX;\n        }\n\n        this._handleSwipe();\n\n        if (this._config.pause === 'hover') {\n          // If it's a touch-enabled device, mouseenter/leave are fired as\n          // part of the mouse compatibility events on first tap - the carousel\n          // would stop cycling until user tapped out of it;\n          // here, we listen for touchend, explicitly pause the carousel\n          // (as if it's the second time we tap on it, mouseenter compat event\n          // is NOT fired) and after a timeout (to allow for mouse compatibility\n          // events to fire) we explicitly restart cycling\n          this.pause();\n\n          if (this.touchTimeout) {\n            clearTimeout(this.touchTimeout);\n          }\n\n          this.touchTimeout = setTimeout(event => this.cycle(event), TOUCHEVENT_COMPAT_WAIT + this._config.interval);\n        }\n      };\n\n      SelectorEngine.find(SELECTOR_ITEM_IMG, this._element).forEach(itemImg => {\n        EventHandler.on(itemImg, EVENT_DRAG_START, e => e.preventDefault());\n      });\n\n      if (this._pointerEvent) {\n        EventHandler.on(this._element, EVENT_POINTERDOWN, event => start(event));\n        EventHandler.on(this._element, EVENT_POINTERUP, event => end(event));\n\n        this._element.classList.add(CLASS_NAME_POINTER_EVENT);\n      } else {\n        EventHandler.on(this._element, EVENT_TOUCHSTART, event => start(event));\n        EventHandler.on(this._element, EVENT_TOUCHMOVE, event => move(event));\n        EventHandler.on(this._element, EVENT_TOUCHEND, event => end(event));\n      }\n    }\n\n    _keydown(event) {\n      if (/input|textarea/i.test(event.target.tagName)) {\n        return;\n      }\n\n      const direction = KEY_TO_DIRECTION[event.key];\n\n      if (direction) {\n        event.preventDefault();\n\n        this._slide(direction);\n      }\n    }\n\n    _getItemIndex(element) {\n      this._items = element && element.parentNode ? SelectorEngine.find(SELECTOR_ITEM, element.parentNode) : [];\n      return this._items.indexOf(element);\n    }\n\n    _getItemByOrder(order, activeElement) {\n      const isNext = order === ORDER_NEXT;\n      return getNextActiveElement(this._items, activeElement, isNext, this._config.wrap);\n    }\n\n    _triggerSlideEvent(relatedTarget, eventDirectionName) {\n      const targetIndex = this._getItemIndex(relatedTarget);\n\n      const fromIndex = this._getItemIndex(SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element));\n\n      return EventHandler.trigger(this._element, EVENT_SLIDE, {\n        relatedTarget,\n        direction: eventDirectionName,\n        from: fromIndex,\n        to: targetIndex\n      });\n    }\n\n    _setActiveIndicatorElement(element) {\n      if (this._indicatorsElement) {\n        const activeIndicator = SelectorEngine.findOne(SELECTOR_ACTIVE$1, this._indicatorsElement);\n        activeIndicator.classList.remove(CLASS_NAME_ACTIVE$2);\n        activeIndicator.removeAttribute('aria-current');\n        const indicators = SelectorEngine.find(SELECTOR_INDICATOR, this._indicatorsElement);\n\n        for (let i = 0; i < indicators.length; i++) {\n          if (Number.parseInt(indicators[i].getAttribute('data-bs-slide-to'), 10) === this._getItemIndex(element)) {\n            indicators[i].classList.add(CLASS_NAME_ACTIVE$2);\n            indicators[i].setAttribute('aria-current', 'true');\n            break;\n          }\n        }\n      }\n    }\n\n    _updateInterval() {\n      const element = this._activeElement || SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element);\n\n      if (!element) {\n        return;\n      }\n\n      const elementInterval = Number.parseInt(element.getAttribute('data-bs-interval'), 10);\n\n      if (elementInterval) {\n        this._config.defaultInterval = this._config.defaultInterval || this._config.interval;\n        this._config.interval = elementInterval;\n      } else {\n        this._config.interval = this._config.defaultInterval || this._config.interval;\n      }\n    }\n\n    _slide(directionOrOrder, element) {\n      const order = this._directionToOrder(directionOrOrder);\n\n      const activeElement = SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element);\n\n      const activeElementIndex = this._getItemIndex(activeElement);\n\n      const nextElement = element || this._getItemByOrder(order, activeElement);\n\n      const nextElementIndex = this._getItemIndex(nextElement);\n\n      const isCycling = Boolean(this._interval);\n      const isNext = order === ORDER_NEXT;\n      const directionalClassName = isNext ? CLASS_NAME_START : CLASS_NAME_END;\n      const orderClassName = isNext ? CLASS_NAME_NEXT : CLASS_NAME_PREV;\n\n      const eventDirectionName = this._orderToDirection(order);\n\n      if (nextElement && nextElement.classList.contains(CLASS_NAME_ACTIVE$2)) {\n        this._isSliding = false;\n        return;\n      }\n\n      if (this._isSliding) {\n        return;\n      }\n\n      const slideEvent = this._triggerSlideEvent(nextElement, eventDirectionName);\n\n      if (slideEvent.defaultPrevented) {\n        return;\n      }\n\n      if (!activeElement || !nextElement) {\n        // Some weirdness is happening, so we bail\n        return;\n      }\n\n      this._isSliding = true;\n\n      if (isCycling) {\n        this.pause();\n      }\n\n      this._setActiveIndicatorElement(nextElement);\n\n      this._activeElement = nextElement;\n\n      const triggerSlidEvent = () => {\n        EventHandler.trigger(this._element, EVENT_SLID, {\n          relatedTarget: nextElement,\n          direction: eventDirectionName,\n          from: activeElementIndex,\n          to: nextElementIndex\n        });\n      };\n\n      if (this._element.classList.contains(CLASS_NAME_SLIDE)) {\n        nextElement.classList.add(orderClassName);\n        reflow(nextElement);\n        activeElement.classList.add(directionalClassName);\n        nextElement.classList.add(directionalClassName);\n\n        const completeCallBack = () => {\n          nextElement.classList.remove(directionalClassName, orderClassName);\n          nextElement.classList.add(CLASS_NAME_ACTIVE$2);\n          activeElement.classList.remove(CLASS_NAME_ACTIVE$2, orderClassName, directionalClassName);\n          this._isSliding = false;\n          setTimeout(triggerSlidEvent, 0);\n        };\n\n        this._queueCallback(completeCallBack, activeElement, true);\n      } else {\n        activeElement.classList.remove(CLASS_NAME_ACTIVE$2);\n        nextElement.classList.add(CLASS_NAME_ACTIVE$2);\n        this._isSliding = false;\n        triggerSlidEvent();\n      }\n\n      if (isCycling) {\n        this.cycle();\n      }\n    }\n\n    _directionToOrder(direction) {\n      if (![DIRECTION_RIGHT, DIRECTION_LEFT].includes(direction)) {\n        return direction;\n      }\n\n      if (isRTL()) {\n        return direction === DIRECTION_LEFT ? ORDER_PREV : ORDER_NEXT;\n      }\n\n      return direction === DIRECTION_LEFT ? ORDER_NEXT : ORDER_PREV;\n    }\n\n    _orderToDirection(order) {\n      if (![ORDER_NEXT, ORDER_PREV].includes(order)) {\n        return order;\n      }\n\n      if (isRTL()) {\n        return order === ORDER_PREV ? DIRECTION_LEFT : DIRECTION_RIGHT;\n      }\n\n      return order === ORDER_PREV ? DIRECTION_RIGHT : DIRECTION_LEFT;\n    } // Static\n\n\n    static carouselInterface(element, config) {\n      const data = Carousel.getOrCreateInstance(element, config);\n      let {\n        _config\n      } = data;\n\n      if (typeof config === 'object') {\n        _config = { ..._config,\n          ...config\n        };\n      }\n\n      const action = typeof config === 'string' ? config : _config.slide;\n\n      if (typeof config === 'number') {\n        data.to(config);\n      } else if (typeof action === 'string') {\n        if (typeof data[action] === 'undefined') {\n          throw new TypeError(`No method named \"${action}\"`);\n        }\n\n        data[action]();\n      } else if (_config.interval && _config.ride) {\n        data.pause();\n        data.cycle();\n      }\n    }\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        Carousel.carouselInterface(this, config);\n      });\n    }\n\n    static dataApiClickHandler(event) {\n      const target = getElementFromSelector(this);\n\n      if (!target || !target.classList.contains(CLASS_NAME_CAROUSEL)) {\n        return;\n      }\n\n      const config = { ...Manipulator.getDataAttributes(target),\n        ...Manipulator.getDataAttributes(this)\n      };\n      const slideIndex = this.getAttribute('data-bs-slide-to');\n\n      if (slideIndex) {\n        config.interval = false;\n      }\n\n      Carousel.carouselInterface(target, config);\n\n      if (slideIndex) {\n        Carousel.getInstance(target).to(slideIndex);\n      }\n\n      event.preventDefault();\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(document, EVENT_CLICK_DATA_API$5, SELECTOR_DATA_SLIDE, Carousel.dataApiClickHandler);\n  EventHandler.on(window, EVENT_LOAD_DATA_API$2, () => {\n    const carousels = SelectorEngine.find(SELECTOR_DATA_RIDE);\n\n    for (let i = 0, len = carousels.length; i < len; i++) {\n      Carousel.carouselInterface(carousels[i], Carousel.getInstance(carousels[i]));\n    }\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Carousel to jQuery only if jQuery is present\n   */\n\n  defineJQueryPlugin(Carousel);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): collapse.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$9 = 'collapse';\n  const DATA_KEY$8 = 'bs.collapse';\n  const EVENT_KEY$8 = `.${DATA_KEY$8}`;\n  const DATA_API_KEY$5 = '.data-api';\n  const Default$8 = {\n    toggle: true,\n    parent: ''\n  };\n  const DefaultType$8 = {\n    toggle: 'boolean',\n    parent: '(string|element)'\n  };\n  const EVENT_SHOW$5 = `show${EVENT_KEY$8}`;\n  const EVENT_SHOWN$5 = `shown${EVENT_KEY$8}`;\n  const EVENT_HIDE$5 = `hide${EVENT_KEY$8}`;\n  const EVENT_HIDDEN$5 = `hidden${EVENT_KEY$8}`;\n  const EVENT_CLICK_DATA_API$4 = `click${EVENT_KEY$8}${DATA_API_KEY$5}`;\n  const CLASS_NAME_SHOW$8 = 'show';\n  const CLASS_NAME_COLLAPSE = 'collapse';\n  const CLASS_NAME_COLLAPSING = 'collapsing';\n  const CLASS_NAME_COLLAPSED = 'collapsed';\n  const WIDTH = 'width';\n  const HEIGHT = 'height';\n  const SELECTOR_ACTIVES = '.show, .collapsing';\n  const SELECTOR_DATA_TOGGLE$4 = '[data-bs-toggle=\"collapse\"]';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Collapse extends BaseComponent {\n    constructor(element, config) {\n      super(element);\n      this._isTransitioning = false;\n      this._config = this._getConfig(config);\n      this._triggerArray = SelectorEngine.find(`${SELECTOR_DATA_TOGGLE$4}[href=\"#${this._element.id}\"],` + `${SELECTOR_DATA_TOGGLE$4}[data-bs-target=\"#${this._element.id}\"]`);\n      const toggleList = SelectorEngine.find(SELECTOR_DATA_TOGGLE$4);\n\n      for (let i = 0, len = toggleList.length; i < len; i++) {\n        const elem = toggleList[i];\n        const selector = getSelectorFromElement(elem);\n        const filterElement = SelectorEngine.find(selector).filter(foundElem => foundElem === this._element);\n\n        if (selector !== null && filterElement.length) {\n          this._selector = selector;\n\n          this._triggerArray.push(elem);\n        }\n      }\n\n      this._parent = this._config.parent ? this._getParent() : null;\n\n      if (!this._config.parent) {\n        this._addAriaAndCollapsedClass(this._element, this._triggerArray);\n      }\n\n      if (this._config.toggle) {\n        this.toggle();\n      }\n    } // Getters\n\n\n    static get Default() {\n      return Default$8;\n    }\n\n    static get NAME() {\n      return NAME$9;\n    } // Public\n\n\n    toggle() {\n      if (this._element.classList.contains(CLASS_NAME_SHOW$8)) {\n        this.hide();\n      } else {\n        this.show();\n      }\n    }\n\n    show() {\n      if (this._isTransitioning || this._element.classList.contains(CLASS_NAME_SHOW$8)) {\n        return;\n      }\n\n      let actives;\n      let activesData;\n\n      if (this._parent) {\n        actives = SelectorEngine.find(SELECTOR_ACTIVES, this._parent).filter(elem => {\n          if (typeof this._config.parent === 'string') {\n            return elem.getAttribute('data-bs-parent') === this._config.parent;\n          }\n\n          return elem.classList.contains(CLASS_NAME_COLLAPSE);\n        });\n\n        if (actives.length === 0) {\n          actives = null;\n        }\n      }\n\n      const container = SelectorEngine.findOne(this._selector);\n\n      if (actives) {\n        const tempActiveData = actives.find(elem => container !== elem);\n        activesData = tempActiveData ? Collapse.getInstance(tempActiveData) : null;\n\n        if (activesData && activesData._isTransitioning) {\n          return;\n        }\n      }\n\n      const startEvent = EventHandler.trigger(this._element, EVENT_SHOW$5);\n\n      if (startEvent.defaultPrevented) {\n        return;\n      }\n\n      if (actives) {\n        actives.forEach(elemActive => {\n          if (container !== elemActive) {\n            Collapse.collapseInterface(elemActive, 'hide');\n          }\n\n          if (!activesData) {\n            Data.set(elemActive, DATA_KEY$8, null);\n          }\n        });\n      }\n\n      const dimension = this._getDimension();\n\n      this._element.classList.remove(CLASS_NAME_COLLAPSE);\n\n      this._element.classList.add(CLASS_NAME_COLLAPSING);\n\n      this._element.style[dimension] = 0;\n\n      if (this._triggerArray.length) {\n        this._triggerArray.forEach(element => {\n          element.classList.remove(CLASS_NAME_COLLAPSED);\n          element.setAttribute('aria-expanded', true);\n        });\n      }\n\n      this.setTransitioning(true);\n\n      const complete = () => {\n        this._element.classList.remove(CLASS_NAME_COLLAPSING);\n\n        this._element.classList.add(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$8);\n\n        this._element.style[dimension] = '';\n        this.setTransitioning(false);\n        EventHandler.trigger(this._element, EVENT_SHOWN$5);\n      };\n\n      const capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1);\n      const scrollSize = `scroll${capitalizedDimension}`;\n\n      this._queueCallback(complete, this._element, true);\n\n      this._element.style[dimension] = `${this._element[scrollSize]}px`;\n    }\n\n    hide() {\n      if (this._isTransitioning || !this._element.classList.contains(CLASS_NAME_SHOW$8)) {\n        return;\n      }\n\n      const startEvent = EventHandler.trigger(this._element, EVENT_HIDE$5);\n\n      if (startEvent.defaultPrevented) {\n        return;\n      }\n\n      const dimension = this._getDimension();\n\n      this._element.style[dimension] = `${this._element.getBoundingClientRect()[dimension]}px`;\n      reflow(this._element);\n\n      this._element.classList.add(CLASS_NAME_COLLAPSING);\n\n      this._element.classList.remove(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$8);\n\n      const triggerArrayLength = this._triggerArray.length;\n\n      if (triggerArrayLength > 0) {\n        for (let i = 0; i < triggerArrayLength; i++) {\n          const trigger = this._triggerArray[i];\n          const elem = getElementFromSelector(trigger);\n\n          if (elem && !elem.classList.contains(CLASS_NAME_SHOW$8)) {\n            trigger.classList.add(CLASS_NAME_COLLAPSED);\n            trigger.setAttribute('aria-expanded', false);\n          }\n        }\n      }\n\n      this.setTransitioning(true);\n\n      const complete = () => {\n        this.setTransitioning(false);\n\n        this._element.classList.remove(CLASS_NAME_COLLAPSING);\n\n        this._element.classList.add(CLASS_NAME_COLLAPSE);\n\n        EventHandler.trigger(this._element, EVENT_HIDDEN$5);\n      };\n\n      this._element.style[dimension] = '';\n\n      this._queueCallback(complete, this._element, true);\n    }\n\n    setTransitioning(isTransitioning) {\n      this._isTransitioning = isTransitioning;\n    } // Private\n\n\n    _getConfig(config) {\n      config = { ...Default$8,\n        ...config\n      };\n      config.toggle = Boolean(config.toggle); // Coerce string values\n\n      typeCheckConfig(NAME$9, config, DefaultType$8);\n      return config;\n    }\n\n    _getDimension() {\n      return this._element.classList.contains(WIDTH) ? WIDTH : HEIGHT;\n    }\n\n    _getParent() {\n      let {\n        parent\n      } = this._config;\n      parent = getElement(parent);\n      const selector = `${SELECTOR_DATA_TOGGLE$4}[data-bs-parent=\"${parent}\"]`;\n      SelectorEngine.find(selector, parent).forEach(element => {\n        const selected = getElementFromSelector(element);\n\n        this._addAriaAndCollapsedClass(selected, [element]);\n      });\n      return parent;\n    }\n\n    _addAriaAndCollapsedClass(element, triggerArray) {\n      if (!element || !triggerArray.length) {\n        return;\n      }\n\n      const isOpen = element.classList.contains(CLASS_NAME_SHOW$8);\n      triggerArray.forEach(elem => {\n        if (isOpen) {\n          elem.classList.remove(CLASS_NAME_COLLAPSED);\n        } else {\n          elem.classList.add(CLASS_NAME_COLLAPSED);\n        }\n\n        elem.setAttribute('aria-expanded', isOpen);\n      });\n    } // Static\n\n\n    static collapseInterface(element, config) {\n      let data = Collapse.getInstance(element);\n      const _config = { ...Default$8,\n        ...Manipulator.getDataAttributes(element),\n        ...(typeof config === 'object' && config ? config : {})\n      };\n\n      if (!data && _config.toggle && typeof config === 'string' && /show|hide/.test(config)) {\n        _config.toggle = false;\n      }\n\n      if (!data) {\n        data = new Collapse(element, _config);\n      }\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config]();\n      }\n    }\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        Collapse.collapseInterface(this, config);\n      });\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(document, EVENT_CLICK_DATA_API$4, SELECTOR_DATA_TOGGLE$4, function (event) {\n    // preventDefault only for <a> elements (which change the URL) not inside the collapsible element\n    if (event.target.tagName === 'A' || event.delegateTarget && event.delegateTarget.tagName === 'A') {\n      event.preventDefault();\n    }\n\n    const triggerData = Manipulator.getDataAttributes(this);\n    const selector = getSelectorFromElement(this);\n    const selectorElements = SelectorEngine.find(selector);\n    selectorElements.forEach(element => {\n      const data = Collapse.getInstance(element);\n      let config;\n\n      if (data) {\n        // update parent attribute\n        if (data._parent === null && typeof triggerData.parent === 'string') {\n          data._config.parent = triggerData.parent;\n          data._parent = data._getParent();\n        }\n\n        config = 'toggle';\n      } else {\n        config = triggerData;\n      }\n\n      Collapse.collapseInterface(element, config);\n    });\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Collapse to jQuery only if jQuery is present\n   */\n\n  defineJQueryPlugin(Collapse);\n\n  var top = 'top';\n  var bottom = 'bottom';\n  var right = 'right';\n  var left = 'left';\n  var auto = 'auto';\n  var basePlacements = [top, bottom, right, left];\n  var start = 'start';\n  var end = 'end';\n  var clippingParents = 'clippingParents';\n  var viewport = 'viewport';\n  var popper = 'popper';\n  var reference = 'reference';\n  var variationPlacements = /*#__PURE__*/basePlacements.reduce(function (acc, placement) {\n    return acc.concat([placement + \"-\" + start, placement + \"-\" + end]);\n  }, []);\n  var placements = /*#__PURE__*/[].concat(basePlacements, [auto]).reduce(function (acc, placement) {\n    return acc.concat([placement, placement + \"-\" + start, placement + \"-\" + end]);\n  }, []); // modifiers that need to read the DOM\n\n  var beforeRead = 'beforeRead';\n  var read = 'read';\n  var afterRead = 'afterRead'; // pure-logic modifiers\n\n  var beforeMain = 'beforeMain';\n  var main = 'main';\n  var afterMain = 'afterMain'; // modifier with the purpose to write to the DOM (or write into a framework state)\n\n  var beforeWrite = 'beforeWrite';\n  var write = 'write';\n  var afterWrite = 'afterWrite';\n  var modifierPhases = [beforeRead, read, afterRead, beforeMain, main, afterMain, beforeWrite, write, afterWrite];\n\n  function getNodeName(element) {\n    return element ? (element.nodeName || '').toLowerCase() : null;\n  }\n\n  function getWindow(node) {\n    if (node == null) {\n      return window;\n    }\n\n    if (node.toString() !== '[object Window]') {\n      var ownerDocument = node.ownerDocument;\n      return ownerDocument ? ownerDocument.defaultView || window : window;\n    }\n\n    return node;\n  }\n\n  function isElement(node) {\n    var OwnElement = getWindow(node).Element;\n    return node instanceof OwnElement || node instanceof Element;\n  }\n\n  function isHTMLElement(node) {\n    var OwnElement = getWindow(node).HTMLElement;\n    return node instanceof OwnElement || node instanceof HTMLElement;\n  }\n\n  function isShadowRoot(node) {\n    // IE 11 has no ShadowRoot\n    if (typeof ShadowRoot === 'undefined') {\n      return false;\n    }\n\n    var OwnElement = getWindow(node).ShadowRoot;\n    return node instanceof OwnElement || node instanceof ShadowRoot;\n  }\n\n  // and applies them to the HTMLElements such as popper and arrow\n\n  function applyStyles(_ref) {\n    var state = _ref.state;\n    Object.keys(state.elements).forEach(function (name) {\n      var style = state.styles[name] || {};\n      var attributes = state.attributes[name] || {};\n      var element = state.elements[name]; // arrow is optional + virtual elements\n\n      if (!isHTMLElement(element) || !getNodeName(element)) {\n        return;\n      } // Flow doesn't support to extend this property, but it's the most\n      // effective way to apply styles to an HTMLElement\n      // $FlowFixMe[cannot-write]\n\n\n      Object.assign(element.style, style);\n      Object.keys(attributes).forEach(function (name) {\n        var value = attributes[name];\n\n        if (value === false) {\n          element.removeAttribute(name);\n        } else {\n          element.setAttribute(name, value === true ? '' : value);\n        }\n      });\n    });\n  }\n\n  function effect$2(_ref2) {\n    var state = _ref2.state;\n    var initialStyles = {\n      popper: {\n        position: state.options.strategy,\n        left: '0',\n        top: '0',\n        margin: '0'\n      },\n      arrow: {\n        position: 'absolute'\n      },\n      reference: {}\n    };\n    Object.assign(state.elements.popper.style, initialStyles.popper);\n    state.styles = initialStyles;\n\n    if (state.elements.arrow) {\n      Object.assign(state.elements.arrow.style, initialStyles.arrow);\n    }\n\n    return function () {\n      Object.keys(state.elements).forEach(function (name) {\n        var element = state.elements[name];\n        var attributes = state.attributes[name] || {};\n        var styleProperties = Object.keys(state.styles.hasOwnProperty(name) ? state.styles[name] : initialStyles[name]); // Set all values to an empty string to unset them\n\n        var style = styleProperties.reduce(function (style, property) {\n          style[property] = '';\n          return style;\n        }, {}); // arrow is optional + virtual elements\n\n        if (!isHTMLElement(element) || !getNodeName(element)) {\n          return;\n        }\n\n        Object.assign(element.style, style);\n        Object.keys(attributes).forEach(function (attribute) {\n          element.removeAttribute(attribute);\n        });\n      });\n    };\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  var applyStyles$1 = {\n    name: 'applyStyles',\n    enabled: true,\n    phase: 'write',\n    fn: applyStyles,\n    effect: effect$2,\n    requires: ['computeStyles']\n  };\n\n  function getBasePlacement(placement) {\n    return placement.split('-')[0];\n  }\n\n  function getBoundingClientRect(element) {\n    var rect = element.getBoundingClientRect();\n    return {\n      width: rect.width,\n      height: rect.height,\n      top: rect.top,\n      right: rect.right,\n      bottom: rect.bottom,\n      left: rect.left,\n      x: rect.left,\n      y: rect.top\n    };\n  }\n\n  // means it doesn't take into account transforms.\n\n  function getLayoutRect(element) {\n    var clientRect = getBoundingClientRect(element); // Use the clientRect sizes if it's not been transformed.\n    // Fixes https://github.com/popperjs/popper-core/issues/1223\n\n    var width = element.offsetWidth;\n    var height = element.offsetHeight;\n\n    if (Math.abs(clientRect.width - width) <= 1) {\n      width = clientRect.width;\n    }\n\n    if (Math.abs(clientRect.height - height) <= 1) {\n      height = clientRect.height;\n    }\n\n    return {\n      x: element.offsetLeft,\n      y: element.offsetTop,\n      width: width,\n      height: height\n    };\n  }\n\n  function contains(parent, child) {\n    var rootNode = child.getRootNode && child.getRootNode(); // First, attempt with faster native method\n\n    if (parent.contains(child)) {\n      return true;\n    } // then fallback to custom implementation with Shadow DOM support\n    else if (rootNode && isShadowRoot(rootNode)) {\n        var next = child;\n\n        do {\n          if (next && parent.isSameNode(next)) {\n            return true;\n          } // $FlowFixMe[prop-missing]: need a better way to handle this...\n\n\n          next = next.parentNode || next.host;\n        } while (next);\n      } // Give up, the result is false\n\n\n    return false;\n  }\n\n  function getComputedStyle$1(element) {\n    return getWindow(element).getComputedStyle(element);\n  }\n\n  function isTableElement(element) {\n    return ['table', 'td', 'th'].indexOf(getNodeName(element)) >= 0;\n  }\n\n  function getDocumentElement(element) {\n    // $FlowFixMe[incompatible-return]: assume body is always available\n    return ((isElement(element) ? element.ownerDocument : // $FlowFixMe[prop-missing]\n    element.document) || window.document).documentElement;\n  }\n\n  function getParentNode(element) {\n    if (getNodeName(element) === 'html') {\n      return element;\n    }\n\n    return (// this is a quicker (but less type safe) way to save quite some bytes from the bundle\n      // $FlowFixMe[incompatible-return]\n      // $FlowFixMe[prop-missing]\n      element.assignedSlot || // step into the shadow DOM of the parent of a slotted node\n      element.parentNode || ( // DOM Element detected\n      isShadowRoot(element) ? element.host : null) || // ShadowRoot detected\n      // $FlowFixMe[incompatible-call]: HTMLElement is a Node\n      getDocumentElement(element) // fallback\n\n    );\n  }\n\n  function getTrueOffsetParent(element) {\n    if (!isHTMLElement(element) || // https://github.com/popperjs/popper-core/issues/837\n    getComputedStyle$1(element).position === 'fixed') {\n      return null;\n    }\n\n    return element.offsetParent;\n  } // `.offsetParent` reports `null` for fixed elements, while absolute elements\n  // return the containing block\n\n\n  function getContainingBlock(element) {\n    var isFirefox = navigator.userAgent.toLowerCase().indexOf('firefox') !== -1;\n    var isIE = navigator.userAgent.indexOf('Trident') !== -1;\n\n    if (isIE && isHTMLElement(element)) {\n      // In IE 9, 10 and 11 fixed elements containing block is always established by the viewport\n      var elementCss = getComputedStyle$1(element);\n\n      if (elementCss.position === 'fixed') {\n        return null;\n      }\n    }\n\n    var currentNode = getParentNode(element);\n\n    while (isHTMLElement(currentNode) && ['html', 'body'].indexOf(getNodeName(currentNode)) < 0) {\n      var css = getComputedStyle$1(currentNode); // This is non-exhaustive but covers the most common CSS properties that\n      // create a containing block.\n      // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n\n      if (css.transform !== 'none' || css.perspective !== 'none' || css.contain === 'paint' || ['transform', 'perspective'].indexOf(css.willChange) !== -1 || isFirefox && css.willChange === 'filter' || isFirefox && css.filter && css.filter !== 'none') {\n        return currentNode;\n      } else {\n        currentNode = currentNode.parentNode;\n      }\n    }\n\n    return null;\n  } // Gets the closest ancestor positioned element. Handles some edge cases,\n  // such as table ancestors and cross browser bugs.\n\n\n  function getOffsetParent(element) {\n    var window = getWindow(element);\n    var offsetParent = getTrueOffsetParent(element);\n\n    while (offsetParent && isTableElement(offsetParent) && getComputedStyle$1(offsetParent).position === 'static') {\n      offsetParent = getTrueOffsetParent(offsetParent);\n    }\n\n    if (offsetParent && (getNodeName(offsetParent) === 'html' || getNodeName(offsetParent) === 'body' && getComputedStyle$1(offsetParent).position === 'static')) {\n      return window;\n    }\n\n    return offsetParent || getContainingBlock(element) || window;\n  }\n\n  function getMainAxisFromPlacement(placement) {\n    return ['top', 'bottom'].indexOf(placement) >= 0 ? 'x' : 'y';\n  }\n\n  var max = Math.max;\n  var min = Math.min;\n  var round = Math.round;\n\n  function within(min$1, value, max$1) {\n    return max(min$1, min(value, max$1));\n  }\n\n  function getFreshSideObject() {\n    return {\n      top: 0,\n      right: 0,\n      bottom: 0,\n      left: 0\n    };\n  }\n\n  function mergePaddingObject(paddingObject) {\n    return Object.assign({}, getFreshSideObject(), paddingObject);\n  }\n\n  function expandToHashMap(value, keys) {\n    return keys.reduce(function (hashMap, key) {\n      hashMap[key] = value;\n      return hashMap;\n    }, {});\n  }\n\n  var toPaddingObject = function toPaddingObject(padding, state) {\n    padding = typeof padding === 'function' ? padding(Object.assign({}, state.rects, {\n      placement: state.placement\n    })) : padding;\n    return mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));\n  };\n\n  function arrow(_ref) {\n    var _state$modifiersData$;\n\n    var state = _ref.state,\n        name = _ref.name,\n        options = _ref.options;\n    var arrowElement = state.elements.arrow;\n    var popperOffsets = state.modifiersData.popperOffsets;\n    var basePlacement = getBasePlacement(state.placement);\n    var axis = getMainAxisFromPlacement(basePlacement);\n    var isVertical = [left, right].indexOf(basePlacement) >= 0;\n    var len = isVertical ? 'height' : 'width';\n\n    if (!arrowElement || !popperOffsets) {\n      return;\n    }\n\n    var paddingObject = toPaddingObject(options.padding, state);\n    var arrowRect = getLayoutRect(arrowElement);\n    var minProp = axis === 'y' ? top : left;\n    var maxProp = axis === 'y' ? bottom : right;\n    var endDiff = state.rects.reference[len] + state.rects.reference[axis] - popperOffsets[axis] - state.rects.popper[len];\n    var startDiff = popperOffsets[axis] - state.rects.reference[axis];\n    var arrowOffsetParent = getOffsetParent(arrowElement);\n    var clientSize = arrowOffsetParent ? axis === 'y' ? arrowOffsetParent.clientHeight || 0 : arrowOffsetParent.clientWidth || 0 : 0;\n    var centerToReference = endDiff / 2 - startDiff / 2; // Make sure the arrow doesn't overflow the popper if the center point is\n    // outside of the popper bounds\n\n    var min = paddingObject[minProp];\n    var max = clientSize - arrowRect[len] - paddingObject[maxProp];\n    var center = clientSize / 2 - arrowRect[len] / 2 + centerToReference;\n    var offset = within(min, center, max); // Prevents breaking syntax highlighting...\n\n    var axisProp = axis;\n    state.modifiersData[name] = (_state$modifiersData$ = {}, _state$modifiersData$[axisProp] = offset, _state$modifiersData$.centerOffset = offset - center, _state$modifiersData$);\n  }\n\n  function effect$1(_ref2) {\n    var state = _ref2.state,\n        options = _ref2.options;\n    var _options$element = options.element,\n        arrowElement = _options$element === void 0 ? '[data-popper-arrow]' : _options$element;\n\n    if (arrowElement == null) {\n      return;\n    } // CSS selector\n\n\n    if (typeof arrowElement === 'string') {\n      arrowElement = state.elements.popper.querySelector(arrowElement);\n\n      if (!arrowElement) {\n        return;\n      }\n    }\n\n    if (!contains(state.elements.popper, arrowElement)) {\n\n      return;\n    }\n\n    state.elements.arrow = arrowElement;\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  var arrow$1 = {\n    name: 'arrow',\n    enabled: true,\n    phase: 'main',\n    fn: arrow,\n    effect: effect$1,\n    requires: ['popperOffsets'],\n    requiresIfExists: ['preventOverflow']\n  };\n\n  var unsetSides = {\n    top: 'auto',\n    right: 'auto',\n    bottom: 'auto',\n    left: 'auto'\n  }; // Round the offsets to the nearest suitable subpixel based on the DPR.\n  // Zooming can change the DPR, but it seems to report a value that will\n  // cleanly divide the values into the appropriate subpixels.\n\n  function roundOffsetsByDPR(_ref) {\n    var x = _ref.x,\n        y = _ref.y;\n    var win = window;\n    var dpr = win.devicePixelRatio || 1;\n    return {\n      x: round(round(x * dpr) / dpr) || 0,\n      y: round(round(y * dpr) / dpr) || 0\n    };\n  }\n\n  function mapToStyles(_ref2) {\n    var _Object$assign2;\n\n    var popper = _ref2.popper,\n        popperRect = _ref2.popperRect,\n        placement = _ref2.placement,\n        offsets = _ref2.offsets,\n        position = _ref2.position,\n        gpuAcceleration = _ref2.gpuAcceleration,\n        adaptive = _ref2.adaptive,\n        roundOffsets = _ref2.roundOffsets;\n\n    var _ref3 = roundOffsets === true ? roundOffsetsByDPR(offsets) : typeof roundOffsets === 'function' ? roundOffsets(offsets) : offsets,\n        _ref3$x = _ref3.x,\n        x = _ref3$x === void 0 ? 0 : _ref3$x,\n        _ref3$y = _ref3.y,\n        y = _ref3$y === void 0 ? 0 : _ref3$y;\n\n    var hasX = offsets.hasOwnProperty('x');\n    var hasY = offsets.hasOwnProperty('y');\n    var sideX = left;\n    var sideY = top;\n    var win = window;\n\n    if (adaptive) {\n      var offsetParent = getOffsetParent(popper);\n      var heightProp = 'clientHeight';\n      var widthProp = 'clientWidth';\n\n      if (offsetParent === getWindow(popper)) {\n        offsetParent = getDocumentElement(popper);\n\n        if (getComputedStyle$1(offsetParent).position !== 'static') {\n          heightProp = 'scrollHeight';\n          widthProp = 'scrollWidth';\n        }\n      } // $FlowFixMe[incompatible-cast]: force type refinement, we compare offsetParent with window above, but Flow doesn't detect it\n\n\n      offsetParent = offsetParent;\n\n      if (placement === top) {\n        sideY = bottom; // $FlowFixMe[prop-missing]\n\n        y -= offsetParent[heightProp] - popperRect.height;\n        y *= gpuAcceleration ? 1 : -1;\n      }\n\n      if (placement === left) {\n        sideX = right; // $FlowFixMe[prop-missing]\n\n        x -= offsetParent[widthProp] - popperRect.width;\n        x *= gpuAcceleration ? 1 : -1;\n      }\n    }\n\n    var commonStyles = Object.assign({\n      position: position\n    }, adaptive && unsetSides);\n\n    if (gpuAcceleration) {\n      var _Object$assign;\n\n      return Object.assign({}, commonStyles, (_Object$assign = {}, _Object$assign[sideY] = hasY ? '0' : '', _Object$assign[sideX] = hasX ? '0' : '', _Object$assign.transform = (win.devicePixelRatio || 1) < 2 ? \"translate(\" + x + \"px, \" + y + \"px)\" : \"translate3d(\" + x + \"px, \" + y + \"px, 0)\", _Object$assign));\n    }\n\n    return Object.assign({}, commonStyles, (_Object$assign2 = {}, _Object$assign2[sideY] = hasY ? y + \"px\" : '', _Object$assign2[sideX] = hasX ? x + \"px\" : '', _Object$assign2.transform = '', _Object$assign2));\n  }\n\n  function computeStyles(_ref4) {\n    var state = _ref4.state,\n        options = _ref4.options;\n    var _options$gpuAccelerat = options.gpuAcceleration,\n        gpuAcceleration = _options$gpuAccelerat === void 0 ? true : _options$gpuAccelerat,\n        _options$adaptive = options.adaptive,\n        adaptive = _options$adaptive === void 0 ? true : _options$adaptive,\n        _options$roundOffsets = options.roundOffsets,\n        roundOffsets = _options$roundOffsets === void 0 ? true : _options$roundOffsets;\n\n    var commonStyles = {\n      placement: getBasePlacement(state.placement),\n      popper: state.elements.popper,\n      popperRect: state.rects.popper,\n      gpuAcceleration: gpuAcceleration\n    };\n\n    if (state.modifiersData.popperOffsets != null) {\n      state.styles.popper = Object.assign({}, state.styles.popper, mapToStyles(Object.assign({}, commonStyles, {\n        offsets: state.modifiersData.popperOffsets,\n        position: state.options.strategy,\n        adaptive: adaptive,\n        roundOffsets: roundOffsets\n      })));\n    }\n\n    if (state.modifiersData.arrow != null) {\n      state.styles.arrow = Object.assign({}, state.styles.arrow, mapToStyles(Object.assign({}, commonStyles, {\n        offsets: state.modifiersData.arrow,\n        position: 'absolute',\n        adaptive: false,\n        roundOffsets: roundOffsets\n      })));\n    }\n\n    state.attributes.popper = Object.assign({}, state.attributes.popper, {\n      'data-popper-placement': state.placement\n    });\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  var computeStyles$1 = {\n    name: 'computeStyles',\n    enabled: true,\n    phase: 'beforeWrite',\n    fn: computeStyles,\n    data: {}\n  };\n\n  var passive = {\n    passive: true\n  };\n\n  function effect(_ref) {\n    var state = _ref.state,\n        instance = _ref.instance,\n        options = _ref.options;\n    var _options$scroll = options.scroll,\n        scroll = _options$scroll === void 0 ? true : _options$scroll,\n        _options$resize = options.resize,\n        resize = _options$resize === void 0 ? true : _options$resize;\n    var window = getWindow(state.elements.popper);\n    var scrollParents = [].concat(state.scrollParents.reference, state.scrollParents.popper);\n\n    if (scroll) {\n      scrollParents.forEach(function (scrollParent) {\n        scrollParent.addEventListener('scroll', instance.update, passive);\n      });\n    }\n\n    if (resize) {\n      window.addEventListener('resize', instance.update, passive);\n    }\n\n    return function () {\n      if (scroll) {\n        scrollParents.forEach(function (scrollParent) {\n          scrollParent.removeEventListener('scroll', instance.update, passive);\n        });\n      }\n\n      if (resize) {\n        window.removeEventListener('resize', instance.update, passive);\n      }\n    };\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  var eventListeners = {\n    name: 'eventListeners',\n    enabled: true,\n    phase: 'write',\n    fn: function fn() {},\n    effect: effect,\n    data: {}\n  };\n\n  var hash$1 = {\n    left: 'right',\n    right: 'left',\n    bottom: 'top',\n    top: 'bottom'\n  };\n  function getOppositePlacement(placement) {\n    return placement.replace(/left|right|bottom|top/g, function (matched) {\n      return hash$1[matched];\n    });\n  }\n\n  var hash = {\n    start: 'end',\n    end: 'start'\n  };\n  function getOppositeVariationPlacement(placement) {\n    return placement.replace(/start|end/g, function (matched) {\n      return hash[matched];\n    });\n  }\n\n  function getWindowScroll(node) {\n    var win = getWindow(node);\n    var scrollLeft = win.pageXOffset;\n    var scrollTop = win.pageYOffset;\n    return {\n      scrollLeft: scrollLeft,\n      scrollTop: scrollTop\n    };\n  }\n\n  function getWindowScrollBarX(element) {\n    // If <html> has a CSS width greater than the viewport, then this will be\n    // incorrect for RTL.\n    // Popper 1 is broken in this case and never had a bug report so let's assume\n    // it's not an issue. I don't think anyone ever specifies width on <html>\n    // anyway.\n    // Browsers where the left scrollbar doesn't cause an issue report `0` for\n    // this (e.g. Edge 2019, IE11, Safari)\n    return getBoundingClientRect(getDocumentElement(element)).left + getWindowScroll(element).scrollLeft;\n  }\n\n  function getViewportRect(element) {\n    var win = getWindow(element);\n    var html = getDocumentElement(element);\n    var visualViewport = win.visualViewport;\n    var width = html.clientWidth;\n    var height = html.clientHeight;\n    var x = 0;\n    var y = 0; // NB: This isn't supported on iOS <= 12. If the keyboard is open, the popper\n    // can be obscured underneath it.\n    // Also, `html.clientHeight` adds the bottom bar height in Safari iOS, even\n    // if it isn't open, so if this isn't available, the popper will be detected\n    // to overflow the bottom of the screen too early.\n\n    if (visualViewport) {\n      width = visualViewport.width;\n      height = visualViewport.height; // Uses Layout Viewport (like Chrome; Safari does not currently)\n      // In Chrome, it returns a value very close to 0 (+/-) but contains rounding\n      // errors due to floating point numbers, so we need to check precision.\n      // Safari returns a number <= 0, usually < -1 when pinch-zoomed\n      // Feature detection fails in mobile emulation mode in Chrome.\n      // Math.abs(win.innerWidth / visualViewport.scale - visualViewport.width) <\n      // 0.001\n      // Fallback here: \"Not Safari\" userAgent\n\n      if (!/^((?!chrome|android).)*safari/i.test(navigator.userAgent)) {\n        x = visualViewport.offsetLeft;\n        y = visualViewport.offsetTop;\n      }\n    }\n\n    return {\n      width: width,\n      height: height,\n      x: x + getWindowScrollBarX(element),\n      y: y\n    };\n  }\n\n  // of the `<html>` and `<body>` rect bounds if horizontally scrollable\n\n  function getDocumentRect(element) {\n    var _element$ownerDocumen;\n\n    var html = getDocumentElement(element);\n    var winScroll = getWindowScroll(element);\n    var body = (_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body;\n    var width = max(html.scrollWidth, html.clientWidth, body ? body.scrollWidth : 0, body ? body.clientWidth : 0);\n    var height = max(html.scrollHeight, html.clientHeight, body ? body.scrollHeight : 0, body ? body.clientHeight : 0);\n    var x = -winScroll.scrollLeft + getWindowScrollBarX(element);\n    var y = -winScroll.scrollTop;\n\n    if (getComputedStyle$1(body || html).direction === 'rtl') {\n      x += max(html.clientWidth, body ? body.clientWidth : 0) - width;\n    }\n\n    return {\n      width: width,\n      height: height,\n      x: x,\n      y: y\n    };\n  }\n\n  function isScrollParent(element) {\n    // Firefox wants us to check `-x` and `-y` variations as well\n    var _getComputedStyle = getComputedStyle$1(element),\n        overflow = _getComputedStyle.overflow,\n        overflowX = _getComputedStyle.overflowX,\n        overflowY = _getComputedStyle.overflowY;\n\n    return /auto|scroll|overlay|hidden/.test(overflow + overflowY + overflowX);\n  }\n\n  function getScrollParent(node) {\n    if (['html', 'body', '#document'].indexOf(getNodeName(node)) >= 0) {\n      // $FlowFixMe[incompatible-return]: assume body is always available\n      return node.ownerDocument.body;\n    }\n\n    if (isHTMLElement(node) && isScrollParent(node)) {\n      return node;\n    }\n\n    return getScrollParent(getParentNode(node));\n  }\n\n  /*\n  given a DOM element, return the list of all scroll parents, up the list of ancesors\n  until we get to the top window object. This list is what we attach scroll listeners\n  to, because if any of these parent elements scroll, we'll need to re-calculate the\n  reference element's position.\n  */\n\n  function listScrollParents(element, list) {\n    var _element$ownerDocumen;\n\n    if (list === void 0) {\n      list = [];\n    }\n\n    var scrollParent = getScrollParent(element);\n    var isBody = scrollParent === ((_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body);\n    var win = getWindow(scrollParent);\n    var target = isBody ? [win].concat(win.visualViewport || [], isScrollParent(scrollParent) ? scrollParent : []) : scrollParent;\n    var updatedList = list.concat(target);\n    return isBody ? updatedList : // $FlowFixMe[incompatible-call]: isBody tells us target will be an HTMLElement here\n    updatedList.concat(listScrollParents(getParentNode(target)));\n  }\n\n  function rectToClientRect(rect) {\n    return Object.assign({}, rect, {\n      left: rect.x,\n      top: rect.y,\n      right: rect.x + rect.width,\n      bottom: rect.y + rect.height\n    });\n  }\n\n  function getInnerBoundingClientRect(element) {\n    var rect = getBoundingClientRect(element);\n    rect.top = rect.top + element.clientTop;\n    rect.left = rect.left + element.clientLeft;\n    rect.bottom = rect.top + element.clientHeight;\n    rect.right = rect.left + element.clientWidth;\n    rect.width = element.clientWidth;\n    rect.height = element.clientHeight;\n    rect.x = rect.left;\n    rect.y = rect.top;\n    return rect;\n  }\n\n  function getClientRectFromMixedType(element, clippingParent) {\n    return clippingParent === viewport ? rectToClientRect(getViewportRect(element)) : isHTMLElement(clippingParent) ? getInnerBoundingClientRect(clippingParent) : rectToClientRect(getDocumentRect(getDocumentElement(element)));\n  } // A \"clipping parent\" is an overflowable container with the characteristic of\n  // clipping (or hiding) overflowing elements with a position different from\n  // `initial`\n\n\n  function getClippingParents(element) {\n    var clippingParents = listScrollParents(getParentNode(element));\n    var canEscapeClipping = ['absolute', 'fixed'].indexOf(getComputedStyle$1(element).position) >= 0;\n    var clipperElement = canEscapeClipping && isHTMLElement(element) ? getOffsetParent(element) : element;\n\n    if (!isElement(clipperElement)) {\n      return [];\n    } // $FlowFixMe[incompatible-return]: https://github.com/facebook/flow/issues/1414\n\n\n    return clippingParents.filter(function (clippingParent) {\n      return isElement(clippingParent) && contains(clippingParent, clipperElement) && getNodeName(clippingParent) !== 'body';\n    });\n  } // Gets the maximum area that the element is visible in due to any number of\n  // clipping parents\n\n\n  function getClippingRect(element, boundary, rootBoundary) {\n    var mainClippingParents = boundary === 'clippingParents' ? getClippingParents(element) : [].concat(boundary);\n    var clippingParents = [].concat(mainClippingParents, [rootBoundary]);\n    var firstClippingParent = clippingParents[0];\n    var clippingRect = clippingParents.reduce(function (accRect, clippingParent) {\n      var rect = getClientRectFromMixedType(element, clippingParent);\n      accRect.top = max(rect.top, accRect.top);\n      accRect.right = min(rect.right, accRect.right);\n      accRect.bottom = min(rect.bottom, accRect.bottom);\n      accRect.left = max(rect.left, accRect.left);\n      return accRect;\n    }, getClientRectFromMixedType(element, firstClippingParent));\n    clippingRect.width = clippingRect.right - clippingRect.left;\n    clippingRect.height = clippingRect.bottom - clippingRect.top;\n    clippingRect.x = clippingRect.left;\n    clippingRect.y = clippingRect.top;\n    return clippingRect;\n  }\n\n  function getVariation(placement) {\n    return placement.split('-')[1];\n  }\n\n  function computeOffsets(_ref) {\n    var reference = _ref.reference,\n        element = _ref.element,\n        placement = _ref.placement;\n    var basePlacement = placement ? getBasePlacement(placement) : null;\n    var variation = placement ? getVariation(placement) : null;\n    var commonX = reference.x + reference.width / 2 - element.width / 2;\n    var commonY = reference.y + reference.height / 2 - element.height / 2;\n    var offsets;\n\n    switch (basePlacement) {\n      case top:\n        offsets = {\n          x: commonX,\n          y: reference.y - element.height\n        };\n        break;\n\n      case bottom:\n        offsets = {\n          x: commonX,\n          y: reference.y + reference.height\n        };\n        break;\n\n      case right:\n        offsets = {\n          x: reference.x + reference.width,\n          y: commonY\n        };\n        break;\n\n      case left:\n        offsets = {\n          x: reference.x - element.width,\n          y: commonY\n        };\n        break;\n\n      default:\n        offsets = {\n          x: reference.x,\n          y: reference.y\n        };\n    }\n\n    var mainAxis = basePlacement ? getMainAxisFromPlacement(basePlacement) : null;\n\n    if (mainAxis != null) {\n      var len = mainAxis === 'y' ? 'height' : 'width';\n\n      switch (variation) {\n        case start:\n          offsets[mainAxis] = offsets[mainAxis] - (reference[len] / 2 - element[len] / 2);\n          break;\n\n        case end:\n          offsets[mainAxis] = offsets[mainAxis] + (reference[len] / 2 - element[len] / 2);\n          break;\n      }\n    }\n\n    return offsets;\n  }\n\n  function detectOverflow(state, options) {\n    if (options === void 0) {\n      options = {};\n    }\n\n    var _options = options,\n        _options$placement = _options.placement,\n        placement = _options$placement === void 0 ? state.placement : _options$placement,\n        _options$boundary = _options.boundary,\n        boundary = _options$boundary === void 0 ? clippingParents : _options$boundary,\n        _options$rootBoundary = _options.rootBoundary,\n        rootBoundary = _options$rootBoundary === void 0 ? viewport : _options$rootBoundary,\n        _options$elementConte = _options.elementContext,\n        elementContext = _options$elementConte === void 0 ? popper : _options$elementConte,\n        _options$altBoundary = _options.altBoundary,\n        altBoundary = _options$altBoundary === void 0 ? false : _options$altBoundary,\n        _options$padding = _options.padding,\n        padding = _options$padding === void 0 ? 0 : _options$padding;\n    var paddingObject = mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));\n    var altContext = elementContext === popper ? reference : popper;\n    var referenceElement = state.elements.reference;\n    var popperRect = state.rects.popper;\n    var element = state.elements[altBoundary ? altContext : elementContext];\n    var clippingClientRect = getClippingRect(isElement(element) ? element : element.contextElement || getDocumentElement(state.elements.popper), boundary, rootBoundary);\n    var referenceClientRect = getBoundingClientRect(referenceElement);\n    var popperOffsets = computeOffsets({\n      reference: referenceClientRect,\n      element: popperRect,\n      strategy: 'absolute',\n      placement: placement\n    });\n    var popperClientRect = rectToClientRect(Object.assign({}, popperRect, popperOffsets));\n    var elementClientRect = elementContext === popper ? popperClientRect : referenceClientRect; // positive = overflowing the clipping rect\n    // 0 or negative = within the clipping rect\n\n    var overflowOffsets = {\n      top: clippingClientRect.top - elementClientRect.top + paddingObject.top,\n      bottom: elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom,\n      left: clippingClientRect.left - elementClientRect.left + paddingObject.left,\n      right: elementClientRect.right - clippingClientRect.right + paddingObject.right\n    };\n    var offsetData = state.modifiersData.offset; // Offsets can be applied only to the popper element\n\n    if (elementContext === popper && offsetData) {\n      var offset = offsetData[placement];\n      Object.keys(overflowOffsets).forEach(function (key) {\n        var multiply = [right, bottom].indexOf(key) >= 0 ? 1 : -1;\n        var axis = [top, bottom].indexOf(key) >= 0 ? 'y' : 'x';\n        overflowOffsets[key] += offset[axis] * multiply;\n      });\n    }\n\n    return overflowOffsets;\n  }\n\n  function computeAutoPlacement(state, options) {\n    if (options === void 0) {\n      options = {};\n    }\n\n    var _options = options,\n        placement = _options.placement,\n        boundary = _options.boundary,\n        rootBoundary = _options.rootBoundary,\n        padding = _options.padding,\n        flipVariations = _options.flipVariations,\n        _options$allowedAutoP = _options.allowedAutoPlacements,\n        allowedAutoPlacements = _options$allowedAutoP === void 0 ? placements : _options$allowedAutoP;\n    var variation = getVariation(placement);\n    var placements$1 = variation ? flipVariations ? variationPlacements : variationPlacements.filter(function (placement) {\n      return getVariation(placement) === variation;\n    }) : basePlacements;\n    var allowedPlacements = placements$1.filter(function (placement) {\n      return allowedAutoPlacements.indexOf(placement) >= 0;\n    });\n\n    if (allowedPlacements.length === 0) {\n      allowedPlacements = placements$1;\n    } // $FlowFixMe[incompatible-type]: Flow seems to have problems with two array unions...\n\n\n    var overflows = allowedPlacements.reduce(function (acc, placement) {\n      acc[placement] = detectOverflow(state, {\n        placement: placement,\n        boundary: boundary,\n        rootBoundary: rootBoundary,\n        padding: padding\n      })[getBasePlacement(placement)];\n      return acc;\n    }, {});\n    return Object.keys(overflows).sort(function (a, b) {\n      return overflows[a] - overflows[b];\n    });\n  }\n\n  function getExpandedFallbackPlacements(placement) {\n    if (getBasePlacement(placement) === auto) {\n      return [];\n    }\n\n    var oppositePlacement = getOppositePlacement(placement);\n    return [getOppositeVariationPlacement(placement), oppositePlacement, getOppositeVariationPlacement(oppositePlacement)];\n  }\n\n  function flip(_ref) {\n    var state = _ref.state,\n        options = _ref.options,\n        name = _ref.name;\n\n    if (state.modifiersData[name]._skip) {\n      return;\n    }\n\n    var _options$mainAxis = options.mainAxis,\n        checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\n        _options$altAxis = options.altAxis,\n        checkAltAxis = _options$altAxis === void 0 ? true : _options$altAxis,\n        specifiedFallbackPlacements = options.fallbackPlacements,\n        padding = options.padding,\n        boundary = options.boundary,\n        rootBoundary = options.rootBoundary,\n        altBoundary = options.altBoundary,\n        _options$flipVariatio = options.flipVariations,\n        flipVariations = _options$flipVariatio === void 0 ? true : _options$flipVariatio,\n        allowedAutoPlacements = options.allowedAutoPlacements;\n    var preferredPlacement = state.options.placement;\n    var basePlacement = getBasePlacement(preferredPlacement);\n    var isBasePlacement = basePlacement === preferredPlacement;\n    var fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipVariations ? [getOppositePlacement(preferredPlacement)] : getExpandedFallbackPlacements(preferredPlacement));\n    var placements = [preferredPlacement].concat(fallbackPlacements).reduce(function (acc, placement) {\n      return acc.concat(getBasePlacement(placement) === auto ? computeAutoPlacement(state, {\n        placement: placement,\n        boundary: boundary,\n        rootBoundary: rootBoundary,\n        padding: padding,\n        flipVariations: flipVariations,\n        allowedAutoPlacements: allowedAutoPlacements\n      }) : placement);\n    }, []);\n    var referenceRect = state.rects.reference;\n    var popperRect = state.rects.popper;\n    var checksMap = new Map();\n    var makeFallbackChecks = true;\n    var firstFittingPlacement = placements[0];\n\n    for (var i = 0; i < placements.length; i++) {\n      var placement = placements[i];\n\n      var _basePlacement = getBasePlacement(placement);\n\n      var isStartVariation = getVariation(placement) === start;\n      var isVertical = [top, bottom].indexOf(_basePlacement) >= 0;\n      var len = isVertical ? 'width' : 'height';\n      var overflow = detectOverflow(state, {\n        placement: placement,\n        boundary: boundary,\n        rootBoundary: rootBoundary,\n        altBoundary: altBoundary,\n        padding: padding\n      });\n      var mainVariationSide = isVertical ? isStartVariation ? right : left : isStartVariation ? bottom : top;\n\n      if (referenceRect[len] > popperRect[len]) {\n        mainVariationSide = getOppositePlacement(mainVariationSide);\n      }\n\n      var altVariationSide = getOppositePlacement(mainVariationSide);\n      var checks = [];\n\n      if (checkMainAxis) {\n        checks.push(overflow[_basePlacement] <= 0);\n      }\n\n      if (checkAltAxis) {\n        checks.push(overflow[mainVariationSide] <= 0, overflow[altVariationSide] <= 0);\n      }\n\n      if (checks.every(function (check) {\n        return check;\n      })) {\n        firstFittingPlacement = placement;\n        makeFallbackChecks = false;\n        break;\n      }\n\n      checksMap.set(placement, checks);\n    }\n\n    if (makeFallbackChecks) {\n      // `2` may be desired in some cases – research later\n      var numberOfChecks = flipVariations ? 3 : 1;\n\n      var _loop = function _loop(_i) {\n        var fittingPlacement = placements.find(function (placement) {\n          var checks = checksMap.get(placement);\n\n          if (checks) {\n            return checks.slice(0, _i).every(function (check) {\n              return check;\n            });\n          }\n        });\n\n        if (fittingPlacement) {\n          firstFittingPlacement = fittingPlacement;\n          return \"break\";\n        }\n      };\n\n      for (var _i = numberOfChecks; _i > 0; _i--) {\n        var _ret = _loop(_i);\n\n        if (_ret === \"break\") break;\n      }\n    }\n\n    if (state.placement !== firstFittingPlacement) {\n      state.modifiersData[name]._skip = true;\n      state.placement = firstFittingPlacement;\n      state.reset = true;\n    }\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  var flip$1 = {\n    name: 'flip',\n    enabled: true,\n    phase: 'main',\n    fn: flip,\n    requiresIfExists: ['offset'],\n    data: {\n      _skip: false\n    }\n  };\n\n  function getSideOffsets(overflow, rect, preventedOffsets) {\n    if (preventedOffsets === void 0) {\n      preventedOffsets = {\n        x: 0,\n        y: 0\n      };\n    }\n\n    return {\n      top: overflow.top - rect.height - preventedOffsets.y,\n      right: overflow.right - rect.width + preventedOffsets.x,\n      bottom: overflow.bottom - rect.height + preventedOffsets.y,\n      left: overflow.left - rect.width - preventedOffsets.x\n    };\n  }\n\n  function isAnySideFullyClipped(overflow) {\n    return [top, right, bottom, left].some(function (side) {\n      return overflow[side] >= 0;\n    });\n  }\n\n  function hide(_ref) {\n    var state = _ref.state,\n        name = _ref.name;\n    var referenceRect = state.rects.reference;\n    var popperRect = state.rects.popper;\n    var preventedOffsets = state.modifiersData.preventOverflow;\n    var referenceOverflow = detectOverflow(state, {\n      elementContext: 'reference'\n    });\n    var popperAltOverflow = detectOverflow(state, {\n      altBoundary: true\n    });\n    var referenceClippingOffsets = getSideOffsets(referenceOverflow, referenceRect);\n    var popperEscapeOffsets = getSideOffsets(popperAltOverflow, popperRect, preventedOffsets);\n    var isReferenceHidden = isAnySideFullyClipped(referenceClippingOffsets);\n    var hasPopperEscaped = isAnySideFullyClipped(popperEscapeOffsets);\n    state.modifiersData[name] = {\n      referenceClippingOffsets: referenceClippingOffsets,\n      popperEscapeOffsets: popperEscapeOffsets,\n      isReferenceHidden: isReferenceHidden,\n      hasPopperEscaped: hasPopperEscaped\n    };\n    state.attributes.popper = Object.assign({}, state.attributes.popper, {\n      'data-popper-reference-hidden': isReferenceHidden,\n      'data-popper-escaped': hasPopperEscaped\n    });\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  var hide$1 = {\n    name: 'hide',\n    enabled: true,\n    phase: 'main',\n    requiresIfExists: ['preventOverflow'],\n    fn: hide\n  };\n\n  function distanceAndSkiddingToXY(placement, rects, offset) {\n    var basePlacement = getBasePlacement(placement);\n    var invertDistance = [left, top].indexOf(basePlacement) >= 0 ? -1 : 1;\n\n    var _ref = typeof offset === 'function' ? offset(Object.assign({}, rects, {\n      placement: placement\n    })) : offset,\n        skidding = _ref[0],\n        distance = _ref[1];\n\n    skidding = skidding || 0;\n    distance = (distance || 0) * invertDistance;\n    return [left, right].indexOf(basePlacement) >= 0 ? {\n      x: distance,\n      y: skidding\n    } : {\n      x: skidding,\n      y: distance\n    };\n  }\n\n  function offset(_ref2) {\n    var state = _ref2.state,\n        options = _ref2.options,\n        name = _ref2.name;\n    var _options$offset = options.offset,\n        offset = _options$offset === void 0 ? [0, 0] : _options$offset;\n    var data = placements.reduce(function (acc, placement) {\n      acc[placement] = distanceAndSkiddingToXY(placement, state.rects, offset);\n      return acc;\n    }, {});\n    var _data$state$placement = data[state.placement],\n        x = _data$state$placement.x,\n        y = _data$state$placement.y;\n\n    if (state.modifiersData.popperOffsets != null) {\n      state.modifiersData.popperOffsets.x += x;\n      state.modifiersData.popperOffsets.y += y;\n    }\n\n    state.modifiersData[name] = data;\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  var offset$1 = {\n    name: 'offset',\n    enabled: true,\n    phase: 'main',\n    requires: ['popperOffsets'],\n    fn: offset\n  };\n\n  function popperOffsets(_ref) {\n    var state = _ref.state,\n        name = _ref.name;\n    // Offsets are the actual position the popper needs to have to be\n    // properly positioned near its reference element\n    // This is the most basic placement, and will be adjusted by\n    // the modifiers in the next step\n    state.modifiersData[name] = computeOffsets({\n      reference: state.rects.reference,\n      element: state.rects.popper,\n      strategy: 'absolute',\n      placement: state.placement\n    });\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  var popperOffsets$1 = {\n    name: 'popperOffsets',\n    enabled: true,\n    phase: 'read',\n    fn: popperOffsets,\n    data: {}\n  };\n\n  function getAltAxis(axis) {\n    return axis === 'x' ? 'y' : 'x';\n  }\n\n  function preventOverflow(_ref) {\n    var state = _ref.state,\n        options = _ref.options,\n        name = _ref.name;\n    var _options$mainAxis = options.mainAxis,\n        checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\n        _options$altAxis = options.altAxis,\n        checkAltAxis = _options$altAxis === void 0 ? false : _options$altAxis,\n        boundary = options.boundary,\n        rootBoundary = options.rootBoundary,\n        altBoundary = options.altBoundary,\n        padding = options.padding,\n        _options$tether = options.tether,\n        tether = _options$tether === void 0 ? true : _options$tether,\n        _options$tetherOffset = options.tetherOffset,\n        tetherOffset = _options$tetherOffset === void 0 ? 0 : _options$tetherOffset;\n    var overflow = detectOverflow(state, {\n      boundary: boundary,\n      rootBoundary: rootBoundary,\n      padding: padding,\n      altBoundary: altBoundary\n    });\n    var basePlacement = getBasePlacement(state.placement);\n    var variation = getVariation(state.placement);\n    var isBasePlacement = !variation;\n    var mainAxis = getMainAxisFromPlacement(basePlacement);\n    var altAxis = getAltAxis(mainAxis);\n    var popperOffsets = state.modifiersData.popperOffsets;\n    var referenceRect = state.rects.reference;\n    var popperRect = state.rects.popper;\n    var tetherOffsetValue = typeof tetherOffset === 'function' ? tetherOffset(Object.assign({}, state.rects, {\n      placement: state.placement\n    })) : tetherOffset;\n    var data = {\n      x: 0,\n      y: 0\n    };\n\n    if (!popperOffsets) {\n      return;\n    }\n\n    if (checkMainAxis || checkAltAxis) {\n      var mainSide = mainAxis === 'y' ? top : left;\n      var altSide = mainAxis === 'y' ? bottom : right;\n      var len = mainAxis === 'y' ? 'height' : 'width';\n      var offset = popperOffsets[mainAxis];\n      var min$1 = popperOffsets[mainAxis] + overflow[mainSide];\n      var max$1 = popperOffsets[mainAxis] - overflow[altSide];\n      var additive = tether ? -popperRect[len] / 2 : 0;\n      var minLen = variation === start ? referenceRect[len] : popperRect[len];\n      var maxLen = variation === start ? -popperRect[len] : -referenceRect[len]; // We need to include the arrow in the calculation so the arrow doesn't go\n      // outside the reference bounds\n\n      var arrowElement = state.elements.arrow;\n      var arrowRect = tether && arrowElement ? getLayoutRect(arrowElement) : {\n        width: 0,\n        height: 0\n      };\n      var arrowPaddingObject = state.modifiersData['arrow#persistent'] ? state.modifiersData['arrow#persistent'].padding : getFreshSideObject();\n      var arrowPaddingMin = arrowPaddingObject[mainSide];\n      var arrowPaddingMax = arrowPaddingObject[altSide]; // If the reference length is smaller than the arrow length, we don't want\n      // to include its full size in the calculation. If the reference is small\n      // and near the edge of a boundary, the popper can overflow even if the\n      // reference is not overflowing as well (e.g. virtual elements with no\n      // width or height)\n\n      var arrowLen = within(0, referenceRect[len], arrowRect[len]);\n      var minOffset = isBasePlacement ? referenceRect[len] / 2 - additive - arrowLen - arrowPaddingMin - tetherOffsetValue : minLen - arrowLen - arrowPaddingMin - tetherOffsetValue;\n      var maxOffset = isBasePlacement ? -referenceRect[len] / 2 + additive + arrowLen + arrowPaddingMax + tetherOffsetValue : maxLen + arrowLen + arrowPaddingMax + tetherOffsetValue;\n      var arrowOffsetParent = state.elements.arrow && getOffsetParent(state.elements.arrow);\n      var clientOffset = arrowOffsetParent ? mainAxis === 'y' ? arrowOffsetParent.clientTop || 0 : arrowOffsetParent.clientLeft || 0 : 0;\n      var offsetModifierValue = state.modifiersData.offset ? state.modifiersData.offset[state.placement][mainAxis] : 0;\n      var tetherMin = popperOffsets[mainAxis] + minOffset - offsetModifierValue - clientOffset;\n      var tetherMax = popperOffsets[mainAxis] + maxOffset - offsetModifierValue;\n\n      if (checkMainAxis) {\n        var preventedOffset = within(tether ? min(min$1, tetherMin) : min$1, offset, tether ? max(max$1, tetherMax) : max$1);\n        popperOffsets[mainAxis] = preventedOffset;\n        data[mainAxis] = preventedOffset - offset;\n      }\n\n      if (checkAltAxis) {\n        var _mainSide = mainAxis === 'x' ? top : left;\n\n        var _altSide = mainAxis === 'x' ? bottom : right;\n\n        var _offset = popperOffsets[altAxis];\n\n        var _min = _offset + overflow[_mainSide];\n\n        var _max = _offset - overflow[_altSide];\n\n        var _preventedOffset = within(tether ? min(_min, tetherMin) : _min, _offset, tether ? max(_max, tetherMax) : _max);\n\n        popperOffsets[altAxis] = _preventedOffset;\n        data[altAxis] = _preventedOffset - _offset;\n      }\n    }\n\n    state.modifiersData[name] = data;\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  var preventOverflow$1 = {\n    name: 'preventOverflow',\n    enabled: true,\n    phase: 'main',\n    fn: preventOverflow,\n    requiresIfExists: ['offset']\n  };\n\n  function getHTMLElementScroll(element) {\n    return {\n      scrollLeft: element.scrollLeft,\n      scrollTop: element.scrollTop\n    };\n  }\n\n  function getNodeScroll(node) {\n    if (node === getWindow(node) || !isHTMLElement(node)) {\n      return getWindowScroll(node);\n    } else {\n      return getHTMLElementScroll(node);\n    }\n  }\n\n  // Composite means it takes into account transforms as well as layout.\n\n  function getCompositeRect(elementOrVirtualElement, offsetParent, isFixed) {\n    if (isFixed === void 0) {\n      isFixed = false;\n    }\n\n    var documentElement = getDocumentElement(offsetParent);\n    var rect = getBoundingClientRect(elementOrVirtualElement);\n    var isOffsetParentAnElement = isHTMLElement(offsetParent);\n    var scroll = {\n      scrollLeft: 0,\n      scrollTop: 0\n    };\n    var offsets = {\n      x: 0,\n      y: 0\n    };\n\n    if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {\n      if (getNodeName(offsetParent) !== 'body' || // https://github.com/popperjs/popper-core/issues/1078\n      isScrollParent(documentElement)) {\n        scroll = getNodeScroll(offsetParent);\n      }\n\n      if (isHTMLElement(offsetParent)) {\n        offsets = getBoundingClientRect(offsetParent);\n        offsets.x += offsetParent.clientLeft;\n        offsets.y += offsetParent.clientTop;\n      } else if (documentElement) {\n        offsets.x = getWindowScrollBarX(documentElement);\n      }\n    }\n\n    return {\n      x: rect.left + scroll.scrollLeft - offsets.x,\n      y: rect.top + scroll.scrollTop - offsets.y,\n      width: rect.width,\n      height: rect.height\n    };\n  }\n\n  function order(modifiers) {\n    var map = new Map();\n    var visited = new Set();\n    var result = [];\n    modifiers.forEach(function (modifier) {\n      map.set(modifier.name, modifier);\n    }); // On visiting object, check for its dependencies and visit them recursively\n\n    function sort(modifier) {\n      visited.add(modifier.name);\n      var requires = [].concat(modifier.requires || [], modifier.requiresIfExists || []);\n      requires.forEach(function (dep) {\n        if (!visited.has(dep)) {\n          var depModifier = map.get(dep);\n\n          if (depModifier) {\n            sort(depModifier);\n          }\n        }\n      });\n      result.push(modifier);\n    }\n\n    modifiers.forEach(function (modifier) {\n      if (!visited.has(modifier.name)) {\n        // check for visited object\n        sort(modifier);\n      }\n    });\n    return result;\n  }\n\n  function orderModifiers(modifiers) {\n    // order based on dependencies\n    var orderedModifiers = order(modifiers); // order based on phase\n\n    return modifierPhases.reduce(function (acc, phase) {\n      return acc.concat(orderedModifiers.filter(function (modifier) {\n        return modifier.phase === phase;\n      }));\n    }, []);\n  }\n\n  function debounce(fn) {\n    var pending;\n    return function () {\n      if (!pending) {\n        pending = new Promise(function (resolve) {\n          Promise.resolve().then(function () {\n            pending = undefined;\n            resolve(fn());\n          });\n        });\n      }\n\n      return pending;\n    };\n  }\n\n  function mergeByName(modifiers) {\n    var merged = modifiers.reduce(function (merged, current) {\n      var existing = merged[current.name];\n      merged[current.name] = existing ? Object.assign({}, existing, current, {\n        options: Object.assign({}, existing.options, current.options),\n        data: Object.assign({}, existing.data, current.data)\n      }) : current;\n      return merged;\n    }, {}); // IE11 does not support Object.values\n\n    return Object.keys(merged).map(function (key) {\n      return merged[key];\n    });\n  }\n\n  var DEFAULT_OPTIONS = {\n    placement: 'bottom',\n    modifiers: [],\n    strategy: 'absolute'\n  };\n\n  function areValidElements() {\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    return !args.some(function (element) {\n      return !(element && typeof element.getBoundingClientRect === 'function');\n    });\n  }\n\n  function popperGenerator(generatorOptions) {\n    if (generatorOptions === void 0) {\n      generatorOptions = {};\n    }\n\n    var _generatorOptions = generatorOptions,\n        _generatorOptions$def = _generatorOptions.defaultModifiers,\n        defaultModifiers = _generatorOptions$def === void 0 ? [] : _generatorOptions$def,\n        _generatorOptions$def2 = _generatorOptions.defaultOptions,\n        defaultOptions = _generatorOptions$def2 === void 0 ? DEFAULT_OPTIONS : _generatorOptions$def2;\n    return function createPopper(reference, popper, options) {\n      if (options === void 0) {\n        options = defaultOptions;\n      }\n\n      var state = {\n        placement: 'bottom',\n        orderedModifiers: [],\n        options: Object.assign({}, DEFAULT_OPTIONS, defaultOptions),\n        modifiersData: {},\n        elements: {\n          reference: reference,\n          popper: popper\n        },\n        attributes: {},\n        styles: {}\n      };\n      var effectCleanupFns = [];\n      var isDestroyed = false;\n      var instance = {\n        state: state,\n        setOptions: function setOptions(options) {\n          cleanupModifierEffects();\n          state.options = Object.assign({}, defaultOptions, state.options, options);\n          state.scrollParents = {\n            reference: isElement(reference) ? listScrollParents(reference) : reference.contextElement ? listScrollParents(reference.contextElement) : [],\n            popper: listScrollParents(popper)\n          }; // Orders the modifiers based on their dependencies and `phase`\n          // properties\n\n          var orderedModifiers = orderModifiers(mergeByName([].concat(defaultModifiers, state.options.modifiers))); // Strip out disabled modifiers\n\n          state.orderedModifiers = orderedModifiers.filter(function (m) {\n            return m.enabled;\n          }); // Validate the provided modifiers so that the consumer will get warned\n\n          runModifierEffects();\n          return instance.update();\n        },\n        // Sync update – it will always be executed, even if not necessary. This\n        // is useful for low frequency updates where sync behavior simplifies the\n        // logic.\n        // For high frequency updates (e.g. `resize` and `scroll` events), always\n        // prefer the async Popper#update method\n        forceUpdate: function forceUpdate() {\n          if (isDestroyed) {\n            return;\n          }\n\n          var _state$elements = state.elements,\n              reference = _state$elements.reference,\n              popper = _state$elements.popper; // Don't proceed if `reference` or `popper` are not valid elements\n          // anymore\n\n          if (!areValidElements(reference, popper)) {\n\n            return;\n          } // Store the reference and popper rects to be read by modifiers\n\n\n          state.rects = {\n            reference: getCompositeRect(reference, getOffsetParent(popper), state.options.strategy === 'fixed'),\n            popper: getLayoutRect(popper)\n          }; // Modifiers have the ability to reset the current update cycle. The\n          // most common use case for this is the `flip` modifier changing the\n          // placement, which then needs to re-run all the modifiers, because the\n          // logic was previously ran for the previous placement and is therefore\n          // stale/incorrect\n\n          state.reset = false;\n          state.placement = state.options.placement; // On each update cycle, the `modifiersData` property for each modifier\n          // is filled with the initial data specified by the modifier. This means\n          // it doesn't persist and is fresh on each update.\n          // To ensure persistent data, use `${name}#persistent`\n\n          state.orderedModifiers.forEach(function (modifier) {\n            return state.modifiersData[modifier.name] = Object.assign({}, modifier.data);\n          });\n\n          for (var index = 0; index < state.orderedModifiers.length; index++) {\n\n            if (state.reset === true) {\n              state.reset = false;\n              index = -1;\n              continue;\n            }\n\n            var _state$orderedModifie = state.orderedModifiers[index],\n                fn = _state$orderedModifie.fn,\n                _state$orderedModifie2 = _state$orderedModifie.options,\n                _options = _state$orderedModifie2 === void 0 ? {} : _state$orderedModifie2,\n                name = _state$orderedModifie.name;\n\n            if (typeof fn === 'function') {\n              state = fn({\n                state: state,\n                options: _options,\n                name: name,\n                instance: instance\n              }) || state;\n            }\n          }\n        },\n        // Async and optimistically optimized update – it will not be executed if\n        // not necessary (debounced to run at most once-per-tick)\n        update: debounce(function () {\n          return new Promise(function (resolve) {\n            instance.forceUpdate();\n            resolve(state);\n          });\n        }),\n        destroy: function destroy() {\n          cleanupModifierEffects();\n          isDestroyed = true;\n        }\n      };\n\n      if (!areValidElements(reference, popper)) {\n\n        return instance;\n      }\n\n      instance.setOptions(options).then(function (state) {\n        if (!isDestroyed && options.onFirstUpdate) {\n          options.onFirstUpdate(state);\n        }\n      }); // Modifiers have the ability to execute arbitrary code before the first\n      // update cycle runs. They will be executed in the same order as the update\n      // cycle. This is useful when a modifier adds some persistent data that\n      // other modifiers need to use, but the modifier is run after the dependent\n      // one.\n\n      function runModifierEffects() {\n        state.orderedModifiers.forEach(function (_ref3) {\n          var name = _ref3.name,\n              _ref3$options = _ref3.options,\n              options = _ref3$options === void 0 ? {} : _ref3$options,\n              effect = _ref3.effect;\n\n          if (typeof effect === 'function') {\n            var cleanupFn = effect({\n              state: state,\n              name: name,\n              instance: instance,\n              options: options\n            });\n\n            var noopFn = function noopFn() {};\n\n            effectCleanupFns.push(cleanupFn || noopFn);\n          }\n        });\n      }\n\n      function cleanupModifierEffects() {\n        effectCleanupFns.forEach(function (fn) {\n          return fn();\n        });\n        effectCleanupFns = [];\n      }\n\n      return instance;\n    };\n  }\n  var createPopper$2 = /*#__PURE__*/popperGenerator(); // eslint-disable-next-line import/no-unused-modules\n\n  var defaultModifiers$1 = [eventListeners, popperOffsets$1, computeStyles$1, applyStyles$1];\n  var createPopper$1 = /*#__PURE__*/popperGenerator({\n    defaultModifiers: defaultModifiers$1\n  }); // eslint-disable-next-line import/no-unused-modules\n\n  var defaultModifiers = [eventListeners, popperOffsets$1, computeStyles$1, applyStyles$1, offset$1, flip$1, preventOverflow$1, arrow$1, hide$1];\n  var createPopper = /*#__PURE__*/popperGenerator({\n    defaultModifiers: defaultModifiers\n  }); // eslint-disable-next-line import/no-unused-modules\n\n  var Popper = /*#__PURE__*/Object.freeze({\n    __proto__: null,\n    popperGenerator: popperGenerator,\n    detectOverflow: detectOverflow,\n    createPopperBase: createPopper$2,\n    createPopper: createPopper,\n    createPopperLite: createPopper$1,\n    top: top,\n    bottom: bottom,\n    right: right,\n    left: left,\n    auto: auto,\n    basePlacements: basePlacements,\n    start: start,\n    end: end,\n    clippingParents: clippingParents,\n    viewport: viewport,\n    popper: popper,\n    reference: reference,\n    variationPlacements: variationPlacements,\n    placements: placements,\n    beforeRead: beforeRead,\n    read: read,\n    afterRead: afterRead,\n    beforeMain: beforeMain,\n    main: main,\n    afterMain: afterMain,\n    beforeWrite: beforeWrite,\n    write: write,\n    afterWrite: afterWrite,\n    modifierPhases: modifierPhases,\n    applyStyles: applyStyles$1,\n    arrow: arrow$1,\n    computeStyles: computeStyles$1,\n    eventListeners: eventListeners,\n    flip: flip$1,\n    hide: hide$1,\n    offset: offset$1,\n    popperOffsets: popperOffsets$1,\n    preventOverflow: preventOverflow$1\n  });\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): dropdown.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$8 = 'dropdown';\n  const DATA_KEY$7 = 'bs.dropdown';\n  const EVENT_KEY$7 = `.${DATA_KEY$7}`;\n  const DATA_API_KEY$4 = '.data-api';\n  const ESCAPE_KEY$2 = 'Escape';\n  const SPACE_KEY = 'Space';\n  const TAB_KEY = 'Tab';\n  const ARROW_UP_KEY = 'ArrowUp';\n  const ARROW_DOWN_KEY = 'ArrowDown';\n  const RIGHT_MOUSE_BUTTON = 2; // MouseEvent.button value for the secondary button, usually the right button\n\n  const REGEXP_KEYDOWN = new RegExp(`${ARROW_UP_KEY}|${ARROW_DOWN_KEY}|${ESCAPE_KEY$2}`);\n  const EVENT_HIDE$4 = `hide${EVENT_KEY$7}`;\n  const EVENT_HIDDEN$4 = `hidden${EVENT_KEY$7}`;\n  const EVENT_SHOW$4 = `show${EVENT_KEY$7}`;\n  const EVENT_SHOWN$4 = `shown${EVENT_KEY$7}`;\n  const EVENT_CLICK = `click${EVENT_KEY$7}`;\n  const EVENT_CLICK_DATA_API$3 = `click${EVENT_KEY$7}${DATA_API_KEY$4}`;\n  const EVENT_KEYDOWN_DATA_API = `keydown${EVENT_KEY$7}${DATA_API_KEY$4}`;\n  const EVENT_KEYUP_DATA_API = `keyup${EVENT_KEY$7}${DATA_API_KEY$4}`;\n  const CLASS_NAME_SHOW$7 = 'show';\n  const CLASS_NAME_DROPUP = 'dropup';\n  const CLASS_NAME_DROPEND = 'dropend';\n  const CLASS_NAME_DROPSTART = 'dropstart';\n  const CLASS_NAME_NAVBAR = 'navbar';\n  const SELECTOR_DATA_TOGGLE$3 = '[data-bs-toggle=\"dropdown\"]';\n  const SELECTOR_MENU = '.dropdown-menu';\n  const SELECTOR_NAVBAR_NAV = '.navbar-nav';\n  const SELECTOR_VISIBLE_ITEMS = '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)';\n  const PLACEMENT_TOP = isRTL() ? 'top-end' : 'top-start';\n  const PLACEMENT_TOPEND = isRTL() ? 'top-start' : 'top-end';\n  const PLACEMENT_BOTTOM = isRTL() ? 'bottom-end' : 'bottom-start';\n  const PLACEMENT_BOTTOMEND = isRTL() ? 'bottom-start' : 'bottom-end';\n  const PLACEMENT_RIGHT = isRTL() ? 'left-start' : 'right-start';\n  const PLACEMENT_LEFT = isRTL() ? 'right-start' : 'left-start';\n  const Default$7 = {\n    offset: [0, 2],\n    boundary: 'clippingParents',\n    reference: 'toggle',\n    display: 'dynamic',\n    popperConfig: null,\n    autoClose: true\n  };\n  const DefaultType$7 = {\n    offset: '(array|string|function)',\n    boundary: '(string|element)',\n    reference: '(string|element|object)',\n    display: 'string',\n    popperConfig: '(null|object|function)',\n    autoClose: '(boolean|string)'\n  };\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Dropdown extends BaseComponent {\n    constructor(element, config) {\n      super(element);\n      this._popper = null;\n      this._config = this._getConfig(config);\n      this._menu = this._getMenuElement();\n      this._inNavbar = this._detectNavbar();\n\n      this._addEventListeners();\n    } // Getters\n\n\n    static get Default() {\n      return Default$7;\n    }\n\n    static get DefaultType() {\n      return DefaultType$7;\n    }\n\n    static get NAME() {\n      return NAME$8;\n    } // Public\n\n\n    toggle() {\n      if (isDisabled(this._element)) {\n        return;\n      }\n\n      const isActive = this._element.classList.contains(CLASS_NAME_SHOW$7);\n\n      if (isActive) {\n        this.hide();\n        return;\n      }\n\n      this.show();\n    }\n\n    show() {\n      if (isDisabled(this._element) || this._menu.classList.contains(CLASS_NAME_SHOW$7)) {\n        return;\n      }\n\n      const parent = Dropdown.getParentFromElement(this._element);\n      const relatedTarget = {\n        relatedTarget: this._element\n      };\n      const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$4, relatedTarget);\n\n      if (showEvent.defaultPrevented) {\n        return;\n      } // Totally disable Popper for Dropdowns in Navbar\n\n\n      if (this._inNavbar) {\n        Manipulator.setDataAttribute(this._menu, 'popper', 'none');\n      } else {\n        if (typeof Popper === 'undefined') {\n          throw new TypeError('Bootstrap\\'s dropdowns require Popper (https://popper.js.org)');\n        }\n\n        let referenceElement = this._element;\n\n        if (this._config.reference === 'parent') {\n          referenceElement = parent;\n        } else if (isElement$1(this._config.reference)) {\n          referenceElement = getElement(this._config.reference);\n        } else if (typeof this._config.reference === 'object') {\n          referenceElement = this._config.reference;\n        }\n\n        const popperConfig = this._getPopperConfig();\n\n        const isDisplayStatic = popperConfig.modifiers.find(modifier => modifier.name === 'applyStyles' && modifier.enabled === false);\n        this._popper = createPopper(referenceElement, this._menu, popperConfig);\n\n        if (isDisplayStatic) {\n          Manipulator.setDataAttribute(this._menu, 'popper', 'static');\n        }\n      } // If this is a touch-enabled device we add extra\n      // empty mouseover listeners to the body's immediate children;\n      // only needed because of broken event delegation on iOS\n      // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n\n\n      if ('ontouchstart' in document.documentElement && !parent.closest(SELECTOR_NAVBAR_NAV)) {\n        [].concat(...document.body.children).forEach(elem => EventHandler.on(elem, 'mouseover', noop));\n      }\n\n      this._element.focus();\n\n      this._element.setAttribute('aria-expanded', true);\n\n      this._menu.classList.toggle(CLASS_NAME_SHOW$7);\n\n      this._element.classList.toggle(CLASS_NAME_SHOW$7);\n\n      EventHandler.trigger(this._element, EVENT_SHOWN$4, relatedTarget);\n    }\n\n    hide() {\n      if (isDisabled(this._element) || !this._menu.classList.contains(CLASS_NAME_SHOW$7)) {\n        return;\n      }\n\n      const relatedTarget = {\n        relatedTarget: this._element\n      };\n\n      this._completeHide(relatedTarget);\n    }\n\n    dispose() {\n      if (this._popper) {\n        this._popper.destroy();\n      }\n\n      super.dispose();\n    }\n\n    update() {\n      this._inNavbar = this._detectNavbar();\n\n      if (this._popper) {\n        this._popper.update();\n      }\n    } // Private\n\n\n    _addEventListeners() {\n      EventHandler.on(this._element, EVENT_CLICK, event => {\n        event.preventDefault();\n        this.toggle();\n      });\n    }\n\n    _completeHide(relatedTarget) {\n      const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$4, relatedTarget);\n\n      if (hideEvent.defaultPrevented) {\n        return;\n      } // If this is a touch-enabled device we remove the extra\n      // empty mouseover listeners we added for iOS support\n\n\n      if ('ontouchstart' in document.documentElement) {\n        [].concat(...document.body.children).forEach(elem => EventHandler.off(elem, 'mouseover', noop));\n      }\n\n      if (this._popper) {\n        this._popper.destroy();\n      }\n\n      this._menu.classList.remove(CLASS_NAME_SHOW$7);\n\n      this._element.classList.remove(CLASS_NAME_SHOW$7);\n\n      this._element.setAttribute('aria-expanded', 'false');\n\n      Manipulator.removeDataAttribute(this._menu, 'popper');\n      EventHandler.trigger(this._element, EVENT_HIDDEN$4, relatedTarget);\n    }\n\n    _getConfig(config) {\n      config = { ...this.constructor.Default,\n        ...Manipulator.getDataAttributes(this._element),\n        ...config\n      };\n      typeCheckConfig(NAME$8, config, this.constructor.DefaultType);\n\n      if (typeof config.reference === 'object' && !isElement$1(config.reference) && typeof config.reference.getBoundingClientRect !== 'function') {\n        // Popper virtual elements require a getBoundingClientRect method\n        throw new TypeError(`${NAME$8.toUpperCase()}: Option \"reference\" provided type \"object\" without a required \"getBoundingClientRect\" method.`);\n      }\n\n      return config;\n    }\n\n    _getMenuElement() {\n      return SelectorEngine.next(this._element, SELECTOR_MENU)[0];\n    }\n\n    _getPlacement() {\n      const parentDropdown = this._element.parentNode;\n\n      if (parentDropdown.classList.contains(CLASS_NAME_DROPEND)) {\n        return PLACEMENT_RIGHT;\n      }\n\n      if (parentDropdown.classList.contains(CLASS_NAME_DROPSTART)) {\n        return PLACEMENT_LEFT;\n      } // We need to trim the value because custom properties can also include spaces\n\n\n      const isEnd = getComputedStyle(this._menu).getPropertyValue('--bs-position').trim() === 'end';\n\n      if (parentDropdown.classList.contains(CLASS_NAME_DROPUP)) {\n        return isEnd ? PLACEMENT_TOPEND : PLACEMENT_TOP;\n      }\n\n      return isEnd ? PLACEMENT_BOTTOMEND : PLACEMENT_BOTTOM;\n    }\n\n    _detectNavbar() {\n      return this._element.closest(`.${CLASS_NAME_NAVBAR}`) !== null;\n    }\n\n    _getOffset() {\n      const {\n        offset\n      } = this._config;\n\n      if (typeof offset === 'string') {\n        return offset.split(',').map(val => Number.parseInt(val, 10));\n      }\n\n      if (typeof offset === 'function') {\n        return popperData => offset(popperData, this._element);\n      }\n\n      return offset;\n    }\n\n    _getPopperConfig() {\n      const defaultBsPopperConfig = {\n        placement: this._getPlacement(),\n        modifiers: [{\n          name: 'preventOverflow',\n          options: {\n            boundary: this._config.boundary\n          }\n        }, {\n          name: 'offset',\n          options: {\n            offset: this._getOffset()\n          }\n        }]\n      }; // Disable Popper if we have a static display\n\n      if (this._config.display === 'static') {\n        defaultBsPopperConfig.modifiers = [{\n          name: 'applyStyles',\n          enabled: false\n        }];\n      }\n\n      return { ...defaultBsPopperConfig,\n        ...(typeof this._config.popperConfig === 'function' ? this._config.popperConfig(defaultBsPopperConfig) : this._config.popperConfig)\n      };\n    }\n\n    _selectMenuItem({\n      key,\n      target\n    }) {\n      const items = SelectorEngine.find(SELECTOR_VISIBLE_ITEMS, this._menu).filter(isVisible);\n\n      if (!items.length) {\n        return;\n      } // if target isn't included in items (e.g. when expanding the dropdown)\n      // allow cycling to get the last item in case key equals ARROW_UP_KEY\n\n\n      getNextActiveElement(items, target, key === ARROW_DOWN_KEY, !items.includes(target)).focus();\n    } // Static\n\n\n    static dropdownInterface(element, config) {\n      const data = Dropdown.getOrCreateInstance(element, config);\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config]();\n      }\n    }\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        Dropdown.dropdownInterface(this, config);\n      });\n    }\n\n    static clearMenus(event) {\n      if (event && (event.button === RIGHT_MOUSE_BUTTON || event.type === 'keyup' && event.key !== TAB_KEY)) {\n        return;\n      }\n\n      const toggles = SelectorEngine.find(SELECTOR_DATA_TOGGLE$3);\n\n      for (let i = 0, len = toggles.length; i < len; i++) {\n        const context = Dropdown.getInstance(toggles[i]);\n\n        if (!context || context._config.autoClose === false) {\n          continue;\n        }\n\n        if (!context._element.classList.contains(CLASS_NAME_SHOW$7)) {\n          continue;\n        }\n\n        const relatedTarget = {\n          relatedTarget: context._element\n        };\n\n        if (event) {\n          const composedPath = event.composedPath();\n          const isMenuTarget = composedPath.includes(context._menu);\n\n          if (composedPath.includes(context._element) || context._config.autoClose === 'inside' && !isMenuTarget || context._config.autoClose === 'outside' && isMenuTarget) {\n            continue;\n          } // Tab navigation through the dropdown menu or events from contained inputs shouldn't close the menu\n\n\n          if (context._menu.contains(event.target) && (event.type === 'keyup' && event.key === TAB_KEY || /input|select|option|textarea|form/i.test(event.target.tagName))) {\n            continue;\n          }\n\n          if (event.type === 'click') {\n            relatedTarget.clickEvent = event;\n          }\n        }\n\n        context._completeHide(relatedTarget);\n      }\n    }\n\n    static getParentFromElement(element) {\n      return getElementFromSelector(element) || element.parentNode;\n    }\n\n    static dataApiKeydownHandler(event) {\n      // If not input/textarea:\n      //  - And not a key in REGEXP_KEYDOWN => not a dropdown command\n      // If input/textarea:\n      //  - If space key => not a dropdown command\n      //  - If key is other than escape\n      //    - If key is not up or down => not a dropdown command\n      //    - If trigger inside the menu => not a dropdown command\n      if (/input|textarea/i.test(event.target.tagName) ? event.key === SPACE_KEY || event.key !== ESCAPE_KEY$2 && (event.key !== ARROW_DOWN_KEY && event.key !== ARROW_UP_KEY || event.target.closest(SELECTOR_MENU)) : !REGEXP_KEYDOWN.test(event.key)) {\n        return;\n      }\n\n      const isActive = this.classList.contains(CLASS_NAME_SHOW$7);\n\n      if (!isActive && event.key === ESCAPE_KEY$2) {\n        return;\n      }\n\n      event.preventDefault();\n      event.stopPropagation();\n\n      if (isDisabled(this)) {\n        return;\n      }\n\n      const getToggleButton = () => this.matches(SELECTOR_DATA_TOGGLE$3) ? this : SelectorEngine.prev(this, SELECTOR_DATA_TOGGLE$3)[0];\n\n      if (event.key === ESCAPE_KEY$2) {\n        getToggleButton().focus();\n        Dropdown.clearMenus();\n        return;\n      }\n\n      if (event.key === ARROW_UP_KEY || event.key === ARROW_DOWN_KEY) {\n        if (!isActive) {\n          getToggleButton().click();\n        }\n\n        Dropdown.getInstance(getToggleButton())._selectMenuItem(event);\n\n        return;\n      }\n\n      if (!isActive || event.key === SPACE_KEY) {\n        Dropdown.clearMenus();\n      }\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_DATA_TOGGLE$3, Dropdown.dataApiKeydownHandler);\n  EventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown.dataApiKeydownHandler);\n  EventHandler.on(document, EVENT_CLICK_DATA_API$3, Dropdown.clearMenus);\n  EventHandler.on(document, EVENT_KEYUP_DATA_API, Dropdown.clearMenus);\n  EventHandler.on(document, EVENT_CLICK_DATA_API$3, SELECTOR_DATA_TOGGLE$3, function (event) {\n    event.preventDefault();\n    Dropdown.dropdownInterface(this);\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Dropdown to jQuery only if jQuery is present\n   */\n\n  defineJQueryPlugin(Dropdown);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): util/scrollBar.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  const SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top';\n  const SELECTOR_STICKY_CONTENT = '.sticky-top';\n\n  class ScrollBarHelper {\n    constructor() {\n      this._element = document.body;\n    }\n\n    getWidth() {\n      // https://developer.mozilla.org/en-US/docs/Web/API/Window/innerWidth#usage_notes\n      const documentWidth = document.documentElement.clientWidth;\n      return Math.abs(window.innerWidth - documentWidth);\n    }\n\n    hide() {\n      const width = this.getWidth();\n\n      this._disableOverFlow(); // give padding to element to balance the hidden scrollbar width\n\n\n      this._setElementAttributes(this._element, 'paddingRight', calculatedValue => calculatedValue + width); // trick: We adjust positive paddingRight and negative marginRight to sticky-top elements to keep showing fullwidth\n\n\n      this._setElementAttributes(SELECTOR_FIXED_CONTENT, 'paddingRight', calculatedValue => calculatedValue + width);\n\n      this._setElementAttributes(SELECTOR_STICKY_CONTENT, 'marginRight', calculatedValue => calculatedValue - width);\n    }\n\n    _disableOverFlow() {\n      this._saveInitialAttribute(this._element, 'overflow');\n\n      this._element.style.overflow = 'hidden';\n    }\n\n    _setElementAttributes(selector, styleProp, callback) {\n      const scrollbarWidth = this.getWidth();\n\n      const manipulationCallBack = element => {\n        if (element !== this._element && window.innerWidth > element.clientWidth + scrollbarWidth) {\n          return;\n        }\n\n        this._saveInitialAttribute(element, styleProp);\n\n        const calculatedValue = window.getComputedStyle(element)[styleProp];\n        element.style[styleProp] = `${callback(Number.parseFloat(calculatedValue))}px`;\n      };\n\n      this._applyManipulationCallback(selector, manipulationCallBack);\n    }\n\n    reset() {\n      this._resetElementAttributes(this._element, 'overflow');\n\n      this._resetElementAttributes(this._element, 'paddingRight');\n\n      this._resetElementAttributes(SELECTOR_FIXED_CONTENT, 'paddingRight');\n\n      this._resetElementAttributes(SELECTOR_STICKY_CONTENT, 'marginRight');\n    }\n\n    _saveInitialAttribute(element, styleProp) {\n      const actualValue = element.style[styleProp];\n\n      if (actualValue) {\n        Manipulator.setDataAttribute(element, styleProp, actualValue);\n      }\n    }\n\n    _resetElementAttributes(selector, styleProp) {\n      const manipulationCallBack = element => {\n        const value = Manipulator.getDataAttribute(element, styleProp);\n\n        if (typeof value === 'undefined') {\n          element.style.removeProperty(styleProp);\n        } else {\n          Manipulator.removeDataAttribute(element, styleProp);\n          element.style[styleProp] = value;\n        }\n      };\n\n      this._applyManipulationCallback(selector, manipulationCallBack);\n    }\n\n    _applyManipulationCallback(selector, callBack) {\n      if (isElement$1(selector)) {\n        callBack(selector);\n      } else {\n        SelectorEngine.find(selector, this._element).forEach(callBack);\n      }\n    }\n\n    isOverflowing() {\n      return this.getWidth() > 0;\n    }\n\n  }\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): util/backdrop.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  const Default$6 = {\n    isVisible: true,\n    // if false, we use the backdrop helper without adding any element to the dom\n    isAnimated: false,\n    rootElement: 'body',\n    // give the choice to place backdrop under different elements\n    clickCallback: null\n  };\n  const DefaultType$6 = {\n    isVisible: 'boolean',\n    isAnimated: 'boolean',\n    rootElement: '(element|string)',\n    clickCallback: '(function|null)'\n  };\n  const NAME$7 = 'backdrop';\n  const CLASS_NAME_BACKDROP = 'modal-backdrop';\n  const CLASS_NAME_FADE$5 = 'fade';\n  const CLASS_NAME_SHOW$6 = 'show';\n  const EVENT_MOUSEDOWN = `mousedown.bs.${NAME$7}`;\n\n  class Backdrop {\n    constructor(config) {\n      this._config = this._getConfig(config);\n      this._isAppended = false;\n      this._element = null;\n    }\n\n    show(callback) {\n      if (!this._config.isVisible) {\n        execute(callback);\n        return;\n      }\n\n      this._append();\n\n      if (this._config.isAnimated) {\n        reflow(this._getElement());\n      }\n\n      this._getElement().classList.add(CLASS_NAME_SHOW$6);\n\n      this._emulateAnimation(() => {\n        execute(callback);\n      });\n    }\n\n    hide(callback) {\n      if (!this._config.isVisible) {\n        execute(callback);\n        return;\n      }\n\n      this._getElement().classList.remove(CLASS_NAME_SHOW$6);\n\n      this._emulateAnimation(() => {\n        this.dispose();\n        execute(callback);\n      });\n    } // Private\n\n\n    _getElement() {\n      if (!this._element) {\n        const backdrop = document.createElement('div');\n        backdrop.className = CLASS_NAME_BACKDROP;\n\n        if (this._config.isAnimated) {\n          backdrop.classList.add(CLASS_NAME_FADE$5);\n        }\n\n        this._element = backdrop;\n      }\n\n      return this._element;\n    }\n\n    _getConfig(config) {\n      config = { ...Default$6,\n        ...(typeof config === 'object' ? config : {})\n      }; // use getElement() with the default \"body\" to get a fresh Element on each instantiation\n\n      config.rootElement = getElement(config.rootElement);\n      typeCheckConfig(NAME$7, config, DefaultType$6);\n      return config;\n    }\n\n    _append() {\n      if (this._isAppended) {\n        return;\n      }\n\n      this._config.rootElement.appendChild(this._getElement());\n\n      EventHandler.on(this._getElement(), EVENT_MOUSEDOWN, () => {\n        execute(this._config.clickCallback);\n      });\n      this._isAppended = true;\n    }\n\n    dispose() {\n      if (!this._isAppended) {\n        return;\n      }\n\n      EventHandler.off(this._element, EVENT_MOUSEDOWN);\n\n      this._element.remove();\n\n      this._isAppended = false;\n    }\n\n    _emulateAnimation(callback) {\n      executeAfterTransition(callback, this._getElement(), this._config.isAnimated);\n    }\n\n  }\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): modal.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$6 = 'modal';\n  const DATA_KEY$6 = 'bs.modal';\n  const EVENT_KEY$6 = `.${DATA_KEY$6}`;\n  const DATA_API_KEY$3 = '.data-api';\n  const ESCAPE_KEY$1 = 'Escape';\n  const Default$5 = {\n    backdrop: true,\n    keyboard: true,\n    focus: true\n  };\n  const DefaultType$5 = {\n    backdrop: '(boolean|string)',\n    keyboard: 'boolean',\n    focus: 'boolean'\n  };\n  const EVENT_HIDE$3 = `hide${EVENT_KEY$6}`;\n  const EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY$6}`;\n  const EVENT_HIDDEN$3 = `hidden${EVENT_KEY$6}`;\n  const EVENT_SHOW$3 = `show${EVENT_KEY$6}`;\n  const EVENT_SHOWN$3 = `shown${EVENT_KEY$6}`;\n  const EVENT_FOCUSIN$2 = `focusin${EVENT_KEY$6}`;\n  const EVENT_RESIZE = `resize${EVENT_KEY$6}`;\n  const EVENT_CLICK_DISMISS$2 = `click.dismiss${EVENT_KEY$6}`;\n  const EVENT_KEYDOWN_DISMISS$1 = `keydown.dismiss${EVENT_KEY$6}`;\n  const EVENT_MOUSEUP_DISMISS = `mouseup.dismiss${EVENT_KEY$6}`;\n  const EVENT_MOUSEDOWN_DISMISS = `mousedown.dismiss${EVENT_KEY$6}`;\n  const EVENT_CLICK_DATA_API$2 = `click${EVENT_KEY$6}${DATA_API_KEY$3}`;\n  const CLASS_NAME_OPEN = 'modal-open';\n  const CLASS_NAME_FADE$4 = 'fade';\n  const CLASS_NAME_SHOW$5 = 'show';\n  const CLASS_NAME_STATIC = 'modal-static';\n  const SELECTOR_DIALOG = '.modal-dialog';\n  const SELECTOR_MODAL_BODY = '.modal-body';\n  const SELECTOR_DATA_TOGGLE$2 = '[data-bs-toggle=\"modal\"]';\n  const SELECTOR_DATA_DISMISS$2 = '[data-bs-dismiss=\"modal\"]';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Modal extends BaseComponent {\n    constructor(element, config) {\n      super(element);\n      this._config = this._getConfig(config);\n      this._dialog = SelectorEngine.findOne(SELECTOR_DIALOG, this._element);\n      this._backdrop = this._initializeBackDrop();\n      this._isShown = false;\n      this._ignoreBackdropClick = false;\n      this._isTransitioning = false;\n      this._scrollBar = new ScrollBarHelper();\n    } // Getters\n\n\n    static get Default() {\n      return Default$5;\n    }\n\n    static get NAME() {\n      return NAME$6;\n    } // Public\n\n\n    toggle(relatedTarget) {\n      return this._isShown ? this.hide() : this.show(relatedTarget);\n    }\n\n    show(relatedTarget) {\n      if (this._isShown || this._isTransitioning) {\n        return;\n      }\n\n      const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$3, {\n        relatedTarget\n      });\n\n      if (showEvent.defaultPrevented) {\n        return;\n      }\n\n      this._isShown = true;\n\n      if (this._isAnimated()) {\n        this._isTransitioning = true;\n      }\n\n      this._scrollBar.hide();\n\n      document.body.classList.add(CLASS_NAME_OPEN);\n\n      this._adjustDialog();\n\n      this._setEscapeEvent();\n\n      this._setResizeEvent();\n\n      EventHandler.on(this._element, EVENT_CLICK_DISMISS$2, SELECTOR_DATA_DISMISS$2, event => this.hide(event));\n      EventHandler.on(this._dialog, EVENT_MOUSEDOWN_DISMISS, () => {\n        EventHandler.one(this._element, EVENT_MOUSEUP_DISMISS, event => {\n          if (event.target === this._element) {\n            this._ignoreBackdropClick = true;\n          }\n        });\n      });\n\n      this._showBackdrop(() => this._showElement(relatedTarget));\n    }\n\n    hide(event) {\n      if (event && ['A', 'AREA'].includes(event.target.tagName)) {\n        event.preventDefault();\n      }\n\n      if (!this._isShown || this._isTransitioning) {\n        return;\n      }\n\n      const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$3);\n\n      if (hideEvent.defaultPrevented) {\n        return;\n      }\n\n      this._isShown = false;\n\n      const isAnimated = this._isAnimated();\n\n      if (isAnimated) {\n        this._isTransitioning = true;\n      }\n\n      this._setEscapeEvent();\n\n      this._setResizeEvent();\n\n      EventHandler.off(document, EVENT_FOCUSIN$2);\n\n      this._element.classList.remove(CLASS_NAME_SHOW$5);\n\n      EventHandler.off(this._element, EVENT_CLICK_DISMISS$2);\n      EventHandler.off(this._dialog, EVENT_MOUSEDOWN_DISMISS);\n\n      this._queueCallback(() => this._hideModal(), this._element, isAnimated);\n    }\n\n    dispose() {\n      [window, this._dialog].forEach(htmlElement => EventHandler.off(htmlElement, EVENT_KEY$6));\n\n      this._backdrop.dispose();\n\n      super.dispose();\n      /**\n       * `document` has 2 events `EVENT_FOCUSIN` and `EVENT_CLICK_DATA_API`\n       * Do not move `document` in `htmlElements` array\n       * It will remove `EVENT_CLICK_DATA_API` event that should remain\n       */\n\n      EventHandler.off(document, EVENT_FOCUSIN$2);\n    }\n\n    handleUpdate() {\n      this._adjustDialog();\n    } // Private\n\n\n    _initializeBackDrop() {\n      return new Backdrop({\n        isVisible: Boolean(this._config.backdrop),\n        // 'static' option will be translated to true, and booleans will keep their value\n        isAnimated: this._isAnimated()\n      });\n    }\n\n    _getConfig(config) {\n      config = { ...Default$5,\n        ...Manipulator.getDataAttributes(this._element),\n        ...(typeof config === 'object' ? config : {})\n      };\n      typeCheckConfig(NAME$6, config, DefaultType$5);\n      return config;\n    }\n\n    _showElement(relatedTarget) {\n      const isAnimated = this._isAnimated();\n\n      const modalBody = SelectorEngine.findOne(SELECTOR_MODAL_BODY, this._dialog);\n\n      if (!this._element.parentNode || this._element.parentNode.nodeType !== Node.ELEMENT_NODE) {\n        // Don't move modal's DOM position\n        document.body.appendChild(this._element);\n      }\n\n      this._element.style.display = 'block';\n\n      this._element.removeAttribute('aria-hidden');\n\n      this._element.setAttribute('aria-modal', true);\n\n      this._element.setAttribute('role', 'dialog');\n\n      this._element.scrollTop = 0;\n\n      if (modalBody) {\n        modalBody.scrollTop = 0;\n      }\n\n      if (isAnimated) {\n        reflow(this._element);\n      }\n\n      this._element.classList.add(CLASS_NAME_SHOW$5);\n\n      if (this._config.focus) {\n        this._enforceFocus();\n      }\n\n      const transitionComplete = () => {\n        if (this._config.focus) {\n          this._element.focus();\n        }\n\n        this._isTransitioning = false;\n        EventHandler.trigger(this._element, EVENT_SHOWN$3, {\n          relatedTarget\n        });\n      };\n\n      this._queueCallback(transitionComplete, this._dialog, isAnimated);\n    }\n\n    _enforceFocus() {\n      EventHandler.off(document, EVENT_FOCUSIN$2); // guard against infinite focus loop\n\n      EventHandler.on(document, EVENT_FOCUSIN$2, event => {\n        if (document !== event.target && this._element !== event.target && !this._element.contains(event.target)) {\n          this._element.focus();\n        }\n      });\n    }\n\n    _setEscapeEvent() {\n      if (this._isShown) {\n        EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS$1, event => {\n          if (this._config.keyboard && event.key === ESCAPE_KEY$1) {\n            event.preventDefault();\n            this.hide();\n          } else if (!this._config.keyboard && event.key === ESCAPE_KEY$1) {\n            this._triggerBackdropTransition();\n          }\n        });\n      } else {\n        EventHandler.off(this._element, EVENT_KEYDOWN_DISMISS$1);\n      }\n    }\n\n    _setResizeEvent() {\n      if (this._isShown) {\n        EventHandler.on(window, EVENT_RESIZE, () => this._adjustDialog());\n      } else {\n        EventHandler.off(window, EVENT_RESIZE);\n      }\n    }\n\n    _hideModal() {\n      this._element.style.display = 'none';\n\n      this._element.setAttribute('aria-hidden', true);\n\n      this._element.removeAttribute('aria-modal');\n\n      this._element.removeAttribute('role');\n\n      this._isTransitioning = false;\n\n      this._backdrop.hide(() => {\n        document.body.classList.remove(CLASS_NAME_OPEN);\n\n        this._resetAdjustments();\n\n        this._scrollBar.reset();\n\n        EventHandler.trigger(this._element, EVENT_HIDDEN$3);\n      });\n    }\n\n    _showBackdrop(callback) {\n      EventHandler.on(this._element, EVENT_CLICK_DISMISS$2, event => {\n        if (this._ignoreBackdropClick) {\n          this._ignoreBackdropClick = false;\n          return;\n        }\n\n        if (event.target !== event.currentTarget) {\n          return;\n        }\n\n        if (this._config.backdrop === true) {\n          this.hide();\n        } else if (this._config.backdrop === 'static') {\n          this._triggerBackdropTransition();\n        }\n      });\n\n      this._backdrop.show(callback);\n    }\n\n    _isAnimated() {\n      return this._element.classList.contains(CLASS_NAME_FADE$4);\n    }\n\n    _triggerBackdropTransition() {\n      const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED);\n\n      if (hideEvent.defaultPrevented) {\n        return;\n      }\n\n      const {\n        classList,\n        scrollHeight,\n        style\n      } = this._element;\n      const isModalOverflowing = scrollHeight > document.documentElement.clientHeight; // return if the following background transition hasn't yet completed\n\n      if (!isModalOverflowing && style.overflowY === 'hidden' || classList.contains(CLASS_NAME_STATIC)) {\n        return;\n      }\n\n      if (!isModalOverflowing) {\n        style.overflowY = 'hidden';\n      }\n\n      classList.add(CLASS_NAME_STATIC);\n\n      this._queueCallback(() => {\n        classList.remove(CLASS_NAME_STATIC);\n\n        if (!isModalOverflowing) {\n          this._queueCallback(() => {\n            style.overflowY = '';\n          }, this._dialog);\n        }\n      }, this._dialog);\n\n      this._element.focus();\n    } // ----------------------------------------------------------------------\n    // the following methods are used to handle overflowing modals\n    // ----------------------------------------------------------------------\n\n\n    _adjustDialog() {\n      const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;\n\n      const scrollbarWidth = this._scrollBar.getWidth();\n\n      const isBodyOverflowing = scrollbarWidth > 0;\n\n      if (!isBodyOverflowing && isModalOverflowing && !isRTL() || isBodyOverflowing && !isModalOverflowing && isRTL()) {\n        this._element.style.paddingLeft = `${scrollbarWidth}px`;\n      }\n\n      if (isBodyOverflowing && !isModalOverflowing && !isRTL() || !isBodyOverflowing && isModalOverflowing && isRTL()) {\n        this._element.style.paddingRight = `${scrollbarWidth}px`;\n      }\n    }\n\n    _resetAdjustments() {\n      this._element.style.paddingLeft = '';\n      this._element.style.paddingRight = '';\n    } // Static\n\n\n    static jQueryInterface(config, relatedTarget) {\n      return this.each(function () {\n        const data = Modal.getOrCreateInstance(this, config);\n\n        if (typeof config !== 'string') {\n          return;\n        }\n\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config](relatedTarget);\n      });\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(document, EVENT_CLICK_DATA_API$2, SELECTOR_DATA_TOGGLE$2, function (event) {\n    const target = getElementFromSelector(this);\n\n    if (['A', 'AREA'].includes(this.tagName)) {\n      event.preventDefault();\n    }\n\n    EventHandler.one(target, EVENT_SHOW$3, showEvent => {\n      if (showEvent.defaultPrevented) {\n        // only register focus restorer if modal will actually get shown\n        return;\n      }\n\n      EventHandler.one(target, EVENT_HIDDEN$3, () => {\n        if (isVisible(this)) {\n          this.focus();\n        }\n      });\n    });\n    const data = Modal.getOrCreateInstance(target);\n    data.toggle(this);\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Modal to jQuery only if jQuery is present\n   */\n\n  defineJQueryPlugin(Modal);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): offcanvas.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$5 = 'offcanvas';\n  const DATA_KEY$5 = 'bs.offcanvas';\n  const EVENT_KEY$5 = `.${DATA_KEY$5}`;\n  const DATA_API_KEY$2 = '.data-api';\n  const EVENT_LOAD_DATA_API$1 = `load${EVENT_KEY$5}${DATA_API_KEY$2}`;\n  const ESCAPE_KEY = 'Escape';\n  const Default$4 = {\n    backdrop: true,\n    keyboard: true,\n    scroll: false\n  };\n  const DefaultType$4 = {\n    backdrop: 'boolean',\n    keyboard: 'boolean',\n    scroll: 'boolean'\n  };\n  const CLASS_NAME_SHOW$4 = 'show';\n  const OPEN_SELECTOR = '.offcanvas.show';\n  const EVENT_SHOW$2 = `show${EVENT_KEY$5}`;\n  const EVENT_SHOWN$2 = `shown${EVENT_KEY$5}`;\n  const EVENT_HIDE$2 = `hide${EVENT_KEY$5}`;\n  const EVENT_HIDDEN$2 = `hidden${EVENT_KEY$5}`;\n  const EVENT_FOCUSIN$1 = `focusin${EVENT_KEY$5}`;\n  const EVENT_CLICK_DATA_API$1 = `click${EVENT_KEY$5}${DATA_API_KEY$2}`;\n  const EVENT_CLICK_DISMISS$1 = `click.dismiss${EVENT_KEY$5}`;\n  const EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY$5}`;\n  const SELECTOR_DATA_DISMISS$1 = '[data-bs-dismiss=\"offcanvas\"]';\n  const SELECTOR_DATA_TOGGLE$1 = '[data-bs-toggle=\"offcanvas\"]';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Offcanvas extends BaseComponent {\n    constructor(element, config) {\n      super(element);\n      this._config = this._getConfig(config);\n      this._isShown = false;\n      this._backdrop = this._initializeBackDrop();\n\n      this._addEventListeners();\n    } // Getters\n\n\n    static get NAME() {\n      return NAME$5;\n    }\n\n    static get Default() {\n      return Default$4;\n    } // Public\n\n\n    toggle(relatedTarget) {\n      return this._isShown ? this.hide() : this.show(relatedTarget);\n    }\n\n    show(relatedTarget) {\n      if (this._isShown) {\n        return;\n      }\n\n      const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$2, {\n        relatedTarget\n      });\n\n      if (showEvent.defaultPrevented) {\n        return;\n      }\n\n      this._isShown = true;\n      this._element.style.visibility = 'visible';\n\n      this._backdrop.show();\n\n      if (!this._config.scroll) {\n        new ScrollBarHelper().hide();\n\n        this._enforceFocusOnElement(this._element);\n      }\n\n      this._element.removeAttribute('aria-hidden');\n\n      this._element.setAttribute('aria-modal', true);\n\n      this._element.setAttribute('role', 'dialog');\n\n      this._element.classList.add(CLASS_NAME_SHOW$4);\n\n      const completeCallBack = () => {\n        EventHandler.trigger(this._element, EVENT_SHOWN$2, {\n          relatedTarget\n        });\n      };\n\n      this._queueCallback(completeCallBack, this._element, true);\n    }\n\n    hide() {\n      if (!this._isShown) {\n        return;\n      }\n\n      const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$2);\n\n      if (hideEvent.defaultPrevented) {\n        return;\n      }\n\n      EventHandler.off(document, EVENT_FOCUSIN$1);\n\n      this._element.blur();\n\n      this._isShown = false;\n\n      this._element.classList.remove(CLASS_NAME_SHOW$4);\n\n      this._backdrop.hide();\n\n      const completeCallback = () => {\n        this._element.setAttribute('aria-hidden', true);\n\n        this._element.removeAttribute('aria-modal');\n\n        this._element.removeAttribute('role');\n\n        this._element.style.visibility = 'hidden';\n\n        if (!this._config.scroll) {\n          new ScrollBarHelper().reset();\n        }\n\n        EventHandler.trigger(this._element, EVENT_HIDDEN$2);\n      };\n\n      this._queueCallback(completeCallback, this._element, true);\n    }\n\n    dispose() {\n      this._backdrop.dispose();\n\n      super.dispose();\n      EventHandler.off(document, EVENT_FOCUSIN$1);\n    } // Private\n\n\n    _getConfig(config) {\n      config = { ...Default$4,\n        ...Manipulator.getDataAttributes(this._element),\n        ...(typeof config === 'object' ? config : {})\n      };\n      typeCheckConfig(NAME$5, config, DefaultType$4);\n      return config;\n    }\n\n    _initializeBackDrop() {\n      return new Backdrop({\n        isVisible: this._config.backdrop,\n        isAnimated: true,\n        rootElement: this._element.parentNode,\n        clickCallback: () => this.hide()\n      });\n    }\n\n    _enforceFocusOnElement(element) {\n      EventHandler.off(document, EVENT_FOCUSIN$1); // guard against infinite focus loop\n\n      EventHandler.on(document, EVENT_FOCUSIN$1, event => {\n        if (document !== event.target && element !== event.target && !element.contains(event.target)) {\n          element.focus();\n        }\n      });\n      element.focus();\n    }\n\n    _addEventListeners() {\n      EventHandler.on(this._element, EVENT_CLICK_DISMISS$1, SELECTOR_DATA_DISMISS$1, () => this.hide());\n      EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS, event => {\n        if (this._config.keyboard && event.key === ESCAPE_KEY) {\n          this.hide();\n        }\n      });\n    } // Static\n\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = Offcanvas.getOrCreateInstance(this, config);\n\n        if (typeof config !== 'string') {\n          return;\n        }\n\n        if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config](this);\n      });\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(document, EVENT_CLICK_DATA_API$1, SELECTOR_DATA_TOGGLE$1, function (event) {\n    const target = getElementFromSelector(this);\n\n    if (['A', 'AREA'].includes(this.tagName)) {\n      event.preventDefault();\n    }\n\n    if (isDisabled(this)) {\n      return;\n    }\n\n    EventHandler.one(target, EVENT_HIDDEN$2, () => {\n      // focus on trigger when it is closed\n      if (isVisible(this)) {\n        this.focus();\n      }\n    }); // avoid conflict when clicking a toggler of an offcanvas, while another is open\n\n    const allReadyOpen = SelectorEngine.findOne(OPEN_SELECTOR);\n\n    if (allReadyOpen && allReadyOpen !== target) {\n      Offcanvas.getInstance(allReadyOpen).hide();\n    }\n\n    const data = Offcanvas.getOrCreateInstance(target);\n    data.toggle(this);\n  });\n  EventHandler.on(window, EVENT_LOAD_DATA_API$1, () => SelectorEngine.find(OPEN_SELECTOR).forEach(el => Offcanvas.getOrCreateInstance(el).show()));\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   */\n\n  defineJQueryPlugin(Offcanvas);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): util/sanitizer.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  const uriAttrs = new Set(['background', 'cite', 'href', 'itemtype', 'longdesc', 'poster', 'src', 'xlink:href']);\n  const ARIA_ATTRIBUTE_PATTERN = /^aria-[\\w-]*$/i;\n  /**\n   * A pattern that recognizes a commonly useful subset of URLs that are safe.\n   *\n   * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts\n   */\n\n  const SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file):|[^#&/:?]*(?:[#/?]|$))/i;\n  /**\n   * A pattern that matches safe data URLs. Only matches image, video and audio types.\n   *\n   * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts\n   */\n\n  const DATA_URL_PATTERN = /^data:(?:image\\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\\/(?:mpeg|mp4|ogg|webm)|audio\\/(?:mp3|oga|ogg|opus));base64,[\\d+/a-z]+=*$/i;\n\n  const allowedAttribute = (attr, allowedAttributeList) => {\n    const attrName = attr.nodeName.toLowerCase();\n\n    if (allowedAttributeList.includes(attrName)) {\n      if (uriAttrs.has(attrName)) {\n        return Boolean(SAFE_URL_PATTERN.test(attr.nodeValue) || DATA_URL_PATTERN.test(attr.nodeValue));\n      }\n\n      return true;\n    }\n\n    const regExp = allowedAttributeList.filter(attrRegex => attrRegex instanceof RegExp); // Check if a regular expression validates the attribute.\n\n    for (let i = 0, len = regExp.length; i < len; i++) {\n      if (regExp[i].test(attrName)) {\n        return true;\n      }\n    }\n\n    return false;\n  };\n\n  const DefaultAllowlist = {\n    // Global attributes allowed on any supplied element below.\n    '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],\n    a: ['target', 'href', 'title', 'rel'],\n    area: [],\n    b: [],\n    br: [],\n    col: [],\n    code: [],\n    div: [],\n    em: [],\n    hr: [],\n    h1: [],\n    h2: [],\n    h3: [],\n    h4: [],\n    h5: [],\n    h6: [],\n    i: [],\n    img: ['src', 'srcset', 'alt', 'title', 'width', 'height'],\n    li: [],\n    ol: [],\n    p: [],\n    pre: [],\n    s: [],\n    small: [],\n    span: [],\n    sub: [],\n    sup: [],\n    strong: [],\n    u: [],\n    ul: []\n  };\n  function sanitizeHtml(unsafeHtml, allowList, sanitizeFn) {\n    if (!unsafeHtml.length) {\n      return unsafeHtml;\n    }\n\n    if (sanitizeFn && typeof sanitizeFn === 'function') {\n      return sanitizeFn(unsafeHtml);\n    }\n\n    const domParser = new window.DOMParser();\n    const createdDocument = domParser.parseFromString(unsafeHtml, 'text/html');\n    const allowlistKeys = Object.keys(allowList);\n    const elements = [].concat(...createdDocument.body.querySelectorAll('*'));\n\n    for (let i = 0, len = elements.length; i < len; i++) {\n      const el = elements[i];\n      const elName = el.nodeName.toLowerCase();\n\n      if (!allowlistKeys.includes(elName)) {\n        el.remove();\n        continue;\n      }\n\n      const attributeList = [].concat(...el.attributes);\n      const allowedAttributes = [].concat(allowList['*'] || [], allowList[elName] || []);\n      attributeList.forEach(attr => {\n        if (!allowedAttribute(attr, allowedAttributes)) {\n          el.removeAttribute(attr.nodeName);\n        }\n      });\n    }\n\n    return createdDocument.body.innerHTML;\n  }\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): tooltip.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$4 = 'tooltip';\n  const DATA_KEY$4 = 'bs.tooltip';\n  const EVENT_KEY$4 = `.${DATA_KEY$4}`;\n  const CLASS_PREFIX$1 = 'bs-tooltip';\n  const BSCLS_PREFIX_REGEX$1 = new RegExp(`(^|\\\\s)${CLASS_PREFIX$1}\\\\S+`, 'g');\n  const DISALLOWED_ATTRIBUTES = new Set(['sanitize', 'allowList', 'sanitizeFn']);\n  const DefaultType$3 = {\n    animation: 'boolean',\n    template: 'string',\n    title: '(string|element|function)',\n    trigger: 'string',\n    delay: '(number|object)',\n    html: 'boolean',\n    selector: '(string|boolean)',\n    placement: '(string|function)',\n    offset: '(array|string|function)',\n    container: '(string|element|boolean)',\n    fallbackPlacements: 'array',\n    boundary: '(string|element)',\n    customClass: '(string|function)',\n    sanitize: 'boolean',\n    sanitizeFn: '(null|function)',\n    allowList: 'object',\n    popperConfig: '(null|object|function)'\n  };\n  const AttachmentMap = {\n    AUTO: 'auto',\n    TOP: 'top',\n    RIGHT: isRTL() ? 'left' : 'right',\n    BOTTOM: 'bottom',\n    LEFT: isRTL() ? 'right' : 'left'\n  };\n  const Default$3 = {\n    animation: true,\n    template: '<div class=\"tooltip\" role=\"tooltip\">' + '<div class=\"tooltip-arrow\"></div>' + '<div class=\"tooltip-inner\"></div>' + '</div>',\n    trigger: 'hover focus',\n    title: '',\n    delay: 0,\n    html: false,\n    selector: false,\n    placement: 'top',\n    offset: [0, 0],\n    container: false,\n    fallbackPlacements: ['top', 'right', 'bottom', 'left'],\n    boundary: 'clippingParents',\n    customClass: '',\n    sanitize: true,\n    sanitizeFn: null,\n    allowList: DefaultAllowlist,\n    popperConfig: null\n  };\n  const Event$2 = {\n    HIDE: `hide${EVENT_KEY$4}`,\n    HIDDEN: `hidden${EVENT_KEY$4}`,\n    SHOW: `show${EVENT_KEY$4}`,\n    SHOWN: `shown${EVENT_KEY$4}`,\n    INSERTED: `inserted${EVENT_KEY$4}`,\n    CLICK: `click${EVENT_KEY$4}`,\n    FOCUSIN: `focusin${EVENT_KEY$4}`,\n    FOCUSOUT: `focusout${EVENT_KEY$4}`,\n    MOUSEENTER: `mouseenter${EVENT_KEY$4}`,\n    MOUSELEAVE: `mouseleave${EVENT_KEY$4}`\n  };\n  const CLASS_NAME_FADE$3 = 'fade';\n  const CLASS_NAME_MODAL = 'modal';\n  const CLASS_NAME_SHOW$3 = 'show';\n  const HOVER_STATE_SHOW = 'show';\n  const HOVER_STATE_OUT = 'out';\n  const SELECTOR_TOOLTIP_INNER = '.tooltip-inner';\n  const TRIGGER_HOVER = 'hover';\n  const TRIGGER_FOCUS = 'focus';\n  const TRIGGER_CLICK = 'click';\n  const TRIGGER_MANUAL = 'manual';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Tooltip extends BaseComponent {\n    constructor(element, config) {\n      if (typeof Popper === 'undefined') {\n        throw new TypeError('Bootstrap\\'s tooltips require Popper (https://popper.js.org)');\n      }\n\n      super(element); // private\n\n      this._isEnabled = true;\n      this._timeout = 0;\n      this._hoverState = '';\n      this._activeTrigger = {};\n      this._popper = null; // Protected\n\n      this._config = this._getConfig(config);\n      this.tip = null;\n\n      this._setListeners();\n    } // Getters\n\n\n    static get Default() {\n      return Default$3;\n    }\n\n    static get NAME() {\n      return NAME$4;\n    }\n\n    static get Event() {\n      return Event$2;\n    }\n\n    static get DefaultType() {\n      return DefaultType$3;\n    } // Public\n\n\n    enable() {\n      this._isEnabled = true;\n    }\n\n    disable() {\n      this._isEnabled = false;\n    }\n\n    toggleEnabled() {\n      this._isEnabled = !this._isEnabled;\n    }\n\n    toggle(event) {\n      if (!this._isEnabled) {\n        return;\n      }\n\n      if (event) {\n        const context = this._initializeOnDelegatedTarget(event);\n\n        context._activeTrigger.click = !context._activeTrigger.click;\n\n        if (context._isWithActiveTrigger()) {\n          context._enter(null, context);\n        } else {\n          context._leave(null, context);\n        }\n      } else {\n        if (this.getTipElement().classList.contains(CLASS_NAME_SHOW$3)) {\n          this._leave(null, this);\n\n          return;\n        }\n\n        this._enter(null, this);\n      }\n    }\n\n    dispose() {\n      clearTimeout(this._timeout);\n      EventHandler.off(this._element.closest(`.${CLASS_NAME_MODAL}`), 'hide.bs.modal', this._hideModalHandler);\n\n      if (this.tip) {\n        this.tip.remove();\n      }\n\n      if (this._popper) {\n        this._popper.destroy();\n      }\n\n      super.dispose();\n    }\n\n    show() {\n      if (this._element.style.display === 'none') {\n        throw new Error('Please use show on visible elements');\n      }\n\n      if (!(this.isWithContent() && this._isEnabled)) {\n        return;\n      }\n\n      const showEvent = EventHandler.trigger(this._element, this.constructor.Event.SHOW);\n      const shadowRoot = findShadowRoot(this._element);\n      const isInTheDom = shadowRoot === null ? this._element.ownerDocument.documentElement.contains(this._element) : shadowRoot.contains(this._element);\n\n      if (showEvent.defaultPrevented || !isInTheDom) {\n        return;\n      }\n\n      const tip = this.getTipElement();\n      const tipId = getUID(this.constructor.NAME);\n      tip.setAttribute('id', tipId);\n\n      this._element.setAttribute('aria-describedby', tipId);\n\n      this.setContent();\n\n      if (this._config.animation) {\n        tip.classList.add(CLASS_NAME_FADE$3);\n      }\n\n      const placement = typeof this._config.placement === 'function' ? this._config.placement.call(this, tip, this._element) : this._config.placement;\n\n      const attachment = this._getAttachment(placement);\n\n      this._addAttachmentClass(attachment);\n\n      const {\n        container\n      } = this._config;\n      Data.set(tip, this.constructor.DATA_KEY, this);\n\n      if (!this._element.ownerDocument.documentElement.contains(this.tip)) {\n        container.appendChild(tip);\n        EventHandler.trigger(this._element, this.constructor.Event.INSERTED);\n      }\n\n      if (this._popper) {\n        this._popper.update();\n      } else {\n        this._popper = createPopper(this._element, tip, this._getPopperConfig(attachment));\n      }\n\n      tip.classList.add(CLASS_NAME_SHOW$3);\n      const customClass = typeof this._config.customClass === 'function' ? this._config.customClass() : this._config.customClass;\n\n      if (customClass) {\n        tip.classList.add(...customClass.split(' '));\n      } // If this is a touch-enabled device we add extra\n      // empty mouseover listeners to the body's immediate children;\n      // only needed because of broken event delegation on iOS\n      // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n\n\n      if ('ontouchstart' in document.documentElement) {\n        [].concat(...document.body.children).forEach(element => {\n          EventHandler.on(element, 'mouseover', noop);\n        });\n      }\n\n      const complete = () => {\n        const prevHoverState = this._hoverState;\n        this._hoverState = null;\n        EventHandler.trigger(this._element, this.constructor.Event.SHOWN);\n\n        if (prevHoverState === HOVER_STATE_OUT) {\n          this._leave(null, this);\n        }\n      };\n\n      const isAnimated = this.tip.classList.contains(CLASS_NAME_FADE$3);\n\n      this._queueCallback(complete, this.tip, isAnimated);\n    }\n\n    hide() {\n      if (!this._popper) {\n        return;\n      }\n\n      const tip = this.getTipElement();\n\n      const complete = () => {\n        if (this._isWithActiveTrigger()) {\n          return;\n        }\n\n        if (this._hoverState !== HOVER_STATE_SHOW) {\n          tip.remove();\n        }\n\n        this._cleanTipClass();\n\n        this._element.removeAttribute('aria-describedby');\n\n        EventHandler.trigger(this._element, this.constructor.Event.HIDDEN);\n\n        if (this._popper) {\n          this._popper.destroy();\n\n          this._popper = null;\n        }\n      };\n\n      const hideEvent = EventHandler.trigger(this._element, this.constructor.Event.HIDE);\n\n      if (hideEvent.defaultPrevented) {\n        return;\n      }\n\n      tip.classList.remove(CLASS_NAME_SHOW$3); // If this is a touch-enabled device we remove the extra\n      // empty mouseover listeners we added for iOS support\n\n      if ('ontouchstart' in document.documentElement) {\n        [].concat(...document.body.children).forEach(element => EventHandler.off(element, 'mouseover', noop));\n      }\n\n      this._activeTrigger[TRIGGER_CLICK] = false;\n      this._activeTrigger[TRIGGER_FOCUS] = false;\n      this._activeTrigger[TRIGGER_HOVER] = false;\n      const isAnimated = this.tip.classList.contains(CLASS_NAME_FADE$3);\n\n      this._queueCallback(complete, this.tip, isAnimated);\n\n      this._hoverState = '';\n    }\n\n    update() {\n      if (this._popper !== null) {\n        this._popper.update();\n      }\n    } // Protected\n\n\n    isWithContent() {\n      return Boolean(this.getTitle());\n    }\n\n    getTipElement() {\n      if (this.tip) {\n        return this.tip;\n      }\n\n      const element = document.createElement('div');\n      element.innerHTML = this._config.template;\n      this.tip = element.children[0];\n      return this.tip;\n    }\n\n    setContent() {\n      const tip = this.getTipElement();\n      this.setElementContent(SelectorEngine.findOne(SELECTOR_TOOLTIP_INNER, tip), this.getTitle());\n      tip.classList.remove(CLASS_NAME_FADE$3, CLASS_NAME_SHOW$3);\n    }\n\n    setElementContent(element, content) {\n      if (element === null) {\n        return;\n      }\n\n      if (isElement$1(content)) {\n        content = getElement(content); // content is a DOM node or a jQuery\n\n        if (this._config.html) {\n          if (content.parentNode !== element) {\n            element.innerHTML = '';\n            element.appendChild(content);\n          }\n        } else {\n          element.textContent = content.textContent;\n        }\n\n        return;\n      }\n\n      if (this._config.html) {\n        if (this._config.sanitize) {\n          content = sanitizeHtml(content, this._config.allowList, this._config.sanitizeFn);\n        }\n\n        element.innerHTML = content;\n      } else {\n        element.textContent = content;\n      }\n    }\n\n    getTitle() {\n      let title = this._element.getAttribute('data-bs-original-title');\n\n      if (!title) {\n        title = typeof this._config.title === 'function' ? this._config.title.call(this._element) : this._config.title;\n      }\n\n      return title;\n    }\n\n    updateAttachment(attachment) {\n      if (attachment === 'right') {\n        return 'end';\n      }\n\n      if (attachment === 'left') {\n        return 'start';\n      }\n\n      return attachment;\n    } // Private\n\n\n    _initializeOnDelegatedTarget(event, context) {\n      const dataKey = this.constructor.DATA_KEY;\n      context = context || Data.get(event.delegateTarget, dataKey);\n\n      if (!context) {\n        context = new this.constructor(event.delegateTarget, this._getDelegateConfig());\n        Data.set(event.delegateTarget, dataKey, context);\n      }\n\n      return context;\n    }\n\n    _getOffset() {\n      const {\n        offset\n      } = this._config;\n\n      if (typeof offset === 'string') {\n        return offset.split(',').map(val => Number.parseInt(val, 10));\n      }\n\n      if (typeof offset === 'function') {\n        return popperData => offset(popperData, this._element);\n      }\n\n      return offset;\n    }\n\n    _getPopperConfig(attachment) {\n      const defaultBsPopperConfig = {\n        placement: attachment,\n        modifiers: [{\n          name: 'flip',\n          options: {\n            fallbackPlacements: this._config.fallbackPlacements\n          }\n        }, {\n          name: 'offset',\n          options: {\n            offset: this._getOffset()\n          }\n        }, {\n          name: 'preventOverflow',\n          options: {\n            boundary: this._config.boundary\n          }\n        }, {\n          name: 'arrow',\n          options: {\n            element: `.${this.constructor.NAME}-arrow`\n          }\n        }, {\n          name: 'onChange',\n          enabled: true,\n          phase: 'afterWrite',\n          fn: data => this._handlePopperPlacementChange(data)\n        }],\n        onFirstUpdate: data => {\n          if (data.options.placement !== data.placement) {\n            this._handlePopperPlacementChange(data);\n          }\n        }\n      };\n      return { ...defaultBsPopperConfig,\n        ...(typeof this._config.popperConfig === 'function' ? this._config.popperConfig(defaultBsPopperConfig) : this._config.popperConfig)\n      };\n    }\n\n    _addAttachmentClass(attachment) {\n      this.getTipElement().classList.add(`${CLASS_PREFIX$1}-${this.updateAttachment(attachment)}`);\n    }\n\n    _getAttachment(placement) {\n      return AttachmentMap[placement.toUpperCase()];\n    }\n\n    _setListeners() {\n      const triggers = this._config.trigger.split(' ');\n\n      triggers.forEach(trigger => {\n        if (trigger === 'click') {\n          EventHandler.on(this._element, this.constructor.Event.CLICK, this._config.selector, event => this.toggle(event));\n        } else if (trigger !== TRIGGER_MANUAL) {\n          const eventIn = trigger === TRIGGER_HOVER ? this.constructor.Event.MOUSEENTER : this.constructor.Event.FOCUSIN;\n          const eventOut = trigger === TRIGGER_HOVER ? this.constructor.Event.MOUSELEAVE : this.constructor.Event.FOCUSOUT;\n          EventHandler.on(this._element, eventIn, this._config.selector, event => this._enter(event));\n          EventHandler.on(this._element, eventOut, this._config.selector, event => this._leave(event));\n        }\n      });\n\n      this._hideModalHandler = () => {\n        if (this._element) {\n          this.hide();\n        }\n      };\n\n      EventHandler.on(this._element.closest(`.${CLASS_NAME_MODAL}`), 'hide.bs.modal', this._hideModalHandler);\n\n      if (this._config.selector) {\n        this._config = { ...this._config,\n          trigger: 'manual',\n          selector: ''\n        };\n      } else {\n        this._fixTitle();\n      }\n    }\n\n    _fixTitle() {\n      const title = this._element.getAttribute('title');\n\n      const originalTitleType = typeof this._element.getAttribute('data-bs-original-title');\n\n      if (title || originalTitleType !== 'string') {\n        this._element.setAttribute('data-bs-original-title', title || '');\n\n        if (title && !this._element.getAttribute('aria-label') && !this._element.textContent) {\n          this._element.setAttribute('aria-label', title);\n        }\n\n        this._element.setAttribute('title', '');\n      }\n    }\n\n    _enter(event, context) {\n      context = this._initializeOnDelegatedTarget(event, context);\n\n      if (event) {\n        context._activeTrigger[event.type === 'focusin' ? TRIGGER_FOCUS : TRIGGER_HOVER] = true;\n      }\n\n      if (context.getTipElement().classList.contains(CLASS_NAME_SHOW$3) || context._hoverState === HOVER_STATE_SHOW) {\n        context._hoverState = HOVER_STATE_SHOW;\n        return;\n      }\n\n      clearTimeout(context._timeout);\n      context._hoverState = HOVER_STATE_SHOW;\n\n      if (!context._config.delay || !context._config.delay.show) {\n        context.show();\n        return;\n      }\n\n      context._timeout = setTimeout(() => {\n        if (context._hoverState === HOVER_STATE_SHOW) {\n          context.show();\n        }\n      }, context._config.delay.show);\n    }\n\n    _leave(event, context) {\n      context = this._initializeOnDelegatedTarget(event, context);\n\n      if (event) {\n        context._activeTrigger[event.type === 'focusout' ? TRIGGER_FOCUS : TRIGGER_HOVER] = context._element.contains(event.relatedTarget);\n      }\n\n      if (context._isWithActiveTrigger()) {\n        return;\n      }\n\n      clearTimeout(context._timeout);\n      context._hoverState = HOVER_STATE_OUT;\n\n      if (!context._config.delay || !context._config.delay.hide) {\n        context.hide();\n        return;\n      }\n\n      context._timeout = setTimeout(() => {\n        if (context._hoverState === HOVER_STATE_OUT) {\n          context.hide();\n        }\n      }, context._config.delay.hide);\n    }\n\n    _isWithActiveTrigger() {\n      for (const trigger in this._activeTrigger) {\n        if (this._activeTrigger[trigger]) {\n          return true;\n        }\n      }\n\n      return false;\n    }\n\n    _getConfig(config) {\n      const dataAttributes = Manipulator.getDataAttributes(this._element);\n      Object.keys(dataAttributes).forEach(dataAttr => {\n        if (DISALLOWED_ATTRIBUTES.has(dataAttr)) {\n          delete dataAttributes[dataAttr];\n        }\n      });\n      config = { ...this.constructor.Default,\n        ...dataAttributes,\n        ...(typeof config === 'object' && config ? config : {})\n      };\n      config.container = config.container === false ? document.body : getElement(config.container);\n\n      if (typeof config.delay === 'number') {\n        config.delay = {\n          show: config.delay,\n          hide: config.delay\n        };\n      }\n\n      if (typeof config.title === 'number') {\n        config.title = config.title.toString();\n      }\n\n      if (typeof config.content === 'number') {\n        config.content = config.content.toString();\n      }\n\n      typeCheckConfig(NAME$4, config, this.constructor.DefaultType);\n\n      if (config.sanitize) {\n        config.template = sanitizeHtml(config.template, config.allowList, config.sanitizeFn);\n      }\n\n      return config;\n    }\n\n    _getDelegateConfig() {\n      const config = {};\n\n      if (this._config) {\n        for (const key in this._config) {\n          if (this.constructor.Default[key] !== this._config[key]) {\n            config[key] = this._config[key];\n          }\n        }\n      }\n\n      return config;\n    }\n\n    _cleanTipClass() {\n      const tip = this.getTipElement();\n      const tabClass = tip.getAttribute('class').match(BSCLS_PREFIX_REGEX$1);\n\n      if (tabClass !== null && tabClass.length > 0) {\n        tabClass.map(token => token.trim()).forEach(tClass => tip.classList.remove(tClass));\n      }\n    }\n\n    _handlePopperPlacementChange(popperData) {\n      const {\n        state\n      } = popperData;\n\n      if (!state) {\n        return;\n      }\n\n      this.tip = state.elements.popper;\n\n      this._cleanTipClass();\n\n      this._addAttachmentClass(this._getAttachment(state.placement));\n    } // Static\n\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = Tooltip.getOrCreateInstance(this, config);\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(`No method named \"${config}\"`);\n          }\n\n          data[config]();\n        }\n      });\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Tooltip to jQuery only if jQuery is present\n   */\n\n\n  defineJQueryPlugin(Tooltip);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): popover.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$3 = 'popover';\n  const DATA_KEY$3 = 'bs.popover';\n  const EVENT_KEY$3 = `.${DATA_KEY$3}`;\n  const CLASS_PREFIX = 'bs-popover';\n  const BSCLS_PREFIX_REGEX = new RegExp(`(^|\\\\s)${CLASS_PREFIX}\\\\S+`, 'g');\n  const Default$2 = { ...Tooltip.Default,\n    placement: 'right',\n    offset: [0, 8],\n    trigger: 'click',\n    content: '',\n    template: '<div class=\"popover\" role=\"tooltip\">' + '<div class=\"popover-arrow\"></div>' + '<h3 class=\"popover-header\"></h3>' + '<div class=\"popover-body\"></div>' + '</div>'\n  };\n  const DefaultType$2 = { ...Tooltip.DefaultType,\n    content: '(string|element|function)'\n  };\n  const Event$1 = {\n    HIDE: `hide${EVENT_KEY$3}`,\n    HIDDEN: `hidden${EVENT_KEY$3}`,\n    SHOW: `show${EVENT_KEY$3}`,\n    SHOWN: `shown${EVENT_KEY$3}`,\n    INSERTED: `inserted${EVENT_KEY$3}`,\n    CLICK: `click${EVENT_KEY$3}`,\n    FOCUSIN: `focusin${EVENT_KEY$3}`,\n    FOCUSOUT: `focusout${EVENT_KEY$3}`,\n    MOUSEENTER: `mouseenter${EVENT_KEY$3}`,\n    MOUSELEAVE: `mouseleave${EVENT_KEY$3}`\n  };\n  const CLASS_NAME_FADE$2 = 'fade';\n  const CLASS_NAME_SHOW$2 = 'show';\n  const SELECTOR_TITLE = '.popover-header';\n  const SELECTOR_CONTENT = '.popover-body';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Popover extends Tooltip {\n    // Getters\n    static get Default() {\n      return Default$2;\n    }\n\n    static get NAME() {\n      return NAME$3;\n    }\n\n    static get Event() {\n      return Event$1;\n    }\n\n    static get DefaultType() {\n      return DefaultType$2;\n    } // Overrides\n\n\n    isWithContent() {\n      return this.getTitle() || this._getContent();\n    }\n\n    getTipElement() {\n      if (this.tip) {\n        return this.tip;\n      }\n\n      this.tip = super.getTipElement();\n\n      if (!this.getTitle()) {\n        SelectorEngine.findOne(SELECTOR_TITLE, this.tip).remove();\n      }\n\n      if (!this._getContent()) {\n        SelectorEngine.findOne(SELECTOR_CONTENT, this.tip).remove();\n      }\n\n      return this.tip;\n    }\n\n    setContent() {\n      const tip = this.getTipElement(); // we use append for html objects to maintain js events\n\n      this.setElementContent(SelectorEngine.findOne(SELECTOR_TITLE, tip), this.getTitle());\n\n      let content = this._getContent();\n\n      if (typeof content === 'function') {\n        content = content.call(this._element);\n      }\n\n      this.setElementContent(SelectorEngine.findOne(SELECTOR_CONTENT, tip), content);\n      tip.classList.remove(CLASS_NAME_FADE$2, CLASS_NAME_SHOW$2);\n    } // Private\n\n\n    _addAttachmentClass(attachment) {\n      this.getTipElement().classList.add(`${CLASS_PREFIX}-${this.updateAttachment(attachment)}`);\n    }\n\n    _getContent() {\n      return this._element.getAttribute('data-bs-content') || this._config.content;\n    }\n\n    _cleanTipClass() {\n      const tip = this.getTipElement();\n      const tabClass = tip.getAttribute('class').match(BSCLS_PREFIX_REGEX);\n\n      if (tabClass !== null && tabClass.length > 0) {\n        tabClass.map(token => token.trim()).forEach(tClass => tip.classList.remove(tClass));\n      }\n    } // Static\n\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = Popover.getOrCreateInstance(this, config);\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(`No method named \"${config}\"`);\n          }\n\n          data[config]();\n        }\n      });\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Popover to jQuery only if jQuery is present\n   */\n\n\n  defineJQueryPlugin(Popover);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): scrollspy.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$2 = 'scrollspy';\n  const DATA_KEY$2 = 'bs.scrollspy';\n  const EVENT_KEY$2 = `.${DATA_KEY$2}`;\n  const DATA_API_KEY$1 = '.data-api';\n  const Default$1 = {\n    offset: 10,\n    method: 'auto',\n    target: ''\n  };\n  const DefaultType$1 = {\n    offset: 'number',\n    method: 'string',\n    target: '(string|element)'\n  };\n  const EVENT_ACTIVATE = `activate${EVENT_KEY$2}`;\n  const EVENT_SCROLL = `scroll${EVENT_KEY$2}`;\n  const EVENT_LOAD_DATA_API = `load${EVENT_KEY$2}${DATA_API_KEY$1}`;\n  const CLASS_NAME_DROPDOWN_ITEM = 'dropdown-item';\n  const CLASS_NAME_ACTIVE$1 = 'active';\n  const SELECTOR_DATA_SPY = '[data-bs-spy=\"scroll\"]';\n  const SELECTOR_NAV_LIST_GROUP$1 = '.nav, .list-group';\n  const SELECTOR_NAV_LINKS = '.nav-link';\n  const SELECTOR_NAV_ITEMS = '.nav-item';\n  const SELECTOR_LIST_ITEMS = '.list-group-item';\n  const SELECTOR_DROPDOWN$1 = '.dropdown';\n  const SELECTOR_DROPDOWN_TOGGLE$1 = '.dropdown-toggle';\n  const METHOD_OFFSET = 'offset';\n  const METHOD_POSITION = 'position';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class ScrollSpy extends BaseComponent {\n    constructor(element, config) {\n      super(element);\n      this._scrollElement = this._element.tagName === 'BODY' ? window : this._element;\n      this._config = this._getConfig(config);\n      this._selector = `${this._config.target} ${SELECTOR_NAV_LINKS}, ${this._config.target} ${SELECTOR_LIST_ITEMS}, ${this._config.target} .${CLASS_NAME_DROPDOWN_ITEM}`;\n      this._offsets = [];\n      this._targets = [];\n      this._activeTarget = null;\n      this._scrollHeight = 0;\n      EventHandler.on(this._scrollElement, EVENT_SCROLL, () => this._process());\n      this.refresh();\n\n      this._process();\n    } // Getters\n\n\n    static get Default() {\n      return Default$1;\n    }\n\n    static get NAME() {\n      return NAME$2;\n    } // Public\n\n\n    refresh() {\n      const autoMethod = this._scrollElement === this._scrollElement.window ? METHOD_OFFSET : METHOD_POSITION;\n      const offsetMethod = this._config.method === 'auto' ? autoMethod : this._config.method;\n      const offsetBase = offsetMethod === METHOD_POSITION ? this._getScrollTop() : 0;\n      this._offsets = [];\n      this._targets = [];\n      this._scrollHeight = this._getScrollHeight();\n      const targets = SelectorEngine.find(this._selector);\n      targets.map(element => {\n        const targetSelector = getSelectorFromElement(element);\n        const target = targetSelector ? SelectorEngine.findOne(targetSelector) : null;\n\n        if (target) {\n          const targetBCR = target.getBoundingClientRect();\n\n          if (targetBCR.width || targetBCR.height) {\n            return [Manipulator[offsetMethod](target).top + offsetBase, targetSelector];\n          }\n        }\n\n        return null;\n      }).filter(item => item).sort((a, b) => a[0] - b[0]).forEach(item => {\n        this._offsets.push(item[0]);\n\n        this._targets.push(item[1]);\n      });\n    }\n\n    dispose() {\n      EventHandler.off(this._scrollElement, EVENT_KEY$2);\n      super.dispose();\n    } // Private\n\n\n    _getConfig(config) {\n      config = { ...Default$1,\n        ...Manipulator.getDataAttributes(this._element),\n        ...(typeof config === 'object' && config ? config : {})\n      };\n\n      if (typeof config.target !== 'string' && isElement$1(config.target)) {\n        let {\n          id\n        } = config.target;\n\n        if (!id) {\n          id = getUID(NAME$2);\n          config.target.id = id;\n        }\n\n        config.target = `#${id}`;\n      }\n\n      typeCheckConfig(NAME$2, config, DefaultType$1);\n      return config;\n    }\n\n    _getScrollTop() {\n      return this._scrollElement === window ? this._scrollElement.pageYOffset : this._scrollElement.scrollTop;\n    }\n\n    _getScrollHeight() {\n      return this._scrollElement.scrollHeight || Math.max(document.body.scrollHeight, document.documentElement.scrollHeight);\n    }\n\n    _getOffsetHeight() {\n      return this._scrollElement === window ? window.innerHeight : this._scrollElement.getBoundingClientRect().height;\n    }\n\n    _process() {\n      const scrollTop = this._getScrollTop() + this._config.offset;\n\n      const scrollHeight = this._getScrollHeight();\n\n      const maxScroll = this._config.offset + scrollHeight - this._getOffsetHeight();\n\n      if (this._scrollHeight !== scrollHeight) {\n        this.refresh();\n      }\n\n      if (scrollTop >= maxScroll) {\n        const target = this._targets[this._targets.length - 1];\n\n        if (this._activeTarget !== target) {\n          this._activate(target);\n        }\n\n        return;\n      }\n\n      if (this._activeTarget && scrollTop < this._offsets[0] && this._offsets[0] > 0) {\n        this._activeTarget = null;\n\n        this._clear();\n\n        return;\n      }\n\n      for (let i = this._offsets.length; i--;) {\n        const isActiveTarget = this._activeTarget !== this._targets[i] && scrollTop >= this._offsets[i] && (typeof this._offsets[i + 1] === 'undefined' || scrollTop < this._offsets[i + 1]);\n\n        if (isActiveTarget) {\n          this._activate(this._targets[i]);\n        }\n      }\n    }\n\n    _activate(target) {\n      this._activeTarget = target;\n\n      this._clear();\n\n      const queries = this._selector.split(',').map(selector => `${selector}[data-bs-target=\"${target}\"],${selector}[href=\"${target}\"]`);\n\n      const link = SelectorEngine.findOne(queries.join(','));\n\n      if (link.classList.contains(CLASS_NAME_DROPDOWN_ITEM)) {\n        SelectorEngine.findOne(SELECTOR_DROPDOWN_TOGGLE$1, link.closest(SELECTOR_DROPDOWN$1)).classList.add(CLASS_NAME_ACTIVE$1);\n        link.classList.add(CLASS_NAME_ACTIVE$1);\n      } else {\n        // Set triggered link as active\n        link.classList.add(CLASS_NAME_ACTIVE$1);\n        SelectorEngine.parents(link, SELECTOR_NAV_LIST_GROUP$1).forEach(listGroup => {\n          // Set triggered links parents as active\n          // With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor\n          SelectorEngine.prev(listGroup, `${SELECTOR_NAV_LINKS}, ${SELECTOR_LIST_ITEMS}`).forEach(item => item.classList.add(CLASS_NAME_ACTIVE$1)); // Handle special case when .nav-link is inside .nav-item\n\n          SelectorEngine.prev(listGroup, SELECTOR_NAV_ITEMS).forEach(navItem => {\n            SelectorEngine.children(navItem, SELECTOR_NAV_LINKS).forEach(item => item.classList.add(CLASS_NAME_ACTIVE$1));\n          });\n        });\n      }\n\n      EventHandler.trigger(this._scrollElement, EVENT_ACTIVATE, {\n        relatedTarget: target\n      });\n    }\n\n    _clear() {\n      SelectorEngine.find(this._selector).filter(node => node.classList.contains(CLASS_NAME_ACTIVE$1)).forEach(node => node.classList.remove(CLASS_NAME_ACTIVE$1));\n    } // Static\n\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = ScrollSpy.getOrCreateInstance(this, config);\n\n        if (typeof config !== 'string') {\n          return;\n        }\n\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config]();\n      });\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n    SelectorEngine.find(SELECTOR_DATA_SPY).forEach(spy => new ScrollSpy(spy));\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .ScrollSpy to jQuery only if jQuery is present\n   */\n\n  defineJQueryPlugin(ScrollSpy);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): tab.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$1 = 'tab';\n  const DATA_KEY$1 = 'bs.tab';\n  const EVENT_KEY$1 = `.${DATA_KEY$1}`;\n  const DATA_API_KEY = '.data-api';\n  const EVENT_HIDE$1 = `hide${EVENT_KEY$1}`;\n  const EVENT_HIDDEN$1 = `hidden${EVENT_KEY$1}`;\n  const EVENT_SHOW$1 = `show${EVENT_KEY$1}`;\n  const EVENT_SHOWN$1 = `shown${EVENT_KEY$1}`;\n  const EVENT_CLICK_DATA_API = `click${EVENT_KEY$1}${DATA_API_KEY}`;\n  const CLASS_NAME_DROPDOWN_MENU = 'dropdown-menu';\n  const CLASS_NAME_ACTIVE = 'active';\n  const CLASS_NAME_FADE$1 = 'fade';\n  const CLASS_NAME_SHOW$1 = 'show';\n  const SELECTOR_DROPDOWN = '.dropdown';\n  const SELECTOR_NAV_LIST_GROUP = '.nav, .list-group';\n  const SELECTOR_ACTIVE = '.active';\n  const SELECTOR_ACTIVE_UL = ':scope > li > .active';\n  const SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"tab\"], [data-bs-toggle=\"pill\"], [data-bs-toggle=\"list\"]';\n  const SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle';\n  const SELECTOR_DROPDOWN_ACTIVE_CHILD = ':scope > .dropdown-menu .active';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Tab extends BaseComponent {\n    // Getters\n    static get NAME() {\n      return NAME$1;\n    } // Public\n\n\n    show() {\n      if (this._element.parentNode && this._element.parentNode.nodeType === Node.ELEMENT_NODE && this._element.classList.contains(CLASS_NAME_ACTIVE)) {\n        return;\n      }\n\n      let previous;\n      const target = getElementFromSelector(this._element);\n\n      const listElement = this._element.closest(SELECTOR_NAV_LIST_GROUP);\n\n      if (listElement) {\n        const itemSelector = listElement.nodeName === 'UL' || listElement.nodeName === 'OL' ? SELECTOR_ACTIVE_UL : SELECTOR_ACTIVE;\n        previous = SelectorEngine.find(itemSelector, listElement);\n        previous = previous[previous.length - 1];\n      }\n\n      const hideEvent = previous ? EventHandler.trigger(previous, EVENT_HIDE$1, {\n        relatedTarget: this._element\n      }) : null;\n      const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$1, {\n        relatedTarget: previous\n      });\n\n      if (showEvent.defaultPrevented || hideEvent !== null && hideEvent.defaultPrevented) {\n        return;\n      }\n\n      this._activate(this._element, listElement);\n\n      const complete = () => {\n        EventHandler.trigger(previous, EVENT_HIDDEN$1, {\n          relatedTarget: this._element\n        });\n        EventHandler.trigger(this._element, EVENT_SHOWN$1, {\n          relatedTarget: previous\n        });\n      };\n\n      if (target) {\n        this._activate(target, target.parentNode, complete);\n      } else {\n        complete();\n      }\n    } // Private\n\n\n    _activate(element, container, callback) {\n      const activeElements = container && (container.nodeName === 'UL' || container.nodeName === 'OL') ? SelectorEngine.find(SELECTOR_ACTIVE_UL, container) : SelectorEngine.children(container, SELECTOR_ACTIVE);\n      const active = activeElements[0];\n      const isTransitioning = callback && active && active.classList.contains(CLASS_NAME_FADE$1);\n\n      const complete = () => this._transitionComplete(element, active, callback);\n\n      if (active && isTransitioning) {\n        active.classList.remove(CLASS_NAME_SHOW$1);\n\n        this._queueCallback(complete, element, true);\n      } else {\n        complete();\n      }\n    }\n\n    _transitionComplete(element, active, callback) {\n      if (active) {\n        active.classList.remove(CLASS_NAME_ACTIVE);\n        const dropdownChild = SelectorEngine.findOne(SELECTOR_DROPDOWN_ACTIVE_CHILD, active.parentNode);\n\n        if (dropdownChild) {\n          dropdownChild.classList.remove(CLASS_NAME_ACTIVE);\n        }\n\n        if (active.getAttribute('role') === 'tab') {\n          active.setAttribute('aria-selected', false);\n        }\n      }\n\n      element.classList.add(CLASS_NAME_ACTIVE);\n\n      if (element.getAttribute('role') === 'tab') {\n        element.setAttribute('aria-selected', true);\n      }\n\n      reflow(element);\n\n      if (element.classList.contains(CLASS_NAME_FADE$1)) {\n        element.classList.add(CLASS_NAME_SHOW$1);\n      }\n\n      let parent = element.parentNode;\n\n      if (parent && parent.nodeName === 'LI') {\n        parent = parent.parentNode;\n      }\n\n      if (parent && parent.classList.contains(CLASS_NAME_DROPDOWN_MENU)) {\n        const dropdownElement = element.closest(SELECTOR_DROPDOWN);\n\n        if (dropdownElement) {\n          SelectorEngine.find(SELECTOR_DROPDOWN_TOGGLE, dropdownElement).forEach(dropdown => dropdown.classList.add(CLASS_NAME_ACTIVE));\n        }\n\n        element.setAttribute('aria-expanded', true);\n      }\n\n      if (callback) {\n        callback();\n      }\n    } // Static\n\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = Tab.getOrCreateInstance(this);\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(`No method named \"${config}\"`);\n          }\n\n          data[config]();\n        }\n      });\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n    if (['A', 'AREA'].includes(this.tagName)) {\n      event.preventDefault();\n    }\n\n    if (isDisabled(this)) {\n      return;\n    }\n\n    const data = Tab.getOrCreateInstance(this);\n    data.show();\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Tab to jQuery only if jQuery is present\n   */\n\n  defineJQueryPlugin(Tab);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): toast.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME = 'toast';\n  const DATA_KEY = 'bs.toast';\n  const EVENT_KEY = `.${DATA_KEY}`;\n  const EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY}`;\n  const EVENT_MOUSEOVER = `mouseover${EVENT_KEY}`;\n  const EVENT_MOUSEOUT = `mouseout${EVENT_KEY}`;\n  const EVENT_FOCUSIN = `focusin${EVENT_KEY}`;\n  const EVENT_FOCUSOUT = `focusout${EVENT_KEY}`;\n  const EVENT_HIDE = `hide${EVENT_KEY}`;\n  const EVENT_HIDDEN = `hidden${EVENT_KEY}`;\n  const EVENT_SHOW = `show${EVENT_KEY}`;\n  const EVENT_SHOWN = `shown${EVENT_KEY}`;\n  const CLASS_NAME_FADE = 'fade';\n  const CLASS_NAME_HIDE = 'hide';\n  const CLASS_NAME_SHOW = 'show';\n  const CLASS_NAME_SHOWING = 'showing';\n  const DefaultType = {\n    animation: 'boolean',\n    autohide: 'boolean',\n    delay: 'number'\n  };\n  const Default = {\n    animation: true,\n    autohide: true,\n    delay: 5000\n  };\n  const SELECTOR_DATA_DISMISS = '[data-bs-dismiss=\"toast\"]';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Toast extends BaseComponent {\n    constructor(element, config) {\n      super(element);\n      this._config = this._getConfig(config);\n      this._timeout = null;\n      this._hasMouseInteraction = false;\n      this._hasKeyboardInteraction = false;\n\n      this._setListeners();\n    } // Getters\n\n\n    static get DefaultType() {\n      return DefaultType;\n    }\n\n    static get Default() {\n      return Default;\n    }\n\n    static get NAME() {\n      return NAME;\n    } // Public\n\n\n    show() {\n      const showEvent = EventHandler.trigger(this._element, EVENT_SHOW);\n\n      if (showEvent.defaultPrevented) {\n        return;\n      }\n\n      this._clearTimeout();\n\n      if (this._config.animation) {\n        this._element.classList.add(CLASS_NAME_FADE);\n      }\n\n      const complete = () => {\n        this._element.classList.remove(CLASS_NAME_SHOWING);\n\n        this._element.classList.add(CLASS_NAME_SHOW);\n\n        EventHandler.trigger(this._element, EVENT_SHOWN);\n\n        this._maybeScheduleHide();\n      };\n\n      this._element.classList.remove(CLASS_NAME_HIDE);\n\n      reflow(this._element);\n\n      this._element.classList.add(CLASS_NAME_SHOWING);\n\n      this._queueCallback(complete, this._element, this._config.animation);\n    }\n\n    hide() {\n      if (!this._element.classList.contains(CLASS_NAME_SHOW)) {\n        return;\n      }\n\n      const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE);\n\n      if (hideEvent.defaultPrevented) {\n        return;\n      }\n\n      const complete = () => {\n        this._element.classList.add(CLASS_NAME_HIDE);\n\n        EventHandler.trigger(this._element, EVENT_HIDDEN);\n      };\n\n      this._element.classList.remove(CLASS_NAME_SHOW);\n\n      this._queueCallback(complete, this._element, this._config.animation);\n    }\n\n    dispose() {\n      this._clearTimeout();\n\n      if (this._element.classList.contains(CLASS_NAME_SHOW)) {\n        this._element.classList.remove(CLASS_NAME_SHOW);\n      }\n\n      super.dispose();\n    } // Private\n\n\n    _getConfig(config) {\n      config = { ...Default,\n        ...Manipulator.getDataAttributes(this._element),\n        ...(typeof config === 'object' && config ? config : {})\n      };\n      typeCheckConfig(NAME, config, this.constructor.DefaultType);\n      return config;\n    }\n\n    _maybeScheduleHide() {\n      if (!this._config.autohide) {\n        return;\n      }\n\n      if (this._hasMouseInteraction || this._hasKeyboardInteraction) {\n        return;\n      }\n\n      this._timeout = setTimeout(() => {\n        this.hide();\n      }, this._config.delay);\n    }\n\n    _onInteraction(event, isInteracting) {\n      switch (event.type) {\n        case 'mouseover':\n        case 'mouseout':\n          this._hasMouseInteraction = isInteracting;\n          break;\n\n        case 'focusin':\n        case 'focusout':\n          this._hasKeyboardInteraction = isInteracting;\n          break;\n      }\n\n      if (isInteracting) {\n        this._clearTimeout();\n\n        return;\n      }\n\n      const nextElement = event.relatedTarget;\n\n      if (this._element === nextElement || this._element.contains(nextElement)) {\n        return;\n      }\n\n      this._maybeScheduleHide();\n    }\n\n    _setListeners() {\n      EventHandler.on(this._element, EVENT_CLICK_DISMISS, SELECTOR_DATA_DISMISS, () => this.hide());\n      EventHandler.on(this._element, EVENT_MOUSEOVER, event => this._onInteraction(event, true));\n      EventHandler.on(this._element, EVENT_MOUSEOUT, event => this._onInteraction(event, false));\n      EventHandler.on(this._element, EVENT_FOCUSIN, event => this._onInteraction(event, true));\n      EventHandler.on(this._element, EVENT_FOCUSOUT, event => this._onInteraction(event, false));\n    }\n\n    _clearTimeout() {\n      clearTimeout(this._timeout);\n      this._timeout = null;\n    } // Static\n\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = Toast.getOrCreateInstance(this, config);\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(`No method named \"${config}\"`);\n          }\n\n          data[config](this);\n        }\n      });\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Toast to jQuery only if jQuery is present\n   */\n\n\n  defineJQueryPlugin(Toast);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): index.umd.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  var index_umd = {\n    Alert,\n    Button,\n    Carousel,\n    Collapse,\n    Dropdown,\n    Modal,\n    Offcanvas,\n    Popover,\n    ScrollSpy,\n    Tab,\n    Toast,\n    Tooltip\n  };\n\n  return index_umd;\n\n})));\n//# sourceMappingURL=bootstrap.bundle.js.map\n"
  },
  {
    "path": "src/sourceDev.WebApp/SharedThemes/slate/wwwroot/js/bootstrap.esm.js",
    "content": "/*!\n  * Bootstrap v5.0.2 (https://getbootstrap.com/)\n  * Copyright 2011-2021 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)\n  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n  */\nimport * as Popper from '@popperjs/core';\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): dom/selector-engine.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\nconst NODE_TEXT = 3;\nconst SelectorEngine = {\n  find(selector, element = document.documentElement) {\n    return [].concat(...Element.prototype.querySelectorAll.call(element, selector));\n  },\n\n  findOne(selector, element = document.documentElement) {\n    return Element.prototype.querySelector.call(element, selector);\n  },\n\n  children(element, selector) {\n    return [].concat(...element.children).filter(child => child.matches(selector));\n  },\n\n  parents(element, selector) {\n    const parents = [];\n    let ancestor = element.parentNode;\n\n    while (ancestor && ancestor.nodeType === Node.ELEMENT_NODE && ancestor.nodeType !== NODE_TEXT) {\n      if (ancestor.matches(selector)) {\n        parents.push(ancestor);\n      }\n\n      ancestor = ancestor.parentNode;\n    }\n\n    return parents;\n  },\n\n  prev(element, selector) {\n    let previous = element.previousElementSibling;\n\n    while (previous) {\n      if (previous.matches(selector)) {\n        return [previous];\n      }\n\n      previous = previous.previousElementSibling;\n    }\n\n    return [];\n  },\n\n  next(element, selector) {\n    let next = element.nextElementSibling;\n\n    while (next) {\n      if (next.matches(selector)) {\n        return [next];\n      }\n\n      next = next.nextElementSibling;\n    }\n\n    return [];\n  }\n\n};\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): util/index.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst MAX_UID = 1000000;\nconst MILLISECONDS_MULTIPLIER = 1000;\nconst TRANSITION_END = 'transitionend'; // Shoutout AngusCroll (https://goo.gl/pxwQGp)\n\nconst toType = obj => {\n  if (obj === null || obj === undefined) {\n    return `${obj}`;\n  }\n\n  return {}.toString.call(obj).match(/\\s([a-z]+)/i)[1].toLowerCase();\n};\n/**\n * --------------------------------------------------------------------------\n * Public Util Api\n * --------------------------------------------------------------------------\n */\n\n\nconst getUID = prefix => {\n  do {\n    prefix += Math.floor(Math.random() * MAX_UID);\n  } while (document.getElementById(prefix));\n\n  return prefix;\n};\n\nconst getSelector = element => {\n  let selector = element.getAttribute('data-bs-target');\n\n  if (!selector || selector === '#') {\n    let hrefAttr = element.getAttribute('href'); // The only valid content that could double as a selector are IDs or classes,\n    // so everything starting with `#` or `.`. If a \"real\" URL is used as the selector,\n    // `document.querySelector` will rightfully complain it is invalid.\n    // See https://github.com/twbs/bootstrap/issues/32273\n\n    if (!hrefAttr || !hrefAttr.includes('#') && !hrefAttr.startsWith('.')) {\n      return null;\n    } // Just in case some CMS puts out a full URL with the anchor appended\n\n\n    if (hrefAttr.includes('#') && !hrefAttr.startsWith('#')) {\n      hrefAttr = `#${hrefAttr.split('#')[1]}`;\n    }\n\n    selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : null;\n  }\n\n  return selector;\n};\n\nconst getSelectorFromElement = element => {\n  const selector = getSelector(element);\n\n  if (selector) {\n    return document.querySelector(selector) ? selector : null;\n  }\n\n  return null;\n};\n\nconst getElementFromSelector = element => {\n  const selector = getSelector(element);\n  return selector ? document.querySelector(selector) : null;\n};\n\nconst getTransitionDurationFromElement = element => {\n  if (!element) {\n    return 0;\n  } // Get transition-duration of the element\n\n\n  let {\n    transitionDuration,\n    transitionDelay\n  } = window.getComputedStyle(element);\n  const floatTransitionDuration = Number.parseFloat(transitionDuration);\n  const floatTransitionDelay = Number.parseFloat(transitionDelay); // Return 0 if element or transition duration is not found\n\n  if (!floatTransitionDuration && !floatTransitionDelay) {\n    return 0;\n  } // If multiple durations are defined, take the first\n\n\n  transitionDuration = transitionDuration.split(',')[0];\n  transitionDelay = transitionDelay.split(',')[0];\n  return (Number.parseFloat(transitionDuration) + Number.parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER;\n};\n\nconst triggerTransitionEnd = element => {\n  element.dispatchEvent(new Event(TRANSITION_END));\n};\n\nconst isElement = obj => {\n  if (!obj || typeof obj !== 'object') {\n    return false;\n  }\n\n  if (typeof obj.jquery !== 'undefined') {\n    obj = obj[0];\n  }\n\n  return typeof obj.nodeType !== 'undefined';\n};\n\nconst getElement = obj => {\n  if (isElement(obj)) {\n    // it's a jQuery object or a node element\n    return obj.jquery ? obj[0] : obj;\n  }\n\n  if (typeof obj === 'string' && obj.length > 0) {\n    return SelectorEngine.findOne(obj);\n  }\n\n  return null;\n};\n\nconst typeCheckConfig = (componentName, config, configTypes) => {\n  Object.keys(configTypes).forEach(property => {\n    const expectedTypes = configTypes[property];\n    const value = config[property];\n    const valueType = value && isElement(value) ? 'element' : toType(value);\n\n    if (!new RegExp(expectedTypes).test(valueType)) {\n      throw new TypeError(`${componentName.toUpperCase()}: Option \"${property}\" provided type \"${valueType}\" but expected type \"${expectedTypes}\".`);\n    }\n  });\n};\n\nconst isVisible = element => {\n  if (!isElement(element) || element.getClientRects().length === 0) {\n    return false;\n  }\n\n  return getComputedStyle(element).getPropertyValue('visibility') === 'visible';\n};\n\nconst isDisabled = element => {\n  if (!element || element.nodeType !== Node.ELEMENT_NODE) {\n    return true;\n  }\n\n  if (element.classList.contains('disabled')) {\n    return true;\n  }\n\n  if (typeof element.disabled !== 'undefined') {\n    return element.disabled;\n  }\n\n  return element.hasAttribute('disabled') && element.getAttribute('disabled') !== 'false';\n};\n\nconst findShadowRoot = element => {\n  if (!document.documentElement.attachShadow) {\n    return null;\n  } // Can find the shadow root otherwise it'll return the document\n\n\n  if (typeof element.getRootNode === 'function') {\n    const root = element.getRootNode();\n    return root instanceof ShadowRoot ? root : null;\n  }\n\n  if (element instanceof ShadowRoot) {\n    return element;\n  } // when we don't find a shadow root\n\n\n  if (!element.parentNode) {\n    return null;\n  }\n\n  return findShadowRoot(element.parentNode);\n};\n\nconst noop = () => {};\n\nconst reflow = element => element.offsetHeight;\n\nconst getjQuery = () => {\n  const {\n    jQuery\n  } = window;\n\n  if (jQuery && !document.body.hasAttribute('data-bs-no-jquery')) {\n    return jQuery;\n  }\n\n  return null;\n};\n\nconst DOMContentLoadedCallbacks = [];\n\nconst onDOMContentLoaded = callback => {\n  if (document.readyState === 'loading') {\n    // add listener on the first call when the document is in loading state\n    if (!DOMContentLoadedCallbacks.length) {\n      document.addEventListener('DOMContentLoaded', () => {\n        DOMContentLoadedCallbacks.forEach(callback => callback());\n      });\n    }\n\n    DOMContentLoadedCallbacks.push(callback);\n  } else {\n    callback();\n  }\n};\n\nconst isRTL = () => document.documentElement.dir === 'rtl';\n\nconst defineJQueryPlugin = plugin => {\n  onDOMContentLoaded(() => {\n    const $ = getjQuery();\n    /* istanbul ignore if */\n\n    if ($) {\n      const name = plugin.NAME;\n      const JQUERY_NO_CONFLICT = $.fn[name];\n      $.fn[name] = plugin.jQueryInterface;\n      $.fn[name].Constructor = plugin;\n\n      $.fn[name].noConflict = () => {\n        $.fn[name] = JQUERY_NO_CONFLICT;\n        return plugin.jQueryInterface;\n      };\n    }\n  });\n};\n\nconst execute = callback => {\n  if (typeof callback === 'function') {\n    callback();\n  }\n};\n\nconst executeAfterTransition = (callback, transitionElement, waitForTransition = true) => {\n  if (!waitForTransition) {\n    execute(callback);\n    return;\n  }\n\n  const durationPadding = 5;\n  const emulatedDuration = getTransitionDurationFromElement(transitionElement) + durationPadding;\n  let called = false;\n\n  const handler = ({\n    target\n  }) => {\n    if (target !== transitionElement) {\n      return;\n    }\n\n    called = true;\n    transitionElement.removeEventListener(TRANSITION_END, handler);\n    execute(callback);\n  };\n\n  transitionElement.addEventListener(TRANSITION_END, handler);\n  setTimeout(() => {\n    if (!called) {\n      triggerTransitionEnd(transitionElement);\n    }\n  }, emulatedDuration);\n};\n/**\n * Return the previous/next element of a list.\n *\n * @param {array} list    The list of elements\n * @param activeElement   The active element\n * @param shouldGetNext   Choose to get next or previous element\n * @param isCycleAllowed\n * @return {Element|elem} The proper element\n */\n\n\nconst getNextActiveElement = (list, activeElement, shouldGetNext, isCycleAllowed) => {\n  let index = list.indexOf(activeElement); // if the element does not exist in the list return an element depending on the direction and if cycle is allowed\n\n  if (index === -1) {\n    return list[!shouldGetNext && isCycleAllowed ? list.length - 1 : 0];\n  }\n\n  const listLength = list.length;\n  index += shouldGetNext ? 1 : -1;\n\n  if (isCycleAllowed) {\n    index = (index + listLength) % listLength;\n  }\n\n  return list[Math.max(0, Math.min(index, listLength - 1))];\n};\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): dom/event-handler.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst namespaceRegex = /[^.]*(?=\\..*)\\.|.*/;\nconst stripNameRegex = /\\..*/;\nconst stripUidRegex = /::\\d+$/;\nconst eventRegistry = {}; // Events storage\n\nlet uidEvent = 1;\nconst customEvents = {\n  mouseenter: 'mouseover',\n  mouseleave: 'mouseout'\n};\nconst customEventsRegex = /^(mouseenter|mouseleave)/i;\nconst nativeEvents = new Set(['click', 'dblclick', 'mouseup', 'mousedown', 'contextmenu', 'mousewheel', 'DOMMouseScroll', 'mouseover', 'mouseout', 'mousemove', 'selectstart', 'selectend', 'keydown', 'keypress', 'keyup', 'orientationchange', 'touchstart', 'touchmove', 'touchend', 'touchcancel', 'pointerdown', 'pointermove', 'pointerup', 'pointerleave', 'pointercancel', 'gesturestart', 'gesturechange', 'gestureend', 'focus', 'blur', 'change', 'reset', 'select', 'submit', 'focusin', 'focusout', 'load', 'unload', 'beforeunload', 'resize', 'move', 'DOMContentLoaded', 'readystatechange', 'error', 'abort', 'scroll']);\n/**\n * ------------------------------------------------------------------------\n * Private methods\n * ------------------------------------------------------------------------\n */\n\nfunction getUidEvent(element, uid) {\n  return uid && `${uid}::${uidEvent++}` || element.uidEvent || uidEvent++;\n}\n\nfunction getEvent(element) {\n  const uid = getUidEvent(element);\n  element.uidEvent = uid;\n  eventRegistry[uid] = eventRegistry[uid] || {};\n  return eventRegistry[uid];\n}\n\nfunction bootstrapHandler(element, fn) {\n  return function handler(event) {\n    event.delegateTarget = element;\n\n    if (handler.oneOff) {\n      EventHandler.off(element, event.type, fn);\n    }\n\n    return fn.apply(element, [event]);\n  };\n}\n\nfunction bootstrapDelegationHandler(element, selector, fn) {\n  return function handler(event) {\n    const domElements = element.querySelectorAll(selector);\n\n    for (let {\n      target\n    } = event; target && target !== this; target = target.parentNode) {\n      for (let i = domElements.length; i--;) {\n        if (domElements[i] === target) {\n          event.delegateTarget = target;\n\n          if (handler.oneOff) {\n            // eslint-disable-next-line unicorn/consistent-destructuring\n            EventHandler.off(element, event.type, selector, fn);\n          }\n\n          return fn.apply(target, [event]);\n        }\n      }\n    } // To please ESLint\n\n\n    return null;\n  };\n}\n\nfunction findHandler(events, handler, delegationSelector = null) {\n  const uidEventList = Object.keys(events);\n\n  for (let i = 0, len = uidEventList.length; i < len; i++) {\n    const event = events[uidEventList[i]];\n\n    if (event.originalHandler === handler && event.delegationSelector === delegationSelector) {\n      return event;\n    }\n  }\n\n  return null;\n}\n\nfunction normalizeParams(originalTypeEvent, handler, delegationFn) {\n  const delegation = typeof handler === 'string';\n  const originalHandler = delegation ? delegationFn : handler;\n  let typeEvent = getTypeEvent(originalTypeEvent);\n  const isNative = nativeEvents.has(typeEvent);\n\n  if (!isNative) {\n    typeEvent = originalTypeEvent;\n  }\n\n  return [delegation, originalHandler, typeEvent];\n}\n\nfunction addHandler(element, originalTypeEvent, handler, delegationFn, oneOff) {\n  if (typeof originalTypeEvent !== 'string' || !element) {\n    return;\n  }\n\n  if (!handler) {\n    handler = delegationFn;\n    delegationFn = null;\n  } // in case of mouseenter or mouseleave wrap the handler within a function that checks for its DOM position\n  // this prevents the handler from being dispatched the same way as mouseover or mouseout does\n\n\n  if (customEventsRegex.test(originalTypeEvent)) {\n    const wrapFn = fn => {\n      return function (event) {\n        if (!event.relatedTarget || event.relatedTarget !== event.delegateTarget && !event.delegateTarget.contains(event.relatedTarget)) {\n          return fn.call(this, event);\n        }\n      };\n    };\n\n    if (delegationFn) {\n      delegationFn = wrapFn(delegationFn);\n    } else {\n      handler = wrapFn(handler);\n    }\n  }\n\n  const [delegation, originalHandler, typeEvent] = normalizeParams(originalTypeEvent, handler, delegationFn);\n  const events = getEvent(element);\n  const handlers = events[typeEvent] || (events[typeEvent] = {});\n  const previousFn = findHandler(handlers, originalHandler, delegation ? handler : null);\n\n  if (previousFn) {\n    previousFn.oneOff = previousFn.oneOff && oneOff;\n    return;\n  }\n\n  const uid = getUidEvent(originalHandler, originalTypeEvent.replace(namespaceRegex, ''));\n  const fn = delegation ? bootstrapDelegationHandler(element, handler, delegationFn) : bootstrapHandler(element, handler);\n  fn.delegationSelector = delegation ? handler : null;\n  fn.originalHandler = originalHandler;\n  fn.oneOff = oneOff;\n  fn.uidEvent = uid;\n  handlers[uid] = fn;\n  element.addEventListener(typeEvent, fn, delegation);\n}\n\nfunction removeHandler(element, events, typeEvent, handler, delegationSelector) {\n  const fn = findHandler(events[typeEvent], handler, delegationSelector);\n\n  if (!fn) {\n    return;\n  }\n\n  element.removeEventListener(typeEvent, fn, Boolean(delegationSelector));\n  delete events[typeEvent][fn.uidEvent];\n}\n\nfunction removeNamespacedHandlers(element, events, typeEvent, namespace) {\n  const storeElementEvent = events[typeEvent] || {};\n  Object.keys(storeElementEvent).forEach(handlerKey => {\n    if (handlerKey.includes(namespace)) {\n      const event = storeElementEvent[handlerKey];\n      removeHandler(element, events, typeEvent, event.originalHandler, event.delegationSelector);\n    }\n  });\n}\n\nfunction getTypeEvent(event) {\n  // allow to get the native events from namespaced events ('click.bs.button' --> 'click')\n  event = event.replace(stripNameRegex, '');\n  return customEvents[event] || event;\n}\n\nconst EventHandler = {\n  on(element, event, handler, delegationFn) {\n    addHandler(element, event, handler, delegationFn, false);\n  },\n\n  one(element, event, handler, delegationFn) {\n    addHandler(element, event, handler, delegationFn, true);\n  },\n\n  off(element, originalTypeEvent, handler, delegationFn) {\n    if (typeof originalTypeEvent !== 'string' || !element) {\n      return;\n    }\n\n    const [delegation, originalHandler, typeEvent] = normalizeParams(originalTypeEvent, handler, delegationFn);\n    const inNamespace = typeEvent !== originalTypeEvent;\n    const events = getEvent(element);\n    const isNamespace = originalTypeEvent.startsWith('.');\n\n    if (typeof originalHandler !== 'undefined') {\n      // Simplest case: handler is passed, remove that listener ONLY.\n      if (!events || !events[typeEvent]) {\n        return;\n      }\n\n      removeHandler(element, events, typeEvent, originalHandler, delegation ? handler : null);\n      return;\n    }\n\n    if (isNamespace) {\n      Object.keys(events).forEach(elementEvent => {\n        removeNamespacedHandlers(element, events, elementEvent, originalTypeEvent.slice(1));\n      });\n    }\n\n    const storeElementEvent = events[typeEvent] || {};\n    Object.keys(storeElementEvent).forEach(keyHandlers => {\n      const handlerKey = keyHandlers.replace(stripUidRegex, '');\n\n      if (!inNamespace || originalTypeEvent.includes(handlerKey)) {\n        const event = storeElementEvent[keyHandlers];\n        removeHandler(element, events, typeEvent, event.originalHandler, event.delegationSelector);\n      }\n    });\n  },\n\n  trigger(element, event, args) {\n    if (typeof event !== 'string' || !element) {\n      return null;\n    }\n\n    const $ = getjQuery();\n    const typeEvent = getTypeEvent(event);\n    const inNamespace = event !== typeEvent;\n    const isNative = nativeEvents.has(typeEvent);\n    let jQueryEvent;\n    let bubbles = true;\n    let nativeDispatch = true;\n    let defaultPrevented = false;\n    let evt = null;\n\n    if (inNamespace && $) {\n      jQueryEvent = $.Event(event, args);\n      $(element).trigger(jQueryEvent);\n      bubbles = !jQueryEvent.isPropagationStopped();\n      nativeDispatch = !jQueryEvent.isImmediatePropagationStopped();\n      defaultPrevented = jQueryEvent.isDefaultPrevented();\n    }\n\n    if (isNative) {\n      evt = document.createEvent('HTMLEvents');\n      evt.initEvent(typeEvent, bubbles, true);\n    } else {\n      evt = new CustomEvent(event, {\n        bubbles,\n        cancelable: true\n      });\n    } // merge custom information in our event\n\n\n    if (typeof args !== 'undefined') {\n      Object.keys(args).forEach(key => {\n        Object.defineProperty(evt, key, {\n          get() {\n            return args[key];\n          }\n\n        });\n      });\n    }\n\n    if (defaultPrevented) {\n      evt.preventDefault();\n    }\n\n    if (nativeDispatch) {\n      element.dispatchEvent(evt);\n    }\n\n    if (evt.defaultPrevented && typeof jQueryEvent !== 'undefined') {\n      jQueryEvent.preventDefault();\n    }\n\n    return evt;\n  }\n\n};\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): dom/data.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\nconst elementMap = new Map();\nvar Data = {\n  set(element, key, instance) {\n    if (!elementMap.has(element)) {\n      elementMap.set(element, new Map());\n    }\n\n    const instanceMap = elementMap.get(element); // make it clear we only want one instance per element\n    // can be removed later when multiple key/instances are fine to be used\n\n    if (!instanceMap.has(key) && instanceMap.size !== 0) {\n      // eslint-disable-next-line no-console\n      console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(instanceMap.keys())[0]}.`);\n      return;\n    }\n\n    instanceMap.set(key, instance);\n  },\n\n  get(element, key) {\n    if (elementMap.has(element)) {\n      return elementMap.get(element).get(key) || null;\n    }\n\n    return null;\n  },\n\n  remove(element, key) {\n    if (!elementMap.has(element)) {\n      return;\n    }\n\n    const instanceMap = elementMap.get(element);\n    instanceMap.delete(key); // free up element references if there are no instances left for an element\n\n    if (instanceMap.size === 0) {\n      elementMap.delete(element);\n    }\n  }\n\n};\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): base-component.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst VERSION = '5.0.2';\n\nclass BaseComponent {\n  constructor(element) {\n    element = getElement(element);\n\n    if (!element) {\n      return;\n    }\n\n    this._element = element;\n    Data.set(this._element, this.constructor.DATA_KEY, this);\n  }\n\n  dispose() {\n    Data.remove(this._element, this.constructor.DATA_KEY);\n    EventHandler.off(this._element, this.constructor.EVENT_KEY);\n    Object.getOwnPropertyNames(this).forEach(propertyName => {\n      this[propertyName] = null;\n    });\n  }\n\n  _queueCallback(callback, element, isAnimated = true) {\n    executeAfterTransition(callback, element, isAnimated);\n  }\n  /** Static */\n\n\n  static getInstance(element) {\n    return Data.get(element, this.DATA_KEY);\n  }\n\n  static getOrCreateInstance(element, config = {}) {\n    return this.getInstance(element) || new this(element, typeof config === 'object' ? config : null);\n  }\n\n  static get VERSION() {\n    return VERSION;\n  }\n\n  static get NAME() {\n    throw new Error('You have to implement the static method \"NAME\", for each component!');\n  }\n\n  static get DATA_KEY() {\n    return `bs.${this.NAME}`;\n  }\n\n  static get EVENT_KEY() {\n    return `.${this.DATA_KEY}`;\n  }\n\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): alert.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$c = 'alert';\nconst DATA_KEY$b = 'bs.alert';\nconst EVENT_KEY$b = `.${DATA_KEY$b}`;\nconst DATA_API_KEY$8 = '.data-api';\nconst SELECTOR_DISMISS = '[data-bs-dismiss=\"alert\"]';\nconst EVENT_CLOSE = `close${EVENT_KEY$b}`;\nconst EVENT_CLOSED = `closed${EVENT_KEY$b}`;\nconst EVENT_CLICK_DATA_API$7 = `click${EVENT_KEY$b}${DATA_API_KEY$8}`;\nconst CLASS_NAME_ALERT = 'alert';\nconst CLASS_NAME_FADE$6 = 'fade';\nconst CLASS_NAME_SHOW$9 = 'show';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Alert extends BaseComponent {\n  // Getters\n  static get NAME() {\n    return NAME$c;\n  } // Public\n\n\n  close(element) {\n    const rootElement = element ? this._getRootElement(element) : this._element;\n\n    const customEvent = this._triggerCloseEvent(rootElement);\n\n    if (customEvent === null || customEvent.defaultPrevented) {\n      return;\n    }\n\n    this._removeElement(rootElement);\n  } // Private\n\n\n  _getRootElement(element) {\n    return getElementFromSelector(element) || element.closest(`.${CLASS_NAME_ALERT}`);\n  }\n\n  _triggerCloseEvent(element) {\n    return EventHandler.trigger(element, EVENT_CLOSE);\n  }\n\n  _removeElement(element) {\n    element.classList.remove(CLASS_NAME_SHOW$9);\n    const isAnimated = element.classList.contains(CLASS_NAME_FADE$6);\n\n    this._queueCallback(() => this._destroyElement(element), element, isAnimated);\n  }\n\n  _destroyElement(element) {\n    element.remove();\n    EventHandler.trigger(element, EVENT_CLOSED);\n  } // Static\n\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Alert.getOrCreateInstance(this);\n\n      if (config === 'close') {\n        data[config](this);\n      }\n    });\n  }\n\n  static handleDismiss(alertInstance) {\n    return function (event) {\n      if (event) {\n        event.preventDefault();\n      }\n\n      alertInstance.close(this);\n    };\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$7, SELECTOR_DISMISS, Alert.handleDismiss(new Alert()));\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Alert to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Alert);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): button.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$b = 'button';\nconst DATA_KEY$a = 'bs.button';\nconst EVENT_KEY$a = `.${DATA_KEY$a}`;\nconst DATA_API_KEY$7 = '.data-api';\nconst CLASS_NAME_ACTIVE$3 = 'active';\nconst SELECTOR_DATA_TOGGLE$5 = '[data-bs-toggle=\"button\"]';\nconst EVENT_CLICK_DATA_API$6 = `click${EVENT_KEY$a}${DATA_API_KEY$7}`;\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Button extends BaseComponent {\n  // Getters\n  static get NAME() {\n    return NAME$b;\n  } // Public\n\n\n  toggle() {\n    // Toggle class and sync the `aria-pressed` attribute with the return value of the `.toggle()` method\n    this._element.setAttribute('aria-pressed', this._element.classList.toggle(CLASS_NAME_ACTIVE$3));\n  } // Static\n\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Button.getOrCreateInstance(this);\n\n      if (config === 'toggle') {\n        data[config]();\n      }\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$6, SELECTOR_DATA_TOGGLE$5, event => {\n  event.preventDefault();\n  const button = event.target.closest(SELECTOR_DATA_TOGGLE$5);\n  const data = Button.getOrCreateInstance(button);\n  data.toggle();\n});\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Button to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Button);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): dom/manipulator.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\nfunction normalizeData(val) {\n  if (val === 'true') {\n    return true;\n  }\n\n  if (val === 'false') {\n    return false;\n  }\n\n  if (val === Number(val).toString()) {\n    return Number(val);\n  }\n\n  if (val === '' || val === 'null') {\n    return null;\n  }\n\n  return val;\n}\n\nfunction normalizeDataKey(key) {\n  return key.replace(/[A-Z]/g, chr => `-${chr.toLowerCase()}`);\n}\n\nconst Manipulator = {\n  setDataAttribute(element, key, value) {\n    element.setAttribute(`data-bs-${normalizeDataKey(key)}`, value);\n  },\n\n  removeDataAttribute(element, key) {\n    element.removeAttribute(`data-bs-${normalizeDataKey(key)}`);\n  },\n\n  getDataAttributes(element) {\n    if (!element) {\n      return {};\n    }\n\n    const attributes = {};\n    Object.keys(element.dataset).filter(key => key.startsWith('bs')).forEach(key => {\n      let pureKey = key.replace(/^bs/, '');\n      pureKey = pureKey.charAt(0).toLowerCase() + pureKey.slice(1, pureKey.length);\n      attributes[pureKey] = normalizeData(element.dataset[key]);\n    });\n    return attributes;\n  },\n\n  getDataAttribute(element, key) {\n    return normalizeData(element.getAttribute(`data-bs-${normalizeDataKey(key)}`));\n  },\n\n  offset(element) {\n    const rect = element.getBoundingClientRect();\n    return {\n      top: rect.top + document.body.scrollTop,\n      left: rect.left + document.body.scrollLeft\n    };\n  },\n\n  position(element) {\n    return {\n      top: element.offsetTop,\n      left: element.offsetLeft\n    };\n  }\n\n};\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): carousel.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$a = 'carousel';\nconst DATA_KEY$9 = 'bs.carousel';\nconst EVENT_KEY$9 = `.${DATA_KEY$9}`;\nconst DATA_API_KEY$6 = '.data-api';\nconst ARROW_LEFT_KEY = 'ArrowLeft';\nconst ARROW_RIGHT_KEY = 'ArrowRight';\nconst TOUCHEVENT_COMPAT_WAIT = 500; // Time for mouse compat events to fire after touch\n\nconst SWIPE_THRESHOLD = 40;\nconst Default$9 = {\n  interval: 5000,\n  keyboard: true,\n  slide: false,\n  pause: 'hover',\n  wrap: true,\n  touch: true\n};\nconst DefaultType$9 = {\n  interval: '(number|boolean)',\n  keyboard: 'boolean',\n  slide: '(boolean|string)',\n  pause: '(string|boolean)',\n  wrap: 'boolean',\n  touch: 'boolean'\n};\nconst ORDER_NEXT = 'next';\nconst ORDER_PREV = 'prev';\nconst DIRECTION_LEFT = 'left';\nconst DIRECTION_RIGHT = 'right';\nconst KEY_TO_DIRECTION = {\n  [ARROW_LEFT_KEY]: DIRECTION_RIGHT,\n  [ARROW_RIGHT_KEY]: DIRECTION_LEFT\n};\nconst EVENT_SLIDE = `slide${EVENT_KEY$9}`;\nconst EVENT_SLID = `slid${EVENT_KEY$9}`;\nconst EVENT_KEYDOWN = `keydown${EVENT_KEY$9}`;\nconst EVENT_MOUSEENTER = `mouseenter${EVENT_KEY$9}`;\nconst EVENT_MOUSELEAVE = `mouseleave${EVENT_KEY$9}`;\nconst EVENT_TOUCHSTART = `touchstart${EVENT_KEY$9}`;\nconst EVENT_TOUCHMOVE = `touchmove${EVENT_KEY$9}`;\nconst EVENT_TOUCHEND = `touchend${EVENT_KEY$9}`;\nconst EVENT_POINTERDOWN = `pointerdown${EVENT_KEY$9}`;\nconst EVENT_POINTERUP = `pointerup${EVENT_KEY$9}`;\nconst EVENT_DRAG_START = `dragstart${EVENT_KEY$9}`;\nconst EVENT_LOAD_DATA_API$2 = `load${EVENT_KEY$9}${DATA_API_KEY$6}`;\nconst EVENT_CLICK_DATA_API$5 = `click${EVENT_KEY$9}${DATA_API_KEY$6}`;\nconst CLASS_NAME_CAROUSEL = 'carousel';\nconst CLASS_NAME_ACTIVE$2 = 'active';\nconst CLASS_NAME_SLIDE = 'slide';\nconst CLASS_NAME_END = 'carousel-item-end';\nconst CLASS_NAME_START = 'carousel-item-start';\nconst CLASS_NAME_NEXT = 'carousel-item-next';\nconst CLASS_NAME_PREV = 'carousel-item-prev';\nconst CLASS_NAME_POINTER_EVENT = 'pointer-event';\nconst SELECTOR_ACTIVE$1 = '.active';\nconst SELECTOR_ACTIVE_ITEM = '.active.carousel-item';\nconst SELECTOR_ITEM = '.carousel-item';\nconst SELECTOR_ITEM_IMG = '.carousel-item img';\nconst SELECTOR_NEXT_PREV = '.carousel-item-next, .carousel-item-prev';\nconst SELECTOR_INDICATORS = '.carousel-indicators';\nconst SELECTOR_INDICATOR = '[data-bs-target]';\nconst SELECTOR_DATA_SLIDE = '[data-bs-slide], [data-bs-slide-to]';\nconst SELECTOR_DATA_RIDE = '[data-bs-ride=\"carousel\"]';\nconst POINTER_TYPE_TOUCH = 'touch';\nconst POINTER_TYPE_PEN = 'pen';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Carousel extends BaseComponent {\n  constructor(element, config) {\n    super(element);\n    this._items = null;\n    this._interval = null;\n    this._activeElement = null;\n    this._isPaused = false;\n    this._isSliding = false;\n    this.touchTimeout = null;\n    this.touchStartX = 0;\n    this.touchDeltaX = 0;\n    this._config = this._getConfig(config);\n    this._indicatorsElement = SelectorEngine.findOne(SELECTOR_INDICATORS, this._element);\n    this._touchSupported = 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0;\n    this._pointerEvent = Boolean(window.PointerEvent);\n\n    this._addEventListeners();\n  } // Getters\n\n\n  static get Default() {\n    return Default$9;\n  }\n\n  static get NAME() {\n    return NAME$a;\n  } // Public\n\n\n  next() {\n    this._slide(ORDER_NEXT);\n  }\n\n  nextWhenVisible() {\n    // Don't call next when the page isn't visible\n    // or the carousel or its parent isn't visible\n    if (!document.hidden && isVisible(this._element)) {\n      this.next();\n    }\n  }\n\n  prev() {\n    this._slide(ORDER_PREV);\n  }\n\n  pause(event) {\n    if (!event) {\n      this._isPaused = true;\n    }\n\n    if (SelectorEngine.findOne(SELECTOR_NEXT_PREV, this._element)) {\n      triggerTransitionEnd(this._element);\n      this.cycle(true);\n    }\n\n    clearInterval(this._interval);\n    this._interval = null;\n  }\n\n  cycle(event) {\n    if (!event) {\n      this._isPaused = false;\n    }\n\n    if (this._interval) {\n      clearInterval(this._interval);\n      this._interval = null;\n    }\n\n    if (this._config && this._config.interval && !this._isPaused) {\n      this._updateInterval();\n\n      this._interval = setInterval((document.visibilityState ? this.nextWhenVisible : this.next).bind(this), this._config.interval);\n    }\n  }\n\n  to(index) {\n    this._activeElement = SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element);\n\n    const activeIndex = this._getItemIndex(this._activeElement);\n\n    if (index > this._items.length - 1 || index < 0) {\n      return;\n    }\n\n    if (this._isSliding) {\n      EventHandler.one(this._element, EVENT_SLID, () => this.to(index));\n      return;\n    }\n\n    if (activeIndex === index) {\n      this.pause();\n      this.cycle();\n      return;\n    }\n\n    const order = index > activeIndex ? ORDER_NEXT : ORDER_PREV;\n\n    this._slide(order, this._items[index]);\n  } // Private\n\n\n  _getConfig(config) {\n    config = { ...Default$9,\n      ...Manipulator.getDataAttributes(this._element),\n      ...(typeof config === 'object' ? config : {})\n    };\n    typeCheckConfig(NAME$a, config, DefaultType$9);\n    return config;\n  }\n\n  _handleSwipe() {\n    const absDeltax = Math.abs(this.touchDeltaX);\n\n    if (absDeltax <= SWIPE_THRESHOLD) {\n      return;\n    }\n\n    const direction = absDeltax / this.touchDeltaX;\n    this.touchDeltaX = 0;\n\n    if (!direction) {\n      return;\n    }\n\n    this._slide(direction > 0 ? DIRECTION_RIGHT : DIRECTION_LEFT);\n  }\n\n  _addEventListeners() {\n    if (this._config.keyboard) {\n      EventHandler.on(this._element, EVENT_KEYDOWN, event => this._keydown(event));\n    }\n\n    if (this._config.pause === 'hover') {\n      EventHandler.on(this._element, EVENT_MOUSEENTER, event => this.pause(event));\n      EventHandler.on(this._element, EVENT_MOUSELEAVE, event => this.cycle(event));\n    }\n\n    if (this._config.touch && this._touchSupported) {\n      this._addTouchEventListeners();\n    }\n  }\n\n  _addTouchEventListeners() {\n    const start = event => {\n      if (this._pointerEvent && (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH)) {\n        this.touchStartX = event.clientX;\n      } else if (!this._pointerEvent) {\n        this.touchStartX = event.touches[0].clientX;\n      }\n    };\n\n    const move = event => {\n      // ensure swiping with one touch and not pinching\n      this.touchDeltaX = event.touches && event.touches.length > 1 ? 0 : event.touches[0].clientX - this.touchStartX;\n    };\n\n    const end = event => {\n      if (this._pointerEvent && (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH)) {\n        this.touchDeltaX = event.clientX - this.touchStartX;\n      }\n\n      this._handleSwipe();\n\n      if (this._config.pause === 'hover') {\n        // If it's a touch-enabled device, mouseenter/leave are fired as\n        // part of the mouse compatibility events on first tap - the carousel\n        // would stop cycling until user tapped out of it;\n        // here, we listen for touchend, explicitly pause the carousel\n        // (as if it's the second time we tap on it, mouseenter compat event\n        // is NOT fired) and after a timeout (to allow for mouse compatibility\n        // events to fire) we explicitly restart cycling\n        this.pause();\n\n        if (this.touchTimeout) {\n          clearTimeout(this.touchTimeout);\n        }\n\n        this.touchTimeout = setTimeout(event => this.cycle(event), TOUCHEVENT_COMPAT_WAIT + this._config.interval);\n      }\n    };\n\n    SelectorEngine.find(SELECTOR_ITEM_IMG, this._element).forEach(itemImg => {\n      EventHandler.on(itemImg, EVENT_DRAG_START, e => e.preventDefault());\n    });\n\n    if (this._pointerEvent) {\n      EventHandler.on(this._element, EVENT_POINTERDOWN, event => start(event));\n      EventHandler.on(this._element, EVENT_POINTERUP, event => end(event));\n\n      this._element.classList.add(CLASS_NAME_POINTER_EVENT);\n    } else {\n      EventHandler.on(this._element, EVENT_TOUCHSTART, event => start(event));\n      EventHandler.on(this._element, EVENT_TOUCHMOVE, event => move(event));\n      EventHandler.on(this._element, EVENT_TOUCHEND, event => end(event));\n    }\n  }\n\n  _keydown(event) {\n    if (/input|textarea/i.test(event.target.tagName)) {\n      return;\n    }\n\n    const direction = KEY_TO_DIRECTION[event.key];\n\n    if (direction) {\n      event.preventDefault();\n\n      this._slide(direction);\n    }\n  }\n\n  _getItemIndex(element) {\n    this._items = element && element.parentNode ? SelectorEngine.find(SELECTOR_ITEM, element.parentNode) : [];\n    return this._items.indexOf(element);\n  }\n\n  _getItemByOrder(order, activeElement) {\n    const isNext = order === ORDER_NEXT;\n    return getNextActiveElement(this._items, activeElement, isNext, this._config.wrap);\n  }\n\n  _triggerSlideEvent(relatedTarget, eventDirectionName) {\n    const targetIndex = this._getItemIndex(relatedTarget);\n\n    const fromIndex = this._getItemIndex(SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element));\n\n    return EventHandler.trigger(this._element, EVENT_SLIDE, {\n      relatedTarget,\n      direction: eventDirectionName,\n      from: fromIndex,\n      to: targetIndex\n    });\n  }\n\n  _setActiveIndicatorElement(element) {\n    if (this._indicatorsElement) {\n      const activeIndicator = SelectorEngine.findOne(SELECTOR_ACTIVE$1, this._indicatorsElement);\n      activeIndicator.classList.remove(CLASS_NAME_ACTIVE$2);\n      activeIndicator.removeAttribute('aria-current');\n      const indicators = SelectorEngine.find(SELECTOR_INDICATOR, this._indicatorsElement);\n\n      for (let i = 0; i < indicators.length; i++) {\n        if (Number.parseInt(indicators[i].getAttribute('data-bs-slide-to'), 10) === this._getItemIndex(element)) {\n          indicators[i].classList.add(CLASS_NAME_ACTIVE$2);\n          indicators[i].setAttribute('aria-current', 'true');\n          break;\n        }\n      }\n    }\n  }\n\n  _updateInterval() {\n    const element = this._activeElement || SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element);\n\n    if (!element) {\n      return;\n    }\n\n    const elementInterval = Number.parseInt(element.getAttribute('data-bs-interval'), 10);\n\n    if (elementInterval) {\n      this._config.defaultInterval = this._config.defaultInterval || this._config.interval;\n      this._config.interval = elementInterval;\n    } else {\n      this._config.interval = this._config.defaultInterval || this._config.interval;\n    }\n  }\n\n  _slide(directionOrOrder, element) {\n    const order = this._directionToOrder(directionOrOrder);\n\n    const activeElement = SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element);\n\n    const activeElementIndex = this._getItemIndex(activeElement);\n\n    const nextElement = element || this._getItemByOrder(order, activeElement);\n\n    const nextElementIndex = this._getItemIndex(nextElement);\n\n    const isCycling = Boolean(this._interval);\n    const isNext = order === ORDER_NEXT;\n    const directionalClassName = isNext ? CLASS_NAME_START : CLASS_NAME_END;\n    const orderClassName = isNext ? CLASS_NAME_NEXT : CLASS_NAME_PREV;\n\n    const eventDirectionName = this._orderToDirection(order);\n\n    if (nextElement && nextElement.classList.contains(CLASS_NAME_ACTIVE$2)) {\n      this._isSliding = false;\n      return;\n    }\n\n    if (this._isSliding) {\n      return;\n    }\n\n    const slideEvent = this._triggerSlideEvent(nextElement, eventDirectionName);\n\n    if (slideEvent.defaultPrevented) {\n      return;\n    }\n\n    if (!activeElement || !nextElement) {\n      // Some weirdness is happening, so we bail\n      return;\n    }\n\n    this._isSliding = true;\n\n    if (isCycling) {\n      this.pause();\n    }\n\n    this._setActiveIndicatorElement(nextElement);\n\n    this._activeElement = nextElement;\n\n    const triggerSlidEvent = () => {\n      EventHandler.trigger(this._element, EVENT_SLID, {\n        relatedTarget: nextElement,\n        direction: eventDirectionName,\n        from: activeElementIndex,\n        to: nextElementIndex\n      });\n    };\n\n    if (this._element.classList.contains(CLASS_NAME_SLIDE)) {\n      nextElement.classList.add(orderClassName);\n      reflow(nextElement);\n      activeElement.classList.add(directionalClassName);\n      nextElement.classList.add(directionalClassName);\n\n      const completeCallBack = () => {\n        nextElement.classList.remove(directionalClassName, orderClassName);\n        nextElement.classList.add(CLASS_NAME_ACTIVE$2);\n        activeElement.classList.remove(CLASS_NAME_ACTIVE$2, orderClassName, directionalClassName);\n        this._isSliding = false;\n        setTimeout(triggerSlidEvent, 0);\n      };\n\n      this._queueCallback(completeCallBack, activeElement, true);\n    } else {\n      activeElement.classList.remove(CLASS_NAME_ACTIVE$2);\n      nextElement.classList.add(CLASS_NAME_ACTIVE$2);\n      this._isSliding = false;\n      triggerSlidEvent();\n    }\n\n    if (isCycling) {\n      this.cycle();\n    }\n  }\n\n  _directionToOrder(direction) {\n    if (![DIRECTION_RIGHT, DIRECTION_LEFT].includes(direction)) {\n      return direction;\n    }\n\n    if (isRTL()) {\n      return direction === DIRECTION_LEFT ? ORDER_PREV : ORDER_NEXT;\n    }\n\n    return direction === DIRECTION_LEFT ? ORDER_NEXT : ORDER_PREV;\n  }\n\n  _orderToDirection(order) {\n    if (![ORDER_NEXT, ORDER_PREV].includes(order)) {\n      return order;\n    }\n\n    if (isRTL()) {\n      return order === ORDER_PREV ? DIRECTION_LEFT : DIRECTION_RIGHT;\n    }\n\n    return order === ORDER_PREV ? DIRECTION_RIGHT : DIRECTION_LEFT;\n  } // Static\n\n\n  static carouselInterface(element, config) {\n    const data = Carousel.getOrCreateInstance(element, config);\n    let {\n      _config\n    } = data;\n\n    if (typeof config === 'object') {\n      _config = { ..._config,\n        ...config\n      };\n    }\n\n    const action = typeof config === 'string' ? config : _config.slide;\n\n    if (typeof config === 'number') {\n      data.to(config);\n    } else if (typeof action === 'string') {\n      if (typeof data[action] === 'undefined') {\n        throw new TypeError(`No method named \"${action}\"`);\n      }\n\n      data[action]();\n    } else if (_config.interval && _config.ride) {\n      data.pause();\n      data.cycle();\n    }\n  }\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      Carousel.carouselInterface(this, config);\n    });\n  }\n\n  static dataApiClickHandler(event) {\n    const target = getElementFromSelector(this);\n\n    if (!target || !target.classList.contains(CLASS_NAME_CAROUSEL)) {\n      return;\n    }\n\n    const config = { ...Manipulator.getDataAttributes(target),\n      ...Manipulator.getDataAttributes(this)\n    };\n    const slideIndex = this.getAttribute('data-bs-slide-to');\n\n    if (slideIndex) {\n      config.interval = false;\n    }\n\n    Carousel.carouselInterface(target, config);\n\n    if (slideIndex) {\n      Carousel.getInstance(target).to(slideIndex);\n    }\n\n    event.preventDefault();\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$5, SELECTOR_DATA_SLIDE, Carousel.dataApiClickHandler);\nEventHandler.on(window, EVENT_LOAD_DATA_API$2, () => {\n  const carousels = SelectorEngine.find(SELECTOR_DATA_RIDE);\n\n  for (let i = 0, len = carousels.length; i < len; i++) {\n    Carousel.carouselInterface(carousels[i], Carousel.getInstance(carousels[i]));\n  }\n});\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Carousel to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Carousel);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): collapse.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$9 = 'collapse';\nconst DATA_KEY$8 = 'bs.collapse';\nconst EVENT_KEY$8 = `.${DATA_KEY$8}`;\nconst DATA_API_KEY$5 = '.data-api';\nconst Default$8 = {\n  toggle: true,\n  parent: ''\n};\nconst DefaultType$8 = {\n  toggle: 'boolean',\n  parent: '(string|element)'\n};\nconst EVENT_SHOW$5 = `show${EVENT_KEY$8}`;\nconst EVENT_SHOWN$5 = `shown${EVENT_KEY$8}`;\nconst EVENT_HIDE$5 = `hide${EVENT_KEY$8}`;\nconst EVENT_HIDDEN$5 = `hidden${EVENT_KEY$8}`;\nconst EVENT_CLICK_DATA_API$4 = `click${EVENT_KEY$8}${DATA_API_KEY$5}`;\nconst CLASS_NAME_SHOW$8 = 'show';\nconst CLASS_NAME_COLLAPSE = 'collapse';\nconst CLASS_NAME_COLLAPSING = 'collapsing';\nconst CLASS_NAME_COLLAPSED = 'collapsed';\nconst WIDTH = 'width';\nconst HEIGHT = 'height';\nconst SELECTOR_ACTIVES = '.show, .collapsing';\nconst SELECTOR_DATA_TOGGLE$4 = '[data-bs-toggle=\"collapse\"]';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Collapse extends BaseComponent {\n  constructor(element, config) {\n    super(element);\n    this._isTransitioning = false;\n    this._config = this._getConfig(config);\n    this._triggerArray = SelectorEngine.find(`${SELECTOR_DATA_TOGGLE$4}[href=\"#${this._element.id}\"],` + `${SELECTOR_DATA_TOGGLE$4}[data-bs-target=\"#${this._element.id}\"]`);\n    const toggleList = SelectorEngine.find(SELECTOR_DATA_TOGGLE$4);\n\n    for (let i = 0, len = toggleList.length; i < len; i++) {\n      const elem = toggleList[i];\n      const selector = getSelectorFromElement(elem);\n      const filterElement = SelectorEngine.find(selector).filter(foundElem => foundElem === this._element);\n\n      if (selector !== null && filterElement.length) {\n        this._selector = selector;\n\n        this._triggerArray.push(elem);\n      }\n    }\n\n    this._parent = this._config.parent ? this._getParent() : null;\n\n    if (!this._config.parent) {\n      this._addAriaAndCollapsedClass(this._element, this._triggerArray);\n    }\n\n    if (this._config.toggle) {\n      this.toggle();\n    }\n  } // Getters\n\n\n  static get Default() {\n    return Default$8;\n  }\n\n  static get NAME() {\n    return NAME$9;\n  } // Public\n\n\n  toggle() {\n    if (this._element.classList.contains(CLASS_NAME_SHOW$8)) {\n      this.hide();\n    } else {\n      this.show();\n    }\n  }\n\n  show() {\n    if (this._isTransitioning || this._element.classList.contains(CLASS_NAME_SHOW$8)) {\n      return;\n    }\n\n    let actives;\n    let activesData;\n\n    if (this._parent) {\n      actives = SelectorEngine.find(SELECTOR_ACTIVES, this._parent).filter(elem => {\n        if (typeof this._config.parent === 'string') {\n          return elem.getAttribute('data-bs-parent') === this._config.parent;\n        }\n\n        return elem.classList.contains(CLASS_NAME_COLLAPSE);\n      });\n\n      if (actives.length === 0) {\n        actives = null;\n      }\n    }\n\n    const container = SelectorEngine.findOne(this._selector);\n\n    if (actives) {\n      const tempActiveData = actives.find(elem => container !== elem);\n      activesData = tempActiveData ? Collapse.getInstance(tempActiveData) : null;\n\n      if (activesData && activesData._isTransitioning) {\n        return;\n      }\n    }\n\n    const startEvent = EventHandler.trigger(this._element, EVENT_SHOW$5);\n\n    if (startEvent.defaultPrevented) {\n      return;\n    }\n\n    if (actives) {\n      actives.forEach(elemActive => {\n        if (container !== elemActive) {\n          Collapse.collapseInterface(elemActive, 'hide');\n        }\n\n        if (!activesData) {\n          Data.set(elemActive, DATA_KEY$8, null);\n        }\n      });\n    }\n\n    const dimension = this._getDimension();\n\n    this._element.classList.remove(CLASS_NAME_COLLAPSE);\n\n    this._element.classList.add(CLASS_NAME_COLLAPSING);\n\n    this._element.style[dimension] = 0;\n\n    if (this._triggerArray.length) {\n      this._triggerArray.forEach(element => {\n        element.classList.remove(CLASS_NAME_COLLAPSED);\n        element.setAttribute('aria-expanded', true);\n      });\n    }\n\n    this.setTransitioning(true);\n\n    const complete = () => {\n      this._element.classList.remove(CLASS_NAME_COLLAPSING);\n\n      this._element.classList.add(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$8);\n\n      this._element.style[dimension] = '';\n      this.setTransitioning(false);\n      EventHandler.trigger(this._element, EVENT_SHOWN$5);\n    };\n\n    const capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1);\n    const scrollSize = `scroll${capitalizedDimension}`;\n\n    this._queueCallback(complete, this._element, true);\n\n    this._element.style[dimension] = `${this._element[scrollSize]}px`;\n  }\n\n  hide() {\n    if (this._isTransitioning || !this._element.classList.contains(CLASS_NAME_SHOW$8)) {\n      return;\n    }\n\n    const startEvent = EventHandler.trigger(this._element, EVENT_HIDE$5);\n\n    if (startEvent.defaultPrevented) {\n      return;\n    }\n\n    const dimension = this._getDimension();\n\n    this._element.style[dimension] = `${this._element.getBoundingClientRect()[dimension]}px`;\n    reflow(this._element);\n\n    this._element.classList.add(CLASS_NAME_COLLAPSING);\n\n    this._element.classList.remove(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$8);\n\n    const triggerArrayLength = this._triggerArray.length;\n\n    if (triggerArrayLength > 0) {\n      for (let i = 0; i < triggerArrayLength; i++) {\n        const trigger = this._triggerArray[i];\n        const elem = getElementFromSelector(trigger);\n\n        if (elem && !elem.classList.contains(CLASS_NAME_SHOW$8)) {\n          trigger.classList.add(CLASS_NAME_COLLAPSED);\n          trigger.setAttribute('aria-expanded', false);\n        }\n      }\n    }\n\n    this.setTransitioning(true);\n\n    const complete = () => {\n      this.setTransitioning(false);\n\n      this._element.classList.remove(CLASS_NAME_COLLAPSING);\n\n      this._element.classList.add(CLASS_NAME_COLLAPSE);\n\n      EventHandler.trigger(this._element, EVENT_HIDDEN$5);\n    };\n\n    this._element.style[dimension] = '';\n\n    this._queueCallback(complete, this._element, true);\n  }\n\n  setTransitioning(isTransitioning) {\n    this._isTransitioning = isTransitioning;\n  } // Private\n\n\n  _getConfig(config) {\n    config = { ...Default$8,\n      ...config\n    };\n    config.toggle = Boolean(config.toggle); // Coerce string values\n\n    typeCheckConfig(NAME$9, config, DefaultType$8);\n    return config;\n  }\n\n  _getDimension() {\n    return this._element.classList.contains(WIDTH) ? WIDTH : HEIGHT;\n  }\n\n  _getParent() {\n    let {\n      parent\n    } = this._config;\n    parent = getElement(parent);\n    const selector = `${SELECTOR_DATA_TOGGLE$4}[data-bs-parent=\"${parent}\"]`;\n    SelectorEngine.find(selector, parent).forEach(element => {\n      const selected = getElementFromSelector(element);\n\n      this._addAriaAndCollapsedClass(selected, [element]);\n    });\n    return parent;\n  }\n\n  _addAriaAndCollapsedClass(element, triggerArray) {\n    if (!element || !triggerArray.length) {\n      return;\n    }\n\n    const isOpen = element.classList.contains(CLASS_NAME_SHOW$8);\n    triggerArray.forEach(elem => {\n      if (isOpen) {\n        elem.classList.remove(CLASS_NAME_COLLAPSED);\n      } else {\n        elem.classList.add(CLASS_NAME_COLLAPSED);\n      }\n\n      elem.setAttribute('aria-expanded', isOpen);\n    });\n  } // Static\n\n\n  static collapseInterface(element, config) {\n    let data = Collapse.getInstance(element);\n    const _config = { ...Default$8,\n      ...Manipulator.getDataAttributes(element),\n      ...(typeof config === 'object' && config ? config : {})\n    };\n\n    if (!data && _config.toggle && typeof config === 'string' && /show|hide/.test(config)) {\n      _config.toggle = false;\n    }\n\n    if (!data) {\n      data = new Collapse(element, _config);\n    }\n\n    if (typeof config === 'string') {\n      if (typeof data[config] === 'undefined') {\n        throw new TypeError(`No method named \"${config}\"`);\n      }\n\n      data[config]();\n    }\n  }\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      Collapse.collapseInterface(this, config);\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$4, SELECTOR_DATA_TOGGLE$4, function (event) {\n  // preventDefault only for <a> elements (which change the URL) not inside the collapsible element\n  if (event.target.tagName === 'A' || event.delegateTarget && event.delegateTarget.tagName === 'A') {\n    event.preventDefault();\n  }\n\n  const triggerData = Manipulator.getDataAttributes(this);\n  const selector = getSelectorFromElement(this);\n  const selectorElements = SelectorEngine.find(selector);\n  selectorElements.forEach(element => {\n    const data = Collapse.getInstance(element);\n    let config;\n\n    if (data) {\n      // update parent attribute\n      if (data._parent === null && typeof triggerData.parent === 'string') {\n        data._config.parent = triggerData.parent;\n        data._parent = data._getParent();\n      }\n\n      config = 'toggle';\n    } else {\n      config = triggerData;\n    }\n\n    Collapse.collapseInterface(element, config);\n  });\n});\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Collapse to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Collapse);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): dropdown.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$8 = 'dropdown';\nconst DATA_KEY$7 = 'bs.dropdown';\nconst EVENT_KEY$7 = `.${DATA_KEY$7}`;\nconst DATA_API_KEY$4 = '.data-api';\nconst ESCAPE_KEY$2 = 'Escape';\nconst SPACE_KEY = 'Space';\nconst TAB_KEY = 'Tab';\nconst ARROW_UP_KEY = 'ArrowUp';\nconst ARROW_DOWN_KEY = 'ArrowDown';\nconst RIGHT_MOUSE_BUTTON = 2; // MouseEvent.button value for the secondary button, usually the right button\n\nconst REGEXP_KEYDOWN = new RegExp(`${ARROW_UP_KEY}|${ARROW_DOWN_KEY}|${ESCAPE_KEY$2}`);\nconst EVENT_HIDE$4 = `hide${EVENT_KEY$7}`;\nconst EVENT_HIDDEN$4 = `hidden${EVENT_KEY$7}`;\nconst EVENT_SHOW$4 = `show${EVENT_KEY$7}`;\nconst EVENT_SHOWN$4 = `shown${EVENT_KEY$7}`;\nconst EVENT_CLICK = `click${EVENT_KEY$7}`;\nconst EVENT_CLICK_DATA_API$3 = `click${EVENT_KEY$7}${DATA_API_KEY$4}`;\nconst EVENT_KEYDOWN_DATA_API = `keydown${EVENT_KEY$7}${DATA_API_KEY$4}`;\nconst EVENT_KEYUP_DATA_API = `keyup${EVENT_KEY$7}${DATA_API_KEY$4}`;\nconst CLASS_NAME_SHOW$7 = 'show';\nconst CLASS_NAME_DROPUP = 'dropup';\nconst CLASS_NAME_DROPEND = 'dropend';\nconst CLASS_NAME_DROPSTART = 'dropstart';\nconst CLASS_NAME_NAVBAR = 'navbar';\nconst SELECTOR_DATA_TOGGLE$3 = '[data-bs-toggle=\"dropdown\"]';\nconst SELECTOR_MENU = '.dropdown-menu';\nconst SELECTOR_NAVBAR_NAV = '.navbar-nav';\nconst SELECTOR_VISIBLE_ITEMS = '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)';\nconst PLACEMENT_TOP = isRTL() ? 'top-end' : 'top-start';\nconst PLACEMENT_TOPEND = isRTL() ? 'top-start' : 'top-end';\nconst PLACEMENT_BOTTOM = isRTL() ? 'bottom-end' : 'bottom-start';\nconst PLACEMENT_BOTTOMEND = isRTL() ? 'bottom-start' : 'bottom-end';\nconst PLACEMENT_RIGHT = isRTL() ? 'left-start' : 'right-start';\nconst PLACEMENT_LEFT = isRTL() ? 'right-start' : 'left-start';\nconst Default$7 = {\n  offset: [0, 2],\n  boundary: 'clippingParents',\n  reference: 'toggle',\n  display: 'dynamic',\n  popperConfig: null,\n  autoClose: true\n};\nconst DefaultType$7 = {\n  offset: '(array|string|function)',\n  boundary: '(string|element)',\n  reference: '(string|element|object)',\n  display: 'string',\n  popperConfig: '(null|object|function)',\n  autoClose: '(boolean|string)'\n};\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Dropdown extends BaseComponent {\n  constructor(element, config) {\n    super(element);\n    this._popper = null;\n    this._config = this._getConfig(config);\n    this._menu = this._getMenuElement();\n    this._inNavbar = this._detectNavbar();\n\n    this._addEventListeners();\n  } // Getters\n\n\n  static get Default() {\n    return Default$7;\n  }\n\n  static get DefaultType() {\n    return DefaultType$7;\n  }\n\n  static get NAME() {\n    return NAME$8;\n  } // Public\n\n\n  toggle() {\n    if (isDisabled(this._element)) {\n      return;\n    }\n\n    const isActive = this._element.classList.contains(CLASS_NAME_SHOW$7);\n\n    if (isActive) {\n      this.hide();\n      return;\n    }\n\n    this.show();\n  }\n\n  show() {\n    if (isDisabled(this._element) || this._menu.classList.contains(CLASS_NAME_SHOW$7)) {\n      return;\n    }\n\n    const parent = Dropdown.getParentFromElement(this._element);\n    const relatedTarget = {\n      relatedTarget: this._element\n    };\n    const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$4, relatedTarget);\n\n    if (showEvent.defaultPrevented) {\n      return;\n    } // Totally disable Popper for Dropdowns in Navbar\n\n\n    if (this._inNavbar) {\n      Manipulator.setDataAttribute(this._menu, 'popper', 'none');\n    } else {\n      if (typeof Popper === 'undefined') {\n        throw new TypeError('Bootstrap\\'s dropdowns require Popper (https://popper.js.org)');\n      }\n\n      let referenceElement = this._element;\n\n      if (this._config.reference === 'parent') {\n        referenceElement = parent;\n      } else if (isElement(this._config.reference)) {\n        referenceElement = getElement(this._config.reference);\n      } else if (typeof this._config.reference === 'object') {\n        referenceElement = this._config.reference;\n      }\n\n      const popperConfig = this._getPopperConfig();\n\n      const isDisplayStatic = popperConfig.modifiers.find(modifier => modifier.name === 'applyStyles' && modifier.enabled === false);\n      this._popper = Popper.createPopper(referenceElement, this._menu, popperConfig);\n\n      if (isDisplayStatic) {\n        Manipulator.setDataAttribute(this._menu, 'popper', 'static');\n      }\n    } // If this is a touch-enabled device we add extra\n    // empty mouseover listeners to the body's immediate children;\n    // only needed because of broken event delegation on iOS\n    // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n\n\n    if ('ontouchstart' in document.documentElement && !parent.closest(SELECTOR_NAVBAR_NAV)) {\n      [].concat(...document.body.children).forEach(elem => EventHandler.on(elem, 'mouseover', noop));\n    }\n\n    this._element.focus();\n\n    this._element.setAttribute('aria-expanded', true);\n\n    this._menu.classList.toggle(CLASS_NAME_SHOW$7);\n\n    this._element.classList.toggle(CLASS_NAME_SHOW$7);\n\n    EventHandler.trigger(this._element, EVENT_SHOWN$4, relatedTarget);\n  }\n\n  hide() {\n    if (isDisabled(this._element) || !this._menu.classList.contains(CLASS_NAME_SHOW$7)) {\n      return;\n    }\n\n    const relatedTarget = {\n      relatedTarget: this._element\n    };\n\n    this._completeHide(relatedTarget);\n  }\n\n  dispose() {\n    if (this._popper) {\n      this._popper.destroy();\n    }\n\n    super.dispose();\n  }\n\n  update() {\n    this._inNavbar = this._detectNavbar();\n\n    if (this._popper) {\n      this._popper.update();\n    }\n  } // Private\n\n\n  _addEventListeners() {\n    EventHandler.on(this._element, EVENT_CLICK, event => {\n      event.preventDefault();\n      this.toggle();\n    });\n  }\n\n  _completeHide(relatedTarget) {\n    const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$4, relatedTarget);\n\n    if (hideEvent.defaultPrevented) {\n      return;\n    } // If this is a touch-enabled device we remove the extra\n    // empty mouseover listeners we added for iOS support\n\n\n    if ('ontouchstart' in document.documentElement) {\n      [].concat(...document.body.children).forEach(elem => EventHandler.off(elem, 'mouseover', noop));\n    }\n\n    if (this._popper) {\n      this._popper.destroy();\n    }\n\n    this._menu.classList.remove(CLASS_NAME_SHOW$7);\n\n    this._element.classList.remove(CLASS_NAME_SHOW$7);\n\n    this._element.setAttribute('aria-expanded', 'false');\n\n    Manipulator.removeDataAttribute(this._menu, 'popper');\n    EventHandler.trigger(this._element, EVENT_HIDDEN$4, relatedTarget);\n  }\n\n  _getConfig(config) {\n    config = { ...this.constructor.Default,\n      ...Manipulator.getDataAttributes(this._element),\n      ...config\n    };\n    typeCheckConfig(NAME$8, config, this.constructor.DefaultType);\n\n    if (typeof config.reference === 'object' && !isElement(config.reference) && typeof config.reference.getBoundingClientRect !== 'function') {\n      // Popper virtual elements require a getBoundingClientRect method\n      throw new TypeError(`${NAME$8.toUpperCase()}: Option \"reference\" provided type \"object\" without a required \"getBoundingClientRect\" method.`);\n    }\n\n    return config;\n  }\n\n  _getMenuElement() {\n    return SelectorEngine.next(this._element, SELECTOR_MENU)[0];\n  }\n\n  _getPlacement() {\n    const parentDropdown = this._element.parentNode;\n\n    if (parentDropdown.classList.contains(CLASS_NAME_DROPEND)) {\n      return PLACEMENT_RIGHT;\n    }\n\n    if (parentDropdown.classList.contains(CLASS_NAME_DROPSTART)) {\n      return PLACEMENT_LEFT;\n    } // We need to trim the value because custom properties can also include spaces\n\n\n    const isEnd = getComputedStyle(this._menu).getPropertyValue('--bs-position').trim() === 'end';\n\n    if (parentDropdown.classList.contains(CLASS_NAME_DROPUP)) {\n      return isEnd ? PLACEMENT_TOPEND : PLACEMENT_TOP;\n    }\n\n    return isEnd ? PLACEMENT_BOTTOMEND : PLACEMENT_BOTTOM;\n  }\n\n  _detectNavbar() {\n    return this._element.closest(`.${CLASS_NAME_NAVBAR}`) !== null;\n  }\n\n  _getOffset() {\n    const {\n      offset\n    } = this._config;\n\n    if (typeof offset === 'string') {\n      return offset.split(',').map(val => Number.parseInt(val, 10));\n    }\n\n    if (typeof offset === 'function') {\n      return popperData => offset(popperData, this._element);\n    }\n\n    return offset;\n  }\n\n  _getPopperConfig() {\n    const defaultBsPopperConfig = {\n      placement: this._getPlacement(),\n      modifiers: [{\n        name: 'preventOverflow',\n        options: {\n          boundary: this._config.boundary\n        }\n      }, {\n        name: 'offset',\n        options: {\n          offset: this._getOffset()\n        }\n      }]\n    }; // Disable Popper if we have a static display\n\n    if (this._config.display === 'static') {\n      defaultBsPopperConfig.modifiers = [{\n        name: 'applyStyles',\n        enabled: false\n      }];\n    }\n\n    return { ...defaultBsPopperConfig,\n      ...(typeof this._config.popperConfig === 'function' ? this._config.popperConfig(defaultBsPopperConfig) : this._config.popperConfig)\n    };\n  }\n\n  _selectMenuItem({\n    key,\n    target\n  }) {\n    const items = SelectorEngine.find(SELECTOR_VISIBLE_ITEMS, this._menu).filter(isVisible);\n\n    if (!items.length) {\n      return;\n    } // if target isn't included in items (e.g. when expanding the dropdown)\n    // allow cycling to get the last item in case key equals ARROW_UP_KEY\n\n\n    getNextActiveElement(items, target, key === ARROW_DOWN_KEY, !items.includes(target)).focus();\n  } // Static\n\n\n  static dropdownInterface(element, config) {\n    const data = Dropdown.getOrCreateInstance(element, config);\n\n    if (typeof config === 'string') {\n      if (typeof data[config] === 'undefined') {\n        throw new TypeError(`No method named \"${config}\"`);\n      }\n\n      data[config]();\n    }\n  }\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      Dropdown.dropdownInterface(this, config);\n    });\n  }\n\n  static clearMenus(event) {\n    if (event && (event.button === RIGHT_MOUSE_BUTTON || event.type === 'keyup' && event.key !== TAB_KEY)) {\n      return;\n    }\n\n    const toggles = SelectorEngine.find(SELECTOR_DATA_TOGGLE$3);\n\n    for (let i = 0, len = toggles.length; i < len; i++) {\n      const context = Dropdown.getInstance(toggles[i]);\n\n      if (!context || context._config.autoClose === false) {\n        continue;\n      }\n\n      if (!context._element.classList.contains(CLASS_NAME_SHOW$7)) {\n        continue;\n      }\n\n      const relatedTarget = {\n        relatedTarget: context._element\n      };\n\n      if (event) {\n        const composedPath = event.composedPath();\n        const isMenuTarget = composedPath.includes(context._menu);\n\n        if (composedPath.includes(context._element) || context._config.autoClose === 'inside' && !isMenuTarget || context._config.autoClose === 'outside' && isMenuTarget) {\n          continue;\n        } // Tab navigation through the dropdown menu or events from contained inputs shouldn't close the menu\n\n\n        if (context._menu.contains(event.target) && (event.type === 'keyup' && event.key === TAB_KEY || /input|select|option|textarea|form/i.test(event.target.tagName))) {\n          continue;\n        }\n\n        if (event.type === 'click') {\n          relatedTarget.clickEvent = event;\n        }\n      }\n\n      context._completeHide(relatedTarget);\n    }\n  }\n\n  static getParentFromElement(element) {\n    return getElementFromSelector(element) || element.parentNode;\n  }\n\n  static dataApiKeydownHandler(event) {\n    // If not input/textarea:\n    //  - And not a key in REGEXP_KEYDOWN => not a dropdown command\n    // If input/textarea:\n    //  - If space key => not a dropdown command\n    //  - If key is other than escape\n    //    - If key is not up or down => not a dropdown command\n    //    - If trigger inside the menu => not a dropdown command\n    if (/input|textarea/i.test(event.target.tagName) ? event.key === SPACE_KEY || event.key !== ESCAPE_KEY$2 && (event.key !== ARROW_DOWN_KEY && event.key !== ARROW_UP_KEY || event.target.closest(SELECTOR_MENU)) : !REGEXP_KEYDOWN.test(event.key)) {\n      return;\n    }\n\n    const isActive = this.classList.contains(CLASS_NAME_SHOW$7);\n\n    if (!isActive && event.key === ESCAPE_KEY$2) {\n      return;\n    }\n\n    event.preventDefault();\n    event.stopPropagation();\n\n    if (isDisabled(this)) {\n      return;\n    }\n\n    const getToggleButton = () => this.matches(SELECTOR_DATA_TOGGLE$3) ? this : SelectorEngine.prev(this, SELECTOR_DATA_TOGGLE$3)[0];\n\n    if (event.key === ESCAPE_KEY$2) {\n      getToggleButton().focus();\n      Dropdown.clearMenus();\n      return;\n    }\n\n    if (event.key === ARROW_UP_KEY || event.key === ARROW_DOWN_KEY) {\n      if (!isActive) {\n        getToggleButton().click();\n      }\n\n      Dropdown.getInstance(getToggleButton())._selectMenuItem(event);\n\n      return;\n    }\n\n    if (!isActive || event.key === SPACE_KEY) {\n      Dropdown.clearMenus();\n    }\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_DATA_TOGGLE$3, Dropdown.dataApiKeydownHandler);\nEventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown.dataApiKeydownHandler);\nEventHandler.on(document, EVENT_CLICK_DATA_API$3, Dropdown.clearMenus);\nEventHandler.on(document, EVENT_KEYUP_DATA_API, Dropdown.clearMenus);\nEventHandler.on(document, EVENT_CLICK_DATA_API$3, SELECTOR_DATA_TOGGLE$3, function (event) {\n  event.preventDefault();\n  Dropdown.dropdownInterface(this);\n});\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Dropdown to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Dropdown);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): util/scrollBar.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\nconst SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top';\nconst SELECTOR_STICKY_CONTENT = '.sticky-top';\n\nclass ScrollBarHelper {\n  constructor() {\n    this._element = document.body;\n  }\n\n  getWidth() {\n    // https://developer.mozilla.org/en-US/docs/Web/API/Window/innerWidth#usage_notes\n    const documentWidth = document.documentElement.clientWidth;\n    return Math.abs(window.innerWidth - documentWidth);\n  }\n\n  hide() {\n    const width = this.getWidth();\n\n    this._disableOverFlow(); // give padding to element to balance the hidden scrollbar width\n\n\n    this._setElementAttributes(this._element, 'paddingRight', calculatedValue => calculatedValue + width); // trick: We adjust positive paddingRight and negative marginRight to sticky-top elements to keep showing fullwidth\n\n\n    this._setElementAttributes(SELECTOR_FIXED_CONTENT, 'paddingRight', calculatedValue => calculatedValue + width);\n\n    this._setElementAttributes(SELECTOR_STICKY_CONTENT, 'marginRight', calculatedValue => calculatedValue - width);\n  }\n\n  _disableOverFlow() {\n    this._saveInitialAttribute(this._element, 'overflow');\n\n    this._element.style.overflow = 'hidden';\n  }\n\n  _setElementAttributes(selector, styleProp, callback) {\n    const scrollbarWidth = this.getWidth();\n\n    const manipulationCallBack = element => {\n      if (element !== this._element && window.innerWidth > element.clientWidth + scrollbarWidth) {\n        return;\n      }\n\n      this._saveInitialAttribute(element, styleProp);\n\n      const calculatedValue = window.getComputedStyle(element)[styleProp];\n      element.style[styleProp] = `${callback(Number.parseFloat(calculatedValue))}px`;\n    };\n\n    this._applyManipulationCallback(selector, manipulationCallBack);\n  }\n\n  reset() {\n    this._resetElementAttributes(this._element, 'overflow');\n\n    this._resetElementAttributes(this._element, 'paddingRight');\n\n    this._resetElementAttributes(SELECTOR_FIXED_CONTENT, 'paddingRight');\n\n    this._resetElementAttributes(SELECTOR_STICKY_CONTENT, 'marginRight');\n  }\n\n  _saveInitialAttribute(element, styleProp) {\n    const actualValue = element.style[styleProp];\n\n    if (actualValue) {\n      Manipulator.setDataAttribute(element, styleProp, actualValue);\n    }\n  }\n\n  _resetElementAttributes(selector, styleProp) {\n    const manipulationCallBack = element => {\n      const value = Manipulator.getDataAttribute(element, styleProp);\n\n      if (typeof value === 'undefined') {\n        element.style.removeProperty(styleProp);\n      } else {\n        Manipulator.removeDataAttribute(element, styleProp);\n        element.style[styleProp] = value;\n      }\n    };\n\n    this._applyManipulationCallback(selector, manipulationCallBack);\n  }\n\n  _applyManipulationCallback(selector, callBack) {\n    if (isElement(selector)) {\n      callBack(selector);\n    } else {\n      SelectorEngine.find(selector, this._element).forEach(callBack);\n    }\n  }\n\n  isOverflowing() {\n    return this.getWidth() > 0;\n  }\n\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): util/backdrop.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\nconst Default$6 = {\n  isVisible: true,\n  // if false, we use the backdrop helper without adding any element to the dom\n  isAnimated: false,\n  rootElement: 'body',\n  // give the choice to place backdrop under different elements\n  clickCallback: null\n};\nconst DefaultType$6 = {\n  isVisible: 'boolean',\n  isAnimated: 'boolean',\n  rootElement: '(element|string)',\n  clickCallback: '(function|null)'\n};\nconst NAME$7 = 'backdrop';\nconst CLASS_NAME_BACKDROP = 'modal-backdrop';\nconst CLASS_NAME_FADE$5 = 'fade';\nconst CLASS_NAME_SHOW$6 = 'show';\nconst EVENT_MOUSEDOWN = `mousedown.bs.${NAME$7}`;\n\nclass Backdrop {\n  constructor(config) {\n    this._config = this._getConfig(config);\n    this._isAppended = false;\n    this._element = null;\n  }\n\n  show(callback) {\n    if (!this._config.isVisible) {\n      execute(callback);\n      return;\n    }\n\n    this._append();\n\n    if (this._config.isAnimated) {\n      reflow(this._getElement());\n    }\n\n    this._getElement().classList.add(CLASS_NAME_SHOW$6);\n\n    this._emulateAnimation(() => {\n      execute(callback);\n    });\n  }\n\n  hide(callback) {\n    if (!this._config.isVisible) {\n      execute(callback);\n      return;\n    }\n\n    this._getElement().classList.remove(CLASS_NAME_SHOW$6);\n\n    this._emulateAnimation(() => {\n      this.dispose();\n      execute(callback);\n    });\n  } // Private\n\n\n  _getElement() {\n    if (!this._element) {\n      const backdrop = document.createElement('div');\n      backdrop.className = CLASS_NAME_BACKDROP;\n\n      if (this._config.isAnimated) {\n        backdrop.classList.add(CLASS_NAME_FADE$5);\n      }\n\n      this._element = backdrop;\n    }\n\n    return this._element;\n  }\n\n  _getConfig(config) {\n    config = { ...Default$6,\n      ...(typeof config === 'object' ? config : {})\n    }; // use getElement() with the default \"body\" to get a fresh Element on each instantiation\n\n    config.rootElement = getElement(config.rootElement);\n    typeCheckConfig(NAME$7, config, DefaultType$6);\n    return config;\n  }\n\n  _append() {\n    if (this._isAppended) {\n      return;\n    }\n\n    this._config.rootElement.appendChild(this._getElement());\n\n    EventHandler.on(this._getElement(), EVENT_MOUSEDOWN, () => {\n      execute(this._config.clickCallback);\n    });\n    this._isAppended = true;\n  }\n\n  dispose() {\n    if (!this._isAppended) {\n      return;\n    }\n\n    EventHandler.off(this._element, EVENT_MOUSEDOWN);\n\n    this._element.remove();\n\n    this._isAppended = false;\n  }\n\n  _emulateAnimation(callback) {\n    executeAfterTransition(callback, this._getElement(), this._config.isAnimated);\n  }\n\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): modal.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$6 = 'modal';\nconst DATA_KEY$6 = 'bs.modal';\nconst EVENT_KEY$6 = `.${DATA_KEY$6}`;\nconst DATA_API_KEY$3 = '.data-api';\nconst ESCAPE_KEY$1 = 'Escape';\nconst Default$5 = {\n  backdrop: true,\n  keyboard: true,\n  focus: true\n};\nconst DefaultType$5 = {\n  backdrop: '(boolean|string)',\n  keyboard: 'boolean',\n  focus: 'boolean'\n};\nconst EVENT_HIDE$3 = `hide${EVENT_KEY$6}`;\nconst EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY$6}`;\nconst EVENT_HIDDEN$3 = `hidden${EVENT_KEY$6}`;\nconst EVENT_SHOW$3 = `show${EVENT_KEY$6}`;\nconst EVENT_SHOWN$3 = `shown${EVENT_KEY$6}`;\nconst EVENT_FOCUSIN$2 = `focusin${EVENT_KEY$6}`;\nconst EVENT_RESIZE = `resize${EVENT_KEY$6}`;\nconst EVENT_CLICK_DISMISS$2 = `click.dismiss${EVENT_KEY$6}`;\nconst EVENT_KEYDOWN_DISMISS$1 = `keydown.dismiss${EVENT_KEY$6}`;\nconst EVENT_MOUSEUP_DISMISS = `mouseup.dismiss${EVENT_KEY$6}`;\nconst EVENT_MOUSEDOWN_DISMISS = `mousedown.dismiss${EVENT_KEY$6}`;\nconst EVENT_CLICK_DATA_API$2 = `click${EVENT_KEY$6}${DATA_API_KEY$3}`;\nconst CLASS_NAME_OPEN = 'modal-open';\nconst CLASS_NAME_FADE$4 = 'fade';\nconst CLASS_NAME_SHOW$5 = 'show';\nconst CLASS_NAME_STATIC = 'modal-static';\nconst SELECTOR_DIALOG = '.modal-dialog';\nconst SELECTOR_MODAL_BODY = '.modal-body';\nconst SELECTOR_DATA_TOGGLE$2 = '[data-bs-toggle=\"modal\"]';\nconst SELECTOR_DATA_DISMISS$2 = '[data-bs-dismiss=\"modal\"]';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Modal extends BaseComponent {\n  constructor(element, config) {\n    super(element);\n    this._config = this._getConfig(config);\n    this._dialog = SelectorEngine.findOne(SELECTOR_DIALOG, this._element);\n    this._backdrop = this._initializeBackDrop();\n    this._isShown = false;\n    this._ignoreBackdropClick = false;\n    this._isTransitioning = false;\n    this._scrollBar = new ScrollBarHelper();\n  } // Getters\n\n\n  static get Default() {\n    return Default$5;\n  }\n\n  static get NAME() {\n    return NAME$6;\n  } // Public\n\n\n  toggle(relatedTarget) {\n    return this._isShown ? this.hide() : this.show(relatedTarget);\n  }\n\n  show(relatedTarget) {\n    if (this._isShown || this._isTransitioning) {\n      return;\n    }\n\n    const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$3, {\n      relatedTarget\n    });\n\n    if (showEvent.defaultPrevented) {\n      return;\n    }\n\n    this._isShown = true;\n\n    if (this._isAnimated()) {\n      this._isTransitioning = true;\n    }\n\n    this._scrollBar.hide();\n\n    document.body.classList.add(CLASS_NAME_OPEN);\n\n    this._adjustDialog();\n\n    this._setEscapeEvent();\n\n    this._setResizeEvent();\n\n    EventHandler.on(this._element, EVENT_CLICK_DISMISS$2, SELECTOR_DATA_DISMISS$2, event => this.hide(event));\n    EventHandler.on(this._dialog, EVENT_MOUSEDOWN_DISMISS, () => {\n      EventHandler.one(this._element, EVENT_MOUSEUP_DISMISS, event => {\n        if (event.target === this._element) {\n          this._ignoreBackdropClick = true;\n        }\n      });\n    });\n\n    this._showBackdrop(() => this._showElement(relatedTarget));\n  }\n\n  hide(event) {\n    if (event && ['A', 'AREA'].includes(event.target.tagName)) {\n      event.preventDefault();\n    }\n\n    if (!this._isShown || this._isTransitioning) {\n      return;\n    }\n\n    const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$3);\n\n    if (hideEvent.defaultPrevented) {\n      return;\n    }\n\n    this._isShown = false;\n\n    const isAnimated = this._isAnimated();\n\n    if (isAnimated) {\n      this._isTransitioning = true;\n    }\n\n    this._setEscapeEvent();\n\n    this._setResizeEvent();\n\n    EventHandler.off(document, EVENT_FOCUSIN$2);\n\n    this._element.classList.remove(CLASS_NAME_SHOW$5);\n\n    EventHandler.off(this._element, EVENT_CLICK_DISMISS$2);\n    EventHandler.off(this._dialog, EVENT_MOUSEDOWN_DISMISS);\n\n    this._queueCallback(() => this._hideModal(), this._element, isAnimated);\n  }\n\n  dispose() {\n    [window, this._dialog].forEach(htmlElement => EventHandler.off(htmlElement, EVENT_KEY$6));\n\n    this._backdrop.dispose();\n\n    super.dispose();\n    /**\n     * `document` has 2 events `EVENT_FOCUSIN` and `EVENT_CLICK_DATA_API`\n     * Do not move `document` in `htmlElements` array\n     * It will remove `EVENT_CLICK_DATA_API` event that should remain\n     */\n\n    EventHandler.off(document, EVENT_FOCUSIN$2);\n  }\n\n  handleUpdate() {\n    this._adjustDialog();\n  } // Private\n\n\n  _initializeBackDrop() {\n    return new Backdrop({\n      isVisible: Boolean(this._config.backdrop),\n      // 'static' option will be translated to true, and booleans will keep their value\n      isAnimated: this._isAnimated()\n    });\n  }\n\n  _getConfig(config) {\n    config = { ...Default$5,\n      ...Manipulator.getDataAttributes(this._element),\n      ...(typeof config === 'object' ? config : {})\n    };\n    typeCheckConfig(NAME$6, config, DefaultType$5);\n    return config;\n  }\n\n  _showElement(relatedTarget) {\n    const isAnimated = this._isAnimated();\n\n    const modalBody = SelectorEngine.findOne(SELECTOR_MODAL_BODY, this._dialog);\n\n    if (!this._element.parentNode || this._element.parentNode.nodeType !== Node.ELEMENT_NODE) {\n      // Don't move modal's DOM position\n      document.body.appendChild(this._element);\n    }\n\n    this._element.style.display = 'block';\n\n    this._element.removeAttribute('aria-hidden');\n\n    this._element.setAttribute('aria-modal', true);\n\n    this._element.setAttribute('role', 'dialog');\n\n    this._element.scrollTop = 0;\n\n    if (modalBody) {\n      modalBody.scrollTop = 0;\n    }\n\n    if (isAnimated) {\n      reflow(this._element);\n    }\n\n    this._element.classList.add(CLASS_NAME_SHOW$5);\n\n    if (this._config.focus) {\n      this._enforceFocus();\n    }\n\n    const transitionComplete = () => {\n      if (this._config.focus) {\n        this._element.focus();\n      }\n\n      this._isTransitioning = false;\n      EventHandler.trigger(this._element, EVENT_SHOWN$3, {\n        relatedTarget\n      });\n    };\n\n    this._queueCallback(transitionComplete, this._dialog, isAnimated);\n  }\n\n  _enforceFocus() {\n    EventHandler.off(document, EVENT_FOCUSIN$2); // guard against infinite focus loop\n\n    EventHandler.on(document, EVENT_FOCUSIN$2, event => {\n      if (document !== event.target && this._element !== event.target && !this._element.contains(event.target)) {\n        this._element.focus();\n      }\n    });\n  }\n\n  _setEscapeEvent() {\n    if (this._isShown) {\n      EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS$1, event => {\n        if (this._config.keyboard && event.key === ESCAPE_KEY$1) {\n          event.preventDefault();\n          this.hide();\n        } else if (!this._config.keyboard && event.key === ESCAPE_KEY$1) {\n          this._triggerBackdropTransition();\n        }\n      });\n    } else {\n      EventHandler.off(this._element, EVENT_KEYDOWN_DISMISS$1);\n    }\n  }\n\n  _setResizeEvent() {\n    if (this._isShown) {\n      EventHandler.on(window, EVENT_RESIZE, () => this._adjustDialog());\n    } else {\n      EventHandler.off(window, EVENT_RESIZE);\n    }\n  }\n\n  _hideModal() {\n    this._element.style.display = 'none';\n\n    this._element.setAttribute('aria-hidden', true);\n\n    this._element.removeAttribute('aria-modal');\n\n    this._element.removeAttribute('role');\n\n    this._isTransitioning = false;\n\n    this._backdrop.hide(() => {\n      document.body.classList.remove(CLASS_NAME_OPEN);\n\n      this._resetAdjustments();\n\n      this._scrollBar.reset();\n\n      EventHandler.trigger(this._element, EVENT_HIDDEN$3);\n    });\n  }\n\n  _showBackdrop(callback) {\n    EventHandler.on(this._element, EVENT_CLICK_DISMISS$2, event => {\n      if (this._ignoreBackdropClick) {\n        this._ignoreBackdropClick = false;\n        return;\n      }\n\n      if (event.target !== event.currentTarget) {\n        return;\n      }\n\n      if (this._config.backdrop === true) {\n        this.hide();\n      } else if (this._config.backdrop === 'static') {\n        this._triggerBackdropTransition();\n      }\n    });\n\n    this._backdrop.show(callback);\n  }\n\n  _isAnimated() {\n    return this._element.classList.contains(CLASS_NAME_FADE$4);\n  }\n\n  _triggerBackdropTransition() {\n    const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED);\n\n    if (hideEvent.defaultPrevented) {\n      return;\n    }\n\n    const {\n      classList,\n      scrollHeight,\n      style\n    } = this._element;\n    const isModalOverflowing = scrollHeight > document.documentElement.clientHeight; // return if the following background transition hasn't yet completed\n\n    if (!isModalOverflowing && style.overflowY === 'hidden' || classList.contains(CLASS_NAME_STATIC)) {\n      return;\n    }\n\n    if (!isModalOverflowing) {\n      style.overflowY = 'hidden';\n    }\n\n    classList.add(CLASS_NAME_STATIC);\n\n    this._queueCallback(() => {\n      classList.remove(CLASS_NAME_STATIC);\n\n      if (!isModalOverflowing) {\n        this._queueCallback(() => {\n          style.overflowY = '';\n        }, this._dialog);\n      }\n    }, this._dialog);\n\n    this._element.focus();\n  } // ----------------------------------------------------------------------\n  // the following methods are used to handle overflowing modals\n  // ----------------------------------------------------------------------\n\n\n  _adjustDialog() {\n    const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;\n\n    const scrollbarWidth = this._scrollBar.getWidth();\n\n    const isBodyOverflowing = scrollbarWidth > 0;\n\n    if (!isBodyOverflowing && isModalOverflowing && !isRTL() || isBodyOverflowing && !isModalOverflowing && isRTL()) {\n      this._element.style.paddingLeft = `${scrollbarWidth}px`;\n    }\n\n    if (isBodyOverflowing && !isModalOverflowing && !isRTL() || !isBodyOverflowing && isModalOverflowing && isRTL()) {\n      this._element.style.paddingRight = `${scrollbarWidth}px`;\n    }\n  }\n\n  _resetAdjustments() {\n    this._element.style.paddingLeft = '';\n    this._element.style.paddingRight = '';\n  } // Static\n\n\n  static jQueryInterface(config, relatedTarget) {\n    return this.each(function () {\n      const data = Modal.getOrCreateInstance(this, config);\n\n      if (typeof config !== 'string') {\n        return;\n      }\n\n      if (typeof data[config] === 'undefined') {\n        throw new TypeError(`No method named \"${config}\"`);\n      }\n\n      data[config](relatedTarget);\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$2, SELECTOR_DATA_TOGGLE$2, function (event) {\n  const target = getElementFromSelector(this);\n\n  if (['A', 'AREA'].includes(this.tagName)) {\n    event.preventDefault();\n  }\n\n  EventHandler.one(target, EVENT_SHOW$3, showEvent => {\n    if (showEvent.defaultPrevented) {\n      // only register focus restorer if modal will actually get shown\n      return;\n    }\n\n    EventHandler.one(target, EVENT_HIDDEN$3, () => {\n      if (isVisible(this)) {\n        this.focus();\n      }\n    });\n  });\n  const data = Modal.getOrCreateInstance(target);\n  data.toggle(this);\n});\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Modal to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Modal);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): offcanvas.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$5 = 'offcanvas';\nconst DATA_KEY$5 = 'bs.offcanvas';\nconst EVENT_KEY$5 = `.${DATA_KEY$5}`;\nconst DATA_API_KEY$2 = '.data-api';\nconst EVENT_LOAD_DATA_API$1 = `load${EVENT_KEY$5}${DATA_API_KEY$2}`;\nconst ESCAPE_KEY = 'Escape';\nconst Default$4 = {\n  backdrop: true,\n  keyboard: true,\n  scroll: false\n};\nconst DefaultType$4 = {\n  backdrop: 'boolean',\n  keyboard: 'boolean',\n  scroll: 'boolean'\n};\nconst CLASS_NAME_SHOW$4 = 'show';\nconst OPEN_SELECTOR = '.offcanvas.show';\nconst EVENT_SHOW$2 = `show${EVENT_KEY$5}`;\nconst EVENT_SHOWN$2 = `shown${EVENT_KEY$5}`;\nconst EVENT_HIDE$2 = `hide${EVENT_KEY$5}`;\nconst EVENT_HIDDEN$2 = `hidden${EVENT_KEY$5}`;\nconst EVENT_FOCUSIN$1 = `focusin${EVENT_KEY$5}`;\nconst EVENT_CLICK_DATA_API$1 = `click${EVENT_KEY$5}${DATA_API_KEY$2}`;\nconst EVENT_CLICK_DISMISS$1 = `click.dismiss${EVENT_KEY$5}`;\nconst EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY$5}`;\nconst SELECTOR_DATA_DISMISS$1 = '[data-bs-dismiss=\"offcanvas\"]';\nconst SELECTOR_DATA_TOGGLE$1 = '[data-bs-toggle=\"offcanvas\"]';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Offcanvas extends BaseComponent {\n  constructor(element, config) {\n    super(element);\n    this._config = this._getConfig(config);\n    this._isShown = false;\n    this._backdrop = this._initializeBackDrop();\n\n    this._addEventListeners();\n  } // Getters\n\n\n  static get NAME() {\n    return NAME$5;\n  }\n\n  static get Default() {\n    return Default$4;\n  } // Public\n\n\n  toggle(relatedTarget) {\n    return this._isShown ? this.hide() : this.show(relatedTarget);\n  }\n\n  show(relatedTarget) {\n    if (this._isShown) {\n      return;\n    }\n\n    const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$2, {\n      relatedTarget\n    });\n\n    if (showEvent.defaultPrevented) {\n      return;\n    }\n\n    this._isShown = true;\n    this._element.style.visibility = 'visible';\n\n    this._backdrop.show();\n\n    if (!this._config.scroll) {\n      new ScrollBarHelper().hide();\n\n      this._enforceFocusOnElement(this._element);\n    }\n\n    this._element.removeAttribute('aria-hidden');\n\n    this._element.setAttribute('aria-modal', true);\n\n    this._element.setAttribute('role', 'dialog');\n\n    this._element.classList.add(CLASS_NAME_SHOW$4);\n\n    const completeCallBack = () => {\n      EventHandler.trigger(this._element, EVENT_SHOWN$2, {\n        relatedTarget\n      });\n    };\n\n    this._queueCallback(completeCallBack, this._element, true);\n  }\n\n  hide() {\n    if (!this._isShown) {\n      return;\n    }\n\n    const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$2);\n\n    if (hideEvent.defaultPrevented) {\n      return;\n    }\n\n    EventHandler.off(document, EVENT_FOCUSIN$1);\n\n    this._element.blur();\n\n    this._isShown = false;\n\n    this._element.classList.remove(CLASS_NAME_SHOW$4);\n\n    this._backdrop.hide();\n\n    const completeCallback = () => {\n      this._element.setAttribute('aria-hidden', true);\n\n      this._element.removeAttribute('aria-modal');\n\n      this._element.removeAttribute('role');\n\n      this._element.style.visibility = 'hidden';\n\n      if (!this._config.scroll) {\n        new ScrollBarHelper().reset();\n      }\n\n      EventHandler.trigger(this._element, EVENT_HIDDEN$2);\n    };\n\n    this._queueCallback(completeCallback, this._element, true);\n  }\n\n  dispose() {\n    this._backdrop.dispose();\n\n    super.dispose();\n    EventHandler.off(document, EVENT_FOCUSIN$1);\n  } // Private\n\n\n  _getConfig(config) {\n    config = { ...Default$4,\n      ...Manipulator.getDataAttributes(this._element),\n      ...(typeof config === 'object' ? config : {})\n    };\n    typeCheckConfig(NAME$5, config, DefaultType$4);\n    return config;\n  }\n\n  _initializeBackDrop() {\n    return new Backdrop({\n      isVisible: this._config.backdrop,\n      isAnimated: true,\n      rootElement: this._element.parentNode,\n      clickCallback: () => this.hide()\n    });\n  }\n\n  _enforceFocusOnElement(element) {\n    EventHandler.off(document, EVENT_FOCUSIN$1); // guard against infinite focus loop\n\n    EventHandler.on(document, EVENT_FOCUSIN$1, event => {\n      if (document !== event.target && element !== event.target && !element.contains(event.target)) {\n        element.focus();\n      }\n    });\n    element.focus();\n  }\n\n  _addEventListeners() {\n    EventHandler.on(this._element, EVENT_CLICK_DISMISS$1, SELECTOR_DATA_DISMISS$1, () => this.hide());\n    EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS, event => {\n      if (this._config.keyboard && event.key === ESCAPE_KEY) {\n        this.hide();\n      }\n    });\n  } // Static\n\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Offcanvas.getOrCreateInstance(this, config);\n\n      if (typeof config !== 'string') {\n        return;\n      }\n\n      if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n        throw new TypeError(`No method named \"${config}\"`);\n      }\n\n      data[config](this);\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$1, SELECTOR_DATA_TOGGLE$1, function (event) {\n  const target = getElementFromSelector(this);\n\n  if (['A', 'AREA'].includes(this.tagName)) {\n    event.preventDefault();\n  }\n\n  if (isDisabled(this)) {\n    return;\n  }\n\n  EventHandler.one(target, EVENT_HIDDEN$2, () => {\n    // focus on trigger when it is closed\n    if (isVisible(this)) {\n      this.focus();\n    }\n  }); // avoid conflict when clicking a toggler of an offcanvas, while another is open\n\n  const allReadyOpen = SelectorEngine.findOne(OPEN_SELECTOR);\n\n  if (allReadyOpen && allReadyOpen !== target) {\n    Offcanvas.getInstance(allReadyOpen).hide();\n  }\n\n  const data = Offcanvas.getOrCreateInstance(target);\n  data.toggle(this);\n});\nEventHandler.on(window, EVENT_LOAD_DATA_API$1, () => SelectorEngine.find(OPEN_SELECTOR).forEach(el => Offcanvas.getOrCreateInstance(el).show()));\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\ndefineJQueryPlugin(Offcanvas);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): util/sanitizer.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\nconst uriAttrs = new Set(['background', 'cite', 'href', 'itemtype', 'longdesc', 'poster', 'src', 'xlink:href']);\nconst ARIA_ATTRIBUTE_PATTERN = /^aria-[\\w-]*$/i;\n/**\n * A pattern that recognizes a commonly useful subset of URLs that are safe.\n *\n * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts\n */\n\nconst SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file):|[^#&/:?]*(?:[#/?]|$))/i;\n/**\n * A pattern that matches safe data URLs. Only matches image, video and audio types.\n *\n * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts\n */\n\nconst DATA_URL_PATTERN = /^data:(?:image\\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\\/(?:mpeg|mp4|ogg|webm)|audio\\/(?:mp3|oga|ogg|opus));base64,[\\d+/a-z]+=*$/i;\n\nconst allowedAttribute = (attr, allowedAttributeList) => {\n  const attrName = attr.nodeName.toLowerCase();\n\n  if (allowedAttributeList.includes(attrName)) {\n    if (uriAttrs.has(attrName)) {\n      return Boolean(SAFE_URL_PATTERN.test(attr.nodeValue) || DATA_URL_PATTERN.test(attr.nodeValue));\n    }\n\n    return true;\n  }\n\n  const regExp = allowedAttributeList.filter(attrRegex => attrRegex instanceof RegExp); // Check if a regular expression validates the attribute.\n\n  for (let i = 0, len = regExp.length; i < len; i++) {\n    if (regExp[i].test(attrName)) {\n      return true;\n    }\n  }\n\n  return false;\n};\n\nconst DefaultAllowlist = {\n  // Global attributes allowed on any supplied element below.\n  '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],\n  a: ['target', 'href', 'title', 'rel'],\n  area: [],\n  b: [],\n  br: [],\n  col: [],\n  code: [],\n  div: [],\n  em: [],\n  hr: [],\n  h1: [],\n  h2: [],\n  h3: [],\n  h4: [],\n  h5: [],\n  h6: [],\n  i: [],\n  img: ['src', 'srcset', 'alt', 'title', 'width', 'height'],\n  li: [],\n  ol: [],\n  p: [],\n  pre: [],\n  s: [],\n  small: [],\n  span: [],\n  sub: [],\n  sup: [],\n  strong: [],\n  u: [],\n  ul: []\n};\nfunction sanitizeHtml(unsafeHtml, allowList, sanitizeFn) {\n  if (!unsafeHtml.length) {\n    return unsafeHtml;\n  }\n\n  if (sanitizeFn && typeof sanitizeFn === 'function') {\n    return sanitizeFn(unsafeHtml);\n  }\n\n  const domParser = new window.DOMParser();\n  const createdDocument = domParser.parseFromString(unsafeHtml, 'text/html');\n  const allowlistKeys = Object.keys(allowList);\n  const elements = [].concat(...createdDocument.body.querySelectorAll('*'));\n\n  for (let i = 0, len = elements.length; i < len; i++) {\n    const el = elements[i];\n    const elName = el.nodeName.toLowerCase();\n\n    if (!allowlistKeys.includes(elName)) {\n      el.remove();\n      continue;\n    }\n\n    const attributeList = [].concat(...el.attributes);\n    const allowedAttributes = [].concat(allowList['*'] || [], allowList[elName] || []);\n    attributeList.forEach(attr => {\n      if (!allowedAttribute(attr, allowedAttributes)) {\n        el.removeAttribute(attr.nodeName);\n      }\n    });\n  }\n\n  return createdDocument.body.innerHTML;\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): tooltip.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$4 = 'tooltip';\nconst DATA_KEY$4 = 'bs.tooltip';\nconst EVENT_KEY$4 = `.${DATA_KEY$4}`;\nconst CLASS_PREFIX$1 = 'bs-tooltip';\nconst BSCLS_PREFIX_REGEX$1 = new RegExp(`(^|\\\\s)${CLASS_PREFIX$1}\\\\S+`, 'g');\nconst DISALLOWED_ATTRIBUTES = new Set(['sanitize', 'allowList', 'sanitizeFn']);\nconst DefaultType$3 = {\n  animation: 'boolean',\n  template: 'string',\n  title: '(string|element|function)',\n  trigger: 'string',\n  delay: '(number|object)',\n  html: 'boolean',\n  selector: '(string|boolean)',\n  placement: '(string|function)',\n  offset: '(array|string|function)',\n  container: '(string|element|boolean)',\n  fallbackPlacements: 'array',\n  boundary: '(string|element)',\n  customClass: '(string|function)',\n  sanitize: 'boolean',\n  sanitizeFn: '(null|function)',\n  allowList: 'object',\n  popperConfig: '(null|object|function)'\n};\nconst AttachmentMap = {\n  AUTO: 'auto',\n  TOP: 'top',\n  RIGHT: isRTL() ? 'left' : 'right',\n  BOTTOM: 'bottom',\n  LEFT: isRTL() ? 'right' : 'left'\n};\nconst Default$3 = {\n  animation: true,\n  template: '<div class=\"tooltip\" role=\"tooltip\">' + '<div class=\"tooltip-arrow\"></div>' + '<div class=\"tooltip-inner\"></div>' + '</div>',\n  trigger: 'hover focus',\n  title: '',\n  delay: 0,\n  html: false,\n  selector: false,\n  placement: 'top',\n  offset: [0, 0],\n  container: false,\n  fallbackPlacements: ['top', 'right', 'bottom', 'left'],\n  boundary: 'clippingParents',\n  customClass: '',\n  sanitize: true,\n  sanitizeFn: null,\n  allowList: DefaultAllowlist,\n  popperConfig: null\n};\nconst Event$2 = {\n  HIDE: `hide${EVENT_KEY$4}`,\n  HIDDEN: `hidden${EVENT_KEY$4}`,\n  SHOW: `show${EVENT_KEY$4}`,\n  SHOWN: `shown${EVENT_KEY$4}`,\n  INSERTED: `inserted${EVENT_KEY$4}`,\n  CLICK: `click${EVENT_KEY$4}`,\n  FOCUSIN: `focusin${EVENT_KEY$4}`,\n  FOCUSOUT: `focusout${EVENT_KEY$4}`,\n  MOUSEENTER: `mouseenter${EVENT_KEY$4}`,\n  MOUSELEAVE: `mouseleave${EVENT_KEY$4}`\n};\nconst CLASS_NAME_FADE$3 = 'fade';\nconst CLASS_NAME_MODAL = 'modal';\nconst CLASS_NAME_SHOW$3 = 'show';\nconst HOVER_STATE_SHOW = 'show';\nconst HOVER_STATE_OUT = 'out';\nconst SELECTOR_TOOLTIP_INNER = '.tooltip-inner';\nconst TRIGGER_HOVER = 'hover';\nconst TRIGGER_FOCUS = 'focus';\nconst TRIGGER_CLICK = 'click';\nconst TRIGGER_MANUAL = 'manual';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Tooltip extends BaseComponent {\n  constructor(element, config) {\n    if (typeof Popper === 'undefined') {\n      throw new TypeError('Bootstrap\\'s tooltips require Popper (https://popper.js.org)');\n    }\n\n    super(element); // private\n\n    this._isEnabled = true;\n    this._timeout = 0;\n    this._hoverState = '';\n    this._activeTrigger = {};\n    this._popper = null; // Protected\n\n    this._config = this._getConfig(config);\n    this.tip = null;\n\n    this._setListeners();\n  } // Getters\n\n\n  static get Default() {\n    return Default$3;\n  }\n\n  static get NAME() {\n    return NAME$4;\n  }\n\n  static get Event() {\n    return Event$2;\n  }\n\n  static get DefaultType() {\n    return DefaultType$3;\n  } // Public\n\n\n  enable() {\n    this._isEnabled = true;\n  }\n\n  disable() {\n    this._isEnabled = false;\n  }\n\n  toggleEnabled() {\n    this._isEnabled = !this._isEnabled;\n  }\n\n  toggle(event) {\n    if (!this._isEnabled) {\n      return;\n    }\n\n    if (event) {\n      const context = this._initializeOnDelegatedTarget(event);\n\n      context._activeTrigger.click = !context._activeTrigger.click;\n\n      if (context._isWithActiveTrigger()) {\n        context._enter(null, context);\n      } else {\n        context._leave(null, context);\n      }\n    } else {\n      if (this.getTipElement().classList.contains(CLASS_NAME_SHOW$3)) {\n        this._leave(null, this);\n\n        return;\n      }\n\n      this._enter(null, this);\n    }\n  }\n\n  dispose() {\n    clearTimeout(this._timeout);\n    EventHandler.off(this._element.closest(`.${CLASS_NAME_MODAL}`), 'hide.bs.modal', this._hideModalHandler);\n\n    if (this.tip) {\n      this.tip.remove();\n    }\n\n    if (this._popper) {\n      this._popper.destroy();\n    }\n\n    super.dispose();\n  }\n\n  show() {\n    if (this._element.style.display === 'none') {\n      throw new Error('Please use show on visible elements');\n    }\n\n    if (!(this.isWithContent() && this._isEnabled)) {\n      return;\n    }\n\n    const showEvent = EventHandler.trigger(this._element, this.constructor.Event.SHOW);\n    const shadowRoot = findShadowRoot(this._element);\n    const isInTheDom = shadowRoot === null ? this._element.ownerDocument.documentElement.contains(this._element) : shadowRoot.contains(this._element);\n\n    if (showEvent.defaultPrevented || !isInTheDom) {\n      return;\n    }\n\n    const tip = this.getTipElement();\n    const tipId = getUID(this.constructor.NAME);\n    tip.setAttribute('id', tipId);\n\n    this._element.setAttribute('aria-describedby', tipId);\n\n    this.setContent();\n\n    if (this._config.animation) {\n      tip.classList.add(CLASS_NAME_FADE$3);\n    }\n\n    const placement = typeof this._config.placement === 'function' ? this._config.placement.call(this, tip, this._element) : this._config.placement;\n\n    const attachment = this._getAttachment(placement);\n\n    this._addAttachmentClass(attachment);\n\n    const {\n      container\n    } = this._config;\n    Data.set(tip, this.constructor.DATA_KEY, this);\n\n    if (!this._element.ownerDocument.documentElement.contains(this.tip)) {\n      container.appendChild(tip);\n      EventHandler.trigger(this._element, this.constructor.Event.INSERTED);\n    }\n\n    if (this._popper) {\n      this._popper.update();\n    } else {\n      this._popper = Popper.createPopper(this._element, tip, this._getPopperConfig(attachment));\n    }\n\n    tip.classList.add(CLASS_NAME_SHOW$3);\n    const customClass = typeof this._config.customClass === 'function' ? this._config.customClass() : this._config.customClass;\n\n    if (customClass) {\n      tip.classList.add(...customClass.split(' '));\n    } // If this is a touch-enabled device we add extra\n    // empty mouseover listeners to the body's immediate children;\n    // only needed because of broken event delegation on iOS\n    // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n\n\n    if ('ontouchstart' in document.documentElement) {\n      [].concat(...document.body.children).forEach(element => {\n        EventHandler.on(element, 'mouseover', noop);\n      });\n    }\n\n    const complete = () => {\n      const prevHoverState = this._hoverState;\n      this._hoverState = null;\n      EventHandler.trigger(this._element, this.constructor.Event.SHOWN);\n\n      if (prevHoverState === HOVER_STATE_OUT) {\n        this._leave(null, this);\n      }\n    };\n\n    const isAnimated = this.tip.classList.contains(CLASS_NAME_FADE$3);\n\n    this._queueCallback(complete, this.tip, isAnimated);\n  }\n\n  hide() {\n    if (!this._popper) {\n      return;\n    }\n\n    const tip = this.getTipElement();\n\n    const complete = () => {\n      if (this._isWithActiveTrigger()) {\n        return;\n      }\n\n      if (this._hoverState !== HOVER_STATE_SHOW) {\n        tip.remove();\n      }\n\n      this._cleanTipClass();\n\n      this._element.removeAttribute('aria-describedby');\n\n      EventHandler.trigger(this._element, this.constructor.Event.HIDDEN);\n\n      if (this._popper) {\n        this._popper.destroy();\n\n        this._popper = null;\n      }\n    };\n\n    const hideEvent = EventHandler.trigger(this._element, this.constructor.Event.HIDE);\n\n    if (hideEvent.defaultPrevented) {\n      return;\n    }\n\n    tip.classList.remove(CLASS_NAME_SHOW$3); // If this is a touch-enabled device we remove the extra\n    // empty mouseover listeners we added for iOS support\n\n    if ('ontouchstart' in document.documentElement) {\n      [].concat(...document.body.children).forEach(element => EventHandler.off(element, 'mouseover', noop));\n    }\n\n    this._activeTrigger[TRIGGER_CLICK] = false;\n    this._activeTrigger[TRIGGER_FOCUS] = false;\n    this._activeTrigger[TRIGGER_HOVER] = false;\n    const isAnimated = this.tip.classList.contains(CLASS_NAME_FADE$3);\n\n    this._queueCallback(complete, this.tip, isAnimated);\n\n    this._hoverState = '';\n  }\n\n  update() {\n    if (this._popper !== null) {\n      this._popper.update();\n    }\n  } // Protected\n\n\n  isWithContent() {\n    return Boolean(this.getTitle());\n  }\n\n  getTipElement() {\n    if (this.tip) {\n      return this.tip;\n    }\n\n    const element = document.createElement('div');\n    element.innerHTML = this._config.template;\n    this.tip = element.children[0];\n    return this.tip;\n  }\n\n  setContent() {\n    const tip = this.getTipElement();\n    this.setElementContent(SelectorEngine.findOne(SELECTOR_TOOLTIP_INNER, tip), this.getTitle());\n    tip.classList.remove(CLASS_NAME_FADE$3, CLASS_NAME_SHOW$3);\n  }\n\n  setElementContent(element, content) {\n    if (element === null) {\n      return;\n    }\n\n    if (isElement(content)) {\n      content = getElement(content); // content is a DOM node or a jQuery\n\n      if (this._config.html) {\n        if (content.parentNode !== element) {\n          element.innerHTML = '';\n          element.appendChild(content);\n        }\n      } else {\n        element.textContent = content.textContent;\n      }\n\n      return;\n    }\n\n    if (this._config.html) {\n      if (this._config.sanitize) {\n        content = sanitizeHtml(content, this._config.allowList, this._config.sanitizeFn);\n      }\n\n      element.innerHTML = content;\n    } else {\n      element.textContent = content;\n    }\n  }\n\n  getTitle() {\n    let title = this._element.getAttribute('data-bs-original-title');\n\n    if (!title) {\n      title = typeof this._config.title === 'function' ? this._config.title.call(this._element) : this._config.title;\n    }\n\n    return title;\n  }\n\n  updateAttachment(attachment) {\n    if (attachment === 'right') {\n      return 'end';\n    }\n\n    if (attachment === 'left') {\n      return 'start';\n    }\n\n    return attachment;\n  } // Private\n\n\n  _initializeOnDelegatedTarget(event, context) {\n    const dataKey = this.constructor.DATA_KEY;\n    context = context || Data.get(event.delegateTarget, dataKey);\n\n    if (!context) {\n      context = new this.constructor(event.delegateTarget, this._getDelegateConfig());\n      Data.set(event.delegateTarget, dataKey, context);\n    }\n\n    return context;\n  }\n\n  _getOffset() {\n    const {\n      offset\n    } = this._config;\n\n    if (typeof offset === 'string') {\n      return offset.split(',').map(val => Number.parseInt(val, 10));\n    }\n\n    if (typeof offset === 'function') {\n      return popperData => offset(popperData, this._element);\n    }\n\n    return offset;\n  }\n\n  _getPopperConfig(attachment) {\n    const defaultBsPopperConfig = {\n      placement: attachment,\n      modifiers: [{\n        name: 'flip',\n        options: {\n          fallbackPlacements: this._config.fallbackPlacements\n        }\n      }, {\n        name: 'offset',\n        options: {\n          offset: this._getOffset()\n        }\n      }, {\n        name: 'preventOverflow',\n        options: {\n          boundary: this._config.boundary\n        }\n      }, {\n        name: 'arrow',\n        options: {\n          element: `.${this.constructor.NAME}-arrow`\n        }\n      }, {\n        name: 'onChange',\n        enabled: true,\n        phase: 'afterWrite',\n        fn: data => this._handlePopperPlacementChange(data)\n      }],\n      onFirstUpdate: data => {\n        if (data.options.placement !== data.placement) {\n          this._handlePopperPlacementChange(data);\n        }\n      }\n    };\n    return { ...defaultBsPopperConfig,\n      ...(typeof this._config.popperConfig === 'function' ? this._config.popperConfig(defaultBsPopperConfig) : this._config.popperConfig)\n    };\n  }\n\n  _addAttachmentClass(attachment) {\n    this.getTipElement().classList.add(`${CLASS_PREFIX$1}-${this.updateAttachment(attachment)}`);\n  }\n\n  _getAttachment(placement) {\n    return AttachmentMap[placement.toUpperCase()];\n  }\n\n  _setListeners() {\n    const triggers = this._config.trigger.split(' ');\n\n    triggers.forEach(trigger => {\n      if (trigger === 'click') {\n        EventHandler.on(this._element, this.constructor.Event.CLICK, this._config.selector, event => this.toggle(event));\n      } else if (trigger !== TRIGGER_MANUAL) {\n        const eventIn = trigger === TRIGGER_HOVER ? this.constructor.Event.MOUSEENTER : this.constructor.Event.FOCUSIN;\n        const eventOut = trigger === TRIGGER_HOVER ? this.constructor.Event.MOUSELEAVE : this.constructor.Event.FOCUSOUT;\n        EventHandler.on(this._element, eventIn, this._config.selector, event => this._enter(event));\n        EventHandler.on(this._element, eventOut, this._config.selector, event => this._leave(event));\n      }\n    });\n\n    this._hideModalHandler = () => {\n      if (this._element) {\n        this.hide();\n      }\n    };\n\n    EventHandler.on(this._element.closest(`.${CLASS_NAME_MODAL}`), 'hide.bs.modal', this._hideModalHandler);\n\n    if (this._config.selector) {\n      this._config = { ...this._config,\n        trigger: 'manual',\n        selector: ''\n      };\n    } else {\n      this._fixTitle();\n    }\n  }\n\n  _fixTitle() {\n    const title = this._element.getAttribute('title');\n\n    const originalTitleType = typeof this._element.getAttribute('data-bs-original-title');\n\n    if (title || originalTitleType !== 'string') {\n      this._element.setAttribute('data-bs-original-title', title || '');\n\n      if (title && !this._element.getAttribute('aria-label') && !this._element.textContent) {\n        this._element.setAttribute('aria-label', title);\n      }\n\n      this._element.setAttribute('title', '');\n    }\n  }\n\n  _enter(event, context) {\n    context = this._initializeOnDelegatedTarget(event, context);\n\n    if (event) {\n      context._activeTrigger[event.type === 'focusin' ? TRIGGER_FOCUS : TRIGGER_HOVER] = true;\n    }\n\n    if (context.getTipElement().classList.contains(CLASS_NAME_SHOW$3) || context._hoverState === HOVER_STATE_SHOW) {\n      context._hoverState = HOVER_STATE_SHOW;\n      return;\n    }\n\n    clearTimeout(context._timeout);\n    context._hoverState = HOVER_STATE_SHOW;\n\n    if (!context._config.delay || !context._config.delay.show) {\n      context.show();\n      return;\n    }\n\n    context._timeout = setTimeout(() => {\n      if (context._hoverState === HOVER_STATE_SHOW) {\n        context.show();\n      }\n    }, context._config.delay.show);\n  }\n\n  _leave(event, context) {\n    context = this._initializeOnDelegatedTarget(event, context);\n\n    if (event) {\n      context._activeTrigger[event.type === 'focusout' ? TRIGGER_FOCUS : TRIGGER_HOVER] = context._element.contains(event.relatedTarget);\n    }\n\n    if (context._isWithActiveTrigger()) {\n      return;\n    }\n\n    clearTimeout(context._timeout);\n    context._hoverState = HOVER_STATE_OUT;\n\n    if (!context._config.delay || !context._config.delay.hide) {\n      context.hide();\n      return;\n    }\n\n    context._timeout = setTimeout(() => {\n      if (context._hoverState === HOVER_STATE_OUT) {\n        context.hide();\n      }\n    }, context._config.delay.hide);\n  }\n\n  _isWithActiveTrigger() {\n    for (const trigger in this._activeTrigger) {\n      if (this._activeTrigger[trigger]) {\n        return true;\n      }\n    }\n\n    return false;\n  }\n\n  _getConfig(config) {\n    const dataAttributes = Manipulator.getDataAttributes(this._element);\n    Object.keys(dataAttributes).forEach(dataAttr => {\n      if (DISALLOWED_ATTRIBUTES.has(dataAttr)) {\n        delete dataAttributes[dataAttr];\n      }\n    });\n    config = { ...this.constructor.Default,\n      ...dataAttributes,\n      ...(typeof config === 'object' && config ? config : {})\n    };\n    config.container = config.container === false ? document.body : getElement(config.container);\n\n    if (typeof config.delay === 'number') {\n      config.delay = {\n        show: config.delay,\n        hide: config.delay\n      };\n    }\n\n    if (typeof config.title === 'number') {\n      config.title = config.title.toString();\n    }\n\n    if (typeof config.content === 'number') {\n      config.content = config.content.toString();\n    }\n\n    typeCheckConfig(NAME$4, config, this.constructor.DefaultType);\n\n    if (config.sanitize) {\n      config.template = sanitizeHtml(config.template, config.allowList, config.sanitizeFn);\n    }\n\n    return config;\n  }\n\n  _getDelegateConfig() {\n    const config = {};\n\n    if (this._config) {\n      for (const key in this._config) {\n        if (this.constructor.Default[key] !== this._config[key]) {\n          config[key] = this._config[key];\n        }\n      }\n    }\n\n    return config;\n  }\n\n  _cleanTipClass() {\n    const tip = this.getTipElement();\n    const tabClass = tip.getAttribute('class').match(BSCLS_PREFIX_REGEX$1);\n\n    if (tabClass !== null && tabClass.length > 0) {\n      tabClass.map(token => token.trim()).forEach(tClass => tip.classList.remove(tClass));\n    }\n  }\n\n  _handlePopperPlacementChange(popperData) {\n    const {\n      state\n    } = popperData;\n\n    if (!state) {\n      return;\n    }\n\n    this.tip = state.elements.popper;\n\n    this._cleanTipClass();\n\n    this._addAttachmentClass(this._getAttachment(state.placement));\n  } // Static\n\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Tooltip.getOrCreateInstance(this, config);\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config]();\n      }\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Tooltip to jQuery only if jQuery is present\n */\n\n\ndefineJQueryPlugin(Tooltip);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): popover.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$3 = 'popover';\nconst DATA_KEY$3 = 'bs.popover';\nconst EVENT_KEY$3 = `.${DATA_KEY$3}`;\nconst CLASS_PREFIX = 'bs-popover';\nconst BSCLS_PREFIX_REGEX = new RegExp(`(^|\\\\s)${CLASS_PREFIX}\\\\S+`, 'g');\nconst Default$2 = { ...Tooltip.Default,\n  placement: 'right',\n  offset: [0, 8],\n  trigger: 'click',\n  content: '',\n  template: '<div class=\"popover\" role=\"tooltip\">' + '<div class=\"popover-arrow\"></div>' + '<h3 class=\"popover-header\"></h3>' + '<div class=\"popover-body\"></div>' + '</div>'\n};\nconst DefaultType$2 = { ...Tooltip.DefaultType,\n  content: '(string|element|function)'\n};\nconst Event$1 = {\n  HIDE: `hide${EVENT_KEY$3}`,\n  HIDDEN: `hidden${EVENT_KEY$3}`,\n  SHOW: `show${EVENT_KEY$3}`,\n  SHOWN: `shown${EVENT_KEY$3}`,\n  INSERTED: `inserted${EVENT_KEY$3}`,\n  CLICK: `click${EVENT_KEY$3}`,\n  FOCUSIN: `focusin${EVENT_KEY$3}`,\n  FOCUSOUT: `focusout${EVENT_KEY$3}`,\n  MOUSEENTER: `mouseenter${EVENT_KEY$3}`,\n  MOUSELEAVE: `mouseleave${EVENT_KEY$3}`\n};\nconst CLASS_NAME_FADE$2 = 'fade';\nconst CLASS_NAME_SHOW$2 = 'show';\nconst SELECTOR_TITLE = '.popover-header';\nconst SELECTOR_CONTENT = '.popover-body';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Popover extends Tooltip {\n  // Getters\n  static get Default() {\n    return Default$2;\n  }\n\n  static get NAME() {\n    return NAME$3;\n  }\n\n  static get Event() {\n    return Event$1;\n  }\n\n  static get DefaultType() {\n    return DefaultType$2;\n  } // Overrides\n\n\n  isWithContent() {\n    return this.getTitle() || this._getContent();\n  }\n\n  getTipElement() {\n    if (this.tip) {\n      return this.tip;\n    }\n\n    this.tip = super.getTipElement();\n\n    if (!this.getTitle()) {\n      SelectorEngine.findOne(SELECTOR_TITLE, this.tip).remove();\n    }\n\n    if (!this._getContent()) {\n      SelectorEngine.findOne(SELECTOR_CONTENT, this.tip).remove();\n    }\n\n    return this.tip;\n  }\n\n  setContent() {\n    const tip = this.getTipElement(); // we use append for html objects to maintain js events\n\n    this.setElementContent(SelectorEngine.findOne(SELECTOR_TITLE, tip), this.getTitle());\n\n    let content = this._getContent();\n\n    if (typeof content === 'function') {\n      content = content.call(this._element);\n    }\n\n    this.setElementContent(SelectorEngine.findOne(SELECTOR_CONTENT, tip), content);\n    tip.classList.remove(CLASS_NAME_FADE$2, CLASS_NAME_SHOW$2);\n  } // Private\n\n\n  _addAttachmentClass(attachment) {\n    this.getTipElement().classList.add(`${CLASS_PREFIX}-${this.updateAttachment(attachment)}`);\n  }\n\n  _getContent() {\n    return this._element.getAttribute('data-bs-content') || this._config.content;\n  }\n\n  _cleanTipClass() {\n    const tip = this.getTipElement();\n    const tabClass = tip.getAttribute('class').match(BSCLS_PREFIX_REGEX);\n\n    if (tabClass !== null && tabClass.length > 0) {\n      tabClass.map(token => token.trim()).forEach(tClass => tip.classList.remove(tClass));\n    }\n  } // Static\n\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Popover.getOrCreateInstance(this, config);\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config]();\n      }\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Popover to jQuery only if jQuery is present\n */\n\n\ndefineJQueryPlugin(Popover);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): scrollspy.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$2 = 'scrollspy';\nconst DATA_KEY$2 = 'bs.scrollspy';\nconst EVENT_KEY$2 = `.${DATA_KEY$2}`;\nconst DATA_API_KEY$1 = '.data-api';\nconst Default$1 = {\n  offset: 10,\n  method: 'auto',\n  target: ''\n};\nconst DefaultType$1 = {\n  offset: 'number',\n  method: 'string',\n  target: '(string|element)'\n};\nconst EVENT_ACTIVATE = `activate${EVENT_KEY$2}`;\nconst EVENT_SCROLL = `scroll${EVENT_KEY$2}`;\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY$2}${DATA_API_KEY$1}`;\nconst CLASS_NAME_DROPDOWN_ITEM = 'dropdown-item';\nconst CLASS_NAME_ACTIVE$1 = 'active';\nconst SELECTOR_DATA_SPY = '[data-bs-spy=\"scroll\"]';\nconst SELECTOR_NAV_LIST_GROUP$1 = '.nav, .list-group';\nconst SELECTOR_NAV_LINKS = '.nav-link';\nconst SELECTOR_NAV_ITEMS = '.nav-item';\nconst SELECTOR_LIST_ITEMS = '.list-group-item';\nconst SELECTOR_DROPDOWN$1 = '.dropdown';\nconst SELECTOR_DROPDOWN_TOGGLE$1 = '.dropdown-toggle';\nconst METHOD_OFFSET = 'offset';\nconst METHOD_POSITION = 'position';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass ScrollSpy extends BaseComponent {\n  constructor(element, config) {\n    super(element);\n    this._scrollElement = this._element.tagName === 'BODY' ? window : this._element;\n    this._config = this._getConfig(config);\n    this._selector = `${this._config.target} ${SELECTOR_NAV_LINKS}, ${this._config.target} ${SELECTOR_LIST_ITEMS}, ${this._config.target} .${CLASS_NAME_DROPDOWN_ITEM}`;\n    this._offsets = [];\n    this._targets = [];\n    this._activeTarget = null;\n    this._scrollHeight = 0;\n    EventHandler.on(this._scrollElement, EVENT_SCROLL, () => this._process());\n    this.refresh();\n\n    this._process();\n  } // Getters\n\n\n  static get Default() {\n    return Default$1;\n  }\n\n  static get NAME() {\n    return NAME$2;\n  } // Public\n\n\n  refresh() {\n    const autoMethod = this._scrollElement === this._scrollElement.window ? METHOD_OFFSET : METHOD_POSITION;\n    const offsetMethod = this._config.method === 'auto' ? autoMethod : this._config.method;\n    const offsetBase = offsetMethod === METHOD_POSITION ? this._getScrollTop() : 0;\n    this._offsets = [];\n    this._targets = [];\n    this._scrollHeight = this._getScrollHeight();\n    const targets = SelectorEngine.find(this._selector);\n    targets.map(element => {\n      const targetSelector = getSelectorFromElement(element);\n      const target = targetSelector ? SelectorEngine.findOne(targetSelector) : null;\n\n      if (target) {\n        const targetBCR = target.getBoundingClientRect();\n\n        if (targetBCR.width || targetBCR.height) {\n          return [Manipulator[offsetMethod](target).top + offsetBase, targetSelector];\n        }\n      }\n\n      return null;\n    }).filter(item => item).sort((a, b) => a[0] - b[0]).forEach(item => {\n      this._offsets.push(item[0]);\n\n      this._targets.push(item[1]);\n    });\n  }\n\n  dispose() {\n    EventHandler.off(this._scrollElement, EVENT_KEY$2);\n    super.dispose();\n  } // Private\n\n\n  _getConfig(config) {\n    config = { ...Default$1,\n      ...Manipulator.getDataAttributes(this._element),\n      ...(typeof config === 'object' && config ? config : {})\n    };\n\n    if (typeof config.target !== 'string' && isElement(config.target)) {\n      let {\n        id\n      } = config.target;\n\n      if (!id) {\n        id = getUID(NAME$2);\n        config.target.id = id;\n      }\n\n      config.target = `#${id}`;\n    }\n\n    typeCheckConfig(NAME$2, config, DefaultType$1);\n    return config;\n  }\n\n  _getScrollTop() {\n    return this._scrollElement === window ? this._scrollElement.pageYOffset : this._scrollElement.scrollTop;\n  }\n\n  _getScrollHeight() {\n    return this._scrollElement.scrollHeight || Math.max(document.body.scrollHeight, document.documentElement.scrollHeight);\n  }\n\n  _getOffsetHeight() {\n    return this._scrollElement === window ? window.innerHeight : this._scrollElement.getBoundingClientRect().height;\n  }\n\n  _process() {\n    const scrollTop = this._getScrollTop() + this._config.offset;\n\n    const scrollHeight = this._getScrollHeight();\n\n    const maxScroll = this._config.offset + scrollHeight - this._getOffsetHeight();\n\n    if (this._scrollHeight !== scrollHeight) {\n      this.refresh();\n    }\n\n    if (scrollTop >= maxScroll) {\n      const target = this._targets[this._targets.length - 1];\n\n      if (this._activeTarget !== target) {\n        this._activate(target);\n      }\n\n      return;\n    }\n\n    if (this._activeTarget && scrollTop < this._offsets[0] && this._offsets[0] > 0) {\n      this._activeTarget = null;\n\n      this._clear();\n\n      return;\n    }\n\n    for (let i = this._offsets.length; i--;) {\n      const isActiveTarget = this._activeTarget !== this._targets[i] && scrollTop >= this._offsets[i] && (typeof this._offsets[i + 1] === 'undefined' || scrollTop < this._offsets[i + 1]);\n\n      if (isActiveTarget) {\n        this._activate(this._targets[i]);\n      }\n    }\n  }\n\n  _activate(target) {\n    this._activeTarget = target;\n\n    this._clear();\n\n    const queries = this._selector.split(',').map(selector => `${selector}[data-bs-target=\"${target}\"],${selector}[href=\"${target}\"]`);\n\n    const link = SelectorEngine.findOne(queries.join(','));\n\n    if (link.classList.contains(CLASS_NAME_DROPDOWN_ITEM)) {\n      SelectorEngine.findOne(SELECTOR_DROPDOWN_TOGGLE$1, link.closest(SELECTOR_DROPDOWN$1)).classList.add(CLASS_NAME_ACTIVE$1);\n      link.classList.add(CLASS_NAME_ACTIVE$1);\n    } else {\n      // Set triggered link as active\n      link.classList.add(CLASS_NAME_ACTIVE$1);\n      SelectorEngine.parents(link, SELECTOR_NAV_LIST_GROUP$1).forEach(listGroup => {\n        // Set triggered links parents as active\n        // With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor\n        SelectorEngine.prev(listGroup, `${SELECTOR_NAV_LINKS}, ${SELECTOR_LIST_ITEMS}`).forEach(item => item.classList.add(CLASS_NAME_ACTIVE$1)); // Handle special case when .nav-link is inside .nav-item\n\n        SelectorEngine.prev(listGroup, SELECTOR_NAV_ITEMS).forEach(navItem => {\n          SelectorEngine.children(navItem, SELECTOR_NAV_LINKS).forEach(item => item.classList.add(CLASS_NAME_ACTIVE$1));\n        });\n      });\n    }\n\n    EventHandler.trigger(this._scrollElement, EVENT_ACTIVATE, {\n      relatedTarget: target\n    });\n  }\n\n  _clear() {\n    SelectorEngine.find(this._selector).filter(node => node.classList.contains(CLASS_NAME_ACTIVE$1)).forEach(node => node.classList.remove(CLASS_NAME_ACTIVE$1));\n  } // Static\n\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = ScrollSpy.getOrCreateInstance(this, config);\n\n      if (typeof config !== 'string') {\n        return;\n      }\n\n      if (typeof data[config] === 'undefined') {\n        throw new TypeError(`No method named \"${config}\"`);\n      }\n\n      data[config]();\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n  SelectorEngine.find(SELECTOR_DATA_SPY).forEach(spy => new ScrollSpy(spy));\n});\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .ScrollSpy to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(ScrollSpy);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): tab.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$1 = 'tab';\nconst DATA_KEY$1 = 'bs.tab';\nconst EVENT_KEY$1 = `.${DATA_KEY$1}`;\nconst DATA_API_KEY = '.data-api';\nconst EVENT_HIDE$1 = `hide${EVENT_KEY$1}`;\nconst EVENT_HIDDEN$1 = `hidden${EVENT_KEY$1}`;\nconst EVENT_SHOW$1 = `show${EVENT_KEY$1}`;\nconst EVENT_SHOWN$1 = `shown${EVENT_KEY$1}`;\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY$1}${DATA_API_KEY}`;\nconst CLASS_NAME_DROPDOWN_MENU = 'dropdown-menu';\nconst CLASS_NAME_ACTIVE = 'active';\nconst CLASS_NAME_FADE$1 = 'fade';\nconst CLASS_NAME_SHOW$1 = 'show';\nconst SELECTOR_DROPDOWN = '.dropdown';\nconst SELECTOR_NAV_LIST_GROUP = '.nav, .list-group';\nconst SELECTOR_ACTIVE = '.active';\nconst SELECTOR_ACTIVE_UL = ':scope > li > .active';\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"tab\"], [data-bs-toggle=\"pill\"], [data-bs-toggle=\"list\"]';\nconst SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle';\nconst SELECTOR_DROPDOWN_ACTIVE_CHILD = ':scope > .dropdown-menu .active';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Tab extends BaseComponent {\n  // Getters\n  static get NAME() {\n    return NAME$1;\n  } // Public\n\n\n  show() {\n    if (this._element.parentNode && this._element.parentNode.nodeType === Node.ELEMENT_NODE && this._element.classList.contains(CLASS_NAME_ACTIVE)) {\n      return;\n    }\n\n    let previous;\n    const target = getElementFromSelector(this._element);\n\n    const listElement = this._element.closest(SELECTOR_NAV_LIST_GROUP);\n\n    if (listElement) {\n      const itemSelector = listElement.nodeName === 'UL' || listElement.nodeName === 'OL' ? SELECTOR_ACTIVE_UL : SELECTOR_ACTIVE;\n      previous = SelectorEngine.find(itemSelector, listElement);\n      previous = previous[previous.length - 1];\n    }\n\n    const hideEvent = previous ? EventHandler.trigger(previous, EVENT_HIDE$1, {\n      relatedTarget: this._element\n    }) : null;\n    const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$1, {\n      relatedTarget: previous\n    });\n\n    if (showEvent.defaultPrevented || hideEvent !== null && hideEvent.defaultPrevented) {\n      return;\n    }\n\n    this._activate(this._element, listElement);\n\n    const complete = () => {\n      EventHandler.trigger(previous, EVENT_HIDDEN$1, {\n        relatedTarget: this._element\n      });\n      EventHandler.trigger(this._element, EVENT_SHOWN$1, {\n        relatedTarget: previous\n      });\n    };\n\n    if (target) {\n      this._activate(target, target.parentNode, complete);\n    } else {\n      complete();\n    }\n  } // Private\n\n\n  _activate(element, container, callback) {\n    const activeElements = container && (container.nodeName === 'UL' || container.nodeName === 'OL') ? SelectorEngine.find(SELECTOR_ACTIVE_UL, container) : SelectorEngine.children(container, SELECTOR_ACTIVE);\n    const active = activeElements[0];\n    const isTransitioning = callback && active && active.classList.contains(CLASS_NAME_FADE$1);\n\n    const complete = () => this._transitionComplete(element, active, callback);\n\n    if (active && isTransitioning) {\n      active.classList.remove(CLASS_NAME_SHOW$1);\n\n      this._queueCallback(complete, element, true);\n    } else {\n      complete();\n    }\n  }\n\n  _transitionComplete(element, active, callback) {\n    if (active) {\n      active.classList.remove(CLASS_NAME_ACTIVE);\n      const dropdownChild = SelectorEngine.findOne(SELECTOR_DROPDOWN_ACTIVE_CHILD, active.parentNode);\n\n      if (dropdownChild) {\n        dropdownChild.classList.remove(CLASS_NAME_ACTIVE);\n      }\n\n      if (active.getAttribute('role') === 'tab') {\n        active.setAttribute('aria-selected', false);\n      }\n    }\n\n    element.classList.add(CLASS_NAME_ACTIVE);\n\n    if (element.getAttribute('role') === 'tab') {\n      element.setAttribute('aria-selected', true);\n    }\n\n    reflow(element);\n\n    if (element.classList.contains(CLASS_NAME_FADE$1)) {\n      element.classList.add(CLASS_NAME_SHOW$1);\n    }\n\n    let parent = element.parentNode;\n\n    if (parent && parent.nodeName === 'LI') {\n      parent = parent.parentNode;\n    }\n\n    if (parent && parent.classList.contains(CLASS_NAME_DROPDOWN_MENU)) {\n      const dropdownElement = element.closest(SELECTOR_DROPDOWN);\n\n      if (dropdownElement) {\n        SelectorEngine.find(SELECTOR_DROPDOWN_TOGGLE, dropdownElement).forEach(dropdown => dropdown.classList.add(CLASS_NAME_ACTIVE));\n      }\n\n      element.setAttribute('aria-expanded', true);\n    }\n\n    if (callback) {\n      callback();\n    }\n  } // Static\n\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Tab.getOrCreateInstance(this);\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config]();\n      }\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n  if (['A', 'AREA'].includes(this.tagName)) {\n    event.preventDefault();\n  }\n\n  if (isDisabled(this)) {\n    return;\n  }\n\n  const data = Tab.getOrCreateInstance(this);\n  data.show();\n});\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Tab to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Tab);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): toast.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'toast';\nconst DATA_KEY = 'bs.toast';\nconst EVENT_KEY = `.${DATA_KEY}`;\nconst EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY}`;\nconst EVENT_MOUSEOVER = `mouseover${EVENT_KEY}`;\nconst EVENT_MOUSEOUT = `mouseout${EVENT_KEY}`;\nconst EVENT_FOCUSIN = `focusin${EVENT_KEY}`;\nconst EVENT_FOCUSOUT = `focusout${EVENT_KEY}`;\nconst EVENT_HIDE = `hide${EVENT_KEY}`;\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`;\nconst EVENT_SHOW = `show${EVENT_KEY}`;\nconst EVENT_SHOWN = `shown${EVENT_KEY}`;\nconst CLASS_NAME_FADE = 'fade';\nconst CLASS_NAME_HIDE = 'hide';\nconst CLASS_NAME_SHOW = 'show';\nconst CLASS_NAME_SHOWING = 'showing';\nconst DefaultType = {\n  animation: 'boolean',\n  autohide: 'boolean',\n  delay: 'number'\n};\nconst Default = {\n  animation: true,\n  autohide: true,\n  delay: 5000\n};\nconst SELECTOR_DATA_DISMISS = '[data-bs-dismiss=\"toast\"]';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Toast extends BaseComponent {\n  constructor(element, config) {\n    super(element);\n    this._config = this._getConfig(config);\n    this._timeout = null;\n    this._hasMouseInteraction = false;\n    this._hasKeyboardInteraction = false;\n\n    this._setListeners();\n  } // Getters\n\n\n  static get DefaultType() {\n    return DefaultType;\n  }\n\n  static get Default() {\n    return Default;\n  }\n\n  static get NAME() {\n    return NAME;\n  } // Public\n\n\n  show() {\n    const showEvent = EventHandler.trigger(this._element, EVENT_SHOW);\n\n    if (showEvent.defaultPrevented) {\n      return;\n    }\n\n    this._clearTimeout();\n\n    if (this._config.animation) {\n      this._element.classList.add(CLASS_NAME_FADE);\n    }\n\n    const complete = () => {\n      this._element.classList.remove(CLASS_NAME_SHOWING);\n\n      this._element.classList.add(CLASS_NAME_SHOW);\n\n      EventHandler.trigger(this._element, EVENT_SHOWN);\n\n      this._maybeScheduleHide();\n    };\n\n    this._element.classList.remove(CLASS_NAME_HIDE);\n\n    reflow(this._element);\n\n    this._element.classList.add(CLASS_NAME_SHOWING);\n\n    this._queueCallback(complete, this._element, this._config.animation);\n  }\n\n  hide() {\n    if (!this._element.classList.contains(CLASS_NAME_SHOW)) {\n      return;\n    }\n\n    const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE);\n\n    if (hideEvent.defaultPrevented) {\n      return;\n    }\n\n    const complete = () => {\n      this._element.classList.add(CLASS_NAME_HIDE);\n\n      EventHandler.trigger(this._element, EVENT_HIDDEN);\n    };\n\n    this._element.classList.remove(CLASS_NAME_SHOW);\n\n    this._queueCallback(complete, this._element, this._config.animation);\n  }\n\n  dispose() {\n    this._clearTimeout();\n\n    if (this._element.classList.contains(CLASS_NAME_SHOW)) {\n      this._element.classList.remove(CLASS_NAME_SHOW);\n    }\n\n    super.dispose();\n  } // Private\n\n\n  _getConfig(config) {\n    config = { ...Default,\n      ...Manipulator.getDataAttributes(this._element),\n      ...(typeof config === 'object' && config ? config : {})\n    };\n    typeCheckConfig(NAME, config, this.constructor.DefaultType);\n    return config;\n  }\n\n  _maybeScheduleHide() {\n    if (!this._config.autohide) {\n      return;\n    }\n\n    if (this._hasMouseInteraction || this._hasKeyboardInteraction) {\n      return;\n    }\n\n    this._timeout = setTimeout(() => {\n      this.hide();\n    }, this._config.delay);\n  }\n\n  _onInteraction(event, isInteracting) {\n    switch (event.type) {\n      case 'mouseover':\n      case 'mouseout':\n        this._hasMouseInteraction = isInteracting;\n        break;\n\n      case 'focusin':\n      case 'focusout':\n        this._hasKeyboardInteraction = isInteracting;\n        break;\n    }\n\n    if (isInteracting) {\n      this._clearTimeout();\n\n      return;\n    }\n\n    const nextElement = event.relatedTarget;\n\n    if (this._element === nextElement || this._element.contains(nextElement)) {\n      return;\n    }\n\n    this._maybeScheduleHide();\n  }\n\n  _setListeners() {\n    EventHandler.on(this._element, EVENT_CLICK_DISMISS, SELECTOR_DATA_DISMISS, () => this.hide());\n    EventHandler.on(this._element, EVENT_MOUSEOVER, event => this._onInteraction(event, true));\n    EventHandler.on(this._element, EVENT_MOUSEOUT, event => this._onInteraction(event, false));\n    EventHandler.on(this._element, EVENT_FOCUSIN, event => this._onInteraction(event, true));\n    EventHandler.on(this._element, EVENT_FOCUSOUT, event => this._onInteraction(event, false));\n  }\n\n  _clearTimeout() {\n    clearTimeout(this._timeout);\n    this._timeout = null;\n  } // Static\n\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Toast.getOrCreateInstance(this, config);\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config](this);\n      }\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Toast to jQuery only if jQuery is present\n */\n\n\ndefineJQueryPlugin(Toast);\n\nexport { Alert, Button, Carousel, Collapse, Dropdown, Modal, Offcanvas, Popover, ScrollSpy, Tab, Toast, Tooltip };\n//# sourceMappingURL=bootstrap.esm.js.map\n"
  },
  {
    "path": "src/sourceDev.WebApp/SharedThemes/slate/wwwroot/js/jquery.js",
    "content": "/*!\n * jQuery JavaScript Library v3.7.0\n * https://jquery.com/\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license\n * https://jquery.org/license\n *\n * Date: 2023-05-11T18:29Z\n */\n(function (global, factory) {\n\n\t\"use strict\";\n\n\tif (typeof module === \"object\" && typeof module.exports === \"object\") {\n\n\t\t// For CommonJS and CommonJS-like environments where a proper `window`\n\t\t// is present, execute the factory and get jQuery.\n\t\t// For environments that do not have a `window` with a `document`\n\t\t// (such as Node.js), expose a factory as module.exports.\n\t\t// This accentuates the need for the creation of a real `window`.\n\t\t// e.g. var jQuery = require(\"jquery\")(window);\n\t\t// See ticket trac-14549 for more info.\n\t\tmodule.exports = global.document ?\n\t\t\tfactory(global, true) :\n\t\t\tfunction (w) {\n\t\t\t\tif (!w.document) {\n\t\t\t\t\tthrow new Error(\"jQuery requires a window with a document\");\n\t\t\t\t}\n\t\t\t\treturn factory(w);\n\t\t\t};\n\t} else {\n\t\tfactory(global);\n\t}\n\n\t// Pass this if window is not defined yet\n})(typeof window !== \"undefined\" ? window : this, function (window, noGlobal) {\n\n\t// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1\n\t// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode\n\t// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common\n\t// enough that all such attempts are guarded in a try block.\n\t\"use strict\";\n\n\tvar arr = [];\n\n\tvar getProto = Object.getPrototypeOf;\n\n\tvar slice = arr.slice;\n\n\tvar flat = arr.flat ? function (array) {\n\t\treturn arr.flat.call(array);\n\t} : function (array) {\n\t\treturn arr.concat.apply([], array);\n\t};\n\n\n\tvar push = arr.push;\n\n\tvar indexOf = arr.indexOf;\n\n\tvar class2type = {};\n\n\tvar toString = class2type.toString;\n\n\tvar hasOwn = class2type.hasOwnProperty;\n\n\tvar fnToString = hasOwn.toString;\n\n\tvar ObjectFunctionString = fnToString.call(Object);\n\n\tvar support = {};\n\n\tvar isFunction = function isFunction(obj) {\n\n\t\t// Support: Chrome <=57, Firefox <=52\n\t\t// In some browsers, typeof returns \"function\" for HTML <object> elements\n\t\t// (i.e., `typeof document.createElement( \"object\" ) === \"function\"`).\n\t\t// We don't want to classify *any* DOM node as a function.\n\t\t// Support: QtWeb <=3.8.5, WebKit <=534.34, wkhtmltopdf tool <=0.12.5\n\t\t// Plus for old WebKit, typeof returns \"function\" for HTML collections\n\t\t// (e.g., `typeof document.getElementsByTagName(\"div\") === \"function\"`). (gh-4756)\n\t\treturn typeof obj === \"function\" && typeof obj.nodeType !== \"number\" &&\n\t\t\ttypeof obj.item !== \"function\";\n\t};\n\n\n\tvar isWindow = function isWindow(obj) {\n\t\treturn obj != null && obj === obj.window;\n\t};\n\n\n\tvar document = window.document;\n\n\n\n\tvar preservedScriptAttributes = {\n\t\ttype: true,\n\t\tsrc: true,\n\t\tnonce: true,\n\t\tnoModule: true\n\t};\n\n\tfunction DOMEval(code, node, doc) {\n\t\tdoc = doc || document;\n\n\t\tvar i, val,\n\t\t\tscript = doc.createElement(\"script\");\n\n\t\tscript.text = code;\n\t\tif (node) {\n\t\t\tfor (i in preservedScriptAttributes) {\n\n\t\t\t\t// Support: Firefox 64+, Edge 18+\n\t\t\t\t// Some browsers don't support the \"nonce\" property on scripts.\n\t\t\t\t// On the other hand, just using `getAttribute` is not enough as\n\t\t\t\t// the `nonce` attribute is reset to an empty string whenever it\n\t\t\t\t// becomes browsing-context connected.\n\t\t\t\t// See https://github.com/whatwg/html/issues/2369\n\t\t\t\t// See https://html.spec.whatwg.org/#nonce-attributes\n\t\t\t\t// The `node.getAttribute` check was added for the sake of\n\t\t\t\t// `jQuery.globalEval` so that it can fake a nonce-containing node\n\t\t\t\t// via an object.\n\t\t\t\tval = node[i] || node.getAttribute && node.getAttribute(i);\n\t\t\t\tif (val) {\n\t\t\t\t\tscript.setAttribute(i, val);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tdoc.head.appendChild(script).parentNode.removeChild(script);\n\t}\n\n\n\tfunction toType(obj) {\n\t\tif (obj == null) {\n\t\t\treturn obj + \"\";\n\t\t}\n\n\t\t// Support: Android <=2.3 only (functionish RegExp)\n\t\treturn typeof obj === \"object\" || typeof obj === \"function\" ?\n\t\t\tclass2type[toString.call(obj)] || \"object\" :\n\t\t\ttypeof obj;\n\t}\n\t/* global Symbol */\n\t// Defining this global in .eslintrc.json would create a danger of using the global\n\t// unguarded in another place, it seems safer to define global only for this module\n\n\n\n\tvar version = \"3.7.0\",\n\n\t\trhtmlSuffix = /HTML$/i,\n\n\t\t// Define a local copy of jQuery\n\t\tjQuery = function (selector, context) {\n\n\t\t\t// The jQuery object is actually just the init constructor 'enhanced'\n\t\t\t// Need init if jQuery is called (just allow error to be thrown if not included)\n\t\t\treturn new jQuery.fn.init(selector, context);\n\t\t};\n\n\tjQuery.fn = jQuery.prototype = {\n\n\t\t// The current version of jQuery being used\n\t\tjquery: version,\n\n\t\tconstructor: jQuery,\n\n\t\t// The default length of a jQuery object is 0\n\t\tlength: 0,\n\n\t\ttoArray: function () {\n\t\t\treturn slice.call(this);\n\t\t},\n\n\t\t// Get the Nth element in the matched element set OR\n\t\t// Get the whole matched element set as a clean array\n\t\tget: function (num) {\n\n\t\t\t// Return all the elements in a clean array\n\t\t\tif (num == null) {\n\t\t\t\treturn slice.call(this);\n\t\t\t}\n\n\t\t\t// Return just the one element from the set\n\t\t\treturn num < 0 ? this[num + this.length] : this[num];\n\t\t},\n\n\t\t// Take an array of elements and push it onto the stack\n\t\t// (returning the new matched element set)\n\t\tpushStack: function (elems) {\n\n\t\t\t// Build a new jQuery matched element set\n\t\t\tvar ret = jQuery.merge(this.constructor(), elems);\n\n\t\t\t// Add the old object onto the stack (as a reference)\n\t\t\tret.prevObject = this;\n\n\t\t\t// Return the newly-formed element set\n\t\t\treturn ret;\n\t\t},\n\n\t\t// Execute a callback for every element in the matched set.\n\t\teach: function (callback) {\n\t\t\treturn jQuery.each(this, callback);\n\t\t},\n\n\t\tmap: function (callback) {\n\t\t\treturn this.pushStack(jQuery.map(this, function (elem, i) {\n\t\t\t\treturn callback.call(elem, i, elem);\n\t\t\t}));\n\t\t},\n\n\t\tslice: function () {\n\t\t\treturn this.pushStack(slice.apply(this, arguments));\n\t\t},\n\n\t\tfirst: function () {\n\t\t\treturn this.eq(0);\n\t\t},\n\n\t\tlast: function () {\n\t\t\treturn this.eq(-1);\n\t\t},\n\n\t\teven: function () {\n\t\t\treturn this.pushStack(jQuery.grep(this, function (_elem, i) {\n\t\t\t\treturn (i + 1) % 2;\n\t\t\t}));\n\t\t},\n\n\t\todd: function () {\n\t\t\treturn this.pushStack(jQuery.grep(this, function (_elem, i) {\n\t\t\t\treturn i % 2;\n\t\t\t}));\n\t\t},\n\n\t\teq: function (i) {\n\t\t\tvar len = this.length,\n\t\t\t\tj = +i + (i < 0 ? len : 0);\n\t\t\treturn this.pushStack(j >= 0 && j < len ? [this[j]] : []);\n\t\t},\n\n\t\tend: function () {\n\t\t\treturn this.prevObject || this.constructor();\n\t\t},\n\n\t\t// For internal use only.\n\t\t// Behaves like an Array's method, not like a jQuery method.\n\t\tpush: push,\n\t\tsort: arr.sort,\n\t\tsplice: arr.splice\n\t};\n\n\tjQuery.extend = jQuery.fn.extend = function () {\n\t\tvar options, name, src, copy, copyIsArray, clone,\n\t\t\ttarget = arguments[0] || {},\n\t\t\ti = 1,\n\t\t\tlength = arguments.length,\n\t\t\tdeep = false;\n\n\t\t// Handle a deep copy situation\n\t\tif (typeof target === \"boolean\") {\n\t\t\tdeep = target;\n\n\t\t\t// Skip the boolean and the target\n\t\t\ttarget = arguments[i] || {};\n\t\t\ti++;\n\t\t}\n\n\t\t// Handle case when target is a string or something (possible in deep copy)\n\t\tif (typeof target !== \"object\" && !isFunction(target)) {\n\t\t\ttarget = {};\n\t\t}\n\n\t\t// Extend jQuery itself if only one argument is passed\n\t\tif (i === length) {\n\t\t\ttarget = this;\n\t\t\ti--;\n\t\t}\n\n\t\tfor (; i < length; i++) {\n\n\t\t\t// Only deal with non-null/undefined values\n\t\t\tif ((options = arguments[i]) != null) {\n\n\t\t\t\t// Extend the base object\n\t\t\t\tfor (name in options) {\n\t\t\t\t\tcopy = options[name];\n\n\t\t\t\t\t// Prevent Object.prototype pollution\n\t\t\t\t\t// Prevent never-ending loop\n\t\t\t\t\tif (name === \"__proto__\" || target === copy) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\t\tif (deep && copy && (jQuery.isPlainObject(copy) ||\n\t\t\t\t\t\t(copyIsArray = Array.isArray(copy)))) {\n\t\t\t\t\t\tsrc = target[name];\n\n\t\t\t\t\t\t// Ensure proper type for the source value\n\t\t\t\t\t\tif (copyIsArray && !Array.isArray(src)) {\n\t\t\t\t\t\t\tclone = [];\n\t\t\t\t\t\t} else if (!copyIsArray && !jQuery.isPlainObject(src)) {\n\t\t\t\t\t\t\tclone = {};\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tclone = src;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcopyIsArray = false;\n\n\t\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\t\ttarget[name] = jQuery.extend(deep, clone, copy);\n\n\t\t\t\t\t\t// Don't bring in undefined values\n\t\t\t\t\t} else if (copy !== undefined) {\n\t\t\t\t\t\ttarget[name] = copy;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Return the modified object\n\t\treturn target;\n\t};\n\n\tjQuery.extend({\n\n\t\t// Unique for each copy of jQuery on the page\n\t\texpando: \"jQuery\" + (version + Math.random()).replace(/\\D/g, \"\"),\n\n\t\t// Assume jQuery is ready without the ready module\n\t\tisReady: true,\n\n\t\terror: function (msg) {\n\t\t\tthrow new Error(msg);\n\t\t},\n\n\t\tnoop: function () { },\n\n\t\tisPlainObject: function (obj) {\n\t\t\tvar proto, Ctor;\n\n\t\t\t// Detect obvious negatives\n\t\t\t// Use toString instead of jQuery.type to catch host objects\n\t\t\tif (!obj || toString.call(obj) !== \"[object Object]\") {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tproto = getProto(obj);\n\n\t\t\t// Objects with no prototype (e.g., `Object.create( null )`) are plain\n\t\t\tif (!proto) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\t// Objects with prototype are plain iff they were constructed by a global Object function\n\t\t\tCtor = hasOwn.call(proto, \"constructor\") && proto.constructor;\n\t\t\treturn typeof Ctor === \"function\" && fnToString.call(Ctor) === ObjectFunctionString;\n\t\t},\n\n\t\tisEmptyObject: function (obj) {\n\t\t\tvar name;\n\n\t\t\tfor (name in obj) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\n\t\t// Evaluates a script in a provided context; falls back to the global one\n\t\t// if not specified.\n\t\tglobalEval: function (code, options, doc) {\n\t\t\tDOMEval(code, { nonce: options && options.nonce }, doc);\n\t\t},\n\n\t\teach: function (obj, callback) {\n\t\t\tvar length, i = 0;\n\n\t\t\tif (isArrayLike(obj)) {\n\t\t\t\tlength = obj.length;\n\t\t\t\tfor (; i < length; i++) {\n\t\t\t\t\tif (callback.call(obj[i], i, obj[i]) === false) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor (i in obj) {\n\t\t\t\t\tif (callback.call(obj[i], i, obj[i]) === false) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn obj;\n\t\t},\n\n\n\t\t// Retrieve the text value of an array of DOM nodes\n\t\ttext: function (elem) {\n\t\t\tvar node,\n\t\t\t\tret = \"\",\n\t\t\t\ti = 0,\n\t\t\t\tnodeType = elem.nodeType;\n\n\t\t\tif (!nodeType) {\n\n\t\t\t\t// If no nodeType, this is expected to be an array\n\t\t\t\twhile ((node = elem[i++])) {\n\n\t\t\t\t\t// Do not traverse comment nodes\n\t\t\t\t\tret += jQuery.text(node);\n\t\t\t\t}\n\t\t\t} else if (nodeType === 1 || nodeType === 9 || nodeType === 11) {\n\t\t\t\treturn elem.textContent;\n\t\t\t} else if (nodeType === 3 || nodeType === 4) {\n\t\t\t\treturn elem.nodeValue;\n\t\t\t}\n\n\t\t\t// Do not include comment or processing instruction nodes\n\n\t\t\treturn ret;\n\t\t},\n\n\t\t// results is for internal usage only\n\t\tmakeArray: function (arr, results) {\n\t\t\tvar ret = results || [];\n\n\t\t\tif (arr != null) {\n\t\t\t\tif (isArrayLike(Object(arr))) {\n\t\t\t\t\tjQuery.merge(ret,\n\t\t\t\t\t\ttypeof arr === \"string\" ?\n\t\t\t\t\t\t\t[arr] : arr\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\tpush.call(ret, arr);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn ret;\n\t\t},\n\n\t\tinArray: function (elem, arr, i) {\n\t\t\treturn arr == null ? -1 : indexOf.call(arr, elem, i);\n\t\t},\n\n\t\tisXMLDoc: function (elem) {\n\t\t\tvar namespace = elem && elem.namespaceURI,\n\t\t\t\tdocElem = elem && (elem.ownerDocument || elem).documentElement;\n\n\t\t\t// Assume HTML when documentElement doesn't yet exist, such as inside\n\t\t\t// document fragments.\n\t\t\treturn !rhtmlSuffix.test(namespace || docElem && docElem.nodeName || \"HTML\");\n\t\t},\n\n\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\tmerge: function (first, second) {\n\t\t\tvar len = +second.length,\n\t\t\t\tj = 0,\n\t\t\t\ti = first.length;\n\n\t\t\tfor (; j < len; j++) {\n\t\t\t\tfirst[i++] = second[j];\n\t\t\t}\n\n\t\t\tfirst.length = i;\n\n\t\t\treturn first;\n\t\t},\n\n\t\tgrep: function (elems, callback, invert) {\n\t\t\tvar callbackInverse,\n\t\t\t\tmatches = [],\n\t\t\t\ti = 0,\n\t\t\t\tlength = elems.length,\n\t\t\t\tcallbackExpect = !invert;\n\n\t\t\t// Go through the array, only saving the items\n\t\t\t// that pass the validator function\n\t\t\tfor (; i < length; i++) {\n\t\t\t\tcallbackInverse = !callback(elems[i], i);\n\t\t\t\tif (callbackInverse !== callbackExpect) {\n\t\t\t\t\tmatches.push(elems[i]);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn matches;\n\t\t},\n\n\t\t// arg is for internal usage only\n\t\tmap: function (elems, callback, arg) {\n\t\t\tvar length, value,\n\t\t\t\ti = 0,\n\t\t\t\tret = [];\n\n\t\t\t// Go through the array, translating each of the items to their new values\n\t\t\tif (isArrayLike(elems)) {\n\t\t\t\tlength = elems.length;\n\t\t\t\tfor (; i < length; i++) {\n\t\t\t\t\tvalue = callback(elems[i], i, arg);\n\n\t\t\t\t\tif (value != null) {\n\t\t\t\t\t\tret.push(value);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Go through every key on the object,\n\t\t\t} else {\n\t\t\t\tfor (i in elems) {\n\t\t\t\t\tvalue = callback(elems[i], i, arg);\n\n\t\t\t\t\tif (value != null) {\n\t\t\t\t\t\tret.push(value);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Flatten any nested arrays\n\t\t\treturn flat(ret);\n\t\t},\n\n\t\t// A global GUID counter for objects\n\t\tguid: 1,\n\n\t\t// jQuery.support is not used in Core but other projects attach their\n\t\t// properties to it so it needs to exist.\n\t\tsupport: support\n\t});\n\n\tif (typeof Symbol === \"function\") {\n\t\tjQuery.fn[Symbol.iterator] = arr[Symbol.iterator];\n\t}\n\n\t// Populate the class2type map\n\tjQuery.each(\"Boolean Number String Function Array Date RegExp Object Error Symbol\".split(\" \"),\n\t\tfunction (_i, name) {\n\t\t\tclass2type[\"[object \" + name + \"]\"] = name.toLowerCase();\n\t\t});\n\n\tfunction isArrayLike(obj) {\n\n\t\t// Support: real iOS 8.2 only (not reproducible in simulator)\n\t\t// `in` check used to prevent JIT error (gh-2145)\n\t\t// hasOwn isn't used here due to false negatives\n\t\t// regarding Nodelist length in IE\n\t\tvar length = !!obj && \"length\" in obj && obj.length,\n\t\t\ttype = toType(obj);\n\n\t\tif (isFunction(obj) || isWindow(obj)) {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn type === \"array\" || length === 0 ||\n\t\t\ttypeof length === \"number\" && length > 0 && (length - 1) in obj;\n\t}\n\n\n\tfunction nodeName(elem, name) {\n\n\t\treturn elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();\n\n\t}\n\tvar pop = arr.pop;\n\n\n\tvar sort = arr.sort;\n\n\n\tvar splice = arr.splice;\n\n\n\tvar whitespace = \"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\";\n\n\n\tvar rtrimCSS = new RegExp(\n\t\t\"^\" + whitespace + \"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\" + whitespace + \"+$\",\n\t\t\"g\"\n\t);\n\n\n\n\n\t// Note: an element does not contain itself\n\tjQuery.contains = function (a, b) {\n\t\tvar bup = b && b.parentNode;\n\n\t\treturn a === bup || !!(bup && bup.nodeType === 1 && (\n\n\t\t\t// Support: IE 9 - 11+\n\t\t\t// IE doesn't have `contains` on SVG.\n\t\t\ta.contains ?\n\t\t\t\ta.contains(bup) :\n\t\t\t\ta.compareDocumentPosition && a.compareDocumentPosition(bup) & 16\n\t\t));\n\t};\n\n\n\n\n\t// CSS string/identifier serialization\n\t// https://drafts.csswg.org/cssom/#common-serializing-idioms\n\tvar rcssescape = /([\\0-\\x1f\\x7f]|^-?\\d)|^-$|[^\\x80-\\uFFFF\\w-]/g;\n\n\tfunction fcssescape(ch, asCodePoint) {\n\t\tif (asCodePoint) {\n\n\t\t\t// U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER\n\t\t\tif (ch === \"\\0\") {\n\t\t\t\treturn \"\\uFFFD\";\n\t\t\t}\n\n\t\t\t// Control characters and (dependent upon position) numbers get escaped as code points\n\t\t\treturn ch.slice(0, -1) + \"\\\\\" + ch.charCodeAt(ch.length - 1).toString(16) + \" \";\n\t\t}\n\n\t\t// Other potentially-special ASCII characters get backslash-escaped\n\t\treturn \"\\\\\" + ch;\n\t}\n\n\tjQuery.escapeSelector = function (sel) {\n\t\treturn (sel + \"\").replace(rcssescape, fcssescape);\n\t};\n\n\n\n\n\tvar preferredDoc = document,\n\t\tpushNative = push;\n\n\t(function () {\n\n\t\tvar i,\n\t\t\tExpr,\n\t\t\toutermostContext,\n\t\t\tsortInput,\n\t\t\thasDuplicate,\n\t\t\tpush = pushNative,\n\n\t\t\t// Local document vars\n\t\t\tdocument,\n\t\t\tdocumentElement,\n\t\t\tdocumentIsHTML,\n\t\t\trbuggyQSA,\n\t\t\tmatches,\n\n\t\t\t// Instance-specific data\n\t\t\texpando = jQuery.expando,\n\t\t\tdirruns = 0,\n\t\t\tdone = 0,\n\t\t\tclassCache = createCache(),\n\t\t\ttokenCache = createCache(),\n\t\t\tcompilerCache = createCache(),\n\t\t\tnonnativeSelectorCache = createCache(),\n\t\t\tsortOrder = function (a, b) {\n\t\t\t\tif (a === b) {\n\t\t\t\t\thasDuplicate = true;\n\t\t\t\t}\n\t\t\t\treturn 0;\n\t\t\t},\n\n\t\t\tbooleans = \"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|\" +\n\t\t\t\t\"loop|multiple|open|readonly|required|scoped\",\n\n\t\t\t// Regular expressions\n\n\t\t\t// https://www.w3.org/TR/css-syntax-3/#ident-token-diagram\n\t\t\tidentifier = \"(?:\\\\\\\\[\\\\da-fA-F]{1,6}\" + whitespace +\n\t\t\t\t\"?|\\\\\\\\[^\\\\r\\\\n\\\\f]|[\\\\w-]|[^\\0-\\\\x7f])+\",\n\n\t\t\t// Attribute selectors: https://www.w3.org/TR/selectors/#attribute-selectors\n\t\t\tattributes = \"\\\\[\" + whitespace + \"*(\" + identifier + \")(?:\" + whitespace +\n\n\t\t\t\t// Operator (capture 2)\n\t\t\t\t\"*([*^$|!~]?=)\" + whitespace +\n\n\t\t\t\t// \"Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]\"\n\t\t\t\t\"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\" + identifier + \"))|)\" +\n\t\t\t\twhitespace + \"*\\\\]\",\n\n\t\t\tpseudos = \":(\" + identifier + \")(?:\\\\((\" +\n\n\t\t\t\t// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:\n\t\t\t\t// 1. quoted (capture 3; capture 4 or capture 5)\n\t\t\t\t\"('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|\" +\n\n\t\t\t\t// 2. simple (capture 6)\n\t\t\t\t\"((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\" + attributes + \")*)|\" +\n\n\t\t\t\t// 3. anything else (capture 2)\n\t\t\t\t\".*\" +\n\t\t\t\t\")\\\\)|)\",\n\n\t\t\t// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter\n\t\t\trwhitespace = new RegExp(whitespace + \"+\", \"g\"),\n\n\t\t\trcomma = new RegExp(\"^\" + whitespace + \"*,\" + whitespace + \"*\"),\n\t\t\trleadingCombinator = new RegExp(\"^\" + whitespace + \"*([>+~]|\" + whitespace + \")\" +\n\t\t\t\twhitespace + \"*\"),\n\t\t\trdescend = new RegExp(whitespace + \"|>\"),\n\n\t\t\trpseudo = new RegExp(pseudos),\n\t\t\tridentifier = new RegExp(\"^\" + identifier + \"$\"),\n\n\t\t\tmatchExpr = {\n\t\t\t\tID: new RegExp(\"^#(\" + identifier + \")\"),\n\t\t\t\tCLASS: new RegExp(\"^\\\\.(\" + identifier + \")\"),\n\t\t\t\tTAG: new RegExp(\"^(\" + identifier + \"|[*])\"),\n\t\t\t\tATTR: new RegExp(\"^\" + attributes),\n\t\t\t\tPSEUDO: new RegExp(\"^\" + pseudos),\n\t\t\t\tCHILD: new RegExp(\n\t\t\t\t\t\"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\" +\n\t\t\t\t\twhitespace + \"*(even|odd|(([+-]|)(\\\\d*)n|)\" + whitespace + \"*(?:([+-]|)\" +\n\t\t\t\t\twhitespace + \"*(\\\\d+)|))\" + whitespace + \"*\\\\)|)\", \"i\"),\n\t\t\t\tbool: new RegExp(\"^(?:\" + booleans + \")$\", \"i\"),\n\n\t\t\t\t// For use in libraries implementing .is()\n\t\t\t\t// We use this for POS matching in `select`\n\t\t\t\tneedsContext: new RegExp(\"^\" + whitespace +\n\t\t\t\t\t\"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\" + whitespace +\n\t\t\t\t\t\"*((?:-\\\\d)?\\\\d*)\" + whitespace + \"*\\\\)|)(?=[^-]|$)\", \"i\")\n\t\t\t},\n\n\t\t\trinputs = /^(?:input|select|textarea|button)$/i,\n\t\t\trheader = /^h\\d$/i,\n\n\t\t\t// Easily-parseable/retrievable ID or TAG or CLASS selectors\n\t\t\trquickExpr = /^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,\n\n\t\t\trsibling = /[+~]/,\n\n\t\t\t// CSS escapes\n\t\t\t// https://www.w3.org/TR/CSS21/syndata.html#escaped-characters\n\t\t\trunescape = new RegExp(\"\\\\\\\\[\\\\da-fA-F]{1,6}\" + whitespace +\n\t\t\t\t\"?|\\\\\\\\([^\\\\r\\\\n\\\\f])\", \"g\"),\n\t\t\tfunescape = function (escape, nonHex) {\n\t\t\t\tvar high = \"0x\" + escape.slice(1) - 0x10000;\n\n\t\t\t\tif (nonHex) {\n\n\t\t\t\t\t// Strip the backslash prefix from a non-hex escape sequence\n\t\t\t\t\treturn nonHex;\n\t\t\t\t}\n\n\t\t\t\t// Replace a hexadecimal escape sequence with the encoded Unicode code point\n\t\t\t\t// Support: IE <=11+\n\t\t\t\t// For values outside the Basic Multilingual Plane (BMP), manually construct a\n\t\t\t\t// surrogate pair\n\t\t\t\treturn high < 0 ?\n\t\t\t\t\tString.fromCharCode(high + 0x10000) :\n\t\t\t\t\tString.fromCharCode(high >> 10 | 0xD800, high & 0x3FF | 0xDC00);\n\t\t\t},\n\n\t\t\t// Used for iframes; see `setDocument`.\n\t\t\t// Support: IE 9 - 11+, Edge 12 - 18+\n\t\t\t// Removing the function wrapper causes a \"Permission Denied\"\n\t\t\t// error in IE/Edge.\n\t\t\tunloadHandler = function () {\n\t\t\t\tsetDocument();\n\t\t\t},\n\n\t\t\tinDisabledFieldset = addCombinator(\n\t\t\t\tfunction (elem) {\n\t\t\t\t\treturn elem.disabled === true && nodeName(elem, \"fieldset\");\n\t\t\t\t},\n\t\t\t\t{ dir: \"parentNode\", next: \"legend\" }\n\t\t\t);\n\n\t\t// Support: IE <=9 only\n\t\t// Accessing document.activeElement can throw unexpectedly\n\t\t// https://bugs.jquery.com/ticket/13393\n\t\tfunction safeActiveElement() {\n\t\t\ttry {\n\t\t\t\treturn document.activeElement;\n\t\t\t} catch (err) { }\n\t\t}\n\n\t\t// Optimize for push.apply( _, NodeList )\n\t\ttry {\n\t\t\tpush.apply(\n\t\t\t\t(arr = slice.call(preferredDoc.childNodes)),\n\t\t\t\tpreferredDoc.childNodes\n\t\t\t);\n\n\t\t\t// Support: Android <=4.0\n\t\t\t// Detect silently failing push.apply\n\t\t\t// eslint-disable-next-line no-unused-expressions\n\t\t\tarr[preferredDoc.childNodes.length].nodeType;\n\t\t} catch (e) {\n\t\t\tpush = {\n\t\t\t\tapply: function (target, els) {\n\t\t\t\t\tpushNative.apply(target, slice.call(els));\n\t\t\t\t},\n\t\t\t\tcall: function (target) {\n\t\t\t\t\tpushNative.apply(target, slice.call(arguments, 1));\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\n\t\tfunction find(selector, context, results, seed) {\n\t\t\tvar m, i, elem, nid, match, groups, newSelector,\n\t\t\t\tnewContext = context && context.ownerDocument,\n\n\t\t\t\t// nodeType defaults to 9, since context defaults to document\n\t\t\t\tnodeType = context ? context.nodeType : 9;\n\n\t\t\tresults = results || [];\n\n\t\t\t// Return early from calls with invalid selector or context\n\t\t\tif (typeof selector !== \"string\" || !selector ||\n\t\t\t\tnodeType !== 1 && nodeType !== 9 && nodeType !== 11) {\n\n\t\t\t\treturn results;\n\t\t\t}\n\n\t\t\t// Try to shortcut find operations (as opposed to filters) in HTML documents\n\t\t\tif (!seed) {\n\t\t\t\tsetDocument(context);\n\t\t\t\tcontext = context || document;\n\n\t\t\t\tif (documentIsHTML) {\n\n\t\t\t\t\t// If the selector is sufficiently simple, try using a \"get*By*\" DOM method\n\t\t\t\t\t// (excepting DocumentFragment context, where the methods don't exist)\n\t\t\t\t\tif (nodeType !== 11 && (match = rquickExpr.exec(selector))) {\n\n\t\t\t\t\t\t// ID selector\n\t\t\t\t\t\tif ((m = match[1])) {\n\n\t\t\t\t\t\t\t// Document context\n\t\t\t\t\t\t\tif (nodeType === 9) {\n\t\t\t\t\t\t\t\tif ((elem = context.getElementById(m))) {\n\n\t\t\t\t\t\t\t\t\t// Support: IE 9 only\n\t\t\t\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\t\t\t\tif (elem.id === m) {\n\t\t\t\t\t\t\t\t\t\tpush.call(results, elem);\n\t\t\t\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t// Element context\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t// Support: IE 9 only\n\t\t\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\t\t\tif (newContext && (elem = newContext.getElementById(m)) &&\n\t\t\t\t\t\t\t\t\tfind.contains(context, elem) &&\n\t\t\t\t\t\t\t\t\telem.id === m) {\n\n\t\t\t\t\t\t\t\t\tpush.call(results, elem);\n\t\t\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Type selector\n\t\t\t\t\t\t} else if (match[2]) {\n\t\t\t\t\t\t\tpush.apply(results, context.getElementsByTagName(selector));\n\t\t\t\t\t\t\treturn results;\n\n\t\t\t\t\t\t\t// Class selector\n\t\t\t\t\t\t} else if ((m = match[3]) && context.getElementsByClassName) {\n\t\t\t\t\t\t\tpush.apply(results, context.getElementsByClassName(m));\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Take advantage of querySelectorAll\n\t\t\t\t\tif (!nonnativeSelectorCache[selector + \" \"] &&\n\t\t\t\t\t\t(!rbuggyQSA || !rbuggyQSA.test(selector))) {\n\n\t\t\t\t\t\tnewSelector = selector;\n\t\t\t\t\t\tnewContext = context;\n\n\t\t\t\t\t\t// qSA considers elements outside a scoping root when evaluating child or\n\t\t\t\t\t\t// descendant combinators, which is not what we want.\n\t\t\t\t\t\t// In such cases, we work around the behavior by prefixing every selector in the\n\t\t\t\t\t\t// list with an ID selector referencing the scope context.\n\t\t\t\t\t\t// The technique has to be used as well when a leading combinator is used\n\t\t\t\t\t\t// as such selectors are not recognized by querySelectorAll.\n\t\t\t\t\t\t// Thanks to Andrew Dupont for this technique.\n\t\t\t\t\t\tif (nodeType === 1 &&\n\t\t\t\t\t\t\t(rdescend.test(selector) || rleadingCombinator.test(selector))) {\n\n\t\t\t\t\t\t\t// Expand context for sibling selectors\n\t\t\t\t\t\t\tnewContext = rsibling.test(selector) && testContext(context.parentNode) ||\n\t\t\t\t\t\t\t\tcontext;\n\n\t\t\t\t\t\t\t// We can use :scope instead of the ID hack if the browser\n\t\t\t\t\t\t\t// supports it & if we're not changing the context.\n\t\t\t\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when\n\t\t\t\t\t\t\t// strict-comparing two documents; shallow comparisons work.\n\t\t\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\t\t\tif (newContext != context || !support.scope) {\n\n\t\t\t\t\t\t\t\t// Capture the context ID, setting it first if necessary\n\t\t\t\t\t\t\t\tif ((nid = context.getAttribute(\"id\"))) {\n\t\t\t\t\t\t\t\t\tnid = jQuery.escapeSelector(nid);\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tcontext.setAttribute(\"id\", (nid = expando));\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Prefix every selector in the list\n\t\t\t\t\t\t\tgroups = tokenize(selector);\n\t\t\t\t\t\t\ti = groups.length;\n\t\t\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\t\t\tgroups[i] = (nid ? \"#\" + nid : \":scope\") + \" \" +\n\t\t\t\t\t\t\t\t\ttoSelector(groups[i]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tnewSelector = groups.join(\",\");\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tpush.apply(results,\n\t\t\t\t\t\t\t\tnewContext.querySelectorAll(newSelector)\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t} catch (qsaError) {\n\t\t\t\t\t\t\tnonnativeSelectorCache(selector, true);\n\t\t\t\t\t\t} finally {\n\t\t\t\t\t\t\tif (nid === expando) {\n\t\t\t\t\t\t\t\tcontext.removeAttribute(\"id\");\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// All others\n\t\t\treturn select(selector.replace(rtrimCSS, \"$1\"), context, results, seed);\n\t\t}\n\n\t\t/**\n\t\t * Create key-value caches of limited size\n\t\t * @returns {function(string, object)} Returns the Object data after storing it on itself with\n\t\t *\tproperty name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)\n\t\t *\tdeleting the oldest entry\n\t\t */\n\t\tfunction createCache() {\n\t\t\tvar keys = [];\n\n\t\t\tfunction cache(key, value) {\n\n\t\t\t\t// Use (key + \" \") to avoid collision with native prototype properties\n\t\t\t\t// (see https://github.com/jquery/sizzle/issues/157)\n\t\t\t\tif (keys.push(key + \" \") > Expr.cacheLength) {\n\n\t\t\t\t\t// Only keep the most recent entries\n\t\t\t\t\tdelete cache[keys.shift()];\n\t\t\t\t}\n\t\t\t\treturn (cache[key + \" \"] = value);\n\t\t\t}\n\t\t\treturn cache;\n\t\t}\n\n\t\t/**\n\t\t * Mark a function for special use by jQuery selector module\n\t\t * @param {Function} fn The function to mark\n\t\t */\n\t\tfunction markFunction(fn) {\n\t\t\tfn[expando] = true;\n\t\t\treturn fn;\n\t\t}\n\n\t\t/**\n\t\t * Support testing using an element\n\t\t * @param {Function} fn Passed the created element and returns a boolean result\n\t\t */\n\t\tfunction assert(fn) {\n\t\t\tvar el = document.createElement(\"fieldset\");\n\n\t\t\ttry {\n\t\t\t\treturn !!fn(el);\n\t\t\t} catch (e) {\n\t\t\t\treturn false;\n\t\t\t} finally {\n\n\t\t\t\t// Remove from its parent by default\n\t\t\t\tif (el.parentNode) {\n\t\t\t\t\tel.parentNode.removeChild(el);\n\t\t\t\t}\n\n\t\t\t\t// release memory in IE\n\t\t\t\tel = null;\n\t\t\t}\n\t\t}\n\n\t\t/**\n\t\t * Returns a function to use in pseudos for input types\n\t\t * @param {String} type\n\t\t */\n\t\tfunction createInputPseudo(type) {\n\t\t\treturn function (elem) {\n\t\t\t\treturn nodeName(elem, \"input\") && elem.type === type;\n\t\t\t};\n\t\t}\n\n\t\t/**\n\t\t * Returns a function to use in pseudos for buttons\n\t\t * @param {String} type\n\t\t */\n\t\tfunction createButtonPseudo(type) {\n\t\t\treturn function (elem) {\n\t\t\t\treturn (nodeName(elem, \"input\") || nodeName(elem, \"button\")) &&\n\t\t\t\t\telem.type === type;\n\t\t\t};\n\t\t}\n\n\t\t/**\n\t\t * Returns a function to use in pseudos for :enabled/:disabled\n\t\t * @param {Boolean} disabled true for :disabled; false for :enabled\n\t\t */\n\t\tfunction createDisabledPseudo(disabled) {\n\n\t\t\t// Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable\n\t\t\treturn function (elem) {\n\n\t\t\t\t// Only certain elements can match :enabled or :disabled\n\t\t\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled\n\t\t\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled\n\t\t\t\tif (\"form\" in elem) {\n\n\t\t\t\t\t// Check for inherited disabledness on relevant non-disabled elements:\n\t\t\t\t\t// * listed form-associated elements in a disabled fieldset\n\t\t\t\t\t//   https://html.spec.whatwg.org/multipage/forms.html#category-listed\n\t\t\t\t\t//   https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled\n\t\t\t\t\t// * option elements in a disabled optgroup\n\t\t\t\t\t//   https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled\n\t\t\t\t\t// All such elements have a \"form\" property.\n\t\t\t\t\tif (elem.parentNode && elem.disabled === false) {\n\n\t\t\t\t\t\t// Option elements defer to a parent optgroup if present\n\t\t\t\t\t\tif (\"label\" in elem) {\n\t\t\t\t\t\t\tif (\"label\" in elem.parentNode) {\n\t\t\t\t\t\t\t\treturn elem.parentNode.disabled === disabled;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\treturn elem.disabled === disabled;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Support: IE 6 - 11+\n\t\t\t\t\t\t// Use the isDisabled shortcut property to check for disabled fieldset ancestors\n\t\t\t\t\t\treturn elem.isDisabled === disabled ||\n\n\t\t\t\t\t\t\t// Where there is no isDisabled, check manually\n\t\t\t\t\t\t\telem.isDisabled !== !disabled &&\n\t\t\t\t\t\t\tinDisabledFieldset(elem) === disabled;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn elem.disabled === disabled;\n\n\t\t\t\t\t// Try to winnow out elements that can't be disabled before trusting the disabled property.\n\t\t\t\t\t// Some victims get caught in our net (label, legend, menu, track), but it shouldn't\n\t\t\t\t\t// even exist on them, let alone have a boolean value.\n\t\t\t\t} else if (\"label\" in elem) {\n\t\t\t\t\treturn elem.disabled === disabled;\n\t\t\t\t}\n\n\t\t\t\t// Remaining elements are neither :enabled nor :disabled\n\t\t\t\treturn false;\n\t\t\t};\n\t\t}\n\n\t\t/**\n\t\t * Returns a function to use in pseudos for positionals\n\t\t * @param {Function} fn\n\t\t */\n\t\tfunction createPositionalPseudo(fn) {\n\t\t\treturn markFunction(function (argument) {\n\t\t\t\targument = +argument;\n\t\t\t\treturn markFunction(function (seed, matches) {\n\t\t\t\t\tvar j,\n\t\t\t\t\t\tmatchIndexes = fn([], seed.length, argument),\n\t\t\t\t\t\ti = matchIndexes.length;\n\n\t\t\t\t\t// Match elements found at the specified indexes\n\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\tif (seed[(j = matchIndexes[i])]) {\n\t\t\t\t\t\t\tseed[j] = !(matches[j] = seed[j]);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\n\t\t/**\n\t\t * Checks a node for validity as a jQuery selector context\n\t\t * @param {Element|Object=} context\n\t\t * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value\n\t\t */\n\t\tfunction testContext(context) {\n\t\t\treturn context && typeof context.getElementsByTagName !== \"undefined\" && context;\n\t\t}\n\n\t\t/**\n\t\t * Sets document-related variables once based on the current document\n\t\t * @param {Element|Object} [node] An element or document object to use to set the document\n\t\t * @returns {Object} Returns the current document\n\t\t */\n\t\tfunction setDocument(node) {\n\t\t\tvar subWindow,\n\t\t\t\tdoc = node ? node.ownerDocument || node : preferredDoc;\n\n\t\t\t// Return early if doc is invalid or already selected\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tif (doc == document || doc.nodeType !== 9 || !doc.documentElement) {\n\t\t\t\treturn document;\n\t\t\t}\n\n\t\t\t// Update global variables\n\t\t\tdocument = doc;\n\t\t\tdocumentElement = document.documentElement;\n\t\t\tdocumentIsHTML = !jQuery.isXMLDoc(document);\n\n\t\t\t// Support: iOS 7 only, IE 9 - 11+\n\t\t\t// Older browsers didn't support unprefixed `matches`.\n\t\t\tmatches = documentElement.matches ||\n\t\t\t\tdocumentElement.webkitMatchesSelector ||\n\t\t\t\tdocumentElement.msMatchesSelector;\n\n\t\t\t// Support: IE 9 - 11+, Edge 12 - 18+\n\t\t\t// Accessing iframe documents after unload throws \"permission denied\" errors (see trac-13936)\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tif (preferredDoc != document &&\n\t\t\t\t(subWindow = document.defaultView) && subWindow.top !== subWindow) {\n\n\t\t\t\t// Support: IE 9 - 11+, Edge 12 - 18+\n\t\t\t\tsubWindow.addEventListener(\"unload\", unloadHandler);\n\t\t\t}\n\n\t\t\t// Support: IE <10\n\t\t\t// Check if getElementById returns elements by name\n\t\t\t// The broken getElementById methods don't pick up programmatically-set names,\n\t\t\t// so use a roundabout getElementsByName test\n\t\t\tsupport.getById = assert(function (el) {\n\t\t\t\tdocumentElement.appendChild(el).id = jQuery.expando;\n\t\t\t\treturn !document.getElementsByName ||\n\t\t\t\t\t!document.getElementsByName(jQuery.expando).length;\n\t\t\t});\n\n\t\t\t// Support: IE 9 only\n\t\t\t// Check to see if it's possible to do matchesSelector\n\t\t\t// on a disconnected node.\n\t\t\tsupport.disconnectedMatch = assert(function (el) {\n\t\t\t\treturn matches.call(el, \"*\");\n\t\t\t});\n\n\t\t\t// Support: IE 9 - 11+, Edge 12 - 18+\n\t\t\t// IE/Edge don't support the :scope pseudo-class.\n\t\t\tsupport.scope = assert(function () {\n\t\t\t\treturn document.querySelectorAll(\":scope\");\n\t\t\t});\n\n\t\t\t// Support: Chrome 105 - 111 only, Safari 15.4 - 16.3 only\n\t\t\t// Make sure the `:has()` argument is parsed unforgivingly.\n\t\t\t// We include `*` in the test to detect buggy implementations that are\n\t\t\t// _selectively_ forgiving (specifically when the list includes at least\n\t\t\t// one valid selector).\n\t\t\t// Note that we treat complete lack of support for `:has()` as if it were\n\t\t\t// spec-compliant support, which is fine because use of `:has()` in such\n\t\t\t// environments will fail in the qSA path and fall back to jQuery traversal\n\t\t\t// anyway.\n\t\t\tsupport.cssHas = assert(function () {\n\t\t\t\ttry {\n\t\t\t\t\tdocument.querySelector(\":has(*,:jqfake)\");\n\t\t\t\t\treturn false;\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t// ID filter and find\n\t\t\tif (support.getById) {\n\t\t\t\tExpr.filter.ID = function (id) {\n\t\t\t\t\tvar attrId = id.replace(runescape, funescape);\n\t\t\t\t\treturn function (elem) {\n\t\t\t\t\t\treturn elem.getAttribute(\"id\") === attrId;\n\t\t\t\t\t};\n\t\t\t\t};\n\t\t\t\tExpr.find.ID = function (id, context) {\n\t\t\t\t\tif (typeof context.getElementById !== \"undefined\" && documentIsHTML) {\n\t\t\t\t\t\tvar elem = context.getElementById(id);\n\t\t\t\t\t\treturn elem ? [elem] : [];\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t} else {\n\t\t\t\tExpr.filter.ID = function (id) {\n\t\t\t\t\tvar attrId = id.replace(runescape, funescape);\n\t\t\t\t\treturn function (elem) {\n\t\t\t\t\t\tvar node = typeof elem.getAttributeNode !== \"undefined\" &&\n\t\t\t\t\t\t\telem.getAttributeNode(\"id\");\n\t\t\t\t\t\treturn node && node.value === attrId;\n\t\t\t\t\t};\n\t\t\t\t};\n\n\t\t\t\t// Support: IE 6 - 7 only\n\t\t\t\t// getElementById is not reliable as a find shortcut\n\t\t\t\tExpr.find.ID = function (id, context) {\n\t\t\t\t\tif (typeof context.getElementById !== \"undefined\" && documentIsHTML) {\n\t\t\t\t\t\tvar node, i, elems,\n\t\t\t\t\t\t\telem = context.getElementById(id);\n\n\t\t\t\t\t\tif (elem) {\n\n\t\t\t\t\t\t\t// Verify the id attribute\n\t\t\t\t\t\t\tnode = elem.getAttributeNode(\"id\");\n\t\t\t\t\t\t\tif (node && node.value === id) {\n\t\t\t\t\t\t\t\treturn [elem];\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Fall back on getElementsByName\n\t\t\t\t\t\t\telems = context.getElementsByName(id);\n\t\t\t\t\t\t\ti = 0;\n\t\t\t\t\t\t\twhile ((elem = elems[i++])) {\n\t\t\t\t\t\t\t\tnode = elem.getAttributeNode(\"id\");\n\t\t\t\t\t\t\t\tif (node && node.value === id) {\n\t\t\t\t\t\t\t\t\treturn [elem];\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn [];\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\n\t\t\t// Tag\n\t\t\tExpr.find.TAG = function (tag, context) {\n\t\t\t\tif (typeof context.getElementsByTagName !== \"undefined\") {\n\t\t\t\t\treturn context.getElementsByTagName(tag);\n\n\t\t\t\t\t// DocumentFragment nodes don't have gEBTN\n\t\t\t\t} else {\n\t\t\t\t\treturn context.querySelectorAll(tag);\n\t\t\t\t}\n\t\t\t};\n\n\t\t\t// Class\n\t\t\tExpr.find.CLASS = function (className, context) {\n\t\t\t\tif (typeof context.getElementsByClassName !== \"undefined\" && documentIsHTML) {\n\t\t\t\t\treturn context.getElementsByClassName(className);\n\t\t\t\t}\n\t\t\t};\n\n\t\t\t/* QSA/matchesSelector\n\t\t\t---------------------------------------------------------------------- */\n\n\t\t\t// QSA and matchesSelector support\n\n\t\t\trbuggyQSA = [];\n\n\t\t\t// Build QSA regex\n\t\t\t// Regex strategy adopted from Diego Perini\n\t\t\tassert(function (el) {\n\n\t\t\t\tvar input;\n\n\t\t\t\tdocumentElement.appendChild(el).innerHTML =\n\t\t\t\t\t\"<a id='\" + expando + \"' href='' disabled='disabled'></a>\" +\n\t\t\t\t\t\"<select id='\" + expando + \"-\\r\\\\' disabled='disabled'>\" +\n\t\t\t\t\t\"<option selected=''></option></select>\";\n\n\t\t\t\t// Support: iOS <=7 - 8 only\n\t\t\t\t// Boolean attributes and \"value\" are not treated correctly in some XML documents\n\t\t\t\tif (!el.querySelectorAll(\"[selected]\").length) {\n\t\t\t\t\trbuggyQSA.push(\"\\\\[\" + whitespace + \"*(?:value|\" + booleans + \")\");\n\t\t\t\t}\n\n\t\t\t\t// Support: iOS <=7 - 8 only\n\t\t\t\tif (!el.querySelectorAll(\"[id~=\" + expando + \"-]\").length) {\n\t\t\t\t\trbuggyQSA.push(\"~=\");\n\t\t\t\t}\n\n\t\t\t\t// Support: iOS 8 only\n\t\t\t\t// https://bugs.webkit.org/show_bug.cgi?id=136851\n\t\t\t\t// In-page `selector#id sibling-combinator selector` fails\n\t\t\t\tif (!el.querySelectorAll(\"a#\" + expando + \"+*\").length) {\n\t\t\t\t\trbuggyQSA.push(\".#.+[+~]\");\n\t\t\t\t}\n\n\t\t\t\t// Support: Chrome <=105+, Firefox <=104+, Safari <=15.4+\n\t\t\t\t// In some of the document kinds, these selectors wouldn't work natively.\n\t\t\t\t// This is probably OK but for backwards compatibility we want to maintain\n\t\t\t\t// handling them through jQuery traversal in jQuery 3.x.\n\t\t\t\tif (!el.querySelectorAll(\":checked\").length) {\n\t\t\t\t\trbuggyQSA.push(\":checked\");\n\t\t\t\t}\n\n\t\t\t\t// Support: Windows 8 Native Apps\n\t\t\t\t// The type and name attributes are restricted during .innerHTML assignment\n\t\t\t\tinput = document.createElement(\"input\");\n\t\t\t\tinput.setAttribute(\"type\", \"hidden\");\n\t\t\t\tel.appendChild(input).setAttribute(\"name\", \"D\");\n\n\t\t\t\t// Support: IE 9 - 11+\n\t\t\t\t// IE's :disabled selector does not pick up the children of disabled fieldsets\n\t\t\t\t// Support: Chrome <=105+, Firefox <=104+, Safari <=15.4+\n\t\t\t\t// In some of the document kinds, these selectors wouldn't work natively.\n\t\t\t\t// This is probably OK but for backwards compatibility we want to maintain\n\t\t\t\t// handling them through jQuery traversal in jQuery 3.x.\n\t\t\t\tdocumentElement.appendChild(el).disabled = true;\n\t\t\t\tif (el.querySelectorAll(\":disabled\").length !== 2) {\n\t\t\t\t\trbuggyQSA.push(\":enabled\", \":disabled\");\n\t\t\t\t}\n\n\t\t\t\t// Support: IE 11+, Edge 15 - 18+\n\t\t\t\t// IE 11/Edge don't find elements on a `[name='']` query in some cases.\n\t\t\t\t// Adding a temporary attribute to the document before the selection works\n\t\t\t\t// around the issue.\n\t\t\t\t// Interestingly, IE 10 & older don't seem to have the issue.\n\t\t\t\tinput = document.createElement(\"input\");\n\t\t\t\tinput.setAttribute(\"name\", \"\");\n\t\t\t\tel.appendChild(input);\n\t\t\t\tif (!el.querySelectorAll(\"[name='']\").length) {\n\t\t\t\t\trbuggyQSA.push(\"\\\\[\" + whitespace + \"*name\" + whitespace + \"*=\" +\n\t\t\t\t\t\twhitespace + \"*(?:''|\\\"\\\")\");\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tif (!support.cssHas) {\n\n\t\t\t\t// Support: Chrome 105 - 110+, Safari 15.4 - 16.3+\n\t\t\t\t// Our regular `try-catch` mechanism fails to detect natively-unsupported\n\t\t\t\t// pseudo-classes inside `:has()` (such as `:has(:contains(\"Foo\"))`)\n\t\t\t\t// in browsers that parse the `:has()` argument as a forgiving selector list.\n\t\t\t\t// https://drafts.csswg.org/selectors/#relational now requires the argument\n\t\t\t\t// to be parsed unforgivingly, but browsers have not yet fully adjusted.\n\t\t\t\trbuggyQSA.push(\":has\");\n\t\t\t}\n\n\t\t\trbuggyQSA = rbuggyQSA.length && new RegExp(rbuggyQSA.join(\"|\"));\n\n\t\t\t/* Sorting\n\t\t\t---------------------------------------------------------------------- */\n\n\t\t\t// Document order sorting\n\t\t\tsortOrder = function (a, b) {\n\n\t\t\t\t// Flag for duplicate removal\n\t\t\t\tif (a === b) {\n\t\t\t\t\thasDuplicate = true;\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\n\t\t\t\t// Sort on method existence if only one input has compareDocumentPosition\n\t\t\t\tvar compare = !a.compareDocumentPosition - !b.compareDocumentPosition;\n\t\t\t\tif (compare) {\n\t\t\t\t\treturn compare;\n\t\t\t\t}\n\n\t\t\t\t// Calculate position if both inputs belong to the same document\n\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\tcompare = (a.ownerDocument || a) == (b.ownerDocument || b) ?\n\t\t\t\t\ta.compareDocumentPosition(b) :\n\n\t\t\t\t\t// Otherwise we know they are disconnected\n\t\t\t\t\t1;\n\n\t\t\t\t// Disconnected nodes\n\t\t\t\tif (compare & 1 ||\n\t\t\t\t\t(!support.sortDetached && b.compareDocumentPosition(a) === compare)) {\n\n\t\t\t\t\t// Choose the first element that is related to our preferred document\n\t\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\tif (a === document || a.ownerDocument == preferredDoc &&\n\t\t\t\t\t\tfind.contains(preferredDoc, a)) {\n\t\t\t\t\t\treturn -1;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\tif (b === document || b.ownerDocument == preferredDoc &&\n\t\t\t\t\t\tfind.contains(preferredDoc, b)) {\n\t\t\t\t\t\treturn 1;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Maintain original order\n\t\t\t\t\treturn sortInput ?\n\t\t\t\t\t\t(indexOf.call(sortInput, a) - indexOf.call(sortInput, b)) :\n\t\t\t\t\t\t0;\n\t\t\t\t}\n\n\t\t\t\treturn compare & 4 ? -1 : 1;\n\t\t\t};\n\n\t\t\treturn document;\n\t\t}\n\n\t\tfind.matches = function (expr, elements) {\n\t\t\treturn find(expr, null, null, elements);\n\t\t};\n\n\t\tfind.matchesSelector = function (elem, expr) {\n\t\t\tsetDocument(elem);\n\n\t\t\tif (documentIsHTML &&\n\t\t\t\t!nonnativeSelectorCache[expr + \" \"] &&\n\t\t\t\t(!rbuggyQSA || !rbuggyQSA.test(expr))) {\n\n\t\t\t\ttry {\n\t\t\t\t\tvar ret = matches.call(elem, expr);\n\n\t\t\t\t\t// IE 9's matchesSelector returns false on disconnected nodes\n\t\t\t\t\tif (ret || support.disconnectedMatch ||\n\n\t\t\t\t\t\t// As well, disconnected nodes are said to be in a document\n\t\t\t\t\t\t// fragment in IE 9\n\t\t\t\t\t\telem.document && elem.document.nodeType !== 11) {\n\t\t\t\t\t\treturn ret;\n\t\t\t\t\t}\n\t\t\t\t} catch (e) {\n\t\t\t\t\tnonnativeSelectorCache(expr, true);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn find(expr, document, null, [elem]).length > 0;\n\t\t};\n\n\t\tfind.contains = function (context, elem) {\n\n\t\t\t// Set document vars if needed\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tif ((context.ownerDocument || context) != document) {\n\t\t\t\tsetDocument(context);\n\t\t\t}\n\t\t\treturn jQuery.contains(context, elem);\n\t\t};\n\n\n\t\tfind.attr = function (elem, name) {\n\n\t\t\t// Set document vars if needed\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tif ((elem.ownerDocument || elem) != document) {\n\t\t\t\tsetDocument(elem);\n\t\t\t}\n\n\t\t\tvar fn = Expr.attrHandle[name.toLowerCase()],\n\n\t\t\t\t// Don't get fooled by Object.prototype properties (see trac-13807)\n\t\t\t\tval = fn && hasOwn.call(Expr.attrHandle, name.toLowerCase()) ?\n\t\t\t\t\tfn(elem, name, !documentIsHTML) :\n\t\t\t\t\tundefined;\n\n\t\t\tif (val !== undefined) {\n\t\t\t\treturn val;\n\t\t\t}\n\n\t\t\treturn elem.getAttribute(name);\n\t\t};\n\n\t\tfind.error = function (msg) {\n\t\t\tthrow new Error(\"Syntax error, unrecognized expression: \" + msg);\n\t\t};\n\n\t\t/**\n\t\t * Document sorting and removing duplicates\n\t\t * @param {ArrayLike} results\n\t\t */\n\t\tjQuery.uniqueSort = function (results) {\n\t\t\tvar elem,\n\t\t\t\tduplicates = [],\n\t\t\t\tj = 0,\n\t\t\t\ti = 0;\n\n\t\t\t// Unless we *know* we can detect duplicates, assume their presence\n\t\t\t//\n\t\t\t// Support: Android <=4.0+\n\t\t\t// Testing for detecting duplicates is unpredictable so instead assume we can't\n\t\t\t// depend on duplicate detection in all browsers without a stable sort.\n\t\t\thasDuplicate = !support.sortStable;\n\t\t\tsortInput = !support.sortStable && slice.call(results, 0);\n\t\t\tsort.call(results, sortOrder);\n\n\t\t\tif (hasDuplicate) {\n\t\t\t\twhile ((elem = results[i++])) {\n\t\t\t\t\tif (elem === results[i]) {\n\t\t\t\t\t\tj = duplicates.push(i);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\twhile (j--) {\n\t\t\t\t\tsplice.call(results, duplicates[j], 1);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Clear input after sorting to release objects\n\t\t\t// See https://github.com/jquery/sizzle/pull/225\n\t\t\tsortInput = null;\n\n\t\t\treturn results;\n\t\t};\n\n\t\tjQuery.fn.uniqueSort = function () {\n\t\t\treturn this.pushStack(jQuery.uniqueSort(slice.apply(this)));\n\t\t};\n\n\t\tExpr = jQuery.expr = {\n\n\t\t\t// Can be adjusted by the user\n\t\t\tcacheLength: 50,\n\n\t\t\tcreatePseudo: markFunction,\n\n\t\t\tmatch: matchExpr,\n\n\t\t\tattrHandle: {},\n\n\t\t\tfind: {},\n\n\t\t\trelative: {\n\t\t\t\t\">\": { dir: \"parentNode\", first: true },\n\t\t\t\t\" \": { dir: \"parentNode\" },\n\t\t\t\t\"+\": { dir: \"previousSibling\", first: true },\n\t\t\t\t\"~\": { dir: \"previousSibling\" }\n\t\t\t},\n\n\t\t\tpreFilter: {\n\t\t\t\tATTR: function (match) {\n\t\t\t\t\tmatch[1] = match[1].replace(runescape, funescape);\n\n\t\t\t\t\t// Move the given value to match[3] whether quoted or unquoted\n\t\t\t\t\tmatch[3] = (match[3] || match[4] || match[5] || \"\")\n\t\t\t\t\t\t.replace(runescape, funescape);\n\n\t\t\t\t\tif (match[2] === \"~=\") {\n\t\t\t\t\t\tmatch[3] = \" \" + match[3] + \" \";\n\t\t\t\t\t}\n\n\t\t\t\t\treturn match.slice(0, 4);\n\t\t\t\t},\n\n\t\t\t\tCHILD: function (match) {\n\n\t\t\t\t\t/* matches from matchExpr[\"CHILD\"]\n\t\t\t\t\t\t1 type (only|nth|...)\n\t\t\t\t\t\t2 what (child|of-type)\n\t\t\t\t\t\t3 argument (even|odd|\\d*|\\d*n([+-]\\d+)?|...)\n\t\t\t\t\t\t4 xn-component of xn+y argument ([+-]?\\d*n|)\n\t\t\t\t\t\t5 sign of xn-component\n\t\t\t\t\t\t6 x of xn-component\n\t\t\t\t\t\t7 sign of y-component\n\t\t\t\t\t\t8 y of y-component\n\t\t\t\t\t*/\n\t\t\t\t\tmatch[1] = match[1].toLowerCase();\n\n\t\t\t\t\tif (match[1].slice(0, 3) === \"nth\") {\n\n\t\t\t\t\t\t// nth-* requires argument\n\t\t\t\t\t\tif (!match[3]) {\n\t\t\t\t\t\t\tfind.error(match[0]);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// numeric x and y parameters for Expr.filter.CHILD\n\t\t\t\t\t\t// remember that false/true cast respectively to 0/1\n\t\t\t\t\t\tmatch[4] = +(match[4] ?\n\t\t\t\t\t\t\tmatch[5] + (match[6] || 1) :\n\t\t\t\t\t\t\t2 * (match[3] === \"even\" || match[3] === \"odd\")\n\t\t\t\t\t\t);\n\t\t\t\t\t\tmatch[5] = +((match[7] + match[8]) || match[3] === \"odd\");\n\n\t\t\t\t\t\t// other types prohibit arguments\n\t\t\t\t\t} else if (match[3]) {\n\t\t\t\t\t\tfind.error(match[0]);\n\t\t\t\t\t}\n\n\t\t\t\t\treturn match;\n\t\t\t\t},\n\n\t\t\t\tPSEUDO: function (match) {\n\t\t\t\t\tvar excess,\n\t\t\t\t\t\tunquoted = !match[6] && match[2];\n\n\t\t\t\t\tif (matchExpr.CHILD.test(match[0])) {\n\t\t\t\t\t\treturn null;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Accept quoted arguments as-is\n\t\t\t\t\tif (match[3]) {\n\t\t\t\t\t\tmatch[2] = match[4] || match[5] || \"\";\n\n\t\t\t\t\t\t// Strip excess characters from unquoted arguments\n\t\t\t\t\t} else if (unquoted && rpseudo.test(unquoted) &&\n\n\t\t\t\t\t\t// Get excess from tokenize (recursively)\n\t\t\t\t\t\t(excess = tokenize(unquoted, true)) &&\n\n\t\t\t\t\t\t// advance to the next closing parenthesis\n\t\t\t\t\t\t(excess = unquoted.indexOf(\")\", unquoted.length - excess) - unquoted.length)) {\n\n\t\t\t\t\t\t// excess is a negative index\n\t\t\t\t\t\tmatch[0] = match[0].slice(0, excess);\n\t\t\t\t\t\tmatch[2] = unquoted.slice(0, excess);\n\t\t\t\t\t}\n\n\t\t\t\t\t// Return only captures needed by the pseudo filter method (type and argument)\n\t\t\t\t\treturn match.slice(0, 3);\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tfilter: {\n\n\t\t\t\tTAG: function (nodeNameSelector) {\n\t\t\t\t\tvar expectedNodeName = nodeNameSelector.replace(runescape, funescape).toLowerCase();\n\t\t\t\t\treturn nodeNameSelector === \"*\" ?\n\t\t\t\t\t\tfunction () {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t} :\n\t\t\t\t\t\tfunction (elem) {\n\t\t\t\t\t\t\treturn nodeName(elem, expectedNodeName);\n\t\t\t\t\t\t};\n\t\t\t\t},\n\n\t\t\t\tCLASS: function (className) {\n\t\t\t\t\tvar pattern = classCache[className + \" \"];\n\n\t\t\t\t\treturn pattern ||\n\t\t\t\t\t\t(pattern = new RegExp(\"(^|\" + whitespace + \")\" + className +\n\t\t\t\t\t\t\t\"(\" + whitespace + \"|$)\")) &&\n\t\t\t\t\t\tclassCache(className, function (elem) {\n\t\t\t\t\t\t\treturn pattern.test(\n\t\t\t\t\t\t\t\ttypeof elem.className === \"string\" && elem.className ||\n\t\t\t\t\t\t\t\ttypeof elem.getAttribute !== \"undefined\" &&\n\t\t\t\t\t\t\t\telem.getAttribute(\"class\") ||\n\t\t\t\t\t\t\t\t\"\"\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t});\n\t\t\t\t},\n\n\t\t\t\tATTR: function (name, operator, check) {\n\t\t\t\t\treturn function (elem) {\n\t\t\t\t\t\tvar result = find.attr(elem, name);\n\n\t\t\t\t\t\tif (result == null) {\n\t\t\t\t\t\t\treturn operator === \"!=\";\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!operator) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tresult += \"\";\n\n\t\t\t\t\t\tif (operator === \"=\") {\n\t\t\t\t\t\t\treturn result === check;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (operator === \"!=\") {\n\t\t\t\t\t\t\treturn result !== check;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (operator === \"^=\") {\n\t\t\t\t\t\t\treturn check && result.indexOf(check) === 0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (operator === \"*=\") {\n\t\t\t\t\t\t\treturn check && result.indexOf(check) > -1;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (operator === \"$=\") {\n\t\t\t\t\t\t\treturn check && result.slice(-check.length) === check;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (operator === \"~=\") {\n\t\t\t\t\t\t\treturn (\" \" + result.replace(rwhitespace, \" \") + \" \")\n\t\t\t\t\t\t\t\t.indexOf(check) > -1;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (operator === \"|=\") {\n\t\t\t\t\t\t\treturn result === check || result.slice(0, check.length + 1) === check + \"-\";\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t};\n\t\t\t\t},\n\n\t\t\t\tCHILD: function (type, what, _argument, first, last) {\n\t\t\t\t\tvar simple = type.slice(0, 3) !== \"nth\",\n\t\t\t\t\t\tforward = type.slice(-4) !== \"last\",\n\t\t\t\t\t\tofType = what === \"of-type\";\n\n\t\t\t\t\treturn first === 1 && last === 0 ?\n\n\t\t\t\t\t\t// Shortcut for :nth-*(n)\n\t\t\t\t\t\tfunction (elem) {\n\t\t\t\t\t\t\treturn !!elem.parentNode;\n\t\t\t\t\t\t} :\n\n\t\t\t\t\t\tfunction (elem, _context, xml) {\n\t\t\t\t\t\t\tvar cache, outerCache, node, nodeIndex, start,\n\t\t\t\t\t\t\t\tdir = simple !== forward ? \"nextSibling\" : \"previousSibling\",\n\t\t\t\t\t\t\t\tparent = elem.parentNode,\n\t\t\t\t\t\t\t\tname = ofType && elem.nodeName.toLowerCase(),\n\t\t\t\t\t\t\t\tuseCache = !xml && !ofType,\n\t\t\t\t\t\t\t\tdiff = false;\n\n\t\t\t\t\t\t\tif (parent) {\n\n\t\t\t\t\t\t\t\t// :(first|last|only)-(child|of-type)\n\t\t\t\t\t\t\t\tif (simple) {\n\t\t\t\t\t\t\t\t\twhile (dir) {\n\t\t\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\t\t\twhile ((node = node[dir])) {\n\t\t\t\t\t\t\t\t\t\t\tif (ofType ?\n\t\t\t\t\t\t\t\t\t\t\t\tnodeName(node, name) :\n\t\t\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1) {\n\n\t\t\t\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t// Reverse direction for :only-* (if we haven't yet done so)\n\t\t\t\t\t\t\t\t\t\tstart = dir = type === \"only\" && !start && \"nextSibling\";\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tstart = [forward ? parent.firstChild : parent.lastChild];\n\n\t\t\t\t\t\t\t\t// non-xml :nth-child(...) stores cache data on `parent`\n\t\t\t\t\t\t\t\tif (forward && useCache) {\n\n\t\t\t\t\t\t\t\t\t// Seek `elem` from a previously-cached index\n\t\t\t\t\t\t\t\t\touterCache = parent[expando] || (parent[expando] = {});\n\t\t\t\t\t\t\t\t\tcache = outerCache[type] || [];\n\t\t\t\t\t\t\t\t\tnodeIndex = cache[0] === dirruns && cache[1];\n\t\t\t\t\t\t\t\t\tdiff = nodeIndex && cache[2];\n\t\t\t\t\t\t\t\t\tnode = nodeIndex && parent.childNodes[nodeIndex];\n\n\t\t\t\t\t\t\t\t\twhile ((node = ++nodeIndex && node && node[dir] ||\n\n\t\t\t\t\t\t\t\t\t\t// Fallback to seeking `elem` from the start\n\t\t\t\t\t\t\t\t\t\t(diff = nodeIndex = 0) || start.pop())) {\n\n\t\t\t\t\t\t\t\t\t\t// When found, cache indexes on `parent` and break\n\t\t\t\t\t\t\t\t\t\tif (node.nodeType === 1 && ++diff && node === elem) {\n\t\t\t\t\t\t\t\t\t\t\touterCache[type] = [dirruns, nodeIndex, diff];\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t// Use previously-cached element index if available\n\t\t\t\t\t\t\t\t\tif (useCache) {\n\t\t\t\t\t\t\t\t\t\touterCache = elem[expando] || (elem[expando] = {});\n\t\t\t\t\t\t\t\t\t\tcache = outerCache[type] || [];\n\t\t\t\t\t\t\t\t\t\tnodeIndex = cache[0] === dirruns && cache[1];\n\t\t\t\t\t\t\t\t\t\tdiff = nodeIndex;\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// xml :nth-child(...)\n\t\t\t\t\t\t\t\t\t// or :nth-last-child(...) or :nth(-last)?-of-type(...)\n\t\t\t\t\t\t\t\t\tif (diff === false) {\n\n\t\t\t\t\t\t\t\t\t\t// Use the same loop as above to seek `elem` from the start\n\t\t\t\t\t\t\t\t\t\twhile ((node = ++nodeIndex && node && node[dir] ||\n\t\t\t\t\t\t\t\t\t\t\t(diff = nodeIndex = 0) || start.pop())) {\n\n\t\t\t\t\t\t\t\t\t\t\tif ((ofType ?\n\t\t\t\t\t\t\t\t\t\t\t\tnodeName(node, name) :\n\t\t\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1) &&\n\t\t\t\t\t\t\t\t\t\t\t\t++diff) {\n\n\t\t\t\t\t\t\t\t\t\t\t\t// Cache the index of each encountered element\n\t\t\t\t\t\t\t\t\t\t\t\tif (useCache) {\n\t\t\t\t\t\t\t\t\t\t\t\t\touterCache = node[expando] ||\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t(node[expando] = {});\n\t\t\t\t\t\t\t\t\t\t\t\t\touterCache[type] = [dirruns, diff];\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\tif (node === elem) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t// Incorporate the offset, then check against cycle size\n\t\t\t\t\t\t\t\tdiff -= last;\n\t\t\t\t\t\t\t\treturn diff === first || (diff % first === 0 && diff / first >= 0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\t\t\t\t},\n\n\t\t\t\tPSEUDO: function (pseudo, argument) {\n\n\t\t\t\t\t// pseudo-class names are case-insensitive\n\t\t\t\t\t// https://www.w3.org/TR/selectors/#pseudo-classes\n\t\t\t\t\t// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters\n\t\t\t\t\t// Remember that setFilters inherits from pseudos\n\t\t\t\t\tvar args,\n\t\t\t\t\t\tfn = Expr.pseudos[pseudo] || Expr.setFilters[pseudo.toLowerCase()] ||\n\t\t\t\t\t\t\tfind.error(\"unsupported pseudo: \" + pseudo);\n\n\t\t\t\t\t// The user may use createPseudo to indicate that\n\t\t\t\t\t// arguments are needed to create the filter function\n\t\t\t\t\t// just as jQuery does\n\t\t\t\t\tif (fn[expando]) {\n\t\t\t\t\t\treturn fn(argument);\n\t\t\t\t\t}\n\n\t\t\t\t\t// But maintain support for old signatures\n\t\t\t\t\tif (fn.length > 1) {\n\t\t\t\t\t\targs = [pseudo, pseudo, \"\", argument];\n\t\t\t\t\t\treturn Expr.setFilters.hasOwnProperty(pseudo.toLowerCase()) ?\n\t\t\t\t\t\t\tmarkFunction(function (seed, matches) {\n\t\t\t\t\t\t\t\tvar idx,\n\t\t\t\t\t\t\t\t\tmatched = fn(seed, argument),\n\t\t\t\t\t\t\t\t\ti = matched.length;\n\t\t\t\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\t\t\t\tidx = indexOf.call(seed, matched[i]);\n\t\t\t\t\t\t\t\t\tseed[idx] = !(matches[idx] = matched[i]);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}) :\n\t\t\t\t\t\t\tfunction (elem) {\n\t\t\t\t\t\t\t\treturn fn(elem, 0, args);\n\t\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\treturn fn;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tpseudos: {\n\n\t\t\t\t// Potentially complex pseudos\n\t\t\t\tnot: markFunction(function (selector) {\n\n\t\t\t\t\t// Trim the selector passed to compile\n\t\t\t\t\t// to avoid treating leading and trailing\n\t\t\t\t\t// spaces as combinators\n\t\t\t\t\tvar input = [],\n\t\t\t\t\t\tresults = [],\n\t\t\t\t\t\tmatcher = compile(selector.replace(rtrimCSS, \"$1\"));\n\n\t\t\t\t\treturn matcher[expando] ?\n\t\t\t\t\t\tmarkFunction(function (seed, matches, _context, xml) {\n\t\t\t\t\t\t\tvar elem,\n\t\t\t\t\t\t\t\tunmatched = matcher(seed, null, xml, []),\n\t\t\t\t\t\t\t\ti = seed.length;\n\n\t\t\t\t\t\t\t// Match elements unmatched by `matcher`\n\t\t\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\t\t\tif ((elem = unmatched[i])) {\n\t\t\t\t\t\t\t\t\tseed[i] = !(matches[i] = elem);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}) :\n\t\t\t\t\t\tfunction (elem, _context, xml) {\n\t\t\t\t\t\t\tinput[0] = elem;\n\t\t\t\t\t\t\tmatcher(input, null, xml, results);\n\n\t\t\t\t\t\t\t// Don't keep the element\n\t\t\t\t\t\t\t// (see https://github.com/jquery/sizzle/issues/299)\n\t\t\t\t\t\t\tinput[0] = null;\n\t\t\t\t\t\t\treturn !results.pop();\n\t\t\t\t\t\t};\n\t\t\t\t}),\n\n\t\t\t\thas: markFunction(function (selector) {\n\t\t\t\t\treturn function (elem) {\n\t\t\t\t\t\treturn find(selector, elem).length > 0;\n\t\t\t\t\t};\n\t\t\t\t}),\n\n\t\t\t\tcontains: markFunction(function (text) {\n\t\t\t\t\ttext = text.replace(runescape, funescape);\n\t\t\t\t\treturn function (elem) {\n\t\t\t\t\t\treturn (elem.textContent || jQuery.text(elem)).indexOf(text) > -1;\n\t\t\t\t\t};\n\t\t\t\t}),\n\n\t\t\t\t// \"Whether an element is represented by a :lang() selector\n\t\t\t\t// is based solely on the element's language value\n\t\t\t\t// being equal to the identifier C,\n\t\t\t\t// or beginning with the identifier C immediately followed by \"-\".\n\t\t\t\t// The matching of C against the element's language value is performed case-insensitively.\n\t\t\t\t// The identifier C does not have to be a valid language name.\"\n\t\t\t\t// https://www.w3.org/TR/selectors/#lang-pseudo\n\t\t\t\tlang: markFunction(function (lang) {\n\n\t\t\t\t\t// lang value must be a valid identifier\n\t\t\t\t\tif (!ridentifier.test(lang || \"\")) {\n\t\t\t\t\t\tfind.error(\"unsupported lang: \" + lang);\n\t\t\t\t\t}\n\t\t\t\t\tlang = lang.replace(runescape, funescape).toLowerCase();\n\t\t\t\t\treturn function (elem) {\n\t\t\t\t\t\tvar elemLang;\n\t\t\t\t\t\tdo {\n\t\t\t\t\t\t\tif ((elemLang = documentIsHTML ?\n\t\t\t\t\t\t\t\telem.lang :\n\t\t\t\t\t\t\t\telem.getAttribute(\"xml:lang\") || elem.getAttribute(\"lang\"))) {\n\n\t\t\t\t\t\t\t\telemLang = elemLang.toLowerCase();\n\t\t\t\t\t\t\t\treturn elemLang === lang || elemLang.indexOf(lang + \"-\") === 0;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} while ((elem = elem.parentNode) && elem.nodeType === 1);\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t};\n\t\t\t\t}),\n\n\t\t\t\t// Miscellaneous\n\t\t\t\ttarget: function (elem) {\n\t\t\t\t\tvar hash = window.location && window.location.hash;\n\t\t\t\t\treturn hash && hash.slice(1) === elem.id;\n\t\t\t\t},\n\n\t\t\t\troot: function (elem) {\n\t\t\t\t\treturn elem === documentElement;\n\t\t\t\t},\n\n\t\t\t\tfocus: function (elem) {\n\t\t\t\t\treturn elem === safeActiveElement() &&\n\t\t\t\t\t\tdocument.hasFocus() &&\n\t\t\t\t\t\t!!(elem.type || elem.href || ~elem.tabIndex);\n\t\t\t\t},\n\n\t\t\t\t// Boolean properties\n\t\t\t\tenabled: createDisabledPseudo(false),\n\t\t\t\tdisabled: createDisabledPseudo(true),\n\n\t\t\t\tchecked: function (elem) {\n\n\t\t\t\t\t// In CSS3, :checked should return both checked and selected elements\n\t\t\t\t\t// https://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\t\t\treturn (nodeName(elem, \"input\") && !!elem.checked) ||\n\t\t\t\t\t\t(nodeName(elem, \"option\") && !!elem.selected);\n\t\t\t\t},\n\n\t\t\t\tselected: function (elem) {\n\n\t\t\t\t\t// Support: IE <=11+\n\t\t\t\t\t// Accessing the selectedIndex property\n\t\t\t\t\t// forces the browser to treat the default option as\n\t\t\t\t\t// selected when in an optgroup.\n\t\t\t\t\tif (elem.parentNode) {\n\t\t\t\t\t\t// eslint-disable-next-line no-unused-expressions\n\t\t\t\t\t\telem.parentNode.selectedIndex;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn elem.selected === true;\n\t\t\t\t},\n\n\t\t\t\t// Contents\n\t\t\t\tempty: function (elem) {\n\n\t\t\t\t\t// https://www.w3.org/TR/selectors/#empty-pseudo\n\t\t\t\t\t// :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),\n\t\t\t\t\t//   but not by others (comment: 8; processing instruction: 7; etc.)\n\t\t\t\t\t// nodeType < 6 works because attributes (2) do not appear as children\n\t\t\t\t\tfor (elem = elem.firstChild; elem; elem = elem.nextSibling) {\n\t\t\t\t\t\tif (elem.nodeType < 6) {\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn true;\n\t\t\t\t},\n\n\t\t\t\tparent: function (elem) {\n\t\t\t\t\treturn !Expr.pseudos.empty(elem);\n\t\t\t\t},\n\n\t\t\t\t// Element/input types\n\t\t\t\theader: function (elem) {\n\t\t\t\t\treturn rheader.test(elem.nodeName);\n\t\t\t\t},\n\n\t\t\t\tinput: function (elem) {\n\t\t\t\t\treturn rinputs.test(elem.nodeName);\n\t\t\t\t},\n\n\t\t\t\tbutton: function (elem) {\n\t\t\t\t\treturn nodeName(elem, \"input\") && elem.type === \"button\" ||\n\t\t\t\t\t\tnodeName(elem, \"button\");\n\t\t\t\t},\n\n\t\t\t\ttext: function (elem) {\n\t\t\t\t\tvar attr;\n\t\t\t\t\treturn nodeName(elem, \"input\") && elem.type === \"text\" &&\n\n\t\t\t\t\t\t// Support: IE <10 only\n\t\t\t\t\t\t// New HTML5 attribute values (e.g., \"search\") appear\n\t\t\t\t\t\t// with elem.type === \"text\"\n\t\t\t\t\t\t((attr = elem.getAttribute(\"type\")) == null ||\n\t\t\t\t\t\t\tattr.toLowerCase() === \"text\");\n\t\t\t\t},\n\n\t\t\t\t// Position-in-collection\n\t\t\t\tfirst: createPositionalPseudo(function () {\n\t\t\t\t\treturn [0];\n\t\t\t\t}),\n\n\t\t\t\tlast: createPositionalPseudo(function (_matchIndexes, length) {\n\t\t\t\t\treturn [length - 1];\n\t\t\t\t}),\n\n\t\t\t\teq: createPositionalPseudo(function (_matchIndexes, length, argument) {\n\t\t\t\t\treturn [argument < 0 ? argument + length : argument];\n\t\t\t\t}),\n\n\t\t\t\teven: createPositionalPseudo(function (matchIndexes, length) {\n\t\t\t\t\tvar i = 0;\n\t\t\t\t\tfor (; i < length; i += 2) {\n\t\t\t\t\t\tmatchIndexes.push(i);\n\t\t\t\t\t}\n\t\t\t\t\treturn matchIndexes;\n\t\t\t\t}),\n\n\t\t\t\todd: createPositionalPseudo(function (matchIndexes, length) {\n\t\t\t\t\tvar i = 1;\n\t\t\t\t\tfor (; i < length; i += 2) {\n\t\t\t\t\t\tmatchIndexes.push(i);\n\t\t\t\t\t}\n\t\t\t\t\treturn matchIndexes;\n\t\t\t\t}),\n\n\t\t\t\tlt: createPositionalPseudo(function (matchIndexes, length, argument) {\n\t\t\t\t\tvar i;\n\n\t\t\t\t\tif (argument < 0) {\n\t\t\t\t\t\ti = argument + length;\n\t\t\t\t\t} else if (argument > length) {\n\t\t\t\t\t\ti = length;\n\t\t\t\t\t} else {\n\t\t\t\t\t\ti = argument;\n\t\t\t\t\t}\n\n\t\t\t\t\tfor (; --i >= 0;) {\n\t\t\t\t\t\tmatchIndexes.push(i);\n\t\t\t\t\t}\n\t\t\t\t\treturn matchIndexes;\n\t\t\t\t}),\n\n\t\t\t\tgt: createPositionalPseudo(function (matchIndexes, length, argument) {\n\t\t\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\t\t\tfor (; ++i < length;) {\n\t\t\t\t\t\tmatchIndexes.push(i);\n\t\t\t\t\t}\n\t\t\t\t\treturn matchIndexes;\n\t\t\t\t})\n\t\t\t}\n\t\t};\n\n\t\tExpr.pseudos.nth = Expr.pseudos.eq;\n\n\t\t// Add button/input type pseudos\n\t\tfor (i in { radio: true, checkbox: true, file: true, password: true, image: true }) {\n\t\t\tExpr.pseudos[i] = createInputPseudo(i);\n\t\t}\n\t\tfor (i in { submit: true, reset: true }) {\n\t\t\tExpr.pseudos[i] = createButtonPseudo(i);\n\t\t}\n\n\t\t// Easy API for creating new setFilters\n\t\tfunction setFilters() { }\n\t\tsetFilters.prototype = Expr.filters = Expr.pseudos;\n\t\tExpr.setFilters = new setFilters();\n\n\t\tfunction tokenize(selector, parseOnly) {\n\t\t\tvar matched, match, tokens, type,\n\t\t\t\tsoFar, groups, preFilters,\n\t\t\t\tcached = tokenCache[selector + \" \"];\n\n\t\t\tif (cached) {\n\t\t\t\treturn parseOnly ? 0 : cached.slice(0);\n\t\t\t}\n\n\t\t\tsoFar = selector;\n\t\t\tgroups = [];\n\t\t\tpreFilters = Expr.preFilter;\n\n\t\t\twhile (soFar) {\n\n\t\t\t\t// Comma and first run\n\t\t\t\tif (!matched || (match = rcomma.exec(soFar))) {\n\t\t\t\t\tif (match) {\n\n\t\t\t\t\t\t// Don't consume trailing commas as valid\n\t\t\t\t\t\tsoFar = soFar.slice(match[0].length) || soFar;\n\t\t\t\t\t}\n\t\t\t\t\tgroups.push((tokens = []));\n\t\t\t\t}\n\n\t\t\t\tmatched = false;\n\n\t\t\t\t// Combinators\n\t\t\t\tif ((match = rleadingCombinator.exec(soFar))) {\n\t\t\t\t\tmatched = match.shift();\n\t\t\t\t\ttokens.push({\n\t\t\t\t\t\tvalue: matched,\n\n\t\t\t\t\t\t// Cast descendant combinators to space\n\t\t\t\t\t\ttype: match[0].replace(rtrimCSS, \" \")\n\t\t\t\t\t});\n\t\t\t\t\tsoFar = soFar.slice(matched.length);\n\t\t\t\t}\n\n\t\t\t\t// Filters\n\t\t\t\tfor (type in Expr.filter) {\n\t\t\t\t\tif ((match = matchExpr[type].exec(soFar)) && (!preFilters[type] ||\n\t\t\t\t\t\t(match = preFilters[type](match)))) {\n\t\t\t\t\t\tmatched = match.shift();\n\t\t\t\t\t\ttokens.push({\n\t\t\t\t\t\t\tvalue: matched,\n\t\t\t\t\t\t\ttype: type,\n\t\t\t\t\t\t\tmatches: match\n\t\t\t\t\t\t});\n\t\t\t\t\t\tsoFar = soFar.slice(matched.length);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (!matched) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Return the length of the invalid excess\n\t\t\t// if we're just parsing\n\t\t\t// Otherwise, throw an error or return tokens\n\t\t\tif (parseOnly) {\n\t\t\t\treturn soFar.length;\n\t\t\t}\n\n\t\t\treturn soFar ?\n\t\t\t\tfind.error(selector) :\n\n\t\t\t\t// Cache the tokens\n\t\t\t\ttokenCache(selector, groups).slice(0);\n\t\t}\n\n\t\tfunction toSelector(tokens) {\n\t\t\tvar i = 0,\n\t\t\t\tlen = tokens.length,\n\t\t\t\tselector = \"\";\n\t\t\tfor (; i < len; i++) {\n\t\t\t\tselector += tokens[i].value;\n\t\t\t}\n\t\t\treturn selector;\n\t\t}\n\n\t\tfunction addCombinator(matcher, combinator, base) {\n\t\t\tvar dir = combinator.dir,\n\t\t\t\tskip = combinator.next,\n\t\t\t\tkey = skip || dir,\n\t\t\t\tcheckNonElements = base && key === \"parentNode\",\n\t\t\t\tdoneName = done++;\n\n\t\t\treturn combinator.first ?\n\n\t\t\t\t// Check against closest ancestor/preceding element\n\t\t\t\tfunction (elem, context, xml) {\n\t\t\t\t\twhile ((elem = elem[dir])) {\n\t\t\t\t\t\tif (elem.nodeType === 1 || checkNonElements) {\n\t\t\t\t\t\t\treturn matcher(elem, context, xml);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn false;\n\t\t\t\t} :\n\n\t\t\t\t// Check against all ancestor/preceding elements\n\t\t\t\tfunction (elem, context, xml) {\n\t\t\t\t\tvar oldCache, outerCache,\n\t\t\t\t\t\tnewCache = [dirruns, doneName];\n\n\t\t\t\t\t// We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching\n\t\t\t\t\tif (xml) {\n\t\t\t\t\t\twhile ((elem = elem[dir])) {\n\t\t\t\t\t\t\tif (elem.nodeType === 1 || checkNonElements) {\n\t\t\t\t\t\t\t\tif (matcher(elem, context, xml)) {\n\t\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\twhile ((elem = elem[dir])) {\n\t\t\t\t\t\t\tif (elem.nodeType === 1 || checkNonElements) {\n\t\t\t\t\t\t\t\touterCache = elem[expando] || (elem[expando] = {});\n\n\t\t\t\t\t\t\t\tif (skip && nodeName(elem, skip)) {\n\t\t\t\t\t\t\t\t\telem = elem[dir] || elem;\n\t\t\t\t\t\t\t\t} else if ((oldCache = outerCache[key]) &&\n\t\t\t\t\t\t\t\t\toldCache[0] === dirruns && oldCache[1] === doneName) {\n\n\t\t\t\t\t\t\t\t\t// Assign to newCache so results back-propagate to previous elements\n\t\t\t\t\t\t\t\t\treturn (newCache[2] = oldCache[2]);\n\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t// Reuse newcache so results back-propagate to previous elements\n\t\t\t\t\t\t\t\t\touterCache[key] = newCache;\n\n\t\t\t\t\t\t\t\t\t// A match means we're done; a fail means we have to keep checking\n\t\t\t\t\t\t\t\t\tif ((newCache[2] = matcher(elem, context, xml))) {\n\t\t\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn false;\n\t\t\t\t};\n\t\t}\n\n\t\tfunction elementMatcher(matchers) {\n\t\t\treturn matchers.length > 1 ?\n\t\t\t\tfunction (elem, context, xml) {\n\t\t\t\t\tvar i = matchers.length;\n\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\tif (!matchers[i](elem, context, xml)) {\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn true;\n\t\t\t\t} :\n\t\t\t\tmatchers[0];\n\t\t}\n\n\t\tfunction multipleContexts(selector, contexts, results) {\n\t\t\tvar i = 0,\n\t\t\t\tlen = contexts.length;\n\t\t\tfor (; i < len; i++) {\n\t\t\t\tfind(selector, contexts[i], results);\n\t\t\t}\n\t\t\treturn results;\n\t\t}\n\n\t\tfunction condense(unmatched, map, filter, context, xml) {\n\t\t\tvar elem,\n\t\t\t\tnewUnmatched = [],\n\t\t\t\ti = 0,\n\t\t\t\tlen = unmatched.length,\n\t\t\t\tmapped = map != null;\n\n\t\t\tfor (; i < len; i++) {\n\t\t\t\tif ((elem = unmatched[i])) {\n\t\t\t\t\tif (!filter || filter(elem, context, xml)) {\n\t\t\t\t\t\tnewUnmatched.push(elem);\n\t\t\t\t\t\tif (mapped) {\n\t\t\t\t\t\t\tmap.push(i);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn newUnmatched;\n\t\t}\n\n\t\tfunction setMatcher(preFilter, selector, matcher, postFilter, postFinder, postSelector) {\n\t\t\tif (postFilter && !postFilter[expando]) {\n\t\t\t\tpostFilter = setMatcher(postFilter);\n\t\t\t}\n\t\t\tif (postFinder && !postFinder[expando]) {\n\t\t\t\tpostFinder = setMatcher(postFinder, postSelector);\n\t\t\t}\n\t\t\treturn markFunction(function (seed, results, context, xml) {\n\t\t\t\tvar temp, i, elem, matcherOut,\n\t\t\t\t\tpreMap = [],\n\t\t\t\t\tpostMap = [],\n\t\t\t\t\tpreexisting = results.length,\n\n\t\t\t\t\t// Get initial elements from seed or context\n\t\t\t\t\telems = seed ||\n\t\t\t\t\t\tmultipleContexts(selector || \"*\",\n\t\t\t\t\t\t\tcontext.nodeType ? [context] : context, []),\n\n\t\t\t\t\t// Prefilter to get matcher input, preserving a map for seed-results synchronization\n\t\t\t\t\tmatcherIn = preFilter && (seed || !selector) ?\n\t\t\t\t\t\tcondense(elems, preMap, preFilter, context, xml) :\n\t\t\t\t\t\telems;\n\n\t\t\t\tif (matcher) {\n\n\t\t\t\t\t// If we have a postFinder, or filtered seed, or non-seed postFilter\n\t\t\t\t\t// or preexisting results,\n\t\t\t\t\tmatcherOut = postFinder || (seed ? preFilter : preexisting || postFilter) ?\n\n\t\t\t\t\t\t// ...intermediate processing is necessary\n\t\t\t\t\t\t[] :\n\n\t\t\t\t\t\t// ...otherwise use results directly\n\t\t\t\t\t\tresults;\n\n\t\t\t\t\t// Find primary matches\n\t\t\t\t\tmatcher(matcherIn, matcherOut, context, xml);\n\t\t\t\t} else {\n\t\t\t\t\tmatcherOut = matcherIn;\n\t\t\t\t}\n\n\t\t\t\t// Apply postFilter\n\t\t\t\tif (postFilter) {\n\t\t\t\t\ttemp = condense(matcherOut, postMap);\n\t\t\t\t\tpostFilter(temp, [], context, xml);\n\n\t\t\t\t\t// Un-match failing elements by moving them back to matcherIn\n\t\t\t\t\ti = temp.length;\n\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\tif ((elem = temp[i])) {\n\t\t\t\t\t\t\tmatcherOut[postMap[i]] = !(matcherIn[postMap[i]] = elem);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (seed) {\n\t\t\t\t\tif (postFinder || preFilter) {\n\t\t\t\t\t\tif (postFinder) {\n\n\t\t\t\t\t\t\t// Get the final matcherOut by condensing this intermediate into postFinder contexts\n\t\t\t\t\t\t\ttemp = [];\n\t\t\t\t\t\t\ti = matcherOut.length;\n\t\t\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\t\t\tif ((elem = matcherOut[i])) {\n\n\t\t\t\t\t\t\t\t\t// Restore matcherIn since elem is not yet a final match\n\t\t\t\t\t\t\t\t\ttemp.push((matcherIn[i] = elem));\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tpostFinder(null, (matcherOut = []), temp, xml);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Move matched elements from seed to results to keep them synchronized\n\t\t\t\t\t\ti = matcherOut.length;\n\t\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\t\tif ((elem = matcherOut[i]) &&\n\t\t\t\t\t\t\t\t(temp = postFinder ? indexOf.call(seed, elem) : preMap[i]) > -1) {\n\n\t\t\t\t\t\t\t\tseed[temp] = !(results[temp] = elem);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Add elements to results, through postFinder if defined\n\t\t\t\t} else {\n\t\t\t\t\tmatcherOut = condense(\n\t\t\t\t\t\tmatcherOut === results ?\n\t\t\t\t\t\t\tmatcherOut.splice(preexisting, matcherOut.length) :\n\t\t\t\t\t\t\tmatcherOut\n\t\t\t\t\t);\n\t\t\t\t\tif (postFinder) {\n\t\t\t\t\t\tpostFinder(null, results, matcherOut, xml);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tpush.apply(results, matcherOut);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tfunction matcherFromTokens(tokens) {\n\t\t\tvar checkContext, matcher, j,\n\t\t\t\tlen = tokens.length,\n\t\t\t\tleadingRelative = Expr.relative[tokens[0].type],\n\t\t\t\timplicitRelative = leadingRelative || Expr.relative[\" \"],\n\t\t\t\ti = leadingRelative ? 1 : 0,\n\n\t\t\t\t// The foundational matcher ensures that elements are reachable from top-level context(s)\n\t\t\t\tmatchContext = addCombinator(function (elem) {\n\t\t\t\t\treturn elem === checkContext;\n\t\t\t\t}, implicitRelative, true),\n\t\t\t\tmatchAnyContext = addCombinator(function (elem) {\n\t\t\t\t\treturn indexOf.call(checkContext, elem) > -1;\n\t\t\t\t}, implicitRelative, true),\n\t\t\t\tmatchers = [function (elem, context, xml) {\n\n\t\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\tvar ret = (!leadingRelative && (xml || context != outermostContext)) || (\n\t\t\t\t\t\t(checkContext = context).nodeType ?\n\t\t\t\t\t\t\tmatchContext(elem, context, xml) :\n\t\t\t\t\t\t\tmatchAnyContext(elem, context, xml));\n\n\t\t\t\t\t// Avoid hanging onto element\n\t\t\t\t\t// (see https://github.com/jquery/sizzle/issues/299)\n\t\t\t\t\tcheckContext = null;\n\t\t\t\t\treturn ret;\n\t\t\t\t}];\n\n\t\t\tfor (; i < len; i++) {\n\t\t\t\tif ((matcher = Expr.relative[tokens[i].type])) {\n\t\t\t\t\tmatchers = [addCombinator(elementMatcher(matchers), matcher)];\n\t\t\t\t} else {\n\t\t\t\t\tmatcher = Expr.filter[tokens[i].type].apply(null, tokens[i].matches);\n\n\t\t\t\t\t// Return special upon seeing a positional matcher\n\t\t\t\t\tif (matcher[expando]) {\n\n\t\t\t\t\t\t// Find the next relative operator (if any) for proper handling\n\t\t\t\t\t\tj = ++i;\n\t\t\t\t\t\tfor (; j < len; j++) {\n\t\t\t\t\t\t\tif (Expr.relative[tokens[j].type]) {\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn setMatcher(\n\t\t\t\t\t\t\ti > 1 && elementMatcher(matchers),\n\t\t\t\t\t\t\ti > 1 && toSelector(\n\n\t\t\t\t\t\t\t\t// If the preceding token was a descendant combinator, insert an implicit any-element `*`\n\t\t\t\t\t\t\t\ttokens.slice(0, i - 1)\n\t\t\t\t\t\t\t\t\t.concat({ value: tokens[i - 2].type === \" \" ? \"*\" : \"\" })\n\t\t\t\t\t\t\t).replace(rtrimCSS, \"$1\"),\n\t\t\t\t\t\t\tmatcher,\n\t\t\t\t\t\t\ti < j && matcherFromTokens(tokens.slice(i, j)),\n\t\t\t\t\t\t\tj < len && matcherFromTokens((tokens = tokens.slice(j))),\n\t\t\t\t\t\t\tj < len && toSelector(tokens)\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\tmatchers.push(matcher);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn elementMatcher(matchers);\n\t\t}\n\n\t\tfunction matcherFromGroupMatchers(elementMatchers, setMatchers) {\n\t\t\tvar bySet = setMatchers.length > 0,\n\t\t\t\tbyElement = elementMatchers.length > 0,\n\t\t\t\tsuperMatcher = function (seed, context, xml, results, outermost) {\n\t\t\t\t\tvar elem, j, matcher,\n\t\t\t\t\t\tmatchedCount = 0,\n\t\t\t\t\t\ti = \"0\",\n\t\t\t\t\t\tunmatched = seed && [],\n\t\t\t\t\t\tsetMatched = [],\n\t\t\t\t\t\tcontextBackup = outermostContext,\n\n\t\t\t\t\t\t// We must always have either seed elements or outermost context\n\t\t\t\t\t\telems = seed || byElement && Expr.find.TAG(\"*\", outermost),\n\n\t\t\t\t\t\t// Use integer dirruns iff this is the outermost matcher\n\t\t\t\t\t\tdirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1),\n\t\t\t\t\t\tlen = elems.length;\n\n\t\t\t\t\tif (outermost) {\n\n\t\t\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\t\toutermostContext = context == document || context || outermost;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Add elements passing elementMatchers directly to results\n\t\t\t\t\t// Support: iOS <=7 - 9 only\n\t\t\t\t\t// Tolerate NodeList properties (IE: \"length\"; Safari: <number>) matching\n\t\t\t\t\t// elements by id. (see trac-14142)\n\t\t\t\t\tfor (; i !== len && (elem = elems[i]) != null; i++) {\n\t\t\t\t\t\tif (byElement && elem) {\n\t\t\t\t\t\t\tj = 0;\n\n\t\t\t\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\t\t\tif (!context && elem.ownerDocument != document) {\n\t\t\t\t\t\t\t\tsetDocument(elem);\n\t\t\t\t\t\t\t\txml = !documentIsHTML;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\twhile ((matcher = elementMatchers[j++])) {\n\t\t\t\t\t\t\t\tif (matcher(elem, context || document, xml)) {\n\t\t\t\t\t\t\t\t\tpush.call(results, elem);\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (outermost) {\n\t\t\t\t\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Track unmatched elements for set filters\n\t\t\t\t\t\tif (bySet) {\n\n\t\t\t\t\t\t\t// They will have gone through all possible matchers\n\t\t\t\t\t\t\tif ((elem = !matcher && elem)) {\n\t\t\t\t\t\t\t\tmatchedCount--;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Lengthen the array for every element, matched or not\n\t\t\t\t\t\t\tif (seed) {\n\t\t\t\t\t\t\t\tunmatched.push(elem);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// `i` is now the count of elements visited above, and adding it to `matchedCount`\n\t\t\t\t\t// makes the latter nonnegative.\n\t\t\t\t\tmatchedCount += i;\n\n\t\t\t\t\t// Apply set filters to unmatched elements\n\t\t\t\t\t// NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`\n\t\t\t\t\t// equals `i`), unless we didn't visit _any_ elements in the above loop because we have\n\t\t\t\t\t// no element matchers and no seed.\n\t\t\t\t\t// Incrementing an initially-string \"0\" `i` allows `i` to remain a string only in that\n\t\t\t\t\t// case, which will result in a \"00\" `matchedCount` that differs from `i` but is also\n\t\t\t\t\t// numerically zero.\n\t\t\t\t\tif (bySet && i !== matchedCount) {\n\t\t\t\t\t\tj = 0;\n\t\t\t\t\t\twhile ((matcher = setMatchers[j++])) {\n\t\t\t\t\t\t\tmatcher(unmatched, setMatched, context, xml);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (seed) {\n\n\t\t\t\t\t\t\t// Reintegrate element matches to eliminate the need for sorting\n\t\t\t\t\t\t\tif (matchedCount > 0) {\n\t\t\t\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\t\t\t\tif (!(unmatched[i] || setMatched[i])) {\n\t\t\t\t\t\t\t\t\t\tsetMatched[i] = pop.call(results);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Discard index placeholder values to get only actual matches\n\t\t\t\t\t\t\tsetMatched = condense(setMatched);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Add matches to results\n\t\t\t\t\t\tpush.apply(results, setMatched);\n\n\t\t\t\t\t\t// Seedless set matches succeeding multiple successful matchers stipulate sorting\n\t\t\t\t\t\tif (outermost && !seed && setMatched.length > 0 &&\n\t\t\t\t\t\t\t(matchedCount + setMatchers.length) > 1) {\n\n\t\t\t\t\t\t\tjQuery.uniqueSort(results);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Override manipulation of globals by nested matchers\n\t\t\t\t\tif (outermost) {\n\t\t\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\t\t\toutermostContext = contextBackup;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn unmatched;\n\t\t\t\t};\n\n\t\t\treturn bySet ?\n\t\t\t\tmarkFunction(superMatcher) :\n\t\t\t\tsuperMatcher;\n\t\t}\n\n\t\tfunction compile(selector, match /* Internal Use Only */) {\n\t\t\tvar i,\n\t\t\t\tsetMatchers = [],\n\t\t\t\telementMatchers = [],\n\t\t\t\tcached = compilerCache[selector + \" \"];\n\n\t\t\tif (!cached) {\n\n\t\t\t\t// Generate a function of recursive functions that can be used to check each element\n\t\t\t\tif (!match) {\n\t\t\t\t\tmatch = tokenize(selector);\n\t\t\t\t}\n\t\t\t\ti = match.length;\n\t\t\t\twhile (i--) {\n\t\t\t\t\tcached = matcherFromTokens(match[i]);\n\t\t\t\t\tif (cached[expando]) {\n\t\t\t\t\t\tsetMatchers.push(cached);\n\t\t\t\t\t} else {\n\t\t\t\t\t\telementMatchers.push(cached);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Cache the compiled function\n\t\t\t\tcached = compilerCache(selector,\n\t\t\t\t\tmatcherFromGroupMatchers(elementMatchers, setMatchers));\n\n\t\t\t\t// Save selector and tokenization\n\t\t\t\tcached.selector = selector;\n\t\t\t}\n\t\t\treturn cached;\n\t\t}\n\n\t\t/**\n\t\t * A low-level selection function that works with jQuery's compiled\n\t\t *  selector functions\n\t\t * @param {String|Function} selector A selector or a pre-compiled\n\t\t *  selector function built with jQuery selector compile\n\t\t * @param {Element} context\n\t\t * @param {Array} [results]\n\t\t * @param {Array} [seed] A set of elements to match against\n\t\t */\n\t\tfunction select(selector, context, results, seed) {\n\t\t\tvar i, tokens, token, type, find,\n\t\t\t\tcompiled = typeof selector === \"function\" && selector,\n\t\t\t\tmatch = !seed && tokenize((selector = compiled.selector || selector));\n\n\t\t\tresults = results || [];\n\n\t\t\t// Try to minimize operations if there is only one selector in the list and no seed\n\t\t\t// (the latter of which guarantees us context)\n\t\t\tif (match.length === 1) {\n\n\t\t\t\t// Reduce context if the leading compound selector is an ID\n\t\t\t\ttokens = match[0] = match[0].slice(0);\n\t\t\t\tif (tokens.length > 2 && (token = tokens[0]).type === \"ID\" &&\n\t\t\t\t\tcontext.nodeType === 9 && documentIsHTML && Expr.relative[tokens[1].type]) {\n\n\t\t\t\t\tcontext = (Expr.find.ID(\n\t\t\t\t\t\ttoken.matches[0].replace(runescape, funescape),\n\t\t\t\t\t\tcontext\n\t\t\t\t\t) || [])[0];\n\t\t\t\t\tif (!context) {\n\t\t\t\t\t\treturn results;\n\n\t\t\t\t\t\t// Precompiled matchers will still verify ancestry, so step up a level\n\t\t\t\t\t} else if (compiled) {\n\t\t\t\t\t\tcontext = context.parentNode;\n\t\t\t\t\t}\n\n\t\t\t\t\tselector = selector.slice(tokens.shift().value.length);\n\t\t\t\t}\n\n\t\t\t\t// Fetch a seed set for right-to-left matching\n\t\t\t\ti = matchExpr.needsContext.test(selector) ? 0 : tokens.length;\n\t\t\t\twhile (i--) {\n\t\t\t\t\ttoken = tokens[i];\n\n\t\t\t\t\t// Abort if we hit a combinator\n\t\t\t\t\tif (Expr.relative[(type = token.type)]) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tif ((find = Expr.find[type])) {\n\n\t\t\t\t\t\t// Search, expanding context for leading sibling combinators\n\t\t\t\t\t\tif ((seed = find(\n\t\t\t\t\t\t\ttoken.matches[0].replace(runescape, funescape),\n\t\t\t\t\t\t\trsibling.test(tokens[0].type) &&\n\t\t\t\t\t\t\ttestContext(context.parentNode) || context\n\t\t\t\t\t\t))) {\n\n\t\t\t\t\t\t\t// If seed is empty or no tokens remain, we can return early\n\t\t\t\t\t\t\ttokens.splice(i, 1);\n\t\t\t\t\t\t\tselector = seed.length && toSelector(tokens);\n\t\t\t\t\t\t\tif (!selector) {\n\t\t\t\t\t\t\t\tpush.apply(results, seed);\n\t\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Compile and execute a filtering function if one is not provided\n\t\t\t// Provide `match` to avoid retokenization if we modified the selector above\n\t\t\t(compiled || compile(selector, match))(\n\t\t\t\tseed,\n\t\t\t\tcontext,\n\t\t\t\t!documentIsHTML,\n\t\t\t\tresults,\n\t\t\t\t!context || rsibling.test(selector) && testContext(context.parentNode) || context\n\t\t\t);\n\t\t\treturn results;\n\t\t}\n\n\t\t// One-time assignments\n\n\t\t// Support: Android <=4.0 - 4.1+\n\t\t// Sort stability\n\t\tsupport.sortStable = expando.split(\"\").sort(sortOrder).join(\"\") === expando;\n\n\t\t// Initialize against the default document\n\t\tsetDocument();\n\n\t\t// Support: Android <=4.0 - 4.1+\n\t\t// Detached nodes confoundingly follow *each other*\n\t\tsupport.sortDetached = assert(function (el) {\n\n\t\t\t// Should return 1, but returns 4 (following)\n\t\t\treturn el.compareDocumentPosition(document.createElement(\"fieldset\")) & 1;\n\t\t});\n\n\t\tjQuery.find = find;\n\n\t\t// Deprecated\n\t\tjQuery.expr[\":\"] = jQuery.expr.pseudos;\n\t\tjQuery.unique = jQuery.uniqueSort;\n\n\t\t// These have always been private, but they used to be documented\n\t\t// as part of Sizzle so let's maintain them in the 3.x line\n\t\t// for backwards compatibility purposes.\n\t\tfind.compile = compile;\n\t\tfind.select = select;\n\t\tfind.setDocument = setDocument;\n\n\t\tfind.escape = jQuery.escapeSelector;\n\t\tfind.getText = jQuery.text;\n\t\tfind.isXML = jQuery.isXMLDoc;\n\t\tfind.selectors = jQuery.expr;\n\t\tfind.support = jQuery.support;\n\t\tfind.uniqueSort = jQuery.uniqueSort;\n\n\t\t/* eslint-enable */\n\n\t})();\n\n\n\tvar dir = function (elem, dir, until) {\n\t\tvar matched = [],\n\t\t\ttruncate = until !== undefined;\n\n\t\twhile ((elem = elem[dir]) && elem.nodeType !== 9) {\n\t\t\tif (elem.nodeType === 1) {\n\t\t\t\tif (truncate && jQuery(elem).is(until)) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tmatched.push(elem);\n\t\t\t}\n\t\t}\n\t\treturn matched;\n\t};\n\n\n\tvar siblings = function (n, elem) {\n\t\tvar matched = [];\n\n\t\tfor (; n; n = n.nextSibling) {\n\t\t\tif (n.nodeType === 1 && n !== elem) {\n\t\t\t\tmatched.push(n);\n\t\t\t}\n\t\t}\n\n\t\treturn matched;\n\t};\n\n\n\tvar rneedsContext = jQuery.expr.match.needsContext;\n\n\tvar rsingleTag = (/^<([a-z][^\\/\\0>:\\x20\\t\\r\\n\\f]*)[\\x20\\t\\r\\n\\f]*\\/?>(?:<\\/\\1>|)$/i);\n\n\n\n\t// Implement the identical functionality for filter and not\n\tfunction winnow(elements, qualifier, not) {\n\t\tif (isFunction(qualifier)) {\n\t\t\treturn jQuery.grep(elements, function (elem, i) {\n\t\t\t\treturn !!qualifier.call(elem, i, elem) !== not;\n\t\t\t});\n\t\t}\n\n\t\t// Single element\n\t\tif (qualifier.nodeType) {\n\t\t\treturn jQuery.grep(elements, function (elem) {\n\t\t\t\treturn (elem === qualifier) !== not;\n\t\t\t});\n\t\t}\n\n\t\t// Arraylike of elements (jQuery, arguments, Array)\n\t\tif (typeof qualifier !== \"string\") {\n\t\t\treturn jQuery.grep(elements, function (elem) {\n\t\t\t\treturn (indexOf.call(qualifier, elem) > -1) !== not;\n\t\t\t});\n\t\t}\n\n\t\t// Filtered directly for both simple and complex selectors\n\t\treturn jQuery.filter(qualifier, elements, not);\n\t}\n\n\tjQuery.filter = function (expr, elems, not) {\n\t\tvar elem = elems[0];\n\n\t\tif (not) {\n\t\t\texpr = \":not(\" + expr + \")\";\n\t\t}\n\n\t\tif (elems.length === 1 && elem.nodeType === 1) {\n\t\t\treturn jQuery.find.matchesSelector(elem, expr) ? [elem] : [];\n\t\t}\n\n\t\treturn jQuery.find.matches(expr, jQuery.grep(elems, function (elem) {\n\t\t\treturn elem.nodeType === 1;\n\t\t}));\n\t};\n\n\tjQuery.fn.extend({\n\t\tfind: function (selector) {\n\t\t\tvar i, ret,\n\t\t\t\tlen = this.length,\n\t\t\t\tself = this;\n\n\t\t\tif (typeof selector !== \"string\") {\n\t\t\t\treturn this.pushStack(jQuery(selector).filter(function () {\n\t\t\t\t\tfor (i = 0; i < len; i++) {\n\t\t\t\t\t\tif (jQuery.contains(self[i], this)) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}));\n\t\t\t}\n\n\t\t\tret = this.pushStack([]);\n\n\t\t\tfor (i = 0; i < len; i++) {\n\t\t\t\tjQuery.find(selector, self[i], ret);\n\t\t\t}\n\n\t\t\treturn len > 1 ? jQuery.uniqueSort(ret) : ret;\n\t\t},\n\t\tfilter: function (selector) {\n\t\t\treturn this.pushStack(winnow(this, selector || [], false));\n\t\t},\n\t\tnot: function (selector) {\n\t\t\treturn this.pushStack(winnow(this, selector || [], true));\n\t\t},\n\t\tis: function (selector) {\n\t\t\treturn !!winnow(\n\t\t\t\tthis,\n\n\t\t\t\t// If this is a positional/relative selector, check membership in the returned set\n\t\t\t\t// so $(\"p:first\").is(\"p:last\") won't return true for a doc with two \"p\".\n\t\t\t\ttypeof selector === \"string\" && rneedsContext.test(selector) ?\n\t\t\t\t\tjQuery(selector) :\n\t\t\t\t\tselector || [],\n\t\t\t\tfalse\n\t\t\t).length;\n\t\t}\n\t});\n\n\n\t// Initialize a jQuery object\n\n\n\t// A central reference to the root jQuery(document)\n\tvar rootjQuery,\n\n\t\t// A simple way to check for HTML strings\n\t\t// Prioritize #id over <tag> to avoid XSS via location.hash (trac-9521)\n\t\t// Strict HTML recognition (trac-11290: must start with <)\n\t\t// Shortcut simple #id case for speed\n\t\trquickExpr = /^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]+))$/,\n\n\t\tinit = jQuery.fn.init = function (selector, context, root) {\n\t\t\tvar match, elem;\n\n\t\t\t// HANDLE: $(\"\"), $(null), $(undefined), $(false)\n\t\t\tif (!selector) {\n\t\t\t\treturn this;\n\t\t\t}\n\n\t\t\t// Method init() accepts an alternate rootjQuery\n\t\t\t// so migrate can support jQuery.sub (gh-2101)\n\t\t\troot = root || rootjQuery;\n\n\t\t\t// Handle HTML strings\n\t\t\tif (typeof selector === \"string\") {\n\t\t\t\tif (selector[0] === \"<\" &&\n\t\t\t\t\tselector[selector.length - 1] === \">\" &&\n\t\t\t\t\tselector.length >= 3) {\n\n\t\t\t\t\t// Assume that strings that start and end with <> are HTML and skip the regex check\n\t\t\t\t\tmatch = [null, selector, null];\n\n\t\t\t\t} else {\n\t\t\t\t\tmatch = rquickExpr.exec(selector);\n\t\t\t\t}\n\n\t\t\t\t// Match html or make sure no context is specified for #id\n\t\t\t\tif (match && (match[1] || !context)) {\n\n\t\t\t\t\t// HANDLE: $(html) -> $(array)\n\t\t\t\t\tif (match[1]) {\n\t\t\t\t\t\tcontext = context instanceof jQuery ? context[0] : context;\n\n\t\t\t\t\t\t// Option to run scripts is true for back-compat\n\t\t\t\t\t\t// Intentionally let the error be thrown if parseHTML is not present\n\t\t\t\t\t\tjQuery.merge(this, jQuery.parseHTML(\n\t\t\t\t\t\t\tmatch[1],\n\t\t\t\t\t\t\tcontext && context.nodeType ? context.ownerDocument || context : document,\n\t\t\t\t\t\t\ttrue\n\t\t\t\t\t\t));\n\n\t\t\t\t\t\t// HANDLE: $(html, props)\n\t\t\t\t\t\tif (rsingleTag.test(match[1]) && jQuery.isPlainObject(context)) {\n\t\t\t\t\t\t\tfor (match in context) {\n\n\t\t\t\t\t\t\t\t// Properties of context are called as methods if possible\n\t\t\t\t\t\t\t\tif (isFunction(this[match])) {\n\t\t\t\t\t\t\t\t\tthis[match](context[match]);\n\n\t\t\t\t\t\t\t\t\t// ...and otherwise set as attributes\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tthis.attr(match, context[match]);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn this;\n\n\t\t\t\t\t\t// HANDLE: $(#id)\n\t\t\t\t\t} else {\n\t\t\t\t\t\telem = document.getElementById(match[2]);\n\n\t\t\t\t\t\tif (elem) {\n\n\t\t\t\t\t\t\t// Inject the element directly into the jQuery object\n\t\t\t\t\t\t\tthis[0] = elem;\n\t\t\t\t\t\t\tthis.length = 1;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn this;\n\t\t\t\t\t}\n\n\t\t\t\t\t// HANDLE: $(expr, $(...))\n\t\t\t\t} else if (!context || context.jquery) {\n\t\t\t\t\treturn (context || root).find(selector);\n\n\t\t\t\t\t// HANDLE: $(expr, context)\n\t\t\t\t\t// (which is just equivalent to: $(context).find(expr)\n\t\t\t\t} else {\n\t\t\t\t\treturn this.constructor(context).find(selector);\n\t\t\t\t}\n\n\t\t\t\t// HANDLE: $(DOMElement)\n\t\t\t} else if (selector.nodeType) {\n\t\t\t\tthis[0] = selector;\n\t\t\t\tthis.length = 1;\n\t\t\t\treturn this;\n\n\t\t\t\t// HANDLE: $(function)\n\t\t\t\t// Shortcut for document ready\n\t\t\t} else if (isFunction(selector)) {\n\t\t\t\treturn root.ready !== undefined ?\n\t\t\t\t\troot.ready(selector) :\n\n\t\t\t\t\t// Execute immediately if ready is not present\n\t\t\t\t\tselector(jQuery);\n\t\t\t}\n\n\t\t\treturn jQuery.makeArray(selector, this);\n\t\t};\n\n\t// Give the init function the jQuery prototype for later instantiation\n\tinit.prototype = jQuery.fn;\n\n\t// Initialize central reference\n\trootjQuery = jQuery(document);\n\n\n\tvar rparentsprev = /^(?:parents|prev(?:Until|All))/,\n\n\t\t// Methods guaranteed to produce a unique set when starting from a unique set\n\t\tguaranteedUnique = {\n\t\t\tchildren: true,\n\t\t\tcontents: true,\n\t\t\tnext: true,\n\t\t\tprev: true\n\t\t};\n\n\tjQuery.fn.extend({\n\t\thas: function (target) {\n\t\t\tvar targets = jQuery(target, this),\n\t\t\t\tl = targets.length;\n\n\t\t\treturn this.filter(function () {\n\t\t\t\tvar i = 0;\n\t\t\t\tfor (; i < l; i++) {\n\t\t\t\t\tif (jQuery.contains(this, targets[i])) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\tclosest: function (selectors, context) {\n\t\t\tvar cur,\n\t\t\t\ti = 0,\n\t\t\t\tl = this.length,\n\t\t\t\tmatched = [],\n\t\t\t\ttargets = typeof selectors !== \"string\" && jQuery(selectors);\n\n\t\t\t// Positional selectors never match, since there's no _selection_ context\n\t\t\tif (!rneedsContext.test(selectors)) {\n\t\t\t\tfor (; i < l; i++) {\n\t\t\t\t\tfor (cur = this[i]; cur && cur !== context; cur = cur.parentNode) {\n\n\t\t\t\t\t\t// Always skip document fragments\n\t\t\t\t\t\tif (cur.nodeType < 11 && (targets ?\n\t\t\t\t\t\t\ttargets.index(cur) > -1 :\n\n\t\t\t\t\t\t\t// Don't pass non-elements to jQuery#find\n\t\t\t\t\t\t\tcur.nodeType === 1 &&\n\t\t\t\t\t\t\tjQuery.find.matchesSelector(cur, selectors))) {\n\n\t\t\t\t\t\t\tmatched.push(cur);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn this.pushStack(matched.length > 1 ? jQuery.uniqueSort(matched) : matched);\n\t\t},\n\n\t\t// Determine the position of an element within the set\n\t\tindex: function (elem) {\n\n\t\t\t// No argument, return index in parent\n\t\t\tif (!elem) {\n\t\t\t\treturn (this[0] && this[0].parentNode) ? this.first().prevAll().length : -1;\n\t\t\t}\n\n\t\t\t// Index in selector\n\t\t\tif (typeof elem === \"string\") {\n\t\t\t\treturn indexOf.call(jQuery(elem), this[0]);\n\t\t\t}\n\n\t\t\t// Locate the position of the desired element\n\t\t\treturn indexOf.call(this,\n\n\t\t\t\t// If it receives a jQuery object, the first element is used\n\t\t\t\telem.jquery ? elem[0] : elem\n\t\t\t);\n\t\t},\n\n\t\tadd: function (selector, context) {\n\t\t\treturn this.pushStack(\n\t\t\t\tjQuery.uniqueSort(\n\t\t\t\t\tjQuery.merge(this.get(), jQuery(selector, context))\n\t\t\t\t)\n\t\t\t);\n\t\t},\n\n\t\taddBack: function (selector) {\n\t\t\treturn this.add(selector == null ?\n\t\t\t\tthis.prevObject : this.prevObject.filter(selector)\n\t\t\t);\n\t\t}\n\t});\n\n\tfunction sibling(cur, dir) {\n\t\twhile ((cur = cur[dir]) && cur.nodeType !== 1) { }\n\t\treturn cur;\n\t}\n\n\tjQuery.each({\n\t\tparent: function (elem) {\n\t\t\tvar parent = elem.parentNode;\n\t\t\treturn parent && parent.nodeType !== 11 ? parent : null;\n\t\t},\n\t\tparents: function (elem) {\n\t\t\treturn dir(elem, \"parentNode\");\n\t\t},\n\t\tparentsUntil: function (elem, _i, until) {\n\t\t\treturn dir(elem, \"parentNode\", until);\n\t\t},\n\t\tnext: function (elem) {\n\t\t\treturn sibling(elem, \"nextSibling\");\n\t\t},\n\t\tprev: function (elem) {\n\t\t\treturn sibling(elem, \"previousSibling\");\n\t\t},\n\t\tnextAll: function (elem) {\n\t\t\treturn dir(elem, \"nextSibling\");\n\t\t},\n\t\tprevAll: function (elem) {\n\t\t\treturn dir(elem, \"previousSibling\");\n\t\t},\n\t\tnextUntil: function (elem, _i, until) {\n\t\t\treturn dir(elem, \"nextSibling\", until);\n\t\t},\n\t\tprevUntil: function (elem, _i, until) {\n\t\t\treturn dir(elem, \"previousSibling\", until);\n\t\t},\n\t\tsiblings: function (elem) {\n\t\t\treturn siblings((elem.parentNode || {}).firstChild, elem);\n\t\t},\n\t\tchildren: function (elem) {\n\t\t\treturn siblings(elem.firstChild);\n\t\t},\n\t\tcontents: function (elem) {\n\t\t\tif (elem.contentDocument != null &&\n\n\t\t\t\t// Support: IE 11+\n\t\t\t\t// <object> elements with no `data` attribute has an object\n\t\t\t\t// `contentDocument` with a `null` prototype.\n\t\t\t\tgetProto(elem.contentDocument)) {\n\n\t\t\t\treturn elem.contentDocument;\n\t\t\t}\n\n\t\t\t// Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only\n\t\t\t// Treat the template element as a regular one in browsers that\n\t\t\t// don't support it.\n\t\t\tif (nodeName(elem, \"template\")) {\n\t\t\t\telem = elem.content || elem;\n\t\t\t}\n\n\t\t\treturn jQuery.merge([], elem.childNodes);\n\t\t}\n\t}, function (name, fn) {\n\t\tjQuery.fn[name] = function (until, selector) {\n\t\t\tvar matched = jQuery.map(this, fn, until);\n\n\t\t\tif (name.slice(-5) !== \"Until\") {\n\t\t\t\tselector = until;\n\t\t\t}\n\n\t\t\tif (selector && typeof selector === \"string\") {\n\t\t\t\tmatched = jQuery.filter(selector, matched);\n\t\t\t}\n\n\t\t\tif (this.length > 1) {\n\n\t\t\t\t// Remove duplicates\n\t\t\t\tif (!guaranteedUnique[name]) {\n\t\t\t\t\tjQuery.uniqueSort(matched);\n\t\t\t\t}\n\n\t\t\t\t// Reverse order for parents* and prev-derivatives\n\t\t\t\tif (rparentsprev.test(name)) {\n\t\t\t\t\tmatched.reverse();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn this.pushStack(matched);\n\t\t};\n\t});\n\tvar rnothtmlwhite = (/[^\\x20\\t\\r\\n\\f]+/g);\n\n\n\n\t// Convert String-formatted options into Object-formatted ones\n\tfunction createOptions(options) {\n\t\tvar object = {};\n\t\tjQuery.each(options.match(rnothtmlwhite) || [], function (_, flag) {\n\t\t\tobject[flag] = true;\n\t\t});\n\t\treturn object;\n\t}\n\n\t/*\n\t * Create a callback list using the following parameters:\n\t *\n\t *\toptions: an optional list of space-separated options that will change how\n\t *\t\t\tthe callback list behaves or a more traditional option object\n\t *\n\t * By default a callback list will act like an event callback list and can be\n\t * \"fired\" multiple times.\n\t *\n\t * Possible options:\n\t *\n\t *\tonce:\t\t\twill ensure the callback list can only be fired once (like a Deferred)\n\t *\n\t *\tmemory:\t\t\twill keep track of previous values and will call any callback added\n\t *\t\t\t\t\tafter the list has been fired right away with the latest \"memorized\"\n\t *\t\t\t\t\tvalues (like a Deferred)\n\t *\n\t *\tunique:\t\t\twill ensure a callback can only be added once (no duplicate in the list)\n\t *\n\t *\tstopOnFalse:\tinterrupt callings when a callback returns false\n\t *\n\t */\n\tjQuery.Callbacks = function (options) {\n\n\t\t// Convert options from String-formatted to Object-formatted if needed\n\t\t// (we check in cache first)\n\t\toptions = typeof options === \"string\" ?\n\t\t\tcreateOptions(options) :\n\t\t\tjQuery.extend({}, options);\n\n\t\tvar // Flag to know if list is currently firing\n\t\t\tfiring,\n\n\t\t\t// Last fire value for non-forgettable lists\n\t\t\tmemory,\n\n\t\t\t// Flag to know if list was already fired\n\t\t\tfired,\n\n\t\t\t// Flag to prevent firing\n\t\t\tlocked,\n\n\t\t\t// Actual callback list\n\t\t\tlist = [],\n\n\t\t\t// Queue of execution data for repeatable lists\n\t\t\tqueue = [],\n\n\t\t\t// Index of currently firing callback (modified by add/remove as needed)\n\t\t\tfiringIndex = -1,\n\n\t\t\t// Fire callbacks\n\t\t\tfire = function () {\n\n\t\t\t\t// Enforce single-firing\n\t\t\t\tlocked = locked || options.once;\n\n\t\t\t\t// Execute callbacks for all pending executions,\n\t\t\t\t// respecting firingIndex overrides and runtime changes\n\t\t\t\tfired = firing = true;\n\t\t\t\tfor (; queue.length; firingIndex = -1) {\n\t\t\t\t\tmemory = queue.shift();\n\t\t\t\t\twhile (++firingIndex < list.length) {\n\n\t\t\t\t\t\t// Run callback and check for early termination\n\t\t\t\t\t\tif (list[firingIndex].apply(memory[0], memory[1]) === false &&\n\t\t\t\t\t\t\toptions.stopOnFalse) {\n\n\t\t\t\t\t\t\t// Jump to end and forget the data so .add doesn't re-fire\n\t\t\t\t\t\t\tfiringIndex = list.length;\n\t\t\t\t\t\t\tmemory = false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Forget the data if we're done with it\n\t\t\t\tif (!options.memory) {\n\t\t\t\t\tmemory = false;\n\t\t\t\t}\n\n\t\t\t\tfiring = false;\n\n\t\t\t\t// Clean up if we're done firing for good\n\t\t\t\tif (locked) {\n\n\t\t\t\t\t// Keep an empty list if we have data for future add calls\n\t\t\t\t\tif (memory) {\n\t\t\t\t\t\tlist = [];\n\n\t\t\t\t\t\t// Otherwise, this object is spent\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlist = \"\";\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// Actual Callbacks object\n\t\t\tself = {\n\n\t\t\t\t// Add a callback or a collection of callbacks to the list\n\t\t\t\tadd: function () {\n\t\t\t\t\tif (list) {\n\n\t\t\t\t\t\t// If we have memory from a past run, we should fire after adding\n\t\t\t\t\t\tif (memory && !firing) {\n\t\t\t\t\t\t\tfiringIndex = list.length - 1;\n\t\t\t\t\t\t\tqueue.push(memory);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t(function add(args) {\n\t\t\t\t\t\t\tjQuery.each(args, function (_, arg) {\n\t\t\t\t\t\t\t\tif (isFunction(arg)) {\n\t\t\t\t\t\t\t\t\tif (!options.unique || !self.has(arg)) {\n\t\t\t\t\t\t\t\t\t\tlist.push(arg);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} else if (arg && arg.length && toType(arg) !== \"string\") {\n\n\t\t\t\t\t\t\t\t\t// Inspect recursively\n\t\t\t\t\t\t\t\t\tadd(arg);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t})(arguments);\n\n\t\t\t\t\t\tif (memory && !firing) {\n\t\t\t\t\t\t\tfire();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Remove a callback from the list\n\t\t\t\tremove: function () {\n\t\t\t\t\tjQuery.each(arguments, function (_, arg) {\n\t\t\t\t\t\tvar index;\n\t\t\t\t\t\twhile ((index = jQuery.inArray(arg, list, index)) > -1) {\n\t\t\t\t\t\t\tlist.splice(index, 1);\n\n\t\t\t\t\t\t\t// Handle firing indexes\n\t\t\t\t\t\t\tif (index <= firingIndex) {\n\t\t\t\t\t\t\t\tfiringIndex--;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Check if a given callback is in the list.\n\t\t\t\t// If no argument is given, return whether or not list has callbacks attached.\n\t\t\t\thas: function (fn) {\n\t\t\t\t\treturn fn ?\n\t\t\t\t\t\tjQuery.inArray(fn, list) > -1 :\n\t\t\t\t\t\tlist.length > 0;\n\t\t\t\t},\n\n\t\t\t\t// Remove all callbacks from the list\n\t\t\t\tempty: function () {\n\t\t\t\t\tif (list) {\n\t\t\t\t\t\tlist = [];\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Disable .fire and .add\n\t\t\t\t// Abort any current/pending executions\n\t\t\t\t// Clear all callbacks and values\n\t\t\t\tdisable: function () {\n\t\t\t\t\tlocked = queue = [];\n\t\t\t\t\tlist = memory = \"\";\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\t\t\t\tdisabled: function () {\n\t\t\t\t\treturn !list;\n\t\t\t\t},\n\n\t\t\t\t// Disable .fire\n\t\t\t\t// Also disable .add unless we have memory (since it would have no effect)\n\t\t\t\t// Abort any pending executions\n\t\t\t\tlock: function () {\n\t\t\t\t\tlocked = queue = [];\n\t\t\t\t\tif (!memory && !firing) {\n\t\t\t\t\t\tlist = memory = \"\";\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\t\t\t\tlocked: function () {\n\t\t\t\t\treturn !!locked;\n\t\t\t\t},\n\n\t\t\t\t// Call all callbacks with the given context and arguments\n\t\t\t\tfireWith: function (context, args) {\n\t\t\t\t\tif (!locked) {\n\t\t\t\t\t\targs = args || [];\n\t\t\t\t\t\targs = [context, args.slice ? args.slice() : args];\n\t\t\t\t\t\tqueue.push(args);\n\t\t\t\t\t\tif (!firing) {\n\t\t\t\t\t\t\tfire();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Call all the callbacks with the given arguments\n\t\t\t\tfire: function () {\n\t\t\t\t\tself.fireWith(this, arguments);\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// To know if the callbacks have already been called at least once\n\t\t\t\tfired: function () {\n\t\t\t\t\treturn !!fired;\n\t\t\t\t}\n\t\t\t};\n\n\t\treturn self;\n\t};\n\n\n\tfunction Identity(v) {\n\t\treturn v;\n\t}\n\tfunction Thrower(ex) {\n\t\tthrow ex;\n\t}\n\n\tfunction adoptValue(value, resolve, reject, noValue) {\n\t\tvar method;\n\n\t\ttry {\n\n\t\t\t// Check for promise aspect first to privilege synchronous behavior\n\t\t\tif (value && isFunction((method = value.promise))) {\n\t\t\t\tmethod.call(value).done(resolve).fail(reject);\n\n\t\t\t\t// Other thenables\n\t\t\t} else if (value && isFunction((method = value.then))) {\n\t\t\t\tmethod.call(value, resolve, reject);\n\n\t\t\t\t// Other non-thenables\n\t\t\t} else {\n\n\t\t\t\t// Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer:\n\t\t\t\t// * false: [ value ].slice( 0 ) => resolve( value )\n\t\t\t\t// * true: [ value ].slice( 1 ) => resolve()\n\t\t\t\tresolve.apply(undefined, [value].slice(noValue));\n\t\t\t}\n\n\t\t\t// For Promises/A+, convert exceptions into rejections\n\t\t\t// Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in\n\t\t\t// Deferred#then to conditionally suppress rejection.\n\t\t} catch (value) {\n\n\t\t\t// Support: Android 4.0 only\n\t\t\t// Strict mode functions invoked without .call/.apply get global-object context\n\t\t\treject.apply(undefined, [value]);\n\t\t}\n\t}\n\n\tjQuery.extend({\n\n\t\tDeferred: function (func) {\n\t\t\tvar tuples = [\n\n\t\t\t\t// action, add listener, callbacks,\n\t\t\t\t// ... .then handlers, argument index, [final state]\n\t\t\t\t[\"notify\", \"progress\", jQuery.Callbacks(\"memory\"),\n\t\t\t\t\tjQuery.Callbacks(\"memory\"), 2],\n\t\t\t\t[\"resolve\", \"done\", jQuery.Callbacks(\"once memory\"),\n\t\t\t\t\tjQuery.Callbacks(\"once memory\"), 0, \"resolved\"],\n\t\t\t\t[\"reject\", \"fail\", jQuery.Callbacks(\"once memory\"),\n\t\t\t\t\tjQuery.Callbacks(\"once memory\"), 1, \"rejected\"]\n\t\t\t],\n\t\t\t\tstate = \"pending\",\n\t\t\t\tpromise = {\n\t\t\t\t\tstate: function () {\n\t\t\t\t\t\treturn state;\n\t\t\t\t\t},\n\t\t\t\t\talways: function () {\n\t\t\t\t\t\tdeferred.done(arguments).fail(arguments);\n\t\t\t\t\t\treturn this;\n\t\t\t\t\t},\n\t\t\t\t\t\"catch\": function (fn) {\n\t\t\t\t\t\treturn promise.then(null, fn);\n\t\t\t\t\t},\n\n\t\t\t\t\t// Keep pipe for back-compat\n\t\t\t\t\tpipe: function ( /* fnDone, fnFail, fnProgress */) {\n\t\t\t\t\t\tvar fns = arguments;\n\n\t\t\t\t\t\treturn jQuery.Deferred(function (newDefer) {\n\t\t\t\t\t\t\tjQuery.each(tuples, function (_i, tuple) {\n\n\t\t\t\t\t\t\t\t// Map tuples (progress, done, fail) to arguments (done, fail, progress)\n\t\t\t\t\t\t\t\tvar fn = isFunction(fns[tuple[4]]) && fns[tuple[4]];\n\n\t\t\t\t\t\t\t\t// deferred.progress(function() { bind to newDefer or newDefer.notify })\n\t\t\t\t\t\t\t\t// deferred.done(function() { bind to newDefer or newDefer.resolve })\n\t\t\t\t\t\t\t\t// deferred.fail(function() { bind to newDefer or newDefer.reject })\n\t\t\t\t\t\t\t\tdeferred[tuple[1]](function () {\n\t\t\t\t\t\t\t\t\tvar returned = fn && fn.apply(this, arguments);\n\t\t\t\t\t\t\t\t\tif (returned && isFunction(returned.promise)) {\n\t\t\t\t\t\t\t\t\t\treturned.promise()\n\t\t\t\t\t\t\t\t\t\t\t.progress(newDefer.notify)\n\t\t\t\t\t\t\t\t\t\t\t.done(newDefer.resolve)\n\t\t\t\t\t\t\t\t\t\t\t.fail(newDefer.reject);\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tnewDefer[tuple[0] + \"With\"](\n\t\t\t\t\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\t\t\t\t\tfn ? [returned] : arguments\n\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tfns = null;\n\t\t\t\t\t\t}).promise();\n\t\t\t\t\t},\n\t\t\t\t\tthen: function (onFulfilled, onRejected, onProgress) {\n\t\t\t\t\t\tvar maxDepth = 0;\n\t\t\t\t\t\tfunction resolve(depth, deferred, handler, special) {\n\t\t\t\t\t\t\treturn function () {\n\t\t\t\t\t\t\t\tvar that = this,\n\t\t\t\t\t\t\t\t\targs = arguments,\n\t\t\t\t\t\t\t\t\tmightThrow = function () {\n\t\t\t\t\t\t\t\t\t\tvar returned, then;\n\n\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.3\n\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-59\n\t\t\t\t\t\t\t\t\t\t// Ignore double-resolution attempts\n\t\t\t\t\t\t\t\t\t\tif (depth < maxDepth) {\n\t\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\treturned = handler.apply(that, args);\n\n\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.1\n\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-48\n\t\t\t\t\t\t\t\t\t\tif (returned === deferred.promise()) {\n\t\t\t\t\t\t\t\t\t\t\tthrow new TypeError(\"Thenable self-resolution\");\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ sections 2.3.3.1, 3.5\n\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-54\n\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-75\n\t\t\t\t\t\t\t\t\t\t// Retrieve `then` only once\n\t\t\t\t\t\t\t\t\t\tthen = returned &&\n\n\t\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.4\n\t\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-64\n\t\t\t\t\t\t\t\t\t\t\t// Only check objects and functions for thenability\n\t\t\t\t\t\t\t\t\t\t\t(typeof returned === \"object\" ||\n\t\t\t\t\t\t\t\t\t\t\t\ttypeof returned === \"function\") &&\n\t\t\t\t\t\t\t\t\t\t\treturned.then;\n\n\t\t\t\t\t\t\t\t\t\t// Handle a returned thenable\n\t\t\t\t\t\t\t\t\t\tif (isFunction(then)) {\n\n\t\t\t\t\t\t\t\t\t\t\t// Special processors (notify) just wait for resolution\n\t\t\t\t\t\t\t\t\t\t\tif (special) {\n\t\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\t\tresolve(maxDepth, deferred, Identity, special),\n\t\t\t\t\t\t\t\t\t\t\t\t\tresolve(maxDepth, deferred, Thrower, special)\n\t\t\t\t\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t\t\t\t\t// Normal processors (resolve) also hook into progress\n\t\t\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t\t\t// ...and disregard older resolution values\n\t\t\t\t\t\t\t\t\t\t\t\tmaxDepth++;\n\n\t\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\t\tresolve(maxDepth, deferred, Identity, special),\n\t\t\t\t\t\t\t\t\t\t\t\t\tresolve(maxDepth, deferred, Thrower, special),\n\t\t\t\t\t\t\t\t\t\t\t\t\tresolve(maxDepth, deferred, Identity,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tdeferred.notifyWith)\n\t\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t// Handle all other returned values\n\t\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\t\tif (handler !== Identity) {\n\t\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\t\targs = [returned];\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t// Process the value(s)\n\t\t\t\t\t\t\t\t\t\t\t// Default process is resolve\n\t\t\t\t\t\t\t\t\t\t\t(special || deferred.resolveWith)(that, args);\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\n\t\t\t\t\t\t\t\t\t// Only normal processors (resolve) catch and reject exceptions\n\t\t\t\t\t\t\t\t\tprocess = special ?\n\t\t\t\t\t\t\t\t\t\tmightThrow :\n\t\t\t\t\t\t\t\t\t\tfunction () {\n\t\t\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\t\t\tmightThrow();\n\t\t\t\t\t\t\t\t\t\t\t} catch (e) {\n\n\t\t\t\t\t\t\t\t\t\t\t\tif (jQuery.Deferred.exceptionHook) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tjQuery.Deferred.exceptionHook(e,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tprocess.error);\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.4.1\n\t\t\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-61\n\t\t\t\t\t\t\t\t\t\t\t\t// Ignore post-resolution exceptions\n\t\t\t\t\t\t\t\t\t\t\t\tif (depth + 1 >= maxDepth) {\n\n\t\t\t\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\t\t\t\tif (handler !== Thrower) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\targs = [e];\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\t\tdeferred.rejectWith(that, args);\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.1\n\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-57\n\t\t\t\t\t\t\t\t// Re-resolve promises immediately to dodge false rejection from\n\t\t\t\t\t\t\t\t// subsequent errors\n\t\t\t\t\t\t\t\tif (depth) {\n\t\t\t\t\t\t\t\t\tprocess();\n\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t// Call an optional hook to record the error, in case of exception\n\t\t\t\t\t\t\t\t\t// since it's otherwise lost when execution goes async\n\t\t\t\t\t\t\t\t\tif (jQuery.Deferred.getErrorHook) {\n\t\t\t\t\t\t\t\t\t\tprocess.error = jQuery.Deferred.getErrorHook();\n\n\t\t\t\t\t\t\t\t\t\t// The deprecated alias of the above. While the name suggests\n\t\t\t\t\t\t\t\t\t\t// returning the stack, not an error instance, jQuery just passes\n\t\t\t\t\t\t\t\t\t\t// it directly to `console.warn` so both will work; an instance\n\t\t\t\t\t\t\t\t\t\t// just better cooperates with source maps.\n\t\t\t\t\t\t\t\t\t} else if (jQuery.Deferred.getStackHook) {\n\t\t\t\t\t\t\t\t\t\tprocess.error = jQuery.Deferred.getStackHook();\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\twindow.setTimeout(process);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn jQuery.Deferred(function (newDefer) {\n\n\t\t\t\t\t\t\t// progress_handlers.add( ... )\n\t\t\t\t\t\t\ttuples[0][3].add(\n\t\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\t\tisFunction(onProgress) ?\n\t\t\t\t\t\t\t\t\t\tonProgress :\n\t\t\t\t\t\t\t\t\t\tIdentity,\n\t\t\t\t\t\t\t\t\tnewDefer.notifyWith\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t// fulfilled_handlers.add( ... )\n\t\t\t\t\t\t\ttuples[1][3].add(\n\t\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\t\tisFunction(onFulfilled) ?\n\t\t\t\t\t\t\t\t\t\tonFulfilled :\n\t\t\t\t\t\t\t\t\t\tIdentity\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t// rejected_handlers.add( ... )\n\t\t\t\t\t\t\ttuples[2][3].add(\n\t\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\t\tisFunction(onRejected) ?\n\t\t\t\t\t\t\t\t\t\tonRejected :\n\t\t\t\t\t\t\t\t\t\tThrower\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}).promise();\n\t\t\t\t\t},\n\n\t\t\t\t\t// Get a promise for this deferred\n\t\t\t\t\t// If obj is provided, the promise aspect is added to the object\n\t\t\t\t\tpromise: function (obj) {\n\t\t\t\t\t\treturn obj != null ? jQuery.extend(obj, promise) : promise;\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tdeferred = {};\n\n\t\t\t// Add list-specific methods\n\t\t\tjQuery.each(tuples, function (i, tuple) {\n\t\t\t\tvar list = tuple[2],\n\t\t\t\t\tstateString = tuple[5];\n\n\t\t\t\t// promise.progress = list.add\n\t\t\t\t// promise.done = list.add\n\t\t\t\t// promise.fail = list.add\n\t\t\t\tpromise[tuple[1]] = list.add;\n\n\t\t\t\t// Handle state\n\t\t\t\tif (stateString) {\n\t\t\t\t\tlist.add(\n\t\t\t\t\t\tfunction () {\n\n\t\t\t\t\t\t\t// state = \"resolved\" (i.e., fulfilled)\n\t\t\t\t\t\t\t// state = \"rejected\"\n\t\t\t\t\t\t\tstate = stateString;\n\t\t\t\t\t\t},\n\n\t\t\t\t\t\t// rejected_callbacks.disable\n\t\t\t\t\t\t// fulfilled_callbacks.disable\n\t\t\t\t\t\ttuples[3 - i][2].disable,\n\n\t\t\t\t\t\t// rejected_handlers.disable\n\t\t\t\t\t\t// fulfilled_handlers.disable\n\t\t\t\t\t\ttuples[3 - i][3].disable,\n\n\t\t\t\t\t\t// progress_callbacks.lock\n\t\t\t\t\t\ttuples[0][2].lock,\n\n\t\t\t\t\t\t// progress_handlers.lock\n\t\t\t\t\t\ttuples[0][3].lock\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\t// progress_handlers.fire\n\t\t\t\t// fulfilled_handlers.fire\n\t\t\t\t// rejected_handlers.fire\n\t\t\t\tlist.add(tuple[3].fire);\n\n\t\t\t\t// deferred.notify = function() { deferred.notifyWith(...) }\n\t\t\t\t// deferred.resolve = function() { deferred.resolveWith(...) }\n\t\t\t\t// deferred.reject = function() { deferred.rejectWith(...) }\n\t\t\t\tdeferred[tuple[0]] = function () {\n\t\t\t\t\tdeferred[tuple[0] + \"With\"](this === deferred ? undefined : this, arguments);\n\t\t\t\t\treturn this;\n\t\t\t\t};\n\n\t\t\t\t// deferred.notifyWith = list.fireWith\n\t\t\t\t// deferred.resolveWith = list.fireWith\n\t\t\t\t// deferred.rejectWith = list.fireWith\n\t\t\t\tdeferred[tuple[0] + \"With\"] = list.fireWith;\n\t\t\t});\n\n\t\t\t// Make the deferred a promise\n\t\t\tpromise.promise(deferred);\n\n\t\t\t// Call given func if any\n\t\t\tif (func) {\n\t\t\t\tfunc.call(deferred, deferred);\n\t\t\t}\n\n\t\t\t// All done!\n\t\t\treturn deferred;\n\t\t},\n\n\t\t// Deferred helper\n\t\twhen: function (singleValue) {\n\t\t\tvar\n\n\t\t\t\t// count of uncompleted subordinates\n\t\t\t\tremaining = arguments.length,\n\n\t\t\t\t// count of unprocessed arguments\n\t\t\t\ti = remaining,\n\n\t\t\t\t// subordinate fulfillment data\n\t\t\t\tresolveContexts = Array(i),\n\t\t\t\tresolveValues = slice.call(arguments),\n\n\t\t\t\t// the primary Deferred\n\t\t\t\tprimary = jQuery.Deferred(),\n\n\t\t\t\t// subordinate callback factory\n\t\t\t\tupdateFunc = function (i) {\n\t\t\t\t\treturn function (value) {\n\t\t\t\t\t\tresolveContexts[i] = this;\n\t\t\t\t\t\tresolveValues[i] = arguments.length > 1 ? slice.call(arguments) : value;\n\t\t\t\t\t\tif (!(--remaining)) {\n\t\t\t\t\t\t\tprimary.resolveWith(resolveContexts, resolveValues);\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t};\n\n\t\t\t// Single- and empty arguments are adopted like Promise.resolve\n\t\t\tif (remaining <= 1) {\n\t\t\t\tadoptValue(singleValue, primary.done(updateFunc(i)).resolve, primary.reject,\n\t\t\t\t\t!remaining);\n\n\t\t\t\t// Use .then() to unwrap secondary thenables (cf. gh-3000)\n\t\t\t\tif (primary.state() === \"pending\" ||\n\t\t\t\t\tisFunction(resolveValues[i] && resolveValues[i].then)) {\n\n\t\t\t\t\treturn primary.then();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Multiple arguments are aggregated like Promise.all array elements\n\t\t\twhile (i--) {\n\t\t\t\tadoptValue(resolveValues[i], updateFunc(i), primary.reject);\n\t\t\t}\n\n\t\t\treturn primary.promise();\n\t\t}\n\t});\n\n\n\t// These usually indicate a programmer mistake during development,\n\t// warn about them ASAP rather than swallowing them by default.\n\tvar rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;\n\n\t// If `jQuery.Deferred.getErrorHook` is defined, `asyncError` is an error\n\t// captured before the async barrier to get the original error cause\n\t// which may otherwise be hidden.\n\tjQuery.Deferred.exceptionHook = function (error, asyncError) {\n\n\t\t// Support: IE 8 - 9 only\n\t\t// Console exists when dev tools are open, which can happen at any time\n\t\tif (window.console && window.console.warn && error && rerrorNames.test(error.name)) {\n\t\t\twindow.console.warn(\"jQuery.Deferred exception: \" + error.message,\n\t\t\t\terror.stack, asyncError);\n\t\t}\n\t};\n\n\n\n\n\tjQuery.readyException = function (error) {\n\t\twindow.setTimeout(function () {\n\t\t\tthrow error;\n\t\t});\n\t};\n\n\n\n\n\t// The deferred used on DOM ready\n\tvar readyList = jQuery.Deferred();\n\n\tjQuery.fn.ready = function (fn) {\n\n\t\treadyList\n\t\t\t.then(fn)\n\n\t\t\t// Wrap jQuery.readyException in a function so that the lookup\n\t\t\t// happens at the time of error handling instead of callback\n\t\t\t// registration.\n\t\t\t.catch(function (error) {\n\t\t\t\tjQuery.readyException(error);\n\t\t\t});\n\n\t\treturn this;\n\t};\n\n\tjQuery.extend({\n\n\t\t// Is the DOM ready to be used? Set to true once it occurs.\n\t\tisReady: false,\n\n\t\t// A counter to track how many items to wait for before\n\t\t// the ready event fires. See trac-6781\n\t\treadyWait: 1,\n\n\t\t// Handle when the DOM is ready\n\t\tready: function (wait) {\n\n\t\t\t// Abort if there are pending holds or we're already ready\n\t\t\tif (wait === true ? --jQuery.readyWait : jQuery.isReady) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Remember that the DOM is ready\n\t\t\tjQuery.isReady = true;\n\n\t\t\t// If a normal DOM Ready event fired, decrement, and wait if need be\n\t\t\tif (wait !== true && --jQuery.readyWait > 0) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If there are functions bound, to execute\n\t\t\treadyList.resolveWith(document, [jQuery]);\n\t\t}\n\t});\n\n\tjQuery.ready.then = readyList.then;\n\n\t// The ready event handler and self cleanup method\n\tfunction completed() {\n\t\tdocument.removeEventListener(\"DOMContentLoaded\", completed);\n\t\twindow.removeEventListener(\"load\", completed);\n\t\tjQuery.ready();\n\t}\n\n\t// Catch cases where $(document).ready() is called\n\t// after the browser event has already occurred.\n\t// Support: IE <=9 - 10 only\n\t// Older IE sometimes signals \"interactive\" too soon\n\tif (document.readyState === \"complete\" ||\n\t\t(document.readyState !== \"loading\" && !document.documentElement.doScroll)) {\n\n\t\t// Handle it asynchronously to allow scripts the opportunity to delay ready\n\t\twindow.setTimeout(jQuery.ready);\n\n\t} else {\n\n\t\t// Use the handy event callback\n\t\tdocument.addEventListener(\"DOMContentLoaded\", completed);\n\n\t\t// A fallback to window.onload, that will always work\n\t\twindow.addEventListener(\"load\", completed);\n\t}\n\n\n\n\n\t// Multifunctional method to get and set values of a collection\n\t// The value/s can optionally be executed if it's a function\n\tvar access = function (elems, fn, key, value, chainable, emptyGet, raw) {\n\t\tvar i = 0,\n\t\t\tlen = elems.length,\n\t\t\tbulk = key == null;\n\n\t\t// Sets many values\n\t\tif (toType(key) === \"object\") {\n\t\t\tchainable = true;\n\t\t\tfor (i in key) {\n\t\t\t\taccess(elems, fn, i, key[i], true, emptyGet, raw);\n\t\t\t}\n\n\t\t\t// Sets one value\n\t\t} else if (value !== undefined) {\n\t\t\tchainable = true;\n\n\t\t\tif (!isFunction(value)) {\n\t\t\t\traw = true;\n\t\t\t}\n\n\t\t\tif (bulk) {\n\n\t\t\t\t// Bulk operations run against the entire set\n\t\t\t\tif (raw) {\n\t\t\t\t\tfn.call(elems, value);\n\t\t\t\t\tfn = null;\n\n\t\t\t\t\t// ...except when executing function values\n\t\t\t\t} else {\n\t\t\t\t\tbulk = fn;\n\t\t\t\t\tfn = function (elem, _key, value) {\n\t\t\t\t\t\treturn bulk.call(jQuery(elem), value);\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (fn) {\n\t\t\t\tfor (; i < len; i++) {\n\t\t\t\t\tfn(\n\t\t\t\t\t\telems[i], key, raw ?\n\t\t\t\t\t\tvalue :\n\t\t\t\t\t\tvalue.call(elems[i], i, fn(elems[i], key))\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (chainable) {\n\t\t\treturn elems;\n\t\t}\n\n\t\t// Gets\n\t\tif (bulk) {\n\t\t\treturn fn.call(elems);\n\t\t}\n\n\t\treturn len ? fn(elems[0], key) : emptyGet;\n\t};\n\n\n\t// Matches dashed string for camelizing\n\tvar rmsPrefix = /^-ms-/,\n\t\trdashAlpha = /-([a-z])/g;\n\n\t// Used by camelCase as callback to replace()\n\tfunction fcamelCase(_all, letter) {\n\t\treturn letter.toUpperCase();\n\t}\n\n\t// Convert dashed to camelCase; used by the css and data modules\n\t// Support: IE <=9 - 11, Edge 12 - 15\n\t// Microsoft forgot to hump their vendor prefix (trac-9572)\n\tfunction camelCase(string) {\n\t\treturn string.replace(rmsPrefix, \"ms-\").replace(rdashAlpha, fcamelCase);\n\t}\n\tvar acceptData = function (owner) {\n\n\t\t// Accepts only:\n\t\t//  - Node\n\t\t//    - Node.ELEMENT_NODE\n\t\t//    - Node.DOCUMENT_NODE\n\t\t//  - Object\n\t\t//    - Any\n\t\treturn owner.nodeType === 1 || owner.nodeType === 9 || !(+owner.nodeType);\n\t};\n\n\n\n\n\tfunction Data() {\n\t\tthis.expando = jQuery.expando + Data.uid++;\n\t}\n\n\tData.uid = 1;\n\n\tData.prototype = {\n\n\t\tcache: function (owner) {\n\n\t\t\t// Check if the owner object already has a cache\n\t\t\tvar value = owner[this.expando];\n\n\t\t\t// If not, create one\n\t\t\tif (!value) {\n\t\t\t\tvalue = {};\n\n\t\t\t\t// We can accept data for non-element nodes in modern browsers,\n\t\t\t\t// but we should not, see trac-8335.\n\t\t\t\t// Always return an empty object.\n\t\t\t\tif (acceptData(owner)) {\n\n\t\t\t\t\t// If it is a node unlikely to be stringify-ed or looped over\n\t\t\t\t\t// use plain assignment\n\t\t\t\t\tif (owner.nodeType) {\n\t\t\t\t\t\towner[this.expando] = value;\n\n\t\t\t\t\t\t// Otherwise secure it in a non-enumerable property\n\t\t\t\t\t\t// configurable must be true to allow the property to be\n\t\t\t\t\t\t// deleted when data is removed\n\t\t\t\t\t} else {\n\t\t\t\t\t\tObject.defineProperty(owner, this.expando, {\n\t\t\t\t\t\t\tvalue: value,\n\t\t\t\t\t\t\tconfigurable: true\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn value;\n\t\t},\n\t\tset: function (owner, data, value) {\n\t\t\tvar prop,\n\t\t\t\tcache = this.cache(owner);\n\n\t\t\t// Handle: [ owner, key, value ] args\n\t\t\t// Always use camelCase key (gh-2257)\n\t\t\tif (typeof data === \"string\") {\n\t\t\t\tcache[camelCase(data)] = value;\n\n\t\t\t\t// Handle: [ owner, { properties } ] args\n\t\t\t} else {\n\n\t\t\t\t// Copy the properties one-by-one to the cache object\n\t\t\t\tfor (prop in data) {\n\t\t\t\t\tcache[camelCase(prop)] = data[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn cache;\n\t\t},\n\t\tget: function (owner, key) {\n\t\t\treturn key === undefined ?\n\t\t\t\tthis.cache(owner) :\n\n\t\t\t\t// Always use camelCase key (gh-2257)\n\t\t\t\towner[this.expando] && owner[this.expando][camelCase(key)];\n\t\t},\n\t\taccess: function (owner, key, value) {\n\n\t\t\t// In cases where either:\n\t\t\t//\n\t\t\t//   1. No key was specified\n\t\t\t//   2. A string key was specified, but no value provided\n\t\t\t//\n\t\t\t// Take the \"read\" path and allow the get method to determine\n\t\t\t// which value to return, respectively either:\n\t\t\t//\n\t\t\t//   1. The entire cache object\n\t\t\t//   2. The data stored at the key\n\t\t\t//\n\t\t\tif (key === undefined ||\n\t\t\t\t((key && typeof key === \"string\") && value === undefined)) {\n\n\t\t\t\treturn this.get(owner, key);\n\t\t\t}\n\n\t\t\t// When the key is not a string, or both a key and value\n\t\t\t// are specified, set or extend (existing objects) with either:\n\t\t\t//\n\t\t\t//   1. An object of properties\n\t\t\t//   2. A key and value\n\t\t\t//\n\t\t\tthis.set(owner, key, value);\n\n\t\t\t// Since the \"set\" path can have two possible entry points\n\t\t\t// return the expected data based on which path was taken[*]\n\t\t\treturn value !== undefined ? value : key;\n\t\t},\n\t\tremove: function (owner, key) {\n\t\t\tvar i,\n\t\t\t\tcache = owner[this.expando];\n\n\t\t\tif (cache === undefined) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (key !== undefined) {\n\n\t\t\t\t// Support array or space separated string of keys\n\t\t\t\tif (Array.isArray(key)) {\n\n\t\t\t\t\t// If key is an array of keys...\n\t\t\t\t\t// We always set camelCase keys, so remove that.\n\t\t\t\t\tkey = key.map(camelCase);\n\t\t\t\t} else {\n\t\t\t\t\tkey = camelCase(key);\n\n\t\t\t\t\t// If a key with the spaces exists, use it.\n\t\t\t\t\t// Otherwise, create an array by matching non-whitespace\n\t\t\t\t\tkey = key in cache ?\n\t\t\t\t\t\t[key] :\n\t\t\t\t\t\t(key.match(rnothtmlwhite) || []);\n\t\t\t\t}\n\n\t\t\t\ti = key.length;\n\n\t\t\t\twhile (i--) {\n\t\t\t\t\tdelete cache[key[i]];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove the expando if there's no more data\n\t\t\tif (key === undefined || jQuery.isEmptyObject(cache)) {\n\n\t\t\t\t// Support: Chrome <=35 - 45\n\t\t\t\t// Webkit & Blink performance suffers when deleting properties\n\t\t\t\t// from DOM nodes, so set to undefined instead\n\t\t\t\t// https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted)\n\t\t\t\tif (owner.nodeType) {\n\t\t\t\t\towner[this.expando] = undefined;\n\t\t\t\t} else {\n\t\t\t\t\tdelete owner[this.expando];\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\thasData: function (owner) {\n\t\t\tvar cache = owner[this.expando];\n\t\t\treturn cache !== undefined && !jQuery.isEmptyObject(cache);\n\t\t}\n\t};\n\tvar dataPriv = new Data();\n\n\tvar dataUser = new Data();\n\n\n\n\t//\tImplementation Summary\n\t//\n\t//\t1. Enforce API surface and semantic compatibility with 1.9.x branch\n\t//\t2. Improve the module's maintainability by reducing the storage\n\t//\t\tpaths to a single mechanism.\n\t//\t3. Use the same single mechanism to support \"private\" and \"user\" data.\n\t//\t4. _Never_ expose \"private\" data to user code (TODO: Drop _data, _removeData)\n\t//\t5. Avoid exposing implementation details on user objects (eg. expando properties)\n\t//\t6. Provide a clear path for implementation upgrade to WeakMap in 2014\n\n\tvar rbrace = /^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,\n\t\trmultiDash = /[A-Z]/g;\n\n\tfunction getData(data) {\n\t\tif (data === \"true\") {\n\t\t\treturn true;\n\t\t}\n\n\t\tif (data === \"false\") {\n\t\t\treturn false;\n\t\t}\n\n\t\tif (data === \"null\") {\n\t\t\treturn null;\n\t\t}\n\n\t\t// Only convert to a number if it doesn't change the string\n\t\tif (data === +data + \"\") {\n\t\t\treturn +data;\n\t\t}\n\n\t\tif (rbrace.test(data)) {\n\t\t\treturn JSON.parse(data);\n\t\t}\n\n\t\treturn data;\n\t}\n\n\tfunction dataAttr(elem, key, data) {\n\t\tvar name;\n\n\t\t// If nothing was found internally, try to fetch any\n\t\t// data from the HTML5 data-* attribute\n\t\tif (data === undefined && elem.nodeType === 1) {\n\t\t\tname = \"data-\" + key.replace(rmultiDash, \"-$&\").toLowerCase();\n\t\t\tdata = elem.getAttribute(name);\n\n\t\t\tif (typeof data === \"string\") {\n\t\t\t\ttry {\n\t\t\t\t\tdata = getData(data);\n\t\t\t\t} catch (e) { }\n\n\t\t\t\t// Make sure we set the data so it isn't changed later\n\t\t\t\tdataUser.set(elem, key, data);\n\t\t\t} else {\n\t\t\t\tdata = undefined;\n\t\t\t}\n\t\t}\n\t\treturn data;\n\t}\n\n\tjQuery.extend({\n\t\thasData: function (elem) {\n\t\t\treturn dataUser.hasData(elem) || dataPriv.hasData(elem);\n\t\t},\n\n\t\tdata: function (elem, name, data) {\n\t\t\treturn dataUser.access(elem, name, data);\n\t\t},\n\n\t\tremoveData: function (elem, name) {\n\t\t\tdataUser.remove(elem, name);\n\t\t},\n\n\t\t// TODO: Now that all calls to _data and _removeData have been replaced\n\t\t// with direct calls to dataPriv methods, these can be deprecated.\n\t\t_data: function (elem, name, data) {\n\t\t\treturn dataPriv.access(elem, name, data);\n\t\t},\n\n\t\t_removeData: function (elem, name) {\n\t\t\tdataPriv.remove(elem, name);\n\t\t}\n\t});\n\n\tjQuery.fn.extend({\n\t\tdata: function (key, value) {\n\t\t\tvar i, name, data,\n\t\t\t\telem = this[0],\n\t\t\t\tattrs = elem && elem.attributes;\n\n\t\t\t// Gets all values\n\t\t\tif (key === undefined) {\n\t\t\t\tif (this.length) {\n\t\t\t\t\tdata = dataUser.get(elem);\n\n\t\t\t\t\tif (elem.nodeType === 1 && !dataPriv.get(elem, \"hasDataAttrs\")) {\n\t\t\t\t\t\ti = attrs.length;\n\t\t\t\t\t\twhile (i--) {\n\n\t\t\t\t\t\t\t// Support: IE 11 only\n\t\t\t\t\t\t\t// The attrs elements can be null (trac-14894)\n\t\t\t\t\t\t\tif (attrs[i]) {\n\t\t\t\t\t\t\t\tname = attrs[i].name;\n\t\t\t\t\t\t\t\tif (name.indexOf(\"data-\") === 0) {\n\t\t\t\t\t\t\t\t\tname = camelCase(name.slice(5));\n\t\t\t\t\t\t\t\t\tdataAttr(elem, name, data[name]);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdataPriv.set(elem, \"hasDataAttrs\", true);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn data;\n\t\t\t}\n\n\t\t\t// Sets multiple values\n\t\t\tif (typeof key === \"object\") {\n\t\t\t\treturn this.each(function () {\n\t\t\t\t\tdataUser.set(this, key);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn access(this, function (value) {\n\t\t\t\tvar data;\n\n\t\t\t\t// The calling jQuery object (element matches) is not empty\n\t\t\t\t// (and therefore has an element appears at this[ 0 ]) and the\n\t\t\t\t// `value` parameter was not undefined. An empty jQuery object\n\t\t\t\t// will result in `undefined` for elem = this[ 0 ] which will\n\t\t\t\t// throw an exception if an attempt to read a data cache is made.\n\t\t\t\tif (elem && value === undefined) {\n\n\t\t\t\t\t// Attempt to get data from the cache\n\t\t\t\t\t// The key will always be camelCased in Data\n\t\t\t\t\tdata = dataUser.get(elem, key);\n\t\t\t\t\tif (data !== undefined) {\n\t\t\t\t\t\treturn data;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Attempt to \"discover\" the data in\n\t\t\t\t\t// HTML5 custom data-* attrs\n\t\t\t\t\tdata = dataAttr(elem, key);\n\t\t\t\t\tif (data !== undefined) {\n\t\t\t\t\t\treturn data;\n\t\t\t\t\t}\n\n\t\t\t\t\t// We tried really hard, but the data doesn't exist.\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Set the data...\n\t\t\t\tthis.each(function () {\n\n\t\t\t\t\t// We always store the camelCased key\n\t\t\t\t\tdataUser.set(this, key, value);\n\t\t\t\t});\n\t\t\t}, null, value, arguments.length > 1, null, true);\n\t\t},\n\n\t\tremoveData: function (key) {\n\t\t\treturn this.each(function () {\n\t\t\t\tdataUser.remove(this, key);\n\t\t\t});\n\t\t}\n\t});\n\n\n\tjQuery.extend({\n\t\tqueue: function (elem, type, data) {\n\t\t\tvar queue;\n\n\t\t\tif (elem) {\n\t\t\t\ttype = (type || \"fx\") + \"queue\";\n\t\t\t\tqueue = dataPriv.get(elem, type);\n\n\t\t\t\t// Speed up dequeue by getting out quickly if this is just a lookup\n\t\t\t\tif (data) {\n\t\t\t\t\tif (!queue || Array.isArray(data)) {\n\t\t\t\t\t\tqueue = dataPriv.access(elem, type, jQuery.makeArray(data));\n\t\t\t\t\t} else {\n\t\t\t\t\t\tqueue.push(data);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn queue || [];\n\t\t\t}\n\t\t},\n\n\t\tdequeue: function (elem, type) {\n\t\t\ttype = type || \"fx\";\n\n\t\t\tvar queue = jQuery.queue(elem, type),\n\t\t\t\tstartLength = queue.length,\n\t\t\t\tfn = queue.shift(),\n\t\t\t\thooks = jQuery._queueHooks(elem, type),\n\t\t\t\tnext = function () {\n\t\t\t\t\tjQuery.dequeue(elem, type);\n\t\t\t\t};\n\n\t\t\t// If the fx queue is dequeued, always remove the progress sentinel\n\t\t\tif (fn === \"inprogress\") {\n\t\t\t\tfn = queue.shift();\n\t\t\t\tstartLength--;\n\t\t\t}\n\n\t\t\tif (fn) {\n\n\t\t\t\t// Add a progress sentinel to prevent the fx queue from being\n\t\t\t\t// automatically dequeued\n\t\t\t\tif (type === \"fx\") {\n\t\t\t\t\tqueue.unshift(\"inprogress\");\n\t\t\t\t}\n\n\t\t\t\t// Clear up the last queue stop function\n\t\t\t\tdelete hooks.stop;\n\t\t\t\tfn.call(elem, next, hooks);\n\t\t\t}\n\n\t\t\tif (!startLength && hooks) {\n\t\t\t\thooks.empty.fire();\n\t\t\t}\n\t\t},\n\n\t\t// Not public - generate a queueHooks object, or return the current one\n\t\t_queueHooks: function (elem, type) {\n\t\t\tvar key = type + \"queueHooks\";\n\t\t\treturn dataPriv.get(elem, key) || dataPriv.access(elem, key, {\n\t\t\t\tempty: jQuery.Callbacks(\"once memory\").add(function () {\n\t\t\t\t\tdataPriv.remove(elem, [type + \"queue\", key]);\n\t\t\t\t})\n\t\t\t});\n\t\t}\n\t});\n\n\tjQuery.fn.extend({\n\t\tqueue: function (type, data) {\n\t\t\tvar setter = 2;\n\n\t\t\tif (typeof type !== \"string\") {\n\t\t\t\tdata = type;\n\t\t\t\ttype = \"fx\";\n\t\t\t\tsetter--;\n\t\t\t}\n\n\t\t\tif (arguments.length < setter) {\n\t\t\t\treturn jQuery.queue(this[0], type);\n\t\t\t}\n\n\t\t\treturn data === undefined ?\n\t\t\t\tthis :\n\t\t\t\tthis.each(function () {\n\t\t\t\t\tvar queue = jQuery.queue(this, type, data);\n\n\t\t\t\t\t// Ensure a hooks for this queue\n\t\t\t\t\tjQuery._queueHooks(this, type);\n\n\t\t\t\t\tif (type === \"fx\" && queue[0] !== \"inprogress\") {\n\t\t\t\t\t\tjQuery.dequeue(this, type);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t},\n\t\tdequeue: function (type) {\n\t\t\treturn this.each(function () {\n\t\t\t\tjQuery.dequeue(this, type);\n\t\t\t});\n\t\t},\n\t\tclearQueue: function (type) {\n\t\t\treturn this.queue(type || \"fx\", []);\n\t\t},\n\n\t\t// Get a promise resolved when queues of a certain type\n\t\t// are emptied (fx is the type by default)\n\t\tpromise: function (type, obj) {\n\t\t\tvar tmp,\n\t\t\t\tcount = 1,\n\t\t\t\tdefer = jQuery.Deferred(),\n\t\t\t\telements = this,\n\t\t\t\ti = this.length,\n\t\t\t\tresolve = function () {\n\t\t\t\t\tif (!(--count)) {\n\t\t\t\t\t\tdefer.resolveWith(elements, [elements]);\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\tif (typeof type !== \"string\") {\n\t\t\t\tobj = type;\n\t\t\t\ttype = undefined;\n\t\t\t}\n\t\t\ttype = type || \"fx\";\n\n\t\t\twhile (i--) {\n\t\t\t\ttmp = dataPriv.get(elements[i], type + \"queueHooks\");\n\t\t\t\tif (tmp && tmp.empty) {\n\t\t\t\t\tcount++;\n\t\t\t\t\ttmp.empty.add(resolve);\n\t\t\t\t}\n\t\t\t}\n\t\t\tresolve();\n\t\t\treturn defer.promise(obj);\n\t\t}\n\t});\n\tvar pnum = (/[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/).source;\n\n\tvar rcssNum = new RegExp(\"^(?:([+-])=|)(\" + pnum + \")([a-z%]*)$\", \"i\");\n\n\n\tvar cssExpand = [\"Top\", \"Right\", \"Bottom\", \"Left\"];\n\n\tvar documentElement = document.documentElement;\n\n\n\n\tvar isAttached = function (elem) {\n\t\treturn jQuery.contains(elem.ownerDocument, elem);\n\t},\n\t\tcomposed = { composed: true };\n\n\t// Support: IE 9 - 11+, Edge 12 - 18+, iOS 10.0 - 10.2 only\n\t// Check attachment across shadow DOM boundaries when possible (gh-3504)\n\t// Support: iOS 10.0-10.2 only\n\t// Early iOS 10 versions support `attachShadow` but not `getRootNode`,\n\t// leading to errors. We need to check for `getRootNode`.\n\tif (documentElement.getRootNode) {\n\t\tisAttached = function (elem) {\n\t\t\treturn jQuery.contains(elem.ownerDocument, elem) ||\n\t\t\t\telem.getRootNode(composed) === elem.ownerDocument;\n\t\t};\n\t}\n\tvar isHiddenWithinTree = function (elem, el) {\n\n\t\t// isHiddenWithinTree might be called from jQuery#filter function;\n\t\t// in that case, element will be second argument\n\t\telem = el || elem;\n\n\t\t// Inline style trumps all\n\t\treturn elem.style.display === \"none\" ||\n\t\t\telem.style.display === \"\" &&\n\n\t\t\t// Otherwise, check computed style\n\t\t\t// Support: Firefox <=43 - 45\n\t\t\t// Disconnected elements can have computed display: none, so first confirm that elem is\n\t\t\t// in the document.\n\t\t\tisAttached(elem) &&\n\n\t\t\tjQuery.css(elem, \"display\") === \"none\";\n\t};\n\n\n\n\tfunction adjustCSS(elem, prop, valueParts, tween) {\n\t\tvar adjusted, scale,\n\t\t\tmaxIterations = 20,\n\t\t\tcurrentValue = tween ?\n\t\t\t\tfunction () {\n\t\t\t\t\treturn tween.cur();\n\t\t\t\t} :\n\t\t\t\tfunction () {\n\t\t\t\t\treturn jQuery.css(elem, prop, \"\");\n\t\t\t\t},\n\t\t\tinitial = currentValue(),\n\t\t\tunit = valueParts && valueParts[3] || (jQuery.cssNumber[prop] ? \"\" : \"px\"),\n\n\t\t\t// Starting value computation is required for potential unit mismatches\n\t\t\tinitialInUnit = elem.nodeType &&\n\t\t\t\t(jQuery.cssNumber[prop] || unit !== \"px\" && +initial) &&\n\t\t\t\trcssNum.exec(jQuery.css(elem, prop));\n\n\t\tif (initialInUnit && initialInUnit[3] !== unit) {\n\n\t\t\t// Support: Firefox <=54\n\t\t\t// Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144)\n\t\t\tinitial = initial / 2;\n\n\t\t\t// Trust units reported by jQuery.css\n\t\t\tunit = unit || initialInUnit[3];\n\n\t\t\t// Iteratively approximate from a nonzero starting point\n\t\t\tinitialInUnit = +initial || 1;\n\n\t\t\twhile (maxIterations--) {\n\n\t\t\t\t// Evaluate and update our best guess (doubling guesses that zero out).\n\t\t\t\t// Finish if the scale equals or crosses 1 (making the old*new product non-positive).\n\t\t\t\tjQuery.style(elem, prop, initialInUnit + unit);\n\t\t\t\tif ((1 - scale) * (1 - (scale = currentValue() / initial || 0.5)) <= 0) {\n\t\t\t\t\tmaxIterations = 0;\n\t\t\t\t}\n\t\t\t\tinitialInUnit = initialInUnit / scale;\n\n\t\t\t}\n\n\t\t\tinitialInUnit = initialInUnit * 2;\n\t\t\tjQuery.style(elem, prop, initialInUnit + unit);\n\n\t\t\t// Make sure we update the tween properties later on\n\t\t\tvalueParts = valueParts || [];\n\t\t}\n\n\t\tif (valueParts) {\n\t\t\tinitialInUnit = +initialInUnit || +initial || 0;\n\n\t\t\t// Apply relative offset (+=/-=) if specified\n\t\t\tadjusted = valueParts[1] ?\n\t\t\t\tinitialInUnit + (valueParts[1] + 1) * valueParts[2] :\n\t\t\t\t+valueParts[2];\n\t\t\tif (tween) {\n\t\t\t\ttween.unit = unit;\n\t\t\t\ttween.start = initialInUnit;\n\t\t\t\ttween.end = adjusted;\n\t\t\t}\n\t\t}\n\t\treturn adjusted;\n\t}\n\n\n\tvar defaultDisplayMap = {};\n\n\tfunction getDefaultDisplay(elem) {\n\t\tvar temp,\n\t\t\tdoc = elem.ownerDocument,\n\t\t\tnodeName = elem.nodeName,\n\t\t\tdisplay = defaultDisplayMap[nodeName];\n\n\t\tif (display) {\n\t\t\treturn display;\n\t\t}\n\n\t\ttemp = doc.body.appendChild(doc.createElement(nodeName));\n\t\tdisplay = jQuery.css(temp, \"display\");\n\n\t\ttemp.parentNode.removeChild(temp);\n\n\t\tif (display === \"none\") {\n\t\t\tdisplay = \"block\";\n\t\t}\n\t\tdefaultDisplayMap[nodeName] = display;\n\n\t\treturn display;\n\t}\n\n\tfunction showHide(elements, show) {\n\t\tvar display, elem,\n\t\t\tvalues = [],\n\t\t\tindex = 0,\n\t\t\tlength = elements.length;\n\n\t\t// Determine new display value for elements that need to change\n\t\tfor (; index < length; index++) {\n\t\t\telem = elements[index];\n\t\t\tif (!elem.style) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tdisplay = elem.style.display;\n\t\t\tif (show) {\n\n\t\t\t\t// Since we force visibility upon cascade-hidden elements, an immediate (and slow)\n\t\t\t\t// check is required in this first loop unless we have a nonempty display value (either\n\t\t\t\t// inline or about-to-be-restored)\n\t\t\t\tif (display === \"none\") {\n\t\t\t\t\tvalues[index] = dataPriv.get(elem, \"display\") || null;\n\t\t\t\t\tif (!values[index]) {\n\t\t\t\t\t\telem.style.display = \"\";\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (elem.style.display === \"\" && isHiddenWithinTree(elem)) {\n\t\t\t\t\tvalues[index] = getDefaultDisplay(elem);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (display !== \"none\") {\n\t\t\t\t\tvalues[index] = \"none\";\n\n\t\t\t\t\t// Remember what we're overwriting\n\t\t\t\t\tdataPriv.set(elem, \"display\", display);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Set the display of the elements in a second loop to avoid constant reflow\n\t\tfor (index = 0; index < length; index++) {\n\t\t\tif (values[index] != null) {\n\t\t\t\telements[index].style.display = values[index];\n\t\t\t}\n\t\t}\n\n\t\treturn elements;\n\t}\n\n\tjQuery.fn.extend({\n\t\tshow: function () {\n\t\t\treturn showHide(this, true);\n\t\t},\n\t\thide: function () {\n\t\t\treturn showHide(this);\n\t\t},\n\t\ttoggle: function (state) {\n\t\t\tif (typeof state === \"boolean\") {\n\t\t\t\treturn state ? this.show() : this.hide();\n\t\t\t}\n\n\t\t\treturn this.each(function () {\n\t\t\t\tif (isHiddenWithinTree(this)) {\n\t\t\t\t\tjQuery(this).show();\n\t\t\t\t} else {\n\t\t\t\t\tjQuery(this).hide();\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t});\n\tvar rcheckableType = (/^(?:checkbox|radio)$/i);\n\n\tvar rtagName = (/<([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]*)/i);\n\n\tvar rscriptType = (/^$|^module$|\\/(?:java|ecma)script/i);\n\n\n\n\t(function () {\n\t\tvar fragment = document.createDocumentFragment(),\n\t\t\tdiv = fragment.appendChild(document.createElement(\"div\")),\n\t\t\tinput = document.createElement(\"input\");\n\n\t\t// Support: Android 4.0 - 4.3 only\n\t\t// Check state lost if the name is set (trac-11217)\n\t\t// Support: Windows Web Apps (WWA)\n\t\t// `name` and `type` must use .setAttribute for WWA (trac-14901)\n\t\tinput.setAttribute(\"type\", \"radio\");\n\t\tinput.setAttribute(\"checked\", \"checked\");\n\t\tinput.setAttribute(\"name\", \"t\");\n\n\t\tdiv.appendChild(input);\n\n\t\t// Support: Android <=4.1 only\n\t\t// Older WebKit doesn't clone checked state correctly in fragments\n\t\tsupport.checkClone = div.cloneNode(true).cloneNode(true).lastChild.checked;\n\n\t\t// Support: IE <=11 only\n\t\t// Make sure textarea (and checkbox) defaultValue is properly cloned\n\t\tdiv.innerHTML = \"<textarea>x</textarea>\";\n\t\tsupport.noCloneChecked = !!div.cloneNode(true).lastChild.defaultValue;\n\n\t\t// Support: IE <=9 only\n\t\t// IE <=9 replaces <option> tags with their contents when inserted outside of\n\t\t// the select element.\n\t\tdiv.innerHTML = \"<option></option>\";\n\t\tsupport.option = !!div.lastChild;\n\t})();\n\n\n\t// We have to close these tags to support XHTML (trac-13200)\n\tvar wrapMap = {\n\n\t\t// XHTML parsers do not magically insert elements in the\n\t\t// same way that tag soup parsers do. So we cannot shorten\n\t\t// this by omitting <tbody> or other required elements.\n\t\tthead: [1, \"<table>\", \"</table>\"],\n\t\tcol: [2, \"<table><colgroup>\", \"</colgroup></table>\"],\n\t\ttr: [2, \"<table><tbody>\", \"</tbody></table>\"],\n\t\ttd: [3, \"<table><tbody><tr>\", \"</tr></tbody></table>\"],\n\n\t\t_default: [0, \"\", \"\"]\n\t};\n\n\twrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;\n\twrapMap.th = wrapMap.td;\n\n\t// Support: IE <=9 only\n\tif (!support.option) {\n\t\twrapMap.optgroup = wrapMap.option = [1, \"<select multiple='multiple'>\", \"</select>\"];\n\t}\n\n\n\tfunction getAll(context, tag) {\n\n\t\t// Support: IE <=9 - 11 only\n\t\t// Use typeof to avoid zero-argument method invocation on host objects (trac-15151)\n\t\tvar ret;\n\n\t\tif (typeof context.getElementsByTagName !== \"undefined\") {\n\t\t\tret = context.getElementsByTagName(tag || \"*\");\n\n\t\t} else if (typeof context.querySelectorAll !== \"undefined\") {\n\t\t\tret = context.querySelectorAll(tag || \"*\");\n\n\t\t} else {\n\t\t\tret = [];\n\t\t}\n\n\t\tif (tag === undefined || tag && nodeName(context, tag)) {\n\t\t\treturn jQuery.merge([context], ret);\n\t\t}\n\n\t\treturn ret;\n\t}\n\n\n\t// Mark scripts as having already been evaluated\n\tfunction setGlobalEval(elems, refElements) {\n\t\tvar i = 0,\n\t\t\tl = elems.length;\n\n\t\tfor (; i < l; i++) {\n\t\t\tdataPriv.set(\n\t\t\t\telems[i],\n\t\t\t\t\"globalEval\",\n\t\t\t\t!refElements || dataPriv.get(refElements[i], \"globalEval\")\n\t\t\t);\n\t\t}\n\t}\n\n\n\tvar rhtml = /<|&#?\\w+;/;\n\n\tfunction buildFragment(elems, context, scripts, selection, ignored) {\n\t\tvar elem, tmp, tag, wrap, attached, j,\n\t\t\tfragment = context.createDocumentFragment(),\n\t\t\tnodes = [],\n\t\t\ti = 0,\n\t\t\tl = elems.length;\n\n\t\tfor (; i < l; i++) {\n\t\t\telem = elems[i];\n\n\t\t\tif (elem || elem === 0) {\n\n\t\t\t\t// Add nodes directly\n\t\t\t\tif (toType(elem) === \"object\") {\n\n\t\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\t\tjQuery.merge(nodes, elem.nodeType ? [elem] : elem);\n\n\t\t\t\t\t// Convert non-html into a text node\n\t\t\t\t} else if (!rhtml.test(elem)) {\n\t\t\t\t\tnodes.push(context.createTextNode(elem));\n\n\t\t\t\t\t// Convert html into DOM nodes\n\t\t\t\t} else {\n\t\t\t\t\ttmp = tmp || fragment.appendChild(context.createElement(\"div\"));\n\n\t\t\t\t\t// Deserialize a standard representation\n\t\t\t\t\ttag = (rtagName.exec(elem) || [\"\", \"\"])[1].toLowerCase();\n\t\t\t\t\twrap = wrapMap[tag] || wrapMap._default;\n\t\t\t\t\ttmp.innerHTML = wrap[1] + jQuery.htmlPrefilter(elem) + wrap[2];\n\n\t\t\t\t\t// Descend through wrappers to the right content\n\t\t\t\t\tj = wrap[0];\n\t\t\t\t\twhile (j--) {\n\t\t\t\t\t\ttmp = tmp.lastChild;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\t\tjQuery.merge(nodes, tmp.childNodes);\n\n\t\t\t\t\t// Remember the top-level container\n\t\t\t\t\ttmp = fragment.firstChild;\n\n\t\t\t\t\t// Ensure the created nodes are orphaned (trac-12392)\n\t\t\t\t\ttmp.textContent = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Remove wrapper from fragment\n\t\tfragment.textContent = \"\";\n\n\t\ti = 0;\n\t\twhile ((elem = nodes[i++])) {\n\n\t\t\t// Skip elements already in the context collection (trac-4087)\n\t\t\tif (selection && jQuery.inArray(elem, selection) > -1) {\n\t\t\t\tif (ignored) {\n\t\t\t\t\tignored.push(elem);\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tattached = isAttached(elem);\n\n\t\t\t// Append to fragment\n\t\t\ttmp = getAll(fragment.appendChild(elem), \"script\");\n\n\t\t\t// Preserve script evaluation history\n\t\t\tif (attached) {\n\t\t\t\tsetGlobalEval(tmp);\n\t\t\t}\n\n\t\t\t// Capture executables\n\t\t\tif (scripts) {\n\t\t\t\tj = 0;\n\t\t\t\twhile ((elem = tmp[j++])) {\n\t\t\t\t\tif (rscriptType.test(elem.type || \"\")) {\n\t\t\t\t\t\tscripts.push(elem);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn fragment;\n\t}\n\n\n\tvar rtypenamespace = /^([^.]*)(?:\\.(.+)|)/;\n\n\tfunction returnTrue() {\n\t\treturn true;\n\t}\n\n\tfunction returnFalse() {\n\t\treturn false;\n\t}\n\n\tfunction on(elem, types, selector, data, fn, one) {\n\t\tvar origFn, type;\n\n\t\t// Types can be a map of types/handlers\n\t\tif (typeof types === \"object\") {\n\n\t\t\t// ( types-Object, selector, data )\n\t\t\tif (typeof selector !== \"string\") {\n\n\t\t\t\t// ( types-Object, data )\n\t\t\t\tdata = data || selector;\n\t\t\t\tselector = undefined;\n\t\t\t}\n\t\t\tfor (type in types) {\n\t\t\t\ton(elem, type, selector, data, types[type], one);\n\t\t\t}\n\t\t\treturn elem;\n\t\t}\n\n\t\tif (data == null && fn == null) {\n\n\t\t\t// ( types, fn )\n\t\t\tfn = selector;\n\t\t\tdata = selector = undefined;\n\t\t} else if (fn == null) {\n\t\t\tif (typeof selector === \"string\") {\n\n\t\t\t\t// ( types, selector, fn )\n\t\t\t\tfn = data;\n\t\t\t\tdata = undefined;\n\t\t\t} else {\n\n\t\t\t\t// ( types, data, fn )\n\t\t\t\tfn = data;\n\t\t\t\tdata = selector;\n\t\t\t\tselector = undefined;\n\t\t\t}\n\t\t}\n\t\tif (fn === false) {\n\t\t\tfn = returnFalse;\n\t\t} else if (!fn) {\n\t\t\treturn elem;\n\t\t}\n\n\t\tif (one === 1) {\n\t\t\torigFn = fn;\n\t\t\tfn = function (event) {\n\n\t\t\t\t// Can use an empty set, since event contains the info\n\t\t\t\tjQuery().off(event);\n\t\t\t\treturn origFn.apply(this, arguments);\n\t\t\t};\n\n\t\t\t// Use same guid so caller can remove using origFn\n\t\t\tfn.guid = origFn.guid || (origFn.guid = jQuery.guid++);\n\t\t}\n\t\treturn elem.each(function () {\n\t\t\tjQuery.event.add(this, types, fn, data, selector);\n\t\t});\n\t}\n\n\t/*\n\t * Helper functions for managing events -- not part of the public interface.\n\t * Props to Dean Edwards' addEvent library for many of the ideas.\n\t */\n\tjQuery.event = {\n\n\t\tglobal: {},\n\n\t\tadd: function (elem, types, handler, data, selector) {\n\n\t\t\tvar handleObjIn, eventHandle, tmp,\n\t\t\t\tevents, t, handleObj,\n\t\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\t\telemData = dataPriv.get(elem);\n\n\t\t\t// Only attach events to objects that accept data\n\t\t\tif (!acceptData(elem)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Caller can pass in an object of custom data in lieu of the handler\n\t\t\tif (handler.handler) {\n\t\t\t\thandleObjIn = handler;\n\t\t\t\thandler = handleObjIn.handler;\n\t\t\t\tselector = handleObjIn.selector;\n\t\t\t}\n\n\t\t\t// Ensure that invalid selectors throw exceptions at attach time\n\t\t\t// Evaluate against documentElement in case elem is a non-element node (e.g., document)\n\t\t\tif (selector) {\n\t\t\t\tjQuery.find.matchesSelector(documentElement, selector);\n\t\t\t}\n\n\t\t\t// Make sure that the handler has a unique ID, used to find/remove it later\n\t\t\tif (!handler.guid) {\n\t\t\t\thandler.guid = jQuery.guid++;\n\t\t\t}\n\n\t\t\t// Init the element's event structure and main handler, if this is the first\n\t\t\tif (!(events = elemData.events)) {\n\t\t\t\tevents = elemData.events = Object.create(null);\n\t\t\t}\n\t\t\tif (!(eventHandle = elemData.handle)) {\n\t\t\t\teventHandle = elemData.handle = function (e) {\n\n\t\t\t\t\t// Discard the second event of a jQuery.event.trigger() and\n\t\t\t\t\t// when an event is called after a page has unloaded\n\t\t\t\t\treturn typeof jQuery !== \"undefined\" && jQuery.event.triggered !== e.type ?\n\t\t\t\t\t\tjQuery.event.dispatch.apply(elem, arguments) : undefined;\n\t\t\t\t};\n\t\t\t}\n\n\t\t\t// Handle multiple events separated by a space\n\t\t\ttypes = (types || \"\").match(rnothtmlwhite) || [\"\"];\n\t\t\tt = types.length;\n\t\t\twhile (t--) {\n\t\t\t\ttmp = rtypenamespace.exec(types[t]) || [];\n\t\t\t\ttype = origType = tmp[1];\n\t\t\t\tnamespaces = (tmp[2] || \"\").split(\".\").sort();\n\n\t\t\t\t// There *must* be a type, no attaching namespace-only handlers\n\t\t\t\tif (!type) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// If event changes its type, use the special event handlers for the changed type\n\t\t\t\tspecial = jQuery.event.special[type] || {};\n\n\t\t\t\t// If selector defined, determine special event api type, otherwise given type\n\t\t\t\ttype = (selector ? special.delegateType : special.bindType) || type;\n\n\t\t\t\t// Update special based on newly reset type\n\t\t\t\tspecial = jQuery.event.special[type] || {};\n\n\t\t\t\t// handleObj is passed to all event handlers\n\t\t\t\thandleObj = jQuery.extend({\n\t\t\t\t\ttype: type,\n\t\t\t\t\torigType: origType,\n\t\t\t\t\tdata: data,\n\t\t\t\t\thandler: handler,\n\t\t\t\t\tguid: handler.guid,\n\t\t\t\t\tselector: selector,\n\t\t\t\t\tneedsContext: selector && jQuery.expr.match.needsContext.test(selector),\n\t\t\t\t\tnamespace: namespaces.join(\".\")\n\t\t\t\t}, handleObjIn);\n\n\t\t\t\t// Init the event handler queue if we're the first\n\t\t\t\tif (!(handlers = events[type])) {\n\t\t\t\t\thandlers = events[type] = [];\n\t\t\t\t\thandlers.delegateCount = 0;\n\n\t\t\t\t\t// Only use addEventListener if the special events handler returns false\n\t\t\t\t\tif (!special.setup ||\n\t\t\t\t\t\tspecial.setup.call(elem, data, namespaces, eventHandle) === false) {\n\n\t\t\t\t\t\tif (elem.addEventListener) {\n\t\t\t\t\t\t\telem.addEventListener(type, eventHandle);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (special.add) {\n\t\t\t\t\tspecial.add.call(elem, handleObj);\n\n\t\t\t\t\tif (!handleObj.handler.guid) {\n\t\t\t\t\t\thandleObj.handler.guid = handler.guid;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Add to the element's handler list, delegates in front\n\t\t\t\tif (selector) {\n\t\t\t\t\thandlers.splice(handlers.delegateCount++, 0, handleObj);\n\t\t\t\t} else {\n\t\t\t\t\thandlers.push(handleObj);\n\t\t\t\t}\n\n\t\t\t\t// Keep track of which events have ever been used, for event optimization\n\t\t\t\tjQuery.event.global[type] = true;\n\t\t\t}\n\n\t\t},\n\n\t\t// Detach an event or set of events from an element\n\t\tremove: function (elem, types, handler, selector, mappedTypes) {\n\n\t\t\tvar j, origCount, tmp,\n\t\t\t\tevents, t, handleObj,\n\t\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\t\telemData = dataPriv.hasData(elem) && dataPriv.get(elem);\n\n\t\t\tif (!elemData || !(events = elemData.events)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Once for each type.namespace in types; type may be omitted\n\t\t\ttypes = (types || \"\").match(rnothtmlwhite) || [\"\"];\n\t\t\tt = types.length;\n\t\t\twhile (t--) {\n\t\t\t\ttmp = rtypenamespace.exec(types[t]) || [];\n\t\t\t\ttype = origType = tmp[1];\n\t\t\t\tnamespaces = (tmp[2] || \"\").split(\".\").sort();\n\n\t\t\t\t// Unbind all events (on this namespace, if provided) for the element\n\t\t\t\tif (!type) {\n\t\t\t\t\tfor (type in events) {\n\t\t\t\t\t\tjQuery.event.remove(elem, type + types[t], handler, selector, true);\n\t\t\t\t\t}\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tspecial = jQuery.event.special[type] || {};\n\t\t\t\ttype = (selector ? special.delegateType : special.bindType) || type;\n\t\t\t\thandlers = events[type] || [];\n\t\t\t\ttmp = tmp[2] &&\n\t\t\t\t\tnew RegExp(\"(^|\\\\.)\" + namespaces.join(\"\\\\.(?:.*\\\\.|)\") + \"(\\\\.|$)\");\n\n\t\t\t\t// Remove matching events\n\t\t\t\torigCount = j = handlers.length;\n\t\t\t\twhile (j--) {\n\t\t\t\t\thandleObj = handlers[j];\n\n\t\t\t\t\tif ((mappedTypes || origType === handleObj.origType) &&\n\t\t\t\t\t\t(!handler || handler.guid === handleObj.guid) &&\n\t\t\t\t\t\t(!tmp || tmp.test(handleObj.namespace)) &&\n\t\t\t\t\t\t(!selector || selector === handleObj.selector ||\n\t\t\t\t\t\t\tselector === \"**\" && handleObj.selector)) {\n\t\t\t\t\t\thandlers.splice(j, 1);\n\n\t\t\t\t\t\tif (handleObj.selector) {\n\t\t\t\t\t\t\thandlers.delegateCount--;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (special.remove) {\n\t\t\t\t\t\t\tspecial.remove.call(elem, handleObj);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Remove generic event handler if we removed something and no more handlers exist\n\t\t\t\t// (avoids potential for endless recursion during removal of special event handlers)\n\t\t\t\tif (origCount && !handlers.length) {\n\t\t\t\t\tif (!special.teardown ||\n\t\t\t\t\t\tspecial.teardown.call(elem, namespaces, elemData.handle) === false) {\n\n\t\t\t\t\t\tjQuery.removeEvent(elem, type, elemData.handle);\n\t\t\t\t\t}\n\n\t\t\t\t\tdelete events[type];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove data and the expando if it's no longer used\n\t\t\tif (jQuery.isEmptyObject(events)) {\n\t\t\t\tdataPriv.remove(elem, \"handle events\");\n\t\t\t}\n\t\t},\n\n\t\tdispatch: function (nativeEvent) {\n\n\t\t\tvar i, j, ret, matched, handleObj, handlerQueue,\n\t\t\t\targs = new Array(arguments.length),\n\n\t\t\t\t// Make a writable jQuery.Event from the native event object\n\t\t\t\tevent = jQuery.event.fix(nativeEvent),\n\n\t\t\t\thandlers = (\n\t\t\t\t\tdataPriv.get(this, \"events\") || Object.create(null)\n\t\t\t\t)[event.type] || [],\n\t\t\t\tspecial = jQuery.event.special[event.type] || {};\n\n\t\t\t// Use the fix-ed jQuery.Event rather than the (read-only) native event\n\t\t\targs[0] = event;\n\n\t\t\tfor (i = 1; i < arguments.length; i++) {\n\t\t\t\targs[i] = arguments[i];\n\t\t\t}\n\n\t\t\tevent.delegateTarget = this;\n\n\t\t\t// Call the preDispatch hook for the mapped type, and let it bail if desired\n\t\t\tif (special.preDispatch && special.preDispatch.call(this, event) === false) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Determine handlers\n\t\t\thandlerQueue = jQuery.event.handlers.call(this, event, handlers);\n\n\t\t\t// Run delegates first; they may want to stop propagation beneath us\n\t\t\ti = 0;\n\t\t\twhile ((matched = handlerQueue[i++]) && !event.isPropagationStopped()) {\n\t\t\t\tevent.currentTarget = matched.elem;\n\n\t\t\t\tj = 0;\n\t\t\t\twhile ((handleObj = matched.handlers[j++]) &&\n\t\t\t\t\t!event.isImmediatePropagationStopped()) {\n\n\t\t\t\t\t// If the event is namespaced, then each handler is only invoked if it is\n\t\t\t\t\t// specially universal or its namespaces are a superset of the event's.\n\t\t\t\t\tif (!event.rnamespace || handleObj.namespace === false ||\n\t\t\t\t\t\tevent.rnamespace.test(handleObj.namespace)) {\n\n\t\t\t\t\t\tevent.handleObj = handleObj;\n\t\t\t\t\t\tevent.data = handleObj.data;\n\n\t\t\t\t\t\tret = ((jQuery.event.special[handleObj.origType] || {}).handle ||\n\t\t\t\t\t\t\thandleObj.handler).apply(matched.elem, args);\n\n\t\t\t\t\t\tif (ret !== undefined) {\n\t\t\t\t\t\t\tif ((event.result = ret) === false) {\n\t\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Call the postDispatch hook for the mapped type\n\t\t\tif (special.postDispatch) {\n\t\t\t\tspecial.postDispatch.call(this, event);\n\t\t\t}\n\n\t\t\treturn event.result;\n\t\t},\n\n\t\thandlers: function (event, handlers) {\n\t\t\tvar i, handleObj, sel, matchedHandlers, matchedSelectors,\n\t\t\t\thandlerQueue = [],\n\t\t\t\tdelegateCount = handlers.delegateCount,\n\t\t\t\tcur = event.target;\n\n\t\t\t// Find delegate handlers\n\t\t\tif (delegateCount &&\n\n\t\t\t\t// Support: IE <=9\n\t\t\t\t// Black-hole SVG <use> instance trees (trac-13180)\n\t\t\t\tcur.nodeType &&\n\n\t\t\t\t// Support: Firefox <=42\n\t\t\t\t// Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861)\n\t\t\t\t// https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click\n\t\t\t\t// Support: IE 11 only\n\t\t\t\t// ...but not arrow key \"clicks\" of radio inputs, which can have `button` -1 (gh-2343)\n\t\t\t\t!(event.type === \"click\" && event.button >= 1)) {\n\n\t\t\t\tfor (; cur !== this; cur = cur.parentNode || this) {\n\n\t\t\t\t\t// Don't check non-elements (trac-13208)\n\t\t\t\t\t// Don't process clicks on disabled elements (trac-6911, trac-8165, trac-11382, trac-11764)\n\t\t\t\t\tif (cur.nodeType === 1 && !(event.type === \"click\" && cur.disabled === true)) {\n\t\t\t\t\t\tmatchedHandlers = [];\n\t\t\t\t\t\tmatchedSelectors = {};\n\t\t\t\t\t\tfor (i = 0; i < delegateCount; i++) {\n\t\t\t\t\t\t\thandleObj = handlers[i];\n\n\t\t\t\t\t\t\t// Don't conflict with Object.prototype properties (trac-13203)\n\t\t\t\t\t\t\tsel = handleObj.selector + \" \";\n\n\t\t\t\t\t\t\tif (matchedSelectors[sel] === undefined) {\n\t\t\t\t\t\t\t\tmatchedSelectors[sel] = handleObj.needsContext ?\n\t\t\t\t\t\t\t\t\tjQuery(sel, this).index(cur) > -1 :\n\t\t\t\t\t\t\t\t\tjQuery.find(sel, this, null, [cur]).length;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (matchedSelectors[sel]) {\n\t\t\t\t\t\t\t\tmatchedHandlers.push(handleObj);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (matchedHandlers.length) {\n\t\t\t\t\t\t\thandlerQueue.push({ elem: cur, handlers: matchedHandlers });\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Add the remaining (directly-bound) handlers\n\t\t\tcur = this;\n\t\t\tif (delegateCount < handlers.length) {\n\t\t\t\thandlerQueue.push({ elem: cur, handlers: handlers.slice(delegateCount) });\n\t\t\t}\n\n\t\t\treturn handlerQueue;\n\t\t},\n\n\t\taddProp: function (name, hook) {\n\t\t\tObject.defineProperty(jQuery.Event.prototype, name, {\n\t\t\t\tenumerable: true,\n\t\t\t\tconfigurable: true,\n\n\t\t\t\tget: isFunction(hook) ?\n\t\t\t\t\tfunction () {\n\t\t\t\t\t\tif (this.originalEvent) {\n\t\t\t\t\t\t\treturn hook(this.originalEvent);\n\t\t\t\t\t\t}\n\t\t\t\t\t} :\n\t\t\t\t\tfunction () {\n\t\t\t\t\t\tif (this.originalEvent) {\n\t\t\t\t\t\t\treturn this.originalEvent[name];\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\n\t\t\t\tset: function (value) {\n\t\t\t\t\tObject.defineProperty(this, name, {\n\t\t\t\t\t\tenumerable: true,\n\t\t\t\t\t\tconfigurable: true,\n\t\t\t\t\t\twritable: true,\n\t\t\t\t\t\tvalue: value\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\tfix: function (originalEvent) {\n\t\t\treturn originalEvent[jQuery.expando] ?\n\t\t\t\toriginalEvent :\n\t\t\t\tnew jQuery.Event(originalEvent);\n\t\t},\n\n\t\tspecial: {\n\t\t\tload: {\n\n\t\t\t\t// Prevent triggered image.load events from bubbling to window.load\n\t\t\t\tnoBubble: true\n\t\t\t},\n\t\t\tclick: {\n\n\t\t\t\t// Utilize native event to ensure correct state for checkable inputs\n\t\t\t\tsetup: function (data) {\n\n\t\t\t\t\t// For mutual compressibility with _default, replace `this` access with a local var.\n\t\t\t\t\t// `|| data` is dead code meant only to preserve the variable through minification.\n\t\t\t\t\tvar el = this || data;\n\n\t\t\t\t\t// Claim the first handler\n\t\t\t\t\tif (rcheckableType.test(el.type) &&\n\t\t\t\t\t\tel.click && nodeName(el, \"input\")) {\n\n\t\t\t\t\t\t// dataPriv.set( el, \"click\", ... )\n\t\t\t\t\t\tleverageNative(el, \"click\", true);\n\t\t\t\t\t}\n\n\t\t\t\t\t// Return false to allow normal processing in the caller\n\t\t\t\t\treturn false;\n\t\t\t\t},\n\t\t\t\ttrigger: function (data) {\n\n\t\t\t\t\t// For mutual compressibility with _default, replace `this` access with a local var.\n\t\t\t\t\t// `|| data` is dead code meant only to preserve the variable through minification.\n\t\t\t\t\tvar el = this || data;\n\n\t\t\t\t\t// Force setup before triggering a click\n\t\t\t\t\tif (rcheckableType.test(el.type) &&\n\t\t\t\t\t\tel.click && nodeName(el, \"input\")) {\n\n\t\t\t\t\t\tleverageNative(el, \"click\");\n\t\t\t\t\t}\n\n\t\t\t\t\t// Return non-false to allow normal event-path propagation\n\t\t\t\t\treturn true;\n\t\t\t\t},\n\n\t\t\t\t// For cross-browser consistency, suppress native .click() on links\n\t\t\t\t// Also prevent it if we're currently inside a leveraged native-event stack\n\t\t\t\t_default: function (event) {\n\t\t\t\t\tvar target = event.target;\n\t\t\t\t\treturn rcheckableType.test(target.type) &&\n\t\t\t\t\t\ttarget.click && nodeName(target, \"input\") &&\n\t\t\t\t\t\tdataPriv.get(target, \"click\") ||\n\t\t\t\t\t\tnodeName(target, \"a\");\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tbeforeunload: {\n\t\t\t\tpostDispatch: function (event) {\n\n\t\t\t\t\t// Support: Firefox 20+\n\t\t\t\t\t// Firefox doesn't alert if the returnValue field is not set.\n\t\t\t\t\tif (event.result !== undefined && event.originalEvent) {\n\t\t\t\t\t\tevent.originalEvent.returnValue = event.result;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t// Ensure the presence of an event listener that handles manually-triggered\n\t// synthetic events by interrupting progress until reinvoked in response to\n\t// *native* events that it fires directly, ensuring that state changes have\n\t// already occurred before other listeners are invoked.\n\tfunction leverageNative(el, type, isSetup) {\n\n\t\t// Missing `isSetup` indicates a trigger call, which must force setup through jQuery.event.add\n\t\tif (!isSetup) {\n\t\t\tif (dataPriv.get(el, type) === undefined) {\n\t\t\t\tjQuery.event.add(el, type, returnTrue);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\t// Register the controller as a special universal handler for all event namespaces\n\t\tdataPriv.set(el, type, false);\n\t\tjQuery.event.add(el, type, {\n\t\t\tnamespace: false,\n\t\t\thandler: function (event) {\n\t\t\t\tvar result,\n\t\t\t\t\tsaved = dataPriv.get(this, type);\n\n\t\t\t\tif ((event.isTrigger & 1) && this[type]) {\n\n\t\t\t\t\t// Interrupt processing of the outer synthetic .trigger()ed event\n\t\t\t\t\tif (!saved) {\n\n\t\t\t\t\t\t// Store arguments for use when handling the inner native event\n\t\t\t\t\t\t// There will always be at least one argument (an event object), so this array\n\t\t\t\t\t\t// will not be confused with a leftover capture object.\n\t\t\t\t\t\tsaved = slice.call(arguments);\n\t\t\t\t\t\tdataPriv.set(this, type, saved);\n\n\t\t\t\t\t\t// Trigger the native event and capture its result\n\t\t\t\t\t\tthis[type]();\n\t\t\t\t\t\tresult = dataPriv.get(this, type);\n\t\t\t\t\t\tdataPriv.set(this, type, false);\n\n\t\t\t\t\t\tif (saved !== result) {\n\n\t\t\t\t\t\t\t// Cancel the outer synthetic event\n\t\t\t\t\t\t\tevent.stopImmediatePropagation();\n\t\t\t\t\t\t\tevent.preventDefault();\n\n\t\t\t\t\t\t\treturn result;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// If this is an inner synthetic event for an event with a bubbling surrogate\n\t\t\t\t\t\t// (focus or blur), assume that the surrogate already propagated from triggering\n\t\t\t\t\t\t// the native event and prevent that from happening again here.\n\t\t\t\t\t\t// This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the\n\t\t\t\t\t\t// bubbling surrogate propagates *after* the non-bubbling base), but that seems\n\t\t\t\t\t\t// less bad than duplication.\n\t\t\t\t\t} else if ((jQuery.event.special[type] || {}).delegateType) {\n\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t}\n\n\t\t\t\t\t// If this is a native event triggered above, everything is now in order\n\t\t\t\t\t// Fire an inner synthetic event with the original arguments\n\t\t\t\t} else if (saved) {\n\n\t\t\t\t\t// ...and capture the result\n\t\t\t\t\tdataPriv.set(this, type, jQuery.event.trigger(\n\t\t\t\t\t\tsaved[0],\n\t\t\t\t\t\tsaved.slice(1),\n\t\t\t\t\t\tthis\n\t\t\t\t\t));\n\n\t\t\t\t\t// Abort handling of the native event by all jQuery handlers while allowing\n\t\t\t\t\t// native handlers on the same element to run. On target, this is achieved\n\t\t\t\t\t// by stopping immediate propagation just on the jQuery event. However,\n\t\t\t\t\t// the native event is re-wrapped by a jQuery one on each level of the\n\t\t\t\t\t// propagation so the only way to stop it for jQuery is to stop it for\n\t\t\t\t\t// everyone via native `stopPropagation()`. This is not a problem for\n\t\t\t\t\t// focus/blur which don't bubble, but it does also stop click on checkboxes\n\t\t\t\t\t// and radios. We accept this limitation.\n\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\tevent.isImmediatePropagationStopped = returnTrue;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\tjQuery.removeEvent = function (elem, type, handle) {\n\n\t\t// This \"if\" is needed for plain objects\n\t\tif (elem.removeEventListener) {\n\t\t\telem.removeEventListener(type, handle);\n\t\t}\n\t};\n\n\tjQuery.Event = function (src, props) {\n\n\t\t// Allow instantiation without the 'new' keyword\n\t\tif (!(this instanceof jQuery.Event)) {\n\t\t\treturn new jQuery.Event(src, props);\n\t\t}\n\n\t\t// Event object\n\t\tif (src && src.type) {\n\t\t\tthis.originalEvent = src;\n\t\t\tthis.type = src.type;\n\n\t\t\t// Events bubbling up the document may have been marked as prevented\n\t\t\t// by a handler lower down the tree; reflect the correct value.\n\t\t\tthis.isDefaultPrevented = src.defaultPrevented ||\n\t\t\t\tsrc.defaultPrevented === undefined &&\n\n\t\t\t\t// Support: Android <=2.3 only\n\t\t\t\tsrc.returnValue === false ?\n\t\t\t\treturnTrue :\n\t\t\t\treturnFalse;\n\n\t\t\t// Create target properties\n\t\t\t// Support: Safari <=6 - 7 only\n\t\t\t// Target should not be a text node (trac-504, trac-13143)\n\t\t\tthis.target = (src.target && src.target.nodeType === 3) ?\n\t\t\t\tsrc.target.parentNode :\n\t\t\t\tsrc.target;\n\n\t\t\tthis.currentTarget = src.currentTarget;\n\t\t\tthis.relatedTarget = src.relatedTarget;\n\n\t\t\t// Event type\n\t\t} else {\n\t\t\tthis.type = src;\n\t\t}\n\n\t\t// Put explicitly provided properties onto the event object\n\t\tif (props) {\n\t\t\tjQuery.extend(this, props);\n\t\t}\n\n\t\t// Create a timestamp if incoming event doesn't have one\n\t\tthis.timeStamp = src && src.timeStamp || Date.now();\n\n\t\t// Mark it as fixed\n\t\tthis[jQuery.expando] = true;\n\t};\n\n\t// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding\n\t// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html\n\tjQuery.Event.prototype = {\n\t\tconstructor: jQuery.Event,\n\t\tisDefaultPrevented: returnFalse,\n\t\tisPropagationStopped: returnFalse,\n\t\tisImmediatePropagationStopped: returnFalse,\n\t\tisSimulated: false,\n\n\t\tpreventDefault: function () {\n\t\t\tvar e = this.originalEvent;\n\n\t\t\tthis.isDefaultPrevented = returnTrue;\n\n\t\t\tif (e && !this.isSimulated) {\n\t\t\t\te.preventDefault();\n\t\t\t}\n\t\t},\n\t\tstopPropagation: function () {\n\t\t\tvar e = this.originalEvent;\n\n\t\t\tthis.isPropagationStopped = returnTrue;\n\n\t\t\tif (e && !this.isSimulated) {\n\t\t\t\te.stopPropagation();\n\t\t\t}\n\t\t},\n\t\tstopImmediatePropagation: function () {\n\t\t\tvar e = this.originalEvent;\n\n\t\t\tthis.isImmediatePropagationStopped = returnTrue;\n\n\t\t\tif (e && !this.isSimulated) {\n\t\t\t\te.stopImmediatePropagation();\n\t\t\t}\n\n\t\t\tthis.stopPropagation();\n\t\t}\n\t};\n\n\t// Includes all common event props including KeyEvent and MouseEvent specific props\n\tjQuery.each({\n\t\taltKey: true,\n\t\tbubbles: true,\n\t\tcancelable: true,\n\t\tchangedTouches: true,\n\t\tctrlKey: true,\n\t\tdetail: true,\n\t\teventPhase: true,\n\t\tmetaKey: true,\n\t\tpageX: true,\n\t\tpageY: true,\n\t\tshiftKey: true,\n\t\tview: true,\n\t\t\"char\": true,\n\t\tcode: true,\n\t\tcharCode: true,\n\t\tkey: true,\n\t\tkeyCode: true,\n\t\tbutton: true,\n\t\tbuttons: true,\n\t\tclientX: true,\n\t\tclientY: true,\n\t\toffsetX: true,\n\t\toffsetY: true,\n\t\tpointerId: true,\n\t\tpointerType: true,\n\t\tscreenX: true,\n\t\tscreenY: true,\n\t\ttargetTouches: true,\n\t\ttoElement: true,\n\t\ttouches: true,\n\t\twhich: true\n\t}, jQuery.event.addProp);\n\n\tjQuery.each({ focus: \"focusin\", blur: \"focusout\" }, function (type, delegateType) {\n\n\t\tfunction focusMappedHandler(nativeEvent) {\n\t\t\tif (document.documentMode) {\n\n\t\t\t\t// Support: IE 11+\n\t\t\t\t// Attach a single focusin/focusout handler on the document while someone wants\n\t\t\t\t// focus/blur. This is because the former are synchronous in IE while the latter\n\t\t\t\t// are async. In other browsers, all those handlers are invoked synchronously.\n\n\t\t\t\t// `handle` from private data would already wrap the event, but we need\n\t\t\t\t// to change the `type` here.\n\t\t\t\tvar handle = dataPriv.get(this, \"handle\"),\n\t\t\t\t\tevent = jQuery.event.fix(nativeEvent);\n\t\t\t\tevent.type = nativeEvent.type === \"focusin\" ? \"focus\" : \"blur\";\n\t\t\t\tevent.isSimulated = true;\n\n\t\t\t\t// First, handle focusin/focusout\n\t\t\t\thandle(nativeEvent);\n\n\t\t\t\t// ...then, handle focus/blur\n\t\t\t\t//\n\t\t\t\t// focus/blur don't bubble while focusin/focusout do; simulate the former by only\n\t\t\t\t// invoking the handler at the lower level.\n\t\t\t\tif (event.target === event.currentTarget) {\n\n\t\t\t\t\t// The setup part calls `leverageNative`, which, in turn, calls\n\t\t\t\t\t// `jQuery.event.add`, so event handle will already have been set\n\t\t\t\t\t// by this point.\n\t\t\t\t\thandle(event);\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\t// For non-IE browsers, attach a single capturing handler on the document\n\t\t\t\t// while someone wants focusin/focusout.\n\t\t\t\tjQuery.event.simulate(delegateType, nativeEvent.target,\n\t\t\t\t\tjQuery.event.fix(nativeEvent));\n\t\t\t}\n\t\t}\n\n\t\tjQuery.event.special[type] = {\n\n\t\t\t// Utilize native event if possible so blur/focus sequence is correct\n\t\t\tsetup: function () {\n\n\t\t\t\tvar attaches;\n\n\t\t\t\t// Claim the first handler\n\t\t\t\t// dataPriv.set( this, \"focus\", ... )\n\t\t\t\t// dataPriv.set( this, \"blur\", ... )\n\t\t\t\tleverageNative(this, type, true);\n\n\t\t\t\tif (document.documentMode) {\n\n\t\t\t\t\t// Support: IE 9 - 11+\n\t\t\t\t\t// We use the same native handler for focusin & focus (and focusout & blur)\n\t\t\t\t\t// so we need to coordinate setup & teardown parts between those events.\n\t\t\t\t\t// Use `delegateType` as the key as `type` is already used by `leverageNative`.\n\t\t\t\t\tattaches = dataPriv.get(this, delegateType);\n\t\t\t\t\tif (!attaches) {\n\t\t\t\t\t\tthis.addEventListener(delegateType, focusMappedHandler);\n\t\t\t\t\t}\n\t\t\t\t\tdataPriv.set(this, delegateType, (attaches || 0) + 1);\n\t\t\t\t} else {\n\n\t\t\t\t\t// Return false to allow normal processing in the caller\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\t\t\ttrigger: function () {\n\n\t\t\t\t// Force setup before trigger\n\t\t\t\tleverageNative(this, type);\n\n\t\t\t\t// Return non-false to allow normal event-path propagation\n\t\t\t\treturn true;\n\t\t\t},\n\n\t\t\tteardown: function () {\n\t\t\t\tvar attaches;\n\n\t\t\t\tif (document.documentMode) {\n\t\t\t\t\tattaches = dataPriv.get(this, delegateType) - 1;\n\t\t\t\t\tif (!attaches) {\n\t\t\t\t\t\tthis.removeEventListener(delegateType, focusMappedHandler);\n\t\t\t\t\t\tdataPriv.remove(this, delegateType);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdataPriv.set(this, delegateType, attaches);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\n\t\t\t\t\t// Return false to indicate standard teardown should be applied\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// Suppress native focus or blur if we're currently inside\n\t\t\t// a leveraged native-event stack\n\t\t\t_default: function (event) {\n\t\t\t\treturn dataPriv.get(event.target, type);\n\t\t\t},\n\n\t\t\tdelegateType: delegateType\n\t\t};\n\n\t\t// Support: Firefox <=44\n\t\t// Firefox doesn't have focus(in | out) events\n\t\t// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787\n\t\t//\n\t\t// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1\n\t\t// focus(in | out) events fire after focus & blur events,\n\t\t// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order\n\t\t// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857\n\t\t//\n\t\t// Support: IE 9 - 11+\n\t\t// To preserve relative focusin/focus & focusout/blur event order guaranteed on the 3.x branch,\n\t\t// attach a single handler for both events in IE.\n\t\tjQuery.event.special[delegateType] = {\n\t\t\tsetup: function () {\n\n\t\t\t\t// Handle: regular nodes (via `this.ownerDocument`), window\n\t\t\t\t// (via `this.document`) & document (via `this`).\n\t\t\t\tvar doc = this.ownerDocument || this.document || this,\n\t\t\t\t\tdataHolder = document.documentMode ? this : doc,\n\t\t\t\t\tattaches = dataPriv.get(dataHolder, delegateType);\n\n\t\t\t\t// Support: IE 9 - 11+\n\t\t\t\t// We use the same native handler for focusin & focus (and focusout & blur)\n\t\t\t\t// so we need to coordinate setup & teardown parts between those events.\n\t\t\t\t// Use `delegateType` as the key as `type` is already used by `leverageNative`.\n\t\t\t\tif (!attaches) {\n\t\t\t\t\tif (document.documentMode) {\n\t\t\t\t\t\tthis.addEventListener(delegateType, focusMappedHandler);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdoc.addEventListener(type, focusMappedHandler, true);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tdataPriv.set(dataHolder, delegateType, (attaches || 0) + 1);\n\t\t\t},\n\t\t\tteardown: function () {\n\t\t\t\tvar doc = this.ownerDocument || this.document || this,\n\t\t\t\t\tdataHolder = document.documentMode ? this : doc,\n\t\t\t\t\tattaches = dataPriv.get(dataHolder, delegateType) - 1;\n\n\t\t\t\tif (!attaches) {\n\t\t\t\t\tif (document.documentMode) {\n\t\t\t\t\t\tthis.removeEventListener(delegateType, focusMappedHandler);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdoc.removeEventListener(type, focusMappedHandler, true);\n\t\t\t\t\t}\n\t\t\t\t\tdataPriv.remove(dataHolder, delegateType);\n\t\t\t\t} else {\n\t\t\t\t\tdataPriv.set(dataHolder, delegateType, attaches);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t});\n\n\t// Create mouseenter/leave events using mouseover/out and event-time checks\n\t// so that event delegation works in jQuery.\n\t// Do the same for pointerenter/pointerleave and pointerover/pointerout\n\t//\n\t// Support: Safari 7 only\n\t// Safari sends mouseenter too often; see:\n\t// https://bugs.chromium.org/p/chromium/issues/detail?id=470258\n\t// for the description of the bug (it existed in older Chrome versions as well).\n\tjQuery.each({\n\t\tmouseenter: \"mouseover\",\n\t\tmouseleave: \"mouseout\",\n\t\tpointerenter: \"pointerover\",\n\t\tpointerleave: \"pointerout\"\n\t}, function (orig, fix) {\n\t\tjQuery.event.special[orig] = {\n\t\t\tdelegateType: fix,\n\t\t\tbindType: fix,\n\n\t\t\thandle: function (event) {\n\t\t\t\tvar ret,\n\t\t\t\t\ttarget = this,\n\t\t\t\t\trelated = event.relatedTarget,\n\t\t\t\t\thandleObj = event.handleObj;\n\n\t\t\t\t// For mouseenter/leave call the handler if related is outside the target.\n\t\t\t\t// NB: No relatedTarget if the mouse left/entered the browser window\n\t\t\t\tif (!related || (related !== target && !jQuery.contains(target, related))) {\n\t\t\t\t\tevent.type = handleObj.origType;\n\t\t\t\t\tret = handleObj.handler.apply(this, arguments);\n\t\t\t\t\tevent.type = fix;\n\t\t\t\t}\n\t\t\t\treturn ret;\n\t\t\t}\n\t\t};\n\t});\n\n\tjQuery.fn.extend({\n\n\t\ton: function (types, selector, data, fn) {\n\t\t\treturn on(this, types, selector, data, fn);\n\t\t},\n\t\tone: function (types, selector, data, fn) {\n\t\t\treturn on(this, types, selector, data, fn, 1);\n\t\t},\n\t\toff: function (types, selector, fn) {\n\t\t\tvar handleObj, type;\n\t\t\tif (types && types.preventDefault && types.handleObj) {\n\n\t\t\t\t// ( event )  dispatched jQuery.Event\n\t\t\t\thandleObj = types.handleObj;\n\t\t\t\tjQuery(types.delegateTarget).off(\n\t\t\t\t\thandleObj.namespace ?\n\t\t\t\t\t\thandleObj.origType + \".\" + handleObj.namespace :\n\t\t\t\t\t\thandleObj.origType,\n\t\t\t\t\thandleObj.selector,\n\t\t\t\t\thandleObj.handler\n\t\t\t\t);\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\tif (typeof types === \"object\") {\n\n\t\t\t\t// ( types-object [, selector] )\n\t\t\t\tfor (type in types) {\n\t\t\t\t\tthis.off(type, selector, types[type]);\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\tif (selector === false || typeof selector === \"function\") {\n\n\t\t\t\t// ( types [, fn] )\n\t\t\t\tfn = selector;\n\t\t\t\tselector = undefined;\n\t\t\t}\n\t\t\tif (fn === false) {\n\t\t\t\tfn = returnFalse;\n\t\t\t}\n\t\t\treturn this.each(function () {\n\t\t\t\tjQuery.event.remove(this, types, fn, selector);\n\t\t\t});\n\t\t}\n\t});\n\n\n\tvar\n\n\t\t// Support: IE <=10 - 11, Edge 12 - 13 only\n\t\t// In IE/Edge using regex groups here causes severe slowdowns.\n\t\t// See https://connect.microsoft.com/IE/feedback/details/1736512/\n\t\trnoInnerhtml = /<script|<style|<link/i,\n\n\t\t// checked=\"checked\" or checked\n\t\trchecked = /checked\\s*(?:[^=]|=\\s*.checked.)/i,\n\n\t\trcleanScript = /^\\s*<!\\[CDATA\\[|\\]\\]>\\s*$/g;\n\n\t// Prefer a tbody over its parent table for containing new rows\n\tfunction manipulationTarget(elem, content) {\n\t\tif (nodeName(elem, \"table\") &&\n\t\t\tnodeName(content.nodeType !== 11 ? content : content.firstChild, \"tr\")) {\n\n\t\t\treturn jQuery(elem).children(\"tbody\")[0] || elem;\n\t\t}\n\n\t\treturn elem;\n\t}\n\n\t// Replace/restore the type attribute of script elements for safe DOM manipulation\n\tfunction disableScript(elem) {\n\t\telem.type = (elem.getAttribute(\"type\") !== null) + \"/\" + elem.type;\n\t\treturn elem;\n\t}\n\tfunction restoreScript(elem) {\n\t\tif ((elem.type || \"\").slice(0, 5) === \"true/\") {\n\t\t\telem.type = elem.type.slice(5);\n\t\t} else {\n\t\t\telem.removeAttribute(\"type\");\n\t\t}\n\n\t\treturn elem;\n\t}\n\n\tfunction cloneCopyEvent(src, dest) {\n\t\tvar i, l, type, pdataOld, udataOld, udataCur, events;\n\n\t\tif (dest.nodeType !== 1) {\n\t\t\treturn;\n\t\t}\n\n\t\t// 1. Copy private data: events, handlers, etc.\n\t\tif (dataPriv.hasData(src)) {\n\t\t\tpdataOld = dataPriv.get(src);\n\t\t\tevents = pdataOld.events;\n\n\t\t\tif (events) {\n\t\t\t\tdataPriv.remove(dest, \"handle events\");\n\n\t\t\t\tfor (type in events) {\n\t\t\t\t\tfor (i = 0, l = events[type].length; i < l; i++) {\n\t\t\t\t\t\tjQuery.event.add(dest, type, events[type][i]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// 2. Copy user data\n\t\tif (dataUser.hasData(src)) {\n\t\t\tudataOld = dataUser.access(src);\n\t\t\tudataCur = jQuery.extend({}, udataOld);\n\n\t\t\tdataUser.set(dest, udataCur);\n\t\t}\n\t}\n\n\t// Fix IE bugs, see support tests\n\tfunction fixInput(src, dest) {\n\t\tvar nodeName = dest.nodeName.toLowerCase();\n\n\t\t// Fails to persist the checked state of a cloned checkbox or radio button.\n\t\tif (nodeName === \"input\" && rcheckableType.test(src.type)) {\n\t\t\tdest.checked = src.checked;\n\n\t\t\t// Fails to return the selected option to the default selected state when cloning options\n\t\t} else if (nodeName === \"input\" || nodeName === \"textarea\") {\n\t\t\tdest.defaultValue = src.defaultValue;\n\t\t}\n\t}\n\n\tfunction domManip(collection, args, callback, ignored) {\n\n\t\t// Flatten any nested arrays\n\t\targs = flat(args);\n\n\t\tvar fragment, first, scripts, hasScripts, node, doc,\n\t\t\ti = 0,\n\t\t\tl = collection.length,\n\t\t\tiNoClone = l - 1,\n\t\t\tvalue = args[0],\n\t\t\tvalueIsFunction = isFunction(value);\n\n\t\t// We can't cloneNode fragments that contain checked, in WebKit\n\t\tif (valueIsFunction ||\n\t\t\t(l > 1 && typeof value === \"string\" &&\n\t\t\t\t!support.checkClone && rchecked.test(value))) {\n\t\t\treturn collection.each(function (index) {\n\t\t\t\tvar self = collection.eq(index);\n\t\t\t\tif (valueIsFunction) {\n\t\t\t\t\targs[0] = value.call(this, index, self.html());\n\t\t\t\t}\n\t\t\t\tdomManip(self, args, callback, ignored);\n\t\t\t});\n\t\t}\n\n\t\tif (l) {\n\t\t\tfragment = buildFragment(args, collection[0].ownerDocument, false, collection, ignored);\n\t\t\tfirst = fragment.firstChild;\n\n\t\t\tif (fragment.childNodes.length === 1) {\n\t\t\t\tfragment = first;\n\t\t\t}\n\n\t\t\t// Require either new content or an interest in ignored elements to invoke the callback\n\t\t\tif (first || ignored) {\n\t\t\t\tscripts = jQuery.map(getAll(fragment, \"script\"), disableScript);\n\t\t\t\thasScripts = scripts.length;\n\n\t\t\t\t// Use the original fragment for the last item\n\t\t\t\t// instead of the first because it can end up\n\t\t\t\t// being emptied incorrectly in certain situations (trac-8070).\n\t\t\t\tfor (; i < l; i++) {\n\t\t\t\t\tnode = fragment;\n\n\t\t\t\t\tif (i !== iNoClone) {\n\t\t\t\t\t\tnode = jQuery.clone(node, true, true);\n\n\t\t\t\t\t\t// Keep references to cloned scripts for later restoration\n\t\t\t\t\t\tif (hasScripts) {\n\n\t\t\t\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\t\t\t\tjQuery.merge(scripts, getAll(node, \"script\"));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tcallback.call(collection[i], node, i);\n\t\t\t\t}\n\n\t\t\t\tif (hasScripts) {\n\t\t\t\t\tdoc = scripts[scripts.length - 1].ownerDocument;\n\n\t\t\t\t\t// Reenable scripts\n\t\t\t\t\tjQuery.map(scripts, restoreScript);\n\n\t\t\t\t\t// Evaluate executable scripts on first document insertion\n\t\t\t\t\tfor (i = 0; i < hasScripts; i++) {\n\t\t\t\t\t\tnode = scripts[i];\n\t\t\t\t\t\tif (rscriptType.test(node.type || \"\") &&\n\t\t\t\t\t\t\t!dataPriv.access(node, \"globalEval\") &&\n\t\t\t\t\t\t\tjQuery.contains(doc, node)) {\n\n\t\t\t\t\t\t\tif (node.src && (node.type || \"\").toLowerCase() !== \"module\") {\n\n\t\t\t\t\t\t\t\t// Optional AJAX dependency, but won't run scripts if not present\n\t\t\t\t\t\t\t\tif (jQuery._evalUrl && !node.noModule) {\n\t\t\t\t\t\t\t\t\tjQuery._evalUrl(node.src, {\n\t\t\t\t\t\t\t\t\t\tnonce: node.nonce || node.getAttribute(\"nonce\")\n\t\t\t\t\t\t\t\t\t}, doc);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t// Unwrap a CDATA section containing script contents. This shouldn't be\n\t\t\t\t\t\t\t\t// needed as in XML documents they're already not visible when\n\t\t\t\t\t\t\t\t// inspecting element contents and in HTML documents they have no\n\t\t\t\t\t\t\t\t// meaning but we're preserving that logic for backwards compatibility.\n\t\t\t\t\t\t\t\t// This will be removed completely in 4.0. See gh-4904.\n\t\t\t\t\t\t\t\tDOMEval(node.textContent.replace(rcleanScript, \"\"), node, doc);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn collection;\n\t}\n\n\tfunction remove(elem, selector, keepData) {\n\t\tvar node,\n\t\t\tnodes = selector ? jQuery.filter(selector, elem) : elem,\n\t\t\ti = 0;\n\n\t\tfor (; (node = nodes[i]) != null; i++) {\n\t\t\tif (!keepData && node.nodeType === 1) {\n\t\t\t\tjQuery.cleanData(getAll(node));\n\t\t\t}\n\n\t\t\tif (node.parentNode) {\n\t\t\t\tif (keepData && isAttached(node)) {\n\t\t\t\t\tsetGlobalEval(getAll(node, \"script\"));\n\t\t\t\t}\n\t\t\t\tnode.parentNode.removeChild(node);\n\t\t\t}\n\t\t}\n\n\t\treturn elem;\n\t}\n\n\tjQuery.extend({\n\t\thtmlPrefilter: function (html) {\n\t\t\treturn html;\n\t\t},\n\n\t\tclone: function (elem, dataAndEvents, deepDataAndEvents) {\n\t\t\tvar i, l, srcElements, destElements,\n\t\t\t\tclone = elem.cloneNode(true),\n\t\t\t\tinPage = isAttached(elem);\n\n\t\t\t// Fix IE cloning issues\n\t\t\tif (!support.noCloneChecked && (elem.nodeType === 1 || elem.nodeType === 11) &&\n\t\t\t\t!jQuery.isXMLDoc(elem)) {\n\n\t\t\t\t// We eschew jQuery#find here for performance reasons:\n\t\t\t\t// https://jsperf.com/getall-vs-sizzle/2\n\t\t\t\tdestElements = getAll(clone);\n\t\t\t\tsrcElements = getAll(elem);\n\n\t\t\t\tfor (i = 0, l = srcElements.length; i < l; i++) {\n\t\t\t\t\tfixInput(srcElements[i], destElements[i]);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Copy the events from the original to the clone\n\t\t\tif (dataAndEvents) {\n\t\t\t\tif (deepDataAndEvents) {\n\t\t\t\t\tsrcElements = srcElements || getAll(elem);\n\t\t\t\t\tdestElements = destElements || getAll(clone);\n\n\t\t\t\t\tfor (i = 0, l = srcElements.length; i < l; i++) {\n\t\t\t\t\t\tcloneCopyEvent(srcElements[i], destElements[i]);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tcloneCopyEvent(elem, clone);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Preserve script evaluation history\n\t\t\tdestElements = getAll(clone, \"script\");\n\t\t\tif (destElements.length > 0) {\n\t\t\t\tsetGlobalEval(destElements, !inPage && getAll(elem, \"script\"));\n\t\t\t}\n\n\t\t\t// Return the cloned set\n\t\t\treturn clone;\n\t\t},\n\n\t\tcleanData: function (elems) {\n\t\t\tvar data, elem, type,\n\t\t\t\tspecial = jQuery.event.special,\n\t\t\t\ti = 0;\n\n\t\t\tfor (; (elem = elems[i]) !== undefined; i++) {\n\t\t\t\tif (acceptData(elem)) {\n\t\t\t\t\tif ((data = elem[dataPriv.expando])) {\n\t\t\t\t\t\tif (data.events) {\n\t\t\t\t\t\t\tfor (type in data.events) {\n\t\t\t\t\t\t\t\tif (special[type]) {\n\t\t\t\t\t\t\t\t\tjQuery.event.remove(elem, type);\n\n\t\t\t\t\t\t\t\t\t// This is a shortcut to avoid jQuery.event.remove's overhead\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tjQuery.removeEvent(elem, type, data.handle);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\t\telem[dataPriv.expando] = undefined;\n\t\t\t\t\t}\n\t\t\t\t\tif (elem[dataUser.expando]) {\n\n\t\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\t\telem[dataUser.expando] = undefined;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\n\tjQuery.fn.extend({\n\t\tdetach: function (selector) {\n\t\t\treturn remove(this, selector, true);\n\t\t},\n\n\t\tremove: function (selector) {\n\t\t\treturn remove(this, selector);\n\t\t},\n\n\t\ttext: function (value) {\n\t\t\treturn access(this, function (value) {\n\t\t\t\treturn value === undefined ?\n\t\t\t\t\tjQuery.text(this) :\n\t\t\t\t\tthis.empty().each(function () {\n\t\t\t\t\t\tif (this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9) {\n\t\t\t\t\t\t\tthis.textContent = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t}, null, value, arguments.length);\n\t\t},\n\n\t\tappend: function () {\n\t\t\treturn domManip(this, arguments, function (elem) {\n\t\t\t\tif (this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9) {\n\t\t\t\t\tvar target = manipulationTarget(this, elem);\n\t\t\t\t\ttarget.appendChild(elem);\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\tprepend: function () {\n\t\t\treturn domManip(this, arguments, function (elem) {\n\t\t\t\tif (this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9) {\n\t\t\t\t\tvar target = manipulationTarget(this, elem);\n\t\t\t\t\ttarget.insertBefore(elem, target.firstChild);\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\tbefore: function () {\n\t\t\treturn domManip(this, arguments, function (elem) {\n\t\t\t\tif (this.parentNode) {\n\t\t\t\t\tthis.parentNode.insertBefore(elem, this);\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\tafter: function () {\n\t\t\treturn domManip(this, arguments, function (elem) {\n\t\t\t\tif (this.parentNode) {\n\t\t\t\t\tthis.parentNode.insertBefore(elem, this.nextSibling);\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\tempty: function () {\n\t\t\tvar elem,\n\t\t\t\ti = 0;\n\n\t\t\tfor (; (elem = this[i]) != null; i++) {\n\t\t\t\tif (elem.nodeType === 1) {\n\n\t\t\t\t\t// Prevent memory leaks\n\t\t\t\t\tjQuery.cleanData(getAll(elem, false));\n\n\t\t\t\t\t// Remove any remaining nodes\n\t\t\t\t\telem.textContent = \"\";\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn this;\n\t\t},\n\n\t\tclone: function (dataAndEvents, deepDataAndEvents) {\n\t\t\tdataAndEvents = dataAndEvents == null ? false : dataAndEvents;\n\t\t\tdeepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;\n\n\t\t\treturn this.map(function () {\n\t\t\t\treturn jQuery.clone(this, dataAndEvents, deepDataAndEvents);\n\t\t\t});\n\t\t},\n\n\t\thtml: function (value) {\n\t\t\treturn access(this, function (value) {\n\t\t\t\tvar elem = this[0] || {},\n\t\t\t\t\ti = 0,\n\t\t\t\t\tl = this.length;\n\n\t\t\t\tif (value === undefined && elem.nodeType === 1) {\n\t\t\t\t\treturn elem.innerHTML;\n\t\t\t\t}\n\n\t\t\t\t// See if we can take a shortcut and just use innerHTML\n\t\t\t\tif (typeof value === \"string\" && !rnoInnerhtml.test(value) &&\n\t\t\t\t\t!wrapMap[(rtagName.exec(value) || [\"\", \"\"])[1].toLowerCase()]) {\n\n\t\t\t\t\tvalue = jQuery.htmlPrefilter(value);\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tfor (; i < l; i++) {\n\t\t\t\t\t\t\telem = this[i] || {};\n\n\t\t\t\t\t\t\t// Remove element nodes and prevent memory leaks\n\t\t\t\t\t\t\tif (elem.nodeType === 1) {\n\t\t\t\t\t\t\t\tjQuery.cleanData(getAll(elem, false));\n\t\t\t\t\t\t\t\telem.innerHTML = value;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\telem = 0;\n\n\t\t\t\t\t\t// If using innerHTML throws an exception, use the fallback method\n\t\t\t\t\t} catch (e) { }\n\t\t\t\t}\n\n\t\t\t\tif (elem) {\n\t\t\t\t\tthis.empty().append(value);\n\t\t\t\t}\n\t\t\t}, null, value, arguments.length);\n\t\t},\n\n\t\treplaceWith: function () {\n\t\t\tvar ignored = [];\n\n\t\t\t// Make the changes, replacing each non-ignored context element with the new content\n\t\t\treturn domManip(this, arguments, function (elem) {\n\t\t\t\tvar parent = this.parentNode;\n\n\t\t\t\tif (jQuery.inArray(this, ignored) < 0) {\n\t\t\t\t\tjQuery.cleanData(getAll(this));\n\t\t\t\t\tif (parent) {\n\t\t\t\t\t\tparent.replaceChild(elem, this);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Force callback invocation\n\t\t\t}, ignored);\n\t\t}\n\t});\n\n\tjQuery.each({\n\t\tappendTo: \"append\",\n\t\tprependTo: \"prepend\",\n\t\tinsertBefore: \"before\",\n\t\tinsertAfter: \"after\",\n\t\treplaceAll: \"replaceWith\"\n\t}, function (name, original) {\n\t\tjQuery.fn[name] = function (selector) {\n\t\t\tvar elems,\n\t\t\t\tret = [],\n\t\t\t\tinsert = jQuery(selector),\n\t\t\t\tlast = insert.length - 1,\n\t\t\t\ti = 0;\n\n\t\t\tfor (; i <= last; i++) {\n\t\t\t\telems = i === last ? this : this.clone(true);\n\t\t\t\tjQuery(insert[i])[original](elems);\n\n\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t// .get() because push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\tpush.apply(ret, elems.get());\n\t\t\t}\n\n\t\t\treturn this.pushStack(ret);\n\t\t};\n\t});\n\tvar rnumnonpx = new RegExp(\"^(\" + pnum + \")(?!px)[a-z%]+$\", \"i\");\n\n\tvar rcustomProp = /^--/;\n\n\n\tvar getStyles = function (elem) {\n\n\t\t// Support: IE <=11 only, Firefox <=30 (trac-15098, trac-14150)\n\t\t// IE throws on elements created in popups\n\t\t// FF meanwhile throws on frame elements through \"defaultView.getComputedStyle\"\n\t\tvar view = elem.ownerDocument.defaultView;\n\n\t\tif (!view || !view.opener) {\n\t\t\tview = window;\n\t\t}\n\n\t\treturn view.getComputedStyle(elem);\n\t};\n\n\tvar swap = function (elem, options, callback) {\n\t\tvar ret, name,\n\t\t\told = {};\n\n\t\t// Remember the old values, and insert the new ones\n\t\tfor (name in options) {\n\t\t\told[name] = elem.style[name];\n\t\t\telem.style[name] = options[name];\n\t\t}\n\n\t\tret = callback.call(elem);\n\n\t\t// Revert the old values\n\t\tfor (name in options) {\n\t\t\telem.style[name] = old[name];\n\t\t}\n\n\t\treturn ret;\n\t};\n\n\n\tvar rboxStyle = new RegExp(cssExpand.join(\"|\"), \"i\");\n\n\n\n\t(function () {\n\n\t\t// Executing both pixelPosition & boxSizingReliable tests require only one layout\n\t\t// so they're executed at the same time to save the second computation.\n\t\tfunction computeStyleTests() {\n\n\t\t\t// This is a singleton, we need to execute it only once\n\t\t\tif (!div) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tcontainer.style.cssText = \"position:absolute;left:-11111px;width:60px;\" +\n\t\t\t\t\"margin-top:1px;padding:0;border:0\";\n\t\t\tdiv.style.cssText =\n\t\t\t\t\"position:relative;display:block;box-sizing:border-box;overflow:scroll;\" +\n\t\t\t\t\"margin:auto;border:1px;padding:1px;\" +\n\t\t\t\t\"width:60%;top:1%\";\n\t\t\tdocumentElement.appendChild(container).appendChild(div);\n\n\t\t\tvar divStyle = window.getComputedStyle(div);\n\t\t\tpixelPositionVal = divStyle.top !== \"1%\";\n\n\t\t\t// Support: Android 4.0 - 4.3 only, Firefox <=3 - 44\n\t\t\treliableMarginLeftVal = roundPixelMeasures(divStyle.marginLeft) === 12;\n\n\t\t\t// Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3\n\t\t\t// Some styles come back with percentage values, even though they shouldn't\n\t\t\tdiv.style.right = \"60%\";\n\t\t\tpixelBoxStylesVal = roundPixelMeasures(divStyle.right) === 36;\n\n\t\t\t// Support: IE 9 - 11 only\n\t\t\t// Detect misreporting of content dimensions for box-sizing:border-box elements\n\t\t\tboxSizingReliableVal = roundPixelMeasures(divStyle.width) === 36;\n\n\t\t\t// Support: IE 9 only\n\t\t\t// Detect overflow:scroll screwiness (gh-3699)\n\t\t\t// Support: Chrome <=64\n\t\t\t// Don't get tricked when zoom affects offsetWidth (gh-4029)\n\t\t\tdiv.style.position = \"absolute\";\n\t\t\tscrollboxSizeVal = roundPixelMeasures(div.offsetWidth / 3) === 12;\n\n\t\t\tdocumentElement.removeChild(container);\n\n\t\t\t// Nullify the div so it wouldn't be stored in the memory and\n\t\t\t// it will also be a sign that checks already performed\n\t\t\tdiv = null;\n\t\t}\n\n\t\tfunction roundPixelMeasures(measure) {\n\t\t\treturn Math.round(parseFloat(measure));\n\t\t}\n\n\t\tvar pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal,\n\t\t\treliableTrDimensionsVal, reliableMarginLeftVal,\n\t\t\tcontainer = document.createElement(\"div\"),\n\t\t\tdiv = document.createElement(\"div\");\n\n\t\t// Finish early in limited (non-browser) environments\n\t\tif (!div.style) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Support: IE <=9 - 11 only\n\t\t// Style of cloned element affects source element cloned (trac-8908)\n\t\tdiv.style.backgroundClip = \"content-box\";\n\t\tdiv.cloneNode(true).style.backgroundClip = \"\";\n\t\tsupport.clearCloneStyle = div.style.backgroundClip === \"content-box\";\n\n\t\tjQuery.extend(support, {\n\t\t\tboxSizingReliable: function () {\n\t\t\t\tcomputeStyleTests();\n\t\t\t\treturn boxSizingReliableVal;\n\t\t\t},\n\t\t\tpixelBoxStyles: function () {\n\t\t\t\tcomputeStyleTests();\n\t\t\t\treturn pixelBoxStylesVal;\n\t\t\t},\n\t\t\tpixelPosition: function () {\n\t\t\t\tcomputeStyleTests();\n\t\t\t\treturn pixelPositionVal;\n\t\t\t},\n\t\t\treliableMarginLeft: function () {\n\t\t\t\tcomputeStyleTests();\n\t\t\t\treturn reliableMarginLeftVal;\n\t\t\t},\n\t\t\tscrollboxSize: function () {\n\t\t\t\tcomputeStyleTests();\n\t\t\t\treturn scrollboxSizeVal;\n\t\t\t},\n\n\t\t\t// Support: IE 9 - 11+, Edge 15 - 18+\n\t\t\t// IE/Edge misreport `getComputedStyle` of table rows with width/height\n\t\t\t// set in CSS while `offset*` properties report correct values.\n\t\t\t// Behavior in IE 9 is more subtle than in newer versions & it passes\n\t\t\t// some versions of this test; make sure not to make it pass there!\n\t\t\t//\n\t\t\t// Support: Firefox 70+\n\t\t\t// Only Firefox includes border widths\n\t\t\t// in computed dimensions. (gh-4529)\n\t\t\treliableTrDimensions: function () {\n\t\t\t\tvar table, tr, trChild, trStyle;\n\t\t\t\tif (reliableTrDimensionsVal == null) {\n\t\t\t\t\ttable = document.createElement(\"table\");\n\t\t\t\t\ttr = document.createElement(\"tr\");\n\t\t\t\t\ttrChild = document.createElement(\"div\");\n\n\t\t\t\t\ttable.style.cssText = \"position:absolute;left:-11111px;border-collapse:separate\";\n\t\t\t\t\ttr.style.cssText = \"border:1px solid\";\n\n\t\t\t\t\t// Support: Chrome 86+\n\t\t\t\t\t// Height set through cssText does not get applied.\n\t\t\t\t\t// Computed height then comes back as 0.\n\t\t\t\t\ttr.style.height = \"1px\";\n\t\t\t\t\ttrChild.style.height = \"9px\";\n\n\t\t\t\t\t// Support: Android 8 Chrome 86+\n\t\t\t\t\t// In our bodyBackground.html iframe,\n\t\t\t\t\t// display for all div elements is set to \"inline\",\n\t\t\t\t\t// which causes a problem only in Android 8 Chrome 86.\n\t\t\t\t\t// Ensuring the div is display: block\n\t\t\t\t\t// gets around this issue.\n\t\t\t\t\ttrChild.style.display = \"block\";\n\n\t\t\t\t\tdocumentElement\n\t\t\t\t\t\t.appendChild(table)\n\t\t\t\t\t\t.appendChild(tr)\n\t\t\t\t\t\t.appendChild(trChild);\n\n\t\t\t\t\ttrStyle = window.getComputedStyle(tr);\n\t\t\t\t\treliableTrDimensionsVal = (parseInt(trStyle.height, 10) +\n\t\t\t\t\t\tparseInt(trStyle.borderTopWidth, 10) +\n\t\t\t\t\t\tparseInt(trStyle.borderBottomWidth, 10)) === tr.offsetHeight;\n\n\t\t\t\t\tdocumentElement.removeChild(table);\n\t\t\t\t}\n\t\t\t\treturn reliableTrDimensionsVal;\n\t\t\t}\n\t\t});\n\t})();\n\n\n\tfunction curCSS(elem, name, computed) {\n\t\tvar width, minWidth, maxWidth, ret,\n\t\t\tisCustomProp = rcustomProp.test(name),\n\n\t\t\t// Support: Firefox 51+\n\t\t\t// Retrieving style before computed somehow\n\t\t\t// fixes an issue with getting wrong values\n\t\t\t// on detached elements\n\t\t\tstyle = elem.style;\n\n\t\tcomputed = computed || getStyles(elem);\n\n\t\t// getPropertyValue is needed for:\n\t\t//   .css('filter') (IE 9 only, trac-12537)\n\t\t//   .css('--customProperty) (gh-3144)\n\t\tif (computed) {\n\n\t\t\t// Support: IE <=9 - 11+\n\t\t\t// IE only supports `\"float\"` in `getPropertyValue`; in computed styles\n\t\t\t// it's only available as `\"cssFloat\"`. We no longer modify properties\n\t\t\t// sent to `.css()` apart from camelCasing, so we need to check both.\n\t\t\t// Normally, this would create difference in behavior: if\n\t\t\t// `getPropertyValue` returns an empty string, the value returned\n\t\t\t// by `.css()` would be `undefined`. This is usually the case for\n\t\t\t// disconnected elements. However, in IE even disconnected elements\n\t\t\t// with no styles return `\"none\"` for `getPropertyValue( \"float\" )`\n\t\t\tret = computed.getPropertyValue(name) || computed[name];\n\n\t\t\tif (isCustomProp && ret) {\n\n\t\t\t\t// Support: Firefox 105+, Chrome <=105+\n\t\t\t\t// Spec requires trimming whitespace for custom properties (gh-4926).\n\t\t\t\t// Firefox only trims leading whitespace. Chrome just collapses\n\t\t\t\t// both leading & trailing whitespace to a single space.\n\t\t\t\t//\n\t\t\t\t// Fall back to `undefined` if empty string returned.\n\t\t\t\t// This collapses a missing definition with property defined\n\t\t\t\t// and set to an empty string but there's no standard API\n\t\t\t\t// allowing us to differentiate them without a performance penalty\n\t\t\t\t// and returning `undefined` aligns with older jQuery.\n\t\t\t\t//\n\t\t\t\t// rtrimCSS treats U+000D CARRIAGE RETURN and U+000C FORM FEED\n\t\t\t\t// as whitespace while CSS does not, but this is not a problem\n\t\t\t\t// because CSS preprocessing replaces them with U+000A LINE FEED\n\t\t\t\t// (which *is* CSS whitespace)\n\t\t\t\t// https://www.w3.org/TR/css-syntax-3/#input-preprocessing\n\t\t\t\tret = ret.replace(rtrimCSS, \"$1\") || undefined;\n\t\t\t}\n\n\t\t\tif (ret === \"\" && !isAttached(elem)) {\n\t\t\t\tret = jQuery.style(elem, name);\n\t\t\t}\n\n\t\t\t// A tribute to the \"awesome hack by Dean Edwards\"\n\t\t\t// Android Browser returns percentage for some values,\n\t\t\t// but width seems to be reliably pixels.\n\t\t\t// This is against the CSSOM draft spec:\n\t\t\t// https://drafts.csswg.org/cssom/#resolved-values\n\t\t\tif (!support.pixelBoxStyles() && rnumnonpx.test(ret) && rboxStyle.test(name)) {\n\n\t\t\t\t// Remember the original values\n\t\t\t\twidth = style.width;\n\t\t\t\tminWidth = style.minWidth;\n\t\t\t\tmaxWidth = style.maxWidth;\n\n\t\t\t\t// Put in the new values to get a computed value out\n\t\t\t\tstyle.minWidth = style.maxWidth = style.width = ret;\n\t\t\t\tret = computed.width;\n\n\t\t\t\t// Revert the changed values\n\t\t\t\tstyle.width = width;\n\t\t\t\tstyle.minWidth = minWidth;\n\t\t\t\tstyle.maxWidth = maxWidth;\n\t\t\t}\n\t\t}\n\n\t\treturn ret !== undefined ?\n\n\t\t\t// Support: IE <=9 - 11 only\n\t\t\t// IE returns zIndex value as an integer.\n\t\t\tret + \"\" :\n\t\t\tret;\n\t}\n\n\n\tfunction addGetHookIf(conditionFn, hookFn) {\n\n\t\t// Define the hook, we'll check on the first run if it's really needed.\n\t\treturn {\n\t\t\tget: function () {\n\t\t\t\tif (conditionFn()) {\n\n\t\t\t\t\t// Hook not needed (or it's not possible to use it due\n\t\t\t\t\t// to missing dependency), remove it.\n\t\t\t\t\tdelete this.get;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Hook needed; redefine it so that the support test is not executed again.\n\t\t\t\treturn (this.get = hookFn).apply(this, arguments);\n\t\t\t}\n\t\t};\n\t}\n\n\n\tvar cssPrefixes = [\"Webkit\", \"Moz\", \"ms\"],\n\t\temptyStyle = document.createElement(\"div\").style,\n\t\tvendorProps = {};\n\n\t// Return a vendor-prefixed property or undefined\n\tfunction vendorPropName(name) {\n\n\t\t// Check for vendor prefixed names\n\t\tvar capName = name[0].toUpperCase() + name.slice(1),\n\t\t\ti = cssPrefixes.length;\n\n\t\twhile (i--) {\n\t\t\tname = cssPrefixes[i] + capName;\n\t\t\tif (name in emptyStyle) {\n\t\t\t\treturn name;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return a potentially-mapped jQuery.cssProps or vendor prefixed property\n\tfunction finalPropName(name) {\n\t\tvar final = jQuery.cssProps[name] || vendorProps[name];\n\n\t\tif (final) {\n\t\t\treturn final;\n\t\t}\n\t\tif (name in emptyStyle) {\n\t\t\treturn name;\n\t\t}\n\t\treturn vendorProps[name] = vendorPropName(name) || name;\n\t}\n\n\n\tvar\n\n\t\t// Swappable if display is none or starts with table\n\t\t// except \"table\", \"table-cell\", or \"table-caption\"\n\t\t// See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display\n\t\trdisplayswap = /^(none|table(?!-c[ea]).+)/,\n\t\tcssShow = { position: \"absolute\", visibility: \"hidden\", display: \"block\" },\n\t\tcssNormalTransform = {\n\t\t\tletterSpacing: \"0\",\n\t\t\tfontWeight: \"400\"\n\t\t};\n\n\tfunction setPositiveNumber(_elem, value, subtract) {\n\n\t\t// Any relative (+/-) values have already been\n\t\t// normalized at this point\n\t\tvar matches = rcssNum.exec(value);\n\t\treturn matches ?\n\n\t\t\t// Guard against undefined \"subtract\", e.g., when used as in cssHooks\n\t\t\tMath.max(0, matches[2] - (subtract || 0)) + (matches[3] || \"px\") :\n\t\t\tvalue;\n\t}\n\n\tfunction boxModelAdjustment(elem, dimension, box, isBorderBox, styles, computedVal) {\n\t\tvar i = dimension === \"width\" ? 1 : 0,\n\t\t\textra = 0,\n\t\t\tdelta = 0,\n\t\t\tmarginDelta = 0;\n\n\t\t// Adjustment may not be necessary\n\t\tif (box === (isBorderBox ? \"border\" : \"content\")) {\n\t\t\treturn 0;\n\t\t}\n\n\t\tfor (; i < 4; i += 2) {\n\n\t\t\t// Both box models exclude margin\n\t\t\t// Count margin delta separately to only add it after scroll gutter adjustment.\n\t\t\t// This is needed to make negative margins work with `outerHeight( true )` (gh-3982).\n\t\t\tif (box === \"margin\") {\n\t\t\t\tmarginDelta += jQuery.css(elem, box + cssExpand[i], true, styles);\n\t\t\t}\n\n\t\t\t// If we get here with a content-box, we're seeking \"padding\" or \"border\" or \"margin\"\n\t\t\tif (!isBorderBox) {\n\n\t\t\t\t// Add padding\n\t\t\t\tdelta += jQuery.css(elem, \"padding\" + cssExpand[i], true, styles);\n\n\t\t\t\t// For \"border\" or \"margin\", add border\n\t\t\t\tif (box !== \"padding\") {\n\t\t\t\t\tdelta += jQuery.css(elem, \"border\" + cssExpand[i] + \"Width\", true, styles);\n\n\t\t\t\t\t// But still keep track of it otherwise\n\t\t\t\t} else {\n\t\t\t\t\textra += jQuery.css(elem, \"border\" + cssExpand[i] + \"Width\", true, styles);\n\t\t\t\t}\n\n\t\t\t\t// If we get here with a border-box (content + padding + border), we're seeking \"content\" or\n\t\t\t\t// \"padding\" or \"margin\"\n\t\t\t} else {\n\n\t\t\t\t// For \"content\", subtract padding\n\t\t\t\tif (box === \"content\") {\n\t\t\t\t\tdelta -= jQuery.css(elem, \"padding\" + cssExpand[i], true, styles);\n\t\t\t\t}\n\n\t\t\t\t// For \"content\" or \"padding\", subtract border\n\t\t\t\tif (box !== \"margin\") {\n\t\t\t\t\tdelta -= jQuery.css(elem, \"border\" + cssExpand[i] + \"Width\", true, styles);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Account for positive content-box scroll gutter when requested by providing computedVal\n\t\tif (!isBorderBox && computedVal >= 0) {\n\n\t\t\t// offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border\n\t\t\t// Assuming integer scroll gutter, subtract the rest and round down\n\t\t\tdelta += Math.max(0, Math.ceil(\n\t\t\t\telem[\"offset\" + dimension[0].toUpperCase() + dimension.slice(1)] -\n\t\t\t\tcomputedVal -\n\t\t\t\tdelta -\n\t\t\t\textra -\n\t\t\t\t0.5\n\n\t\t\t\t// If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter\n\t\t\t\t// Use an explicit zero to avoid NaN (gh-3964)\n\t\t\t)) || 0;\n\t\t}\n\n\t\treturn delta + marginDelta;\n\t}\n\n\tfunction getWidthOrHeight(elem, dimension, extra) {\n\n\t\t// Start with computed style\n\t\tvar styles = getStyles(elem),\n\n\t\t\t// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322).\n\t\t\t// Fake content-box until we know it's needed to know the true value.\n\t\t\tboxSizingNeeded = !support.boxSizingReliable() || extra,\n\t\t\tisBorderBox = boxSizingNeeded &&\n\t\t\t\tjQuery.css(elem, \"boxSizing\", false, styles) === \"border-box\",\n\t\t\tvalueIsBorderBox = isBorderBox,\n\n\t\t\tval = curCSS(elem, dimension, styles),\n\t\t\toffsetProp = \"offset\" + dimension[0].toUpperCase() + dimension.slice(1);\n\n\t\t// Support: Firefox <=54\n\t\t// Return a confounding non-pixel value or feign ignorance, as appropriate.\n\t\tif (rnumnonpx.test(val)) {\n\t\t\tif (!extra) {\n\t\t\t\treturn val;\n\t\t\t}\n\t\t\tval = \"auto\";\n\t\t}\n\n\n\t\t// Support: IE 9 - 11 only\n\t\t// Use offsetWidth/offsetHeight for when box sizing is unreliable.\n\t\t// In those cases, the computed value can be trusted to be border-box.\n\t\tif ((!support.boxSizingReliable() && isBorderBox ||\n\n\t\t\t// Support: IE 10 - 11+, Edge 15 - 18+\n\t\t\t// IE/Edge misreport `getComputedStyle` of table rows with width/height\n\t\t\t// set in CSS while `offset*` properties report correct values.\n\t\t\t// Interestingly, in some cases IE 9 doesn't suffer from this issue.\n\t\t\t!support.reliableTrDimensions() && nodeName(elem, \"tr\") ||\n\n\t\t\t// Fall back to offsetWidth/offsetHeight when value is \"auto\"\n\t\t\t// This happens for inline elements with no explicit setting (gh-3571)\n\t\t\tval === \"auto\" ||\n\n\t\t\t// Support: Android <=4.1 - 4.3 only\n\t\t\t// Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602)\n\t\t\t!parseFloat(val) && jQuery.css(elem, \"display\", false, styles) === \"inline\") &&\n\n\t\t\t// Make sure the element is visible & connected\n\t\t\telem.getClientRects().length) {\n\n\t\t\tisBorderBox = jQuery.css(elem, \"boxSizing\", false, styles) === \"border-box\";\n\n\t\t\t// Where available, offsetWidth/offsetHeight approximate border box dimensions.\n\t\t\t// Where not available (e.g., SVG), assume unreliable box-sizing and interpret the\n\t\t\t// retrieved value as a content box dimension.\n\t\t\tvalueIsBorderBox = offsetProp in elem;\n\t\t\tif (valueIsBorderBox) {\n\t\t\t\tval = elem[offsetProp];\n\t\t\t}\n\t\t}\n\n\t\t// Normalize \"\" and auto\n\t\tval = parseFloat(val) || 0;\n\n\t\t// Adjust for the element's box model\n\t\treturn (val +\n\t\t\tboxModelAdjustment(\n\t\t\t\telem,\n\t\t\t\tdimension,\n\t\t\t\textra || (isBorderBox ? \"border\" : \"content\"),\n\t\t\t\tvalueIsBorderBox,\n\t\t\t\tstyles,\n\n\t\t\t\t// Provide the current computed size to request scroll gutter calculation (gh-3589)\n\t\t\t\tval\n\t\t\t)\n\t\t) + \"px\";\n\t}\n\n\tjQuery.extend({\n\n\t\t// Add in style property hooks for overriding the default\n\t\t// behavior of getting and setting a style property\n\t\tcssHooks: {\n\t\t\topacity: {\n\t\t\t\tget: function (elem, computed) {\n\t\t\t\t\tif (computed) {\n\n\t\t\t\t\t\t// We should always get a number back from opacity\n\t\t\t\t\t\tvar ret = curCSS(elem, \"opacity\");\n\t\t\t\t\t\treturn ret === \"\" ? \"1\" : ret;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t// Don't automatically add \"px\" to these possibly-unitless properties\n\t\tcssNumber: {\n\t\t\tanimationIterationCount: true,\n\t\t\taspectRatio: true,\n\t\t\tborderImageSlice: true,\n\t\t\tcolumnCount: true,\n\t\t\tflexGrow: true,\n\t\t\tflexShrink: true,\n\t\t\tfontWeight: true,\n\t\t\tgridArea: true,\n\t\t\tgridColumn: true,\n\t\t\tgridColumnEnd: true,\n\t\t\tgridColumnStart: true,\n\t\t\tgridRow: true,\n\t\t\tgridRowEnd: true,\n\t\t\tgridRowStart: true,\n\t\t\tlineHeight: true,\n\t\t\topacity: true,\n\t\t\torder: true,\n\t\t\torphans: true,\n\t\t\tscale: true,\n\t\t\twidows: true,\n\t\t\tzIndex: true,\n\t\t\tzoom: true,\n\n\t\t\t// SVG-related\n\t\t\tfillOpacity: true,\n\t\t\tfloodOpacity: true,\n\t\t\tstopOpacity: true,\n\t\t\tstrokeMiterlimit: true,\n\t\t\tstrokeOpacity: true\n\t\t},\n\n\t\t// Add in properties whose names you wish to fix before\n\t\t// setting or getting the value\n\t\tcssProps: {},\n\n\t\t// Get and set the style property on a DOM Node\n\t\tstyle: function (elem, name, value, extra) {\n\n\t\t\t// Don't set styles on text and comment nodes\n\t\t\tif (!elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Make sure that we're working with the right name\n\t\t\tvar ret, type, hooks,\n\t\t\t\torigName = camelCase(name),\n\t\t\t\tisCustomProp = rcustomProp.test(name),\n\t\t\t\tstyle = elem.style;\n\n\t\t\t// Make sure that we're working with the right name. We don't\n\t\t\t// want to query the value if it is a CSS custom property\n\t\t\t// since they are user-defined.\n\t\t\tif (!isCustomProp) {\n\t\t\t\tname = finalPropName(origName);\n\t\t\t}\n\n\t\t\t// Gets hook for the prefixed version, then unprefixed version\n\t\t\thooks = jQuery.cssHooks[name] || jQuery.cssHooks[origName];\n\n\t\t\t// Check if we're setting a value\n\t\t\tif (value !== undefined) {\n\t\t\t\ttype = typeof value;\n\n\t\t\t\t// Convert \"+=\" or \"-=\" to relative numbers (trac-7345)\n\t\t\t\tif (type === \"string\" && (ret = rcssNum.exec(value)) && ret[1]) {\n\t\t\t\t\tvalue = adjustCSS(elem, name, ret);\n\n\t\t\t\t\t// Fixes bug trac-9237\n\t\t\t\t\ttype = \"number\";\n\t\t\t\t}\n\n\t\t\t\t// Make sure that null and NaN values aren't set (trac-7116)\n\t\t\t\tif (value == null || value !== value) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// If a number was passed in, add the unit (except for certain CSS properties)\n\t\t\t\t// The isCustomProp check can be removed in jQuery 4.0 when we only auto-append\n\t\t\t\t// \"px\" to a few hardcoded values.\n\t\t\t\tif (type === \"number\" && !isCustomProp) {\n\t\t\t\t\tvalue += ret && ret[3] || (jQuery.cssNumber[origName] ? \"\" : \"px\");\n\t\t\t\t}\n\n\t\t\t\t// background-* props affect original clone's values\n\t\t\t\tif (!support.clearCloneStyle && value === \"\" && name.indexOf(\"background\") === 0) {\n\t\t\t\t\tstyle[name] = \"inherit\";\n\t\t\t\t}\n\n\t\t\t\t// If a hook was provided, use that value, otherwise just set the specified value\n\t\t\t\tif (!hooks || !(\"set\" in hooks) ||\n\t\t\t\t\t(value = hooks.set(elem, value, extra)) !== undefined) {\n\n\t\t\t\t\tif (isCustomProp) {\n\t\t\t\t\t\tstyle.setProperty(name, value);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tstyle[name] = value;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\t// If a hook was provided get the non-computed value from there\n\t\t\t\tif (hooks && \"get\" in hooks &&\n\t\t\t\t\t(ret = hooks.get(elem, false, extra)) !== undefined) {\n\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\n\t\t\t\t// Otherwise just get the value from the style object\n\t\t\t\treturn style[name];\n\t\t\t}\n\t\t},\n\n\t\tcss: function (elem, name, extra, styles) {\n\t\t\tvar val, num, hooks,\n\t\t\t\torigName = camelCase(name),\n\t\t\t\tisCustomProp = rcustomProp.test(name);\n\n\t\t\t// Make sure that we're working with the right name. We don't\n\t\t\t// want to modify the value if it is a CSS custom property\n\t\t\t// since they are user-defined.\n\t\t\tif (!isCustomProp) {\n\t\t\t\tname = finalPropName(origName);\n\t\t\t}\n\n\t\t\t// Try prefixed name followed by the unprefixed name\n\t\t\thooks = jQuery.cssHooks[name] || jQuery.cssHooks[origName];\n\n\t\t\t// If a hook was provided get the computed value from there\n\t\t\tif (hooks && \"get\" in hooks) {\n\t\t\t\tval = hooks.get(elem, true, extra);\n\t\t\t}\n\n\t\t\t// Otherwise, if a way to get the computed value exists, use that\n\t\t\tif (val === undefined) {\n\t\t\t\tval = curCSS(elem, name, styles);\n\t\t\t}\n\n\t\t\t// Convert \"normal\" to computed value\n\t\t\tif (val === \"normal\" && name in cssNormalTransform) {\n\t\t\t\tval = cssNormalTransform[name];\n\t\t\t}\n\n\t\t\t// Make numeric if forced or a qualifier was provided and val looks numeric\n\t\t\tif (extra === \"\" || extra) {\n\t\t\t\tnum = parseFloat(val);\n\t\t\t\treturn extra === true || isFinite(num) ? num || 0 : val;\n\t\t\t}\n\n\t\t\treturn val;\n\t\t}\n\t});\n\n\tjQuery.each([\"height\", \"width\"], function (_i, dimension) {\n\t\tjQuery.cssHooks[dimension] = {\n\t\t\tget: function (elem, computed, extra) {\n\t\t\t\tif (computed) {\n\n\t\t\t\t\t// Certain elements can have dimension info if we invisibly show them\n\t\t\t\t\t// but it must have a current display style that would benefit\n\t\t\t\t\treturn rdisplayswap.test(jQuery.css(elem, \"display\")) &&\n\n\t\t\t\t\t\t// Support: Safari 8+\n\t\t\t\t\t\t// Table columns in Safari have non-zero offsetWidth & zero\n\t\t\t\t\t\t// getBoundingClientRect().width unless display is changed.\n\t\t\t\t\t\t// Support: IE <=11 only\n\t\t\t\t\t\t// Running getBoundingClientRect on a disconnected node\n\t\t\t\t\t\t// in IE throws an error.\n\t\t\t\t\t\t(!elem.getClientRects().length || !elem.getBoundingClientRect().width) ?\n\t\t\t\t\t\tswap(elem, cssShow, function () {\n\t\t\t\t\t\t\treturn getWidthOrHeight(elem, dimension, extra);\n\t\t\t\t\t\t}) :\n\t\t\t\t\t\tgetWidthOrHeight(elem, dimension, extra);\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tset: function (elem, value, extra) {\n\t\t\t\tvar matches,\n\t\t\t\t\tstyles = getStyles(elem),\n\n\t\t\t\t\t// Only read styles.position if the test has a chance to fail\n\t\t\t\t\t// to avoid forcing a reflow.\n\t\t\t\t\tscrollboxSizeBuggy = !support.scrollboxSize() &&\n\t\t\t\t\t\tstyles.position === \"absolute\",\n\n\t\t\t\t\t// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991)\n\t\t\t\t\tboxSizingNeeded = scrollboxSizeBuggy || extra,\n\t\t\t\t\tisBorderBox = boxSizingNeeded &&\n\t\t\t\t\t\tjQuery.css(elem, \"boxSizing\", false, styles) === \"border-box\",\n\t\t\t\t\tsubtract = extra ?\n\t\t\t\t\t\tboxModelAdjustment(\n\t\t\t\t\t\t\telem,\n\t\t\t\t\t\t\tdimension,\n\t\t\t\t\t\t\textra,\n\t\t\t\t\t\t\tisBorderBox,\n\t\t\t\t\t\t\tstyles\n\t\t\t\t\t\t) :\n\t\t\t\t\t\t0;\n\n\t\t\t\t// Account for unreliable border-box dimensions by comparing offset* to computed and\n\t\t\t\t// faking a content-box to get border and padding (gh-3699)\n\t\t\t\tif (isBorderBox && scrollboxSizeBuggy) {\n\t\t\t\t\tsubtract -= Math.ceil(\n\t\t\t\t\t\telem[\"offset\" + dimension[0].toUpperCase() + dimension.slice(1)] -\n\t\t\t\t\t\tparseFloat(styles[dimension]) -\n\t\t\t\t\t\tboxModelAdjustment(elem, dimension, \"border\", false, styles) -\n\t\t\t\t\t\t0.5\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\t// Convert to pixels if value adjustment is needed\n\t\t\t\tif (subtract && (matches = rcssNum.exec(value)) &&\n\t\t\t\t\t(matches[3] || \"px\") !== \"px\") {\n\n\t\t\t\t\telem.style[dimension] = value;\n\t\t\t\t\tvalue = jQuery.css(elem, dimension);\n\t\t\t\t}\n\n\t\t\t\treturn setPositiveNumber(elem, value, subtract);\n\t\t\t}\n\t\t};\n\t});\n\n\tjQuery.cssHooks.marginLeft = addGetHookIf(support.reliableMarginLeft,\n\t\tfunction (elem, computed) {\n\t\t\tif (computed) {\n\t\t\t\treturn (parseFloat(curCSS(elem, \"marginLeft\")) ||\n\t\t\t\t\telem.getBoundingClientRect().left -\n\t\t\t\t\tswap(elem, { marginLeft: 0 }, function () {\n\t\t\t\t\t\treturn elem.getBoundingClientRect().left;\n\t\t\t\t\t})\n\t\t\t\t) + \"px\";\n\t\t\t}\n\t\t}\n\t);\n\n\t// These hooks are used by animate to expand properties\n\tjQuery.each({\n\t\tmargin: \"\",\n\t\tpadding: \"\",\n\t\tborder: \"Width\"\n\t}, function (prefix, suffix) {\n\t\tjQuery.cssHooks[prefix + suffix] = {\n\t\t\texpand: function (value) {\n\t\t\t\tvar i = 0,\n\t\t\t\t\texpanded = {},\n\n\t\t\t\t\t// Assumes a single number if not a string\n\t\t\t\t\tparts = typeof value === \"string\" ? value.split(\" \") : [value];\n\n\t\t\t\tfor (; i < 4; i++) {\n\t\t\t\t\texpanded[prefix + cssExpand[i] + suffix] =\n\t\t\t\t\t\tparts[i] || parts[i - 2] || parts[0];\n\t\t\t\t}\n\n\t\t\t\treturn expanded;\n\t\t\t}\n\t\t};\n\n\t\tif (prefix !== \"margin\") {\n\t\t\tjQuery.cssHooks[prefix + suffix].set = setPositiveNumber;\n\t\t}\n\t});\n\n\tjQuery.fn.extend({\n\t\tcss: function (name, value) {\n\t\t\treturn access(this, function (elem, name, value) {\n\t\t\t\tvar styles, len,\n\t\t\t\t\tmap = {},\n\t\t\t\t\ti = 0;\n\n\t\t\t\tif (Array.isArray(name)) {\n\t\t\t\t\tstyles = getStyles(elem);\n\t\t\t\t\tlen = name.length;\n\n\t\t\t\t\tfor (; i < len; i++) {\n\t\t\t\t\t\tmap[name[i]] = jQuery.css(elem, name[i], false, styles);\n\t\t\t\t\t}\n\n\t\t\t\t\treturn map;\n\t\t\t\t}\n\n\t\t\t\treturn value !== undefined ?\n\t\t\t\t\tjQuery.style(elem, name, value) :\n\t\t\t\t\tjQuery.css(elem, name);\n\t\t\t}, name, value, arguments.length > 1);\n\t\t}\n\t});\n\n\n\tfunction Tween(elem, options, prop, end, easing) {\n\t\treturn new Tween.prototype.init(elem, options, prop, end, easing);\n\t}\n\tjQuery.Tween = Tween;\n\n\tTween.prototype = {\n\t\tconstructor: Tween,\n\t\tinit: function (elem, options, prop, end, easing, unit) {\n\t\t\tthis.elem = elem;\n\t\t\tthis.prop = prop;\n\t\t\tthis.easing = easing || jQuery.easing._default;\n\t\t\tthis.options = options;\n\t\t\tthis.start = this.now = this.cur();\n\t\t\tthis.end = end;\n\t\t\tthis.unit = unit || (jQuery.cssNumber[prop] ? \"\" : \"px\");\n\t\t},\n\t\tcur: function () {\n\t\t\tvar hooks = Tween.propHooks[this.prop];\n\n\t\t\treturn hooks && hooks.get ?\n\t\t\t\thooks.get(this) :\n\t\t\t\tTween.propHooks._default.get(this);\n\t\t},\n\t\trun: function (percent) {\n\t\t\tvar eased,\n\t\t\t\thooks = Tween.propHooks[this.prop];\n\n\t\t\tif (this.options.duration) {\n\t\t\t\tthis.pos = eased = jQuery.easing[this.easing](\n\t\t\t\t\tpercent, this.options.duration * percent, 0, 1, this.options.duration\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tthis.pos = eased = percent;\n\t\t\t}\n\t\t\tthis.now = (this.end - this.start) * eased + this.start;\n\n\t\t\tif (this.options.step) {\n\t\t\t\tthis.options.step.call(this.elem, this.now, this);\n\t\t\t}\n\n\t\t\tif (hooks && hooks.set) {\n\t\t\t\thooks.set(this);\n\t\t\t} else {\n\t\t\t\tTween.propHooks._default.set(this);\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t};\n\n\tTween.prototype.init.prototype = Tween.prototype;\n\n\tTween.propHooks = {\n\t\t_default: {\n\t\t\tget: function (tween) {\n\t\t\t\tvar result;\n\n\t\t\t\t// Use a property on the element directly when it is not a DOM element,\n\t\t\t\t// or when there is no matching style property that exists.\n\t\t\t\tif (tween.elem.nodeType !== 1 ||\n\t\t\t\t\ttween.elem[tween.prop] != null && tween.elem.style[tween.prop] == null) {\n\t\t\t\t\treturn tween.elem[tween.prop];\n\t\t\t\t}\n\n\t\t\t\t// Passing an empty string as a 3rd parameter to .css will automatically\n\t\t\t\t// attempt a parseFloat and fallback to a string if the parse fails.\n\t\t\t\t// Simple values such as \"10px\" are parsed to Float;\n\t\t\t\t// complex values such as \"rotate(1rad)\" are returned as-is.\n\t\t\t\tresult = jQuery.css(tween.elem, tween.prop, \"\");\n\n\t\t\t\t// Empty strings, null, undefined and \"auto\" are converted to 0.\n\t\t\t\treturn !result || result === \"auto\" ? 0 : result;\n\t\t\t},\n\t\t\tset: function (tween) {\n\n\t\t\t\t// Use step hook for back compat.\n\t\t\t\t// Use cssHook if its there.\n\t\t\t\t// Use .style if available and use plain properties where available.\n\t\t\t\tif (jQuery.fx.step[tween.prop]) {\n\t\t\t\t\tjQuery.fx.step[tween.prop](tween);\n\t\t\t\t} else if (tween.elem.nodeType === 1 && (\n\t\t\t\t\tjQuery.cssHooks[tween.prop] ||\n\t\t\t\t\ttween.elem.style[finalPropName(tween.prop)] != null)) {\n\t\t\t\t\tjQuery.style(tween.elem, tween.prop, tween.now + tween.unit);\n\t\t\t\t} else {\n\t\t\t\t\ttween.elem[tween.prop] = tween.now;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t// Support: IE <=9 only\n\t// Panic based approach to setting things on disconnected nodes\n\tTween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {\n\t\tset: function (tween) {\n\t\t\tif (tween.elem.nodeType && tween.elem.parentNode) {\n\t\t\t\ttween.elem[tween.prop] = tween.now;\n\t\t\t}\n\t\t}\n\t};\n\n\tjQuery.easing = {\n\t\tlinear: function (p) {\n\t\t\treturn p;\n\t\t},\n\t\tswing: function (p) {\n\t\t\treturn 0.5 - Math.cos(p * Math.PI) / 2;\n\t\t},\n\t\t_default: \"swing\"\n\t};\n\n\tjQuery.fx = Tween.prototype.init;\n\n\t// Back compat <1.8 extension point\n\tjQuery.fx.step = {};\n\n\n\n\n\tvar\n\t\tfxNow, inProgress,\n\t\trfxtypes = /^(?:toggle|show|hide)$/,\n\t\trrun = /queueHooks$/;\n\n\tfunction schedule() {\n\t\tif (inProgress) {\n\t\t\tif (document.hidden === false && window.requestAnimationFrame) {\n\t\t\t\twindow.requestAnimationFrame(schedule);\n\t\t\t} else {\n\t\t\t\twindow.setTimeout(schedule, jQuery.fx.interval);\n\t\t\t}\n\n\t\t\tjQuery.fx.tick();\n\t\t}\n\t}\n\n\t// Animations created synchronously will run synchronously\n\tfunction createFxNow() {\n\t\twindow.setTimeout(function () {\n\t\t\tfxNow = undefined;\n\t\t});\n\t\treturn (fxNow = Date.now());\n\t}\n\n\t// Generate parameters to create a standard animation\n\tfunction genFx(type, includeWidth) {\n\t\tvar which,\n\t\t\ti = 0,\n\t\t\tattrs = { height: type };\n\n\t\t// If we include width, step value is 1 to do all cssExpand values,\n\t\t// otherwise step value is 2 to skip over Left and Right\n\t\tincludeWidth = includeWidth ? 1 : 0;\n\t\tfor (; i < 4; i += 2 - includeWidth) {\n\t\t\twhich = cssExpand[i];\n\t\t\tattrs[\"margin\" + which] = attrs[\"padding\" + which] = type;\n\t\t}\n\n\t\tif (includeWidth) {\n\t\t\tattrs.opacity = attrs.width = type;\n\t\t}\n\n\t\treturn attrs;\n\t}\n\n\tfunction createTween(value, prop, animation) {\n\t\tvar tween,\n\t\t\tcollection = (Animation.tweeners[prop] || []).concat(Animation.tweeners[\"*\"]),\n\t\t\tindex = 0,\n\t\t\tlength = collection.length;\n\t\tfor (; index < length; index++) {\n\t\t\tif ((tween = collection[index].call(animation, prop, value))) {\n\n\t\t\t\t// We're done with this property\n\t\t\t\treturn tween;\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction defaultPrefilter(elem, props, opts) {\n\t\tvar prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display,\n\t\t\tisBox = \"width\" in props || \"height\" in props,\n\t\t\tanim = this,\n\t\t\torig = {},\n\t\t\tstyle = elem.style,\n\t\t\thidden = elem.nodeType && isHiddenWithinTree(elem),\n\t\t\tdataShow = dataPriv.get(elem, \"fxshow\");\n\n\t\t// Queue-skipping animations hijack the fx hooks\n\t\tif (!opts.queue) {\n\t\t\thooks = jQuery._queueHooks(elem, \"fx\");\n\t\t\tif (hooks.unqueued == null) {\n\t\t\t\thooks.unqueued = 0;\n\t\t\t\toldfire = hooks.empty.fire;\n\t\t\t\thooks.empty.fire = function () {\n\t\t\t\t\tif (!hooks.unqueued) {\n\t\t\t\t\t\toldfire();\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t\thooks.unqueued++;\n\n\t\t\tanim.always(function () {\n\n\t\t\t\t// Ensure the complete handler is called before this completes\n\t\t\t\tanim.always(function () {\n\t\t\t\t\thooks.unqueued--;\n\t\t\t\t\tif (!jQuery.queue(elem, \"fx\").length) {\n\t\t\t\t\t\thooks.empty.fire();\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\n\t\t// Detect show/hide animations\n\t\tfor (prop in props) {\n\t\t\tvalue = props[prop];\n\t\t\tif (rfxtypes.test(value)) {\n\t\t\t\tdelete props[prop];\n\t\t\t\ttoggle = toggle || value === \"toggle\";\n\t\t\t\tif (value === (hidden ? \"hide\" : \"show\")) {\n\n\t\t\t\t\t// Pretend to be hidden if this is a \"show\" and\n\t\t\t\t\t// there is still data from a stopped show/hide\n\t\t\t\t\tif (value === \"show\" && dataShow && dataShow[prop] !== undefined) {\n\t\t\t\t\t\thidden = true;\n\n\t\t\t\t\t\t// Ignore all other no-op show/hide data\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\torig[prop] = dataShow && dataShow[prop] || jQuery.style(elem, prop);\n\t\t\t}\n\t\t}\n\n\t\t// Bail out if this is a no-op like .hide().hide()\n\t\tpropTween = !jQuery.isEmptyObject(props);\n\t\tif (!propTween && jQuery.isEmptyObject(orig)) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Restrict \"overflow\" and \"display\" styles during box animations\n\t\tif (isBox && elem.nodeType === 1) {\n\n\t\t\t// Support: IE <=9 - 11, Edge 12 - 15\n\t\t\t// Record all 3 overflow attributes because IE does not infer the shorthand\n\t\t\t// from identically-valued overflowX and overflowY and Edge just mirrors\n\t\t\t// the overflowX value there.\n\t\t\topts.overflow = [style.overflow, style.overflowX, style.overflowY];\n\n\t\t\t// Identify a display type, preferring old show/hide data over the CSS cascade\n\t\t\trestoreDisplay = dataShow && dataShow.display;\n\t\t\tif (restoreDisplay == null) {\n\t\t\t\trestoreDisplay = dataPriv.get(elem, \"display\");\n\t\t\t}\n\t\t\tdisplay = jQuery.css(elem, \"display\");\n\t\t\tif (display === \"none\") {\n\t\t\t\tif (restoreDisplay) {\n\t\t\t\t\tdisplay = restoreDisplay;\n\t\t\t\t} else {\n\n\t\t\t\t\t// Get nonempty value(s) by temporarily forcing visibility\n\t\t\t\t\tshowHide([elem], true);\n\t\t\t\t\trestoreDisplay = elem.style.display || restoreDisplay;\n\t\t\t\t\tdisplay = jQuery.css(elem, \"display\");\n\t\t\t\t\tshowHide([elem]);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Animate inline elements as inline-block\n\t\t\tif (display === \"inline\" || display === \"inline-block\" && restoreDisplay != null) {\n\t\t\t\tif (jQuery.css(elem, \"float\") === \"none\") {\n\n\t\t\t\t\t// Restore the original display value at the end of pure show/hide animations\n\t\t\t\t\tif (!propTween) {\n\t\t\t\t\t\tanim.done(function () {\n\t\t\t\t\t\t\tstyle.display = restoreDisplay;\n\t\t\t\t\t\t});\n\t\t\t\t\t\tif (restoreDisplay == null) {\n\t\t\t\t\t\t\tdisplay = style.display;\n\t\t\t\t\t\t\trestoreDisplay = display === \"none\" ? \"\" : display;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tstyle.display = \"inline-block\";\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (opts.overflow) {\n\t\t\tstyle.overflow = \"hidden\";\n\t\t\tanim.always(function () {\n\t\t\t\tstyle.overflow = opts.overflow[0];\n\t\t\t\tstyle.overflowX = opts.overflow[1];\n\t\t\t\tstyle.overflowY = opts.overflow[2];\n\t\t\t});\n\t\t}\n\n\t\t// Implement show/hide animations\n\t\tpropTween = false;\n\t\tfor (prop in orig) {\n\n\t\t\t// General show/hide setup for this element animation\n\t\t\tif (!propTween) {\n\t\t\t\tif (dataShow) {\n\t\t\t\t\tif (\"hidden\" in dataShow) {\n\t\t\t\t\t\thidden = dataShow.hidden;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tdataShow = dataPriv.access(elem, \"fxshow\", { display: restoreDisplay });\n\t\t\t\t}\n\n\t\t\t\t// Store hidden/visible for toggle so `.stop().toggle()` \"reverses\"\n\t\t\t\tif (toggle) {\n\t\t\t\t\tdataShow.hidden = !hidden;\n\t\t\t\t}\n\n\t\t\t\t// Show elements before animating them\n\t\t\t\tif (hidden) {\n\t\t\t\t\tshowHide([elem], true);\n\t\t\t\t}\n\n\t\t\t\t/* eslint-disable no-loop-func */\n\n\t\t\t\tanim.done(function () {\n\n\t\t\t\t\t/* eslint-enable no-loop-func */\n\n\t\t\t\t\t// The final step of a \"hide\" animation is actually hiding the element\n\t\t\t\t\tif (!hidden) {\n\t\t\t\t\t\tshowHide([elem]);\n\t\t\t\t\t}\n\t\t\t\t\tdataPriv.remove(elem, \"fxshow\");\n\t\t\t\t\tfor (prop in orig) {\n\t\t\t\t\t\tjQuery.style(elem, prop, orig[prop]);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// Per-property setup\n\t\t\tpropTween = createTween(hidden ? dataShow[prop] : 0, prop, anim);\n\t\t\tif (!(prop in dataShow)) {\n\t\t\t\tdataShow[prop] = propTween.start;\n\t\t\t\tif (hidden) {\n\t\t\t\t\tpropTween.end = propTween.start;\n\t\t\t\t\tpropTween.start = 0;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction propFilter(props, specialEasing) {\n\t\tvar index, name, easing, value, hooks;\n\n\t\t// camelCase, specialEasing and expand cssHook pass\n\t\tfor (index in props) {\n\t\t\tname = camelCase(index);\n\t\t\teasing = specialEasing[name];\n\t\t\tvalue = props[index];\n\t\t\tif (Array.isArray(value)) {\n\t\t\t\teasing = value[1];\n\t\t\t\tvalue = props[index] = value[0];\n\t\t\t}\n\n\t\t\tif (index !== name) {\n\t\t\t\tprops[name] = value;\n\t\t\t\tdelete props[index];\n\t\t\t}\n\n\t\t\thooks = jQuery.cssHooks[name];\n\t\t\tif (hooks && \"expand\" in hooks) {\n\t\t\t\tvalue = hooks.expand(value);\n\t\t\t\tdelete props[name];\n\n\t\t\t\t// Not quite $.extend, this won't overwrite existing keys.\n\t\t\t\t// Reusing 'index' because we have the correct \"name\"\n\t\t\t\tfor (index in value) {\n\t\t\t\t\tif (!(index in props)) {\n\t\t\t\t\t\tprops[index] = value[index];\n\t\t\t\t\t\tspecialEasing[index] = easing;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tspecialEasing[name] = easing;\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction Animation(elem, properties, options) {\n\t\tvar result,\n\t\t\tstopped,\n\t\t\tindex = 0,\n\t\t\tlength = Animation.prefilters.length,\n\t\t\tdeferred = jQuery.Deferred().always(function () {\n\n\t\t\t\t// Don't match elem in the :animated selector\n\t\t\t\tdelete tick.elem;\n\t\t\t}),\n\t\t\ttick = function () {\n\t\t\t\tif (stopped) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tvar currentTime = fxNow || createFxNow(),\n\t\t\t\t\tremaining = Math.max(0, animation.startTime + animation.duration - currentTime),\n\n\t\t\t\t\t// Support: Android 2.3 only\n\t\t\t\t\t// Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (trac-12497)\n\t\t\t\t\ttemp = remaining / animation.duration || 0,\n\t\t\t\t\tpercent = 1 - temp,\n\t\t\t\t\tindex = 0,\n\t\t\t\t\tlength = animation.tweens.length;\n\n\t\t\t\tfor (; index < length; index++) {\n\t\t\t\t\tanimation.tweens[index].run(percent);\n\t\t\t\t}\n\n\t\t\t\tdeferred.notifyWith(elem, [animation, percent, remaining]);\n\n\t\t\t\t// If there's more to do, yield\n\t\t\t\tif (percent < 1 && length) {\n\t\t\t\t\treturn remaining;\n\t\t\t\t}\n\n\t\t\t\t// If this was an empty animation, synthesize a final progress notification\n\t\t\t\tif (!length) {\n\t\t\t\t\tdeferred.notifyWith(elem, [animation, 1, 0]);\n\t\t\t\t}\n\n\t\t\t\t// Resolve the animation and report its conclusion\n\t\t\t\tdeferred.resolveWith(elem, [animation]);\n\t\t\t\treturn false;\n\t\t\t},\n\t\t\tanimation = deferred.promise({\n\t\t\t\telem: elem,\n\t\t\t\tprops: jQuery.extend({}, properties),\n\t\t\t\topts: jQuery.extend(true, {\n\t\t\t\t\tspecialEasing: {},\n\t\t\t\t\teasing: jQuery.easing._default\n\t\t\t\t}, options),\n\t\t\t\toriginalProperties: properties,\n\t\t\t\toriginalOptions: options,\n\t\t\t\tstartTime: fxNow || createFxNow(),\n\t\t\t\tduration: options.duration,\n\t\t\t\ttweens: [],\n\t\t\t\tcreateTween: function (prop, end) {\n\t\t\t\t\tvar tween = jQuery.Tween(elem, animation.opts, prop, end,\n\t\t\t\t\t\tanimation.opts.specialEasing[prop] || animation.opts.easing);\n\t\t\t\t\tanimation.tweens.push(tween);\n\t\t\t\t\treturn tween;\n\t\t\t\t},\n\t\t\t\tstop: function (gotoEnd) {\n\t\t\t\t\tvar index = 0,\n\n\t\t\t\t\t\t// If we are going to the end, we want to run all the tweens\n\t\t\t\t\t\t// otherwise we skip this part\n\t\t\t\t\t\tlength = gotoEnd ? animation.tweens.length : 0;\n\t\t\t\t\tif (stopped) {\n\t\t\t\t\t\treturn this;\n\t\t\t\t\t}\n\t\t\t\t\tstopped = true;\n\t\t\t\t\tfor (; index < length; index++) {\n\t\t\t\t\t\tanimation.tweens[index].run(1);\n\t\t\t\t\t}\n\n\t\t\t\t\t// Resolve when we played the last frame; otherwise, reject\n\t\t\t\t\tif (gotoEnd) {\n\t\t\t\t\t\tdeferred.notifyWith(elem, [animation, 1, 0]);\n\t\t\t\t\t\tdeferred.resolveWith(elem, [animation, gotoEnd]);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdeferred.rejectWith(elem, [animation, gotoEnd]);\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t}),\n\t\t\tprops = animation.props;\n\n\t\tpropFilter(props, animation.opts.specialEasing);\n\n\t\tfor (; index < length; index++) {\n\t\t\tresult = Animation.prefilters[index].call(animation, elem, props, animation.opts);\n\t\t\tif (result) {\n\t\t\t\tif (isFunction(result.stop)) {\n\t\t\t\t\tjQuery._queueHooks(animation.elem, animation.opts.queue).stop =\n\t\t\t\t\t\tresult.stop.bind(result);\n\t\t\t\t}\n\t\t\t\treturn result;\n\t\t\t}\n\t\t}\n\n\t\tjQuery.map(props, createTween, animation);\n\n\t\tif (isFunction(animation.opts.start)) {\n\t\t\tanimation.opts.start.call(elem, animation);\n\t\t}\n\n\t\t// Attach callbacks from options\n\t\tanimation\n\t\t\t.progress(animation.opts.progress)\n\t\t\t.done(animation.opts.done, animation.opts.complete)\n\t\t\t.fail(animation.opts.fail)\n\t\t\t.always(animation.opts.always);\n\n\t\tjQuery.fx.timer(\n\t\t\tjQuery.extend(tick, {\n\t\t\t\telem: elem,\n\t\t\t\tanim: animation,\n\t\t\t\tqueue: animation.opts.queue\n\t\t\t})\n\t\t);\n\n\t\treturn animation;\n\t}\n\n\tjQuery.Animation = jQuery.extend(Animation, {\n\n\t\ttweeners: {\n\t\t\t\"*\": [function (prop, value) {\n\t\t\t\tvar tween = this.createTween(prop, value);\n\t\t\t\tadjustCSS(tween.elem, prop, rcssNum.exec(value), tween);\n\t\t\t\treturn tween;\n\t\t\t}]\n\t\t},\n\n\t\ttweener: function (props, callback) {\n\t\t\tif (isFunction(props)) {\n\t\t\t\tcallback = props;\n\t\t\t\tprops = [\"*\"];\n\t\t\t} else {\n\t\t\t\tprops = props.match(rnothtmlwhite);\n\t\t\t}\n\n\t\t\tvar prop,\n\t\t\t\tindex = 0,\n\t\t\t\tlength = props.length;\n\n\t\t\tfor (; index < length; index++) {\n\t\t\t\tprop = props[index];\n\t\t\t\tAnimation.tweeners[prop] = Animation.tweeners[prop] || [];\n\t\t\t\tAnimation.tweeners[prop].unshift(callback);\n\t\t\t}\n\t\t},\n\n\t\tprefilters: [defaultPrefilter],\n\n\t\tprefilter: function (callback, prepend) {\n\t\t\tif (prepend) {\n\t\t\t\tAnimation.prefilters.unshift(callback);\n\t\t\t} else {\n\t\t\t\tAnimation.prefilters.push(callback);\n\t\t\t}\n\t\t}\n\t});\n\n\tjQuery.speed = function (speed, easing, fn) {\n\t\tvar opt = speed && typeof speed === \"object\" ? jQuery.extend({}, speed) : {\n\t\t\tcomplete: fn || !fn && easing ||\n\t\t\t\tisFunction(speed) && speed,\n\t\t\tduration: speed,\n\t\t\teasing: fn && easing || easing && !isFunction(easing) && easing\n\t\t};\n\n\t\t// Go to the end state if fx are off\n\t\tif (jQuery.fx.off) {\n\t\t\topt.duration = 0;\n\n\t\t} else {\n\t\t\tif (typeof opt.duration !== \"number\") {\n\t\t\t\tif (opt.duration in jQuery.fx.speeds) {\n\t\t\t\t\topt.duration = jQuery.fx.speeds[opt.duration];\n\n\t\t\t\t} else {\n\t\t\t\t\topt.duration = jQuery.fx.speeds._default;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Normalize opt.queue - true/undefined/null -> \"fx\"\n\t\tif (opt.queue == null || opt.queue === true) {\n\t\t\topt.queue = \"fx\";\n\t\t}\n\n\t\t// Queueing\n\t\topt.old = opt.complete;\n\n\t\topt.complete = function () {\n\t\t\tif (isFunction(opt.old)) {\n\t\t\t\topt.old.call(this);\n\t\t\t}\n\n\t\t\tif (opt.queue) {\n\t\t\t\tjQuery.dequeue(this, opt.queue);\n\t\t\t}\n\t\t};\n\n\t\treturn opt;\n\t};\n\n\tjQuery.fn.extend({\n\t\tfadeTo: function (speed, to, easing, callback) {\n\n\t\t\t// Show any hidden elements after setting opacity to 0\n\t\t\treturn this.filter(isHiddenWithinTree).css(\"opacity\", 0).show()\n\n\t\t\t\t// Animate to the value specified\n\t\t\t\t.end().animate({ opacity: to }, speed, easing, callback);\n\t\t},\n\t\tanimate: function (prop, speed, easing, callback) {\n\t\t\tvar empty = jQuery.isEmptyObject(prop),\n\t\t\t\toptall = jQuery.speed(speed, easing, callback),\n\t\t\t\tdoAnimation = function () {\n\n\t\t\t\t\t// Operate on a copy of prop so per-property easing won't be lost\n\t\t\t\t\tvar anim = Animation(this, jQuery.extend({}, prop), optall);\n\n\t\t\t\t\t// Empty animations, or finishing resolves immediately\n\t\t\t\t\tif (empty || dataPriv.get(this, \"finish\")) {\n\t\t\t\t\t\tanim.stop(true);\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\tdoAnimation.finish = doAnimation;\n\n\t\t\treturn empty || optall.queue === false ?\n\t\t\t\tthis.each(doAnimation) :\n\t\t\t\tthis.queue(optall.queue, doAnimation);\n\t\t},\n\t\tstop: function (type, clearQueue, gotoEnd) {\n\t\t\tvar stopQueue = function (hooks) {\n\t\t\t\tvar stop = hooks.stop;\n\t\t\t\tdelete hooks.stop;\n\t\t\t\tstop(gotoEnd);\n\t\t\t};\n\n\t\t\tif (typeof type !== \"string\") {\n\t\t\t\tgotoEnd = clearQueue;\n\t\t\t\tclearQueue = type;\n\t\t\t\ttype = undefined;\n\t\t\t}\n\t\t\tif (clearQueue) {\n\t\t\t\tthis.queue(type || \"fx\", []);\n\t\t\t}\n\n\t\t\treturn this.each(function () {\n\t\t\t\tvar dequeue = true,\n\t\t\t\t\tindex = type != null && type + \"queueHooks\",\n\t\t\t\t\ttimers = jQuery.timers,\n\t\t\t\t\tdata = dataPriv.get(this);\n\n\t\t\t\tif (index) {\n\t\t\t\t\tif (data[index] && data[index].stop) {\n\t\t\t\t\t\tstopQueue(data[index]);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tfor (index in data) {\n\t\t\t\t\t\tif (data[index] && data[index].stop && rrun.test(index)) {\n\t\t\t\t\t\t\tstopQueue(data[index]);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tfor (index = timers.length; index--;) {\n\t\t\t\t\tif (timers[index].elem === this &&\n\t\t\t\t\t\t(type == null || timers[index].queue === type)) {\n\n\t\t\t\t\t\ttimers[index].anim.stop(gotoEnd);\n\t\t\t\t\t\tdequeue = false;\n\t\t\t\t\t\ttimers.splice(index, 1);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Start the next in the queue if the last step wasn't forced.\n\t\t\t\t// Timers currently will call their complete callbacks, which\n\t\t\t\t// will dequeue but only if they were gotoEnd.\n\t\t\t\tif (dequeue || !gotoEnd) {\n\t\t\t\t\tjQuery.dequeue(this, type);\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\t\tfinish: function (type) {\n\t\t\tif (type !== false) {\n\t\t\t\ttype = type || \"fx\";\n\t\t\t}\n\t\t\treturn this.each(function () {\n\t\t\t\tvar index,\n\t\t\t\t\tdata = dataPriv.get(this),\n\t\t\t\t\tqueue = data[type + \"queue\"],\n\t\t\t\t\thooks = data[type + \"queueHooks\"],\n\t\t\t\t\ttimers = jQuery.timers,\n\t\t\t\t\tlength = queue ? queue.length : 0;\n\n\t\t\t\t// Enable finishing flag on private data\n\t\t\t\tdata.finish = true;\n\n\t\t\t\t// Empty the queue first\n\t\t\t\tjQuery.queue(this, type, []);\n\n\t\t\t\tif (hooks && hooks.stop) {\n\t\t\t\t\thooks.stop.call(this, true);\n\t\t\t\t}\n\n\t\t\t\t// Look for any active animations, and finish them\n\t\t\t\tfor (index = timers.length; index--;) {\n\t\t\t\t\tif (timers[index].elem === this && timers[index].queue === type) {\n\t\t\t\t\t\ttimers[index].anim.stop(true);\n\t\t\t\t\t\ttimers.splice(index, 1);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Look for any animations in the old queue and finish them\n\t\t\t\tfor (index = 0; index < length; index++) {\n\t\t\t\t\tif (queue[index] && queue[index].finish) {\n\t\t\t\t\t\tqueue[index].finish.call(this);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Turn off finishing flag\n\t\t\t\tdelete data.finish;\n\t\t\t});\n\t\t}\n\t});\n\n\tjQuery.each([\"toggle\", \"show\", \"hide\"], function (_i, name) {\n\t\tvar cssFn = jQuery.fn[name];\n\t\tjQuery.fn[name] = function (speed, easing, callback) {\n\t\t\treturn speed == null || typeof speed === \"boolean\" ?\n\t\t\t\tcssFn.apply(this, arguments) :\n\t\t\t\tthis.animate(genFx(name, true), speed, easing, callback);\n\t\t};\n\t});\n\n\t// Generate shortcuts for custom animations\n\tjQuery.each({\n\t\tslideDown: genFx(\"show\"),\n\t\tslideUp: genFx(\"hide\"),\n\t\tslideToggle: genFx(\"toggle\"),\n\t\tfadeIn: { opacity: \"show\" },\n\t\tfadeOut: { opacity: \"hide\" },\n\t\tfadeToggle: { opacity: \"toggle\" }\n\t}, function (name, props) {\n\t\tjQuery.fn[name] = function (speed, easing, callback) {\n\t\t\treturn this.animate(props, speed, easing, callback);\n\t\t};\n\t});\n\n\tjQuery.timers = [];\n\tjQuery.fx.tick = function () {\n\t\tvar timer,\n\t\t\ti = 0,\n\t\t\ttimers = jQuery.timers;\n\n\t\tfxNow = Date.now();\n\n\t\tfor (; i < timers.length; i++) {\n\t\t\ttimer = timers[i];\n\n\t\t\t// Run the timer and safely remove it when done (allowing for external removal)\n\t\t\tif (!timer() && timers[i] === timer) {\n\t\t\t\ttimers.splice(i--, 1);\n\t\t\t}\n\t\t}\n\n\t\tif (!timers.length) {\n\t\t\tjQuery.fx.stop();\n\t\t}\n\t\tfxNow = undefined;\n\t};\n\n\tjQuery.fx.timer = function (timer) {\n\t\tjQuery.timers.push(timer);\n\t\tjQuery.fx.start();\n\t};\n\n\tjQuery.fx.interval = 13;\n\tjQuery.fx.start = function () {\n\t\tif (inProgress) {\n\t\t\treturn;\n\t\t}\n\n\t\tinProgress = true;\n\t\tschedule();\n\t};\n\n\tjQuery.fx.stop = function () {\n\t\tinProgress = null;\n\t};\n\n\tjQuery.fx.speeds = {\n\t\tslow: 600,\n\t\tfast: 200,\n\n\t\t// Default speed\n\t\t_default: 400\n\t};\n\n\n\t// Based off of the plugin by Clint Helfers, with permission.\n\tjQuery.fn.delay = function (time, type) {\n\t\ttime = jQuery.fx ? jQuery.fx.speeds[time] || time : time;\n\t\ttype = type || \"fx\";\n\n\t\treturn this.queue(type, function (next, hooks) {\n\t\t\tvar timeout = window.setTimeout(next, time);\n\t\t\thooks.stop = function () {\n\t\t\t\twindow.clearTimeout(timeout);\n\t\t\t};\n\t\t});\n\t};\n\n\n\t(function () {\n\t\tvar input = document.createElement(\"input\"),\n\t\t\tselect = document.createElement(\"select\"),\n\t\t\topt = select.appendChild(document.createElement(\"option\"));\n\n\t\tinput.type = \"checkbox\";\n\n\t\t// Support: Android <=4.3 only\n\t\t// Default value for a checkbox should be \"on\"\n\t\tsupport.checkOn = input.value !== \"\";\n\n\t\t// Support: IE <=11 only\n\t\t// Must access selectedIndex to make default options select\n\t\tsupport.optSelected = opt.selected;\n\n\t\t// Support: IE <=11 only\n\t\t// An input loses its value after becoming a radio\n\t\tinput = document.createElement(\"input\");\n\t\tinput.value = \"t\";\n\t\tinput.type = \"radio\";\n\t\tsupport.radioValue = input.value === \"t\";\n\t})();\n\n\n\tvar boolHook,\n\t\tattrHandle = jQuery.expr.attrHandle;\n\n\tjQuery.fn.extend({\n\t\tattr: function (name, value) {\n\t\t\treturn access(this, jQuery.attr, name, value, arguments.length > 1);\n\t\t},\n\n\t\tremoveAttr: function (name) {\n\t\t\treturn this.each(function () {\n\t\t\t\tjQuery.removeAttr(this, name);\n\t\t\t});\n\t\t}\n\t});\n\n\tjQuery.extend({\n\t\tattr: function (elem, name, value) {\n\t\t\tvar ret, hooks,\n\t\t\t\tnType = elem.nodeType;\n\n\t\t\t// Don't get/set attributes on text, comment and attribute nodes\n\t\t\tif (nType === 3 || nType === 8 || nType === 2) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Fallback to prop when attributes are not supported\n\t\t\tif (typeof elem.getAttribute === \"undefined\") {\n\t\t\t\treturn jQuery.prop(elem, name, value);\n\t\t\t}\n\n\t\t\t// Attribute hooks are determined by the lowercase version\n\t\t\t// Grab necessary hook if one is defined\n\t\t\tif (nType !== 1 || !jQuery.isXMLDoc(elem)) {\n\t\t\t\thooks = jQuery.attrHooks[name.toLowerCase()] ||\n\t\t\t\t\t(jQuery.expr.match.bool.test(name) ? boolHook : undefined);\n\t\t\t}\n\n\t\t\tif (value !== undefined) {\n\t\t\t\tif (value === null) {\n\t\t\t\t\tjQuery.removeAttr(elem, name);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (hooks && \"set\" in hooks &&\n\t\t\t\t\t(ret = hooks.set(elem, value, name)) !== undefined) {\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\n\t\t\t\telem.setAttribute(name, value + \"\");\n\t\t\t\treturn value;\n\t\t\t}\n\n\t\t\tif (hooks && \"get\" in hooks && (ret = hooks.get(elem, name)) !== null) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\tret = jQuery.find.attr(elem, name);\n\n\t\t\t// Non-existent attributes return null, we normalize to undefined\n\t\t\treturn ret == null ? undefined : ret;\n\t\t},\n\n\t\tattrHooks: {\n\t\t\ttype: {\n\t\t\t\tset: function (elem, value) {\n\t\t\t\t\tif (!support.radioValue && value === \"radio\" &&\n\t\t\t\t\t\tnodeName(elem, \"input\")) {\n\t\t\t\t\t\tvar val = elem.value;\n\t\t\t\t\t\telem.setAttribute(\"type\", value);\n\t\t\t\t\t\tif (val) {\n\t\t\t\t\t\t\telem.value = val;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn value;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tremoveAttr: function (elem, value) {\n\t\t\tvar name,\n\t\t\t\ti = 0,\n\n\t\t\t\t// Attribute names can contain non-HTML whitespace characters\n\t\t\t\t// https://html.spec.whatwg.org/multipage/syntax.html#attributes-2\n\t\t\t\tattrNames = value && value.match(rnothtmlwhite);\n\n\t\t\tif (attrNames && elem.nodeType === 1) {\n\t\t\t\twhile ((name = attrNames[i++])) {\n\t\t\t\t\telem.removeAttribute(name);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\n\t// Hooks for boolean attributes\n\tboolHook = {\n\t\tset: function (elem, value, name) {\n\t\t\tif (value === false) {\n\n\t\t\t\t// Remove boolean attributes when set to false\n\t\t\t\tjQuery.removeAttr(elem, name);\n\t\t\t} else {\n\t\t\t\telem.setAttribute(name, name);\n\t\t\t}\n\t\t\treturn name;\n\t\t}\n\t};\n\n\tjQuery.each(jQuery.expr.match.bool.source.match(/\\w+/g), function (_i, name) {\n\t\tvar getter = attrHandle[name] || jQuery.find.attr;\n\n\t\tattrHandle[name] = function (elem, name, isXML) {\n\t\t\tvar ret, handle,\n\t\t\t\tlowercaseName = name.toLowerCase();\n\n\t\t\tif (!isXML) {\n\n\t\t\t\t// Avoid an infinite loop by temporarily removing this function from the getter\n\t\t\t\thandle = attrHandle[lowercaseName];\n\t\t\t\tattrHandle[lowercaseName] = ret;\n\t\t\t\tret = getter(elem, name, isXML) != null ?\n\t\t\t\t\tlowercaseName :\n\t\t\t\t\tnull;\n\t\t\t\tattrHandle[lowercaseName] = handle;\n\t\t\t}\n\t\t\treturn ret;\n\t\t};\n\t});\n\n\n\n\n\tvar rfocusable = /^(?:input|select|textarea|button)$/i,\n\t\trclickable = /^(?:a|area)$/i;\n\n\tjQuery.fn.extend({\n\t\tprop: function (name, value) {\n\t\t\treturn access(this, jQuery.prop, name, value, arguments.length > 1);\n\t\t},\n\n\t\tremoveProp: function (name) {\n\t\t\treturn this.each(function () {\n\t\t\t\tdelete this[jQuery.propFix[name] || name];\n\t\t\t});\n\t\t}\n\t});\n\n\tjQuery.extend({\n\t\tprop: function (elem, name, value) {\n\t\t\tvar ret, hooks,\n\t\t\t\tnType = elem.nodeType;\n\n\t\t\t// Don't get/set properties on text, comment and attribute nodes\n\t\t\tif (nType === 3 || nType === 8 || nType === 2) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (nType !== 1 || !jQuery.isXMLDoc(elem)) {\n\n\t\t\t\t// Fix name and attach hooks\n\t\t\t\tname = jQuery.propFix[name] || name;\n\t\t\t\thooks = jQuery.propHooks[name];\n\t\t\t}\n\n\t\t\tif (value !== undefined) {\n\t\t\t\tif (hooks && \"set\" in hooks &&\n\t\t\t\t\t(ret = hooks.set(elem, value, name)) !== undefined) {\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\n\t\t\t\treturn (elem[name] = value);\n\t\t\t}\n\n\t\t\tif (hooks && \"get\" in hooks && (ret = hooks.get(elem, name)) !== null) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\treturn elem[name];\n\t\t},\n\n\t\tpropHooks: {\n\t\t\ttabIndex: {\n\t\t\t\tget: function (elem) {\n\n\t\t\t\t\t// Support: IE <=9 - 11 only\n\t\t\t\t\t// elem.tabIndex doesn't always return the\n\t\t\t\t\t// correct value when it hasn't been explicitly set\n\t\t\t\t\t// Use proper attribute retrieval (trac-12072)\n\t\t\t\t\tvar tabindex = jQuery.find.attr(elem, \"tabindex\");\n\n\t\t\t\t\tif (tabindex) {\n\t\t\t\t\t\treturn parseInt(tabindex, 10);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (\n\t\t\t\t\t\trfocusable.test(elem.nodeName) ||\n\t\t\t\t\t\trclickable.test(elem.nodeName) &&\n\t\t\t\t\t\telem.href\n\t\t\t\t\t) {\n\t\t\t\t\t\treturn 0;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn -1;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tpropFix: {\n\t\t\t\"for\": \"htmlFor\",\n\t\t\t\"class\": \"className\"\n\t\t}\n\t});\n\n\t// Support: IE <=11 only\n\t// Accessing the selectedIndex property\n\t// forces the browser to respect setting selected\n\t// on the option\n\t// The getter ensures a default option is selected\n\t// when in an optgroup\n\t// eslint rule \"no-unused-expressions\" is disabled for this code\n\t// since it considers such accessions noop\n\tif (!support.optSelected) {\n\t\tjQuery.propHooks.selected = {\n\t\t\tget: function (elem) {\n\n\t\t\t\t/* eslint no-unused-expressions: \"off\" */\n\n\t\t\t\tvar parent = elem.parentNode;\n\t\t\t\tif (parent && parent.parentNode) {\n\t\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t\t}\n\t\t\t\treturn null;\n\t\t\t},\n\t\t\tset: function (elem) {\n\n\t\t\t\t/* eslint no-unused-expressions: \"off\" */\n\n\t\t\t\tvar parent = elem.parentNode;\n\t\t\t\tif (parent) {\n\t\t\t\t\tparent.selectedIndex;\n\n\t\t\t\t\tif (parent.parentNode) {\n\t\t\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n\n\tjQuery.each([\n\t\t\"tabIndex\",\n\t\t\"readOnly\",\n\t\t\"maxLength\",\n\t\t\"cellSpacing\",\n\t\t\"cellPadding\",\n\t\t\"rowSpan\",\n\t\t\"colSpan\",\n\t\t\"useMap\",\n\t\t\"frameBorder\",\n\t\t\"contentEditable\"\n\t], function () {\n\t\tjQuery.propFix[this.toLowerCase()] = this;\n\t});\n\n\n\n\n\t// Strip and collapse whitespace according to HTML spec\n\t// https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace\n\tfunction stripAndCollapse(value) {\n\t\tvar tokens = value.match(rnothtmlwhite) || [];\n\t\treturn tokens.join(\" \");\n\t}\n\n\n\tfunction getClass(elem) {\n\t\treturn elem.getAttribute && elem.getAttribute(\"class\") || \"\";\n\t}\n\n\tfunction classesToArray(value) {\n\t\tif (Array.isArray(value)) {\n\t\t\treturn value;\n\t\t}\n\t\tif (typeof value === \"string\") {\n\t\t\treturn value.match(rnothtmlwhite) || [];\n\t\t}\n\t\treturn [];\n\t}\n\n\tjQuery.fn.extend({\n\t\taddClass: function (value) {\n\t\t\tvar classNames, cur, curValue, className, i, finalValue;\n\n\t\t\tif (isFunction(value)) {\n\t\t\t\treturn this.each(function (j) {\n\t\t\t\t\tjQuery(this).addClass(value.call(this, j, getClass(this)));\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tclassNames = classesToArray(value);\n\n\t\t\tif (classNames.length) {\n\t\t\t\treturn this.each(function () {\n\t\t\t\t\tcurValue = getClass(this);\n\t\t\t\t\tcur = this.nodeType === 1 && (\" \" + stripAndCollapse(curValue) + \" \");\n\n\t\t\t\t\tif (cur) {\n\t\t\t\t\t\tfor (i = 0; i < classNames.length; i++) {\n\t\t\t\t\t\t\tclassName = classNames[i];\n\t\t\t\t\t\t\tif (cur.indexOf(\" \" + className + \" \") < 0) {\n\t\t\t\t\t\t\t\tcur += className + \" \";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\t\tfinalValue = stripAndCollapse(cur);\n\t\t\t\t\t\tif (curValue !== finalValue) {\n\t\t\t\t\t\t\tthis.setAttribute(\"class\", finalValue);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn this;\n\t\t},\n\n\t\tremoveClass: function (value) {\n\t\t\tvar classNames, cur, curValue, className, i, finalValue;\n\n\t\t\tif (isFunction(value)) {\n\t\t\t\treturn this.each(function (j) {\n\t\t\t\t\tjQuery(this).removeClass(value.call(this, j, getClass(this)));\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (!arguments.length) {\n\t\t\t\treturn this.attr(\"class\", \"\");\n\t\t\t}\n\n\t\t\tclassNames = classesToArray(value);\n\n\t\t\tif (classNames.length) {\n\t\t\t\treturn this.each(function () {\n\t\t\t\t\tcurValue = getClass(this);\n\n\t\t\t\t\t// This expression is here for better compressibility (see addClass)\n\t\t\t\t\tcur = this.nodeType === 1 && (\" \" + stripAndCollapse(curValue) + \" \");\n\n\t\t\t\t\tif (cur) {\n\t\t\t\t\t\tfor (i = 0; i < classNames.length; i++) {\n\t\t\t\t\t\t\tclassName = classNames[i];\n\n\t\t\t\t\t\t\t// Remove *all* instances\n\t\t\t\t\t\t\twhile (cur.indexOf(\" \" + className + \" \") > -1) {\n\t\t\t\t\t\t\t\tcur = cur.replace(\" \" + className + \" \", \" \");\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\t\tfinalValue = stripAndCollapse(cur);\n\t\t\t\t\t\tif (curValue !== finalValue) {\n\t\t\t\t\t\t\tthis.setAttribute(\"class\", finalValue);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn this;\n\t\t},\n\n\t\ttoggleClass: function (value, stateVal) {\n\t\t\tvar classNames, className, i, self,\n\t\t\t\ttype = typeof value,\n\t\t\t\tisValidValue = type === \"string\" || Array.isArray(value);\n\n\t\t\tif (isFunction(value)) {\n\t\t\t\treturn this.each(function (i) {\n\t\t\t\t\tjQuery(this).toggleClass(\n\t\t\t\t\t\tvalue.call(this, i, getClass(this), stateVal),\n\t\t\t\t\t\tstateVal\n\t\t\t\t\t);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (typeof stateVal === \"boolean\" && isValidValue) {\n\t\t\t\treturn stateVal ? this.addClass(value) : this.removeClass(value);\n\t\t\t}\n\n\t\t\tclassNames = classesToArray(value);\n\n\t\t\treturn this.each(function () {\n\t\t\t\tif (isValidValue) {\n\n\t\t\t\t\t// Toggle individual class names\n\t\t\t\t\tself = jQuery(this);\n\n\t\t\t\t\tfor (i = 0; i < classNames.length; i++) {\n\t\t\t\t\t\tclassName = classNames[i];\n\n\t\t\t\t\t\t// Check each className given, space separated list\n\t\t\t\t\t\tif (self.hasClass(className)) {\n\t\t\t\t\t\t\tself.removeClass(className);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tself.addClass(className);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Toggle whole class name\n\t\t\t\t} else if (value === undefined || type === \"boolean\") {\n\t\t\t\t\tclassName = getClass(this);\n\t\t\t\t\tif (className) {\n\n\t\t\t\t\t\t// Store className if set\n\t\t\t\t\t\tdataPriv.set(this, \"__className__\", className);\n\t\t\t\t\t}\n\n\t\t\t\t\t// If the element has a class name or if we're passed `false`,\n\t\t\t\t\t// then remove the whole classname (if there was one, the above saved it).\n\t\t\t\t\t// Otherwise bring back whatever was previously saved (if anything),\n\t\t\t\t\t// falling back to the empty string if nothing was stored.\n\t\t\t\t\tif (this.setAttribute) {\n\t\t\t\t\t\tthis.setAttribute(\"class\",\n\t\t\t\t\t\t\tclassName || value === false ?\n\t\t\t\t\t\t\t\t\"\" :\n\t\t\t\t\t\t\t\tdataPriv.get(this, \"__className__\") || \"\"\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\thasClass: function (selector) {\n\t\t\tvar className, elem,\n\t\t\t\ti = 0;\n\n\t\t\tclassName = \" \" + selector + \" \";\n\t\t\twhile ((elem = this[i++])) {\n\t\t\t\tif (elem.nodeType === 1 &&\n\t\t\t\t\t(\" \" + stripAndCollapse(getClass(elem)) + \" \").indexOf(className) > -1) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn false;\n\t\t}\n\t});\n\n\n\n\n\tvar rreturn = /\\r/g;\n\n\tjQuery.fn.extend({\n\t\tval: function (value) {\n\t\t\tvar hooks, ret, valueIsFunction,\n\t\t\t\telem = this[0];\n\n\t\t\tif (!arguments.length) {\n\t\t\t\tif (elem) {\n\t\t\t\t\thooks = jQuery.valHooks[elem.type] ||\n\t\t\t\t\t\tjQuery.valHooks[elem.nodeName.toLowerCase()];\n\n\t\t\t\t\tif (hooks &&\n\t\t\t\t\t\t\"get\" in hooks &&\n\t\t\t\t\t\t(ret = hooks.get(elem, \"value\")) !== undefined\n\t\t\t\t\t) {\n\t\t\t\t\t\treturn ret;\n\t\t\t\t\t}\n\n\t\t\t\t\tret = elem.value;\n\n\t\t\t\t\t// Handle most common string cases\n\t\t\t\t\tif (typeof ret === \"string\") {\n\t\t\t\t\t\treturn ret.replace(rreturn, \"\");\n\t\t\t\t\t}\n\n\t\t\t\t\t// Handle cases where value is null/undef or number\n\t\t\t\t\treturn ret == null ? \"\" : ret;\n\t\t\t\t}\n\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvalueIsFunction = isFunction(value);\n\n\t\t\treturn this.each(function (i) {\n\t\t\t\tvar val;\n\n\t\t\t\tif (this.nodeType !== 1) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (valueIsFunction) {\n\t\t\t\t\tval = value.call(this, i, jQuery(this).val());\n\t\t\t\t} else {\n\t\t\t\t\tval = value;\n\t\t\t\t}\n\n\t\t\t\t// Treat null/undefined as \"\"; convert numbers to string\n\t\t\t\tif (val == null) {\n\t\t\t\t\tval = \"\";\n\n\t\t\t\t} else if (typeof val === \"number\") {\n\t\t\t\t\tval += \"\";\n\n\t\t\t\t} else if (Array.isArray(val)) {\n\t\t\t\t\tval = jQuery.map(val, function (value) {\n\t\t\t\t\t\treturn value == null ? \"\" : value + \"\";\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\thooks = jQuery.valHooks[this.type] || jQuery.valHooks[this.nodeName.toLowerCase()];\n\n\t\t\t\t// If set returns undefined, fall back to normal setting\n\t\t\t\tif (!hooks || !(\"set\" in hooks) || hooks.set(this, val, \"value\") === undefined) {\n\t\t\t\t\tthis.value = val;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t});\n\n\tjQuery.extend({\n\t\tvalHooks: {\n\t\t\toption: {\n\t\t\t\tget: function (elem) {\n\n\t\t\t\t\tvar val = jQuery.find.attr(elem, \"value\");\n\t\t\t\t\treturn val != null ?\n\t\t\t\t\t\tval :\n\n\t\t\t\t\t\t// Support: IE <=10 - 11 only\n\t\t\t\t\t\t// option.text throws exceptions (trac-14686, trac-14858)\n\t\t\t\t\t\t// Strip and collapse whitespace\n\t\t\t\t\t\t// https://html.spec.whatwg.org/#strip-and-collapse-whitespace\n\t\t\t\t\t\tstripAndCollapse(jQuery.text(elem));\n\t\t\t\t}\n\t\t\t},\n\t\t\tselect: {\n\t\t\t\tget: function (elem) {\n\t\t\t\t\tvar value, option, i,\n\t\t\t\t\t\toptions = elem.options,\n\t\t\t\t\t\tindex = elem.selectedIndex,\n\t\t\t\t\t\tone = elem.type === \"select-one\",\n\t\t\t\t\t\tvalues = one ? null : [],\n\t\t\t\t\t\tmax = one ? index + 1 : options.length;\n\n\t\t\t\t\tif (index < 0) {\n\t\t\t\t\t\ti = max;\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\ti = one ? index : 0;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Loop through all the selected options\n\t\t\t\t\tfor (; i < max; i++) {\n\t\t\t\t\t\toption = options[i];\n\n\t\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t\t// IE8-9 doesn't update selected after form reset (trac-2551)\n\t\t\t\t\t\tif ((option.selected || i === index) &&\n\n\t\t\t\t\t\t\t// Don't return options that are disabled or in a disabled optgroup\n\t\t\t\t\t\t\t!option.disabled &&\n\t\t\t\t\t\t\t(!option.parentNode.disabled ||\n\t\t\t\t\t\t\t\t!nodeName(option.parentNode, \"optgroup\"))) {\n\n\t\t\t\t\t\t\t// Get the specific value for the option\n\t\t\t\t\t\t\tvalue = jQuery(option).val();\n\n\t\t\t\t\t\t\t// We don't need an array for one selects\n\t\t\t\t\t\t\tif (one) {\n\t\t\t\t\t\t\t\treturn value;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Multi-Selects return an array\n\t\t\t\t\t\t\tvalues.push(value);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn values;\n\t\t\t\t},\n\n\t\t\t\tset: function (elem, value) {\n\t\t\t\t\tvar optionSet, option,\n\t\t\t\t\t\toptions = elem.options,\n\t\t\t\t\t\tvalues = jQuery.makeArray(value),\n\t\t\t\t\t\ti = options.length;\n\n\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\toption = options[i];\n\n\t\t\t\t\t\t/* eslint-disable no-cond-assign */\n\n\t\t\t\t\t\tif (option.selected =\n\t\t\t\t\t\t\tjQuery.inArray(jQuery.valHooks.option.get(option), values) > -1\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\toptionSet = true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t/* eslint-enable no-cond-assign */\n\t\t\t\t\t}\n\n\t\t\t\t\t// Force browsers to behave consistently when non-matching value is set\n\t\t\t\t\tif (!optionSet) {\n\t\t\t\t\t\telem.selectedIndex = -1;\n\t\t\t\t\t}\n\t\t\t\t\treturn values;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\n\t// Radios and checkboxes getter/setter\n\tjQuery.each([\"radio\", \"checkbox\"], function () {\n\t\tjQuery.valHooks[this] = {\n\t\t\tset: function (elem, value) {\n\t\t\t\tif (Array.isArray(value)) {\n\t\t\t\t\treturn (elem.checked = jQuery.inArray(jQuery(elem).val(), value) > -1);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\tif (!support.checkOn) {\n\t\t\tjQuery.valHooks[this].get = function (elem) {\n\t\t\t\treturn elem.getAttribute(\"value\") === null ? \"on\" : elem.value;\n\t\t\t};\n\t\t}\n\t});\n\n\n\n\n\t// Return jQuery for attributes-only inclusion\n\tvar location = window.location;\n\n\tvar nonce = { guid: Date.now() };\n\n\tvar rquery = (/\\?/);\n\n\n\n\t// Cross-browser xml parsing\n\tjQuery.parseXML = function (data) {\n\t\tvar xml, parserErrorElem;\n\t\tif (!data || typeof data !== \"string\") {\n\t\t\treturn null;\n\t\t}\n\n\t\t// Support: IE 9 - 11 only\n\t\t// IE throws on parseFromString with invalid input.\n\t\ttry {\n\t\t\txml = (new window.DOMParser()).parseFromString(data, \"text/xml\");\n\t\t} catch (e) { }\n\n\t\tparserErrorElem = xml && xml.getElementsByTagName(\"parsererror\")[0];\n\t\tif (!xml || parserErrorElem) {\n\t\t\tjQuery.error(\"Invalid XML: \" + (\n\t\t\t\tparserErrorElem ?\n\t\t\t\t\tjQuery.map(parserErrorElem.childNodes, function (el) {\n\t\t\t\t\t\treturn el.textContent;\n\t\t\t\t\t}).join(\"\\n\") :\n\t\t\t\t\tdata\n\t\t\t));\n\t\t}\n\t\treturn xml;\n\t};\n\n\n\tvar rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,\n\t\tstopPropagationCallback = function (e) {\n\t\t\te.stopPropagation();\n\t\t};\n\n\tjQuery.extend(jQuery.event, {\n\n\t\ttrigger: function (event, data, elem, onlyHandlers) {\n\n\t\t\tvar i, cur, tmp, bubbleType, ontype, handle, special, lastElement,\n\t\t\t\teventPath = [elem || document],\n\t\t\t\ttype = hasOwn.call(event, \"type\") ? event.type : event,\n\t\t\t\tnamespaces = hasOwn.call(event, \"namespace\") ? event.namespace.split(\".\") : [];\n\n\t\t\tcur = lastElement = tmp = elem = elem || document;\n\n\t\t\t// Don't do events on text and comment nodes\n\t\t\tif (elem.nodeType === 3 || elem.nodeType === 8) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// focus/blur morphs to focusin/out; ensure we're not firing them right now\n\t\t\tif (rfocusMorph.test(type + jQuery.event.triggered)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (type.indexOf(\".\") > -1) {\n\n\t\t\t\t// Namespaced trigger; create a regexp to match event type in handle()\n\t\t\t\tnamespaces = type.split(\".\");\n\t\t\t\ttype = namespaces.shift();\n\t\t\t\tnamespaces.sort();\n\t\t\t}\n\t\t\tontype = type.indexOf(\":\") < 0 && \"on\" + type;\n\n\t\t\t// Caller can pass in a jQuery.Event object, Object, or just an event type string\n\t\t\tevent = event[jQuery.expando] ?\n\t\t\t\tevent :\n\t\t\t\tnew jQuery.Event(type, typeof event === \"object\" && event);\n\n\t\t\t// Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)\n\t\t\tevent.isTrigger = onlyHandlers ? 2 : 3;\n\t\t\tevent.namespace = namespaces.join(\".\");\n\t\t\tevent.rnamespace = event.namespace ?\n\t\t\t\tnew RegExp(\"(^|\\\\.)\" + namespaces.join(\"\\\\.(?:.*\\\\.|)\") + \"(\\\\.|$)\") :\n\t\t\t\tnull;\n\n\t\t\t// Clean up the event in case it is being reused\n\t\t\tevent.result = undefined;\n\t\t\tif (!event.target) {\n\t\t\t\tevent.target = elem;\n\t\t\t}\n\n\t\t\t// Clone any incoming data and prepend the event, creating the handler arg list\n\t\t\tdata = data == null ?\n\t\t\t\t[event] :\n\t\t\t\tjQuery.makeArray(data, [event]);\n\n\t\t\t// Allow special events to draw outside the lines\n\t\t\tspecial = jQuery.event.special[type] || {};\n\t\t\tif (!onlyHandlers && special.trigger && special.trigger.apply(elem, data) === false) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Determine event propagation path in advance, per W3C events spec (trac-9951)\n\t\t\t// Bubble up to document, then to window; watch for a global ownerDocument var (trac-9724)\n\t\t\tif (!onlyHandlers && !special.noBubble && !isWindow(elem)) {\n\n\t\t\t\tbubbleType = special.delegateType || type;\n\t\t\t\tif (!rfocusMorph.test(bubbleType + type)) {\n\t\t\t\t\tcur = cur.parentNode;\n\t\t\t\t}\n\t\t\t\tfor (; cur; cur = cur.parentNode) {\n\t\t\t\t\teventPath.push(cur);\n\t\t\t\t\ttmp = cur;\n\t\t\t\t}\n\n\t\t\t\t// Only add window if we got to document (e.g., not plain obj or detached DOM)\n\t\t\t\tif (tmp === (elem.ownerDocument || document)) {\n\t\t\t\t\teventPath.push(tmp.defaultView || tmp.parentWindow || window);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Fire handlers on the event path\n\t\t\ti = 0;\n\t\t\twhile ((cur = eventPath[i++]) && !event.isPropagationStopped()) {\n\t\t\t\tlastElement = cur;\n\t\t\t\tevent.type = i > 1 ?\n\t\t\t\t\tbubbleType :\n\t\t\t\t\tspecial.bindType || type;\n\n\t\t\t\t// jQuery handler\n\t\t\t\thandle = (dataPriv.get(cur, \"events\") || Object.create(null))[event.type] &&\n\t\t\t\t\tdataPriv.get(cur, \"handle\");\n\t\t\t\tif (handle) {\n\t\t\t\t\thandle.apply(cur, data);\n\t\t\t\t}\n\n\t\t\t\t// Native handler\n\t\t\t\thandle = ontype && cur[ontype];\n\t\t\t\tif (handle && handle.apply && acceptData(cur)) {\n\t\t\t\t\tevent.result = handle.apply(cur, data);\n\t\t\t\t\tif (event.result === false) {\n\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tevent.type = type;\n\n\t\t\t// If nobody prevented the default action, do it now\n\t\t\tif (!onlyHandlers && !event.isDefaultPrevented()) {\n\n\t\t\t\tif ((!special._default ||\n\t\t\t\t\tspecial._default.apply(eventPath.pop(), data) === false) &&\n\t\t\t\t\tacceptData(elem)) {\n\n\t\t\t\t\t// Call a native DOM method on the target with the same name as the event.\n\t\t\t\t\t// Don't do default actions on window, that's where global variables be (trac-6170)\n\t\t\t\t\tif (ontype && isFunction(elem[type]) && !isWindow(elem)) {\n\n\t\t\t\t\t\t// Don't re-trigger an onFOO event when we call its FOO() method\n\t\t\t\t\t\ttmp = elem[ontype];\n\n\t\t\t\t\t\tif (tmp) {\n\t\t\t\t\t\t\telem[ontype] = null;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Prevent re-triggering of the same event, since we already bubbled it above\n\t\t\t\t\t\tjQuery.event.triggered = type;\n\n\t\t\t\t\t\tif (event.isPropagationStopped()) {\n\t\t\t\t\t\t\tlastElement.addEventListener(type, stopPropagationCallback);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\telem[type]();\n\n\t\t\t\t\t\tif (event.isPropagationStopped()) {\n\t\t\t\t\t\t\tlastElement.removeEventListener(type, stopPropagationCallback);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tjQuery.event.triggered = undefined;\n\n\t\t\t\t\t\tif (tmp) {\n\t\t\t\t\t\t\telem[ontype] = tmp;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn event.result;\n\t\t},\n\n\t\t// Piggyback on a donor event to simulate a different one\n\t\t// Used only for `focus(in | out)` events\n\t\tsimulate: function (type, elem, event) {\n\t\t\tvar e = jQuery.extend(\n\t\t\t\tnew jQuery.Event(),\n\t\t\t\tevent,\n\t\t\t\t{\n\t\t\t\t\ttype: type,\n\t\t\t\t\tisSimulated: true\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tjQuery.event.trigger(e, null, elem);\n\t\t}\n\n\t});\n\n\tjQuery.fn.extend({\n\n\t\ttrigger: function (type, data) {\n\t\t\treturn this.each(function () {\n\t\t\t\tjQuery.event.trigger(type, data, this);\n\t\t\t});\n\t\t},\n\t\ttriggerHandler: function (type, data) {\n\t\t\tvar elem = this[0];\n\t\t\tif (elem) {\n\t\t\t\treturn jQuery.event.trigger(type, data, elem, true);\n\t\t\t}\n\t\t}\n\t});\n\n\n\tvar\n\t\trbracket = /\\[\\]$/,\n\t\trCRLF = /\\r?\\n/g,\n\t\trsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,\n\t\trsubmittable = /^(?:input|select|textarea|keygen)/i;\n\n\tfunction buildParams(prefix, obj, traditional, add) {\n\t\tvar name;\n\n\t\tif (Array.isArray(obj)) {\n\n\t\t\t// Serialize array item.\n\t\t\tjQuery.each(obj, function (i, v) {\n\t\t\t\tif (traditional || rbracket.test(prefix)) {\n\n\t\t\t\t\t// Treat each array item as a scalar.\n\t\t\t\t\tadd(prefix, v);\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// Item is non-scalar (array or object), encode its numeric index.\n\t\t\t\t\tbuildParams(\n\t\t\t\t\t\tprefix + \"[\" + (typeof v === \"object\" && v != null ? i : \"\") + \"]\",\n\t\t\t\t\t\tv,\n\t\t\t\t\t\ttraditional,\n\t\t\t\t\t\tadd\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t});\n\n\t\t} else if (!traditional && toType(obj) === \"object\") {\n\n\t\t\t// Serialize object item.\n\t\t\tfor (name in obj) {\n\t\t\t\tbuildParams(prefix + \"[\" + name + \"]\", obj[name], traditional, add);\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// Serialize scalar item.\n\t\t\tadd(prefix, obj);\n\t\t}\n\t}\n\n\t// Serialize an array of form elements or a set of\n\t// key/values into a query string\n\tjQuery.param = function (a, traditional) {\n\t\tvar prefix,\n\t\t\ts = [],\n\t\t\tadd = function (key, valueOrFunction) {\n\n\t\t\t\t// If value is a function, invoke it and use its return value\n\t\t\t\tvar value = isFunction(valueOrFunction) ?\n\t\t\t\t\tvalueOrFunction() :\n\t\t\t\t\tvalueOrFunction;\n\n\t\t\t\ts[s.length] = encodeURIComponent(key) + \"=\" +\n\t\t\t\t\tencodeURIComponent(value == null ? \"\" : value);\n\t\t\t};\n\n\t\tif (a == null) {\n\t\t\treturn \"\";\n\t\t}\n\n\t\t// If an array was passed in, assume that it is an array of form elements.\n\t\tif (Array.isArray(a) || (a.jquery && !jQuery.isPlainObject(a))) {\n\n\t\t\t// Serialize the form elements\n\t\t\tjQuery.each(a, function () {\n\t\t\t\tadd(this.name, this.value);\n\t\t\t});\n\n\t\t} else {\n\n\t\t\t// If traditional, encode the \"old\" way (the way 1.3.2 or older\n\t\t\t// did it), otherwise encode params recursively.\n\t\t\tfor (prefix in a) {\n\t\t\t\tbuildParams(prefix, a[prefix], traditional, add);\n\t\t\t}\n\t\t}\n\n\t\t// Return the resulting serialization\n\t\treturn s.join(\"&\");\n\t};\n\n\tjQuery.fn.extend({\n\t\tserialize: function () {\n\t\t\treturn jQuery.param(this.serializeArray());\n\t\t},\n\t\tserializeArray: function () {\n\t\t\treturn this.map(function () {\n\n\t\t\t\t// Can add propHook for \"elements\" to filter or add form elements\n\t\t\t\tvar elements = jQuery.prop(this, \"elements\");\n\t\t\t\treturn elements ? jQuery.makeArray(elements) : this;\n\t\t\t}).filter(function () {\n\t\t\t\tvar type = this.type;\n\n\t\t\t\t// Use .is( \":disabled\" ) so that fieldset[disabled] works\n\t\t\t\treturn this.name && !jQuery(this).is(\":disabled\") &&\n\t\t\t\t\trsubmittable.test(this.nodeName) && !rsubmitterTypes.test(type) &&\n\t\t\t\t\t(this.checked || !rcheckableType.test(type));\n\t\t\t}).map(function (_i, elem) {\n\t\t\t\tvar val = jQuery(this).val();\n\n\t\t\t\tif (val == null) {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\n\t\t\t\tif (Array.isArray(val)) {\n\t\t\t\t\treturn jQuery.map(val, function (val) {\n\t\t\t\t\t\treturn { name: elem.name, value: val.replace(rCRLF, \"\\r\\n\") };\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\treturn { name: elem.name, value: val.replace(rCRLF, \"\\r\\n\") };\n\t\t\t}).get();\n\t\t}\n\t});\n\n\n\tvar\n\t\tr20 = /%20/g,\n\t\trhash = /#.*$/,\n\t\trantiCache = /([?&])_=[^&]*/,\n\t\trheaders = /^(.*?):[ \\t]*([^\\r\\n]*)$/mg,\n\n\t\t// trac-7653, trac-8125, trac-8152: local protocol detection\n\t\trlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,\n\t\trnoContent = /^(?:GET|HEAD)$/,\n\t\trprotocol = /^\\/\\//,\n\n\t\t/* Prefilters\n\t\t * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)\n\t\t * 2) These are called:\n\t\t *    - BEFORE asking for a transport\n\t\t *    - AFTER param serialization (s.data is a string if s.processData is true)\n\t\t * 3) key is the dataType\n\t\t * 4) the catchall symbol \"*\" can be used\n\t\t * 5) execution will start with transport dataType and THEN continue down to \"*\" if needed\n\t\t */\n\t\tprefilters = {},\n\n\t\t/* Transports bindings\n\t\t * 1) key is the dataType\n\t\t * 2) the catchall symbol \"*\" can be used\n\t\t * 3) selection will start with transport dataType and THEN go to \"*\" if needed\n\t\t */\n\t\ttransports = {},\n\n\t\t// Avoid comment-prolog char sequence (trac-10098); must appease lint and evade compression\n\t\tallTypes = \"*/\".concat(\"*\"),\n\n\t\t// Anchor tag for parsing the document origin\n\t\toriginAnchor = document.createElement(\"a\");\n\n\toriginAnchor.href = location.href;\n\n\t// Base \"constructor\" for jQuery.ajaxPrefilter and jQuery.ajaxTransport\n\tfunction addToPrefiltersOrTransports(structure) {\n\n\t\t// dataTypeExpression is optional and defaults to \"*\"\n\t\treturn function (dataTypeExpression, func) {\n\n\t\t\tif (typeof dataTypeExpression !== \"string\") {\n\t\t\t\tfunc = dataTypeExpression;\n\t\t\t\tdataTypeExpression = \"*\";\n\t\t\t}\n\n\t\t\tvar dataType,\n\t\t\t\ti = 0,\n\t\t\t\tdataTypes = dataTypeExpression.toLowerCase().match(rnothtmlwhite) || [];\n\n\t\t\tif (isFunction(func)) {\n\n\t\t\t\t// For each dataType in the dataTypeExpression\n\t\t\t\twhile ((dataType = dataTypes[i++])) {\n\n\t\t\t\t\t// Prepend if requested\n\t\t\t\t\tif (dataType[0] === \"+\") {\n\t\t\t\t\t\tdataType = dataType.slice(1) || \"*\";\n\t\t\t\t\t\t(structure[dataType] = structure[dataType] || []).unshift(func);\n\n\t\t\t\t\t\t// Otherwise append\n\t\t\t\t\t} else {\n\t\t\t\t\t\t(structure[dataType] = structure[dataType] || []).push(func);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n\n\t// Base inspection function for prefilters and transports\n\tfunction inspectPrefiltersOrTransports(structure, options, originalOptions, jqXHR) {\n\n\t\tvar inspected = {},\n\t\t\tseekingTransport = (structure === transports);\n\n\t\tfunction inspect(dataType) {\n\t\t\tvar selected;\n\t\t\tinspected[dataType] = true;\n\t\t\tjQuery.each(structure[dataType] || [], function (_, prefilterOrFactory) {\n\t\t\t\tvar dataTypeOrTransport = prefilterOrFactory(options, originalOptions, jqXHR);\n\t\t\t\tif (typeof dataTypeOrTransport === \"string\" &&\n\t\t\t\t\t!seekingTransport && !inspected[dataTypeOrTransport]) {\n\n\t\t\t\t\toptions.dataTypes.unshift(dataTypeOrTransport);\n\t\t\t\t\tinspect(dataTypeOrTransport);\n\t\t\t\t\treturn false;\n\t\t\t\t} else if (seekingTransport) {\n\t\t\t\t\treturn !(selected = dataTypeOrTransport);\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn selected;\n\t\t}\n\n\t\treturn inspect(options.dataTypes[0]) || !inspected[\"*\"] && inspect(\"*\");\n\t}\n\n\t// A special extend for ajax options\n\t// that takes \"flat\" options (not to be deep extended)\n\t// Fixes trac-9887\n\tfunction ajaxExtend(target, src) {\n\t\tvar key, deep,\n\t\t\tflatOptions = jQuery.ajaxSettings.flatOptions || {};\n\n\t\tfor (key in src) {\n\t\t\tif (src[key] !== undefined) {\n\t\t\t\t(flatOptions[key] ? target : (deep || (deep = {})))[key] = src[key];\n\t\t\t}\n\t\t}\n\t\tif (deep) {\n\t\t\tjQuery.extend(true, target, deep);\n\t\t}\n\n\t\treturn target;\n\t}\n\n\t/* Handles responses to an ajax request:\n\t * - finds the right dataType (mediates between content-type and expected dataType)\n\t * - returns the corresponding response\n\t */\n\tfunction ajaxHandleResponses(s, jqXHR, responses) {\n\n\t\tvar ct, type, finalDataType, firstDataType,\n\t\t\tcontents = s.contents,\n\t\t\tdataTypes = s.dataTypes;\n\n\t\t// Remove auto dataType and get content-type in the process\n\t\twhile (dataTypes[0] === \"*\") {\n\t\t\tdataTypes.shift();\n\t\t\tif (ct === undefined) {\n\t\t\t\tct = s.mimeType || jqXHR.getResponseHeader(\"Content-Type\");\n\t\t\t}\n\t\t}\n\n\t\t// Check if we're dealing with a known content-type\n\t\tif (ct) {\n\t\t\tfor (type in contents) {\n\t\t\t\tif (contents[type] && contents[type].test(ct)) {\n\t\t\t\t\tdataTypes.unshift(type);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Check to see if we have a response for the expected dataType\n\t\tif (dataTypes[0] in responses) {\n\t\t\tfinalDataType = dataTypes[0];\n\t\t} else {\n\n\t\t\t// Try convertible dataTypes\n\t\t\tfor (type in responses) {\n\t\t\t\tif (!dataTypes[0] || s.converters[type + \" \" + dataTypes[0]]) {\n\t\t\t\t\tfinalDataType = type;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (!firstDataType) {\n\t\t\t\t\tfirstDataType = type;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Or just use first one\n\t\t\tfinalDataType = finalDataType || firstDataType;\n\t\t}\n\n\t\t// If we found a dataType\n\t\t// We add the dataType to the list if needed\n\t\t// and return the corresponding response\n\t\tif (finalDataType) {\n\t\t\tif (finalDataType !== dataTypes[0]) {\n\t\t\t\tdataTypes.unshift(finalDataType);\n\t\t\t}\n\t\t\treturn responses[finalDataType];\n\t\t}\n\t}\n\n\t/* Chain conversions given the request and the original response\n\t * Also sets the responseXXX fields on the jqXHR instance\n\t */\n\tfunction ajaxConvert(s, response, jqXHR, isSuccess) {\n\t\tvar conv2, current, conv, tmp, prev,\n\t\t\tconverters = {},\n\n\t\t\t// Work with a copy of dataTypes in case we need to modify it for conversion\n\t\t\tdataTypes = s.dataTypes.slice();\n\n\t\t// Create converters map with lowercased keys\n\t\tif (dataTypes[1]) {\n\t\t\tfor (conv in s.converters) {\n\t\t\t\tconverters[conv.toLowerCase()] = s.converters[conv];\n\t\t\t}\n\t\t}\n\n\t\tcurrent = dataTypes.shift();\n\n\t\t// Convert to each sequential dataType\n\t\twhile (current) {\n\n\t\t\tif (s.responseFields[current]) {\n\t\t\t\tjqXHR[s.responseFields[current]] = response;\n\t\t\t}\n\n\t\t\t// Apply the dataFilter if provided\n\t\t\tif (!prev && isSuccess && s.dataFilter) {\n\t\t\t\tresponse = s.dataFilter(response, s.dataType);\n\t\t\t}\n\n\t\t\tprev = current;\n\t\t\tcurrent = dataTypes.shift();\n\n\t\t\tif (current) {\n\n\t\t\t\t// There's only work to do if current dataType is non-auto\n\t\t\t\tif (current === \"*\") {\n\n\t\t\t\t\tcurrent = prev;\n\n\t\t\t\t\t// Convert response if prev dataType is non-auto and differs from current\n\t\t\t\t} else if (prev !== \"*\" && prev !== current) {\n\n\t\t\t\t\t// Seek a direct converter\n\t\t\t\t\tconv = converters[prev + \" \" + current] || converters[\"* \" + current];\n\n\t\t\t\t\t// If none found, seek a pair\n\t\t\t\t\tif (!conv) {\n\t\t\t\t\t\tfor (conv2 in converters) {\n\n\t\t\t\t\t\t\t// If conv2 outputs current\n\t\t\t\t\t\t\ttmp = conv2.split(\" \");\n\t\t\t\t\t\t\tif (tmp[1] === current) {\n\n\t\t\t\t\t\t\t\t// If prev can be converted to accepted input\n\t\t\t\t\t\t\t\tconv = converters[prev + \" \" + tmp[0]] ||\n\t\t\t\t\t\t\t\t\tconverters[\"* \" + tmp[0]];\n\t\t\t\t\t\t\t\tif (conv) {\n\n\t\t\t\t\t\t\t\t\t// Condense equivalence converters\n\t\t\t\t\t\t\t\t\tif (conv === true) {\n\t\t\t\t\t\t\t\t\t\tconv = converters[conv2];\n\n\t\t\t\t\t\t\t\t\t\t// Otherwise, insert the intermediate dataType\n\t\t\t\t\t\t\t\t\t} else if (converters[conv2] !== true) {\n\t\t\t\t\t\t\t\t\t\tcurrent = tmp[0];\n\t\t\t\t\t\t\t\t\t\tdataTypes.unshift(tmp[1]);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Apply converter (if not an equivalence)\n\t\t\t\t\tif (conv !== true) {\n\n\t\t\t\t\t\t// Unless errors are allowed to bubble, catch and return them\n\t\t\t\t\t\tif (conv && s.throws) {\n\t\t\t\t\t\t\tresponse = conv(response);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\tresponse = conv(response);\n\t\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\tstate: \"parsererror\",\n\t\t\t\t\t\t\t\t\terror: conv ? e : \"No conversion from \" + prev + \" to \" + current\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn { state: \"success\", data: response };\n\t}\n\n\tjQuery.extend({\n\n\t\t// Counter for holding the number of active queries\n\t\tactive: 0,\n\n\t\t// Last-Modified header cache for next request\n\t\tlastModified: {},\n\t\tetag: {},\n\n\t\tajaxSettings: {\n\t\t\turl: location.href,\n\t\t\ttype: \"GET\",\n\t\t\tisLocal: rlocalProtocol.test(location.protocol),\n\t\t\tglobal: true,\n\t\t\tprocessData: true,\n\t\t\tasync: true,\n\t\t\tcontentType: \"application/x-www-form-urlencoded; charset=UTF-8\",\n\n\t\t\t/*\n\t\t\ttimeout: 0,\n\t\t\tdata: null,\n\t\t\tdataType: null,\n\t\t\tusername: null,\n\t\t\tpassword: null,\n\t\t\tcache: null,\n\t\t\tthrows: false,\n\t\t\ttraditional: false,\n\t\t\theaders: {},\n\t\t\t*/\n\n\t\t\taccepts: {\n\t\t\t\t\"*\": allTypes,\n\t\t\t\ttext: \"text/plain\",\n\t\t\t\thtml: \"text/html\",\n\t\t\t\txml: \"application/xml, text/xml\",\n\t\t\t\tjson: \"application/json, text/javascript\"\n\t\t\t},\n\n\t\t\tcontents: {\n\t\t\t\txml: /\\bxml\\b/,\n\t\t\t\thtml: /\\bhtml/,\n\t\t\t\tjson: /\\bjson\\b/\n\t\t\t},\n\n\t\t\tresponseFields: {\n\t\t\t\txml: \"responseXML\",\n\t\t\t\ttext: \"responseText\",\n\t\t\t\tjson: \"responseJSON\"\n\t\t\t},\n\n\t\t\t// Data converters\n\t\t\t// Keys separate source (or catchall \"*\") and destination types with a single space\n\t\t\tconverters: {\n\n\t\t\t\t// Convert anything to text\n\t\t\t\t\"* text\": String,\n\n\t\t\t\t// Text to html (true = no transformation)\n\t\t\t\t\"text html\": true,\n\n\t\t\t\t// Evaluate text as a json expression\n\t\t\t\t\"text json\": JSON.parse,\n\n\t\t\t\t// Parse text as xml\n\t\t\t\t\"text xml\": jQuery.parseXML\n\t\t\t},\n\n\t\t\t// For options that shouldn't be deep extended:\n\t\t\t// you can add your own custom options here if\n\t\t\t// and when you create one that shouldn't be\n\t\t\t// deep extended (see ajaxExtend)\n\t\t\tflatOptions: {\n\t\t\t\turl: true,\n\t\t\t\tcontext: true\n\t\t\t}\n\t\t},\n\n\t\t// Creates a full fledged settings object into target\n\t\t// with both ajaxSettings and settings fields.\n\t\t// If target is omitted, writes into ajaxSettings.\n\t\tajaxSetup: function (target, settings) {\n\t\t\treturn settings ?\n\n\t\t\t\t// Building a settings object\n\t\t\t\tajaxExtend(ajaxExtend(target, jQuery.ajaxSettings), settings) :\n\n\t\t\t\t// Extending ajaxSettings\n\t\t\t\tajaxExtend(jQuery.ajaxSettings, target);\n\t\t},\n\n\t\tajaxPrefilter: addToPrefiltersOrTransports(prefilters),\n\t\tajaxTransport: addToPrefiltersOrTransports(transports),\n\n\t\t// Main method\n\t\tajax: function (url, options) {\n\n\t\t\t// If url is an object, simulate pre-1.5 signature\n\t\t\tif (typeof url === \"object\") {\n\t\t\t\toptions = url;\n\t\t\t\turl = undefined;\n\t\t\t}\n\n\t\t\t// Force options to be an object\n\t\t\toptions = options || {};\n\n\t\t\tvar transport,\n\n\t\t\t\t// URL without anti-cache param\n\t\t\t\tcacheURL,\n\n\t\t\t\t// Response headers\n\t\t\t\tresponseHeadersString,\n\t\t\t\tresponseHeaders,\n\n\t\t\t\t// timeout handle\n\t\t\t\ttimeoutTimer,\n\n\t\t\t\t// Url cleanup var\n\t\t\t\turlAnchor,\n\n\t\t\t\t// Request state (becomes false upon send and true upon completion)\n\t\t\t\tcompleted,\n\n\t\t\t\t// To know if global events are to be dispatched\n\t\t\t\tfireGlobals,\n\n\t\t\t\t// Loop variable\n\t\t\t\ti,\n\n\t\t\t\t// uncached part of the url\n\t\t\t\tuncached,\n\n\t\t\t\t// Create the final options object\n\t\t\t\ts = jQuery.ajaxSetup({}, options),\n\n\t\t\t\t// Callbacks context\n\t\t\t\tcallbackContext = s.context || s,\n\n\t\t\t\t// Context for global events is callbackContext if it is a DOM node or jQuery collection\n\t\t\t\tglobalEventContext = s.context &&\n\t\t\t\t\t(callbackContext.nodeType || callbackContext.jquery) ?\n\t\t\t\t\tjQuery(callbackContext) :\n\t\t\t\t\tjQuery.event,\n\n\t\t\t\t// Deferreds\n\t\t\t\tdeferred = jQuery.Deferred(),\n\t\t\t\tcompleteDeferred = jQuery.Callbacks(\"once memory\"),\n\n\t\t\t\t// Status-dependent callbacks\n\t\t\t\tstatusCode = s.statusCode || {},\n\n\t\t\t\t// Headers (they are sent all at once)\n\t\t\t\trequestHeaders = {},\n\t\t\t\trequestHeadersNames = {},\n\n\t\t\t\t// Default abort message\n\t\t\t\tstrAbort = \"canceled\",\n\n\t\t\t\t// Fake xhr\n\t\t\t\tjqXHR = {\n\t\t\t\t\treadyState: 0,\n\n\t\t\t\t\t// Builds headers hashtable if needed\n\t\t\t\t\tgetResponseHeader: function (key) {\n\t\t\t\t\t\tvar match;\n\t\t\t\t\t\tif (completed) {\n\t\t\t\t\t\t\tif (!responseHeaders) {\n\t\t\t\t\t\t\t\tresponseHeaders = {};\n\t\t\t\t\t\t\t\twhile ((match = rheaders.exec(responseHeadersString))) {\n\t\t\t\t\t\t\t\t\tresponseHeaders[match[1].toLowerCase() + \" \"] =\n\t\t\t\t\t\t\t\t\t\t(responseHeaders[match[1].toLowerCase() + \" \"] || [])\n\t\t\t\t\t\t\t\t\t\t\t.concat(match[2]);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tmatch = responseHeaders[key.toLowerCase() + \" \"];\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn match == null ? null : match.join(\", \");\n\t\t\t\t\t},\n\n\t\t\t\t\t// Raw string\n\t\t\t\t\tgetAllResponseHeaders: function () {\n\t\t\t\t\t\treturn completed ? responseHeadersString : null;\n\t\t\t\t\t},\n\n\t\t\t\t\t// Caches the header\n\t\t\t\t\tsetRequestHeader: function (name, value) {\n\t\t\t\t\t\tif (completed == null) {\n\t\t\t\t\t\t\tname = requestHeadersNames[name.toLowerCase()] =\n\t\t\t\t\t\t\t\trequestHeadersNames[name.toLowerCase()] || name;\n\t\t\t\t\t\t\trequestHeaders[name] = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn this;\n\t\t\t\t\t},\n\n\t\t\t\t\t// Overrides response content-type header\n\t\t\t\t\toverrideMimeType: function (type) {\n\t\t\t\t\t\tif (completed == null) {\n\t\t\t\t\t\t\ts.mimeType = type;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn this;\n\t\t\t\t\t},\n\n\t\t\t\t\t// Status-dependent callbacks\n\t\t\t\t\tstatusCode: function (map) {\n\t\t\t\t\t\tvar code;\n\t\t\t\t\t\tif (map) {\n\t\t\t\t\t\t\tif (completed) {\n\n\t\t\t\t\t\t\t\t// Execute the appropriate callbacks\n\t\t\t\t\t\t\t\tjqXHR.always(map[jqXHR.status]);\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t// Lazy-add the new callbacks in a way that preserves old ones\n\t\t\t\t\t\t\t\tfor (code in map) {\n\t\t\t\t\t\t\t\t\tstatusCode[code] = [statusCode[code], map[code]];\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn this;\n\t\t\t\t\t},\n\n\t\t\t\t\t// Cancel the request\n\t\t\t\t\tabort: function (statusText) {\n\t\t\t\t\t\tvar finalText = statusText || strAbort;\n\t\t\t\t\t\tif (transport) {\n\t\t\t\t\t\t\ttransport.abort(finalText);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdone(0, finalText);\n\t\t\t\t\t\treturn this;\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t// Attach deferreds\n\t\t\tdeferred.promise(jqXHR);\n\n\t\t\t// Add protocol if not provided (prefilters might expect it)\n\t\t\t// Handle falsy url in the settings object (trac-10093: consistency with old signature)\n\t\t\t// We also use the url parameter if available\n\t\t\ts.url = ((url || s.url || location.href) + \"\")\n\t\t\t\t.replace(rprotocol, location.protocol + \"//\");\n\n\t\t\t// Alias method option to type as per ticket trac-12004\n\t\t\ts.type = options.method || options.type || s.method || s.type;\n\n\t\t\t// Extract dataTypes list\n\t\t\ts.dataTypes = (s.dataType || \"*\").toLowerCase().match(rnothtmlwhite) || [\"\"];\n\n\t\t\t// A cross-domain request is in order when the origin doesn't match the current origin.\n\t\t\tif (s.crossDomain == null) {\n\t\t\t\turlAnchor = document.createElement(\"a\");\n\n\t\t\t\t// Support: IE <=8 - 11, Edge 12 - 15\n\t\t\t\t// IE throws exception on accessing the href property if url is malformed,\n\t\t\t\t// e.g. http://example.com:80x/\n\t\t\t\ttry {\n\t\t\t\t\turlAnchor.href = s.url;\n\n\t\t\t\t\t// Support: IE <=8 - 11 only\n\t\t\t\t\t// Anchor's host property isn't correctly set when s.url is relative\n\t\t\t\t\turlAnchor.href = urlAnchor.href;\n\t\t\t\t\ts.crossDomain = originAnchor.protocol + \"//\" + originAnchor.host !==\n\t\t\t\t\t\turlAnchor.protocol + \"//\" + urlAnchor.host;\n\t\t\t\t} catch (e) {\n\n\t\t\t\t\t// If there is an error parsing the URL, assume it is crossDomain,\n\t\t\t\t\t// it can be rejected by the transport if it is invalid\n\t\t\t\t\ts.crossDomain = true;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Convert data if not already a string\n\t\t\tif (s.data && s.processData && typeof s.data !== \"string\") {\n\t\t\t\ts.data = jQuery.param(s.data, s.traditional);\n\t\t\t}\n\n\t\t\t// Apply prefilters\n\t\t\tinspectPrefiltersOrTransports(prefilters, s, options, jqXHR);\n\n\t\t\t// If request was aborted inside a prefilter, stop there\n\t\t\tif (completed) {\n\t\t\t\treturn jqXHR;\n\t\t\t}\n\n\t\t\t// We can fire global events as of now if asked to\n\t\t\t// Don't fire events if jQuery.event is undefined in an AMD-usage scenario (trac-15118)\n\t\t\tfireGlobals = jQuery.event && s.global;\n\n\t\t\t// Watch for a new set of requests\n\t\t\tif (fireGlobals && jQuery.active++ === 0) {\n\t\t\t\tjQuery.event.trigger(\"ajaxStart\");\n\t\t\t}\n\n\t\t\t// Uppercase the type\n\t\t\ts.type = s.type.toUpperCase();\n\n\t\t\t// Determine if request has content\n\t\t\ts.hasContent = !rnoContent.test(s.type);\n\n\t\t\t// Save the URL in case we're toying with the If-Modified-Since\n\t\t\t// and/or If-None-Match header later on\n\t\t\t// Remove hash to simplify url manipulation\n\t\t\tcacheURL = s.url.replace(rhash, \"\");\n\n\t\t\t// More options handling for requests with no content\n\t\t\tif (!s.hasContent) {\n\n\t\t\t\t// Remember the hash so we can put it back\n\t\t\t\tuncached = s.url.slice(cacheURL.length);\n\n\t\t\t\t// If data is available and should be processed, append data to url\n\t\t\t\tif (s.data && (s.processData || typeof s.data === \"string\")) {\n\t\t\t\t\tcacheURL += (rquery.test(cacheURL) ? \"&\" : \"?\") + s.data;\n\n\t\t\t\t\t// trac-9682: remove data so that it's not used in an eventual retry\n\t\t\t\t\tdelete s.data;\n\t\t\t\t}\n\n\t\t\t\t// Add or update anti-cache param if needed\n\t\t\t\tif (s.cache === false) {\n\t\t\t\t\tcacheURL = cacheURL.replace(rantiCache, \"$1\");\n\t\t\t\t\tuncached = (rquery.test(cacheURL) ? \"&\" : \"?\") + \"_=\" + (nonce.guid++) +\n\t\t\t\t\t\tuncached;\n\t\t\t\t}\n\n\t\t\t\t// Put hash and anti-cache on the URL that will be requested (gh-1732)\n\t\t\t\ts.url = cacheURL + uncached;\n\n\t\t\t\t// Change '%20' to '+' if this is encoded form body content (gh-2658)\n\t\t\t} else if (s.data && s.processData &&\n\t\t\t\t(s.contentType || \"\").indexOf(\"application/x-www-form-urlencoded\") === 0) {\n\t\t\t\ts.data = s.data.replace(r20, \"+\");\n\t\t\t}\n\n\t\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\t\tif (s.ifModified) {\n\t\t\t\tif (jQuery.lastModified[cacheURL]) {\n\t\t\t\t\tjqXHR.setRequestHeader(\"If-Modified-Since\", jQuery.lastModified[cacheURL]);\n\t\t\t\t}\n\t\t\t\tif (jQuery.etag[cacheURL]) {\n\t\t\t\t\tjqXHR.setRequestHeader(\"If-None-Match\", jQuery.etag[cacheURL]);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Set the correct header, if data is being sent\n\t\t\tif (s.data && s.hasContent && s.contentType !== false || options.contentType) {\n\t\t\t\tjqXHR.setRequestHeader(\"Content-Type\", s.contentType);\n\t\t\t}\n\n\t\t\t// Set the Accepts header for the server, depending on the dataType\n\t\t\tjqXHR.setRequestHeader(\n\t\t\t\t\"Accept\",\n\t\t\t\ts.dataTypes[0] && s.accepts[s.dataTypes[0]] ?\n\t\t\t\t\ts.accepts[s.dataTypes[0]] +\n\t\t\t\t\t(s.dataTypes[0] !== \"*\" ? \", \" + allTypes + \"; q=0.01\" : \"\") :\n\t\t\t\t\ts.accepts[\"*\"]\n\t\t\t);\n\n\t\t\t// Check for headers option\n\t\t\tfor (i in s.headers) {\n\t\t\t\tjqXHR.setRequestHeader(i, s.headers[i]);\n\t\t\t}\n\n\t\t\t// Allow custom headers/mimetypes and early abort\n\t\t\tif (s.beforeSend &&\n\t\t\t\t(s.beforeSend.call(callbackContext, jqXHR, s) === false || completed)) {\n\n\t\t\t\t// Abort if not done already and return\n\t\t\t\treturn jqXHR.abort();\n\t\t\t}\n\n\t\t\t// Aborting is no longer a cancellation\n\t\t\tstrAbort = \"abort\";\n\n\t\t\t// Install callbacks on deferreds\n\t\t\tcompleteDeferred.add(s.complete);\n\t\t\tjqXHR.done(s.success);\n\t\t\tjqXHR.fail(s.error);\n\n\t\t\t// Get transport\n\t\t\ttransport = inspectPrefiltersOrTransports(transports, s, options, jqXHR);\n\n\t\t\t// If no transport, we auto-abort\n\t\t\tif (!transport) {\n\t\t\t\tdone(-1, \"No Transport\");\n\t\t\t} else {\n\t\t\t\tjqXHR.readyState = 1;\n\n\t\t\t\t// Send global event\n\t\t\t\tif (fireGlobals) {\n\t\t\t\t\tglobalEventContext.trigger(\"ajaxSend\", [jqXHR, s]);\n\t\t\t\t}\n\n\t\t\t\t// If request was aborted inside ajaxSend, stop there\n\t\t\t\tif (completed) {\n\t\t\t\t\treturn jqXHR;\n\t\t\t\t}\n\n\t\t\t\t// Timeout\n\t\t\t\tif (s.async && s.timeout > 0) {\n\t\t\t\t\ttimeoutTimer = window.setTimeout(function () {\n\t\t\t\t\t\tjqXHR.abort(\"timeout\");\n\t\t\t\t\t}, s.timeout);\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tcompleted = false;\n\t\t\t\t\ttransport.send(requestHeaders, done);\n\t\t\t\t} catch (e) {\n\n\t\t\t\t\t// Rethrow post-completion exceptions\n\t\t\t\t\tif (completed) {\n\t\t\t\t\t\tthrow e;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Propagate others as results\n\t\t\t\t\tdone(-1, e);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Callback for when everything is done\n\t\t\tfunction done(status, nativeStatusText, responses, headers) {\n\t\t\t\tvar isSuccess, success, error, response, modified,\n\t\t\t\t\tstatusText = nativeStatusText;\n\n\t\t\t\t// Ignore repeat invocations\n\t\t\t\tif (completed) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tcompleted = true;\n\n\t\t\t\t// Clear timeout if it exists\n\t\t\t\tif (timeoutTimer) {\n\t\t\t\t\twindow.clearTimeout(timeoutTimer);\n\t\t\t\t}\n\n\t\t\t\t// Dereference transport for early garbage collection\n\t\t\t\t// (no matter how long the jqXHR object will be used)\n\t\t\t\ttransport = undefined;\n\n\t\t\t\t// Cache response headers\n\t\t\t\tresponseHeadersString = headers || \"\";\n\n\t\t\t\t// Set readyState\n\t\t\t\tjqXHR.readyState = status > 0 ? 4 : 0;\n\n\t\t\t\t// Determine if successful\n\t\t\t\tisSuccess = status >= 200 && status < 300 || status === 304;\n\n\t\t\t\t// Get response data\n\t\t\t\tif (responses) {\n\t\t\t\t\tresponse = ajaxHandleResponses(s, jqXHR, responses);\n\t\t\t\t}\n\n\t\t\t\t// Use a noop converter for missing script but not if jsonp\n\t\t\t\tif (!isSuccess &&\n\t\t\t\t\tjQuery.inArray(\"script\", s.dataTypes) > -1 &&\n\t\t\t\t\tjQuery.inArray(\"json\", s.dataTypes) < 0) {\n\t\t\t\t\ts.converters[\"text script\"] = function () { };\n\t\t\t\t}\n\n\t\t\t\t// Convert no matter what (that way responseXXX fields are always set)\n\t\t\t\tresponse = ajaxConvert(s, response, jqXHR, isSuccess);\n\n\t\t\t\t// If successful, handle type chaining\n\t\t\t\tif (isSuccess) {\n\n\t\t\t\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\t\t\t\tif (s.ifModified) {\n\t\t\t\t\t\tmodified = jqXHR.getResponseHeader(\"Last-Modified\");\n\t\t\t\t\t\tif (modified) {\n\t\t\t\t\t\t\tjQuery.lastModified[cacheURL] = modified;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmodified = jqXHR.getResponseHeader(\"etag\");\n\t\t\t\t\t\tif (modified) {\n\t\t\t\t\t\t\tjQuery.etag[cacheURL] = modified;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// if no content\n\t\t\t\t\tif (status === 204 || s.type === \"HEAD\") {\n\t\t\t\t\t\tstatusText = \"nocontent\";\n\n\t\t\t\t\t\t// if not modified\n\t\t\t\t\t} else if (status === 304) {\n\t\t\t\t\t\tstatusText = \"notmodified\";\n\n\t\t\t\t\t\t// If we have data, let's convert it\n\t\t\t\t\t} else {\n\t\t\t\t\t\tstatusText = response.state;\n\t\t\t\t\t\tsuccess = response.data;\n\t\t\t\t\t\terror = response.error;\n\t\t\t\t\t\tisSuccess = !error;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\n\t\t\t\t\t// Extract error from statusText and normalize for non-aborts\n\t\t\t\t\terror = statusText;\n\t\t\t\t\tif (status || !statusText) {\n\t\t\t\t\t\tstatusText = \"error\";\n\t\t\t\t\t\tif (status < 0) {\n\t\t\t\t\t\t\tstatus = 0;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Set data for the fake xhr object\n\t\t\t\tjqXHR.status = status;\n\t\t\t\tjqXHR.statusText = (nativeStatusText || statusText) + \"\";\n\n\t\t\t\t// Success/Error\n\t\t\t\tif (isSuccess) {\n\t\t\t\t\tdeferred.resolveWith(callbackContext, [success, statusText, jqXHR]);\n\t\t\t\t} else {\n\t\t\t\t\tdeferred.rejectWith(callbackContext, [jqXHR, statusText, error]);\n\t\t\t\t}\n\n\t\t\t\t// Status-dependent callbacks\n\t\t\t\tjqXHR.statusCode(statusCode);\n\t\t\t\tstatusCode = undefined;\n\n\t\t\t\tif (fireGlobals) {\n\t\t\t\t\tglobalEventContext.trigger(isSuccess ? \"ajaxSuccess\" : \"ajaxError\",\n\t\t\t\t\t\t[jqXHR, s, isSuccess ? success : error]);\n\t\t\t\t}\n\n\t\t\t\t// Complete\n\t\t\t\tcompleteDeferred.fireWith(callbackContext, [jqXHR, statusText]);\n\n\t\t\t\tif (fireGlobals) {\n\t\t\t\t\tglobalEventContext.trigger(\"ajaxComplete\", [jqXHR, s]);\n\n\t\t\t\t\t// Handle the global AJAX counter\n\t\t\t\t\tif (!(--jQuery.active)) {\n\t\t\t\t\t\tjQuery.event.trigger(\"ajaxStop\");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn jqXHR;\n\t\t},\n\n\t\tgetJSON: function (url, data, callback) {\n\t\t\treturn jQuery.get(url, data, callback, \"json\");\n\t\t},\n\n\t\tgetScript: function (url, callback) {\n\t\t\treturn jQuery.get(url, undefined, callback, \"script\");\n\t\t}\n\t});\n\n\tjQuery.each([\"get\", \"post\"], function (_i, method) {\n\t\tjQuery[method] = function (url, data, callback, type) {\n\n\t\t\t// Shift arguments if data argument was omitted\n\t\t\tif (isFunction(data)) {\n\t\t\t\ttype = type || callback;\n\t\t\t\tcallback = data;\n\t\t\t\tdata = undefined;\n\t\t\t}\n\n\t\t\t// The url can be an options object (which then must have .url)\n\t\t\treturn jQuery.ajax(jQuery.extend({\n\t\t\t\turl: url,\n\t\t\t\ttype: method,\n\t\t\t\tdataType: type,\n\t\t\t\tdata: data,\n\t\t\t\tsuccess: callback\n\t\t\t}, jQuery.isPlainObject(url) && url));\n\t\t};\n\t});\n\n\tjQuery.ajaxPrefilter(function (s) {\n\t\tvar i;\n\t\tfor (i in s.headers) {\n\t\t\tif (i.toLowerCase() === \"content-type\") {\n\t\t\t\ts.contentType = s.headers[i] || \"\";\n\t\t\t}\n\t\t}\n\t});\n\n\n\tjQuery._evalUrl = function (url, options, doc) {\n\t\treturn jQuery.ajax({\n\t\t\turl: url,\n\n\t\t\t// Make this explicit, since user can override this through ajaxSetup (trac-11264)\n\t\t\ttype: \"GET\",\n\t\t\tdataType: \"script\",\n\t\t\tcache: true,\n\t\t\tasync: false,\n\t\t\tglobal: false,\n\n\t\t\t// Only evaluate the response if it is successful (gh-4126)\n\t\t\t// dataFilter is not invoked for failure responses, so using it instead\n\t\t\t// of the default converter is kludgy but it works.\n\t\t\tconverters: {\n\t\t\t\t\"text script\": function () { }\n\t\t\t},\n\t\t\tdataFilter: function (response) {\n\t\t\t\tjQuery.globalEval(response, options, doc);\n\t\t\t}\n\t\t});\n\t};\n\n\n\tjQuery.fn.extend({\n\t\twrapAll: function (html) {\n\t\t\tvar wrap;\n\n\t\t\tif (this[0]) {\n\t\t\t\tif (isFunction(html)) {\n\t\t\t\t\thtml = html.call(this[0]);\n\t\t\t\t}\n\n\t\t\t\t// The elements to wrap the target around\n\t\t\t\twrap = jQuery(html, this[0].ownerDocument).eq(0).clone(true);\n\n\t\t\t\tif (this[0].parentNode) {\n\t\t\t\t\twrap.insertBefore(this[0]);\n\t\t\t\t}\n\n\t\t\t\twrap.map(function () {\n\t\t\t\t\tvar elem = this;\n\n\t\t\t\t\twhile (elem.firstElementChild) {\n\t\t\t\t\t\telem = elem.firstElementChild;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn elem;\n\t\t\t\t}).append(this);\n\t\t\t}\n\n\t\t\treturn this;\n\t\t},\n\n\t\twrapInner: function (html) {\n\t\t\tif (isFunction(html)) {\n\t\t\t\treturn this.each(function (i) {\n\t\t\t\t\tjQuery(this).wrapInner(html.call(this, i));\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn this.each(function () {\n\t\t\t\tvar self = jQuery(this),\n\t\t\t\t\tcontents = self.contents();\n\n\t\t\t\tif (contents.length) {\n\t\t\t\t\tcontents.wrapAll(html);\n\n\t\t\t\t} else {\n\t\t\t\t\tself.append(html);\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\twrap: function (html) {\n\t\t\tvar htmlIsFunction = isFunction(html);\n\n\t\t\treturn this.each(function (i) {\n\t\t\t\tjQuery(this).wrapAll(htmlIsFunction ? html.call(this, i) : html);\n\t\t\t});\n\t\t},\n\n\t\tunwrap: function (selector) {\n\t\t\tthis.parent(selector).not(\"body\").each(function () {\n\t\t\t\tjQuery(this).replaceWith(this.childNodes);\n\t\t\t});\n\t\t\treturn this;\n\t\t}\n\t});\n\n\n\tjQuery.expr.pseudos.hidden = function (elem) {\n\t\treturn !jQuery.expr.pseudos.visible(elem);\n\t};\n\tjQuery.expr.pseudos.visible = function (elem) {\n\t\treturn !!(elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length);\n\t};\n\n\n\n\n\tjQuery.ajaxSettings.xhr = function () {\n\t\ttry {\n\t\t\treturn new window.XMLHttpRequest();\n\t\t} catch (e) { }\n\t};\n\n\tvar xhrSuccessStatus = {\n\n\t\t// File protocol always yields status code 0, assume 200\n\t\t0: 200,\n\n\t\t// Support: IE <=9 only\n\t\t// trac-1450: sometimes IE returns 1223 when it should be 204\n\t\t1223: 204\n\t},\n\t\txhrSupported = jQuery.ajaxSettings.xhr();\n\n\tsupport.cors = !!xhrSupported && (\"withCredentials\" in xhrSupported);\n\tsupport.ajax = xhrSupported = !!xhrSupported;\n\n\tjQuery.ajaxTransport(function (options) {\n\t\tvar callback, errorCallback;\n\n\t\t// Cross domain only allowed if supported through XMLHttpRequest\n\t\tif (support.cors || xhrSupported && !options.crossDomain) {\n\t\t\treturn {\n\t\t\t\tsend: function (headers, complete) {\n\t\t\t\t\tvar i,\n\t\t\t\t\t\txhr = options.xhr();\n\n\t\t\t\t\txhr.open(\n\t\t\t\t\t\toptions.type,\n\t\t\t\t\t\toptions.url,\n\t\t\t\t\t\toptions.async,\n\t\t\t\t\t\toptions.username,\n\t\t\t\t\t\toptions.password\n\t\t\t\t\t);\n\n\t\t\t\t\t// Apply custom fields if provided\n\t\t\t\t\tif (options.xhrFields) {\n\t\t\t\t\t\tfor (i in options.xhrFields) {\n\t\t\t\t\t\t\txhr[i] = options.xhrFields[i];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Override mime type if needed\n\t\t\t\t\tif (options.mimeType && xhr.overrideMimeType) {\n\t\t\t\t\t\txhr.overrideMimeType(options.mimeType);\n\t\t\t\t\t}\n\n\t\t\t\t\t// X-Requested-With header\n\t\t\t\t\t// For cross-domain requests, seeing as conditions for a preflight are\n\t\t\t\t\t// akin to a jigsaw puzzle, we simply never set it to be sure.\n\t\t\t\t\t// (it can always be set on a per-request basis or even using ajaxSetup)\n\t\t\t\t\t// For same-domain requests, won't change header if already provided.\n\t\t\t\t\tif (!options.crossDomain && !headers[\"X-Requested-With\"]) {\n\t\t\t\t\t\theaders[\"X-Requested-With\"] = \"XMLHttpRequest\";\n\t\t\t\t\t}\n\n\t\t\t\t\t// Set headers\n\t\t\t\t\tfor (i in headers) {\n\t\t\t\t\t\txhr.setRequestHeader(i, headers[i]);\n\t\t\t\t\t}\n\n\t\t\t\t\t// Callback\n\t\t\t\t\tcallback = function (type) {\n\t\t\t\t\t\treturn function () {\n\t\t\t\t\t\t\tif (callback) {\n\t\t\t\t\t\t\t\tcallback = errorCallback = xhr.onload =\n\t\t\t\t\t\t\t\t\txhr.onerror = xhr.onabort = xhr.ontimeout =\n\t\t\t\t\t\t\t\t\txhr.onreadystatechange = null;\n\n\t\t\t\t\t\t\t\tif (type === \"abort\") {\n\t\t\t\t\t\t\t\t\txhr.abort();\n\t\t\t\t\t\t\t\t} else if (type === \"error\") {\n\n\t\t\t\t\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t\t\t\t\t// On a manual native abort, IE9 throws\n\t\t\t\t\t\t\t\t\t// errors on any property access that is not readyState\n\t\t\t\t\t\t\t\t\tif (typeof xhr.status !== \"number\") {\n\t\t\t\t\t\t\t\t\t\tcomplete(0, \"error\");\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tcomplete(\n\n\t\t\t\t\t\t\t\t\t\t\t// File: protocol always yields status 0; see trac-8605, trac-14207\n\t\t\t\t\t\t\t\t\t\t\txhr.status,\n\t\t\t\t\t\t\t\t\t\t\txhr.statusText\n\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tcomplete(\n\t\t\t\t\t\t\t\t\t\txhrSuccessStatus[xhr.status] || xhr.status,\n\t\t\t\t\t\t\t\t\t\txhr.statusText,\n\n\t\t\t\t\t\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t\t\t\t\t\t// IE9 has no XHR2 but throws on binary (trac-11426)\n\t\t\t\t\t\t\t\t\t\t// For XHR2 non-text, let the caller handle it (gh-2498)\n\t\t\t\t\t\t\t\t\t\t(xhr.responseType || \"text\") !== \"text\" ||\n\t\t\t\t\t\t\t\t\t\t\ttypeof xhr.responseText !== \"string\" ?\n\t\t\t\t\t\t\t\t\t\t\t{ binary: xhr.response } :\n\t\t\t\t\t\t\t\t\t\t\t{ text: xhr.responseText },\n\t\t\t\t\t\t\t\t\t\txhr.getAllResponseHeaders()\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\t\t\t\t\t};\n\n\t\t\t\t\t// Listen to events\n\t\t\t\t\txhr.onload = callback();\n\t\t\t\t\terrorCallback = xhr.onerror = xhr.ontimeout = callback(\"error\");\n\n\t\t\t\t\t// Support: IE 9 only\n\t\t\t\t\t// Use onreadystatechange to replace onabort\n\t\t\t\t\t// to handle uncaught aborts\n\t\t\t\t\tif (xhr.onabort !== undefined) {\n\t\t\t\t\t\txhr.onabort = errorCallback;\n\t\t\t\t\t} else {\n\t\t\t\t\t\txhr.onreadystatechange = function () {\n\n\t\t\t\t\t\t\t// Check readyState before timeout as it changes\n\t\t\t\t\t\t\tif (xhr.readyState === 4) {\n\n\t\t\t\t\t\t\t\t// Allow onerror to be called first,\n\t\t\t\t\t\t\t\t// but that will not handle a native abort\n\t\t\t\t\t\t\t\t// Also, save errorCallback to a variable\n\t\t\t\t\t\t\t\t// as xhr.onerror cannot be accessed\n\t\t\t\t\t\t\t\twindow.setTimeout(function () {\n\t\t\t\t\t\t\t\t\tif (callback) {\n\t\t\t\t\t\t\t\t\t\terrorCallback();\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\t// Create the abort callback\n\t\t\t\t\tcallback = callback(\"abort\");\n\n\t\t\t\t\ttry {\n\n\t\t\t\t\t\t// Do send the request (this may raise an exception)\n\t\t\t\t\t\txhr.send(options.hasContent && options.data || null);\n\t\t\t\t\t} catch (e) {\n\n\t\t\t\t\t\t// trac-14683: Only rethrow if this hasn't been notified as an error yet\n\t\t\t\t\t\tif (callback) {\n\t\t\t\t\t\t\tthrow e;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\t\tabort: function () {\n\t\t\t\t\tif (callback) {\n\t\t\t\t\t\tcallback();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t});\n\n\n\n\n\t// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432)\n\tjQuery.ajaxPrefilter(function (s) {\n\t\tif (s.crossDomain) {\n\t\t\ts.contents.script = false;\n\t\t}\n\t});\n\n\t// Install script dataType\n\tjQuery.ajaxSetup({\n\t\taccepts: {\n\t\t\tscript: \"text/javascript, application/javascript, \" +\n\t\t\t\t\"application/ecmascript, application/x-ecmascript\"\n\t\t},\n\t\tcontents: {\n\t\t\tscript: /\\b(?:java|ecma)script\\b/\n\t\t},\n\t\tconverters: {\n\t\t\t\"text script\": function (text) {\n\t\t\t\tjQuery.globalEval(text);\n\t\t\t\treturn text;\n\t\t\t}\n\t\t}\n\t});\n\n\t// Handle cache's special case and crossDomain\n\tjQuery.ajaxPrefilter(\"script\", function (s) {\n\t\tif (s.cache === undefined) {\n\t\t\ts.cache = false;\n\t\t}\n\t\tif (s.crossDomain) {\n\t\t\ts.type = \"GET\";\n\t\t}\n\t});\n\n\t// Bind script tag hack transport\n\tjQuery.ajaxTransport(\"script\", function (s) {\n\n\t\t// This transport only deals with cross domain or forced-by-attrs requests\n\t\tif (s.crossDomain || s.scriptAttrs) {\n\t\t\tvar script, callback;\n\t\t\treturn {\n\t\t\t\tsend: function (_, complete) {\n\t\t\t\t\tscript = jQuery(\"<script>\")\n\t\t\t\t\t\t.attr(s.scriptAttrs || {})\n\t\t\t\t\t\t.prop({ charset: s.scriptCharset, src: s.url })\n\t\t\t\t\t\t.on(\"load error\", callback = function (evt) {\n\t\t\t\t\t\t\tscript.remove();\n\t\t\t\t\t\t\tcallback = null;\n\t\t\t\t\t\t\tif (evt) {\n\t\t\t\t\t\t\t\tcomplete(evt.type === \"error\" ? 404 : 200, evt.type);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\n\t\t\t\t\t// Use native DOM manipulation to avoid our domManip AJAX trickery\n\t\t\t\t\tdocument.head.appendChild(script[0]);\n\t\t\t\t},\n\t\t\t\tabort: function () {\n\t\t\t\t\tif (callback) {\n\t\t\t\t\t\tcallback();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t});\n\n\n\n\n\tvar oldCallbacks = [],\n\t\trjsonp = /(=)\\?(?=&|$)|\\?\\?/;\n\n\t// Default jsonp settings\n\tjQuery.ajaxSetup({\n\t\tjsonp: \"callback\",\n\t\tjsonpCallback: function () {\n\t\t\tvar callback = oldCallbacks.pop() || (jQuery.expando + \"_\" + (nonce.guid++));\n\t\t\tthis[callback] = true;\n\t\t\treturn callback;\n\t\t}\n\t});\n\n\t// Detect, normalize options and install callbacks for jsonp requests\n\tjQuery.ajaxPrefilter(\"json jsonp\", function (s, originalSettings, jqXHR) {\n\n\t\tvar callbackName, overwritten, responseContainer,\n\t\t\tjsonProp = s.jsonp !== false && (rjsonp.test(s.url) ?\n\t\t\t\t\"url\" :\n\t\t\t\ttypeof s.data === \"string\" &&\n\t\t\t\t(s.contentType || \"\")\n\t\t\t\t\t.indexOf(\"application/x-www-form-urlencoded\") === 0 &&\n\t\t\t\trjsonp.test(s.data) && \"data\"\n\t\t\t);\n\n\t\t// Handle iff the expected data type is \"jsonp\" or we have a parameter to set\n\t\tif (jsonProp || s.dataTypes[0] === \"jsonp\") {\n\n\t\t\t// Get callback name, remembering preexisting value associated with it\n\t\t\tcallbackName = s.jsonpCallback = isFunction(s.jsonpCallback) ?\n\t\t\t\ts.jsonpCallback() :\n\t\t\t\ts.jsonpCallback;\n\n\t\t\t// Insert callback into url or form data\n\t\t\tif (jsonProp) {\n\t\t\t\ts[jsonProp] = s[jsonProp].replace(rjsonp, \"$1\" + callbackName);\n\t\t\t} else if (s.jsonp !== false) {\n\t\t\t\ts.url += (rquery.test(s.url) ? \"&\" : \"?\") + s.jsonp + \"=\" + callbackName;\n\t\t\t}\n\n\t\t\t// Use data converter to retrieve json after script execution\n\t\t\ts.converters[\"script json\"] = function () {\n\t\t\t\tif (!responseContainer) {\n\t\t\t\t\tjQuery.error(callbackName + \" was not called\");\n\t\t\t\t}\n\t\t\t\treturn responseContainer[0];\n\t\t\t};\n\n\t\t\t// Force json dataType\n\t\t\ts.dataTypes[0] = \"json\";\n\n\t\t\t// Install callback\n\t\t\toverwritten = window[callbackName];\n\t\t\twindow[callbackName] = function () {\n\t\t\t\tresponseContainer = arguments;\n\t\t\t};\n\n\t\t\t// Clean-up function (fires after converters)\n\t\t\tjqXHR.always(function () {\n\n\t\t\t\t// If previous value didn't exist - remove it\n\t\t\t\tif (overwritten === undefined) {\n\t\t\t\t\tjQuery(window).removeProp(callbackName);\n\n\t\t\t\t\t// Otherwise restore preexisting value\n\t\t\t\t} else {\n\t\t\t\t\twindow[callbackName] = overwritten;\n\t\t\t\t}\n\n\t\t\t\t// Save back as free\n\t\t\t\tif (s[callbackName]) {\n\n\t\t\t\t\t// Make sure that re-using the options doesn't screw things around\n\t\t\t\t\ts.jsonpCallback = originalSettings.jsonpCallback;\n\n\t\t\t\t\t// Save the callback name for future use\n\t\t\t\t\toldCallbacks.push(callbackName);\n\t\t\t\t}\n\n\t\t\t\t// Call if it was a function and we have a response\n\t\t\t\tif (responseContainer && isFunction(overwritten)) {\n\t\t\t\t\toverwritten(responseContainer[0]);\n\t\t\t\t}\n\n\t\t\t\tresponseContainer = overwritten = undefined;\n\t\t\t});\n\n\t\t\t// Delegate to script\n\t\t\treturn \"script\";\n\t\t}\n\t});\n\n\n\n\n\t// Support: Safari 8 only\n\t// In Safari 8 documents created via document.implementation.createHTMLDocument\n\t// collapse sibling forms: the second one becomes a child of the first one.\n\t// Because of that, this security measure has to be disabled in Safari 8.\n\t// https://bugs.webkit.org/show_bug.cgi?id=137337\n\tsupport.createHTMLDocument = (function () {\n\t\tvar body = document.implementation.createHTMLDocument(\"\").body;\n\t\tbody.innerHTML = \"<form></form><form></form>\";\n\t\treturn body.childNodes.length === 2;\n\t})();\n\n\n\t// Argument \"data\" should be string of html\n\t// context (optional): If specified, the fragment will be created in this context,\n\t// defaults to document\n\t// keepScripts (optional): If true, will include scripts passed in the html string\n\tjQuery.parseHTML = function (data, context, keepScripts) {\n\t\tif (typeof data !== \"string\") {\n\t\t\treturn [];\n\t\t}\n\t\tif (typeof context === \"boolean\") {\n\t\t\tkeepScripts = context;\n\t\t\tcontext = false;\n\t\t}\n\n\t\tvar base, parsed, scripts;\n\n\t\tif (!context) {\n\n\t\t\t// Stop scripts or inline event handlers from being executed immediately\n\t\t\t// by using document.implementation\n\t\t\tif (support.createHTMLDocument) {\n\t\t\t\tcontext = document.implementation.createHTMLDocument(\"\");\n\n\t\t\t\t// Set the base href for the created document\n\t\t\t\t// so any parsed elements with URLs\n\t\t\t\t// are based on the document's URL (gh-2965)\n\t\t\t\tbase = context.createElement(\"base\");\n\t\t\t\tbase.href = document.location.href;\n\t\t\t\tcontext.head.appendChild(base);\n\t\t\t} else {\n\t\t\t\tcontext = document;\n\t\t\t}\n\t\t}\n\n\t\tparsed = rsingleTag.exec(data);\n\t\tscripts = !keepScripts && [];\n\n\t\t// Single tag\n\t\tif (parsed) {\n\t\t\treturn [context.createElement(parsed[1])];\n\t\t}\n\n\t\tparsed = buildFragment([data], context, scripts);\n\n\t\tif (scripts && scripts.length) {\n\t\t\tjQuery(scripts).remove();\n\t\t}\n\n\t\treturn jQuery.merge([], parsed.childNodes);\n\t};\n\n\n\t/**\n\t * Load a url into a page\n\t */\n\tjQuery.fn.load = function (url, params, callback) {\n\t\tvar selector, type, response,\n\t\t\tself = this,\n\t\t\toff = url.indexOf(\" \");\n\n\t\tif (off > -1) {\n\t\t\tselector = stripAndCollapse(url.slice(off));\n\t\t\turl = url.slice(0, off);\n\t\t}\n\n\t\t// If it's a function\n\t\tif (isFunction(params)) {\n\n\t\t\t// We assume that it's the callback\n\t\t\tcallback = params;\n\t\t\tparams = undefined;\n\n\t\t\t// Otherwise, build a param string\n\t\t} else if (params && typeof params === \"object\") {\n\t\t\ttype = \"POST\";\n\t\t}\n\n\t\t// If we have elements to modify, make the request\n\t\tif (self.length > 0) {\n\t\t\tjQuery.ajax({\n\t\t\t\turl: url,\n\n\t\t\t\t// If \"type\" variable is undefined, then \"GET\" method will be used.\n\t\t\t\t// Make value of this field explicit since\n\t\t\t\t// user can override it through ajaxSetup method\n\t\t\t\ttype: type || \"GET\",\n\t\t\t\tdataType: \"html\",\n\t\t\t\tdata: params\n\t\t\t}).done(function (responseText) {\n\n\t\t\t\t// Save response for use in complete callback\n\t\t\t\tresponse = arguments;\n\n\t\t\t\tself.html(selector ?\n\n\t\t\t\t\t// If a selector was specified, locate the right elements in a dummy div\n\t\t\t\t\t// Exclude scripts to avoid IE 'Permission Denied' errors\n\t\t\t\t\tjQuery(\"<div>\").append(jQuery.parseHTML(responseText)).find(selector) :\n\n\t\t\t\t\t// Otherwise use the full result\n\t\t\t\t\tresponseText);\n\n\t\t\t\t// If the request succeeds, this function gets \"data\", \"status\", \"jqXHR\"\n\t\t\t\t// but they are ignored because response was set above.\n\t\t\t\t// If it fails, this function gets \"jqXHR\", \"status\", \"error\"\n\t\t\t}).always(callback && function (jqXHR, status) {\n\t\t\t\tself.each(function () {\n\t\t\t\t\tcallback.apply(this, response || [jqXHR.responseText, status, jqXHR]);\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\n\t\treturn this;\n\t};\n\n\n\n\n\tjQuery.expr.pseudos.animated = function (elem) {\n\t\treturn jQuery.grep(jQuery.timers, function (fn) {\n\t\t\treturn elem === fn.elem;\n\t\t}).length;\n\t};\n\n\n\n\n\tjQuery.offset = {\n\t\tsetOffset: function (elem, options, i) {\n\t\t\tvar curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition,\n\t\t\t\tposition = jQuery.css(elem, \"position\"),\n\t\t\t\tcurElem = jQuery(elem),\n\t\t\t\tprops = {};\n\n\t\t\t// Set position first, in-case top/left are set even on static elem\n\t\t\tif (position === \"static\") {\n\t\t\t\telem.style.position = \"relative\";\n\t\t\t}\n\n\t\t\tcurOffset = curElem.offset();\n\t\t\tcurCSSTop = jQuery.css(elem, \"top\");\n\t\t\tcurCSSLeft = jQuery.css(elem, \"left\");\n\t\t\tcalculatePosition = (position === \"absolute\" || position === \"fixed\") &&\n\t\t\t\t(curCSSTop + curCSSLeft).indexOf(\"auto\") > -1;\n\n\t\t\t// Need to be able to calculate position if either\n\t\t\t// top or left is auto and position is either absolute or fixed\n\t\t\tif (calculatePosition) {\n\t\t\t\tcurPosition = curElem.position();\n\t\t\t\tcurTop = curPosition.top;\n\t\t\t\tcurLeft = curPosition.left;\n\n\t\t\t} else {\n\t\t\t\tcurTop = parseFloat(curCSSTop) || 0;\n\t\t\t\tcurLeft = parseFloat(curCSSLeft) || 0;\n\t\t\t}\n\n\t\t\tif (isFunction(options)) {\n\n\t\t\t\t// Use jQuery.extend here to allow modification of coordinates argument (gh-1848)\n\t\t\t\toptions = options.call(elem, i, jQuery.extend({}, curOffset));\n\t\t\t}\n\n\t\t\tif (options.top != null) {\n\t\t\t\tprops.top = (options.top - curOffset.top) + curTop;\n\t\t\t}\n\t\t\tif (options.left != null) {\n\t\t\t\tprops.left = (options.left - curOffset.left) + curLeft;\n\t\t\t}\n\n\t\t\tif (\"using\" in options) {\n\t\t\t\toptions.using.call(elem, props);\n\n\t\t\t} else {\n\t\t\t\tcurElem.css(props);\n\t\t\t}\n\t\t}\n\t};\n\n\tjQuery.fn.extend({\n\n\t\t// offset() relates an element's border box to the document origin\n\t\toffset: function (options) {\n\n\t\t\t// Preserve chaining for setter\n\t\t\tif (arguments.length) {\n\t\t\t\treturn options === undefined ?\n\t\t\t\t\tthis :\n\t\t\t\t\tthis.each(function (i) {\n\t\t\t\t\t\tjQuery.offset.setOffset(this, options, i);\n\t\t\t\t\t});\n\t\t\t}\n\n\t\t\tvar rect, win,\n\t\t\t\telem = this[0];\n\n\t\t\tif (!elem) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Return zeros for disconnected and hidden (display: none) elements (gh-2310)\n\t\t\t// Support: IE <=11 only\n\t\t\t// Running getBoundingClientRect on a\n\t\t\t// disconnected node in IE throws an error\n\t\t\tif (!elem.getClientRects().length) {\n\t\t\t\treturn { top: 0, left: 0 };\n\t\t\t}\n\n\t\t\t// Get document-relative position by adding viewport scroll to viewport-relative gBCR\n\t\t\trect = elem.getBoundingClientRect();\n\t\t\twin = elem.ownerDocument.defaultView;\n\t\t\treturn {\n\t\t\t\ttop: rect.top + win.pageYOffset,\n\t\t\t\tleft: rect.left + win.pageXOffset\n\t\t\t};\n\t\t},\n\n\t\t// position() relates an element's margin box to its offset parent's padding box\n\t\t// This corresponds to the behavior of CSS absolute positioning\n\t\tposition: function () {\n\t\t\tif (!this[0]) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar offsetParent, offset, doc,\n\t\t\t\telem = this[0],\n\t\t\t\tparentOffset = { top: 0, left: 0 };\n\n\t\t\t// position:fixed elements are offset from the viewport, which itself always has zero offset\n\t\t\tif (jQuery.css(elem, \"position\") === \"fixed\") {\n\n\t\t\t\t// Assume position:fixed implies availability of getBoundingClientRect\n\t\t\t\toffset = elem.getBoundingClientRect();\n\n\t\t\t} else {\n\t\t\t\toffset = this.offset();\n\n\t\t\t\t// Account for the *real* offset parent, which can be the document or its root element\n\t\t\t\t// when a statically positioned element is identified\n\t\t\t\tdoc = elem.ownerDocument;\n\t\t\t\toffsetParent = elem.offsetParent || doc.documentElement;\n\t\t\t\twhile (offsetParent &&\n\t\t\t\t\t(offsetParent === doc.body || offsetParent === doc.documentElement) &&\n\t\t\t\t\tjQuery.css(offsetParent, \"position\") === \"static\") {\n\n\t\t\t\t\toffsetParent = offsetParent.parentNode;\n\t\t\t\t}\n\t\t\t\tif (offsetParent && offsetParent !== elem && offsetParent.nodeType === 1) {\n\n\t\t\t\t\t// Incorporate borders into its offset, since they are outside its content origin\n\t\t\t\t\tparentOffset = jQuery(offsetParent).offset();\n\t\t\t\t\tparentOffset.top += jQuery.css(offsetParent, \"borderTopWidth\", true);\n\t\t\t\t\tparentOffset.left += jQuery.css(offsetParent, \"borderLeftWidth\", true);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Subtract parent offsets and element margins\n\t\t\treturn {\n\t\t\t\ttop: offset.top - parentOffset.top - jQuery.css(elem, \"marginTop\", true),\n\t\t\t\tleft: offset.left - parentOffset.left - jQuery.css(elem, \"marginLeft\", true)\n\t\t\t};\n\t\t},\n\n\t\t// This method will return documentElement in the following cases:\n\t\t// 1) For the element inside the iframe without offsetParent, this method will return\n\t\t//    documentElement of the parent window\n\t\t// 2) For the hidden or detached element\n\t\t// 3) For body or html element, i.e. in case of the html node - it will return itself\n\t\t//\n\t\t// but those exceptions were never presented as a real life use-cases\n\t\t// and might be considered as more preferable results.\n\t\t//\n\t\t// This logic, however, is not guaranteed and can change at any point in the future\n\t\toffsetParent: function () {\n\t\t\treturn this.map(function () {\n\t\t\t\tvar offsetParent = this.offsetParent;\n\n\t\t\t\twhile (offsetParent && jQuery.css(offsetParent, \"position\") === \"static\") {\n\t\t\t\t\toffsetParent = offsetParent.offsetParent;\n\t\t\t\t}\n\n\t\t\t\treturn offsetParent || documentElement;\n\t\t\t});\n\t\t}\n\t});\n\n\t// Create scrollLeft and scrollTop methods\n\tjQuery.each({ scrollLeft: \"pageXOffset\", scrollTop: \"pageYOffset\" }, function (method, prop) {\n\t\tvar top = \"pageYOffset\" === prop;\n\n\t\tjQuery.fn[method] = function (val) {\n\t\t\treturn access(this, function (elem, method, val) {\n\n\t\t\t\t// Coalesce documents and windows\n\t\t\t\tvar win;\n\t\t\t\tif (isWindow(elem)) {\n\t\t\t\t\twin = elem;\n\t\t\t\t} else if (elem.nodeType === 9) {\n\t\t\t\t\twin = elem.defaultView;\n\t\t\t\t}\n\n\t\t\t\tif (val === undefined) {\n\t\t\t\t\treturn win ? win[prop] : elem[method];\n\t\t\t\t}\n\n\t\t\t\tif (win) {\n\t\t\t\t\twin.scrollTo(\n\t\t\t\t\t\t!top ? val : win.pageXOffset,\n\t\t\t\t\t\ttop ? val : win.pageYOffset\n\t\t\t\t\t);\n\n\t\t\t\t} else {\n\t\t\t\t\telem[method] = val;\n\t\t\t\t}\n\t\t\t}, method, val, arguments.length);\n\t\t};\n\t});\n\n\t// Support: Safari <=7 - 9.1, Chrome <=37 - 49\n\t// Add the top/left cssHooks using jQuery.fn.position\n\t// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084\n\t// Blink bug: https://bugs.chromium.org/p/chromium/issues/detail?id=589347\n\t// getComputedStyle returns percent when specified for top/left/bottom/right;\n\t// rather than make the css module depend on the offset module, just check for it here\n\tjQuery.each([\"top\", \"left\"], function (_i, prop) {\n\t\tjQuery.cssHooks[prop] = addGetHookIf(support.pixelPosition,\n\t\t\tfunction (elem, computed) {\n\t\t\t\tif (computed) {\n\t\t\t\t\tcomputed = curCSS(elem, prop);\n\n\t\t\t\t\t// If curCSS returns percentage, fallback to offset\n\t\t\t\t\treturn rnumnonpx.test(computed) ?\n\t\t\t\t\t\tjQuery(elem).position()[prop] + \"px\" :\n\t\t\t\t\t\tcomputed;\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\t});\n\n\n\t// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods\n\tjQuery.each({ Height: \"height\", Width: \"width\" }, function (name, type) {\n\t\tjQuery.each({\n\t\t\tpadding: \"inner\" + name,\n\t\t\tcontent: type,\n\t\t\t\"\": \"outer\" + name\n\t\t}, function (defaultExtra, funcName) {\n\n\t\t\t// Margin is only for outerHeight, outerWidth\n\t\t\tjQuery.fn[funcName] = function (margin, value) {\n\t\t\t\tvar chainable = arguments.length && (defaultExtra || typeof margin !== \"boolean\"),\n\t\t\t\t\textra = defaultExtra || (margin === true || value === true ? \"margin\" : \"border\");\n\n\t\t\t\treturn access(this, function (elem, type, value) {\n\t\t\t\t\tvar doc;\n\n\t\t\t\t\tif (isWindow(elem)) {\n\n\t\t\t\t\t\t// $( window ).outerWidth/Height return w/h including scrollbars (gh-1729)\n\t\t\t\t\t\treturn funcName.indexOf(\"outer\") === 0 ?\n\t\t\t\t\t\t\telem[\"inner\" + name] :\n\t\t\t\t\t\t\telem.document.documentElement[\"client\" + name];\n\t\t\t\t\t}\n\n\t\t\t\t\t// Get document width or height\n\t\t\t\t\tif (elem.nodeType === 9) {\n\t\t\t\t\t\tdoc = elem.documentElement;\n\n\t\t\t\t\t\t// Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height],\n\t\t\t\t\t\t// whichever is greatest\n\t\t\t\t\t\treturn Math.max(\n\t\t\t\t\t\t\telem.body[\"scroll\" + name], doc[\"scroll\" + name],\n\t\t\t\t\t\t\telem.body[\"offset\" + name], doc[\"offset\" + name],\n\t\t\t\t\t\t\tdoc[\"client\" + name]\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\n\t\t\t\t\treturn value === undefined ?\n\n\t\t\t\t\t\t// Get width or height on the element, requesting but not forcing parseFloat\n\t\t\t\t\t\tjQuery.css(elem, type, extra) :\n\n\t\t\t\t\t\t// Set width or height on the element\n\t\t\t\t\t\tjQuery.style(elem, type, value, extra);\n\t\t\t\t}, type, chainable ? margin : undefined, chainable);\n\t\t\t};\n\t\t});\n\t});\n\n\n\tjQuery.each([\n\t\t\"ajaxStart\",\n\t\t\"ajaxStop\",\n\t\t\"ajaxComplete\",\n\t\t\"ajaxError\",\n\t\t\"ajaxSuccess\",\n\t\t\"ajaxSend\"\n\t], function (_i, type) {\n\t\tjQuery.fn[type] = function (fn) {\n\t\t\treturn this.on(type, fn);\n\t\t};\n\t});\n\n\n\n\n\tjQuery.fn.extend({\n\n\t\tbind: function (types, data, fn) {\n\t\t\treturn this.on(types, null, data, fn);\n\t\t},\n\t\tunbind: function (types, fn) {\n\t\t\treturn this.off(types, null, fn);\n\t\t},\n\n\t\tdelegate: function (selector, types, data, fn) {\n\t\t\treturn this.on(types, selector, data, fn);\n\t\t},\n\t\tundelegate: function (selector, types, fn) {\n\n\t\t\t// ( namespace ) or ( selector, types [, fn] )\n\t\t\treturn arguments.length === 1 ?\n\t\t\t\tthis.off(selector, \"**\") :\n\t\t\t\tthis.off(types, selector || \"**\", fn);\n\t\t},\n\n\t\thover: function (fnOver, fnOut) {\n\t\t\treturn this.mouseenter(fnOver).mouseleave(fnOut || fnOver);\n\t\t}\n\t});\n\n\tjQuery.each(\n\t\t(\"blur focus focusin focusout resize scroll click dblclick \" +\n\t\t\t\"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave \" +\n\t\t\t\"change select submit keydown keypress keyup contextmenu\").split(\" \"),\n\t\tfunction (_i, name) {\n\n\t\t\t// Handle event binding\n\t\t\tjQuery.fn[name] = function (data, fn) {\n\t\t\t\treturn arguments.length > 0 ?\n\t\t\t\t\tthis.on(name, null, data, fn) :\n\t\t\t\t\tthis.trigger(name);\n\t\t\t};\n\t\t}\n\t);\n\n\n\n\n\t// Support: Android <=4.0 only\n\t// Make sure we trim BOM and NBSP\n\t// Require that the \"whitespace run\" starts from a non-whitespace\n\t// to avoid O(N^2) behavior when the engine would try matching \"\\s+$\" at each space position.\n\tvar rtrim = /^[\\s\\uFEFF\\xA0]+|([^\\s\\uFEFF\\xA0])[\\s\\uFEFF\\xA0]+$/g;\n\n\t// Bind a function to a context, optionally partially applying any\n\t// arguments.\n\t// jQuery.proxy is deprecated to promote standards (specifically Function#bind)\n\t// However, it is not slated for removal any time soon\n\tjQuery.proxy = function (fn, context) {\n\t\tvar tmp, args, proxy;\n\n\t\tif (typeof context === \"string\") {\n\t\t\ttmp = fn[context];\n\t\t\tcontext = fn;\n\t\t\tfn = tmp;\n\t\t}\n\n\t\t// Quick check to determine if target is callable, in the spec\n\t\t// this throws a TypeError, but we will just return undefined.\n\t\tif (!isFunction(fn)) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\t// Simulated bind\n\t\targs = slice.call(arguments, 2);\n\t\tproxy = function () {\n\t\t\treturn fn.apply(context || this, args.concat(slice.call(arguments)));\n\t\t};\n\n\t\t// Set the guid of unique handler to the same of original handler, so it can be removed\n\t\tproxy.guid = fn.guid = fn.guid || jQuery.guid++;\n\n\t\treturn proxy;\n\t};\n\n\tjQuery.holdReady = function (hold) {\n\t\tif (hold) {\n\t\t\tjQuery.readyWait++;\n\t\t} else {\n\t\t\tjQuery.ready(true);\n\t\t}\n\t};\n\tjQuery.isArray = Array.isArray;\n\tjQuery.parseJSON = JSON.parse;\n\tjQuery.nodeName = nodeName;\n\tjQuery.isFunction = isFunction;\n\tjQuery.isWindow = isWindow;\n\tjQuery.camelCase = camelCase;\n\tjQuery.type = toType;\n\n\tjQuery.now = Date.now;\n\n\tjQuery.isNumeric = function (obj) {\n\n\t\t// As of jQuery 3.0, isNumeric is limited to\n\t\t// strings and numbers (primitives or objects)\n\t\t// that can be coerced to finite numbers (gh-2662)\n\t\tvar type = jQuery.type(obj);\n\t\treturn (type === \"number\" || type === \"string\") &&\n\n\t\t\t// parseFloat NaNs numeric-cast false positives (\"\")\n\t\t\t// ...but misinterprets leading-number strings, particularly hex literals (\"0x...\")\n\t\t\t// subtraction forces infinities to NaN\n\t\t\t!isNaN(obj - parseFloat(obj));\n\t};\n\n\tjQuery.trim = function (text) {\n\t\treturn text == null ?\n\t\t\t\"\" :\n\t\t\t(text + \"\").replace(rtrim, \"$1\");\n\t};\n\n\n\n\t// Register as a named AMD module, since jQuery can be concatenated with other\n\t// files that may use define, but not via a proper concatenation script that\n\t// understands anonymous AMD modules. A named AMD is safest and most robust\n\t// way to register. Lowercase jquery is used because AMD module names are\n\t// derived from file names, and jQuery is normally delivered in a lowercase\n\t// file name. Do this after creating the global so that if an AMD module wants\n\t// to call noConflict to hide this version of jQuery, it will work.\n\n\t// Note that for maximum portability, libraries that are not jQuery should\n\t// declare themselves as anonymous modules, and avoid setting a global if an\n\t// AMD loader is present. jQuery is a special case. For more information, see\n\t// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon\n\n\tif (typeof define === \"function\" && define.amd) {\n\t\tdefine(\"jquery\", [], function () {\n\t\t\treturn jQuery;\n\t\t});\n\t}\n\n\n\n\n\tvar\n\n\t\t// Map over jQuery in case of overwrite\n\t\t_jQuery = window.jQuery,\n\n\t\t// Map over the $ in case of overwrite\n\t\t_$ = window.$;\n\n\tjQuery.noConflict = function (deep) {\n\t\tif (window.$ === jQuery) {\n\t\t\twindow.$ = _$;\n\t\t}\n\n\t\tif (deep && window.jQuery === jQuery) {\n\t\t\twindow.jQuery = _jQuery;\n\t\t}\n\n\t\treturn jQuery;\n\t};\n\n\t// Expose jQuery and $ identifiers, even in AMD\n\t// (trac-7102#comment:10, https://github.com/jquery/jquery/pull/557)\n\t// and CommonJS for browser emulators (trac-13566)\n\tif (typeof noGlobal === \"undefined\") {\n\t\twindow.jQuery = window.$ = jQuery;\n\t}\n\n\n\n\n\treturn jQuery;\n});"
  },
  {
    "path": "src/sourceDev.WebApp/SharedThemes/solar/Shared/_Layout.cshtml",
    "content": "﻿@inject ISiteContextResolver siteResolver\n@inject ICoreThemeHelper themeHelper\n@{\n    var themeSettings = themeHelper.GetThemeSettings();\n    @*\n        These settings can be set by a main view to show additional columns.\n        Views that push content into the optional sections SideNav, AsidePrimary, and AsideSecondary\n        are obligated to set the needed viewtate property to true to show the section,\n        otherwise an error will occur.\n        The sideNav column also supports a toggle so it can be hidden and toggled visible even though it renders.\n    *@\n    bool sideNavVisible = true.Equals(ViewData[\"SideNavVisible\"]);\n    string sideNavToggleClass = ViewData[\"SideNavToggle\"]?.ToString() ?? \"collapse\";\n    bool asidePrimaryVisible = true.Equals(ViewData[\"AsidePrimaryVisible\"]);\n    bool asideSecondaryVisible = true.Equals(ViewData[\"AsideSecondaryVisible\"]);\n    var Tenant = await siteResolver.ResolveSite(Context.Request.Host.Host, Context.Request.Path);\n    var siteRoot = \"\";\n    if (!string.IsNullOrWhiteSpace(Tenant.SiteFolderName)) { siteRoot = \"/\" + Tenant.SiteFolderName; }\n    \n}\n<!DOCTYPE html>\n<html lang=\"@CultureInfo.CurrentUICulture.Name\">\n<head>\n    <meta charset=\"utf-8\" />\n    <title>@ViewData[\"Title\"] - @(Tenant?.SiteName ?? \"Sample\")</title>\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1, shrink-to-fit=no\">\n    @RenderSection(\"Meta\", required: false)\n    <environment names=\"Development\">\n        <link rel=\"stylesheet\" href=\"~/css/bootstrap.css\" cs-resolve-theme-resource=\"true\" cs-shared-theme=\"true\" cs-tenant=\"@Tenant\" />\n        <link rel=\"stylesheet\" href=\"~/css/fontawesome-all.min.css\" cs-resolve-theme-resource=\"true\" cs-shared-theme=\"true\" cs-tenant=\"@Tenant\" />\n        <link rel=\"stylesheet\" href=\"~/css/site.css\" cs-resolve-theme-resource=\"true\" cs-shared-theme=\"true\" cs-tenant=\"@Tenant\" asp-append-version=\"true\" />\n    </environment>\n    <environment names=\"Staging,Production\">\n        <link rel=\"stylesheet\" href=\"~/css/bootstrap.min.css\" cs-resolve-theme-resource=\"true\" cs-shared-theme=\"true\" cs-tenant=\"@Tenant\" />\n        <link rel=\"stylesheet\" href=\"~/css/fontawesome-all.min.css\" cs-resolve-theme-resource=\"true\" cs-shared-theme=\"true\" cs-tenant=\"@Tenant\" />\n        <link rel=\"stylesheet\" href=\"~/css/site.min.css\" cs-resolve-theme-resource=\"true\" cs-shared-theme=\"true\" cs-tenant=\"@Tenant\" asp-append-version=\"true\" />\n    </environment>\n    @RenderSection(\"Styles\", required: false)    \n    \n    <google-analytics profile-id=\"@Tenant.GoogleAnalyticsProfileId\" user-id=\"@User.GetUserId()\"></google-analytics>\n    <base href=\"@Context.Request.Path\" />\n</head>\n<body class=\"d-flex flex-column @ViewData[\"BodyClass\"]\">\n    <header>\n        <a id=\"skippy\" class=\"visually-hidden visually-hidden-focusable\" href=\"#content\">\n            <div class=\"container\">\n                <span class=\"skiplink-text\">Skip to main content</span>\n            </div>\n        </a>\n        <div class=\"fixed-top brand-header\">\n            <div class=\"d-flex align-items-center \">\n                @if (!string.IsNullOrWhiteSpace(Tenant.LogoUrl))\n                {\n                    <div>\n                         <partial name=\"SiteLogoPartial\" model=\"@Tenant\" />\n                    </div>\n                }\n                @if (Tenant.ShowSiteNameLink)\n                {\n                    <div class=\"align-self-center pt-4 pt-sm-0\">\n                         <partial name=\"SiteTitlePartial\" model=\"@Tenant\" />\n                    </div>\n                }\n                @if (!string.IsNullOrWhiteSpace(Tenant.HeaderContent))\n                {\n                    <div class=\"flex-fill align-self-center pt-3 d-none d-md-block\">\n                        <partial name=\"SiteHeaderPartial\" />\n                    </div>\n                }\n            </div>\n        </div>\n        <nav class=\"navbar navbar-expand-md navbar-dark fixed-top bg-dark\">\n            <button class=\"navbar-toggler\" type=\"button\" data-bs-toggle=\"collapse\" data-bs-target=\"#navbarNavDropdown\" aria-controls=\"navbarNavDropdown\" aria-expanded=\"false\" aria-label=\"Toggle navigation\">\n                <span class=\"navbar-toggler-icon\"></span>\n            </button>\n            <div class=\"collapse navbar-collapse bg-dark ps-2\" id=\"navbarNavDropdown\">\n                @await Component.InvokeAsync(\"Navigation\", new { viewName = \"Bootstrap5TopNavWithDropdowns\", filterName = NamedNavigationFilters.TopNav, startingNodeKey = \"\" })\n                <partial name=\"_LoginPartialWithDropdowns\" />\n            </div>\n        </nav>\n    </header>\n    <div id=\"wrapper\" class=\"container cs-container flex-fill\">\n        @await Component.InvokeAsync(\"Navigation\", new { viewName = \"Bootstrap5Breadcrumbs\", filterName = NamedNavigationFilters.Breadcrumbs, startingNodeKey = \"\" })\n        <div class=\"row\">\n            <main id=\"content\" class=\"col order-3\">\n                <partial name=\"AlertsPartial\" />\n                <partial name=\"_CookieConsentPartial\" />\n                <partial name=\"_AutoLogoutWarningPartial\" />\n                @RenderBody()\n            </main>\n            @if (sideNavVisible)\n            {\n                <nav id=\"sidenavmenu\" class=\" col col-3 order-1 @sideNavToggleClass\">\n                    @RenderSection(\"SideNav\", required: false)\n                </nav>\n\n            }\n            @if (asideSecondaryVisible)\n            {\n                <aside id=\"asideSecondary\" class=\"col col-1 order-2\">\n                    @RenderSection(\"AsideSecondary\", required: false)\n                </aside>\n\n            }\n            @if (asidePrimaryVisible)\n            {\n                <aside id=\"asidePrimary\" class=\"col-12 col-md-3 col-sm-12  col-sm-12 order-4\">\n                    @RenderSection(\"AsidePrimary\", required: false)\n                </aside>\n\n            }\n        </div>\n    </div>\n     <footer class=\"sticky-bottom border pt-2 h-100\">\n        <div class=\"w-100 text-center\">\n            <partial name=\"SiteFooterPartial\" />\n        </div>\n        <div class=\"d-flex flex-wrap flex-grow justify-content-center\">\n            <div class=\"p-2\">\n            <ul class=\"list-unstyled d-flex flex-wrap\">\n                @if (Tenant != null && !string.IsNullOrWhiteSpace(Tenant.PrivacyPolicy))\n                {\n                    <li class=\"border-left ps-2 me-2\">\n                        <a asp-controller=\"Privacy\" asp-action=\"Index\">Privacy Policy</a>\n                    </li>\n                }\n                <li class=\"border-left ps-2 me-2\">\n                    @* you are free to remove the powered by cloudscribe link but we appreciate it if you choose to keep it! *@\n                    <a class=\"text-nowrap\" target=\"_blank\" href=\"https://www.cloudscribe.com/?utm_source=@Context.Request.Host.Value&amp;utm_medium=referral&amp;utm_campaign=poweredbycloudscribe\">Powered by cloudscribe</a>\n                </li>\n            </ul>\n        </div>\n        <div class=\"ps-sm-2  text-center w-100\"><span class=\"text-nowrap\">Copyright &copy; @DateTime.Now.Year</span><span class=\"d-none d-sm-inline\"> - </span><span> @(Tenant?.SiteName ?? \"Sample\")</span></div>\n        <partial name=\"_CookieConsentRevokePartial\" />\n        </div>\n    </footer>\n    @RenderSection(\"Toolbar\", required: false)\n    <environment names=\"Development\">\n        <script src=\"~/js/jquery.js\" cs-resolve-theme-resource=\"true\" cs-shared-theme=\"true\" cs-tenant=\"@Tenant\"></script>\n        <script src=\"~/js/bootstrap.bundle.js\" cs-resolve-theme-resource=\"true\" cs-shared-theme=\"true\" cs-tenant=\"@Tenant\"></script>\n        <script src=\"~/cr/js/bs4.smartmenus.min.js\"></script>\n    </environment>\n    <environment names=\"Staging,Production\">\n        <script src=\"~/js/jquery.min.js\" cs-resolve-theme-resource=\"true\" cs-shared-theme=\"true\" cs-tenant=\"@Tenant\"></script>\n        <script src=\"~/js/bootstrap.bundle.min.js\" cs-resolve-theme-resource=\"true\" cs-shared-theme=\"true\" cs-tenant=\"@Tenant\"></script>\n        <script src=\"~/cr/js/bs4.smartmenus.min.js\"></script>\n    </environment>\n    @RenderSection(\"Bottom\", required: false)\n    @RenderSection(\"Scripts\", required: false)     \n    @Html.RenderResources(\"js\") @*render any js resources declared via helpers in partial views etc*@\n    <add-this profile-id=\"@Tenant.AddThisDotComUsername\" async></add-this>\n</body>\n</html>\n"
  },
  {
    "path": "src/sourceDev.WebApp/SharedThemes/solar/wwwroot/css/_bootswatch.scss",
    "content": "// Solar 5.1.3\n// Bootswatch\n\n\n// Variables\n\n$web-font-path: \"https://fonts.googleapis.com/css2?family=Source+Sans+Pro:wght@400;600;700&display=swap\" !default;\n@if $web-font-path {\n  @import url($web-font-path);\n}\n\n// Buttons\n\n.btn {\n  @each $color, $value in $theme-colors {\n    &-#{$color} {\n      @if $enable-gradients {\n        background: $value linear-gradient(180deg, mix($white, $value, 15%), $value) repeat-x;\n      } @else {\n        background-color: $value;\n      }\n    }\n  }\n}\n\n// Indicators\n\n.alert {\n  border: none;\n  color: $white;\n\n  a,\n  .alert-link {\n    color: $white;\n    text-decoration: underline;\n  }\n\n  @each $color, $value in $theme-colors {\n    &-#{$color} {\n      @if $enable-gradients {\n        background: $value linear-gradient(180deg, mix($white, $value, 15%), $value) repeat-x;\n      } @else {\n        background-color: $value;\n      }\n    }\n  }\n\n  &-light {\n    &,\n    a:not(.btn),\n    .alert-link {\n      color: $body-bg;\n    }\n  }\n}\n\n\n.badge {\n  &.bg-light {\n    color: $dark;\n  }\n}\n"
  },
  {
    "path": "src/sourceDev.WebApp/SharedThemes/solar/wwwroot/css/_variables.scss",
    "content": "// Solar 5.1.3\n// Bootswatch\n\n$theme: \"solar\" !default;\n\n//\n// Color system\n//\n\n// stylelint-disable\n$white:    #fff !default;\n$gray-100: #fdf6e3 !default;\n$gray-200: #eee8d5 !default;\n$gray-300: #dee2e6 !default;\n$gray-400: #ced4da !default;\n$gray-500: #adb5bd !default;\n$gray-600: #839496 !default;\n$gray-700: #495057 !default;\n$gray-800: #073642 !default;\n$gray-900: #002b36 !default;\n$black:    #000 !default;\n\n$blue:    #b58900 !default;\n$indigo:  #6610f2 !default;\n$purple:  #6f42c1 !default;\n$pink:    #e83e8c !default;\n$red:     #d33682 !default;\n$orange:  #fd7e14 !default;\n$yellow:  #cb4b16 !default;\n$green:   #2aa198 !default;\n$teal:    #20c997 !default;\n$cyan:    #268bd2 !default;\n\n$primary:       $blue !default;\n$secondary:     $gray-600 !default;\n$success:       $green !default;\n$info:          $cyan !default;\n$warning:       $yellow !default;\n$danger:        $red !default;\n$light:         $gray-100 !default;\n$dark:          $gray-800 !default;\n\n$min-contrast-ratio:   2.5 !default;\n\n// Body\n\n$body-bg:                   $gray-900 !default;\n$body-color:                $gray-600 !default;\n\n// Links\n\n$link-color:                $success !default;\n$link-hover-color:          $link-color !default;\n\n// Components\n\n$component-active-color:      rgba(255, 255, 255, .75) !default;\n$component-active-bg:         $gray-800 !default;\n\n// Fonts\n\n$font-family-sans-serif:      \"Source Sans Pro\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\" !default !default;\n\n// Tables\n\n$table-accent-bg:             rgba($white, .05) !default;\n$table-hover-bg:              rgba($white, .075) !default;\n$table-border-color:          $component-active-bg !default;\n$table-dark-bg:               $gray-500 !default;\n$table-dark-border-color:     darken($gray-500, 3%) !default;\n$table-dark-color:            $body-bg !default;\n\n$table-bg-scale:              0 !default;\n\n// Forms\n\n$input-bg:                              #a9bdbd !default;\n$input-disabled-bg:                     #657b83 !default;\n\n$input-color:                           $gray-800 !default;\n$input-border-color:                    rgba($black, .15) !default;\n$input-placeholder-color:               #657b83 !default;\n$input-group-addon-color:               $gray-600 !default;\n$input-group-addon-bg:                  $gray-800 !default;\n\n$form-check-input-bg:                     rgba(255, 255, 255, .75) !default;\n$form-check-input-border:                 1px solid $white !default;\n$form-check-input-checked-bg-color:       $primary !default;\n\n$form-switch-color:               rgba(255, 255, 255, .75) !default;\n$form-switch-focus-color:         $form-switch-color !default;\n\n$form-range-track-bg:             $gray-800 !default;\n$form-range-thumb-bg:                      $primary !default;\n\n$form-file-button-color:          $gray-600 !default;\n\n// Dropdowns\n\n$dropdown-bg:                       $gray-800 !default;\n$dropdown-divider-bg:               $body-bg !default;\n$dropdown-link-color:               $body-color !default;\n$dropdown-link-hover-color:         rgba(255, 255, 255, .75) !default;\n$dropdown-link-hover-bg:            $body-bg !default;\n\n// Navs\n\n$nav-tabs-border-color:             $gray-800 !default;\n$nav-tabs-link-hover-border-color:  $nav-tabs-border-color !default;\n$nav-tabs-link-active-color:        $component-active-color !default;\n$nav-tabs-link-active-bg:           $body-bg !default;\n$nav-tabs-link-active-border-color: $nav-tabs-border-color !default;\n\n// Navbars\n\n$navbar-light-color:                rgba($black, .4) !default !default;\n$navbar-light-active-color:         rgba($black, .7) !default !default;\n\n// Pagination\n\n$pagination-bg:                     transparent !default;\n$pagination-border-color:           $gray-800 !default;\n$pagination-hover-bg:               $gray-800 !default;\n$pagination-hover-border-color:     $gray-800 !default;\n$pagination-active-color:           rgba(255, 255, 255, .75) !default;\n$pagination-active-bg:              $gray-800 !default;\n$pagination-active-border-color:    $gray-800 !default;\n$pagination-disabled-color:         $gray-800 !default;\n$pagination-disabled-bg:            transparent !default;\n$pagination-disabled-border-color:  $gray-800 !default;\n\n// Cards\n\n$card-border-color:                 rgba($gray-900, .95) !default;\n$card-cap-bg:                       rgba($gray-800, .25) !default;\n$card-bg:                           rgba($gray-200, .125) !default;\n\n// Popovers\n\n$popover-bg:                        $gray-800 !default;\n$popover-border-color:              $body-bg !default;\n$popover-header-bg:                 $gray-800 !default;\n\n// Toasts\n\n$toast-background-color:            lighten($body-bg, 5%) !default;\n$toast-border-color:                rgba(0, 0, 0, .2) !default;\n$toast-header-color:                $body-color !default;\n$toast-header-background-color:     $toast-background-color !default;\n$toast-header-border-color:         $toast-border-color !default;\n\n// Modals\n\n$modal-content-bg:                  $gray-800 !default;\n$modal-content-border-color:        $body-bg !default;\n$modal-header-border-color:         $body-bg !default;\n\n// Progress bars\n\n$progress-bg:                       $gray-800 !default;\n$progress-bar-color:                $primary !default;\n\n// List group\n\n$list-group-color:                  $white !default;\n$list-group-bg:                     transparent !default;\n$list-group-border-color:           $gray-800 !default;\n$list-group-hover-bg:               $gray-800 !default;\n$list-group-active-color:           $white !default;\n$list-group-disabled-color:         $gray-600 !default;\n$list-group-disabled-bg:            transparent !default;\n$list-group-action-color:           $body-color !default;\n$list-group-action-hover-color:     $white !default;\n\n// Breadcrumbs\n\n$breadcrumb-padding-y:              .375rem !default;\n$breadcrumb-padding-x:              .75rem !default;\n$breadcrumb-bg:                     $component-active-bg !default;\n$breadcrumb-active-color:           $gray-500 !default;\n$breadcrumb-border-radius:          .25rem !default;\n\n// Close\n\n$btn-close-color:                       $white !default;\n\n// Code\n\n$pre-color:                         inherit !default;\n"
  },
  {
    "path": "src/sourceDev.WebApp/SharedThemes/solar/wwwroot/css/bootstrap.css",
    "content": "/*!\n * Bootswatch v5.1.3\n * Homepage: https://bootswatch.com\n * Copyright 2012-2021 Thomas Park\n * Licensed under MIT\n * Based on Bootstrap\n*/\n/*!\n * Bootstrap v5.1.3 (https://getbootstrap.com/)\n * Copyright 2011-2021 The Bootstrap Authors\n * Copyright 2011-2021 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n@import url(\"https://fonts.googleapis.com/css2?family=Source+Sans+Pro:wght@400;600;700&display=swap\");\n:root {\n  --bs-blue: #b58900;\n  --bs-indigo: #6610f2;\n  --bs-purple: #6f42c1;\n  --bs-pink: #e83e8c;\n  --bs-red: #d33682;\n  --bs-orange: #fd7e14;\n  --bs-yellow: #cb4b16;\n  --bs-green: #2aa198;\n  --bs-teal: #20c997;\n  --bs-cyan: #268bd2;\n  --bs-white: #fff;\n  --bs-gray: #839496;\n  --bs-gray-dark: #073642;\n  --bs-gray-100: #fdf6e3;\n  --bs-gray-200: #eee8d5;\n  --bs-gray-300: #dee2e6;\n  --bs-gray-400: #ced4da;\n  --bs-gray-500: #adb5bd;\n  --bs-gray-600: #839496;\n  --bs-gray-700: #495057;\n  --bs-gray-800: #073642;\n  --bs-gray-900: #002b36;\n  --bs-primary: #b58900;\n  --bs-secondary: #839496;\n  --bs-success: #2aa198;\n  --bs-info: #268bd2;\n  --bs-warning: #cb4b16;\n  --bs-danger: #d33682;\n  --bs-light: #fdf6e3;\n  --bs-dark: #073642;\n  --bs-primary-rgb: 181, 137, 0;\n  --bs-secondary-rgb: 131, 148, 150;\n  --bs-success-rgb: 42, 161, 152;\n  --bs-info-rgb: 38, 139, 210;\n  --bs-warning-rgb: 203, 75, 22;\n  --bs-danger-rgb: 211, 54, 130;\n  --bs-light-rgb: 253, 246, 227;\n  --bs-dark-rgb: 7, 54, 66;\n  --bs-white-rgb: 255, 255, 255;\n  --bs-black-rgb: 0, 0, 0;\n  --bs-body-color-rgb: 131, 148, 150;\n  --bs-body-bg-rgb: 0, 43, 54;\n  --bs-font-sans-serif: \"Source Sans Pro\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\";\n  --bs-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n  --bs-gradient: linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));\n  --bs-body-font-family: var(--bs-font-sans-serif);\n  --bs-body-font-size: 1rem;\n  --bs-body-font-weight: 400;\n  --bs-body-line-height: 1.5;\n  --bs-body-color: #839496;\n  --bs-body-bg: #002b36;\n}\n\n*,\n*::before,\n*::after {\n  box-sizing: border-box;\n}\n\n@media (prefers-reduced-motion: no-preference) {\n  :root {\n    scroll-behavior: smooth;\n  }\n}\n\nbody {\n  margin: 0;\n  font-family: var(--bs-body-font-family);\n  font-size: var(--bs-body-font-size);\n  font-weight: var(--bs-body-font-weight);\n  line-height: var(--bs-body-line-height);\n  color: var(--bs-body-color);\n  text-align: var(--bs-body-text-align);\n  background-color: var(--bs-body-bg);\n  -webkit-text-size-adjust: 100%;\n  -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\n\nhr {\n  margin: 1rem 0;\n  color: inherit;\n  background-color: currentColor;\n  border: 0;\n  opacity: 0.25;\n}\n\nhr:not([size]) {\n  height: 1px;\n}\n\nh1, .h1, h2, .h2, h3, .h3, h4, .h4, h5, .h5, h6, .h6 {\n  margin-top: 0;\n  margin-bottom: 0.5rem;\n  font-weight: 500;\n  line-height: 1.2;\n}\n\nh1, .h1 {\n  font-size: calc(1.375rem + 1.5vw);\n}\n\n@media (min-width: 1200px) {\n  h1, .h1 {\n    font-size: 2.5rem;\n  }\n}\n\nh2, .h2 {\n  font-size: calc(1.325rem + 0.9vw);\n}\n\n@media (min-width: 1200px) {\n  h2, .h2 {\n    font-size: 2rem;\n  }\n}\n\nh3, .h3 {\n  font-size: calc(1.3rem + 0.6vw);\n}\n\n@media (min-width: 1200px) {\n  h3, .h3 {\n    font-size: 1.75rem;\n  }\n}\n\nh4, .h4 {\n  font-size: calc(1.275rem + 0.3vw);\n}\n\n@media (min-width: 1200px) {\n  h4, .h4 {\n    font-size: 1.5rem;\n  }\n}\n\nh5, .h5 {\n  font-size: 1.25rem;\n}\n\nh6, .h6 {\n  font-size: 1rem;\n}\n\np {\n  margin-top: 0;\n  margin-bottom: 1rem;\n}\n\nabbr[title],\nabbr[data-bs-original-title] {\n  -webkit-text-decoration: underline dotted;\n  text-decoration: underline dotted;\n  cursor: help;\n  -webkit-text-decoration-skip-ink: none;\n  text-decoration-skip-ink: none;\n}\n\naddress {\n  margin-bottom: 1rem;\n  font-style: normal;\n  line-height: inherit;\n}\n\nol,\nul {\n  padding-left: 2rem;\n}\n\nol,\nul,\ndl {\n  margin-top: 0;\n  margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n  margin-bottom: 0;\n}\n\ndt {\n  font-weight: 700;\n}\n\ndd {\n  margin-bottom: .5rem;\n  margin-left: 0;\n}\n\nblockquote {\n  margin: 0 0 1rem;\n}\n\nb,\nstrong {\n  font-weight: bolder;\n}\n\nsmall, .small {\n  font-size: 0.875em;\n}\n\nmark, .mark {\n  padding: 0.2em;\n  background-color: #fcf8e3;\n}\n\nsub,\nsup {\n  position: relative;\n  font-size: 0.75em;\n  line-height: 0;\n  vertical-align: baseline;\n}\n\nsub {\n  bottom: -.25em;\n}\n\nsup {\n  top: -.5em;\n}\n\na {\n  color: #2aa198;\n  text-decoration: underline;\n}\n\na:hover {\n  color: #2aa198;\n}\n\na:not([href]):not([class]), a:not([href]):not([class]):hover {\n  color: inherit;\n  text-decoration: none;\n}\n\npre,\ncode,\nkbd,\nsamp {\n  font-family: var(--bs-font-monospace);\n  font-size: 1em;\n  direction: ltr /* rtl:ignore */;\n  unicode-bidi: bidi-override;\n}\n\npre {\n  display: block;\n  margin-top: 0;\n  margin-bottom: 1rem;\n  overflow: auto;\n  font-size: 0.875em;\n  color: inherit;\n}\n\npre code {\n  font-size: inherit;\n  color: inherit;\n  word-break: normal;\n}\n\ncode {\n  font-size: 0.875em;\n  color: #e83e8c;\n  word-wrap: break-word;\n}\n\na > code {\n  color: inherit;\n}\n\nkbd {\n  padding: 0.2rem 0.4rem;\n  font-size: 0.875em;\n  color: #fff;\n  background-color: #002b36;\n  border-radius: 0.2rem;\n}\n\nkbd kbd {\n  padding: 0;\n  font-size: 1em;\n  font-weight: 700;\n}\n\nfigure {\n  margin: 0 0 1rem;\n}\n\nimg,\nsvg {\n  vertical-align: middle;\n}\n\ntable {\n  caption-side: bottom;\n  border-collapse: collapse;\n}\n\ncaption {\n  padding-top: 0.5rem;\n  padding-bottom: 0.5rem;\n  color: #839496;\n  text-align: left;\n}\n\nth {\n  text-align: inherit;\n  text-align: -webkit-match-parent;\n}\n\nthead,\ntbody,\ntfoot,\ntr,\ntd,\nth {\n  border-color: inherit;\n  border-style: solid;\n  border-width: 0;\n}\n\nlabel {\n  display: inline-block;\n}\n\nbutton {\n  border-radius: 0;\n}\n\nbutton:focus:not(:focus-visible) {\n  outline: 0;\n}\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n  margin: 0;\n  font-family: inherit;\n  font-size: inherit;\n  line-height: inherit;\n}\n\nbutton,\nselect {\n  text-transform: none;\n}\n\n[role=\"button\"] {\n  cursor: pointer;\n}\n\nselect {\n  word-wrap: normal;\n}\n\nselect:disabled {\n  opacity: 1;\n}\n\n[list]::-webkit-calendar-picker-indicator {\n  display: none;\n}\n\nbutton,\n[type=\"button\"],\n[type=\"reset\"],\n[type=\"submit\"] {\n  -webkit-appearance: button;\n}\n\nbutton:not(:disabled),\n[type=\"button\"]:not(:disabled),\n[type=\"reset\"]:not(:disabled),\n[type=\"submit\"]:not(:disabled) {\n  cursor: pointer;\n}\n\n::-moz-focus-inner {\n  padding: 0;\n  border-style: none;\n}\n\ntextarea {\n  resize: vertical;\n}\n\nfieldset {\n  min-width: 0;\n  padding: 0;\n  margin: 0;\n  border: 0;\n}\n\nlegend {\n  float: left;\n  width: 100%;\n  padding: 0;\n  margin-bottom: 0.5rem;\n  font-size: calc(1.275rem + 0.3vw);\n  line-height: inherit;\n}\n\n@media (min-width: 1200px) {\n  legend {\n    font-size: 1.5rem;\n  }\n}\n\nlegend + * {\n  clear: left;\n}\n\n::-webkit-datetime-edit-fields-wrapper,\n::-webkit-datetime-edit-text,\n::-webkit-datetime-edit-minute,\n::-webkit-datetime-edit-hour-field,\n::-webkit-datetime-edit-day-field,\n::-webkit-datetime-edit-month-field,\n::-webkit-datetime-edit-year-field {\n  padding: 0;\n}\n\n::-webkit-inner-spin-button {\n  height: auto;\n}\n\n[type=\"search\"] {\n  outline-offset: -2px;\n  -webkit-appearance: textfield;\n}\n\n/* rtl:raw:\n[type=\"tel\"],\n[type=\"url\"],\n[type=\"email\"],\n[type=\"number\"] {\n  direction: ltr;\n}\n*/\n::-webkit-search-decoration {\n  -webkit-appearance: none;\n}\n\n::-webkit-color-swatch-wrapper {\n  padding: 0;\n}\n\n::file-selector-button {\n  font: inherit;\n}\n\n::-webkit-file-upload-button {\n  font: inherit;\n  -webkit-appearance: button;\n}\n\noutput {\n  display: inline-block;\n}\n\niframe {\n  border: 0;\n}\n\nsummary {\n  display: list-item;\n  cursor: pointer;\n}\n\nprogress {\n  vertical-align: baseline;\n}\n\n[hidden] {\n  display: none !important;\n}\n\n.lead {\n  font-size: 1.25rem;\n  font-weight: 300;\n}\n\n.display-1 {\n  font-size: calc(1.625rem + 4.5vw);\n  font-weight: 300;\n  line-height: 1.2;\n}\n\n@media (min-width: 1200px) {\n  .display-1 {\n    font-size: 5rem;\n  }\n}\n\n.display-2 {\n  font-size: calc(1.575rem + 3.9vw);\n  font-weight: 300;\n  line-height: 1.2;\n}\n\n@media (min-width: 1200px) {\n  .display-2 {\n    font-size: 4.5rem;\n  }\n}\n\n.display-3 {\n  font-size: calc(1.525rem + 3.3vw);\n  font-weight: 300;\n  line-height: 1.2;\n}\n\n@media (min-width: 1200px) {\n  .display-3 {\n    font-size: 4rem;\n  }\n}\n\n.display-4 {\n  font-size: calc(1.475rem + 2.7vw);\n  font-weight: 300;\n  line-height: 1.2;\n}\n\n@media (min-width: 1200px) {\n  .display-4 {\n    font-size: 3.5rem;\n  }\n}\n\n.display-5 {\n  font-size: calc(1.425rem + 2.1vw);\n  font-weight: 300;\n  line-height: 1.2;\n}\n\n@media (min-width: 1200px) {\n  .display-5 {\n    font-size: 3rem;\n  }\n}\n\n.display-6 {\n  font-size: calc(1.375rem + 1.5vw);\n  font-weight: 300;\n  line-height: 1.2;\n}\n\n@media (min-width: 1200px) {\n  .display-6 {\n    font-size: 2.5rem;\n  }\n}\n\n.list-unstyled {\n  padding-left: 0;\n  list-style: none;\n}\n\n.list-inline {\n  padding-left: 0;\n  list-style: none;\n}\n\n.list-inline-item {\n  display: inline-block;\n}\n\n.list-inline-item:not(:last-child) {\n  margin-right: 0.5rem;\n}\n\n.initialism {\n  font-size: 0.875em;\n  text-transform: uppercase;\n}\n\n.blockquote {\n  margin-bottom: 1rem;\n  font-size: 1.25rem;\n}\n\n.blockquote > :last-child {\n  margin-bottom: 0;\n}\n\n.blockquote-footer {\n  margin-top: -1rem;\n  margin-bottom: 1rem;\n  font-size: 0.875em;\n  color: #839496;\n}\n\n.blockquote-footer::before {\n  content: \"\\2014\\00A0\";\n}\n\n.img-fluid {\n  max-width: 100%;\n  height: auto;\n}\n\n.img-thumbnail {\n  padding: 0.25rem;\n  background-color: #002b36;\n  border: 1px solid #dee2e6;\n  border-radius: 0.25rem;\n  max-width: 100%;\n  height: auto;\n}\n\n.figure {\n  display: inline-block;\n}\n\n.figure-img {\n  margin-bottom: 0.5rem;\n  line-height: 1;\n}\n\n.figure-caption {\n  font-size: 0.875em;\n  color: #839496;\n}\n\n.container,\n.container-fluid,\n.container-sm,\n.container-md,\n.container-lg,\n.container-xl,\n.container-xxl {\n  width: 100%;\n  padding-right: var(--bs-gutter-x, 0.75rem);\n  padding-left: var(--bs-gutter-x, 0.75rem);\n  margin-right: auto;\n  margin-left: auto;\n}\n\n@media (min-width: 576px) {\n  .container, .container-sm {\n    max-width: 540px;\n  }\n}\n\n@media (min-width: 768px) {\n  .container, .container-sm, .container-md {\n    max-width: 720px;\n  }\n}\n\n@media (min-width: 992px) {\n  .container, .container-sm, .container-md, .container-lg {\n    max-width: 960px;\n  }\n}\n\n@media (min-width: 1200px) {\n  .container, .container-sm, .container-md, .container-lg, .container-xl {\n    max-width: 1140px;\n  }\n}\n\n@media (min-width: 1400px) {\n  .container, .container-sm, .container-md, .container-lg, .container-xl, .container-xxl {\n    max-width: 1320px;\n  }\n}\n\n.row {\n  --bs-gutter-x: 1.5rem;\n  --bs-gutter-y: 0;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n  flex-wrap: wrap;\n  margin-top: calc(-1 * var(--bs-gutter-y));\n  margin-right: calc(-.5 * var(--bs-gutter-x));\n  margin-left: calc(-.5 * var(--bs-gutter-x));\n}\n\n.row > * {\n  -ms-flex-negative: 0;\n  flex-shrink: 0;\n  width: 100%;\n  max-width: 100%;\n  padding-right: calc(var(--bs-gutter-x) * .5);\n  padding-left: calc(var(--bs-gutter-x) * .5);\n  margin-top: var(--bs-gutter-y);\n}\n\n.col {\n  -ms-flex: 1 0 0%;\n  flex: 1 0 0%;\n}\n\n.row-cols-auto > * {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: auto;\n}\n\n.row-cols-1 > * {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 100%;\n}\n\n.row-cols-2 > * {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 50%;\n}\n\n.row-cols-3 > * {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 33.333333%;\n}\n\n.row-cols-4 > * {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 25%;\n}\n\n.row-cols-5 > * {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 20%;\n}\n\n.row-cols-6 > * {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 16.666667%;\n}\n\n.col-auto {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: auto;\n}\n\n.col-1 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 8.333333%;\n}\n\n.col-2 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 16.666667%;\n}\n\n.col-3 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 25%;\n}\n\n.col-4 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 33.333333%;\n}\n\n.col-5 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 41.666667%;\n}\n\n.col-6 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 50%;\n}\n\n.col-7 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 58.333333%;\n}\n\n.col-8 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 66.666667%;\n}\n\n.col-9 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 75%;\n}\n\n.col-10 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 83.333333%;\n}\n\n.col-11 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 91.666667%;\n}\n\n.col-12 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 100%;\n}\n\n.offset-1 {\n  margin-left: 8.333333%;\n}\n\n.offset-2 {\n  margin-left: 16.666667%;\n}\n\n.offset-3 {\n  margin-left: 25%;\n}\n\n.offset-4 {\n  margin-left: 33.333333%;\n}\n\n.offset-5 {\n  margin-left: 41.666667%;\n}\n\n.offset-6 {\n  margin-left: 50%;\n}\n\n.offset-7 {\n  margin-left: 58.333333%;\n}\n\n.offset-8 {\n  margin-left: 66.666667%;\n}\n\n.offset-9 {\n  margin-left: 75%;\n}\n\n.offset-10 {\n  margin-left: 83.333333%;\n}\n\n.offset-11 {\n  margin-left: 91.666667%;\n}\n\n.g-0,\n.gx-0 {\n  --bs-gutter-x: 0;\n}\n\n.g-0,\n.gy-0 {\n  --bs-gutter-y: 0;\n}\n\n.g-1,\n.gx-1 {\n  --bs-gutter-x: 0.25rem;\n}\n\n.g-1,\n.gy-1 {\n  --bs-gutter-y: 0.25rem;\n}\n\n.g-2,\n.gx-2 {\n  --bs-gutter-x: 0.5rem;\n}\n\n.g-2,\n.gy-2 {\n  --bs-gutter-y: 0.5rem;\n}\n\n.g-3,\n.gx-3 {\n  --bs-gutter-x: 1rem;\n}\n\n.g-3,\n.gy-3 {\n  --bs-gutter-y: 1rem;\n}\n\n.g-4,\n.gx-4 {\n  --bs-gutter-x: 1.5rem;\n}\n\n.g-4,\n.gy-4 {\n  --bs-gutter-y: 1.5rem;\n}\n\n.g-5,\n.gx-5 {\n  --bs-gutter-x: 3rem;\n}\n\n.g-5,\n.gy-5 {\n  --bs-gutter-y: 3rem;\n}\n\n@media (min-width: 576px) {\n  .col-sm {\n    -ms-flex: 1 0 0%;\n    flex: 1 0 0%;\n  }\n  .row-cols-sm-auto > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .row-cols-sm-1 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .row-cols-sm-2 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .row-cols-sm-3 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 33.333333%;\n  }\n  .row-cols-sm-4 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .row-cols-sm-5 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 20%;\n  }\n  .row-cols-sm-6 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 16.666667%;\n  }\n  .col-sm-auto {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .col-sm-1 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 8.333333%;\n  }\n  .col-sm-2 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 16.666667%;\n  }\n  .col-sm-3 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .col-sm-4 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 33.333333%;\n  }\n  .col-sm-5 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 41.666667%;\n  }\n  .col-sm-6 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .col-sm-7 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 58.333333%;\n  }\n  .col-sm-8 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 66.666667%;\n  }\n  .col-sm-9 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 75%;\n  }\n  .col-sm-10 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 83.333333%;\n  }\n  .col-sm-11 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 91.666667%;\n  }\n  .col-sm-12 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .offset-sm-0 {\n    margin-left: 0;\n  }\n  .offset-sm-1 {\n    margin-left: 8.333333%;\n  }\n  .offset-sm-2 {\n    margin-left: 16.666667%;\n  }\n  .offset-sm-3 {\n    margin-left: 25%;\n  }\n  .offset-sm-4 {\n    margin-left: 33.333333%;\n  }\n  .offset-sm-5 {\n    margin-left: 41.666667%;\n  }\n  .offset-sm-6 {\n    margin-left: 50%;\n  }\n  .offset-sm-7 {\n    margin-left: 58.333333%;\n  }\n  .offset-sm-8 {\n    margin-left: 66.666667%;\n  }\n  .offset-sm-9 {\n    margin-left: 75%;\n  }\n  .offset-sm-10 {\n    margin-left: 83.333333%;\n  }\n  .offset-sm-11 {\n    margin-left: 91.666667%;\n  }\n  .g-sm-0,\n  .gx-sm-0 {\n    --bs-gutter-x: 0;\n  }\n  .g-sm-0,\n  .gy-sm-0 {\n    --bs-gutter-y: 0;\n  }\n  .g-sm-1,\n  .gx-sm-1 {\n    --bs-gutter-x: 0.25rem;\n  }\n  .g-sm-1,\n  .gy-sm-1 {\n    --bs-gutter-y: 0.25rem;\n  }\n  .g-sm-2,\n  .gx-sm-2 {\n    --bs-gutter-x: 0.5rem;\n  }\n  .g-sm-2,\n  .gy-sm-2 {\n    --bs-gutter-y: 0.5rem;\n  }\n  .g-sm-3,\n  .gx-sm-3 {\n    --bs-gutter-x: 1rem;\n  }\n  .g-sm-3,\n  .gy-sm-3 {\n    --bs-gutter-y: 1rem;\n  }\n  .g-sm-4,\n  .gx-sm-4 {\n    --bs-gutter-x: 1.5rem;\n  }\n  .g-sm-4,\n  .gy-sm-4 {\n    --bs-gutter-y: 1.5rem;\n  }\n  .g-sm-5,\n  .gx-sm-5 {\n    --bs-gutter-x: 3rem;\n  }\n  .g-sm-5,\n  .gy-sm-5 {\n    --bs-gutter-y: 3rem;\n  }\n}\n\n@media (min-width: 768px) {\n  .col-md {\n    -ms-flex: 1 0 0%;\n    flex: 1 0 0%;\n  }\n  .row-cols-md-auto > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .row-cols-md-1 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .row-cols-md-2 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .row-cols-md-3 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 33.333333%;\n  }\n  .row-cols-md-4 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .row-cols-md-5 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 20%;\n  }\n  .row-cols-md-6 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 16.666667%;\n  }\n  .col-md-auto {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .col-md-1 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 8.333333%;\n  }\n  .col-md-2 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 16.666667%;\n  }\n  .col-md-3 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .col-md-4 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 33.333333%;\n  }\n  .col-md-5 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 41.666667%;\n  }\n  .col-md-6 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .col-md-7 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 58.333333%;\n  }\n  .col-md-8 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 66.666667%;\n  }\n  .col-md-9 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 75%;\n  }\n  .col-md-10 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 83.333333%;\n  }\n  .col-md-11 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 91.666667%;\n  }\n  .col-md-12 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .offset-md-0 {\n    margin-left: 0;\n  }\n  .offset-md-1 {\n    margin-left: 8.333333%;\n  }\n  .offset-md-2 {\n    margin-left: 16.666667%;\n  }\n  .offset-md-3 {\n    margin-left: 25%;\n  }\n  .offset-md-4 {\n    margin-left: 33.333333%;\n  }\n  .offset-md-5 {\n    margin-left: 41.666667%;\n  }\n  .offset-md-6 {\n    margin-left: 50%;\n  }\n  .offset-md-7 {\n    margin-left: 58.333333%;\n  }\n  .offset-md-8 {\n    margin-left: 66.666667%;\n  }\n  .offset-md-9 {\n    margin-left: 75%;\n  }\n  .offset-md-10 {\n    margin-left: 83.333333%;\n  }\n  .offset-md-11 {\n    margin-left: 91.666667%;\n  }\n  .g-md-0,\n  .gx-md-0 {\n    --bs-gutter-x: 0;\n  }\n  .g-md-0,\n  .gy-md-0 {\n    --bs-gutter-y: 0;\n  }\n  .g-md-1,\n  .gx-md-1 {\n    --bs-gutter-x: 0.25rem;\n  }\n  .g-md-1,\n  .gy-md-1 {\n    --bs-gutter-y: 0.25rem;\n  }\n  .g-md-2,\n  .gx-md-2 {\n    --bs-gutter-x: 0.5rem;\n  }\n  .g-md-2,\n  .gy-md-2 {\n    --bs-gutter-y: 0.5rem;\n  }\n  .g-md-3,\n  .gx-md-3 {\n    --bs-gutter-x: 1rem;\n  }\n  .g-md-3,\n  .gy-md-3 {\n    --bs-gutter-y: 1rem;\n  }\n  .g-md-4,\n  .gx-md-4 {\n    --bs-gutter-x: 1.5rem;\n  }\n  .g-md-4,\n  .gy-md-4 {\n    --bs-gutter-y: 1.5rem;\n  }\n  .g-md-5,\n  .gx-md-5 {\n    --bs-gutter-x: 3rem;\n  }\n  .g-md-5,\n  .gy-md-5 {\n    --bs-gutter-y: 3rem;\n  }\n}\n\n@media (min-width: 992px) {\n  .col-lg {\n    -ms-flex: 1 0 0%;\n    flex: 1 0 0%;\n  }\n  .row-cols-lg-auto > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .row-cols-lg-1 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .row-cols-lg-2 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .row-cols-lg-3 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 33.333333%;\n  }\n  .row-cols-lg-4 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .row-cols-lg-5 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 20%;\n  }\n  .row-cols-lg-6 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 16.666667%;\n  }\n  .col-lg-auto {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .col-lg-1 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 8.333333%;\n  }\n  .col-lg-2 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 16.666667%;\n  }\n  .col-lg-3 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .col-lg-4 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 33.333333%;\n  }\n  .col-lg-5 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 41.666667%;\n  }\n  .col-lg-6 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .col-lg-7 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 58.333333%;\n  }\n  .col-lg-8 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 66.666667%;\n  }\n  .col-lg-9 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 75%;\n  }\n  .col-lg-10 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 83.333333%;\n  }\n  .col-lg-11 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 91.666667%;\n  }\n  .col-lg-12 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .offset-lg-0 {\n    margin-left: 0;\n  }\n  .offset-lg-1 {\n    margin-left: 8.333333%;\n  }\n  .offset-lg-2 {\n    margin-left: 16.666667%;\n  }\n  .offset-lg-3 {\n    margin-left: 25%;\n  }\n  .offset-lg-4 {\n    margin-left: 33.333333%;\n  }\n  .offset-lg-5 {\n    margin-left: 41.666667%;\n  }\n  .offset-lg-6 {\n    margin-left: 50%;\n  }\n  .offset-lg-7 {\n    margin-left: 58.333333%;\n  }\n  .offset-lg-8 {\n    margin-left: 66.666667%;\n  }\n  .offset-lg-9 {\n    margin-left: 75%;\n  }\n  .offset-lg-10 {\n    margin-left: 83.333333%;\n  }\n  .offset-lg-11 {\n    margin-left: 91.666667%;\n  }\n  .g-lg-0,\n  .gx-lg-0 {\n    --bs-gutter-x: 0;\n  }\n  .g-lg-0,\n  .gy-lg-0 {\n    --bs-gutter-y: 0;\n  }\n  .g-lg-1,\n  .gx-lg-1 {\n    --bs-gutter-x: 0.25rem;\n  }\n  .g-lg-1,\n  .gy-lg-1 {\n    --bs-gutter-y: 0.25rem;\n  }\n  .g-lg-2,\n  .gx-lg-2 {\n    --bs-gutter-x: 0.5rem;\n  }\n  .g-lg-2,\n  .gy-lg-2 {\n    --bs-gutter-y: 0.5rem;\n  }\n  .g-lg-3,\n  .gx-lg-3 {\n    --bs-gutter-x: 1rem;\n  }\n  .g-lg-3,\n  .gy-lg-3 {\n    --bs-gutter-y: 1rem;\n  }\n  .g-lg-4,\n  .gx-lg-4 {\n    --bs-gutter-x: 1.5rem;\n  }\n  .g-lg-4,\n  .gy-lg-4 {\n    --bs-gutter-y: 1.5rem;\n  }\n  .g-lg-5,\n  .gx-lg-5 {\n    --bs-gutter-x: 3rem;\n  }\n  .g-lg-5,\n  .gy-lg-5 {\n    --bs-gutter-y: 3rem;\n  }\n}\n\n@media (min-width: 1200px) {\n  .col-xl {\n    -ms-flex: 1 0 0%;\n    flex: 1 0 0%;\n  }\n  .row-cols-xl-auto > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .row-cols-xl-1 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .row-cols-xl-2 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .row-cols-xl-3 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 33.333333%;\n  }\n  .row-cols-xl-4 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .row-cols-xl-5 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 20%;\n  }\n  .row-cols-xl-6 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 16.666667%;\n  }\n  .col-xl-auto {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .col-xl-1 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 8.333333%;\n  }\n  .col-xl-2 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 16.666667%;\n  }\n  .col-xl-3 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .col-xl-4 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 33.333333%;\n  }\n  .col-xl-5 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 41.666667%;\n  }\n  .col-xl-6 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .col-xl-7 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 58.333333%;\n  }\n  .col-xl-8 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 66.666667%;\n  }\n  .col-xl-9 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 75%;\n  }\n  .col-xl-10 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 83.333333%;\n  }\n  .col-xl-11 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 91.666667%;\n  }\n  .col-xl-12 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .offset-xl-0 {\n    margin-left: 0;\n  }\n  .offset-xl-1 {\n    margin-left: 8.333333%;\n  }\n  .offset-xl-2 {\n    margin-left: 16.666667%;\n  }\n  .offset-xl-3 {\n    margin-left: 25%;\n  }\n  .offset-xl-4 {\n    margin-left: 33.333333%;\n  }\n  .offset-xl-5 {\n    margin-left: 41.666667%;\n  }\n  .offset-xl-6 {\n    margin-left: 50%;\n  }\n  .offset-xl-7 {\n    margin-left: 58.333333%;\n  }\n  .offset-xl-8 {\n    margin-left: 66.666667%;\n  }\n  .offset-xl-9 {\n    margin-left: 75%;\n  }\n  .offset-xl-10 {\n    margin-left: 83.333333%;\n  }\n  .offset-xl-11 {\n    margin-left: 91.666667%;\n  }\n  .g-xl-0,\n  .gx-xl-0 {\n    --bs-gutter-x: 0;\n  }\n  .g-xl-0,\n  .gy-xl-0 {\n    --bs-gutter-y: 0;\n  }\n  .g-xl-1,\n  .gx-xl-1 {\n    --bs-gutter-x: 0.25rem;\n  }\n  .g-xl-1,\n  .gy-xl-1 {\n    --bs-gutter-y: 0.25rem;\n  }\n  .g-xl-2,\n  .gx-xl-2 {\n    --bs-gutter-x: 0.5rem;\n  }\n  .g-xl-2,\n  .gy-xl-2 {\n    --bs-gutter-y: 0.5rem;\n  }\n  .g-xl-3,\n  .gx-xl-3 {\n    --bs-gutter-x: 1rem;\n  }\n  .g-xl-3,\n  .gy-xl-3 {\n    --bs-gutter-y: 1rem;\n  }\n  .g-xl-4,\n  .gx-xl-4 {\n    --bs-gutter-x: 1.5rem;\n  }\n  .g-xl-4,\n  .gy-xl-4 {\n    --bs-gutter-y: 1.5rem;\n  }\n  .g-xl-5,\n  .gx-xl-5 {\n    --bs-gutter-x: 3rem;\n  }\n  .g-xl-5,\n  .gy-xl-5 {\n    --bs-gutter-y: 3rem;\n  }\n}\n\n@media (min-width: 1400px) {\n  .col-xxl {\n    -ms-flex: 1 0 0%;\n    flex: 1 0 0%;\n  }\n  .row-cols-xxl-auto > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .row-cols-xxl-1 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .row-cols-xxl-2 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .row-cols-xxl-3 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 33.333333%;\n  }\n  .row-cols-xxl-4 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .row-cols-xxl-5 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 20%;\n  }\n  .row-cols-xxl-6 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 16.666667%;\n  }\n  .col-xxl-auto {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .col-xxl-1 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 8.333333%;\n  }\n  .col-xxl-2 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 16.666667%;\n  }\n  .col-xxl-3 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .col-xxl-4 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 33.333333%;\n  }\n  .col-xxl-5 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 41.666667%;\n  }\n  .col-xxl-6 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .col-xxl-7 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 58.333333%;\n  }\n  .col-xxl-8 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 66.666667%;\n  }\n  .col-xxl-9 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 75%;\n  }\n  .col-xxl-10 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 83.333333%;\n  }\n  .col-xxl-11 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 91.666667%;\n  }\n  .col-xxl-12 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .offset-xxl-0 {\n    margin-left: 0;\n  }\n  .offset-xxl-1 {\n    margin-left: 8.333333%;\n  }\n  .offset-xxl-2 {\n    margin-left: 16.666667%;\n  }\n  .offset-xxl-3 {\n    margin-left: 25%;\n  }\n  .offset-xxl-4 {\n    margin-left: 33.333333%;\n  }\n  .offset-xxl-5 {\n    margin-left: 41.666667%;\n  }\n  .offset-xxl-6 {\n    margin-left: 50%;\n  }\n  .offset-xxl-7 {\n    margin-left: 58.333333%;\n  }\n  .offset-xxl-8 {\n    margin-left: 66.666667%;\n  }\n  .offset-xxl-9 {\n    margin-left: 75%;\n  }\n  .offset-xxl-10 {\n    margin-left: 83.333333%;\n  }\n  .offset-xxl-11 {\n    margin-left: 91.666667%;\n  }\n  .g-xxl-0,\n  .gx-xxl-0 {\n    --bs-gutter-x: 0;\n  }\n  .g-xxl-0,\n  .gy-xxl-0 {\n    --bs-gutter-y: 0;\n  }\n  .g-xxl-1,\n  .gx-xxl-1 {\n    --bs-gutter-x: 0.25rem;\n  }\n  .g-xxl-1,\n  .gy-xxl-1 {\n    --bs-gutter-y: 0.25rem;\n  }\n  .g-xxl-2,\n  .gx-xxl-2 {\n    --bs-gutter-x: 0.5rem;\n  }\n  .g-xxl-2,\n  .gy-xxl-2 {\n    --bs-gutter-y: 0.5rem;\n  }\n  .g-xxl-3,\n  .gx-xxl-3 {\n    --bs-gutter-x: 1rem;\n  }\n  .g-xxl-3,\n  .gy-xxl-3 {\n    --bs-gutter-y: 1rem;\n  }\n  .g-xxl-4,\n  .gx-xxl-4 {\n    --bs-gutter-x: 1.5rem;\n  }\n  .g-xxl-4,\n  .gy-xxl-4 {\n    --bs-gutter-y: 1.5rem;\n  }\n  .g-xxl-5,\n  .gx-xxl-5 {\n    --bs-gutter-x: 3rem;\n  }\n  .g-xxl-5,\n  .gy-xxl-5 {\n    --bs-gutter-y: 3rem;\n  }\n}\n\n.table {\n  --bs-table-bg: transparent;\n  --bs-table-accent-bg: rgba(255, 255, 255, 0.05);\n  --bs-table-striped-color: #839496;\n  --bs-table-striped-bg: rgba(0, 0, 0, 0.05);\n  --bs-table-active-color: #839496;\n  --bs-table-active-bg: rgba(0, 0, 0, 0.1);\n  --bs-table-hover-color: #839496;\n  --bs-table-hover-bg: rgba(255, 255, 255, 0.075);\n  width: 100%;\n  margin-bottom: 1rem;\n  color: #839496;\n  vertical-align: top;\n  border-color: #073642;\n}\n\n.table > :not(caption) > * > * {\n  padding: 0.5rem 0.5rem;\n  background-color: var(--bs-table-bg);\n  border-bottom-width: 1px;\n  box-shadow: inset 0 0 0 9999px var(--bs-table-accent-bg);\n}\n\n.table > tbody {\n  vertical-align: inherit;\n}\n\n.table > thead {\n  vertical-align: bottom;\n}\n\n.table > :not(:first-child) {\n  border-top: 2px solid currentColor;\n}\n\n.caption-top {\n  caption-side: top;\n}\n\n.table-sm > :not(caption) > * > * {\n  padding: 0.25rem 0.25rem;\n}\n\n.table-bordered > :not(caption) > * {\n  border-width: 1px 0;\n}\n\n.table-bordered > :not(caption) > * > * {\n  border-width: 0 1px;\n}\n\n.table-borderless > :not(caption) > * > * {\n  border-bottom-width: 0;\n}\n\n.table-borderless > :not(:first-child) {\n  border-top-width: 0;\n}\n\n.table-striped > tbody > tr:nth-of-type(odd) > * {\n  --bs-table-accent-bg: var(--bs-table-striped-bg);\n  color: var(--bs-table-striped-color);\n}\n\n.table-active {\n  --bs-table-accent-bg: var(--bs-table-active-bg);\n  color: var(--bs-table-active-color);\n}\n\n.table-hover > tbody > tr:hover > * {\n  --bs-table-accent-bg: var(--bs-table-hover-bg);\n  color: var(--bs-table-hover-color);\n}\n\n.table-primary {\n  --bs-table-bg: #b58900;\n  --bs-table-striped-bg: #b98f0d;\n  --bs-table-striped-color: #fff;\n  --bs-table-active-bg: #bc951a;\n  --bs-table-active-color: #fff;\n  --bs-table-hover-bg: #bb9213;\n  --bs-table-hover-color: #fff;\n  color: #fff;\n  border-color: #bc951a;\n}\n\n.table-secondary {\n  --bs-table-bg: #839496;\n  --bs-table-striped-bg: #89999b;\n  --bs-table-striped-color: #fff;\n  --bs-table-active-bg: #8f9fa1;\n  --bs-table-active-color: #fff;\n  --bs-table-hover-bg: #8c9c9e;\n  --bs-table-hover-color: #fff;\n  color: #fff;\n  border-color: #8f9fa1;\n}\n\n.table-success {\n  --bs-table-bg: #2aa198;\n  --bs-table-striped-bg: #35a69d;\n  --bs-table-striped-color: #fff;\n  --bs-table-active-bg: #3faaa2;\n  --bs-table-active-color: #fff;\n  --bs-table-hover-bg: #3aa8a0;\n  --bs-table-hover-color: #fff;\n  color: #fff;\n  border-color: #3faaa2;\n}\n\n.table-info {\n  --bs-table-bg: #268bd2;\n  --bs-table-striped-bg: #3191d4;\n  --bs-table-striped-color: #fff;\n  --bs-table-active-bg: #3c97d7;\n  --bs-table-active-color: #fff;\n  --bs-table-hover-bg: #3694d5;\n  --bs-table-hover-color: #fff;\n  color: #fff;\n  border-color: #3c97d7;\n}\n\n.table-warning {\n  --bs-table-bg: #cb4b16;\n  --bs-table-striped-bg: #ce5422;\n  --bs-table-striped-color: #fff;\n  --bs-table-active-bg: #d05d2d;\n  --bs-table-active-color: #fff;\n  --bs-table-hover-bg: #cf5927;\n  --bs-table-hover-color: #fff;\n  color: #fff;\n  border-color: #d05d2d;\n}\n\n.table-danger {\n  --bs-table-bg: #d33682;\n  --bs-table-striped-bg: #d54088;\n  --bs-table-striped-color: #fff;\n  --bs-table-active-bg: #d74a8f;\n  --bs-table-active-color: #fff;\n  --bs-table-hover-bg: #d6458b;\n  --bs-table-hover-color: #fff;\n  color: #fff;\n  border-color: #d74a8f;\n}\n\n.table-light {\n  --bs-table-bg: #fdf6e3;\n  --bs-table-striped-bg: #f0ead8;\n  --bs-table-striped-color: #000;\n  --bs-table-active-bg: #e4ddcc;\n  --bs-table-active-color: #000;\n  --bs-table-hover-bg: #eae4d2;\n  --bs-table-hover-color: #000;\n  color: #000;\n  border-color: #e4ddcc;\n}\n\n.table-dark {\n  --bs-table-bg: #073642;\n  --bs-table-striped-bg: #13404b;\n  --bs-table-striped-color: #fff;\n  --bs-table-active-bg: #204a55;\n  --bs-table-active-color: #fff;\n  --bs-table-hover-bg: #1a4550;\n  --bs-table-hover-color: #fff;\n  color: #fff;\n  border-color: #204a55;\n}\n\n.table-responsive {\n  overflow-x: auto;\n  -webkit-overflow-scrolling: touch;\n}\n\n@media (max-width: 575.98px) {\n  .table-responsive-sm {\n    overflow-x: auto;\n    -webkit-overflow-scrolling: touch;\n  }\n}\n\n@media (max-width: 767.98px) {\n  .table-responsive-md {\n    overflow-x: auto;\n    -webkit-overflow-scrolling: touch;\n  }\n}\n\n@media (max-width: 991.98px) {\n  .table-responsive-lg {\n    overflow-x: auto;\n    -webkit-overflow-scrolling: touch;\n  }\n}\n\n@media (max-width: 1199.98px) {\n  .table-responsive-xl {\n    overflow-x: auto;\n    -webkit-overflow-scrolling: touch;\n  }\n}\n\n@media (max-width: 1399.98px) {\n  .table-responsive-xxl {\n    overflow-x: auto;\n    -webkit-overflow-scrolling: touch;\n  }\n}\n\n.form-label {\n  margin-bottom: 0.5rem;\n}\n\n.col-form-label {\n  padding-top: calc(0.375rem + 1px);\n  padding-bottom: calc(0.375rem + 1px);\n  margin-bottom: 0;\n  font-size: inherit;\n  line-height: 1.5;\n}\n\n.col-form-label-lg {\n  padding-top: calc(0.5rem + 1px);\n  padding-bottom: calc(0.5rem + 1px);\n  font-size: 1.25rem;\n}\n\n.col-form-label-sm {\n  padding-top: calc(0.25rem + 1px);\n  padding-bottom: calc(0.25rem + 1px);\n  font-size: 0.875rem;\n}\n\n.form-text {\n  margin-top: 0.25rem;\n  font-size: 0.875em;\n  color: #839496;\n}\n\n.form-control {\n  display: block;\n  width: 100%;\n  padding: 0.375rem 0.75rem;\n  font-size: 1rem;\n  font-weight: 400;\n  line-height: 1.5;\n  color: #073642;\n  background-color: #a9bdbd;\n  background-clip: padding-box;\n  border: 1px solid rgba(0, 0, 0, 0.15);\n  -webkit-appearance: none;\n  -moz-appearance: none;\n  appearance: none;\n  border-radius: 0.25rem;\n  transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .form-control {\n    transition: none;\n  }\n}\n\n.form-control[type=\"file\"] {\n  overflow: hidden;\n}\n\n.form-control[type=\"file\"]:not(:disabled):not([readonly]) {\n  cursor: pointer;\n}\n\n.form-control:focus {\n  color: #073642;\n  background-color: #a9bdbd;\n  border-color: #839ba1;\n  outline: 0;\n  box-shadow: 0 0 0 0.25rem rgba(7, 54, 66, 0.25);\n}\n\n.form-control::-webkit-date-and-time-value {\n  height: 1.5em;\n}\n\n.form-control::-webkit-input-placeholder {\n  color: #657b83;\n  opacity: 1;\n}\n\n.form-control::-moz-placeholder {\n  color: #657b83;\n  opacity: 1;\n}\n\n.form-control:-ms-input-placeholder {\n  color: #657b83;\n  opacity: 1;\n}\n\n.form-control::-ms-input-placeholder {\n  color: #657b83;\n  opacity: 1;\n}\n\n.form-control::placeholder {\n  color: #657b83;\n  opacity: 1;\n}\n\n.form-control:disabled, .form-control[readonly] {\n  background-color: #657b83;\n  opacity: 1;\n}\n\n.form-control::file-selector-button {\n  padding: 0.375rem 0.75rem;\n  margin: -0.375rem -0.75rem;\n  -webkit-margin-end: 0.75rem;\n  -moz-margin-end: 0.75rem;\n  margin-inline-end: 0.75rem;\n  color: #839496;\n  background-color: #073642;\n  pointer-events: none;\n  border-color: inherit;\n  border-style: solid;\n  border-width: 0;\n  border-inline-end-width: 1px;\n  border-radius: 0;\n  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .form-control::file-selector-button {\n    transition: none;\n  }\n}\n\n.form-control:hover:not(:disabled):not([readonly])::file-selector-button {\n  background-color: #07333f;\n}\n\n.form-control::-webkit-file-upload-button {\n  padding: 0.375rem 0.75rem;\n  margin: -0.375rem -0.75rem;\n  -webkit-margin-end: 0.75rem;\n  margin-inline-end: 0.75rem;\n  color: #839496;\n  background-color: #073642;\n  pointer-events: none;\n  border-color: inherit;\n  border-style: solid;\n  border-width: 0;\n  border-inline-end-width: 1px;\n  border-radius: 0;\n  -webkit-transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .form-control::-webkit-file-upload-button {\n    -webkit-transition: none;\n    transition: none;\n  }\n}\n\n.form-control:hover:not(:disabled):not([readonly])::-webkit-file-upload-button {\n  background-color: #07333f;\n}\n\n.form-control-plaintext {\n  display: block;\n  width: 100%;\n  padding: 0.375rem 0;\n  margin-bottom: 0;\n  line-height: 1.5;\n  color: #839496;\n  background-color: transparent;\n  border: solid transparent;\n  border-width: 1px 0;\n}\n\n.form-control-plaintext.form-control-sm, .form-control-plaintext.form-control-lg {\n  padding-right: 0;\n  padding-left: 0;\n}\n\n.form-control-sm {\n  min-height: calc(1.5em + 0.5rem + 2px);\n  padding: 0.25rem 0.5rem;\n  font-size: 0.875rem;\n  border-radius: 0.2rem;\n}\n\n.form-control-sm::file-selector-button {\n  padding: 0.25rem 0.5rem;\n  margin: -0.25rem -0.5rem;\n  -webkit-margin-end: 0.5rem;\n  -moz-margin-end: 0.5rem;\n  margin-inline-end: 0.5rem;\n}\n\n.form-control-sm::-webkit-file-upload-button {\n  padding: 0.25rem 0.5rem;\n  margin: -0.25rem -0.5rem;\n  -webkit-margin-end: 0.5rem;\n  margin-inline-end: 0.5rem;\n}\n\n.form-control-lg {\n  min-height: calc(1.5em + 1rem + 2px);\n  padding: 0.5rem 1rem;\n  font-size: 1.25rem;\n  border-radius: 0.3rem;\n}\n\n.form-control-lg::file-selector-button {\n  padding: 0.5rem 1rem;\n  margin: -0.5rem -1rem;\n  -webkit-margin-end: 1rem;\n  -moz-margin-end: 1rem;\n  margin-inline-end: 1rem;\n}\n\n.form-control-lg::-webkit-file-upload-button {\n  padding: 0.5rem 1rem;\n  margin: -0.5rem -1rem;\n  -webkit-margin-end: 1rem;\n  margin-inline-end: 1rem;\n}\n\ntextarea.form-control {\n  min-height: calc(1.5em + 0.75rem + 2px);\n}\n\ntextarea.form-control-sm {\n  min-height: calc(1.5em + 0.5rem + 2px);\n}\n\ntextarea.form-control-lg {\n  min-height: calc(1.5em + 1rem + 2px);\n}\n\n.form-control-color {\n  width: 3rem;\n  height: auto;\n  padding: 0.375rem;\n}\n\n.form-control-color:not(:disabled):not([readonly]) {\n  cursor: pointer;\n}\n\n.form-control-color::-moz-color-swatch {\n  height: 1.5em;\n  border-radius: 0.25rem;\n}\n\n.form-control-color::-webkit-color-swatch {\n  height: 1.5em;\n  border-radius: 0.25rem;\n}\n\n.form-select {\n  display: block;\n  width: 100%;\n  padding: 0.375rem 2.25rem 0.375rem 0.75rem;\n  -moz-padding-start: calc(0.75rem - 3px);\n  font-size: 1rem;\n  font-weight: 400;\n  line-height: 1.5;\n  color: #073642;\n  background-color: #a9bdbd;\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23073642' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e\");\n  background-repeat: no-repeat;\n  background-position: right 0.75rem center;\n  background-size: 16px 12px;\n  border: 1px solid rgba(0, 0, 0, 0.15);\n  border-radius: 0.25rem;\n  transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n  -webkit-appearance: none;\n  -moz-appearance: none;\n  appearance: none;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .form-select {\n    transition: none;\n  }\n}\n\n.form-select:focus {\n  border-color: #839ba1;\n  outline: 0;\n  box-shadow: 0 0 0 0.25rem rgba(7, 54, 66, 0.25);\n}\n\n.form-select[multiple], .form-select[size]:not([size=\"1\"]) {\n  padding-right: 0.75rem;\n  background-image: none;\n}\n\n.form-select:disabled {\n  background-color: #eee8d5;\n}\n\n.form-select:-moz-focusring {\n  color: transparent;\n  text-shadow: 0 0 0 #073642;\n}\n\n.form-select-sm {\n  padding-top: 0.25rem;\n  padding-bottom: 0.25rem;\n  padding-left: 0.5rem;\n  font-size: 0.875rem;\n  border-radius: 0.2rem;\n}\n\n.form-select-lg {\n  padding-top: 0.5rem;\n  padding-bottom: 0.5rem;\n  padding-left: 1rem;\n  font-size: 1.25rem;\n  border-radius: 0.3rem;\n}\n\n.form-check {\n  display: block;\n  min-height: 1.5rem;\n  padding-left: 1.5em;\n  margin-bottom: 0.125rem;\n}\n\n.form-check .form-check-input {\n  float: left;\n  margin-left: -1.5em;\n}\n\n.form-check-input {\n  width: 1em;\n  height: 1em;\n  margin-top: 0.25em;\n  vertical-align: top;\n  background-color: rgba(255, 255, 255, 0.75);\n  background-repeat: no-repeat;\n  background-position: center;\n  background-size: contain;\n  border: 1px solid #fff;\n  -webkit-appearance: none;\n  -moz-appearance: none;\n  appearance: none;\n  -webkit-print-color-adjust: exact;\n  color-adjust: exact;\n}\n\n.form-check-input[type=\"checkbox\"] {\n  border-radius: 0.25em;\n}\n\n.form-check-input[type=\"radio\"] {\n  border-radius: 50%;\n}\n\n.form-check-input:active {\n  -webkit-filter: brightness(90%);\n  filter: brightness(90%);\n}\n\n.form-check-input:focus {\n  border-color: #839ba1;\n  outline: 0;\n  box-shadow: 0 0 0 0.25rem rgba(7, 54, 66, 0.25);\n}\n\n.form-check-input:checked {\n  background-color: #b58900;\n  border-color: #b58900;\n}\n\n.form-check-input:checked[type=\"checkbox\"] {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='rgba%28255, 255, 255, 0.75%29' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10l3 3l6-6'/%3e%3c/svg%3e\");\n}\n\n.form-check-input:checked[type=\"radio\"] {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='2' fill='rgba%28255, 255, 255, 0.75%29'/%3e%3c/svg%3e\");\n}\n\n.form-check-input[type=\"checkbox\"]:indeterminate {\n  background-color: #073642;\n  border-color: #073642;\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='rgba%28255, 255, 255, 0.75%29' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10h8'/%3e%3c/svg%3e\");\n}\n\n.form-check-input:disabled {\n  pointer-events: none;\n  -webkit-filter: none;\n  filter: none;\n  opacity: 0.5;\n}\n\n.form-check-input[disabled] ~ .form-check-label, .form-check-input:disabled ~ .form-check-label {\n  opacity: 0.5;\n}\n\n.form-switch {\n  padding-left: 2.5em;\n}\n\n.form-switch .form-check-input {\n  width: 2em;\n  margin-left: -2.5em;\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%28255, 255, 255, 0.75%29'/%3e%3c/svg%3e\");\n  background-position: left center;\n  border-radius: 2em;\n  transition: background-position 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .form-switch .form-check-input {\n    transition: none;\n  }\n}\n\n.form-switch .form-check-input:focus {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%28255, 255, 255, 0.75%29'/%3e%3c/svg%3e\");\n}\n\n.form-switch .form-check-input:checked {\n  background-position: right center;\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%28255, 255, 255, 0.75%29'/%3e%3c/svg%3e\");\n}\n\n.form-check-inline {\n  display: inline-block;\n  margin-right: 1rem;\n}\n\n.btn-check {\n  position: absolute;\n  clip: rect(0, 0, 0, 0);\n  pointer-events: none;\n}\n\n.btn-check[disabled] + .btn, .btn-check:disabled + .btn {\n  pointer-events: none;\n  -webkit-filter: none;\n  filter: none;\n  opacity: 0.65;\n}\n\n.form-range {\n  width: 100%;\n  height: 1.5rem;\n  padding: 0;\n  background-color: transparent;\n  -webkit-appearance: none;\n  -moz-appearance: none;\n  appearance: none;\n}\n\n.form-range:focus {\n  outline: 0;\n}\n\n.form-range:focus::-webkit-slider-thumb {\n  box-shadow: 0 0 0 1px #002b36, 0 0 0 0.25rem rgba(7, 54, 66, 0.25);\n}\n\n.form-range:focus::-moz-range-thumb {\n  box-shadow: 0 0 0 1px #002b36, 0 0 0 0.25rem rgba(7, 54, 66, 0.25);\n}\n\n.form-range::-moz-focus-outer {\n  border: 0;\n}\n\n.form-range::-webkit-slider-thumb {\n  width: 1rem;\n  height: 1rem;\n  margin-top: -0.25rem;\n  background-color: #b58900;\n  border: 0;\n  border-radius: 1rem;\n  -webkit-transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n  transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n  -webkit-appearance: none;\n  appearance: none;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .form-range::-webkit-slider-thumb {\n    -webkit-transition: none;\n    transition: none;\n  }\n}\n\n.form-range::-webkit-slider-thumb:active {\n  background-color: #b5c3c6;\n}\n\n.form-range::-webkit-slider-runnable-track {\n  width: 100%;\n  height: 0.5rem;\n  color: transparent;\n  cursor: pointer;\n  background-color: #073642;\n  border-color: transparent;\n  border-radius: 1rem;\n}\n\n.form-range::-moz-range-thumb {\n  width: 1rem;\n  height: 1rem;\n  background-color: #b58900;\n  border: 0;\n  border-radius: 1rem;\n  -moz-transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n  transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n  -moz-appearance: none;\n  appearance: none;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .form-range::-moz-range-thumb {\n    -moz-transition: none;\n    transition: none;\n  }\n}\n\n.form-range::-moz-range-thumb:active {\n  background-color: #b5c3c6;\n}\n\n.form-range::-moz-range-track {\n  width: 100%;\n  height: 0.5rem;\n  color: transparent;\n  cursor: pointer;\n  background-color: #073642;\n  border-color: transparent;\n  border-radius: 1rem;\n}\n\n.form-range:disabled {\n  pointer-events: none;\n}\n\n.form-range:disabled::-webkit-slider-thumb {\n  background-color: #adb5bd;\n}\n\n.form-range:disabled::-moz-range-thumb {\n  background-color: #adb5bd;\n}\n\n.form-floating {\n  position: relative;\n}\n\n.form-floating > .form-control,\n.form-floating > .form-select {\n  height: calc(3.5rem + 2px);\n  line-height: 1.25;\n}\n\n.form-floating > label {\n  position: absolute;\n  top: 0;\n  left: 0;\n  height: 100%;\n  padding: 1rem 0.75rem;\n  pointer-events: none;\n  border: 1px solid transparent;\n  -webkit-transform-origin: 0 0;\n  transform-origin: 0 0;\n  transition: opacity 0.1s ease-in-out, -webkit-transform 0.1s ease-in-out;\n  transition: opacity 0.1s ease-in-out, transform 0.1s ease-in-out;\n  transition: opacity 0.1s ease-in-out, transform 0.1s ease-in-out, -webkit-transform 0.1s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .form-floating > label {\n    transition: none;\n  }\n}\n\n.form-floating > .form-control {\n  padding: 1rem 0.75rem;\n}\n\n.form-floating > .form-control::-webkit-input-placeholder {\n  color: transparent;\n}\n\n.form-floating > .form-control::-moz-placeholder {\n  color: transparent;\n}\n\n.form-floating > .form-control:-ms-input-placeholder {\n  color: transparent;\n}\n\n.form-floating > .form-control::-ms-input-placeholder {\n  color: transparent;\n}\n\n.form-floating > .form-control::placeholder {\n  color: transparent;\n}\n\n.form-floating > .form-control:not(:-moz-placeholder-shown) {\n  padding-top: 1.625rem;\n  padding-bottom: 0.625rem;\n}\n\n.form-floating > .form-control:not(:-ms-input-placeholder) {\n  padding-top: 1.625rem;\n  padding-bottom: 0.625rem;\n}\n\n.form-floating > .form-control:focus, .form-floating > .form-control:not(:placeholder-shown) {\n  padding-top: 1.625rem;\n  padding-bottom: 0.625rem;\n}\n\n.form-floating > .form-control:-webkit-autofill {\n  padding-top: 1.625rem;\n  padding-bottom: 0.625rem;\n}\n\n.form-floating > .form-select {\n  padding-top: 1.625rem;\n  padding-bottom: 0.625rem;\n}\n\n.form-floating > .form-control:not(:-moz-placeholder-shown) ~ label {\n  opacity: 0.65;\n  transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);\n}\n\n.form-floating > .form-control:not(:-ms-input-placeholder) ~ label {\n  opacity: 0.65;\n  transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);\n}\n\n.form-floating > .form-control:focus ~ label,\n.form-floating > .form-control:not(:placeholder-shown) ~ label,\n.form-floating > .form-select ~ label {\n  opacity: 0.65;\n  -webkit-transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);\n  transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);\n}\n\n.form-floating > .form-control:-webkit-autofill ~ label {\n  opacity: 0.65;\n  -webkit-transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);\n  transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);\n}\n\n.input-group {\n  position: relative;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n  flex-wrap: wrap;\n  -ms-flex-align: stretch;\n  align-items: stretch;\n  width: 100%;\n}\n\n.input-group > .form-control,\n.input-group > .form-select {\n  position: relative;\n  -ms-flex: 1 1 auto;\n  flex: 1 1 auto;\n  width: 1%;\n  min-width: 0;\n}\n\n.input-group > .form-control:focus,\n.input-group > .form-select:focus {\n  z-index: 3;\n}\n\n.input-group .btn {\n  position: relative;\n  z-index: 2;\n}\n\n.input-group .btn:focus {\n  z-index: 3;\n}\n\n.input-group-text {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-align: center;\n  align-items: center;\n  padding: 0.375rem 0.75rem;\n  font-size: 1rem;\n  font-weight: 400;\n  line-height: 1.5;\n  color: #839496;\n  text-align: center;\n  white-space: nowrap;\n  background-color: #073642;\n  border: 1px solid rgba(0, 0, 0, 0.15);\n  border-radius: 0.25rem;\n}\n\n.input-group-lg > .form-control,\n.input-group-lg > .form-select,\n.input-group-lg > .input-group-text,\n.input-group-lg > .btn {\n  padding: 0.5rem 1rem;\n  font-size: 1.25rem;\n  border-radius: 0.3rem;\n}\n\n.input-group-sm > .form-control,\n.input-group-sm > .form-select,\n.input-group-sm > .input-group-text,\n.input-group-sm > .btn {\n  padding: 0.25rem 0.5rem;\n  font-size: 0.875rem;\n  border-radius: 0.2rem;\n}\n\n.input-group-lg > .form-select,\n.input-group-sm > .form-select {\n  padding-right: 3rem;\n}\n\n.input-group:not(.has-validation) > :not(:last-child):not(.dropdown-toggle):not(.dropdown-menu),\n.input-group:not(.has-validation) > .dropdown-toggle:nth-last-child(n + 3) {\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n}\n\n.input-group.has-validation > :nth-last-child(n + 3):not(.dropdown-toggle):not(.dropdown-menu),\n.input-group.has-validation > .dropdown-toggle:nth-last-child(n + 4) {\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n}\n\n.input-group > :not(:first-child):not(.dropdown-menu):not(.valid-tooltip):not(.valid-feedback):not(.invalid-tooltip):not(.invalid-feedback) {\n  margin-left: -1px;\n  border-top-left-radius: 0;\n  border-bottom-left-radius: 0;\n}\n\n.valid-feedback {\n  display: none;\n  width: 100%;\n  margin-top: 0.25rem;\n  font-size: 0.875em;\n  color: #2aa198;\n}\n\n.valid-tooltip {\n  position: absolute;\n  top: 100%;\n  z-index: 5;\n  display: none;\n  max-width: 100%;\n  padding: 0.25rem 0.5rem;\n  margin-top: .1rem;\n  font-size: 0.875rem;\n  color: #fff;\n  background-color: rgba(42, 161, 152, 0.9);\n  border-radius: 0.25rem;\n}\n\n.was-validated :valid ~ .valid-feedback,\n.was-validated :valid ~ .valid-tooltip,\n.is-valid ~ .valid-feedback,\n.is-valid ~ .valid-tooltip {\n  display: block;\n}\n\n.was-validated .form-control:valid, .form-control.is-valid {\n  border-color: #2aa198;\n  padding-right: calc(1.5em + 0.75rem);\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%232aa198' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e\");\n  background-repeat: no-repeat;\n  background-position: right calc(0.375em + 0.1875rem) center;\n  background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n\n.was-validated .form-control:valid:focus, .form-control.is-valid:focus {\n  border-color: #2aa198;\n  box-shadow: 0 0 0 0.25rem rgba(42, 161, 152, 0.25);\n}\n\n.was-validated textarea.form-control:valid, textarea.form-control.is-valid {\n  padding-right: calc(1.5em + 0.75rem);\n  background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem);\n}\n\n.was-validated .form-select:valid, .form-select.is-valid {\n  border-color: #2aa198;\n}\n\n.was-validated .form-select:valid:not([multiple]):not([size]), .was-validated .form-select:valid:not([multiple])[size=\"1\"], .form-select.is-valid:not([multiple]):not([size]), .form-select.is-valid:not([multiple])[size=\"1\"] {\n  padding-right: 4.125rem;\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23073642' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e\"), url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%232aa198' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e\");\n  background-position: right 0.75rem center, center right 2.25rem;\n  background-size: 16px 12px, calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n\n.was-validated .form-select:valid:focus, .form-select.is-valid:focus {\n  border-color: #2aa198;\n  box-shadow: 0 0 0 0.25rem rgba(42, 161, 152, 0.25);\n}\n\n.was-validated .form-check-input:valid, .form-check-input.is-valid {\n  border-color: #2aa198;\n}\n\n.was-validated .form-check-input:valid:checked, .form-check-input.is-valid:checked {\n  background-color: #2aa198;\n}\n\n.was-validated .form-check-input:valid:focus, .form-check-input.is-valid:focus {\n  box-shadow: 0 0 0 0.25rem rgba(42, 161, 152, 0.25);\n}\n\n.was-validated .form-check-input:valid ~ .form-check-label, .form-check-input.is-valid ~ .form-check-label {\n  color: #2aa198;\n}\n\n.form-check-inline .form-check-input ~ .valid-feedback {\n  margin-left: .5em;\n}\n\n.was-validated .input-group .form-control:valid, .input-group .form-control.is-valid, .was-validated\n.input-group .form-select:valid,\n.input-group .form-select.is-valid {\n  z-index: 1;\n}\n\n.was-validated .input-group .form-control:valid:focus, .input-group .form-control.is-valid:focus, .was-validated\n.input-group .form-select:valid:focus,\n.input-group .form-select.is-valid:focus {\n  z-index: 3;\n}\n\n.invalid-feedback {\n  display: none;\n  width: 100%;\n  margin-top: 0.25rem;\n  font-size: 0.875em;\n  color: #d33682;\n}\n\n.invalid-tooltip {\n  position: absolute;\n  top: 100%;\n  z-index: 5;\n  display: none;\n  max-width: 100%;\n  padding: 0.25rem 0.5rem;\n  margin-top: .1rem;\n  font-size: 0.875rem;\n  color: #fff;\n  background-color: rgba(211, 54, 130, 0.9);\n  border-radius: 0.25rem;\n}\n\n.was-validated :invalid ~ .invalid-feedback,\n.was-validated :invalid ~ .invalid-tooltip,\n.is-invalid ~ .invalid-feedback,\n.is-invalid ~ .invalid-tooltip {\n  display: block;\n}\n\n.was-validated .form-control:invalid, .form-control.is-invalid {\n  border-color: #d33682;\n  padding-right: calc(1.5em + 0.75rem);\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23d33682'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23d33682' stroke='none'/%3e%3c/svg%3e\");\n  background-repeat: no-repeat;\n  background-position: right calc(0.375em + 0.1875rem) center;\n  background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n\n.was-validated .form-control:invalid:focus, .form-control.is-invalid:focus {\n  border-color: #d33682;\n  box-shadow: 0 0 0 0.25rem rgba(211, 54, 130, 0.25);\n}\n\n.was-validated textarea.form-control:invalid, textarea.form-control.is-invalid {\n  padding-right: calc(1.5em + 0.75rem);\n  background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem);\n}\n\n.was-validated .form-select:invalid, .form-select.is-invalid {\n  border-color: #d33682;\n}\n\n.was-validated .form-select:invalid:not([multiple]):not([size]), .was-validated .form-select:invalid:not([multiple])[size=\"1\"], .form-select.is-invalid:not([multiple]):not([size]), .form-select.is-invalid:not([multiple])[size=\"1\"] {\n  padding-right: 4.125rem;\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23073642' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e\"), url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23d33682'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23d33682' stroke='none'/%3e%3c/svg%3e\");\n  background-position: right 0.75rem center, center right 2.25rem;\n  background-size: 16px 12px, calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n\n.was-validated .form-select:invalid:focus, .form-select.is-invalid:focus {\n  border-color: #d33682;\n  box-shadow: 0 0 0 0.25rem rgba(211, 54, 130, 0.25);\n}\n\n.was-validated .form-check-input:invalid, .form-check-input.is-invalid {\n  border-color: #d33682;\n}\n\n.was-validated .form-check-input:invalid:checked, .form-check-input.is-invalid:checked {\n  background-color: #d33682;\n}\n\n.was-validated .form-check-input:invalid:focus, .form-check-input.is-invalid:focus {\n  box-shadow: 0 0 0 0.25rem rgba(211, 54, 130, 0.25);\n}\n\n.was-validated .form-check-input:invalid ~ .form-check-label, .form-check-input.is-invalid ~ .form-check-label {\n  color: #d33682;\n}\n\n.form-check-inline .form-check-input ~ .invalid-feedback {\n  margin-left: .5em;\n}\n\n.was-validated .input-group .form-control:invalid, .input-group .form-control.is-invalid, .was-validated\n.input-group .form-select:invalid,\n.input-group .form-select.is-invalid {\n  z-index: 2;\n}\n\n.was-validated .input-group .form-control:invalid:focus, .input-group .form-control.is-invalid:focus, .was-validated\n.input-group .form-select:invalid:focus,\n.input-group .form-select.is-invalid:focus {\n  z-index: 3;\n}\n\n.btn {\n  display: inline-block;\n  font-weight: 400;\n  line-height: 1.5;\n  color: #839496;\n  text-align: center;\n  text-decoration: none;\n  vertical-align: middle;\n  cursor: pointer;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  user-select: none;\n  background-color: transparent;\n  border: 1px solid transparent;\n  padding: 0.375rem 0.75rem;\n  font-size: 1rem;\n  border-radius: 0.25rem;\n  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .btn {\n    transition: none;\n  }\n}\n\n.btn:hover {\n  color: #839496;\n}\n\n.btn-check:focus + .btn, .btn:focus {\n  outline: 0;\n  box-shadow: 0 0 0 0.25rem rgba(7, 54, 66, 0.25);\n}\n\n.btn:disabled, .btn.disabled,\nfieldset:disabled .btn {\n  pointer-events: none;\n  opacity: 0.65;\n}\n\n.btn-primary {\n  color: #fff;\n  background-color: #b58900;\n  border-color: #b58900;\n}\n\n.btn-primary:hover {\n  color: #fff;\n  background-color: #9a7400;\n  border-color: #916e00;\n}\n\n.btn-check:focus + .btn-primary, .btn-primary:focus {\n  color: #fff;\n  background-color: #9a7400;\n  border-color: #916e00;\n  box-shadow: 0 0 0 0.25rem rgba(192, 155, 38, 0.5);\n}\n\n.btn-check:checked + .btn-primary,\n.btn-check:active + .btn-primary, .btn-primary:active, .btn-primary.active,\n.show > .btn-primary.dropdown-toggle {\n  color: #fff;\n  background-color: #916e00;\n  border-color: #886700;\n}\n\n.btn-check:checked + .btn-primary:focus,\n.btn-check:active + .btn-primary:focus, .btn-primary:active:focus, .btn-primary.active:focus,\n.show > .btn-primary.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.25rem rgba(192, 155, 38, 0.5);\n}\n\n.btn-primary:disabled, .btn-primary.disabled {\n  color: #fff;\n  background-color: #b58900;\n  border-color: #b58900;\n}\n\n.btn-secondary {\n  color: #fff;\n  background-color: #839496;\n  border-color: #839496;\n}\n\n.btn-secondary:hover {\n  color: #fff;\n  background-color: #6f7e80;\n  border-color: #697678;\n}\n\n.btn-check:focus + .btn-secondary, .btn-secondary:focus {\n  color: #fff;\n  background-color: #6f7e80;\n  border-color: #697678;\n  box-shadow: 0 0 0 0.25rem rgba(150, 164, 166, 0.5);\n}\n\n.btn-check:checked + .btn-secondary,\n.btn-check:active + .btn-secondary, .btn-secondary:active, .btn-secondary.active,\n.show > .btn-secondary.dropdown-toggle {\n  color: #fff;\n  background-color: #697678;\n  border-color: #626f71;\n}\n\n.btn-check:checked + .btn-secondary:focus,\n.btn-check:active + .btn-secondary:focus, .btn-secondary:active:focus, .btn-secondary.active:focus,\n.show > .btn-secondary.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.25rem rgba(150, 164, 166, 0.5);\n}\n\n.btn-secondary:disabled, .btn-secondary.disabled {\n  color: #fff;\n  background-color: #839496;\n  border-color: #839496;\n}\n\n.btn-success {\n  color: #fff;\n  background-color: #2aa198;\n  border-color: #2aa198;\n}\n\n.btn-success:hover {\n  color: #fff;\n  background-color: #248981;\n  border-color: #22817a;\n}\n\n.btn-check:focus + .btn-success, .btn-success:focus {\n  color: #fff;\n  background-color: #248981;\n  border-color: #22817a;\n  box-shadow: 0 0 0 0.25rem rgba(74, 175, 167, 0.5);\n}\n\n.btn-check:checked + .btn-success,\n.btn-check:active + .btn-success, .btn-success:active, .btn-success.active,\n.show > .btn-success.dropdown-toggle {\n  color: #fff;\n  background-color: #22817a;\n  border-color: #207972;\n}\n\n.btn-check:checked + .btn-success:focus,\n.btn-check:active + .btn-success:focus, .btn-success:active:focus, .btn-success.active:focus,\n.show > .btn-success.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.25rem rgba(74, 175, 167, 0.5);\n}\n\n.btn-success:disabled, .btn-success.disabled {\n  color: #fff;\n  background-color: #2aa198;\n  border-color: #2aa198;\n}\n\n.btn-info {\n  color: #fff;\n  background-color: #268bd2;\n  border-color: #268bd2;\n}\n\n.btn-info:hover {\n  color: #fff;\n  background-color: #2076b3;\n  border-color: #1e6fa8;\n}\n\n.btn-check:focus + .btn-info, .btn-info:focus {\n  color: #fff;\n  background-color: #2076b3;\n  border-color: #1e6fa8;\n  box-shadow: 0 0 0 0.25rem rgba(71, 156, 217, 0.5);\n}\n\n.btn-check:checked + .btn-info,\n.btn-check:active + .btn-info, .btn-info:active, .btn-info.active,\n.show > .btn-info.dropdown-toggle {\n  color: #fff;\n  background-color: #1e6fa8;\n  border-color: #1d689e;\n}\n\n.btn-check:checked + .btn-info:focus,\n.btn-check:active + .btn-info:focus, .btn-info:active:focus, .btn-info.active:focus,\n.show > .btn-info.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.25rem rgba(71, 156, 217, 0.5);\n}\n\n.btn-info:disabled, .btn-info.disabled {\n  color: #fff;\n  background-color: #268bd2;\n  border-color: #268bd2;\n}\n\n.btn-warning {\n  color: #fff;\n  background-color: #cb4b16;\n  border-color: #cb4b16;\n}\n\n.btn-warning:hover {\n  color: #fff;\n  background-color: #ad4013;\n  border-color: #a23c12;\n}\n\n.btn-check:focus + .btn-warning, .btn-warning:focus {\n  color: #fff;\n  background-color: #ad4013;\n  border-color: #a23c12;\n  box-shadow: 0 0 0 0.25rem rgba(211, 102, 57, 0.5);\n}\n\n.btn-check:checked + .btn-warning,\n.btn-check:active + .btn-warning, .btn-warning:active, .btn-warning.active,\n.show > .btn-warning.dropdown-toggle {\n  color: #fff;\n  background-color: #a23c12;\n  border-color: #983811;\n}\n\n.btn-check:checked + .btn-warning:focus,\n.btn-check:active + .btn-warning:focus, .btn-warning:active:focus, .btn-warning.active:focus,\n.show > .btn-warning.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.25rem rgba(211, 102, 57, 0.5);\n}\n\n.btn-warning:disabled, .btn-warning.disabled {\n  color: #fff;\n  background-color: #cb4b16;\n  border-color: #cb4b16;\n}\n\n.btn-danger {\n  color: #fff;\n  background-color: #d33682;\n  border-color: #d33682;\n}\n\n.btn-danger:hover {\n  color: #fff;\n  background-color: #b32e6f;\n  border-color: #a92b68;\n}\n\n.btn-check:focus + .btn-danger, .btn-danger:focus {\n  color: #fff;\n  background-color: #b32e6f;\n  border-color: #a92b68;\n  box-shadow: 0 0 0 0.25rem rgba(218, 84, 149, 0.5);\n}\n\n.btn-check:checked + .btn-danger,\n.btn-check:active + .btn-danger, .btn-danger:active, .btn-danger.active,\n.show > .btn-danger.dropdown-toggle {\n  color: #fff;\n  background-color: #a92b68;\n  border-color: #9e2962;\n}\n\n.btn-check:checked + .btn-danger:focus,\n.btn-check:active + .btn-danger:focus, .btn-danger:active:focus, .btn-danger.active:focus,\n.show > .btn-danger.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.25rem rgba(218, 84, 149, 0.5);\n}\n\n.btn-danger:disabled, .btn-danger.disabled {\n  color: #fff;\n  background-color: #d33682;\n  border-color: #d33682;\n}\n\n.btn-light {\n  color: #000;\n  background-color: #fdf6e3;\n  border-color: #fdf6e3;\n}\n\n.btn-light:hover {\n  color: #000;\n  background-color: #fdf7e7;\n  border-color: #fdf7e6;\n}\n\n.btn-check:focus + .btn-light, .btn-light:focus {\n  color: #000;\n  background-color: #fdf7e7;\n  border-color: #fdf7e6;\n  box-shadow: 0 0 0 0.25rem rgba(215, 209, 193, 0.5);\n}\n\n.btn-check:checked + .btn-light,\n.btn-check:active + .btn-light, .btn-light:active, .btn-light.active,\n.show > .btn-light.dropdown-toggle {\n  color: #000;\n  background-color: #fdf8e9;\n  border-color: #fdf7e6;\n}\n\n.btn-check:checked + .btn-light:focus,\n.btn-check:active + .btn-light:focus, .btn-light:active:focus, .btn-light.active:focus,\n.show > .btn-light.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.25rem rgba(215, 209, 193, 0.5);\n}\n\n.btn-light:disabled, .btn-light.disabled {\n  color: #000;\n  background-color: #fdf6e3;\n  border-color: #fdf6e3;\n}\n\n.btn-dark {\n  color: #fff;\n  background-color: #073642;\n  border-color: #073642;\n}\n\n.btn-dark:hover {\n  color: #fff;\n  background-color: #062e38;\n  border-color: #062b35;\n}\n\n.btn-check:focus + .btn-dark, .btn-dark:focus {\n  color: #fff;\n  background-color: #062e38;\n  border-color: #062b35;\n  box-shadow: 0 0 0 0.25rem rgba(44, 84, 94, 0.5);\n}\n\n.btn-check:checked + .btn-dark,\n.btn-check:active + .btn-dark, .btn-dark:active, .btn-dark.active,\n.show > .btn-dark.dropdown-toggle {\n  color: #fff;\n  background-color: #062b35;\n  border-color: #052932;\n}\n\n.btn-check:checked + .btn-dark:focus,\n.btn-check:active + .btn-dark:focus, .btn-dark:active:focus, .btn-dark.active:focus,\n.show > .btn-dark.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.25rem rgba(44, 84, 94, 0.5);\n}\n\n.btn-dark:disabled, .btn-dark.disabled {\n  color: #fff;\n  background-color: #073642;\n  border-color: #073642;\n}\n\n.btn-outline-primary {\n  color: #b58900;\n  border-color: #b58900;\n}\n\n.btn-outline-primary:hover {\n  color: #fff;\n  background-color: #b58900;\n  border-color: #b58900;\n}\n\n.btn-check:focus + .btn-outline-primary, .btn-outline-primary:focus {\n  box-shadow: 0 0 0 0.25rem rgba(181, 137, 0, 0.5);\n}\n\n.btn-check:checked + .btn-outline-primary,\n.btn-check:active + .btn-outline-primary, .btn-outline-primary:active, .btn-outline-primary.active, .btn-outline-primary.dropdown-toggle.show {\n  color: #fff;\n  background-color: #b58900;\n  border-color: #b58900;\n}\n\n.btn-check:checked + .btn-outline-primary:focus,\n.btn-check:active + .btn-outline-primary:focus, .btn-outline-primary:active:focus, .btn-outline-primary.active:focus, .btn-outline-primary.dropdown-toggle.show:focus {\n  box-shadow: 0 0 0 0.25rem rgba(181, 137, 0, 0.5);\n}\n\n.btn-outline-primary:disabled, .btn-outline-primary.disabled {\n  color: #b58900;\n  background-color: transparent;\n}\n\n.btn-outline-secondary {\n  color: #839496;\n  border-color: #839496;\n}\n\n.btn-outline-secondary:hover {\n  color: #fff;\n  background-color: #839496;\n  border-color: #839496;\n}\n\n.btn-check:focus + .btn-outline-secondary, .btn-outline-secondary:focus {\n  box-shadow: 0 0 0 0.25rem rgba(131, 148, 150, 0.5);\n}\n\n.btn-check:checked + .btn-outline-secondary,\n.btn-check:active + .btn-outline-secondary, .btn-outline-secondary:active, .btn-outline-secondary.active, .btn-outline-secondary.dropdown-toggle.show {\n  color: #fff;\n  background-color: #839496;\n  border-color: #839496;\n}\n\n.btn-check:checked + .btn-outline-secondary:focus,\n.btn-check:active + .btn-outline-secondary:focus, .btn-outline-secondary:active:focus, .btn-outline-secondary.active:focus, .btn-outline-secondary.dropdown-toggle.show:focus {\n  box-shadow: 0 0 0 0.25rem rgba(131, 148, 150, 0.5);\n}\n\n.btn-outline-secondary:disabled, .btn-outline-secondary.disabled {\n  color: #839496;\n  background-color: transparent;\n}\n\n.btn-outline-success {\n  color: #2aa198;\n  border-color: #2aa198;\n}\n\n.btn-outline-success:hover {\n  color: #fff;\n  background-color: #2aa198;\n  border-color: #2aa198;\n}\n\n.btn-check:focus + .btn-outline-success, .btn-outline-success:focus {\n  box-shadow: 0 0 0 0.25rem rgba(42, 161, 152, 0.5);\n}\n\n.btn-check:checked + .btn-outline-success,\n.btn-check:active + .btn-outline-success, .btn-outline-success:active, .btn-outline-success.active, .btn-outline-success.dropdown-toggle.show {\n  color: #fff;\n  background-color: #2aa198;\n  border-color: #2aa198;\n}\n\n.btn-check:checked + .btn-outline-success:focus,\n.btn-check:active + .btn-outline-success:focus, .btn-outline-success:active:focus, .btn-outline-success.active:focus, .btn-outline-success.dropdown-toggle.show:focus {\n  box-shadow: 0 0 0 0.25rem rgba(42, 161, 152, 0.5);\n}\n\n.btn-outline-success:disabled, .btn-outline-success.disabled {\n  color: #2aa198;\n  background-color: transparent;\n}\n\n.btn-outline-info {\n  color: #268bd2;\n  border-color: #268bd2;\n}\n\n.btn-outline-info:hover {\n  color: #fff;\n  background-color: #268bd2;\n  border-color: #268bd2;\n}\n\n.btn-check:focus + .btn-outline-info, .btn-outline-info:focus {\n  box-shadow: 0 0 0 0.25rem rgba(38, 139, 210, 0.5);\n}\n\n.btn-check:checked + .btn-outline-info,\n.btn-check:active + .btn-outline-info, .btn-outline-info:active, .btn-outline-info.active, .btn-outline-info.dropdown-toggle.show {\n  color: #fff;\n  background-color: #268bd2;\n  border-color: #268bd2;\n}\n\n.btn-check:checked + .btn-outline-info:focus,\n.btn-check:active + .btn-outline-info:focus, .btn-outline-info:active:focus, .btn-outline-info.active:focus, .btn-outline-info.dropdown-toggle.show:focus {\n  box-shadow: 0 0 0 0.25rem rgba(38, 139, 210, 0.5);\n}\n\n.btn-outline-info:disabled, .btn-outline-info.disabled {\n  color: #268bd2;\n  background-color: transparent;\n}\n\n.btn-outline-warning {\n  color: #cb4b16;\n  border-color: #cb4b16;\n}\n\n.btn-outline-warning:hover {\n  color: #fff;\n  background-color: #cb4b16;\n  border-color: #cb4b16;\n}\n\n.btn-check:focus + .btn-outline-warning, .btn-outline-warning:focus {\n  box-shadow: 0 0 0 0.25rem rgba(203, 75, 22, 0.5);\n}\n\n.btn-check:checked + .btn-outline-warning,\n.btn-check:active + .btn-outline-warning, .btn-outline-warning:active, .btn-outline-warning.active, .btn-outline-warning.dropdown-toggle.show {\n  color: #fff;\n  background-color: #cb4b16;\n  border-color: #cb4b16;\n}\n\n.btn-check:checked + .btn-outline-warning:focus,\n.btn-check:active + .btn-outline-warning:focus, .btn-outline-warning:active:focus, .btn-outline-warning.active:focus, .btn-outline-warning.dropdown-toggle.show:focus {\n  box-shadow: 0 0 0 0.25rem rgba(203, 75, 22, 0.5);\n}\n\n.btn-outline-warning:disabled, .btn-outline-warning.disabled {\n  color: #cb4b16;\n  background-color: transparent;\n}\n\n.btn-outline-danger {\n  color: #d33682;\n  border-color: #d33682;\n}\n\n.btn-outline-danger:hover {\n  color: #fff;\n  background-color: #d33682;\n  border-color: #d33682;\n}\n\n.btn-check:focus + .btn-outline-danger, .btn-outline-danger:focus {\n  box-shadow: 0 0 0 0.25rem rgba(211, 54, 130, 0.5);\n}\n\n.btn-check:checked + .btn-outline-danger,\n.btn-check:active + .btn-outline-danger, .btn-outline-danger:active, .btn-outline-danger.active, .btn-outline-danger.dropdown-toggle.show {\n  color: #fff;\n  background-color: #d33682;\n  border-color: #d33682;\n}\n\n.btn-check:checked + .btn-outline-danger:focus,\n.btn-check:active + .btn-outline-danger:focus, .btn-outline-danger:active:focus, .btn-outline-danger.active:focus, .btn-outline-danger.dropdown-toggle.show:focus {\n  box-shadow: 0 0 0 0.25rem rgba(211, 54, 130, 0.5);\n}\n\n.btn-outline-danger:disabled, .btn-outline-danger.disabled {\n  color: #d33682;\n  background-color: transparent;\n}\n\n.btn-outline-light {\n  color: #fdf6e3;\n  border-color: #fdf6e3;\n}\n\n.btn-outline-light:hover {\n  color: #000;\n  background-color: #fdf6e3;\n  border-color: #fdf6e3;\n}\n\n.btn-check:focus + .btn-outline-light, .btn-outline-light:focus {\n  box-shadow: 0 0 0 0.25rem rgba(253, 246, 227, 0.5);\n}\n\n.btn-check:checked + .btn-outline-light,\n.btn-check:active + .btn-outline-light, .btn-outline-light:active, .btn-outline-light.active, .btn-outline-light.dropdown-toggle.show {\n  color: #000;\n  background-color: #fdf6e3;\n  border-color: #fdf6e3;\n}\n\n.btn-check:checked + .btn-outline-light:focus,\n.btn-check:active + .btn-outline-light:focus, .btn-outline-light:active:focus, .btn-outline-light.active:focus, .btn-outline-light.dropdown-toggle.show:focus {\n  box-shadow: 0 0 0 0.25rem rgba(253, 246, 227, 0.5);\n}\n\n.btn-outline-light:disabled, .btn-outline-light.disabled {\n  color: #fdf6e3;\n  background-color: transparent;\n}\n\n.btn-outline-dark {\n  color: #073642;\n  border-color: #073642;\n}\n\n.btn-outline-dark:hover {\n  color: #fff;\n  background-color: #073642;\n  border-color: #073642;\n}\n\n.btn-check:focus + .btn-outline-dark, .btn-outline-dark:focus {\n  box-shadow: 0 0 0 0.25rem rgba(7, 54, 66, 0.5);\n}\n\n.btn-check:checked + .btn-outline-dark,\n.btn-check:active + .btn-outline-dark, .btn-outline-dark:active, .btn-outline-dark.active, .btn-outline-dark.dropdown-toggle.show {\n  color: #fff;\n  background-color: #073642;\n  border-color: #073642;\n}\n\n.btn-check:checked + .btn-outline-dark:focus,\n.btn-check:active + .btn-outline-dark:focus, .btn-outline-dark:active:focus, .btn-outline-dark.active:focus, .btn-outline-dark.dropdown-toggle.show:focus {\n  box-shadow: 0 0 0 0.25rem rgba(7, 54, 66, 0.5);\n}\n\n.btn-outline-dark:disabled, .btn-outline-dark.disabled {\n  color: #073642;\n  background-color: transparent;\n}\n\n.btn-link {\n  font-weight: 400;\n  color: #2aa198;\n  text-decoration: underline;\n}\n\n.btn-link:hover {\n  color: #2aa198;\n}\n\n.btn-link:disabled, .btn-link.disabled {\n  color: #839496;\n}\n\n.btn-lg, .btn-group-lg > .btn {\n  padding: 0.5rem 1rem;\n  font-size: 1.25rem;\n  border-radius: 0.3rem;\n}\n\n.btn-sm, .btn-group-sm > .btn {\n  padding: 0.25rem 0.5rem;\n  font-size: 0.875rem;\n  border-radius: 0.2rem;\n}\n\n.fade {\n  transition: opacity 0.15s linear;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .fade {\n    transition: none;\n  }\n}\n\n.fade:not(.show) {\n  opacity: 0;\n}\n\n.collapse:not(.show) {\n  display: none;\n}\n\n.collapsing {\n  height: 0;\n  overflow: hidden;\n  transition: height 0.35s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .collapsing {\n    transition: none;\n  }\n}\n\n.collapsing.collapse-horizontal {\n  width: 0;\n  height: auto;\n  transition: width 0.35s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .collapsing.collapse-horizontal {\n    transition: none;\n  }\n}\n\n.dropup,\n.dropend,\n.dropdown,\n.dropstart {\n  position: relative;\n}\n\n.dropdown-toggle {\n  white-space: nowrap;\n}\n\n.dropdown-toggle::after {\n  display: inline-block;\n  margin-left: 0.255em;\n  vertical-align: 0.255em;\n  content: \"\";\n  border-top: 0.3em solid;\n  border-right: 0.3em solid transparent;\n  border-bottom: 0;\n  border-left: 0.3em solid transparent;\n}\n\n.dropdown-toggle:empty::after {\n  margin-left: 0;\n}\n\n.dropdown-menu {\n  position: absolute;\n  z-index: 1000;\n  display: none;\n  min-width: 10rem;\n  padding: 0.5rem 0;\n  margin: 0;\n  font-size: 1rem;\n  color: #839496;\n  text-align: left;\n  list-style: none;\n  background-color: #073642;\n  background-clip: padding-box;\n  border: 1px solid rgba(0, 0, 0, 0.15);\n  border-radius: 0.25rem;\n}\n\n.dropdown-menu[data-bs-popper] {\n  top: 100%;\n  left: 0;\n  margin-top: 0.125rem;\n}\n\n.dropdown-menu-start {\n  --bs-position: start;\n}\n\n.dropdown-menu-start[data-bs-popper] {\n  right: auto;\n  left: 0;\n}\n\n.dropdown-menu-end {\n  --bs-position: end;\n}\n\n.dropdown-menu-end[data-bs-popper] {\n  right: 0;\n  left: auto;\n}\n\n@media (min-width: 576px) {\n  .dropdown-menu-sm-start {\n    --bs-position: start;\n  }\n  .dropdown-menu-sm-start[data-bs-popper] {\n    right: auto;\n    left: 0;\n  }\n  .dropdown-menu-sm-end {\n    --bs-position: end;\n  }\n  .dropdown-menu-sm-end[data-bs-popper] {\n    right: 0;\n    left: auto;\n  }\n}\n\n@media (min-width: 768px) {\n  .dropdown-menu-md-start {\n    --bs-position: start;\n  }\n  .dropdown-menu-md-start[data-bs-popper] {\n    right: auto;\n    left: 0;\n  }\n  .dropdown-menu-md-end {\n    --bs-position: end;\n  }\n  .dropdown-menu-md-end[data-bs-popper] {\n    right: 0;\n    left: auto;\n  }\n}\n\n@media (min-width: 992px) {\n  .dropdown-menu-lg-start {\n    --bs-position: start;\n  }\n  .dropdown-menu-lg-start[data-bs-popper] {\n    right: auto;\n    left: 0;\n  }\n  .dropdown-menu-lg-end {\n    --bs-position: end;\n  }\n  .dropdown-menu-lg-end[data-bs-popper] {\n    right: 0;\n    left: auto;\n  }\n}\n\n@media (min-width: 1200px) {\n  .dropdown-menu-xl-start {\n    --bs-position: start;\n  }\n  .dropdown-menu-xl-start[data-bs-popper] {\n    right: auto;\n    left: 0;\n  }\n  .dropdown-menu-xl-end {\n    --bs-position: end;\n  }\n  .dropdown-menu-xl-end[data-bs-popper] {\n    right: 0;\n    left: auto;\n  }\n}\n\n@media (min-width: 1400px) {\n  .dropdown-menu-xxl-start {\n    --bs-position: start;\n  }\n  .dropdown-menu-xxl-start[data-bs-popper] {\n    right: auto;\n    left: 0;\n  }\n  .dropdown-menu-xxl-end {\n    --bs-position: end;\n  }\n  .dropdown-menu-xxl-end[data-bs-popper] {\n    right: 0;\n    left: auto;\n  }\n}\n\n.dropup .dropdown-menu[data-bs-popper] {\n  top: auto;\n  bottom: 100%;\n  margin-top: 0;\n  margin-bottom: 0.125rem;\n}\n\n.dropup .dropdown-toggle::after {\n  display: inline-block;\n  margin-left: 0.255em;\n  vertical-align: 0.255em;\n  content: \"\";\n  border-top: 0;\n  border-right: 0.3em solid transparent;\n  border-bottom: 0.3em solid;\n  border-left: 0.3em solid transparent;\n}\n\n.dropup .dropdown-toggle:empty::after {\n  margin-left: 0;\n}\n\n.dropend .dropdown-menu[data-bs-popper] {\n  top: 0;\n  right: auto;\n  left: 100%;\n  margin-top: 0;\n  margin-left: 0.125rem;\n}\n\n.dropend .dropdown-toggle::after {\n  display: inline-block;\n  margin-left: 0.255em;\n  vertical-align: 0.255em;\n  content: \"\";\n  border-top: 0.3em solid transparent;\n  border-right: 0;\n  border-bottom: 0.3em solid transparent;\n  border-left: 0.3em solid;\n}\n\n.dropend .dropdown-toggle:empty::after {\n  margin-left: 0;\n}\n\n.dropend .dropdown-toggle::after {\n  vertical-align: 0;\n}\n\n.dropstart .dropdown-menu[data-bs-popper] {\n  top: 0;\n  right: 100%;\n  left: auto;\n  margin-top: 0;\n  margin-right: 0.125rem;\n}\n\n.dropstart .dropdown-toggle::after {\n  display: inline-block;\n  margin-left: 0.255em;\n  vertical-align: 0.255em;\n  content: \"\";\n}\n\n.dropstart .dropdown-toggle::after {\n  display: none;\n}\n\n.dropstart .dropdown-toggle::before {\n  display: inline-block;\n  margin-right: 0.255em;\n  vertical-align: 0.255em;\n  content: \"\";\n  border-top: 0.3em solid transparent;\n  border-right: 0.3em solid;\n  border-bottom: 0.3em solid transparent;\n}\n\n.dropstart .dropdown-toggle:empty::after {\n  margin-left: 0;\n}\n\n.dropstart .dropdown-toggle::before {\n  vertical-align: 0;\n}\n\n.dropdown-divider {\n  height: 0;\n  margin: 0.5rem 0;\n  overflow: hidden;\n  border-top: 1px solid #002b36;\n}\n\n.dropdown-item {\n  display: block;\n  width: 100%;\n  padding: 0.25rem 1rem;\n  clear: both;\n  font-weight: 400;\n  color: #839496;\n  text-align: inherit;\n  text-decoration: none;\n  white-space: nowrap;\n  background-color: transparent;\n  border: 0;\n}\n\n.dropdown-item:hover, .dropdown-item:focus {\n  color: rgba(255, 255, 255, 0.75);\n  background-color: #002b36;\n}\n\n.dropdown-item.active, .dropdown-item:active {\n  color: rgba(255, 255, 255, 0.75);\n  text-decoration: none;\n  background-color: #073642;\n}\n\n.dropdown-item.disabled, .dropdown-item:disabled {\n  color: #adb5bd;\n  pointer-events: none;\n  background-color: transparent;\n}\n\n.dropdown-menu.show {\n  display: block;\n}\n\n.dropdown-header {\n  display: block;\n  padding: 0.5rem 1rem;\n  margin-bottom: 0;\n  font-size: 0.875rem;\n  color: #839496;\n  white-space: nowrap;\n}\n\n.dropdown-item-text {\n  display: block;\n  padding: 0.25rem 1rem;\n  color: #839496;\n}\n\n.dropdown-menu-dark {\n  color: #dee2e6;\n  background-color: #073642;\n  border-color: rgba(0, 0, 0, 0.15);\n}\n\n.dropdown-menu-dark .dropdown-item {\n  color: #dee2e6;\n}\n\n.dropdown-menu-dark .dropdown-item:hover, .dropdown-menu-dark .dropdown-item:focus {\n  color: #fff;\n  background-color: rgba(255, 255, 255, 0.15);\n}\n\n.dropdown-menu-dark .dropdown-item.active, .dropdown-menu-dark .dropdown-item:active {\n  color: rgba(255, 255, 255, 0.75);\n  background-color: #073642;\n}\n\n.dropdown-menu-dark .dropdown-item.disabled, .dropdown-menu-dark .dropdown-item:disabled {\n  color: #adb5bd;\n}\n\n.dropdown-menu-dark .dropdown-divider {\n  border-color: #002b36;\n}\n\n.dropdown-menu-dark .dropdown-item-text {\n  color: #dee2e6;\n}\n\n.dropdown-menu-dark .dropdown-header {\n  color: #adb5bd;\n}\n\n.btn-group,\n.btn-group-vertical {\n  position: relative;\n  display: -ms-inline-flexbox;\n  display: inline-flex;\n  vertical-align: middle;\n}\n\n.btn-group > .btn,\n.btn-group-vertical > .btn {\n  position: relative;\n  -ms-flex: 1 1 auto;\n  flex: 1 1 auto;\n}\n\n.btn-group > .btn-check:checked + .btn,\n.btn-group > .btn-check:focus + .btn,\n.btn-group > .btn:hover,\n.btn-group > .btn:focus,\n.btn-group > .btn:active,\n.btn-group > .btn.active,\n.btn-group-vertical > .btn-check:checked + .btn,\n.btn-group-vertical > .btn-check:focus + .btn,\n.btn-group-vertical > .btn:hover,\n.btn-group-vertical > .btn:focus,\n.btn-group-vertical > .btn:active,\n.btn-group-vertical > .btn.active {\n  z-index: 1;\n}\n\n.btn-toolbar {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n  flex-wrap: wrap;\n  -ms-flex-pack: start;\n  justify-content: flex-start;\n}\n\n.btn-toolbar .input-group {\n  width: auto;\n}\n\n.btn-group > .btn:not(:first-child),\n.btn-group > .btn-group:not(:first-child) {\n  margin-left: -1px;\n}\n\n.btn-group > .btn:not(:last-child):not(.dropdown-toggle),\n.btn-group > .btn-group:not(:last-child) > .btn {\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n}\n\n.btn-group > .btn:nth-child(n + 3),\n.btn-group > :not(.btn-check) + .btn,\n.btn-group > .btn-group:not(:first-child) > .btn {\n  border-top-left-radius: 0;\n  border-bottom-left-radius: 0;\n}\n\n.dropdown-toggle-split {\n  padding-right: 0.5625rem;\n  padding-left: 0.5625rem;\n}\n\n.dropdown-toggle-split::after,\n.dropup .dropdown-toggle-split::after,\n.dropend .dropdown-toggle-split::after {\n  margin-left: 0;\n}\n\n.dropstart .dropdown-toggle-split::before {\n  margin-right: 0;\n}\n\n.btn-sm + .dropdown-toggle-split, .btn-group-sm > .btn + .dropdown-toggle-split {\n  padding-right: 0.375rem;\n  padding-left: 0.375rem;\n}\n\n.btn-lg + .dropdown-toggle-split, .btn-group-lg > .btn + .dropdown-toggle-split {\n  padding-right: 0.75rem;\n  padding-left: 0.75rem;\n}\n\n.btn-group-vertical {\n  -ms-flex-direction: column;\n  flex-direction: column;\n  -ms-flex-align: start;\n  align-items: flex-start;\n  -ms-flex-pack: center;\n  justify-content: center;\n}\n\n.btn-group-vertical > .btn,\n.btn-group-vertical > .btn-group {\n  width: 100%;\n}\n\n.btn-group-vertical > .btn:not(:first-child),\n.btn-group-vertical > .btn-group:not(:first-child) {\n  margin-top: -1px;\n}\n\n.btn-group-vertical > .btn:not(:last-child):not(.dropdown-toggle),\n.btn-group-vertical > .btn-group:not(:last-child) > .btn {\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 0;\n}\n\n.btn-group-vertical > .btn ~ .btn,\n.btn-group-vertical > .btn-group:not(:first-child) > .btn {\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n}\n\n.nav {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n  flex-wrap: wrap;\n  padding-left: 0;\n  margin-bottom: 0;\n  list-style: none;\n}\n\n.nav-link {\n  display: block;\n  padding: 0.5rem 1rem;\n  color: #2aa198;\n  text-decoration: none;\n  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .nav-link {\n    transition: none;\n  }\n}\n\n.nav-link:hover, .nav-link:focus {\n  color: #2aa198;\n}\n\n.nav-link.disabled {\n  color: #839496;\n  pointer-events: none;\n  cursor: default;\n}\n\n.nav-tabs {\n  border-bottom: 1px solid #073642;\n}\n\n.nav-tabs .nav-link {\n  margin-bottom: -1px;\n  background: none;\n  border: 1px solid transparent;\n  border-top-left-radius: 0.25rem;\n  border-top-right-radius: 0.25rem;\n}\n\n.nav-tabs .nav-link:hover, .nav-tabs .nav-link:focus {\n  border-color: #073642;\n  isolation: isolate;\n}\n\n.nav-tabs .nav-link.disabled {\n  color: #839496;\n  background-color: transparent;\n  border-color: transparent;\n}\n\n.nav-tabs .nav-link.active,\n.nav-tabs .nav-item.show .nav-link {\n  color: rgba(255, 255, 255, 0.75);\n  background-color: #002b36;\n  border-color: #073642;\n}\n\n.nav-tabs .dropdown-menu {\n  margin-top: -1px;\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n}\n\n.nav-pills .nav-link {\n  background: none;\n  border: 0;\n  border-radius: 0.25rem;\n}\n\n.nav-pills .nav-link.active,\n.nav-pills .show > .nav-link {\n  color: rgba(255, 255, 255, 0.75);\n  background-color: #073642;\n}\n\n.nav-fill > .nav-link,\n.nav-fill .nav-item {\n  -ms-flex: 1 1 auto;\n  flex: 1 1 auto;\n  text-align: center;\n}\n\n.nav-justified > .nav-link,\n.nav-justified .nav-item {\n  -ms-flex-preferred-size: 0;\n  flex-basis: 0;\n  -ms-flex-positive: 1;\n  flex-grow: 1;\n  text-align: center;\n}\n\n.nav-fill .nav-item .nav-link,\n.nav-justified .nav-item .nav-link {\n  width: 100%;\n}\n\n.tab-content > .tab-pane {\n  display: none;\n}\n\n.tab-content > .active {\n  display: block;\n}\n\n.navbar {\n  position: relative;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n  flex-wrap: wrap;\n  -ms-flex-align: center;\n  align-items: center;\n  -ms-flex-pack: justify;\n  justify-content: space-between;\n  padding-top: 0.5rem;\n  padding-bottom: 0.5rem;\n}\n\n.navbar > .container,\n.navbar > .container-fluid, .navbar > .container-sm, .navbar > .container-md, .navbar > .container-lg, .navbar > .container-xl, .navbar > .container-xxl {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: inherit;\n  flex-wrap: inherit;\n  -ms-flex-align: center;\n  align-items: center;\n  -ms-flex-pack: justify;\n  justify-content: space-between;\n}\n\n.navbar-brand {\n  padding-top: 0.3125rem;\n  padding-bottom: 0.3125rem;\n  margin-right: 1rem;\n  font-size: 1.25rem;\n  text-decoration: none;\n  white-space: nowrap;\n}\n\n.navbar-nav {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  padding-left: 0;\n  margin-bottom: 0;\n  list-style: none;\n}\n\n.navbar-nav .nav-link {\n  padding-right: 0;\n  padding-left: 0;\n}\n\n.navbar-nav .dropdown-menu {\n  position: static;\n}\n\n.navbar-text {\n  padding-top: 0.5rem;\n  padding-bottom: 0.5rem;\n}\n\n.navbar-collapse {\n  -ms-flex-preferred-size: 100%;\n  flex-basis: 100%;\n  -ms-flex-positive: 1;\n  flex-grow: 1;\n  -ms-flex-align: center;\n  align-items: center;\n}\n\n.navbar-toggler {\n  padding: 0.25rem 0.75rem;\n  font-size: 1.25rem;\n  line-height: 1;\n  background-color: transparent;\n  border: 1px solid transparent;\n  border-radius: 0.25rem;\n  transition: box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .navbar-toggler {\n    transition: none;\n  }\n}\n\n.navbar-toggler:hover {\n  text-decoration: none;\n}\n\n.navbar-toggler:focus {\n  text-decoration: none;\n  outline: 0;\n  box-shadow: 0 0 0 0.25rem;\n}\n\n.navbar-toggler-icon {\n  display: inline-block;\n  width: 1.5em;\n  height: 1.5em;\n  vertical-align: middle;\n  background-repeat: no-repeat;\n  background-position: center;\n  background-size: 100%;\n}\n\n.navbar-nav-scroll {\n  max-height: var(--bs-scroll-height, 75vh);\n  overflow-y: auto;\n}\n\n@media (min-width: 576px) {\n  .navbar-expand-sm {\n    -ms-flex-wrap: nowrap;\n    flex-wrap: nowrap;\n    -ms-flex-pack: start;\n    justify-content: flex-start;\n  }\n  .navbar-expand-sm .navbar-nav {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .navbar-expand-sm .navbar-nav .dropdown-menu {\n    position: absolute;\n  }\n  .navbar-expand-sm .navbar-nav .nav-link {\n    padding-right: 0.5rem;\n    padding-left: 0.5rem;\n  }\n  .navbar-expand-sm .navbar-nav-scroll {\n    overflow: visible;\n  }\n  .navbar-expand-sm .navbar-collapse {\n    display: -ms-flexbox !important;\n    display: flex !important;\n    -ms-flex-preferred-size: auto;\n    flex-basis: auto;\n  }\n  .navbar-expand-sm .navbar-toggler {\n    display: none;\n  }\n  .navbar-expand-sm .offcanvas-header {\n    display: none;\n  }\n  .navbar-expand-sm .offcanvas {\n    position: inherit;\n    bottom: 0;\n    z-index: 1000;\n    -ms-flex-positive: 1;\n    flex-grow: 1;\n    visibility: visible !important;\n    background-color: transparent;\n    border-right: 0;\n    border-left: 0;\n    transition: none;\n    -webkit-transform: none;\n    transform: none;\n  }\n  .navbar-expand-sm .offcanvas-top,\n  .navbar-expand-sm .offcanvas-bottom {\n    height: auto;\n    border-top: 0;\n    border-bottom: 0;\n  }\n  .navbar-expand-sm .offcanvas-body {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-positive: 0;\n    flex-grow: 0;\n    padding: 0;\n    overflow-y: visible;\n  }\n}\n\n@media (min-width: 768px) {\n  .navbar-expand-md {\n    -ms-flex-wrap: nowrap;\n    flex-wrap: nowrap;\n    -ms-flex-pack: start;\n    justify-content: flex-start;\n  }\n  .navbar-expand-md .navbar-nav {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .navbar-expand-md .navbar-nav .dropdown-menu {\n    position: absolute;\n  }\n  .navbar-expand-md .navbar-nav .nav-link {\n    padding-right: 0.5rem;\n    padding-left: 0.5rem;\n  }\n  .navbar-expand-md .navbar-nav-scroll {\n    overflow: visible;\n  }\n  .navbar-expand-md .navbar-collapse {\n    display: -ms-flexbox !important;\n    display: flex !important;\n    -ms-flex-preferred-size: auto;\n    flex-basis: auto;\n  }\n  .navbar-expand-md .navbar-toggler {\n    display: none;\n  }\n  .navbar-expand-md .offcanvas-header {\n    display: none;\n  }\n  .navbar-expand-md .offcanvas {\n    position: inherit;\n    bottom: 0;\n    z-index: 1000;\n    -ms-flex-positive: 1;\n    flex-grow: 1;\n    visibility: visible !important;\n    background-color: transparent;\n    border-right: 0;\n    border-left: 0;\n    transition: none;\n    -webkit-transform: none;\n    transform: none;\n  }\n  .navbar-expand-md .offcanvas-top,\n  .navbar-expand-md .offcanvas-bottom {\n    height: auto;\n    border-top: 0;\n    border-bottom: 0;\n  }\n  .navbar-expand-md .offcanvas-body {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-positive: 0;\n    flex-grow: 0;\n    padding: 0;\n    overflow-y: visible;\n  }\n}\n\n@media (min-width: 992px) {\n  .navbar-expand-lg {\n    -ms-flex-wrap: nowrap;\n    flex-wrap: nowrap;\n    -ms-flex-pack: start;\n    justify-content: flex-start;\n  }\n  .navbar-expand-lg .navbar-nav {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .navbar-expand-lg .navbar-nav .dropdown-menu {\n    position: absolute;\n  }\n  .navbar-expand-lg .navbar-nav .nav-link {\n    padding-right: 0.5rem;\n    padding-left: 0.5rem;\n  }\n  .navbar-expand-lg .navbar-nav-scroll {\n    overflow: visible;\n  }\n  .navbar-expand-lg .navbar-collapse {\n    display: -ms-flexbox !important;\n    display: flex !important;\n    -ms-flex-preferred-size: auto;\n    flex-basis: auto;\n  }\n  .navbar-expand-lg .navbar-toggler {\n    display: none;\n  }\n  .navbar-expand-lg .offcanvas-header {\n    display: none;\n  }\n  .navbar-expand-lg .offcanvas {\n    position: inherit;\n    bottom: 0;\n    z-index: 1000;\n    -ms-flex-positive: 1;\n    flex-grow: 1;\n    visibility: visible !important;\n    background-color: transparent;\n    border-right: 0;\n    border-left: 0;\n    transition: none;\n    -webkit-transform: none;\n    transform: none;\n  }\n  .navbar-expand-lg .offcanvas-top,\n  .navbar-expand-lg .offcanvas-bottom {\n    height: auto;\n    border-top: 0;\n    border-bottom: 0;\n  }\n  .navbar-expand-lg .offcanvas-body {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-positive: 0;\n    flex-grow: 0;\n    padding: 0;\n    overflow-y: visible;\n  }\n}\n\n@media (min-width: 1200px) {\n  .navbar-expand-xl {\n    -ms-flex-wrap: nowrap;\n    flex-wrap: nowrap;\n    -ms-flex-pack: start;\n    justify-content: flex-start;\n  }\n  .navbar-expand-xl .navbar-nav {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .navbar-expand-xl .navbar-nav .dropdown-menu {\n    position: absolute;\n  }\n  .navbar-expand-xl .navbar-nav .nav-link {\n    padding-right: 0.5rem;\n    padding-left: 0.5rem;\n  }\n  .navbar-expand-xl .navbar-nav-scroll {\n    overflow: visible;\n  }\n  .navbar-expand-xl .navbar-collapse {\n    display: -ms-flexbox !important;\n    display: flex !important;\n    -ms-flex-preferred-size: auto;\n    flex-basis: auto;\n  }\n  .navbar-expand-xl .navbar-toggler {\n    display: none;\n  }\n  .navbar-expand-xl .offcanvas-header {\n    display: none;\n  }\n  .navbar-expand-xl .offcanvas {\n    position: inherit;\n    bottom: 0;\n    z-index: 1000;\n    -ms-flex-positive: 1;\n    flex-grow: 1;\n    visibility: visible !important;\n    background-color: transparent;\n    border-right: 0;\n    border-left: 0;\n    transition: none;\n    -webkit-transform: none;\n    transform: none;\n  }\n  .navbar-expand-xl .offcanvas-top,\n  .navbar-expand-xl .offcanvas-bottom {\n    height: auto;\n    border-top: 0;\n    border-bottom: 0;\n  }\n  .navbar-expand-xl .offcanvas-body {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-positive: 0;\n    flex-grow: 0;\n    padding: 0;\n    overflow-y: visible;\n  }\n}\n\n@media (min-width: 1400px) {\n  .navbar-expand-xxl {\n    -ms-flex-wrap: nowrap;\n    flex-wrap: nowrap;\n    -ms-flex-pack: start;\n    justify-content: flex-start;\n  }\n  .navbar-expand-xxl .navbar-nav {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .navbar-expand-xxl .navbar-nav .dropdown-menu {\n    position: absolute;\n  }\n  .navbar-expand-xxl .navbar-nav .nav-link {\n    padding-right: 0.5rem;\n    padding-left: 0.5rem;\n  }\n  .navbar-expand-xxl .navbar-nav-scroll {\n    overflow: visible;\n  }\n  .navbar-expand-xxl .navbar-collapse {\n    display: -ms-flexbox !important;\n    display: flex !important;\n    -ms-flex-preferred-size: auto;\n    flex-basis: auto;\n  }\n  .navbar-expand-xxl .navbar-toggler {\n    display: none;\n  }\n  .navbar-expand-xxl .offcanvas-header {\n    display: none;\n  }\n  .navbar-expand-xxl .offcanvas {\n    position: inherit;\n    bottom: 0;\n    z-index: 1000;\n    -ms-flex-positive: 1;\n    flex-grow: 1;\n    visibility: visible !important;\n    background-color: transparent;\n    border-right: 0;\n    border-left: 0;\n    transition: none;\n    -webkit-transform: none;\n    transform: none;\n  }\n  .navbar-expand-xxl .offcanvas-top,\n  .navbar-expand-xxl .offcanvas-bottom {\n    height: auto;\n    border-top: 0;\n    border-bottom: 0;\n  }\n  .navbar-expand-xxl .offcanvas-body {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-positive: 0;\n    flex-grow: 0;\n    padding: 0;\n    overflow-y: visible;\n  }\n}\n\n.navbar-expand {\n  -ms-flex-wrap: nowrap;\n  flex-wrap: nowrap;\n  -ms-flex-pack: start;\n  justify-content: flex-start;\n}\n\n.navbar-expand .navbar-nav {\n  -ms-flex-direction: row;\n  flex-direction: row;\n}\n\n.navbar-expand .navbar-nav .dropdown-menu {\n  position: absolute;\n}\n\n.navbar-expand .navbar-nav .nav-link {\n  padding-right: 0.5rem;\n  padding-left: 0.5rem;\n}\n\n.navbar-expand .navbar-nav-scroll {\n  overflow: visible;\n}\n\n.navbar-expand .navbar-collapse {\n  display: -ms-flexbox !important;\n  display: flex !important;\n  -ms-flex-preferred-size: auto;\n  flex-basis: auto;\n}\n\n.navbar-expand .navbar-toggler {\n  display: none;\n}\n\n.navbar-expand .offcanvas-header {\n  display: none;\n}\n\n.navbar-expand .offcanvas {\n  position: inherit;\n  bottom: 0;\n  z-index: 1000;\n  -ms-flex-positive: 1;\n  flex-grow: 1;\n  visibility: visible !important;\n  background-color: transparent;\n  border-right: 0;\n  border-left: 0;\n  transition: none;\n  -webkit-transform: none;\n  transform: none;\n}\n\n.navbar-expand .offcanvas-top,\n.navbar-expand .offcanvas-bottom {\n  height: auto;\n  border-top: 0;\n  border-bottom: 0;\n}\n\n.navbar-expand .offcanvas-body {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-positive: 0;\n  flex-grow: 0;\n  padding: 0;\n  overflow-y: visible;\n}\n\n.navbar-light .navbar-brand {\n  color: rgba(0, 0, 0, 0.7);\n}\n\n.navbar-light .navbar-brand:hover, .navbar-light .navbar-brand:focus {\n  color: rgba(0, 0, 0, 0.7);\n}\n\n.navbar-light .navbar-nav .nav-link {\n  color: rgba(0, 0, 0, 0.4);\n}\n\n.navbar-light .navbar-nav .nav-link:hover, .navbar-light .navbar-nav .nav-link:focus {\n  color: rgba(0, 0, 0, 0.7);\n}\n\n.navbar-light .navbar-nav .nav-link.disabled {\n  color: rgba(0, 0, 0, 0.3);\n}\n\n.navbar-light .navbar-nav .show > .nav-link,\n.navbar-light .navbar-nav .nav-link.active {\n  color: rgba(0, 0, 0, 0.7);\n}\n\n.navbar-light .navbar-toggler {\n  color: rgba(0, 0, 0, 0.4);\n  border-color: rgba(0, 0, 0, 0.1);\n}\n\n.navbar-light .navbar-toggler-icon {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%280, 0, 0, 0.4%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e\");\n}\n\n.navbar-light .navbar-text {\n  color: rgba(0, 0, 0, 0.4);\n}\n\n.navbar-light .navbar-text a,\n.navbar-light .navbar-text a:hover,\n.navbar-light .navbar-text a:focus {\n  color: rgba(0, 0, 0, 0.7);\n}\n\n.navbar-dark .navbar-brand {\n  color: #fff;\n}\n\n.navbar-dark .navbar-brand:hover, .navbar-dark .navbar-brand:focus {\n  color: #fff;\n}\n\n.navbar-dark .navbar-nav .nav-link {\n  color: rgba(255, 255, 255, 0.55);\n}\n\n.navbar-dark .navbar-nav .nav-link:hover, .navbar-dark .navbar-nav .nav-link:focus {\n  color: rgba(255, 255, 255, 0.75);\n}\n\n.navbar-dark .navbar-nav .nav-link.disabled {\n  color: rgba(255, 255, 255, 0.25);\n}\n\n.navbar-dark .navbar-nav .show > .nav-link,\n.navbar-dark .navbar-nav .nav-link.active {\n  color: #fff;\n}\n\n.navbar-dark .navbar-toggler {\n  color: rgba(255, 255, 255, 0.55);\n  border-color: rgba(255, 255, 255, 0.1);\n}\n\n.navbar-dark .navbar-toggler-icon {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e\");\n}\n\n.navbar-dark .navbar-text {\n  color: rgba(255, 255, 255, 0.55);\n}\n\n.navbar-dark .navbar-text a,\n.navbar-dark .navbar-text a:hover,\n.navbar-dark .navbar-text a:focus {\n  color: #fff;\n}\n\n.card {\n  position: relative;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  min-width: 0;\n  word-wrap: break-word;\n  background-color: rgba(238, 232, 213, 0.125);\n  background-clip: border-box;\n  border: 1px solid rgba(0, 43, 54, 0.95);\n  border-radius: 0.25rem;\n}\n\n.card > hr {\n  margin-right: 0;\n  margin-left: 0;\n}\n\n.card > .list-group {\n  border-top: inherit;\n  border-bottom: inherit;\n}\n\n.card > .list-group:first-child {\n  border-top-width: 0;\n  border-top-left-radius: calc(0.25rem - 1px);\n  border-top-right-radius: calc(0.25rem - 1px);\n}\n\n.card > .list-group:last-child {\n  border-bottom-width: 0;\n  border-bottom-right-radius: calc(0.25rem - 1px);\n  border-bottom-left-radius: calc(0.25rem - 1px);\n}\n\n.card > .card-header + .list-group,\n.card > .list-group + .card-footer {\n  border-top: 0;\n}\n\n.card-body {\n  -ms-flex: 1 1 auto;\n  flex: 1 1 auto;\n  padding: 1rem 1rem;\n}\n\n.card-title {\n  margin-bottom: 0.5rem;\n}\n\n.card-subtitle {\n  margin-top: -0.25rem;\n  margin-bottom: 0;\n}\n\n.card-text:last-child {\n  margin-bottom: 0;\n}\n\n.card-link + .card-link {\n  margin-left: 1rem;\n}\n\n.card-header {\n  padding: 0.5rem 1rem;\n  margin-bottom: 0;\n  background-color: rgba(7, 54, 66, 0.25);\n  border-bottom: 1px solid rgba(0, 43, 54, 0.95);\n}\n\n.card-header:first-child {\n  border-radius: calc(0.25rem - 1px) calc(0.25rem - 1px) 0 0;\n}\n\n.card-footer {\n  padding: 0.5rem 1rem;\n  background-color: rgba(7, 54, 66, 0.25);\n  border-top: 1px solid rgba(0, 43, 54, 0.95);\n}\n\n.card-footer:last-child {\n  border-radius: 0 0 calc(0.25rem - 1px) calc(0.25rem - 1px);\n}\n\n.card-header-tabs {\n  margin-right: -0.5rem;\n  margin-bottom: -0.5rem;\n  margin-left: -0.5rem;\n  border-bottom: 0;\n}\n\n.card-header-tabs .nav-link.active {\n  background-color: rgba(238, 232, 213, 0.125);\n  border-bottom-color: rgba(238, 232, 213, 0.125);\n}\n\n.card-header-pills {\n  margin-right: -0.5rem;\n  margin-left: -0.5rem;\n}\n\n.card-img-overlay {\n  position: absolute;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  padding: 1rem;\n  border-radius: calc(0.25rem - 1px);\n}\n\n.card-img,\n.card-img-top,\n.card-img-bottom {\n  width: 100%;\n}\n\n.card-img,\n.card-img-top {\n  border-top-left-radius: calc(0.25rem - 1px);\n  border-top-right-radius: calc(0.25rem - 1px);\n}\n\n.card-img,\n.card-img-bottom {\n  border-bottom-right-radius: calc(0.25rem - 1px);\n  border-bottom-left-radius: calc(0.25rem - 1px);\n}\n\n.card-group > .card {\n  margin-bottom: 0.75rem;\n}\n\n@media (min-width: 576px) {\n  .card-group {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-flow: row wrap;\n    flex-flow: row wrap;\n  }\n  .card-group > .card {\n    -ms-flex: 1 0 0%;\n    flex: 1 0 0%;\n    margin-bottom: 0;\n  }\n  .card-group > .card + .card {\n    margin-left: 0;\n    border-left: 0;\n  }\n  .card-group > .card:not(:last-child) {\n    border-top-right-radius: 0;\n    border-bottom-right-radius: 0;\n  }\n  .card-group > .card:not(:last-child) .card-img-top,\n  .card-group > .card:not(:last-child) .card-header {\n    border-top-right-radius: 0;\n  }\n  .card-group > .card:not(:last-child) .card-img-bottom,\n  .card-group > .card:not(:last-child) .card-footer {\n    border-bottom-right-radius: 0;\n  }\n  .card-group > .card:not(:first-child) {\n    border-top-left-radius: 0;\n    border-bottom-left-radius: 0;\n  }\n  .card-group > .card:not(:first-child) .card-img-top,\n  .card-group > .card:not(:first-child) .card-header {\n    border-top-left-radius: 0;\n  }\n  .card-group > .card:not(:first-child) .card-img-bottom,\n  .card-group > .card:not(:first-child) .card-footer {\n    border-bottom-left-radius: 0;\n  }\n}\n\n.accordion-button {\n  position: relative;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-align: center;\n  align-items: center;\n  width: 100%;\n  padding: 1rem 1.25rem;\n  font-size: 1rem;\n  color: #839496;\n  text-align: left;\n  background-color: #002b36;\n  border: 0;\n  border-radius: 0;\n  overflow-anchor: none;\n  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, border-radius 0.15s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .accordion-button {\n    transition: none;\n  }\n}\n\n.accordion-button:not(.collapsed) {\n  color: #a37b00;\n  background-color: #e6ebec;\n  box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.125);\n}\n\n.accordion-button:not(.collapsed)::after {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23a37b00'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e\");\n  -webkit-transform: rotate(-180deg);\n  transform: rotate(-180deg);\n}\n\n.accordion-button::after {\n  -ms-flex-negative: 0;\n  flex-shrink: 0;\n  width: 1.25rem;\n  height: 1.25rem;\n  margin-left: auto;\n  content: \"\";\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23839496'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e\");\n  background-repeat: no-repeat;\n  background-size: 1.25rem;\n  transition: -webkit-transform 0.2s ease-in-out;\n  transition: transform 0.2s ease-in-out;\n  transition: transform 0.2s ease-in-out, -webkit-transform 0.2s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .accordion-button::after {\n    transition: none;\n  }\n}\n\n.accordion-button:hover {\n  z-index: 2;\n}\n\n.accordion-button:focus {\n  z-index: 3;\n  border-color: #839ba1;\n  outline: 0;\n  box-shadow: 0 0 0 0.25rem rgba(7, 54, 66, 0.25);\n}\n\n.accordion-header {\n  margin-bottom: 0;\n}\n\n.accordion-item {\n  background-color: #002b36;\n  border: 1px solid rgba(0, 0, 0, 0.125);\n}\n\n.accordion-item:first-of-type {\n  border-top-left-radius: 0.25rem;\n  border-top-right-radius: 0.25rem;\n}\n\n.accordion-item:first-of-type .accordion-button {\n  border-top-left-radius: calc(0.25rem - 1px);\n  border-top-right-radius: calc(0.25rem - 1px);\n}\n\n.accordion-item:not(:first-of-type) {\n  border-top: 0;\n}\n\n.accordion-item:last-of-type {\n  border-bottom-right-radius: 0.25rem;\n  border-bottom-left-radius: 0.25rem;\n}\n\n.accordion-item:last-of-type .accordion-button.collapsed {\n  border-bottom-right-radius: calc(0.25rem - 1px);\n  border-bottom-left-radius: calc(0.25rem - 1px);\n}\n\n.accordion-item:last-of-type .accordion-collapse {\n  border-bottom-right-radius: 0.25rem;\n  border-bottom-left-radius: 0.25rem;\n}\n\n.accordion-body {\n  padding: 1rem 1.25rem;\n}\n\n.accordion-flush .accordion-collapse {\n  border-width: 0;\n}\n\n.accordion-flush .accordion-item {\n  border-right: 0;\n  border-left: 0;\n  border-radius: 0;\n}\n\n.accordion-flush .accordion-item:first-child {\n  border-top: 0;\n}\n\n.accordion-flush .accordion-item:last-child {\n  border-bottom: 0;\n}\n\n.accordion-flush .accordion-item .accordion-button {\n  border-radius: 0;\n}\n\n.breadcrumb {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n  flex-wrap: wrap;\n  padding: 0.375rem 0.75rem;\n  margin-bottom: 1rem;\n  list-style: none;\n  background-color: #073642;\n  border-radius: 0.25rem;\n}\n\n.breadcrumb-item + .breadcrumb-item {\n  padding-left: 0.5rem;\n}\n\n.breadcrumb-item + .breadcrumb-item::before {\n  float: left;\n  padding-right: 0.5rem;\n  color: #839496;\n  content: var(--bs-breadcrumb-divider, \"/\") /* rtl: var(--bs-breadcrumb-divider, \"/\") */;\n}\n\n.breadcrumb-item.active {\n  color: #adb5bd;\n}\n\n.pagination {\n  display: -ms-flexbox;\n  display: flex;\n  padding-left: 0;\n  list-style: none;\n}\n\n.page-link {\n  position: relative;\n  display: block;\n  color: #2aa198;\n  text-decoration: none;\n  background-color: transparent;\n  border: 1px solid #073642;\n  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .page-link {\n    transition: none;\n  }\n}\n\n.page-link:hover {\n  z-index: 2;\n  color: #2aa198;\n  background-color: #073642;\n  border-color: #073642;\n}\n\n.page-link:focus {\n  z-index: 3;\n  color: #2aa198;\n  background-color: #eee8d5;\n  outline: 0;\n  box-shadow: 0 0 0 0.25rem rgba(7, 54, 66, 0.25);\n}\n\n.page-item:not(:first-child) .page-link {\n  margin-left: -1px;\n}\n\n.page-item.active .page-link {\n  z-index: 3;\n  color: rgba(255, 255, 255, 0.75);\n  background-color: #073642;\n  border-color: #073642;\n}\n\n.page-item.disabled .page-link {\n  color: #073642;\n  pointer-events: none;\n  background-color: transparent;\n  border-color: #073642;\n}\n\n.page-link {\n  padding: 0.375rem 0.75rem;\n}\n\n.page-item:first-child .page-link {\n  border-top-left-radius: 0.25rem;\n  border-bottom-left-radius: 0.25rem;\n}\n\n.page-item:last-child .page-link {\n  border-top-right-radius: 0.25rem;\n  border-bottom-right-radius: 0.25rem;\n}\n\n.pagination-lg .page-link {\n  padding: 0.75rem 1.5rem;\n  font-size: 1.25rem;\n}\n\n.pagination-lg .page-item:first-child .page-link {\n  border-top-left-radius: 0.3rem;\n  border-bottom-left-radius: 0.3rem;\n}\n\n.pagination-lg .page-item:last-child .page-link {\n  border-top-right-radius: 0.3rem;\n  border-bottom-right-radius: 0.3rem;\n}\n\n.pagination-sm .page-link {\n  padding: 0.25rem 0.5rem;\n  font-size: 0.875rem;\n}\n\n.pagination-sm .page-item:first-child .page-link {\n  border-top-left-radius: 0.2rem;\n  border-bottom-left-radius: 0.2rem;\n}\n\n.pagination-sm .page-item:last-child .page-link {\n  border-top-right-radius: 0.2rem;\n  border-bottom-right-radius: 0.2rem;\n}\n\n.badge {\n  display: inline-block;\n  padding: 0.35em 0.65em;\n  font-size: 0.75em;\n  font-weight: 700;\n  line-height: 1;\n  color: #fff;\n  text-align: center;\n  white-space: nowrap;\n  vertical-align: baseline;\n  border-radius: 0.25rem;\n}\n\n.badge:empty {\n  display: none;\n}\n\n.btn .badge {\n  position: relative;\n  top: -1px;\n}\n\n.alert {\n  position: relative;\n  padding: 1rem 1rem;\n  margin-bottom: 1rem;\n  border: 1px solid transparent;\n  border-radius: 0.25rem;\n}\n\n.alert-heading {\n  color: inherit;\n}\n\n.alert-link {\n  font-weight: 700;\n}\n\n.alert-dismissible {\n  padding-right: 3rem;\n}\n\n.alert-dismissible .btn-close {\n  position: absolute;\n  top: 0;\n  right: 0;\n  z-index: 2;\n  padding: 1.25rem 1rem;\n}\n\n.alert-primary {\n  color: #6d5200;\n  background-color: #f0e7cc;\n  border-color: #e9dcb3;\n}\n\n.alert-primary .alert-link {\n  color: #574200;\n}\n\n.alert-secondary {\n  color: #4f595a;\n  background-color: #e6eaea;\n  border-color: #dadfe0;\n}\n\n.alert-secondary .alert-link {\n  color: #3f4748;\n}\n\n.alert-success {\n  color: #19615b;\n  background-color: #d4ecea;\n  border-color: #bfe3e0;\n}\n\n.alert-success .alert-link {\n  color: #144e49;\n}\n\n.alert-info {\n  color: #17537e;\n  background-color: #d4e8f6;\n  border-color: #bedcf2;\n}\n\n.alert-info .alert-link {\n  color: #124265;\n}\n\n.alert-warning {\n  color: #7a2d0d;\n  background-color: #f5dbd0;\n  border-color: #efc9b9;\n}\n\n.alert-warning .alert-link {\n  color: #62240a;\n}\n\n.alert-danger {\n  color: #7f204e;\n  background-color: #f6d7e6;\n  border-color: #f2c3da;\n}\n\n.alert-danger .alert-link {\n  color: #661a3e;\n}\n\n.alert-light {\n  color: #989488;\n  background-color: #fffdf9;\n  border-color: #fefcf7;\n}\n\n.alert-light .alert-link {\n  color: #7a766d;\n}\n\n.alert-dark {\n  color: #042028;\n  background-color: #cdd7d9;\n  border-color: #b5c3c6;\n}\n\n.alert-dark .alert-link {\n  color: #031a20;\n}\n\n@-webkit-keyframes progress-bar-stripes {\n  0% {\n    background-position-x: 1rem;\n  }\n}\n\n@keyframes progress-bar-stripes {\n  0% {\n    background-position-x: 1rem;\n  }\n}\n\n.progress {\n  display: -ms-flexbox;\n  display: flex;\n  height: 1rem;\n  overflow: hidden;\n  font-size: 0.75rem;\n  background-color: #073642;\n  border-radius: 0.25rem;\n}\n\n.progress-bar {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  -ms-flex-pack: center;\n  justify-content: center;\n  overflow: hidden;\n  color: #b58900;\n  text-align: center;\n  white-space: nowrap;\n  background-color: #b58900;\n  transition: width 0.6s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .progress-bar {\n    transition: none;\n  }\n}\n\n.progress-bar-striped {\n  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-size: 1rem 1rem;\n}\n\n.progress-bar-animated {\n  -webkit-animation: 1s linear infinite progress-bar-stripes;\n  animation: 1s linear infinite progress-bar-stripes;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .progress-bar-animated {\n    -webkit-animation: none;\n    animation: none;\n  }\n}\n\n.list-group {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  padding-left: 0;\n  margin-bottom: 0;\n  border-radius: 0.25rem;\n}\n\n.list-group-numbered {\n  list-style-type: none;\n  counter-reset: section;\n}\n\n.list-group-numbered > li::before {\n  content: counters(section, \".\") \". \";\n  counter-increment: section;\n}\n\n.list-group-item-action {\n  width: 100%;\n  color: #839496;\n  text-align: inherit;\n}\n\n.list-group-item-action:hover, .list-group-item-action:focus {\n  z-index: 1;\n  color: #fff;\n  text-decoration: none;\n  background-color: #073642;\n}\n\n.list-group-item-action:active {\n  color: #839496;\n  background-color: #eee8d5;\n}\n\n.list-group-item {\n  position: relative;\n  display: block;\n  padding: 0.5rem 1rem;\n  color: #fff;\n  text-decoration: none;\n  background-color: transparent;\n  border: 1px solid #073642;\n}\n\n.list-group-item:first-child {\n  border-top-left-radius: inherit;\n  border-top-right-radius: inherit;\n}\n\n.list-group-item:last-child {\n  border-bottom-right-radius: inherit;\n  border-bottom-left-radius: inherit;\n}\n\n.list-group-item.disabled, .list-group-item:disabled {\n  color: #839496;\n  pointer-events: none;\n  background-color: transparent;\n}\n\n.list-group-item.active {\n  z-index: 2;\n  color: #fff;\n  background-color: #073642;\n  border-color: #073642;\n}\n\n.list-group-item + .list-group-item {\n  border-top-width: 0;\n}\n\n.list-group-item + .list-group-item.active {\n  margin-top: -1px;\n  border-top-width: 1px;\n}\n\n.list-group-horizontal {\n  -ms-flex-direction: row;\n  flex-direction: row;\n}\n\n.list-group-horizontal > .list-group-item:first-child {\n  border-bottom-left-radius: 0.25rem;\n  border-top-right-radius: 0;\n}\n\n.list-group-horizontal > .list-group-item:last-child {\n  border-top-right-radius: 0.25rem;\n  border-bottom-left-radius: 0;\n}\n\n.list-group-horizontal > .list-group-item.active {\n  margin-top: 0;\n}\n\n.list-group-horizontal > .list-group-item + .list-group-item {\n  border-top-width: 1px;\n  border-left-width: 0;\n}\n\n.list-group-horizontal > .list-group-item + .list-group-item.active {\n  margin-left: -1px;\n  border-left-width: 1px;\n}\n\n@media (min-width: 576px) {\n  .list-group-horizontal-sm {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .list-group-horizontal-sm > .list-group-item:first-child {\n    border-bottom-left-radius: 0.25rem;\n    border-top-right-radius: 0;\n  }\n  .list-group-horizontal-sm > .list-group-item:last-child {\n    border-top-right-radius: 0.25rem;\n    border-bottom-left-radius: 0;\n  }\n  .list-group-horizontal-sm > .list-group-item.active {\n    margin-top: 0;\n  }\n  .list-group-horizontal-sm > .list-group-item + .list-group-item {\n    border-top-width: 1px;\n    border-left-width: 0;\n  }\n  .list-group-horizontal-sm > .list-group-item + .list-group-item.active {\n    margin-left: -1px;\n    border-left-width: 1px;\n  }\n}\n\n@media (min-width: 768px) {\n  .list-group-horizontal-md {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .list-group-horizontal-md > .list-group-item:first-child {\n    border-bottom-left-radius: 0.25rem;\n    border-top-right-radius: 0;\n  }\n  .list-group-horizontal-md > .list-group-item:last-child {\n    border-top-right-radius: 0.25rem;\n    border-bottom-left-radius: 0;\n  }\n  .list-group-horizontal-md > .list-group-item.active {\n    margin-top: 0;\n  }\n  .list-group-horizontal-md > .list-group-item + .list-group-item {\n    border-top-width: 1px;\n    border-left-width: 0;\n  }\n  .list-group-horizontal-md > .list-group-item + .list-group-item.active {\n    margin-left: -1px;\n    border-left-width: 1px;\n  }\n}\n\n@media (min-width: 992px) {\n  .list-group-horizontal-lg {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .list-group-horizontal-lg > .list-group-item:first-child {\n    border-bottom-left-radius: 0.25rem;\n    border-top-right-radius: 0;\n  }\n  .list-group-horizontal-lg > .list-group-item:last-child {\n    border-top-right-radius: 0.25rem;\n    border-bottom-left-radius: 0;\n  }\n  .list-group-horizontal-lg > .list-group-item.active {\n    margin-top: 0;\n  }\n  .list-group-horizontal-lg > .list-group-item + .list-group-item {\n    border-top-width: 1px;\n    border-left-width: 0;\n  }\n  .list-group-horizontal-lg > .list-group-item + .list-group-item.active {\n    margin-left: -1px;\n    border-left-width: 1px;\n  }\n}\n\n@media (min-width: 1200px) {\n  .list-group-horizontal-xl {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .list-group-horizontal-xl > .list-group-item:first-child {\n    border-bottom-left-radius: 0.25rem;\n    border-top-right-radius: 0;\n  }\n  .list-group-horizontal-xl > .list-group-item:last-child {\n    border-top-right-radius: 0.25rem;\n    border-bottom-left-radius: 0;\n  }\n  .list-group-horizontal-xl > .list-group-item.active {\n    margin-top: 0;\n  }\n  .list-group-horizontal-xl > .list-group-item + .list-group-item {\n    border-top-width: 1px;\n    border-left-width: 0;\n  }\n  .list-group-horizontal-xl > .list-group-item + .list-group-item.active {\n    margin-left: -1px;\n    border-left-width: 1px;\n  }\n}\n\n@media (min-width: 1400px) {\n  .list-group-horizontal-xxl {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .list-group-horizontal-xxl > .list-group-item:first-child {\n    border-bottom-left-radius: 0.25rem;\n    border-top-right-radius: 0;\n  }\n  .list-group-horizontal-xxl > .list-group-item:last-child {\n    border-top-right-radius: 0.25rem;\n    border-bottom-left-radius: 0;\n  }\n  .list-group-horizontal-xxl > .list-group-item.active {\n    margin-top: 0;\n  }\n  .list-group-horizontal-xxl > .list-group-item + .list-group-item {\n    border-top-width: 1px;\n    border-left-width: 0;\n  }\n  .list-group-horizontal-xxl > .list-group-item + .list-group-item.active {\n    margin-left: -1px;\n    border-left-width: 1px;\n  }\n}\n\n.list-group-flush {\n  border-radius: 0;\n}\n\n.list-group-flush > .list-group-item {\n  border-width: 0 0 1px;\n}\n\n.list-group-flush > .list-group-item:last-child {\n  border-bottom-width: 0;\n}\n\n.list-group-item-primary {\n  color: #6d5200;\n  background-color: #f0e7cc;\n}\n\n.list-group-item-primary.list-group-item-action:hover, .list-group-item-primary.list-group-item-action:focus {\n  color: #6d5200;\n  background-color: #d8d0b8;\n}\n\n.list-group-item-primary.list-group-item-action.active {\n  color: #fff;\n  background-color: #6d5200;\n  border-color: #6d5200;\n}\n\n.list-group-item-secondary {\n  color: #4f595a;\n  background-color: #e6eaea;\n}\n\n.list-group-item-secondary.list-group-item-action:hover, .list-group-item-secondary.list-group-item-action:focus {\n  color: #4f595a;\n  background-color: #cfd3d3;\n}\n\n.list-group-item-secondary.list-group-item-action.active {\n  color: #fff;\n  background-color: #4f595a;\n  border-color: #4f595a;\n}\n\n.list-group-item-success {\n  color: #19615b;\n  background-color: #d4ecea;\n}\n\n.list-group-item-success.list-group-item-action:hover, .list-group-item-success.list-group-item-action:focus {\n  color: #19615b;\n  background-color: #bfd4d3;\n}\n\n.list-group-item-success.list-group-item-action.active {\n  color: #fff;\n  background-color: #19615b;\n  border-color: #19615b;\n}\n\n.list-group-item-info {\n  color: #17537e;\n  background-color: #d4e8f6;\n}\n\n.list-group-item-info.list-group-item-action:hover, .list-group-item-info.list-group-item-action:focus {\n  color: #17537e;\n  background-color: #bfd1dd;\n}\n\n.list-group-item-info.list-group-item-action.active {\n  color: #fff;\n  background-color: #17537e;\n  border-color: #17537e;\n}\n\n.list-group-item-warning {\n  color: #7a2d0d;\n  background-color: #f5dbd0;\n}\n\n.list-group-item-warning.list-group-item-action:hover, .list-group-item-warning.list-group-item-action:focus {\n  color: #7a2d0d;\n  background-color: #ddc5bb;\n}\n\n.list-group-item-warning.list-group-item-action.active {\n  color: #fff;\n  background-color: #7a2d0d;\n  border-color: #7a2d0d;\n}\n\n.list-group-item-danger {\n  color: #7f204e;\n  background-color: #f6d7e6;\n}\n\n.list-group-item-danger.list-group-item-action:hover, .list-group-item-danger.list-group-item-action:focus {\n  color: #7f204e;\n  background-color: #ddc2cf;\n}\n\n.list-group-item-danger.list-group-item-action.active {\n  color: #fff;\n  background-color: #7f204e;\n  border-color: #7f204e;\n}\n\n.list-group-item-light {\n  color: #989488;\n  background-color: #fffdf9;\n}\n\n.list-group-item-light.list-group-item-action:hover, .list-group-item-light.list-group-item-action:focus {\n  color: #989488;\n  background-color: #e6e4e0;\n}\n\n.list-group-item-light.list-group-item-action.active {\n  color: #fff;\n  background-color: #989488;\n  border-color: #989488;\n}\n\n.list-group-item-dark {\n  color: #042028;\n  background-color: #cdd7d9;\n}\n\n.list-group-item-dark.list-group-item-action:hover, .list-group-item-dark.list-group-item-action:focus {\n  color: #042028;\n  background-color: #b9c2c3;\n}\n\n.list-group-item-dark.list-group-item-action.active {\n  color: #fff;\n  background-color: #042028;\n  border-color: #042028;\n}\n\n.btn-close {\n  box-sizing: content-box;\n  width: 1em;\n  height: 1em;\n  padding: 0.25em 0.25em;\n  color: #fff;\n  background: transparent url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M.293.293a1 1 0 011.414 0L8 6.586 14.293.293a1 1 0 111.414 1.414L9.414 8l6.293 6.293a1 1 0 01-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 01-1.414-1.414L6.586 8 .293 1.707a1 1 0 010-1.414z'/%3e%3c/svg%3e\") center/1em auto no-repeat;\n  border: 0;\n  border-radius: 0.25rem;\n  opacity: 0.5;\n}\n\n.btn-close:hover {\n  color: #fff;\n  text-decoration: none;\n  opacity: 0.75;\n}\n\n.btn-close:focus {\n  outline: 0;\n  box-shadow: 0 0 0 0.25rem rgba(7, 54, 66, 0.25);\n  opacity: 1;\n}\n\n.btn-close:disabled, .btn-close.disabled {\n  pointer-events: none;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  user-select: none;\n  opacity: 0.25;\n}\n\n.btn-close-white {\n  -webkit-filter: invert(1) grayscale(100%) brightness(200%);\n  filter: invert(1) grayscale(100%) brightness(200%);\n}\n\n.toast {\n  width: 350px;\n  max-width: 100%;\n  font-size: 0.875rem;\n  pointer-events: auto;\n  background-color: #003f50;\n  background-clip: padding-box;\n  border: 1px solid rgba(0, 0, 0, 0.2);\n  box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15);\n  border-radius: 0.25rem;\n}\n\n.toast.showing {\n  opacity: 0;\n}\n\n.toast:not(.show) {\n  display: none;\n}\n\n.toast-container {\n  width: -webkit-max-content;\n  width: -moz-max-content;\n  width: max-content;\n  max-width: 100%;\n  pointer-events: none;\n}\n\n.toast-container > :not(:last-child) {\n  margin-bottom: 0.75rem;\n}\n\n.toast-header {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-align: center;\n  align-items: center;\n  padding: 0.5rem 0.75rem;\n  color: #839496;\n  background-color: #003f50;\n  background-clip: padding-box;\n  border-bottom: 1px solid rgba(0, 0, 0, 0.2);\n  border-top-left-radius: calc(0.25rem - 1px);\n  border-top-right-radius: calc(0.25rem - 1px);\n}\n\n.toast-header .btn-close {\n  margin-right: -0.375rem;\n  margin-left: 0.75rem;\n}\n\n.toast-body {\n  padding: 0.75rem;\n  word-wrap: break-word;\n}\n\n.modal {\n  position: fixed;\n  top: 0;\n  left: 0;\n  z-index: 1055;\n  display: none;\n  width: 100%;\n  height: 100%;\n  overflow-x: hidden;\n  overflow-y: auto;\n  outline: 0;\n}\n\n.modal-dialog {\n  position: relative;\n  width: auto;\n  margin: 0.5rem;\n  pointer-events: none;\n}\n\n.modal.fade .modal-dialog {\n  transition: -webkit-transform 0.3s ease-out;\n  transition: transform 0.3s ease-out;\n  transition: transform 0.3s ease-out, -webkit-transform 0.3s ease-out;\n  -webkit-transform: translate(0, -50px);\n  transform: translate(0, -50px);\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .modal.fade .modal-dialog {\n    transition: none;\n  }\n}\n\n.modal.show .modal-dialog {\n  -webkit-transform: none;\n  transform: none;\n}\n\n.modal.modal-static .modal-dialog {\n  -webkit-transform: scale(1.02);\n  transform: scale(1.02);\n}\n\n.modal-dialog-scrollable {\n  height: calc(100% - 1rem);\n}\n\n.modal-dialog-scrollable .modal-content {\n  max-height: 100%;\n  overflow: hidden;\n}\n\n.modal-dialog-scrollable .modal-body {\n  overflow-y: auto;\n}\n\n.modal-dialog-centered {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-align: center;\n  align-items: center;\n  min-height: calc(100% - 1rem);\n}\n\n.modal-content {\n  position: relative;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  width: 100%;\n  pointer-events: auto;\n  background-color: #073642;\n  background-clip: padding-box;\n  border: 1px solid #002b36;\n  border-radius: 0.3rem;\n  outline: 0;\n}\n\n.modal-backdrop {\n  position: fixed;\n  top: 0;\n  left: 0;\n  z-index: 1050;\n  width: 100vw;\n  height: 100vh;\n  background-color: #000;\n}\n\n.modal-backdrop.fade {\n  opacity: 0;\n}\n\n.modal-backdrop.show {\n  opacity: 0.5;\n}\n\n.modal-header {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-negative: 0;\n  flex-shrink: 0;\n  -ms-flex-align: center;\n  align-items: center;\n  -ms-flex-pack: justify;\n  justify-content: space-between;\n  padding: 1rem 1rem;\n  border-bottom: 1px solid #002b36;\n  border-top-left-radius: calc(0.3rem - 1px);\n  border-top-right-radius: calc(0.3rem - 1px);\n}\n\n.modal-header .btn-close {\n  padding: 0.5rem 0.5rem;\n  margin: -0.5rem -0.5rem -0.5rem auto;\n}\n\n.modal-title {\n  margin-bottom: 0;\n  line-height: 1.5;\n}\n\n.modal-body {\n  position: relative;\n  -ms-flex: 1 1 auto;\n  flex: 1 1 auto;\n  padding: 1rem;\n}\n\n.modal-footer {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n  flex-wrap: wrap;\n  -ms-flex-negative: 0;\n  flex-shrink: 0;\n  -ms-flex-align: center;\n  align-items: center;\n  -ms-flex-pack: end;\n  justify-content: flex-end;\n  padding: 0.75rem;\n  border-top: 1px solid #002b36;\n  border-bottom-right-radius: calc(0.3rem - 1px);\n  border-bottom-left-radius: calc(0.3rem - 1px);\n}\n\n.modal-footer > * {\n  margin: 0.25rem;\n}\n\n@media (min-width: 576px) {\n  .modal-dialog {\n    max-width: 500px;\n    margin: 1.75rem auto;\n  }\n  .modal-dialog-scrollable {\n    height: calc(100% - 3.5rem);\n  }\n  .modal-dialog-centered {\n    min-height: calc(100% - 3.5rem);\n  }\n  .modal-sm {\n    max-width: 300px;\n  }\n}\n\n@media (min-width: 992px) {\n  .modal-lg,\n  .modal-xl {\n    max-width: 800px;\n  }\n}\n\n@media (min-width: 1200px) {\n  .modal-xl {\n    max-width: 1140px;\n  }\n}\n\n.modal-fullscreen {\n  width: 100vw;\n  max-width: none;\n  height: 100%;\n  margin: 0;\n}\n\n.modal-fullscreen .modal-content {\n  height: 100%;\n  border: 0;\n  border-radius: 0;\n}\n\n.modal-fullscreen .modal-header {\n  border-radius: 0;\n}\n\n.modal-fullscreen .modal-body {\n  overflow-y: auto;\n}\n\n.modal-fullscreen .modal-footer {\n  border-radius: 0;\n}\n\n@media (max-width: 575.98px) {\n  .modal-fullscreen-sm-down {\n    width: 100vw;\n    max-width: none;\n    height: 100%;\n    margin: 0;\n  }\n  .modal-fullscreen-sm-down .modal-content {\n    height: 100%;\n    border: 0;\n    border-radius: 0;\n  }\n  .modal-fullscreen-sm-down .modal-header {\n    border-radius: 0;\n  }\n  .modal-fullscreen-sm-down .modal-body {\n    overflow-y: auto;\n  }\n  .modal-fullscreen-sm-down .modal-footer {\n    border-radius: 0;\n  }\n}\n\n@media (max-width: 767.98px) {\n  .modal-fullscreen-md-down {\n    width: 100vw;\n    max-width: none;\n    height: 100%;\n    margin: 0;\n  }\n  .modal-fullscreen-md-down .modal-content {\n    height: 100%;\n    border: 0;\n    border-radius: 0;\n  }\n  .modal-fullscreen-md-down .modal-header {\n    border-radius: 0;\n  }\n  .modal-fullscreen-md-down .modal-body {\n    overflow-y: auto;\n  }\n  .modal-fullscreen-md-down .modal-footer {\n    border-radius: 0;\n  }\n}\n\n@media (max-width: 991.98px) {\n  .modal-fullscreen-lg-down {\n    width: 100vw;\n    max-width: none;\n    height: 100%;\n    margin: 0;\n  }\n  .modal-fullscreen-lg-down .modal-content {\n    height: 100%;\n    border: 0;\n    border-radius: 0;\n  }\n  .modal-fullscreen-lg-down .modal-header {\n    border-radius: 0;\n  }\n  .modal-fullscreen-lg-down .modal-body {\n    overflow-y: auto;\n  }\n  .modal-fullscreen-lg-down .modal-footer {\n    border-radius: 0;\n  }\n}\n\n@media (max-width: 1199.98px) {\n  .modal-fullscreen-xl-down {\n    width: 100vw;\n    max-width: none;\n    height: 100%;\n    margin: 0;\n  }\n  .modal-fullscreen-xl-down .modal-content {\n    height: 100%;\n    border: 0;\n    border-radius: 0;\n  }\n  .modal-fullscreen-xl-down .modal-header {\n    border-radius: 0;\n  }\n  .modal-fullscreen-xl-down .modal-body {\n    overflow-y: auto;\n  }\n  .modal-fullscreen-xl-down .modal-footer {\n    border-radius: 0;\n  }\n}\n\n@media (max-width: 1399.98px) {\n  .modal-fullscreen-xxl-down {\n    width: 100vw;\n    max-width: none;\n    height: 100%;\n    margin: 0;\n  }\n  .modal-fullscreen-xxl-down .modal-content {\n    height: 100%;\n    border: 0;\n    border-radius: 0;\n  }\n  .modal-fullscreen-xxl-down .modal-header {\n    border-radius: 0;\n  }\n  .modal-fullscreen-xxl-down .modal-body {\n    overflow-y: auto;\n  }\n  .modal-fullscreen-xxl-down .modal-footer {\n    border-radius: 0;\n  }\n}\n\n.tooltip {\n  position: absolute;\n  z-index: 1080;\n  display: block;\n  margin: 0;\n  font-family: var(--bs-font-sans-serif);\n  font-style: normal;\n  font-weight: 400;\n  line-height: 1.5;\n  text-align: left;\n  text-align: start;\n  text-decoration: none;\n  text-shadow: none;\n  text-transform: none;\n  letter-spacing: normal;\n  word-break: normal;\n  word-spacing: normal;\n  white-space: normal;\n  line-break: auto;\n  font-size: 0.875rem;\n  word-wrap: break-word;\n  opacity: 0;\n}\n\n.tooltip.show {\n  opacity: 0.9;\n}\n\n.tooltip .tooltip-arrow {\n  position: absolute;\n  display: block;\n  width: 0.8rem;\n  height: 0.4rem;\n}\n\n.tooltip .tooltip-arrow::before {\n  position: absolute;\n  content: \"\";\n  border-color: transparent;\n  border-style: solid;\n}\n\n.bs-tooltip-top, .bs-tooltip-auto[data-popper-placement^=\"top\"] {\n  padding: 0.4rem 0;\n}\n\n.bs-tooltip-top .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=\"top\"] .tooltip-arrow {\n  bottom: 0;\n}\n\n.bs-tooltip-top .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=\"top\"] .tooltip-arrow::before {\n  top: -1px;\n  border-width: 0.4rem 0.4rem 0;\n  border-top-color: #000;\n}\n\n.bs-tooltip-end, .bs-tooltip-auto[data-popper-placement^=\"right\"] {\n  padding: 0 0.4rem;\n}\n\n.bs-tooltip-end .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=\"right\"] .tooltip-arrow {\n  left: 0;\n  width: 0.4rem;\n  height: 0.8rem;\n}\n\n.bs-tooltip-end .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=\"right\"] .tooltip-arrow::before {\n  right: -1px;\n  border-width: 0.4rem 0.4rem 0.4rem 0;\n  border-right-color: #000;\n}\n\n.bs-tooltip-bottom, .bs-tooltip-auto[data-popper-placement^=\"bottom\"] {\n  padding: 0.4rem 0;\n}\n\n.bs-tooltip-bottom .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=\"bottom\"] .tooltip-arrow {\n  top: 0;\n}\n\n.bs-tooltip-bottom .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=\"bottom\"] .tooltip-arrow::before {\n  bottom: -1px;\n  border-width: 0 0.4rem 0.4rem;\n  border-bottom-color: #000;\n}\n\n.bs-tooltip-start, .bs-tooltip-auto[data-popper-placement^=\"left\"] {\n  padding: 0 0.4rem;\n}\n\n.bs-tooltip-start .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=\"left\"] .tooltip-arrow {\n  right: 0;\n  width: 0.4rem;\n  height: 0.8rem;\n}\n\n.bs-tooltip-start .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=\"left\"] .tooltip-arrow::before {\n  left: -1px;\n  border-width: 0.4rem 0 0.4rem 0.4rem;\n  border-left-color: #000;\n}\n\n.tooltip-inner {\n  max-width: 200px;\n  padding: 0.25rem 0.5rem;\n  color: #fff;\n  text-align: center;\n  background-color: #000;\n  border-radius: 0.25rem;\n}\n\n.popover {\n  position: absolute;\n  top: 0;\n  left: 0 /* rtl:ignore */;\n  z-index: 1070;\n  display: block;\n  max-width: 276px;\n  font-family: var(--bs-font-sans-serif);\n  font-style: normal;\n  font-weight: 400;\n  line-height: 1.5;\n  text-align: left;\n  text-align: start;\n  text-decoration: none;\n  text-shadow: none;\n  text-transform: none;\n  letter-spacing: normal;\n  word-break: normal;\n  word-spacing: normal;\n  white-space: normal;\n  line-break: auto;\n  font-size: 0.875rem;\n  word-wrap: break-word;\n  background-color: #073642;\n  background-clip: padding-box;\n  border: 1px solid #002b36;\n  border-radius: 0.3rem;\n}\n\n.popover .popover-arrow {\n  position: absolute;\n  display: block;\n  width: 1rem;\n  height: 0.5rem;\n}\n\n.popover .popover-arrow::before, .popover .popover-arrow::after {\n  position: absolute;\n  display: block;\n  content: \"\";\n  border-color: transparent;\n  border-style: solid;\n}\n\n.bs-popover-top > .popover-arrow, .bs-popover-auto[data-popper-placement^=\"top\"] > .popover-arrow {\n  bottom: calc(-0.5rem - 1px);\n}\n\n.bs-popover-top > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=\"top\"] > .popover-arrow::before {\n  bottom: 0;\n  border-width: 0.5rem 0.5rem 0;\n  border-top-color: #002b36;\n}\n\n.bs-popover-top > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=\"top\"] > .popover-arrow::after {\n  bottom: 1px;\n  border-width: 0.5rem 0.5rem 0;\n  border-top-color: #073642;\n}\n\n.bs-popover-end > .popover-arrow, .bs-popover-auto[data-popper-placement^=\"right\"] > .popover-arrow {\n  left: calc(-0.5rem - 1px);\n  width: 0.5rem;\n  height: 1rem;\n}\n\n.bs-popover-end > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=\"right\"] > .popover-arrow::before {\n  left: 0;\n  border-width: 0.5rem 0.5rem 0.5rem 0;\n  border-right-color: #002b36;\n}\n\n.bs-popover-end > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=\"right\"] > .popover-arrow::after {\n  left: 1px;\n  border-width: 0.5rem 0.5rem 0.5rem 0;\n  border-right-color: #073642;\n}\n\n.bs-popover-bottom > .popover-arrow, .bs-popover-auto[data-popper-placement^=\"bottom\"] > .popover-arrow {\n  top: calc(-0.5rem - 1px);\n}\n\n.bs-popover-bottom > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=\"bottom\"] > .popover-arrow::before {\n  top: 0;\n  border-width: 0 0.5rem 0.5rem 0.5rem;\n  border-bottom-color: #002b36;\n}\n\n.bs-popover-bottom > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=\"bottom\"] > .popover-arrow::after {\n  top: 1px;\n  border-width: 0 0.5rem 0.5rem 0.5rem;\n  border-bottom-color: #073642;\n}\n\n.bs-popover-bottom .popover-header::before, .bs-popover-auto[data-popper-placement^=\"bottom\"] .popover-header::before {\n  position: absolute;\n  top: 0;\n  left: 50%;\n  display: block;\n  width: 1rem;\n  margin-left: -0.5rem;\n  content: \"\";\n  border-bottom: 1px solid #073642;\n}\n\n.bs-popover-start > .popover-arrow, .bs-popover-auto[data-popper-placement^=\"left\"] > .popover-arrow {\n  right: calc(-0.5rem - 1px);\n  width: 0.5rem;\n  height: 1rem;\n}\n\n.bs-popover-start > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=\"left\"] > .popover-arrow::before {\n  right: 0;\n  border-width: 0.5rem 0 0.5rem 0.5rem;\n  border-left-color: #002b36;\n}\n\n.bs-popover-start > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=\"left\"] > .popover-arrow::after {\n  right: 1px;\n  border-width: 0.5rem 0 0.5rem 0.5rem;\n  border-left-color: #073642;\n}\n\n.popover-header {\n  padding: 0.5rem 1rem;\n  margin-bottom: 0;\n  font-size: 1rem;\n  background-color: #073642;\n  border-bottom: 1px solid #002b36;\n  border-top-left-radius: calc(0.3rem - 1px);\n  border-top-right-radius: calc(0.3rem - 1px);\n}\n\n.popover-header:empty {\n  display: none;\n}\n\n.popover-body {\n  padding: 1rem 1rem;\n  color: #839496;\n}\n\n.carousel {\n  position: relative;\n}\n\n.carousel.pointer-event {\n  -ms-touch-action: pan-y;\n  touch-action: pan-y;\n}\n\n.carousel-inner {\n  position: relative;\n  width: 100%;\n  overflow: hidden;\n}\n\n.carousel-inner::after {\n  display: block;\n  clear: both;\n  content: \"\";\n}\n\n.carousel-item {\n  position: relative;\n  display: none;\n  float: left;\n  width: 100%;\n  margin-right: -100%;\n  -webkit-backface-visibility: hidden;\n  backface-visibility: hidden;\n  transition: -webkit-transform 0.6s ease-in-out;\n  transition: transform 0.6s ease-in-out;\n  transition: transform 0.6s ease-in-out, -webkit-transform 0.6s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .carousel-item {\n    transition: none;\n  }\n}\n\n.carousel-item.active,\n.carousel-item-next,\n.carousel-item-prev {\n  display: block;\n}\n\n/* rtl:begin:ignore */\n.carousel-item-next:not(.carousel-item-start),\n.active.carousel-item-end {\n  -webkit-transform: translateX(100%);\n  transform: translateX(100%);\n}\n\n.carousel-item-prev:not(.carousel-item-end),\n.active.carousel-item-start {\n  -webkit-transform: translateX(-100%);\n  transform: translateX(-100%);\n}\n\n/* rtl:end:ignore */\n.carousel-fade .carousel-item {\n  opacity: 0;\n  transition-property: opacity;\n  -webkit-transform: none;\n  transform: none;\n}\n\n.carousel-fade .carousel-item.active,\n.carousel-fade .carousel-item-next.carousel-item-start,\n.carousel-fade .carousel-item-prev.carousel-item-end {\n  z-index: 1;\n  opacity: 1;\n}\n\n.carousel-fade .active.carousel-item-start,\n.carousel-fade .active.carousel-item-end {\n  z-index: 0;\n  opacity: 0;\n  transition: opacity 0s 0.6s;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .carousel-fade .active.carousel-item-start,\n  .carousel-fade .active.carousel-item-end {\n    transition: none;\n  }\n}\n\n.carousel-control-prev,\n.carousel-control-next {\n  position: absolute;\n  top: 0;\n  bottom: 0;\n  z-index: 1;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-align: center;\n  align-items: center;\n  -ms-flex-pack: center;\n  justify-content: center;\n  width: 15%;\n  padding: 0;\n  color: #fff;\n  text-align: center;\n  background: none;\n  border: 0;\n  opacity: 0.5;\n  transition: opacity 0.15s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .carousel-control-prev,\n  .carousel-control-next {\n    transition: none;\n  }\n}\n\n.carousel-control-prev:hover, .carousel-control-prev:focus,\n.carousel-control-next:hover,\n.carousel-control-next:focus {\n  color: #fff;\n  text-decoration: none;\n  outline: 0;\n  opacity: 0.9;\n}\n\n.carousel-control-prev {\n  left: 0;\n}\n\n.carousel-control-next {\n  right: 0;\n}\n\n.carousel-control-prev-icon,\n.carousel-control-next-icon {\n  display: inline-block;\n  width: 2rem;\n  height: 2rem;\n  background-repeat: no-repeat;\n  background-position: 50%;\n  background-size: 100% 100%;\n}\n\n/* rtl:options: {\n  \"autoRename\": true,\n  \"stringMap\":[ {\n    \"name\"    : \"prev-next\",\n    \"search\"  : \"prev\",\n    \"replace\" : \"next\"\n  } ]\n} */\n.carousel-control-prev-icon {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0z'/%3e%3c/svg%3e\");\n}\n\n.carousel-control-next-icon {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e\");\n}\n\n.carousel-indicators {\n  position: absolute;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 2;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-pack: center;\n  justify-content: center;\n  padding: 0;\n  margin-right: 15%;\n  margin-bottom: 1rem;\n  margin-left: 15%;\n  list-style: none;\n}\n\n.carousel-indicators [data-bs-target] {\n  box-sizing: content-box;\n  -ms-flex: 0 1 auto;\n  flex: 0 1 auto;\n  width: 30px;\n  height: 3px;\n  padding: 0;\n  margin-right: 3px;\n  margin-left: 3px;\n  text-indent: -999px;\n  cursor: pointer;\n  background-color: #fff;\n  background-clip: padding-box;\n  border: 0;\n  border-top: 10px solid transparent;\n  border-bottom: 10px solid transparent;\n  opacity: 0.5;\n  transition: opacity 0.6s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .carousel-indicators [data-bs-target] {\n    transition: none;\n  }\n}\n\n.carousel-indicators .active {\n  opacity: 1;\n}\n\n.carousel-caption {\n  position: absolute;\n  right: 15%;\n  bottom: 1.25rem;\n  left: 15%;\n  padding-top: 1.25rem;\n  padding-bottom: 1.25rem;\n  color: #fff;\n  text-align: center;\n}\n\n.carousel-dark .carousel-control-prev-icon,\n.carousel-dark .carousel-control-next-icon {\n  -webkit-filter: invert(1) grayscale(100);\n  filter: invert(1) grayscale(100);\n}\n\n.carousel-dark .carousel-indicators [data-bs-target] {\n  background-color: #000;\n}\n\n.carousel-dark .carousel-caption {\n  color: #000;\n}\n\n@-webkit-keyframes spinner-border {\n  to {\n    -webkit-transform: rotate(360deg) /* rtl:ignore */;\n    transform: rotate(360deg) /* rtl:ignore */;\n  }\n}\n\n@keyframes spinner-border {\n  to {\n    -webkit-transform: rotate(360deg) /* rtl:ignore */;\n    transform: rotate(360deg) /* rtl:ignore */;\n  }\n}\n\n.spinner-border {\n  display: inline-block;\n  width: 2rem;\n  height: 2rem;\n  vertical-align: -0.125em;\n  border: 0.25em solid currentColor;\n  border-right-color: transparent;\n  border-radius: 50%;\n  -webkit-animation: 0.75s linear infinite spinner-border;\n  animation: 0.75s linear infinite spinner-border;\n}\n\n.spinner-border-sm {\n  width: 1rem;\n  height: 1rem;\n  border-width: 0.2em;\n}\n\n@-webkit-keyframes spinner-grow {\n  0% {\n    -webkit-transform: scale(0);\n    transform: scale(0);\n  }\n  50% {\n    opacity: 1;\n    -webkit-transform: none;\n    transform: none;\n  }\n}\n\n@keyframes spinner-grow {\n  0% {\n    -webkit-transform: scale(0);\n    transform: scale(0);\n  }\n  50% {\n    opacity: 1;\n    -webkit-transform: none;\n    transform: none;\n  }\n}\n\n.spinner-grow {\n  display: inline-block;\n  width: 2rem;\n  height: 2rem;\n  vertical-align: -0.125em;\n  background-color: currentColor;\n  border-radius: 50%;\n  opacity: 0;\n  -webkit-animation: 0.75s linear infinite spinner-grow;\n  animation: 0.75s linear infinite spinner-grow;\n}\n\n.spinner-grow-sm {\n  width: 1rem;\n  height: 1rem;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .spinner-border,\n  .spinner-grow {\n    -webkit-animation-duration: 1.5s;\n    animation-duration: 1.5s;\n  }\n}\n\n.offcanvas {\n  position: fixed;\n  bottom: 0;\n  z-index: 1045;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  max-width: 100%;\n  visibility: hidden;\n  background-color: #073642;\n  background-clip: padding-box;\n  outline: 0;\n  transition: -webkit-transform 0.3s ease-in-out;\n  transition: transform 0.3s ease-in-out;\n  transition: transform 0.3s ease-in-out, -webkit-transform 0.3s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .offcanvas {\n    transition: none;\n  }\n}\n\n.offcanvas-backdrop {\n  position: fixed;\n  top: 0;\n  left: 0;\n  z-index: 1040;\n  width: 100vw;\n  height: 100vh;\n  background-color: #000;\n}\n\n.offcanvas-backdrop.fade {\n  opacity: 0;\n}\n\n.offcanvas-backdrop.show {\n  opacity: 0.5;\n}\n\n.offcanvas-header {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-align: center;\n  align-items: center;\n  -ms-flex-pack: justify;\n  justify-content: space-between;\n  padding: 1rem 1rem;\n}\n\n.offcanvas-header .btn-close {\n  padding: 0.5rem 0.5rem;\n  margin-top: -0.5rem;\n  margin-right: -0.5rem;\n  margin-bottom: -0.5rem;\n}\n\n.offcanvas-title {\n  margin-bottom: 0;\n  line-height: 1.5;\n}\n\n.offcanvas-body {\n  -ms-flex-positive: 1;\n  flex-grow: 1;\n  padding: 1rem 1rem;\n  overflow-y: auto;\n}\n\n.offcanvas-start {\n  top: 0;\n  left: 0;\n  width: 400px;\n  border-right: 1px solid #002b36;\n  -webkit-transform: translateX(-100%);\n  transform: translateX(-100%);\n}\n\n.offcanvas-end {\n  top: 0;\n  right: 0;\n  width: 400px;\n  border-left: 1px solid #002b36;\n  -webkit-transform: translateX(100%);\n  transform: translateX(100%);\n}\n\n.offcanvas-top {\n  top: 0;\n  right: 0;\n  left: 0;\n  height: 30vh;\n  max-height: 100%;\n  border-bottom: 1px solid #002b36;\n  -webkit-transform: translateY(-100%);\n  transform: translateY(-100%);\n}\n\n.offcanvas-bottom {\n  right: 0;\n  left: 0;\n  height: 30vh;\n  max-height: 100%;\n  border-top: 1px solid #002b36;\n  -webkit-transform: translateY(100%);\n  transform: translateY(100%);\n}\n\n.offcanvas.show {\n  -webkit-transform: none;\n  transform: none;\n}\n\n.placeholder {\n  display: inline-block;\n  min-height: 1em;\n  vertical-align: middle;\n  cursor: wait;\n  background-color: currentColor;\n  opacity: 0.5;\n}\n\n.placeholder.btn::before {\n  display: inline-block;\n  content: \"\";\n}\n\n.placeholder-xs {\n  min-height: .6em;\n}\n\n.placeholder-sm {\n  min-height: .8em;\n}\n\n.placeholder-lg {\n  min-height: 1.2em;\n}\n\n.placeholder-glow .placeholder {\n  -webkit-animation: placeholder-glow 2s ease-in-out infinite;\n  animation: placeholder-glow 2s ease-in-out infinite;\n}\n\n@-webkit-keyframes placeholder-glow {\n  50% {\n    opacity: 0.2;\n  }\n}\n\n@keyframes placeholder-glow {\n  50% {\n    opacity: 0.2;\n  }\n}\n\n.placeholder-wave {\n  -webkit-mask-image: linear-gradient(130deg, #000 55%, rgba(0, 0, 0, 0.8) 75%, #000 95%);\n  mask-image: linear-gradient(130deg, #000 55%, rgba(0, 0, 0, 0.8) 75%, #000 95%);\n  -webkit-mask-size: 200% 100%;\n  mask-size: 200% 100%;\n  -webkit-animation: placeholder-wave 2s linear infinite;\n  animation: placeholder-wave 2s linear infinite;\n}\n\n@-webkit-keyframes placeholder-wave {\n  100% {\n    -webkit-mask-position: -200% 0%;\n    mask-position: -200% 0%;\n  }\n}\n\n@keyframes placeholder-wave {\n  100% {\n    -webkit-mask-position: -200% 0%;\n    mask-position: -200% 0%;\n  }\n}\n\n.clearfix::after {\n  display: block;\n  clear: both;\n  content: \"\";\n}\n\n.link-primary {\n  color: #b58900;\n}\n\n.link-primary:hover, .link-primary:focus {\n  color: #916e00;\n}\n\n.link-secondary {\n  color: #839496;\n}\n\n.link-secondary:hover, .link-secondary:focus {\n  color: #697678;\n}\n\n.link-success {\n  color: #2aa198;\n}\n\n.link-success:hover, .link-success:focus {\n  color: #22817a;\n}\n\n.link-info {\n  color: #268bd2;\n}\n\n.link-info:hover, .link-info:focus {\n  color: #1e6fa8;\n}\n\n.link-warning {\n  color: #cb4b16;\n}\n\n.link-warning:hover, .link-warning:focus {\n  color: #a23c12;\n}\n\n.link-danger {\n  color: #d33682;\n}\n\n.link-danger:hover, .link-danger:focus {\n  color: #a92b68;\n}\n\n.link-light {\n  color: #fdf6e3;\n}\n\n.link-light:hover, .link-light:focus {\n  color: #fdf8e9;\n}\n\n.link-dark {\n  color: #073642;\n}\n\n.link-dark:hover, .link-dark:focus {\n  color: #062b35;\n}\n\n.ratio {\n  position: relative;\n  width: 100%;\n}\n\n.ratio::before {\n  display: block;\n  padding-top: var(--bs-aspect-ratio);\n  content: \"\";\n}\n\n.ratio > * {\n  position: absolute;\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n}\n\n.ratio-1x1 {\n  --bs-aspect-ratio: 100%;\n}\n\n.ratio-4x3 {\n  --bs-aspect-ratio: calc(3 / 4 * 100%);\n}\n\n.ratio-16x9 {\n  --bs-aspect-ratio: calc(9 / 16 * 100%);\n}\n\n.ratio-21x9 {\n  --bs-aspect-ratio: calc(9 / 21 * 100%);\n}\n\n.fixed-top {\n  position: fixed;\n  top: 0;\n  right: 0;\n  left: 0;\n  z-index: 1030;\n}\n\n.fixed-bottom {\n  position: fixed;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 1030;\n}\n\n.sticky-top {\n  position: -webkit-sticky;\n  position: sticky;\n  top: 0;\n  z-index: 1020;\n}\n\n@media (min-width: 576px) {\n  .sticky-sm-top {\n    position: -webkit-sticky;\n    position: sticky;\n    top: 0;\n    z-index: 1020;\n  }\n}\n\n@media (min-width: 768px) {\n  .sticky-md-top {\n    position: -webkit-sticky;\n    position: sticky;\n    top: 0;\n    z-index: 1020;\n  }\n}\n\n@media (min-width: 992px) {\n  .sticky-lg-top {\n    position: -webkit-sticky;\n    position: sticky;\n    top: 0;\n    z-index: 1020;\n  }\n}\n\n@media (min-width: 1200px) {\n  .sticky-xl-top {\n    position: -webkit-sticky;\n    position: sticky;\n    top: 0;\n    z-index: 1020;\n  }\n}\n\n@media (min-width: 1400px) {\n  .sticky-xxl-top {\n    position: -webkit-sticky;\n    position: sticky;\n    top: 0;\n    z-index: 1020;\n  }\n}\n\n.hstack {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-direction: row;\n  flex-direction: row;\n  -ms-flex-align: center;\n  align-items: center;\n  -ms-flex-item-align: stretch;\n  align-self: stretch;\n}\n\n.vstack {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex: 1 1 auto;\n  flex: 1 1 auto;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  -ms-flex-item-align: stretch;\n  align-self: stretch;\n}\n\n.visually-hidden,\n.visually-hidden-focusable:not(:focus):not(:focus-within) {\n  position: absolute !important;\n  width: 1px !important;\n  height: 1px !important;\n  padding: 0 !important;\n  margin: -1px !important;\n  overflow: hidden !important;\n  clip: rect(0, 0, 0, 0) !important;\n  white-space: nowrap !important;\n  border: 0 !important;\n}\n\n.stretched-link::after {\n  position: absolute;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 1;\n  content: \"\";\n}\n\n.text-truncate {\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n}\n\n.vr {\n  display: inline-block;\n  -ms-flex-item-align: stretch;\n  align-self: stretch;\n  width: 1px;\n  min-height: 1em;\n  background-color: currentColor;\n  opacity: 0.25;\n}\n\n.align-baseline {\n  vertical-align: baseline !important;\n}\n\n.align-top {\n  vertical-align: top !important;\n}\n\n.align-middle {\n  vertical-align: middle !important;\n}\n\n.align-bottom {\n  vertical-align: bottom !important;\n}\n\n.align-text-bottom {\n  vertical-align: text-bottom !important;\n}\n\n.align-text-top {\n  vertical-align: text-top !important;\n}\n\n.float-start {\n  float: left !important;\n}\n\n.float-end {\n  float: right !important;\n}\n\n.float-none {\n  float: none !important;\n}\n\n.opacity-0 {\n  opacity: 0 !important;\n}\n\n.opacity-25 {\n  opacity: 0.25 !important;\n}\n\n.opacity-50 {\n  opacity: 0.5 !important;\n}\n\n.opacity-75 {\n  opacity: 0.75 !important;\n}\n\n.opacity-100 {\n  opacity: 1 !important;\n}\n\n.overflow-auto {\n  overflow: auto !important;\n}\n\n.overflow-hidden {\n  overflow: hidden !important;\n}\n\n.overflow-visible {\n  overflow: visible !important;\n}\n\n.overflow-scroll {\n  overflow: scroll !important;\n}\n\n.d-inline {\n  display: inline !important;\n}\n\n.d-inline-block {\n  display: inline-block !important;\n}\n\n.d-block {\n  display: block !important;\n}\n\n.d-grid {\n  display: grid !important;\n}\n\n.d-table {\n  display: table !important;\n}\n\n.d-table-row {\n  display: table-row !important;\n}\n\n.d-table-cell {\n  display: table-cell !important;\n}\n\n.d-flex {\n  display: -ms-flexbox !important;\n  display: flex !important;\n}\n\n.d-inline-flex {\n  display: -ms-inline-flexbox !important;\n  display: inline-flex !important;\n}\n\n.d-none {\n  display: none !important;\n}\n\n.shadow {\n  box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15) !important;\n}\n\n.shadow-sm {\n  box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075) !important;\n}\n\n.shadow-lg {\n  box-shadow: 0 1rem 3rem rgba(0, 0, 0, 0.175) !important;\n}\n\n.shadow-none {\n  box-shadow: none !important;\n}\n\n.position-static {\n  position: static !important;\n}\n\n.position-relative {\n  position: relative !important;\n}\n\n.position-absolute {\n  position: absolute !important;\n}\n\n.position-fixed {\n  position: fixed !important;\n}\n\n.position-sticky {\n  position: -webkit-sticky !important;\n  position: sticky !important;\n}\n\n.top-0 {\n  top: 0 !important;\n}\n\n.top-50 {\n  top: 50% !important;\n}\n\n.top-100 {\n  top: 100% !important;\n}\n\n.bottom-0 {\n  bottom: 0 !important;\n}\n\n.bottom-50 {\n  bottom: 50% !important;\n}\n\n.bottom-100 {\n  bottom: 100% !important;\n}\n\n.start-0 {\n  left: 0 !important;\n}\n\n.start-50 {\n  left: 50% !important;\n}\n\n.start-100 {\n  left: 100% !important;\n}\n\n.end-0 {\n  right: 0 !important;\n}\n\n.end-50 {\n  right: 50% !important;\n}\n\n.end-100 {\n  right: 100% !important;\n}\n\n.translate-middle {\n  -webkit-transform: translate(-50%, -50%) !important;\n  transform: translate(-50%, -50%) !important;\n}\n\n.translate-middle-x {\n  -webkit-transform: translateX(-50%) !important;\n  transform: translateX(-50%) !important;\n}\n\n.translate-middle-y {\n  -webkit-transform: translateY(-50%) !important;\n  transform: translateY(-50%) !important;\n}\n\n.border {\n  border: 1px solid #dee2e6 !important;\n}\n\n.border-0 {\n  border: 0 !important;\n}\n\n.border-top {\n  border-top: 1px solid #dee2e6 !important;\n}\n\n.border-top-0 {\n  border-top: 0 !important;\n}\n\n.border-end {\n  border-right: 1px solid #dee2e6 !important;\n}\n\n.border-end-0 {\n  border-right: 0 !important;\n}\n\n.border-bottom {\n  border-bottom: 1px solid #dee2e6 !important;\n}\n\n.border-bottom-0 {\n  border-bottom: 0 !important;\n}\n\n.border-start {\n  border-left: 1px solid #dee2e6 !important;\n}\n\n.border-start-0 {\n  border-left: 0 !important;\n}\n\n.border-primary {\n  border-color: #b58900 !important;\n}\n\n.border-secondary {\n  border-color: #839496 !important;\n}\n\n.border-success {\n  border-color: #2aa198 !important;\n}\n\n.border-info {\n  border-color: #268bd2 !important;\n}\n\n.border-warning {\n  border-color: #cb4b16 !important;\n}\n\n.border-danger {\n  border-color: #d33682 !important;\n}\n\n.border-light {\n  border-color: #fdf6e3 !important;\n}\n\n.border-dark {\n  border-color: #073642 !important;\n}\n\n.border-white {\n  border-color: #fff !important;\n}\n\n.border-1 {\n  border-width: 1px !important;\n}\n\n.border-2 {\n  border-width: 2px !important;\n}\n\n.border-3 {\n  border-width: 3px !important;\n}\n\n.border-4 {\n  border-width: 4px !important;\n}\n\n.border-5 {\n  border-width: 5px !important;\n}\n\n.w-25 {\n  width: 25% !important;\n}\n\n.w-50 {\n  width: 50% !important;\n}\n\n.w-75 {\n  width: 75% !important;\n}\n\n.w-100 {\n  width: 100% !important;\n}\n\n.w-auto {\n  width: auto !important;\n}\n\n.mw-100 {\n  max-width: 100% !important;\n}\n\n.vw-100 {\n  width: 100vw !important;\n}\n\n.min-vw-100 {\n  min-width: 100vw !important;\n}\n\n.h-25 {\n  height: 25% !important;\n}\n\n.h-50 {\n  height: 50% !important;\n}\n\n.h-75 {\n  height: 75% !important;\n}\n\n.h-100 {\n  height: 100% !important;\n}\n\n.h-auto {\n  height: auto !important;\n}\n\n.mh-100 {\n  max-height: 100% !important;\n}\n\n.vh-100 {\n  height: 100vh !important;\n}\n\n.min-vh-100 {\n  min-height: 100vh !important;\n}\n\n.flex-fill {\n  -ms-flex: 1 1 auto !important;\n  flex: 1 1 auto !important;\n}\n\n.flex-row {\n  -ms-flex-direction: row !important;\n  flex-direction: row !important;\n}\n\n.flex-column {\n  -ms-flex-direction: column !important;\n  flex-direction: column !important;\n}\n\n.flex-row-reverse {\n  -ms-flex-direction: row-reverse !important;\n  flex-direction: row-reverse !important;\n}\n\n.flex-column-reverse {\n  -ms-flex-direction: column-reverse !important;\n  flex-direction: column-reverse !important;\n}\n\n.flex-grow-0 {\n  -ms-flex-positive: 0 !important;\n  flex-grow: 0 !important;\n}\n\n.flex-grow-1 {\n  -ms-flex-positive: 1 !important;\n  flex-grow: 1 !important;\n}\n\n.flex-shrink-0 {\n  -ms-flex-negative: 0 !important;\n  flex-shrink: 0 !important;\n}\n\n.flex-shrink-1 {\n  -ms-flex-negative: 1 !important;\n  flex-shrink: 1 !important;\n}\n\n.flex-wrap {\n  -ms-flex-wrap: wrap !important;\n  flex-wrap: wrap !important;\n}\n\n.flex-nowrap {\n  -ms-flex-wrap: nowrap !important;\n  flex-wrap: nowrap !important;\n}\n\n.flex-wrap-reverse {\n  -ms-flex-wrap: wrap-reverse !important;\n  flex-wrap: wrap-reverse !important;\n}\n\n.gap-0 {\n  gap: 0 !important;\n}\n\n.gap-1 {\n  gap: 0.25rem !important;\n}\n\n.gap-2 {\n  gap: 0.5rem !important;\n}\n\n.gap-3 {\n  gap: 1rem !important;\n}\n\n.gap-4 {\n  gap: 1.5rem !important;\n}\n\n.gap-5 {\n  gap: 3rem !important;\n}\n\n.justify-content-start {\n  -ms-flex-pack: start !important;\n  justify-content: flex-start !important;\n}\n\n.justify-content-end {\n  -ms-flex-pack: end !important;\n  justify-content: flex-end !important;\n}\n\n.justify-content-center {\n  -ms-flex-pack: center !important;\n  justify-content: center !important;\n}\n\n.justify-content-between {\n  -ms-flex-pack: justify !important;\n  justify-content: space-between !important;\n}\n\n.justify-content-around {\n  -ms-flex-pack: distribute !important;\n  justify-content: space-around !important;\n}\n\n.justify-content-evenly {\n  -ms-flex-pack: space-evenly !important;\n  justify-content: space-evenly !important;\n}\n\n.align-items-start {\n  -ms-flex-align: start !important;\n  align-items: flex-start !important;\n}\n\n.align-items-end {\n  -ms-flex-align: end !important;\n  align-items: flex-end !important;\n}\n\n.align-items-center {\n  -ms-flex-align: center !important;\n  align-items: center !important;\n}\n\n.align-items-baseline {\n  -ms-flex-align: baseline !important;\n  align-items: baseline !important;\n}\n\n.align-items-stretch {\n  -ms-flex-align: stretch !important;\n  align-items: stretch !important;\n}\n\n.align-content-start {\n  -ms-flex-line-pack: start !important;\n  align-content: flex-start !important;\n}\n\n.align-content-end {\n  -ms-flex-line-pack: end !important;\n  align-content: flex-end !important;\n}\n\n.align-content-center {\n  -ms-flex-line-pack: center !important;\n  align-content: center !important;\n}\n\n.align-content-between {\n  -ms-flex-line-pack: justify !important;\n  align-content: space-between !important;\n}\n\n.align-content-around {\n  -ms-flex-line-pack: distribute !important;\n  align-content: space-around !important;\n}\n\n.align-content-stretch {\n  -ms-flex-line-pack: stretch !important;\n  align-content: stretch !important;\n}\n\n.align-self-auto {\n  -ms-flex-item-align: auto !important;\n  align-self: auto !important;\n}\n\n.align-self-start {\n  -ms-flex-item-align: start !important;\n  align-self: flex-start !important;\n}\n\n.align-self-end {\n  -ms-flex-item-align: end !important;\n  align-self: flex-end !important;\n}\n\n.align-self-center {\n  -ms-flex-item-align: center !important;\n  align-self: center !important;\n}\n\n.align-self-baseline {\n  -ms-flex-item-align: baseline !important;\n  align-self: baseline !important;\n}\n\n.align-self-stretch {\n  -ms-flex-item-align: stretch !important;\n  align-self: stretch !important;\n}\n\n.order-first {\n  -ms-flex-order: -1 !important;\n  order: -1 !important;\n}\n\n.order-0 {\n  -ms-flex-order: 0 !important;\n  order: 0 !important;\n}\n\n.order-1 {\n  -ms-flex-order: 1 !important;\n  order: 1 !important;\n}\n\n.order-2 {\n  -ms-flex-order: 2 !important;\n  order: 2 !important;\n}\n\n.order-3 {\n  -ms-flex-order: 3 !important;\n  order: 3 !important;\n}\n\n.order-4 {\n  -ms-flex-order: 4 !important;\n  order: 4 !important;\n}\n\n.order-5 {\n  -ms-flex-order: 5 !important;\n  order: 5 !important;\n}\n\n.order-last {\n  -ms-flex-order: 6 !important;\n  order: 6 !important;\n}\n\n.m-0 {\n  margin: 0 !important;\n}\n\n.m-1 {\n  margin: 0.25rem !important;\n}\n\n.m-2 {\n  margin: 0.5rem !important;\n}\n\n.m-3 {\n  margin: 1rem !important;\n}\n\n.m-4 {\n  margin: 1.5rem !important;\n}\n\n.m-5 {\n  margin: 3rem !important;\n}\n\n.m-auto {\n  margin: auto !important;\n}\n\n.mx-0 {\n  margin-right: 0 !important;\n  margin-left: 0 !important;\n}\n\n.mx-1 {\n  margin-right: 0.25rem !important;\n  margin-left: 0.25rem !important;\n}\n\n.mx-2 {\n  margin-right: 0.5rem !important;\n  margin-left: 0.5rem !important;\n}\n\n.mx-3 {\n  margin-right: 1rem !important;\n  margin-left: 1rem !important;\n}\n\n.mx-4 {\n  margin-right: 1.5rem !important;\n  margin-left: 1.5rem !important;\n}\n\n.mx-5 {\n  margin-right: 3rem !important;\n  margin-left: 3rem !important;\n}\n\n.mx-auto {\n  margin-right: auto !important;\n  margin-left: auto !important;\n}\n\n.my-0 {\n  margin-top: 0 !important;\n  margin-bottom: 0 !important;\n}\n\n.my-1 {\n  margin-top: 0.25rem !important;\n  margin-bottom: 0.25rem !important;\n}\n\n.my-2 {\n  margin-top: 0.5rem !important;\n  margin-bottom: 0.5rem !important;\n}\n\n.my-3 {\n  margin-top: 1rem !important;\n  margin-bottom: 1rem !important;\n}\n\n.my-4 {\n  margin-top: 1.5rem !important;\n  margin-bottom: 1.5rem !important;\n}\n\n.my-5 {\n  margin-top: 3rem !important;\n  margin-bottom: 3rem !important;\n}\n\n.my-auto {\n  margin-top: auto !important;\n  margin-bottom: auto !important;\n}\n\n.mt-0 {\n  margin-top: 0 !important;\n}\n\n.mt-1 {\n  margin-top: 0.25rem !important;\n}\n\n.mt-2 {\n  margin-top: 0.5rem !important;\n}\n\n.mt-3 {\n  margin-top: 1rem !important;\n}\n\n.mt-4 {\n  margin-top: 1.5rem !important;\n}\n\n.mt-5 {\n  margin-top: 3rem !important;\n}\n\n.mt-auto {\n  margin-top: auto !important;\n}\n\n.me-0 {\n  margin-right: 0 !important;\n}\n\n.me-1 {\n  margin-right: 0.25rem !important;\n}\n\n.me-2 {\n  margin-right: 0.5rem !important;\n}\n\n.me-3 {\n  margin-right: 1rem !important;\n}\n\n.me-4 {\n  margin-right: 1.5rem !important;\n}\n\n.me-5 {\n  margin-right: 3rem !important;\n}\n\n.me-auto {\n  margin-right: auto !important;\n}\n\n.mb-0 {\n  margin-bottom: 0 !important;\n}\n\n.mb-1 {\n  margin-bottom: 0.25rem !important;\n}\n\n.mb-2 {\n  margin-bottom: 0.5rem !important;\n}\n\n.mb-3 {\n  margin-bottom: 1rem !important;\n}\n\n.mb-4 {\n  margin-bottom: 1.5rem !important;\n}\n\n.mb-5 {\n  margin-bottom: 3rem !important;\n}\n\n.mb-auto {\n  margin-bottom: auto !important;\n}\n\n.ms-0 {\n  margin-left: 0 !important;\n}\n\n.ms-1 {\n  margin-left: 0.25rem !important;\n}\n\n.ms-2 {\n  margin-left: 0.5rem !important;\n}\n\n.ms-3 {\n  margin-left: 1rem !important;\n}\n\n.ms-4 {\n  margin-left: 1.5rem !important;\n}\n\n.ms-5 {\n  margin-left: 3rem !important;\n}\n\n.ms-auto {\n  margin-left: auto !important;\n}\n\n.p-0 {\n  padding: 0 !important;\n}\n\n.p-1 {\n  padding: 0.25rem !important;\n}\n\n.p-2 {\n  padding: 0.5rem !important;\n}\n\n.p-3 {\n  padding: 1rem !important;\n}\n\n.p-4 {\n  padding: 1.5rem !important;\n}\n\n.p-5 {\n  padding: 3rem !important;\n}\n\n.px-0 {\n  padding-right: 0 !important;\n  padding-left: 0 !important;\n}\n\n.px-1 {\n  padding-right: 0.25rem !important;\n  padding-left: 0.25rem !important;\n}\n\n.px-2 {\n  padding-right: 0.5rem !important;\n  padding-left: 0.5rem !important;\n}\n\n.px-3 {\n  padding-right: 1rem !important;\n  padding-left: 1rem !important;\n}\n\n.px-4 {\n  padding-right: 1.5rem !important;\n  padding-left: 1.5rem !important;\n}\n\n.px-5 {\n  padding-right: 3rem !important;\n  padding-left: 3rem !important;\n}\n\n.py-0 {\n  padding-top: 0 !important;\n  padding-bottom: 0 !important;\n}\n\n.py-1 {\n  padding-top: 0.25rem !important;\n  padding-bottom: 0.25rem !important;\n}\n\n.py-2 {\n  padding-top: 0.5rem !important;\n  padding-bottom: 0.5rem !important;\n}\n\n.py-3 {\n  padding-top: 1rem !important;\n  padding-bottom: 1rem !important;\n}\n\n.py-4 {\n  padding-top: 1.5rem !important;\n  padding-bottom: 1.5rem !important;\n}\n\n.py-5 {\n  padding-top: 3rem !important;\n  padding-bottom: 3rem !important;\n}\n\n.pt-0 {\n  padding-top: 0 !important;\n}\n\n.pt-1 {\n  padding-top: 0.25rem !important;\n}\n\n.pt-2 {\n  padding-top: 0.5rem !important;\n}\n\n.pt-3 {\n  padding-top: 1rem !important;\n}\n\n.pt-4 {\n  padding-top: 1.5rem !important;\n}\n\n.pt-5 {\n  padding-top: 3rem !important;\n}\n\n.pe-0 {\n  padding-right: 0 !important;\n}\n\n.pe-1 {\n  padding-right: 0.25rem !important;\n}\n\n.pe-2 {\n  padding-right: 0.5rem !important;\n}\n\n.pe-3 {\n  padding-right: 1rem !important;\n}\n\n.pe-4 {\n  padding-right: 1.5rem !important;\n}\n\n.pe-5 {\n  padding-right: 3rem !important;\n}\n\n.pb-0 {\n  padding-bottom: 0 !important;\n}\n\n.pb-1 {\n  padding-bottom: 0.25rem !important;\n}\n\n.pb-2 {\n  padding-bottom: 0.5rem !important;\n}\n\n.pb-3 {\n  padding-bottom: 1rem !important;\n}\n\n.pb-4 {\n  padding-bottom: 1.5rem !important;\n}\n\n.pb-5 {\n  padding-bottom: 3rem !important;\n}\n\n.ps-0 {\n  padding-left: 0 !important;\n}\n\n.ps-1 {\n  padding-left: 0.25rem !important;\n}\n\n.ps-2 {\n  padding-left: 0.5rem !important;\n}\n\n.ps-3 {\n  padding-left: 1rem !important;\n}\n\n.ps-4 {\n  padding-left: 1.5rem !important;\n}\n\n.ps-5 {\n  padding-left: 3rem !important;\n}\n\n.font-monospace {\n  font-family: var(--bs-font-monospace) !important;\n}\n\n.fs-1 {\n  font-size: calc(1.375rem + 1.5vw) !important;\n}\n\n.fs-2 {\n  font-size: calc(1.325rem + 0.9vw) !important;\n}\n\n.fs-3 {\n  font-size: calc(1.3rem + 0.6vw) !important;\n}\n\n.fs-4 {\n  font-size: calc(1.275rem + 0.3vw) !important;\n}\n\n.fs-5 {\n  font-size: 1.25rem !important;\n}\n\n.fs-6 {\n  font-size: 1rem !important;\n}\n\n.fst-italic {\n  font-style: italic !important;\n}\n\n.fst-normal {\n  font-style: normal !important;\n}\n\n.fw-light {\n  font-weight: 300 !important;\n}\n\n.fw-lighter {\n  font-weight: lighter !important;\n}\n\n.fw-normal {\n  font-weight: 400 !important;\n}\n\n.fw-bold {\n  font-weight: 700 !important;\n}\n\n.fw-bolder {\n  font-weight: bolder !important;\n}\n\n.lh-1 {\n  line-height: 1 !important;\n}\n\n.lh-sm {\n  line-height: 1.25 !important;\n}\n\n.lh-base {\n  line-height: 1.5 !important;\n}\n\n.lh-lg {\n  line-height: 2 !important;\n}\n\n.text-start {\n  text-align: left !important;\n}\n\n.text-end {\n  text-align: right !important;\n}\n\n.text-center {\n  text-align: center !important;\n}\n\n.text-decoration-none {\n  text-decoration: none !important;\n}\n\n.text-decoration-underline {\n  text-decoration: underline !important;\n}\n\n.text-decoration-line-through {\n  text-decoration: line-through !important;\n}\n\n.text-lowercase {\n  text-transform: lowercase !important;\n}\n\n.text-uppercase {\n  text-transform: uppercase !important;\n}\n\n.text-capitalize {\n  text-transform: capitalize !important;\n}\n\n.text-wrap {\n  white-space: normal !important;\n}\n\n.text-nowrap {\n  white-space: nowrap !important;\n}\n\n/* rtl:begin:remove */\n.text-break {\n  word-wrap: break-word !important;\n  word-break: break-word !important;\n}\n\n/* rtl:end:remove */\n.text-primary {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-primary-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-secondary {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-secondary-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-success {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-success-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-info {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-info-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-warning {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-warning-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-danger {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-danger-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-light {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-light-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-dark {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-dark-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-black {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-black-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-white {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-white-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-body {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-body-color-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-muted {\n  --bs-text-opacity: 1;\n  color: #839496 !important;\n}\n\n.text-black-50 {\n  --bs-text-opacity: 1;\n  color: rgba(0, 0, 0, 0.5) !important;\n}\n\n.text-white-50 {\n  --bs-text-opacity: 1;\n  color: rgba(255, 255, 255, 0.5) !important;\n}\n\n.text-reset {\n  --bs-text-opacity: 1;\n  color: inherit !important;\n}\n\n.text-opacity-25 {\n  --bs-text-opacity: 0.25;\n}\n\n.text-opacity-50 {\n  --bs-text-opacity: 0.5;\n}\n\n.text-opacity-75 {\n  --bs-text-opacity: 0.75;\n}\n\n.text-opacity-100 {\n  --bs-text-opacity: 1;\n}\n\n.bg-primary {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-primary-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-secondary {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-secondary-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-success {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-success-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-info {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-info-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-warning {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-warning-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-danger {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-danger-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-light {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-light-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-dark {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-dark-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-black {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-black-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-white {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-white-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-body {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-body-bg-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-transparent {\n  --bs-bg-opacity: 1;\n  background-color: transparent !important;\n}\n\n.bg-opacity-10 {\n  --bs-bg-opacity: 0.1;\n}\n\n.bg-opacity-25 {\n  --bs-bg-opacity: 0.25;\n}\n\n.bg-opacity-50 {\n  --bs-bg-opacity: 0.5;\n}\n\n.bg-opacity-75 {\n  --bs-bg-opacity: 0.75;\n}\n\n.bg-opacity-100 {\n  --bs-bg-opacity: 1;\n}\n\n.bg-gradient {\n  background-image: var(--bs-gradient) !important;\n}\n\n.user-select-all {\n  -webkit-user-select: all !important;\n  -moz-user-select: all !important;\n  user-select: all !important;\n}\n\n.user-select-auto {\n  -webkit-user-select: auto !important;\n  -moz-user-select: auto !important;\n  -ms-user-select: auto !important;\n  user-select: auto !important;\n}\n\n.user-select-none {\n  -webkit-user-select: none !important;\n  -moz-user-select: none !important;\n  -ms-user-select: none !important;\n  user-select: none !important;\n}\n\n.pe-none {\n  pointer-events: none !important;\n}\n\n.pe-auto {\n  pointer-events: auto !important;\n}\n\n.rounded {\n  border-radius: 0.25rem !important;\n}\n\n.rounded-0 {\n  border-radius: 0 !important;\n}\n\n.rounded-1 {\n  border-radius: 0.2rem !important;\n}\n\n.rounded-2 {\n  border-radius: 0.25rem !important;\n}\n\n.rounded-3 {\n  border-radius: 0.3rem !important;\n}\n\n.rounded-circle {\n  border-radius: 50% !important;\n}\n\n.rounded-pill {\n  border-radius: 50rem !important;\n}\n\n.rounded-top {\n  border-top-left-radius: 0.25rem !important;\n  border-top-right-radius: 0.25rem !important;\n}\n\n.rounded-end {\n  border-top-right-radius: 0.25rem !important;\n  border-bottom-right-radius: 0.25rem !important;\n}\n\n.rounded-bottom {\n  border-bottom-right-radius: 0.25rem !important;\n  border-bottom-left-radius: 0.25rem !important;\n}\n\n.rounded-start {\n  border-bottom-left-radius: 0.25rem !important;\n  border-top-left-radius: 0.25rem !important;\n}\n\n.visible {\n  visibility: visible !important;\n}\n\n.invisible {\n  visibility: hidden !important;\n}\n\n@media (min-width: 576px) {\n  .float-sm-start {\n    float: left !important;\n  }\n  .float-sm-end {\n    float: right !important;\n  }\n  .float-sm-none {\n    float: none !important;\n  }\n  .d-sm-inline {\n    display: inline !important;\n  }\n  .d-sm-inline-block {\n    display: inline-block !important;\n  }\n  .d-sm-block {\n    display: block !important;\n  }\n  .d-sm-grid {\n    display: grid !important;\n  }\n  .d-sm-table {\n    display: table !important;\n  }\n  .d-sm-table-row {\n    display: table-row !important;\n  }\n  .d-sm-table-cell {\n    display: table-cell !important;\n  }\n  .d-sm-flex {\n    display: -ms-flexbox !important;\n    display: flex !important;\n  }\n  .d-sm-inline-flex {\n    display: -ms-inline-flexbox !important;\n    display: inline-flex !important;\n  }\n  .d-sm-none {\n    display: none !important;\n  }\n  .flex-sm-fill {\n    -ms-flex: 1 1 auto !important;\n    flex: 1 1 auto !important;\n  }\n  .flex-sm-row {\n    -ms-flex-direction: row !important;\n    flex-direction: row !important;\n  }\n  .flex-sm-column {\n    -ms-flex-direction: column !important;\n    flex-direction: column !important;\n  }\n  .flex-sm-row-reverse {\n    -ms-flex-direction: row-reverse !important;\n    flex-direction: row-reverse !important;\n  }\n  .flex-sm-column-reverse {\n    -ms-flex-direction: column-reverse !important;\n    flex-direction: column-reverse !important;\n  }\n  .flex-sm-grow-0 {\n    -ms-flex-positive: 0 !important;\n    flex-grow: 0 !important;\n  }\n  .flex-sm-grow-1 {\n    -ms-flex-positive: 1 !important;\n    flex-grow: 1 !important;\n  }\n  .flex-sm-shrink-0 {\n    -ms-flex-negative: 0 !important;\n    flex-shrink: 0 !important;\n  }\n  .flex-sm-shrink-1 {\n    -ms-flex-negative: 1 !important;\n    flex-shrink: 1 !important;\n  }\n  .flex-sm-wrap {\n    -ms-flex-wrap: wrap !important;\n    flex-wrap: wrap !important;\n  }\n  .flex-sm-nowrap {\n    -ms-flex-wrap: nowrap !important;\n    flex-wrap: nowrap !important;\n  }\n  .flex-sm-wrap-reverse {\n    -ms-flex-wrap: wrap-reverse !important;\n    flex-wrap: wrap-reverse !important;\n  }\n  .gap-sm-0 {\n    gap: 0 !important;\n  }\n  .gap-sm-1 {\n    gap: 0.25rem !important;\n  }\n  .gap-sm-2 {\n    gap: 0.5rem !important;\n  }\n  .gap-sm-3 {\n    gap: 1rem !important;\n  }\n  .gap-sm-4 {\n    gap: 1.5rem !important;\n  }\n  .gap-sm-5 {\n    gap: 3rem !important;\n  }\n  .justify-content-sm-start {\n    -ms-flex-pack: start !important;\n    justify-content: flex-start !important;\n  }\n  .justify-content-sm-end {\n    -ms-flex-pack: end !important;\n    justify-content: flex-end !important;\n  }\n  .justify-content-sm-center {\n    -ms-flex-pack: center !important;\n    justify-content: center !important;\n  }\n  .justify-content-sm-between {\n    -ms-flex-pack: justify !important;\n    justify-content: space-between !important;\n  }\n  .justify-content-sm-around {\n    -ms-flex-pack: distribute !important;\n    justify-content: space-around !important;\n  }\n  .justify-content-sm-evenly {\n    -ms-flex-pack: space-evenly !important;\n    justify-content: space-evenly !important;\n  }\n  .align-items-sm-start {\n    -ms-flex-align: start !important;\n    align-items: flex-start !important;\n  }\n  .align-items-sm-end {\n    -ms-flex-align: end !important;\n    align-items: flex-end !important;\n  }\n  .align-items-sm-center {\n    -ms-flex-align: center !important;\n    align-items: center !important;\n  }\n  .align-items-sm-baseline {\n    -ms-flex-align: baseline !important;\n    align-items: baseline !important;\n  }\n  .align-items-sm-stretch {\n    -ms-flex-align: stretch !important;\n    align-items: stretch !important;\n  }\n  .align-content-sm-start {\n    -ms-flex-line-pack: start !important;\n    align-content: flex-start !important;\n  }\n  .align-content-sm-end {\n    -ms-flex-line-pack: end !important;\n    align-content: flex-end !important;\n  }\n  .align-content-sm-center {\n    -ms-flex-line-pack: center !important;\n    align-content: center !important;\n  }\n  .align-content-sm-between {\n    -ms-flex-line-pack: justify !important;\n    align-content: space-between !important;\n  }\n  .align-content-sm-around {\n    -ms-flex-line-pack: distribute !important;\n    align-content: space-around !important;\n  }\n  .align-content-sm-stretch {\n    -ms-flex-line-pack: stretch !important;\n    align-content: stretch !important;\n  }\n  .align-self-sm-auto {\n    -ms-flex-item-align: auto !important;\n    align-self: auto !important;\n  }\n  .align-self-sm-start {\n    -ms-flex-item-align: start !important;\n    align-self: flex-start !important;\n  }\n  .align-self-sm-end {\n    -ms-flex-item-align: end !important;\n    align-self: flex-end !important;\n  }\n  .align-self-sm-center {\n    -ms-flex-item-align: center !important;\n    align-self: center !important;\n  }\n  .align-self-sm-baseline {\n    -ms-flex-item-align: baseline !important;\n    align-self: baseline !important;\n  }\n  .align-self-sm-stretch {\n    -ms-flex-item-align: stretch !important;\n    align-self: stretch !important;\n  }\n  .order-sm-first {\n    -ms-flex-order: -1 !important;\n    order: -1 !important;\n  }\n  .order-sm-0 {\n    -ms-flex-order: 0 !important;\n    order: 0 !important;\n  }\n  .order-sm-1 {\n    -ms-flex-order: 1 !important;\n    order: 1 !important;\n  }\n  .order-sm-2 {\n    -ms-flex-order: 2 !important;\n    order: 2 !important;\n  }\n  .order-sm-3 {\n    -ms-flex-order: 3 !important;\n    order: 3 !important;\n  }\n  .order-sm-4 {\n    -ms-flex-order: 4 !important;\n    order: 4 !important;\n  }\n  .order-sm-5 {\n    -ms-flex-order: 5 !important;\n    order: 5 !important;\n  }\n  .order-sm-last {\n    -ms-flex-order: 6 !important;\n    order: 6 !important;\n  }\n  .m-sm-0 {\n    margin: 0 !important;\n  }\n  .m-sm-1 {\n    margin: 0.25rem !important;\n  }\n  .m-sm-2 {\n    margin: 0.5rem !important;\n  }\n  .m-sm-3 {\n    margin: 1rem !important;\n  }\n  .m-sm-4 {\n    margin: 1.5rem !important;\n  }\n  .m-sm-5 {\n    margin: 3rem !important;\n  }\n  .m-sm-auto {\n    margin: auto !important;\n  }\n  .mx-sm-0 {\n    margin-right: 0 !important;\n    margin-left: 0 !important;\n  }\n  .mx-sm-1 {\n    margin-right: 0.25rem !important;\n    margin-left: 0.25rem !important;\n  }\n  .mx-sm-2 {\n    margin-right: 0.5rem !important;\n    margin-left: 0.5rem !important;\n  }\n  .mx-sm-3 {\n    margin-right: 1rem !important;\n    margin-left: 1rem !important;\n  }\n  .mx-sm-4 {\n    margin-right: 1.5rem !important;\n    margin-left: 1.5rem !important;\n  }\n  .mx-sm-5 {\n    margin-right: 3rem !important;\n    margin-left: 3rem !important;\n  }\n  .mx-sm-auto {\n    margin-right: auto !important;\n    margin-left: auto !important;\n  }\n  .my-sm-0 {\n    margin-top: 0 !important;\n    margin-bottom: 0 !important;\n  }\n  .my-sm-1 {\n    margin-top: 0.25rem !important;\n    margin-bottom: 0.25rem !important;\n  }\n  .my-sm-2 {\n    margin-top: 0.5rem !important;\n    margin-bottom: 0.5rem !important;\n  }\n  .my-sm-3 {\n    margin-top: 1rem !important;\n    margin-bottom: 1rem !important;\n  }\n  .my-sm-4 {\n    margin-top: 1.5rem !important;\n    margin-bottom: 1.5rem !important;\n  }\n  .my-sm-5 {\n    margin-top: 3rem !important;\n    margin-bottom: 3rem !important;\n  }\n  .my-sm-auto {\n    margin-top: auto !important;\n    margin-bottom: auto !important;\n  }\n  .mt-sm-0 {\n    margin-top: 0 !important;\n  }\n  .mt-sm-1 {\n    margin-top: 0.25rem !important;\n  }\n  .mt-sm-2 {\n    margin-top: 0.5rem !important;\n  }\n  .mt-sm-3 {\n    margin-top: 1rem !important;\n  }\n  .mt-sm-4 {\n    margin-top: 1.5rem !important;\n  }\n  .mt-sm-5 {\n    margin-top: 3rem !important;\n  }\n  .mt-sm-auto {\n    margin-top: auto !important;\n  }\n  .me-sm-0 {\n    margin-right: 0 !important;\n  }\n  .me-sm-1 {\n    margin-right: 0.25rem !important;\n  }\n  .me-sm-2 {\n    margin-right: 0.5rem !important;\n  }\n  .me-sm-3 {\n    margin-right: 1rem !important;\n  }\n  .me-sm-4 {\n    margin-right: 1.5rem !important;\n  }\n  .me-sm-5 {\n    margin-right: 3rem !important;\n  }\n  .me-sm-auto {\n    margin-right: auto !important;\n  }\n  .mb-sm-0 {\n    margin-bottom: 0 !important;\n  }\n  .mb-sm-1 {\n    margin-bottom: 0.25rem !important;\n  }\n  .mb-sm-2 {\n    margin-bottom: 0.5rem !important;\n  }\n  .mb-sm-3 {\n    margin-bottom: 1rem !important;\n  }\n  .mb-sm-4 {\n    margin-bottom: 1.5rem !important;\n  }\n  .mb-sm-5 {\n    margin-bottom: 3rem !important;\n  }\n  .mb-sm-auto {\n    margin-bottom: auto !important;\n  }\n  .ms-sm-0 {\n    margin-left: 0 !important;\n  }\n  .ms-sm-1 {\n    margin-left: 0.25rem !important;\n  }\n  .ms-sm-2 {\n    margin-left: 0.5rem !important;\n  }\n  .ms-sm-3 {\n    margin-left: 1rem !important;\n  }\n  .ms-sm-4 {\n    margin-left: 1.5rem !important;\n  }\n  .ms-sm-5 {\n    margin-left: 3rem !important;\n  }\n  .ms-sm-auto {\n    margin-left: auto !important;\n  }\n  .p-sm-0 {\n    padding: 0 !important;\n  }\n  .p-sm-1 {\n    padding: 0.25rem !important;\n  }\n  .p-sm-2 {\n    padding: 0.5rem !important;\n  }\n  .p-sm-3 {\n    padding: 1rem !important;\n  }\n  .p-sm-4 {\n    padding: 1.5rem !important;\n  }\n  .p-sm-5 {\n    padding: 3rem !important;\n  }\n  .px-sm-0 {\n    padding-right: 0 !important;\n    padding-left: 0 !important;\n  }\n  .px-sm-1 {\n    padding-right: 0.25rem !important;\n    padding-left: 0.25rem !important;\n  }\n  .px-sm-2 {\n    padding-right: 0.5rem !important;\n    padding-left: 0.5rem !important;\n  }\n  .px-sm-3 {\n    padding-right: 1rem !important;\n    padding-left: 1rem !important;\n  }\n  .px-sm-4 {\n    padding-right: 1.5rem !important;\n    padding-left: 1.5rem !important;\n  }\n  .px-sm-5 {\n    padding-right: 3rem !important;\n    padding-left: 3rem !important;\n  }\n  .py-sm-0 {\n    padding-top: 0 !important;\n    padding-bottom: 0 !important;\n  }\n  .py-sm-1 {\n    padding-top: 0.25rem !important;\n    padding-bottom: 0.25rem !important;\n  }\n  .py-sm-2 {\n    padding-top: 0.5rem !important;\n    padding-bottom: 0.5rem !important;\n  }\n  .py-sm-3 {\n    padding-top: 1rem !important;\n    padding-bottom: 1rem !important;\n  }\n  .py-sm-4 {\n    padding-top: 1.5rem !important;\n    padding-bottom: 1.5rem !important;\n  }\n  .py-sm-5 {\n    padding-top: 3rem !important;\n    padding-bottom: 3rem !important;\n  }\n  .pt-sm-0 {\n    padding-top: 0 !important;\n  }\n  .pt-sm-1 {\n    padding-top: 0.25rem !important;\n  }\n  .pt-sm-2 {\n    padding-top: 0.5rem !important;\n  }\n  .pt-sm-3 {\n    padding-top: 1rem !important;\n  }\n  .pt-sm-4 {\n    padding-top: 1.5rem !important;\n  }\n  .pt-sm-5 {\n    padding-top: 3rem !important;\n  }\n  .pe-sm-0 {\n    padding-right: 0 !important;\n  }\n  .pe-sm-1 {\n    padding-right: 0.25rem !important;\n  }\n  .pe-sm-2 {\n    padding-right: 0.5rem !important;\n  }\n  .pe-sm-3 {\n    padding-right: 1rem !important;\n  }\n  .pe-sm-4 {\n    padding-right: 1.5rem !important;\n  }\n  .pe-sm-5 {\n    padding-right: 3rem !important;\n  }\n  .pb-sm-0 {\n    padding-bottom: 0 !important;\n  }\n  .pb-sm-1 {\n    padding-bottom: 0.25rem !important;\n  }\n  .pb-sm-2 {\n    padding-bottom: 0.5rem !important;\n  }\n  .pb-sm-3 {\n    padding-bottom: 1rem !important;\n  }\n  .pb-sm-4 {\n    padding-bottom: 1.5rem !important;\n  }\n  .pb-sm-5 {\n    padding-bottom: 3rem !important;\n  }\n  .ps-sm-0 {\n    padding-left: 0 !important;\n  }\n  .ps-sm-1 {\n    padding-left: 0.25rem !important;\n  }\n  .ps-sm-2 {\n    padding-left: 0.5rem !important;\n  }\n  .ps-sm-3 {\n    padding-left: 1rem !important;\n  }\n  .ps-sm-4 {\n    padding-left: 1.5rem !important;\n  }\n  .ps-sm-5 {\n    padding-left: 3rem !important;\n  }\n  .text-sm-start {\n    text-align: left !important;\n  }\n  .text-sm-end {\n    text-align: right !important;\n  }\n  .text-sm-center {\n    text-align: center !important;\n  }\n}\n\n@media (min-width: 768px) {\n  .float-md-start {\n    float: left !important;\n  }\n  .float-md-end {\n    float: right !important;\n  }\n  .float-md-none {\n    float: none !important;\n  }\n  .d-md-inline {\n    display: inline !important;\n  }\n  .d-md-inline-block {\n    display: inline-block !important;\n  }\n  .d-md-block {\n    display: block !important;\n  }\n  .d-md-grid {\n    display: grid !important;\n  }\n  .d-md-table {\n    display: table !important;\n  }\n  .d-md-table-row {\n    display: table-row !important;\n  }\n  .d-md-table-cell {\n    display: table-cell !important;\n  }\n  .d-md-flex {\n    display: -ms-flexbox !important;\n    display: flex !important;\n  }\n  .d-md-inline-flex {\n    display: -ms-inline-flexbox !important;\n    display: inline-flex !important;\n  }\n  .d-md-none {\n    display: none !important;\n  }\n  .flex-md-fill {\n    -ms-flex: 1 1 auto !important;\n    flex: 1 1 auto !important;\n  }\n  .flex-md-row {\n    -ms-flex-direction: row !important;\n    flex-direction: row !important;\n  }\n  .flex-md-column {\n    -ms-flex-direction: column !important;\n    flex-direction: column !important;\n  }\n  .flex-md-row-reverse {\n    -ms-flex-direction: row-reverse !important;\n    flex-direction: row-reverse !important;\n  }\n  .flex-md-column-reverse {\n    -ms-flex-direction: column-reverse !important;\n    flex-direction: column-reverse !important;\n  }\n  .flex-md-grow-0 {\n    -ms-flex-positive: 0 !important;\n    flex-grow: 0 !important;\n  }\n  .flex-md-grow-1 {\n    -ms-flex-positive: 1 !important;\n    flex-grow: 1 !important;\n  }\n  .flex-md-shrink-0 {\n    -ms-flex-negative: 0 !important;\n    flex-shrink: 0 !important;\n  }\n  .flex-md-shrink-1 {\n    -ms-flex-negative: 1 !important;\n    flex-shrink: 1 !important;\n  }\n  .flex-md-wrap {\n    -ms-flex-wrap: wrap !important;\n    flex-wrap: wrap !important;\n  }\n  .flex-md-nowrap {\n    -ms-flex-wrap: nowrap !important;\n    flex-wrap: nowrap !important;\n  }\n  .flex-md-wrap-reverse {\n    -ms-flex-wrap: wrap-reverse !important;\n    flex-wrap: wrap-reverse !important;\n  }\n  .gap-md-0 {\n    gap: 0 !important;\n  }\n  .gap-md-1 {\n    gap: 0.25rem !important;\n  }\n  .gap-md-2 {\n    gap: 0.5rem !important;\n  }\n  .gap-md-3 {\n    gap: 1rem !important;\n  }\n  .gap-md-4 {\n    gap: 1.5rem !important;\n  }\n  .gap-md-5 {\n    gap: 3rem !important;\n  }\n  .justify-content-md-start {\n    -ms-flex-pack: start !important;\n    justify-content: flex-start !important;\n  }\n  .justify-content-md-end {\n    -ms-flex-pack: end !important;\n    justify-content: flex-end !important;\n  }\n  .justify-content-md-center {\n    -ms-flex-pack: center !important;\n    justify-content: center !important;\n  }\n  .justify-content-md-between {\n    -ms-flex-pack: justify !important;\n    justify-content: space-between !important;\n  }\n  .justify-content-md-around {\n    -ms-flex-pack: distribute !important;\n    justify-content: space-around !important;\n  }\n  .justify-content-md-evenly {\n    -ms-flex-pack: space-evenly !important;\n    justify-content: space-evenly !important;\n  }\n  .align-items-md-start {\n    -ms-flex-align: start !important;\n    align-items: flex-start !important;\n  }\n  .align-items-md-end {\n    -ms-flex-align: end !important;\n    align-items: flex-end !important;\n  }\n  .align-items-md-center {\n    -ms-flex-align: center !important;\n    align-items: center !important;\n  }\n  .align-items-md-baseline {\n    -ms-flex-align: baseline !important;\n    align-items: baseline !important;\n  }\n  .align-items-md-stretch {\n    -ms-flex-align: stretch !important;\n    align-items: stretch !important;\n  }\n  .align-content-md-start {\n    -ms-flex-line-pack: start !important;\n    align-content: flex-start !important;\n  }\n  .align-content-md-end {\n    -ms-flex-line-pack: end !important;\n    align-content: flex-end !important;\n  }\n  .align-content-md-center {\n    -ms-flex-line-pack: center !important;\n    align-content: center !important;\n  }\n  .align-content-md-between {\n    -ms-flex-line-pack: justify !important;\n    align-content: space-between !important;\n  }\n  .align-content-md-around {\n    -ms-flex-line-pack: distribute !important;\n    align-content: space-around !important;\n  }\n  .align-content-md-stretch {\n    -ms-flex-line-pack: stretch !important;\n    align-content: stretch !important;\n  }\n  .align-self-md-auto {\n    -ms-flex-item-align: auto !important;\n    align-self: auto !important;\n  }\n  .align-self-md-start {\n    -ms-flex-item-align: start !important;\n    align-self: flex-start !important;\n  }\n  .align-self-md-end {\n    -ms-flex-item-align: end !important;\n    align-self: flex-end !important;\n  }\n  .align-self-md-center {\n    -ms-flex-item-align: center !important;\n    align-self: center !important;\n  }\n  .align-self-md-baseline {\n    -ms-flex-item-align: baseline !important;\n    align-self: baseline !important;\n  }\n  .align-self-md-stretch {\n    -ms-flex-item-align: stretch !important;\n    align-self: stretch !important;\n  }\n  .order-md-first {\n    -ms-flex-order: -1 !important;\n    order: -1 !important;\n  }\n  .order-md-0 {\n    -ms-flex-order: 0 !important;\n    order: 0 !important;\n  }\n  .order-md-1 {\n    -ms-flex-order: 1 !important;\n    order: 1 !important;\n  }\n  .order-md-2 {\n    -ms-flex-order: 2 !important;\n    order: 2 !important;\n  }\n  .order-md-3 {\n    -ms-flex-order: 3 !important;\n    order: 3 !important;\n  }\n  .order-md-4 {\n    -ms-flex-order: 4 !important;\n    order: 4 !important;\n  }\n  .order-md-5 {\n    -ms-flex-order: 5 !important;\n    order: 5 !important;\n  }\n  .order-md-last {\n    -ms-flex-order: 6 !important;\n    order: 6 !important;\n  }\n  .m-md-0 {\n    margin: 0 !important;\n  }\n  .m-md-1 {\n    margin: 0.25rem !important;\n  }\n  .m-md-2 {\n    margin: 0.5rem !important;\n  }\n  .m-md-3 {\n    margin: 1rem !important;\n  }\n  .m-md-4 {\n    margin: 1.5rem !important;\n  }\n  .m-md-5 {\n    margin: 3rem !important;\n  }\n  .m-md-auto {\n    margin: auto !important;\n  }\n  .mx-md-0 {\n    margin-right: 0 !important;\n    margin-left: 0 !important;\n  }\n  .mx-md-1 {\n    margin-right: 0.25rem !important;\n    margin-left: 0.25rem !important;\n  }\n  .mx-md-2 {\n    margin-right: 0.5rem !important;\n    margin-left: 0.5rem !important;\n  }\n  .mx-md-3 {\n    margin-right: 1rem !important;\n    margin-left: 1rem !important;\n  }\n  .mx-md-4 {\n    margin-right: 1.5rem !important;\n    margin-left: 1.5rem !important;\n  }\n  .mx-md-5 {\n    margin-right: 3rem !important;\n    margin-left: 3rem !important;\n  }\n  .mx-md-auto {\n    margin-right: auto !important;\n    margin-left: auto !important;\n  }\n  .my-md-0 {\n    margin-top: 0 !important;\n    margin-bottom: 0 !important;\n  }\n  .my-md-1 {\n    margin-top: 0.25rem !important;\n    margin-bottom: 0.25rem !important;\n  }\n  .my-md-2 {\n    margin-top: 0.5rem !important;\n    margin-bottom: 0.5rem !important;\n  }\n  .my-md-3 {\n    margin-top: 1rem !important;\n    margin-bottom: 1rem !important;\n  }\n  .my-md-4 {\n    margin-top: 1.5rem !important;\n    margin-bottom: 1.5rem !important;\n  }\n  .my-md-5 {\n    margin-top: 3rem !important;\n    margin-bottom: 3rem !important;\n  }\n  .my-md-auto {\n    margin-top: auto !important;\n    margin-bottom: auto !important;\n  }\n  .mt-md-0 {\n    margin-top: 0 !important;\n  }\n  .mt-md-1 {\n    margin-top: 0.25rem !important;\n  }\n  .mt-md-2 {\n    margin-top: 0.5rem !important;\n  }\n  .mt-md-3 {\n    margin-top: 1rem !important;\n  }\n  .mt-md-4 {\n    margin-top: 1.5rem !important;\n  }\n  .mt-md-5 {\n    margin-top: 3rem !important;\n  }\n  .mt-md-auto {\n    margin-top: auto !important;\n  }\n  .me-md-0 {\n    margin-right: 0 !important;\n  }\n  .me-md-1 {\n    margin-right: 0.25rem !important;\n  }\n  .me-md-2 {\n    margin-right: 0.5rem !important;\n  }\n  .me-md-3 {\n    margin-right: 1rem !important;\n  }\n  .me-md-4 {\n    margin-right: 1.5rem !important;\n  }\n  .me-md-5 {\n    margin-right: 3rem !important;\n  }\n  .me-md-auto {\n    margin-right: auto !important;\n  }\n  .mb-md-0 {\n    margin-bottom: 0 !important;\n  }\n  .mb-md-1 {\n    margin-bottom: 0.25rem !important;\n  }\n  .mb-md-2 {\n    margin-bottom: 0.5rem !important;\n  }\n  .mb-md-3 {\n    margin-bottom: 1rem !important;\n  }\n  .mb-md-4 {\n    margin-bottom: 1.5rem !important;\n  }\n  .mb-md-5 {\n    margin-bottom: 3rem !important;\n  }\n  .mb-md-auto {\n    margin-bottom: auto !important;\n  }\n  .ms-md-0 {\n    margin-left: 0 !important;\n  }\n  .ms-md-1 {\n    margin-left: 0.25rem !important;\n  }\n  .ms-md-2 {\n    margin-left: 0.5rem !important;\n  }\n  .ms-md-3 {\n    margin-left: 1rem !important;\n  }\n  .ms-md-4 {\n    margin-left: 1.5rem !important;\n  }\n  .ms-md-5 {\n    margin-left: 3rem !important;\n  }\n  .ms-md-auto {\n    margin-left: auto !important;\n  }\n  .p-md-0 {\n    padding: 0 !important;\n  }\n  .p-md-1 {\n    padding: 0.25rem !important;\n  }\n  .p-md-2 {\n    padding: 0.5rem !important;\n  }\n  .p-md-3 {\n    padding: 1rem !important;\n  }\n  .p-md-4 {\n    padding: 1.5rem !important;\n  }\n  .p-md-5 {\n    padding: 3rem !important;\n  }\n  .px-md-0 {\n    padding-right: 0 !important;\n    padding-left: 0 !important;\n  }\n  .px-md-1 {\n    padding-right: 0.25rem !important;\n    padding-left: 0.25rem !important;\n  }\n  .px-md-2 {\n    padding-right: 0.5rem !important;\n    padding-left: 0.5rem !important;\n  }\n  .px-md-3 {\n    padding-right: 1rem !important;\n    padding-left: 1rem !important;\n  }\n  .px-md-4 {\n    padding-right: 1.5rem !important;\n    padding-left: 1.5rem !important;\n  }\n  .px-md-5 {\n    padding-right: 3rem !important;\n    padding-left: 3rem !important;\n  }\n  .py-md-0 {\n    padding-top: 0 !important;\n    padding-bottom: 0 !important;\n  }\n  .py-md-1 {\n    padding-top: 0.25rem !important;\n    padding-bottom: 0.25rem !important;\n  }\n  .py-md-2 {\n    padding-top: 0.5rem !important;\n    padding-bottom: 0.5rem !important;\n  }\n  .py-md-3 {\n    padding-top: 1rem !important;\n    padding-bottom: 1rem !important;\n  }\n  .py-md-4 {\n    padding-top: 1.5rem !important;\n    padding-bottom: 1.5rem !important;\n  }\n  .py-md-5 {\n    padding-top: 3rem !important;\n    padding-bottom: 3rem !important;\n  }\n  .pt-md-0 {\n    padding-top: 0 !important;\n  }\n  .pt-md-1 {\n    padding-top: 0.25rem !important;\n  }\n  .pt-md-2 {\n    padding-top: 0.5rem !important;\n  }\n  .pt-md-3 {\n    padding-top: 1rem !important;\n  }\n  .pt-md-4 {\n    padding-top: 1.5rem !important;\n  }\n  .pt-md-5 {\n    padding-top: 3rem !important;\n  }\n  .pe-md-0 {\n    padding-right: 0 !important;\n  }\n  .pe-md-1 {\n    padding-right: 0.25rem !important;\n  }\n  .pe-md-2 {\n    padding-right: 0.5rem !important;\n  }\n  .pe-md-3 {\n    padding-right: 1rem !important;\n  }\n  .pe-md-4 {\n    padding-right: 1.5rem !important;\n  }\n  .pe-md-5 {\n    padding-right: 3rem !important;\n  }\n  .pb-md-0 {\n    padding-bottom: 0 !important;\n  }\n  .pb-md-1 {\n    padding-bottom: 0.25rem !important;\n  }\n  .pb-md-2 {\n    padding-bottom: 0.5rem !important;\n  }\n  .pb-md-3 {\n    padding-bottom: 1rem !important;\n  }\n  .pb-md-4 {\n    padding-bottom: 1.5rem !important;\n  }\n  .pb-md-5 {\n    padding-bottom: 3rem !important;\n  }\n  .ps-md-0 {\n    padding-left: 0 !important;\n  }\n  .ps-md-1 {\n    padding-left: 0.25rem !important;\n  }\n  .ps-md-2 {\n    padding-left: 0.5rem !important;\n  }\n  .ps-md-3 {\n    padding-left: 1rem !important;\n  }\n  .ps-md-4 {\n    padding-left: 1.5rem !important;\n  }\n  .ps-md-5 {\n    padding-left: 3rem !important;\n  }\n  .text-md-start {\n    text-align: left !important;\n  }\n  .text-md-end {\n    text-align: right !important;\n  }\n  .text-md-center {\n    text-align: center !important;\n  }\n}\n\n@media (min-width: 992px) {\n  .float-lg-start {\n    float: left !important;\n  }\n  .float-lg-end {\n    float: right !important;\n  }\n  .float-lg-none {\n    float: none !important;\n  }\n  .d-lg-inline {\n    display: inline !important;\n  }\n  .d-lg-inline-block {\n    display: inline-block !important;\n  }\n  .d-lg-block {\n    display: block !important;\n  }\n  .d-lg-grid {\n    display: grid !important;\n  }\n  .d-lg-table {\n    display: table !important;\n  }\n  .d-lg-table-row {\n    display: table-row !important;\n  }\n  .d-lg-table-cell {\n    display: table-cell !important;\n  }\n  .d-lg-flex {\n    display: -ms-flexbox !important;\n    display: flex !important;\n  }\n  .d-lg-inline-flex {\n    display: -ms-inline-flexbox !important;\n    display: inline-flex !important;\n  }\n  .d-lg-none {\n    display: none !important;\n  }\n  .flex-lg-fill {\n    -ms-flex: 1 1 auto !important;\n    flex: 1 1 auto !important;\n  }\n  .flex-lg-row {\n    -ms-flex-direction: row !important;\n    flex-direction: row !important;\n  }\n  .flex-lg-column {\n    -ms-flex-direction: column !important;\n    flex-direction: column !important;\n  }\n  .flex-lg-row-reverse {\n    -ms-flex-direction: row-reverse !important;\n    flex-direction: row-reverse !important;\n  }\n  .flex-lg-column-reverse {\n    -ms-flex-direction: column-reverse !important;\n    flex-direction: column-reverse !important;\n  }\n  .flex-lg-grow-0 {\n    -ms-flex-positive: 0 !important;\n    flex-grow: 0 !important;\n  }\n  .flex-lg-grow-1 {\n    -ms-flex-positive: 1 !important;\n    flex-grow: 1 !important;\n  }\n  .flex-lg-shrink-0 {\n    -ms-flex-negative: 0 !important;\n    flex-shrink: 0 !important;\n  }\n  .flex-lg-shrink-1 {\n    -ms-flex-negative: 1 !important;\n    flex-shrink: 1 !important;\n  }\n  .flex-lg-wrap {\n    -ms-flex-wrap: wrap !important;\n    flex-wrap: wrap !important;\n  }\n  .flex-lg-nowrap {\n    -ms-flex-wrap: nowrap !important;\n    flex-wrap: nowrap !important;\n  }\n  .flex-lg-wrap-reverse {\n    -ms-flex-wrap: wrap-reverse !important;\n    flex-wrap: wrap-reverse !important;\n  }\n  .gap-lg-0 {\n    gap: 0 !important;\n  }\n  .gap-lg-1 {\n    gap: 0.25rem !important;\n  }\n  .gap-lg-2 {\n    gap: 0.5rem !important;\n  }\n  .gap-lg-3 {\n    gap: 1rem !important;\n  }\n  .gap-lg-4 {\n    gap: 1.5rem !important;\n  }\n  .gap-lg-5 {\n    gap: 3rem !important;\n  }\n  .justify-content-lg-start {\n    -ms-flex-pack: start !important;\n    justify-content: flex-start !important;\n  }\n  .justify-content-lg-end {\n    -ms-flex-pack: end !important;\n    justify-content: flex-end !important;\n  }\n  .justify-content-lg-center {\n    -ms-flex-pack: center !important;\n    justify-content: center !important;\n  }\n  .justify-content-lg-between {\n    -ms-flex-pack: justify !important;\n    justify-content: space-between !important;\n  }\n  .justify-content-lg-around {\n    -ms-flex-pack: distribute !important;\n    justify-content: space-around !important;\n  }\n  .justify-content-lg-evenly {\n    -ms-flex-pack: space-evenly !important;\n    justify-content: space-evenly !important;\n  }\n  .align-items-lg-start {\n    -ms-flex-align: start !important;\n    align-items: flex-start !important;\n  }\n  .align-items-lg-end {\n    -ms-flex-align: end !important;\n    align-items: flex-end !important;\n  }\n  .align-items-lg-center {\n    -ms-flex-align: center !important;\n    align-items: center !important;\n  }\n  .align-items-lg-baseline {\n    -ms-flex-align: baseline !important;\n    align-items: baseline !important;\n  }\n  .align-items-lg-stretch {\n    -ms-flex-align: stretch !important;\n    align-items: stretch !important;\n  }\n  .align-content-lg-start {\n    -ms-flex-line-pack: start !important;\n    align-content: flex-start !important;\n  }\n  .align-content-lg-end {\n    -ms-flex-line-pack: end !important;\n    align-content: flex-end !important;\n  }\n  .align-content-lg-center {\n    -ms-flex-line-pack: center !important;\n    align-content: center !important;\n  }\n  .align-content-lg-between {\n    -ms-flex-line-pack: justify !important;\n    align-content: space-between !important;\n  }\n  .align-content-lg-around {\n    -ms-flex-line-pack: distribute !important;\n    align-content: space-around !important;\n  }\n  .align-content-lg-stretch {\n    -ms-flex-line-pack: stretch !important;\n    align-content: stretch !important;\n  }\n  .align-self-lg-auto {\n    -ms-flex-item-align: auto !important;\n    align-self: auto !important;\n  }\n  .align-self-lg-start {\n    -ms-flex-item-align: start !important;\n    align-self: flex-start !important;\n  }\n  .align-self-lg-end {\n    -ms-flex-item-align: end !important;\n    align-self: flex-end !important;\n  }\n  .align-self-lg-center {\n    -ms-flex-item-align: center !important;\n    align-self: center !important;\n  }\n  .align-self-lg-baseline {\n    -ms-flex-item-align: baseline !important;\n    align-self: baseline !important;\n  }\n  .align-self-lg-stretch {\n    -ms-flex-item-align: stretch !important;\n    align-self: stretch !important;\n  }\n  .order-lg-first {\n    -ms-flex-order: -1 !important;\n    order: -1 !important;\n  }\n  .order-lg-0 {\n    -ms-flex-order: 0 !important;\n    order: 0 !important;\n  }\n  .order-lg-1 {\n    -ms-flex-order: 1 !important;\n    order: 1 !important;\n  }\n  .order-lg-2 {\n    -ms-flex-order: 2 !important;\n    order: 2 !important;\n  }\n  .order-lg-3 {\n    -ms-flex-order: 3 !important;\n    order: 3 !important;\n  }\n  .order-lg-4 {\n    -ms-flex-order: 4 !important;\n    order: 4 !important;\n  }\n  .order-lg-5 {\n    -ms-flex-order: 5 !important;\n    order: 5 !important;\n  }\n  .order-lg-last {\n    -ms-flex-order: 6 !important;\n    order: 6 !important;\n  }\n  .m-lg-0 {\n    margin: 0 !important;\n  }\n  .m-lg-1 {\n    margin: 0.25rem !important;\n  }\n  .m-lg-2 {\n    margin: 0.5rem !important;\n  }\n  .m-lg-3 {\n    margin: 1rem !important;\n  }\n  .m-lg-4 {\n    margin: 1.5rem !important;\n  }\n  .m-lg-5 {\n    margin: 3rem !important;\n  }\n  .m-lg-auto {\n    margin: auto !important;\n  }\n  .mx-lg-0 {\n    margin-right: 0 !important;\n    margin-left: 0 !important;\n  }\n  .mx-lg-1 {\n    margin-right: 0.25rem !important;\n    margin-left: 0.25rem !important;\n  }\n  .mx-lg-2 {\n    margin-right: 0.5rem !important;\n    margin-left: 0.5rem !important;\n  }\n  .mx-lg-3 {\n    margin-right: 1rem !important;\n    margin-left: 1rem !important;\n  }\n  .mx-lg-4 {\n    margin-right: 1.5rem !important;\n    margin-left: 1.5rem !important;\n  }\n  .mx-lg-5 {\n    margin-right: 3rem !important;\n    margin-left: 3rem !important;\n  }\n  .mx-lg-auto {\n    margin-right: auto !important;\n    margin-left: auto !important;\n  }\n  .my-lg-0 {\n    margin-top: 0 !important;\n    margin-bottom: 0 !important;\n  }\n  .my-lg-1 {\n    margin-top: 0.25rem !important;\n    margin-bottom: 0.25rem !important;\n  }\n  .my-lg-2 {\n    margin-top: 0.5rem !important;\n    margin-bottom: 0.5rem !important;\n  }\n  .my-lg-3 {\n    margin-top: 1rem !important;\n    margin-bottom: 1rem !important;\n  }\n  .my-lg-4 {\n    margin-top: 1.5rem !important;\n    margin-bottom: 1.5rem !important;\n  }\n  .my-lg-5 {\n    margin-top: 3rem !important;\n    margin-bottom: 3rem !important;\n  }\n  .my-lg-auto {\n    margin-top: auto !important;\n    margin-bottom: auto !important;\n  }\n  .mt-lg-0 {\n    margin-top: 0 !important;\n  }\n  .mt-lg-1 {\n    margin-top: 0.25rem !important;\n  }\n  .mt-lg-2 {\n    margin-top: 0.5rem !important;\n  }\n  .mt-lg-3 {\n    margin-top: 1rem !important;\n  }\n  .mt-lg-4 {\n    margin-top: 1.5rem !important;\n  }\n  .mt-lg-5 {\n    margin-top: 3rem !important;\n  }\n  .mt-lg-auto {\n    margin-top: auto !important;\n  }\n  .me-lg-0 {\n    margin-right: 0 !important;\n  }\n  .me-lg-1 {\n    margin-right: 0.25rem !important;\n  }\n  .me-lg-2 {\n    margin-right: 0.5rem !important;\n  }\n  .me-lg-3 {\n    margin-right: 1rem !important;\n  }\n  .me-lg-4 {\n    margin-right: 1.5rem !important;\n  }\n  .me-lg-5 {\n    margin-right: 3rem !important;\n  }\n  .me-lg-auto {\n    margin-right: auto !important;\n  }\n  .mb-lg-0 {\n    margin-bottom: 0 !important;\n  }\n  .mb-lg-1 {\n    margin-bottom: 0.25rem !important;\n  }\n  .mb-lg-2 {\n    margin-bottom: 0.5rem !important;\n  }\n  .mb-lg-3 {\n    margin-bottom: 1rem !important;\n  }\n  .mb-lg-4 {\n    margin-bottom: 1.5rem !important;\n  }\n  .mb-lg-5 {\n    margin-bottom: 3rem !important;\n  }\n  .mb-lg-auto {\n    margin-bottom: auto !important;\n  }\n  .ms-lg-0 {\n    margin-left: 0 !important;\n  }\n  .ms-lg-1 {\n    margin-left: 0.25rem !important;\n  }\n  .ms-lg-2 {\n    margin-left: 0.5rem !important;\n  }\n  .ms-lg-3 {\n    margin-left: 1rem !important;\n  }\n  .ms-lg-4 {\n    margin-left: 1.5rem !important;\n  }\n  .ms-lg-5 {\n    margin-left: 3rem !important;\n  }\n  .ms-lg-auto {\n    margin-left: auto !important;\n  }\n  .p-lg-0 {\n    padding: 0 !important;\n  }\n  .p-lg-1 {\n    padding: 0.25rem !important;\n  }\n  .p-lg-2 {\n    padding: 0.5rem !important;\n  }\n  .p-lg-3 {\n    padding: 1rem !important;\n  }\n  .p-lg-4 {\n    padding: 1.5rem !important;\n  }\n  .p-lg-5 {\n    padding: 3rem !important;\n  }\n  .px-lg-0 {\n    padding-right: 0 !important;\n    padding-left: 0 !important;\n  }\n  .px-lg-1 {\n    padding-right: 0.25rem !important;\n    padding-left: 0.25rem !important;\n  }\n  .px-lg-2 {\n    padding-right: 0.5rem !important;\n    padding-left: 0.5rem !important;\n  }\n  .px-lg-3 {\n    padding-right: 1rem !important;\n    padding-left: 1rem !important;\n  }\n  .px-lg-4 {\n    padding-right: 1.5rem !important;\n    padding-left: 1.5rem !important;\n  }\n  .px-lg-5 {\n    padding-right: 3rem !important;\n    padding-left: 3rem !important;\n  }\n  .py-lg-0 {\n    padding-top: 0 !important;\n    padding-bottom: 0 !important;\n  }\n  .py-lg-1 {\n    padding-top: 0.25rem !important;\n    padding-bottom: 0.25rem !important;\n  }\n  .py-lg-2 {\n    padding-top: 0.5rem !important;\n    padding-bottom: 0.5rem !important;\n  }\n  .py-lg-3 {\n    padding-top: 1rem !important;\n    padding-bottom: 1rem !important;\n  }\n  .py-lg-4 {\n    padding-top: 1.5rem !important;\n    padding-bottom: 1.5rem !important;\n  }\n  .py-lg-5 {\n    padding-top: 3rem !important;\n    padding-bottom: 3rem !important;\n  }\n  .pt-lg-0 {\n    padding-top: 0 !important;\n  }\n  .pt-lg-1 {\n    padding-top: 0.25rem !important;\n  }\n  .pt-lg-2 {\n    padding-top: 0.5rem !important;\n  }\n  .pt-lg-3 {\n    padding-top: 1rem !important;\n  }\n  .pt-lg-4 {\n    padding-top: 1.5rem !important;\n  }\n  .pt-lg-5 {\n    padding-top: 3rem !important;\n  }\n  .pe-lg-0 {\n    padding-right: 0 !important;\n  }\n  .pe-lg-1 {\n    padding-right: 0.25rem !important;\n  }\n  .pe-lg-2 {\n    padding-right: 0.5rem !important;\n  }\n  .pe-lg-3 {\n    padding-right: 1rem !important;\n  }\n  .pe-lg-4 {\n    padding-right: 1.5rem !important;\n  }\n  .pe-lg-5 {\n    padding-right: 3rem !important;\n  }\n  .pb-lg-0 {\n    padding-bottom: 0 !important;\n  }\n  .pb-lg-1 {\n    padding-bottom: 0.25rem !important;\n  }\n  .pb-lg-2 {\n    padding-bottom: 0.5rem !important;\n  }\n  .pb-lg-3 {\n    padding-bottom: 1rem !important;\n  }\n  .pb-lg-4 {\n    padding-bottom: 1.5rem !important;\n  }\n  .pb-lg-5 {\n    padding-bottom: 3rem !important;\n  }\n  .ps-lg-0 {\n    padding-left: 0 !important;\n  }\n  .ps-lg-1 {\n    padding-left: 0.25rem !important;\n  }\n  .ps-lg-2 {\n    padding-left: 0.5rem !important;\n  }\n  .ps-lg-3 {\n    padding-left: 1rem !important;\n  }\n  .ps-lg-4 {\n    padding-left: 1.5rem !important;\n  }\n  .ps-lg-5 {\n    padding-left: 3rem !important;\n  }\n  .text-lg-start {\n    text-align: left !important;\n  }\n  .text-lg-end {\n    text-align: right !important;\n  }\n  .text-lg-center {\n    text-align: center !important;\n  }\n}\n\n@media (min-width: 1200px) {\n  .float-xl-start {\n    float: left !important;\n  }\n  .float-xl-end {\n    float: right !important;\n  }\n  .float-xl-none {\n    float: none !important;\n  }\n  .d-xl-inline {\n    display: inline !important;\n  }\n  .d-xl-inline-block {\n    display: inline-block !important;\n  }\n  .d-xl-block {\n    display: block !important;\n  }\n  .d-xl-grid {\n    display: grid !important;\n  }\n  .d-xl-table {\n    display: table !important;\n  }\n  .d-xl-table-row {\n    display: table-row !important;\n  }\n  .d-xl-table-cell {\n    display: table-cell !important;\n  }\n  .d-xl-flex {\n    display: -ms-flexbox !important;\n    display: flex !important;\n  }\n  .d-xl-inline-flex {\n    display: -ms-inline-flexbox !important;\n    display: inline-flex !important;\n  }\n  .d-xl-none {\n    display: none !important;\n  }\n  .flex-xl-fill {\n    -ms-flex: 1 1 auto !important;\n    flex: 1 1 auto !important;\n  }\n  .flex-xl-row {\n    -ms-flex-direction: row !important;\n    flex-direction: row !important;\n  }\n  .flex-xl-column {\n    -ms-flex-direction: column !important;\n    flex-direction: column !important;\n  }\n  .flex-xl-row-reverse {\n    -ms-flex-direction: row-reverse !important;\n    flex-direction: row-reverse !important;\n  }\n  .flex-xl-column-reverse {\n    -ms-flex-direction: column-reverse !important;\n    flex-direction: column-reverse !important;\n  }\n  .flex-xl-grow-0 {\n    -ms-flex-positive: 0 !important;\n    flex-grow: 0 !important;\n  }\n  .flex-xl-grow-1 {\n    -ms-flex-positive: 1 !important;\n    flex-grow: 1 !important;\n  }\n  .flex-xl-shrink-0 {\n    -ms-flex-negative: 0 !important;\n    flex-shrink: 0 !important;\n  }\n  .flex-xl-shrink-1 {\n    -ms-flex-negative: 1 !important;\n    flex-shrink: 1 !important;\n  }\n  .flex-xl-wrap {\n    -ms-flex-wrap: wrap !important;\n    flex-wrap: wrap !important;\n  }\n  .flex-xl-nowrap {\n    -ms-flex-wrap: nowrap !important;\n    flex-wrap: nowrap !important;\n  }\n  .flex-xl-wrap-reverse {\n    -ms-flex-wrap: wrap-reverse !important;\n    flex-wrap: wrap-reverse !important;\n  }\n  .gap-xl-0 {\n    gap: 0 !important;\n  }\n  .gap-xl-1 {\n    gap: 0.25rem !important;\n  }\n  .gap-xl-2 {\n    gap: 0.5rem !important;\n  }\n  .gap-xl-3 {\n    gap: 1rem !important;\n  }\n  .gap-xl-4 {\n    gap: 1.5rem !important;\n  }\n  .gap-xl-5 {\n    gap: 3rem !important;\n  }\n  .justify-content-xl-start {\n    -ms-flex-pack: start !important;\n    justify-content: flex-start !important;\n  }\n  .justify-content-xl-end {\n    -ms-flex-pack: end !important;\n    justify-content: flex-end !important;\n  }\n  .justify-content-xl-center {\n    -ms-flex-pack: center !important;\n    justify-content: center !important;\n  }\n  .justify-content-xl-between {\n    -ms-flex-pack: justify !important;\n    justify-content: space-between !important;\n  }\n  .justify-content-xl-around {\n    -ms-flex-pack: distribute !important;\n    justify-content: space-around !important;\n  }\n  .justify-content-xl-evenly {\n    -ms-flex-pack: space-evenly !important;\n    justify-content: space-evenly !important;\n  }\n  .align-items-xl-start {\n    -ms-flex-align: start !important;\n    align-items: flex-start !important;\n  }\n  .align-items-xl-end {\n    -ms-flex-align: end !important;\n    align-items: flex-end !important;\n  }\n  .align-items-xl-center {\n    -ms-flex-align: center !important;\n    align-items: center !important;\n  }\n  .align-items-xl-baseline {\n    -ms-flex-align: baseline !important;\n    align-items: baseline !important;\n  }\n  .align-items-xl-stretch {\n    -ms-flex-align: stretch !important;\n    align-items: stretch !important;\n  }\n  .align-content-xl-start {\n    -ms-flex-line-pack: start !important;\n    align-content: flex-start !important;\n  }\n  .align-content-xl-end {\n    -ms-flex-line-pack: end !important;\n    align-content: flex-end !important;\n  }\n  .align-content-xl-center {\n    -ms-flex-line-pack: center !important;\n    align-content: center !important;\n  }\n  .align-content-xl-between {\n    -ms-flex-line-pack: justify !important;\n    align-content: space-between !important;\n  }\n  .align-content-xl-around {\n    -ms-flex-line-pack: distribute !important;\n    align-content: space-around !important;\n  }\n  .align-content-xl-stretch {\n    -ms-flex-line-pack: stretch !important;\n    align-content: stretch !important;\n  }\n  .align-self-xl-auto {\n    -ms-flex-item-align: auto !important;\n    align-self: auto !important;\n  }\n  .align-self-xl-start {\n    -ms-flex-item-align: start !important;\n    align-self: flex-start !important;\n  }\n  .align-self-xl-end {\n    -ms-flex-item-align: end !important;\n    align-self: flex-end !important;\n  }\n  .align-self-xl-center {\n    -ms-flex-item-align: center !important;\n    align-self: center !important;\n  }\n  .align-self-xl-baseline {\n    -ms-flex-item-align: baseline !important;\n    align-self: baseline !important;\n  }\n  .align-self-xl-stretch {\n    -ms-flex-item-align: stretch !important;\n    align-self: stretch !important;\n  }\n  .order-xl-first {\n    -ms-flex-order: -1 !important;\n    order: -1 !important;\n  }\n  .order-xl-0 {\n    -ms-flex-order: 0 !important;\n    order: 0 !important;\n  }\n  .order-xl-1 {\n    -ms-flex-order: 1 !important;\n    order: 1 !important;\n  }\n  .order-xl-2 {\n    -ms-flex-order: 2 !important;\n    order: 2 !important;\n  }\n  .order-xl-3 {\n    -ms-flex-order: 3 !important;\n    order: 3 !important;\n  }\n  .order-xl-4 {\n    -ms-flex-order: 4 !important;\n    order: 4 !important;\n  }\n  .order-xl-5 {\n    -ms-flex-order: 5 !important;\n    order: 5 !important;\n  }\n  .order-xl-last {\n    -ms-flex-order: 6 !important;\n    order: 6 !important;\n  }\n  .m-xl-0 {\n    margin: 0 !important;\n  }\n  .m-xl-1 {\n    margin: 0.25rem !important;\n  }\n  .m-xl-2 {\n    margin: 0.5rem !important;\n  }\n  .m-xl-3 {\n    margin: 1rem !important;\n  }\n  .m-xl-4 {\n    margin: 1.5rem !important;\n  }\n  .m-xl-5 {\n    margin: 3rem !important;\n  }\n  .m-xl-auto {\n    margin: auto !important;\n  }\n  .mx-xl-0 {\n    margin-right: 0 !important;\n    margin-left: 0 !important;\n  }\n  .mx-xl-1 {\n    margin-right: 0.25rem !important;\n    margin-left: 0.25rem !important;\n  }\n  .mx-xl-2 {\n    margin-right: 0.5rem !important;\n    margin-left: 0.5rem !important;\n  }\n  .mx-xl-3 {\n    margin-right: 1rem !important;\n    margin-left: 1rem !important;\n  }\n  .mx-xl-4 {\n    margin-right: 1.5rem !important;\n    margin-left: 1.5rem !important;\n  }\n  .mx-xl-5 {\n    margin-right: 3rem !important;\n    margin-left: 3rem !important;\n  }\n  .mx-xl-auto {\n    margin-right: auto !important;\n    margin-left: auto !important;\n  }\n  .my-xl-0 {\n    margin-top: 0 !important;\n    margin-bottom: 0 !important;\n  }\n  .my-xl-1 {\n    margin-top: 0.25rem !important;\n    margin-bottom: 0.25rem !important;\n  }\n  .my-xl-2 {\n    margin-top: 0.5rem !important;\n    margin-bottom: 0.5rem !important;\n  }\n  .my-xl-3 {\n    margin-top: 1rem !important;\n    margin-bottom: 1rem !important;\n  }\n  .my-xl-4 {\n    margin-top: 1.5rem !important;\n    margin-bottom: 1.5rem !important;\n  }\n  .my-xl-5 {\n    margin-top: 3rem !important;\n    margin-bottom: 3rem !important;\n  }\n  .my-xl-auto {\n    margin-top: auto !important;\n    margin-bottom: auto !important;\n  }\n  .mt-xl-0 {\n    margin-top: 0 !important;\n  }\n  .mt-xl-1 {\n    margin-top: 0.25rem !important;\n  }\n  .mt-xl-2 {\n    margin-top: 0.5rem !important;\n  }\n  .mt-xl-3 {\n    margin-top: 1rem !important;\n  }\n  .mt-xl-4 {\n    margin-top: 1.5rem !important;\n  }\n  .mt-xl-5 {\n    margin-top: 3rem !important;\n  }\n  .mt-xl-auto {\n    margin-top: auto !important;\n  }\n  .me-xl-0 {\n    margin-right: 0 !important;\n  }\n  .me-xl-1 {\n    margin-right: 0.25rem !important;\n  }\n  .me-xl-2 {\n    margin-right: 0.5rem !important;\n  }\n  .me-xl-3 {\n    margin-right: 1rem !important;\n  }\n  .me-xl-4 {\n    margin-right: 1.5rem !important;\n  }\n  .me-xl-5 {\n    margin-right: 3rem !important;\n  }\n  .me-xl-auto {\n    margin-right: auto !important;\n  }\n  .mb-xl-0 {\n    margin-bottom: 0 !important;\n  }\n  .mb-xl-1 {\n    margin-bottom: 0.25rem !important;\n  }\n  .mb-xl-2 {\n    margin-bottom: 0.5rem !important;\n  }\n  .mb-xl-3 {\n    margin-bottom: 1rem !important;\n  }\n  .mb-xl-4 {\n    margin-bottom: 1.5rem !important;\n  }\n  .mb-xl-5 {\n    margin-bottom: 3rem !important;\n  }\n  .mb-xl-auto {\n    margin-bottom: auto !important;\n  }\n  .ms-xl-0 {\n    margin-left: 0 !important;\n  }\n  .ms-xl-1 {\n    margin-left: 0.25rem !important;\n  }\n  .ms-xl-2 {\n    margin-left: 0.5rem !important;\n  }\n  .ms-xl-3 {\n    margin-left: 1rem !important;\n  }\n  .ms-xl-4 {\n    margin-left: 1.5rem !important;\n  }\n  .ms-xl-5 {\n    margin-left: 3rem !important;\n  }\n  .ms-xl-auto {\n    margin-left: auto !important;\n  }\n  .p-xl-0 {\n    padding: 0 !important;\n  }\n  .p-xl-1 {\n    padding: 0.25rem !important;\n  }\n  .p-xl-2 {\n    padding: 0.5rem !important;\n  }\n  .p-xl-3 {\n    padding: 1rem !important;\n  }\n  .p-xl-4 {\n    padding: 1.5rem !important;\n  }\n  .p-xl-5 {\n    padding: 3rem !important;\n  }\n  .px-xl-0 {\n    padding-right: 0 !important;\n    padding-left: 0 !important;\n  }\n  .px-xl-1 {\n    padding-right: 0.25rem !important;\n    padding-left: 0.25rem !important;\n  }\n  .px-xl-2 {\n    padding-right: 0.5rem !important;\n    padding-left: 0.5rem !important;\n  }\n  .px-xl-3 {\n    padding-right: 1rem !important;\n    padding-left: 1rem !important;\n  }\n  .px-xl-4 {\n    padding-right: 1.5rem !important;\n    padding-left: 1.5rem !important;\n  }\n  .px-xl-5 {\n    padding-right: 3rem !important;\n    padding-left: 3rem !important;\n  }\n  .py-xl-0 {\n    padding-top: 0 !important;\n    padding-bottom: 0 !important;\n  }\n  .py-xl-1 {\n    padding-top: 0.25rem !important;\n    padding-bottom: 0.25rem !important;\n  }\n  .py-xl-2 {\n    padding-top: 0.5rem !important;\n    padding-bottom: 0.5rem !important;\n  }\n  .py-xl-3 {\n    padding-top: 1rem !important;\n    padding-bottom: 1rem !important;\n  }\n  .py-xl-4 {\n    padding-top: 1.5rem !important;\n    padding-bottom: 1.5rem !important;\n  }\n  .py-xl-5 {\n    padding-top: 3rem !important;\n    padding-bottom: 3rem !important;\n  }\n  .pt-xl-0 {\n    padding-top: 0 !important;\n  }\n  .pt-xl-1 {\n    padding-top: 0.25rem !important;\n  }\n  .pt-xl-2 {\n    padding-top: 0.5rem !important;\n  }\n  .pt-xl-3 {\n    padding-top: 1rem !important;\n  }\n  .pt-xl-4 {\n    padding-top: 1.5rem !important;\n  }\n  .pt-xl-5 {\n    padding-top: 3rem !important;\n  }\n  .pe-xl-0 {\n    padding-right: 0 !important;\n  }\n  .pe-xl-1 {\n    padding-right: 0.25rem !important;\n  }\n  .pe-xl-2 {\n    padding-right: 0.5rem !important;\n  }\n  .pe-xl-3 {\n    padding-right: 1rem !important;\n  }\n  .pe-xl-4 {\n    padding-right: 1.5rem !important;\n  }\n  .pe-xl-5 {\n    padding-right: 3rem !important;\n  }\n  .pb-xl-0 {\n    padding-bottom: 0 !important;\n  }\n  .pb-xl-1 {\n    padding-bottom: 0.25rem !important;\n  }\n  .pb-xl-2 {\n    padding-bottom: 0.5rem !important;\n  }\n  .pb-xl-3 {\n    padding-bottom: 1rem !important;\n  }\n  .pb-xl-4 {\n    padding-bottom: 1.5rem !important;\n  }\n  .pb-xl-5 {\n    padding-bottom: 3rem !important;\n  }\n  .ps-xl-0 {\n    padding-left: 0 !important;\n  }\n  .ps-xl-1 {\n    padding-left: 0.25rem !important;\n  }\n  .ps-xl-2 {\n    padding-left: 0.5rem !important;\n  }\n  .ps-xl-3 {\n    padding-left: 1rem !important;\n  }\n  .ps-xl-4 {\n    padding-left: 1.5rem !important;\n  }\n  .ps-xl-5 {\n    padding-left: 3rem !important;\n  }\n  .text-xl-start {\n    text-align: left !important;\n  }\n  .text-xl-end {\n    text-align: right !important;\n  }\n  .text-xl-center {\n    text-align: center !important;\n  }\n}\n\n@media (min-width: 1400px) {\n  .float-xxl-start {\n    float: left !important;\n  }\n  .float-xxl-end {\n    float: right !important;\n  }\n  .float-xxl-none {\n    float: none !important;\n  }\n  .d-xxl-inline {\n    display: inline !important;\n  }\n  .d-xxl-inline-block {\n    display: inline-block !important;\n  }\n  .d-xxl-block {\n    display: block !important;\n  }\n  .d-xxl-grid {\n    display: grid !important;\n  }\n  .d-xxl-table {\n    display: table !important;\n  }\n  .d-xxl-table-row {\n    display: table-row !important;\n  }\n  .d-xxl-table-cell {\n    display: table-cell !important;\n  }\n  .d-xxl-flex {\n    display: -ms-flexbox !important;\n    display: flex !important;\n  }\n  .d-xxl-inline-flex {\n    display: -ms-inline-flexbox !important;\n    display: inline-flex !important;\n  }\n  .d-xxl-none {\n    display: none !important;\n  }\n  .flex-xxl-fill {\n    -ms-flex: 1 1 auto !important;\n    flex: 1 1 auto !important;\n  }\n  .flex-xxl-row {\n    -ms-flex-direction: row !important;\n    flex-direction: row !important;\n  }\n  .flex-xxl-column {\n    -ms-flex-direction: column !important;\n    flex-direction: column !important;\n  }\n  .flex-xxl-row-reverse {\n    -ms-flex-direction: row-reverse !important;\n    flex-direction: row-reverse !important;\n  }\n  .flex-xxl-column-reverse {\n    -ms-flex-direction: column-reverse !important;\n    flex-direction: column-reverse !important;\n  }\n  .flex-xxl-grow-0 {\n    -ms-flex-positive: 0 !important;\n    flex-grow: 0 !important;\n  }\n  .flex-xxl-grow-1 {\n    -ms-flex-positive: 1 !important;\n    flex-grow: 1 !important;\n  }\n  .flex-xxl-shrink-0 {\n    -ms-flex-negative: 0 !important;\n    flex-shrink: 0 !important;\n  }\n  .flex-xxl-shrink-1 {\n    -ms-flex-negative: 1 !important;\n    flex-shrink: 1 !important;\n  }\n  .flex-xxl-wrap {\n    -ms-flex-wrap: wrap !important;\n    flex-wrap: wrap !important;\n  }\n  .flex-xxl-nowrap {\n    -ms-flex-wrap: nowrap !important;\n    flex-wrap: nowrap !important;\n  }\n  .flex-xxl-wrap-reverse {\n    -ms-flex-wrap: wrap-reverse !important;\n    flex-wrap: wrap-reverse !important;\n  }\n  .gap-xxl-0 {\n    gap: 0 !important;\n  }\n  .gap-xxl-1 {\n    gap: 0.25rem !important;\n  }\n  .gap-xxl-2 {\n    gap: 0.5rem !important;\n  }\n  .gap-xxl-3 {\n    gap: 1rem !important;\n  }\n  .gap-xxl-4 {\n    gap: 1.5rem !important;\n  }\n  .gap-xxl-5 {\n    gap: 3rem !important;\n  }\n  .justify-content-xxl-start {\n    -ms-flex-pack: start !important;\n    justify-content: flex-start !important;\n  }\n  .justify-content-xxl-end {\n    -ms-flex-pack: end !important;\n    justify-content: flex-end !important;\n  }\n  .justify-content-xxl-center {\n    -ms-flex-pack: center !important;\n    justify-content: center !important;\n  }\n  .justify-content-xxl-between {\n    -ms-flex-pack: justify !important;\n    justify-content: space-between !important;\n  }\n  .justify-content-xxl-around {\n    -ms-flex-pack: distribute !important;\n    justify-content: space-around !important;\n  }\n  .justify-content-xxl-evenly {\n    -ms-flex-pack: space-evenly !important;\n    justify-content: space-evenly !important;\n  }\n  .align-items-xxl-start {\n    -ms-flex-align: start !important;\n    align-items: flex-start !important;\n  }\n  .align-items-xxl-end {\n    -ms-flex-align: end !important;\n    align-items: flex-end !important;\n  }\n  .align-items-xxl-center {\n    -ms-flex-align: center !important;\n    align-items: center !important;\n  }\n  .align-items-xxl-baseline {\n    -ms-flex-align: baseline !important;\n    align-items: baseline !important;\n  }\n  .align-items-xxl-stretch {\n    -ms-flex-align: stretch !important;\n    align-items: stretch !important;\n  }\n  .align-content-xxl-start {\n    -ms-flex-line-pack: start !important;\n    align-content: flex-start !important;\n  }\n  .align-content-xxl-end {\n    -ms-flex-line-pack: end !important;\n    align-content: flex-end !important;\n  }\n  .align-content-xxl-center {\n    -ms-flex-line-pack: center !important;\n    align-content: center !important;\n  }\n  .align-content-xxl-between {\n    -ms-flex-line-pack: justify !important;\n    align-content: space-between !important;\n  }\n  .align-content-xxl-around {\n    -ms-flex-line-pack: distribute !important;\n    align-content: space-around !important;\n  }\n  .align-content-xxl-stretch {\n    -ms-flex-line-pack: stretch !important;\n    align-content: stretch !important;\n  }\n  .align-self-xxl-auto {\n    -ms-flex-item-align: auto !important;\n    align-self: auto !important;\n  }\n  .align-self-xxl-start {\n    -ms-flex-item-align: start !important;\n    align-self: flex-start !important;\n  }\n  .align-self-xxl-end {\n    -ms-flex-item-align: end !important;\n    align-self: flex-end !important;\n  }\n  .align-self-xxl-center {\n    -ms-flex-item-align: center !important;\n    align-self: center !important;\n  }\n  .align-self-xxl-baseline {\n    -ms-flex-item-align: baseline !important;\n    align-self: baseline !important;\n  }\n  .align-self-xxl-stretch {\n    -ms-flex-item-align: stretch !important;\n    align-self: stretch !important;\n  }\n  .order-xxl-first {\n    -ms-flex-order: -1 !important;\n    order: -1 !important;\n  }\n  .order-xxl-0 {\n    -ms-flex-order: 0 !important;\n    order: 0 !important;\n  }\n  .order-xxl-1 {\n    -ms-flex-order: 1 !important;\n    order: 1 !important;\n  }\n  .order-xxl-2 {\n    -ms-flex-order: 2 !important;\n    order: 2 !important;\n  }\n  .order-xxl-3 {\n    -ms-flex-order: 3 !important;\n    order: 3 !important;\n  }\n  .order-xxl-4 {\n    -ms-flex-order: 4 !important;\n    order: 4 !important;\n  }\n  .order-xxl-5 {\n    -ms-flex-order: 5 !important;\n    order: 5 !important;\n  }\n  .order-xxl-last {\n    -ms-flex-order: 6 !important;\n    order: 6 !important;\n  }\n  .m-xxl-0 {\n    margin: 0 !important;\n  }\n  .m-xxl-1 {\n    margin: 0.25rem !important;\n  }\n  .m-xxl-2 {\n    margin: 0.5rem !important;\n  }\n  .m-xxl-3 {\n    margin: 1rem !important;\n  }\n  .m-xxl-4 {\n    margin: 1.5rem !important;\n  }\n  .m-xxl-5 {\n    margin: 3rem !important;\n  }\n  .m-xxl-auto {\n    margin: auto !important;\n  }\n  .mx-xxl-0 {\n    margin-right: 0 !important;\n    margin-left: 0 !important;\n  }\n  .mx-xxl-1 {\n    margin-right: 0.25rem !important;\n    margin-left: 0.25rem !important;\n  }\n  .mx-xxl-2 {\n    margin-right: 0.5rem !important;\n    margin-left: 0.5rem !important;\n  }\n  .mx-xxl-3 {\n    margin-right: 1rem !important;\n    margin-left: 1rem !important;\n  }\n  .mx-xxl-4 {\n    margin-right: 1.5rem !important;\n    margin-left: 1.5rem !important;\n  }\n  .mx-xxl-5 {\n    margin-right: 3rem !important;\n    margin-left: 3rem !important;\n  }\n  .mx-xxl-auto {\n    margin-right: auto !important;\n    margin-left: auto !important;\n  }\n  .my-xxl-0 {\n    margin-top: 0 !important;\n    margin-bottom: 0 !important;\n  }\n  .my-xxl-1 {\n    margin-top: 0.25rem !important;\n    margin-bottom: 0.25rem !important;\n  }\n  .my-xxl-2 {\n    margin-top: 0.5rem !important;\n    margin-bottom: 0.5rem !important;\n  }\n  .my-xxl-3 {\n    margin-top: 1rem !important;\n    margin-bottom: 1rem !important;\n  }\n  .my-xxl-4 {\n    margin-top: 1.5rem !important;\n    margin-bottom: 1.5rem !important;\n  }\n  .my-xxl-5 {\n    margin-top: 3rem !important;\n    margin-bottom: 3rem !important;\n  }\n  .my-xxl-auto {\n    margin-top: auto !important;\n    margin-bottom: auto !important;\n  }\n  .mt-xxl-0 {\n    margin-top: 0 !important;\n  }\n  .mt-xxl-1 {\n    margin-top: 0.25rem !important;\n  }\n  .mt-xxl-2 {\n    margin-top: 0.5rem !important;\n  }\n  .mt-xxl-3 {\n    margin-top: 1rem !important;\n  }\n  .mt-xxl-4 {\n    margin-top: 1.5rem !important;\n  }\n  .mt-xxl-5 {\n    margin-top: 3rem !important;\n  }\n  .mt-xxl-auto {\n    margin-top: auto !important;\n  }\n  .me-xxl-0 {\n    margin-right: 0 !important;\n  }\n  .me-xxl-1 {\n    margin-right: 0.25rem !important;\n  }\n  .me-xxl-2 {\n    margin-right: 0.5rem !important;\n  }\n  .me-xxl-3 {\n    margin-right: 1rem !important;\n  }\n  .me-xxl-4 {\n    margin-right: 1.5rem !important;\n  }\n  .me-xxl-5 {\n    margin-right: 3rem !important;\n  }\n  .me-xxl-auto {\n    margin-right: auto !important;\n  }\n  .mb-xxl-0 {\n    margin-bottom: 0 !important;\n  }\n  .mb-xxl-1 {\n    margin-bottom: 0.25rem !important;\n  }\n  .mb-xxl-2 {\n    margin-bottom: 0.5rem !important;\n  }\n  .mb-xxl-3 {\n    margin-bottom: 1rem !important;\n  }\n  .mb-xxl-4 {\n    margin-bottom: 1.5rem !important;\n  }\n  .mb-xxl-5 {\n    margin-bottom: 3rem !important;\n  }\n  .mb-xxl-auto {\n    margin-bottom: auto !important;\n  }\n  .ms-xxl-0 {\n    margin-left: 0 !important;\n  }\n  .ms-xxl-1 {\n    margin-left: 0.25rem !important;\n  }\n  .ms-xxl-2 {\n    margin-left: 0.5rem !important;\n  }\n  .ms-xxl-3 {\n    margin-left: 1rem !important;\n  }\n  .ms-xxl-4 {\n    margin-left: 1.5rem !important;\n  }\n  .ms-xxl-5 {\n    margin-left: 3rem !important;\n  }\n  .ms-xxl-auto {\n    margin-left: auto !important;\n  }\n  .p-xxl-0 {\n    padding: 0 !important;\n  }\n  .p-xxl-1 {\n    padding: 0.25rem !important;\n  }\n  .p-xxl-2 {\n    padding: 0.5rem !important;\n  }\n  .p-xxl-3 {\n    padding: 1rem !important;\n  }\n  .p-xxl-4 {\n    padding: 1.5rem !important;\n  }\n  .p-xxl-5 {\n    padding: 3rem !important;\n  }\n  .px-xxl-0 {\n    padding-right: 0 !important;\n    padding-left: 0 !important;\n  }\n  .px-xxl-1 {\n    padding-right: 0.25rem !important;\n    padding-left: 0.25rem !important;\n  }\n  .px-xxl-2 {\n    padding-right: 0.5rem !important;\n    padding-left: 0.5rem !important;\n  }\n  .px-xxl-3 {\n    padding-right: 1rem !important;\n    padding-left: 1rem !important;\n  }\n  .px-xxl-4 {\n    padding-right: 1.5rem !important;\n    padding-left: 1.5rem !important;\n  }\n  .px-xxl-5 {\n    padding-right: 3rem !important;\n    padding-left: 3rem !important;\n  }\n  .py-xxl-0 {\n    padding-top: 0 !important;\n    padding-bottom: 0 !important;\n  }\n  .py-xxl-1 {\n    padding-top: 0.25rem !important;\n    padding-bottom: 0.25rem !important;\n  }\n  .py-xxl-2 {\n    padding-top: 0.5rem !important;\n    padding-bottom: 0.5rem !important;\n  }\n  .py-xxl-3 {\n    padding-top: 1rem !important;\n    padding-bottom: 1rem !important;\n  }\n  .py-xxl-4 {\n    padding-top: 1.5rem !important;\n    padding-bottom: 1.5rem !important;\n  }\n  .py-xxl-5 {\n    padding-top: 3rem !important;\n    padding-bottom: 3rem !important;\n  }\n  .pt-xxl-0 {\n    padding-top: 0 !important;\n  }\n  .pt-xxl-1 {\n    padding-top: 0.25rem !important;\n  }\n  .pt-xxl-2 {\n    padding-top: 0.5rem !important;\n  }\n  .pt-xxl-3 {\n    padding-top: 1rem !important;\n  }\n  .pt-xxl-4 {\n    padding-top: 1.5rem !important;\n  }\n  .pt-xxl-5 {\n    padding-top: 3rem !important;\n  }\n  .pe-xxl-0 {\n    padding-right: 0 !important;\n  }\n  .pe-xxl-1 {\n    padding-right: 0.25rem !important;\n  }\n  .pe-xxl-2 {\n    padding-right: 0.5rem !important;\n  }\n  .pe-xxl-3 {\n    padding-right: 1rem !important;\n  }\n  .pe-xxl-4 {\n    padding-right: 1.5rem !important;\n  }\n  .pe-xxl-5 {\n    padding-right: 3rem !important;\n  }\n  .pb-xxl-0 {\n    padding-bottom: 0 !important;\n  }\n  .pb-xxl-1 {\n    padding-bottom: 0.25rem !important;\n  }\n  .pb-xxl-2 {\n    padding-bottom: 0.5rem !important;\n  }\n  .pb-xxl-3 {\n    padding-bottom: 1rem !important;\n  }\n  .pb-xxl-4 {\n    padding-bottom: 1.5rem !important;\n  }\n  .pb-xxl-5 {\n    padding-bottom: 3rem !important;\n  }\n  .ps-xxl-0 {\n    padding-left: 0 !important;\n  }\n  .ps-xxl-1 {\n    padding-left: 0.25rem !important;\n  }\n  .ps-xxl-2 {\n    padding-left: 0.5rem !important;\n  }\n  .ps-xxl-3 {\n    padding-left: 1rem !important;\n  }\n  .ps-xxl-4 {\n    padding-left: 1.5rem !important;\n  }\n  .ps-xxl-5 {\n    padding-left: 3rem !important;\n  }\n  .text-xxl-start {\n    text-align: left !important;\n  }\n  .text-xxl-end {\n    text-align: right !important;\n  }\n  .text-xxl-center {\n    text-align: center !important;\n  }\n}\n\n@media (min-width: 1200px) {\n  .fs-1 {\n    font-size: 2.5rem !important;\n  }\n  .fs-2 {\n    font-size: 2rem !important;\n  }\n  .fs-3 {\n    font-size: 1.75rem !important;\n  }\n  .fs-4 {\n    font-size: 1.5rem !important;\n  }\n}\n\n@media print {\n  .d-print-inline {\n    display: inline !important;\n  }\n  .d-print-inline-block {\n    display: inline-block !important;\n  }\n  .d-print-block {\n    display: block !important;\n  }\n  .d-print-grid {\n    display: grid !important;\n  }\n  .d-print-table {\n    display: table !important;\n  }\n  .d-print-table-row {\n    display: table-row !important;\n  }\n  .d-print-table-cell {\n    display: table-cell !important;\n  }\n  .d-print-flex {\n    display: -ms-flexbox !important;\n    display: flex !important;\n  }\n  .d-print-inline-flex {\n    display: -ms-inline-flexbox !important;\n    display: inline-flex !important;\n  }\n  .d-print-none {\n    display: none !important;\n  }\n}\n\n.btn-primary {\n  background-color: #b58900;\n}\n\n.btn-secondary {\n  background-color: #839496;\n}\n\n.btn-success {\n  background-color: #2aa198;\n}\n\n.btn-info {\n  background-color: #268bd2;\n}\n\n.btn-warning {\n  background-color: #cb4b16;\n}\n\n.btn-danger {\n  background-color: #d33682;\n}\n\n.btn-light {\n  background-color: #fdf6e3;\n}\n\n.btn-dark {\n  background-color: #073642;\n}\n\n.alert {\n  border: none;\n  color: #fff;\n}\n\n.alert a,\n.alert .alert-link {\n  color: #fff;\n  text-decoration: underline;\n}\n\n.alert-primary {\n  background-color: #b58900;\n}\n\n.alert-secondary {\n  background-color: #839496;\n}\n\n.alert-success {\n  background-color: #2aa198;\n}\n\n.alert-info {\n  background-color: #268bd2;\n}\n\n.alert-warning {\n  background-color: #cb4b16;\n}\n\n.alert-danger {\n  background-color: #d33682;\n}\n\n.alert-light {\n  background-color: #fdf6e3;\n}\n\n.alert-dark {\n  background-color: #073642;\n}\n\n.alert-light,\n.alert-light a:not(.btn),\n.alert-light .alert-link {\n  color: #002b36;\n}\n\n.badge.bg-light {\n  color: #073642;\n}\n"
  },
  {
    "path": "src/sourceDev.WebApp/SharedThemes/solar/wwwroot/css/fontawesome-all.css",
    "content": "/*!\n * Font Awesome Free 5.0.8 by @fontawesome - https://fontawesome.com\n * License - https://fontawesome.com/license (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)\n */\n.fa,\n.fas,\n.far,\n.fal,\n.fab {\n  -moz-osx-font-smoothing: grayscale;\n  -webkit-font-smoothing: antialiased;\n  display: inline-block;\n  font-style: normal;\n  font-variant: normal;\n  text-rendering: auto;\n  line-height: 1; }\n\n.fa-lg {\n  font-size: 1.33333em;\n  line-height: 0.75em;\n  vertical-align: -.0667em; }\n\n.fa-xs {\n  font-size: .75em; }\n\n.fa-sm {\n  font-size: .875em; }\n\n.fa-1x {\n  font-size: 1em; }\n\n.fa-2x {\n  font-size: 2em; }\n\n.fa-3x {\n  font-size: 3em; }\n\n.fa-4x {\n  font-size: 4em; }\n\n.fa-5x {\n  font-size: 5em; }\n\n.fa-6x {\n  font-size: 6em; }\n\n.fa-7x {\n  font-size: 7em; }\n\n.fa-8x {\n  font-size: 8em; }\n\n.fa-9x {\n  font-size: 9em; }\n\n.fa-10x {\n  font-size: 10em; }\n\n.fa-fw {\n  text-align: center;\n  width: 1.25em; }\n\n.fa-ul {\n  list-style-type: none;\n  margin-left: 2.5em;\n  padding-left: 0; }\n  .fa-ul > li {\n    position: relative; }\n\n.fa-li {\n  left: -2em;\n  position: absolute;\n  text-align: center;\n  width: 2em;\n  line-height: inherit; }\n\n.fa-border {\n  border: solid 0.08em #eee;\n  border-radius: .1em;\n  padding: .2em .25em .15em; }\n\n.fa-pull-left {\n  float: left; }\n\n.fa-pull-right {\n  float: right; }\n\n.fa.fa-pull-left,\n.fas.fa-pull-left,\n.far.fa-pull-left,\n.fal.fa-pull-left,\n.fab.fa-pull-left {\n  margin-right: .3em; }\n\n.fa.fa-pull-right,\n.fas.fa-pull-right,\n.far.fa-pull-right,\n.fal.fa-pull-right,\n.fab.fa-pull-right {\n  margin-left: .3em; }\n\n.fa-spin {\n  -webkit-animation: fa-spin 2s infinite linear;\n          animation: fa-spin 2s infinite linear; }\n\n.fa-pulse {\n  -webkit-animation: fa-spin 1s infinite steps(8);\n          animation: fa-spin 1s infinite steps(8); }\n\n@-webkit-keyframes fa-spin {\n  0% {\n    -webkit-transform: rotate(0deg);\n            transform: rotate(0deg); }\n  100% {\n    -webkit-transform: rotate(360deg);\n            transform: rotate(360deg); } }\n\n@keyframes fa-spin {\n  0% {\n    -webkit-transform: rotate(0deg);\n            transform: rotate(0deg); }\n  100% {\n    -webkit-transform: rotate(360deg);\n            transform: rotate(360deg); } }\n\n.fa-rotate-90 {\n  -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)\";\n  -webkit-transform: rotate(90deg);\n          transform: rotate(90deg); }\n\n.fa-rotate-180 {\n  -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)\";\n  -webkit-transform: rotate(180deg);\n          transform: rotate(180deg); }\n\n.fa-rotate-270 {\n  -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)\";\n  -webkit-transform: rotate(270deg);\n          transform: rotate(270deg); }\n\n.fa-flip-horizontal {\n  -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)\";\n  -webkit-transform: scale(-1, 1);\n          transform: scale(-1, 1); }\n\n.fa-flip-vertical {\n  -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)\";\n  -webkit-transform: scale(1, -1);\n          transform: scale(1, -1); }\n\n.fa-flip-horizontal.fa-flip-vertical {\n  -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)\";\n  -webkit-transform: scale(-1, -1);\n          transform: scale(-1, -1); }\n\n:root .fa-rotate-90,\n:root .fa-rotate-180,\n:root .fa-rotate-270,\n:root .fa-flip-horizontal,\n:root .fa-flip-vertical {\n  -webkit-filter: none;\n          filter: none; }\n\n.fa-stack {\n  display: inline-block;\n  height: 2em;\n  line-height: 2em;\n  position: relative;\n  vertical-align: middle;\n  width: 2em; }\n\n.fa-stack-1x,\n.fa-stack-2x {\n  left: 0;\n  position: absolute;\n  text-align: center;\n  width: 100%; }\n\n.fa-stack-1x {\n  line-height: inherit; }\n\n.fa-stack-2x {\n  font-size: 2em; }\n\n.fa-inverse {\n  color: #fff; }\n\n/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen\nreaders do not read off random characters that represent icons */\n.fa-500px:before {\n  content: \"\\f26e\"; }\n\n.fa-accessible-icon:before {\n  content: \"\\f368\"; }\n\n.fa-accusoft:before {\n  content: \"\\f369\"; }\n\n.fa-address-book:before {\n  content: \"\\f2b9\"; }\n\n.fa-address-card:before {\n  content: \"\\f2bb\"; }\n\n.fa-adjust:before {\n  content: \"\\f042\"; }\n\n.fa-adn:before {\n  content: \"\\f170\"; }\n\n.fa-adversal:before {\n  content: \"\\f36a\"; }\n\n.fa-affiliatetheme:before {\n  content: \"\\f36b\"; }\n\n.fa-algolia:before {\n  content: \"\\f36c\"; }\n\n.fa-align-center:before {\n  content: \"\\f037\"; }\n\n.fa-align-justify:before {\n  content: \"\\f039\"; }\n\n.fa-align-left:before {\n  content: \"\\f036\"; }\n\n.fa-align-right:before {\n  content: \"\\f038\"; }\n\n.fa-amazon:before {\n  content: \"\\f270\"; }\n\n.fa-amazon-pay:before {\n  content: \"\\f42c\"; }\n\n.fa-ambulance:before {\n  content: \"\\f0f9\"; }\n\n.fa-american-sign-language-interpreting:before {\n  content: \"\\f2a3\"; }\n\n.fa-amilia:before {\n  content: \"\\f36d\"; }\n\n.fa-anchor:before {\n  content: \"\\f13d\"; }\n\n.fa-android:before {\n  content: \"\\f17b\"; }\n\n.fa-angellist:before {\n  content: \"\\f209\"; }\n\n.fa-angle-double-down:before {\n  content: \"\\f103\"; }\n\n.fa-angle-double-left:before {\n  content: \"\\f100\"; }\n\n.fa-angle-double-right:before {\n  content: \"\\f101\"; }\n\n.fa-angle-double-up:before {\n  content: \"\\f102\"; }\n\n.fa-angle-down:before {\n  content: \"\\f107\"; }\n\n.fa-angle-left:before {\n  content: \"\\f104\"; }\n\n.fa-angle-right:before {\n  content: \"\\f105\"; }\n\n.fa-angle-up:before {\n  content: \"\\f106\"; }\n\n.fa-angrycreative:before {\n  content: \"\\f36e\"; }\n\n.fa-angular:before {\n  content: \"\\f420\"; }\n\n.fa-app-store:before {\n  content: \"\\f36f\"; }\n\n.fa-app-store-ios:before {\n  content: \"\\f370\"; }\n\n.fa-apper:before {\n  content: \"\\f371\"; }\n\n.fa-apple:before {\n  content: \"\\f179\"; }\n\n.fa-apple-pay:before {\n  content: \"\\f415\"; }\n\n.fa-archive:before {\n  content: \"\\f187\"; }\n\n.fa-arrow-alt-circle-down:before {\n  content: \"\\f358\"; }\n\n.fa-arrow-alt-circle-left:before {\n  content: \"\\f359\"; }\n\n.fa-arrow-alt-circle-right:before {\n  content: \"\\f35a\"; }\n\n.fa-arrow-alt-circle-up:before {\n  content: \"\\f35b\"; }\n\n.fa-arrow-circle-down:before {\n  content: \"\\f0ab\"; }\n\n.fa-arrow-circle-left:before {\n  content: \"\\f0a8\"; }\n\n.fa-arrow-circle-right:before {\n  content: \"\\f0a9\"; }\n\n.fa-arrow-circle-up:before {\n  content: \"\\f0aa\"; }\n\n.fa-arrow-down:before {\n  content: \"\\f063\"; }\n\n.fa-arrow-left:before {\n  content: \"\\f060\"; }\n\n.fa-arrow-right:before {\n  content: \"\\f061\"; }\n\n.fa-arrow-up:before {\n  content: \"\\f062\"; }\n\n.fa-arrows-alt:before {\n  content: \"\\f0b2\"; }\n\n.fa-arrows-alt-h:before {\n  content: \"\\f337\"; }\n\n.fa-arrows-alt-v:before {\n  content: \"\\f338\"; }\n\n.fa-assistive-listening-systems:before {\n  content: \"\\f2a2\"; }\n\n.fa-asterisk:before {\n  content: \"\\f069\"; }\n\n.fa-asymmetrik:before {\n  content: \"\\f372\"; }\n\n.fa-at:before {\n  content: \"\\f1fa\"; }\n\n.fa-audible:before {\n  content: \"\\f373\"; }\n\n.fa-audio-description:before {\n  content: \"\\f29e\"; }\n\n.fa-autoprefixer:before {\n  content: \"\\f41c\"; }\n\n.fa-avianex:before {\n  content: \"\\f374\"; }\n\n.fa-aviato:before {\n  content: \"\\f421\"; }\n\n.fa-aws:before {\n  content: \"\\f375\"; }\n\n.fa-backward:before {\n  content: \"\\f04a\"; }\n\n.fa-balance-scale:before {\n  content: \"\\f24e\"; }\n\n.fa-ban:before {\n  content: \"\\f05e\"; }\n\n.fa-band-aid:before {\n  content: \"\\f462\"; }\n\n.fa-bandcamp:before {\n  content: \"\\f2d5\"; }\n\n.fa-barcode:before {\n  content: \"\\f02a\"; }\n\n.fa-bars:before {\n  content: \"\\f0c9\"; }\n\n.fa-baseball-ball:before {\n  content: \"\\f433\"; }\n\n.fa-basketball-ball:before {\n  content: \"\\f434\"; }\n\n.fa-bath:before {\n  content: \"\\f2cd\"; }\n\n.fa-battery-empty:before {\n  content: \"\\f244\"; }\n\n.fa-battery-full:before {\n  content: \"\\f240\"; }\n\n.fa-battery-half:before {\n  content: \"\\f242\"; }\n\n.fa-battery-quarter:before {\n  content: \"\\f243\"; }\n\n.fa-battery-three-quarters:before {\n  content: \"\\f241\"; }\n\n.fa-bed:before {\n  content: \"\\f236\"; }\n\n.fa-beer:before {\n  content: \"\\f0fc\"; }\n\n.fa-behance:before {\n  content: \"\\f1b4\"; }\n\n.fa-behance-square:before {\n  content: \"\\f1b5\"; }\n\n.fa-bell:before {\n  content: \"\\f0f3\"; }\n\n.fa-bell-slash:before {\n  content: \"\\f1f6\"; }\n\n.fa-bicycle:before {\n  content: \"\\f206\"; }\n\n.fa-bimobject:before {\n  content: \"\\f378\"; }\n\n.fa-binoculars:before {\n  content: \"\\f1e5\"; }\n\n.fa-birthday-cake:before {\n  content: \"\\f1fd\"; }\n\n.fa-bitbucket:before {\n  content: \"\\f171\"; }\n\n.fa-bitcoin:before {\n  content: \"\\f379\"; }\n\n.fa-bity:before {\n  content: \"\\f37a\"; }\n\n.fa-black-tie:before {\n  content: \"\\f27e\"; }\n\n.fa-blackberry:before {\n  content: \"\\f37b\"; }\n\n.fa-blind:before {\n  content: \"\\f29d\"; }\n\n.fa-blogger:before {\n  content: \"\\f37c\"; }\n\n.fa-blogger-b:before {\n  content: \"\\f37d\"; }\n\n.fa-bluetooth:before {\n  content: \"\\f293\"; }\n\n.fa-bluetooth-b:before {\n  content: \"\\f294\"; }\n\n.fa-bold:before {\n  content: \"\\f032\"; }\n\n.fa-bolt:before {\n  content: \"\\f0e7\"; }\n\n.fa-bomb:before {\n  content: \"\\f1e2\"; }\n\n.fa-book:before {\n  content: \"\\f02d\"; }\n\n.fa-bookmark:before {\n  content: \"\\f02e\"; }\n\n.fa-bowling-ball:before {\n  content: \"\\f436\"; }\n\n.fa-box:before {\n  content: \"\\f466\"; }\n\n.fa-boxes:before {\n  content: \"\\f468\"; }\n\n.fa-braille:before {\n  content: \"\\f2a1\"; }\n\n.fa-briefcase:before {\n  content: \"\\f0b1\"; }\n\n.fa-btc:before {\n  content: \"\\f15a\"; }\n\n.fa-bug:before {\n  content: \"\\f188\"; }\n\n.fa-building:before {\n  content: \"\\f1ad\"; }\n\n.fa-bullhorn:before {\n  content: \"\\f0a1\"; }\n\n.fa-bullseye:before {\n  content: \"\\f140\"; }\n\n.fa-buromobelexperte:before {\n  content: \"\\f37f\"; }\n\n.fa-bus:before {\n  content: \"\\f207\"; }\n\n.fa-buysellads:before {\n  content: \"\\f20d\"; }\n\n.fa-calculator:before {\n  content: \"\\f1ec\"; }\n\n.fa-calendar:before {\n  content: \"\\f133\"; }\n\n.fa-calendar-alt:before {\n  content: \"\\f073\"; }\n\n.fa-calendar-check:before {\n  content: \"\\f274\"; }\n\n.fa-calendar-minus:before {\n  content: \"\\f272\"; }\n\n.fa-calendar-plus:before {\n  content: \"\\f271\"; }\n\n.fa-calendar-times:before {\n  content: \"\\f273\"; }\n\n.fa-camera:before {\n  content: \"\\f030\"; }\n\n.fa-camera-retro:before {\n  content: \"\\f083\"; }\n\n.fa-car:before {\n  content: \"\\f1b9\"; }\n\n.fa-caret-down:before {\n  content: \"\\f0d7\"; }\n\n.fa-caret-left:before {\n  content: \"\\f0d9\"; }\n\n.fa-caret-right:before {\n  content: \"\\f0da\"; }\n\n.fa-caret-square-down:before {\n  content: \"\\f150\"; }\n\n.fa-caret-square-left:before {\n  content: \"\\f191\"; }\n\n.fa-caret-square-right:before {\n  content: \"\\f152\"; }\n\n.fa-caret-square-up:before {\n  content: \"\\f151\"; }\n\n.fa-caret-up:before {\n  content: \"\\f0d8\"; }\n\n.fa-cart-arrow-down:before {\n  content: \"\\f218\"; }\n\n.fa-cart-plus:before {\n  content: \"\\f217\"; }\n\n.fa-cc-amazon-pay:before {\n  content: \"\\f42d\"; }\n\n.fa-cc-amex:before {\n  content: \"\\f1f3\"; }\n\n.fa-cc-apple-pay:before {\n  content: \"\\f416\"; }\n\n.fa-cc-diners-club:before {\n  content: \"\\f24c\"; }\n\n.fa-cc-discover:before {\n  content: \"\\f1f2\"; }\n\n.fa-cc-jcb:before {\n  content: \"\\f24b\"; }\n\n.fa-cc-mastercard:before {\n  content: \"\\f1f1\"; }\n\n.fa-cc-paypal:before {\n  content: \"\\f1f4\"; }\n\n.fa-cc-stripe:before {\n  content: \"\\f1f5\"; }\n\n.fa-cc-visa:before {\n  content: \"\\f1f0\"; }\n\n.fa-centercode:before {\n  content: \"\\f380\"; }\n\n.fa-certificate:before {\n  content: \"\\f0a3\"; }\n\n.fa-chart-area:before {\n  content: \"\\f1fe\"; }\n\n.fa-chart-bar:before {\n  content: \"\\f080\"; }\n\n.fa-chart-line:before {\n  content: \"\\f201\"; }\n\n.fa-chart-pie:before {\n  content: \"\\f200\"; }\n\n.fa-check:before {\n  content: \"\\f00c\"; }\n\n.fa-check-circle:before {\n  content: \"\\f058\"; }\n\n.fa-check-square:before {\n  content: \"\\f14a\"; }\n\n.fa-chess:before {\n  content: \"\\f439\"; }\n\n.fa-chess-bishop:before {\n  content: \"\\f43a\"; }\n\n.fa-chess-board:before {\n  content: \"\\f43c\"; }\n\n.fa-chess-king:before {\n  content: \"\\f43f\"; }\n\n.fa-chess-knight:before {\n  content: \"\\f441\"; }\n\n.fa-chess-pawn:before {\n  content: \"\\f443\"; }\n\n.fa-chess-queen:before {\n  content: \"\\f445\"; }\n\n.fa-chess-rook:before {\n  content: \"\\f447\"; }\n\n.fa-chevron-circle-down:before {\n  content: \"\\f13a\"; }\n\n.fa-chevron-circle-left:before {\n  content: \"\\f137\"; }\n\n.fa-chevron-circle-right:before {\n  content: \"\\f138\"; }\n\n.fa-chevron-circle-up:before {\n  content: \"\\f139\"; }\n\n.fa-chevron-down:before {\n  content: \"\\f078\"; }\n\n.fa-chevron-left:before {\n  content: \"\\f053\"; }\n\n.fa-chevron-right:before {\n  content: \"\\f054\"; }\n\n.fa-chevron-up:before {\n  content: \"\\f077\"; }\n\n.fa-child:before {\n  content: \"\\f1ae\"; }\n\n.fa-chrome:before {\n  content: \"\\f268\"; }\n\n.fa-circle:before {\n  content: \"\\f111\"; }\n\n.fa-circle-notch:before {\n  content: \"\\f1ce\"; }\n\n.fa-clipboard:before {\n  content: \"\\f328\"; }\n\n.fa-clipboard-check:before {\n  content: \"\\f46c\"; }\n\n.fa-clipboard-list:before {\n  content: \"\\f46d\"; }\n\n.fa-clock:before {\n  content: \"\\f017\"; }\n\n.fa-clone:before {\n  content: \"\\f24d\"; }\n\n.fa-closed-captioning:before {\n  content: \"\\f20a\"; }\n\n.fa-cloud:before {\n  content: \"\\f0c2\"; }\n\n.fa-cloud-download-alt:before {\n  content: \"\\f381\"; }\n\n.fa-cloud-upload-alt:before {\n  content: \"\\f382\"; }\n\n.fa-cloudscale:before {\n  content: \"\\f383\"; }\n\n.fa-cloudsmith:before {\n  content: \"\\f384\"; }\n\n.fa-cloudversify:before {\n  content: \"\\f385\"; }\n\n.fa-code:before {\n  content: \"\\f121\"; }\n\n.fa-code-branch:before {\n  content: \"\\f126\"; }\n\n.fa-codepen:before {\n  content: \"\\f1cb\"; }\n\n.fa-codiepie:before {\n  content: \"\\f284\"; }\n\n.fa-coffee:before {\n  content: \"\\f0f4\"; }\n\n.fa-cog:before {\n  content: \"\\f013\"; }\n\n.fa-cogs:before {\n  content: \"\\f085\"; }\n\n.fa-columns:before {\n  content: \"\\f0db\"; }\n\n.fa-comment:before {\n  content: \"\\f075\"; }\n\n.fa-comment-alt:before {\n  content: \"\\f27a\"; }\n\n.fa-comments:before {\n  content: \"\\f086\"; }\n\n.fa-compass:before {\n  content: \"\\f14e\"; }\n\n.fa-compress:before {\n  content: \"\\f066\"; }\n\n.fa-connectdevelop:before {\n  content: \"\\f20e\"; }\n\n.fa-contao:before {\n  content: \"\\f26d\"; }\n\n.fa-copy:before {\n  content: \"\\f0c5\"; }\n\n.fa-copyright:before {\n  content: \"\\f1f9\"; }\n\n.fa-cpanel:before {\n  content: \"\\f388\"; }\n\n.fa-creative-commons:before {\n  content: \"\\f25e\"; }\n\n.fa-credit-card:before {\n  content: \"\\f09d\"; }\n\n.fa-crop:before {\n  content: \"\\f125\"; }\n\n.fa-crosshairs:before {\n  content: \"\\f05b\"; }\n\n.fa-css3:before {\n  content: \"\\f13c\"; }\n\n.fa-css3-alt:before {\n  content: \"\\f38b\"; }\n\n.fa-cube:before {\n  content: \"\\f1b2\"; }\n\n.fa-cubes:before {\n  content: \"\\f1b3\"; }\n\n.fa-cut:before {\n  content: \"\\f0c4\"; }\n\n.fa-cuttlefish:before {\n  content: \"\\f38c\"; }\n\n.fa-d-and-d:before {\n  content: \"\\f38d\"; }\n\n.fa-dashcube:before {\n  content: \"\\f210\"; }\n\n.fa-database:before {\n  content: \"\\f1c0\"; }\n\n.fa-deaf:before {\n  content: \"\\f2a4\"; }\n\n.fa-delicious:before {\n  content: \"\\f1a5\"; }\n\n.fa-deploydog:before {\n  content: \"\\f38e\"; }\n\n.fa-deskpro:before {\n  content: \"\\f38f\"; }\n\n.fa-desktop:before {\n  content: \"\\f108\"; }\n\n.fa-deviantart:before {\n  content: \"\\f1bd\"; }\n\n.fa-digg:before {\n  content: \"\\f1a6\"; }\n\n.fa-digital-ocean:before {\n  content: \"\\f391\"; }\n\n.fa-discord:before {\n  content: \"\\f392\"; }\n\n.fa-discourse:before {\n  content: \"\\f393\"; }\n\n.fa-dna:before {\n  content: \"\\f471\"; }\n\n.fa-dochub:before {\n  content: \"\\f394\"; }\n\n.fa-docker:before {\n  content: \"\\f395\"; }\n\n.fa-dollar-sign:before {\n  content: \"\\f155\"; }\n\n.fa-dolly:before {\n  content: \"\\f472\"; }\n\n.fa-dolly-flatbed:before {\n  content: \"\\f474\"; }\n\n.fa-dot-circle:before {\n  content: \"\\f192\"; }\n\n.fa-download:before {\n  content: \"\\f019\"; }\n\n.fa-draft2digital:before {\n  content: \"\\f396\"; }\n\n.fa-dribbble:before {\n  content: \"\\f17d\"; }\n\n.fa-dribbble-square:before {\n  content: \"\\f397\"; }\n\n.fa-dropbox:before {\n  content: \"\\f16b\"; }\n\n.fa-drupal:before {\n  content: \"\\f1a9\"; }\n\n.fa-dyalog:before {\n  content: \"\\f399\"; }\n\n.fa-earlybirds:before {\n  content: \"\\f39a\"; }\n\n.fa-edge:before {\n  content: \"\\f282\"; }\n\n.fa-edit:before {\n  content: \"\\f044\"; }\n\n.fa-eject:before {\n  content: \"\\f052\"; }\n\n.fa-elementor:before {\n  content: \"\\f430\"; }\n\n.fa-ellipsis-h:before {\n  content: \"\\f141\"; }\n\n.fa-ellipsis-v:before {\n  content: \"\\f142\"; }\n\n.fa-ember:before {\n  content: \"\\f423\"; }\n\n.fa-empire:before {\n  content: \"\\f1d1\"; }\n\n.fa-envelope:before {\n  content: \"\\f0e0\"; }\n\n.fa-envelope-open:before {\n  content: \"\\f2b6\"; }\n\n.fa-envelope-square:before {\n  content: \"\\f199\"; }\n\n.fa-envira:before {\n  content: \"\\f299\"; }\n\n.fa-eraser:before {\n  content: \"\\f12d\"; }\n\n.fa-erlang:before {\n  content: \"\\f39d\"; }\n\n.fa-ethereum:before {\n  content: \"\\f42e\"; }\n\n.fa-etsy:before {\n  content: \"\\f2d7\"; }\n\n.fa-euro-sign:before {\n  content: \"\\f153\"; }\n\n.fa-exchange-alt:before {\n  content: \"\\f362\"; }\n\n.fa-exclamation:before {\n  content: \"\\f12a\"; }\n\n.fa-exclamation-circle:before {\n  content: \"\\f06a\"; }\n\n.fa-exclamation-triangle:before {\n  content: \"\\f071\"; }\n\n.fa-expand:before {\n  content: \"\\f065\"; }\n\n.fa-expand-arrows-alt:before {\n  content: \"\\f31e\"; }\n\n.fa-expeditedssl:before {\n  content: \"\\f23e\"; }\n\n.fa-external-link-alt:before {\n  content: \"\\f35d\"; }\n\n.fa-external-link-square-alt:before {\n  content: \"\\f360\"; }\n\n.fa-eye:before {\n  content: \"\\f06e\"; }\n\n.fa-eye-dropper:before {\n  content: \"\\f1fb\"; }\n\n.fa-eye-slash:before {\n  content: \"\\f070\"; }\n\n.fa-facebook:before {\n  content: \"\\f09a\"; }\n\n.fa-facebook-f:before {\n  content: \"\\f39e\"; }\n\n.fa-facebook-messenger:before {\n  content: \"\\f39f\"; }\n\n.fa-facebook-square:before {\n  content: \"\\f082\"; }\n\n.fa-fast-backward:before {\n  content: \"\\f049\"; }\n\n.fa-fast-forward:before {\n  content: \"\\f050\"; }\n\n.fa-fax:before {\n  content: \"\\f1ac\"; }\n\n.fa-female:before {\n  content: \"\\f182\"; }\n\n.fa-fighter-jet:before {\n  content: \"\\f0fb\"; }\n\n.fa-file:before {\n  content: \"\\f15b\"; }\n\n.fa-file-alt:before {\n  content: \"\\f15c\"; }\n\n.fa-file-archive:before {\n  content: \"\\f1c6\"; }\n\n.fa-file-audio:before {\n  content: \"\\f1c7\"; }\n\n.fa-file-code:before {\n  content: \"\\f1c9\"; }\n\n.fa-file-excel:before {\n  content: \"\\f1c3\"; }\n\n.fa-file-image:before {\n  content: \"\\f1c5\"; }\n\n.fa-file-pdf:before {\n  content: \"\\f1c1\"; }\n\n.fa-file-powerpoint:before {\n  content: \"\\f1c4\"; }\n\n.fa-file-video:before {\n  content: \"\\f1c8\"; }\n\n.fa-file-word:before {\n  content: \"\\f1c2\"; }\n\n.fa-film:before {\n  content: \"\\f008\"; }\n\n.fa-filter:before {\n  content: \"\\f0b0\"; }\n\n.fa-fire:before {\n  content: \"\\f06d\"; }\n\n.fa-fire-extinguisher:before {\n  content: \"\\f134\"; }\n\n.fa-firefox:before {\n  content: \"\\f269\"; }\n\n.fa-first-aid:before {\n  content: \"\\f479\"; }\n\n.fa-first-order:before {\n  content: \"\\f2b0\"; }\n\n.fa-firstdraft:before {\n  content: \"\\f3a1\"; }\n\n.fa-flag:before {\n  content: \"\\f024\"; }\n\n.fa-flag-checkered:before {\n  content: \"\\f11e\"; }\n\n.fa-flask:before {\n  content: \"\\f0c3\"; }\n\n.fa-flickr:before {\n  content: \"\\f16e\"; }\n\n.fa-flipboard:before {\n  content: \"\\f44d\"; }\n\n.fa-fly:before {\n  content: \"\\f417\"; }\n\n.fa-folder:before {\n  content: \"\\f07b\"; }\n\n.fa-folder-open:before {\n  content: \"\\f07c\"; }\n\n.fa-font:before {\n  content: \"\\f031\"; }\n\n.fa-font-awesome:before {\n  content: \"\\f2b4\"; }\n\n.fa-font-awesome-alt:before {\n  content: \"\\f35c\"; }\n\n.fa-font-awesome-flag:before {\n  content: \"\\f425\"; }\n\n.fa-fonticons:before {\n  content: \"\\f280\"; }\n\n.fa-fonticons-fi:before {\n  content: \"\\f3a2\"; }\n\n.fa-football-ball:before {\n  content: \"\\f44e\"; }\n\n.fa-fort-awesome:before {\n  content: \"\\f286\"; }\n\n.fa-fort-awesome-alt:before {\n  content: \"\\f3a3\"; }\n\n.fa-forumbee:before {\n  content: \"\\f211\"; }\n\n.fa-forward:before {\n  content: \"\\f04e\"; }\n\n.fa-foursquare:before {\n  content: \"\\f180\"; }\n\n.fa-free-code-camp:before {\n  content: \"\\f2c5\"; }\n\n.fa-freebsd:before {\n  content: \"\\f3a4\"; }\n\n.fa-frown:before {\n  content: \"\\f119\"; }\n\n.fa-futbol:before {\n  content: \"\\f1e3\"; }\n\n.fa-gamepad:before {\n  content: \"\\f11b\"; }\n\n.fa-gavel:before {\n  content: \"\\f0e3\"; }\n\n.fa-gem:before {\n  content: \"\\f3a5\"; }\n\n.fa-genderless:before {\n  content: \"\\f22d\"; }\n\n.fa-get-pocket:before {\n  content: \"\\f265\"; }\n\n.fa-gg:before {\n  content: \"\\f260\"; }\n\n.fa-gg-circle:before {\n  content: \"\\f261\"; }\n\n.fa-gift:before {\n  content: \"\\f06b\"; }\n\n.fa-git:before {\n  content: \"\\f1d3\"; }\n\n.fa-git-square:before {\n  content: \"\\f1d2\"; }\n\n.fa-github:before {\n  content: \"\\f09b\"; }\n\n.fa-github-alt:before {\n  content: \"\\f113\"; }\n\n.fa-github-square:before {\n  content: \"\\f092\"; }\n\n.fa-gitkraken:before {\n  content: \"\\f3a6\"; }\n\n.fa-gitlab:before {\n  content: \"\\f296\"; }\n\n.fa-gitter:before {\n  content: \"\\f426\"; }\n\n.fa-glass-martini:before {\n  content: \"\\f000\"; }\n\n.fa-glide:before {\n  content: \"\\f2a5\"; }\n\n.fa-glide-g:before {\n  content: \"\\f2a6\"; }\n\n.fa-globe:before {\n  content: \"\\f0ac\"; }\n\n.fa-gofore:before {\n  content: \"\\f3a7\"; }\n\n.fa-golf-ball:before {\n  content: \"\\f450\"; }\n\n.fa-goodreads:before {\n  content: \"\\f3a8\"; }\n\n.fa-goodreads-g:before {\n  content: \"\\f3a9\"; }\n\n.fa-google:before {\n  content: \"\\f1a0\"; }\n\n.fa-google-drive:before {\n  content: \"\\f3aa\"; }\n\n.fa-google-play:before {\n  content: \"\\f3ab\"; }\n\n.fa-google-plus:before {\n  content: \"\\f2b3\"; }\n\n.fa-google-plus-g:before {\n  content: \"\\f0d5\"; }\n\n.fa-google-plus-square:before {\n  content: \"\\f0d4\"; }\n\n.fa-google-wallet:before {\n  content: \"\\f1ee\"; }\n\n.fa-graduation-cap:before {\n  content: \"\\f19d\"; }\n\n.fa-gratipay:before {\n  content: \"\\f184\"; }\n\n.fa-grav:before {\n  content: \"\\f2d6\"; }\n\n.fa-gripfire:before {\n  content: \"\\f3ac\"; }\n\n.fa-grunt:before {\n  content: \"\\f3ad\"; }\n\n.fa-gulp:before {\n  content: \"\\f3ae\"; }\n\n.fa-h-square:before {\n  content: \"\\f0fd\"; }\n\n.fa-hacker-news:before {\n  content: \"\\f1d4\"; }\n\n.fa-hacker-news-square:before {\n  content: \"\\f3af\"; }\n\n.fa-hand-lizard:before {\n  content: \"\\f258\"; }\n\n.fa-hand-paper:before {\n  content: \"\\f256\"; }\n\n.fa-hand-peace:before {\n  content: \"\\f25b\"; }\n\n.fa-hand-point-down:before {\n  content: \"\\f0a7\"; }\n\n.fa-hand-point-left:before {\n  content: \"\\f0a5\"; }\n\n.fa-hand-point-right:before {\n  content: \"\\f0a4\"; }\n\n.fa-hand-point-up:before {\n  content: \"\\f0a6\"; }\n\n.fa-hand-pointer:before {\n  content: \"\\f25a\"; }\n\n.fa-hand-rock:before {\n  content: \"\\f255\"; }\n\n.fa-hand-scissors:before {\n  content: \"\\f257\"; }\n\n.fa-hand-spock:before {\n  content: \"\\f259\"; }\n\n.fa-handshake:before {\n  content: \"\\f2b5\"; }\n\n.fa-hashtag:before {\n  content: \"\\f292\"; }\n\n.fa-hdd:before {\n  content: \"\\f0a0\"; }\n\n.fa-heading:before {\n  content: \"\\f1dc\"; }\n\n.fa-headphones:before {\n  content: \"\\f025\"; }\n\n.fa-heart:before {\n  content: \"\\f004\"; }\n\n.fa-heartbeat:before {\n  content: \"\\f21e\"; }\n\n.fa-hips:before {\n  content: \"\\f452\"; }\n\n.fa-hire-a-helper:before {\n  content: \"\\f3b0\"; }\n\n.fa-history:before {\n  content: \"\\f1da\"; }\n\n.fa-hockey-puck:before {\n  content: \"\\f453\"; }\n\n.fa-home:before {\n  content: \"\\f015\"; }\n\n.fa-hooli:before {\n  content: \"\\f427\"; }\n\n.fa-hospital:before {\n  content: \"\\f0f8\"; }\n\n.fa-hospital-symbol:before {\n  content: \"\\f47e\"; }\n\n.fa-hotjar:before {\n  content: \"\\f3b1\"; }\n\n.fa-hourglass:before {\n  content: \"\\f254\"; }\n\n.fa-hourglass-end:before {\n  content: \"\\f253\"; }\n\n.fa-hourglass-half:before {\n  content: \"\\f252\"; }\n\n.fa-hourglass-start:before {\n  content: \"\\f251\"; }\n\n.fa-houzz:before {\n  content: \"\\f27c\"; }\n\n.fa-html5:before {\n  content: \"\\f13b\"; }\n\n.fa-hubspot:before {\n  content: \"\\f3b2\"; }\n\n.fa-i-cursor:before {\n  content: \"\\f246\"; }\n\n.fa-id-badge:before {\n  content: \"\\f2c1\"; }\n\n.fa-id-card:before {\n  content: \"\\f2c2\"; }\n\n.fa-image:before {\n  content: \"\\f03e\"; }\n\n.fa-images:before {\n  content: \"\\f302\"; }\n\n.fa-imdb:before {\n  content: \"\\f2d8\"; }\n\n.fa-inbox:before {\n  content: \"\\f01c\"; }\n\n.fa-indent:before {\n  content: \"\\f03c\"; }\n\n.fa-industry:before {\n  content: \"\\f275\"; }\n\n.fa-info:before {\n  content: \"\\f129\"; }\n\n.fa-info-circle:before {\n  content: \"\\f05a\"; }\n\n.fa-instagram:before {\n  content: \"\\f16d\"; }\n\n.fa-internet-explorer:before {\n  content: \"\\f26b\"; }\n\n.fa-ioxhost:before {\n  content: \"\\f208\"; }\n\n.fa-italic:before {\n  content: \"\\f033\"; }\n\n.fa-itunes:before {\n  content: \"\\f3b4\"; }\n\n.fa-itunes-note:before {\n  content: \"\\f3b5\"; }\n\n.fa-jenkins:before {\n  content: \"\\f3b6\"; }\n\n.fa-joget:before {\n  content: \"\\f3b7\"; }\n\n.fa-joomla:before {\n  content: \"\\f1aa\"; }\n\n.fa-js:before {\n  content: \"\\f3b8\"; }\n\n.fa-js-square:before {\n  content: \"\\f3b9\"; }\n\n.fa-jsfiddle:before {\n  content: \"\\f1cc\"; }\n\n.fa-key:before {\n  content: \"\\f084\"; }\n\n.fa-keyboard:before {\n  content: \"\\f11c\"; }\n\n.fa-keycdn:before {\n  content: \"\\f3ba\"; }\n\n.fa-kickstarter:before {\n  content: \"\\f3bb\"; }\n\n.fa-kickstarter-k:before {\n  content: \"\\f3bc\"; }\n\n.fa-korvue:before {\n  content: \"\\f42f\"; }\n\n.fa-language:before {\n  content: \"\\f1ab\"; }\n\n.fa-laptop:before {\n  content: \"\\f109\"; }\n\n.fa-laravel:before {\n  content: \"\\f3bd\"; }\n\n.fa-lastfm:before {\n  content: \"\\f202\"; }\n\n.fa-lastfm-square:before {\n  content: \"\\f203\"; }\n\n.fa-leaf:before {\n  content: \"\\f06c\"; }\n\n.fa-leanpub:before {\n  content: \"\\f212\"; }\n\n.fa-lemon:before {\n  content: \"\\f094\"; }\n\n.fa-less:before {\n  content: \"\\f41d\"; }\n\n.fa-level-down-alt:before {\n  content: \"\\f3be\"; }\n\n.fa-level-up-alt:before {\n  content: \"\\f3bf\"; }\n\n.fa-life-ring:before {\n  content: \"\\f1cd\"; }\n\n.fa-lightbulb:before {\n  content: \"\\f0eb\"; }\n\n.fa-line:before {\n  content: \"\\f3c0\"; }\n\n.fa-link:before {\n  content: \"\\f0c1\"; }\n\n.fa-linkedin:before {\n  content: \"\\f08c\"; }\n\n.fa-linkedin-in:before {\n  content: \"\\f0e1\"; }\n\n.fa-linode:before {\n  content: \"\\f2b8\"; }\n\n.fa-linux:before {\n  content: \"\\f17c\"; }\n\n.fa-lira-sign:before {\n  content: \"\\f195\"; }\n\n.fa-list:before {\n  content: \"\\f03a\"; }\n\n.fa-list-alt:before {\n  content: \"\\f022\"; }\n\n.fa-list-ol:before {\n  content: \"\\f0cb\"; }\n\n.fa-list-ul:before {\n  content: \"\\f0ca\"; }\n\n.fa-location-arrow:before {\n  content: \"\\f124\"; }\n\n.fa-lock:before {\n  content: \"\\f023\"; }\n\n.fa-lock-open:before {\n  content: \"\\f3c1\"; }\n\n.fa-long-arrow-alt-down:before {\n  content: \"\\f309\"; }\n\n.fa-long-arrow-alt-left:before {\n  content: \"\\f30a\"; }\n\n.fa-long-arrow-alt-right:before {\n  content: \"\\f30b\"; }\n\n.fa-long-arrow-alt-up:before {\n  content: \"\\f30c\"; }\n\n.fa-low-vision:before {\n  content: \"\\f2a8\"; }\n\n.fa-lyft:before {\n  content: \"\\f3c3\"; }\n\n.fa-magento:before {\n  content: \"\\f3c4\"; }\n\n.fa-magic:before {\n  content: \"\\f0d0\"; }\n\n.fa-magnet:before {\n  content: \"\\f076\"; }\n\n.fa-male:before {\n  content: \"\\f183\"; }\n\n.fa-map:before {\n  content: \"\\f279\"; }\n\n.fa-map-marker:before {\n  content: \"\\f041\"; }\n\n.fa-map-marker-alt:before {\n  content: \"\\f3c5\"; }\n\n.fa-map-pin:before {\n  content: \"\\f276\"; }\n\n.fa-map-signs:before {\n  content: \"\\f277\"; }\n\n.fa-mars:before {\n  content: \"\\f222\"; }\n\n.fa-mars-double:before {\n  content: \"\\f227\"; }\n\n.fa-mars-stroke:before {\n  content: \"\\f229\"; }\n\n.fa-mars-stroke-h:before {\n  content: \"\\f22b\"; }\n\n.fa-mars-stroke-v:before {\n  content: \"\\f22a\"; }\n\n.fa-maxcdn:before {\n  content: \"\\f136\"; }\n\n.fa-medapps:before {\n  content: \"\\f3c6\"; }\n\n.fa-medium:before {\n  content: \"\\f23a\"; }\n\n.fa-medium-m:before {\n  content: \"\\f3c7\"; }\n\n.fa-medkit:before {\n  content: \"\\f0fa\"; }\n\n.fa-medrt:before {\n  content: \"\\f3c8\"; }\n\n.fa-meetup:before {\n  content: \"\\f2e0\"; }\n\n.fa-meh:before {\n  content: \"\\f11a\"; }\n\n.fa-mercury:before {\n  content: \"\\f223\"; }\n\n.fa-microchip:before {\n  content: \"\\f2db\"; }\n\n.fa-microphone:before {\n  content: \"\\f130\"; }\n\n.fa-microphone-slash:before {\n  content: \"\\f131\"; }\n\n.fa-microsoft:before {\n  content: \"\\f3ca\"; }\n\n.fa-minus:before {\n  content: \"\\f068\"; }\n\n.fa-minus-circle:before {\n  content: \"\\f056\"; }\n\n.fa-minus-square:before {\n  content: \"\\f146\"; }\n\n.fa-mix:before {\n  content: \"\\f3cb\"; }\n\n.fa-mixcloud:before {\n  content: \"\\f289\"; }\n\n.fa-mizuni:before {\n  content: \"\\f3cc\"; }\n\n.fa-mobile:before {\n  content: \"\\f10b\"; }\n\n.fa-mobile-alt:before {\n  content: \"\\f3cd\"; }\n\n.fa-modx:before {\n  content: \"\\f285\"; }\n\n.fa-monero:before {\n  content: \"\\f3d0\"; }\n\n.fa-money-bill-alt:before {\n  content: \"\\f3d1\"; }\n\n.fa-moon:before {\n  content: \"\\f186\"; }\n\n.fa-motorcycle:before {\n  content: \"\\f21c\"; }\n\n.fa-mouse-pointer:before {\n  content: \"\\f245\"; }\n\n.fa-music:before {\n  content: \"\\f001\"; }\n\n.fa-napster:before {\n  content: \"\\f3d2\"; }\n\n.fa-neuter:before {\n  content: \"\\f22c\"; }\n\n.fa-newspaper:before {\n  content: \"\\f1ea\"; }\n\n.fa-nintendo-switch:before {\n  content: \"\\f418\"; }\n\n.fa-node:before {\n  content: \"\\f419\"; }\n\n.fa-node-js:before {\n  content: \"\\f3d3\"; }\n\n.fa-npm:before {\n  content: \"\\f3d4\"; }\n\n.fa-ns8:before {\n  content: \"\\f3d5\"; }\n\n.fa-nutritionix:before {\n  content: \"\\f3d6\"; }\n\n.fa-object-group:before {\n  content: \"\\f247\"; }\n\n.fa-object-ungroup:before {\n  content: \"\\f248\"; }\n\n.fa-odnoklassniki:before {\n  content: \"\\f263\"; }\n\n.fa-odnoklassniki-square:before {\n  content: \"\\f264\"; }\n\n.fa-opencart:before {\n  content: \"\\f23d\"; }\n\n.fa-openid:before {\n  content: \"\\f19b\"; }\n\n.fa-opera:before {\n  content: \"\\f26a\"; }\n\n.fa-optin-monster:before {\n  content: \"\\f23c\"; }\n\n.fa-osi:before {\n  content: \"\\f41a\"; }\n\n.fa-outdent:before {\n  content: \"\\f03b\"; }\n\n.fa-page4:before {\n  content: \"\\f3d7\"; }\n\n.fa-pagelines:before {\n  content: \"\\f18c\"; }\n\n.fa-paint-brush:before {\n  content: \"\\f1fc\"; }\n\n.fa-palfed:before {\n  content: \"\\f3d8\"; }\n\n.fa-pallet:before {\n  content: \"\\f482\"; }\n\n.fa-paper-plane:before {\n  content: \"\\f1d8\"; }\n\n.fa-paperclip:before {\n  content: \"\\f0c6\"; }\n\n.fa-paragraph:before {\n  content: \"\\f1dd\"; }\n\n.fa-paste:before {\n  content: \"\\f0ea\"; }\n\n.fa-patreon:before {\n  content: \"\\f3d9\"; }\n\n.fa-pause:before {\n  content: \"\\f04c\"; }\n\n.fa-pause-circle:before {\n  content: \"\\f28b\"; }\n\n.fa-paw:before {\n  content: \"\\f1b0\"; }\n\n.fa-paypal:before {\n  content: \"\\f1ed\"; }\n\n.fa-pen-square:before {\n  content: \"\\f14b\"; }\n\n.fa-pencil-alt:before {\n  content: \"\\f303\"; }\n\n.fa-percent:before {\n  content: \"\\f295\"; }\n\n.fa-periscope:before {\n  content: \"\\f3da\"; }\n\n.fa-phabricator:before {\n  content: \"\\f3db\"; }\n\n.fa-phoenix-framework:before {\n  content: \"\\f3dc\"; }\n\n.fa-phone:before {\n  content: \"\\f095\"; }\n\n.fa-phone-square:before {\n  content: \"\\f098\"; }\n\n.fa-phone-volume:before {\n  content: \"\\f2a0\"; }\n\n.fa-php:before {\n  content: \"\\f457\"; }\n\n.fa-pied-piper:before {\n  content: \"\\f2ae\"; }\n\n.fa-pied-piper-alt:before {\n  content: \"\\f1a8\"; }\n\n.fa-pied-piper-pp:before {\n  content: \"\\f1a7\"; }\n\n.fa-pills:before {\n  content: \"\\f484\"; }\n\n.fa-pinterest:before {\n  content: \"\\f0d2\"; }\n\n.fa-pinterest-p:before {\n  content: \"\\f231\"; }\n\n.fa-pinterest-square:before {\n  content: \"\\f0d3\"; }\n\n.fa-plane:before {\n  content: \"\\f072\"; }\n\n.fa-play:before {\n  content: \"\\f04b\"; }\n\n.fa-play-circle:before {\n  content: \"\\f144\"; }\n\n.fa-playstation:before {\n  content: \"\\f3df\"; }\n\n.fa-plug:before {\n  content: \"\\f1e6\"; }\n\n.fa-plus:before {\n  content: \"\\f067\"; }\n\n.fa-plus-circle:before {\n  content: \"\\f055\"; }\n\n.fa-plus-square:before {\n  content: \"\\f0fe\"; }\n\n.fa-podcast:before {\n  content: \"\\f2ce\"; }\n\n.fa-pound-sign:before {\n  content: \"\\f154\"; }\n\n.fa-power-off:before {\n  content: \"\\f011\"; }\n\n.fa-print:before {\n  content: \"\\f02f\"; }\n\n.fa-product-hunt:before {\n  content: \"\\f288\"; }\n\n.fa-pushed:before {\n  content: \"\\f3e1\"; }\n\n.fa-puzzle-piece:before {\n  content: \"\\f12e\"; }\n\n.fa-python:before {\n  content: \"\\f3e2\"; }\n\n.fa-qq:before {\n  content: \"\\f1d6\"; }\n\n.fa-qrcode:before {\n  content: \"\\f029\"; }\n\n.fa-question:before {\n  content: \"\\f128\"; }\n\n.fa-question-circle:before {\n  content: \"\\f059\"; }\n\n.fa-quidditch:before {\n  content: \"\\f458\"; }\n\n.fa-quinscape:before {\n  content: \"\\f459\"; }\n\n.fa-quora:before {\n  content: \"\\f2c4\"; }\n\n.fa-quote-left:before {\n  content: \"\\f10d\"; }\n\n.fa-quote-right:before {\n  content: \"\\f10e\"; }\n\n.fa-random:before {\n  content: \"\\f074\"; }\n\n.fa-ravelry:before {\n  content: \"\\f2d9\"; }\n\n.fa-react:before {\n  content: \"\\f41b\"; }\n\n.fa-rebel:before {\n  content: \"\\f1d0\"; }\n\n.fa-recycle:before {\n  content: \"\\f1b8\"; }\n\n.fa-red-river:before {\n  content: \"\\f3e3\"; }\n\n.fa-reddit:before {\n  content: \"\\f1a1\"; }\n\n.fa-reddit-alien:before {\n  content: \"\\f281\"; }\n\n.fa-reddit-square:before {\n  content: \"\\f1a2\"; }\n\n.fa-redo:before {\n  content: \"\\f01e\"; }\n\n.fa-redo-alt:before {\n  content: \"\\f2f9\"; }\n\n.fa-registered:before {\n  content: \"\\f25d\"; }\n\n.fa-rendact:before {\n  content: \"\\f3e4\"; }\n\n.fa-renren:before {\n  content: \"\\f18b\"; }\n\n.fa-reply:before {\n  content: \"\\f3e5\"; }\n\n.fa-reply-all:before {\n  content: \"\\f122\"; }\n\n.fa-replyd:before {\n  content: \"\\f3e6\"; }\n\n.fa-resolving:before {\n  content: \"\\f3e7\"; }\n\n.fa-retweet:before {\n  content: \"\\f079\"; }\n\n.fa-road:before {\n  content: \"\\f018\"; }\n\n.fa-rocket:before {\n  content: \"\\f135\"; }\n\n.fa-rocketchat:before {\n  content: \"\\f3e8\"; }\n\n.fa-rockrms:before {\n  content: \"\\f3e9\"; }\n\n.fa-rss:before {\n  content: \"\\f09e\"; }\n\n.fa-rss-square:before {\n  content: \"\\f143\"; }\n\n.fa-ruble-sign:before {\n  content: \"\\f158\"; }\n\n.fa-rupee-sign:before {\n  content: \"\\f156\"; }\n\n.fa-safari:before {\n  content: \"\\f267\"; }\n\n.fa-sass:before {\n  content: \"\\f41e\"; }\n\n.fa-save:before {\n  content: \"\\f0c7\"; }\n\n.fa-schlix:before {\n  content: \"\\f3ea\"; }\n\n.fa-scribd:before {\n  content: \"\\f28a\"; }\n\n.fa-search:before {\n  content: \"\\f002\"; }\n\n.fa-search-minus:before {\n  content: \"\\f010\"; }\n\n.fa-search-plus:before {\n  content: \"\\f00e\"; }\n\n.fa-searchengin:before {\n  content: \"\\f3eb\"; }\n\n.fa-sellcast:before {\n  content: \"\\f2da\"; }\n\n.fa-sellsy:before {\n  content: \"\\f213\"; }\n\n.fa-server:before {\n  content: \"\\f233\"; }\n\n.fa-servicestack:before {\n  content: \"\\f3ec\"; }\n\n.fa-share:before {\n  content: \"\\f064\"; }\n\n.fa-share-alt:before {\n  content: \"\\f1e0\"; }\n\n.fa-share-alt-square:before {\n  content: \"\\f1e1\"; }\n\n.fa-share-square:before {\n  content: \"\\f14d\"; }\n\n.fa-shekel-sign:before {\n  content: \"\\f20b\"; }\n\n.fa-shield-alt:before {\n  content: \"\\f3ed\"; }\n\n.fa-ship:before {\n  content: \"\\f21a\"; }\n\n.fa-shipping-fast:before {\n  content: \"\\f48b\"; }\n\n.fa-shirtsinbulk:before {\n  content: \"\\f214\"; }\n\n.fa-shopping-bag:before {\n  content: \"\\f290\"; }\n\n.fa-shopping-basket:before {\n  content: \"\\f291\"; }\n\n.fa-shopping-cart:before {\n  content: \"\\f07a\"; }\n\n.fa-shower:before {\n  content: \"\\f2cc\"; }\n\n.fa-sign-in-alt:before {\n  content: \"\\f2f6\"; }\n\n.fa-sign-language:before {\n  content: \"\\f2a7\"; }\n\n.fa-sign-out-alt:before {\n  content: \"\\f2f5\"; }\n\n.fa-signal:before {\n  content: \"\\f012\"; }\n\n.fa-simplybuilt:before {\n  content: \"\\f215\"; }\n\n.fa-sistrix:before {\n  content: \"\\f3ee\"; }\n\n.fa-sitemap:before {\n  content: \"\\f0e8\"; }\n\n.fa-skyatlas:before {\n  content: \"\\f216\"; }\n\n.fa-skype:before {\n  content: \"\\f17e\"; }\n\n.fa-slack:before {\n  content: \"\\f198\"; }\n\n.fa-slack-hash:before {\n  content: \"\\f3ef\"; }\n\n.fa-sliders-h:before {\n  content: \"\\f1de\"; }\n\n.fa-slideshare:before {\n  content: \"\\f1e7\"; }\n\n.fa-smile:before {\n  content: \"\\f118\"; }\n\n.fa-snapchat:before {\n  content: \"\\f2ab\"; }\n\n.fa-snapchat-ghost:before {\n  content: \"\\f2ac\"; }\n\n.fa-snapchat-square:before {\n  content: \"\\f2ad\"; }\n\n.fa-snowflake:before {\n  content: \"\\f2dc\"; }\n\n.fa-sort:before {\n  content: \"\\f0dc\"; }\n\n.fa-sort-alpha-down:before {\n  content: \"\\f15d\"; }\n\n.fa-sort-alpha-up:before {\n  content: \"\\f15e\"; }\n\n.fa-sort-amount-down:before {\n  content: \"\\f160\"; }\n\n.fa-sort-amount-up:before {\n  content: \"\\f161\"; }\n\n.fa-sort-down:before {\n  content: \"\\f0dd\"; }\n\n.fa-sort-numeric-down:before {\n  content: \"\\f162\"; }\n\n.fa-sort-numeric-up:before {\n  content: \"\\f163\"; }\n\n.fa-sort-up:before {\n  content: \"\\f0de\"; }\n\n.fa-soundcloud:before {\n  content: \"\\f1be\"; }\n\n.fa-space-shuttle:before {\n  content: \"\\f197\"; }\n\n.fa-speakap:before {\n  content: \"\\f3f3\"; }\n\n.fa-spinner:before {\n  content: \"\\f110\"; }\n\n.fa-spotify:before {\n  content: \"\\f1bc\"; }\n\n.fa-square:before {\n  content: \"\\f0c8\"; }\n\n.fa-square-full:before {\n  content: \"\\f45c\"; }\n\n.fa-stack-exchange:before {\n  content: \"\\f18d\"; }\n\n.fa-stack-overflow:before {\n  content: \"\\f16c\"; }\n\n.fa-star:before {\n  content: \"\\f005\"; }\n\n.fa-star-half:before {\n  content: \"\\f089\"; }\n\n.fa-staylinked:before {\n  content: \"\\f3f5\"; }\n\n.fa-steam:before {\n  content: \"\\f1b6\"; }\n\n.fa-steam-square:before {\n  content: \"\\f1b7\"; }\n\n.fa-steam-symbol:before {\n  content: \"\\f3f6\"; }\n\n.fa-step-backward:before {\n  content: \"\\f048\"; }\n\n.fa-step-forward:before {\n  content: \"\\f051\"; }\n\n.fa-stethoscope:before {\n  content: \"\\f0f1\"; }\n\n.fa-sticker-mule:before {\n  content: \"\\f3f7\"; }\n\n.fa-sticky-note:before {\n  content: \"\\f249\"; }\n\n.fa-stop:before {\n  content: \"\\f04d\"; }\n\n.fa-stop-circle:before {\n  content: \"\\f28d\"; }\n\n.fa-stopwatch:before {\n  content: \"\\f2f2\"; }\n\n.fa-strava:before {\n  content: \"\\f428\"; }\n\n.fa-street-view:before {\n  content: \"\\f21d\"; }\n\n.fa-strikethrough:before {\n  content: \"\\f0cc\"; }\n\n.fa-stripe:before {\n  content: \"\\f429\"; }\n\n.fa-stripe-s:before {\n  content: \"\\f42a\"; }\n\n.fa-studiovinari:before {\n  content: \"\\f3f8\"; }\n\n.fa-stumbleupon:before {\n  content: \"\\f1a4\"; }\n\n.fa-stumbleupon-circle:before {\n  content: \"\\f1a3\"; }\n\n.fa-subscript:before {\n  content: \"\\f12c\"; }\n\n.fa-subway:before {\n  content: \"\\f239\"; }\n\n.fa-suitcase:before {\n  content: \"\\f0f2\"; }\n\n.fa-sun:before {\n  content: \"\\f185\"; }\n\n.fa-superpowers:before {\n  content: \"\\f2dd\"; }\n\n.fa-superscript:before {\n  content: \"\\f12b\"; }\n\n.fa-supple:before {\n  content: \"\\f3f9\"; }\n\n.fa-sync:before {\n  content: \"\\f021\"; }\n\n.fa-sync-alt:before {\n  content: \"\\f2f1\"; }\n\n.fa-syringe:before {\n  content: \"\\f48e\"; }\n\n.fa-table:before {\n  content: \"\\f0ce\"; }\n\n.fa-table-tennis:before {\n  content: \"\\f45d\"; }\n\n.fa-tablet:before {\n  content: \"\\f10a\"; }\n\n.fa-tablet-alt:before {\n  content: \"\\f3fa\"; }\n\n.fa-tachometer-alt:before {\n  content: \"\\f3fd\"; }\n\n.fa-tag:before {\n  content: \"\\f02b\"; }\n\n.fa-tags:before {\n  content: \"\\f02c\"; }\n\n.fa-tasks:before {\n  content: \"\\f0ae\"; }\n\n.fa-taxi:before {\n  content: \"\\f1ba\"; }\n\n.fa-telegram:before {\n  content: \"\\f2c6\"; }\n\n.fa-telegram-plane:before {\n  content: \"\\f3fe\"; }\n\n.fa-tencent-weibo:before {\n  content: \"\\f1d5\"; }\n\n.fa-terminal:before {\n  content: \"\\f120\"; }\n\n.fa-text-height:before {\n  content: \"\\f034\"; }\n\n.fa-text-width:before {\n  content: \"\\f035\"; }\n\n.fa-th:before {\n  content: \"\\f00a\"; }\n\n.fa-th-large:before {\n  content: \"\\f009\"; }\n\n.fa-th-list:before {\n  content: \"\\f00b\"; }\n\n.fa-themeisle:before {\n  content: \"\\f2b2\"; }\n\n.fa-thermometer:before {\n  content: \"\\f491\"; }\n\n.fa-thermometer-empty:before {\n  content: \"\\f2cb\"; }\n\n.fa-thermometer-full:before {\n  content: \"\\f2c7\"; }\n\n.fa-thermometer-half:before {\n  content: \"\\f2c9\"; }\n\n.fa-thermometer-quarter:before {\n  content: \"\\f2ca\"; }\n\n.fa-thermometer-three-quarters:before {\n  content: \"\\f2c8\"; }\n\n.fa-thumbs-down:before {\n  content: \"\\f165\"; }\n\n.fa-thumbs-up:before {\n  content: \"\\f164\"; }\n\n.fa-thumbtack:before {\n  content: \"\\f08d\"; }\n\n.fa-ticket-alt:before {\n  content: \"\\f3ff\"; }\n\n.fa-times:before {\n  content: \"\\f00d\"; }\n\n.fa-times-circle:before {\n  content: \"\\f057\"; }\n\n.fa-tint:before {\n  content: \"\\f043\"; }\n\n.fa-toggle-off:before {\n  content: \"\\f204\"; }\n\n.fa-toggle-on:before {\n  content: \"\\f205\"; }\n\n.fa-trademark:before {\n  content: \"\\f25c\"; }\n\n.fa-train:before {\n  content: \"\\f238\"; }\n\n.fa-transgender:before {\n  content: \"\\f224\"; }\n\n.fa-transgender-alt:before {\n  content: \"\\f225\"; }\n\n.fa-trash:before {\n  content: \"\\f1f8\"; }\n\n.fa-trash-alt:before {\n  content: \"\\f2ed\"; }\n\n.fa-tree:before {\n  content: \"\\f1bb\"; }\n\n.fa-trello:before {\n  content: \"\\f181\"; }\n\n.fa-tripadvisor:before {\n  content: \"\\f262\"; }\n\n.fa-trophy:before {\n  content: \"\\f091\"; }\n\n.fa-truck:before {\n  content: \"\\f0d1\"; }\n\n.fa-tty:before {\n  content: \"\\f1e4\"; }\n\n.fa-tumblr:before {\n  content: \"\\f173\"; }\n\n.fa-tumblr-square:before {\n  content: \"\\f174\"; }\n\n.fa-tv:before {\n  content: \"\\f26c\"; }\n\n.fa-twitch:before {\n  content: \"\\f1e8\"; }\n\n.fa-twitter:before {\n  content: \"\\f099\"; }\n\n.fa-twitter-square:before {\n  content: \"\\f081\"; }\n\n.fa-typo3:before {\n  content: \"\\f42b\"; }\n\n.fa-uber:before {\n  content: \"\\f402\"; }\n\n.fa-uikit:before {\n  content: \"\\f403\"; }\n\n.fa-umbrella:before {\n  content: \"\\f0e9\"; }\n\n.fa-underline:before {\n  content: \"\\f0cd\"; }\n\n.fa-undo:before {\n  content: \"\\f0e2\"; }\n\n.fa-undo-alt:before {\n  content: \"\\f2ea\"; }\n\n.fa-uniregistry:before {\n  content: \"\\f404\"; }\n\n.fa-universal-access:before {\n  content: \"\\f29a\"; }\n\n.fa-university:before {\n  content: \"\\f19c\"; }\n\n.fa-unlink:before {\n  content: \"\\f127\"; }\n\n.fa-unlock:before {\n  content: \"\\f09c\"; }\n\n.fa-unlock-alt:before {\n  content: \"\\f13e\"; }\n\n.fa-untappd:before {\n  content: \"\\f405\"; }\n\n.fa-upload:before {\n  content: \"\\f093\"; }\n\n.fa-usb:before {\n  content: \"\\f287\"; }\n\n.fa-user:before {\n  content: \"\\f007\"; }\n\n.fa-user-circle:before {\n  content: \"\\f2bd\"; }\n\n.fa-user-md:before {\n  content: \"\\f0f0\"; }\n\n.fa-user-plus:before {\n  content: \"\\f234\"; }\n\n.fa-user-secret:before {\n  content: \"\\f21b\"; }\n\n.fa-user-times:before {\n  content: \"\\f235\"; }\n\n.fa-users:before {\n  content: \"\\f0c0\"; }\n\n.fa-ussunnah:before {\n  content: \"\\f407\"; }\n\n.fa-utensil-spoon:before {\n  content: \"\\f2e5\"; }\n\n.fa-utensils:before {\n  content: \"\\f2e7\"; }\n\n.fa-vaadin:before {\n  content: \"\\f408\"; }\n\n.fa-venus:before {\n  content: \"\\f221\"; }\n\n.fa-venus-double:before {\n  content: \"\\f226\"; }\n\n.fa-venus-mars:before {\n  content: \"\\f228\"; }\n\n.fa-viacoin:before {\n  content: \"\\f237\"; }\n\n.fa-viadeo:before {\n  content: \"\\f2a9\"; }\n\n.fa-viadeo-square:before {\n  content: \"\\f2aa\"; }\n\n.fa-viber:before {\n  content: \"\\f409\"; }\n\n.fa-video:before {\n  content: \"\\f03d\"; }\n\n.fa-vimeo:before {\n  content: \"\\f40a\"; }\n\n.fa-vimeo-square:before {\n  content: \"\\f194\"; }\n\n.fa-vimeo-v:before {\n  content: \"\\f27d\"; }\n\n.fa-vine:before {\n  content: \"\\f1ca\"; }\n\n.fa-vk:before {\n  content: \"\\f189\"; }\n\n.fa-vnv:before {\n  content: \"\\f40b\"; }\n\n.fa-volleyball-ball:before {\n  content: \"\\f45f\"; }\n\n.fa-volume-down:before {\n  content: \"\\f027\"; }\n\n.fa-volume-off:before {\n  content: \"\\f026\"; }\n\n.fa-volume-up:before {\n  content: \"\\f028\"; }\n\n.fa-vuejs:before {\n  content: \"\\f41f\"; }\n\n.fa-warehouse:before {\n  content: \"\\f494\"; }\n\n.fa-weibo:before {\n  content: \"\\f18a\"; }\n\n.fa-weight:before {\n  content: \"\\f496\"; }\n\n.fa-weixin:before {\n  content: \"\\f1d7\"; }\n\n.fa-whatsapp:before {\n  content: \"\\f232\"; }\n\n.fa-whatsapp-square:before {\n  content: \"\\f40c\"; }\n\n.fa-wheelchair:before {\n  content: \"\\f193\"; }\n\n.fa-whmcs:before {\n  content: \"\\f40d\"; }\n\n.fa-wifi:before {\n  content: \"\\f1eb\"; }\n\n.fa-wikipedia-w:before {\n  content: \"\\f266\"; }\n\n.fa-window-close:before {\n  content: \"\\f410\"; }\n\n.fa-window-maximize:before {\n  content: \"\\f2d0\"; }\n\n.fa-window-minimize:before {\n  content: \"\\f2d1\"; }\n\n.fa-window-restore:before {\n  content: \"\\f2d2\"; }\n\n.fa-windows:before {\n  content: \"\\f17a\"; }\n\n.fa-won-sign:before {\n  content: \"\\f159\"; }\n\n.fa-wordpress:before {\n  content: \"\\f19a\"; }\n\n.fa-wordpress-simple:before {\n  content: \"\\f411\"; }\n\n.fa-wpbeginner:before {\n  content: \"\\f297\"; }\n\n.fa-wpexplorer:before {\n  content: \"\\f2de\"; }\n\n.fa-wpforms:before {\n  content: \"\\f298\"; }\n\n.fa-wrench:before {\n  content: \"\\f0ad\"; }\n\n.fa-xbox:before {\n  content: \"\\f412\"; }\n\n.fa-xing:before {\n  content: \"\\f168\"; }\n\n.fa-xing-square:before {\n  content: \"\\f169\"; }\n\n.fa-y-combinator:before {\n  content: \"\\f23b\"; }\n\n.fa-yahoo:before {\n  content: \"\\f19e\"; }\n\n.fa-yandex:before {\n  content: \"\\f413\"; }\n\n.fa-yandex-international:before {\n  content: \"\\f414\"; }\n\n.fa-yelp:before {\n  content: \"\\f1e9\"; }\n\n.fa-yen-sign:before {\n  content: \"\\f157\"; }\n\n.fa-yoast:before {\n  content: \"\\f2b1\"; }\n\n.fa-youtube:before {\n  content: \"\\f167\"; }\n\n.fa-youtube-square:before {\n  content: \"\\f431\"; }\n\n.sr-only {\n  border: 0;\n  clip: rect(0, 0, 0, 0);\n  height: 1px;\n  margin: -1px;\n  overflow: hidden;\n  padding: 0;\n  position: absolute;\n  width: 1px; }\n\n.sr-only-focusable:active, .sr-only-focusable:focus {\n  clip: auto;\n  height: auto;\n  margin: 0;\n  overflow: visible;\n  position: static;\n  width: auto; }\n@font-face {\n  font-family: 'Font Awesome 5 Brands';\n  font-style: normal;\n  font-weight: normal;\n  src: url(\"../webfonts/fa-brands-400.eot\");\n  src: url(\"../webfonts/fa-brands-400.eot?#iefix\") format(\"embedded-opentype\"), url(\"../webfonts/fa-brands-400.woff2\") format(\"woff2\"), url(\"../webfonts/fa-brands-400.woff\") format(\"woff\"), url(\"../webfonts/fa-brands-400.ttf\") format(\"truetype\"), url(\"../webfonts/fa-brands-400.svg#fontawesome\") format(\"svg\"); }\n\n.fab {\n  font-family: 'Font Awesome 5 Brands'; }\n@font-face {\n  font-family: 'Font Awesome 5 Free';\n  font-style: normal;\n  font-weight: 400;\n  src: url(\"../webfonts/fa-regular-400.eot\");\n  src: url(\"../webfonts/fa-regular-400.eot?#iefix\") format(\"embedded-opentype\"), url(\"../webfonts/fa-regular-400.woff2\") format(\"woff2\"), url(\"../webfonts/fa-regular-400.woff\") format(\"woff\"), url(\"../webfonts/fa-regular-400.ttf\") format(\"truetype\"), url(\"../webfonts/fa-regular-400.svg#fontawesome\") format(\"svg\"); }\n\n.far {\n  font-family: 'Font Awesome 5 Free';\n  font-weight: 400; }\n@font-face {\n  font-family: 'Font Awesome 5 Free';\n  font-style: normal;\n  font-weight: 900;\n  src: url(\"../webfonts/fa-solid-900.eot\");\n  src: url(\"../webfonts/fa-solid-900.eot?#iefix\") format(\"embedded-opentype\"), url(\"../webfonts/fa-solid-900.woff2\") format(\"woff2\"), url(\"../webfonts/fa-solid-900.woff\") format(\"woff\"), url(\"../webfonts/fa-solid-900.ttf\") format(\"truetype\"), url(\"../webfonts/fa-solid-900.svg#fontawesome\") format(\"svg\"); }\n\n.fa,\n.fas {\n  font-family: 'Font Awesome 5 Free';\n  font-weight: 900; }\n"
  },
  {
    "path": "src/sourceDev.WebApp/SharedThemes/solar/wwwroot/css/site.css",
    "content": "﻿html {\n    position: relative;\n    min-height: 100%;\n}\n\nbody {\n    min-height: 100vh;\n    padding-top: 160px;\n}\n\n#newPostLink {\n    position: absolute;\n    top: 170px;\n    right: 0px;\n}\n\n#editPostLink {\n    position: absolute;\n    top: 200px;\n    right: 0px;\n}\n\n#unpublishPostLink {\n    position: absolute;\n    top: 230px !important;\n    right: 0px !important;\n}\n\n#pageManagerLink {\n    position: absolute;\n    top: 170px;\n    right: 0px;\n}\n\n#newPageLink {\n    position: absolute;\n    top: 200px;\n    right: 0px;\n}\n\n#editPageLink {\n    position: absolute;\n    top: 230px;\n    right: 0px\n}\n\n#unpublishPageLink {\n    position: absolute;\n    top: 260px !important;\n    right: 0px !important\n}\n\n#sidenavtoggle {\n    position: absolute;\n    top: 220px;\n    right: 5px;\n}\n\n\n@media screen and (max-width: 812px) {\n    #sidenavtoggle,\n    #sidenavmenu {\n        display: none;\n    }\n}\n\n.flex-fill {\n    flex: 1 1 auto !important;\n}\n\n\n.carousel-caption p {\n    font-size: 20px;\n    line-height: 1.4;\n}\n\n@media screen and (max-width: 768px) {\n    .carousel-caption {\n        display: none\n    }\n}\n\n\n\n\nimg, video, iframe {\n    max-width: 100%;\n}\n\ntd img, video, iframe {\n    max-width: none;\n}\n\n\n\n.table td, .table th {\n    vertical-align: inherit;\n}\n\n/******** jquery smartmenu bootstrap 4 ******/\n/* Carets in collapsible mode (make them look like +/- buttons) */\n.navbar-nav.sm-collapsible .sub-arrow {\n    position: absolute;\n    top: 50%;\n    right: 0;\n    margin: -0.7em 0.5em 0 0;\n    border: 1px solid rgba(0, 0, 0, .1);\n    border-radius: .25rem;\n    padding: 0;\n    width: 2em;\n    height: 1.4em;\n    font-size: 1.25rem;\n    line-height: 1.2em;\n    text-align: center;\n}\n\n    .navbar-nav.sm-collapsible .sub-arrow::before {\n        content: '+';\n    }\n\n.navbar-nav.sm-collapsible .show > a > .sub-arrow::before {\n    content: '-';\n}\n\n.navbar-dark .navbar-nav.sm-collapsible .nav-link .sub-arrow {\n    border-color: rgba(255, 255, 255, .1);\n}\n/* make sure there's room for the carets */\n.navbar-nav.sm-collapsible .has-submenu {\n    padding-right: 3em;\n}\n/* keep the carets properly positioned */\n.navbar-nav.sm-collapsible .nav-link,\n.navbar-nav.sm-collapsible .dropdown-item {\n    position: relative;\n}\n\n\n/* Nav carets in expanded mode */\n.navbar-nav:not(.sm-collapsible) .nav-link .sub-arrow {\n    display: inline-block;\n    width: 0;\n    height: 0;\n    margin-left: .255em;\n    vertical-align: .255em;\n    border-top: .3em solid;\n    border-right: .3em solid transparent;\n    border-left: .3em solid transparent;\n}\n/* point the arrows up for .fixed-bottom navbars */\n.fixed-bottom .navbar-nav:not(.sm-collapsible) .nav-link .sub-arrow,\n.fixed-bottom .navbar-nav:not(.sm-collapsible):not([data-sm-skip]) .dropdown-toggle::after {\n    border-top: 0;\n    border-bottom: .3em solid;\n}\n\n\n/* Dropdown carets in expanded mode */\n.navbar-nav:not(.sm-collapsible) .dropdown-item .sub-arrow,\n.navbar-nav:not(.sm-collapsible):not([data-sm-skip]) .dropdown-menu .dropdown-toggle::after {\n    position: absolute;\n    top: 50%;\n    right: 0;\n    width: 0;\n    height: 0;\n    margin-top: -.3em;\n    margin-right: 1em;\n    border-top: .3em solid transparent;\n    border-bottom: .3em solid transparent;\n    border-left: .3em solid;\n}\n/* make sure there's room for the carets */\n.navbar-nav:not(.sm-collapsible) .dropdown-item.has-submenu {\n    padding-right: 2em;\n}\n\n\n/* Scrolling arrows for tall menus */\n.navbar-nav .scroll-up,\n.navbar-nav .scroll-down {\n    position: absolute;\n    display: none;\n    visibility: hidden;\n    height: 20px;\n    overflow: hidden;\n    text-align: center;\n}\n\n.navbar-nav .scroll-up-arrow,\n.navbar-nav .scroll-down-arrow {\n    position: absolute;\n    top: -2px;\n    left: 50%;\n    margin-left: -8px;\n    width: 0;\n    height: 0;\n    overflow: hidden;\n    border-top: 7px solid transparent;\n    border-right: 7px solid transparent;\n    border-bottom: 7px solid;\n    border-left: 7px solid transparent;\n}\n\n.navbar-nav .scroll-down-arrow {\n    top: 6px;\n    border-top: 7px solid;\n    border-right: 7px solid transparent;\n    border-bottom: 7px solid transparent;\n    border-left: 7px solid transparent;\n}\n\n\n/* Add some spacing for 2+ level sub menus in collapsible mode */\n.navbar-nav.sm-collapsible .dropdown-menu .dropdown-menu {\n    margin: .5em;\n}\n\n\n/* Fix SmartMenus sub menus auto width (subMenusMinWidth/subMenusMaxWidth options) */\n.navbar-nav:not([data-sm-skip]) .dropdown-item {\n    white-space: normal;\n}\n\n.navbar-nav:not(.sm-collapsible) .sm-nowrap > li > .dropdown-item {\n    white-space: nowrap;\n}\n/******** end jquery smart menu bootstrap-4 *****************/\n\n.brand-header {\n    height: 100px;\n    background-color: #002B36;\n}\n\nheader .navbar {\n    top: 100px;\n}\n"
  },
  {
    "path": "src/sourceDev.WebApp/SharedThemes/solar/wwwroot/js/bootstrap.bundle.js",
    "content": "/*!\n  * Bootstrap v5.0.2 (https://getbootstrap.com/)\n  * Copyright 2011-2021 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)\n  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n  */\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n  typeof define === 'function' && define.amd ? define(factory) :\n  (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.bootstrap = factory());\n}(this, (function () { 'use strict';\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): dom/selector-engine.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n  const NODE_TEXT = 3;\n  const SelectorEngine = {\n    find(selector, element = document.documentElement) {\n      return [].concat(...Element.prototype.querySelectorAll.call(element, selector));\n    },\n\n    findOne(selector, element = document.documentElement) {\n      return Element.prototype.querySelector.call(element, selector);\n    },\n\n    children(element, selector) {\n      return [].concat(...element.children).filter(child => child.matches(selector));\n    },\n\n    parents(element, selector) {\n      const parents = [];\n      let ancestor = element.parentNode;\n\n      while (ancestor && ancestor.nodeType === Node.ELEMENT_NODE && ancestor.nodeType !== NODE_TEXT) {\n        if (ancestor.matches(selector)) {\n          parents.push(ancestor);\n        }\n\n        ancestor = ancestor.parentNode;\n      }\n\n      return parents;\n    },\n\n    prev(element, selector) {\n      let previous = element.previousElementSibling;\n\n      while (previous) {\n        if (previous.matches(selector)) {\n          return [previous];\n        }\n\n        previous = previous.previousElementSibling;\n      }\n\n      return [];\n    },\n\n    next(element, selector) {\n      let next = element.nextElementSibling;\n\n      while (next) {\n        if (next.matches(selector)) {\n          return [next];\n        }\n\n        next = next.nextElementSibling;\n      }\n\n      return [];\n    }\n\n  };\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): util/index.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n\n  const MAX_UID = 1000000;\n  const MILLISECONDS_MULTIPLIER = 1000;\n  const TRANSITION_END = 'transitionend'; // Shoutout AngusCroll (https://goo.gl/pxwQGp)\n\n  const toType = obj => {\n    if (obj === null || obj === undefined) {\n      return `${obj}`;\n    }\n\n    return {}.toString.call(obj).match(/\\s([a-z]+)/i)[1].toLowerCase();\n  };\n  /**\n   * --------------------------------------------------------------------------\n   * Public Util Api\n   * --------------------------------------------------------------------------\n   */\n\n\n  const getUID = prefix => {\n    do {\n      prefix += Math.floor(Math.random() * MAX_UID);\n    } while (document.getElementById(prefix));\n\n    return prefix;\n  };\n\n  const getSelector = element => {\n    let selector = element.getAttribute('data-bs-target');\n\n    if (!selector || selector === '#') {\n      let hrefAttr = element.getAttribute('href'); // The only valid content that could double as a selector are IDs or classes,\n      // so everything starting with `#` or `.`. If a \"real\" URL is used as the selector,\n      // `document.querySelector` will rightfully complain it is invalid.\n      // See https://github.com/twbs/bootstrap/issues/32273\n\n      if (!hrefAttr || !hrefAttr.includes('#') && !hrefAttr.startsWith('.')) {\n        return null;\n      } // Just in case some CMS puts out a full URL with the anchor appended\n\n\n      if (hrefAttr.includes('#') && !hrefAttr.startsWith('#')) {\n        hrefAttr = `#${hrefAttr.split('#')[1]}`;\n      }\n\n      selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : null;\n    }\n\n    return selector;\n  };\n\n  const getSelectorFromElement = element => {\n    const selector = getSelector(element);\n\n    if (selector) {\n      return document.querySelector(selector) ? selector : null;\n    }\n\n    return null;\n  };\n\n  const getElementFromSelector = element => {\n    const selector = getSelector(element);\n    return selector ? document.querySelector(selector) : null;\n  };\n\n  const getTransitionDurationFromElement = element => {\n    if (!element) {\n      return 0;\n    } // Get transition-duration of the element\n\n\n    let {\n      transitionDuration,\n      transitionDelay\n    } = window.getComputedStyle(element);\n    const floatTransitionDuration = Number.parseFloat(transitionDuration);\n    const floatTransitionDelay = Number.parseFloat(transitionDelay); // Return 0 if element or transition duration is not found\n\n    if (!floatTransitionDuration && !floatTransitionDelay) {\n      return 0;\n    } // If multiple durations are defined, take the first\n\n\n    transitionDuration = transitionDuration.split(',')[0];\n    transitionDelay = transitionDelay.split(',')[0];\n    return (Number.parseFloat(transitionDuration) + Number.parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER;\n  };\n\n  const triggerTransitionEnd = element => {\n    element.dispatchEvent(new Event(TRANSITION_END));\n  };\n\n  const isElement$1 = obj => {\n    if (!obj || typeof obj !== 'object') {\n      return false;\n    }\n\n    if (typeof obj.jquery !== 'undefined') {\n      obj = obj[0];\n    }\n\n    return typeof obj.nodeType !== 'undefined';\n  };\n\n  const getElement = obj => {\n    if (isElement$1(obj)) {\n      // it's a jQuery object or a node element\n      return obj.jquery ? obj[0] : obj;\n    }\n\n    if (typeof obj === 'string' && obj.length > 0) {\n      return SelectorEngine.findOne(obj);\n    }\n\n    return null;\n  };\n\n  const typeCheckConfig = (componentName, config, configTypes) => {\n    Object.keys(configTypes).forEach(property => {\n      const expectedTypes = configTypes[property];\n      const value = config[property];\n      const valueType = value && isElement$1(value) ? 'element' : toType(value);\n\n      if (!new RegExp(expectedTypes).test(valueType)) {\n        throw new TypeError(`${componentName.toUpperCase()}: Option \"${property}\" provided type \"${valueType}\" but expected type \"${expectedTypes}\".`);\n      }\n    });\n  };\n\n  const isVisible = element => {\n    if (!isElement$1(element) || element.getClientRects().length === 0) {\n      return false;\n    }\n\n    return getComputedStyle(element).getPropertyValue('visibility') === 'visible';\n  };\n\n  const isDisabled = element => {\n    if (!element || element.nodeType !== Node.ELEMENT_NODE) {\n      return true;\n    }\n\n    if (element.classList.contains('disabled')) {\n      return true;\n    }\n\n    if (typeof element.disabled !== 'undefined') {\n      return element.disabled;\n    }\n\n    return element.hasAttribute('disabled') && element.getAttribute('disabled') !== 'false';\n  };\n\n  const findShadowRoot = element => {\n    if (!document.documentElement.attachShadow) {\n      return null;\n    } // Can find the shadow root otherwise it'll return the document\n\n\n    if (typeof element.getRootNode === 'function') {\n      const root = element.getRootNode();\n      return root instanceof ShadowRoot ? root : null;\n    }\n\n    if (element instanceof ShadowRoot) {\n      return element;\n    } // when we don't find a shadow root\n\n\n    if (!element.parentNode) {\n      return null;\n    }\n\n    return findShadowRoot(element.parentNode);\n  };\n\n  const noop = () => {};\n\n  const reflow = element => element.offsetHeight;\n\n  const getjQuery = () => {\n    const {\n      jQuery\n    } = window;\n\n    if (jQuery && !document.body.hasAttribute('data-bs-no-jquery')) {\n      return jQuery;\n    }\n\n    return null;\n  };\n\n  const DOMContentLoadedCallbacks = [];\n\n  const onDOMContentLoaded = callback => {\n    if (document.readyState === 'loading') {\n      // add listener on the first call when the document is in loading state\n      if (!DOMContentLoadedCallbacks.length) {\n        document.addEventListener('DOMContentLoaded', () => {\n          DOMContentLoadedCallbacks.forEach(callback => callback());\n        });\n      }\n\n      DOMContentLoadedCallbacks.push(callback);\n    } else {\n      callback();\n    }\n  };\n\n  const isRTL = () => document.documentElement.dir === 'rtl';\n\n  const defineJQueryPlugin = plugin => {\n    onDOMContentLoaded(() => {\n      const $ = getjQuery();\n      /* istanbul ignore if */\n\n      if ($) {\n        const name = plugin.NAME;\n        const JQUERY_NO_CONFLICT = $.fn[name];\n        $.fn[name] = plugin.jQueryInterface;\n        $.fn[name].Constructor = plugin;\n\n        $.fn[name].noConflict = () => {\n          $.fn[name] = JQUERY_NO_CONFLICT;\n          return plugin.jQueryInterface;\n        };\n      }\n    });\n  };\n\n  const execute = callback => {\n    if (typeof callback === 'function') {\n      callback();\n    }\n  };\n\n  const executeAfterTransition = (callback, transitionElement, waitForTransition = true) => {\n    if (!waitForTransition) {\n      execute(callback);\n      return;\n    }\n\n    const durationPadding = 5;\n    const emulatedDuration = getTransitionDurationFromElement(transitionElement) + durationPadding;\n    let called = false;\n\n    const handler = ({\n      target\n    }) => {\n      if (target !== transitionElement) {\n        return;\n      }\n\n      called = true;\n      transitionElement.removeEventListener(TRANSITION_END, handler);\n      execute(callback);\n    };\n\n    transitionElement.addEventListener(TRANSITION_END, handler);\n    setTimeout(() => {\n      if (!called) {\n        triggerTransitionEnd(transitionElement);\n      }\n    }, emulatedDuration);\n  };\n  /**\n   * Return the previous/next element of a list.\n   *\n   * @param {array} list    The list of elements\n   * @param activeElement   The active element\n   * @param shouldGetNext   Choose to get next or previous element\n   * @param isCycleAllowed\n   * @return {Element|elem} The proper element\n   */\n\n\n  const getNextActiveElement = (list, activeElement, shouldGetNext, isCycleAllowed) => {\n    let index = list.indexOf(activeElement); // if the element does not exist in the list return an element depending on the direction and if cycle is allowed\n\n    if (index === -1) {\n      return list[!shouldGetNext && isCycleAllowed ? list.length - 1 : 0];\n    }\n\n    const listLength = list.length;\n    index += shouldGetNext ? 1 : -1;\n\n    if (isCycleAllowed) {\n      index = (index + listLength) % listLength;\n    }\n\n    return list[Math.max(0, Math.min(index, listLength - 1))];\n  };\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): dom/event-handler.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const namespaceRegex = /[^.]*(?=\\..*)\\.|.*/;\n  const stripNameRegex = /\\..*/;\n  const stripUidRegex = /::\\d+$/;\n  const eventRegistry = {}; // Events storage\n\n  let uidEvent = 1;\n  const customEvents = {\n    mouseenter: 'mouseover',\n    mouseleave: 'mouseout'\n  };\n  const customEventsRegex = /^(mouseenter|mouseleave)/i;\n  const nativeEvents = new Set(['click', 'dblclick', 'mouseup', 'mousedown', 'contextmenu', 'mousewheel', 'DOMMouseScroll', 'mouseover', 'mouseout', 'mousemove', 'selectstart', 'selectend', 'keydown', 'keypress', 'keyup', 'orientationchange', 'touchstart', 'touchmove', 'touchend', 'touchcancel', 'pointerdown', 'pointermove', 'pointerup', 'pointerleave', 'pointercancel', 'gesturestart', 'gesturechange', 'gestureend', 'focus', 'blur', 'change', 'reset', 'select', 'submit', 'focusin', 'focusout', 'load', 'unload', 'beforeunload', 'resize', 'move', 'DOMContentLoaded', 'readystatechange', 'error', 'abort', 'scroll']);\n  /**\n   * ------------------------------------------------------------------------\n   * Private methods\n   * ------------------------------------------------------------------------\n   */\n\n  function getUidEvent(element, uid) {\n    return uid && `${uid}::${uidEvent++}` || element.uidEvent || uidEvent++;\n  }\n\n  function getEvent(element) {\n    const uid = getUidEvent(element);\n    element.uidEvent = uid;\n    eventRegistry[uid] = eventRegistry[uid] || {};\n    return eventRegistry[uid];\n  }\n\n  function bootstrapHandler(element, fn) {\n    return function handler(event) {\n      event.delegateTarget = element;\n\n      if (handler.oneOff) {\n        EventHandler.off(element, event.type, fn);\n      }\n\n      return fn.apply(element, [event]);\n    };\n  }\n\n  function bootstrapDelegationHandler(element, selector, fn) {\n    return function handler(event) {\n      const domElements = element.querySelectorAll(selector);\n\n      for (let {\n        target\n      } = event; target && target !== this; target = target.parentNode) {\n        for (let i = domElements.length; i--;) {\n          if (domElements[i] === target) {\n            event.delegateTarget = target;\n\n            if (handler.oneOff) {\n              // eslint-disable-next-line unicorn/consistent-destructuring\n              EventHandler.off(element, event.type, selector, fn);\n            }\n\n            return fn.apply(target, [event]);\n          }\n        }\n      } // To please ESLint\n\n\n      return null;\n    };\n  }\n\n  function findHandler(events, handler, delegationSelector = null) {\n    const uidEventList = Object.keys(events);\n\n    for (let i = 0, len = uidEventList.length; i < len; i++) {\n      const event = events[uidEventList[i]];\n\n      if (event.originalHandler === handler && event.delegationSelector === delegationSelector) {\n        return event;\n      }\n    }\n\n    return null;\n  }\n\n  function normalizeParams(originalTypeEvent, handler, delegationFn) {\n    const delegation = typeof handler === 'string';\n    const originalHandler = delegation ? delegationFn : handler;\n    let typeEvent = getTypeEvent(originalTypeEvent);\n    const isNative = nativeEvents.has(typeEvent);\n\n    if (!isNative) {\n      typeEvent = originalTypeEvent;\n    }\n\n    return [delegation, originalHandler, typeEvent];\n  }\n\n  function addHandler(element, originalTypeEvent, handler, delegationFn, oneOff) {\n    if (typeof originalTypeEvent !== 'string' || !element) {\n      return;\n    }\n\n    if (!handler) {\n      handler = delegationFn;\n      delegationFn = null;\n    } // in case of mouseenter or mouseleave wrap the handler within a function that checks for its DOM position\n    // this prevents the handler from being dispatched the same way as mouseover or mouseout does\n\n\n    if (customEventsRegex.test(originalTypeEvent)) {\n      const wrapFn = fn => {\n        return function (event) {\n          if (!event.relatedTarget || event.relatedTarget !== event.delegateTarget && !event.delegateTarget.contains(event.relatedTarget)) {\n            return fn.call(this, event);\n          }\n        };\n      };\n\n      if (delegationFn) {\n        delegationFn = wrapFn(delegationFn);\n      } else {\n        handler = wrapFn(handler);\n      }\n    }\n\n    const [delegation, originalHandler, typeEvent] = normalizeParams(originalTypeEvent, handler, delegationFn);\n    const events = getEvent(element);\n    const handlers = events[typeEvent] || (events[typeEvent] = {});\n    const previousFn = findHandler(handlers, originalHandler, delegation ? handler : null);\n\n    if (previousFn) {\n      previousFn.oneOff = previousFn.oneOff && oneOff;\n      return;\n    }\n\n    const uid = getUidEvent(originalHandler, originalTypeEvent.replace(namespaceRegex, ''));\n    const fn = delegation ? bootstrapDelegationHandler(element, handler, delegationFn) : bootstrapHandler(element, handler);\n    fn.delegationSelector = delegation ? handler : null;\n    fn.originalHandler = originalHandler;\n    fn.oneOff = oneOff;\n    fn.uidEvent = uid;\n    handlers[uid] = fn;\n    element.addEventListener(typeEvent, fn, delegation);\n  }\n\n  function removeHandler(element, events, typeEvent, handler, delegationSelector) {\n    const fn = findHandler(events[typeEvent], handler, delegationSelector);\n\n    if (!fn) {\n      return;\n    }\n\n    element.removeEventListener(typeEvent, fn, Boolean(delegationSelector));\n    delete events[typeEvent][fn.uidEvent];\n  }\n\n  function removeNamespacedHandlers(element, events, typeEvent, namespace) {\n    const storeElementEvent = events[typeEvent] || {};\n    Object.keys(storeElementEvent).forEach(handlerKey => {\n      if (handlerKey.includes(namespace)) {\n        const event = storeElementEvent[handlerKey];\n        removeHandler(element, events, typeEvent, event.originalHandler, event.delegationSelector);\n      }\n    });\n  }\n\n  function getTypeEvent(event) {\n    // allow to get the native events from namespaced events ('click.bs.button' --> 'click')\n    event = event.replace(stripNameRegex, '');\n    return customEvents[event] || event;\n  }\n\n  const EventHandler = {\n    on(element, event, handler, delegationFn) {\n      addHandler(element, event, handler, delegationFn, false);\n    },\n\n    one(element, event, handler, delegationFn) {\n      addHandler(element, event, handler, delegationFn, true);\n    },\n\n    off(element, originalTypeEvent, handler, delegationFn) {\n      if (typeof originalTypeEvent !== 'string' || !element) {\n        return;\n      }\n\n      const [delegation, originalHandler, typeEvent] = normalizeParams(originalTypeEvent, handler, delegationFn);\n      const inNamespace = typeEvent !== originalTypeEvent;\n      const events = getEvent(element);\n      const isNamespace = originalTypeEvent.startsWith('.');\n\n      if (typeof originalHandler !== 'undefined') {\n        // Simplest case: handler is passed, remove that listener ONLY.\n        if (!events || !events[typeEvent]) {\n          return;\n        }\n\n        removeHandler(element, events, typeEvent, originalHandler, delegation ? handler : null);\n        return;\n      }\n\n      if (isNamespace) {\n        Object.keys(events).forEach(elementEvent => {\n          removeNamespacedHandlers(element, events, elementEvent, originalTypeEvent.slice(1));\n        });\n      }\n\n      const storeElementEvent = events[typeEvent] || {};\n      Object.keys(storeElementEvent).forEach(keyHandlers => {\n        const handlerKey = keyHandlers.replace(stripUidRegex, '');\n\n        if (!inNamespace || originalTypeEvent.includes(handlerKey)) {\n          const event = storeElementEvent[keyHandlers];\n          removeHandler(element, events, typeEvent, event.originalHandler, event.delegationSelector);\n        }\n      });\n    },\n\n    trigger(element, event, args) {\n      if (typeof event !== 'string' || !element) {\n        return null;\n      }\n\n      const $ = getjQuery();\n      const typeEvent = getTypeEvent(event);\n      const inNamespace = event !== typeEvent;\n      const isNative = nativeEvents.has(typeEvent);\n      let jQueryEvent;\n      let bubbles = true;\n      let nativeDispatch = true;\n      let defaultPrevented = false;\n      let evt = null;\n\n      if (inNamespace && $) {\n        jQueryEvent = $.Event(event, args);\n        $(element).trigger(jQueryEvent);\n        bubbles = !jQueryEvent.isPropagationStopped();\n        nativeDispatch = !jQueryEvent.isImmediatePropagationStopped();\n        defaultPrevented = jQueryEvent.isDefaultPrevented();\n      }\n\n      if (isNative) {\n        evt = document.createEvent('HTMLEvents');\n        evt.initEvent(typeEvent, bubbles, true);\n      } else {\n        evt = new CustomEvent(event, {\n          bubbles,\n          cancelable: true\n        });\n      } // merge custom information in our event\n\n\n      if (typeof args !== 'undefined') {\n        Object.keys(args).forEach(key => {\n          Object.defineProperty(evt, key, {\n            get() {\n              return args[key];\n            }\n\n          });\n        });\n      }\n\n      if (defaultPrevented) {\n        evt.preventDefault();\n      }\n\n      if (nativeDispatch) {\n        element.dispatchEvent(evt);\n      }\n\n      if (evt.defaultPrevented && typeof jQueryEvent !== 'undefined') {\n        jQueryEvent.preventDefault();\n      }\n\n      return evt;\n    }\n\n  };\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): dom/data.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n  const elementMap = new Map();\n  var Data = {\n    set(element, key, instance) {\n      if (!elementMap.has(element)) {\n        elementMap.set(element, new Map());\n      }\n\n      const instanceMap = elementMap.get(element); // make it clear we only want one instance per element\n      // can be removed later when multiple key/instances are fine to be used\n\n      if (!instanceMap.has(key) && instanceMap.size !== 0) {\n        // eslint-disable-next-line no-console\n        console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(instanceMap.keys())[0]}.`);\n        return;\n      }\n\n      instanceMap.set(key, instance);\n    },\n\n    get(element, key) {\n      if (elementMap.has(element)) {\n        return elementMap.get(element).get(key) || null;\n      }\n\n      return null;\n    },\n\n    remove(element, key) {\n      if (!elementMap.has(element)) {\n        return;\n      }\n\n      const instanceMap = elementMap.get(element);\n      instanceMap.delete(key); // free up element references if there are no instances left for an element\n\n      if (instanceMap.size === 0) {\n        elementMap.delete(element);\n      }\n    }\n\n  };\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): base-component.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const VERSION = '5.0.2';\n\n  class BaseComponent {\n    constructor(element) {\n      element = getElement(element);\n\n      if (!element) {\n        return;\n      }\n\n      this._element = element;\n      Data.set(this._element, this.constructor.DATA_KEY, this);\n    }\n\n    dispose() {\n      Data.remove(this._element, this.constructor.DATA_KEY);\n      EventHandler.off(this._element, this.constructor.EVENT_KEY);\n      Object.getOwnPropertyNames(this).forEach(propertyName => {\n        this[propertyName] = null;\n      });\n    }\n\n    _queueCallback(callback, element, isAnimated = true) {\n      executeAfterTransition(callback, element, isAnimated);\n    }\n    /** Static */\n\n\n    static getInstance(element) {\n      return Data.get(element, this.DATA_KEY);\n    }\n\n    static getOrCreateInstance(element, config = {}) {\n      return this.getInstance(element) || new this(element, typeof config === 'object' ? config : null);\n    }\n\n    static get VERSION() {\n      return VERSION;\n    }\n\n    static get NAME() {\n      throw new Error('You have to implement the static method \"NAME\", for each component!');\n    }\n\n    static get DATA_KEY() {\n      return `bs.${this.NAME}`;\n    }\n\n    static get EVENT_KEY() {\n      return `.${this.DATA_KEY}`;\n    }\n\n  }\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): alert.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$c = 'alert';\n  const DATA_KEY$b = 'bs.alert';\n  const EVENT_KEY$b = `.${DATA_KEY$b}`;\n  const DATA_API_KEY$8 = '.data-api';\n  const SELECTOR_DISMISS = '[data-bs-dismiss=\"alert\"]';\n  const EVENT_CLOSE = `close${EVENT_KEY$b}`;\n  const EVENT_CLOSED = `closed${EVENT_KEY$b}`;\n  const EVENT_CLICK_DATA_API$7 = `click${EVENT_KEY$b}${DATA_API_KEY$8}`;\n  const CLASS_NAME_ALERT = 'alert';\n  const CLASS_NAME_FADE$6 = 'fade';\n  const CLASS_NAME_SHOW$9 = 'show';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Alert extends BaseComponent {\n    // Getters\n    static get NAME() {\n      return NAME$c;\n    } // Public\n\n\n    close(element) {\n      const rootElement = element ? this._getRootElement(element) : this._element;\n\n      const customEvent = this._triggerCloseEvent(rootElement);\n\n      if (customEvent === null || customEvent.defaultPrevented) {\n        return;\n      }\n\n      this._removeElement(rootElement);\n    } // Private\n\n\n    _getRootElement(element) {\n      return getElementFromSelector(element) || element.closest(`.${CLASS_NAME_ALERT}`);\n    }\n\n    _triggerCloseEvent(element) {\n      return EventHandler.trigger(element, EVENT_CLOSE);\n    }\n\n    _removeElement(element) {\n      element.classList.remove(CLASS_NAME_SHOW$9);\n      const isAnimated = element.classList.contains(CLASS_NAME_FADE$6);\n\n      this._queueCallback(() => this._destroyElement(element), element, isAnimated);\n    }\n\n    _destroyElement(element) {\n      element.remove();\n      EventHandler.trigger(element, EVENT_CLOSED);\n    } // Static\n\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = Alert.getOrCreateInstance(this);\n\n        if (config === 'close') {\n          data[config](this);\n        }\n      });\n    }\n\n    static handleDismiss(alertInstance) {\n      return function (event) {\n        if (event) {\n          event.preventDefault();\n        }\n\n        alertInstance.close(this);\n      };\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(document, EVENT_CLICK_DATA_API$7, SELECTOR_DISMISS, Alert.handleDismiss(new Alert()));\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Alert to jQuery only if jQuery is present\n   */\n\n  defineJQueryPlugin(Alert);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): button.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$b = 'button';\n  const DATA_KEY$a = 'bs.button';\n  const EVENT_KEY$a = `.${DATA_KEY$a}`;\n  const DATA_API_KEY$7 = '.data-api';\n  const CLASS_NAME_ACTIVE$3 = 'active';\n  const SELECTOR_DATA_TOGGLE$5 = '[data-bs-toggle=\"button\"]';\n  const EVENT_CLICK_DATA_API$6 = `click${EVENT_KEY$a}${DATA_API_KEY$7}`;\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Button extends BaseComponent {\n    // Getters\n    static get NAME() {\n      return NAME$b;\n    } // Public\n\n\n    toggle() {\n      // Toggle class and sync the `aria-pressed` attribute with the return value of the `.toggle()` method\n      this._element.setAttribute('aria-pressed', this._element.classList.toggle(CLASS_NAME_ACTIVE$3));\n    } // Static\n\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = Button.getOrCreateInstance(this);\n\n        if (config === 'toggle') {\n          data[config]();\n        }\n      });\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(document, EVENT_CLICK_DATA_API$6, SELECTOR_DATA_TOGGLE$5, event => {\n    event.preventDefault();\n    const button = event.target.closest(SELECTOR_DATA_TOGGLE$5);\n    const data = Button.getOrCreateInstance(button);\n    data.toggle();\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Button to jQuery only if jQuery is present\n   */\n\n  defineJQueryPlugin(Button);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): dom/manipulator.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  function normalizeData(val) {\n    if (val === 'true') {\n      return true;\n    }\n\n    if (val === 'false') {\n      return false;\n    }\n\n    if (val === Number(val).toString()) {\n      return Number(val);\n    }\n\n    if (val === '' || val === 'null') {\n      return null;\n    }\n\n    return val;\n  }\n\n  function normalizeDataKey(key) {\n    return key.replace(/[A-Z]/g, chr => `-${chr.toLowerCase()}`);\n  }\n\n  const Manipulator = {\n    setDataAttribute(element, key, value) {\n      element.setAttribute(`data-bs-${normalizeDataKey(key)}`, value);\n    },\n\n    removeDataAttribute(element, key) {\n      element.removeAttribute(`data-bs-${normalizeDataKey(key)}`);\n    },\n\n    getDataAttributes(element) {\n      if (!element) {\n        return {};\n      }\n\n      const attributes = {};\n      Object.keys(element.dataset).filter(key => key.startsWith('bs')).forEach(key => {\n        let pureKey = key.replace(/^bs/, '');\n        pureKey = pureKey.charAt(0).toLowerCase() + pureKey.slice(1, pureKey.length);\n        attributes[pureKey] = normalizeData(element.dataset[key]);\n      });\n      return attributes;\n    },\n\n    getDataAttribute(element, key) {\n      return normalizeData(element.getAttribute(`data-bs-${normalizeDataKey(key)}`));\n    },\n\n    offset(element) {\n      const rect = element.getBoundingClientRect();\n      return {\n        top: rect.top + document.body.scrollTop,\n        left: rect.left + document.body.scrollLeft\n      };\n    },\n\n    position(element) {\n      return {\n        top: element.offsetTop,\n        left: element.offsetLeft\n      };\n    }\n\n  };\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): carousel.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$a = 'carousel';\n  const DATA_KEY$9 = 'bs.carousel';\n  const EVENT_KEY$9 = `.${DATA_KEY$9}`;\n  const DATA_API_KEY$6 = '.data-api';\n  const ARROW_LEFT_KEY = 'ArrowLeft';\n  const ARROW_RIGHT_KEY = 'ArrowRight';\n  const TOUCHEVENT_COMPAT_WAIT = 500; // Time for mouse compat events to fire after touch\n\n  const SWIPE_THRESHOLD = 40;\n  const Default$9 = {\n    interval: 5000,\n    keyboard: true,\n    slide: false,\n    pause: 'hover',\n    wrap: true,\n    touch: true\n  };\n  const DefaultType$9 = {\n    interval: '(number|boolean)',\n    keyboard: 'boolean',\n    slide: '(boolean|string)',\n    pause: '(string|boolean)',\n    wrap: 'boolean',\n    touch: 'boolean'\n  };\n  const ORDER_NEXT = 'next';\n  const ORDER_PREV = 'prev';\n  const DIRECTION_LEFT = 'left';\n  const DIRECTION_RIGHT = 'right';\n  const KEY_TO_DIRECTION = {\n    [ARROW_LEFT_KEY]: DIRECTION_RIGHT,\n    [ARROW_RIGHT_KEY]: DIRECTION_LEFT\n  };\n  const EVENT_SLIDE = `slide${EVENT_KEY$9}`;\n  const EVENT_SLID = `slid${EVENT_KEY$9}`;\n  const EVENT_KEYDOWN = `keydown${EVENT_KEY$9}`;\n  const EVENT_MOUSEENTER = `mouseenter${EVENT_KEY$9}`;\n  const EVENT_MOUSELEAVE = `mouseleave${EVENT_KEY$9}`;\n  const EVENT_TOUCHSTART = `touchstart${EVENT_KEY$9}`;\n  const EVENT_TOUCHMOVE = `touchmove${EVENT_KEY$9}`;\n  const EVENT_TOUCHEND = `touchend${EVENT_KEY$9}`;\n  const EVENT_POINTERDOWN = `pointerdown${EVENT_KEY$9}`;\n  const EVENT_POINTERUP = `pointerup${EVENT_KEY$9}`;\n  const EVENT_DRAG_START = `dragstart${EVENT_KEY$9}`;\n  const EVENT_LOAD_DATA_API$2 = `load${EVENT_KEY$9}${DATA_API_KEY$6}`;\n  const EVENT_CLICK_DATA_API$5 = `click${EVENT_KEY$9}${DATA_API_KEY$6}`;\n  const CLASS_NAME_CAROUSEL = 'carousel';\n  const CLASS_NAME_ACTIVE$2 = 'active';\n  const CLASS_NAME_SLIDE = 'slide';\n  const CLASS_NAME_END = 'carousel-item-end';\n  const CLASS_NAME_START = 'carousel-item-start';\n  const CLASS_NAME_NEXT = 'carousel-item-next';\n  const CLASS_NAME_PREV = 'carousel-item-prev';\n  const CLASS_NAME_POINTER_EVENT = 'pointer-event';\n  const SELECTOR_ACTIVE$1 = '.active';\n  const SELECTOR_ACTIVE_ITEM = '.active.carousel-item';\n  const SELECTOR_ITEM = '.carousel-item';\n  const SELECTOR_ITEM_IMG = '.carousel-item img';\n  const SELECTOR_NEXT_PREV = '.carousel-item-next, .carousel-item-prev';\n  const SELECTOR_INDICATORS = '.carousel-indicators';\n  const SELECTOR_INDICATOR = '[data-bs-target]';\n  const SELECTOR_DATA_SLIDE = '[data-bs-slide], [data-bs-slide-to]';\n  const SELECTOR_DATA_RIDE = '[data-bs-ride=\"carousel\"]';\n  const POINTER_TYPE_TOUCH = 'touch';\n  const POINTER_TYPE_PEN = 'pen';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Carousel extends BaseComponent {\n    constructor(element, config) {\n      super(element);\n      this._items = null;\n      this._interval = null;\n      this._activeElement = null;\n      this._isPaused = false;\n      this._isSliding = false;\n      this.touchTimeout = null;\n      this.touchStartX = 0;\n      this.touchDeltaX = 0;\n      this._config = this._getConfig(config);\n      this._indicatorsElement = SelectorEngine.findOne(SELECTOR_INDICATORS, this._element);\n      this._touchSupported = 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0;\n      this._pointerEvent = Boolean(window.PointerEvent);\n\n      this._addEventListeners();\n    } // Getters\n\n\n    static get Default() {\n      return Default$9;\n    }\n\n    static get NAME() {\n      return NAME$a;\n    } // Public\n\n\n    next() {\n      this._slide(ORDER_NEXT);\n    }\n\n    nextWhenVisible() {\n      // Don't call next when the page isn't visible\n      // or the carousel or its parent isn't visible\n      if (!document.hidden && isVisible(this._element)) {\n        this.next();\n      }\n    }\n\n    prev() {\n      this._slide(ORDER_PREV);\n    }\n\n    pause(event) {\n      if (!event) {\n        this._isPaused = true;\n      }\n\n      if (SelectorEngine.findOne(SELECTOR_NEXT_PREV, this._element)) {\n        triggerTransitionEnd(this._element);\n        this.cycle(true);\n      }\n\n      clearInterval(this._interval);\n      this._interval = null;\n    }\n\n    cycle(event) {\n      if (!event) {\n        this._isPaused = false;\n      }\n\n      if (this._interval) {\n        clearInterval(this._interval);\n        this._interval = null;\n      }\n\n      if (this._config && this._config.interval && !this._isPaused) {\n        this._updateInterval();\n\n        this._interval = setInterval((document.visibilityState ? this.nextWhenVisible : this.next).bind(this), this._config.interval);\n      }\n    }\n\n    to(index) {\n      this._activeElement = SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element);\n\n      const activeIndex = this._getItemIndex(this._activeElement);\n\n      if (index > this._items.length - 1 || index < 0) {\n        return;\n      }\n\n      if (this._isSliding) {\n        EventHandler.one(this._element, EVENT_SLID, () => this.to(index));\n        return;\n      }\n\n      if (activeIndex === index) {\n        this.pause();\n        this.cycle();\n        return;\n      }\n\n      const order = index > activeIndex ? ORDER_NEXT : ORDER_PREV;\n\n      this._slide(order, this._items[index]);\n    } // Private\n\n\n    _getConfig(config) {\n      config = { ...Default$9,\n        ...Manipulator.getDataAttributes(this._element),\n        ...(typeof config === 'object' ? config : {})\n      };\n      typeCheckConfig(NAME$a, config, DefaultType$9);\n      return config;\n    }\n\n    _handleSwipe() {\n      const absDeltax = Math.abs(this.touchDeltaX);\n\n      if (absDeltax <= SWIPE_THRESHOLD) {\n        return;\n      }\n\n      const direction = absDeltax / this.touchDeltaX;\n      this.touchDeltaX = 0;\n\n      if (!direction) {\n        return;\n      }\n\n      this._slide(direction > 0 ? DIRECTION_RIGHT : DIRECTION_LEFT);\n    }\n\n    _addEventListeners() {\n      if (this._config.keyboard) {\n        EventHandler.on(this._element, EVENT_KEYDOWN, event => this._keydown(event));\n      }\n\n      if (this._config.pause === 'hover') {\n        EventHandler.on(this._element, EVENT_MOUSEENTER, event => this.pause(event));\n        EventHandler.on(this._element, EVENT_MOUSELEAVE, event => this.cycle(event));\n      }\n\n      if (this._config.touch && this._touchSupported) {\n        this._addTouchEventListeners();\n      }\n    }\n\n    _addTouchEventListeners() {\n      const start = event => {\n        if (this._pointerEvent && (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH)) {\n          this.touchStartX = event.clientX;\n        } else if (!this._pointerEvent) {\n          this.touchStartX = event.touches[0].clientX;\n        }\n      };\n\n      const move = event => {\n        // ensure swiping with one touch and not pinching\n        this.touchDeltaX = event.touches && event.touches.length > 1 ? 0 : event.touches[0].clientX - this.touchStartX;\n      };\n\n      const end = event => {\n        if (this._pointerEvent && (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH)) {\n          this.touchDeltaX = event.clientX - this.touchStartX;\n        }\n\n        this._handleSwipe();\n\n        if (this._config.pause === 'hover') {\n          // If it's a touch-enabled device, mouseenter/leave are fired as\n          // part of the mouse compatibility events on first tap - the carousel\n          // would stop cycling until user tapped out of it;\n          // here, we listen for touchend, explicitly pause the carousel\n          // (as if it's the second time we tap on it, mouseenter compat event\n          // is NOT fired) and after a timeout (to allow for mouse compatibility\n          // events to fire) we explicitly restart cycling\n          this.pause();\n\n          if (this.touchTimeout) {\n            clearTimeout(this.touchTimeout);\n          }\n\n          this.touchTimeout = setTimeout(event => this.cycle(event), TOUCHEVENT_COMPAT_WAIT + this._config.interval);\n        }\n      };\n\n      SelectorEngine.find(SELECTOR_ITEM_IMG, this._element).forEach(itemImg => {\n        EventHandler.on(itemImg, EVENT_DRAG_START, e => e.preventDefault());\n      });\n\n      if (this._pointerEvent) {\n        EventHandler.on(this._element, EVENT_POINTERDOWN, event => start(event));\n        EventHandler.on(this._element, EVENT_POINTERUP, event => end(event));\n\n        this._element.classList.add(CLASS_NAME_POINTER_EVENT);\n      } else {\n        EventHandler.on(this._element, EVENT_TOUCHSTART, event => start(event));\n        EventHandler.on(this._element, EVENT_TOUCHMOVE, event => move(event));\n        EventHandler.on(this._element, EVENT_TOUCHEND, event => end(event));\n      }\n    }\n\n    _keydown(event) {\n      if (/input|textarea/i.test(event.target.tagName)) {\n        return;\n      }\n\n      const direction = KEY_TO_DIRECTION[event.key];\n\n      if (direction) {\n        event.preventDefault();\n\n        this._slide(direction);\n      }\n    }\n\n    _getItemIndex(element) {\n      this._items = element && element.parentNode ? SelectorEngine.find(SELECTOR_ITEM, element.parentNode) : [];\n      return this._items.indexOf(element);\n    }\n\n    _getItemByOrder(order, activeElement) {\n      const isNext = order === ORDER_NEXT;\n      return getNextActiveElement(this._items, activeElement, isNext, this._config.wrap);\n    }\n\n    _triggerSlideEvent(relatedTarget, eventDirectionName) {\n      const targetIndex = this._getItemIndex(relatedTarget);\n\n      const fromIndex = this._getItemIndex(SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element));\n\n      return EventHandler.trigger(this._element, EVENT_SLIDE, {\n        relatedTarget,\n        direction: eventDirectionName,\n        from: fromIndex,\n        to: targetIndex\n      });\n    }\n\n    _setActiveIndicatorElement(element) {\n      if (this._indicatorsElement) {\n        const activeIndicator = SelectorEngine.findOne(SELECTOR_ACTIVE$1, this._indicatorsElement);\n        activeIndicator.classList.remove(CLASS_NAME_ACTIVE$2);\n        activeIndicator.removeAttribute('aria-current');\n        const indicators = SelectorEngine.find(SELECTOR_INDICATOR, this._indicatorsElement);\n\n        for (let i = 0; i < indicators.length; i++) {\n          if (Number.parseInt(indicators[i].getAttribute('data-bs-slide-to'), 10) === this._getItemIndex(element)) {\n            indicators[i].classList.add(CLASS_NAME_ACTIVE$2);\n            indicators[i].setAttribute('aria-current', 'true');\n            break;\n          }\n        }\n      }\n    }\n\n    _updateInterval() {\n      const element = this._activeElement || SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element);\n\n      if (!element) {\n        return;\n      }\n\n      const elementInterval = Number.parseInt(element.getAttribute('data-bs-interval'), 10);\n\n      if (elementInterval) {\n        this._config.defaultInterval = this._config.defaultInterval || this._config.interval;\n        this._config.interval = elementInterval;\n      } else {\n        this._config.interval = this._config.defaultInterval || this._config.interval;\n      }\n    }\n\n    _slide(directionOrOrder, element) {\n      const order = this._directionToOrder(directionOrOrder);\n\n      const activeElement = SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element);\n\n      const activeElementIndex = this._getItemIndex(activeElement);\n\n      const nextElement = element || this._getItemByOrder(order, activeElement);\n\n      const nextElementIndex = this._getItemIndex(nextElement);\n\n      const isCycling = Boolean(this._interval);\n      const isNext = order === ORDER_NEXT;\n      const directionalClassName = isNext ? CLASS_NAME_START : CLASS_NAME_END;\n      const orderClassName = isNext ? CLASS_NAME_NEXT : CLASS_NAME_PREV;\n\n      const eventDirectionName = this._orderToDirection(order);\n\n      if (nextElement && nextElement.classList.contains(CLASS_NAME_ACTIVE$2)) {\n        this._isSliding = false;\n        return;\n      }\n\n      if (this._isSliding) {\n        return;\n      }\n\n      const slideEvent = this._triggerSlideEvent(nextElement, eventDirectionName);\n\n      if (slideEvent.defaultPrevented) {\n        return;\n      }\n\n      if (!activeElement || !nextElement) {\n        // Some weirdness is happening, so we bail\n        return;\n      }\n\n      this._isSliding = true;\n\n      if (isCycling) {\n        this.pause();\n      }\n\n      this._setActiveIndicatorElement(nextElement);\n\n      this._activeElement = nextElement;\n\n      const triggerSlidEvent = () => {\n        EventHandler.trigger(this._element, EVENT_SLID, {\n          relatedTarget: nextElement,\n          direction: eventDirectionName,\n          from: activeElementIndex,\n          to: nextElementIndex\n        });\n      };\n\n      if (this._element.classList.contains(CLASS_NAME_SLIDE)) {\n        nextElement.classList.add(orderClassName);\n        reflow(nextElement);\n        activeElement.classList.add(directionalClassName);\n        nextElement.classList.add(directionalClassName);\n\n        const completeCallBack = () => {\n          nextElement.classList.remove(directionalClassName, orderClassName);\n          nextElement.classList.add(CLASS_NAME_ACTIVE$2);\n          activeElement.classList.remove(CLASS_NAME_ACTIVE$2, orderClassName, directionalClassName);\n          this._isSliding = false;\n          setTimeout(triggerSlidEvent, 0);\n        };\n\n        this._queueCallback(completeCallBack, activeElement, true);\n      } else {\n        activeElement.classList.remove(CLASS_NAME_ACTIVE$2);\n        nextElement.classList.add(CLASS_NAME_ACTIVE$2);\n        this._isSliding = false;\n        triggerSlidEvent();\n      }\n\n      if (isCycling) {\n        this.cycle();\n      }\n    }\n\n    _directionToOrder(direction) {\n      if (![DIRECTION_RIGHT, DIRECTION_LEFT].includes(direction)) {\n        return direction;\n      }\n\n      if (isRTL()) {\n        return direction === DIRECTION_LEFT ? ORDER_PREV : ORDER_NEXT;\n      }\n\n      return direction === DIRECTION_LEFT ? ORDER_NEXT : ORDER_PREV;\n    }\n\n    _orderToDirection(order) {\n      if (![ORDER_NEXT, ORDER_PREV].includes(order)) {\n        return order;\n      }\n\n      if (isRTL()) {\n        return order === ORDER_PREV ? DIRECTION_LEFT : DIRECTION_RIGHT;\n      }\n\n      return order === ORDER_PREV ? DIRECTION_RIGHT : DIRECTION_LEFT;\n    } // Static\n\n\n    static carouselInterface(element, config) {\n      const data = Carousel.getOrCreateInstance(element, config);\n      let {\n        _config\n      } = data;\n\n      if (typeof config === 'object') {\n        _config = { ..._config,\n          ...config\n        };\n      }\n\n      const action = typeof config === 'string' ? config : _config.slide;\n\n      if (typeof config === 'number') {\n        data.to(config);\n      } else if (typeof action === 'string') {\n        if (typeof data[action] === 'undefined') {\n          throw new TypeError(`No method named \"${action}\"`);\n        }\n\n        data[action]();\n      } else if (_config.interval && _config.ride) {\n        data.pause();\n        data.cycle();\n      }\n    }\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        Carousel.carouselInterface(this, config);\n      });\n    }\n\n    static dataApiClickHandler(event) {\n      const target = getElementFromSelector(this);\n\n      if (!target || !target.classList.contains(CLASS_NAME_CAROUSEL)) {\n        return;\n      }\n\n      const config = { ...Manipulator.getDataAttributes(target),\n        ...Manipulator.getDataAttributes(this)\n      };\n      const slideIndex = this.getAttribute('data-bs-slide-to');\n\n      if (slideIndex) {\n        config.interval = false;\n      }\n\n      Carousel.carouselInterface(target, config);\n\n      if (slideIndex) {\n        Carousel.getInstance(target).to(slideIndex);\n      }\n\n      event.preventDefault();\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(document, EVENT_CLICK_DATA_API$5, SELECTOR_DATA_SLIDE, Carousel.dataApiClickHandler);\n  EventHandler.on(window, EVENT_LOAD_DATA_API$2, () => {\n    const carousels = SelectorEngine.find(SELECTOR_DATA_RIDE);\n\n    for (let i = 0, len = carousels.length; i < len; i++) {\n      Carousel.carouselInterface(carousels[i], Carousel.getInstance(carousels[i]));\n    }\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Carousel to jQuery only if jQuery is present\n   */\n\n  defineJQueryPlugin(Carousel);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): collapse.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$9 = 'collapse';\n  const DATA_KEY$8 = 'bs.collapse';\n  const EVENT_KEY$8 = `.${DATA_KEY$8}`;\n  const DATA_API_KEY$5 = '.data-api';\n  const Default$8 = {\n    toggle: true,\n    parent: ''\n  };\n  const DefaultType$8 = {\n    toggle: 'boolean',\n    parent: '(string|element)'\n  };\n  const EVENT_SHOW$5 = `show${EVENT_KEY$8}`;\n  const EVENT_SHOWN$5 = `shown${EVENT_KEY$8}`;\n  const EVENT_HIDE$5 = `hide${EVENT_KEY$8}`;\n  const EVENT_HIDDEN$5 = `hidden${EVENT_KEY$8}`;\n  const EVENT_CLICK_DATA_API$4 = `click${EVENT_KEY$8}${DATA_API_KEY$5}`;\n  const CLASS_NAME_SHOW$8 = 'show';\n  const CLASS_NAME_COLLAPSE = 'collapse';\n  const CLASS_NAME_COLLAPSING = 'collapsing';\n  const CLASS_NAME_COLLAPSED = 'collapsed';\n  const WIDTH = 'width';\n  const HEIGHT = 'height';\n  const SELECTOR_ACTIVES = '.show, .collapsing';\n  const SELECTOR_DATA_TOGGLE$4 = '[data-bs-toggle=\"collapse\"]';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Collapse extends BaseComponent {\n    constructor(element, config) {\n      super(element);\n      this._isTransitioning = false;\n      this._config = this._getConfig(config);\n      this._triggerArray = SelectorEngine.find(`${SELECTOR_DATA_TOGGLE$4}[href=\"#${this._element.id}\"],` + `${SELECTOR_DATA_TOGGLE$4}[data-bs-target=\"#${this._element.id}\"]`);\n      const toggleList = SelectorEngine.find(SELECTOR_DATA_TOGGLE$4);\n\n      for (let i = 0, len = toggleList.length; i < len; i++) {\n        const elem = toggleList[i];\n        const selector = getSelectorFromElement(elem);\n        const filterElement = SelectorEngine.find(selector).filter(foundElem => foundElem === this._element);\n\n        if (selector !== null && filterElement.length) {\n          this._selector = selector;\n\n          this._triggerArray.push(elem);\n        }\n      }\n\n      this._parent = this._config.parent ? this._getParent() : null;\n\n      if (!this._config.parent) {\n        this._addAriaAndCollapsedClass(this._element, this._triggerArray);\n      }\n\n      if (this._config.toggle) {\n        this.toggle();\n      }\n    } // Getters\n\n\n    static get Default() {\n      return Default$8;\n    }\n\n    static get NAME() {\n      return NAME$9;\n    } // Public\n\n\n    toggle() {\n      if (this._element.classList.contains(CLASS_NAME_SHOW$8)) {\n        this.hide();\n      } else {\n        this.show();\n      }\n    }\n\n    show() {\n      if (this._isTransitioning || this._element.classList.contains(CLASS_NAME_SHOW$8)) {\n        return;\n      }\n\n      let actives;\n      let activesData;\n\n      if (this._parent) {\n        actives = SelectorEngine.find(SELECTOR_ACTIVES, this._parent).filter(elem => {\n          if (typeof this._config.parent === 'string') {\n            return elem.getAttribute('data-bs-parent') === this._config.parent;\n          }\n\n          return elem.classList.contains(CLASS_NAME_COLLAPSE);\n        });\n\n        if (actives.length === 0) {\n          actives = null;\n        }\n      }\n\n      const container = SelectorEngine.findOne(this._selector);\n\n      if (actives) {\n        const tempActiveData = actives.find(elem => container !== elem);\n        activesData = tempActiveData ? Collapse.getInstance(tempActiveData) : null;\n\n        if (activesData && activesData._isTransitioning) {\n          return;\n        }\n      }\n\n      const startEvent = EventHandler.trigger(this._element, EVENT_SHOW$5);\n\n      if (startEvent.defaultPrevented) {\n        return;\n      }\n\n      if (actives) {\n        actives.forEach(elemActive => {\n          if (container !== elemActive) {\n            Collapse.collapseInterface(elemActive, 'hide');\n          }\n\n          if (!activesData) {\n            Data.set(elemActive, DATA_KEY$8, null);\n          }\n        });\n      }\n\n      const dimension = this._getDimension();\n\n      this._element.classList.remove(CLASS_NAME_COLLAPSE);\n\n      this._element.classList.add(CLASS_NAME_COLLAPSING);\n\n      this._element.style[dimension] = 0;\n\n      if (this._triggerArray.length) {\n        this._triggerArray.forEach(element => {\n          element.classList.remove(CLASS_NAME_COLLAPSED);\n          element.setAttribute('aria-expanded', true);\n        });\n      }\n\n      this.setTransitioning(true);\n\n      const complete = () => {\n        this._element.classList.remove(CLASS_NAME_COLLAPSING);\n\n        this._element.classList.add(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$8);\n\n        this._element.style[dimension] = '';\n        this.setTransitioning(false);\n        EventHandler.trigger(this._element, EVENT_SHOWN$5);\n      };\n\n      const capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1);\n      const scrollSize = `scroll${capitalizedDimension}`;\n\n      this._queueCallback(complete, this._element, true);\n\n      this._element.style[dimension] = `${this._element[scrollSize]}px`;\n    }\n\n    hide() {\n      if (this._isTransitioning || !this._element.classList.contains(CLASS_NAME_SHOW$8)) {\n        return;\n      }\n\n      const startEvent = EventHandler.trigger(this._element, EVENT_HIDE$5);\n\n      if (startEvent.defaultPrevented) {\n        return;\n      }\n\n      const dimension = this._getDimension();\n\n      this._element.style[dimension] = `${this._element.getBoundingClientRect()[dimension]}px`;\n      reflow(this._element);\n\n      this._element.classList.add(CLASS_NAME_COLLAPSING);\n\n      this._element.classList.remove(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$8);\n\n      const triggerArrayLength = this._triggerArray.length;\n\n      if (triggerArrayLength > 0) {\n        for (let i = 0; i < triggerArrayLength; i++) {\n          const trigger = this._triggerArray[i];\n          const elem = getElementFromSelector(trigger);\n\n          if (elem && !elem.classList.contains(CLASS_NAME_SHOW$8)) {\n            trigger.classList.add(CLASS_NAME_COLLAPSED);\n            trigger.setAttribute('aria-expanded', false);\n          }\n        }\n      }\n\n      this.setTransitioning(true);\n\n      const complete = () => {\n        this.setTransitioning(false);\n\n        this._element.classList.remove(CLASS_NAME_COLLAPSING);\n\n        this._element.classList.add(CLASS_NAME_COLLAPSE);\n\n        EventHandler.trigger(this._element, EVENT_HIDDEN$5);\n      };\n\n      this._element.style[dimension] = '';\n\n      this._queueCallback(complete, this._element, true);\n    }\n\n    setTransitioning(isTransitioning) {\n      this._isTransitioning = isTransitioning;\n    } // Private\n\n\n    _getConfig(config) {\n      config = { ...Default$8,\n        ...config\n      };\n      config.toggle = Boolean(config.toggle); // Coerce string values\n\n      typeCheckConfig(NAME$9, config, DefaultType$8);\n      return config;\n    }\n\n    _getDimension() {\n      return this._element.classList.contains(WIDTH) ? WIDTH : HEIGHT;\n    }\n\n    _getParent() {\n      let {\n        parent\n      } = this._config;\n      parent = getElement(parent);\n      const selector = `${SELECTOR_DATA_TOGGLE$4}[data-bs-parent=\"${parent}\"]`;\n      SelectorEngine.find(selector, parent).forEach(element => {\n        const selected = getElementFromSelector(element);\n\n        this._addAriaAndCollapsedClass(selected, [element]);\n      });\n      return parent;\n    }\n\n    _addAriaAndCollapsedClass(element, triggerArray) {\n      if (!element || !triggerArray.length) {\n        return;\n      }\n\n      const isOpen = element.classList.contains(CLASS_NAME_SHOW$8);\n      triggerArray.forEach(elem => {\n        if (isOpen) {\n          elem.classList.remove(CLASS_NAME_COLLAPSED);\n        } else {\n          elem.classList.add(CLASS_NAME_COLLAPSED);\n        }\n\n        elem.setAttribute('aria-expanded', isOpen);\n      });\n    } // Static\n\n\n    static collapseInterface(element, config) {\n      let data = Collapse.getInstance(element);\n      const _config = { ...Default$8,\n        ...Manipulator.getDataAttributes(element),\n        ...(typeof config === 'object' && config ? config : {})\n      };\n\n      if (!data && _config.toggle && typeof config === 'string' && /show|hide/.test(config)) {\n        _config.toggle = false;\n      }\n\n      if (!data) {\n        data = new Collapse(element, _config);\n      }\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config]();\n      }\n    }\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        Collapse.collapseInterface(this, config);\n      });\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(document, EVENT_CLICK_DATA_API$4, SELECTOR_DATA_TOGGLE$4, function (event) {\n    // preventDefault only for <a> elements (which change the URL) not inside the collapsible element\n    if (event.target.tagName === 'A' || event.delegateTarget && event.delegateTarget.tagName === 'A') {\n      event.preventDefault();\n    }\n\n    const triggerData = Manipulator.getDataAttributes(this);\n    const selector = getSelectorFromElement(this);\n    const selectorElements = SelectorEngine.find(selector);\n    selectorElements.forEach(element => {\n      const data = Collapse.getInstance(element);\n      let config;\n\n      if (data) {\n        // update parent attribute\n        if (data._parent === null && typeof triggerData.parent === 'string') {\n          data._config.parent = triggerData.parent;\n          data._parent = data._getParent();\n        }\n\n        config = 'toggle';\n      } else {\n        config = triggerData;\n      }\n\n      Collapse.collapseInterface(element, config);\n    });\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Collapse to jQuery only if jQuery is present\n   */\n\n  defineJQueryPlugin(Collapse);\n\n  var top = 'top';\n  var bottom = 'bottom';\n  var right = 'right';\n  var left = 'left';\n  var auto = 'auto';\n  var basePlacements = [top, bottom, right, left];\n  var start = 'start';\n  var end = 'end';\n  var clippingParents = 'clippingParents';\n  var viewport = 'viewport';\n  var popper = 'popper';\n  var reference = 'reference';\n  var variationPlacements = /*#__PURE__*/basePlacements.reduce(function (acc, placement) {\n    return acc.concat([placement + \"-\" + start, placement + \"-\" + end]);\n  }, []);\n  var placements = /*#__PURE__*/[].concat(basePlacements, [auto]).reduce(function (acc, placement) {\n    return acc.concat([placement, placement + \"-\" + start, placement + \"-\" + end]);\n  }, []); // modifiers that need to read the DOM\n\n  var beforeRead = 'beforeRead';\n  var read = 'read';\n  var afterRead = 'afterRead'; // pure-logic modifiers\n\n  var beforeMain = 'beforeMain';\n  var main = 'main';\n  var afterMain = 'afterMain'; // modifier with the purpose to write to the DOM (or write into a framework state)\n\n  var beforeWrite = 'beforeWrite';\n  var write = 'write';\n  var afterWrite = 'afterWrite';\n  var modifierPhases = [beforeRead, read, afterRead, beforeMain, main, afterMain, beforeWrite, write, afterWrite];\n\n  function getNodeName(element) {\n    return element ? (element.nodeName || '').toLowerCase() : null;\n  }\n\n  function getWindow(node) {\n    if (node == null) {\n      return window;\n    }\n\n    if (node.toString() !== '[object Window]') {\n      var ownerDocument = node.ownerDocument;\n      return ownerDocument ? ownerDocument.defaultView || window : window;\n    }\n\n    return node;\n  }\n\n  function isElement(node) {\n    var OwnElement = getWindow(node).Element;\n    return node instanceof OwnElement || node instanceof Element;\n  }\n\n  function isHTMLElement(node) {\n    var OwnElement = getWindow(node).HTMLElement;\n    return node instanceof OwnElement || node instanceof HTMLElement;\n  }\n\n  function isShadowRoot(node) {\n    // IE 11 has no ShadowRoot\n    if (typeof ShadowRoot === 'undefined') {\n      return false;\n    }\n\n    var OwnElement = getWindow(node).ShadowRoot;\n    return node instanceof OwnElement || node instanceof ShadowRoot;\n  }\n\n  // and applies them to the HTMLElements such as popper and arrow\n\n  function applyStyles(_ref) {\n    var state = _ref.state;\n    Object.keys(state.elements).forEach(function (name) {\n      var style = state.styles[name] || {};\n      var attributes = state.attributes[name] || {};\n      var element = state.elements[name]; // arrow is optional + virtual elements\n\n      if (!isHTMLElement(element) || !getNodeName(element)) {\n        return;\n      } // Flow doesn't support to extend this property, but it's the most\n      // effective way to apply styles to an HTMLElement\n      // $FlowFixMe[cannot-write]\n\n\n      Object.assign(element.style, style);\n      Object.keys(attributes).forEach(function (name) {\n        var value = attributes[name];\n\n        if (value === false) {\n          element.removeAttribute(name);\n        } else {\n          element.setAttribute(name, value === true ? '' : value);\n        }\n      });\n    });\n  }\n\n  function effect$2(_ref2) {\n    var state = _ref2.state;\n    var initialStyles = {\n      popper: {\n        position: state.options.strategy,\n        left: '0',\n        top: '0',\n        margin: '0'\n      },\n      arrow: {\n        position: 'absolute'\n      },\n      reference: {}\n    };\n    Object.assign(state.elements.popper.style, initialStyles.popper);\n    state.styles = initialStyles;\n\n    if (state.elements.arrow) {\n      Object.assign(state.elements.arrow.style, initialStyles.arrow);\n    }\n\n    return function () {\n      Object.keys(state.elements).forEach(function (name) {\n        var element = state.elements[name];\n        var attributes = state.attributes[name] || {};\n        var styleProperties = Object.keys(state.styles.hasOwnProperty(name) ? state.styles[name] : initialStyles[name]); // Set all values to an empty string to unset them\n\n        var style = styleProperties.reduce(function (style, property) {\n          style[property] = '';\n          return style;\n        }, {}); // arrow is optional + virtual elements\n\n        if (!isHTMLElement(element) || !getNodeName(element)) {\n          return;\n        }\n\n        Object.assign(element.style, style);\n        Object.keys(attributes).forEach(function (attribute) {\n          element.removeAttribute(attribute);\n        });\n      });\n    };\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  var applyStyles$1 = {\n    name: 'applyStyles',\n    enabled: true,\n    phase: 'write',\n    fn: applyStyles,\n    effect: effect$2,\n    requires: ['computeStyles']\n  };\n\n  function getBasePlacement(placement) {\n    return placement.split('-')[0];\n  }\n\n  function getBoundingClientRect(element) {\n    var rect = element.getBoundingClientRect();\n    return {\n      width: rect.width,\n      height: rect.height,\n      top: rect.top,\n      right: rect.right,\n      bottom: rect.bottom,\n      left: rect.left,\n      x: rect.left,\n      y: rect.top\n    };\n  }\n\n  // means it doesn't take into account transforms.\n\n  function getLayoutRect(element) {\n    var clientRect = getBoundingClientRect(element); // Use the clientRect sizes if it's not been transformed.\n    // Fixes https://github.com/popperjs/popper-core/issues/1223\n\n    var width = element.offsetWidth;\n    var height = element.offsetHeight;\n\n    if (Math.abs(clientRect.width - width) <= 1) {\n      width = clientRect.width;\n    }\n\n    if (Math.abs(clientRect.height - height) <= 1) {\n      height = clientRect.height;\n    }\n\n    return {\n      x: element.offsetLeft,\n      y: element.offsetTop,\n      width: width,\n      height: height\n    };\n  }\n\n  function contains(parent, child) {\n    var rootNode = child.getRootNode && child.getRootNode(); // First, attempt with faster native method\n\n    if (parent.contains(child)) {\n      return true;\n    } // then fallback to custom implementation with Shadow DOM support\n    else if (rootNode && isShadowRoot(rootNode)) {\n        var next = child;\n\n        do {\n          if (next && parent.isSameNode(next)) {\n            return true;\n          } // $FlowFixMe[prop-missing]: need a better way to handle this...\n\n\n          next = next.parentNode || next.host;\n        } while (next);\n      } // Give up, the result is false\n\n\n    return false;\n  }\n\n  function getComputedStyle$1(element) {\n    return getWindow(element).getComputedStyle(element);\n  }\n\n  function isTableElement(element) {\n    return ['table', 'td', 'th'].indexOf(getNodeName(element)) >= 0;\n  }\n\n  function getDocumentElement(element) {\n    // $FlowFixMe[incompatible-return]: assume body is always available\n    return ((isElement(element) ? element.ownerDocument : // $FlowFixMe[prop-missing]\n    element.document) || window.document).documentElement;\n  }\n\n  function getParentNode(element) {\n    if (getNodeName(element) === 'html') {\n      return element;\n    }\n\n    return (// this is a quicker (but less type safe) way to save quite some bytes from the bundle\n      // $FlowFixMe[incompatible-return]\n      // $FlowFixMe[prop-missing]\n      element.assignedSlot || // step into the shadow DOM of the parent of a slotted node\n      element.parentNode || ( // DOM Element detected\n      isShadowRoot(element) ? element.host : null) || // ShadowRoot detected\n      // $FlowFixMe[incompatible-call]: HTMLElement is a Node\n      getDocumentElement(element) // fallback\n\n    );\n  }\n\n  function getTrueOffsetParent(element) {\n    if (!isHTMLElement(element) || // https://github.com/popperjs/popper-core/issues/837\n    getComputedStyle$1(element).position === 'fixed') {\n      return null;\n    }\n\n    return element.offsetParent;\n  } // `.offsetParent` reports `null` for fixed elements, while absolute elements\n  // return the containing block\n\n\n  function getContainingBlock(element) {\n    var isFirefox = navigator.userAgent.toLowerCase().indexOf('firefox') !== -1;\n    var isIE = navigator.userAgent.indexOf('Trident') !== -1;\n\n    if (isIE && isHTMLElement(element)) {\n      // In IE 9, 10 and 11 fixed elements containing block is always established by the viewport\n      var elementCss = getComputedStyle$1(element);\n\n      if (elementCss.position === 'fixed') {\n        return null;\n      }\n    }\n\n    var currentNode = getParentNode(element);\n\n    while (isHTMLElement(currentNode) && ['html', 'body'].indexOf(getNodeName(currentNode)) < 0) {\n      var css = getComputedStyle$1(currentNode); // This is non-exhaustive but covers the most common CSS properties that\n      // create a containing block.\n      // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n\n      if (css.transform !== 'none' || css.perspective !== 'none' || css.contain === 'paint' || ['transform', 'perspective'].indexOf(css.willChange) !== -1 || isFirefox && css.willChange === 'filter' || isFirefox && css.filter && css.filter !== 'none') {\n        return currentNode;\n      } else {\n        currentNode = currentNode.parentNode;\n      }\n    }\n\n    return null;\n  } // Gets the closest ancestor positioned element. Handles some edge cases,\n  // such as table ancestors and cross browser bugs.\n\n\n  function getOffsetParent(element) {\n    var window = getWindow(element);\n    var offsetParent = getTrueOffsetParent(element);\n\n    while (offsetParent && isTableElement(offsetParent) && getComputedStyle$1(offsetParent).position === 'static') {\n      offsetParent = getTrueOffsetParent(offsetParent);\n    }\n\n    if (offsetParent && (getNodeName(offsetParent) === 'html' || getNodeName(offsetParent) === 'body' && getComputedStyle$1(offsetParent).position === 'static')) {\n      return window;\n    }\n\n    return offsetParent || getContainingBlock(element) || window;\n  }\n\n  function getMainAxisFromPlacement(placement) {\n    return ['top', 'bottom'].indexOf(placement) >= 0 ? 'x' : 'y';\n  }\n\n  var max = Math.max;\n  var min = Math.min;\n  var round = Math.round;\n\n  function within(min$1, value, max$1) {\n    return max(min$1, min(value, max$1));\n  }\n\n  function getFreshSideObject() {\n    return {\n      top: 0,\n      right: 0,\n      bottom: 0,\n      left: 0\n    };\n  }\n\n  function mergePaddingObject(paddingObject) {\n    return Object.assign({}, getFreshSideObject(), paddingObject);\n  }\n\n  function expandToHashMap(value, keys) {\n    return keys.reduce(function (hashMap, key) {\n      hashMap[key] = value;\n      return hashMap;\n    }, {});\n  }\n\n  var toPaddingObject = function toPaddingObject(padding, state) {\n    padding = typeof padding === 'function' ? padding(Object.assign({}, state.rects, {\n      placement: state.placement\n    })) : padding;\n    return mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));\n  };\n\n  function arrow(_ref) {\n    var _state$modifiersData$;\n\n    var state = _ref.state,\n        name = _ref.name,\n        options = _ref.options;\n    var arrowElement = state.elements.arrow;\n    var popperOffsets = state.modifiersData.popperOffsets;\n    var basePlacement = getBasePlacement(state.placement);\n    var axis = getMainAxisFromPlacement(basePlacement);\n    var isVertical = [left, right].indexOf(basePlacement) >= 0;\n    var len = isVertical ? 'height' : 'width';\n\n    if (!arrowElement || !popperOffsets) {\n      return;\n    }\n\n    var paddingObject = toPaddingObject(options.padding, state);\n    var arrowRect = getLayoutRect(arrowElement);\n    var minProp = axis === 'y' ? top : left;\n    var maxProp = axis === 'y' ? bottom : right;\n    var endDiff = state.rects.reference[len] + state.rects.reference[axis] - popperOffsets[axis] - state.rects.popper[len];\n    var startDiff = popperOffsets[axis] - state.rects.reference[axis];\n    var arrowOffsetParent = getOffsetParent(arrowElement);\n    var clientSize = arrowOffsetParent ? axis === 'y' ? arrowOffsetParent.clientHeight || 0 : arrowOffsetParent.clientWidth || 0 : 0;\n    var centerToReference = endDiff / 2 - startDiff / 2; // Make sure the arrow doesn't overflow the popper if the center point is\n    // outside of the popper bounds\n\n    var min = paddingObject[minProp];\n    var max = clientSize - arrowRect[len] - paddingObject[maxProp];\n    var center = clientSize / 2 - arrowRect[len] / 2 + centerToReference;\n    var offset = within(min, center, max); // Prevents breaking syntax highlighting...\n\n    var axisProp = axis;\n    state.modifiersData[name] = (_state$modifiersData$ = {}, _state$modifiersData$[axisProp] = offset, _state$modifiersData$.centerOffset = offset - center, _state$modifiersData$);\n  }\n\n  function effect$1(_ref2) {\n    var state = _ref2.state,\n        options = _ref2.options;\n    var _options$element = options.element,\n        arrowElement = _options$element === void 0 ? '[data-popper-arrow]' : _options$element;\n\n    if (arrowElement == null) {\n      return;\n    } // CSS selector\n\n\n    if (typeof arrowElement === 'string') {\n      arrowElement = state.elements.popper.querySelector(arrowElement);\n\n      if (!arrowElement) {\n        return;\n      }\n    }\n\n    if (!contains(state.elements.popper, arrowElement)) {\n\n      return;\n    }\n\n    state.elements.arrow = arrowElement;\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  var arrow$1 = {\n    name: 'arrow',\n    enabled: true,\n    phase: 'main',\n    fn: arrow,\n    effect: effect$1,\n    requires: ['popperOffsets'],\n    requiresIfExists: ['preventOverflow']\n  };\n\n  var unsetSides = {\n    top: 'auto',\n    right: 'auto',\n    bottom: 'auto',\n    left: 'auto'\n  }; // Round the offsets to the nearest suitable subpixel based on the DPR.\n  // Zooming can change the DPR, but it seems to report a value that will\n  // cleanly divide the values into the appropriate subpixels.\n\n  function roundOffsetsByDPR(_ref) {\n    var x = _ref.x,\n        y = _ref.y;\n    var win = window;\n    var dpr = win.devicePixelRatio || 1;\n    return {\n      x: round(round(x * dpr) / dpr) || 0,\n      y: round(round(y * dpr) / dpr) || 0\n    };\n  }\n\n  function mapToStyles(_ref2) {\n    var _Object$assign2;\n\n    var popper = _ref2.popper,\n        popperRect = _ref2.popperRect,\n        placement = _ref2.placement,\n        offsets = _ref2.offsets,\n        position = _ref2.position,\n        gpuAcceleration = _ref2.gpuAcceleration,\n        adaptive = _ref2.adaptive,\n        roundOffsets = _ref2.roundOffsets;\n\n    var _ref3 = roundOffsets === true ? roundOffsetsByDPR(offsets) : typeof roundOffsets === 'function' ? roundOffsets(offsets) : offsets,\n        _ref3$x = _ref3.x,\n        x = _ref3$x === void 0 ? 0 : _ref3$x,\n        _ref3$y = _ref3.y,\n        y = _ref3$y === void 0 ? 0 : _ref3$y;\n\n    var hasX = offsets.hasOwnProperty('x');\n    var hasY = offsets.hasOwnProperty('y');\n    var sideX = left;\n    var sideY = top;\n    var win = window;\n\n    if (adaptive) {\n      var offsetParent = getOffsetParent(popper);\n      var heightProp = 'clientHeight';\n      var widthProp = 'clientWidth';\n\n      if (offsetParent === getWindow(popper)) {\n        offsetParent = getDocumentElement(popper);\n\n        if (getComputedStyle$1(offsetParent).position !== 'static') {\n          heightProp = 'scrollHeight';\n          widthProp = 'scrollWidth';\n        }\n      } // $FlowFixMe[incompatible-cast]: force type refinement, we compare offsetParent with window above, but Flow doesn't detect it\n\n\n      offsetParent = offsetParent;\n\n      if (placement === top) {\n        sideY = bottom; // $FlowFixMe[prop-missing]\n\n        y -= offsetParent[heightProp] - popperRect.height;\n        y *= gpuAcceleration ? 1 : -1;\n      }\n\n      if (placement === left) {\n        sideX = right; // $FlowFixMe[prop-missing]\n\n        x -= offsetParent[widthProp] - popperRect.width;\n        x *= gpuAcceleration ? 1 : -1;\n      }\n    }\n\n    var commonStyles = Object.assign({\n      position: position\n    }, adaptive && unsetSides);\n\n    if (gpuAcceleration) {\n      var _Object$assign;\n\n      return Object.assign({}, commonStyles, (_Object$assign = {}, _Object$assign[sideY] = hasY ? '0' : '', _Object$assign[sideX] = hasX ? '0' : '', _Object$assign.transform = (win.devicePixelRatio || 1) < 2 ? \"translate(\" + x + \"px, \" + y + \"px)\" : \"translate3d(\" + x + \"px, \" + y + \"px, 0)\", _Object$assign));\n    }\n\n    return Object.assign({}, commonStyles, (_Object$assign2 = {}, _Object$assign2[sideY] = hasY ? y + \"px\" : '', _Object$assign2[sideX] = hasX ? x + \"px\" : '', _Object$assign2.transform = '', _Object$assign2));\n  }\n\n  function computeStyles(_ref4) {\n    var state = _ref4.state,\n        options = _ref4.options;\n    var _options$gpuAccelerat = options.gpuAcceleration,\n        gpuAcceleration = _options$gpuAccelerat === void 0 ? true : _options$gpuAccelerat,\n        _options$adaptive = options.adaptive,\n        adaptive = _options$adaptive === void 0 ? true : _options$adaptive,\n        _options$roundOffsets = options.roundOffsets,\n        roundOffsets = _options$roundOffsets === void 0 ? true : _options$roundOffsets;\n\n    var commonStyles = {\n      placement: getBasePlacement(state.placement),\n      popper: state.elements.popper,\n      popperRect: state.rects.popper,\n      gpuAcceleration: gpuAcceleration\n    };\n\n    if (state.modifiersData.popperOffsets != null) {\n      state.styles.popper = Object.assign({}, state.styles.popper, mapToStyles(Object.assign({}, commonStyles, {\n        offsets: state.modifiersData.popperOffsets,\n        position: state.options.strategy,\n        adaptive: adaptive,\n        roundOffsets: roundOffsets\n      })));\n    }\n\n    if (state.modifiersData.arrow != null) {\n      state.styles.arrow = Object.assign({}, state.styles.arrow, mapToStyles(Object.assign({}, commonStyles, {\n        offsets: state.modifiersData.arrow,\n        position: 'absolute',\n        adaptive: false,\n        roundOffsets: roundOffsets\n      })));\n    }\n\n    state.attributes.popper = Object.assign({}, state.attributes.popper, {\n      'data-popper-placement': state.placement\n    });\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  var computeStyles$1 = {\n    name: 'computeStyles',\n    enabled: true,\n    phase: 'beforeWrite',\n    fn: computeStyles,\n    data: {}\n  };\n\n  var passive = {\n    passive: true\n  };\n\n  function effect(_ref) {\n    var state = _ref.state,\n        instance = _ref.instance,\n        options = _ref.options;\n    var _options$scroll = options.scroll,\n        scroll = _options$scroll === void 0 ? true : _options$scroll,\n        _options$resize = options.resize,\n        resize = _options$resize === void 0 ? true : _options$resize;\n    var window = getWindow(state.elements.popper);\n    var scrollParents = [].concat(state.scrollParents.reference, state.scrollParents.popper);\n\n    if (scroll) {\n      scrollParents.forEach(function (scrollParent) {\n        scrollParent.addEventListener('scroll', instance.update, passive);\n      });\n    }\n\n    if (resize) {\n      window.addEventListener('resize', instance.update, passive);\n    }\n\n    return function () {\n      if (scroll) {\n        scrollParents.forEach(function (scrollParent) {\n          scrollParent.removeEventListener('scroll', instance.update, passive);\n        });\n      }\n\n      if (resize) {\n        window.removeEventListener('resize', instance.update, passive);\n      }\n    };\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  var eventListeners = {\n    name: 'eventListeners',\n    enabled: true,\n    phase: 'write',\n    fn: function fn() {},\n    effect: effect,\n    data: {}\n  };\n\n  var hash$1 = {\n    left: 'right',\n    right: 'left',\n    bottom: 'top',\n    top: 'bottom'\n  };\n  function getOppositePlacement(placement) {\n    return placement.replace(/left|right|bottom|top/g, function (matched) {\n      return hash$1[matched];\n    });\n  }\n\n  var hash = {\n    start: 'end',\n    end: 'start'\n  };\n  function getOppositeVariationPlacement(placement) {\n    return placement.replace(/start|end/g, function (matched) {\n      return hash[matched];\n    });\n  }\n\n  function getWindowScroll(node) {\n    var win = getWindow(node);\n    var scrollLeft = win.pageXOffset;\n    var scrollTop = win.pageYOffset;\n    return {\n      scrollLeft: scrollLeft,\n      scrollTop: scrollTop\n    };\n  }\n\n  function getWindowScrollBarX(element) {\n    // If <html> has a CSS width greater than the viewport, then this will be\n    // incorrect for RTL.\n    // Popper 1 is broken in this case and never had a bug report so let's assume\n    // it's not an issue. I don't think anyone ever specifies width on <html>\n    // anyway.\n    // Browsers where the left scrollbar doesn't cause an issue report `0` for\n    // this (e.g. Edge 2019, IE11, Safari)\n    return getBoundingClientRect(getDocumentElement(element)).left + getWindowScroll(element).scrollLeft;\n  }\n\n  function getViewportRect(element) {\n    var win = getWindow(element);\n    var html = getDocumentElement(element);\n    var visualViewport = win.visualViewport;\n    var width = html.clientWidth;\n    var height = html.clientHeight;\n    var x = 0;\n    var y = 0; // NB: This isn't supported on iOS <= 12. If the keyboard is open, the popper\n    // can be obscured underneath it.\n    // Also, `html.clientHeight` adds the bottom bar height in Safari iOS, even\n    // if it isn't open, so if this isn't available, the popper will be detected\n    // to overflow the bottom of the screen too early.\n\n    if (visualViewport) {\n      width = visualViewport.width;\n      height = visualViewport.height; // Uses Layout Viewport (like Chrome; Safari does not currently)\n      // In Chrome, it returns a value very close to 0 (+/-) but contains rounding\n      // errors due to floating point numbers, so we need to check precision.\n      // Safari returns a number <= 0, usually < -1 when pinch-zoomed\n      // Feature detection fails in mobile emulation mode in Chrome.\n      // Math.abs(win.innerWidth / visualViewport.scale - visualViewport.width) <\n      // 0.001\n      // Fallback here: \"Not Safari\" userAgent\n\n      if (!/^((?!chrome|android).)*safari/i.test(navigator.userAgent)) {\n        x = visualViewport.offsetLeft;\n        y = visualViewport.offsetTop;\n      }\n    }\n\n    return {\n      width: width,\n      height: height,\n      x: x + getWindowScrollBarX(element),\n      y: y\n    };\n  }\n\n  // of the `<html>` and `<body>` rect bounds if horizontally scrollable\n\n  function getDocumentRect(element) {\n    var _element$ownerDocumen;\n\n    var html = getDocumentElement(element);\n    var winScroll = getWindowScroll(element);\n    var body = (_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body;\n    var width = max(html.scrollWidth, html.clientWidth, body ? body.scrollWidth : 0, body ? body.clientWidth : 0);\n    var height = max(html.scrollHeight, html.clientHeight, body ? body.scrollHeight : 0, body ? body.clientHeight : 0);\n    var x = -winScroll.scrollLeft + getWindowScrollBarX(element);\n    var y = -winScroll.scrollTop;\n\n    if (getComputedStyle$1(body || html).direction === 'rtl') {\n      x += max(html.clientWidth, body ? body.clientWidth : 0) - width;\n    }\n\n    return {\n      width: width,\n      height: height,\n      x: x,\n      y: y\n    };\n  }\n\n  function isScrollParent(element) {\n    // Firefox wants us to check `-x` and `-y` variations as well\n    var _getComputedStyle = getComputedStyle$1(element),\n        overflow = _getComputedStyle.overflow,\n        overflowX = _getComputedStyle.overflowX,\n        overflowY = _getComputedStyle.overflowY;\n\n    return /auto|scroll|overlay|hidden/.test(overflow + overflowY + overflowX);\n  }\n\n  function getScrollParent(node) {\n    if (['html', 'body', '#document'].indexOf(getNodeName(node)) >= 0) {\n      // $FlowFixMe[incompatible-return]: assume body is always available\n      return node.ownerDocument.body;\n    }\n\n    if (isHTMLElement(node) && isScrollParent(node)) {\n      return node;\n    }\n\n    return getScrollParent(getParentNode(node));\n  }\n\n  /*\n  given a DOM element, return the list of all scroll parents, up the list of ancesors\n  until we get to the top window object. This list is what we attach scroll listeners\n  to, because if any of these parent elements scroll, we'll need to re-calculate the\n  reference element's position.\n  */\n\n  function listScrollParents(element, list) {\n    var _element$ownerDocumen;\n\n    if (list === void 0) {\n      list = [];\n    }\n\n    var scrollParent = getScrollParent(element);\n    var isBody = scrollParent === ((_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body);\n    var win = getWindow(scrollParent);\n    var target = isBody ? [win].concat(win.visualViewport || [], isScrollParent(scrollParent) ? scrollParent : []) : scrollParent;\n    var updatedList = list.concat(target);\n    return isBody ? updatedList : // $FlowFixMe[incompatible-call]: isBody tells us target will be an HTMLElement here\n    updatedList.concat(listScrollParents(getParentNode(target)));\n  }\n\n  function rectToClientRect(rect) {\n    return Object.assign({}, rect, {\n      left: rect.x,\n      top: rect.y,\n      right: rect.x + rect.width,\n      bottom: rect.y + rect.height\n    });\n  }\n\n  function getInnerBoundingClientRect(element) {\n    var rect = getBoundingClientRect(element);\n    rect.top = rect.top + element.clientTop;\n    rect.left = rect.left + element.clientLeft;\n    rect.bottom = rect.top + element.clientHeight;\n    rect.right = rect.left + element.clientWidth;\n    rect.width = element.clientWidth;\n    rect.height = element.clientHeight;\n    rect.x = rect.left;\n    rect.y = rect.top;\n    return rect;\n  }\n\n  function getClientRectFromMixedType(element, clippingParent) {\n    return clippingParent === viewport ? rectToClientRect(getViewportRect(element)) : isHTMLElement(clippingParent) ? getInnerBoundingClientRect(clippingParent) : rectToClientRect(getDocumentRect(getDocumentElement(element)));\n  } // A \"clipping parent\" is an overflowable container with the characteristic of\n  // clipping (or hiding) overflowing elements with a position different from\n  // `initial`\n\n\n  function getClippingParents(element) {\n    var clippingParents = listScrollParents(getParentNode(element));\n    var canEscapeClipping = ['absolute', 'fixed'].indexOf(getComputedStyle$1(element).position) >= 0;\n    var clipperElement = canEscapeClipping && isHTMLElement(element) ? getOffsetParent(element) : element;\n\n    if (!isElement(clipperElement)) {\n      return [];\n    } // $FlowFixMe[incompatible-return]: https://github.com/facebook/flow/issues/1414\n\n\n    return clippingParents.filter(function (clippingParent) {\n      return isElement(clippingParent) && contains(clippingParent, clipperElement) && getNodeName(clippingParent) !== 'body';\n    });\n  } // Gets the maximum area that the element is visible in due to any number of\n  // clipping parents\n\n\n  function getClippingRect(element, boundary, rootBoundary) {\n    var mainClippingParents = boundary === 'clippingParents' ? getClippingParents(element) : [].concat(boundary);\n    var clippingParents = [].concat(mainClippingParents, [rootBoundary]);\n    var firstClippingParent = clippingParents[0];\n    var clippingRect = clippingParents.reduce(function (accRect, clippingParent) {\n      var rect = getClientRectFromMixedType(element, clippingParent);\n      accRect.top = max(rect.top, accRect.top);\n      accRect.right = min(rect.right, accRect.right);\n      accRect.bottom = min(rect.bottom, accRect.bottom);\n      accRect.left = max(rect.left, accRect.left);\n      return accRect;\n    }, getClientRectFromMixedType(element, firstClippingParent));\n    clippingRect.width = clippingRect.right - clippingRect.left;\n    clippingRect.height = clippingRect.bottom - clippingRect.top;\n    clippingRect.x = clippingRect.left;\n    clippingRect.y = clippingRect.top;\n    return clippingRect;\n  }\n\n  function getVariation(placement) {\n    return placement.split('-')[1];\n  }\n\n  function computeOffsets(_ref) {\n    var reference = _ref.reference,\n        element = _ref.element,\n        placement = _ref.placement;\n    var basePlacement = placement ? getBasePlacement(placement) : null;\n    var variation = placement ? getVariation(placement) : null;\n    var commonX = reference.x + reference.width / 2 - element.width / 2;\n    var commonY = reference.y + reference.height / 2 - element.height / 2;\n    var offsets;\n\n    switch (basePlacement) {\n      case top:\n        offsets = {\n          x: commonX,\n          y: reference.y - element.height\n        };\n        break;\n\n      case bottom:\n        offsets = {\n          x: commonX,\n          y: reference.y + reference.height\n        };\n        break;\n\n      case right:\n        offsets = {\n          x: reference.x + reference.width,\n          y: commonY\n        };\n        break;\n\n      case left:\n        offsets = {\n          x: reference.x - element.width,\n          y: commonY\n        };\n        break;\n\n      default:\n        offsets = {\n          x: reference.x,\n          y: reference.y\n        };\n    }\n\n    var mainAxis = basePlacement ? getMainAxisFromPlacement(basePlacement) : null;\n\n    if (mainAxis != null) {\n      var len = mainAxis === 'y' ? 'height' : 'width';\n\n      switch (variation) {\n        case start:\n          offsets[mainAxis] = offsets[mainAxis] - (reference[len] / 2 - element[len] / 2);\n          break;\n\n        case end:\n          offsets[mainAxis] = offsets[mainAxis] + (reference[len] / 2 - element[len] / 2);\n          break;\n      }\n    }\n\n    return offsets;\n  }\n\n  function detectOverflow(state, options) {\n    if (options === void 0) {\n      options = {};\n    }\n\n    var _options = options,\n        _options$placement = _options.placement,\n        placement = _options$placement === void 0 ? state.placement : _options$placement,\n        _options$boundary = _options.boundary,\n        boundary = _options$boundary === void 0 ? clippingParents : _options$boundary,\n        _options$rootBoundary = _options.rootBoundary,\n        rootBoundary = _options$rootBoundary === void 0 ? viewport : _options$rootBoundary,\n        _options$elementConte = _options.elementContext,\n        elementContext = _options$elementConte === void 0 ? popper : _options$elementConte,\n        _options$altBoundary = _options.altBoundary,\n        altBoundary = _options$altBoundary === void 0 ? false : _options$altBoundary,\n        _options$padding = _options.padding,\n        padding = _options$padding === void 0 ? 0 : _options$padding;\n    var paddingObject = mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));\n    var altContext = elementContext === popper ? reference : popper;\n    var referenceElement = state.elements.reference;\n    var popperRect = state.rects.popper;\n    var element = state.elements[altBoundary ? altContext : elementContext];\n    var clippingClientRect = getClippingRect(isElement(element) ? element : element.contextElement || getDocumentElement(state.elements.popper), boundary, rootBoundary);\n    var referenceClientRect = getBoundingClientRect(referenceElement);\n    var popperOffsets = computeOffsets({\n      reference: referenceClientRect,\n      element: popperRect,\n      strategy: 'absolute',\n      placement: placement\n    });\n    var popperClientRect = rectToClientRect(Object.assign({}, popperRect, popperOffsets));\n    var elementClientRect = elementContext === popper ? popperClientRect : referenceClientRect; // positive = overflowing the clipping rect\n    // 0 or negative = within the clipping rect\n\n    var overflowOffsets = {\n      top: clippingClientRect.top - elementClientRect.top + paddingObject.top,\n      bottom: elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom,\n      left: clippingClientRect.left - elementClientRect.left + paddingObject.left,\n      right: elementClientRect.right - clippingClientRect.right + paddingObject.right\n    };\n    var offsetData = state.modifiersData.offset; // Offsets can be applied only to the popper element\n\n    if (elementContext === popper && offsetData) {\n      var offset = offsetData[placement];\n      Object.keys(overflowOffsets).forEach(function (key) {\n        var multiply = [right, bottom].indexOf(key) >= 0 ? 1 : -1;\n        var axis = [top, bottom].indexOf(key) >= 0 ? 'y' : 'x';\n        overflowOffsets[key] += offset[axis] * multiply;\n      });\n    }\n\n    return overflowOffsets;\n  }\n\n  function computeAutoPlacement(state, options) {\n    if (options === void 0) {\n      options = {};\n    }\n\n    var _options = options,\n        placement = _options.placement,\n        boundary = _options.boundary,\n        rootBoundary = _options.rootBoundary,\n        padding = _options.padding,\n        flipVariations = _options.flipVariations,\n        _options$allowedAutoP = _options.allowedAutoPlacements,\n        allowedAutoPlacements = _options$allowedAutoP === void 0 ? placements : _options$allowedAutoP;\n    var variation = getVariation(placement);\n    var placements$1 = variation ? flipVariations ? variationPlacements : variationPlacements.filter(function (placement) {\n      return getVariation(placement) === variation;\n    }) : basePlacements;\n    var allowedPlacements = placements$1.filter(function (placement) {\n      return allowedAutoPlacements.indexOf(placement) >= 0;\n    });\n\n    if (allowedPlacements.length === 0) {\n      allowedPlacements = placements$1;\n    } // $FlowFixMe[incompatible-type]: Flow seems to have problems with two array unions...\n\n\n    var overflows = allowedPlacements.reduce(function (acc, placement) {\n      acc[placement] = detectOverflow(state, {\n        placement: placement,\n        boundary: boundary,\n        rootBoundary: rootBoundary,\n        padding: padding\n      })[getBasePlacement(placement)];\n      return acc;\n    }, {});\n    return Object.keys(overflows).sort(function (a, b) {\n      return overflows[a] - overflows[b];\n    });\n  }\n\n  function getExpandedFallbackPlacements(placement) {\n    if (getBasePlacement(placement) === auto) {\n      return [];\n    }\n\n    var oppositePlacement = getOppositePlacement(placement);\n    return [getOppositeVariationPlacement(placement), oppositePlacement, getOppositeVariationPlacement(oppositePlacement)];\n  }\n\n  function flip(_ref) {\n    var state = _ref.state,\n        options = _ref.options,\n        name = _ref.name;\n\n    if (state.modifiersData[name]._skip) {\n      return;\n    }\n\n    var _options$mainAxis = options.mainAxis,\n        checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\n        _options$altAxis = options.altAxis,\n        checkAltAxis = _options$altAxis === void 0 ? true : _options$altAxis,\n        specifiedFallbackPlacements = options.fallbackPlacements,\n        padding = options.padding,\n        boundary = options.boundary,\n        rootBoundary = options.rootBoundary,\n        altBoundary = options.altBoundary,\n        _options$flipVariatio = options.flipVariations,\n        flipVariations = _options$flipVariatio === void 0 ? true : _options$flipVariatio,\n        allowedAutoPlacements = options.allowedAutoPlacements;\n    var preferredPlacement = state.options.placement;\n    var basePlacement = getBasePlacement(preferredPlacement);\n    var isBasePlacement = basePlacement === preferredPlacement;\n    var fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipVariations ? [getOppositePlacement(preferredPlacement)] : getExpandedFallbackPlacements(preferredPlacement));\n    var placements = [preferredPlacement].concat(fallbackPlacements).reduce(function (acc, placement) {\n      return acc.concat(getBasePlacement(placement) === auto ? computeAutoPlacement(state, {\n        placement: placement,\n        boundary: boundary,\n        rootBoundary: rootBoundary,\n        padding: padding,\n        flipVariations: flipVariations,\n        allowedAutoPlacements: allowedAutoPlacements\n      }) : placement);\n    }, []);\n    var referenceRect = state.rects.reference;\n    var popperRect = state.rects.popper;\n    var checksMap = new Map();\n    var makeFallbackChecks = true;\n    var firstFittingPlacement = placements[0];\n\n    for (var i = 0; i < placements.length; i++) {\n      var placement = placements[i];\n\n      var _basePlacement = getBasePlacement(placement);\n\n      var isStartVariation = getVariation(placement) === start;\n      var isVertical = [top, bottom].indexOf(_basePlacement) >= 0;\n      var len = isVertical ? 'width' : 'height';\n      var overflow = detectOverflow(state, {\n        placement: placement,\n        boundary: boundary,\n        rootBoundary: rootBoundary,\n        altBoundary: altBoundary,\n        padding: padding\n      });\n      var mainVariationSide = isVertical ? isStartVariation ? right : left : isStartVariation ? bottom : top;\n\n      if (referenceRect[len] > popperRect[len]) {\n        mainVariationSide = getOppositePlacement(mainVariationSide);\n      }\n\n      var altVariationSide = getOppositePlacement(mainVariationSide);\n      var checks = [];\n\n      if (checkMainAxis) {\n        checks.push(overflow[_basePlacement] <= 0);\n      }\n\n      if (checkAltAxis) {\n        checks.push(overflow[mainVariationSide] <= 0, overflow[altVariationSide] <= 0);\n      }\n\n      if (checks.every(function (check) {\n        return check;\n      })) {\n        firstFittingPlacement = placement;\n        makeFallbackChecks = false;\n        break;\n      }\n\n      checksMap.set(placement, checks);\n    }\n\n    if (makeFallbackChecks) {\n      // `2` may be desired in some cases – research later\n      var numberOfChecks = flipVariations ? 3 : 1;\n\n      var _loop = function _loop(_i) {\n        var fittingPlacement = placements.find(function (placement) {\n          var checks = checksMap.get(placement);\n\n          if (checks) {\n            return checks.slice(0, _i).every(function (check) {\n              return check;\n            });\n          }\n        });\n\n        if (fittingPlacement) {\n          firstFittingPlacement = fittingPlacement;\n          return \"break\";\n        }\n      };\n\n      for (var _i = numberOfChecks; _i > 0; _i--) {\n        var _ret = _loop(_i);\n\n        if (_ret === \"break\") break;\n      }\n    }\n\n    if (state.placement !== firstFittingPlacement) {\n      state.modifiersData[name]._skip = true;\n      state.placement = firstFittingPlacement;\n      state.reset = true;\n    }\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  var flip$1 = {\n    name: 'flip',\n    enabled: true,\n    phase: 'main',\n    fn: flip,\n    requiresIfExists: ['offset'],\n    data: {\n      _skip: false\n    }\n  };\n\n  function getSideOffsets(overflow, rect, preventedOffsets) {\n    if (preventedOffsets === void 0) {\n      preventedOffsets = {\n        x: 0,\n        y: 0\n      };\n    }\n\n    return {\n      top: overflow.top - rect.height - preventedOffsets.y,\n      right: overflow.right - rect.width + preventedOffsets.x,\n      bottom: overflow.bottom - rect.height + preventedOffsets.y,\n      left: overflow.left - rect.width - preventedOffsets.x\n    };\n  }\n\n  function isAnySideFullyClipped(overflow) {\n    return [top, right, bottom, left].some(function (side) {\n      return overflow[side] >= 0;\n    });\n  }\n\n  function hide(_ref) {\n    var state = _ref.state,\n        name = _ref.name;\n    var referenceRect = state.rects.reference;\n    var popperRect = state.rects.popper;\n    var preventedOffsets = state.modifiersData.preventOverflow;\n    var referenceOverflow = detectOverflow(state, {\n      elementContext: 'reference'\n    });\n    var popperAltOverflow = detectOverflow(state, {\n      altBoundary: true\n    });\n    var referenceClippingOffsets = getSideOffsets(referenceOverflow, referenceRect);\n    var popperEscapeOffsets = getSideOffsets(popperAltOverflow, popperRect, preventedOffsets);\n    var isReferenceHidden = isAnySideFullyClipped(referenceClippingOffsets);\n    var hasPopperEscaped = isAnySideFullyClipped(popperEscapeOffsets);\n    state.modifiersData[name] = {\n      referenceClippingOffsets: referenceClippingOffsets,\n      popperEscapeOffsets: popperEscapeOffsets,\n      isReferenceHidden: isReferenceHidden,\n      hasPopperEscaped: hasPopperEscaped\n    };\n    state.attributes.popper = Object.assign({}, state.attributes.popper, {\n      'data-popper-reference-hidden': isReferenceHidden,\n      'data-popper-escaped': hasPopperEscaped\n    });\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  var hide$1 = {\n    name: 'hide',\n    enabled: true,\n    phase: 'main',\n    requiresIfExists: ['preventOverflow'],\n    fn: hide\n  };\n\n  function distanceAndSkiddingToXY(placement, rects, offset) {\n    var basePlacement = getBasePlacement(placement);\n    var invertDistance = [left, top].indexOf(basePlacement) >= 0 ? -1 : 1;\n\n    var _ref = typeof offset === 'function' ? offset(Object.assign({}, rects, {\n      placement: placement\n    })) : offset,\n        skidding = _ref[0],\n        distance = _ref[1];\n\n    skidding = skidding || 0;\n    distance = (distance || 0) * invertDistance;\n    return [left, right].indexOf(basePlacement) >= 0 ? {\n      x: distance,\n      y: skidding\n    } : {\n      x: skidding,\n      y: distance\n    };\n  }\n\n  function offset(_ref2) {\n    var state = _ref2.state,\n        options = _ref2.options,\n        name = _ref2.name;\n    var _options$offset = options.offset,\n        offset = _options$offset === void 0 ? [0, 0] : _options$offset;\n    var data = placements.reduce(function (acc, placement) {\n      acc[placement] = distanceAndSkiddingToXY(placement, state.rects, offset);\n      return acc;\n    }, {});\n    var _data$state$placement = data[state.placement],\n        x = _data$state$placement.x,\n        y = _data$state$placement.y;\n\n    if (state.modifiersData.popperOffsets != null) {\n      state.modifiersData.popperOffsets.x += x;\n      state.modifiersData.popperOffsets.y += y;\n    }\n\n    state.modifiersData[name] = data;\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  var offset$1 = {\n    name: 'offset',\n    enabled: true,\n    phase: 'main',\n    requires: ['popperOffsets'],\n    fn: offset\n  };\n\n  function popperOffsets(_ref) {\n    var state = _ref.state,\n        name = _ref.name;\n    // Offsets are the actual position the popper needs to have to be\n    // properly positioned near its reference element\n    // This is the most basic placement, and will be adjusted by\n    // the modifiers in the next step\n    state.modifiersData[name] = computeOffsets({\n      reference: state.rects.reference,\n      element: state.rects.popper,\n      strategy: 'absolute',\n      placement: state.placement\n    });\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  var popperOffsets$1 = {\n    name: 'popperOffsets',\n    enabled: true,\n    phase: 'read',\n    fn: popperOffsets,\n    data: {}\n  };\n\n  function getAltAxis(axis) {\n    return axis === 'x' ? 'y' : 'x';\n  }\n\n  function preventOverflow(_ref) {\n    var state = _ref.state,\n        options = _ref.options,\n        name = _ref.name;\n    var _options$mainAxis = options.mainAxis,\n        checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\n        _options$altAxis = options.altAxis,\n        checkAltAxis = _options$altAxis === void 0 ? false : _options$altAxis,\n        boundary = options.boundary,\n        rootBoundary = options.rootBoundary,\n        altBoundary = options.altBoundary,\n        padding = options.padding,\n        _options$tether = options.tether,\n        tether = _options$tether === void 0 ? true : _options$tether,\n        _options$tetherOffset = options.tetherOffset,\n        tetherOffset = _options$tetherOffset === void 0 ? 0 : _options$tetherOffset;\n    var overflow = detectOverflow(state, {\n      boundary: boundary,\n      rootBoundary: rootBoundary,\n      padding: padding,\n      altBoundary: altBoundary\n    });\n    var basePlacement = getBasePlacement(state.placement);\n    var variation = getVariation(state.placement);\n    var isBasePlacement = !variation;\n    var mainAxis = getMainAxisFromPlacement(basePlacement);\n    var altAxis = getAltAxis(mainAxis);\n    var popperOffsets = state.modifiersData.popperOffsets;\n    var referenceRect = state.rects.reference;\n    var popperRect = state.rects.popper;\n    var tetherOffsetValue = typeof tetherOffset === 'function' ? tetherOffset(Object.assign({}, state.rects, {\n      placement: state.placement\n    })) : tetherOffset;\n    var data = {\n      x: 0,\n      y: 0\n    };\n\n    if (!popperOffsets) {\n      return;\n    }\n\n    if (checkMainAxis || checkAltAxis) {\n      var mainSide = mainAxis === 'y' ? top : left;\n      var altSide = mainAxis === 'y' ? bottom : right;\n      var len = mainAxis === 'y' ? 'height' : 'width';\n      var offset = popperOffsets[mainAxis];\n      var min$1 = popperOffsets[mainAxis] + overflow[mainSide];\n      var max$1 = popperOffsets[mainAxis] - overflow[altSide];\n      var additive = tether ? -popperRect[len] / 2 : 0;\n      var minLen = variation === start ? referenceRect[len] : popperRect[len];\n      var maxLen = variation === start ? -popperRect[len] : -referenceRect[len]; // We need to include the arrow in the calculation so the arrow doesn't go\n      // outside the reference bounds\n\n      var arrowElement = state.elements.arrow;\n      var arrowRect = tether && arrowElement ? getLayoutRect(arrowElement) : {\n        width: 0,\n        height: 0\n      };\n      var arrowPaddingObject = state.modifiersData['arrow#persistent'] ? state.modifiersData['arrow#persistent'].padding : getFreshSideObject();\n      var arrowPaddingMin = arrowPaddingObject[mainSide];\n      var arrowPaddingMax = arrowPaddingObject[altSide]; // If the reference length is smaller than the arrow length, we don't want\n      // to include its full size in the calculation. If the reference is small\n      // and near the edge of a boundary, the popper can overflow even if the\n      // reference is not overflowing as well (e.g. virtual elements with no\n      // width or height)\n\n      var arrowLen = within(0, referenceRect[len], arrowRect[len]);\n      var minOffset = isBasePlacement ? referenceRect[len] / 2 - additive - arrowLen - arrowPaddingMin - tetherOffsetValue : minLen - arrowLen - arrowPaddingMin - tetherOffsetValue;\n      var maxOffset = isBasePlacement ? -referenceRect[len] / 2 + additive + arrowLen + arrowPaddingMax + tetherOffsetValue : maxLen + arrowLen + arrowPaddingMax + tetherOffsetValue;\n      var arrowOffsetParent = state.elements.arrow && getOffsetParent(state.elements.arrow);\n      var clientOffset = arrowOffsetParent ? mainAxis === 'y' ? arrowOffsetParent.clientTop || 0 : arrowOffsetParent.clientLeft || 0 : 0;\n      var offsetModifierValue = state.modifiersData.offset ? state.modifiersData.offset[state.placement][mainAxis] : 0;\n      var tetherMin = popperOffsets[mainAxis] + minOffset - offsetModifierValue - clientOffset;\n      var tetherMax = popperOffsets[mainAxis] + maxOffset - offsetModifierValue;\n\n      if (checkMainAxis) {\n        var preventedOffset = within(tether ? min(min$1, tetherMin) : min$1, offset, tether ? max(max$1, tetherMax) : max$1);\n        popperOffsets[mainAxis] = preventedOffset;\n        data[mainAxis] = preventedOffset - offset;\n      }\n\n      if (checkAltAxis) {\n        var _mainSide = mainAxis === 'x' ? top : left;\n\n        var _altSide = mainAxis === 'x' ? bottom : right;\n\n        var _offset = popperOffsets[altAxis];\n\n        var _min = _offset + overflow[_mainSide];\n\n        var _max = _offset - overflow[_altSide];\n\n        var _preventedOffset = within(tether ? min(_min, tetherMin) : _min, _offset, tether ? max(_max, tetherMax) : _max);\n\n        popperOffsets[altAxis] = _preventedOffset;\n        data[altAxis] = _preventedOffset - _offset;\n      }\n    }\n\n    state.modifiersData[name] = data;\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  var preventOverflow$1 = {\n    name: 'preventOverflow',\n    enabled: true,\n    phase: 'main',\n    fn: preventOverflow,\n    requiresIfExists: ['offset']\n  };\n\n  function getHTMLElementScroll(element) {\n    return {\n      scrollLeft: element.scrollLeft,\n      scrollTop: element.scrollTop\n    };\n  }\n\n  function getNodeScroll(node) {\n    if (node === getWindow(node) || !isHTMLElement(node)) {\n      return getWindowScroll(node);\n    } else {\n      return getHTMLElementScroll(node);\n    }\n  }\n\n  // Composite means it takes into account transforms as well as layout.\n\n  function getCompositeRect(elementOrVirtualElement, offsetParent, isFixed) {\n    if (isFixed === void 0) {\n      isFixed = false;\n    }\n\n    var documentElement = getDocumentElement(offsetParent);\n    var rect = getBoundingClientRect(elementOrVirtualElement);\n    var isOffsetParentAnElement = isHTMLElement(offsetParent);\n    var scroll = {\n      scrollLeft: 0,\n      scrollTop: 0\n    };\n    var offsets = {\n      x: 0,\n      y: 0\n    };\n\n    if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {\n      if (getNodeName(offsetParent) !== 'body' || // https://github.com/popperjs/popper-core/issues/1078\n      isScrollParent(documentElement)) {\n        scroll = getNodeScroll(offsetParent);\n      }\n\n      if (isHTMLElement(offsetParent)) {\n        offsets = getBoundingClientRect(offsetParent);\n        offsets.x += offsetParent.clientLeft;\n        offsets.y += offsetParent.clientTop;\n      } else if (documentElement) {\n        offsets.x = getWindowScrollBarX(documentElement);\n      }\n    }\n\n    return {\n      x: rect.left + scroll.scrollLeft - offsets.x,\n      y: rect.top + scroll.scrollTop - offsets.y,\n      width: rect.width,\n      height: rect.height\n    };\n  }\n\n  function order(modifiers) {\n    var map = new Map();\n    var visited = new Set();\n    var result = [];\n    modifiers.forEach(function (modifier) {\n      map.set(modifier.name, modifier);\n    }); // On visiting object, check for its dependencies and visit them recursively\n\n    function sort(modifier) {\n      visited.add(modifier.name);\n      var requires = [].concat(modifier.requires || [], modifier.requiresIfExists || []);\n      requires.forEach(function (dep) {\n        if (!visited.has(dep)) {\n          var depModifier = map.get(dep);\n\n          if (depModifier) {\n            sort(depModifier);\n          }\n        }\n      });\n      result.push(modifier);\n    }\n\n    modifiers.forEach(function (modifier) {\n      if (!visited.has(modifier.name)) {\n        // check for visited object\n        sort(modifier);\n      }\n    });\n    return result;\n  }\n\n  function orderModifiers(modifiers) {\n    // order based on dependencies\n    var orderedModifiers = order(modifiers); // order based on phase\n\n    return modifierPhases.reduce(function (acc, phase) {\n      return acc.concat(orderedModifiers.filter(function (modifier) {\n        return modifier.phase === phase;\n      }));\n    }, []);\n  }\n\n  function debounce(fn) {\n    var pending;\n    return function () {\n      if (!pending) {\n        pending = new Promise(function (resolve) {\n          Promise.resolve().then(function () {\n            pending = undefined;\n            resolve(fn());\n          });\n        });\n      }\n\n      return pending;\n    };\n  }\n\n  function mergeByName(modifiers) {\n    var merged = modifiers.reduce(function (merged, current) {\n      var existing = merged[current.name];\n      merged[current.name] = existing ? Object.assign({}, existing, current, {\n        options: Object.assign({}, existing.options, current.options),\n        data: Object.assign({}, existing.data, current.data)\n      }) : current;\n      return merged;\n    }, {}); // IE11 does not support Object.values\n\n    return Object.keys(merged).map(function (key) {\n      return merged[key];\n    });\n  }\n\n  var DEFAULT_OPTIONS = {\n    placement: 'bottom',\n    modifiers: [],\n    strategy: 'absolute'\n  };\n\n  function areValidElements() {\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    return !args.some(function (element) {\n      return !(element && typeof element.getBoundingClientRect === 'function');\n    });\n  }\n\n  function popperGenerator(generatorOptions) {\n    if (generatorOptions === void 0) {\n      generatorOptions = {};\n    }\n\n    var _generatorOptions = generatorOptions,\n        _generatorOptions$def = _generatorOptions.defaultModifiers,\n        defaultModifiers = _generatorOptions$def === void 0 ? [] : _generatorOptions$def,\n        _generatorOptions$def2 = _generatorOptions.defaultOptions,\n        defaultOptions = _generatorOptions$def2 === void 0 ? DEFAULT_OPTIONS : _generatorOptions$def2;\n    return function createPopper(reference, popper, options) {\n      if (options === void 0) {\n        options = defaultOptions;\n      }\n\n      var state = {\n        placement: 'bottom',\n        orderedModifiers: [],\n        options: Object.assign({}, DEFAULT_OPTIONS, defaultOptions),\n        modifiersData: {},\n        elements: {\n          reference: reference,\n          popper: popper\n        },\n        attributes: {},\n        styles: {}\n      };\n      var effectCleanupFns = [];\n      var isDestroyed = false;\n      var instance = {\n        state: state,\n        setOptions: function setOptions(options) {\n          cleanupModifierEffects();\n          state.options = Object.assign({}, defaultOptions, state.options, options);\n          state.scrollParents = {\n            reference: isElement(reference) ? listScrollParents(reference) : reference.contextElement ? listScrollParents(reference.contextElement) : [],\n            popper: listScrollParents(popper)\n          }; // Orders the modifiers based on their dependencies and `phase`\n          // properties\n\n          var orderedModifiers = orderModifiers(mergeByName([].concat(defaultModifiers, state.options.modifiers))); // Strip out disabled modifiers\n\n          state.orderedModifiers = orderedModifiers.filter(function (m) {\n            return m.enabled;\n          }); // Validate the provided modifiers so that the consumer will get warned\n\n          runModifierEffects();\n          return instance.update();\n        },\n        // Sync update – it will always be executed, even if not necessary. This\n        // is useful for low frequency updates where sync behavior simplifies the\n        // logic.\n        // For high frequency updates (e.g. `resize` and `scroll` events), always\n        // prefer the async Popper#update method\n        forceUpdate: function forceUpdate() {\n          if (isDestroyed) {\n            return;\n          }\n\n          var _state$elements = state.elements,\n              reference = _state$elements.reference,\n              popper = _state$elements.popper; // Don't proceed if `reference` or `popper` are not valid elements\n          // anymore\n\n          if (!areValidElements(reference, popper)) {\n\n            return;\n          } // Store the reference and popper rects to be read by modifiers\n\n\n          state.rects = {\n            reference: getCompositeRect(reference, getOffsetParent(popper), state.options.strategy === 'fixed'),\n            popper: getLayoutRect(popper)\n          }; // Modifiers have the ability to reset the current update cycle. The\n          // most common use case for this is the `flip` modifier changing the\n          // placement, which then needs to re-run all the modifiers, because the\n          // logic was previously ran for the previous placement and is therefore\n          // stale/incorrect\n\n          state.reset = false;\n          state.placement = state.options.placement; // On each update cycle, the `modifiersData` property for each modifier\n          // is filled with the initial data specified by the modifier. This means\n          // it doesn't persist and is fresh on each update.\n          // To ensure persistent data, use `${name}#persistent`\n\n          state.orderedModifiers.forEach(function (modifier) {\n            return state.modifiersData[modifier.name] = Object.assign({}, modifier.data);\n          });\n\n          for (var index = 0; index < state.orderedModifiers.length; index++) {\n\n            if (state.reset === true) {\n              state.reset = false;\n              index = -1;\n              continue;\n            }\n\n            var _state$orderedModifie = state.orderedModifiers[index],\n                fn = _state$orderedModifie.fn,\n                _state$orderedModifie2 = _state$orderedModifie.options,\n                _options = _state$orderedModifie2 === void 0 ? {} : _state$orderedModifie2,\n                name = _state$orderedModifie.name;\n\n            if (typeof fn === 'function') {\n              state = fn({\n                state: state,\n                options: _options,\n                name: name,\n                instance: instance\n              }) || state;\n            }\n          }\n        },\n        // Async and optimistically optimized update – it will not be executed if\n        // not necessary (debounced to run at most once-per-tick)\n        update: debounce(function () {\n          return new Promise(function (resolve) {\n            instance.forceUpdate();\n            resolve(state);\n          });\n        }),\n        destroy: function destroy() {\n          cleanupModifierEffects();\n          isDestroyed = true;\n        }\n      };\n\n      if (!areValidElements(reference, popper)) {\n\n        return instance;\n      }\n\n      instance.setOptions(options).then(function (state) {\n        if (!isDestroyed && options.onFirstUpdate) {\n          options.onFirstUpdate(state);\n        }\n      }); // Modifiers have the ability to execute arbitrary code before the first\n      // update cycle runs. They will be executed in the same order as the update\n      // cycle. This is useful when a modifier adds some persistent data that\n      // other modifiers need to use, but the modifier is run after the dependent\n      // one.\n\n      function runModifierEffects() {\n        state.orderedModifiers.forEach(function (_ref3) {\n          var name = _ref3.name,\n              _ref3$options = _ref3.options,\n              options = _ref3$options === void 0 ? {} : _ref3$options,\n              effect = _ref3.effect;\n\n          if (typeof effect === 'function') {\n            var cleanupFn = effect({\n              state: state,\n              name: name,\n              instance: instance,\n              options: options\n            });\n\n            var noopFn = function noopFn() {};\n\n            effectCleanupFns.push(cleanupFn || noopFn);\n          }\n        });\n      }\n\n      function cleanupModifierEffects() {\n        effectCleanupFns.forEach(function (fn) {\n          return fn();\n        });\n        effectCleanupFns = [];\n      }\n\n      return instance;\n    };\n  }\n  var createPopper$2 = /*#__PURE__*/popperGenerator(); // eslint-disable-next-line import/no-unused-modules\n\n  var defaultModifiers$1 = [eventListeners, popperOffsets$1, computeStyles$1, applyStyles$1];\n  var createPopper$1 = /*#__PURE__*/popperGenerator({\n    defaultModifiers: defaultModifiers$1\n  }); // eslint-disable-next-line import/no-unused-modules\n\n  var defaultModifiers = [eventListeners, popperOffsets$1, computeStyles$1, applyStyles$1, offset$1, flip$1, preventOverflow$1, arrow$1, hide$1];\n  var createPopper = /*#__PURE__*/popperGenerator({\n    defaultModifiers: defaultModifiers\n  }); // eslint-disable-next-line import/no-unused-modules\n\n  var Popper = /*#__PURE__*/Object.freeze({\n    __proto__: null,\n    popperGenerator: popperGenerator,\n    detectOverflow: detectOverflow,\n    createPopperBase: createPopper$2,\n    createPopper: createPopper,\n    createPopperLite: createPopper$1,\n    top: top,\n    bottom: bottom,\n    right: right,\n    left: left,\n    auto: auto,\n    basePlacements: basePlacements,\n    start: start,\n    end: end,\n    clippingParents: clippingParents,\n    viewport: viewport,\n    popper: popper,\n    reference: reference,\n    variationPlacements: variationPlacements,\n    placements: placements,\n    beforeRead: beforeRead,\n    read: read,\n    afterRead: afterRead,\n    beforeMain: beforeMain,\n    main: main,\n    afterMain: afterMain,\n    beforeWrite: beforeWrite,\n    write: write,\n    afterWrite: afterWrite,\n    modifierPhases: modifierPhases,\n    applyStyles: applyStyles$1,\n    arrow: arrow$1,\n    computeStyles: computeStyles$1,\n    eventListeners: eventListeners,\n    flip: flip$1,\n    hide: hide$1,\n    offset: offset$1,\n    popperOffsets: popperOffsets$1,\n    preventOverflow: preventOverflow$1\n  });\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): dropdown.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$8 = 'dropdown';\n  const DATA_KEY$7 = 'bs.dropdown';\n  const EVENT_KEY$7 = `.${DATA_KEY$7}`;\n  const DATA_API_KEY$4 = '.data-api';\n  const ESCAPE_KEY$2 = 'Escape';\n  const SPACE_KEY = 'Space';\n  const TAB_KEY = 'Tab';\n  const ARROW_UP_KEY = 'ArrowUp';\n  const ARROW_DOWN_KEY = 'ArrowDown';\n  const RIGHT_MOUSE_BUTTON = 2; // MouseEvent.button value for the secondary button, usually the right button\n\n  const REGEXP_KEYDOWN = new RegExp(`${ARROW_UP_KEY}|${ARROW_DOWN_KEY}|${ESCAPE_KEY$2}`);\n  const EVENT_HIDE$4 = `hide${EVENT_KEY$7}`;\n  const EVENT_HIDDEN$4 = `hidden${EVENT_KEY$7}`;\n  const EVENT_SHOW$4 = `show${EVENT_KEY$7}`;\n  const EVENT_SHOWN$4 = `shown${EVENT_KEY$7}`;\n  const EVENT_CLICK = `click${EVENT_KEY$7}`;\n  const EVENT_CLICK_DATA_API$3 = `click${EVENT_KEY$7}${DATA_API_KEY$4}`;\n  const EVENT_KEYDOWN_DATA_API = `keydown${EVENT_KEY$7}${DATA_API_KEY$4}`;\n  const EVENT_KEYUP_DATA_API = `keyup${EVENT_KEY$7}${DATA_API_KEY$4}`;\n  const CLASS_NAME_SHOW$7 = 'show';\n  const CLASS_NAME_DROPUP = 'dropup';\n  const CLASS_NAME_DROPEND = 'dropend';\n  const CLASS_NAME_DROPSTART = 'dropstart';\n  const CLASS_NAME_NAVBAR = 'navbar';\n  const SELECTOR_DATA_TOGGLE$3 = '[data-bs-toggle=\"dropdown\"]';\n  const SELECTOR_MENU = '.dropdown-menu';\n  const SELECTOR_NAVBAR_NAV = '.navbar-nav';\n  const SELECTOR_VISIBLE_ITEMS = '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)';\n  const PLACEMENT_TOP = isRTL() ? 'top-end' : 'top-start';\n  const PLACEMENT_TOPEND = isRTL() ? 'top-start' : 'top-end';\n  const PLACEMENT_BOTTOM = isRTL() ? 'bottom-end' : 'bottom-start';\n  const PLACEMENT_BOTTOMEND = isRTL() ? 'bottom-start' : 'bottom-end';\n  const PLACEMENT_RIGHT = isRTL() ? 'left-start' : 'right-start';\n  const PLACEMENT_LEFT = isRTL() ? 'right-start' : 'left-start';\n  const Default$7 = {\n    offset: [0, 2],\n    boundary: 'clippingParents',\n    reference: 'toggle',\n    display: 'dynamic',\n    popperConfig: null,\n    autoClose: true\n  };\n  const DefaultType$7 = {\n    offset: '(array|string|function)',\n    boundary: '(string|element)',\n    reference: '(string|element|object)',\n    display: 'string',\n    popperConfig: '(null|object|function)',\n    autoClose: '(boolean|string)'\n  };\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Dropdown extends BaseComponent {\n    constructor(element, config) {\n      super(element);\n      this._popper = null;\n      this._config = this._getConfig(config);\n      this._menu = this._getMenuElement();\n      this._inNavbar = this._detectNavbar();\n\n      this._addEventListeners();\n    } // Getters\n\n\n    static get Default() {\n      return Default$7;\n    }\n\n    static get DefaultType() {\n      return DefaultType$7;\n    }\n\n    static get NAME() {\n      return NAME$8;\n    } // Public\n\n\n    toggle() {\n      if (isDisabled(this._element)) {\n        return;\n      }\n\n      const isActive = this._element.classList.contains(CLASS_NAME_SHOW$7);\n\n      if (isActive) {\n        this.hide();\n        return;\n      }\n\n      this.show();\n    }\n\n    show() {\n      if (isDisabled(this._element) || this._menu.classList.contains(CLASS_NAME_SHOW$7)) {\n        return;\n      }\n\n      const parent = Dropdown.getParentFromElement(this._element);\n      const relatedTarget = {\n        relatedTarget: this._element\n      };\n      const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$4, relatedTarget);\n\n      if (showEvent.defaultPrevented) {\n        return;\n      } // Totally disable Popper for Dropdowns in Navbar\n\n\n      if (this._inNavbar) {\n        Manipulator.setDataAttribute(this._menu, 'popper', 'none');\n      } else {\n        if (typeof Popper === 'undefined') {\n          throw new TypeError('Bootstrap\\'s dropdowns require Popper (https://popper.js.org)');\n        }\n\n        let referenceElement = this._element;\n\n        if (this._config.reference === 'parent') {\n          referenceElement = parent;\n        } else if (isElement$1(this._config.reference)) {\n          referenceElement = getElement(this._config.reference);\n        } else if (typeof this._config.reference === 'object') {\n          referenceElement = this._config.reference;\n        }\n\n        const popperConfig = this._getPopperConfig();\n\n        const isDisplayStatic = popperConfig.modifiers.find(modifier => modifier.name === 'applyStyles' && modifier.enabled === false);\n        this._popper = createPopper(referenceElement, this._menu, popperConfig);\n\n        if (isDisplayStatic) {\n          Manipulator.setDataAttribute(this._menu, 'popper', 'static');\n        }\n      } // If this is a touch-enabled device we add extra\n      // empty mouseover listeners to the body's immediate children;\n      // only needed because of broken event delegation on iOS\n      // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n\n\n      if ('ontouchstart' in document.documentElement && !parent.closest(SELECTOR_NAVBAR_NAV)) {\n        [].concat(...document.body.children).forEach(elem => EventHandler.on(elem, 'mouseover', noop));\n      }\n\n      this._element.focus();\n\n      this._element.setAttribute('aria-expanded', true);\n\n      this._menu.classList.toggle(CLASS_NAME_SHOW$7);\n\n      this._element.classList.toggle(CLASS_NAME_SHOW$7);\n\n      EventHandler.trigger(this._element, EVENT_SHOWN$4, relatedTarget);\n    }\n\n    hide() {\n      if (isDisabled(this._element) || !this._menu.classList.contains(CLASS_NAME_SHOW$7)) {\n        return;\n      }\n\n      const relatedTarget = {\n        relatedTarget: this._element\n      };\n\n      this._completeHide(relatedTarget);\n    }\n\n    dispose() {\n      if (this._popper) {\n        this._popper.destroy();\n      }\n\n      super.dispose();\n    }\n\n    update() {\n      this._inNavbar = this._detectNavbar();\n\n      if (this._popper) {\n        this._popper.update();\n      }\n    } // Private\n\n\n    _addEventListeners() {\n      EventHandler.on(this._element, EVENT_CLICK, event => {\n        event.preventDefault();\n        this.toggle();\n      });\n    }\n\n    _completeHide(relatedTarget) {\n      const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$4, relatedTarget);\n\n      if (hideEvent.defaultPrevented) {\n        return;\n      } // If this is a touch-enabled device we remove the extra\n      // empty mouseover listeners we added for iOS support\n\n\n      if ('ontouchstart' in document.documentElement) {\n        [].concat(...document.body.children).forEach(elem => EventHandler.off(elem, 'mouseover', noop));\n      }\n\n      if (this._popper) {\n        this._popper.destroy();\n      }\n\n      this._menu.classList.remove(CLASS_NAME_SHOW$7);\n\n      this._element.classList.remove(CLASS_NAME_SHOW$7);\n\n      this._element.setAttribute('aria-expanded', 'false');\n\n      Manipulator.removeDataAttribute(this._menu, 'popper');\n      EventHandler.trigger(this._element, EVENT_HIDDEN$4, relatedTarget);\n    }\n\n    _getConfig(config) {\n      config = { ...this.constructor.Default,\n        ...Manipulator.getDataAttributes(this._element),\n        ...config\n      };\n      typeCheckConfig(NAME$8, config, this.constructor.DefaultType);\n\n      if (typeof config.reference === 'object' && !isElement$1(config.reference) && typeof config.reference.getBoundingClientRect !== 'function') {\n        // Popper virtual elements require a getBoundingClientRect method\n        throw new TypeError(`${NAME$8.toUpperCase()}: Option \"reference\" provided type \"object\" without a required \"getBoundingClientRect\" method.`);\n      }\n\n      return config;\n    }\n\n    _getMenuElement() {\n      return SelectorEngine.next(this._element, SELECTOR_MENU)[0];\n    }\n\n    _getPlacement() {\n      const parentDropdown = this._element.parentNode;\n\n      if (parentDropdown.classList.contains(CLASS_NAME_DROPEND)) {\n        return PLACEMENT_RIGHT;\n      }\n\n      if (parentDropdown.classList.contains(CLASS_NAME_DROPSTART)) {\n        return PLACEMENT_LEFT;\n      } // We need to trim the value because custom properties can also include spaces\n\n\n      const isEnd = getComputedStyle(this._menu).getPropertyValue('--bs-position').trim() === 'end';\n\n      if (parentDropdown.classList.contains(CLASS_NAME_DROPUP)) {\n        return isEnd ? PLACEMENT_TOPEND : PLACEMENT_TOP;\n      }\n\n      return isEnd ? PLACEMENT_BOTTOMEND : PLACEMENT_BOTTOM;\n    }\n\n    _detectNavbar() {\n      return this._element.closest(`.${CLASS_NAME_NAVBAR}`) !== null;\n    }\n\n    _getOffset() {\n      const {\n        offset\n      } = this._config;\n\n      if (typeof offset === 'string') {\n        return offset.split(',').map(val => Number.parseInt(val, 10));\n      }\n\n      if (typeof offset === 'function') {\n        return popperData => offset(popperData, this._element);\n      }\n\n      return offset;\n    }\n\n    _getPopperConfig() {\n      const defaultBsPopperConfig = {\n        placement: this._getPlacement(),\n        modifiers: [{\n          name: 'preventOverflow',\n          options: {\n            boundary: this._config.boundary\n          }\n        }, {\n          name: 'offset',\n          options: {\n            offset: this._getOffset()\n          }\n        }]\n      }; // Disable Popper if we have a static display\n\n      if (this._config.display === 'static') {\n        defaultBsPopperConfig.modifiers = [{\n          name: 'applyStyles',\n          enabled: false\n        }];\n      }\n\n      return { ...defaultBsPopperConfig,\n        ...(typeof this._config.popperConfig === 'function' ? this._config.popperConfig(defaultBsPopperConfig) : this._config.popperConfig)\n      };\n    }\n\n    _selectMenuItem({\n      key,\n      target\n    }) {\n      const items = SelectorEngine.find(SELECTOR_VISIBLE_ITEMS, this._menu).filter(isVisible);\n\n      if (!items.length) {\n        return;\n      } // if target isn't included in items (e.g. when expanding the dropdown)\n      // allow cycling to get the last item in case key equals ARROW_UP_KEY\n\n\n      getNextActiveElement(items, target, key === ARROW_DOWN_KEY, !items.includes(target)).focus();\n    } // Static\n\n\n    static dropdownInterface(element, config) {\n      const data = Dropdown.getOrCreateInstance(element, config);\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config]();\n      }\n    }\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        Dropdown.dropdownInterface(this, config);\n      });\n    }\n\n    static clearMenus(event) {\n      if (event && (event.button === RIGHT_MOUSE_BUTTON || event.type === 'keyup' && event.key !== TAB_KEY)) {\n        return;\n      }\n\n      const toggles = SelectorEngine.find(SELECTOR_DATA_TOGGLE$3);\n\n      for (let i = 0, len = toggles.length; i < len; i++) {\n        const context = Dropdown.getInstance(toggles[i]);\n\n        if (!context || context._config.autoClose === false) {\n          continue;\n        }\n\n        if (!context._element.classList.contains(CLASS_NAME_SHOW$7)) {\n          continue;\n        }\n\n        const relatedTarget = {\n          relatedTarget: context._element\n        };\n\n        if (event) {\n          const composedPath = event.composedPath();\n          const isMenuTarget = composedPath.includes(context._menu);\n\n          if (composedPath.includes(context._element) || context._config.autoClose === 'inside' && !isMenuTarget || context._config.autoClose === 'outside' && isMenuTarget) {\n            continue;\n          } // Tab navigation through the dropdown menu or events from contained inputs shouldn't close the menu\n\n\n          if (context._menu.contains(event.target) && (event.type === 'keyup' && event.key === TAB_KEY || /input|select|option|textarea|form/i.test(event.target.tagName))) {\n            continue;\n          }\n\n          if (event.type === 'click') {\n            relatedTarget.clickEvent = event;\n          }\n        }\n\n        context._completeHide(relatedTarget);\n      }\n    }\n\n    static getParentFromElement(element) {\n      return getElementFromSelector(element) || element.parentNode;\n    }\n\n    static dataApiKeydownHandler(event) {\n      // If not input/textarea:\n      //  - And not a key in REGEXP_KEYDOWN => not a dropdown command\n      // If input/textarea:\n      //  - If space key => not a dropdown command\n      //  - If key is other than escape\n      //    - If key is not up or down => not a dropdown command\n      //    - If trigger inside the menu => not a dropdown command\n      if (/input|textarea/i.test(event.target.tagName) ? event.key === SPACE_KEY || event.key !== ESCAPE_KEY$2 && (event.key !== ARROW_DOWN_KEY && event.key !== ARROW_UP_KEY || event.target.closest(SELECTOR_MENU)) : !REGEXP_KEYDOWN.test(event.key)) {\n        return;\n      }\n\n      const isActive = this.classList.contains(CLASS_NAME_SHOW$7);\n\n      if (!isActive && event.key === ESCAPE_KEY$2) {\n        return;\n      }\n\n      event.preventDefault();\n      event.stopPropagation();\n\n      if (isDisabled(this)) {\n        return;\n      }\n\n      const getToggleButton = () => this.matches(SELECTOR_DATA_TOGGLE$3) ? this : SelectorEngine.prev(this, SELECTOR_DATA_TOGGLE$3)[0];\n\n      if (event.key === ESCAPE_KEY$2) {\n        getToggleButton().focus();\n        Dropdown.clearMenus();\n        return;\n      }\n\n      if (event.key === ARROW_UP_KEY || event.key === ARROW_DOWN_KEY) {\n        if (!isActive) {\n          getToggleButton().click();\n        }\n\n        Dropdown.getInstance(getToggleButton())._selectMenuItem(event);\n\n        return;\n      }\n\n      if (!isActive || event.key === SPACE_KEY) {\n        Dropdown.clearMenus();\n      }\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_DATA_TOGGLE$3, Dropdown.dataApiKeydownHandler);\n  EventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown.dataApiKeydownHandler);\n  EventHandler.on(document, EVENT_CLICK_DATA_API$3, Dropdown.clearMenus);\n  EventHandler.on(document, EVENT_KEYUP_DATA_API, Dropdown.clearMenus);\n  EventHandler.on(document, EVENT_CLICK_DATA_API$3, SELECTOR_DATA_TOGGLE$3, function (event) {\n    event.preventDefault();\n    Dropdown.dropdownInterface(this);\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Dropdown to jQuery only if jQuery is present\n   */\n\n  defineJQueryPlugin(Dropdown);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): util/scrollBar.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  const SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top';\n  const SELECTOR_STICKY_CONTENT = '.sticky-top';\n\n  class ScrollBarHelper {\n    constructor() {\n      this._element = document.body;\n    }\n\n    getWidth() {\n      // https://developer.mozilla.org/en-US/docs/Web/API/Window/innerWidth#usage_notes\n      const documentWidth = document.documentElement.clientWidth;\n      return Math.abs(window.innerWidth - documentWidth);\n    }\n\n    hide() {\n      const width = this.getWidth();\n\n      this._disableOverFlow(); // give padding to element to balance the hidden scrollbar width\n\n\n      this._setElementAttributes(this._element, 'paddingRight', calculatedValue => calculatedValue + width); // trick: We adjust positive paddingRight and negative marginRight to sticky-top elements to keep showing fullwidth\n\n\n      this._setElementAttributes(SELECTOR_FIXED_CONTENT, 'paddingRight', calculatedValue => calculatedValue + width);\n\n      this._setElementAttributes(SELECTOR_STICKY_CONTENT, 'marginRight', calculatedValue => calculatedValue - width);\n    }\n\n    _disableOverFlow() {\n      this._saveInitialAttribute(this._element, 'overflow');\n\n      this._element.style.overflow = 'hidden';\n    }\n\n    _setElementAttributes(selector, styleProp, callback) {\n      const scrollbarWidth = this.getWidth();\n\n      const manipulationCallBack = element => {\n        if (element !== this._element && window.innerWidth > element.clientWidth + scrollbarWidth) {\n          return;\n        }\n\n        this._saveInitialAttribute(element, styleProp);\n\n        const calculatedValue = window.getComputedStyle(element)[styleProp];\n        element.style[styleProp] = `${callback(Number.parseFloat(calculatedValue))}px`;\n      };\n\n      this._applyManipulationCallback(selector, manipulationCallBack);\n    }\n\n    reset() {\n      this._resetElementAttributes(this._element, 'overflow');\n\n      this._resetElementAttributes(this._element, 'paddingRight');\n\n      this._resetElementAttributes(SELECTOR_FIXED_CONTENT, 'paddingRight');\n\n      this._resetElementAttributes(SELECTOR_STICKY_CONTENT, 'marginRight');\n    }\n\n    _saveInitialAttribute(element, styleProp) {\n      const actualValue = element.style[styleProp];\n\n      if (actualValue) {\n        Manipulator.setDataAttribute(element, styleProp, actualValue);\n      }\n    }\n\n    _resetElementAttributes(selector, styleProp) {\n      const manipulationCallBack = element => {\n        const value = Manipulator.getDataAttribute(element, styleProp);\n\n        if (typeof value === 'undefined') {\n          element.style.removeProperty(styleProp);\n        } else {\n          Manipulator.removeDataAttribute(element, styleProp);\n          element.style[styleProp] = value;\n        }\n      };\n\n      this._applyManipulationCallback(selector, manipulationCallBack);\n    }\n\n    _applyManipulationCallback(selector, callBack) {\n      if (isElement$1(selector)) {\n        callBack(selector);\n      } else {\n        SelectorEngine.find(selector, this._element).forEach(callBack);\n      }\n    }\n\n    isOverflowing() {\n      return this.getWidth() > 0;\n    }\n\n  }\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): util/backdrop.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  const Default$6 = {\n    isVisible: true,\n    // if false, we use the backdrop helper without adding any element to the dom\n    isAnimated: false,\n    rootElement: 'body',\n    // give the choice to place backdrop under different elements\n    clickCallback: null\n  };\n  const DefaultType$6 = {\n    isVisible: 'boolean',\n    isAnimated: 'boolean',\n    rootElement: '(element|string)',\n    clickCallback: '(function|null)'\n  };\n  const NAME$7 = 'backdrop';\n  const CLASS_NAME_BACKDROP = 'modal-backdrop';\n  const CLASS_NAME_FADE$5 = 'fade';\n  const CLASS_NAME_SHOW$6 = 'show';\n  const EVENT_MOUSEDOWN = `mousedown.bs.${NAME$7}`;\n\n  class Backdrop {\n    constructor(config) {\n      this._config = this._getConfig(config);\n      this._isAppended = false;\n      this._element = null;\n    }\n\n    show(callback) {\n      if (!this._config.isVisible) {\n        execute(callback);\n        return;\n      }\n\n      this._append();\n\n      if (this._config.isAnimated) {\n        reflow(this._getElement());\n      }\n\n      this._getElement().classList.add(CLASS_NAME_SHOW$6);\n\n      this._emulateAnimation(() => {\n        execute(callback);\n      });\n    }\n\n    hide(callback) {\n      if (!this._config.isVisible) {\n        execute(callback);\n        return;\n      }\n\n      this._getElement().classList.remove(CLASS_NAME_SHOW$6);\n\n      this._emulateAnimation(() => {\n        this.dispose();\n        execute(callback);\n      });\n    } // Private\n\n\n    _getElement() {\n      if (!this._element) {\n        const backdrop = document.createElement('div');\n        backdrop.className = CLASS_NAME_BACKDROP;\n\n        if (this._config.isAnimated) {\n          backdrop.classList.add(CLASS_NAME_FADE$5);\n        }\n\n        this._element = backdrop;\n      }\n\n      return this._element;\n    }\n\n    _getConfig(config) {\n      config = { ...Default$6,\n        ...(typeof config === 'object' ? config : {})\n      }; // use getElement() with the default \"body\" to get a fresh Element on each instantiation\n\n      config.rootElement = getElement(config.rootElement);\n      typeCheckConfig(NAME$7, config, DefaultType$6);\n      return config;\n    }\n\n    _append() {\n      if (this._isAppended) {\n        return;\n      }\n\n      this._config.rootElement.appendChild(this._getElement());\n\n      EventHandler.on(this._getElement(), EVENT_MOUSEDOWN, () => {\n        execute(this._config.clickCallback);\n      });\n      this._isAppended = true;\n    }\n\n    dispose() {\n      if (!this._isAppended) {\n        return;\n      }\n\n      EventHandler.off(this._element, EVENT_MOUSEDOWN);\n\n      this._element.remove();\n\n      this._isAppended = false;\n    }\n\n    _emulateAnimation(callback) {\n      executeAfterTransition(callback, this._getElement(), this._config.isAnimated);\n    }\n\n  }\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): modal.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$6 = 'modal';\n  const DATA_KEY$6 = 'bs.modal';\n  const EVENT_KEY$6 = `.${DATA_KEY$6}`;\n  const DATA_API_KEY$3 = '.data-api';\n  const ESCAPE_KEY$1 = 'Escape';\n  const Default$5 = {\n    backdrop: true,\n    keyboard: true,\n    focus: true\n  };\n  const DefaultType$5 = {\n    backdrop: '(boolean|string)',\n    keyboard: 'boolean',\n    focus: 'boolean'\n  };\n  const EVENT_HIDE$3 = `hide${EVENT_KEY$6}`;\n  const EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY$6}`;\n  const EVENT_HIDDEN$3 = `hidden${EVENT_KEY$6}`;\n  const EVENT_SHOW$3 = `show${EVENT_KEY$6}`;\n  const EVENT_SHOWN$3 = `shown${EVENT_KEY$6}`;\n  const EVENT_FOCUSIN$2 = `focusin${EVENT_KEY$6}`;\n  const EVENT_RESIZE = `resize${EVENT_KEY$6}`;\n  const EVENT_CLICK_DISMISS$2 = `click.dismiss${EVENT_KEY$6}`;\n  const EVENT_KEYDOWN_DISMISS$1 = `keydown.dismiss${EVENT_KEY$6}`;\n  const EVENT_MOUSEUP_DISMISS = `mouseup.dismiss${EVENT_KEY$6}`;\n  const EVENT_MOUSEDOWN_DISMISS = `mousedown.dismiss${EVENT_KEY$6}`;\n  const EVENT_CLICK_DATA_API$2 = `click${EVENT_KEY$6}${DATA_API_KEY$3}`;\n  const CLASS_NAME_OPEN = 'modal-open';\n  const CLASS_NAME_FADE$4 = 'fade';\n  const CLASS_NAME_SHOW$5 = 'show';\n  const CLASS_NAME_STATIC = 'modal-static';\n  const SELECTOR_DIALOG = '.modal-dialog';\n  const SELECTOR_MODAL_BODY = '.modal-body';\n  const SELECTOR_DATA_TOGGLE$2 = '[data-bs-toggle=\"modal\"]';\n  const SELECTOR_DATA_DISMISS$2 = '[data-bs-dismiss=\"modal\"]';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Modal extends BaseComponent {\n    constructor(element, config) {\n      super(element);\n      this._config = this._getConfig(config);\n      this._dialog = SelectorEngine.findOne(SELECTOR_DIALOG, this._element);\n      this._backdrop = this._initializeBackDrop();\n      this._isShown = false;\n      this._ignoreBackdropClick = false;\n      this._isTransitioning = false;\n      this._scrollBar = new ScrollBarHelper();\n    } // Getters\n\n\n    static get Default() {\n      return Default$5;\n    }\n\n    static get NAME() {\n      return NAME$6;\n    } // Public\n\n\n    toggle(relatedTarget) {\n      return this._isShown ? this.hide() : this.show(relatedTarget);\n    }\n\n    show(relatedTarget) {\n      if (this._isShown || this._isTransitioning) {\n        return;\n      }\n\n      const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$3, {\n        relatedTarget\n      });\n\n      if (showEvent.defaultPrevented) {\n        return;\n      }\n\n      this._isShown = true;\n\n      if (this._isAnimated()) {\n        this._isTransitioning = true;\n      }\n\n      this._scrollBar.hide();\n\n      document.body.classList.add(CLASS_NAME_OPEN);\n\n      this._adjustDialog();\n\n      this._setEscapeEvent();\n\n      this._setResizeEvent();\n\n      EventHandler.on(this._element, EVENT_CLICK_DISMISS$2, SELECTOR_DATA_DISMISS$2, event => this.hide(event));\n      EventHandler.on(this._dialog, EVENT_MOUSEDOWN_DISMISS, () => {\n        EventHandler.one(this._element, EVENT_MOUSEUP_DISMISS, event => {\n          if (event.target === this._element) {\n            this._ignoreBackdropClick = true;\n          }\n        });\n      });\n\n      this._showBackdrop(() => this._showElement(relatedTarget));\n    }\n\n    hide(event) {\n      if (event && ['A', 'AREA'].includes(event.target.tagName)) {\n        event.preventDefault();\n      }\n\n      if (!this._isShown || this._isTransitioning) {\n        return;\n      }\n\n      const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$3);\n\n      if (hideEvent.defaultPrevented) {\n        return;\n      }\n\n      this._isShown = false;\n\n      const isAnimated = this._isAnimated();\n\n      if (isAnimated) {\n        this._isTransitioning = true;\n      }\n\n      this._setEscapeEvent();\n\n      this._setResizeEvent();\n\n      EventHandler.off(document, EVENT_FOCUSIN$2);\n\n      this._element.classList.remove(CLASS_NAME_SHOW$5);\n\n      EventHandler.off(this._element, EVENT_CLICK_DISMISS$2);\n      EventHandler.off(this._dialog, EVENT_MOUSEDOWN_DISMISS);\n\n      this._queueCallback(() => this._hideModal(), this._element, isAnimated);\n    }\n\n    dispose() {\n      [window, this._dialog].forEach(htmlElement => EventHandler.off(htmlElement, EVENT_KEY$6));\n\n      this._backdrop.dispose();\n\n      super.dispose();\n      /**\n       * `document` has 2 events `EVENT_FOCUSIN` and `EVENT_CLICK_DATA_API`\n       * Do not move `document` in `htmlElements` array\n       * It will remove `EVENT_CLICK_DATA_API` event that should remain\n       */\n\n      EventHandler.off(document, EVENT_FOCUSIN$2);\n    }\n\n    handleUpdate() {\n      this._adjustDialog();\n    } // Private\n\n\n    _initializeBackDrop() {\n      return new Backdrop({\n        isVisible: Boolean(this._config.backdrop),\n        // 'static' option will be translated to true, and booleans will keep their value\n        isAnimated: this._isAnimated()\n      });\n    }\n\n    _getConfig(config) {\n      config = { ...Default$5,\n        ...Manipulator.getDataAttributes(this._element),\n        ...(typeof config === 'object' ? config : {})\n      };\n      typeCheckConfig(NAME$6, config, DefaultType$5);\n      return config;\n    }\n\n    _showElement(relatedTarget) {\n      const isAnimated = this._isAnimated();\n\n      const modalBody = SelectorEngine.findOne(SELECTOR_MODAL_BODY, this._dialog);\n\n      if (!this._element.parentNode || this._element.parentNode.nodeType !== Node.ELEMENT_NODE) {\n        // Don't move modal's DOM position\n        document.body.appendChild(this._element);\n      }\n\n      this._element.style.display = 'block';\n\n      this._element.removeAttribute('aria-hidden');\n\n      this._element.setAttribute('aria-modal', true);\n\n      this._element.setAttribute('role', 'dialog');\n\n      this._element.scrollTop = 0;\n\n      if (modalBody) {\n        modalBody.scrollTop = 0;\n      }\n\n      if (isAnimated) {\n        reflow(this._element);\n      }\n\n      this._element.classList.add(CLASS_NAME_SHOW$5);\n\n      if (this._config.focus) {\n        this._enforceFocus();\n      }\n\n      const transitionComplete = () => {\n        if (this._config.focus) {\n          this._element.focus();\n        }\n\n        this._isTransitioning = false;\n        EventHandler.trigger(this._element, EVENT_SHOWN$3, {\n          relatedTarget\n        });\n      };\n\n      this._queueCallback(transitionComplete, this._dialog, isAnimated);\n    }\n\n    _enforceFocus() {\n      EventHandler.off(document, EVENT_FOCUSIN$2); // guard against infinite focus loop\n\n      EventHandler.on(document, EVENT_FOCUSIN$2, event => {\n        if (document !== event.target && this._element !== event.target && !this._element.contains(event.target)) {\n          this._element.focus();\n        }\n      });\n    }\n\n    _setEscapeEvent() {\n      if (this._isShown) {\n        EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS$1, event => {\n          if (this._config.keyboard && event.key === ESCAPE_KEY$1) {\n            event.preventDefault();\n            this.hide();\n          } else if (!this._config.keyboard && event.key === ESCAPE_KEY$1) {\n            this._triggerBackdropTransition();\n          }\n        });\n      } else {\n        EventHandler.off(this._element, EVENT_KEYDOWN_DISMISS$1);\n      }\n    }\n\n    _setResizeEvent() {\n      if (this._isShown) {\n        EventHandler.on(window, EVENT_RESIZE, () => this._adjustDialog());\n      } else {\n        EventHandler.off(window, EVENT_RESIZE);\n      }\n    }\n\n    _hideModal() {\n      this._element.style.display = 'none';\n\n      this._element.setAttribute('aria-hidden', true);\n\n      this._element.removeAttribute('aria-modal');\n\n      this._element.removeAttribute('role');\n\n      this._isTransitioning = false;\n\n      this._backdrop.hide(() => {\n        document.body.classList.remove(CLASS_NAME_OPEN);\n\n        this._resetAdjustments();\n\n        this._scrollBar.reset();\n\n        EventHandler.trigger(this._element, EVENT_HIDDEN$3);\n      });\n    }\n\n    _showBackdrop(callback) {\n      EventHandler.on(this._element, EVENT_CLICK_DISMISS$2, event => {\n        if (this._ignoreBackdropClick) {\n          this._ignoreBackdropClick = false;\n          return;\n        }\n\n        if (event.target !== event.currentTarget) {\n          return;\n        }\n\n        if (this._config.backdrop === true) {\n          this.hide();\n        } else if (this._config.backdrop === 'static') {\n          this._triggerBackdropTransition();\n        }\n      });\n\n      this._backdrop.show(callback);\n    }\n\n    _isAnimated() {\n      return this._element.classList.contains(CLASS_NAME_FADE$4);\n    }\n\n    _triggerBackdropTransition() {\n      const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED);\n\n      if (hideEvent.defaultPrevented) {\n        return;\n      }\n\n      const {\n        classList,\n        scrollHeight,\n        style\n      } = this._element;\n      const isModalOverflowing = scrollHeight > document.documentElement.clientHeight; // return if the following background transition hasn't yet completed\n\n      if (!isModalOverflowing && style.overflowY === 'hidden' || classList.contains(CLASS_NAME_STATIC)) {\n        return;\n      }\n\n      if (!isModalOverflowing) {\n        style.overflowY = 'hidden';\n      }\n\n      classList.add(CLASS_NAME_STATIC);\n\n      this._queueCallback(() => {\n        classList.remove(CLASS_NAME_STATIC);\n\n        if (!isModalOverflowing) {\n          this._queueCallback(() => {\n            style.overflowY = '';\n          }, this._dialog);\n        }\n      }, this._dialog);\n\n      this._element.focus();\n    } // ----------------------------------------------------------------------\n    // the following methods are used to handle overflowing modals\n    // ----------------------------------------------------------------------\n\n\n    _adjustDialog() {\n      const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;\n\n      const scrollbarWidth = this._scrollBar.getWidth();\n\n      const isBodyOverflowing = scrollbarWidth > 0;\n\n      if (!isBodyOverflowing && isModalOverflowing && !isRTL() || isBodyOverflowing && !isModalOverflowing && isRTL()) {\n        this._element.style.paddingLeft = `${scrollbarWidth}px`;\n      }\n\n      if (isBodyOverflowing && !isModalOverflowing && !isRTL() || !isBodyOverflowing && isModalOverflowing && isRTL()) {\n        this._element.style.paddingRight = `${scrollbarWidth}px`;\n      }\n    }\n\n    _resetAdjustments() {\n      this._element.style.paddingLeft = '';\n      this._element.style.paddingRight = '';\n    } // Static\n\n\n    static jQueryInterface(config, relatedTarget) {\n      return this.each(function () {\n        const data = Modal.getOrCreateInstance(this, config);\n\n        if (typeof config !== 'string') {\n          return;\n        }\n\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config](relatedTarget);\n      });\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(document, EVENT_CLICK_DATA_API$2, SELECTOR_DATA_TOGGLE$2, function (event) {\n    const target = getElementFromSelector(this);\n\n    if (['A', 'AREA'].includes(this.tagName)) {\n      event.preventDefault();\n    }\n\n    EventHandler.one(target, EVENT_SHOW$3, showEvent => {\n      if (showEvent.defaultPrevented) {\n        // only register focus restorer if modal will actually get shown\n        return;\n      }\n\n      EventHandler.one(target, EVENT_HIDDEN$3, () => {\n        if (isVisible(this)) {\n          this.focus();\n        }\n      });\n    });\n    const data = Modal.getOrCreateInstance(target);\n    data.toggle(this);\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Modal to jQuery only if jQuery is present\n   */\n\n  defineJQueryPlugin(Modal);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): offcanvas.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$5 = 'offcanvas';\n  const DATA_KEY$5 = 'bs.offcanvas';\n  const EVENT_KEY$5 = `.${DATA_KEY$5}`;\n  const DATA_API_KEY$2 = '.data-api';\n  const EVENT_LOAD_DATA_API$1 = `load${EVENT_KEY$5}${DATA_API_KEY$2}`;\n  const ESCAPE_KEY = 'Escape';\n  const Default$4 = {\n    backdrop: true,\n    keyboard: true,\n    scroll: false\n  };\n  const DefaultType$4 = {\n    backdrop: 'boolean',\n    keyboard: 'boolean',\n    scroll: 'boolean'\n  };\n  const CLASS_NAME_SHOW$4 = 'show';\n  const OPEN_SELECTOR = '.offcanvas.show';\n  const EVENT_SHOW$2 = `show${EVENT_KEY$5}`;\n  const EVENT_SHOWN$2 = `shown${EVENT_KEY$5}`;\n  const EVENT_HIDE$2 = `hide${EVENT_KEY$5}`;\n  const EVENT_HIDDEN$2 = `hidden${EVENT_KEY$5}`;\n  const EVENT_FOCUSIN$1 = `focusin${EVENT_KEY$5}`;\n  const EVENT_CLICK_DATA_API$1 = `click${EVENT_KEY$5}${DATA_API_KEY$2}`;\n  const EVENT_CLICK_DISMISS$1 = `click.dismiss${EVENT_KEY$5}`;\n  const EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY$5}`;\n  const SELECTOR_DATA_DISMISS$1 = '[data-bs-dismiss=\"offcanvas\"]';\n  const SELECTOR_DATA_TOGGLE$1 = '[data-bs-toggle=\"offcanvas\"]';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Offcanvas extends BaseComponent {\n    constructor(element, config) {\n      super(element);\n      this._config = this._getConfig(config);\n      this._isShown = false;\n      this._backdrop = this._initializeBackDrop();\n\n      this._addEventListeners();\n    } // Getters\n\n\n    static get NAME() {\n      return NAME$5;\n    }\n\n    static get Default() {\n      return Default$4;\n    } // Public\n\n\n    toggle(relatedTarget) {\n      return this._isShown ? this.hide() : this.show(relatedTarget);\n    }\n\n    show(relatedTarget) {\n      if (this._isShown) {\n        return;\n      }\n\n      const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$2, {\n        relatedTarget\n      });\n\n      if (showEvent.defaultPrevented) {\n        return;\n      }\n\n      this._isShown = true;\n      this._element.style.visibility = 'visible';\n\n      this._backdrop.show();\n\n      if (!this._config.scroll) {\n        new ScrollBarHelper().hide();\n\n        this._enforceFocusOnElement(this._element);\n      }\n\n      this._element.removeAttribute('aria-hidden');\n\n      this._element.setAttribute('aria-modal', true);\n\n      this._element.setAttribute('role', 'dialog');\n\n      this._element.classList.add(CLASS_NAME_SHOW$4);\n\n      const completeCallBack = () => {\n        EventHandler.trigger(this._element, EVENT_SHOWN$2, {\n          relatedTarget\n        });\n      };\n\n      this._queueCallback(completeCallBack, this._element, true);\n    }\n\n    hide() {\n      if (!this._isShown) {\n        return;\n      }\n\n      const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$2);\n\n      if (hideEvent.defaultPrevented) {\n        return;\n      }\n\n      EventHandler.off(document, EVENT_FOCUSIN$1);\n\n      this._element.blur();\n\n      this._isShown = false;\n\n      this._element.classList.remove(CLASS_NAME_SHOW$4);\n\n      this._backdrop.hide();\n\n      const completeCallback = () => {\n        this._element.setAttribute('aria-hidden', true);\n\n        this._element.removeAttribute('aria-modal');\n\n        this._element.removeAttribute('role');\n\n        this._element.style.visibility = 'hidden';\n\n        if (!this._config.scroll) {\n          new ScrollBarHelper().reset();\n        }\n\n        EventHandler.trigger(this._element, EVENT_HIDDEN$2);\n      };\n\n      this._queueCallback(completeCallback, this._element, true);\n    }\n\n    dispose() {\n      this._backdrop.dispose();\n\n      super.dispose();\n      EventHandler.off(document, EVENT_FOCUSIN$1);\n    } // Private\n\n\n    _getConfig(config) {\n      config = { ...Default$4,\n        ...Manipulator.getDataAttributes(this._element),\n        ...(typeof config === 'object' ? config : {})\n      };\n      typeCheckConfig(NAME$5, config, DefaultType$4);\n      return config;\n    }\n\n    _initializeBackDrop() {\n      return new Backdrop({\n        isVisible: this._config.backdrop,\n        isAnimated: true,\n        rootElement: this._element.parentNode,\n        clickCallback: () => this.hide()\n      });\n    }\n\n    _enforceFocusOnElement(element) {\n      EventHandler.off(document, EVENT_FOCUSIN$1); // guard against infinite focus loop\n\n      EventHandler.on(document, EVENT_FOCUSIN$1, event => {\n        if (document !== event.target && element !== event.target && !element.contains(event.target)) {\n          element.focus();\n        }\n      });\n      element.focus();\n    }\n\n    _addEventListeners() {\n      EventHandler.on(this._element, EVENT_CLICK_DISMISS$1, SELECTOR_DATA_DISMISS$1, () => this.hide());\n      EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS, event => {\n        if (this._config.keyboard && event.key === ESCAPE_KEY) {\n          this.hide();\n        }\n      });\n    } // Static\n\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = Offcanvas.getOrCreateInstance(this, config);\n\n        if (typeof config !== 'string') {\n          return;\n        }\n\n        if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config](this);\n      });\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(document, EVENT_CLICK_DATA_API$1, SELECTOR_DATA_TOGGLE$1, function (event) {\n    const target = getElementFromSelector(this);\n\n    if (['A', 'AREA'].includes(this.tagName)) {\n      event.preventDefault();\n    }\n\n    if (isDisabled(this)) {\n      return;\n    }\n\n    EventHandler.one(target, EVENT_HIDDEN$2, () => {\n      // focus on trigger when it is closed\n      if (isVisible(this)) {\n        this.focus();\n      }\n    }); // avoid conflict when clicking a toggler of an offcanvas, while another is open\n\n    const allReadyOpen = SelectorEngine.findOne(OPEN_SELECTOR);\n\n    if (allReadyOpen && allReadyOpen !== target) {\n      Offcanvas.getInstance(allReadyOpen).hide();\n    }\n\n    const data = Offcanvas.getOrCreateInstance(target);\n    data.toggle(this);\n  });\n  EventHandler.on(window, EVENT_LOAD_DATA_API$1, () => SelectorEngine.find(OPEN_SELECTOR).forEach(el => Offcanvas.getOrCreateInstance(el).show()));\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   */\n\n  defineJQueryPlugin(Offcanvas);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): util/sanitizer.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  const uriAttrs = new Set(['background', 'cite', 'href', 'itemtype', 'longdesc', 'poster', 'src', 'xlink:href']);\n  const ARIA_ATTRIBUTE_PATTERN = /^aria-[\\w-]*$/i;\n  /**\n   * A pattern that recognizes a commonly useful subset of URLs that are safe.\n   *\n   * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts\n   */\n\n  const SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file):|[^#&/:?]*(?:[#/?]|$))/i;\n  /**\n   * A pattern that matches safe data URLs. Only matches image, video and audio types.\n   *\n   * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts\n   */\n\n  const DATA_URL_PATTERN = /^data:(?:image\\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\\/(?:mpeg|mp4|ogg|webm)|audio\\/(?:mp3|oga|ogg|opus));base64,[\\d+/a-z]+=*$/i;\n\n  const allowedAttribute = (attr, allowedAttributeList) => {\n    const attrName = attr.nodeName.toLowerCase();\n\n    if (allowedAttributeList.includes(attrName)) {\n      if (uriAttrs.has(attrName)) {\n        return Boolean(SAFE_URL_PATTERN.test(attr.nodeValue) || DATA_URL_PATTERN.test(attr.nodeValue));\n      }\n\n      return true;\n    }\n\n    const regExp = allowedAttributeList.filter(attrRegex => attrRegex instanceof RegExp); // Check if a regular expression validates the attribute.\n\n    for (let i = 0, len = regExp.length; i < len; i++) {\n      if (regExp[i].test(attrName)) {\n        return true;\n      }\n    }\n\n    return false;\n  };\n\n  const DefaultAllowlist = {\n    // Global attributes allowed on any supplied element below.\n    '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],\n    a: ['target', 'href', 'title', 'rel'],\n    area: [],\n    b: [],\n    br: [],\n    col: [],\n    code: [],\n    div: [],\n    em: [],\n    hr: [],\n    h1: [],\n    h2: [],\n    h3: [],\n    h4: [],\n    h5: [],\n    h6: [],\n    i: [],\n    img: ['src', 'srcset', 'alt', 'title', 'width', 'height'],\n    li: [],\n    ol: [],\n    p: [],\n    pre: [],\n    s: [],\n    small: [],\n    span: [],\n    sub: [],\n    sup: [],\n    strong: [],\n    u: [],\n    ul: []\n  };\n  function sanitizeHtml(unsafeHtml, allowList, sanitizeFn) {\n    if (!unsafeHtml.length) {\n      return unsafeHtml;\n    }\n\n    if (sanitizeFn && typeof sanitizeFn === 'function') {\n      return sanitizeFn(unsafeHtml);\n    }\n\n    const domParser = new window.DOMParser();\n    const createdDocument = domParser.parseFromString(unsafeHtml, 'text/html');\n    const allowlistKeys = Object.keys(allowList);\n    const elements = [].concat(...createdDocument.body.querySelectorAll('*'));\n\n    for (let i = 0, len = elements.length; i < len; i++) {\n      const el = elements[i];\n      const elName = el.nodeName.toLowerCase();\n\n      if (!allowlistKeys.includes(elName)) {\n        el.remove();\n        continue;\n      }\n\n      const attributeList = [].concat(...el.attributes);\n      const allowedAttributes = [].concat(allowList['*'] || [], allowList[elName] || []);\n      attributeList.forEach(attr => {\n        if (!allowedAttribute(attr, allowedAttributes)) {\n          el.removeAttribute(attr.nodeName);\n        }\n      });\n    }\n\n    return createdDocument.body.innerHTML;\n  }\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): tooltip.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$4 = 'tooltip';\n  const DATA_KEY$4 = 'bs.tooltip';\n  const EVENT_KEY$4 = `.${DATA_KEY$4}`;\n  const CLASS_PREFIX$1 = 'bs-tooltip';\n  const BSCLS_PREFIX_REGEX$1 = new RegExp(`(^|\\\\s)${CLASS_PREFIX$1}\\\\S+`, 'g');\n  const DISALLOWED_ATTRIBUTES = new Set(['sanitize', 'allowList', 'sanitizeFn']);\n  const DefaultType$3 = {\n    animation: 'boolean',\n    template: 'string',\n    title: '(string|element|function)',\n    trigger: 'string',\n    delay: '(number|object)',\n    html: 'boolean',\n    selector: '(string|boolean)',\n    placement: '(string|function)',\n    offset: '(array|string|function)',\n    container: '(string|element|boolean)',\n    fallbackPlacements: 'array',\n    boundary: '(string|element)',\n    customClass: '(string|function)',\n    sanitize: 'boolean',\n    sanitizeFn: '(null|function)',\n    allowList: 'object',\n    popperConfig: '(null|object|function)'\n  };\n  const AttachmentMap = {\n    AUTO: 'auto',\n    TOP: 'top',\n    RIGHT: isRTL() ? 'left' : 'right',\n    BOTTOM: 'bottom',\n    LEFT: isRTL() ? 'right' : 'left'\n  };\n  const Default$3 = {\n    animation: true,\n    template: '<div class=\"tooltip\" role=\"tooltip\">' + '<div class=\"tooltip-arrow\"></div>' + '<div class=\"tooltip-inner\"></div>' + '</div>',\n    trigger: 'hover focus',\n    title: '',\n    delay: 0,\n    html: false,\n    selector: false,\n    placement: 'top',\n    offset: [0, 0],\n    container: false,\n    fallbackPlacements: ['top', 'right', 'bottom', 'left'],\n    boundary: 'clippingParents',\n    customClass: '',\n    sanitize: true,\n    sanitizeFn: null,\n    allowList: DefaultAllowlist,\n    popperConfig: null\n  };\n  const Event$2 = {\n    HIDE: `hide${EVENT_KEY$4}`,\n    HIDDEN: `hidden${EVENT_KEY$4}`,\n    SHOW: `show${EVENT_KEY$4}`,\n    SHOWN: `shown${EVENT_KEY$4}`,\n    INSERTED: `inserted${EVENT_KEY$4}`,\n    CLICK: `click${EVENT_KEY$4}`,\n    FOCUSIN: `focusin${EVENT_KEY$4}`,\n    FOCUSOUT: `focusout${EVENT_KEY$4}`,\n    MOUSEENTER: `mouseenter${EVENT_KEY$4}`,\n    MOUSELEAVE: `mouseleave${EVENT_KEY$4}`\n  };\n  const CLASS_NAME_FADE$3 = 'fade';\n  const CLASS_NAME_MODAL = 'modal';\n  const CLASS_NAME_SHOW$3 = 'show';\n  const HOVER_STATE_SHOW = 'show';\n  const HOVER_STATE_OUT = 'out';\n  const SELECTOR_TOOLTIP_INNER = '.tooltip-inner';\n  const TRIGGER_HOVER = 'hover';\n  const TRIGGER_FOCUS = 'focus';\n  const TRIGGER_CLICK = 'click';\n  const TRIGGER_MANUAL = 'manual';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Tooltip extends BaseComponent {\n    constructor(element, config) {\n      if (typeof Popper === 'undefined') {\n        throw new TypeError('Bootstrap\\'s tooltips require Popper (https://popper.js.org)');\n      }\n\n      super(element); // private\n\n      this._isEnabled = true;\n      this._timeout = 0;\n      this._hoverState = '';\n      this._activeTrigger = {};\n      this._popper = null; // Protected\n\n      this._config = this._getConfig(config);\n      this.tip = null;\n\n      this._setListeners();\n    } // Getters\n\n\n    static get Default() {\n      return Default$3;\n    }\n\n    static get NAME() {\n      return NAME$4;\n    }\n\n    static get Event() {\n      return Event$2;\n    }\n\n    static get DefaultType() {\n      return DefaultType$3;\n    } // Public\n\n\n    enable() {\n      this._isEnabled = true;\n    }\n\n    disable() {\n      this._isEnabled = false;\n    }\n\n    toggleEnabled() {\n      this._isEnabled = !this._isEnabled;\n    }\n\n    toggle(event) {\n      if (!this._isEnabled) {\n        return;\n      }\n\n      if (event) {\n        const context = this._initializeOnDelegatedTarget(event);\n\n        context._activeTrigger.click = !context._activeTrigger.click;\n\n        if (context._isWithActiveTrigger()) {\n          context._enter(null, context);\n        } else {\n          context._leave(null, context);\n        }\n      } else {\n        if (this.getTipElement().classList.contains(CLASS_NAME_SHOW$3)) {\n          this._leave(null, this);\n\n          return;\n        }\n\n        this._enter(null, this);\n      }\n    }\n\n    dispose() {\n      clearTimeout(this._timeout);\n      EventHandler.off(this._element.closest(`.${CLASS_NAME_MODAL}`), 'hide.bs.modal', this._hideModalHandler);\n\n      if (this.tip) {\n        this.tip.remove();\n      }\n\n      if (this._popper) {\n        this._popper.destroy();\n      }\n\n      super.dispose();\n    }\n\n    show() {\n      if (this._element.style.display === 'none') {\n        throw new Error('Please use show on visible elements');\n      }\n\n      if (!(this.isWithContent() && this._isEnabled)) {\n        return;\n      }\n\n      const showEvent = EventHandler.trigger(this._element, this.constructor.Event.SHOW);\n      const shadowRoot = findShadowRoot(this._element);\n      const isInTheDom = shadowRoot === null ? this._element.ownerDocument.documentElement.contains(this._element) : shadowRoot.contains(this._element);\n\n      if (showEvent.defaultPrevented || !isInTheDom) {\n        return;\n      }\n\n      const tip = this.getTipElement();\n      const tipId = getUID(this.constructor.NAME);\n      tip.setAttribute('id', tipId);\n\n      this._element.setAttribute('aria-describedby', tipId);\n\n      this.setContent();\n\n      if (this._config.animation) {\n        tip.classList.add(CLASS_NAME_FADE$3);\n      }\n\n      const placement = typeof this._config.placement === 'function' ? this._config.placement.call(this, tip, this._element) : this._config.placement;\n\n      const attachment = this._getAttachment(placement);\n\n      this._addAttachmentClass(attachment);\n\n      const {\n        container\n      } = this._config;\n      Data.set(tip, this.constructor.DATA_KEY, this);\n\n      if (!this._element.ownerDocument.documentElement.contains(this.tip)) {\n        container.appendChild(tip);\n        EventHandler.trigger(this._element, this.constructor.Event.INSERTED);\n      }\n\n      if (this._popper) {\n        this._popper.update();\n      } else {\n        this._popper = createPopper(this._element, tip, this._getPopperConfig(attachment));\n      }\n\n      tip.classList.add(CLASS_NAME_SHOW$3);\n      const customClass = typeof this._config.customClass === 'function' ? this._config.customClass() : this._config.customClass;\n\n      if (customClass) {\n        tip.classList.add(...customClass.split(' '));\n      } // If this is a touch-enabled device we add extra\n      // empty mouseover listeners to the body's immediate children;\n      // only needed because of broken event delegation on iOS\n      // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n\n\n      if ('ontouchstart' in document.documentElement) {\n        [].concat(...document.body.children).forEach(element => {\n          EventHandler.on(element, 'mouseover', noop);\n        });\n      }\n\n      const complete = () => {\n        const prevHoverState = this._hoverState;\n        this._hoverState = null;\n        EventHandler.trigger(this._element, this.constructor.Event.SHOWN);\n\n        if (prevHoverState === HOVER_STATE_OUT) {\n          this._leave(null, this);\n        }\n      };\n\n      const isAnimated = this.tip.classList.contains(CLASS_NAME_FADE$3);\n\n      this._queueCallback(complete, this.tip, isAnimated);\n    }\n\n    hide() {\n      if (!this._popper) {\n        return;\n      }\n\n      const tip = this.getTipElement();\n\n      const complete = () => {\n        if (this._isWithActiveTrigger()) {\n          return;\n        }\n\n        if (this._hoverState !== HOVER_STATE_SHOW) {\n          tip.remove();\n        }\n\n        this._cleanTipClass();\n\n        this._element.removeAttribute('aria-describedby');\n\n        EventHandler.trigger(this._element, this.constructor.Event.HIDDEN);\n\n        if (this._popper) {\n          this._popper.destroy();\n\n          this._popper = null;\n        }\n      };\n\n      const hideEvent = EventHandler.trigger(this._element, this.constructor.Event.HIDE);\n\n      if (hideEvent.defaultPrevented) {\n        return;\n      }\n\n      tip.classList.remove(CLASS_NAME_SHOW$3); // If this is a touch-enabled device we remove the extra\n      // empty mouseover listeners we added for iOS support\n\n      if ('ontouchstart' in document.documentElement) {\n        [].concat(...document.body.children).forEach(element => EventHandler.off(element, 'mouseover', noop));\n      }\n\n      this._activeTrigger[TRIGGER_CLICK] = false;\n      this._activeTrigger[TRIGGER_FOCUS] = false;\n      this._activeTrigger[TRIGGER_HOVER] = false;\n      const isAnimated = this.tip.classList.contains(CLASS_NAME_FADE$3);\n\n      this._queueCallback(complete, this.tip, isAnimated);\n\n      this._hoverState = '';\n    }\n\n    update() {\n      if (this._popper !== null) {\n        this._popper.update();\n      }\n    } // Protected\n\n\n    isWithContent() {\n      return Boolean(this.getTitle());\n    }\n\n    getTipElement() {\n      if (this.tip) {\n        return this.tip;\n      }\n\n      const element = document.createElement('div');\n      element.innerHTML = this._config.template;\n      this.tip = element.children[0];\n      return this.tip;\n    }\n\n    setContent() {\n      const tip = this.getTipElement();\n      this.setElementContent(SelectorEngine.findOne(SELECTOR_TOOLTIP_INNER, tip), this.getTitle());\n      tip.classList.remove(CLASS_NAME_FADE$3, CLASS_NAME_SHOW$3);\n    }\n\n    setElementContent(element, content) {\n      if (element === null) {\n        return;\n      }\n\n      if (isElement$1(content)) {\n        content = getElement(content); // content is a DOM node or a jQuery\n\n        if (this._config.html) {\n          if (content.parentNode !== element) {\n            element.innerHTML = '';\n            element.appendChild(content);\n          }\n        } else {\n          element.textContent = content.textContent;\n        }\n\n        return;\n      }\n\n      if (this._config.html) {\n        if (this._config.sanitize) {\n          content = sanitizeHtml(content, this._config.allowList, this._config.sanitizeFn);\n        }\n\n        element.innerHTML = content;\n      } else {\n        element.textContent = content;\n      }\n    }\n\n    getTitle() {\n      let title = this._element.getAttribute('data-bs-original-title');\n\n      if (!title) {\n        title = typeof this._config.title === 'function' ? this._config.title.call(this._element) : this._config.title;\n      }\n\n      return title;\n    }\n\n    updateAttachment(attachment) {\n      if (attachment === 'right') {\n        return 'end';\n      }\n\n      if (attachment === 'left') {\n        return 'start';\n      }\n\n      return attachment;\n    } // Private\n\n\n    _initializeOnDelegatedTarget(event, context) {\n      const dataKey = this.constructor.DATA_KEY;\n      context = context || Data.get(event.delegateTarget, dataKey);\n\n      if (!context) {\n        context = new this.constructor(event.delegateTarget, this._getDelegateConfig());\n        Data.set(event.delegateTarget, dataKey, context);\n      }\n\n      return context;\n    }\n\n    _getOffset() {\n      const {\n        offset\n      } = this._config;\n\n      if (typeof offset === 'string') {\n        return offset.split(',').map(val => Number.parseInt(val, 10));\n      }\n\n      if (typeof offset === 'function') {\n        return popperData => offset(popperData, this._element);\n      }\n\n      return offset;\n    }\n\n    _getPopperConfig(attachment) {\n      const defaultBsPopperConfig = {\n        placement: attachment,\n        modifiers: [{\n          name: 'flip',\n          options: {\n            fallbackPlacements: this._config.fallbackPlacements\n          }\n        }, {\n          name: 'offset',\n          options: {\n            offset: this._getOffset()\n          }\n        }, {\n          name: 'preventOverflow',\n          options: {\n            boundary: this._config.boundary\n          }\n        }, {\n          name: 'arrow',\n          options: {\n            element: `.${this.constructor.NAME}-arrow`\n          }\n        }, {\n          name: 'onChange',\n          enabled: true,\n          phase: 'afterWrite',\n          fn: data => this._handlePopperPlacementChange(data)\n        }],\n        onFirstUpdate: data => {\n          if (data.options.placement !== data.placement) {\n            this._handlePopperPlacementChange(data);\n          }\n        }\n      };\n      return { ...defaultBsPopperConfig,\n        ...(typeof this._config.popperConfig === 'function' ? this._config.popperConfig(defaultBsPopperConfig) : this._config.popperConfig)\n      };\n    }\n\n    _addAttachmentClass(attachment) {\n      this.getTipElement().classList.add(`${CLASS_PREFIX$1}-${this.updateAttachment(attachment)}`);\n    }\n\n    _getAttachment(placement) {\n      return AttachmentMap[placement.toUpperCase()];\n    }\n\n    _setListeners() {\n      const triggers = this._config.trigger.split(' ');\n\n      triggers.forEach(trigger => {\n        if (trigger === 'click') {\n          EventHandler.on(this._element, this.constructor.Event.CLICK, this._config.selector, event => this.toggle(event));\n        } else if (trigger !== TRIGGER_MANUAL) {\n          const eventIn = trigger === TRIGGER_HOVER ? this.constructor.Event.MOUSEENTER : this.constructor.Event.FOCUSIN;\n          const eventOut = trigger === TRIGGER_HOVER ? this.constructor.Event.MOUSELEAVE : this.constructor.Event.FOCUSOUT;\n          EventHandler.on(this._element, eventIn, this._config.selector, event => this._enter(event));\n          EventHandler.on(this._element, eventOut, this._config.selector, event => this._leave(event));\n        }\n      });\n\n      this._hideModalHandler = () => {\n        if (this._element) {\n          this.hide();\n        }\n      };\n\n      EventHandler.on(this._element.closest(`.${CLASS_NAME_MODAL}`), 'hide.bs.modal', this._hideModalHandler);\n\n      if (this._config.selector) {\n        this._config = { ...this._config,\n          trigger: 'manual',\n          selector: ''\n        };\n      } else {\n        this._fixTitle();\n      }\n    }\n\n    _fixTitle() {\n      const title = this._element.getAttribute('title');\n\n      const originalTitleType = typeof this._element.getAttribute('data-bs-original-title');\n\n      if (title || originalTitleType !== 'string') {\n        this._element.setAttribute('data-bs-original-title', title || '');\n\n        if (title && !this._element.getAttribute('aria-label') && !this._element.textContent) {\n          this._element.setAttribute('aria-label', title);\n        }\n\n        this._element.setAttribute('title', '');\n      }\n    }\n\n    _enter(event, context) {\n      context = this._initializeOnDelegatedTarget(event, context);\n\n      if (event) {\n        context._activeTrigger[event.type === 'focusin' ? TRIGGER_FOCUS : TRIGGER_HOVER] = true;\n      }\n\n      if (context.getTipElement().classList.contains(CLASS_NAME_SHOW$3) || context._hoverState === HOVER_STATE_SHOW) {\n        context._hoverState = HOVER_STATE_SHOW;\n        return;\n      }\n\n      clearTimeout(context._timeout);\n      context._hoverState = HOVER_STATE_SHOW;\n\n      if (!context._config.delay || !context._config.delay.show) {\n        context.show();\n        return;\n      }\n\n      context._timeout = setTimeout(() => {\n        if (context._hoverState === HOVER_STATE_SHOW) {\n          context.show();\n        }\n      }, context._config.delay.show);\n    }\n\n    _leave(event, context) {\n      context = this._initializeOnDelegatedTarget(event, context);\n\n      if (event) {\n        context._activeTrigger[event.type === 'focusout' ? TRIGGER_FOCUS : TRIGGER_HOVER] = context._element.contains(event.relatedTarget);\n      }\n\n      if (context._isWithActiveTrigger()) {\n        return;\n      }\n\n      clearTimeout(context._timeout);\n      context._hoverState = HOVER_STATE_OUT;\n\n      if (!context._config.delay || !context._config.delay.hide) {\n        context.hide();\n        return;\n      }\n\n      context._timeout = setTimeout(() => {\n        if (context._hoverState === HOVER_STATE_OUT) {\n          context.hide();\n        }\n      }, context._config.delay.hide);\n    }\n\n    _isWithActiveTrigger() {\n      for (const trigger in this._activeTrigger) {\n        if (this._activeTrigger[trigger]) {\n          return true;\n        }\n      }\n\n      return false;\n    }\n\n    _getConfig(config) {\n      const dataAttributes = Manipulator.getDataAttributes(this._element);\n      Object.keys(dataAttributes).forEach(dataAttr => {\n        if (DISALLOWED_ATTRIBUTES.has(dataAttr)) {\n          delete dataAttributes[dataAttr];\n        }\n      });\n      config = { ...this.constructor.Default,\n        ...dataAttributes,\n        ...(typeof config === 'object' && config ? config : {})\n      };\n      config.container = config.container === false ? document.body : getElement(config.container);\n\n      if (typeof config.delay === 'number') {\n        config.delay = {\n          show: config.delay,\n          hide: config.delay\n        };\n      }\n\n      if (typeof config.title === 'number') {\n        config.title = config.title.toString();\n      }\n\n      if (typeof config.content === 'number') {\n        config.content = config.content.toString();\n      }\n\n      typeCheckConfig(NAME$4, config, this.constructor.DefaultType);\n\n      if (config.sanitize) {\n        config.template = sanitizeHtml(config.template, config.allowList, config.sanitizeFn);\n      }\n\n      return config;\n    }\n\n    _getDelegateConfig() {\n      const config = {};\n\n      if (this._config) {\n        for (const key in this._config) {\n          if (this.constructor.Default[key] !== this._config[key]) {\n            config[key] = this._config[key];\n          }\n        }\n      }\n\n      return config;\n    }\n\n    _cleanTipClass() {\n      const tip = this.getTipElement();\n      const tabClass = tip.getAttribute('class').match(BSCLS_PREFIX_REGEX$1);\n\n      if (tabClass !== null && tabClass.length > 0) {\n        tabClass.map(token => token.trim()).forEach(tClass => tip.classList.remove(tClass));\n      }\n    }\n\n    _handlePopperPlacementChange(popperData) {\n      const {\n        state\n      } = popperData;\n\n      if (!state) {\n        return;\n      }\n\n      this.tip = state.elements.popper;\n\n      this._cleanTipClass();\n\n      this._addAttachmentClass(this._getAttachment(state.placement));\n    } // Static\n\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = Tooltip.getOrCreateInstance(this, config);\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(`No method named \"${config}\"`);\n          }\n\n          data[config]();\n        }\n      });\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Tooltip to jQuery only if jQuery is present\n   */\n\n\n  defineJQueryPlugin(Tooltip);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): popover.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$3 = 'popover';\n  const DATA_KEY$3 = 'bs.popover';\n  const EVENT_KEY$3 = `.${DATA_KEY$3}`;\n  const CLASS_PREFIX = 'bs-popover';\n  const BSCLS_PREFIX_REGEX = new RegExp(`(^|\\\\s)${CLASS_PREFIX}\\\\S+`, 'g');\n  const Default$2 = { ...Tooltip.Default,\n    placement: 'right',\n    offset: [0, 8],\n    trigger: 'click',\n    content: '',\n    template: '<div class=\"popover\" role=\"tooltip\">' + '<div class=\"popover-arrow\"></div>' + '<h3 class=\"popover-header\"></h3>' + '<div class=\"popover-body\"></div>' + '</div>'\n  };\n  const DefaultType$2 = { ...Tooltip.DefaultType,\n    content: '(string|element|function)'\n  };\n  const Event$1 = {\n    HIDE: `hide${EVENT_KEY$3}`,\n    HIDDEN: `hidden${EVENT_KEY$3}`,\n    SHOW: `show${EVENT_KEY$3}`,\n    SHOWN: `shown${EVENT_KEY$3}`,\n    INSERTED: `inserted${EVENT_KEY$3}`,\n    CLICK: `click${EVENT_KEY$3}`,\n    FOCUSIN: `focusin${EVENT_KEY$3}`,\n    FOCUSOUT: `focusout${EVENT_KEY$3}`,\n    MOUSEENTER: `mouseenter${EVENT_KEY$3}`,\n    MOUSELEAVE: `mouseleave${EVENT_KEY$3}`\n  };\n  const CLASS_NAME_FADE$2 = 'fade';\n  const CLASS_NAME_SHOW$2 = 'show';\n  const SELECTOR_TITLE = '.popover-header';\n  const SELECTOR_CONTENT = '.popover-body';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Popover extends Tooltip {\n    // Getters\n    static get Default() {\n      return Default$2;\n    }\n\n    static get NAME() {\n      return NAME$3;\n    }\n\n    static get Event() {\n      return Event$1;\n    }\n\n    static get DefaultType() {\n      return DefaultType$2;\n    } // Overrides\n\n\n    isWithContent() {\n      return this.getTitle() || this._getContent();\n    }\n\n    getTipElement() {\n      if (this.tip) {\n        return this.tip;\n      }\n\n      this.tip = super.getTipElement();\n\n      if (!this.getTitle()) {\n        SelectorEngine.findOne(SELECTOR_TITLE, this.tip).remove();\n      }\n\n      if (!this._getContent()) {\n        SelectorEngine.findOne(SELECTOR_CONTENT, this.tip).remove();\n      }\n\n      return this.tip;\n    }\n\n    setContent() {\n      const tip = this.getTipElement(); // we use append for html objects to maintain js events\n\n      this.setElementContent(SelectorEngine.findOne(SELECTOR_TITLE, tip), this.getTitle());\n\n      let content = this._getContent();\n\n      if (typeof content === 'function') {\n        content = content.call(this._element);\n      }\n\n      this.setElementContent(SelectorEngine.findOne(SELECTOR_CONTENT, tip), content);\n      tip.classList.remove(CLASS_NAME_FADE$2, CLASS_NAME_SHOW$2);\n    } // Private\n\n\n    _addAttachmentClass(attachment) {\n      this.getTipElement().classList.add(`${CLASS_PREFIX}-${this.updateAttachment(attachment)}`);\n    }\n\n    _getContent() {\n      return this._element.getAttribute('data-bs-content') || this._config.content;\n    }\n\n    _cleanTipClass() {\n      const tip = this.getTipElement();\n      const tabClass = tip.getAttribute('class').match(BSCLS_PREFIX_REGEX);\n\n      if (tabClass !== null && tabClass.length > 0) {\n        tabClass.map(token => token.trim()).forEach(tClass => tip.classList.remove(tClass));\n      }\n    } // Static\n\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = Popover.getOrCreateInstance(this, config);\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(`No method named \"${config}\"`);\n          }\n\n          data[config]();\n        }\n      });\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Popover to jQuery only if jQuery is present\n   */\n\n\n  defineJQueryPlugin(Popover);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): scrollspy.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$2 = 'scrollspy';\n  const DATA_KEY$2 = 'bs.scrollspy';\n  const EVENT_KEY$2 = `.${DATA_KEY$2}`;\n  const DATA_API_KEY$1 = '.data-api';\n  const Default$1 = {\n    offset: 10,\n    method: 'auto',\n    target: ''\n  };\n  const DefaultType$1 = {\n    offset: 'number',\n    method: 'string',\n    target: '(string|element)'\n  };\n  const EVENT_ACTIVATE = `activate${EVENT_KEY$2}`;\n  const EVENT_SCROLL = `scroll${EVENT_KEY$2}`;\n  const EVENT_LOAD_DATA_API = `load${EVENT_KEY$2}${DATA_API_KEY$1}`;\n  const CLASS_NAME_DROPDOWN_ITEM = 'dropdown-item';\n  const CLASS_NAME_ACTIVE$1 = 'active';\n  const SELECTOR_DATA_SPY = '[data-bs-spy=\"scroll\"]';\n  const SELECTOR_NAV_LIST_GROUP$1 = '.nav, .list-group';\n  const SELECTOR_NAV_LINKS = '.nav-link';\n  const SELECTOR_NAV_ITEMS = '.nav-item';\n  const SELECTOR_LIST_ITEMS = '.list-group-item';\n  const SELECTOR_DROPDOWN$1 = '.dropdown';\n  const SELECTOR_DROPDOWN_TOGGLE$1 = '.dropdown-toggle';\n  const METHOD_OFFSET = 'offset';\n  const METHOD_POSITION = 'position';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class ScrollSpy extends BaseComponent {\n    constructor(element, config) {\n      super(element);\n      this._scrollElement = this._element.tagName === 'BODY' ? window : this._element;\n      this._config = this._getConfig(config);\n      this._selector = `${this._config.target} ${SELECTOR_NAV_LINKS}, ${this._config.target} ${SELECTOR_LIST_ITEMS}, ${this._config.target} .${CLASS_NAME_DROPDOWN_ITEM}`;\n      this._offsets = [];\n      this._targets = [];\n      this._activeTarget = null;\n      this._scrollHeight = 0;\n      EventHandler.on(this._scrollElement, EVENT_SCROLL, () => this._process());\n      this.refresh();\n\n      this._process();\n    } // Getters\n\n\n    static get Default() {\n      return Default$1;\n    }\n\n    static get NAME() {\n      return NAME$2;\n    } // Public\n\n\n    refresh() {\n      const autoMethod = this._scrollElement === this._scrollElement.window ? METHOD_OFFSET : METHOD_POSITION;\n      const offsetMethod = this._config.method === 'auto' ? autoMethod : this._config.method;\n      const offsetBase = offsetMethod === METHOD_POSITION ? this._getScrollTop() : 0;\n      this._offsets = [];\n      this._targets = [];\n      this._scrollHeight = this._getScrollHeight();\n      const targets = SelectorEngine.find(this._selector);\n      targets.map(element => {\n        const targetSelector = getSelectorFromElement(element);\n        const target = targetSelector ? SelectorEngine.findOne(targetSelector) : null;\n\n        if (target) {\n          const targetBCR = target.getBoundingClientRect();\n\n          if (targetBCR.width || targetBCR.height) {\n            return [Manipulator[offsetMethod](target).top + offsetBase, targetSelector];\n          }\n        }\n\n        return null;\n      }).filter(item => item).sort((a, b) => a[0] - b[0]).forEach(item => {\n        this._offsets.push(item[0]);\n\n        this._targets.push(item[1]);\n      });\n    }\n\n    dispose() {\n      EventHandler.off(this._scrollElement, EVENT_KEY$2);\n      super.dispose();\n    } // Private\n\n\n    _getConfig(config) {\n      config = { ...Default$1,\n        ...Manipulator.getDataAttributes(this._element),\n        ...(typeof config === 'object' && config ? config : {})\n      };\n\n      if (typeof config.target !== 'string' && isElement$1(config.target)) {\n        let {\n          id\n        } = config.target;\n\n        if (!id) {\n          id = getUID(NAME$2);\n          config.target.id = id;\n        }\n\n        config.target = `#${id}`;\n      }\n\n      typeCheckConfig(NAME$2, config, DefaultType$1);\n      return config;\n    }\n\n    _getScrollTop() {\n      return this._scrollElement === window ? this._scrollElement.pageYOffset : this._scrollElement.scrollTop;\n    }\n\n    _getScrollHeight() {\n      return this._scrollElement.scrollHeight || Math.max(document.body.scrollHeight, document.documentElement.scrollHeight);\n    }\n\n    _getOffsetHeight() {\n      return this._scrollElement === window ? window.innerHeight : this._scrollElement.getBoundingClientRect().height;\n    }\n\n    _process() {\n      const scrollTop = this._getScrollTop() + this._config.offset;\n\n      const scrollHeight = this._getScrollHeight();\n\n      const maxScroll = this._config.offset + scrollHeight - this._getOffsetHeight();\n\n      if (this._scrollHeight !== scrollHeight) {\n        this.refresh();\n      }\n\n      if (scrollTop >= maxScroll) {\n        const target = this._targets[this._targets.length - 1];\n\n        if (this._activeTarget !== target) {\n          this._activate(target);\n        }\n\n        return;\n      }\n\n      if (this._activeTarget && scrollTop < this._offsets[0] && this._offsets[0] > 0) {\n        this._activeTarget = null;\n\n        this._clear();\n\n        return;\n      }\n\n      for (let i = this._offsets.length; i--;) {\n        const isActiveTarget = this._activeTarget !== this._targets[i] && scrollTop >= this._offsets[i] && (typeof this._offsets[i + 1] === 'undefined' || scrollTop < this._offsets[i + 1]);\n\n        if (isActiveTarget) {\n          this._activate(this._targets[i]);\n        }\n      }\n    }\n\n    _activate(target) {\n      this._activeTarget = target;\n\n      this._clear();\n\n      const queries = this._selector.split(',').map(selector => `${selector}[data-bs-target=\"${target}\"],${selector}[href=\"${target}\"]`);\n\n      const link = SelectorEngine.findOne(queries.join(','));\n\n      if (link.classList.contains(CLASS_NAME_DROPDOWN_ITEM)) {\n        SelectorEngine.findOne(SELECTOR_DROPDOWN_TOGGLE$1, link.closest(SELECTOR_DROPDOWN$1)).classList.add(CLASS_NAME_ACTIVE$1);\n        link.classList.add(CLASS_NAME_ACTIVE$1);\n      } else {\n        // Set triggered link as active\n        link.classList.add(CLASS_NAME_ACTIVE$1);\n        SelectorEngine.parents(link, SELECTOR_NAV_LIST_GROUP$1).forEach(listGroup => {\n          // Set triggered links parents as active\n          // With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor\n          SelectorEngine.prev(listGroup, `${SELECTOR_NAV_LINKS}, ${SELECTOR_LIST_ITEMS}`).forEach(item => item.classList.add(CLASS_NAME_ACTIVE$1)); // Handle special case when .nav-link is inside .nav-item\n\n          SelectorEngine.prev(listGroup, SELECTOR_NAV_ITEMS).forEach(navItem => {\n            SelectorEngine.children(navItem, SELECTOR_NAV_LINKS).forEach(item => item.classList.add(CLASS_NAME_ACTIVE$1));\n          });\n        });\n      }\n\n      EventHandler.trigger(this._scrollElement, EVENT_ACTIVATE, {\n        relatedTarget: target\n      });\n    }\n\n    _clear() {\n      SelectorEngine.find(this._selector).filter(node => node.classList.contains(CLASS_NAME_ACTIVE$1)).forEach(node => node.classList.remove(CLASS_NAME_ACTIVE$1));\n    } // Static\n\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = ScrollSpy.getOrCreateInstance(this, config);\n\n        if (typeof config !== 'string') {\n          return;\n        }\n\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config]();\n      });\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n    SelectorEngine.find(SELECTOR_DATA_SPY).forEach(spy => new ScrollSpy(spy));\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .ScrollSpy to jQuery only if jQuery is present\n   */\n\n  defineJQueryPlugin(ScrollSpy);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): tab.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$1 = 'tab';\n  const DATA_KEY$1 = 'bs.tab';\n  const EVENT_KEY$1 = `.${DATA_KEY$1}`;\n  const DATA_API_KEY = '.data-api';\n  const EVENT_HIDE$1 = `hide${EVENT_KEY$1}`;\n  const EVENT_HIDDEN$1 = `hidden${EVENT_KEY$1}`;\n  const EVENT_SHOW$1 = `show${EVENT_KEY$1}`;\n  const EVENT_SHOWN$1 = `shown${EVENT_KEY$1}`;\n  const EVENT_CLICK_DATA_API = `click${EVENT_KEY$1}${DATA_API_KEY}`;\n  const CLASS_NAME_DROPDOWN_MENU = 'dropdown-menu';\n  const CLASS_NAME_ACTIVE = 'active';\n  const CLASS_NAME_FADE$1 = 'fade';\n  const CLASS_NAME_SHOW$1 = 'show';\n  const SELECTOR_DROPDOWN = '.dropdown';\n  const SELECTOR_NAV_LIST_GROUP = '.nav, .list-group';\n  const SELECTOR_ACTIVE = '.active';\n  const SELECTOR_ACTIVE_UL = ':scope > li > .active';\n  const SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"tab\"], [data-bs-toggle=\"pill\"], [data-bs-toggle=\"list\"]';\n  const SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle';\n  const SELECTOR_DROPDOWN_ACTIVE_CHILD = ':scope > .dropdown-menu .active';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Tab extends BaseComponent {\n    // Getters\n    static get NAME() {\n      return NAME$1;\n    } // Public\n\n\n    show() {\n      if (this._element.parentNode && this._element.parentNode.nodeType === Node.ELEMENT_NODE && this._element.classList.contains(CLASS_NAME_ACTIVE)) {\n        return;\n      }\n\n      let previous;\n      const target = getElementFromSelector(this._element);\n\n      const listElement = this._element.closest(SELECTOR_NAV_LIST_GROUP);\n\n      if (listElement) {\n        const itemSelector = listElement.nodeName === 'UL' || listElement.nodeName === 'OL' ? SELECTOR_ACTIVE_UL : SELECTOR_ACTIVE;\n        previous = SelectorEngine.find(itemSelector, listElement);\n        previous = previous[previous.length - 1];\n      }\n\n      const hideEvent = previous ? EventHandler.trigger(previous, EVENT_HIDE$1, {\n        relatedTarget: this._element\n      }) : null;\n      const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$1, {\n        relatedTarget: previous\n      });\n\n      if (showEvent.defaultPrevented || hideEvent !== null && hideEvent.defaultPrevented) {\n        return;\n      }\n\n      this._activate(this._element, listElement);\n\n      const complete = () => {\n        EventHandler.trigger(previous, EVENT_HIDDEN$1, {\n          relatedTarget: this._element\n        });\n        EventHandler.trigger(this._element, EVENT_SHOWN$1, {\n          relatedTarget: previous\n        });\n      };\n\n      if (target) {\n        this._activate(target, target.parentNode, complete);\n      } else {\n        complete();\n      }\n    } // Private\n\n\n    _activate(element, container, callback) {\n      const activeElements = container && (container.nodeName === 'UL' || container.nodeName === 'OL') ? SelectorEngine.find(SELECTOR_ACTIVE_UL, container) : SelectorEngine.children(container, SELECTOR_ACTIVE);\n      const active = activeElements[0];\n      const isTransitioning = callback && active && active.classList.contains(CLASS_NAME_FADE$1);\n\n      const complete = () => this._transitionComplete(element, active, callback);\n\n      if (active && isTransitioning) {\n        active.classList.remove(CLASS_NAME_SHOW$1);\n\n        this._queueCallback(complete, element, true);\n      } else {\n        complete();\n      }\n    }\n\n    _transitionComplete(element, active, callback) {\n      if (active) {\n        active.classList.remove(CLASS_NAME_ACTIVE);\n        const dropdownChild = SelectorEngine.findOne(SELECTOR_DROPDOWN_ACTIVE_CHILD, active.parentNode);\n\n        if (dropdownChild) {\n          dropdownChild.classList.remove(CLASS_NAME_ACTIVE);\n        }\n\n        if (active.getAttribute('role') === 'tab') {\n          active.setAttribute('aria-selected', false);\n        }\n      }\n\n      element.classList.add(CLASS_NAME_ACTIVE);\n\n      if (element.getAttribute('role') === 'tab') {\n        element.setAttribute('aria-selected', true);\n      }\n\n      reflow(element);\n\n      if (element.classList.contains(CLASS_NAME_FADE$1)) {\n        element.classList.add(CLASS_NAME_SHOW$1);\n      }\n\n      let parent = element.parentNode;\n\n      if (parent && parent.nodeName === 'LI') {\n        parent = parent.parentNode;\n      }\n\n      if (parent && parent.classList.contains(CLASS_NAME_DROPDOWN_MENU)) {\n        const dropdownElement = element.closest(SELECTOR_DROPDOWN);\n\n        if (dropdownElement) {\n          SelectorEngine.find(SELECTOR_DROPDOWN_TOGGLE, dropdownElement).forEach(dropdown => dropdown.classList.add(CLASS_NAME_ACTIVE));\n        }\n\n        element.setAttribute('aria-expanded', true);\n      }\n\n      if (callback) {\n        callback();\n      }\n    } // Static\n\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = Tab.getOrCreateInstance(this);\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(`No method named \"${config}\"`);\n          }\n\n          data[config]();\n        }\n      });\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n    if (['A', 'AREA'].includes(this.tagName)) {\n      event.preventDefault();\n    }\n\n    if (isDisabled(this)) {\n      return;\n    }\n\n    const data = Tab.getOrCreateInstance(this);\n    data.show();\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Tab to jQuery only if jQuery is present\n   */\n\n  defineJQueryPlugin(Tab);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): toast.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME = 'toast';\n  const DATA_KEY = 'bs.toast';\n  const EVENT_KEY = `.${DATA_KEY}`;\n  const EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY}`;\n  const EVENT_MOUSEOVER = `mouseover${EVENT_KEY}`;\n  const EVENT_MOUSEOUT = `mouseout${EVENT_KEY}`;\n  const EVENT_FOCUSIN = `focusin${EVENT_KEY}`;\n  const EVENT_FOCUSOUT = `focusout${EVENT_KEY}`;\n  const EVENT_HIDE = `hide${EVENT_KEY}`;\n  const EVENT_HIDDEN = `hidden${EVENT_KEY}`;\n  const EVENT_SHOW = `show${EVENT_KEY}`;\n  const EVENT_SHOWN = `shown${EVENT_KEY}`;\n  const CLASS_NAME_FADE = 'fade';\n  const CLASS_NAME_HIDE = 'hide';\n  const CLASS_NAME_SHOW = 'show';\n  const CLASS_NAME_SHOWING = 'showing';\n  const DefaultType = {\n    animation: 'boolean',\n    autohide: 'boolean',\n    delay: 'number'\n  };\n  const Default = {\n    animation: true,\n    autohide: true,\n    delay: 5000\n  };\n  const SELECTOR_DATA_DISMISS = '[data-bs-dismiss=\"toast\"]';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Toast extends BaseComponent {\n    constructor(element, config) {\n      super(element);\n      this._config = this._getConfig(config);\n      this._timeout = null;\n      this._hasMouseInteraction = false;\n      this._hasKeyboardInteraction = false;\n\n      this._setListeners();\n    } // Getters\n\n\n    static get DefaultType() {\n      return DefaultType;\n    }\n\n    static get Default() {\n      return Default;\n    }\n\n    static get NAME() {\n      return NAME;\n    } // Public\n\n\n    show() {\n      const showEvent = EventHandler.trigger(this._element, EVENT_SHOW);\n\n      if (showEvent.defaultPrevented) {\n        return;\n      }\n\n      this._clearTimeout();\n\n      if (this._config.animation) {\n        this._element.classList.add(CLASS_NAME_FADE);\n      }\n\n      const complete = () => {\n        this._element.classList.remove(CLASS_NAME_SHOWING);\n\n        this._element.classList.add(CLASS_NAME_SHOW);\n\n        EventHandler.trigger(this._element, EVENT_SHOWN);\n\n        this._maybeScheduleHide();\n      };\n\n      this._element.classList.remove(CLASS_NAME_HIDE);\n\n      reflow(this._element);\n\n      this._element.classList.add(CLASS_NAME_SHOWING);\n\n      this._queueCallback(complete, this._element, this._config.animation);\n    }\n\n    hide() {\n      if (!this._element.classList.contains(CLASS_NAME_SHOW)) {\n        return;\n      }\n\n      const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE);\n\n      if (hideEvent.defaultPrevented) {\n        return;\n      }\n\n      const complete = () => {\n        this._element.classList.add(CLASS_NAME_HIDE);\n\n        EventHandler.trigger(this._element, EVENT_HIDDEN);\n      };\n\n      this._element.classList.remove(CLASS_NAME_SHOW);\n\n      this._queueCallback(complete, this._element, this._config.animation);\n    }\n\n    dispose() {\n      this._clearTimeout();\n\n      if (this._element.classList.contains(CLASS_NAME_SHOW)) {\n        this._element.classList.remove(CLASS_NAME_SHOW);\n      }\n\n      super.dispose();\n    } // Private\n\n\n    _getConfig(config) {\n      config = { ...Default,\n        ...Manipulator.getDataAttributes(this._element),\n        ...(typeof config === 'object' && config ? config : {})\n      };\n      typeCheckConfig(NAME, config, this.constructor.DefaultType);\n      return config;\n    }\n\n    _maybeScheduleHide() {\n      if (!this._config.autohide) {\n        return;\n      }\n\n      if (this._hasMouseInteraction || this._hasKeyboardInteraction) {\n        return;\n      }\n\n      this._timeout = setTimeout(() => {\n        this.hide();\n      }, this._config.delay);\n    }\n\n    _onInteraction(event, isInteracting) {\n      switch (event.type) {\n        case 'mouseover':\n        case 'mouseout':\n          this._hasMouseInteraction = isInteracting;\n          break;\n\n        case 'focusin':\n        case 'focusout':\n          this._hasKeyboardInteraction = isInteracting;\n          break;\n      }\n\n      if (isInteracting) {\n        this._clearTimeout();\n\n        return;\n      }\n\n      const nextElement = event.relatedTarget;\n\n      if (this._element === nextElement || this._element.contains(nextElement)) {\n        return;\n      }\n\n      this._maybeScheduleHide();\n    }\n\n    _setListeners() {\n      EventHandler.on(this._element, EVENT_CLICK_DISMISS, SELECTOR_DATA_DISMISS, () => this.hide());\n      EventHandler.on(this._element, EVENT_MOUSEOVER, event => this._onInteraction(event, true));\n      EventHandler.on(this._element, EVENT_MOUSEOUT, event => this._onInteraction(event, false));\n      EventHandler.on(this._element, EVENT_FOCUSIN, event => this._onInteraction(event, true));\n      EventHandler.on(this._element, EVENT_FOCUSOUT, event => this._onInteraction(event, false));\n    }\n\n    _clearTimeout() {\n      clearTimeout(this._timeout);\n      this._timeout = null;\n    } // Static\n\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = Toast.getOrCreateInstance(this, config);\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(`No method named \"${config}\"`);\n          }\n\n          data[config](this);\n        }\n      });\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Toast to jQuery only if jQuery is present\n   */\n\n\n  defineJQueryPlugin(Toast);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): index.umd.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  var index_umd = {\n    Alert,\n    Button,\n    Carousel,\n    Collapse,\n    Dropdown,\n    Modal,\n    Offcanvas,\n    Popover,\n    ScrollSpy,\n    Tab,\n    Toast,\n    Tooltip\n  };\n\n  return index_umd;\n\n})));\n//# sourceMappingURL=bootstrap.bundle.js.map\n"
  },
  {
    "path": "src/sourceDev.WebApp/SharedThemes/solar/wwwroot/js/bootstrap.esm.js",
    "content": "/*!\n  * Bootstrap v5.0.2 (https://getbootstrap.com/)\n  * Copyright 2011-2021 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)\n  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n  */\nimport * as Popper from '@popperjs/core';\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): dom/selector-engine.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\nconst NODE_TEXT = 3;\nconst SelectorEngine = {\n  find(selector, element = document.documentElement) {\n    return [].concat(...Element.prototype.querySelectorAll.call(element, selector));\n  },\n\n  findOne(selector, element = document.documentElement) {\n    return Element.prototype.querySelector.call(element, selector);\n  },\n\n  children(element, selector) {\n    return [].concat(...element.children).filter(child => child.matches(selector));\n  },\n\n  parents(element, selector) {\n    const parents = [];\n    let ancestor = element.parentNode;\n\n    while (ancestor && ancestor.nodeType === Node.ELEMENT_NODE && ancestor.nodeType !== NODE_TEXT) {\n      if (ancestor.matches(selector)) {\n        parents.push(ancestor);\n      }\n\n      ancestor = ancestor.parentNode;\n    }\n\n    return parents;\n  },\n\n  prev(element, selector) {\n    let previous = element.previousElementSibling;\n\n    while (previous) {\n      if (previous.matches(selector)) {\n        return [previous];\n      }\n\n      previous = previous.previousElementSibling;\n    }\n\n    return [];\n  },\n\n  next(element, selector) {\n    let next = element.nextElementSibling;\n\n    while (next) {\n      if (next.matches(selector)) {\n        return [next];\n      }\n\n      next = next.nextElementSibling;\n    }\n\n    return [];\n  }\n\n};\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): util/index.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst MAX_UID = 1000000;\nconst MILLISECONDS_MULTIPLIER = 1000;\nconst TRANSITION_END = 'transitionend'; // Shoutout AngusCroll (https://goo.gl/pxwQGp)\n\nconst toType = obj => {\n  if (obj === null || obj === undefined) {\n    return `${obj}`;\n  }\n\n  return {}.toString.call(obj).match(/\\s([a-z]+)/i)[1].toLowerCase();\n};\n/**\n * --------------------------------------------------------------------------\n * Public Util Api\n * --------------------------------------------------------------------------\n */\n\n\nconst getUID = prefix => {\n  do {\n    prefix += Math.floor(Math.random() * MAX_UID);\n  } while (document.getElementById(prefix));\n\n  return prefix;\n};\n\nconst getSelector = element => {\n  let selector = element.getAttribute('data-bs-target');\n\n  if (!selector || selector === '#') {\n    let hrefAttr = element.getAttribute('href'); // The only valid content that could double as a selector are IDs or classes,\n    // so everything starting with `#` or `.`. If a \"real\" URL is used as the selector,\n    // `document.querySelector` will rightfully complain it is invalid.\n    // See https://github.com/twbs/bootstrap/issues/32273\n\n    if (!hrefAttr || !hrefAttr.includes('#') && !hrefAttr.startsWith('.')) {\n      return null;\n    } // Just in case some CMS puts out a full URL with the anchor appended\n\n\n    if (hrefAttr.includes('#') && !hrefAttr.startsWith('#')) {\n      hrefAttr = `#${hrefAttr.split('#')[1]}`;\n    }\n\n    selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : null;\n  }\n\n  return selector;\n};\n\nconst getSelectorFromElement = element => {\n  const selector = getSelector(element);\n\n  if (selector) {\n    return document.querySelector(selector) ? selector : null;\n  }\n\n  return null;\n};\n\nconst getElementFromSelector = element => {\n  const selector = getSelector(element);\n  return selector ? document.querySelector(selector) : null;\n};\n\nconst getTransitionDurationFromElement = element => {\n  if (!element) {\n    return 0;\n  } // Get transition-duration of the element\n\n\n  let {\n    transitionDuration,\n    transitionDelay\n  } = window.getComputedStyle(element);\n  const floatTransitionDuration = Number.parseFloat(transitionDuration);\n  const floatTransitionDelay = Number.parseFloat(transitionDelay); // Return 0 if element or transition duration is not found\n\n  if (!floatTransitionDuration && !floatTransitionDelay) {\n    return 0;\n  } // If multiple durations are defined, take the first\n\n\n  transitionDuration = transitionDuration.split(',')[0];\n  transitionDelay = transitionDelay.split(',')[0];\n  return (Number.parseFloat(transitionDuration) + Number.parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER;\n};\n\nconst triggerTransitionEnd = element => {\n  element.dispatchEvent(new Event(TRANSITION_END));\n};\n\nconst isElement = obj => {\n  if (!obj || typeof obj !== 'object') {\n    return false;\n  }\n\n  if (typeof obj.jquery !== 'undefined') {\n    obj = obj[0];\n  }\n\n  return typeof obj.nodeType !== 'undefined';\n};\n\nconst getElement = obj => {\n  if (isElement(obj)) {\n    // it's a jQuery object or a node element\n    return obj.jquery ? obj[0] : obj;\n  }\n\n  if (typeof obj === 'string' && obj.length > 0) {\n    return SelectorEngine.findOne(obj);\n  }\n\n  return null;\n};\n\nconst typeCheckConfig = (componentName, config, configTypes) => {\n  Object.keys(configTypes).forEach(property => {\n    const expectedTypes = configTypes[property];\n    const value = config[property];\n    const valueType = value && isElement(value) ? 'element' : toType(value);\n\n    if (!new RegExp(expectedTypes).test(valueType)) {\n      throw new TypeError(`${componentName.toUpperCase()}: Option \"${property}\" provided type \"${valueType}\" but expected type \"${expectedTypes}\".`);\n    }\n  });\n};\n\nconst isVisible = element => {\n  if (!isElement(element) || element.getClientRects().length === 0) {\n    return false;\n  }\n\n  return getComputedStyle(element).getPropertyValue('visibility') === 'visible';\n};\n\nconst isDisabled = element => {\n  if (!element || element.nodeType !== Node.ELEMENT_NODE) {\n    return true;\n  }\n\n  if (element.classList.contains('disabled')) {\n    return true;\n  }\n\n  if (typeof element.disabled !== 'undefined') {\n    return element.disabled;\n  }\n\n  return element.hasAttribute('disabled') && element.getAttribute('disabled') !== 'false';\n};\n\nconst findShadowRoot = element => {\n  if (!document.documentElement.attachShadow) {\n    return null;\n  } // Can find the shadow root otherwise it'll return the document\n\n\n  if (typeof element.getRootNode === 'function') {\n    const root = element.getRootNode();\n    return root instanceof ShadowRoot ? root : null;\n  }\n\n  if (element instanceof ShadowRoot) {\n    return element;\n  } // when we don't find a shadow root\n\n\n  if (!element.parentNode) {\n    return null;\n  }\n\n  return findShadowRoot(element.parentNode);\n};\n\nconst noop = () => {};\n\nconst reflow = element => element.offsetHeight;\n\nconst getjQuery = () => {\n  const {\n    jQuery\n  } = window;\n\n  if (jQuery && !document.body.hasAttribute('data-bs-no-jquery')) {\n    return jQuery;\n  }\n\n  return null;\n};\n\nconst DOMContentLoadedCallbacks = [];\n\nconst onDOMContentLoaded = callback => {\n  if (document.readyState === 'loading') {\n    // add listener on the first call when the document is in loading state\n    if (!DOMContentLoadedCallbacks.length) {\n      document.addEventListener('DOMContentLoaded', () => {\n        DOMContentLoadedCallbacks.forEach(callback => callback());\n      });\n    }\n\n    DOMContentLoadedCallbacks.push(callback);\n  } else {\n    callback();\n  }\n};\n\nconst isRTL = () => document.documentElement.dir === 'rtl';\n\nconst defineJQueryPlugin = plugin => {\n  onDOMContentLoaded(() => {\n    const $ = getjQuery();\n    /* istanbul ignore if */\n\n    if ($) {\n      const name = plugin.NAME;\n      const JQUERY_NO_CONFLICT = $.fn[name];\n      $.fn[name] = plugin.jQueryInterface;\n      $.fn[name].Constructor = plugin;\n\n      $.fn[name].noConflict = () => {\n        $.fn[name] = JQUERY_NO_CONFLICT;\n        return plugin.jQueryInterface;\n      };\n    }\n  });\n};\n\nconst execute = callback => {\n  if (typeof callback === 'function') {\n    callback();\n  }\n};\n\nconst executeAfterTransition = (callback, transitionElement, waitForTransition = true) => {\n  if (!waitForTransition) {\n    execute(callback);\n    return;\n  }\n\n  const durationPadding = 5;\n  const emulatedDuration = getTransitionDurationFromElement(transitionElement) + durationPadding;\n  let called = false;\n\n  const handler = ({\n    target\n  }) => {\n    if (target !== transitionElement) {\n      return;\n    }\n\n    called = true;\n    transitionElement.removeEventListener(TRANSITION_END, handler);\n    execute(callback);\n  };\n\n  transitionElement.addEventListener(TRANSITION_END, handler);\n  setTimeout(() => {\n    if (!called) {\n      triggerTransitionEnd(transitionElement);\n    }\n  }, emulatedDuration);\n};\n/**\n * Return the previous/next element of a list.\n *\n * @param {array} list    The list of elements\n * @param activeElement   The active element\n * @param shouldGetNext   Choose to get next or previous element\n * @param isCycleAllowed\n * @return {Element|elem} The proper element\n */\n\n\nconst getNextActiveElement = (list, activeElement, shouldGetNext, isCycleAllowed) => {\n  let index = list.indexOf(activeElement); // if the element does not exist in the list return an element depending on the direction and if cycle is allowed\n\n  if (index === -1) {\n    return list[!shouldGetNext && isCycleAllowed ? list.length - 1 : 0];\n  }\n\n  const listLength = list.length;\n  index += shouldGetNext ? 1 : -1;\n\n  if (isCycleAllowed) {\n    index = (index + listLength) % listLength;\n  }\n\n  return list[Math.max(0, Math.min(index, listLength - 1))];\n};\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): dom/event-handler.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst namespaceRegex = /[^.]*(?=\\..*)\\.|.*/;\nconst stripNameRegex = /\\..*/;\nconst stripUidRegex = /::\\d+$/;\nconst eventRegistry = {}; // Events storage\n\nlet uidEvent = 1;\nconst customEvents = {\n  mouseenter: 'mouseover',\n  mouseleave: 'mouseout'\n};\nconst customEventsRegex = /^(mouseenter|mouseleave)/i;\nconst nativeEvents = new Set(['click', 'dblclick', 'mouseup', 'mousedown', 'contextmenu', 'mousewheel', 'DOMMouseScroll', 'mouseover', 'mouseout', 'mousemove', 'selectstart', 'selectend', 'keydown', 'keypress', 'keyup', 'orientationchange', 'touchstart', 'touchmove', 'touchend', 'touchcancel', 'pointerdown', 'pointermove', 'pointerup', 'pointerleave', 'pointercancel', 'gesturestart', 'gesturechange', 'gestureend', 'focus', 'blur', 'change', 'reset', 'select', 'submit', 'focusin', 'focusout', 'load', 'unload', 'beforeunload', 'resize', 'move', 'DOMContentLoaded', 'readystatechange', 'error', 'abort', 'scroll']);\n/**\n * ------------------------------------------------------------------------\n * Private methods\n * ------------------------------------------------------------------------\n */\n\nfunction getUidEvent(element, uid) {\n  return uid && `${uid}::${uidEvent++}` || element.uidEvent || uidEvent++;\n}\n\nfunction getEvent(element) {\n  const uid = getUidEvent(element);\n  element.uidEvent = uid;\n  eventRegistry[uid] = eventRegistry[uid] || {};\n  return eventRegistry[uid];\n}\n\nfunction bootstrapHandler(element, fn) {\n  return function handler(event) {\n    event.delegateTarget = element;\n\n    if (handler.oneOff) {\n      EventHandler.off(element, event.type, fn);\n    }\n\n    return fn.apply(element, [event]);\n  };\n}\n\nfunction bootstrapDelegationHandler(element, selector, fn) {\n  return function handler(event) {\n    const domElements = element.querySelectorAll(selector);\n\n    for (let {\n      target\n    } = event; target && target !== this; target = target.parentNode) {\n      for (let i = domElements.length; i--;) {\n        if (domElements[i] === target) {\n          event.delegateTarget = target;\n\n          if (handler.oneOff) {\n            // eslint-disable-next-line unicorn/consistent-destructuring\n            EventHandler.off(element, event.type, selector, fn);\n          }\n\n          return fn.apply(target, [event]);\n        }\n      }\n    } // To please ESLint\n\n\n    return null;\n  };\n}\n\nfunction findHandler(events, handler, delegationSelector = null) {\n  const uidEventList = Object.keys(events);\n\n  for (let i = 0, len = uidEventList.length; i < len; i++) {\n    const event = events[uidEventList[i]];\n\n    if (event.originalHandler === handler && event.delegationSelector === delegationSelector) {\n      return event;\n    }\n  }\n\n  return null;\n}\n\nfunction normalizeParams(originalTypeEvent, handler, delegationFn) {\n  const delegation = typeof handler === 'string';\n  const originalHandler = delegation ? delegationFn : handler;\n  let typeEvent = getTypeEvent(originalTypeEvent);\n  const isNative = nativeEvents.has(typeEvent);\n\n  if (!isNative) {\n    typeEvent = originalTypeEvent;\n  }\n\n  return [delegation, originalHandler, typeEvent];\n}\n\nfunction addHandler(element, originalTypeEvent, handler, delegationFn, oneOff) {\n  if (typeof originalTypeEvent !== 'string' || !element) {\n    return;\n  }\n\n  if (!handler) {\n    handler = delegationFn;\n    delegationFn = null;\n  } // in case of mouseenter or mouseleave wrap the handler within a function that checks for its DOM position\n  // this prevents the handler from being dispatched the same way as mouseover or mouseout does\n\n\n  if (customEventsRegex.test(originalTypeEvent)) {\n    const wrapFn = fn => {\n      return function (event) {\n        if (!event.relatedTarget || event.relatedTarget !== event.delegateTarget && !event.delegateTarget.contains(event.relatedTarget)) {\n          return fn.call(this, event);\n        }\n      };\n    };\n\n    if (delegationFn) {\n      delegationFn = wrapFn(delegationFn);\n    } else {\n      handler = wrapFn(handler);\n    }\n  }\n\n  const [delegation, originalHandler, typeEvent] = normalizeParams(originalTypeEvent, handler, delegationFn);\n  const events = getEvent(element);\n  const handlers = events[typeEvent] || (events[typeEvent] = {});\n  const previousFn = findHandler(handlers, originalHandler, delegation ? handler : null);\n\n  if (previousFn) {\n    previousFn.oneOff = previousFn.oneOff && oneOff;\n    return;\n  }\n\n  const uid = getUidEvent(originalHandler, originalTypeEvent.replace(namespaceRegex, ''));\n  const fn = delegation ? bootstrapDelegationHandler(element, handler, delegationFn) : bootstrapHandler(element, handler);\n  fn.delegationSelector = delegation ? handler : null;\n  fn.originalHandler = originalHandler;\n  fn.oneOff = oneOff;\n  fn.uidEvent = uid;\n  handlers[uid] = fn;\n  element.addEventListener(typeEvent, fn, delegation);\n}\n\nfunction removeHandler(element, events, typeEvent, handler, delegationSelector) {\n  const fn = findHandler(events[typeEvent], handler, delegationSelector);\n\n  if (!fn) {\n    return;\n  }\n\n  element.removeEventListener(typeEvent, fn, Boolean(delegationSelector));\n  delete events[typeEvent][fn.uidEvent];\n}\n\nfunction removeNamespacedHandlers(element, events, typeEvent, namespace) {\n  const storeElementEvent = events[typeEvent] || {};\n  Object.keys(storeElementEvent).forEach(handlerKey => {\n    if (handlerKey.includes(namespace)) {\n      const event = storeElementEvent[handlerKey];\n      removeHandler(element, events, typeEvent, event.originalHandler, event.delegationSelector);\n    }\n  });\n}\n\nfunction getTypeEvent(event) {\n  // allow to get the native events from namespaced events ('click.bs.button' --> 'click')\n  event = event.replace(stripNameRegex, '');\n  return customEvents[event] || event;\n}\n\nconst EventHandler = {\n  on(element, event, handler, delegationFn) {\n    addHandler(element, event, handler, delegationFn, false);\n  },\n\n  one(element, event, handler, delegationFn) {\n    addHandler(element, event, handler, delegationFn, true);\n  },\n\n  off(element, originalTypeEvent, handler, delegationFn) {\n    if (typeof originalTypeEvent !== 'string' || !element) {\n      return;\n    }\n\n    const [delegation, originalHandler, typeEvent] = normalizeParams(originalTypeEvent, handler, delegationFn);\n    const inNamespace = typeEvent !== originalTypeEvent;\n    const events = getEvent(element);\n    const isNamespace = originalTypeEvent.startsWith('.');\n\n    if (typeof originalHandler !== 'undefined') {\n      // Simplest case: handler is passed, remove that listener ONLY.\n      if (!events || !events[typeEvent]) {\n        return;\n      }\n\n      removeHandler(element, events, typeEvent, originalHandler, delegation ? handler : null);\n      return;\n    }\n\n    if (isNamespace) {\n      Object.keys(events).forEach(elementEvent => {\n        removeNamespacedHandlers(element, events, elementEvent, originalTypeEvent.slice(1));\n      });\n    }\n\n    const storeElementEvent = events[typeEvent] || {};\n    Object.keys(storeElementEvent).forEach(keyHandlers => {\n      const handlerKey = keyHandlers.replace(stripUidRegex, '');\n\n      if (!inNamespace || originalTypeEvent.includes(handlerKey)) {\n        const event = storeElementEvent[keyHandlers];\n        removeHandler(element, events, typeEvent, event.originalHandler, event.delegationSelector);\n      }\n    });\n  },\n\n  trigger(element, event, args) {\n    if (typeof event !== 'string' || !element) {\n      return null;\n    }\n\n    const $ = getjQuery();\n    const typeEvent = getTypeEvent(event);\n    const inNamespace = event !== typeEvent;\n    const isNative = nativeEvents.has(typeEvent);\n    let jQueryEvent;\n    let bubbles = true;\n    let nativeDispatch = true;\n    let defaultPrevented = false;\n    let evt = null;\n\n    if (inNamespace && $) {\n      jQueryEvent = $.Event(event, args);\n      $(element).trigger(jQueryEvent);\n      bubbles = !jQueryEvent.isPropagationStopped();\n      nativeDispatch = !jQueryEvent.isImmediatePropagationStopped();\n      defaultPrevented = jQueryEvent.isDefaultPrevented();\n    }\n\n    if (isNative) {\n      evt = document.createEvent('HTMLEvents');\n      evt.initEvent(typeEvent, bubbles, true);\n    } else {\n      evt = new CustomEvent(event, {\n        bubbles,\n        cancelable: true\n      });\n    } // merge custom information in our event\n\n\n    if (typeof args !== 'undefined') {\n      Object.keys(args).forEach(key => {\n        Object.defineProperty(evt, key, {\n          get() {\n            return args[key];\n          }\n\n        });\n      });\n    }\n\n    if (defaultPrevented) {\n      evt.preventDefault();\n    }\n\n    if (nativeDispatch) {\n      element.dispatchEvent(evt);\n    }\n\n    if (evt.defaultPrevented && typeof jQueryEvent !== 'undefined') {\n      jQueryEvent.preventDefault();\n    }\n\n    return evt;\n  }\n\n};\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): dom/data.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\nconst elementMap = new Map();\nvar Data = {\n  set(element, key, instance) {\n    if (!elementMap.has(element)) {\n      elementMap.set(element, new Map());\n    }\n\n    const instanceMap = elementMap.get(element); // make it clear we only want one instance per element\n    // can be removed later when multiple key/instances are fine to be used\n\n    if (!instanceMap.has(key) && instanceMap.size !== 0) {\n      // eslint-disable-next-line no-console\n      console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(instanceMap.keys())[0]}.`);\n      return;\n    }\n\n    instanceMap.set(key, instance);\n  },\n\n  get(element, key) {\n    if (elementMap.has(element)) {\n      return elementMap.get(element).get(key) || null;\n    }\n\n    return null;\n  },\n\n  remove(element, key) {\n    if (!elementMap.has(element)) {\n      return;\n    }\n\n    const instanceMap = elementMap.get(element);\n    instanceMap.delete(key); // free up element references if there are no instances left for an element\n\n    if (instanceMap.size === 0) {\n      elementMap.delete(element);\n    }\n  }\n\n};\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): base-component.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst VERSION = '5.0.2';\n\nclass BaseComponent {\n  constructor(element) {\n    element = getElement(element);\n\n    if (!element) {\n      return;\n    }\n\n    this._element = element;\n    Data.set(this._element, this.constructor.DATA_KEY, this);\n  }\n\n  dispose() {\n    Data.remove(this._element, this.constructor.DATA_KEY);\n    EventHandler.off(this._element, this.constructor.EVENT_KEY);\n    Object.getOwnPropertyNames(this).forEach(propertyName => {\n      this[propertyName] = null;\n    });\n  }\n\n  _queueCallback(callback, element, isAnimated = true) {\n    executeAfterTransition(callback, element, isAnimated);\n  }\n  /** Static */\n\n\n  static getInstance(element) {\n    return Data.get(element, this.DATA_KEY);\n  }\n\n  static getOrCreateInstance(element, config = {}) {\n    return this.getInstance(element) || new this(element, typeof config === 'object' ? config : null);\n  }\n\n  static get VERSION() {\n    return VERSION;\n  }\n\n  static get NAME() {\n    throw new Error('You have to implement the static method \"NAME\", for each component!');\n  }\n\n  static get DATA_KEY() {\n    return `bs.${this.NAME}`;\n  }\n\n  static get EVENT_KEY() {\n    return `.${this.DATA_KEY}`;\n  }\n\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): alert.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$c = 'alert';\nconst DATA_KEY$b = 'bs.alert';\nconst EVENT_KEY$b = `.${DATA_KEY$b}`;\nconst DATA_API_KEY$8 = '.data-api';\nconst SELECTOR_DISMISS = '[data-bs-dismiss=\"alert\"]';\nconst EVENT_CLOSE = `close${EVENT_KEY$b}`;\nconst EVENT_CLOSED = `closed${EVENT_KEY$b}`;\nconst EVENT_CLICK_DATA_API$7 = `click${EVENT_KEY$b}${DATA_API_KEY$8}`;\nconst CLASS_NAME_ALERT = 'alert';\nconst CLASS_NAME_FADE$6 = 'fade';\nconst CLASS_NAME_SHOW$9 = 'show';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Alert extends BaseComponent {\n  // Getters\n  static get NAME() {\n    return NAME$c;\n  } // Public\n\n\n  close(element) {\n    const rootElement = element ? this._getRootElement(element) : this._element;\n\n    const customEvent = this._triggerCloseEvent(rootElement);\n\n    if (customEvent === null || customEvent.defaultPrevented) {\n      return;\n    }\n\n    this._removeElement(rootElement);\n  } // Private\n\n\n  _getRootElement(element) {\n    return getElementFromSelector(element) || element.closest(`.${CLASS_NAME_ALERT}`);\n  }\n\n  _triggerCloseEvent(element) {\n    return EventHandler.trigger(element, EVENT_CLOSE);\n  }\n\n  _removeElement(element) {\n    element.classList.remove(CLASS_NAME_SHOW$9);\n    const isAnimated = element.classList.contains(CLASS_NAME_FADE$6);\n\n    this._queueCallback(() => this._destroyElement(element), element, isAnimated);\n  }\n\n  _destroyElement(element) {\n    element.remove();\n    EventHandler.trigger(element, EVENT_CLOSED);\n  } // Static\n\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Alert.getOrCreateInstance(this);\n\n      if (config === 'close') {\n        data[config](this);\n      }\n    });\n  }\n\n  static handleDismiss(alertInstance) {\n    return function (event) {\n      if (event) {\n        event.preventDefault();\n      }\n\n      alertInstance.close(this);\n    };\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$7, SELECTOR_DISMISS, Alert.handleDismiss(new Alert()));\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Alert to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Alert);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): button.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$b = 'button';\nconst DATA_KEY$a = 'bs.button';\nconst EVENT_KEY$a = `.${DATA_KEY$a}`;\nconst DATA_API_KEY$7 = '.data-api';\nconst CLASS_NAME_ACTIVE$3 = 'active';\nconst SELECTOR_DATA_TOGGLE$5 = '[data-bs-toggle=\"button\"]';\nconst EVENT_CLICK_DATA_API$6 = `click${EVENT_KEY$a}${DATA_API_KEY$7}`;\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Button extends BaseComponent {\n  // Getters\n  static get NAME() {\n    return NAME$b;\n  } // Public\n\n\n  toggle() {\n    // Toggle class and sync the `aria-pressed` attribute with the return value of the `.toggle()` method\n    this._element.setAttribute('aria-pressed', this._element.classList.toggle(CLASS_NAME_ACTIVE$3));\n  } // Static\n\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Button.getOrCreateInstance(this);\n\n      if (config === 'toggle') {\n        data[config]();\n      }\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$6, SELECTOR_DATA_TOGGLE$5, event => {\n  event.preventDefault();\n  const button = event.target.closest(SELECTOR_DATA_TOGGLE$5);\n  const data = Button.getOrCreateInstance(button);\n  data.toggle();\n});\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Button to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Button);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): dom/manipulator.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\nfunction normalizeData(val) {\n  if (val === 'true') {\n    return true;\n  }\n\n  if (val === 'false') {\n    return false;\n  }\n\n  if (val === Number(val).toString()) {\n    return Number(val);\n  }\n\n  if (val === '' || val === 'null') {\n    return null;\n  }\n\n  return val;\n}\n\nfunction normalizeDataKey(key) {\n  return key.replace(/[A-Z]/g, chr => `-${chr.toLowerCase()}`);\n}\n\nconst Manipulator = {\n  setDataAttribute(element, key, value) {\n    element.setAttribute(`data-bs-${normalizeDataKey(key)}`, value);\n  },\n\n  removeDataAttribute(element, key) {\n    element.removeAttribute(`data-bs-${normalizeDataKey(key)}`);\n  },\n\n  getDataAttributes(element) {\n    if (!element) {\n      return {};\n    }\n\n    const attributes = {};\n    Object.keys(element.dataset).filter(key => key.startsWith('bs')).forEach(key => {\n      let pureKey = key.replace(/^bs/, '');\n      pureKey = pureKey.charAt(0).toLowerCase() + pureKey.slice(1, pureKey.length);\n      attributes[pureKey] = normalizeData(element.dataset[key]);\n    });\n    return attributes;\n  },\n\n  getDataAttribute(element, key) {\n    return normalizeData(element.getAttribute(`data-bs-${normalizeDataKey(key)}`));\n  },\n\n  offset(element) {\n    const rect = element.getBoundingClientRect();\n    return {\n      top: rect.top + document.body.scrollTop,\n      left: rect.left + document.body.scrollLeft\n    };\n  },\n\n  position(element) {\n    return {\n      top: element.offsetTop,\n      left: element.offsetLeft\n    };\n  }\n\n};\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): carousel.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$a = 'carousel';\nconst DATA_KEY$9 = 'bs.carousel';\nconst EVENT_KEY$9 = `.${DATA_KEY$9}`;\nconst DATA_API_KEY$6 = '.data-api';\nconst ARROW_LEFT_KEY = 'ArrowLeft';\nconst ARROW_RIGHT_KEY = 'ArrowRight';\nconst TOUCHEVENT_COMPAT_WAIT = 500; // Time for mouse compat events to fire after touch\n\nconst SWIPE_THRESHOLD = 40;\nconst Default$9 = {\n  interval: 5000,\n  keyboard: true,\n  slide: false,\n  pause: 'hover',\n  wrap: true,\n  touch: true\n};\nconst DefaultType$9 = {\n  interval: '(number|boolean)',\n  keyboard: 'boolean',\n  slide: '(boolean|string)',\n  pause: '(string|boolean)',\n  wrap: 'boolean',\n  touch: 'boolean'\n};\nconst ORDER_NEXT = 'next';\nconst ORDER_PREV = 'prev';\nconst DIRECTION_LEFT = 'left';\nconst DIRECTION_RIGHT = 'right';\nconst KEY_TO_DIRECTION = {\n  [ARROW_LEFT_KEY]: DIRECTION_RIGHT,\n  [ARROW_RIGHT_KEY]: DIRECTION_LEFT\n};\nconst EVENT_SLIDE = `slide${EVENT_KEY$9}`;\nconst EVENT_SLID = `slid${EVENT_KEY$9}`;\nconst EVENT_KEYDOWN = `keydown${EVENT_KEY$9}`;\nconst EVENT_MOUSEENTER = `mouseenter${EVENT_KEY$9}`;\nconst EVENT_MOUSELEAVE = `mouseleave${EVENT_KEY$9}`;\nconst EVENT_TOUCHSTART = `touchstart${EVENT_KEY$9}`;\nconst EVENT_TOUCHMOVE = `touchmove${EVENT_KEY$9}`;\nconst EVENT_TOUCHEND = `touchend${EVENT_KEY$9}`;\nconst EVENT_POINTERDOWN = `pointerdown${EVENT_KEY$9}`;\nconst EVENT_POINTERUP = `pointerup${EVENT_KEY$9}`;\nconst EVENT_DRAG_START = `dragstart${EVENT_KEY$9}`;\nconst EVENT_LOAD_DATA_API$2 = `load${EVENT_KEY$9}${DATA_API_KEY$6}`;\nconst EVENT_CLICK_DATA_API$5 = `click${EVENT_KEY$9}${DATA_API_KEY$6}`;\nconst CLASS_NAME_CAROUSEL = 'carousel';\nconst CLASS_NAME_ACTIVE$2 = 'active';\nconst CLASS_NAME_SLIDE = 'slide';\nconst CLASS_NAME_END = 'carousel-item-end';\nconst CLASS_NAME_START = 'carousel-item-start';\nconst CLASS_NAME_NEXT = 'carousel-item-next';\nconst CLASS_NAME_PREV = 'carousel-item-prev';\nconst CLASS_NAME_POINTER_EVENT = 'pointer-event';\nconst SELECTOR_ACTIVE$1 = '.active';\nconst SELECTOR_ACTIVE_ITEM = '.active.carousel-item';\nconst SELECTOR_ITEM = '.carousel-item';\nconst SELECTOR_ITEM_IMG = '.carousel-item img';\nconst SELECTOR_NEXT_PREV = '.carousel-item-next, .carousel-item-prev';\nconst SELECTOR_INDICATORS = '.carousel-indicators';\nconst SELECTOR_INDICATOR = '[data-bs-target]';\nconst SELECTOR_DATA_SLIDE = '[data-bs-slide], [data-bs-slide-to]';\nconst SELECTOR_DATA_RIDE = '[data-bs-ride=\"carousel\"]';\nconst POINTER_TYPE_TOUCH = 'touch';\nconst POINTER_TYPE_PEN = 'pen';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Carousel extends BaseComponent {\n  constructor(element, config) {\n    super(element);\n    this._items = null;\n    this._interval = null;\n    this._activeElement = null;\n    this._isPaused = false;\n    this._isSliding = false;\n    this.touchTimeout = null;\n    this.touchStartX = 0;\n    this.touchDeltaX = 0;\n    this._config = this._getConfig(config);\n    this._indicatorsElement = SelectorEngine.findOne(SELECTOR_INDICATORS, this._element);\n    this._touchSupported = 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0;\n    this._pointerEvent = Boolean(window.PointerEvent);\n\n    this._addEventListeners();\n  } // Getters\n\n\n  static get Default() {\n    return Default$9;\n  }\n\n  static get NAME() {\n    return NAME$a;\n  } // Public\n\n\n  next() {\n    this._slide(ORDER_NEXT);\n  }\n\n  nextWhenVisible() {\n    // Don't call next when the page isn't visible\n    // or the carousel or its parent isn't visible\n    if (!document.hidden && isVisible(this._element)) {\n      this.next();\n    }\n  }\n\n  prev() {\n    this._slide(ORDER_PREV);\n  }\n\n  pause(event) {\n    if (!event) {\n      this._isPaused = true;\n    }\n\n    if (SelectorEngine.findOne(SELECTOR_NEXT_PREV, this._element)) {\n      triggerTransitionEnd(this._element);\n      this.cycle(true);\n    }\n\n    clearInterval(this._interval);\n    this._interval = null;\n  }\n\n  cycle(event) {\n    if (!event) {\n      this._isPaused = false;\n    }\n\n    if (this._interval) {\n      clearInterval(this._interval);\n      this._interval = null;\n    }\n\n    if (this._config && this._config.interval && !this._isPaused) {\n      this._updateInterval();\n\n      this._interval = setInterval((document.visibilityState ? this.nextWhenVisible : this.next).bind(this), this._config.interval);\n    }\n  }\n\n  to(index) {\n    this._activeElement = SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element);\n\n    const activeIndex = this._getItemIndex(this._activeElement);\n\n    if (index > this._items.length - 1 || index < 0) {\n      return;\n    }\n\n    if (this._isSliding) {\n      EventHandler.one(this._element, EVENT_SLID, () => this.to(index));\n      return;\n    }\n\n    if (activeIndex === index) {\n      this.pause();\n      this.cycle();\n      return;\n    }\n\n    const order = index > activeIndex ? ORDER_NEXT : ORDER_PREV;\n\n    this._slide(order, this._items[index]);\n  } // Private\n\n\n  _getConfig(config) {\n    config = { ...Default$9,\n      ...Manipulator.getDataAttributes(this._element),\n      ...(typeof config === 'object' ? config : {})\n    };\n    typeCheckConfig(NAME$a, config, DefaultType$9);\n    return config;\n  }\n\n  _handleSwipe() {\n    const absDeltax = Math.abs(this.touchDeltaX);\n\n    if (absDeltax <= SWIPE_THRESHOLD) {\n      return;\n    }\n\n    const direction = absDeltax / this.touchDeltaX;\n    this.touchDeltaX = 0;\n\n    if (!direction) {\n      return;\n    }\n\n    this._slide(direction > 0 ? DIRECTION_RIGHT : DIRECTION_LEFT);\n  }\n\n  _addEventListeners() {\n    if (this._config.keyboard) {\n      EventHandler.on(this._element, EVENT_KEYDOWN, event => this._keydown(event));\n    }\n\n    if (this._config.pause === 'hover') {\n      EventHandler.on(this._element, EVENT_MOUSEENTER, event => this.pause(event));\n      EventHandler.on(this._element, EVENT_MOUSELEAVE, event => this.cycle(event));\n    }\n\n    if (this._config.touch && this._touchSupported) {\n      this._addTouchEventListeners();\n    }\n  }\n\n  _addTouchEventListeners() {\n    const start = event => {\n      if (this._pointerEvent && (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH)) {\n        this.touchStartX = event.clientX;\n      } else if (!this._pointerEvent) {\n        this.touchStartX = event.touches[0].clientX;\n      }\n    };\n\n    const move = event => {\n      // ensure swiping with one touch and not pinching\n      this.touchDeltaX = event.touches && event.touches.length > 1 ? 0 : event.touches[0].clientX - this.touchStartX;\n    };\n\n    const end = event => {\n      if (this._pointerEvent && (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH)) {\n        this.touchDeltaX = event.clientX - this.touchStartX;\n      }\n\n      this._handleSwipe();\n\n      if (this._config.pause === 'hover') {\n        // If it's a touch-enabled device, mouseenter/leave are fired as\n        // part of the mouse compatibility events on first tap - the carousel\n        // would stop cycling until user tapped out of it;\n        // here, we listen for touchend, explicitly pause the carousel\n        // (as if it's the second time we tap on it, mouseenter compat event\n        // is NOT fired) and after a timeout (to allow for mouse compatibility\n        // events to fire) we explicitly restart cycling\n        this.pause();\n\n        if (this.touchTimeout) {\n          clearTimeout(this.touchTimeout);\n        }\n\n        this.touchTimeout = setTimeout(event => this.cycle(event), TOUCHEVENT_COMPAT_WAIT + this._config.interval);\n      }\n    };\n\n    SelectorEngine.find(SELECTOR_ITEM_IMG, this._element).forEach(itemImg => {\n      EventHandler.on(itemImg, EVENT_DRAG_START, e => e.preventDefault());\n    });\n\n    if (this._pointerEvent) {\n      EventHandler.on(this._element, EVENT_POINTERDOWN, event => start(event));\n      EventHandler.on(this._element, EVENT_POINTERUP, event => end(event));\n\n      this._element.classList.add(CLASS_NAME_POINTER_EVENT);\n    } else {\n      EventHandler.on(this._element, EVENT_TOUCHSTART, event => start(event));\n      EventHandler.on(this._element, EVENT_TOUCHMOVE, event => move(event));\n      EventHandler.on(this._element, EVENT_TOUCHEND, event => end(event));\n    }\n  }\n\n  _keydown(event) {\n    if (/input|textarea/i.test(event.target.tagName)) {\n      return;\n    }\n\n    const direction = KEY_TO_DIRECTION[event.key];\n\n    if (direction) {\n      event.preventDefault();\n\n      this._slide(direction);\n    }\n  }\n\n  _getItemIndex(element) {\n    this._items = element && element.parentNode ? SelectorEngine.find(SELECTOR_ITEM, element.parentNode) : [];\n    return this._items.indexOf(element);\n  }\n\n  _getItemByOrder(order, activeElement) {\n    const isNext = order === ORDER_NEXT;\n    return getNextActiveElement(this._items, activeElement, isNext, this._config.wrap);\n  }\n\n  _triggerSlideEvent(relatedTarget, eventDirectionName) {\n    const targetIndex = this._getItemIndex(relatedTarget);\n\n    const fromIndex = this._getItemIndex(SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element));\n\n    return EventHandler.trigger(this._element, EVENT_SLIDE, {\n      relatedTarget,\n      direction: eventDirectionName,\n      from: fromIndex,\n      to: targetIndex\n    });\n  }\n\n  _setActiveIndicatorElement(element) {\n    if (this._indicatorsElement) {\n      const activeIndicator = SelectorEngine.findOne(SELECTOR_ACTIVE$1, this._indicatorsElement);\n      activeIndicator.classList.remove(CLASS_NAME_ACTIVE$2);\n      activeIndicator.removeAttribute('aria-current');\n      const indicators = SelectorEngine.find(SELECTOR_INDICATOR, this._indicatorsElement);\n\n      for (let i = 0; i < indicators.length; i++) {\n        if (Number.parseInt(indicators[i].getAttribute('data-bs-slide-to'), 10) === this._getItemIndex(element)) {\n          indicators[i].classList.add(CLASS_NAME_ACTIVE$2);\n          indicators[i].setAttribute('aria-current', 'true');\n          break;\n        }\n      }\n    }\n  }\n\n  _updateInterval() {\n    const element = this._activeElement || SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element);\n\n    if (!element) {\n      return;\n    }\n\n    const elementInterval = Number.parseInt(element.getAttribute('data-bs-interval'), 10);\n\n    if (elementInterval) {\n      this._config.defaultInterval = this._config.defaultInterval || this._config.interval;\n      this._config.interval = elementInterval;\n    } else {\n      this._config.interval = this._config.defaultInterval || this._config.interval;\n    }\n  }\n\n  _slide(directionOrOrder, element) {\n    const order = this._directionToOrder(directionOrOrder);\n\n    const activeElement = SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element);\n\n    const activeElementIndex = this._getItemIndex(activeElement);\n\n    const nextElement = element || this._getItemByOrder(order, activeElement);\n\n    const nextElementIndex = this._getItemIndex(nextElement);\n\n    const isCycling = Boolean(this._interval);\n    const isNext = order === ORDER_NEXT;\n    const directionalClassName = isNext ? CLASS_NAME_START : CLASS_NAME_END;\n    const orderClassName = isNext ? CLASS_NAME_NEXT : CLASS_NAME_PREV;\n\n    const eventDirectionName = this._orderToDirection(order);\n\n    if (nextElement && nextElement.classList.contains(CLASS_NAME_ACTIVE$2)) {\n      this._isSliding = false;\n      return;\n    }\n\n    if (this._isSliding) {\n      return;\n    }\n\n    const slideEvent = this._triggerSlideEvent(nextElement, eventDirectionName);\n\n    if (slideEvent.defaultPrevented) {\n      return;\n    }\n\n    if (!activeElement || !nextElement) {\n      // Some weirdness is happening, so we bail\n      return;\n    }\n\n    this._isSliding = true;\n\n    if (isCycling) {\n      this.pause();\n    }\n\n    this._setActiveIndicatorElement(nextElement);\n\n    this._activeElement = nextElement;\n\n    const triggerSlidEvent = () => {\n      EventHandler.trigger(this._element, EVENT_SLID, {\n        relatedTarget: nextElement,\n        direction: eventDirectionName,\n        from: activeElementIndex,\n        to: nextElementIndex\n      });\n    };\n\n    if (this._element.classList.contains(CLASS_NAME_SLIDE)) {\n      nextElement.classList.add(orderClassName);\n      reflow(nextElement);\n      activeElement.classList.add(directionalClassName);\n      nextElement.classList.add(directionalClassName);\n\n      const completeCallBack = () => {\n        nextElement.classList.remove(directionalClassName, orderClassName);\n        nextElement.classList.add(CLASS_NAME_ACTIVE$2);\n        activeElement.classList.remove(CLASS_NAME_ACTIVE$2, orderClassName, directionalClassName);\n        this._isSliding = false;\n        setTimeout(triggerSlidEvent, 0);\n      };\n\n      this._queueCallback(completeCallBack, activeElement, true);\n    } else {\n      activeElement.classList.remove(CLASS_NAME_ACTIVE$2);\n      nextElement.classList.add(CLASS_NAME_ACTIVE$2);\n      this._isSliding = false;\n      triggerSlidEvent();\n    }\n\n    if (isCycling) {\n      this.cycle();\n    }\n  }\n\n  _directionToOrder(direction) {\n    if (![DIRECTION_RIGHT, DIRECTION_LEFT].includes(direction)) {\n      return direction;\n    }\n\n    if (isRTL()) {\n      return direction === DIRECTION_LEFT ? ORDER_PREV : ORDER_NEXT;\n    }\n\n    return direction === DIRECTION_LEFT ? ORDER_NEXT : ORDER_PREV;\n  }\n\n  _orderToDirection(order) {\n    if (![ORDER_NEXT, ORDER_PREV].includes(order)) {\n      return order;\n    }\n\n    if (isRTL()) {\n      return order === ORDER_PREV ? DIRECTION_LEFT : DIRECTION_RIGHT;\n    }\n\n    return order === ORDER_PREV ? DIRECTION_RIGHT : DIRECTION_LEFT;\n  } // Static\n\n\n  static carouselInterface(element, config) {\n    const data = Carousel.getOrCreateInstance(element, config);\n    let {\n      _config\n    } = data;\n\n    if (typeof config === 'object') {\n      _config = { ..._config,\n        ...config\n      };\n    }\n\n    const action = typeof config === 'string' ? config : _config.slide;\n\n    if (typeof config === 'number') {\n      data.to(config);\n    } else if (typeof action === 'string') {\n      if (typeof data[action] === 'undefined') {\n        throw new TypeError(`No method named \"${action}\"`);\n      }\n\n      data[action]();\n    } else if (_config.interval && _config.ride) {\n      data.pause();\n      data.cycle();\n    }\n  }\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      Carousel.carouselInterface(this, config);\n    });\n  }\n\n  static dataApiClickHandler(event) {\n    const target = getElementFromSelector(this);\n\n    if (!target || !target.classList.contains(CLASS_NAME_CAROUSEL)) {\n      return;\n    }\n\n    const config = { ...Manipulator.getDataAttributes(target),\n      ...Manipulator.getDataAttributes(this)\n    };\n    const slideIndex = this.getAttribute('data-bs-slide-to');\n\n    if (slideIndex) {\n      config.interval = false;\n    }\n\n    Carousel.carouselInterface(target, config);\n\n    if (slideIndex) {\n      Carousel.getInstance(target).to(slideIndex);\n    }\n\n    event.preventDefault();\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$5, SELECTOR_DATA_SLIDE, Carousel.dataApiClickHandler);\nEventHandler.on(window, EVENT_LOAD_DATA_API$2, () => {\n  const carousels = SelectorEngine.find(SELECTOR_DATA_RIDE);\n\n  for (let i = 0, len = carousels.length; i < len; i++) {\n    Carousel.carouselInterface(carousels[i], Carousel.getInstance(carousels[i]));\n  }\n});\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Carousel to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Carousel);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): collapse.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$9 = 'collapse';\nconst DATA_KEY$8 = 'bs.collapse';\nconst EVENT_KEY$8 = `.${DATA_KEY$8}`;\nconst DATA_API_KEY$5 = '.data-api';\nconst Default$8 = {\n  toggle: true,\n  parent: ''\n};\nconst DefaultType$8 = {\n  toggle: 'boolean',\n  parent: '(string|element)'\n};\nconst EVENT_SHOW$5 = `show${EVENT_KEY$8}`;\nconst EVENT_SHOWN$5 = `shown${EVENT_KEY$8}`;\nconst EVENT_HIDE$5 = `hide${EVENT_KEY$8}`;\nconst EVENT_HIDDEN$5 = `hidden${EVENT_KEY$8}`;\nconst EVENT_CLICK_DATA_API$4 = `click${EVENT_KEY$8}${DATA_API_KEY$5}`;\nconst CLASS_NAME_SHOW$8 = 'show';\nconst CLASS_NAME_COLLAPSE = 'collapse';\nconst CLASS_NAME_COLLAPSING = 'collapsing';\nconst CLASS_NAME_COLLAPSED = 'collapsed';\nconst WIDTH = 'width';\nconst HEIGHT = 'height';\nconst SELECTOR_ACTIVES = '.show, .collapsing';\nconst SELECTOR_DATA_TOGGLE$4 = '[data-bs-toggle=\"collapse\"]';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Collapse extends BaseComponent {\n  constructor(element, config) {\n    super(element);\n    this._isTransitioning = false;\n    this._config = this._getConfig(config);\n    this._triggerArray = SelectorEngine.find(`${SELECTOR_DATA_TOGGLE$4}[href=\"#${this._element.id}\"],` + `${SELECTOR_DATA_TOGGLE$4}[data-bs-target=\"#${this._element.id}\"]`);\n    const toggleList = SelectorEngine.find(SELECTOR_DATA_TOGGLE$4);\n\n    for (let i = 0, len = toggleList.length; i < len; i++) {\n      const elem = toggleList[i];\n      const selector = getSelectorFromElement(elem);\n      const filterElement = SelectorEngine.find(selector).filter(foundElem => foundElem === this._element);\n\n      if (selector !== null && filterElement.length) {\n        this._selector = selector;\n\n        this._triggerArray.push(elem);\n      }\n    }\n\n    this._parent = this._config.parent ? this._getParent() : null;\n\n    if (!this._config.parent) {\n      this._addAriaAndCollapsedClass(this._element, this._triggerArray);\n    }\n\n    if (this._config.toggle) {\n      this.toggle();\n    }\n  } // Getters\n\n\n  static get Default() {\n    return Default$8;\n  }\n\n  static get NAME() {\n    return NAME$9;\n  } // Public\n\n\n  toggle() {\n    if (this._element.classList.contains(CLASS_NAME_SHOW$8)) {\n      this.hide();\n    } else {\n      this.show();\n    }\n  }\n\n  show() {\n    if (this._isTransitioning || this._element.classList.contains(CLASS_NAME_SHOW$8)) {\n      return;\n    }\n\n    let actives;\n    let activesData;\n\n    if (this._parent) {\n      actives = SelectorEngine.find(SELECTOR_ACTIVES, this._parent).filter(elem => {\n        if (typeof this._config.parent === 'string') {\n          return elem.getAttribute('data-bs-parent') === this._config.parent;\n        }\n\n        return elem.classList.contains(CLASS_NAME_COLLAPSE);\n      });\n\n      if (actives.length === 0) {\n        actives = null;\n      }\n    }\n\n    const container = SelectorEngine.findOne(this._selector);\n\n    if (actives) {\n      const tempActiveData = actives.find(elem => container !== elem);\n      activesData = tempActiveData ? Collapse.getInstance(tempActiveData) : null;\n\n      if (activesData && activesData._isTransitioning) {\n        return;\n      }\n    }\n\n    const startEvent = EventHandler.trigger(this._element, EVENT_SHOW$5);\n\n    if (startEvent.defaultPrevented) {\n      return;\n    }\n\n    if (actives) {\n      actives.forEach(elemActive => {\n        if (container !== elemActive) {\n          Collapse.collapseInterface(elemActive, 'hide');\n        }\n\n        if (!activesData) {\n          Data.set(elemActive, DATA_KEY$8, null);\n        }\n      });\n    }\n\n    const dimension = this._getDimension();\n\n    this._element.classList.remove(CLASS_NAME_COLLAPSE);\n\n    this._element.classList.add(CLASS_NAME_COLLAPSING);\n\n    this._element.style[dimension] = 0;\n\n    if (this._triggerArray.length) {\n      this._triggerArray.forEach(element => {\n        element.classList.remove(CLASS_NAME_COLLAPSED);\n        element.setAttribute('aria-expanded', true);\n      });\n    }\n\n    this.setTransitioning(true);\n\n    const complete = () => {\n      this._element.classList.remove(CLASS_NAME_COLLAPSING);\n\n      this._element.classList.add(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$8);\n\n      this._element.style[dimension] = '';\n      this.setTransitioning(false);\n      EventHandler.trigger(this._element, EVENT_SHOWN$5);\n    };\n\n    const capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1);\n    const scrollSize = `scroll${capitalizedDimension}`;\n\n    this._queueCallback(complete, this._element, true);\n\n    this._element.style[dimension] = `${this._element[scrollSize]}px`;\n  }\n\n  hide() {\n    if (this._isTransitioning || !this._element.classList.contains(CLASS_NAME_SHOW$8)) {\n      return;\n    }\n\n    const startEvent = EventHandler.trigger(this._element, EVENT_HIDE$5);\n\n    if (startEvent.defaultPrevented) {\n      return;\n    }\n\n    const dimension = this._getDimension();\n\n    this._element.style[dimension] = `${this._element.getBoundingClientRect()[dimension]}px`;\n    reflow(this._element);\n\n    this._element.classList.add(CLASS_NAME_COLLAPSING);\n\n    this._element.classList.remove(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$8);\n\n    const triggerArrayLength = this._triggerArray.length;\n\n    if (triggerArrayLength > 0) {\n      for (let i = 0; i < triggerArrayLength; i++) {\n        const trigger = this._triggerArray[i];\n        const elem = getElementFromSelector(trigger);\n\n        if (elem && !elem.classList.contains(CLASS_NAME_SHOW$8)) {\n          trigger.classList.add(CLASS_NAME_COLLAPSED);\n          trigger.setAttribute('aria-expanded', false);\n        }\n      }\n    }\n\n    this.setTransitioning(true);\n\n    const complete = () => {\n      this.setTransitioning(false);\n\n      this._element.classList.remove(CLASS_NAME_COLLAPSING);\n\n      this._element.classList.add(CLASS_NAME_COLLAPSE);\n\n      EventHandler.trigger(this._element, EVENT_HIDDEN$5);\n    };\n\n    this._element.style[dimension] = '';\n\n    this._queueCallback(complete, this._element, true);\n  }\n\n  setTransitioning(isTransitioning) {\n    this._isTransitioning = isTransitioning;\n  } // Private\n\n\n  _getConfig(config) {\n    config = { ...Default$8,\n      ...config\n    };\n    config.toggle = Boolean(config.toggle); // Coerce string values\n\n    typeCheckConfig(NAME$9, config, DefaultType$8);\n    return config;\n  }\n\n  _getDimension() {\n    return this._element.classList.contains(WIDTH) ? WIDTH : HEIGHT;\n  }\n\n  _getParent() {\n    let {\n      parent\n    } = this._config;\n    parent = getElement(parent);\n    const selector = `${SELECTOR_DATA_TOGGLE$4}[data-bs-parent=\"${parent}\"]`;\n    SelectorEngine.find(selector, parent).forEach(element => {\n      const selected = getElementFromSelector(element);\n\n      this._addAriaAndCollapsedClass(selected, [element]);\n    });\n    return parent;\n  }\n\n  _addAriaAndCollapsedClass(element, triggerArray) {\n    if (!element || !triggerArray.length) {\n      return;\n    }\n\n    const isOpen = element.classList.contains(CLASS_NAME_SHOW$8);\n    triggerArray.forEach(elem => {\n      if (isOpen) {\n        elem.classList.remove(CLASS_NAME_COLLAPSED);\n      } else {\n        elem.classList.add(CLASS_NAME_COLLAPSED);\n      }\n\n      elem.setAttribute('aria-expanded', isOpen);\n    });\n  } // Static\n\n\n  static collapseInterface(element, config) {\n    let data = Collapse.getInstance(element);\n    const _config = { ...Default$8,\n      ...Manipulator.getDataAttributes(element),\n      ...(typeof config === 'object' && config ? config : {})\n    };\n\n    if (!data && _config.toggle && typeof config === 'string' && /show|hide/.test(config)) {\n      _config.toggle = false;\n    }\n\n    if (!data) {\n      data = new Collapse(element, _config);\n    }\n\n    if (typeof config === 'string') {\n      if (typeof data[config] === 'undefined') {\n        throw new TypeError(`No method named \"${config}\"`);\n      }\n\n      data[config]();\n    }\n  }\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      Collapse.collapseInterface(this, config);\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$4, SELECTOR_DATA_TOGGLE$4, function (event) {\n  // preventDefault only for <a> elements (which change the URL) not inside the collapsible element\n  if (event.target.tagName === 'A' || event.delegateTarget && event.delegateTarget.tagName === 'A') {\n    event.preventDefault();\n  }\n\n  const triggerData = Manipulator.getDataAttributes(this);\n  const selector = getSelectorFromElement(this);\n  const selectorElements = SelectorEngine.find(selector);\n  selectorElements.forEach(element => {\n    const data = Collapse.getInstance(element);\n    let config;\n\n    if (data) {\n      // update parent attribute\n      if (data._parent === null && typeof triggerData.parent === 'string') {\n        data._config.parent = triggerData.parent;\n        data._parent = data._getParent();\n      }\n\n      config = 'toggle';\n    } else {\n      config = triggerData;\n    }\n\n    Collapse.collapseInterface(element, config);\n  });\n});\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Collapse to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Collapse);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): dropdown.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$8 = 'dropdown';\nconst DATA_KEY$7 = 'bs.dropdown';\nconst EVENT_KEY$7 = `.${DATA_KEY$7}`;\nconst DATA_API_KEY$4 = '.data-api';\nconst ESCAPE_KEY$2 = 'Escape';\nconst SPACE_KEY = 'Space';\nconst TAB_KEY = 'Tab';\nconst ARROW_UP_KEY = 'ArrowUp';\nconst ARROW_DOWN_KEY = 'ArrowDown';\nconst RIGHT_MOUSE_BUTTON = 2; // MouseEvent.button value for the secondary button, usually the right button\n\nconst REGEXP_KEYDOWN = new RegExp(`${ARROW_UP_KEY}|${ARROW_DOWN_KEY}|${ESCAPE_KEY$2}`);\nconst EVENT_HIDE$4 = `hide${EVENT_KEY$7}`;\nconst EVENT_HIDDEN$4 = `hidden${EVENT_KEY$7}`;\nconst EVENT_SHOW$4 = `show${EVENT_KEY$7}`;\nconst EVENT_SHOWN$4 = `shown${EVENT_KEY$7}`;\nconst EVENT_CLICK = `click${EVENT_KEY$7}`;\nconst EVENT_CLICK_DATA_API$3 = `click${EVENT_KEY$7}${DATA_API_KEY$4}`;\nconst EVENT_KEYDOWN_DATA_API = `keydown${EVENT_KEY$7}${DATA_API_KEY$4}`;\nconst EVENT_KEYUP_DATA_API = `keyup${EVENT_KEY$7}${DATA_API_KEY$4}`;\nconst CLASS_NAME_SHOW$7 = 'show';\nconst CLASS_NAME_DROPUP = 'dropup';\nconst CLASS_NAME_DROPEND = 'dropend';\nconst CLASS_NAME_DROPSTART = 'dropstart';\nconst CLASS_NAME_NAVBAR = 'navbar';\nconst SELECTOR_DATA_TOGGLE$3 = '[data-bs-toggle=\"dropdown\"]';\nconst SELECTOR_MENU = '.dropdown-menu';\nconst SELECTOR_NAVBAR_NAV = '.navbar-nav';\nconst SELECTOR_VISIBLE_ITEMS = '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)';\nconst PLACEMENT_TOP = isRTL() ? 'top-end' : 'top-start';\nconst PLACEMENT_TOPEND = isRTL() ? 'top-start' : 'top-end';\nconst PLACEMENT_BOTTOM = isRTL() ? 'bottom-end' : 'bottom-start';\nconst PLACEMENT_BOTTOMEND = isRTL() ? 'bottom-start' : 'bottom-end';\nconst PLACEMENT_RIGHT = isRTL() ? 'left-start' : 'right-start';\nconst PLACEMENT_LEFT = isRTL() ? 'right-start' : 'left-start';\nconst Default$7 = {\n  offset: [0, 2],\n  boundary: 'clippingParents',\n  reference: 'toggle',\n  display: 'dynamic',\n  popperConfig: null,\n  autoClose: true\n};\nconst DefaultType$7 = {\n  offset: '(array|string|function)',\n  boundary: '(string|element)',\n  reference: '(string|element|object)',\n  display: 'string',\n  popperConfig: '(null|object|function)',\n  autoClose: '(boolean|string)'\n};\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Dropdown extends BaseComponent {\n  constructor(element, config) {\n    super(element);\n    this._popper = null;\n    this._config = this._getConfig(config);\n    this._menu = this._getMenuElement();\n    this._inNavbar = this._detectNavbar();\n\n    this._addEventListeners();\n  } // Getters\n\n\n  static get Default() {\n    return Default$7;\n  }\n\n  static get DefaultType() {\n    return DefaultType$7;\n  }\n\n  static get NAME() {\n    return NAME$8;\n  } // Public\n\n\n  toggle() {\n    if (isDisabled(this._element)) {\n      return;\n    }\n\n    const isActive = this._element.classList.contains(CLASS_NAME_SHOW$7);\n\n    if (isActive) {\n      this.hide();\n      return;\n    }\n\n    this.show();\n  }\n\n  show() {\n    if (isDisabled(this._element) || this._menu.classList.contains(CLASS_NAME_SHOW$7)) {\n      return;\n    }\n\n    const parent = Dropdown.getParentFromElement(this._element);\n    const relatedTarget = {\n      relatedTarget: this._element\n    };\n    const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$4, relatedTarget);\n\n    if (showEvent.defaultPrevented) {\n      return;\n    } // Totally disable Popper for Dropdowns in Navbar\n\n\n    if (this._inNavbar) {\n      Manipulator.setDataAttribute(this._menu, 'popper', 'none');\n    } else {\n      if (typeof Popper === 'undefined') {\n        throw new TypeError('Bootstrap\\'s dropdowns require Popper (https://popper.js.org)');\n      }\n\n      let referenceElement = this._element;\n\n      if (this._config.reference === 'parent') {\n        referenceElement = parent;\n      } else if (isElement(this._config.reference)) {\n        referenceElement = getElement(this._config.reference);\n      } else if (typeof this._config.reference === 'object') {\n        referenceElement = this._config.reference;\n      }\n\n      const popperConfig = this._getPopperConfig();\n\n      const isDisplayStatic = popperConfig.modifiers.find(modifier => modifier.name === 'applyStyles' && modifier.enabled === false);\n      this._popper = Popper.createPopper(referenceElement, this._menu, popperConfig);\n\n      if (isDisplayStatic) {\n        Manipulator.setDataAttribute(this._menu, 'popper', 'static');\n      }\n    } // If this is a touch-enabled device we add extra\n    // empty mouseover listeners to the body's immediate children;\n    // only needed because of broken event delegation on iOS\n    // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n\n\n    if ('ontouchstart' in document.documentElement && !parent.closest(SELECTOR_NAVBAR_NAV)) {\n      [].concat(...document.body.children).forEach(elem => EventHandler.on(elem, 'mouseover', noop));\n    }\n\n    this._element.focus();\n\n    this._element.setAttribute('aria-expanded', true);\n\n    this._menu.classList.toggle(CLASS_NAME_SHOW$7);\n\n    this._element.classList.toggle(CLASS_NAME_SHOW$7);\n\n    EventHandler.trigger(this._element, EVENT_SHOWN$4, relatedTarget);\n  }\n\n  hide() {\n    if (isDisabled(this._element) || !this._menu.classList.contains(CLASS_NAME_SHOW$7)) {\n      return;\n    }\n\n    const relatedTarget = {\n      relatedTarget: this._element\n    };\n\n    this._completeHide(relatedTarget);\n  }\n\n  dispose() {\n    if (this._popper) {\n      this._popper.destroy();\n    }\n\n    super.dispose();\n  }\n\n  update() {\n    this._inNavbar = this._detectNavbar();\n\n    if (this._popper) {\n      this._popper.update();\n    }\n  } // Private\n\n\n  _addEventListeners() {\n    EventHandler.on(this._element, EVENT_CLICK, event => {\n      event.preventDefault();\n      this.toggle();\n    });\n  }\n\n  _completeHide(relatedTarget) {\n    const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$4, relatedTarget);\n\n    if (hideEvent.defaultPrevented) {\n      return;\n    } // If this is a touch-enabled device we remove the extra\n    // empty mouseover listeners we added for iOS support\n\n\n    if ('ontouchstart' in document.documentElement) {\n      [].concat(...document.body.children).forEach(elem => EventHandler.off(elem, 'mouseover', noop));\n    }\n\n    if (this._popper) {\n      this._popper.destroy();\n    }\n\n    this._menu.classList.remove(CLASS_NAME_SHOW$7);\n\n    this._element.classList.remove(CLASS_NAME_SHOW$7);\n\n    this._element.setAttribute('aria-expanded', 'false');\n\n    Manipulator.removeDataAttribute(this._menu, 'popper');\n    EventHandler.trigger(this._element, EVENT_HIDDEN$4, relatedTarget);\n  }\n\n  _getConfig(config) {\n    config = { ...this.constructor.Default,\n      ...Manipulator.getDataAttributes(this._element),\n      ...config\n    };\n    typeCheckConfig(NAME$8, config, this.constructor.DefaultType);\n\n    if (typeof config.reference === 'object' && !isElement(config.reference) && typeof config.reference.getBoundingClientRect !== 'function') {\n      // Popper virtual elements require a getBoundingClientRect method\n      throw new TypeError(`${NAME$8.toUpperCase()}: Option \"reference\" provided type \"object\" without a required \"getBoundingClientRect\" method.`);\n    }\n\n    return config;\n  }\n\n  _getMenuElement() {\n    return SelectorEngine.next(this._element, SELECTOR_MENU)[0];\n  }\n\n  _getPlacement() {\n    const parentDropdown = this._element.parentNode;\n\n    if (parentDropdown.classList.contains(CLASS_NAME_DROPEND)) {\n      return PLACEMENT_RIGHT;\n    }\n\n    if (parentDropdown.classList.contains(CLASS_NAME_DROPSTART)) {\n      return PLACEMENT_LEFT;\n    } // We need to trim the value because custom properties can also include spaces\n\n\n    const isEnd = getComputedStyle(this._menu).getPropertyValue('--bs-position').trim() === 'end';\n\n    if (parentDropdown.classList.contains(CLASS_NAME_DROPUP)) {\n      return isEnd ? PLACEMENT_TOPEND : PLACEMENT_TOP;\n    }\n\n    return isEnd ? PLACEMENT_BOTTOMEND : PLACEMENT_BOTTOM;\n  }\n\n  _detectNavbar() {\n    return this._element.closest(`.${CLASS_NAME_NAVBAR}`) !== null;\n  }\n\n  _getOffset() {\n    const {\n      offset\n    } = this._config;\n\n    if (typeof offset === 'string') {\n      return offset.split(',').map(val => Number.parseInt(val, 10));\n    }\n\n    if (typeof offset === 'function') {\n      return popperData => offset(popperData, this._element);\n    }\n\n    return offset;\n  }\n\n  _getPopperConfig() {\n    const defaultBsPopperConfig = {\n      placement: this._getPlacement(),\n      modifiers: [{\n        name: 'preventOverflow',\n        options: {\n          boundary: this._config.boundary\n        }\n      }, {\n        name: 'offset',\n        options: {\n          offset: this._getOffset()\n        }\n      }]\n    }; // Disable Popper if we have a static display\n\n    if (this._config.display === 'static') {\n      defaultBsPopperConfig.modifiers = [{\n        name: 'applyStyles',\n        enabled: false\n      }];\n    }\n\n    return { ...defaultBsPopperConfig,\n      ...(typeof this._config.popperConfig === 'function' ? this._config.popperConfig(defaultBsPopperConfig) : this._config.popperConfig)\n    };\n  }\n\n  _selectMenuItem({\n    key,\n    target\n  }) {\n    const items = SelectorEngine.find(SELECTOR_VISIBLE_ITEMS, this._menu).filter(isVisible);\n\n    if (!items.length) {\n      return;\n    } // if target isn't included in items (e.g. when expanding the dropdown)\n    // allow cycling to get the last item in case key equals ARROW_UP_KEY\n\n\n    getNextActiveElement(items, target, key === ARROW_DOWN_KEY, !items.includes(target)).focus();\n  } // Static\n\n\n  static dropdownInterface(element, config) {\n    const data = Dropdown.getOrCreateInstance(element, config);\n\n    if (typeof config === 'string') {\n      if (typeof data[config] === 'undefined') {\n        throw new TypeError(`No method named \"${config}\"`);\n      }\n\n      data[config]();\n    }\n  }\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      Dropdown.dropdownInterface(this, config);\n    });\n  }\n\n  static clearMenus(event) {\n    if (event && (event.button === RIGHT_MOUSE_BUTTON || event.type === 'keyup' && event.key !== TAB_KEY)) {\n      return;\n    }\n\n    const toggles = SelectorEngine.find(SELECTOR_DATA_TOGGLE$3);\n\n    for (let i = 0, len = toggles.length; i < len; i++) {\n      const context = Dropdown.getInstance(toggles[i]);\n\n      if (!context || context._config.autoClose === false) {\n        continue;\n      }\n\n      if (!context._element.classList.contains(CLASS_NAME_SHOW$7)) {\n        continue;\n      }\n\n      const relatedTarget = {\n        relatedTarget: context._element\n      };\n\n      if (event) {\n        const composedPath = event.composedPath();\n        const isMenuTarget = composedPath.includes(context._menu);\n\n        if (composedPath.includes(context._element) || context._config.autoClose === 'inside' && !isMenuTarget || context._config.autoClose === 'outside' && isMenuTarget) {\n          continue;\n        } // Tab navigation through the dropdown menu or events from contained inputs shouldn't close the menu\n\n\n        if (context._menu.contains(event.target) && (event.type === 'keyup' && event.key === TAB_KEY || /input|select|option|textarea|form/i.test(event.target.tagName))) {\n          continue;\n        }\n\n        if (event.type === 'click') {\n          relatedTarget.clickEvent = event;\n        }\n      }\n\n      context._completeHide(relatedTarget);\n    }\n  }\n\n  static getParentFromElement(element) {\n    return getElementFromSelector(element) || element.parentNode;\n  }\n\n  static dataApiKeydownHandler(event) {\n    // If not input/textarea:\n    //  - And not a key in REGEXP_KEYDOWN => not a dropdown command\n    // If input/textarea:\n    //  - If space key => not a dropdown command\n    //  - If key is other than escape\n    //    - If key is not up or down => not a dropdown command\n    //    - If trigger inside the menu => not a dropdown command\n    if (/input|textarea/i.test(event.target.tagName) ? event.key === SPACE_KEY || event.key !== ESCAPE_KEY$2 && (event.key !== ARROW_DOWN_KEY && event.key !== ARROW_UP_KEY || event.target.closest(SELECTOR_MENU)) : !REGEXP_KEYDOWN.test(event.key)) {\n      return;\n    }\n\n    const isActive = this.classList.contains(CLASS_NAME_SHOW$7);\n\n    if (!isActive && event.key === ESCAPE_KEY$2) {\n      return;\n    }\n\n    event.preventDefault();\n    event.stopPropagation();\n\n    if (isDisabled(this)) {\n      return;\n    }\n\n    const getToggleButton = () => this.matches(SELECTOR_DATA_TOGGLE$3) ? this : SelectorEngine.prev(this, SELECTOR_DATA_TOGGLE$3)[0];\n\n    if (event.key === ESCAPE_KEY$2) {\n      getToggleButton().focus();\n      Dropdown.clearMenus();\n      return;\n    }\n\n    if (event.key === ARROW_UP_KEY || event.key === ARROW_DOWN_KEY) {\n      if (!isActive) {\n        getToggleButton().click();\n      }\n\n      Dropdown.getInstance(getToggleButton())._selectMenuItem(event);\n\n      return;\n    }\n\n    if (!isActive || event.key === SPACE_KEY) {\n      Dropdown.clearMenus();\n    }\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_DATA_TOGGLE$3, Dropdown.dataApiKeydownHandler);\nEventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown.dataApiKeydownHandler);\nEventHandler.on(document, EVENT_CLICK_DATA_API$3, Dropdown.clearMenus);\nEventHandler.on(document, EVENT_KEYUP_DATA_API, Dropdown.clearMenus);\nEventHandler.on(document, EVENT_CLICK_DATA_API$3, SELECTOR_DATA_TOGGLE$3, function (event) {\n  event.preventDefault();\n  Dropdown.dropdownInterface(this);\n});\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Dropdown to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Dropdown);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): util/scrollBar.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\nconst SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top';\nconst SELECTOR_STICKY_CONTENT = '.sticky-top';\n\nclass ScrollBarHelper {\n  constructor() {\n    this._element = document.body;\n  }\n\n  getWidth() {\n    // https://developer.mozilla.org/en-US/docs/Web/API/Window/innerWidth#usage_notes\n    const documentWidth = document.documentElement.clientWidth;\n    return Math.abs(window.innerWidth - documentWidth);\n  }\n\n  hide() {\n    const width = this.getWidth();\n\n    this._disableOverFlow(); // give padding to element to balance the hidden scrollbar width\n\n\n    this._setElementAttributes(this._element, 'paddingRight', calculatedValue => calculatedValue + width); // trick: We adjust positive paddingRight and negative marginRight to sticky-top elements to keep showing fullwidth\n\n\n    this._setElementAttributes(SELECTOR_FIXED_CONTENT, 'paddingRight', calculatedValue => calculatedValue + width);\n\n    this._setElementAttributes(SELECTOR_STICKY_CONTENT, 'marginRight', calculatedValue => calculatedValue - width);\n  }\n\n  _disableOverFlow() {\n    this._saveInitialAttribute(this._element, 'overflow');\n\n    this._element.style.overflow = 'hidden';\n  }\n\n  _setElementAttributes(selector, styleProp, callback) {\n    const scrollbarWidth = this.getWidth();\n\n    const manipulationCallBack = element => {\n      if (element !== this._element && window.innerWidth > element.clientWidth + scrollbarWidth) {\n        return;\n      }\n\n      this._saveInitialAttribute(element, styleProp);\n\n      const calculatedValue = window.getComputedStyle(element)[styleProp];\n      element.style[styleProp] = `${callback(Number.parseFloat(calculatedValue))}px`;\n    };\n\n    this._applyManipulationCallback(selector, manipulationCallBack);\n  }\n\n  reset() {\n    this._resetElementAttributes(this._element, 'overflow');\n\n    this._resetElementAttributes(this._element, 'paddingRight');\n\n    this._resetElementAttributes(SELECTOR_FIXED_CONTENT, 'paddingRight');\n\n    this._resetElementAttributes(SELECTOR_STICKY_CONTENT, 'marginRight');\n  }\n\n  _saveInitialAttribute(element, styleProp) {\n    const actualValue = element.style[styleProp];\n\n    if (actualValue) {\n      Manipulator.setDataAttribute(element, styleProp, actualValue);\n    }\n  }\n\n  _resetElementAttributes(selector, styleProp) {\n    const manipulationCallBack = element => {\n      const value = Manipulator.getDataAttribute(element, styleProp);\n\n      if (typeof value === 'undefined') {\n        element.style.removeProperty(styleProp);\n      } else {\n        Manipulator.removeDataAttribute(element, styleProp);\n        element.style[styleProp] = value;\n      }\n    };\n\n    this._applyManipulationCallback(selector, manipulationCallBack);\n  }\n\n  _applyManipulationCallback(selector, callBack) {\n    if (isElement(selector)) {\n      callBack(selector);\n    } else {\n      SelectorEngine.find(selector, this._element).forEach(callBack);\n    }\n  }\n\n  isOverflowing() {\n    return this.getWidth() > 0;\n  }\n\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): util/backdrop.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\nconst Default$6 = {\n  isVisible: true,\n  // if false, we use the backdrop helper without adding any element to the dom\n  isAnimated: false,\n  rootElement: 'body',\n  // give the choice to place backdrop under different elements\n  clickCallback: null\n};\nconst DefaultType$6 = {\n  isVisible: 'boolean',\n  isAnimated: 'boolean',\n  rootElement: '(element|string)',\n  clickCallback: '(function|null)'\n};\nconst NAME$7 = 'backdrop';\nconst CLASS_NAME_BACKDROP = 'modal-backdrop';\nconst CLASS_NAME_FADE$5 = 'fade';\nconst CLASS_NAME_SHOW$6 = 'show';\nconst EVENT_MOUSEDOWN = `mousedown.bs.${NAME$7}`;\n\nclass Backdrop {\n  constructor(config) {\n    this._config = this._getConfig(config);\n    this._isAppended = false;\n    this._element = null;\n  }\n\n  show(callback) {\n    if (!this._config.isVisible) {\n      execute(callback);\n      return;\n    }\n\n    this._append();\n\n    if (this._config.isAnimated) {\n      reflow(this._getElement());\n    }\n\n    this._getElement().classList.add(CLASS_NAME_SHOW$6);\n\n    this._emulateAnimation(() => {\n      execute(callback);\n    });\n  }\n\n  hide(callback) {\n    if (!this._config.isVisible) {\n      execute(callback);\n      return;\n    }\n\n    this._getElement().classList.remove(CLASS_NAME_SHOW$6);\n\n    this._emulateAnimation(() => {\n      this.dispose();\n      execute(callback);\n    });\n  } // Private\n\n\n  _getElement() {\n    if (!this._element) {\n      const backdrop = document.createElement('div');\n      backdrop.className = CLASS_NAME_BACKDROP;\n\n      if (this._config.isAnimated) {\n        backdrop.classList.add(CLASS_NAME_FADE$5);\n      }\n\n      this._element = backdrop;\n    }\n\n    return this._element;\n  }\n\n  _getConfig(config) {\n    config = { ...Default$6,\n      ...(typeof config === 'object' ? config : {})\n    }; // use getElement() with the default \"body\" to get a fresh Element on each instantiation\n\n    config.rootElement = getElement(config.rootElement);\n    typeCheckConfig(NAME$7, config, DefaultType$6);\n    return config;\n  }\n\n  _append() {\n    if (this._isAppended) {\n      return;\n    }\n\n    this._config.rootElement.appendChild(this._getElement());\n\n    EventHandler.on(this._getElement(), EVENT_MOUSEDOWN, () => {\n      execute(this._config.clickCallback);\n    });\n    this._isAppended = true;\n  }\n\n  dispose() {\n    if (!this._isAppended) {\n      return;\n    }\n\n    EventHandler.off(this._element, EVENT_MOUSEDOWN);\n\n    this._element.remove();\n\n    this._isAppended = false;\n  }\n\n  _emulateAnimation(callback) {\n    executeAfterTransition(callback, this._getElement(), this._config.isAnimated);\n  }\n\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): modal.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$6 = 'modal';\nconst DATA_KEY$6 = 'bs.modal';\nconst EVENT_KEY$6 = `.${DATA_KEY$6}`;\nconst DATA_API_KEY$3 = '.data-api';\nconst ESCAPE_KEY$1 = 'Escape';\nconst Default$5 = {\n  backdrop: true,\n  keyboard: true,\n  focus: true\n};\nconst DefaultType$5 = {\n  backdrop: '(boolean|string)',\n  keyboard: 'boolean',\n  focus: 'boolean'\n};\nconst EVENT_HIDE$3 = `hide${EVENT_KEY$6}`;\nconst EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY$6}`;\nconst EVENT_HIDDEN$3 = `hidden${EVENT_KEY$6}`;\nconst EVENT_SHOW$3 = `show${EVENT_KEY$6}`;\nconst EVENT_SHOWN$3 = `shown${EVENT_KEY$6}`;\nconst EVENT_FOCUSIN$2 = `focusin${EVENT_KEY$6}`;\nconst EVENT_RESIZE = `resize${EVENT_KEY$6}`;\nconst EVENT_CLICK_DISMISS$2 = `click.dismiss${EVENT_KEY$6}`;\nconst EVENT_KEYDOWN_DISMISS$1 = `keydown.dismiss${EVENT_KEY$6}`;\nconst EVENT_MOUSEUP_DISMISS = `mouseup.dismiss${EVENT_KEY$6}`;\nconst EVENT_MOUSEDOWN_DISMISS = `mousedown.dismiss${EVENT_KEY$6}`;\nconst EVENT_CLICK_DATA_API$2 = `click${EVENT_KEY$6}${DATA_API_KEY$3}`;\nconst CLASS_NAME_OPEN = 'modal-open';\nconst CLASS_NAME_FADE$4 = 'fade';\nconst CLASS_NAME_SHOW$5 = 'show';\nconst CLASS_NAME_STATIC = 'modal-static';\nconst SELECTOR_DIALOG = '.modal-dialog';\nconst SELECTOR_MODAL_BODY = '.modal-body';\nconst SELECTOR_DATA_TOGGLE$2 = '[data-bs-toggle=\"modal\"]';\nconst SELECTOR_DATA_DISMISS$2 = '[data-bs-dismiss=\"modal\"]';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Modal extends BaseComponent {\n  constructor(element, config) {\n    super(element);\n    this._config = this._getConfig(config);\n    this._dialog = SelectorEngine.findOne(SELECTOR_DIALOG, this._element);\n    this._backdrop = this._initializeBackDrop();\n    this._isShown = false;\n    this._ignoreBackdropClick = false;\n    this._isTransitioning = false;\n    this._scrollBar = new ScrollBarHelper();\n  } // Getters\n\n\n  static get Default() {\n    return Default$5;\n  }\n\n  static get NAME() {\n    return NAME$6;\n  } // Public\n\n\n  toggle(relatedTarget) {\n    return this._isShown ? this.hide() : this.show(relatedTarget);\n  }\n\n  show(relatedTarget) {\n    if (this._isShown || this._isTransitioning) {\n      return;\n    }\n\n    const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$3, {\n      relatedTarget\n    });\n\n    if (showEvent.defaultPrevented) {\n      return;\n    }\n\n    this._isShown = true;\n\n    if (this._isAnimated()) {\n      this._isTransitioning = true;\n    }\n\n    this._scrollBar.hide();\n\n    document.body.classList.add(CLASS_NAME_OPEN);\n\n    this._adjustDialog();\n\n    this._setEscapeEvent();\n\n    this._setResizeEvent();\n\n    EventHandler.on(this._element, EVENT_CLICK_DISMISS$2, SELECTOR_DATA_DISMISS$2, event => this.hide(event));\n    EventHandler.on(this._dialog, EVENT_MOUSEDOWN_DISMISS, () => {\n      EventHandler.one(this._element, EVENT_MOUSEUP_DISMISS, event => {\n        if (event.target === this._element) {\n          this._ignoreBackdropClick = true;\n        }\n      });\n    });\n\n    this._showBackdrop(() => this._showElement(relatedTarget));\n  }\n\n  hide(event) {\n    if (event && ['A', 'AREA'].includes(event.target.tagName)) {\n      event.preventDefault();\n    }\n\n    if (!this._isShown || this._isTransitioning) {\n      return;\n    }\n\n    const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$3);\n\n    if (hideEvent.defaultPrevented) {\n      return;\n    }\n\n    this._isShown = false;\n\n    const isAnimated = this._isAnimated();\n\n    if (isAnimated) {\n      this._isTransitioning = true;\n    }\n\n    this._setEscapeEvent();\n\n    this._setResizeEvent();\n\n    EventHandler.off(document, EVENT_FOCUSIN$2);\n\n    this._element.classList.remove(CLASS_NAME_SHOW$5);\n\n    EventHandler.off(this._element, EVENT_CLICK_DISMISS$2);\n    EventHandler.off(this._dialog, EVENT_MOUSEDOWN_DISMISS);\n\n    this._queueCallback(() => this._hideModal(), this._element, isAnimated);\n  }\n\n  dispose() {\n    [window, this._dialog].forEach(htmlElement => EventHandler.off(htmlElement, EVENT_KEY$6));\n\n    this._backdrop.dispose();\n\n    super.dispose();\n    /**\n     * `document` has 2 events `EVENT_FOCUSIN` and `EVENT_CLICK_DATA_API`\n     * Do not move `document` in `htmlElements` array\n     * It will remove `EVENT_CLICK_DATA_API` event that should remain\n     */\n\n    EventHandler.off(document, EVENT_FOCUSIN$2);\n  }\n\n  handleUpdate() {\n    this._adjustDialog();\n  } // Private\n\n\n  _initializeBackDrop() {\n    return new Backdrop({\n      isVisible: Boolean(this._config.backdrop),\n      // 'static' option will be translated to true, and booleans will keep their value\n      isAnimated: this._isAnimated()\n    });\n  }\n\n  _getConfig(config) {\n    config = { ...Default$5,\n      ...Manipulator.getDataAttributes(this._element),\n      ...(typeof config === 'object' ? config : {})\n    };\n    typeCheckConfig(NAME$6, config, DefaultType$5);\n    return config;\n  }\n\n  _showElement(relatedTarget) {\n    const isAnimated = this._isAnimated();\n\n    const modalBody = SelectorEngine.findOne(SELECTOR_MODAL_BODY, this._dialog);\n\n    if (!this._element.parentNode || this._element.parentNode.nodeType !== Node.ELEMENT_NODE) {\n      // Don't move modal's DOM position\n      document.body.appendChild(this._element);\n    }\n\n    this._element.style.display = 'block';\n\n    this._element.removeAttribute('aria-hidden');\n\n    this._element.setAttribute('aria-modal', true);\n\n    this._element.setAttribute('role', 'dialog');\n\n    this._element.scrollTop = 0;\n\n    if (modalBody) {\n      modalBody.scrollTop = 0;\n    }\n\n    if (isAnimated) {\n      reflow(this._element);\n    }\n\n    this._element.classList.add(CLASS_NAME_SHOW$5);\n\n    if (this._config.focus) {\n      this._enforceFocus();\n    }\n\n    const transitionComplete = () => {\n      if (this._config.focus) {\n        this._element.focus();\n      }\n\n      this._isTransitioning = false;\n      EventHandler.trigger(this._element, EVENT_SHOWN$3, {\n        relatedTarget\n      });\n    };\n\n    this._queueCallback(transitionComplete, this._dialog, isAnimated);\n  }\n\n  _enforceFocus() {\n    EventHandler.off(document, EVENT_FOCUSIN$2); // guard against infinite focus loop\n\n    EventHandler.on(document, EVENT_FOCUSIN$2, event => {\n      if (document !== event.target && this._element !== event.target && !this._element.contains(event.target)) {\n        this._element.focus();\n      }\n    });\n  }\n\n  _setEscapeEvent() {\n    if (this._isShown) {\n      EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS$1, event => {\n        if (this._config.keyboard && event.key === ESCAPE_KEY$1) {\n          event.preventDefault();\n          this.hide();\n        } else if (!this._config.keyboard && event.key === ESCAPE_KEY$1) {\n          this._triggerBackdropTransition();\n        }\n      });\n    } else {\n      EventHandler.off(this._element, EVENT_KEYDOWN_DISMISS$1);\n    }\n  }\n\n  _setResizeEvent() {\n    if (this._isShown) {\n      EventHandler.on(window, EVENT_RESIZE, () => this._adjustDialog());\n    } else {\n      EventHandler.off(window, EVENT_RESIZE);\n    }\n  }\n\n  _hideModal() {\n    this._element.style.display = 'none';\n\n    this._element.setAttribute('aria-hidden', true);\n\n    this._element.removeAttribute('aria-modal');\n\n    this._element.removeAttribute('role');\n\n    this._isTransitioning = false;\n\n    this._backdrop.hide(() => {\n      document.body.classList.remove(CLASS_NAME_OPEN);\n\n      this._resetAdjustments();\n\n      this._scrollBar.reset();\n\n      EventHandler.trigger(this._element, EVENT_HIDDEN$3);\n    });\n  }\n\n  _showBackdrop(callback) {\n    EventHandler.on(this._element, EVENT_CLICK_DISMISS$2, event => {\n      if (this._ignoreBackdropClick) {\n        this._ignoreBackdropClick = false;\n        return;\n      }\n\n      if (event.target !== event.currentTarget) {\n        return;\n      }\n\n      if (this._config.backdrop === true) {\n        this.hide();\n      } else if (this._config.backdrop === 'static') {\n        this._triggerBackdropTransition();\n      }\n    });\n\n    this._backdrop.show(callback);\n  }\n\n  _isAnimated() {\n    return this._element.classList.contains(CLASS_NAME_FADE$4);\n  }\n\n  _triggerBackdropTransition() {\n    const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED);\n\n    if (hideEvent.defaultPrevented) {\n      return;\n    }\n\n    const {\n      classList,\n      scrollHeight,\n      style\n    } = this._element;\n    const isModalOverflowing = scrollHeight > document.documentElement.clientHeight; // return if the following background transition hasn't yet completed\n\n    if (!isModalOverflowing && style.overflowY === 'hidden' || classList.contains(CLASS_NAME_STATIC)) {\n      return;\n    }\n\n    if (!isModalOverflowing) {\n      style.overflowY = 'hidden';\n    }\n\n    classList.add(CLASS_NAME_STATIC);\n\n    this._queueCallback(() => {\n      classList.remove(CLASS_NAME_STATIC);\n\n      if (!isModalOverflowing) {\n        this._queueCallback(() => {\n          style.overflowY = '';\n        }, this._dialog);\n      }\n    }, this._dialog);\n\n    this._element.focus();\n  } // ----------------------------------------------------------------------\n  // the following methods are used to handle overflowing modals\n  // ----------------------------------------------------------------------\n\n\n  _adjustDialog() {\n    const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;\n\n    const scrollbarWidth = this._scrollBar.getWidth();\n\n    const isBodyOverflowing = scrollbarWidth > 0;\n\n    if (!isBodyOverflowing && isModalOverflowing && !isRTL() || isBodyOverflowing && !isModalOverflowing && isRTL()) {\n      this._element.style.paddingLeft = `${scrollbarWidth}px`;\n    }\n\n    if (isBodyOverflowing && !isModalOverflowing && !isRTL() || !isBodyOverflowing && isModalOverflowing && isRTL()) {\n      this._element.style.paddingRight = `${scrollbarWidth}px`;\n    }\n  }\n\n  _resetAdjustments() {\n    this._element.style.paddingLeft = '';\n    this._element.style.paddingRight = '';\n  } // Static\n\n\n  static jQueryInterface(config, relatedTarget) {\n    return this.each(function () {\n      const data = Modal.getOrCreateInstance(this, config);\n\n      if (typeof config !== 'string') {\n        return;\n      }\n\n      if (typeof data[config] === 'undefined') {\n        throw new TypeError(`No method named \"${config}\"`);\n      }\n\n      data[config](relatedTarget);\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$2, SELECTOR_DATA_TOGGLE$2, function (event) {\n  const target = getElementFromSelector(this);\n\n  if (['A', 'AREA'].includes(this.tagName)) {\n    event.preventDefault();\n  }\n\n  EventHandler.one(target, EVENT_SHOW$3, showEvent => {\n    if (showEvent.defaultPrevented) {\n      // only register focus restorer if modal will actually get shown\n      return;\n    }\n\n    EventHandler.one(target, EVENT_HIDDEN$3, () => {\n      if (isVisible(this)) {\n        this.focus();\n      }\n    });\n  });\n  const data = Modal.getOrCreateInstance(target);\n  data.toggle(this);\n});\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Modal to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Modal);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): offcanvas.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$5 = 'offcanvas';\nconst DATA_KEY$5 = 'bs.offcanvas';\nconst EVENT_KEY$5 = `.${DATA_KEY$5}`;\nconst DATA_API_KEY$2 = '.data-api';\nconst EVENT_LOAD_DATA_API$1 = `load${EVENT_KEY$5}${DATA_API_KEY$2}`;\nconst ESCAPE_KEY = 'Escape';\nconst Default$4 = {\n  backdrop: true,\n  keyboard: true,\n  scroll: false\n};\nconst DefaultType$4 = {\n  backdrop: 'boolean',\n  keyboard: 'boolean',\n  scroll: 'boolean'\n};\nconst CLASS_NAME_SHOW$4 = 'show';\nconst OPEN_SELECTOR = '.offcanvas.show';\nconst EVENT_SHOW$2 = `show${EVENT_KEY$5}`;\nconst EVENT_SHOWN$2 = `shown${EVENT_KEY$5}`;\nconst EVENT_HIDE$2 = `hide${EVENT_KEY$5}`;\nconst EVENT_HIDDEN$2 = `hidden${EVENT_KEY$5}`;\nconst EVENT_FOCUSIN$1 = `focusin${EVENT_KEY$5}`;\nconst EVENT_CLICK_DATA_API$1 = `click${EVENT_KEY$5}${DATA_API_KEY$2}`;\nconst EVENT_CLICK_DISMISS$1 = `click.dismiss${EVENT_KEY$5}`;\nconst EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY$5}`;\nconst SELECTOR_DATA_DISMISS$1 = '[data-bs-dismiss=\"offcanvas\"]';\nconst SELECTOR_DATA_TOGGLE$1 = '[data-bs-toggle=\"offcanvas\"]';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Offcanvas extends BaseComponent {\n  constructor(element, config) {\n    super(element);\n    this._config = this._getConfig(config);\n    this._isShown = false;\n    this._backdrop = this._initializeBackDrop();\n\n    this._addEventListeners();\n  } // Getters\n\n\n  static get NAME() {\n    return NAME$5;\n  }\n\n  static get Default() {\n    return Default$4;\n  } // Public\n\n\n  toggle(relatedTarget) {\n    return this._isShown ? this.hide() : this.show(relatedTarget);\n  }\n\n  show(relatedTarget) {\n    if (this._isShown) {\n      return;\n    }\n\n    const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$2, {\n      relatedTarget\n    });\n\n    if (showEvent.defaultPrevented) {\n      return;\n    }\n\n    this._isShown = true;\n    this._element.style.visibility = 'visible';\n\n    this._backdrop.show();\n\n    if (!this._config.scroll) {\n      new ScrollBarHelper().hide();\n\n      this._enforceFocusOnElement(this._element);\n    }\n\n    this._element.removeAttribute('aria-hidden');\n\n    this._element.setAttribute('aria-modal', true);\n\n    this._element.setAttribute('role', 'dialog');\n\n    this._element.classList.add(CLASS_NAME_SHOW$4);\n\n    const completeCallBack = () => {\n      EventHandler.trigger(this._element, EVENT_SHOWN$2, {\n        relatedTarget\n      });\n    };\n\n    this._queueCallback(completeCallBack, this._element, true);\n  }\n\n  hide() {\n    if (!this._isShown) {\n      return;\n    }\n\n    const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$2);\n\n    if (hideEvent.defaultPrevented) {\n      return;\n    }\n\n    EventHandler.off(document, EVENT_FOCUSIN$1);\n\n    this._element.blur();\n\n    this._isShown = false;\n\n    this._element.classList.remove(CLASS_NAME_SHOW$4);\n\n    this._backdrop.hide();\n\n    const completeCallback = () => {\n      this._element.setAttribute('aria-hidden', true);\n\n      this._element.removeAttribute('aria-modal');\n\n      this._element.removeAttribute('role');\n\n      this._element.style.visibility = 'hidden';\n\n      if (!this._config.scroll) {\n        new ScrollBarHelper().reset();\n      }\n\n      EventHandler.trigger(this._element, EVENT_HIDDEN$2);\n    };\n\n    this._queueCallback(completeCallback, this._element, true);\n  }\n\n  dispose() {\n    this._backdrop.dispose();\n\n    super.dispose();\n    EventHandler.off(document, EVENT_FOCUSIN$1);\n  } // Private\n\n\n  _getConfig(config) {\n    config = { ...Default$4,\n      ...Manipulator.getDataAttributes(this._element),\n      ...(typeof config === 'object' ? config : {})\n    };\n    typeCheckConfig(NAME$5, config, DefaultType$4);\n    return config;\n  }\n\n  _initializeBackDrop() {\n    return new Backdrop({\n      isVisible: this._config.backdrop,\n      isAnimated: true,\n      rootElement: this._element.parentNode,\n      clickCallback: () => this.hide()\n    });\n  }\n\n  _enforceFocusOnElement(element) {\n    EventHandler.off(document, EVENT_FOCUSIN$1); // guard against infinite focus loop\n\n    EventHandler.on(document, EVENT_FOCUSIN$1, event => {\n      if (document !== event.target && element !== event.target && !element.contains(event.target)) {\n        element.focus();\n      }\n    });\n    element.focus();\n  }\n\n  _addEventListeners() {\n    EventHandler.on(this._element, EVENT_CLICK_DISMISS$1, SELECTOR_DATA_DISMISS$1, () => this.hide());\n    EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS, event => {\n      if (this._config.keyboard && event.key === ESCAPE_KEY) {\n        this.hide();\n      }\n    });\n  } // Static\n\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Offcanvas.getOrCreateInstance(this, config);\n\n      if (typeof config !== 'string') {\n        return;\n      }\n\n      if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n        throw new TypeError(`No method named \"${config}\"`);\n      }\n\n      data[config](this);\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$1, SELECTOR_DATA_TOGGLE$1, function (event) {\n  const target = getElementFromSelector(this);\n\n  if (['A', 'AREA'].includes(this.tagName)) {\n    event.preventDefault();\n  }\n\n  if (isDisabled(this)) {\n    return;\n  }\n\n  EventHandler.one(target, EVENT_HIDDEN$2, () => {\n    // focus on trigger when it is closed\n    if (isVisible(this)) {\n      this.focus();\n    }\n  }); // avoid conflict when clicking a toggler of an offcanvas, while another is open\n\n  const allReadyOpen = SelectorEngine.findOne(OPEN_SELECTOR);\n\n  if (allReadyOpen && allReadyOpen !== target) {\n    Offcanvas.getInstance(allReadyOpen).hide();\n  }\n\n  const data = Offcanvas.getOrCreateInstance(target);\n  data.toggle(this);\n});\nEventHandler.on(window, EVENT_LOAD_DATA_API$1, () => SelectorEngine.find(OPEN_SELECTOR).forEach(el => Offcanvas.getOrCreateInstance(el).show()));\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\ndefineJQueryPlugin(Offcanvas);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): util/sanitizer.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\nconst uriAttrs = new Set(['background', 'cite', 'href', 'itemtype', 'longdesc', 'poster', 'src', 'xlink:href']);\nconst ARIA_ATTRIBUTE_PATTERN = /^aria-[\\w-]*$/i;\n/**\n * A pattern that recognizes a commonly useful subset of URLs that are safe.\n *\n * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts\n */\n\nconst SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file):|[^#&/:?]*(?:[#/?]|$))/i;\n/**\n * A pattern that matches safe data URLs. Only matches image, video and audio types.\n *\n * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts\n */\n\nconst DATA_URL_PATTERN = /^data:(?:image\\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\\/(?:mpeg|mp4|ogg|webm)|audio\\/(?:mp3|oga|ogg|opus));base64,[\\d+/a-z]+=*$/i;\n\nconst allowedAttribute = (attr, allowedAttributeList) => {\n  const attrName = attr.nodeName.toLowerCase();\n\n  if (allowedAttributeList.includes(attrName)) {\n    if (uriAttrs.has(attrName)) {\n      return Boolean(SAFE_URL_PATTERN.test(attr.nodeValue) || DATA_URL_PATTERN.test(attr.nodeValue));\n    }\n\n    return true;\n  }\n\n  const regExp = allowedAttributeList.filter(attrRegex => attrRegex instanceof RegExp); // Check if a regular expression validates the attribute.\n\n  for (let i = 0, len = regExp.length; i < len; i++) {\n    if (regExp[i].test(attrName)) {\n      return true;\n    }\n  }\n\n  return false;\n};\n\nconst DefaultAllowlist = {\n  // Global attributes allowed on any supplied element below.\n  '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],\n  a: ['target', 'href', 'title', 'rel'],\n  area: [],\n  b: [],\n  br: [],\n  col: [],\n  code: [],\n  div: [],\n  em: [],\n  hr: [],\n  h1: [],\n  h2: [],\n  h3: [],\n  h4: [],\n  h5: [],\n  h6: [],\n  i: [],\n  img: ['src', 'srcset', 'alt', 'title', 'width', 'height'],\n  li: [],\n  ol: [],\n  p: [],\n  pre: [],\n  s: [],\n  small: [],\n  span: [],\n  sub: [],\n  sup: [],\n  strong: [],\n  u: [],\n  ul: []\n};\nfunction sanitizeHtml(unsafeHtml, allowList, sanitizeFn) {\n  if (!unsafeHtml.length) {\n    return unsafeHtml;\n  }\n\n  if (sanitizeFn && typeof sanitizeFn === 'function') {\n    return sanitizeFn(unsafeHtml);\n  }\n\n  const domParser = new window.DOMParser();\n  const createdDocument = domParser.parseFromString(unsafeHtml, 'text/html');\n  const allowlistKeys = Object.keys(allowList);\n  const elements = [].concat(...createdDocument.body.querySelectorAll('*'));\n\n  for (let i = 0, len = elements.length; i < len; i++) {\n    const el = elements[i];\n    const elName = el.nodeName.toLowerCase();\n\n    if (!allowlistKeys.includes(elName)) {\n      el.remove();\n      continue;\n    }\n\n    const attributeList = [].concat(...el.attributes);\n    const allowedAttributes = [].concat(allowList['*'] || [], allowList[elName] || []);\n    attributeList.forEach(attr => {\n      if (!allowedAttribute(attr, allowedAttributes)) {\n        el.removeAttribute(attr.nodeName);\n      }\n    });\n  }\n\n  return createdDocument.body.innerHTML;\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): tooltip.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$4 = 'tooltip';\nconst DATA_KEY$4 = 'bs.tooltip';\nconst EVENT_KEY$4 = `.${DATA_KEY$4}`;\nconst CLASS_PREFIX$1 = 'bs-tooltip';\nconst BSCLS_PREFIX_REGEX$1 = new RegExp(`(^|\\\\s)${CLASS_PREFIX$1}\\\\S+`, 'g');\nconst DISALLOWED_ATTRIBUTES = new Set(['sanitize', 'allowList', 'sanitizeFn']);\nconst DefaultType$3 = {\n  animation: 'boolean',\n  template: 'string',\n  title: '(string|element|function)',\n  trigger: 'string',\n  delay: '(number|object)',\n  html: 'boolean',\n  selector: '(string|boolean)',\n  placement: '(string|function)',\n  offset: '(array|string|function)',\n  container: '(string|element|boolean)',\n  fallbackPlacements: 'array',\n  boundary: '(string|element)',\n  customClass: '(string|function)',\n  sanitize: 'boolean',\n  sanitizeFn: '(null|function)',\n  allowList: 'object',\n  popperConfig: '(null|object|function)'\n};\nconst AttachmentMap = {\n  AUTO: 'auto',\n  TOP: 'top',\n  RIGHT: isRTL() ? 'left' : 'right',\n  BOTTOM: 'bottom',\n  LEFT: isRTL() ? 'right' : 'left'\n};\nconst Default$3 = {\n  animation: true,\n  template: '<div class=\"tooltip\" role=\"tooltip\">' + '<div class=\"tooltip-arrow\"></div>' + '<div class=\"tooltip-inner\"></div>' + '</div>',\n  trigger: 'hover focus',\n  title: '',\n  delay: 0,\n  html: false,\n  selector: false,\n  placement: 'top',\n  offset: [0, 0],\n  container: false,\n  fallbackPlacements: ['top', 'right', 'bottom', 'left'],\n  boundary: 'clippingParents',\n  customClass: '',\n  sanitize: true,\n  sanitizeFn: null,\n  allowList: DefaultAllowlist,\n  popperConfig: null\n};\nconst Event$2 = {\n  HIDE: `hide${EVENT_KEY$4}`,\n  HIDDEN: `hidden${EVENT_KEY$4}`,\n  SHOW: `show${EVENT_KEY$4}`,\n  SHOWN: `shown${EVENT_KEY$4}`,\n  INSERTED: `inserted${EVENT_KEY$4}`,\n  CLICK: `click${EVENT_KEY$4}`,\n  FOCUSIN: `focusin${EVENT_KEY$4}`,\n  FOCUSOUT: `focusout${EVENT_KEY$4}`,\n  MOUSEENTER: `mouseenter${EVENT_KEY$4}`,\n  MOUSELEAVE: `mouseleave${EVENT_KEY$4}`\n};\nconst CLASS_NAME_FADE$3 = 'fade';\nconst CLASS_NAME_MODAL = 'modal';\nconst CLASS_NAME_SHOW$3 = 'show';\nconst HOVER_STATE_SHOW = 'show';\nconst HOVER_STATE_OUT = 'out';\nconst SELECTOR_TOOLTIP_INNER = '.tooltip-inner';\nconst TRIGGER_HOVER = 'hover';\nconst TRIGGER_FOCUS = 'focus';\nconst TRIGGER_CLICK = 'click';\nconst TRIGGER_MANUAL = 'manual';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Tooltip extends BaseComponent {\n  constructor(element, config) {\n    if (typeof Popper === 'undefined') {\n      throw new TypeError('Bootstrap\\'s tooltips require Popper (https://popper.js.org)');\n    }\n\n    super(element); // private\n\n    this._isEnabled = true;\n    this._timeout = 0;\n    this._hoverState = '';\n    this._activeTrigger = {};\n    this._popper = null; // Protected\n\n    this._config = this._getConfig(config);\n    this.tip = null;\n\n    this._setListeners();\n  } // Getters\n\n\n  static get Default() {\n    return Default$3;\n  }\n\n  static get NAME() {\n    return NAME$4;\n  }\n\n  static get Event() {\n    return Event$2;\n  }\n\n  static get DefaultType() {\n    return DefaultType$3;\n  } // Public\n\n\n  enable() {\n    this._isEnabled = true;\n  }\n\n  disable() {\n    this._isEnabled = false;\n  }\n\n  toggleEnabled() {\n    this._isEnabled = !this._isEnabled;\n  }\n\n  toggle(event) {\n    if (!this._isEnabled) {\n      return;\n    }\n\n    if (event) {\n      const context = this._initializeOnDelegatedTarget(event);\n\n      context._activeTrigger.click = !context._activeTrigger.click;\n\n      if (context._isWithActiveTrigger()) {\n        context._enter(null, context);\n      } else {\n        context._leave(null, context);\n      }\n    } else {\n      if (this.getTipElement().classList.contains(CLASS_NAME_SHOW$3)) {\n        this._leave(null, this);\n\n        return;\n      }\n\n      this._enter(null, this);\n    }\n  }\n\n  dispose() {\n    clearTimeout(this._timeout);\n    EventHandler.off(this._element.closest(`.${CLASS_NAME_MODAL}`), 'hide.bs.modal', this._hideModalHandler);\n\n    if (this.tip) {\n      this.tip.remove();\n    }\n\n    if (this._popper) {\n      this._popper.destroy();\n    }\n\n    super.dispose();\n  }\n\n  show() {\n    if (this._element.style.display === 'none') {\n      throw new Error('Please use show on visible elements');\n    }\n\n    if (!(this.isWithContent() && this._isEnabled)) {\n      return;\n    }\n\n    const showEvent = EventHandler.trigger(this._element, this.constructor.Event.SHOW);\n    const shadowRoot = findShadowRoot(this._element);\n    const isInTheDom = shadowRoot === null ? this._element.ownerDocument.documentElement.contains(this._element) : shadowRoot.contains(this._element);\n\n    if (showEvent.defaultPrevented || !isInTheDom) {\n      return;\n    }\n\n    const tip = this.getTipElement();\n    const tipId = getUID(this.constructor.NAME);\n    tip.setAttribute('id', tipId);\n\n    this._element.setAttribute('aria-describedby', tipId);\n\n    this.setContent();\n\n    if (this._config.animation) {\n      tip.classList.add(CLASS_NAME_FADE$3);\n    }\n\n    const placement = typeof this._config.placement === 'function' ? this._config.placement.call(this, tip, this._element) : this._config.placement;\n\n    const attachment = this._getAttachment(placement);\n\n    this._addAttachmentClass(attachment);\n\n    const {\n      container\n    } = this._config;\n    Data.set(tip, this.constructor.DATA_KEY, this);\n\n    if (!this._element.ownerDocument.documentElement.contains(this.tip)) {\n      container.appendChild(tip);\n      EventHandler.trigger(this._element, this.constructor.Event.INSERTED);\n    }\n\n    if (this._popper) {\n      this._popper.update();\n    } else {\n      this._popper = Popper.createPopper(this._element, tip, this._getPopperConfig(attachment));\n    }\n\n    tip.classList.add(CLASS_NAME_SHOW$3);\n    const customClass = typeof this._config.customClass === 'function' ? this._config.customClass() : this._config.customClass;\n\n    if (customClass) {\n      tip.classList.add(...customClass.split(' '));\n    } // If this is a touch-enabled device we add extra\n    // empty mouseover listeners to the body's immediate children;\n    // only needed because of broken event delegation on iOS\n    // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n\n\n    if ('ontouchstart' in document.documentElement) {\n      [].concat(...document.body.children).forEach(element => {\n        EventHandler.on(element, 'mouseover', noop);\n      });\n    }\n\n    const complete = () => {\n      const prevHoverState = this._hoverState;\n      this._hoverState = null;\n      EventHandler.trigger(this._element, this.constructor.Event.SHOWN);\n\n      if (prevHoverState === HOVER_STATE_OUT) {\n        this._leave(null, this);\n      }\n    };\n\n    const isAnimated = this.tip.classList.contains(CLASS_NAME_FADE$3);\n\n    this._queueCallback(complete, this.tip, isAnimated);\n  }\n\n  hide() {\n    if (!this._popper) {\n      return;\n    }\n\n    const tip = this.getTipElement();\n\n    const complete = () => {\n      if (this._isWithActiveTrigger()) {\n        return;\n      }\n\n      if (this._hoverState !== HOVER_STATE_SHOW) {\n        tip.remove();\n      }\n\n      this._cleanTipClass();\n\n      this._element.removeAttribute('aria-describedby');\n\n      EventHandler.trigger(this._element, this.constructor.Event.HIDDEN);\n\n      if (this._popper) {\n        this._popper.destroy();\n\n        this._popper = null;\n      }\n    };\n\n    const hideEvent = EventHandler.trigger(this._element, this.constructor.Event.HIDE);\n\n    if (hideEvent.defaultPrevented) {\n      return;\n    }\n\n    tip.classList.remove(CLASS_NAME_SHOW$3); // If this is a touch-enabled device we remove the extra\n    // empty mouseover listeners we added for iOS support\n\n    if ('ontouchstart' in document.documentElement) {\n      [].concat(...document.body.children).forEach(element => EventHandler.off(element, 'mouseover', noop));\n    }\n\n    this._activeTrigger[TRIGGER_CLICK] = false;\n    this._activeTrigger[TRIGGER_FOCUS] = false;\n    this._activeTrigger[TRIGGER_HOVER] = false;\n    const isAnimated = this.tip.classList.contains(CLASS_NAME_FADE$3);\n\n    this._queueCallback(complete, this.tip, isAnimated);\n\n    this._hoverState = '';\n  }\n\n  update() {\n    if (this._popper !== null) {\n      this._popper.update();\n    }\n  } // Protected\n\n\n  isWithContent() {\n    return Boolean(this.getTitle());\n  }\n\n  getTipElement() {\n    if (this.tip) {\n      return this.tip;\n    }\n\n    const element = document.createElement('div');\n    element.innerHTML = this._config.template;\n    this.tip = element.children[0];\n    return this.tip;\n  }\n\n  setContent() {\n    const tip = this.getTipElement();\n    this.setElementContent(SelectorEngine.findOne(SELECTOR_TOOLTIP_INNER, tip), this.getTitle());\n    tip.classList.remove(CLASS_NAME_FADE$3, CLASS_NAME_SHOW$3);\n  }\n\n  setElementContent(element, content) {\n    if (element === null) {\n      return;\n    }\n\n    if (isElement(content)) {\n      content = getElement(content); // content is a DOM node or a jQuery\n\n      if (this._config.html) {\n        if (content.parentNode !== element) {\n          element.innerHTML = '';\n          element.appendChild(content);\n        }\n      } else {\n        element.textContent = content.textContent;\n      }\n\n      return;\n    }\n\n    if (this._config.html) {\n      if (this._config.sanitize) {\n        content = sanitizeHtml(content, this._config.allowList, this._config.sanitizeFn);\n      }\n\n      element.innerHTML = content;\n    } else {\n      element.textContent = content;\n    }\n  }\n\n  getTitle() {\n    let title = this._element.getAttribute('data-bs-original-title');\n\n    if (!title) {\n      title = typeof this._config.title === 'function' ? this._config.title.call(this._element) : this._config.title;\n    }\n\n    return title;\n  }\n\n  updateAttachment(attachment) {\n    if (attachment === 'right') {\n      return 'end';\n    }\n\n    if (attachment === 'left') {\n      return 'start';\n    }\n\n    return attachment;\n  } // Private\n\n\n  _initializeOnDelegatedTarget(event, context) {\n    const dataKey = this.constructor.DATA_KEY;\n    context = context || Data.get(event.delegateTarget, dataKey);\n\n    if (!context) {\n      context = new this.constructor(event.delegateTarget, this._getDelegateConfig());\n      Data.set(event.delegateTarget, dataKey, context);\n    }\n\n    return context;\n  }\n\n  _getOffset() {\n    const {\n      offset\n    } = this._config;\n\n    if (typeof offset === 'string') {\n      return offset.split(',').map(val => Number.parseInt(val, 10));\n    }\n\n    if (typeof offset === 'function') {\n      return popperData => offset(popperData, this._element);\n    }\n\n    return offset;\n  }\n\n  _getPopperConfig(attachment) {\n    const defaultBsPopperConfig = {\n      placement: attachment,\n      modifiers: [{\n        name: 'flip',\n        options: {\n          fallbackPlacements: this._config.fallbackPlacements\n        }\n      }, {\n        name: 'offset',\n        options: {\n          offset: this._getOffset()\n        }\n      }, {\n        name: 'preventOverflow',\n        options: {\n          boundary: this._config.boundary\n        }\n      }, {\n        name: 'arrow',\n        options: {\n          element: `.${this.constructor.NAME}-arrow`\n        }\n      }, {\n        name: 'onChange',\n        enabled: true,\n        phase: 'afterWrite',\n        fn: data => this._handlePopperPlacementChange(data)\n      }],\n      onFirstUpdate: data => {\n        if (data.options.placement !== data.placement) {\n          this._handlePopperPlacementChange(data);\n        }\n      }\n    };\n    return { ...defaultBsPopperConfig,\n      ...(typeof this._config.popperConfig === 'function' ? this._config.popperConfig(defaultBsPopperConfig) : this._config.popperConfig)\n    };\n  }\n\n  _addAttachmentClass(attachment) {\n    this.getTipElement().classList.add(`${CLASS_PREFIX$1}-${this.updateAttachment(attachment)}`);\n  }\n\n  _getAttachment(placement) {\n    return AttachmentMap[placement.toUpperCase()];\n  }\n\n  _setListeners() {\n    const triggers = this._config.trigger.split(' ');\n\n    triggers.forEach(trigger => {\n      if (trigger === 'click') {\n        EventHandler.on(this._element, this.constructor.Event.CLICK, this._config.selector, event => this.toggle(event));\n      } else if (trigger !== TRIGGER_MANUAL) {\n        const eventIn = trigger === TRIGGER_HOVER ? this.constructor.Event.MOUSEENTER : this.constructor.Event.FOCUSIN;\n        const eventOut = trigger === TRIGGER_HOVER ? this.constructor.Event.MOUSELEAVE : this.constructor.Event.FOCUSOUT;\n        EventHandler.on(this._element, eventIn, this._config.selector, event => this._enter(event));\n        EventHandler.on(this._element, eventOut, this._config.selector, event => this._leave(event));\n      }\n    });\n\n    this._hideModalHandler = () => {\n      if (this._element) {\n        this.hide();\n      }\n    };\n\n    EventHandler.on(this._element.closest(`.${CLASS_NAME_MODAL}`), 'hide.bs.modal', this._hideModalHandler);\n\n    if (this._config.selector) {\n      this._config = { ...this._config,\n        trigger: 'manual',\n        selector: ''\n      };\n    } else {\n      this._fixTitle();\n    }\n  }\n\n  _fixTitle() {\n    const title = this._element.getAttribute('title');\n\n    const originalTitleType = typeof this._element.getAttribute('data-bs-original-title');\n\n    if (title || originalTitleType !== 'string') {\n      this._element.setAttribute('data-bs-original-title', title || '');\n\n      if (title && !this._element.getAttribute('aria-label') && !this._element.textContent) {\n        this._element.setAttribute('aria-label', title);\n      }\n\n      this._element.setAttribute('title', '');\n    }\n  }\n\n  _enter(event, context) {\n    context = this._initializeOnDelegatedTarget(event, context);\n\n    if (event) {\n      context._activeTrigger[event.type === 'focusin' ? TRIGGER_FOCUS : TRIGGER_HOVER] = true;\n    }\n\n    if (context.getTipElement().classList.contains(CLASS_NAME_SHOW$3) || context._hoverState === HOVER_STATE_SHOW) {\n      context._hoverState = HOVER_STATE_SHOW;\n      return;\n    }\n\n    clearTimeout(context._timeout);\n    context._hoverState = HOVER_STATE_SHOW;\n\n    if (!context._config.delay || !context._config.delay.show) {\n      context.show();\n      return;\n    }\n\n    context._timeout = setTimeout(() => {\n      if (context._hoverState === HOVER_STATE_SHOW) {\n        context.show();\n      }\n    }, context._config.delay.show);\n  }\n\n  _leave(event, context) {\n    context = this._initializeOnDelegatedTarget(event, context);\n\n    if (event) {\n      context._activeTrigger[event.type === 'focusout' ? TRIGGER_FOCUS : TRIGGER_HOVER] = context._element.contains(event.relatedTarget);\n    }\n\n    if (context._isWithActiveTrigger()) {\n      return;\n    }\n\n    clearTimeout(context._timeout);\n    context._hoverState = HOVER_STATE_OUT;\n\n    if (!context._config.delay || !context._config.delay.hide) {\n      context.hide();\n      return;\n    }\n\n    context._timeout = setTimeout(() => {\n      if (context._hoverState === HOVER_STATE_OUT) {\n        context.hide();\n      }\n    }, context._config.delay.hide);\n  }\n\n  _isWithActiveTrigger() {\n    for (const trigger in this._activeTrigger) {\n      if (this._activeTrigger[trigger]) {\n        return true;\n      }\n    }\n\n    return false;\n  }\n\n  _getConfig(config) {\n    const dataAttributes = Manipulator.getDataAttributes(this._element);\n    Object.keys(dataAttributes).forEach(dataAttr => {\n      if (DISALLOWED_ATTRIBUTES.has(dataAttr)) {\n        delete dataAttributes[dataAttr];\n      }\n    });\n    config = { ...this.constructor.Default,\n      ...dataAttributes,\n      ...(typeof config === 'object' && config ? config : {})\n    };\n    config.container = config.container === false ? document.body : getElement(config.container);\n\n    if (typeof config.delay === 'number') {\n      config.delay = {\n        show: config.delay,\n        hide: config.delay\n      };\n    }\n\n    if (typeof config.title === 'number') {\n      config.title = config.title.toString();\n    }\n\n    if (typeof config.content === 'number') {\n      config.content = config.content.toString();\n    }\n\n    typeCheckConfig(NAME$4, config, this.constructor.DefaultType);\n\n    if (config.sanitize) {\n      config.template = sanitizeHtml(config.template, config.allowList, config.sanitizeFn);\n    }\n\n    return config;\n  }\n\n  _getDelegateConfig() {\n    const config = {};\n\n    if (this._config) {\n      for (const key in this._config) {\n        if (this.constructor.Default[key] !== this._config[key]) {\n          config[key] = this._config[key];\n        }\n      }\n    }\n\n    return config;\n  }\n\n  _cleanTipClass() {\n    const tip = this.getTipElement();\n    const tabClass = tip.getAttribute('class').match(BSCLS_PREFIX_REGEX$1);\n\n    if (tabClass !== null && tabClass.length > 0) {\n      tabClass.map(token => token.trim()).forEach(tClass => tip.classList.remove(tClass));\n    }\n  }\n\n  _handlePopperPlacementChange(popperData) {\n    const {\n      state\n    } = popperData;\n\n    if (!state) {\n      return;\n    }\n\n    this.tip = state.elements.popper;\n\n    this._cleanTipClass();\n\n    this._addAttachmentClass(this._getAttachment(state.placement));\n  } // Static\n\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Tooltip.getOrCreateInstance(this, config);\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config]();\n      }\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Tooltip to jQuery only if jQuery is present\n */\n\n\ndefineJQueryPlugin(Tooltip);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): popover.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$3 = 'popover';\nconst DATA_KEY$3 = 'bs.popover';\nconst EVENT_KEY$3 = `.${DATA_KEY$3}`;\nconst CLASS_PREFIX = 'bs-popover';\nconst BSCLS_PREFIX_REGEX = new RegExp(`(^|\\\\s)${CLASS_PREFIX}\\\\S+`, 'g');\nconst Default$2 = { ...Tooltip.Default,\n  placement: 'right',\n  offset: [0, 8],\n  trigger: 'click',\n  content: '',\n  template: '<div class=\"popover\" role=\"tooltip\">' + '<div class=\"popover-arrow\"></div>' + '<h3 class=\"popover-header\"></h3>' + '<div class=\"popover-body\"></div>' + '</div>'\n};\nconst DefaultType$2 = { ...Tooltip.DefaultType,\n  content: '(string|element|function)'\n};\nconst Event$1 = {\n  HIDE: `hide${EVENT_KEY$3}`,\n  HIDDEN: `hidden${EVENT_KEY$3}`,\n  SHOW: `show${EVENT_KEY$3}`,\n  SHOWN: `shown${EVENT_KEY$3}`,\n  INSERTED: `inserted${EVENT_KEY$3}`,\n  CLICK: `click${EVENT_KEY$3}`,\n  FOCUSIN: `focusin${EVENT_KEY$3}`,\n  FOCUSOUT: `focusout${EVENT_KEY$3}`,\n  MOUSEENTER: `mouseenter${EVENT_KEY$3}`,\n  MOUSELEAVE: `mouseleave${EVENT_KEY$3}`\n};\nconst CLASS_NAME_FADE$2 = 'fade';\nconst CLASS_NAME_SHOW$2 = 'show';\nconst SELECTOR_TITLE = '.popover-header';\nconst SELECTOR_CONTENT = '.popover-body';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Popover extends Tooltip {\n  // Getters\n  static get Default() {\n    return Default$2;\n  }\n\n  static get NAME() {\n    return NAME$3;\n  }\n\n  static get Event() {\n    return Event$1;\n  }\n\n  static get DefaultType() {\n    return DefaultType$2;\n  } // Overrides\n\n\n  isWithContent() {\n    return this.getTitle() || this._getContent();\n  }\n\n  getTipElement() {\n    if (this.tip) {\n      return this.tip;\n    }\n\n    this.tip = super.getTipElement();\n\n    if (!this.getTitle()) {\n      SelectorEngine.findOne(SELECTOR_TITLE, this.tip).remove();\n    }\n\n    if (!this._getContent()) {\n      SelectorEngine.findOne(SELECTOR_CONTENT, this.tip).remove();\n    }\n\n    return this.tip;\n  }\n\n  setContent() {\n    const tip = this.getTipElement(); // we use append for html objects to maintain js events\n\n    this.setElementContent(SelectorEngine.findOne(SELECTOR_TITLE, tip), this.getTitle());\n\n    let content = this._getContent();\n\n    if (typeof content === 'function') {\n      content = content.call(this._element);\n    }\n\n    this.setElementContent(SelectorEngine.findOne(SELECTOR_CONTENT, tip), content);\n    tip.classList.remove(CLASS_NAME_FADE$2, CLASS_NAME_SHOW$2);\n  } // Private\n\n\n  _addAttachmentClass(attachment) {\n    this.getTipElement().classList.add(`${CLASS_PREFIX}-${this.updateAttachment(attachment)}`);\n  }\n\n  _getContent() {\n    return this._element.getAttribute('data-bs-content') || this._config.content;\n  }\n\n  _cleanTipClass() {\n    const tip = this.getTipElement();\n    const tabClass = tip.getAttribute('class').match(BSCLS_PREFIX_REGEX);\n\n    if (tabClass !== null && tabClass.length > 0) {\n      tabClass.map(token => token.trim()).forEach(tClass => tip.classList.remove(tClass));\n    }\n  } // Static\n\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Popover.getOrCreateInstance(this, config);\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config]();\n      }\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Popover to jQuery only if jQuery is present\n */\n\n\ndefineJQueryPlugin(Popover);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): scrollspy.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$2 = 'scrollspy';\nconst DATA_KEY$2 = 'bs.scrollspy';\nconst EVENT_KEY$2 = `.${DATA_KEY$2}`;\nconst DATA_API_KEY$1 = '.data-api';\nconst Default$1 = {\n  offset: 10,\n  method: 'auto',\n  target: ''\n};\nconst DefaultType$1 = {\n  offset: 'number',\n  method: 'string',\n  target: '(string|element)'\n};\nconst EVENT_ACTIVATE = `activate${EVENT_KEY$2}`;\nconst EVENT_SCROLL = `scroll${EVENT_KEY$2}`;\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY$2}${DATA_API_KEY$1}`;\nconst CLASS_NAME_DROPDOWN_ITEM = 'dropdown-item';\nconst CLASS_NAME_ACTIVE$1 = 'active';\nconst SELECTOR_DATA_SPY = '[data-bs-spy=\"scroll\"]';\nconst SELECTOR_NAV_LIST_GROUP$1 = '.nav, .list-group';\nconst SELECTOR_NAV_LINKS = '.nav-link';\nconst SELECTOR_NAV_ITEMS = '.nav-item';\nconst SELECTOR_LIST_ITEMS = '.list-group-item';\nconst SELECTOR_DROPDOWN$1 = '.dropdown';\nconst SELECTOR_DROPDOWN_TOGGLE$1 = '.dropdown-toggle';\nconst METHOD_OFFSET = 'offset';\nconst METHOD_POSITION = 'position';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass ScrollSpy extends BaseComponent {\n  constructor(element, config) {\n    super(element);\n    this._scrollElement = this._element.tagName === 'BODY' ? window : this._element;\n    this._config = this._getConfig(config);\n    this._selector = `${this._config.target} ${SELECTOR_NAV_LINKS}, ${this._config.target} ${SELECTOR_LIST_ITEMS}, ${this._config.target} .${CLASS_NAME_DROPDOWN_ITEM}`;\n    this._offsets = [];\n    this._targets = [];\n    this._activeTarget = null;\n    this._scrollHeight = 0;\n    EventHandler.on(this._scrollElement, EVENT_SCROLL, () => this._process());\n    this.refresh();\n\n    this._process();\n  } // Getters\n\n\n  static get Default() {\n    return Default$1;\n  }\n\n  static get NAME() {\n    return NAME$2;\n  } // Public\n\n\n  refresh() {\n    const autoMethod = this._scrollElement === this._scrollElement.window ? METHOD_OFFSET : METHOD_POSITION;\n    const offsetMethod = this._config.method === 'auto' ? autoMethod : this._config.method;\n    const offsetBase = offsetMethod === METHOD_POSITION ? this._getScrollTop() : 0;\n    this._offsets = [];\n    this._targets = [];\n    this._scrollHeight = this._getScrollHeight();\n    const targets = SelectorEngine.find(this._selector);\n    targets.map(element => {\n      const targetSelector = getSelectorFromElement(element);\n      const target = targetSelector ? SelectorEngine.findOne(targetSelector) : null;\n\n      if (target) {\n        const targetBCR = target.getBoundingClientRect();\n\n        if (targetBCR.width || targetBCR.height) {\n          return [Manipulator[offsetMethod](target).top + offsetBase, targetSelector];\n        }\n      }\n\n      return null;\n    }).filter(item => item).sort((a, b) => a[0] - b[0]).forEach(item => {\n      this._offsets.push(item[0]);\n\n      this._targets.push(item[1]);\n    });\n  }\n\n  dispose() {\n    EventHandler.off(this._scrollElement, EVENT_KEY$2);\n    super.dispose();\n  } // Private\n\n\n  _getConfig(config) {\n    config = { ...Default$1,\n      ...Manipulator.getDataAttributes(this._element),\n      ...(typeof config === 'object' && config ? config : {})\n    };\n\n    if (typeof config.target !== 'string' && isElement(config.target)) {\n      let {\n        id\n      } = config.target;\n\n      if (!id) {\n        id = getUID(NAME$2);\n        config.target.id = id;\n      }\n\n      config.target = `#${id}`;\n    }\n\n    typeCheckConfig(NAME$2, config, DefaultType$1);\n    return config;\n  }\n\n  _getScrollTop() {\n    return this._scrollElement === window ? this._scrollElement.pageYOffset : this._scrollElement.scrollTop;\n  }\n\n  _getScrollHeight() {\n    return this._scrollElement.scrollHeight || Math.max(document.body.scrollHeight, document.documentElement.scrollHeight);\n  }\n\n  _getOffsetHeight() {\n    return this._scrollElement === window ? window.innerHeight : this._scrollElement.getBoundingClientRect().height;\n  }\n\n  _process() {\n    const scrollTop = this._getScrollTop() + this._config.offset;\n\n    const scrollHeight = this._getScrollHeight();\n\n    const maxScroll = this._config.offset + scrollHeight - this._getOffsetHeight();\n\n    if (this._scrollHeight !== scrollHeight) {\n      this.refresh();\n    }\n\n    if (scrollTop >= maxScroll) {\n      const target = this._targets[this._targets.length - 1];\n\n      if (this._activeTarget !== target) {\n        this._activate(target);\n      }\n\n      return;\n    }\n\n    if (this._activeTarget && scrollTop < this._offsets[0] && this._offsets[0] > 0) {\n      this._activeTarget = null;\n\n      this._clear();\n\n      return;\n    }\n\n    for (let i = this._offsets.length; i--;) {\n      const isActiveTarget = this._activeTarget !== this._targets[i] && scrollTop >= this._offsets[i] && (typeof this._offsets[i + 1] === 'undefined' || scrollTop < this._offsets[i + 1]);\n\n      if (isActiveTarget) {\n        this._activate(this._targets[i]);\n      }\n    }\n  }\n\n  _activate(target) {\n    this._activeTarget = target;\n\n    this._clear();\n\n    const queries = this._selector.split(',').map(selector => `${selector}[data-bs-target=\"${target}\"],${selector}[href=\"${target}\"]`);\n\n    const link = SelectorEngine.findOne(queries.join(','));\n\n    if (link.classList.contains(CLASS_NAME_DROPDOWN_ITEM)) {\n      SelectorEngine.findOne(SELECTOR_DROPDOWN_TOGGLE$1, link.closest(SELECTOR_DROPDOWN$1)).classList.add(CLASS_NAME_ACTIVE$1);\n      link.classList.add(CLASS_NAME_ACTIVE$1);\n    } else {\n      // Set triggered link as active\n      link.classList.add(CLASS_NAME_ACTIVE$1);\n      SelectorEngine.parents(link, SELECTOR_NAV_LIST_GROUP$1).forEach(listGroup => {\n        // Set triggered links parents as active\n        // With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor\n        SelectorEngine.prev(listGroup, `${SELECTOR_NAV_LINKS}, ${SELECTOR_LIST_ITEMS}`).forEach(item => item.classList.add(CLASS_NAME_ACTIVE$1)); // Handle special case when .nav-link is inside .nav-item\n\n        SelectorEngine.prev(listGroup, SELECTOR_NAV_ITEMS).forEach(navItem => {\n          SelectorEngine.children(navItem, SELECTOR_NAV_LINKS).forEach(item => item.classList.add(CLASS_NAME_ACTIVE$1));\n        });\n      });\n    }\n\n    EventHandler.trigger(this._scrollElement, EVENT_ACTIVATE, {\n      relatedTarget: target\n    });\n  }\n\n  _clear() {\n    SelectorEngine.find(this._selector).filter(node => node.classList.contains(CLASS_NAME_ACTIVE$1)).forEach(node => node.classList.remove(CLASS_NAME_ACTIVE$1));\n  } // Static\n\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = ScrollSpy.getOrCreateInstance(this, config);\n\n      if (typeof config !== 'string') {\n        return;\n      }\n\n      if (typeof data[config] === 'undefined') {\n        throw new TypeError(`No method named \"${config}\"`);\n      }\n\n      data[config]();\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n  SelectorEngine.find(SELECTOR_DATA_SPY).forEach(spy => new ScrollSpy(spy));\n});\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .ScrollSpy to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(ScrollSpy);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): tab.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$1 = 'tab';\nconst DATA_KEY$1 = 'bs.tab';\nconst EVENT_KEY$1 = `.${DATA_KEY$1}`;\nconst DATA_API_KEY = '.data-api';\nconst EVENT_HIDE$1 = `hide${EVENT_KEY$1}`;\nconst EVENT_HIDDEN$1 = `hidden${EVENT_KEY$1}`;\nconst EVENT_SHOW$1 = `show${EVENT_KEY$1}`;\nconst EVENT_SHOWN$1 = `shown${EVENT_KEY$1}`;\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY$1}${DATA_API_KEY}`;\nconst CLASS_NAME_DROPDOWN_MENU = 'dropdown-menu';\nconst CLASS_NAME_ACTIVE = 'active';\nconst CLASS_NAME_FADE$1 = 'fade';\nconst CLASS_NAME_SHOW$1 = 'show';\nconst SELECTOR_DROPDOWN = '.dropdown';\nconst SELECTOR_NAV_LIST_GROUP = '.nav, .list-group';\nconst SELECTOR_ACTIVE = '.active';\nconst SELECTOR_ACTIVE_UL = ':scope > li > .active';\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"tab\"], [data-bs-toggle=\"pill\"], [data-bs-toggle=\"list\"]';\nconst SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle';\nconst SELECTOR_DROPDOWN_ACTIVE_CHILD = ':scope > .dropdown-menu .active';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Tab extends BaseComponent {\n  // Getters\n  static get NAME() {\n    return NAME$1;\n  } // Public\n\n\n  show() {\n    if (this._element.parentNode && this._element.parentNode.nodeType === Node.ELEMENT_NODE && this._element.classList.contains(CLASS_NAME_ACTIVE)) {\n      return;\n    }\n\n    let previous;\n    const target = getElementFromSelector(this._element);\n\n    const listElement = this._element.closest(SELECTOR_NAV_LIST_GROUP);\n\n    if (listElement) {\n      const itemSelector = listElement.nodeName === 'UL' || listElement.nodeName === 'OL' ? SELECTOR_ACTIVE_UL : SELECTOR_ACTIVE;\n      previous = SelectorEngine.find(itemSelector, listElement);\n      previous = previous[previous.length - 1];\n    }\n\n    const hideEvent = previous ? EventHandler.trigger(previous, EVENT_HIDE$1, {\n      relatedTarget: this._element\n    }) : null;\n    const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$1, {\n      relatedTarget: previous\n    });\n\n    if (showEvent.defaultPrevented || hideEvent !== null && hideEvent.defaultPrevented) {\n      return;\n    }\n\n    this._activate(this._element, listElement);\n\n    const complete = () => {\n      EventHandler.trigger(previous, EVENT_HIDDEN$1, {\n        relatedTarget: this._element\n      });\n      EventHandler.trigger(this._element, EVENT_SHOWN$1, {\n        relatedTarget: previous\n      });\n    };\n\n    if (target) {\n      this._activate(target, target.parentNode, complete);\n    } else {\n      complete();\n    }\n  } // Private\n\n\n  _activate(element, container, callback) {\n    const activeElements = container && (container.nodeName === 'UL' || container.nodeName === 'OL') ? SelectorEngine.find(SELECTOR_ACTIVE_UL, container) : SelectorEngine.children(container, SELECTOR_ACTIVE);\n    const active = activeElements[0];\n    const isTransitioning = callback && active && active.classList.contains(CLASS_NAME_FADE$1);\n\n    const complete = () => this._transitionComplete(element, active, callback);\n\n    if (active && isTransitioning) {\n      active.classList.remove(CLASS_NAME_SHOW$1);\n\n      this._queueCallback(complete, element, true);\n    } else {\n      complete();\n    }\n  }\n\n  _transitionComplete(element, active, callback) {\n    if (active) {\n      active.classList.remove(CLASS_NAME_ACTIVE);\n      const dropdownChild = SelectorEngine.findOne(SELECTOR_DROPDOWN_ACTIVE_CHILD, active.parentNode);\n\n      if (dropdownChild) {\n        dropdownChild.classList.remove(CLASS_NAME_ACTIVE);\n      }\n\n      if (active.getAttribute('role') === 'tab') {\n        active.setAttribute('aria-selected', false);\n      }\n    }\n\n    element.classList.add(CLASS_NAME_ACTIVE);\n\n    if (element.getAttribute('role') === 'tab') {\n      element.setAttribute('aria-selected', true);\n    }\n\n    reflow(element);\n\n    if (element.classList.contains(CLASS_NAME_FADE$1)) {\n      element.classList.add(CLASS_NAME_SHOW$1);\n    }\n\n    let parent = element.parentNode;\n\n    if (parent && parent.nodeName === 'LI') {\n      parent = parent.parentNode;\n    }\n\n    if (parent && parent.classList.contains(CLASS_NAME_DROPDOWN_MENU)) {\n      const dropdownElement = element.closest(SELECTOR_DROPDOWN);\n\n      if (dropdownElement) {\n        SelectorEngine.find(SELECTOR_DROPDOWN_TOGGLE, dropdownElement).forEach(dropdown => dropdown.classList.add(CLASS_NAME_ACTIVE));\n      }\n\n      element.setAttribute('aria-expanded', true);\n    }\n\n    if (callback) {\n      callback();\n    }\n  } // Static\n\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Tab.getOrCreateInstance(this);\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config]();\n      }\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n  if (['A', 'AREA'].includes(this.tagName)) {\n    event.preventDefault();\n  }\n\n  if (isDisabled(this)) {\n    return;\n  }\n\n  const data = Tab.getOrCreateInstance(this);\n  data.show();\n});\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Tab to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Tab);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): toast.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'toast';\nconst DATA_KEY = 'bs.toast';\nconst EVENT_KEY = `.${DATA_KEY}`;\nconst EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY}`;\nconst EVENT_MOUSEOVER = `mouseover${EVENT_KEY}`;\nconst EVENT_MOUSEOUT = `mouseout${EVENT_KEY}`;\nconst EVENT_FOCUSIN = `focusin${EVENT_KEY}`;\nconst EVENT_FOCUSOUT = `focusout${EVENT_KEY}`;\nconst EVENT_HIDE = `hide${EVENT_KEY}`;\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`;\nconst EVENT_SHOW = `show${EVENT_KEY}`;\nconst EVENT_SHOWN = `shown${EVENT_KEY}`;\nconst CLASS_NAME_FADE = 'fade';\nconst CLASS_NAME_HIDE = 'hide';\nconst CLASS_NAME_SHOW = 'show';\nconst CLASS_NAME_SHOWING = 'showing';\nconst DefaultType = {\n  animation: 'boolean',\n  autohide: 'boolean',\n  delay: 'number'\n};\nconst Default = {\n  animation: true,\n  autohide: true,\n  delay: 5000\n};\nconst SELECTOR_DATA_DISMISS = '[data-bs-dismiss=\"toast\"]';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Toast extends BaseComponent {\n  constructor(element, config) {\n    super(element);\n    this._config = this._getConfig(config);\n    this._timeout = null;\n    this._hasMouseInteraction = false;\n    this._hasKeyboardInteraction = false;\n\n    this._setListeners();\n  } // Getters\n\n\n  static get DefaultType() {\n    return DefaultType;\n  }\n\n  static get Default() {\n    return Default;\n  }\n\n  static get NAME() {\n    return NAME;\n  } // Public\n\n\n  show() {\n    const showEvent = EventHandler.trigger(this._element, EVENT_SHOW);\n\n    if (showEvent.defaultPrevented) {\n      return;\n    }\n\n    this._clearTimeout();\n\n    if (this._config.animation) {\n      this._element.classList.add(CLASS_NAME_FADE);\n    }\n\n    const complete = () => {\n      this._element.classList.remove(CLASS_NAME_SHOWING);\n\n      this._element.classList.add(CLASS_NAME_SHOW);\n\n      EventHandler.trigger(this._element, EVENT_SHOWN);\n\n      this._maybeScheduleHide();\n    };\n\n    this._element.classList.remove(CLASS_NAME_HIDE);\n\n    reflow(this._element);\n\n    this._element.classList.add(CLASS_NAME_SHOWING);\n\n    this._queueCallback(complete, this._element, this._config.animation);\n  }\n\n  hide() {\n    if (!this._element.classList.contains(CLASS_NAME_SHOW)) {\n      return;\n    }\n\n    const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE);\n\n    if (hideEvent.defaultPrevented) {\n      return;\n    }\n\n    const complete = () => {\n      this._element.classList.add(CLASS_NAME_HIDE);\n\n      EventHandler.trigger(this._element, EVENT_HIDDEN);\n    };\n\n    this._element.classList.remove(CLASS_NAME_SHOW);\n\n    this._queueCallback(complete, this._element, this._config.animation);\n  }\n\n  dispose() {\n    this._clearTimeout();\n\n    if (this._element.classList.contains(CLASS_NAME_SHOW)) {\n      this._element.classList.remove(CLASS_NAME_SHOW);\n    }\n\n    super.dispose();\n  } // Private\n\n\n  _getConfig(config) {\n    config = { ...Default,\n      ...Manipulator.getDataAttributes(this._element),\n      ...(typeof config === 'object' && config ? config : {})\n    };\n    typeCheckConfig(NAME, config, this.constructor.DefaultType);\n    return config;\n  }\n\n  _maybeScheduleHide() {\n    if (!this._config.autohide) {\n      return;\n    }\n\n    if (this._hasMouseInteraction || this._hasKeyboardInteraction) {\n      return;\n    }\n\n    this._timeout = setTimeout(() => {\n      this.hide();\n    }, this._config.delay);\n  }\n\n  _onInteraction(event, isInteracting) {\n    switch (event.type) {\n      case 'mouseover':\n      case 'mouseout':\n        this._hasMouseInteraction = isInteracting;\n        break;\n\n      case 'focusin':\n      case 'focusout':\n        this._hasKeyboardInteraction = isInteracting;\n        break;\n    }\n\n    if (isInteracting) {\n      this._clearTimeout();\n\n      return;\n    }\n\n    const nextElement = event.relatedTarget;\n\n    if (this._element === nextElement || this._element.contains(nextElement)) {\n      return;\n    }\n\n    this._maybeScheduleHide();\n  }\n\n  _setListeners() {\n    EventHandler.on(this._element, EVENT_CLICK_DISMISS, SELECTOR_DATA_DISMISS, () => this.hide());\n    EventHandler.on(this._element, EVENT_MOUSEOVER, event => this._onInteraction(event, true));\n    EventHandler.on(this._element, EVENT_MOUSEOUT, event => this._onInteraction(event, false));\n    EventHandler.on(this._element, EVENT_FOCUSIN, event => this._onInteraction(event, true));\n    EventHandler.on(this._element, EVENT_FOCUSOUT, event => this._onInteraction(event, false));\n  }\n\n  _clearTimeout() {\n    clearTimeout(this._timeout);\n    this._timeout = null;\n  } // Static\n\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Toast.getOrCreateInstance(this, config);\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config](this);\n      }\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Toast to jQuery only if jQuery is present\n */\n\n\ndefineJQueryPlugin(Toast);\n\nexport { Alert, Button, Carousel, Collapse, Dropdown, Modal, Offcanvas, Popover, ScrollSpy, Tab, Toast, Tooltip };\n//# sourceMappingURL=bootstrap.esm.js.map\n"
  },
  {
    "path": "src/sourceDev.WebApp/SharedThemes/solar/wwwroot/js/jquery.js",
    "content": "/*!\n * jQuery JavaScript Library v3.7.0\n * https://jquery.com/\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license\n * https://jquery.org/license\n *\n * Date: 2023-05-11T18:29Z\n */\n(function (global, factory) {\n\n\t\"use strict\";\n\n\tif (typeof module === \"object\" && typeof module.exports === \"object\") {\n\n\t\t// For CommonJS and CommonJS-like environments where a proper `window`\n\t\t// is present, execute the factory and get jQuery.\n\t\t// For environments that do not have a `window` with a `document`\n\t\t// (such as Node.js), expose a factory as module.exports.\n\t\t// This accentuates the need for the creation of a real `window`.\n\t\t// e.g. var jQuery = require(\"jquery\")(window);\n\t\t// See ticket trac-14549 for more info.\n\t\tmodule.exports = global.document ?\n\t\t\tfactory(global, true) :\n\t\t\tfunction (w) {\n\t\t\t\tif (!w.document) {\n\t\t\t\t\tthrow new Error(\"jQuery requires a window with a document\");\n\t\t\t\t}\n\t\t\t\treturn factory(w);\n\t\t\t};\n\t} else {\n\t\tfactory(global);\n\t}\n\n\t// Pass this if window is not defined yet\n})(typeof window !== \"undefined\" ? window : this, function (window, noGlobal) {\n\n\t// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1\n\t// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode\n\t// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common\n\t// enough that all such attempts are guarded in a try block.\n\t\"use strict\";\n\n\tvar arr = [];\n\n\tvar getProto = Object.getPrototypeOf;\n\n\tvar slice = arr.slice;\n\n\tvar flat = arr.flat ? function (array) {\n\t\treturn arr.flat.call(array);\n\t} : function (array) {\n\t\treturn arr.concat.apply([], array);\n\t};\n\n\n\tvar push = arr.push;\n\n\tvar indexOf = arr.indexOf;\n\n\tvar class2type = {};\n\n\tvar toString = class2type.toString;\n\n\tvar hasOwn = class2type.hasOwnProperty;\n\n\tvar fnToString = hasOwn.toString;\n\n\tvar ObjectFunctionString = fnToString.call(Object);\n\n\tvar support = {};\n\n\tvar isFunction = function isFunction(obj) {\n\n\t\t// Support: Chrome <=57, Firefox <=52\n\t\t// In some browsers, typeof returns \"function\" for HTML <object> elements\n\t\t// (i.e., `typeof document.createElement( \"object\" ) === \"function\"`).\n\t\t// We don't want to classify *any* DOM node as a function.\n\t\t// Support: QtWeb <=3.8.5, WebKit <=534.34, wkhtmltopdf tool <=0.12.5\n\t\t// Plus for old WebKit, typeof returns \"function\" for HTML collections\n\t\t// (e.g., `typeof document.getElementsByTagName(\"div\") === \"function\"`). (gh-4756)\n\t\treturn typeof obj === \"function\" && typeof obj.nodeType !== \"number\" &&\n\t\t\ttypeof obj.item !== \"function\";\n\t};\n\n\n\tvar isWindow = function isWindow(obj) {\n\t\treturn obj != null && obj === obj.window;\n\t};\n\n\n\tvar document = window.document;\n\n\n\n\tvar preservedScriptAttributes = {\n\t\ttype: true,\n\t\tsrc: true,\n\t\tnonce: true,\n\t\tnoModule: true\n\t};\n\n\tfunction DOMEval(code, node, doc) {\n\t\tdoc = doc || document;\n\n\t\tvar i, val,\n\t\t\tscript = doc.createElement(\"script\");\n\n\t\tscript.text = code;\n\t\tif (node) {\n\t\t\tfor (i in preservedScriptAttributes) {\n\n\t\t\t\t// Support: Firefox 64+, Edge 18+\n\t\t\t\t// Some browsers don't support the \"nonce\" property on scripts.\n\t\t\t\t// On the other hand, just using `getAttribute` is not enough as\n\t\t\t\t// the `nonce` attribute is reset to an empty string whenever it\n\t\t\t\t// becomes browsing-context connected.\n\t\t\t\t// See https://github.com/whatwg/html/issues/2369\n\t\t\t\t// See https://html.spec.whatwg.org/#nonce-attributes\n\t\t\t\t// The `node.getAttribute` check was added for the sake of\n\t\t\t\t// `jQuery.globalEval` so that it can fake a nonce-containing node\n\t\t\t\t// via an object.\n\t\t\t\tval = node[i] || node.getAttribute && node.getAttribute(i);\n\t\t\t\tif (val) {\n\t\t\t\t\tscript.setAttribute(i, val);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tdoc.head.appendChild(script).parentNode.removeChild(script);\n\t}\n\n\n\tfunction toType(obj) {\n\t\tif (obj == null) {\n\t\t\treturn obj + \"\";\n\t\t}\n\n\t\t// Support: Android <=2.3 only (functionish RegExp)\n\t\treturn typeof obj === \"object\" || typeof obj === \"function\" ?\n\t\t\tclass2type[toString.call(obj)] || \"object\" :\n\t\t\ttypeof obj;\n\t}\n\t/* global Symbol */\n\t// Defining this global in .eslintrc.json would create a danger of using the global\n\t// unguarded in another place, it seems safer to define global only for this module\n\n\n\n\tvar version = \"3.7.0\",\n\n\t\trhtmlSuffix = /HTML$/i,\n\n\t\t// Define a local copy of jQuery\n\t\tjQuery = function (selector, context) {\n\n\t\t\t// The jQuery object is actually just the init constructor 'enhanced'\n\t\t\t// Need init if jQuery is called (just allow error to be thrown if not included)\n\t\t\treturn new jQuery.fn.init(selector, context);\n\t\t};\n\n\tjQuery.fn = jQuery.prototype = {\n\n\t\t// The current version of jQuery being used\n\t\tjquery: version,\n\n\t\tconstructor: jQuery,\n\n\t\t// The default length of a jQuery object is 0\n\t\tlength: 0,\n\n\t\ttoArray: function () {\n\t\t\treturn slice.call(this);\n\t\t},\n\n\t\t// Get the Nth element in the matched element set OR\n\t\t// Get the whole matched element set as a clean array\n\t\tget: function (num) {\n\n\t\t\t// Return all the elements in a clean array\n\t\t\tif (num == null) {\n\t\t\t\treturn slice.call(this);\n\t\t\t}\n\n\t\t\t// Return just the one element from the set\n\t\t\treturn num < 0 ? this[num + this.length] : this[num];\n\t\t},\n\n\t\t// Take an array of elements and push it onto the stack\n\t\t// (returning the new matched element set)\n\t\tpushStack: function (elems) {\n\n\t\t\t// Build a new jQuery matched element set\n\t\t\tvar ret = jQuery.merge(this.constructor(), elems);\n\n\t\t\t// Add the old object onto the stack (as a reference)\n\t\t\tret.prevObject = this;\n\n\t\t\t// Return the newly-formed element set\n\t\t\treturn ret;\n\t\t},\n\n\t\t// Execute a callback for every element in the matched set.\n\t\teach: function (callback) {\n\t\t\treturn jQuery.each(this, callback);\n\t\t},\n\n\t\tmap: function (callback) {\n\t\t\treturn this.pushStack(jQuery.map(this, function (elem, i) {\n\t\t\t\treturn callback.call(elem, i, elem);\n\t\t\t}));\n\t\t},\n\n\t\tslice: function () {\n\t\t\treturn this.pushStack(slice.apply(this, arguments));\n\t\t},\n\n\t\tfirst: function () {\n\t\t\treturn this.eq(0);\n\t\t},\n\n\t\tlast: function () {\n\t\t\treturn this.eq(-1);\n\t\t},\n\n\t\teven: function () {\n\t\t\treturn this.pushStack(jQuery.grep(this, function (_elem, i) {\n\t\t\t\treturn (i + 1) % 2;\n\t\t\t}));\n\t\t},\n\n\t\todd: function () {\n\t\t\treturn this.pushStack(jQuery.grep(this, function (_elem, i) {\n\t\t\t\treturn i % 2;\n\t\t\t}));\n\t\t},\n\n\t\teq: function (i) {\n\t\t\tvar len = this.length,\n\t\t\t\tj = +i + (i < 0 ? len : 0);\n\t\t\treturn this.pushStack(j >= 0 && j < len ? [this[j]] : []);\n\t\t},\n\n\t\tend: function () {\n\t\t\treturn this.prevObject || this.constructor();\n\t\t},\n\n\t\t// For internal use only.\n\t\t// Behaves like an Array's method, not like a jQuery method.\n\t\tpush: push,\n\t\tsort: arr.sort,\n\t\tsplice: arr.splice\n\t};\n\n\tjQuery.extend = jQuery.fn.extend = function () {\n\t\tvar options, name, src, copy, copyIsArray, clone,\n\t\t\ttarget = arguments[0] || {},\n\t\t\ti = 1,\n\t\t\tlength = arguments.length,\n\t\t\tdeep = false;\n\n\t\t// Handle a deep copy situation\n\t\tif (typeof target === \"boolean\") {\n\t\t\tdeep = target;\n\n\t\t\t// Skip the boolean and the target\n\t\t\ttarget = arguments[i] || {};\n\t\t\ti++;\n\t\t}\n\n\t\t// Handle case when target is a string or something (possible in deep copy)\n\t\tif (typeof target !== \"object\" && !isFunction(target)) {\n\t\t\ttarget = {};\n\t\t}\n\n\t\t// Extend jQuery itself if only one argument is passed\n\t\tif (i === length) {\n\t\t\ttarget = this;\n\t\t\ti--;\n\t\t}\n\n\t\tfor (; i < length; i++) {\n\n\t\t\t// Only deal with non-null/undefined values\n\t\t\tif ((options = arguments[i]) != null) {\n\n\t\t\t\t// Extend the base object\n\t\t\t\tfor (name in options) {\n\t\t\t\t\tcopy = options[name];\n\n\t\t\t\t\t// Prevent Object.prototype pollution\n\t\t\t\t\t// Prevent never-ending loop\n\t\t\t\t\tif (name === \"__proto__\" || target === copy) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\t\tif (deep && copy && (jQuery.isPlainObject(copy) ||\n\t\t\t\t\t\t(copyIsArray = Array.isArray(copy)))) {\n\t\t\t\t\t\tsrc = target[name];\n\n\t\t\t\t\t\t// Ensure proper type for the source value\n\t\t\t\t\t\tif (copyIsArray && !Array.isArray(src)) {\n\t\t\t\t\t\t\tclone = [];\n\t\t\t\t\t\t} else if (!copyIsArray && !jQuery.isPlainObject(src)) {\n\t\t\t\t\t\t\tclone = {};\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tclone = src;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcopyIsArray = false;\n\n\t\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\t\ttarget[name] = jQuery.extend(deep, clone, copy);\n\n\t\t\t\t\t\t// Don't bring in undefined values\n\t\t\t\t\t} else if (copy !== undefined) {\n\t\t\t\t\t\ttarget[name] = copy;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Return the modified object\n\t\treturn target;\n\t};\n\n\tjQuery.extend({\n\n\t\t// Unique for each copy of jQuery on the page\n\t\texpando: \"jQuery\" + (version + Math.random()).replace(/\\D/g, \"\"),\n\n\t\t// Assume jQuery is ready without the ready module\n\t\tisReady: true,\n\n\t\terror: function (msg) {\n\t\t\tthrow new Error(msg);\n\t\t},\n\n\t\tnoop: function () { },\n\n\t\tisPlainObject: function (obj) {\n\t\t\tvar proto, Ctor;\n\n\t\t\t// Detect obvious negatives\n\t\t\t// Use toString instead of jQuery.type to catch host objects\n\t\t\tif (!obj || toString.call(obj) !== \"[object Object]\") {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tproto = getProto(obj);\n\n\t\t\t// Objects with no prototype (e.g., `Object.create( null )`) are plain\n\t\t\tif (!proto) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\t// Objects with prototype are plain iff they were constructed by a global Object function\n\t\t\tCtor = hasOwn.call(proto, \"constructor\") && proto.constructor;\n\t\t\treturn typeof Ctor === \"function\" && fnToString.call(Ctor) === ObjectFunctionString;\n\t\t},\n\n\t\tisEmptyObject: function (obj) {\n\t\t\tvar name;\n\n\t\t\tfor (name in obj) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\n\t\t// Evaluates a script in a provided context; falls back to the global one\n\t\t// if not specified.\n\t\tglobalEval: function (code, options, doc) {\n\t\t\tDOMEval(code, { nonce: options && options.nonce }, doc);\n\t\t},\n\n\t\teach: function (obj, callback) {\n\t\t\tvar length, i = 0;\n\n\t\t\tif (isArrayLike(obj)) {\n\t\t\t\tlength = obj.length;\n\t\t\t\tfor (; i < length; i++) {\n\t\t\t\t\tif (callback.call(obj[i], i, obj[i]) === false) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor (i in obj) {\n\t\t\t\t\tif (callback.call(obj[i], i, obj[i]) === false) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn obj;\n\t\t},\n\n\n\t\t// Retrieve the text value of an array of DOM nodes\n\t\ttext: function (elem) {\n\t\t\tvar node,\n\t\t\t\tret = \"\",\n\t\t\t\ti = 0,\n\t\t\t\tnodeType = elem.nodeType;\n\n\t\t\tif (!nodeType) {\n\n\t\t\t\t// If no nodeType, this is expected to be an array\n\t\t\t\twhile ((node = elem[i++])) {\n\n\t\t\t\t\t// Do not traverse comment nodes\n\t\t\t\t\tret += jQuery.text(node);\n\t\t\t\t}\n\t\t\t} else if (nodeType === 1 || nodeType === 9 || nodeType === 11) {\n\t\t\t\treturn elem.textContent;\n\t\t\t} else if (nodeType === 3 || nodeType === 4) {\n\t\t\t\treturn elem.nodeValue;\n\t\t\t}\n\n\t\t\t// Do not include comment or processing instruction nodes\n\n\t\t\treturn ret;\n\t\t},\n\n\t\t// results is for internal usage only\n\t\tmakeArray: function (arr, results) {\n\t\t\tvar ret = results || [];\n\n\t\t\tif (arr != null) {\n\t\t\t\tif (isArrayLike(Object(arr))) {\n\t\t\t\t\tjQuery.merge(ret,\n\t\t\t\t\t\ttypeof arr === \"string\" ?\n\t\t\t\t\t\t\t[arr] : arr\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\tpush.call(ret, arr);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn ret;\n\t\t},\n\n\t\tinArray: function (elem, arr, i) {\n\t\t\treturn arr == null ? -1 : indexOf.call(arr, elem, i);\n\t\t},\n\n\t\tisXMLDoc: function (elem) {\n\t\t\tvar namespace = elem && elem.namespaceURI,\n\t\t\t\tdocElem = elem && (elem.ownerDocument || elem).documentElement;\n\n\t\t\t// Assume HTML when documentElement doesn't yet exist, such as inside\n\t\t\t// document fragments.\n\t\t\treturn !rhtmlSuffix.test(namespace || docElem && docElem.nodeName || \"HTML\");\n\t\t},\n\n\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\tmerge: function (first, second) {\n\t\t\tvar len = +second.length,\n\t\t\t\tj = 0,\n\t\t\t\ti = first.length;\n\n\t\t\tfor (; j < len; j++) {\n\t\t\t\tfirst[i++] = second[j];\n\t\t\t}\n\n\t\t\tfirst.length = i;\n\n\t\t\treturn first;\n\t\t},\n\n\t\tgrep: function (elems, callback, invert) {\n\t\t\tvar callbackInverse,\n\t\t\t\tmatches = [],\n\t\t\t\ti = 0,\n\t\t\t\tlength = elems.length,\n\t\t\t\tcallbackExpect = !invert;\n\n\t\t\t// Go through the array, only saving the items\n\t\t\t// that pass the validator function\n\t\t\tfor (; i < length; i++) {\n\t\t\t\tcallbackInverse = !callback(elems[i], i);\n\t\t\t\tif (callbackInverse !== callbackExpect) {\n\t\t\t\t\tmatches.push(elems[i]);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn matches;\n\t\t},\n\n\t\t// arg is for internal usage only\n\t\tmap: function (elems, callback, arg) {\n\t\t\tvar length, value,\n\t\t\t\ti = 0,\n\t\t\t\tret = [];\n\n\t\t\t// Go through the array, translating each of the items to their new values\n\t\t\tif (isArrayLike(elems)) {\n\t\t\t\tlength = elems.length;\n\t\t\t\tfor (; i < length; i++) {\n\t\t\t\t\tvalue = callback(elems[i], i, arg);\n\n\t\t\t\t\tif (value != null) {\n\t\t\t\t\t\tret.push(value);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Go through every key on the object,\n\t\t\t} else {\n\t\t\t\tfor (i in elems) {\n\t\t\t\t\tvalue = callback(elems[i], i, arg);\n\n\t\t\t\t\tif (value != null) {\n\t\t\t\t\t\tret.push(value);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Flatten any nested arrays\n\t\t\treturn flat(ret);\n\t\t},\n\n\t\t// A global GUID counter for objects\n\t\tguid: 1,\n\n\t\t// jQuery.support is not used in Core but other projects attach their\n\t\t// properties to it so it needs to exist.\n\t\tsupport: support\n\t});\n\n\tif (typeof Symbol === \"function\") {\n\t\tjQuery.fn[Symbol.iterator] = arr[Symbol.iterator];\n\t}\n\n\t// Populate the class2type map\n\tjQuery.each(\"Boolean Number String Function Array Date RegExp Object Error Symbol\".split(\" \"),\n\t\tfunction (_i, name) {\n\t\t\tclass2type[\"[object \" + name + \"]\"] = name.toLowerCase();\n\t\t});\n\n\tfunction isArrayLike(obj) {\n\n\t\t// Support: real iOS 8.2 only (not reproducible in simulator)\n\t\t// `in` check used to prevent JIT error (gh-2145)\n\t\t// hasOwn isn't used here due to false negatives\n\t\t// regarding Nodelist length in IE\n\t\tvar length = !!obj && \"length\" in obj && obj.length,\n\t\t\ttype = toType(obj);\n\n\t\tif (isFunction(obj) || isWindow(obj)) {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn type === \"array\" || length === 0 ||\n\t\t\ttypeof length === \"number\" && length > 0 && (length - 1) in obj;\n\t}\n\n\n\tfunction nodeName(elem, name) {\n\n\t\treturn elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();\n\n\t}\n\tvar pop = arr.pop;\n\n\n\tvar sort = arr.sort;\n\n\n\tvar splice = arr.splice;\n\n\n\tvar whitespace = \"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\";\n\n\n\tvar rtrimCSS = new RegExp(\n\t\t\"^\" + whitespace + \"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\" + whitespace + \"+$\",\n\t\t\"g\"\n\t);\n\n\n\n\n\t// Note: an element does not contain itself\n\tjQuery.contains = function (a, b) {\n\t\tvar bup = b && b.parentNode;\n\n\t\treturn a === bup || !!(bup && bup.nodeType === 1 && (\n\n\t\t\t// Support: IE 9 - 11+\n\t\t\t// IE doesn't have `contains` on SVG.\n\t\t\ta.contains ?\n\t\t\t\ta.contains(bup) :\n\t\t\t\ta.compareDocumentPosition && a.compareDocumentPosition(bup) & 16\n\t\t));\n\t};\n\n\n\n\n\t// CSS string/identifier serialization\n\t// https://drafts.csswg.org/cssom/#common-serializing-idioms\n\tvar rcssescape = /([\\0-\\x1f\\x7f]|^-?\\d)|^-$|[^\\x80-\\uFFFF\\w-]/g;\n\n\tfunction fcssescape(ch, asCodePoint) {\n\t\tif (asCodePoint) {\n\n\t\t\t// U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER\n\t\t\tif (ch === \"\\0\") {\n\t\t\t\treturn \"\\uFFFD\";\n\t\t\t}\n\n\t\t\t// Control characters and (dependent upon position) numbers get escaped as code points\n\t\t\treturn ch.slice(0, -1) + \"\\\\\" + ch.charCodeAt(ch.length - 1).toString(16) + \" \";\n\t\t}\n\n\t\t// Other potentially-special ASCII characters get backslash-escaped\n\t\treturn \"\\\\\" + ch;\n\t}\n\n\tjQuery.escapeSelector = function (sel) {\n\t\treturn (sel + \"\").replace(rcssescape, fcssescape);\n\t};\n\n\n\n\n\tvar preferredDoc = document,\n\t\tpushNative = push;\n\n\t(function () {\n\n\t\tvar i,\n\t\t\tExpr,\n\t\t\toutermostContext,\n\t\t\tsortInput,\n\t\t\thasDuplicate,\n\t\t\tpush = pushNative,\n\n\t\t\t// Local document vars\n\t\t\tdocument,\n\t\t\tdocumentElement,\n\t\t\tdocumentIsHTML,\n\t\t\trbuggyQSA,\n\t\t\tmatches,\n\n\t\t\t// Instance-specific data\n\t\t\texpando = jQuery.expando,\n\t\t\tdirruns = 0,\n\t\t\tdone = 0,\n\t\t\tclassCache = createCache(),\n\t\t\ttokenCache = createCache(),\n\t\t\tcompilerCache = createCache(),\n\t\t\tnonnativeSelectorCache = createCache(),\n\t\t\tsortOrder = function (a, b) {\n\t\t\t\tif (a === b) {\n\t\t\t\t\thasDuplicate = true;\n\t\t\t\t}\n\t\t\t\treturn 0;\n\t\t\t},\n\n\t\t\tbooleans = \"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|\" +\n\t\t\t\t\"loop|multiple|open|readonly|required|scoped\",\n\n\t\t\t// Regular expressions\n\n\t\t\t// https://www.w3.org/TR/css-syntax-3/#ident-token-diagram\n\t\t\tidentifier = \"(?:\\\\\\\\[\\\\da-fA-F]{1,6}\" + whitespace +\n\t\t\t\t\"?|\\\\\\\\[^\\\\r\\\\n\\\\f]|[\\\\w-]|[^\\0-\\\\x7f])+\",\n\n\t\t\t// Attribute selectors: https://www.w3.org/TR/selectors/#attribute-selectors\n\t\t\tattributes = \"\\\\[\" + whitespace + \"*(\" + identifier + \")(?:\" + whitespace +\n\n\t\t\t\t// Operator (capture 2)\n\t\t\t\t\"*([*^$|!~]?=)\" + whitespace +\n\n\t\t\t\t// \"Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]\"\n\t\t\t\t\"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\" + identifier + \"))|)\" +\n\t\t\t\twhitespace + \"*\\\\]\",\n\n\t\t\tpseudos = \":(\" + identifier + \")(?:\\\\((\" +\n\n\t\t\t\t// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:\n\t\t\t\t// 1. quoted (capture 3; capture 4 or capture 5)\n\t\t\t\t\"('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|\" +\n\n\t\t\t\t// 2. simple (capture 6)\n\t\t\t\t\"((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\" + attributes + \")*)|\" +\n\n\t\t\t\t// 3. anything else (capture 2)\n\t\t\t\t\".*\" +\n\t\t\t\t\")\\\\)|)\",\n\n\t\t\t// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter\n\t\t\trwhitespace = new RegExp(whitespace + \"+\", \"g\"),\n\n\t\t\trcomma = new RegExp(\"^\" + whitespace + \"*,\" + whitespace + \"*\"),\n\t\t\trleadingCombinator = new RegExp(\"^\" + whitespace + \"*([>+~]|\" + whitespace + \")\" +\n\t\t\t\twhitespace + \"*\"),\n\t\t\trdescend = new RegExp(whitespace + \"|>\"),\n\n\t\t\trpseudo = new RegExp(pseudos),\n\t\t\tridentifier = new RegExp(\"^\" + identifier + \"$\"),\n\n\t\t\tmatchExpr = {\n\t\t\t\tID: new RegExp(\"^#(\" + identifier + \")\"),\n\t\t\t\tCLASS: new RegExp(\"^\\\\.(\" + identifier + \")\"),\n\t\t\t\tTAG: new RegExp(\"^(\" + identifier + \"|[*])\"),\n\t\t\t\tATTR: new RegExp(\"^\" + attributes),\n\t\t\t\tPSEUDO: new RegExp(\"^\" + pseudos),\n\t\t\t\tCHILD: new RegExp(\n\t\t\t\t\t\"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\" +\n\t\t\t\t\twhitespace + \"*(even|odd|(([+-]|)(\\\\d*)n|)\" + whitespace + \"*(?:([+-]|)\" +\n\t\t\t\t\twhitespace + \"*(\\\\d+)|))\" + whitespace + \"*\\\\)|)\", \"i\"),\n\t\t\t\tbool: new RegExp(\"^(?:\" + booleans + \")$\", \"i\"),\n\n\t\t\t\t// For use in libraries implementing .is()\n\t\t\t\t// We use this for POS matching in `select`\n\t\t\t\tneedsContext: new RegExp(\"^\" + whitespace +\n\t\t\t\t\t\"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\" + whitespace +\n\t\t\t\t\t\"*((?:-\\\\d)?\\\\d*)\" + whitespace + \"*\\\\)|)(?=[^-]|$)\", \"i\")\n\t\t\t},\n\n\t\t\trinputs = /^(?:input|select|textarea|button)$/i,\n\t\t\trheader = /^h\\d$/i,\n\n\t\t\t// Easily-parseable/retrievable ID or TAG or CLASS selectors\n\t\t\trquickExpr = /^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,\n\n\t\t\trsibling = /[+~]/,\n\n\t\t\t// CSS escapes\n\t\t\t// https://www.w3.org/TR/CSS21/syndata.html#escaped-characters\n\t\t\trunescape = new RegExp(\"\\\\\\\\[\\\\da-fA-F]{1,6}\" + whitespace +\n\t\t\t\t\"?|\\\\\\\\([^\\\\r\\\\n\\\\f])\", \"g\"),\n\t\t\tfunescape = function (escape, nonHex) {\n\t\t\t\tvar high = \"0x\" + escape.slice(1) - 0x10000;\n\n\t\t\t\tif (nonHex) {\n\n\t\t\t\t\t// Strip the backslash prefix from a non-hex escape sequence\n\t\t\t\t\treturn nonHex;\n\t\t\t\t}\n\n\t\t\t\t// Replace a hexadecimal escape sequence with the encoded Unicode code point\n\t\t\t\t// Support: IE <=11+\n\t\t\t\t// For values outside the Basic Multilingual Plane (BMP), manually construct a\n\t\t\t\t// surrogate pair\n\t\t\t\treturn high < 0 ?\n\t\t\t\t\tString.fromCharCode(high + 0x10000) :\n\t\t\t\t\tString.fromCharCode(high >> 10 | 0xD800, high & 0x3FF | 0xDC00);\n\t\t\t},\n\n\t\t\t// Used for iframes; see `setDocument`.\n\t\t\t// Support: IE 9 - 11+, Edge 12 - 18+\n\t\t\t// Removing the function wrapper causes a \"Permission Denied\"\n\t\t\t// error in IE/Edge.\n\t\t\tunloadHandler = function () {\n\t\t\t\tsetDocument();\n\t\t\t},\n\n\t\t\tinDisabledFieldset = addCombinator(\n\t\t\t\tfunction (elem) {\n\t\t\t\t\treturn elem.disabled === true && nodeName(elem, \"fieldset\");\n\t\t\t\t},\n\t\t\t\t{ dir: \"parentNode\", next: \"legend\" }\n\t\t\t);\n\n\t\t// Support: IE <=9 only\n\t\t// Accessing document.activeElement can throw unexpectedly\n\t\t// https://bugs.jquery.com/ticket/13393\n\t\tfunction safeActiveElement() {\n\t\t\ttry {\n\t\t\t\treturn document.activeElement;\n\t\t\t} catch (err) { }\n\t\t}\n\n\t\t// Optimize for push.apply( _, NodeList )\n\t\ttry {\n\t\t\tpush.apply(\n\t\t\t\t(arr = slice.call(preferredDoc.childNodes)),\n\t\t\t\tpreferredDoc.childNodes\n\t\t\t);\n\n\t\t\t// Support: Android <=4.0\n\t\t\t// Detect silently failing push.apply\n\t\t\t// eslint-disable-next-line no-unused-expressions\n\t\t\tarr[preferredDoc.childNodes.length].nodeType;\n\t\t} catch (e) {\n\t\t\tpush = {\n\t\t\t\tapply: function (target, els) {\n\t\t\t\t\tpushNative.apply(target, slice.call(els));\n\t\t\t\t},\n\t\t\t\tcall: function (target) {\n\t\t\t\t\tpushNative.apply(target, slice.call(arguments, 1));\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\n\t\tfunction find(selector, context, results, seed) {\n\t\t\tvar m, i, elem, nid, match, groups, newSelector,\n\t\t\t\tnewContext = context && context.ownerDocument,\n\n\t\t\t\t// nodeType defaults to 9, since context defaults to document\n\t\t\t\tnodeType = context ? context.nodeType : 9;\n\n\t\t\tresults = results || [];\n\n\t\t\t// Return early from calls with invalid selector or context\n\t\t\tif (typeof selector !== \"string\" || !selector ||\n\t\t\t\tnodeType !== 1 && nodeType !== 9 && nodeType !== 11) {\n\n\t\t\t\treturn results;\n\t\t\t}\n\n\t\t\t// Try to shortcut find operations (as opposed to filters) in HTML documents\n\t\t\tif (!seed) {\n\t\t\t\tsetDocument(context);\n\t\t\t\tcontext = context || document;\n\n\t\t\t\tif (documentIsHTML) {\n\n\t\t\t\t\t// If the selector is sufficiently simple, try using a \"get*By*\" DOM method\n\t\t\t\t\t// (excepting DocumentFragment context, where the methods don't exist)\n\t\t\t\t\tif (nodeType !== 11 && (match = rquickExpr.exec(selector))) {\n\n\t\t\t\t\t\t// ID selector\n\t\t\t\t\t\tif ((m = match[1])) {\n\n\t\t\t\t\t\t\t// Document context\n\t\t\t\t\t\t\tif (nodeType === 9) {\n\t\t\t\t\t\t\t\tif ((elem = context.getElementById(m))) {\n\n\t\t\t\t\t\t\t\t\t// Support: IE 9 only\n\t\t\t\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\t\t\t\tif (elem.id === m) {\n\t\t\t\t\t\t\t\t\t\tpush.call(results, elem);\n\t\t\t\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t// Element context\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t// Support: IE 9 only\n\t\t\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\t\t\tif (newContext && (elem = newContext.getElementById(m)) &&\n\t\t\t\t\t\t\t\t\tfind.contains(context, elem) &&\n\t\t\t\t\t\t\t\t\telem.id === m) {\n\n\t\t\t\t\t\t\t\t\tpush.call(results, elem);\n\t\t\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Type selector\n\t\t\t\t\t\t} else if (match[2]) {\n\t\t\t\t\t\t\tpush.apply(results, context.getElementsByTagName(selector));\n\t\t\t\t\t\t\treturn results;\n\n\t\t\t\t\t\t\t// Class selector\n\t\t\t\t\t\t} else if ((m = match[3]) && context.getElementsByClassName) {\n\t\t\t\t\t\t\tpush.apply(results, context.getElementsByClassName(m));\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Take advantage of querySelectorAll\n\t\t\t\t\tif (!nonnativeSelectorCache[selector + \" \"] &&\n\t\t\t\t\t\t(!rbuggyQSA || !rbuggyQSA.test(selector))) {\n\n\t\t\t\t\t\tnewSelector = selector;\n\t\t\t\t\t\tnewContext = context;\n\n\t\t\t\t\t\t// qSA considers elements outside a scoping root when evaluating child or\n\t\t\t\t\t\t// descendant combinators, which is not what we want.\n\t\t\t\t\t\t// In such cases, we work around the behavior by prefixing every selector in the\n\t\t\t\t\t\t// list with an ID selector referencing the scope context.\n\t\t\t\t\t\t// The technique has to be used as well when a leading combinator is used\n\t\t\t\t\t\t// as such selectors are not recognized by querySelectorAll.\n\t\t\t\t\t\t// Thanks to Andrew Dupont for this technique.\n\t\t\t\t\t\tif (nodeType === 1 &&\n\t\t\t\t\t\t\t(rdescend.test(selector) || rleadingCombinator.test(selector))) {\n\n\t\t\t\t\t\t\t// Expand context for sibling selectors\n\t\t\t\t\t\t\tnewContext = rsibling.test(selector) && testContext(context.parentNode) ||\n\t\t\t\t\t\t\t\tcontext;\n\n\t\t\t\t\t\t\t// We can use :scope instead of the ID hack if the browser\n\t\t\t\t\t\t\t// supports it & if we're not changing the context.\n\t\t\t\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when\n\t\t\t\t\t\t\t// strict-comparing two documents; shallow comparisons work.\n\t\t\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\t\t\tif (newContext != context || !support.scope) {\n\n\t\t\t\t\t\t\t\t// Capture the context ID, setting it first if necessary\n\t\t\t\t\t\t\t\tif ((nid = context.getAttribute(\"id\"))) {\n\t\t\t\t\t\t\t\t\tnid = jQuery.escapeSelector(nid);\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tcontext.setAttribute(\"id\", (nid = expando));\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Prefix every selector in the list\n\t\t\t\t\t\t\tgroups = tokenize(selector);\n\t\t\t\t\t\t\ti = groups.length;\n\t\t\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\t\t\tgroups[i] = (nid ? \"#\" + nid : \":scope\") + \" \" +\n\t\t\t\t\t\t\t\t\ttoSelector(groups[i]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tnewSelector = groups.join(\",\");\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tpush.apply(results,\n\t\t\t\t\t\t\t\tnewContext.querySelectorAll(newSelector)\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t} catch (qsaError) {\n\t\t\t\t\t\t\tnonnativeSelectorCache(selector, true);\n\t\t\t\t\t\t} finally {\n\t\t\t\t\t\t\tif (nid === expando) {\n\t\t\t\t\t\t\t\tcontext.removeAttribute(\"id\");\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// All others\n\t\t\treturn select(selector.replace(rtrimCSS, \"$1\"), context, results, seed);\n\t\t}\n\n\t\t/**\n\t\t * Create key-value caches of limited size\n\t\t * @returns {function(string, object)} Returns the Object data after storing it on itself with\n\t\t *\tproperty name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)\n\t\t *\tdeleting the oldest entry\n\t\t */\n\t\tfunction createCache() {\n\t\t\tvar keys = [];\n\n\t\t\tfunction cache(key, value) {\n\n\t\t\t\t// Use (key + \" \") to avoid collision with native prototype properties\n\t\t\t\t// (see https://github.com/jquery/sizzle/issues/157)\n\t\t\t\tif (keys.push(key + \" \") > Expr.cacheLength) {\n\n\t\t\t\t\t// Only keep the most recent entries\n\t\t\t\t\tdelete cache[keys.shift()];\n\t\t\t\t}\n\t\t\t\treturn (cache[key + \" \"] = value);\n\t\t\t}\n\t\t\treturn cache;\n\t\t}\n\n\t\t/**\n\t\t * Mark a function for special use by jQuery selector module\n\t\t * @param {Function} fn The function to mark\n\t\t */\n\t\tfunction markFunction(fn) {\n\t\t\tfn[expando] = true;\n\t\t\treturn fn;\n\t\t}\n\n\t\t/**\n\t\t * Support testing using an element\n\t\t * @param {Function} fn Passed the created element and returns a boolean result\n\t\t */\n\t\tfunction assert(fn) {\n\t\t\tvar el = document.createElement(\"fieldset\");\n\n\t\t\ttry {\n\t\t\t\treturn !!fn(el);\n\t\t\t} catch (e) {\n\t\t\t\treturn false;\n\t\t\t} finally {\n\n\t\t\t\t// Remove from its parent by default\n\t\t\t\tif (el.parentNode) {\n\t\t\t\t\tel.parentNode.removeChild(el);\n\t\t\t\t}\n\n\t\t\t\t// release memory in IE\n\t\t\t\tel = null;\n\t\t\t}\n\t\t}\n\n\t\t/**\n\t\t * Returns a function to use in pseudos for input types\n\t\t * @param {String} type\n\t\t */\n\t\tfunction createInputPseudo(type) {\n\t\t\treturn function (elem) {\n\t\t\t\treturn nodeName(elem, \"input\") && elem.type === type;\n\t\t\t};\n\t\t}\n\n\t\t/**\n\t\t * Returns a function to use in pseudos for buttons\n\t\t * @param {String} type\n\t\t */\n\t\tfunction createButtonPseudo(type) {\n\t\t\treturn function (elem) {\n\t\t\t\treturn (nodeName(elem, \"input\") || nodeName(elem, \"button\")) &&\n\t\t\t\t\telem.type === type;\n\t\t\t};\n\t\t}\n\n\t\t/**\n\t\t * Returns a function to use in pseudos for :enabled/:disabled\n\t\t * @param {Boolean} disabled true for :disabled; false for :enabled\n\t\t */\n\t\tfunction createDisabledPseudo(disabled) {\n\n\t\t\t// Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable\n\t\t\treturn function (elem) {\n\n\t\t\t\t// Only certain elements can match :enabled or :disabled\n\t\t\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled\n\t\t\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled\n\t\t\t\tif (\"form\" in elem) {\n\n\t\t\t\t\t// Check for inherited disabledness on relevant non-disabled elements:\n\t\t\t\t\t// * listed form-associated elements in a disabled fieldset\n\t\t\t\t\t//   https://html.spec.whatwg.org/multipage/forms.html#category-listed\n\t\t\t\t\t//   https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled\n\t\t\t\t\t// * option elements in a disabled optgroup\n\t\t\t\t\t//   https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled\n\t\t\t\t\t// All such elements have a \"form\" property.\n\t\t\t\t\tif (elem.parentNode && elem.disabled === false) {\n\n\t\t\t\t\t\t// Option elements defer to a parent optgroup if present\n\t\t\t\t\t\tif (\"label\" in elem) {\n\t\t\t\t\t\t\tif (\"label\" in elem.parentNode) {\n\t\t\t\t\t\t\t\treturn elem.parentNode.disabled === disabled;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\treturn elem.disabled === disabled;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Support: IE 6 - 11+\n\t\t\t\t\t\t// Use the isDisabled shortcut property to check for disabled fieldset ancestors\n\t\t\t\t\t\treturn elem.isDisabled === disabled ||\n\n\t\t\t\t\t\t\t// Where there is no isDisabled, check manually\n\t\t\t\t\t\t\telem.isDisabled !== !disabled &&\n\t\t\t\t\t\t\tinDisabledFieldset(elem) === disabled;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn elem.disabled === disabled;\n\n\t\t\t\t\t// Try to winnow out elements that can't be disabled before trusting the disabled property.\n\t\t\t\t\t// Some victims get caught in our net (label, legend, menu, track), but it shouldn't\n\t\t\t\t\t// even exist on them, let alone have a boolean value.\n\t\t\t\t} else if (\"label\" in elem) {\n\t\t\t\t\treturn elem.disabled === disabled;\n\t\t\t\t}\n\n\t\t\t\t// Remaining elements are neither :enabled nor :disabled\n\t\t\t\treturn false;\n\t\t\t};\n\t\t}\n\n\t\t/**\n\t\t * Returns a function to use in pseudos for positionals\n\t\t * @param {Function} fn\n\t\t */\n\t\tfunction createPositionalPseudo(fn) {\n\t\t\treturn markFunction(function (argument) {\n\t\t\t\targument = +argument;\n\t\t\t\treturn markFunction(function (seed, matches) {\n\t\t\t\t\tvar j,\n\t\t\t\t\t\tmatchIndexes = fn([], seed.length, argument),\n\t\t\t\t\t\ti = matchIndexes.length;\n\n\t\t\t\t\t// Match elements found at the specified indexes\n\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\tif (seed[(j = matchIndexes[i])]) {\n\t\t\t\t\t\t\tseed[j] = !(matches[j] = seed[j]);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\n\t\t/**\n\t\t * Checks a node for validity as a jQuery selector context\n\t\t * @param {Element|Object=} context\n\t\t * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value\n\t\t */\n\t\tfunction testContext(context) {\n\t\t\treturn context && typeof context.getElementsByTagName !== \"undefined\" && context;\n\t\t}\n\n\t\t/**\n\t\t * Sets document-related variables once based on the current document\n\t\t * @param {Element|Object} [node] An element or document object to use to set the document\n\t\t * @returns {Object} Returns the current document\n\t\t */\n\t\tfunction setDocument(node) {\n\t\t\tvar subWindow,\n\t\t\t\tdoc = node ? node.ownerDocument || node : preferredDoc;\n\n\t\t\t// Return early if doc is invalid or already selected\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tif (doc == document || doc.nodeType !== 9 || !doc.documentElement) {\n\t\t\t\treturn document;\n\t\t\t}\n\n\t\t\t// Update global variables\n\t\t\tdocument = doc;\n\t\t\tdocumentElement = document.documentElement;\n\t\t\tdocumentIsHTML = !jQuery.isXMLDoc(document);\n\n\t\t\t// Support: iOS 7 only, IE 9 - 11+\n\t\t\t// Older browsers didn't support unprefixed `matches`.\n\t\t\tmatches = documentElement.matches ||\n\t\t\t\tdocumentElement.webkitMatchesSelector ||\n\t\t\t\tdocumentElement.msMatchesSelector;\n\n\t\t\t// Support: IE 9 - 11+, Edge 12 - 18+\n\t\t\t// Accessing iframe documents after unload throws \"permission denied\" errors (see trac-13936)\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tif (preferredDoc != document &&\n\t\t\t\t(subWindow = document.defaultView) && subWindow.top !== subWindow) {\n\n\t\t\t\t// Support: IE 9 - 11+, Edge 12 - 18+\n\t\t\t\tsubWindow.addEventListener(\"unload\", unloadHandler);\n\t\t\t}\n\n\t\t\t// Support: IE <10\n\t\t\t// Check if getElementById returns elements by name\n\t\t\t// The broken getElementById methods don't pick up programmatically-set names,\n\t\t\t// so use a roundabout getElementsByName test\n\t\t\tsupport.getById = assert(function (el) {\n\t\t\t\tdocumentElement.appendChild(el).id = jQuery.expando;\n\t\t\t\treturn !document.getElementsByName ||\n\t\t\t\t\t!document.getElementsByName(jQuery.expando).length;\n\t\t\t});\n\n\t\t\t// Support: IE 9 only\n\t\t\t// Check to see if it's possible to do matchesSelector\n\t\t\t// on a disconnected node.\n\t\t\tsupport.disconnectedMatch = assert(function (el) {\n\t\t\t\treturn matches.call(el, \"*\");\n\t\t\t});\n\n\t\t\t// Support: IE 9 - 11+, Edge 12 - 18+\n\t\t\t// IE/Edge don't support the :scope pseudo-class.\n\t\t\tsupport.scope = assert(function () {\n\t\t\t\treturn document.querySelectorAll(\":scope\");\n\t\t\t});\n\n\t\t\t// Support: Chrome 105 - 111 only, Safari 15.4 - 16.3 only\n\t\t\t// Make sure the `:has()` argument is parsed unforgivingly.\n\t\t\t// We include `*` in the test to detect buggy implementations that are\n\t\t\t// _selectively_ forgiving (specifically when the list includes at least\n\t\t\t// one valid selector).\n\t\t\t// Note that we treat complete lack of support for `:has()` as if it were\n\t\t\t// spec-compliant support, which is fine because use of `:has()` in such\n\t\t\t// environments will fail in the qSA path and fall back to jQuery traversal\n\t\t\t// anyway.\n\t\t\tsupport.cssHas = assert(function () {\n\t\t\t\ttry {\n\t\t\t\t\tdocument.querySelector(\":has(*,:jqfake)\");\n\t\t\t\t\treturn false;\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t// ID filter and find\n\t\t\tif (support.getById) {\n\t\t\t\tExpr.filter.ID = function (id) {\n\t\t\t\t\tvar attrId = id.replace(runescape, funescape);\n\t\t\t\t\treturn function (elem) {\n\t\t\t\t\t\treturn elem.getAttribute(\"id\") === attrId;\n\t\t\t\t\t};\n\t\t\t\t};\n\t\t\t\tExpr.find.ID = function (id, context) {\n\t\t\t\t\tif (typeof context.getElementById !== \"undefined\" && documentIsHTML) {\n\t\t\t\t\t\tvar elem = context.getElementById(id);\n\t\t\t\t\t\treturn elem ? [elem] : [];\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t} else {\n\t\t\t\tExpr.filter.ID = function (id) {\n\t\t\t\t\tvar attrId = id.replace(runescape, funescape);\n\t\t\t\t\treturn function (elem) {\n\t\t\t\t\t\tvar node = typeof elem.getAttributeNode !== \"undefined\" &&\n\t\t\t\t\t\t\telem.getAttributeNode(\"id\");\n\t\t\t\t\t\treturn node && node.value === attrId;\n\t\t\t\t\t};\n\t\t\t\t};\n\n\t\t\t\t// Support: IE 6 - 7 only\n\t\t\t\t// getElementById is not reliable as a find shortcut\n\t\t\t\tExpr.find.ID = function (id, context) {\n\t\t\t\t\tif (typeof context.getElementById !== \"undefined\" && documentIsHTML) {\n\t\t\t\t\t\tvar node, i, elems,\n\t\t\t\t\t\t\telem = context.getElementById(id);\n\n\t\t\t\t\t\tif (elem) {\n\n\t\t\t\t\t\t\t// Verify the id attribute\n\t\t\t\t\t\t\tnode = elem.getAttributeNode(\"id\");\n\t\t\t\t\t\t\tif (node && node.value === id) {\n\t\t\t\t\t\t\t\treturn [elem];\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Fall back on getElementsByName\n\t\t\t\t\t\t\telems = context.getElementsByName(id);\n\t\t\t\t\t\t\ti = 0;\n\t\t\t\t\t\t\twhile ((elem = elems[i++])) {\n\t\t\t\t\t\t\t\tnode = elem.getAttributeNode(\"id\");\n\t\t\t\t\t\t\t\tif (node && node.value === id) {\n\t\t\t\t\t\t\t\t\treturn [elem];\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn [];\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\n\t\t\t// Tag\n\t\t\tExpr.find.TAG = function (tag, context) {\n\t\t\t\tif (typeof context.getElementsByTagName !== \"undefined\") {\n\t\t\t\t\treturn context.getElementsByTagName(tag);\n\n\t\t\t\t\t// DocumentFragment nodes don't have gEBTN\n\t\t\t\t} else {\n\t\t\t\t\treturn context.querySelectorAll(tag);\n\t\t\t\t}\n\t\t\t};\n\n\t\t\t// Class\n\t\t\tExpr.find.CLASS = function (className, context) {\n\t\t\t\tif (typeof context.getElementsByClassName !== \"undefined\" && documentIsHTML) {\n\t\t\t\t\treturn context.getElementsByClassName(className);\n\t\t\t\t}\n\t\t\t};\n\n\t\t\t/* QSA/matchesSelector\n\t\t\t---------------------------------------------------------------------- */\n\n\t\t\t// QSA and matchesSelector support\n\n\t\t\trbuggyQSA = [];\n\n\t\t\t// Build QSA regex\n\t\t\t// Regex strategy adopted from Diego Perini\n\t\t\tassert(function (el) {\n\n\t\t\t\tvar input;\n\n\t\t\t\tdocumentElement.appendChild(el).innerHTML =\n\t\t\t\t\t\"<a id='\" + expando + \"' href='' disabled='disabled'></a>\" +\n\t\t\t\t\t\"<select id='\" + expando + \"-\\r\\\\' disabled='disabled'>\" +\n\t\t\t\t\t\"<option selected=''></option></select>\";\n\n\t\t\t\t// Support: iOS <=7 - 8 only\n\t\t\t\t// Boolean attributes and \"value\" are not treated correctly in some XML documents\n\t\t\t\tif (!el.querySelectorAll(\"[selected]\").length) {\n\t\t\t\t\trbuggyQSA.push(\"\\\\[\" + whitespace + \"*(?:value|\" + booleans + \")\");\n\t\t\t\t}\n\n\t\t\t\t// Support: iOS <=7 - 8 only\n\t\t\t\tif (!el.querySelectorAll(\"[id~=\" + expando + \"-]\").length) {\n\t\t\t\t\trbuggyQSA.push(\"~=\");\n\t\t\t\t}\n\n\t\t\t\t// Support: iOS 8 only\n\t\t\t\t// https://bugs.webkit.org/show_bug.cgi?id=136851\n\t\t\t\t// In-page `selector#id sibling-combinator selector` fails\n\t\t\t\tif (!el.querySelectorAll(\"a#\" + expando + \"+*\").length) {\n\t\t\t\t\trbuggyQSA.push(\".#.+[+~]\");\n\t\t\t\t}\n\n\t\t\t\t// Support: Chrome <=105+, Firefox <=104+, Safari <=15.4+\n\t\t\t\t// In some of the document kinds, these selectors wouldn't work natively.\n\t\t\t\t// This is probably OK but for backwards compatibility we want to maintain\n\t\t\t\t// handling them through jQuery traversal in jQuery 3.x.\n\t\t\t\tif (!el.querySelectorAll(\":checked\").length) {\n\t\t\t\t\trbuggyQSA.push(\":checked\");\n\t\t\t\t}\n\n\t\t\t\t// Support: Windows 8 Native Apps\n\t\t\t\t// The type and name attributes are restricted during .innerHTML assignment\n\t\t\t\tinput = document.createElement(\"input\");\n\t\t\t\tinput.setAttribute(\"type\", \"hidden\");\n\t\t\t\tel.appendChild(input).setAttribute(\"name\", \"D\");\n\n\t\t\t\t// Support: IE 9 - 11+\n\t\t\t\t// IE's :disabled selector does not pick up the children of disabled fieldsets\n\t\t\t\t// Support: Chrome <=105+, Firefox <=104+, Safari <=15.4+\n\t\t\t\t// In some of the document kinds, these selectors wouldn't work natively.\n\t\t\t\t// This is probably OK but for backwards compatibility we want to maintain\n\t\t\t\t// handling them through jQuery traversal in jQuery 3.x.\n\t\t\t\tdocumentElement.appendChild(el).disabled = true;\n\t\t\t\tif (el.querySelectorAll(\":disabled\").length !== 2) {\n\t\t\t\t\trbuggyQSA.push(\":enabled\", \":disabled\");\n\t\t\t\t}\n\n\t\t\t\t// Support: IE 11+, Edge 15 - 18+\n\t\t\t\t// IE 11/Edge don't find elements on a `[name='']` query in some cases.\n\t\t\t\t// Adding a temporary attribute to the document before the selection works\n\t\t\t\t// around the issue.\n\t\t\t\t// Interestingly, IE 10 & older don't seem to have the issue.\n\t\t\t\tinput = document.createElement(\"input\");\n\t\t\t\tinput.setAttribute(\"name\", \"\");\n\t\t\t\tel.appendChild(input);\n\t\t\t\tif (!el.querySelectorAll(\"[name='']\").length) {\n\t\t\t\t\trbuggyQSA.push(\"\\\\[\" + whitespace + \"*name\" + whitespace + \"*=\" +\n\t\t\t\t\t\twhitespace + \"*(?:''|\\\"\\\")\");\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tif (!support.cssHas) {\n\n\t\t\t\t// Support: Chrome 105 - 110+, Safari 15.4 - 16.3+\n\t\t\t\t// Our regular `try-catch` mechanism fails to detect natively-unsupported\n\t\t\t\t// pseudo-classes inside `:has()` (such as `:has(:contains(\"Foo\"))`)\n\t\t\t\t// in browsers that parse the `:has()` argument as a forgiving selector list.\n\t\t\t\t// https://drafts.csswg.org/selectors/#relational now requires the argument\n\t\t\t\t// to be parsed unforgivingly, but browsers have not yet fully adjusted.\n\t\t\t\trbuggyQSA.push(\":has\");\n\t\t\t}\n\n\t\t\trbuggyQSA = rbuggyQSA.length && new RegExp(rbuggyQSA.join(\"|\"));\n\n\t\t\t/* Sorting\n\t\t\t---------------------------------------------------------------------- */\n\n\t\t\t// Document order sorting\n\t\t\tsortOrder = function (a, b) {\n\n\t\t\t\t// Flag for duplicate removal\n\t\t\t\tif (a === b) {\n\t\t\t\t\thasDuplicate = true;\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\n\t\t\t\t// Sort on method existence if only one input has compareDocumentPosition\n\t\t\t\tvar compare = !a.compareDocumentPosition - !b.compareDocumentPosition;\n\t\t\t\tif (compare) {\n\t\t\t\t\treturn compare;\n\t\t\t\t}\n\n\t\t\t\t// Calculate position if both inputs belong to the same document\n\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\tcompare = (a.ownerDocument || a) == (b.ownerDocument || b) ?\n\t\t\t\t\ta.compareDocumentPosition(b) :\n\n\t\t\t\t\t// Otherwise we know they are disconnected\n\t\t\t\t\t1;\n\n\t\t\t\t// Disconnected nodes\n\t\t\t\tif (compare & 1 ||\n\t\t\t\t\t(!support.sortDetached && b.compareDocumentPosition(a) === compare)) {\n\n\t\t\t\t\t// Choose the first element that is related to our preferred document\n\t\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\tif (a === document || a.ownerDocument == preferredDoc &&\n\t\t\t\t\t\tfind.contains(preferredDoc, a)) {\n\t\t\t\t\t\treturn -1;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\tif (b === document || b.ownerDocument == preferredDoc &&\n\t\t\t\t\t\tfind.contains(preferredDoc, b)) {\n\t\t\t\t\t\treturn 1;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Maintain original order\n\t\t\t\t\treturn sortInput ?\n\t\t\t\t\t\t(indexOf.call(sortInput, a) - indexOf.call(sortInput, b)) :\n\t\t\t\t\t\t0;\n\t\t\t\t}\n\n\t\t\t\treturn compare & 4 ? -1 : 1;\n\t\t\t};\n\n\t\t\treturn document;\n\t\t}\n\n\t\tfind.matches = function (expr, elements) {\n\t\t\treturn find(expr, null, null, elements);\n\t\t};\n\n\t\tfind.matchesSelector = function (elem, expr) {\n\t\t\tsetDocument(elem);\n\n\t\t\tif (documentIsHTML &&\n\t\t\t\t!nonnativeSelectorCache[expr + \" \"] &&\n\t\t\t\t(!rbuggyQSA || !rbuggyQSA.test(expr))) {\n\n\t\t\t\ttry {\n\t\t\t\t\tvar ret = matches.call(elem, expr);\n\n\t\t\t\t\t// IE 9's matchesSelector returns false on disconnected nodes\n\t\t\t\t\tif (ret || support.disconnectedMatch ||\n\n\t\t\t\t\t\t// As well, disconnected nodes are said to be in a document\n\t\t\t\t\t\t// fragment in IE 9\n\t\t\t\t\t\telem.document && elem.document.nodeType !== 11) {\n\t\t\t\t\t\treturn ret;\n\t\t\t\t\t}\n\t\t\t\t} catch (e) {\n\t\t\t\t\tnonnativeSelectorCache(expr, true);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn find(expr, document, null, [elem]).length > 0;\n\t\t};\n\n\t\tfind.contains = function (context, elem) {\n\n\t\t\t// Set document vars if needed\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tif ((context.ownerDocument || context) != document) {\n\t\t\t\tsetDocument(context);\n\t\t\t}\n\t\t\treturn jQuery.contains(context, elem);\n\t\t};\n\n\n\t\tfind.attr = function (elem, name) {\n\n\t\t\t// Set document vars if needed\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tif ((elem.ownerDocument || elem) != document) {\n\t\t\t\tsetDocument(elem);\n\t\t\t}\n\n\t\t\tvar fn = Expr.attrHandle[name.toLowerCase()],\n\n\t\t\t\t// Don't get fooled by Object.prototype properties (see trac-13807)\n\t\t\t\tval = fn && hasOwn.call(Expr.attrHandle, name.toLowerCase()) ?\n\t\t\t\t\tfn(elem, name, !documentIsHTML) :\n\t\t\t\t\tundefined;\n\n\t\t\tif (val !== undefined) {\n\t\t\t\treturn val;\n\t\t\t}\n\n\t\t\treturn elem.getAttribute(name);\n\t\t};\n\n\t\tfind.error = function (msg) {\n\t\t\tthrow new Error(\"Syntax error, unrecognized expression: \" + msg);\n\t\t};\n\n\t\t/**\n\t\t * Document sorting and removing duplicates\n\t\t * @param {ArrayLike} results\n\t\t */\n\t\tjQuery.uniqueSort = function (results) {\n\t\t\tvar elem,\n\t\t\t\tduplicates = [],\n\t\t\t\tj = 0,\n\t\t\t\ti = 0;\n\n\t\t\t// Unless we *know* we can detect duplicates, assume their presence\n\t\t\t//\n\t\t\t// Support: Android <=4.0+\n\t\t\t// Testing for detecting duplicates is unpredictable so instead assume we can't\n\t\t\t// depend on duplicate detection in all browsers without a stable sort.\n\t\t\thasDuplicate = !support.sortStable;\n\t\t\tsortInput = !support.sortStable && slice.call(results, 0);\n\t\t\tsort.call(results, sortOrder);\n\n\t\t\tif (hasDuplicate) {\n\t\t\t\twhile ((elem = results[i++])) {\n\t\t\t\t\tif (elem === results[i]) {\n\t\t\t\t\t\tj = duplicates.push(i);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\twhile (j--) {\n\t\t\t\t\tsplice.call(results, duplicates[j], 1);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Clear input after sorting to release objects\n\t\t\t// See https://github.com/jquery/sizzle/pull/225\n\t\t\tsortInput = null;\n\n\t\t\treturn results;\n\t\t};\n\n\t\tjQuery.fn.uniqueSort = function () {\n\t\t\treturn this.pushStack(jQuery.uniqueSort(slice.apply(this)));\n\t\t};\n\n\t\tExpr = jQuery.expr = {\n\n\t\t\t// Can be adjusted by the user\n\t\t\tcacheLength: 50,\n\n\t\t\tcreatePseudo: markFunction,\n\n\t\t\tmatch: matchExpr,\n\n\t\t\tattrHandle: {},\n\n\t\t\tfind: {},\n\n\t\t\trelative: {\n\t\t\t\t\">\": { dir: \"parentNode\", first: true },\n\t\t\t\t\" \": { dir: \"parentNode\" },\n\t\t\t\t\"+\": { dir: \"previousSibling\", first: true },\n\t\t\t\t\"~\": { dir: \"previousSibling\" }\n\t\t\t},\n\n\t\t\tpreFilter: {\n\t\t\t\tATTR: function (match) {\n\t\t\t\t\tmatch[1] = match[1].replace(runescape, funescape);\n\n\t\t\t\t\t// Move the given value to match[3] whether quoted or unquoted\n\t\t\t\t\tmatch[3] = (match[3] || match[4] || match[5] || \"\")\n\t\t\t\t\t\t.replace(runescape, funescape);\n\n\t\t\t\t\tif (match[2] === \"~=\") {\n\t\t\t\t\t\tmatch[3] = \" \" + match[3] + \" \";\n\t\t\t\t\t}\n\n\t\t\t\t\treturn match.slice(0, 4);\n\t\t\t\t},\n\n\t\t\t\tCHILD: function (match) {\n\n\t\t\t\t\t/* matches from matchExpr[\"CHILD\"]\n\t\t\t\t\t\t1 type (only|nth|...)\n\t\t\t\t\t\t2 what (child|of-type)\n\t\t\t\t\t\t3 argument (even|odd|\\d*|\\d*n([+-]\\d+)?|...)\n\t\t\t\t\t\t4 xn-component of xn+y argument ([+-]?\\d*n|)\n\t\t\t\t\t\t5 sign of xn-component\n\t\t\t\t\t\t6 x of xn-component\n\t\t\t\t\t\t7 sign of y-component\n\t\t\t\t\t\t8 y of y-component\n\t\t\t\t\t*/\n\t\t\t\t\tmatch[1] = match[1].toLowerCase();\n\n\t\t\t\t\tif (match[1].slice(0, 3) === \"nth\") {\n\n\t\t\t\t\t\t// nth-* requires argument\n\t\t\t\t\t\tif (!match[3]) {\n\t\t\t\t\t\t\tfind.error(match[0]);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// numeric x and y parameters for Expr.filter.CHILD\n\t\t\t\t\t\t// remember that false/true cast respectively to 0/1\n\t\t\t\t\t\tmatch[4] = +(match[4] ?\n\t\t\t\t\t\t\tmatch[5] + (match[6] || 1) :\n\t\t\t\t\t\t\t2 * (match[3] === \"even\" || match[3] === \"odd\")\n\t\t\t\t\t\t);\n\t\t\t\t\t\tmatch[5] = +((match[7] + match[8]) || match[3] === \"odd\");\n\n\t\t\t\t\t\t// other types prohibit arguments\n\t\t\t\t\t} else if (match[3]) {\n\t\t\t\t\t\tfind.error(match[0]);\n\t\t\t\t\t}\n\n\t\t\t\t\treturn match;\n\t\t\t\t},\n\n\t\t\t\tPSEUDO: function (match) {\n\t\t\t\t\tvar excess,\n\t\t\t\t\t\tunquoted = !match[6] && match[2];\n\n\t\t\t\t\tif (matchExpr.CHILD.test(match[0])) {\n\t\t\t\t\t\treturn null;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Accept quoted arguments as-is\n\t\t\t\t\tif (match[3]) {\n\t\t\t\t\t\tmatch[2] = match[4] || match[5] || \"\";\n\n\t\t\t\t\t\t// Strip excess characters from unquoted arguments\n\t\t\t\t\t} else if (unquoted && rpseudo.test(unquoted) &&\n\n\t\t\t\t\t\t// Get excess from tokenize (recursively)\n\t\t\t\t\t\t(excess = tokenize(unquoted, true)) &&\n\n\t\t\t\t\t\t// advance to the next closing parenthesis\n\t\t\t\t\t\t(excess = unquoted.indexOf(\")\", unquoted.length - excess) - unquoted.length)) {\n\n\t\t\t\t\t\t// excess is a negative index\n\t\t\t\t\t\tmatch[0] = match[0].slice(0, excess);\n\t\t\t\t\t\tmatch[2] = unquoted.slice(0, excess);\n\t\t\t\t\t}\n\n\t\t\t\t\t// Return only captures needed by the pseudo filter method (type and argument)\n\t\t\t\t\treturn match.slice(0, 3);\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tfilter: {\n\n\t\t\t\tTAG: function (nodeNameSelector) {\n\t\t\t\t\tvar expectedNodeName = nodeNameSelector.replace(runescape, funescape).toLowerCase();\n\t\t\t\t\treturn nodeNameSelector === \"*\" ?\n\t\t\t\t\t\tfunction () {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t} :\n\t\t\t\t\t\tfunction (elem) {\n\t\t\t\t\t\t\treturn nodeName(elem, expectedNodeName);\n\t\t\t\t\t\t};\n\t\t\t\t},\n\n\t\t\t\tCLASS: function (className) {\n\t\t\t\t\tvar pattern = classCache[className + \" \"];\n\n\t\t\t\t\treturn pattern ||\n\t\t\t\t\t\t(pattern = new RegExp(\"(^|\" + whitespace + \")\" + className +\n\t\t\t\t\t\t\t\"(\" + whitespace + \"|$)\")) &&\n\t\t\t\t\t\tclassCache(className, function (elem) {\n\t\t\t\t\t\t\treturn pattern.test(\n\t\t\t\t\t\t\t\ttypeof elem.className === \"string\" && elem.className ||\n\t\t\t\t\t\t\t\ttypeof elem.getAttribute !== \"undefined\" &&\n\t\t\t\t\t\t\t\telem.getAttribute(\"class\") ||\n\t\t\t\t\t\t\t\t\"\"\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t});\n\t\t\t\t},\n\n\t\t\t\tATTR: function (name, operator, check) {\n\t\t\t\t\treturn function (elem) {\n\t\t\t\t\t\tvar result = find.attr(elem, name);\n\n\t\t\t\t\t\tif (result == null) {\n\t\t\t\t\t\t\treturn operator === \"!=\";\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!operator) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tresult += \"\";\n\n\t\t\t\t\t\tif (operator === \"=\") {\n\t\t\t\t\t\t\treturn result === check;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (operator === \"!=\") {\n\t\t\t\t\t\t\treturn result !== check;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (operator === \"^=\") {\n\t\t\t\t\t\t\treturn check && result.indexOf(check) === 0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (operator === \"*=\") {\n\t\t\t\t\t\t\treturn check && result.indexOf(check) > -1;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (operator === \"$=\") {\n\t\t\t\t\t\t\treturn check && result.slice(-check.length) === check;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (operator === \"~=\") {\n\t\t\t\t\t\t\treturn (\" \" + result.replace(rwhitespace, \" \") + \" \")\n\t\t\t\t\t\t\t\t.indexOf(check) > -1;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (operator === \"|=\") {\n\t\t\t\t\t\t\treturn result === check || result.slice(0, check.length + 1) === check + \"-\";\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t};\n\t\t\t\t},\n\n\t\t\t\tCHILD: function (type, what, _argument, first, last) {\n\t\t\t\t\tvar simple = type.slice(0, 3) !== \"nth\",\n\t\t\t\t\t\tforward = type.slice(-4) !== \"last\",\n\t\t\t\t\t\tofType = what === \"of-type\";\n\n\t\t\t\t\treturn first === 1 && last === 0 ?\n\n\t\t\t\t\t\t// Shortcut for :nth-*(n)\n\t\t\t\t\t\tfunction (elem) {\n\t\t\t\t\t\t\treturn !!elem.parentNode;\n\t\t\t\t\t\t} :\n\n\t\t\t\t\t\tfunction (elem, _context, xml) {\n\t\t\t\t\t\t\tvar cache, outerCache, node, nodeIndex, start,\n\t\t\t\t\t\t\t\tdir = simple !== forward ? \"nextSibling\" : \"previousSibling\",\n\t\t\t\t\t\t\t\tparent = elem.parentNode,\n\t\t\t\t\t\t\t\tname = ofType && elem.nodeName.toLowerCase(),\n\t\t\t\t\t\t\t\tuseCache = !xml && !ofType,\n\t\t\t\t\t\t\t\tdiff = false;\n\n\t\t\t\t\t\t\tif (parent) {\n\n\t\t\t\t\t\t\t\t// :(first|last|only)-(child|of-type)\n\t\t\t\t\t\t\t\tif (simple) {\n\t\t\t\t\t\t\t\t\twhile (dir) {\n\t\t\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\t\t\twhile ((node = node[dir])) {\n\t\t\t\t\t\t\t\t\t\t\tif (ofType ?\n\t\t\t\t\t\t\t\t\t\t\t\tnodeName(node, name) :\n\t\t\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1) {\n\n\t\t\t\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t// Reverse direction for :only-* (if we haven't yet done so)\n\t\t\t\t\t\t\t\t\t\tstart = dir = type === \"only\" && !start && \"nextSibling\";\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tstart = [forward ? parent.firstChild : parent.lastChild];\n\n\t\t\t\t\t\t\t\t// non-xml :nth-child(...) stores cache data on `parent`\n\t\t\t\t\t\t\t\tif (forward && useCache) {\n\n\t\t\t\t\t\t\t\t\t// Seek `elem` from a previously-cached index\n\t\t\t\t\t\t\t\t\touterCache = parent[expando] || (parent[expando] = {});\n\t\t\t\t\t\t\t\t\tcache = outerCache[type] || [];\n\t\t\t\t\t\t\t\t\tnodeIndex = cache[0] === dirruns && cache[1];\n\t\t\t\t\t\t\t\t\tdiff = nodeIndex && cache[2];\n\t\t\t\t\t\t\t\t\tnode = nodeIndex && parent.childNodes[nodeIndex];\n\n\t\t\t\t\t\t\t\t\twhile ((node = ++nodeIndex && node && node[dir] ||\n\n\t\t\t\t\t\t\t\t\t\t// Fallback to seeking `elem` from the start\n\t\t\t\t\t\t\t\t\t\t(diff = nodeIndex = 0) || start.pop())) {\n\n\t\t\t\t\t\t\t\t\t\t// When found, cache indexes on `parent` and break\n\t\t\t\t\t\t\t\t\t\tif (node.nodeType === 1 && ++diff && node === elem) {\n\t\t\t\t\t\t\t\t\t\t\touterCache[type] = [dirruns, nodeIndex, diff];\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t// Use previously-cached element index if available\n\t\t\t\t\t\t\t\t\tif (useCache) {\n\t\t\t\t\t\t\t\t\t\touterCache = elem[expando] || (elem[expando] = {});\n\t\t\t\t\t\t\t\t\t\tcache = outerCache[type] || [];\n\t\t\t\t\t\t\t\t\t\tnodeIndex = cache[0] === dirruns && cache[1];\n\t\t\t\t\t\t\t\t\t\tdiff = nodeIndex;\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// xml :nth-child(...)\n\t\t\t\t\t\t\t\t\t// or :nth-last-child(...) or :nth(-last)?-of-type(...)\n\t\t\t\t\t\t\t\t\tif (diff === false) {\n\n\t\t\t\t\t\t\t\t\t\t// Use the same loop as above to seek `elem` from the start\n\t\t\t\t\t\t\t\t\t\twhile ((node = ++nodeIndex && node && node[dir] ||\n\t\t\t\t\t\t\t\t\t\t\t(diff = nodeIndex = 0) || start.pop())) {\n\n\t\t\t\t\t\t\t\t\t\t\tif ((ofType ?\n\t\t\t\t\t\t\t\t\t\t\t\tnodeName(node, name) :\n\t\t\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1) &&\n\t\t\t\t\t\t\t\t\t\t\t\t++diff) {\n\n\t\t\t\t\t\t\t\t\t\t\t\t// Cache the index of each encountered element\n\t\t\t\t\t\t\t\t\t\t\t\tif (useCache) {\n\t\t\t\t\t\t\t\t\t\t\t\t\touterCache = node[expando] ||\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t(node[expando] = {});\n\t\t\t\t\t\t\t\t\t\t\t\t\touterCache[type] = [dirruns, diff];\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\tif (node === elem) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t// Incorporate the offset, then check against cycle size\n\t\t\t\t\t\t\t\tdiff -= last;\n\t\t\t\t\t\t\t\treturn diff === first || (diff % first === 0 && diff / first >= 0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\t\t\t\t},\n\n\t\t\t\tPSEUDO: function (pseudo, argument) {\n\n\t\t\t\t\t// pseudo-class names are case-insensitive\n\t\t\t\t\t// https://www.w3.org/TR/selectors/#pseudo-classes\n\t\t\t\t\t// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters\n\t\t\t\t\t// Remember that setFilters inherits from pseudos\n\t\t\t\t\tvar args,\n\t\t\t\t\t\tfn = Expr.pseudos[pseudo] || Expr.setFilters[pseudo.toLowerCase()] ||\n\t\t\t\t\t\t\tfind.error(\"unsupported pseudo: \" + pseudo);\n\n\t\t\t\t\t// The user may use createPseudo to indicate that\n\t\t\t\t\t// arguments are needed to create the filter function\n\t\t\t\t\t// just as jQuery does\n\t\t\t\t\tif (fn[expando]) {\n\t\t\t\t\t\treturn fn(argument);\n\t\t\t\t\t}\n\n\t\t\t\t\t// But maintain support for old signatures\n\t\t\t\t\tif (fn.length > 1) {\n\t\t\t\t\t\targs = [pseudo, pseudo, \"\", argument];\n\t\t\t\t\t\treturn Expr.setFilters.hasOwnProperty(pseudo.toLowerCase()) ?\n\t\t\t\t\t\t\tmarkFunction(function (seed, matches) {\n\t\t\t\t\t\t\t\tvar idx,\n\t\t\t\t\t\t\t\t\tmatched = fn(seed, argument),\n\t\t\t\t\t\t\t\t\ti = matched.length;\n\t\t\t\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\t\t\t\tidx = indexOf.call(seed, matched[i]);\n\t\t\t\t\t\t\t\t\tseed[idx] = !(matches[idx] = matched[i]);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}) :\n\t\t\t\t\t\t\tfunction (elem) {\n\t\t\t\t\t\t\t\treturn fn(elem, 0, args);\n\t\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\treturn fn;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tpseudos: {\n\n\t\t\t\t// Potentially complex pseudos\n\t\t\t\tnot: markFunction(function (selector) {\n\n\t\t\t\t\t// Trim the selector passed to compile\n\t\t\t\t\t// to avoid treating leading and trailing\n\t\t\t\t\t// spaces as combinators\n\t\t\t\t\tvar input = [],\n\t\t\t\t\t\tresults = [],\n\t\t\t\t\t\tmatcher = compile(selector.replace(rtrimCSS, \"$1\"));\n\n\t\t\t\t\treturn matcher[expando] ?\n\t\t\t\t\t\tmarkFunction(function (seed, matches, _context, xml) {\n\t\t\t\t\t\t\tvar elem,\n\t\t\t\t\t\t\t\tunmatched = matcher(seed, null, xml, []),\n\t\t\t\t\t\t\t\ti = seed.length;\n\n\t\t\t\t\t\t\t// Match elements unmatched by `matcher`\n\t\t\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\t\t\tif ((elem = unmatched[i])) {\n\t\t\t\t\t\t\t\t\tseed[i] = !(matches[i] = elem);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}) :\n\t\t\t\t\t\tfunction (elem, _context, xml) {\n\t\t\t\t\t\t\tinput[0] = elem;\n\t\t\t\t\t\t\tmatcher(input, null, xml, results);\n\n\t\t\t\t\t\t\t// Don't keep the element\n\t\t\t\t\t\t\t// (see https://github.com/jquery/sizzle/issues/299)\n\t\t\t\t\t\t\tinput[0] = null;\n\t\t\t\t\t\t\treturn !results.pop();\n\t\t\t\t\t\t};\n\t\t\t\t}),\n\n\t\t\t\thas: markFunction(function (selector) {\n\t\t\t\t\treturn function (elem) {\n\t\t\t\t\t\treturn find(selector, elem).length > 0;\n\t\t\t\t\t};\n\t\t\t\t}),\n\n\t\t\t\tcontains: markFunction(function (text) {\n\t\t\t\t\ttext = text.replace(runescape, funescape);\n\t\t\t\t\treturn function (elem) {\n\t\t\t\t\t\treturn (elem.textContent || jQuery.text(elem)).indexOf(text) > -1;\n\t\t\t\t\t};\n\t\t\t\t}),\n\n\t\t\t\t// \"Whether an element is represented by a :lang() selector\n\t\t\t\t// is based solely on the element's language value\n\t\t\t\t// being equal to the identifier C,\n\t\t\t\t// or beginning with the identifier C immediately followed by \"-\".\n\t\t\t\t// The matching of C against the element's language value is performed case-insensitively.\n\t\t\t\t// The identifier C does not have to be a valid language name.\"\n\t\t\t\t// https://www.w3.org/TR/selectors/#lang-pseudo\n\t\t\t\tlang: markFunction(function (lang) {\n\n\t\t\t\t\t// lang value must be a valid identifier\n\t\t\t\t\tif (!ridentifier.test(lang || \"\")) {\n\t\t\t\t\t\tfind.error(\"unsupported lang: \" + lang);\n\t\t\t\t\t}\n\t\t\t\t\tlang = lang.replace(runescape, funescape).toLowerCase();\n\t\t\t\t\treturn function (elem) {\n\t\t\t\t\t\tvar elemLang;\n\t\t\t\t\t\tdo {\n\t\t\t\t\t\t\tif ((elemLang = documentIsHTML ?\n\t\t\t\t\t\t\t\telem.lang :\n\t\t\t\t\t\t\t\telem.getAttribute(\"xml:lang\") || elem.getAttribute(\"lang\"))) {\n\n\t\t\t\t\t\t\t\telemLang = elemLang.toLowerCase();\n\t\t\t\t\t\t\t\treturn elemLang === lang || elemLang.indexOf(lang + \"-\") === 0;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} while ((elem = elem.parentNode) && elem.nodeType === 1);\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t};\n\t\t\t\t}),\n\n\t\t\t\t// Miscellaneous\n\t\t\t\ttarget: function (elem) {\n\t\t\t\t\tvar hash = window.location && window.location.hash;\n\t\t\t\t\treturn hash && hash.slice(1) === elem.id;\n\t\t\t\t},\n\n\t\t\t\troot: function (elem) {\n\t\t\t\t\treturn elem === documentElement;\n\t\t\t\t},\n\n\t\t\t\tfocus: function (elem) {\n\t\t\t\t\treturn elem === safeActiveElement() &&\n\t\t\t\t\t\tdocument.hasFocus() &&\n\t\t\t\t\t\t!!(elem.type || elem.href || ~elem.tabIndex);\n\t\t\t\t},\n\n\t\t\t\t// Boolean properties\n\t\t\t\tenabled: createDisabledPseudo(false),\n\t\t\t\tdisabled: createDisabledPseudo(true),\n\n\t\t\t\tchecked: function (elem) {\n\n\t\t\t\t\t// In CSS3, :checked should return both checked and selected elements\n\t\t\t\t\t// https://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\t\t\treturn (nodeName(elem, \"input\") && !!elem.checked) ||\n\t\t\t\t\t\t(nodeName(elem, \"option\") && !!elem.selected);\n\t\t\t\t},\n\n\t\t\t\tselected: function (elem) {\n\n\t\t\t\t\t// Support: IE <=11+\n\t\t\t\t\t// Accessing the selectedIndex property\n\t\t\t\t\t// forces the browser to treat the default option as\n\t\t\t\t\t// selected when in an optgroup.\n\t\t\t\t\tif (elem.parentNode) {\n\t\t\t\t\t\t// eslint-disable-next-line no-unused-expressions\n\t\t\t\t\t\telem.parentNode.selectedIndex;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn elem.selected === true;\n\t\t\t\t},\n\n\t\t\t\t// Contents\n\t\t\t\tempty: function (elem) {\n\n\t\t\t\t\t// https://www.w3.org/TR/selectors/#empty-pseudo\n\t\t\t\t\t// :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),\n\t\t\t\t\t//   but not by others (comment: 8; processing instruction: 7; etc.)\n\t\t\t\t\t// nodeType < 6 works because attributes (2) do not appear as children\n\t\t\t\t\tfor (elem = elem.firstChild; elem; elem = elem.nextSibling) {\n\t\t\t\t\t\tif (elem.nodeType < 6) {\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn true;\n\t\t\t\t},\n\n\t\t\t\tparent: function (elem) {\n\t\t\t\t\treturn !Expr.pseudos.empty(elem);\n\t\t\t\t},\n\n\t\t\t\t// Element/input types\n\t\t\t\theader: function (elem) {\n\t\t\t\t\treturn rheader.test(elem.nodeName);\n\t\t\t\t},\n\n\t\t\t\tinput: function (elem) {\n\t\t\t\t\treturn rinputs.test(elem.nodeName);\n\t\t\t\t},\n\n\t\t\t\tbutton: function (elem) {\n\t\t\t\t\treturn nodeName(elem, \"input\") && elem.type === \"button\" ||\n\t\t\t\t\t\tnodeName(elem, \"button\");\n\t\t\t\t},\n\n\t\t\t\ttext: function (elem) {\n\t\t\t\t\tvar attr;\n\t\t\t\t\treturn nodeName(elem, \"input\") && elem.type === \"text\" &&\n\n\t\t\t\t\t\t// Support: IE <10 only\n\t\t\t\t\t\t// New HTML5 attribute values (e.g., \"search\") appear\n\t\t\t\t\t\t// with elem.type === \"text\"\n\t\t\t\t\t\t((attr = elem.getAttribute(\"type\")) == null ||\n\t\t\t\t\t\t\tattr.toLowerCase() === \"text\");\n\t\t\t\t},\n\n\t\t\t\t// Position-in-collection\n\t\t\t\tfirst: createPositionalPseudo(function () {\n\t\t\t\t\treturn [0];\n\t\t\t\t}),\n\n\t\t\t\tlast: createPositionalPseudo(function (_matchIndexes, length) {\n\t\t\t\t\treturn [length - 1];\n\t\t\t\t}),\n\n\t\t\t\teq: createPositionalPseudo(function (_matchIndexes, length, argument) {\n\t\t\t\t\treturn [argument < 0 ? argument + length : argument];\n\t\t\t\t}),\n\n\t\t\t\teven: createPositionalPseudo(function (matchIndexes, length) {\n\t\t\t\t\tvar i = 0;\n\t\t\t\t\tfor (; i < length; i += 2) {\n\t\t\t\t\t\tmatchIndexes.push(i);\n\t\t\t\t\t}\n\t\t\t\t\treturn matchIndexes;\n\t\t\t\t}),\n\n\t\t\t\todd: createPositionalPseudo(function (matchIndexes, length) {\n\t\t\t\t\tvar i = 1;\n\t\t\t\t\tfor (; i < length; i += 2) {\n\t\t\t\t\t\tmatchIndexes.push(i);\n\t\t\t\t\t}\n\t\t\t\t\treturn matchIndexes;\n\t\t\t\t}),\n\n\t\t\t\tlt: createPositionalPseudo(function (matchIndexes, length, argument) {\n\t\t\t\t\tvar i;\n\n\t\t\t\t\tif (argument < 0) {\n\t\t\t\t\t\ti = argument + length;\n\t\t\t\t\t} else if (argument > length) {\n\t\t\t\t\t\ti = length;\n\t\t\t\t\t} else {\n\t\t\t\t\t\ti = argument;\n\t\t\t\t\t}\n\n\t\t\t\t\tfor (; --i >= 0;) {\n\t\t\t\t\t\tmatchIndexes.push(i);\n\t\t\t\t\t}\n\t\t\t\t\treturn matchIndexes;\n\t\t\t\t}),\n\n\t\t\t\tgt: createPositionalPseudo(function (matchIndexes, length, argument) {\n\t\t\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\t\t\tfor (; ++i < length;) {\n\t\t\t\t\t\tmatchIndexes.push(i);\n\t\t\t\t\t}\n\t\t\t\t\treturn matchIndexes;\n\t\t\t\t})\n\t\t\t}\n\t\t};\n\n\t\tExpr.pseudos.nth = Expr.pseudos.eq;\n\n\t\t// Add button/input type pseudos\n\t\tfor (i in { radio: true, checkbox: true, file: true, password: true, image: true }) {\n\t\t\tExpr.pseudos[i] = createInputPseudo(i);\n\t\t}\n\t\tfor (i in { submit: true, reset: true }) {\n\t\t\tExpr.pseudos[i] = createButtonPseudo(i);\n\t\t}\n\n\t\t// Easy API for creating new setFilters\n\t\tfunction setFilters() { }\n\t\tsetFilters.prototype = Expr.filters = Expr.pseudos;\n\t\tExpr.setFilters = new setFilters();\n\n\t\tfunction tokenize(selector, parseOnly) {\n\t\t\tvar matched, match, tokens, type,\n\t\t\t\tsoFar, groups, preFilters,\n\t\t\t\tcached = tokenCache[selector + \" \"];\n\n\t\t\tif (cached) {\n\t\t\t\treturn parseOnly ? 0 : cached.slice(0);\n\t\t\t}\n\n\t\t\tsoFar = selector;\n\t\t\tgroups = [];\n\t\t\tpreFilters = Expr.preFilter;\n\n\t\t\twhile (soFar) {\n\n\t\t\t\t// Comma and first run\n\t\t\t\tif (!matched || (match = rcomma.exec(soFar))) {\n\t\t\t\t\tif (match) {\n\n\t\t\t\t\t\t// Don't consume trailing commas as valid\n\t\t\t\t\t\tsoFar = soFar.slice(match[0].length) || soFar;\n\t\t\t\t\t}\n\t\t\t\t\tgroups.push((tokens = []));\n\t\t\t\t}\n\n\t\t\t\tmatched = false;\n\n\t\t\t\t// Combinators\n\t\t\t\tif ((match = rleadingCombinator.exec(soFar))) {\n\t\t\t\t\tmatched = match.shift();\n\t\t\t\t\ttokens.push({\n\t\t\t\t\t\tvalue: matched,\n\n\t\t\t\t\t\t// Cast descendant combinators to space\n\t\t\t\t\t\ttype: match[0].replace(rtrimCSS, \" \")\n\t\t\t\t\t});\n\t\t\t\t\tsoFar = soFar.slice(matched.length);\n\t\t\t\t}\n\n\t\t\t\t// Filters\n\t\t\t\tfor (type in Expr.filter) {\n\t\t\t\t\tif ((match = matchExpr[type].exec(soFar)) && (!preFilters[type] ||\n\t\t\t\t\t\t(match = preFilters[type](match)))) {\n\t\t\t\t\t\tmatched = match.shift();\n\t\t\t\t\t\ttokens.push({\n\t\t\t\t\t\t\tvalue: matched,\n\t\t\t\t\t\t\ttype: type,\n\t\t\t\t\t\t\tmatches: match\n\t\t\t\t\t\t});\n\t\t\t\t\t\tsoFar = soFar.slice(matched.length);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (!matched) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Return the length of the invalid excess\n\t\t\t// if we're just parsing\n\t\t\t// Otherwise, throw an error or return tokens\n\t\t\tif (parseOnly) {\n\t\t\t\treturn soFar.length;\n\t\t\t}\n\n\t\t\treturn soFar ?\n\t\t\t\tfind.error(selector) :\n\n\t\t\t\t// Cache the tokens\n\t\t\t\ttokenCache(selector, groups).slice(0);\n\t\t}\n\n\t\tfunction toSelector(tokens) {\n\t\t\tvar i = 0,\n\t\t\t\tlen = tokens.length,\n\t\t\t\tselector = \"\";\n\t\t\tfor (; i < len; i++) {\n\t\t\t\tselector += tokens[i].value;\n\t\t\t}\n\t\t\treturn selector;\n\t\t}\n\n\t\tfunction addCombinator(matcher, combinator, base) {\n\t\t\tvar dir = combinator.dir,\n\t\t\t\tskip = combinator.next,\n\t\t\t\tkey = skip || dir,\n\t\t\t\tcheckNonElements = base && key === \"parentNode\",\n\t\t\t\tdoneName = done++;\n\n\t\t\treturn combinator.first ?\n\n\t\t\t\t// Check against closest ancestor/preceding element\n\t\t\t\tfunction (elem, context, xml) {\n\t\t\t\t\twhile ((elem = elem[dir])) {\n\t\t\t\t\t\tif (elem.nodeType === 1 || checkNonElements) {\n\t\t\t\t\t\t\treturn matcher(elem, context, xml);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn false;\n\t\t\t\t} :\n\n\t\t\t\t// Check against all ancestor/preceding elements\n\t\t\t\tfunction (elem, context, xml) {\n\t\t\t\t\tvar oldCache, outerCache,\n\t\t\t\t\t\tnewCache = [dirruns, doneName];\n\n\t\t\t\t\t// We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching\n\t\t\t\t\tif (xml) {\n\t\t\t\t\t\twhile ((elem = elem[dir])) {\n\t\t\t\t\t\t\tif (elem.nodeType === 1 || checkNonElements) {\n\t\t\t\t\t\t\t\tif (matcher(elem, context, xml)) {\n\t\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\twhile ((elem = elem[dir])) {\n\t\t\t\t\t\t\tif (elem.nodeType === 1 || checkNonElements) {\n\t\t\t\t\t\t\t\touterCache = elem[expando] || (elem[expando] = {});\n\n\t\t\t\t\t\t\t\tif (skip && nodeName(elem, skip)) {\n\t\t\t\t\t\t\t\t\telem = elem[dir] || elem;\n\t\t\t\t\t\t\t\t} else if ((oldCache = outerCache[key]) &&\n\t\t\t\t\t\t\t\t\toldCache[0] === dirruns && oldCache[1] === doneName) {\n\n\t\t\t\t\t\t\t\t\t// Assign to newCache so results back-propagate to previous elements\n\t\t\t\t\t\t\t\t\treturn (newCache[2] = oldCache[2]);\n\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t// Reuse newcache so results back-propagate to previous elements\n\t\t\t\t\t\t\t\t\touterCache[key] = newCache;\n\n\t\t\t\t\t\t\t\t\t// A match means we're done; a fail means we have to keep checking\n\t\t\t\t\t\t\t\t\tif ((newCache[2] = matcher(elem, context, xml))) {\n\t\t\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn false;\n\t\t\t\t};\n\t\t}\n\n\t\tfunction elementMatcher(matchers) {\n\t\t\treturn matchers.length > 1 ?\n\t\t\t\tfunction (elem, context, xml) {\n\t\t\t\t\tvar i = matchers.length;\n\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\tif (!matchers[i](elem, context, xml)) {\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn true;\n\t\t\t\t} :\n\t\t\t\tmatchers[0];\n\t\t}\n\n\t\tfunction multipleContexts(selector, contexts, results) {\n\t\t\tvar i = 0,\n\t\t\t\tlen = contexts.length;\n\t\t\tfor (; i < len; i++) {\n\t\t\t\tfind(selector, contexts[i], results);\n\t\t\t}\n\t\t\treturn results;\n\t\t}\n\n\t\tfunction condense(unmatched, map, filter, context, xml) {\n\t\t\tvar elem,\n\t\t\t\tnewUnmatched = [],\n\t\t\t\ti = 0,\n\t\t\t\tlen = unmatched.length,\n\t\t\t\tmapped = map != null;\n\n\t\t\tfor (; i < len; i++) {\n\t\t\t\tif ((elem = unmatched[i])) {\n\t\t\t\t\tif (!filter || filter(elem, context, xml)) {\n\t\t\t\t\t\tnewUnmatched.push(elem);\n\t\t\t\t\t\tif (mapped) {\n\t\t\t\t\t\t\tmap.push(i);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn newUnmatched;\n\t\t}\n\n\t\tfunction setMatcher(preFilter, selector, matcher, postFilter, postFinder, postSelector) {\n\t\t\tif (postFilter && !postFilter[expando]) {\n\t\t\t\tpostFilter = setMatcher(postFilter);\n\t\t\t}\n\t\t\tif (postFinder && !postFinder[expando]) {\n\t\t\t\tpostFinder = setMatcher(postFinder, postSelector);\n\t\t\t}\n\t\t\treturn markFunction(function (seed, results, context, xml) {\n\t\t\t\tvar temp, i, elem, matcherOut,\n\t\t\t\t\tpreMap = [],\n\t\t\t\t\tpostMap = [],\n\t\t\t\t\tpreexisting = results.length,\n\n\t\t\t\t\t// Get initial elements from seed or context\n\t\t\t\t\telems = seed ||\n\t\t\t\t\t\tmultipleContexts(selector || \"*\",\n\t\t\t\t\t\t\tcontext.nodeType ? [context] : context, []),\n\n\t\t\t\t\t// Prefilter to get matcher input, preserving a map for seed-results synchronization\n\t\t\t\t\tmatcherIn = preFilter && (seed || !selector) ?\n\t\t\t\t\t\tcondense(elems, preMap, preFilter, context, xml) :\n\t\t\t\t\t\telems;\n\n\t\t\t\tif (matcher) {\n\n\t\t\t\t\t// If we have a postFinder, or filtered seed, or non-seed postFilter\n\t\t\t\t\t// or preexisting results,\n\t\t\t\t\tmatcherOut = postFinder || (seed ? preFilter : preexisting || postFilter) ?\n\n\t\t\t\t\t\t// ...intermediate processing is necessary\n\t\t\t\t\t\t[] :\n\n\t\t\t\t\t\t// ...otherwise use results directly\n\t\t\t\t\t\tresults;\n\n\t\t\t\t\t// Find primary matches\n\t\t\t\t\tmatcher(matcherIn, matcherOut, context, xml);\n\t\t\t\t} else {\n\t\t\t\t\tmatcherOut = matcherIn;\n\t\t\t\t}\n\n\t\t\t\t// Apply postFilter\n\t\t\t\tif (postFilter) {\n\t\t\t\t\ttemp = condense(matcherOut, postMap);\n\t\t\t\t\tpostFilter(temp, [], context, xml);\n\n\t\t\t\t\t// Un-match failing elements by moving them back to matcherIn\n\t\t\t\t\ti = temp.length;\n\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\tif ((elem = temp[i])) {\n\t\t\t\t\t\t\tmatcherOut[postMap[i]] = !(matcherIn[postMap[i]] = elem);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (seed) {\n\t\t\t\t\tif (postFinder || preFilter) {\n\t\t\t\t\t\tif (postFinder) {\n\n\t\t\t\t\t\t\t// Get the final matcherOut by condensing this intermediate into postFinder contexts\n\t\t\t\t\t\t\ttemp = [];\n\t\t\t\t\t\t\ti = matcherOut.length;\n\t\t\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\t\t\tif ((elem = matcherOut[i])) {\n\n\t\t\t\t\t\t\t\t\t// Restore matcherIn since elem is not yet a final match\n\t\t\t\t\t\t\t\t\ttemp.push((matcherIn[i] = elem));\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tpostFinder(null, (matcherOut = []), temp, xml);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Move matched elements from seed to results to keep them synchronized\n\t\t\t\t\t\ti = matcherOut.length;\n\t\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\t\tif ((elem = matcherOut[i]) &&\n\t\t\t\t\t\t\t\t(temp = postFinder ? indexOf.call(seed, elem) : preMap[i]) > -1) {\n\n\t\t\t\t\t\t\t\tseed[temp] = !(results[temp] = elem);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Add elements to results, through postFinder if defined\n\t\t\t\t} else {\n\t\t\t\t\tmatcherOut = condense(\n\t\t\t\t\t\tmatcherOut === results ?\n\t\t\t\t\t\t\tmatcherOut.splice(preexisting, matcherOut.length) :\n\t\t\t\t\t\t\tmatcherOut\n\t\t\t\t\t);\n\t\t\t\t\tif (postFinder) {\n\t\t\t\t\t\tpostFinder(null, results, matcherOut, xml);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tpush.apply(results, matcherOut);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tfunction matcherFromTokens(tokens) {\n\t\t\tvar checkContext, matcher, j,\n\t\t\t\tlen = tokens.length,\n\t\t\t\tleadingRelative = Expr.relative[tokens[0].type],\n\t\t\t\timplicitRelative = leadingRelative || Expr.relative[\" \"],\n\t\t\t\ti = leadingRelative ? 1 : 0,\n\n\t\t\t\t// The foundational matcher ensures that elements are reachable from top-level context(s)\n\t\t\t\tmatchContext = addCombinator(function (elem) {\n\t\t\t\t\treturn elem === checkContext;\n\t\t\t\t}, implicitRelative, true),\n\t\t\t\tmatchAnyContext = addCombinator(function (elem) {\n\t\t\t\t\treturn indexOf.call(checkContext, elem) > -1;\n\t\t\t\t}, implicitRelative, true),\n\t\t\t\tmatchers = [function (elem, context, xml) {\n\n\t\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\tvar ret = (!leadingRelative && (xml || context != outermostContext)) || (\n\t\t\t\t\t\t(checkContext = context).nodeType ?\n\t\t\t\t\t\t\tmatchContext(elem, context, xml) :\n\t\t\t\t\t\t\tmatchAnyContext(elem, context, xml));\n\n\t\t\t\t\t// Avoid hanging onto element\n\t\t\t\t\t// (see https://github.com/jquery/sizzle/issues/299)\n\t\t\t\t\tcheckContext = null;\n\t\t\t\t\treturn ret;\n\t\t\t\t}];\n\n\t\t\tfor (; i < len; i++) {\n\t\t\t\tif ((matcher = Expr.relative[tokens[i].type])) {\n\t\t\t\t\tmatchers = [addCombinator(elementMatcher(matchers), matcher)];\n\t\t\t\t} else {\n\t\t\t\t\tmatcher = Expr.filter[tokens[i].type].apply(null, tokens[i].matches);\n\n\t\t\t\t\t// Return special upon seeing a positional matcher\n\t\t\t\t\tif (matcher[expando]) {\n\n\t\t\t\t\t\t// Find the next relative operator (if any) for proper handling\n\t\t\t\t\t\tj = ++i;\n\t\t\t\t\t\tfor (; j < len; j++) {\n\t\t\t\t\t\t\tif (Expr.relative[tokens[j].type]) {\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn setMatcher(\n\t\t\t\t\t\t\ti > 1 && elementMatcher(matchers),\n\t\t\t\t\t\t\ti > 1 && toSelector(\n\n\t\t\t\t\t\t\t\t// If the preceding token was a descendant combinator, insert an implicit any-element `*`\n\t\t\t\t\t\t\t\ttokens.slice(0, i - 1)\n\t\t\t\t\t\t\t\t\t.concat({ value: tokens[i - 2].type === \" \" ? \"*\" : \"\" })\n\t\t\t\t\t\t\t).replace(rtrimCSS, \"$1\"),\n\t\t\t\t\t\t\tmatcher,\n\t\t\t\t\t\t\ti < j && matcherFromTokens(tokens.slice(i, j)),\n\t\t\t\t\t\t\tj < len && matcherFromTokens((tokens = tokens.slice(j))),\n\t\t\t\t\t\t\tj < len && toSelector(tokens)\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\tmatchers.push(matcher);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn elementMatcher(matchers);\n\t\t}\n\n\t\tfunction matcherFromGroupMatchers(elementMatchers, setMatchers) {\n\t\t\tvar bySet = setMatchers.length > 0,\n\t\t\t\tbyElement = elementMatchers.length > 0,\n\t\t\t\tsuperMatcher = function (seed, context, xml, results, outermost) {\n\t\t\t\t\tvar elem, j, matcher,\n\t\t\t\t\t\tmatchedCount = 0,\n\t\t\t\t\t\ti = \"0\",\n\t\t\t\t\t\tunmatched = seed && [],\n\t\t\t\t\t\tsetMatched = [],\n\t\t\t\t\t\tcontextBackup = outermostContext,\n\n\t\t\t\t\t\t// We must always have either seed elements or outermost context\n\t\t\t\t\t\telems = seed || byElement && Expr.find.TAG(\"*\", outermost),\n\n\t\t\t\t\t\t// Use integer dirruns iff this is the outermost matcher\n\t\t\t\t\t\tdirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1),\n\t\t\t\t\t\tlen = elems.length;\n\n\t\t\t\t\tif (outermost) {\n\n\t\t\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\t\toutermostContext = context == document || context || outermost;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Add elements passing elementMatchers directly to results\n\t\t\t\t\t// Support: iOS <=7 - 9 only\n\t\t\t\t\t// Tolerate NodeList properties (IE: \"length\"; Safari: <number>) matching\n\t\t\t\t\t// elements by id. (see trac-14142)\n\t\t\t\t\tfor (; i !== len && (elem = elems[i]) != null; i++) {\n\t\t\t\t\t\tif (byElement && elem) {\n\t\t\t\t\t\t\tj = 0;\n\n\t\t\t\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\t\t\tif (!context && elem.ownerDocument != document) {\n\t\t\t\t\t\t\t\tsetDocument(elem);\n\t\t\t\t\t\t\t\txml = !documentIsHTML;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\twhile ((matcher = elementMatchers[j++])) {\n\t\t\t\t\t\t\t\tif (matcher(elem, context || document, xml)) {\n\t\t\t\t\t\t\t\t\tpush.call(results, elem);\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (outermost) {\n\t\t\t\t\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Track unmatched elements for set filters\n\t\t\t\t\t\tif (bySet) {\n\n\t\t\t\t\t\t\t// They will have gone through all possible matchers\n\t\t\t\t\t\t\tif ((elem = !matcher && elem)) {\n\t\t\t\t\t\t\t\tmatchedCount--;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Lengthen the array for every element, matched or not\n\t\t\t\t\t\t\tif (seed) {\n\t\t\t\t\t\t\t\tunmatched.push(elem);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// `i` is now the count of elements visited above, and adding it to `matchedCount`\n\t\t\t\t\t// makes the latter nonnegative.\n\t\t\t\t\tmatchedCount += i;\n\n\t\t\t\t\t// Apply set filters to unmatched elements\n\t\t\t\t\t// NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`\n\t\t\t\t\t// equals `i`), unless we didn't visit _any_ elements in the above loop because we have\n\t\t\t\t\t// no element matchers and no seed.\n\t\t\t\t\t// Incrementing an initially-string \"0\" `i` allows `i` to remain a string only in that\n\t\t\t\t\t// case, which will result in a \"00\" `matchedCount` that differs from `i` but is also\n\t\t\t\t\t// numerically zero.\n\t\t\t\t\tif (bySet && i !== matchedCount) {\n\t\t\t\t\t\tj = 0;\n\t\t\t\t\t\twhile ((matcher = setMatchers[j++])) {\n\t\t\t\t\t\t\tmatcher(unmatched, setMatched, context, xml);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (seed) {\n\n\t\t\t\t\t\t\t// Reintegrate element matches to eliminate the need for sorting\n\t\t\t\t\t\t\tif (matchedCount > 0) {\n\t\t\t\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\t\t\t\tif (!(unmatched[i] || setMatched[i])) {\n\t\t\t\t\t\t\t\t\t\tsetMatched[i] = pop.call(results);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Discard index placeholder values to get only actual matches\n\t\t\t\t\t\t\tsetMatched = condense(setMatched);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Add matches to results\n\t\t\t\t\t\tpush.apply(results, setMatched);\n\n\t\t\t\t\t\t// Seedless set matches succeeding multiple successful matchers stipulate sorting\n\t\t\t\t\t\tif (outermost && !seed && setMatched.length > 0 &&\n\t\t\t\t\t\t\t(matchedCount + setMatchers.length) > 1) {\n\n\t\t\t\t\t\t\tjQuery.uniqueSort(results);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Override manipulation of globals by nested matchers\n\t\t\t\t\tif (outermost) {\n\t\t\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\t\t\toutermostContext = contextBackup;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn unmatched;\n\t\t\t\t};\n\n\t\t\treturn bySet ?\n\t\t\t\tmarkFunction(superMatcher) :\n\t\t\t\tsuperMatcher;\n\t\t}\n\n\t\tfunction compile(selector, match /* Internal Use Only */) {\n\t\t\tvar i,\n\t\t\t\tsetMatchers = [],\n\t\t\t\telementMatchers = [],\n\t\t\t\tcached = compilerCache[selector + \" \"];\n\n\t\t\tif (!cached) {\n\n\t\t\t\t// Generate a function of recursive functions that can be used to check each element\n\t\t\t\tif (!match) {\n\t\t\t\t\tmatch = tokenize(selector);\n\t\t\t\t}\n\t\t\t\ti = match.length;\n\t\t\t\twhile (i--) {\n\t\t\t\t\tcached = matcherFromTokens(match[i]);\n\t\t\t\t\tif (cached[expando]) {\n\t\t\t\t\t\tsetMatchers.push(cached);\n\t\t\t\t\t} else {\n\t\t\t\t\t\telementMatchers.push(cached);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Cache the compiled function\n\t\t\t\tcached = compilerCache(selector,\n\t\t\t\t\tmatcherFromGroupMatchers(elementMatchers, setMatchers));\n\n\t\t\t\t// Save selector and tokenization\n\t\t\t\tcached.selector = selector;\n\t\t\t}\n\t\t\treturn cached;\n\t\t}\n\n\t\t/**\n\t\t * A low-level selection function that works with jQuery's compiled\n\t\t *  selector functions\n\t\t * @param {String|Function} selector A selector or a pre-compiled\n\t\t *  selector function built with jQuery selector compile\n\t\t * @param {Element} context\n\t\t * @param {Array} [results]\n\t\t * @param {Array} [seed] A set of elements to match against\n\t\t */\n\t\tfunction select(selector, context, results, seed) {\n\t\t\tvar i, tokens, token, type, find,\n\t\t\t\tcompiled = typeof selector === \"function\" && selector,\n\t\t\t\tmatch = !seed && tokenize((selector = compiled.selector || selector));\n\n\t\t\tresults = results || [];\n\n\t\t\t// Try to minimize operations if there is only one selector in the list and no seed\n\t\t\t// (the latter of which guarantees us context)\n\t\t\tif (match.length === 1) {\n\n\t\t\t\t// Reduce context if the leading compound selector is an ID\n\t\t\t\ttokens = match[0] = match[0].slice(0);\n\t\t\t\tif (tokens.length > 2 && (token = tokens[0]).type === \"ID\" &&\n\t\t\t\t\tcontext.nodeType === 9 && documentIsHTML && Expr.relative[tokens[1].type]) {\n\n\t\t\t\t\tcontext = (Expr.find.ID(\n\t\t\t\t\t\ttoken.matches[0].replace(runescape, funescape),\n\t\t\t\t\t\tcontext\n\t\t\t\t\t) || [])[0];\n\t\t\t\t\tif (!context) {\n\t\t\t\t\t\treturn results;\n\n\t\t\t\t\t\t// Precompiled matchers will still verify ancestry, so step up a level\n\t\t\t\t\t} else if (compiled) {\n\t\t\t\t\t\tcontext = context.parentNode;\n\t\t\t\t\t}\n\n\t\t\t\t\tselector = selector.slice(tokens.shift().value.length);\n\t\t\t\t}\n\n\t\t\t\t// Fetch a seed set for right-to-left matching\n\t\t\t\ti = matchExpr.needsContext.test(selector) ? 0 : tokens.length;\n\t\t\t\twhile (i--) {\n\t\t\t\t\ttoken = tokens[i];\n\n\t\t\t\t\t// Abort if we hit a combinator\n\t\t\t\t\tif (Expr.relative[(type = token.type)]) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tif ((find = Expr.find[type])) {\n\n\t\t\t\t\t\t// Search, expanding context for leading sibling combinators\n\t\t\t\t\t\tif ((seed = find(\n\t\t\t\t\t\t\ttoken.matches[0].replace(runescape, funescape),\n\t\t\t\t\t\t\trsibling.test(tokens[0].type) &&\n\t\t\t\t\t\t\ttestContext(context.parentNode) || context\n\t\t\t\t\t\t))) {\n\n\t\t\t\t\t\t\t// If seed is empty or no tokens remain, we can return early\n\t\t\t\t\t\t\ttokens.splice(i, 1);\n\t\t\t\t\t\t\tselector = seed.length && toSelector(tokens);\n\t\t\t\t\t\t\tif (!selector) {\n\t\t\t\t\t\t\t\tpush.apply(results, seed);\n\t\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Compile and execute a filtering function if one is not provided\n\t\t\t// Provide `match` to avoid retokenization if we modified the selector above\n\t\t\t(compiled || compile(selector, match))(\n\t\t\t\tseed,\n\t\t\t\tcontext,\n\t\t\t\t!documentIsHTML,\n\t\t\t\tresults,\n\t\t\t\t!context || rsibling.test(selector) && testContext(context.parentNode) || context\n\t\t\t);\n\t\t\treturn results;\n\t\t}\n\n\t\t// One-time assignments\n\n\t\t// Support: Android <=4.0 - 4.1+\n\t\t// Sort stability\n\t\tsupport.sortStable = expando.split(\"\").sort(sortOrder).join(\"\") === expando;\n\n\t\t// Initialize against the default document\n\t\tsetDocument();\n\n\t\t// Support: Android <=4.0 - 4.1+\n\t\t// Detached nodes confoundingly follow *each other*\n\t\tsupport.sortDetached = assert(function (el) {\n\n\t\t\t// Should return 1, but returns 4 (following)\n\t\t\treturn el.compareDocumentPosition(document.createElement(\"fieldset\")) & 1;\n\t\t});\n\n\t\tjQuery.find = find;\n\n\t\t// Deprecated\n\t\tjQuery.expr[\":\"] = jQuery.expr.pseudos;\n\t\tjQuery.unique = jQuery.uniqueSort;\n\n\t\t// These have always been private, but they used to be documented\n\t\t// as part of Sizzle so let's maintain them in the 3.x line\n\t\t// for backwards compatibility purposes.\n\t\tfind.compile = compile;\n\t\tfind.select = select;\n\t\tfind.setDocument = setDocument;\n\n\t\tfind.escape = jQuery.escapeSelector;\n\t\tfind.getText = jQuery.text;\n\t\tfind.isXML = jQuery.isXMLDoc;\n\t\tfind.selectors = jQuery.expr;\n\t\tfind.support = jQuery.support;\n\t\tfind.uniqueSort = jQuery.uniqueSort;\n\n\t\t/* eslint-enable */\n\n\t})();\n\n\n\tvar dir = function (elem, dir, until) {\n\t\tvar matched = [],\n\t\t\ttruncate = until !== undefined;\n\n\t\twhile ((elem = elem[dir]) && elem.nodeType !== 9) {\n\t\t\tif (elem.nodeType === 1) {\n\t\t\t\tif (truncate && jQuery(elem).is(until)) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tmatched.push(elem);\n\t\t\t}\n\t\t}\n\t\treturn matched;\n\t};\n\n\n\tvar siblings = function (n, elem) {\n\t\tvar matched = [];\n\n\t\tfor (; n; n = n.nextSibling) {\n\t\t\tif (n.nodeType === 1 && n !== elem) {\n\t\t\t\tmatched.push(n);\n\t\t\t}\n\t\t}\n\n\t\treturn matched;\n\t};\n\n\n\tvar rneedsContext = jQuery.expr.match.needsContext;\n\n\tvar rsingleTag = (/^<([a-z][^\\/\\0>:\\x20\\t\\r\\n\\f]*)[\\x20\\t\\r\\n\\f]*\\/?>(?:<\\/\\1>|)$/i);\n\n\n\n\t// Implement the identical functionality for filter and not\n\tfunction winnow(elements, qualifier, not) {\n\t\tif (isFunction(qualifier)) {\n\t\t\treturn jQuery.grep(elements, function (elem, i) {\n\t\t\t\treturn !!qualifier.call(elem, i, elem) !== not;\n\t\t\t});\n\t\t}\n\n\t\t// Single element\n\t\tif (qualifier.nodeType) {\n\t\t\treturn jQuery.grep(elements, function (elem) {\n\t\t\t\treturn (elem === qualifier) !== not;\n\t\t\t});\n\t\t}\n\n\t\t// Arraylike of elements (jQuery, arguments, Array)\n\t\tif (typeof qualifier !== \"string\") {\n\t\t\treturn jQuery.grep(elements, function (elem) {\n\t\t\t\treturn (indexOf.call(qualifier, elem) > -1) !== not;\n\t\t\t});\n\t\t}\n\n\t\t// Filtered directly for both simple and complex selectors\n\t\treturn jQuery.filter(qualifier, elements, not);\n\t}\n\n\tjQuery.filter = function (expr, elems, not) {\n\t\tvar elem = elems[0];\n\n\t\tif (not) {\n\t\t\texpr = \":not(\" + expr + \")\";\n\t\t}\n\n\t\tif (elems.length === 1 && elem.nodeType === 1) {\n\t\t\treturn jQuery.find.matchesSelector(elem, expr) ? [elem] : [];\n\t\t}\n\n\t\treturn jQuery.find.matches(expr, jQuery.grep(elems, function (elem) {\n\t\t\treturn elem.nodeType === 1;\n\t\t}));\n\t};\n\n\tjQuery.fn.extend({\n\t\tfind: function (selector) {\n\t\t\tvar i, ret,\n\t\t\t\tlen = this.length,\n\t\t\t\tself = this;\n\n\t\t\tif (typeof selector !== \"string\") {\n\t\t\t\treturn this.pushStack(jQuery(selector).filter(function () {\n\t\t\t\t\tfor (i = 0; i < len; i++) {\n\t\t\t\t\t\tif (jQuery.contains(self[i], this)) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}));\n\t\t\t}\n\n\t\t\tret = this.pushStack([]);\n\n\t\t\tfor (i = 0; i < len; i++) {\n\t\t\t\tjQuery.find(selector, self[i], ret);\n\t\t\t}\n\n\t\t\treturn len > 1 ? jQuery.uniqueSort(ret) : ret;\n\t\t},\n\t\tfilter: function (selector) {\n\t\t\treturn this.pushStack(winnow(this, selector || [], false));\n\t\t},\n\t\tnot: function (selector) {\n\t\t\treturn this.pushStack(winnow(this, selector || [], true));\n\t\t},\n\t\tis: function (selector) {\n\t\t\treturn !!winnow(\n\t\t\t\tthis,\n\n\t\t\t\t// If this is a positional/relative selector, check membership in the returned set\n\t\t\t\t// so $(\"p:first\").is(\"p:last\") won't return true for a doc with two \"p\".\n\t\t\t\ttypeof selector === \"string\" && rneedsContext.test(selector) ?\n\t\t\t\t\tjQuery(selector) :\n\t\t\t\t\tselector || [],\n\t\t\t\tfalse\n\t\t\t).length;\n\t\t}\n\t});\n\n\n\t// Initialize a jQuery object\n\n\n\t// A central reference to the root jQuery(document)\n\tvar rootjQuery,\n\n\t\t// A simple way to check for HTML strings\n\t\t// Prioritize #id over <tag> to avoid XSS via location.hash (trac-9521)\n\t\t// Strict HTML recognition (trac-11290: must start with <)\n\t\t// Shortcut simple #id case for speed\n\t\trquickExpr = /^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]+))$/,\n\n\t\tinit = jQuery.fn.init = function (selector, context, root) {\n\t\t\tvar match, elem;\n\n\t\t\t// HANDLE: $(\"\"), $(null), $(undefined), $(false)\n\t\t\tif (!selector) {\n\t\t\t\treturn this;\n\t\t\t}\n\n\t\t\t// Method init() accepts an alternate rootjQuery\n\t\t\t// so migrate can support jQuery.sub (gh-2101)\n\t\t\troot = root || rootjQuery;\n\n\t\t\t// Handle HTML strings\n\t\t\tif (typeof selector === \"string\") {\n\t\t\t\tif (selector[0] === \"<\" &&\n\t\t\t\t\tselector[selector.length - 1] === \">\" &&\n\t\t\t\t\tselector.length >= 3) {\n\n\t\t\t\t\t// Assume that strings that start and end with <> are HTML and skip the regex check\n\t\t\t\t\tmatch = [null, selector, null];\n\n\t\t\t\t} else {\n\t\t\t\t\tmatch = rquickExpr.exec(selector);\n\t\t\t\t}\n\n\t\t\t\t// Match html or make sure no context is specified for #id\n\t\t\t\tif (match && (match[1] || !context)) {\n\n\t\t\t\t\t// HANDLE: $(html) -> $(array)\n\t\t\t\t\tif (match[1]) {\n\t\t\t\t\t\tcontext = context instanceof jQuery ? context[0] : context;\n\n\t\t\t\t\t\t// Option to run scripts is true for back-compat\n\t\t\t\t\t\t// Intentionally let the error be thrown if parseHTML is not present\n\t\t\t\t\t\tjQuery.merge(this, jQuery.parseHTML(\n\t\t\t\t\t\t\tmatch[1],\n\t\t\t\t\t\t\tcontext && context.nodeType ? context.ownerDocument || context : document,\n\t\t\t\t\t\t\ttrue\n\t\t\t\t\t\t));\n\n\t\t\t\t\t\t// HANDLE: $(html, props)\n\t\t\t\t\t\tif (rsingleTag.test(match[1]) && jQuery.isPlainObject(context)) {\n\t\t\t\t\t\t\tfor (match in context) {\n\n\t\t\t\t\t\t\t\t// Properties of context are called as methods if possible\n\t\t\t\t\t\t\t\tif (isFunction(this[match])) {\n\t\t\t\t\t\t\t\t\tthis[match](context[match]);\n\n\t\t\t\t\t\t\t\t\t// ...and otherwise set as attributes\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tthis.attr(match, context[match]);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn this;\n\n\t\t\t\t\t\t// HANDLE: $(#id)\n\t\t\t\t\t} else {\n\t\t\t\t\t\telem = document.getElementById(match[2]);\n\n\t\t\t\t\t\tif (elem) {\n\n\t\t\t\t\t\t\t// Inject the element directly into the jQuery object\n\t\t\t\t\t\t\tthis[0] = elem;\n\t\t\t\t\t\t\tthis.length = 1;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn this;\n\t\t\t\t\t}\n\n\t\t\t\t\t// HANDLE: $(expr, $(...))\n\t\t\t\t} else if (!context || context.jquery) {\n\t\t\t\t\treturn (context || root).find(selector);\n\n\t\t\t\t\t// HANDLE: $(expr, context)\n\t\t\t\t\t// (which is just equivalent to: $(context).find(expr)\n\t\t\t\t} else {\n\t\t\t\t\treturn this.constructor(context).find(selector);\n\t\t\t\t}\n\n\t\t\t\t// HANDLE: $(DOMElement)\n\t\t\t} else if (selector.nodeType) {\n\t\t\t\tthis[0] = selector;\n\t\t\t\tthis.length = 1;\n\t\t\t\treturn this;\n\n\t\t\t\t// HANDLE: $(function)\n\t\t\t\t// Shortcut for document ready\n\t\t\t} else if (isFunction(selector)) {\n\t\t\t\treturn root.ready !== undefined ?\n\t\t\t\t\troot.ready(selector) :\n\n\t\t\t\t\t// Execute immediately if ready is not present\n\t\t\t\t\tselector(jQuery);\n\t\t\t}\n\n\t\t\treturn jQuery.makeArray(selector, this);\n\t\t};\n\n\t// Give the init function the jQuery prototype for later instantiation\n\tinit.prototype = jQuery.fn;\n\n\t// Initialize central reference\n\trootjQuery = jQuery(document);\n\n\n\tvar rparentsprev = /^(?:parents|prev(?:Until|All))/,\n\n\t\t// Methods guaranteed to produce a unique set when starting from a unique set\n\t\tguaranteedUnique = {\n\t\t\tchildren: true,\n\t\t\tcontents: true,\n\t\t\tnext: true,\n\t\t\tprev: true\n\t\t};\n\n\tjQuery.fn.extend({\n\t\thas: function (target) {\n\t\t\tvar targets = jQuery(target, this),\n\t\t\t\tl = targets.length;\n\n\t\t\treturn this.filter(function () {\n\t\t\t\tvar i = 0;\n\t\t\t\tfor (; i < l; i++) {\n\t\t\t\t\tif (jQuery.contains(this, targets[i])) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\tclosest: function (selectors, context) {\n\t\t\tvar cur,\n\t\t\t\ti = 0,\n\t\t\t\tl = this.length,\n\t\t\t\tmatched = [],\n\t\t\t\ttargets = typeof selectors !== \"string\" && jQuery(selectors);\n\n\t\t\t// Positional selectors never match, since there's no _selection_ context\n\t\t\tif (!rneedsContext.test(selectors)) {\n\t\t\t\tfor (; i < l; i++) {\n\t\t\t\t\tfor (cur = this[i]; cur && cur !== context; cur = cur.parentNode) {\n\n\t\t\t\t\t\t// Always skip document fragments\n\t\t\t\t\t\tif (cur.nodeType < 11 && (targets ?\n\t\t\t\t\t\t\ttargets.index(cur) > -1 :\n\n\t\t\t\t\t\t\t// Don't pass non-elements to jQuery#find\n\t\t\t\t\t\t\tcur.nodeType === 1 &&\n\t\t\t\t\t\t\tjQuery.find.matchesSelector(cur, selectors))) {\n\n\t\t\t\t\t\t\tmatched.push(cur);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn this.pushStack(matched.length > 1 ? jQuery.uniqueSort(matched) : matched);\n\t\t},\n\n\t\t// Determine the position of an element within the set\n\t\tindex: function (elem) {\n\n\t\t\t// No argument, return index in parent\n\t\t\tif (!elem) {\n\t\t\t\treturn (this[0] && this[0].parentNode) ? this.first().prevAll().length : -1;\n\t\t\t}\n\n\t\t\t// Index in selector\n\t\t\tif (typeof elem === \"string\") {\n\t\t\t\treturn indexOf.call(jQuery(elem), this[0]);\n\t\t\t}\n\n\t\t\t// Locate the position of the desired element\n\t\t\treturn indexOf.call(this,\n\n\t\t\t\t// If it receives a jQuery object, the first element is used\n\t\t\t\telem.jquery ? elem[0] : elem\n\t\t\t);\n\t\t},\n\n\t\tadd: function (selector, context) {\n\t\t\treturn this.pushStack(\n\t\t\t\tjQuery.uniqueSort(\n\t\t\t\t\tjQuery.merge(this.get(), jQuery(selector, context))\n\t\t\t\t)\n\t\t\t);\n\t\t},\n\n\t\taddBack: function (selector) {\n\t\t\treturn this.add(selector == null ?\n\t\t\t\tthis.prevObject : this.prevObject.filter(selector)\n\t\t\t);\n\t\t}\n\t});\n\n\tfunction sibling(cur, dir) {\n\t\twhile ((cur = cur[dir]) && cur.nodeType !== 1) { }\n\t\treturn cur;\n\t}\n\n\tjQuery.each({\n\t\tparent: function (elem) {\n\t\t\tvar parent = elem.parentNode;\n\t\t\treturn parent && parent.nodeType !== 11 ? parent : null;\n\t\t},\n\t\tparents: function (elem) {\n\t\t\treturn dir(elem, \"parentNode\");\n\t\t},\n\t\tparentsUntil: function (elem, _i, until) {\n\t\t\treturn dir(elem, \"parentNode\", until);\n\t\t},\n\t\tnext: function (elem) {\n\t\t\treturn sibling(elem, \"nextSibling\");\n\t\t},\n\t\tprev: function (elem) {\n\t\t\treturn sibling(elem, \"previousSibling\");\n\t\t},\n\t\tnextAll: function (elem) {\n\t\t\treturn dir(elem, \"nextSibling\");\n\t\t},\n\t\tprevAll: function (elem) {\n\t\t\treturn dir(elem, \"previousSibling\");\n\t\t},\n\t\tnextUntil: function (elem, _i, until) {\n\t\t\treturn dir(elem, \"nextSibling\", until);\n\t\t},\n\t\tprevUntil: function (elem, _i, until) {\n\t\t\treturn dir(elem, \"previousSibling\", until);\n\t\t},\n\t\tsiblings: function (elem) {\n\t\t\treturn siblings((elem.parentNode || {}).firstChild, elem);\n\t\t},\n\t\tchildren: function (elem) {\n\t\t\treturn siblings(elem.firstChild);\n\t\t},\n\t\tcontents: function (elem) {\n\t\t\tif (elem.contentDocument != null &&\n\n\t\t\t\t// Support: IE 11+\n\t\t\t\t// <object> elements with no `data` attribute has an object\n\t\t\t\t// `contentDocument` with a `null` prototype.\n\t\t\t\tgetProto(elem.contentDocument)) {\n\n\t\t\t\treturn elem.contentDocument;\n\t\t\t}\n\n\t\t\t// Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only\n\t\t\t// Treat the template element as a regular one in browsers that\n\t\t\t// don't support it.\n\t\t\tif (nodeName(elem, \"template\")) {\n\t\t\t\telem = elem.content || elem;\n\t\t\t}\n\n\t\t\treturn jQuery.merge([], elem.childNodes);\n\t\t}\n\t}, function (name, fn) {\n\t\tjQuery.fn[name] = function (until, selector) {\n\t\t\tvar matched = jQuery.map(this, fn, until);\n\n\t\t\tif (name.slice(-5) !== \"Until\") {\n\t\t\t\tselector = until;\n\t\t\t}\n\n\t\t\tif (selector && typeof selector === \"string\") {\n\t\t\t\tmatched = jQuery.filter(selector, matched);\n\t\t\t}\n\n\t\t\tif (this.length > 1) {\n\n\t\t\t\t// Remove duplicates\n\t\t\t\tif (!guaranteedUnique[name]) {\n\t\t\t\t\tjQuery.uniqueSort(matched);\n\t\t\t\t}\n\n\t\t\t\t// Reverse order for parents* and prev-derivatives\n\t\t\t\tif (rparentsprev.test(name)) {\n\t\t\t\t\tmatched.reverse();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn this.pushStack(matched);\n\t\t};\n\t});\n\tvar rnothtmlwhite = (/[^\\x20\\t\\r\\n\\f]+/g);\n\n\n\n\t// Convert String-formatted options into Object-formatted ones\n\tfunction createOptions(options) {\n\t\tvar object = {};\n\t\tjQuery.each(options.match(rnothtmlwhite) || [], function (_, flag) {\n\t\t\tobject[flag] = true;\n\t\t});\n\t\treturn object;\n\t}\n\n\t/*\n\t * Create a callback list using the following parameters:\n\t *\n\t *\toptions: an optional list of space-separated options that will change how\n\t *\t\t\tthe callback list behaves or a more traditional option object\n\t *\n\t * By default a callback list will act like an event callback list and can be\n\t * \"fired\" multiple times.\n\t *\n\t * Possible options:\n\t *\n\t *\tonce:\t\t\twill ensure the callback list can only be fired once (like a Deferred)\n\t *\n\t *\tmemory:\t\t\twill keep track of previous values and will call any callback added\n\t *\t\t\t\t\tafter the list has been fired right away with the latest \"memorized\"\n\t *\t\t\t\t\tvalues (like a Deferred)\n\t *\n\t *\tunique:\t\t\twill ensure a callback can only be added once (no duplicate in the list)\n\t *\n\t *\tstopOnFalse:\tinterrupt callings when a callback returns false\n\t *\n\t */\n\tjQuery.Callbacks = function (options) {\n\n\t\t// Convert options from String-formatted to Object-formatted if needed\n\t\t// (we check in cache first)\n\t\toptions = typeof options === \"string\" ?\n\t\t\tcreateOptions(options) :\n\t\t\tjQuery.extend({}, options);\n\n\t\tvar // Flag to know if list is currently firing\n\t\t\tfiring,\n\n\t\t\t// Last fire value for non-forgettable lists\n\t\t\tmemory,\n\n\t\t\t// Flag to know if list was already fired\n\t\t\tfired,\n\n\t\t\t// Flag to prevent firing\n\t\t\tlocked,\n\n\t\t\t// Actual callback list\n\t\t\tlist = [],\n\n\t\t\t// Queue of execution data for repeatable lists\n\t\t\tqueue = [],\n\n\t\t\t// Index of currently firing callback (modified by add/remove as needed)\n\t\t\tfiringIndex = -1,\n\n\t\t\t// Fire callbacks\n\t\t\tfire = function () {\n\n\t\t\t\t// Enforce single-firing\n\t\t\t\tlocked = locked || options.once;\n\n\t\t\t\t// Execute callbacks for all pending executions,\n\t\t\t\t// respecting firingIndex overrides and runtime changes\n\t\t\t\tfired = firing = true;\n\t\t\t\tfor (; queue.length; firingIndex = -1) {\n\t\t\t\t\tmemory = queue.shift();\n\t\t\t\t\twhile (++firingIndex < list.length) {\n\n\t\t\t\t\t\t// Run callback and check for early termination\n\t\t\t\t\t\tif (list[firingIndex].apply(memory[0], memory[1]) === false &&\n\t\t\t\t\t\t\toptions.stopOnFalse) {\n\n\t\t\t\t\t\t\t// Jump to end and forget the data so .add doesn't re-fire\n\t\t\t\t\t\t\tfiringIndex = list.length;\n\t\t\t\t\t\t\tmemory = false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Forget the data if we're done with it\n\t\t\t\tif (!options.memory) {\n\t\t\t\t\tmemory = false;\n\t\t\t\t}\n\n\t\t\t\tfiring = false;\n\n\t\t\t\t// Clean up if we're done firing for good\n\t\t\t\tif (locked) {\n\n\t\t\t\t\t// Keep an empty list if we have data for future add calls\n\t\t\t\t\tif (memory) {\n\t\t\t\t\t\tlist = [];\n\n\t\t\t\t\t\t// Otherwise, this object is spent\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlist = \"\";\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// Actual Callbacks object\n\t\t\tself = {\n\n\t\t\t\t// Add a callback or a collection of callbacks to the list\n\t\t\t\tadd: function () {\n\t\t\t\t\tif (list) {\n\n\t\t\t\t\t\t// If we have memory from a past run, we should fire after adding\n\t\t\t\t\t\tif (memory && !firing) {\n\t\t\t\t\t\t\tfiringIndex = list.length - 1;\n\t\t\t\t\t\t\tqueue.push(memory);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t(function add(args) {\n\t\t\t\t\t\t\tjQuery.each(args, function (_, arg) {\n\t\t\t\t\t\t\t\tif (isFunction(arg)) {\n\t\t\t\t\t\t\t\t\tif (!options.unique || !self.has(arg)) {\n\t\t\t\t\t\t\t\t\t\tlist.push(arg);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} else if (arg && arg.length && toType(arg) !== \"string\") {\n\n\t\t\t\t\t\t\t\t\t// Inspect recursively\n\t\t\t\t\t\t\t\t\tadd(arg);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t})(arguments);\n\n\t\t\t\t\t\tif (memory && !firing) {\n\t\t\t\t\t\t\tfire();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Remove a callback from the list\n\t\t\t\tremove: function () {\n\t\t\t\t\tjQuery.each(arguments, function (_, arg) {\n\t\t\t\t\t\tvar index;\n\t\t\t\t\t\twhile ((index = jQuery.inArray(arg, list, index)) > -1) {\n\t\t\t\t\t\t\tlist.splice(index, 1);\n\n\t\t\t\t\t\t\t// Handle firing indexes\n\t\t\t\t\t\t\tif (index <= firingIndex) {\n\t\t\t\t\t\t\t\tfiringIndex--;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Check if a given callback is in the list.\n\t\t\t\t// If no argument is given, return whether or not list has callbacks attached.\n\t\t\t\thas: function (fn) {\n\t\t\t\t\treturn fn ?\n\t\t\t\t\t\tjQuery.inArray(fn, list) > -1 :\n\t\t\t\t\t\tlist.length > 0;\n\t\t\t\t},\n\n\t\t\t\t// Remove all callbacks from the list\n\t\t\t\tempty: function () {\n\t\t\t\t\tif (list) {\n\t\t\t\t\t\tlist = [];\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Disable .fire and .add\n\t\t\t\t// Abort any current/pending executions\n\t\t\t\t// Clear all callbacks and values\n\t\t\t\tdisable: function () {\n\t\t\t\t\tlocked = queue = [];\n\t\t\t\t\tlist = memory = \"\";\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\t\t\t\tdisabled: function () {\n\t\t\t\t\treturn !list;\n\t\t\t\t},\n\n\t\t\t\t// Disable .fire\n\t\t\t\t// Also disable .add unless we have memory (since it would have no effect)\n\t\t\t\t// Abort any pending executions\n\t\t\t\tlock: function () {\n\t\t\t\t\tlocked = queue = [];\n\t\t\t\t\tif (!memory && !firing) {\n\t\t\t\t\t\tlist = memory = \"\";\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\t\t\t\tlocked: function () {\n\t\t\t\t\treturn !!locked;\n\t\t\t\t},\n\n\t\t\t\t// Call all callbacks with the given context and arguments\n\t\t\t\tfireWith: function (context, args) {\n\t\t\t\t\tif (!locked) {\n\t\t\t\t\t\targs = args || [];\n\t\t\t\t\t\targs = [context, args.slice ? args.slice() : args];\n\t\t\t\t\t\tqueue.push(args);\n\t\t\t\t\t\tif (!firing) {\n\t\t\t\t\t\t\tfire();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Call all the callbacks with the given arguments\n\t\t\t\tfire: function () {\n\t\t\t\t\tself.fireWith(this, arguments);\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// To know if the callbacks have already been called at least once\n\t\t\t\tfired: function () {\n\t\t\t\t\treturn !!fired;\n\t\t\t\t}\n\t\t\t};\n\n\t\treturn self;\n\t};\n\n\n\tfunction Identity(v) {\n\t\treturn v;\n\t}\n\tfunction Thrower(ex) {\n\t\tthrow ex;\n\t}\n\n\tfunction adoptValue(value, resolve, reject, noValue) {\n\t\tvar method;\n\n\t\ttry {\n\n\t\t\t// Check for promise aspect first to privilege synchronous behavior\n\t\t\tif (value && isFunction((method = value.promise))) {\n\t\t\t\tmethod.call(value).done(resolve).fail(reject);\n\n\t\t\t\t// Other thenables\n\t\t\t} else if (value && isFunction((method = value.then))) {\n\t\t\t\tmethod.call(value, resolve, reject);\n\n\t\t\t\t// Other non-thenables\n\t\t\t} else {\n\n\t\t\t\t// Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer:\n\t\t\t\t// * false: [ value ].slice( 0 ) => resolve( value )\n\t\t\t\t// * true: [ value ].slice( 1 ) => resolve()\n\t\t\t\tresolve.apply(undefined, [value].slice(noValue));\n\t\t\t}\n\n\t\t\t// For Promises/A+, convert exceptions into rejections\n\t\t\t// Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in\n\t\t\t// Deferred#then to conditionally suppress rejection.\n\t\t} catch (value) {\n\n\t\t\t// Support: Android 4.0 only\n\t\t\t// Strict mode functions invoked without .call/.apply get global-object context\n\t\t\treject.apply(undefined, [value]);\n\t\t}\n\t}\n\n\tjQuery.extend({\n\n\t\tDeferred: function (func) {\n\t\t\tvar tuples = [\n\n\t\t\t\t// action, add listener, callbacks,\n\t\t\t\t// ... .then handlers, argument index, [final state]\n\t\t\t\t[\"notify\", \"progress\", jQuery.Callbacks(\"memory\"),\n\t\t\t\t\tjQuery.Callbacks(\"memory\"), 2],\n\t\t\t\t[\"resolve\", \"done\", jQuery.Callbacks(\"once memory\"),\n\t\t\t\t\tjQuery.Callbacks(\"once memory\"), 0, \"resolved\"],\n\t\t\t\t[\"reject\", \"fail\", jQuery.Callbacks(\"once memory\"),\n\t\t\t\t\tjQuery.Callbacks(\"once memory\"), 1, \"rejected\"]\n\t\t\t],\n\t\t\t\tstate = \"pending\",\n\t\t\t\tpromise = {\n\t\t\t\t\tstate: function () {\n\t\t\t\t\t\treturn state;\n\t\t\t\t\t},\n\t\t\t\t\talways: function () {\n\t\t\t\t\t\tdeferred.done(arguments).fail(arguments);\n\t\t\t\t\t\treturn this;\n\t\t\t\t\t},\n\t\t\t\t\t\"catch\": function (fn) {\n\t\t\t\t\t\treturn promise.then(null, fn);\n\t\t\t\t\t},\n\n\t\t\t\t\t// Keep pipe for back-compat\n\t\t\t\t\tpipe: function ( /* fnDone, fnFail, fnProgress */) {\n\t\t\t\t\t\tvar fns = arguments;\n\n\t\t\t\t\t\treturn jQuery.Deferred(function (newDefer) {\n\t\t\t\t\t\t\tjQuery.each(tuples, function (_i, tuple) {\n\n\t\t\t\t\t\t\t\t// Map tuples (progress, done, fail) to arguments (done, fail, progress)\n\t\t\t\t\t\t\t\tvar fn = isFunction(fns[tuple[4]]) && fns[tuple[4]];\n\n\t\t\t\t\t\t\t\t// deferred.progress(function() { bind to newDefer or newDefer.notify })\n\t\t\t\t\t\t\t\t// deferred.done(function() { bind to newDefer or newDefer.resolve })\n\t\t\t\t\t\t\t\t// deferred.fail(function() { bind to newDefer or newDefer.reject })\n\t\t\t\t\t\t\t\tdeferred[tuple[1]](function () {\n\t\t\t\t\t\t\t\t\tvar returned = fn && fn.apply(this, arguments);\n\t\t\t\t\t\t\t\t\tif (returned && isFunction(returned.promise)) {\n\t\t\t\t\t\t\t\t\t\treturned.promise()\n\t\t\t\t\t\t\t\t\t\t\t.progress(newDefer.notify)\n\t\t\t\t\t\t\t\t\t\t\t.done(newDefer.resolve)\n\t\t\t\t\t\t\t\t\t\t\t.fail(newDefer.reject);\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tnewDefer[tuple[0] + \"With\"](\n\t\t\t\t\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\t\t\t\t\tfn ? [returned] : arguments\n\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tfns = null;\n\t\t\t\t\t\t}).promise();\n\t\t\t\t\t},\n\t\t\t\t\tthen: function (onFulfilled, onRejected, onProgress) {\n\t\t\t\t\t\tvar maxDepth = 0;\n\t\t\t\t\t\tfunction resolve(depth, deferred, handler, special) {\n\t\t\t\t\t\t\treturn function () {\n\t\t\t\t\t\t\t\tvar that = this,\n\t\t\t\t\t\t\t\t\targs = arguments,\n\t\t\t\t\t\t\t\t\tmightThrow = function () {\n\t\t\t\t\t\t\t\t\t\tvar returned, then;\n\n\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.3\n\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-59\n\t\t\t\t\t\t\t\t\t\t// Ignore double-resolution attempts\n\t\t\t\t\t\t\t\t\t\tif (depth < maxDepth) {\n\t\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\treturned = handler.apply(that, args);\n\n\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.1\n\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-48\n\t\t\t\t\t\t\t\t\t\tif (returned === deferred.promise()) {\n\t\t\t\t\t\t\t\t\t\t\tthrow new TypeError(\"Thenable self-resolution\");\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ sections 2.3.3.1, 3.5\n\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-54\n\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-75\n\t\t\t\t\t\t\t\t\t\t// Retrieve `then` only once\n\t\t\t\t\t\t\t\t\t\tthen = returned &&\n\n\t\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.4\n\t\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-64\n\t\t\t\t\t\t\t\t\t\t\t// Only check objects and functions for thenability\n\t\t\t\t\t\t\t\t\t\t\t(typeof returned === \"object\" ||\n\t\t\t\t\t\t\t\t\t\t\t\ttypeof returned === \"function\") &&\n\t\t\t\t\t\t\t\t\t\t\treturned.then;\n\n\t\t\t\t\t\t\t\t\t\t// Handle a returned thenable\n\t\t\t\t\t\t\t\t\t\tif (isFunction(then)) {\n\n\t\t\t\t\t\t\t\t\t\t\t// Special processors (notify) just wait for resolution\n\t\t\t\t\t\t\t\t\t\t\tif (special) {\n\t\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\t\tresolve(maxDepth, deferred, Identity, special),\n\t\t\t\t\t\t\t\t\t\t\t\t\tresolve(maxDepth, deferred, Thrower, special)\n\t\t\t\t\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t\t\t\t\t// Normal processors (resolve) also hook into progress\n\t\t\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t\t\t// ...and disregard older resolution values\n\t\t\t\t\t\t\t\t\t\t\t\tmaxDepth++;\n\n\t\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\t\tresolve(maxDepth, deferred, Identity, special),\n\t\t\t\t\t\t\t\t\t\t\t\t\tresolve(maxDepth, deferred, Thrower, special),\n\t\t\t\t\t\t\t\t\t\t\t\t\tresolve(maxDepth, deferred, Identity,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tdeferred.notifyWith)\n\t\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t// Handle all other returned values\n\t\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\t\tif (handler !== Identity) {\n\t\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\t\targs = [returned];\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t// Process the value(s)\n\t\t\t\t\t\t\t\t\t\t\t// Default process is resolve\n\t\t\t\t\t\t\t\t\t\t\t(special || deferred.resolveWith)(that, args);\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\n\t\t\t\t\t\t\t\t\t// Only normal processors (resolve) catch and reject exceptions\n\t\t\t\t\t\t\t\t\tprocess = special ?\n\t\t\t\t\t\t\t\t\t\tmightThrow :\n\t\t\t\t\t\t\t\t\t\tfunction () {\n\t\t\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\t\t\tmightThrow();\n\t\t\t\t\t\t\t\t\t\t\t} catch (e) {\n\n\t\t\t\t\t\t\t\t\t\t\t\tif (jQuery.Deferred.exceptionHook) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tjQuery.Deferred.exceptionHook(e,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tprocess.error);\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.4.1\n\t\t\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-61\n\t\t\t\t\t\t\t\t\t\t\t\t// Ignore post-resolution exceptions\n\t\t\t\t\t\t\t\t\t\t\t\tif (depth + 1 >= maxDepth) {\n\n\t\t\t\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\t\t\t\tif (handler !== Thrower) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\targs = [e];\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\t\tdeferred.rejectWith(that, args);\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.1\n\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-57\n\t\t\t\t\t\t\t\t// Re-resolve promises immediately to dodge false rejection from\n\t\t\t\t\t\t\t\t// subsequent errors\n\t\t\t\t\t\t\t\tif (depth) {\n\t\t\t\t\t\t\t\t\tprocess();\n\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t// Call an optional hook to record the error, in case of exception\n\t\t\t\t\t\t\t\t\t// since it's otherwise lost when execution goes async\n\t\t\t\t\t\t\t\t\tif (jQuery.Deferred.getErrorHook) {\n\t\t\t\t\t\t\t\t\t\tprocess.error = jQuery.Deferred.getErrorHook();\n\n\t\t\t\t\t\t\t\t\t\t// The deprecated alias of the above. While the name suggests\n\t\t\t\t\t\t\t\t\t\t// returning the stack, not an error instance, jQuery just passes\n\t\t\t\t\t\t\t\t\t\t// it directly to `console.warn` so both will work; an instance\n\t\t\t\t\t\t\t\t\t\t// just better cooperates with source maps.\n\t\t\t\t\t\t\t\t\t} else if (jQuery.Deferred.getStackHook) {\n\t\t\t\t\t\t\t\t\t\tprocess.error = jQuery.Deferred.getStackHook();\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\twindow.setTimeout(process);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn jQuery.Deferred(function (newDefer) {\n\n\t\t\t\t\t\t\t// progress_handlers.add( ... )\n\t\t\t\t\t\t\ttuples[0][3].add(\n\t\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\t\tisFunction(onProgress) ?\n\t\t\t\t\t\t\t\t\t\tonProgress :\n\t\t\t\t\t\t\t\t\t\tIdentity,\n\t\t\t\t\t\t\t\t\tnewDefer.notifyWith\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t// fulfilled_handlers.add( ... )\n\t\t\t\t\t\t\ttuples[1][3].add(\n\t\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\t\tisFunction(onFulfilled) ?\n\t\t\t\t\t\t\t\t\t\tonFulfilled :\n\t\t\t\t\t\t\t\t\t\tIdentity\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t// rejected_handlers.add( ... )\n\t\t\t\t\t\t\ttuples[2][3].add(\n\t\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\t\tisFunction(onRejected) ?\n\t\t\t\t\t\t\t\t\t\tonRejected :\n\t\t\t\t\t\t\t\t\t\tThrower\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}).promise();\n\t\t\t\t\t},\n\n\t\t\t\t\t// Get a promise for this deferred\n\t\t\t\t\t// If obj is provided, the promise aspect is added to the object\n\t\t\t\t\tpromise: function (obj) {\n\t\t\t\t\t\treturn obj != null ? jQuery.extend(obj, promise) : promise;\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tdeferred = {};\n\n\t\t\t// Add list-specific methods\n\t\t\tjQuery.each(tuples, function (i, tuple) {\n\t\t\t\tvar list = tuple[2],\n\t\t\t\t\tstateString = tuple[5];\n\n\t\t\t\t// promise.progress = list.add\n\t\t\t\t// promise.done = list.add\n\t\t\t\t// promise.fail = list.add\n\t\t\t\tpromise[tuple[1]] = list.add;\n\n\t\t\t\t// Handle state\n\t\t\t\tif (stateString) {\n\t\t\t\t\tlist.add(\n\t\t\t\t\t\tfunction () {\n\n\t\t\t\t\t\t\t// state = \"resolved\" (i.e., fulfilled)\n\t\t\t\t\t\t\t// state = \"rejected\"\n\t\t\t\t\t\t\tstate = stateString;\n\t\t\t\t\t\t},\n\n\t\t\t\t\t\t// rejected_callbacks.disable\n\t\t\t\t\t\t// fulfilled_callbacks.disable\n\t\t\t\t\t\ttuples[3 - i][2].disable,\n\n\t\t\t\t\t\t// rejected_handlers.disable\n\t\t\t\t\t\t// fulfilled_handlers.disable\n\t\t\t\t\t\ttuples[3 - i][3].disable,\n\n\t\t\t\t\t\t// progress_callbacks.lock\n\t\t\t\t\t\ttuples[0][2].lock,\n\n\t\t\t\t\t\t// progress_handlers.lock\n\t\t\t\t\t\ttuples[0][3].lock\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\t// progress_handlers.fire\n\t\t\t\t// fulfilled_handlers.fire\n\t\t\t\t// rejected_handlers.fire\n\t\t\t\tlist.add(tuple[3].fire);\n\n\t\t\t\t// deferred.notify = function() { deferred.notifyWith(...) }\n\t\t\t\t// deferred.resolve = function() { deferred.resolveWith(...) }\n\t\t\t\t// deferred.reject = function() { deferred.rejectWith(...) }\n\t\t\t\tdeferred[tuple[0]] = function () {\n\t\t\t\t\tdeferred[tuple[0] + \"With\"](this === deferred ? undefined : this, arguments);\n\t\t\t\t\treturn this;\n\t\t\t\t};\n\n\t\t\t\t// deferred.notifyWith = list.fireWith\n\t\t\t\t// deferred.resolveWith = list.fireWith\n\t\t\t\t// deferred.rejectWith = list.fireWith\n\t\t\t\tdeferred[tuple[0] + \"With\"] = list.fireWith;\n\t\t\t});\n\n\t\t\t// Make the deferred a promise\n\t\t\tpromise.promise(deferred);\n\n\t\t\t// Call given func if any\n\t\t\tif (func) {\n\t\t\t\tfunc.call(deferred, deferred);\n\t\t\t}\n\n\t\t\t// All done!\n\t\t\treturn deferred;\n\t\t},\n\n\t\t// Deferred helper\n\t\twhen: function (singleValue) {\n\t\t\tvar\n\n\t\t\t\t// count of uncompleted subordinates\n\t\t\t\tremaining = arguments.length,\n\n\t\t\t\t// count of unprocessed arguments\n\t\t\t\ti = remaining,\n\n\t\t\t\t// subordinate fulfillment data\n\t\t\t\tresolveContexts = Array(i),\n\t\t\t\tresolveValues = slice.call(arguments),\n\n\t\t\t\t// the primary Deferred\n\t\t\t\tprimary = jQuery.Deferred(),\n\n\t\t\t\t// subordinate callback factory\n\t\t\t\tupdateFunc = function (i) {\n\t\t\t\t\treturn function (value) {\n\t\t\t\t\t\tresolveContexts[i] = this;\n\t\t\t\t\t\tresolveValues[i] = arguments.length > 1 ? slice.call(arguments) : value;\n\t\t\t\t\t\tif (!(--remaining)) {\n\t\t\t\t\t\t\tprimary.resolveWith(resolveContexts, resolveValues);\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t};\n\n\t\t\t// Single- and empty arguments are adopted like Promise.resolve\n\t\t\tif (remaining <= 1) {\n\t\t\t\tadoptValue(singleValue, primary.done(updateFunc(i)).resolve, primary.reject,\n\t\t\t\t\t!remaining);\n\n\t\t\t\t// Use .then() to unwrap secondary thenables (cf. gh-3000)\n\t\t\t\tif (primary.state() === \"pending\" ||\n\t\t\t\t\tisFunction(resolveValues[i] && resolveValues[i].then)) {\n\n\t\t\t\t\treturn primary.then();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Multiple arguments are aggregated like Promise.all array elements\n\t\t\twhile (i--) {\n\t\t\t\tadoptValue(resolveValues[i], updateFunc(i), primary.reject);\n\t\t\t}\n\n\t\t\treturn primary.promise();\n\t\t}\n\t});\n\n\n\t// These usually indicate a programmer mistake during development,\n\t// warn about them ASAP rather than swallowing them by default.\n\tvar rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;\n\n\t// If `jQuery.Deferred.getErrorHook` is defined, `asyncError` is an error\n\t// captured before the async barrier to get the original error cause\n\t// which may otherwise be hidden.\n\tjQuery.Deferred.exceptionHook = function (error, asyncError) {\n\n\t\t// Support: IE 8 - 9 only\n\t\t// Console exists when dev tools are open, which can happen at any time\n\t\tif (window.console && window.console.warn && error && rerrorNames.test(error.name)) {\n\t\t\twindow.console.warn(\"jQuery.Deferred exception: \" + error.message,\n\t\t\t\terror.stack, asyncError);\n\t\t}\n\t};\n\n\n\n\n\tjQuery.readyException = function (error) {\n\t\twindow.setTimeout(function () {\n\t\t\tthrow error;\n\t\t});\n\t};\n\n\n\n\n\t// The deferred used on DOM ready\n\tvar readyList = jQuery.Deferred();\n\n\tjQuery.fn.ready = function (fn) {\n\n\t\treadyList\n\t\t\t.then(fn)\n\n\t\t\t// Wrap jQuery.readyException in a function so that the lookup\n\t\t\t// happens at the time of error handling instead of callback\n\t\t\t// registration.\n\t\t\t.catch(function (error) {\n\t\t\t\tjQuery.readyException(error);\n\t\t\t});\n\n\t\treturn this;\n\t};\n\n\tjQuery.extend({\n\n\t\t// Is the DOM ready to be used? Set to true once it occurs.\n\t\tisReady: false,\n\n\t\t// A counter to track how many items to wait for before\n\t\t// the ready event fires. See trac-6781\n\t\treadyWait: 1,\n\n\t\t// Handle when the DOM is ready\n\t\tready: function (wait) {\n\n\t\t\t// Abort if there are pending holds or we're already ready\n\t\t\tif (wait === true ? --jQuery.readyWait : jQuery.isReady) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Remember that the DOM is ready\n\t\t\tjQuery.isReady = true;\n\n\t\t\t// If a normal DOM Ready event fired, decrement, and wait if need be\n\t\t\tif (wait !== true && --jQuery.readyWait > 0) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If there are functions bound, to execute\n\t\t\treadyList.resolveWith(document, [jQuery]);\n\t\t}\n\t});\n\n\tjQuery.ready.then = readyList.then;\n\n\t// The ready event handler and self cleanup method\n\tfunction completed() {\n\t\tdocument.removeEventListener(\"DOMContentLoaded\", completed);\n\t\twindow.removeEventListener(\"load\", completed);\n\t\tjQuery.ready();\n\t}\n\n\t// Catch cases where $(document).ready() is called\n\t// after the browser event has already occurred.\n\t// Support: IE <=9 - 10 only\n\t// Older IE sometimes signals \"interactive\" too soon\n\tif (document.readyState === \"complete\" ||\n\t\t(document.readyState !== \"loading\" && !document.documentElement.doScroll)) {\n\n\t\t// Handle it asynchronously to allow scripts the opportunity to delay ready\n\t\twindow.setTimeout(jQuery.ready);\n\n\t} else {\n\n\t\t// Use the handy event callback\n\t\tdocument.addEventListener(\"DOMContentLoaded\", completed);\n\n\t\t// A fallback to window.onload, that will always work\n\t\twindow.addEventListener(\"load\", completed);\n\t}\n\n\n\n\n\t// Multifunctional method to get and set values of a collection\n\t// The value/s can optionally be executed if it's a function\n\tvar access = function (elems, fn, key, value, chainable, emptyGet, raw) {\n\t\tvar i = 0,\n\t\t\tlen = elems.length,\n\t\t\tbulk = key == null;\n\n\t\t// Sets many values\n\t\tif (toType(key) === \"object\") {\n\t\t\tchainable = true;\n\t\t\tfor (i in key) {\n\t\t\t\taccess(elems, fn, i, key[i], true, emptyGet, raw);\n\t\t\t}\n\n\t\t\t// Sets one value\n\t\t} else if (value !== undefined) {\n\t\t\tchainable = true;\n\n\t\t\tif (!isFunction(value)) {\n\t\t\t\traw = true;\n\t\t\t}\n\n\t\t\tif (bulk) {\n\n\t\t\t\t// Bulk operations run against the entire set\n\t\t\t\tif (raw) {\n\t\t\t\t\tfn.call(elems, value);\n\t\t\t\t\tfn = null;\n\n\t\t\t\t\t// ...except when executing function values\n\t\t\t\t} else {\n\t\t\t\t\tbulk = fn;\n\t\t\t\t\tfn = function (elem, _key, value) {\n\t\t\t\t\t\treturn bulk.call(jQuery(elem), value);\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (fn) {\n\t\t\t\tfor (; i < len; i++) {\n\t\t\t\t\tfn(\n\t\t\t\t\t\telems[i], key, raw ?\n\t\t\t\t\t\tvalue :\n\t\t\t\t\t\tvalue.call(elems[i], i, fn(elems[i], key))\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (chainable) {\n\t\t\treturn elems;\n\t\t}\n\n\t\t// Gets\n\t\tif (bulk) {\n\t\t\treturn fn.call(elems);\n\t\t}\n\n\t\treturn len ? fn(elems[0], key) : emptyGet;\n\t};\n\n\n\t// Matches dashed string for camelizing\n\tvar rmsPrefix = /^-ms-/,\n\t\trdashAlpha = /-([a-z])/g;\n\n\t// Used by camelCase as callback to replace()\n\tfunction fcamelCase(_all, letter) {\n\t\treturn letter.toUpperCase();\n\t}\n\n\t// Convert dashed to camelCase; used by the css and data modules\n\t// Support: IE <=9 - 11, Edge 12 - 15\n\t// Microsoft forgot to hump their vendor prefix (trac-9572)\n\tfunction camelCase(string) {\n\t\treturn string.replace(rmsPrefix, \"ms-\").replace(rdashAlpha, fcamelCase);\n\t}\n\tvar acceptData = function (owner) {\n\n\t\t// Accepts only:\n\t\t//  - Node\n\t\t//    - Node.ELEMENT_NODE\n\t\t//    - Node.DOCUMENT_NODE\n\t\t//  - Object\n\t\t//    - Any\n\t\treturn owner.nodeType === 1 || owner.nodeType === 9 || !(+owner.nodeType);\n\t};\n\n\n\n\n\tfunction Data() {\n\t\tthis.expando = jQuery.expando + Data.uid++;\n\t}\n\n\tData.uid = 1;\n\n\tData.prototype = {\n\n\t\tcache: function (owner) {\n\n\t\t\t// Check if the owner object already has a cache\n\t\t\tvar value = owner[this.expando];\n\n\t\t\t// If not, create one\n\t\t\tif (!value) {\n\t\t\t\tvalue = {};\n\n\t\t\t\t// We can accept data for non-element nodes in modern browsers,\n\t\t\t\t// but we should not, see trac-8335.\n\t\t\t\t// Always return an empty object.\n\t\t\t\tif (acceptData(owner)) {\n\n\t\t\t\t\t// If it is a node unlikely to be stringify-ed or looped over\n\t\t\t\t\t// use plain assignment\n\t\t\t\t\tif (owner.nodeType) {\n\t\t\t\t\t\towner[this.expando] = value;\n\n\t\t\t\t\t\t// Otherwise secure it in a non-enumerable property\n\t\t\t\t\t\t// configurable must be true to allow the property to be\n\t\t\t\t\t\t// deleted when data is removed\n\t\t\t\t\t} else {\n\t\t\t\t\t\tObject.defineProperty(owner, this.expando, {\n\t\t\t\t\t\t\tvalue: value,\n\t\t\t\t\t\t\tconfigurable: true\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn value;\n\t\t},\n\t\tset: function (owner, data, value) {\n\t\t\tvar prop,\n\t\t\t\tcache = this.cache(owner);\n\n\t\t\t// Handle: [ owner, key, value ] args\n\t\t\t// Always use camelCase key (gh-2257)\n\t\t\tif (typeof data === \"string\") {\n\t\t\t\tcache[camelCase(data)] = value;\n\n\t\t\t\t// Handle: [ owner, { properties } ] args\n\t\t\t} else {\n\n\t\t\t\t// Copy the properties one-by-one to the cache object\n\t\t\t\tfor (prop in data) {\n\t\t\t\t\tcache[camelCase(prop)] = data[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn cache;\n\t\t},\n\t\tget: function (owner, key) {\n\t\t\treturn key === undefined ?\n\t\t\t\tthis.cache(owner) :\n\n\t\t\t\t// Always use camelCase key (gh-2257)\n\t\t\t\towner[this.expando] && owner[this.expando][camelCase(key)];\n\t\t},\n\t\taccess: function (owner, key, value) {\n\n\t\t\t// In cases where either:\n\t\t\t//\n\t\t\t//   1. No key was specified\n\t\t\t//   2. A string key was specified, but no value provided\n\t\t\t//\n\t\t\t// Take the \"read\" path and allow the get method to determine\n\t\t\t// which value to return, respectively either:\n\t\t\t//\n\t\t\t//   1. The entire cache object\n\t\t\t//   2. The data stored at the key\n\t\t\t//\n\t\t\tif (key === undefined ||\n\t\t\t\t((key && typeof key === \"string\") && value === undefined)) {\n\n\t\t\t\treturn this.get(owner, key);\n\t\t\t}\n\n\t\t\t// When the key is not a string, or both a key and value\n\t\t\t// are specified, set or extend (existing objects) with either:\n\t\t\t//\n\t\t\t//   1. An object of properties\n\t\t\t//   2. A key and value\n\t\t\t//\n\t\t\tthis.set(owner, key, value);\n\n\t\t\t// Since the \"set\" path can have two possible entry points\n\t\t\t// return the expected data based on which path was taken[*]\n\t\t\treturn value !== undefined ? value : key;\n\t\t},\n\t\tremove: function (owner, key) {\n\t\t\tvar i,\n\t\t\t\tcache = owner[this.expando];\n\n\t\t\tif (cache === undefined) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (key !== undefined) {\n\n\t\t\t\t// Support array or space separated string of keys\n\t\t\t\tif (Array.isArray(key)) {\n\n\t\t\t\t\t// If key is an array of keys...\n\t\t\t\t\t// We always set camelCase keys, so remove that.\n\t\t\t\t\tkey = key.map(camelCase);\n\t\t\t\t} else {\n\t\t\t\t\tkey = camelCase(key);\n\n\t\t\t\t\t// If a key with the spaces exists, use it.\n\t\t\t\t\t// Otherwise, create an array by matching non-whitespace\n\t\t\t\t\tkey = key in cache ?\n\t\t\t\t\t\t[key] :\n\t\t\t\t\t\t(key.match(rnothtmlwhite) || []);\n\t\t\t\t}\n\n\t\t\t\ti = key.length;\n\n\t\t\t\twhile (i--) {\n\t\t\t\t\tdelete cache[key[i]];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove the expando if there's no more data\n\t\t\tif (key === undefined || jQuery.isEmptyObject(cache)) {\n\n\t\t\t\t// Support: Chrome <=35 - 45\n\t\t\t\t// Webkit & Blink performance suffers when deleting properties\n\t\t\t\t// from DOM nodes, so set to undefined instead\n\t\t\t\t// https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted)\n\t\t\t\tif (owner.nodeType) {\n\t\t\t\t\towner[this.expando] = undefined;\n\t\t\t\t} else {\n\t\t\t\t\tdelete owner[this.expando];\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\thasData: function (owner) {\n\t\t\tvar cache = owner[this.expando];\n\t\t\treturn cache !== undefined && !jQuery.isEmptyObject(cache);\n\t\t}\n\t};\n\tvar dataPriv = new Data();\n\n\tvar dataUser = new Data();\n\n\n\n\t//\tImplementation Summary\n\t//\n\t//\t1. Enforce API surface and semantic compatibility with 1.9.x branch\n\t//\t2. Improve the module's maintainability by reducing the storage\n\t//\t\tpaths to a single mechanism.\n\t//\t3. Use the same single mechanism to support \"private\" and \"user\" data.\n\t//\t4. _Never_ expose \"private\" data to user code (TODO: Drop _data, _removeData)\n\t//\t5. Avoid exposing implementation details on user objects (eg. expando properties)\n\t//\t6. Provide a clear path for implementation upgrade to WeakMap in 2014\n\n\tvar rbrace = /^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,\n\t\trmultiDash = /[A-Z]/g;\n\n\tfunction getData(data) {\n\t\tif (data === \"true\") {\n\t\t\treturn true;\n\t\t}\n\n\t\tif (data === \"false\") {\n\t\t\treturn false;\n\t\t}\n\n\t\tif (data === \"null\") {\n\t\t\treturn null;\n\t\t}\n\n\t\t// Only convert to a number if it doesn't change the string\n\t\tif (data === +data + \"\") {\n\t\t\treturn +data;\n\t\t}\n\n\t\tif (rbrace.test(data)) {\n\t\t\treturn JSON.parse(data);\n\t\t}\n\n\t\treturn data;\n\t}\n\n\tfunction dataAttr(elem, key, data) {\n\t\tvar name;\n\n\t\t// If nothing was found internally, try to fetch any\n\t\t// data from the HTML5 data-* attribute\n\t\tif (data === undefined && elem.nodeType === 1) {\n\t\t\tname = \"data-\" + key.replace(rmultiDash, \"-$&\").toLowerCase();\n\t\t\tdata = elem.getAttribute(name);\n\n\t\t\tif (typeof data === \"string\") {\n\t\t\t\ttry {\n\t\t\t\t\tdata = getData(data);\n\t\t\t\t} catch (e) { }\n\n\t\t\t\t// Make sure we set the data so it isn't changed later\n\t\t\t\tdataUser.set(elem, key, data);\n\t\t\t} else {\n\t\t\t\tdata = undefined;\n\t\t\t}\n\t\t}\n\t\treturn data;\n\t}\n\n\tjQuery.extend({\n\t\thasData: function (elem) {\n\t\t\treturn dataUser.hasData(elem) || dataPriv.hasData(elem);\n\t\t},\n\n\t\tdata: function (elem, name, data) {\n\t\t\treturn dataUser.access(elem, name, data);\n\t\t},\n\n\t\tremoveData: function (elem, name) {\n\t\t\tdataUser.remove(elem, name);\n\t\t},\n\n\t\t// TODO: Now that all calls to _data and _removeData have been replaced\n\t\t// with direct calls to dataPriv methods, these can be deprecated.\n\t\t_data: function (elem, name, data) {\n\t\t\treturn dataPriv.access(elem, name, data);\n\t\t},\n\n\t\t_removeData: function (elem, name) {\n\t\t\tdataPriv.remove(elem, name);\n\t\t}\n\t});\n\n\tjQuery.fn.extend({\n\t\tdata: function (key, value) {\n\t\t\tvar i, name, data,\n\t\t\t\telem = this[0],\n\t\t\t\tattrs = elem && elem.attributes;\n\n\t\t\t// Gets all values\n\t\t\tif (key === undefined) {\n\t\t\t\tif (this.length) {\n\t\t\t\t\tdata = dataUser.get(elem);\n\n\t\t\t\t\tif (elem.nodeType === 1 && !dataPriv.get(elem, \"hasDataAttrs\")) {\n\t\t\t\t\t\ti = attrs.length;\n\t\t\t\t\t\twhile (i--) {\n\n\t\t\t\t\t\t\t// Support: IE 11 only\n\t\t\t\t\t\t\t// The attrs elements can be null (trac-14894)\n\t\t\t\t\t\t\tif (attrs[i]) {\n\t\t\t\t\t\t\t\tname = attrs[i].name;\n\t\t\t\t\t\t\t\tif (name.indexOf(\"data-\") === 0) {\n\t\t\t\t\t\t\t\t\tname = camelCase(name.slice(5));\n\t\t\t\t\t\t\t\t\tdataAttr(elem, name, data[name]);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdataPriv.set(elem, \"hasDataAttrs\", true);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn data;\n\t\t\t}\n\n\t\t\t// Sets multiple values\n\t\t\tif (typeof key === \"object\") {\n\t\t\t\treturn this.each(function () {\n\t\t\t\t\tdataUser.set(this, key);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn access(this, function (value) {\n\t\t\t\tvar data;\n\n\t\t\t\t// The calling jQuery object (element matches) is not empty\n\t\t\t\t// (and therefore has an element appears at this[ 0 ]) and the\n\t\t\t\t// `value` parameter was not undefined. An empty jQuery object\n\t\t\t\t// will result in `undefined` for elem = this[ 0 ] which will\n\t\t\t\t// throw an exception if an attempt to read a data cache is made.\n\t\t\t\tif (elem && value === undefined) {\n\n\t\t\t\t\t// Attempt to get data from the cache\n\t\t\t\t\t// The key will always be camelCased in Data\n\t\t\t\t\tdata = dataUser.get(elem, key);\n\t\t\t\t\tif (data !== undefined) {\n\t\t\t\t\t\treturn data;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Attempt to \"discover\" the data in\n\t\t\t\t\t// HTML5 custom data-* attrs\n\t\t\t\t\tdata = dataAttr(elem, key);\n\t\t\t\t\tif (data !== undefined) {\n\t\t\t\t\t\treturn data;\n\t\t\t\t\t}\n\n\t\t\t\t\t// We tried really hard, but the data doesn't exist.\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Set the data...\n\t\t\t\tthis.each(function () {\n\n\t\t\t\t\t// We always store the camelCased key\n\t\t\t\t\tdataUser.set(this, key, value);\n\t\t\t\t});\n\t\t\t}, null, value, arguments.length > 1, null, true);\n\t\t},\n\n\t\tremoveData: function (key) {\n\t\t\treturn this.each(function () {\n\t\t\t\tdataUser.remove(this, key);\n\t\t\t});\n\t\t}\n\t});\n\n\n\tjQuery.extend({\n\t\tqueue: function (elem, type, data) {\n\t\t\tvar queue;\n\n\t\t\tif (elem) {\n\t\t\t\ttype = (type || \"fx\") + \"queue\";\n\t\t\t\tqueue = dataPriv.get(elem, type);\n\n\t\t\t\t// Speed up dequeue by getting out quickly if this is just a lookup\n\t\t\t\tif (data) {\n\t\t\t\t\tif (!queue || Array.isArray(data)) {\n\t\t\t\t\t\tqueue = dataPriv.access(elem, type, jQuery.makeArray(data));\n\t\t\t\t\t} else {\n\t\t\t\t\t\tqueue.push(data);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn queue || [];\n\t\t\t}\n\t\t},\n\n\t\tdequeue: function (elem, type) {\n\t\t\ttype = type || \"fx\";\n\n\t\t\tvar queue = jQuery.queue(elem, type),\n\t\t\t\tstartLength = queue.length,\n\t\t\t\tfn = queue.shift(),\n\t\t\t\thooks = jQuery._queueHooks(elem, type),\n\t\t\t\tnext = function () {\n\t\t\t\t\tjQuery.dequeue(elem, type);\n\t\t\t\t};\n\n\t\t\t// If the fx queue is dequeued, always remove the progress sentinel\n\t\t\tif (fn === \"inprogress\") {\n\t\t\t\tfn = queue.shift();\n\t\t\t\tstartLength--;\n\t\t\t}\n\n\t\t\tif (fn) {\n\n\t\t\t\t// Add a progress sentinel to prevent the fx queue from being\n\t\t\t\t// automatically dequeued\n\t\t\t\tif (type === \"fx\") {\n\t\t\t\t\tqueue.unshift(\"inprogress\");\n\t\t\t\t}\n\n\t\t\t\t// Clear up the last queue stop function\n\t\t\t\tdelete hooks.stop;\n\t\t\t\tfn.call(elem, next, hooks);\n\t\t\t}\n\n\t\t\tif (!startLength && hooks) {\n\t\t\t\thooks.empty.fire();\n\t\t\t}\n\t\t},\n\n\t\t// Not public - generate a queueHooks object, or return the current one\n\t\t_queueHooks: function (elem, type) {\n\t\t\tvar key = type + \"queueHooks\";\n\t\t\treturn dataPriv.get(elem, key) || dataPriv.access(elem, key, {\n\t\t\t\tempty: jQuery.Callbacks(\"once memory\").add(function () {\n\t\t\t\t\tdataPriv.remove(elem, [type + \"queue\", key]);\n\t\t\t\t})\n\t\t\t});\n\t\t}\n\t});\n\n\tjQuery.fn.extend({\n\t\tqueue: function (type, data) {\n\t\t\tvar setter = 2;\n\n\t\t\tif (typeof type !== \"string\") {\n\t\t\t\tdata = type;\n\t\t\t\ttype = \"fx\";\n\t\t\t\tsetter--;\n\t\t\t}\n\n\t\t\tif (arguments.length < setter) {\n\t\t\t\treturn jQuery.queue(this[0], type);\n\t\t\t}\n\n\t\t\treturn data === undefined ?\n\t\t\t\tthis :\n\t\t\t\tthis.each(function () {\n\t\t\t\t\tvar queue = jQuery.queue(this, type, data);\n\n\t\t\t\t\t// Ensure a hooks for this queue\n\t\t\t\t\tjQuery._queueHooks(this, type);\n\n\t\t\t\t\tif (type === \"fx\" && queue[0] !== \"inprogress\") {\n\t\t\t\t\t\tjQuery.dequeue(this, type);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t},\n\t\tdequeue: function (type) {\n\t\t\treturn this.each(function () {\n\t\t\t\tjQuery.dequeue(this, type);\n\t\t\t});\n\t\t},\n\t\tclearQueue: function (type) {\n\t\t\treturn this.queue(type || \"fx\", []);\n\t\t},\n\n\t\t// Get a promise resolved when queues of a certain type\n\t\t// are emptied (fx is the type by default)\n\t\tpromise: function (type, obj) {\n\t\t\tvar tmp,\n\t\t\t\tcount = 1,\n\t\t\t\tdefer = jQuery.Deferred(),\n\t\t\t\telements = this,\n\t\t\t\ti = this.length,\n\t\t\t\tresolve = function () {\n\t\t\t\t\tif (!(--count)) {\n\t\t\t\t\t\tdefer.resolveWith(elements, [elements]);\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\tif (typeof type !== \"string\") {\n\t\t\t\tobj = type;\n\t\t\t\ttype = undefined;\n\t\t\t}\n\t\t\ttype = type || \"fx\";\n\n\t\t\twhile (i--) {\n\t\t\t\ttmp = dataPriv.get(elements[i], type + \"queueHooks\");\n\t\t\t\tif (tmp && tmp.empty) {\n\t\t\t\t\tcount++;\n\t\t\t\t\ttmp.empty.add(resolve);\n\t\t\t\t}\n\t\t\t}\n\t\t\tresolve();\n\t\t\treturn defer.promise(obj);\n\t\t}\n\t});\n\tvar pnum = (/[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/).source;\n\n\tvar rcssNum = new RegExp(\"^(?:([+-])=|)(\" + pnum + \")([a-z%]*)$\", \"i\");\n\n\n\tvar cssExpand = [\"Top\", \"Right\", \"Bottom\", \"Left\"];\n\n\tvar documentElement = document.documentElement;\n\n\n\n\tvar isAttached = function (elem) {\n\t\treturn jQuery.contains(elem.ownerDocument, elem);\n\t},\n\t\tcomposed = { composed: true };\n\n\t// Support: IE 9 - 11+, Edge 12 - 18+, iOS 10.0 - 10.2 only\n\t// Check attachment across shadow DOM boundaries when possible (gh-3504)\n\t// Support: iOS 10.0-10.2 only\n\t// Early iOS 10 versions support `attachShadow` but not `getRootNode`,\n\t// leading to errors. We need to check for `getRootNode`.\n\tif (documentElement.getRootNode) {\n\t\tisAttached = function (elem) {\n\t\t\treturn jQuery.contains(elem.ownerDocument, elem) ||\n\t\t\t\telem.getRootNode(composed) === elem.ownerDocument;\n\t\t};\n\t}\n\tvar isHiddenWithinTree = function (elem, el) {\n\n\t\t// isHiddenWithinTree might be called from jQuery#filter function;\n\t\t// in that case, element will be second argument\n\t\telem = el || elem;\n\n\t\t// Inline style trumps all\n\t\treturn elem.style.display === \"none\" ||\n\t\t\telem.style.display === \"\" &&\n\n\t\t\t// Otherwise, check computed style\n\t\t\t// Support: Firefox <=43 - 45\n\t\t\t// Disconnected elements can have computed display: none, so first confirm that elem is\n\t\t\t// in the document.\n\t\t\tisAttached(elem) &&\n\n\t\t\tjQuery.css(elem, \"display\") === \"none\";\n\t};\n\n\n\n\tfunction adjustCSS(elem, prop, valueParts, tween) {\n\t\tvar adjusted, scale,\n\t\t\tmaxIterations = 20,\n\t\t\tcurrentValue = tween ?\n\t\t\t\tfunction () {\n\t\t\t\t\treturn tween.cur();\n\t\t\t\t} :\n\t\t\t\tfunction () {\n\t\t\t\t\treturn jQuery.css(elem, prop, \"\");\n\t\t\t\t},\n\t\t\tinitial = currentValue(),\n\t\t\tunit = valueParts && valueParts[3] || (jQuery.cssNumber[prop] ? \"\" : \"px\"),\n\n\t\t\t// Starting value computation is required for potential unit mismatches\n\t\t\tinitialInUnit = elem.nodeType &&\n\t\t\t\t(jQuery.cssNumber[prop] || unit !== \"px\" && +initial) &&\n\t\t\t\trcssNum.exec(jQuery.css(elem, prop));\n\n\t\tif (initialInUnit && initialInUnit[3] !== unit) {\n\n\t\t\t// Support: Firefox <=54\n\t\t\t// Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144)\n\t\t\tinitial = initial / 2;\n\n\t\t\t// Trust units reported by jQuery.css\n\t\t\tunit = unit || initialInUnit[3];\n\n\t\t\t// Iteratively approximate from a nonzero starting point\n\t\t\tinitialInUnit = +initial || 1;\n\n\t\t\twhile (maxIterations--) {\n\n\t\t\t\t// Evaluate and update our best guess (doubling guesses that zero out).\n\t\t\t\t// Finish if the scale equals or crosses 1 (making the old*new product non-positive).\n\t\t\t\tjQuery.style(elem, prop, initialInUnit + unit);\n\t\t\t\tif ((1 - scale) * (1 - (scale = currentValue() / initial || 0.5)) <= 0) {\n\t\t\t\t\tmaxIterations = 0;\n\t\t\t\t}\n\t\t\t\tinitialInUnit = initialInUnit / scale;\n\n\t\t\t}\n\n\t\t\tinitialInUnit = initialInUnit * 2;\n\t\t\tjQuery.style(elem, prop, initialInUnit + unit);\n\n\t\t\t// Make sure we update the tween properties later on\n\t\t\tvalueParts = valueParts || [];\n\t\t}\n\n\t\tif (valueParts) {\n\t\t\tinitialInUnit = +initialInUnit || +initial || 0;\n\n\t\t\t// Apply relative offset (+=/-=) if specified\n\t\t\tadjusted = valueParts[1] ?\n\t\t\t\tinitialInUnit + (valueParts[1] + 1) * valueParts[2] :\n\t\t\t\t+valueParts[2];\n\t\t\tif (tween) {\n\t\t\t\ttween.unit = unit;\n\t\t\t\ttween.start = initialInUnit;\n\t\t\t\ttween.end = adjusted;\n\t\t\t}\n\t\t}\n\t\treturn adjusted;\n\t}\n\n\n\tvar defaultDisplayMap = {};\n\n\tfunction getDefaultDisplay(elem) {\n\t\tvar temp,\n\t\t\tdoc = elem.ownerDocument,\n\t\t\tnodeName = elem.nodeName,\n\t\t\tdisplay = defaultDisplayMap[nodeName];\n\n\t\tif (display) {\n\t\t\treturn display;\n\t\t}\n\n\t\ttemp = doc.body.appendChild(doc.createElement(nodeName));\n\t\tdisplay = jQuery.css(temp, \"display\");\n\n\t\ttemp.parentNode.removeChild(temp);\n\n\t\tif (display === \"none\") {\n\t\t\tdisplay = \"block\";\n\t\t}\n\t\tdefaultDisplayMap[nodeName] = display;\n\n\t\treturn display;\n\t}\n\n\tfunction showHide(elements, show) {\n\t\tvar display, elem,\n\t\t\tvalues = [],\n\t\t\tindex = 0,\n\t\t\tlength = elements.length;\n\n\t\t// Determine new display value for elements that need to change\n\t\tfor (; index < length; index++) {\n\t\t\telem = elements[index];\n\t\t\tif (!elem.style) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tdisplay = elem.style.display;\n\t\t\tif (show) {\n\n\t\t\t\t// Since we force visibility upon cascade-hidden elements, an immediate (and slow)\n\t\t\t\t// check is required in this first loop unless we have a nonempty display value (either\n\t\t\t\t// inline or about-to-be-restored)\n\t\t\t\tif (display === \"none\") {\n\t\t\t\t\tvalues[index] = dataPriv.get(elem, \"display\") || null;\n\t\t\t\t\tif (!values[index]) {\n\t\t\t\t\t\telem.style.display = \"\";\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (elem.style.display === \"\" && isHiddenWithinTree(elem)) {\n\t\t\t\t\tvalues[index] = getDefaultDisplay(elem);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (display !== \"none\") {\n\t\t\t\t\tvalues[index] = \"none\";\n\n\t\t\t\t\t// Remember what we're overwriting\n\t\t\t\t\tdataPriv.set(elem, \"display\", display);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Set the display of the elements in a second loop to avoid constant reflow\n\t\tfor (index = 0; index < length; index++) {\n\t\t\tif (values[index] != null) {\n\t\t\t\telements[index].style.display = values[index];\n\t\t\t}\n\t\t}\n\n\t\treturn elements;\n\t}\n\n\tjQuery.fn.extend({\n\t\tshow: function () {\n\t\t\treturn showHide(this, true);\n\t\t},\n\t\thide: function () {\n\t\t\treturn showHide(this);\n\t\t},\n\t\ttoggle: function (state) {\n\t\t\tif (typeof state === \"boolean\") {\n\t\t\t\treturn state ? this.show() : this.hide();\n\t\t\t}\n\n\t\t\treturn this.each(function () {\n\t\t\t\tif (isHiddenWithinTree(this)) {\n\t\t\t\t\tjQuery(this).show();\n\t\t\t\t} else {\n\t\t\t\t\tjQuery(this).hide();\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t});\n\tvar rcheckableType = (/^(?:checkbox|radio)$/i);\n\n\tvar rtagName = (/<([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]*)/i);\n\n\tvar rscriptType = (/^$|^module$|\\/(?:java|ecma)script/i);\n\n\n\n\t(function () {\n\t\tvar fragment = document.createDocumentFragment(),\n\t\t\tdiv = fragment.appendChild(document.createElement(\"div\")),\n\t\t\tinput = document.createElement(\"input\");\n\n\t\t// Support: Android 4.0 - 4.3 only\n\t\t// Check state lost if the name is set (trac-11217)\n\t\t// Support: Windows Web Apps (WWA)\n\t\t// `name` and `type` must use .setAttribute for WWA (trac-14901)\n\t\tinput.setAttribute(\"type\", \"radio\");\n\t\tinput.setAttribute(\"checked\", \"checked\");\n\t\tinput.setAttribute(\"name\", \"t\");\n\n\t\tdiv.appendChild(input);\n\n\t\t// Support: Android <=4.1 only\n\t\t// Older WebKit doesn't clone checked state correctly in fragments\n\t\tsupport.checkClone = div.cloneNode(true).cloneNode(true).lastChild.checked;\n\n\t\t// Support: IE <=11 only\n\t\t// Make sure textarea (and checkbox) defaultValue is properly cloned\n\t\tdiv.innerHTML = \"<textarea>x</textarea>\";\n\t\tsupport.noCloneChecked = !!div.cloneNode(true).lastChild.defaultValue;\n\n\t\t// Support: IE <=9 only\n\t\t// IE <=9 replaces <option> tags with their contents when inserted outside of\n\t\t// the select element.\n\t\tdiv.innerHTML = \"<option></option>\";\n\t\tsupport.option = !!div.lastChild;\n\t})();\n\n\n\t// We have to close these tags to support XHTML (trac-13200)\n\tvar wrapMap = {\n\n\t\t// XHTML parsers do not magically insert elements in the\n\t\t// same way that tag soup parsers do. So we cannot shorten\n\t\t// this by omitting <tbody> or other required elements.\n\t\tthead: [1, \"<table>\", \"</table>\"],\n\t\tcol: [2, \"<table><colgroup>\", \"</colgroup></table>\"],\n\t\ttr: [2, \"<table><tbody>\", \"</tbody></table>\"],\n\t\ttd: [3, \"<table><tbody><tr>\", \"</tr></tbody></table>\"],\n\n\t\t_default: [0, \"\", \"\"]\n\t};\n\n\twrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;\n\twrapMap.th = wrapMap.td;\n\n\t// Support: IE <=9 only\n\tif (!support.option) {\n\t\twrapMap.optgroup = wrapMap.option = [1, \"<select multiple='multiple'>\", \"</select>\"];\n\t}\n\n\n\tfunction getAll(context, tag) {\n\n\t\t// Support: IE <=9 - 11 only\n\t\t// Use typeof to avoid zero-argument method invocation on host objects (trac-15151)\n\t\tvar ret;\n\n\t\tif (typeof context.getElementsByTagName !== \"undefined\") {\n\t\t\tret = context.getElementsByTagName(tag || \"*\");\n\n\t\t} else if (typeof context.querySelectorAll !== \"undefined\") {\n\t\t\tret = context.querySelectorAll(tag || \"*\");\n\n\t\t} else {\n\t\t\tret = [];\n\t\t}\n\n\t\tif (tag === undefined || tag && nodeName(context, tag)) {\n\t\t\treturn jQuery.merge([context], ret);\n\t\t}\n\n\t\treturn ret;\n\t}\n\n\n\t// Mark scripts as having already been evaluated\n\tfunction setGlobalEval(elems, refElements) {\n\t\tvar i = 0,\n\t\t\tl = elems.length;\n\n\t\tfor (; i < l; i++) {\n\t\t\tdataPriv.set(\n\t\t\t\telems[i],\n\t\t\t\t\"globalEval\",\n\t\t\t\t!refElements || dataPriv.get(refElements[i], \"globalEval\")\n\t\t\t);\n\t\t}\n\t}\n\n\n\tvar rhtml = /<|&#?\\w+;/;\n\n\tfunction buildFragment(elems, context, scripts, selection, ignored) {\n\t\tvar elem, tmp, tag, wrap, attached, j,\n\t\t\tfragment = context.createDocumentFragment(),\n\t\t\tnodes = [],\n\t\t\ti = 0,\n\t\t\tl = elems.length;\n\n\t\tfor (; i < l; i++) {\n\t\t\telem = elems[i];\n\n\t\t\tif (elem || elem === 0) {\n\n\t\t\t\t// Add nodes directly\n\t\t\t\tif (toType(elem) === \"object\") {\n\n\t\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\t\tjQuery.merge(nodes, elem.nodeType ? [elem] : elem);\n\n\t\t\t\t\t// Convert non-html into a text node\n\t\t\t\t} else if (!rhtml.test(elem)) {\n\t\t\t\t\tnodes.push(context.createTextNode(elem));\n\n\t\t\t\t\t// Convert html into DOM nodes\n\t\t\t\t} else {\n\t\t\t\t\ttmp = tmp || fragment.appendChild(context.createElement(\"div\"));\n\n\t\t\t\t\t// Deserialize a standard representation\n\t\t\t\t\ttag = (rtagName.exec(elem) || [\"\", \"\"])[1].toLowerCase();\n\t\t\t\t\twrap = wrapMap[tag] || wrapMap._default;\n\t\t\t\t\ttmp.innerHTML = wrap[1] + jQuery.htmlPrefilter(elem) + wrap[2];\n\n\t\t\t\t\t// Descend through wrappers to the right content\n\t\t\t\t\tj = wrap[0];\n\t\t\t\t\twhile (j--) {\n\t\t\t\t\t\ttmp = tmp.lastChild;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\t\tjQuery.merge(nodes, tmp.childNodes);\n\n\t\t\t\t\t// Remember the top-level container\n\t\t\t\t\ttmp = fragment.firstChild;\n\n\t\t\t\t\t// Ensure the created nodes are orphaned (trac-12392)\n\t\t\t\t\ttmp.textContent = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Remove wrapper from fragment\n\t\tfragment.textContent = \"\";\n\n\t\ti = 0;\n\t\twhile ((elem = nodes[i++])) {\n\n\t\t\t// Skip elements already in the context collection (trac-4087)\n\t\t\tif (selection && jQuery.inArray(elem, selection) > -1) {\n\t\t\t\tif (ignored) {\n\t\t\t\t\tignored.push(elem);\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tattached = isAttached(elem);\n\n\t\t\t// Append to fragment\n\t\t\ttmp = getAll(fragment.appendChild(elem), \"script\");\n\n\t\t\t// Preserve script evaluation history\n\t\t\tif (attached) {\n\t\t\t\tsetGlobalEval(tmp);\n\t\t\t}\n\n\t\t\t// Capture executables\n\t\t\tif (scripts) {\n\t\t\t\tj = 0;\n\t\t\t\twhile ((elem = tmp[j++])) {\n\t\t\t\t\tif (rscriptType.test(elem.type || \"\")) {\n\t\t\t\t\t\tscripts.push(elem);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn fragment;\n\t}\n\n\n\tvar rtypenamespace = /^([^.]*)(?:\\.(.+)|)/;\n\n\tfunction returnTrue() {\n\t\treturn true;\n\t}\n\n\tfunction returnFalse() {\n\t\treturn false;\n\t}\n\n\tfunction on(elem, types, selector, data, fn, one) {\n\t\tvar origFn, type;\n\n\t\t// Types can be a map of types/handlers\n\t\tif (typeof types === \"object\") {\n\n\t\t\t// ( types-Object, selector, data )\n\t\t\tif (typeof selector !== \"string\") {\n\n\t\t\t\t// ( types-Object, data )\n\t\t\t\tdata = data || selector;\n\t\t\t\tselector = undefined;\n\t\t\t}\n\t\t\tfor (type in types) {\n\t\t\t\ton(elem, type, selector, data, types[type], one);\n\t\t\t}\n\t\t\treturn elem;\n\t\t}\n\n\t\tif (data == null && fn == null) {\n\n\t\t\t// ( types, fn )\n\t\t\tfn = selector;\n\t\t\tdata = selector = undefined;\n\t\t} else if (fn == null) {\n\t\t\tif (typeof selector === \"string\") {\n\n\t\t\t\t// ( types, selector, fn )\n\t\t\t\tfn = data;\n\t\t\t\tdata = undefined;\n\t\t\t} else {\n\n\t\t\t\t// ( types, data, fn )\n\t\t\t\tfn = data;\n\t\t\t\tdata = selector;\n\t\t\t\tselector = undefined;\n\t\t\t}\n\t\t}\n\t\tif (fn === false) {\n\t\t\tfn = returnFalse;\n\t\t} else if (!fn) {\n\t\t\treturn elem;\n\t\t}\n\n\t\tif (one === 1) {\n\t\t\torigFn = fn;\n\t\t\tfn = function (event) {\n\n\t\t\t\t// Can use an empty set, since event contains the info\n\t\t\t\tjQuery().off(event);\n\t\t\t\treturn origFn.apply(this, arguments);\n\t\t\t};\n\n\t\t\t// Use same guid so caller can remove using origFn\n\t\t\tfn.guid = origFn.guid || (origFn.guid = jQuery.guid++);\n\t\t}\n\t\treturn elem.each(function () {\n\t\t\tjQuery.event.add(this, types, fn, data, selector);\n\t\t});\n\t}\n\n\t/*\n\t * Helper functions for managing events -- not part of the public interface.\n\t * Props to Dean Edwards' addEvent library for many of the ideas.\n\t */\n\tjQuery.event = {\n\n\t\tglobal: {},\n\n\t\tadd: function (elem, types, handler, data, selector) {\n\n\t\t\tvar handleObjIn, eventHandle, tmp,\n\t\t\t\tevents, t, handleObj,\n\t\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\t\telemData = dataPriv.get(elem);\n\n\t\t\t// Only attach events to objects that accept data\n\t\t\tif (!acceptData(elem)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Caller can pass in an object of custom data in lieu of the handler\n\t\t\tif (handler.handler) {\n\t\t\t\thandleObjIn = handler;\n\t\t\t\thandler = handleObjIn.handler;\n\t\t\t\tselector = handleObjIn.selector;\n\t\t\t}\n\n\t\t\t// Ensure that invalid selectors throw exceptions at attach time\n\t\t\t// Evaluate against documentElement in case elem is a non-element node (e.g., document)\n\t\t\tif (selector) {\n\t\t\t\tjQuery.find.matchesSelector(documentElement, selector);\n\t\t\t}\n\n\t\t\t// Make sure that the handler has a unique ID, used to find/remove it later\n\t\t\tif (!handler.guid) {\n\t\t\t\thandler.guid = jQuery.guid++;\n\t\t\t}\n\n\t\t\t// Init the element's event structure and main handler, if this is the first\n\t\t\tif (!(events = elemData.events)) {\n\t\t\t\tevents = elemData.events = Object.create(null);\n\t\t\t}\n\t\t\tif (!(eventHandle = elemData.handle)) {\n\t\t\t\teventHandle = elemData.handle = function (e) {\n\n\t\t\t\t\t// Discard the second event of a jQuery.event.trigger() and\n\t\t\t\t\t// when an event is called after a page has unloaded\n\t\t\t\t\treturn typeof jQuery !== \"undefined\" && jQuery.event.triggered !== e.type ?\n\t\t\t\t\t\tjQuery.event.dispatch.apply(elem, arguments) : undefined;\n\t\t\t\t};\n\t\t\t}\n\n\t\t\t// Handle multiple events separated by a space\n\t\t\ttypes = (types || \"\").match(rnothtmlwhite) || [\"\"];\n\t\t\tt = types.length;\n\t\t\twhile (t--) {\n\t\t\t\ttmp = rtypenamespace.exec(types[t]) || [];\n\t\t\t\ttype = origType = tmp[1];\n\t\t\t\tnamespaces = (tmp[2] || \"\").split(\".\").sort();\n\n\t\t\t\t// There *must* be a type, no attaching namespace-only handlers\n\t\t\t\tif (!type) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// If event changes its type, use the special event handlers for the changed type\n\t\t\t\tspecial = jQuery.event.special[type] || {};\n\n\t\t\t\t// If selector defined, determine special event api type, otherwise given type\n\t\t\t\ttype = (selector ? special.delegateType : special.bindType) || type;\n\n\t\t\t\t// Update special based on newly reset type\n\t\t\t\tspecial = jQuery.event.special[type] || {};\n\n\t\t\t\t// handleObj is passed to all event handlers\n\t\t\t\thandleObj = jQuery.extend({\n\t\t\t\t\ttype: type,\n\t\t\t\t\torigType: origType,\n\t\t\t\t\tdata: data,\n\t\t\t\t\thandler: handler,\n\t\t\t\t\tguid: handler.guid,\n\t\t\t\t\tselector: selector,\n\t\t\t\t\tneedsContext: selector && jQuery.expr.match.needsContext.test(selector),\n\t\t\t\t\tnamespace: namespaces.join(\".\")\n\t\t\t\t}, handleObjIn);\n\n\t\t\t\t// Init the event handler queue if we're the first\n\t\t\t\tif (!(handlers = events[type])) {\n\t\t\t\t\thandlers = events[type] = [];\n\t\t\t\t\thandlers.delegateCount = 0;\n\n\t\t\t\t\t// Only use addEventListener if the special events handler returns false\n\t\t\t\t\tif (!special.setup ||\n\t\t\t\t\t\tspecial.setup.call(elem, data, namespaces, eventHandle) === false) {\n\n\t\t\t\t\t\tif (elem.addEventListener) {\n\t\t\t\t\t\t\telem.addEventListener(type, eventHandle);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (special.add) {\n\t\t\t\t\tspecial.add.call(elem, handleObj);\n\n\t\t\t\t\tif (!handleObj.handler.guid) {\n\t\t\t\t\t\thandleObj.handler.guid = handler.guid;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Add to the element's handler list, delegates in front\n\t\t\t\tif (selector) {\n\t\t\t\t\thandlers.splice(handlers.delegateCount++, 0, handleObj);\n\t\t\t\t} else {\n\t\t\t\t\thandlers.push(handleObj);\n\t\t\t\t}\n\n\t\t\t\t// Keep track of which events have ever been used, for event optimization\n\t\t\t\tjQuery.event.global[type] = true;\n\t\t\t}\n\n\t\t},\n\n\t\t// Detach an event or set of events from an element\n\t\tremove: function (elem, types, handler, selector, mappedTypes) {\n\n\t\t\tvar j, origCount, tmp,\n\t\t\t\tevents, t, handleObj,\n\t\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\t\telemData = dataPriv.hasData(elem) && dataPriv.get(elem);\n\n\t\t\tif (!elemData || !(events = elemData.events)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Once for each type.namespace in types; type may be omitted\n\t\t\ttypes = (types || \"\").match(rnothtmlwhite) || [\"\"];\n\t\t\tt = types.length;\n\t\t\twhile (t--) {\n\t\t\t\ttmp = rtypenamespace.exec(types[t]) || [];\n\t\t\t\ttype = origType = tmp[1];\n\t\t\t\tnamespaces = (tmp[2] || \"\").split(\".\").sort();\n\n\t\t\t\t// Unbind all events (on this namespace, if provided) for the element\n\t\t\t\tif (!type) {\n\t\t\t\t\tfor (type in events) {\n\t\t\t\t\t\tjQuery.event.remove(elem, type + types[t], handler, selector, true);\n\t\t\t\t\t}\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tspecial = jQuery.event.special[type] || {};\n\t\t\t\ttype = (selector ? special.delegateType : special.bindType) || type;\n\t\t\t\thandlers = events[type] || [];\n\t\t\t\ttmp = tmp[2] &&\n\t\t\t\t\tnew RegExp(\"(^|\\\\.)\" + namespaces.join(\"\\\\.(?:.*\\\\.|)\") + \"(\\\\.|$)\");\n\n\t\t\t\t// Remove matching events\n\t\t\t\torigCount = j = handlers.length;\n\t\t\t\twhile (j--) {\n\t\t\t\t\thandleObj = handlers[j];\n\n\t\t\t\t\tif ((mappedTypes || origType === handleObj.origType) &&\n\t\t\t\t\t\t(!handler || handler.guid === handleObj.guid) &&\n\t\t\t\t\t\t(!tmp || tmp.test(handleObj.namespace)) &&\n\t\t\t\t\t\t(!selector || selector === handleObj.selector ||\n\t\t\t\t\t\t\tselector === \"**\" && handleObj.selector)) {\n\t\t\t\t\t\thandlers.splice(j, 1);\n\n\t\t\t\t\t\tif (handleObj.selector) {\n\t\t\t\t\t\t\thandlers.delegateCount--;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (special.remove) {\n\t\t\t\t\t\t\tspecial.remove.call(elem, handleObj);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Remove generic event handler if we removed something and no more handlers exist\n\t\t\t\t// (avoids potential for endless recursion during removal of special event handlers)\n\t\t\t\tif (origCount && !handlers.length) {\n\t\t\t\t\tif (!special.teardown ||\n\t\t\t\t\t\tspecial.teardown.call(elem, namespaces, elemData.handle) === false) {\n\n\t\t\t\t\t\tjQuery.removeEvent(elem, type, elemData.handle);\n\t\t\t\t\t}\n\n\t\t\t\t\tdelete events[type];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove data and the expando if it's no longer used\n\t\t\tif (jQuery.isEmptyObject(events)) {\n\t\t\t\tdataPriv.remove(elem, \"handle events\");\n\t\t\t}\n\t\t},\n\n\t\tdispatch: function (nativeEvent) {\n\n\t\t\tvar i, j, ret, matched, handleObj, handlerQueue,\n\t\t\t\targs = new Array(arguments.length),\n\n\t\t\t\t// Make a writable jQuery.Event from the native event object\n\t\t\t\tevent = jQuery.event.fix(nativeEvent),\n\n\t\t\t\thandlers = (\n\t\t\t\t\tdataPriv.get(this, \"events\") || Object.create(null)\n\t\t\t\t)[event.type] || [],\n\t\t\t\tspecial = jQuery.event.special[event.type] || {};\n\n\t\t\t// Use the fix-ed jQuery.Event rather than the (read-only) native event\n\t\t\targs[0] = event;\n\n\t\t\tfor (i = 1; i < arguments.length; i++) {\n\t\t\t\targs[i] = arguments[i];\n\t\t\t}\n\n\t\t\tevent.delegateTarget = this;\n\n\t\t\t// Call the preDispatch hook for the mapped type, and let it bail if desired\n\t\t\tif (special.preDispatch && special.preDispatch.call(this, event) === false) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Determine handlers\n\t\t\thandlerQueue = jQuery.event.handlers.call(this, event, handlers);\n\n\t\t\t// Run delegates first; they may want to stop propagation beneath us\n\t\t\ti = 0;\n\t\t\twhile ((matched = handlerQueue[i++]) && !event.isPropagationStopped()) {\n\t\t\t\tevent.currentTarget = matched.elem;\n\n\t\t\t\tj = 0;\n\t\t\t\twhile ((handleObj = matched.handlers[j++]) &&\n\t\t\t\t\t!event.isImmediatePropagationStopped()) {\n\n\t\t\t\t\t// If the event is namespaced, then each handler is only invoked if it is\n\t\t\t\t\t// specially universal or its namespaces are a superset of the event's.\n\t\t\t\t\tif (!event.rnamespace || handleObj.namespace === false ||\n\t\t\t\t\t\tevent.rnamespace.test(handleObj.namespace)) {\n\n\t\t\t\t\t\tevent.handleObj = handleObj;\n\t\t\t\t\t\tevent.data = handleObj.data;\n\n\t\t\t\t\t\tret = ((jQuery.event.special[handleObj.origType] || {}).handle ||\n\t\t\t\t\t\t\thandleObj.handler).apply(matched.elem, args);\n\n\t\t\t\t\t\tif (ret !== undefined) {\n\t\t\t\t\t\t\tif ((event.result = ret) === false) {\n\t\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Call the postDispatch hook for the mapped type\n\t\t\tif (special.postDispatch) {\n\t\t\t\tspecial.postDispatch.call(this, event);\n\t\t\t}\n\n\t\t\treturn event.result;\n\t\t},\n\n\t\thandlers: function (event, handlers) {\n\t\t\tvar i, handleObj, sel, matchedHandlers, matchedSelectors,\n\t\t\t\thandlerQueue = [],\n\t\t\t\tdelegateCount = handlers.delegateCount,\n\t\t\t\tcur = event.target;\n\n\t\t\t// Find delegate handlers\n\t\t\tif (delegateCount &&\n\n\t\t\t\t// Support: IE <=9\n\t\t\t\t// Black-hole SVG <use> instance trees (trac-13180)\n\t\t\t\tcur.nodeType &&\n\n\t\t\t\t// Support: Firefox <=42\n\t\t\t\t// Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861)\n\t\t\t\t// https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click\n\t\t\t\t// Support: IE 11 only\n\t\t\t\t// ...but not arrow key \"clicks\" of radio inputs, which can have `button` -1 (gh-2343)\n\t\t\t\t!(event.type === \"click\" && event.button >= 1)) {\n\n\t\t\t\tfor (; cur !== this; cur = cur.parentNode || this) {\n\n\t\t\t\t\t// Don't check non-elements (trac-13208)\n\t\t\t\t\t// Don't process clicks on disabled elements (trac-6911, trac-8165, trac-11382, trac-11764)\n\t\t\t\t\tif (cur.nodeType === 1 && !(event.type === \"click\" && cur.disabled === true)) {\n\t\t\t\t\t\tmatchedHandlers = [];\n\t\t\t\t\t\tmatchedSelectors = {};\n\t\t\t\t\t\tfor (i = 0; i < delegateCount; i++) {\n\t\t\t\t\t\t\thandleObj = handlers[i];\n\n\t\t\t\t\t\t\t// Don't conflict with Object.prototype properties (trac-13203)\n\t\t\t\t\t\t\tsel = handleObj.selector + \" \";\n\n\t\t\t\t\t\t\tif (matchedSelectors[sel] === undefined) {\n\t\t\t\t\t\t\t\tmatchedSelectors[sel] = handleObj.needsContext ?\n\t\t\t\t\t\t\t\t\tjQuery(sel, this).index(cur) > -1 :\n\t\t\t\t\t\t\t\t\tjQuery.find(sel, this, null, [cur]).length;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (matchedSelectors[sel]) {\n\t\t\t\t\t\t\t\tmatchedHandlers.push(handleObj);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (matchedHandlers.length) {\n\t\t\t\t\t\t\thandlerQueue.push({ elem: cur, handlers: matchedHandlers });\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Add the remaining (directly-bound) handlers\n\t\t\tcur = this;\n\t\t\tif (delegateCount < handlers.length) {\n\t\t\t\thandlerQueue.push({ elem: cur, handlers: handlers.slice(delegateCount) });\n\t\t\t}\n\n\t\t\treturn handlerQueue;\n\t\t},\n\n\t\taddProp: function (name, hook) {\n\t\t\tObject.defineProperty(jQuery.Event.prototype, name, {\n\t\t\t\tenumerable: true,\n\t\t\t\tconfigurable: true,\n\n\t\t\t\tget: isFunction(hook) ?\n\t\t\t\t\tfunction () {\n\t\t\t\t\t\tif (this.originalEvent) {\n\t\t\t\t\t\t\treturn hook(this.originalEvent);\n\t\t\t\t\t\t}\n\t\t\t\t\t} :\n\t\t\t\t\tfunction () {\n\t\t\t\t\t\tif (this.originalEvent) {\n\t\t\t\t\t\t\treturn this.originalEvent[name];\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\n\t\t\t\tset: function (value) {\n\t\t\t\t\tObject.defineProperty(this, name, {\n\t\t\t\t\t\tenumerable: true,\n\t\t\t\t\t\tconfigurable: true,\n\t\t\t\t\t\twritable: true,\n\t\t\t\t\t\tvalue: value\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\tfix: function (originalEvent) {\n\t\t\treturn originalEvent[jQuery.expando] ?\n\t\t\t\toriginalEvent :\n\t\t\t\tnew jQuery.Event(originalEvent);\n\t\t},\n\n\t\tspecial: {\n\t\t\tload: {\n\n\t\t\t\t// Prevent triggered image.load events from bubbling to window.load\n\t\t\t\tnoBubble: true\n\t\t\t},\n\t\t\tclick: {\n\n\t\t\t\t// Utilize native event to ensure correct state for checkable inputs\n\t\t\t\tsetup: function (data) {\n\n\t\t\t\t\t// For mutual compressibility with _default, replace `this` access with a local var.\n\t\t\t\t\t// `|| data` is dead code meant only to preserve the variable through minification.\n\t\t\t\t\tvar el = this || data;\n\n\t\t\t\t\t// Claim the first handler\n\t\t\t\t\tif (rcheckableType.test(el.type) &&\n\t\t\t\t\t\tel.click && nodeName(el, \"input\")) {\n\n\t\t\t\t\t\t// dataPriv.set( el, \"click\", ... )\n\t\t\t\t\t\tleverageNative(el, \"click\", true);\n\t\t\t\t\t}\n\n\t\t\t\t\t// Return false to allow normal processing in the caller\n\t\t\t\t\treturn false;\n\t\t\t\t},\n\t\t\t\ttrigger: function (data) {\n\n\t\t\t\t\t// For mutual compressibility with _default, replace `this` access with a local var.\n\t\t\t\t\t// `|| data` is dead code meant only to preserve the variable through minification.\n\t\t\t\t\tvar el = this || data;\n\n\t\t\t\t\t// Force setup before triggering a click\n\t\t\t\t\tif (rcheckableType.test(el.type) &&\n\t\t\t\t\t\tel.click && nodeName(el, \"input\")) {\n\n\t\t\t\t\t\tleverageNative(el, \"click\");\n\t\t\t\t\t}\n\n\t\t\t\t\t// Return non-false to allow normal event-path propagation\n\t\t\t\t\treturn true;\n\t\t\t\t},\n\n\t\t\t\t// For cross-browser consistency, suppress native .click() on links\n\t\t\t\t// Also prevent it if we're currently inside a leveraged native-event stack\n\t\t\t\t_default: function (event) {\n\t\t\t\t\tvar target = event.target;\n\t\t\t\t\treturn rcheckableType.test(target.type) &&\n\t\t\t\t\t\ttarget.click && nodeName(target, \"input\") &&\n\t\t\t\t\t\tdataPriv.get(target, \"click\") ||\n\t\t\t\t\t\tnodeName(target, \"a\");\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tbeforeunload: {\n\t\t\t\tpostDispatch: function (event) {\n\n\t\t\t\t\t// Support: Firefox 20+\n\t\t\t\t\t// Firefox doesn't alert if the returnValue field is not set.\n\t\t\t\t\tif (event.result !== undefined && event.originalEvent) {\n\t\t\t\t\t\tevent.originalEvent.returnValue = event.result;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t// Ensure the presence of an event listener that handles manually-triggered\n\t// synthetic events by interrupting progress until reinvoked in response to\n\t// *native* events that it fires directly, ensuring that state changes have\n\t// already occurred before other listeners are invoked.\n\tfunction leverageNative(el, type, isSetup) {\n\n\t\t// Missing `isSetup` indicates a trigger call, which must force setup through jQuery.event.add\n\t\tif (!isSetup) {\n\t\t\tif (dataPriv.get(el, type) === undefined) {\n\t\t\t\tjQuery.event.add(el, type, returnTrue);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\t// Register the controller as a special universal handler for all event namespaces\n\t\tdataPriv.set(el, type, false);\n\t\tjQuery.event.add(el, type, {\n\t\t\tnamespace: false,\n\t\t\thandler: function (event) {\n\t\t\t\tvar result,\n\t\t\t\t\tsaved = dataPriv.get(this, type);\n\n\t\t\t\tif ((event.isTrigger & 1) && this[type]) {\n\n\t\t\t\t\t// Interrupt processing of the outer synthetic .trigger()ed event\n\t\t\t\t\tif (!saved) {\n\n\t\t\t\t\t\t// Store arguments for use when handling the inner native event\n\t\t\t\t\t\t// There will always be at least one argument (an event object), so this array\n\t\t\t\t\t\t// will not be confused with a leftover capture object.\n\t\t\t\t\t\tsaved = slice.call(arguments);\n\t\t\t\t\t\tdataPriv.set(this, type, saved);\n\n\t\t\t\t\t\t// Trigger the native event and capture its result\n\t\t\t\t\t\tthis[type]();\n\t\t\t\t\t\tresult = dataPriv.get(this, type);\n\t\t\t\t\t\tdataPriv.set(this, type, false);\n\n\t\t\t\t\t\tif (saved !== result) {\n\n\t\t\t\t\t\t\t// Cancel the outer synthetic event\n\t\t\t\t\t\t\tevent.stopImmediatePropagation();\n\t\t\t\t\t\t\tevent.preventDefault();\n\n\t\t\t\t\t\t\treturn result;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// If this is an inner synthetic event for an event with a bubbling surrogate\n\t\t\t\t\t\t// (focus or blur), assume that the surrogate already propagated from triggering\n\t\t\t\t\t\t// the native event and prevent that from happening again here.\n\t\t\t\t\t\t// This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the\n\t\t\t\t\t\t// bubbling surrogate propagates *after* the non-bubbling base), but that seems\n\t\t\t\t\t\t// less bad than duplication.\n\t\t\t\t\t} else if ((jQuery.event.special[type] || {}).delegateType) {\n\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t}\n\n\t\t\t\t\t// If this is a native event triggered above, everything is now in order\n\t\t\t\t\t// Fire an inner synthetic event with the original arguments\n\t\t\t\t} else if (saved) {\n\n\t\t\t\t\t// ...and capture the result\n\t\t\t\t\tdataPriv.set(this, type, jQuery.event.trigger(\n\t\t\t\t\t\tsaved[0],\n\t\t\t\t\t\tsaved.slice(1),\n\t\t\t\t\t\tthis\n\t\t\t\t\t));\n\n\t\t\t\t\t// Abort handling of the native event by all jQuery handlers while allowing\n\t\t\t\t\t// native handlers on the same element to run. On target, this is achieved\n\t\t\t\t\t// by stopping immediate propagation just on the jQuery event. However,\n\t\t\t\t\t// the native event is re-wrapped by a jQuery one on each level of the\n\t\t\t\t\t// propagation so the only way to stop it for jQuery is to stop it for\n\t\t\t\t\t// everyone via native `stopPropagation()`. This is not a problem for\n\t\t\t\t\t// focus/blur which don't bubble, but it does also stop click on checkboxes\n\t\t\t\t\t// and radios. We accept this limitation.\n\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\tevent.isImmediatePropagationStopped = returnTrue;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\tjQuery.removeEvent = function (elem, type, handle) {\n\n\t\t// This \"if\" is needed for plain objects\n\t\tif (elem.removeEventListener) {\n\t\t\telem.removeEventListener(type, handle);\n\t\t}\n\t};\n\n\tjQuery.Event = function (src, props) {\n\n\t\t// Allow instantiation without the 'new' keyword\n\t\tif (!(this instanceof jQuery.Event)) {\n\t\t\treturn new jQuery.Event(src, props);\n\t\t}\n\n\t\t// Event object\n\t\tif (src && src.type) {\n\t\t\tthis.originalEvent = src;\n\t\t\tthis.type = src.type;\n\n\t\t\t// Events bubbling up the document may have been marked as prevented\n\t\t\t// by a handler lower down the tree; reflect the correct value.\n\t\t\tthis.isDefaultPrevented = src.defaultPrevented ||\n\t\t\t\tsrc.defaultPrevented === undefined &&\n\n\t\t\t\t// Support: Android <=2.3 only\n\t\t\t\tsrc.returnValue === false ?\n\t\t\t\treturnTrue :\n\t\t\t\treturnFalse;\n\n\t\t\t// Create target properties\n\t\t\t// Support: Safari <=6 - 7 only\n\t\t\t// Target should not be a text node (trac-504, trac-13143)\n\t\t\tthis.target = (src.target && src.target.nodeType === 3) ?\n\t\t\t\tsrc.target.parentNode :\n\t\t\t\tsrc.target;\n\n\t\t\tthis.currentTarget = src.currentTarget;\n\t\t\tthis.relatedTarget = src.relatedTarget;\n\n\t\t\t// Event type\n\t\t} else {\n\t\t\tthis.type = src;\n\t\t}\n\n\t\t// Put explicitly provided properties onto the event object\n\t\tif (props) {\n\t\t\tjQuery.extend(this, props);\n\t\t}\n\n\t\t// Create a timestamp if incoming event doesn't have one\n\t\tthis.timeStamp = src && src.timeStamp || Date.now();\n\n\t\t// Mark it as fixed\n\t\tthis[jQuery.expando] = true;\n\t};\n\n\t// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding\n\t// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html\n\tjQuery.Event.prototype = {\n\t\tconstructor: jQuery.Event,\n\t\tisDefaultPrevented: returnFalse,\n\t\tisPropagationStopped: returnFalse,\n\t\tisImmediatePropagationStopped: returnFalse,\n\t\tisSimulated: false,\n\n\t\tpreventDefault: function () {\n\t\t\tvar e = this.originalEvent;\n\n\t\t\tthis.isDefaultPrevented = returnTrue;\n\n\t\t\tif (e && !this.isSimulated) {\n\t\t\t\te.preventDefault();\n\t\t\t}\n\t\t},\n\t\tstopPropagation: function () {\n\t\t\tvar e = this.originalEvent;\n\n\t\t\tthis.isPropagationStopped = returnTrue;\n\n\t\t\tif (e && !this.isSimulated) {\n\t\t\t\te.stopPropagation();\n\t\t\t}\n\t\t},\n\t\tstopImmediatePropagation: function () {\n\t\t\tvar e = this.originalEvent;\n\n\t\t\tthis.isImmediatePropagationStopped = returnTrue;\n\n\t\t\tif (e && !this.isSimulated) {\n\t\t\t\te.stopImmediatePropagation();\n\t\t\t}\n\n\t\t\tthis.stopPropagation();\n\t\t}\n\t};\n\n\t// Includes all common event props including KeyEvent and MouseEvent specific props\n\tjQuery.each({\n\t\taltKey: true,\n\t\tbubbles: true,\n\t\tcancelable: true,\n\t\tchangedTouches: true,\n\t\tctrlKey: true,\n\t\tdetail: true,\n\t\teventPhase: true,\n\t\tmetaKey: true,\n\t\tpageX: true,\n\t\tpageY: true,\n\t\tshiftKey: true,\n\t\tview: true,\n\t\t\"char\": true,\n\t\tcode: true,\n\t\tcharCode: true,\n\t\tkey: true,\n\t\tkeyCode: true,\n\t\tbutton: true,\n\t\tbuttons: true,\n\t\tclientX: true,\n\t\tclientY: true,\n\t\toffsetX: true,\n\t\toffsetY: true,\n\t\tpointerId: true,\n\t\tpointerType: true,\n\t\tscreenX: true,\n\t\tscreenY: true,\n\t\ttargetTouches: true,\n\t\ttoElement: true,\n\t\ttouches: true,\n\t\twhich: true\n\t}, jQuery.event.addProp);\n\n\tjQuery.each({ focus: \"focusin\", blur: \"focusout\" }, function (type, delegateType) {\n\n\t\tfunction focusMappedHandler(nativeEvent) {\n\t\t\tif (document.documentMode) {\n\n\t\t\t\t// Support: IE 11+\n\t\t\t\t// Attach a single focusin/focusout handler on the document while someone wants\n\t\t\t\t// focus/blur. This is because the former are synchronous in IE while the latter\n\t\t\t\t// are async. In other browsers, all those handlers are invoked synchronously.\n\n\t\t\t\t// `handle` from private data would already wrap the event, but we need\n\t\t\t\t// to change the `type` here.\n\t\t\t\tvar handle = dataPriv.get(this, \"handle\"),\n\t\t\t\t\tevent = jQuery.event.fix(nativeEvent);\n\t\t\t\tevent.type = nativeEvent.type === \"focusin\" ? \"focus\" : \"blur\";\n\t\t\t\tevent.isSimulated = true;\n\n\t\t\t\t// First, handle focusin/focusout\n\t\t\t\thandle(nativeEvent);\n\n\t\t\t\t// ...then, handle focus/blur\n\t\t\t\t//\n\t\t\t\t// focus/blur don't bubble while focusin/focusout do; simulate the former by only\n\t\t\t\t// invoking the handler at the lower level.\n\t\t\t\tif (event.target === event.currentTarget) {\n\n\t\t\t\t\t// The setup part calls `leverageNative`, which, in turn, calls\n\t\t\t\t\t// `jQuery.event.add`, so event handle will already have been set\n\t\t\t\t\t// by this point.\n\t\t\t\t\thandle(event);\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\t// For non-IE browsers, attach a single capturing handler on the document\n\t\t\t\t// while someone wants focusin/focusout.\n\t\t\t\tjQuery.event.simulate(delegateType, nativeEvent.target,\n\t\t\t\t\tjQuery.event.fix(nativeEvent));\n\t\t\t}\n\t\t}\n\n\t\tjQuery.event.special[type] = {\n\n\t\t\t// Utilize native event if possible so blur/focus sequence is correct\n\t\t\tsetup: function () {\n\n\t\t\t\tvar attaches;\n\n\t\t\t\t// Claim the first handler\n\t\t\t\t// dataPriv.set( this, \"focus\", ... )\n\t\t\t\t// dataPriv.set( this, \"blur\", ... )\n\t\t\t\tleverageNative(this, type, true);\n\n\t\t\t\tif (document.documentMode) {\n\n\t\t\t\t\t// Support: IE 9 - 11+\n\t\t\t\t\t// We use the same native handler for focusin & focus (and focusout & blur)\n\t\t\t\t\t// so we need to coordinate setup & teardown parts between those events.\n\t\t\t\t\t// Use `delegateType` as the key as `type` is already used by `leverageNative`.\n\t\t\t\t\tattaches = dataPriv.get(this, delegateType);\n\t\t\t\t\tif (!attaches) {\n\t\t\t\t\t\tthis.addEventListener(delegateType, focusMappedHandler);\n\t\t\t\t\t}\n\t\t\t\t\tdataPriv.set(this, delegateType, (attaches || 0) + 1);\n\t\t\t\t} else {\n\n\t\t\t\t\t// Return false to allow normal processing in the caller\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\t\t\ttrigger: function () {\n\n\t\t\t\t// Force setup before trigger\n\t\t\t\tleverageNative(this, type);\n\n\t\t\t\t// Return non-false to allow normal event-path propagation\n\t\t\t\treturn true;\n\t\t\t},\n\n\t\t\tteardown: function () {\n\t\t\t\tvar attaches;\n\n\t\t\t\tif (document.documentMode) {\n\t\t\t\t\tattaches = dataPriv.get(this, delegateType) - 1;\n\t\t\t\t\tif (!attaches) {\n\t\t\t\t\t\tthis.removeEventListener(delegateType, focusMappedHandler);\n\t\t\t\t\t\tdataPriv.remove(this, delegateType);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdataPriv.set(this, delegateType, attaches);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\n\t\t\t\t\t// Return false to indicate standard teardown should be applied\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// Suppress native focus or blur if we're currently inside\n\t\t\t// a leveraged native-event stack\n\t\t\t_default: function (event) {\n\t\t\t\treturn dataPriv.get(event.target, type);\n\t\t\t},\n\n\t\t\tdelegateType: delegateType\n\t\t};\n\n\t\t// Support: Firefox <=44\n\t\t// Firefox doesn't have focus(in | out) events\n\t\t// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787\n\t\t//\n\t\t// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1\n\t\t// focus(in | out) events fire after focus & blur events,\n\t\t// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order\n\t\t// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857\n\t\t//\n\t\t// Support: IE 9 - 11+\n\t\t// To preserve relative focusin/focus & focusout/blur event order guaranteed on the 3.x branch,\n\t\t// attach a single handler for both events in IE.\n\t\tjQuery.event.special[delegateType] = {\n\t\t\tsetup: function () {\n\n\t\t\t\t// Handle: regular nodes (via `this.ownerDocument`), window\n\t\t\t\t// (via `this.document`) & document (via `this`).\n\t\t\t\tvar doc = this.ownerDocument || this.document || this,\n\t\t\t\t\tdataHolder = document.documentMode ? this : doc,\n\t\t\t\t\tattaches = dataPriv.get(dataHolder, delegateType);\n\n\t\t\t\t// Support: IE 9 - 11+\n\t\t\t\t// We use the same native handler for focusin & focus (and focusout & blur)\n\t\t\t\t// so we need to coordinate setup & teardown parts between those events.\n\t\t\t\t// Use `delegateType` as the key as `type` is already used by `leverageNative`.\n\t\t\t\tif (!attaches) {\n\t\t\t\t\tif (document.documentMode) {\n\t\t\t\t\t\tthis.addEventListener(delegateType, focusMappedHandler);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdoc.addEventListener(type, focusMappedHandler, true);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tdataPriv.set(dataHolder, delegateType, (attaches || 0) + 1);\n\t\t\t},\n\t\t\tteardown: function () {\n\t\t\t\tvar doc = this.ownerDocument || this.document || this,\n\t\t\t\t\tdataHolder = document.documentMode ? this : doc,\n\t\t\t\t\tattaches = dataPriv.get(dataHolder, delegateType) - 1;\n\n\t\t\t\tif (!attaches) {\n\t\t\t\t\tif (document.documentMode) {\n\t\t\t\t\t\tthis.removeEventListener(delegateType, focusMappedHandler);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdoc.removeEventListener(type, focusMappedHandler, true);\n\t\t\t\t\t}\n\t\t\t\t\tdataPriv.remove(dataHolder, delegateType);\n\t\t\t\t} else {\n\t\t\t\t\tdataPriv.set(dataHolder, delegateType, attaches);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t});\n\n\t// Create mouseenter/leave events using mouseover/out and event-time checks\n\t// so that event delegation works in jQuery.\n\t// Do the same for pointerenter/pointerleave and pointerover/pointerout\n\t//\n\t// Support: Safari 7 only\n\t// Safari sends mouseenter too often; see:\n\t// https://bugs.chromium.org/p/chromium/issues/detail?id=470258\n\t// for the description of the bug (it existed in older Chrome versions as well).\n\tjQuery.each({\n\t\tmouseenter: \"mouseover\",\n\t\tmouseleave: \"mouseout\",\n\t\tpointerenter: \"pointerover\",\n\t\tpointerleave: \"pointerout\"\n\t}, function (orig, fix) {\n\t\tjQuery.event.special[orig] = {\n\t\t\tdelegateType: fix,\n\t\t\tbindType: fix,\n\n\t\t\thandle: function (event) {\n\t\t\t\tvar ret,\n\t\t\t\t\ttarget = this,\n\t\t\t\t\trelated = event.relatedTarget,\n\t\t\t\t\thandleObj = event.handleObj;\n\n\t\t\t\t// For mouseenter/leave call the handler if related is outside the target.\n\t\t\t\t// NB: No relatedTarget if the mouse left/entered the browser window\n\t\t\t\tif (!related || (related !== target && !jQuery.contains(target, related))) {\n\t\t\t\t\tevent.type = handleObj.origType;\n\t\t\t\t\tret = handleObj.handler.apply(this, arguments);\n\t\t\t\t\tevent.type = fix;\n\t\t\t\t}\n\t\t\t\treturn ret;\n\t\t\t}\n\t\t};\n\t});\n\n\tjQuery.fn.extend({\n\n\t\ton: function (types, selector, data, fn) {\n\t\t\treturn on(this, types, selector, data, fn);\n\t\t},\n\t\tone: function (types, selector, data, fn) {\n\t\t\treturn on(this, types, selector, data, fn, 1);\n\t\t},\n\t\toff: function (types, selector, fn) {\n\t\t\tvar handleObj, type;\n\t\t\tif (types && types.preventDefault && types.handleObj) {\n\n\t\t\t\t// ( event )  dispatched jQuery.Event\n\t\t\t\thandleObj = types.handleObj;\n\t\t\t\tjQuery(types.delegateTarget).off(\n\t\t\t\t\thandleObj.namespace ?\n\t\t\t\t\t\thandleObj.origType + \".\" + handleObj.namespace :\n\t\t\t\t\t\thandleObj.origType,\n\t\t\t\t\thandleObj.selector,\n\t\t\t\t\thandleObj.handler\n\t\t\t\t);\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\tif (typeof types === \"object\") {\n\n\t\t\t\t// ( types-object [, selector] )\n\t\t\t\tfor (type in types) {\n\t\t\t\t\tthis.off(type, selector, types[type]);\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\tif (selector === false || typeof selector === \"function\") {\n\n\t\t\t\t// ( types [, fn] )\n\t\t\t\tfn = selector;\n\t\t\t\tselector = undefined;\n\t\t\t}\n\t\t\tif (fn === false) {\n\t\t\t\tfn = returnFalse;\n\t\t\t}\n\t\t\treturn this.each(function () {\n\t\t\t\tjQuery.event.remove(this, types, fn, selector);\n\t\t\t});\n\t\t}\n\t});\n\n\n\tvar\n\n\t\t// Support: IE <=10 - 11, Edge 12 - 13 only\n\t\t// In IE/Edge using regex groups here causes severe slowdowns.\n\t\t// See https://connect.microsoft.com/IE/feedback/details/1736512/\n\t\trnoInnerhtml = /<script|<style|<link/i,\n\n\t\t// checked=\"checked\" or checked\n\t\trchecked = /checked\\s*(?:[^=]|=\\s*.checked.)/i,\n\n\t\trcleanScript = /^\\s*<!\\[CDATA\\[|\\]\\]>\\s*$/g;\n\n\t// Prefer a tbody over its parent table for containing new rows\n\tfunction manipulationTarget(elem, content) {\n\t\tif (nodeName(elem, \"table\") &&\n\t\t\tnodeName(content.nodeType !== 11 ? content : content.firstChild, \"tr\")) {\n\n\t\t\treturn jQuery(elem).children(\"tbody\")[0] || elem;\n\t\t}\n\n\t\treturn elem;\n\t}\n\n\t// Replace/restore the type attribute of script elements for safe DOM manipulation\n\tfunction disableScript(elem) {\n\t\telem.type = (elem.getAttribute(\"type\") !== null) + \"/\" + elem.type;\n\t\treturn elem;\n\t}\n\tfunction restoreScript(elem) {\n\t\tif ((elem.type || \"\").slice(0, 5) === \"true/\") {\n\t\t\telem.type = elem.type.slice(5);\n\t\t} else {\n\t\t\telem.removeAttribute(\"type\");\n\t\t}\n\n\t\treturn elem;\n\t}\n\n\tfunction cloneCopyEvent(src, dest) {\n\t\tvar i, l, type, pdataOld, udataOld, udataCur, events;\n\n\t\tif (dest.nodeType !== 1) {\n\t\t\treturn;\n\t\t}\n\n\t\t// 1. Copy private data: events, handlers, etc.\n\t\tif (dataPriv.hasData(src)) {\n\t\t\tpdataOld = dataPriv.get(src);\n\t\t\tevents = pdataOld.events;\n\n\t\t\tif (events) {\n\t\t\t\tdataPriv.remove(dest, \"handle events\");\n\n\t\t\t\tfor (type in events) {\n\t\t\t\t\tfor (i = 0, l = events[type].length; i < l; i++) {\n\t\t\t\t\t\tjQuery.event.add(dest, type, events[type][i]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// 2. Copy user data\n\t\tif (dataUser.hasData(src)) {\n\t\t\tudataOld = dataUser.access(src);\n\t\t\tudataCur = jQuery.extend({}, udataOld);\n\n\t\t\tdataUser.set(dest, udataCur);\n\t\t}\n\t}\n\n\t// Fix IE bugs, see support tests\n\tfunction fixInput(src, dest) {\n\t\tvar nodeName = dest.nodeName.toLowerCase();\n\n\t\t// Fails to persist the checked state of a cloned checkbox or radio button.\n\t\tif (nodeName === \"input\" && rcheckableType.test(src.type)) {\n\t\t\tdest.checked = src.checked;\n\n\t\t\t// Fails to return the selected option to the default selected state when cloning options\n\t\t} else if (nodeName === \"input\" || nodeName === \"textarea\") {\n\t\t\tdest.defaultValue = src.defaultValue;\n\t\t}\n\t}\n\n\tfunction domManip(collection, args, callback, ignored) {\n\n\t\t// Flatten any nested arrays\n\t\targs = flat(args);\n\n\t\tvar fragment, first, scripts, hasScripts, node, doc,\n\t\t\ti = 0,\n\t\t\tl = collection.length,\n\t\t\tiNoClone = l - 1,\n\t\t\tvalue = args[0],\n\t\t\tvalueIsFunction = isFunction(value);\n\n\t\t// We can't cloneNode fragments that contain checked, in WebKit\n\t\tif (valueIsFunction ||\n\t\t\t(l > 1 && typeof value === \"string\" &&\n\t\t\t\t!support.checkClone && rchecked.test(value))) {\n\t\t\treturn collection.each(function (index) {\n\t\t\t\tvar self = collection.eq(index);\n\t\t\t\tif (valueIsFunction) {\n\t\t\t\t\targs[0] = value.call(this, index, self.html());\n\t\t\t\t}\n\t\t\t\tdomManip(self, args, callback, ignored);\n\t\t\t});\n\t\t}\n\n\t\tif (l) {\n\t\t\tfragment = buildFragment(args, collection[0].ownerDocument, false, collection, ignored);\n\t\t\tfirst = fragment.firstChild;\n\n\t\t\tif (fragment.childNodes.length === 1) {\n\t\t\t\tfragment = first;\n\t\t\t}\n\n\t\t\t// Require either new content or an interest in ignored elements to invoke the callback\n\t\t\tif (first || ignored) {\n\t\t\t\tscripts = jQuery.map(getAll(fragment, \"script\"), disableScript);\n\t\t\t\thasScripts = scripts.length;\n\n\t\t\t\t// Use the original fragment for the last item\n\t\t\t\t// instead of the first because it can end up\n\t\t\t\t// being emptied incorrectly in certain situations (trac-8070).\n\t\t\t\tfor (; i < l; i++) {\n\t\t\t\t\tnode = fragment;\n\n\t\t\t\t\tif (i !== iNoClone) {\n\t\t\t\t\t\tnode = jQuery.clone(node, true, true);\n\n\t\t\t\t\t\t// Keep references to cloned scripts for later restoration\n\t\t\t\t\t\tif (hasScripts) {\n\n\t\t\t\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\t\t\t\tjQuery.merge(scripts, getAll(node, \"script\"));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tcallback.call(collection[i], node, i);\n\t\t\t\t}\n\n\t\t\t\tif (hasScripts) {\n\t\t\t\t\tdoc = scripts[scripts.length - 1].ownerDocument;\n\n\t\t\t\t\t// Reenable scripts\n\t\t\t\t\tjQuery.map(scripts, restoreScript);\n\n\t\t\t\t\t// Evaluate executable scripts on first document insertion\n\t\t\t\t\tfor (i = 0; i < hasScripts; i++) {\n\t\t\t\t\t\tnode = scripts[i];\n\t\t\t\t\t\tif (rscriptType.test(node.type || \"\") &&\n\t\t\t\t\t\t\t!dataPriv.access(node, \"globalEval\") &&\n\t\t\t\t\t\t\tjQuery.contains(doc, node)) {\n\n\t\t\t\t\t\t\tif (node.src && (node.type || \"\").toLowerCase() !== \"module\") {\n\n\t\t\t\t\t\t\t\t// Optional AJAX dependency, but won't run scripts if not present\n\t\t\t\t\t\t\t\tif (jQuery._evalUrl && !node.noModule) {\n\t\t\t\t\t\t\t\t\tjQuery._evalUrl(node.src, {\n\t\t\t\t\t\t\t\t\t\tnonce: node.nonce || node.getAttribute(\"nonce\")\n\t\t\t\t\t\t\t\t\t}, doc);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t// Unwrap a CDATA section containing script contents. This shouldn't be\n\t\t\t\t\t\t\t\t// needed as in XML documents they're already not visible when\n\t\t\t\t\t\t\t\t// inspecting element contents and in HTML documents they have no\n\t\t\t\t\t\t\t\t// meaning but we're preserving that logic for backwards compatibility.\n\t\t\t\t\t\t\t\t// This will be removed completely in 4.0. See gh-4904.\n\t\t\t\t\t\t\t\tDOMEval(node.textContent.replace(rcleanScript, \"\"), node, doc);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn collection;\n\t}\n\n\tfunction remove(elem, selector, keepData) {\n\t\tvar node,\n\t\t\tnodes = selector ? jQuery.filter(selector, elem) : elem,\n\t\t\ti = 0;\n\n\t\tfor (; (node = nodes[i]) != null; i++) {\n\t\t\tif (!keepData && node.nodeType === 1) {\n\t\t\t\tjQuery.cleanData(getAll(node));\n\t\t\t}\n\n\t\t\tif (node.parentNode) {\n\t\t\t\tif (keepData && isAttached(node)) {\n\t\t\t\t\tsetGlobalEval(getAll(node, \"script\"));\n\t\t\t\t}\n\t\t\t\tnode.parentNode.removeChild(node);\n\t\t\t}\n\t\t}\n\n\t\treturn elem;\n\t}\n\n\tjQuery.extend({\n\t\thtmlPrefilter: function (html) {\n\t\t\treturn html;\n\t\t},\n\n\t\tclone: function (elem, dataAndEvents, deepDataAndEvents) {\n\t\t\tvar i, l, srcElements, destElements,\n\t\t\t\tclone = elem.cloneNode(true),\n\t\t\t\tinPage = isAttached(elem);\n\n\t\t\t// Fix IE cloning issues\n\t\t\tif (!support.noCloneChecked && (elem.nodeType === 1 || elem.nodeType === 11) &&\n\t\t\t\t!jQuery.isXMLDoc(elem)) {\n\n\t\t\t\t// We eschew jQuery#find here for performance reasons:\n\t\t\t\t// https://jsperf.com/getall-vs-sizzle/2\n\t\t\t\tdestElements = getAll(clone);\n\t\t\t\tsrcElements = getAll(elem);\n\n\t\t\t\tfor (i = 0, l = srcElements.length; i < l; i++) {\n\t\t\t\t\tfixInput(srcElements[i], destElements[i]);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Copy the events from the original to the clone\n\t\t\tif (dataAndEvents) {\n\t\t\t\tif (deepDataAndEvents) {\n\t\t\t\t\tsrcElements = srcElements || getAll(elem);\n\t\t\t\t\tdestElements = destElements || getAll(clone);\n\n\t\t\t\t\tfor (i = 0, l = srcElements.length; i < l; i++) {\n\t\t\t\t\t\tcloneCopyEvent(srcElements[i], destElements[i]);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tcloneCopyEvent(elem, clone);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Preserve script evaluation history\n\t\t\tdestElements = getAll(clone, \"script\");\n\t\t\tif (destElements.length > 0) {\n\t\t\t\tsetGlobalEval(destElements, !inPage && getAll(elem, \"script\"));\n\t\t\t}\n\n\t\t\t// Return the cloned set\n\t\t\treturn clone;\n\t\t},\n\n\t\tcleanData: function (elems) {\n\t\t\tvar data, elem, type,\n\t\t\t\tspecial = jQuery.event.special,\n\t\t\t\ti = 0;\n\n\t\t\tfor (; (elem = elems[i]) !== undefined; i++) {\n\t\t\t\tif (acceptData(elem)) {\n\t\t\t\t\tif ((data = elem[dataPriv.expando])) {\n\t\t\t\t\t\tif (data.events) {\n\t\t\t\t\t\t\tfor (type in data.events) {\n\t\t\t\t\t\t\t\tif (special[type]) {\n\t\t\t\t\t\t\t\t\tjQuery.event.remove(elem, type);\n\n\t\t\t\t\t\t\t\t\t// This is a shortcut to avoid jQuery.event.remove's overhead\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tjQuery.removeEvent(elem, type, data.handle);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\t\telem[dataPriv.expando] = undefined;\n\t\t\t\t\t}\n\t\t\t\t\tif (elem[dataUser.expando]) {\n\n\t\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\t\telem[dataUser.expando] = undefined;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\n\tjQuery.fn.extend({\n\t\tdetach: function (selector) {\n\t\t\treturn remove(this, selector, true);\n\t\t},\n\n\t\tremove: function (selector) {\n\t\t\treturn remove(this, selector);\n\t\t},\n\n\t\ttext: function (value) {\n\t\t\treturn access(this, function (value) {\n\t\t\t\treturn value === undefined ?\n\t\t\t\t\tjQuery.text(this) :\n\t\t\t\t\tthis.empty().each(function () {\n\t\t\t\t\t\tif (this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9) {\n\t\t\t\t\t\t\tthis.textContent = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t}, null, value, arguments.length);\n\t\t},\n\n\t\tappend: function () {\n\t\t\treturn domManip(this, arguments, function (elem) {\n\t\t\t\tif (this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9) {\n\t\t\t\t\tvar target = manipulationTarget(this, elem);\n\t\t\t\t\ttarget.appendChild(elem);\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\tprepend: function () {\n\t\t\treturn domManip(this, arguments, function (elem) {\n\t\t\t\tif (this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9) {\n\t\t\t\t\tvar target = manipulationTarget(this, elem);\n\t\t\t\t\ttarget.insertBefore(elem, target.firstChild);\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\tbefore: function () {\n\t\t\treturn domManip(this, arguments, function (elem) {\n\t\t\t\tif (this.parentNode) {\n\t\t\t\t\tthis.parentNode.insertBefore(elem, this);\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\tafter: function () {\n\t\t\treturn domManip(this, arguments, function (elem) {\n\t\t\t\tif (this.parentNode) {\n\t\t\t\t\tthis.parentNode.insertBefore(elem, this.nextSibling);\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\tempty: function () {\n\t\t\tvar elem,\n\t\t\t\ti = 0;\n\n\t\t\tfor (; (elem = this[i]) != null; i++) {\n\t\t\t\tif (elem.nodeType === 1) {\n\n\t\t\t\t\t// Prevent memory leaks\n\t\t\t\t\tjQuery.cleanData(getAll(elem, false));\n\n\t\t\t\t\t// Remove any remaining nodes\n\t\t\t\t\telem.textContent = \"\";\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn this;\n\t\t},\n\n\t\tclone: function (dataAndEvents, deepDataAndEvents) {\n\t\t\tdataAndEvents = dataAndEvents == null ? false : dataAndEvents;\n\t\t\tdeepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;\n\n\t\t\treturn this.map(function () {\n\t\t\t\treturn jQuery.clone(this, dataAndEvents, deepDataAndEvents);\n\t\t\t});\n\t\t},\n\n\t\thtml: function (value) {\n\t\t\treturn access(this, function (value) {\n\t\t\t\tvar elem = this[0] || {},\n\t\t\t\t\ti = 0,\n\t\t\t\t\tl = this.length;\n\n\t\t\t\tif (value === undefined && elem.nodeType === 1) {\n\t\t\t\t\treturn elem.innerHTML;\n\t\t\t\t}\n\n\t\t\t\t// See if we can take a shortcut and just use innerHTML\n\t\t\t\tif (typeof value === \"string\" && !rnoInnerhtml.test(value) &&\n\t\t\t\t\t!wrapMap[(rtagName.exec(value) || [\"\", \"\"])[1].toLowerCase()]) {\n\n\t\t\t\t\tvalue = jQuery.htmlPrefilter(value);\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tfor (; i < l; i++) {\n\t\t\t\t\t\t\telem = this[i] || {};\n\n\t\t\t\t\t\t\t// Remove element nodes and prevent memory leaks\n\t\t\t\t\t\t\tif (elem.nodeType === 1) {\n\t\t\t\t\t\t\t\tjQuery.cleanData(getAll(elem, false));\n\t\t\t\t\t\t\t\telem.innerHTML = value;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\telem = 0;\n\n\t\t\t\t\t\t// If using innerHTML throws an exception, use the fallback method\n\t\t\t\t\t} catch (e) { }\n\t\t\t\t}\n\n\t\t\t\tif (elem) {\n\t\t\t\t\tthis.empty().append(value);\n\t\t\t\t}\n\t\t\t}, null, value, arguments.length);\n\t\t},\n\n\t\treplaceWith: function () {\n\t\t\tvar ignored = [];\n\n\t\t\t// Make the changes, replacing each non-ignored context element with the new content\n\t\t\treturn domManip(this, arguments, function (elem) {\n\t\t\t\tvar parent = this.parentNode;\n\n\t\t\t\tif (jQuery.inArray(this, ignored) < 0) {\n\t\t\t\t\tjQuery.cleanData(getAll(this));\n\t\t\t\t\tif (parent) {\n\t\t\t\t\t\tparent.replaceChild(elem, this);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Force callback invocation\n\t\t\t}, ignored);\n\t\t}\n\t});\n\n\tjQuery.each({\n\t\tappendTo: \"append\",\n\t\tprependTo: \"prepend\",\n\t\tinsertBefore: \"before\",\n\t\tinsertAfter: \"after\",\n\t\treplaceAll: \"replaceWith\"\n\t}, function (name, original) {\n\t\tjQuery.fn[name] = function (selector) {\n\t\t\tvar elems,\n\t\t\t\tret = [],\n\t\t\t\tinsert = jQuery(selector),\n\t\t\t\tlast = insert.length - 1,\n\t\t\t\ti = 0;\n\n\t\t\tfor (; i <= last; i++) {\n\t\t\t\telems = i === last ? this : this.clone(true);\n\t\t\t\tjQuery(insert[i])[original](elems);\n\n\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t// .get() because push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\tpush.apply(ret, elems.get());\n\t\t\t}\n\n\t\t\treturn this.pushStack(ret);\n\t\t};\n\t});\n\tvar rnumnonpx = new RegExp(\"^(\" + pnum + \")(?!px)[a-z%]+$\", \"i\");\n\n\tvar rcustomProp = /^--/;\n\n\n\tvar getStyles = function (elem) {\n\n\t\t// Support: IE <=11 only, Firefox <=30 (trac-15098, trac-14150)\n\t\t// IE throws on elements created in popups\n\t\t// FF meanwhile throws on frame elements through \"defaultView.getComputedStyle\"\n\t\tvar view = elem.ownerDocument.defaultView;\n\n\t\tif (!view || !view.opener) {\n\t\t\tview = window;\n\t\t}\n\n\t\treturn view.getComputedStyle(elem);\n\t};\n\n\tvar swap = function (elem, options, callback) {\n\t\tvar ret, name,\n\t\t\told = {};\n\n\t\t// Remember the old values, and insert the new ones\n\t\tfor (name in options) {\n\t\t\told[name] = elem.style[name];\n\t\t\telem.style[name] = options[name];\n\t\t}\n\n\t\tret = callback.call(elem);\n\n\t\t// Revert the old values\n\t\tfor (name in options) {\n\t\t\telem.style[name] = old[name];\n\t\t}\n\n\t\treturn ret;\n\t};\n\n\n\tvar rboxStyle = new RegExp(cssExpand.join(\"|\"), \"i\");\n\n\n\n\t(function () {\n\n\t\t// Executing both pixelPosition & boxSizingReliable tests require only one layout\n\t\t// so they're executed at the same time to save the second computation.\n\t\tfunction computeStyleTests() {\n\n\t\t\t// This is a singleton, we need to execute it only once\n\t\t\tif (!div) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tcontainer.style.cssText = \"position:absolute;left:-11111px;width:60px;\" +\n\t\t\t\t\"margin-top:1px;padding:0;border:0\";\n\t\t\tdiv.style.cssText =\n\t\t\t\t\"position:relative;display:block;box-sizing:border-box;overflow:scroll;\" +\n\t\t\t\t\"margin:auto;border:1px;padding:1px;\" +\n\t\t\t\t\"width:60%;top:1%\";\n\t\t\tdocumentElement.appendChild(container).appendChild(div);\n\n\t\t\tvar divStyle = window.getComputedStyle(div);\n\t\t\tpixelPositionVal = divStyle.top !== \"1%\";\n\n\t\t\t// Support: Android 4.0 - 4.3 only, Firefox <=3 - 44\n\t\t\treliableMarginLeftVal = roundPixelMeasures(divStyle.marginLeft) === 12;\n\n\t\t\t// Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3\n\t\t\t// Some styles come back with percentage values, even though they shouldn't\n\t\t\tdiv.style.right = \"60%\";\n\t\t\tpixelBoxStylesVal = roundPixelMeasures(divStyle.right) === 36;\n\n\t\t\t// Support: IE 9 - 11 only\n\t\t\t// Detect misreporting of content dimensions for box-sizing:border-box elements\n\t\t\tboxSizingReliableVal = roundPixelMeasures(divStyle.width) === 36;\n\n\t\t\t// Support: IE 9 only\n\t\t\t// Detect overflow:scroll screwiness (gh-3699)\n\t\t\t// Support: Chrome <=64\n\t\t\t// Don't get tricked when zoom affects offsetWidth (gh-4029)\n\t\t\tdiv.style.position = \"absolute\";\n\t\t\tscrollboxSizeVal = roundPixelMeasures(div.offsetWidth / 3) === 12;\n\n\t\t\tdocumentElement.removeChild(container);\n\n\t\t\t// Nullify the div so it wouldn't be stored in the memory and\n\t\t\t// it will also be a sign that checks already performed\n\t\t\tdiv = null;\n\t\t}\n\n\t\tfunction roundPixelMeasures(measure) {\n\t\t\treturn Math.round(parseFloat(measure));\n\t\t}\n\n\t\tvar pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal,\n\t\t\treliableTrDimensionsVal, reliableMarginLeftVal,\n\t\t\tcontainer = document.createElement(\"div\"),\n\t\t\tdiv = document.createElement(\"div\");\n\n\t\t// Finish early in limited (non-browser) environments\n\t\tif (!div.style) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Support: IE <=9 - 11 only\n\t\t// Style of cloned element affects source element cloned (trac-8908)\n\t\tdiv.style.backgroundClip = \"content-box\";\n\t\tdiv.cloneNode(true).style.backgroundClip = \"\";\n\t\tsupport.clearCloneStyle = div.style.backgroundClip === \"content-box\";\n\n\t\tjQuery.extend(support, {\n\t\t\tboxSizingReliable: function () {\n\t\t\t\tcomputeStyleTests();\n\t\t\t\treturn boxSizingReliableVal;\n\t\t\t},\n\t\t\tpixelBoxStyles: function () {\n\t\t\t\tcomputeStyleTests();\n\t\t\t\treturn pixelBoxStylesVal;\n\t\t\t},\n\t\t\tpixelPosition: function () {\n\t\t\t\tcomputeStyleTests();\n\t\t\t\treturn pixelPositionVal;\n\t\t\t},\n\t\t\treliableMarginLeft: function () {\n\t\t\t\tcomputeStyleTests();\n\t\t\t\treturn reliableMarginLeftVal;\n\t\t\t},\n\t\t\tscrollboxSize: function () {\n\t\t\t\tcomputeStyleTests();\n\t\t\t\treturn scrollboxSizeVal;\n\t\t\t},\n\n\t\t\t// Support: IE 9 - 11+, Edge 15 - 18+\n\t\t\t// IE/Edge misreport `getComputedStyle` of table rows with width/height\n\t\t\t// set in CSS while `offset*` properties report correct values.\n\t\t\t// Behavior in IE 9 is more subtle than in newer versions & it passes\n\t\t\t// some versions of this test; make sure not to make it pass there!\n\t\t\t//\n\t\t\t// Support: Firefox 70+\n\t\t\t// Only Firefox includes border widths\n\t\t\t// in computed dimensions. (gh-4529)\n\t\t\treliableTrDimensions: function () {\n\t\t\t\tvar table, tr, trChild, trStyle;\n\t\t\t\tif (reliableTrDimensionsVal == null) {\n\t\t\t\t\ttable = document.createElement(\"table\");\n\t\t\t\t\ttr = document.createElement(\"tr\");\n\t\t\t\t\ttrChild = document.createElement(\"div\");\n\n\t\t\t\t\ttable.style.cssText = \"position:absolute;left:-11111px;border-collapse:separate\";\n\t\t\t\t\ttr.style.cssText = \"border:1px solid\";\n\n\t\t\t\t\t// Support: Chrome 86+\n\t\t\t\t\t// Height set through cssText does not get applied.\n\t\t\t\t\t// Computed height then comes back as 0.\n\t\t\t\t\ttr.style.height = \"1px\";\n\t\t\t\t\ttrChild.style.height = \"9px\";\n\n\t\t\t\t\t// Support: Android 8 Chrome 86+\n\t\t\t\t\t// In our bodyBackground.html iframe,\n\t\t\t\t\t// display for all div elements is set to \"inline\",\n\t\t\t\t\t// which causes a problem only in Android 8 Chrome 86.\n\t\t\t\t\t// Ensuring the div is display: block\n\t\t\t\t\t// gets around this issue.\n\t\t\t\t\ttrChild.style.display = \"block\";\n\n\t\t\t\t\tdocumentElement\n\t\t\t\t\t\t.appendChild(table)\n\t\t\t\t\t\t.appendChild(tr)\n\t\t\t\t\t\t.appendChild(trChild);\n\n\t\t\t\t\ttrStyle = window.getComputedStyle(tr);\n\t\t\t\t\treliableTrDimensionsVal = (parseInt(trStyle.height, 10) +\n\t\t\t\t\t\tparseInt(trStyle.borderTopWidth, 10) +\n\t\t\t\t\t\tparseInt(trStyle.borderBottomWidth, 10)) === tr.offsetHeight;\n\n\t\t\t\t\tdocumentElement.removeChild(table);\n\t\t\t\t}\n\t\t\t\treturn reliableTrDimensionsVal;\n\t\t\t}\n\t\t});\n\t})();\n\n\n\tfunction curCSS(elem, name, computed) {\n\t\tvar width, minWidth, maxWidth, ret,\n\t\t\tisCustomProp = rcustomProp.test(name),\n\n\t\t\t// Support: Firefox 51+\n\t\t\t// Retrieving style before computed somehow\n\t\t\t// fixes an issue with getting wrong values\n\t\t\t// on detached elements\n\t\t\tstyle = elem.style;\n\n\t\tcomputed = computed || getStyles(elem);\n\n\t\t// getPropertyValue is needed for:\n\t\t//   .css('filter') (IE 9 only, trac-12537)\n\t\t//   .css('--customProperty) (gh-3144)\n\t\tif (computed) {\n\n\t\t\t// Support: IE <=9 - 11+\n\t\t\t// IE only supports `\"float\"` in `getPropertyValue`; in computed styles\n\t\t\t// it's only available as `\"cssFloat\"`. We no longer modify properties\n\t\t\t// sent to `.css()` apart from camelCasing, so we need to check both.\n\t\t\t// Normally, this would create difference in behavior: if\n\t\t\t// `getPropertyValue` returns an empty string, the value returned\n\t\t\t// by `.css()` would be `undefined`. This is usually the case for\n\t\t\t// disconnected elements. However, in IE even disconnected elements\n\t\t\t// with no styles return `\"none\"` for `getPropertyValue( \"float\" )`\n\t\t\tret = computed.getPropertyValue(name) || computed[name];\n\n\t\t\tif (isCustomProp && ret) {\n\n\t\t\t\t// Support: Firefox 105+, Chrome <=105+\n\t\t\t\t// Spec requires trimming whitespace for custom properties (gh-4926).\n\t\t\t\t// Firefox only trims leading whitespace. Chrome just collapses\n\t\t\t\t// both leading & trailing whitespace to a single space.\n\t\t\t\t//\n\t\t\t\t// Fall back to `undefined` if empty string returned.\n\t\t\t\t// This collapses a missing definition with property defined\n\t\t\t\t// and set to an empty string but there's no standard API\n\t\t\t\t// allowing us to differentiate them without a performance penalty\n\t\t\t\t// and returning `undefined` aligns with older jQuery.\n\t\t\t\t//\n\t\t\t\t// rtrimCSS treats U+000D CARRIAGE RETURN and U+000C FORM FEED\n\t\t\t\t// as whitespace while CSS does not, but this is not a problem\n\t\t\t\t// because CSS preprocessing replaces them with U+000A LINE FEED\n\t\t\t\t// (which *is* CSS whitespace)\n\t\t\t\t// https://www.w3.org/TR/css-syntax-3/#input-preprocessing\n\t\t\t\tret = ret.replace(rtrimCSS, \"$1\") || undefined;\n\t\t\t}\n\n\t\t\tif (ret === \"\" && !isAttached(elem)) {\n\t\t\t\tret = jQuery.style(elem, name);\n\t\t\t}\n\n\t\t\t// A tribute to the \"awesome hack by Dean Edwards\"\n\t\t\t// Android Browser returns percentage for some values,\n\t\t\t// but width seems to be reliably pixels.\n\t\t\t// This is against the CSSOM draft spec:\n\t\t\t// https://drafts.csswg.org/cssom/#resolved-values\n\t\t\tif (!support.pixelBoxStyles() && rnumnonpx.test(ret) && rboxStyle.test(name)) {\n\n\t\t\t\t// Remember the original values\n\t\t\t\twidth = style.width;\n\t\t\t\tminWidth = style.minWidth;\n\t\t\t\tmaxWidth = style.maxWidth;\n\n\t\t\t\t// Put in the new values to get a computed value out\n\t\t\t\tstyle.minWidth = style.maxWidth = style.width = ret;\n\t\t\t\tret = computed.width;\n\n\t\t\t\t// Revert the changed values\n\t\t\t\tstyle.width = width;\n\t\t\t\tstyle.minWidth = minWidth;\n\t\t\t\tstyle.maxWidth = maxWidth;\n\t\t\t}\n\t\t}\n\n\t\treturn ret !== undefined ?\n\n\t\t\t// Support: IE <=9 - 11 only\n\t\t\t// IE returns zIndex value as an integer.\n\t\t\tret + \"\" :\n\t\t\tret;\n\t}\n\n\n\tfunction addGetHookIf(conditionFn, hookFn) {\n\n\t\t// Define the hook, we'll check on the first run if it's really needed.\n\t\treturn {\n\t\t\tget: function () {\n\t\t\t\tif (conditionFn()) {\n\n\t\t\t\t\t// Hook not needed (or it's not possible to use it due\n\t\t\t\t\t// to missing dependency), remove it.\n\t\t\t\t\tdelete this.get;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Hook needed; redefine it so that the support test is not executed again.\n\t\t\t\treturn (this.get = hookFn).apply(this, arguments);\n\t\t\t}\n\t\t};\n\t}\n\n\n\tvar cssPrefixes = [\"Webkit\", \"Moz\", \"ms\"],\n\t\temptyStyle = document.createElement(\"div\").style,\n\t\tvendorProps = {};\n\n\t// Return a vendor-prefixed property or undefined\n\tfunction vendorPropName(name) {\n\n\t\t// Check for vendor prefixed names\n\t\tvar capName = name[0].toUpperCase() + name.slice(1),\n\t\t\ti = cssPrefixes.length;\n\n\t\twhile (i--) {\n\t\t\tname = cssPrefixes[i] + capName;\n\t\t\tif (name in emptyStyle) {\n\t\t\t\treturn name;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return a potentially-mapped jQuery.cssProps or vendor prefixed property\n\tfunction finalPropName(name) {\n\t\tvar final = jQuery.cssProps[name] || vendorProps[name];\n\n\t\tif (final) {\n\t\t\treturn final;\n\t\t}\n\t\tif (name in emptyStyle) {\n\t\t\treturn name;\n\t\t}\n\t\treturn vendorProps[name] = vendorPropName(name) || name;\n\t}\n\n\n\tvar\n\n\t\t// Swappable if display is none or starts with table\n\t\t// except \"table\", \"table-cell\", or \"table-caption\"\n\t\t// See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display\n\t\trdisplayswap = /^(none|table(?!-c[ea]).+)/,\n\t\tcssShow = { position: \"absolute\", visibility: \"hidden\", display: \"block\" },\n\t\tcssNormalTransform = {\n\t\t\tletterSpacing: \"0\",\n\t\t\tfontWeight: \"400\"\n\t\t};\n\n\tfunction setPositiveNumber(_elem, value, subtract) {\n\n\t\t// Any relative (+/-) values have already been\n\t\t// normalized at this point\n\t\tvar matches = rcssNum.exec(value);\n\t\treturn matches ?\n\n\t\t\t// Guard against undefined \"subtract\", e.g., when used as in cssHooks\n\t\t\tMath.max(0, matches[2] - (subtract || 0)) + (matches[3] || \"px\") :\n\t\t\tvalue;\n\t}\n\n\tfunction boxModelAdjustment(elem, dimension, box, isBorderBox, styles, computedVal) {\n\t\tvar i = dimension === \"width\" ? 1 : 0,\n\t\t\textra = 0,\n\t\t\tdelta = 0,\n\t\t\tmarginDelta = 0;\n\n\t\t// Adjustment may not be necessary\n\t\tif (box === (isBorderBox ? \"border\" : \"content\")) {\n\t\t\treturn 0;\n\t\t}\n\n\t\tfor (; i < 4; i += 2) {\n\n\t\t\t// Both box models exclude margin\n\t\t\t// Count margin delta separately to only add it after scroll gutter adjustment.\n\t\t\t// This is needed to make negative margins work with `outerHeight( true )` (gh-3982).\n\t\t\tif (box === \"margin\") {\n\t\t\t\tmarginDelta += jQuery.css(elem, box + cssExpand[i], true, styles);\n\t\t\t}\n\n\t\t\t// If we get here with a content-box, we're seeking \"padding\" or \"border\" or \"margin\"\n\t\t\tif (!isBorderBox) {\n\n\t\t\t\t// Add padding\n\t\t\t\tdelta += jQuery.css(elem, \"padding\" + cssExpand[i], true, styles);\n\n\t\t\t\t// For \"border\" or \"margin\", add border\n\t\t\t\tif (box !== \"padding\") {\n\t\t\t\t\tdelta += jQuery.css(elem, \"border\" + cssExpand[i] + \"Width\", true, styles);\n\n\t\t\t\t\t// But still keep track of it otherwise\n\t\t\t\t} else {\n\t\t\t\t\textra += jQuery.css(elem, \"border\" + cssExpand[i] + \"Width\", true, styles);\n\t\t\t\t}\n\n\t\t\t\t// If we get here with a border-box (content + padding + border), we're seeking \"content\" or\n\t\t\t\t// \"padding\" or \"margin\"\n\t\t\t} else {\n\n\t\t\t\t// For \"content\", subtract padding\n\t\t\t\tif (box === \"content\") {\n\t\t\t\t\tdelta -= jQuery.css(elem, \"padding\" + cssExpand[i], true, styles);\n\t\t\t\t}\n\n\t\t\t\t// For \"content\" or \"padding\", subtract border\n\t\t\t\tif (box !== \"margin\") {\n\t\t\t\t\tdelta -= jQuery.css(elem, \"border\" + cssExpand[i] + \"Width\", true, styles);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Account for positive content-box scroll gutter when requested by providing computedVal\n\t\tif (!isBorderBox && computedVal >= 0) {\n\n\t\t\t// offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border\n\t\t\t// Assuming integer scroll gutter, subtract the rest and round down\n\t\t\tdelta += Math.max(0, Math.ceil(\n\t\t\t\telem[\"offset\" + dimension[0].toUpperCase() + dimension.slice(1)] -\n\t\t\t\tcomputedVal -\n\t\t\t\tdelta -\n\t\t\t\textra -\n\t\t\t\t0.5\n\n\t\t\t\t// If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter\n\t\t\t\t// Use an explicit zero to avoid NaN (gh-3964)\n\t\t\t)) || 0;\n\t\t}\n\n\t\treturn delta + marginDelta;\n\t}\n\n\tfunction getWidthOrHeight(elem, dimension, extra) {\n\n\t\t// Start with computed style\n\t\tvar styles = getStyles(elem),\n\n\t\t\t// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322).\n\t\t\t// Fake content-box until we know it's needed to know the true value.\n\t\t\tboxSizingNeeded = !support.boxSizingReliable() || extra,\n\t\t\tisBorderBox = boxSizingNeeded &&\n\t\t\t\tjQuery.css(elem, \"boxSizing\", false, styles) === \"border-box\",\n\t\t\tvalueIsBorderBox = isBorderBox,\n\n\t\t\tval = curCSS(elem, dimension, styles),\n\t\t\toffsetProp = \"offset\" + dimension[0].toUpperCase() + dimension.slice(1);\n\n\t\t// Support: Firefox <=54\n\t\t// Return a confounding non-pixel value or feign ignorance, as appropriate.\n\t\tif (rnumnonpx.test(val)) {\n\t\t\tif (!extra) {\n\t\t\t\treturn val;\n\t\t\t}\n\t\t\tval = \"auto\";\n\t\t}\n\n\n\t\t// Support: IE 9 - 11 only\n\t\t// Use offsetWidth/offsetHeight for when box sizing is unreliable.\n\t\t// In those cases, the computed value can be trusted to be border-box.\n\t\tif ((!support.boxSizingReliable() && isBorderBox ||\n\n\t\t\t// Support: IE 10 - 11+, Edge 15 - 18+\n\t\t\t// IE/Edge misreport `getComputedStyle` of table rows with width/height\n\t\t\t// set in CSS while `offset*` properties report correct values.\n\t\t\t// Interestingly, in some cases IE 9 doesn't suffer from this issue.\n\t\t\t!support.reliableTrDimensions() && nodeName(elem, \"tr\") ||\n\n\t\t\t// Fall back to offsetWidth/offsetHeight when value is \"auto\"\n\t\t\t// This happens for inline elements with no explicit setting (gh-3571)\n\t\t\tval === \"auto\" ||\n\n\t\t\t// Support: Android <=4.1 - 4.3 only\n\t\t\t// Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602)\n\t\t\t!parseFloat(val) && jQuery.css(elem, \"display\", false, styles) === \"inline\") &&\n\n\t\t\t// Make sure the element is visible & connected\n\t\t\telem.getClientRects().length) {\n\n\t\t\tisBorderBox = jQuery.css(elem, \"boxSizing\", false, styles) === \"border-box\";\n\n\t\t\t// Where available, offsetWidth/offsetHeight approximate border box dimensions.\n\t\t\t// Where not available (e.g., SVG), assume unreliable box-sizing and interpret the\n\t\t\t// retrieved value as a content box dimension.\n\t\t\tvalueIsBorderBox = offsetProp in elem;\n\t\t\tif (valueIsBorderBox) {\n\t\t\t\tval = elem[offsetProp];\n\t\t\t}\n\t\t}\n\n\t\t// Normalize \"\" and auto\n\t\tval = parseFloat(val) || 0;\n\n\t\t// Adjust for the element's box model\n\t\treturn (val +\n\t\t\tboxModelAdjustment(\n\t\t\t\telem,\n\t\t\t\tdimension,\n\t\t\t\textra || (isBorderBox ? \"border\" : \"content\"),\n\t\t\t\tvalueIsBorderBox,\n\t\t\t\tstyles,\n\n\t\t\t\t// Provide the current computed size to request scroll gutter calculation (gh-3589)\n\t\t\t\tval\n\t\t\t)\n\t\t) + \"px\";\n\t}\n\n\tjQuery.extend({\n\n\t\t// Add in style property hooks for overriding the default\n\t\t// behavior of getting and setting a style property\n\t\tcssHooks: {\n\t\t\topacity: {\n\t\t\t\tget: function (elem, computed) {\n\t\t\t\t\tif (computed) {\n\n\t\t\t\t\t\t// We should always get a number back from opacity\n\t\t\t\t\t\tvar ret = curCSS(elem, \"opacity\");\n\t\t\t\t\t\treturn ret === \"\" ? \"1\" : ret;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t// Don't automatically add \"px\" to these possibly-unitless properties\n\t\tcssNumber: {\n\t\t\tanimationIterationCount: true,\n\t\t\taspectRatio: true,\n\t\t\tborderImageSlice: true,\n\t\t\tcolumnCount: true,\n\t\t\tflexGrow: true,\n\t\t\tflexShrink: true,\n\t\t\tfontWeight: true,\n\t\t\tgridArea: true,\n\t\t\tgridColumn: true,\n\t\t\tgridColumnEnd: true,\n\t\t\tgridColumnStart: true,\n\t\t\tgridRow: true,\n\t\t\tgridRowEnd: true,\n\t\t\tgridRowStart: true,\n\t\t\tlineHeight: true,\n\t\t\topacity: true,\n\t\t\torder: true,\n\t\t\torphans: true,\n\t\t\tscale: true,\n\t\t\twidows: true,\n\t\t\tzIndex: true,\n\t\t\tzoom: true,\n\n\t\t\t// SVG-related\n\t\t\tfillOpacity: true,\n\t\t\tfloodOpacity: true,\n\t\t\tstopOpacity: true,\n\t\t\tstrokeMiterlimit: true,\n\t\t\tstrokeOpacity: true\n\t\t},\n\n\t\t// Add in properties whose names you wish to fix before\n\t\t// setting or getting the value\n\t\tcssProps: {},\n\n\t\t// Get and set the style property on a DOM Node\n\t\tstyle: function (elem, name, value, extra) {\n\n\t\t\t// Don't set styles on text and comment nodes\n\t\t\tif (!elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Make sure that we're working with the right name\n\t\t\tvar ret, type, hooks,\n\t\t\t\torigName = camelCase(name),\n\t\t\t\tisCustomProp = rcustomProp.test(name),\n\t\t\t\tstyle = elem.style;\n\n\t\t\t// Make sure that we're working with the right name. We don't\n\t\t\t// want to query the value if it is a CSS custom property\n\t\t\t// since they are user-defined.\n\t\t\tif (!isCustomProp) {\n\t\t\t\tname = finalPropName(origName);\n\t\t\t}\n\n\t\t\t// Gets hook for the prefixed version, then unprefixed version\n\t\t\thooks = jQuery.cssHooks[name] || jQuery.cssHooks[origName];\n\n\t\t\t// Check if we're setting a value\n\t\t\tif (value !== undefined) {\n\t\t\t\ttype = typeof value;\n\n\t\t\t\t// Convert \"+=\" or \"-=\" to relative numbers (trac-7345)\n\t\t\t\tif (type === \"string\" && (ret = rcssNum.exec(value)) && ret[1]) {\n\t\t\t\t\tvalue = adjustCSS(elem, name, ret);\n\n\t\t\t\t\t// Fixes bug trac-9237\n\t\t\t\t\ttype = \"number\";\n\t\t\t\t}\n\n\t\t\t\t// Make sure that null and NaN values aren't set (trac-7116)\n\t\t\t\tif (value == null || value !== value) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// If a number was passed in, add the unit (except for certain CSS properties)\n\t\t\t\t// The isCustomProp check can be removed in jQuery 4.0 when we only auto-append\n\t\t\t\t// \"px\" to a few hardcoded values.\n\t\t\t\tif (type === \"number\" && !isCustomProp) {\n\t\t\t\t\tvalue += ret && ret[3] || (jQuery.cssNumber[origName] ? \"\" : \"px\");\n\t\t\t\t}\n\n\t\t\t\t// background-* props affect original clone's values\n\t\t\t\tif (!support.clearCloneStyle && value === \"\" && name.indexOf(\"background\") === 0) {\n\t\t\t\t\tstyle[name] = \"inherit\";\n\t\t\t\t}\n\n\t\t\t\t// If a hook was provided, use that value, otherwise just set the specified value\n\t\t\t\tif (!hooks || !(\"set\" in hooks) ||\n\t\t\t\t\t(value = hooks.set(elem, value, extra)) !== undefined) {\n\n\t\t\t\t\tif (isCustomProp) {\n\t\t\t\t\t\tstyle.setProperty(name, value);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tstyle[name] = value;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\t// If a hook was provided get the non-computed value from there\n\t\t\t\tif (hooks && \"get\" in hooks &&\n\t\t\t\t\t(ret = hooks.get(elem, false, extra)) !== undefined) {\n\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\n\t\t\t\t// Otherwise just get the value from the style object\n\t\t\t\treturn style[name];\n\t\t\t}\n\t\t},\n\n\t\tcss: function (elem, name, extra, styles) {\n\t\t\tvar val, num, hooks,\n\t\t\t\torigName = camelCase(name),\n\t\t\t\tisCustomProp = rcustomProp.test(name);\n\n\t\t\t// Make sure that we're working with the right name. We don't\n\t\t\t// want to modify the value if it is a CSS custom property\n\t\t\t// since they are user-defined.\n\t\t\tif (!isCustomProp) {\n\t\t\t\tname = finalPropName(origName);\n\t\t\t}\n\n\t\t\t// Try prefixed name followed by the unprefixed name\n\t\t\thooks = jQuery.cssHooks[name] || jQuery.cssHooks[origName];\n\n\t\t\t// If a hook was provided get the computed value from there\n\t\t\tif (hooks && \"get\" in hooks) {\n\t\t\t\tval = hooks.get(elem, true, extra);\n\t\t\t}\n\n\t\t\t// Otherwise, if a way to get the computed value exists, use that\n\t\t\tif (val === undefined) {\n\t\t\t\tval = curCSS(elem, name, styles);\n\t\t\t}\n\n\t\t\t// Convert \"normal\" to computed value\n\t\t\tif (val === \"normal\" && name in cssNormalTransform) {\n\t\t\t\tval = cssNormalTransform[name];\n\t\t\t}\n\n\t\t\t// Make numeric if forced or a qualifier was provided and val looks numeric\n\t\t\tif (extra === \"\" || extra) {\n\t\t\t\tnum = parseFloat(val);\n\t\t\t\treturn extra === true || isFinite(num) ? num || 0 : val;\n\t\t\t}\n\n\t\t\treturn val;\n\t\t}\n\t});\n\n\tjQuery.each([\"height\", \"width\"], function (_i, dimension) {\n\t\tjQuery.cssHooks[dimension] = {\n\t\t\tget: function (elem, computed, extra) {\n\t\t\t\tif (computed) {\n\n\t\t\t\t\t// Certain elements can have dimension info if we invisibly show them\n\t\t\t\t\t// but it must have a current display style that would benefit\n\t\t\t\t\treturn rdisplayswap.test(jQuery.css(elem, \"display\")) &&\n\n\t\t\t\t\t\t// Support: Safari 8+\n\t\t\t\t\t\t// Table columns in Safari have non-zero offsetWidth & zero\n\t\t\t\t\t\t// getBoundingClientRect().width unless display is changed.\n\t\t\t\t\t\t// Support: IE <=11 only\n\t\t\t\t\t\t// Running getBoundingClientRect on a disconnected node\n\t\t\t\t\t\t// in IE throws an error.\n\t\t\t\t\t\t(!elem.getClientRects().length || !elem.getBoundingClientRect().width) ?\n\t\t\t\t\t\tswap(elem, cssShow, function () {\n\t\t\t\t\t\t\treturn getWidthOrHeight(elem, dimension, extra);\n\t\t\t\t\t\t}) :\n\t\t\t\t\t\tgetWidthOrHeight(elem, dimension, extra);\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tset: function (elem, value, extra) {\n\t\t\t\tvar matches,\n\t\t\t\t\tstyles = getStyles(elem),\n\n\t\t\t\t\t// Only read styles.position if the test has a chance to fail\n\t\t\t\t\t// to avoid forcing a reflow.\n\t\t\t\t\tscrollboxSizeBuggy = !support.scrollboxSize() &&\n\t\t\t\t\t\tstyles.position === \"absolute\",\n\n\t\t\t\t\t// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991)\n\t\t\t\t\tboxSizingNeeded = scrollboxSizeBuggy || extra,\n\t\t\t\t\tisBorderBox = boxSizingNeeded &&\n\t\t\t\t\t\tjQuery.css(elem, \"boxSizing\", false, styles) === \"border-box\",\n\t\t\t\t\tsubtract = extra ?\n\t\t\t\t\t\tboxModelAdjustment(\n\t\t\t\t\t\t\telem,\n\t\t\t\t\t\t\tdimension,\n\t\t\t\t\t\t\textra,\n\t\t\t\t\t\t\tisBorderBox,\n\t\t\t\t\t\t\tstyles\n\t\t\t\t\t\t) :\n\t\t\t\t\t\t0;\n\n\t\t\t\t// Account for unreliable border-box dimensions by comparing offset* to computed and\n\t\t\t\t// faking a content-box to get border and padding (gh-3699)\n\t\t\t\tif (isBorderBox && scrollboxSizeBuggy) {\n\t\t\t\t\tsubtract -= Math.ceil(\n\t\t\t\t\t\telem[\"offset\" + dimension[0].toUpperCase() + dimension.slice(1)] -\n\t\t\t\t\t\tparseFloat(styles[dimension]) -\n\t\t\t\t\t\tboxModelAdjustment(elem, dimension, \"border\", false, styles) -\n\t\t\t\t\t\t0.5\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\t// Convert to pixels if value adjustment is needed\n\t\t\t\tif (subtract && (matches = rcssNum.exec(value)) &&\n\t\t\t\t\t(matches[3] || \"px\") !== \"px\") {\n\n\t\t\t\t\telem.style[dimension] = value;\n\t\t\t\t\tvalue = jQuery.css(elem, dimension);\n\t\t\t\t}\n\n\t\t\t\treturn setPositiveNumber(elem, value, subtract);\n\t\t\t}\n\t\t};\n\t});\n\n\tjQuery.cssHooks.marginLeft = addGetHookIf(support.reliableMarginLeft,\n\t\tfunction (elem, computed) {\n\t\t\tif (computed) {\n\t\t\t\treturn (parseFloat(curCSS(elem, \"marginLeft\")) ||\n\t\t\t\t\telem.getBoundingClientRect().left -\n\t\t\t\t\tswap(elem, { marginLeft: 0 }, function () {\n\t\t\t\t\t\treturn elem.getBoundingClientRect().left;\n\t\t\t\t\t})\n\t\t\t\t) + \"px\";\n\t\t\t}\n\t\t}\n\t);\n\n\t// These hooks are used by animate to expand properties\n\tjQuery.each({\n\t\tmargin: \"\",\n\t\tpadding: \"\",\n\t\tborder: \"Width\"\n\t}, function (prefix, suffix) {\n\t\tjQuery.cssHooks[prefix + suffix] = {\n\t\t\texpand: function (value) {\n\t\t\t\tvar i = 0,\n\t\t\t\t\texpanded = {},\n\n\t\t\t\t\t// Assumes a single number if not a string\n\t\t\t\t\tparts = typeof value === \"string\" ? value.split(\" \") : [value];\n\n\t\t\t\tfor (; i < 4; i++) {\n\t\t\t\t\texpanded[prefix + cssExpand[i] + suffix] =\n\t\t\t\t\t\tparts[i] || parts[i - 2] || parts[0];\n\t\t\t\t}\n\n\t\t\t\treturn expanded;\n\t\t\t}\n\t\t};\n\n\t\tif (prefix !== \"margin\") {\n\t\t\tjQuery.cssHooks[prefix + suffix].set = setPositiveNumber;\n\t\t}\n\t});\n\n\tjQuery.fn.extend({\n\t\tcss: function (name, value) {\n\t\t\treturn access(this, function (elem, name, value) {\n\t\t\t\tvar styles, len,\n\t\t\t\t\tmap = {},\n\t\t\t\t\ti = 0;\n\n\t\t\t\tif (Array.isArray(name)) {\n\t\t\t\t\tstyles = getStyles(elem);\n\t\t\t\t\tlen = name.length;\n\n\t\t\t\t\tfor (; i < len; i++) {\n\t\t\t\t\t\tmap[name[i]] = jQuery.css(elem, name[i], false, styles);\n\t\t\t\t\t}\n\n\t\t\t\t\treturn map;\n\t\t\t\t}\n\n\t\t\t\treturn value !== undefined ?\n\t\t\t\t\tjQuery.style(elem, name, value) :\n\t\t\t\t\tjQuery.css(elem, name);\n\t\t\t}, name, value, arguments.length > 1);\n\t\t}\n\t});\n\n\n\tfunction Tween(elem, options, prop, end, easing) {\n\t\treturn new Tween.prototype.init(elem, options, prop, end, easing);\n\t}\n\tjQuery.Tween = Tween;\n\n\tTween.prototype = {\n\t\tconstructor: Tween,\n\t\tinit: function (elem, options, prop, end, easing, unit) {\n\t\t\tthis.elem = elem;\n\t\t\tthis.prop = prop;\n\t\t\tthis.easing = easing || jQuery.easing._default;\n\t\t\tthis.options = options;\n\t\t\tthis.start = this.now = this.cur();\n\t\t\tthis.end = end;\n\t\t\tthis.unit = unit || (jQuery.cssNumber[prop] ? \"\" : \"px\");\n\t\t},\n\t\tcur: function () {\n\t\t\tvar hooks = Tween.propHooks[this.prop];\n\n\t\t\treturn hooks && hooks.get ?\n\t\t\t\thooks.get(this) :\n\t\t\t\tTween.propHooks._default.get(this);\n\t\t},\n\t\trun: function (percent) {\n\t\t\tvar eased,\n\t\t\t\thooks = Tween.propHooks[this.prop];\n\n\t\t\tif (this.options.duration) {\n\t\t\t\tthis.pos = eased = jQuery.easing[this.easing](\n\t\t\t\t\tpercent, this.options.duration * percent, 0, 1, this.options.duration\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tthis.pos = eased = percent;\n\t\t\t}\n\t\t\tthis.now = (this.end - this.start) * eased + this.start;\n\n\t\t\tif (this.options.step) {\n\t\t\t\tthis.options.step.call(this.elem, this.now, this);\n\t\t\t}\n\n\t\t\tif (hooks && hooks.set) {\n\t\t\t\thooks.set(this);\n\t\t\t} else {\n\t\t\t\tTween.propHooks._default.set(this);\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t};\n\n\tTween.prototype.init.prototype = Tween.prototype;\n\n\tTween.propHooks = {\n\t\t_default: {\n\t\t\tget: function (tween) {\n\t\t\t\tvar result;\n\n\t\t\t\t// Use a property on the element directly when it is not a DOM element,\n\t\t\t\t// or when there is no matching style property that exists.\n\t\t\t\tif (tween.elem.nodeType !== 1 ||\n\t\t\t\t\ttween.elem[tween.prop] != null && tween.elem.style[tween.prop] == null) {\n\t\t\t\t\treturn tween.elem[tween.prop];\n\t\t\t\t}\n\n\t\t\t\t// Passing an empty string as a 3rd parameter to .css will automatically\n\t\t\t\t// attempt a parseFloat and fallback to a string if the parse fails.\n\t\t\t\t// Simple values such as \"10px\" are parsed to Float;\n\t\t\t\t// complex values such as \"rotate(1rad)\" are returned as-is.\n\t\t\t\tresult = jQuery.css(tween.elem, tween.prop, \"\");\n\n\t\t\t\t// Empty strings, null, undefined and \"auto\" are converted to 0.\n\t\t\t\treturn !result || result === \"auto\" ? 0 : result;\n\t\t\t},\n\t\t\tset: function (tween) {\n\n\t\t\t\t// Use step hook for back compat.\n\t\t\t\t// Use cssHook if its there.\n\t\t\t\t// Use .style if available and use plain properties where available.\n\t\t\t\tif (jQuery.fx.step[tween.prop]) {\n\t\t\t\t\tjQuery.fx.step[tween.prop](tween);\n\t\t\t\t} else if (tween.elem.nodeType === 1 && (\n\t\t\t\t\tjQuery.cssHooks[tween.prop] ||\n\t\t\t\t\ttween.elem.style[finalPropName(tween.prop)] != null)) {\n\t\t\t\t\tjQuery.style(tween.elem, tween.prop, tween.now + tween.unit);\n\t\t\t\t} else {\n\t\t\t\t\ttween.elem[tween.prop] = tween.now;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t// Support: IE <=9 only\n\t// Panic based approach to setting things on disconnected nodes\n\tTween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {\n\t\tset: function (tween) {\n\t\t\tif (tween.elem.nodeType && tween.elem.parentNode) {\n\t\t\t\ttween.elem[tween.prop] = tween.now;\n\t\t\t}\n\t\t}\n\t};\n\n\tjQuery.easing = {\n\t\tlinear: function (p) {\n\t\t\treturn p;\n\t\t},\n\t\tswing: function (p) {\n\t\t\treturn 0.5 - Math.cos(p * Math.PI) / 2;\n\t\t},\n\t\t_default: \"swing\"\n\t};\n\n\tjQuery.fx = Tween.prototype.init;\n\n\t// Back compat <1.8 extension point\n\tjQuery.fx.step = {};\n\n\n\n\n\tvar\n\t\tfxNow, inProgress,\n\t\trfxtypes = /^(?:toggle|show|hide)$/,\n\t\trrun = /queueHooks$/;\n\n\tfunction schedule() {\n\t\tif (inProgress) {\n\t\t\tif (document.hidden === false && window.requestAnimationFrame) {\n\t\t\t\twindow.requestAnimationFrame(schedule);\n\t\t\t} else {\n\t\t\t\twindow.setTimeout(schedule, jQuery.fx.interval);\n\t\t\t}\n\n\t\t\tjQuery.fx.tick();\n\t\t}\n\t}\n\n\t// Animations created synchronously will run synchronously\n\tfunction createFxNow() {\n\t\twindow.setTimeout(function () {\n\t\t\tfxNow = undefined;\n\t\t});\n\t\treturn (fxNow = Date.now());\n\t}\n\n\t// Generate parameters to create a standard animation\n\tfunction genFx(type, includeWidth) {\n\t\tvar which,\n\t\t\ti = 0,\n\t\t\tattrs = { height: type };\n\n\t\t// If we include width, step value is 1 to do all cssExpand values,\n\t\t// otherwise step value is 2 to skip over Left and Right\n\t\tincludeWidth = includeWidth ? 1 : 0;\n\t\tfor (; i < 4; i += 2 - includeWidth) {\n\t\t\twhich = cssExpand[i];\n\t\t\tattrs[\"margin\" + which] = attrs[\"padding\" + which] = type;\n\t\t}\n\n\t\tif (includeWidth) {\n\t\t\tattrs.opacity = attrs.width = type;\n\t\t}\n\n\t\treturn attrs;\n\t}\n\n\tfunction createTween(value, prop, animation) {\n\t\tvar tween,\n\t\t\tcollection = (Animation.tweeners[prop] || []).concat(Animation.tweeners[\"*\"]),\n\t\t\tindex = 0,\n\t\t\tlength = collection.length;\n\t\tfor (; index < length; index++) {\n\t\t\tif ((tween = collection[index].call(animation, prop, value))) {\n\n\t\t\t\t// We're done with this property\n\t\t\t\treturn tween;\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction defaultPrefilter(elem, props, opts) {\n\t\tvar prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display,\n\t\t\tisBox = \"width\" in props || \"height\" in props,\n\t\t\tanim = this,\n\t\t\torig = {},\n\t\t\tstyle = elem.style,\n\t\t\thidden = elem.nodeType && isHiddenWithinTree(elem),\n\t\t\tdataShow = dataPriv.get(elem, \"fxshow\");\n\n\t\t// Queue-skipping animations hijack the fx hooks\n\t\tif (!opts.queue) {\n\t\t\thooks = jQuery._queueHooks(elem, \"fx\");\n\t\t\tif (hooks.unqueued == null) {\n\t\t\t\thooks.unqueued = 0;\n\t\t\t\toldfire = hooks.empty.fire;\n\t\t\t\thooks.empty.fire = function () {\n\t\t\t\t\tif (!hooks.unqueued) {\n\t\t\t\t\t\toldfire();\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t\thooks.unqueued++;\n\n\t\t\tanim.always(function () {\n\n\t\t\t\t// Ensure the complete handler is called before this completes\n\t\t\t\tanim.always(function () {\n\t\t\t\t\thooks.unqueued--;\n\t\t\t\t\tif (!jQuery.queue(elem, \"fx\").length) {\n\t\t\t\t\t\thooks.empty.fire();\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\n\t\t// Detect show/hide animations\n\t\tfor (prop in props) {\n\t\t\tvalue = props[prop];\n\t\t\tif (rfxtypes.test(value)) {\n\t\t\t\tdelete props[prop];\n\t\t\t\ttoggle = toggle || value === \"toggle\";\n\t\t\t\tif (value === (hidden ? \"hide\" : \"show\")) {\n\n\t\t\t\t\t// Pretend to be hidden if this is a \"show\" and\n\t\t\t\t\t// there is still data from a stopped show/hide\n\t\t\t\t\tif (value === \"show\" && dataShow && dataShow[prop] !== undefined) {\n\t\t\t\t\t\thidden = true;\n\n\t\t\t\t\t\t// Ignore all other no-op show/hide data\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\torig[prop] = dataShow && dataShow[prop] || jQuery.style(elem, prop);\n\t\t\t}\n\t\t}\n\n\t\t// Bail out if this is a no-op like .hide().hide()\n\t\tpropTween = !jQuery.isEmptyObject(props);\n\t\tif (!propTween && jQuery.isEmptyObject(orig)) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Restrict \"overflow\" and \"display\" styles during box animations\n\t\tif (isBox && elem.nodeType === 1) {\n\n\t\t\t// Support: IE <=9 - 11, Edge 12 - 15\n\t\t\t// Record all 3 overflow attributes because IE does not infer the shorthand\n\t\t\t// from identically-valued overflowX and overflowY and Edge just mirrors\n\t\t\t// the overflowX value there.\n\t\t\topts.overflow = [style.overflow, style.overflowX, style.overflowY];\n\n\t\t\t// Identify a display type, preferring old show/hide data over the CSS cascade\n\t\t\trestoreDisplay = dataShow && dataShow.display;\n\t\t\tif (restoreDisplay == null) {\n\t\t\t\trestoreDisplay = dataPriv.get(elem, \"display\");\n\t\t\t}\n\t\t\tdisplay = jQuery.css(elem, \"display\");\n\t\t\tif (display === \"none\") {\n\t\t\t\tif (restoreDisplay) {\n\t\t\t\t\tdisplay = restoreDisplay;\n\t\t\t\t} else {\n\n\t\t\t\t\t// Get nonempty value(s) by temporarily forcing visibility\n\t\t\t\t\tshowHide([elem], true);\n\t\t\t\t\trestoreDisplay = elem.style.display || restoreDisplay;\n\t\t\t\t\tdisplay = jQuery.css(elem, \"display\");\n\t\t\t\t\tshowHide([elem]);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Animate inline elements as inline-block\n\t\t\tif (display === \"inline\" || display === \"inline-block\" && restoreDisplay != null) {\n\t\t\t\tif (jQuery.css(elem, \"float\") === \"none\") {\n\n\t\t\t\t\t// Restore the original display value at the end of pure show/hide animations\n\t\t\t\t\tif (!propTween) {\n\t\t\t\t\t\tanim.done(function () {\n\t\t\t\t\t\t\tstyle.display = restoreDisplay;\n\t\t\t\t\t\t});\n\t\t\t\t\t\tif (restoreDisplay == null) {\n\t\t\t\t\t\t\tdisplay = style.display;\n\t\t\t\t\t\t\trestoreDisplay = display === \"none\" ? \"\" : display;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tstyle.display = \"inline-block\";\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (opts.overflow) {\n\t\t\tstyle.overflow = \"hidden\";\n\t\t\tanim.always(function () {\n\t\t\t\tstyle.overflow = opts.overflow[0];\n\t\t\t\tstyle.overflowX = opts.overflow[1];\n\t\t\t\tstyle.overflowY = opts.overflow[2];\n\t\t\t});\n\t\t}\n\n\t\t// Implement show/hide animations\n\t\tpropTween = false;\n\t\tfor (prop in orig) {\n\n\t\t\t// General show/hide setup for this element animation\n\t\t\tif (!propTween) {\n\t\t\t\tif (dataShow) {\n\t\t\t\t\tif (\"hidden\" in dataShow) {\n\t\t\t\t\t\thidden = dataShow.hidden;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tdataShow = dataPriv.access(elem, \"fxshow\", { display: restoreDisplay });\n\t\t\t\t}\n\n\t\t\t\t// Store hidden/visible for toggle so `.stop().toggle()` \"reverses\"\n\t\t\t\tif (toggle) {\n\t\t\t\t\tdataShow.hidden = !hidden;\n\t\t\t\t}\n\n\t\t\t\t// Show elements before animating them\n\t\t\t\tif (hidden) {\n\t\t\t\t\tshowHide([elem], true);\n\t\t\t\t}\n\n\t\t\t\t/* eslint-disable no-loop-func */\n\n\t\t\t\tanim.done(function () {\n\n\t\t\t\t\t/* eslint-enable no-loop-func */\n\n\t\t\t\t\t// The final step of a \"hide\" animation is actually hiding the element\n\t\t\t\t\tif (!hidden) {\n\t\t\t\t\t\tshowHide([elem]);\n\t\t\t\t\t}\n\t\t\t\t\tdataPriv.remove(elem, \"fxshow\");\n\t\t\t\t\tfor (prop in orig) {\n\t\t\t\t\t\tjQuery.style(elem, prop, orig[prop]);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// Per-property setup\n\t\t\tpropTween = createTween(hidden ? dataShow[prop] : 0, prop, anim);\n\t\t\tif (!(prop in dataShow)) {\n\t\t\t\tdataShow[prop] = propTween.start;\n\t\t\t\tif (hidden) {\n\t\t\t\t\tpropTween.end = propTween.start;\n\t\t\t\t\tpropTween.start = 0;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction propFilter(props, specialEasing) {\n\t\tvar index, name, easing, value, hooks;\n\n\t\t// camelCase, specialEasing and expand cssHook pass\n\t\tfor (index in props) {\n\t\t\tname = camelCase(index);\n\t\t\teasing = specialEasing[name];\n\t\t\tvalue = props[index];\n\t\t\tif (Array.isArray(value)) {\n\t\t\t\teasing = value[1];\n\t\t\t\tvalue = props[index] = value[0];\n\t\t\t}\n\n\t\t\tif (index !== name) {\n\t\t\t\tprops[name] = value;\n\t\t\t\tdelete props[index];\n\t\t\t}\n\n\t\t\thooks = jQuery.cssHooks[name];\n\t\t\tif (hooks && \"expand\" in hooks) {\n\t\t\t\tvalue = hooks.expand(value);\n\t\t\t\tdelete props[name];\n\n\t\t\t\t// Not quite $.extend, this won't overwrite existing keys.\n\t\t\t\t// Reusing 'index' because we have the correct \"name\"\n\t\t\t\tfor (index in value) {\n\t\t\t\t\tif (!(index in props)) {\n\t\t\t\t\t\tprops[index] = value[index];\n\t\t\t\t\t\tspecialEasing[index] = easing;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tspecialEasing[name] = easing;\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction Animation(elem, properties, options) {\n\t\tvar result,\n\t\t\tstopped,\n\t\t\tindex = 0,\n\t\t\tlength = Animation.prefilters.length,\n\t\t\tdeferred = jQuery.Deferred().always(function () {\n\n\t\t\t\t// Don't match elem in the :animated selector\n\t\t\t\tdelete tick.elem;\n\t\t\t}),\n\t\t\ttick = function () {\n\t\t\t\tif (stopped) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tvar currentTime = fxNow || createFxNow(),\n\t\t\t\t\tremaining = Math.max(0, animation.startTime + animation.duration - currentTime),\n\n\t\t\t\t\t// Support: Android 2.3 only\n\t\t\t\t\t// Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (trac-12497)\n\t\t\t\t\ttemp = remaining / animation.duration || 0,\n\t\t\t\t\tpercent = 1 - temp,\n\t\t\t\t\tindex = 0,\n\t\t\t\t\tlength = animation.tweens.length;\n\n\t\t\t\tfor (; index < length; index++) {\n\t\t\t\t\tanimation.tweens[index].run(percent);\n\t\t\t\t}\n\n\t\t\t\tdeferred.notifyWith(elem, [animation, percent, remaining]);\n\n\t\t\t\t// If there's more to do, yield\n\t\t\t\tif (percent < 1 && length) {\n\t\t\t\t\treturn remaining;\n\t\t\t\t}\n\n\t\t\t\t// If this was an empty animation, synthesize a final progress notification\n\t\t\t\tif (!length) {\n\t\t\t\t\tdeferred.notifyWith(elem, [animation, 1, 0]);\n\t\t\t\t}\n\n\t\t\t\t// Resolve the animation and report its conclusion\n\t\t\t\tdeferred.resolveWith(elem, [animation]);\n\t\t\t\treturn false;\n\t\t\t},\n\t\t\tanimation = deferred.promise({\n\t\t\t\telem: elem,\n\t\t\t\tprops: jQuery.extend({}, properties),\n\t\t\t\topts: jQuery.extend(true, {\n\t\t\t\t\tspecialEasing: {},\n\t\t\t\t\teasing: jQuery.easing._default\n\t\t\t\t}, options),\n\t\t\t\toriginalProperties: properties,\n\t\t\t\toriginalOptions: options,\n\t\t\t\tstartTime: fxNow || createFxNow(),\n\t\t\t\tduration: options.duration,\n\t\t\t\ttweens: [],\n\t\t\t\tcreateTween: function (prop, end) {\n\t\t\t\t\tvar tween = jQuery.Tween(elem, animation.opts, prop, end,\n\t\t\t\t\t\tanimation.opts.specialEasing[prop] || animation.opts.easing);\n\t\t\t\t\tanimation.tweens.push(tween);\n\t\t\t\t\treturn tween;\n\t\t\t\t},\n\t\t\t\tstop: function (gotoEnd) {\n\t\t\t\t\tvar index = 0,\n\n\t\t\t\t\t\t// If we are going to the end, we want to run all the tweens\n\t\t\t\t\t\t// otherwise we skip this part\n\t\t\t\t\t\tlength = gotoEnd ? animation.tweens.length : 0;\n\t\t\t\t\tif (stopped) {\n\t\t\t\t\t\treturn this;\n\t\t\t\t\t}\n\t\t\t\t\tstopped = true;\n\t\t\t\t\tfor (; index < length; index++) {\n\t\t\t\t\t\tanimation.tweens[index].run(1);\n\t\t\t\t\t}\n\n\t\t\t\t\t// Resolve when we played the last frame; otherwise, reject\n\t\t\t\t\tif (gotoEnd) {\n\t\t\t\t\t\tdeferred.notifyWith(elem, [animation, 1, 0]);\n\t\t\t\t\t\tdeferred.resolveWith(elem, [animation, gotoEnd]);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdeferred.rejectWith(elem, [animation, gotoEnd]);\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t}),\n\t\t\tprops = animation.props;\n\n\t\tpropFilter(props, animation.opts.specialEasing);\n\n\t\tfor (; index < length; index++) {\n\t\t\tresult = Animation.prefilters[index].call(animation, elem, props, animation.opts);\n\t\t\tif (result) {\n\t\t\t\tif (isFunction(result.stop)) {\n\t\t\t\t\tjQuery._queueHooks(animation.elem, animation.opts.queue).stop =\n\t\t\t\t\t\tresult.stop.bind(result);\n\t\t\t\t}\n\t\t\t\treturn result;\n\t\t\t}\n\t\t}\n\n\t\tjQuery.map(props, createTween, animation);\n\n\t\tif (isFunction(animation.opts.start)) {\n\t\t\tanimation.opts.start.call(elem, animation);\n\t\t}\n\n\t\t// Attach callbacks from options\n\t\tanimation\n\t\t\t.progress(animation.opts.progress)\n\t\t\t.done(animation.opts.done, animation.opts.complete)\n\t\t\t.fail(animation.opts.fail)\n\t\t\t.always(animation.opts.always);\n\n\t\tjQuery.fx.timer(\n\t\t\tjQuery.extend(tick, {\n\t\t\t\telem: elem,\n\t\t\t\tanim: animation,\n\t\t\t\tqueue: animation.opts.queue\n\t\t\t})\n\t\t);\n\n\t\treturn animation;\n\t}\n\n\tjQuery.Animation = jQuery.extend(Animation, {\n\n\t\ttweeners: {\n\t\t\t\"*\": [function (prop, value) {\n\t\t\t\tvar tween = this.createTween(prop, value);\n\t\t\t\tadjustCSS(tween.elem, prop, rcssNum.exec(value), tween);\n\t\t\t\treturn tween;\n\t\t\t}]\n\t\t},\n\n\t\ttweener: function (props, callback) {\n\t\t\tif (isFunction(props)) {\n\t\t\t\tcallback = props;\n\t\t\t\tprops = [\"*\"];\n\t\t\t} else {\n\t\t\t\tprops = props.match(rnothtmlwhite);\n\t\t\t}\n\n\t\t\tvar prop,\n\t\t\t\tindex = 0,\n\t\t\t\tlength = props.length;\n\n\t\t\tfor (; index < length; index++) {\n\t\t\t\tprop = props[index];\n\t\t\t\tAnimation.tweeners[prop] = Animation.tweeners[prop] || [];\n\t\t\t\tAnimation.tweeners[prop].unshift(callback);\n\t\t\t}\n\t\t},\n\n\t\tprefilters: [defaultPrefilter],\n\n\t\tprefilter: function (callback, prepend) {\n\t\t\tif (prepend) {\n\t\t\t\tAnimation.prefilters.unshift(callback);\n\t\t\t} else {\n\t\t\t\tAnimation.prefilters.push(callback);\n\t\t\t}\n\t\t}\n\t});\n\n\tjQuery.speed = function (speed, easing, fn) {\n\t\tvar opt = speed && typeof speed === \"object\" ? jQuery.extend({}, speed) : {\n\t\t\tcomplete: fn || !fn && easing ||\n\t\t\t\tisFunction(speed) && speed,\n\t\t\tduration: speed,\n\t\t\teasing: fn && easing || easing && !isFunction(easing) && easing\n\t\t};\n\n\t\t// Go to the end state if fx are off\n\t\tif (jQuery.fx.off) {\n\t\t\topt.duration = 0;\n\n\t\t} else {\n\t\t\tif (typeof opt.duration !== \"number\") {\n\t\t\t\tif (opt.duration in jQuery.fx.speeds) {\n\t\t\t\t\topt.duration = jQuery.fx.speeds[opt.duration];\n\n\t\t\t\t} else {\n\t\t\t\t\topt.duration = jQuery.fx.speeds._default;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Normalize opt.queue - true/undefined/null -> \"fx\"\n\t\tif (opt.queue == null || opt.queue === true) {\n\t\t\topt.queue = \"fx\";\n\t\t}\n\n\t\t// Queueing\n\t\topt.old = opt.complete;\n\n\t\topt.complete = function () {\n\t\t\tif (isFunction(opt.old)) {\n\t\t\t\topt.old.call(this);\n\t\t\t}\n\n\t\t\tif (opt.queue) {\n\t\t\t\tjQuery.dequeue(this, opt.queue);\n\t\t\t}\n\t\t};\n\n\t\treturn opt;\n\t};\n\n\tjQuery.fn.extend({\n\t\tfadeTo: function (speed, to, easing, callback) {\n\n\t\t\t// Show any hidden elements after setting opacity to 0\n\t\t\treturn this.filter(isHiddenWithinTree).css(\"opacity\", 0).show()\n\n\t\t\t\t// Animate to the value specified\n\t\t\t\t.end().animate({ opacity: to }, speed, easing, callback);\n\t\t},\n\t\tanimate: function (prop, speed, easing, callback) {\n\t\t\tvar empty = jQuery.isEmptyObject(prop),\n\t\t\t\toptall = jQuery.speed(speed, easing, callback),\n\t\t\t\tdoAnimation = function () {\n\n\t\t\t\t\t// Operate on a copy of prop so per-property easing won't be lost\n\t\t\t\t\tvar anim = Animation(this, jQuery.extend({}, prop), optall);\n\n\t\t\t\t\t// Empty animations, or finishing resolves immediately\n\t\t\t\t\tif (empty || dataPriv.get(this, \"finish\")) {\n\t\t\t\t\t\tanim.stop(true);\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\tdoAnimation.finish = doAnimation;\n\n\t\t\treturn empty || optall.queue === false ?\n\t\t\t\tthis.each(doAnimation) :\n\t\t\t\tthis.queue(optall.queue, doAnimation);\n\t\t},\n\t\tstop: function (type, clearQueue, gotoEnd) {\n\t\t\tvar stopQueue = function (hooks) {\n\t\t\t\tvar stop = hooks.stop;\n\t\t\t\tdelete hooks.stop;\n\t\t\t\tstop(gotoEnd);\n\t\t\t};\n\n\t\t\tif (typeof type !== \"string\") {\n\t\t\t\tgotoEnd = clearQueue;\n\t\t\t\tclearQueue = type;\n\t\t\t\ttype = undefined;\n\t\t\t}\n\t\t\tif (clearQueue) {\n\t\t\t\tthis.queue(type || \"fx\", []);\n\t\t\t}\n\n\t\t\treturn this.each(function () {\n\t\t\t\tvar dequeue = true,\n\t\t\t\t\tindex = type != null && type + \"queueHooks\",\n\t\t\t\t\ttimers = jQuery.timers,\n\t\t\t\t\tdata = dataPriv.get(this);\n\n\t\t\t\tif (index) {\n\t\t\t\t\tif (data[index] && data[index].stop) {\n\t\t\t\t\t\tstopQueue(data[index]);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tfor (index in data) {\n\t\t\t\t\t\tif (data[index] && data[index].stop && rrun.test(index)) {\n\t\t\t\t\t\t\tstopQueue(data[index]);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tfor (index = timers.length; index--;) {\n\t\t\t\t\tif (timers[index].elem === this &&\n\t\t\t\t\t\t(type == null || timers[index].queue === type)) {\n\n\t\t\t\t\t\ttimers[index].anim.stop(gotoEnd);\n\t\t\t\t\t\tdequeue = false;\n\t\t\t\t\t\ttimers.splice(index, 1);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Start the next in the queue if the last step wasn't forced.\n\t\t\t\t// Timers currently will call their complete callbacks, which\n\t\t\t\t// will dequeue but only if they were gotoEnd.\n\t\t\t\tif (dequeue || !gotoEnd) {\n\t\t\t\t\tjQuery.dequeue(this, type);\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\t\tfinish: function (type) {\n\t\t\tif (type !== false) {\n\t\t\t\ttype = type || \"fx\";\n\t\t\t}\n\t\t\treturn this.each(function () {\n\t\t\t\tvar index,\n\t\t\t\t\tdata = dataPriv.get(this),\n\t\t\t\t\tqueue = data[type + \"queue\"],\n\t\t\t\t\thooks = data[type + \"queueHooks\"],\n\t\t\t\t\ttimers = jQuery.timers,\n\t\t\t\t\tlength = queue ? queue.length : 0;\n\n\t\t\t\t// Enable finishing flag on private data\n\t\t\t\tdata.finish = true;\n\n\t\t\t\t// Empty the queue first\n\t\t\t\tjQuery.queue(this, type, []);\n\n\t\t\t\tif (hooks && hooks.stop) {\n\t\t\t\t\thooks.stop.call(this, true);\n\t\t\t\t}\n\n\t\t\t\t// Look for any active animations, and finish them\n\t\t\t\tfor (index = timers.length; index--;) {\n\t\t\t\t\tif (timers[index].elem === this && timers[index].queue === type) {\n\t\t\t\t\t\ttimers[index].anim.stop(true);\n\t\t\t\t\t\ttimers.splice(index, 1);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Look for any animations in the old queue and finish them\n\t\t\t\tfor (index = 0; index < length; index++) {\n\t\t\t\t\tif (queue[index] && queue[index].finish) {\n\t\t\t\t\t\tqueue[index].finish.call(this);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Turn off finishing flag\n\t\t\t\tdelete data.finish;\n\t\t\t});\n\t\t}\n\t});\n\n\tjQuery.each([\"toggle\", \"show\", \"hide\"], function (_i, name) {\n\t\tvar cssFn = jQuery.fn[name];\n\t\tjQuery.fn[name] = function (speed, easing, callback) {\n\t\t\treturn speed == null || typeof speed === \"boolean\" ?\n\t\t\t\tcssFn.apply(this, arguments) :\n\t\t\t\tthis.animate(genFx(name, true), speed, easing, callback);\n\t\t};\n\t});\n\n\t// Generate shortcuts for custom animations\n\tjQuery.each({\n\t\tslideDown: genFx(\"show\"),\n\t\tslideUp: genFx(\"hide\"),\n\t\tslideToggle: genFx(\"toggle\"),\n\t\tfadeIn: { opacity: \"show\" },\n\t\tfadeOut: { opacity: \"hide\" },\n\t\tfadeToggle: { opacity: \"toggle\" }\n\t}, function (name, props) {\n\t\tjQuery.fn[name] = function (speed, easing, callback) {\n\t\t\treturn this.animate(props, speed, easing, callback);\n\t\t};\n\t});\n\n\tjQuery.timers = [];\n\tjQuery.fx.tick = function () {\n\t\tvar timer,\n\t\t\ti = 0,\n\t\t\ttimers = jQuery.timers;\n\n\t\tfxNow = Date.now();\n\n\t\tfor (; i < timers.length; i++) {\n\t\t\ttimer = timers[i];\n\n\t\t\t// Run the timer and safely remove it when done (allowing for external removal)\n\t\t\tif (!timer() && timers[i] === timer) {\n\t\t\t\ttimers.splice(i--, 1);\n\t\t\t}\n\t\t}\n\n\t\tif (!timers.length) {\n\t\t\tjQuery.fx.stop();\n\t\t}\n\t\tfxNow = undefined;\n\t};\n\n\tjQuery.fx.timer = function (timer) {\n\t\tjQuery.timers.push(timer);\n\t\tjQuery.fx.start();\n\t};\n\n\tjQuery.fx.interval = 13;\n\tjQuery.fx.start = function () {\n\t\tif (inProgress) {\n\t\t\treturn;\n\t\t}\n\n\t\tinProgress = true;\n\t\tschedule();\n\t};\n\n\tjQuery.fx.stop = function () {\n\t\tinProgress = null;\n\t};\n\n\tjQuery.fx.speeds = {\n\t\tslow: 600,\n\t\tfast: 200,\n\n\t\t// Default speed\n\t\t_default: 400\n\t};\n\n\n\t// Based off of the plugin by Clint Helfers, with permission.\n\tjQuery.fn.delay = function (time, type) {\n\t\ttime = jQuery.fx ? jQuery.fx.speeds[time] || time : time;\n\t\ttype = type || \"fx\";\n\n\t\treturn this.queue(type, function (next, hooks) {\n\t\t\tvar timeout = window.setTimeout(next, time);\n\t\t\thooks.stop = function () {\n\t\t\t\twindow.clearTimeout(timeout);\n\t\t\t};\n\t\t});\n\t};\n\n\n\t(function () {\n\t\tvar input = document.createElement(\"input\"),\n\t\t\tselect = document.createElement(\"select\"),\n\t\t\topt = select.appendChild(document.createElement(\"option\"));\n\n\t\tinput.type = \"checkbox\";\n\n\t\t// Support: Android <=4.3 only\n\t\t// Default value for a checkbox should be \"on\"\n\t\tsupport.checkOn = input.value !== \"\";\n\n\t\t// Support: IE <=11 only\n\t\t// Must access selectedIndex to make default options select\n\t\tsupport.optSelected = opt.selected;\n\n\t\t// Support: IE <=11 only\n\t\t// An input loses its value after becoming a radio\n\t\tinput = document.createElement(\"input\");\n\t\tinput.value = \"t\";\n\t\tinput.type = \"radio\";\n\t\tsupport.radioValue = input.value === \"t\";\n\t})();\n\n\n\tvar boolHook,\n\t\tattrHandle = jQuery.expr.attrHandle;\n\n\tjQuery.fn.extend({\n\t\tattr: function (name, value) {\n\t\t\treturn access(this, jQuery.attr, name, value, arguments.length > 1);\n\t\t},\n\n\t\tremoveAttr: function (name) {\n\t\t\treturn this.each(function () {\n\t\t\t\tjQuery.removeAttr(this, name);\n\t\t\t});\n\t\t}\n\t});\n\n\tjQuery.extend({\n\t\tattr: function (elem, name, value) {\n\t\t\tvar ret, hooks,\n\t\t\t\tnType = elem.nodeType;\n\n\t\t\t// Don't get/set attributes on text, comment and attribute nodes\n\t\t\tif (nType === 3 || nType === 8 || nType === 2) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Fallback to prop when attributes are not supported\n\t\t\tif (typeof elem.getAttribute === \"undefined\") {\n\t\t\t\treturn jQuery.prop(elem, name, value);\n\t\t\t}\n\n\t\t\t// Attribute hooks are determined by the lowercase version\n\t\t\t// Grab necessary hook if one is defined\n\t\t\tif (nType !== 1 || !jQuery.isXMLDoc(elem)) {\n\t\t\t\thooks = jQuery.attrHooks[name.toLowerCase()] ||\n\t\t\t\t\t(jQuery.expr.match.bool.test(name) ? boolHook : undefined);\n\t\t\t}\n\n\t\t\tif (value !== undefined) {\n\t\t\t\tif (value === null) {\n\t\t\t\t\tjQuery.removeAttr(elem, name);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (hooks && \"set\" in hooks &&\n\t\t\t\t\t(ret = hooks.set(elem, value, name)) !== undefined) {\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\n\t\t\t\telem.setAttribute(name, value + \"\");\n\t\t\t\treturn value;\n\t\t\t}\n\n\t\t\tif (hooks && \"get\" in hooks && (ret = hooks.get(elem, name)) !== null) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\tret = jQuery.find.attr(elem, name);\n\n\t\t\t// Non-existent attributes return null, we normalize to undefined\n\t\t\treturn ret == null ? undefined : ret;\n\t\t},\n\n\t\tattrHooks: {\n\t\t\ttype: {\n\t\t\t\tset: function (elem, value) {\n\t\t\t\t\tif (!support.radioValue && value === \"radio\" &&\n\t\t\t\t\t\tnodeName(elem, \"input\")) {\n\t\t\t\t\t\tvar val = elem.value;\n\t\t\t\t\t\telem.setAttribute(\"type\", value);\n\t\t\t\t\t\tif (val) {\n\t\t\t\t\t\t\telem.value = val;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn value;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tremoveAttr: function (elem, value) {\n\t\t\tvar name,\n\t\t\t\ti = 0,\n\n\t\t\t\t// Attribute names can contain non-HTML whitespace characters\n\t\t\t\t// https://html.spec.whatwg.org/multipage/syntax.html#attributes-2\n\t\t\t\tattrNames = value && value.match(rnothtmlwhite);\n\n\t\t\tif (attrNames && elem.nodeType === 1) {\n\t\t\t\twhile ((name = attrNames[i++])) {\n\t\t\t\t\telem.removeAttribute(name);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\n\t// Hooks for boolean attributes\n\tboolHook = {\n\t\tset: function (elem, value, name) {\n\t\t\tif (value === false) {\n\n\t\t\t\t// Remove boolean attributes when set to false\n\t\t\t\tjQuery.removeAttr(elem, name);\n\t\t\t} else {\n\t\t\t\telem.setAttribute(name, name);\n\t\t\t}\n\t\t\treturn name;\n\t\t}\n\t};\n\n\tjQuery.each(jQuery.expr.match.bool.source.match(/\\w+/g), function (_i, name) {\n\t\tvar getter = attrHandle[name] || jQuery.find.attr;\n\n\t\tattrHandle[name] = function (elem, name, isXML) {\n\t\t\tvar ret, handle,\n\t\t\t\tlowercaseName = name.toLowerCase();\n\n\t\t\tif (!isXML) {\n\n\t\t\t\t// Avoid an infinite loop by temporarily removing this function from the getter\n\t\t\t\thandle = attrHandle[lowercaseName];\n\t\t\t\tattrHandle[lowercaseName] = ret;\n\t\t\t\tret = getter(elem, name, isXML) != null ?\n\t\t\t\t\tlowercaseName :\n\t\t\t\t\tnull;\n\t\t\t\tattrHandle[lowercaseName] = handle;\n\t\t\t}\n\t\t\treturn ret;\n\t\t};\n\t});\n\n\n\n\n\tvar rfocusable = /^(?:input|select|textarea|button)$/i,\n\t\trclickable = /^(?:a|area)$/i;\n\n\tjQuery.fn.extend({\n\t\tprop: function (name, value) {\n\t\t\treturn access(this, jQuery.prop, name, value, arguments.length > 1);\n\t\t},\n\n\t\tremoveProp: function (name) {\n\t\t\treturn this.each(function () {\n\t\t\t\tdelete this[jQuery.propFix[name] || name];\n\t\t\t});\n\t\t}\n\t});\n\n\tjQuery.extend({\n\t\tprop: function (elem, name, value) {\n\t\t\tvar ret, hooks,\n\t\t\t\tnType = elem.nodeType;\n\n\t\t\t// Don't get/set properties on text, comment and attribute nodes\n\t\t\tif (nType === 3 || nType === 8 || nType === 2) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (nType !== 1 || !jQuery.isXMLDoc(elem)) {\n\n\t\t\t\t// Fix name and attach hooks\n\t\t\t\tname = jQuery.propFix[name] || name;\n\t\t\t\thooks = jQuery.propHooks[name];\n\t\t\t}\n\n\t\t\tif (value !== undefined) {\n\t\t\t\tif (hooks && \"set\" in hooks &&\n\t\t\t\t\t(ret = hooks.set(elem, value, name)) !== undefined) {\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\n\t\t\t\treturn (elem[name] = value);\n\t\t\t}\n\n\t\t\tif (hooks && \"get\" in hooks && (ret = hooks.get(elem, name)) !== null) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\treturn elem[name];\n\t\t},\n\n\t\tpropHooks: {\n\t\t\ttabIndex: {\n\t\t\t\tget: function (elem) {\n\n\t\t\t\t\t// Support: IE <=9 - 11 only\n\t\t\t\t\t// elem.tabIndex doesn't always return the\n\t\t\t\t\t// correct value when it hasn't been explicitly set\n\t\t\t\t\t// Use proper attribute retrieval (trac-12072)\n\t\t\t\t\tvar tabindex = jQuery.find.attr(elem, \"tabindex\");\n\n\t\t\t\t\tif (tabindex) {\n\t\t\t\t\t\treturn parseInt(tabindex, 10);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (\n\t\t\t\t\t\trfocusable.test(elem.nodeName) ||\n\t\t\t\t\t\trclickable.test(elem.nodeName) &&\n\t\t\t\t\t\telem.href\n\t\t\t\t\t) {\n\t\t\t\t\t\treturn 0;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn -1;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tpropFix: {\n\t\t\t\"for\": \"htmlFor\",\n\t\t\t\"class\": \"className\"\n\t\t}\n\t});\n\n\t// Support: IE <=11 only\n\t// Accessing the selectedIndex property\n\t// forces the browser to respect setting selected\n\t// on the option\n\t// The getter ensures a default option is selected\n\t// when in an optgroup\n\t// eslint rule \"no-unused-expressions\" is disabled for this code\n\t// since it considers such accessions noop\n\tif (!support.optSelected) {\n\t\tjQuery.propHooks.selected = {\n\t\t\tget: function (elem) {\n\n\t\t\t\t/* eslint no-unused-expressions: \"off\" */\n\n\t\t\t\tvar parent = elem.parentNode;\n\t\t\t\tif (parent && parent.parentNode) {\n\t\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t\t}\n\t\t\t\treturn null;\n\t\t\t},\n\t\t\tset: function (elem) {\n\n\t\t\t\t/* eslint no-unused-expressions: \"off\" */\n\n\t\t\t\tvar parent = elem.parentNode;\n\t\t\t\tif (parent) {\n\t\t\t\t\tparent.selectedIndex;\n\n\t\t\t\t\tif (parent.parentNode) {\n\t\t\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n\n\tjQuery.each([\n\t\t\"tabIndex\",\n\t\t\"readOnly\",\n\t\t\"maxLength\",\n\t\t\"cellSpacing\",\n\t\t\"cellPadding\",\n\t\t\"rowSpan\",\n\t\t\"colSpan\",\n\t\t\"useMap\",\n\t\t\"frameBorder\",\n\t\t\"contentEditable\"\n\t], function () {\n\t\tjQuery.propFix[this.toLowerCase()] = this;\n\t});\n\n\n\n\n\t// Strip and collapse whitespace according to HTML spec\n\t// https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace\n\tfunction stripAndCollapse(value) {\n\t\tvar tokens = value.match(rnothtmlwhite) || [];\n\t\treturn tokens.join(\" \");\n\t}\n\n\n\tfunction getClass(elem) {\n\t\treturn elem.getAttribute && elem.getAttribute(\"class\") || \"\";\n\t}\n\n\tfunction classesToArray(value) {\n\t\tif (Array.isArray(value)) {\n\t\t\treturn value;\n\t\t}\n\t\tif (typeof value === \"string\") {\n\t\t\treturn value.match(rnothtmlwhite) || [];\n\t\t}\n\t\treturn [];\n\t}\n\n\tjQuery.fn.extend({\n\t\taddClass: function (value) {\n\t\t\tvar classNames, cur, curValue, className, i, finalValue;\n\n\t\t\tif (isFunction(value)) {\n\t\t\t\treturn this.each(function (j) {\n\t\t\t\t\tjQuery(this).addClass(value.call(this, j, getClass(this)));\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tclassNames = classesToArray(value);\n\n\t\t\tif (classNames.length) {\n\t\t\t\treturn this.each(function () {\n\t\t\t\t\tcurValue = getClass(this);\n\t\t\t\t\tcur = this.nodeType === 1 && (\" \" + stripAndCollapse(curValue) + \" \");\n\n\t\t\t\t\tif (cur) {\n\t\t\t\t\t\tfor (i = 0; i < classNames.length; i++) {\n\t\t\t\t\t\t\tclassName = classNames[i];\n\t\t\t\t\t\t\tif (cur.indexOf(\" \" + className + \" \") < 0) {\n\t\t\t\t\t\t\t\tcur += className + \" \";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\t\tfinalValue = stripAndCollapse(cur);\n\t\t\t\t\t\tif (curValue !== finalValue) {\n\t\t\t\t\t\t\tthis.setAttribute(\"class\", finalValue);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn this;\n\t\t},\n\n\t\tremoveClass: function (value) {\n\t\t\tvar classNames, cur, curValue, className, i, finalValue;\n\n\t\t\tif (isFunction(value)) {\n\t\t\t\treturn this.each(function (j) {\n\t\t\t\t\tjQuery(this).removeClass(value.call(this, j, getClass(this)));\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (!arguments.length) {\n\t\t\t\treturn this.attr(\"class\", \"\");\n\t\t\t}\n\n\t\t\tclassNames = classesToArray(value);\n\n\t\t\tif (classNames.length) {\n\t\t\t\treturn this.each(function () {\n\t\t\t\t\tcurValue = getClass(this);\n\n\t\t\t\t\t// This expression is here for better compressibility (see addClass)\n\t\t\t\t\tcur = this.nodeType === 1 && (\" \" + stripAndCollapse(curValue) + \" \");\n\n\t\t\t\t\tif (cur) {\n\t\t\t\t\t\tfor (i = 0; i < classNames.length; i++) {\n\t\t\t\t\t\t\tclassName = classNames[i];\n\n\t\t\t\t\t\t\t// Remove *all* instances\n\t\t\t\t\t\t\twhile (cur.indexOf(\" \" + className + \" \") > -1) {\n\t\t\t\t\t\t\t\tcur = cur.replace(\" \" + className + \" \", \" \");\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\t\tfinalValue = stripAndCollapse(cur);\n\t\t\t\t\t\tif (curValue !== finalValue) {\n\t\t\t\t\t\t\tthis.setAttribute(\"class\", finalValue);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn this;\n\t\t},\n\n\t\ttoggleClass: function (value, stateVal) {\n\t\t\tvar classNames, className, i, self,\n\t\t\t\ttype = typeof value,\n\t\t\t\tisValidValue = type === \"string\" || Array.isArray(value);\n\n\t\t\tif (isFunction(value)) {\n\t\t\t\treturn this.each(function (i) {\n\t\t\t\t\tjQuery(this).toggleClass(\n\t\t\t\t\t\tvalue.call(this, i, getClass(this), stateVal),\n\t\t\t\t\t\tstateVal\n\t\t\t\t\t);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (typeof stateVal === \"boolean\" && isValidValue) {\n\t\t\t\treturn stateVal ? this.addClass(value) : this.removeClass(value);\n\t\t\t}\n\n\t\t\tclassNames = classesToArray(value);\n\n\t\t\treturn this.each(function () {\n\t\t\t\tif (isValidValue) {\n\n\t\t\t\t\t// Toggle individual class names\n\t\t\t\t\tself = jQuery(this);\n\n\t\t\t\t\tfor (i = 0; i < classNames.length; i++) {\n\t\t\t\t\t\tclassName = classNames[i];\n\n\t\t\t\t\t\t// Check each className given, space separated list\n\t\t\t\t\t\tif (self.hasClass(className)) {\n\t\t\t\t\t\t\tself.removeClass(className);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tself.addClass(className);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Toggle whole class name\n\t\t\t\t} else if (value === undefined || type === \"boolean\") {\n\t\t\t\t\tclassName = getClass(this);\n\t\t\t\t\tif (className) {\n\n\t\t\t\t\t\t// Store className if set\n\t\t\t\t\t\tdataPriv.set(this, \"__className__\", className);\n\t\t\t\t\t}\n\n\t\t\t\t\t// If the element has a class name or if we're passed `false`,\n\t\t\t\t\t// then remove the whole classname (if there was one, the above saved it).\n\t\t\t\t\t// Otherwise bring back whatever was previously saved (if anything),\n\t\t\t\t\t// falling back to the empty string if nothing was stored.\n\t\t\t\t\tif (this.setAttribute) {\n\t\t\t\t\t\tthis.setAttribute(\"class\",\n\t\t\t\t\t\t\tclassName || value === false ?\n\t\t\t\t\t\t\t\t\"\" :\n\t\t\t\t\t\t\t\tdataPriv.get(this, \"__className__\") || \"\"\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\thasClass: function (selector) {\n\t\t\tvar className, elem,\n\t\t\t\ti = 0;\n\n\t\t\tclassName = \" \" + selector + \" \";\n\t\t\twhile ((elem = this[i++])) {\n\t\t\t\tif (elem.nodeType === 1 &&\n\t\t\t\t\t(\" \" + stripAndCollapse(getClass(elem)) + \" \").indexOf(className) > -1) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn false;\n\t\t}\n\t});\n\n\n\n\n\tvar rreturn = /\\r/g;\n\n\tjQuery.fn.extend({\n\t\tval: function (value) {\n\t\t\tvar hooks, ret, valueIsFunction,\n\t\t\t\telem = this[0];\n\n\t\t\tif (!arguments.length) {\n\t\t\t\tif (elem) {\n\t\t\t\t\thooks = jQuery.valHooks[elem.type] ||\n\t\t\t\t\t\tjQuery.valHooks[elem.nodeName.toLowerCase()];\n\n\t\t\t\t\tif (hooks &&\n\t\t\t\t\t\t\"get\" in hooks &&\n\t\t\t\t\t\t(ret = hooks.get(elem, \"value\")) !== undefined\n\t\t\t\t\t) {\n\t\t\t\t\t\treturn ret;\n\t\t\t\t\t}\n\n\t\t\t\t\tret = elem.value;\n\n\t\t\t\t\t// Handle most common string cases\n\t\t\t\t\tif (typeof ret === \"string\") {\n\t\t\t\t\t\treturn ret.replace(rreturn, \"\");\n\t\t\t\t\t}\n\n\t\t\t\t\t// Handle cases where value is null/undef or number\n\t\t\t\t\treturn ret == null ? \"\" : ret;\n\t\t\t\t}\n\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvalueIsFunction = isFunction(value);\n\n\t\t\treturn this.each(function (i) {\n\t\t\t\tvar val;\n\n\t\t\t\tif (this.nodeType !== 1) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (valueIsFunction) {\n\t\t\t\t\tval = value.call(this, i, jQuery(this).val());\n\t\t\t\t} else {\n\t\t\t\t\tval = value;\n\t\t\t\t}\n\n\t\t\t\t// Treat null/undefined as \"\"; convert numbers to string\n\t\t\t\tif (val == null) {\n\t\t\t\t\tval = \"\";\n\n\t\t\t\t} else if (typeof val === \"number\") {\n\t\t\t\t\tval += \"\";\n\n\t\t\t\t} else if (Array.isArray(val)) {\n\t\t\t\t\tval = jQuery.map(val, function (value) {\n\t\t\t\t\t\treturn value == null ? \"\" : value + \"\";\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\thooks = jQuery.valHooks[this.type] || jQuery.valHooks[this.nodeName.toLowerCase()];\n\n\t\t\t\t// If set returns undefined, fall back to normal setting\n\t\t\t\tif (!hooks || !(\"set\" in hooks) || hooks.set(this, val, \"value\") === undefined) {\n\t\t\t\t\tthis.value = val;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t});\n\n\tjQuery.extend({\n\t\tvalHooks: {\n\t\t\toption: {\n\t\t\t\tget: function (elem) {\n\n\t\t\t\t\tvar val = jQuery.find.attr(elem, \"value\");\n\t\t\t\t\treturn val != null ?\n\t\t\t\t\t\tval :\n\n\t\t\t\t\t\t// Support: IE <=10 - 11 only\n\t\t\t\t\t\t// option.text throws exceptions (trac-14686, trac-14858)\n\t\t\t\t\t\t// Strip and collapse whitespace\n\t\t\t\t\t\t// https://html.spec.whatwg.org/#strip-and-collapse-whitespace\n\t\t\t\t\t\tstripAndCollapse(jQuery.text(elem));\n\t\t\t\t}\n\t\t\t},\n\t\t\tselect: {\n\t\t\t\tget: function (elem) {\n\t\t\t\t\tvar value, option, i,\n\t\t\t\t\t\toptions = elem.options,\n\t\t\t\t\t\tindex = elem.selectedIndex,\n\t\t\t\t\t\tone = elem.type === \"select-one\",\n\t\t\t\t\t\tvalues = one ? null : [],\n\t\t\t\t\t\tmax = one ? index + 1 : options.length;\n\n\t\t\t\t\tif (index < 0) {\n\t\t\t\t\t\ti = max;\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\ti = one ? index : 0;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Loop through all the selected options\n\t\t\t\t\tfor (; i < max; i++) {\n\t\t\t\t\t\toption = options[i];\n\n\t\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t\t// IE8-9 doesn't update selected after form reset (trac-2551)\n\t\t\t\t\t\tif ((option.selected || i === index) &&\n\n\t\t\t\t\t\t\t// Don't return options that are disabled or in a disabled optgroup\n\t\t\t\t\t\t\t!option.disabled &&\n\t\t\t\t\t\t\t(!option.parentNode.disabled ||\n\t\t\t\t\t\t\t\t!nodeName(option.parentNode, \"optgroup\"))) {\n\n\t\t\t\t\t\t\t// Get the specific value for the option\n\t\t\t\t\t\t\tvalue = jQuery(option).val();\n\n\t\t\t\t\t\t\t// We don't need an array for one selects\n\t\t\t\t\t\t\tif (one) {\n\t\t\t\t\t\t\t\treturn value;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Multi-Selects return an array\n\t\t\t\t\t\t\tvalues.push(value);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn values;\n\t\t\t\t},\n\n\t\t\t\tset: function (elem, value) {\n\t\t\t\t\tvar optionSet, option,\n\t\t\t\t\t\toptions = elem.options,\n\t\t\t\t\t\tvalues = jQuery.makeArray(value),\n\t\t\t\t\t\ti = options.length;\n\n\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\toption = options[i];\n\n\t\t\t\t\t\t/* eslint-disable no-cond-assign */\n\n\t\t\t\t\t\tif (option.selected =\n\t\t\t\t\t\t\tjQuery.inArray(jQuery.valHooks.option.get(option), values) > -1\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\toptionSet = true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t/* eslint-enable no-cond-assign */\n\t\t\t\t\t}\n\n\t\t\t\t\t// Force browsers to behave consistently when non-matching value is set\n\t\t\t\t\tif (!optionSet) {\n\t\t\t\t\t\telem.selectedIndex = -1;\n\t\t\t\t\t}\n\t\t\t\t\treturn values;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\n\t// Radios and checkboxes getter/setter\n\tjQuery.each([\"radio\", \"checkbox\"], function () {\n\t\tjQuery.valHooks[this] = {\n\t\t\tset: function (elem, value) {\n\t\t\t\tif (Array.isArray(value)) {\n\t\t\t\t\treturn (elem.checked = jQuery.inArray(jQuery(elem).val(), value) > -1);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\tif (!support.checkOn) {\n\t\t\tjQuery.valHooks[this].get = function (elem) {\n\t\t\t\treturn elem.getAttribute(\"value\") === null ? \"on\" : elem.value;\n\t\t\t};\n\t\t}\n\t});\n\n\n\n\n\t// Return jQuery for attributes-only inclusion\n\tvar location = window.location;\n\n\tvar nonce = { guid: Date.now() };\n\n\tvar rquery = (/\\?/);\n\n\n\n\t// Cross-browser xml parsing\n\tjQuery.parseXML = function (data) {\n\t\tvar xml, parserErrorElem;\n\t\tif (!data || typeof data !== \"string\") {\n\t\t\treturn null;\n\t\t}\n\n\t\t// Support: IE 9 - 11 only\n\t\t// IE throws on parseFromString with invalid input.\n\t\ttry {\n\t\t\txml = (new window.DOMParser()).parseFromString(data, \"text/xml\");\n\t\t} catch (e) { }\n\n\t\tparserErrorElem = xml && xml.getElementsByTagName(\"parsererror\")[0];\n\t\tif (!xml || parserErrorElem) {\n\t\t\tjQuery.error(\"Invalid XML: \" + (\n\t\t\t\tparserErrorElem ?\n\t\t\t\t\tjQuery.map(parserErrorElem.childNodes, function (el) {\n\t\t\t\t\t\treturn el.textContent;\n\t\t\t\t\t}).join(\"\\n\") :\n\t\t\t\t\tdata\n\t\t\t));\n\t\t}\n\t\treturn xml;\n\t};\n\n\n\tvar rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,\n\t\tstopPropagationCallback = function (e) {\n\t\t\te.stopPropagation();\n\t\t};\n\n\tjQuery.extend(jQuery.event, {\n\n\t\ttrigger: function (event, data, elem, onlyHandlers) {\n\n\t\t\tvar i, cur, tmp, bubbleType, ontype, handle, special, lastElement,\n\t\t\t\teventPath = [elem || document],\n\t\t\t\ttype = hasOwn.call(event, \"type\") ? event.type : event,\n\t\t\t\tnamespaces = hasOwn.call(event, \"namespace\") ? event.namespace.split(\".\") : [];\n\n\t\t\tcur = lastElement = tmp = elem = elem || document;\n\n\t\t\t// Don't do events on text and comment nodes\n\t\t\tif (elem.nodeType === 3 || elem.nodeType === 8) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// focus/blur morphs to focusin/out; ensure we're not firing them right now\n\t\t\tif (rfocusMorph.test(type + jQuery.event.triggered)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (type.indexOf(\".\") > -1) {\n\n\t\t\t\t// Namespaced trigger; create a regexp to match event type in handle()\n\t\t\t\tnamespaces = type.split(\".\");\n\t\t\t\ttype = namespaces.shift();\n\t\t\t\tnamespaces.sort();\n\t\t\t}\n\t\t\tontype = type.indexOf(\":\") < 0 && \"on\" + type;\n\n\t\t\t// Caller can pass in a jQuery.Event object, Object, or just an event type string\n\t\t\tevent = event[jQuery.expando] ?\n\t\t\t\tevent :\n\t\t\t\tnew jQuery.Event(type, typeof event === \"object\" && event);\n\n\t\t\t// Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)\n\t\t\tevent.isTrigger = onlyHandlers ? 2 : 3;\n\t\t\tevent.namespace = namespaces.join(\".\");\n\t\t\tevent.rnamespace = event.namespace ?\n\t\t\t\tnew RegExp(\"(^|\\\\.)\" + namespaces.join(\"\\\\.(?:.*\\\\.|)\") + \"(\\\\.|$)\") :\n\t\t\t\tnull;\n\n\t\t\t// Clean up the event in case it is being reused\n\t\t\tevent.result = undefined;\n\t\t\tif (!event.target) {\n\t\t\t\tevent.target = elem;\n\t\t\t}\n\n\t\t\t// Clone any incoming data and prepend the event, creating the handler arg list\n\t\t\tdata = data == null ?\n\t\t\t\t[event] :\n\t\t\t\tjQuery.makeArray(data, [event]);\n\n\t\t\t// Allow special events to draw outside the lines\n\t\t\tspecial = jQuery.event.special[type] || {};\n\t\t\tif (!onlyHandlers && special.trigger && special.trigger.apply(elem, data) === false) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Determine event propagation path in advance, per W3C events spec (trac-9951)\n\t\t\t// Bubble up to document, then to window; watch for a global ownerDocument var (trac-9724)\n\t\t\tif (!onlyHandlers && !special.noBubble && !isWindow(elem)) {\n\n\t\t\t\tbubbleType = special.delegateType || type;\n\t\t\t\tif (!rfocusMorph.test(bubbleType + type)) {\n\t\t\t\t\tcur = cur.parentNode;\n\t\t\t\t}\n\t\t\t\tfor (; cur; cur = cur.parentNode) {\n\t\t\t\t\teventPath.push(cur);\n\t\t\t\t\ttmp = cur;\n\t\t\t\t}\n\n\t\t\t\t// Only add window if we got to document (e.g., not plain obj or detached DOM)\n\t\t\t\tif (tmp === (elem.ownerDocument || document)) {\n\t\t\t\t\teventPath.push(tmp.defaultView || tmp.parentWindow || window);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Fire handlers on the event path\n\t\t\ti = 0;\n\t\t\twhile ((cur = eventPath[i++]) && !event.isPropagationStopped()) {\n\t\t\t\tlastElement = cur;\n\t\t\t\tevent.type = i > 1 ?\n\t\t\t\t\tbubbleType :\n\t\t\t\t\tspecial.bindType || type;\n\n\t\t\t\t// jQuery handler\n\t\t\t\thandle = (dataPriv.get(cur, \"events\") || Object.create(null))[event.type] &&\n\t\t\t\t\tdataPriv.get(cur, \"handle\");\n\t\t\t\tif (handle) {\n\t\t\t\t\thandle.apply(cur, data);\n\t\t\t\t}\n\n\t\t\t\t// Native handler\n\t\t\t\thandle = ontype && cur[ontype];\n\t\t\t\tif (handle && handle.apply && acceptData(cur)) {\n\t\t\t\t\tevent.result = handle.apply(cur, data);\n\t\t\t\t\tif (event.result === false) {\n\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tevent.type = type;\n\n\t\t\t// If nobody prevented the default action, do it now\n\t\t\tif (!onlyHandlers && !event.isDefaultPrevented()) {\n\n\t\t\t\tif ((!special._default ||\n\t\t\t\t\tspecial._default.apply(eventPath.pop(), data) === false) &&\n\t\t\t\t\tacceptData(elem)) {\n\n\t\t\t\t\t// Call a native DOM method on the target with the same name as the event.\n\t\t\t\t\t// Don't do default actions on window, that's where global variables be (trac-6170)\n\t\t\t\t\tif (ontype && isFunction(elem[type]) && !isWindow(elem)) {\n\n\t\t\t\t\t\t// Don't re-trigger an onFOO event when we call its FOO() method\n\t\t\t\t\t\ttmp = elem[ontype];\n\n\t\t\t\t\t\tif (tmp) {\n\t\t\t\t\t\t\telem[ontype] = null;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Prevent re-triggering of the same event, since we already bubbled it above\n\t\t\t\t\t\tjQuery.event.triggered = type;\n\n\t\t\t\t\t\tif (event.isPropagationStopped()) {\n\t\t\t\t\t\t\tlastElement.addEventListener(type, stopPropagationCallback);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\telem[type]();\n\n\t\t\t\t\t\tif (event.isPropagationStopped()) {\n\t\t\t\t\t\t\tlastElement.removeEventListener(type, stopPropagationCallback);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tjQuery.event.triggered = undefined;\n\n\t\t\t\t\t\tif (tmp) {\n\t\t\t\t\t\t\telem[ontype] = tmp;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn event.result;\n\t\t},\n\n\t\t// Piggyback on a donor event to simulate a different one\n\t\t// Used only for `focus(in | out)` events\n\t\tsimulate: function (type, elem, event) {\n\t\t\tvar e = jQuery.extend(\n\t\t\t\tnew jQuery.Event(),\n\t\t\t\tevent,\n\t\t\t\t{\n\t\t\t\t\ttype: type,\n\t\t\t\t\tisSimulated: true\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tjQuery.event.trigger(e, null, elem);\n\t\t}\n\n\t});\n\n\tjQuery.fn.extend({\n\n\t\ttrigger: function (type, data) {\n\t\t\treturn this.each(function () {\n\t\t\t\tjQuery.event.trigger(type, data, this);\n\t\t\t});\n\t\t},\n\t\ttriggerHandler: function (type, data) {\n\t\t\tvar elem = this[0];\n\t\t\tif (elem) {\n\t\t\t\treturn jQuery.event.trigger(type, data, elem, true);\n\t\t\t}\n\t\t}\n\t});\n\n\n\tvar\n\t\trbracket = /\\[\\]$/,\n\t\trCRLF = /\\r?\\n/g,\n\t\trsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,\n\t\trsubmittable = /^(?:input|select|textarea|keygen)/i;\n\n\tfunction buildParams(prefix, obj, traditional, add) {\n\t\tvar name;\n\n\t\tif (Array.isArray(obj)) {\n\n\t\t\t// Serialize array item.\n\t\t\tjQuery.each(obj, function (i, v) {\n\t\t\t\tif (traditional || rbracket.test(prefix)) {\n\n\t\t\t\t\t// Treat each array item as a scalar.\n\t\t\t\t\tadd(prefix, v);\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// Item is non-scalar (array or object), encode its numeric index.\n\t\t\t\t\tbuildParams(\n\t\t\t\t\t\tprefix + \"[\" + (typeof v === \"object\" && v != null ? i : \"\") + \"]\",\n\t\t\t\t\t\tv,\n\t\t\t\t\t\ttraditional,\n\t\t\t\t\t\tadd\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t});\n\n\t\t} else if (!traditional && toType(obj) === \"object\") {\n\n\t\t\t// Serialize object item.\n\t\t\tfor (name in obj) {\n\t\t\t\tbuildParams(prefix + \"[\" + name + \"]\", obj[name], traditional, add);\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// Serialize scalar item.\n\t\t\tadd(prefix, obj);\n\t\t}\n\t}\n\n\t// Serialize an array of form elements or a set of\n\t// key/values into a query string\n\tjQuery.param = function (a, traditional) {\n\t\tvar prefix,\n\t\t\ts = [],\n\t\t\tadd = function (key, valueOrFunction) {\n\n\t\t\t\t// If value is a function, invoke it and use its return value\n\t\t\t\tvar value = isFunction(valueOrFunction) ?\n\t\t\t\t\tvalueOrFunction() :\n\t\t\t\t\tvalueOrFunction;\n\n\t\t\t\ts[s.length] = encodeURIComponent(key) + \"=\" +\n\t\t\t\t\tencodeURIComponent(value == null ? \"\" : value);\n\t\t\t};\n\n\t\tif (a == null) {\n\t\t\treturn \"\";\n\t\t}\n\n\t\t// If an array was passed in, assume that it is an array of form elements.\n\t\tif (Array.isArray(a) || (a.jquery && !jQuery.isPlainObject(a))) {\n\n\t\t\t// Serialize the form elements\n\t\t\tjQuery.each(a, function () {\n\t\t\t\tadd(this.name, this.value);\n\t\t\t});\n\n\t\t} else {\n\n\t\t\t// If traditional, encode the \"old\" way (the way 1.3.2 or older\n\t\t\t// did it), otherwise encode params recursively.\n\t\t\tfor (prefix in a) {\n\t\t\t\tbuildParams(prefix, a[prefix], traditional, add);\n\t\t\t}\n\t\t}\n\n\t\t// Return the resulting serialization\n\t\treturn s.join(\"&\");\n\t};\n\n\tjQuery.fn.extend({\n\t\tserialize: function () {\n\t\t\treturn jQuery.param(this.serializeArray());\n\t\t},\n\t\tserializeArray: function () {\n\t\t\treturn this.map(function () {\n\n\t\t\t\t// Can add propHook for \"elements\" to filter or add form elements\n\t\t\t\tvar elements = jQuery.prop(this, \"elements\");\n\t\t\t\treturn elements ? jQuery.makeArray(elements) : this;\n\t\t\t}).filter(function () {\n\t\t\t\tvar type = this.type;\n\n\t\t\t\t// Use .is( \":disabled\" ) so that fieldset[disabled] works\n\t\t\t\treturn this.name && !jQuery(this).is(\":disabled\") &&\n\t\t\t\t\trsubmittable.test(this.nodeName) && !rsubmitterTypes.test(type) &&\n\t\t\t\t\t(this.checked || !rcheckableType.test(type));\n\t\t\t}).map(function (_i, elem) {\n\t\t\t\tvar val = jQuery(this).val();\n\n\t\t\t\tif (val == null) {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\n\t\t\t\tif (Array.isArray(val)) {\n\t\t\t\t\treturn jQuery.map(val, function (val) {\n\t\t\t\t\t\treturn { name: elem.name, value: val.replace(rCRLF, \"\\r\\n\") };\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\treturn { name: elem.name, value: val.replace(rCRLF, \"\\r\\n\") };\n\t\t\t}).get();\n\t\t}\n\t});\n\n\n\tvar\n\t\tr20 = /%20/g,\n\t\trhash = /#.*$/,\n\t\trantiCache = /([?&])_=[^&]*/,\n\t\trheaders = /^(.*?):[ \\t]*([^\\r\\n]*)$/mg,\n\n\t\t// trac-7653, trac-8125, trac-8152: local protocol detection\n\t\trlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,\n\t\trnoContent = /^(?:GET|HEAD)$/,\n\t\trprotocol = /^\\/\\//,\n\n\t\t/* Prefilters\n\t\t * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)\n\t\t * 2) These are called:\n\t\t *    - BEFORE asking for a transport\n\t\t *    - AFTER param serialization (s.data is a string if s.processData is true)\n\t\t * 3) key is the dataType\n\t\t * 4) the catchall symbol \"*\" can be used\n\t\t * 5) execution will start with transport dataType and THEN continue down to \"*\" if needed\n\t\t */\n\t\tprefilters = {},\n\n\t\t/* Transports bindings\n\t\t * 1) key is the dataType\n\t\t * 2) the catchall symbol \"*\" can be used\n\t\t * 3) selection will start with transport dataType and THEN go to \"*\" if needed\n\t\t */\n\t\ttransports = {},\n\n\t\t// Avoid comment-prolog char sequence (trac-10098); must appease lint and evade compression\n\t\tallTypes = \"*/\".concat(\"*\"),\n\n\t\t// Anchor tag for parsing the document origin\n\t\toriginAnchor = document.createElement(\"a\");\n\n\toriginAnchor.href = location.href;\n\n\t// Base \"constructor\" for jQuery.ajaxPrefilter and jQuery.ajaxTransport\n\tfunction addToPrefiltersOrTransports(structure) {\n\n\t\t// dataTypeExpression is optional and defaults to \"*\"\n\t\treturn function (dataTypeExpression, func) {\n\n\t\t\tif (typeof dataTypeExpression !== \"string\") {\n\t\t\t\tfunc = dataTypeExpression;\n\t\t\t\tdataTypeExpression = \"*\";\n\t\t\t}\n\n\t\t\tvar dataType,\n\t\t\t\ti = 0,\n\t\t\t\tdataTypes = dataTypeExpression.toLowerCase().match(rnothtmlwhite) || [];\n\n\t\t\tif (isFunction(func)) {\n\n\t\t\t\t// For each dataType in the dataTypeExpression\n\t\t\t\twhile ((dataType = dataTypes[i++])) {\n\n\t\t\t\t\t// Prepend if requested\n\t\t\t\t\tif (dataType[0] === \"+\") {\n\t\t\t\t\t\tdataType = dataType.slice(1) || \"*\";\n\t\t\t\t\t\t(structure[dataType] = structure[dataType] || []).unshift(func);\n\n\t\t\t\t\t\t// Otherwise append\n\t\t\t\t\t} else {\n\t\t\t\t\t\t(structure[dataType] = structure[dataType] || []).push(func);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n\n\t// Base inspection function for prefilters and transports\n\tfunction inspectPrefiltersOrTransports(structure, options, originalOptions, jqXHR) {\n\n\t\tvar inspected = {},\n\t\t\tseekingTransport = (structure === transports);\n\n\t\tfunction inspect(dataType) {\n\t\t\tvar selected;\n\t\t\tinspected[dataType] = true;\n\t\t\tjQuery.each(structure[dataType] || [], function (_, prefilterOrFactory) {\n\t\t\t\tvar dataTypeOrTransport = prefilterOrFactory(options, originalOptions, jqXHR);\n\t\t\t\tif (typeof dataTypeOrTransport === \"string\" &&\n\t\t\t\t\t!seekingTransport && !inspected[dataTypeOrTransport]) {\n\n\t\t\t\t\toptions.dataTypes.unshift(dataTypeOrTransport);\n\t\t\t\t\tinspect(dataTypeOrTransport);\n\t\t\t\t\treturn false;\n\t\t\t\t} else if (seekingTransport) {\n\t\t\t\t\treturn !(selected = dataTypeOrTransport);\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn selected;\n\t\t}\n\n\t\treturn inspect(options.dataTypes[0]) || !inspected[\"*\"] && inspect(\"*\");\n\t}\n\n\t// A special extend for ajax options\n\t// that takes \"flat\" options (not to be deep extended)\n\t// Fixes trac-9887\n\tfunction ajaxExtend(target, src) {\n\t\tvar key, deep,\n\t\t\tflatOptions = jQuery.ajaxSettings.flatOptions || {};\n\n\t\tfor (key in src) {\n\t\t\tif (src[key] !== undefined) {\n\t\t\t\t(flatOptions[key] ? target : (deep || (deep = {})))[key] = src[key];\n\t\t\t}\n\t\t}\n\t\tif (deep) {\n\t\t\tjQuery.extend(true, target, deep);\n\t\t}\n\n\t\treturn target;\n\t}\n\n\t/* Handles responses to an ajax request:\n\t * - finds the right dataType (mediates between content-type and expected dataType)\n\t * - returns the corresponding response\n\t */\n\tfunction ajaxHandleResponses(s, jqXHR, responses) {\n\n\t\tvar ct, type, finalDataType, firstDataType,\n\t\t\tcontents = s.contents,\n\t\t\tdataTypes = s.dataTypes;\n\n\t\t// Remove auto dataType and get content-type in the process\n\t\twhile (dataTypes[0] === \"*\") {\n\t\t\tdataTypes.shift();\n\t\t\tif (ct === undefined) {\n\t\t\t\tct = s.mimeType || jqXHR.getResponseHeader(\"Content-Type\");\n\t\t\t}\n\t\t}\n\n\t\t// Check if we're dealing with a known content-type\n\t\tif (ct) {\n\t\t\tfor (type in contents) {\n\t\t\t\tif (contents[type] && contents[type].test(ct)) {\n\t\t\t\t\tdataTypes.unshift(type);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Check to see if we have a response for the expected dataType\n\t\tif (dataTypes[0] in responses) {\n\t\t\tfinalDataType = dataTypes[0];\n\t\t} else {\n\n\t\t\t// Try convertible dataTypes\n\t\t\tfor (type in responses) {\n\t\t\t\tif (!dataTypes[0] || s.converters[type + \" \" + dataTypes[0]]) {\n\t\t\t\t\tfinalDataType = type;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (!firstDataType) {\n\t\t\t\t\tfirstDataType = type;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Or just use first one\n\t\t\tfinalDataType = finalDataType || firstDataType;\n\t\t}\n\n\t\t// If we found a dataType\n\t\t// We add the dataType to the list if needed\n\t\t// and return the corresponding response\n\t\tif (finalDataType) {\n\t\t\tif (finalDataType !== dataTypes[0]) {\n\t\t\t\tdataTypes.unshift(finalDataType);\n\t\t\t}\n\t\t\treturn responses[finalDataType];\n\t\t}\n\t}\n\n\t/* Chain conversions given the request and the original response\n\t * Also sets the responseXXX fields on the jqXHR instance\n\t */\n\tfunction ajaxConvert(s, response, jqXHR, isSuccess) {\n\t\tvar conv2, current, conv, tmp, prev,\n\t\t\tconverters = {},\n\n\t\t\t// Work with a copy of dataTypes in case we need to modify it for conversion\n\t\t\tdataTypes = s.dataTypes.slice();\n\n\t\t// Create converters map with lowercased keys\n\t\tif (dataTypes[1]) {\n\t\t\tfor (conv in s.converters) {\n\t\t\t\tconverters[conv.toLowerCase()] = s.converters[conv];\n\t\t\t}\n\t\t}\n\n\t\tcurrent = dataTypes.shift();\n\n\t\t// Convert to each sequential dataType\n\t\twhile (current) {\n\n\t\t\tif (s.responseFields[current]) {\n\t\t\t\tjqXHR[s.responseFields[current]] = response;\n\t\t\t}\n\n\t\t\t// Apply the dataFilter if provided\n\t\t\tif (!prev && isSuccess && s.dataFilter) {\n\t\t\t\tresponse = s.dataFilter(response, s.dataType);\n\t\t\t}\n\n\t\t\tprev = current;\n\t\t\tcurrent = dataTypes.shift();\n\n\t\t\tif (current) {\n\n\t\t\t\t// There's only work to do if current dataType is non-auto\n\t\t\t\tif (current === \"*\") {\n\n\t\t\t\t\tcurrent = prev;\n\n\t\t\t\t\t// Convert response if prev dataType is non-auto and differs from current\n\t\t\t\t} else if (prev !== \"*\" && prev !== current) {\n\n\t\t\t\t\t// Seek a direct converter\n\t\t\t\t\tconv = converters[prev + \" \" + current] || converters[\"* \" + current];\n\n\t\t\t\t\t// If none found, seek a pair\n\t\t\t\t\tif (!conv) {\n\t\t\t\t\t\tfor (conv2 in converters) {\n\n\t\t\t\t\t\t\t// If conv2 outputs current\n\t\t\t\t\t\t\ttmp = conv2.split(\" \");\n\t\t\t\t\t\t\tif (tmp[1] === current) {\n\n\t\t\t\t\t\t\t\t// If prev can be converted to accepted input\n\t\t\t\t\t\t\t\tconv = converters[prev + \" \" + tmp[0]] ||\n\t\t\t\t\t\t\t\t\tconverters[\"* \" + tmp[0]];\n\t\t\t\t\t\t\t\tif (conv) {\n\n\t\t\t\t\t\t\t\t\t// Condense equivalence converters\n\t\t\t\t\t\t\t\t\tif (conv === true) {\n\t\t\t\t\t\t\t\t\t\tconv = converters[conv2];\n\n\t\t\t\t\t\t\t\t\t\t// Otherwise, insert the intermediate dataType\n\t\t\t\t\t\t\t\t\t} else if (converters[conv2] !== true) {\n\t\t\t\t\t\t\t\t\t\tcurrent = tmp[0];\n\t\t\t\t\t\t\t\t\t\tdataTypes.unshift(tmp[1]);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Apply converter (if not an equivalence)\n\t\t\t\t\tif (conv !== true) {\n\n\t\t\t\t\t\t// Unless errors are allowed to bubble, catch and return them\n\t\t\t\t\t\tif (conv && s.throws) {\n\t\t\t\t\t\t\tresponse = conv(response);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\tresponse = conv(response);\n\t\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\tstate: \"parsererror\",\n\t\t\t\t\t\t\t\t\terror: conv ? e : \"No conversion from \" + prev + \" to \" + current\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn { state: \"success\", data: response };\n\t}\n\n\tjQuery.extend({\n\n\t\t// Counter for holding the number of active queries\n\t\tactive: 0,\n\n\t\t// Last-Modified header cache for next request\n\t\tlastModified: {},\n\t\tetag: {},\n\n\t\tajaxSettings: {\n\t\t\turl: location.href,\n\t\t\ttype: \"GET\",\n\t\t\tisLocal: rlocalProtocol.test(location.protocol),\n\t\t\tglobal: true,\n\t\t\tprocessData: true,\n\t\t\tasync: true,\n\t\t\tcontentType: \"application/x-www-form-urlencoded; charset=UTF-8\",\n\n\t\t\t/*\n\t\t\ttimeout: 0,\n\t\t\tdata: null,\n\t\t\tdataType: null,\n\t\t\tusername: null,\n\t\t\tpassword: null,\n\t\t\tcache: null,\n\t\t\tthrows: false,\n\t\t\ttraditional: false,\n\t\t\theaders: {},\n\t\t\t*/\n\n\t\t\taccepts: {\n\t\t\t\t\"*\": allTypes,\n\t\t\t\ttext: \"text/plain\",\n\t\t\t\thtml: \"text/html\",\n\t\t\t\txml: \"application/xml, text/xml\",\n\t\t\t\tjson: \"application/json, text/javascript\"\n\t\t\t},\n\n\t\t\tcontents: {\n\t\t\t\txml: /\\bxml\\b/,\n\t\t\t\thtml: /\\bhtml/,\n\t\t\t\tjson: /\\bjson\\b/\n\t\t\t},\n\n\t\t\tresponseFields: {\n\t\t\t\txml: \"responseXML\",\n\t\t\t\ttext: \"responseText\",\n\t\t\t\tjson: \"responseJSON\"\n\t\t\t},\n\n\t\t\t// Data converters\n\t\t\t// Keys separate source (or catchall \"*\") and destination types with a single space\n\t\t\tconverters: {\n\n\t\t\t\t// Convert anything to text\n\t\t\t\t\"* text\": String,\n\n\t\t\t\t// Text to html (true = no transformation)\n\t\t\t\t\"text html\": true,\n\n\t\t\t\t// Evaluate text as a json expression\n\t\t\t\t\"text json\": JSON.parse,\n\n\t\t\t\t// Parse text as xml\n\t\t\t\t\"text xml\": jQuery.parseXML\n\t\t\t},\n\n\t\t\t// For options that shouldn't be deep extended:\n\t\t\t// you can add your own custom options here if\n\t\t\t// and when you create one that shouldn't be\n\t\t\t// deep extended (see ajaxExtend)\n\t\t\tflatOptions: {\n\t\t\t\turl: true,\n\t\t\t\tcontext: true\n\t\t\t}\n\t\t},\n\n\t\t// Creates a full fledged settings object into target\n\t\t// with both ajaxSettings and settings fields.\n\t\t// If target is omitted, writes into ajaxSettings.\n\t\tajaxSetup: function (target, settings) {\n\t\t\treturn settings ?\n\n\t\t\t\t// Building a settings object\n\t\t\t\tajaxExtend(ajaxExtend(target, jQuery.ajaxSettings), settings) :\n\n\t\t\t\t// Extending ajaxSettings\n\t\t\t\tajaxExtend(jQuery.ajaxSettings, target);\n\t\t},\n\n\t\tajaxPrefilter: addToPrefiltersOrTransports(prefilters),\n\t\tajaxTransport: addToPrefiltersOrTransports(transports),\n\n\t\t// Main method\n\t\tajax: function (url, options) {\n\n\t\t\t// If url is an object, simulate pre-1.5 signature\n\t\t\tif (typeof url === \"object\") {\n\t\t\t\toptions = url;\n\t\t\t\turl = undefined;\n\t\t\t}\n\n\t\t\t// Force options to be an object\n\t\t\toptions = options || {};\n\n\t\t\tvar transport,\n\n\t\t\t\t// URL without anti-cache param\n\t\t\t\tcacheURL,\n\n\t\t\t\t// Response headers\n\t\t\t\tresponseHeadersString,\n\t\t\t\tresponseHeaders,\n\n\t\t\t\t// timeout handle\n\t\t\t\ttimeoutTimer,\n\n\t\t\t\t// Url cleanup var\n\t\t\t\turlAnchor,\n\n\t\t\t\t// Request state (becomes false upon send and true upon completion)\n\t\t\t\tcompleted,\n\n\t\t\t\t// To know if global events are to be dispatched\n\t\t\t\tfireGlobals,\n\n\t\t\t\t// Loop variable\n\t\t\t\ti,\n\n\t\t\t\t// uncached part of the url\n\t\t\t\tuncached,\n\n\t\t\t\t// Create the final options object\n\t\t\t\ts = jQuery.ajaxSetup({}, options),\n\n\t\t\t\t// Callbacks context\n\t\t\t\tcallbackContext = s.context || s,\n\n\t\t\t\t// Context for global events is callbackContext if it is a DOM node or jQuery collection\n\t\t\t\tglobalEventContext = s.context &&\n\t\t\t\t\t(callbackContext.nodeType || callbackContext.jquery) ?\n\t\t\t\t\tjQuery(callbackContext) :\n\t\t\t\t\tjQuery.event,\n\n\t\t\t\t// Deferreds\n\t\t\t\tdeferred = jQuery.Deferred(),\n\t\t\t\tcompleteDeferred = jQuery.Callbacks(\"once memory\"),\n\n\t\t\t\t// Status-dependent callbacks\n\t\t\t\tstatusCode = s.statusCode || {},\n\n\t\t\t\t// Headers (they are sent all at once)\n\t\t\t\trequestHeaders = {},\n\t\t\t\trequestHeadersNames = {},\n\n\t\t\t\t// Default abort message\n\t\t\t\tstrAbort = \"canceled\",\n\n\t\t\t\t// Fake xhr\n\t\t\t\tjqXHR = {\n\t\t\t\t\treadyState: 0,\n\n\t\t\t\t\t// Builds headers hashtable if needed\n\t\t\t\t\tgetResponseHeader: function (key) {\n\t\t\t\t\t\tvar match;\n\t\t\t\t\t\tif (completed) {\n\t\t\t\t\t\t\tif (!responseHeaders) {\n\t\t\t\t\t\t\t\tresponseHeaders = {};\n\t\t\t\t\t\t\t\twhile ((match = rheaders.exec(responseHeadersString))) {\n\t\t\t\t\t\t\t\t\tresponseHeaders[match[1].toLowerCase() + \" \"] =\n\t\t\t\t\t\t\t\t\t\t(responseHeaders[match[1].toLowerCase() + \" \"] || [])\n\t\t\t\t\t\t\t\t\t\t\t.concat(match[2]);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tmatch = responseHeaders[key.toLowerCase() + \" \"];\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn match == null ? null : match.join(\", \");\n\t\t\t\t\t},\n\n\t\t\t\t\t// Raw string\n\t\t\t\t\tgetAllResponseHeaders: function () {\n\t\t\t\t\t\treturn completed ? responseHeadersString : null;\n\t\t\t\t\t},\n\n\t\t\t\t\t// Caches the header\n\t\t\t\t\tsetRequestHeader: function (name, value) {\n\t\t\t\t\t\tif (completed == null) {\n\t\t\t\t\t\t\tname = requestHeadersNames[name.toLowerCase()] =\n\t\t\t\t\t\t\t\trequestHeadersNames[name.toLowerCase()] || name;\n\t\t\t\t\t\t\trequestHeaders[name] = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn this;\n\t\t\t\t\t},\n\n\t\t\t\t\t// Overrides response content-type header\n\t\t\t\t\toverrideMimeType: function (type) {\n\t\t\t\t\t\tif (completed == null) {\n\t\t\t\t\t\t\ts.mimeType = type;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn this;\n\t\t\t\t\t},\n\n\t\t\t\t\t// Status-dependent callbacks\n\t\t\t\t\tstatusCode: function (map) {\n\t\t\t\t\t\tvar code;\n\t\t\t\t\t\tif (map) {\n\t\t\t\t\t\t\tif (completed) {\n\n\t\t\t\t\t\t\t\t// Execute the appropriate callbacks\n\t\t\t\t\t\t\t\tjqXHR.always(map[jqXHR.status]);\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t// Lazy-add the new callbacks in a way that preserves old ones\n\t\t\t\t\t\t\t\tfor (code in map) {\n\t\t\t\t\t\t\t\t\tstatusCode[code] = [statusCode[code], map[code]];\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn this;\n\t\t\t\t\t},\n\n\t\t\t\t\t// Cancel the request\n\t\t\t\t\tabort: function (statusText) {\n\t\t\t\t\t\tvar finalText = statusText || strAbort;\n\t\t\t\t\t\tif (transport) {\n\t\t\t\t\t\t\ttransport.abort(finalText);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdone(0, finalText);\n\t\t\t\t\t\treturn this;\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t// Attach deferreds\n\t\t\tdeferred.promise(jqXHR);\n\n\t\t\t// Add protocol if not provided (prefilters might expect it)\n\t\t\t// Handle falsy url in the settings object (trac-10093: consistency with old signature)\n\t\t\t// We also use the url parameter if available\n\t\t\ts.url = ((url || s.url || location.href) + \"\")\n\t\t\t\t.replace(rprotocol, location.protocol + \"//\");\n\n\t\t\t// Alias method option to type as per ticket trac-12004\n\t\t\ts.type = options.method || options.type || s.method || s.type;\n\n\t\t\t// Extract dataTypes list\n\t\t\ts.dataTypes = (s.dataType || \"*\").toLowerCase().match(rnothtmlwhite) || [\"\"];\n\n\t\t\t// A cross-domain request is in order when the origin doesn't match the current origin.\n\t\t\tif (s.crossDomain == null) {\n\t\t\t\turlAnchor = document.createElement(\"a\");\n\n\t\t\t\t// Support: IE <=8 - 11, Edge 12 - 15\n\t\t\t\t// IE throws exception on accessing the href property if url is malformed,\n\t\t\t\t// e.g. http://example.com:80x/\n\t\t\t\ttry {\n\t\t\t\t\turlAnchor.href = s.url;\n\n\t\t\t\t\t// Support: IE <=8 - 11 only\n\t\t\t\t\t// Anchor's host property isn't correctly set when s.url is relative\n\t\t\t\t\turlAnchor.href = urlAnchor.href;\n\t\t\t\t\ts.crossDomain = originAnchor.protocol + \"//\" + originAnchor.host !==\n\t\t\t\t\t\turlAnchor.protocol + \"//\" + urlAnchor.host;\n\t\t\t\t} catch (e) {\n\n\t\t\t\t\t// If there is an error parsing the URL, assume it is crossDomain,\n\t\t\t\t\t// it can be rejected by the transport if it is invalid\n\t\t\t\t\ts.crossDomain = true;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Convert data if not already a string\n\t\t\tif (s.data && s.processData && typeof s.data !== \"string\") {\n\t\t\t\ts.data = jQuery.param(s.data, s.traditional);\n\t\t\t}\n\n\t\t\t// Apply prefilters\n\t\t\tinspectPrefiltersOrTransports(prefilters, s, options, jqXHR);\n\n\t\t\t// If request was aborted inside a prefilter, stop there\n\t\t\tif (completed) {\n\t\t\t\treturn jqXHR;\n\t\t\t}\n\n\t\t\t// We can fire global events as of now if asked to\n\t\t\t// Don't fire events if jQuery.event is undefined in an AMD-usage scenario (trac-15118)\n\t\t\tfireGlobals = jQuery.event && s.global;\n\n\t\t\t// Watch for a new set of requests\n\t\t\tif (fireGlobals && jQuery.active++ === 0) {\n\t\t\t\tjQuery.event.trigger(\"ajaxStart\");\n\t\t\t}\n\n\t\t\t// Uppercase the type\n\t\t\ts.type = s.type.toUpperCase();\n\n\t\t\t// Determine if request has content\n\t\t\ts.hasContent = !rnoContent.test(s.type);\n\n\t\t\t// Save the URL in case we're toying with the If-Modified-Since\n\t\t\t// and/or If-None-Match header later on\n\t\t\t// Remove hash to simplify url manipulation\n\t\t\tcacheURL = s.url.replace(rhash, \"\");\n\n\t\t\t// More options handling for requests with no content\n\t\t\tif (!s.hasContent) {\n\n\t\t\t\t// Remember the hash so we can put it back\n\t\t\t\tuncached = s.url.slice(cacheURL.length);\n\n\t\t\t\t// If data is available and should be processed, append data to url\n\t\t\t\tif (s.data && (s.processData || typeof s.data === \"string\")) {\n\t\t\t\t\tcacheURL += (rquery.test(cacheURL) ? \"&\" : \"?\") + s.data;\n\n\t\t\t\t\t// trac-9682: remove data so that it's not used in an eventual retry\n\t\t\t\t\tdelete s.data;\n\t\t\t\t}\n\n\t\t\t\t// Add or update anti-cache param if needed\n\t\t\t\tif (s.cache === false) {\n\t\t\t\t\tcacheURL = cacheURL.replace(rantiCache, \"$1\");\n\t\t\t\t\tuncached = (rquery.test(cacheURL) ? \"&\" : \"?\") + \"_=\" + (nonce.guid++) +\n\t\t\t\t\t\tuncached;\n\t\t\t\t}\n\n\t\t\t\t// Put hash and anti-cache on the URL that will be requested (gh-1732)\n\t\t\t\ts.url = cacheURL + uncached;\n\n\t\t\t\t// Change '%20' to '+' if this is encoded form body content (gh-2658)\n\t\t\t} else if (s.data && s.processData &&\n\t\t\t\t(s.contentType || \"\").indexOf(\"application/x-www-form-urlencoded\") === 0) {\n\t\t\t\ts.data = s.data.replace(r20, \"+\");\n\t\t\t}\n\n\t\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\t\tif (s.ifModified) {\n\t\t\t\tif (jQuery.lastModified[cacheURL]) {\n\t\t\t\t\tjqXHR.setRequestHeader(\"If-Modified-Since\", jQuery.lastModified[cacheURL]);\n\t\t\t\t}\n\t\t\t\tif (jQuery.etag[cacheURL]) {\n\t\t\t\t\tjqXHR.setRequestHeader(\"If-None-Match\", jQuery.etag[cacheURL]);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Set the correct header, if data is being sent\n\t\t\tif (s.data && s.hasContent && s.contentType !== false || options.contentType) {\n\t\t\t\tjqXHR.setRequestHeader(\"Content-Type\", s.contentType);\n\t\t\t}\n\n\t\t\t// Set the Accepts header for the server, depending on the dataType\n\t\t\tjqXHR.setRequestHeader(\n\t\t\t\t\"Accept\",\n\t\t\t\ts.dataTypes[0] && s.accepts[s.dataTypes[0]] ?\n\t\t\t\t\ts.accepts[s.dataTypes[0]] +\n\t\t\t\t\t(s.dataTypes[0] !== \"*\" ? \", \" + allTypes + \"; q=0.01\" : \"\") :\n\t\t\t\t\ts.accepts[\"*\"]\n\t\t\t);\n\n\t\t\t// Check for headers option\n\t\t\tfor (i in s.headers) {\n\t\t\t\tjqXHR.setRequestHeader(i, s.headers[i]);\n\t\t\t}\n\n\t\t\t// Allow custom headers/mimetypes and early abort\n\t\t\tif (s.beforeSend &&\n\t\t\t\t(s.beforeSend.call(callbackContext, jqXHR, s) === false || completed)) {\n\n\t\t\t\t// Abort if not done already and return\n\t\t\t\treturn jqXHR.abort();\n\t\t\t}\n\n\t\t\t// Aborting is no longer a cancellation\n\t\t\tstrAbort = \"abort\";\n\n\t\t\t// Install callbacks on deferreds\n\t\t\tcompleteDeferred.add(s.complete);\n\t\t\tjqXHR.done(s.success);\n\t\t\tjqXHR.fail(s.error);\n\n\t\t\t// Get transport\n\t\t\ttransport = inspectPrefiltersOrTransports(transports, s, options, jqXHR);\n\n\t\t\t// If no transport, we auto-abort\n\t\t\tif (!transport) {\n\t\t\t\tdone(-1, \"No Transport\");\n\t\t\t} else {\n\t\t\t\tjqXHR.readyState = 1;\n\n\t\t\t\t// Send global event\n\t\t\t\tif (fireGlobals) {\n\t\t\t\t\tglobalEventContext.trigger(\"ajaxSend\", [jqXHR, s]);\n\t\t\t\t}\n\n\t\t\t\t// If request was aborted inside ajaxSend, stop there\n\t\t\t\tif (completed) {\n\t\t\t\t\treturn jqXHR;\n\t\t\t\t}\n\n\t\t\t\t// Timeout\n\t\t\t\tif (s.async && s.timeout > 0) {\n\t\t\t\t\ttimeoutTimer = window.setTimeout(function () {\n\t\t\t\t\t\tjqXHR.abort(\"timeout\");\n\t\t\t\t\t}, s.timeout);\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tcompleted = false;\n\t\t\t\t\ttransport.send(requestHeaders, done);\n\t\t\t\t} catch (e) {\n\n\t\t\t\t\t// Rethrow post-completion exceptions\n\t\t\t\t\tif (completed) {\n\t\t\t\t\t\tthrow e;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Propagate others as results\n\t\t\t\t\tdone(-1, e);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Callback for when everything is done\n\t\t\tfunction done(status, nativeStatusText, responses, headers) {\n\t\t\t\tvar isSuccess, success, error, response, modified,\n\t\t\t\t\tstatusText = nativeStatusText;\n\n\t\t\t\t// Ignore repeat invocations\n\t\t\t\tif (completed) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tcompleted = true;\n\n\t\t\t\t// Clear timeout if it exists\n\t\t\t\tif (timeoutTimer) {\n\t\t\t\t\twindow.clearTimeout(timeoutTimer);\n\t\t\t\t}\n\n\t\t\t\t// Dereference transport for early garbage collection\n\t\t\t\t// (no matter how long the jqXHR object will be used)\n\t\t\t\ttransport = undefined;\n\n\t\t\t\t// Cache response headers\n\t\t\t\tresponseHeadersString = headers || \"\";\n\n\t\t\t\t// Set readyState\n\t\t\t\tjqXHR.readyState = status > 0 ? 4 : 0;\n\n\t\t\t\t// Determine if successful\n\t\t\t\tisSuccess = status >= 200 && status < 300 || status === 304;\n\n\t\t\t\t// Get response data\n\t\t\t\tif (responses) {\n\t\t\t\t\tresponse = ajaxHandleResponses(s, jqXHR, responses);\n\t\t\t\t}\n\n\t\t\t\t// Use a noop converter for missing script but not if jsonp\n\t\t\t\tif (!isSuccess &&\n\t\t\t\t\tjQuery.inArray(\"script\", s.dataTypes) > -1 &&\n\t\t\t\t\tjQuery.inArray(\"json\", s.dataTypes) < 0) {\n\t\t\t\t\ts.converters[\"text script\"] = function () { };\n\t\t\t\t}\n\n\t\t\t\t// Convert no matter what (that way responseXXX fields are always set)\n\t\t\t\tresponse = ajaxConvert(s, response, jqXHR, isSuccess);\n\n\t\t\t\t// If successful, handle type chaining\n\t\t\t\tif (isSuccess) {\n\n\t\t\t\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\t\t\t\tif (s.ifModified) {\n\t\t\t\t\t\tmodified = jqXHR.getResponseHeader(\"Last-Modified\");\n\t\t\t\t\t\tif (modified) {\n\t\t\t\t\t\t\tjQuery.lastModified[cacheURL] = modified;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmodified = jqXHR.getResponseHeader(\"etag\");\n\t\t\t\t\t\tif (modified) {\n\t\t\t\t\t\t\tjQuery.etag[cacheURL] = modified;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// if no content\n\t\t\t\t\tif (status === 204 || s.type === \"HEAD\") {\n\t\t\t\t\t\tstatusText = \"nocontent\";\n\n\t\t\t\t\t\t// if not modified\n\t\t\t\t\t} else if (status === 304) {\n\t\t\t\t\t\tstatusText = \"notmodified\";\n\n\t\t\t\t\t\t// If we have data, let's convert it\n\t\t\t\t\t} else {\n\t\t\t\t\t\tstatusText = response.state;\n\t\t\t\t\t\tsuccess = response.data;\n\t\t\t\t\t\terror = response.error;\n\t\t\t\t\t\tisSuccess = !error;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\n\t\t\t\t\t// Extract error from statusText and normalize for non-aborts\n\t\t\t\t\terror = statusText;\n\t\t\t\t\tif (status || !statusText) {\n\t\t\t\t\t\tstatusText = \"error\";\n\t\t\t\t\t\tif (status < 0) {\n\t\t\t\t\t\t\tstatus = 0;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Set data for the fake xhr object\n\t\t\t\tjqXHR.status = status;\n\t\t\t\tjqXHR.statusText = (nativeStatusText || statusText) + \"\";\n\n\t\t\t\t// Success/Error\n\t\t\t\tif (isSuccess) {\n\t\t\t\t\tdeferred.resolveWith(callbackContext, [success, statusText, jqXHR]);\n\t\t\t\t} else {\n\t\t\t\t\tdeferred.rejectWith(callbackContext, [jqXHR, statusText, error]);\n\t\t\t\t}\n\n\t\t\t\t// Status-dependent callbacks\n\t\t\t\tjqXHR.statusCode(statusCode);\n\t\t\t\tstatusCode = undefined;\n\n\t\t\t\tif (fireGlobals) {\n\t\t\t\t\tglobalEventContext.trigger(isSuccess ? \"ajaxSuccess\" : \"ajaxError\",\n\t\t\t\t\t\t[jqXHR, s, isSuccess ? success : error]);\n\t\t\t\t}\n\n\t\t\t\t// Complete\n\t\t\t\tcompleteDeferred.fireWith(callbackContext, [jqXHR, statusText]);\n\n\t\t\t\tif (fireGlobals) {\n\t\t\t\t\tglobalEventContext.trigger(\"ajaxComplete\", [jqXHR, s]);\n\n\t\t\t\t\t// Handle the global AJAX counter\n\t\t\t\t\tif (!(--jQuery.active)) {\n\t\t\t\t\t\tjQuery.event.trigger(\"ajaxStop\");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn jqXHR;\n\t\t},\n\n\t\tgetJSON: function (url, data, callback) {\n\t\t\treturn jQuery.get(url, data, callback, \"json\");\n\t\t},\n\n\t\tgetScript: function (url, callback) {\n\t\t\treturn jQuery.get(url, undefined, callback, \"script\");\n\t\t}\n\t});\n\n\tjQuery.each([\"get\", \"post\"], function (_i, method) {\n\t\tjQuery[method] = function (url, data, callback, type) {\n\n\t\t\t// Shift arguments if data argument was omitted\n\t\t\tif (isFunction(data)) {\n\t\t\t\ttype = type || callback;\n\t\t\t\tcallback = data;\n\t\t\t\tdata = undefined;\n\t\t\t}\n\n\t\t\t// The url can be an options object (which then must have .url)\n\t\t\treturn jQuery.ajax(jQuery.extend({\n\t\t\t\turl: url,\n\t\t\t\ttype: method,\n\t\t\t\tdataType: type,\n\t\t\t\tdata: data,\n\t\t\t\tsuccess: callback\n\t\t\t}, jQuery.isPlainObject(url) && url));\n\t\t};\n\t});\n\n\tjQuery.ajaxPrefilter(function (s) {\n\t\tvar i;\n\t\tfor (i in s.headers) {\n\t\t\tif (i.toLowerCase() === \"content-type\") {\n\t\t\t\ts.contentType = s.headers[i] || \"\";\n\t\t\t}\n\t\t}\n\t});\n\n\n\tjQuery._evalUrl = function (url, options, doc) {\n\t\treturn jQuery.ajax({\n\t\t\turl: url,\n\n\t\t\t// Make this explicit, since user can override this through ajaxSetup (trac-11264)\n\t\t\ttype: \"GET\",\n\t\t\tdataType: \"script\",\n\t\t\tcache: true,\n\t\t\tasync: false,\n\t\t\tglobal: false,\n\n\t\t\t// Only evaluate the response if it is successful (gh-4126)\n\t\t\t// dataFilter is not invoked for failure responses, so using it instead\n\t\t\t// of the default converter is kludgy but it works.\n\t\t\tconverters: {\n\t\t\t\t\"text script\": function () { }\n\t\t\t},\n\t\t\tdataFilter: function (response) {\n\t\t\t\tjQuery.globalEval(response, options, doc);\n\t\t\t}\n\t\t});\n\t};\n\n\n\tjQuery.fn.extend({\n\t\twrapAll: function (html) {\n\t\t\tvar wrap;\n\n\t\t\tif (this[0]) {\n\t\t\t\tif (isFunction(html)) {\n\t\t\t\t\thtml = html.call(this[0]);\n\t\t\t\t}\n\n\t\t\t\t// The elements to wrap the target around\n\t\t\t\twrap = jQuery(html, this[0].ownerDocument).eq(0).clone(true);\n\n\t\t\t\tif (this[0].parentNode) {\n\t\t\t\t\twrap.insertBefore(this[0]);\n\t\t\t\t}\n\n\t\t\t\twrap.map(function () {\n\t\t\t\t\tvar elem = this;\n\n\t\t\t\t\twhile (elem.firstElementChild) {\n\t\t\t\t\t\telem = elem.firstElementChild;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn elem;\n\t\t\t\t}).append(this);\n\t\t\t}\n\n\t\t\treturn this;\n\t\t},\n\n\t\twrapInner: function (html) {\n\t\t\tif (isFunction(html)) {\n\t\t\t\treturn this.each(function (i) {\n\t\t\t\t\tjQuery(this).wrapInner(html.call(this, i));\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn this.each(function () {\n\t\t\t\tvar self = jQuery(this),\n\t\t\t\t\tcontents = self.contents();\n\n\t\t\t\tif (contents.length) {\n\t\t\t\t\tcontents.wrapAll(html);\n\n\t\t\t\t} else {\n\t\t\t\t\tself.append(html);\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\twrap: function (html) {\n\t\t\tvar htmlIsFunction = isFunction(html);\n\n\t\t\treturn this.each(function (i) {\n\t\t\t\tjQuery(this).wrapAll(htmlIsFunction ? html.call(this, i) : html);\n\t\t\t});\n\t\t},\n\n\t\tunwrap: function (selector) {\n\t\t\tthis.parent(selector).not(\"body\").each(function () {\n\t\t\t\tjQuery(this).replaceWith(this.childNodes);\n\t\t\t});\n\t\t\treturn this;\n\t\t}\n\t});\n\n\n\tjQuery.expr.pseudos.hidden = function (elem) {\n\t\treturn !jQuery.expr.pseudos.visible(elem);\n\t};\n\tjQuery.expr.pseudos.visible = function (elem) {\n\t\treturn !!(elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length);\n\t};\n\n\n\n\n\tjQuery.ajaxSettings.xhr = function () {\n\t\ttry {\n\t\t\treturn new window.XMLHttpRequest();\n\t\t} catch (e) { }\n\t};\n\n\tvar xhrSuccessStatus = {\n\n\t\t// File protocol always yields status code 0, assume 200\n\t\t0: 200,\n\n\t\t// Support: IE <=9 only\n\t\t// trac-1450: sometimes IE returns 1223 when it should be 204\n\t\t1223: 204\n\t},\n\t\txhrSupported = jQuery.ajaxSettings.xhr();\n\n\tsupport.cors = !!xhrSupported && (\"withCredentials\" in xhrSupported);\n\tsupport.ajax = xhrSupported = !!xhrSupported;\n\n\tjQuery.ajaxTransport(function (options) {\n\t\tvar callback, errorCallback;\n\n\t\t// Cross domain only allowed if supported through XMLHttpRequest\n\t\tif (support.cors || xhrSupported && !options.crossDomain) {\n\t\t\treturn {\n\t\t\t\tsend: function (headers, complete) {\n\t\t\t\t\tvar i,\n\t\t\t\t\t\txhr = options.xhr();\n\n\t\t\t\t\txhr.open(\n\t\t\t\t\t\toptions.type,\n\t\t\t\t\t\toptions.url,\n\t\t\t\t\t\toptions.async,\n\t\t\t\t\t\toptions.username,\n\t\t\t\t\t\toptions.password\n\t\t\t\t\t);\n\n\t\t\t\t\t// Apply custom fields if provided\n\t\t\t\t\tif (options.xhrFields) {\n\t\t\t\t\t\tfor (i in options.xhrFields) {\n\t\t\t\t\t\t\txhr[i] = options.xhrFields[i];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Override mime type if needed\n\t\t\t\t\tif (options.mimeType && xhr.overrideMimeType) {\n\t\t\t\t\t\txhr.overrideMimeType(options.mimeType);\n\t\t\t\t\t}\n\n\t\t\t\t\t// X-Requested-With header\n\t\t\t\t\t// For cross-domain requests, seeing as conditions for a preflight are\n\t\t\t\t\t// akin to a jigsaw puzzle, we simply never set it to be sure.\n\t\t\t\t\t// (it can always be set on a per-request basis or even using ajaxSetup)\n\t\t\t\t\t// For same-domain requests, won't change header if already provided.\n\t\t\t\t\tif (!options.crossDomain && !headers[\"X-Requested-With\"]) {\n\t\t\t\t\t\theaders[\"X-Requested-With\"] = \"XMLHttpRequest\";\n\t\t\t\t\t}\n\n\t\t\t\t\t// Set headers\n\t\t\t\t\tfor (i in headers) {\n\t\t\t\t\t\txhr.setRequestHeader(i, headers[i]);\n\t\t\t\t\t}\n\n\t\t\t\t\t// Callback\n\t\t\t\t\tcallback = function (type) {\n\t\t\t\t\t\treturn function () {\n\t\t\t\t\t\t\tif (callback) {\n\t\t\t\t\t\t\t\tcallback = errorCallback = xhr.onload =\n\t\t\t\t\t\t\t\t\txhr.onerror = xhr.onabort = xhr.ontimeout =\n\t\t\t\t\t\t\t\t\txhr.onreadystatechange = null;\n\n\t\t\t\t\t\t\t\tif (type === \"abort\") {\n\t\t\t\t\t\t\t\t\txhr.abort();\n\t\t\t\t\t\t\t\t} else if (type === \"error\") {\n\n\t\t\t\t\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t\t\t\t\t// On a manual native abort, IE9 throws\n\t\t\t\t\t\t\t\t\t// errors on any property access that is not readyState\n\t\t\t\t\t\t\t\t\tif (typeof xhr.status !== \"number\") {\n\t\t\t\t\t\t\t\t\t\tcomplete(0, \"error\");\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tcomplete(\n\n\t\t\t\t\t\t\t\t\t\t\t// File: protocol always yields status 0; see trac-8605, trac-14207\n\t\t\t\t\t\t\t\t\t\t\txhr.status,\n\t\t\t\t\t\t\t\t\t\t\txhr.statusText\n\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tcomplete(\n\t\t\t\t\t\t\t\t\t\txhrSuccessStatus[xhr.status] || xhr.status,\n\t\t\t\t\t\t\t\t\t\txhr.statusText,\n\n\t\t\t\t\t\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t\t\t\t\t\t// IE9 has no XHR2 but throws on binary (trac-11426)\n\t\t\t\t\t\t\t\t\t\t// For XHR2 non-text, let the caller handle it (gh-2498)\n\t\t\t\t\t\t\t\t\t\t(xhr.responseType || \"text\") !== \"text\" ||\n\t\t\t\t\t\t\t\t\t\t\ttypeof xhr.responseText !== \"string\" ?\n\t\t\t\t\t\t\t\t\t\t\t{ binary: xhr.response } :\n\t\t\t\t\t\t\t\t\t\t\t{ text: xhr.responseText },\n\t\t\t\t\t\t\t\t\t\txhr.getAllResponseHeaders()\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\t\t\t\t\t};\n\n\t\t\t\t\t// Listen to events\n\t\t\t\t\txhr.onload = callback();\n\t\t\t\t\terrorCallback = xhr.onerror = xhr.ontimeout = callback(\"error\");\n\n\t\t\t\t\t// Support: IE 9 only\n\t\t\t\t\t// Use onreadystatechange to replace onabort\n\t\t\t\t\t// to handle uncaught aborts\n\t\t\t\t\tif (xhr.onabort !== undefined) {\n\t\t\t\t\t\txhr.onabort = errorCallback;\n\t\t\t\t\t} else {\n\t\t\t\t\t\txhr.onreadystatechange = function () {\n\n\t\t\t\t\t\t\t// Check readyState before timeout as it changes\n\t\t\t\t\t\t\tif (xhr.readyState === 4) {\n\n\t\t\t\t\t\t\t\t// Allow onerror to be called first,\n\t\t\t\t\t\t\t\t// but that will not handle a native abort\n\t\t\t\t\t\t\t\t// Also, save errorCallback to a variable\n\t\t\t\t\t\t\t\t// as xhr.onerror cannot be accessed\n\t\t\t\t\t\t\t\twindow.setTimeout(function () {\n\t\t\t\t\t\t\t\t\tif (callback) {\n\t\t\t\t\t\t\t\t\t\terrorCallback();\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\t// Create the abort callback\n\t\t\t\t\tcallback = callback(\"abort\");\n\n\t\t\t\t\ttry {\n\n\t\t\t\t\t\t// Do send the request (this may raise an exception)\n\t\t\t\t\t\txhr.send(options.hasContent && options.data || null);\n\t\t\t\t\t} catch (e) {\n\n\t\t\t\t\t\t// trac-14683: Only rethrow if this hasn't been notified as an error yet\n\t\t\t\t\t\tif (callback) {\n\t\t\t\t\t\t\tthrow e;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\t\tabort: function () {\n\t\t\t\t\tif (callback) {\n\t\t\t\t\t\tcallback();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t});\n\n\n\n\n\t// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432)\n\tjQuery.ajaxPrefilter(function (s) {\n\t\tif (s.crossDomain) {\n\t\t\ts.contents.script = false;\n\t\t}\n\t});\n\n\t// Install script dataType\n\tjQuery.ajaxSetup({\n\t\taccepts: {\n\t\t\tscript: \"text/javascript, application/javascript, \" +\n\t\t\t\t\"application/ecmascript, application/x-ecmascript\"\n\t\t},\n\t\tcontents: {\n\t\t\tscript: /\\b(?:java|ecma)script\\b/\n\t\t},\n\t\tconverters: {\n\t\t\t\"text script\": function (text) {\n\t\t\t\tjQuery.globalEval(text);\n\t\t\t\treturn text;\n\t\t\t}\n\t\t}\n\t});\n\n\t// Handle cache's special case and crossDomain\n\tjQuery.ajaxPrefilter(\"script\", function (s) {\n\t\tif (s.cache === undefined) {\n\t\t\ts.cache = false;\n\t\t}\n\t\tif (s.crossDomain) {\n\t\t\ts.type = \"GET\";\n\t\t}\n\t});\n\n\t// Bind script tag hack transport\n\tjQuery.ajaxTransport(\"script\", function (s) {\n\n\t\t// This transport only deals with cross domain or forced-by-attrs requests\n\t\tif (s.crossDomain || s.scriptAttrs) {\n\t\t\tvar script, callback;\n\t\t\treturn {\n\t\t\t\tsend: function (_, complete) {\n\t\t\t\t\tscript = jQuery(\"<script>\")\n\t\t\t\t\t\t.attr(s.scriptAttrs || {})\n\t\t\t\t\t\t.prop({ charset: s.scriptCharset, src: s.url })\n\t\t\t\t\t\t.on(\"load error\", callback = function (evt) {\n\t\t\t\t\t\t\tscript.remove();\n\t\t\t\t\t\t\tcallback = null;\n\t\t\t\t\t\t\tif (evt) {\n\t\t\t\t\t\t\t\tcomplete(evt.type === \"error\" ? 404 : 200, evt.type);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\n\t\t\t\t\t// Use native DOM manipulation to avoid our domManip AJAX trickery\n\t\t\t\t\tdocument.head.appendChild(script[0]);\n\t\t\t\t},\n\t\t\t\tabort: function () {\n\t\t\t\t\tif (callback) {\n\t\t\t\t\t\tcallback();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t});\n\n\n\n\n\tvar oldCallbacks = [],\n\t\trjsonp = /(=)\\?(?=&|$)|\\?\\?/;\n\n\t// Default jsonp settings\n\tjQuery.ajaxSetup({\n\t\tjsonp: \"callback\",\n\t\tjsonpCallback: function () {\n\t\t\tvar callback = oldCallbacks.pop() || (jQuery.expando + \"_\" + (nonce.guid++));\n\t\t\tthis[callback] = true;\n\t\t\treturn callback;\n\t\t}\n\t});\n\n\t// Detect, normalize options and install callbacks for jsonp requests\n\tjQuery.ajaxPrefilter(\"json jsonp\", function (s, originalSettings, jqXHR) {\n\n\t\tvar callbackName, overwritten, responseContainer,\n\t\t\tjsonProp = s.jsonp !== false && (rjsonp.test(s.url) ?\n\t\t\t\t\"url\" :\n\t\t\t\ttypeof s.data === \"string\" &&\n\t\t\t\t(s.contentType || \"\")\n\t\t\t\t\t.indexOf(\"application/x-www-form-urlencoded\") === 0 &&\n\t\t\t\trjsonp.test(s.data) && \"data\"\n\t\t\t);\n\n\t\t// Handle iff the expected data type is \"jsonp\" or we have a parameter to set\n\t\tif (jsonProp || s.dataTypes[0] === \"jsonp\") {\n\n\t\t\t// Get callback name, remembering preexisting value associated with it\n\t\t\tcallbackName = s.jsonpCallback = isFunction(s.jsonpCallback) ?\n\t\t\t\ts.jsonpCallback() :\n\t\t\t\ts.jsonpCallback;\n\n\t\t\t// Insert callback into url or form data\n\t\t\tif (jsonProp) {\n\t\t\t\ts[jsonProp] = s[jsonProp].replace(rjsonp, \"$1\" + callbackName);\n\t\t\t} else if (s.jsonp !== false) {\n\t\t\t\ts.url += (rquery.test(s.url) ? \"&\" : \"?\") + s.jsonp + \"=\" + callbackName;\n\t\t\t}\n\n\t\t\t// Use data converter to retrieve json after script execution\n\t\t\ts.converters[\"script json\"] = function () {\n\t\t\t\tif (!responseContainer) {\n\t\t\t\t\tjQuery.error(callbackName + \" was not called\");\n\t\t\t\t}\n\t\t\t\treturn responseContainer[0];\n\t\t\t};\n\n\t\t\t// Force json dataType\n\t\t\ts.dataTypes[0] = \"json\";\n\n\t\t\t// Install callback\n\t\t\toverwritten = window[callbackName];\n\t\t\twindow[callbackName] = function () {\n\t\t\t\tresponseContainer = arguments;\n\t\t\t};\n\n\t\t\t// Clean-up function (fires after converters)\n\t\t\tjqXHR.always(function () {\n\n\t\t\t\t// If previous value didn't exist - remove it\n\t\t\t\tif (overwritten === undefined) {\n\t\t\t\t\tjQuery(window).removeProp(callbackName);\n\n\t\t\t\t\t// Otherwise restore preexisting value\n\t\t\t\t} else {\n\t\t\t\t\twindow[callbackName] = overwritten;\n\t\t\t\t}\n\n\t\t\t\t// Save back as free\n\t\t\t\tif (s[callbackName]) {\n\n\t\t\t\t\t// Make sure that re-using the options doesn't screw things around\n\t\t\t\t\ts.jsonpCallback = originalSettings.jsonpCallback;\n\n\t\t\t\t\t// Save the callback name for future use\n\t\t\t\t\toldCallbacks.push(callbackName);\n\t\t\t\t}\n\n\t\t\t\t// Call if it was a function and we have a response\n\t\t\t\tif (responseContainer && isFunction(overwritten)) {\n\t\t\t\t\toverwritten(responseContainer[0]);\n\t\t\t\t}\n\n\t\t\t\tresponseContainer = overwritten = undefined;\n\t\t\t});\n\n\t\t\t// Delegate to script\n\t\t\treturn \"script\";\n\t\t}\n\t});\n\n\n\n\n\t// Support: Safari 8 only\n\t// In Safari 8 documents created via document.implementation.createHTMLDocument\n\t// collapse sibling forms: the second one becomes a child of the first one.\n\t// Because of that, this security measure has to be disabled in Safari 8.\n\t// https://bugs.webkit.org/show_bug.cgi?id=137337\n\tsupport.createHTMLDocument = (function () {\n\t\tvar body = document.implementation.createHTMLDocument(\"\").body;\n\t\tbody.innerHTML = \"<form></form><form></form>\";\n\t\treturn body.childNodes.length === 2;\n\t})();\n\n\n\t// Argument \"data\" should be string of html\n\t// context (optional): If specified, the fragment will be created in this context,\n\t// defaults to document\n\t// keepScripts (optional): If true, will include scripts passed in the html string\n\tjQuery.parseHTML = function (data, context, keepScripts) {\n\t\tif (typeof data !== \"string\") {\n\t\t\treturn [];\n\t\t}\n\t\tif (typeof context === \"boolean\") {\n\t\t\tkeepScripts = context;\n\t\t\tcontext = false;\n\t\t}\n\n\t\tvar base, parsed, scripts;\n\n\t\tif (!context) {\n\n\t\t\t// Stop scripts or inline event handlers from being executed immediately\n\t\t\t// by using document.implementation\n\t\t\tif (support.createHTMLDocument) {\n\t\t\t\tcontext = document.implementation.createHTMLDocument(\"\");\n\n\t\t\t\t// Set the base href for the created document\n\t\t\t\t// so any parsed elements with URLs\n\t\t\t\t// are based on the document's URL (gh-2965)\n\t\t\t\tbase = context.createElement(\"base\");\n\t\t\t\tbase.href = document.location.href;\n\t\t\t\tcontext.head.appendChild(base);\n\t\t\t} else {\n\t\t\t\tcontext = document;\n\t\t\t}\n\t\t}\n\n\t\tparsed = rsingleTag.exec(data);\n\t\tscripts = !keepScripts && [];\n\n\t\t// Single tag\n\t\tif (parsed) {\n\t\t\treturn [context.createElement(parsed[1])];\n\t\t}\n\n\t\tparsed = buildFragment([data], context, scripts);\n\n\t\tif (scripts && scripts.length) {\n\t\t\tjQuery(scripts).remove();\n\t\t}\n\n\t\treturn jQuery.merge([], parsed.childNodes);\n\t};\n\n\n\t/**\n\t * Load a url into a page\n\t */\n\tjQuery.fn.load = function (url, params, callback) {\n\t\tvar selector, type, response,\n\t\t\tself = this,\n\t\t\toff = url.indexOf(\" \");\n\n\t\tif (off > -1) {\n\t\t\tselector = stripAndCollapse(url.slice(off));\n\t\t\turl = url.slice(0, off);\n\t\t}\n\n\t\t// If it's a function\n\t\tif (isFunction(params)) {\n\n\t\t\t// We assume that it's the callback\n\t\t\tcallback = params;\n\t\t\tparams = undefined;\n\n\t\t\t// Otherwise, build a param string\n\t\t} else if (params && typeof params === \"object\") {\n\t\t\ttype = \"POST\";\n\t\t}\n\n\t\t// If we have elements to modify, make the request\n\t\tif (self.length > 0) {\n\t\t\tjQuery.ajax({\n\t\t\t\turl: url,\n\n\t\t\t\t// If \"type\" variable is undefined, then \"GET\" method will be used.\n\t\t\t\t// Make value of this field explicit since\n\t\t\t\t// user can override it through ajaxSetup method\n\t\t\t\ttype: type || \"GET\",\n\t\t\t\tdataType: \"html\",\n\t\t\t\tdata: params\n\t\t\t}).done(function (responseText) {\n\n\t\t\t\t// Save response for use in complete callback\n\t\t\t\tresponse = arguments;\n\n\t\t\t\tself.html(selector ?\n\n\t\t\t\t\t// If a selector was specified, locate the right elements in a dummy div\n\t\t\t\t\t// Exclude scripts to avoid IE 'Permission Denied' errors\n\t\t\t\t\tjQuery(\"<div>\").append(jQuery.parseHTML(responseText)).find(selector) :\n\n\t\t\t\t\t// Otherwise use the full result\n\t\t\t\t\tresponseText);\n\n\t\t\t\t// If the request succeeds, this function gets \"data\", \"status\", \"jqXHR\"\n\t\t\t\t// but they are ignored because response was set above.\n\t\t\t\t// If it fails, this function gets \"jqXHR\", \"status\", \"error\"\n\t\t\t}).always(callback && function (jqXHR, status) {\n\t\t\t\tself.each(function () {\n\t\t\t\t\tcallback.apply(this, response || [jqXHR.responseText, status, jqXHR]);\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\n\t\treturn this;\n\t};\n\n\n\n\n\tjQuery.expr.pseudos.animated = function (elem) {\n\t\treturn jQuery.grep(jQuery.timers, function (fn) {\n\t\t\treturn elem === fn.elem;\n\t\t}).length;\n\t};\n\n\n\n\n\tjQuery.offset = {\n\t\tsetOffset: function (elem, options, i) {\n\t\t\tvar curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition,\n\t\t\t\tposition = jQuery.css(elem, \"position\"),\n\t\t\t\tcurElem = jQuery(elem),\n\t\t\t\tprops = {};\n\n\t\t\t// Set position first, in-case top/left are set even on static elem\n\t\t\tif (position === \"static\") {\n\t\t\t\telem.style.position = \"relative\";\n\t\t\t}\n\n\t\t\tcurOffset = curElem.offset();\n\t\t\tcurCSSTop = jQuery.css(elem, \"top\");\n\t\t\tcurCSSLeft = jQuery.css(elem, \"left\");\n\t\t\tcalculatePosition = (position === \"absolute\" || position === \"fixed\") &&\n\t\t\t\t(curCSSTop + curCSSLeft).indexOf(\"auto\") > -1;\n\n\t\t\t// Need to be able to calculate position if either\n\t\t\t// top or left is auto and position is either absolute or fixed\n\t\t\tif (calculatePosition) {\n\t\t\t\tcurPosition = curElem.position();\n\t\t\t\tcurTop = curPosition.top;\n\t\t\t\tcurLeft = curPosition.left;\n\n\t\t\t} else {\n\t\t\t\tcurTop = parseFloat(curCSSTop) || 0;\n\t\t\t\tcurLeft = parseFloat(curCSSLeft) || 0;\n\t\t\t}\n\n\t\t\tif (isFunction(options)) {\n\n\t\t\t\t// Use jQuery.extend here to allow modification of coordinates argument (gh-1848)\n\t\t\t\toptions = options.call(elem, i, jQuery.extend({}, curOffset));\n\t\t\t}\n\n\t\t\tif (options.top != null) {\n\t\t\t\tprops.top = (options.top - curOffset.top) + curTop;\n\t\t\t}\n\t\t\tif (options.left != null) {\n\t\t\t\tprops.left = (options.left - curOffset.left) + curLeft;\n\t\t\t}\n\n\t\t\tif (\"using\" in options) {\n\t\t\t\toptions.using.call(elem, props);\n\n\t\t\t} else {\n\t\t\t\tcurElem.css(props);\n\t\t\t}\n\t\t}\n\t};\n\n\tjQuery.fn.extend({\n\n\t\t// offset() relates an element's border box to the document origin\n\t\toffset: function (options) {\n\n\t\t\t// Preserve chaining for setter\n\t\t\tif (arguments.length) {\n\t\t\t\treturn options === undefined ?\n\t\t\t\t\tthis :\n\t\t\t\t\tthis.each(function (i) {\n\t\t\t\t\t\tjQuery.offset.setOffset(this, options, i);\n\t\t\t\t\t});\n\t\t\t}\n\n\t\t\tvar rect, win,\n\t\t\t\telem = this[0];\n\n\t\t\tif (!elem) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Return zeros for disconnected and hidden (display: none) elements (gh-2310)\n\t\t\t// Support: IE <=11 only\n\t\t\t// Running getBoundingClientRect on a\n\t\t\t// disconnected node in IE throws an error\n\t\t\tif (!elem.getClientRects().length) {\n\t\t\t\treturn { top: 0, left: 0 };\n\t\t\t}\n\n\t\t\t// Get document-relative position by adding viewport scroll to viewport-relative gBCR\n\t\t\trect = elem.getBoundingClientRect();\n\t\t\twin = elem.ownerDocument.defaultView;\n\t\t\treturn {\n\t\t\t\ttop: rect.top + win.pageYOffset,\n\t\t\t\tleft: rect.left + win.pageXOffset\n\t\t\t};\n\t\t},\n\n\t\t// position() relates an element's margin box to its offset parent's padding box\n\t\t// This corresponds to the behavior of CSS absolute positioning\n\t\tposition: function () {\n\t\t\tif (!this[0]) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar offsetParent, offset, doc,\n\t\t\t\telem = this[0],\n\t\t\t\tparentOffset = { top: 0, left: 0 };\n\n\t\t\t// position:fixed elements are offset from the viewport, which itself always has zero offset\n\t\t\tif (jQuery.css(elem, \"position\") === \"fixed\") {\n\n\t\t\t\t// Assume position:fixed implies availability of getBoundingClientRect\n\t\t\t\toffset = elem.getBoundingClientRect();\n\n\t\t\t} else {\n\t\t\t\toffset = this.offset();\n\n\t\t\t\t// Account for the *real* offset parent, which can be the document or its root element\n\t\t\t\t// when a statically positioned element is identified\n\t\t\t\tdoc = elem.ownerDocument;\n\t\t\t\toffsetParent = elem.offsetParent || doc.documentElement;\n\t\t\t\twhile (offsetParent &&\n\t\t\t\t\t(offsetParent === doc.body || offsetParent === doc.documentElement) &&\n\t\t\t\t\tjQuery.css(offsetParent, \"position\") === \"static\") {\n\n\t\t\t\t\toffsetParent = offsetParent.parentNode;\n\t\t\t\t}\n\t\t\t\tif (offsetParent && offsetParent !== elem && offsetParent.nodeType === 1) {\n\n\t\t\t\t\t// Incorporate borders into its offset, since they are outside its content origin\n\t\t\t\t\tparentOffset = jQuery(offsetParent).offset();\n\t\t\t\t\tparentOffset.top += jQuery.css(offsetParent, \"borderTopWidth\", true);\n\t\t\t\t\tparentOffset.left += jQuery.css(offsetParent, \"borderLeftWidth\", true);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Subtract parent offsets and element margins\n\t\t\treturn {\n\t\t\t\ttop: offset.top - parentOffset.top - jQuery.css(elem, \"marginTop\", true),\n\t\t\t\tleft: offset.left - parentOffset.left - jQuery.css(elem, \"marginLeft\", true)\n\t\t\t};\n\t\t},\n\n\t\t// This method will return documentElement in the following cases:\n\t\t// 1) For the element inside the iframe without offsetParent, this method will return\n\t\t//    documentElement of the parent window\n\t\t// 2) For the hidden or detached element\n\t\t// 3) For body or html element, i.e. in case of the html node - it will return itself\n\t\t//\n\t\t// but those exceptions were never presented as a real life use-cases\n\t\t// and might be considered as more preferable results.\n\t\t//\n\t\t// This logic, however, is not guaranteed and can change at any point in the future\n\t\toffsetParent: function () {\n\t\t\treturn this.map(function () {\n\t\t\t\tvar offsetParent = this.offsetParent;\n\n\t\t\t\twhile (offsetParent && jQuery.css(offsetParent, \"position\") === \"static\") {\n\t\t\t\t\toffsetParent = offsetParent.offsetParent;\n\t\t\t\t}\n\n\t\t\t\treturn offsetParent || documentElement;\n\t\t\t});\n\t\t}\n\t});\n\n\t// Create scrollLeft and scrollTop methods\n\tjQuery.each({ scrollLeft: \"pageXOffset\", scrollTop: \"pageYOffset\" }, function (method, prop) {\n\t\tvar top = \"pageYOffset\" === prop;\n\n\t\tjQuery.fn[method] = function (val) {\n\t\t\treturn access(this, function (elem, method, val) {\n\n\t\t\t\t// Coalesce documents and windows\n\t\t\t\tvar win;\n\t\t\t\tif (isWindow(elem)) {\n\t\t\t\t\twin = elem;\n\t\t\t\t} else if (elem.nodeType === 9) {\n\t\t\t\t\twin = elem.defaultView;\n\t\t\t\t}\n\n\t\t\t\tif (val === undefined) {\n\t\t\t\t\treturn win ? win[prop] : elem[method];\n\t\t\t\t}\n\n\t\t\t\tif (win) {\n\t\t\t\t\twin.scrollTo(\n\t\t\t\t\t\t!top ? val : win.pageXOffset,\n\t\t\t\t\t\ttop ? val : win.pageYOffset\n\t\t\t\t\t);\n\n\t\t\t\t} else {\n\t\t\t\t\telem[method] = val;\n\t\t\t\t}\n\t\t\t}, method, val, arguments.length);\n\t\t};\n\t});\n\n\t// Support: Safari <=7 - 9.1, Chrome <=37 - 49\n\t// Add the top/left cssHooks using jQuery.fn.position\n\t// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084\n\t// Blink bug: https://bugs.chromium.org/p/chromium/issues/detail?id=589347\n\t// getComputedStyle returns percent when specified for top/left/bottom/right;\n\t// rather than make the css module depend on the offset module, just check for it here\n\tjQuery.each([\"top\", \"left\"], function (_i, prop) {\n\t\tjQuery.cssHooks[prop] = addGetHookIf(support.pixelPosition,\n\t\t\tfunction (elem, computed) {\n\t\t\t\tif (computed) {\n\t\t\t\t\tcomputed = curCSS(elem, prop);\n\n\t\t\t\t\t// If curCSS returns percentage, fallback to offset\n\t\t\t\t\treturn rnumnonpx.test(computed) ?\n\t\t\t\t\t\tjQuery(elem).position()[prop] + \"px\" :\n\t\t\t\t\t\tcomputed;\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\t});\n\n\n\t// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods\n\tjQuery.each({ Height: \"height\", Width: \"width\" }, function (name, type) {\n\t\tjQuery.each({\n\t\t\tpadding: \"inner\" + name,\n\t\t\tcontent: type,\n\t\t\t\"\": \"outer\" + name\n\t\t}, function (defaultExtra, funcName) {\n\n\t\t\t// Margin is only for outerHeight, outerWidth\n\t\t\tjQuery.fn[funcName] = function (margin, value) {\n\t\t\t\tvar chainable = arguments.length && (defaultExtra || typeof margin !== \"boolean\"),\n\t\t\t\t\textra = defaultExtra || (margin === true || value === true ? \"margin\" : \"border\");\n\n\t\t\t\treturn access(this, function (elem, type, value) {\n\t\t\t\t\tvar doc;\n\n\t\t\t\t\tif (isWindow(elem)) {\n\n\t\t\t\t\t\t// $( window ).outerWidth/Height return w/h including scrollbars (gh-1729)\n\t\t\t\t\t\treturn funcName.indexOf(\"outer\") === 0 ?\n\t\t\t\t\t\t\telem[\"inner\" + name] :\n\t\t\t\t\t\t\telem.document.documentElement[\"client\" + name];\n\t\t\t\t\t}\n\n\t\t\t\t\t// Get document width or height\n\t\t\t\t\tif (elem.nodeType === 9) {\n\t\t\t\t\t\tdoc = elem.documentElement;\n\n\t\t\t\t\t\t// Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height],\n\t\t\t\t\t\t// whichever is greatest\n\t\t\t\t\t\treturn Math.max(\n\t\t\t\t\t\t\telem.body[\"scroll\" + name], doc[\"scroll\" + name],\n\t\t\t\t\t\t\telem.body[\"offset\" + name], doc[\"offset\" + name],\n\t\t\t\t\t\t\tdoc[\"client\" + name]\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\n\t\t\t\t\treturn value === undefined ?\n\n\t\t\t\t\t\t// Get width or height on the element, requesting but not forcing parseFloat\n\t\t\t\t\t\tjQuery.css(elem, type, extra) :\n\n\t\t\t\t\t\t// Set width or height on the element\n\t\t\t\t\t\tjQuery.style(elem, type, value, extra);\n\t\t\t\t}, type, chainable ? margin : undefined, chainable);\n\t\t\t};\n\t\t});\n\t});\n\n\n\tjQuery.each([\n\t\t\"ajaxStart\",\n\t\t\"ajaxStop\",\n\t\t\"ajaxComplete\",\n\t\t\"ajaxError\",\n\t\t\"ajaxSuccess\",\n\t\t\"ajaxSend\"\n\t], function (_i, type) {\n\t\tjQuery.fn[type] = function (fn) {\n\t\t\treturn this.on(type, fn);\n\t\t};\n\t});\n\n\n\n\n\tjQuery.fn.extend({\n\n\t\tbind: function (types, data, fn) {\n\t\t\treturn this.on(types, null, data, fn);\n\t\t},\n\t\tunbind: function (types, fn) {\n\t\t\treturn this.off(types, null, fn);\n\t\t},\n\n\t\tdelegate: function (selector, types, data, fn) {\n\t\t\treturn this.on(types, selector, data, fn);\n\t\t},\n\t\tundelegate: function (selector, types, fn) {\n\n\t\t\t// ( namespace ) or ( selector, types [, fn] )\n\t\t\treturn arguments.length === 1 ?\n\t\t\t\tthis.off(selector, \"**\") :\n\t\t\t\tthis.off(types, selector || \"**\", fn);\n\t\t},\n\n\t\thover: function (fnOver, fnOut) {\n\t\t\treturn this.mouseenter(fnOver).mouseleave(fnOut || fnOver);\n\t\t}\n\t});\n\n\tjQuery.each(\n\t\t(\"blur focus focusin focusout resize scroll click dblclick \" +\n\t\t\t\"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave \" +\n\t\t\t\"change select submit keydown keypress keyup contextmenu\").split(\" \"),\n\t\tfunction (_i, name) {\n\n\t\t\t// Handle event binding\n\t\t\tjQuery.fn[name] = function (data, fn) {\n\t\t\t\treturn arguments.length > 0 ?\n\t\t\t\t\tthis.on(name, null, data, fn) :\n\t\t\t\t\tthis.trigger(name);\n\t\t\t};\n\t\t}\n\t);\n\n\n\n\n\t// Support: Android <=4.0 only\n\t// Make sure we trim BOM and NBSP\n\t// Require that the \"whitespace run\" starts from a non-whitespace\n\t// to avoid O(N^2) behavior when the engine would try matching \"\\s+$\" at each space position.\n\tvar rtrim = /^[\\s\\uFEFF\\xA0]+|([^\\s\\uFEFF\\xA0])[\\s\\uFEFF\\xA0]+$/g;\n\n\t// Bind a function to a context, optionally partially applying any\n\t// arguments.\n\t// jQuery.proxy is deprecated to promote standards (specifically Function#bind)\n\t// However, it is not slated for removal any time soon\n\tjQuery.proxy = function (fn, context) {\n\t\tvar tmp, args, proxy;\n\n\t\tif (typeof context === \"string\") {\n\t\t\ttmp = fn[context];\n\t\t\tcontext = fn;\n\t\t\tfn = tmp;\n\t\t}\n\n\t\t// Quick check to determine if target is callable, in the spec\n\t\t// this throws a TypeError, but we will just return undefined.\n\t\tif (!isFunction(fn)) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\t// Simulated bind\n\t\targs = slice.call(arguments, 2);\n\t\tproxy = function () {\n\t\t\treturn fn.apply(context || this, args.concat(slice.call(arguments)));\n\t\t};\n\n\t\t// Set the guid of unique handler to the same of original handler, so it can be removed\n\t\tproxy.guid = fn.guid = fn.guid || jQuery.guid++;\n\n\t\treturn proxy;\n\t};\n\n\tjQuery.holdReady = function (hold) {\n\t\tif (hold) {\n\t\t\tjQuery.readyWait++;\n\t\t} else {\n\t\t\tjQuery.ready(true);\n\t\t}\n\t};\n\tjQuery.isArray = Array.isArray;\n\tjQuery.parseJSON = JSON.parse;\n\tjQuery.nodeName = nodeName;\n\tjQuery.isFunction = isFunction;\n\tjQuery.isWindow = isWindow;\n\tjQuery.camelCase = camelCase;\n\tjQuery.type = toType;\n\n\tjQuery.now = Date.now;\n\n\tjQuery.isNumeric = function (obj) {\n\n\t\t// As of jQuery 3.0, isNumeric is limited to\n\t\t// strings and numbers (primitives or objects)\n\t\t// that can be coerced to finite numbers (gh-2662)\n\t\tvar type = jQuery.type(obj);\n\t\treturn (type === \"number\" || type === \"string\") &&\n\n\t\t\t// parseFloat NaNs numeric-cast false positives (\"\")\n\t\t\t// ...but misinterprets leading-number strings, particularly hex literals (\"0x...\")\n\t\t\t// subtraction forces infinities to NaN\n\t\t\t!isNaN(obj - parseFloat(obj));\n\t};\n\n\tjQuery.trim = function (text) {\n\t\treturn text == null ?\n\t\t\t\"\" :\n\t\t\t(text + \"\").replace(rtrim, \"$1\");\n\t};\n\n\n\n\t// Register as a named AMD module, since jQuery can be concatenated with other\n\t// files that may use define, but not via a proper concatenation script that\n\t// understands anonymous AMD modules. A named AMD is safest and most robust\n\t// way to register. Lowercase jquery is used because AMD module names are\n\t// derived from file names, and jQuery is normally delivered in a lowercase\n\t// file name. Do this after creating the global so that if an AMD module wants\n\t// to call noConflict to hide this version of jQuery, it will work.\n\n\t// Note that for maximum portability, libraries that are not jQuery should\n\t// declare themselves as anonymous modules, and avoid setting a global if an\n\t// AMD loader is present. jQuery is a special case. For more information, see\n\t// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon\n\n\tif (typeof define === \"function\" && define.amd) {\n\t\tdefine(\"jquery\", [], function () {\n\t\t\treturn jQuery;\n\t\t});\n\t}\n\n\n\n\n\tvar\n\n\t\t// Map over jQuery in case of overwrite\n\t\t_jQuery = window.jQuery,\n\n\t\t// Map over the $ in case of overwrite\n\t\t_$ = window.$;\n\n\tjQuery.noConflict = function (deep) {\n\t\tif (window.$ === jQuery) {\n\t\t\twindow.$ = _$;\n\t\t}\n\n\t\tif (deep && window.jQuery === jQuery) {\n\t\t\twindow.jQuery = _jQuery;\n\t\t}\n\n\t\treturn jQuery;\n\t};\n\n\t// Expose jQuery and $ identifiers, even in AMD\n\t// (trac-7102#comment:10, https://github.com/jquery/jquery/pull/557)\n\t// and CommonJS for browser emulators (trac-13566)\n\tif (typeof noGlobal === \"undefined\") {\n\t\twindow.jQuery = window.$ = jQuery;\n\t}\n\n\n\n\n\treturn jQuery;\n});"
  },
  {
    "path": "src/sourceDev.WebApp/SharedThemes/spacelab/Shared/_Layout.cshtml",
    "content": "﻿@inject ISiteContextResolver siteResolver\n@inject ICoreThemeHelper themeHelper\n@{\n    var themeSettings = themeHelper.GetThemeSettings();\n    @*\n        These settings can be set by a main view to show additional columns.\n        Views that push content into the optional sections SideNav, AsidePrimary, and AsideSecondary\n        are obligated to set the needed viewtate property to true to show the section,\n        otherwise an error will occur.\n        The sideNav column also supports a toggle so it can be hidden and toggled visible even though it renders.\n    *@\n    bool sideNavVisible = true.Equals(ViewData[\"SideNavVisible\"]);\n    string sideNavToggleClass = ViewData[\"SideNavToggle\"]?.ToString() ?? \"collapse\";\n    bool asidePrimaryVisible = true.Equals(ViewData[\"AsidePrimaryVisible\"]);\n    bool asideSecondaryVisible = true.Equals(ViewData[\"AsideSecondaryVisible\"]);\n    var Tenant = await siteResolver.ResolveSite(Context.Request.Host.Host, Context.Request.Path);\n    var siteRoot = \"\";\n    if (!string.IsNullOrWhiteSpace(Tenant.SiteFolderName)) { siteRoot = \"/\" + Tenant.SiteFolderName; }\n    \n}\n<!DOCTYPE html>\n<html lang=\"@CultureInfo.CurrentUICulture.Name\">\n<head>\n    <meta charset=\"utf-8\" />\n    <title>@ViewData[\"Title\"] - @(Tenant?.SiteName ?? \"Sample\")</title>\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1, shrink-to-fit=no\">\n    @RenderSection(\"Meta\", required: false)\n    <environment names=\"Development\">\n        <link rel=\"stylesheet\" href=\"~/css/bootstrap.css\" cs-resolve-theme-resource=\"true\" cs-shared-theme=\"true\" cs-tenant=\"@Tenant\" />\n        <link rel=\"stylesheet\" href=\"~/css/fontawesome-all.min.css\" cs-resolve-theme-resource=\"true\" cs-shared-theme=\"true\" cs-tenant=\"@Tenant\" />\n        <link rel=\"stylesheet\" href=\"~/css/site.css\" cs-resolve-theme-resource=\"true\" cs-shared-theme=\"true\" cs-tenant=\"@Tenant\" asp-append-version=\"true\" />\n    </environment>\n    <environment names=\"Staging,Production\">\n        <link rel=\"stylesheet\" href=\"~/css/bootstrap.min.css\" cs-resolve-theme-resource=\"true\" cs-shared-theme=\"true\" cs-tenant=\"@Tenant\" />\n        <link rel=\"stylesheet\" href=\"~/css/fontawesome-all.min.css\" cs-resolve-theme-resource=\"true\" cs-shared-theme=\"true\" cs-tenant=\"@Tenant\" />\n        <link rel=\"stylesheet\" href=\"~/css/site.min.css\" cs-resolve-theme-resource=\"true\" cs-shared-theme=\"true\" cs-tenant=\"@Tenant\" asp-append-version=\"true\" />\n    </environment>\n    @RenderSection(\"Styles\", required: false)    \n    \n    <google-analytics profile-id=\"@Tenant.GoogleAnalyticsProfileId\" user-id=\"@User.GetUserId()\"></google-analytics>\n    <base href=\"@Context.Request.Path\" />\n</head>\n<body class=\"d-flex flex-column @ViewData[\"BodyClass\"]\">\n    <header class=\"bg-white\">\n        <a id=\"skippy\" class=\"visually-hidden visually-hidden-focusable\" href=\"#content\">\n            <div class=\"container\">\n                <span class=\"skiplink-text\">Skip to main content</span>\n            </div>\n        </a>\n        <div class=\"fixed-top container-fluid brand-header bg-white\">\n            <div class=\"d-flex align-items-center bg-white\">\n                @if (!string.IsNullOrWhiteSpace(Tenant.LogoUrl))\n                {\n                    <div>\n                         <partial name=\"SiteLogoPartial\" model=\"@Tenant\" />\n                    </div>\n                }\n                @if (Tenant.ShowSiteNameLink)\n                {\n                    <div class=\"align-self-center pt-4 pt-sm-0\">\n                         <partial name=\"SiteTitlePartial\" model=\"@Tenant\" />\n                    </div>\n                }\n                @if (!string.IsNullOrWhiteSpace(Tenant.HeaderContent))\n                {\n                    <div class=\"flex-fill align-self-center pt-3 d-none d-md-block\">\n                        <partial name=\"SiteHeaderPartial\" />\n                    </div>\n                }\n            </div>\n        </div>\n        <nav class=\"navbar navbar-expand-md navbar-dark fixed-top bg-primary pt-0 pb-0\">\n            <button class=\"navbar-toggler\" type=\"button\" data-bs-toggle=\"collapse\" data-bs-target=\"#navbarNavDropdown\" aria-controls=\"navbarNavDropdown\" aria-expanded=\"false\" aria-label=\"Toggle navigation\">\n                <span class=\"navbar-toggler-icon\"></span>\n            </button>\n\n            <div class=\"collapse navbar-collapse bg-primary ps-2\" id=\"navbarNavDropdown\">\n                @await Component.InvokeAsync(\"Navigation\", new { viewName = \"Bootstrap5TopNavWithDropdowns\", filterName = NamedNavigationFilters.TopNav, startingNodeKey = \"\" })\n                <partial name=\"_LoginPartialWithDropdowns\" />\n            </div>\n        </nav>\n    </header>\n    <div id=\"wrapper\" class=\"container-fluid cs-container flex-fill\">\n        @await Component.InvokeAsync(\"Navigation\", new { viewName = \"Bootstrap5Breadcrumbs\", filterName = NamedNavigationFilters.Breadcrumbs, startingNodeKey = \"\" })\n        <div class=\"row\">\n            <main id=\"content\" class=\"col order-3\">\n                <partial name=\"AlertsPartial\" />\n                <partial name=\"_CookieConsentPartial\" />\n                <partial name=\"_AutoLogoutWarningPartial\" />\n                @RenderBody()\n            </main>\n            @if (sideNavVisible)\n            {\n                <nav id=\"sidenavmenu\" class=\" col col-3 order-1 @sideNavToggleClass\">\n                    @RenderSection(\"SideNav\", required: false)\n                </nav>\n\n            }\n            @if (asideSecondaryVisible)\n            {\n                <aside id=\"asideSecondary\" class=\"col col-1 order-2\">\n                    @RenderSection(\"AsideSecondary\", required: false)\n                </aside>\n\n            }\n            @if (asidePrimaryVisible)\n            {\n                <aside id=\"asidePrimary\" class=\"col-12 col-md-3 col-sm-12  col-sm-12 order-4\">\n                    @RenderSection(\"AsidePrimary\", required: false)\n                </aside>\n\n            }\n        </div>\n    </div>\n    <footer class=\"sticky-bottom border pt-2 h-100\">\n        <div class=\"w-100 text-center\">\n            <partial name=\"SiteFooterPartial\" />\n        </div>\n        <div class=\"d-flex flex-wrap flex-grow justify-content-center\">\n            <div class=\"p-2\">\n            <ul class=\"list-unstyled d-md-flex flex-wrap\">\n                @if (Tenant != null && !string.IsNullOrWhiteSpace(Tenant.PrivacyPolicy))\n                {\n                    <li class=\"ps-sm-2 me-sm-2\">\n                        <a asp-controller=\"Privacy\" asp-action=\"Index\">Privacy Policy</a>\n                    </li>\n                }\n                <li class=\"ps-sm-2 me-sm-2\">\n                    @* you are free to remove the powered by cloudscribe link but we appreciate it if you choose to keep it! *@\n                    <a class=\"text-nowrap\" target=\"_blank\" href=\"https://www.cloudscribe.com/?utm_source=@Context.Request.Host.Value&amp;utm_medium=referral&amp;utm_campaign=poweredbycloudscribe\">Powered by cloudscribe</a>\n                </li>\n            </ul>\n        </div>\n        <div class=\"ps-sm-2  text-center w-100\"><span class=\"text-nowrap\">Copyright &copy; @DateTime.Now.Year</span><span class=\"d-none d-sm-inline\"> - </span><span> @(Tenant?.SiteName ?? \"Sample\")</span></div>\n        <partial name=\"_CookieConsentRevokePartial\" />\n        </div>\n    </footer>\n    @RenderSection(\"Toolbar\", required: false)\n    <environment names=\"Development\">\n        <script src=\"~/js/jquery.js\" cs-resolve-theme-resource=\"true\" cs-shared-theme=\"true\" cs-tenant=\"@Tenant\"></script>\n        <script src=\"~/js/bootstrap.bundle.js\" cs-resolve-theme-resource=\"true\" cs-shared-theme=\"true\" cs-tenant=\"@Tenant\"></script>\n        <script src=\"~/cr/js/bs4.smartmenus.min.js\"></script>\n    </environment>\n    <environment names=\"Staging,Production\">\n        <script src=\"~/js/jquery.min.js\" cs-resolve-theme-resource=\"true\" cs-shared-theme=\"true\" cs-tenant=\"@Tenant\"></script>\n        <script src=\"~/js/bootstrap.bundle.min.js\" cs-resolve-theme-resource=\"true\" cs-shared-theme=\"true\" cs-tenant=\"@Tenant\"></script>\n        <script src=\"~/cr/js/bs4.smartmenus.min.js\"></script>\n    </environment>\n    @RenderSection(\"Bottom\", required: false)\n    @RenderSection(\"Scripts\", required: false)     \n    @Html.RenderResources(\"js\") @*render any js resources declared via helpers in partial views etc*@\n    <add-this profile-id=\"@Tenant.AddThisDotComUsername\" async></add-this>\n</body>\n</html>\n"
  },
  {
    "path": "src/sourceDev.WebApp/SharedThemes/spacelab/wwwroot/css/_bootswatch.scss",
    "content": "// Spacelab 5.1.3\n// Bootswatch\n\n\n// Variables\n\n$web-font-path: \"https://fonts.googleapis.com/css2?family=Open+Sans:ital,wght@0,400;0,700;1,400;1,700&display=swap\" !default;\n@if $web-font-path {\n  @import url($web-font-path);\n}\n\n// Mixins =\n\n@mixin btn-shadow($color) {\n  @include gradient-y-three-colors(tint-color($color, 24%), $color, 50%, shade-color($color, 8%));\n  filter: none;\n  border: 1px solid shade-color($color, 20%);\n}\n\n// Navbar\n\n.navbar {\n  .nav-link,\n  .navbar-brand {\n    text-shadow: -1px -1px 0 rgba(0, 0, 0, .1);\n    transition: color ease-in-out .2s;\n  }\n\n  @each $color, $value in $theme-colors {\n    &.bg-#{$color} {\n      @include btn-shadow($value);\n    }\n  }\n\n  &.bg-light {\n    .nav-link,\n    .navbar-brand {\n      text-shadow: 1px 1px 0 rgba(255, 255, 255, .1);\n    }\n\n    .navbar-brand {\n      color: $navbar-light-color;\n\n      &:hover {\n        color: $info;\n      }\n    }\n  }\n}\n\n// Buttons\n\n.btn {\n  text-shadow: -1px -1px 0 rgba(0, 0, 0, .1);\n\n  &-link {\n    text-shadow: none;\n  }\n}\n\n@each $color, $value in $theme-colors {\n  .btn-#{$color} {\n    @include btn-shadow($value);\n  }\n\n  .btn-#{$color}:not(.disabled):hover {\n    @include btn-shadow(shade-color($value, 8%));\n  }\n}\n\n[class*=\"btn-outline-\"] {\n  text-shadow: none;\n}\n\n// Indicators\n\n.badge {\n  &.bg-light {\n    color: $dark;\n  }\n}\n\n// Containers\n\n.card,\n.list-group-item {\n  h1,\n  h2,\n  h3,\n  h4,\n  h5,\n  h6 {\n    color: inherit;\n  }\n}\n"
  },
  {
    "path": "src/sourceDev.WebApp/SharedThemes/spacelab/wwwroot/css/_variables.scss",
    "content": "// Spacelab 5.1.3\n// Bootswatch\n\n$theme: \"spacelab\" !default;\n\n//\n// Color system\n//\n\n$white:    #fff !default;\n$gray-100: #f8f9fa !default;\n$gray-200: #eee !default;\n$gray-300: #dee2e6 !default;\n$gray-400: #ced4da !default;\n$gray-500: #999 !default;\n$gray-600: #777 !default;\n$gray-700: #495057 !default;\n$gray-800: #333 !default;\n$gray-900: #2d2d2d !default;\n$black:    #000 !default;\n\n$blue:    #446e9b !default;\n$indigo:  #6610f2 !default;\n$purple:  #6f42c1 !default;\n$pink:    #e83e8c !default;\n$red:     #cd0200 !default;\n$orange:  #fd7e14 !default;\n$yellow:  #d47500 !default;\n$green:   #3cb521 !default;\n$teal:    #20c997 !default;\n$cyan:    #3399f3 !default;\n\n$primary:       $blue !default;\n$secondary:     $gray-500 !default;\n$success:       $green !default;\n$info:          $cyan !default;\n$warning:       $yellow !default;\n$danger:        $red !default;\n$light:         $gray-200 !default;\n$dark:          $gray-800 !default;\n\n$min-contrast-ratio:   2.65 !default;\n\n// Body\n\n$body-color:                $gray-600 !default;\n\n// Links\n\n$link-color:                $info !default;\n\n// Fonts\n\n// stylelint-disable-next-line value-keyword-case\n$font-family-sans-serif:      \"Open Sans\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\" !default;\n$headings-color:              $gray-900 !default;\n\n// Navbar\n\n$navbar-dark-color:                 rgba($white, .75) !default;\n$navbar-dark-hover-color:           $white !default;\n$navbar-light-color:                rgba($black, .4) !default;\n$navbar-light-hover-color:          $info !default;\n$navbar-light-active-color:         $info !default;\n"
  },
  {
    "path": "src/sourceDev.WebApp/SharedThemes/spacelab/wwwroot/css/bootstrap.css",
    "content": "/*!\n * Bootswatch v5.1.3\n * Homepage: https://bootswatch.com\n * Copyright 2012-2021 Thomas Park\n * Licensed under MIT\n * Based on Bootstrap\n*/\n/*!\n * Bootstrap v5.1.3 (https://getbootstrap.com/)\n * Copyright 2011-2021 The Bootstrap Authors\n * Copyright 2011-2021 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n@import url(\"https://fonts.googleapis.com/css2?family=Open+Sans:ital,wght@0,400;0,700;1,400;1,700&display=swap\");\n:root {\n  --bs-blue: #446e9b;\n  --bs-indigo: #6610f2;\n  --bs-purple: #6f42c1;\n  --bs-pink: #e83e8c;\n  --bs-red: #cd0200;\n  --bs-orange: #fd7e14;\n  --bs-yellow: #d47500;\n  --bs-green: #3cb521;\n  --bs-teal: #20c997;\n  --bs-cyan: #3399f3;\n  --bs-white: #fff;\n  --bs-gray: #777;\n  --bs-gray-dark: #333;\n  --bs-gray-100: #f8f9fa;\n  --bs-gray-200: #eee;\n  --bs-gray-300: #dee2e6;\n  --bs-gray-400: #ced4da;\n  --bs-gray-500: #999;\n  --bs-gray-600: #777;\n  --bs-gray-700: #495057;\n  --bs-gray-800: #333;\n  --bs-gray-900: #2d2d2d;\n  --bs-primary: #446e9b;\n  --bs-secondary: #999;\n  --bs-success: #3cb521;\n  --bs-info: #3399f3;\n  --bs-warning: #d47500;\n  --bs-danger: #cd0200;\n  --bs-light: #eee;\n  --bs-dark: #333;\n  --bs-primary-rgb: 68, 110, 155;\n  --bs-secondary-rgb: 153, 153, 153;\n  --bs-success-rgb: 60, 181, 33;\n  --bs-info-rgb: 51, 153, 243;\n  --bs-warning-rgb: 212, 117, 0;\n  --bs-danger-rgb: 205, 2, 0;\n  --bs-light-rgb: 238, 238, 238;\n  --bs-dark-rgb: 51, 51, 51;\n  --bs-white-rgb: 255, 255, 255;\n  --bs-black-rgb: 0, 0, 0;\n  --bs-body-color-rgb: 119, 119, 119;\n  --bs-body-bg-rgb: 255, 255, 255;\n  --bs-font-sans-serif: \"Open Sans\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\";\n  --bs-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n  --bs-gradient: linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));\n  --bs-body-font-family: var(--bs-font-sans-serif);\n  --bs-body-font-size: 1rem;\n  --bs-body-font-weight: 400;\n  --bs-body-line-height: 1.5;\n  --bs-body-color: #777;\n  --bs-body-bg: #fff;\n}\n\n*,\n*::before,\n*::after {\n  box-sizing: border-box;\n}\n\n@media (prefers-reduced-motion: no-preference) {\n  :root {\n    scroll-behavior: smooth;\n  }\n}\n\nbody {\n  margin: 0;\n  font-family: var(--bs-body-font-family);\n  font-size: var(--bs-body-font-size);\n  font-weight: var(--bs-body-font-weight);\n  line-height: var(--bs-body-line-height);\n  color: var(--bs-body-color);\n  text-align: var(--bs-body-text-align);\n  background-color: var(--bs-body-bg);\n  -webkit-text-size-adjust: 100%;\n  -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\n\nhr {\n  margin: 1rem 0;\n  color: inherit;\n  background-color: currentColor;\n  border: 0;\n  opacity: 0.25;\n}\n\nhr:not([size]) {\n  height: 1px;\n}\n\nh1, .h1, h2, .h2, h3, .h3, h4, .h4, h5, .h5, h6, .h6 {\n  margin-top: 0;\n  margin-bottom: 0.5rem;\n  font-weight: 500;\n  line-height: 1.2;\n  color: #2d2d2d;\n}\n\nh1, .h1 {\n  font-size: calc(1.375rem + 1.5vw);\n}\n\n@media (min-width: 1200px) {\n  h1, .h1 {\n    font-size: 2.5rem;\n  }\n}\n\nh2, .h2 {\n  font-size: calc(1.325rem + 0.9vw);\n}\n\n@media (min-width: 1200px) {\n  h2, .h2 {\n    font-size: 2rem;\n  }\n}\n\nh3, .h3 {\n  font-size: calc(1.3rem + 0.6vw);\n}\n\n@media (min-width: 1200px) {\n  h3, .h3 {\n    font-size: 1.75rem;\n  }\n}\n\nh4, .h4 {\n  font-size: calc(1.275rem + 0.3vw);\n}\n\n@media (min-width: 1200px) {\n  h4, .h4 {\n    font-size: 1.5rem;\n  }\n}\n\nh5, .h5 {\n  font-size: 1.25rem;\n}\n\nh6, .h6 {\n  font-size: 1rem;\n}\n\np {\n  margin-top: 0;\n  margin-bottom: 1rem;\n}\n\nabbr[title],\nabbr[data-bs-original-title] {\n  -webkit-text-decoration: underline dotted;\n  text-decoration: underline dotted;\n  cursor: help;\n  -webkit-text-decoration-skip-ink: none;\n  text-decoration-skip-ink: none;\n}\n\naddress {\n  margin-bottom: 1rem;\n  font-style: normal;\n  line-height: inherit;\n}\n\nol,\nul {\n  padding-left: 2rem;\n}\n\nol,\nul,\ndl {\n  margin-top: 0;\n  margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n  margin-bottom: 0;\n}\n\ndt {\n  font-weight: 700;\n}\n\ndd {\n  margin-bottom: .5rem;\n  margin-left: 0;\n}\n\nblockquote {\n  margin: 0 0 1rem;\n}\n\nb,\nstrong {\n  font-weight: bolder;\n}\n\nsmall, .small {\n  font-size: 0.875em;\n}\n\nmark, .mark {\n  padding: 0.2em;\n  background-color: #fcf8e3;\n}\n\nsub,\nsup {\n  position: relative;\n  font-size: 0.75em;\n  line-height: 0;\n  vertical-align: baseline;\n}\n\nsub {\n  bottom: -.25em;\n}\n\nsup {\n  top: -.5em;\n}\n\na {\n  color: #3399f3;\n  text-decoration: underline;\n}\n\na:hover {\n  color: #297ac2;\n}\n\na:not([href]):not([class]), a:not([href]):not([class]):hover {\n  color: inherit;\n  text-decoration: none;\n}\n\npre,\ncode,\nkbd,\nsamp {\n  font-family: var(--bs-font-monospace);\n  font-size: 1em;\n  direction: ltr /* rtl:ignore */;\n  unicode-bidi: bidi-override;\n}\n\npre {\n  display: block;\n  margin-top: 0;\n  margin-bottom: 1rem;\n  overflow: auto;\n  font-size: 0.875em;\n}\n\npre code {\n  font-size: inherit;\n  color: inherit;\n  word-break: normal;\n}\n\ncode {\n  font-size: 0.875em;\n  color: #e83e8c;\n  word-wrap: break-word;\n}\n\na > code {\n  color: inherit;\n}\n\nkbd {\n  padding: 0.2rem 0.4rem;\n  font-size: 0.875em;\n  color: #fff;\n  background-color: #2d2d2d;\n  border-radius: 0.2rem;\n}\n\nkbd kbd {\n  padding: 0;\n  font-size: 1em;\n  font-weight: 700;\n}\n\nfigure {\n  margin: 0 0 1rem;\n}\n\nimg,\nsvg {\n  vertical-align: middle;\n}\n\ntable {\n  caption-side: bottom;\n  border-collapse: collapse;\n}\n\ncaption {\n  padding-top: 0.5rem;\n  padding-bottom: 0.5rem;\n  color: #777;\n  text-align: left;\n}\n\nth {\n  text-align: inherit;\n  text-align: -webkit-match-parent;\n}\n\nthead,\ntbody,\ntfoot,\ntr,\ntd,\nth {\n  border-color: inherit;\n  border-style: solid;\n  border-width: 0;\n}\n\nlabel {\n  display: inline-block;\n}\n\nbutton {\n  border-radius: 0;\n}\n\nbutton:focus:not(:focus-visible) {\n  outline: 0;\n}\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n  margin: 0;\n  font-family: inherit;\n  font-size: inherit;\n  line-height: inherit;\n}\n\nbutton,\nselect {\n  text-transform: none;\n}\n\n[role=\"button\"] {\n  cursor: pointer;\n}\n\nselect {\n  word-wrap: normal;\n}\n\nselect:disabled {\n  opacity: 1;\n}\n\n[list]::-webkit-calendar-picker-indicator {\n  display: none;\n}\n\nbutton,\n[type=\"button\"],\n[type=\"reset\"],\n[type=\"submit\"] {\n  -webkit-appearance: button;\n}\n\nbutton:not(:disabled),\n[type=\"button\"]:not(:disabled),\n[type=\"reset\"]:not(:disabled),\n[type=\"submit\"]:not(:disabled) {\n  cursor: pointer;\n}\n\n::-moz-focus-inner {\n  padding: 0;\n  border-style: none;\n}\n\ntextarea {\n  resize: vertical;\n}\n\nfieldset {\n  min-width: 0;\n  padding: 0;\n  margin: 0;\n  border: 0;\n}\n\nlegend {\n  float: left;\n  width: 100%;\n  padding: 0;\n  margin-bottom: 0.5rem;\n  font-size: calc(1.275rem + 0.3vw);\n  line-height: inherit;\n}\n\n@media (min-width: 1200px) {\n  legend {\n    font-size: 1.5rem;\n  }\n}\n\nlegend + * {\n  clear: left;\n}\n\n::-webkit-datetime-edit-fields-wrapper,\n::-webkit-datetime-edit-text,\n::-webkit-datetime-edit-minute,\n::-webkit-datetime-edit-hour-field,\n::-webkit-datetime-edit-day-field,\n::-webkit-datetime-edit-month-field,\n::-webkit-datetime-edit-year-field {\n  padding: 0;\n}\n\n::-webkit-inner-spin-button {\n  height: auto;\n}\n\n[type=\"search\"] {\n  outline-offset: -2px;\n  -webkit-appearance: textfield;\n}\n\n/* rtl:raw:\n[type=\"tel\"],\n[type=\"url\"],\n[type=\"email\"],\n[type=\"number\"] {\n  direction: ltr;\n}\n*/\n::-webkit-search-decoration {\n  -webkit-appearance: none;\n}\n\n::-webkit-color-swatch-wrapper {\n  padding: 0;\n}\n\n::file-selector-button {\n  font: inherit;\n}\n\n::-webkit-file-upload-button {\n  font: inherit;\n  -webkit-appearance: button;\n}\n\noutput {\n  display: inline-block;\n}\n\niframe {\n  border: 0;\n}\n\nsummary {\n  display: list-item;\n  cursor: pointer;\n}\n\nprogress {\n  vertical-align: baseline;\n}\n\n[hidden] {\n  display: none !important;\n}\n\n.lead {\n  font-size: 1.25rem;\n  font-weight: 300;\n}\n\n.display-1 {\n  font-size: calc(1.625rem + 4.5vw);\n  font-weight: 300;\n  line-height: 1.2;\n}\n\n@media (min-width: 1200px) {\n  .display-1 {\n    font-size: 5rem;\n  }\n}\n\n.display-2 {\n  font-size: calc(1.575rem + 3.9vw);\n  font-weight: 300;\n  line-height: 1.2;\n}\n\n@media (min-width: 1200px) {\n  .display-2 {\n    font-size: 4.5rem;\n  }\n}\n\n.display-3 {\n  font-size: calc(1.525rem + 3.3vw);\n  font-weight: 300;\n  line-height: 1.2;\n}\n\n@media (min-width: 1200px) {\n  .display-3 {\n    font-size: 4rem;\n  }\n}\n\n.display-4 {\n  font-size: calc(1.475rem + 2.7vw);\n  font-weight: 300;\n  line-height: 1.2;\n}\n\n@media (min-width: 1200px) {\n  .display-4 {\n    font-size: 3.5rem;\n  }\n}\n\n.display-5 {\n  font-size: calc(1.425rem + 2.1vw);\n  font-weight: 300;\n  line-height: 1.2;\n}\n\n@media (min-width: 1200px) {\n  .display-5 {\n    font-size: 3rem;\n  }\n}\n\n.display-6 {\n  font-size: calc(1.375rem + 1.5vw);\n  font-weight: 300;\n  line-height: 1.2;\n}\n\n@media (min-width: 1200px) {\n  .display-6 {\n    font-size: 2.5rem;\n  }\n}\n\n.list-unstyled {\n  padding-left: 0;\n  list-style: none;\n}\n\n.list-inline {\n  padding-left: 0;\n  list-style: none;\n}\n\n.list-inline-item {\n  display: inline-block;\n}\n\n.list-inline-item:not(:last-child) {\n  margin-right: 0.5rem;\n}\n\n.initialism {\n  font-size: 0.875em;\n  text-transform: uppercase;\n}\n\n.blockquote {\n  margin-bottom: 1rem;\n  font-size: 1.25rem;\n}\n\n.blockquote > :last-child {\n  margin-bottom: 0;\n}\n\n.blockquote-footer {\n  margin-top: -1rem;\n  margin-bottom: 1rem;\n  font-size: 0.875em;\n  color: #777;\n}\n\n.blockquote-footer::before {\n  content: \"\\2014\\00A0\";\n}\n\n.img-fluid {\n  max-width: 100%;\n  height: auto;\n}\n\n.img-thumbnail {\n  padding: 0.25rem;\n  background-color: #fff;\n  border: 1px solid #dee2e6;\n  border-radius: 0.25rem;\n  max-width: 100%;\n  height: auto;\n}\n\n.figure {\n  display: inline-block;\n}\n\n.figure-img {\n  margin-bottom: 0.5rem;\n  line-height: 1;\n}\n\n.figure-caption {\n  font-size: 0.875em;\n  color: #777;\n}\n\n.container,\n.container-fluid,\n.container-sm,\n.container-md,\n.container-lg,\n.container-xl,\n.container-xxl {\n  width: 100%;\n  padding-right: var(--bs-gutter-x, 0.75rem);\n  padding-left: var(--bs-gutter-x, 0.75rem);\n  margin-right: auto;\n  margin-left: auto;\n}\n\n@media (min-width: 576px) {\n  .container, .container-sm {\n    max-width: 540px;\n  }\n}\n\n@media (min-width: 768px) {\n  .container, .container-sm, .container-md {\n    max-width: 720px;\n  }\n}\n\n@media (min-width: 992px) {\n  .container, .container-sm, .container-md, .container-lg {\n    max-width: 960px;\n  }\n}\n\n@media (min-width: 1200px) {\n  .container, .container-sm, .container-md, .container-lg, .container-xl {\n    max-width: 1140px;\n  }\n}\n\n@media (min-width: 1400px) {\n  .container, .container-sm, .container-md, .container-lg, .container-xl, .container-xxl {\n    max-width: 1320px;\n  }\n}\n\n.row {\n  --bs-gutter-x: 1.5rem;\n  --bs-gutter-y: 0;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n  flex-wrap: wrap;\n  margin-top: calc(-1 * var(--bs-gutter-y));\n  margin-right: calc(-.5 * var(--bs-gutter-x));\n  margin-left: calc(-.5 * var(--bs-gutter-x));\n}\n\n.row > * {\n  -ms-flex-negative: 0;\n  flex-shrink: 0;\n  width: 100%;\n  max-width: 100%;\n  padding-right: calc(var(--bs-gutter-x) * .5);\n  padding-left: calc(var(--bs-gutter-x) * .5);\n  margin-top: var(--bs-gutter-y);\n}\n\n.col {\n  -ms-flex: 1 0 0%;\n  flex: 1 0 0%;\n}\n\n.row-cols-auto > * {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: auto;\n}\n\n.row-cols-1 > * {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 100%;\n}\n\n.row-cols-2 > * {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 50%;\n}\n\n.row-cols-3 > * {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 33.333333%;\n}\n\n.row-cols-4 > * {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 25%;\n}\n\n.row-cols-5 > * {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 20%;\n}\n\n.row-cols-6 > * {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 16.666667%;\n}\n\n.col-auto {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: auto;\n}\n\n.col-1 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 8.333333%;\n}\n\n.col-2 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 16.666667%;\n}\n\n.col-3 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 25%;\n}\n\n.col-4 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 33.333333%;\n}\n\n.col-5 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 41.666667%;\n}\n\n.col-6 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 50%;\n}\n\n.col-7 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 58.333333%;\n}\n\n.col-8 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 66.666667%;\n}\n\n.col-9 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 75%;\n}\n\n.col-10 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 83.333333%;\n}\n\n.col-11 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 91.666667%;\n}\n\n.col-12 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 100%;\n}\n\n.offset-1 {\n  margin-left: 8.333333%;\n}\n\n.offset-2 {\n  margin-left: 16.666667%;\n}\n\n.offset-3 {\n  margin-left: 25%;\n}\n\n.offset-4 {\n  margin-left: 33.333333%;\n}\n\n.offset-5 {\n  margin-left: 41.666667%;\n}\n\n.offset-6 {\n  margin-left: 50%;\n}\n\n.offset-7 {\n  margin-left: 58.333333%;\n}\n\n.offset-8 {\n  margin-left: 66.666667%;\n}\n\n.offset-9 {\n  margin-left: 75%;\n}\n\n.offset-10 {\n  margin-left: 83.333333%;\n}\n\n.offset-11 {\n  margin-left: 91.666667%;\n}\n\n.g-0,\n.gx-0 {\n  --bs-gutter-x: 0;\n}\n\n.g-0,\n.gy-0 {\n  --bs-gutter-y: 0;\n}\n\n.g-1,\n.gx-1 {\n  --bs-gutter-x: 0.25rem;\n}\n\n.g-1,\n.gy-1 {\n  --bs-gutter-y: 0.25rem;\n}\n\n.g-2,\n.gx-2 {\n  --bs-gutter-x: 0.5rem;\n}\n\n.g-2,\n.gy-2 {\n  --bs-gutter-y: 0.5rem;\n}\n\n.g-3,\n.gx-3 {\n  --bs-gutter-x: 1rem;\n}\n\n.g-3,\n.gy-3 {\n  --bs-gutter-y: 1rem;\n}\n\n.g-4,\n.gx-4 {\n  --bs-gutter-x: 1.5rem;\n}\n\n.g-4,\n.gy-4 {\n  --bs-gutter-y: 1.5rem;\n}\n\n.g-5,\n.gx-5 {\n  --bs-gutter-x: 3rem;\n}\n\n.g-5,\n.gy-5 {\n  --bs-gutter-y: 3rem;\n}\n\n@media (min-width: 576px) {\n  .col-sm {\n    -ms-flex: 1 0 0%;\n    flex: 1 0 0%;\n  }\n  .row-cols-sm-auto > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .row-cols-sm-1 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .row-cols-sm-2 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .row-cols-sm-3 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 33.333333%;\n  }\n  .row-cols-sm-4 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .row-cols-sm-5 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 20%;\n  }\n  .row-cols-sm-6 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 16.666667%;\n  }\n  .col-sm-auto {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .col-sm-1 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 8.333333%;\n  }\n  .col-sm-2 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 16.666667%;\n  }\n  .col-sm-3 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .col-sm-4 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 33.333333%;\n  }\n  .col-sm-5 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 41.666667%;\n  }\n  .col-sm-6 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .col-sm-7 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 58.333333%;\n  }\n  .col-sm-8 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 66.666667%;\n  }\n  .col-sm-9 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 75%;\n  }\n  .col-sm-10 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 83.333333%;\n  }\n  .col-sm-11 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 91.666667%;\n  }\n  .col-sm-12 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .offset-sm-0 {\n    margin-left: 0;\n  }\n  .offset-sm-1 {\n    margin-left: 8.333333%;\n  }\n  .offset-sm-2 {\n    margin-left: 16.666667%;\n  }\n  .offset-sm-3 {\n    margin-left: 25%;\n  }\n  .offset-sm-4 {\n    margin-left: 33.333333%;\n  }\n  .offset-sm-5 {\n    margin-left: 41.666667%;\n  }\n  .offset-sm-6 {\n    margin-left: 50%;\n  }\n  .offset-sm-7 {\n    margin-left: 58.333333%;\n  }\n  .offset-sm-8 {\n    margin-left: 66.666667%;\n  }\n  .offset-sm-9 {\n    margin-left: 75%;\n  }\n  .offset-sm-10 {\n    margin-left: 83.333333%;\n  }\n  .offset-sm-11 {\n    margin-left: 91.666667%;\n  }\n  .g-sm-0,\n  .gx-sm-0 {\n    --bs-gutter-x: 0;\n  }\n  .g-sm-0,\n  .gy-sm-0 {\n    --bs-gutter-y: 0;\n  }\n  .g-sm-1,\n  .gx-sm-1 {\n    --bs-gutter-x: 0.25rem;\n  }\n  .g-sm-1,\n  .gy-sm-1 {\n    --bs-gutter-y: 0.25rem;\n  }\n  .g-sm-2,\n  .gx-sm-2 {\n    --bs-gutter-x: 0.5rem;\n  }\n  .g-sm-2,\n  .gy-sm-2 {\n    --bs-gutter-y: 0.5rem;\n  }\n  .g-sm-3,\n  .gx-sm-3 {\n    --bs-gutter-x: 1rem;\n  }\n  .g-sm-3,\n  .gy-sm-3 {\n    --bs-gutter-y: 1rem;\n  }\n  .g-sm-4,\n  .gx-sm-4 {\n    --bs-gutter-x: 1.5rem;\n  }\n  .g-sm-4,\n  .gy-sm-4 {\n    --bs-gutter-y: 1.5rem;\n  }\n  .g-sm-5,\n  .gx-sm-5 {\n    --bs-gutter-x: 3rem;\n  }\n  .g-sm-5,\n  .gy-sm-5 {\n    --bs-gutter-y: 3rem;\n  }\n}\n\n@media (min-width: 768px) {\n  .col-md {\n    -ms-flex: 1 0 0%;\n    flex: 1 0 0%;\n  }\n  .row-cols-md-auto > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .row-cols-md-1 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .row-cols-md-2 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .row-cols-md-3 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 33.333333%;\n  }\n  .row-cols-md-4 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .row-cols-md-5 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 20%;\n  }\n  .row-cols-md-6 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 16.666667%;\n  }\n  .col-md-auto {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .col-md-1 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 8.333333%;\n  }\n  .col-md-2 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 16.666667%;\n  }\n  .col-md-3 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .col-md-4 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 33.333333%;\n  }\n  .col-md-5 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 41.666667%;\n  }\n  .col-md-6 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .col-md-7 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 58.333333%;\n  }\n  .col-md-8 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 66.666667%;\n  }\n  .col-md-9 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 75%;\n  }\n  .col-md-10 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 83.333333%;\n  }\n  .col-md-11 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 91.666667%;\n  }\n  .col-md-12 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .offset-md-0 {\n    margin-left: 0;\n  }\n  .offset-md-1 {\n    margin-left: 8.333333%;\n  }\n  .offset-md-2 {\n    margin-left: 16.666667%;\n  }\n  .offset-md-3 {\n    margin-left: 25%;\n  }\n  .offset-md-4 {\n    margin-left: 33.333333%;\n  }\n  .offset-md-5 {\n    margin-left: 41.666667%;\n  }\n  .offset-md-6 {\n    margin-left: 50%;\n  }\n  .offset-md-7 {\n    margin-left: 58.333333%;\n  }\n  .offset-md-8 {\n    margin-left: 66.666667%;\n  }\n  .offset-md-9 {\n    margin-left: 75%;\n  }\n  .offset-md-10 {\n    margin-left: 83.333333%;\n  }\n  .offset-md-11 {\n    margin-left: 91.666667%;\n  }\n  .g-md-0,\n  .gx-md-0 {\n    --bs-gutter-x: 0;\n  }\n  .g-md-0,\n  .gy-md-0 {\n    --bs-gutter-y: 0;\n  }\n  .g-md-1,\n  .gx-md-1 {\n    --bs-gutter-x: 0.25rem;\n  }\n  .g-md-1,\n  .gy-md-1 {\n    --bs-gutter-y: 0.25rem;\n  }\n  .g-md-2,\n  .gx-md-2 {\n    --bs-gutter-x: 0.5rem;\n  }\n  .g-md-2,\n  .gy-md-2 {\n    --bs-gutter-y: 0.5rem;\n  }\n  .g-md-3,\n  .gx-md-3 {\n    --bs-gutter-x: 1rem;\n  }\n  .g-md-3,\n  .gy-md-3 {\n    --bs-gutter-y: 1rem;\n  }\n  .g-md-4,\n  .gx-md-4 {\n    --bs-gutter-x: 1.5rem;\n  }\n  .g-md-4,\n  .gy-md-4 {\n    --bs-gutter-y: 1.5rem;\n  }\n  .g-md-5,\n  .gx-md-5 {\n    --bs-gutter-x: 3rem;\n  }\n  .g-md-5,\n  .gy-md-5 {\n    --bs-gutter-y: 3rem;\n  }\n}\n\n@media (min-width: 992px) {\n  .col-lg {\n    -ms-flex: 1 0 0%;\n    flex: 1 0 0%;\n  }\n  .row-cols-lg-auto > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .row-cols-lg-1 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .row-cols-lg-2 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .row-cols-lg-3 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 33.333333%;\n  }\n  .row-cols-lg-4 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .row-cols-lg-5 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 20%;\n  }\n  .row-cols-lg-6 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 16.666667%;\n  }\n  .col-lg-auto {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .col-lg-1 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 8.333333%;\n  }\n  .col-lg-2 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 16.666667%;\n  }\n  .col-lg-3 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .col-lg-4 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 33.333333%;\n  }\n  .col-lg-5 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 41.666667%;\n  }\n  .col-lg-6 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .col-lg-7 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 58.333333%;\n  }\n  .col-lg-8 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 66.666667%;\n  }\n  .col-lg-9 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 75%;\n  }\n  .col-lg-10 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 83.333333%;\n  }\n  .col-lg-11 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 91.666667%;\n  }\n  .col-lg-12 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .offset-lg-0 {\n    margin-left: 0;\n  }\n  .offset-lg-1 {\n    margin-left: 8.333333%;\n  }\n  .offset-lg-2 {\n    margin-left: 16.666667%;\n  }\n  .offset-lg-3 {\n    margin-left: 25%;\n  }\n  .offset-lg-4 {\n    margin-left: 33.333333%;\n  }\n  .offset-lg-5 {\n    margin-left: 41.666667%;\n  }\n  .offset-lg-6 {\n    margin-left: 50%;\n  }\n  .offset-lg-7 {\n    margin-left: 58.333333%;\n  }\n  .offset-lg-8 {\n    margin-left: 66.666667%;\n  }\n  .offset-lg-9 {\n    margin-left: 75%;\n  }\n  .offset-lg-10 {\n    margin-left: 83.333333%;\n  }\n  .offset-lg-11 {\n    margin-left: 91.666667%;\n  }\n  .g-lg-0,\n  .gx-lg-0 {\n    --bs-gutter-x: 0;\n  }\n  .g-lg-0,\n  .gy-lg-0 {\n    --bs-gutter-y: 0;\n  }\n  .g-lg-1,\n  .gx-lg-1 {\n    --bs-gutter-x: 0.25rem;\n  }\n  .g-lg-1,\n  .gy-lg-1 {\n    --bs-gutter-y: 0.25rem;\n  }\n  .g-lg-2,\n  .gx-lg-2 {\n    --bs-gutter-x: 0.5rem;\n  }\n  .g-lg-2,\n  .gy-lg-2 {\n    --bs-gutter-y: 0.5rem;\n  }\n  .g-lg-3,\n  .gx-lg-3 {\n    --bs-gutter-x: 1rem;\n  }\n  .g-lg-3,\n  .gy-lg-3 {\n    --bs-gutter-y: 1rem;\n  }\n  .g-lg-4,\n  .gx-lg-4 {\n    --bs-gutter-x: 1.5rem;\n  }\n  .g-lg-4,\n  .gy-lg-4 {\n    --bs-gutter-y: 1.5rem;\n  }\n  .g-lg-5,\n  .gx-lg-5 {\n    --bs-gutter-x: 3rem;\n  }\n  .g-lg-5,\n  .gy-lg-5 {\n    --bs-gutter-y: 3rem;\n  }\n}\n\n@media (min-width: 1200px) {\n  .col-xl {\n    -ms-flex: 1 0 0%;\n    flex: 1 0 0%;\n  }\n  .row-cols-xl-auto > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .row-cols-xl-1 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .row-cols-xl-2 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .row-cols-xl-3 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 33.333333%;\n  }\n  .row-cols-xl-4 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .row-cols-xl-5 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 20%;\n  }\n  .row-cols-xl-6 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 16.666667%;\n  }\n  .col-xl-auto {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .col-xl-1 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 8.333333%;\n  }\n  .col-xl-2 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 16.666667%;\n  }\n  .col-xl-3 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .col-xl-4 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 33.333333%;\n  }\n  .col-xl-5 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 41.666667%;\n  }\n  .col-xl-6 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .col-xl-7 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 58.333333%;\n  }\n  .col-xl-8 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 66.666667%;\n  }\n  .col-xl-9 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 75%;\n  }\n  .col-xl-10 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 83.333333%;\n  }\n  .col-xl-11 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 91.666667%;\n  }\n  .col-xl-12 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .offset-xl-0 {\n    margin-left: 0;\n  }\n  .offset-xl-1 {\n    margin-left: 8.333333%;\n  }\n  .offset-xl-2 {\n    margin-left: 16.666667%;\n  }\n  .offset-xl-3 {\n    margin-left: 25%;\n  }\n  .offset-xl-4 {\n    margin-left: 33.333333%;\n  }\n  .offset-xl-5 {\n    margin-left: 41.666667%;\n  }\n  .offset-xl-6 {\n    margin-left: 50%;\n  }\n  .offset-xl-7 {\n    margin-left: 58.333333%;\n  }\n  .offset-xl-8 {\n    margin-left: 66.666667%;\n  }\n  .offset-xl-9 {\n    margin-left: 75%;\n  }\n  .offset-xl-10 {\n    margin-left: 83.333333%;\n  }\n  .offset-xl-11 {\n    margin-left: 91.666667%;\n  }\n  .g-xl-0,\n  .gx-xl-0 {\n    --bs-gutter-x: 0;\n  }\n  .g-xl-0,\n  .gy-xl-0 {\n    --bs-gutter-y: 0;\n  }\n  .g-xl-1,\n  .gx-xl-1 {\n    --bs-gutter-x: 0.25rem;\n  }\n  .g-xl-1,\n  .gy-xl-1 {\n    --bs-gutter-y: 0.25rem;\n  }\n  .g-xl-2,\n  .gx-xl-2 {\n    --bs-gutter-x: 0.5rem;\n  }\n  .g-xl-2,\n  .gy-xl-2 {\n    --bs-gutter-y: 0.5rem;\n  }\n  .g-xl-3,\n  .gx-xl-3 {\n    --bs-gutter-x: 1rem;\n  }\n  .g-xl-3,\n  .gy-xl-3 {\n    --bs-gutter-y: 1rem;\n  }\n  .g-xl-4,\n  .gx-xl-4 {\n    --bs-gutter-x: 1.5rem;\n  }\n  .g-xl-4,\n  .gy-xl-4 {\n    --bs-gutter-y: 1.5rem;\n  }\n  .g-xl-5,\n  .gx-xl-5 {\n    --bs-gutter-x: 3rem;\n  }\n  .g-xl-5,\n  .gy-xl-5 {\n    --bs-gutter-y: 3rem;\n  }\n}\n\n@media (min-width: 1400px) {\n  .col-xxl {\n    -ms-flex: 1 0 0%;\n    flex: 1 0 0%;\n  }\n  .row-cols-xxl-auto > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .row-cols-xxl-1 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .row-cols-xxl-2 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .row-cols-xxl-3 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 33.333333%;\n  }\n  .row-cols-xxl-4 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .row-cols-xxl-5 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 20%;\n  }\n  .row-cols-xxl-6 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 16.666667%;\n  }\n  .col-xxl-auto {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .col-xxl-1 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 8.333333%;\n  }\n  .col-xxl-2 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 16.666667%;\n  }\n  .col-xxl-3 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .col-xxl-4 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 33.333333%;\n  }\n  .col-xxl-5 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 41.666667%;\n  }\n  .col-xxl-6 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .col-xxl-7 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 58.333333%;\n  }\n  .col-xxl-8 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 66.666667%;\n  }\n  .col-xxl-9 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 75%;\n  }\n  .col-xxl-10 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 83.333333%;\n  }\n  .col-xxl-11 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 91.666667%;\n  }\n  .col-xxl-12 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .offset-xxl-0 {\n    margin-left: 0;\n  }\n  .offset-xxl-1 {\n    margin-left: 8.333333%;\n  }\n  .offset-xxl-2 {\n    margin-left: 16.666667%;\n  }\n  .offset-xxl-3 {\n    margin-left: 25%;\n  }\n  .offset-xxl-4 {\n    margin-left: 33.333333%;\n  }\n  .offset-xxl-5 {\n    margin-left: 41.666667%;\n  }\n  .offset-xxl-6 {\n    margin-left: 50%;\n  }\n  .offset-xxl-7 {\n    margin-left: 58.333333%;\n  }\n  .offset-xxl-8 {\n    margin-left: 66.666667%;\n  }\n  .offset-xxl-9 {\n    margin-left: 75%;\n  }\n  .offset-xxl-10 {\n    margin-left: 83.333333%;\n  }\n  .offset-xxl-11 {\n    margin-left: 91.666667%;\n  }\n  .g-xxl-0,\n  .gx-xxl-0 {\n    --bs-gutter-x: 0;\n  }\n  .g-xxl-0,\n  .gy-xxl-0 {\n    --bs-gutter-y: 0;\n  }\n  .g-xxl-1,\n  .gx-xxl-1 {\n    --bs-gutter-x: 0.25rem;\n  }\n  .g-xxl-1,\n  .gy-xxl-1 {\n    --bs-gutter-y: 0.25rem;\n  }\n  .g-xxl-2,\n  .gx-xxl-2 {\n    --bs-gutter-x: 0.5rem;\n  }\n  .g-xxl-2,\n  .gy-xxl-2 {\n    --bs-gutter-y: 0.5rem;\n  }\n  .g-xxl-3,\n  .gx-xxl-3 {\n    --bs-gutter-x: 1rem;\n  }\n  .g-xxl-3,\n  .gy-xxl-3 {\n    --bs-gutter-y: 1rem;\n  }\n  .g-xxl-4,\n  .gx-xxl-4 {\n    --bs-gutter-x: 1.5rem;\n  }\n  .g-xxl-4,\n  .gy-xxl-4 {\n    --bs-gutter-y: 1.5rem;\n  }\n  .g-xxl-5,\n  .gx-xxl-5 {\n    --bs-gutter-x: 3rem;\n  }\n  .g-xxl-5,\n  .gy-xxl-5 {\n    --bs-gutter-y: 3rem;\n  }\n}\n\n.table {\n  --bs-table-bg: transparent;\n  --bs-table-accent-bg: transparent;\n  --bs-table-striped-color: #777;\n  --bs-table-striped-bg: rgba(0, 0, 0, 0.05);\n  --bs-table-active-color: #777;\n  --bs-table-active-bg: rgba(0, 0, 0, 0.1);\n  --bs-table-hover-color: #777;\n  --bs-table-hover-bg: rgba(0, 0, 0, 0.075);\n  width: 100%;\n  margin-bottom: 1rem;\n  color: #777;\n  vertical-align: top;\n  border-color: #dee2e6;\n}\n\n.table > :not(caption) > * > * {\n  padding: 0.5rem 0.5rem;\n  background-color: var(--bs-table-bg);\n  border-bottom-width: 1px;\n  box-shadow: inset 0 0 0 9999px var(--bs-table-accent-bg);\n}\n\n.table > tbody {\n  vertical-align: inherit;\n}\n\n.table > thead {\n  vertical-align: bottom;\n}\n\n.table > :not(:first-child) {\n  border-top: 2px solid currentColor;\n}\n\n.caption-top {\n  caption-side: top;\n}\n\n.table-sm > :not(caption) > * > * {\n  padding: 0.25rem 0.25rem;\n}\n\n.table-bordered > :not(caption) > * {\n  border-width: 1px 0;\n}\n\n.table-bordered > :not(caption) > * > * {\n  border-width: 0 1px;\n}\n\n.table-borderless > :not(caption) > * > * {\n  border-bottom-width: 0;\n}\n\n.table-borderless > :not(:first-child) {\n  border-top-width: 0;\n}\n\n.table-striped > tbody > tr:nth-of-type(odd) > * {\n  --bs-table-accent-bg: var(--bs-table-striped-bg);\n  color: var(--bs-table-striped-color);\n}\n\n.table-active {\n  --bs-table-accent-bg: var(--bs-table-active-bg);\n  color: var(--bs-table-active-color);\n}\n\n.table-hover > tbody > tr:hover > * {\n  --bs-table-accent-bg: var(--bs-table-hover-bg);\n  color: var(--bs-table-hover-color);\n}\n\n.table-primary {\n  --bs-table-bg: #dae2eb;\n  --bs-table-striped-bg: #cfd7df;\n  --bs-table-striped-color: #000;\n  --bs-table-active-bg: #c4cbd4;\n  --bs-table-active-color: #000;\n  --bs-table-hover-bg: #cad1d9;\n  --bs-table-hover-color: #000;\n  color: #000;\n  border-color: #c4cbd4;\n}\n\n.table-secondary {\n  --bs-table-bg: #ebebeb;\n  --bs-table-striped-bg: #dfdfdf;\n  --bs-table-striped-color: #000;\n  --bs-table-active-bg: #d4d4d4;\n  --bs-table-active-color: #000;\n  --bs-table-hover-bg: #d9d9d9;\n  --bs-table-hover-color: #000;\n  color: #000;\n  border-color: #d4d4d4;\n}\n\n.table-success {\n  --bs-table-bg: #d8f0d3;\n  --bs-table-striped-bg: #cde4c8;\n  --bs-table-striped-color: #000;\n  --bs-table-active-bg: #c2d8be;\n  --bs-table-active-color: #000;\n  --bs-table-hover-bg: #c8dec3;\n  --bs-table-hover-color: #000;\n  color: #000;\n  border-color: #c2d8be;\n}\n\n.table-info {\n  --bs-table-bg: #d6ebfd;\n  --bs-table-striped-bg: #cbdff0;\n  --bs-table-striped-color: #000;\n  --bs-table-active-bg: #c1d4e4;\n  --bs-table-active-color: #000;\n  --bs-table-hover-bg: #c6d9ea;\n  --bs-table-hover-color: #000;\n  color: #000;\n  border-color: #c1d4e4;\n}\n\n.table-warning {\n  --bs-table-bg: #f6e3cc;\n  --bs-table-striped-bg: #ead8c2;\n  --bs-table-striped-color: #000;\n  --bs-table-active-bg: #ddccb8;\n  --bs-table-active-color: #000;\n  --bs-table-hover-bg: #e4d2bd;\n  --bs-table-hover-color: #000;\n  color: #000;\n  border-color: #ddccb8;\n}\n\n.table-danger {\n  --bs-table-bg: #f5cccc;\n  --bs-table-striped-bg: #e9c2c2;\n  --bs-table-striped-color: #000;\n  --bs-table-active-bg: #ddb8b8;\n  --bs-table-active-color: #000;\n  --bs-table-hover-bg: #e3bdbd;\n  --bs-table-hover-color: #000;\n  color: #000;\n  border-color: #ddb8b8;\n}\n\n.table-light {\n  --bs-table-bg: #eee;\n  --bs-table-striped-bg: #e2e2e2;\n  --bs-table-striped-color: #000;\n  --bs-table-active-bg: #d6d6d6;\n  --bs-table-active-color: #000;\n  --bs-table-hover-bg: gainsboro;\n  --bs-table-hover-color: #000;\n  color: #000;\n  border-color: #d6d6d6;\n}\n\n.table-dark {\n  --bs-table-bg: #333;\n  --bs-table-striped-bg: #3d3d3d;\n  --bs-table-striped-color: #fff;\n  --bs-table-active-bg: #474747;\n  --bs-table-active-color: #fff;\n  --bs-table-hover-bg: #424242;\n  --bs-table-hover-color: #fff;\n  color: #fff;\n  border-color: #474747;\n}\n\n.table-responsive {\n  overflow-x: auto;\n  -webkit-overflow-scrolling: touch;\n}\n\n@media (max-width: 575.98px) {\n  .table-responsive-sm {\n    overflow-x: auto;\n    -webkit-overflow-scrolling: touch;\n  }\n}\n\n@media (max-width: 767.98px) {\n  .table-responsive-md {\n    overflow-x: auto;\n    -webkit-overflow-scrolling: touch;\n  }\n}\n\n@media (max-width: 991.98px) {\n  .table-responsive-lg {\n    overflow-x: auto;\n    -webkit-overflow-scrolling: touch;\n  }\n}\n\n@media (max-width: 1199.98px) {\n  .table-responsive-xl {\n    overflow-x: auto;\n    -webkit-overflow-scrolling: touch;\n  }\n}\n\n@media (max-width: 1399.98px) {\n  .table-responsive-xxl {\n    overflow-x: auto;\n    -webkit-overflow-scrolling: touch;\n  }\n}\n\n.form-label {\n  margin-bottom: 0.5rem;\n}\n\n.col-form-label {\n  padding-top: calc(0.375rem + 1px);\n  padding-bottom: calc(0.375rem + 1px);\n  margin-bottom: 0;\n  font-size: inherit;\n  line-height: 1.5;\n}\n\n.col-form-label-lg {\n  padding-top: calc(0.5rem + 1px);\n  padding-bottom: calc(0.5rem + 1px);\n  font-size: 1.25rem;\n}\n\n.col-form-label-sm {\n  padding-top: calc(0.25rem + 1px);\n  padding-bottom: calc(0.25rem + 1px);\n  font-size: 0.875rem;\n}\n\n.form-text {\n  margin-top: 0.25rem;\n  font-size: 0.875em;\n  color: #777;\n}\n\n.form-control {\n  display: block;\n  width: 100%;\n  padding: 0.375rem 0.75rem;\n  font-size: 1rem;\n  font-weight: 400;\n  line-height: 1.5;\n  color: #777;\n  background-color: #fff;\n  background-clip: padding-box;\n  border: 1px solid #ced4da;\n  -webkit-appearance: none;\n  -moz-appearance: none;\n  appearance: none;\n  border-radius: 0.25rem;\n  transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .form-control {\n    transition: none;\n  }\n}\n\n.form-control[type=\"file\"] {\n  overflow: hidden;\n}\n\n.form-control[type=\"file\"]:not(:disabled):not([readonly]) {\n  cursor: pointer;\n}\n\n.form-control:focus {\n  color: #777;\n  background-color: #fff;\n  border-color: #a2b7cd;\n  outline: 0;\n  box-shadow: 0 0 0 0.25rem rgba(68, 110, 155, 0.25);\n}\n\n.form-control::-webkit-date-and-time-value {\n  height: 1.5em;\n}\n\n.form-control::-webkit-input-placeholder {\n  color: #777;\n  opacity: 1;\n}\n\n.form-control::-moz-placeholder {\n  color: #777;\n  opacity: 1;\n}\n\n.form-control:-ms-input-placeholder {\n  color: #777;\n  opacity: 1;\n}\n\n.form-control::-ms-input-placeholder {\n  color: #777;\n  opacity: 1;\n}\n\n.form-control::placeholder {\n  color: #777;\n  opacity: 1;\n}\n\n.form-control:disabled, .form-control[readonly] {\n  background-color: #eee;\n  opacity: 1;\n}\n\n.form-control::file-selector-button {\n  padding: 0.375rem 0.75rem;\n  margin: -0.375rem -0.75rem;\n  -webkit-margin-end: 0.75rem;\n  -moz-margin-end: 0.75rem;\n  margin-inline-end: 0.75rem;\n  color: #777;\n  background-color: #eee;\n  pointer-events: none;\n  border-color: inherit;\n  border-style: solid;\n  border-width: 0;\n  border-inline-end-width: 1px;\n  border-radius: 0;\n  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .form-control::file-selector-button {\n    transition: none;\n  }\n}\n\n.form-control:hover:not(:disabled):not([readonly])::file-selector-button {\n  background-color: #e2e2e2;\n}\n\n.form-control::-webkit-file-upload-button {\n  padding: 0.375rem 0.75rem;\n  margin: -0.375rem -0.75rem;\n  -webkit-margin-end: 0.75rem;\n  margin-inline-end: 0.75rem;\n  color: #777;\n  background-color: #eee;\n  pointer-events: none;\n  border-color: inherit;\n  border-style: solid;\n  border-width: 0;\n  border-inline-end-width: 1px;\n  border-radius: 0;\n  -webkit-transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .form-control::-webkit-file-upload-button {\n    -webkit-transition: none;\n    transition: none;\n  }\n}\n\n.form-control:hover:not(:disabled):not([readonly])::-webkit-file-upload-button {\n  background-color: #e2e2e2;\n}\n\n.form-control-plaintext {\n  display: block;\n  width: 100%;\n  padding: 0.375rem 0;\n  margin-bottom: 0;\n  line-height: 1.5;\n  color: #777;\n  background-color: transparent;\n  border: solid transparent;\n  border-width: 1px 0;\n}\n\n.form-control-plaintext.form-control-sm, .form-control-plaintext.form-control-lg {\n  padding-right: 0;\n  padding-left: 0;\n}\n\n.form-control-sm {\n  min-height: calc(1.5em + 0.5rem + 2px);\n  padding: 0.25rem 0.5rem;\n  font-size: 0.875rem;\n  border-radius: 0.2rem;\n}\n\n.form-control-sm::file-selector-button {\n  padding: 0.25rem 0.5rem;\n  margin: -0.25rem -0.5rem;\n  -webkit-margin-end: 0.5rem;\n  -moz-margin-end: 0.5rem;\n  margin-inline-end: 0.5rem;\n}\n\n.form-control-sm::-webkit-file-upload-button {\n  padding: 0.25rem 0.5rem;\n  margin: -0.25rem -0.5rem;\n  -webkit-margin-end: 0.5rem;\n  margin-inline-end: 0.5rem;\n}\n\n.form-control-lg {\n  min-height: calc(1.5em + 1rem + 2px);\n  padding: 0.5rem 1rem;\n  font-size: 1.25rem;\n  border-radius: 0.3rem;\n}\n\n.form-control-lg::file-selector-button {\n  padding: 0.5rem 1rem;\n  margin: -0.5rem -1rem;\n  -webkit-margin-end: 1rem;\n  -moz-margin-end: 1rem;\n  margin-inline-end: 1rem;\n}\n\n.form-control-lg::-webkit-file-upload-button {\n  padding: 0.5rem 1rem;\n  margin: -0.5rem -1rem;\n  -webkit-margin-end: 1rem;\n  margin-inline-end: 1rem;\n}\n\ntextarea.form-control {\n  min-height: calc(1.5em + 0.75rem + 2px);\n}\n\ntextarea.form-control-sm {\n  min-height: calc(1.5em + 0.5rem + 2px);\n}\n\ntextarea.form-control-lg {\n  min-height: calc(1.5em + 1rem + 2px);\n}\n\n.form-control-color {\n  width: 3rem;\n  height: auto;\n  padding: 0.375rem;\n}\n\n.form-control-color:not(:disabled):not([readonly]) {\n  cursor: pointer;\n}\n\n.form-control-color::-moz-color-swatch {\n  height: 1.5em;\n  border-radius: 0.25rem;\n}\n\n.form-control-color::-webkit-color-swatch {\n  height: 1.5em;\n  border-radius: 0.25rem;\n}\n\n.form-select {\n  display: block;\n  width: 100%;\n  padding: 0.375rem 2.25rem 0.375rem 0.75rem;\n  -moz-padding-start: calc(0.75rem - 3px);\n  font-size: 1rem;\n  font-weight: 400;\n  line-height: 1.5;\n  color: #777;\n  background-color: #fff;\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23333' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e\");\n  background-repeat: no-repeat;\n  background-position: right 0.75rem center;\n  background-size: 16px 12px;\n  border: 1px solid #ced4da;\n  border-radius: 0.25rem;\n  transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n  -webkit-appearance: none;\n  -moz-appearance: none;\n  appearance: none;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .form-select {\n    transition: none;\n  }\n}\n\n.form-select:focus {\n  border-color: #a2b7cd;\n  outline: 0;\n  box-shadow: 0 0 0 0.25rem rgba(68, 110, 155, 0.25);\n}\n\n.form-select[multiple], .form-select[size]:not([size=\"1\"]) {\n  padding-right: 0.75rem;\n  background-image: none;\n}\n\n.form-select:disabled {\n  background-color: #eee;\n}\n\n.form-select:-moz-focusring {\n  color: transparent;\n  text-shadow: 0 0 0 #777;\n}\n\n.form-select-sm {\n  padding-top: 0.25rem;\n  padding-bottom: 0.25rem;\n  padding-left: 0.5rem;\n  font-size: 0.875rem;\n  border-radius: 0.2rem;\n}\n\n.form-select-lg {\n  padding-top: 0.5rem;\n  padding-bottom: 0.5rem;\n  padding-left: 1rem;\n  font-size: 1.25rem;\n  border-radius: 0.3rem;\n}\n\n.form-check {\n  display: block;\n  min-height: 1.5rem;\n  padding-left: 1.5em;\n  margin-bottom: 0.125rem;\n}\n\n.form-check .form-check-input {\n  float: left;\n  margin-left: -1.5em;\n}\n\n.form-check-input {\n  width: 1em;\n  height: 1em;\n  margin-top: 0.25em;\n  vertical-align: top;\n  background-color: #fff;\n  background-repeat: no-repeat;\n  background-position: center;\n  background-size: contain;\n  border: 1px solid rgba(0, 0, 0, 0.25);\n  -webkit-appearance: none;\n  -moz-appearance: none;\n  appearance: none;\n  -webkit-print-color-adjust: exact;\n  color-adjust: exact;\n}\n\n.form-check-input[type=\"checkbox\"] {\n  border-radius: 0.25em;\n}\n\n.form-check-input[type=\"radio\"] {\n  border-radius: 50%;\n}\n\n.form-check-input:active {\n  -webkit-filter: brightness(90%);\n  filter: brightness(90%);\n}\n\n.form-check-input:focus {\n  border-color: #a2b7cd;\n  outline: 0;\n  box-shadow: 0 0 0 0.25rem rgba(68, 110, 155, 0.25);\n}\n\n.form-check-input:checked {\n  background-color: #446e9b;\n  border-color: #446e9b;\n}\n\n.form-check-input:checked[type=\"checkbox\"] {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10l3 3l6-6'/%3e%3c/svg%3e\");\n}\n\n.form-check-input:checked[type=\"radio\"] {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='2' fill='%23fff'/%3e%3c/svg%3e\");\n}\n\n.form-check-input[type=\"checkbox\"]:indeterminate {\n  background-color: #446e9b;\n  border-color: #446e9b;\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10h8'/%3e%3c/svg%3e\");\n}\n\n.form-check-input:disabled {\n  pointer-events: none;\n  -webkit-filter: none;\n  filter: none;\n  opacity: 0.5;\n}\n\n.form-check-input[disabled] ~ .form-check-label, .form-check-input:disabled ~ .form-check-label {\n  opacity: 0.5;\n}\n\n.form-switch {\n  padding-left: 2.5em;\n}\n\n.form-switch .form-check-input {\n  width: 2em;\n  margin-left: -2.5em;\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%280, 0, 0, 0.25%29'/%3e%3c/svg%3e\");\n  background-position: left center;\n  border-radius: 2em;\n  transition: background-position 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .form-switch .form-check-input {\n    transition: none;\n  }\n}\n\n.form-switch .form-check-input:focus {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23a2b7cd'/%3e%3c/svg%3e\");\n}\n\n.form-switch .form-check-input:checked {\n  background-position: right center;\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e\");\n}\n\n.form-check-inline {\n  display: inline-block;\n  margin-right: 1rem;\n}\n\n.btn-check {\n  position: absolute;\n  clip: rect(0, 0, 0, 0);\n  pointer-events: none;\n}\n\n.btn-check[disabled] + .btn, .btn-check:disabled + .btn {\n  pointer-events: none;\n  -webkit-filter: none;\n  filter: none;\n  opacity: 0.65;\n}\n\n.form-range {\n  width: 100%;\n  height: 1.5rem;\n  padding: 0;\n  background-color: transparent;\n  -webkit-appearance: none;\n  -moz-appearance: none;\n  appearance: none;\n}\n\n.form-range:focus {\n  outline: 0;\n}\n\n.form-range:focus::-webkit-slider-thumb {\n  box-shadow: 0 0 0 1px #fff, 0 0 0 0.25rem rgba(68, 110, 155, 0.25);\n}\n\n.form-range:focus::-moz-range-thumb {\n  box-shadow: 0 0 0 1px #fff, 0 0 0 0.25rem rgba(68, 110, 155, 0.25);\n}\n\n.form-range::-moz-focus-outer {\n  border: 0;\n}\n\n.form-range::-webkit-slider-thumb {\n  width: 1rem;\n  height: 1rem;\n  margin-top: -0.25rem;\n  background-color: #446e9b;\n  border: 0;\n  border-radius: 1rem;\n  -webkit-transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n  transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n  -webkit-appearance: none;\n  appearance: none;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .form-range::-webkit-slider-thumb {\n    -webkit-transition: none;\n    transition: none;\n  }\n}\n\n.form-range::-webkit-slider-thumb:active {\n  background-color: #c7d4e1;\n}\n\n.form-range::-webkit-slider-runnable-track {\n  width: 100%;\n  height: 0.5rem;\n  color: transparent;\n  cursor: pointer;\n  background-color: #dee2e6;\n  border-color: transparent;\n  border-radius: 1rem;\n}\n\n.form-range::-moz-range-thumb {\n  width: 1rem;\n  height: 1rem;\n  background-color: #446e9b;\n  border: 0;\n  border-radius: 1rem;\n  -moz-transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n  transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n  -moz-appearance: none;\n  appearance: none;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .form-range::-moz-range-thumb {\n    -moz-transition: none;\n    transition: none;\n  }\n}\n\n.form-range::-moz-range-thumb:active {\n  background-color: #c7d4e1;\n}\n\n.form-range::-moz-range-track {\n  width: 100%;\n  height: 0.5rem;\n  color: transparent;\n  cursor: pointer;\n  background-color: #dee2e6;\n  border-color: transparent;\n  border-radius: 1rem;\n}\n\n.form-range:disabled {\n  pointer-events: none;\n}\n\n.form-range:disabled::-webkit-slider-thumb {\n  background-color: #999;\n}\n\n.form-range:disabled::-moz-range-thumb {\n  background-color: #999;\n}\n\n.form-floating {\n  position: relative;\n}\n\n.form-floating > .form-control,\n.form-floating > .form-select {\n  height: calc(3.5rem + 2px);\n  line-height: 1.25;\n}\n\n.form-floating > label {\n  position: absolute;\n  top: 0;\n  left: 0;\n  height: 100%;\n  padding: 1rem 0.75rem;\n  pointer-events: none;\n  border: 1px solid transparent;\n  -webkit-transform-origin: 0 0;\n  transform-origin: 0 0;\n  transition: opacity 0.1s ease-in-out, -webkit-transform 0.1s ease-in-out;\n  transition: opacity 0.1s ease-in-out, transform 0.1s ease-in-out;\n  transition: opacity 0.1s ease-in-out, transform 0.1s ease-in-out, -webkit-transform 0.1s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .form-floating > label {\n    transition: none;\n  }\n}\n\n.form-floating > .form-control {\n  padding: 1rem 0.75rem;\n}\n\n.form-floating > .form-control::-webkit-input-placeholder {\n  color: transparent;\n}\n\n.form-floating > .form-control::-moz-placeholder {\n  color: transparent;\n}\n\n.form-floating > .form-control:-ms-input-placeholder {\n  color: transparent;\n}\n\n.form-floating > .form-control::-ms-input-placeholder {\n  color: transparent;\n}\n\n.form-floating > .form-control::placeholder {\n  color: transparent;\n}\n\n.form-floating > .form-control:not(:-moz-placeholder-shown) {\n  padding-top: 1.625rem;\n  padding-bottom: 0.625rem;\n}\n\n.form-floating > .form-control:not(:-ms-input-placeholder) {\n  padding-top: 1.625rem;\n  padding-bottom: 0.625rem;\n}\n\n.form-floating > .form-control:focus, .form-floating > .form-control:not(:placeholder-shown) {\n  padding-top: 1.625rem;\n  padding-bottom: 0.625rem;\n}\n\n.form-floating > .form-control:-webkit-autofill {\n  padding-top: 1.625rem;\n  padding-bottom: 0.625rem;\n}\n\n.form-floating > .form-select {\n  padding-top: 1.625rem;\n  padding-bottom: 0.625rem;\n}\n\n.form-floating > .form-control:not(:-moz-placeholder-shown) ~ label {\n  opacity: 0.65;\n  transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);\n}\n\n.form-floating > .form-control:not(:-ms-input-placeholder) ~ label {\n  opacity: 0.65;\n  transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);\n}\n\n.form-floating > .form-control:focus ~ label,\n.form-floating > .form-control:not(:placeholder-shown) ~ label,\n.form-floating > .form-select ~ label {\n  opacity: 0.65;\n  -webkit-transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);\n  transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);\n}\n\n.form-floating > .form-control:-webkit-autofill ~ label {\n  opacity: 0.65;\n  -webkit-transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);\n  transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);\n}\n\n.input-group {\n  position: relative;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n  flex-wrap: wrap;\n  -ms-flex-align: stretch;\n  align-items: stretch;\n  width: 100%;\n}\n\n.input-group > .form-control,\n.input-group > .form-select {\n  position: relative;\n  -ms-flex: 1 1 auto;\n  flex: 1 1 auto;\n  width: 1%;\n  min-width: 0;\n}\n\n.input-group > .form-control:focus,\n.input-group > .form-select:focus {\n  z-index: 3;\n}\n\n.input-group .btn {\n  position: relative;\n  z-index: 2;\n}\n\n.input-group .btn:focus {\n  z-index: 3;\n}\n\n.input-group-text {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-align: center;\n  align-items: center;\n  padding: 0.375rem 0.75rem;\n  font-size: 1rem;\n  font-weight: 400;\n  line-height: 1.5;\n  color: #777;\n  text-align: center;\n  white-space: nowrap;\n  background-color: #eee;\n  border: 1px solid #ced4da;\n  border-radius: 0.25rem;\n}\n\n.input-group-lg > .form-control,\n.input-group-lg > .form-select,\n.input-group-lg > .input-group-text,\n.input-group-lg > .btn {\n  padding: 0.5rem 1rem;\n  font-size: 1.25rem;\n  border-radius: 0.3rem;\n}\n\n.input-group-sm > .form-control,\n.input-group-sm > .form-select,\n.input-group-sm > .input-group-text,\n.input-group-sm > .btn {\n  padding: 0.25rem 0.5rem;\n  font-size: 0.875rem;\n  border-radius: 0.2rem;\n}\n\n.input-group-lg > .form-select,\n.input-group-sm > .form-select {\n  padding-right: 3rem;\n}\n\n.input-group:not(.has-validation) > :not(:last-child):not(.dropdown-toggle):not(.dropdown-menu),\n.input-group:not(.has-validation) > .dropdown-toggle:nth-last-child(n + 3) {\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n}\n\n.input-group.has-validation > :nth-last-child(n + 3):not(.dropdown-toggle):not(.dropdown-menu),\n.input-group.has-validation > .dropdown-toggle:nth-last-child(n + 4) {\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n}\n\n.input-group > :not(:first-child):not(.dropdown-menu):not(.valid-tooltip):not(.valid-feedback):not(.invalid-tooltip):not(.invalid-feedback) {\n  margin-left: -1px;\n  border-top-left-radius: 0;\n  border-bottom-left-radius: 0;\n}\n\n.valid-feedback {\n  display: none;\n  width: 100%;\n  margin-top: 0.25rem;\n  font-size: 0.875em;\n  color: #3cb521;\n}\n\n.valid-tooltip {\n  position: absolute;\n  top: 100%;\n  z-index: 5;\n  display: none;\n  max-width: 100%;\n  padding: 0.25rem 0.5rem;\n  margin-top: .1rem;\n  font-size: 0.875rem;\n  color: #fff;\n  background-color: rgba(60, 181, 33, 0.9);\n  border-radius: 0.25rem;\n}\n\n.was-validated :valid ~ .valid-feedback,\n.was-validated :valid ~ .valid-tooltip,\n.is-valid ~ .valid-feedback,\n.is-valid ~ .valid-tooltip {\n  display: block;\n}\n\n.was-validated .form-control:valid, .form-control.is-valid {\n  border-color: #3cb521;\n  padding-right: calc(1.5em + 0.75rem);\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%233cb521' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e\");\n  background-repeat: no-repeat;\n  background-position: right calc(0.375em + 0.1875rem) center;\n  background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n\n.was-validated .form-control:valid:focus, .form-control.is-valid:focus {\n  border-color: #3cb521;\n  box-shadow: 0 0 0 0.25rem rgba(60, 181, 33, 0.25);\n}\n\n.was-validated textarea.form-control:valid, textarea.form-control.is-valid {\n  padding-right: calc(1.5em + 0.75rem);\n  background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem);\n}\n\n.was-validated .form-select:valid, .form-select.is-valid {\n  border-color: #3cb521;\n}\n\n.was-validated .form-select:valid:not([multiple]):not([size]), .was-validated .form-select:valid:not([multiple])[size=\"1\"], .form-select.is-valid:not([multiple]):not([size]), .form-select.is-valid:not([multiple])[size=\"1\"] {\n  padding-right: 4.125rem;\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23333' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e\"), url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%233cb521' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e\");\n  background-position: right 0.75rem center, center right 2.25rem;\n  background-size: 16px 12px, calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n\n.was-validated .form-select:valid:focus, .form-select.is-valid:focus {\n  border-color: #3cb521;\n  box-shadow: 0 0 0 0.25rem rgba(60, 181, 33, 0.25);\n}\n\n.was-validated .form-check-input:valid, .form-check-input.is-valid {\n  border-color: #3cb521;\n}\n\n.was-validated .form-check-input:valid:checked, .form-check-input.is-valid:checked {\n  background-color: #3cb521;\n}\n\n.was-validated .form-check-input:valid:focus, .form-check-input.is-valid:focus {\n  box-shadow: 0 0 0 0.25rem rgba(60, 181, 33, 0.25);\n}\n\n.was-validated .form-check-input:valid ~ .form-check-label, .form-check-input.is-valid ~ .form-check-label {\n  color: #3cb521;\n}\n\n.form-check-inline .form-check-input ~ .valid-feedback {\n  margin-left: .5em;\n}\n\n.was-validated .input-group .form-control:valid, .input-group .form-control.is-valid, .was-validated\n.input-group .form-select:valid,\n.input-group .form-select.is-valid {\n  z-index: 1;\n}\n\n.was-validated .input-group .form-control:valid:focus, .input-group .form-control.is-valid:focus, .was-validated\n.input-group .form-select:valid:focus,\n.input-group .form-select.is-valid:focus {\n  z-index: 3;\n}\n\n.invalid-feedback {\n  display: none;\n  width: 100%;\n  margin-top: 0.25rem;\n  font-size: 0.875em;\n  color: #cd0200;\n}\n\n.invalid-tooltip {\n  position: absolute;\n  top: 100%;\n  z-index: 5;\n  display: none;\n  max-width: 100%;\n  padding: 0.25rem 0.5rem;\n  margin-top: .1rem;\n  font-size: 0.875rem;\n  color: #fff;\n  background-color: rgba(205, 2, 0, 0.9);\n  border-radius: 0.25rem;\n}\n\n.was-validated :invalid ~ .invalid-feedback,\n.was-validated :invalid ~ .invalid-tooltip,\n.is-invalid ~ .invalid-feedback,\n.is-invalid ~ .invalid-tooltip {\n  display: block;\n}\n\n.was-validated .form-control:invalid, .form-control.is-invalid {\n  border-color: #cd0200;\n  padding-right: calc(1.5em + 0.75rem);\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23cd0200'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23cd0200' stroke='none'/%3e%3c/svg%3e\");\n  background-repeat: no-repeat;\n  background-position: right calc(0.375em + 0.1875rem) center;\n  background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n\n.was-validated .form-control:invalid:focus, .form-control.is-invalid:focus {\n  border-color: #cd0200;\n  box-shadow: 0 0 0 0.25rem rgba(205, 2, 0, 0.25);\n}\n\n.was-validated textarea.form-control:invalid, textarea.form-control.is-invalid {\n  padding-right: calc(1.5em + 0.75rem);\n  background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem);\n}\n\n.was-validated .form-select:invalid, .form-select.is-invalid {\n  border-color: #cd0200;\n}\n\n.was-validated .form-select:invalid:not([multiple]):not([size]), .was-validated .form-select:invalid:not([multiple])[size=\"1\"], .form-select.is-invalid:not([multiple]):not([size]), .form-select.is-invalid:not([multiple])[size=\"1\"] {\n  padding-right: 4.125rem;\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23333' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e\"), url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23cd0200'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23cd0200' stroke='none'/%3e%3c/svg%3e\");\n  background-position: right 0.75rem center, center right 2.25rem;\n  background-size: 16px 12px, calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n\n.was-validated .form-select:invalid:focus, .form-select.is-invalid:focus {\n  border-color: #cd0200;\n  box-shadow: 0 0 0 0.25rem rgba(205, 2, 0, 0.25);\n}\n\n.was-validated .form-check-input:invalid, .form-check-input.is-invalid {\n  border-color: #cd0200;\n}\n\n.was-validated .form-check-input:invalid:checked, .form-check-input.is-invalid:checked {\n  background-color: #cd0200;\n}\n\n.was-validated .form-check-input:invalid:focus, .form-check-input.is-invalid:focus {\n  box-shadow: 0 0 0 0.25rem rgba(205, 2, 0, 0.25);\n}\n\n.was-validated .form-check-input:invalid ~ .form-check-label, .form-check-input.is-invalid ~ .form-check-label {\n  color: #cd0200;\n}\n\n.form-check-inline .form-check-input ~ .invalid-feedback {\n  margin-left: .5em;\n}\n\n.was-validated .input-group .form-control:invalid, .input-group .form-control.is-invalid, .was-validated\n.input-group .form-select:invalid,\n.input-group .form-select.is-invalid {\n  z-index: 2;\n}\n\n.was-validated .input-group .form-control:invalid:focus, .input-group .form-control.is-invalid:focus, .was-validated\n.input-group .form-select:invalid:focus,\n.input-group .form-select.is-invalid:focus {\n  z-index: 3;\n}\n\n.btn {\n  display: inline-block;\n  font-weight: 400;\n  line-height: 1.5;\n  color: #777;\n  text-align: center;\n  text-decoration: none;\n  vertical-align: middle;\n  cursor: pointer;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  user-select: none;\n  background-color: transparent;\n  border: 1px solid transparent;\n  padding: 0.375rem 0.75rem;\n  font-size: 1rem;\n  border-radius: 0.25rem;\n  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .btn {\n    transition: none;\n  }\n}\n\n.btn:hover {\n  color: #777;\n}\n\n.btn-check:focus + .btn, .btn:focus {\n  outline: 0;\n  box-shadow: 0 0 0 0.25rem rgba(68, 110, 155, 0.25);\n}\n\n.btn:disabled, .btn.disabled,\nfieldset:disabled .btn {\n  pointer-events: none;\n  opacity: 0.65;\n}\n\n.btn-primary {\n  color: #fff;\n  background-color: #446e9b;\n  border-color: #446e9b;\n}\n\n.btn-primary:hover {\n  color: #fff;\n  background-color: #3a5e84;\n  border-color: #36587c;\n}\n\n.btn-check:focus + .btn-primary, .btn-primary:focus {\n  color: #fff;\n  background-color: #3a5e84;\n  border-color: #36587c;\n  box-shadow: 0 0 0 0.25rem rgba(96, 132, 170, 0.5);\n}\n\n.btn-check:checked + .btn-primary,\n.btn-check:active + .btn-primary, .btn-primary:active, .btn-primary.active,\n.show > .btn-primary.dropdown-toggle {\n  color: #fff;\n  background-color: #36587c;\n  border-color: #335374;\n}\n\n.btn-check:checked + .btn-primary:focus,\n.btn-check:active + .btn-primary:focus, .btn-primary:active:focus, .btn-primary.active:focus,\n.show > .btn-primary.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.25rem rgba(96, 132, 170, 0.5);\n}\n\n.btn-primary:disabled, .btn-primary.disabled {\n  color: #fff;\n  background-color: #446e9b;\n  border-color: #446e9b;\n}\n\n.btn-secondary {\n  color: #fff;\n  background-color: #999;\n  border-color: #999;\n}\n\n.btn-secondary:hover {\n  color: #fff;\n  background-color: #828282;\n  border-color: #7a7a7a;\n}\n\n.btn-check:focus + .btn-secondary, .btn-secondary:focus {\n  color: #fff;\n  background-color: #828282;\n  border-color: #7a7a7a;\n  box-shadow: 0 0 0 0.25rem rgba(168, 168, 168, 0.5);\n}\n\n.btn-check:checked + .btn-secondary,\n.btn-check:active + .btn-secondary, .btn-secondary:active, .btn-secondary.active,\n.show > .btn-secondary.dropdown-toggle {\n  color: #fff;\n  background-color: #7a7a7a;\n  border-color: #737373;\n}\n\n.btn-check:checked + .btn-secondary:focus,\n.btn-check:active + .btn-secondary:focus, .btn-secondary:active:focus, .btn-secondary.active:focus,\n.show > .btn-secondary.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.25rem rgba(168, 168, 168, 0.5);\n}\n\n.btn-secondary:disabled, .btn-secondary.disabled {\n  color: #fff;\n  background-color: #999;\n  border-color: #999;\n}\n\n.btn-success {\n  color: #fff;\n  background-color: #3cb521;\n  border-color: #3cb521;\n}\n\n.btn-success:hover {\n  color: #fff;\n  background-color: #339a1c;\n  border-color: #30911a;\n}\n\n.btn-check:focus + .btn-success, .btn-success:focus {\n  color: #fff;\n  background-color: #339a1c;\n  border-color: #30911a;\n  box-shadow: 0 0 0 0.25rem rgba(89, 192, 66, 0.5);\n}\n\n.btn-check:checked + .btn-success,\n.btn-check:active + .btn-success, .btn-success:active, .btn-success.active,\n.show > .btn-success.dropdown-toggle {\n  color: #fff;\n  background-color: #30911a;\n  border-color: #2d8819;\n}\n\n.btn-check:checked + .btn-success:focus,\n.btn-check:active + .btn-success:focus, .btn-success:active:focus, .btn-success.active:focus,\n.show > .btn-success.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.25rem rgba(89, 192, 66, 0.5);\n}\n\n.btn-success:disabled, .btn-success.disabled {\n  color: #fff;\n  background-color: #3cb521;\n  border-color: #3cb521;\n}\n\n.btn-info {\n  color: #fff;\n  background-color: #3399f3;\n  border-color: #3399f3;\n}\n\n.btn-info:hover {\n  color: #fff;\n  background-color: #2b82cf;\n  border-color: #297ac2;\n}\n\n.btn-check:focus + .btn-info, .btn-info:focus {\n  color: #fff;\n  background-color: #2b82cf;\n  border-color: #297ac2;\n  box-shadow: 0 0 0 0.25rem rgba(82, 168, 245, 0.5);\n}\n\n.btn-check:checked + .btn-info,\n.btn-check:active + .btn-info, .btn-info:active, .btn-info.active,\n.show > .btn-info.dropdown-toggle {\n  color: #fff;\n  background-color: #297ac2;\n  border-color: #2673b6;\n}\n\n.btn-check:checked + .btn-info:focus,\n.btn-check:active + .btn-info:focus, .btn-info:active:focus, .btn-info.active:focus,\n.show > .btn-info.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.25rem rgba(82, 168, 245, 0.5);\n}\n\n.btn-info:disabled, .btn-info.disabled {\n  color: #fff;\n  background-color: #3399f3;\n  border-color: #3399f3;\n}\n\n.btn-warning {\n  color: #fff;\n  background-color: #d47500;\n  border-color: #d47500;\n}\n\n.btn-warning:hover {\n  color: #fff;\n  background-color: #b46300;\n  border-color: #aa5e00;\n}\n\n.btn-check:focus + .btn-warning, .btn-warning:focus {\n  color: #fff;\n  background-color: #b46300;\n  border-color: #aa5e00;\n  box-shadow: 0 0 0 0.25rem rgba(218, 138, 38, 0.5);\n}\n\n.btn-check:checked + .btn-warning,\n.btn-check:active + .btn-warning, .btn-warning:active, .btn-warning.active,\n.show > .btn-warning.dropdown-toggle {\n  color: #fff;\n  background-color: #aa5e00;\n  border-color: #9f5800;\n}\n\n.btn-check:checked + .btn-warning:focus,\n.btn-check:active + .btn-warning:focus, .btn-warning:active:focus, .btn-warning.active:focus,\n.show > .btn-warning.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.25rem rgba(218, 138, 38, 0.5);\n}\n\n.btn-warning:disabled, .btn-warning.disabled {\n  color: #fff;\n  background-color: #d47500;\n  border-color: #d47500;\n}\n\n.btn-danger {\n  color: #fff;\n  background-color: #cd0200;\n  border-color: #cd0200;\n}\n\n.btn-danger:hover {\n  color: #fff;\n  background-color: #ae0200;\n  border-color: #a40200;\n}\n\n.btn-check:focus + .btn-danger, .btn-danger:focus {\n  color: #fff;\n  background-color: #ae0200;\n  border-color: #a40200;\n  box-shadow: 0 0 0 0.25rem rgba(213, 40, 38, 0.5);\n}\n\n.btn-check:checked + .btn-danger,\n.btn-check:active + .btn-danger, .btn-danger:active, .btn-danger.active,\n.show > .btn-danger.dropdown-toggle {\n  color: #fff;\n  background-color: #a40200;\n  border-color: #9a0200;\n}\n\n.btn-check:checked + .btn-danger:focus,\n.btn-check:active + .btn-danger:focus, .btn-danger:active:focus, .btn-danger.active:focus,\n.show > .btn-danger.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.25rem rgba(213, 40, 38, 0.5);\n}\n\n.btn-danger:disabled, .btn-danger.disabled {\n  color: #fff;\n  background-color: #cd0200;\n  border-color: #cd0200;\n}\n\n.btn-light {\n  color: #000;\n  background-color: #eee;\n  border-color: #eee;\n}\n\n.btn-light:hover {\n  color: #000;\n  background-color: #f1f1f1;\n  border-color: #f0f0f0;\n}\n\n.btn-check:focus + .btn-light, .btn-light:focus {\n  color: #000;\n  background-color: #f1f1f1;\n  border-color: #f0f0f0;\n  box-shadow: 0 0 0 0.25rem rgba(202, 202, 202, 0.5);\n}\n\n.btn-check:checked + .btn-light,\n.btn-check:active + .btn-light, .btn-light:active, .btn-light.active,\n.show > .btn-light.dropdown-toggle {\n  color: #000;\n  background-color: #f1f1f1;\n  border-color: #f0f0f0;\n}\n\n.btn-check:checked + .btn-light:focus,\n.btn-check:active + .btn-light:focus, .btn-light:active:focus, .btn-light.active:focus,\n.show > .btn-light.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.25rem rgba(202, 202, 202, 0.5);\n}\n\n.btn-light:disabled, .btn-light.disabled {\n  color: #000;\n  background-color: #eee;\n  border-color: #eee;\n}\n\n.btn-dark {\n  color: #fff;\n  background-color: #333;\n  border-color: #333;\n}\n\n.btn-dark:hover {\n  color: #fff;\n  background-color: #2b2b2b;\n  border-color: #292929;\n}\n\n.btn-check:focus + .btn-dark, .btn-dark:focus {\n  color: #fff;\n  background-color: #2b2b2b;\n  border-color: #292929;\n  box-shadow: 0 0 0 0.25rem rgba(82, 82, 82, 0.5);\n}\n\n.btn-check:checked + .btn-dark,\n.btn-check:active + .btn-dark, .btn-dark:active, .btn-dark.active,\n.show > .btn-dark.dropdown-toggle {\n  color: #fff;\n  background-color: #292929;\n  border-color: #262626;\n}\n\n.btn-check:checked + .btn-dark:focus,\n.btn-check:active + .btn-dark:focus, .btn-dark:active:focus, .btn-dark.active:focus,\n.show > .btn-dark.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.25rem rgba(82, 82, 82, 0.5);\n}\n\n.btn-dark:disabled, .btn-dark.disabled {\n  color: #fff;\n  background-color: #333;\n  border-color: #333;\n}\n\n.btn-outline-primary {\n  color: #446e9b;\n  border-color: #446e9b;\n}\n\n.btn-outline-primary:hover {\n  color: #fff;\n  background-color: #446e9b;\n  border-color: #446e9b;\n}\n\n.btn-check:focus + .btn-outline-primary, .btn-outline-primary:focus {\n  box-shadow: 0 0 0 0.25rem rgba(68, 110, 155, 0.5);\n}\n\n.btn-check:checked + .btn-outline-primary,\n.btn-check:active + .btn-outline-primary, .btn-outline-primary:active, .btn-outline-primary.active, .btn-outline-primary.dropdown-toggle.show {\n  color: #fff;\n  background-color: #446e9b;\n  border-color: #446e9b;\n}\n\n.btn-check:checked + .btn-outline-primary:focus,\n.btn-check:active + .btn-outline-primary:focus, .btn-outline-primary:active:focus, .btn-outline-primary.active:focus, .btn-outline-primary.dropdown-toggle.show:focus {\n  box-shadow: 0 0 0 0.25rem rgba(68, 110, 155, 0.5);\n}\n\n.btn-outline-primary:disabled, .btn-outline-primary.disabled {\n  color: #446e9b;\n  background-color: transparent;\n}\n\n.btn-outline-secondary {\n  color: #999;\n  border-color: #999;\n}\n\n.btn-outline-secondary:hover {\n  color: #fff;\n  background-color: #999;\n  border-color: #999;\n}\n\n.btn-check:focus + .btn-outline-secondary, .btn-outline-secondary:focus {\n  box-shadow: 0 0 0 0.25rem rgba(153, 153, 153, 0.5);\n}\n\n.btn-check:checked + .btn-outline-secondary,\n.btn-check:active + .btn-outline-secondary, .btn-outline-secondary:active, .btn-outline-secondary.active, .btn-outline-secondary.dropdown-toggle.show {\n  color: #fff;\n  background-color: #999;\n  border-color: #999;\n}\n\n.btn-check:checked + .btn-outline-secondary:focus,\n.btn-check:active + .btn-outline-secondary:focus, .btn-outline-secondary:active:focus, .btn-outline-secondary.active:focus, .btn-outline-secondary.dropdown-toggle.show:focus {\n  box-shadow: 0 0 0 0.25rem rgba(153, 153, 153, 0.5);\n}\n\n.btn-outline-secondary:disabled, .btn-outline-secondary.disabled {\n  color: #999;\n  background-color: transparent;\n}\n\n.btn-outline-success {\n  color: #3cb521;\n  border-color: #3cb521;\n}\n\n.btn-outline-success:hover {\n  color: #fff;\n  background-color: #3cb521;\n  border-color: #3cb521;\n}\n\n.btn-check:focus + .btn-outline-success, .btn-outline-success:focus {\n  box-shadow: 0 0 0 0.25rem rgba(60, 181, 33, 0.5);\n}\n\n.btn-check:checked + .btn-outline-success,\n.btn-check:active + .btn-outline-success, .btn-outline-success:active, .btn-outline-success.active, .btn-outline-success.dropdown-toggle.show {\n  color: #fff;\n  background-color: #3cb521;\n  border-color: #3cb521;\n}\n\n.btn-check:checked + .btn-outline-success:focus,\n.btn-check:active + .btn-outline-success:focus, .btn-outline-success:active:focus, .btn-outline-success.active:focus, .btn-outline-success.dropdown-toggle.show:focus {\n  box-shadow: 0 0 0 0.25rem rgba(60, 181, 33, 0.5);\n}\n\n.btn-outline-success:disabled, .btn-outline-success.disabled {\n  color: #3cb521;\n  background-color: transparent;\n}\n\n.btn-outline-info {\n  color: #3399f3;\n  border-color: #3399f3;\n}\n\n.btn-outline-info:hover {\n  color: #fff;\n  background-color: #3399f3;\n  border-color: #3399f3;\n}\n\n.btn-check:focus + .btn-outline-info, .btn-outline-info:focus {\n  box-shadow: 0 0 0 0.25rem rgba(51, 153, 243, 0.5);\n}\n\n.btn-check:checked + .btn-outline-info,\n.btn-check:active + .btn-outline-info, .btn-outline-info:active, .btn-outline-info.active, .btn-outline-info.dropdown-toggle.show {\n  color: #fff;\n  background-color: #3399f3;\n  border-color: #3399f3;\n}\n\n.btn-check:checked + .btn-outline-info:focus,\n.btn-check:active + .btn-outline-info:focus, .btn-outline-info:active:focus, .btn-outline-info.active:focus, .btn-outline-info.dropdown-toggle.show:focus {\n  box-shadow: 0 0 0 0.25rem rgba(51, 153, 243, 0.5);\n}\n\n.btn-outline-info:disabled, .btn-outline-info.disabled {\n  color: #3399f3;\n  background-color: transparent;\n}\n\n.btn-outline-warning {\n  color: #d47500;\n  border-color: #d47500;\n}\n\n.btn-outline-warning:hover {\n  color: #fff;\n  background-color: #d47500;\n  border-color: #d47500;\n}\n\n.btn-check:focus + .btn-outline-warning, .btn-outline-warning:focus {\n  box-shadow: 0 0 0 0.25rem rgba(212, 117, 0, 0.5);\n}\n\n.btn-check:checked + .btn-outline-warning,\n.btn-check:active + .btn-outline-warning, .btn-outline-warning:active, .btn-outline-warning.active, .btn-outline-warning.dropdown-toggle.show {\n  color: #fff;\n  background-color: #d47500;\n  border-color: #d47500;\n}\n\n.btn-check:checked + .btn-outline-warning:focus,\n.btn-check:active + .btn-outline-warning:focus, .btn-outline-warning:active:focus, .btn-outline-warning.active:focus, .btn-outline-warning.dropdown-toggle.show:focus {\n  box-shadow: 0 0 0 0.25rem rgba(212, 117, 0, 0.5);\n}\n\n.btn-outline-warning:disabled, .btn-outline-warning.disabled {\n  color: #d47500;\n  background-color: transparent;\n}\n\n.btn-outline-danger {\n  color: #cd0200;\n  border-color: #cd0200;\n}\n\n.btn-outline-danger:hover {\n  color: #fff;\n  background-color: #cd0200;\n  border-color: #cd0200;\n}\n\n.btn-check:focus + .btn-outline-danger, .btn-outline-danger:focus {\n  box-shadow: 0 0 0 0.25rem rgba(205, 2, 0, 0.5);\n}\n\n.btn-check:checked + .btn-outline-danger,\n.btn-check:active + .btn-outline-danger, .btn-outline-danger:active, .btn-outline-danger.active, .btn-outline-danger.dropdown-toggle.show {\n  color: #fff;\n  background-color: #cd0200;\n  border-color: #cd0200;\n}\n\n.btn-check:checked + .btn-outline-danger:focus,\n.btn-check:active + .btn-outline-danger:focus, .btn-outline-danger:active:focus, .btn-outline-danger.active:focus, .btn-outline-danger.dropdown-toggle.show:focus {\n  box-shadow: 0 0 0 0.25rem rgba(205, 2, 0, 0.5);\n}\n\n.btn-outline-danger:disabled, .btn-outline-danger.disabled {\n  color: #cd0200;\n  background-color: transparent;\n}\n\n.btn-outline-light {\n  color: #eee;\n  border-color: #eee;\n}\n\n.btn-outline-light:hover {\n  color: #000;\n  background-color: #eee;\n  border-color: #eee;\n}\n\n.btn-check:focus + .btn-outline-light, .btn-outline-light:focus {\n  box-shadow: 0 0 0 0.25rem rgba(238, 238, 238, 0.5);\n}\n\n.btn-check:checked + .btn-outline-light,\n.btn-check:active + .btn-outline-light, .btn-outline-light:active, .btn-outline-light.active, .btn-outline-light.dropdown-toggle.show {\n  color: #000;\n  background-color: #eee;\n  border-color: #eee;\n}\n\n.btn-check:checked + .btn-outline-light:focus,\n.btn-check:active + .btn-outline-light:focus, .btn-outline-light:active:focus, .btn-outline-light.active:focus, .btn-outline-light.dropdown-toggle.show:focus {\n  box-shadow: 0 0 0 0.25rem rgba(238, 238, 238, 0.5);\n}\n\n.btn-outline-light:disabled, .btn-outline-light.disabled {\n  color: #eee;\n  background-color: transparent;\n}\n\n.btn-outline-dark {\n  color: #333;\n  border-color: #333;\n}\n\n.btn-outline-dark:hover {\n  color: #fff;\n  background-color: #333;\n  border-color: #333;\n}\n\n.btn-check:focus + .btn-outline-dark, .btn-outline-dark:focus {\n  box-shadow: 0 0 0 0.25rem rgba(51, 51, 51, 0.5);\n}\n\n.btn-check:checked + .btn-outline-dark,\n.btn-check:active + .btn-outline-dark, .btn-outline-dark:active, .btn-outline-dark.active, .btn-outline-dark.dropdown-toggle.show {\n  color: #fff;\n  background-color: #333;\n  border-color: #333;\n}\n\n.btn-check:checked + .btn-outline-dark:focus,\n.btn-check:active + .btn-outline-dark:focus, .btn-outline-dark:active:focus, .btn-outline-dark.active:focus, .btn-outline-dark.dropdown-toggle.show:focus {\n  box-shadow: 0 0 0 0.25rem rgba(51, 51, 51, 0.5);\n}\n\n.btn-outline-dark:disabled, .btn-outline-dark.disabled {\n  color: #333;\n  background-color: transparent;\n}\n\n.btn-link {\n  font-weight: 400;\n  color: #3399f3;\n  text-decoration: underline;\n}\n\n.btn-link:hover {\n  color: #297ac2;\n}\n\n.btn-link:disabled, .btn-link.disabled {\n  color: #777;\n}\n\n.btn-lg, .btn-group-lg > .btn {\n  padding: 0.5rem 1rem;\n  font-size: 1.25rem;\n  border-radius: 0.3rem;\n}\n\n.btn-sm, .btn-group-sm > .btn {\n  padding: 0.25rem 0.5rem;\n  font-size: 0.875rem;\n  border-radius: 0.2rem;\n}\n\n.fade {\n  transition: opacity 0.15s linear;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .fade {\n    transition: none;\n  }\n}\n\n.fade:not(.show) {\n  opacity: 0;\n}\n\n.collapse:not(.show) {\n  display: none;\n}\n\n.collapsing {\n  height: 0;\n  overflow: hidden;\n  transition: height 0.35s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .collapsing {\n    transition: none;\n  }\n}\n\n.collapsing.collapse-horizontal {\n  width: 0;\n  height: auto;\n  transition: width 0.35s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .collapsing.collapse-horizontal {\n    transition: none;\n  }\n}\n\n.dropup,\n.dropend,\n.dropdown,\n.dropstart {\n  position: relative;\n}\n\n.dropdown-toggle {\n  white-space: nowrap;\n}\n\n.dropdown-toggle::after {\n  display: inline-block;\n  margin-left: 0.255em;\n  vertical-align: 0.255em;\n  content: \"\";\n  border-top: 0.3em solid;\n  border-right: 0.3em solid transparent;\n  border-bottom: 0;\n  border-left: 0.3em solid transparent;\n}\n\n.dropdown-toggle:empty::after {\n  margin-left: 0;\n}\n\n.dropdown-menu {\n  position: absolute;\n  z-index: 1000;\n  display: none;\n  min-width: 10rem;\n  padding: 0.5rem 0;\n  margin: 0;\n  font-size: 1rem;\n  color: #777;\n  text-align: left;\n  list-style: none;\n  background-color: #fff;\n  background-clip: padding-box;\n  border: 1px solid rgba(0, 0, 0, 0.15);\n  border-radius: 0.25rem;\n}\n\n.dropdown-menu[data-bs-popper] {\n  top: 100%;\n  left: 0;\n  margin-top: 0.125rem;\n}\n\n.dropdown-menu-start {\n  --bs-position: start;\n}\n\n.dropdown-menu-start[data-bs-popper] {\n  right: auto;\n  left: 0;\n}\n\n.dropdown-menu-end {\n  --bs-position: end;\n}\n\n.dropdown-menu-end[data-bs-popper] {\n  right: 0;\n  left: auto;\n}\n\n@media (min-width: 576px) {\n  .dropdown-menu-sm-start {\n    --bs-position: start;\n  }\n  .dropdown-menu-sm-start[data-bs-popper] {\n    right: auto;\n    left: 0;\n  }\n  .dropdown-menu-sm-end {\n    --bs-position: end;\n  }\n  .dropdown-menu-sm-end[data-bs-popper] {\n    right: 0;\n    left: auto;\n  }\n}\n\n@media (min-width: 768px) {\n  .dropdown-menu-md-start {\n    --bs-position: start;\n  }\n  .dropdown-menu-md-start[data-bs-popper] {\n    right: auto;\n    left: 0;\n  }\n  .dropdown-menu-md-end {\n    --bs-position: end;\n  }\n  .dropdown-menu-md-end[data-bs-popper] {\n    right: 0;\n    left: auto;\n  }\n}\n\n@media (min-width: 992px) {\n  .dropdown-menu-lg-start {\n    --bs-position: start;\n  }\n  .dropdown-menu-lg-start[data-bs-popper] {\n    right: auto;\n    left: 0;\n  }\n  .dropdown-menu-lg-end {\n    --bs-position: end;\n  }\n  .dropdown-menu-lg-end[data-bs-popper] {\n    right: 0;\n    left: auto;\n  }\n}\n\n@media (min-width: 1200px) {\n  .dropdown-menu-xl-start {\n    --bs-position: start;\n  }\n  .dropdown-menu-xl-start[data-bs-popper] {\n    right: auto;\n    left: 0;\n  }\n  .dropdown-menu-xl-end {\n    --bs-position: end;\n  }\n  .dropdown-menu-xl-end[data-bs-popper] {\n    right: 0;\n    left: auto;\n  }\n}\n\n@media (min-width: 1400px) {\n  .dropdown-menu-xxl-start {\n    --bs-position: start;\n  }\n  .dropdown-menu-xxl-start[data-bs-popper] {\n    right: auto;\n    left: 0;\n  }\n  .dropdown-menu-xxl-end {\n    --bs-position: end;\n  }\n  .dropdown-menu-xxl-end[data-bs-popper] {\n    right: 0;\n    left: auto;\n  }\n}\n\n.dropup .dropdown-menu[data-bs-popper] {\n  top: auto;\n  bottom: 100%;\n  margin-top: 0;\n  margin-bottom: 0.125rem;\n}\n\n.dropup .dropdown-toggle::after {\n  display: inline-block;\n  margin-left: 0.255em;\n  vertical-align: 0.255em;\n  content: \"\";\n  border-top: 0;\n  border-right: 0.3em solid transparent;\n  border-bottom: 0.3em solid;\n  border-left: 0.3em solid transparent;\n}\n\n.dropup .dropdown-toggle:empty::after {\n  margin-left: 0;\n}\n\n.dropend .dropdown-menu[data-bs-popper] {\n  top: 0;\n  right: auto;\n  left: 100%;\n  margin-top: 0;\n  margin-left: 0.125rem;\n}\n\n.dropend .dropdown-toggle::after {\n  display: inline-block;\n  margin-left: 0.255em;\n  vertical-align: 0.255em;\n  content: \"\";\n  border-top: 0.3em solid transparent;\n  border-right: 0;\n  border-bottom: 0.3em solid transparent;\n  border-left: 0.3em solid;\n}\n\n.dropend .dropdown-toggle:empty::after {\n  margin-left: 0;\n}\n\n.dropend .dropdown-toggle::after {\n  vertical-align: 0;\n}\n\n.dropstart .dropdown-menu[data-bs-popper] {\n  top: 0;\n  right: 100%;\n  left: auto;\n  margin-top: 0;\n  margin-right: 0.125rem;\n}\n\n.dropstart .dropdown-toggle::after {\n  display: inline-block;\n  margin-left: 0.255em;\n  vertical-align: 0.255em;\n  content: \"\";\n}\n\n.dropstart .dropdown-toggle::after {\n  display: none;\n}\n\n.dropstart .dropdown-toggle::before {\n  display: inline-block;\n  margin-right: 0.255em;\n  vertical-align: 0.255em;\n  content: \"\";\n  border-top: 0.3em solid transparent;\n  border-right: 0.3em solid;\n  border-bottom: 0.3em solid transparent;\n}\n\n.dropstart .dropdown-toggle:empty::after {\n  margin-left: 0;\n}\n\n.dropstart .dropdown-toggle::before {\n  vertical-align: 0;\n}\n\n.dropdown-divider {\n  height: 0;\n  margin: 0.5rem 0;\n  overflow: hidden;\n  border-top: 1px solid rgba(0, 0, 0, 0.15);\n}\n\n.dropdown-item {\n  display: block;\n  width: 100%;\n  padding: 0.25rem 1rem;\n  clear: both;\n  font-weight: 400;\n  color: #2d2d2d;\n  text-align: inherit;\n  text-decoration: none;\n  white-space: nowrap;\n  background-color: transparent;\n  border: 0;\n}\n\n.dropdown-item:hover, .dropdown-item:focus {\n  color: #292929;\n  background-color: #eee;\n}\n\n.dropdown-item.active, .dropdown-item:active {\n  color: #fff;\n  text-decoration: none;\n  background-color: #446e9b;\n}\n\n.dropdown-item.disabled, .dropdown-item:disabled {\n  color: #999;\n  pointer-events: none;\n  background-color: transparent;\n}\n\n.dropdown-menu.show {\n  display: block;\n}\n\n.dropdown-header {\n  display: block;\n  padding: 0.5rem 1rem;\n  margin-bottom: 0;\n  font-size: 0.875rem;\n  color: #777;\n  white-space: nowrap;\n}\n\n.dropdown-item-text {\n  display: block;\n  padding: 0.25rem 1rem;\n  color: #2d2d2d;\n}\n\n.dropdown-menu-dark {\n  color: #dee2e6;\n  background-color: #333;\n  border-color: rgba(0, 0, 0, 0.15);\n}\n\n.dropdown-menu-dark .dropdown-item {\n  color: #dee2e6;\n}\n\n.dropdown-menu-dark .dropdown-item:hover, .dropdown-menu-dark .dropdown-item:focus {\n  color: #fff;\n  background-color: rgba(255, 255, 255, 0.15);\n}\n\n.dropdown-menu-dark .dropdown-item.active, .dropdown-menu-dark .dropdown-item:active {\n  color: #fff;\n  background-color: #446e9b;\n}\n\n.dropdown-menu-dark .dropdown-item.disabled, .dropdown-menu-dark .dropdown-item:disabled {\n  color: #999;\n}\n\n.dropdown-menu-dark .dropdown-divider {\n  border-color: rgba(0, 0, 0, 0.15);\n}\n\n.dropdown-menu-dark .dropdown-item-text {\n  color: #dee2e6;\n}\n\n.dropdown-menu-dark .dropdown-header {\n  color: #999;\n}\n\n.btn-group,\n.btn-group-vertical {\n  position: relative;\n  display: -ms-inline-flexbox;\n  display: inline-flex;\n  vertical-align: middle;\n}\n\n.btn-group > .btn,\n.btn-group-vertical > .btn {\n  position: relative;\n  -ms-flex: 1 1 auto;\n  flex: 1 1 auto;\n}\n\n.btn-group > .btn-check:checked + .btn,\n.btn-group > .btn-check:focus + .btn,\n.btn-group > .btn:hover,\n.btn-group > .btn:focus,\n.btn-group > .btn:active,\n.btn-group > .btn.active,\n.btn-group-vertical > .btn-check:checked + .btn,\n.btn-group-vertical > .btn-check:focus + .btn,\n.btn-group-vertical > .btn:hover,\n.btn-group-vertical > .btn:focus,\n.btn-group-vertical > .btn:active,\n.btn-group-vertical > .btn.active {\n  z-index: 1;\n}\n\n.btn-toolbar {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n  flex-wrap: wrap;\n  -ms-flex-pack: start;\n  justify-content: flex-start;\n}\n\n.btn-toolbar .input-group {\n  width: auto;\n}\n\n.btn-group > .btn:not(:first-child),\n.btn-group > .btn-group:not(:first-child) {\n  margin-left: -1px;\n}\n\n.btn-group > .btn:not(:last-child):not(.dropdown-toggle),\n.btn-group > .btn-group:not(:last-child) > .btn {\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n}\n\n.btn-group > .btn:nth-child(n + 3),\n.btn-group > :not(.btn-check) + .btn,\n.btn-group > .btn-group:not(:first-child) > .btn {\n  border-top-left-radius: 0;\n  border-bottom-left-radius: 0;\n}\n\n.dropdown-toggle-split {\n  padding-right: 0.5625rem;\n  padding-left: 0.5625rem;\n}\n\n.dropdown-toggle-split::after,\n.dropup .dropdown-toggle-split::after,\n.dropend .dropdown-toggle-split::after {\n  margin-left: 0;\n}\n\n.dropstart .dropdown-toggle-split::before {\n  margin-right: 0;\n}\n\n.btn-sm + .dropdown-toggle-split, .btn-group-sm > .btn + .dropdown-toggle-split {\n  padding-right: 0.375rem;\n  padding-left: 0.375rem;\n}\n\n.btn-lg + .dropdown-toggle-split, .btn-group-lg > .btn + .dropdown-toggle-split {\n  padding-right: 0.75rem;\n  padding-left: 0.75rem;\n}\n\n.btn-group-vertical {\n  -ms-flex-direction: column;\n  flex-direction: column;\n  -ms-flex-align: start;\n  align-items: flex-start;\n  -ms-flex-pack: center;\n  justify-content: center;\n}\n\n.btn-group-vertical > .btn,\n.btn-group-vertical > .btn-group {\n  width: 100%;\n}\n\n.btn-group-vertical > .btn:not(:first-child),\n.btn-group-vertical > .btn-group:not(:first-child) {\n  margin-top: -1px;\n}\n\n.btn-group-vertical > .btn:not(:last-child):not(.dropdown-toggle),\n.btn-group-vertical > .btn-group:not(:last-child) > .btn {\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 0;\n}\n\n.btn-group-vertical > .btn ~ .btn,\n.btn-group-vertical > .btn-group:not(:first-child) > .btn {\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n}\n\n.nav {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n  flex-wrap: wrap;\n  padding-left: 0;\n  margin-bottom: 0;\n  list-style: none;\n}\n\n.nav-link {\n  display: block;\n  padding: 0.5rem 1rem;\n  color: #3399f3;\n  text-decoration: none;\n  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .nav-link {\n    transition: none;\n  }\n}\n\n.nav-link:hover, .nav-link:focus {\n  color: #297ac2;\n}\n\n.nav-link.disabled {\n  color: #777;\n  pointer-events: none;\n  cursor: default;\n}\n\n.nav-tabs {\n  border-bottom: 1px solid #dee2e6;\n}\n\n.nav-tabs .nav-link {\n  margin-bottom: -1px;\n  background: none;\n  border: 1px solid transparent;\n  border-top-left-radius: 0.25rem;\n  border-top-right-radius: 0.25rem;\n}\n\n.nav-tabs .nav-link:hover, .nav-tabs .nav-link:focus {\n  border-color: #eee #eee #dee2e6;\n  isolation: isolate;\n}\n\n.nav-tabs .nav-link.disabled {\n  color: #777;\n  background-color: transparent;\n  border-color: transparent;\n}\n\n.nav-tabs .nav-link.active,\n.nav-tabs .nav-item.show .nav-link {\n  color: #495057;\n  background-color: #fff;\n  border-color: #dee2e6 #dee2e6 #fff;\n}\n\n.nav-tabs .dropdown-menu {\n  margin-top: -1px;\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n}\n\n.nav-pills .nav-link {\n  background: none;\n  border: 0;\n  border-radius: 0.25rem;\n}\n\n.nav-pills .nav-link.active,\n.nav-pills .show > .nav-link {\n  color: #fff;\n  background-color: #446e9b;\n}\n\n.nav-fill > .nav-link,\n.nav-fill .nav-item {\n  -ms-flex: 1 1 auto;\n  flex: 1 1 auto;\n  text-align: center;\n}\n\n.nav-justified > .nav-link,\n.nav-justified .nav-item {\n  -ms-flex-preferred-size: 0;\n  flex-basis: 0;\n  -ms-flex-positive: 1;\n  flex-grow: 1;\n  text-align: center;\n}\n\n.nav-fill .nav-item .nav-link,\n.nav-justified .nav-item .nav-link {\n  width: 100%;\n}\n\n.tab-content > .tab-pane {\n  display: none;\n}\n\n.tab-content > .active {\n  display: block;\n}\n\n.navbar {\n  position: relative;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n  flex-wrap: wrap;\n  -ms-flex-align: center;\n  align-items: center;\n  -ms-flex-pack: justify;\n  justify-content: space-between;\n  padding-top: 0.5rem;\n  padding-bottom: 0.5rem;\n}\n\n.navbar > .container,\n.navbar > .container-fluid, .navbar > .container-sm, .navbar > .container-md, .navbar > .container-lg, .navbar > .container-xl, .navbar > .container-xxl {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: inherit;\n  flex-wrap: inherit;\n  -ms-flex-align: center;\n  align-items: center;\n  -ms-flex-pack: justify;\n  justify-content: space-between;\n}\n\n.navbar-brand {\n  padding-top: 0.3125rem;\n  padding-bottom: 0.3125rem;\n  margin-right: 1rem;\n  font-size: 1.25rem;\n  text-decoration: none;\n  white-space: nowrap;\n}\n\n.navbar-nav {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  padding-left: 0;\n  margin-bottom: 0;\n  list-style: none;\n}\n\n.navbar-nav .nav-link {\n  padding-right: 0;\n  padding-left: 0;\n}\n\n.navbar-nav .dropdown-menu {\n  position: static;\n}\n\n.navbar-text {\n  padding-top: 0.5rem;\n  padding-bottom: 0.5rem;\n}\n\n.navbar-collapse {\n  -ms-flex-preferred-size: 100%;\n  flex-basis: 100%;\n  -ms-flex-positive: 1;\n  flex-grow: 1;\n  -ms-flex-align: center;\n  align-items: center;\n}\n\n.navbar-toggler {\n  padding: 0.25rem 0.75rem;\n  font-size: 1.25rem;\n  line-height: 1;\n  background-color: transparent;\n  border: 1px solid transparent;\n  border-radius: 0.25rem;\n  transition: box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .navbar-toggler {\n    transition: none;\n  }\n}\n\n.navbar-toggler:hover {\n  text-decoration: none;\n}\n\n.navbar-toggler:focus {\n  text-decoration: none;\n  outline: 0;\n  box-shadow: 0 0 0 0.25rem;\n}\n\n.navbar-toggler-icon {\n  display: inline-block;\n  width: 1.5em;\n  height: 1.5em;\n  vertical-align: middle;\n  background-repeat: no-repeat;\n  background-position: center;\n  background-size: 100%;\n}\n\n.navbar-nav-scroll {\n  max-height: var(--bs-scroll-height, 75vh);\n  overflow-y: auto;\n}\n\n@media (min-width: 576px) {\n  .navbar-expand-sm {\n    -ms-flex-wrap: nowrap;\n    flex-wrap: nowrap;\n    -ms-flex-pack: start;\n    justify-content: flex-start;\n  }\n  .navbar-expand-sm .navbar-nav {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .navbar-expand-sm .navbar-nav .dropdown-menu {\n    position: absolute;\n  }\n  .navbar-expand-sm .navbar-nav .nav-link {\n    padding-right: 0.5rem;\n    padding-left: 0.5rem;\n  }\n  .navbar-expand-sm .navbar-nav-scroll {\n    overflow: visible;\n  }\n  .navbar-expand-sm .navbar-collapse {\n    display: -ms-flexbox !important;\n    display: flex !important;\n    -ms-flex-preferred-size: auto;\n    flex-basis: auto;\n  }\n  .navbar-expand-sm .navbar-toggler {\n    display: none;\n  }\n  .navbar-expand-sm .offcanvas-header {\n    display: none;\n  }\n  .navbar-expand-sm .offcanvas {\n    position: inherit;\n    bottom: 0;\n    z-index: 1000;\n    -ms-flex-positive: 1;\n    flex-grow: 1;\n    visibility: visible !important;\n    background-color: transparent;\n    border-right: 0;\n    border-left: 0;\n    transition: none;\n    -webkit-transform: none;\n    transform: none;\n  }\n  .navbar-expand-sm .offcanvas-top,\n  .navbar-expand-sm .offcanvas-bottom {\n    height: auto;\n    border-top: 0;\n    border-bottom: 0;\n  }\n  .navbar-expand-sm .offcanvas-body {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-positive: 0;\n    flex-grow: 0;\n    padding: 0;\n    overflow-y: visible;\n  }\n}\n\n@media (min-width: 768px) {\n  .navbar-expand-md {\n    -ms-flex-wrap: nowrap;\n    flex-wrap: nowrap;\n    -ms-flex-pack: start;\n    justify-content: flex-start;\n  }\n  .navbar-expand-md .navbar-nav {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .navbar-expand-md .navbar-nav .dropdown-menu {\n    position: absolute;\n  }\n  .navbar-expand-md .navbar-nav .nav-link {\n    padding-right: 0.5rem;\n    padding-left: 0.5rem;\n  }\n  .navbar-expand-md .navbar-nav-scroll {\n    overflow: visible;\n  }\n  .navbar-expand-md .navbar-collapse {\n    display: -ms-flexbox !important;\n    display: flex !important;\n    -ms-flex-preferred-size: auto;\n    flex-basis: auto;\n  }\n  .navbar-expand-md .navbar-toggler {\n    display: none;\n  }\n  .navbar-expand-md .offcanvas-header {\n    display: none;\n  }\n  .navbar-expand-md .offcanvas {\n    position: inherit;\n    bottom: 0;\n    z-index: 1000;\n    -ms-flex-positive: 1;\n    flex-grow: 1;\n    visibility: visible !important;\n    background-color: transparent;\n    border-right: 0;\n    border-left: 0;\n    transition: none;\n    -webkit-transform: none;\n    transform: none;\n  }\n  .navbar-expand-md .offcanvas-top,\n  .navbar-expand-md .offcanvas-bottom {\n    height: auto;\n    border-top: 0;\n    border-bottom: 0;\n  }\n  .navbar-expand-md .offcanvas-body {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-positive: 0;\n    flex-grow: 0;\n    padding: 0;\n    overflow-y: visible;\n  }\n}\n\n@media (min-width: 992px) {\n  .navbar-expand-lg {\n    -ms-flex-wrap: nowrap;\n    flex-wrap: nowrap;\n    -ms-flex-pack: start;\n    justify-content: flex-start;\n  }\n  .navbar-expand-lg .navbar-nav {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .navbar-expand-lg .navbar-nav .dropdown-menu {\n    position: absolute;\n  }\n  .navbar-expand-lg .navbar-nav .nav-link {\n    padding-right: 0.5rem;\n    padding-left: 0.5rem;\n  }\n  .navbar-expand-lg .navbar-nav-scroll {\n    overflow: visible;\n  }\n  .navbar-expand-lg .navbar-collapse {\n    display: -ms-flexbox !important;\n    display: flex !important;\n    -ms-flex-preferred-size: auto;\n    flex-basis: auto;\n  }\n  .navbar-expand-lg .navbar-toggler {\n    display: none;\n  }\n  .navbar-expand-lg .offcanvas-header {\n    display: none;\n  }\n  .navbar-expand-lg .offcanvas {\n    position: inherit;\n    bottom: 0;\n    z-index: 1000;\n    -ms-flex-positive: 1;\n    flex-grow: 1;\n    visibility: visible !important;\n    background-color: transparent;\n    border-right: 0;\n    border-left: 0;\n    transition: none;\n    -webkit-transform: none;\n    transform: none;\n  }\n  .navbar-expand-lg .offcanvas-top,\n  .navbar-expand-lg .offcanvas-bottom {\n    height: auto;\n    border-top: 0;\n    border-bottom: 0;\n  }\n  .navbar-expand-lg .offcanvas-body {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-positive: 0;\n    flex-grow: 0;\n    padding: 0;\n    overflow-y: visible;\n  }\n}\n\n@media (min-width: 1200px) {\n  .navbar-expand-xl {\n    -ms-flex-wrap: nowrap;\n    flex-wrap: nowrap;\n    -ms-flex-pack: start;\n    justify-content: flex-start;\n  }\n  .navbar-expand-xl .navbar-nav {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .navbar-expand-xl .navbar-nav .dropdown-menu {\n    position: absolute;\n  }\n  .navbar-expand-xl .navbar-nav .nav-link {\n    padding-right: 0.5rem;\n    padding-left: 0.5rem;\n  }\n  .navbar-expand-xl .navbar-nav-scroll {\n    overflow: visible;\n  }\n  .navbar-expand-xl .navbar-collapse {\n    display: -ms-flexbox !important;\n    display: flex !important;\n    -ms-flex-preferred-size: auto;\n    flex-basis: auto;\n  }\n  .navbar-expand-xl .navbar-toggler {\n    display: none;\n  }\n  .navbar-expand-xl .offcanvas-header {\n    display: none;\n  }\n  .navbar-expand-xl .offcanvas {\n    position: inherit;\n    bottom: 0;\n    z-index: 1000;\n    -ms-flex-positive: 1;\n    flex-grow: 1;\n    visibility: visible !important;\n    background-color: transparent;\n    border-right: 0;\n    border-left: 0;\n    transition: none;\n    -webkit-transform: none;\n    transform: none;\n  }\n  .navbar-expand-xl .offcanvas-top,\n  .navbar-expand-xl .offcanvas-bottom {\n    height: auto;\n    border-top: 0;\n    border-bottom: 0;\n  }\n  .navbar-expand-xl .offcanvas-body {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-positive: 0;\n    flex-grow: 0;\n    padding: 0;\n    overflow-y: visible;\n  }\n}\n\n@media (min-width: 1400px) {\n  .navbar-expand-xxl {\n    -ms-flex-wrap: nowrap;\n    flex-wrap: nowrap;\n    -ms-flex-pack: start;\n    justify-content: flex-start;\n  }\n  .navbar-expand-xxl .navbar-nav {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .navbar-expand-xxl .navbar-nav .dropdown-menu {\n    position: absolute;\n  }\n  .navbar-expand-xxl .navbar-nav .nav-link {\n    padding-right: 0.5rem;\n    padding-left: 0.5rem;\n  }\n  .navbar-expand-xxl .navbar-nav-scroll {\n    overflow: visible;\n  }\n  .navbar-expand-xxl .navbar-collapse {\n    display: -ms-flexbox !important;\n    display: flex !important;\n    -ms-flex-preferred-size: auto;\n    flex-basis: auto;\n  }\n  .navbar-expand-xxl .navbar-toggler {\n    display: none;\n  }\n  .navbar-expand-xxl .offcanvas-header {\n    display: none;\n  }\n  .navbar-expand-xxl .offcanvas {\n    position: inherit;\n    bottom: 0;\n    z-index: 1000;\n    -ms-flex-positive: 1;\n    flex-grow: 1;\n    visibility: visible !important;\n    background-color: transparent;\n    border-right: 0;\n    border-left: 0;\n    transition: none;\n    -webkit-transform: none;\n    transform: none;\n  }\n  .navbar-expand-xxl .offcanvas-top,\n  .navbar-expand-xxl .offcanvas-bottom {\n    height: auto;\n    border-top: 0;\n    border-bottom: 0;\n  }\n  .navbar-expand-xxl .offcanvas-body {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-positive: 0;\n    flex-grow: 0;\n    padding: 0;\n    overflow-y: visible;\n  }\n}\n\n.navbar-expand {\n  -ms-flex-wrap: nowrap;\n  flex-wrap: nowrap;\n  -ms-flex-pack: start;\n  justify-content: flex-start;\n}\n\n.navbar-expand .navbar-nav {\n  -ms-flex-direction: row;\n  flex-direction: row;\n}\n\n.navbar-expand .navbar-nav .dropdown-menu {\n  position: absolute;\n}\n\n.navbar-expand .navbar-nav .nav-link {\n  padding-right: 0.5rem;\n  padding-left: 0.5rem;\n}\n\n.navbar-expand .navbar-nav-scroll {\n  overflow: visible;\n}\n\n.navbar-expand .navbar-collapse {\n  display: -ms-flexbox !important;\n  display: flex !important;\n  -ms-flex-preferred-size: auto;\n  flex-basis: auto;\n}\n\n.navbar-expand .navbar-toggler {\n  display: none;\n}\n\n.navbar-expand .offcanvas-header {\n  display: none;\n}\n\n.navbar-expand .offcanvas {\n  position: inherit;\n  bottom: 0;\n  z-index: 1000;\n  -ms-flex-positive: 1;\n  flex-grow: 1;\n  visibility: visible !important;\n  background-color: transparent;\n  border-right: 0;\n  border-left: 0;\n  transition: none;\n  -webkit-transform: none;\n  transform: none;\n}\n\n.navbar-expand .offcanvas-top,\n.navbar-expand .offcanvas-bottom {\n  height: auto;\n  border-top: 0;\n  border-bottom: 0;\n}\n\n.navbar-expand .offcanvas-body {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-positive: 0;\n  flex-grow: 0;\n  padding: 0;\n  overflow-y: visible;\n}\n\n.navbar-light .navbar-brand {\n  color: #3399f3;\n}\n\n.navbar-light .navbar-brand:hover, .navbar-light .navbar-brand:focus {\n  color: #3399f3;\n}\n\n.navbar-light .navbar-nav .nav-link {\n  color: rgba(0, 0, 0, 0.4);\n}\n\n.navbar-light .navbar-nav .nav-link:hover, .navbar-light .navbar-nav .nav-link:focus {\n  color: #3399f3;\n}\n\n.navbar-light .navbar-nav .nav-link.disabled {\n  color: rgba(0, 0, 0, 0.3);\n}\n\n.navbar-light .navbar-nav .show > .nav-link,\n.navbar-light .navbar-nav .nav-link.active {\n  color: #3399f3;\n}\n\n.navbar-light .navbar-toggler {\n  color: rgba(0, 0, 0, 0.4);\n  border-color: rgba(0, 0, 0, 0.1);\n}\n\n.navbar-light .navbar-toggler-icon {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%280, 0, 0, 0.4%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e\");\n}\n\n.navbar-light .navbar-text {\n  color: rgba(0, 0, 0, 0.4);\n}\n\n.navbar-light .navbar-text a,\n.navbar-light .navbar-text a:hover,\n.navbar-light .navbar-text a:focus {\n  color: #3399f3;\n}\n\n.navbar-dark .navbar-brand {\n  color: #fff;\n}\n\n.navbar-dark .navbar-brand:hover, .navbar-dark .navbar-brand:focus {\n  color: #fff;\n}\n\n.navbar-dark .navbar-nav .nav-link {\n  color: rgba(255, 255, 255, 0.75);\n}\n\n.navbar-dark .navbar-nav .nav-link:hover, .navbar-dark .navbar-nav .nav-link:focus {\n  color: #fff;\n}\n\n.navbar-dark .navbar-nav .nav-link.disabled {\n  color: rgba(255, 255, 255, 0.25);\n}\n\n.navbar-dark .navbar-nav .show > .nav-link,\n.navbar-dark .navbar-nav .nav-link.active {\n  color: #fff;\n}\n\n.navbar-dark .navbar-toggler {\n  color: rgba(255, 255, 255, 0.75);\n  border-color: rgba(255, 255, 255, 0.1);\n}\n\n.navbar-dark .navbar-toggler-icon {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.75%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e\");\n}\n\n.navbar-dark .navbar-text {\n  color: rgba(255, 255, 255, 0.75);\n}\n\n.navbar-dark .navbar-text a,\n.navbar-dark .navbar-text a:hover,\n.navbar-dark .navbar-text a:focus {\n  color: #fff;\n}\n\n.card {\n  position: relative;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  min-width: 0;\n  word-wrap: break-word;\n  background-color: #fff;\n  background-clip: border-box;\n  border: 1px solid rgba(0, 0, 0, 0.125);\n  border-radius: 0.25rem;\n}\n\n.card > hr {\n  margin-right: 0;\n  margin-left: 0;\n}\n\n.card > .list-group {\n  border-top: inherit;\n  border-bottom: inherit;\n}\n\n.card > .list-group:first-child {\n  border-top-width: 0;\n  border-top-left-radius: calc(0.25rem - 1px);\n  border-top-right-radius: calc(0.25rem - 1px);\n}\n\n.card > .list-group:last-child {\n  border-bottom-width: 0;\n  border-bottom-right-radius: calc(0.25rem - 1px);\n  border-bottom-left-radius: calc(0.25rem - 1px);\n}\n\n.card > .card-header + .list-group,\n.card > .list-group + .card-footer {\n  border-top: 0;\n}\n\n.card-body {\n  -ms-flex: 1 1 auto;\n  flex: 1 1 auto;\n  padding: 1rem 1rem;\n}\n\n.card-title {\n  margin-bottom: 0.5rem;\n}\n\n.card-subtitle {\n  margin-top: -0.25rem;\n  margin-bottom: 0;\n}\n\n.card-text:last-child {\n  margin-bottom: 0;\n}\n\n.card-link + .card-link {\n  margin-left: 1rem;\n}\n\n.card-header {\n  padding: 0.5rem 1rem;\n  margin-bottom: 0;\n  background-color: rgba(0, 0, 0, 0.03);\n  border-bottom: 1px solid rgba(0, 0, 0, 0.125);\n}\n\n.card-header:first-child {\n  border-radius: calc(0.25rem - 1px) calc(0.25rem - 1px) 0 0;\n}\n\n.card-footer {\n  padding: 0.5rem 1rem;\n  background-color: rgba(0, 0, 0, 0.03);\n  border-top: 1px solid rgba(0, 0, 0, 0.125);\n}\n\n.card-footer:last-child {\n  border-radius: 0 0 calc(0.25rem - 1px) calc(0.25rem - 1px);\n}\n\n.card-header-tabs {\n  margin-right: -0.5rem;\n  margin-bottom: -0.5rem;\n  margin-left: -0.5rem;\n  border-bottom: 0;\n}\n\n.card-header-pills {\n  margin-right: -0.5rem;\n  margin-left: -0.5rem;\n}\n\n.card-img-overlay {\n  position: absolute;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  padding: 1rem;\n  border-radius: calc(0.25rem - 1px);\n}\n\n.card-img,\n.card-img-top,\n.card-img-bottom {\n  width: 100%;\n}\n\n.card-img,\n.card-img-top {\n  border-top-left-radius: calc(0.25rem - 1px);\n  border-top-right-radius: calc(0.25rem - 1px);\n}\n\n.card-img,\n.card-img-bottom {\n  border-bottom-right-radius: calc(0.25rem - 1px);\n  border-bottom-left-radius: calc(0.25rem - 1px);\n}\n\n.card-group > .card {\n  margin-bottom: 0.75rem;\n}\n\n@media (min-width: 576px) {\n  .card-group {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-flow: row wrap;\n    flex-flow: row wrap;\n  }\n  .card-group > .card {\n    -ms-flex: 1 0 0%;\n    flex: 1 0 0%;\n    margin-bottom: 0;\n  }\n  .card-group > .card + .card {\n    margin-left: 0;\n    border-left: 0;\n  }\n  .card-group > .card:not(:last-child) {\n    border-top-right-radius: 0;\n    border-bottom-right-radius: 0;\n  }\n  .card-group > .card:not(:last-child) .card-img-top,\n  .card-group > .card:not(:last-child) .card-header {\n    border-top-right-radius: 0;\n  }\n  .card-group > .card:not(:last-child) .card-img-bottom,\n  .card-group > .card:not(:last-child) .card-footer {\n    border-bottom-right-radius: 0;\n  }\n  .card-group > .card:not(:first-child) {\n    border-top-left-radius: 0;\n    border-bottom-left-radius: 0;\n  }\n  .card-group > .card:not(:first-child) .card-img-top,\n  .card-group > .card:not(:first-child) .card-header {\n    border-top-left-radius: 0;\n  }\n  .card-group > .card:not(:first-child) .card-img-bottom,\n  .card-group > .card:not(:first-child) .card-footer {\n    border-bottom-left-radius: 0;\n  }\n}\n\n.accordion-button {\n  position: relative;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-align: center;\n  align-items: center;\n  width: 100%;\n  padding: 1rem 1.25rem;\n  font-size: 1rem;\n  color: #777;\n  text-align: left;\n  background-color: #fff;\n  border: 0;\n  border-radius: 0;\n  overflow-anchor: none;\n  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, border-radius 0.15s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .accordion-button {\n    transition: none;\n  }\n}\n\n.accordion-button:not(.collapsed) {\n  color: #3d638c;\n  background-color: #ecf1f5;\n  box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.125);\n}\n\n.accordion-button:not(.collapsed)::after {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%233d638c'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e\");\n  -webkit-transform: rotate(-180deg);\n  transform: rotate(-180deg);\n}\n\n.accordion-button::after {\n  -ms-flex-negative: 0;\n  flex-shrink: 0;\n  width: 1.25rem;\n  height: 1.25rem;\n  margin-left: auto;\n  content: \"\";\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23777'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e\");\n  background-repeat: no-repeat;\n  background-size: 1.25rem;\n  transition: -webkit-transform 0.2s ease-in-out;\n  transition: transform 0.2s ease-in-out;\n  transition: transform 0.2s ease-in-out, -webkit-transform 0.2s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .accordion-button::after {\n    transition: none;\n  }\n}\n\n.accordion-button:hover {\n  z-index: 2;\n}\n\n.accordion-button:focus {\n  z-index: 3;\n  border-color: #a2b7cd;\n  outline: 0;\n  box-shadow: 0 0 0 0.25rem rgba(68, 110, 155, 0.25);\n}\n\n.accordion-header {\n  margin-bottom: 0;\n}\n\n.accordion-item {\n  background-color: #fff;\n  border: 1px solid rgba(0, 0, 0, 0.125);\n}\n\n.accordion-item:first-of-type {\n  border-top-left-radius: 0.25rem;\n  border-top-right-radius: 0.25rem;\n}\n\n.accordion-item:first-of-type .accordion-button {\n  border-top-left-radius: calc(0.25rem - 1px);\n  border-top-right-radius: calc(0.25rem - 1px);\n}\n\n.accordion-item:not(:first-of-type) {\n  border-top: 0;\n}\n\n.accordion-item:last-of-type {\n  border-bottom-right-radius: 0.25rem;\n  border-bottom-left-radius: 0.25rem;\n}\n\n.accordion-item:last-of-type .accordion-button.collapsed {\n  border-bottom-right-radius: calc(0.25rem - 1px);\n  border-bottom-left-radius: calc(0.25rem - 1px);\n}\n\n.accordion-item:last-of-type .accordion-collapse {\n  border-bottom-right-radius: 0.25rem;\n  border-bottom-left-radius: 0.25rem;\n}\n\n.accordion-body {\n  padding: 1rem 1.25rem;\n}\n\n.accordion-flush .accordion-collapse {\n  border-width: 0;\n}\n\n.accordion-flush .accordion-item {\n  border-right: 0;\n  border-left: 0;\n  border-radius: 0;\n}\n\n.accordion-flush .accordion-item:first-child {\n  border-top: 0;\n}\n\n.accordion-flush .accordion-item:last-child {\n  border-bottom: 0;\n}\n\n.accordion-flush .accordion-item .accordion-button {\n  border-radius: 0;\n}\n\n.breadcrumb {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n  flex-wrap: wrap;\n  padding: 0 0;\n  margin-bottom: 1rem;\n  list-style: none;\n}\n\n.breadcrumb-item + .breadcrumb-item {\n  padding-left: 0.5rem;\n}\n\n.breadcrumb-item + .breadcrumb-item::before {\n  float: left;\n  padding-right: 0.5rem;\n  color: #777;\n  content: var(--bs-breadcrumb-divider, \"/\") /* rtl: var(--bs-breadcrumb-divider, \"/\") */;\n}\n\n.breadcrumb-item.active {\n  color: #777;\n}\n\n.pagination {\n  display: -ms-flexbox;\n  display: flex;\n  padding-left: 0;\n  list-style: none;\n}\n\n.page-link {\n  position: relative;\n  display: block;\n  color: #3399f3;\n  text-decoration: none;\n  background-color: #fff;\n  border: 1px solid #dee2e6;\n  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .page-link {\n    transition: none;\n  }\n}\n\n.page-link:hover {\n  z-index: 2;\n  color: #297ac2;\n  background-color: #eee;\n  border-color: #dee2e6;\n}\n\n.page-link:focus {\n  z-index: 3;\n  color: #297ac2;\n  background-color: #eee;\n  outline: 0;\n  box-shadow: 0 0 0 0.25rem rgba(68, 110, 155, 0.25);\n}\n\n.page-item:not(:first-child) .page-link {\n  margin-left: -1px;\n}\n\n.page-item.active .page-link {\n  z-index: 3;\n  color: #fff;\n  background-color: #446e9b;\n  border-color: #446e9b;\n}\n\n.page-item.disabled .page-link {\n  color: #777;\n  pointer-events: none;\n  background-color: #fff;\n  border-color: #dee2e6;\n}\n\n.page-link {\n  padding: 0.375rem 0.75rem;\n}\n\n.page-item:first-child .page-link {\n  border-top-left-radius: 0.25rem;\n  border-bottom-left-radius: 0.25rem;\n}\n\n.page-item:last-child .page-link {\n  border-top-right-radius: 0.25rem;\n  border-bottom-right-radius: 0.25rem;\n}\n\n.pagination-lg .page-link {\n  padding: 0.75rem 1.5rem;\n  font-size: 1.25rem;\n}\n\n.pagination-lg .page-item:first-child .page-link {\n  border-top-left-radius: 0.3rem;\n  border-bottom-left-radius: 0.3rem;\n}\n\n.pagination-lg .page-item:last-child .page-link {\n  border-top-right-radius: 0.3rem;\n  border-bottom-right-radius: 0.3rem;\n}\n\n.pagination-sm .page-link {\n  padding: 0.25rem 0.5rem;\n  font-size: 0.875rem;\n}\n\n.pagination-sm .page-item:first-child .page-link {\n  border-top-left-radius: 0.2rem;\n  border-bottom-left-radius: 0.2rem;\n}\n\n.pagination-sm .page-item:last-child .page-link {\n  border-top-right-radius: 0.2rem;\n  border-bottom-right-radius: 0.2rem;\n}\n\n.badge {\n  display: inline-block;\n  padding: 0.35em 0.65em;\n  font-size: 0.75em;\n  font-weight: 700;\n  line-height: 1;\n  color: #fff;\n  text-align: center;\n  white-space: nowrap;\n  vertical-align: baseline;\n  border-radius: 0.25rem;\n}\n\n.badge:empty {\n  display: none;\n}\n\n.btn .badge {\n  position: relative;\n  top: -1px;\n}\n\n.alert {\n  position: relative;\n  padding: 1rem 1rem;\n  margin-bottom: 1rem;\n  border: 1px solid transparent;\n  border-radius: 0.25rem;\n}\n\n.alert-heading {\n  color: inherit;\n}\n\n.alert-link {\n  font-weight: 700;\n}\n\n.alert-dismissible {\n  padding-right: 3rem;\n}\n\n.alert-dismissible .btn-close {\n  position: absolute;\n  top: 0;\n  right: 0;\n  z-index: 2;\n  padding: 1.25rem 1rem;\n}\n\n.alert-primary {\n  color: #29425d;\n  background-color: #dae2eb;\n  border-color: #c7d4e1;\n}\n\n.alert-primary .alert-link {\n  color: #21354a;\n}\n\n.alert-secondary {\n  color: #5c5c5c;\n  background-color: #ebebeb;\n  border-color: #e0e0e0;\n}\n\n.alert-secondary .alert-link {\n  color: #4a4a4a;\n}\n\n.alert-success {\n  color: #246d14;\n  background-color: #d8f0d3;\n  border-color: #c5e9bc;\n}\n\n.alert-success .alert-link {\n  color: #1d5710;\n}\n\n.alert-info {\n  color: #1f5c92;\n  background-color: #d6ebfd;\n  border-color: #c2e0fb;\n}\n\n.alert-info .alert-link {\n  color: #194a75;\n}\n\n.alert-warning {\n  color: #7f4600;\n  background-color: #f6e3cc;\n  border-color: #f2d6b3;\n}\n\n.alert-warning .alert-link {\n  color: #663800;\n}\n\n.alert-danger {\n  color: #7b0100;\n  background-color: #f5cccc;\n  border-color: #f0b3b3;\n}\n\n.alert-danger .alert-link {\n  color: #620100;\n}\n\n.alert-light {\n  color: #8f8f8f;\n  background-color: #fcfcfc;\n  border-color: #fafafa;\n}\n\n.alert-light .alert-link {\n  color: #727272;\n}\n\n.alert-dark {\n  color: #1f1f1f;\n  background-color: #d6d6d6;\n  border-color: #c2c2c2;\n}\n\n.alert-dark .alert-link {\n  color: #191919;\n}\n\n@-webkit-keyframes progress-bar-stripes {\n  0% {\n    background-position-x: 1rem;\n  }\n}\n\n@keyframes progress-bar-stripes {\n  0% {\n    background-position-x: 1rem;\n  }\n}\n\n.progress {\n  display: -ms-flexbox;\n  display: flex;\n  height: 1rem;\n  overflow: hidden;\n  font-size: 0.75rem;\n  background-color: #eee;\n  border-radius: 0.25rem;\n}\n\n.progress-bar {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  -ms-flex-pack: center;\n  justify-content: center;\n  overflow: hidden;\n  color: #fff;\n  text-align: center;\n  white-space: nowrap;\n  background-color: #446e9b;\n  transition: width 0.6s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .progress-bar {\n    transition: none;\n  }\n}\n\n.progress-bar-striped {\n  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-size: 1rem 1rem;\n}\n\n.progress-bar-animated {\n  -webkit-animation: 1s linear infinite progress-bar-stripes;\n  animation: 1s linear infinite progress-bar-stripes;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .progress-bar-animated {\n    -webkit-animation: none;\n    animation: none;\n  }\n}\n\n.list-group {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  padding-left: 0;\n  margin-bottom: 0;\n  border-radius: 0.25rem;\n}\n\n.list-group-numbered {\n  list-style-type: none;\n  counter-reset: section;\n}\n\n.list-group-numbered > li::before {\n  content: counters(section, \".\") \". \";\n  counter-increment: section;\n}\n\n.list-group-item-action {\n  width: 100%;\n  color: #495057;\n  text-align: inherit;\n}\n\n.list-group-item-action:hover, .list-group-item-action:focus {\n  z-index: 1;\n  color: #495057;\n  text-decoration: none;\n  background-color: #f8f9fa;\n}\n\n.list-group-item-action:active {\n  color: #777;\n  background-color: #eee;\n}\n\n.list-group-item {\n  position: relative;\n  display: block;\n  padding: 0.5rem 1rem;\n  color: #2d2d2d;\n  text-decoration: none;\n  background-color: #fff;\n  border: 1px solid rgba(0, 0, 0, 0.125);\n}\n\n.list-group-item:first-child {\n  border-top-left-radius: inherit;\n  border-top-right-radius: inherit;\n}\n\n.list-group-item:last-child {\n  border-bottom-right-radius: inherit;\n  border-bottom-left-radius: inherit;\n}\n\n.list-group-item.disabled, .list-group-item:disabled {\n  color: #777;\n  pointer-events: none;\n  background-color: #fff;\n}\n\n.list-group-item.active {\n  z-index: 2;\n  color: #fff;\n  background-color: #446e9b;\n  border-color: #446e9b;\n}\n\n.list-group-item + .list-group-item {\n  border-top-width: 0;\n}\n\n.list-group-item + .list-group-item.active {\n  margin-top: -1px;\n  border-top-width: 1px;\n}\n\n.list-group-horizontal {\n  -ms-flex-direction: row;\n  flex-direction: row;\n}\n\n.list-group-horizontal > .list-group-item:first-child {\n  border-bottom-left-radius: 0.25rem;\n  border-top-right-radius: 0;\n}\n\n.list-group-horizontal > .list-group-item:last-child {\n  border-top-right-radius: 0.25rem;\n  border-bottom-left-radius: 0;\n}\n\n.list-group-horizontal > .list-group-item.active {\n  margin-top: 0;\n}\n\n.list-group-horizontal > .list-group-item + .list-group-item {\n  border-top-width: 1px;\n  border-left-width: 0;\n}\n\n.list-group-horizontal > .list-group-item + .list-group-item.active {\n  margin-left: -1px;\n  border-left-width: 1px;\n}\n\n@media (min-width: 576px) {\n  .list-group-horizontal-sm {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .list-group-horizontal-sm > .list-group-item:first-child {\n    border-bottom-left-radius: 0.25rem;\n    border-top-right-radius: 0;\n  }\n  .list-group-horizontal-sm > .list-group-item:last-child {\n    border-top-right-radius: 0.25rem;\n    border-bottom-left-radius: 0;\n  }\n  .list-group-horizontal-sm > .list-group-item.active {\n    margin-top: 0;\n  }\n  .list-group-horizontal-sm > .list-group-item + .list-group-item {\n    border-top-width: 1px;\n    border-left-width: 0;\n  }\n  .list-group-horizontal-sm > .list-group-item + .list-group-item.active {\n    margin-left: -1px;\n    border-left-width: 1px;\n  }\n}\n\n@media (min-width: 768px) {\n  .list-group-horizontal-md {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .list-group-horizontal-md > .list-group-item:first-child {\n    border-bottom-left-radius: 0.25rem;\n    border-top-right-radius: 0;\n  }\n  .list-group-horizontal-md > .list-group-item:last-child {\n    border-top-right-radius: 0.25rem;\n    border-bottom-left-radius: 0;\n  }\n  .list-group-horizontal-md > .list-group-item.active {\n    margin-top: 0;\n  }\n  .list-group-horizontal-md > .list-group-item + .list-group-item {\n    border-top-width: 1px;\n    border-left-width: 0;\n  }\n  .list-group-horizontal-md > .list-group-item + .list-group-item.active {\n    margin-left: -1px;\n    border-left-width: 1px;\n  }\n}\n\n@media (min-width: 992px) {\n  .list-group-horizontal-lg {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .list-group-horizontal-lg > .list-group-item:first-child {\n    border-bottom-left-radius: 0.25rem;\n    border-top-right-radius: 0;\n  }\n  .list-group-horizontal-lg > .list-group-item:last-child {\n    border-top-right-radius: 0.25rem;\n    border-bottom-left-radius: 0;\n  }\n  .list-group-horizontal-lg > .list-group-item.active {\n    margin-top: 0;\n  }\n  .list-group-horizontal-lg > .list-group-item + .list-group-item {\n    border-top-width: 1px;\n    border-left-width: 0;\n  }\n  .list-group-horizontal-lg > .list-group-item + .list-group-item.active {\n    margin-left: -1px;\n    border-left-width: 1px;\n  }\n}\n\n@media (min-width: 1200px) {\n  .list-group-horizontal-xl {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .list-group-horizontal-xl > .list-group-item:first-child {\n    border-bottom-left-radius: 0.25rem;\n    border-top-right-radius: 0;\n  }\n  .list-group-horizontal-xl > .list-group-item:last-child {\n    border-top-right-radius: 0.25rem;\n    border-bottom-left-radius: 0;\n  }\n  .list-group-horizontal-xl > .list-group-item.active {\n    margin-top: 0;\n  }\n  .list-group-horizontal-xl > .list-group-item + .list-group-item {\n    border-top-width: 1px;\n    border-left-width: 0;\n  }\n  .list-group-horizontal-xl > .list-group-item + .list-group-item.active {\n    margin-left: -1px;\n    border-left-width: 1px;\n  }\n}\n\n@media (min-width: 1400px) {\n  .list-group-horizontal-xxl {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .list-group-horizontal-xxl > .list-group-item:first-child {\n    border-bottom-left-radius: 0.25rem;\n    border-top-right-radius: 0;\n  }\n  .list-group-horizontal-xxl > .list-group-item:last-child {\n    border-top-right-radius: 0.25rem;\n    border-bottom-left-radius: 0;\n  }\n  .list-group-horizontal-xxl > .list-group-item.active {\n    margin-top: 0;\n  }\n  .list-group-horizontal-xxl > .list-group-item + .list-group-item {\n    border-top-width: 1px;\n    border-left-width: 0;\n  }\n  .list-group-horizontal-xxl > .list-group-item + .list-group-item.active {\n    margin-left: -1px;\n    border-left-width: 1px;\n  }\n}\n\n.list-group-flush {\n  border-radius: 0;\n}\n\n.list-group-flush > .list-group-item {\n  border-width: 0 0 1px;\n}\n\n.list-group-flush > .list-group-item:last-child {\n  border-bottom-width: 0;\n}\n\n.list-group-item-primary {\n  color: #29425d;\n  background-color: #dae2eb;\n}\n\n.list-group-item-primary.list-group-item-action:hover, .list-group-item-primary.list-group-item-action:focus {\n  color: #29425d;\n  background-color: #c4cbd4;\n}\n\n.list-group-item-primary.list-group-item-action.active {\n  color: #fff;\n  background-color: #29425d;\n  border-color: #29425d;\n}\n\n.list-group-item-secondary {\n  color: #5c5c5c;\n  background-color: #ebebeb;\n}\n\n.list-group-item-secondary.list-group-item-action:hover, .list-group-item-secondary.list-group-item-action:focus {\n  color: #5c5c5c;\n  background-color: #d4d4d4;\n}\n\n.list-group-item-secondary.list-group-item-action.active {\n  color: #fff;\n  background-color: #5c5c5c;\n  border-color: #5c5c5c;\n}\n\n.list-group-item-success {\n  color: #246d14;\n  background-color: #d8f0d3;\n}\n\n.list-group-item-success.list-group-item-action:hover, .list-group-item-success.list-group-item-action:focus {\n  color: #246d14;\n  background-color: #c2d8be;\n}\n\n.list-group-item-success.list-group-item-action.active {\n  color: #fff;\n  background-color: #246d14;\n  border-color: #246d14;\n}\n\n.list-group-item-info {\n  color: #1f5c92;\n  background-color: #d6ebfd;\n}\n\n.list-group-item-info.list-group-item-action:hover, .list-group-item-info.list-group-item-action:focus {\n  color: #1f5c92;\n  background-color: #c1d4e4;\n}\n\n.list-group-item-info.list-group-item-action.active {\n  color: #fff;\n  background-color: #1f5c92;\n  border-color: #1f5c92;\n}\n\n.list-group-item-warning {\n  color: #7f4600;\n  background-color: #f6e3cc;\n}\n\n.list-group-item-warning.list-group-item-action:hover, .list-group-item-warning.list-group-item-action:focus {\n  color: #7f4600;\n  background-color: #ddccb8;\n}\n\n.list-group-item-warning.list-group-item-action.active {\n  color: #fff;\n  background-color: #7f4600;\n  border-color: #7f4600;\n}\n\n.list-group-item-danger {\n  color: #7b0100;\n  background-color: #f5cccc;\n}\n\n.list-group-item-danger.list-group-item-action:hover, .list-group-item-danger.list-group-item-action:focus {\n  color: #7b0100;\n  background-color: #ddb8b8;\n}\n\n.list-group-item-danger.list-group-item-action.active {\n  color: #fff;\n  background-color: #7b0100;\n  border-color: #7b0100;\n}\n\n.list-group-item-light {\n  color: #8f8f8f;\n  background-color: #fcfcfc;\n}\n\n.list-group-item-light.list-group-item-action:hover, .list-group-item-light.list-group-item-action:focus {\n  color: #8f8f8f;\n  background-color: #e3e3e3;\n}\n\n.list-group-item-light.list-group-item-action.active {\n  color: #fff;\n  background-color: #8f8f8f;\n  border-color: #8f8f8f;\n}\n\n.list-group-item-dark {\n  color: #1f1f1f;\n  background-color: #d6d6d6;\n}\n\n.list-group-item-dark.list-group-item-action:hover, .list-group-item-dark.list-group-item-action:focus {\n  color: #1f1f1f;\n  background-color: #c1c1c1;\n}\n\n.list-group-item-dark.list-group-item-action.active {\n  color: #fff;\n  background-color: #1f1f1f;\n  border-color: #1f1f1f;\n}\n\n.btn-close {\n  box-sizing: content-box;\n  width: 1em;\n  height: 1em;\n  padding: 0.25em 0.25em;\n  color: #000;\n  background: transparent url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23000'%3e%3cpath d='M.293.293a1 1 0 011.414 0L8 6.586 14.293.293a1 1 0 111.414 1.414L9.414 8l6.293 6.293a1 1 0 01-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 01-1.414-1.414L6.586 8 .293 1.707a1 1 0 010-1.414z'/%3e%3c/svg%3e\") center/1em auto no-repeat;\n  border: 0;\n  border-radius: 0.25rem;\n  opacity: 0.5;\n}\n\n.btn-close:hover {\n  color: #000;\n  text-decoration: none;\n  opacity: 0.75;\n}\n\n.btn-close:focus {\n  outline: 0;\n  box-shadow: 0 0 0 0.25rem rgba(68, 110, 155, 0.25);\n  opacity: 1;\n}\n\n.btn-close:disabled, .btn-close.disabled {\n  pointer-events: none;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  user-select: none;\n  opacity: 0.25;\n}\n\n.btn-close-white {\n  -webkit-filter: invert(1) grayscale(100%) brightness(200%);\n  filter: invert(1) grayscale(100%) brightness(200%);\n}\n\n.toast {\n  width: 350px;\n  max-width: 100%;\n  font-size: 0.875rem;\n  pointer-events: auto;\n  background-color: rgba(255, 255, 255, 0.85);\n  background-clip: padding-box;\n  border: 1px solid rgba(0, 0, 0, 0.1);\n  box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15);\n  border-radius: 0.25rem;\n}\n\n.toast.showing {\n  opacity: 0;\n}\n\n.toast:not(.show) {\n  display: none;\n}\n\n.toast-container {\n  width: -webkit-max-content;\n  width: -moz-max-content;\n  width: max-content;\n  max-width: 100%;\n  pointer-events: none;\n}\n\n.toast-container > :not(:last-child) {\n  margin-bottom: 0.75rem;\n}\n\n.toast-header {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-align: center;\n  align-items: center;\n  padding: 0.5rem 0.75rem;\n  color: #777;\n  background-color: rgba(255, 255, 255, 0.85);\n  background-clip: padding-box;\n  border-bottom: 1px solid rgba(0, 0, 0, 0.05);\n  border-top-left-radius: calc(0.25rem - 1px);\n  border-top-right-radius: calc(0.25rem - 1px);\n}\n\n.toast-header .btn-close {\n  margin-right: -0.375rem;\n  margin-left: 0.75rem;\n}\n\n.toast-body {\n  padding: 0.75rem;\n  word-wrap: break-word;\n}\n\n.modal {\n  position: fixed;\n  top: 0;\n  left: 0;\n  z-index: 1055;\n  display: none;\n  width: 100%;\n  height: 100%;\n  overflow-x: hidden;\n  overflow-y: auto;\n  outline: 0;\n}\n\n.modal-dialog {\n  position: relative;\n  width: auto;\n  margin: 0.5rem;\n  pointer-events: none;\n}\n\n.modal.fade .modal-dialog {\n  transition: -webkit-transform 0.3s ease-out;\n  transition: transform 0.3s ease-out;\n  transition: transform 0.3s ease-out, -webkit-transform 0.3s ease-out;\n  -webkit-transform: translate(0, -50px);\n  transform: translate(0, -50px);\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .modal.fade .modal-dialog {\n    transition: none;\n  }\n}\n\n.modal.show .modal-dialog {\n  -webkit-transform: none;\n  transform: none;\n}\n\n.modal.modal-static .modal-dialog {\n  -webkit-transform: scale(1.02);\n  transform: scale(1.02);\n}\n\n.modal-dialog-scrollable {\n  height: calc(100% - 1rem);\n}\n\n.modal-dialog-scrollable .modal-content {\n  max-height: 100%;\n  overflow: hidden;\n}\n\n.modal-dialog-scrollable .modal-body {\n  overflow-y: auto;\n}\n\n.modal-dialog-centered {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-align: center;\n  align-items: center;\n  min-height: calc(100% - 1rem);\n}\n\n.modal-content {\n  position: relative;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  width: 100%;\n  pointer-events: auto;\n  background-color: #fff;\n  background-clip: padding-box;\n  border: 1px solid rgba(0, 0, 0, 0.2);\n  border-radius: 0.3rem;\n  outline: 0;\n}\n\n.modal-backdrop {\n  position: fixed;\n  top: 0;\n  left: 0;\n  z-index: 1050;\n  width: 100vw;\n  height: 100vh;\n  background-color: #000;\n}\n\n.modal-backdrop.fade {\n  opacity: 0;\n}\n\n.modal-backdrop.show {\n  opacity: 0.5;\n}\n\n.modal-header {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-negative: 0;\n  flex-shrink: 0;\n  -ms-flex-align: center;\n  align-items: center;\n  -ms-flex-pack: justify;\n  justify-content: space-between;\n  padding: 1rem 1rem;\n  border-bottom: 1px solid #dee2e6;\n  border-top-left-radius: calc(0.3rem - 1px);\n  border-top-right-radius: calc(0.3rem - 1px);\n}\n\n.modal-header .btn-close {\n  padding: 0.5rem 0.5rem;\n  margin: -0.5rem -0.5rem -0.5rem auto;\n}\n\n.modal-title {\n  margin-bottom: 0;\n  line-height: 1.5;\n}\n\n.modal-body {\n  position: relative;\n  -ms-flex: 1 1 auto;\n  flex: 1 1 auto;\n  padding: 1rem;\n}\n\n.modal-footer {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n  flex-wrap: wrap;\n  -ms-flex-negative: 0;\n  flex-shrink: 0;\n  -ms-flex-align: center;\n  align-items: center;\n  -ms-flex-pack: end;\n  justify-content: flex-end;\n  padding: 0.75rem;\n  border-top: 1px solid #dee2e6;\n  border-bottom-right-radius: calc(0.3rem - 1px);\n  border-bottom-left-radius: calc(0.3rem - 1px);\n}\n\n.modal-footer > * {\n  margin: 0.25rem;\n}\n\n@media (min-width: 576px) {\n  .modal-dialog {\n    max-width: 500px;\n    margin: 1.75rem auto;\n  }\n  .modal-dialog-scrollable {\n    height: calc(100% - 3.5rem);\n  }\n  .modal-dialog-centered {\n    min-height: calc(100% - 3.5rem);\n  }\n  .modal-sm {\n    max-width: 300px;\n  }\n}\n\n@media (min-width: 992px) {\n  .modal-lg,\n  .modal-xl {\n    max-width: 800px;\n  }\n}\n\n@media (min-width: 1200px) {\n  .modal-xl {\n    max-width: 1140px;\n  }\n}\n\n.modal-fullscreen {\n  width: 100vw;\n  max-width: none;\n  height: 100%;\n  margin: 0;\n}\n\n.modal-fullscreen .modal-content {\n  height: 100%;\n  border: 0;\n  border-radius: 0;\n}\n\n.modal-fullscreen .modal-header {\n  border-radius: 0;\n}\n\n.modal-fullscreen .modal-body {\n  overflow-y: auto;\n}\n\n.modal-fullscreen .modal-footer {\n  border-radius: 0;\n}\n\n@media (max-width: 575.98px) {\n  .modal-fullscreen-sm-down {\n    width: 100vw;\n    max-width: none;\n    height: 100%;\n    margin: 0;\n  }\n  .modal-fullscreen-sm-down .modal-content {\n    height: 100%;\n    border: 0;\n    border-radius: 0;\n  }\n  .modal-fullscreen-sm-down .modal-header {\n    border-radius: 0;\n  }\n  .modal-fullscreen-sm-down .modal-body {\n    overflow-y: auto;\n  }\n  .modal-fullscreen-sm-down .modal-footer {\n    border-radius: 0;\n  }\n}\n\n@media (max-width: 767.98px) {\n  .modal-fullscreen-md-down {\n    width: 100vw;\n    max-width: none;\n    height: 100%;\n    margin: 0;\n  }\n  .modal-fullscreen-md-down .modal-content {\n    height: 100%;\n    border: 0;\n    border-radius: 0;\n  }\n  .modal-fullscreen-md-down .modal-header {\n    border-radius: 0;\n  }\n  .modal-fullscreen-md-down .modal-body {\n    overflow-y: auto;\n  }\n  .modal-fullscreen-md-down .modal-footer {\n    border-radius: 0;\n  }\n}\n\n@media (max-width: 991.98px) {\n  .modal-fullscreen-lg-down {\n    width: 100vw;\n    max-width: none;\n    height: 100%;\n    margin: 0;\n  }\n  .modal-fullscreen-lg-down .modal-content {\n    height: 100%;\n    border: 0;\n    border-radius: 0;\n  }\n  .modal-fullscreen-lg-down .modal-header {\n    border-radius: 0;\n  }\n  .modal-fullscreen-lg-down .modal-body {\n    overflow-y: auto;\n  }\n  .modal-fullscreen-lg-down .modal-footer {\n    border-radius: 0;\n  }\n}\n\n@media (max-width: 1199.98px) {\n  .modal-fullscreen-xl-down {\n    width: 100vw;\n    max-width: none;\n    height: 100%;\n    margin: 0;\n  }\n  .modal-fullscreen-xl-down .modal-content {\n    height: 100%;\n    border: 0;\n    border-radius: 0;\n  }\n  .modal-fullscreen-xl-down .modal-header {\n    border-radius: 0;\n  }\n  .modal-fullscreen-xl-down .modal-body {\n    overflow-y: auto;\n  }\n  .modal-fullscreen-xl-down .modal-footer {\n    border-radius: 0;\n  }\n}\n\n@media (max-width: 1399.98px) {\n  .modal-fullscreen-xxl-down {\n    width: 100vw;\n    max-width: none;\n    height: 100%;\n    margin: 0;\n  }\n  .modal-fullscreen-xxl-down .modal-content {\n    height: 100%;\n    border: 0;\n    border-radius: 0;\n  }\n  .modal-fullscreen-xxl-down .modal-header {\n    border-radius: 0;\n  }\n  .modal-fullscreen-xxl-down .modal-body {\n    overflow-y: auto;\n  }\n  .modal-fullscreen-xxl-down .modal-footer {\n    border-radius: 0;\n  }\n}\n\n.tooltip {\n  position: absolute;\n  z-index: 1080;\n  display: block;\n  margin: 0;\n  font-family: var(--bs-font-sans-serif);\n  font-style: normal;\n  font-weight: 400;\n  line-height: 1.5;\n  text-align: left;\n  text-align: start;\n  text-decoration: none;\n  text-shadow: none;\n  text-transform: none;\n  letter-spacing: normal;\n  word-break: normal;\n  word-spacing: normal;\n  white-space: normal;\n  line-break: auto;\n  font-size: 0.875rem;\n  word-wrap: break-word;\n  opacity: 0;\n}\n\n.tooltip.show {\n  opacity: 0.9;\n}\n\n.tooltip .tooltip-arrow {\n  position: absolute;\n  display: block;\n  width: 0.8rem;\n  height: 0.4rem;\n}\n\n.tooltip .tooltip-arrow::before {\n  position: absolute;\n  content: \"\";\n  border-color: transparent;\n  border-style: solid;\n}\n\n.bs-tooltip-top, .bs-tooltip-auto[data-popper-placement^=\"top\"] {\n  padding: 0.4rem 0;\n}\n\n.bs-tooltip-top .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=\"top\"] .tooltip-arrow {\n  bottom: 0;\n}\n\n.bs-tooltip-top .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=\"top\"] .tooltip-arrow::before {\n  top: -1px;\n  border-width: 0.4rem 0.4rem 0;\n  border-top-color: #000;\n}\n\n.bs-tooltip-end, .bs-tooltip-auto[data-popper-placement^=\"right\"] {\n  padding: 0 0.4rem;\n}\n\n.bs-tooltip-end .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=\"right\"] .tooltip-arrow {\n  left: 0;\n  width: 0.4rem;\n  height: 0.8rem;\n}\n\n.bs-tooltip-end .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=\"right\"] .tooltip-arrow::before {\n  right: -1px;\n  border-width: 0.4rem 0.4rem 0.4rem 0;\n  border-right-color: #000;\n}\n\n.bs-tooltip-bottom, .bs-tooltip-auto[data-popper-placement^=\"bottom\"] {\n  padding: 0.4rem 0;\n}\n\n.bs-tooltip-bottom .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=\"bottom\"] .tooltip-arrow {\n  top: 0;\n}\n\n.bs-tooltip-bottom .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=\"bottom\"] .tooltip-arrow::before {\n  bottom: -1px;\n  border-width: 0 0.4rem 0.4rem;\n  border-bottom-color: #000;\n}\n\n.bs-tooltip-start, .bs-tooltip-auto[data-popper-placement^=\"left\"] {\n  padding: 0 0.4rem;\n}\n\n.bs-tooltip-start .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=\"left\"] .tooltip-arrow {\n  right: 0;\n  width: 0.4rem;\n  height: 0.8rem;\n}\n\n.bs-tooltip-start .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=\"left\"] .tooltip-arrow::before {\n  left: -1px;\n  border-width: 0.4rem 0 0.4rem 0.4rem;\n  border-left-color: #000;\n}\n\n.tooltip-inner {\n  max-width: 200px;\n  padding: 0.25rem 0.5rem;\n  color: #fff;\n  text-align: center;\n  background-color: #000;\n  border-radius: 0.25rem;\n}\n\n.popover {\n  position: absolute;\n  top: 0;\n  left: 0 /* rtl:ignore */;\n  z-index: 1070;\n  display: block;\n  max-width: 276px;\n  font-family: var(--bs-font-sans-serif);\n  font-style: normal;\n  font-weight: 400;\n  line-height: 1.5;\n  text-align: left;\n  text-align: start;\n  text-decoration: none;\n  text-shadow: none;\n  text-transform: none;\n  letter-spacing: normal;\n  word-break: normal;\n  word-spacing: normal;\n  white-space: normal;\n  line-break: auto;\n  font-size: 0.875rem;\n  word-wrap: break-word;\n  background-color: #fff;\n  background-clip: padding-box;\n  border: 1px solid rgba(0, 0, 0, 0.2);\n  border-radius: 0.3rem;\n}\n\n.popover .popover-arrow {\n  position: absolute;\n  display: block;\n  width: 1rem;\n  height: 0.5rem;\n}\n\n.popover .popover-arrow::before, .popover .popover-arrow::after {\n  position: absolute;\n  display: block;\n  content: \"\";\n  border-color: transparent;\n  border-style: solid;\n}\n\n.bs-popover-top > .popover-arrow, .bs-popover-auto[data-popper-placement^=\"top\"] > .popover-arrow {\n  bottom: calc(-0.5rem - 1px);\n}\n\n.bs-popover-top > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=\"top\"] > .popover-arrow::before {\n  bottom: 0;\n  border-width: 0.5rem 0.5rem 0;\n  border-top-color: rgba(0, 0, 0, 0.25);\n}\n\n.bs-popover-top > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=\"top\"] > .popover-arrow::after {\n  bottom: 1px;\n  border-width: 0.5rem 0.5rem 0;\n  border-top-color: #fff;\n}\n\n.bs-popover-end > .popover-arrow, .bs-popover-auto[data-popper-placement^=\"right\"] > .popover-arrow {\n  left: calc(-0.5rem - 1px);\n  width: 0.5rem;\n  height: 1rem;\n}\n\n.bs-popover-end > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=\"right\"] > .popover-arrow::before {\n  left: 0;\n  border-width: 0.5rem 0.5rem 0.5rem 0;\n  border-right-color: rgba(0, 0, 0, 0.25);\n}\n\n.bs-popover-end > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=\"right\"] > .popover-arrow::after {\n  left: 1px;\n  border-width: 0.5rem 0.5rem 0.5rem 0;\n  border-right-color: #fff;\n}\n\n.bs-popover-bottom > .popover-arrow, .bs-popover-auto[data-popper-placement^=\"bottom\"] > .popover-arrow {\n  top: calc(-0.5rem - 1px);\n}\n\n.bs-popover-bottom > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=\"bottom\"] > .popover-arrow::before {\n  top: 0;\n  border-width: 0 0.5rem 0.5rem 0.5rem;\n  border-bottom-color: rgba(0, 0, 0, 0.25);\n}\n\n.bs-popover-bottom > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=\"bottom\"] > .popover-arrow::after {\n  top: 1px;\n  border-width: 0 0.5rem 0.5rem 0.5rem;\n  border-bottom-color: #fff;\n}\n\n.bs-popover-bottom .popover-header::before, .bs-popover-auto[data-popper-placement^=\"bottom\"] .popover-header::before {\n  position: absolute;\n  top: 0;\n  left: 50%;\n  display: block;\n  width: 1rem;\n  margin-left: -0.5rem;\n  content: \"\";\n  border-bottom: 1px solid #f0f0f0;\n}\n\n.bs-popover-start > .popover-arrow, .bs-popover-auto[data-popper-placement^=\"left\"] > .popover-arrow {\n  right: calc(-0.5rem - 1px);\n  width: 0.5rem;\n  height: 1rem;\n}\n\n.bs-popover-start > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=\"left\"] > .popover-arrow::before {\n  right: 0;\n  border-width: 0.5rem 0 0.5rem 0.5rem;\n  border-left-color: rgba(0, 0, 0, 0.25);\n}\n\n.bs-popover-start > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=\"left\"] > .popover-arrow::after {\n  right: 1px;\n  border-width: 0.5rem 0 0.5rem 0.5rem;\n  border-left-color: #fff;\n}\n\n.popover-header {\n  padding: 0.5rem 1rem;\n  margin-bottom: 0;\n  font-size: 1rem;\n  color: #2d2d2d;\n  background-color: #f0f0f0;\n  border-bottom: 1px solid rgba(0, 0, 0, 0.2);\n  border-top-left-radius: calc(0.3rem - 1px);\n  border-top-right-radius: calc(0.3rem - 1px);\n}\n\n.popover-header:empty {\n  display: none;\n}\n\n.popover-body {\n  padding: 1rem 1rem;\n  color: #777;\n}\n\n.carousel {\n  position: relative;\n}\n\n.carousel.pointer-event {\n  -ms-touch-action: pan-y;\n  touch-action: pan-y;\n}\n\n.carousel-inner {\n  position: relative;\n  width: 100%;\n  overflow: hidden;\n}\n\n.carousel-inner::after {\n  display: block;\n  clear: both;\n  content: \"\";\n}\n\n.carousel-item {\n  position: relative;\n  display: none;\n  float: left;\n  width: 100%;\n  margin-right: -100%;\n  -webkit-backface-visibility: hidden;\n  backface-visibility: hidden;\n  transition: -webkit-transform 0.6s ease-in-out;\n  transition: transform 0.6s ease-in-out;\n  transition: transform 0.6s ease-in-out, -webkit-transform 0.6s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .carousel-item {\n    transition: none;\n  }\n}\n\n.carousel-item.active,\n.carousel-item-next,\n.carousel-item-prev {\n  display: block;\n}\n\n/* rtl:begin:ignore */\n.carousel-item-next:not(.carousel-item-start),\n.active.carousel-item-end {\n  -webkit-transform: translateX(100%);\n  transform: translateX(100%);\n}\n\n.carousel-item-prev:not(.carousel-item-end),\n.active.carousel-item-start {\n  -webkit-transform: translateX(-100%);\n  transform: translateX(-100%);\n}\n\n/* rtl:end:ignore */\n.carousel-fade .carousel-item {\n  opacity: 0;\n  transition-property: opacity;\n  -webkit-transform: none;\n  transform: none;\n}\n\n.carousel-fade .carousel-item.active,\n.carousel-fade .carousel-item-next.carousel-item-start,\n.carousel-fade .carousel-item-prev.carousel-item-end {\n  z-index: 1;\n  opacity: 1;\n}\n\n.carousel-fade .active.carousel-item-start,\n.carousel-fade .active.carousel-item-end {\n  z-index: 0;\n  opacity: 0;\n  transition: opacity 0s 0.6s;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .carousel-fade .active.carousel-item-start,\n  .carousel-fade .active.carousel-item-end {\n    transition: none;\n  }\n}\n\n.carousel-control-prev,\n.carousel-control-next {\n  position: absolute;\n  top: 0;\n  bottom: 0;\n  z-index: 1;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-align: center;\n  align-items: center;\n  -ms-flex-pack: center;\n  justify-content: center;\n  width: 15%;\n  padding: 0;\n  color: #fff;\n  text-align: center;\n  background: none;\n  border: 0;\n  opacity: 0.5;\n  transition: opacity 0.15s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .carousel-control-prev,\n  .carousel-control-next {\n    transition: none;\n  }\n}\n\n.carousel-control-prev:hover, .carousel-control-prev:focus,\n.carousel-control-next:hover,\n.carousel-control-next:focus {\n  color: #fff;\n  text-decoration: none;\n  outline: 0;\n  opacity: 0.9;\n}\n\n.carousel-control-prev {\n  left: 0;\n}\n\n.carousel-control-next {\n  right: 0;\n}\n\n.carousel-control-prev-icon,\n.carousel-control-next-icon {\n  display: inline-block;\n  width: 2rem;\n  height: 2rem;\n  background-repeat: no-repeat;\n  background-position: 50%;\n  background-size: 100% 100%;\n}\n\n/* rtl:options: {\n  \"autoRename\": true,\n  \"stringMap\":[ {\n    \"name\"    : \"prev-next\",\n    \"search\"  : \"prev\",\n    \"replace\" : \"next\"\n  } ]\n} */\n.carousel-control-prev-icon {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0z'/%3e%3c/svg%3e\");\n}\n\n.carousel-control-next-icon {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e\");\n}\n\n.carousel-indicators {\n  position: absolute;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 2;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-pack: center;\n  justify-content: center;\n  padding: 0;\n  margin-right: 15%;\n  margin-bottom: 1rem;\n  margin-left: 15%;\n  list-style: none;\n}\n\n.carousel-indicators [data-bs-target] {\n  box-sizing: content-box;\n  -ms-flex: 0 1 auto;\n  flex: 0 1 auto;\n  width: 30px;\n  height: 3px;\n  padding: 0;\n  margin-right: 3px;\n  margin-left: 3px;\n  text-indent: -999px;\n  cursor: pointer;\n  background-color: #fff;\n  background-clip: padding-box;\n  border: 0;\n  border-top: 10px solid transparent;\n  border-bottom: 10px solid transparent;\n  opacity: 0.5;\n  transition: opacity 0.6s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .carousel-indicators [data-bs-target] {\n    transition: none;\n  }\n}\n\n.carousel-indicators .active {\n  opacity: 1;\n}\n\n.carousel-caption {\n  position: absolute;\n  right: 15%;\n  bottom: 1.25rem;\n  left: 15%;\n  padding-top: 1.25rem;\n  padding-bottom: 1.25rem;\n  color: #fff;\n  text-align: center;\n}\n\n.carousel-dark .carousel-control-prev-icon,\n.carousel-dark .carousel-control-next-icon {\n  -webkit-filter: invert(1) grayscale(100);\n  filter: invert(1) grayscale(100);\n}\n\n.carousel-dark .carousel-indicators [data-bs-target] {\n  background-color: #000;\n}\n\n.carousel-dark .carousel-caption {\n  color: #000;\n}\n\n@-webkit-keyframes spinner-border {\n  to {\n    -webkit-transform: rotate(360deg) /* rtl:ignore */;\n    transform: rotate(360deg) /* rtl:ignore */;\n  }\n}\n\n@keyframes spinner-border {\n  to {\n    -webkit-transform: rotate(360deg) /* rtl:ignore */;\n    transform: rotate(360deg) /* rtl:ignore */;\n  }\n}\n\n.spinner-border {\n  display: inline-block;\n  width: 2rem;\n  height: 2rem;\n  vertical-align: -0.125em;\n  border: 0.25em solid currentColor;\n  border-right-color: transparent;\n  border-radius: 50%;\n  -webkit-animation: 0.75s linear infinite spinner-border;\n  animation: 0.75s linear infinite spinner-border;\n}\n\n.spinner-border-sm {\n  width: 1rem;\n  height: 1rem;\n  border-width: 0.2em;\n}\n\n@-webkit-keyframes spinner-grow {\n  0% {\n    -webkit-transform: scale(0);\n    transform: scale(0);\n  }\n  50% {\n    opacity: 1;\n    -webkit-transform: none;\n    transform: none;\n  }\n}\n\n@keyframes spinner-grow {\n  0% {\n    -webkit-transform: scale(0);\n    transform: scale(0);\n  }\n  50% {\n    opacity: 1;\n    -webkit-transform: none;\n    transform: none;\n  }\n}\n\n.spinner-grow {\n  display: inline-block;\n  width: 2rem;\n  height: 2rem;\n  vertical-align: -0.125em;\n  background-color: currentColor;\n  border-radius: 50%;\n  opacity: 0;\n  -webkit-animation: 0.75s linear infinite spinner-grow;\n  animation: 0.75s linear infinite spinner-grow;\n}\n\n.spinner-grow-sm {\n  width: 1rem;\n  height: 1rem;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .spinner-border,\n  .spinner-grow {\n    -webkit-animation-duration: 1.5s;\n    animation-duration: 1.5s;\n  }\n}\n\n.offcanvas {\n  position: fixed;\n  bottom: 0;\n  z-index: 1045;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  max-width: 100%;\n  visibility: hidden;\n  background-color: #fff;\n  background-clip: padding-box;\n  outline: 0;\n  transition: -webkit-transform 0.3s ease-in-out;\n  transition: transform 0.3s ease-in-out;\n  transition: transform 0.3s ease-in-out, -webkit-transform 0.3s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .offcanvas {\n    transition: none;\n  }\n}\n\n.offcanvas-backdrop {\n  position: fixed;\n  top: 0;\n  left: 0;\n  z-index: 1040;\n  width: 100vw;\n  height: 100vh;\n  background-color: #000;\n}\n\n.offcanvas-backdrop.fade {\n  opacity: 0;\n}\n\n.offcanvas-backdrop.show {\n  opacity: 0.5;\n}\n\n.offcanvas-header {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-align: center;\n  align-items: center;\n  -ms-flex-pack: justify;\n  justify-content: space-between;\n  padding: 1rem 1rem;\n}\n\n.offcanvas-header .btn-close {\n  padding: 0.5rem 0.5rem;\n  margin-top: -0.5rem;\n  margin-right: -0.5rem;\n  margin-bottom: -0.5rem;\n}\n\n.offcanvas-title {\n  margin-bottom: 0;\n  line-height: 1.5;\n}\n\n.offcanvas-body {\n  -ms-flex-positive: 1;\n  flex-grow: 1;\n  padding: 1rem 1rem;\n  overflow-y: auto;\n}\n\n.offcanvas-start {\n  top: 0;\n  left: 0;\n  width: 400px;\n  border-right: 1px solid rgba(0, 0, 0, 0.2);\n  -webkit-transform: translateX(-100%);\n  transform: translateX(-100%);\n}\n\n.offcanvas-end {\n  top: 0;\n  right: 0;\n  width: 400px;\n  border-left: 1px solid rgba(0, 0, 0, 0.2);\n  -webkit-transform: translateX(100%);\n  transform: translateX(100%);\n}\n\n.offcanvas-top {\n  top: 0;\n  right: 0;\n  left: 0;\n  height: 30vh;\n  max-height: 100%;\n  border-bottom: 1px solid rgba(0, 0, 0, 0.2);\n  -webkit-transform: translateY(-100%);\n  transform: translateY(-100%);\n}\n\n.offcanvas-bottom {\n  right: 0;\n  left: 0;\n  height: 30vh;\n  max-height: 100%;\n  border-top: 1px solid rgba(0, 0, 0, 0.2);\n  -webkit-transform: translateY(100%);\n  transform: translateY(100%);\n}\n\n.offcanvas.show {\n  -webkit-transform: none;\n  transform: none;\n}\n\n.placeholder {\n  display: inline-block;\n  min-height: 1em;\n  vertical-align: middle;\n  cursor: wait;\n  background-color: currentColor;\n  opacity: 0.5;\n}\n\n.placeholder.btn::before {\n  display: inline-block;\n  content: \"\";\n}\n\n.placeholder-xs {\n  min-height: .6em;\n}\n\n.placeholder-sm {\n  min-height: .8em;\n}\n\n.placeholder-lg {\n  min-height: 1.2em;\n}\n\n.placeholder-glow .placeholder {\n  -webkit-animation: placeholder-glow 2s ease-in-out infinite;\n  animation: placeholder-glow 2s ease-in-out infinite;\n}\n\n@-webkit-keyframes placeholder-glow {\n  50% {\n    opacity: 0.2;\n  }\n}\n\n@keyframes placeholder-glow {\n  50% {\n    opacity: 0.2;\n  }\n}\n\n.placeholder-wave {\n  -webkit-mask-image: linear-gradient(130deg, #000 55%, rgba(0, 0, 0, 0.8) 75%, #000 95%);\n  mask-image: linear-gradient(130deg, #000 55%, rgba(0, 0, 0, 0.8) 75%, #000 95%);\n  -webkit-mask-size: 200% 100%;\n  mask-size: 200% 100%;\n  -webkit-animation: placeholder-wave 2s linear infinite;\n  animation: placeholder-wave 2s linear infinite;\n}\n\n@-webkit-keyframes placeholder-wave {\n  100% {\n    -webkit-mask-position: -200% 0%;\n    mask-position: -200% 0%;\n  }\n}\n\n@keyframes placeholder-wave {\n  100% {\n    -webkit-mask-position: -200% 0%;\n    mask-position: -200% 0%;\n  }\n}\n\n.clearfix::after {\n  display: block;\n  clear: both;\n  content: \"\";\n}\n\n.link-primary {\n  color: #446e9b;\n}\n\n.link-primary:hover, .link-primary:focus {\n  color: #36587c;\n}\n\n.link-secondary {\n  color: #999;\n}\n\n.link-secondary:hover, .link-secondary:focus {\n  color: #7a7a7a;\n}\n\n.link-success {\n  color: #3cb521;\n}\n\n.link-success:hover, .link-success:focus {\n  color: #30911a;\n}\n\n.link-info {\n  color: #3399f3;\n}\n\n.link-info:hover, .link-info:focus {\n  color: #297ac2;\n}\n\n.link-warning {\n  color: #d47500;\n}\n\n.link-warning:hover, .link-warning:focus {\n  color: #aa5e00;\n}\n\n.link-danger {\n  color: #cd0200;\n}\n\n.link-danger:hover, .link-danger:focus {\n  color: #a40200;\n}\n\n.link-light {\n  color: #eee;\n}\n\n.link-light:hover, .link-light:focus {\n  color: #f1f1f1;\n}\n\n.link-dark {\n  color: #333;\n}\n\n.link-dark:hover, .link-dark:focus {\n  color: #292929;\n}\n\n.ratio {\n  position: relative;\n  width: 100%;\n}\n\n.ratio::before {\n  display: block;\n  padding-top: var(--bs-aspect-ratio);\n  content: \"\";\n}\n\n.ratio > * {\n  position: absolute;\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n}\n\n.ratio-1x1 {\n  --bs-aspect-ratio: 100%;\n}\n\n.ratio-4x3 {\n  --bs-aspect-ratio: calc(3 / 4 * 100%);\n}\n\n.ratio-16x9 {\n  --bs-aspect-ratio: calc(9 / 16 * 100%);\n}\n\n.ratio-21x9 {\n  --bs-aspect-ratio: calc(9 / 21 * 100%);\n}\n\n.fixed-top {\n  position: fixed;\n  top: 0;\n  right: 0;\n  left: 0;\n  z-index: 1030;\n}\n\n.fixed-bottom {\n  position: fixed;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 1030;\n}\n\n.sticky-top {\n  position: -webkit-sticky;\n  position: sticky;\n  top: 0;\n  z-index: 1020;\n}\n\n@media (min-width: 576px) {\n  .sticky-sm-top {\n    position: -webkit-sticky;\n    position: sticky;\n    top: 0;\n    z-index: 1020;\n  }\n}\n\n@media (min-width: 768px) {\n  .sticky-md-top {\n    position: -webkit-sticky;\n    position: sticky;\n    top: 0;\n    z-index: 1020;\n  }\n}\n\n@media (min-width: 992px) {\n  .sticky-lg-top {\n    position: -webkit-sticky;\n    position: sticky;\n    top: 0;\n    z-index: 1020;\n  }\n}\n\n@media (min-width: 1200px) {\n  .sticky-xl-top {\n    position: -webkit-sticky;\n    position: sticky;\n    top: 0;\n    z-index: 1020;\n  }\n}\n\n@media (min-width: 1400px) {\n  .sticky-xxl-top {\n    position: -webkit-sticky;\n    position: sticky;\n    top: 0;\n    z-index: 1020;\n  }\n}\n\n.hstack {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-direction: row;\n  flex-direction: row;\n  -ms-flex-align: center;\n  align-items: center;\n  -ms-flex-item-align: stretch;\n  align-self: stretch;\n}\n\n.vstack {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex: 1 1 auto;\n  flex: 1 1 auto;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  -ms-flex-item-align: stretch;\n  align-self: stretch;\n}\n\n.visually-hidden,\n.visually-hidden-focusable:not(:focus):not(:focus-within) {\n  position: absolute !important;\n  width: 1px !important;\n  height: 1px !important;\n  padding: 0 !important;\n  margin: -1px !important;\n  overflow: hidden !important;\n  clip: rect(0, 0, 0, 0) !important;\n  white-space: nowrap !important;\n  border: 0 !important;\n}\n\n.stretched-link::after {\n  position: absolute;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 1;\n  content: \"\";\n}\n\n.text-truncate {\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n}\n\n.vr {\n  display: inline-block;\n  -ms-flex-item-align: stretch;\n  align-self: stretch;\n  width: 1px;\n  min-height: 1em;\n  background-color: currentColor;\n  opacity: 0.25;\n}\n\n.align-baseline {\n  vertical-align: baseline !important;\n}\n\n.align-top {\n  vertical-align: top !important;\n}\n\n.align-middle {\n  vertical-align: middle !important;\n}\n\n.align-bottom {\n  vertical-align: bottom !important;\n}\n\n.align-text-bottom {\n  vertical-align: text-bottom !important;\n}\n\n.align-text-top {\n  vertical-align: text-top !important;\n}\n\n.float-start {\n  float: left !important;\n}\n\n.float-end {\n  float: right !important;\n}\n\n.float-none {\n  float: none !important;\n}\n\n.opacity-0 {\n  opacity: 0 !important;\n}\n\n.opacity-25 {\n  opacity: 0.25 !important;\n}\n\n.opacity-50 {\n  opacity: 0.5 !important;\n}\n\n.opacity-75 {\n  opacity: 0.75 !important;\n}\n\n.opacity-100 {\n  opacity: 1 !important;\n}\n\n.overflow-auto {\n  overflow: auto !important;\n}\n\n.overflow-hidden {\n  overflow: hidden !important;\n}\n\n.overflow-visible {\n  overflow: visible !important;\n}\n\n.overflow-scroll {\n  overflow: scroll !important;\n}\n\n.d-inline {\n  display: inline !important;\n}\n\n.d-inline-block {\n  display: inline-block !important;\n}\n\n.d-block {\n  display: block !important;\n}\n\n.d-grid {\n  display: grid !important;\n}\n\n.d-table {\n  display: table !important;\n}\n\n.d-table-row {\n  display: table-row !important;\n}\n\n.d-table-cell {\n  display: table-cell !important;\n}\n\n.d-flex {\n  display: -ms-flexbox !important;\n  display: flex !important;\n}\n\n.d-inline-flex {\n  display: -ms-inline-flexbox !important;\n  display: inline-flex !important;\n}\n\n.d-none {\n  display: none !important;\n}\n\n.shadow {\n  box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15) !important;\n}\n\n.shadow-sm {\n  box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075) !important;\n}\n\n.shadow-lg {\n  box-shadow: 0 1rem 3rem rgba(0, 0, 0, 0.175) !important;\n}\n\n.shadow-none {\n  box-shadow: none !important;\n}\n\n.position-static {\n  position: static !important;\n}\n\n.position-relative {\n  position: relative !important;\n}\n\n.position-absolute {\n  position: absolute !important;\n}\n\n.position-fixed {\n  position: fixed !important;\n}\n\n.position-sticky {\n  position: -webkit-sticky !important;\n  position: sticky !important;\n}\n\n.top-0 {\n  top: 0 !important;\n}\n\n.top-50 {\n  top: 50% !important;\n}\n\n.top-100 {\n  top: 100% !important;\n}\n\n.bottom-0 {\n  bottom: 0 !important;\n}\n\n.bottom-50 {\n  bottom: 50% !important;\n}\n\n.bottom-100 {\n  bottom: 100% !important;\n}\n\n.start-0 {\n  left: 0 !important;\n}\n\n.start-50 {\n  left: 50% !important;\n}\n\n.start-100 {\n  left: 100% !important;\n}\n\n.end-0 {\n  right: 0 !important;\n}\n\n.end-50 {\n  right: 50% !important;\n}\n\n.end-100 {\n  right: 100% !important;\n}\n\n.translate-middle {\n  -webkit-transform: translate(-50%, -50%) !important;\n  transform: translate(-50%, -50%) !important;\n}\n\n.translate-middle-x {\n  -webkit-transform: translateX(-50%) !important;\n  transform: translateX(-50%) !important;\n}\n\n.translate-middle-y {\n  -webkit-transform: translateY(-50%) !important;\n  transform: translateY(-50%) !important;\n}\n\n.border {\n  border: 1px solid #dee2e6 !important;\n}\n\n.border-0 {\n  border: 0 !important;\n}\n\n.border-top {\n  border-top: 1px solid #dee2e6 !important;\n}\n\n.border-top-0 {\n  border-top: 0 !important;\n}\n\n.border-end {\n  border-right: 1px solid #dee2e6 !important;\n}\n\n.border-end-0 {\n  border-right: 0 !important;\n}\n\n.border-bottom {\n  border-bottom: 1px solid #dee2e6 !important;\n}\n\n.border-bottom-0 {\n  border-bottom: 0 !important;\n}\n\n.border-start {\n  border-left: 1px solid #dee2e6 !important;\n}\n\n.border-start-0 {\n  border-left: 0 !important;\n}\n\n.border-primary {\n  border-color: #446e9b !important;\n}\n\n.border-secondary {\n  border-color: #999 !important;\n}\n\n.border-success {\n  border-color: #3cb521 !important;\n}\n\n.border-info {\n  border-color: #3399f3 !important;\n}\n\n.border-warning {\n  border-color: #d47500 !important;\n}\n\n.border-danger {\n  border-color: #cd0200 !important;\n}\n\n.border-light {\n  border-color: #eee !important;\n}\n\n.border-dark {\n  border-color: #333 !important;\n}\n\n.border-white {\n  border-color: #fff !important;\n}\n\n.border-1 {\n  border-width: 1px !important;\n}\n\n.border-2 {\n  border-width: 2px !important;\n}\n\n.border-3 {\n  border-width: 3px !important;\n}\n\n.border-4 {\n  border-width: 4px !important;\n}\n\n.border-5 {\n  border-width: 5px !important;\n}\n\n.w-25 {\n  width: 25% !important;\n}\n\n.w-50 {\n  width: 50% !important;\n}\n\n.w-75 {\n  width: 75% !important;\n}\n\n.w-100 {\n  width: 100% !important;\n}\n\n.w-auto {\n  width: auto !important;\n}\n\n.mw-100 {\n  max-width: 100% !important;\n}\n\n.vw-100 {\n  width: 100vw !important;\n}\n\n.min-vw-100 {\n  min-width: 100vw !important;\n}\n\n.h-25 {\n  height: 25% !important;\n}\n\n.h-50 {\n  height: 50% !important;\n}\n\n.h-75 {\n  height: 75% !important;\n}\n\n.h-100 {\n  height: 100% !important;\n}\n\n.h-auto {\n  height: auto !important;\n}\n\n.mh-100 {\n  max-height: 100% !important;\n}\n\n.vh-100 {\n  height: 100vh !important;\n}\n\n.min-vh-100 {\n  min-height: 100vh !important;\n}\n\n.flex-fill {\n  -ms-flex: 1 1 auto !important;\n  flex: 1 1 auto !important;\n}\n\n.flex-row {\n  -ms-flex-direction: row !important;\n  flex-direction: row !important;\n}\n\n.flex-column {\n  -ms-flex-direction: column !important;\n  flex-direction: column !important;\n}\n\n.flex-row-reverse {\n  -ms-flex-direction: row-reverse !important;\n  flex-direction: row-reverse !important;\n}\n\n.flex-column-reverse {\n  -ms-flex-direction: column-reverse !important;\n  flex-direction: column-reverse !important;\n}\n\n.flex-grow-0 {\n  -ms-flex-positive: 0 !important;\n  flex-grow: 0 !important;\n}\n\n.flex-grow-1 {\n  -ms-flex-positive: 1 !important;\n  flex-grow: 1 !important;\n}\n\n.flex-shrink-0 {\n  -ms-flex-negative: 0 !important;\n  flex-shrink: 0 !important;\n}\n\n.flex-shrink-1 {\n  -ms-flex-negative: 1 !important;\n  flex-shrink: 1 !important;\n}\n\n.flex-wrap {\n  -ms-flex-wrap: wrap !important;\n  flex-wrap: wrap !important;\n}\n\n.flex-nowrap {\n  -ms-flex-wrap: nowrap !important;\n  flex-wrap: nowrap !important;\n}\n\n.flex-wrap-reverse {\n  -ms-flex-wrap: wrap-reverse !important;\n  flex-wrap: wrap-reverse !important;\n}\n\n.gap-0 {\n  gap: 0 !important;\n}\n\n.gap-1 {\n  gap: 0.25rem !important;\n}\n\n.gap-2 {\n  gap: 0.5rem !important;\n}\n\n.gap-3 {\n  gap: 1rem !important;\n}\n\n.gap-4 {\n  gap: 1.5rem !important;\n}\n\n.gap-5 {\n  gap: 3rem !important;\n}\n\n.justify-content-start {\n  -ms-flex-pack: start !important;\n  justify-content: flex-start !important;\n}\n\n.justify-content-end {\n  -ms-flex-pack: end !important;\n  justify-content: flex-end !important;\n}\n\n.justify-content-center {\n  -ms-flex-pack: center !important;\n  justify-content: center !important;\n}\n\n.justify-content-between {\n  -ms-flex-pack: justify !important;\n  justify-content: space-between !important;\n}\n\n.justify-content-around {\n  -ms-flex-pack: distribute !important;\n  justify-content: space-around !important;\n}\n\n.justify-content-evenly {\n  -ms-flex-pack: space-evenly !important;\n  justify-content: space-evenly !important;\n}\n\n.align-items-start {\n  -ms-flex-align: start !important;\n  align-items: flex-start !important;\n}\n\n.align-items-end {\n  -ms-flex-align: end !important;\n  align-items: flex-end !important;\n}\n\n.align-items-center {\n  -ms-flex-align: center !important;\n  align-items: center !important;\n}\n\n.align-items-baseline {\n  -ms-flex-align: baseline !important;\n  align-items: baseline !important;\n}\n\n.align-items-stretch {\n  -ms-flex-align: stretch !important;\n  align-items: stretch !important;\n}\n\n.align-content-start {\n  -ms-flex-line-pack: start !important;\n  align-content: flex-start !important;\n}\n\n.align-content-end {\n  -ms-flex-line-pack: end !important;\n  align-content: flex-end !important;\n}\n\n.align-content-center {\n  -ms-flex-line-pack: center !important;\n  align-content: center !important;\n}\n\n.align-content-between {\n  -ms-flex-line-pack: justify !important;\n  align-content: space-between !important;\n}\n\n.align-content-around {\n  -ms-flex-line-pack: distribute !important;\n  align-content: space-around !important;\n}\n\n.align-content-stretch {\n  -ms-flex-line-pack: stretch !important;\n  align-content: stretch !important;\n}\n\n.align-self-auto {\n  -ms-flex-item-align: auto !important;\n  align-self: auto !important;\n}\n\n.align-self-start {\n  -ms-flex-item-align: start !important;\n  align-self: flex-start !important;\n}\n\n.align-self-end {\n  -ms-flex-item-align: end !important;\n  align-self: flex-end !important;\n}\n\n.align-self-center {\n  -ms-flex-item-align: center !important;\n  align-self: center !important;\n}\n\n.align-self-baseline {\n  -ms-flex-item-align: baseline !important;\n  align-self: baseline !important;\n}\n\n.align-self-stretch {\n  -ms-flex-item-align: stretch !important;\n  align-self: stretch !important;\n}\n\n.order-first {\n  -ms-flex-order: -1 !important;\n  order: -1 !important;\n}\n\n.order-0 {\n  -ms-flex-order: 0 !important;\n  order: 0 !important;\n}\n\n.order-1 {\n  -ms-flex-order: 1 !important;\n  order: 1 !important;\n}\n\n.order-2 {\n  -ms-flex-order: 2 !important;\n  order: 2 !important;\n}\n\n.order-3 {\n  -ms-flex-order: 3 !important;\n  order: 3 !important;\n}\n\n.order-4 {\n  -ms-flex-order: 4 !important;\n  order: 4 !important;\n}\n\n.order-5 {\n  -ms-flex-order: 5 !important;\n  order: 5 !important;\n}\n\n.order-last {\n  -ms-flex-order: 6 !important;\n  order: 6 !important;\n}\n\n.m-0 {\n  margin: 0 !important;\n}\n\n.m-1 {\n  margin: 0.25rem !important;\n}\n\n.m-2 {\n  margin: 0.5rem !important;\n}\n\n.m-3 {\n  margin: 1rem !important;\n}\n\n.m-4 {\n  margin: 1.5rem !important;\n}\n\n.m-5 {\n  margin: 3rem !important;\n}\n\n.m-auto {\n  margin: auto !important;\n}\n\n.mx-0 {\n  margin-right: 0 !important;\n  margin-left: 0 !important;\n}\n\n.mx-1 {\n  margin-right: 0.25rem !important;\n  margin-left: 0.25rem !important;\n}\n\n.mx-2 {\n  margin-right: 0.5rem !important;\n  margin-left: 0.5rem !important;\n}\n\n.mx-3 {\n  margin-right: 1rem !important;\n  margin-left: 1rem !important;\n}\n\n.mx-4 {\n  margin-right: 1.5rem !important;\n  margin-left: 1.5rem !important;\n}\n\n.mx-5 {\n  margin-right: 3rem !important;\n  margin-left: 3rem !important;\n}\n\n.mx-auto {\n  margin-right: auto !important;\n  margin-left: auto !important;\n}\n\n.my-0 {\n  margin-top: 0 !important;\n  margin-bottom: 0 !important;\n}\n\n.my-1 {\n  margin-top: 0.25rem !important;\n  margin-bottom: 0.25rem !important;\n}\n\n.my-2 {\n  margin-top: 0.5rem !important;\n  margin-bottom: 0.5rem !important;\n}\n\n.my-3 {\n  margin-top: 1rem !important;\n  margin-bottom: 1rem !important;\n}\n\n.my-4 {\n  margin-top: 1.5rem !important;\n  margin-bottom: 1.5rem !important;\n}\n\n.my-5 {\n  margin-top: 3rem !important;\n  margin-bottom: 3rem !important;\n}\n\n.my-auto {\n  margin-top: auto !important;\n  margin-bottom: auto !important;\n}\n\n.mt-0 {\n  margin-top: 0 !important;\n}\n\n.mt-1 {\n  margin-top: 0.25rem !important;\n}\n\n.mt-2 {\n  margin-top: 0.5rem !important;\n}\n\n.mt-3 {\n  margin-top: 1rem !important;\n}\n\n.mt-4 {\n  margin-top: 1.5rem !important;\n}\n\n.mt-5 {\n  margin-top: 3rem !important;\n}\n\n.mt-auto {\n  margin-top: auto !important;\n}\n\n.me-0 {\n  margin-right: 0 !important;\n}\n\n.me-1 {\n  margin-right: 0.25rem !important;\n}\n\n.me-2 {\n  margin-right: 0.5rem !important;\n}\n\n.me-3 {\n  margin-right: 1rem !important;\n}\n\n.me-4 {\n  margin-right: 1.5rem !important;\n}\n\n.me-5 {\n  margin-right: 3rem !important;\n}\n\n.me-auto {\n  margin-right: auto !important;\n}\n\n.mb-0 {\n  margin-bottom: 0 !important;\n}\n\n.mb-1 {\n  margin-bottom: 0.25rem !important;\n}\n\n.mb-2 {\n  margin-bottom: 0.5rem !important;\n}\n\n.mb-3 {\n  margin-bottom: 1rem !important;\n}\n\n.mb-4 {\n  margin-bottom: 1.5rem !important;\n}\n\n.mb-5 {\n  margin-bottom: 3rem !important;\n}\n\n.mb-auto {\n  margin-bottom: auto !important;\n}\n\n.ms-0 {\n  margin-left: 0 !important;\n}\n\n.ms-1 {\n  margin-left: 0.25rem !important;\n}\n\n.ms-2 {\n  margin-left: 0.5rem !important;\n}\n\n.ms-3 {\n  margin-left: 1rem !important;\n}\n\n.ms-4 {\n  margin-left: 1.5rem !important;\n}\n\n.ms-5 {\n  margin-left: 3rem !important;\n}\n\n.ms-auto {\n  margin-left: auto !important;\n}\n\n.p-0 {\n  padding: 0 !important;\n}\n\n.p-1 {\n  padding: 0.25rem !important;\n}\n\n.p-2 {\n  padding: 0.5rem !important;\n}\n\n.p-3 {\n  padding: 1rem !important;\n}\n\n.p-4 {\n  padding: 1.5rem !important;\n}\n\n.p-5 {\n  padding: 3rem !important;\n}\n\n.px-0 {\n  padding-right: 0 !important;\n  padding-left: 0 !important;\n}\n\n.px-1 {\n  padding-right: 0.25rem !important;\n  padding-left: 0.25rem !important;\n}\n\n.px-2 {\n  padding-right: 0.5rem !important;\n  padding-left: 0.5rem !important;\n}\n\n.px-3 {\n  padding-right: 1rem !important;\n  padding-left: 1rem !important;\n}\n\n.px-4 {\n  padding-right: 1.5rem !important;\n  padding-left: 1.5rem !important;\n}\n\n.px-5 {\n  padding-right: 3rem !important;\n  padding-left: 3rem !important;\n}\n\n.py-0 {\n  padding-top: 0 !important;\n  padding-bottom: 0 !important;\n}\n\n.py-1 {\n  padding-top: 0.25rem !important;\n  padding-bottom: 0.25rem !important;\n}\n\n.py-2 {\n  padding-top: 0.5rem !important;\n  padding-bottom: 0.5rem !important;\n}\n\n.py-3 {\n  padding-top: 1rem !important;\n  padding-bottom: 1rem !important;\n}\n\n.py-4 {\n  padding-top: 1.5rem !important;\n  padding-bottom: 1.5rem !important;\n}\n\n.py-5 {\n  padding-top: 3rem !important;\n  padding-bottom: 3rem !important;\n}\n\n.pt-0 {\n  padding-top: 0 !important;\n}\n\n.pt-1 {\n  padding-top: 0.25rem !important;\n}\n\n.pt-2 {\n  padding-top: 0.5rem !important;\n}\n\n.pt-3 {\n  padding-top: 1rem !important;\n}\n\n.pt-4 {\n  padding-top: 1.5rem !important;\n}\n\n.pt-5 {\n  padding-top: 3rem !important;\n}\n\n.pe-0 {\n  padding-right: 0 !important;\n}\n\n.pe-1 {\n  padding-right: 0.25rem !important;\n}\n\n.pe-2 {\n  padding-right: 0.5rem !important;\n}\n\n.pe-3 {\n  padding-right: 1rem !important;\n}\n\n.pe-4 {\n  padding-right: 1.5rem !important;\n}\n\n.pe-5 {\n  padding-right: 3rem !important;\n}\n\n.pb-0 {\n  padding-bottom: 0 !important;\n}\n\n.pb-1 {\n  padding-bottom: 0.25rem !important;\n}\n\n.pb-2 {\n  padding-bottom: 0.5rem !important;\n}\n\n.pb-3 {\n  padding-bottom: 1rem !important;\n}\n\n.pb-4 {\n  padding-bottom: 1.5rem !important;\n}\n\n.pb-5 {\n  padding-bottom: 3rem !important;\n}\n\n.ps-0 {\n  padding-left: 0 !important;\n}\n\n.ps-1 {\n  padding-left: 0.25rem !important;\n}\n\n.ps-2 {\n  padding-left: 0.5rem !important;\n}\n\n.ps-3 {\n  padding-left: 1rem !important;\n}\n\n.ps-4 {\n  padding-left: 1.5rem !important;\n}\n\n.ps-5 {\n  padding-left: 3rem !important;\n}\n\n.font-monospace {\n  font-family: var(--bs-font-monospace) !important;\n}\n\n.fs-1 {\n  font-size: calc(1.375rem + 1.5vw) !important;\n}\n\n.fs-2 {\n  font-size: calc(1.325rem + 0.9vw) !important;\n}\n\n.fs-3 {\n  font-size: calc(1.3rem + 0.6vw) !important;\n}\n\n.fs-4 {\n  font-size: calc(1.275rem + 0.3vw) !important;\n}\n\n.fs-5 {\n  font-size: 1.25rem !important;\n}\n\n.fs-6 {\n  font-size: 1rem !important;\n}\n\n.fst-italic {\n  font-style: italic !important;\n}\n\n.fst-normal {\n  font-style: normal !important;\n}\n\n.fw-light {\n  font-weight: 300 !important;\n}\n\n.fw-lighter {\n  font-weight: lighter !important;\n}\n\n.fw-normal {\n  font-weight: 400 !important;\n}\n\n.fw-bold {\n  font-weight: 700 !important;\n}\n\n.fw-bolder {\n  font-weight: bolder !important;\n}\n\n.lh-1 {\n  line-height: 1 !important;\n}\n\n.lh-sm {\n  line-height: 1.25 !important;\n}\n\n.lh-base {\n  line-height: 1.5 !important;\n}\n\n.lh-lg {\n  line-height: 2 !important;\n}\n\n.text-start {\n  text-align: left !important;\n}\n\n.text-end {\n  text-align: right !important;\n}\n\n.text-center {\n  text-align: center !important;\n}\n\n.text-decoration-none {\n  text-decoration: none !important;\n}\n\n.text-decoration-underline {\n  text-decoration: underline !important;\n}\n\n.text-decoration-line-through {\n  text-decoration: line-through !important;\n}\n\n.text-lowercase {\n  text-transform: lowercase !important;\n}\n\n.text-uppercase {\n  text-transform: uppercase !important;\n}\n\n.text-capitalize {\n  text-transform: capitalize !important;\n}\n\n.text-wrap {\n  white-space: normal !important;\n}\n\n.text-nowrap {\n  white-space: nowrap !important;\n}\n\n/* rtl:begin:remove */\n.text-break {\n  word-wrap: break-word !important;\n  word-break: break-word !important;\n}\n\n/* rtl:end:remove */\n.text-primary {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-primary-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-secondary {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-secondary-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-success {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-success-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-info {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-info-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-warning {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-warning-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-danger {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-danger-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-light {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-light-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-dark {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-dark-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-black {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-black-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-white {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-white-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-body {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-body-color-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-muted {\n  --bs-text-opacity: 1;\n  color: #777 !important;\n}\n\n.text-black-50 {\n  --bs-text-opacity: 1;\n  color: rgba(0, 0, 0, 0.5) !important;\n}\n\n.text-white-50 {\n  --bs-text-opacity: 1;\n  color: rgba(255, 255, 255, 0.5) !important;\n}\n\n.text-reset {\n  --bs-text-opacity: 1;\n  color: inherit !important;\n}\n\n.text-opacity-25 {\n  --bs-text-opacity: 0.25;\n}\n\n.text-opacity-50 {\n  --bs-text-opacity: 0.5;\n}\n\n.text-opacity-75 {\n  --bs-text-opacity: 0.75;\n}\n\n.text-opacity-100 {\n  --bs-text-opacity: 1;\n}\n\n.bg-primary {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-primary-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-secondary {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-secondary-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-success {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-success-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-info {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-info-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-warning {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-warning-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-danger {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-danger-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-light {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-light-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-dark {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-dark-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-black {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-black-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-white {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-white-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-body {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-body-bg-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-transparent {\n  --bs-bg-opacity: 1;\n  background-color: transparent !important;\n}\n\n.bg-opacity-10 {\n  --bs-bg-opacity: 0.1;\n}\n\n.bg-opacity-25 {\n  --bs-bg-opacity: 0.25;\n}\n\n.bg-opacity-50 {\n  --bs-bg-opacity: 0.5;\n}\n\n.bg-opacity-75 {\n  --bs-bg-opacity: 0.75;\n}\n\n.bg-opacity-100 {\n  --bs-bg-opacity: 1;\n}\n\n.bg-gradient {\n  background-image: var(--bs-gradient) !important;\n}\n\n.user-select-all {\n  -webkit-user-select: all !important;\n  -moz-user-select: all !important;\n  user-select: all !important;\n}\n\n.user-select-auto {\n  -webkit-user-select: auto !important;\n  -moz-user-select: auto !important;\n  -ms-user-select: auto !important;\n  user-select: auto !important;\n}\n\n.user-select-none {\n  -webkit-user-select: none !important;\n  -moz-user-select: none !important;\n  -ms-user-select: none !important;\n  user-select: none !important;\n}\n\n.pe-none {\n  pointer-events: none !important;\n}\n\n.pe-auto {\n  pointer-events: auto !important;\n}\n\n.rounded {\n  border-radius: 0.25rem !important;\n}\n\n.rounded-0 {\n  border-radius: 0 !important;\n}\n\n.rounded-1 {\n  border-radius: 0.2rem !important;\n}\n\n.rounded-2 {\n  border-radius: 0.25rem !important;\n}\n\n.rounded-3 {\n  border-radius: 0.3rem !important;\n}\n\n.rounded-circle {\n  border-radius: 50% !important;\n}\n\n.rounded-pill {\n  border-radius: 50rem !important;\n}\n\n.rounded-top {\n  border-top-left-radius: 0.25rem !important;\n  border-top-right-radius: 0.25rem !important;\n}\n\n.rounded-end {\n  border-top-right-radius: 0.25rem !important;\n  border-bottom-right-radius: 0.25rem !important;\n}\n\n.rounded-bottom {\n  border-bottom-right-radius: 0.25rem !important;\n  border-bottom-left-radius: 0.25rem !important;\n}\n\n.rounded-start {\n  border-bottom-left-radius: 0.25rem !important;\n  border-top-left-radius: 0.25rem !important;\n}\n\n.visible {\n  visibility: visible !important;\n}\n\n.invisible {\n  visibility: hidden !important;\n}\n\n@media (min-width: 576px) {\n  .float-sm-start {\n    float: left !important;\n  }\n  .float-sm-end {\n    float: right !important;\n  }\n  .float-sm-none {\n    float: none !important;\n  }\n  .d-sm-inline {\n    display: inline !important;\n  }\n  .d-sm-inline-block {\n    display: inline-block !important;\n  }\n  .d-sm-block {\n    display: block !important;\n  }\n  .d-sm-grid {\n    display: grid !important;\n  }\n  .d-sm-table {\n    display: table !important;\n  }\n  .d-sm-table-row {\n    display: table-row !important;\n  }\n  .d-sm-table-cell {\n    display: table-cell !important;\n  }\n  .d-sm-flex {\n    display: -ms-flexbox !important;\n    display: flex !important;\n  }\n  .d-sm-inline-flex {\n    display: -ms-inline-flexbox !important;\n    display: inline-flex !important;\n  }\n  .d-sm-none {\n    display: none !important;\n  }\n  .flex-sm-fill {\n    -ms-flex: 1 1 auto !important;\n    flex: 1 1 auto !important;\n  }\n  .flex-sm-row {\n    -ms-flex-direction: row !important;\n    flex-direction: row !important;\n  }\n  .flex-sm-column {\n    -ms-flex-direction: column !important;\n    flex-direction: column !important;\n  }\n  .flex-sm-row-reverse {\n    -ms-flex-direction: row-reverse !important;\n    flex-direction: row-reverse !important;\n  }\n  .flex-sm-column-reverse {\n    -ms-flex-direction: column-reverse !important;\n    flex-direction: column-reverse !important;\n  }\n  .flex-sm-grow-0 {\n    -ms-flex-positive: 0 !important;\n    flex-grow: 0 !important;\n  }\n  .flex-sm-grow-1 {\n    -ms-flex-positive: 1 !important;\n    flex-grow: 1 !important;\n  }\n  .flex-sm-shrink-0 {\n    -ms-flex-negative: 0 !important;\n    flex-shrink: 0 !important;\n  }\n  .flex-sm-shrink-1 {\n    -ms-flex-negative: 1 !important;\n    flex-shrink: 1 !important;\n  }\n  .flex-sm-wrap {\n    -ms-flex-wrap: wrap !important;\n    flex-wrap: wrap !important;\n  }\n  .flex-sm-nowrap {\n    -ms-flex-wrap: nowrap !important;\n    flex-wrap: nowrap !important;\n  }\n  .flex-sm-wrap-reverse {\n    -ms-flex-wrap: wrap-reverse !important;\n    flex-wrap: wrap-reverse !important;\n  }\n  .gap-sm-0 {\n    gap: 0 !important;\n  }\n  .gap-sm-1 {\n    gap: 0.25rem !important;\n  }\n  .gap-sm-2 {\n    gap: 0.5rem !important;\n  }\n  .gap-sm-3 {\n    gap: 1rem !important;\n  }\n  .gap-sm-4 {\n    gap: 1.5rem !important;\n  }\n  .gap-sm-5 {\n    gap: 3rem !important;\n  }\n  .justify-content-sm-start {\n    -ms-flex-pack: start !important;\n    justify-content: flex-start !important;\n  }\n  .justify-content-sm-end {\n    -ms-flex-pack: end !important;\n    justify-content: flex-end !important;\n  }\n  .justify-content-sm-center {\n    -ms-flex-pack: center !important;\n    justify-content: center !important;\n  }\n  .justify-content-sm-between {\n    -ms-flex-pack: justify !important;\n    justify-content: space-between !important;\n  }\n  .justify-content-sm-around {\n    -ms-flex-pack: distribute !important;\n    justify-content: space-around !important;\n  }\n  .justify-content-sm-evenly {\n    -ms-flex-pack: space-evenly !important;\n    justify-content: space-evenly !important;\n  }\n  .align-items-sm-start {\n    -ms-flex-align: start !important;\n    align-items: flex-start !important;\n  }\n  .align-items-sm-end {\n    -ms-flex-align: end !important;\n    align-items: flex-end !important;\n  }\n  .align-items-sm-center {\n    -ms-flex-align: center !important;\n    align-items: center !important;\n  }\n  .align-items-sm-baseline {\n    -ms-flex-align: baseline !important;\n    align-items: baseline !important;\n  }\n  .align-items-sm-stretch {\n    -ms-flex-align: stretch !important;\n    align-items: stretch !important;\n  }\n  .align-content-sm-start {\n    -ms-flex-line-pack: start !important;\n    align-content: flex-start !important;\n  }\n  .align-content-sm-end {\n    -ms-flex-line-pack: end !important;\n    align-content: flex-end !important;\n  }\n  .align-content-sm-center {\n    -ms-flex-line-pack: center !important;\n    align-content: center !important;\n  }\n  .align-content-sm-between {\n    -ms-flex-line-pack: justify !important;\n    align-content: space-between !important;\n  }\n  .align-content-sm-around {\n    -ms-flex-line-pack: distribute !important;\n    align-content: space-around !important;\n  }\n  .align-content-sm-stretch {\n    -ms-flex-line-pack: stretch !important;\n    align-content: stretch !important;\n  }\n  .align-self-sm-auto {\n    -ms-flex-item-align: auto !important;\n    align-self: auto !important;\n  }\n  .align-self-sm-start {\n    -ms-flex-item-align: start !important;\n    align-self: flex-start !important;\n  }\n  .align-self-sm-end {\n    -ms-flex-item-align: end !important;\n    align-self: flex-end !important;\n  }\n  .align-self-sm-center {\n    -ms-flex-item-align: center !important;\n    align-self: center !important;\n  }\n  .align-self-sm-baseline {\n    -ms-flex-item-align: baseline !important;\n    align-self: baseline !important;\n  }\n  .align-self-sm-stretch {\n    -ms-flex-item-align: stretch !important;\n    align-self: stretch !important;\n  }\n  .order-sm-first {\n    -ms-flex-order: -1 !important;\n    order: -1 !important;\n  }\n  .order-sm-0 {\n    -ms-flex-order: 0 !important;\n    order: 0 !important;\n  }\n  .order-sm-1 {\n    -ms-flex-order: 1 !important;\n    order: 1 !important;\n  }\n  .order-sm-2 {\n    -ms-flex-order: 2 !important;\n    order: 2 !important;\n  }\n  .order-sm-3 {\n    -ms-flex-order: 3 !important;\n    order: 3 !important;\n  }\n  .order-sm-4 {\n    -ms-flex-order: 4 !important;\n    order: 4 !important;\n  }\n  .order-sm-5 {\n    -ms-flex-order: 5 !important;\n    order: 5 !important;\n  }\n  .order-sm-last {\n    -ms-flex-order: 6 !important;\n    order: 6 !important;\n  }\n  .m-sm-0 {\n    margin: 0 !important;\n  }\n  .m-sm-1 {\n    margin: 0.25rem !important;\n  }\n  .m-sm-2 {\n    margin: 0.5rem !important;\n  }\n  .m-sm-3 {\n    margin: 1rem !important;\n  }\n  .m-sm-4 {\n    margin: 1.5rem !important;\n  }\n  .m-sm-5 {\n    margin: 3rem !important;\n  }\n  .m-sm-auto {\n    margin: auto !important;\n  }\n  .mx-sm-0 {\n    margin-right: 0 !important;\n    margin-left: 0 !important;\n  }\n  .mx-sm-1 {\n    margin-right: 0.25rem !important;\n    margin-left: 0.25rem !important;\n  }\n  .mx-sm-2 {\n    margin-right: 0.5rem !important;\n    margin-left: 0.5rem !important;\n  }\n  .mx-sm-3 {\n    margin-right: 1rem !important;\n    margin-left: 1rem !important;\n  }\n  .mx-sm-4 {\n    margin-right: 1.5rem !important;\n    margin-left: 1.5rem !important;\n  }\n  .mx-sm-5 {\n    margin-right: 3rem !important;\n    margin-left: 3rem !important;\n  }\n  .mx-sm-auto {\n    margin-right: auto !important;\n    margin-left: auto !important;\n  }\n  .my-sm-0 {\n    margin-top: 0 !important;\n    margin-bottom: 0 !important;\n  }\n  .my-sm-1 {\n    margin-top: 0.25rem !important;\n    margin-bottom: 0.25rem !important;\n  }\n  .my-sm-2 {\n    margin-top: 0.5rem !important;\n    margin-bottom: 0.5rem !important;\n  }\n  .my-sm-3 {\n    margin-top: 1rem !important;\n    margin-bottom: 1rem !important;\n  }\n  .my-sm-4 {\n    margin-top: 1.5rem !important;\n    margin-bottom: 1.5rem !important;\n  }\n  .my-sm-5 {\n    margin-top: 3rem !important;\n    margin-bottom: 3rem !important;\n  }\n  .my-sm-auto {\n    margin-top: auto !important;\n    margin-bottom: auto !important;\n  }\n  .mt-sm-0 {\n    margin-top: 0 !important;\n  }\n  .mt-sm-1 {\n    margin-top: 0.25rem !important;\n  }\n  .mt-sm-2 {\n    margin-top: 0.5rem !important;\n  }\n  .mt-sm-3 {\n    margin-top: 1rem !important;\n  }\n  .mt-sm-4 {\n    margin-top: 1.5rem !important;\n  }\n  .mt-sm-5 {\n    margin-top: 3rem !important;\n  }\n  .mt-sm-auto {\n    margin-top: auto !important;\n  }\n  .me-sm-0 {\n    margin-right: 0 !important;\n  }\n  .me-sm-1 {\n    margin-right: 0.25rem !important;\n  }\n  .me-sm-2 {\n    margin-right: 0.5rem !important;\n  }\n  .me-sm-3 {\n    margin-right: 1rem !important;\n  }\n  .me-sm-4 {\n    margin-right: 1.5rem !important;\n  }\n  .me-sm-5 {\n    margin-right: 3rem !important;\n  }\n  .me-sm-auto {\n    margin-right: auto !important;\n  }\n  .mb-sm-0 {\n    margin-bottom: 0 !important;\n  }\n  .mb-sm-1 {\n    margin-bottom: 0.25rem !important;\n  }\n  .mb-sm-2 {\n    margin-bottom: 0.5rem !important;\n  }\n  .mb-sm-3 {\n    margin-bottom: 1rem !important;\n  }\n  .mb-sm-4 {\n    margin-bottom: 1.5rem !important;\n  }\n  .mb-sm-5 {\n    margin-bottom: 3rem !important;\n  }\n  .mb-sm-auto {\n    margin-bottom: auto !important;\n  }\n  .ms-sm-0 {\n    margin-left: 0 !important;\n  }\n  .ms-sm-1 {\n    margin-left: 0.25rem !important;\n  }\n  .ms-sm-2 {\n    margin-left: 0.5rem !important;\n  }\n  .ms-sm-3 {\n    margin-left: 1rem !important;\n  }\n  .ms-sm-4 {\n    margin-left: 1.5rem !important;\n  }\n  .ms-sm-5 {\n    margin-left: 3rem !important;\n  }\n  .ms-sm-auto {\n    margin-left: auto !important;\n  }\n  .p-sm-0 {\n    padding: 0 !important;\n  }\n  .p-sm-1 {\n    padding: 0.25rem !important;\n  }\n  .p-sm-2 {\n    padding: 0.5rem !important;\n  }\n  .p-sm-3 {\n    padding: 1rem !important;\n  }\n  .p-sm-4 {\n    padding: 1.5rem !important;\n  }\n  .p-sm-5 {\n    padding: 3rem !important;\n  }\n  .px-sm-0 {\n    padding-right: 0 !important;\n    padding-left: 0 !important;\n  }\n  .px-sm-1 {\n    padding-right: 0.25rem !important;\n    padding-left: 0.25rem !important;\n  }\n  .px-sm-2 {\n    padding-right: 0.5rem !important;\n    padding-left: 0.5rem !important;\n  }\n  .px-sm-3 {\n    padding-right: 1rem !important;\n    padding-left: 1rem !important;\n  }\n  .px-sm-4 {\n    padding-right: 1.5rem !important;\n    padding-left: 1.5rem !important;\n  }\n  .px-sm-5 {\n    padding-right: 3rem !important;\n    padding-left: 3rem !important;\n  }\n  .py-sm-0 {\n    padding-top: 0 !important;\n    padding-bottom: 0 !important;\n  }\n  .py-sm-1 {\n    padding-top: 0.25rem !important;\n    padding-bottom: 0.25rem !important;\n  }\n  .py-sm-2 {\n    padding-top: 0.5rem !important;\n    padding-bottom: 0.5rem !important;\n  }\n  .py-sm-3 {\n    padding-top: 1rem !important;\n    padding-bottom: 1rem !important;\n  }\n  .py-sm-4 {\n    padding-top: 1.5rem !important;\n    padding-bottom: 1.5rem !important;\n  }\n  .py-sm-5 {\n    padding-top: 3rem !important;\n    padding-bottom: 3rem !important;\n  }\n  .pt-sm-0 {\n    padding-top: 0 !important;\n  }\n  .pt-sm-1 {\n    padding-top: 0.25rem !important;\n  }\n  .pt-sm-2 {\n    padding-top: 0.5rem !important;\n  }\n  .pt-sm-3 {\n    padding-top: 1rem !important;\n  }\n  .pt-sm-4 {\n    padding-top: 1.5rem !important;\n  }\n  .pt-sm-5 {\n    padding-top: 3rem !important;\n  }\n  .pe-sm-0 {\n    padding-right: 0 !important;\n  }\n  .pe-sm-1 {\n    padding-right: 0.25rem !important;\n  }\n  .pe-sm-2 {\n    padding-right: 0.5rem !important;\n  }\n  .pe-sm-3 {\n    padding-right: 1rem !important;\n  }\n  .pe-sm-4 {\n    padding-right: 1.5rem !important;\n  }\n  .pe-sm-5 {\n    padding-right: 3rem !important;\n  }\n  .pb-sm-0 {\n    padding-bottom: 0 !important;\n  }\n  .pb-sm-1 {\n    padding-bottom: 0.25rem !important;\n  }\n  .pb-sm-2 {\n    padding-bottom: 0.5rem !important;\n  }\n  .pb-sm-3 {\n    padding-bottom: 1rem !important;\n  }\n  .pb-sm-4 {\n    padding-bottom: 1.5rem !important;\n  }\n  .pb-sm-5 {\n    padding-bottom: 3rem !important;\n  }\n  .ps-sm-0 {\n    padding-left: 0 !important;\n  }\n  .ps-sm-1 {\n    padding-left: 0.25rem !important;\n  }\n  .ps-sm-2 {\n    padding-left: 0.5rem !important;\n  }\n  .ps-sm-3 {\n    padding-left: 1rem !important;\n  }\n  .ps-sm-4 {\n    padding-left: 1.5rem !important;\n  }\n  .ps-sm-5 {\n    padding-left: 3rem !important;\n  }\n  .text-sm-start {\n    text-align: left !important;\n  }\n  .text-sm-end {\n    text-align: right !important;\n  }\n  .text-sm-center {\n    text-align: center !important;\n  }\n}\n\n@media (min-width: 768px) {\n  .float-md-start {\n    float: left !important;\n  }\n  .float-md-end {\n    float: right !important;\n  }\n  .float-md-none {\n    float: none !important;\n  }\n  .d-md-inline {\n    display: inline !important;\n  }\n  .d-md-inline-block {\n    display: inline-block !important;\n  }\n  .d-md-block {\n    display: block !important;\n  }\n  .d-md-grid {\n    display: grid !important;\n  }\n  .d-md-table {\n    display: table !important;\n  }\n  .d-md-table-row {\n    display: table-row !important;\n  }\n  .d-md-table-cell {\n    display: table-cell !important;\n  }\n  .d-md-flex {\n    display: -ms-flexbox !important;\n    display: flex !important;\n  }\n  .d-md-inline-flex {\n    display: -ms-inline-flexbox !important;\n    display: inline-flex !important;\n  }\n  .d-md-none {\n    display: none !important;\n  }\n  .flex-md-fill {\n    -ms-flex: 1 1 auto !important;\n    flex: 1 1 auto !important;\n  }\n  .flex-md-row {\n    -ms-flex-direction: row !important;\n    flex-direction: row !important;\n  }\n  .flex-md-column {\n    -ms-flex-direction: column !important;\n    flex-direction: column !important;\n  }\n  .flex-md-row-reverse {\n    -ms-flex-direction: row-reverse !important;\n    flex-direction: row-reverse !important;\n  }\n  .flex-md-column-reverse {\n    -ms-flex-direction: column-reverse !important;\n    flex-direction: column-reverse !important;\n  }\n  .flex-md-grow-0 {\n    -ms-flex-positive: 0 !important;\n    flex-grow: 0 !important;\n  }\n  .flex-md-grow-1 {\n    -ms-flex-positive: 1 !important;\n    flex-grow: 1 !important;\n  }\n  .flex-md-shrink-0 {\n    -ms-flex-negative: 0 !important;\n    flex-shrink: 0 !important;\n  }\n  .flex-md-shrink-1 {\n    -ms-flex-negative: 1 !important;\n    flex-shrink: 1 !important;\n  }\n  .flex-md-wrap {\n    -ms-flex-wrap: wrap !important;\n    flex-wrap: wrap !important;\n  }\n  .flex-md-nowrap {\n    -ms-flex-wrap: nowrap !important;\n    flex-wrap: nowrap !important;\n  }\n  .flex-md-wrap-reverse {\n    -ms-flex-wrap: wrap-reverse !important;\n    flex-wrap: wrap-reverse !important;\n  }\n  .gap-md-0 {\n    gap: 0 !important;\n  }\n  .gap-md-1 {\n    gap: 0.25rem !important;\n  }\n  .gap-md-2 {\n    gap: 0.5rem !important;\n  }\n  .gap-md-3 {\n    gap: 1rem !important;\n  }\n  .gap-md-4 {\n    gap: 1.5rem !important;\n  }\n  .gap-md-5 {\n    gap: 3rem !important;\n  }\n  .justify-content-md-start {\n    -ms-flex-pack: start !important;\n    justify-content: flex-start !important;\n  }\n  .justify-content-md-end {\n    -ms-flex-pack: end !important;\n    justify-content: flex-end !important;\n  }\n  .justify-content-md-center {\n    -ms-flex-pack: center !important;\n    justify-content: center !important;\n  }\n  .justify-content-md-between {\n    -ms-flex-pack: justify !important;\n    justify-content: space-between !important;\n  }\n  .justify-content-md-around {\n    -ms-flex-pack: distribute !important;\n    justify-content: space-around !important;\n  }\n  .justify-content-md-evenly {\n    -ms-flex-pack: space-evenly !important;\n    justify-content: space-evenly !important;\n  }\n  .align-items-md-start {\n    -ms-flex-align: start !important;\n    align-items: flex-start !important;\n  }\n  .align-items-md-end {\n    -ms-flex-align: end !important;\n    align-items: flex-end !important;\n  }\n  .align-items-md-center {\n    -ms-flex-align: center !important;\n    align-items: center !important;\n  }\n  .align-items-md-baseline {\n    -ms-flex-align: baseline !important;\n    align-items: baseline !important;\n  }\n  .align-items-md-stretch {\n    -ms-flex-align: stretch !important;\n    align-items: stretch !important;\n  }\n  .align-content-md-start {\n    -ms-flex-line-pack: start !important;\n    align-content: flex-start !important;\n  }\n  .align-content-md-end {\n    -ms-flex-line-pack: end !important;\n    align-content: flex-end !important;\n  }\n  .align-content-md-center {\n    -ms-flex-line-pack: center !important;\n    align-content: center !important;\n  }\n  .align-content-md-between {\n    -ms-flex-line-pack: justify !important;\n    align-content: space-between !important;\n  }\n  .align-content-md-around {\n    -ms-flex-line-pack: distribute !important;\n    align-content: space-around !important;\n  }\n  .align-content-md-stretch {\n    -ms-flex-line-pack: stretch !important;\n    align-content: stretch !important;\n  }\n  .align-self-md-auto {\n    -ms-flex-item-align: auto !important;\n    align-self: auto !important;\n  }\n  .align-self-md-start {\n    -ms-flex-item-align: start !important;\n    align-self: flex-start !important;\n  }\n  .align-self-md-end {\n    -ms-flex-item-align: end !important;\n    align-self: flex-end !important;\n  }\n  .align-self-md-center {\n    -ms-flex-item-align: center !important;\n    align-self: center !important;\n  }\n  .align-self-md-baseline {\n    -ms-flex-item-align: baseline !important;\n    align-self: baseline !important;\n  }\n  .align-self-md-stretch {\n    -ms-flex-item-align: stretch !important;\n    align-self: stretch !important;\n  }\n  .order-md-first {\n    -ms-flex-order: -1 !important;\n    order: -1 !important;\n  }\n  .order-md-0 {\n    -ms-flex-order: 0 !important;\n    order: 0 !important;\n  }\n  .order-md-1 {\n    -ms-flex-order: 1 !important;\n    order: 1 !important;\n  }\n  .order-md-2 {\n    -ms-flex-order: 2 !important;\n    order: 2 !important;\n  }\n  .order-md-3 {\n    -ms-flex-order: 3 !important;\n    order: 3 !important;\n  }\n  .order-md-4 {\n    -ms-flex-order: 4 !important;\n    order: 4 !important;\n  }\n  .order-md-5 {\n    -ms-flex-order: 5 !important;\n    order: 5 !important;\n  }\n  .order-md-last {\n    -ms-flex-order: 6 !important;\n    order: 6 !important;\n  }\n  .m-md-0 {\n    margin: 0 !important;\n  }\n  .m-md-1 {\n    margin: 0.25rem !important;\n  }\n  .m-md-2 {\n    margin: 0.5rem !important;\n  }\n  .m-md-3 {\n    margin: 1rem !important;\n  }\n  .m-md-4 {\n    margin: 1.5rem !important;\n  }\n  .m-md-5 {\n    margin: 3rem !important;\n  }\n  .m-md-auto {\n    margin: auto !important;\n  }\n  .mx-md-0 {\n    margin-right: 0 !important;\n    margin-left: 0 !important;\n  }\n  .mx-md-1 {\n    margin-right: 0.25rem !important;\n    margin-left: 0.25rem !important;\n  }\n  .mx-md-2 {\n    margin-right: 0.5rem !important;\n    margin-left: 0.5rem !important;\n  }\n  .mx-md-3 {\n    margin-right: 1rem !important;\n    margin-left: 1rem !important;\n  }\n  .mx-md-4 {\n    margin-right: 1.5rem !important;\n    margin-left: 1.5rem !important;\n  }\n  .mx-md-5 {\n    margin-right: 3rem !important;\n    margin-left: 3rem !important;\n  }\n  .mx-md-auto {\n    margin-right: auto !important;\n    margin-left: auto !important;\n  }\n  .my-md-0 {\n    margin-top: 0 !important;\n    margin-bottom: 0 !important;\n  }\n  .my-md-1 {\n    margin-top: 0.25rem !important;\n    margin-bottom: 0.25rem !important;\n  }\n  .my-md-2 {\n    margin-top: 0.5rem !important;\n    margin-bottom: 0.5rem !important;\n  }\n  .my-md-3 {\n    margin-top: 1rem !important;\n    margin-bottom: 1rem !important;\n  }\n  .my-md-4 {\n    margin-top: 1.5rem !important;\n    margin-bottom: 1.5rem !important;\n  }\n  .my-md-5 {\n    margin-top: 3rem !important;\n    margin-bottom: 3rem !important;\n  }\n  .my-md-auto {\n    margin-top: auto !important;\n    margin-bottom: auto !important;\n  }\n  .mt-md-0 {\n    margin-top: 0 !important;\n  }\n  .mt-md-1 {\n    margin-top: 0.25rem !important;\n  }\n  .mt-md-2 {\n    margin-top: 0.5rem !important;\n  }\n  .mt-md-3 {\n    margin-top: 1rem !important;\n  }\n  .mt-md-4 {\n    margin-top: 1.5rem !important;\n  }\n  .mt-md-5 {\n    margin-top: 3rem !important;\n  }\n  .mt-md-auto {\n    margin-top: auto !important;\n  }\n  .me-md-0 {\n    margin-right: 0 !important;\n  }\n  .me-md-1 {\n    margin-right: 0.25rem !important;\n  }\n  .me-md-2 {\n    margin-right: 0.5rem !important;\n  }\n  .me-md-3 {\n    margin-right: 1rem !important;\n  }\n  .me-md-4 {\n    margin-right: 1.5rem !important;\n  }\n  .me-md-5 {\n    margin-right: 3rem !important;\n  }\n  .me-md-auto {\n    margin-right: auto !important;\n  }\n  .mb-md-0 {\n    margin-bottom: 0 !important;\n  }\n  .mb-md-1 {\n    margin-bottom: 0.25rem !important;\n  }\n  .mb-md-2 {\n    margin-bottom: 0.5rem !important;\n  }\n  .mb-md-3 {\n    margin-bottom: 1rem !important;\n  }\n  .mb-md-4 {\n    margin-bottom: 1.5rem !important;\n  }\n  .mb-md-5 {\n    margin-bottom: 3rem !important;\n  }\n  .mb-md-auto {\n    margin-bottom: auto !important;\n  }\n  .ms-md-0 {\n    margin-left: 0 !important;\n  }\n  .ms-md-1 {\n    margin-left: 0.25rem !important;\n  }\n  .ms-md-2 {\n    margin-left: 0.5rem !important;\n  }\n  .ms-md-3 {\n    margin-left: 1rem !important;\n  }\n  .ms-md-4 {\n    margin-left: 1.5rem !important;\n  }\n  .ms-md-5 {\n    margin-left: 3rem !important;\n  }\n  .ms-md-auto {\n    margin-left: auto !important;\n  }\n  .p-md-0 {\n    padding: 0 !important;\n  }\n  .p-md-1 {\n    padding: 0.25rem !important;\n  }\n  .p-md-2 {\n    padding: 0.5rem !important;\n  }\n  .p-md-3 {\n    padding: 1rem !important;\n  }\n  .p-md-4 {\n    padding: 1.5rem !important;\n  }\n  .p-md-5 {\n    padding: 3rem !important;\n  }\n  .px-md-0 {\n    padding-right: 0 !important;\n    padding-left: 0 !important;\n  }\n  .px-md-1 {\n    padding-right: 0.25rem !important;\n    padding-left: 0.25rem !important;\n  }\n  .px-md-2 {\n    padding-right: 0.5rem !important;\n    padding-left: 0.5rem !important;\n  }\n  .px-md-3 {\n    padding-right: 1rem !important;\n    padding-left: 1rem !important;\n  }\n  .px-md-4 {\n    padding-right: 1.5rem !important;\n    padding-left: 1.5rem !important;\n  }\n  .px-md-5 {\n    padding-right: 3rem !important;\n    padding-left: 3rem !important;\n  }\n  .py-md-0 {\n    padding-top: 0 !important;\n    padding-bottom: 0 !important;\n  }\n  .py-md-1 {\n    padding-top: 0.25rem !important;\n    padding-bottom: 0.25rem !important;\n  }\n  .py-md-2 {\n    padding-top: 0.5rem !important;\n    padding-bottom: 0.5rem !important;\n  }\n  .py-md-3 {\n    padding-top: 1rem !important;\n    padding-bottom: 1rem !important;\n  }\n  .py-md-4 {\n    padding-top: 1.5rem !important;\n    padding-bottom: 1.5rem !important;\n  }\n  .py-md-5 {\n    padding-top: 3rem !important;\n    padding-bottom: 3rem !important;\n  }\n  .pt-md-0 {\n    padding-top: 0 !important;\n  }\n  .pt-md-1 {\n    padding-top: 0.25rem !important;\n  }\n  .pt-md-2 {\n    padding-top: 0.5rem !important;\n  }\n  .pt-md-3 {\n    padding-top: 1rem !important;\n  }\n  .pt-md-4 {\n    padding-top: 1.5rem !important;\n  }\n  .pt-md-5 {\n    padding-top: 3rem !important;\n  }\n  .pe-md-0 {\n    padding-right: 0 !important;\n  }\n  .pe-md-1 {\n    padding-right: 0.25rem !important;\n  }\n  .pe-md-2 {\n    padding-right: 0.5rem !important;\n  }\n  .pe-md-3 {\n    padding-right: 1rem !important;\n  }\n  .pe-md-4 {\n    padding-right: 1.5rem !important;\n  }\n  .pe-md-5 {\n    padding-right: 3rem !important;\n  }\n  .pb-md-0 {\n    padding-bottom: 0 !important;\n  }\n  .pb-md-1 {\n    padding-bottom: 0.25rem !important;\n  }\n  .pb-md-2 {\n    padding-bottom: 0.5rem !important;\n  }\n  .pb-md-3 {\n    padding-bottom: 1rem !important;\n  }\n  .pb-md-4 {\n    padding-bottom: 1.5rem !important;\n  }\n  .pb-md-5 {\n    padding-bottom: 3rem !important;\n  }\n  .ps-md-0 {\n    padding-left: 0 !important;\n  }\n  .ps-md-1 {\n    padding-left: 0.25rem !important;\n  }\n  .ps-md-2 {\n    padding-left: 0.5rem !important;\n  }\n  .ps-md-3 {\n    padding-left: 1rem !important;\n  }\n  .ps-md-4 {\n    padding-left: 1.5rem !important;\n  }\n  .ps-md-5 {\n    padding-left: 3rem !important;\n  }\n  .text-md-start {\n    text-align: left !important;\n  }\n  .text-md-end {\n    text-align: right !important;\n  }\n  .text-md-center {\n    text-align: center !important;\n  }\n}\n\n@media (min-width: 992px) {\n  .float-lg-start {\n    float: left !important;\n  }\n  .float-lg-end {\n    float: right !important;\n  }\n  .float-lg-none {\n    float: none !important;\n  }\n  .d-lg-inline {\n    display: inline !important;\n  }\n  .d-lg-inline-block {\n    display: inline-block !important;\n  }\n  .d-lg-block {\n    display: block !important;\n  }\n  .d-lg-grid {\n    display: grid !important;\n  }\n  .d-lg-table {\n    display: table !important;\n  }\n  .d-lg-table-row {\n    display: table-row !important;\n  }\n  .d-lg-table-cell {\n    display: table-cell !important;\n  }\n  .d-lg-flex {\n    display: -ms-flexbox !important;\n    display: flex !important;\n  }\n  .d-lg-inline-flex {\n    display: -ms-inline-flexbox !important;\n    display: inline-flex !important;\n  }\n  .d-lg-none {\n    display: none !important;\n  }\n  .flex-lg-fill {\n    -ms-flex: 1 1 auto !important;\n    flex: 1 1 auto !important;\n  }\n  .flex-lg-row {\n    -ms-flex-direction: row !important;\n    flex-direction: row !important;\n  }\n  .flex-lg-column {\n    -ms-flex-direction: column !important;\n    flex-direction: column !important;\n  }\n  .flex-lg-row-reverse {\n    -ms-flex-direction: row-reverse !important;\n    flex-direction: row-reverse !important;\n  }\n  .flex-lg-column-reverse {\n    -ms-flex-direction: column-reverse !important;\n    flex-direction: column-reverse !important;\n  }\n  .flex-lg-grow-0 {\n    -ms-flex-positive: 0 !important;\n    flex-grow: 0 !important;\n  }\n  .flex-lg-grow-1 {\n    -ms-flex-positive: 1 !important;\n    flex-grow: 1 !important;\n  }\n  .flex-lg-shrink-0 {\n    -ms-flex-negative: 0 !important;\n    flex-shrink: 0 !important;\n  }\n  .flex-lg-shrink-1 {\n    -ms-flex-negative: 1 !important;\n    flex-shrink: 1 !important;\n  }\n  .flex-lg-wrap {\n    -ms-flex-wrap: wrap !important;\n    flex-wrap: wrap !important;\n  }\n  .flex-lg-nowrap {\n    -ms-flex-wrap: nowrap !important;\n    flex-wrap: nowrap !important;\n  }\n  .flex-lg-wrap-reverse {\n    -ms-flex-wrap: wrap-reverse !important;\n    flex-wrap: wrap-reverse !important;\n  }\n  .gap-lg-0 {\n    gap: 0 !important;\n  }\n  .gap-lg-1 {\n    gap: 0.25rem !important;\n  }\n  .gap-lg-2 {\n    gap: 0.5rem !important;\n  }\n  .gap-lg-3 {\n    gap: 1rem !important;\n  }\n  .gap-lg-4 {\n    gap: 1.5rem !important;\n  }\n  .gap-lg-5 {\n    gap: 3rem !important;\n  }\n  .justify-content-lg-start {\n    -ms-flex-pack: start !important;\n    justify-content: flex-start !important;\n  }\n  .justify-content-lg-end {\n    -ms-flex-pack: end !important;\n    justify-content: flex-end !important;\n  }\n  .justify-content-lg-center {\n    -ms-flex-pack: center !important;\n    justify-content: center !important;\n  }\n  .justify-content-lg-between {\n    -ms-flex-pack: justify !important;\n    justify-content: space-between !important;\n  }\n  .justify-content-lg-around {\n    -ms-flex-pack: distribute !important;\n    justify-content: space-around !important;\n  }\n  .justify-content-lg-evenly {\n    -ms-flex-pack: space-evenly !important;\n    justify-content: space-evenly !important;\n  }\n  .align-items-lg-start {\n    -ms-flex-align: start !important;\n    align-items: flex-start !important;\n  }\n  .align-items-lg-end {\n    -ms-flex-align: end !important;\n    align-items: flex-end !important;\n  }\n  .align-items-lg-center {\n    -ms-flex-align: center !important;\n    align-items: center !important;\n  }\n  .align-items-lg-baseline {\n    -ms-flex-align: baseline !important;\n    align-items: baseline !important;\n  }\n  .align-items-lg-stretch {\n    -ms-flex-align: stretch !important;\n    align-items: stretch !important;\n  }\n  .align-content-lg-start {\n    -ms-flex-line-pack: start !important;\n    align-content: flex-start !important;\n  }\n  .align-content-lg-end {\n    -ms-flex-line-pack: end !important;\n    align-content: flex-end !important;\n  }\n  .align-content-lg-center {\n    -ms-flex-line-pack: center !important;\n    align-content: center !important;\n  }\n  .align-content-lg-between {\n    -ms-flex-line-pack: justify !important;\n    align-content: space-between !important;\n  }\n  .align-content-lg-around {\n    -ms-flex-line-pack: distribute !important;\n    align-content: space-around !important;\n  }\n  .align-content-lg-stretch {\n    -ms-flex-line-pack: stretch !important;\n    align-content: stretch !important;\n  }\n  .align-self-lg-auto {\n    -ms-flex-item-align: auto !important;\n    align-self: auto !important;\n  }\n  .align-self-lg-start {\n    -ms-flex-item-align: start !important;\n    align-self: flex-start !important;\n  }\n  .align-self-lg-end {\n    -ms-flex-item-align: end !important;\n    align-self: flex-end !important;\n  }\n  .align-self-lg-center {\n    -ms-flex-item-align: center !important;\n    align-self: center !important;\n  }\n  .align-self-lg-baseline {\n    -ms-flex-item-align: baseline !important;\n    align-self: baseline !important;\n  }\n  .align-self-lg-stretch {\n    -ms-flex-item-align: stretch !important;\n    align-self: stretch !important;\n  }\n  .order-lg-first {\n    -ms-flex-order: -1 !important;\n    order: -1 !important;\n  }\n  .order-lg-0 {\n    -ms-flex-order: 0 !important;\n    order: 0 !important;\n  }\n  .order-lg-1 {\n    -ms-flex-order: 1 !important;\n    order: 1 !important;\n  }\n  .order-lg-2 {\n    -ms-flex-order: 2 !important;\n    order: 2 !important;\n  }\n  .order-lg-3 {\n    -ms-flex-order: 3 !important;\n    order: 3 !important;\n  }\n  .order-lg-4 {\n    -ms-flex-order: 4 !important;\n    order: 4 !important;\n  }\n  .order-lg-5 {\n    -ms-flex-order: 5 !important;\n    order: 5 !important;\n  }\n  .order-lg-last {\n    -ms-flex-order: 6 !important;\n    order: 6 !important;\n  }\n  .m-lg-0 {\n    margin: 0 !important;\n  }\n  .m-lg-1 {\n    margin: 0.25rem !important;\n  }\n  .m-lg-2 {\n    margin: 0.5rem !important;\n  }\n  .m-lg-3 {\n    margin: 1rem !important;\n  }\n  .m-lg-4 {\n    margin: 1.5rem !important;\n  }\n  .m-lg-5 {\n    margin: 3rem !important;\n  }\n  .m-lg-auto {\n    margin: auto !important;\n  }\n  .mx-lg-0 {\n    margin-right: 0 !important;\n    margin-left: 0 !important;\n  }\n  .mx-lg-1 {\n    margin-right: 0.25rem !important;\n    margin-left: 0.25rem !important;\n  }\n  .mx-lg-2 {\n    margin-right: 0.5rem !important;\n    margin-left: 0.5rem !important;\n  }\n  .mx-lg-3 {\n    margin-right: 1rem !important;\n    margin-left: 1rem !important;\n  }\n  .mx-lg-4 {\n    margin-right: 1.5rem !important;\n    margin-left: 1.5rem !important;\n  }\n  .mx-lg-5 {\n    margin-right: 3rem !important;\n    margin-left: 3rem !important;\n  }\n  .mx-lg-auto {\n    margin-right: auto !important;\n    margin-left: auto !important;\n  }\n  .my-lg-0 {\n    margin-top: 0 !important;\n    margin-bottom: 0 !important;\n  }\n  .my-lg-1 {\n    margin-top: 0.25rem !important;\n    margin-bottom: 0.25rem !important;\n  }\n  .my-lg-2 {\n    margin-top: 0.5rem !important;\n    margin-bottom: 0.5rem !important;\n  }\n  .my-lg-3 {\n    margin-top: 1rem !important;\n    margin-bottom: 1rem !important;\n  }\n  .my-lg-4 {\n    margin-top: 1.5rem !important;\n    margin-bottom: 1.5rem !important;\n  }\n  .my-lg-5 {\n    margin-top: 3rem !important;\n    margin-bottom: 3rem !important;\n  }\n  .my-lg-auto {\n    margin-top: auto !important;\n    margin-bottom: auto !important;\n  }\n  .mt-lg-0 {\n    margin-top: 0 !important;\n  }\n  .mt-lg-1 {\n    margin-top: 0.25rem !important;\n  }\n  .mt-lg-2 {\n    margin-top: 0.5rem !important;\n  }\n  .mt-lg-3 {\n    margin-top: 1rem !important;\n  }\n  .mt-lg-4 {\n    margin-top: 1.5rem !important;\n  }\n  .mt-lg-5 {\n    margin-top: 3rem !important;\n  }\n  .mt-lg-auto {\n    margin-top: auto !important;\n  }\n  .me-lg-0 {\n    margin-right: 0 !important;\n  }\n  .me-lg-1 {\n    margin-right: 0.25rem !important;\n  }\n  .me-lg-2 {\n    margin-right: 0.5rem !important;\n  }\n  .me-lg-3 {\n    margin-right: 1rem !important;\n  }\n  .me-lg-4 {\n    margin-right: 1.5rem !important;\n  }\n  .me-lg-5 {\n    margin-right: 3rem !important;\n  }\n  .me-lg-auto {\n    margin-right: auto !important;\n  }\n  .mb-lg-0 {\n    margin-bottom: 0 !important;\n  }\n  .mb-lg-1 {\n    margin-bottom: 0.25rem !important;\n  }\n  .mb-lg-2 {\n    margin-bottom: 0.5rem !important;\n  }\n  .mb-lg-3 {\n    margin-bottom: 1rem !important;\n  }\n  .mb-lg-4 {\n    margin-bottom: 1.5rem !important;\n  }\n  .mb-lg-5 {\n    margin-bottom: 3rem !important;\n  }\n  .mb-lg-auto {\n    margin-bottom: auto !important;\n  }\n  .ms-lg-0 {\n    margin-left: 0 !important;\n  }\n  .ms-lg-1 {\n    margin-left: 0.25rem !important;\n  }\n  .ms-lg-2 {\n    margin-left: 0.5rem !important;\n  }\n  .ms-lg-3 {\n    margin-left: 1rem !important;\n  }\n  .ms-lg-4 {\n    margin-left: 1.5rem !important;\n  }\n  .ms-lg-5 {\n    margin-left: 3rem !important;\n  }\n  .ms-lg-auto {\n    margin-left: auto !important;\n  }\n  .p-lg-0 {\n    padding: 0 !important;\n  }\n  .p-lg-1 {\n    padding: 0.25rem !important;\n  }\n  .p-lg-2 {\n    padding: 0.5rem !important;\n  }\n  .p-lg-3 {\n    padding: 1rem !important;\n  }\n  .p-lg-4 {\n    padding: 1.5rem !important;\n  }\n  .p-lg-5 {\n    padding: 3rem !important;\n  }\n  .px-lg-0 {\n    padding-right: 0 !important;\n    padding-left: 0 !important;\n  }\n  .px-lg-1 {\n    padding-right: 0.25rem !important;\n    padding-left: 0.25rem !important;\n  }\n  .px-lg-2 {\n    padding-right: 0.5rem !important;\n    padding-left: 0.5rem !important;\n  }\n  .px-lg-3 {\n    padding-right: 1rem !important;\n    padding-left: 1rem !important;\n  }\n  .px-lg-4 {\n    padding-right: 1.5rem !important;\n    padding-left: 1.5rem !important;\n  }\n  .px-lg-5 {\n    padding-right: 3rem !important;\n    padding-left: 3rem !important;\n  }\n  .py-lg-0 {\n    padding-top: 0 !important;\n    padding-bottom: 0 !important;\n  }\n  .py-lg-1 {\n    padding-top: 0.25rem !important;\n    padding-bottom: 0.25rem !important;\n  }\n  .py-lg-2 {\n    padding-top: 0.5rem !important;\n    padding-bottom: 0.5rem !important;\n  }\n  .py-lg-3 {\n    padding-top: 1rem !important;\n    padding-bottom: 1rem !important;\n  }\n  .py-lg-4 {\n    padding-top: 1.5rem !important;\n    padding-bottom: 1.5rem !important;\n  }\n  .py-lg-5 {\n    padding-top: 3rem !important;\n    padding-bottom: 3rem !important;\n  }\n  .pt-lg-0 {\n    padding-top: 0 !important;\n  }\n  .pt-lg-1 {\n    padding-top: 0.25rem !important;\n  }\n  .pt-lg-2 {\n    padding-top: 0.5rem !important;\n  }\n  .pt-lg-3 {\n    padding-top: 1rem !important;\n  }\n  .pt-lg-4 {\n    padding-top: 1.5rem !important;\n  }\n  .pt-lg-5 {\n    padding-top: 3rem !important;\n  }\n  .pe-lg-0 {\n    padding-right: 0 !important;\n  }\n  .pe-lg-1 {\n    padding-right: 0.25rem !important;\n  }\n  .pe-lg-2 {\n    padding-right: 0.5rem !important;\n  }\n  .pe-lg-3 {\n    padding-right: 1rem !important;\n  }\n  .pe-lg-4 {\n    padding-right: 1.5rem !important;\n  }\n  .pe-lg-5 {\n    padding-right: 3rem !important;\n  }\n  .pb-lg-0 {\n    padding-bottom: 0 !important;\n  }\n  .pb-lg-1 {\n    padding-bottom: 0.25rem !important;\n  }\n  .pb-lg-2 {\n    padding-bottom: 0.5rem !important;\n  }\n  .pb-lg-3 {\n    padding-bottom: 1rem !important;\n  }\n  .pb-lg-4 {\n    padding-bottom: 1.5rem !important;\n  }\n  .pb-lg-5 {\n    padding-bottom: 3rem !important;\n  }\n  .ps-lg-0 {\n    padding-left: 0 !important;\n  }\n  .ps-lg-1 {\n    padding-left: 0.25rem !important;\n  }\n  .ps-lg-2 {\n    padding-left: 0.5rem !important;\n  }\n  .ps-lg-3 {\n    padding-left: 1rem !important;\n  }\n  .ps-lg-4 {\n    padding-left: 1.5rem !important;\n  }\n  .ps-lg-5 {\n    padding-left: 3rem !important;\n  }\n  .text-lg-start {\n    text-align: left !important;\n  }\n  .text-lg-end {\n    text-align: right !important;\n  }\n  .text-lg-center {\n    text-align: center !important;\n  }\n}\n\n@media (min-width: 1200px) {\n  .float-xl-start {\n    float: left !important;\n  }\n  .float-xl-end {\n    float: right !important;\n  }\n  .float-xl-none {\n    float: none !important;\n  }\n  .d-xl-inline {\n    display: inline !important;\n  }\n  .d-xl-inline-block {\n    display: inline-block !important;\n  }\n  .d-xl-block {\n    display: block !important;\n  }\n  .d-xl-grid {\n    display: grid !important;\n  }\n  .d-xl-table {\n    display: table !important;\n  }\n  .d-xl-table-row {\n    display: table-row !important;\n  }\n  .d-xl-table-cell {\n    display: table-cell !important;\n  }\n  .d-xl-flex {\n    display: -ms-flexbox !important;\n    display: flex !important;\n  }\n  .d-xl-inline-flex {\n    display: -ms-inline-flexbox !important;\n    display: inline-flex !important;\n  }\n  .d-xl-none {\n    display: none !important;\n  }\n  .flex-xl-fill {\n    -ms-flex: 1 1 auto !important;\n    flex: 1 1 auto !important;\n  }\n  .flex-xl-row {\n    -ms-flex-direction: row !important;\n    flex-direction: row !important;\n  }\n  .flex-xl-column {\n    -ms-flex-direction: column !important;\n    flex-direction: column !important;\n  }\n  .flex-xl-row-reverse {\n    -ms-flex-direction: row-reverse !important;\n    flex-direction: row-reverse !important;\n  }\n  .flex-xl-column-reverse {\n    -ms-flex-direction: column-reverse !important;\n    flex-direction: column-reverse !important;\n  }\n  .flex-xl-grow-0 {\n    -ms-flex-positive: 0 !important;\n    flex-grow: 0 !important;\n  }\n  .flex-xl-grow-1 {\n    -ms-flex-positive: 1 !important;\n    flex-grow: 1 !important;\n  }\n  .flex-xl-shrink-0 {\n    -ms-flex-negative: 0 !important;\n    flex-shrink: 0 !important;\n  }\n  .flex-xl-shrink-1 {\n    -ms-flex-negative: 1 !important;\n    flex-shrink: 1 !important;\n  }\n  .flex-xl-wrap {\n    -ms-flex-wrap: wrap !important;\n    flex-wrap: wrap !important;\n  }\n  .flex-xl-nowrap {\n    -ms-flex-wrap: nowrap !important;\n    flex-wrap: nowrap !important;\n  }\n  .flex-xl-wrap-reverse {\n    -ms-flex-wrap: wrap-reverse !important;\n    flex-wrap: wrap-reverse !important;\n  }\n  .gap-xl-0 {\n    gap: 0 !important;\n  }\n  .gap-xl-1 {\n    gap: 0.25rem !important;\n  }\n  .gap-xl-2 {\n    gap: 0.5rem !important;\n  }\n  .gap-xl-3 {\n    gap: 1rem !important;\n  }\n  .gap-xl-4 {\n    gap: 1.5rem !important;\n  }\n  .gap-xl-5 {\n    gap: 3rem !important;\n  }\n  .justify-content-xl-start {\n    -ms-flex-pack: start !important;\n    justify-content: flex-start !important;\n  }\n  .justify-content-xl-end {\n    -ms-flex-pack: end !important;\n    justify-content: flex-end !important;\n  }\n  .justify-content-xl-center {\n    -ms-flex-pack: center !important;\n    justify-content: center !important;\n  }\n  .justify-content-xl-between {\n    -ms-flex-pack: justify !important;\n    justify-content: space-between !important;\n  }\n  .justify-content-xl-around {\n    -ms-flex-pack: distribute !important;\n    justify-content: space-around !important;\n  }\n  .justify-content-xl-evenly {\n    -ms-flex-pack: space-evenly !important;\n    justify-content: space-evenly !important;\n  }\n  .align-items-xl-start {\n    -ms-flex-align: start !important;\n    align-items: flex-start !important;\n  }\n  .align-items-xl-end {\n    -ms-flex-align: end !important;\n    align-items: flex-end !important;\n  }\n  .align-items-xl-center {\n    -ms-flex-align: center !important;\n    align-items: center !important;\n  }\n  .align-items-xl-baseline {\n    -ms-flex-align: baseline !important;\n    align-items: baseline !important;\n  }\n  .align-items-xl-stretch {\n    -ms-flex-align: stretch !important;\n    align-items: stretch !important;\n  }\n  .align-content-xl-start {\n    -ms-flex-line-pack: start !important;\n    align-content: flex-start !important;\n  }\n  .align-content-xl-end {\n    -ms-flex-line-pack: end !important;\n    align-content: flex-end !important;\n  }\n  .align-content-xl-center {\n    -ms-flex-line-pack: center !important;\n    align-content: center !important;\n  }\n  .align-content-xl-between {\n    -ms-flex-line-pack: justify !important;\n    align-content: space-between !important;\n  }\n  .align-content-xl-around {\n    -ms-flex-line-pack: distribute !important;\n    align-content: space-around !important;\n  }\n  .align-content-xl-stretch {\n    -ms-flex-line-pack: stretch !important;\n    align-content: stretch !important;\n  }\n  .align-self-xl-auto {\n    -ms-flex-item-align: auto !important;\n    align-self: auto !important;\n  }\n  .align-self-xl-start {\n    -ms-flex-item-align: start !important;\n    align-self: flex-start !important;\n  }\n  .align-self-xl-end {\n    -ms-flex-item-align: end !important;\n    align-self: flex-end !important;\n  }\n  .align-self-xl-center {\n    -ms-flex-item-align: center !important;\n    align-self: center !important;\n  }\n  .align-self-xl-baseline {\n    -ms-flex-item-align: baseline !important;\n    align-self: baseline !important;\n  }\n  .align-self-xl-stretch {\n    -ms-flex-item-align: stretch !important;\n    align-self: stretch !important;\n  }\n  .order-xl-first {\n    -ms-flex-order: -1 !important;\n    order: -1 !important;\n  }\n  .order-xl-0 {\n    -ms-flex-order: 0 !important;\n    order: 0 !important;\n  }\n  .order-xl-1 {\n    -ms-flex-order: 1 !important;\n    order: 1 !important;\n  }\n  .order-xl-2 {\n    -ms-flex-order: 2 !important;\n    order: 2 !important;\n  }\n  .order-xl-3 {\n    -ms-flex-order: 3 !important;\n    order: 3 !important;\n  }\n  .order-xl-4 {\n    -ms-flex-order: 4 !important;\n    order: 4 !important;\n  }\n  .order-xl-5 {\n    -ms-flex-order: 5 !important;\n    order: 5 !important;\n  }\n  .order-xl-last {\n    -ms-flex-order: 6 !important;\n    order: 6 !important;\n  }\n  .m-xl-0 {\n    margin: 0 !important;\n  }\n  .m-xl-1 {\n    margin: 0.25rem !important;\n  }\n  .m-xl-2 {\n    margin: 0.5rem !important;\n  }\n  .m-xl-3 {\n    margin: 1rem !important;\n  }\n  .m-xl-4 {\n    margin: 1.5rem !important;\n  }\n  .m-xl-5 {\n    margin: 3rem !important;\n  }\n  .m-xl-auto {\n    margin: auto !important;\n  }\n  .mx-xl-0 {\n    margin-right: 0 !important;\n    margin-left: 0 !important;\n  }\n  .mx-xl-1 {\n    margin-right: 0.25rem !important;\n    margin-left: 0.25rem !important;\n  }\n  .mx-xl-2 {\n    margin-right: 0.5rem !important;\n    margin-left: 0.5rem !important;\n  }\n  .mx-xl-3 {\n    margin-right: 1rem !important;\n    margin-left: 1rem !important;\n  }\n  .mx-xl-4 {\n    margin-right: 1.5rem !important;\n    margin-left: 1.5rem !important;\n  }\n  .mx-xl-5 {\n    margin-right: 3rem !important;\n    margin-left: 3rem !important;\n  }\n  .mx-xl-auto {\n    margin-right: auto !important;\n    margin-left: auto !important;\n  }\n  .my-xl-0 {\n    margin-top: 0 !important;\n    margin-bottom: 0 !important;\n  }\n  .my-xl-1 {\n    margin-top: 0.25rem !important;\n    margin-bottom: 0.25rem !important;\n  }\n  .my-xl-2 {\n    margin-top: 0.5rem !important;\n    margin-bottom: 0.5rem !important;\n  }\n  .my-xl-3 {\n    margin-top: 1rem !important;\n    margin-bottom: 1rem !important;\n  }\n  .my-xl-4 {\n    margin-top: 1.5rem !important;\n    margin-bottom: 1.5rem !important;\n  }\n  .my-xl-5 {\n    margin-top: 3rem !important;\n    margin-bottom: 3rem !important;\n  }\n  .my-xl-auto {\n    margin-top: auto !important;\n    margin-bottom: auto !important;\n  }\n  .mt-xl-0 {\n    margin-top: 0 !important;\n  }\n  .mt-xl-1 {\n    margin-top: 0.25rem !important;\n  }\n  .mt-xl-2 {\n    margin-top: 0.5rem !important;\n  }\n  .mt-xl-3 {\n    margin-top: 1rem !important;\n  }\n  .mt-xl-4 {\n    margin-top: 1.5rem !important;\n  }\n  .mt-xl-5 {\n    margin-top: 3rem !important;\n  }\n  .mt-xl-auto {\n    margin-top: auto !important;\n  }\n  .me-xl-0 {\n    margin-right: 0 !important;\n  }\n  .me-xl-1 {\n    margin-right: 0.25rem !important;\n  }\n  .me-xl-2 {\n    margin-right: 0.5rem !important;\n  }\n  .me-xl-3 {\n    margin-right: 1rem !important;\n  }\n  .me-xl-4 {\n    margin-right: 1.5rem !important;\n  }\n  .me-xl-5 {\n    margin-right: 3rem !important;\n  }\n  .me-xl-auto {\n    margin-right: auto !important;\n  }\n  .mb-xl-0 {\n    margin-bottom: 0 !important;\n  }\n  .mb-xl-1 {\n    margin-bottom: 0.25rem !important;\n  }\n  .mb-xl-2 {\n    margin-bottom: 0.5rem !important;\n  }\n  .mb-xl-3 {\n    margin-bottom: 1rem !important;\n  }\n  .mb-xl-4 {\n    margin-bottom: 1.5rem !important;\n  }\n  .mb-xl-5 {\n    margin-bottom: 3rem !important;\n  }\n  .mb-xl-auto {\n    margin-bottom: auto !important;\n  }\n  .ms-xl-0 {\n    margin-left: 0 !important;\n  }\n  .ms-xl-1 {\n    margin-left: 0.25rem !important;\n  }\n  .ms-xl-2 {\n    margin-left: 0.5rem !important;\n  }\n  .ms-xl-3 {\n    margin-left: 1rem !important;\n  }\n  .ms-xl-4 {\n    margin-left: 1.5rem !important;\n  }\n  .ms-xl-5 {\n    margin-left: 3rem !important;\n  }\n  .ms-xl-auto {\n    margin-left: auto !important;\n  }\n  .p-xl-0 {\n    padding: 0 !important;\n  }\n  .p-xl-1 {\n    padding: 0.25rem !important;\n  }\n  .p-xl-2 {\n    padding: 0.5rem !important;\n  }\n  .p-xl-3 {\n    padding: 1rem !important;\n  }\n  .p-xl-4 {\n    padding: 1.5rem !important;\n  }\n  .p-xl-5 {\n    padding: 3rem !important;\n  }\n  .px-xl-0 {\n    padding-right: 0 !important;\n    padding-left: 0 !important;\n  }\n  .px-xl-1 {\n    padding-right: 0.25rem !important;\n    padding-left: 0.25rem !important;\n  }\n  .px-xl-2 {\n    padding-right: 0.5rem !important;\n    padding-left: 0.5rem !important;\n  }\n  .px-xl-3 {\n    padding-right: 1rem !important;\n    padding-left: 1rem !important;\n  }\n  .px-xl-4 {\n    padding-right: 1.5rem !important;\n    padding-left: 1.5rem !important;\n  }\n  .px-xl-5 {\n    padding-right: 3rem !important;\n    padding-left: 3rem !important;\n  }\n  .py-xl-0 {\n    padding-top: 0 !important;\n    padding-bottom: 0 !important;\n  }\n  .py-xl-1 {\n    padding-top: 0.25rem !important;\n    padding-bottom: 0.25rem !important;\n  }\n  .py-xl-2 {\n    padding-top: 0.5rem !important;\n    padding-bottom: 0.5rem !important;\n  }\n  .py-xl-3 {\n    padding-top: 1rem !important;\n    padding-bottom: 1rem !important;\n  }\n  .py-xl-4 {\n    padding-top: 1.5rem !important;\n    padding-bottom: 1.5rem !important;\n  }\n  .py-xl-5 {\n    padding-top: 3rem !important;\n    padding-bottom: 3rem !important;\n  }\n  .pt-xl-0 {\n    padding-top: 0 !important;\n  }\n  .pt-xl-1 {\n    padding-top: 0.25rem !important;\n  }\n  .pt-xl-2 {\n    padding-top: 0.5rem !important;\n  }\n  .pt-xl-3 {\n    padding-top: 1rem !important;\n  }\n  .pt-xl-4 {\n    padding-top: 1.5rem !important;\n  }\n  .pt-xl-5 {\n    padding-top: 3rem !important;\n  }\n  .pe-xl-0 {\n    padding-right: 0 !important;\n  }\n  .pe-xl-1 {\n    padding-right: 0.25rem !important;\n  }\n  .pe-xl-2 {\n    padding-right: 0.5rem !important;\n  }\n  .pe-xl-3 {\n    padding-right: 1rem !important;\n  }\n  .pe-xl-4 {\n    padding-right: 1.5rem !important;\n  }\n  .pe-xl-5 {\n    padding-right: 3rem !important;\n  }\n  .pb-xl-0 {\n    padding-bottom: 0 !important;\n  }\n  .pb-xl-1 {\n    padding-bottom: 0.25rem !important;\n  }\n  .pb-xl-2 {\n    padding-bottom: 0.5rem !important;\n  }\n  .pb-xl-3 {\n    padding-bottom: 1rem !important;\n  }\n  .pb-xl-4 {\n    padding-bottom: 1.5rem !important;\n  }\n  .pb-xl-5 {\n    padding-bottom: 3rem !important;\n  }\n  .ps-xl-0 {\n    padding-left: 0 !important;\n  }\n  .ps-xl-1 {\n    padding-left: 0.25rem !important;\n  }\n  .ps-xl-2 {\n    padding-left: 0.5rem !important;\n  }\n  .ps-xl-3 {\n    padding-left: 1rem !important;\n  }\n  .ps-xl-4 {\n    padding-left: 1.5rem !important;\n  }\n  .ps-xl-5 {\n    padding-left: 3rem !important;\n  }\n  .text-xl-start {\n    text-align: left !important;\n  }\n  .text-xl-end {\n    text-align: right !important;\n  }\n  .text-xl-center {\n    text-align: center !important;\n  }\n}\n\n@media (min-width: 1400px) {\n  .float-xxl-start {\n    float: left !important;\n  }\n  .float-xxl-end {\n    float: right !important;\n  }\n  .float-xxl-none {\n    float: none !important;\n  }\n  .d-xxl-inline {\n    display: inline !important;\n  }\n  .d-xxl-inline-block {\n    display: inline-block !important;\n  }\n  .d-xxl-block {\n    display: block !important;\n  }\n  .d-xxl-grid {\n    display: grid !important;\n  }\n  .d-xxl-table {\n    display: table !important;\n  }\n  .d-xxl-table-row {\n    display: table-row !important;\n  }\n  .d-xxl-table-cell {\n    display: table-cell !important;\n  }\n  .d-xxl-flex {\n    display: -ms-flexbox !important;\n    display: flex !important;\n  }\n  .d-xxl-inline-flex {\n    display: -ms-inline-flexbox !important;\n    display: inline-flex !important;\n  }\n  .d-xxl-none {\n    display: none !important;\n  }\n  .flex-xxl-fill {\n    -ms-flex: 1 1 auto !important;\n    flex: 1 1 auto !important;\n  }\n  .flex-xxl-row {\n    -ms-flex-direction: row !important;\n    flex-direction: row !important;\n  }\n  .flex-xxl-column {\n    -ms-flex-direction: column !important;\n    flex-direction: column !important;\n  }\n  .flex-xxl-row-reverse {\n    -ms-flex-direction: row-reverse !important;\n    flex-direction: row-reverse !important;\n  }\n  .flex-xxl-column-reverse {\n    -ms-flex-direction: column-reverse !important;\n    flex-direction: column-reverse !important;\n  }\n  .flex-xxl-grow-0 {\n    -ms-flex-positive: 0 !important;\n    flex-grow: 0 !important;\n  }\n  .flex-xxl-grow-1 {\n    -ms-flex-positive: 1 !important;\n    flex-grow: 1 !important;\n  }\n  .flex-xxl-shrink-0 {\n    -ms-flex-negative: 0 !important;\n    flex-shrink: 0 !important;\n  }\n  .flex-xxl-shrink-1 {\n    -ms-flex-negative: 1 !important;\n    flex-shrink: 1 !important;\n  }\n  .flex-xxl-wrap {\n    -ms-flex-wrap: wrap !important;\n    flex-wrap: wrap !important;\n  }\n  .flex-xxl-nowrap {\n    -ms-flex-wrap: nowrap !important;\n    flex-wrap: nowrap !important;\n  }\n  .flex-xxl-wrap-reverse {\n    -ms-flex-wrap: wrap-reverse !important;\n    flex-wrap: wrap-reverse !important;\n  }\n  .gap-xxl-0 {\n    gap: 0 !important;\n  }\n  .gap-xxl-1 {\n    gap: 0.25rem !important;\n  }\n  .gap-xxl-2 {\n    gap: 0.5rem !important;\n  }\n  .gap-xxl-3 {\n    gap: 1rem !important;\n  }\n  .gap-xxl-4 {\n    gap: 1.5rem !important;\n  }\n  .gap-xxl-5 {\n    gap: 3rem !important;\n  }\n  .justify-content-xxl-start {\n    -ms-flex-pack: start !important;\n    justify-content: flex-start !important;\n  }\n  .justify-content-xxl-end {\n    -ms-flex-pack: end !important;\n    justify-content: flex-end !important;\n  }\n  .justify-content-xxl-center {\n    -ms-flex-pack: center !important;\n    justify-content: center !important;\n  }\n  .justify-content-xxl-between {\n    -ms-flex-pack: justify !important;\n    justify-content: space-between !important;\n  }\n  .justify-content-xxl-around {\n    -ms-flex-pack: distribute !important;\n    justify-content: space-around !important;\n  }\n  .justify-content-xxl-evenly {\n    -ms-flex-pack: space-evenly !important;\n    justify-content: space-evenly !important;\n  }\n  .align-items-xxl-start {\n    -ms-flex-align: start !important;\n    align-items: flex-start !important;\n  }\n  .align-items-xxl-end {\n    -ms-flex-align: end !important;\n    align-items: flex-end !important;\n  }\n  .align-items-xxl-center {\n    -ms-flex-align: center !important;\n    align-items: center !important;\n  }\n  .align-items-xxl-baseline {\n    -ms-flex-align: baseline !important;\n    align-items: baseline !important;\n  }\n  .align-items-xxl-stretch {\n    -ms-flex-align: stretch !important;\n    align-items: stretch !important;\n  }\n  .align-content-xxl-start {\n    -ms-flex-line-pack: start !important;\n    align-content: flex-start !important;\n  }\n  .align-content-xxl-end {\n    -ms-flex-line-pack: end !important;\n    align-content: flex-end !important;\n  }\n  .align-content-xxl-center {\n    -ms-flex-line-pack: center !important;\n    align-content: center !important;\n  }\n  .align-content-xxl-between {\n    -ms-flex-line-pack: justify !important;\n    align-content: space-between !important;\n  }\n  .align-content-xxl-around {\n    -ms-flex-line-pack: distribute !important;\n    align-content: space-around !important;\n  }\n  .align-content-xxl-stretch {\n    -ms-flex-line-pack: stretch !important;\n    align-content: stretch !important;\n  }\n  .align-self-xxl-auto {\n    -ms-flex-item-align: auto !important;\n    align-self: auto !important;\n  }\n  .align-self-xxl-start {\n    -ms-flex-item-align: start !important;\n    align-self: flex-start !important;\n  }\n  .align-self-xxl-end {\n    -ms-flex-item-align: end !important;\n    align-self: flex-end !important;\n  }\n  .align-self-xxl-center {\n    -ms-flex-item-align: center !important;\n    align-self: center !important;\n  }\n  .align-self-xxl-baseline {\n    -ms-flex-item-align: baseline !important;\n    align-self: baseline !important;\n  }\n  .align-self-xxl-stretch {\n    -ms-flex-item-align: stretch !important;\n    align-self: stretch !important;\n  }\n  .order-xxl-first {\n    -ms-flex-order: -1 !important;\n    order: -1 !important;\n  }\n  .order-xxl-0 {\n    -ms-flex-order: 0 !important;\n    order: 0 !important;\n  }\n  .order-xxl-1 {\n    -ms-flex-order: 1 !important;\n    order: 1 !important;\n  }\n  .order-xxl-2 {\n    -ms-flex-order: 2 !important;\n    order: 2 !important;\n  }\n  .order-xxl-3 {\n    -ms-flex-order: 3 !important;\n    order: 3 !important;\n  }\n  .order-xxl-4 {\n    -ms-flex-order: 4 !important;\n    order: 4 !important;\n  }\n  .order-xxl-5 {\n    -ms-flex-order: 5 !important;\n    order: 5 !important;\n  }\n  .order-xxl-last {\n    -ms-flex-order: 6 !important;\n    order: 6 !important;\n  }\n  .m-xxl-0 {\n    margin: 0 !important;\n  }\n  .m-xxl-1 {\n    margin: 0.25rem !important;\n  }\n  .m-xxl-2 {\n    margin: 0.5rem !important;\n  }\n  .m-xxl-3 {\n    margin: 1rem !important;\n  }\n  .m-xxl-4 {\n    margin: 1.5rem !important;\n  }\n  .m-xxl-5 {\n    margin: 3rem !important;\n  }\n  .m-xxl-auto {\n    margin: auto !important;\n  }\n  .mx-xxl-0 {\n    margin-right: 0 !important;\n    margin-left: 0 !important;\n  }\n  .mx-xxl-1 {\n    margin-right: 0.25rem !important;\n    margin-left: 0.25rem !important;\n  }\n  .mx-xxl-2 {\n    margin-right: 0.5rem !important;\n    margin-left: 0.5rem !important;\n  }\n  .mx-xxl-3 {\n    margin-right: 1rem !important;\n    margin-left: 1rem !important;\n  }\n  .mx-xxl-4 {\n    margin-right: 1.5rem !important;\n    margin-left: 1.5rem !important;\n  }\n  .mx-xxl-5 {\n    margin-right: 3rem !important;\n    margin-left: 3rem !important;\n  }\n  .mx-xxl-auto {\n    margin-right: auto !important;\n    margin-left: auto !important;\n  }\n  .my-xxl-0 {\n    margin-top: 0 !important;\n    margin-bottom: 0 !important;\n  }\n  .my-xxl-1 {\n    margin-top: 0.25rem !important;\n    margin-bottom: 0.25rem !important;\n  }\n  .my-xxl-2 {\n    margin-top: 0.5rem !important;\n    margin-bottom: 0.5rem !important;\n  }\n  .my-xxl-3 {\n    margin-top: 1rem !important;\n    margin-bottom: 1rem !important;\n  }\n  .my-xxl-4 {\n    margin-top: 1.5rem !important;\n    margin-bottom: 1.5rem !important;\n  }\n  .my-xxl-5 {\n    margin-top: 3rem !important;\n    margin-bottom: 3rem !important;\n  }\n  .my-xxl-auto {\n    margin-top: auto !important;\n    margin-bottom: auto !important;\n  }\n  .mt-xxl-0 {\n    margin-top: 0 !important;\n  }\n  .mt-xxl-1 {\n    margin-top: 0.25rem !important;\n  }\n  .mt-xxl-2 {\n    margin-top: 0.5rem !important;\n  }\n  .mt-xxl-3 {\n    margin-top: 1rem !important;\n  }\n  .mt-xxl-4 {\n    margin-top: 1.5rem !important;\n  }\n  .mt-xxl-5 {\n    margin-top: 3rem !important;\n  }\n  .mt-xxl-auto {\n    margin-top: auto !important;\n  }\n  .me-xxl-0 {\n    margin-right: 0 !important;\n  }\n  .me-xxl-1 {\n    margin-right: 0.25rem !important;\n  }\n  .me-xxl-2 {\n    margin-right: 0.5rem !important;\n  }\n  .me-xxl-3 {\n    margin-right: 1rem !important;\n  }\n  .me-xxl-4 {\n    margin-right: 1.5rem !important;\n  }\n  .me-xxl-5 {\n    margin-right: 3rem !important;\n  }\n  .me-xxl-auto {\n    margin-right: auto !important;\n  }\n  .mb-xxl-0 {\n    margin-bottom: 0 !important;\n  }\n  .mb-xxl-1 {\n    margin-bottom: 0.25rem !important;\n  }\n  .mb-xxl-2 {\n    margin-bottom: 0.5rem !important;\n  }\n  .mb-xxl-3 {\n    margin-bottom: 1rem !important;\n  }\n  .mb-xxl-4 {\n    margin-bottom: 1.5rem !important;\n  }\n  .mb-xxl-5 {\n    margin-bottom: 3rem !important;\n  }\n  .mb-xxl-auto {\n    margin-bottom: auto !important;\n  }\n  .ms-xxl-0 {\n    margin-left: 0 !important;\n  }\n  .ms-xxl-1 {\n    margin-left: 0.25rem !important;\n  }\n  .ms-xxl-2 {\n    margin-left: 0.5rem !important;\n  }\n  .ms-xxl-3 {\n    margin-left: 1rem !important;\n  }\n  .ms-xxl-4 {\n    margin-left: 1.5rem !important;\n  }\n  .ms-xxl-5 {\n    margin-left: 3rem !important;\n  }\n  .ms-xxl-auto {\n    margin-left: auto !important;\n  }\n  .p-xxl-0 {\n    padding: 0 !important;\n  }\n  .p-xxl-1 {\n    padding: 0.25rem !important;\n  }\n  .p-xxl-2 {\n    padding: 0.5rem !important;\n  }\n  .p-xxl-3 {\n    padding: 1rem !important;\n  }\n  .p-xxl-4 {\n    padding: 1.5rem !important;\n  }\n  .p-xxl-5 {\n    padding: 3rem !important;\n  }\n  .px-xxl-0 {\n    padding-right: 0 !important;\n    padding-left: 0 !important;\n  }\n  .px-xxl-1 {\n    padding-right: 0.25rem !important;\n    padding-left: 0.25rem !important;\n  }\n  .px-xxl-2 {\n    padding-right: 0.5rem !important;\n    padding-left: 0.5rem !important;\n  }\n  .px-xxl-3 {\n    padding-right: 1rem !important;\n    padding-left: 1rem !important;\n  }\n  .px-xxl-4 {\n    padding-right: 1.5rem !important;\n    padding-left: 1.5rem !important;\n  }\n  .px-xxl-5 {\n    padding-right: 3rem !important;\n    padding-left: 3rem !important;\n  }\n  .py-xxl-0 {\n    padding-top: 0 !important;\n    padding-bottom: 0 !important;\n  }\n  .py-xxl-1 {\n    padding-top: 0.25rem !important;\n    padding-bottom: 0.25rem !important;\n  }\n  .py-xxl-2 {\n    padding-top: 0.5rem !important;\n    padding-bottom: 0.5rem !important;\n  }\n  .py-xxl-3 {\n    padding-top: 1rem !important;\n    padding-bottom: 1rem !important;\n  }\n  .py-xxl-4 {\n    padding-top: 1.5rem !important;\n    padding-bottom: 1.5rem !important;\n  }\n  .py-xxl-5 {\n    padding-top: 3rem !important;\n    padding-bottom: 3rem !important;\n  }\n  .pt-xxl-0 {\n    padding-top: 0 !important;\n  }\n  .pt-xxl-1 {\n    padding-top: 0.25rem !important;\n  }\n  .pt-xxl-2 {\n    padding-top: 0.5rem !important;\n  }\n  .pt-xxl-3 {\n    padding-top: 1rem !important;\n  }\n  .pt-xxl-4 {\n    padding-top: 1.5rem !important;\n  }\n  .pt-xxl-5 {\n    padding-top: 3rem !important;\n  }\n  .pe-xxl-0 {\n    padding-right: 0 !important;\n  }\n  .pe-xxl-1 {\n    padding-right: 0.25rem !important;\n  }\n  .pe-xxl-2 {\n    padding-right: 0.5rem !important;\n  }\n  .pe-xxl-3 {\n    padding-right: 1rem !important;\n  }\n  .pe-xxl-4 {\n    padding-right: 1.5rem !important;\n  }\n  .pe-xxl-5 {\n    padding-right: 3rem !important;\n  }\n  .pb-xxl-0 {\n    padding-bottom: 0 !important;\n  }\n  .pb-xxl-1 {\n    padding-bottom: 0.25rem !important;\n  }\n  .pb-xxl-2 {\n    padding-bottom: 0.5rem !important;\n  }\n  .pb-xxl-3 {\n    padding-bottom: 1rem !important;\n  }\n  .pb-xxl-4 {\n    padding-bottom: 1.5rem !important;\n  }\n  .pb-xxl-5 {\n    padding-bottom: 3rem !important;\n  }\n  .ps-xxl-0 {\n    padding-left: 0 !important;\n  }\n  .ps-xxl-1 {\n    padding-left: 0.25rem !important;\n  }\n  .ps-xxl-2 {\n    padding-left: 0.5rem !important;\n  }\n  .ps-xxl-3 {\n    padding-left: 1rem !important;\n  }\n  .ps-xxl-4 {\n    padding-left: 1.5rem !important;\n  }\n  .ps-xxl-5 {\n    padding-left: 3rem !important;\n  }\n  .text-xxl-start {\n    text-align: left !important;\n  }\n  .text-xxl-end {\n    text-align: right !important;\n  }\n  .text-xxl-center {\n    text-align: center !important;\n  }\n}\n\n@media (min-width: 1200px) {\n  .fs-1 {\n    font-size: 2.5rem !important;\n  }\n  .fs-2 {\n    font-size: 2rem !important;\n  }\n  .fs-3 {\n    font-size: 1.75rem !important;\n  }\n  .fs-4 {\n    font-size: 1.5rem !important;\n  }\n}\n\n@media print {\n  .d-print-inline {\n    display: inline !important;\n  }\n  .d-print-inline-block {\n    display: inline-block !important;\n  }\n  .d-print-block {\n    display: block !important;\n  }\n  .d-print-grid {\n    display: grid !important;\n  }\n  .d-print-table {\n    display: table !important;\n  }\n  .d-print-table-row {\n    display: table-row !important;\n  }\n  .d-print-table-cell {\n    display: table-cell !important;\n  }\n  .d-print-flex {\n    display: -ms-flexbox !important;\n    display: flex !important;\n  }\n  .d-print-inline-flex {\n    display: -ms-inline-flexbox !important;\n    display: inline-flex !important;\n  }\n  .d-print-none {\n    display: none !important;\n  }\n}\n\n.navbar .nav-link,\n.navbar .navbar-brand {\n  text-shadow: -1px -1px 0 rgba(0, 0, 0, 0.1);\n  transition: color ease-in-out .2s;\n}\n\n.navbar.bg-primary {\n  background-image: linear-gradient(#7191b3, #446e9b 50%, #3f658f);\n  -webkit-filter: none;\n  filter: none;\n  border: 1px solid #36587c;\n}\n\n.navbar.bg-secondary {\n  background-image: linear-gradient(#b1b1b1, #999 50%, #8d8d8d);\n  -webkit-filter: none;\n  filter: none;\n  border: 1px solid #7a7a7a;\n}\n\n.navbar.bg-success {\n  background-image: linear-gradient(#6bc756, #3cb521 50%, #37a71e);\n  -webkit-filter: none;\n  filter: none;\n  border: 1px solid #30911a;\n}\n\n.navbar.bg-info {\n  background-image: linear-gradient(#64b1f6, #3399f3 50%, #2f8de0);\n  -webkit-filter: none;\n  filter: none;\n  border: 1px solid #297ac2;\n}\n\n.navbar.bg-warning {\n  background-image: linear-gradient(#de963d, #d47500 50%, #c36c00);\n  -webkit-filter: none;\n  filter: none;\n  border: 1px solid #aa5e00;\n}\n\n.navbar.bg-danger {\n  background-image: linear-gradient(#d93f3d, #cd0200 50%, #bd0200);\n  -webkit-filter: none;\n  filter: none;\n  border: 1px solid #a40200;\n}\n\n.navbar.bg-light {\n  background-image: linear-gradient(#f2f2f2, #eee 50%, #dbdbdb);\n  -webkit-filter: none;\n  filter: none;\n  border: 1px solid #bebebe;\n}\n\n.navbar.bg-dark {\n  background-image: linear-gradient(#646464, #333 50%, #2f2f2f);\n  -webkit-filter: none;\n  filter: none;\n  border: 1px solid #292929;\n}\n\n.navbar.bg-light .nav-link,\n.navbar.bg-light .navbar-brand {\n  text-shadow: 1px 1px 0 rgba(255, 255, 255, 0.1);\n}\n\n.navbar.bg-light .navbar-brand {\n  color: rgba(0, 0, 0, 0.4);\n}\n\n.navbar.bg-light .navbar-brand:hover {\n  color: #3399f3;\n}\n\n.btn {\n  text-shadow: -1px -1px 0 rgba(0, 0, 0, 0.1);\n}\n\n.btn-link {\n  text-shadow: none;\n}\n\n.btn-primary {\n  background-image: linear-gradient(#7191b3, #446e9b 50%, #3f658f);\n  -webkit-filter: none;\n  filter: none;\n  border: 1px solid #36587c;\n}\n\n.btn-primary:not(.disabled):hover {\n  background-image: linear-gradient(#6d8aaa, #3f658f 50%, #3a5d84);\n  -webkit-filter: none;\n  filter: none;\n  border: 1px solid #325172;\n}\n\n.btn-secondary {\n  background-image: linear-gradient(#b1b1b1, #999 50%, #8d8d8d);\n  -webkit-filter: none;\n  filter: none;\n  border: 1px solid #7a7a7a;\n}\n\n.btn-secondary:not(.disabled):hover {\n  background-image: linear-gradient(#a8a8a8, #8d8d8d 50%, #828282);\n  -webkit-filter: none;\n  filter: none;\n  border: 1px solid #717171;\n}\n\n.btn-success {\n  background-image: linear-gradient(#6bc756, #3cb521 50%, #37a71e);\n  -webkit-filter: none;\n  filter: none;\n  border: 1px solid #30911a;\n}\n\n.btn-success:not(.disabled):hover {\n  background-image: linear-gradient(#67bc54, #37a71e 50%, #339a1c);\n  -webkit-filter: none;\n  filter: none;\n  border: 1px solid #2c8618;\n}\n\n.btn-info {\n  background-image: linear-gradient(#64b1f6, #3399f3 50%, #2f8de0);\n  -webkit-filter: none;\n  filter: none;\n  border: 1px solid #297ac2;\n}\n\n.btn-info:not(.disabled):hover {\n  background-image: linear-gradient(#61a8e7, #2f8de0 50%, #2b82ce);\n  -webkit-filter: none;\n  filter: none;\n  border: 1px solid #2671b3;\n}\n\n.btn-warning {\n  background-image: linear-gradient(#de963d, #d47500 50%, #c36c00);\n  -webkit-filter: none;\n  filter: none;\n  border: 1px solid #aa5e00;\n}\n\n.btn-warning:not(.disabled):hover {\n  background-image: linear-gradient(#d18f3d, #c36c00 50%, #b36300);\n  -webkit-filter: none;\n  filter: none;\n  border: 1px solid #9c5600;\n}\n\n.btn-danger {\n  background-image: linear-gradient(#d93f3d, #cd0200 50%, #bd0200);\n  -webkit-filter: none;\n  filter: none;\n  border: 1px solid #a40200;\n}\n\n.btn-danger:not(.disabled):hover {\n  background-image: linear-gradient(#cd3f3d, #bd0200 50%, #ae0200);\n  -webkit-filter: none;\n  filter: none;\n  border: 1px solid #970200;\n}\n\n.btn-light {\n  background-image: linear-gradient(#f2f2f2, #eee 50%, #dbdbdb);\n  -webkit-filter: none;\n  filter: none;\n  border: 1px solid #bebebe;\n}\n\n.btn-light:not(.disabled):hover {\n  background-image: linear-gradient(#e4e4e4, #dbdbdb 50%, #c9c9c9);\n  -webkit-filter: none;\n  filter: none;\n  border: 1px solid #afafaf;\n}\n\n.btn-dark {\n  background-image: linear-gradient(#646464, #333 50%, #2f2f2f);\n  -webkit-filter: none;\n  filter: none;\n  border: 1px solid #292929;\n}\n\n.btn-dark:not(.disabled):hover {\n  background-image: linear-gradient(#616161, #2f2f2f 50%, #2b2b2b);\n  -webkit-filter: none;\n  filter: none;\n  border: 1px solid #262626;\n}\n\n[class*=\"btn-outline-\"] {\n  text-shadow: none;\n}\n\n.badge.bg-light {\n  color: #333;\n}\n\n.card h1, .card .h1,\n.card h2,\n.card .h2,\n.card h3,\n.card .h3,\n.card h4,\n.card .h4,\n.card h5,\n.card .h5,\n.card h6,\n.card .h6,\n.list-group-item h1,\n.list-group-item .h1,\n.list-group-item h2,\n.list-group-item .h2,\n.list-group-item h3,\n.list-group-item .h3,\n.list-group-item h4,\n.list-group-item .h4,\n.list-group-item h5,\n.list-group-item .h5,\n.list-group-item h6,\n.list-group-item .h6 {\n  color: inherit;\n}\n"
  },
  {
    "path": "src/sourceDev.WebApp/SharedThemes/spacelab/wwwroot/css/fontawesome-all.css",
    "content": "/*!\n * Font Awesome Free 5.0.8 by @fontawesome - https://fontawesome.com\n * License - https://fontawesome.com/license (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)\n */\n.fa,\n.fas,\n.far,\n.fal,\n.fab {\n  -moz-osx-font-smoothing: grayscale;\n  -webkit-font-smoothing: antialiased;\n  display: inline-block;\n  font-style: normal;\n  font-variant: normal;\n  text-rendering: auto;\n  line-height: 1; }\n\n.fa-lg {\n  font-size: 1.33333em;\n  line-height: 0.75em;\n  vertical-align: -.0667em; }\n\n.fa-xs {\n  font-size: .75em; }\n\n.fa-sm {\n  font-size: .875em; }\n\n.fa-1x {\n  font-size: 1em; }\n\n.fa-2x {\n  font-size: 2em; }\n\n.fa-3x {\n  font-size: 3em; }\n\n.fa-4x {\n  font-size: 4em; }\n\n.fa-5x {\n  font-size: 5em; }\n\n.fa-6x {\n  font-size: 6em; }\n\n.fa-7x {\n  font-size: 7em; }\n\n.fa-8x {\n  font-size: 8em; }\n\n.fa-9x {\n  font-size: 9em; }\n\n.fa-10x {\n  font-size: 10em; }\n\n.fa-fw {\n  text-align: center;\n  width: 1.25em; }\n\n.fa-ul {\n  list-style-type: none;\n  margin-left: 2.5em;\n  padding-left: 0; }\n  .fa-ul > li {\n    position: relative; }\n\n.fa-li {\n  left: -2em;\n  position: absolute;\n  text-align: center;\n  width: 2em;\n  line-height: inherit; }\n\n.fa-border {\n  border: solid 0.08em #eee;\n  border-radius: .1em;\n  padding: .2em .25em .15em; }\n\n.fa-pull-left {\n  float: left; }\n\n.fa-pull-right {\n  float: right; }\n\n.fa.fa-pull-left,\n.fas.fa-pull-left,\n.far.fa-pull-left,\n.fal.fa-pull-left,\n.fab.fa-pull-left {\n  margin-right: .3em; }\n\n.fa.fa-pull-right,\n.fas.fa-pull-right,\n.far.fa-pull-right,\n.fal.fa-pull-right,\n.fab.fa-pull-right {\n  margin-left: .3em; }\n\n.fa-spin {\n  -webkit-animation: fa-spin 2s infinite linear;\n          animation: fa-spin 2s infinite linear; }\n\n.fa-pulse {\n  -webkit-animation: fa-spin 1s infinite steps(8);\n          animation: fa-spin 1s infinite steps(8); }\n\n@-webkit-keyframes fa-spin {\n  0% {\n    -webkit-transform: rotate(0deg);\n            transform: rotate(0deg); }\n  100% {\n    -webkit-transform: rotate(360deg);\n            transform: rotate(360deg); } }\n\n@keyframes fa-spin {\n  0% {\n    -webkit-transform: rotate(0deg);\n            transform: rotate(0deg); }\n  100% {\n    -webkit-transform: rotate(360deg);\n            transform: rotate(360deg); } }\n\n.fa-rotate-90 {\n  -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)\";\n  -webkit-transform: rotate(90deg);\n          transform: rotate(90deg); }\n\n.fa-rotate-180 {\n  -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)\";\n  -webkit-transform: rotate(180deg);\n          transform: rotate(180deg); }\n\n.fa-rotate-270 {\n  -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)\";\n  -webkit-transform: rotate(270deg);\n          transform: rotate(270deg); }\n\n.fa-flip-horizontal {\n  -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)\";\n  -webkit-transform: scale(-1, 1);\n          transform: scale(-1, 1); }\n\n.fa-flip-vertical {\n  -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)\";\n  -webkit-transform: scale(1, -1);\n          transform: scale(1, -1); }\n\n.fa-flip-horizontal.fa-flip-vertical {\n  -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)\";\n  -webkit-transform: scale(-1, -1);\n          transform: scale(-1, -1); }\n\n:root .fa-rotate-90,\n:root .fa-rotate-180,\n:root .fa-rotate-270,\n:root .fa-flip-horizontal,\n:root .fa-flip-vertical {\n  -webkit-filter: none;\n          filter: none; }\n\n.fa-stack {\n  display: inline-block;\n  height: 2em;\n  line-height: 2em;\n  position: relative;\n  vertical-align: middle;\n  width: 2em; }\n\n.fa-stack-1x,\n.fa-stack-2x {\n  left: 0;\n  position: absolute;\n  text-align: center;\n  width: 100%; }\n\n.fa-stack-1x {\n  line-height: inherit; }\n\n.fa-stack-2x {\n  font-size: 2em; }\n\n.fa-inverse {\n  color: #fff; }\n\n/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen\nreaders do not read off random characters that represent icons */\n.fa-500px:before {\n  content: \"\\f26e\"; }\n\n.fa-accessible-icon:before {\n  content: \"\\f368\"; }\n\n.fa-accusoft:before {\n  content: \"\\f369\"; }\n\n.fa-address-book:before {\n  content: \"\\f2b9\"; }\n\n.fa-address-card:before {\n  content: \"\\f2bb\"; }\n\n.fa-adjust:before {\n  content: \"\\f042\"; }\n\n.fa-adn:before {\n  content: \"\\f170\"; }\n\n.fa-adversal:before {\n  content: \"\\f36a\"; }\n\n.fa-affiliatetheme:before {\n  content: \"\\f36b\"; }\n\n.fa-algolia:before {\n  content: \"\\f36c\"; }\n\n.fa-align-center:before {\n  content: \"\\f037\"; }\n\n.fa-align-justify:before {\n  content: \"\\f039\"; }\n\n.fa-align-left:before {\n  content: \"\\f036\"; }\n\n.fa-align-right:before {\n  content: \"\\f038\"; }\n\n.fa-amazon:before {\n  content: \"\\f270\"; }\n\n.fa-amazon-pay:before {\n  content: \"\\f42c\"; }\n\n.fa-ambulance:before {\n  content: \"\\f0f9\"; }\n\n.fa-american-sign-language-interpreting:before {\n  content: \"\\f2a3\"; }\n\n.fa-amilia:before {\n  content: \"\\f36d\"; }\n\n.fa-anchor:before {\n  content: \"\\f13d\"; }\n\n.fa-android:before {\n  content: \"\\f17b\"; }\n\n.fa-angellist:before {\n  content: \"\\f209\"; }\n\n.fa-angle-double-down:before {\n  content: \"\\f103\"; }\n\n.fa-angle-double-left:before {\n  content: \"\\f100\"; }\n\n.fa-angle-double-right:before {\n  content: \"\\f101\"; }\n\n.fa-angle-double-up:before {\n  content: \"\\f102\"; }\n\n.fa-angle-down:before {\n  content: \"\\f107\"; }\n\n.fa-angle-left:before {\n  content: \"\\f104\"; }\n\n.fa-angle-right:before {\n  content: \"\\f105\"; }\n\n.fa-angle-up:before {\n  content: \"\\f106\"; }\n\n.fa-angrycreative:before {\n  content: \"\\f36e\"; }\n\n.fa-angular:before {\n  content: \"\\f420\"; }\n\n.fa-app-store:before {\n  content: \"\\f36f\"; }\n\n.fa-app-store-ios:before {\n  content: \"\\f370\"; }\n\n.fa-apper:before {\n  content: \"\\f371\"; }\n\n.fa-apple:before {\n  content: \"\\f179\"; }\n\n.fa-apple-pay:before {\n  content: \"\\f415\"; }\n\n.fa-archive:before {\n  content: \"\\f187\"; }\n\n.fa-arrow-alt-circle-down:before {\n  content: \"\\f358\"; }\n\n.fa-arrow-alt-circle-left:before {\n  content: \"\\f359\"; }\n\n.fa-arrow-alt-circle-right:before {\n  content: \"\\f35a\"; }\n\n.fa-arrow-alt-circle-up:before {\n  content: \"\\f35b\"; }\n\n.fa-arrow-circle-down:before {\n  content: \"\\f0ab\"; }\n\n.fa-arrow-circle-left:before {\n  content: \"\\f0a8\"; }\n\n.fa-arrow-circle-right:before {\n  content: \"\\f0a9\"; }\n\n.fa-arrow-circle-up:before {\n  content: \"\\f0aa\"; }\n\n.fa-arrow-down:before {\n  content: \"\\f063\"; }\n\n.fa-arrow-left:before {\n  content: \"\\f060\"; }\n\n.fa-arrow-right:before {\n  content: \"\\f061\"; }\n\n.fa-arrow-up:before {\n  content: \"\\f062\"; }\n\n.fa-arrows-alt:before {\n  content: \"\\f0b2\"; }\n\n.fa-arrows-alt-h:before {\n  content: \"\\f337\"; }\n\n.fa-arrows-alt-v:before {\n  content: \"\\f338\"; }\n\n.fa-assistive-listening-systems:before {\n  content: \"\\f2a2\"; }\n\n.fa-asterisk:before {\n  content: \"\\f069\"; }\n\n.fa-asymmetrik:before {\n  content: \"\\f372\"; }\n\n.fa-at:before {\n  content: \"\\f1fa\"; }\n\n.fa-audible:before {\n  content: \"\\f373\"; }\n\n.fa-audio-description:before {\n  content: \"\\f29e\"; }\n\n.fa-autoprefixer:before {\n  content: \"\\f41c\"; }\n\n.fa-avianex:before {\n  content: \"\\f374\"; }\n\n.fa-aviato:before {\n  content: \"\\f421\"; }\n\n.fa-aws:before {\n  content: \"\\f375\"; }\n\n.fa-backward:before {\n  content: \"\\f04a\"; }\n\n.fa-balance-scale:before {\n  content: \"\\f24e\"; }\n\n.fa-ban:before {\n  content: \"\\f05e\"; }\n\n.fa-band-aid:before {\n  content: \"\\f462\"; }\n\n.fa-bandcamp:before {\n  content: \"\\f2d5\"; }\n\n.fa-barcode:before {\n  content: \"\\f02a\"; }\n\n.fa-bars:before {\n  content: \"\\f0c9\"; }\n\n.fa-baseball-ball:before {\n  content: \"\\f433\"; }\n\n.fa-basketball-ball:before {\n  content: \"\\f434\"; }\n\n.fa-bath:before {\n  content: \"\\f2cd\"; }\n\n.fa-battery-empty:before {\n  content: \"\\f244\"; }\n\n.fa-battery-full:before {\n  content: \"\\f240\"; }\n\n.fa-battery-half:before {\n  content: \"\\f242\"; }\n\n.fa-battery-quarter:before {\n  content: \"\\f243\"; }\n\n.fa-battery-three-quarters:before {\n  content: \"\\f241\"; }\n\n.fa-bed:before {\n  content: \"\\f236\"; }\n\n.fa-beer:before {\n  content: \"\\f0fc\"; }\n\n.fa-behance:before {\n  content: \"\\f1b4\"; }\n\n.fa-behance-square:before {\n  content: \"\\f1b5\"; }\n\n.fa-bell:before {\n  content: \"\\f0f3\"; }\n\n.fa-bell-slash:before {\n  content: \"\\f1f6\"; }\n\n.fa-bicycle:before {\n  content: \"\\f206\"; }\n\n.fa-bimobject:before {\n  content: \"\\f378\"; }\n\n.fa-binoculars:before {\n  content: \"\\f1e5\"; }\n\n.fa-birthday-cake:before {\n  content: \"\\f1fd\"; }\n\n.fa-bitbucket:before {\n  content: \"\\f171\"; }\n\n.fa-bitcoin:before {\n  content: \"\\f379\"; }\n\n.fa-bity:before {\n  content: \"\\f37a\"; }\n\n.fa-black-tie:before {\n  content: \"\\f27e\"; }\n\n.fa-blackberry:before {\n  content: \"\\f37b\"; }\n\n.fa-blind:before {\n  content: \"\\f29d\"; }\n\n.fa-blogger:before {\n  content: \"\\f37c\"; }\n\n.fa-blogger-b:before {\n  content: \"\\f37d\"; }\n\n.fa-bluetooth:before {\n  content: \"\\f293\"; }\n\n.fa-bluetooth-b:before {\n  content: \"\\f294\"; }\n\n.fa-bold:before {\n  content: \"\\f032\"; }\n\n.fa-bolt:before {\n  content: \"\\f0e7\"; }\n\n.fa-bomb:before {\n  content: \"\\f1e2\"; }\n\n.fa-book:before {\n  content: \"\\f02d\"; }\n\n.fa-bookmark:before {\n  content: \"\\f02e\"; }\n\n.fa-bowling-ball:before {\n  content: \"\\f436\"; }\n\n.fa-box:before {\n  content: \"\\f466\"; }\n\n.fa-boxes:before {\n  content: \"\\f468\"; }\n\n.fa-braille:before {\n  content: \"\\f2a1\"; }\n\n.fa-briefcase:before {\n  content: \"\\f0b1\"; }\n\n.fa-btc:before {\n  content: \"\\f15a\"; }\n\n.fa-bug:before {\n  content: \"\\f188\"; }\n\n.fa-building:before {\n  content: \"\\f1ad\"; }\n\n.fa-bullhorn:before {\n  content: \"\\f0a1\"; }\n\n.fa-bullseye:before {\n  content: \"\\f140\"; }\n\n.fa-buromobelexperte:before {\n  content: \"\\f37f\"; }\n\n.fa-bus:before {\n  content: \"\\f207\"; }\n\n.fa-buysellads:before {\n  content: \"\\f20d\"; }\n\n.fa-calculator:before {\n  content: \"\\f1ec\"; }\n\n.fa-calendar:before {\n  content: \"\\f133\"; }\n\n.fa-calendar-alt:before {\n  content: \"\\f073\"; }\n\n.fa-calendar-check:before {\n  content: \"\\f274\"; }\n\n.fa-calendar-minus:before {\n  content: \"\\f272\"; }\n\n.fa-calendar-plus:before {\n  content: \"\\f271\"; }\n\n.fa-calendar-times:before {\n  content: \"\\f273\"; }\n\n.fa-camera:before {\n  content: \"\\f030\"; }\n\n.fa-camera-retro:before {\n  content: \"\\f083\"; }\n\n.fa-car:before {\n  content: \"\\f1b9\"; }\n\n.fa-caret-down:before {\n  content: \"\\f0d7\"; }\n\n.fa-caret-left:before {\n  content: \"\\f0d9\"; }\n\n.fa-caret-right:before {\n  content: \"\\f0da\"; }\n\n.fa-caret-square-down:before {\n  content: \"\\f150\"; }\n\n.fa-caret-square-left:before {\n  content: \"\\f191\"; }\n\n.fa-caret-square-right:before {\n  content: \"\\f152\"; }\n\n.fa-caret-square-up:before {\n  content: \"\\f151\"; }\n\n.fa-caret-up:before {\n  content: \"\\f0d8\"; }\n\n.fa-cart-arrow-down:before {\n  content: \"\\f218\"; }\n\n.fa-cart-plus:before {\n  content: \"\\f217\"; }\n\n.fa-cc-amazon-pay:before {\n  content: \"\\f42d\"; }\n\n.fa-cc-amex:before {\n  content: \"\\f1f3\"; }\n\n.fa-cc-apple-pay:before {\n  content: \"\\f416\"; }\n\n.fa-cc-diners-club:before {\n  content: \"\\f24c\"; }\n\n.fa-cc-discover:before {\n  content: \"\\f1f2\"; }\n\n.fa-cc-jcb:before {\n  content: \"\\f24b\"; }\n\n.fa-cc-mastercard:before {\n  content: \"\\f1f1\"; }\n\n.fa-cc-paypal:before {\n  content: \"\\f1f4\"; }\n\n.fa-cc-stripe:before {\n  content: \"\\f1f5\"; }\n\n.fa-cc-visa:before {\n  content: \"\\f1f0\"; }\n\n.fa-centercode:before {\n  content: \"\\f380\"; }\n\n.fa-certificate:before {\n  content: \"\\f0a3\"; }\n\n.fa-chart-area:before {\n  content: \"\\f1fe\"; }\n\n.fa-chart-bar:before {\n  content: \"\\f080\"; }\n\n.fa-chart-line:before {\n  content: \"\\f201\"; }\n\n.fa-chart-pie:before {\n  content: \"\\f200\"; }\n\n.fa-check:before {\n  content: \"\\f00c\"; }\n\n.fa-check-circle:before {\n  content: \"\\f058\"; }\n\n.fa-check-square:before {\n  content: \"\\f14a\"; }\n\n.fa-chess:before {\n  content: \"\\f439\"; }\n\n.fa-chess-bishop:before {\n  content: \"\\f43a\"; }\n\n.fa-chess-board:before {\n  content: \"\\f43c\"; }\n\n.fa-chess-king:before {\n  content: \"\\f43f\"; }\n\n.fa-chess-knight:before {\n  content: \"\\f441\"; }\n\n.fa-chess-pawn:before {\n  content: \"\\f443\"; }\n\n.fa-chess-queen:before {\n  content: \"\\f445\"; }\n\n.fa-chess-rook:before {\n  content: \"\\f447\"; }\n\n.fa-chevron-circle-down:before {\n  content: \"\\f13a\"; }\n\n.fa-chevron-circle-left:before {\n  content: \"\\f137\"; }\n\n.fa-chevron-circle-right:before {\n  content: \"\\f138\"; }\n\n.fa-chevron-circle-up:before {\n  content: \"\\f139\"; }\n\n.fa-chevron-down:before {\n  content: \"\\f078\"; }\n\n.fa-chevron-left:before {\n  content: \"\\f053\"; }\n\n.fa-chevron-right:before {\n  content: \"\\f054\"; }\n\n.fa-chevron-up:before {\n  content: \"\\f077\"; }\n\n.fa-child:before {\n  content: \"\\f1ae\"; }\n\n.fa-chrome:before {\n  content: \"\\f268\"; }\n\n.fa-circle:before {\n  content: \"\\f111\"; }\n\n.fa-circle-notch:before {\n  content: \"\\f1ce\"; }\n\n.fa-clipboard:before {\n  content: \"\\f328\"; }\n\n.fa-clipboard-check:before {\n  content: \"\\f46c\"; }\n\n.fa-clipboard-list:before {\n  content: \"\\f46d\"; }\n\n.fa-clock:before {\n  content: \"\\f017\"; }\n\n.fa-clone:before {\n  content: \"\\f24d\"; }\n\n.fa-closed-captioning:before {\n  content: \"\\f20a\"; }\n\n.fa-cloud:before {\n  content: \"\\f0c2\"; }\n\n.fa-cloud-download-alt:before {\n  content: \"\\f381\"; }\n\n.fa-cloud-upload-alt:before {\n  content: \"\\f382\"; }\n\n.fa-cloudscale:before {\n  content: \"\\f383\"; }\n\n.fa-cloudsmith:before {\n  content: \"\\f384\"; }\n\n.fa-cloudversify:before {\n  content: \"\\f385\"; }\n\n.fa-code:before {\n  content: \"\\f121\"; }\n\n.fa-code-branch:before {\n  content: \"\\f126\"; }\n\n.fa-codepen:before {\n  content: \"\\f1cb\"; }\n\n.fa-codiepie:before {\n  content: \"\\f284\"; }\n\n.fa-coffee:before {\n  content: \"\\f0f4\"; }\n\n.fa-cog:before {\n  content: \"\\f013\"; }\n\n.fa-cogs:before {\n  content: \"\\f085\"; }\n\n.fa-columns:before {\n  content: \"\\f0db\"; }\n\n.fa-comment:before {\n  content: \"\\f075\"; }\n\n.fa-comment-alt:before {\n  content: \"\\f27a\"; }\n\n.fa-comments:before {\n  content: \"\\f086\"; }\n\n.fa-compass:before {\n  content: \"\\f14e\"; }\n\n.fa-compress:before {\n  content: \"\\f066\"; }\n\n.fa-connectdevelop:before {\n  content: \"\\f20e\"; }\n\n.fa-contao:before {\n  content: \"\\f26d\"; }\n\n.fa-copy:before {\n  content: \"\\f0c5\"; }\n\n.fa-copyright:before {\n  content: \"\\f1f9\"; }\n\n.fa-cpanel:before {\n  content: \"\\f388\"; }\n\n.fa-creative-commons:before {\n  content: \"\\f25e\"; }\n\n.fa-credit-card:before {\n  content: \"\\f09d\"; }\n\n.fa-crop:before {\n  content: \"\\f125\"; }\n\n.fa-crosshairs:before {\n  content: \"\\f05b\"; }\n\n.fa-css3:before {\n  content: \"\\f13c\"; }\n\n.fa-css3-alt:before {\n  content: \"\\f38b\"; }\n\n.fa-cube:before {\n  content: \"\\f1b2\"; }\n\n.fa-cubes:before {\n  content: \"\\f1b3\"; }\n\n.fa-cut:before {\n  content: \"\\f0c4\"; }\n\n.fa-cuttlefish:before {\n  content: \"\\f38c\"; }\n\n.fa-d-and-d:before {\n  content: \"\\f38d\"; }\n\n.fa-dashcube:before {\n  content: \"\\f210\"; }\n\n.fa-database:before {\n  content: \"\\f1c0\"; }\n\n.fa-deaf:before {\n  content: \"\\f2a4\"; }\n\n.fa-delicious:before {\n  content: \"\\f1a5\"; }\n\n.fa-deploydog:before {\n  content: \"\\f38e\"; }\n\n.fa-deskpro:before {\n  content: \"\\f38f\"; }\n\n.fa-desktop:before {\n  content: \"\\f108\"; }\n\n.fa-deviantart:before {\n  content: \"\\f1bd\"; }\n\n.fa-digg:before {\n  content: \"\\f1a6\"; }\n\n.fa-digital-ocean:before {\n  content: \"\\f391\"; }\n\n.fa-discord:before {\n  content: \"\\f392\"; }\n\n.fa-discourse:before {\n  content: \"\\f393\"; }\n\n.fa-dna:before {\n  content: \"\\f471\"; }\n\n.fa-dochub:before {\n  content: \"\\f394\"; }\n\n.fa-docker:before {\n  content: \"\\f395\"; }\n\n.fa-dollar-sign:before {\n  content: \"\\f155\"; }\n\n.fa-dolly:before {\n  content: \"\\f472\"; }\n\n.fa-dolly-flatbed:before {\n  content: \"\\f474\"; }\n\n.fa-dot-circle:before {\n  content: \"\\f192\"; }\n\n.fa-download:before {\n  content: \"\\f019\"; }\n\n.fa-draft2digital:before {\n  content: \"\\f396\"; }\n\n.fa-dribbble:before {\n  content: \"\\f17d\"; }\n\n.fa-dribbble-square:before {\n  content: \"\\f397\"; }\n\n.fa-dropbox:before {\n  content: \"\\f16b\"; }\n\n.fa-drupal:before {\n  content: \"\\f1a9\"; }\n\n.fa-dyalog:before {\n  content: \"\\f399\"; }\n\n.fa-earlybirds:before {\n  content: \"\\f39a\"; }\n\n.fa-edge:before {\n  content: \"\\f282\"; }\n\n.fa-edit:before {\n  content: \"\\f044\"; }\n\n.fa-eject:before {\n  content: \"\\f052\"; }\n\n.fa-elementor:before {\n  content: \"\\f430\"; }\n\n.fa-ellipsis-h:before {\n  content: \"\\f141\"; }\n\n.fa-ellipsis-v:before {\n  content: \"\\f142\"; }\n\n.fa-ember:before {\n  content: \"\\f423\"; }\n\n.fa-empire:before {\n  content: \"\\f1d1\"; }\n\n.fa-envelope:before {\n  content: \"\\f0e0\"; }\n\n.fa-envelope-open:before {\n  content: \"\\f2b6\"; }\n\n.fa-envelope-square:before {\n  content: \"\\f199\"; }\n\n.fa-envira:before {\n  content: \"\\f299\"; }\n\n.fa-eraser:before {\n  content: \"\\f12d\"; }\n\n.fa-erlang:before {\n  content: \"\\f39d\"; }\n\n.fa-ethereum:before {\n  content: \"\\f42e\"; }\n\n.fa-etsy:before {\n  content: \"\\f2d7\"; }\n\n.fa-euro-sign:before {\n  content: \"\\f153\"; }\n\n.fa-exchange-alt:before {\n  content: \"\\f362\"; }\n\n.fa-exclamation:before {\n  content: \"\\f12a\"; }\n\n.fa-exclamation-circle:before {\n  content: \"\\f06a\"; }\n\n.fa-exclamation-triangle:before {\n  content: \"\\f071\"; }\n\n.fa-expand:before {\n  content: \"\\f065\"; }\n\n.fa-expand-arrows-alt:before {\n  content: \"\\f31e\"; }\n\n.fa-expeditedssl:before {\n  content: \"\\f23e\"; }\n\n.fa-external-link-alt:before {\n  content: \"\\f35d\"; }\n\n.fa-external-link-square-alt:before {\n  content: \"\\f360\"; }\n\n.fa-eye:before {\n  content: \"\\f06e\"; }\n\n.fa-eye-dropper:before {\n  content: \"\\f1fb\"; }\n\n.fa-eye-slash:before {\n  content: \"\\f070\"; }\n\n.fa-facebook:before {\n  content: \"\\f09a\"; }\n\n.fa-facebook-f:before {\n  content: \"\\f39e\"; }\n\n.fa-facebook-messenger:before {\n  content: \"\\f39f\"; }\n\n.fa-facebook-square:before {\n  content: \"\\f082\"; }\n\n.fa-fast-backward:before {\n  content: \"\\f049\"; }\n\n.fa-fast-forward:before {\n  content: \"\\f050\"; }\n\n.fa-fax:before {\n  content: \"\\f1ac\"; }\n\n.fa-female:before {\n  content: \"\\f182\"; }\n\n.fa-fighter-jet:before {\n  content: \"\\f0fb\"; }\n\n.fa-file:before {\n  content: \"\\f15b\"; }\n\n.fa-file-alt:before {\n  content: \"\\f15c\"; }\n\n.fa-file-archive:before {\n  content: \"\\f1c6\"; }\n\n.fa-file-audio:before {\n  content: \"\\f1c7\"; }\n\n.fa-file-code:before {\n  content: \"\\f1c9\"; }\n\n.fa-file-excel:before {\n  content: \"\\f1c3\"; }\n\n.fa-file-image:before {\n  content: \"\\f1c5\"; }\n\n.fa-file-pdf:before {\n  content: \"\\f1c1\"; }\n\n.fa-file-powerpoint:before {\n  content: \"\\f1c4\"; }\n\n.fa-file-video:before {\n  content: \"\\f1c8\"; }\n\n.fa-file-word:before {\n  content: \"\\f1c2\"; }\n\n.fa-film:before {\n  content: \"\\f008\"; }\n\n.fa-filter:before {\n  content: \"\\f0b0\"; }\n\n.fa-fire:before {\n  content: \"\\f06d\"; }\n\n.fa-fire-extinguisher:before {\n  content: \"\\f134\"; }\n\n.fa-firefox:before {\n  content: \"\\f269\"; }\n\n.fa-first-aid:before {\n  content: \"\\f479\"; }\n\n.fa-first-order:before {\n  content: \"\\f2b0\"; }\n\n.fa-firstdraft:before {\n  content: \"\\f3a1\"; }\n\n.fa-flag:before {\n  content: \"\\f024\"; }\n\n.fa-flag-checkered:before {\n  content: \"\\f11e\"; }\n\n.fa-flask:before {\n  content: \"\\f0c3\"; }\n\n.fa-flickr:before {\n  content: \"\\f16e\"; }\n\n.fa-flipboard:before {\n  content: \"\\f44d\"; }\n\n.fa-fly:before {\n  content: \"\\f417\"; }\n\n.fa-folder:before {\n  content: \"\\f07b\"; }\n\n.fa-folder-open:before {\n  content: \"\\f07c\"; }\n\n.fa-font:before {\n  content: \"\\f031\"; }\n\n.fa-font-awesome:before {\n  content: \"\\f2b4\"; }\n\n.fa-font-awesome-alt:before {\n  content: \"\\f35c\"; }\n\n.fa-font-awesome-flag:before {\n  content: \"\\f425\"; }\n\n.fa-fonticons:before {\n  content: \"\\f280\"; }\n\n.fa-fonticons-fi:before {\n  content: \"\\f3a2\"; }\n\n.fa-football-ball:before {\n  content: \"\\f44e\"; }\n\n.fa-fort-awesome:before {\n  content: \"\\f286\"; }\n\n.fa-fort-awesome-alt:before {\n  content: \"\\f3a3\"; }\n\n.fa-forumbee:before {\n  content: \"\\f211\"; }\n\n.fa-forward:before {\n  content: \"\\f04e\"; }\n\n.fa-foursquare:before {\n  content: \"\\f180\"; }\n\n.fa-free-code-camp:before {\n  content: \"\\f2c5\"; }\n\n.fa-freebsd:before {\n  content: \"\\f3a4\"; }\n\n.fa-frown:before {\n  content: \"\\f119\"; }\n\n.fa-futbol:before {\n  content: \"\\f1e3\"; }\n\n.fa-gamepad:before {\n  content: \"\\f11b\"; }\n\n.fa-gavel:before {\n  content: \"\\f0e3\"; }\n\n.fa-gem:before {\n  content: \"\\f3a5\"; }\n\n.fa-genderless:before {\n  content: \"\\f22d\"; }\n\n.fa-get-pocket:before {\n  content: \"\\f265\"; }\n\n.fa-gg:before {\n  content: \"\\f260\"; }\n\n.fa-gg-circle:before {\n  content: \"\\f261\"; }\n\n.fa-gift:before {\n  content: \"\\f06b\"; }\n\n.fa-git:before {\n  content: \"\\f1d3\"; }\n\n.fa-git-square:before {\n  content: \"\\f1d2\"; }\n\n.fa-github:before {\n  content: \"\\f09b\"; }\n\n.fa-github-alt:before {\n  content: \"\\f113\"; }\n\n.fa-github-square:before {\n  content: \"\\f092\"; }\n\n.fa-gitkraken:before {\n  content: \"\\f3a6\"; }\n\n.fa-gitlab:before {\n  content: \"\\f296\"; }\n\n.fa-gitter:before {\n  content: \"\\f426\"; }\n\n.fa-glass-martini:before {\n  content: \"\\f000\"; }\n\n.fa-glide:before {\n  content: \"\\f2a5\"; }\n\n.fa-glide-g:before {\n  content: \"\\f2a6\"; }\n\n.fa-globe:before {\n  content: \"\\f0ac\"; }\n\n.fa-gofore:before {\n  content: \"\\f3a7\"; }\n\n.fa-golf-ball:before {\n  content: \"\\f450\"; }\n\n.fa-goodreads:before {\n  content: \"\\f3a8\"; }\n\n.fa-goodreads-g:before {\n  content: \"\\f3a9\"; }\n\n.fa-google:before {\n  content: \"\\f1a0\"; }\n\n.fa-google-drive:before {\n  content: \"\\f3aa\"; }\n\n.fa-google-play:before {\n  content: \"\\f3ab\"; }\n\n.fa-google-plus:before {\n  content: \"\\f2b3\"; }\n\n.fa-google-plus-g:before {\n  content: \"\\f0d5\"; }\n\n.fa-google-plus-square:before {\n  content: \"\\f0d4\"; }\n\n.fa-google-wallet:before {\n  content: \"\\f1ee\"; }\n\n.fa-graduation-cap:before {\n  content: \"\\f19d\"; }\n\n.fa-gratipay:before {\n  content: \"\\f184\"; }\n\n.fa-grav:before {\n  content: \"\\f2d6\"; }\n\n.fa-gripfire:before {\n  content: \"\\f3ac\"; }\n\n.fa-grunt:before {\n  content: \"\\f3ad\"; }\n\n.fa-gulp:before {\n  content: \"\\f3ae\"; }\n\n.fa-h-square:before {\n  content: \"\\f0fd\"; }\n\n.fa-hacker-news:before {\n  content: \"\\f1d4\"; }\n\n.fa-hacker-news-square:before {\n  content: \"\\f3af\"; }\n\n.fa-hand-lizard:before {\n  content: \"\\f258\"; }\n\n.fa-hand-paper:before {\n  content: \"\\f256\"; }\n\n.fa-hand-peace:before {\n  content: \"\\f25b\"; }\n\n.fa-hand-point-down:before {\n  content: \"\\f0a7\"; }\n\n.fa-hand-point-left:before {\n  content: \"\\f0a5\"; }\n\n.fa-hand-point-right:before {\n  content: \"\\f0a4\"; }\n\n.fa-hand-point-up:before {\n  content: \"\\f0a6\"; }\n\n.fa-hand-pointer:before {\n  content: \"\\f25a\"; }\n\n.fa-hand-rock:before {\n  content: \"\\f255\"; }\n\n.fa-hand-scissors:before {\n  content: \"\\f257\"; }\n\n.fa-hand-spock:before {\n  content: \"\\f259\"; }\n\n.fa-handshake:before {\n  content: \"\\f2b5\"; }\n\n.fa-hashtag:before {\n  content: \"\\f292\"; }\n\n.fa-hdd:before {\n  content: \"\\f0a0\"; }\n\n.fa-heading:before {\n  content: \"\\f1dc\"; }\n\n.fa-headphones:before {\n  content: \"\\f025\"; }\n\n.fa-heart:before {\n  content: \"\\f004\"; }\n\n.fa-heartbeat:before {\n  content: \"\\f21e\"; }\n\n.fa-hips:before {\n  content: \"\\f452\"; }\n\n.fa-hire-a-helper:before {\n  content: \"\\f3b0\"; }\n\n.fa-history:before {\n  content: \"\\f1da\"; }\n\n.fa-hockey-puck:before {\n  content: \"\\f453\"; }\n\n.fa-home:before {\n  content: \"\\f015\"; }\n\n.fa-hooli:before {\n  content: \"\\f427\"; }\n\n.fa-hospital:before {\n  content: \"\\f0f8\"; }\n\n.fa-hospital-symbol:before {\n  content: \"\\f47e\"; }\n\n.fa-hotjar:before {\n  content: \"\\f3b1\"; }\n\n.fa-hourglass:before {\n  content: \"\\f254\"; }\n\n.fa-hourglass-end:before {\n  content: \"\\f253\"; }\n\n.fa-hourglass-half:before {\n  content: \"\\f252\"; }\n\n.fa-hourglass-start:before {\n  content: \"\\f251\"; }\n\n.fa-houzz:before {\n  content: \"\\f27c\"; }\n\n.fa-html5:before {\n  content: \"\\f13b\"; }\n\n.fa-hubspot:before {\n  content: \"\\f3b2\"; }\n\n.fa-i-cursor:before {\n  content: \"\\f246\"; }\n\n.fa-id-badge:before {\n  content: \"\\f2c1\"; }\n\n.fa-id-card:before {\n  content: \"\\f2c2\"; }\n\n.fa-image:before {\n  content: \"\\f03e\"; }\n\n.fa-images:before {\n  content: \"\\f302\"; }\n\n.fa-imdb:before {\n  content: \"\\f2d8\"; }\n\n.fa-inbox:before {\n  content: \"\\f01c\"; }\n\n.fa-indent:before {\n  content: \"\\f03c\"; }\n\n.fa-industry:before {\n  content: \"\\f275\"; }\n\n.fa-info:before {\n  content: \"\\f129\"; }\n\n.fa-info-circle:before {\n  content: \"\\f05a\"; }\n\n.fa-instagram:before {\n  content: \"\\f16d\"; }\n\n.fa-internet-explorer:before {\n  content: \"\\f26b\"; }\n\n.fa-ioxhost:before {\n  content: \"\\f208\"; }\n\n.fa-italic:before {\n  content: \"\\f033\"; }\n\n.fa-itunes:before {\n  content: \"\\f3b4\"; }\n\n.fa-itunes-note:before {\n  content: \"\\f3b5\"; }\n\n.fa-jenkins:before {\n  content: \"\\f3b6\"; }\n\n.fa-joget:before {\n  content: \"\\f3b7\"; }\n\n.fa-joomla:before {\n  content: \"\\f1aa\"; }\n\n.fa-js:before {\n  content: \"\\f3b8\"; }\n\n.fa-js-square:before {\n  content: \"\\f3b9\"; }\n\n.fa-jsfiddle:before {\n  content: \"\\f1cc\"; }\n\n.fa-key:before {\n  content: \"\\f084\"; }\n\n.fa-keyboard:before {\n  content: \"\\f11c\"; }\n\n.fa-keycdn:before {\n  content: \"\\f3ba\"; }\n\n.fa-kickstarter:before {\n  content: \"\\f3bb\"; }\n\n.fa-kickstarter-k:before {\n  content: \"\\f3bc\"; }\n\n.fa-korvue:before {\n  content: \"\\f42f\"; }\n\n.fa-language:before {\n  content: \"\\f1ab\"; }\n\n.fa-laptop:before {\n  content: \"\\f109\"; }\n\n.fa-laravel:before {\n  content: \"\\f3bd\"; }\n\n.fa-lastfm:before {\n  content: \"\\f202\"; }\n\n.fa-lastfm-square:before {\n  content: \"\\f203\"; }\n\n.fa-leaf:before {\n  content: \"\\f06c\"; }\n\n.fa-leanpub:before {\n  content: \"\\f212\"; }\n\n.fa-lemon:before {\n  content: \"\\f094\"; }\n\n.fa-less:before {\n  content: \"\\f41d\"; }\n\n.fa-level-down-alt:before {\n  content: \"\\f3be\"; }\n\n.fa-level-up-alt:before {\n  content: \"\\f3bf\"; }\n\n.fa-life-ring:before {\n  content: \"\\f1cd\"; }\n\n.fa-lightbulb:before {\n  content: \"\\f0eb\"; }\n\n.fa-line:before {\n  content: \"\\f3c0\"; }\n\n.fa-link:before {\n  content: \"\\f0c1\"; }\n\n.fa-linkedin:before {\n  content: \"\\f08c\"; }\n\n.fa-linkedin-in:before {\n  content: \"\\f0e1\"; }\n\n.fa-linode:before {\n  content: \"\\f2b8\"; }\n\n.fa-linux:before {\n  content: \"\\f17c\"; }\n\n.fa-lira-sign:before {\n  content: \"\\f195\"; }\n\n.fa-list:before {\n  content: \"\\f03a\"; }\n\n.fa-list-alt:before {\n  content: \"\\f022\"; }\n\n.fa-list-ol:before {\n  content: \"\\f0cb\"; }\n\n.fa-list-ul:before {\n  content: \"\\f0ca\"; }\n\n.fa-location-arrow:before {\n  content: \"\\f124\"; }\n\n.fa-lock:before {\n  content: \"\\f023\"; }\n\n.fa-lock-open:before {\n  content: \"\\f3c1\"; }\n\n.fa-long-arrow-alt-down:before {\n  content: \"\\f309\"; }\n\n.fa-long-arrow-alt-left:before {\n  content: \"\\f30a\"; }\n\n.fa-long-arrow-alt-right:before {\n  content: \"\\f30b\"; }\n\n.fa-long-arrow-alt-up:before {\n  content: \"\\f30c\"; }\n\n.fa-low-vision:before {\n  content: \"\\f2a8\"; }\n\n.fa-lyft:before {\n  content: \"\\f3c3\"; }\n\n.fa-magento:before {\n  content: \"\\f3c4\"; }\n\n.fa-magic:before {\n  content: \"\\f0d0\"; }\n\n.fa-magnet:before {\n  content: \"\\f076\"; }\n\n.fa-male:before {\n  content: \"\\f183\"; }\n\n.fa-map:before {\n  content: \"\\f279\"; }\n\n.fa-map-marker:before {\n  content: \"\\f041\"; }\n\n.fa-map-marker-alt:before {\n  content: \"\\f3c5\"; }\n\n.fa-map-pin:before {\n  content: \"\\f276\"; }\n\n.fa-map-signs:before {\n  content: \"\\f277\"; }\n\n.fa-mars:before {\n  content: \"\\f222\"; }\n\n.fa-mars-double:before {\n  content: \"\\f227\"; }\n\n.fa-mars-stroke:before {\n  content: \"\\f229\"; }\n\n.fa-mars-stroke-h:before {\n  content: \"\\f22b\"; }\n\n.fa-mars-stroke-v:before {\n  content: \"\\f22a\"; }\n\n.fa-maxcdn:before {\n  content: \"\\f136\"; }\n\n.fa-medapps:before {\n  content: \"\\f3c6\"; }\n\n.fa-medium:before {\n  content: \"\\f23a\"; }\n\n.fa-medium-m:before {\n  content: \"\\f3c7\"; }\n\n.fa-medkit:before {\n  content: \"\\f0fa\"; }\n\n.fa-medrt:before {\n  content: \"\\f3c8\"; }\n\n.fa-meetup:before {\n  content: \"\\f2e0\"; }\n\n.fa-meh:before {\n  content: \"\\f11a\"; }\n\n.fa-mercury:before {\n  content: \"\\f223\"; }\n\n.fa-microchip:before {\n  content: \"\\f2db\"; }\n\n.fa-microphone:before {\n  content: \"\\f130\"; }\n\n.fa-microphone-slash:before {\n  content: \"\\f131\"; }\n\n.fa-microsoft:before {\n  content: \"\\f3ca\"; }\n\n.fa-minus:before {\n  content: \"\\f068\"; }\n\n.fa-minus-circle:before {\n  content: \"\\f056\"; }\n\n.fa-minus-square:before {\n  content: \"\\f146\"; }\n\n.fa-mix:before {\n  content: \"\\f3cb\"; }\n\n.fa-mixcloud:before {\n  content: \"\\f289\"; }\n\n.fa-mizuni:before {\n  content: \"\\f3cc\"; }\n\n.fa-mobile:before {\n  content: \"\\f10b\"; }\n\n.fa-mobile-alt:before {\n  content: \"\\f3cd\"; }\n\n.fa-modx:before {\n  content: \"\\f285\"; }\n\n.fa-monero:before {\n  content: \"\\f3d0\"; }\n\n.fa-money-bill-alt:before {\n  content: \"\\f3d1\"; }\n\n.fa-moon:before {\n  content: \"\\f186\"; }\n\n.fa-motorcycle:before {\n  content: \"\\f21c\"; }\n\n.fa-mouse-pointer:before {\n  content: \"\\f245\"; }\n\n.fa-music:before {\n  content: \"\\f001\"; }\n\n.fa-napster:before {\n  content: \"\\f3d2\"; }\n\n.fa-neuter:before {\n  content: \"\\f22c\"; }\n\n.fa-newspaper:before {\n  content: \"\\f1ea\"; }\n\n.fa-nintendo-switch:before {\n  content: \"\\f418\"; }\n\n.fa-node:before {\n  content: \"\\f419\"; }\n\n.fa-node-js:before {\n  content: \"\\f3d3\"; }\n\n.fa-npm:before {\n  content: \"\\f3d4\"; }\n\n.fa-ns8:before {\n  content: \"\\f3d5\"; }\n\n.fa-nutritionix:before {\n  content: \"\\f3d6\"; }\n\n.fa-object-group:before {\n  content: \"\\f247\"; }\n\n.fa-object-ungroup:before {\n  content: \"\\f248\"; }\n\n.fa-odnoklassniki:before {\n  content: \"\\f263\"; }\n\n.fa-odnoklassniki-square:before {\n  content: \"\\f264\"; }\n\n.fa-opencart:before {\n  content: \"\\f23d\"; }\n\n.fa-openid:before {\n  content: \"\\f19b\"; }\n\n.fa-opera:before {\n  content: \"\\f26a\"; }\n\n.fa-optin-monster:before {\n  content: \"\\f23c\"; }\n\n.fa-osi:before {\n  content: \"\\f41a\"; }\n\n.fa-outdent:before {\n  content: \"\\f03b\"; }\n\n.fa-page4:before {\n  content: \"\\f3d7\"; }\n\n.fa-pagelines:before {\n  content: \"\\f18c\"; }\n\n.fa-paint-brush:before {\n  content: \"\\f1fc\"; }\n\n.fa-palfed:before {\n  content: \"\\f3d8\"; }\n\n.fa-pallet:before {\n  content: \"\\f482\"; }\n\n.fa-paper-plane:before {\n  content: \"\\f1d8\"; }\n\n.fa-paperclip:before {\n  content: \"\\f0c6\"; }\n\n.fa-paragraph:before {\n  content: \"\\f1dd\"; }\n\n.fa-paste:before {\n  content: \"\\f0ea\"; }\n\n.fa-patreon:before {\n  content: \"\\f3d9\"; }\n\n.fa-pause:before {\n  content: \"\\f04c\"; }\n\n.fa-pause-circle:before {\n  content: \"\\f28b\"; }\n\n.fa-paw:before {\n  content: \"\\f1b0\"; }\n\n.fa-paypal:before {\n  content: \"\\f1ed\"; }\n\n.fa-pen-square:before {\n  content: \"\\f14b\"; }\n\n.fa-pencil-alt:before {\n  content: \"\\f303\"; }\n\n.fa-percent:before {\n  content: \"\\f295\"; }\n\n.fa-periscope:before {\n  content: \"\\f3da\"; }\n\n.fa-phabricator:before {\n  content: \"\\f3db\"; }\n\n.fa-phoenix-framework:before {\n  content: \"\\f3dc\"; }\n\n.fa-phone:before {\n  content: \"\\f095\"; }\n\n.fa-phone-square:before {\n  content: \"\\f098\"; }\n\n.fa-phone-volume:before {\n  content: \"\\f2a0\"; }\n\n.fa-php:before {\n  content: \"\\f457\"; }\n\n.fa-pied-piper:before {\n  content: \"\\f2ae\"; }\n\n.fa-pied-piper-alt:before {\n  content: \"\\f1a8\"; }\n\n.fa-pied-piper-pp:before {\n  content: \"\\f1a7\"; }\n\n.fa-pills:before {\n  content: \"\\f484\"; }\n\n.fa-pinterest:before {\n  content: \"\\f0d2\"; }\n\n.fa-pinterest-p:before {\n  content: \"\\f231\"; }\n\n.fa-pinterest-square:before {\n  content: \"\\f0d3\"; }\n\n.fa-plane:before {\n  content: \"\\f072\"; }\n\n.fa-play:before {\n  content: \"\\f04b\"; }\n\n.fa-play-circle:before {\n  content: \"\\f144\"; }\n\n.fa-playstation:before {\n  content: \"\\f3df\"; }\n\n.fa-plug:before {\n  content: \"\\f1e6\"; }\n\n.fa-plus:before {\n  content: \"\\f067\"; }\n\n.fa-plus-circle:before {\n  content: \"\\f055\"; }\n\n.fa-plus-square:before {\n  content: \"\\f0fe\"; }\n\n.fa-podcast:before {\n  content: \"\\f2ce\"; }\n\n.fa-pound-sign:before {\n  content: \"\\f154\"; }\n\n.fa-power-off:before {\n  content: \"\\f011\"; }\n\n.fa-print:before {\n  content: \"\\f02f\"; }\n\n.fa-product-hunt:before {\n  content: \"\\f288\"; }\n\n.fa-pushed:before {\n  content: \"\\f3e1\"; }\n\n.fa-puzzle-piece:before {\n  content: \"\\f12e\"; }\n\n.fa-python:before {\n  content: \"\\f3e2\"; }\n\n.fa-qq:before {\n  content: \"\\f1d6\"; }\n\n.fa-qrcode:before {\n  content: \"\\f029\"; }\n\n.fa-question:before {\n  content: \"\\f128\"; }\n\n.fa-question-circle:before {\n  content: \"\\f059\"; }\n\n.fa-quidditch:before {\n  content: \"\\f458\"; }\n\n.fa-quinscape:before {\n  content: \"\\f459\"; }\n\n.fa-quora:before {\n  content: \"\\f2c4\"; }\n\n.fa-quote-left:before {\n  content: \"\\f10d\"; }\n\n.fa-quote-right:before {\n  content: \"\\f10e\"; }\n\n.fa-random:before {\n  content: \"\\f074\"; }\n\n.fa-ravelry:before {\n  content: \"\\f2d9\"; }\n\n.fa-react:before {\n  content: \"\\f41b\"; }\n\n.fa-rebel:before {\n  content: \"\\f1d0\"; }\n\n.fa-recycle:before {\n  content: \"\\f1b8\"; }\n\n.fa-red-river:before {\n  content: \"\\f3e3\"; }\n\n.fa-reddit:before {\n  content: \"\\f1a1\"; }\n\n.fa-reddit-alien:before {\n  content: \"\\f281\"; }\n\n.fa-reddit-square:before {\n  content: \"\\f1a2\"; }\n\n.fa-redo:before {\n  content: \"\\f01e\"; }\n\n.fa-redo-alt:before {\n  content: \"\\f2f9\"; }\n\n.fa-registered:before {\n  content: \"\\f25d\"; }\n\n.fa-rendact:before {\n  content: \"\\f3e4\"; }\n\n.fa-renren:before {\n  content: \"\\f18b\"; }\n\n.fa-reply:before {\n  content: \"\\f3e5\"; }\n\n.fa-reply-all:before {\n  content: \"\\f122\"; }\n\n.fa-replyd:before {\n  content: \"\\f3e6\"; }\n\n.fa-resolving:before {\n  content: \"\\f3e7\"; }\n\n.fa-retweet:before {\n  content: \"\\f079\"; }\n\n.fa-road:before {\n  content: \"\\f018\"; }\n\n.fa-rocket:before {\n  content: \"\\f135\"; }\n\n.fa-rocketchat:before {\n  content: \"\\f3e8\"; }\n\n.fa-rockrms:before {\n  content: \"\\f3e9\"; }\n\n.fa-rss:before {\n  content: \"\\f09e\"; }\n\n.fa-rss-square:before {\n  content: \"\\f143\"; }\n\n.fa-ruble-sign:before {\n  content: \"\\f158\"; }\n\n.fa-rupee-sign:before {\n  content: \"\\f156\"; }\n\n.fa-safari:before {\n  content: \"\\f267\"; }\n\n.fa-sass:before {\n  content: \"\\f41e\"; }\n\n.fa-save:before {\n  content: \"\\f0c7\"; }\n\n.fa-schlix:before {\n  content: \"\\f3ea\"; }\n\n.fa-scribd:before {\n  content: \"\\f28a\"; }\n\n.fa-search:before {\n  content: \"\\f002\"; }\n\n.fa-search-minus:before {\n  content: \"\\f010\"; }\n\n.fa-search-plus:before {\n  content: \"\\f00e\"; }\n\n.fa-searchengin:before {\n  content: \"\\f3eb\"; }\n\n.fa-sellcast:before {\n  content: \"\\f2da\"; }\n\n.fa-sellsy:before {\n  content: \"\\f213\"; }\n\n.fa-server:before {\n  content: \"\\f233\"; }\n\n.fa-servicestack:before {\n  content: \"\\f3ec\"; }\n\n.fa-share:before {\n  content: \"\\f064\"; }\n\n.fa-share-alt:before {\n  content: \"\\f1e0\"; }\n\n.fa-share-alt-square:before {\n  content: \"\\f1e1\"; }\n\n.fa-share-square:before {\n  content: \"\\f14d\"; }\n\n.fa-shekel-sign:before {\n  content: \"\\f20b\"; }\n\n.fa-shield-alt:before {\n  content: \"\\f3ed\"; }\n\n.fa-ship:before {\n  content: \"\\f21a\"; }\n\n.fa-shipping-fast:before {\n  content: \"\\f48b\"; }\n\n.fa-shirtsinbulk:before {\n  content: \"\\f214\"; }\n\n.fa-shopping-bag:before {\n  content: \"\\f290\"; }\n\n.fa-shopping-basket:before {\n  content: \"\\f291\"; }\n\n.fa-shopping-cart:before {\n  content: \"\\f07a\"; }\n\n.fa-shower:before {\n  content: \"\\f2cc\"; }\n\n.fa-sign-in-alt:before {\n  content: \"\\f2f6\"; }\n\n.fa-sign-language:before {\n  content: \"\\f2a7\"; }\n\n.fa-sign-out-alt:before {\n  content: \"\\f2f5\"; }\n\n.fa-signal:before {\n  content: \"\\f012\"; }\n\n.fa-simplybuilt:before {\n  content: \"\\f215\"; }\n\n.fa-sistrix:before {\n  content: \"\\f3ee\"; }\n\n.fa-sitemap:before {\n  content: \"\\f0e8\"; }\n\n.fa-skyatlas:before {\n  content: \"\\f216\"; }\n\n.fa-skype:before {\n  content: \"\\f17e\"; }\n\n.fa-slack:before {\n  content: \"\\f198\"; }\n\n.fa-slack-hash:before {\n  content: \"\\f3ef\"; }\n\n.fa-sliders-h:before {\n  content: \"\\f1de\"; }\n\n.fa-slideshare:before {\n  content: \"\\f1e7\"; }\n\n.fa-smile:before {\n  content: \"\\f118\"; }\n\n.fa-snapchat:before {\n  content: \"\\f2ab\"; }\n\n.fa-snapchat-ghost:before {\n  content: \"\\f2ac\"; }\n\n.fa-snapchat-square:before {\n  content: \"\\f2ad\"; }\n\n.fa-snowflake:before {\n  content: \"\\f2dc\"; }\n\n.fa-sort:before {\n  content: \"\\f0dc\"; }\n\n.fa-sort-alpha-down:before {\n  content: \"\\f15d\"; }\n\n.fa-sort-alpha-up:before {\n  content: \"\\f15e\"; }\n\n.fa-sort-amount-down:before {\n  content: \"\\f160\"; }\n\n.fa-sort-amount-up:before {\n  content: \"\\f161\"; }\n\n.fa-sort-down:before {\n  content: \"\\f0dd\"; }\n\n.fa-sort-numeric-down:before {\n  content: \"\\f162\"; }\n\n.fa-sort-numeric-up:before {\n  content: \"\\f163\"; }\n\n.fa-sort-up:before {\n  content: \"\\f0de\"; }\n\n.fa-soundcloud:before {\n  content: \"\\f1be\"; }\n\n.fa-space-shuttle:before {\n  content: \"\\f197\"; }\n\n.fa-speakap:before {\n  content: \"\\f3f3\"; }\n\n.fa-spinner:before {\n  content: \"\\f110\"; }\n\n.fa-spotify:before {\n  content: \"\\f1bc\"; }\n\n.fa-square:before {\n  content: \"\\f0c8\"; }\n\n.fa-square-full:before {\n  content: \"\\f45c\"; }\n\n.fa-stack-exchange:before {\n  content: \"\\f18d\"; }\n\n.fa-stack-overflow:before {\n  content: \"\\f16c\"; }\n\n.fa-star:before {\n  content: \"\\f005\"; }\n\n.fa-star-half:before {\n  content: \"\\f089\"; }\n\n.fa-staylinked:before {\n  content: \"\\f3f5\"; }\n\n.fa-steam:before {\n  content: \"\\f1b6\"; }\n\n.fa-steam-square:before {\n  content: \"\\f1b7\"; }\n\n.fa-steam-symbol:before {\n  content: \"\\f3f6\"; }\n\n.fa-step-backward:before {\n  content: \"\\f048\"; }\n\n.fa-step-forward:before {\n  content: \"\\f051\"; }\n\n.fa-stethoscope:before {\n  content: \"\\f0f1\"; }\n\n.fa-sticker-mule:before {\n  content: \"\\f3f7\"; }\n\n.fa-sticky-note:before {\n  content: \"\\f249\"; }\n\n.fa-stop:before {\n  content: \"\\f04d\"; }\n\n.fa-stop-circle:before {\n  content: \"\\f28d\"; }\n\n.fa-stopwatch:before {\n  content: \"\\f2f2\"; }\n\n.fa-strava:before {\n  content: \"\\f428\"; }\n\n.fa-street-view:before {\n  content: \"\\f21d\"; }\n\n.fa-strikethrough:before {\n  content: \"\\f0cc\"; }\n\n.fa-stripe:before {\n  content: \"\\f429\"; }\n\n.fa-stripe-s:before {\n  content: \"\\f42a\"; }\n\n.fa-studiovinari:before {\n  content: \"\\f3f8\"; }\n\n.fa-stumbleupon:before {\n  content: \"\\f1a4\"; }\n\n.fa-stumbleupon-circle:before {\n  content: \"\\f1a3\"; }\n\n.fa-subscript:before {\n  content: \"\\f12c\"; }\n\n.fa-subway:before {\n  content: \"\\f239\"; }\n\n.fa-suitcase:before {\n  content: \"\\f0f2\"; }\n\n.fa-sun:before {\n  content: \"\\f185\"; }\n\n.fa-superpowers:before {\n  content: \"\\f2dd\"; }\n\n.fa-superscript:before {\n  content: \"\\f12b\"; }\n\n.fa-supple:before {\n  content: \"\\f3f9\"; }\n\n.fa-sync:before {\n  content: \"\\f021\"; }\n\n.fa-sync-alt:before {\n  content: \"\\f2f1\"; }\n\n.fa-syringe:before {\n  content: \"\\f48e\"; }\n\n.fa-table:before {\n  content: \"\\f0ce\"; }\n\n.fa-table-tennis:before {\n  content: \"\\f45d\"; }\n\n.fa-tablet:before {\n  content: \"\\f10a\"; }\n\n.fa-tablet-alt:before {\n  content: \"\\f3fa\"; }\n\n.fa-tachometer-alt:before {\n  content: \"\\f3fd\"; }\n\n.fa-tag:before {\n  content: \"\\f02b\"; }\n\n.fa-tags:before {\n  content: \"\\f02c\"; }\n\n.fa-tasks:before {\n  content: \"\\f0ae\"; }\n\n.fa-taxi:before {\n  content: \"\\f1ba\"; }\n\n.fa-telegram:before {\n  content: \"\\f2c6\"; }\n\n.fa-telegram-plane:before {\n  content: \"\\f3fe\"; }\n\n.fa-tencent-weibo:before {\n  content: \"\\f1d5\"; }\n\n.fa-terminal:before {\n  content: \"\\f120\"; }\n\n.fa-text-height:before {\n  content: \"\\f034\"; }\n\n.fa-text-width:before {\n  content: \"\\f035\"; }\n\n.fa-th:before {\n  content: \"\\f00a\"; }\n\n.fa-th-large:before {\n  content: \"\\f009\"; }\n\n.fa-th-list:before {\n  content: \"\\f00b\"; }\n\n.fa-themeisle:before {\n  content: \"\\f2b2\"; }\n\n.fa-thermometer:before {\n  content: \"\\f491\"; }\n\n.fa-thermometer-empty:before {\n  content: \"\\f2cb\"; }\n\n.fa-thermometer-full:before {\n  content: \"\\f2c7\"; }\n\n.fa-thermometer-half:before {\n  content: \"\\f2c9\"; }\n\n.fa-thermometer-quarter:before {\n  content: \"\\f2ca\"; }\n\n.fa-thermometer-three-quarters:before {\n  content: \"\\f2c8\"; }\n\n.fa-thumbs-down:before {\n  content: \"\\f165\"; }\n\n.fa-thumbs-up:before {\n  content: \"\\f164\"; }\n\n.fa-thumbtack:before {\n  content: \"\\f08d\"; }\n\n.fa-ticket-alt:before {\n  content: \"\\f3ff\"; }\n\n.fa-times:before {\n  content: \"\\f00d\"; }\n\n.fa-times-circle:before {\n  content: \"\\f057\"; }\n\n.fa-tint:before {\n  content: \"\\f043\"; }\n\n.fa-toggle-off:before {\n  content: \"\\f204\"; }\n\n.fa-toggle-on:before {\n  content: \"\\f205\"; }\n\n.fa-trademark:before {\n  content: \"\\f25c\"; }\n\n.fa-train:before {\n  content: \"\\f238\"; }\n\n.fa-transgender:before {\n  content: \"\\f224\"; }\n\n.fa-transgender-alt:before {\n  content: \"\\f225\"; }\n\n.fa-trash:before {\n  content: \"\\f1f8\"; }\n\n.fa-trash-alt:before {\n  content: \"\\f2ed\"; }\n\n.fa-tree:before {\n  content: \"\\f1bb\"; }\n\n.fa-trello:before {\n  content: \"\\f181\"; }\n\n.fa-tripadvisor:before {\n  content: \"\\f262\"; }\n\n.fa-trophy:before {\n  content: \"\\f091\"; }\n\n.fa-truck:before {\n  content: \"\\f0d1\"; }\n\n.fa-tty:before {\n  content: \"\\f1e4\"; }\n\n.fa-tumblr:before {\n  content: \"\\f173\"; }\n\n.fa-tumblr-square:before {\n  content: \"\\f174\"; }\n\n.fa-tv:before {\n  content: \"\\f26c\"; }\n\n.fa-twitch:before {\n  content: \"\\f1e8\"; }\n\n.fa-twitter:before {\n  content: \"\\f099\"; }\n\n.fa-twitter-square:before {\n  content: \"\\f081\"; }\n\n.fa-typo3:before {\n  content: \"\\f42b\"; }\n\n.fa-uber:before {\n  content: \"\\f402\"; }\n\n.fa-uikit:before {\n  content: \"\\f403\"; }\n\n.fa-umbrella:before {\n  content: \"\\f0e9\"; }\n\n.fa-underline:before {\n  content: \"\\f0cd\"; }\n\n.fa-undo:before {\n  content: \"\\f0e2\"; }\n\n.fa-undo-alt:before {\n  content: \"\\f2ea\"; }\n\n.fa-uniregistry:before {\n  content: \"\\f404\"; }\n\n.fa-universal-access:before {\n  content: \"\\f29a\"; }\n\n.fa-university:before {\n  content: \"\\f19c\"; }\n\n.fa-unlink:before {\n  content: \"\\f127\"; }\n\n.fa-unlock:before {\n  content: \"\\f09c\"; }\n\n.fa-unlock-alt:before {\n  content: \"\\f13e\"; }\n\n.fa-untappd:before {\n  content: \"\\f405\"; }\n\n.fa-upload:before {\n  content: \"\\f093\"; }\n\n.fa-usb:before {\n  content: \"\\f287\"; }\n\n.fa-user:before {\n  content: \"\\f007\"; }\n\n.fa-user-circle:before {\n  content: \"\\f2bd\"; }\n\n.fa-user-md:before {\n  content: \"\\f0f0\"; }\n\n.fa-user-plus:before {\n  content: \"\\f234\"; }\n\n.fa-user-secret:before {\n  content: \"\\f21b\"; }\n\n.fa-user-times:before {\n  content: \"\\f235\"; }\n\n.fa-users:before {\n  content: \"\\f0c0\"; }\n\n.fa-ussunnah:before {\n  content: \"\\f407\"; }\n\n.fa-utensil-spoon:before {\n  content: \"\\f2e5\"; }\n\n.fa-utensils:before {\n  content: \"\\f2e7\"; }\n\n.fa-vaadin:before {\n  content: \"\\f408\"; }\n\n.fa-venus:before {\n  content: \"\\f221\"; }\n\n.fa-venus-double:before {\n  content: \"\\f226\"; }\n\n.fa-venus-mars:before {\n  content: \"\\f228\"; }\n\n.fa-viacoin:before {\n  content: \"\\f237\"; }\n\n.fa-viadeo:before {\n  content: \"\\f2a9\"; }\n\n.fa-viadeo-square:before {\n  content: \"\\f2aa\"; }\n\n.fa-viber:before {\n  content: \"\\f409\"; }\n\n.fa-video:before {\n  content: \"\\f03d\"; }\n\n.fa-vimeo:before {\n  content: \"\\f40a\"; }\n\n.fa-vimeo-square:before {\n  content: \"\\f194\"; }\n\n.fa-vimeo-v:before {\n  content: \"\\f27d\"; }\n\n.fa-vine:before {\n  content: \"\\f1ca\"; }\n\n.fa-vk:before {\n  content: \"\\f189\"; }\n\n.fa-vnv:before {\n  content: \"\\f40b\"; }\n\n.fa-volleyball-ball:before {\n  content: \"\\f45f\"; }\n\n.fa-volume-down:before {\n  content: \"\\f027\"; }\n\n.fa-volume-off:before {\n  content: \"\\f026\"; }\n\n.fa-volume-up:before {\n  content: \"\\f028\"; }\n\n.fa-vuejs:before {\n  content: \"\\f41f\"; }\n\n.fa-warehouse:before {\n  content: \"\\f494\"; }\n\n.fa-weibo:before {\n  content: \"\\f18a\"; }\n\n.fa-weight:before {\n  content: \"\\f496\"; }\n\n.fa-weixin:before {\n  content: \"\\f1d7\"; }\n\n.fa-whatsapp:before {\n  content: \"\\f232\"; }\n\n.fa-whatsapp-square:before {\n  content: \"\\f40c\"; }\n\n.fa-wheelchair:before {\n  content: \"\\f193\"; }\n\n.fa-whmcs:before {\n  content: \"\\f40d\"; }\n\n.fa-wifi:before {\n  content: \"\\f1eb\"; }\n\n.fa-wikipedia-w:before {\n  content: \"\\f266\"; }\n\n.fa-window-close:before {\n  content: \"\\f410\"; }\n\n.fa-window-maximize:before {\n  content: \"\\f2d0\"; }\n\n.fa-window-minimize:before {\n  content: \"\\f2d1\"; }\n\n.fa-window-restore:before {\n  content: \"\\f2d2\"; }\n\n.fa-windows:before {\n  content: \"\\f17a\"; }\n\n.fa-won-sign:before {\n  content: \"\\f159\"; }\n\n.fa-wordpress:before {\n  content: \"\\f19a\"; }\n\n.fa-wordpress-simple:before {\n  content: \"\\f411\"; }\n\n.fa-wpbeginner:before {\n  content: \"\\f297\"; }\n\n.fa-wpexplorer:before {\n  content: \"\\f2de\"; }\n\n.fa-wpforms:before {\n  content: \"\\f298\"; }\n\n.fa-wrench:before {\n  content: \"\\f0ad\"; }\n\n.fa-xbox:before {\n  content: \"\\f412\"; }\n\n.fa-xing:before {\n  content: \"\\f168\"; }\n\n.fa-xing-square:before {\n  content: \"\\f169\"; }\n\n.fa-y-combinator:before {\n  content: \"\\f23b\"; }\n\n.fa-yahoo:before {\n  content: \"\\f19e\"; }\n\n.fa-yandex:before {\n  content: \"\\f413\"; }\n\n.fa-yandex-international:before {\n  content: \"\\f414\"; }\n\n.fa-yelp:before {\n  content: \"\\f1e9\"; }\n\n.fa-yen-sign:before {\n  content: \"\\f157\"; }\n\n.fa-yoast:before {\n  content: \"\\f2b1\"; }\n\n.fa-youtube:before {\n  content: \"\\f167\"; }\n\n.fa-youtube-square:before {\n  content: \"\\f431\"; }\n\n.sr-only {\n  border: 0;\n  clip: rect(0, 0, 0, 0);\n  height: 1px;\n  margin: -1px;\n  overflow: hidden;\n  padding: 0;\n  position: absolute;\n  width: 1px; }\n\n.sr-only-focusable:active, .sr-only-focusable:focus {\n  clip: auto;\n  height: auto;\n  margin: 0;\n  overflow: visible;\n  position: static;\n  width: auto; }\n@font-face {\n  font-family: 'Font Awesome 5 Brands';\n  font-style: normal;\n  font-weight: normal;\n  src: url(\"../webfonts/fa-brands-400.eot\");\n  src: url(\"../webfonts/fa-brands-400.eot?#iefix\") format(\"embedded-opentype\"), url(\"../webfonts/fa-brands-400.woff2\") format(\"woff2\"), url(\"../webfonts/fa-brands-400.woff\") format(\"woff\"), url(\"../webfonts/fa-brands-400.ttf\") format(\"truetype\"), url(\"../webfonts/fa-brands-400.svg#fontawesome\") format(\"svg\"); }\n\n.fab {\n  font-family: 'Font Awesome 5 Brands'; }\n@font-face {\n  font-family: 'Font Awesome 5 Free';\n  font-style: normal;\n  font-weight: 400;\n  src: url(\"../webfonts/fa-regular-400.eot\");\n  src: url(\"../webfonts/fa-regular-400.eot?#iefix\") format(\"embedded-opentype\"), url(\"../webfonts/fa-regular-400.woff2\") format(\"woff2\"), url(\"../webfonts/fa-regular-400.woff\") format(\"woff\"), url(\"../webfonts/fa-regular-400.ttf\") format(\"truetype\"), url(\"../webfonts/fa-regular-400.svg#fontawesome\") format(\"svg\"); }\n\n.far {\n  font-family: 'Font Awesome 5 Free';\n  font-weight: 400; }\n@font-face {\n  font-family: 'Font Awesome 5 Free';\n  font-style: normal;\n  font-weight: 900;\n  src: url(\"../webfonts/fa-solid-900.eot\");\n  src: url(\"../webfonts/fa-solid-900.eot?#iefix\") format(\"embedded-opentype\"), url(\"../webfonts/fa-solid-900.woff2\") format(\"woff2\"), url(\"../webfonts/fa-solid-900.woff\") format(\"woff\"), url(\"../webfonts/fa-solid-900.ttf\") format(\"truetype\"), url(\"../webfonts/fa-solid-900.svg#fontawesome\") format(\"svg\"); }\n\n.fa,\n.fas {\n  font-family: 'Font Awesome 5 Free';\n  font-weight: 900; }\n"
  },
  {
    "path": "src/sourceDev.WebApp/SharedThemes/spacelab/wwwroot/css/site.css",
    "content": "﻿html {\n    position: relative;\n    min-height: 100%;\n}\n\nbody {\n    min-height: 100vh;\n    padding-top: 150px;\n}\n\n\n#newPostLink {\n    position: absolute;\n    top: 170px;\n    right: 0px;\n}\n\n#editPostLink {\n    position: absolute;\n    top: 200px;\n    right: 0px;\n}\n\n#unpublishPostLink {\n    position: absolute;\n    top: 230px !important;\n    right: 0px !important;\n}\n\n#pageManagerLink {\n    position: absolute;\n    top: 170px;\n    right: 0px;\n}\n\n#newPageLink {\n    position: absolute;\n    top: 200px;\n    right: 0px;\n}\n\n#editPageLink {\n    position: absolute;\n    top: 230px;\n    right: 0px\n}\n\n#unpublishPageLink {\n    position: absolute;\n    top: 260px !important;\n    right: 0px !important\n}\n\n#sidenavtoggle {\n    position: absolute;\n    top: 220px;\n    right: 5px;\n}\n\n\n@media screen and (max-width: 812px) {\n    #sidenavtoggle,\n    #sidenavmenu {\n        display: none;\n    }\n}\n\n.flex-fill {\n    flex: 1 1 auto !important;\n}\n\n\n.carousel-caption p {\n    font-size: 20px;\n    line-height: 1.4;\n}\n\n@media screen and (max-width: 768px) {\n    .carousel-caption {\n        display: none\n    }\n}\n\n\n\n\nimg, video, iframe {\n    max-width: 100%;\n}\n\ntd img, video, iframe {\n    max-width: none;\n}\n\n\n\n.table td, .table th {\n    vertical-align: inherit;\n}\n\n/******** jquery smartmenu bootstrap 4 ******/\n/* Carets in collapsible mode (make them look like +/- buttons) */\n.navbar-nav.sm-collapsible .sub-arrow {\n    position: absolute;\n    top: 50%;\n    right: 0;\n    margin: -0.7em 0.5em 0 0;\n    border: 1px solid rgba(0, 0, 0, .1);\n    border-radius: .25rem;\n    padding: 0;\n    width: 2em;\n    height: 1.4em;\n    font-size: 1.25rem;\n    line-height: 1.2em;\n    text-align: center;\n}\n\n    .navbar-nav.sm-collapsible .sub-arrow::before {\n        content: '+';\n    }\n\n.navbar-nav.sm-collapsible .show > a > .sub-arrow::before {\n    content: '-';\n}\n\n.navbar-dark .navbar-nav.sm-collapsible .nav-link .sub-arrow {\n    border-color: rgba(255, 255, 255, .1);\n}\n/* make sure there's room for the carets */\n.navbar-nav.sm-collapsible .has-submenu {\n    padding-right: 3em;\n}\n/* keep the carets properly positioned */\n.navbar-nav.sm-collapsible .nav-link,\n.navbar-nav.sm-collapsible .dropdown-item {\n    position: relative;\n}\n\n\n/* Nav carets in expanded mode */\n.navbar-nav:not(.sm-collapsible) .nav-link .sub-arrow {\n    display: inline-block;\n    width: 0;\n    height: 0;\n    margin-left: .255em;\n    vertical-align: .255em;\n    border-top: .3em solid;\n    border-right: .3em solid transparent;\n    border-left: .3em solid transparent;\n}\n/* point the arrows up for .fixed-bottom navbars */\n.fixed-bottom .navbar-nav:not(.sm-collapsible) .nav-link .sub-arrow,\n.fixed-bottom .navbar-nav:not(.sm-collapsible):not([data-sm-skip]) .dropdown-toggle::after {\n    border-top: 0;\n    border-bottom: .3em solid;\n}\n\n\n/* Dropdown carets in expanded mode */\n.navbar-nav:not(.sm-collapsible) .dropdown-item .sub-arrow,\n.navbar-nav:not(.sm-collapsible):not([data-sm-skip]) .dropdown-menu .dropdown-toggle::after {\n    position: absolute;\n    top: 50%;\n    right: 0;\n    width: 0;\n    height: 0;\n    margin-top: -.3em;\n    margin-right: 1em;\n    border-top: .3em solid transparent;\n    border-bottom: .3em solid transparent;\n    border-left: .3em solid;\n}\n/* make sure there's room for the carets */\n.navbar-nav:not(.sm-collapsible) .dropdown-item.has-submenu {\n    padding-right: 2em;\n}\n\n\n/* Scrolling arrows for tall menus */\n.navbar-nav .scroll-up,\n.navbar-nav .scroll-down {\n    position: absolute;\n    display: none;\n    visibility: hidden;\n    height: 20px;\n    overflow: hidden;\n    text-align: center;\n}\n\n.navbar-nav .scroll-up-arrow,\n.navbar-nav .scroll-down-arrow {\n    position: absolute;\n    top: -2px;\n    left: 50%;\n    margin-left: -8px;\n    width: 0;\n    height: 0;\n    overflow: hidden;\n    border-top: 7px solid transparent;\n    border-right: 7px solid transparent;\n    border-bottom: 7px solid;\n    border-left: 7px solid transparent;\n}\n\n.navbar-nav .scroll-down-arrow {\n    top: 6px;\n    border-top: 7px solid;\n    border-right: 7px solid transparent;\n    border-bottom: 7px solid transparent;\n    border-left: 7px solid transparent;\n}\n\n\n/* Add some spacing for 2+ level sub menus in collapsible mode */\n.navbar-nav.sm-collapsible .dropdown-menu .dropdown-menu {\n    margin: .5em;\n}\n\n\n/* Fix SmartMenus sub menus auto width (subMenusMinWidth/subMenusMaxWidth options) */\n.navbar-nav:not([data-sm-skip]) .dropdown-item {\n    white-space: normal;\n}\n\n.navbar-nav:not(.sm-collapsible) .sm-nowrap > li > .dropdown-item {\n    white-space: nowrap;\n}\n/******** end jquery smart menu bootstrap-4 *****************/\n\n.brand-header {\n    height: 100px;\n}\n\nheader .navbar {\n    top: 100px;\n}\n"
  },
  {
    "path": "src/sourceDev.WebApp/SharedThemes/spacelab/wwwroot/js/bootstrap.bundle.js",
    "content": "/*!\n  * Bootstrap v5.0.2 (https://getbootstrap.com/)\n  * Copyright 2011-2021 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)\n  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n  */\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n  typeof define === 'function' && define.amd ? define(factory) :\n  (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.bootstrap = factory());\n}(this, (function () { 'use strict';\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): dom/selector-engine.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n  const NODE_TEXT = 3;\n  const SelectorEngine = {\n    find(selector, element = document.documentElement) {\n      return [].concat(...Element.prototype.querySelectorAll.call(element, selector));\n    },\n\n    findOne(selector, element = document.documentElement) {\n      return Element.prototype.querySelector.call(element, selector);\n    },\n\n    children(element, selector) {\n      return [].concat(...element.children).filter(child => child.matches(selector));\n    },\n\n    parents(element, selector) {\n      const parents = [];\n      let ancestor = element.parentNode;\n\n      while (ancestor && ancestor.nodeType === Node.ELEMENT_NODE && ancestor.nodeType !== NODE_TEXT) {\n        if (ancestor.matches(selector)) {\n          parents.push(ancestor);\n        }\n\n        ancestor = ancestor.parentNode;\n      }\n\n      return parents;\n    },\n\n    prev(element, selector) {\n      let previous = element.previousElementSibling;\n\n      while (previous) {\n        if (previous.matches(selector)) {\n          return [previous];\n        }\n\n        previous = previous.previousElementSibling;\n      }\n\n      return [];\n    },\n\n    next(element, selector) {\n      let next = element.nextElementSibling;\n\n      while (next) {\n        if (next.matches(selector)) {\n          return [next];\n        }\n\n        next = next.nextElementSibling;\n      }\n\n      return [];\n    }\n\n  };\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): util/index.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n\n  const MAX_UID = 1000000;\n  const MILLISECONDS_MULTIPLIER = 1000;\n  const TRANSITION_END = 'transitionend'; // Shoutout AngusCroll (https://goo.gl/pxwQGp)\n\n  const toType = obj => {\n    if (obj === null || obj === undefined) {\n      return `${obj}`;\n    }\n\n    return {}.toString.call(obj).match(/\\s([a-z]+)/i)[1].toLowerCase();\n  };\n  /**\n   * --------------------------------------------------------------------------\n   * Public Util Api\n   * --------------------------------------------------------------------------\n   */\n\n\n  const getUID = prefix => {\n    do {\n      prefix += Math.floor(Math.random() * MAX_UID);\n    } while (document.getElementById(prefix));\n\n    return prefix;\n  };\n\n  const getSelector = element => {\n    let selector = element.getAttribute('data-bs-target');\n\n    if (!selector || selector === '#') {\n      let hrefAttr = element.getAttribute('href'); // The only valid content that could double as a selector are IDs or classes,\n      // so everything starting with `#` or `.`. If a \"real\" URL is used as the selector,\n      // `document.querySelector` will rightfully complain it is invalid.\n      // See https://github.com/twbs/bootstrap/issues/32273\n\n      if (!hrefAttr || !hrefAttr.includes('#') && !hrefAttr.startsWith('.')) {\n        return null;\n      } // Just in case some CMS puts out a full URL with the anchor appended\n\n\n      if (hrefAttr.includes('#') && !hrefAttr.startsWith('#')) {\n        hrefAttr = `#${hrefAttr.split('#')[1]}`;\n      }\n\n      selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : null;\n    }\n\n    return selector;\n  };\n\n  const getSelectorFromElement = element => {\n    const selector = getSelector(element);\n\n    if (selector) {\n      return document.querySelector(selector) ? selector : null;\n    }\n\n    return null;\n  };\n\n  const getElementFromSelector = element => {\n    const selector = getSelector(element);\n    return selector ? document.querySelector(selector) : null;\n  };\n\n  const getTransitionDurationFromElement = element => {\n    if (!element) {\n      return 0;\n    } // Get transition-duration of the element\n\n\n    let {\n      transitionDuration,\n      transitionDelay\n    } = window.getComputedStyle(element);\n    const floatTransitionDuration = Number.parseFloat(transitionDuration);\n    const floatTransitionDelay = Number.parseFloat(transitionDelay); // Return 0 if element or transition duration is not found\n\n    if (!floatTransitionDuration && !floatTransitionDelay) {\n      return 0;\n    } // If multiple durations are defined, take the first\n\n\n    transitionDuration = transitionDuration.split(',')[0];\n    transitionDelay = transitionDelay.split(',')[0];\n    return (Number.parseFloat(transitionDuration) + Number.parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER;\n  };\n\n  const triggerTransitionEnd = element => {\n    element.dispatchEvent(new Event(TRANSITION_END));\n  };\n\n  const isElement$1 = obj => {\n    if (!obj || typeof obj !== 'object') {\n      return false;\n    }\n\n    if (typeof obj.jquery !== 'undefined') {\n      obj = obj[0];\n    }\n\n    return typeof obj.nodeType !== 'undefined';\n  };\n\n  const getElement = obj => {\n    if (isElement$1(obj)) {\n      // it's a jQuery object or a node element\n      return obj.jquery ? obj[0] : obj;\n    }\n\n    if (typeof obj === 'string' && obj.length > 0) {\n      return SelectorEngine.findOne(obj);\n    }\n\n    return null;\n  };\n\n  const typeCheckConfig = (componentName, config, configTypes) => {\n    Object.keys(configTypes).forEach(property => {\n      const expectedTypes = configTypes[property];\n      const value = config[property];\n      const valueType = value && isElement$1(value) ? 'element' : toType(value);\n\n      if (!new RegExp(expectedTypes).test(valueType)) {\n        throw new TypeError(`${componentName.toUpperCase()}: Option \"${property}\" provided type \"${valueType}\" but expected type \"${expectedTypes}\".`);\n      }\n    });\n  };\n\n  const isVisible = element => {\n    if (!isElement$1(element) || element.getClientRects().length === 0) {\n      return false;\n    }\n\n    return getComputedStyle(element).getPropertyValue('visibility') === 'visible';\n  };\n\n  const isDisabled = element => {\n    if (!element || element.nodeType !== Node.ELEMENT_NODE) {\n      return true;\n    }\n\n    if (element.classList.contains('disabled')) {\n      return true;\n    }\n\n    if (typeof element.disabled !== 'undefined') {\n      return element.disabled;\n    }\n\n    return element.hasAttribute('disabled') && element.getAttribute('disabled') !== 'false';\n  };\n\n  const findShadowRoot = element => {\n    if (!document.documentElement.attachShadow) {\n      return null;\n    } // Can find the shadow root otherwise it'll return the document\n\n\n    if (typeof element.getRootNode === 'function') {\n      const root = element.getRootNode();\n      return root instanceof ShadowRoot ? root : null;\n    }\n\n    if (element instanceof ShadowRoot) {\n      return element;\n    } // when we don't find a shadow root\n\n\n    if (!element.parentNode) {\n      return null;\n    }\n\n    return findShadowRoot(element.parentNode);\n  };\n\n  const noop = () => {};\n\n  const reflow = element => element.offsetHeight;\n\n  const getjQuery = () => {\n    const {\n      jQuery\n    } = window;\n\n    if (jQuery && !document.body.hasAttribute('data-bs-no-jquery')) {\n      return jQuery;\n    }\n\n    return null;\n  };\n\n  const DOMContentLoadedCallbacks = [];\n\n  const onDOMContentLoaded = callback => {\n    if (document.readyState === 'loading') {\n      // add listener on the first call when the document is in loading state\n      if (!DOMContentLoadedCallbacks.length) {\n        document.addEventListener('DOMContentLoaded', () => {\n          DOMContentLoadedCallbacks.forEach(callback => callback());\n        });\n      }\n\n      DOMContentLoadedCallbacks.push(callback);\n    } else {\n      callback();\n    }\n  };\n\n  const isRTL = () => document.documentElement.dir === 'rtl';\n\n  const defineJQueryPlugin = plugin => {\n    onDOMContentLoaded(() => {\n      const $ = getjQuery();\n      /* istanbul ignore if */\n\n      if ($) {\n        const name = plugin.NAME;\n        const JQUERY_NO_CONFLICT = $.fn[name];\n        $.fn[name] = plugin.jQueryInterface;\n        $.fn[name].Constructor = plugin;\n\n        $.fn[name].noConflict = () => {\n          $.fn[name] = JQUERY_NO_CONFLICT;\n          return plugin.jQueryInterface;\n        };\n      }\n    });\n  };\n\n  const execute = callback => {\n    if (typeof callback === 'function') {\n      callback();\n    }\n  };\n\n  const executeAfterTransition = (callback, transitionElement, waitForTransition = true) => {\n    if (!waitForTransition) {\n      execute(callback);\n      return;\n    }\n\n    const durationPadding = 5;\n    const emulatedDuration = getTransitionDurationFromElement(transitionElement) + durationPadding;\n    let called = false;\n\n    const handler = ({\n      target\n    }) => {\n      if (target !== transitionElement) {\n        return;\n      }\n\n      called = true;\n      transitionElement.removeEventListener(TRANSITION_END, handler);\n      execute(callback);\n    };\n\n    transitionElement.addEventListener(TRANSITION_END, handler);\n    setTimeout(() => {\n      if (!called) {\n        triggerTransitionEnd(transitionElement);\n      }\n    }, emulatedDuration);\n  };\n  /**\n   * Return the previous/next element of a list.\n   *\n   * @param {array} list    The list of elements\n   * @param activeElement   The active element\n   * @param shouldGetNext   Choose to get next or previous element\n   * @param isCycleAllowed\n   * @return {Element|elem} The proper element\n   */\n\n\n  const getNextActiveElement = (list, activeElement, shouldGetNext, isCycleAllowed) => {\n    let index = list.indexOf(activeElement); // if the element does not exist in the list return an element depending on the direction and if cycle is allowed\n\n    if (index === -1) {\n      return list[!shouldGetNext && isCycleAllowed ? list.length - 1 : 0];\n    }\n\n    const listLength = list.length;\n    index += shouldGetNext ? 1 : -1;\n\n    if (isCycleAllowed) {\n      index = (index + listLength) % listLength;\n    }\n\n    return list[Math.max(0, Math.min(index, listLength - 1))];\n  };\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): dom/event-handler.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const namespaceRegex = /[^.]*(?=\\..*)\\.|.*/;\n  const stripNameRegex = /\\..*/;\n  const stripUidRegex = /::\\d+$/;\n  const eventRegistry = {}; // Events storage\n\n  let uidEvent = 1;\n  const customEvents = {\n    mouseenter: 'mouseover',\n    mouseleave: 'mouseout'\n  };\n  const customEventsRegex = /^(mouseenter|mouseleave)/i;\n  const nativeEvents = new Set(['click', 'dblclick', 'mouseup', 'mousedown', 'contextmenu', 'mousewheel', 'DOMMouseScroll', 'mouseover', 'mouseout', 'mousemove', 'selectstart', 'selectend', 'keydown', 'keypress', 'keyup', 'orientationchange', 'touchstart', 'touchmove', 'touchend', 'touchcancel', 'pointerdown', 'pointermove', 'pointerup', 'pointerleave', 'pointercancel', 'gesturestart', 'gesturechange', 'gestureend', 'focus', 'blur', 'change', 'reset', 'select', 'submit', 'focusin', 'focusout', 'load', 'unload', 'beforeunload', 'resize', 'move', 'DOMContentLoaded', 'readystatechange', 'error', 'abort', 'scroll']);\n  /**\n   * ------------------------------------------------------------------------\n   * Private methods\n   * ------------------------------------------------------------------------\n   */\n\n  function getUidEvent(element, uid) {\n    return uid && `${uid}::${uidEvent++}` || element.uidEvent || uidEvent++;\n  }\n\n  function getEvent(element) {\n    const uid = getUidEvent(element);\n    element.uidEvent = uid;\n    eventRegistry[uid] = eventRegistry[uid] || {};\n    return eventRegistry[uid];\n  }\n\n  function bootstrapHandler(element, fn) {\n    return function handler(event) {\n      event.delegateTarget = element;\n\n      if (handler.oneOff) {\n        EventHandler.off(element, event.type, fn);\n      }\n\n      return fn.apply(element, [event]);\n    };\n  }\n\n  function bootstrapDelegationHandler(element, selector, fn) {\n    return function handler(event) {\n      const domElements = element.querySelectorAll(selector);\n\n      for (let {\n        target\n      } = event; target && target !== this; target = target.parentNode) {\n        for (let i = domElements.length; i--;) {\n          if (domElements[i] === target) {\n            event.delegateTarget = target;\n\n            if (handler.oneOff) {\n              // eslint-disable-next-line unicorn/consistent-destructuring\n              EventHandler.off(element, event.type, selector, fn);\n            }\n\n            return fn.apply(target, [event]);\n          }\n        }\n      } // To please ESLint\n\n\n      return null;\n    };\n  }\n\n  function findHandler(events, handler, delegationSelector = null) {\n    const uidEventList = Object.keys(events);\n\n    for (let i = 0, len = uidEventList.length; i < len; i++) {\n      const event = events[uidEventList[i]];\n\n      if (event.originalHandler === handler && event.delegationSelector === delegationSelector) {\n        return event;\n      }\n    }\n\n    return null;\n  }\n\n  function normalizeParams(originalTypeEvent, handler, delegationFn) {\n    const delegation = typeof handler === 'string';\n    const originalHandler = delegation ? delegationFn : handler;\n    let typeEvent = getTypeEvent(originalTypeEvent);\n    const isNative = nativeEvents.has(typeEvent);\n\n    if (!isNative) {\n      typeEvent = originalTypeEvent;\n    }\n\n    return [delegation, originalHandler, typeEvent];\n  }\n\n  function addHandler(element, originalTypeEvent, handler, delegationFn, oneOff) {\n    if (typeof originalTypeEvent !== 'string' || !element) {\n      return;\n    }\n\n    if (!handler) {\n      handler = delegationFn;\n      delegationFn = null;\n    } // in case of mouseenter or mouseleave wrap the handler within a function that checks for its DOM position\n    // this prevents the handler from being dispatched the same way as mouseover or mouseout does\n\n\n    if (customEventsRegex.test(originalTypeEvent)) {\n      const wrapFn = fn => {\n        return function (event) {\n          if (!event.relatedTarget || event.relatedTarget !== event.delegateTarget && !event.delegateTarget.contains(event.relatedTarget)) {\n            return fn.call(this, event);\n          }\n        };\n      };\n\n      if (delegationFn) {\n        delegationFn = wrapFn(delegationFn);\n      } else {\n        handler = wrapFn(handler);\n      }\n    }\n\n    const [delegation, originalHandler, typeEvent] = normalizeParams(originalTypeEvent, handler, delegationFn);\n    const events = getEvent(element);\n    const handlers = events[typeEvent] || (events[typeEvent] = {});\n    const previousFn = findHandler(handlers, originalHandler, delegation ? handler : null);\n\n    if (previousFn) {\n      previousFn.oneOff = previousFn.oneOff && oneOff;\n      return;\n    }\n\n    const uid = getUidEvent(originalHandler, originalTypeEvent.replace(namespaceRegex, ''));\n    const fn = delegation ? bootstrapDelegationHandler(element, handler, delegationFn) : bootstrapHandler(element, handler);\n    fn.delegationSelector = delegation ? handler : null;\n    fn.originalHandler = originalHandler;\n    fn.oneOff = oneOff;\n    fn.uidEvent = uid;\n    handlers[uid] = fn;\n    element.addEventListener(typeEvent, fn, delegation);\n  }\n\n  function removeHandler(element, events, typeEvent, handler, delegationSelector) {\n    const fn = findHandler(events[typeEvent], handler, delegationSelector);\n\n    if (!fn) {\n      return;\n    }\n\n    element.removeEventListener(typeEvent, fn, Boolean(delegationSelector));\n    delete events[typeEvent][fn.uidEvent];\n  }\n\n  function removeNamespacedHandlers(element, events, typeEvent, namespace) {\n    const storeElementEvent = events[typeEvent] || {};\n    Object.keys(storeElementEvent).forEach(handlerKey => {\n      if (handlerKey.includes(namespace)) {\n        const event = storeElementEvent[handlerKey];\n        removeHandler(element, events, typeEvent, event.originalHandler, event.delegationSelector);\n      }\n    });\n  }\n\n  function getTypeEvent(event) {\n    // allow to get the native events from namespaced events ('click.bs.button' --> 'click')\n    event = event.replace(stripNameRegex, '');\n    return customEvents[event] || event;\n  }\n\n  const EventHandler = {\n    on(element, event, handler, delegationFn) {\n      addHandler(element, event, handler, delegationFn, false);\n    },\n\n    one(element, event, handler, delegationFn) {\n      addHandler(element, event, handler, delegationFn, true);\n    },\n\n    off(element, originalTypeEvent, handler, delegationFn) {\n      if (typeof originalTypeEvent !== 'string' || !element) {\n        return;\n      }\n\n      const [delegation, originalHandler, typeEvent] = normalizeParams(originalTypeEvent, handler, delegationFn);\n      const inNamespace = typeEvent !== originalTypeEvent;\n      const events = getEvent(element);\n      const isNamespace = originalTypeEvent.startsWith('.');\n\n      if (typeof originalHandler !== 'undefined') {\n        // Simplest case: handler is passed, remove that listener ONLY.\n        if (!events || !events[typeEvent]) {\n          return;\n        }\n\n        removeHandler(element, events, typeEvent, originalHandler, delegation ? handler : null);\n        return;\n      }\n\n      if (isNamespace) {\n        Object.keys(events).forEach(elementEvent => {\n          removeNamespacedHandlers(element, events, elementEvent, originalTypeEvent.slice(1));\n        });\n      }\n\n      const storeElementEvent = events[typeEvent] || {};\n      Object.keys(storeElementEvent).forEach(keyHandlers => {\n        const handlerKey = keyHandlers.replace(stripUidRegex, '');\n\n        if (!inNamespace || originalTypeEvent.includes(handlerKey)) {\n          const event = storeElementEvent[keyHandlers];\n          removeHandler(element, events, typeEvent, event.originalHandler, event.delegationSelector);\n        }\n      });\n    },\n\n    trigger(element, event, args) {\n      if (typeof event !== 'string' || !element) {\n        return null;\n      }\n\n      const $ = getjQuery();\n      const typeEvent = getTypeEvent(event);\n      const inNamespace = event !== typeEvent;\n      const isNative = nativeEvents.has(typeEvent);\n      let jQueryEvent;\n      let bubbles = true;\n      let nativeDispatch = true;\n      let defaultPrevented = false;\n      let evt = null;\n\n      if (inNamespace && $) {\n        jQueryEvent = $.Event(event, args);\n        $(element).trigger(jQueryEvent);\n        bubbles = !jQueryEvent.isPropagationStopped();\n        nativeDispatch = !jQueryEvent.isImmediatePropagationStopped();\n        defaultPrevented = jQueryEvent.isDefaultPrevented();\n      }\n\n      if (isNative) {\n        evt = document.createEvent('HTMLEvents');\n        evt.initEvent(typeEvent, bubbles, true);\n      } else {\n        evt = new CustomEvent(event, {\n          bubbles,\n          cancelable: true\n        });\n      } // merge custom information in our event\n\n\n      if (typeof args !== 'undefined') {\n        Object.keys(args).forEach(key => {\n          Object.defineProperty(evt, key, {\n            get() {\n              return args[key];\n            }\n\n          });\n        });\n      }\n\n      if (defaultPrevented) {\n        evt.preventDefault();\n      }\n\n      if (nativeDispatch) {\n        element.dispatchEvent(evt);\n      }\n\n      if (evt.defaultPrevented && typeof jQueryEvent !== 'undefined') {\n        jQueryEvent.preventDefault();\n      }\n\n      return evt;\n    }\n\n  };\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): dom/data.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n  const elementMap = new Map();\n  var Data = {\n    set(element, key, instance) {\n      if (!elementMap.has(element)) {\n        elementMap.set(element, new Map());\n      }\n\n      const instanceMap = elementMap.get(element); // make it clear we only want one instance per element\n      // can be removed later when multiple key/instances are fine to be used\n\n      if (!instanceMap.has(key) && instanceMap.size !== 0) {\n        // eslint-disable-next-line no-console\n        console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(instanceMap.keys())[0]}.`);\n        return;\n      }\n\n      instanceMap.set(key, instance);\n    },\n\n    get(element, key) {\n      if (elementMap.has(element)) {\n        return elementMap.get(element).get(key) || null;\n      }\n\n      return null;\n    },\n\n    remove(element, key) {\n      if (!elementMap.has(element)) {\n        return;\n      }\n\n      const instanceMap = elementMap.get(element);\n      instanceMap.delete(key); // free up element references if there are no instances left for an element\n\n      if (instanceMap.size === 0) {\n        elementMap.delete(element);\n      }\n    }\n\n  };\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): base-component.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const VERSION = '5.0.2';\n\n  class BaseComponent {\n    constructor(element) {\n      element = getElement(element);\n\n      if (!element) {\n        return;\n      }\n\n      this._element = element;\n      Data.set(this._element, this.constructor.DATA_KEY, this);\n    }\n\n    dispose() {\n      Data.remove(this._element, this.constructor.DATA_KEY);\n      EventHandler.off(this._element, this.constructor.EVENT_KEY);\n      Object.getOwnPropertyNames(this).forEach(propertyName => {\n        this[propertyName] = null;\n      });\n    }\n\n    _queueCallback(callback, element, isAnimated = true) {\n      executeAfterTransition(callback, element, isAnimated);\n    }\n    /** Static */\n\n\n    static getInstance(element) {\n      return Data.get(element, this.DATA_KEY);\n    }\n\n    static getOrCreateInstance(element, config = {}) {\n      return this.getInstance(element) || new this(element, typeof config === 'object' ? config : null);\n    }\n\n    static get VERSION() {\n      return VERSION;\n    }\n\n    static get NAME() {\n      throw new Error('You have to implement the static method \"NAME\", for each component!');\n    }\n\n    static get DATA_KEY() {\n      return `bs.${this.NAME}`;\n    }\n\n    static get EVENT_KEY() {\n      return `.${this.DATA_KEY}`;\n    }\n\n  }\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): alert.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$c = 'alert';\n  const DATA_KEY$b = 'bs.alert';\n  const EVENT_KEY$b = `.${DATA_KEY$b}`;\n  const DATA_API_KEY$8 = '.data-api';\n  const SELECTOR_DISMISS = '[data-bs-dismiss=\"alert\"]';\n  const EVENT_CLOSE = `close${EVENT_KEY$b}`;\n  const EVENT_CLOSED = `closed${EVENT_KEY$b}`;\n  const EVENT_CLICK_DATA_API$7 = `click${EVENT_KEY$b}${DATA_API_KEY$8}`;\n  const CLASS_NAME_ALERT = 'alert';\n  const CLASS_NAME_FADE$6 = 'fade';\n  const CLASS_NAME_SHOW$9 = 'show';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Alert extends BaseComponent {\n    // Getters\n    static get NAME() {\n      return NAME$c;\n    } // Public\n\n\n    close(element) {\n      const rootElement = element ? this._getRootElement(element) : this._element;\n\n      const customEvent = this._triggerCloseEvent(rootElement);\n\n      if (customEvent === null || customEvent.defaultPrevented) {\n        return;\n      }\n\n      this._removeElement(rootElement);\n    } // Private\n\n\n    _getRootElement(element) {\n      return getElementFromSelector(element) || element.closest(`.${CLASS_NAME_ALERT}`);\n    }\n\n    _triggerCloseEvent(element) {\n      return EventHandler.trigger(element, EVENT_CLOSE);\n    }\n\n    _removeElement(element) {\n      element.classList.remove(CLASS_NAME_SHOW$9);\n      const isAnimated = element.classList.contains(CLASS_NAME_FADE$6);\n\n      this._queueCallback(() => this._destroyElement(element), element, isAnimated);\n    }\n\n    _destroyElement(element) {\n      element.remove();\n      EventHandler.trigger(element, EVENT_CLOSED);\n    } // Static\n\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = Alert.getOrCreateInstance(this);\n\n        if (config === 'close') {\n          data[config](this);\n        }\n      });\n    }\n\n    static handleDismiss(alertInstance) {\n      return function (event) {\n        if (event) {\n          event.preventDefault();\n        }\n\n        alertInstance.close(this);\n      };\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(document, EVENT_CLICK_DATA_API$7, SELECTOR_DISMISS, Alert.handleDismiss(new Alert()));\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Alert to jQuery only if jQuery is present\n   */\n\n  defineJQueryPlugin(Alert);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): button.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$b = 'button';\n  const DATA_KEY$a = 'bs.button';\n  const EVENT_KEY$a = `.${DATA_KEY$a}`;\n  const DATA_API_KEY$7 = '.data-api';\n  const CLASS_NAME_ACTIVE$3 = 'active';\n  const SELECTOR_DATA_TOGGLE$5 = '[data-bs-toggle=\"button\"]';\n  const EVENT_CLICK_DATA_API$6 = `click${EVENT_KEY$a}${DATA_API_KEY$7}`;\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Button extends BaseComponent {\n    // Getters\n    static get NAME() {\n      return NAME$b;\n    } // Public\n\n\n    toggle() {\n      // Toggle class and sync the `aria-pressed` attribute with the return value of the `.toggle()` method\n      this._element.setAttribute('aria-pressed', this._element.classList.toggle(CLASS_NAME_ACTIVE$3));\n    } // Static\n\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = Button.getOrCreateInstance(this);\n\n        if (config === 'toggle') {\n          data[config]();\n        }\n      });\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(document, EVENT_CLICK_DATA_API$6, SELECTOR_DATA_TOGGLE$5, event => {\n    event.preventDefault();\n    const button = event.target.closest(SELECTOR_DATA_TOGGLE$5);\n    const data = Button.getOrCreateInstance(button);\n    data.toggle();\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Button to jQuery only if jQuery is present\n   */\n\n  defineJQueryPlugin(Button);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): dom/manipulator.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  function normalizeData(val) {\n    if (val === 'true') {\n      return true;\n    }\n\n    if (val === 'false') {\n      return false;\n    }\n\n    if (val === Number(val).toString()) {\n      return Number(val);\n    }\n\n    if (val === '' || val === 'null') {\n      return null;\n    }\n\n    return val;\n  }\n\n  function normalizeDataKey(key) {\n    return key.replace(/[A-Z]/g, chr => `-${chr.toLowerCase()}`);\n  }\n\n  const Manipulator = {\n    setDataAttribute(element, key, value) {\n      element.setAttribute(`data-bs-${normalizeDataKey(key)}`, value);\n    },\n\n    removeDataAttribute(element, key) {\n      element.removeAttribute(`data-bs-${normalizeDataKey(key)}`);\n    },\n\n    getDataAttributes(element) {\n      if (!element) {\n        return {};\n      }\n\n      const attributes = {};\n      Object.keys(element.dataset).filter(key => key.startsWith('bs')).forEach(key => {\n        let pureKey = key.replace(/^bs/, '');\n        pureKey = pureKey.charAt(0).toLowerCase() + pureKey.slice(1, pureKey.length);\n        attributes[pureKey] = normalizeData(element.dataset[key]);\n      });\n      return attributes;\n    },\n\n    getDataAttribute(element, key) {\n      return normalizeData(element.getAttribute(`data-bs-${normalizeDataKey(key)}`));\n    },\n\n    offset(element) {\n      const rect = element.getBoundingClientRect();\n      return {\n        top: rect.top + document.body.scrollTop,\n        left: rect.left + document.body.scrollLeft\n      };\n    },\n\n    position(element) {\n      return {\n        top: element.offsetTop,\n        left: element.offsetLeft\n      };\n    }\n\n  };\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): carousel.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$a = 'carousel';\n  const DATA_KEY$9 = 'bs.carousel';\n  const EVENT_KEY$9 = `.${DATA_KEY$9}`;\n  const DATA_API_KEY$6 = '.data-api';\n  const ARROW_LEFT_KEY = 'ArrowLeft';\n  const ARROW_RIGHT_KEY = 'ArrowRight';\n  const TOUCHEVENT_COMPAT_WAIT = 500; // Time for mouse compat events to fire after touch\n\n  const SWIPE_THRESHOLD = 40;\n  const Default$9 = {\n    interval: 5000,\n    keyboard: true,\n    slide: false,\n    pause: 'hover',\n    wrap: true,\n    touch: true\n  };\n  const DefaultType$9 = {\n    interval: '(number|boolean)',\n    keyboard: 'boolean',\n    slide: '(boolean|string)',\n    pause: '(string|boolean)',\n    wrap: 'boolean',\n    touch: 'boolean'\n  };\n  const ORDER_NEXT = 'next';\n  const ORDER_PREV = 'prev';\n  const DIRECTION_LEFT = 'left';\n  const DIRECTION_RIGHT = 'right';\n  const KEY_TO_DIRECTION = {\n    [ARROW_LEFT_KEY]: DIRECTION_RIGHT,\n    [ARROW_RIGHT_KEY]: DIRECTION_LEFT\n  };\n  const EVENT_SLIDE = `slide${EVENT_KEY$9}`;\n  const EVENT_SLID = `slid${EVENT_KEY$9}`;\n  const EVENT_KEYDOWN = `keydown${EVENT_KEY$9}`;\n  const EVENT_MOUSEENTER = `mouseenter${EVENT_KEY$9}`;\n  const EVENT_MOUSELEAVE = `mouseleave${EVENT_KEY$9}`;\n  const EVENT_TOUCHSTART = `touchstart${EVENT_KEY$9}`;\n  const EVENT_TOUCHMOVE = `touchmove${EVENT_KEY$9}`;\n  const EVENT_TOUCHEND = `touchend${EVENT_KEY$9}`;\n  const EVENT_POINTERDOWN = `pointerdown${EVENT_KEY$9}`;\n  const EVENT_POINTERUP = `pointerup${EVENT_KEY$9}`;\n  const EVENT_DRAG_START = `dragstart${EVENT_KEY$9}`;\n  const EVENT_LOAD_DATA_API$2 = `load${EVENT_KEY$9}${DATA_API_KEY$6}`;\n  const EVENT_CLICK_DATA_API$5 = `click${EVENT_KEY$9}${DATA_API_KEY$6}`;\n  const CLASS_NAME_CAROUSEL = 'carousel';\n  const CLASS_NAME_ACTIVE$2 = 'active';\n  const CLASS_NAME_SLIDE = 'slide';\n  const CLASS_NAME_END = 'carousel-item-end';\n  const CLASS_NAME_START = 'carousel-item-start';\n  const CLASS_NAME_NEXT = 'carousel-item-next';\n  const CLASS_NAME_PREV = 'carousel-item-prev';\n  const CLASS_NAME_POINTER_EVENT = 'pointer-event';\n  const SELECTOR_ACTIVE$1 = '.active';\n  const SELECTOR_ACTIVE_ITEM = '.active.carousel-item';\n  const SELECTOR_ITEM = '.carousel-item';\n  const SELECTOR_ITEM_IMG = '.carousel-item img';\n  const SELECTOR_NEXT_PREV = '.carousel-item-next, .carousel-item-prev';\n  const SELECTOR_INDICATORS = '.carousel-indicators';\n  const SELECTOR_INDICATOR = '[data-bs-target]';\n  const SELECTOR_DATA_SLIDE = '[data-bs-slide], [data-bs-slide-to]';\n  const SELECTOR_DATA_RIDE = '[data-bs-ride=\"carousel\"]';\n  const POINTER_TYPE_TOUCH = 'touch';\n  const POINTER_TYPE_PEN = 'pen';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Carousel extends BaseComponent {\n    constructor(element, config) {\n      super(element);\n      this._items = null;\n      this._interval = null;\n      this._activeElement = null;\n      this._isPaused = false;\n      this._isSliding = false;\n      this.touchTimeout = null;\n      this.touchStartX = 0;\n      this.touchDeltaX = 0;\n      this._config = this._getConfig(config);\n      this._indicatorsElement = SelectorEngine.findOne(SELECTOR_INDICATORS, this._element);\n      this._touchSupported = 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0;\n      this._pointerEvent = Boolean(window.PointerEvent);\n\n      this._addEventListeners();\n    } // Getters\n\n\n    static get Default() {\n      return Default$9;\n    }\n\n    static get NAME() {\n      return NAME$a;\n    } // Public\n\n\n    next() {\n      this._slide(ORDER_NEXT);\n    }\n\n    nextWhenVisible() {\n      // Don't call next when the page isn't visible\n      // or the carousel or its parent isn't visible\n      if (!document.hidden && isVisible(this._element)) {\n        this.next();\n      }\n    }\n\n    prev() {\n      this._slide(ORDER_PREV);\n    }\n\n    pause(event) {\n      if (!event) {\n        this._isPaused = true;\n      }\n\n      if (SelectorEngine.findOne(SELECTOR_NEXT_PREV, this._element)) {\n        triggerTransitionEnd(this._element);\n        this.cycle(true);\n      }\n\n      clearInterval(this._interval);\n      this._interval = null;\n    }\n\n    cycle(event) {\n      if (!event) {\n        this._isPaused = false;\n      }\n\n      if (this._interval) {\n        clearInterval(this._interval);\n        this._interval = null;\n      }\n\n      if (this._config && this._config.interval && !this._isPaused) {\n        this._updateInterval();\n\n        this._interval = setInterval((document.visibilityState ? this.nextWhenVisible : this.next).bind(this), this._config.interval);\n      }\n    }\n\n    to(index) {\n      this._activeElement = SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element);\n\n      const activeIndex = this._getItemIndex(this._activeElement);\n\n      if (index > this._items.length - 1 || index < 0) {\n        return;\n      }\n\n      if (this._isSliding) {\n        EventHandler.one(this._element, EVENT_SLID, () => this.to(index));\n        return;\n      }\n\n      if (activeIndex === index) {\n        this.pause();\n        this.cycle();\n        return;\n      }\n\n      const order = index > activeIndex ? ORDER_NEXT : ORDER_PREV;\n\n      this._slide(order, this._items[index]);\n    } // Private\n\n\n    _getConfig(config) {\n      config = { ...Default$9,\n        ...Manipulator.getDataAttributes(this._element),\n        ...(typeof config === 'object' ? config : {})\n      };\n      typeCheckConfig(NAME$a, config, DefaultType$9);\n      return config;\n    }\n\n    _handleSwipe() {\n      const absDeltax = Math.abs(this.touchDeltaX);\n\n      if (absDeltax <= SWIPE_THRESHOLD) {\n        return;\n      }\n\n      const direction = absDeltax / this.touchDeltaX;\n      this.touchDeltaX = 0;\n\n      if (!direction) {\n        return;\n      }\n\n      this._slide(direction > 0 ? DIRECTION_RIGHT : DIRECTION_LEFT);\n    }\n\n    _addEventListeners() {\n      if (this._config.keyboard) {\n        EventHandler.on(this._element, EVENT_KEYDOWN, event => this._keydown(event));\n      }\n\n      if (this._config.pause === 'hover') {\n        EventHandler.on(this._element, EVENT_MOUSEENTER, event => this.pause(event));\n        EventHandler.on(this._element, EVENT_MOUSELEAVE, event => this.cycle(event));\n      }\n\n      if (this._config.touch && this._touchSupported) {\n        this._addTouchEventListeners();\n      }\n    }\n\n    _addTouchEventListeners() {\n      const start = event => {\n        if (this._pointerEvent && (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH)) {\n          this.touchStartX = event.clientX;\n        } else if (!this._pointerEvent) {\n          this.touchStartX = event.touches[0].clientX;\n        }\n      };\n\n      const move = event => {\n        // ensure swiping with one touch and not pinching\n        this.touchDeltaX = event.touches && event.touches.length > 1 ? 0 : event.touches[0].clientX - this.touchStartX;\n      };\n\n      const end = event => {\n        if (this._pointerEvent && (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH)) {\n          this.touchDeltaX = event.clientX - this.touchStartX;\n        }\n\n        this._handleSwipe();\n\n        if (this._config.pause === 'hover') {\n          // If it's a touch-enabled device, mouseenter/leave are fired as\n          // part of the mouse compatibility events on first tap - the carousel\n          // would stop cycling until user tapped out of it;\n          // here, we listen for touchend, explicitly pause the carousel\n          // (as if it's the second time we tap on it, mouseenter compat event\n          // is NOT fired) and after a timeout (to allow for mouse compatibility\n          // events to fire) we explicitly restart cycling\n          this.pause();\n\n          if (this.touchTimeout) {\n            clearTimeout(this.touchTimeout);\n          }\n\n          this.touchTimeout = setTimeout(event => this.cycle(event), TOUCHEVENT_COMPAT_WAIT + this._config.interval);\n        }\n      };\n\n      SelectorEngine.find(SELECTOR_ITEM_IMG, this._element).forEach(itemImg => {\n        EventHandler.on(itemImg, EVENT_DRAG_START, e => e.preventDefault());\n      });\n\n      if (this._pointerEvent) {\n        EventHandler.on(this._element, EVENT_POINTERDOWN, event => start(event));\n        EventHandler.on(this._element, EVENT_POINTERUP, event => end(event));\n\n        this._element.classList.add(CLASS_NAME_POINTER_EVENT);\n      } else {\n        EventHandler.on(this._element, EVENT_TOUCHSTART, event => start(event));\n        EventHandler.on(this._element, EVENT_TOUCHMOVE, event => move(event));\n        EventHandler.on(this._element, EVENT_TOUCHEND, event => end(event));\n      }\n    }\n\n    _keydown(event) {\n      if (/input|textarea/i.test(event.target.tagName)) {\n        return;\n      }\n\n      const direction = KEY_TO_DIRECTION[event.key];\n\n      if (direction) {\n        event.preventDefault();\n\n        this._slide(direction);\n      }\n    }\n\n    _getItemIndex(element) {\n      this._items = element && element.parentNode ? SelectorEngine.find(SELECTOR_ITEM, element.parentNode) : [];\n      return this._items.indexOf(element);\n    }\n\n    _getItemByOrder(order, activeElement) {\n      const isNext = order === ORDER_NEXT;\n      return getNextActiveElement(this._items, activeElement, isNext, this._config.wrap);\n    }\n\n    _triggerSlideEvent(relatedTarget, eventDirectionName) {\n      const targetIndex = this._getItemIndex(relatedTarget);\n\n      const fromIndex = this._getItemIndex(SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element));\n\n      return EventHandler.trigger(this._element, EVENT_SLIDE, {\n        relatedTarget,\n        direction: eventDirectionName,\n        from: fromIndex,\n        to: targetIndex\n      });\n    }\n\n    _setActiveIndicatorElement(element) {\n      if (this._indicatorsElement) {\n        const activeIndicator = SelectorEngine.findOne(SELECTOR_ACTIVE$1, this._indicatorsElement);\n        activeIndicator.classList.remove(CLASS_NAME_ACTIVE$2);\n        activeIndicator.removeAttribute('aria-current');\n        const indicators = SelectorEngine.find(SELECTOR_INDICATOR, this._indicatorsElement);\n\n        for (let i = 0; i < indicators.length; i++) {\n          if (Number.parseInt(indicators[i].getAttribute('data-bs-slide-to'), 10) === this._getItemIndex(element)) {\n            indicators[i].classList.add(CLASS_NAME_ACTIVE$2);\n            indicators[i].setAttribute('aria-current', 'true');\n            break;\n          }\n        }\n      }\n    }\n\n    _updateInterval() {\n      const element = this._activeElement || SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element);\n\n      if (!element) {\n        return;\n      }\n\n      const elementInterval = Number.parseInt(element.getAttribute('data-bs-interval'), 10);\n\n      if (elementInterval) {\n        this._config.defaultInterval = this._config.defaultInterval || this._config.interval;\n        this._config.interval = elementInterval;\n      } else {\n        this._config.interval = this._config.defaultInterval || this._config.interval;\n      }\n    }\n\n    _slide(directionOrOrder, element) {\n      const order = this._directionToOrder(directionOrOrder);\n\n      const activeElement = SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element);\n\n      const activeElementIndex = this._getItemIndex(activeElement);\n\n      const nextElement = element || this._getItemByOrder(order, activeElement);\n\n      const nextElementIndex = this._getItemIndex(nextElement);\n\n      const isCycling = Boolean(this._interval);\n      const isNext = order === ORDER_NEXT;\n      const directionalClassName = isNext ? CLASS_NAME_START : CLASS_NAME_END;\n      const orderClassName = isNext ? CLASS_NAME_NEXT : CLASS_NAME_PREV;\n\n      const eventDirectionName = this._orderToDirection(order);\n\n      if (nextElement && nextElement.classList.contains(CLASS_NAME_ACTIVE$2)) {\n        this._isSliding = false;\n        return;\n      }\n\n      if (this._isSliding) {\n        return;\n      }\n\n      const slideEvent = this._triggerSlideEvent(nextElement, eventDirectionName);\n\n      if (slideEvent.defaultPrevented) {\n        return;\n      }\n\n      if (!activeElement || !nextElement) {\n        // Some weirdness is happening, so we bail\n        return;\n      }\n\n      this._isSliding = true;\n\n      if (isCycling) {\n        this.pause();\n      }\n\n      this._setActiveIndicatorElement(nextElement);\n\n      this._activeElement = nextElement;\n\n      const triggerSlidEvent = () => {\n        EventHandler.trigger(this._element, EVENT_SLID, {\n          relatedTarget: nextElement,\n          direction: eventDirectionName,\n          from: activeElementIndex,\n          to: nextElementIndex\n        });\n      };\n\n      if (this._element.classList.contains(CLASS_NAME_SLIDE)) {\n        nextElement.classList.add(orderClassName);\n        reflow(nextElement);\n        activeElement.classList.add(directionalClassName);\n        nextElement.classList.add(directionalClassName);\n\n        const completeCallBack = () => {\n          nextElement.classList.remove(directionalClassName, orderClassName);\n          nextElement.classList.add(CLASS_NAME_ACTIVE$2);\n          activeElement.classList.remove(CLASS_NAME_ACTIVE$2, orderClassName, directionalClassName);\n          this._isSliding = false;\n          setTimeout(triggerSlidEvent, 0);\n        };\n\n        this._queueCallback(completeCallBack, activeElement, true);\n      } else {\n        activeElement.classList.remove(CLASS_NAME_ACTIVE$2);\n        nextElement.classList.add(CLASS_NAME_ACTIVE$2);\n        this._isSliding = false;\n        triggerSlidEvent();\n      }\n\n      if (isCycling) {\n        this.cycle();\n      }\n    }\n\n    _directionToOrder(direction) {\n      if (![DIRECTION_RIGHT, DIRECTION_LEFT].includes(direction)) {\n        return direction;\n      }\n\n      if (isRTL()) {\n        return direction === DIRECTION_LEFT ? ORDER_PREV : ORDER_NEXT;\n      }\n\n      return direction === DIRECTION_LEFT ? ORDER_NEXT : ORDER_PREV;\n    }\n\n    _orderToDirection(order) {\n      if (![ORDER_NEXT, ORDER_PREV].includes(order)) {\n        return order;\n      }\n\n      if (isRTL()) {\n        return order === ORDER_PREV ? DIRECTION_LEFT : DIRECTION_RIGHT;\n      }\n\n      return order === ORDER_PREV ? DIRECTION_RIGHT : DIRECTION_LEFT;\n    } // Static\n\n\n    static carouselInterface(element, config) {\n      const data = Carousel.getOrCreateInstance(element, config);\n      let {\n        _config\n      } = data;\n\n      if (typeof config === 'object') {\n        _config = { ..._config,\n          ...config\n        };\n      }\n\n      const action = typeof config === 'string' ? config : _config.slide;\n\n      if (typeof config === 'number') {\n        data.to(config);\n      } else if (typeof action === 'string') {\n        if (typeof data[action] === 'undefined') {\n          throw new TypeError(`No method named \"${action}\"`);\n        }\n\n        data[action]();\n      } else if (_config.interval && _config.ride) {\n        data.pause();\n        data.cycle();\n      }\n    }\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        Carousel.carouselInterface(this, config);\n      });\n    }\n\n    static dataApiClickHandler(event) {\n      const target = getElementFromSelector(this);\n\n      if (!target || !target.classList.contains(CLASS_NAME_CAROUSEL)) {\n        return;\n      }\n\n      const config = { ...Manipulator.getDataAttributes(target),\n        ...Manipulator.getDataAttributes(this)\n      };\n      const slideIndex = this.getAttribute('data-bs-slide-to');\n\n      if (slideIndex) {\n        config.interval = false;\n      }\n\n      Carousel.carouselInterface(target, config);\n\n      if (slideIndex) {\n        Carousel.getInstance(target).to(slideIndex);\n      }\n\n      event.preventDefault();\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(document, EVENT_CLICK_DATA_API$5, SELECTOR_DATA_SLIDE, Carousel.dataApiClickHandler);\n  EventHandler.on(window, EVENT_LOAD_DATA_API$2, () => {\n    const carousels = SelectorEngine.find(SELECTOR_DATA_RIDE);\n\n    for (let i = 0, len = carousels.length; i < len; i++) {\n      Carousel.carouselInterface(carousels[i], Carousel.getInstance(carousels[i]));\n    }\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Carousel to jQuery only if jQuery is present\n   */\n\n  defineJQueryPlugin(Carousel);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): collapse.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$9 = 'collapse';\n  const DATA_KEY$8 = 'bs.collapse';\n  const EVENT_KEY$8 = `.${DATA_KEY$8}`;\n  const DATA_API_KEY$5 = '.data-api';\n  const Default$8 = {\n    toggle: true,\n    parent: ''\n  };\n  const DefaultType$8 = {\n    toggle: 'boolean',\n    parent: '(string|element)'\n  };\n  const EVENT_SHOW$5 = `show${EVENT_KEY$8}`;\n  const EVENT_SHOWN$5 = `shown${EVENT_KEY$8}`;\n  const EVENT_HIDE$5 = `hide${EVENT_KEY$8}`;\n  const EVENT_HIDDEN$5 = `hidden${EVENT_KEY$8}`;\n  const EVENT_CLICK_DATA_API$4 = `click${EVENT_KEY$8}${DATA_API_KEY$5}`;\n  const CLASS_NAME_SHOW$8 = 'show';\n  const CLASS_NAME_COLLAPSE = 'collapse';\n  const CLASS_NAME_COLLAPSING = 'collapsing';\n  const CLASS_NAME_COLLAPSED = 'collapsed';\n  const WIDTH = 'width';\n  const HEIGHT = 'height';\n  const SELECTOR_ACTIVES = '.show, .collapsing';\n  const SELECTOR_DATA_TOGGLE$4 = '[data-bs-toggle=\"collapse\"]';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Collapse extends BaseComponent {\n    constructor(element, config) {\n      super(element);\n      this._isTransitioning = false;\n      this._config = this._getConfig(config);\n      this._triggerArray = SelectorEngine.find(`${SELECTOR_DATA_TOGGLE$4}[href=\"#${this._element.id}\"],` + `${SELECTOR_DATA_TOGGLE$4}[data-bs-target=\"#${this._element.id}\"]`);\n      const toggleList = SelectorEngine.find(SELECTOR_DATA_TOGGLE$4);\n\n      for (let i = 0, len = toggleList.length; i < len; i++) {\n        const elem = toggleList[i];\n        const selector = getSelectorFromElement(elem);\n        const filterElement = SelectorEngine.find(selector).filter(foundElem => foundElem === this._element);\n\n        if (selector !== null && filterElement.length) {\n          this._selector = selector;\n\n          this._triggerArray.push(elem);\n        }\n      }\n\n      this._parent = this._config.parent ? this._getParent() : null;\n\n      if (!this._config.parent) {\n        this._addAriaAndCollapsedClass(this._element, this._triggerArray);\n      }\n\n      if (this._config.toggle) {\n        this.toggle();\n      }\n    } // Getters\n\n\n    static get Default() {\n      return Default$8;\n    }\n\n    static get NAME() {\n      return NAME$9;\n    } // Public\n\n\n    toggle() {\n      if (this._element.classList.contains(CLASS_NAME_SHOW$8)) {\n        this.hide();\n      } else {\n        this.show();\n      }\n    }\n\n    show() {\n      if (this._isTransitioning || this._element.classList.contains(CLASS_NAME_SHOW$8)) {\n        return;\n      }\n\n      let actives;\n      let activesData;\n\n      if (this._parent) {\n        actives = SelectorEngine.find(SELECTOR_ACTIVES, this._parent).filter(elem => {\n          if (typeof this._config.parent === 'string') {\n            return elem.getAttribute('data-bs-parent') === this._config.parent;\n          }\n\n          return elem.classList.contains(CLASS_NAME_COLLAPSE);\n        });\n\n        if (actives.length === 0) {\n          actives = null;\n        }\n      }\n\n      const container = SelectorEngine.findOne(this._selector);\n\n      if (actives) {\n        const tempActiveData = actives.find(elem => container !== elem);\n        activesData = tempActiveData ? Collapse.getInstance(tempActiveData) : null;\n\n        if (activesData && activesData._isTransitioning) {\n          return;\n        }\n      }\n\n      const startEvent = EventHandler.trigger(this._element, EVENT_SHOW$5);\n\n      if (startEvent.defaultPrevented) {\n        return;\n      }\n\n      if (actives) {\n        actives.forEach(elemActive => {\n          if (container !== elemActive) {\n            Collapse.collapseInterface(elemActive, 'hide');\n          }\n\n          if (!activesData) {\n            Data.set(elemActive, DATA_KEY$8, null);\n          }\n        });\n      }\n\n      const dimension = this._getDimension();\n\n      this._element.classList.remove(CLASS_NAME_COLLAPSE);\n\n      this._element.classList.add(CLASS_NAME_COLLAPSING);\n\n      this._element.style[dimension] = 0;\n\n      if (this._triggerArray.length) {\n        this._triggerArray.forEach(element => {\n          element.classList.remove(CLASS_NAME_COLLAPSED);\n          element.setAttribute('aria-expanded', true);\n        });\n      }\n\n      this.setTransitioning(true);\n\n      const complete = () => {\n        this._element.classList.remove(CLASS_NAME_COLLAPSING);\n\n        this._element.classList.add(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$8);\n\n        this._element.style[dimension] = '';\n        this.setTransitioning(false);\n        EventHandler.trigger(this._element, EVENT_SHOWN$5);\n      };\n\n      const capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1);\n      const scrollSize = `scroll${capitalizedDimension}`;\n\n      this._queueCallback(complete, this._element, true);\n\n      this._element.style[dimension] = `${this._element[scrollSize]}px`;\n    }\n\n    hide() {\n      if (this._isTransitioning || !this._element.classList.contains(CLASS_NAME_SHOW$8)) {\n        return;\n      }\n\n      const startEvent = EventHandler.trigger(this._element, EVENT_HIDE$5);\n\n      if (startEvent.defaultPrevented) {\n        return;\n      }\n\n      const dimension = this._getDimension();\n\n      this._element.style[dimension] = `${this._element.getBoundingClientRect()[dimension]}px`;\n      reflow(this._element);\n\n      this._element.classList.add(CLASS_NAME_COLLAPSING);\n\n      this._element.classList.remove(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$8);\n\n      const triggerArrayLength = this._triggerArray.length;\n\n      if (triggerArrayLength > 0) {\n        for (let i = 0; i < triggerArrayLength; i++) {\n          const trigger = this._triggerArray[i];\n          const elem = getElementFromSelector(trigger);\n\n          if (elem && !elem.classList.contains(CLASS_NAME_SHOW$8)) {\n            trigger.classList.add(CLASS_NAME_COLLAPSED);\n            trigger.setAttribute('aria-expanded', false);\n          }\n        }\n      }\n\n      this.setTransitioning(true);\n\n      const complete = () => {\n        this.setTransitioning(false);\n\n        this._element.classList.remove(CLASS_NAME_COLLAPSING);\n\n        this._element.classList.add(CLASS_NAME_COLLAPSE);\n\n        EventHandler.trigger(this._element, EVENT_HIDDEN$5);\n      };\n\n      this._element.style[dimension] = '';\n\n      this._queueCallback(complete, this._element, true);\n    }\n\n    setTransitioning(isTransitioning) {\n      this._isTransitioning = isTransitioning;\n    } // Private\n\n\n    _getConfig(config) {\n      config = { ...Default$8,\n        ...config\n      };\n      config.toggle = Boolean(config.toggle); // Coerce string values\n\n      typeCheckConfig(NAME$9, config, DefaultType$8);\n      return config;\n    }\n\n    _getDimension() {\n      return this._element.classList.contains(WIDTH) ? WIDTH : HEIGHT;\n    }\n\n    _getParent() {\n      let {\n        parent\n      } = this._config;\n      parent = getElement(parent);\n      const selector = `${SELECTOR_DATA_TOGGLE$4}[data-bs-parent=\"${parent}\"]`;\n      SelectorEngine.find(selector, parent).forEach(element => {\n        const selected = getElementFromSelector(element);\n\n        this._addAriaAndCollapsedClass(selected, [element]);\n      });\n      return parent;\n    }\n\n    _addAriaAndCollapsedClass(element, triggerArray) {\n      if (!element || !triggerArray.length) {\n        return;\n      }\n\n      const isOpen = element.classList.contains(CLASS_NAME_SHOW$8);\n      triggerArray.forEach(elem => {\n        if (isOpen) {\n          elem.classList.remove(CLASS_NAME_COLLAPSED);\n        } else {\n          elem.classList.add(CLASS_NAME_COLLAPSED);\n        }\n\n        elem.setAttribute('aria-expanded', isOpen);\n      });\n    } // Static\n\n\n    static collapseInterface(element, config) {\n      let data = Collapse.getInstance(element);\n      const _config = { ...Default$8,\n        ...Manipulator.getDataAttributes(element),\n        ...(typeof config === 'object' && config ? config : {})\n      };\n\n      if (!data && _config.toggle && typeof config === 'string' && /show|hide/.test(config)) {\n        _config.toggle = false;\n      }\n\n      if (!data) {\n        data = new Collapse(element, _config);\n      }\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config]();\n      }\n    }\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        Collapse.collapseInterface(this, config);\n      });\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(document, EVENT_CLICK_DATA_API$4, SELECTOR_DATA_TOGGLE$4, function (event) {\n    // preventDefault only for <a> elements (which change the URL) not inside the collapsible element\n    if (event.target.tagName === 'A' || event.delegateTarget && event.delegateTarget.tagName === 'A') {\n      event.preventDefault();\n    }\n\n    const triggerData = Manipulator.getDataAttributes(this);\n    const selector = getSelectorFromElement(this);\n    const selectorElements = SelectorEngine.find(selector);\n    selectorElements.forEach(element => {\n      const data = Collapse.getInstance(element);\n      let config;\n\n      if (data) {\n        // update parent attribute\n        if (data._parent === null && typeof triggerData.parent === 'string') {\n          data._config.parent = triggerData.parent;\n          data._parent = data._getParent();\n        }\n\n        config = 'toggle';\n      } else {\n        config = triggerData;\n      }\n\n      Collapse.collapseInterface(element, config);\n    });\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Collapse to jQuery only if jQuery is present\n   */\n\n  defineJQueryPlugin(Collapse);\n\n  var top = 'top';\n  var bottom = 'bottom';\n  var right = 'right';\n  var left = 'left';\n  var auto = 'auto';\n  var basePlacements = [top, bottom, right, left];\n  var start = 'start';\n  var end = 'end';\n  var clippingParents = 'clippingParents';\n  var viewport = 'viewport';\n  var popper = 'popper';\n  var reference = 'reference';\n  var variationPlacements = /*#__PURE__*/basePlacements.reduce(function (acc, placement) {\n    return acc.concat([placement + \"-\" + start, placement + \"-\" + end]);\n  }, []);\n  var placements = /*#__PURE__*/[].concat(basePlacements, [auto]).reduce(function (acc, placement) {\n    return acc.concat([placement, placement + \"-\" + start, placement + \"-\" + end]);\n  }, []); // modifiers that need to read the DOM\n\n  var beforeRead = 'beforeRead';\n  var read = 'read';\n  var afterRead = 'afterRead'; // pure-logic modifiers\n\n  var beforeMain = 'beforeMain';\n  var main = 'main';\n  var afterMain = 'afterMain'; // modifier with the purpose to write to the DOM (or write into a framework state)\n\n  var beforeWrite = 'beforeWrite';\n  var write = 'write';\n  var afterWrite = 'afterWrite';\n  var modifierPhases = [beforeRead, read, afterRead, beforeMain, main, afterMain, beforeWrite, write, afterWrite];\n\n  function getNodeName(element) {\n    return element ? (element.nodeName || '').toLowerCase() : null;\n  }\n\n  function getWindow(node) {\n    if (node == null) {\n      return window;\n    }\n\n    if (node.toString() !== '[object Window]') {\n      var ownerDocument = node.ownerDocument;\n      return ownerDocument ? ownerDocument.defaultView || window : window;\n    }\n\n    return node;\n  }\n\n  function isElement(node) {\n    var OwnElement = getWindow(node).Element;\n    return node instanceof OwnElement || node instanceof Element;\n  }\n\n  function isHTMLElement(node) {\n    var OwnElement = getWindow(node).HTMLElement;\n    return node instanceof OwnElement || node instanceof HTMLElement;\n  }\n\n  function isShadowRoot(node) {\n    // IE 11 has no ShadowRoot\n    if (typeof ShadowRoot === 'undefined') {\n      return false;\n    }\n\n    var OwnElement = getWindow(node).ShadowRoot;\n    return node instanceof OwnElement || node instanceof ShadowRoot;\n  }\n\n  // and applies them to the HTMLElements such as popper and arrow\n\n  function applyStyles(_ref) {\n    var state = _ref.state;\n    Object.keys(state.elements).forEach(function (name) {\n      var style = state.styles[name] || {};\n      var attributes = state.attributes[name] || {};\n      var element = state.elements[name]; // arrow is optional + virtual elements\n\n      if (!isHTMLElement(element) || !getNodeName(element)) {\n        return;\n      } // Flow doesn't support to extend this property, but it's the most\n      // effective way to apply styles to an HTMLElement\n      // $FlowFixMe[cannot-write]\n\n\n      Object.assign(element.style, style);\n      Object.keys(attributes).forEach(function (name) {\n        var value = attributes[name];\n\n        if (value === false) {\n          element.removeAttribute(name);\n        } else {\n          element.setAttribute(name, value === true ? '' : value);\n        }\n      });\n    });\n  }\n\n  function effect$2(_ref2) {\n    var state = _ref2.state;\n    var initialStyles = {\n      popper: {\n        position: state.options.strategy,\n        left: '0',\n        top: '0',\n        margin: '0'\n      },\n      arrow: {\n        position: 'absolute'\n      },\n      reference: {}\n    };\n    Object.assign(state.elements.popper.style, initialStyles.popper);\n    state.styles = initialStyles;\n\n    if (state.elements.arrow) {\n      Object.assign(state.elements.arrow.style, initialStyles.arrow);\n    }\n\n    return function () {\n      Object.keys(state.elements).forEach(function (name) {\n        var element = state.elements[name];\n        var attributes = state.attributes[name] || {};\n        var styleProperties = Object.keys(state.styles.hasOwnProperty(name) ? state.styles[name] : initialStyles[name]); // Set all values to an empty string to unset them\n\n        var style = styleProperties.reduce(function (style, property) {\n          style[property] = '';\n          return style;\n        }, {}); // arrow is optional + virtual elements\n\n        if (!isHTMLElement(element) || !getNodeName(element)) {\n          return;\n        }\n\n        Object.assign(element.style, style);\n        Object.keys(attributes).forEach(function (attribute) {\n          element.removeAttribute(attribute);\n        });\n      });\n    };\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  var applyStyles$1 = {\n    name: 'applyStyles',\n    enabled: true,\n    phase: 'write',\n    fn: applyStyles,\n    effect: effect$2,\n    requires: ['computeStyles']\n  };\n\n  function getBasePlacement(placement) {\n    return placement.split('-')[0];\n  }\n\n  function getBoundingClientRect(element) {\n    var rect = element.getBoundingClientRect();\n    return {\n      width: rect.width,\n      height: rect.height,\n      top: rect.top,\n      right: rect.right,\n      bottom: rect.bottom,\n      left: rect.left,\n      x: rect.left,\n      y: rect.top\n    };\n  }\n\n  // means it doesn't take into account transforms.\n\n  function getLayoutRect(element) {\n    var clientRect = getBoundingClientRect(element); // Use the clientRect sizes if it's not been transformed.\n    // Fixes https://github.com/popperjs/popper-core/issues/1223\n\n    var width = element.offsetWidth;\n    var height = element.offsetHeight;\n\n    if (Math.abs(clientRect.width - width) <= 1) {\n      width = clientRect.width;\n    }\n\n    if (Math.abs(clientRect.height - height) <= 1) {\n      height = clientRect.height;\n    }\n\n    return {\n      x: element.offsetLeft,\n      y: element.offsetTop,\n      width: width,\n      height: height\n    };\n  }\n\n  function contains(parent, child) {\n    var rootNode = child.getRootNode && child.getRootNode(); // First, attempt with faster native method\n\n    if (parent.contains(child)) {\n      return true;\n    } // then fallback to custom implementation with Shadow DOM support\n    else if (rootNode && isShadowRoot(rootNode)) {\n        var next = child;\n\n        do {\n          if (next && parent.isSameNode(next)) {\n            return true;\n          } // $FlowFixMe[prop-missing]: need a better way to handle this...\n\n\n          next = next.parentNode || next.host;\n        } while (next);\n      } // Give up, the result is false\n\n\n    return false;\n  }\n\n  function getComputedStyle$1(element) {\n    return getWindow(element).getComputedStyle(element);\n  }\n\n  function isTableElement(element) {\n    return ['table', 'td', 'th'].indexOf(getNodeName(element)) >= 0;\n  }\n\n  function getDocumentElement(element) {\n    // $FlowFixMe[incompatible-return]: assume body is always available\n    return ((isElement(element) ? element.ownerDocument : // $FlowFixMe[prop-missing]\n    element.document) || window.document).documentElement;\n  }\n\n  function getParentNode(element) {\n    if (getNodeName(element) === 'html') {\n      return element;\n    }\n\n    return (// this is a quicker (but less type safe) way to save quite some bytes from the bundle\n      // $FlowFixMe[incompatible-return]\n      // $FlowFixMe[prop-missing]\n      element.assignedSlot || // step into the shadow DOM of the parent of a slotted node\n      element.parentNode || ( // DOM Element detected\n      isShadowRoot(element) ? element.host : null) || // ShadowRoot detected\n      // $FlowFixMe[incompatible-call]: HTMLElement is a Node\n      getDocumentElement(element) // fallback\n\n    );\n  }\n\n  function getTrueOffsetParent(element) {\n    if (!isHTMLElement(element) || // https://github.com/popperjs/popper-core/issues/837\n    getComputedStyle$1(element).position === 'fixed') {\n      return null;\n    }\n\n    return element.offsetParent;\n  } // `.offsetParent` reports `null` for fixed elements, while absolute elements\n  // return the containing block\n\n\n  function getContainingBlock(element) {\n    var isFirefox = navigator.userAgent.toLowerCase().indexOf('firefox') !== -1;\n    var isIE = navigator.userAgent.indexOf('Trident') !== -1;\n\n    if (isIE && isHTMLElement(element)) {\n      // In IE 9, 10 and 11 fixed elements containing block is always established by the viewport\n      var elementCss = getComputedStyle$1(element);\n\n      if (elementCss.position === 'fixed') {\n        return null;\n      }\n    }\n\n    var currentNode = getParentNode(element);\n\n    while (isHTMLElement(currentNode) && ['html', 'body'].indexOf(getNodeName(currentNode)) < 0) {\n      var css = getComputedStyle$1(currentNode); // This is non-exhaustive but covers the most common CSS properties that\n      // create a containing block.\n      // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n\n      if (css.transform !== 'none' || css.perspective !== 'none' || css.contain === 'paint' || ['transform', 'perspective'].indexOf(css.willChange) !== -1 || isFirefox && css.willChange === 'filter' || isFirefox && css.filter && css.filter !== 'none') {\n        return currentNode;\n      } else {\n        currentNode = currentNode.parentNode;\n      }\n    }\n\n    return null;\n  } // Gets the closest ancestor positioned element. Handles some edge cases,\n  // such as table ancestors and cross browser bugs.\n\n\n  function getOffsetParent(element) {\n    var window = getWindow(element);\n    var offsetParent = getTrueOffsetParent(element);\n\n    while (offsetParent && isTableElement(offsetParent) && getComputedStyle$1(offsetParent).position === 'static') {\n      offsetParent = getTrueOffsetParent(offsetParent);\n    }\n\n    if (offsetParent && (getNodeName(offsetParent) === 'html' || getNodeName(offsetParent) === 'body' && getComputedStyle$1(offsetParent).position === 'static')) {\n      return window;\n    }\n\n    return offsetParent || getContainingBlock(element) || window;\n  }\n\n  function getMainAxisFromPlacement(placement) {\n    return ['top', 'bottom'].indexOf(placement) >= 0 ? 'x' : 'y';\n  }\n\n  var max = Math.max;\n  var min = Math.min;\n  var round = Math.round;\n\n  function within(min$1, value, max$1) {\n    return max(min$1, min(value, max$1));\n  }\n\n  function getFreshSideObject() {\n    return {\n      top: 0,\n      right: 0,\n      bottom: 0,\n      left: 0\n    };\n  }\n\n  function mergePaddingObject(paddingObject) {\n    return Object.assign({}, getFreshSideObject(), paddingObject);\n  }\n\n  function expandToHashMap(value, keys) {\n    return keys.reduce(function (hashMap, key) {\n      hashMap[key] = value;\n      return hashMap;\n    }, {});\n  }\n\n  var toPaddingObject = function toPaddingObject(padding, state) {\n    padding = typeof padding === 'function' ? padding(Object.assign({}, state.rects, {\n      placement: state.placement\n    })) : padding;\n    return mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));\n  };\n\n  function arrow(_ref) {\n    var _state$modifiersData$;\n\n    var state = _ref.state,\n        name = _ref.name,\n        options = _ref.options;\n    var arrowElement = state.elements.arrow;\n    var popperOffsets = state.modifiersData.popperOffsets;\n    var basePlacement = getBasePlacement(state.placement);\n    var axis = getMainAxisFromPlacement(basePlacement);\n    var isVertical = [left, right].indexOf(basePlacement) >= 0;\n    var len = isVertical ? 'height' : 'width';\n\n    if (!arrowElement || !popperOffsets) {\n      return;\n    }\n\n    var paddingObject = toPaddingObject(options.padding, state);\n    var arrowRect = getLayoutRect(arrowElement);\n    var minProp = axis === 'y' ? top : left;\n    var maxProp = axis === 'y' ? bottom : right;\n    var endDiff = state.rects.reference[len] + state.rects.reference[axis] - popperOffsets[axis] - state.rects.popper[len];\n    var startDiff = popperOffsets[axis] - state.rects.reference[axis];\n    var arrowOffsetParent = getOffsetParent(arrowElement);\n    var clientSize = arrowOffsetParent ? axis === 'y' ? arrowOffsetParent.clientHeight || 0 : arrowOffsetParent.clientWidth || 0 : 0;\n    var centerToReference = endDiff / 2 - startDiff / 2; // Make sure the arrow doesn't overflow the popper if the center point is\n    // outside of the popper bounds\n\n    var min = paddingObject[minProp];\n    var max = clientSize - arrowRect[len] - paddingObject[maxProp];\n    var center = clientSize / 2 - arrowRect[len] / 2 + centerToReference;\n    var offset = within(min, center, max); // Prevents breaking syntax highlighting...\n\n    var axisProp = axis;\n    state.modifiersData[name] = (_state$modifiersData$ = {}, _state$modifiersData$[axisProp] = offset, _state$modifiersData$.centerOffset = offset - center, _state$modifiersData$);\n  }\n\n  function effect$1(_ref2) {\n    var state = _ref2.state,\n        options = _ref2.options;\n    var _options$element = options.element,\n        arrowElement = _options$element === void 0 ? '[data-popper-arrow]' : _options$element;\n\n    if (arrowElement == null) {\n      return;\n    } // CSS selector\n\n\n    if (typeof arrowElement === 'string') {\n      arrowElement = state.elements.popper.querySelector(arrowElement);\n\n      if (!arrowElement) {\n        return;\n      }\n    }\n\n    if (!contains(state.elements.popper, arrowElement)) {\n\n      return;\n    }\n\n    state.elements.arrow = arrowElement;\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  var arrow$1 = {\n    name: 'arrow',\n    enabled: true,\n    phase: 'main',\n    fn: arrow,\n    effect: effect$1,\n    requires: ['popperOffsets'],\n    requiresIfExists: ['preventOverflow']\n  };\n\n  var unsetSides = {\n    top: 'auto',\n    right: 'auto',\n    bottom: 'auto',\n    left: 'auto'\n  }; // Round the offsets to the nearest suitable subpixel based on the DPR.\n  // Zooming can change the DPR, but it seems to report a value that will\n  // cleanly divide the values into the appropriate subpixels.\n\n  function roundOffsetsByDPR(_ref) {\n    var x = _ref.x,\n        y = _ref.y;\n    var win = window;\n    var dpr = win.devicePixelRatio || 1;\n    return {\n      x: round(round(x * dpr) / dpr) || 0,\n      y: round(round(y * dpr) / dpr) || 0\n    };\n  }\n\n  function mapToStyles(_ref2) {\n    var _Object$assign2;\n\n    var popper = _ref2.popper,\n        popperRect = _ref2.popperRect,\n        placement = _ref2.placement,\n        offsets = _ref2.offsets,\n        position = _ref2.position,\n        gpuAcceleration = _ref2.gpuAcceleration,\n        adaptive = _ref2.adaptive,\n        roundOffsets = _ref2.roundOffsets;\n\n    var _ref3 = roundOffsets === true ? roundOffsetsByDPR(offsets) : typeof roundOffsets === 'function' ? roundOffsets(offsets) : offsets,\n        _ref3$x = _ref3.x,\n        x = _ref3$x === void 0 ? 0 : _ref3$x,\n        _ref3$y = _ref3.y,\n        y = _ref3$y === void 0 ? 0 : _ref3$y;\n\n    var hasX = offsets.hasOwnProperty('x');\n    var hasY = offsets.hasOwnProperty('y');\n    var sideX = left;\n    var sideY = top;\n    var win = window;\n\n    if (adaptive) {\n      var offsetParent = getOffsetParent(popper);\n      var heightProp = 'clientHeight';\n      var widthProp = 'clientWidth';\n\n      if (offsetParent === getWindow(popper)) {\n        offsetParent = getDocumentElement(popper);\n\n        if (getComputedStyle$1(offsetParent).position !== 'static') {\n          heightProp = 'scrollHeight';\n          widthProp = 'scrollWidth';\n        }\n      } // $FlowFixMe[incompatible-cast]: force type refinement, we compare offsetParent with window above, but Flow doesn't detect it\n\n\n      offsetParent = offsetParent;\n\n      if (placement === top) {\n        sideY = bottom; // $FlowFixMe[prop-missing]\n\n        y -= offsetParent[heightProp] - popperRect.height;\n        y *= gpuAcceleration ? 1 : -1;\n      }\n\n      if (placement === left) {\n        sideX = right; // $FlowFixMe[prop-missing]\n\n        x -= offsetParent[widthProp] - popperRect.width;\n        x *= gpuAcceleration ? 1 : -1;\n      }\n    }\n\n    var commonStyles = Object.assign({\n      position: position\n    }, adaptive && unsetSides);\n\n    if (gpuAcceleration) {\n      var _Object$assign;\n\n      return Object.assign({}, commonStyles, (_Object$assign = {}, _Object$assign[sideY] = hasY ? '0' : '', _Object$assign[sideX] = hasX ? '0' : '', _Object$assign.transform = (win.devicePixelRatio || 1) < 2 ? \"translate(\" + x + \"px, \" + y + \"px)\" : \"translate3d(\" + x + \"px, \" + y + \"px, 0)\", _Object$assign));\n    }\n\n    return Object.assign({}, commonStyles, (_Object$assign2 = {}, _Object$assign2[sideY] = hasY ? y + \"px\" : '', _Object$assign2[sideX] = hasX ? x + \"px\" : '', _Object$assign2.transform = '', _Object$assign2));\n  }\n\n  function computeStyles(_ref4) {\n    var state = _ref4.state,\n        options = _ref4.options;\n    var _options$gpuAccelerat = options.gpuAcceleration,\n        gpuAcceleration = _options$gpuAccelerat === void 0 ? true : _options$gpuAccelerat,\n        _options$adaptive = options.adaptive,\n        adaptive = _options$adaptive === void 0 ? true : _options$adaptive,\n        _options$roundOffsets = options.roundOffsets,\n        roundOffsets = _options$roundOffsets === void 0 ? true : _options$roundOffsets;\n\n    var commonStyles = {\n      placement: getBasePlacement(state.placement),\n      popper: state.elements.popper,\n      popperRect: state.rects.popper,\n      gpuAcceleration: gpuAcceleration\n    };\n\n    if (state.modifiersData.popperOffsets != null) {\n      state.styles.popper = Object.assign({}, state.styles.popper, mapToStyles(Object.assign({}, commonStyles, {\n        offsets: state.modifiersData.popperOffsets,\n        position: state.options.strategy,\n        adaptive: adaptive,\n        roundOffsets: roundOffsets\n      })));\n    }\n\n    if (state.modifiersData.arrow != null) {\n      state.styles.arrow = Object.assign({}, state.styles.arrow, mapToStyles(Object.assign({}, commonStyles, {\n        offsets: state.modifiersData.arrow,\n        position: 'absolute',\n        adaptive: false,\n        roundOffsets: roundOffsets\n      })));\n    }\n\n    state.attributes.popper = Object.assign({}, state.attributes.popper, {\n      'data-popper-placement': state.placement\n    });\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  var computeStyles$1 = {\n    name: 'computeStyles',\n    enabled: true,\n    phase: 'beforeWrite',\n    fn: computeStyles,\n    data: {}\n  };\n\n  var passive = {\n    passive: true\n  };\n\n  function effect(_ref) {\n    var state = _ref.state,\n        instance = _ref.instance,\n        options = _ref.options;\n    var _options$scroll = options.scroll,\n        scroll = _options$scroll === void 0 ? true : _options$scroll,\n        _options$resize = options.resize,\n        resize = _options$resize === void 0 ? true : _options$resize;\n    var window = getWindow(state.elements.popper);\n    var scrollParents = [].concat(state.scrollParents.reference, state.scrollParents.popper);\n\n    if (scroll) {\n      scrollParents.forEach(function (scrollParent) {\n        scrollParent.addEventListener('scroll', instance.update, passive);\n      });\n    }\n\n    if (resize) {\n      window.addEventListener('resize', instance.update, passive);\n    }\n\n    return function () {\n      if (scroll) {\n        scrollParents.forEach(function (scrollParent) {\n          scrollParent.removeEventListener('scroll', instance.update, passive);\n        });\n      }\n\n      if (resize) {\n        window.removeEventListener('resize', instance.update, passive);\n      }\n    };\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  var eventListeners = {\n    name: 'eventListeners',\n    enabled: true,\n    phase: 'write',\n    fn: function fn() {},\n    effect: effect,\n    data: {}\n  };\n\n  var hash$1 = {\n    left: 'right',\n    right: 'left',\n    bottom: 'top',\n    top: 'bottom'\n  };\n  function getOppositePlacement(placement) {\n    return placement.replace(/left|right|bottom|top/g, function (matched) {\n      return hash$1[matched];\n    });\n  }\n\n  var hash = {\n    start: 'end',\n    end: 'start'\n  };\n  function getOppositeVariationPlacement(placement) {\n    return placement.replace(/start|end/g, function (matched) {\n      return hash[matched];\n    });\n  }\n\n  function getWindowScroll(node) {\n    var win = getWindow(node);\n    var scrollLeft = win.pageXOffset;\n    var scrollTop = win.pageYOffset;\n    return {\n      scrollLeft: scrollLeft,\n      scrollTop: scrollTop\n    };\n  }\n\n  function getWindowScrollBarX(element) {\n    // If <html> has a CSS width greater than the viewport, then this will be\n    // incorrect for RTL.\n    // Popper 1 is broken in this case and never had a bug report so let's assume\n    // it's not an issue. I don't think anyone ever specifies width on <html>\n    // anyway.\n    // Browsers where the left scrollbar doesn't cause an issue report `0` for\n    // this (e.g. Edge 2019, IE11, Safari)\n    return getBoundingClientRect(getDocumentElement(element)).left + getWindowScroll(element).scrollLeft;\n  }\n\n  function getViewportRect(element) {\n    var win = getWindow(element);\n    var html = getDocumentElement(element);\n    var visualViewport = win.visualViewport;\n    var width = html.clientWidth;\n    var height = html.clientHeight;\n    var x = 0;\n    var y = 0; // NB: This isn't supported on iOS <= 12. If the keyboard is open, the popper\n    // can be obscured underneath it.\n    // Also, `html.clientHeight` adds the bottom bar height in Safari iOS, even\n    // if it isn't open, so if this isn't available, the popper will be detected\n    // to overflow the bottom of the screen too early.\n\n    if (visualViewport) {\n      width = visualViewport.width;\n      height = visualViewport.height; // Uses Layout Viewport (like Chrome; Safari does not currently)\n      // In Chrome, it returns a value very close to 0 (+/-) but contains rounding\n      // errors due to floating point numbers, so we need to check precision.\n      // Safari returns a number <= 0, usually < -1 when pinch-zoomed\n      // Feature detection fails in mobile emulation mode in Chrome.\n      // Math.abs(win.innerWidth / visualViewport.scale - visualViewport.width) <\n      // 0.001\n      // Fallback here: \"Not Safari\" userAgent\n\n      if (!/^((?!chrome|android).)*safari/i.test(navigator.userAgent)) {\n        x = visualViewport.offsetLeft;\n        y = visualViewport.offsetTop;\n      }\n    }\n\n    return {\n      width: width,\n      height: height,\n      x: x + getWindowScrollBarX(element),\n      y: y\n    };\n  }\n\n  // of the `<html>` and `<body>` rect bounds if horizontally scrollable\n\n  function getDocumentRect(element) {\n    var _element$ownerDocumen;\n\n    var html = getDocumentElement(element);\n    var winScroll = getWindowScroll(element);\n    var body = (_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body;\n    var width = max(html.scrollWidth, html.clientWidth, body ? body.scrollWidth : 0, body ? body.clientWidth : 0);\n    var height = max(html.scrollHeight, html.clientHeight, body ? body.scrollHeight : 0, body ? body.clientHeight : 0);\n    var x = -winScroll.scrollLeft + getWindowScrollBarX(element);\n    var y = -winScroll.scrollTop;\n\n    if (getComputedStyle$1(body || html).direction === 'rtl') {\n      x += max(html.clientWidth, body ? body.clientWidth : 0) - width;\n    }\n\n    return {\n      width: width,\n      height: height,\n      x: x,\n      y: y\n    };\n  }\n\n  function isScrollParent(element) {\n    // Firefox wants us to check `-x` and `-y` variations as well\n    var _getComputedStyle = getComputedStyle$1(element),\n        overflow = _getComputedStyle.overflow,\n        overflowX = _getComputedStyle.overflowX,\n        overflowY = _getComputedStyle.overflowY;\n\n    return /auto|scroll|overlay|hidden/.test(overflow + overflowY + overflowX);\n  }\n\n  function getScrollParent(node) {\n    if (['html', 'body', '#document'].indexOf(getNodeName(node)) >= 0) {\n      // $FlowFixMe[incompatible-return]: assume body is always available\n      return node.ownerDocument.body;\n    }\n\n    if (isHTMLElement(node) && isScrollParent(node)) {\n      return node;\n    }\n\n    return getScrollParent(getParentNode(node));\n  }\n\n  /*\n  given a DOM element, return the list of all scroll parents, up the list of ancesors\n  until we get to the top window object. This list is what we attach scroll listeners\n  to, because if any of these parent elements scroll, we'll need to re-calculate the\n  reference element's position.\n  */\n\n  function listScrollParents(element, list) {\n    var _element$ownerDocumen;\n\n    if (list === void 0) {\n      list = [];\n    }\n\n    var scrollParent = getScrollParent(element);\n    var isBody = scrollParent === ((_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body);\n    var win = getWindow(scrollParent);\n    var target = isBody ? [win].concat(win.visualViewport || [], isScrollParent(scrollParent) ? scrollParent : []) : scrollParent;\n    var updatedList = list.concat(target);\n    return isBody ? updatedList : // $FlowFixMe[incompatible-call]: isBody tells us target will be an HTMLElement here\n    updatedList.concat(listScrollParents(getParentNode(target)));\n  }\n\n  function rectToClientRect(rect) {\n    return Object.assign({}, rect, {\n      left: rect.x,\n      top: rect.y,\n      right: rect.x + rect.width,\n      bottom: rect.y + rect.height\n    });\n  }\n\n  function getInnerBoundingClientRect(element) {\n    var rect = getBoundingClientRect(element);\n    rect.top = rect.top + element.clientTop;\n    rect.left = rect.left + element.clientLeft;\n    rect.bottom = rect.top + element.clientHeight;\n    rect.right = rect.left + element.clientWidth;\n    rect.width = element.clientWidth;\n    rect.height = element.clientHeight;\n    rect.x = rect.left;\n    rect.y = rect.top;\n    return rect;\n  }\n\n  function getClientRectFromMixedType(element, clippingParent) {\n    return clippingParent === viewport ? rectToClientRect(getViewportRect(element)) : isHTMLElement(clippingParent) ? getInnerBoundingClientRect(clippingParent) : rectToClientRect(getDocumentRect(getDocumentElement(element)));\n  } // A \"clipping parent\" is an overflowable container with the characteristic of\n  // clipping (or hiding) overflowing elements with a position different from\n  // `initial`\n\n\n  function getClippingParents(element) {\n    var clippingParents = listScrollParents(getParentNode(element));\n    var canEscapeClipping = ['absolute', 'fixed'].indexOf(getComputedStyle$1(element).position) >= 0;\n    var clipperElement = canEscapeClipping && isHTMLElement(element) ? getOffsetParent(element) : element;\n\n    if (!isElement(clipperElement)) {\n      return [];\n    } // $FlowFixMe[incompatible-return]: https://github.com/facebook/flow/issues/1414\n\n\n    return clippingParents.filter(function (clippingParent) {\n      return isElement(clippingParent) && contains(clippingParent, clipperElement) && getNodeName(clippingParent) !== 'body';\n    });\n  } // Gets the maximum area that the element is visible in due to any number of\n  // clipping parents\n\n\n  function getClippingRect(element, boundary, rootBoundary) {\n    var mainClippingParents = boundary === 'clippingParents' ? getClippingParents(element) : [].concat(boundary);\n    var clippingParents = [].concat(mainClippingParents, [rootBoundary]);\n    var firstClippingParent = clippingParents[0];\n    var clippingRect = clippingParents.reduce(function (accRect, clippingParent) {\n      var rect = getClientRectFromMixedType(element, clippingParent);\n      accRect.top = max(rect.top, accRect.top);\n      accRect.right = min(rect.right, accRect.right);\n      accRect.bottom = min(rect.bottom, accRect.bottom);\n      accRect.left = max(rect.left, accRect.left);\n      return accRect;\n    }, getClientRectFromMixedType(element, firstClippingParent));\n    clippingRect.width = clippingRect.right - clippingRect.left;\n    clippingRect.height = clippingRect.bottom - clippingRect.top;\n    clippingRect.x = clippingRect.left;\n    clippingRect.y = clippingRect.top;\n    return clippingRect;\n  }\n\n  function getVariation(placement) {\n    return placement.split('-')[1];\n  }\n\n  function computeOffsets(_ref) {\n    var reference = _ref.reference,\n        element = _ref.element,\n        placement = _ref.placement;\n    var basePlacement = placement ? getBasePlacement(placement) : null;\n    var variation = placement ? getVariation(placement) : null;\n    var commonX = reference.x + reference.width / 2 - element.width / 2;\n    var commonY = reference.y + reference.height / 2 - element.height / 2;\n    var offsets;\n\n    switch (basePlacement) {\n      case top:\n        offsets = {\n          x: commonX,\n          y: reference.y - element.height\n        };\n        break;\n\n      case bottom:\n        offsets = {\n          x: commonX,\n          y: reference.y + reference.height\n        };\n        break;\n\n      case right:\n        offsets = {\n          x: reference.x + reference.width,\n          y: commonY\n        };\n        break;\n\n      case left:\n        offsets = {\n          x: reference.x - element.width,\n          y: commonY\n        };\n        break;\n\n      default:\n        offsets = {\n          x: reference.x,\n          y: reference.y\n        };\n    }\n\n    var mainAxis = basePlacement ? getMainAxisFromPlacement(basePlacement) : null;\n\n    if (mainAxis != null) {\n      var len = mainAxis === 'y' ? 'height' : 'width';\n\n      switch (variation) {\n        case start:\n          offsets[mainAxis] = offsets[mainAxis] - (reference[len] / 2 - element[len] / 2);\n          break;\n\n        case end:\n          offsets[mainAxis] = offsets[mainAxis] + (reference[len] / 2 - element[len] / 2);\n          break;\n      }\n    }\n\n    return offsets;\n  }\n\n  function detectOverflow(state, options) {\n    if (options === void 0) {\n      options = {};\n    }\n\n    var _options = options,\n        _options$placement = _options.placement,\n        placement = _options$placement === void 0 ? state.placement : _options$placement,\n        _options$boundary = _options.boundary,\n        boundary = _options$boundary === void 0 ? clippingParents : _options$boundary,\n        _options$rootBoundary = _options.rootBoundary,\n        rootBoundary = _options$rootBoundary === void 0 ? viewport : _options$rootBoundary,\n        _options$elementConte = _options.elementContext,\n        elementContext = _options$elementConte === void 0 ? popper : _options$elementConte,\n        _options$altBoundary = _options.altBoundary,\n        altBoundary = _options$altBoundary === void 0 ? false : _options$altBoundary,\n        _options$padding = _options.padding,\n        padding = _options$padding === void 0 ? 0 : _options$padding;\n    var paddingObject = mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));\n    var altContext = elementContext === popper ? reference : popper;\n    var referenceElement = state.elements.reference;\n    var popperRect = state.rects.popper;\n    var element = state.elements[altBoundary ? altContext : elementContext];\n    var clippingClientRect = getClippingRect(isElement(element) ? element : element.contextElement || getDocumentElement(state.elements.popper), boundary, rootBoundary);\n    var referenceClientRect = getBoundingClientRect(referenceElement);\n    var popperOffsets = computeOffsets({\n      reference: referenceClientRect,\n      element: popperRect,\n      strategy: 'absolute',\n      placement: placement\n    });\n    var popperClientRect = rectToClientRect(Object.assign({}, popperRect, popperOffsets));\n    var elementClientRect = elementContext === popper ? popperClientRect : referenceClientRect; // positive = overflowing the clipping rect\n    // 0 or negative = within the clipping rect\n\n    var overflowOffsets = {\n      top: clippingClientRect.top - elementClientRect.top + paddingObject.top,\n      bottom: elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom,\n      left: clippingClientRect.left - elementClientRect.left + paddingObject.left,\n      right: elementClientRect.right - clippingClientRect.right + paddingObject.right\n    };\n    var offsetData = state.modifiersData.offset; // Offsets can be applied only to the popper element\n\n    if (elementContext === popper && offsetData) {\n      var offset = offsetData[placement];\n      Object.keys(overflowOffsets).forEach(function (key) {\n        var multiply = [right, bottom].indexOf(key) >= 0 ? 1 : -1;\n        var axis = [top, bottom].indexOf(key) >= 0 ? 'y' : 'x';\n        overflowOffsets[key] += offset[axis] * multiply;\n      });\n    }\n\n    return overflowOffsets;\n  }\n\n  function computeAutoPlacement(state, options) {\n    if (options === void 0) {\n      options = {};\n    }\n\n    var _options = options,\n        placement = _options.placement,\n        boundary = _options.boundary,\n        rootBoundary = _options.rootBoundary,\n        padding = _options.padding,\n        flipVariations = _options.flipVariations,\n        _options$allowedAutoP = _options.allowedAutoPlacements,\n        allowedAutoPlacements = _options$allowedAutoP === void 0 ? placements : _options$allowedAutoP;\n    var variation = getVariation(placement);\n    var placements$1 = variation ? flipVariations ? variationPlacements : variationPlacements.filter(function (placement) {\n      return getVariation(placement) === variation;\n    }) : basePlacements;\n    var allowedPlacements = placements$1.filter(function (placement) {\n      return allowedAutoPlacements.indexOf(placement) >= 0;\n    });\n\n    if (allowedPlacements.length === 0) {\n      allowedPlacements = placements$1;\n    } // $FlowFixMe[incompatible-type]: Flow seems to have problems with two array unions...\n\n\n    var overflows = allowedPlacements.reduce(function (acc, placement) {\n      acc[placement] = detectOverflow(state, {\n        placement: placement,\n        boundary: boundary,\n        rootBoundary: rootBoundary,\n        padding: padding\n      })[getBasePlacement(placement)];\n      return acc;\n    }, {});\n    return Object.keys(overflows).sort(function (a, b) {\n      return overflows[a] - overflows[b];\n    });\n  }\n\n  function getExpandedFallbackPlacements(placement) {\n    if (getBasePlacement(placement) === auto) {\n      return [];\n    }\n\n    var oppositePlacement = getOppositePlacement(placement);\n    return [getOppositeVariationPlacement(placement), oppositePlacement, getOppositeVariationPlacement(oppositePlacement)];\n  }\n\n  function flip(_ref) {\n    var state = _ref.state,\n        options = _ref.options,\n        name = _ref.name;\n\n    if (state.modifiersData[name]._skip) {\n      return;\n    }\n\n    var _options$mainAxis = options.mainAxis,\n        checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\n        _options$altAxis = options.altAxis,\n        checkAltAxis = _options$altAxis === void 0 ? true : _options$altAxis,\n        specifiedFallbackPlacements = options.fallbackPlacements,\n        padding = options.padding,\n        boundary = options.boundary,\n        rootBoundary = options.rootBoundary,\n        altBoundary = options.altBoundary,\n        _options$flipVariatio = options.flipVariations,\n        flipVariations = _options$flipVariatio === void 0 ? true : _options$flipVariatio,\n        allowedAutoPlacements = options.allowedAutoPlacements;\n    var preferredPlacement = state.options.placement;\n    var basePlacement = getBasePlacement(preferredPlacement);\n    var isBasePlacement = basePlacement === preferredPlacement;\n    var fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipVariations ? [getOppositePlacement(preferredPlacement)] : getExpandedFallbackPlacements(preferredPlacement));\n    var placements = [preferredPlacement].concat(fallbackPlacements).reduce(function (acc, placement) {\n      return acc.concat(getBasePlacement(placement) === auto ? computeAutoPlacement(state, {\n        placement: placement,\n        boundary: boundary,\n        rootBoundary: rootBoundary,\n        padding: padding,\n        flipVariations: flipVariations,\n        allowedAutoPlacements: allowedAutoPlacements\n      }) : placement);\n    }, []);\n    var referenceRect = state.rects.reference;\n    var popperRect = state.rects.popper;\n    var checksMap = new Map();\n    var makeFallbackChecks = true;\n    var firstFittingPlacement = placements[0];\n\n    for (var i = 0; i < placements.length; i++) {\n      var placement = placements[i];\n\n      var _basePlacement = getBasePlacement(placement);\n\n      var isStartVariation = getVariation(placement) === start;\n      var isVertical = [top, bottom].indexOf(_basePlacement) >= 0;\n      var len = isVertical ? 'width' : 'height';\n      var overflow = detectOverflow(state, {\n        placement: placement,\n        boundary: boundary,\n        rootBoundary: rootBoundary,\n        altBoundary: altBoundary,\n        padding: padding\n      });\n      var mainVariationSide = isVertical ? isStartVariation ? right : left : isStartVariation ? bottom : top;\n\n      if (referenceRect[len] > popperRect[len]) {\n        mainVariationSide = getOppositePlacement(mainVariationSide);\n      }\n\n      var altVariationSide = getOppositePlacement(mainVariationSide);\n      var checks = [];\n\n      if (checkMainAxis) {\n        checks.push(overflow[_basePlacement] <= 0);\n      }\n\n      if (checkAltAxis) {\n        checks.push(overflow[mainVariationSide] <= 0, overflow[altVariationSide] <= 0);\n      }\n\n      if (checks.every(function (check) {\n        return check;\n      })) {\n        firstFittingPlacement = placement;\n        makeFallbackChecks = false;\n        break;\n      }\n\n      checksMap.set(placement, checks);\n    }\n\n    if (makeFallbackChecks) {\n      // `2` may be desired in some cases – research later\n      var numberOfChecks = flipVariations ? 3 : 1;\n\n      var _loop = function _loop(_i) {\n        var fittingPlacement = placements.find(function (placement) {\n          var checks = checksMap.get(placement);\n\n          if (checks) {\n            return checks.slice(0, _i).every(function (check) {\n              return check;\n            });\n          }\n        });\n\n        if (fittingPlacement) {\n          firstFittingPlacement = fittingPlacement;\n          return \"break\";\n        }\n      };\n\n      for (var _i = numberOfChecks; _i > 0; _i--) {\n        var _ret = _loop(_i);\n\n        if (_ret === \"break\") break;\n      }\n    }\n\n    if (state.placement !== firstFittingPlacement) {\n      state.modifiersData[name]._skip = true;\n      state.placement = firstFittingPlacement;\n      state.reset = true;\n    }\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  var flip$1 = {\n    name: 'flip',\n    enabled: true,\n    phase: 'main',\n    fn: flip,\n    requiresIfExists: ['offset'],\n    data: {\n      _skip: false\n    }\n  };\n\n  function getSideOffsets(overflow, rect, preventedOffsets) {\n    if (preventedOffsets === void 0) {\n      preventedOffsets = {\n        x: 0,\n        y: 0\n      };\n    }\n\n    return {\n      top: overflow.top - rect.height - preventedOffsets.y,\n      right: overflow.right - rect.width + preventedOffsets.x,\n      bottom: overflow.bottom - rect.height + preventedOffsets.y,\n      left: overflow.left - rect.width - preventedOffsets.x\n    };\n  }\n\n  function isAnySideFullyClipped(overflow) {\n    return [top, right, bottom, left].some(function (side) {\n      return overflow[side] >= 0;\n    });\n  }\n\n  function hide(_ref) {\n    var state = _ref.state,\n        name = _ref.name;\n    var referenceRect = state.rects.reference;\n    var popperRect = state.rects.popper;\n    var preventedOffsets = state.modifiersData.preventOverflow;\n    var referenceOverflow = detectOverflow(state, {\n      elementContext: 'reference'\n    });\n    var popperAltOverflow = detectOverflow(state, {\n      altBoundary: true\n    });\n    var referenceClippingOffsets = getSideOffsets(referenceOverflow, referenceRect);\n    var popperEscapeOffsets = getSideOffsets(popperAltOverflow, popperRect, preventedOffsets);\n    var isReferenceHidden = isAnySideFullyClipped(referenceClippingOffsets);\n    var hasPopperEscaped = isAnySideFullyClipped(popperEscapeOffsets);\n    state.modifiersData[name] = {\n      referenceClippingOffsets: referenceClippingOffsets,\n      popperEscapeOffsets: popperEscapeOffsets,\n      isReferenceHidden: isReferenceHidden,\n      hasPopperEscaped: hasPopperEscaped\n    };\n    state.attributes.popper = Object.assign({}, state.attributes.popper, {\n      'data-popper-reference-hidden': isReferenceHidden,\n      'data-popper-escaped': hasPopperEscaped\n    });\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  var hide$1 = {\n    name: 'hide',\n    enabled: true,\n    phase: 'main',\n    requiresIfExists: ['preventOverflow'],\n    fn: hide\n  };\n\n  function distanceAndSkiddingToXY(placement, rects, offset) {\n    var basePlacement = getBasePlacement(placement);\n    var invertDistance = [left, top].indexOf(basePlacement) >= 0 ? -1 : 1;\n\n    var _ref = typeof offset === 'function' ? offset(Object.assign({}, rects, {\n      placement: placement\n    })) : offset,\n        skidding = _ref[0],\n        distance = _ref[1];\n\n    skidding = skidding || 0;\n    distance = (distance || 0) * invertDistance;\n    return [left, right].indexOf(basePlacement) >= 0 ? {\n      x: distance,\n      y: skidding\n    } : {\n      x: skidding,\n      y: distance\n    };\n  }\n\n  function offset(_ref2) {\n    var state = _ref2.state,\n        options = _ref2.options,\n        name = _ref2.name;\n    var _options$offset = options.offset,\n        offset = _options$offset === void 0 ? [0, 0] : _options$offset;\n    var data = placements.reduce(function (acc, placement) {\n      acc[placement] = distanceAndSkiddingToXY(placement, state.rects, offset);\n      return acc;\n    }, {});\n    var _data$state$placement = data[state.placement],\n        x = _data$state$placement.x,\n        y = _data$state$placement.y;\n\n    if (state.modifiersData.popperOffsets != null) {\n      state.modifiersData.popperOffsets.x += x;\n      state.modifiersData.popperOffsets.y += y;\n    }\n\n    state.modifiersData[name] = data;\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  var offset$1 = {\n    name: 'offset',\n    enabled: true,\n    phase: 'main',\n    requires: ['popperOffsets'],\n    fn: offset\n  };\n\n  function popperOffsets(_ref) {\n    var state = _ref.state,\n        name = _ref.name;\n    // Offsets are the actual position the popper needs to have to be\n    // properly positioned near its reference element\n    // This is the most basic placement, and will be adjusted by\n    // the modifiers in the next step\n    state.modifiersData[name] = computeOffsets({\n      reference: state.rects.reference,\n      element: state.rects.popper,\n      strategy: 'absolute',\n      placement: state.placement\n    });\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  var popperOffsets$1 = {\n    name: 'popperOffsets',\n    enabled: true,\n    phase: 'read',\n    fn: popperOffsets,\n    data: {}\n  };\n\n  function getAltAxis(axis) {\n    return axis === 'x' ? 'y' : 'x';\n  }\n\n  function preventOverflow(_ref) {\n    var state = _ref.state,\n        options = _ref.options,\n        name = _ref.name;\n    var _options$mainAxis = options.mainAxis,\n        checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\n        _options$altAxis = options.altAxis,\n        checkAltAxis = _options$altAxis === void 0 ? false : _options$altAxis,\n        boundary = options.boundary,\n        rootBoundary = options.rootBoundary,\n        altBoundary = options.altBoundary,\n        padding = options.padding,\n        _options$tether = options.tether,\n        tether = _options$tether === void 0 ? true : _options$tether,\n        _options$tetherOffset = options.tetherOffset,\n        tetherOffset = _options$tetherOffset === void 0 ? 0 : _options$tetherOffset;\n    var overflow = detectOverflow(state, {\n      boundary: boundary,\n      rootBoundary: rootBoundary,\n      padding: padding,\n      altBoundary: altBoundary\n    });\n    var basePlacement = getBasePlacement(state.placement);\n    var variation = getVariation(state.placement);\n    var isBasePlacement = !variation;\n    var mainAxis = getMainAxisFromPlacement(basePlacement);\n    var altAxis = getAltAxis(mainAxis);\n    var popperOffsets = state.modifiersData.popperOffsets;\n    var referenceRect = state.rects.reference;\n    var popperRect = state.rects.popper;\n    var tetherOffsetValue = typeof tetherOffset === 'function' ? tetherOffset(Object.assign({}, state.rects, {\n      placement: state.placement\n    })) : tetherOffset;\n    var data = {\n      x: 0,\n      y: 0\n    };\n\n    if (!popperOffsets) {\n      return;\n    }\n\n    if (checkMainAxis || checkAltAxis) {\n      var mainSide = mainAxis === 'y' ? top : left;\n      var altSide = mainAxis === 'y' ? bottom : right;\n      var len = mainAxis === 'y' ? 'height' : 'width';\n      var offset = popperOffsets[mainAxis];\n      var min$1 = popperOffsets[mainAxis] + overflow[mainSide];\n      var max$1 = popperOffsets[mainAxis] - overflow[altSide];\n      var additive = tether ? -popperRect[len] / 2 : 0;\n      var minLen = variation === start ? referenceRect[len] : popperRect[len];\n      var maxLen = variation === start ? -popperRect[len] : -referenceRect[len]; // We need to include the arrow in the calculation so the arrow doesn't go\n      // outside the reference bounds\n\n      var arrowElement = state.elements.arrow;\n      var arrowRect = tether && arrowElement ? getLayoutRect(arrowElement) : {\n        width: 0,\n        height: 0\n      };\n      var arrowPaddingObject = state.modifiersData['arrow#persistent'] ? state.modifiersData['arrow#persistent'].padding : getFreshSideObject();\n      var arrowPaddingMin = arrowPaddingObject[mainSide];\n      var arrowPaddingMax = arrowPaddingObject[altSide]; // If the reference length is smaller than the arrow length, we don't want\n      // to include its full size in the calculation. If the reference is small\n      // and near the edge of a boundary, the popper can overflow even if the\n      // reference is not overflowing as well (e.g. virtual elements with no\n      // width or height)\n\n      var arrowLen = within(0, referenceRect[len], arrowRect[len]);\n      var minOffset = isBasePlacement ? referenceRect[len] / 2 - additive - arrowLen - arrowPaddingMin - tetherOffsetValue : minLen - arrowLen - arrowPaddingMin - tetherOffsetValue;\n      var maxOffset = isBasePlacement ? -referenceRect[len] / 2 + additive + arrowLen + arrowPaddingMax + tetherOffsetValue : maxLen + arrowLen + arrowPaddingMax + tetherOffsetValue;\n      var arrowOffsetParent = state.elements.arrow && getOffsetParent(state.elements.arrow);\n      var clientOffset = arrowOffsetParent ? mainAxis === 'y' ? arrowOffsetParent.clientTop || 0 : arrowOffsetParent.clientLeft || 0 : 0;\n      var offsetModifierValue = state.modifiersData.offset ? state.modifiersData.offset[state.placement][mainAxis] : 0;\n      var tetherMin = popperOffsets[mainAxis] + minOffset - offsetModifierValue - clientOffset;\n      var tetherMax = popperOffsets[mainAxis] + maxOffset - offsetModifierValue;\n\n      if (checkMainAxis) {\n        var preventedOffset = within(tether ? min(min$1, tetherMin) : min$1, offset, tether ? max(max$1, tetherMax) : max$1);\n        popperOffsets[mainAxis] = preventedOffset;\n        data[mainAxis] = preventedOffset - offset;\n      }\n\n      if (checkAltAxis) {\n        var _mainSide = mainAxis === 'x' ? top : left;\n\n        var _altSide = mainAxis === 'x' ? bottom : right;\n\n        var _offset = popperOffsets[altAxis];\n\n        var _min = _offset + overflow[_mainSide];\n\n        var _max = _offset - overflow[_altSide];\n\n        var _preventedOffset = within(tether ? min(_min, tetherMin) : _min, _offset, tether ? max(_max, tetherMax) : _max);\n\n        popperOffsets[altAxis] = _preventedOffset;\n        data[altAxis] = _preventedOffset - _offset;\n      }\n    }\n\n    state.modifiersData[name] = data;\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  var preventOverflow$1 = {\n    name: 'preventOverflow',\n    enabled: true,\n    phase: 'main',\n    fn: preventOverflow,\n    requiresIfExists: ['offset']\n  };\n\n  function getHTMLElementScroll(element) {\n    return {\n      scrollLeft: element.scrollLeft,\n      scrollTop: element.scrollTop\n    };\n  }\n\n  function getNodeScroll(node) {\n    if (node === getWindow(node) || !isHTMLElement(node)) {\n      return getWindowScroll(node);\n    } else {\n      return getHTMLElementScroll(node);\n    }\n  }\n\n  // Composite means it takes into account transforms as well as layout.\n\n  function getCompositeRect(elementOrVirtualElement, offsetParent, isFixed) {\n    if (isFixed === void 0) {\n      isFixed = false;\n    }\n\n    var documentElement = getDocumentElement(offsetParent);\n    var rect = getBoundingClientRect(elementOrVirtualElement);\n    var isOffsetParentAnElement = isHTMLElement(offsetParent);\n    var scroll = {\n      scrollLeft: 0,\n      scrollTop: 0\n    };\n    var offsets = {\n      x: 0,\n      y: 0\n    };\n\n    if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {\n      if (getNodeName(offsetParent) !== 'body' || // https://github.com/popperjs/popper-core/issues/1078\n      isScrollParent(documentElement)) {\n        scroll = getNodeScroll(offsetParent);\n      }\n\n      if (isHTMLElement(offsetParent)) {\n        offsets = getBoundingClientRect(offsetParent);\n        offsets.x += offsetParent.clientLeft;\n        offsets.y += offsetParent.clientTop;\n      } else if (documentElement) {\n        offsets.x = getWindowScrollBarX(documentElement);\n      }\n    }\n\n    return {\n      x: rect.left + scroll.scrollLeft - offsets.x,\n      y: rect.top + scroll.scrollTop - offsets.y,\n      width: rect.width,\n      height: rect.height\n    };\n  }\n\n  function order(modifiers) {\n    var map = new Map();\n    var visited = new Set();\n    var result = [];\n    modifiers.forEach(function (modifier) {\n      map.set(modifier.name, modifier);\n    }); // On visiting object, check for its dependencies and visit them recursively\n\n    function sort(modifier) {\n      visited.add(modifier.name);\n      var requires = [].concat(modifier.requires || [], modifier.requiresIfExists || []);\n      requires.forEach(function (dep) {\n        if (!visited.has(dep)) {\n          var depModifier = map.get(dep);\n\n          if (depModifier) {\n            sort(depModifier);\n          }\n        }\n      });\n      result.push(modifier);\n    }\n\n    modifiers.forEach(function (modifier) {\n      if (!visited.has(modifier.name)) {\n        // check for visited object\n        sort(modifier);\n      }\n    });\n    return result;\n  }\n\n  function orderModifiers(modifiers) {\n    // order based on dependencies\n    var orderedModifiers = order(modifiers); // order based on phase\n\n    return modifierPhases.reduce(function (acc, phase) {\n      return acc.concat(orderedModifiers.filter(function (modifier) {\n        return modifier.phase === phase;\n      }));\n    }, []);\n  }\n\n  function debounce(fn) {\n    var pending;\n    return function () {\n      if (!pending) {\n        pending = new Promise(function (resolve) {\n          Promise.resolve().then(function () {\n            pending = undefined;\n            resolve(fn());\n          });\n        });\n      }\n\n      return pending;\n    };\n  }\n\n  function mergeByName(modifiers) {\n    var merged = modifiers.reduce(function (merged, current) {\n      var existing = merged[current.name];\n      merged[current.name] = existing ? Object.assign({}, existing, current, {\n        options: Object.assign({}, existing.options, current.options),\n        data: Object.assign({}, existing.data, current.data)\n      }) : current;\n      return merged;\n    }, {}); // IE11 does not support Object.values\n\n    return Object.keys(merged).map(function (key) {\n      return merged[key];\n    });\n  }\n\n  var DEFAULT_OPTIONS = {\n    placement: 'bottom',\n    modifiers: [],\n    strategy: 'absolute'\n  };\n\n  function areValidElements() {\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    return !args.some(function (element) {\n      return !(element && typeof element.getBoundingClientRect === 'function');\n    });\n  }\n\n  function popperGenerator(generatorOptions) {\n    if (generatorOptions === void 0) {\n      generatorOptions = {};\n    }\n\n    var _generatorOptions = generatorOptions,\n        _generatorOptions$def = _generatorOptions.defaultModifiers,\n        defaultModifiers = _generatorOptions$def === void 0 ? [] : _generatorOptions$def,\n        _generatorOptions$def2 = _generatorOptions.defaultOptions,\n        defaultOptions = _generatorOptions$def2 === void 0 ? DEFAULT_OPTIONS : _generatorOptions$def2;\n    return function createPopper(reference, popper, options) {\n      if (options === void 0) {\n        options = defaultOptions;\n      }\n\n      var state = {\n        placement: 'bottom',\n        orderedModifiers: [],\n        options: Object.assign({}, DEFAULT_OPTIONS, defaultOptions),\n        modifiersData: {},\n        elements: {\n          reference: reference,\n          popper: popper\n        },\n        attributes: {},\n        styles: {}\n      };\n      var effectCleanupFns = [];\n      var isDestroyed = false;\n      var instance = {\n        state: state,\n        setOptions: function setOptions(options) {\n          cleanupModifierEffects();\n          state.options = Object.assign({}, defaultOptions, state.options, options);\n          state.scrollParents = {\n            reference: isElement(reference) ? listScrollParents(reference) : reference.contextElement ? listScrollParents(reference.contextElement) : [],\n            popper: listScrollParents(popper)\n          }; // Orders the modifiers based on their dependencies and `phase`\n          // properties\n\n          var orderedModifiers = orderModifiers(mergeByName([].concat(defaultModifiers, state.options.modifiers))); // Strip out disabled modifiers\n\n          state.orderedModifiers = orderedModifiers.filter(function (m) {\n            return m.enabled;\n          }); // Validate the provided modifiers so that the consumer will get warned\n\n          runModifierEffects();\n          return instance.update();\n        },\n        // Sync update – it will always be executed, even if not necessary. This\n        // is useful for low frequency updates where sync behavior simplifies the\n        // logic.\n        // For high frequency updates (e.g. `resize` and `scroll` events), always\n        // prefer the async Popper#update method\n        forceUpdate: function forceUpdate() {\n          if (isDestroyed) {\n            return;\n          }\n\n          var _state$elements = state.elements,\n              reference = _state$elements.reference,\n              popper = _state$elements.popper; // Don't proceed if `reference` or `popper` are not valid elements\n          // anymore\n\n          if (!areValidElements(reference, popper)) {\n\n            return;\n          } // Store the reference and popper rects to be read by modifiers\n\n\n          state.rects = {\n            reference: getCompositeRect(reference, getOffsetParent(popper), state.options.strategy === 'fixed'),\n            popper: getLayoutRect(popper)\n          }; // Modifiers have the ability to reset the current update cycle. The\n          // most common use case for this is the `flip` modifier changing the\n          // placement, which then needs to re-run all the modifiers, because the\n          // logic was previously ran for the previous placement and is therefore\n          // stale/incorrect\n\n          state.reset = false;\n          state.placement = state.options.placement; // On each update cycle, the `modifiersData` property for each modifier\n          // is filled with the initial data specified by the modifier. This means\n          // it doesn't persist and is fresh on each update.\n          // To ensure persistent data, use `${name}#persistent`\n\n          state.orderedModifiers.forEach(function (modifier) {\n            return state.modifiersData[modifier.name] = Object.assign({}, modifier.data);\n          });\n\n          for (var index = 0; index < state.orderedModifiers.length; index++) {\n\n            if (state.reset === true) {\n              state.reset = false;\n              index = -1;\n              continue;\n            }\n\n            var _state$orderedModifie = state.orderedModifiers[index],\n                fn = _state$orderedModifie.fn,\n                _state$orderedModifie2 = _state$orderedModifie.options,\n                _options = _state$orderedModifie2 === void 0 ? {} : _state$orderedModifie2,\n                name = _state$orderedModifie.name;\n\n            if (typeof fn === 'function') {\n              state = fn({\n                state: state,\n                options: _options,\n                name: name,\n                instance: instance\n              }) || state;\n            }\n          }\n        },\n        // Async and optimistically optimized update – it will not be executed if\n        // not necessary (debounced to run at most once-per-tick)\n        update: debounce(function () {\n          return new Promise(function (resolve) {\n            instance.forceUpdate();\n            resolve(state);\n          });\n        }),\n        destroy: function destroy() {\n          cleanupModifierEffects();\n          isDestroyed = true;\n        }\n      };\n\n      if (!areValidElements(reference, popper)) {\n\n        return instance;\n      }\n\n      instance.setOptions(options).then(function (state) {\n        if (!isDestroyed && options.onFirstUpdate) {\n          options.onFirstUpdate(state);\n        }\n      }); // Modifiers have the ability to execute arbitrary code before the first\n      // update cycle runs. They will be executed in the same order as the update\n      // cycle. This is useful when a modifier adds some persistent data that\n      // other modifiers need to use, but the modifier is run after the dependent\n      // one.\n\n      function runModifierEffects() {\n        state.orderedModifiers.forEach(function (_ref3) {\n          var name = _ref3.name,\n              _ref3$options = _ref3.options,\n              options = _ref3$options === void 0 ? {} : _ref3$options,\n              effect = _ref3.effect;\n\n          if (typeof effect === 'function') {\n            var cleanupFn = effect({\n              state: state,\n              name: name,\n              instance: instance,\n              options: options\n            });\n\n            var noopFn = function noopFn() {};\n\n            effectCleanupFns.push(cleanupFn || noopFn);\n          }\n        });\n      }\n\n      function cleanupModifierEffects() {\n        effectCleanupFns.forEach(function (fn) {\n          return fn();\n        });\n        effectCleanupFns = [];\n      }\n\n      return instance;\n    };\n  }\n  var createPopper$2 = /*#__PURE__*/popperGenerator(); // eslint-disable-next-line import/no-unused-modules\n\n  var defaultModifiers$1 = [eventListeners, popperOffsets$1, computeStyles$1, applyStyles$1];\n  var createPopper$1 = /*#__PURE__*/popperGenerator({\n    defaultModifiers: defaultModifiers$1\n  }); // eslint-disable-next-line import/no-unused-modules\n\n  var defaultModifiers = [eventListeners, popperOffsets$1, computeStyles$1, applyStyles$1, offset$1, flip$1, preventOverflow$1, arrow$1, hide$1];\n  var createPopper = /*#__PURE__*/popperGenerator({\n    defaultModifiers: defaultModifiers\n  }); // eslint-disable-next-line import/no-unused-modules\n\n  var Popper = /*#__PURE__*/Object.freeze({\n    __proto__: null,\n    popperGenerator: popperGenerator,\n    detectOverflow: detectOverflow,\n    createPopperBase: createPopper$2,\n    createPopper: createPopper,\n    createPopperLite: createPopper$1,\n    top: top,\n    bottom: bottom,\n    right: right,\n    left: left,\n    auto: auto,\n    basePlacements: basePlacements,\n    start: start,\n    end: end,\n    clippingParents: clippingParents,\n    viewport: viewport,\n    popper: popper,\n    reference: reference,\n    variationPlacements: variationPlacements,\n    placements: placements,\n    beforeRead: beforeRead,\n    read: read,\n    afterRead: afterRead,\n    beforeMain: beforeMain,\n    main: main,\n    afterMain: afterMain,\n    beforeWrite: beforeWrite,\n    write: write,\n    afterWrite: afterWrite,\n    modifierPhases: modifierPhases,\n    applyStyles: applyStyles$1,\n    arrow: arrow$1,\n    computeStyles: computeStyles$1,\n    eventListeners: eventListeners,\n    flip: flip$1,\n    hide: hide$1,\n    offset: offset$1,\n    popperOffsets: popperOffsets$1,\n    preventOverflow: preventOverflow$1\n  });\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): dropdown.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$8 = 'dropdown';\n  const DATA_KEY$7 = 'bs.dropdown';\n  const EVENT_KEY$7 = `.${DATA_KEY$7}`;\n  const DATA_API_KEY$4 = '.data-api';\n  const ESCAPE_KEY$2 = 'Escape';\n  const SPACE_KEY = 'Space';\n  const TAB_KEY = 'Tab';\n  const ARROW_UP_KEY = 'ArrowUp';\n  const ARROW_DOWN_KEY = 'ArrowDown';\n  const RIGHT_MOUSE_BUTTON = 2; // MouseEvent.button value for the secondary button, usually the right button\n\n  const REGEXP_KEYDOWN = new RegExp(`${ARROW_UP_KEY}|${ARROW_DOWN_KEY}|${ESCAPE_KEY$2}`);\n  const EVENT_HIDE$4 = `hide${EVENT_KEY$7}`;\n  const EVENT_HIDDEN$4 = `hidden${EVENT_KEY$7}`;\n  const EVENT_SHOW$4 = `show${EVENT_KEY$7}`;\n  const EVENT_SHOWN$4 = `shown${EVENT_KEY$7}`;\n  const EVENT_CLICK = `click${EVENT_KEY$7}`;\n  const EVENT_CLICK_DATA_API$3 = `click${EVENT_KEY$7}${DATA_API_KEY$4}`;\n  const EVENT_KEYDOWN_DATA_API = `keydown${EVENT_KEY$7}${DATA_API_KEY$4}`;\n  const EVENT_KEYUP_DATA_API = `keyup${EVENT_KEY$7}${DATA_API_KEY$4}`;\n  const CLASS_NAME_SHOW$7 = 'show';\n  const CLASS_NAME_DROPUP = 'dropup';\n  const CLASS_NAME_DROPEND = 'dropend';\n  const CLASS_NAME_DROPSTART = 'dropstart';\n  const CLASS_NAME_NAVBAR = 'navbar';\n  const SELECTOR_DATA_TOGGLE$3 = '[data-bs-toggle=\"dropdown\"]';\n  const SELECTOR_MENU = '.dropdown-menu';\n  const SELECTOR_NAVBAR_NAV = '.navbar-nav';\n  const SELECTOR_VISIBLE_ITEMS = '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)';\n  const PLACEMENT_TOP = isRTL() ? 'top-end' : 'top-start';\n  const PLACEMENT_TOPEND = isRTL() ? 'top-start' : 'top-end';\n  const PLACEMENT_BOTTOM = isRTL() ? 'bottom-end' : 'bottom-start';\n  const PLACEMENT_BOTTOMEND = isRTL() ? 'bottom-start' : 'bottom-end';\n  const PLACEMENT_RIGHT = isRTL() ? 'left-start' : 'right-start';\n  const PLACEMENT_LEFT = isRTL() ? 'right-start' : 'left-start';\n  const Default$7 = {\n    offset: [0, 2],\n    boundary: 'clippingParents',\n    reference: 'toggle',\n    display: 'dynamic',\n    popperConfig: null,\n    autoClose: true\n  };\n  const DefaultType$7 = {\n    offset: '(array|string|function)',\n    boundary: '(string|element)',\n    reference: '(string|element|object)',\n    display: 'string',\n    popperConfig: '(null|object|function)',\n    autoClose: '(boolean|string)'\n  };\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Dropdown extends BaseComponent {\n    constructor(element, config) {\n      super(element);\n      this._popper = null;\n      this._config = this._getConfig(config);\n      this._menu = this._getMenuElement();\n      this._inNavbar = this._detectNavbar();\n\n      this._addEventListeners();\n    } // Getters\n\n\n    static get Default() {\n      return Default$7;\n    }\n\n    static get DefaultType() {\n      return DefaultType$7;\n    }\n\n    static get NAME() {\n      return NAME$8;\n    } // Public\n\n\n    toggle() {\n      if (isDisabled(this._element)) {\n        return;\n      }\n\n      const isActive = this._element.classList.contains(CLASS_NAME_SHOW$7);\n\n      if (isActive) {\n        this.hide();\n        return;\n      }\n\n      this.show();\n    }\n\n    show() {\n      if (isDisabled(this._element) || this._menu.classList.contains(CLASS_NAME_SHOW$7)) {\n        return;\n      }\n\n      const parent = Dropdown.getParentFromElement(this._element);\n      const relatedTarget = {\n        relatedTarget: this._element\n      };\n      const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$4, relatedTarget);\n\n      if (showEvent.defaultPrevented) {\n        return;\n      } // Totally disable Popper for Dropdowns in Navbar\n\n\n      if (this._inNavbar) {\n        Manipulator.setDataAttribute(this._menu, 'popper', 'none');\n      } else {\n        if (typeof Popper === 'undefined') {\n          throw new TypeError('Bootstrap\\'s dropdowns require Popper (https://popper.js.org)');\n        }\n\n        let referenceElement = this._element;\n\n        if (this._config.reference === 'parent') {\n          referenceElement = parent;\n        } else if (isElement$1(this._config.reference)) {\n          referenceElement = getElement(this._config.reference);\n        } else if (typeof this._config.reference === 'object') {\n          referenceElement = this._config.reference;\n        }\n\n        const popperConfig = this._getPopperConfig();\n\n        const isDisplayStatic = popperConfig.modifiers.find(modifier => modifier.name === 'applyStyles' && modifier.enabled === false);\n        this._popper = createPopper(referenceElement, this._menu, popperConfig);\n\n        if (isDisplayStatic) {\n          Manipulator.setDataAttribute(this._menu, 'popper', 'static');\n        }\n      } // If this is a touch-enabled device we add extra\n      // empty mouseover listeners to the body's immediate children;\n      // only needed because of broken event delegation on iOS\n      // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n\n\n      if ('ontouchstart' in document.documentElement && !parent.closest(SELECTOR_NAVBAR_NAV)) {\n        [].concat(...document.body.children).forEach(elem => EventHandler.on(elem, 'mouseover', noop));\n      }\n\n      this._element.focus();\n\n      this._element.setAttribute('aria-expanded', true);\n\n      this._menu.classList.toggle(CLASS_NAME_SHOW$7);\n\n      this._element.classList.toggle(CLASS_NAME_SHOW$7);\n\n      EventHandler.trigger(this._element, EVENT_SHOWN$4, relatedTarget);\n    }\n\n    hide() {\n      if (isDisabled(this._element) || !this._menu.classList.contains(CLASS_NAME_SHOW$7)) {\n        return;\n      }\n\n      const relatedTarget = {\n        relatedTarget: this._element\n      };\n\n      this._completeHide(relatedTarget);\n    }\n\n    dispose() {\n      if (this._popper) {\n        this._popper.destroy();\n      }\n\n      super.dispose();\n    }\n\n    update() {\n      this._inNavbar = this._detectNavbar();\n\n      if (this._popper) {\n        this._popper.update();\n      }\n    } // Private\n\n\n    _addEventListeners() {\n      EventHandler.on(this._element, EVENT_CLICK, event => {\n        event.preventDefault();\n        this.toggle();\n      });\n    }\n\n    _completeHide(relatedTarget) {\n      const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$4, relatedTarget);\n\n      if (hideEvent.defaultPrevented) {\n        return;\n      } // If this is a touch-enabled device we remove the extra\n      // empty mouseover listeners we added for iOS support\n\n\n      if ('ontouchstart' in document.documentElement) {\n        [].concat(...document.body.children).forEach(elem => EventHandler.off(elem, 'mouseover', noop));\n      }\n\n      if (this._popper) {\n        this._popper.destroy();\n      }\n\n      this._menu.classList.remove(CLASS_NAME_SHOW$7);\n\n      this._element.classList.remove(CLASS_NAME_SHOW$7);\n\n      this._element.setAttribute('aria-expanded', 'false');\n\n      Manipulator.removeDataAttribute(this._menu, 'popper');\n      EventHandler.trigger(this._element, EVENT_HIDDEN$4, relatedTarget);\n    }\n\n    _getConfig(config) {\n      config = { ...this.constructor.Default,\n        ...Manipulator.getDataAttributes(this._element),\n        ...config\n      };\n      typeCheckConfig(NAME$8, config, this.constructor.DefaultType);\n\n      if (typeof config.reference === 'object' && !isElement$1(config.reference) && typeof config.reference.getBoundingClientRect !== 'function') {\n        // Popper virtual elements require a getBoundingClientRect method\n        throw new TypeError(`${NAME$8.toUpperCase()}: Option \"reference\" provided type \"object\" without a required \"getBoundingClientRect\" method.`);\n      }\n\n      return config;\n    }\n\n    _getMenuElement() {\n      return SelectorEngine.next(this._element, SELECTOR_MENU)[0];\n    }\n\n    _getPlacement() {\n      const parentDropdown = this._element.parentNode;\n\n      if (parentDropdown.classList.contains(CLASS_NAME_DROPEND)) {\n        return PLACEMENT_RIGHT;\n      }\n\n      if (parentDropdown.classList.contains(CLASS_NAME_DROPSTART)) {\n        return PLACEMENT_LEFT;\n      } // We need to trim the value because custom properties can also include spaces\n\n\n      const isEnd = getComputedStyle(this._menu).getPropertyValue('--bs-position').trim() === 'end';\n\n      if (parentDropdown.classList.contains(CLASS_NAME_DROPUP)) {\n        return isEnd ? PLACEMENT_TOPEND : PLACEMENT_TOP;\n      }\n\n      return isEnd ? PLACEMENT_BOTTOMEND : PLACEMENT_BOTTOM;\n    }\n\n    _detectNavbar() {\n      return this._element.closest(`.${CLASS_NAME_NAVBAR}`) !== null;\n    }\n\n    _getOffset() {\n      const {\n        offset\n      } = this._config;\n\n      if (typeof offset === 'string') {\n        return offset.split(',').map(val => Number.parseInt(val, 10));\n      }\n\n      if (typeof offset === 'function') {\n        return popperData => offset(popperData, this._element);\n      }\n\n      return offset;\n    }\n\n    _getPopperConfig() {\n      const defaultBsPopperConfig = {\n        placement: this._getPlacement(),\n        modifiers: [{\n          name: 'preventOverflow',\n          options: {\n            boundary: this._config.boundary\n          }\n        }, {\n          name: 'offset',\n          options: {\n            offset: this._getOffset()\n          }\n        }]\n      }; // Disable Popper if we have a static display\n\n      if (this._config.display === 'static') {\n        defaultBsPopperConfig.modifiers = [{\n          name: 'applyStyles',\n          enabled: false\n        }];\n      }\n\n      return { ...defaultBsPopperConfig,\n        ...(typeof this._config.popperConfig === 'function' ? this._config.popperConfig(defaultBsPopperConfig) : this._config.popperConfig)\n      };\n    }\n\n    _selectMenuItem({\n      key,\n      target\n    }) {\n      const items = SelectorEngine.find(SELECTOR_VISIBLE_ITEMS, this._menu).filter(isVisible);\n\n      if (!items.length) {\n        return;\n      } // if target isn't included in items (e.g. when expanding the dropdown)\n      // allow cycling to get the last item in case key equals ARROW_UP_KEY\n\n\n      getNextActiveElement(items, target, key === ARROW_DOWN_KEY, !items.includes(target)).focus();\n    } // Static\n\n\n    static dropdownInterface(element, config) {\n      const data = Dropdown.getOrCreateInstance(element, config);\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config]();\n      }\n    }\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        Dropdown.dropdownInterface(this, config);\n      });\n    }\n\n    static clearMenus(event) {\n      if (event && (event.button === RIGHT_MOUSE_BUTTON || event.type === 'keyup' && event.key !== TAB_KEY)) {\n        return;\n      }\n\n      const toggles = SelectorEngine.find(SELECTOR_DATA_TOGGLE$3);\n\n      for (let i = 0, len = toggles.length; i < len; i++) {\n        const context = Dropdown.getInstance(toggles[i]);\n\n        if (!context || context._config.autoClose === false) {\n          continue;\n        }\n\n        if (!context._element.classList.contains(CLASS_NAME_SHOW$7)) {\n          continue;\n        }\n\n        const relatedTarget = {\n          relatedTarget: context._element\n        };\n\n        if (event) {\n          const composedPath = event.composedPath();\n          const isMenuTarget = composedPath.includes(context._menu);\n\n          if (composedPath.includes(context._element) || context._config.autoClose === 'inside' && !isMenuTarget || context._config.autoClose === 'outside' && isMenuTarget) {\n            continue;\n          } // Tab navigation through the dropdown menu or events from contained inputs shouldn't close the menu\n\n\n          if (context._menu.contains(event.target) && (event.type === 'keyup' && event.key === TAB_KEY || /input|select|option|textarea|form/i.test(event.target.tagName))) {\n            continue;\n          }\n\n          if (event.type === 'click') {\n            relatedTarget.clickEvent = event;\n          }\n        }\n\n        context._completeHide(relatedTarget);\n      }\n    }\n\n    static getParentFromElement(element) {\n      return getElementFromSelector(element) || element.parentNode;\n    }\n\n    static dataApiKeydownHandler(event) {\n      // If not input/textarea:\n      //  - And not a key in REGEXP_KEYDOWN => not a dropdown command\n      // If input/textarea:\n      //  - If space key => not a dropdown command\n      //  - If key is other than escape\n      //    - If key is not up or down => not a dropdown command\n      //    - If trigger inside the menu => not a dropdown command\n      if (/input|textarea/i.test(event.target.tagName) ? event.key === SPACE_KEY || event.key !== ESCAPE_KEY$2 && (event.key !== ARROW_DOWN_KEY && event.key !== ARROW_UP_KEY || event.target.closest(SELECTOR_MENU)) : !REGEXP_KEYDOWN.test(event.key)) {\n        return;\n      }\n\n      const isActive = this.classList.contains(CLASS_NAME_SHOW$7);\n\n      if (!isActive && event.key === ESCAPE_KEY$2) {\n        return;\n      }\n\n      event.preventDefault();\n      event.stopPropagation();\n\n      if (isDisabled(this)) {\n        return;\n      }\n\n      const getToggleButton = () => this.matches(SELECTOR_DATA_TOGGLE$3) ? this : SelectorEngine.prev(this, SELECTOR_DATA_TOGGLE$3)[0];\n\n      if (event.key === ESCAPE_KEY$2) {\n        getToggleButton().focus();\n        Dropdown.clearMenus();\n        return;\n      }\n\n      if (event.key === ARROW_UP_KEY || event.key === ARROW_DOWN_KEY) {\n        if (!isActive) {\n          getToggleButton().click();\n        }\n\n        Dropdown.getInstance(getToggleButton())._selectMenuItem(event);\n\n        return;\n      }\n\n      if (!isActive || event.key === SPACE_KEY) {\n        Dropdown.clearMenus();\n      }\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_DATA_TOGGLE$3, Dropdown.dataApiKeydownHandler);\n  EventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown.dataApiKeydownHandler);\n  EventHandler.on(document, EVENT_CLICK_DATA_API$3, Dropdown.clearMenus);\n  EventHandler.on(document, EVENT_KEYUP_DATA_API, Dropdown.clearMenus);\n  EventHandler.on(document, EVENT_CLICK_DATA_API$3, SELECTOR_DATA_TOGGLE$3, function (event) {\n    event.preventDefault();\n    Dropdown.dropdownInterface(this);\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Dropdown to jQuery only if jQuery is present\n   */\n\n  defineJQueryPlugin(Dropdown);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): util/scrollBar.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  const SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top';\n  const SELECTOR_STICKY_CONTENT = '.sticky-top';\n\n  class ScrollBarHelper {\n    constructor() {\n      this._element = document.body;\n    }\n\n    getWidth() {\n      // https://developer.mozilla.org/en-US/docs/Web/API/Window/innerWidth#usage_notes\n      const documentWidth = document.documentElement.clientWidth;\n      return Math.abs(window.innerWidth - documentWidth);\n    }\n\n    hide() {\n      const width = this.getWidth();\n\n      this._disableOverFlow(); // give padding to element to balance the hidden scrollbar width\n\n\n      this._setElementAttributes(this._element, 'paddingRight', calculatedValue => calculatedValue + width); // trick: We adjust positive paddingRight and negative marginRight to sticky-top elements to keep showing fullwidth\n\n\n      this._setElementAttributes(SELECTOR_FIXED_CONTENT, 'paddingRight', calculatedValue => calculatedValue + width);\n\n      this._setElementAttributes(SELECTOR_STICKY_CONTENT, 'marginRight', calculatedValue => calculatedValue - width);\n    }\n\n    _disableOverFlow() {\n      this._saveInitialAttribute(this._element, 'overflow');\n\n      this._element.style.overflow = 'hidden';\n    }\n\n    _setElementAttributes(selector, styleProp, callback) {\n      const scrollbarWidth = this.getWidth();\n\n      const manipulationCallBack = element => {\n        if (element !== this._element && window.innerWidth > element.clientWidth + scrollbarWidth) {\n          return;\n        }\n\n        this._saveInitialAttribute(element, styleProp);\n\n        const calculatedValue = window.getComputedStyle(element)[styleProp];\n        element.style[styleProp] = `${callback(Number.parseFloat(calculatedValue))}px`;\n      };\n\n      this._applyManipulationCallback(selector, manipulationCallBack);\n    }\n\n    reset() {\n      this._resetElementAttributes(this._element, 'overflow');\n\n      this._resetElementAttributes(this._element, 'paddingRight');\n\n      this._resetElementAttributes(SELECTOR_FIXED_CONTENT, 'paddingRight');\n\n      this._resetElementAttributes(SELECTOR_STICKY_CONTENT, 'marginRight');\n    }\n\n    _saveInitialAttribute(element, styleProp) {\n      const actualValue = element.style[styleProp];\n\n      if (actualValue) {\n        Manipulator.setDataAttribute(element, styleProp, actualValue);\n      }\n    }\n\n    _resetElementAttributes(selector, styleProp) {\n      const manipulationCallBack = element => {\n        const value = Manipulator.getDataAttribute(element, styleProp);\n\n        if (typeof value === 'undefined') {\n          element.style.removeProperty(styleProp);\n        } else {\n          Manipulator.removeDataAttribute(element, styleProp);\n          element.style[styleProp] = value;\n        }\n      };\n\n      this._applyManipulationCallback(selector, manipulationCallBack);\n    }\n\n    _applyManipulationCallback(selector, callBack) {\n      if (isElement$1(selector)) {\n        callBack(selector);\n      } else {\n        SelectorEngine.find(selector, this._element).forEach(callBack);\n      }\n    }\n\n    isOverflowing() {\n      return this.getWidth() > 0;\n    }\n\n  }\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): util/backdrop.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  const Default$6 = {\n    isVisible: true,\n    // if false, we use the backdrop helper without adding any element to the dom\n    isAnimated: false,\n    rootElement: 'body',\n    // give the choice to place backdrop under different elements\n    clickCallback: null\n  };\n  const DefaultType$6 = {\n    isVisible: 'boolean',\n    isAnimated: 'boolean',\n    rootElement: '(element|string)',\n    clickCallback: '(function|null)'\n  };\n  const NAME$7 = 'backdrop';\n  const CLASS_NAME_BACKDROP = 'modal-backdrop';\n  const CLASS_NAME_FADE$5 = 'fade';\n  const CLASS_NAME_SHOW$6 = 'show';\n  const EVENT_MOUSEDOWN = `mousedown.bs.${NAME$7}`;\n\n  class Backdrop {\n    constructor(config) {\n      this._config = this._getConfig(config);\n      this._isAppended = false;\n      this._element = null;\n    }\n\n    show(callback) {\n      if (!this._config.isVisible) {\n        execute(callback);\n        return;\n      }\n\n      this._append();\n\n      if (this._config.isAnimated) {\n        reflow(this._getElement());\n      }\n\n      this._getElement().classList.add(CLASS_NAME_SHOW$6);\n\n      this._emulateAnimation(() => {\n        execute(callback);\n      });\n    }\n\n    hide(callback) {\n      if (!this._config.isVisible) {\n        execute(callback);\n        return;\n      }\n\n      this._getElement().classList.remove(CLASS_NAME_SHOW$6);\n\n      this._emulateAnimation(() => {\n        this.dispose();\n        execute(callback);\n      });\n    } // Private\n\n\n    _getElement() {\n      if (!this._element) {\n        const backdrop = document.createElement('div');\n        backdrop.className = CLASS_NAME_BACKDROP;\n\n        if (this._config.isAnimated) {\n          backdrop.classList.add(CLASS_NAME_FADE$5);\n        }\n\n        this._element = backdrop;\n      }\n\n      return this._element;\n    }\n\n    _getConfig(config) {\n      config = { ...Default$6,\n        ...(typeof config === 'object' ? config : {})\n      }; // use getElement() with the default \"body\" to get a fresh Element on each instantiation\n\n      config.rootElement = getElement(config.rootElement);\n      typeCheckConfig(NAME$7, config, DefaultType$6);\n      return config;\n    }\n\n    _append() {\n      if (this._isAppended) {\n        return;\n      }\n\n      this._config.rootElement.appendChild(this._getElement());\n\n      EventHandler.on(this._getElement(), EVENT_MOUSEDOWN, () => {\n        execute(this._config.clickCallback);\n      });\n      this._isAppended = true;\n    }\n\n    dispose() {\n      if (!this._isAppended) {\n        return;\n      }\n\n      EventHandler.off(this._element, EVENT_MOUSEDOWN);\n\n      this._element.remove();\n\n      this._isAppended = false;\n    }\n\n    _emulateAnimation(callback) {\n      executeAfterTransition(callback, this._getElement(), this._config.isAnimated);\n    }\n\n  }\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): modal.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$6 = 'modal';\n  const DATA_KEY$6 = 'bs.modal';\n  const EVENT_KEY$6 = `.${DATA_KEY$6}`;\n  const DATA_API_KEY$3 = '.data-api';\n  const ESCAPE_KEY$1 = 'Escape';\n  const Default$5 = {\n    backdrop: true,\n    keyboard: true,\n    focus: true\n  };\n  const DefaultType$5 = {\n    backdrop: '(boolean|string)',\n    keyboard: 'boolean',\n    focus: 'boolean'\n  };\n  const EVENT_HIDE$3 = `hide${EVENT_KEY$6}`;\n  const EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY$6}`;\n  const EVENT_HIDDEN$3 = `hidden${EVENT_KEY$6}`;\n  const EVENT_SHOW$3 = `show${EVENT_KEY$6}`;\n  const EVENT_SHOWN$3 = `shown${EVENT_KEY$6}`;\n  const EVENT_FOCUSIN$2 = `focusin${EVENT_KEY$6}`;\n  const EVENT_RESIZE = `resize${EVENT_KEY$6}`;\n  const EVENT_CLICK_DISMISS$2 = `click.dismiss${EVENT_KEY$6}`;\n  const EVENT_KEYDOWN_DISMISS$1 = `keydown.dismiss${EVENT_KEY$6}`;\n  const EVENT_MOUSEUP_DISMISS = `mouseup.dismiss${EVENT_KEY$6}`;\n  const EVENT_MOUSEDOWN_DISMISS = `mousedown.dismiss${EVENT_KEY$6}`;\n  const EVENT_CLICK_DATA_API$2 = `click${EVENT_KEY$6}${DATA_API_KEY$3}`;\n  const CLASS_NAME_OPEN = 'modal-open';\n  const CLASS_NAME_FADE$4 = 'fade';\n  const CLASS_NAME_SHOW$5 = 'show';\n  const CLASS_NAME_STATIC = 'modal-static';\n  const SELECTOR_DIALOG = '.modal-dialog';\n  const SELECTOR_MODAL_BODY = '.modal-body';\n  const SELECTOR_DATA_TOGGLE$2 = '[data-bs-toggle=\"modal\"]';\n  const SELECTOR_DATA_DISMISS$2 = '[data-bs-dismiss=\"modal\"]';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Modal extends BaseComponent {\n    constructor(element, config) {\n      super(element);\n      this._config = this._getConfig(config);\n      this._dialog = SelectorEngine.findOne(SELECTOR_DIALOG, this._element);\n      this._backdrop = this._initializeBackDrop();\n      this._isShown = false;\n      this._ignoreBackdropClick = false;\n      this._isTransitioning = false;\n      this._scrollBar = new ScrollBarHelper();\n    } // Getters\n\n\n    static get Default() {\n      return Default$5;\n    }\n\n    static get NAME() {\n      return NAME$6;\n    } // Public\n\n\n    toggle(relatedTarget) {\n      return this._isShown ? this.hide() : this.show(relatedTarget);\n    }\n\n    show(relatedTarget) {\n      if (this._isShown || this._isTransitioning) {\n        return;\n      }\n\n      const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$3, {\n        relatedTarget\n      });\n\n      if (showEvent.defaultPrevented) {\n        return;\n      }\n\n      this._isShown = true;\n\n      if (this._isAnimated()) {\n        this._isTransitioning = true;\n      }\n\n      this._scrollBar.hide();\n\n      document.body.classList.add(CLASS_NAME_OPEN);\n\n      this._adjustDialog();\n\n      this._setEscapeEvent();\n\n      this._setResizeEvent();\n\n      EventHandler.on(this._element, EVENT_CLICK_DISMISS$2, SELECTOR_DATA_DISMISS$2, event => this.hide(event));\n      EventHandler.on(this._dialog, EVENT_MOUSEDOWN_DISMISS, () => {\n        EventHandler.one(this._element, EVENT_MOUSEUP_DISMISS, event => {\n          if (event.target === this._element) {\n            this._ignoreBackdropClick = true;\n          }\n        });\n      });\n\n      this._showBackdrop(() => this._showElement(relatedTarget));\n    }\n\n    hide(event) {\n      if (event && ['A', 'AREA'].includes(event.target.tagName)) {\n        event.preventDefault();\n      }\n\n      if (!this._isShown || this._isTransitioning) {\n        return;\n      }\n\n      const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$3);\n\n      if (hideEvent.defaultPrevented) {\n        return;\n      }\n\n      this._isShown = false;\n\n      const isAnimated = this._isAnimated();\n\n      if (isAnimated) {\n        this._isTransitioning = true;\n      }\n\n      this._setEscapeEvent();\n\n      this._setResizeEvent();\n\n      EventHandler.off(document, EVENT_FOCUSIN$2);\n\n      this._element.classList.remove(CLASS_NAME_SHOW$5);\n\n      EventHandler.off(this._element, EVENT_CLICK_DISMISS$2);\n      EventHandler.off(this._dialog, EVENT_MOUSEDOWN_DISMISS);\n\n      this._queueCallback(() => this._hideModal(), this._element, isAnimated);\n    }\n\n    dispose() {\n      [window, this._dialog].forEach(htmlElement => EventHandler.off(htmlElement, EVENT_KEY$6));\n\n      this._backdrop.dispose();\n\n      super.dispose();\n      /**\n       * `document` has 2 events `EVENT_FOCUSIN` and `EVENT_CLICK_DATA_API`\n       * Do not move `document` in `htmlElements` array\n       * It will remove `EVENT_CLICK_DATA_API` event that should remain\n       */\n\n      EventHandler.off(document, EVENT_FOCUSIN$2);\n    }\n\n    handleUpdate() {\n      this._adjustDialog();\n    } // Private\n\n\n    _initializeBackDrop() {\n      return new Backdrop({\n        isVisible: Boolean(this._config.backdrop),\n        // 'static' option will be translated to true, and booleans will keep their value\n        isAnimated: this._isAnimated()\n      });\n    }\n\n    _getConfig(config) {\n      config = { ...Default$5,\n        ...Manipulator.getDataAttributes(this._element),\n        ...(typeof config === 'object' ? config : {})\n      };\n      typeCheckConfig(NAME$6, config, DefaultType$5);\n      return config;\n    }\n\n    _showElement(relatedTarget) {\n      const isAnimated = this._isAnimated();\n\n      const modalBody = SelectorEngine.findOne(SELECTOR_MODAL_BODY, this._dialog);\n\n      if (!this._element.parentNode || this._element.parentNode.nodeType !== Node.ELEMENT_NODE) {\n        // Don't move modal's DOM position\n        document.body.appendChild(this._element);\n      }\n\n      this._element.style.display = 'block';\n\n      this._element.removeAttribute('aria-hidden');\n\n      this._element.setAttribute('aria-modal', true);\n\n      this._element.setAttribute('role', 'dialog');\n\n      this._element.scrollTop = 0;\n\n      if (modalBody) {\n        modalBody.scrollTop = 0;\n      }\n\n      if (isAnimated) {\n        reflow(this._element);\n      }\n\n      this._element.classList.add(CLASS_NAME_SHOW$5);\n\n      if (this._config.focus) {\n        this._enforceFocus();\n      }\n\n      const transitionComplete = () => {\n        if (this._config.focus) {\n          this._element.focus();\n        }\n\n        this._isTransitioning = false;\n        EventHandler.trigger(this._element, EVENT_SHOWN$3, {\n          relatedTarget\n        });\n      };\n\n      this._queueCallback(transitionComplete, this._dialog, isAnimated);\n    }\n\n    _enforceFocus() {\n      EventHandler.off(document, EVENT_FOCUSIN$2); // guard against infinite focus loop\n\n      EventHandler.on(document, EVENT_FOCUSIN$2, event => {\n        if (document !== event.target && this._element !== event.target && !this._element.contains(event.target)) {\n          this._element.focus();\n        }\n      });\n    }\n\n    _setEscapeEvent() {\n      if (this._isShown) {\n        EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS$1, event => {\n          if (this._config.keyboard && event.key === ESCAPE_KEY$1) {\n            event.preventDefault();\n            this.hide();\n          } else if (!this._config.keyboard && event.key === ESCAPE_KEY$1) {\n            this._triggerBackdropTransition();\n          }\n        });\n      } else {\n        EventHandler.off(this._element, EVENT_KEYDOWN_DISMISS$1);\n      }\n    }\n\n    _setResizeEvent() {\n      if (this._isShown) {\n        EventHandler.on(window, EVENT_RESIZE, () => this._adjustDialog());\n      } else {\n        EventHandler.off(window, EVENT_RESIZE);\n      }\n    }\n\n    _hideModal() {\n      this._element.style.display = 'none';\n\n      this._element.setAttribute('aria-hidden', true);\n\n      this._element.removeAttribute('aria-modal');\n\n      this._element.removeAttribute('role');\n\n      this._isTransitioning = false;\n\n      this._backdrop.hide(() => {\n        document.body.classList.remove(CLASS_NAME_OPEN);\n\n        this._resetAdjustments();\n\n        this._scrollBar.reset();\n\n        EventHandler.trigger(this._element, EVENT_HIDDEN$3);\n      });\n    }\n\n    _showBackdrop(callback) {\n      EventHandler.on(this._element, EVENT_CLICK_DISMISS$2, event => {\n        if (this._ignoreBackdropClick) {\n          this._ignoreBackdropClick = false;\n          return;\n        }\n\n        if (event.target !== event.currentTarget) {\n          return;\n        }\n\n        if (this._config.backdrop === true) {\n          this.hide();\n        } else if (this._config.backdrop === 'static') {\n          this._triggerBackdropTransition();\n        }\n      });\n\n      this._backdrop.show(callback);\n    }\n\n    _isAnimated() {\n      return this._element.classList.contains(CLASS_NAME_FADE$4);\n    }\n\n    _triggerBackdropTransition() {\n      const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED);\n\n      if (hideEvent.defaultPrevented) {\n        return;\n      }\n\n      const {\n        classList,\n        scrollHeight,\n        style\n      } = this._element;\n      const isModalOverflowing = scrollHeight > document.documentElement.clientHeight; // return if the following background transition hasn't yet completed\n\n      if (!isModalOverflowing && style.overflowY === 'hidden' || classList.contains(CLASS_NAME_STATIC)) {\n        return;\n      }\n\n      if (!isModalOverflowing) {\n        style.overflowY = 'hidden';\n      }\n\n      classList.add(CLASS_NAME_STATIC);\n\n      this._queueCallback(() => {\n        classList.remove(CLASS_NAME_STATIC);\n\n        if (!isModalOverflowing) {\n          this._queueCallback(() => {\n            style.overflowY = '';\n          }, this._dialog);\n        }\n      }, this._dialog);\n\n      this._element.focus();\n    } // ----------------------------------------------------------------------\n    // the following methods are used to handle overflowing modals\n    // ----------------------------------------------------------------------\n\n\n    _adjustDialog() {\n      const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;\n\n      const scrollbarWidth = this._scrollBar.getWidth();\n\n      const isBodyOverflowing = scrollbarWidth > 0;\n\n      if (!isBodyOverflowing && isModalOverflowing && !isRTL() || isBodyOverflowing && !isModalOverflowing && isRTL()) {\n        this._element.style.paddingLeft = `${scrollbarWidth}px`;\n      }\n\n      if (isBodyOverflowing && !isModalOverflowing && !isRTL() || !isBodyOverflowing && isModalOverflowing && isRTL()) {\n        this._element.style.paddingRight = `${scrollbarWidth}px`;\n      }\n    }\n\n    _resetAdjustments() {\n      this._element.style.paddingLeft = '';\n      this._element.style.paddingRight = '';\n    } // Static\n\n\n    static jQueryInterface(config, relatedTarget) {\n      return this.each(function () {\n        const data = Modal.getOrCreateInstance(this, config);\n\n        if (typeof config !== 'string') {\n          return;\n        }\n\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config](relatedTarget);\n      });\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(document, EVENT_CLICK_DATA_API$2, SELECTOR_DATA_TOGGLE$2, function (event) {\n    const target = getElementFromSelector(this);\n\n    if (['A', 'AREA'].includes(this.tagName)) {\n      event.preventDefault();\n    }\n\n    EventHandler.one(target, EVENT_SHOW$3, showEvent => {\n      if (showEvent.defaultPrevented) {\n        // only register focus restorer if modal will actually get shown\n        return;\n      }\n\n      EventHandler.one(target, EVENT_HIDDEN$3, () => {\n        if (isVisible(this)) {\n          this.focus();\n        }\n      });\n    });\n    const data = Modal.getOrCreateInstance(target);\n    data.toggle(this);\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Modal to jQuery only if jQuery is present\n   */\n\n  defineJQueryPlugin(Modal);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): offcanvas.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$5 = 'offcanvas';\n  const DATA_KEY$5 = 'bs.offcanvas';\n  const EVENT_KEY$5 = `.${DATA_KEY$5}`;\n  const DATA_API_KEY$2 = '.data-api';\n  const EVENT_LOAD_DATA_API$1 = `load${EVENT_KEY$5}${DATA_API_KEY$2}`;\n  const ESCAPE_KEY = 'Escape';\n  const Default$4 = {\n    backdrop: true,\n    keyboard: true,\n    scroll: false\n  };\n  const DefaultType$4 = {\n    backdrop: 'boolean',\n    keyboard: 'boolean',\n    scroll: 'boolean'\n  };\n  const CLASS_NAME_SHOW$4 = 'show';\n  const OPEN_SELECTOR = '.offcanvas.show';\n  const EVENT_SHOW$2 = `show${EVENT_KEY$5}`;\n  const EVENT_SHOWN$2 = `shown${EVENT_KEY$5}`;\n  const EVENT_HIDE$2 = `hide${EVENT_KEY$5}`;\n  const EVENT_HIDDEN$2 = `hidden${EVENT_KEY$5}`;\n  const EVENT_FOCUSIN$1 = `focusin${EVENT_KEY$5}`;\n  const EVENT_CLICK_DATA_API$1 = `click${EVENT_KEY$5}${DATA_API_KEY$2}`;\n  const EVENT_CLICK_DISMISS$1 = `click.dismiss${EVENT_KEY$5}`;\n  const EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY$5}`;\n  const SELECTOR_DATA_DISMISS$1 = '[data-bs-dismiss=\"offcanvas\"]';\n  const SELECTOR_DATA_TOGGLE$1 = '[data-bs-toggle=\"offcanvas\"]';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Offcanvas extends BaseComponent {\n    constructor(element, config) {\n      super(element);\n      this._config = this._getConfig(config);\n      this._isShown = false;\n      this._backdrop = this._initializeBackDrop();\n\n      this._addEventListeners();\n    } // Getters\n\n\n    static get NAME() {\n      return NAME$5;\n    }\n\n    static get Default() {\n      return Default$4;\n    } // Public\n\n\n    toggle(relatedTarget) {\n      return this._isShown ? this.hide() : this.show(relatedTarget);\n    }\n\n    show(relatedTarget) {\n      if (this._isShown) {\n        return;\n      }\n\n      const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$2, {\n        relatedTarget\n      });\n\n      if (showEvent.defaultPrevented) {\n        return;\n      }\n\n      this._isShown = true;\n      this._element.style.visibility = 'visible';\n\n      this._backdrop.show();\n\n      if (!this._config.scroll) {\n        new ScrollBarHelper().hide();\n\n        this._enforceFocusOnElement(this._element);\n      }\n\n      this._element.removeAttribute('aria-hidden');\n\n      this._element.setAttribute('aria-modal', true);\n\n      this._element.setAttribute('role', 'dialog');\n\n      this._element.classList.add(CLASS_NAME_SHOW$4);\n\n      const completeCallBack = () => {\n        EventHandler.trigger(this._element, EVENT_SHOWN$2, {\n          relatedTarget\n        });\n      };\n\n      this._queueCallback(completeCallBack, this._element, true);\n    }\n\n    hide() {\n      if (!this._isShown) {\n        return;\n      }\n\n      const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$2);\n\n      if (hideEvent.defaultPrevented) {\n        return;\n      }\n\n      EventHandler.off(document, EVENT_FOCUSIN$1);\n\n      this._element.blur();\n\n      this._isShown = false;\n\n      this._element.classList.remove(CLASS_NAME_SHOW$4);\n\n      this._backdrop.hide();\n\n      const completeCallback = () => {\n        this._element.setAttribute('aria-hidden', true);\n\n        this._element.removeAttribute('aria-modal');\n\n        this._element.removeAttribute('role');\n\n        this._element.style.visibility = 'hidden';\n\n        if (!this._config.scroll) {\n          new ScrollBarHelper().reset();\n        }\n\n        EventHandler.trigger(this._element, EVENT_HIDDEN$2);\n      };\n\n      this._queueCallback(completeCallback, this._element, true);\n    }\n\n    dispose() {\n      this._backdrop.dispose();\n\n      super.dispose();\n      EventHandler.off(document, EVENT_FOCUSIN$1);\n    } // Private\n\n\n    _getConfig(config) {\n      config = { ...Default$4,\n        ...Manipulator.getDataAttributes(this._element),\n        ...(typeof config === 'object' ? config : {})\n      };\n      typeCheckConfig(NAME$5, config, DefaultType$4);\n      return config;\n    }\n\n    _initializeBackDrop() {\n      return new Backdrop({\n        isVisible: this._config.backdrop,\n        isAnimated: true,\n        rootElement: this._element.parentNode,\n        clickCallback: () => this.hide()\n      });\n    }\n\n    _enforceFocusOnElement(element) {\n      EventHandler.off(document, EVENT_FOCUSIN$1); // guard against infinite focus loop\n\n      EventHandler.on(document, EVENT_FOCUSIN$1, event => {\n        if (document !== event.target && element !== event.target && !element.contains(event.target)) {\n          element.focus();\n        }\n      });\n      element.focus();\n    }\n\n    _addEventListeners() {\n      EventHandler.on(this._element, EVENT_CLICK_DISMISS$1, SELECTOR_DATA_DISMISS$1, () => this.hide());\n      EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS, event => {\n        if (this._config.keyboard && event.key === ESCAPE_KEY) {\n          this.hide();\n        }\n      });\n    } // Static\n\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = Offcanvas.getOrCreateInstance(this, config);\n\n        if (typeof config !== 'string') {\n          return;\n        }\n\n        if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config](this);\n      });\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(document, EVENT_CLICK_DATA_API$1, SELECTOR_DATA_TOGGLE$1, function (event) {\n    const target = getElementFromSelector(this);\n\n    if (['A', 'AREA'].includes(this.tagName)) {\n      event.preventDefault();\n    }\n\n    if (isDisabled(this)) {\n      return;\n    }\n\n    EventHandler.one(target, EVENT_HIDDEN$2, () => {\n      // focus on trigger when it is closed\n      if (isVisible(this)) {\n        this.focus();\n      }\n    }); // avoid conflict when clicking a toggler of an offcanvas, while another is open\n\n    const allReadyOpen = SelectorEngine.findOne(OPEN_SELECTOR);\n\n    if (allReadyOpen && allReadyOpen !== target) {\n      Offcanvas.getInstance(allReadyOpen).hide();\n    }\n\n    const data = Offcanvas.getOrCreateInstance(target);\n    data.toggle(this);\n  });\n  EventHandler.on(window, EVENT_LOAD_DATA_API$1, () => SelectorEngine.find(OPEN_SELECTOR).forEach(el => Offcanvas.getOrCreateInstance(el).show()));\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   */\n\n  defineJQueryPlugin(Offcanvas);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): util/sanitizer.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  const uriAttrs = new Set(['background', 'cite', 'href', 'itemtype', 'longdesc', 'poster', 'src', 'xlink:href']);\n  const ARIA_ATTRIBUTE_PATTERN = /^aria-[\\w-]*$/i;\n  /**\n   * A pattern that recognizes a commonly useful subset of URLs that are safe.\n   *\n   * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts\n   */\n\n  const SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file):|[^#&/:?]*(?:[#/?]|$))/i;\n  /**\n   * A pattern that matches safe data URLs. Only matches image, video and audio types.\n   *\n   * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts\n   */\n\n  const DATA_URL_PATTERN = /^data:(?:image\\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\\/(?:mpeg|mp4|ogg|webm)|audio\\/(?:mp3|oga|ogg|opus));base64,[\\d+/a-z]+=*$/i;\n\n  const allowedAttribute = (attr, allowedAttributeList) => {\n    const attrName = attr.nodeName.toLowerCase();\n\n    if (allowedAttributeList.includes(attrName)) {\n      if (uriAttrs.has(attrName)) {\n        return Boolean(SAFE_URL_PATTERN.test(attr.nodeValue) || DATA_URL_PATTERN.test(attr.nodeValue));\n      }\n\n      return true;\n    }\n\n    const regExp = allowedAttributeList.filter(attrRegex => attrRegex instanceof RegExp); // Check if a regular expression validates the attribute.\n\n    for (let i = 0, len = regExp.length; i < len; i++) {\n      if (regExp[i].test(attrName)) {\n        return true;\n      }\n    }\n\n    return false;\n  };\n\n  const DefaultAllowlist = {\n    // Global attributes allowed on any supplied element below.\n    '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],\n    a: ['target', 'href', 'title', 'rel'],\n    area: [],\n    b: [],\n    br: [],\n    col: [],\n    code: [],\n    div: [],\n    em: [],\n    hr: [],\n    h1: [],\n    h2: [],\n    h3: [],\n    h4: [],\n    h5: [],\n    h6: [],\n    i: [],\n    img: ['src', 'srcset', 'alt', 'title', 'width', 'height'],\n    li: [],\n    ol: [],\n    p: [],\n    pre: [],\n    s: [],\n    small: [],\n    span: [],\n    sub: [],\n    sup: [],\n    strong: [],\n    u: [],\n    ul: []\n  };\n  function sanitizeHtml(unsafeHtml, allowList, sanitizeFn) {\n    if (!unsafeHtml.length) {\n      return unsafeHtml;\n    }\n\n    if (sanitizeFn && typeof sanitizeFn === 'function') {\n      return sanitizeFn(unsafeHtml);\n    }\n\n    const domParser = new window.DOMParser();\n    const createdDocument = domParser.parseFromString(unsafeHtml, 'text/html');\n    const allowlistKeys = Object.keys(allowList);\n    const elements = [].concat(...createdDocument.body.querySelectorAll('*'));\n\n    for (let i = 0, len = elements.length; i < len; i++) {\n      const el = elements[i];\n      const elName = el.nodeName.toLowerCase();\n\n      if (!allowlistKeys.includes(elName)) {\n        el.remove();\n        continue;\n      }\n\n      const attributeList = [].concat(...el.attributes);\n      const allowedAttributes = [].concat(allowList['*'] || [], allowList[elName] || []);\n      attributeList.forEach(attr => {\n        if (!allowedAttribute(attr, allowedAttributes)) {\n          el.removeAttribute(attr.nodeName);\n        }\n      });\n    }\n\n    return createdDocument.body.innerHTML;\n  }\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): tooltip.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$4 = 'tooltip';\n  const DATA_KEY$4 = 'bs.tooltip';\n  const EVENT_KEY$4 = `.${DATA_KEY$4}`;\n  const CLASS_PREFIX$1 = 'bs-tooltip';\n  const BSCLS_PREFIX_REGEX$1 = new RegExp(`(^|\\\\s)${CLASS_PREFIX$1}\\\\S+`, 'g');\n  const DISALLOWED_ATTRIBUTES = new Set(['sanitize', 'allowList', 'sanitizeFn']);\n  const DefaultType$3 = {\n    animation: 'boolean',\n    template: 'string',\n    title: '(string|element|function)',\n    trigger: 'string',\n    delay: '(number|object)',\n    html: 'boolean',\n    selector: '(string|boolean)',\n    placement: '(string|function)',\n    offset: '(array|string|function)',\n    container: '(string|element|boolean)',\n    fallbackPlacements: 'array',\n    boundary: '(string|element)',\n    customClass: '(string|function)',\n    sanitize: 'boolean',\n    sanitizeFn: '(null|function)',\n    allowList: 'object',\n    popperConfig: '(null|object|function)'\n  };\n  const AttachmentMap = {\n    AUTO: 'auto',\n    TOP: 'top',\n    RIGHT: isRTL() ? 'left' : 'right',\n    BOTTOM: 'bottom',\n    LEFT: isRTL() ? 'right' : 'left'\n  };\n  const Default$3 = {\n    animation: true,\n    template: '<div class=\"tooltip\" role=\"tooltip\">' + '<div class=\"tooltip-arrow\"></div>' + '<div class=\"tooltip-inner\"></div>' + '</div>',\n    trigger: 'hover focus',\n    title: '',\n    delay: 0,\n    html: false,\n    selector: false,\n    placement: 'top',\n    offset: [0, 0],\n    container: false,\n    fallbackPlacements: ['top', 'right', 'bottom', 'left'],\n    boundary: 'clippingParents',\n    customClass: '',\n    sanitize: true,\n    sanitizeFn: null,\n    allowList: DefaultAllowlist,\n    popperConfig: null\n  };\n  const Event$2 = {\n    HIDE: `hide${EVENT_KEY$4}`,\n    HIDDEN: `hidden${EVENT_KEY$4}`,\n    SHOW: `show${EVENT_KEY$4}`,\n    SHOWN: `shown${EVENT_KEY$4}`,\n    INSERTED: `inserted${EVENT_KEY$4}`,\n    CLICK: `click${EVENT_KEY$4}`,\n    FOCUSIN: `focusin${EVENT_KEY$4}`,\n    FOCUSOUT: `focusout${EVENT_KEY$4}`,\n    MOUSEENTER: `mouseenter${EVENT_KEY$4}`,\n    MOUSELEAVE: `mouseleave${EVENT_KEY$4}`\n  };\n  const CLASS_NAME_FADE$3 = 'fade';\n  const CLASS_NAME_MODAL = 'modal';\n  const CLASS_NAME_SHOW$3 = 'show';\n  const HOVER_STATE_SHOW = 'show';\n  const HOVER_STATE_OUT = 'out';\n  const SELECTOR_TOOLTIP_INNER = '.tooltip-inner';\n  const TRIGGER_HOVER = 'hover';\n  const TRIGGER_FOCUS = 'focus';\n  const TRIGGER_CLICK = 'click';\n  const TRIGGER_MANUAL = 'manual';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Tooltip extends BaseComponent {\n    constructor(element, config) {\n      if (typeof Popper === 'undefined') {\n        throw new TypeError('Bootstrap\\'s tooltips require Popper (https://popper.js.org)');\n      }\n\n      super(element); // private\n\n      this._isEnabled = true;\n      this._timeout = 0;\n      this._hoverState = '';\n      this._activeTrigger = {};\n      this._popper = null; // Protected\n\n      this._config = this._getConfig(config);\n      this.tip = null;\n\n      this._setListeners();\n    } // Getters\n\n\n    static get Default() {\n      return Default$3;\n    }\n\n    static get NAME() {\n      return NAME$4;\n    }\n\n    static get Event() {\n      return Event$2;\n    }\n\n    static get DefaultType() {\n      return DefaultType$3;\n    } // Public\n\n\n    enable() {\n      this._isEnabled = true;\n    }\n\n    disable() {\n      this._isEnabled = false;\n    }\n\n    toggleEnabled() {\n      this._isEnabled = !this._isEnabled;\n    }\n\n    toggle(event) {\n      if (!this._isEnabled) {\n        return;\n      }\n\n      if (event) {\n        const context = this._initializeOnDelegatedTarget(event);\n\n        context._activeTrigger.click = !context._activeTrigger.click;\n\n        if (context._isWithActiveTrigger()) {\n          context._enter(null, context);\n        } else {\n          context._leave(null, context);\n        }\n      } else {\n        if (this.getTipElement().classList.contains(CLASS_NAME_SHOW$3)) {\n          this._leave(null, this);\n\n          return;\n        }\n\n        this._enter(null, this);\n      }\n    }\n\n    dispose() {\n      clearTimeout(this._timeout);\n      EventHandler.off(this._element.closest(`.${CLASS_NAME_MODAL}`), 'hide.bs.modal', this._hideModalHandler);\n\n      if (this.tip) {\n        this.tip.remove();\n      }\n\n      if (this._popper) {\n        this._popper.destroy();\n      }\n\n      super.dispose();\n    }\n\n    show() {\n      if (this._element.style.display === 'none') {\n        throw new Error('Please use show on visible elements');\n      }\n\n      if (!(this.isWithContent() && this._isEnabled)) {\n        return;\n      }\n\n      const showEvent = EventHandler.trigger(this._element, this.constructor.Event.SHOW);\n      const shadowRoot = findShadowRoot(this._element);\n      const isInTheDom = shadowRoot === null ? this._element.ownerDocument.documentElement.contains(this._element) : shadowRoot.contains(this._element);\n\n      if (showEvent.defaultPrevented || !isInTheDom) {\n        return;\n      }\n\n      const tip = this.getTipElement();\n      const tipId = getUID(this.constructor.NAME);\n      tip.setAttribute('id', tipId);\n\n      this._element.setAttribute('aria-describedby', tipId);\n\n      this.setContent();\n\n      if (this._config.animation) {\n        tip.classList.add(CLASS_NAME_FADE$3);\n      }\n\n      const placement = typeof this._config.placement === 'function' ? this._config.placement.call(this, tip, this._element) : this._config.placement;\n\n      const attachment = this._getAttachment(placement);\n\n      this._addAttachmentClass(attachment);\n\n      const {\n        container\n      } = this._config;\n      Data.set(tip, this.constructor.DATA_KEY, this);\n\n      if (!this._element.ownerDocument.documentElement.contains(this.tip)) {\n        container.appendChild(tip);\n        EventHandler.trigger(this._element, this.constructor.Event.INSERTED);\n      }\n\n      if (this._popper) {\n        this._popper.update();\n      } else {\n        this._popper = createPopper(this._element, tip, this._getPopperConfig(attachment));\n      }\n\n      tip.classList.add(CLASS_NAME_SHOW$3);\n      const customClass = typeof this._config.customClass === 'function' ? this._config.customClass() : this._config.customClass;\n\n      if (customClass) {\n        tip.classList.add(...customClass.split(' '));\n      } // If this is a touch-enabled device we add extra\n      // empty mouseover listeners to the body's immediate children;\n      // only needed because of broken event delegation on iOS\n      // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n\n\n      if ('ontouchstart' in document.documentElement) {\n        [].concat(...document.body.children).forEach(element => {\n          EventHandler.on(element, 'mouseover', noop);\n        });\n      }\n\n      const complete = () => {\n        const prevHoverState = this._hoverState;\n        this._hoverState = null;\n        EventHandler.trigger(this._element, this.constructor.Event.SHOWN);\n\n        if (prevHoverState === HOVER_STATE_OUT) {\n          this._leave(null, this);\n        }\n      };\n\n      const isAnimated = this.tip.classList.contains(CLASS_NAME_FADE$3);\n\n      this._queueCallback(complete, this.tip, isAnimated);\n    }\n\n    hide() {\n      if (!this._popper) {\n        return;\n      }\n\n      const tip = this.getTipElement();\n\n      const complete = () => {\n        if (this._isWithActiveTrigger()) {\n          return;\n        }\n\n        if (this._hoverState !== HOVER_STATE_SHOW) {\n          tip.remove();\n        }\n\n        this._cleanTipClass();\n\n        this._element.removeAttribute('aria-describedby');\n\n        EventHandler.trigger(this._element, this.constructor.Event.HIDDEN);\n\n        if (this._popper) {\n          this._popper.destroy();\n\n          this._popper = null;\n        }\n      };\n\n      const hideEvent = EventHandler.trigger(this._element, this.constructor.Event.HIDE);\n\n      if (hideEvent.defaultPrevented) {\n        return;\n      }\n\n      tip.classList.remove(CLASS_NAME_SHOW$3); // If this is a touch-enabled device we remove the extra\n      // empty mouseover listeners we added for iOS support\n\n      if ('ontouchstart' in document.documentElement) {\n        [].concat(...document.body.children).forEach(element => EventHandler.off(element, 'mouseover', noop));\n      }\n\n      this._activeTrigger[TRIGGER_CLICK] = false;\n      this._activeTrigger[TRIGGER_FOCUS] = false;\n      this._activeTrigger[TRIGGER_HOVER] = false;\n      const isAnimated = this.tip.classList.contains(CLASS_NAME_FADE$3);\n\n      this._queueCallback(complete, this.tip, isAnimated);\n\n      this._hoverState = '';\n    }\n\n    update() {\n      if (this._popper !== null) {\n        this._popper.update();\n      }\n    } // Protected\n\n\n    isWithContent() {\n      return Boolean(this.getTitle());\n    }\n\n    getTipElement() {\n      if (this.tip) {\n        return this.tip;\n      }\n\n      const element = document.createElement('div');\n      element.innerHTML = this._config.template;\n      this.tip = element.children[0];\n      return this.tip;\n    }\n\n    setContent() {\n      const tip = this.getTipElement();\n      this.setElementContent(SelectorEngine.findOne(SELECTOR_TOOLTIP_INNER, tip), this.getTitle());\n      tip.classList.remove(CLASS_NAME_FADE$3, CLASS_NAME_SHOW$3);\n    }\n\n    setElementContent(element, content) {\n      if (element === null) {\n        return;\n      }\n\n      if (isElement$1(content)) {\n        content = getElement(content); // content is a DOM node or a jQuery\n\n        if (this._config.html) {\n          if (content.parentNode !== element) {\n            element.innerHTML = '';\n            element.appendChild(content);\n          }\n        } else {\n          element.textContent = content.textContent;\n        }\n\n        return;\n      }\n\n      if (this._config.html) {\n        if (this._config.sanitize) {\n          content = sanitizeHtml(content, this._config.allowList, this._config.sanitizeFn);\n        }\n\n        element.innerHTML = content;\n      } else {\n        element.textContent = content;\n      }\n    }\n\n    getTitle() {\n      let title = this._element.getAttribute('data-bs-original-title');\n\n      if (!title) {\n        title = typeof this._config.title === 'function' ? this._config.title.call(this._element) : this._config.title;\n      }\n\n      return title;\n    }\n\n    updateAttachment(attachment) {\n      if (attachment === 'right') {\n        return 'end';\n      }\n\n      if (attachment === 'left') {\n        return 'start';\n      }\n\n      return attachment;\n    } // Private\n\n\n    _initializeOnDelegatedTarget(event, context) {\n      const dataKey = this.constructor.DATA_KEY;\n      context = context || Data.get(event.delegateTarget, dataKey);\n\n      if (!context) {\n        context = new this.constructor(event.delegateTarget, this._getDelegateConfig());\n        Data.set(event.delegateTarget, dataKey, context);\n      }\n\n      return context;\n    }\n\n    _getOffset() {\n      const {\n        offset\n      } = this._config;\n\n      if (typeof offset === 'string') {\n        return offset.split(',').map(val => Number.parseInt(val, 10));\n      }\n\n      if (typeof offset === 'function') {\n        return popperData => offset(popperData, this._element);\n      }\n\n      return offset;\n    }\n\n    _getPopperConfig(attachment) {\n      const defaultBsPopperConfig = {\n        placement: attachment,\n        modifiers: [{\n          name: 'flip',\n          options: {\n            fallbackPlacements: this._config.fallbackPlacements\n          }\n        }, {\n          name: 'offset',\n          options: {\n            offset: this._getOffset()\n          }\n        }, {\n          name: 'preventOverflow',\n          options: {\n            boundary: this._config.boundary\n          }\n        }, {\n          name: 'arrow',\n          options: {\n            element: `.${this.constructor.NAME}-arrow`\n          }\n        }, {\n          name: 'onChange',\n          enabled: true,\n          phase: 'afterWrite',\n          fn: data => this._handlePopperPlacementChange(data)\n        }],\n        onFirstUpdate: data => {\n          if (data.options.placement !== data.placement) {\n            this._handlePopperPlacementChange(data);\n          }\n        }\n      };\n      return { ...defaultBsPopperConfig,\n        ...(typeof this._config.popperConfig === 'function' ? this._config.popperConfig(defaultBsPopperConfig) : this._config.popperConfig)\n      };\n    }\n\n    _addAttachmentClass(attachment) {\n      this.getTipElement().classList.add(`${CLASS_PREFIX$1}-${this.updateAttachment(attachment)}`);\n    }\n\n    _getAttachment(placement) {\n      return AttachmentMap[placement.toUpperCase()];\n    }\n\n    _setListeners() {\n      const triggers = this._config.trigger.split(' ');\n\n      triggers.forEach(trigger => {\n        if (trigger === 'click') {\n          EventHandler.on(this._element, this.constructor.Event.CLICK, this._config.selector, event => this.toggle(event));\n        } else if (trigger !== TRIGGER_MANUAL) {\n          const eventIn = trigger === TRIGGER_HOVER ? this.constructor.Event.MOUSEENTER : this.constructor.Event.FOCUSIN;\n          const eventOut = trigger === TRIGGER_HOVER ? this.constructor.Event.MOUSELEAVE : this.constructor.Event.FOCUSOUT;\n          EventHandler.on(this._element, eventIn, this._config.selector, event => this._enter(event));\n          EventHandler.on(this._element, eventOut, this._config.selector, event => this._leave(event));\n        }\n      });\n\n      this._hideModalHandler = () => {\n        if (this._element) {\n          this.hide();\n        }\n      };\n\n      EventHandler.on(this._element.closest(`.${CLASS_NAME_MODAL}`), 'hide.bs.modal', this._hideModalHandler);\n\n      if (this._config.selector) {\n        this._config = { ...this._config,\n          trigger: 'manual',\n          selector: ''\n        };\n      } else {\n        this._fixTitle();\n      }\n    }\n\n    _fixTitle() {\n      const title = this._element.getAttribute('title');\n\n      const originalTitleType = typeof this._element.getAttribute('data-bs-original-title');\n\n      if (title || originalTitleType !== 'string') {\n        this._element.setAttribute('data-bs-original-title', title || '');\n\n        if (title && !this._element.getAttribute('aria-label') && !this._element.textContent) {\n          this._element.setAttribute('aria-label', title);\n        }\n\n        this._element.setAttribute('title', '');\n      }\n    }\n\n    _enter(event, context) {\n      context = this._initializeOnDelegatedTarget(event, context);\n\n      if (event) {\n        context._activeTrigger[event.type === 'focusin' ? TRIGGER_FOCUS : TRIGGER_HOVER] = true;\n      }\n\n      if (context.getTipElement().classList.contains(CLASS_NAME_SHOW$3) || context._hoverState === HOVER_STATE_SHOW) {\n        context._hoverState = HOVER_STATE_SHOW;\n        return;\n      }\n\n      clearTimeout(context._timeout);\n      context._hoverState = HOVER_STATE_SHOW;\n\n      if (!context._config.delay || !context._config.delay.show) {\n        context.show();\n        return;\n      }\n\n      context._timeout = setTimeout(() => {\n        if (context._hoverState === HOVER_STATE_SHOW) {\n          context.show();\n        }\n      }, context._config.delay.show);\n    }\n\n    _leave(event, context) {\n      context = this._initializeOnDelegatedTarget(event, context);\n\n      if (event) {\n        context._activeTrigger[event.type === 'focusout' ? TRIGGER_FOCUS : TRIGGER_HOVER] = context._element.contains(event.relatedTarget);\n      }\n\n      if (context._isWithActiveTrigger()) {\n        return;\n      }\n\n      clearTimeout(context._timeout);\n      context._hoverState = HOVER_STATE_OUT;\n\n      if (!context._config.delay || !context._config.delay.hide) {\n        context.hide();\n        return;\n      }\n\n      context._timeout = setTimeout(() => {\n        if (context._hoverState === HOVER_STATE_OUT) {\n          context.hide();\n        }\n      }, context._config.delay.hide);\n    }\n\n    _isWithActiveTrigger() {\n      for (const trigger in this._activeTrigger) {\n        if (this._activeTrigger[trigger]) {\n          return true;\n        }\n      }\n\n      return false;\n    }\n\n    _getConfig(config) {\n      const dataAttributes = Manipulator.getDataAttributes(this._element);\n      Object.keys(dataAttributes).forEach(dataAttr => {\n        if (DISALLOWED_ATTRIBUTES.has(dataAttr)) {\n          delete dataAttributes[dataAttr];\n        }\n      });\n      config = { ...this.constructor.Default,\n        ...dataAttributes,\n        ...(typeof config === 'object' && config ? config : {})\n      };\n      config.container = config.container === false ? document.body : getElement(config.container);\n\n      if (typeof config.delay === 'number') {\n        config.delay = {\n          show: config.delay,\n          hide: config.delay\n        };\n      }\n\n      if (typeof config.title === 'number') {\n        config.title = config.title.toString();\n      }\n\n      if (typeof config.content === 'number') {\n        config.content = config.content.toString();\n      }\n\n      typeCheckConfig(NAME$4, config, this.constructor.DefaultType);\n\n      if (config.sanitize) {\n        config.template = sanitizeHtml(config.template, config.allowList, config.sanitizeFn);\n      }\n\n      return config;\n    }\n\n    _getDelegateConfig() {\n      const config = {};\n\n      if (this._config) {\n        for (const key in this._config) {\n          if (this.constructor.Default[key] !== this._config[key]) {\n            config[key] = this._config[key];\n          }\n        }\n      }\n\n      return config;\n    }\n\n    _cleanTipClass() {\n      const tip = this.getTipElement();\n      const tabClass = tip.getAttribute('class').match(BSCLS_PREFIX_REGEX$1);\n\n      if (tabClass !== null && tabClass.length > 0) {\n        tabClass.map(token => token.trim()).forEach(tClass => tip.classList.remove(tClass));\n      }\n    }\n\n    _handlePopperPlacementChange(popperData) {\n      const {\n        state\n      } = popperData;\n\n      if (!state) {\n        return;\n      }\n\n      this.tip = state.elements.popper;\n\n      this._cleanTipClass();\n\n      this._addAttachmentClass(this._getAttachment(state.placement));\n    } // Static\n\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = Tooltip.getOrCreateInstance(this, config);\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(`No method named \"${config}\"`);\n          }\n\n          data[config]();\n        }\n      });\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Tooltip to jQuery only if jQuery is present\n   */\n\n\n  defineJQueryPlugin(Tooltip);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): popover.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$3 = 'popover';\n  const DATA_KEY$3 = 'bs.popover';\n  const EVENT_KEY$3 = `.${DATA_KEY$3}`;\n  const CLASS_PREFIX = 'bs-popover';\n  const BSCLS_PREFIX_REGEX = new RegExp(`(^|\\\\s)${CLASS_PREFIX}\\\\S+`, 'g');\n  const Default$2 = { ...Tooltip.Default,\n    placement: 'right',\n    offset: [0, 8],\n    trigger: 'click',\n    content: '',\n    template: '<div class=\"popover\" role=\"tooltip\">' + '<div class=\"popover-arrow\"></div>' + '<h3 class=\"popover-header\"></h3>' + '<div class=\"popover-body\"></div>' + '</div>'\n  };\n  const DefaultType$2 = { ...Tooltip.DefaultType,\n    content: '(string|element|function)'\n  };\n  const Event$1 = {\n    HIDE: `hide${EVENT_KEY$3}`,\n    HIDDEN: `hidden${EVENT_KEY$3}`,\n    SHOW: `show${EVENT_KEY$3}`,\n    SHOWN: `shown${EVENT_KEY$3}`,\n    INSERTED: `inserted${EVENT_KEY$3}`,\n    CLICK: `click${EVENT_KEY$3}`,\n    FOCUSIN: `focusin${EVENT_KEY$3}`,\n    FOCUSOUT: `focusout${EVENT_KEY$3}`,\n    MOUSEENTER: `mouseenter${EVENT_KEY$3}`,\n    MOUSELEAVE: `mouseleave${EVENT_KEY$3}`\n  };\n  const CLASS_NAME_FADE$2 = 'fade';\n  const CLASS_NAME_SHOW$2 = 'show';\n  const SELECTOR_TITLE = '.popover-header';\n  const SELECTOR_CONTENT = '.popover-body';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Popover extends Tooltip {\n    // Getters\n    static get Default() {\n      return Default$2;\n    }\n\n    static get NAME() {\n      return NAME$3;\n    }\n\n    static get Event() {\n      return Event$1;\n    }\n\n    static get DefaultType() {\n      return DefaultType$2;\n    } // Overrides\n\n\n    isWithContent() {\n      return this.getTitle() || this._getContent();\n    }\n\n    getTipElement() {\n      if (this.tip) {\n        return this.tip;\n      }\n\n      this.tip = super.getTipElement();\n\n      if (!this.getTitle()) {\n        SelectorEngine.findOne(SELECTOR_TITLE, this.tip).remove();\n      }\n\n      if (!this._getContent()) {\n        SelectorEngine.findOne(SELECTOR_CONTENT, this.tip).remove();\n      }\n\n      return this.tip;\n    }\n\n    setContent() {\n      const tip = this.getTipElement(); // we use append for html objects to maintain js events\n\n      this.setElementContent(SelectorEngine.findOne(SELECTOR_TITLE, tip), this.getTitle());\n\n      let content = this._getContent();\n\n      if (typeof content === 'function') {\n        content = content.call(this._element);\n      }\n\n      this.setElementContent(SelectorEngine.findOne(SELECTOR_CONTENT, tip), content);\n      tip.classList.remove(CLASS_NAME_FADE$2, CLASS_NAME_SHOW$2);\n    } // Private\n\n\n    _addAttachmentClass(attachment) {\n      this.getTipElement().classList.add(`${CLASS_PREFIX}-${this.updateAttachment(attachment)}`);\n    }\n\n    _getContent() {\n      return this._element.getAttribute('data-bs-content') || this._config.content;\n    }\n\n    _cleanTipClass() {\n      const tip = this.getTipElement();\n      const tabClass = tip.getAttribute('class').match(BSCLS_PREFIX_REGEX);\n\n      if (tabClass !== null && tabClass.length > 0) {\n        tabClass.map(token => token.trim()).forEach(tClass => tip.classList.remove(tClass));\n      }\n    } // Static\n\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = Popover.getOrCreateInstance(this, config);\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(`No method named \"${config}\"`);\n          }\n\n          data[config]();\n        }\n      });\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Popover to jQuery only if jQuery is present\n   */\n\n\n  defineJQueryPlugin(Popover);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): scrollspy.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$2 = 'scrollspy';\n  const DATA_KEY$2 = 'bs.scrollspy';\n  const EVENT_KEY$2 = `.${DATA_KEY$2}`;\n  const DATA_API_KEY$1 = '.data-api';\n  const Default$1 = {\n    offset: 10,\n    method: 'auto',\n    target: ''\n  };\n  const DefaultType$1 = {\n    offset: 'number',\n    method: 'string',\n    target: '(string|element)'\n  };\n  const EVENT_ACTIVATE = `activate${EVENT_KEY$2}`;\n  const EVENT_SCROLL = `scroll${EVENT_KEY$2}`;\n  const EVENT_LOAD_DATA_API = `load${EVENT_KEY$2}${DATA_API_KEY$1}`;\n  const CLASS_NAME_DROPDOWN_ITEM = 'dropdown-item';\n  const CLASS_NAME_ACTIVE$1 = 'active';\n  const SELECTOR_DATA_SPY = '[data-bs-spy=\"scroll\"]';\n  const SELECTOR_NAV_LIST_GROUP$1 = '.nav, .list-group';\n  const SELECTOR_NAV_LINKS = '.nav-link';\n  const SELECTOR_NAV_ITEMS = '.nav-item';\n  const SELECTOR_LIST_ITEMS = '.list-group-item';\n  const SELECTOR_DROPDOWN$1 = '.dropdown';\n  const SELECTOR_DROPDOWN_TOGGLE$1 = '.dropdown-toggle';\n  const METHOD_OFFSET = 'offset';\n  const METHOD_POSITION = 'position';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class ScrollSpy extends BaseComponent {\n    constructor(element, config) {\n      super(element);\n      this._scrollElement = this._element.tagName === 'BODY' ? window : this._element;\n      this._config = this._getConfig(config);\n      this._selector = `${this._config.target} ${SELECTOR_NAV_LINKS}, ${this._config.target} ${SELECTOR_LIST_ITEMS}, ${this._config.target} .${CLASS_NAME_DROPDOWN_ITEM}`;\n      this._offsets = [];\n      this._targets = [];\n      this._activeTarget = null;\n      this._scrollHeight = 0;\n      EventHandler.on(this._scrollElement, EVENT_SCROLL, () => this._process());\n      this.refresh();\n\n      this._process();\n    } // Getters\n\n\n    static get Default() {\n      return Default$1;\n    }\n\n    static get NAME() {\n      return NAME$2;\n    } // Public\n\n\n    refresh() {\n      const autoMethod = this._scrollElement === this._scrollElement.window ? METHOD_OFFSET : METHOD_POSITION;\n      const offsetMethod = this._config.method === 'auto' ? autoMethod : this._config.method;\n      const offsetBase = offsetMethod === METHOD_POSITION ? this._getScrollTop() : 0;\n      this._offsets = [];\n      this._targets = [];\n      this._scrollHeight = this._getScrollHeight();\n      const targets = SelectorEngine.find(this._selector);\n      targets.map(element => {\n        const targetSelector = getSelectorFromElement(element);\n        const target = targetSelector ? SelectorEngine.findOne(targetSelector) : null;\n\n        if (target) {\n          const targetBCR = target.getBoundingClientRect();\n\n          if (targetBCR.width || targetBCR.height) {\n            return [Manipulator[offsetMethod](target).top + offsetBase, targetSelector];\n          }\n        }\n\n        return null;\n      }).filter(item => item).sort((a, b) => a[0] - b[0]).forEach(item => {\n        this._offsets.push(item[0]);\n\n        this._targets.push(item[1]);\n      });\n    }\n\n    dispose() {\n      EventHandler.off(this._scrollElement, EVENT_KEY$2);\n      super.dispose();\n    } // Private\n\n\n    _getConfig(config) {\n      config = { ...Default$1,\n        ...Manipulator.getDataAttributes(this._element),\n        ...(typeof config === 'object' && config ? config : {})\n      };\n\n      if (typeof config.target !== 'string' && isElement$1(config.target)) {\n        let {\n          id\n        } = config.target;\n\n        if (!id) {\n          id = getUID(NAME$2);\n          config.target.id = id;\n        }\n\n        config.target = `#${id}`;\n      }\n\n      typeCheckConfig(NAME$2, config, DefaultType$1);\n      return config;\n    }\n\n    _getScrollTop() {\n      return this._scrollElement === window ? this._scrollElement.pageYOffset : this._scrollElement.scrollTop;\n    }\n\n    _getScrollHeight() {\n      return this._scrollElement.scrollHeight || Math.max(document.body.scrollHeight, document.documentElement.scrollHeight);\n    }\n\n    _getOffsetHeight() {\n      return this._scrollElement === window ? window.innerHeight : this._scrollElement.getBoundingClientRect().height;\n    }\n\n    _process() {\n      const scrollTop = this._getScrollTop() + this._config.offset;\n\n      const scrollHeight = this._getScrollHeight();\n\n      const maxScroll = this._config.offset + scrollHeight - this._getOffsetHeight();\n\n      if (this._scrollHeight !== scrollHeight) {\n        this.refresh();\n      }\n\n      if (scrollTop >= maxScroll) {\n        const target = this._targets[this._targets.length - 1];\n\n        if (this._activeTarget !== target) {\n          this._activate(target);\n        }\n\n        return;\n      }\n\n      if (this._activeTarget && scrollTop < this._offsets[0] && this._offsets[0] > 0) {\n        this._activeTarget = null;\n\n        this._clear();\n\n        return;\n      }\n\n      for (let i = this._offsets.length; i--;) {\n        const isActiveTarget = this._activeTarget !== this._targets[i] && scrollTop >= this._offsets[i] && (typeof this._offsets[i + 1] === 'undefined' || scrollTop < this._offsets[i + 1]);\n\n        if (isActiveTarget) {\n          this._activate(this._targets[i]);\n        }\n      }\n    }\n\n    _activate(target) {\n      this._activeTarget = target;\n\n      this._clear();\n\n      const queries = this._selector.split(',').map(selector => `${selector}[data-bs-target=\"${target}\"],${selector}[href=\"${target}\"]`);\n\n      const link = SelectorEngine.findOne(queries.join(','));\n\n      if (link.classList.contains(CLASS_NAME_DROPDOWN_ITEM)) {\n        SelectorEngine.findOne(SELECTOR_DROPDOWN_TOGGLE$1, link.closest(SELECTOR_DROPDOWN$1)).classList.add(CLASS_NAME_ACTIVE$1);\n        link.classList.add(CLASS_NAME_ACTIVE$1);\n      } else {\n        // Set triggered link as active\n        link.classList.add(CLASS_NAME_ACTIVE$1);\n        SelectorEngine.parents(link, SELECTOR_NAV_LIST_GROUP$1).forEach(listGroup => {\n          // Set triggered links parents as active\n          // With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor\n          SelectorEngine.prev(listGroup, `${SELECTOR_NAV_LINKS}, ${SELECTOR_LIST_ITEMS}`).forEach(item => item.classList.add(CLASS_NAME_ACTIVE$1)); // Handle special case when .nav-link is inside .nav-item\n\n          SelectorEngine.prev(listGroup, SELECTOR_NAV_ITEMS).forEach(navItem => {\n            SelectorEngine.children(navItem, SELECTOR_NAV_LINKS).forEach(item => item.classList.add(CLASS_NAME_ACTIVE$1));\n          });\n        });\n      }\n\n      EventHandler.trigger(this._scrollElement, EVENT_ACTIVATE, {\n        relatedTarget: target\n      });\n    }\n\n    _clear() {\n      SelectorEngine.find(this._selector).filter(node => node.classList.contains(CLASS_NAME_ACTIVE$1)).forEach(node => node.classList.remove(CLASS_NAME_ACTIVE$1));\n    } // Static\n\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = ScrollSpy.getOrCreateInstance(this, config);\n\n        if (typeof config !== 'string') {\n          return;\n        }\n\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config]();\n      });\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n    SelectorEngine.find(SELECTOR_DATA_SPY).forEach(spy => new ScrollSpy(spy));\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .ScrollSpy to jQuery only if jQuery is present\n   */\n\n  defineJQueryPlugin(ScrollSpy);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): tab.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$1 = 'tab';\n  const DATA_KEY$1 = 'bs.tab';\n  const EVENT_KEY$1 = `.${DATA_KEY$1}`;\n  const DATA_API_KEY = '.data-api';\n  const EVENT_HIDE$1 = `hide${EVENT_KEY$1}`;\n  const EVENT_HIDDEN$1 = `hidden${EVENT_KEY$1}`;\n  const EVENT_SHOW$1 = `show${EVENT_KEY$1}`;\n  const EVENT_SHOWN$1 = `shown${EVENT_KEY$1}`;\n  const EVENT_CLICK_DATA_API = `click${EVENT_KEY$1}${DATA_API_KEY}`;\n  const CLASS_NAME_DROPDOWN_MENU = 'dropdown-menu';\n  const CLASS_NAME_ACTIVE = 'active';\n  const CLASS_NAME_FADE$1 = 'fade';\n  const CLASS_NAME_SHOW$1 = 'show';\n  const SELECTOR_DROPDOWN = '.dropdown';\n  const SELECTOR_NAV_LIST_GROUP = '.nav, .list-group';\n  const SELECTOR_ACTIVE = '.active';\n  const SELECTOR_ACTIVE_UL = ':scope > li > .active';\n  const SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"tab\"], [data-bs-toggle=\"pill\"], [data-bs-toggle=\"list\"]';\n  const SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle';\n  const SELECTOR_DROPDOWN_ACTIVE_CHILD = ':scope > .dropdown-menu .active';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Tab extends BaseComponent {\n    // Getters\n    static get NAME() {\n      return NAME$1;\n    } // Public\n\n\n    show() {\n      if (this._element.parentNode && this._element.parentNode.nodeType === Node.ELEMENT_NODE && this._element.classList.contains(CLASS_NAME_ACTIVE)) {\n        return;\n      }\n\n      let previous;\n      const target = getElementFromSelector(this._element);\n\n      const listElement = this._element.closest(SELECTOR_NAV_LIST_GROUP);\n\n      if (listElement) {\n        const itemSelector = listElement.nodeName === 'UL' || listElement.nodeName === 'OL' ? SELECTOR_ACTIVE_UL : SELECTOR_ACTIVE;\n        previous = SelectorEngine.find(itemSelector, listElement);\n        previous = previous[previous.length - 1];\n      }\n\n      const hideEvent = previous ? EventHandler.trigger(previous, EVENT_HIDE$1, {\n        relatedTarget: this._element\n      }) : null;\n      const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$1, {\n        relatedTarget: previous\n      });\n\n      if (showEvent.defaultPrevented || hideEvent !== null && hideEvent.defaultPrevented) {\n        return;\n      }\n\n      this._activate(this._element, listElement);\n\n      const complete = () => {\n        EventHandler.trigger(previous, EVENT_HIDDEN$1, {\n          relatedTarget: this._element\n        });\n        EventHandler.trigger(this._element, EVENT_SHOWN$1, {\n          relatedTarget: previous\n        });\n      };\n\n      if (target) {\n        this._activate(target, target.parentNode, complete);\n      } else {\n        complete();\n      }\n    } // Private\n\n\n    _activate(element, container, callback) {\n      const activeElements = container && (container.nodeName === 'UL' || container.nodeName === 'OL') ? SelectorEngine.find(SELECTOR_ACTIVE_UL, container) : SelectorEngine.children(container, SELECTOR_ACTIVE);\n      const active = activeElements[0];\n      const isTransitioning = callback && active && active.classList.contains(CLASS_NAME_FADE$1);\n\n      const complete = () => this._transitionComplete(element, active, callback);\n\n      if (active && isTransitioning) {\n        active.classList.remove(CLASS_NAME_SHOW$1);\n\n        this._queueCallback(complete, element, true);\n      } else {\n        complete();\n      }\n    }\n\n    _transitionComplete(element, active, callback) {\n      if (active) {\n        active.classList.remove(CLASS_NAME_ACTIVE);\n        const dropdownChild = SelectorEngine.findOne(SELECTOR_DROPDOWN_ACTIVE_CHILD, active.parentNode);\n\n        if (dropdownChild) {\n          dropdownChild.classList.remove(CLASS_NAME_ACTIVE);\n        }\n\n        if (active.getAttribute('role') === 'tab') {\n          active.setAttribute('aria-selected', false);\n        }\n      }\n\n      element.classList.add(CLASS_NAME_ACTIVE);\n\n      if (element.getAttribute('role') === 'tab') {\n        element.setAttribute('aria-selected', true);\n      }\n\n      reflow(element);\n\n      if (element.classList.contains(CLASS_NAME_FADE$1)) {\n        element.classList.add(CLASS_NAME_SHOW$1);\n      }\n\n      let parent = element.parentNode;\n\n      if (parent && parent.nodeName === 'LI') {\n        parent = parent.parentNode;\n      }\n\n      if (parent && parent.classList.contains(CLASS_NAME_DROPDOWN_MENU)) {\n        const dropdownElement = element.closest(SELECTOR_DROPDOWN);\n\n        if (dropdownElement) {\n          SelectorEngine.find(SELECTOR_DROPDOWN_TOGGLE, dropdownElement).forEach(dropdown => dropdown.classList.add(CLASS_NAME_ACTIVE));\n        }\n\n        element.setAttribute('aria-expanded', true);\n      }\n\n      if (callback) {\n        callback();\n      }\n    } // Static\n\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = Tab.getOrCreateInstance(this);\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(`No method named \"${config}\"`);\n          }\n\n          data[config]();\n        }\n      });\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n    if (['A', 'AREA'].includes(this.tagName)) {\n      event.preventDefault();\n    }\n\n    if (isDisabled(this)) {\n      return;\n    }\n\n    const data = Tab.getOrCreateInstance(this);\n    data.show();\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Tab to jQuery only if jQuery is present\n   */\n\n  defineJQueryPlugin(Tab);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): toast.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME = 'toast';\n  const DATA_KEY = 'bs.toast';\n  const EVENT_KEY = `.${DATA_KEY}`;\n  const EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY}`;\n  const EVENT_MOUSEOVER = `mouseover${EVENT_KEY}`;\n  const EVENT_MOUSEOUT = `mouseout${EVENT_KEY}`;\n  const EVENT_FOCUSIN = `focusin${EVENT_KEY}`;\n  const EVENT_FOCUSOUT = `focusout${EVENT_KEY}`;\n  const EVENT_HIDE = `hide${EVENT_KEY}`;\n  const EVENT_HIDDEN = `hidden${EVENT_KEY}`;\n  const EVENT_SHOW = `show${EVENT_KEY}`;\n  const EVENT_SHOWN = `shown${EVENT_KEY}`;\n  const CLASS_NAME_FADE = 'fade';\n  const CLASS_NAME_HIDE = 'hide';\n  const CLASS_NAME_SHOW = 'show';\n  const CLASS_NAME_SHOWING = 'showing';\n  const DefaultType = {\n    animation: 'boolean',\n    autohide: 'boolean',\n    delay: 'number'\n  };\n  const Default = {\n    animation: true,\n    autohide: true,\n    delay: 5000\n  };\n  const SELECTOR_DATA_DISMISS = '[data-bs-dismiss=\"toast\"]';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Toast extends BaseComponent {\n    constructor(element, config) {\n      super(element);\n      this._config = this._getConfig(config);\n      this._timeout = null;\n      this._hasMouseInteraction = false;\n      this._hasKeyboardInteraction = false;\n\n      this._setListeners();\n    } // Getters\n\n\n    static get DefaultType() {\n      return DefaultType;\n    }\n\n    static get Default() {\n      return Default;\n    }\n\n    static get NAME() {\n      return NAME;\n    } // Public\n\n\n    show() {\n      const showEvent = EventHandler.trigger(this._element, EVENT_SHOW);\n\n      if (showEvent.defaultPrevented) {\n        return;\n      }\n\n      this._clearTimeout();\n\n      if (this._config.animation) {\n        this._element.classList.add(CLASS_NAME_FADE);\n      }\n\n      const complete = () => {\n        this._element.classList.remove(CLASS_NAME_SHOWING);\n\n        this._element.classList.add(CLASS_NAME_SHOW);\n\n        EventHandler.trigger(this._element, EVENT_SHOWN);\n\n        this._maybeScheduleHide();\n      };\n\n      this._element.classList.remove(CLASS_NAME_HIDE);\n\n      reflow(this._element);\n\n      this._element.classList.add(CLASS_NAME_SHOWING);\n\n      this._queueCallback(complete, this._element, this._config.animation);\n    }\n\n    hide() {\n      if (!this._element.classList.contains(CLASS_NAME_SHOW)) {\n        return;\n      }\n\n      const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE);\n\n      if (hideEvent.defaultPrevented) {\n        return;\n      }\n\n      const complete = () => {\n        this._element.classList.add(CLASS_NAME_HIDE);\n\n        EventHandler.trigger(this._element, EVENT_HIDDEN);\n      };\n\n      this._element.classList.remove(CLASS_NAME_SHOW);\n\n      this._queueCallback(complete, this._element, this._config.animation);\n    }\n\n    dispose() {\n      this._clearTimeout();\n\n      if (this._element.classList.contains(CLASS_NAME_SHOW)) {\n        this._element.classList.remove(CLASS_NAME_SHOW);\n      }\n\n      super.dispose();\n    } // Private\n\n\n    _getConfig(config) {\n      config = { ...Default,\n        ...Manipulator.getDataAttributes(this._element),\n        ...(typeof config === 'object' && config ? config : {})\n      };\n      typeCheckConfig(NAME, config, this.constructor.DefaultType);\n      return config;\n    }\n\n    _maybeScheduleHide() {\n      if (!this._config.autohide) {\n        return;\n      }\n\n      if (this._hasMouseInteraction || this._hasKeyboardInteraction) {\n        return;\n      }\n\n      this._timeout = setTimeout(() => {\n        this.hide();\n      }, this._config.delay);\n    }\n\n    _onInteraction(event, isInteracting) {\n      switch (event.type) {\n        case 'mouseover':\n        case 'mouseout':\n          this._hasMouseInteraction = isInteracting;\n          break;\n\n        case 'focusin':\n        case 'focusout':\n          this._hasKeyboardInteraction = isInteracting;\n          break;\n      }\n\n      if (isInteracting) {\n        this._clearTimeout();\n\n        return;\n      }\n\n      const nextElement = event.relatedTarget;\n\n      if (this._element === nextElement || this._element.contains(nextElement)) {\n        return;\n      }\n\n      this._maybeScheduleHide();\n    }\n\n    _setListeners() {\n      EventHandler.on(this._element, EVENT_CLICK_DISMISS, SELECTOR_DATA_DISMISS, () => this.hide());\n      EventHandler.on(this._element, EVENT_MOUSEOVER, event => this._onInteraction(event, true));\n      EventHandler.on(this._element, EVENT_MOUSEOUT, event => this._onInteraction(event, false));\n      EventHandler.on(this._element, EVENT_FOCUSIN, event => this._onInteraction(event, true));\n      EventHandler.on(this._element, EVENT_FOCUSOUT, event => this._onInteraction(event, false));\n    }\n\n    _clearTimeout() {\n      clearTimeout(this._timeout);\n      this._timeout = null;\n    } // Static\n\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = Toast.getOrCreateInstance(this, config);\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(`No method named \"${config}\"`);\n          }\n\n          data[config](this);\n        }\n      });\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Toast to jQuery only if jQuery is present\n   */\n\n\n  defineJQueryPlugin(Toast);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): index.umd.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  var index_umd = {\n    Alert,\n    Button,\n    Carousel,\n    Collapse,\n    Dropdown,\n    Modal,\n    Offcanvas,\n    Popover,\n    ScrollSpy,\n    Tab,\n    Toast,\n    Tooltip\n  };\n\n  return index_umd;\n\n})));\n//# sourceMappingURL=bootstrap.bundle.js.map\n"
  },
  {
    "path": "src/sourceDev.WebApp/SharedThemes/spacelab/wwwroot/js/bootstrap.esm.js",
    "content": "/*!\n  * Bootstrap v5.0.2 (https://getbootstrap.com/)\n  * Copyright 2011-2021 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)\n  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n  */\nimport * as Popper from '@popperjs/core';\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): dom/selector-engine.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\nconst NODE_TEXT = 3;\nconst SelectorEngine = {\n  find(selector, element = document.documentElement) {\n    return [].concat(...Element.prototype.querySelectorAll.call(element, selector));\n  },\n\n  findOne(selector, element = document.documentElement) {\n    return Element.prototype.querySelector.call(element, selector);\n  },\n\n  children(element, selector) {\n    return [].concat(...element.children).filter(child => child.matches(selector));\n  },\n\n  parents(element, selector) {\n    const parents = [];\n    let ancestor = element.parentNode;\n\n    while (ancestor && ancestor.nodeType === Node.ELEMENT_NODE && ancestor.nodeType !== NODE_TEXT) {\n      if (ancestor.matches(selector)) {\n        parents.push(ancestor);\n      }\n\n      ancestor = ancestor.parentNode;\n    }\n\n    return parents;\n  },\n\n  prev(element, selector) {\n    let previous = element.previousElementSibling;\n\n    while (previous) {\n      if (previous.matches(selector)) {\n        return [previous];\n      }\n\n      previous = previous.previousElementSibling;\n    }\n\n    return [];\n  },\n\n  next(element, selector) {\n    let next = element.nextElementSibling;\n\n    while (next) {\n      if (next.matches(selector)) {\n        return [next];\n      }\n\n      next = next.nextElementSibling;\n    }\n\n    return [];\n  }\n\n};\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): util/index.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst MAX_UID = 1000000;\nconst MILLISECONDS_MULTIPLIER = 1000;\nconst TRANSITION_END = 'transitionend'; // Shoutout AngusCroll (https://goo.gl/pxwQGp)\n\nconst toType = obj => {\n  if (obj === null || obj === undefined) {\n    return `${obj}`;\n  }\n\n  return {}.toString.call(obj).match(/\\s([a-z]+)/i)[1].toLowerCase();\n};\n/**\n * --------------------------------------------------------------------------\n * Public Util Api\n * --------------------------------------------------------------------------\n */\n\n\nconst getUID = prefix => {\n  do {\n    prefix += Math.floor(Math.random() * MAX_UID);\n  } while (document.getElementById(prefix));\n\n  return prefix;\n};\n\nconst getSelector = element => {\n  let selector = element.getAttribute('data-bs-target');\n\n  if (!selector || selector === '#') {\n    let hrefAttr = element.getAttribute('href'); // The only valid content that could double as a selector are IDs or classes,\n    // so everything starting with `#` or `.`. If a \"real\" URL is used as the selector,\n    // `document.querySelector` will rightfully complain it is invalid.\n    // See https://github.com/twbs/bootstrap/issues/32273\n\n    if (!hrefAttr || !hrefAttr.includes('#') && !hrefAttr.startsWith('.')) {\n      return null;\n    } // Just in case some CMS puts out a full URL with the anchor appended\n\n\n    if (hrefAttr.includes('#') && !hrefAttr.startsWith('#')) {\n      hrefAttr = `#${hrefAttr.split('#')[1]}`;\n    }\n\n    selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : null;\n  }\n\n  return selector;\n};\n\nconst getSelectorFromElement = element => {\n  const selector = getSelector(element);\n\n  if (selector) {\n    return document.querySelector(selector) ? selector : null;\n  }\n\n  return null;\n};\n\nconst getElementFromSelector = element => {\n  const selector = getSelector(element);\n  return selector ? document.querySelector(selector) : null;\n};\n\nconst getTransitionDurationFromElement = element => {\n  if (!element) {\n    return 0;\n  } // Get transition-duration of the element\n\n\n  let {\n    transitionDuration,\n    transitionDelay\n  } = window.getComputedStyle(element);\n  const floatTransitionDuration = Number.parseFloat(transitionDuration);\n  const floatTransitionDelay = Number.parseFloat(transitionDelay); // Return 0 if element or transition duration is not found\n\n  if (!floatTransitionDuration && !floatTransitionDelay) {\n    return 0;\n  } // If multiple durations are defined, take the first\n\n\n  transitionDuration = transitionDuration.split(',')[0];\n  transitionDelay = transitionDelay.split(',')[0];\n  return (Number.parseFloat(transitionDuration) + Number.parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER;\n};\n\nconst triggerTransitionEnd = element => {\n  element.dispatchEvent(new Event(TRANSITION_END));\n};\n\nconst isElement = obj => {\n  if (!obj || typeof obj !== 'object') {\n    return false;\n  }\n\n  if (typeof obj.jquery !== 'undefined') {\n    obj = obj[0];\n  }\n\n  return typeof obj.nodeType !== 'undefined';\n};\n\nconst getElement = obj => {\n  if (isElement(obj)) {\n    // it's a jQuery object or a node element\n    return obj.jquery ? obj[0] : obj;\n  }\n\n  if (typeof obj === 'string' && obj.length > 0) {\n    return SelectorEngine.findOne(obj);\n  }\n\n  return null;\n};\n\nconst typeCheckConfig = (componentName, config, configTypes) => {\n  Object.keys(configTypes).forEach(property => {\n    const expectedTypes = configTypes[property];\n    const value = config[property];\n    const valueType = value && isElement(value) ? 'element' : toType(value);\n\n    if (!new RegExp(expectedTypes).test(valueType)) {\n      throw new TypeError(`${componentName.toUpperCase()}: Option \"${property}\" provided type \"${valueType}\" but expected type \"${expectedTypes}\".`);\n    }\n  });\n};\n\nconst isVisible = element => {\n  if (!isElement(element) || element.getClientRects().length === 0) {\n    return false;\n  }\n\n  return getComputedStyle(element).getPropertyValue('visibility') === 'visible';\n};\n\nconst isDisabled = element => {\n  if (!element || element.nodeType !== Node.ELEMENT_NODE) {\n    return true;\n  }\n\n  if (element.classList.contains('disabled')) {\n    return true;\n  }\n\n  if (typeof element.disabled !== 'undefined') {\n    return element.disabled;\n  }\n\n  return element.hasAttribute('disabled') && element.getAttribute('disabled') !== 'false';\n};\n\nconst findShadowRoot = element => {\n  if (!document.documentElement.attachShadow) {\n    return null;\n  } // Can find the shadow root otherwise it'll return the document\n\n\n  if (typeof element.getRootNode === 'function') {\n    const root = element.getRootNode();\n    return root instanceof ShadowRoot ? root : null;\n  }\n\n  if (element instanceof ShadowRoot) {\n    return element;\n  } // when we don't find a shadow root\n\n\n  if (!element.parentNode) {\n    return null;\n  }\n\n  return findShadowRoot(element.parentNode);\n};\n\nconst noop = () => {};\n\nconst reflow = element => element.offsetHeight;\n\nconst getjQuery = () => {\n  const {\n    jQuery\n  } = window;\n\n  if (jQuery && !document.body.hasAttribute('data-bs-no-jquery')) {\n    return jQuery;\n  }\n\n  return null;\n};\n\nconst DOMContentLoadedCallbacks = [];\n\nconst onDOMContentLoaded = callback => {\n  if (document.readyState === 'loading') {\n    // add listener on the first call when the document is in loading state\n    if (!DOMContentLoadedCallbacks.length) {\n      document.addEventListener('DOMContentLoaded', () => {\n        DOMContentLoadedCallbacks.forEach(callback => callback());\n      });\n    }\n\n    DOMContentLoadedCallbacks.push(callback);\n  } else {\n    callback();\n  }\n};\n\nconst isRTL = () => document.documentElement.dir === 'rtl';\n\nconst defineJQueryPlugin = plugin => {\n  onDOMContentLoaded(() => {\n    const $ = getjQuery();\n    /* istanbul ignore if */\n\n    if ($) {\n      const name = plugin.NAME;\n      const JQUERY_NO_CONFLICT = $.fn[name];\n      $.fn[name] = plugin.jQueryInterface;\n      $.fn[name].Constructor = plugin;\n\n      $.fn[name].noConflict = () => {\n        $.fn[name] = JQUERY_NO_CONFLICT;\n        return plugin.jQueryInterface;\n      };\n    }\n  });\n};\n\nconst execute = callback => {\n  if (typeof callback === 'function') {\n    callback();\n  }\n};\n\nconst executeAfterTransition = (callback, transitionElement, waitForTransition = true) => {\n  if (!waitForTransition) {\n    execute(callback);\n    return;\n  }\n\n  const durationPadding = 5;\n  const emulatedDuration = getTransitionDurationFromElement(transitionElement) + durationPadding;\n  let called = false;\n\n  const handler = ({\n    target\n  }) => {\n    if (target !== transitionElement) {\n      return;\n    }\n\n    called = true;\n    transitionElement.removeEventListener(TRANSITION_END, handler);\n    execute(callback);\n  };\n\n  transitionElement.addEventListener(TRANSITION_END, handler);\n  setTimeout(() => {\n    if (!called) {\n      triggerTransitionEnd(transitionElement);\n    }\n  }, emulatedDuration);\n};\n/**\n * Return the previous/next element of a list.\n *\n * @param {array} list    The list of elements\n * @param activeElement   The active element\n * @param shouldGetNext   Choose to get next or previous element\n * @param isCycleAllowed\n * @return {Element|elem} The proper element\n */\n\n\nconst getNextActiveElement = (list, activeElement, shouldGetNext, isCycleAllowed) => {\n  let index = list.indexOf(activeElement); // if the element does not exist in the list return an element depending on the direction and if cycle is allowed\n\n  if (index === -1) {\n    return list[!shouldGetNext && isCycleAllowed ? list.length - 1 : 0];\n  }\n\n  const listLength = list.length;\n  index += shouldGetNext ? 1 : -1;\n\n  if (isCycleAllowed) {\n    index = (index + listLength) % listLength;\n  }\n\n  return list[Math.max(0, Math.min(index, listLength - 1))];\n};\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): dom/event-handler.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst namespaceRegex = /[^.]*(?=\\..*)\\.|.*/;\nconst stripNameRegex = /\\..*/;\nconst stripUidRegex = /::\\d+$/;\nconst eventRegistry = {}; // Events storage\n\nlet uidEvent = 1;\nconst customEvents = {\n  mouseenter: 'mouseover',\n  mouseleave: 'mouseout'\n};\nconst customEventsRegex = /^(mouseenter|mouseleave)/i;\nconst nativeEvents = new Set(['click', 'dblclick', 'mouseup', 'mousedown', 'contextmenu', 'mousewheel', 'DOMMouseScroll', 'mouseover', 'mouseout', 'mousemove', 'selectstart', 'selectend', 'keydown', 'keypress', 'keyup', 'orientationchange', 'touchstart', 'touchmove', 'touchend', 'touchcancel', 'pointerdown', 'pointermove', 'pointerup', 'pointerleave', 'pointercancel', 'gesturestart', 'gesturechange', 'gestureend', 'focus', 'blur', 'change', 'reset', 'select', 'submit', 'focusin', 'focusout', 'load', 'unload', 'beforeunload', 'resize', 'move', 'DOMContentLoaded', 'readystatechange', 'error', 'abort', 'scroll']);\n/**\n * ------------------------------------------------------------------------\n * Private methods\n * ------------------------------------------------------------------------\n */\n\nfunction getUidEvent(element, uid) {\n  return uid && `${uid}::${uidEvent++}` || element.uidEvent || uidEvent++;\n}\n\nfunction getEvent(element) {\n  const uid = getUidEvent(element);\n  element.uidEvent = uid;\n  eventRegistry[uid] = eventRegistry[uid] || {};\n  return eventRegistry[uid];\n}\n\nfunction bootstrapHandler(element, fn) {\n  return function handler(event) {\n    event.delegateTarget = element;\n\n    if (handler.oneOff) {\n      EventHandler.off(element, event.type, fn);\n    }\n\n    return fn.apply(element, [event]);\n  };\n}\n\nfunction bootstrapDelegationHandler(element, selector, fn) {\n  return function handler(event) {\n    const domElements = element.querySelectorAll(selector);\n\n    for (let {\n      target\n    } = event; target && target !== this; target = target.parentNode) {\n      for (let i = domElements.length; i--;) {\n        if (domElements[i] === target) {\n          event.delegateTarget = target;\n\n          if (handler.oneOff) {\n            // eslint-disable-next-line unicorn/consistent-destructuring\n            EventHandler.off(element, event.type, selector, fn);\n          }\n\n          return fn.apply(target, [event]);\n        }\n      }\n    } // To please ESLint\n\n\n    return null;\n  };\n}\n\nfunction findHandler(events, handler, delegationSelector = null) {\n  const uidEventList = Object.keys(events);\n\n  for (let i = 0, len = uidEventList.length; i < len; i++) {\n    const event = events[uidEventList[i]];\n\n    if (event.originalHandler === handler && event.delegationSelector === delegationSelector) {\n      return event;\n    }\n  }\n\n  return null;\n}\n\nfunction normalizeParams(originalTypeEvent, handler, delegationFn) {\n  const delegation = typeof handler === 'string';\n  const originalHandler = delegation ? delegationFn : handler;\n  let typeEvent = getTypeEvent(originalTypeEvent);\n  const isNative = nativeEvents.has(typeEvent);\n\n  if (!isNative) {\n    typeEvent = originalTypeEvent;\n  }\n\n  return [delegation, originalHandler, typeEvent];\n}\n\nfunction addHandler(element, originalTypeEvent, handler, delegationFn, oneOff) {\n  if (typeof originalTypeEvent !== 'string' || !element) {\n    return;\n  }\n\n  if (!handler) {\n    handler = delegationFn;\n    delegationFn = null;\n  } // in case of mouseenter or mouseleave wrap the handler within a function that checks for its DOM position\n  // this prevents the handler from being dispatched the same way as mouseover or mouseout does\n\n\n  if (customEventsRegex.test(originalTypeEvent)) {\n    const wrapFn = fn => {\n      return function (event) {\n        if (!event.relatedTarget || event.relatedTarget !== event.delegateTarget && !event.delegateTarget.contains(event.relatedTarget)) {\n          return fn.call(this, event);\n        }\n      };\n    };\n\n    if (delegationFn) {\n      delegationFn = wrapFn(delegationFn);\n    } else {\n      handler = wrapFn(handler);\n    }\n  }\n\n  const [delegation, originalHandler, typeEvent] = normalizeParams(originalTypeEvent, handler, delegationFn);\n  const events = getEvent(element);\n  const handlers = events[typeEvent] || (events[typeEvent] = {});\n  const previousFn = findHandler(handlers, originalHandler, delegation ? handler : null);\n\n  if (previousFn) {\n    previousFn.oneOff = previousFn.oneOff && oneOff;\n    return;\n  }\n\n  const uid = getUidEvent(originalHandler, originalTypeEvent.replace(namespaceRegex, ''));\n  const fn = delegation ? bootstrapDelegationHandler(element, handler, delegationFn) : bootstrapHandler(element, handler);\n  fn.delegationSelector = delegation ? handler : null;\n  fn.originalHandler = originalHandler;\n  fn.oneOff = oneOff;\n  fn.uidEvent = uid;\n  handlers[uid] = fn;\n  element.addEventListener(typeEvent, fn, delegation);\n}\n\nfunction removeHandler(element, events, typeEvent, handler, delegationSelector) {\n  const fn = findHandler(events[typeEvent], handler, delegationSelector);\n\n  if (!fn) {\n    return;\n  }\n\n  element.removeEventListener(typeEvent, fn, Boolean(delegationSelector));\n  delete events[typeEvent][fn.uidEvent];\n}\n\nfunction removeNamespacedHandlers(element, events, typeEvent, namespace) {\n  const storeElementEvent = events[typeEvent] || {};\n  Object.keys(storeElementEvent).forEach(handlerKey => {\n    if (handlerKey.includes(namespace)) {\n      const event = storeElementEvent[handlerKey];\n      removeHandler(element, events, typeEvent, event.originalHandler, event.delegationSelector);\n    }\n  });\n}\n\nfunction getTypeEvent(event) {\n  // allow to get the native events from namespaced events ('click.bs.button' --> 'click')\n  event = event.replace(stripNameRegex, '');\n  return customEvents[event] || event;\n}\n\nconst EventHandler = {\n  on(element, event, handler, delegationFn) {\n    addHandler(element, event, handler, delegationFn, false);\n  },\n\n  one(element, event, handler, delegationFn) {\n    addHandler(element, event, handler, delegationFn, true);\n  },\n\n  off(element, originalTypeEvent, handler, delegationFn) {\n    if (typeof originalTypeEvent !== 'string' || !element) {\n      return;\n    }\n\n    const [delegation, originalHandler, typeEvent] = normalizeParams(originalTypeEvent, handler, delegationFn);\n    const inNamespace = typeEvent !== originalTypeEvent;\n    const events = getEvent(element);\n    const isNamespace = originalTypeEvent.startsWith('.');\n\n    if (typeof originalHandler !== 'undefined') {\n      // Simplest case: handler is passed, remove that listener ONLY.\n      if (!events || !events[typeEvent]) {\n        return;\n      }\n\n      removeHandler(element, events, typeEvent, originalHandler, delegation ? handler : null);\n      return;\n    }\n\n    if (isNamespace) {\n      Object.keys(events).forEach(elementEvent => {\n        removeNamespacedHandlers(element, events, elementEvent, originalTypeEvent.slice(1));\n      });\n    }\n\n    const storeElementEvent = events[typeEvent] || {};\n    Object.keys(storeElementEvent).forEach(keyHandlers => {\n      const handlerKey = keyHandlers.replace(stripUidRegex, '');\n\n      if (!inNamespace || originalTypeEvent.includes(handlerKey)) {\n        const event = storeElementEvent[keyHandlers];\n        removeHandler(element, events, typeEvent, event.originalHandler, event.delegationSelector);\n      }\n    });\n  },\n\n  trigger(element, event, args) {\n    if (typeof event !== 'string' || !element) {\n      return null;\n    }\n\n    const $ = getjQuery();\n    const typeEvent = getTypeEvent(event);\n    const inNamespace = event !== typeEvent;\n    const isNative = nativeEvents.has(typeEvent);\n    let jQueryEvent;\n    let bubbles = true;\n    let nativeDispatch = true;\n    let defaultPrevented = false;\n    let evt = null;\n\n    if (inNamespace && $) {\n      jQueryEvent = $.Event(event, args);\n      $(element).trigger(jQueryEvent);\n      bubbles = !jQueryEvent.isPropagationStopped();\n      nativeDispatch = !jQueryEvent.isImmediatePropagationStopped();\n      defaultPrevented = jQueryEvent.isDefaultPrevented();\n    }\n\n    if (isNative) {\n      evt = document.createEvent('HTMLEvents');\n      evt.initEvent(typeEvent, bubbles, true);\n    } else {\n      evt = new CustomEvent(event, {\n        bubbles,\n        cancelable: true\n      });\n    } // merge custom information in our event\n\n\n    if (typeof args !== 'undefined') {\n      Object.keys(args).forEach(key => {\n        Object.defineProperty(evt, key, {\n          get() {\n            return args[key];\n          }\n\n        });\n      });\n    }\n\n    if (defaultPrevented) {\n      evt.preventDefault();\n    }\n\n    if (nativeDispatch) {\n      element.dispatchEvent(evt);\n    }\n\n    if (evt.defaultPrevented && typeof jQueryEvent !== 'undefined') {\n      jQueryEvent.preventDefault();\n    }\n\n    return evt;\n  }\n\n};\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): dom/data.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\nconst elementMap = new Map();\nvar Data = {\n  set(element, key, instance) {\n    if (!elementMap.has(element)) {\n      elementMap.set(element, new Map());\n    }\n\n    const instanceMap = elementMap.get(element); // make it clear we only want one instance per element\n    // can be removed later when multiple key/instances are fine to be used\n\n    if (!instanceMap.has(key) && instanceMap.size !== 0) {\n      // eslint-disable-next-line no-console\n      console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(instanceMap.keys())[0]}.`);\n      return;\n    }\n\n    instanceMap.set(key, instance);\n  },\n\n  get(element, key) {\n    if (elementMap.has(element)) {\n      return elementMap.get(element).get(key) || null;\n    }\n\n    return null;\n  },\n\n  remove(element, key) {\n    if (!elementMap.has(element)) {\n      return;\n    }\n\n    const instanceMap = elementMap.get(element);\n    instanceMap.delete(key); // free up element references if there are no instances left for an element\n\n    if (instanceMap.size === 0) {\n      elementMap.delete(element);\n    }\n  }\n\n};\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): base-component.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst VERSION = '5.0.2';\n\nclass BaseComponent {\n  constructor(element) {\n    element = getElement(element);\n\n    if (!element) {\n      return;\n    }\n\n    this._element = element;\n    Data.set(this._element, this.constructor.DATA_KEY, this);\n  }\n\n  dispose() {\n    Data.remove(this._element, this.constructor.DATA_KEY);\n    EventHandler.off(this._element, this.constructor.EVENT_KEY);\n    Object.getOwnPropertyNames(this).forEach(propertyName => {\n      this[propertyName] = null;\n    });\n  }\n\n  _queueCallback(callback, element, isAnimated = true) {\n    executeAfterTransition(callback, element, isAnimated);\n  }\n  /** Static */\n\n\n  static getInstance(element) {\n    return Data.get(element, this.DATA_KEY);\n  }\n\n  static getOrCreateInstance(element, config = {}) {\n    return this.getInstance(element) || new this(element, typeof config === 'object' ? config : null);\n  }\n\n  static get VERSION() {\n    return VERSION;\n  }\n\n  static get NAME() {\n    throw new Error('You have to implement the static method \"NAME\", for each component!');\n  }\n\n  static get DATA_KEY() {\n    return `bs.${this.NAME}`;\n  }\n\n  static get EVENT_KEY() {\n    return `.${this.DATA_KEY}`;\n  }\n\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): alert.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$c = 'alert';\nconst DATA_KEY$b = 'bs.alert';\nconst EVENT_KEY$b = `.${DATA_KEY$b}`;\nconst DATA_API_KEY$8 = '.data-api';\nconst SELECTOR_DISMISS = '[data-bs-dismiss=\"alert\"]';\nconst EVENT_CLOSE = `close${EVENT_KEY$b}`;\nconst EVENT_CLOSED = `closed${EVENT_KEY$b}`;\nconst EVENT_CLICK_DATA_API$7 = `click${EVENT_KEY$b}${DATA_API_KEY$8}`;\nconst CLASS_NAME_ALERT = 'alert';\nconst CLASS_NAME_FADE$6 = 'fade';\nconst CLASS_NAME_SHOW$9 = 'show';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Alert extends BaseComponent {\n  // Getters\n  static get NAME() {\n    return NAME$c;\n  } // Public\n\n\n  close(element) {\n    const rootElement = element ? this._getRootElement(element) : this._element;\n\n    const customEvent = this._triggerCloseEvent(rootElement);\n\n    if (customEvent === null || customEvent.defaultPrevented) {\n      return;\n    }\n\n    this._removeElement(rootElement);\n  } // Private\n\n\n  _getRootElement(element) {\n    return getElementFromSelector(element) || element.closest(`.${CLASS_NAME_ALERT}`);\n  }\n\n  _triggerCloseEvent(element) {\n    return EventHandler.trigger(element, EVENT_CLOSE);\n  }\n\n  _removeElement(element) {\n    element.classList.remove(CLASS_NAME_SHOW$9);\n    const isAnimated = element.classList.contains(CLASS_NAME_FADE$6);\n\n    this._queueCallback(() => this._destroyElement(element), element, isAnimated);\n  }\n\n  _destroyElement(element) {\n    element.remove();\n    EventHandler.trigger(element, EVENT_CLOSED);\n  } // Static\n\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Alert.getOrCreateInstance(this);\n\n      if (config === 'close') {\n        data[config](this);\n      }\n    });\n  }\n\n  static handleDismiss(alertInstance) {\n    return function (event) {\n      if (event) {\n        event.preventDefault();\n      }\n\n      alertInstance.close(this);\n    };\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$7, SELECTOR_DISMISS, Alert.handleDismiss(new Alert()));\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Alert to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Alert);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): button.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$b = 'button';\nconst DATA_KEY$a = 'bs.button';\nconst EVENT_KEY$a = `.${DATA_KEY$a}`;\nconst DATA_API_KEY$7 = '.data-api';\nconst CLASS_NAME_ACTIVE$3 = 'active';\nconst SELECTOR_DATA_TOGGLE$5 = '[data-bs-toggle=\"button\"]';\nconst EVENT_CLICK_DATA_API$6 = `click${EVENT_KEY$a}${DATA_API_KEY$7}`;\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Button extends BaseComponent {\n  // Getters\n  static get NAME() {\n    return NAME$b;\n  } // Public\n\n\n  toggle() {\n    // Toggle class and sync the `aria-pressed` attribute with the return value of the `.toggle()` method\n    this._element.setAttribute('aria-pressed', this._element.classList.toggle(CLASS_NAME_ACTIVE$3));\n  } // Static\n\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Button.getOrCreateInstance(this);\n\n      if (config === 'toggle') {\n        data[config]();\n      }\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$6, SELECTOR_DATA_TOGGLE$5, event => {\n  event.preventDefault();\n  const button = event.target.closest(SELECTOR_DATA_TOGGLE$5);\n  const data = Button.getOrCreateInstance(button);\n  data.toggle();\n});\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Button to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Button);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): dom/manipulator.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\nfunction normalizeData(val) {\n  if (val === 'true') {\n    return true;\n  }\n\n  if (val === 'false') {\n    return false;\n  }\n\n  if (val === Number(val).toString()) {\n    return Number(val);\n  }\n\n  if (val === '' || val === 'null') {\n    return null;\n  }\n\n  return val;\n}\n\nfunction normalizeDataKey(key) {\n  return key.replace(/[A-Z]/g, chr => `-${chr.toLowerCase()}`);\n}\n\nconst Manipulator = {\n  setDataAttribute(element, key, value) {\n    element.setAttribute(`data-bs-${normalizeDataKey(key)}`, value);\n  },\n\n  removeDataAttribute(element, key) {\n    element.removeAttribute(`data-bs-${normalizeDataKey(key)}`);\n  },\n\n  getDataAttributes(element) {\n    if (!element) {\n      return {};\n    }\n\n    const attributes = {};\n    Object.keys(element.dataset).filter(key => key.startsWith('bs')).forEach(key => {\n      let pureKey = key.replace(/^bs/, '');\n      pureKey = pureKey.charAt(0).toLowerCase() + pureKey.slice(1, pureKey.length);\n      attributes[pureKey] = normalizeData(element.dataset[key]);\n    });\n    return attributes;\n  },\n\n  getDataAttribute(element, key) {\n    return normalizeData(element.getAttribute(`data-bs-${normalizeDataKey(key)}`));\n  },\n\n  offset(element) {\n    const rect = element.getBoundingClientRect();\n    return {\n      top: rect.top + document.body.scrollTop,\n      left: rect.left + document.body.scrollLeft\n    };\n  },\n\n  position(element) {\n    return {\n      top: element.offsetTop,\n      left: element.offsetLeft\n    };\n  }\n\n};\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): carousel.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$a = 'carousel';\nconst DATA_KEY$9 = 'bs.carousel';\nconst EVENT_KEY$9 = `.${DATA_KEY$9}`;\nconst DATA_API_KEY$6 = '.data-api';\nconst ARROW_LEFT_KEY = 'ArrowLeft';\nconst ARROW_RIGHT_KEY = 'ArrowRight';\nconst TOUCHEVENT_COMPAT_WAIT = 500; // Time for mouse compat events to fire after touch\n\nconst SWIPE_THRESHOLD = 40;\nconst Default$9 = {\n  interval: 5000,\n  keyboard: true,\n  slide: false,\n  pause: 'hover',\n  wrap: true,\n  touch: true\n};\nconst DefaultType$9 = {\n  interval: '(number|boolean)',\n  keyboard: 'boolean',\n  slide: '(boolean|string)',\n  pause: '(string|boolean)',\n  wrap: 'boolean',\n  touch: 'boolean'\n};\nconst ORDER_NEXT = 'next';\nconst ORDER_PREV = 'prev';\nconst DIRECTION_LEFT = 'left';\nconst DIRECTION_RIGHT = 'right';\nconst KEY_TO_DIRECTION = {\n  [ARROW_LEFT_KEY]: DIRECTION_RIGHT,\n  [ARROW_RIGHT_KEY]: DIRECTION_LEFT\n};\nconst EVENT_SLIDE = `slide${EVENT_KEY$9}`;\nconst EVENT_SLID = `slid${EVENT_KEY$9}`;\nconst EVENT_KEYDOWN = `keydown${EVENT_KEY$9}`;\nconst EVENT_MOUSEENTER = `mouseenter${EVENT_KEY$9}`;\nconst EVENT_MOUSELEAVE = `mouseleave${EVENT_KEY$9}`;\nconst EVENT_TOUCHSTART = `touchstart${EVENT_KEY$9}`;\nconst EVENT_TOUCHMOVE = `touchmove${EVENT_KEY$9}`;\nconst EVENT_TOUCHEND = `touchend${EVENT_KEY$9}`;\nconst EVENT_POINTERDOWN = `pointerdown${EVENT_KEY$9}`;\nconst EVENT_POINTERUP = `pointerup${EVENT_KEY$9}`;\nconst EVENT_DRAG_START = `dragstart${EVENT_KEY$9}`;\nconst EVENT_LOAD_DATA_API$2 = `load${EVENT_KEY$9}${DATA_API_KEY$6}`;\nconst EVENT_CLICK_DATA_API$5 = `click${EVENT_KEY$9}${DATA_API_KEY$6}`;\nconst CLASS_NAME_CAROUSEL = 'carousel';\nconst CLASS_NAME_ACTIVE$2 = 'active';\nconst CLASS_NAME_SLIDE = 'slide';\nconst CLASS_NAME_END = 'carousel-item-end';\nconst CLASS_NAME_START = 'carousel-item-start';\nconst CLASS_NAME_NEXT = 'carousel-item-next';\nconst CLASS_NAME_PREV = 'carousel-item-prev';\nconst CLASS_NAME_POINTER_EVENT = 'pointer-event';\nconst SELECTOR_ACTIVE$1 = '.active';\nconst SELECTOR_ACTIVE_ITEM = '.active.carousel-item';\nconst SELECTOR_ITEM = '.carousel-item';\nconst SELECTOR_ITEM_IMG = '.carousel-item img';\nconst SELECTOR_NEXT_PREV = '.carousel-item-next, .carousel-item-prev';\nconst SELECTOR_INDICATORS = '.carousel-indicators';\nconst SELECTOR_INDICATOR = '[data-bs-target]';\nconst SELECTOR_DATA_SLIDE = '[data-bs-slide], [data-bs-slide-to]';\nconst SELECTOR_DATA_RIDE = '[data-bs-ride=\"carousel\"]';\nconst POINTER_TYPE_TOUCH = 'touch';\nconst POINTER_TYPE_PEN = 'pen';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Carousel extends BaseComponent {\n  constructor(element, config) {\n    super(element);\n    this._items = null;\n    this._interval = null;\n    this._activeElement = null;\n    this._isPaused = false;\n    this._isSliding = false;\n    this.touchTimeout = null;\n    this.touchStartX = 0;\n    this.touchDeltaX = 0;\n    this._config = this._getConfig(config);\n    this._indicatorsElement = SelectorEngine.findOne(SELECTOR_INDICATORS, this._element);\n    this._touchSupported = 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0;\n    this._pointerEvent = Boolean(window.PointerEvent);\n\n    this._addEventListeners();\n  } // Getters\n\n\n  static get Default() {\n    return Default$9;\n  }\n\n  static get NAME() {\n    return NAME$a;\n  } // Public\n\n\n  next() {\n    this._slide(ORDER_NEXT);\n  }\n\n  nextWhenVisible() {\n    // Don't call next when the page isn't visible\n    // or the carousel or its parent isn't visible\n    if (!document.hidden && isVisible(this._element)) {\n      this.next();\n    }\n  }\n\n  prev() {\n    this._slide(ORDER_PREV);\n  }\n\n  pause(event) {\n    if (!event) {\n      this._isPaused = true;\n    }\n\n    if (SelectorEngine.findOne(SELECTOR_NEXT_PREV, this._element)) {\n      triggerTransitionEnd(this._element);\n      this.cycle(true);\n    }\n\n    clearInterval(this._interval);\n    this._interval = null;\n  }\n\n  cycle(event) {\n    if (!event) {\n      this._isPaused = false;\n    }\n\n    if (this._interval) {\n      clearInterval(this._interval);\n      this._interval = null;\n    }\n\n    if (this._config && this._config.interval && !this._isPaused) {\n      this._updateInterval();\n\n      this._interval = setInterval((document.visibilityState ? this.nextWhenVisible : this.next).bind(this), this._config.interval);\n    }\n  }\n\n  to(index) {\n    this._activeElement = SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element);\n\n    const activeIndex = this._getItemIndex(this._activeElement);\n\n    if (index > this._items.length - 1 || index < 0) {\n      return;\n    }\n\n    if (this._isSliding) {\n      EventHandler.one(this._element, EVENT_SLID, () => this.to(index));\n      return;\n    }\n\n    if (activeIndex === index) {\n      this.pause();\n      this.cycle();\n      return;\n    }\n\n    const order = index > activeIndex ? ORDER_NEXT : ORDER_PREV;\n\n    this._slide(order, this._items[index]);\n  } // Private\n\n\n  _getConfig(config) {\n    config = { ...Default$9,\n      ...Manipulator.getDataAttributes(this._element),\n      ...(typeof config === 'object' ? config : {})\n    };\n    typeCheckConfig(NAME$a, config, DefaultType$9);\n    return config;\n  }\n\n  _handleSwipe() {\n    const absDeltax = Math.abs(this.touchDeltaX);\n\n    if (absDeltax <= SWIPE_THRESHOLD) {\n      return;\n    }\n\n    const direction = absDeltax / this.touchDeltaX;\n    this.touchDeltaX = 0;\n\n    if (!direction) {\n      return;\n    }\n\n    this._slide(direction > 0 ? DIRECTION_RIGHT : DIRECTION_LEFT);\n  }\n\n  _addEventListeners() {\n    if (this._config.keyboard) {\n      EventHandler.on(this._element, EVENT_KEYDOWN, event => this._keydown(event));\n    }\n\n    if (this._config.pause === 'hover') {\n      EventHandler.on(this._element, EVENT_MOUSEENTER, event => this.pause(event));\n      EventHandler.on(this._element, EVENT_MOUSELEAVE, event => this.cycle(event));\n    }\n\n    if (this._config.touch && this._touchSupported) {\n      this._addTouchEventListeners();\n    }\n  }\n\n  _addTouchEventListeners() {\n    const start = event => {\n      if (this._pointerEvent && (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH)) {\n        this.touchStartX = event.clientX;\n      } else if (!this._pointerEvent) {\n        this.touchStartX = event.touches[0].clientX;\n      }\n    };\n\n    const move = event => {\n      // ensure swiping with one touch and not pinching\n      this.touchDeltaX = event.touches && event.touches.length > 1 ? 0 : event.touches[0].clientX - this.touchStartX;\n    };\n\n    const end = event => {\n      if (this._pointerEvent && (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH)) {\n        this.touchDeltaX = event.clientX - this.touchStartX;\n      }\n\n      this._handleSwipe();\n\n      if (this._config.pause === 'hover') {\n        // If it's a touch-enabled device, mouseenter/leave are fired as\n        // part of the mouse compatibility events on first tap - the carousel\n        // would stop cycling until user tapped out of it;\n        // here, we listen for touchend, explicitly pause the carousel\n        // (as if it's the second time we tap on it, mouseenter compat event\n        // is NOT fired) and after a timeout (to allow for mouse compatibility\n        // events to fire) we explicitly restart cycling\n        this.pause();\n\n        if (this.touchTimeout) {\n          clearTimeout(this.touchTimeout);\n        }\n\n        this.touchTimeout = setTimeout(event => this.cycle(event), TOUCHEVENT_COMPAT_WAIT + this._config.interval);\n      }\n    };\n\n    SelectorEngine.find(SELECTOR_ITEM_IMG, this._element).forEach(itemImg => {\n      EventHandler.on(itemImg, EVENT_DRAG_START, e => e.preventDefault());\n    });\n\n    if (this._pointerEvent) {\n      EventHandler.on(this._element, EVENT_POINTERDOWN, event => start(event));\n      EventHandler.on(this._element, EVENT_POINTERUP, event => end(event));\n\n      this._element.classList.add(CLASS_NAME_POINTER_EVENT);\n    } else {\n      EventHandler.on(this._element, EVENT_TOUCHSTART, event => start(event));\n      EventHandler.on(this._element, EVENT_TOUCHMOVE, event => move(event));\n      EventHandler.on(this._element, EVENT_TOUCHEND, event => end(event));\n    }\n  }\n\n  _keydown(event) {\n    if (/input|textarea/i.test(event.target.tagName)) {\n      return;\n    }\n\n    const direction = KEY_TO_DIRECTION[event.key];\n\n    if (direction) {\n      event.preventDefault();\n\n      this._slide(direction);\n    }\n  }\n\n  _getItemIndex(element) {\n    this._items = element && element.parentNode ? SelectorEngine.find(SELECTOR_ITEM, element.parentNode) : [];\n    return this._items.indexOf(element);\n  }\n\n  _getItemByOrder(order, activeElement) {\n    const isNext = order === ORDER_NEXT;\n    return getNextActiveElement(this._items, activeElement, isNext, this._config.wrap);\n  }\n\n  _triggerSlideEvent(relatedTarget, eventDirectionName) {\n    const targetIndex = this._getItemIndex(relatedTarget);\n\n    const fromIndex = this._getItemIndex(SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element));\n\n    return EventHandler.trigger(this._element, EVENT_SLIDE, {\n      relatedTarget,\n      direction: eventDirectionName,\n      from: fromIndex,\n      to: targetIndex\n    });\n  }\n\n  _setActiveIndicatorElement(element) {\n    if (this._indicatorsElement) {\n      const activeIndicator = SelectorEngine.findOne(SELECTOR_ACTIVE$1, this._indicatorsElement);\n      activeIndicator.classList.remove(CLASS_NAME_ACTIVE$2);\n      activeIndicator.removeAttribute('aria-current');\n      const indicators = SelectorEngine.find(SELECTOR_INDICATOR, this._indicatorsElement);\n\n      for (let i = 0; i < indicators.length; i++) {\n        if (Number.parseInt(indicators[i].getAttribute('data-bs-slide-to'), 10) === this._getItemIndex(element)) {\n          indicators[i].classList.add(CLASS_NAME_ACTIVE$2);\n          indicators[i].setAttribute('aria-current', 'true');\n          break;\n        }\n      }\n    }\n  }\n\n  _updateInterval() {\n    const element = this._activeElement || SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element);\n\n    if (!element) {\n      return;\n    }\n\n    const elementInterval = Number.parseInt(element.getAttribute('data-bs-interval'), 10);\n\n    if (elementInterval) {\n      this._config.defaultInterval = this._config.defaultInterval || this._config.interval;\n      this._config.interval = elementInterval;\n    } else {\n      this._config.interval = this._config.defaultInterval || this._config.interval;\n    }\n  }\n\n  _slide(directionOrOrder, element) {\n    const order = this._directionToOrder(directionOrOrder);\n\n    const activeElement = SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element);\n\n    const activeElementIndex = this._getItemIndex(activeElement);\n\n    const nextElement = element || this._getItemByOrder(order, activeElement);\n\n    const nextElementIndex = this._getItemIndex(nextElement);\n\n    const isCycling = Boolean(this._interval);\n    const isNext = order === ORDER_NEXT;\n    const directionalClassName = isNext ? CLASS_NAME_START : CLASS_NAME_END;\n    const orderClassName = isNext ? CLASS_NAME_NEXT : CLASS_NAME_PREV;\n\n    const eventDirectionName = this._orderToDirection(order);\n\n    if (nextElement && nextElement.classList.contains(CLASS_NAME_ACTIVE$2)) {\n      this._isSliding = false;\n      return;\n    }\n\n    if (this._isSliding) {\n      return;\n    }\n\n    const slideEvent = this._triggerSlideEvent(nextElement, eventDirectionName);\n\n    if (slideEvent.defaultPrevented) {\n      return;\n    }\n\n    if (!activeElement || !nextElement) {\n      // Some weirdness is happening, so we bail\n      return;\n    }\n\n    this._isSliding = true;\n\n    if (isCycling) {\n      this.pause();\n    }\n\n    this._setActiveIndicatorElement(nextElement);\n\n    this._activeElement = nextElement;\n\n    const triggerSlidEvent = () => {\n      EventHandler.trigger(this._element, EVENT_SLID, {\n        relatedTarget: nextElement,\n        direction: eventDirectionName,\n        from: activeElementIndex,\n        to: nextElementIndex\n      });\n    };\n\n    if (this._element.classList.contains(CLASS_NAME_SLIDE)) {\n      nextElement.classList.add(orderClassName);\n      reflow(nextElement);\n      activeElement.classList.add(directionalClassName);\n      nextElement.classList.add(directionalClassName);\n\n      const completeCallBack = () => {\n        nextElement.classList.remove(directionalClassName, orderClassName);\n        nextElement.classList.add(CLASS_NAME_ACTIVE$2);\n        activeElement.classList.remove(CLASS_NAME_ACTIVE$2, orderClassName, directionalClassName);\n        this._isSliding = false;\n        setTimeout(triggerSlidEvent, 0);\n      };\n\n      this._queueCallback(completeCallBack, activeElement, true);\n    } else {\n      activeElement.classList.remove(CLASS_NAME_ACTIVE$2);\n      nextElement.classList.add(CLASS_NAME_ACTIVE$2);\n      this._isSliding = false;\n      triggerSlidEvent();\n    }\n\n    if (isCycling) {\n      this.cycle();\n    }\n  }\n\n  _directionToOrder(direction) {\n    if (![DIRECTION_RIGHT, DIRECTION_LEFT].includes(direction)) {\n      return direction;\n    }\n\n    if (isRTL()) {\n      return direction === DIRECTION_LEFT ? ORDER_PREV : ORDER_NEXT;\n    }\n\n    return direction === DIRECTION_LEFT ? ORDER_NEXT : ORDER_PREV;\n  }\n\n  _orderToDirection(order) {\n    if (![ORDER_NEXT, ORDER_PREV].includes(order)) {\n      return order;\n    }\n\n    if (isRTL()) {\n      return order === ORDER_PREV ? DIRECTION_LEFT : DIRECTION_RIGHT;\n    }\n\n    return order === ORDER_PREV ? DIRECTION_RIGHT : DIRECTION_LEFT;\n  } // Static\n\n\n  static carouselInterface(element, config) {\n    const data = Carousel.getOrCreateInstance(element, config);\n    let {\n      _config\n    } = data;\n\n    if (typeof config === 'object') {\n      _config = { ..._config,\n        ...config\n      };\n    }\n\n    const action = typeof config === 'string' ? config : _config.slide;\n\n    if (typeof config === 'number') {\n      data.to(config);\n    } else if (typeof action === 'string') {\n      if (typeof data[action] === 'undefined') {\n        throw new TypeError(`No method named \"${action}\"`);\n      }\n\n      data[action]();\n    } else if (_config.interval && _config.ride) {\n      data.pause();\n      data.cycle();\n    }\n  }\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      Carousel.carouselInterface(this, config);\n    });\n  }\n\n  static dataApiClickHandler(event) {\n    const target = getElementFromSelector(this);\n\n    if (!target || !target.classList.contains(CLASS_NAME_CAROUSEL)) {\n      return;\n    }\n\n    const config = { ...Manipulator.getDataAttributes(target),\n      ...Manipulator.getDataAttributes(this)\n    };\n    const slideIndex = this.getAttribute('data-bs-slide-to');\n\n    if (slideIndex) {\n      config.interval = false;\n    }\n\n    Carousel.carouselInterface(target, config);\n\n    if (slideIndex) {\n      Carousel.getInstance(target).to(slideIndex);\n    }\n\n    event.preventDefault();\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$5, SELECTOR_DATA_SLIDE, Carousel.dataApiClickHandler);\nEventHandler.on(window, EVENT_LOAD_DATA_API$2, () => {\n  const carousels = SelectorEngine.find(SELECTOR_DATA_RIDE);\n\n  for (let i = 0, len = carousels.length; i < len; i++) {\n    Carousel.carouselInterface(carousels[i], Carousel.getInstance(carousels[i]));\n  }\n});\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Carousel to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Carousel);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): collapse.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$9 = 'collapse';\nconst DATA_KEY$8 = 'bs.collapse';\nconst EVENT_KEY$8 = `.${DATA_KEY$8}`;\nconst DATA_API_KEY$5 = '.data-api';\nconst Default$8 = {\n  toggle: true,\n  parent: ''\n};\nconst DefaultType$8 = {\n  toggle: 'boolean',\n  parent: '(string|element)'\n};\nconst EVENT_SHOW$5 = `show${EVENT_KEY$8}`;\nconst EVENT_SHOWN$5 = `shown${EVENT_KEY$8}`;\nconst EVENT_HIDE$5 = `hide${EVENT_KEY$8}`;\nconst EVENT_HIDDEN$5 = `hidden${EVENT_KEY$8}`;\nconst EVENT_CLICK_DATA_API$4 = `click${EVENT_KEY$8}${DATA_API_KEY$5}`;\nconst CLASS_NAME_SHOW$8 = 'show';\nconst CLASS_NAME_COLLAPSE = 'collapse';\nconst CLASS_NAME_COLLAPSING = 'collapsing';\nconst CLASS_NAME_COLLAPSED = 'collapsed';\nconst WIDTH = 'width';\nconst HEIGHT = 'height';\nconst SELECTOR_ACTIVES = '.show, .collapsing';\nconst SELECTOR_DATA_TOGGLE$4 = '[data-bs-toggle=\"collapse\"]';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Collapse extends BaseComponent {\n  constructor(element, config) {\n    super(element);\n    this._isTransitioning = false;\n    this._config = this._getConfig(config);\n    this._triggerArray = SelectorEngine.find(`${SELECTOR_DATA_TOGGLE$4}[href=\"#${this._element.id}\"],` + `${SELECTOR_DATA_TOGGLE$4}[data-bs-target=\"#${this._element.id}\"]`);\n    const toggleList = SelectorEngine.find(SELECTOR_DATA_TOGGLE$4);\n\n    for (let i = 0, len = toggleList.length; i < len; i++) {\n      const elem = toggleList[i];\n      const selector = getSelectorFromElement(elem);\n      const filterElement = SelectorEngine.find(selector).filter(foundElem => foundElem === this._element);\n\n      if (selector !== null && filterElement.length) {\n        this._selector = selector;\n\n        this._triggerArray.push(elem);\n      }\n    }\n\n    this._parent = this._config.parent ? this._getParent() : null;\n\n    if (!this._config.parent) {\n      this._addAriaAndCollapsedClass(this._element, this._triggerArray);\n    }\n\n    if (this._config.toggle) {\n      this.toggle();\n    }\n  } // Getters\n\n\n  static get Default() {\n    return Default$8;\n  }\n\n  static get NAME() {\n    return NAME$9;\n  } // Public\n\n\n  toggle() {\n    if (this._element.classList.contains(CLASS_NAME_SHOW$8)) {\n      this.hide();\n    } else {\n      this.show();\n    }\n  }\n\n  show() {\n    if (this._isTransitioning || this._element.classList.contains(CLASS_NAME_SHOW$8)) {\n      return;\n    }\n\n    let actives;\n    let activesData;\n\n    if (this._parent) {\n      actives = SelectorEngine.find(SELECTOR_ACTIVES, this._parent).filter(elem => {\n        if (typeof this._config.parent === 'string') {\n          return elem.getAttribute('data-bs-parent') === this._config.parent;\n        }\n\n        return elem.classList.contains(CLASS_NAME_COLLAPSE);\n      });\n\n      if (actives.length === 0) {\n        actives = null;\n      }\n    }\n\n    const container = SelectorEngine.findOne(this._selector);\n\n    if (actives) {\n      const tempActiveData = actives.find(elem => container !== elem);\n      activesData = tempActiveData ? Collapse.getInstance(tempActiveData) : null;\n\n      if (activesData && activesData._isTransitioning) {\n        return;\n      }\n    }\n\n    const startEvent = EventHandler.trigger(this._element, EVENT_SHOW$5);\n\n    if (startEvent.defaultPrevented) {\n      return;\n    }\n\n    if (actives) {\n      actives.forEach(elemActive => {\n        if (container !== elemActive) {\n          Collapse.collapseInterface(elemActive, 'hide');\n        }\n\n        if (!activesData) {\n          Data.set(elemActive, DATA_KEY$8, null);\n        }\n      });\n    }\n\n    const dimension = this._getDimension();\n\n    this._element.classList.remove(CLASS_NAME_COLLAPSE);\n\n    this._element.classList.add(CLASS_NAME_COLLAPSING);\n\n    this._element.style[dimension] = 0;\n\n    if (this._triggerArray.length) {\n      this._triggerArray.forEach(element => {\n        element.classList.remove(CLASS_NAME_COLLAPSED);\n        element.setAttribute('aria-expanded', true);\n      });\n    }\n\n    this.setTransitioning(true);\n\n    const complete = () => {\n      this._element.classList.remove(CLASS_NAME_COLLAPSING);\n\n      this._element.classList.add(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$8);\n\n      this._element.style[dimension] = '';\n      this.setTransitioning(false);\n      EventHandler.trigger(this._element, EVENT_SHOWN$5);\n    };\n\n    const capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1);\n    const scrollSize = `scroll${capitalizedDimension}`;\n\n    this._queueCallback(complete, this._element, true);\n\n    this._element.style[dimension] = `${this._element[scrollSize]}px`;\n  }\n\n  hide() {\n    if (this._isTransitioning || !this._element.classList.contains(CLASS_NAME_SHOW$8)) {\n      return;\n    }\n\n    const startEvent = EventHandler.trigger(this._element, EVENT_HIDE$5);\n\n    if (startEvent.defaultPrevented) {\n      return;\n    }\n\n    const dimension = this._getDimension();\n\n    this._element.style[dimension] = `${this._element.getBoundingClientRect()[dimension]}px`;\n    reflow(this._element);\n\n    this._element.classList.add(CLASS_NAME_COLLAPSING);\n\n    this._element.classList.remove(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$8);\n\n    const triggerArrayLength = this._triggerArray.length;\n\n    if (triggerArrayLength > 0) {\n      for (let i = 0; i < triggerArrayLength; i++) {\n        const trigger = this._triggerArray[i];\n        const elem = getElementFromSelector(trigger);\n\n        if (elem && !elem.classList.contains(CLASS_NAME_SHOW$8)) {\n          trigger.classList.add(CLASS_NAME_COLLAPSED);\n          trigger.setAttribute('aria-expanded', false);\n        }\n      }\n    }\n\n    this.setTransitioning(true);\n\n    const complete = () => {\n      this.setTransitioning(false);\n\n      this._element.classList.remove(CLASS_NAME_COLLAPSING);\n\n      this._element.classList.add(CLASS_NAME_COLLAPSE);\n\n      EventHandler.trigger(this._element, EVENT_HIDDEN$5);\n    };\n\n    this._element.style[dimension] = '';\n\n    this._queueCallback(complete, this._element, true);\n  }\n\n  setTransitioning(isTransitioning) {\n    this._isTransitioning = isTransitioning;\n  } // Private\n\n\n  _getConfig(config) {\n    config = { ...Default$8,\n      ...config\n    };\n    config.toggle = Boolean(config.toggle); // Coerce string values\n\n    typeCheckConfig(NAME$9, config, DefaultType$8);\n    return config;\n  }\n\n  _getDimension() {\n    return this._element.classList.contains(WIDTH) ? WIDTH : HEIGHT;\n  }\n\n  _getParent() {\n    let {\n      parent\n    } = this._config;\n    parent = getElement(parent);\n    const selector = `${SELECTOR_DATA_TOGGLE$4}[data-bs-parent=\"${parent}\"]`;\n    SelectorEngine.find(selector, parent).forEach(element => {\n      const selected = getElementFromSelector(element);\n\n      this._addAriaAndCollapsedClass(selected, [element]);\n    });\n    return parent;\n  }\n\n  _addAriaAndCollapsedClass(element, triggerArray) {\n    if (!element || !triggerArray.length) {\n      return;\n    }\n\n    const isOpen = element.classList.contains(CLASS_NAME_SHOW$8);\n    triggerArray.forEach(elem => {\n      if (isOpen) {\n        elem.classList.remove(CLASS_NAME_COLLAPSED);\n      } else {\n        elem.classList.add(CLASS_NAME_COLLAPSED);\n      }\n\n      elem.setAttribute('aria-expanded', isOpen);\n    });\n  } // Static\n\n\n  static collapseInterface(element, config) {\n    let data = Collapse.getInstance(element);\n    const _config = { ...Default$8,\n      ...Manipulator.getDataAttributes(element),\n      ...(typeof config === 'object' && config ? config : {})\n    };\n\n    if (!data && _config.toggle && typeof config === 'string' && /show|hide/.test(config)) {\n      _config.toggle = false;\n    }\n\n    if (!data) {\n      data = new Collapse(element, _config);\n    }\n\n    if (typeof config === 'string') {\n      if (typeof data[config] === 'undefined') {\n        throw new TypeError(`No method named \"${config}\"`);\n      }\n\n      data[config]();\n    }\n  }\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      Collapse.collapseInterface(this, config);\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$4, SELECTOR_DATA_TOGGLE$4, function (event) {\n  // preventDefault only for <a> elements (which change the URL) not inside the collapsible element\n  if (event.target.tagName === 'A' || event.delegateTarget && event.delegateTarget.tagName === 'A') {\n    event.preventDefault();\n  }\n\n  const triggerData = Manipulator.getDataAttributes(this);\n  const selector = getSelectorFromElement(this);\n  const selectorElements = SelectorEngine.find(selector);\n  selectorElements.forEach(element => {\n    const data = Collapse.getInstance(element);\n    let config;\n\n    if (data) {\n      // update parent attribute\n      if (data._parent === null && typeof triggerData.parent === 'string') {\n        data._config.parent = triggerData.parent;\n        data._parent = data._getParent();\n      }\n\n      config = 'toggle';\n    } else {\n      config = triggerData;\n    }\n\n    Collapse.collapseInterface(element, config);\n  });\n});\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Collapse to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Collapse);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): dropdown.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$8 = 'dropdown';\nconst DATA_KEY$7 = 'bs.dropdown';\nconst EVENT_KEY$7 = `.${DATA_KEY$7}`;\nconst DATA_API_KEY$4 = '.data-api';\nconst ESCAPE_KEY$2 = 'Escape';\nconst SPACE_KEY = 'Space';\nconst TAB_KEY = 'Tab';\nconst ARROW_UP_KEY = 'ArrowUp';\nconst ARROW_DOWN_KEY = 'ArrowDown';\nconst RIGHT_MOUSE_BUTTON = 2; // MouseEvent.button value for the secondary button, usually the right button\n\nconst REGEXP_KEYDOWN = new RegExp(`${ARROW_UP_KEY}|${ARROW_DOWN_KEY}|${ESCAPE_KEY$2}`);\nconst EVENT_HIDE$4 = `hide${EVENT_KEY$7}`;\nconst EVENT_HIDDEN$4 = `hidden${EVENT_KEY$7}`;\nconst EVENT_SHOW$4 = `show${EVENT_KEY$7}`;\nconst EVENT_SHOWN$4 = `shown${EVENT_KEY$7}`;\nconst EVENT_CLICK = `click${EVENT_KEY$7}`;\nconst EVENT_CLICK_DATA_API$3 = `click${EVENT_KEY$7}${DATA_API_KEY$4}`;\nconst EVENT_KEYDOWN_DATA_API = `keydown${EVENT_KEY$7}${DATA_API_KEY$4}`;\nconst EVENT_KEYUP_DATA_API = `keyup${EVENT_KEY$7}${DATA_API_KEY$4}`;\nconst CLASS_NAME_SHOW$7 = 'show';\nconst CLASS_NAME_DROPUP = 'dropup';\nconst CLASS_NAME_DROPEND = 'dropend';\nconst CLASS_NAME_DROPSTART = 'dropstart';\nconst CLASS_NAME_NAVBAR = 'navbar';\nconst SELECTOR_DATA_TOGGLE$3 = '[data-bs-toggle=\"dropdown\"]';\nconst SELECTOR_MENU = '.dropdown-menu';\nconst SELECTOR_NAVBAR_NAV = '.navbar-nav';\nconst SELECTOR_VISIBLE_ITEMS = '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)';\nconst PLACEMENT_TOP = isRTL() ? 'top-end' : 'top-start';\nconst PLACEMENT_TOPEND = isRTL() ? 'top-start' : 'top-end';\nconst PLACEMENT_BOTTOM = isRTL() ? 'bottom-end' : 'bottom-start';\nconst PLACEMENT_BOTTOMEND = isRTL() ? 'bottom-start' : 'bottom-end';\nconst PLACEMENT_RIGHT = isRTL() ? 'left-start' : 'right-start';\nconst PLACEMENT_LEFT = isRTL() ? 'right-start' : 'left-start';\nconst Default$7 = {\n  offset: [0, 2],\n  boundary: 'clippingParents',\n  reference: 'toggle',\n  display: 'dynamic',\n  popperConfig: null,\n  autoClose: true\n};\nconst DefaultType$7 = {\n  offset: '(array|string|function)',\n  boundary: '(string|element)',\n  reference: '(string|element|object)',\n  display: 'string',\n  popperConfig: '(null|object|function)',\n  autoClose: '(boolean|string)'\n};\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Dropdown extends BaseComponent {\n  constructor(element, config) {\n    super(element);\n    this._popper = null;\n    this._config = this._getConfig(config);\n    this._menu = this._getMenuElement();\n    this._inNavbar = this._detectNavbar();\n\n    this._addEventListeners();\n  } // Getters\n\n\n  static get Default() {\n    return Default$7;\n  }\n\n  static get DefaultType() {\n    return DefaultType$7;\n  }\n\n  static get NAME() {\n    return NAME$8;\n  } // Public\n\n\n  toggle() {\n    if (isDisabled(this._element)) {\n      return;\n    }\n\n    const isActive = this._element.classList.contains(CLASS_NAME_SHOW$7);\n\n    if (isActive) {\n      this.hide();\n      return;\n    }\n\n    this.show();\n  }\n\n  show() {\n    if (isDisabled(this._element) || this._menu.classList.contains(CLASS_NAME_SHOW$7)) {\n      return;\n    }\n\n    const parent = Dropdown.getParentFromElement(this._element);\n    const relatedTarget = {\n      relatedTarget: this._element\n    };\n    const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$4, relatedTarget);\n\n    if (showEvent.defaultPrevented) {\n      return;\n    } // Totally disable Popper for Dropdowns in Navbar\n\n\n    if (this._inNavbar) {\n      Manipulator.setDataAttribute(this._menu, 'popper', 'none');\n    } else {\n      if (typeof Popper === 'undefined') {\n        throw new TypeError('Bootstrap\\'s dropdowns require Popper (https://popper.js.org)');\n      }\n\n      let referenceElement = this._element;\n\n      if (this._config.reference === 'parent') {\n        referenceElement = parent;\n      } else if (isElement(this._config.reference)) {\n        referenceElement = getElement(this._config.reference);\n      } else if (typeof this._config.reference === 'object') {\n        referenceElement = this._config.reference;\n      }\n\n      const popperConfig = this._getPopperConfig();\n\n      const isDisplayStatic = popperConfig.modifiers.find(modifier => modifier.name === 'applyStyles' && modifier.enabled === false);\n      this._popper = Popper.createPopper(referenceElement, this._menu, popperConfig);\n\n      if (isDisplayStatic) {\n        Manipulator.setDataAttribute(this._menu, 'popper', 'static');\n      }\n    } // If this is a touch-enabled device we add extra\n    // empty mouseover listeners to the body's immediate children;\n    // only needed because of broken event delegation on iOS\n    // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n\n\n    if ('ontouchstart' in document.documentElement && !parent.closest(SELECTOR_NAVBAR_NAV)) {\n      [].concat(...document.body.children).forEach(elem => EventHandler.on(elem, 'mouseover', noop));\n    }\n\n    this._element.focus();\n\n    this._element.setAttribute('aria-expanded', true);\n\n    this._menu.classList.toggle(CLASS_NAME_SHOW$7);\n\n    this._element.classList.toggle(CLASS_NAME_SHOW$7);\n\n    EventHandler.trigger(this._element, EVENT_SHOWN$4, relatedTarget);\n  }\n\n  hide() {\n    if (isDisabled(this._element) || !this._menu.classList.contains(CLASS_NAME_SHOW$7)) {\n      return;\n    }\n\n    const relatedTarget = {\n      relatedTarget: this._element\n    };\n\n    this._completeHide(relatedTarget);\n  }\n\n  dispose() {\n    if (this._popper) {\n      this._popper.destroy();\n    }\n\n    super.dispose();\n  }\n\n  update() {\n    this._inNavbar = this._detectNavbar();\n\n    if (this._popper) {\n      this._popper.update();\n    }\n  } // Private\n\n\n  _addEventListeners() {\n    EventHandler.on(this._element, EVENT_CLICK, event => {\n      event.preventDefault();\n      this.toggle();\n    });\n  }\n\n  _completeHide(relatedTarget) {\n    const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$4, relatedTarget);\n\n    if (hideEvent.defaultPrevented) {\n      return;\n    } // If this is a touch-enabled device we remove the extra\n    // empty mouseover listeners we added for iOS support\n\n\n    if ('ontouchstart' in document.documentElement) {\n      [].concat(...document.body.children).forEach(elem => EventHandler.off(elem, 'mouseover', noop));\n    }\n\n    if (this._popper) {\n      this._popper.destroy();\n    }\n\n    this._menu.classList.remove(CLASS_NAME_SHOW$7);\n\n    this._element.classList.remove(CLASS_NAME_SHOW$7);\n\n    this._element.setAttribute('aria-expanded', 'false');\n\n    Manipulator.removeDataAttribute(this._menu, 'popper');\n    EventHandler.trigger(this._element, EVENT_HIDDEN$4, relatedTarget);\n  }\n\n  _getConfig(config) {\n    config = { ...this.constructor.Default,\n      ...Manipulator.getDataAttributes(this._element),\n      ...config\n    };\n    typeCheckConfig(NAME$8, config, this.constructor.DefaultType);\n\n    if (typeof config.reference === 'object' && !isElement(config.reference) && typeof config.reference.getBoundingClientRect !== 'function') {\n      // Popper virtual elements require a getBoundingClientRect method\n      throw new TypeError(`${NAME$8.toUpperCase()}: Option \"reference\" provided type \"object\" without a required \"getBoundingClientRect\" method.`);\n    }\n\n    return config;\n  }\n\n  _getMenuElement() {\n    return SelectorEngine.next(this._element, SELECTOR_MENU)[0];\n  }\n\n  _getPlacement() {\n    const parentDropdown = this._element.parentNode;\n\n    if (parentDropdown.classList.contains(CLASS_NAME_DROPEND)) {\n      return PLACEMENT_RIGHT;\n    }\n\n    if (parentDropdown.classList.contains(CLASS_NAME_DROPSTART)) {\n      return PLACEMENT_LEFT;\n    } // We need to trim the value because custom properties can also include spaces\n\n\n    const isEnd = getComputedStyle(this._menu).getPropertyValue('--bs-position').trim() === 'end';\n\n    if (parentDropdown.classList.contains(CLASS_NAME_DROPUP)) {\n      return isEnd ? PLACEMENT_TOPEND : PLACEMENT_TOP;\n    }\n\n    return isEnd ? PLACEMENT_BOTTOMEND : PLACEMENT_BOTTOM;\n  }\n\n  _detectNavbar() {\n    return this._element.closest(`.${CLASS_NAME_NAVBAR}`) !== null;\n  }\n\n  _getOffset() {\n    const {\n      offset\n    } = this._config;\n\n    if (typeof offset === 'string') {\n      return offset.split(',').map(val => Number.parseInt(val, 10));\n    }\n\n    if (typeof offset === 'function') {\n      return popperData => offset(popperData, this._element);\n    }\n\n    return offset;\n  }\n\n  _getPopperConfig() {\n    const defaultBsPopperConfig = {\n      placement: this._getPlacement(),\n      modifiers: [{\n        name: 'preventOverflow',\n        options: {\n          boundary: this._config.boundary\n        }\n      }, {\n        name: 'offset',\n        options: {\n          offset: this._getOffset()\n        }\n      }]\n    }; // Disable Popper if we have a static display\n\n    if (this._config.display === 'static') {\n      defaultBsPopperConfig.modifiers = [{\n        name: 'applyStyles',\n        enabled: false\n      }];\n    }\n\n    return { ...defaultBsPopperConfig,\n      ...(typeof this._config.popperConfig === 'function' ? this._config.popperConfig(defaultBsPopperConfig) : this._config.popperConfig)\n    };\n  }\n\n  _selectMenuItem({\n    key,\n    target\n  }) {\n    const items = SelectorEngine.find(SELECTOR_VISIBLE_ITEMS, this._menu).filter(isVisible);\n\n    if (!items.length) {\n      return;\n    } // if target isn't included in items (e.g. when expanding the dropdown)\n    // allow cycling to get the last item in case key equals ARROW_UP_KEY\n\n\n    getNextActiveElement(items, target, key === ARROW_DOWN_KEY, !items.includes(target)).focus();\n  } // Static\n\n\n  static dropdownInterface(element, config) {\n    const data = Dropdown.getOrCreateInstance(element, config);\n\n    if (typeof config === 'string') {\n      if (typeof data[config] === 'undefined') {\n        throw new TypeError(`No method named \"${config}\"`);\n      }\n\n      data[config]();\n    }\n  }\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      Dropdown.dropdownInterface(this, config);\n    });\n  }\n\n  static clearMenus(event) {\n    if (event && (event.button === RIGHT_MOUSE_BUTTON || event.type === 'keyup' && event.key !== TAB_KEY)) {\n      return;\n    }\n\n    const toggles = SelectorEngine.find(SELECTOR_DATA_TOGGLE$3);\n\n    for (let i = 0, len = toggles.length; i < len; i++) {\n      const context = Dropdown.getInstance(toggles[i]);\n\n      if (!context || context._config.autoClose === false) {\n        continue;\n      }\n\n      if (!context._element.classList.contains(CLASS_NAME_SHOW$7)) {\n        continue;\n      }\n\n      const relatedTarget = {\n        relatedTarget: context._element\n      };\n\n      if (event) {\n        const composedPath = event.composedPath();\n        const isMenuTarget = composedPath.includes(context._menu);\n\n        if (composedPath.includes(context._element) || context._config.autoClose === 'inside' && !isMenuTarget || context._config.autoClose === 'outside' && isMenuTarget) {\n          continue;\n        } // Tab navigation through the dropdown menu or events from contained inputs shouldn't close the menu\n\n\n        if (context._menu.contains(event.target) && (event.type === 'keyup' && event.key === TAB_KEY || /input|select|option|textarea|form/i.test(event.target.tagName))) {\n          continue;\n        }\n\n        if (event.type === 'click') {\n          relatedTarget.clickEvent = event;\n        }\n      }\n\n      context._completeHide(relatedTarget);\n    }\n  }\n\n  static getParentFromElement(element) {\n    return getElementFromSelector(element) || element.parentNode;\n  }\n\n  static dataApiKeydownHandler(event) {\n    // If not input/textarea:\n    //  - And not a key in REGEXP_KEYDOWN => not a dropdown command\n    // If input/textarea:\n    //  - If space key => not a dropdown command\n    //  - If key is other than escape\n    //    - If key is not up or down => not a dropdown command\n    //    - If trigger inside the menu => not a dropdown command\n    if (/input|textarea/i.test(event.target.tagName) ? event.key === SPACE_KEY || event.key !== ESCAPE_KEY$2 && (event.key !== ARROW_DOWN_KEY && event.key !== ARROW_UP_KEY || event.target.closest(SELECTOR_MENU)) : !REGEXP_KEYDOWN.test(event.key)) {\n      return;\n    }\n\n    const isActive = this.classList.contains(CLASS_NAME_SHOW$7);\n\n    if (!isActive && event.key === ESCAPE_KEY$2) {\n      return;\n    }\n\n    event.preventDefault();\n    event.stopPropagation();\n\n    if (isDisabled(this)) {\n      return;\n    }\n\n    const getToggleButton = () => this.matches(SELECTOR_DATA_TOGGLE$3) ? this : SelectorEngine.prev(this, SELECTOR_DATA_TOGGLE$3)[0];\n\n    if (event.key === ESCAPE_KEY$2) {\n      getToggleButton().focus();\n      Dropdown.clearMenus();\n      return;\n    }\n\n    if (event.key === ARROW_UP_KEY || event.key === ARROW_DOWN_KEY) {\n      if (!isActive) {\n        getToggleButton().click();\n      }\n\n      Dropdown.getInstance(getToggleButton())._selectMenuItem(event);\n\n      return;\n    }\n\n    if (!isActive || event.key === SPACE_KEY) {\n      Dropdown.clearMenus();\n    }\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_DATA_TOGGLE$3, Dropdown.dataApiKeydownHandler);\nEventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown.dataApiKeydownHandler);\nEventHandler.on(document, EVENT_CLICK_DATA_API$3, Dropdown.clearMenus);\nEventHandler.on(document, EVENT_KEYUP_DATA_API, Dropdown.clearMenus);\nEventHandler.on(document, EVENT_CLICK_DATA_API$3, SELECTOR_DATA_TOGGLE$3, function (event) {\n  event.preventDefault();\n  Dropdown.dropdownInterface(this);\n});\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Dropdown to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Dropdown);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): util/scrollBar.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\nconst SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top';\nconst SELECTOR_STICKY_CONTENT = '.sticky-top';\n\nclass ScrollBarHelper {\n  constructor() {\n    this._element = document.body;\n  }\n\n  getWidth() {\n    // https://developer.mozilla.org/en-US/docs/Web/API/Window/innerWidth#usage_notes\n    const documentWidth = document.documentElement.clientWidth;\n    return Math.abs(window.innerWidth - documentWidth);\n  }\n\n  hide() {\n    const width = this.getWidth();\n\n    this._disableOverFlow(); // give padding to element to balance the hidden scrollbar width\n\n\n    this._setElementAttributes(this._element, 'paddingRight', calculatedValue => calculatedValue + width); // trick: We adjust positive paddingRight and negative marginRight to sticky-top elements to keep showing fullwidth\n\n\n    this._setElementAttributes(SELECTOR_FIXED_CONTENT, 'paddingRight', calculatedValue => calculatedValue + width);\n\n    this._setElementAttributes(SELECTOR_STICKY_CONTENT, 'marginRight', calculatedValue => calculatedValue - width);\n  }\n\n  _disableOverFlow() {\n    this._saveInitialAttribute(this._element, 'overflow');\n\n    this._element.style.overflow = 'hidden';\n  }\n\n  _setElementAttributes(selector, styleProp, callback) {\n    const scrollbarWidth = this.getWidth();\n\n    const manipulationCallBack = element => {\n      if (element !== this._element && window.innerWidth > element.clientWidth + scrollbarWidth) {\n        return;\n      }\n\n      this._saveInitialAttribute(element, styleProp);\n\n      const calculatedValue = window.getComputedStyle(element)[styleProp];\n      element.style[styleProp] = `${callback(Number.parseFloat(calculatedValue))}px`;\n    };\n\n    this._applyManipulationCallback(selector, manipulationCallBack);\n  }\n\n  reset() {\n    this._resetElementAttributes(this._element, 'overflow');\n\n    this._resetElementAttributes(this._element, 'paddingRight');\n\n    this._resetElementAttributes(SELECTOR_FIXED_CONTENT, 'paddingRight');\n\n    this._resetElementAttributes(SELECTOR_STICKY_CONTENT, 'marginRight');\n  }\n\n  _saveInitialAttribute(element, styleProp) {\n    const actualValue = element.style[styleProp];\n\n    if (actualValue) {\n      Manipulator.setDataAttribute(element, styleProp, actualValue);\n    }\n  }\n\n  _resetElementAttributes(selector, styleProp) {\n    const manipulationCallBack = element => {\n      const value = Manipulator.getDataAttribute(element, styleProp);\n\n      if (typeof value === 'undefined') {\n        element.style.removeProperty(styleProp);\n      } else {\n        Manipulator.removeDataAttribute(element, styleProp);\n        element.style[styleProp] = value;\n      }\n    };\n\n    this._applyManipulationCallback(selector, manipulationCallBack);\n  }\n\n  _applyManipulationCallback(selector, callBack) {\n    if (isElement(selector)) {\n      callBack(selector);\n    } else {\n      SelectorEngine.find(selector, this._element).forEach(callBack);\n    }\n  }\n\n  isOverflowing() {\n    return this.getWidth() > 0;\n  }\n\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): util/backdrop.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\nconst Default$6 = {\n  isVisible: true,\n  // if false, we use the backdrop helper without adding any element to the dom\n  isAnimated: false,\n  rootElement: 'body',\n  // give the choice to place backdrop under different elements\n  clickCallback: null\n};\nconst DefaultType$6 = {\n  isVisible: 'boolean',\n  isAnimated: 'boolean',\n  rootElement: '(element|string)',\n  clickCallback: '(function|null)'\n};\nconst NAME$7 = 'backdrop';\nconst CLASS_NAME_BACKDROP = 'modal-backdrop';\nconst CLASS_NAME_FADE$5 = 'fade';\nconst CLASS_NAME_SHOW$6 = 'show';\nconst EVENT_MOUSEDOWN = `mousedown.bs.${NAME$7}`;\n\nclass Backdrop {\n  constructor(config) {\n    this._config = this._getConfig(config);\n    this._isAppended = false;\n    this._element = null;\n  }\n\n  show(callback) {\n    if (!this._config.isVisible) {\n      execute(callback);\n      return;\n    }\n\n    this._append();\n\n    if (this._config.isAnimated) {\n      reflow(this._getElement());\n    }\n\n    this._getElement().classList.add(CLASS_NAME_SHOW$6);\n\n    this._emulateAnimation(() => {\n      execute(callback);\n    });\n  }\n\n  hide(callback) {\n    if (!this._config.isVisible) {\n      execute(callback);\n      return;\n    }\n\n    this._getElement().classList.remove(CLASS_NAME_SHOW$6);\n\n    this._emulateAnimation(() => {\n      this.dispose();\n      execute(callback);\n    });\n  } // Private\n\n\n  _getElement() {\n    if (!this._element) {\n      const backdrop = document.createElement('div');\n      backdrop.className = CLASS_NAME_BACKDROP;\n\n      if (this._config.isAnimated) {\n        backdrop.classList.add(CLASS_NAME_FADE$5);\n      }\n\n      this._element = backdrop;\n    }\n\n    return this._element;\n  }\n\n  _getConfig(config) {\n    config = { ...Default$6,\n      ...(typeof config === 'object' ? config : {})\n    }; // use getElement() with the default \"body\" to get a fresh Element on each instantiation\n\n    config.rootElement = getElement(config.rootElement);\n    typeCheckConfig(NAME$7, config, DefaultType$6);\n    return config;\n  }\n\n  _append() {\n    if (this._isAppended) {\n      return;\n    }\n\n    this._config.rootElement.appendChild(this._getElement());\n\n    EventHandler.on(this._getElement(), EVENT_MOUSEDOWN, () => {\n      execute(this._config.clickCallback);\n    });\n    this._isAppended = true;\n  }\n\n  dispose() {\n    if (!this._isAppended) {\n      return;\n    }\n\n    EventHandler.off(this._element, EVENT_MOUSEDOWN);\n\n    this._element.remove();\n\n    this._isAppended = false;\n  }\n\n  _emulateAnimation(callback) {\n    executeAfterTransition(callback, this._getElement(), this._config.isAnimated);\n  }\n\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): modal.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$6 = 'modal';\nconst DATA_KEY$6 = 'bs.modal';\nconst EVENT_KEY$6 = `.${DATA_KEY$6}`;\nconst DATA_API_KEY$3 = '.data-api';\nconst ESCAPE_KEY$1 = 'Escape';\nconst Default$5 = {\n  backdrop: true,\n  keyboard: true,\n  focus: true\n};\nconst DefaultType$5 = {\n  backdrop: '(boolean|string)',\n  keyboard: 'boolean',\n  focus: 'boolean'\n};\nconst EVENT_HIDE$3 = `hide${EVENT_KEY$6}`;\nconst EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY$6}`;\nconst EVENT_HIDDEN$3 = `hidden${EVENT_KEY$6}`;\nconst EVENT_SHOW$3 = `show${EVENT_KEY$6}`;\nconst EVENT_SHOWN$3 = `shown${EVENT_KEY$6}`;\nconst EVENT_FOCUSIN$2 = `focusin${EVENT_KEY$6}`;\nconst EVENT_RESIZE = `resize${EVENT_KEY$6}`;\nconst EVENT_CLICK_DISMISS$2 = `click.dismiss${EVENT_KEY$6}`;\nconst EVENT_KEYDOWN_DISMISS$1 = `keydown.dismiss${EVENT_KEY$6}`;\nconst EVENT_MOUSEUP_DISMISS = `mouseup.dismiss${EVENT_KEY$6}`;\nconst EVENT_MOUSEDOWN_DISMISS = `mousedown.dismiss${EVENT_KEY$6}`;\nconst EVENT_CLICK_DATA_API$2 = `click${EVENT_KEY$6}${DATA_API_KEY$3}`;\nconst CLASS_NAME_OPEN = 'modal-open';\nconst CLASS_NAME_FADE$4 = 'fade';\nconst CLASS_NAME_SHOW$5 = 'show';\nconst CLASS_NAME_STATIC = 'modal-static';\nconst SELECTOR_DIALOG = '.modal-dialog';\nconst SELECTOR_MODAL_BODY = '.modal-body';\nconst SELECTOR_DATA_TOGGLE$2 = '[data-bs-toggle=\"modal\"]';\nconst SELECTOR_DATA_DISMISS$2 = '[data-bs-dismiss=\"modal\"]';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Modal extends BaseComponent {\n  constructor(element, config) {\n    super(element);\n    this._config = this._getConfig(config);\n    this._dialog = SelectorEngine.findOne(SELECTOR_DIALOG, this._element);\n    this._backdrop = this._initializeBackDrop();\n    this._isShown = false;\n    this._ignoreBackdropClick = false;\n    this._isTransitioning = false;\n    this._scrollBar = new ScrollBarHelper();\n  } // Getters\n\n\n  static get Default() {\n    return Default$5;\n  }\n\n  static get NAME() {\n    return NAME$6;\n  } // Public\n\n\n  toggle(relatedTarget) {\n    return this._isShown ? this.hide() : this.show(relatedTarget);\n  }\n\n  show(relatedTarget) {\n    if (this._isShown || this._isTransitioning) {\n      return;\n    }\n\n    const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$3, {\n      relatedTarget\n    });\n\n    if (showEvent.defaultPrevented) {\n      return;\n    }\n\n    this._isShown = true;\n\n    if (this._isAnimated()) {\n      this._isTransitioning = true;\n    }\n\n    this._scrollBar.hide();\n\n    document.body.classList.add(CLASS_NAME_OPEN);\n\n    this._adjustDialog();\n\n    this._setEscapeEvent();\n\n    this._setResizeEvent();\n\n    EventHandler.on(this._element, EVENT_CLICK_DISMISS$2, SELECTOR_DATA_DISMISS$2, event => this.hide(event));\n    EventHandler.on(this._dialog, EVENT_MOUSEDOWN_DISMISS, () => {\n      EventHandler.one(this._element, EVENT_MOUSEUP_DISMISS, event => {\n        if (event.target === this._element) {\n          this._ignoreBackdropClick = true;\n        }\n      });\n    });\n\n    this._showBackdrop(() => this._showElement(relatedTarget));\n  }\n\n  hide(event) {\n    if (event && ['A', 'AREA'].includes(event.target.tagName)) {\n      event.preventDefault();\n    }\n\n    if (!this._isShown || this._isTransitioning) {\n      return;\n    }\n\n    const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$3);\n\n    if (hideEvent.defaultPrevented) {\n      return;\n    }\n\n    this._isShown = false;\n\n    const isAnimated = this._isAnimated();\n\n    if (isAnimated) {\n      this._isTransitioning = true;\n    }\n\n    this._setEscapeEvent();\n\n    this._setResizeEvent();\n\n    EventHandler.off(document, EVENT_FOCUSIN$2);\n\n    this._element.classList.remove(CLASS_NAME_SHOW$5);\n\n    EventHandler.off(this._element, EVENT_CLICK_DISMISS$2);\n    EventHandler.off(this._dialog, EVENT_MOUSEDOWN_DISMISS);\n\n    this._queueCallback(() => this._hideModal(), this._element, isAnimated);\n  }\n\n  dispose() {\n    [window, this._dialog].forEach(htmlElement => EventHandler.off(htmlElement, EVENT_KEY$6));\n\n    this._backdrop.dispose();\n\n    super.dispose();\n    /**\n     * `document` has 2 events `EVENT_FOCUSIN` and `EVENT_CLICK_DATA_API`\n     * Do not move `document` in `htmlElements` array\n     * It will remove `EVENT_CLICK_DATA_API` event that should remain\n     */\n\n    EventHandler.off(document, EVENT_FOCUSIN$2);\n  }\n\n  handleUpdate() {\n    this._adjustDialog();\n  } // Private\n\n\n  _initializeBackDrop() {\n    return new Backdrop({\n      isVisible: Boolean(this._config.backdrop),\n      // 'static' option will be translated to true, and booleans will keep their value\n      isAnimated: this._isAnimated()\n    });\n  }\n\n  _getConfig(config) {\n    config = { ...Default$5,\n      ...Manipulator.getDataAttributes(this._element),\n      ...(typeof config === 'object' ? config : {})\n    };\n    typeCheckConfig(NAME$6, config, DefaultType$5);\n    return config;\n  }\n\n  _showElement(relatedTarget) {\n    const isAnimated = this._isAnimated();\n\n    const modalBody = SelectorEngine.findOne(SELECTOR_MODAL_BODY, this._dialog);\n\n    if (!this._element.parentNode || this._element.parentNode.nodeType !== Node.ELEMENT_NODE) {\n      // Don't move modal's DOM position\n      document.body.appendChild(this._element);\n    }\n\n    this._element.style.display = 'block';\n\n    this._element.removeAttribute('aria-hidden');\n\n    this._element.setAttribute('aria-modal', true);\n\n    this._element.setAttribute('role', 'dialog');\n\n    this._element.scrollTop = 0;\n\n    if (modalBody) {\n      modalBody.scrollTop = 0;\n    }\n\n    if (isAnimated) {\n      reflow(this._element);\n    }\n\n    this._element.classList.add(CLASS_NAME_SHOW$5);\n\n    if (this._config.focus) {\n      this._enforceFocus();\n    }\n\n    const transitionComplete = () => {\n      if (this._config.focus) {\n        this._element.focus();\n      }\n\n      this._isTransitioning = false;\n      EventHandler.trigger(this._element, EVENT_SHOWN$3, {\n        relatedTarget\n      });\n    };\n\n    this._queueCallback(transitionComplete, this._dialog, isAnimated);\n  }\n\n  _enforceFocus() {\n    EventHandler.off(document, EVENT_FOCUSIN$2); // guard against infinite focus loop\n\n    EventHandler.on(document, EVENT_FOCUSIN$2, event => {\n      if (document !== event.target && this._element !== event.target && !this._element.contains(event.target)) {\n        this._element.focus();\n      }\n    });\n  }\n\n  _setEscapeEvent() {\n    if (this._isShown) {\n      EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS$1, event => {\n        if (this._config.keyboard && event.key === ESCAPE_KEY$1) {\n          event.preventDefault();\n          this.hide();\n        } else if (!this._config.keyboard && event.key === ESCAPE_KEY$1) {\n          this._triggerBackdropTransition();\n        }\n      });\n    } else {\n      EventHandler.off(this._element, EVENT_KEYDOWN_DISMISS$1);\n    }\n  }\n\n  _setResizeEvent() {\n    if (this._isShown) {\n      EventHandler.on(window, EVENT_RESIZE, () => this._adjustDialog());\n    } else {\n      EventHandler.off(window, EVENT_RESIZE);\n    }\n  }\n\n  _hideModal() {\n    this._element.style.display = 'none';\n\n    this._element.setAttribute('aria-hidden', true);\n\n    this._element.removeAttribute('aria-modal');\n\n    this._element.removeAttribute('role');\n\n    this._isTransitioning = false;\n\n    this._backdrop.hide(() => {\n      document.body.classList.remove(CLASS_NAME_OPEN);\n\n      this._resetAdjustments();\n\n      this._scrollBar.reset();\n\n      EventHandler.trigger(this._element, EVENT_HIDDEN$3);\n    });\n  }\n\n  _showBackdrop(callback) {\n    EventHandler.on(this._element, EVENT_CLICK_DISMISS$2, event => {\n      if (this._ignoreBackdropClick) {\n        this._ignoreBackdropClick = false;\n        return;\n      }\n\n      if (event.target !== event.currentTarget) {\n        return;\n      }\n\n      if (this._config.backdrop === true) {\n        this.hide();\n      } else if (this._config.backdrop === 'static') {\n        this._triggerBackdropTransition();\n      }\n    });\n\n    this._backdrop.show(callback);\n  }\n\n  _isAnimated() {\n    return this._element.classList.contains(CLASS_NAME_FADE$4);\n  }\n\n  _triggerBackdropTransition() {\n    const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED);\n\n    if (hideEvent.defaultPrevented) {\n      return;\n    }\n\n    const {\n      classList,\n      scrollHeight,\n      style\n    } = this._element;\n    const isModalOverflowing = scrollHeight > document.documentElement.clientHeight; // return if the following background transition hasn't yet completed\n\n    if (!isModalOverflowing && style.overflowY === 'hidden' || classList.contains(CLASS_NAME_STATIC)) {\n      return;\n    }\n\n    if (!isModalOverflowing) {\n      style.overflowY = 'hidden';\n    }\n\n    classList.add(CLASS_NAME_STATIC);\n\n    this._queueCallback(() => {\n      classList.remove(CLASS_NAME_STATIC);\n\n      if (!isModalOverflowing) {\n        this._queueCallback(() => {\n          style.overflowY = '';\n        }, this._dialog);\n      }\n    }, this._dialog);\n\n    this._element.focus();\n  } // ----------------------------------------------------------------------\n  // the following methods are used to handle overflowing modals\n  // ----------------------------------------------------------------------\n\n\n  _adjustDialog() {\n    const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;\n\n    const scrollbarWidth = this._scrollBar.getWidth();\n\n    const isBodyOverflowing = scrollbarWidth > 0;\n\n    if (!isBodyOverflowing && isModalOverflowing && !isRTL() || isBodyOverflowing && !isModalOverflowing && isRTL()) {\n      this._element.style.paddingLeft = `${scrollbarWidth}px`;\n    }\n\n    if (isBodyOverflowing && !isModalOverflowing && !isRTL() || !isBodyOverflowing && isModalOverflowing && isRTL()) {\n      this._element.style.paddingRight = `${scrollbarWidth}px`;\n    }\n  }\n\n  _resetAdjustments() {\n    this._element.style.paddingLeft = '';\n    this._element.style.paddingRight = '';\n  } // Static\n\n\n  static jQueryInterface(config, relatedTarget) {\n    return this.each(function () {\n      const data = Modal.getOrCreateInstance(this, config);\n\n      if (typeof config !== 'string') {\n        return;\n      }\n\n      if (typeof data[config] === 'undefined') {\n        throw new TypeError(`No method named \"${config}\"`);\n      }\n\n      data[config](relatedTarget);\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$2, SELECTOR_DATA_TOGGLE$2, function (event) {\n  const target = getElementFromSelector(this);\n\n  if (['A', 'AREA'].includes(this.tagName)) {\n    event.preventDefault();\n  }\n\n  EventHandler.one(target, EVENT_SHOW$3, showEvent => {\n    if (showEvent.defaultPrevented) {\n      // only register focus restorer if modal will actually get shown\n      return;\n    }\n\n    EventHandler.one(target, EVENT_HIDDEN$3, () => {\n      if (isVisible(this)) {\n        this.focus();\n      }\n    });\n  });\n  const data = Modal.getOrCreateInstance(target);\n  data.toggle(this);\n});\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Modal to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Modal);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): offcanvas.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$5 = 'offcanvas';\nconst DATA_KEY$5 = 'bs.offcanvas';\nconst EVENT_KEY$5 = `.${DATA_KEY$5}`;\nconst DATA_API_KEY$2 = '.data-api';\nconst EVENT_LOAD_DATA_API$1 = `load${EVENT_KEY$5}${DATA_API_KEY$2}`;\nconst ESCAPE_KEY = 'Escape';\nconst Default$4 = {\n  backdrop: true,\n  keyboard: true,\n  scroll: false\n};\nconst DefaultType$4 = {\n  backdrop: 'boolean',\n  keyboard: 'boolean',\n  scroll: 'boolean'\n};\nconst CLASS_NAME_SHOW$4 = 'show';\nconst OPEN_SELECTOR = '.offcanvas.show';\nconst EVENT_SHOW$2 = `show${EVENT_KEY$5}`;\nconst EVENT_SHOWN$2 = `shown${EVENT_KEY$5}`;\nconst EVENT_HIDE$2 = `hide${EVENT_KEY$5}`;\nconst EVENT_HIDDEN$2 = `hidden${EVENT_KEY$5}`;\nconst EVENT_FOCUSIN$1 = `focusin${EVENT_KEY$5}`;\nconst EVENT_CLICK_DATA_API$1 = `click${EVENT_KEY$5}${DATA_API_KEY$2}`;\nconst EVENT_CLICK_DISMISS$1 = `click.dismiss${EVENT_KEY$5}`;\nconst EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY$5}`;\nconst SELECTOR_DATA_DISMISS$1 = '[data-bs-dismiss=\"offcanvas\"]';\nconst SELECTOR_DATA_TOGGLE$1 = '[data-bs-toggle=\"offcanvas\"]';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Offcanvas extends BaseComponent {\n  constructor(element, config) {\n    super(element);\n    this._config = this._getConfig(config);\n    this._isShown = false;\n    this._backdrop = this._initializeBackDrop();\n\n    this._addEventListeners();\n  } // Getters\n\n\n  static get NAME() {\n    return NAME$5;\n  }\n\n  static get Default() {\n    return Default$4;\n  } // Public\n\n\n  toggle(relatedTarget) {\n    return this._isShown ? this.hide() : this.show(relatedTarget);\n  }\n\n  show(relatedTarget) {\n    if (this._isShown) {\n      return;\n    }\n\n    const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$2, {\n      relatedTarget\n    });\n\n    if (showEvent.defaultPrevented) {\n      return;\n    }\n\n    this._isShown = true;\n    this._element.style.visibility = 'visible';\n\n    this._backdrop.show();\n\n    if (!this._config.scroll) {\n      new ScrollBarHelper().hide();\n\n      this._enforceFocusOnElement(this._element);\n    }\n\n    this._element.removeAttribute('aria-hidden');\n\n    this._element.setAttribute('aria-modal', true);\n\n    this._element.setAttribute('role', 'dialog');\n\n    this._element.classList.add(CLASS_NAME_SHOW$4);\n\n    const completeCallBack = () => {\n      EventHandler.trigger(this._element, EVENT_SHOWN$2, {\n        relatedTarget\n      });\n    };\n\n    this._queueCallback(completeCallBack, this._element, true);\n  }\n\n  hide() {\n    if (!this._isShown) {\n      return;\n    }\n\n    const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$2);\n\n    if (hideEvent.defaultPrevented) {\n      return;\n    }\n\n    EventHandler.off(document, EVENT_FOCUSIN$1);\n\n    this._element.blur();\n\n    this._isShown = false;\n\n    this._element.classList.remove(CLASS_NAME_SHOW$4);\n\n    this._backdrop.hide();\n\n    const completeCallback = () => {\n      this._element.setAttribute('aria-hidden', true);\n\n      this._element.removeAttribute('aria-modal');\n\n      this._element.removeAttribute('role');\n\n      this._element.style.visibility = 'hidden';\n\n      if (!this._config.scroll) {\n        new ScrollBarHelper().reset();\n      }\n\n      EventHandler.trigger(this._element, EVENT_HIDDEN$2);\n    };\n\n    this._queueCallback(completeCallback, this._element, true);\n  }\n\n  dispose() {\n    this._backdrop.dispose();\n\n    super.dispose();\n    EventHandler.off(document, EVENT_FOCUSIN$1);\n  } // Private\n\n\n  _getConfig(config) {\n    config = { ...Default$4,\n      ...Manipulator.getDataAttributes(this._element),\n      ...(typeof config === 'object' ? config : {})\n    };\n    typeCheckConfig(NAME$5, config, DefaultType$4);\n    return config;\n  }\n\n  _initializeBackDrop() {\n    return new Backdrop({\n      isVisible: this._config.backdrop,\n      isAnimated: true,\n      rootElement: this._element.parentNode,\n      clickCallback: () => this.hide()\n    });\n  }\n\n  _enforceFocusOnElement(element) {\n    EventHandler.off(document, EVENT_FOCUSIN$1); // guard against infinite focus loop\n\n    EventHandler.on(document, EVENT_FOCUSIN$1, event => {\n      if (document !== event.target && element !== event.target && !element.contains(event.target)) {\n        element.focus();\n      }\n    });\n    element.focus();\n  }\n\n  _addEventListeners() {\n    EventHandler.on(this._element, EVENT_CLICK_DISMISS$1, SELECTOR_DATA_DISMISS$1, () => this.hide());\n    EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS, event => {\n      if (this._config.keyboard && event.key === ESCAPE_KEY) {\n        this.hide();\n      }\n    });\n  } // Static\n\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Offcanvas.getOrCreateInstance(this, config);\n\n      if (typeof config !== 'string') {\n        return;\n      }\n\n      if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n        throw new TypeError(`No method named \"${config}\"`);\n      }\n\n      data[config](this);\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$1, SELECTOR_DATA_TOGGLE$1, function (event) {\n  const target = getElementFromSelector(this);\n\n  if (['A', 'AREA'].includes(this.tagName)) {\n    event.preventDefault();\n  }\n\n  if (isDisabled(this)) {\n    return;\n  }\n\n  EventHandler.one(target, EVENT_HIDDEN$2, () => {\n    // focus on trigger when it is closed\n    if (isVisible(this)) {\n      this.focus();\n    }\n  }); // avoid conflict when clicking a toggler of an offcanvas, while another is open\n\n  const allReadyOpen = SelectorEngine.findOne(OPEN_SELECTOR);\n\n  if (allReadyOpen && allReadyOpen !== target) {\n    Offcanvas.getInstance(allReadyOpen).hide();\n  }\n\n  const data = Offcanvas.getOrCreateInstance(target);\n  data.toggle(this);\n});\nEventHandler.on(window, EVENT_LOAD_DATA_API$1, () => SelectorEngine.find(OPEN_SELECTOR).forEach(el => Offcanvas.getOrCreateInstance(el).show()));\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\ndefineJQueryPlugin(Offcanvas);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): util/sanitizer.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\nconst uriAttrs = new Set(['background', 'cite', 'href', 'itemtype', 'longdesc', 'poster', 'src', 'xlink:href']);\nconst ARIA_ATTRIBUTE_PATTERN = /^aria-[\\w-]*$/i;\n/**\n * A pattern that recognizes a commonly useful subset of URLs that are safe.\n *\n * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts\n */\n\nconst SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file):|[^#&/:?]*(?:[#/?]|$))/i;\n/**\n * A pattern that matches safe data URLs. Only matches image, video and audio types.\n *\n * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts\n */\n\nconst DATA_URL_PATTERN = /^data:(?:image\\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\\/(?:mpeg|mp4|ogg|webm)|audio\\/(?:mp3|oga|ogg|opus));base64,[\\d+/a-z]+=*$/i;\n\nconst allowedAttribute = (attr, allowedAttributeList) => {\n  const attrName = attr.nodeName.toLowerCase();\n\n  if (allowedAttributeList.includes(attrName)) {\n    if (uriAttrs.has(attrName)) {\n      return Boolean(SAFE_URL_PATTERN.test(attr.nodeValue) || DATA_URL_PATTERN.test(attr.nodeValue));\n    }\n\n    return true;\n  }\n\n  const regExp = allowedAttributeList.filter(attrRegex => attrRegex instanceof RegExp); // Check if a regular expression validates the attribute.\n\n  for (let i = 0, len = regExp.length; i < len; i++) {\n    if (regExp[i].test(attrName)) {\n      return true;\n    }\n  }\n\n  return false;\n};\n\nconst DefaultAllowlist = {\n  // Global attributes allowed on any supplied element below.\n  '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],\n  a: ['target', 'href', 'title', 'rel'],\n  area: [],\n  b: [],\n  br: [],\n  col: [],\n  code: [],\n  div: [],\n  em: [],\n  hr: [],\n  h1: [],\n  h2: [],\n  h3: [],\n  h4: [],\n  h5: [],\n  h6: [],\n  i: [],\n  img: ['src', 'srcset', 'alt', 'title', 'width', 'height'],\n  li: [],\n  ol: [],\n  p: [],\n  pre: [],\n  s: [],\n  small: [],\n  span: [],\n  sub: [],\n  sup: [],\n  strong: [],\n  u: [],\n  ul: []\n};\nfunction sanitizeHtml(unsafeHtml, allowList, sanitizeFn) {\n  if (!unsafeHtml.length) {\n    return unsafeHtml;\n  }\n\n  if (sanitizeFn && typeof sanitizeFn === 'function') {\n    return sanitizeFn(unsafeHtml);\n  }\n\n  const domParser = new window.DOMParser();\n  const createdDocument = domParser.parseFromString(unsafeHtml, 'text/html');\n  const allowlistKeys = Object.keys(allowList);\n  const elements = [].concat(...createdDocument.body.querySelectorAll('*'));\n\n  for (let i = 0, len = elements.length; i < len; i++) {\n    const el = elements[i];\n    const elName = el.nodeName.toLowerCase();\n\n    if (!allowlistKeys.includes(elName)) {\n      el.remove();\n      continue;\n    }\n\n    const attributeList = [].concat(...el.attributes);\n    const allowedAttributes = [].concat(allowList['*'] || [], allowList[elName] || []);\n    attributeList.forEach(attr => {\n      if (!allowedAttribute(attr, allowedAttributes)) {\n        el.removeAttribute(attr.nodeName);\n      }\n    });\n  }\n\n  return createdDocument.body.innerHTML;\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): tooltip.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$4 = 'tooltip';\nconst DATA_KEY$4 = 'bs.tooltip';\nconst EVENT_KEY$4 = `.${DATA_KEY$4}`;\nconst CLASS_PREFIX$1 = 'bs-tooltip';\nconst BSCLS_PREFIX_REGEX$1 = new RegExp(`(^|\\\\s)${CLASS_PREFIX$1}\\\\S+`, 'g');\nconst DISALLOWED_ATTRIBUTES = new Set(['sanitize', 'allowList', 'sanitizeFn']);\nconst DefaultType$3 = {\n  animation: 'boolean',\n  template: 'string',\n  title: '(string|element|function)',\n  trigger: 'string',\n  delay: '(number|object)',\n  html: 'boolean',\n  selector: '(string|boolean)',\n  placement: '(string|function)',\n  offset: '(array|string|function)',\n  container: '(string|element|boolean)',\n  fallbackPlacements: 'array',\n  boundary: '(string|element)',\n  customClass: '(string|function)',\n  sanitize: 'boolean',\n  sanitizeFn: '(null|function)',\n  allowList: 'object',\n  popperConfig: '(null|object|function)'\n};\nconst AttachmentMap = {\n  AUTO: 'auto',\n  TOP: 'top',\n  RIGHT: isRTL() ? 'left' : 'right',\n  BOTTOM: 'bottom',\n  LEFT: isRTL() ? 'right' : 'left'\n};\nconst Default$3 = {\n  animation: true,\n  template: '<div class=\"tooltip\" role=\"tooltip\">' + '<div class=\"tooltip-arrow\"></div>' + '<div class=\"tooltip-inner\"></div>' + '</div>',\n  trigger: 'hover focus',\n  title: '',\n  delay: 0,\n  html: false,\n  selector: false,\n  placement: 'top',\n  offset: [0, 0],\n  container: false,\n  fallbackPlacements: ['top', 'right', 'bottom', 'left'],\n  boundary: 'clippingParents',\n  customClass: '',\n  sanitize: true,\n  sanitizeFn: null,\n  allowList: DefaultAllowlist,\n  popperConfig: null\n};\nconst Event$2 = {\n  HIDE: `hide${EVENT_KEY$4}`,\n  HIDDEN: `hidden${EVENT_KEY$4}`,\n  SHOW: `show${EVENT_KEY$4}`,\n  SHOWN: `shown${EVENT_KEY$4}`,\n  INSERTED: `inserted${EVENT_KEY$4}`,\n  CLICK: `click${EVENT_KEY$4}`,\n  FOCUSIN: `focusin${EVENT_KEY$4}`,\n  FOCUSOUT: `focusout${EVENT_KEY$4}`,\n  MOUSEENTER: `mouseenter${EVENT_KEY$4}`,\n  MOUSELEAVE: `mouseleave${EVENT_KEY$4}`\n};\nconst CLASS_NAME_FADE$3 = 'fade';\nconst CLASS_NAME_MODAL = 'modal';\nconst CLASS_NAME_SHOW$3 = 'show';\nconst HOVER_STATE_SHOW = 'show';\nconst HOVER_STATE_OUT = 'out';\nconst SELECTOR_TOOLTIP_INNER = '.tooltip-inner';\nconst TRIGGER_HOVER = 'hover';\nconst TRIGGER_FOCUS = 'focus';\nconst TRIGGER_CLICK = 'click';\nconst TRIGGER_MANUAL = 'manual';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Tooltip extends BaseComponent {\n  constructor(element, config) {\n    if (typeof Popper === 'undefined') {\n      throw new TypeError('Bootstrap\\'s tooltips require Popper (https://popper.js.org)');\n    }\n\n    super(element); // private\n\n    this._isEnabled = true;\n    this._timeout = 0;\n    this._hoverState = '';\n    this._activeTrigger = {};\n    this._popper = null; // Protected\n\n    this._config = this._getConfig(config);\n    this.tip = null;\n\n    this._setListeners();\n  } // Getters\n\n\n  static get Default() {\n    return Default$3;\n  }\n\n  static get NAME() {\n    return NAME$4;\n  }\n\n  static get Event() {\n    return Event$2;\n  }\n\n  static get DefaultType() {\n    return DefaultType$3;\n  } // Public\n\n\n  enable() {\n    this._isEnabled = true;\n  }\n\n  disable() {\n    this._isEnabled = false;\n  }\n\n  toggleEnabled() {\n    this._isEnabled = !this._isEnabled;\n  }\n\n  toggle(event) {\n    if (!this._isEnabled) {\n      return;\n    }\n\n    if (event) {\n      const context = this._initializeOnDelegatedTarget(event);\n\n      context._activeTrigger.click = !context._activeTrigger.click;\n\n      if (context._isWithActiveTrigger()) {\n        context._enter(null, context);\n      } else {\n        context._leave(null, context);\n      }\n    } else {\n      if (this.getTipElement().classList.contains(CLASS_NAME_SHOW$3)) {\n        this._leave(null, this);\n\n        return;\n      }\n\n      this._enter(null, this);\n    }\n  }\n\n  dispose() {\n    clearTimeout(this._timeout);\n    EventHandler.off(this._element.closest(`.${CLASS_NAME_MODAL}`), 'hide.bs.modal', this._hideModalHandler);\n\n    if (this.tip) {\n      this.tip.remove();\n    }\n\n    if (this._popper) {\n      this._popper.destroy();\n    }\n\n    super.dispose();\n  }\n\n  show() {\n    if (this._element.style.display === 'none') {\n      throw new Error('Please use show on visible elements');\n    }\n\n    if (!(this.isWithContent() && this._isEnabled)) {\n      return;\n    }\n\n    const showEvent = EventHandler.trigger(this._element, this.constructor.Event.SHOW);\n    const shadowRoot = findShadowRoot(this._element);\n    const isInTheDom = shadowRoot === null ? this._element.ownerDocument.documentElement.contains(this._element) : shadowRoot.contains(this._element);\n\n    if (showEvent.defaultPrevented || !isInTheDom) {\n      return;\n    }\n\n    const tip = this.getTipElement();\n    const tipId = getUID(this.constructor.NAME);\n    tip.setAttribute('id', tipId);\n\n    this._element.setAttribute('aria-describedby', tipId);\n\n    this.setContent();\n\n    if (this._config.animation) {\n      tip.classList.add(CLASS_NAME_FADE$3);\n    }\n\n    const placement = typeof this._config.placement === 'function' ? this._config.placement.call(this, tip, this._element) : this._config.placement;\n\n    const attachment = this._getAttachment(placement);\n\n    this._addAttachmentClass(attachment);\n\n    const {\n      container\n    } = this._config;\n    Data.set(tip, this.constructor.DATA_KEY, this);\n\n    if (!this._element.ownerDocument.documentElement.contains(this.tip)) {\n      container.appendChild(tip);\n      EventHandler.trigger(this._element, this.constructor.Event.INSERTED);\n    }\n\n    if (this._popper) {\n      this._popper.update();\n    } else {\n      this._popper = Popper.createPopper(this._element, tip, this._getPopperConfig(attachment));\n    }\n\n    tip.classList.add(CLASS_NAME_SHOW$3);\n    const customClass = typeof this._config.customClass === 'function' ? this._config.customClass() : this._config.customClass;\n\n    if (customClass) {\n      tip.classList.add(...customClass.split(' '));\n    } // If this is a touch-enabled device we add extra\n    // empty mouseover listeners to the body's immediate children;\n    // only needed because of broken event delegation on iOS\n    // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n\n\n    if ('ontouchstart' in document.documentElement) {\n      [].concat(...document.body.children).forEach(element => {\n        EventHandler.on(element, 'mouseover', noop);\n      });\n    }\n\n    const complete = () => {\n      const prevHoverState = this._hoverState;\n      this._hoverState = null;\n      EventHandler.trigger(this._element, this.constructor.Event.SHOWN);\n\n      if (prevHoverState === HOVER_STATE_OUT) {\n        this._leave(null, this);\n      }\n    };\n\n    const isAnimated = this.tip.classList.contains(CLASS_NAME_FADE$3);\n\n    this._queueCallback(complete, this.tip, isAnimated);\n  }\n\n  hide() {\n    if (!this._popper) {\n      return;\n    }\n\n    const tip = this.getTipElement();\n\n    const complete = () => {\n      if (this._isWithActiveTrigger()) {\n        return;\n      }\n\n      if (this._hoverState !== HOVER_STATE_SHOW) {\n        tip.remove();\n      }\n\n      this._cleanTipClass();\n\n      this._element.removeAttribute('aria-describedby');\n\n      EventHandler.trigger(this._element, this.constructor.Event.HIDDEN);\n\n      if (this._popper) {\n        this._popper.destroy();\n\n        this._popper = null;\n      }\n    };\n\n    const hideEvent = EventHandler.trigger(this._element, this.constructor.Event.HIDE);\n\n    if (hideEvent.defaultPrevented) {\n      return;\n    }\n\n    tip.classList.remove(CLASS_NAME_SHOW$3); // If this is a touch-enabled device we remove the extra\n    // empty mouseover listeners we added for iOS support\n\n    if ('ontouchstart' in document.documentElement) {\n      [].concat(...document.body.children).forEach(element => EventHandler.off(element, 'mouseover', noop));\n    }\n\n    this._activeTrigger[TRIGGER_CLICK] = false;\n    this._activeTrigger[TRIGGER_FOCUS] = false;\n    this._activeTrigger[TRIGGER_HOVER] = false;\n    const isAnimated = this.tip.classList.contains(CLASS_NAME_FADE$3);\n\n    this._queueCallback(complete, this.tip, isAnimated);\n\n    this._hoverState = '';\n  }\n\n  update() {\n    if (this._popper !== null) {\n      this._popper.update();\n    }\n  } // Protected\n\n\n  isWithContent() {\n    return Boolean(this.getTitle());\n  }\n\n  getTipElement() {\n    if (this.tip) {\n      return this.tip;\n    }\n\n    const element = document.createElement('div');\n    element.innerHTML = this._config.template;\n    this.tip = element.children[0];\n    return this.tip;\n  }\n\n  setContent() {\n    const tip = this.getTipElement();\n    this.setElementContent(SelectorEngine.findOne(SELECTOR_TOOLTIP_INNER, tip), this.getTitle());\n    tip.classList.remove(CLASS_NAME_FADE$3, CLASS_NAME_SHOW$3);\n  }\n\n  setElementContent(element, content) {\n    if (element === null) {\n      return;\n    }\n\n    if (isElement(content)) {\n      content = getElement(content); // content is a DOM node or a jQuery\n\n      if (this._config.html) {\n        if (content.parentNode !== element) {\n          element.innerHTML = '';\n          element.appendChild(content);\n        }\n      } else {\n        element.textContent = content.textContent;\n      }\n\n      return;\n    }\n\n    if (this._config.html) {\n      if (this._config.sanitize) {\n        content = sanitizeHtml(content, this._config.allowList, this._config.sanitizeFn);\n      }\n\n      element.innerHTML = content;\n    } else {\n      element.textContent = content;\n    }\n  }\n\n  getTitle() {\n    let title = this._element.getAttribute('data-bs-original-title');\n\n    if (!title) {\n      title = typeof this._config.title === 'function' ? this._config.title.call(this._element) : this._config.title;\n    }\n\n    return title;\n  }\n\n  updateAttachment(attachment) {\n    if (attachment === 'right') {\n      return 'end';\n    }\n\n    if (attachment === 'left') {\n      return 'start';\n    }\n\n    return attachment;\n  } // Private\n\n\n  _initializeOnDelegatedTarget(event, context) {\n    const dataKey = this.constructor.DATA_KEY;\n    context = context || Data.get(event.delegateTarget, dataKey);\n\n    if (!context) {\n      context = new this.constructor(event.delegateTarget, this._getDelegateConfig());\n      Data.set(event.delegateTarget, dataKey, context);\n    }\n\n    return context;\n  }\n\n  _getOffset() {\n    const {\n      offset\n    } = this._config;\n\n    if (typeof offset === 'string') {\n      return offset.split(',').map(val => Number.parseInt(val, 10));\n    }\n\n    if (typeof offset === 'function') {\n      return popperData => offset(popperData, this._element);\n    }\n\n    return offset;\n  }\n\n  _getPopperConfig(attachment) {\n    const defaultBsPopperConfig = {\n      placement: attachment,\n      modifiers: [{\n        name: 'flip',\n        options: {\n          fallbackPlacements: this._config.fallbackPlacements\n        }\n      }, {\n        name: 'offset',\n        options: {\n          offset: this._getOffset()\n        }\n      }, {\n        name: 'preventOverflow',\n        options: {\n          boundary: this._config.boundary\n        }\n      }, {\n        name: 'arrow',\n        options: {\n          element: `.${this.constructor.NAME}-arrow`\n        }\n      }, {\n        name: 'onChange',\n        enabled: true,\n        phase: 'afterWrite',\n        fn: data => this._handlePopperPlacementChange(data)\n      }],\n      onFirstUpdate: data => {\n        if (data.options.placement !== data.placement) {\n          this._handlePopperPlacementChange(data);\n        }\n      }\n    };\n    return { ...defaultBsPopperConfig,\n      ...(typeof this._config.popperConfig === 'function' ? this._config.popperConfig(defaultBsPopperConfig) : this._config.popperConfig)\n    };\n  }\n\n  _addAttachmentClass(attachment) {\n    this.getTipElement().classList.add(`${CLASS_PREFIX$1}-${this.updateAttachment(attachment)}`);\n  }\n\n  _getAttachment(placement) {\n    return AttachmentMap[placement.toUpperCase()];\n  }\n\n  _setListeners() {\n    const triggers = this._config.trigger.split(' ');\n\n    triggers.forEach(trigger => {\n      if (trigger === 'click') {\n        EventHandler.on(this._element, this.constructor.Event.CLICK, this._config.selector, event => this.toggle(event));\n      } else if (trigger !== TRIGGER_MANUAL) {\n        const eventIn = trigger === TRIGGER_HOVER ? this.constructor.Event.MOUSEENTER : this.constructor.Event.FOCUSIN;\n        const eventOut = trigger === TRIGGER_HOVER ? this.constructor.Event.MOUSELEAVE : this.constructor.Event.FOCUSOUT;\n        EventHandler.on(this._element, eventIn, this._config.selector, event => this._enter(event));\n        EventHandler.on(this._element, eventOut, this._config.selector, event => this._leave(event));\n      }\n    });\n\n    this._hideModalHandler = () => {\n      if (this._element) {\n        this.hide();\n      }\n    };\n\n    EventHandler.on(this._element.closest(`.${CLASS_NAME_MODAL}`), 'hide.bs.modal', this._hideModalHandler);\n\n    if (this._config.selector) {\n      this._config = { ...this._config,\n        trigger: 'manual',\n        selector: ''\n      };\n    } else {\n      this._fixTitle();\n    }\n  }\n\n  _fixTitle() {\n    const title = this._element.getAttribute('title');\n\n    const originalTitleType = typeof this._element.getAttribute('data-bs-original-title');\n\n    if (title || originalTitleType !== 'string') {\n      this._element.setAttribute('data-bs-original-title', title || '');\n\n      if (title && !this._element.getAttribute('aria-label') && !this._element.textContent) {\n        this._element.setAttribute('aria-label', title);\n      }\n\n      this._element.setAttribute('title', '');\n    }\n  }\n\n  _enter(event, context) {\n    context = this._initializeOnDelegatedTarget(event, context);\n\n    if (event) {\n      context._activeTrigger[event.type === 'focusin' ? TRIGGER_FOCUS : TRIGGER_HOVER] = true;\n    }\n\n    if (context.getTipElement().classList.contains(CLASS_NAME_SHOW$3) || context._hoverState === HOVER_STATE_SHOW) {\n      context._hoverState = HOVER_STATE_SHOW;\n      return;\n    }\n\n    clearTimeout(context._timeout);\n    context._hoverState = HOVER_STATE_SHOW;\n\n    if (!context._config.delay || !context._config.delay.show) {\n      context.show();\n      return;\n    }\n\n    context._timeout = setTimeout(() => {\n      if (context._hoverState === HOVER_STATE_SHOW) {\n        context.show();\n      }\n    }, context._config.delay.show);\n  }\n\n  _leave(event, context) {\n    context = this._initializeOnDelegatedTarget(event, context);\n\n    if (event) {\n      context._activeTrigger[event.type === 'focusout' ? TRIGGER_FOCUS : TRIGGER_HOVER] = context._element.contains(event.relatedTarget);\n    }\n\n    if (context._isWithActiveTrigger()) {\n      return;\n    }\n\n    clearTimeout(context._timeout);\n    context._hoverState = HOVER_STATE_OUT;\n\n    if (!context._config.delay || !context._config.delay.hide) {\n      context.hide();\n      return;\n    }\n\n    context._timeout = setTimeout(() => {\n      if (context._hoverState === HOVER_STATE_OUT) {\n        context.hide();\n      }\n    }, context._config.delay.hide);\n  }\n\n  _isWithActiveTrigger() {\n    for (const trigger in this._activeTrigger) {\n      if (this._activeTrigger[trigger]) {\n        return true;\n      }\n    }\n\n    return false;\n  }\n\n  _getConfig(config) {\n    const dataAttributes = Manipulator.getDataAttributes(this._element);\n    Object.keys(dataAttributes).forEach(dataAttr => {\n      if (DISALLOWED_ATTRIBUTES.has(dataAttr)) {\n        delete dataAttributes[dataAttr];\n      }\n    });\n    config = { ...this.constructor.Default,\n      ...dataAttributes,\n      ...(typeof config === 'object' && config ? config : {})\n    };\n    config.container = config.container === false ? document.body : getElement(config.container);\n\n    if (typeof config.delay === 'number') {\n      config.delay = {\n        show: config.delay,\n        hide: config.delay\n      };\n    }\n\n    if (typeof config.title === 'number') {\n      config.title = config.title.toString();\n    }\n\n    if (typeof config.content === 'number') {\n      config.content = config.content.toString();\n    }\n\n    typeCheckConfig(NAME$4, config, this.constructor.DefaultType);\n\n    if (config.sanitize) {\n      config.template = sanitizeHtml(config.template, config.allowList, config.sanitizeFn);\n    }\n\n    return config;\n  }\n\n  _getDelegateConfig() {\n    const config = {};\n\n    if (this._config) {\n      for (const key in this._config) {\n        if (this.constructor.Default[key] !== this._config[key]) {\n          config[key] = this._config[key];\n        }\n      }\n    }\n\n    return config;\n  }\n\n  _cleanTipClass() {\n    const tip = this.getTipElement();\n    const tabClass = tip.getAttribute('class').match(BSCLS_PREFIX_REGEX$1);\n\n    if (tabClass !== null && tabClass.length > 0) {\n      tabClass.map(token => token.trim()).forEach(tClass => tip.classList.remove(tClass));\n    }\n  }\n\n  _handlePopperPlacementChange(popperData) {\n    const {\n      state\n    } = popperData;\n\n    if (!state) {\n      return;\n    }\n\n    this.tip = state.elements.popper;\n\n    this._cleanTipClass();\n\n    this._addAttachmentClass(this._getAttachment(state.placement));\n  } // Static\n\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Tooltip.getOrCreateInstance(this, config);\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config]();\n      }\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Tooltip to jQuery only if jQuery is present\n */\n\n\ndefineJQueryPlugin(Tooltip);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): popover.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$3 = 'popover';\nconst DATA_KEY$3 = 'bs.popover';\nconst EVENT_KEY$3 = `.${DATA_KEY$3}`;\nconst CLASS_PREFIX = 'bs-popover';\nconst BSCLS_PREFIX_REGEX = new RegExp(`(^|\\\\s)${CLASS_PREFIX}\\\\S+`, 'g');\nconst Default$2 = { ...Tooltip.Default,\n  placement: 'right',\n  offset: [0, 8],\n  trigger: 'click',\n  content: '',\n  template: '<div class=\"popover\" role=\"tooltip\">' + '<div class=\"popover-arrow\"></div>' + '<h3 class=\"popover-header\"></h3>' + '<div class=\"popover-body\"></div>' + '</div>'\n};\nconst DefaultType$2 = { ...Tooltip.DefaultType,\n  content: '(string|element|function)'\n};\nconst Event$1 = {\n  HIDE: `hide${EVENT_KEY$3}`,\n  HIDDEN: `hidden${EVENT_KEY$3}`,\n  SHOW: `show${EVENT_KEY$3}`,\n  SHOWN: `shown${EVENT_KEY$3}`,\n  INSERTED: `inserted${EVENT_KEY$3}`,\n  CLICK: `click${EVENT_KEY$3}`,\n  FOCUSIN: `focusin${EVENT_KEY$3}`,\n  FOCUSOUT: `focusout${EVENT_KEY$3}`,\n  MOUSEENTER: `mouseenter${EVENT_KEY$3}`,\n  MOUSELEAVE: `mouseleave${EVENT_KEY$3}`\n};\nconst CLASS_NAME_FADE$2 = 'fade';\nconst CLASS_NAME_SHOW$2 = 'show';\nconst SELECTOR_TITLE = '.popover-header';\nconst SELECTOR_CONTENT = '.popover-body';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Popover extends Tooltip {\n  // Getters\n  static get Default() {\n    return Default$2;\n  }\n\n  static get NAME() {\n    return NAME$3;\n  }\n\n  static get Event() {\n    return Event$1;\n  }\n\n  static get DefaultType() {\n    return DefaultType$2;\n  } // Overrides\n\n\n  isWithContent() {\n    return this.getTitle() || this._getContent();\n  }\n\n  getTipElement() {\n    if (this.tip) {\n      return this.tip;\n    }\n\n    this.tip = super.getTipElement();\n\n    if (!this.getTitle()) {\n      SelectorEngine.findOne(SELECTOR_TITLE, this.tip).remove();\n    }\n\n    if (!this._getContent()) {\n      SelectorEngine.findOne(SELECTOR_CONTENT, this.tip).remove();\n    }\n\n    return this.tip;\n  }\n\n  setContent() {\n    const tip = this.getTipElement(); // we use append for html objects to maintain js events\n\n    this.setElementContent(SelectorEngine.findOne(SELECTOR_TITLE, tip), this.getTitle());\n\n    let content = this._getContent();\n\n    if (typeof content === 'function') {\n      content = content.call(this._element);\n    }\n\n    this.setElementContent(SelectorEngine.findOne(SELECTOR_CONTENT, tip), content);\n    tip.classList.remove(CLASS_NAME_FADE$2, CLASS_NAME_SHOW$2);\n  } // Private\n\n\n  _addAttachmentClass(attachment) {\n    this.getTipElement().classList.add(`${CLASS_PREFIX}-${this.updateAttachment(attachment)}`);\n  }\n\n  _getContent() {\n    return this._element.getAttribute('data-bs-content') || this._config.content;\n  }\n\n  _cleanTipClass() {\n    const tip = this.getTipElement();\n    const tabClass = tip.getAttribute('class').match(BSCLS_PREFIX_REGEX);\n\n    if (tabClass !== null && tabClass.length > 0) {\n      tabClass.map(token => token.trim()).forEach(tClass => tip.classList.remove(tClass));\n    }\n  } // Static\n\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Popover.getOrCreateInstance(this, config);\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config]();\n      }\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Popover to jQuery only if jQuery is present\n */\n\n\ndefineJQueryPlugin(Popover);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): scrollspy.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$2 = 'scrollspy';\nconst DATA_KEY$2 = 'bs.scrollspy';\nconst EVENT_KEY$2 = `.${DATA_KEY$2}`;\nconst DATA_API_KEY$1 = '.data-api';\nconst Default$1 = {\n  offset: 10,\n  method: 'auto',\n  target: ''\n};\nconst DefaultType$1 = {\n  offset: 'number',\n  method: 'string',\n  target: '(string|element)'\n};\nconst EVENT_ACTIVATE = `activate${EVENT_KEY$2}`;\nconst EVENT_SCROLL = `scroll${EVENT_KEY$2}`;\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY$2}${DATA_API_KEY$1}`;\nconst CLASS_NAME_DROPDOWN_ITEM = 'dropdown-item';\nconst CLASS_NAME_ACTIVE$1 = 'active';\nconst SELECTOR_DATA_SPY = '[data-bs-spy=\"scroll\"]';\nconst SELECTOR_NAV_LIST_GROUP$1 = '.nav, .list-group';\nconst SELECTOR_NAV_LINKS = '.nav-link';\nconst SELECTOR_NAV_ITEMS = '.nav-item';\nconst SELECTOR_LIST_ITEMS = '.list-group-item';\nconst SELECTOR_DROPDOWN$1 = '.dropdown';\nconst SELECTOR_DROPDOWN_TOGGLE$1 = '.dropdown-toggle';\nconst METHOD_OFFSET = 'offset';\nconst METHOD_POSITION = 'position';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass ScrollSpy extends BaseComponent {\n  constructor(element, config) {\n    super(element);\n    this._scrollElement = this._element.tagName === 'BODY' ? window : this._element;\n    this._config = this._getConfig(config);\n    this._selector = `${this._config.target} ${SELECTOR_NAV_LINKS}, ${this._config.target} ${SELECTOR_LIST_ITEMS}, ${this._config.target} .${CLASS_NAME_DROPDOWN_ITEM}`;\n    this._offsets = [];\n    this._targets = [];\n    this._activeTarget = null;\n    this._scrollHeight = 0;\n    EventHandler.on(this._scrollElement, EVENT_SCROLL, () => this._process());\n    this.refresh();\n\n    this._process();\n  } // Getters\n\n\n  static get Default() {\n    return Default$1;\n  }\n\n  static get NAME() {\n    return NAME$2;\n  } // Public\n\n\n  refresh() {\n    const autoMethod = this._scrollElement === this._scrollElement.window ? METHOD_OFFSET : METHOD_POSITION;\n    const offsetMethod = this._config.method === 'auto' ? autoMethod : this._config.method;\n    const offsetBase = offsetMethod === METHOD_POSITION ? this._getScrollTop() : 0;\n    this._offsets = [];\n    this._targets = [];\n    this._scrollHeight = this._getScrollHeight();\n    const targets = SelectorEngine.find(this._selector);\n    targets.map(element => {\n      const targetSelector = getSelectorFromElement(element);\n      const target = targetSelector ? SelectorEngine.findOne(targetSelector) : null;\n\n      if (target) {\n        const targetBCR = target.getBoundingClientRect();\n\n        if (targetBCR.width || targetBCR.height) {\n          return [Manipulator[offsetMethod](target).top + offsetBase, targetSelector];\n        }\n      }\n\n      return null;\n    }).filter(item => item).sort((a, b) => a[0] - b[0]).forEach(item => {\n      this._offsets.push(item[0]);\n\n      this._targets.push(item[1]);\n    });\n  }\n\n  dispose() {\n    EventHandler.off(this._scrollElement, EVENT_KEY$2);\n    super.dispose();\n  } // Private\n\n\n  _getConfig(config) {\n    config = { ...Default$1,\n      ...Manipulator.getDataAttributes(this._element),\n      ...(typeof config === 'object' && config ? config : {})\n    };\n\n    if (typeof config.target !== 'string' && isElement(config.target)) {\n      let {\n        id\n      } = config.target;\n\n      if (!id) {\n        id = getUID(NAME$2);\n        config.target.id = id;\n      }\n\n      config.target = `#${id}`;\n    }\n\n    typeCheckConfig(NAME$2, config, DefaultType$1);\n    return config;\n  }\n\n  _getScrollTop() {\n    return this._scrollElement === window ? this._scrollElement.pageYOffset : this._scrollElement.scrollTop;\n  }\n\n  _getScrollHeight() {\n    return this._scrollElement.scrollHeight || Math.max(document.body.scrollHeight, document.documentElement.scrollHeight);\n  }\n\n  _getOffsetHeight() {\n    return this._scrollElement === window ? window.innerHeight : this._scrollElement.getBoundingClientRect().height;\n  }\n\n  _process() {\n    const scrollTop = this._getScrollTop() + this._config.offset;\n\n    const scrollHeight = this._getScrollHeight();\n\n    const maxScroll = this._config.offset + scrollHeight - this._getOffsetHeight();\n\n    if (this._scrollHeight !== scrollHeight) {\n      this.refresh();\n    }\n\n    if (scrollTop >= maxScroll) {\n      const target = this._targets[this._targets.length - 1];\n\n      if (this._activeTarget !== target) {\n        this._activate(target);\n      }\n\n      return;\n    }\n\n    if (this._activeTarget && scrollTop < this._offsets[0] && this._offsets[0] > 0) {\n      this._activeTarget = null;\n\n      this._clear();\n\n      return;\n    }\n\n    for (let i = this._offsets.length; i--;) {\n      const isActiveTarget = this._activeTarget !== this._targets[i] && scrollTop >= this._offsets[i] && (typeof this._offsets[i + 1] === 'undefined' || scrollTop < this._offsets[i + 1]);\n\n      if (isActiveTarget) {\n        this._activate(this._targets[i]);\n      }\n    }\n  }\n\n  _activate(target) {\n    this._activeTarget = target;\n\n    this._clear();\n\n    const queries = this._selector.split(',').map(selector => `${selector}[data-bs-target=\"${target}\"],${selector}[href=\"${target}\"]`);\n\n    const link = SelectorEngine.findOne(queries.join(','));\n\n    if (link.classList.contains(CLASS_NAME_DROPDOWN_ITEM)) {\n      SelectorEngine.findOne(SELECTOR_DROPDOWN_TOGGLE$1, link.closest(SELECTOR_DROPDOWN$1)).classList.add(CLASS_NAME_ACTIVE$1);\n      link.classList.add(CLASS_NAME_ACTIVE$1);\n    } else {\n      // Set triggered link as active\n      link.classList.add(CLASS_NAME_ACTIVE$1);\n      SelectorEngine.parents(link, SELECTOR_NAV_LIST_GROUP$1).forEach(listGroup => {\n        // Set triggered links parents as active\n        // With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor\n        SelectorEngine.prev(listGroup, `${SELECTOR_NAV_LINKS}, ${SELECTOR_LIST_ITEMS}`).forEach(item => item.classList.add(CLASS_NAME_ACTIVE$1)); // Handle special case when .nav-link is inside .nav-item\n\n        SelectorEngine.prev(listGroup, SELECTOR_NAV_ITEMS).forEach(navItem => {\n          SelectorEngine.children(navItem, SELECTOR_NAV_LINKS).forEach(item => item.classList.add(CLASS_NAME_ACTIVE$1));\n        });\n      });\n    }\n\n    EventHandler.trigger(this._scrollElement, EVENT_ACTIVATE, {\n      relatedTarget: target\n    });\n  }\n\n  _clear() {\n    SelectorEngine.find(this._selector).filter(node => node.classList.contains(CLASS_NAME_ACTIVE$1)).forEach(node => node.classList.remove(CLASS_NAME_ACTIVE$1));\n  } // Static\n\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = ScrollSpy.getOrCreateInstance(this, config);\n\n      if (typeof config !== 'string') {\n        return;\n      }\n\n      if (typeof data[config] === 'undefined') {\n        throw new TypeError(`No method named \"${config}\"`);\n      }\n\n      data[config]();\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n  SelectorEngine.find(SELECTOR_DATA_SPY).forEach(spy => new ScrollSpy(spy));\n});\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .ScrollSpy to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(ScrollSpy);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): tab.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$1 = 'tab';\nconst DATA_KEY$1 = 'bs.tab';\nconst EVENT_KEY$1 = `.${DATA_KEY$1}`;\nconst DATA_API_KEY = '.data-api';\nconst EVENT_HIDE$1 = `hide${EVENT_KEY$1}`;\nconst EVENT_HIDDEN$1 = `hidden${EVENT_KEY$1}`;\nconst EVENT_SHOW$1 = `show${EVENT_KEY$1}`;\nconst EVENT_SHOWN$1 = `shown${EVENT_KEY$1}`;\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY$1}${DATA_API_KEY}`;\nconst CLASS_NAME_DROPDOWN_MENU = 'dropdown-menu';\nconst CLASS_NAME_ACTIVE = 'active';\nconst CLASS_NAME_FADE$1 = 'fade';\nconst CLASS_NAME_SHOW$1 = 'show';\nconst SELECTOR_DROPDOWN = '.dropdown';\nconst SELECTOR_NAV_LIST_GROUP = '.nav, .list-group';\nconst SELECTOR_ACTIVE = '.active';\nconst SELECTOR_ACTIVE_UL = ':scope > li > .active';\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"tab\"], [data-bs-toggle=\"pill\"], [data-bs-toggle=\"list\"]';\nconst SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle';\nconst SELECTOR_DROPDOWN_ACTIVE_CHILD = ':scope > .dropdown-menu .active';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Tab extends BaseComponent {\n  // Getters\n  static get NAME() {\n    return NAME$1;\n  } // Public\n\n\n  show() {\n    if (this._element.parentNode && this._element.parentNode.nodeType === Node.ELEMENT_NODE && this._element.classList.contains(CLASS_NAME_ACTIVE)) {\n      return;\n    }\n\n    let previous;\n    const target = getElementFromSelector(this._element);\n\n    const listElement = this._element.closest(SELECTOR_NAV_LIST_GROUP);\n\n    if (listElement) {\n      const itemSelector = listElement.nodeName === 'UL' || listElement.nodeName === 'OL' ? SELECTOR_ACTIVE_UL : SELECTOR_ACTIVE;\n      previous = SelectorEngine.find(itemSelector, listElement);\n      previous = previous[previous.length - 1];\n    }\n\n    const hideEvent = previous ? EventHandler.trigger(previous, EVENT_HIDE$1, {\n      relatedTarget: this._element\n    }) : null;\n    const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$1, {\n      relatedTarget: previous\n    });\n\n    if (showEvent.defaultPrevented || hideEvent !== null && hideEvent.defaultPrevented) {\n      return;\n    }\n\n    this._activate(this._element, listElement);\n\n    const complete = () => {\n      EventHandler.trigger(previous, EVENT_HIDDEN$1, {\n        relatedTarget: this._element\n      });\n      EventHandler.trigger(this._element, EVENT_SHOWN$1, {\n        relatedTarget: previous\n      });\n    };\n\n    if (target) {\n      this._activate(target, target.parentNode, complete);\n    } else {\n      complete();\n    }\n  } // Private\n\n\n  _activate(element, container, callback) {\n    const activeElements = container && (container.nodeName === 'UL' || container.nodeName === 'OL') ? SelectorEngine.find(SELECTOR_ACTIVE_UL, container) : SelectorEngine.children(container, SELECTOR_ACTIVE);\n    const active = activeElements[0];\n    const isTransitioning = callback && active && active.classList.contains(CLASS_NAME_FADE$1);\n\n    const complete = () => this._transitionComplete(element, active, callback);\n\n    if (active && isTransitioning) {\n      active.classList.remove(CLASS_NAME_SHOW$1);\n\n      this._queueCallback(complete, element, true);\n    } else {\n      complete();\n    }\n  }\n\n  _transitionComplete(element, active, callback) {\n    if (active) {\n      active.classList.remove(CLASS_NAME_ACTIVE);\n      const dropdownChild = SelectorEngine.findOne(SELECTOR_DROPDOWN_ACTIVE_CHILD, active.parentNode);\n\n      if (dropdownChild) {\n        dropdownChild.classList.remove(CLASS_NAME_ACTIVE);\n      }\n\n      if (active.getAttribute('role') === 'tab') {\n        active.setAttribute('aria-selected', false);\n      }\n    }\n\n    element.classList.add(CLASS_NAME_ACTIVE);\n\n    if (element.getAttribute('role') === 'tab') {\n      element.setAttribute('aria-selected', true);\n    }\n\n    reflow(element);\n\n    if (element.classList.contains(CLASS_NAME_FADE$1)) {\n      element.classList.add(CLASS_NAME_SHOW$1);\n    }\n\n    let parent = element.parentNode;\n\n    if (parent && parent.nodeName === 'LI') {\n      parent = parent.parentNode;\n    }\n\n    if (parent && parent.classList.contains(CLASS_NAME_DROPDOWN_MENU)) {\n      const dropdownElement = element.closest(SELECTOR_DROPDOWN);\n\n      if (dropdownElement) {\n        SelectorEngine.find(SELECTOR_DROPDOWN_TOGGLE, dropdownElement).forEach(dropdown => dropdown.classList.add(CLASS_NAME_ACTIVE));\n      }\n\n      element.setAttribute('aria-expanded', true);\n    }\n\n    if (callback) {\n      callback();\n    }\n  } // Static\n\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Tab.getOrCreateInstance(this);\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config]();\n      }\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n  if (['A', 'AREA'].includes(this.tagName)) {\n    event.preventDefault();\n  }\n\n  if (isDisabled(this)) {\n    return;\n  }\n\n  const data = Tab.getOrCreateInstance(this);\n  data.show();\n});\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Tab to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Tab);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): toast.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'toast';\nconst DATA_KEY = 'bs.toast';\nconst EVENT_KEY = `.${DATA_KEY}`;\nconst EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY}`;\nconst EVENT_MOUSEOVER = `mouseover${EVENT_KEY}`;\nconst EVENT_MOUSEOUT = `mouseout${EVENT_KEY}`;\nconst EVENT_FOCUSIN = `focusin${EVENT_KEY}`;\nconst EVENT_FOCUSOUT = `focusout${EVENT_KEY}`;\nconst EVENT_HIDE = `hide${EVENT_KEY}`;\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`;\nconst EVENT_SHOW = `show${EVENT_KEY}`;\nconst EVENT_SHOWN = `shown${EVENT_KEY}`;\nconst CLASS_NAME_FADE = 'fade';\nconst CLASS_NAME_HIDE = 'hide';\nconst CLASS_NAME_SHOW = 'show';\nconst CLASS_NAME_SHOWING = 'showing';\nconst DefaultType = {\n  animation: 'boolean',\n  autohide: 'boolean',\n  delay: 'number'\n};\nconst Default = {\n  animation: true,\n  autohide: true,\n  delay: 5000\n};\nconst SELECTOR_DATA_DISMISS = '[data-bs-dismiss=\"toast\"]';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Toast extends BaseComponent {\n  constructor(element, config) {\n    super(element);\n    this._config = this._getConfig(config);\n    this._timeout = null;\n    this._hasMouseInteraction = false;\n    this._hasKeyboardInteraction = false;\n\n    this._setListeners();\n  } // Getters\n\n\n  static get DefaultType() {\n    return DefaultType;\n  }\n\n  static get Default() {\n    return Default;\n  }\n\n  static get NAME() {\n    return NAME;\n  } // Public\n\n\n  show() {\n    const showEvent = EventHandler.trigger(this._element, EVENT_SHOW);\n\n    if (showEvent.defaultPrevented) {\n      return;\n    }\n\n    this._clearTimeout();\n\n    if (this._config.animation) {\n      this._element.classList.add(CLASS_NAME_FADE);\n    }\n\n    const complete = () => {\n      this._element.classList.remove(CLASS_NAME_SHOWING);\n\n      this._element.classList.add(CLASS_NAME_SHOW);\n\n      EventHandler.trigger(this._element, EVENT_SHOWN);\n\n      this._maybeScheduleHide();\n    };\n\n    this._element.classList.remove(CLASS_NAME_HIDE);\n\n    reflow(this._element);\n\n    this._element.classList.add(CLASS_NAME_SHOWING);\n\n    this._queueCallback(complete, this._element, this._config.animation);\n  }\n\n  hide() {\n    if (!this._element.classList.contains(CLASS_NAME_SHOW)) {\n      return;\n    }\n\n    const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE);\n\n    if (hideEvent.defaultPrevented) {\n      return;\n    }\n\n    const complete = () => {\n      this._element.classList.add(CLASS_NAME_HIDE);\n\n      EventHandler.trigger(this._element, EVENT_HIDDEN);\n    };\n\n    this._element.classList.remove(CLASS_NAME_SHOW);\n\n    this._queueCallback(complete, this._element, this._config.animation);\n  }\n\n  dispose() {\n    this._clearTimeout();\n\n    if (this._element.classList.contains(CLASS_NAME_SHOW)) {\n      this._element.classList.remove(CLASS_NAME_SHOW);\n    }\n\n    super.dispose();\n  } // Private\n\n\n  _getConfig(config) {\n    config = { ...Default,\n      ...Manipulator.getDataAttributes(this._element),\n      ...(typeof config === 'object' && config ? config : {})\n    };\n    typeCheckConfig(NAME, config, this.constructor.DefaultType);\n    return config;\n  }\n\n  _maybeScheduleHide() {\n    if (!this._config.autohide) {\n      return;\n    }\n\n    if (this._hasMouseInteraction || this._hasKeyboardInteraction) {\n      return;\n    }\n\n    this._timeout = setTimeout(() => {\n      this.hide();\n    }, this._config.delay);\n  }\n\n  _onInteraction(event, isInteracting) {\n    switch (event.type) {\n      case 'mouseover':\n      case 'mouseout':\n        this._hasMouseInteraction = isInteracting;\n        break;\n\n      case 'focusin':\n      case 'focusout':\n        this._hasKeyboardInteraction = isInteracting;\n        break;\n    }\n\n    if (isInteracting) {\n      this._clearTimeout();\n\n      return;\n    }\n\n    const nextElement = event.relatedTarget;\n\n    if (this._element === nextElement || this._element.contains(nextElement)) {\n      return;\n    }\n\n    this._maybeScheduleHide();\n  }\n\n  _setListeners() {\n    EventHandler.on(this._element, EVENT_CLICK_DISMISS, SELECTOR_DATA_DISMISS, () => this.hide());\n    EventHandler.on(this._element, EVENT_MOUSEOVER, event => this._onInteraction(event, true));\n    EventHandler.on(this._element, EVENT_MOUSEOUT, event => this._onInteraction(event, false));\n    EventHandler.on(this._element, EVENT_FOCUSIN, event => this._onInteraction(event, true));\n    EventHandler.on(this._element, EVENT_FOCUSOUT, event => this._onInteraction(event, false));\n  }\n\n  _clearTimeout() {\n    clearTimeout(this._timeout);\n    this._timeout = null;\n  } // Static\n\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Toast.getOrCreateInstance(this, config);\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config](this);\n      }\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Toast to jQuery only if jQuery is present\n */\n\n\ndefineJQueryPlugin(Toast);\n\nexport { Alert, Button, Carousel, Collapse, Dropdown, Modal, Offcanvas, Popover, ScrollSpy, Tab, Toast, Tooltip };\n//# sourceMappingURL=bootstrap.esm.js.map\n"
  },
  {
    "path": "src/sourceDev.WebApp/SharedThemes/spacelab/wwwroot/js/jquery.js",
    "content": "/*!\n * jQuery JavaScript Library v3.7.0\n * https://jquery.com/\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license\n * https://jquery.org/license\n *\n * Date: 2023-05-11T18:29Z\n */\n(function (global, factory) {\n\n\t\"use strict\";\n\n\tif (typeof module === \"object\" && typeof module.exports === \"object\") {\n\n\t\t// For CommonJS and CommonJS-like environments where a proper `window`\n\t\t// is present, execute the factory and get jQuery.\n\t\t// For environments that do not have a `window` with a `document`\n\t\t// (such as Node.js), expose a factory as module.exports.\n\t\t// This accentuates the need for the creation of a real `window`.\n\t\t// e.g. var jQuery = require(\"jquery\")(window);\n\t\t// See ticket trac-14549 for more info.\n\t\tmodule.exports = global.document ?\n\t\t\tfactory(global, true) :\n\t\t\tfunction (w) {\n\t\t\t\tif (!w.document) {\n\t\t\t\t\tthrow new Error(\"jQuery requires a window with a document\");\n\t\t\t\t}\n\t\t\t\treturn factory(w);\n\t\t\t};\n\t} else {\n\t\tfactory(global);\n\t}\n\n\t// Pass this if window is not defined yet\n})(typeof window !== \"undefined\" ? window : this, function (window, noGlobal) {\n\n\t// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1\n\t// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode\n\t// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common\n\t// enough that all such attempts are guarded in a try block.\n\t\"use strict\";\n\n\tvar arr = [];\n\n\tvar getProto = Object.getPrototypeOf;\n\n\tvar slice = arr.slice;\n\n\tvar flat = arr.flat ? function (array) {\n\t\treturn arr.flat.call(array);\n\t} : function (array) {\n\t\treturn arr.concat.apply([], array);\n\t};\n\n\n\tvar push = arr.push;\n\n\tvar indexOf = arr.indexOf;\n\n\tvar class2type = {};\n\n\tvar toString = class2type.toString;\n\n\tvar hasOwn = class2type.hasOwnProperty;\n\n\tvar fnToString = hasOwn.toString;\n\n\tvar ObjectFunctionString = fnToString.call(Object);\n\n\tvar support = {};\n\n\tvar isFunction = function isFunction(obj) {\n\n\t\t// Support: Chrome <=57, Firefox <=52\n\t\t// In some browsers, typeof returns \"function\" for HTML <object> elements\n\t\t// (i.e., `typeof document.createElement( \"object\" ) === \"function\"`).\n\t\t// We don't want to classify *any* DOM node as a function.\n\t\t// Support: QtWeb <=3.8.5, WebKit <=534.34, wkhtmltopdf tool <=0.12.5\n\t\t// Plus for old WebKit, typeof returns \"function\" for HTML collections\n\t\t// (e.g., `typeof document.getElementsByTagName(\"div\") === \"function\"`). (gh-4756)\n\t\treturn typeof obj === \"function\" && typeof obj.nodeType !== \"number\" &&\n\t\t\ttypeof obj.item !== \"function\";\n\t};\n\n\n\tvar isWindow = function isWindow(obj) {\n\t\treturn obj != null && obj === obj.window;\n\t};\n\n\n\tvar document = window.document;\n\n\n\n\tvar preservedScriptAttributes = {\n\t\ttype: true,\n\t\tsrc: true,\n\t\tnonce: true,\n\t\tnoModule: true\n\t};\n\n\tfunction DOMEval(code, node, doc) {\n\t\tdoc = doc || document;\n\n\t\tvar i, val,\n\t\t\tscript = doc.createElement(\"script\");\n\n\t\tscript.text = code;\n\t\tif (node) {\n\t\t\tfor (i in preservedScriptAttributes) {\n\n\t\t\t\t// Support: Firefox 64+, Edge 18+\n\t\t\t\t// Some browsers don't support the \"nonce\" property on scripts.\n\t\t\t\t// On the other hand, just using `getAttribute` is not enough as\n\t\t\t\t// the `nonce` attribute is reset to an empty string whenever it\n\t\t\t\t// becomes browsing-context connected.\n\t\t\t\t// See https://github.com/whatwg/html/issues/2369\n\t\t\t\t// See https://html.spec.whatwg.org/#nonce-attributes\n\t\t\t\t// The `node.getAttribute` check was added for the sake of\n\t\t\t\t// `jQuery.globalEval` so that it can fake a nonce-containing node\n\t\t\t\t// via an object.\n\t\t\t\tval = node[i] || node.getAttribute && node.getAttribute(i);\n\t\t\t\tif (val) {\n\t\t\t\t\tscript.setAttribute(i, val);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tdoc.head.appendChild(script).parentNode.removeChild(script);\n\t}\n\n\n\tfunction toType(obj) {\n\t\tif (obj == null) {\n\t\t\treturn obj + \"\";\n\t\t}\n\n\t\t// Support: Android <=2.3 only (functionish RegExp)\n\t\treturn typeof obj === \"object\" || typeof obj === \"function\" ?\n\t\t\tclass2type[toString.call(obj)] || \"object\" :\n\t\t\ttypeof obj;\n\t}\n\t/* global Symbol */\n\t// Defining this global in .eslintrc.json would create a danger of using the global\n\t// unguarded in another place, it seems safer to define global only for this module\n\n\n\n\tvar version = \"3.7.0\",\n\n\t\trhtmlSuffix = /HTML$/i,\n\n\t\t// Define a local copy of jQuery\n\t\tjQuery = function (selector, context) {\n\n\t\t\t// The jQuery object is actually just the init constructor 'enhanced'\n\t\t\t// Need init if jQuery is called (just allow error to be thrown if not included)\n\t\t\treturn new jQuery.fn.init(selector, context);\n\t\t};\n\n\tjQuery.fn = jQuery.prototype = {\n\n\t\t// The current version of jQuery being used\n\t\tjquery: version,\n\n\t\tconstructor: jQuery,\n\n\t\t// The default length of a jQuery object is 0\n\t\tlength: 0,\n\n\t\ttoArray: function () {\n\t\t\treturn slice.call(this);\n\t\t},\n\n\t\t// Get the Nth element in the matched element set OR\n\t\t// Get the whole matched element set as a clean array\n\t\tget: function (num) {\n\n\t\t\t// Return all the elements in a clean array\n\t\t\tif (num == null) {\n\t\t\t\treturn slice.call(this);\n\t\t\t}\n\n\t\t\t// Return just the one element from the set\n\t\t\treturn num < 0 ? this[num + this.length] : this[num];\n\t\t},\n\n\t\t// Take an array of elements and push it onto the stack\n\t\t// (returning the new matched element set)\n\t\tpushStack: function (elems) {\n\n\t\t\t// Build a new jQuery matched element set\n\t\t\tvar ret = jQuery.merge(this.constructor(), elems);\n\n\t\t\t// Add the old object onto the stack (as a reference)\n\t\t\tret.prevObject = this;\n\n\t\t\t// Return the newly-formed element set\n\t\t\treturn ret;\n\t\t},\n\n\t\t// Execute a callback for every element in the matched set.\n\t\teach: function (callback) {\n\t\t\treturn jQuery.each(this, callback);\n\t\t},\n\n\t\tmap: function (callback) {\n\t\t\treturn this.pushStack(jQuery.map(this, function (elem, i) {\n\t\t\t\treturn callback.call(elem, i, elem);\n\t\t\t}));\n\t\t},\n\n\t\tslice: function () {\n\t\t\treturn this.pushStack(slice.apply(this, arguments));\n\t\t},\n\n\t\tfirst: function () {\n\t\t\treturn this.eq(0);\n\t\t},\n\n\t\tlast: function () {\n\t\t\treturn this.eq(-1);\n\t\t},\n\n\t\teven: function () {\n\t\t\treturn this.pushStack(jQuery.grep(this, function (_elem, i) {\n\t\t\t\treturn (i + 1) % 2;\n\t\t\t}));\n\t\t},\n\n\t\todd: function () {\n\t\t\treturn this.pushStack(jQuery.grep(this, function (_elem, i) {\n\t\t\t\treturn i % 2;\n\t\t\t}));\n\t\t},\n\n\t\teq: function (i) {\n\t\t\tvar len = this.length,\n\t\t\t\tj = +i + (i < 0 ? len : 0);\n\t\t\treturn this.pushStack(j >= 0 && j < len ? [this[j]] : []);\n\t\t},\n\n\t\tend: function () {\n\t\t\treturn this.prevObject || this.constructor();\n\t\t},\n\n\t\t// For internal use only.\n\t\t// Behaves like an Array's method, not like a jQuery method.\n\t\tpush: push,\n\t\tsort: arr.sort,\n\t\tsplice: arr.splice\n\t};\n\n\tjQuery.extend = jQuery.fn.extend = function () {\n\t\tvar options, name, src, copy, copyIsArray, clone,\n\t\t\ttarget = arguments[0] || {},\n\t\t\ti = 1,\n\t\t\tlength = arguments.length,\n\t\t\tdeep = false;\n\n\t\t// Handle a deep copy situation\n\t\tif (typeof target === \"boolean\") {\n\t\t\tdeep = target;\n\n\t\t\t// Skip the boolean and the target\n\t\t\ttarget = arguments[i] || {};\n\t\t\ti++;\n\t\t}\n\n\t\t// Handle case when target is a string or something (possible in deep copy)\n\t\tif (typeof target !== \"object\" && !isFunction(target)) {\n\t\t\ttarget = {};\n\t\t}\n\n\t\t// Extend jQuery itself if only one argument is passed\n\t\tif (i === length) {\n\t\t\ttarget = this;\n\t\t\ti--;\n\t\t}\n\n\t\tfor (; i < length; i++) {\n\n\t\t\t// Only deal with non-null/undefined values\n\t\t\tif ((options = arguments[i]) != null) {\n\n\t\t\t\t// Extend the base object\n\t\t\t\tfor (name in options) {\n\t\t\t\t\tcopy = options[name];\n\n\t\t\t\t\t// Prevent Object.prototype pollution\n\t\t\t\t\t// Prevent never-ending loop\n\t\t\t\t\tif (name === \"__proto__\" || target === copy) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\t\tif (deep && copy && (jQuery.isPlainObject(copy) ||\n\t\t\t\t\t\t(copyIsArray = Array.isArray(copy)))) {\n\t\t\t\t\t\tsrc = target[name];\n\n\t\t\t\t\t\t// Ensure proper type for the source value\n\t\t\t\t\t\tif (copyIsArray && !Array.isArray(src)) {\n\t\t\t\t\t\t\tclone = [];\n\t\t\t\t\t\t} else if (!copyIsArray && !jQuery.isPlainObject(src)) {\n\t\t\t\t\t\t\tclone = {};\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tclone = src;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcopyIsArray = false;\n\n\t\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\t\ttarget[name] = jQuery.extend(deep, clone, copy);\n\n\t\t\t\t\t\t// Don't bring in undefined values\n\t\t\t\t\t} else if (copy !== undefined) {\n\t\t\t\t\t\ttarget[name] = copy;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Return the modified object\n\t\treturn target;\n\t};\n\n\tjQuery.extend({\n\n\t\t// Unique for each copy of jQuery on the page\n\t\texpando: \"jQuery\" + (version + Math.random()).replace(/\\D/g, \"\"),\n\n\t\t// Assume jQuery is ready without the ready module\n\t\tisReady: true,\n\n\t\terror: function (msg) {\n\t\t\tthrow new Error(msg);\n\t\t},\n\n\t\tnoop: function () { },\n\n\t\tisPlainObject: function (obj) {\n\t\t\tvar proto, Ctor;\n\n\t\t\t// Detect obvious negatives\n\t\t\t// Use toString instead of jQuery.type to catch host objects\n\t\t\tif (!obj || toString.call(obj) !== \"[object Object]\") {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tproto = getProto(obj);\n\n\t\t\t// Objects with no prototype (e.g., `Object.create( null )`) are plain\n\t\t\tif (!proto) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\t// Objects with prototype are plain iff they were constructed by a global Object function\n\t\t\tCtor = hasOwn.call(proto, \"constructor\") && proto.constructor;\n\t\t\treturn typeof Ctor === \"function\" && fnToString.call(Ctor) === ObjectFunctionString;\n\t\t},\n\n\t\tisEmptyObject: function (obj) {\n\t\t\tvar name;\n\n\t\t\tfor (name in obj) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\n\t\t// Evaluates a script in a provided context; falls back to the global one\n\t\t// if not specified.\n\t\tglobalEval: function (code, options, doc) {\n\t\t\tDOMEval(code, { nonce: options && options.nonce }, doc);\n\t\t},\n\n\t\teach: function (obj, callback) {\n\t\t\tvar length, i = 0;\n\n\t\t\tif (isArrayLike(obj)) {\n\t\t\t\tlength = obj.length;\n\t\t\t\tfor (; i < length; i++) {\n\t\t\t\t\tif (callback.call(obj[i], i, obj[i]) === false) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor (i in obj) {\n\t\t\t\t\tif (callback.call(obj[i], i, obj[i]) === false) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn obj;\n\t\t},\n\n\n\t\t// Retrieve the text value of an array of DOM nodes\n\t\ttext: function (elem) {\n\t\t\tvar node,\n\t\t\t\tret = \"\",\n\t\t\t\ti = 0,\n\t\t\t\tnodeType = elem.nodeType;\n\n\t\t\tif (!nodeType) {\n\n\t\t\t\t// If no nodeType, this is expected to be an array\n\t\t\t\twhile ((node = elem[i++])) {\n\n\t\t\t\t\t// Do not traverse comment nodes\n\t\t\t\t\tret += jQuery.text(node);\n\t\t\t\t}\n\t\t\t} else if (nodeType === 1 || nodeType === 9 || nodeType === 11) {\n\t\t\t\treturn elem.textContent;\n\t\t\t} else if (nodeType === 3 || nodeType === 4) {\n\t\t\t\treturn elem.nodeValue;\n\t\t\t}\n\n\t\t\t// Do not include comment or processing instruction nodes\n\n\t\t\treturn ret;\n\t\t},\n\n\t\t// results is for internal usage only\n\t\tmakeArray: function (arr, results) {\n\t\t\tvar ret = results || [];\n\n\t\t\tif (arr != null) {\n\t\t\t\tif (isArrayLike(Object(arr))) {\n\t\t\t\t\tjQuery.merge(ret,\n\t\t\t\t\t\ttypeof arr === \"string\" ?\n\t\t\t\t\t\t\t[arr] : arr\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\tpush.call(ret, arr);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn ret;\n\t\t},\n\n\t\tinArray: function (elem, arr, i) {\n\t\t\treturn arr == null ? -1 : indexOf.call(arr, elem, i);\n\t\t},\n\n\t\tisXMLDoc: function (elem) {\n\t\t\tvar namespace = elem && elem.namespaceURI,\n\t\t\t\tdocElem = elem && (elem.ownerDocument || elem).documentElement;\n\n\t\t\t// Assume HTML when documentElement doesn't yet exist, such as inside\n\t\t\t// document fragments.\n\t\t\treturn !rhtmlSuffix.test(namespace || docElem && docElem.nodeName || \"HTML\");\n\t\t},\n\n\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\tmerge: function (first, second) {\n\t\t\tvar len = +second.length,\n\t\t\t\tj = 0,\n\t\t\t\ti = first.length;\n\n\t\t\tfor (; j < len; j++) {\n\t\t\t\tfirst[i++] = second[j];\n\t\t\t}\n\n\t\t\tfirst.length = i;\n\n\t\t\treturn first;\n\t\t},\n\n\t\tgrep: function (elems, callback, invert) {\n\t\t\tvar callbackInverse,\n\t\t\t\tmatches = [],\n\t\t\t\ti = 0,\n\t\t\t\tlength = elems.length,\n\t\t\t\tcallbackExpect = !invert;\n\n\t\t\t// Go through the array, only saving the items\n\t\t\t// that pass the validator function\n\t\t\tfor (; i < length; i++) {\n\t\t\t\tcallbackInverse = !callback(elems[i], i);\n\t\t\t\tif (callbackInverse !== callbackExpect) {\n\t\t\t\t\tmatches.push(elems[i]);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn matches;\n\t\t},\n\n\t\t// arg is for internal usage only\n\t\tmap: function (elems, callback, arg) {\n\t\t\tvar length, value,\n\t\t\t\ti = 0,\n\t\t\t\tret = [];\n\n\t\t\t// Go through the array, translating each of the items to their new values\n\t\t\tif (isArrayLike(elems)) {\n\t\t\t\tlength = elems.length;\n\t\t\t\tfor (; i < length; i++) {\n\t\t\t\t\tvalue = callback(elems[i], i, arg);\n\n\t\t\t\t\tif (value != null) {\n\t\t\t\t\t\tret.push(value);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Go through every key on the object,\n\t\t\t} else {\n\t\t\t\tfor (i in elems) {\n\t\t\t\t\tvalue = callback(elems[i], i, arg);\n\n\t\t\t\t\tif (value != null) {\n\t\t\t\t\t\tret.push(value);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Flatten any nested arrays\n\t\t\treturn flat(ret);\n\t\t},\n\n\t\t// A global GUID counter for objects\n\t\tguid: 1,\n\n\t\t// jQuery.support is not used in Core but other projects attach their\n\t\t// properties to it so it needs to exist.\n\t\tsupport: support\n\t});\n\n\tif (typeof Symbol === \"function\") {\n\t\tjQuery.fn[Symbol.iterator] = arr[Symbol.iterator];\n\t}\n\n\t// Populate the class2type map\n\tjQuery.each(\"Boolean Number String Function Array Date RegExp Object Error Symbol\".split(\" \"),\n\t\tfunction (_i, name) {\n\t\t\tclass2type[\"[object \" + name + \"]\"] = name.toLowerCase();\n\t\t});\n\n\tfunction isArrayLike(obj) {\n\n\t\t// Support: real iOS 8.2 only (not reproducible in simulator)\n\t\t// `in` check used to prevent JIT error (gh-2145)\n\t\t// hasOwn isn't used here due to false negatives\n\t\t// regarding Nodelist length in IE\n\t\tvar length = !!obj && \"length\" in obj && obj.length,\n\t\t\ttype = toType(obj);\n\n\t\tif (isFunction(obj) || isWindow(obj)) {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn type === \"array\" || length === 0 ||\n\t\t\ttypeof length === \"number\" && length > 0 && (length - 1) in obj;\n\t}\n\n\n\tfunction nodeName(elem, name) {\n\n\t\treturn elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();\n\n\t}\n\tvar pop = arr.pop;\n\n\n\tvar sort = arr.sort;\n\n\n\tvar splice = arr.splice;\n\n\n\tvar whitespace = \"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\";\n\n\n\tvar rtrimCSS = new RegExp(\n\t\t\"^\" + whitespace + \"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\" + whitespace + \"+$\",\n\t\t\"g\"\n\t);\n\n\n\n\n\t// Note: an element does not contain itself\n\tjQuery.contains = function (a, b) {\n\t\tvar bup = b && b.parentNode;\n\n\t\treturn a === bup || !!(bup && bup.nodeType === 1 && (\n\n\t\t\t// Support: IE 9 - 11+\n\t\t\t// IE doesn't have `contains` on SVG.\n\t\t\ta.contains ?\n\t\t\t\ta.contains(bup) :\n\t\t\t\ta.compareDocumentPosition && a.compareDocumentPosition(bup) & 16\n\t\t));\n\t};\n\n\n\n\n\t// CSS string/identifier serialization\n\t// https://drafts.csswg.org/cssom/#common-serializing-idioms\n\tvar rcssescape = /([\\0-\\x1f\\x7f]|^-?\\d)|^-$|[^\\x80-\\uFFFF\\w-]/g;\n\n\tfunction fcssescape(ch, asCodePoint) {\n\t\tif (asCodePoint) {\n\n\t\t\t// U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER\n\t\t\tif (ch === \"\\0\") {\n\t\t\t\treturn \"\\uFFFD\";\n\t\t\t}\n\n\t\t\t// Control characters and (dependent upon position) numbers get escaped as code points\n\t\t\treturn ch.slice(0, -1) + \"\\\\\" + ch.charCodeAt(ch.length - 1).toString(16) + \" \";\n\t\t}\n\n\t\t// Other potentially-special ASCII characters get backslash-escaped\n\t\treturn \"\\\\\" + ch;\n\t}\n\n\tjQuery.escapeSelector = function (sel) {\n\t\treturn (sel + \"\").replace(rcssescape, fcssescape);\n\t};\n\n\n\n\n\tvar preferredDoc = document,\n\t\tpushNative = push;\n\n\t(function () {\n\n\t\tvar i,\n\t\t\tExpr,\n\t\t\toutermostContext,\n\t\t\tsortInput,\n\t\t\thasDuplicate,\n\t\t\tpush = pushNative,\n\n\t\t\t// Local document vars\n\t\t\tdocument,\n\t\t\tdocumentElement,\n\t\t\tdocumentIsHTML,\n\t\t\trbuggyQSA,\n\t\t\tmatches,\n\n\t\t\t// Instance-specific data\n\t\t\texpando = jQuery.expando,\n\t\t\tdirruns = 0,\n\t\t\tdone = 0,\n\t\t\tclassCache = createCache(),\n\t\t\ttokenCache = createCache(),\n\t\t\tcompilerCache = createCache(),\n\t\t\tnonnativeSelectorCache = createCache(),\n\t\t\tsortOrder = function (a, b) {\n\t\t\t\tif (a === b) {\n\t\t\t\t\thasDuplicate = true;\n\t\t\t\t}\n\t\t\t\treturn 0;\n\t\t\t},\n\n\t\t\tbooleans = \"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|\" +\n\t\t\t\t\"loop|multiple|open|readonly|required|scoped\",\n\n\t\t\t// Regular expressions\n\n\t\t\t// https://www.w3.org/TR/css-syntax-3/#ident-token-diagram\n\t\t\tidentifier = \"(?:\\\\\\\\[\\\\da-fA-F]{1,6}\" + whitespace +\n\t\t\t\t\"?|\\\\\\\\[^\\\\r\\\\n\\\\f]|[\\\\w-]|[^\\0-\\\\x7f])+\",\n\n\t\t\t// Attribute selectors: https://www.w3.org/TR/selectors/#attribute-selectors\n\t\t\tattributes = \"\\\\[\" + whitespace + \"*(\" + identifier + \")(?:\" + whitespace +\n\n\t\t\t\t// Operator (capture 2)\n\t\t\t\t\"*([*^$|!~]?=)\" + whitespace +\n\n\t\t\t\t// \"Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]\"\n\t\t\t\t\"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\" + identifier + \"))|)\" +\n\t\t\t\twhitespace + \"*\\\\]\",\n\n\t\t\tpseudos = \":(\" + identifier + \")(?:\\\\((\" +\n\n\t\t\t\t// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:\n\t\t\t\t// 1. quoted (capture 3; capture 4 or capture 5)\n\t\t\t\t\"('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|\" +\n\n\t\t\t\t// 2. simple (capture 6)\n\t\t\t\t\"((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\" + attributes + \")*)|\" +\n\n\t\t\t\t// 3. anything else (capture 2)\n\t\t\t\t\".*\" +\n\t\t\t\t\")\\\\)|)\",\n\n\t\t\t// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter\n\t\t\trwhitespace = new RegExp(whitespace + \"+\", \"g\"),\n\n\t\t\trcomma = new RegExp(\"^\" + whitespace + \"*,\" + whitespace + \"*\"),\n\t\t\trleadingCombinator = new RegExp(\"^\" + whitespace + \"*([>+~]|\" + whitespace + \")\" +\n\t\t\t\twhitespace + \"*\"),\n\t\t\trdescend = new RegExp(whitespace + \"|>\"),\n\n\t\t\trpseudo = new RegExp(pseudos),\n\t\t\tridentifier = new RegExp(\"^\" + identifier + \"$\"),\n\n\t\t\tmatchExpr = {\n\t\t\t\tID: new RegExp(\"^#(\" + identifier + \")\"),\n\t\t\t\tCLASS: new RegExp(\"^\\\\.(\" + identifier + \")\"),\n\t\t\t\tTAG: new RegExp(\"^(\" + identifier + \"|[*])\"),\n\t\t\t\tATTR: new RegExp(\"^\" + attributes),\n\t\t\t\tPSEUDO: new RegExp(\"^\" + pseudos),\n\t\t\t\tCHILD: new RegExp(\n\t\t\t\t\t\"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\" +\n\t\t\t\t\twhitespace + \"*(even|odd|(([+-]|)(\\\\d*)n|)\" + whitespace + \"*(?:([+-]|)\" +\n\t\t\t\t\twhitespace + \"*(\\\\d+)|))\" + whitespace + \"*\\\\)|)\", \"i\"),\n\t\t\t\tbool: new RegExp(\"^(?:\" + booleans + \")$\", \"i\"),\n\n\t\t\t\t// For use in libraries implementing .is()\n\t\t\t\t// We use this for POS matching in `select`\n\t\t\t\tneedsContext: new RegExp(\"^\" + whitespace +\n\t\t\t\t\t\"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\" + whitespace +\n\t\t\t\t\t\"*((?:-\\\\d)?\\\\d*)\" + whitespace + \"*\\\\)|)(?=[^-]|$)\", \"i\")\n\t\t\t},\n\n\t\t\trinputs = /^(?:input|select|textarea|button)$/i,\n\t\t\trheader = /^h\\d$/i,\n\n\t\t\t// Easily-parseable/retrievable ID or TAG or CLASS selectors\n\t\t\trquickExpr = /^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,\n\n\t\t\trsibling = /[+~]/,\n\n\t\t\t// CSS escapes\n\t\t\t// https://www.w3.org/TR/CSS21/syndata.html#escaped-characters\n\t\t\trunescape = new RegExp(\"\\\\\\\\[\\\\da-fA-F]{1,6}\" + whitespace +\n\t\t\t\t\"?|\\\\\\\\([^\\\\r\\\\n\\\\f])\", \"g\"),\n\t\t\tfunescape = function (escape, nonHex) {\n\t\t\t\tvar high = \"0x\" + escape.slice(1) - 0x10000;\n\n\t\t\t\tif (nonHex) {\n\n\t\t\t\t\t// Strip the backslash prefix from a non-hex escape sequence\n\t\t\t\t\treturn nonHex;\n\t\t\t\t}\n\n\t\t\t\t// Replace a hexadecimal escape sequence with the encoded Unicode code point\n\t\t\t\t// Support: IE <=11+\n\t\t\t\t// For values outside the Basic Multilingual Plane (BMP), manually construct a\n\t\t\t\t// surrogate pair\n\t\t\t\treturn high < 0 ?\n\t\t\t\t\tString.fromCharCode(high + 0x10000) :\n\t\t\t\t\tString.fromCharCode(high >> 10 | 0xD800, high & 0x3FF | 0xDC00);\n\t\t\t},\n\n\t\t\t// Used for iframes; see `setDocument`.\n\t\t\t// Support: IE 9 - 11+, Edge 12 - 18+\n\t\t\t// Removing the function wrapper causes a \"Permission Denied\"\n\t\t\t// error in IE/Edge.\n\t\t\tunloadHandler = function () {\n\t\t\t\tsetDocument();\n\t\t\t},\n\n\t\t\tinDisabledFieldset = addCombinator(\n\t\t\t\tfunction (elem) {\n\t\t\t\t\treturn elem.disabled === true && nodeName(elem, \"fieldset\");\n\t\t\t\t},\n\t\t\t\t{ dir: \"parentNode\", next: \"legend\" }\n\t\t\t);\n\n\t\t// Support: IE <=9 only\n\t\t// Accessing document.activeElement can throw unexpectedly\n\t\t// https://bugs.jquery.com/ticket/13393\n\t\tfunction safeActiveElement() {\n\t\t\ttry {\n\t\t\t\treturn document.activeElement;\n\t\t\t} catch (err) { }\n\t\t}\n\n\t\t// Optimize for push.apply( _, NodeList )\n\t\ttry {\n\t\t\tpush.apply(\n\t\t\t\t(arr = slice.call(preferredDoc.childNodes)),\n\t\t\t\tpreferredDoc.childNodes\n\t\t\t);\n\n\t\t\t// Support: Android <=4.0\n\t\t\t// Detect silently failing push.apply\n\t\t\t// eslint-disable-next-line no-unused-expressions\n\t\t\tarr[preferredDoc.childNodes.length].nodeType;\n\t\t} catch (e) {\n\t\t\tpush = {\n\t\t\t\tapply: function (target, els) {\n\t\t\t\t\tpushNative.apply(target, slice.call(els));\n\t\t\t\t},\n\t\t\t\tcall: function (target) {\n\t\t\t\t\tpushNative.apply(target, slice.call(arguments, 1));\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\n\t\tfunction find(selector, context, results, seed) {\n\t\t\tvar m, i, elem, nid, match, groups, newSelector,\n\t\t\t\tnewContext = context && context.ownerDocument,\n\n\t\t\t\t// nodeType defaults to 9, since context defaults to document\n\t\t\t\tnodeType = context ? context.nodeType : 9;\n\n\t\t\tresults = results || [];\n\n\t\t\t// Return early from calls with invalid selector or context\n\t\t\tif (typeof selector !== \"string\" || !selector ||\n\t\t\t\tnodeType !== 1 && nodeType !== 9 && nodeType !== 11) {\n\n\t\t\t\treturn results;\n\t\t\t}\n\n\t\t\t// Try to shortcut find operations (as opposed to filters) in HTML documents\n\t\t\tif (!seed) {\n\t\t\t\tsetDocument(context);\n\t\t\t\tcontext = context || document;\n\n\t\t\t\tif (documentIsHTML) {\n\n\t\t\t\t\t// If the selector is sufficiently simple, try using a \"get*By*\" DOM method\n\t\t\t\t\t// (excepting DocumentFragment context, where the methods don't exist)\n\t\t\t\t\tif (nodeType !== 11 && (match = rquickExpr.exec(selector))) {\n\n\t\t\t\t\t\t// ID selector\n\t\t\t\t\t\tif ((m = match[1])) {\n\n\t\t\t\t\t\t\t// Document context\n\t\t\t\t\t\t\tif (nodeType === 9) {\n\t\t\t\t\t\t\t\tif ((elem = context.getElementById(m))) {\n\n\t\t\t\t\t\t\t\t\t// Support: IE 9 only\n\t\t\t\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\t\t\t\tif (elem.id === m) {\n\t\t\t\t\t\t\t\t\t\tpush.call(results, elem);\n\t\t\t\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t// Element context\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t// Support: IE 9 only\n\t\t\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\t\t\tif (newContext && (elem = newContext.getElementById(m)) &&\n\t\t\t\t\t\t\t\t\tfind.contains(context, elem) &&\n\t\t\t\t\t\t\t\t\telem.id === m) {\n\n\t\t\t\t\t\t\t\t\tpush.call(results, elem);\n\t\t\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Type selector\n\t\t\t\t\t\t} else if (match[2]) {\n\t\t\t\t\t\t\tpush.apply(results, context.getElementsByTagName(selector));\n\t\t\t\t\t\t\treturn results;\n\n\t\t\t\t\t\t\t// Class selector\n\t\t\t\t\t\t} else if ((m = match[3]) && context.getElementsByClassName) {\n\t\t\t\t\t\t\tpush.apply(results, context.getElementsByClassName(m));\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Take advantage of querySelectorAll\n\t\t\t\t\tif (!nonnativeSelectorCache[selector + \" \"] &&\n\t\t\t\t\t\t(!rbuggyQSA || !rbuggyQSA.test(selector))) {\n\n\t\t\t\t\t\tnewSelector = selector;\n\t\t\t\t\t\tnewContext = context;\n\n\t\t\t\t\t\t// qSA considers elements outside a scoping root when evaluating child or\n\t\t\t\t\t\t// descendant combinators, which is not what we want.\n\t\t\t\t\t\t// In such cases, we work around the behavior by prefixing every selector in the\n\t\t\t\t\t\t// list with an ID selector referencing the scope context.\n\t\t\t\t\t\t// The technique has to be used as well when a leading combinator is used\n\t\t\t\t\t\t// as such selectors are not recognized by querySelectorAll.\n\t\t\t\t\t\t// Thanks to Andrew Dupont for this technique.\n\t\t\t\t\t\tif (nodeType === 1 &&\n\t\t\t\t\t\t\t(rdescend.test(selector) || rleadingCombinator.test(selector))) {\n\n\t\t\t\t\t\t\t// Expand context for sibling selectors\n\t\t\t\t\t\t\tnewContext = rsibling.test(selector) && testContext(context.parentNode) ||\n\t\t\t\t\t\t\t\tcontext;\n\n\t\t\t\t\t\t\t// We can use :scope instead of the ID hack if the browser\n\t\t\t\t\t\t\t// supports it & if we're not changing the context.\n\t\t\t\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when\n\t\t\t\t\t\t\t// strict-comparing two documents; shallow comparisons work.\n\t\t\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\t\t\tif (newContext != context || !support.scope) {\n\n\t\t\t\t\t\t\t\t// Capture the context ID, setting it first if necessary\n\t\t\t\t\t\t\t\tif ((nid = context.getAttribute(\"id\"))) {\n\t\t\t\t\t\t\t\t\tnid = jQuery.escapeSelector(nid);\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tcontext.setAttribute(\"id\", (nid = expando));\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Prefix every selector in the list\n\t\t\t\t\t\t\tgroups = tokenize(selector);\n\t\t\t\t\t\t\ti = groups.length;\n\t\t\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\t\t\tgroups[i] = (nid ? \"#\" + nid : \":scope\") + \" \" +\n\t\t\t\t\t\t\t\t\ttoSelector(groups[i]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tnewSelector = groups.join(\",\");\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tpush.apply(results,\n\t\t\t\t\t\t\t\tnewContext.querySelectorAll(newSelector)\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t} catch (qsaError) {\n\t\t\t\t\t\t\tnonnativeSelectorCache(selector, true);\n\t\t\t\t\t\t} finally {\n\t\t\t\t\t\t\tif (nid === expando) {\n\t\t\t\t\t\t\t\tcontext.removeAttribute(\"id\");\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// All others\n\t\t\treturn select(selector.replace(rtrimCSS, \"$1\"), context, results, seed);\n\t\t}\n\n\t\t/**\n\t\t * Create key-value caches of limited size\n\t\t * @returns {function(string, object)} Returns the Object data after storing it on itself with\n\t\t *\tproperty name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)\n\t\t *\tdeleting the oldest entry\n\t\t */\n\t\tfunction createCache() {\n\t\t\tvar keys = [];\n\n\t\t\tfunction cache(key, value) {\n\n\t\t\t\t// Use (key + \" \") to avoid collision with native prototype properties\n\t\t\t\t// (see https://github.com/jquery/sizzle/issues/157)\n\t\t\t\tif (keys.push(key + \" \") > Expr.cacheLength) {\n\n\t\t\t\t\t// Only keep the most recent entries\n\t\t\t\t\tdelete cache[keys.shift()];\n\t\t\t\t}\n\t\t\t\treturn (cache[key + \" \"] = value);\n\t\t\t}\n\t\t\treturn cache;\n\t\t}\n\n\t\t/**\n\t\t * Mark a function for special use by jQuery selector module\n\t\t * @param {Function} fn The function to mark\n\t\t */\n\t\tfunction markFunction(fn) {\n\t\t\tfn[expando] = true;\n\t\t\treturn fn;\n\t\t}\n\n\t\t/**\n\t\t * Support testing using an element\n\t\t * @param {Function} fn Passed the created element and returns a boolean result\n\t\t */\n\t\tfunction assert(fn) {\n\t\t\tvar el = document.createElement(\"fieldset\");\n\n\t\t\ttry {\n\t\t\t\treturn !!fn(el);\n\t\t\t} catch (e) {\n\t\t\t\treturn false;\n\t\t\t} finally {\n\n\t\t\t\t// Remove from its parent by default\n\t\t\t\tif (el.parentNode) {\n\t\t\t\t\tel.parentNode.removeChild(el);\n\t\t\t\t}\n\n\t\t\t\t// release memory in IE\n\t\t\t\tel = null;\n\t\t\t}\n\t\t}\n\n\t\t/**\n\t\t * Returns a function to use in pseudos for input types\n\t\t * @param {String} type\n\t\t */\n\t\tfunction createInputPseudo(type) {\n\t\t\treturn function (elem) {\n\t\t\t\treturn nodeName(elem, \"input\") && elem.type === type;\n\t\t\t};\n\t\t}\n\n\t\t/**\n\t\t * Returns a function to use in pseudos for buttons\n\t\t * @param {String} type\n\t\t */\n\t\tfunction createButtonPseudo(type) {\n\t\t\treturn function (elem) {\n\t\t\t\treturn (nodeName(elem, \"input\") || nodeName(elem, \"button\")) &&\n\t\t\t\t\telem.type === type;\n\t\t\t};\n\t\t}\n\n\t\t/**\n\t\t * Returns a function to use in pseudos for :enabled/:disabled\n\t\t * @param {Boolean} disabled true for :disabled; false for :enabled\n\t\t */\n\t\tfunction createDisabledPseudo(disabled) {\n\n\t\t\t// Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable\n\t\t\treturn function (elem) {\n\n\t\t\t\t// Only certain elements can match :enabled or :disabled\n\t\t\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled\n\t\t\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled\n\t\t\t\tif (\"form\" in elem) {\n\n\t\t\t\t\t// Check for inherited disabledness on relevant non-disabled elements:\n\t\t\t\t\t// * listed form-associated elements in a disabled fieldset\n\t\t\t\t\t//   https://html.spec.whatwg.org/multipage/forms.html#category-listed\n\t\t\t\t\t//   https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled\n\t\t\t\t\t// * option elements in a disabled optgroup\n\t\t\t\t\t//   https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled\n\t\t\t\t\t// All such elements have a \"form\" property.\n\t\t\t\t\tif (elem.parentNode && elem.disabled === false) {\n\n\t\t\t\t\t\t// Option elements defer to a parent optgroup if present\n\t\t\t\t\t\tif (\"label\" in elem) {\n\t\t\t\t\t\t\tif (\"label\" in elem.parentNode) {\n\t\t\t\t\t\t\t\treturn elem.parentNode.disabled === disabled;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\treturn elem.disabled === disabled;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Support: IE 6 - 11+\n\t\t\t\t\t\t// Use the isDisabled shortcut property to check for disabled fieldset ancestors\n\t\t\t\t\t\treturn elem.isDisabled === disabled ||\n\n\t\t\t\t\t\t\t// Where there is no isDisabled, check manually\n\t\t\t\t\t\t\telem.isDisabled !== !disabled &&\n\t\t\t\t\t\t\tinDisabledFieldset(elem) === disabled;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn elem.disabled === disabled;\n\n\t\t\t\t\t// Try to winnow out elements that can't be disabled before trusting the disabled property.\n\t\t\t\t\t// Some victims get caught in our net (label, legend, menu, track), but it shouldn't\n\t\t\t\t\t// even exist on them, let alone have a boolean value.\n\t\t\t\t} else if (\"label\" in elem) {\n\t\t\t\t\treturn elem.disabled === disabled;\n\t\t\t\t}\n\n\t\t\t\t// Remaining elements are neither :enabled nor :disabled\n\t\t\t\treturn false;\n\t\t\t};\n\t\t}\n\n\t\t/**\n\t\t * Returns a function to use in pseudos for positionals\n\t\t * @param {Function} fn\n\t\t */\n\t\tfunction createPositionalPseudo(fn) {\n\t\t\treturn markFunction(function (argument) {\n\t\t\t\targument = +argument;\n\t\t\t\treturn markFunction(function (seed, matches) {\n\t\t\t\t\tvar j,\n\t\t\t\t\t\tmatchIndexes = fn([], seed.length, argument),\n\t\t\t\t\t\ti = matchIndexes.length;\n\n\t\t\t\t\t// Match elements found at the specified indexes\n\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\tif (seed[(j = matchIndexes[i])]) {\n\t\t\t\t\t\t\tseed[j] = !(matches[j] = seed[j]);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\n\t\t/**\n\t\t * Checks a node for validity as a jQuery selector context\n\t\t * @param {Element|Object=} context\n\t\t * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value\n\t\t */\n\t\tfunction testContext(context) {\n\t\t\treturn context && typeof context.getElementsByTagName !== \"undefined\" && context;\n\t\t}\n\n\t\t/**\n\t\t * Sets document-related variables once based on the current document\n\t\t * @param {Element|Object} [node] An element or document object to use to set the document\n\t\t * @returns {Object} Returns the current document\n\t\t */\n\t\tfunction setDocument(node) {\n\t\t\tvar subWindow,\n\t\t\t\tdoc = node ? node.ownerDocument || node : preferredDoc;\n\n\t\t\t// Return early if doc is invalid or already selected\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tif (doc == document || doc.nodeType !== 9 || !doc.documentElement) {\n\t\t\t\treturn document;\n\t\t\t}\n\n\t\t\t// Update global variables\n\t\t\tdocument = doc;\n\t\t\tdocumentElement = document.documentElement;\n\t\t\tdocumentIsHTML = !jQuery.isXMLDoc(document);\n\n\t\t\t// Support: iOS 7 only, IE 9 - 11+\n\t\t\t// Older browsers didn't support unprefixed `matches`.\n\t\t\tmatches = documentElement.matches ||\n\t\t\t\tdocumentElement.webkitMatchesSelector ||\n\t\t\t\tdocumentElement.msMatchesSelector;\n\n\t\t\t// Support: IE 9 - 11+, Edge 12 - 18+\n\t\t\t// Accessing iframe documents after unload throws \"permission denied\" errors (see trac-13936)\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tif (preferredDoc != document &&\n\t\t\t\t(subWindow = document.defaultView) && subWindow.top !== subWindow) {\n\n\t\t\t\t// Support: IE 9 - 11+, Edge 12 - 18+\n\t\t\t\tsubWindow.addEventListener(\"unload\", unloadHandler);\n\t\t\t}\n\n\t\t\t// Support: IE <10\n\t\t\t// Check if getElementById returns elements by name\n\t\t\t// The broken getElementById methods don't pick up programmatically-set names,\n\t\t\t// so use a roundabout getElementsByName test\n\t\t\tsupport.getById = assert(function (el) {\n\t\t\t\tdocumentElement.appendChild(el).id = jQuery.expando;\n\t\t\t\treturn !document.getElementsByName ||\n\t\t\t\t\t!document.getElementsByName(jQuery.expando).length;\n\t\t\t});\n\n\t\t\t// Support: IE 9 only\n\t\t\t// Check to see if it's possible to do matchesSelector\n\t\t\t// on a disconnected node.\n\t\t\tsupport.disconnectedMatch = assert(function (el) {\n\t\t\t\treturn matches.call(el, \"*\");\n\t\t\t});\n\n\t\t\t// Support: IE 9 - 11+, Edge 12 - 18+\n\t\t\t// IE/Edge don't support the :scope pseudo-class.\n\t\t\tsupport.scope = assert(function () {\n\t\t\t\treturn document.querySelectorAll(\":scope\");\n\t\t\t});\n\n\t\t\t// Support: Chrome 105 - 111 only, Safari 15.4 - 16.3 only\n\t\t\t// Make sure the `:has()` argument is parsed unforgivingly.\n\t\t\t// We include `*` in the test to detect buggy implementations that are\n\t\t\t// _selectively_ forgiving (specifically when the list includes at least\n\t\t\t// one valid selector).\n\t\t\t// Note that we treat complete lack of support for `:has()` as if it were\n\t\t\t// spec-compliant support, which is fine because use of `:has()` in such\n\t\t\t// environments will fail in the qSA path and fall back to jQuery traversal\n\t\t\t// anyway.\n\t\t\tsupport.cssHas = assert(function () {\n\t\t\t\ttry {\n\t\t\t\t\tdocument.querySelector(\":has(*,:jqfake)\");\n\t\t\t\t\treturn false;\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t// ID filter and find\n\t\t\tif (support.getById) {\n\t\t\t\tExpr.filter.ID = function (id) {\n\t\t\t\t\tvar attrId = id.replace(runescape, funescape);\n\t\t\t\t\treturn function (elem) {\n\t\t\t\t\t\treturn elem.getAttribute(\"id\") === attrId;\n\t\t\t\t\t};\n\t\t\t\t};\n\t\t\t\tExpr.find.ID = function (id, context) {\n\t\t\t\t\tif (typeof context.getElementById !== \"undefined\" && documentIsHTML) {\n\t\t\t\t\t\tvar elem = context.getElementById(id);\n\t\t\t\t\t\treturn elem ? [elem] : [];\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t} else {\n\t\t\t\tExpr.filter.ID = function (id) {\n\t\t\t\t\tvar attrId = id.replace(runescape, funescape);\n\t\t\t\t\treturn function (elem) {\n\t\t\t\t\t\tvar node = typeof elem.getAttributeNode !== \"undefined\" &&\n\t\t\t\t\t\t\telem.getAttributeNode(\"id\");\n\t\t\t\t\t\treturn node && node.value === attrId;\n\t\t\t\t\t};\n\t\t\t\t};\n\n\t\t\t\t// Support: IE 6 - 7 only\n\t\t\t\t// getElementById is not reliable as a find shortcut\n\t\t\t\tExpr.find.ID = function (id, context) {\n\t\t\t\t\tif (typeof context.getElementById !== \"undefined\" && documentIsHTML) {\n\t\t\t\t\t\tvar node, i, elems,\n\t\t\t\t\t\t\telem = context.getElementById(id);\n\n\t\t\t\t\t\tif (elem) {\n\n\t\t\t\t\t\t\t// Verify the id attribute\n\t\t\t\t\t\t\tnode = elem.getAttributeNode(\"id\");\n\t\t\t\t\t\t\tif (node && node.value === id) {\n\t\t\t\t\t\t\t\treturn [elem];\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Fall back on getElementsByName\n\t\t\t\t\t\t\telems = context.getElementsByName(id);\n\t\t\t\t\t\t\ti = 0;\n\t\t\t\t\t\t\twhile ((elem = elems[i++])) {\n\t\t\t\t\t\t\t\tnode = elem.getAttributeNode(\"id\");\n\t\t\t\t\t\t\t\tif (node && node.value === id) {\n\t\t\t\t\t\t\t\t\treturn [elem];\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn [];\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\n\t\t\t// Tag\n\t\t\tExpr.find.TAG = function (tag, context) {\n\t\t\t\tif (typeof context.getElementsByTagName !== \"undefined\") {\n\t\t\t\t\treturn context.getElementsByTagName(tag);\n\n\t\t\t\t\t// DocumentFragment nodes don't have gEBTN\n\t\t\t\t} else {\n\t\t\t\t\treturn context.querySelectorAll(tag);\n\t\t\t\t}\n\t\t\t};\n\n\t\t\t// Class\n\t\t\tExpr.find.CLASS = function (className, context) {\n\t\t\t\tif (typeof context.getElementsByClassName !== \"undefined\" && documentIsHTML) {\n\t\t\t\t\treturn context.getElementsByClassName(className);\n\t\t\t\t}\n\t\t\t};\n\n\t\t\t/* QSA/matchesSelector\n\t\t\t---------------------------------------------------------------------- */\n\n\t\t\t// QSA and matchesSelector support\n\n\t\t\trbuggyQSA = [];\n\n\t\t\t// Build QSA regex\n\t\t\t// Regex strategy adopted from Diego Perini\n\t\t\tassert(function (el) {\n\n\t\t\t\tvar input;\n\n\t\t\t\tdocumentElement.appendChild(el).innerHTML =\n\t\t\t\t\t\"<a id='\" + expando + \"' href='' disabled='disabled'></a>\" +\n\t\t\t\t\t\"<select id='\" + expando + \"-\\r\\\\' disabled='disabled'>\" +\n\t\t\t\t\t\"<option selected=''></option></select>\";\n\n\t\t\t\t// Support: iOS <=7 - 8 only\n\t\t\t\t// Boolean attributes and \"value\" are not treated correctly in some XML documents\n\t\t\t\tif (!el.querySelectorAll(\"[selected]\").length) {\n\t\t\t\t\trbuggyQSA.push(\"\\\\[\" + whitespace + \"*(?:value|\" + booleans + \")\");\n\t\t\t\t}\n\n\t\t\t\t// Support: iOS <=7 - 8 only\n\t\t\t\tif (!el.querySelectorAll(\"[id~=\" + expando + \"-]\").length) {\n\t\t\t\t\trbuggyQSA.push(\"~=\");\n\t\t\t\t}\n\n\t\t\t\t// Support: iOS 8 only\n\t\t\t\t// https://bugs.webkit.org/show_bug.cgi?id=136851\n\t\t\t\t// In-page `selector#id sibling-combinator selector` fails\n\t\t\t\tif (!el.querySelectorAll(\"a#\" + expando + \"+*\").length) {\n\t\t\t\t\trbuggyQSA.push(\".#.+[+~]\");\n\t\t\t\t}\n\n\t\t\t\t// Support: Chrome <=105+, Firefox <=104+, Safari <=15.4+\n\t\t\t\t// In some of the document kinds, these selectors wouldn't work natively.\n\t\t\t\t// This is probably OK but for backwards compatibility we want to maintain\n\t\t\t\t// handling them through jQuery traversal in jQuery 3.x.\n\t\t\t\tif (!el.querySelectorAll(\":checked\").length) {\n\t\t\t\t\trbuggyQSA.push(\":checked\");\n\t\t\t\t}\n\n\t\t\t\t// Support: Windows 8 Native Apps\n\t\t\t\t// The type and name attributes are restricted during .innerHTML assignment\n\t\t\t\tinput = document.createElement(\"input\");\n\t\t\t\tinput.setAttribute(\"type\", \"hidden\");\n\t\t\t\tel.appendChild(input).setAttribute(\"name\", \"D\");\n\n\t\t\t\t// Support: IE 9 - 11+\n\t\t\t\t// IE's :disabled selector does not pick up the children of disabled fieldsets\n\t\t\t\t// Support: Chrome <=105+, Firefox <=104+, Safari <=15.4+\n\t\t\t\t// In some of the document kinds, these selectors wouldn't work natively.\n\t\t\t\t// This is probably OK but for backwards compatibility we want to maintain\n\t\t\t\t// handling them through jQuery traversal in jQuery 3.x.\n\t\t\t\tdocumentElement.appendChild(el).disabled = true;\n\t\t\t\tif (el.querySelectorAll(\":disabled\").length !== 2) {\n\t\t\t\t\trbuggyQSA.push(\":enabled\", \":disabled\");\n\t\t\t\t}\n\n\t\t\t\t// Support: IE 11+, Edge 15 - 18+\n\t\t\t\t// IE 11/Edge don't find elements on a `[name='']` query in some cases.\n\t\t\t\t// Adding a temporary attribute to the document before the selection works\n\t\t\t\t// around the issue.\n\t\t\t\t// Interestingly, IE 10 & older don't seem to have the issue.\n\t\t\t\tinput = document.createElement(\"input\");\n\t\t\t\tinput.setAttribute(\"name\", \"\");\n\t\t\t\tel.appendChild(input);\n\t\t\t\tif (!el.querySelectorAll(\"[name='']\").length) {\n\t\t\t\t\trbuggyQSA.push(\"\\\\[\" + whitespace + \"*name\" + whitespace + \"*=\" +\n\t\t\t\t\t\twhitespace + \"*(?:''|\\\"\\\")\");\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tif (!support.cssHas) {\n\n\t\t\t\t// Support: Chrome 105 - 110+, Safari 15.4 - 16.3+\n\t\t\t\t// Our regular `try-catch` mechanism fails to detect natively-unsupported\n\t\t\t\t// pseudo-classes inside `:has()` (such as `:has(:contains(\"Foo\"))`)\n\t\t\t\t// in browsers that parse the `:has()` argument as a forgiving selector list.\n\t\t\t\t// https://drafts.csswg.org/selectors/#relational now requires the argument\n\t\t\t\t// to be parsed unforgivingly, but browsers have not yet fully adjusted.\n\t\t\t\trbuggyQSA.push(\":has\");\n\t\t\t}\n\n\t\t\trbuggyQSA = rbuggyQSA.length && new RegExp(rbuggyQSA.join(\"|\"));\n\n\t\t\t/* Sorting\n\t\t\t---------------------------------------------------------------------- */\n\n\t\t\t// Document order sorting\n\t\t\tsortOrder = function (a, b) {\n\n\t\t\t\t// Flag for duplicate removal\n\t\t\t\tif (a === b) {\n\t\t\t\t\thasDuplicate = true;\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\n\t\t\t\t// Sort on method existence if only one input has compareDocumentPosition\n\t\t\t\tvar compare = !a.compareDocumentPosition - !b.compareDocumentPosition;\n\t\t\t\tif (compare) {\n\t\t\t\t\treturn compare;\n\t\t\t\t}\n\n\t\t\t\t// Calculate position if both inputs belong to the same document\n\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\tcompare = (a.ownerDocument || a) == (b.ownerDocument || b) ?\n\t\t\t\t\ta.compareDocumentPosition(b) :\n\n\t\t\t\t\t// Otherwise we know they are disconnected\n\t\t\t\t\t1;\n\n\t\t\t\t// Disconnected nodes\n\t\t\t\tif (compare & 1 ||\n\t\t\t\t\t(!support.sortDetached && b.compareDocumentPosition(a) === compare)) {\n\n\t\t\t\t\t// Choose the first element that is related to our preferred document\n\t\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\tif (a === document || a.ownerDocument == preferredDoc &&\n\t\t\t\t\t\tfind.contains(preferredDoc, a)) {\n\t\t\t\t\t\treturn -1;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\tif (b === document || b.ownerDocument == preferredDoc &&\n\t\t\t\t\t\tfind.contains(preferredDoc, b)) {\n\t\t\t\t\t\treturn 1;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Maintain original order\n\t\t\t\t\treturn sortInput ?\n\t\t\t\t\t\t(indexOf.call(sortInput, a) - indexOf.call(sortInput, b)) :\n\t\t\t\t\t\t0;\n\t\t\t\t}\n\n\t\t\t\treturn compare & 4 ? -1 : 1;\n\t\t\t};\n\n\t\t\treturn document;\n\t\t}\n\n\t\tfind.matches = function (expr, elements) {\n\t\t\treturn find(expr, null, null, elements);\n\t\t};\n\n\t\tfind.matchesSelector = function (elem, expr) {\n\t\t\tsetDocument(elem);\n\n\t\t\tif (documentIsHTML &&\n\t\t\t\t!nonnativeSelectorCache[expr + \" \"] &&\n\t\t\t\t(!rbuggyQSA || !rbuggyQSA.test(expr))) {\n\n\t\t\t\ttry {\n\t\t\t\t\tvar ret = matches.call(elem, expr);\n\n\t\t\t\t\t// IE 9's matchesSelector returns false on disconnected nodes\n\t\t\t\t\tif (ret || support.disconnectedMatch ||\n\n\t\t\t\t\t\t// As well, disconnected nodes are said to be in a document\n\t\t\t\t\t\t// fragment in IE 9\n\t\t\t\t\t\telem.document && elem.document.nodeType !== 11) {\n\t\t\t\t\t\treturn ret;\n\t\t\t\t\t}\n\t\t\t\t} catch (e) {\n\t\t\t\t\tnonnativeSelectorCache(expr, true);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn find(expr, document, null, [elem]).length > 0;\n\t\t};\n\n\t\tfind.contains = function (context, elem) {\n\n\t\t\t// Set document vars if needed\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tif ((context.ownerDocument || context) != document) {\n\t\t\t\tsetDocument(context);\n\t\t\t}\n\t\t\treturn jQuery.contains(context, elem);\n\t\t};\n\n\n\t\tfind.attr = function (elem, name) {\n\n\t\t\t// Set document vars if needed\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tif ((elem.ownerDocument || elem) != document) {\n\t\t\t\tsetDocument(elem);\n\t\t\t}\n\n\t\t\tvar fn = Expr.attrHandle[name.toLowerCase()],\n\n\t\t\t\t// Don't get fooled by Object.prototype properties (see trac-13807)\n\t\t\t\tval = fn && hasOwn.call(Expr.attrHandle, name.toLowerCase()) ?\n\t\t\t\t\tfn(elem, name, !documentIsHTML) :\n\t\t\t\t\tundefined;\n\n\t\t\tif (val !== undefined) {\n\t\t\t\treturn val;\n\t\t\t}\n\n\t\t\treturn elem.getAttribute(name);\n\t\t};\n\n\t\tfind.error = function (msg) {\n\t\t\tthrow new Error(\"Syntax error, unrecognized expression: \" + msg);\n\t\t};\n\n\t\t/**\n\t\t * Document sorting and removing duplicates\n\t\t * @param {ArrayLike} results\n\t\t */\n\t\tjQuery.uniqueSort = function (results) {\n\t\t\tvar elem,\n\t\t\t\tduplicates = [],\n\t\t\t\tj = 0,\n\t\t\t\ti = 0;\n\n\t\t\t// Unless we *know* we can detect duplicates, assume their presence\n\t\t\t//\n\t\t\t// Support: Android <=4.0+\n\t\t\t// Testing for detecting duplicates is unpredictable so instead assume we can't\n\t\t\t// depend on duplicate detection in all browsers without a stable sort.\n\t\t\thasDuplicate = !support.sortStable;\n\t\t\tsortInput = !support.sortStable && slice.call(results, 0);\n\t\t\tsort.call(results, sortOrder);\n\n\t\t\tif (hasDuplicate) {\n\t\t\t\twhile ((elem = results[i++])) {\n\t\t\t\t\tif (elem === results[i]) {\n\t\t\t\t\t\tj = duplicates.push(i);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\twhile (j--) {\n\t\t\t\t\tsplice.call(results, duplicates[j], 1);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Clear input after sorting to release objects\n\t\t\t// See https://github.com/jquery/sizzle/pull/225\n\t\t\tsortInput = null;\n\n\t\t\treturn results;\n\t\t};\n\n\t\tjQuery.fn.uniqueSort = function () {\n\t\t\treturn this.pushStack(jQuery.uniqueSort(slice.apply(this)));\n\t\t};\n\n\t\tExpr = jQuery.expr = {\n\n\t\t\t// Can be adjusted by the user\n\t\t\tcacheLength: 50,\n\n\t\t\tcreatePseudo: markFunction,\n\n\t\t\tmatch: matchExpr,\n\n\t\t\tattrHandle: {},\n\n\t\t\tfind: {},\n\n\t\t\trelative: {\n\t\t\t\t\">\": { dir: \"parentNode\", first: true },\n\t\t\t\t\" \": { dir: \"parentNode\" },\n\t\t\t\t\"+\": { dir: \"previousSibling\", first: true },\n\t\t\t\t\"~\": { dir: \"previousSibling\" }\n\t\t\t},\n\n\t\t\tpreFilter: {\n\t\t\t\tATTR: function (match) {\n\t\t\t\t\tmatch[1] = match[1].replace(runescape, funescape);\n\n\t\t\t\t\t// Move the given value to match[3] whether quoted or unquoted\n\t\t\t\t\tmatch[3] = (match[3] || match[4] || match[5] || \"\")\n\t\t\t\t\t\t.replace(runescape, funescape);\n\n\t\t\t\t\tif (match[2] === \"~=\") {\n\t\t\t\t\t\tmatch[3] = \" \" + match[3] + \" \";\n\t\t\t\t\t}\n\n\t\t\t\t\treturn match.slice(0, 4);\n\t\t\t\t},\n\n\t\t\t\tCHILD: function (match) {\n\n\t\t\t\t\t/* matches from matchExpr[\"CHILD\"]\n\t\t\t\t\t\t1 type (only|nth|...)\n\t\t\t\t\t\t2 what (child|of-type)\n\t\t\t\t\t\t3 argument (even|odd|\\d*|\\d*n([+-]\\d+)?|...)\n\t\t\t\t\t\t4 xn-component of xn+y argument ([+-]?\\d*n|)\n\t\t\t\t\t\t5 sign of xn-component\n\t\t\t\t\t\t6 x of xn-component\n\t\t\t\t\t\t7 sign of y-component\n\t\t\t\t\t\t8 y of y-component\n\t\t\t\t\t*/\n\t\t\t\t\tmatch[1] = match[1].toLowerCase();\n\n\t\t\t\t\tif (match[1].slice(0, 3) === \"nth\") {\n\n\t\t\t\t\t\t// nth-* requires argument\n\t\t\t\t\t\tif (!match[3]) {\n\t\t\t\t\t\t\tfind.error(match[0]);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// numeric x and y parameters for Expr.filter.CHILD\n\t\t\t\t\t\t// remember that false/true cast respectively to 0/1\n\t\t\t\t\t\tmatch[4] = +(match[4] ?\n\t\t\t\t\t\t\tmatch[5] + (match[6] || 1) :\n\t\t\t\t\t\t\t2 * (match[3] === \"even\" || match[3] === \"odd\")\n\t\t\t\t\t\t);\n\t\t\t\t\t\tmatch[5] = +((match[7] + match[8]) || match[3] === \"odd\");\n\n\t\t\t\t\t\t// other types prohibit arguments\n\t\t\t\t\t} else if (match[3]) {\n\t\t\t\t\t\tfind.error(match[0]);\n\t\t\t\t\t}\n\n\t\t\t\t\treturn match;\n\t\t\t\t},\n\n\t\t\t\tPSEUDO: function (match) {\n\t\t\t\t\tvar excess,\n\t\t\t\t\t\tunquoted = !match[6] && match[2];\n\n\t\t\t\t\tif (matchExpr.CHILD.test(match[0])) {\n\t\t\t\t\t\treturn null;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Accept quoted arguments as-is\n\t\t\t\t\tif (match[3]) {\n\t\t\t\t\t\tmatch[2] = match[4] || match[5] || \"\";\n\n\t\t\t\t\t\t// Strip excess characters from unquoted arguments\n\t\t\t\t\t} else if (unquoted && rpseudo.test(unquoted) &&\n\n\t\t\t\t\t\t// Get excess from tokenize (recursively)\n\t\t\t\t\t\t(excess = tokenize(unquoted, true)) &&\n\n\t\t\t\t\t\t// advance to the next closing parenthesis\n\t\t\t\t\t\t(excess = unquoted.indexOf(\")\", unquoted.length - excess) - unquoted.length)) {\n\n\t\t\t\t\t\t// excess is a negative index\n\t\t\t\t\t\tmatch[0] = match[0].slice(0, excess);\n\t\t\t\t\t\tmatch[2] = unquoted.slice(0, excess);\n\t\t\t\t\t}\n\n\t\t\t\t\t// Return only captures needed by the pseudo filter method (type and argument)\n\t\t\t\t\treturn match.slice(0, 3);\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tfilter: {\n\n\t\t\t\tTAG: function (nodeNameSelector) {\n\t\t\t\t\tvar expectedNodeName = nodeNameSelector.replace(runescape, funescape).toLowerCase();\n\t\t\t\t\treturn nodeNameSelector === \"*\" ?\n\t\t\t\t\t\tfunction () {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t} :\n\t\t\t\t\t\tfunction (elem) {\n\t\t\t\t\t\t\treturn nodeName(elem, expectedNodeName);\n\t\t\t\t\t\t};\n\t\t\t\t},\n\n\t\t\t\tCLASS: function (className) {\n\t\t\t\t\tvar pattern = classCache[className + \" \"];\n\n\t\t\t\t\treturn pattern ||\n\t\t\t\t\t\t(pattern = new RegExp(\"(^|\" + whitespace + \")\" + className +\n\t\t\t\t\t\t\t\"(\" + whitespace + \"|$)\")) &&\n\t\t\t\t\t\tclassCache(className, function (elem) {\n\t\t\t\t\t\t\treturn pattern.test(\n\t\t\t\t\t\t\t\ttypeof elem.className === \"string\" && elem.className ||\n\t\t\t\t\t\t\t\ttypeof elem.getAttribute !== \"undefined\" &&\n\t\t\t\t\t\t\t\telem.getAttribute(\"class\") ||\n\t\t\t\t\t\t\t\t\"\"\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t});\n\t\t\t\t},\n\n\t\t\t\tATTR: function (name, operator, check) {\n\t\t\t\t\treturn function (elem) {\n\t\t\t\t\t\tvar result = find.attr(elem, name);\n\n\t\t\t\t\t\tif (result == null) {\n\t\t\t\t\t\t\treturn operator === \"!=\";\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!operator) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tresult += \"\";\n\n\t\t\t\t\t\tif (operator === \"=\") {\n\t\t\t\t\t\t\treturn result === check;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (operator === \"!=\") {\n\t\t\t\t\t\t\treturn result !== check;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (operator === \"^=\") {\n\t\t\t\t\t\t\treturn check && result.indexOf(check) === 0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (operator === \"*=\") {\n\t\t\t\t\t\t\treturn check && result.indexOf(check) > -1;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (operator === \"$=\") {\n\t\t\t\t\t\t\treturn check && result.slice(-check.length) === check;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (operator === \"~=\") {\n\t\t\t\t\t\t\treturn (\" \" + result.replace(rwhitespace, \" \") + \" \")\n\t\t\t\t\t\t\t\t.indexOf(check) > -1;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (operator === \"|=\") {\n\t\t\t\t\t\t\treturn result === check || result.slice(0, check.length + 1) === check + \"-\";\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t};\n\t\t\t\t},\n\n\t\t\t\tCHILD: function (type, what, _argument, first, last) {\n\t\t\t\t\tvar simple = type.slice(0, 3) !== \"nth\",\n\t\t\t\t\t\tforward = type.slice(-4) !== \"last\",\n\t\t\t\t\t\tofType = what === \"of-type\";\n\n\t\t\t\t\treturn first === 1 && last === 0 ?\n\n\t\t\t\t\t\t// Shortcut for :nth-*(n)\n\t\t\t\t\t\tfunction (elem) {\n\t\t\t\t\t\t\treturn !!elem.parentNode;\n\t\t\t\t\t\t} :\n\n\t\t\t\t\t\tfunction (elem, _context, xml) {\n\t\t\t\t\t\t\tvar cache, outerCache, node, nodeIndex, start,\n\t\t\t\t\t\t\t\tdir = simple !== forward ? \"nextSibling\" : \"previousSibling\",\n\t\t\t\t\t\t\t\tparent = elem.parentNode,\n\t\t\t\t\t\t\t\tname = ofType && elem.nodeName.toLowerCase(),\n\t\t\t\t\t\t\t\tuseCache = !xml && !ofType,\n\t\t\t\t\t\t\t\tdiff = false;\n\n\t\t\t\t\t\t\tif (parent) {\n\n\t\t\t\t\t\t\t\t// :(first|last|only)-(child|of-type)\n\t\t\t\t\t\t\t\tif (simple) {\n\t\t\t\t\t\t\t\t\twhile (dir) {\n\t\t\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\t\t\twhile ((node = node[dir])) {\n\t\t\t\t\t\t\t\t\t\t\tif (ofType ?\n\t\t\t\t\t\t\t\t\t\t\t\tnodeName(node, name) :\n\t\t\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1) {\n\n\t\t\t\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t// Reverse direction for :only-* (if we haven't yet done so)\n\t\t\t\t\t\t\t\t\t\tstart = dir = type === \"only\" && !start && \"nextSibling\";\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tstart = [forward ? parent.firstChild : parent.lastChild];\n\n\t\t\t\t\t\t\t\t// non-xml :nth-child(...) stores cache data on `parent`\n\t\t\t\t\t\t\t\tif (forward && useCache) {\n\n\t\t\t\t\t\t\t\t\t// Seek `elem` from a previously-cached index\n\t\t\t\t\t\t\t\t\touterCache = parent[expando] || (parent[expando] = {});\n\t\t\t\t\t\t\t\t\tcache = outerCache[type] || [];\n\t\t\t\t\t\t\t\t\tnodeIndex = cache[0] === dirruns && cache[1];\n\t\t\t\t\t\t\t\t\tdiff = nodeIndex && cache[2];\n\t\t\t\t\t\t\t\t\tnode = nodeIndex && parent.childNodes[nodeIndex];\n\n\t\t\t\t\t\t\t\t\twhile ((node = ++nodeIndex && node && node[dir] ||\n\n\t\t\t\t\t\t\t\t\t\t// Fallback to seeking `elem` from the start\n\t\t\t\t\t\t\t\t\t\t(diff = nodeIndex = 0) || start.pop())) {\n\n\t\t\t\t\t\t\t\t\t\t// When found, cache indexes on `parent` and break\n\t\t\t\t\t\t\t\t\t\tif (node.nodeType === 1 && ++diff && node === elem) {\n\t\t\t\t\t\t\t\t\t\t\touterCache[type] = [dirruns, nodeIndex, diff];\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t// Use previously-cached element index if available\n\t\t\t\t\t\t\t\t\tif (useCache) {\n\t\t\t\t\t\t\t\t\t\touterCache = elem[expando] || (elem[expando] = {});\n\t\t\t\t\t\t\t\t\t\tcache = outerCache[type] || [];\n\t\t\t\t\t\t\t\t\t\tnodeIndex = cache[0] === dirruns && cache[1];\n\t\t\t\t\t\t\t\t\t\tdiff = nodeIndex;\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// xml :nth-child(...)\n\t\t\t\t\t\t\t\t\t// or :nth-last-child(...) or :nth(-last)?-of-type(...)\n\t\t\t\t\t\t\t\t\tif (diff === false) {\n\n\t\t\t\t\t\t\t\t\t\t// Use the same loop as above to seek `elem` from the start\n\t\t\t\t\t\t\t\t\t\twhile ((node = ++nodeIndex && node && node[dir] ||\n\t\t\t\t\t\t\t\t\t\t\t(diff = nodeIndex = 0) || start.pop())) {\n\n\t\t\t\t\t\t\t\t\t\t\tif ((ofType ?\n\t\t\t\t\t\t\t\t\t\t\t\tnodeName(node, name) :\n\t\t\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1) &&\n\t\t\t\t\t\t\t\t\t\t\t\t++diff) {\n\n\t\t\t\t\t\t\t\t\t\t\t\t// Cache the index of each encountered element\n\t\t\t\t\t\t\t\t\t\t\t\tif (useCache) {\n\t\t\t\t\t\t\t\t\t\t\t\t\touterCache = node[expando] ||\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t(node[expando] = {});\n\t\t\t\t\t\t\t\t\t\t\t\t\touterCache[type] = [dirruns, diff];\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\tif (node === elem) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t// Incorporate the offset, then check against cycle size\n\t\t\t\t\t\t\t\tdiff -= last;\n\t\t\t\t\t\t\t\treturn diff === first || (diff % first === 0 && diff / first >= 0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\t\t\t\t},\n\n\t\t\t\tPSEUDO: function (pseudo, argument) {\n\n\t\t\t\t\t// pseudo-class names are case-insensitive\n\t\t\t\t\t// https://www.w3.org/TR/selectors/#pseudo-classes\n\t\t\t\t\t// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters\n\t\t\t\t\t// Remember that setFilters inherits from pseudos\n\t\t\t\t\tvar args,\n\t\t\t\t\t\tfn = Expr.pseudos[pseudo] || Expr.setFilters[pseudo.toLowerCase()] ||\n\t\t\t\t\t\t\tfind.error(\"unsupported pseudo: \" + pseudo);\n\n\t\t\t\t\t// The user may use createPseudo to indicate that\n\t\t\t\t\t// arguments are needed to create the filter function\n\t\t\t\t\t// just as jQuery does\n\t\t\t\t\tif (fn[expando]) {\n\t\t\t\t\t\treturn fn(argument);\n\t\t\t\t\t}\n\n\t\t\t\t\t// But maintain support for old signatures\n\t\t\t\t\tif (fn.length > 1) {\n\t\t\t\t\t\targs = [pseudo, pseudo, \"\", argument];\n\t\t\t\t\t\treturn Expr.setFilters.hasOwnProperty(pseudo.toLowerCase()) ?\n\t\t\t\t\t\t\tmarkFunction(function (seed, matches) {\n\t\t\t\t\t\t\t\tvar idx,\n\t\t\t\t\t\t\t\t\tmatched = fn(seed, argument),\n\t\t\t\t\t\t\t\t\ti = matched.length;\n\t\t\t\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\t\t\t\tidx = indexOf.call(seed, matched[i]);\n\t\t\t\t\t\t\t\t\tseed[idx] = !(matches[idx] = matched[i]);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}) :\n\t\t\t\t\t\t\tfunction (elem) {\n\t\t\t\t\t\t\t\treturn fn(elem, 0, args);\n\t\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\treturn fn;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tpseudos: {\n\n\t\t\t\t// Potentially complex pseudos\n\t\t\t\tnot: markFunction(function (selector) {\n\n\t\t\t\t\t// Trim the selector passed to compile\n\t\t\t\t\t// to avoid treating leading and trailing\n\t\t\t\t\t// spaces as combinators\n\t\t\t\t\tvar input = [],\n\t\t\t\t\t\tresults = [],\n\t\t\t\t\t\tmatcher = compile(selector.replace(rtrimCSS, \"$1\"));\n\n\t\t\t\t\treturn matcher[expando] ?\n\t\t\t\t\t\tmarkFunction(function (seed, matches, _context, xml) {\n\t\t\t\t\t\t\tvar elem,\n\t\t\t\t\t\t\t\tunmatched = matcher(seed, null, xml, []),\n\t\t\t\t\t\t\t\ti = seed.length;\n\n\t\t\t\t\t\t\t// Match elements unmatched by `matcher`\n\t\t\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\t\t\tif ((elem = unmatched[i])) {\n\t\t\t\t\t\t\t\t\tseed[i] = !(matches[i] = elem);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}) :\n\t\t\t\t\t\tfunction (elem, _context, xml) {\n\t\t\t\t\t\t\tinput[0] = elem;\n\t\t\t\t\t\t\tmatcher(input, null, xml, results);\n\n\t\t\t\t\t\t\t// Don't keep the element\n\t\t\t\t\t\t\t// (see https://github.com/jquery/sizzle/issues/299)\n\t\t\t\t\t\t\tinput[0] = null;\n\t\t\t\t\t\t\treturn !results.pop();\n\t\t\t\t\t\t};\n\t\t\t\t}),\n\n\t\t\t\thas: markFunction(function (selector) {\n\t\t\t\t\treturn function (elem) {\n\t\t\t\t\t\treturn find(selector, elem).length > 0;\n\t\t\t\t\t};\n\t\t\t\t}),\n\n\t\t\t\tcontains: markFunction(function (text) {\n\t\t\t\t\ttext = text.replace(runescape, funescape);\n\t\t\t\t\treturn function (elem) {\n\t\t\t\t\t\treturn (elem.textContent || jQuery.text(elem)).indexOf(text) > -1;\n\t\t\t\t\t};\n\t\t\t\t}),\n\n\t\t\t\t// \"Whether an element is represented by a :lang() selector\n\t\t\t\t// is based solely on the element's language value\n\t\t\t\t// being equal to the identifier C,\n\t\t\t\t// or beginning with the identifier C immediately followed by \"-\".\n\t\t\t\t// The matching of C against the element's language value is performed case-insensitively.\n\t\t\t\t// The identifier C does not have to be a valid language name.\"\n\t\t\t\t// https://www.w3.org/TR/selectors/#lang-pseudo\n\t\t\t\tlang: markFunction(function (lang) {\n\n\t\t\t\t\t// lang value must be a valid identifier\n\t\t\t\t\tif (!ridentifier.test(lang || \"\")) {\n\t\t\t\t\t\tfind.error(\"unsupported lang: \" + lang);\n\t\t\t\t\t}\n\t\t\t\t\tlang = lang.replace(runescape, funescape).toLowerCase();\n\t\t\t\t\treturn function (elem) {\n\t\t\t\t\t\tvar elemLang;\n\t\t\t\t\t\tdo {\n\t\t\t\t\t\t\tif ((elemLang = documentIsHTML ?\n\t\t\t\t\t\t\t\telem.lang :\n\t\t\t\t\t\t\t\telem.getAttribute(\"xml:lang\") || elem.getAttribute(\"lang\"))) {\n\n\t\t\t\t\t\t\t\telemLang = elemLang.toLowerCase();\n\t\t\t\t\t\t\t\treturn elemLang === lang || elemLang.indexOf(lang + \"-\") === 0;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} while ((elem = elem.parentNode) && elem.nodeType === 1);\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t};\n\t\t\t\t}),\n\n\t\t\t\t// Miscellaneous\n\t\t\t\ttarget: function (elem) {\n\t\t\t\t\tvar hash = window.location && window.location.hash;\n\t\t\t\t\treturn hash && hash.slice(1) === elem.id;\n\t\t\t\t},\n\n\t\t\t\troot: function (elem) {\n\t\t\t\t\treturn elem === documentElement;\n\t\t\t\t},\n\n\t\t\t\tfocus: function (elem) {\n\t\t\t\t\treturn elem === safeActiveElement() &&\n\t\t\t\t\t\tdocument.hasFocus() &&\n\t\t\t\t\t\t!!(elem.type || elem.href || ~elem.tabIndex);\n\t\t\t\t},\n\n\t\t\t\t// Boolean properties\n\t\t\t\tenabled: createDisabledPseudo(false),\n\t\t\t\tdisabled: createDisabledPseudo(true),\n\n\t\t\t\tchecked: function (elem) {\n\n\t\t\t\t\t// In CSS3, :checked should return both checked and selected elements\n\t\t\t\t\t// https://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\t\t\treturn (nodeName(elem, \"input\") && !!elem.checked) ||\n\t\t\t\t\t\t(nodeName(elem, \"option\") && !!elem.selected);\n\t\t\t\t},\n\n\t\t\t\tselected: function (elem) {\n\n\t\t\t\t\t// Support: IE <=11+\n\t\t\t\t\t// Accessing the selectedIndex property\n\t\t\t\t\t// forces the browser to treat the default option as\n\t\t\t\t\t// selected when in an optgroup.\n\t\t\t\t\tif (elem.parentNode) {\n\t\t\t\t\t\t// eslint-disable-next-line no-unused-expressions\n\t\t\t\t\t\telem.parentNode.selectedIndex;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn elem.selected === true;\n\t\t\t\t},\n\n\t\t\t\t// Contents\n\t\t\t\tempty: function (elem) {\n\n\t\t\t\t\t// https://www.w3.org/TR/selectors/#empty-pseudo\n\t\t\t\t\t// :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),\n\t\t\t\t\t//   but not by others (comment: 8; processing instruction: 7; etc.)\n\t\t\t\t\t// nodeType < 6 works because attributes (2) do not appear as children\n\t\t\t\t\tfor (elem = elem.firstChild; elem; elem = elem.nextSibling) {\n\t\t\t\t\t\tif (elem.nodeType < 6) {\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn true;\n\t\t\t\t},\n\n\t\t\t\tparent: function (elem) {\n\t\t\t\t\treturn !Expr.pseudos.empty(elem);\n\t\t\t\t},\n\n\t\t\t\t// Element/input types\n\t\t\t\theader: function (elem) {\n\t\t\t\t\treturn rheader.test(elem.nodeName);\n\t\t\t\t},\n\n\t\t\t\tinput: function (elem) {\n\t\t\t\t\treturn rinputs.test(elem.nodeName);\n\t\t\t\t},\n\n\t\t\t\tbutton: function (elem) {\n\t\t\t\t\treturn nodeName(elem, \"input\") && elem.type === \"button\" ||\n\t\t\t\t\t\tnodeName(elem, \"button\");\n\t\t\t\t},\n\n\t\t\t\ttext: function (elem) {\n\t\t\t\t\tvar attr;\n\t\t\t\t\treturn nodeName(elem, \"input\") && elem.type === \"text\" &&\n\n\t\t\t\t\t\t// Support: IE <10 only\n\t\t\t\t\t\t// New HTML5 attribute values (e.g., \"search\") appear\n\t\t\t\t\t\t// with elem.type === \"text\"\n\t\t\t\t\t\t((attr = elem.getAttribute(\"type\")) == null ||\n\t\t\t\t\t\t\tattr.toLowerCase() === \"text\");\n\t\t\t\t},\n\n\t\t\t\t// Position-in-collection\n\t\t\t\tfirst: createPositionalPseudo(function () {\n\t\t\t\t\treturn [0];\n\t\t\t\t}),\n\n\t\t\t\tlast: createPositionalPseudo(function (_matchIndexes, length) {\n\t\t\t\t\treturn [length - 1];\n\t\t\t\t}),\n\n\t\t\t\teq: createPositionalPseudo(function (_matchIndexes, length, argument) {\n\t\t\t\t\treturn [argument < 0 ? argument + length : argument];\n\t\t\t\t}),\n\n\t\t\t\teven: createPositionalPseudo(function (matchIndexes, length) {\n\t\t\t\t\tvar i = 0;\n\t\t\t\t\tfor (; i < length; i += 2) {\n\t\t\t\t\t\tmatchIndexes.push(i);\n\t\t\t\t\t}\n\t\t\t\t\treturn matchIndexes;\n\t\t\t\t}),\n\n\t\t\t\todd: createPositionalPseudo(function (matchIndexes, length) {\n\t\t\t\t\tvar i = 1;\n\t\t\t\t\tfor (; i < length; i += 2) {\n\t\t\t\t\t\tmatchIndexes.push(i);\n\t\t\t\t\t}\n\t\t\t\t\treturn matchIndexes;\n\t\t\t\t}),\n\n\t\t\t\tlt: createPositionalPseudo(function (matchIndexes, length, argument) {\n\t\t\t\t\tvar i;\n\n\t\t\t\t\tif (argument < 0) {\n\t\t\t\t\t\ti = argument + length;\n\t\t\t\t\t} else if (argument > length) {\n\t\t\t\t\t\ti = length;\n\t\t\t\t\t} else {\n\t\t\t\t\t\ti = argument;\n\t\t\t\t\t}\n\n\t\t\t\t\tfor (; --i >= 0;) {\n\t\t\t\t\t\tmatchIndexes.push(i);\n\t\t\t\t\t}\n\t\t\t\t\treturn matchIndexes;\n\t\t\t\t}),\n\n\t\t\t\tgt: createPositionalPseudo(function (matchIndexes, length, argument) {\n\t\t\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\t\t\tfor (; ++i < length;) {\n\t\t\t\t\t\tmatchIndexes.push(i);\n\t\t\t\t\t}\n\t\t\t\t\treturn matchIndexes;\n\t\t\t\t})\n\t\t\t}\n\t\t};\n\n\t\tExpr.pseudos.nth = Expr.pseudos.eq;\n\n\t\t// Add button/input type pseudos\n\t\tfor (i in { radio: true, checkbox: true, file: true, password: true, image: true }) {\n\t\t\tExpr.pseudos[i] = createInputPseudo(i);\n\t\t}\n\t\tfor (i in { submit: true, reset: true }) {\n\t\t\tExpr.pseudos[i] = createButtonPseudo(i);\n\t\t}\n\n\t\t// Easy API for creating new setFilters\n\t\tfunction setFilters() { }\n\t\tsetFilters.prototype = Expr.filters = Expr.pseudos;\n\t\tExpr.setFilters = new setFilters();\n\n\t\tfunction tokenize(selector, parseOnly) {\n\t\t\tvar matched, match, tokens, type,\n\t\t\t\tsoFar, groups, preFilters,\n\t\t\t\tcached = tokenCache[selector + \" \"];\n\n\t\t\tif (cached) {\n\t\t\t\treturn parseOnly ? 0 : cached.slice(0);\n\t\t\t}\n\n\t\t\tsoFar = selector;\n\t\t\tgroups = [];\n\t\t\tpreFilters = Expr.preFilter;\n\n\t\t\twhile (soFar) {\n\n\t\t\t\t// Comma and first run\n\t\t\t\tif (!matched || (match = rcomma.exec(soFar))) {\n\t\t\t\t\tif (match) {\n\n\t\t\t\t\t\t// Don't consume trailing commas as valid\n\t\t\t\t\t\tsoFar = soFar.slice(match[0].length) || soFar;\n\t\t\t\t\t}\n\t\t\t\t\tgroups.push((tokens = []));\n\t\t\t\t}\n\n\t\t\t\tmatched = false;\n\n\t\t\t\t// Combinators\n\t\t\t\tif ((match = rleadingCombinator.exec(soFar))) {\n\t\t\t\t\tmatched = match.shift();\n\t\t\t\t\ttokens.push({\n\t\t\t\t\t\tvalue: matched,\n\n\t\t\t\t\t\t// Cast descendant combinators to space\n\t\t\t\t\t\ttype: match[0].replace(rtrimCSS, \" \")\n\t\t\t\t\t});\n\t\t\t\t\tsoFar = soFar.slice(matched.length);\n\t\t\t\t}\n\n\t\t\t\t// Filters\n\t\t\t\tfor (type in Expr.filter) {\n\t\t\t\t\tif ((match = matchExpr[type].exec(soFar)) && (!preFilters[type] ||\n\t\t\t\t\t\t(match = preFilters[type](match)))) {\n\t\t\t\t\t\tmatched = match.shift();\n\t\t\t\t\t\ttokens.push({\n\t\t\t\t\t\t\tvalue: matched,\n\t\t\t\t\t\t\ttype: type,\n\t\t\t\t\t\t\tmatches: match\n\t\t\t\t\t\t});\n\t\t\t\t\t\tsoFar = soFar.slice(matched.length);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (!matched) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Return the length of the invalid excess\n\t\t\t// if we're just parsing\n\t\t\t// Otherwise, throw an error or return tokens\n\t\t\tif (parseOnly) {\n\t\t\t\treturn soFar.length;\n\t\t\t}\n\n\t\t\treturn soFar ?\n\t\t\t\tfind.error(selector) :\n\n\t\t\t\t// Cache the tokens\n\t\t\t\ttokenCache(selector, groups).slice(0);\n\t\t}\n\n\t\tfunction toSelector(tokens) {\n\t\t\tvar i = 0,\n\t\t\t\tlen = tokens.length,\n\t\t\t\tselector = \"\";\n\t\t\tfor (; i < len; i++) {\n\t\t\t\tselector += tokens[i].value;\n\t\t\t}\n\t\t\treturn selector;\n\t\t}\n\n\t\tfunction addCombinator(matcher, combinator, base) {\n\t\t\tvar dir = combinator.dir,\n\t\t\t\tskip = combinator.next,\n\t\t\t\tkey = skip || dir,\n\t\t\t\tcheckNonElements = base && key === \"parentNode\",\n\t\t\t\tdoneName = done++;\n\n\t\t\treturn combinator.first ?\n\n\t\t\t\t// Check against closest ancestor/preceding element\n\t\t\t\tfunction (elem, context, xml) {\n\t\t\t\t\twhile ((elem = elem[dir])) {\n\t\t\t\t\t\tif (elem.nodeType === 1 || checkNonElements) {\n\t\t\t\t\t\t\treturn matcher(elem, context, xml);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn false;\n\t\t\t\t} :\n\n\t\t\t\t// Check against all ancestor/preceding elements\n\t\t\t\tfunction (elem, context, xml) {\n\t\t\t\t\tvar oldCache, outerCache,\n\t\t\t\t\t\tnewCache = [dirruns, doneName];\n\n\t\t\t\t\t// We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching\n\t\t\t\t\tif (xml) {\n\t\t\t\t\t\twhile ((elem = elem[dir])) {\n\t\t\t\t\t\t\tif (elem.nodeType === 1 || checkNonElements) {\n\t\t\t\t\t\t\t\tif (matcher(elem, context, xml)) {\n\t\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\twhile ((elem = elem[dir])) {\n\t\t\t\t\t\t\tif (elem.nodeType === 1 || checkNonElements) {\n\t\t\t\t\t\t\t\touterCache = elem[expando] || (elem[expando] = {});\n\n\t\t\t\t\t\t\t\tif (skip && nodeName(elem, skip)) {\n\t\t\t\t\t\t\t\t\telem = elem[dir] || elem;\n\t\t\t\t\t\t\t\t} else if ((oldCache = outerCache[key]) &&\n\t\t\t\t\t\t\t\t\toldCache[0] === dirruns && oldCache[1] === doneName) {\n\n\t\t\t\t\t\t\t\t\t// Assign to newCache so results back-propagate to previous elements\n\t\t\t\t\t\t\t\t\treturn (newCache[2] = oldCache[2]);\n\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t// Reuse newcache so results back-propagate to previous elements\n\t\t\t\t\t\t\t\t\touterCache[key] = newCache;\n\n\t\t\t\t\t\t\t\t\t// A match means we're done; a fail means we have to keep checking\n\t\t\t\t\t\t\t\t\tif ((newCache[2] = matcher(elem, context, xml))) {\n\t\t\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn false;\n\t\t\t\t};\n\t\t}\n\n\t\tfunction elementMatcher(matchers) {\n\t\t\treturn matchers.length > 1 ?\n\t\t\t\tfunction (elem, context, xml) {\n\t\t\t\t\tvar i = matchers.length;\n\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\tif (!matchers[i](elem, context, xml)) {\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn true;\n\t\t\t\t} :\n\t\t\t\tmatchers[0];\n\t\t}\n\n\t\tfunction multipleContexts(selector, contexts, results) {\n\t\t\tvar i = 0,\n\t\t\t\tlen = contexts.length;\n\t\t\tfor (; i < len; i++) {\n\t\t\t\tfind(selector, contexts[i], results);\n\t\t\t}\n\t\t\treturn results;\n\t\t}\n\n\t\tfunction condense(unmatched, map, filter, context, xml) {\n\t\t\tvar elem,\n\t\t\t\tnewUnmatched = [],\n\t\t\t\ti = 0,\n\t\t\t\tlen = unmatched.length,\n\t\t\t\tmapped = map != null;\n\n\t\t\tfor (; i < len; i++) {\n\t\t\t\tif ((elem = unmatched[i])) {\n\t\t\t\t\tif (!filter || filter(elem, context, xml)) {\n\t\t\t\t\t\tnewUnmatched.push(elem);\n\t\t\t\t\t\tif (mapped) {\n\t\t\t\t\t\t\tmap.push(i);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn newUnmatched;\n\t\t}\n\n\t\tfunction setMatcher(preFilter, selector, matcher, postFilter, postFinder, postSelector) {\n\t\t\tif (postFilter && !postFilter[expando]) {\n\t\t\t\tpostFilter = setMatcher(postFilter);\n\t\t\t}\n\t\t\tif (postFinder && !postFinder[expando]) {\n\t\t\t\tpostFinder = setMatcher(postFinder, postSelector);\n\t\t\t}\n\t\t\treturn markFunction(function (seed, results, context, xml) {\n\t\t\t\tvar temp, i, elem, matcherOut,\n\t\t\t\t\tpreMap = [],\n\t\t\t\t\tpostMap = [],\n\t\t\t\t\tpreexisting = results.length,\n\n\t\t\t\t\t// Get initial elements from seed or context\n\t\t\t\t\telems = seed ||\n\t\t\t\t\t\tmultipleContexts(selector || \"*\",\n\t\t\t\t\t\t\tcontext.nodeType ? [context] : context, []),\n\n\t\t\t\t\t// Prefilter to get matcher input, preserving a map for seed-results synchronization\n\t\t\t\t\tmatcherIn = preFilter && (seed || !selector) ?\n\t\t\t\t\t\tcondense(elems, preMap, preFilter, context, xml) :\n\t\t\t\t\t\telems;\n\n\t\t\t\tif (matcher) {\n\n\t\t\t\t\t// If we have a postFinder, or filtered seed, or non-seed postFilter\n\t\t\t\t\t// or preexisting results,\n\t\t\t\t\tmatcherOut = postFinder || (seed ? preFilter : preexisting || postFilter) ?\n\n\t\t\t\t\t\t// ...intermediate processing is necessary\n\t\t\t\t\t\t[] :\n\n\t\t\t\t\t\t// ...otherwise use results directly\n\t\t\t\t\t\tresults;\n\n\t\t\t\t\t// Find primary matches\n\t\t\t\t\tmatcher(matcherIn, matcherOut, context, xml);\n\t\t\t\t} else {\n\t\t\t\t\tmatcherOut = matcherIn;\n\t\t\t\t}\n\n\t\t\t\t// Apply postFilter\n\t\t\t\tif (postFilter) {\n\t\t\t\t\ttemp = condense(matcherOut, postMap);\n\t\t\t\t\tpostFilter(temp, [], context, xml);\n\n\t\t\t\t\t// Un-match failing elements by moving them back to matcherIn\n\t\t\t\t\ti = temp.length;\n\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\tif ((elem = temp[i])) {\n\t\t\t\t\t\t\tmatcherOut[postMap[i]] = !(matcherIn[postMap[i]] = elem);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (seed) {\n\t\t\t\t\tif (postFinder || preFilter) {\n\t\t\t\t\t\tif (postFinder) {\n\n\t\t\t\t\t\t\t// Get the final matcherOut by condensing this intermediate into postFinder contexts\n\t\t\t\t\t\t\ttemp = [];\n\t\t\t\t\t\t\ti = matcherOut.length;\n\t\t\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\t\t\tif ((elem = matcherOut[i])) {\n\n\t\t\t\t\t\t\t\t\t// Restore matcherIn since elem is not yet a final match\n\t\t\t\t\t\t\t\t\ttemp.push((matcherIn[i] = elem));\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tpostFinder(null, (matcherOut = []), temp, xml);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Move matched elements from seed to results to keep them synchronized\n\t\t\t\t\t\ti = matcherOut.length;\n\t\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\t\tif ((elem = matcherOut[i]) &&\n\t\t\t\t\t\t\t\t(temp = postFinder ? indexOf.call(seed, elem) : preMap[i]) > -1) {\n\n\t\t\t\t\t\t\t\tseed[temp] = !(results[temp] = elem);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Add elements to results, through postFinder if defined\n\t\t\t\t} else {\n\t\t\t\t\tmatcherOut = condense(\n\t\t\t\t\t\tmatcherOut === results ?\n\t\t\t\t\t\t\tmatcherOut.splice(preexisting, matcherOut.length) :\n\t\t\t\t\t\t\tmatcherOut\n\t\t\t\t\t);\n\t\t\t\t\tif (postFinder) {\n\t\t\t\t\t\tpostFinder(null, results, matcherOut, xml);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tpush.apply(results, matcherOut);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tfunction matcherFromTokens(tokens) {\n\t\t\tvar checkContext, matcher, j,\n\t\t\t\tlen = tokens.length,\n\t\t\t\tleadingRelative = Expr.relative[tokens[0].type],\n\t\t\t\timplicitRelative = leadingRelative || Expr.relative[\" \"],\n\t\t\t\ti = leadingRelative ? 1 : 0,\n\n\t\t\t\t// The foundational matcher ensures that elements are reachable from top-level context(s)\n\t\t\t\tmatchContext = addCombinator(function (elem) {\n\t\t\t\t\treturn elem === checkContext;\n\t\t\t\t}, implicitRelative, true),\n\t\t\t\tmatchAnyContext = addCombinator(function (elem) {\n\t\t\t\t\treturn indexOf.call(checkContext, elem) > -1;\n\t\t\t\t}, implicitRelative, true),\n\t\t\t\tmatchers = [function (elem, context, xml) {\n\n\t\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\tvar ret = (!leadingRelative && (xml || context != outermostContext)) || (\n\t\t\t\t\t\t(checkContext = context).nodeType ?\n\t\t\t\t\t\t\tmatchContext(elem, context, xml) :\n\t\t\t\t\t\t\tmatchAnyContext(elem, context, xml));\n\n\t\t\t\t\t// Avoid hanging onto element\n\t\t\t\t\t// (see https://github.com/jquery/sizzle/issues/299)\n\t\t\t\t\tcheckContext = null;\n\t\t\t\t\treturn ret;\n\t\t\t\t}];\n\n\t\t\tfor (; i < len; i++) {\n\t\t\t\tif ((matcher = Expr.relative[tokens[i].type])) {\n\t\t\t\t\tmatchers = [addCombinator(elementMatcher(matchers), matcher)];\n\t\t\t\t} else {\n\t\t\t\t\tmatcher = Expr.filter[tokens[i].type].apply(null, tokens[i].matches);\n\n\t\t\t\t\t// Return special upon seeing a positional matcher\n\t\t\t\t\tif (matcher[expando]) {\n\n\t\t\t\t\t\t// Find the next relative operator (if any) for proper handling\n\t\t\t\t\t\tj = ++i;\n\t\t\t\t\t\tfor (; j < len; j++) {\n\t\t\t\t\t\t\tif (Expr.relative[tokens[j].type]) {\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn setMatcher(\n\t\t\t\t\t\t\ti > 1 && elementMatcher(matchers),\n\t\t\t\t\t\t\ti > 1 && toSelector(\n\n\t\t\t\t\t\t\t\t// If the preceding token was a descendant combinator, insert an implicit any-element `*`\n\t\t\t\t\t\t\t\ttokens.slice(0, i - 1)\n\t\t\t\t\t\t\t\t\t.concat({ value: tokens[i - 2].type === \" \" ? \"*\" : \"\" })\n\t\t\t\t\t\t\t).replace(rtrimCSS, \"$1\"),\n\t\t\t\t\t\t\tmatcher,\n\t\t\t\t\t\t\ti < j && matcherFromTokens(tokens.slice(i, j)),\n\t\t\t\t\t\t\tj < len && matcherFromTokens((tokens = tokens.slice(j))),\n\t\t\t\t\t\t\tj < len && toSelector(tokens)\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\tmatchers.push(matcher);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn elementMatcher(matchers);\n\t\t}\n\n\t\tfunction matcherFromGroupMatchers(elementMatchers, setMatchers) {\n\t\t\tvar bySet = setMatchers.length > 0,\n\t\t\t\tbyElement = elementMatchers.length > 0,\n\t\t\t\tsuperMatcher = function (seed, context, xml, results, outermost) {\n\t\t\t\t\tvar elem, j, matcher,\n\t\t\t\t\t\tmatchedCount = 0,\n\t\t\t\t\t\ti = \"0\",\n\t\t\t\t\t\tunmatched = seed && [],\n\t\t\t\t\t\tsetMatched = [],\n\t\t\t\t\t\tcontextBackup = outermostContext,\n\n\t\t\t\t\t\t// We must always have either seed elements or outermost context\n\t\t\t\t\t\telems = seed || byElement && Expr.find.TAG(\"*\", outermost),\n\n\t\t\t\t\t\t// Use integer dirruns iff this is the outermost matcher\n\t\t\t\t\t\tdirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1),\n\t\t\t\t\t\tlen = elems.length;\n\n\t\t\t\t\tif (outermost) {\n\n\t\t\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\t\toutermostContext = context == document || context || outermost;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Add elements passing elementMatchers directly to results\n\t\t\t\t\t// Support: iOS <=7 - 9 only\n\t\t\t\t\t// Tolerate NodeList properties (IE: \"length\"; Safari: <number>) matching\n\t\t\t\t\t// elements by id. (see trac-14142)\n\t\t\t\t\tfor (; i !== len && (elem = elems[i]) != null; i++) {\n\t\t\t\t\t\tif (byElement && elem) {\n\t\t\t\t\t\t\tj = 0;\n\n\t\t\t\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\t\t\tif (!context && elem.ownerDocument != document) {\n\t\t\t\t\t\t\t\tsetDocument(elem);\n\t\t\t\t\t\t\t\txml = !documentIsHTML;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\twhile ((matcher = elementMatchers[j++])) {\n\t\t\t\t\t\t\t\tif (matcher(elem, context || document, xml)) {\n\t\t\t\t\t\t\t\t\tpush.call(results, elem);\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (outermost) {\n\t\t\t\t\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Track unmatched elements for set filters\n\t\t\t\t\t\tif (bySet) {\n\n\t\t\t\t\t\t\t// They will have gone through all possible matchers\n\t\t\t\t\t\t\tif ((elem = !matcher && elem)) {\n\t\t\t\t\t\t\t\tmatchedCount--;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Lengthen the array for every element, matched or not\n\t\t\t\t\t\t\tif (seed) {\n\t\t\t\t\t\t\t\tunmatched.push(elem);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// `i` is now the count of elements visited above, and adding it to `matchedCount`\n\t\t\t\t\t// makes the latter nonnegative.\n\t\t\t\t\tmatchedCount += i;\n\n\t\t\t\t\t// Apply set filters to unmatched elements\n\t\t\t\t\t// NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`\n\t\t\t\t\t// equals `i`), unless we didn't visit _any_ elements in the above loop because we have\n\t\t\t\t\t// no element matchers and no seed.\n\t\t\t\t\t// Incrementing an initially-string \"0\" `i` allows `i` to remain a string only in that\n\t\t\t\t\t// case, which will result in a \"00\" `matchedCount` that differs from `i` but is also\n\t\t\t\t\t// numerically zero.\n\t\t\t\t\tif (bySet && i !== matchedCount) {\n\t\t\t\t\t\tj = 0;\n\t\t\t\t\t\twhile ((matcher = setMatchers[j++])) {\n\t\t\t\t\t\t\tmatcher(unmatched, setMatched, context, xml);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (seed) {\n\n\t\t\t\t\t\t\t// Reintegrate element matches to eliminate the need for sorting\n\t\t\t\t\t\t\tif (matchedCount > 0) {\n\t\t\t\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\t\t\t\tif (!(unmatched[i] || setMatched[i])) {\n\t\t\t\t\t\t\t\t\t\tsetMatched[i] = pop.call(results);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Discard index placeholder values to get only actual matches\n\t\t\t\t\t\t\tsetMatched = condense(setMatched);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Add matches to results\n\t\t\t\t\t\tpush.apply(results, setMatched);\n\n\t\t\t\t\t\t// Seedless set matches succeeding multiple successful matchers stipulate sorting\n\t\t\t\t\t\tif (outermost && !seed && setMatched.length > 0 &&\n\t\t\t\t\t\t\t(matchedCount + setMatchers.length) > 1) {\n\n\t\t\t\t\t\t\tjQuery.uniqueSort(results);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Override manipulation of globals by nested matchers\n\t\t\t\t\tif (outermost) {\n\t\t\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\t\t\toutermostContext = contextBackup;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn unmatched;\n\t\t\t\t};\n\n\t\t\treturn bySet ?\n\t\t\t\tmarkFunction(superMatcher) :\n\t\t\t\tsuperMatcher;\n\t\t}\n\n\t\tfunction compile(selector, match /* Internal Use Only */) {\n\t\t\tvar i,\n\t\t\t\tsetMatchers = [],\n\t\t\t\telementMatchers = [],\n\t\t\t\tcached = compilerCache[selector + \" \"];\n\n\t\t\tif (!cached) {\n\n\t\t\t\t// Generate a function of recursive functions that can be used to check each element\n\t\t\t\tif (!match) {\n\t\t\t\t\tmatch = tokenize(selector);\n\t\t\t\t}\n\t\t\t\ti = match.length;\n\t\t\t\twhile (i--) {\n\t\t\t\t\tcached = matcherFromTokens(match[i]);\n\t\t\t\t\tif (cached[expando]) {\n\t\t\t\t\t\tsetMatchers.push(cached);\n\t\t\t\t\t} else {\n\t\t\t\t\t\telementMatchers.push(cached);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Cache the compiled function\n\t\t\t\tcached = compilerCache(selector,\n\t\t\t\t\tmatcherFromGroupMatchers(elementMatchers, setMatchers));\n\n\t\t\t\t// Save selector and tokenization\n\t\t\t\tcached.selector = selector;\n\t\t\t}\n\t\t\treturn cached;\n\t\t}\n\n\t\t/**\n\t\t * A low-level selection function that works with jQuery's compiled\n\t\t *  selector functions\n\t\t * @param {String|Function} selector A selector or a pre-compiled\n\t\t *  selector function built with jQuery selector compile\n\t\t * @param {Element} context\n\t\t * @param {Array} [results]\n\t\t * @param {Array} [seed] A set of elements to match against\n\t\t */\n\t\tfunction select(selector, context, results, seed) {\n\t\t\tvar i, tokens, token, type, find,\n\t\t\t\tcompiled = typeof selector === \"function\" && selector,\n\t\t\t\tmatch = !seed && tokenize((selector = compiled.selector || selector));\n\n\t\t\tresults = results || [];\n\n\t\t\t// Try to minimize operations if there is only one selector in the list and no seed\n\t\t\t// (the latter of which guarantees us context)\n\t\t\tif (match.length === 1) {\n\n\t\t\t\t// Reduce context if the leading compound selector is an ID\n\t\t\t\ttokens = match[0] = match[0].slice(0);\n\t\t\t\tif (tokens.length > 2 && (token = tokens[0]).type === \"ID\" &&\n\t\t\t\t\tcontext.nodeType === 9 && documentIsHTML && Expr.relative[tokens[1].type]) {\n\n\t\t\t\t\tcontext = (Expr.find.ID(\n\t\t\t\t\t\ttoken.matches[0].replace(runescape, funescape),\n\t\t\t\t\t\tcontext\n\t\t\t\t\t) || [])[0];\n\t\t\t\t\tif (!context) {\n\t\t\t\t\t\treturn results;\n\n\t\t\t\t\t\t// Precompiled matchers will still verify ancestry, so step up a level\n\t\t\t\t\t} else if (compiled) {\n\t\t\t\t\t\tcontext = context.parentNode;\n\t\t\t\t\t}\n\n\t\t\t\t\tselector = selector.slice(tokens.shift().value.length);\n\t\t\t\t}\n\n\t\t\t\t// Fetch a seed set for right-to-left matching\n\t\t\t\ti = matchExpr.needsContext.test(selector) ? 0 : tokens.length;\n\t\t\t\twhile (i--) {\n\t\t\t\t\ttoken = tokens[i];\n\n\t\t\t\t\t// Abort if we hit a combinator\n\t\t\t\t\tif (Expr.relative[(type = token.type)]) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tif ((find = Expr.find[type])) {\n\n\t\t\t\t\t\t// Search, expanding context for leading sibling combinators\n\t\t\t\t\t\tif ((seed = find(\n\t\t\t\t\t\t\ttoken.matches[0].replace(runescape, funescape),\n\t\t\t\t\t\t\trsibling.test(tokens[0].type) &&\n\t\t\t\t\t\t\ttestContext(context.parentNode) || context\n\t\t\t\t\t\t))) {\n\n\t\t\t\t\t\t\t// If seed is empty or no tokens remain, we can return early\n\t\t\t\t\t\t\ttokens.splice(i, 1);\n\t\t\t\t\t\t\tselector = seed.length && toSelector(tokens);\n\t\t\t\t\t\t\tif (!selector) {\n\t\t\t\t\t\t\t\tpush.apply(results, seed);\n\t\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Compile and execute a filtering function if one is not provided\n\t\t\t// Provide `match` to avoid retokenization if we modified the selector above\n\t\t\t(compiled || compile(selector, match))(\n\t\t\t\tseed,\n\t\t\t\tcontext,\n\t\t\t\t!documentIsHTML,\n\t\t\t\tresults,\n\t\t\t\t!context || rsibling.test(selector) && testContext(context.parentNode) || context\n\t\t\t);\n\t\t\treturn results;\n\t\t}\n\n\t\t// One-time assignments\n\n\t\t// Support: Android <=4.0 - 4.1+\n\t\t// Sort stability\n\t\tsupport.sortStable = expando.split(\"\").sort(sortOrder).join(\"\") === expando;\n\n\t\t// Initialize against the default document\n\t\tsetDocument();\n\n\t\t// Support: Android <=4.0 - 4.1+\n\t\t// Detached nodes confoundingly follow *each other*\n\t\tsupport.sortDetached = assert(function (el) {\n\n\t\t\t// Should return 1, but returns 4 (following)\n\t\t\treturn el.compareDocumentPosition(document.createElement(\"fieldset\")) & 1;\n\t\t});\n\n\t\tjQuery.find = find;\n\n\t\t// Deprecated\n\t\tjQuery.expr[\":\"] = jQuery.expr.pseudos;\n\t\tjQuery.unique = jQuery.uniqueSort;\n\n\t\t// These have always been private, but they used to be documented\n\t\t// as part of Sizzle so let's maintain them in the 3.x line\n\t\t// for backwards compatibility purposes.\n\t\tfind.compile = compile;\n\t\tfind.select = select;\n\t\tfind.setDocument = setDocument;\n\n\t\tfind.escape = jQuery.escapeSelector;\n\t\tfind.getText = jQuery.text;\n\t\tfind.isXML = jQuery.isXMLDoc;\n\t\tfind.selectors = jQuery.expr;\n\t\tfind.support = jQuery.support;\n\t\tfind.uniqueSort = jQuery.uniqueSort;\n\n\t\t/* eslint-enable */\n\n\t})();\n\n\n\tvar dir = function (elem, dir, until) {\n\t\tvar matched = [],\n\t\t\ttruncate = until !== undefined;\n\n\t\twhile ((elem = elem[dir]) && elem.nodeType !== 9) {\n\t\t\tif (elem.nodeType === 1) {\n\t\t\t\tif (truncate && jQuery(elem).is(until)) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tmatched.push(elem);\n\t\t\t}\n\t\t}\n\t\treturn matched;\n\t};\n\n\n\tvar siblings = function (n, elem) {\n\t\tvar matched = [];\n\n\t\tfor (; n; n = n.nextSibling) {\n\t\t\tif (n.nodeType === 1 && n !== elem) {\n\t\t\t\tmatched.push(n);\n\t\t\t}\n\t\t}\n\n\t\treturn matched;\n\t};\n\n\n\tvar rneedsContext = jQuery.expr.match.needsContext;\n\n\tvar rsingleTag = (/^<([a-z][^\\/\\0>:\\x20\\t\\r\\n\\f]*)[\\x20\\t\\r\\n\\f]*\\/?>(?:<\\/\\1>|)$/i);\n\n\n\n\t// Implement the identical functionality for filter and not\n\tfunction winnow(elements, qualifier, not) {\n\t\tif (isFunction(qualifier)) {\n\t\t\treturn jQuery.grep(elements, function (elem, i) {\n\t\t\t\treturn !!qualifier.call(elem, i, elem) !== not;\n\t\t\t});\n\t\t}\n\n\t\t// Single element\n\t\tif (qualifier.nodeType) {\n\t\t\treturn jQuery.grep(elements, function (elem) {\n\t\t\t\treturn (elem === qualifier) !== not;\n\t\t\t});\n\t\t}\n\n\t\t// Arraylike of elements (jQuery, arguments, Array)\n\t\tif (typeof qualifier !== \"string\") {\n\t\t\treturn jQuery.grep(elements, function (elem) {\n\t\t\t\treturn (indexOf.call(qualifier, elem) > -1) !== not;\n\t\t\t});\n\t\t}\n\n\t\t// Filtered directly for both simple and complex selectors\n\t\treturn jQuery.filter(qualifier, elements, not);\n\t}\n\n\tjQuery.filter = function (expr, elems, not) {\n\t\tvar elem = elems[0];\n\n\t\tif (not) {\n\t\t\texpr = \":not(\" + expr + \")\";\n\t\t}\n\n\t\tif (elems.length === 1 && elem.nodeType === 1) {\n\t\t\treturn jQuery.find.matchesSelector(elem, expr) ? [elem] : [];\n\t\t}\n\n\t\treturn jQuery.find.matches(expr, jQuery.grep(elems, function (elem) {\n\t\t\treturn elem.nodeType === 1;\n\t\t}));\n\t};\n\n\tjQuery.fn.extend({\n\t\tfind: function (selector) {\n\t\t\tvar i, ret,\n\t\t\t\tlen = this.length,\n\t\t\t\tself = this;\n\n\t\t\tif (typeof selector !== \"string\") {\n\t\t\t\treturn this.pushStack(jQuery(selector).filter(function () {\n\t\t\t\t\tfor (i = 0; i < len; i++) {\n\t\t\t\t\t\tif (jQuery.contains(self[i], this)) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}));\n\t\t\t}\n\n\t\t\tret = this.pushStack([]);\n\n\t\t\tfor (i = 0; i < len; i++) {\n\t\t\t\tjQuery.find(selector, self[i], ret);\n\t\t\t}\n\n\t\t\treturn len > 1 ? jQuery.uniqueSort(ret) : ret;\n\t\t},\n\t\tfilter: function (selector) {\n\t\t\treturn this.pushStack(winnow(this, selector || [], false));\n\t\t},\n\t\tnot: function (selector) {\n\t\t\treturn this.pushStack(winnow(this, selector || [], true));\n\t\t},\n\t\tis: function (selector) {\n\t\t\treturn !!winnow(\n\t\t\t\tthis,\n\n\t\t\t\t// If this is a positional/relative selector, check membership in the returned set\n\t\t\t\t// so $(\"p:first\").is(\"p:last\") won't return true for a doc with two \"p\".\n\t\t\t\ttypeof selector === \"string\" && rneedsContext.test(selector) ?\n\t\t\t\t\tjQuery(selector) :\n\t\t\t\t\tselector || [],\n\t\t\t\tfalse\n\t\t\t).length;\n\t\t}\n\t});\n\n\n\t// Initialize a jQuery object\n\n\n\t// A central reference to the root jQuery(document)\n\tvar rootjQuery,\n\n\t\t// A simple way to check for HTML strings\n\t\t// Prioritize #id over <tag> to avoid XSS via location.hash (trac-9521)\n\t\t// Strict HTML recognition (trac-11290: must start with <)\n\t\t// Shortcut simple #id case for speed\n\t\trquickExpr = /^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]+))$/,\n\n\t\tinit = jQuery.fn.init = function (selector, context, root) {\n\t\t\tvar match, elem;\n\n\t\t\t// HANDLE: $(\"\"), $(null), $(undefined), $(false)\n\t\t\tif (!selector) {\n\t\t\t\treturn this;\n\t\t\t}\n\n\t\t\t// Method init() accepts an alternate rootjQuery\n\t\t\t// so migrate can support jQuery.sub (gh-2101)\n\t\t\troot = root || rootjQuery;\n\n\t\t\t// Handle HTML strings\n\t\t\tif (typeof selector === \"string\") {\n\t\t\t\tif (selector[0] === \"<\" &&\n\t\t\t\t\tselector[selector.length - 1] === \">\" &&\n\t\t\t\t\tselector.length >= 3) {\n\n\t\t\t\t\t// Assume that strings that start and end with <> are HTML and skip the regex check\n\t\t\t\t\tmatch = [null, selector, null];\n\n\t\t\t\t} else {\n\t\t\t\t\tmatch = rquickExpr.exec(selector);\n\t\t\t\t}\n\n\t\t\t\t// Match html or make sure no context is specified for #id\n\t\t\t\tif (match && (match[1] || !context)) {\n\n\t\t\t\t\t// HANDLE: $(html) -> $(array)\n\t\t\t\t\tif (match[1]) {\n\t\t\t\t\t\tcontext = context instanceof jQuery ? context[0] : context;\n\n\t\t\t\t\t\t// Option to run scripts is true for back-compat\n\t\t\t\t\t\t// Intentionally let the error be thrown if parseHTML is not present\n\t\t\t\t\t\tjQuery.merge(this, jQuery.parseHTML(\n\t\t\t\t\t\t\tmatch[1],\n\t\t\t\t\t\t\tcontext && context.nodeType ? context.ownerDocument || context : document,\n\t\t\t\t\t\t\ttrue\n\t\t\t\t\t\t));\n\n\t\t\t\t\t\t// HANDLE: $(html, props)\n\t\t\t\t\t\tif (rsingleTag.test(match[1]) && jQuery.isPlainObject(context)) {\n\t\t\t\t\t\t\tfor (match in context) {\n\n\t\t\t\t\t\t\t\t// Properties of context are called as methods if possible\n\t\t\t\t\t\t\t\tif (isFunction(this[match])) {\n\t\t\t\t\t\t\t\t\tthis[match](context[match]);\n\n\t\t\t\t\t\t\t\t\t// ...and otherwise set as attributes\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tthis.attr(match, context[match]);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn this;\n\n\t\t\t\t\t\t// HANDLE: $(#id)\n\t\t\t\t\t} else {\n\t\t\t\t\t\telem = document.getElementById(match[2]);\n\n\t\t\t\t\t\tif (elem) {\n\n\t\t\t\t\t\t\t// Inject the element directly into the jQuery object\n\t\t\t\t\t\t\tthis[0] = elem;\n\t\t\t\t\t\t\tthis.length = 1;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn this;\n\t\t\t\t\t}\n\n\t\t\t\t\t// HANDLE: $(expr, $(...))\n\t\t\t\t} else if (!context || context.jquery) {\n\t\t\t\t\treturn (context || root).find(selector);\n\n\t\t\t\t\t// HANDLE: $(expr, context)\n\t\t\t\t\t// (which is just equivalent to: $(context).find(expr)\n\t\t\t\t} else {\n\t\t\t\t\treturn this.constructor(context).find(selector);\n\t\t\t\t}\n\n\t\t\t\t// HANDLE: $(DOMElement)\n\t\t\t} else if (selector.nodeType) {\n\t\t\t\tthis[0] = selector;\n\t\t\t\tthis.length = 1;\n\t\t\t\treturn this;\n\n\t\t\t\t// HANDLE: $(function)\n\t\t\t\t// Shortcut for document ready\n\t\t\t} else if (isFunction(selector)) {\n\t\t\t\treturn root.ready !== undefined ?\n\t\t\t\t\troot.ready(selector) :\n\n\t\t\t\t\t// Execute immediately if ready is not present\n\t\t\t\t\tselector(jQuery);\n\t\t\t}\n\n\t\t\treturn jQuery.makeArray(selector, this);\n\t\t};\n\n\t// Give the init function the jQuery prototype for later instantiation\n\tinit.prototype = jQuery.fn;\n\n\t// Initialize central reference\n\trootjQuery = jQuery(document);\n\n\n\tvar rparentsprev = /^(?:parents|prev(?:Until|All))/,\n\n\t\t// Methods guaranteed to produce a unique set when starting from a unique set\n\t\tguaranteedUnique = {\n\t\t\tchildren: true,\n\t\t\tcontents: true,\n\t\t\tnext: true,\n\t\t\tprev: true\n\t\t};\n\n\tjQuery.fn.extend({\n\t\thas: function (target) {\n\t\t\tvar targets = jQuery(target, this),\n\t\t\t\tl = targets.length;\n\n\t\t\treturn this.filter(function () {\n\t\t\t\tvar i = 0;\n\t\t\t\tfor (; i < l; i++) {\n\t\t\t\t\tif (jQuery.contains(this, targets[i])) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\tclosest: function (selectors, context) {\n\t\t\tvar cur,\n\t\t\t\ti = 0,\n\t\t\t\tl = this.length,\n\t\t\t\tmatched = [],\n\t\t\t\ttargets = typeof selectors !== \"string\" && jQuery(selectors);\n\n\t\t\t// Positional selectors never match, since there's no _selection_ context\n\t\t\tif (!rneedsContext.test(selectors)) {\n\t\t\t\tfor (; i < l; i++) {\n\t\t\t\t\tfor (cur = this[i]; cur && cur !== context; cur = cur.parentNode) {\n\n\t\t\t\t\t\t// Always skip document fragments\n\t\t\t\t\t\tif (cur.nodeType < 11 && (targets ?\n\t\t\t\t\t\t\ttargets.index(cur) > -1 :\n\n\t\t\t\t\t\t\t// Don't pass non-elements to jQuery#find\n\t\t\t\t\t\t\tcur.nodeType === 1 &&\n\t\t\t\t\t\t\tjQuery.find.matchesSelector(cur, selectors))) {\n\n\t\t\t\t\t\t\tmatched.push(cur);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn this.pushStack(matched.length > 1 ? jQuery.uniqueSort(matched) : matched);\n\t\t},\n\n\t\t// Determine the position of an element within the set\n\t\tindex: function (elem) {\n\n\t\t\t// No argument, return index in parent\n\t\t\tif (!elem) {\n\t\t\t\treturn (this[0] && this[0].parentNode) ? this.first().prevAll().length : -1;\n\t\t\t}\n\n\t\t\t// Index in selector\n\t\t\tif (typeof elem === \"string\") {\n\t\t\t\treturn indexOf.call(jQuery(elem), this[0]);\n\t\t\t}\n\n\t\t\t// Locate the position of the desired element\n\t\t\treturn indexOf.call(this,\n\n\t\t\t\t// If it receives a jQuery object, the first element is used\n\t\t\t\telem.jquery ? elem[0] : elem\n\t\t\t);\n\t\t},\n\n\t\tadd: function (selector, context) {\n\t\t\treturn this.pushStack(\n\t\t\t\tjQuery.uniqueSort(\n\t\t\t\t\tjQuery.merge(this.get(), jQuery(selector, context))\n\t\t\t\t)\n\t\t\t);\n\t\t},\n\n\t\taddBack: function (selector) {\n\t\t\treturn this.add(selector == null ?\n\t\t\t\tthis.prevObject : this.prevObject.filter(selector)\n\t\t\t);\n\t\t}\n\t});\n\n\tfunction sibling(cur, dir) {\n\t\twhile ((cur = cur[dir]) && cur.nodeType !== 1) { }\n\t\treturn cur;\n\t}\n\n\tjQuery.each({\n\t\tparent: function (elem) {\n\t\t\tvar parent = elem.parentNode;\n\t\t\treturn parent && parent.nodeType !== 11 ? parent : null;\n\t\t},\n\t\tparents: function (elem) {\n\t\t\treturn dir(elem, \"parentNode\");\n\t\t},\n\t\tparentsUntil: function (elem, _i, until) {\n\t\t\treturn dir(elem, \"parentNode\", until);\n\t\t},\n\t\tnext: function (elem) {\n\t\t\treturn sibling(elem, \"nextSibling\");\n\t\t},\n\t\tprev: function (elem) {\n\t\t\treturn sibling(elem, \"previousSibling\");\n\t\t},\n\t\tnextAll: function (elem) {\n\t\t\treturn dir(elem, \"nextSibling\");\n\t\t},\n\t\tprevAll: function (elem) {\n\t\t\treturn dir(elem, \"previousSibling\");\n\t\t},\n\t\tnextUntil: function (elem, _i, until) {\n\t\t\treturn dir(elem, \"nextSibling\", until);\n\t\t},\n\t\tprevUntil: function (elem, _i, until) {\n\t\t\treturn dir(elem, \"previousSibling\", until);\n\t\t},\n\t\tsiblings: function (elem) {\n\t\t\treturn siblings((elem.parentNode || {}).firstChild, elem);\n\t\t},\n\t\tchildren: function (elem) {\n\t\t\treturn siblings(elem.firstChild);\n\t\t},\n\t\tcontents: function (elem) {\n\t\t\tif (elem.contentDocument != null &&\n\n\t\t\t\t// Support: IE 11+\n\t\t\t\t// <object> elements with no `data` attribute has an object\n\t\t\t\t// `contentDocument` with a `null` prototype.\n\t\t\t\tgetProto(elem.contentDocument)) {\n\n\t\t\t\treturn elem.contentDocument;\n\t\t\t}\n\n\t\t\t// Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only\n\t\t\t// Treat the template element as a regular one in browsers that\n\t\t\t// don't support it.\n\t\t\tif (nodeName(elem, \"template\")) {\n\t\t\t\telem = elem.content || elem;\n\t\t\t}\n\n\t\t\treturn jQuery.merge([], elem.childNodes);\n\t\t}\n\t}, function (name, fn) {\n\t\tjQuery.fn[name] = function (until, selector) {\n\t\t\tvar matched = jQuery.map(this, fn, until);\n\n\t\t\tif (name.slice(-5) !== \"Until\") {\n\t\t\t\tselector = until;\n\t\t\t}\n\n\t\t\tif (selector && typeof selector === \"string\") {\n\t\t\t\tmatched = jQuery.filter(selector, matched);\n\t\t\t}\n\n\t\t\tif (this.length > 1) {\n\n\t\t\t\t// Remove duplicates\n\t\t\t\tif (!guaranteedUnique[name]) {\n\t\t\t\t\tjQuery.uniqueSort(matched);\n\t\t\t\t}\n\n\t\t\t\t// Reverse order for parents* and prev-derivatives\n\t\t\t\tif (rparentsprev.test(name)) {\n\t\t\t\t\tmatched.reverse();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn this.pushStack(matched);\n\t\t};\n\t});\n\tvar rnothtmlwhite = (/[^\\x20\\t\\r\\n\\f]+/g);\n\n\n\n\t// Convert String-formatted options into Object-formatted ones\n\tfunction createOptions(options) {\n\t\tvar object = {};\n\t\tjQuery.each(options.match(rnothtmlwhite) || [], function (_, flag) {\n\t\t\tobject[flag] = true;\n\t\t});\n\t\treturn object;\n\t}\n\n\t/*\n\t * Create a callback list using the following parameters:\n\t *\n\t *\toptions: an optional list of space-separated options that will change how\n\t *\t\t\tthe callback list behaves or a more traditional option object\n\t *\n\t * By default a callback list will act like an event callback list and can be\n\t * \"fired\" multiple times.\n\t *\n\t * Possible options:\n\t *\n\t *\tonce:\t\t\twill ensure the callback list can only be fired once (like a Deferred)\n\t *\n\t *\tmemory:\t\t\twill keep track of previous values and will call any callback added\n\t *\t\t\t\t\tafter the list has been fired right away with the latest \"memorized\"\n\t *\t\t\t\t\tvalues (like a Deferred)\n\t *\n\t *\tunique:\t\t\twill ensure a callback can only be added once (no duplicate in the list)\n\t *\n\t *\tstopOnFalse:\tinterrupt callings when a callback returns false\n\t *\n\t */\n\tjQuery.Callbacks = function (options) {\n\n\t\t// Convert options from String-formatted to Object-formatted if needed\n\t\t// (we check in cache first)\n\t\toptions = typeof options === \"string\" ?\n\t\t\tcreateOptions(options) :\n\t\t\tjQuery.extend({}, options);\n\n\t\tvar // Flag to know if list is currently firing\n\t\t\tfiring,\n\n\t\t\t// Last fire value for non-forgettable lists\n\t\t\tmemory,\n\n\t\t\t// Flag to know if list was already fired\n\t\t\tfired,\n\n\t\t\t// Flag to prevent firing\n\t\t\tlocked,\n\n\t\t\t// Actual callback list\n\t\t\tlist = [],\n\n\t\t\t// Queue of execution data for repeatable lists\n\t\t\tqueue = [],\n\n\t\t\t// Index of currently firing callback (modified by add/remove as needed)\n\t\t\tfiringIndex = -1,\n\n\t\t\t// Fire callbacks\n\t\t\tfire = function () {\n\n\t\t\t\t// Enforce single-firing\n\t\t\t\tlocked = locked || options.once;\n\n\t\t\t\t// Execute callbacks for all pending executions,\n\t\t\t\t// respecting firingIndex overrides and runtime changes\n\t\t\t\tfired = firing = true;\n\t\t\t\tfor (; queue.length; firingIndex = -1) {\n\t\t\t\t\tmemory = queue.shift();\n\t\t\t\t\twhile (++firingIndex < list.length) {\n\n\t\t\t\t\t\t// Run callback and check for early termination\n\t\t\t\t\t\tif (list[firingIndex].apply(memory[0], memory[1]) === false &&\n\t\t\t\t\t\t\toptions.stopOnFalse) {\n\n\t\t\t\t\t\t\t// Jump to end and forget the data so .add doesn't re-fire\n\t\t\t\t\t\t\tfiringIndex = list.length;\n\t\t\t\t\t\t\tmemory = false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Forget the data if we're done with it\n\t\t\t\tif (!options.memory) {\n\t\t\t\t\tmemory = false;\n\t\t\t\t}\n\n\t\t\t\tfiring = false;\n\n\t\t\t\t// Clean up if we're done firing for good\n\t\t\t\tif (locked) {\n\n\t\t\t\t\t// Keep an empty list if we have data for future add calls\n\t\t\t\t\tif (memory) {\n\t\t\t\t\t\tlist = [];\n\n\t\t\t\t\t\t// Otherwise, this object is spent\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlist = \"\";\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// Actual Callbacks object\n\t\t\tself = {\n\n\t\t\t\t// Add a callback or a collection of callbacks to the list\n\t\t\t\tadd: function () {\n\t\t\t\t\tif (list) {\n\n\t\t\t\t\t\t// If we have memory from a past run, we should fire after adding\n\t\t\t\t\t\tif (memory && !firing) {\n\t\t\t\t\t\t\tfiringIndex = list.length - 1;\n\t\t\t\t\t\t\tqueue.push(memory);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t(function add(args) {\n\t\t\t\t\t\t\tjQuery.each(args, function (_, arg) {\n\t\t\t\t\t\t\t\tif (isFunction(arg)) {\n\t\t\t\t\t\t\t\t\tif (!options.unique || !self.has(arg)) {\n\t\t\t\t\t\t\t\t\t\tlist.push(arg);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} else if (arg && arg.length && toType(arg) !== \"string\") {\n\n\t\t\t\t\t\t\t\t\t// Inspect recursively\n\t\t\t\t\t\t\t\t\tadd(arg);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t})(arguments);\n\n\t\t\t\t\t\tif (memory && !firing) {\n\t\t\t\t\t\t\tfire();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Remove a callback from the list\n\t\t\t\tremove: function () {\n\t\t\t\t\tjQuery.each(arguments, function (_, arg) {\n\t\t\t\t\t\tvar index;\n\t\t\t\t\t\twhile ((index = jQuery.inArray(arg, list, index)) > -1) {\n\t\t\t\t\t\t\tlist.splice(index, 1);\n\n\t\t\t\t\t\t\t// Handle firing indexes\n\t\t\t\t\t\t\tif (index <= firingIndex) {\n\t\t\t\t\t\t\t\tfiringIndex--;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Check if a given callback is in the list.\n\t\t\t\t// If no argument is given, return whether or not list has callbacks attached.\n\t\t\t\thas: function (fn) {\n\t\t\t\t\treturn fn ?\n\t\t\t\t\t\tjQuery.inArray(fn, list) > -1 :\n\t\t\t\t\t\tlist.length > 0;\n\t\t\t\t},\n\n\t\t\t\t// Remove all callbacks from the list\n\t\t\t\tempty: function () {\n\t\t\t\t\tif (list) {\n\t\t\t\t\t\tlist = [];\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Disable .fire and .add\n\t\t\t\t// Abort any current/pending executions\n\t\t\t\t// Clear all callbacks and values\n\t\t\t\tdisable: function () {\n\t\t\t\t\tlocked = queue = [];\n\t\t\t\t\tlist = memory = \"\";\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\t\t\t\tdisabled: function () {\n\t\t\t\t\treturn !list;\n\t\t\t\t},\n\n\t\t\t\t// Disable .fire\n\t\t\t\t// Also disable .add unless we have memory (since it would have no effect)\n\t\t\t\t// Abort any pending executions\n\t\t\t\tlock: function () {\n\t\t\t\t\tlocked = queue = [];\n\t\t\t\t\tif (!memory && !firing) {\n\t\t\t\t\t\tlist = memory = \"\";\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\t\t\t\tlocked: function () {\n\t\t\t\t\treturn !!locked;\n\t\t\t\t},\n\n\t\t\t\t// Call all callbacks with the given context and arguments\n\t\t\t\tfireWith: function (context, args) {\n\t\t\t\t\tif (!locked) {\n\t\t\t\t\t\targs = args || [];\n\t\t\t\t\t\targs = [context, args.slice ? args.slice() : args];\n\t\t\t\t\t\tqueue.push(args);\n\t\t\t\t\t\tif (!firing) {\n\t\t\t\t\t\t\tfire();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Call all the callbacks with the given arguments\n\t\t\t\tfire: function () {\n\t\t\t\t\tself.fireWith(this, arguments);\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// To know if the callbacks have already been called at least once\n\t\t\t\tfired: function () {\n\t\t\t\t\treturn !!fired;\n\t\t\t\t}\n\t\t\t};\n\n\t\treturn self;\n\t};\n\n\n\tfunction Identity(v) {\n\t\treturn v;\n\t}\n\tfunction Thrower(ex) {\n\t\tthrow ex;\n\t}\n\n\tfunction adoptValue(value, resolve, reject, noValue) {\n\t\tvar method;\n\n\t\ttry {\n\n\t\t\t// Check for promise aspect first to privilege synchronous behavior\n\t\t\tif (value && isFunction((method = value.promise))) {\n\t\t\t\tmethod.call(value).done(resolve).fail(reject);\n\n\t\t\t\t// Other thenables\n\t\t\t} else if (value && isFunction((method = value.then))) {\n\t\t\t\tmethod.call(value, resolve, reject);\n\n\t\t\t\t// Other non-thenables\n\t\t\t} else {\n\n\t\t\t\t// Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer:\n\t\t\t\t// * false: [ value ].slice( 0 ) => resolve( value )\n\t\t\t\t// * true: [ value ].slice( 1 ) => resolve()\n\t\t\t\tresolve.apply(undefined, [value].slice(noValue));\n\t\t\t}\n\n\t\t\t// For Promises/A+, convert exceptions into rejections\n\t\t\t// Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in\n\t\t\t// Deferred#then to conditionally suppress rejection.\n\t\t} catch (value) {\n\n\t\t\t// Support: Android 4.0 only\n\t\t\t// Strict mode functions invoked without .call/.apply get global-object context\n\t\t\treject.apply(undefined, [value]);\n\t\t}\n\t}\n\n\tjQuery.extend({\n\n\t\tDeferred: function (func) {\n\t\t\tvar tuples = [\n\n\t\t\t\t// action, add listener, callbacks,\n\t\t\t\t// ... .then handlers, argument index, [final state]\n\t\t\t\t[\"notify\", \"progress\", jQuery.Callbacks(\"memory\"),\n\t\t\t\t\tjQuery.Callbacks(\"memory\"), 2],\n\t\t\t\t[\"resolve\", \"done\", jQuery.Callbacks(\"once memory\"),\n\t\t\t\t\tjQuery.Callbacks(\"once memory\"), 0, \"resolved\"],\n\t\t\t\t[\"reject\", \"fail\", jQuery.Callbacks(\"once memory\"),\n\t\t\t\t\tjQuery.Callbacks(\"once memory\"), 1, \"rejected\"]\n\t\t\t],\n\t\t\t\tstate = \"pending\",\n\t\t\t\tpromise = {\n\t\t\t\t\tstate: function () {\n\t\t\t\t\t\treturn state;\n\t\t\t\t\t},\n\t\t\t\t\talways: function () {\n\t\t\t\t\t\tdeferred.done(arguments).fail(arguments);\n\t\t\t\t\t\treturn this;\n\t\t\t\t\t},\n\t\t\t\t\t\"catch\": function (fn) {\n\t\t\t\t\t\treturn promise.then(null, fn);\n\t\t\t\t\t},\n\n\t\t\t\t\t// Keep pipe for back-compat\n\t\t\t\t\tpipe: function ( /* fnDone, fnFail, fnProgress */) {\n\t\t\t\t\t\tvar fns = arguments;\n\n\t\t\t\t\t\treturn jQuery.Deferred(function (newDefer) {\n\t\t\t\t\t\t\tjQuery.each(tuples, function (_i, tuple) {\n\n\t\t\t\t\t\t\t\t// Map tuples (progress, done, fail) to arguments (done, fail, progress)\n\t\t\t\t\t\t\t\tvar fn = isFunction(fns[tuple[4]]) && fns[tuple[4]];\n\n\t\t\t\t\t\t\t\t// deferred.progress(function() { bind to newDefer or newDefer.notify })\n\t\t\t\t\t\t\t\t// deferred.done(function() { bind to newDefer or newDefer.resolve })\n\t\t\t\t\t\t\t\t// deferred.fail(function() { bind to newDefer or newDefer.reject })\n\t\t\t\t\t\t\t\tdeferred[tuple[1]](function () {\n\t\t\t\t\t\t\t\t\tvar returned = fn && fn.apply(this, arguments);\n\t\t\t\t\t\t\t\t\tif (returned && isFunction(returned.promise)) {\n\t\t\t\t\t\t\t\t\t\treturned.promise()\n\t\t\t\t\t\t\t\t\t\t\t.progress(newDefer.notify)\n\t\t\t\t\t\t\t\t\t\t\t.done(newDefer.resolve)\n\t\t\t\t\t\t\t\t\t\t\t.fail(newDefer.reject);\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tnewDefer[tuple[0] + \"With\"](\n\t\t\t\t\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\t\t\t\t\tfn ? [returned] : arguments\n\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tfns = null;\n\t\t\t\t\t\t}).promise();\n\t\t\t\t\t},\n\t\t\t\t\tthen: function (onFulfilled, onRejected, onProgress) {\n\t\t\t\t\t\tvar maxDepth = 0;\n\t\t\t\t\t\tfunction resolve(depth, deferred, handler, special) {\n\t\t\t\t\t\t\treturn function () {\n\t\t\t\t\t\t\t\tvar that = this,\n\t\t\t\t\t\t\t\t\targs = arguments,\n\t\t\t\t\t\t\t\t\tmightThrow = function () {\n\t\t\t\t\t\t\t\t\t\tvar returned, then;\n\n\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.3\n\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-59\n\t\t\t\t\t\t\t\t\t\t// Ignore double-resolution attempts\n\t\t\t\t\t\t\t\t\t\tif (depth < maxDepth) {\n\t\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\treturned = handler.apply(that, args);\n\n\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.1\n\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-48\n\t\t\t\t\t\t\t\t\t\tif (returned === deferred.promise()) {\n\t\t\t\t\t\t\t\t\t\t\tthrow new TypeError(\"Thenable self-resolution\");\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ sections 2.3.3.1, 3.5\n\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-54\n\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-75\n\t\t\t\t\t\t\t\t\t\t// Retrieve `then` only once\n\t\t\t\t\t\t\t\t\t\tthen = returned &&\n\n\t\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.4\n\t\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-64\n\t\t\t\t\t\t\t\t\t\t\t// Only check objects and functions for thenability\n\t\t\t\t\t\t\t\t\t\t\t(typeof returned === \"object\" ||\n\t\t\t\t\t\t\t\t\t\t\t\ttypeof returned === \"function\") &&\n\t\t\t\t\t\t\t\t\t\t\treturned.then;\n\n\t\t\t\t\t\t\t\t\t\t// Handle a returned thenable\n\t\t\t\t\t\t\t\t\t\tif (isFunction(then)) {\n\n\t\t\t\t\t\t\t\t\t\t\t// Special processors (notify) just wait for resolution\n\t\t\t\t\t\t\t\t\t\t\tif (special) {\n\t\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\t\tresolve(maxDepth, deferred, Identity, special),\n\t\t\t\t\t\t\t\t\t\t\t\t\tresolve(maxDepth, deferred, Thrower, special)\n\t\t\t\t\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t\t\t\t\t// Normal processors (resolve) also hook into progress\n\t\t\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t\t\t// ...and disregard older resolution values\n\t\t\t\t\t\t\t\t\t\t\t\tmaxDepth++;\n\n\t\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\t\tresolve(maxDepth, deferred, Identity, special),\n\t\t\t\t\t\t\t\t\t\t\t\t\tresolve(maxDepth, deferred, Thrower, special),\n\t\t\t\t\t\t\t\t\t\t\t\t\tresolve(maxDepth, deferred, Identity,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tdeferred.notifyWith)\n\t\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t// Handle all other returned values\n\t\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\t\tif (handler !== Identity) {\n\t\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\t\targs = [returned];\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t// Process the value(s)\n\t\t\t\t\t\t\t\t\t\t\t// Default process is resolve\n\t\t\t\t\t\t\t\t\t\t\t(special || deferred.resolveWith)(that, args);\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\n\t\t\t\t\t\t\t\t\t// Only normal processors (resolve) catch and reject exceptions\n\t\t\t\t\t\t\t\t\tprocess = special ?\n\t\t\t\t\t\t\t\t\t\tmightThrow :\n\t\t\t\t\t\t\t\t\t\tfunction () {\n\t\t\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\t\t\tmightThrow();\n\t\t\t\t\t\t\t\t\t\t\t} catch (e) {\n\n\t\t\t\t\t\t\t\t\t\t\t\tif (jQuery.Deferred.exceptionHook) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tjQuery.Deferred.exceptionHook(e,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tprocess.error);\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.4.1\n\t\t\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-61\n\t\t\t\t\t\t\t\t\t\t\t\t// Ignore post-resolution exceptions\n\t\t\t\t\t\t\t\t\t\t\t\tif (depth + 1 >= maxDepth) {\n\n\t\t\t\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\t\t\t\tif (handler !== Thrower) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\targs = [e];\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\t\tdeferred.rejectWith(that, args);\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.1\n\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-57\n\t\t\t\t\t\t\t\t// Re-resolve promises immediately to dodge false rejection from\n\t\t\t\t\t\t\t\t// subsequent errors\n\t\t\t\t\t\t\t\tif (depth) {\n\t\t\t\t\t\t\t\t\tprocess();\n\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t// Call an optional hook to record the error, in case of exception\n\t\t\t\t\t\t\t\t\t// since it's otherwise lost when execution goes async\n\t\t\t\t\t\t\t\t\tif (jQuery.Deferred.getErrorHook) {\n\t\t\t\t\t\t\t\t\t\tprocess.error = jQuery.Deferred.getErrorHook();\n\n\t\t\t\t\t\t\t\t\t\t// The deprecated alias of the above. While the name suggests\n\t\t\t\t\t\t\t\t\t\t// returning the stack, not an error instance, jQuery just passes\n\t\t\t\t\t\t\t\t\t\t// it directly to `console.warn` so both will work; an instance\n\t\t\t\t\t\t\t\t\t\t// just better cooperates with source maps.\n\t\t\t\t\t\t\t\t\t} else if (jQuery.Deferred.getStackHook) {\n\t\t\t\t\t\t\t\t\t\tprocess.error = jQuery.Deferred.getStackHook();\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\twindow.setTimeout(process);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn jQuery.Deferred(function (newDefer) {\n\n\t\t\t\t\t\t\t// progress_handlers.add( ... )\n\t\t\t\t\t\t\ttuples[0][3].add(\n\t\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\t\tisFunction(onProgress) ?\n\t\t\t\t\t\t\t\t\t\tonProgress :\n\t\t\t\t\t\t\t\t\t\tIdentity,\n\t\t\t\t\t\t\t\t\tnewDefer.notifyWith\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t// fulfilled_handlers.add( ... )\n\t\t\t\t\t\t\ttuples[1][3].add(\n\t\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\t\tisFunction(onFulfilled) ?\n\t\t\t\t\t\t\t\t\t\tonFulfilled :\n\t\t\t\t\t\t\t\t\t\tIdentity\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t// rejected_handlers.add( ... )\n\t\t\t\t\t\t\ttuples[2][3].add(\n\t\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\t\tisFunction(onRejected) ?\n\t\t\t\t\t\t\t\t\t\tonRejected :\n\t\t\t\t\t\t\t\t\t\tThrower\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}).promise();\n\t\t\t\t\t},\n\n\t\t\t\t\t// Get a promise for this deferred\n\t\t\t\t\t// If obj is provided, the promise aspect is added to the object\n\t\t\t\t\tpromise: function (obj) {\n\t\t\t\t\t\treturn obj != null ? jQuery.extend(obj, promise) : promise;\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tdeferred = {};\n\n\t\t\t// Add list-specific methods\n\t\t\tjQuery.each(tuples, function (i, tuple) {\n\t\t\t\tvar list = tuple[2],\n\t\t\t\t\tstateString = tuple[5];\n\n\t\t\t\t// promise.progress = list.add\n\t\t\t\t// promise.done = list.add\n\t\t\t\t// promise.fail = list.add\n\t\t\t\tpromise[tuple[1]] = list.add;\n\n\t\t\t\t// Handle state\n\t\t\t\tif (stateString) {\n\t\t\t\t\tlist.add(\n\t\t\t\t\t\tfunction () {\n\n\t\t\t\t\t\t\t// state = \"resolved\" (i.e., fulfilled)\n\t\t\t\t\t\t\t// state = \"rejected\"\n\t\t\t\t\t\t\tstate = stateString;\n\t\t\t\t\t\t},\n\n\t\t\t\t\t\t// rejected_callbacks.disable\n\t\t\t\t\t\t// fulfilled_callbacks.disable\n\t\t\t\t\t\ttuples[3 - i][2].disable,\n\n\t\t\t\t\t\t// rejected_handlers.disable\n\t\t\t\t\t\t// fulfilled_handlers.disable\n\t\t\t\t\t\ttuples[3 - i][3].disable,\n\n\t\t\t\t\t\t// progress_callbacks.lock\n\t\t\t\t\t\ttuples[0][2].lock,\n\n\t\t\t\t\t\t// progress_handlers.lock\n\t\t\t\t\t\ttuples[0][3].lock\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\t// progress_handlers.fire\n\t\t\t\t// fulfilled_handlers.fire\n\t\t\t\t// rejected_handlers.fire\n\t\t\t\tlist.add(tuple[3].fire);\n\n\t\t\t\t// deferred.notify = function() { deferred.notifyWith(...) }\n\t\t\t\t// deferred.resolve = function() { deferred.resolveWith(...) }\n\t\t\t\t// deferred.reject = function() { deferred.rejectWith(...) }\n\t\t\t\tdeferred[tuple[0]] = function () {\n\t\t\t\t\tdeferred[tuple[0] + \"With\"](this === deferred ? undefined : this, arguments);\n\t\t\t\t\treturn this;\n\t\t\t\t};\n\n\t\t\t\t// deferred.notifyWith = list.fireWith\n\t\t\t\t// deferred.resolveWith = list.fireWith\n\t\t\t\t// deferred.rejectWith = list.fireWith\n\t\t\t\tdeferred[tuple[0] + \"With\"] = list.fireWith;\n\t\t\t});\n\n\t\t\t// Make the deferred a promise\n\t\t\tpromise.promise(deferred);\n\n\t\t\t// Call given func if any\n\t\t\tif (func) {\n\t\t\t\tfunc.call(deferred, deferred);\n\t\t\t}\n\n\t\t\t// All done!\n\t\t\treturn deferred;\n\t\t},\n\n\t\t// Deferred helper\n\t\twhen: function (singleValue) {\n\t\t\tvar\n\n\t\t\t\t// count of uncompleted subordinates\n\t\t\t\tremaining = arguments.length,\n\n\t\t\t\t// count of unprocessed arguments\n\t\t\t\ti = remaining,\n\n\t\t\t\t// subordinate fulfillment data\n\t\t\t\tresolveContexts = Array(i),\n\t\t\t\tresolveValues = slice.call(arguments),\n\n\t\t\t\t// the primary Deferred\n\t\t\t\tprimary = jQuery.Deferred(),\n\n\t\t\t\t// subordinate callback factory\n\t\t\t\tupdateFunc = function (i) {\n\t\t\t\t\treturn function (value) {\n\t\t\t\t\t\tresolveContexts[i] = this;\n\t\t\t\t\t\tresolveValues[i] = arguments.length > 1 ? slice.call(arguments) : value;\n\t\t\t\t\t\tif (!(--remaining)) {\n\t\t\t\t\t\t\tprimary.resolveWith(resolveContexts, resolveValues);\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t};\n\n\t\t\t// Single- and empty arguments are adopted like Promise.resolve\n\t\t\tif (remaining <= 1) {\n\t\t\t\tadoptValue(singleValue, primary.done(updateFunc(i)).resolve, primary.reject,\n\t\t\t\t\t!remaining);\n\n\t\t\t\t// Use .then() to unwrap secondary thenables (cf. gh-3000)\n\t\t\t\tif (primary.state() === \"pending\" ||\n\t\t\t\t\tisFunction(resolveValues[i] && resolveValues[i].then)) {\n\n\t\t\t\t\treturn primary.then();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Multiple arguments are aggregated like Promise.all array elements\n\t\t\twhile (i--) {\n\t\t\t\tadoptValue(resolveValues[i], updateFunc(i), primary.reject);\n\t\t\t}\n\n\t\t\treturn primary.promise();\n\t\t}\n\t});\n\n\n\t// These usually indicate a programmer mistake during development,\n\t// warn about them ASAP rather than swallowing them by default.\n\tvar rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;\n\n\t// If `jQuery.Deferred.getErrorHook` is defined, `asyncError` is an error\n\t// captured before the async barrier to get the original error cause\n\t// which may otherwise be hidden.\n\tjQuery.Deferred.exceptionHook = function (error, asyncError) {\n\n\t\t// Support: IE 8 - 9 only\n\t\t// Console exists when dev tools are open, which can happen at any time\n\t\tif (window.console && window.console.warn && error && rerrorNames.test(error.name)) {\n\t\t\twindow.console.warn(\"jQuery.Deferred exception: \" + error.message,\n\t\t\t\terror.stack, asyncError);\n\t\t}\n\t};\n\n\n\n\n\tjQuery.readyException = function (error) {\n\t\twindow.setTimeout(function () {\n\t\t\tthrow error;\n\t\t});\n\t};\n\n\n\n\n\t// The deferred used on DOM ready\n\tvar readyList = jQuery.Deferred();\n\n\tjQuery.fn.ready = function (fn) {\n\n\t\treadyList\n\t\t\t.then(fn)\n\n\t\t\t// Wrap jQuery.readyException in a function so that the lookup\n\t\t\t// happens at the time of error handling instead of callback\n\t\t\t// registration.\n\t\t\t.catch(function (error) {\n\t\t\t\tjQuery.readyException(error);\n\t\t\t});\n\n\t\treturn this;\n\t};\n\n\tjQuery.extend({\n\n\t\t// Is the DOM ready to be used? Set to true once it occurs.\n\t\tisReady: false,\n\n\t\t// A counter to track how many items to wait for before\n\t\t// the ready event fires. See trac-6781\n\t\treadyWait: 1,\n\n\t\t// Handle when the DOM is ready\n\t\tready: function (wait) {\n\n\t\t\t// Abort if there are pending holds or we're already ready\n\t\t\tif (wait === true ? --jQuery.readyWait : jQuery.isReady) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Remember that the DOM is ready\n\t\t\tjQuery.isReady = true;\n\n\t\t\t// If a normal DOM Ready event fired, decrement, and wait if need be\n\t\t\tif (wait !== true && --jQuery.readyWait > 0) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If there are functions bound, to execute\n\t\t\treadyList.resolveWith(document, [jQuery]);\n\t\t}\n\t});\n\n\tjQuery.ready.then = readyList.then;\n\n\t// The ready event handler and self cleanup method\n\tfunction completed() {\n\t\tdocument.removeEventListener(\"DOMContentLoaded\", completed);\n\t\twindow.removeEventListener(\"load\", completed);\n\t\tjQuery.ready();\n\t}\n\n\t// Catch cases where $(document).ready() is called\n\t// after the browser event has already occurred.\n\t// Support: IE <=9 - 10 only\n\t// Older IE sometimes signals \"interactive\" too soon\n\tif (document.readyState === \"complete\" ||\n\t\t(document.readyState !== \"loading\" && !document.documentElement.doScroll)) {\n\n\t\t// Handle it asynchronously to allow scripts the opportunity to delay ready\n\t\twindow.setTimeout(jQuery.ready);\n\n\t} else {\n\n\t\t// Use the handy event callback\n\t\tdocument.addEventListener(\"DOMContentLoaded\", completed);\n\n\t\t// A fallback to window.onload, that will always work\n\t\twindow.addEventListener(\"load\", completed);\n\t}\n\n\n\n\n\t// Multifunctional method to get and set values of a collection\n\t// The value/s can optionally be executed if it's a function\n\tvar access = function (elems, fn, key, value, chainable, emptyGet, raw) {\n\t\tvar i = 0,\n\t\t\tlen = elems.length,\n\t\t\tbulk = key == null;\n\n\t\t// Sets many values\n\t\tif (toType(key) === \"object\") {\n\t\t\tchainable = true;\n\t\t\tfor (i in key) {\n\t\t\t\taccess(elems, fn, i, key[i], true, emptyGet, raw);\n\t\t\t}\n\n\t\t\t// Sets one value\n\t\t} else if (value !== undefined) {\n\t\t\tchainable = true;\n\n\t\t\tif (!isFunction(value)) {\n\t\t\t\traw = true;\n\t\t\t}\n\n\t\t\tif (bulk) {\n\n\t\t\t\t// Bulk operations run against the entire set\n\t\t\t\tif (raw) {\n\t\t\t\t\tfn.call(elems, value);\n\t\t\t\t\tfn = null;\n\n\t\t\t\t\t// ...except when executing function values\n\t\t\t\t} else {\n\t\t\t\t\tbulk = fn;\n\t\t\t\t\tfn = function (elem, _key, value) {\n\t\t\t\t\t\treturn bulk.call(jQuery(elem), value);\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (fn) {\n\t\t\t\tfor (; i < len; i++) {\n\t\t\t\t\tfn(\n\t\t\t\t\t\telems[i], key, raw ?\n\t\t\t\t\t\tvalue :\n\t\t\t\t\t\tvalue.call(elems[i], i, fn(elems[i], key))\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (chainable) {\n\t\t\treturn elems;\n\t\t}\n\n\t\t// Gets\n\t\tif (bulk) {\n\t\t\treturn fn.call(elems);\n\t\t}\n\n\t\treturn len ? fn(elems[0], key) : emptyGet;\n\t};\n\n\n\t// Matches dashed string for camelizing\n\tvar rmsPrefix = /^-ms-/,\n\t\trdashAlpha = /-([a-z])/g;\n\n\t// Used by camelCase as callback to replace()\n\tfunction fcamelCase(_all, letter) {\n\t\treturn letter.toUpperCase();\n\t}\n\n\t// Convert dashed to camelCase; used by the css and data modules\n\t// Support: IE <=9 - 11, Edge 12 - 15\n\t// Microsoft forgot to hump their vendor prefix (trac-9572)\n\tfunction camelCase(string) {\n\t\treturn string.replace(rmsPrefix, \"ms-\").replace(rdashAlpha, fcamelCase);\n\t}\n\tvar acceptData = function (owner) {\n\n\t\t// Accepts only:\n\t\t//  - Node\n\t\t//    - Node.ELEMENT_NODE\n\t\t//    - Node.DOCUMENT_NODE\n\t\t//  - Object\n\t\t//    - Any\n\t\treturn owner.nodeType === 1 || owner.nodeType === 9 || !(+owner.nodeType);\n\t};\n\n\n\n\n\tfunction Data() {\n\t\tthis.expando = jQuery.expando + Data.uid++;\n\t}\n\n\tData.uid = 1;\n\n\tData.prototype = {\n\n\t\tcache: function (owner) {\n\n\t\t\t// Check if the owner object already has a cache\n\t\t\tvar value = owner[this.expando];\n\n\t\t\t// If not, create one\n\t\t\tif (!value) {\n\t\t\t\tvalue = {};\n\n\t\t\t\t// We can accept data for non-element nodes in modern browsers,\n\t\t\t\t// but we should not, see trac-8335.\n\t\t\t\t// Always return an empty object.\n\t\t\t\tif (acceptData(owner)) {\n\n\t\t\t\t\t// If it is a node unlikely to be stringify-ed or looped over\n\t\t\t\t\t// use plain assignment\n\t\t\t\t\tif (owner.nodeType) {\n\t\t\t\t\t\towner[this.expando] = value;\n\n\t\t\t\t\t\t// Otherwise secure it in a non-enumerable property\n\t\t\t\t\t\t// configurable must be true to allow the property to be\n\t\t\t\t\t\t// deleted when data is removed\n\t\t\t\t\t} else {\n\t\t\t\t\t\tObject.defineProperty(owner, this.expando, {\n\t\t\t\t\t\t\tvalue: value,\n\t\t\t\t\t\t\tconfigurable: true\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn value;\n\t\t},\n\t\tset: function (owner, data, value) {\n\t\t\tvar prop,\n\t\t\t\tcache = this.cache(owner);\n\n\t\t\t// Handle: [ owner, key, value ] args\n\t\t\t// Always use camelCase key (gh-2257)\n\t\t\tif (typeof data === \"string\") {\n\t\t\t\tcache[camelCase(data)] = value;\n\n\t\t\t\t// Handle: [ owner, { properties } ] args\n\t\t\t} else {\n\n\t\t\t\t// Copy the properties one-by-one to the cache object\n\t\t\t\tfor (prop in data) {\n\t\t\t\t\tcache[camelCase(prop)] = data[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn cache;\n\t\t},\n\t\tget: function (owner, key) {\n\t\t\treturn key === undefined ?\n\t\t\t\tthis.cache(owner) :\n\n\t\t\t\t// Always use camelCase key (gh-2257)\n\t\t\t\towner[this.expando] && owner[this.expando][camelCase(key)];\n\t\t},\n\t\taccess: function (owner, key, value) {\n\n\t\t\t// In cases where either:\n\t\t\t//\n\t\t\t//   1. No key was specified\n\t\t\t//   2. A string key was specified, but no value provided\n\t\t\t//\n\t\t\t// Take the \"read\" path and allow the get method to determine\n\t\t\t// which value to return, respectively either:\n\t\t\t//\n\t\t\t//   1. The entire cache object\n\t\t\t//   2. The data stored at the key\n\t\t\t//\n\t\t\tif (key === undefined ||\n\t\t\t\t((key && typeof key === \"string\") && value === undefined)) {\n\n\t\t\t\treturn this.get(owner, key);\n\t\t\t}\n\n\t\t\t// When the key is not a string, or both a key and value\n\t\t\t// are specified, set or extend (existing objects) with either:\n\t\t\t//\n\t\t\t//   1. An object of properties\n\t\t\t//   2. A key and value\n\t\t\t//\n\t\t\tthis.set(owner, key, value);\n\n\t\t\t// Since the \"set\" path can have two possible entry points\n\t\t\t// return the expected data based on which path was taken[*]\n\t\t\treturn value !== undefined ? value : key;\n\t\t},\n\t\tremove: function (owner, key) {\n\t\t\tvar i,\n\t\t\t\tcache = owner[this.expando];\n\n\t\t\tif (cache === undefined) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (key !== undefined) {\n\n\t\t\t\t// Support array or space separated string of keys\n\t\t\t\tif (Array.isArray(key)) {\n\n\t\t\t\t\t// If key is an array of keys...\n\t\t\t\t\t// We always set camelCase keys, so remove that.\n\t\t\t\t\tkey = key.map(camelCase);\n\t\t\t\t} else {\n\t\t\t\t\tkey = camelCase(key);\n\n\t\t\t\t\t// If a key with the spaces exists, use it.\n\t\t\t\t\t// Otherwise, create an array by matching non-whitespace\n\t\t\t\t\tkey = key in cache ?\n\t\t\t\t\t\t[key] :\n\t\t\t\t\t\t(key.match(rnothtmlwhite) || []);\n\t\t\t\t}\n\n\t\t\t\ti = key.length;\n\n\t\t\t\twhile (i--) {\n\t\t\t\t\tdelete cache[key[i]];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove the expando if there's no more data\n\t\t\tif (key === undefined || jQuery.isEmptyObject(cache)) {\n\n\t\t\t\t// Support: Chrome <=35 - 45\n\t\t\t\t// Webkit & Blink performance suffers when deleting properties\n\t\t\t\t// from DOM nodes, so set to undefined instead\n\t\t\t\t// https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted)\n\t\t\t\tif (owner.nodeType) {\n\t\t\t\t\towner[this.expando] = undefined;\n\t\t\t\t} else {\n\t\t\t\t\tdelete owner[this.expando];\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\thasData: function (owner) {\n\t\t\tvar cache = owner[this.expando];\n\t\t\treturn cache !== undefined && !jQuery.isEmptyObject(cache);\n\t\t}\n\t};\n\tvar dataPriv = new Data();\n\n\tvar dataUser = new Data();\n\n\n\n\t//\tImplementation Summary\n\t//\n\t//\t1. Enforce API surface and semantic compatibility with 1.9.x branch\n\t//\t2. Improve the module's maintainability by reducing the storage\n\t//\t\tpaths to a single mechanism.\n\t//\t3. Use the same single mechanism to support \"private\" and \"user\" data.\n\t//\t4. _Never_ expose \"private\" data to user code (TODO: Drop _data, _removeData)\n\t//\t5. Avoid exposing implementation details on user objects (eg. expando properties)\n\t//\t6. Provide a clear path for implementation upgrade to WeakMap in 2014\n\n\tvar rbrace = /^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,\n\t\trmultiDash = /[A-Z]/g;\n\n\tfunction getData(data) {\n\t\tif (data === \"true\") {\n\t\t\treturn true;\n\t\t}\n\n\t\tif (data === \"false\") {\n\t\t\treturn false;\n\t\t}\n\n\t\tif (data === \"null\") {\n\t\t\treturn null;\n\t\t}\n\n\t\t// Only convert to a number if it doesn't change the string\n\t\tif (data === +data + \"\") {\n\t\t\treturn +data;\n\t\t}\n\n\t\tif (rbrace.test(data)) {\n\t\t\treturn JSON.parse(data);\n\t\t}\n\n\t\treturn data;\n\t}\n\n\tfunction dataAttr(elem, key, data) {\n\t\tvar name;\n\n\t\t// If nothing was found internally, try to fetch any\n\t\t// data from the HTML5 data-* attribute\n\t\tif (data === undefined && elem.nodeType === 1) {\n\t\t\tname = \"data-\" + key.replace(rmultiDash, \"-$&\").toLowerCase();\n\t\t\tdata = elem.getAttribute(name);\n\n\t\t\tif (typeof data === \"string\") {\n\t\t\t\ttry {\n\t\t\t\t\tdata = getData(data);\n\t\t\t\t} catch (e) { }\n\n\t\t\t\t// Make sure we set the data so it isn't changed later\n\t\t\t\tdataUser.set(elem, key, data);\n\t\t\t} else {\n\t\t\t\tdata = undefined;\n\t\t\t}\n\t\t}\n\t\treturn data;\n\t}\n\n\tjQuery.extend({\n\t\thasData: function (elem) {\n\t\t\treturn dataUser.hasData(elem) || dataPriv.hasData(elem);\n\t\t},\n\n\t\tdata: function (elem, name, data) {\n\t\t\treturn dataUser.access(elem, name, data);\n\t\t},\n\n\t\tremoveData: function (elem, name) {\n\t\t\tdataUser.remove(elem, name);\n\t\t},\n\n\t\t// TODO: Now that all calls to _data and _removeData have been replaced\n\t\t// with direct calls to dataPriv methods, these can be deprecated.\n\t\t_data: function (elem, name, data) {\n\t\t\treturn dataPriv.access(elem, name, data);\n\t\t},\n\n\t\t_removeData: function (elem, name) {\n\t\t\tdataPriv.remove(elem, name);\n\t\t}\n\t});\n\n\tjQuery.fn.extend({\n\t\tdata: function (key, value) {\n\t\t\tvar i, name, data,\n\t\t\t\telem = this[0],\n\t\t\t\tattrs = elem && elem.attributes;\n\n\t\t\t// Gets all values\n\t\t\tif (key === undefined) {\n\t\t\t\tif (this.length) {\n\t\t\t\t\tdata = dataUser.get(elem);\n\n\t\t\t\t\tif (elem.nodeType === 1 && !dataPriv.get(elem, \"hasDataAttrs\")) {\n\t\t\t\t\t\ti = attrs.length;\n\t\t\t\t\t\twhile (i--) {\n\n\t\t\t\t\t\t\t// Support: IE 11 only\n\t\t\t\t\t\t\t// The attrs elements can be null (trac-14894)\n\t\t\t\t\t\t\tif (attrs[i]) {\n\t\t\t\t\t\t\t\tname = attrs[i].name;\n\t\t\t\t\t\t\t\tif (name.indexOf(\"data-\") === 0) {\n\t\t\t\t\t\t\t\t\tname = camelCase(name.slice(5));\n\t\t\t\t\t\t\t\t\tdataAttr(elem, name, data[name]);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdataPriv.set(elem, \"hasDataAttrs\", true);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn data;\n\t\t\t}\n\n\t\t\t// Sets multiple values\n\t\t\tif (typeof key === \"object\") {\n\t\t\t\treturn this.each(function () {\n\t\t\t\t\tdataUser.set(this, key);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn access(this, function (value) {\n\t\t\t\tvar data;\n\n\t\t\t\t// The calling jQuery object (element matches) is not empty\n\t\t\t\t// (and therefore has an element appears at this[ 0 ]) and the\n\t\t\t\t// `value` parameter was not undefined. An empty jQuery object\n\t\t\t\t// will result in `undefined` for elem = this[ 0 ] which will\n\t\t\t\t// throw an exception if an attempt to read a data cache is made.\n\t\t\t\tif (elem && value === undefined) {\n\n\t\t\t\t\t// Attempt to get data from the cache\n\t\t\t\t\t// The key will always be camelCased in Data\n\t\t\t\t\tdata = dataUser.get(elem, key);\n\t\t\t\t\tif (data !== undefined) {\n\t\t\t\t\t\treturn data;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Attempt to \"discover\" the data in\n\t\t\t\t\t// HTML5 custom data-* attrs\n\t\t\t\t\tdata = dataAttr(elem, key);\n\t\t\t\t\tif (data !== undefined) {\n\t\t\t\t\t\treturn data;\n\t\t\t\t\t}\n\n\t\t\t\t\t// We tried really hard, but the data doesn't exist.\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Set the data...\n\t\t\t\tthis.each(function () {\n\n\t\t\t\t\t// We always store the camelCased key\n\t\t\t\t\tdataUser.set(this, key, value);\n\t\t\t\t});\n\t\t\t}, null, value, arguments.length > 1, null, true);\n\t\t},\n\n\t\tremoveData: function (key) {\n\t\t\treturn this.each(function () {\n\t\t\t\tdataUser.remove(this, key);\n\t\t\t});\n\t\t}\n\t});\n\n\n\tjQuery.extend({\n\t\tqueue: function (elem, type, data) {\n\t\t\tvar queue;\n\n\t\t\tif (elem) {\n\t\t\t\ttype = (type || \"fx\") + \"queue\";\n\t\t\t\tqueue = dataPriv.get(elem, type);\n\n\t\t\t\t// Speed up dequeue by getting out quickly if this is just a lookup\n\t\t\t\tif (data) {\n\t\t\t\t\tif (!queue || Array.isArray(data)) {\n\t\t\t\t\t\tqueue = dataPriv.access(elem, type, jQuery.makeArray(data));\n\t\t\t\t\t} else {\n\t\t\t\t\t\tqueue.push(data);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn queue || [];\n\t\t\t}\n\t\t},\n\n\t\tdequeue: function (elem, type) {\n\t\t\ttype = type || \"fx\";\n\n\t\t\tvar queue = jQuery.queue(elem, type),\n\t\t\t\tstartLength = queue.length,\n\t\t\t\tfn = queue.shift(),\n\t\t\t\thooks = jQuery._queueHooks(elem, type),\n\t\t\t\tnext = function () {\n\t\t\t\t\tjQuery.dequeue(elem, type);\n\t\t\t\t};\n\n\t\t\t// If the fx queue is dequeued, always remove the progress sentinel\n\t\t\tif (fn === \"inprogress\") {\n\t\t\t\tfn = queue.shift();\n\t\t\t\tstartLength--;\n\t\t\t}\n\n\t\t\tif (fn) {\n\n\t\t\t\t// Add a progress sentinel to prevent the fx queue from being\n\t\t\t\t// automatically dequeued\n\t\t\t\tif (type === \"fx\") {\n\t\t\t\t\tqueue.unshift(\"inprogress\");\n\t\t\t\t}\n\n\t\t\t\t// Clear up the last queue stop function\n\t\t\t\tdelete hooks.stop;\n\t\t\t\tfn.call(elem, next, hooks);\n\t\t\t}\n\n\t\t\tif (!startLength && hooks) {\n\t\t\t\thooks.empty.fire();\n\t\t\t}\n\t\t},\n\n\t\t// Not public - generate a queueHooks object, or return the current one\n\t\t_queueHooks: function (elem, type) {\n\t\t\tvar key = type + \"queueHooks\";\n\t\t\treturn dataPriv.get(elem, key) || dataPriv.access(elem, key, {\n\t\t\t\tempty: jQuery.Callbacks(\"once memory\").add(function () {\n\t\t\t\t\tdataPriv.remove(elem, [type + \"queue\", key]);\n\t\t\t\t})\n\t\t\t});\n\t\t}\n\t});\n\n\tjQuery.fn.extend({\n\t\tqueue: function (type, data) {\n\t\t\tvar setter = 2;\n\n\t\t\tif (typeof type !== \"string\") {\n\t\t\t\tdata = type;\n\t\t\t\ttype = \"fx\";\n\t\t\t\tsetter--;\n\t\t\t}\n\n\t\t\tif (arguments.length < setter) {\n\t\t\t\treturn jQuery.queue(this[0], type);\n\t\t\t}\n\n\t\t\treturn data === undefined ?\n\t\t\t\tthis :\n\t\t\t\tthis.each(function () {\n\t\t\t\t\tvar queue = jQuery.queue(this, type, data);\n\n\t\t\t\t\t// Ensure a hooks for this queue\n\t\t\t\t\tjQuery._queueHooks(this, type);\n\n\t\t\t\t\tif (type === \"fx\" && queue[0] !== \"inprogress\") {\n\t\t\t\t\t\tjQuery.dequeue(this, type);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t},\n\t\tdequeue: function (type) {\n\t\t\treturn this.each(function () {\n\t\t\t\tjQuery.dequeue(this, type);\n\t\t\t});\n\t\t},\n\t\tclearQueue: function (type) {\n\t\t\treturn this.queue(type || \"fx\", []);\n\t\t},\n\n\t\t// Get a promise resolved when queues of a certain type\n\t\t// are emptied (fx is the type by default)\n\t\tpromise: function (type, obj) {\n\t\t\tvar tmp,\n\t\t\t\tcount = 1,\n\t\t\t\tdefer = jQuery.Deferred(),\n\t\t\t\telements = this,\n\t\t\t\ti = this.length,\n\t\t\t\tresolve = function () {\n\t\t\t\t\tif (!(--count)) {\n\t\t\t\t\t\tdefer.resolveWith(elements, [elements]);\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\tif (typeof type !== \"string\") {\n\t\t\t\tobj = type;\n\t\t\t\ttype = undefined;\n\t\t\t}\n\t\t\ttype = type || \"fx\";\n\n\t\t\twhile (i--) {\n\t\t\t\ttmp = dataPriv.get(elements[i], type + \"queueHooks\");\n\t\t\t\tif (tmp && tmp.empty) {\n\t\t\t\t\tcount++;\n\t\t\t\t\ttmp.empty.add(resolve);\n\t\t\t\t}\n\t\t\t}\n\t\t\tresolve();\n\t\t\treturn defer.promise(obj);\n\t\t}\n\t});\n\tvar pnum = (/[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/).source;\n\n\tvar rcssNum = new RegExp(\"^(?:([+-])=|)(\" + pnum + \")([a-z%]*)$\", \"i\");\n\n\n\tvar cssExpand = [\"Top\", \"Right\", \"Bottom\", \"Left\"];\n\n\tvar documentElement = document.documentElement;\n\n\n\n\tvar isAttached = function (elem) {\n\t\treturn jQuery.contains(elem.ownerDocument, elem);\n\t},\n\t\tcomposed = { composed: true };\n\n\t// Support: IE 9 - 11+, Edge 12 - 18+, iOS 10.0 - 10.2 only\n\t// Check attachment across shadow DOM boundaries when possible (gh-3504)\n\t// Support: iOS 10.0-10.2 only\n\t// Early iOS 10 versions support `attachShadow` but not `getRootNode`,\n\t// leading to errors. We need to check for `getRootNode`.\n\tif (documentElement.getRootNode) {\n\t\tisAttached = function (elem) {\n\t\t\treturn jQuery.contains(elem.ownerDocument, elem) ||\n\t\t\t\telem.getRootNode(composed) === elem.ownerDocument;\n\t\t};\n\t}\n\tvar isHiddenWithinTree = function (elem, el) {\n\n\t\t// isHiddenWithinTree might be called from jQuery#filter function;\n\t\t// in that case, element will be second argument\n\t\telem = el || elem;\n\n\t\t// Inline style trumps all\n\t\treturn elem.style.display === \"none\" ||\n\t\t\telem.style.display === \"\" &&\n\n\t\t\t// Otherwise, check computed style\n\t\t\t// Support: Firefox <=43 - 45\n\t\t\t// Disconnected elements can have computed display: none, so first confirm that elem is\n\t\t\t// in the document.\n\t\t\tisAttached(elem) &&\n\n\t\t\tjQuery.css(elem, \"display\") === \"none\";\n\t};\n\n\n\n\tfunction adjustCSS(elem, prop, valueParts, tween) {\n\t\tvar adjusted, scale,\n\t\t\tmaxIterations = 20,\n\t\t\tcurrentValue = tween ?\n\t\t\t\tfunction () {\n\t\t\t\t\treturn tween.cur();\n\t\t\t\t} :\n\t\t\t\tfunction () {\n\t\t\t\t\treturn jQuery.css(elem, prop, \"\");\n\t\t\t\t},\n\t\t\tinitial = currentValue(),\n\t\t\tunit = valueParts && valueParts[3] || (jQuery.cssNumber[prop] ? \"\" : \"px\"),\n\n\t\t\t// Starting value computation is required for potential unit mismatches\n\t\t\tinitialInUnit = elem.nodeType &&\n\t\t\t\t(jQuery.cssNumber[prop] || unit !== \"px\" && +initial) &&\n\t\t\t\trcssNum.exec(jQuery.css(elem, prop));\n\n\t\tif (initialInUnit && initialInUnit[3] !== unit) {\n\n\t\t\t// Support: Firefox <=54\n\t\t\t// Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144)\n\t\t\tinitial = initial / 2;\n\n\t\t\t// Trust units reported by jQuery.css\n\t\t\tunit = unit || initialInUnit[3];\n\n\t\t\t// Iteratively approximate from a nonzero starting point\n\t\t\tinitialInUnit = +initial || 1;\n\n\t\t\twhile (maxIterations--) {\n\n\t\t\t\t// Evaluate and update our best guess (doubling guesses that zero out).\n\t\t\t\t// Finish if the scale equals or crosses 1 (making the old*new product non-positive).\n\t\t\t\tjQuery.style(elem, prop, initialInUnit + unit);\n\t\t\t\tif ((1 - scale) * (1 - (scale = currentValue() / initial || 0.5)) <= 0) {\n\t\t\t\t\tmaxIterations = 0;\n\t\t\t\t}\n\t\t\t\tinitialInUnit = initialInUnit / scale;\n\n\t\t\t}\n\n\t\t\tinitialInUnit = initialInUnit * 2;\n\t\t\tjQuery.style(elem, prop, initialInUnit + unit);\n\n\t\t\t// Make sure we update the tween properties later on\n\t\t\tvalueParts = valueParts || [];\n\t\t}\n\n\t\tif (valueParts) {\n\t\t\tinitialInUnit = +initialInUnit || +initial || 0;\n\n\t\t\t// Apply relative offset (+=/-=) if specified\n\t\t\tadjusted = valueParts[1] ?\n\t\t\t\tinitialInUnit + (valueParts[1] + 1) * valueParts[2] :\n\t\t\t\t+valueParts[2];\n\t\t\tif (tween) {\n\t\t\t\ttween.unit = unit;\n\t\t\t\ttween.start = initialInUnit;\n\t\t\t\ttween.end = adjusted;\n\t\t\t}\n\t\t}\n\t\treturn adjusted;\n\t}\n\n\n\tvar defaultDisplayMap = {};\n\n\tfunction getDefaultDisplay(elem) {\n\t\tvar temp,\n\t\t\tdoc = elem.ownerDocument,\n\t\t\tnodeName = elem.nodeName,\n\t\t\tdisplay = defaultDisplayMap[nodeName];\n\n\t\tif (display) {\n\t\t\treturn display;\n\t\t}\n\n\t\ttemp = doc.body.appendChild(doc.createElement(nodeName));\n\t\tdisplay = jQuery.css(temp, \"display\");\n\n\t\ttemp.parentNode.removeChild(temp);\n\n\t\tif (display === \"none\") {\n\t\t\tdisplay = \"block\";\n\t\t}\n\t\tdefaultDisplayMap[nodeName] = display;\n\n\t\treturn display;\n\t}\n\n\tfunction showHide(elements, show) {\n\t\tvar display, elem,\n\t\t\tvalues = [],\n\t\t\tindex = 0,\n\t\t\tlength = elements.length;\n\n\t\t// Determine new display value for elements that need to change\n\t\tfor (; index < length; index++) {\n\t\t\telem = elements[index];\n\t\t\tif (!elem.style) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tdisplay = elem.style.display;\n\t\t\tif (show) {\n\n\t\t\t\t// Since we force visibility upon cascade-hidden elements, an immediate (and slow)\n\t\t\t\t// check is required in this first loop unless we have a nonempty display value (either\n\t\t\t\t// inline or about-to-be-restored)\n\t\t\t\tif (display === \"none\") {\n\t\t\t\t\tvalues[index] = dataPriv.get(elem, \"display\") || null;\n\t\t\t\t\tif (!values[index]) {\n\t\t\t\t\t\telem.style.display = \"\";\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (elem.style.display === \"\" && isHiddenWithinTree(elem)) {\n\t\t\t\t\tvalues[index] = getDefaultDisplay(elem);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (display !== \"none\") {\n\t\t\t\t\tvalues[index] = \"none\";\n\n\t\t\t\t\t// Remember what we're overwriting\n\t\t\t\t\tdataPriv.set(elem, \"display\", display);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Set the display of the elements in a second loop to avoid constant reflow\n\t\tfor (index = 0; index < length; index++) {\n\t\t\tif (values[index] != null) {\n\t\t\t\telements[index].style.display = values[index];\n\t\t\t}\n\t\t}\n\n\t\treturn elements;\n\t}\n\n\tjQuery.fn.extend({\n\t\tshow: function () {\n\t\t\treturn showHide(this, true);\n\t\t},\n\t\thide: function () {\n\t\t\treturn showHide(this);\n\t\t},\n\t\ttoggle: function (state) {\n\t\t\tif (typeof state === \"boolean\") {\n\t\t\t\treturn state ? this.show() : this.hide();\n\t\t\t}\n\n\t\t\treturn this.each(function () {\n\t\t\t\tif (isHiddenWithinTree(this)) {\n\t\t\t\t\tjQuery(this).show();\n\t\t\t\t} else {\n\t\t\t\t\tjQuery(this).hide();\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t});\n\tvar rcheckableType = (/^(?:checkbox|radio)$/i);\n\n\tvar rtagName = (/<([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]*)/i);\n\n\tvar rscriptType = (/^$|^module$|\\/(?:java|ecma)script/i);\n\n\n\n\t(function () {\n\t\tvar fragment = document.createDocumentFragment(),\n\t\t\tdiv = fragment.appendChild(document.createElement(\"div\")),\n\t\t\tinput = document.createElement(\"input\");\n\n\t\t// Support: Android 4.0 - 4.3 only\n\t\t// Check state lost if the name is set (trac-11217)\n\t\t// Support: Windows Web Apps (WWA)\n\t\t// `name` and `type` must use .setAttribute for WWA (trac-14901)\n\t\tinput.setAttribute(\"type\", \"radio\");\n\t\tinput.setAttribute(\"checked\", \"checked\");\n\t\tinput.setAttribute(\"name\", \"t\");\n\n\t\tdiv.appendChild(input);\n\n\t\t// Support: Android <=4.1 only\n\t\t// Older WebKit doesn't clone checked state correctly in fragments\n\t\tsupport.checkClone = div.cloneNode(true).cloneNode(true).lastChild.checked;\n\n\t\t// Support: IE <=11 only\n\t\t// Make sure textarea (and checkbox) defaultValue is properly cloned\n\t\tdiv.innerHTML = \"<textarea>x</textarea>\";\n\t\tsupport.noCloneChecked = !!div.cloneNode(true).lastChild.defaultValue;\n\n\t\t// Support: IE <=9 only\n\t\t// IE <=9 replaces <option> tags with their contents when inserted outside of\n\t\t// the select element.\n\t\tdiv.innerHTML = \"<option></option>\";\n\t\tsupport.option = !!div.lastChild;\n\t})();\n\n\n\t// We have to close these tags to support XHTML (trac-13200)\n\tvar wrapMap = {\n\n\t\t// XHTML parsers do not magically insert elements in the\n\t\t// same way that tag soup parsers do. So we cannot shorten\n\t\t// this by omitting <tbody> or other required elements.\n\t\tthead: [1, \"<table>\", \"</table>\"],\n\t\tcol: [2, \"<table><colgroup>\", \"</colgroup></table>\"],\n\t\ttr: [2, \"<table><tbody>\", \"</tbody></table>\"],\n\t\ttd: [3, \"<table><tbody><tr>\", \"</tr></tbody></table>\"],\n\n\t\t_default: [0, \"\", \"\"]\n\t};\n\n\twrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;\n\twrapMap.th = wrapMap.td;\n\n\t// Support: IE <=9 only\n\tif (!support.option) {\n\t\twrapMap.optgroup = wrapMap.option = [1, \"<select multiple='multiple'>\", \"</select>\"];\n\t}\n\n\n\tfunction getAll(context, tag) {\n\n\t\t// Support: IE <=9 - 11 only\n\t\t// Use typeof to avoid zero-argument method invocation on host objects (trac-15151)\n\t\tvar ret;\n\n\t\tif (typeof context.getElementsByTagName !== \"undefined\") {\n\t\t\tret = context.getElementsByTagName(tag || \"*\");\n\n\t\t} else if (typeof context.querySelectorAll !== \"undefined\") {\n\t\t\tret = context.querySelectorAll(tag || \"*\");\n\n\t\t} else {\n\t\t\tret = [];\n\t\t}\n\n\t\tif (tag === undefined || tag && nodeName(context, tag)) {\n\t\t\treturn jQuery.merge([context], ret);\n\t\t}\n\n\t\treturn ret;\n\t}\n\n\n\t// Mark scripts as having already been evaluated\n\tfunction setGlobalEval(elems, refElements) {\n\t\tvar i = 0,\n\t\t\tl = elems.length;\n\n\t\tfor (; i < l; i++) {\n\t\t\tdataPriv.set(\n\t\t\t\telems[i],\n\t\t\t\t\"globalEval\",\n\t\t\t\t!refElements || dataPriv.get(refElements[i], \"globalEval\")\n\t\t\t);\n\t\t}\n\t}\n\n\n\tvar rhtml = /<|&#?\\w+;/;\n\n\tfunction buildFragment(elems, context, scripts, selection, ignored) {\n\t\tvar elem, tmp, tag, wrap, attached, j,\n\t\t\tfragment = context.createDocumentFragment(),\n\t\t\tnodes = [],\n\t\t\ti = 0,\n\t\t\tl = elems.length;\n\n\t\tfor (; i < l; i++) {\n\t\t\telem = elems[i];\n\n\t\t\tif (elem || elem === 0) {\n\n\t\t\t\t// Add nodes directly\n\t\t\t\tif (toType(elem) === \"object\") {\n\n\t\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\t\tjQuery.merge(nodes, elem.nodeType ? [elem] : elem);\n\n\t\t\t\t\t// Convert non-html into a text node\n\t\t\t\t} else if (!rhtml.test(elem)) {\n\t\t\t\t\tnodes.push(context.createTextNode(elem));\n\n\t\t\t\t\t// Convert html into DOM nodes\n\t\t\t\t} else {\n\t\t\t\t\ttmp = tmp || fragment.appendChild(context.createElement(\"div\"));\n\n\t\t\t\t\t// Deserialize a standard representation\n\t\t\t\t\ttag = (rtagName.exec(elem) || [\"\", \"\"])[1].toLowerCase();\n\t\t\t\t\twrap = wrapMap[tag] || wrapMap._default;\n\t\t\t\t\ttmp.innerHTML = wrap[1] + jQuery.htmlPrefilter(elem) + wrap[2];\n\n\t\t\t\t\t// Descend through wrappers to the right content\n\t\t\t\t\tj = wrap[0];\n\t\t\t\t\twhile (j--) {\n\t\t\t\t\t\ttmp = tmp.lastChild;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\t\tjQuery.merge(nodes, tmp.childNodes);\n\n\t\t\t\t\t// Remember the top-level container\n\t\t\t\t\ttmp = fragment.firstChild;\n\n\t\t\t\t\t// Ensure the created nodes are orphaned (trac-12392)\n\t\t\t\t\ttmp.textContent = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Remove wrapper from fragment\n\t\tfragment.textContent = \"\";\n\n\t\ti = 0;\n\t\twhile ((elem = nodes[i++])) {\n\n\t\t\t// Skip elements already in the context collection (trac-4087)\n\t\t\tif (selection && jQuery.inArray(elem, selection) > -1) {\n\t\t\t\tif (ignored) {\n\t\t\t\t\tignored.push(elem);\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tattached = isAttached(elem);\n\n\t\t\t// Append to fragment\n\t\t\ttmp = getAll(fragment.appendChild(elem), \"script\");\n\n\t\t\t// Preserve script evaluation history\n\t\t\tif (attached) {\n\t\t\t\tsetGlobalEval(tmp);\n\t\t\t}\n\n\t\t\t// Capture executables\n\t\t\tif (scripts) {\n\t\t\t\tj = 0;\n\t\t\t\twhile ((elem = tmp[j++])) {\n\t\t\t\t\tif (rscriptType.test(elem.type || \"\")) {\n\t\t\t\t\t\tscripts.push(elem);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn fragment;\n\t}\n\n\n\tvar rtypenamespace = /^([^.]*)(?:\\.(.+)|)/;\n\n\tfunction returnTrue() {\n\t\treturn true;\n\t}\n\n\tfunction returnFalse() {\n\t\treturn false;\n\t}\n\n\tfunction on(elem, types, selector, data, fn, one) {\n\t\tvar origFn, type;\n\n\t\t// Types can be a map of types/handlers\n\t\tif (typeof types === \"object\") {\n\n\t\t\t// ( types-Object, selector, data )\n\t\t\tif (typeof selector !== \"string\") {\n\n\t\t\t\t// ( types-Object, data )\n\t\t\t\tdata = data || selector;\n\t\t\t\tselector = undefined;\n\t\t\t}\n\t\t\tfor (type in types) {\n\t\t\t\ton(elem, type, selector, data, types[type], one);\n\t\t\t}\n\t\t\treturn elem;\n\t\t}\n\n\t\tif (data == null && fn == null) {\n\n\t\t\t// ( types, fn )\n\t\t\tfn = selector;\n\t\t\tdata = selector = undefined;\n\t\t} else if (fn == null) {\n\t\t\tif (typeof selector === \"string\") {\n\n\t\t\t\t// ( types, selector, fn )\n\t\t\t\tfn = data;\n\t\t\t\tdata = undefined;\n\t\t\t} else {\n\n\t\t\t\t// ( types, data, fn )\n\t\t\t\tfn = data;\n\t\t\t\tdata = selector;\n\t\t\t\tselector = undefined;\n\t\t\t}\n\t\t}\n\t\tif (fn === false) {\n\t\t\tfn = returnFalse;\n\t\t} else if (!fn) {\n\t\t\treturn elem;\n\t\t}\n\n\t\tif (one === 1) {\n\t\t\torigFn = fn;\n\t\t\tfn = function (event) {\n\n\t\t\t\t// Can use an empty set, since event contains the info\n\t\t\t\tjQuery().off(event);\n\t\t\t\treturn origFn.apply(this, arguments);\n\t\t\t};\n\n\t\t\t// Use same guid so caller can remove using origFn\n\t\t\tfn.guid = origFn.guid || (origFn.guid = jQuery.guid++);\n\t\t}\n\t\treturn elem.each(function () {\n\t\t\tjQuery.event.add(this, types, fn, data, selector);\n\t\t});\n\t}\n\n\t/*\n\t * Helper functions for managing events -- not part of the public interface.\n\t * Props to Dean Edwards' addEvent library for many of the ideas.\n\t */\n\tjQuery.event = {\n\n\t\tglobal: {},\n\n\t\tadd: function (elem, types, handler, data, selector) {\n\n\t\t\tvar handleObjIn, eventHandle, tmp,\n\t\t\t\tevents, t, handleObj,\n\t\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\t\telemData = dataPriv.get(elem);\n\n\t\t\t// Only attach events to objects that accept data\n\t\t\tif (!acceptData(elem)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Caller can pass in an object of custom data in lieu of the handler\n\t\t\tif (handler.handler) {\n\t\t\t\thandleObjIn = handler;\n\t\t\t\thandler = handleObjIn.handler;\n\t\t\t\tselector = handleObjIn.selector;\n\t\t\t}\n\n\t\t\t// Ensure that invalid selectors throw exceptions at attach time\n\t\t\t// Evaluate against documentElement in case elem is a non-element node (e.g., document)\n\t\t\tif (selector) {\n\t\t\t\tjQuery.find.matchesSelector(documentElement, selector);\n\t\t\t}\n\n\t\t\t// Make sure that the handler has a unique ID, used to find/remove it later\n\t\t\tif (!handler.guid) {\n\t\t\t\thandler.guid = jQuery.guid++;\n\t\t\t}\n\n\t\t\t// Init the element's event structure and main handler, if this is the first\n\t\t\tif (!(events = elemData.events)) {\n\t\t\t\tevents = elemData.events = Object.create(null);\n\t\t\t}\n\t\t\tif (!(eventHandle = elemData.handle)) {\n\t\t\t\teventHandle = elemData.handle = function (e) {\n\n\t\t\t\t\t// Discard the second event of a jQuery.event.trigger() and\n\t\t\t\t\t// when an event is called after a page has unloaded\n\t\t\t\t\treturn typeof jQuery !== \"undefined\" && jQuery.event.triggered !== e.type ?\n\t\t\t\t\t\tjQuery.event.dispatch.apply(elem, arguments) : undefined;\n\t\t\t\t};\n\t\t\t}\n\n\t\t\t// Handle multiple events separated by a space\n\t\t\ttypes = (types || \"\").match(rnothtmlwhite) || [\"\"];\n\t\t\tt = types.length;\n\t\t\twhile (t--) {\n\t\t\t\ttmp = rtypenamespace.exec(types[t]) || [];\n\t\t\t\ttype = origType = tmp[1];\n\t\t\t\tnamespaces = (tmp[2] || \"\").split(\".\").sort();\n\n\t\t\t\t// There *must* be a type, no attaching namespace-only handlers\n\t\t\t\tif (!type) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// If event changes its type, use the special event handlers for the changed type\n\t\t\t\tspecial = jQuery.event.special[type] || {};\n\n\t\t\t\t// If selector defined, determine special event api type, otherwise given type\n\t\t\t\ttype = (selector ? special.delegateType : special.bindType) || type;\n\n\t\t\t\t// Update special based on newly reset type\n\t\t\t\tspecial = jQuery.event.special[type] || {};\n\n\t\t\t\t// handleObj is passed to all event handlers\n\t\t\t\thandleObj = jQuery.extend({\n\t\t\t\t\ttype: type,\n\t\t\t\t\torigType: origType,\n\t\t\t\t\tdata: data,\n\t\t\t\t\thandler: handler,\n\t\t\t\t\tguid: handler.guid,\n\t\t\t\t\tselector: selector,\n\t\t\t\t\tneedsContext: selector && jQuery.expr.match.needsContext.test(selector),\n\t\t\t\t\tnamespace: namespaces.join(\".\")\n\t\t\t\t}, handleObjIn);\n\n\t\t\t\t// Init the event handler queue if we're the first\n\t\t\t\tif (!(handlers = events[type])) {\n\t\t\t\t\thandlers = events[type] = [];\n\t\t\t\t\thandlers.delegateCount = 0;\n\n\t\t\t\t\t// Only use addEventListener if the special events handler returns false\n\t\t\t\t\tif (!special.setup ||\n\t\t\t\t\t\tspecial.setup.call(elem, data, namespaces, eventHandle) === false) {\n\n\t\t\t\t\t\tif (elem.addEventListener) {\n\t\t\t\t\t\t\telem.addEventListener(type, eventHandle);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (special.add) {\n\t\t\t\t\tspecial.add.call(elem, handleObj);\n\n\t\t\t\t\tif (!handleObj.handler.guid) {\n\t\t\t\t\t\thandleObj.handler.guid = handler.guid;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Add to the element's handler list, delegates in front\n\t\t\t\tif (selector) {\n\t\t\t\t\thandlers.splice(handlers.delegateCount++, 0, handleObj);\n\t\t\t\t} else {\n\t\t\t\t\thandlers.push(handleObj);\n\t\t\t\t}\n\n\t\t\t\t// Keep track of which events have ever been used, for event optimization\n\t\t\t\tjQuery.event.global[type] = true;\n\t\t\t}\n\n\t\t},\n\n\t\t// Detach an event or set of events from an element\n\t\tremove: function (elem, types, handler, selector, mappedTypes) {\n\n\t\t\tvar j, origCount, tmp,\n\t\t\t\tevents, t, handleObj,\n\t\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\t\telemData = dataPriv.hasData(elem) && dataPriv.get(elem);\n\n\t\t\tif (!elemData || !(events = elemData.events)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Once for each type.namespace in types; type may be omitted\n\t\t\ttypes = (types || \"\").match(rnothtmlwhite) || [\"\"];\n\t\t\tt = types.length;\n\t\t\twhile (t--) {\n\t\t\t\ttmp = rtypenamespace.exec(types[t]) || [];\n\t\t\t\ttype = origType = tmp[1];\n\t\t\t\tnamespaces = (tmp[2] || \"\").split(\".\").sort();\n\n\t\t\t\t// Unbind all events (on this namespace, if provided) for the element\n\t\t\t\tif (!type) {\n\t\t\t\t\tfor (type in events) {\n\t\t\t\t\t\tjQuery.event.remove(elem, type + types[t], handler, selector, true);\n\t\t\t\t\t}\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tspecial = jQuery.event.special[type] || {};\n\t\t\t\ttype = (selector ? special.delegateType : special.bindType) || type;\n\t\t\t\thandlers = events[type] || [];\n\t\t\t\ttmp = tmp[2] &&\n\t\t\t\t\tnew RegExp(\"(^|\\\\.)\" + namespaces.join(\"\\\\.(?:.*\\\\.|)\") + \"(\\\\.|$)\");\n\n\t\t\t\t// Remove matching events\n\t\t\t\torigCount = j = handlers.length;\n\t\t\t\twhile (j--) {\n\t\t\t\t\thandleObj = handlers[j];\n\n\t\t\t\t\tif ((mappedTypes || origType === handleObj.origType) &&\n\t\t\t\t\t\t(!handler || handler.guid === handleObj.guid) &&\n\t\t\t\t\t\t(!tmp || tmp.test(handleObj.namespace)) &&\n\t\t\t\t\t\t(!selector || selector === handleObj.selector ||\n\t\t\t\t\t\t\tselector === \"**\" && handleObj.selector)) {\n\t\t\t\t\t\thandlers.splice(j, 1);\n\n\t\t\t\t\t\tif (handleObj.selector) {\n\t\t\t\t\t\t\thandlers.delegateCount--;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (special.remove) {\n\t\t\t\t\t\t\tspecial.remove.call(elem, handleObj);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Remove generic event handler if we removed something and no more handlers exist\n\t\t\t\t// (avoids potential for endless recursion during removal of special event handlers)\n\t\t\t\tif (origCount && !handlers.length) {\n\t\t\t\t\tif (!special.teardown ||\n\t\t\t\t\t\tspecial.teardown.call(elem, namespaces, elemData.handle) === false) {\n\n\t\t\t\t\t\tjQuery.removeEvent(elem, type, elemData.handle);\n\t\t\t\t\t}\n\n\t\t\t\t\tdelete events[type];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove data and the expando if it's no longer used\n\t\t\tif (jQuery.isEmptyObject(events)) {\n\t\t\t\tdataPriv.remove(elem, \"handle events\");\n\t\t\t}\n\t\t},\n\n\t\tdispatch: function (nativeEvent) {\n\n\t\t\tvar i, j, ret, matched, handleObj, handlerQueue,\n\t\t\t\targs = new Array(arguments.length),\n\n\t\t\t\t// Make a writable jQuery.Event from the native event object\n\t\t\t\tevent = jQuery.event.fix(nativeEvent),\n\n\t\t\t\thandlers = (\n\t\t\t\t\tdataPriv.get(this, \"events\") || Object.create(null)\n\t\t\t\t)[event.type] || [],\n\t\t\t\tspecial = jQuery.event.special[event.type] || {};\n\n\t\t\t// Use the fix-ed jQuery.Event rather than the (read-only) native event\n\t\t\targs[0] = event;\n\n\t\t\tfor (i = 1; i < arguments.length; i++) {\n\t\t\t\targs[i] = arguments[i];\n\t\t\t}\n\n\t\t\tevent.delegateTarget = this;\n\n\t\t\t// Call the preDispatch hook for the mapped type, and let it bail if desired\n\t\t\tif (special.preDispatch && special.preDispatch.call(this, event) === false) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Determine handlers\n\t\t\thandlerQueue = jQuery.event.handlers.call(this, event, handlers);\n\n\t\t\t// Run delegates first; they may want to stop propagation beneath us\n\t\t\ti = 0;\n\t\t\twhile ((matched = handlerQueue[i++]) && !event.isPropagationStopped()) {\n\t\t\t\tevent.currentTarget = matched.elem;\n\n\t\t\t\tj = 0;\n\t\t\t\twhile ((handleObj = matched.handlers[j++]) &&\n\t\t\t\t\t!event.isImmediatePropagationStopped()) {\n\n\t\t\t\t\t// If the event is namespaced, then each handler is only invoked if it is\n\t\t\t\t\t// specially universal or its namespaces are a superset of the event's.\n\t\t\t\t\tif (!event.rnamespace || handleObj.namespace === false ||\n\t\t\t\t\t\tevent.rnamespace.test(handleObj.namespace)) {\n\n\t\t\t\t\t\tevent.handleObj = handleObj;\n\t\t\t\t\t\tevent.data = handleObj.data;\n\n\t\t\t\t\t\tret = ((jQuery.event.special[handleObj.origType] || {}).handle ||\n\t\t\t\t\t\t\thandleObj.handler).apply(matched.elem, args);\n\n\t\t\t\t\t\tif (ret !== undefined) {\n\t\t\t\t\t\t\tif ((event.result = ret) === false) {\n\t\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Call the postDispatch hook for the mapped type\n\t\t\tif (special.postDispatch) {\n\t\t\t\tspecial.postDispatch.call(this, event);\n\t\t\t}\n\n\t\t\treturn event.result;\n\t\t},\n\n\t\thandlers: function (event, handlers) {\n\t\t\tvar i, handleObj, sel, matchedHandlers, matchedSelectors,\n\t\t\t\thandlerQueue = [],\n\t\t\t\tdelegateCount = handlers.delegateCount,\n\t\t\t\tcur = event.target;\n\n\t\t\t// Find delegate handlers\n\t\t\tif (delegateCount &&\n\n\t\t\t\t// Support: IE <=9\n\t\t\t\t// Black-hole SVG <use> instance trees (trac-13180)\n\t\t\t\tcur.nodeType &&\n\n\t\t\t\t// Support: Firefox <=42\n\t\t\t\t// Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861)\n\t\t\t\t// https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click\n\t\t\t\t// Support: IE 11 only\n\t\t\t\t// ...but not arrow key \"clicks\" of radio inputs, which can have `button` -1 (gh-2343)\n\t\t\t\t!(event.type === \"click\" && event.button >= 1)) {\n\n\t\t\t\tfor (; cur !== this; cur = cur.parentNode || this) {\n\n\t\t\t\t\t// Don't check non-elements (trac-13208)\n\t\t\t\t\t// Don't process clicks on disabled elements (trac-6911, trac-8165, trac-11382, trac-11764)\n\t\t\t\t\tif (cur.nodeType === 1 && !(event.type === \"click\" && cur.disabled === true)) {\n\t\t\t\t\t\tmatchedHandlers = [];\n\t\t\t\t\t\tmatchedSelectors = {};\n\t\t\t\t\t\tfor (i = 0; i < delegateCount; i++) {\n\t\t\t\t\t\t\thandleObj = handlers[i];\n\n\t\t\t\t\t\t\t// Don't conflict with Object.prototype properties (trac-13203)\n\t\t\t\t\t\t\tsel = handleObj.selector + \" \";\n\n\t\t\t\t\t\t\tif (matchedSelectors[sel] === undefined) {\n\t\t\t\t\t\t\t\tmatchedSelectors[sel] = handleObj.needsContext ?\n\t\t\t\t\t\t\t\t\tjQuery(sel, this).index(cur) > -1 :\n\t\t\t\t\t\t\t\t\tjQuery.find(sel, this, null, [cur]).length;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (matchedSelectors[sel]) {\n\t\t\t\t\t\t\t\tmatchedHandlers.push(handleObj);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (matchedHandlers.length) {\n\t\t\t\t\t\t\thandlerQueue.push({ elem: cur, handlers: matchedHandlers });\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Add the remaining (directly-bound) handlers\n\t\t\tcur = this;\n\t\t\tif (delegateCount < handlers.length) {\n\t\t\t\thandlerQueue.push({ elem: cur, handlers: handlers.slice(delegateCount) });\n\t\t\t}\n\n\t\t\treturn handlerQueue;\n\t\t},\n\n\t\taddProp: function (name, hook) {\n\t\t\tObject.defineProperty(jQuery.Event.prototype, name, {\n\t\t\t\tenumerable: true,\n\t\t\t\tconfigurable: true,\n\n\t\t\t\tget: isFunction(hook) ?\n\t\t\t\t\tfunction () {\n\t\t\t\t\t\tif (this.originalEvent) {\n\t\t\t\t\t\t\treturn hook(this.originalEvent);\n\t\t\t\t\t\t}\n\t\t\t\t\t} :\n\t\t\t\t\tfunction () {\n\t\t\t\t\t\tif (this.originalEvent) {\n\t\t\t\t\t\t\treturn this.originalEvent[name];\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\n\t\t\t\tset: function (value) {\n\t\t\t\t\tObject.defineProperty(this, name, {\n\t\t\t\t\t\tenumerable: true,\n\t\t\t\t\t\tconfigurable: true,\n\t\t\t\t\t\twritable: true,\n\t\t\t\t\t\tvalue: value\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\tfix: function (originalEvent) {\n\t\t\treturn originalEvent[jQuery.expando] ?\n\t\t\t\toriginalEvent :\n\t\t\t\tnew jQuery.Event(originalEvent);\n\t\t},\n\n\t\tspecial: {\n\t\t\tload: {\n\n\t\t\t\t// Prevent triggered image.load events from bubbling to window.load\n\t\t\t\tnoBubble: true\n\t\t\t},\n\t\t\tclick: {\n\n\t\t\t\t// Utilize native event to ensure correct state for checkable inputs\n\t\t\t\tsetup: function (data) {\n\n\t\t\t\t\t// For mutual compressibility with _default, replace `this` access with a local var.\n\t\t\t\t\t// `|| data` is dead code meant only to preserve the variable through minification.\n\t\t\t\t\tvar el = this || data;\n\n\t\t\t\t\t// Claim the first handler\n\t\t\t\t\tif (rcheckableType.test(el.type) &&\n\t\t\t\t\t\tel.click && nodeName(el, \"input\")) {\n\n\t\t\t\t\t\t// dataPriv.set( el, \"click\", ... )\n\t\t\t\t\t\tleverageNative(el, \"click\", true);\n\t\t\t\t\t}\n\n\t\t\t\t\t// Return false to allow normal processing in the caller\n\t\t\t\t\treturn false;\n\t\t\t\t},\n\t\t\t\ttrigger: function (data) {\n\n\t\t\t\t\t// For mutual compressibility with _default, replace `this` access with a local var.\n\t\t\t\t\t// `|| data` is dead code meant only to preserve the variable through minification.\n\t\t\t\t\tvar el = this || data;\n\n\t\t\t\t\t// Force setup before triggering a click\n\t\t\t\t\tif (rcheckableType.test(el.type) &&\n\t\t\t\t\t\tel.click && nodeName(el, \"input\")) {\n\n\t\t\t\t\t\tleverageNative(el, \"click\");\n\t\t\t\t\t}\n\n\t\t\t\t\t// Return non-false to allow normal event-path propagation\n\t\t\t\t\treturn true;\n\t\t\t\t},\n\n\t\t\t\t// For cross-browser consistency, suppress native .click() on links\n\t\t\t\t// Also prevent it if we're currently inside a leveraged native-event stack\n\t\t\t\t_default: function (event) {\n\t\t\t\t\tvar target = event.target;\n\t\t\t\t\treturn rcheckableType.test(target.type) &&\n\t\t\t\t\t\ttarget.click && nodeName(target, \"input\") &&\n\t\t\t\t\t\tdataPriv.get(target, \"click\") ||\n\t\t\t\t\t\tnodeName(target, \"a\");\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tbeforeunload: {\n\t\t\t\tpostDispatch: function (event) {\n\n\t\t\t\t\t// Support: Firefox 20+\n\t\t\t\t\t// Firefox doesn't alert if the returnValue field is not set.\n\t\t\t\t\tif (event.result !== undefined && event.originalEvent) {\n\t\t\t\t\t\tevent.originalEvent.returnValue = event.result;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t// Ensure the presence of an event listener that handles manually-triggered\n\t// synthetic events by interrupting progress until reinvoked in response to\n\t// *native* events that it fires directly, ensuring that state changes have\n\t// already occurred before other listeners are invoked.\n\tfunction leverageNative(el, type, isSetup) {\n\n\t\t// Missing `isSetup` indicates a trigger call, which must force setup through jQuery.event.add\n\t\tif (!isSetup) {\n\t\t\tif (dataPriv.get(el, type) === undefined) {\n\t\t\t\tjQuery.event.add(el, type, returnTrue);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\t// Register the controller as a special universal handler for all event namespaces\n\t\tdataPriv.set(el, type, false);\n\t\tjQuery.event.add(el, type, {\n\t\t\tnamespace: false,\n\t\t\thandler: function (event) {\n\t\t\t\tvar result,\n\t\t\t\t\tsaved = dataPriv.get(this, type);\n\n\t\t\t\tif ((event.isTrigger & 1) && this[type]) {\n\n\t\t\t\t\t// Interrupt processing of the outer synthetic .trigger()ed event\n\t\t\t\t\tif (!saved) {\n\n\t\t\t\t\t\t// Store arguments for use when handling the inner native event\n\t\t\t\t\t\t// There will always be at least one argument (an event object), so this array\n\t\t\t\t\t\t// will not be confused with a leftover capture object.\n\t\t\t\t\t\tsaved = slice.call(arguments);\n\t\t\t\t\t\tdataPriv.set(this, type, saved);\n\n\t\t\t\t\t\t// Trigger the native event and capture its result\n\t\t\t\t\t\tthis[type]();\n\t\t\t\t\t\tresult = dataPriv.get(this, type);\n\t\t\t\t\t\tdataPriv.set(this, type, false);\n\n\t\t\t\t\t\tif (saved !== result) {\n\n\t\t\t\t\t\t\t// Cancel the outer synthetic event\n\t\t\t\t\t\t\tevent.stopImmediatePropagation();\n\t\t\t\t\t\t\tevent.preventDefault();\n\n\t\t\t\t\t\t\treturn result;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// If this is an inner synthetic event for an event with a bubbling surrogate\n\t\t\t\t\t\t// (focus or blur), assume that the surrogate already propagated from triggering\n\t\t\t\t\t\t// the native event and prevent that from happening again here.\n\t\t\t\t\t\t// This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the\n\t\t\t\t\t\t// bubbling surrogate propagates *after* the non-bubbling base), but that seems\n\t\t\t\t\t\t// less bad than duplication.\n\t\t\t\t\t} else if ((jQuery.event.special[type] || {}).delegateType) {\n\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t}\n\n\t\t\t\t\t// If this is a native event triggered above, everything is now in order\n\t\t\t\t\t// Fire an inner synthetic event with the original arguments\n\t\t\t\t} else if (saved) {\n\n\t\t\t\t\t// ...and capture the result\n\t\t\t\t\tdataPriv.set(this, type, jQuery.event.trigger(\n\t\t\t\t\t\tsaved[0],\n\t\t\t\t\t\tsaved.slice(1),\n\t\t\t\t\t\tthis\n\t\t\t\t\t));\n\n\t\t\t\t\t// Abort handling of the native event by all jQuery handlers while allowing\n\t\t\t\t\t// native handlers on the same element to run. On target, this is achieved\n\t\t\t\t\t// by stopping immediate propagation just on the jQuery event. However,\n\t\t\t\t\t// the native event is re-wrapped by a jQuery one on each level of the\n\t\t\t\t\t// propagation so the only way to stop it for jQuery is to stop it for\n\t\t\t\t\t// everyone via native `stopPropagation()`. This is not a problem for\n\t\t\t\t\t// focus/blur which don't bubble, but it does also stop click on checkboxes\n\t\t\t\t\t// and radios. We accept this limitation.\n\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\tevent.isImmediatePropagationStopped = returnTrue;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\tjQuery.removeEvent = function (elem, type, handle) {\n\n\t\t// This \"if\" is needed for plain objects\n\t\tif (elem.removeEventListener) {\n\t\t\telem.removeEventListener(type, handle);\n\t\t}\n\t};\n\n\tjQuery.Event = function (src, props) {\n\n\t\t// Allow instantiation without the 'new' keyword\n\t\tif (!(this instanceof jQuery.Event)) {\n\t\t\treturn new jQuery.Event(src, props);\n\t\t}\n\n\t\t// Event object\n\t\tif (src && src.type) {\n\t\t\tthis.originalEvent = src;\n\t\t\tthis.type = src.type;\n\n\t\t\t// Events bubbling up the document may have been marked as prevented\n\t\t\t// by a handler lower down the tree; reflect the correct value.\n\t\t\tthis.isDefaultPrevented = src.defaultPrevented ||\n\t\t\t\tsrc.defaultPrevented === undefined &&\n\n\t\t\t\t// Support: Android <=2.3 only\n\t\t\t\tsrc.returnValue === false ?\n\t\t\t\treturnTrue :\n\t\t\t\treturnFalse;\n\n\t\t\t// Create target properties\n\t\t\t// Support: Safari <=6 - 7 only\n\t\t\t// Target should not be a text node (trac-504, trac-13143)\n\t\t\tthis.target = (src.target && src.target.nodeType === 3) ?\n\t\t\t\tsrc.target.parentNode :\n\t\t\t\tsrc.target;\n\n\t\t\tthis.currentTarget = src.currentTarget;\n\t\t\tthis.relatedTarget = src.relatedTarget;\n\n\t\t\t// Event type\n\t\t} else {\n\t\t\tthis.type = src;\n\t\t}\n\n\t\t// Put explicitly provided properties onto the event object\n\t\tif (props) {\n\t\t\tjQuery.extend(this, props);\n\t\t}\n\n\t\t// Create a timestamp if incoming event doesn't have one\n\t\tthis.timeStamp = src && src.timeStamp || Date.now();\n\n\t\t// Mark it as fixed\n\t\tthis[jQuery.expando] = true;\n\t};\n\n\t// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding\n\t// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html\n\tjQuery.Event.prototype = {\n\t\tconstructor: jQuery.Event,\n\t\tisDefaultPrevented: returnFalse,\n\t\tisPropagationStopped: returnFalse,\n\t\tisImmediatePropagationStopped: returnFalse,\n\t\tisSimulated: false,\n\n\t\tpreventDefault: function () {\n\t\t\tvar e = this.originalEvent;\n\n\t\t\tthis.isDefaultPrevented = returnTrue;\n\n\t\t\tif (e && !this.isSimulated) {\n\t\t\t\te.preventDefault();\n\t\t\t}\n\t\t},\n\t\tstopPropagation: function () {\n\t\t\tvar e = this.originalEvent;\n\n\t\t\tthis.isPropagationStopped = returnTrue;\n\n\t\t\tif (e && !this.isSimulated) {\n\t\t\t\te.stopPropagation();\n\t\t\t}\n\t\t},\n\t\tstopImmediatePropagation: function () {\n\t\t\tvar e = this.originalEvent;\n\n\t\t\tthis.isImmediatePropagationStopped = returnTrue;\n\n\t\t\tif (e && !this.isSimulated) {\n\t\t\t\te.stopImmediatePropagation();\n\t\t\t}\n\n\t\t\tthis.stopPropagation();\n\t\t}\n\t};\n\n\t// Includes all common event props including KeyEvent and MouseEvent specific props\n\tjQuery.each({\n\t\taltKey: true,\n\t\tbubbles: true,\n\t\tcancelable: true,\n\t\tchangedTouches: true,\n\t\tctrlKey: true,\n\t\tdetail: true,\n\t\teventPhase: true,\n\t\tmetaKey: true,\n\t\tpageX: true,\n\t\tpageY: true,\n\t\tshiftKey: true,\n\t\tview: true,\n\t\t\"char\": true,\n\t\tcode: true,\n\t\tcharCode: true,\n\t\tkey: true,\n\t\tkeyCode: true,\n\t\tbutton: true,\n\t\tbuttons: true,\n\t\tclientX: true,\n\t\tclientY: true,\n\t\toffsetX: true,\n\t\toffsetY: true,\n\t\tpointerId: true,\n\t\tpointerType: true,\n\t\tscreenX: true,\n\t\tscreenY: true,\n\t\ttargetTouches: true,\n\t\ttoElement: true,\n\t\ttouches: true,\n\t\twhich: true\n\t}, jQuery.event.addProp);\n\n\tjQuery.each({ focus: \"focusin\", blur: \"focusout\" }, function (type, delegateType) {\n\n\t\tfunction focusMappedHandler(nativeEvent) {\n\t\t\tif (document.documentMode) {\n\n\t\t\t\t// Support: IE 11+\n\t\t\t\t// Attach a single focusin/focusout handler on the document while someone wants\n\t\t\t\t// focus/blur. This is because the former are synchronous in IE while the latter\n\t\t\t\t// are async. In other browsers, all those handlers are invoked synchronously.\n\n\t\t\t\t// `handle` from private data would already wrap the event, but we need\n\t\t\t\t// to change the `type` here.\n\t\t\t\tvar handle = dataPriv.get(this, \"handle\"),\n\t\t\t\t\tevent = jQuery.event.fix(nativeEvent);\n\t\t\t\tevent.type = nativeEvent.type === \"focusin\" ? \"focus\" : \"blur\";\n\t\t\t\tevent.isSimulated = true;\n\n\t\t\t\t// First, handle focusin/focusout\n\t\t\t\thandle(nativeEvent);\n\n\t\t\t\t// ...then, handle focus/blur\n\t\t\t\t//\n\t\t\t\t// focus/blur don't bubble while focusin/focusout do; simulate the former by only\n\t\t\t\t// invoking the handler at the lower level.\n\t\t\t\tif (event.target === event.currentTarget) {\n\n\t\t\t\t\t// The setup part calls `leverageNative`, which, in turn, calls\n\t\t\t\t\t// `jQuery.event.add`, so event handle will already have been set\n\t\t\t\t\t// by this point.\n\t\t\t\t\thandle(event);\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\t// For non-IE browsers, attach a single capturing handler on the document\n\t\t\t\t// while someone wants focusin/focusout.\n\t\t\t\tjQuery.event.simulate(delegateType, nativeEvent.target,\n\t\t\t\t\tjQuery.event.fix(nativeEvent));\n\t\t\t}\n\t\t}\n\n\t\tjQuery.event.special[type] = {\n\n\t\t\t// Utilize native event if possible so blur/focus sequence is correct\n\t\t\tsetup: function () {\n\n\t\t\t\tvar attaches;\n\n\t\t\t\t// Claim the first handler\n\t\t\t\t// dataPriv.set( this, \"focus\", ... )\n\t\t\t\t// dataPriv.set( this, \"blur\", ... )\n\t\t\t\tleverageNative(this, type, true);\n\n\t\t\t\tif (document.documentMode) {\n\n\t\t\t\t\t// Support: IE 9 - 11+\n\t\t\t\t\t// We use the same native handler for focusin & focus (and focusout & blur)\n\t\t\t\t\t// so we need to coordinate setup & teardown parts between those events.\n\t\t\t\t\t// Use `delegateType` as the key as `type` is already used by `leverageNative`.\n\t\t\t\t\tattaches = dataPriv.get(this, delegateType);\n\t\t\t\t\tif (!attaches) {\n\t\t\t\t\t\tthis.addEventListener(delegateType, focusMappedHandler);\n\t\t\t\t\t}\n\t\t\t\t\tdataPriv.set(this, delegateType, (attaches || 0) + 1);\n\t\t\t\t} else {\n\n\t\t\t\t\t// Return false to allow normal processing in the caller\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\t\t\ttrigger: function () {\n\n\t\t\t\t// Force setup before trigger\n\t\t\t\tleverageNative(this, type);\n\n\t\t\t\t// Return non-false to allow normal event-path propagation\n\t\t\t\treturn true;\n\t\t\t},\n\n\t\t\tteardown: function () {\n\t\t\t\tvar attaches;\n\n\t\t\t\tif (document.documentMode) {\n\t\t\t\t\tattaches = dataPriv.get(this, delegateType) - 1;\n\t\t\t\t\tif (!attaches) {\n\t\t\t\t\t\tthis.removeEventListener(delegateType, focusMappedHandler);\n\t\t\t\t\t\tdataPriv.remove(this, delegateType);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdataPriv.set(this, delegateType, attaches);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\n\t\t\t\t\t// Return false to indicate standard teardown should be applied\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// Suppress native focus or blur if we're currently inside\n\t\t\t// a leveraged native-event stack\n\t\t\t_default: function (event) {\n\t\t\t\treturn dataPriv.get(event.target, type);\n\t\t\t},\n\n\t\t\tdelegateType: delegateType\n\t\t};\n\n\t\t// Support: Firefox <=44\n\t\t// Firefox doesn't have focus(in | out) events\n\t\t// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787\n\t\t//\n\t\t// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1\n\t\t// focus(in | out) events fire after focus & blur events,\n\t\t// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order\n\t\t// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857\n\t\t//\n\t\t// Support: IE 9 - 11+\n\t\t// To preserve relative focusin/focus & focusout/blur event order guaranteed on the 3.x branch,\n\t\t// attach a single handler for both events in IE.\n\t\tjQuery.event.special[delegateType] = {\n\t\t\tsetup: function () {\n\n\t\t\t\t// Handle: regular nodes (via `this.ownerDocument`), window\n\t\t\t\t// (via `this.document`) & document (via `this`).\n\t\t\t\tvar doc = this.ownerDocument || this.document || this,\n\t\t\t\t\tdataHolder = document.documentMode ? this : doc,\n\t\t\t\t\tattaches = dataPriv.get(dataHolder, delegateType);\n\n\t\t\t\t// Support: IE 9 - 11+\n\t\t\t\t// We use the same native handler for focusin & focus (and focusout & blur)\n\t\t\t\t// so we need to coordinate setup & teardown parts between those events.\n\t\t\t\t// Use `delegateType` as the key as `type` is already used by `leverageNative`.\n\t\t\t\tif (!attaches) {\n\t\t\t\t\tif (document.documentMode) {\n\t\t\t\t\t\tthis.addEventListener(delegateType, focusMappedHandler);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdoc.addEventListener(type, focusMappedHandler, true);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tdataPriv.set(dataHolder, delegateType, (attaches || 0) + 1);\n\t\t\t},\n\t\t\tteardown: function () {\n\t\t\t\tvar doc = this.ownerDocument || this.document || this,\n\t\t\t\t\tdataHolder = document.documentMode ? this : doc,\n\t\t\t\t\tattaches = dataPriv.get(dataHolder, delegateType) - 1;\n\n\t\t\t\tif (!attaches) {\n\t\t\t\t\tif (document.documentMode) {\n\t\t\t\t\t\tthis.removeEventListener(delegateType, focusMappedHandler);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdoc.removeEventListener(type, focusMappedHandler, true);\n\t\t\t\t\t}\n\t\t\t\t\tdataPriv.remove(dataHolder, delegateType);\n\t\t\t\t} else {\n\t\t\t\t\tdataPriv.set(dataHolder, delegateType, attaches);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t});\n\n\t// Create mouseenter/leave events using mouseover/out and event-time checks\n\t// so that event delegation works in jQuery.\n\t// Do the same for pointerenter/pointerleave and pointerover/pointerout\n\t//\n\t// Support: Safari 7 only\n\t// Safari sends mouseenter too often; see:\n\t// https://bugs.chromium.org/p/chromium/issues/detail?id=470258\n\t// for the description of the bug (it existed in older Chrome versions as well).\n\tjQuery.each({\n\t\tmouseenter: \"mouseover\",\n\t\tmouseleave: \"mouseout\",\n\t\tpointerenter: \"pointerover\",\n\t\tpointerleave: \"pointerout\"\n\t}, function (orig, fix) {\n\t\tjQuery.event.special[orig] = {\n\t\t\tdelegateType: fix,\n\t\t\tbindType: fix,\n\n\t\t\thandle: function (event) {\n\t\t\t\tvar ret,\n\t\t\t\t\ttarget = this,\n\t\t\t\t\trelated = event.relatedTarget,\n\t\t\t\t\thandleObj = event.handleObj;\n\n\t\t\t\t// For mouseenter/leave call the handler if related is outside the target.\n\t\t\t\t// NB: No relatedTarget if the mouse left/entered the browser window\n\t\t\t\tif (!related || (related !== target && !jQuery.contains(target, related))) {\n\t\t\t\t\tevent.type = handleObj.origType;\n\t\t\t\t\tret = handleObj.handler.apply(this, arguments);\n\t\t\t\t\tevent.type = fix;\n\t\t\t\t}\n\t\t\t\treturn ret;\n\t\t\t}\n\t\t};\n\t});\n\n\tjQuery.fn.extend({\n\n\t\ton: function (types, selector, data, fn) {\n\t\t\treturn on(this, types, selector, data, fn);\n\t\t},\n\t\tone: function (types, selector, data, fn) {\n\t\t\treturn on(this, types, selector, data, fn, 1);\n\t\t},\n\t\toff: function (types, selector, fn) {\n\t\t\tvar handleObj, type;\n\t\t\tif (types && types.preventDefault && types.handleObj) {\n\n\t\t\t\t// ( event )  dispatched jQuery.Event\n\t\t\t\thandleObj = types.handleObj;\n\t\t\t\tjQuery(types.delegateTarget).off(\n\t\t\t\t\thandleObj.namespace ?\n\t\t\t\t\t\thandleObj.origType + \".\" + handleObj.namespace :\n\t\t\t\t\t\thandleObj.origType,\n\t\t\t\t\thandleObj.selector,\n\t\t\t\t\thandleObj.handler\n\t\t\t\t);\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\tif (typeof types === \"object\") {\n\n\t\t\t\t// ( types-object [, selector] )\n\t\t\t\tfor (type in types) {\n\t\t\t\t\tthis.off(type, selector, types[type]);\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\tif (selector === false || typeof selector === \"function\") {\n\n\t\t\t\t// ( types [, fn] )\n\t\t\t\tfn = selector;\n\t\t\t\tselector = undefined;\n\t\t\t}\n\t\t\tif (fn === false) {\n\t\t\t\tfn = returnFalse;\n\t\t\t}\n\t\t\treturn this.each(function () {\n\t\t\t\tjQuery.event.remove(this, types, fn, selector);\n\t\t\t});\n\t\t}\n\t});\n\n\n\tvar\n\n\t\t// Support: IE <=10 - 11, Edge 12 - 13 only\n\t\t// In IE/Edge using regex groups here causes severe slowdowns.\n\t\t// See https://connect.microsoft.com/IE/feedback/details/1736512/\n\t\trnoInnerhtml = /<script|<style|<link/i,\n\n\t\t// checked=\"checked\" or checked\n\t\trchecked = /checked\\s*(?:[^=]|=\\s*.checked.)/i,\n\n\t\trcleanScript = /^\\s*<!\\[CDATA\\[|\\]\\]>\\s*$/g;\n\n\t// Prefer a tbody over its parent table for containing new rows\n\tfunction manipulationTarget(elem, content) {\n\t\tif (nodeName(elem, \"table\") &&\n\t\t\tnodeName(content.nodeType !== 11 ? content : content.firstChild, \"tr\")) {\n\n\t\t\treturn jQuery(elem).children(\"tbody\")[0] || elem;\n\t\t}\n\n\t\treturn elem;\n\t}\n\n\t// Replace/restore the type attribute of script elements for safe DOM manipulation\n\tfunction disableScript(elem) {\n\t\telem.type = (elem.getAttribute(\"type\") !== null) + \"/\" + elem.type;\n\t\treturn elem;\n\t}\n\tfunction restoreScript(elem) {\n\t\tif ((elem.type || \"\").slice(0, 5) === \"true/\") {\n\t\t\telem.type = elem.type.slice(5);\n\t\t} else {\n\t\t\telem.removeAttribute(\"type\");\n\t\t}\n\n\t\treturn elem;\n\t}\n\n\tfunction cloneCopyEvent(src, dest) {\n\t\tvar i, l, type, pdataOld, udataOld, udataCur, events;\n\n\t\tif (dest.nodeType !== 1) {\n\t\t\treturn;\n\t\t}\n\n\t\t// 1. Copy private data: events, handlers, etc.\n\t\tif (dataPriv.hasData(src)) {\n\t\t\tpdataOld = dataPriv.get(src);\n\t\t\tevents = pdataOld.events;\n\n\t\t\tif (events) {\n\t\t\t\tdataPriv.remove(dest, \"handle events\");\n\n\t\t\t\tfor (type in events) {\n\t\t\t\t\tfor (i = 0, l = events[type].length; i < l; i++) {\n\t\t\t\t\t\tjQuery.event.add(dest, type, events[type][i]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// 2. Copy user data\n\t\tif (dataUser.hasData(src)) {\n\t\t\tudataOld = dataUser.access(src);\n\t\t\tudataCur = jQuery.extend({}, udataOld);\n\n\t\t\tdataUser.set(dest, udataCur);\n\t\t}\n\t}\n\n\t// Fix IE bugs, see support tests\n\tfunction fixInput(src, dest) {\n\t\tvar nodeName = dest.nodeName.toLowerCase();\n\n\t\t// Fails to persist the checked state of a cloned checkbox or radio button.\n\t\tif (nodeName === \"input\" && rcheckableType.test(src.type)) {\n\t\t\tdest.checked = src.checked;\n\n\t\t\t// Fails to return the selected option to the default selected state when cloning options\n\t\t} else if (nodeName === \"input\" || nodeName === \"textarea\") {\n\t\t\tdest.defaultValue = src.defaultValue;\n\t\t}\n\t}\n\n\tfunction domManip(collection, args, callback, ignored) {\n\n\t\t// Flatten any nested arrays\n\t\targs = flat(args);\n\n\t\tvar fragment, first, scripts, hasScripts, node, doc,\n\t\t\ti = 0,\n\t\t\tl = collection.length,\n\t\t\tiNoClone = l - 1,\n\t\t\tvalue = args[0],\n\t\t\tvalueIsFunction = isFunction(value);\n\n\t\t// We can't cloneNode fragments that contain checked, in WebKit\n\t\tif (valueIsFunction ||\n\t\t\t(l > 1 && typeof value === \"string\" &&\n\t\t\t\t!support.checkClone && rchecked.test(value))) {\n\t\t\treturn collection.each(function (index) {\n\t\t\t\tvar self = collection.eq(index);\n\t\t\t\tif (valueIsFunction) {\n\t\t\t\t\targs[0] = value.call(this, index, self.html());\n\t\t\t\t}\n\t\t\t\tdomManip(self, args, callback, ignored);\n\t\t\t});\n\t\t}\n\n\t\tif (l) {\n\t\t\tfragment = buildFragment(args, collection[0].ownerDocument, false, collection, ignored);\n\t\t\tfirst = fragment.firstChild;\n\n\t\t\tif (fragment.childNodes.length === 1) {\n\t\t\t\tfragment = first;\n\t\t\t}\n\n\t\t\t// Require either new content or an interest in ignored elements to invoke the callback\n\t\t\tif (first || ignored) {\n\t\t\t\tscripts = jQuery.map(getAll(fragment, \"script\"), disableScript);\n\t\t\t\thasScripts = scripts.length;\n\n\t\t\t\t// Use the original fragment for the last item\n\t\t\t\t// instead of the first because it can end up\n\t\t\t\t// being emptied incorrectly in certain situations (trac-8070).\n\t\t\t\tfor (; i < l; i++) {\n\t\t\t\t\tnode = fragment;\n\n\t\t\t\t\tif (i !== iNoClone) {\n\t\t\t\t\t\tnode = jQuery.clone(node, true, true);\n\n\t\t\t\t\t\t// Keep references to cloned scripts for later restoration\n\t\t\t\t\t\tif (hasScripts) {\n\n\t\t\t\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\t\t\t\tjQuery.merge(scripts, getAll(node, \"script\"));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tcallback.call(collection[i], node, i);\n\t\t\t\t}\n\n\t\t\t\tif (hasScripts) {\n\t\t\t\t\tdoc = scripts[scripts.length - 1].ownerDocument;\n\n\t\t\t\t\t// Reenable scripts\n\t\t\t\t\tjQuery.map(scripts, restoreScript);\n\n\t\t\t\t\t// Evaluate executable scripts on first document insertion\n\t\t\t\t\tfor (i = 0; i < hasScripts; i++) {\n\t\t\t\t\t\tnode = scripts[i];\n\t\t\t\t\t\tif (rscriptType.test(node.type || \"\") &&\n\t\t\t\t\t\t\t!dataPriv.access(node, \"globalEval\") &&\n\t\t\t\t\t\t\tjQuery.contains(doc, node)) {\n\n\t\t\t\t\t\t\tif (node.src && (node.type || \"\").toLowerCase() !== \"module\") {\n\n\t\t\t\t\t\t\t\t// Optional AJAX dependency, but won't run scripts if not present\n\t\t\t\t\t\t\t\tif (jQuery._evalUrl && !node.noModule) {\n\t\t\t\t\t\t\t\t\tjQuery._evalUrl(node.src, {\n\t\t\t\t\t\t\t\t\t\tnonce: node.nonce || node.getAttribute(\"nonce\")\n\t\t\t\t\t\t\t\t\t}, doc);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t// Unwrap a CDATA section containing script contents. This shouldn't be\n\t\t\t\t\t\t\t\t// needed as in XML documents they're already not visible when\n\t\t\t\t\t\t\t\t// inspecting element contents and in HTML documents they have no\n\t\t\t\t\t\t\t\t// meaning but we're preserving that logic for backwards compatibility.\n\t\t\t\t\t\t\t\t// This will be removed completely in 4.0. See gh-4904.\n\t\t\t\t\t\t\t\tDOMEval(node.textContent.replace(rcleanScript, \"\"), node, doc);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn collection;\n\t}\n\n\tfunction remove(elem, selector, keepData) {\n\t\tvar node,\n\t\t\tnodes = selector ? jQuery.filter(selector, elem) : elem,\n\t\t\ti = 0;\n\n\t\tfor (; (node = nodes[i]) != null; i++) {\n\t\t\tif (!keepData && node.nodeType === 1) {\n\t\t\t\tjQuery.cleanData(getAll(node));\n\t\t\t}\n\n\t\t\tif (node.parentNode) {\n\t\t\t\tif (keepData && isAttached(node)) {\n\t\t\t\t\tsetGlobalEval(getAll(node, \"script\"));\n\t\t\t\t}\n\t\t\t\tnode.parentNode.removeChild(node);\n\t\t\t}\n\t\t}\n\n\t\treturn elem;\n\t}\n\n\tjQuery.extend({\n\t\thtmlPrefilter: function (html) {\n\t\t\treturn html;\n\t\t},\n\n\t\tclone: function (elem, dataAndEvents, deepDataAndEvents) {\n\t\t\tvar i, l, srcElements, destElements,\n\t\t\t\tclone = elem.cloneNode(true),\n\t\t\t\tinPage = isAttached(elem);\n\n\t\t\t// Fix IE cloning issues\n\t\t\tif (!support.noCloneChecked && (elem.nodeType === 1 || elem.nodeType === 11) &&\n\t\t\t\t!jQuery.isXMLDoc(elem)) {\n\n\t\t\t\t// We eschew jQuery#find here for performance reasons:\n\t\t\t\t// https://jsperf.com/getall-vs-sizzle/2\n\t\t\t\tdestElements = getAll(clone);\n\t\t\t\tsrcElements = getAll(elem);\n\n\t\t\t\tfor (i = 0, l = srcElements.length; i < l; i++) {\n\t\t\t\t\tfixInput(srcElements[i], destElements[i]);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Copy the events from the original to the clone\n\t\t\tif (dataAndEvents) {\n\t\t\t\tif (deepDataAndEvents) {\n\t\t\t\t\tsrcElements = srcElements || getAll(elem);\n\t\t\t\t\tdestElements = destElements || getAll(clone);\n\n\t\t\t\t\tfor (i = 0, l = srcElements.length; i < l; i++) {\n\t\t\t\t\t\tcloneCopyEvent(srcElements[i], destElements[i]);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tcloneCopyEvent(elem, clone);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Preserve script evaluation history\n\t\t\tdestElements = getAll(clone, \"script\");\n\t\t\tif (destElements.length > 0) {\n\t\t\t\tsetGlobalEval(destElements, !inPage && getAll(elem, \"script\"));\n\t\t\t}\n\n\t\t\t// Return the cloned set\n\t\t\treturn clone;\n\t\t},\n\n\t\tcleanData: function (elems) {\n\t\t\tvar data, elem, type,\n\t\t\t\tspecial = jQuery.event.special,\n\t\t\t\ti = 0;\n\n\t\t\tfor (; (elem = elems[i]) !== undefined; i++) {\n\t\t\t\tif (acceptData(elem)) {\n\t\t\t\t\tif ((data = elem[dataPriv.expando])) {\n\t\t\t\t\t\tif (data.events) {\n\t\t\t\t\t\t\tfor (type in data.events) {\n\t\t\t\t\t\t\t\tif (special[type]) {\n\t\t\t\t\t\t\t\t\tjQuery.event.remove(elem, type);\n\n\t\t\t\t\t\t\t\t\t// This is a shortcut to avoid jQuery.event.remove's overhead\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tjQuery.removeEvent(elem, type, data.handle);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\t\telem[dataPriv.expando] = undefined;\n\t\t\t\t\t}\n\t\t\t\t\tif (elem[dataUser.expando]) {\n\n\t\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\t\telem[dataUser.expando] = undefined;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\n\tjQuery.fn.extend({\n\t\tdetach: function (selector) {\n\t\t\treturn remove(this, selector, true);\n\t\t},\n\n\t\tremove: function (selector) {\n\t\t\treturn remove(this, selector);\n\t\t},\n\n\t\ttext: function (value) {\n\t\t\treturn access(this, function (value) {\n\t\t\t\treturn value === undefined ?\n\t\t\t\t\tjQuery.text(this) :\n\t\t\t\t\tthis.empty().each(function () {\n\t\t\t\t\t\tif (this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9) {\n\t\t\t\t\t\t\tthis.textContent = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t}, null, value, arguments.length);\n\t\t},\n\n\t\tappend: function () {\n\t\t\treturn domManip(this, arguments, function (elem) {\n\t\t\t\tif (this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9) {\n\t\t\t\t\tvar target = manipulationTarget(this, elem);\n\t\t\t\t\ttarget.appendChild(elem);\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\tprepend: function () {\n\t\t\treturn domManip(this, arguments, function (elem) {\n\t\t\t\tif (this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9) {\n\t\t\t\t\tvar target = manipulationTarget(this, elem);\n\t\t\t\t\ttarget.insertBefore(elem, target.firstChild);\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\tbefore: function () {\n\t\t\treturn domManip(this, arguments, function (elem) {\n\t\t\t\tif (this.parentNode) {\n\t\t\t\t\tthis.parentNode.insertBefore(elem, this);\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\tafter: function () {\n\t\t\treturn domManip(this, arguments, function (elem) {\n\t\t\t\tif (this.parentNode) {\n\t\t\t\t\tthis.parentNode.insertBefore(elem, this.nextSibling);\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\tempty: function () {\n\t\t\tvar elem,\n\t\t\t\ti = 0;\n\n\t\t\tfor (; (elem = this[i]) != null; i++) {\n\t\t\t\tif (elem.nodeType === 1) {\n\n\t\t\t\t\t// Prevent memory leaks\n\t\t\t\t\tjQuery.cleanData(getAll(elem, false));\n\n\t\t\t\t\t// Remove any remaining nodes\n\t\t\t\t\telem.textContent = \"\";\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn this;\n\t\t},\n\n\t\tclone: function (dataAndEvents, deepDataAndEvents) {\n\t\t\tdataAndEvents = dataAndEvents == null ? false : dataAndEvents;\n\t\t\tdeepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;\n\n\t\t\treturn this.map(function () {\n\t\t\t\treturn jQuery.clone(this, dataAndEvents, deepDataAndEvents);\n\t\t\t});\n\t\t},\n\n\t\thtml: function (value) {\n\t\t\treturn access(this, function (value) {\n\t\t\t\tvar elem = this[0] || {},\n\t\t\t\t\ti = 0,\n\t\t\t\t\tl = this.length;\n\n\t\t\t\tif (value === undefined && elem.nodeType === 1) {\n\t\t\t\t\treturn elem.innerHTML;\n\t\t\t\t}\n\n\t\t\t\t// See if we can take a shortcut and just use innerHTML\n\t\t\t\tif (typeof value === \"string\" && !rnoInnerhtml.test(value) &&\n\t\t\t\t\t!wrapMap[(rtagName.exec(value) || [\"\", \"\"])[1].toLowerCase()]) {\n\n\t\t\t\t\tvalue = jQuery.htmlPrefilter(value);\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tfor (; i < l; i++) {\n\t\t\t\t\t\t\telem = this[i] || {};\n\n\t\t\t\t\t\t\t// Remove element nodes and prevent memory leaks\n\t\t\t\t\t\t\tif (elem.nodeType === 1) {\n\t\t\t\t\t\t\t\tjQuery.cleanData(getAll(elem, false));\n\t\t\t\t\t\t\t\telem.innerHTML = value;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\telem = 0;\n\n\t\t\t\t\t\t// If using innerHTML throws an exception, use the fallback method\n\t\t\t\t\t} catch (e) { }\n\t\t\t\t}\n\n\t\t\t\tif (elem) {\n\t\t\t\t\tthis.empty().append(value);\n\t\t\t\t}\n\t\t\t}, null, value, arguments.length);\n\t\t},\n\n\t\treplaceWith: function () {\n\t\t\tvar ignored = [];\n\n\t\t\t// Make the changes, replacing each non-ignored context element with the new content\n\t\t\treturn domManip(this, arguments, function (elem) {\n\t\t\t\tvar parent = this.parentNode;\n\n\t\t\t\tif (jQuery.inArray(this, ignored) < 0) {\n\t\t\t\t\tjQuery.cleanData(getAll(this));\n\t\t\t\t\tif (parent) {\n\t\t\t\t\t\tparent.replaceChild(elem, this);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Force callback invocation\n\t\t\t}, ignored);\n\t\t}\n\t});\n\n\tjQuery.each({\n\t\tappendTo: \"append\",\n\t\tprependTo: \"prepend\",\n\t\tinsertBefore: \"before\",\n\t\tinsertAfter: \"after\",\n\t\treplaceAll: \"replaceWith\"\n\t}, function (name, original) {\n\t\tjQuery.fn[name] = function (selector) {\n\t\t\tvar elems,\n\t\t\t\tret = [],\n\t\t\t\tinsert = jQuery(selector),\n\t\t\t\tlast = insert.length - 1,\n\t\t\t\ti = 0;\n\n\t\t\tfor (; i <= last; i++) {\n\t\t\t\telems = i === last ? this : this.clone(true);\n\t\t\t\tjQuery(insert[i])[original](elems);\n\n\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t// .get() because push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\tpush.apply(ret, elems.get());\n\t\t\t}\n\n\t\t\treturn this.pushStack(ret);\n\t\t};\n\t});\n\tvar rnumnonpx = new RegExp(\"^(\" + pnum + \")(?!px)[a-z%]+$\", \"i\");\n\n\tvar rcustomProp = /^--/;\n\n\n\tvar getStyles = function (elem) {\n\n\t\t// Support: IE <=11 only, Firefox <=30 (trac-15098, trac-14150)\n\t\t// IE throws on elements created in popups\n\t\t// FF meanwhile throws on frame elements through \"defaultView.getComputedStyle\"\n\t\tvar view = elem.ownerDocument.defaultView;\n\n\t\tif (!view || !view.opener) {\n\t\t\tview = window;\n\t\t}\n\n\t\treturn view.getComputedStyle(elem);\n\t};\n\n\tvar swap = function (elem, options, callback) {\n\t\tvar ret, name,\n\t\t\told = {};\n\n\t\t// Remember the old values, and insert the new ones\n\t\tfor (name in options) {\n\t\t\told[name] = elem.style[name];\n\t\t\telem.style[name] = options[name];\n\t\t}\n\n\t\tret = callback.call(elem);\n\n\t\t// Revert the old values\n\t\tfor (name in options) {\n\t\t\telem.style[name] = old[name];\n\t\t}\n\n\t\treturn ret;\n\t};\n\n\n\tvar rboxStyle = new RegExp(cssExpand.join(\"|\"), \"i\");\n\n\n\n\t(function () {\n\n\t\t// Executing both pixelPosition & boxSizingReliable tests require only one layout\n\t\t// so they're executed at the same time to save the second computation.\n\t\tfunction computeStyleTests() {\n\n\t\t\t// This is a singleton, we need to execute it only once\n\t\t\tif (!div) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tcontainer.style.cssText = \"position:absolute;left:-11111px;width:60px;\" +\n\t\t\t\t\"margin-top:1px;padding:0;border:0\";\n\t\t\tdiv.style.cssText =\n\t\t\t\t\"position:relative;display:block;box-sizing:border-box;overflow:scroll;\" +\n\t\t\t\t\"margin:auto;border:1px;padding:1px;\" +\n\t\t\t\t\"width:60%;top:1%\";\n\t\t\tdocumentElement.appendChild(container).appendChild(div);\n\n\t\t\tvar divStyle = window.getComputedStyle(div);\n\t\t\tpixelPositionVal = divStyle.top !== \"1%\";\n\n\t\t\t// Support: Android 4.0 - 4.3 only, Firefox <=3 - 44\n\t\t\treliableMarginLeftVal = roundPixelMeasures(divStyle.marginLeft) === 12;\n\n\t\t\t// Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3\n\t\t\t// Some styles come back with percentage values, even though they shouldn't\n\t\t\tdiv.style.right = \"60%\";\n\t\t\tpixelBoxStylesVal = roundPixelMeasures(divStyle.right) === 36;\n\n\t\t\t// Support: IE 9 - 11 only\n\t\t\t// Detect misreporting of content dimensions for box-sizing:border-box elements\n\t\t\tboxSizingReliableVal = roundPixelMeasures(divStyle.width) === 36;\n\n\t\t\t// Support: IE 9 only\n\t\t\t// Detect overflow:scroll screwiness (gh-3699)\n\t\t\t// Support: Chrome <=64\n\t\t\t// Don't get tricked when zoom affects offsetWidth (gh-4029)\n\t\t\tdiv.style.position = \"absolute\";\n\t\t\tscrollboxSizeVal = roundPixelMeasures(div.offsetWidth / 3) === 12;\n\n\t\t\tdocumentElement.removeChild(container);\n\n\t\t\t// Nullify the div so it wouldn't be stored in the memory and\n\t\t\t// it will also be a sign that checks already performed\n\t\t\tdiv = null;\n\t\t}\n\n\t\tfunction roundPixelMeasures(measure) {\n\t\t\treturn Math.round(parseFloat(measure));\n\t\t}\n\n\t\tvar pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal,\n\t\t\treliableTrDimensionsVal, reliableMarginLeftVal,\n\t\t\tcontainer = document.createElement(\"div\"),\n\t\t\tdiv = document.createElement(\"div\");\n\n\t\t// Finish early in limited (non-browser) environments\n\t\tif (!div.style) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Support: IE <=9 - 11 only\n\t\t// Style of cloned element affects source element cloned (trac-8908)\n\t\tdiv.style.backgroundClip = \"content-box\";\n\t\tdiv.cloneNode(true).style.backgroundClip = \"\";\n\t\tsupport.clearCloneStyle = div.style.backgroundClip === \"content-box\";\n\n\t\tjQuery.extend(support, {\n\t\t\tboxSizingReliable: function () {\n\t\t\t\tcomputeStyleTests();\n\t\t\t\treturn boxSizingReliableVal;\n\t\t\t},\n\t\t\tpixelBoxStyles: function () {\n\t\t\t\tcomputeStyleTests();\n\t\t\t\treturn pixelBoxStylesVal;\n\t\t\t},\n\t\t\tpixelPosition: function () {\n\t\t\t\tcomputeStyleTests();\n\t\t\t\treturn pixelPositionVal;\n\t\t\t},\n\t\t\treliableMarginLeft: function () {\n\t\t\t\tcomputeStyleTests();\n\t\t\t\treturn reliableMarginLeftVal;\n\t\t\t},\n\t\t\tscrollboxSize: function () {\n\t\t\t\tcomputeStyleTests();\n\t\t\t\treturn scrollboxSizeVal;\n\t\t\t},\n\n\t\t\t// Support: IE 9 - 11+, Edge 15 - 18+\n\t\t\t// IE/Edge misreport `getComputedStyle` of table rows with width/height\n\t\t\t// set in CSS while `offset*` properties report correct values.\n\t\t\t// Behavior in IE 9 is more subtle than in newer versions & it passes\n\t\t\t// some versions of this test; make sure not to make it pass there!\n\t\t\t//\n\t\t\t// Support: Firefox 70+\n\t\t\t// Only Firefox includes border widths\n\t\t\t// in computed dimensions. (gh-4529)\n\t\t\treliableTrDimensions: function () {\n\t\t\t\tvar table, tr, trChild, trStyle;\n\t\t\t\tif (reliableTrDimensionsVal == null) {\n\t\t\t\t\ttable = document.createElement(\"table\");\n\t\t\t\t\ttr = document.createElement(\"tr\");\n\t\t\t\t\ttrChild = document.createElement(\"div\");\n\n\t\t\t\t\ttable.style.cssText = \"position:absolute;left:-11111px;border-collapse:separate\";\n\t\t\t\t\ttr.style.cssText = \"border:1px solid\";\n\n\t\t\t\t\t// Support: Chrome 86+\n\t\t\t\t\t// Height set through cssText does not get applied.\n\t\t\t\t\t// Computed height then comes back as 0.\n\t\t\t\t\ttr.style.height = \"1px\";\n\t\t\t\t\ttrChild.style.height = \"9px\";\n\n\t\t\t\t\t// Support: Android 8 Chrome 86+\n\t\t\t\t\t// In our bodyBackground.html iframe,\n\t\t\t\t\t// display for all div elements is set to \"inline\",\n\t\t\t\t\t// which causes a problem only in Android 8 Chrome 86.\n\t\t\t\t\t// Ensuring the div is display: block\n\t\t\t\t\t// gets around this issue.\n\t\t\t\t\ttrChild.style.display = \"block\";\n\n\t\t\t\t\tdocumentElement\n\t\t\t\t\t\t.appendChild(table)\n\t\t\t\t\t\t.appendChild(tr)\n\t\t\t\t\t\t.appendChild(trChild);\n\n\t\t\t\t\ttrStyle = window.getComputedStyle(tr);\n\t\t\t\t\treliableTrDimensionsVal = (parseInt(trStyle.height, 10) +\n\t\t\t\t\t\tparseInt(trStyle.borderTopWidth, 10) +\n\t\t\t\t\t\tparseInt(trStyle.borderBottomWidth, 10)) === tr.offsetHeight;\n\n\t\t\t\t\tdocumentElement.removeChild(table);\n\t\t\t\t}\n\t\t\t\treturn reliableTrDimensionsVal;\n\t\t\t}\n\t\t});\n\t})();\n\n\n\tfunction curCSS(elem, name, computed) {\n\t\tvar width, minWidth, maxWidth, ret,\n\t\t\tisCustomProp = rcustomProp.test(name),\n\n\t\t\t// Support: Firefox 51+\n\t\t\t// Retrieving style before computed somehow\n\t\t\t// fixes an issue with getting wrong values\n\t\t\t// on detached elements\n\t\t\tstyle = elem.style;\n\n\t\tcomputed = computed || getStyles(elem);\n\n\t\t// getPropertyValue is needed for:\n\t\t//   .css('filter') (IE 9 only, trac-12537)\n\t\t//   .css('--customProperty) (gh-3144)\n\t\tif (computed) {\n\n\t\t\t// Support: IE <=9 - 11+\n\t\t\t// IE only supports `\"float\"` in `getPropertyValue`; in computed styles\n\t\t\t// it's only available as `\"cssFloat\"`. We no longer modify properties\n\t\t\t// sent to `.css()` apart from camelCasing, so we need to check both.\n\t\t\t// Normally, this would create difference in behavior: if\n\t\t\t// `getPropertyValue` returns an empty string, the value returned\n\t\t\t// by `.css()` would be `undefined`. This is usually the case for\n\t\t\t// disconnected elements. However, in IE even disconnected elements\n\t\t\t// with no styles return `\"none\"` for `getPropertyValue( \"float\" )`\n\t\t\tret = computed.getPropertyValue(name) || computed[name];\n\n\t\t\tif (isCustomProp && ret) {\n\n\t\t\t\t// Support: Firefox 105+, Chrome <=105+\n\t\t\t\t// Spec requires trimming whitespace for custom properties (gh-4926).\n\t\t\t\t// Firefox only trims leading whitespace. Chrome just collapses\n\t\t\t\t// both leading & trailing whitespace to a single space.\n\t\t\t\t//\n\t\t\t\t// Fall back to `undefined` if empty string returned.\n\t\t\t\t// This collapses a missing definition with property defined\n\t\t\t\t// and set to an empty string but there's no standard API\n\t\t\t\t// allowing us to differentiate them without a performance penalty\n\t\t\t\t// and returning `undefined` aligns with older jQuery.\n\t\t\t\t//\n\t\t\t\t// rtrimCSS treats U+000D CARRIAGE RETURN and U+000C FORM FEED\n\t\t\t\t// as whitespace while CSS does not, but this is not a problem\n\t\t\t\t// because CSS preprocessing replaces them with U+000A LINE FEED\n\t\t\t\t// (which *is* CSS whitespace)\n\t\t\t\t// https://www.w3.org/TR/css-syntax-3/#input-preprocessing\n\t\t\t\tret = ret.replace(rtrimCSS, \"$1\") || undefined;\n\t\t\t}\n\n\t\t\tif (ret === \"\" && !isAttached(elem)) {\n\t\t\t\tret = jQuery.style(elem, name);\n\t\t\t}\n\n\t\t\t// A tribute to the \"awesome hack by Dean Edwards\"\n\t\t\t// Android Browser returns percentage for some values,\n\t\t\t// but width seems to be reliably pixels.\n\t\t\t// This is against the CSSOM draft spec:\n\t\t\t// https://drafts.csswg.org/cssom/#resolved-values\n\t\t\tif (!support.pixelBoxStyles() && rnumnonpx.test(ret) && rboxStyle.test(name)) {\n\n\t\t\t\t// Remember the original values\n\t\t\t\twidth = style.width;\n\t\t\t\tminWidth = style.minWidth;\n\t\t\t\tmaxWidth = style.maxWidth;\n\n\t\t\t\t// Put in the new values to get a computed value out\n\t\t\t\tstyle.minWidth = style.maxWidth = style.width = ret;\n\t\t\t\tret = computed.width;\n\n\t\t\t\t// Revert the changed values\n\t\t\t\tstyle.width = width;\n\t\t\t\tstyle.minWidth = minWidth;\n\t\t\t\tstyle.maxWidth = maxWidth;\n\t\t\t}\n\t\t}\n\n\t\treturn ret !== undefined ?\n\n\t\t\t// Support: IE <=9 - 11 only\n\t\t\t// IE returns zIndex value as an integer.\n\t\t\tret + \"\" :\n\t\t\tret;\n\t}\n\n\n\tfunction addGetHookIf(conditionFn, hookFn) {\n\n\t\t// Define the hook, we'll check on the first run if it's really needed.\n\t\treturn {\n\t\t\tget: function () {\n\t\t\t\tif (conditionFn()) {\n\n\t\t\t\t\t// Hook not needed (or it's not possible to use it due\n\t\t\t\t\t// to missing dependency), remove it.\n\t\t\t\t\tdelete this.get;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Hook needed; redefine it so that the support test is not executed again.\n\t\t\t\treturn (this.get = hookFn).apply(this, arguments);\n\t\t\t}\n\t\t};\n\t}\n\n\n\tvar cssPrefixes = [\"Webkit\", \"Moz\", \"ms\"],\n\t\temptyStyle = document.createElement(\"div\").style,\n\t\tvendorProps = {};\n\n\t// Return a vendor-prefixed property or undefined\n\tfunction vendorPropName(name) {\n\n\t\t// Check for vendor prefixed names\n\t\tvar capName = name[0].toUpperCase() + name.slice(1),\n\t\t\ti = cssPrefixes.length;\n\n\t\twhile (i--) {\n\t\t\tname = cssPrefixes[i] + capName;\n\t\t\tif (name in emptyStyle) {\n\t\t\t\treturn name;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return a potentially-mapped jQuery.cssProps or vendor prefixed property\n\tfunction finalPropName(name) {\n\t\tvar final = jQuery.cssProps[name] || vendorProps[name];\n\n\t\tif (final) {\n\t\t\treturn final;\n\t\t}\n\t\tif (name in emptyStyle) {\n\t\t\treturn name;\n\t\t}\n\t\treturn vendorProps[name] = vendorPropName(name) || name;\n\t}\n\n\n\tvar\n\n\t\t// Swappable if display is none or starts with table\n\t\t// except \"table\", \"table-cell\", or \"table-caption\"\n\t\t// See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display\n\t\trdisplayswap = /^(none|table(?!-c[ea]).+)/,\n\t\tcssShow = { position: \"absolute\", visibility: \"hidden\", display: \"block\" },\n\t\tcssNormalTransform = {\n\t\t\tletterSpacing: \"0\",\n\t\t\tfontWeight: \"400\"\n\t\t};\n\n\tfunction setPositiveNumber(_elem, value, subtract) {\n\n\t\t// Any relative (+/-) values have already been\n\t\t// normalized at this point\n\t\tvar matches = rcssNum.exec(value);\n\t\treturn matches ?\n\n\t\t\t// Guard against undefined \"subtract\", e.g., when used as in cssHooks\n\t\t\tMath.max(0, matches[2] - (subtract || 0)) + (matches[3] || \"px\") :\n\t\t\tvalue;\n\t}\n\n\tfunction boxModelAdjustment(elem, dimension, box, isBorderBox, styles, computedVal) {\n\t\tvar i = dimension === \"width\" ? 1 : 0,\n\t\t\textra = 0,\n\t\t\tdelta = 0,\n\t\t\tmarginDelta = 0;\n\n\t\t// Adjustment may not be necessary\n\t\tif (box === (isBorderBox ? \"border\" : \"content\")) {\n\t\t\treturn 0;\n\t\t}\n\n\t\tfor (; i < 4; i += 2) {\n\n\t\t\t// Both box models exclude margin\n\t\t\t// Count margin delta separately to only add it after scroll gutter adjustment.\n\t\t\t// This is needed to make negative margins work with `outerHeight( true )` (gh-3982).\n\t\t\tif (box === \"margin\") {\n\t\t\t\tmarginDelta += jQuery.css(elem, box + cssExpand[i], true, styles);\n\t\t\t}\n\n\t\t\t// If we get here with a content-box, we're seeking \"padding\" or \"border\" or \"margin\"\n\t\t\tif (!isBorderBox) {\n\n\t\t\t\t// Add padding\n\t\t\t\tdelta += jQuery.css(elem, \"padding\" + cssExpand[i], true, styles);\n\n\t\t\t\t// For \"border\" or \"margin\", add border\n\t\t\t\tif (box !== \"padding\") {\n\t\t\t\t\tdelta += jQuery.css(elem, \"border\" + cssExpand[i] + \"Width\", true, styles);\n\n\t\t\t\t\t// But still keep track of it otherwise\n\t\t\t\t} else {\n\t\t\t\t\textra += jQuery.css(elem, \"border\" + cssExpand[i] + \"Width\", true, styles);\n\t\t\t\t}\n\n\t\t\t\t// If we get here with a border-box (content + padding + border), we're seeking \"content\" or\n\t\t\t\t// \"padding\" or \"margin\"\n\t\t\t} else {\n\n\t\t\t\t// For \"content\", subtract padding\n\t\t\t\tif (box === \"content\") {\n\t\t\t\t\tdelta -= jQuery.css(elem, \"padding\" + cssExpand[i], true, styles);\n\t\t\t\t}\n\n\t\t\t\t// For \"content\" or \"padding\", subtract border\n\t\t\t\tif (box !== \"margin\") {\n\t\t\t\t\tdelta -= jQuery.css(elem, \"border\" + cssExpand[i] + \"Width\", true, styles);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Account for positive content-box scroll gutter when requested by providing computedVal\n\t\tif (!isBorderBox && computedVal >= 0) {\n\n\t\t\t// offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border\n\t\t\t// Assuming integer scroll gutter, subtract the rest and round down\n\t\t\tdelta += Math.max(0, Math.ceil(\n\t\t\t\telem[\"offset\" + dimension[0].toUpperCase() + dimension.slice(1)] -\n\t\t\t\tcomputedVal -\n\t\t\t\tdelta -\n\t\t\t\textra -\n\t\t\t\t0.5\n\n\t\t\t\t// If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter\n\t\t\t\t// Use an explicit zero to avoid NaN (gh-3964)\n\t\t\t)) || 0;\n\t\t}\n\n\t\treturn delta + marginDelta;\n\t}\n\n\tfunction getWidthOrHeight(elem, dimension, extra) {\n\n\t\t// Start with computed style\n\t\tvar styles = getStyles(elem),\n\n\t\t\t// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322).\n\t\t\t// Fake content-box until we know it's needed to know the true value.\n\t\t\tboxSizingNeeded = !support.boxSizingReliable() || extra,\n\t\t\tisBorderBox = boxSizingNeeded &&\n\t\t\t\tjQuery.css(elem, \"boxSizing\", false, styles) === \"border-box\",\n\t\t\tvalueIsBorderBox = isBorderBox,\n\n\t\t\tval = curCSS(elem, dimension, styles),\n\t\t\toffsetProp = \"offset\" + dimension[0].toUpperCase() + dimension.slice(1);\n\n\t\t// Support: Firefox <=54\n\t\t// Return a confounding non-pixel value or feign ignorance, as appropriate.\n\t\tif (rnumnonpx.test(val)) {\n\t\t\tif (!extra) {\n\t\t\t\treturn val;\n\t\t\t}\n\t\t\tval = \"auto\";\n\t\t}\n\n\n\t\t// Support: IE 9 - 11 only\n\t\t// Use offsetWidth/offsetHeight for when box sizing is unreliable.\n\t\t// In those cases, the computed value can be trusted to be border-box.\n\t\tif ((!support.boxSizingReliable() && isBorderBox ||\n\n\t\t\t// Support: IE 10 - 11+, Edge 15 - 18+\n\t\t\t// IE/Edge misreport `getComputedStyle` of table rows with width/height\n\t\t\t// set in CSS while `offset*` properties report correct values.\n\t\t\t// Interestingly, in some cases IE 9 doesn't suffer from this issue.\n\t\t\t!support.reliableTrDimensions() && nodeName(elem, \"tr\") ||\n\n\t\t\t// Fall back to offsetWidth/offsetHeight when value is \"auto\"\n\t\t\t// This happens for inline elements with no explicit setting (gh-3571)\n\t\t\tval === \"auto\" ||\n\n\t\t\t// Support: Android <=4.1 - 4.3 only\n\t\t\t// Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602)\n\t\t\t!parseFloat(val) && jQuery.css(elem, \"display\", false, styles) === \"inline\") &&\n\n\t\t\t// Make sure the element is visible & connected\n\t\t\telem.getClientRects().length) {\n\n\t\t\tisBorderBox = jQuery.css(elem, \"boxSizing\", false, styles) === \"border-box\";\n\n\t\t\t// Where available, offsetWidth/offsetHeight approximate border box dimensions.\n\t\t\t// Where not available (e.g., SVG), assume unreliable box-sizing and interpret the\n\t\t\t// retrieved value as a content box dimension.\n\t\t\tvalueIsBorderBox = offsetProp in elem;\n\t\t\tif (valueIsBorderBox) {\n\t\t\t\tval = elem[offsetProp];\n\t\t\t}\n\t\t}\n\n\t\t// Normalize \"\" and auto\n\t\tval = parseFloat(val) || 0;\n\n\t\t// Adjust for the element's box model\n\t\treturn (val +\n\t\t\tboxModelAdjustment(\n\t\t\t\telem,\n\t\t\t\tdimension,\n\t\t\t\textra || (isBorderBox ? \"border\" : \"content\"),\n\t\t\t\tvalueIsBorderBox,\n\t\t\t\tstyles,\n\n\t\t\t\t// Provide the current computed size to request scroll gutter calculation (gh-3589)\n\t\t\t\tval\n\t\t\t)\n\t\t) + \"px\";\n\t}\n\n\tjQuery.extend({\n\n\t\t// Add in style property hooks for overriding the default\n\t\t// behavior of getting and setting a style property\n\t\tcssHooks: {\n\t\t\topacity: {\n\t\t\t\tget: function (elem, computed) {\n\t\t\t\t\tif (computed) {\n\n\t\t\t\t\t\t// We should always get a number back from opacity\n\t\t\t\t\t\tvar ret = curCSS(elem, \"opacity\");\n\t\t\t\t\t\treturn ret === \"\" ? \"1\" : ret;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t// Don't automatically add \"px\" to these possibly-unitless properties\n\t\tcssNumber: {\n\t\t\tanimationIterationCount: true,\n\t\t\taspectRatio: true,\n\t\t\tborderImageSlice: true,\n\t\t\tcolumnCount: true,\n\t\t\tflexGrow: true,\n\t\t\tflexShrink: true,\n\t\t\tfontWeight: true,\n\t\t\tgridArea: true,\n\t\t\tgridColumn: true,\n\t\t\tgridColumnEnd: true,\n\t\t\tgridColumnStart: true,\n\t\t\tgridRow: true,\n\t\t\tgridRowEnd: true,\n\t\t\tgridRowStart: true,\n\t\t\tlineHeight: true,\n\t\t\topacity: true,\n\t\t\torder: true,\n\t\t\torphans: true,\n\t\t\tscale: true,\n\t\t\twidows: true,\n\t\t\tzIndex: true,\n\t\t\tzoom: true,\n\n\t\t\t// SVG-related\n\t\t\tfillOpacity: true,\n\t\t\tfloodOpacity: true,\n\t\t\tstopOpacity: true,\n\t\t\tstrokeMiterlimit: true,\n\t\t\tstrokeOpacity: true\n\t\t},\n\n\t\t// Add in properties whose names you wish to fix before\n\t\t// setting or getting the value\n\t\tcssProps: {},\n\n\t\t// Get and set the style property on a DOM Node\n\t\tstyle: function (elem, name, value, extra) {\n\n\t\t\t// Don't set styles on text and comment nodes\n\t\t\tif (!elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Make sure that we're working with the right name\n\t\t\tvar ret, type, hooks,\n\t\t\t\torigName = camelCase(name),\n\t\t\t\tisCustomProp = rcustomProp.test(name),\n\t\t\t\tstyle = elem.style;\n\n\t\t\t// Make sure that we're working with the right name. We don't\n\t\t\t// want to query the value if it is a CSS custom property\n\t\t\t// since they are user-defined.\n\t\t\tif (!isCustomProp) {\n\t\t\t\tname = finalPropName(origName);\n\t\t\t}\n\n\t\t\t// Gets hook for the prefixed version, then unprefixed version\n\t\t\thooks = jQuery.cssHooks[name] || jQuery.cssHooks[origName];\n\n\t\t\t// Check if we're setting a value\n\t\t\tif (value !== undefined) {\n\t\t\t\ttype = typeof value;\n\n\t\t\t\t// Convert \"+=\" or \"-=\" to relative numbers (trac-7345)\n\t\t\t\tif (type === \"string\" && (ret = rcssNum.exec(value)) && ret[1]) {\n\t\t\t\t\tvalue = adjustCSS(elem, name, ret);\n\n\t\t\t\t\t// Fixes bug trac-9237\n\t\t\t\t\ttype = \"number\";\n\t\t\t\t}\n\n\t\t\t\t// Make sure that null and NaN values aren't set (trac-7116)\n\t\t\t\tif (value == null || value !== value) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// If a number was passed in, add the unit (except for certain CSS properties)\n\t\t\t\t// The isCustomProp check can be removed in jQuery 4.0 when we only auto-append\n\t\t\t\t// \"px\" to a few hardcoded values.\n\t\t\t\tif (type === \"number\" && !isCustomProp) {\n\t\t\t\t\tvalue += ret && ret[3] || (jQuery.cssNumber[origName] ? \"\" : \"px\");\n\t\t\t\t}\n\n\t\t\t\t// background-* props affect original clone's values\n\t\t\t\tif (!support.clearCloneStyle && value === \"\" && name.indexOf(\"background\") === 0) {\n\t\t\t\t\tstyle[name] = \"inherit\";\n\t\t\t\t}\n\n\t\t\t\t// If a hook was provided, use that value, otherwise just set the specified value\n\t\t\t\tif (!hooks || !(\"set\" in hooks) ||\n\t\t\t\t\t(value = hooks.set(elem, value, extra)) !== undefined) {\n\n\t\t\t\t\tif (isCustomProp) {\n\t\t\t\t\t\tstyle.setProperty(name, value);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tstyle[name] = value;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\t// If a hook was provided get the non-computed value from there\n\t\t\t\tif (hooks && \"get\" in hooks &&\n\t\t\t\t\t(ret = hooks.get(elem, false, extra)) !== undefined) {\n\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\n\t\t\t\t// Otherwise just get the value from the style object\n\t\t\t\treturn style[name];\n\t\t\t}\n\t\t},\n\n\t\tcss: function (elem, name, extra, styles) {\n\t\t\tvar val, num, hooks,\n\t\t\t\torigName = camelCase(name),\n\t\t\t\tisCustomProp = rcustomProp.test(name);\n\n\t\t\t// Make sure that we're working with the right name. We don't\n\t\t\t// want to modify the value if it is a CSS custom property\n\t\t\t// since they are user-defined.\n\t\t\tif (!isCustomProp) {\n\t\t\t\tname = finalPropName(origName);\n\t\t\t}\n\n\t\t\t// Try prefixed name followed by the unprefixed name\n\t\t\thooks = jQuery.cssHooks[name] || jQuery.cssHooks[origName];\n\n\t\t\t// If a hook was provided get the computed value from there\n\t\t\tif (hooks && \"get\" in hooks) {\n\t\t\t\tval = hooks.get(elem, true, extra);\n\t\t\t}\n\n\t\t\t// Otherwise, if a way to get the computed value exists, use that\n\t\t\tif (val === undefined) {\n\t\t\t\tval = curCSS(elem, name, styles);\n\t\t\t}\n\n\t\t\t// Convert \"normal\" to computed value\n\t\t\tif (val === \"normal\" && name in cssNormalTransform) {\n\t\t\t\tval = cssNormalTransform[name];\n\t\t\t}\n\n\t\t\t// Make numeric if forced or a qualifier was provided and val looks numeric\n\t\t\tif (extra === \"\" || extra) {\n\t\t\t\tnum = parseFloat(val);\n\t\t\t\treturn extra === true || isFinite(num) ? num || 0 : val;\n\t\t\t}\n\n\t\t\treturn val;\n\t\t}\n\t});\n\n\tjQuery.each([\"height\", \"width\"], function (_i, dimension) {\n\t\tjQuery.cssHooks[dimension] = {\n\t\t\tget: function (elem, computed, extra) {\n\t\t\t\tif (computed) {\n\n\t\t\t\t\t// Certain elements can have dimension info if we invisibly show them\n\t\t\t\t\t// but it must have a current display style that would benefit\n\t\t\t\t\treturn rdisplayswap.test(jQuery.css(elem, \"display\")) &&\n\n\t\t\t\t\t\t// Support: Safari 8+\n\t\t\t\t\t\t// Table columns in Safari have non-zero offsetWidth & zero\n\t\t\t\t\t\t// getBoundingClientRect().width unless display is changed.\n\t\t\t\t\t\t// Support: IE <=11 only\n\t\t\t\t\t\t// Running getBoundingClientRect on a disconnected node\n\t\t\t\t\t\t// in IE throws an error.\n\t\t\t\t\t\t(!elem.getClientRects().length || !elem.getBoundingClientRect().width) ?\n\t\t\t\t\t\tswap(elem, cssShow, function () {\n\t\t\t\t\t\t\treturn getWidthOrHeight(elem, dimension, extra);\n\t\t\t\t\t\t}) :\n\t\t\t\t\t\tgetWidthOrHeight(elem, dimension, extra);\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tset: function (elem, value, extra) {\n\t\t\t\tvar matches,\n\t\t\t\t\tstyles = getStyles(elem),\n\n\t\t\t\t\t// Only read styles.position if the test has a chance to fail\n\t\t\t\t\t// to avoid forcing a reflow.\n\t\t\t\t\tscrollboxSizeBuggy = !support.scrollboxSize() &&\n\t\t\t\t\t\tstyles.position === \"absolute\",\n\n\t\t\t\t\t// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991)\n\t\t\t\t\tboxSizingNeeded = scrollboxSizeBuggy || extra,\n\t\t\t\t\tisBorderBox = boxSizingNeeded &&\n\t\t\t\t\t\tjQuery.css(elem, \"boxSizing\", false, styles) === \"border-box\",\n\t\t\t\t\tsubtract = extra ?\n\t\t\t\t\t\tboxModelAdjustment(\n\t\t\t\t\t\t\telem,\n\t\t\t\t\t\t\tdimension,\n\t\t\t\t\t\t\textra,\n\t\t\t\t\t\t\tisBorderBox,\n\t\t\t\t\t\t\tstyles\n\t\t\t\t\t\t) :\n\t\t\t\t\t\t0;\n\n\t\t\t\t// Account for unreliable border-box dimensions by comparing offset* to computed and\n\t\t\t\t// faking a content-box to get border and padding (gh-3699)\n\t\t\t\tif (isBorderBox && scrollboxSizeBuggy) {\n\t\t\t\t\tsubtract -= Math.ceil(\n\t\t\t\t\t\telem[\"offset\" + dimension[0].toUpperCase() + dimension.slice(1)] -\n\t\t\t\t\t\tparseFloat(styles[dimension]) -\n\t\t\t\t\t\tboxModelAdjustment(elem, dimension, \"border\", false, styles) -\n\t\t\t\t\t\t0.5\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\t// Convert to pixels if value adjustment is needed\n\t\t\t\tif (subtract && (matches = rcssNum.exec(value)) &&\n\t\t\t\t\t(matches[3] || \"px\") !== \"px\") {\n\n\t\t\t\t\telem.style[dimension] = value;\n\t\t\t\t\tvalue = jQuery.css(elem, dimension);\n\t\t\t\t}\n\n\t\t\t\treturn setPositiveNumber(elem, value, subtract);\n\t\t\t}\n\t\t};\n\t});\n\n\tjQuery.cssHooks.marginLeft = addGetHookIf(support.reliableMarginLeft,\n\t\tfunction (elem, computed) {\n\t\t\tif (computed) {\n\t\t\t\treturn (parseFloat(curCSS(elem, \"marginLeft\")) ||\n\t\t\t\t\telem.getBoundingClientRect().left -\n\t\t\t\t\tswap(elem, { marginLeft: 0 }, function () {\n\t\t\t\t\t\treturn elem.getBoundingClientRect().left;\n\t\t\t\t\t})\n\t\t\t\t) + \"px\";\n\t\t\t}\n\t\t}\n\t);\n\n\t// These hooks are used by animate to expand properties\n\tjQuery.each({\n\t\tmargin: \"\",\n\t\tpadding: \"\",\n\t\tborder: \"Width\"\n\t}, function (prefix, suffix) {\n\t\tjQuery.cssHooks[prefix + suffix] = {\n\t\t\texpand: function (value) {\n\t\t\t\tvar i = 0,\n\t\t\t\t\texpanded = {},\n\n\t\t\t\t\t// Assumes a single number if not a string\n\t\t\t\t\tparts = typeof value === \"string\" ? value.split(\" \") : [value];\n\n\t\t\t\tfor (; i < 4; i++) {\n\t\t\t\t\texpanded[prefix + cssExpand[i] + suffix] =\n\t\t\t\t\t\tparts[i] || parts[i - 2] || parts[0];\n\t\t\t\t}\n\n\t\t\t\treturn expanded;\n\t\t\t}\n\t\t};\n\n\t\tif (prefix !== \"margin\") {\n\t\t\tjQuery.cssHooks[prefix + suffix].set = setPositiveNumber;\n\t\t}\n\t});\n\n\tjQuery.fn.extend({\n\t\tcss: function (name, value) {\n\t\t\treturn access(this, function (elem, name, value) {\n\t\t\t\tvar styles, len,\n\t\t\t\t\tmap = {},\n\t\t\t\t\ti = 0;\n\n\t\t\t\tif (Array.isArray(name)) {\n\t\t\t\t\tstyles = getStyles(elem);\n\t\t\t\t\tlen = name.length;\n\n\t\t\t\t\tfor (; i < len; i++) {\n\t\t\t\t\t\tmap[name[i]] = jQuery.css(elem, name[i], false, styles);\n\t\t\t\t\t}\n\n\t\t\t\t\treturn map;\n\t\t\t\t}\n\n\t\t\t\treturn value !== undefined ?\n\t\t\t\t\tjQuery.style(elem, name, value) :\n\t\t\t\t\tjQuery.css(elem, name);\n\t\t\t}, name, value, arguments.length > 1);\n\t\t}\n\t});\n\n\n\tfunction Tween(elem, options, prop, end, easing) {\n\t\treturn new Tween.prototype.init(elem, options, prop, end, easing);\n\t}\n\tjQuery.Tween = Tween;\n\n\tTween.prototype = {\n\t\tconstructor: Tween,\n\t\tinit: function (elem, options, prop, end, easing, unit) {\n\t\t\tthis.elem = elem;\n\t\t\tthis.prop = prop;\n\t\t\tthis.easing = easing || jQuery.easing._default;\n\t\t\tthis.options = options;\n\t\t\tthis.start = this.now = this.cur();\n\t\t\tthis.end = end;\n\t\t\tthis.unit = unit || (jQuery.cssNumber[prop] ? \"\" : \"px\");\n\t\t},\n\t\tcur: function () {\n\t\t\tvar hooks = Tween.propHooks[this.prop];\n\n\t\t\treturn hooks && hooks.get ?\n\t\t\t\thooks.get(this) :\n\t\t\t\tTween.propHooks._default.get(this);\n\t\t},\n\t\trun: function (percent) {\n\t\t\tvar eased,\n\t\t\t\thooks = Tween.propHooks[this.prop];\n\n\t\t\tif (this.options.duration) {\n\t\t\t\tthis.pos = eased = jQuery.easing[this.easing](\n\t\t\t\t\tpercent, this.options.duration * percent, 0, 1, this.options.duration\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tthis.pos = eased = percent;\n\t\t\t}\n\t\t\tthis.now = (this.end - this.start) * eased + this.start;\n\n\t\t\tif (this.options.step) {\n\t\t\t\tthis.options.step.call(this.elem, this.now, this);\n\t\t\t}\n\n\t\t\tif (hooks && hooks.set) {\n\t\t\t\thooks.set(this);\n\t\t\t} else {\n\t\t\t\tTween.propHooks._default.set(this);\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t};\n\n\tTween.prototype.init.prototype = Tween.prototype;\n\n\tTween.propHooks = {\n\t\t_default: {\n\t\t\tget: function (tween) {\n\t\t\t\tvar result;\n\n\t\t\t\t// Use a property on the element directly when it is not a DOM element,\n\t\t\t\t// or when there is no matching style property that exists.\n\t\t\t\tif (tween.elem.nodeType !== 1 ||\n\t\t\t\t\ttween.elem[tween.prop] != null && tween.elem.style[tween.prop] == null) {\n\t\t\t\t\treturn tween.elem[tween.prop];\n\t\t\t\t}\n\n\t\t\t\t// Passing an empty string as a 3rd parameter to .css will automatically\n\t\t\t\t// attempt a parseFloat and fallback to a string if the parse fails.\n\t\t\t\t// Simple values such as \"10px\" are parsed to Float;\n\t\t\t\t// complex values such as \"rotate(1rad)\" are returned as-is.\n\t\t\t\tresult = jQuery.css(tween.elem, tween.prop, \"\");\n\n\t\t\t\t// Empty strings, null, undefined and \"auto\" are converted to 0.\n\t\t\t\treturn !result || result === \"auto\" ? 0 : result;\n\t\t\t},\n\t\t\tset: function (tween) {\n\n\t\t\t\t// Use step hook for back compat.\n\t\t\t\t// Use cssHook if its there.\n\t\t\t\t// Use .style if available and use plain properties where available.\n\t\t\t\tif (jQuery.fx.step[tween.prop]) {\n\t\t\t\t\tjQuery.fx.step[tween.prop](tween);\n\t\t\t\t} else if (tween.elem.nodeType === 1 && (\n\t\t\t\t\tjQuery.cssHooks[tween.prop] ||\n\t\t\t\t\ttween.elem.style[finalPropName(tween.prop)] != null)) {\n\t\t\t\t\tjQuery.style(tween.elem, tween.prop, tween.now + tween.unit);\n\t\t\t\t} else {\n\t\t\t\t\ttween.elem[tween.prop] = tween.now;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t// Support: IE <=9 only\n\t// Panic based approach to setting things on disconnected nodes\n\tTween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {\n\t\tset: function (tween) {\n\t\t\tif (tween.elem.nodeType && tween.elem.parentNode) {\n\t\t\t\ttween.elem[tween.prop] = tween.now;\n\t\t\t}\n\t\t}\n\t};\n\n\tjQuery.easing = {\n\t\tlinear: function (p) {\n\t\t\treturn p;\n\t\t},\n\t\tswing: function (p) {\n\t\t\treturn 0.5 - Math.cos(p * Math.PI) / 2;\n\t\t},\n\t\t_default: \"swing\"\n\t};\n\n\tjQuery.fx = Tween.prototype.init;\n\n\t// Back compat <1.8 extension point\n\tjQuery.fx.step = {};\n\n\n\n\n\tvar\n\t\tfxNow, inProgress,\n\t\trfxtypes = /^(?:toggle|show|hide)$/,\n\t\trrun = /queueHooks$/;\n\n\tfunction schedule() {\n\t\tif (inProgress) {\n\t\t\tif (document.hidden === false && window.requestAnimationFrame) {\n\t\t\t\twindow.requestAnimationFrame(schedule);\n\t\t\t} else {\n\t\t\t\twindow.setTimeout(schedule, jQuery.fx.interval);\n\t\t\t}\n\n\t\t\tjQuery.fx.tick();\n\t\t}\n\t}\n\n\t// Animations created synchronously will run synchronously\n\tfunction createFxNow() {\n\t\twindow.setTimeout(function () {\n\t\t\tfxNow = undefined;\n\t\t});\n\t\treturn (fxNow = Date.now());\n\t}\n\n\t// Generate parameters to create a standard animation\n\tfunction genFx(type, includeWidth) {\n\t\tvar which,\n\t\t\ti = 0,\n\t\t\tattrs = { height: type };\n\n\t\t// If we include width, step value is 1 to do all cssExpand values,\n\t\t// otherwise step value is 2 to skip over Left and Right\n\t\tincludeWidth = includeWidth ? 1 : 0;\n\t\tfor (; i < 4; i += 2 - includeWidth) {\n\t\t\twhich = cssExpand[i];\n\t\t\tattrs[\"margin\" + which] = attrs[\"padding\" + which] = type;\n\t\t}\n\n\t\tif (includeWidth) {\n\t\t\tattrs.opacity = attrs.width = type;\n\t\t}\n\n\t\treturn attrs;\n\t}\n\n\tfunction createTween(value, prop, animation) {\n\t\tvar tween,\n\t\t\tcollection = (Animation.tweeners[prop] || []).concat(Animation.tweeners[\"*\"]),\n\t\t\tindex = 0,\n\t\t\tlength = collection.length;\n\t\tfor (; index < length; index++) {\n\t\t\tif ((tween = collection[index].call(animation, prop, value))) {\n\n\t\t\t\t// We're done with this property\n\t\t\t\treturn tween;\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction defaultPrefilter(elem, props, opts) {\n\t\tvar prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display,\n\t\t\tisBox = \"width\" in props || \"height\" in props,\n\t\t\tanim = this,\n\t\t\torig = {},\n\t\t\tstyle = elem.style,\n\t\t\thidden = elem.nodeType && isHiddenWithinTree(elem),\n\t\t\tdataShow = dataPriv.get(elem, \"fxshow\");\n\n\t\t// Queue-skipping animations hijack the fx hooks\n\t\tif (!opts.queue) {\n\t\t\thooks = jQuery._queueHooks(elem, \"fx\");\n\t\t\tif (hooks.unqueued == null) {\n\t\t\t\thooks.unqueued = 0;\n\t\t\t\toldfire = hooks.empty.fire;\n\t\t\t\thooks.empty.fire = function () {\n\t\t\t\t\tif (!hooks.unqueued) {\n\t\t\t\t\t\toldfire();\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t\thooks.unqueued++;\n\n\t\t\tanim.always(function () {\n\n\t\t\t\t// Ensure the complete handler is called before this completes\n\t\t\t\tanim.always(function () {\n\t\t\t\t\thooks.unqueued--;\n\t\t\t\t\tif (!jQuery.queue(elem, \"fx\").length) {\n\t\t\t\t\t\thooks.empty.fire();\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\n\t\t// Detect show/hide animations\n\t\tfor (prop in props) {\n\t\t\tvalue = props[prop];\n\t\t\tif (rfxtypes.test(value)) {\n\t\t\t\tdelete props[prop];\n\t\t\t\ttoggle = toggle || value === \"toggle\";\n\t\t\t\tif (value === (hidden ? \"hide\" : \"show\")) {\n\n\t\t\t\t\t// Pretend to be hidden if this is a \"show\" and\n\t\t\t\t\t// there is still data from a stopped show/hide\n\t\t\t\t\tif (value === \"show\" && dataShow && dataShow[prop] !== undefined) {\n\t\t\t\t\t\thidden = true;\n\n\t\t\t\t\t\t// Ignore all other no-op show/hide data\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\torig[prop] = dataShow && dataShow[prop] || jQuery.style(elem, prop);\n\t\t\t}\n\t\t}\n\n\t\t// Bail out if this is a no-op like .hide().hide()\n\t\tpropTween = !jQuery.isEmptyObject(props);\n\t\tif (!propTween && jQuery.isEmptyObject(orig)) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Restrict \"overflow\" and \"display\" styles during box animations\n\t\tif (isBox && elem.nodeType === 1) {\n\n\t\t\t// Support: IE <=9 - 11, Edge 12 - 15\n\t\t\t// Record all 3 overflow attributes because IE does not infer the shorthand\n\t\t\t// from identically-valued overflowX and overflowY and Edge just mirrors\n\t\t\t// the overflowX value there.\n\t\t\topts.overflow = [style.overflow, style.overflowX, style.overflowY];\n\n\t\t\t// Identify a display type, preferring old show/hide data over the CSS cascade\n\t\t\trestoreDisplay = dataShow && dataShow.display;\n\t\t\tif (restoreDisplay == null) {\n\t\t\t\trestoreDisplay = dataPriv.get(elem, \"display\");\n\t\t\t}\n\t\t\tdisplay = jQuery.css(elem, \"display\");\n\t\t\tif (display === \"none\") {\n\t\t\t\tif (restoreDisplay) {\n\t\t\t\t\tdisplay = restoreDisplay;\n\t\t\t\t} else {\n\n\t\t\t\t\t// Get nonempty value(s) by temporarily forcing visibility\n\t\t\t\t\tshowHide([elem], true);\n\t\t\t\t\trestoreDisplay = elem.style.display || restoreDisplay;\n\t\t\t\t\tdisplay = jQuery.css(elem, \"display\");\n\t\t\t\t\tshowHide([elem]);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Animate inline elements as inline-block\n\t\t\tif (display === \"inline\" || display === \"inline-block\" && restoreDisplay != null) {\n\t\t\t\tif (jQuery.css(elem, \"float\") === \"none\") {\n\n\t\t\t\t\t// Restore the original display value at the end of pure show/hide animations\n\t\t\t\t\tif (!propTween) {\n\t\t\t\t\t\tanim.done(function () {\n\t\t\t\t\t\t\tstyle.display = restoreDisplay;\n\t\t\t\t\t\t});\n\t\t\t\t\t\tif (restoreDisplay == null) {\n\t\t\t\t\t\t\tdisplay = style.display;\n\t\t\t\t\t\t\trestoreDisplay = display === \"none\" ? \"\" : display;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tstyle.display = \"inline-block\";\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (opts.overflow) {\n\t\t\tstyle.overflow = \"hidden\";\n\t\t\tanim.always(function () {\n\t\t\t\tstyle.overflow = opts.overflow[0];\n\t\t\t\tstyle.overflowX = opts.overflow[1];\n\t\t\t\tstyle.overflowY = opts.overflow[2];\n\t\t\t});\n\t\t}\n\n\t\t// Implement show/hide animations\n\t\tpropTween = false;\n\t\tfor (prop in orig) {\n\n\t\t\t// General show/hide setup for this element animation\n\t\t\tif (!propTween) {\n\t\t\t\tif (dataShow) {\n\t\t\t\t\tif (\"hidden\" in dataShow) {\n\t\t\t\t\t\thidden = dataShow.hidden;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tdataShow = dataPriv.access(elem, \"fxshow\", { display: restoreDisplay });\n\t\t\t\t}\n\n\t\t\t\t// Store hidden/visible for toggle so `.stop().toggle()` \"reverses\"\n\t\t\t\tif (toggle) {\n\t\t\t\t\tdataShow.hidden = !hidden;\n\t\t\t\t}\n\n\t\t\t\t// Show elements before animating them\n\t\t\t\tif (hidden) {\n\t\t\t\t\tshowHide([elem], true);\n\t\t\t\t}\n\n\t\t\t\t/* eslint-disable no-loop-func */\n\n\t\t\t\tanim.done(function () {\n\n\t\t\t\t\t/* eslint-enable no-loop-func */\n\n\t\t\t\t\t// The final step of a \"hide\" animation is actually hiding the element\n\t\t\t\t\tif (!hidden) {\n\t\t\t\t\t\tshowHide([elem]);\n\t\t\t\t\t}\n\t\t\t\t\tdataPriv.remove(elem, \"fxshow\");\n\t\t\t\t\tfor (prop in orig) {\n\t\t\t\t\t\tjQuery.style(elem, prop, orig[prop]);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// Per-property setup\n\t\t\tpropTween = createTween(hidden ? dataShow[prop] : 0, prop, anim);\n\t\t\tif (!(prop in dataShow)) {\n\t\t\t\tdataShow[prop] = propTween.start;\n\t\t\t\tif (hidden) {\n\t\t\t\t\tpropTween.end = propTween.start;\n\t\t\t\t\tpropTween.start = 0;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction propFilter(props, specialEasing) {\n\t\tvar index, name, easing, value, hooks;\n\n\t\t// camelCase, specialEasing and expand cssHook pass\n\t\tfor (index in props) {\n\t\t\tname = camelCase(index);\n\t\t\teasing = specialEasing[name];\n\t\t\tvalue = props[index];\n\t\t\tif (Array.isArray(value)) {\n\t\t\t\teasing = value[1];\n\t\t\t\tvalue = props[index] = value[0];\n\t\t\t}\n\n\t\t\tif (index !== name) {\n\t\t\t\tprops[name] = value;\n\t\t\t\tdelete props[index];\n\t\t\t}\n\n\t\t\thooks = jQuery.cssHooks[name];\n\t\t\tif (hooks && \"expand\" in hooks) {\n\t\t\t\tvalue = hooks.expand(value);\n\t\t\t\tdelete props[name];\n\n\t\t\t\t// Not quite $.extend, this won't overwrite existing keys.\n\t\t\t\t// Reusing 'index' because we have the correct \"name\"\n\t\t\t\tfor (index in value) {\n\t\t\t\t\tif (!(index in props)) {\n\t\t\t\t\t\tprops[index] = value[index];\n\t\t\t\t\t\tspecialEasing[index] = easing;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tspecialEasing[name] = easing;\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction Animation(elem, properties, options) {\n\t\tvar result,\n\t\t\tstopped,\n\t\t\tindex = 0,\n\t\t\tlength = Animation.prefilters.length,\n\t\t\tdeferred = jQuery.Deferred().always(function () {\n\n\t\t\t\t// Don't match elem in the :animated selector\n\t\t\t\tdelete tick.elem;\n\t\t\t}),\n\t\t\ttick = function () {\n\t\t\t\tif (stopped) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tvar currentTime = fxNow || createFxNow(),\n\t\t\t\t\tremaining = Math.max(0, animation.startTime + animation.duration - currentTime),\n\n\t\t\t\t\t// Support: Android 2.3 only\n\t\t\t\t\t// Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (trac-12497)\n\t\t\t\t\ttemp = remaining / animation.duration || 0,\n\t\t\t\t\tpercent = 1 - temp,\n\t\t\t\t\tindex = 0,\n\t\t\t\t\tlength = animation.tweens.length;\n\n\t\t\t\tfor (; index < length; index++) {\n\t\t\t\t\tanimation.tweens[index].run(percent);\n\t\t\t\t}\n\n\t\t\t\tdeferred.notifyWith(elem, [animation, percent, remaining]);\n\n\t\t\t\t// If there's more to do, yield\n\t\t\t\tif (percent < 1 && length) {\n\t\t\t\t\treturn remaining;\n\t\t\t\t}\n\n\t\t\t\t// If this was an empty animation, synthesize a final progress notification\n\t\t\t\tif (!length) {\n\t\t\t\t\tdeferred.notifyWith(elem, [animation, 1, 0]);\n\t\t\t\t}\n\n\t\t\t\t// Resolve the animation and report its conclusion\n\t\t\t\tdeferred.resolveWith(elem, [animation]);\n\t\t\t\treturn false;\n\t\t\t},\n\t\t\tanimation = deferred.promise({\n\t\t\t\telem: elem,\n\t\t\t\tprops: jQuery.extend({}, properties),\n\t\t\t\topts: jQuery.extend(true, {\n\t\t\t\t\tspecialEasing: {},\n\t\t\t\t\teasing: jQuery.easing._default\n\t\t\t\t}, options),\n\t\t\t\toriginalProperties: properties,\n\t\t\t\toriginalOptions: options,\n\t\t\t\tstartTime: fxNow || createFxNow(),\n\t\t\t\tduration: options.duration,\n\t\t\t\ttweens: [],\n\t\t\t\tcreateTween: function (prop, end) {\n\t\t\t\t\tvar tween = jQuery.Tween(elem, animation.opts, prop, end,\n\t\t\t\t\t\tanimation.opts.specialEasing[prop] || animation.opts.easing);\n\t\t\t\t\tanimation.tweens.push(tween);\n\t\t\t\t\treturn tween;\n\t\t\t\t},\n\t\t\t\tstop: function (gotoEnd) {\n\t\t\t\t\tvar index = 0,\n\n\t\t\t\t\t\t// If we are going to the end, we want to run all the tweens\n\t\t\t\t\t\t// otherwise we skip this part\n\t\t\t\t\t\tlength = gotoEnd ? animation.tweens.length : 0;\n\t\t\t\t\tif (stopped) {\n\t\t\t\t\t\treturn this;\n\t\t\t\t\t}\n\t\t\t\t\tstopped = true;\n\t\t\t\t\tfor (; index < length; index++) {\n\t\t\t\t\t\tanimation.tweens[index].run(1);\n\t\t\t\t\t}\n\n\t\t\t\t\t// Resolve when we played the last frame; otherwise, reject\n\t\t\t\t\tif (gotoEnd) {\n\t\t\t\t\t\tdeferred.notifyWith(elem, [animation, 1, 0]);\n\t\t\t\t\t\tdeferred.resolveWith(elem, [animation, gotoEnd]);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdeferred.rejectWith(elem, [animation, gotoEnd]);\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t}),\n\t\t\tprops = animation.props;\n\n\t\tpropFilter(props, animation.opts.specialEasing);\n\n\t\tfor (; index < length; index++) {\n\t\t\tresult = Animation.prefilters[index].call(animation, elem, props, animation.opts);\n\t\t\tif (result) {\n\t\t\t\tif (isFunction(result.stop)) {\n\t\t\t\t\tjQuery._queueHooks(animation.elem, animation.opts.queue).stop =\n\t\t\t\t\t\tresult.stop.bind(result);\n\t\t\t\t}\n\t\t\t\treturn result;\n\t\t\t}\n\t\t}\n\n\t\tjQuery.map(props, createTween, animation);\n\n\t\tif (isFunction(animation.opts.start)) {\n\t\t\tanimation.opts.start.call(elem, animation);\n\t\t}\n\n\t\t// Attach callbacks from options\n\t\tanimation\n\t\t\t.progress(animation.opts.progress)\n\t\t\t.done(animation.opts.done, animation.opts.complete)\n\t\t\t.fail(animation.opts.fail)\n\t\t\t.always(animation.opts.always);\n\n\t\tjQuery.fx.timer(\n\t\t\tjQuery.extend(tick, {\n\t\t\t\telem: elem,\n\t\t\t\tanim: animation,\n\t\t\t\tqueue: animation.opts.queue\n\t\t\t})\n\t\t);\n\n\t\treturn animation;\n\t}\n\n\tjQuery.Animation = jQuery.extend(Animation, {\n\n\t\ttweeners: {\n\t\t\t\"*\": [function (prop, value) {\n\t\t\t\tvar tween = this.createTween(prop, value);\n\t\t\t\tadjustCSS(tween.elem, prop, rcssNum.exec(value), tween);\n\t\t\t\treturn tween;\n\t\t\t}]\n\t\t},\n\n\t\ttweener: function (props, callback) {\n\t\t\tif (isFunction(props)) {\n\t\t\t\tcallback = props;\n\t\t\t\tprops = [\"*\"];\n\t\t\t} else {\n\t\t\t\tprops = props.match(rnothtmlwhite);\n\t\t\t}\n\n\t\t\tvar prop,\n\t\t\t\tindex = 0,\n\t\t\t\tlength = props.length;\n\n\t\t\tfor (; index < length; index++) {\n\t\t\t\tprop = props[index];\n\t\t\t\tAnimation.tweeners[prop] = Animation.tweeners[prop] || [];\n\t\t\t\tAnimation.tweeners[prop].unshift(callback);\n\t\t\t}\n\t\t},\n\n\t\tprefilters: [defaultPrefilter],\n\n\t\tprefilter: function (callback, prepend) {\n\t\t\tif (prepend) {\n\t\t\t\tAnimation.prefilters.unshift(callback);\n\t\t\t} else {\n\t\t\t\tAnimation.prefilters.push(callback);\n\t\t\t}\n\t\t}\n\t});\n\n\tjQuery.speed = function (speed, easing, fn) {\n\t\tvar opt = speed && typeof speed === \"object\" ? jQuery.extend({}, speed) : {\n\t\t\tcomplete: fn || !fn && easing ||\n\t\t\t\tisFunction(speed) && speed,\n\t\t\tduration: speed,\n\t\t\teasing: fn && easing || easing && !isFunction(easing) && easing\n\t\t};\n\n\t\t// Go to the end state if fx are off\n\t\tif (jQuery.fx.off) {\n\t\t\topt.duration = 0;\n\n\t\t} else {\n\t\t\tif (typeof opt.duration !== \"number\") {\n\t\t\t\tif (opt.duration in jQuery.fx.speeds) {\n\t\t\t\t\topt.duration = jQuery.fx.speeds[opt.duration];\n\n\t\t\t\t} else {\n\t\t\t\t\topt.duration = jQuery.fx.speeds._default;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Normalize opt.queue - true/undefined/null -> \"fx\"\n\t\tif (opt.queue == null || opt.queue === true) {\n\t\t\topt.queue = \"fx\";\n\t\t}\n\n\t\t// Queueing\n\t\topt.old = opt.complete;\n\n\t\topt.complete = function () {\n\t\t\tif (isFunction(opt.old)) {\n\t\t\t\topt.old.call(this);\n\t\t\t}\n\n\t\t\tif (opt.queue) {\n\t\t\t\tjQuery.dequeue(this, opt.queue);\n\t\t\t}\n\t\t};\n\n\t\treturn opt;\n\t};\n\n\tjQuery.fn.extend({\n\t\tfadeTo: function (speed, to, easing, callback) {\n\n\t\t\t// Show any hidden elements after setting opacity to 0\n\t\t\treturn this.filter(isHiddenWithinTree).css(\"opacity\", 0).show()\n\n\t\t\t\t// Animate to the value specified\n\t\t\t\t.end().animate({ opacity: to }, speed, easing, callback);\n\t\t},\n\t\tanimate: function (prop, speed, easing, callback) {\n\t\t\tvar empty = jQuery.isEmptyObject(prop),\n\t\t\t\toptall = jQuery.speed(speed, easing, callback),\n\t\t\t\tdoAnimation = function () {\n\n\t\t\t\t\t// Operate on a copy of prop so per-property easing won't be lost\n\t\t\t\t\tvar anim = Animation(this, jQuery.extend({}, prop), optall);\n\n\t\t\t\t\t// Empty animations, or finishing resolves immediately\n\t\t\t\t\tif (empty || dataPriv.get(this, \"finish\")) {\n\t\t\t\t\t\tanim.stop(true);\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\tdoAnimation.finish = doAnimation;\n\n\t\t\treturn empty || optall.queue === false ?\n\t\t\t\tthis.each(doAnimation) :\n\t\t\t\tthis.queue(optall.queue, doAnimation);\n\t\t},\n\t\tstop: function (type, clearQueue, gotoEnd) {\n\t\t\tvar stopQueue = function (hooks) {\n\t\t\t\tvar stop = hooks.stop;\n\t\t\t\tdelete hooks.stop;\n\t\t\t\tstop(gotoEnd);\n\t\t\t};\n\n\t\t\tif (typeof type !== \"string\") {\n\t\t\t\tgotoEnd = clearQueue;\n\t\t\t\tclearQueue = type;\n\t\t\t\ttype = undefined;\n\t\t\t}\n\t\t\tif (clearQueue) {\n\t\t\t\tthis.queue(type || \"fx\", []);\n\t\t\t}\n\n\t\t\treturn this.each(function () {\n\t\t\t\tvar dequeue = true,\n\t\t\t\t\tindex = type != null && type + \"queueHooks\",\n\t\t\t\t\ttimers = jQuery.timers,\n\t\t\t\t\tdata = dataPriv.get(this);\n\n\t\t\t\tif (index) {\n\t\t\t\t\tif (data[index] && data[index].stop) {\n\t\t\t\t\t\tstopQueue(data[index]);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tfor (index in data) {\n\t\t\t\t\t\tif (data[index] && data[index].stop && rrun.test(index)) {\n\t\t\t\t\t\t\tstopQueue(data[index]);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tfor (index = timers.length; index--;) {\n\t\t\t\t\tif (timers[index].elem === this &&\n\t\t\t\t\t\t(type == null || timers[index].queue === type)) {\n\n\t\t\t\t\t\ttimers[index].anim.stop(gotoEnd);\n\t\t\t\t\t\tdequeue = false;\n\t\t\t\t\t\ttimers.splice(index, 1);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Start the next in the queue if the last step wasn't forced.\n\t\t\t\t// Timers currently will call their complete callbacks, which\n\t\t\t\t// will dequeue but only if they were gotoEnd.\n\t\t\t\tif (dequeue || !gotoEnd) {\n\t\t\t\t\tjQuery.dequeue(this, type);\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\t\tfinish: function (type) {\n\t\t\tif (type !== false) {\n\t\t\t\ttype = type || \"fx\";\n\t\t\t}\n\t\t\treturn this.each(function () {\n\t\t\t\tvar index,\n\t\t\t\t\tdata = dataPriv.get(this),\n\t\t\t\t\tqueue = data[type + \"queue\"],\n\t\t\t\t\thooks = data[type + \"queueHooks\"],\n\t\t\t\t\ttimers = jQuery.timers,\n\t\t\t\t\tlength = queue ? queue.length : 0;\n\n\t\t\t\t// Enable finishing flag on private data\n\t\t\t\tdata.finish = true;\n\n\t\t\t\t// Empty the queue first\n\t\t\t\tjQuery.queue(this, type, []);\n\n\t\t\t\tif (hooks && hooks.stop) {\n\t\t\t\t\thooks.stop.call(this, true);\n\t\t\t\t}\n\n\t\t\t\t// Look for any active animations, and finish them\n\t\t\t\tfor (index = timers.length; index--;) {\n\t\t\t\t\tif (timers[index].elem === this && timers[index].queue === type) {\n\t\t\t\t\t\ttimers[index].anim.stop(true);\n\t\t\t\t\t\ttimers.splice(index, 1);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Look for any animations in the old queue and finish them\n\t\t\t\tfor (index = 0; index < length; index++) {\n\t\t\t\t\tif (queue[index] && queue[index].finish) {\n\t\t\t\t\t\tqueue[index].finish.call(this);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Turn off finishing flag\n\t\t\t\tdelete data.finish;\n\t\t\t});\n\t\t}\n\t});\n\n\tjQuery.each([\"toggle\", \"show\", \"hide\"], function (_i, name) {\n\t\tvar cssFn = jQuery.fn[name];\n\t\tjQuery.fn[name] = function (speed, easing, callback) {\n\t\t\treturn speed == null || typeof speed === \"boolean\" ?\n\t\t\t\tcssFn.apply(this, arguments) :\n\t\t\t\tthis.animate(genFx(name, true), speed, easing, callback);\n\t\t};\n\t});\n\n\t// Generate shortcuts for custom animations\n\tjQuery.each({\n\t\tslideDown: genFx(\"show\"),\n\t\tslideUp: genFx(\"hide\"),\n\t\tslideToggle: genFx(\"toggle\"),\n\t\tfadeIn: { opacity: \"show\" },\n\t\tfadeOut: { opacity: \"hide\" },\n\t\tfadeToggle: { opacity: \"toggle\" }\n\t}, function (name, props) {\n\t\tjQuery.fn[name] = function (speed, easing, callback) {\n\t\t\treturn this.animate(props, speed, easing, callback);\n\t\t};\n\t});\n\n\tjQuery.timers = [];\n\tjQuery.fx.tick = function () {\n\t\tvar timer,\n\t\t\ti = 0,\n\t\t\ttimers = jQuery.timers;\n\n\t\tfxNow = Date.now();\n\n\t\tfor (; i < timers.length; i++) {\n\t\t\ttimer = timers[i];\n\n\t\t\t// Run the timer and safely remove it when done (allowing for external removal)\n\t\t\tif (!timer() && timers[i] === timer) {\n\t\t\t\ttimers.splice(i--, 1);\n\t\t\t}\n\t\t}\n\n\t\tif (!timers.length) {\n\t\t\tjQuery.fx.stop();\n\t\t}\n\t\tfxNow = undefined;\n\t};\n\n\tjQuery.fx.timer = function (timer) {\n\t\tjQuery.timers.push(timer);\n\t\tjQuery.fx.start();\n\t};\n\n\tjQuery.fx.interval = 13;\n\tjQuery.fx.start = function () {\n\t\tif (inProgress) {\n\t\t\treturn;\n\t\t}\n\n\t\tinProgress = true;\n\t\tschedule();\n\t};\n\n\tjQuery.fx.stop = function () {\n\t\tinProgress = null;\n\t};\n\n\tjQuery.fx.speeds = {\n\t\tslow: 600,\n\t\tfast: 200,\n\n\t\t// Default speed\n\t\t_default: 400\n\t};\n\n\n\t// Based off of the plugin by Clint Helfers, with permission.\n\tjQuery.fn.delay = function (time, type) {\n\t\ttime = jQuery.fx ? jQuery.fx.speeds[time] || time : time;\n\t\ttype = type || \"fx\";\n\n\t\treturn this.queue(type, function (next, hooks) {\n\t\t\tvar timeout = window.setTimeout(next, time);\n\t\t\thooks.stop = function () {\n\t\t\t\twindow.clearTimeout(timeout);\n\t\t\t};\n\t\t});\n\t};\n\n\n\t(function () {\n\t\tvar input = document.createElement(\"input\"),\n\t\t\tselect = document.createElement(\"select\"),\n\t\t\topt = select.appendChild(document.createElement(\"option\"));\n\n\t\tinput.type = \"checkbox\";\n\n\t\t// Support: Android <=4.3 only\n\t\t// Default value for a checkbox should be \"on\"\n\t\tsupport.checkOn = input.value !== \"\";\n\n\t\t// Support: IE <=11 only\n\t\t// Must access selectedIndex to make default options select\n\t\tsupport.optSelected = opt.selected;\n\n\t\t// Support: IE <=11 only\n\t\t// An input loses its value after becoming a radio\n\t\tinput = document.createElement(\"input\");\n\t\tinput.value = \"t\";\n\t\tinput.type = \"radio\";\n\t\tsupport.radioValue = input.value === \"t\";\n\t})();\n\n\n\tvar boolHook,\n\t\tattrHandle = jQuery.expr.attrHandle;\n\n\tjQuery.fn.extend({\n\t\tattr: function (name, value) {\n\t\t\treturn access(this, jQuery.attr, name, value, arguments.length > 1);\n\t\t},\n\n\t\tremoveAttr: function (name) {\n\t\t\treturn this.each(function () {\n\t\t\t\tjQuery.removeAttr(this, name);\n\t\t\t});\n\t\t}\n\t});\n\n\tjQuery.extend({\n\t\tattr: function (elem, name, value) {\n\t\t\tvar ret, hooks,\n\t\t\t\tnType = elem.nodeType;\n\n\t\t\t// Don't get/set attributes on text, comment and attribute nodes\n\t\t\tif (nType === 3 || nType === 8 || nType === 2) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Fallback to prop when attributes are not supported\n\t\t\tif (typeof elem.getAttribute === \"undefined\") {\n\t\t\t\treturn jQuery.prop(elem, name, value);\n\t\t\t}\n\n\t\t\t// Attribute hooks are determined by the lowercase version\n\t\t\t// Grab necessary hook if one is defined\n\t\t\tif (nType !== 1 || !jQuery.isXMLDoc(elem)) {\n\t\t\t\thooks = jQuery.attrHooks[name.toLowerCase()] ||\n\t\t\t\t\t(jQuery.expr.match.bool.test(name) ? boolHook : undefined);\n\t\t\t}\n\n\t\t\tif (value !== undefined) {\n\t\t\t\tif (value === null) {\n\t\t\t\t\tjQuery.removeAttr(elem, name);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (hooks && \"set\" in hooks &&\n\t\t\t\t\t(ret = hooks.set(elem, value, name)) !== undefined) {\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\n\t\t\t\telem.setAttribute(name, value + \"\");\n\t\t\t\treturn value;\n\t\t\t}\n\n\t\t\tif (hooks && \"get\" in hooks && (ret = hooks.get(elem, name)) !== null) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\tret = jQuery.find.attr(elem, name);\n\n\t\t\t// Non-existent attributes return null, we normalize to undefined\n\t\t\treturn ret == null ? undefined : ret;\n\t\t},\n\n\t\tattrHooks: {\n\t\t\ttype: {\n\t\t\t\tset: function (elem, value) {\n\t\t\t\t\tif (!support.radioValue && value === \"radio\" &&\n\t\t\t\t\t\tnodeName(elem, \"input\")) {\n\t\t\t\t\t\tvar val = elem.value;\n\t\t\t\t\t\telem.setAttribute(\"type\", value);\n\t\t\t\t\t\tif (val) {\n\t\t\t\t\t\t\telem.value = val;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn value;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tremoveAttr: function (elem, value) {\n\t\t\tvar name,\n\t\t\t\ti = 0,\n\n\t\t\t\t// Attribute names can contain non-HTML whitespace characters\n\t\t\t\t// https://html.spec.whatwg.org/multipage/syntax.html#attributes-2\n\t\t\t\tattrNames = value && value.match(rnothtmlwhite);\n\n\t\t\tif (attrNames && elem.nodeType === 1) {\n\t\t\t\twhile ((name = attrNames[i++])) {\n\t\t\t\t\telem.removeAttribute(name);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\n\t// Hooks for boolean attributes\n\tboolHook = {\n\t\tset: function (elem, value, name) {\n\t\t\tif (value === false) {\n\n\t\t\t\t// Remove boolean attributes when set to false\n\t\t\t\tjQuery.removeAttr(elem, name);\n\t\t\t} else {\n\t\t\t\telem.setAttribute(name, name);\n\t\t\t}\n\t\t\treturn name;\n\t\t}\n\t};\n\n\tjQuery.each(jQuery.expr.match.bool.source.match(/\\w+/g), function (_i, name) {\n\t\tvar getter = attrHandle[name] || jQuery.find.attr;\n\n\t\tattrHandle[name] = function (elem, name, isXML) {\n\t\t\tvar ret, handle,\n\t\t\t\tlowercaseName = name.toLowerCase();\n\n\t\t\tif (!isXML) {\n\n\t\t\t\t// Avoid an infinite loop by temporarily removing this function from the getter\n\t\t\t\thandle = attrHandle[lowercaseName];\n\t\t\t\tattrHandle[lowercaseName] = ret;\n\t\t\t\tret = getter(elem, name, isXML) != null ?\n\t\t\t\t\tlowercaseName :\n\t\t\t\t\tnull;\n\t\t\t\tattrHandle[lowercaseName] = handle;\n\t\t\t}\n\t\t\treturn ret;\n\t\t};\n\t});\n\n\n\n\n\tvar rfocusable = /^(?:input|select|textarea|button)$/i,\n\t\trclickable = /^(?:a|area)$/i;\n\n\tjQuery.fn.extend({\n\t\tprop: function (name, value) {\n\t\t\treturn access(this, jQuery.prop, name, value, arguments.length > 1);\n\t\t},\n\n\t\tremoveProp: function (name) {\n\t\t\treturn this.each(function () {\n\t\t\t\tdelete this[jQuery.propFix[name] || name];\n\t\t\t});\n\t\t}\n\t});\n\n\tjQuery.extend({\n\t\tprop: function (elem, name, value) {\n\t\t\tvar ret, hooks,\n\t\t\t\tnType = elem.nodeType;\n\n\t\t\t// Don't get/set properties on text, comment and attribute nodes\n\t\t\tif (nType === 3 || nType === 8 || nType === 2) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (nType !== 1 || !jQuery.isXMLDoc(elem)) {\n\n\t\t\t\t// Fix name and attach hooks\n\t\t\t\tname = jQuery.propFix[name] || name;\n\t\t\t\thooks = jQuery.propHooks[name];\n\t\t\t}\n\n\t\t\tif (value !== undefined) {\n\t\t\t\tif (hooks && \"set\" in hooks &&\n\t\t\t\t\t(ret = hooks.set(elem, value, name)) !== undefined) {\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\n\t\t\t\treturn (elem[name] = value);\n\t\t\t}\n\n\t\t\tif (hooks && \"get\" in hooks && (ret = hooks.get(elem, name)) !== null) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\treturn elem[name];\n\t\t},\n\n\t\tpropHooks: {\n\t\t\ttabIndex: {\n\t\t\t\tget: function (elem) {\n\n\t\t\t\t\t// Support: IE <=9 - 11 only\n\t\t\t\t\t// elem.tabIndex doesn't always return the\n\t\t\t\t\t// correct value when it hasn't been explicitly set\n\t\t\t\t\t// Use proper attribute retrieval (trac-12072)\n\t\t\t\t\tvar tabindex = jQuery.find.attr(elem, \"tabindex\");\n\n\t\t\t\t\tif (tabindex) {\n\t\t\t\t\t\treturn parseInt(tabindex, 10);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (\n\t\t\t\t\t\trfocusable.test(elem.nodeName) ||\n\t\t\t\t\t\trclickable.test(elem.nodeName) &&\n\t\t\t\t\t\telem.href\n\t\t\t\t\t) {\n\t\t\t\t\t\treturn 0;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn -1;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tpropFix: {\n\t\t\t\"for\": \"htmlFor\",\n\t\t\t\"class\": \"className\"\n\t\t}\n\t});\n\n\t// Support: IE <=11 only\n\t// Accessing the selectedIndex property\n\t// forces the browser to respect setting selected\n\t// on the option\n\t// The getter ensures a default option is selected\n\t// when in an optgroup\n\t// eslint rule \"no-unused-expressions\" is disabled for this code\n\t// since it considers such accessions noop\n\tif (!support.optSelected) {\n\t\tjQuery.propHooks.selected = {\n\t\t\tget: function (elem) {\n\n\t\t\t\t/* eslint no-unused-expressions: \"off\" */\n\n\t\t\t\tvar parent = elem.parentNode;\n\t\t\t\tif (parent && parent.parentNode) {\n\t\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t\t}\n\t\t\t\treturn null;\n\t\t\t},\n\t\t\tset: function (elem) {\n\n\t\t\t\t/* eslint no-unused-expressions: \"off\" */\n\n\t\t\t\tvar parent = elem.parentNode;\n\t\t\t\tif (parent) {\n\t\t\t\t\tparent.selectedIndex;\n\n\t\t\t\t\tif (parent.parentNode) {\n\t\t\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n\n\tjQuery.each([\n\t\t\"tabIndex\",\n\t\t\"readOnly\",\n\t\t\"maxLength\",\n\t\t\"cellSpacing\",\n\t\t\"cellPadding\",\n\t\t\"rowSpan\",\n\t\t\"colSpan\",\n\t\t\"useMap\",\n\t\t\"frameBorder\",\n\t\t\"contentEditable\"\n\t], function () {\n\t\tjQuery.propFix[this.toLowerCase()] = this;\n\t});\n\n\n\n\n\t// Strip and collapse whitespace according to HTML spec\n\t// https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace\n\tfunction stripAndCollapse(value) {\n\t\tvar tokens = value.match(rnothtmlwhite) || [];\n\t\treturn tokens.join(\" \");\n\t}\n\n\n\tfunction getClass(elem) {\n\t\treturn elem.getAttribute && elem.getAttribute(\"class\") || \"\";\n\t}\n\n\tfunction classesToArray(value) {\n\t\tif (Array.isArray(value)) {\n\t\t\treturn value;\n\t\t}\n\t\tif (typeof value === \"string\") {\n\t\t\treturn value.match(rnothtmlwhite) || [];\n\t\t}\n\t\treturn [];\n\t}\n\n\tjQuery.fn.extend({\n\t\taddClass: function (value) {\n\t\t\tvar classNames, cur, curValue, className, i, finalValue;\n\n\t\t\tif (isFunction(value)) {\n\t\t\t\treturn this.each(function (j) {\n\t\t\t\t\tjQuery(this).addClass(value.call(this, j, getClass(this)));\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tclassNames = classesToArray(value);\n\n\t\t\tif (classNames.length) {\n\t\t\t\treturn this.each(function () {\n\t\t\t\t\tcurValue = getClass(this);\n\t\t\t\t\tcur = this.nodeType === 1 && (\" \" + stripAndCollapse(curValue) + \" \");\n\n\t\t\t\t\tif (cur) {\n\t\t\t\t\t\tfor (i = 0; i < classNames.length; i++) {\n\t\t\t\t\t\t\tclassName = classNames[i];\n\t\t\t\t\t\t\tif (cur.indexOf(\" \" + className + \" \") < 0) {\n\t\t\t\t\t\t\t\tcur += className + \" \";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\t\tfinalValue = stripAndCollapse(cur);\n\t\t\t\t\t\tif (curValue !== finalValue) {\n\t\t\t\t\t\t\tthis.setAttribute(\"class\", finalValue);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn this;\n\t\t},\n\n\t\tremoveClass: function (value) {\n\t\t\tvar classNames, cur, curValue, className, i, finalValue;\n\n\t\t\tif (isFunction(value)) {\n\t\t\t\treturn this.each(function (j) {\n\t\t\t\t\tjQuery(this).removeClass(value.call(this, j, getClass(this)));\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (!arguments.length) {\n\t\t\t\treturn this.attr(\"class\", \"\");\n\t\t\t}\n\n\t\t\tclassNames = classesToArray(value);\n\n\t\t\tif (classNames.length) {\n\t\t\t\treturn this.each(function () {\n\t\t\t\t\tcurValue = getClass(this);\n\n\t\t\t\t\t// This expression is here for better compressibility (see addClass)\n\t\t\t\t\tcur = this.nodeType === 1 && (\" \" + stripAndCollapse(curValue) + \" \");\n\n\t\t\t\t\tif (cur) {\n\t\t\t\t\t\tfor (i = 0; i < classNames.length; i++) {\n\t\t\t\t\t\t\tclassName = classNames[i];\n\n\t\t\t\t\t\t\t// Remove *all* instances\n\t\t\t\t\t\t\twhile (cur.indexOf(\" \" + className + \" \") > -1) {\n\t\t\t\t\t\t\t\tcur = cur.replace(\" \" + className + \" \", \" \");\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\t\tfinalValue = stripAndCollapse(cur);\n\t\t\t\t\t\tif (curValue !== finalValue) {\n\t\t\t\t\t\t\tthis.setAttribute(\"class\", finalValue);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn this;\n\t\t},\n\n\t\ttoggleClass: function (value, stateVal) {\n\t\t\tvar classNames, className, i, self,\n\t\t\t\ttype = typeof value,\n\t\t\t\tisValidValue = type === \"string\" || Array.isArray(value);\n\n\t\t\tif (isFunction(value)) {\n\t\t\t\treturn this.each(function (i) {\n\t\t\t\t\tjQuery(this).toggleClass(\n\t\t\t\t\t\tvalue.call(this, i, getClass(this), stateVal),\n\t\t\t\t\t\tstateVal\n\t\t\t\t\t);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (typeof stateVal === \"boolean\" && isValidValue) {\n\t\t\t\treturn stateVal ? this.addClass(value) : this.removeClass(value);\n\t\t\t}\n\n\t\t\tclassNames = classesToArray(value);\n\n\t\t\treturn this.each(function () {\n\t\t\t\tif (isValidValue) {\n\n\t\t\t\t\t// Toggle individual class names\n\t\t\t\t\tself = jQuery(this);\n\n\t\t\t\t\tfor (i = 0; i < classNames.length; i++) {\n\t\t\t\t\t\tclassName = classNames[i];\n\n\t\t\t\t\t\t// Check each className given, space separated list\n\t\t\t\t\t\tif (self.hasClass(className)) {\n\t\t\t\t\t\t\tself.removeClass(className);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tself.addClass(className);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Toggle whole class name\n\t\t\t\t} else if (value === undefined || type === \"boolean\") {\n\t\t\t\t\tclassName = getClass(this);\n\t\t\t\t\tif (className) {\n\n\t\t\t\t\t\t// Store className if set\n\t\t\t\t\t\tdataPriv.set(this, \"__className__\", className);\n\t\t\t\t\t}\n\n\t\t\t\t\t// If the element has a class name or if we're passed `false`,\n\t\t\t\t\t// then remove the whole classname (if there was one, the above saved it).\n\t\t\t\t\t// Otherwise bring back whatever was previously saved (if anything),\n\t\t\t\t\t// falling back to the empty string if nothing was stored.\n\t\t\t\t\tif (this.setAttribute) {\n\t\t\t\t\t\tthis.setAttribute(\"class\",\n\t\t\t\t\t\t\tclassName || value === false ?\n\t\t\t\t\t\t\t\t\"\" :\n\t\t\t\t\t\t\t\tdataPriv.get(this, \"__className__\") || \"\"\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\thasClass: function (selector) {\n\t\t\tvar className, elem,\n\t\t\t\ti = 0;\n\n\t\t\tclassName = \" \" + selector + \" \";\n\t\t\twhile ((elem = this[i++])) {\n\t\t\t\tif (elem.nodeType === 1 &&\n\t\t\t\t\t(\" \" + stripAndCollapse(getClass(elem)) + \" \").indexOf(className) > -1) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn false;\n\t\t}\n\t});\n\n\n\n\n\tvar rreturn = /\\r/g;\n\n\tjQuery.fn.extend({\n\t\tval: function (value) {\n\t\t\tvar hooks, ret, valueIsFunction,\n\t\t\t\telem = this[0];\n\n\t\t\tif (!arguments.length) {\n\t\t\t\tif (elem) {\n\t\t\t\t\thooks = jQuery.valHooks[elem.type] ||\n\t\t\t\t\t\tjQuery.valHooks[elem.nodeName.toLowerCase()];\n\n\t\t\t\t\tif (hooks &&\n\t\t\t\t\t\t\"get\" in hooks &&\n\t\t\t\t\t\t(ret = hooks.get(elem, \"value\")) !== undefined\n\t\t\t\t\t) {\n\t\t\t\t\t\treturn ret;\n\t\t\t\t\t}\n\n\t\t\t\t\tret = elem.value;\n\n\t\t\t\t\t// Handle most common string cases\n\t\t\t\t\tif (typeof ret === \"string\") {\n\t\t\t\t\t\treturn ret.replace(rreturn, \"\");\n\t\t\t\t\t}\n\n\t\t\t\t\t// Handle cases where value is null/undef or number\n\t\t\t\t\treturn ret == null ? \"\" : ret;\n\t\t\t\t}\n\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvalueIsFunction = isFunction(value);\n\n\t\t\treturn this.each(function (i) {\n\t\t\t\tvar val;\n\n\t\t\t\tif (this.nodeType !== 1) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (valueIsFunction) {\n\t\t\t\t\tval = value.call(this, i, jQuery(this).val());\n\t\t\t\t} else {\n\t\t\t\t\tval = value;\n\t\t\t\t}\n\n\t\t\t\t// Treat null/undefined as \"\"; convert numbers to string\n\t\t\t\tif (val == null) {\n\t\t\t\t\tval = \"\";\n\n\t\t\t\t} else if (typeof val === \"number\") {\n\t\t\t\t\tval += \"\";\n\n\t\t\t\t} else if (Array.isArray(val)) {\n\t\t\t\t\tval = jQuery.map(val, function (value) {\n\t\t\t\t\t\treturn value == null ? \"\" : value + \"\";\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\thooks = jQuery.valHooks[this.type] || jQuery.valHooks[this.nodeName.toLowerCase()];\n\n\t\t\t\t// If set returns undefined, fall back to normal setting\n\t\t\t\tif (!hooks || !(\"set\" in hooks) || hooks.set(this, val, \"value\") === undefined) {\n\t\t\t\t\tthis.value = val;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t});\n\n\tjQuery.extend({\n\t\tvalHooks: {\n\t\t\toption: {\n\t\t\t\tget: function (elem) {\n\n\t\t\t\t\tvar val = jQuery.find.attr(elem, \"value\");\n\t\t\t\t\treturn val != null ?\n\t\t\t\t\t\tval :\n\n\t\t\t\t\t\t// Support: IE <=10 - 11 only\n\t\t\t\t\t\t// option.text throws exceptions (trac-14686, trac-14858)\n\t\t\t\t\t\t// Strip and collapse whitespace\n\t\t\t\t\t\t// https://html.spec.whatwg.org/#strip-and-collapse-whitespace\n\t\t\t\t\t\tstripAndCollapse(jQuery.text(elem));\n\t\t\t\t}\n\t\t\t},\n\t\t\tselect: {\n\t\t\t\tget: function (elem) {\n\t\t\t\t\tvar value, option, i,\n\t\t\t\t\t\toptions = elem.options,\n\t\t\t\t\t\tindex = elem.selectedIndex,\n\t\t\t\t\t\tone = elem.type === \"select-one\",\n\t\t\t\t\t\tvalues = one ? null : [],\n\t\t\t\t\t\tmax = one ? index + 1 : options.length;\n\n\t\t\t\t\tif (index < 0) {\n\t\t\t\t\t\ti = max;\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\ti = one ? index : 0;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Loop through all the selected options\n\t\t\t\t\tfor (; i < max; i++) {\n\t\t\t\t\t\toption = options[i];\n\n\t\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t\t// IE8-9 doesn't update selected after form reset (trac-2551)\n\t\t\t\t\t\tif ((option.selected || i === index) &&\n\n\t\t\t\t\t\t\t// Don't return options that are disabled or in a disabled optgroup\n\t\t\t\t\t\t\t!option.disabled &&\n\t\t\t\t\t\t\t(!option.parentNode.disabled ||\n\t\t\t\t\t\t\t\t!nodeName(option.parentNode, \"optgroup\"))) {\n\n\t\t\t\t\t\t\t// Get the specific value for the option\n\t\t\t\t\t\t\tvalue = jQuery(option).val();\n\n\t\t\t\t\t\t\t// We don't need an array for one selects\n\t\t\t\t\t\t\tif (one) {\n\t\t\t\t\t\t\t\treturn value;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Multi-Selects return an array\n\t\t\t\t\t\t\tvalues.push(value);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn values;\n\t\t\t\t},\n\n\t\t\t\tset: function (elem, value) {\n\t\t\t\t\tvar optionSet, option,\n\t\t\t\t\t\toptions = elem.options,\n\t\t\t\t\t\tvalues = jQuery.makeArray(value),\n\t\t\t\t\t\ti = options.length;\n\n\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\toption = options[i];\n\n\t\t\t\t\t\t/* eslint-disable no-cond-assign */\n\n\t\t\t\t\t\tif (option.selected =\n\t\t\t\t\t\t\tjQuery.inArray(jQuery.valHooks.option.get(option), values) > -1\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\toptionSet = true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t/* eslint-enable no-cond-assign */\n\t\t\t\t\t}\n\n\t\t\t\t\t// Force browsers to behave consistently when non-matching value is set\n\t\t\t\t\tif (!optionSet) {\n\t\t\t\t\t\telem.selectedIndex = -1;\n\t\t\t\t\t}\n\t\t\t\t\treturn values;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\n\t// Radios and checkboxes getter/setter\n\tjQuery.each([\"radio\", \"checkbox\"], function () {\n\t\tjQuery.valHooks[this] = {\n\t\t\tset: function (elem, value) {\n\t\t\t\tif (Array.isArray(value)) {\n\t\t\t\t\treturn (elem.checked = jQuery.inArray(jQuery(elem).val(), value) > -1);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\tif (!support.checkOn) {\n\t\t\tjQuery.valHooks[this].get = function (elem) {\n\t\t\t\treturn elem.getAttribute(\"value\") === null ? \"on\" : elem.value;\n\t\t\t};\n\t\t}\n\t});\n\n\n\n\n\t// Return jQuery for attributes-only inclusion\n\tvar location = window.location;\n\n\tvar nonce = { guid: Date.now() };\n\n\tvar rquery = (/\\?/);\n\n\n\n\t// Cross-browser xml parsing\n\tjQuery.parseXML = function (data) {\n\t\tvar xml, parserErrorElem;\n\t\tif (!data || typeof data !== \"string\") {\n\t\t\treturn null;\n\t\t}\n\n\t\t// Support: IE 9 - 11 only\n\t\t// IE throws on parseFromString with invalid input.\n\t\ttry {\n\t\t\txml = (new window.DOMParser()).parseFromString(data, \"text/xml\");\n\t\t} catch (e) { }\n\n\t\tparserErrorElem = xml && xml.getElementsByTagName(\"parsererror\")[0];\n\t\tif (!xml || parserErrorElem) {\n\t\t\tjQuery.error(\"Invalid XML: \" + (\n\t\t\t\tparserErrorElem ?\n\t\t\t\t\tjQuery.map(parserErrorElem.childNodes, function (el) {\n\t\t\t\t\t\treturn el.textContent;\n\t\t\t\t\t}).join(\"\\n\") :\n\t\t\t\t\tdata\n\t\t\t));\n\t\t}\n\t\treturn xml;\n\t};\n\n\n\tvar rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,\n\t\tstopPropagationCallback = function (e) {\n\t\t\te.stopPropagation();\n\t\t};\n\n\tjQuery.extend(jQuery.event, {\n\n\t\ttrigger: function (event, data, elem, onlyHandlers) {\n\n\t\t\tvar i, cur, tmp, bubbleType, ontype, handle, special, lastElement,\n\t\t\t\teventPath = [elem || document],\n\t\t\t\ttype = hasOwn.call(event, \"type\") ? event.type : event,\n\t\t\t\tnamespaces = hasOwn.call(event, \"namespace\") ? event.namespace.split(\".\") : [];\n\n\t\t\tcur = lastElement = tmp = elem = elem || document;\n\n\t\t\t// Don't do events on text and comment nodes\n\t\t\tif (elem.nodeType === 3 || elem.nodeType === 8) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// focus/blur morphs to focusin/out; ensure we're not firing them right now\n\t\t\tif (rfocusMorph.test(type + jQuery.event.triggered)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (type.indexOf(\".\") > -1) {\n\n\t\t\t\t// Namespaced trigger; create a regexp to match event type in handle()\n\t\t\t\tnamespaces = type.split(\".\");\n\t\t\t\ttype = namespaces.shift();\n\t\t\t\tnamespaces.sort();\n\t\t\t}\n\t\t\tontype = type.indexOf(\":\") < 0 && \"on\" + type;\n\n\t\t\t// Caller can pass in a jQuery.Event object, Object, or just an event type string\n\t\t\tevent = event[jQuery.expando] ?\n\t\t\t\tevent :\n\t\t\t\tnew jQuery.Event(type, typeof event === \"object\" && event);\n\n\t\t\t// Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)\n\t\t\tevent.isTrigger = onlyHandlers ? 2 : 3;\n\t\t\tevent.namespace = namespaces.join(\".\");\n\t\t\tevent.rnamespace = event.namespace ?\n\t\t\t\tnew RegExp(\"(^|\\\\.)\" + namespaces.join(\"\\\\.(?:.*\\\\.|)\") + \"(\\\\.|$)\") :\n\t\t\t\tnull;\n\n\t\t\t// Clean up the event in case it is being reused\n\t\t\tevent.result = undefined;\n\t\t\tif (!event.target) {\n\t\t\t\tevent.target = elem;\n\t\t\t}\n\n\t\t\t// Clone any incoming data and prepend the event, creating the handler arg list\n\t\t\tdata = data == null ?\n\t\t\t\t[event] :\n\t\t\t\tjQuery.makeArray(data, [event]);\n\n\t\t\t// Allow special events to draw outside the lines\n\t\t\tspecial = jQuery.event.special[type] || {};\n\t\t\tif (!onlyHandlers && special.trigger && special.trigger.apply(elem, data) === false) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Determine event propagation path in advance, per W3C events spec (trac-9951)\n\t\t\t// Bubble up to document, then to window; watch for a global ownerDocument var (trac-9724)\n\t\t\tif (!onlyHandlers && !special.noBubble && !isWindow(elem)) {\n\n\t\t\t\tbubbleType = special.delegateType || type;\n\t\t\t\tif (!rfocusMorph.test(bubbleType + type)) {\n\t\t\t\t\tcur = cur.parentNode;\n\t\t\t\t}\n\t\t\t\tfor (; cur; cur = cur.parentNode) {\n\t\t\t\t\teventPath.push(cur);\n\t\t\t\t\ttmp = cur;\n\t\t\t\t}\n\n\t\t\t\t// Only add window if we got to document (e.g., not plain obj or detached DOM)\n\t\t\t\tif (tmp === (elem.ownerDocument || document)) {\n\t\t\t\t\teventPath.push(tmp.defaultView || tmp.parentWindow || window);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Fire handlers on the event path\n\t\t\ti = 0;\n\t\t\twhile ((cur = eventPath[i++]) && !event.isPropagationStopped()) {\n\t\t\t\tlastElement = cur;\n\t\t\t\tevent.type = i > 1 ?\n\t\t\t\t\tbubbleType :\n\t\t\t\t\tspecial.bindType || type;\n\n\t\t\t\t// jQuery handler\n\t\t\t\thandle = (dataPriv.get(cur, \"events\") || Object.create(null))[event.type] &&\n\t\t\t\t\tdataPriv.get(cur, \"handle\");\n\t\t\t\tif (handle) {\n\t\t\t\t\thandle.apply(cur, data);\n\t\t\t\t}\n\n\t\t\t\t// Native handler\n\t\t\t\thandle = ontype && cur[ontype];\n\t\t\t\tif (handle && handle.apply && acceptData(cur)) {\n\t\t\t\t\tevent.result = handle.apply(cur, data);\n\t\t\t\t\tif (event.result === false) {\n\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tevent.type = type;\n\n\t\t\t// If nobody prevented the default action, do it now\n\t\t\tif (!onlyHandlers && !event.isDefaultPrevented()) {\n\n\t\t\t\tif ((!special._default ||\n\t\t\t\t\tspecial._default.apply(eventPath.pop(), data) === false) &&\n\t\t\t\t\tacceptData(elem)) {\n\n\t\t\t\t\t// Call a native DOM method on the target with the same name as the event.\n\t\t\t\t\t// Don't do default actions on window, that's where global variables be (trac-6170)\n\t\t\t\t\tif (ontype && isFunction(elem[type]) && !isWindow(elem)) {\n\n\t\t\t\t\t\t// Don't re-trigger an onFOO event when we call its FOO() method\n\t\t\t\t\t\ttmp = elem[ontype];\n\n\t\t\t\t\t\tif (tmp) {\n\t\t\t\t\t\t\telem[ontype] = null;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Prevent re-triggering of the same event, since we already bubbled it above\n\t\t\t\t\t\tjQuery.event.triggered = type;\n\n\t\t\t\t\t\tif (event.isPropagationStopped()) {\n\t\t\t\t\t\t\tlastElement.addEventListener(type, stopPropagationCallback);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\telem[type]();\n\n\t\t\t\t\t\tif (event.isPropagationStopped()) {\n\t\t\t\t\t\t\tlastElement.removeEventListener(type, stopPropagationCallback);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tjQuery.event.triggered = undefined;\n\n\t\t\t\t\t\tif (tmp) {\n\t\t\t\t\t\t\telem[ontype] = tmp;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn event.result;\n\t\t},\n\n\t\t// Piggyback on a donor event to simulate a different one\n\t\t// Used only for `focus(in | out)` events\n\t\tsimulate: function (type, elem, event) {\n\t\t\tvar e = jQuery.extend(\n\t\t\t\tnew jQuery.Event(),\n\t\t\t\tevent,\n\t\t\t\t{\n\t\t\t\t\ttype: type,\n\t\t\t\t\tisSimulated: true\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tjQuery.event.trigger(e, null, elem);\n\t\t}\n\n\t});\n\n\tjQuery.fn.extend({\n\n\t\ttrigger: function (type, data) {\n\t\t\treturn this.each(function () {\n\t\t\t\tjQuery.event.trigger(type, data, this);\n\t\t\t});\n\t\t},\n\t\ttriggerHandler: function (type, data) {\n\t\t\tvar elem = this[0];\n\t\t\tif (elem) {\n\t\t\t\treturn jQuery.event.trigger(type, data, elem, true);\n\t\t\t}\n\t\t}\n\t});\n\n\n\tvar\n\t\trbracket = /\\[\\]$/,\n\t\trCRLF = /\\r?\\n/g,\n\t\trsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,\n\t\trsubmittable = /^(?:input|select|textarea|keygen)/i;\n\n\tfunction buildParams(prefix, obj, traditional, add) {\n\t\tvar name;\n\n\t\tif (Array.isArray(obj)) {\n\n\t\t\t// Serialize array item.\n\t\t\tjQuery.each(obj, function (i, v) {\n\t\t\t\tif (traditional || rbracket.test(prefix)) {\n\n\t\t\t\t\t// Treat each array item as a scalar.\n\t\t\t\t\tadd(prefix, v);\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// Item is non-scalar (array or object), encode its numeric index.\n\t\t\t\t\tbuildParams(\n\t\t\t\t\t\tprefix + \"[\" + (typeof v === \"object\" && v != null ? i : \"\") + \"]\",\n\t\t\t\t\t\tv,\n\t\t\t\t\t\ttraditional,\n\t\t\t\t\t\tadd\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t});\n\n\t\t} else if (!traditional && toType(obj) === \"object\") {\n\n\t\t\t// Serialize object item.\n\t\t\tfor (name in obj) {\n\t\t\t\tbuildParams(prefix + \"[\" + name + \"]\", obj[name], traditional, add);\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// Serialize scalar item.\n\t\t\tadd(prefix, obj);\n\t\t}\n\t}\n\n\t// Serialize an array of form elements or a set of\n\t// key/values into a query string\n\tjQuery.param = function (a, traditional) {\n\t\tvar prefix,\n\t\t\ts = [],\n\t\t\tadd = function (key, valueOrFunction) {\n\n\t\t\t\t// If value is a function, invoke it and use its return value\n\t\t\t\tvar value = isFunction(valueOrFunction) ?\n\t\t\t\t\tvalueOrFunction() :\n\t\t\t\t\tvalueOrFunction;\n\n\t\t\t\ts[s.length] = encodeURIComponent(key) + \"=\" +\n\t\t\t\t\tencodeURIComponent(value == null ? \"\" : value);\n\t\t\t};\n\n\t\tif (a == null) {\n\t\t\treturn \"\";\n\t\t}\n\n\t\t// If an array was passed in, assume that it is an array of form elements.\n\t\tif (Array.isArray(a) || (a.jquery && !jQuery.isPlainObject(a))) {\n\n\t\t\t// Serialize the form elements\n\t\t\tjQuery.each(a, function () {\n\t\t\t\tadd(this.name, this.value);\n\t\t\t});\n\n\t\t} else {\n\n\t\t\t// If traditional, encode the \"old\" way (the way 1.3.2 or older\n\t\t\t// did it), otherwise encode params recursively.\n\t\t\tfor (prefix in a) {\n\t\t\t\tbuildParams(prefix, a[prefix], traditional, add);\n\t\t\t}\n\t\t}\n\n\t\t// Return the resulting serialization\n\t\treturn s.join(\"&\");\n\t};\n\n\tjQuery.fn.extend({\n\t\tserialize: function () {\n\t\t\treturn jQuery.param(this.serializeArray());\n\t\t},\n\t\tserializeArray: function () {\n\t\t\treturn this.map(function () {\n\n\t\t\t\t// Can add propHook for \"elements\" to filter or add form elements\n\t\t\t\tvar elements = jQuery.prop(this, \"elements\");\n\t\t\t\treturn elements ? jQuery.makeArray(elements) : this;\n\t\t\t}).filter(function () {\n\t\t\t\tvar type = this.type;\n\n\t\t\t\t// Use .is( \":disabled\" ) so that fieldset[disabled] works\n\t\t\t\treturn this.name && !jQuery(this).is(\":disabled\") &&\n\t\t\t\t\trsubmittable.test(this.nodeName) && !rsubmitterTypes.test(type) &&\n\t\t\t\t\t(this.checked || !rcheckableType.test(type));\n\t\t\t}).map(function (_i, elem) {\n\t\t\t\tvar val = jQuery(this).val();\n\n\t\t\t\tif (val == null) {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\n\t\t\t\tif (Array.isArray(val)) {\n\t\t\t\t\treturn jQuery.map(val, function (val) {\n\t\t\t\t\t\treturn { name: elem.name, value: val.replace(rCRLF, \"\\r\\n\") };\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\treturn { name: elem.name, value: val.replace(rCRLF, \"\\r\\n\") };\n\t\t\t}).get();\n\t\t}\n\t});\n\n\n\tvar\n\t\tr20 = /%20/g,\n\t\trhash = /#.*$/,\n\t\trantiCache = /([?&])_=[^&]*/,\n\t\trheaders = /^(.*?):[ \\t]*([^\\r\\n]*)$/mg,\n\n\t\t// trac-7653, trac-8125, trac-8152: local protocol detection\n\t\trlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,\n\t\trnoContent = /^(?:GET|HEAD)$/,\n\t\trprotocol = /^\\/\\//,\n\n\t\t/* Prefilters\n\t\t * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)\n\t\t * 2) These are called:\n\t\t *    - BEFORE asking for a transport\n\t\t *    - AFTER param serialization (s.data is a string if s.processData is true)\n\t\t * 3) key is the dataType\n\t\t * 4) the catchall symbol \"*\" can be used\n\t\t * 5) execution will start with transport dataType and THEN continue down to \"*\" if needed\n\t\t */\n\t\tprefilters = {},\n\n\t\t/* Transports bindings\n\t\t * 1) key is the dataType\n\t\t * 2) the catchall symbol \"*\" can be used\n\t\t * 3) selection will start with transport dataType and THEN go to \"*\" if needed\n\t\t */\n\t\ttransports = {},\n\n\t\t// Avoid comment-prolog char sequence (trac-10098); must appease lint and evade compression\n\t\tallTypes = \"*/\".concat(\"*\"),\n\n\t\t// Anchor tag for parsing the document origin\n\t\toriginAnchor = document.createElement(\"a\");\n\n\toriginAnchor.href = location.href;\n\n\t// Base \"constructor\" for jQuery.ajaxPrefilter and jQuery.ajaxTransport\n\tfunction addToPrefiltersOrTransports(structure) {\n\n\t\t// dataTypeExpression is optional and defaults to \"*\"\n\t\treturn function (dataTypeExpression, func) {\n\n\t\t\tif (typeof dataTypeExpression !== \"string\") {\n\t\t\t\tfunc = dataTypeExpression;\n\t\t\t\tdataTypeExpression = \"*\";\n\t\t\t}\n\n\t\t\tvar dataType,\n\t\t\t\ti = 0,\n\t\t\t\tdataTypes = dataTypeExpression.toLowerCase().match(rnothtmlwhite) || [];\n\n\t\t\tif (isFunction(func)) {\n\n\t\t\t\t// For each dataType in the dataTypeExpression\n\t\t\t\twhile ((dataType = dataTypes[i++])) {\n\n\t\t\t\t\t// Prepend if requested\n\t\t\t\t\tif (dataType[0] === \"+\") {\n\t\t\t\t\t\tdataType = dataType.slice(1) || \"*\";\n\t\t\t\t\t\t(structure[dataType] = structure[dataType] || []).unshift(func);\n\n\t\t\t\t\t\t// Otherwise append\n\t\t\t\t\t} else {\n\t\t\t\t\t\t(structure[dataType] = structure[dataType] || []).push(func);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n\n\t// Base inspection function for prefilters and transports\n\tfunction inspectPrefiltersOrTransports(structure, options, originalOptions, jqXHR) {\n\n\t\tvar inspected = {},\n\t\t\tseekingTransport = (structure === transports);\n\n\t\tfunction inspect(dataType) {\n\t\t\tvar selected;\n\t\t\tinspected[dataType] = true;\n\t\t\tjQuery.each(structure[dataType] || [], function (_, prefilterOrFactory) {\n\t\t\t\tvar dataTypeOrTransport = prefilterOrFactory(options, originalOptions, jqXHR);\n\t\t\t\tif (typeof dataTypeOrTransport === \"string\" &&\n\t\t\t\t\t!seekingTransport && !inspected[dataTypeOrTransport]) {\n\n\t\t\t\t\toptions.dataTypes.unshift(dataTypeOrTransport);\n\t\t\t\t\tinspect(dataTypeOrTransport);\n\t\t\t\t\treturn false;\n\t\t\t\t} else if (seekingTransport) {\n\t\t\t\t\treturn !(selected = dataTypeOrTransport);\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn selected;\n\t\t}\n\n\t\treturn inspect(options.dataTypes[0]) || !inspected[\"*\"] && inspect(\"*\");\n\t}\n\n\t// A special extend for ajax options\n\t// that takes \"flat\" options (not to be deep extended)\n\t// Fixes trac-9887\n\tfunction ajaxExtend(target, src) {\n\t\tvar key, deep,\n\t\t\tflatOptions = jQuery.ajaxSettings.flatOptions || {};\n\n\t\tfor (key in src) {\n\t\t\tif (src[key] !== undefined) {\n\t\t\t\t(flatOptions[key] ? target : (deep || (deep = {})))[key] = src[key];\n\t\t\t}\n\t\t}\n\t\tif (deep) {\n\t\t\tjQuery.extend(true, target, deep);\n\t\t}\n\n\t\treturn target;\n\t}\n\n\t/* Handles responses to an ajax request:\n\t * - finds the right dataType (mediates between content-type and expected dataType)\n\t * - returns the corresponding response\n\t */\n\tfunction ajaxHandleResponses(s, jqXHR, responses) {\n\n\t\tvar ct, type, finalDataType, firstDataType,\n\t\t\tcontents = s.contents,\n\t\t\tdataTypes = s.dataTypes;\n\n\t\t// Remove auto dataType and get content-type in the process\n\t\twhile (dataTypes[0] === \"*\") {\n\t\t\tdataTypes.shift();\n\t\t\tif (ct === undefined) {\n\t\t\t\tct = s.mimeType || jqXHR.getResponseHeader(\"Content-Type\");\n\t\t\t}\n\t\t}\n\n\t\t// Check if we're dealing with a known content-type\n\t\tif (ct) {\n\t\t\tfor (type in contents) {\n\t\t\t\tif (contents[type] && contents[type].test(ct)) {\n\t\t\t\t\tdataTypes.unshift(type);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Check to see if we have a response for the expected dataType\n\t\tif (dataTypes[0] in responses) {\n\t\t\tfinalDataType = dataTypes[0];\n\t\t} else {\n\n\t\t\t// Try convertible dataTypes\n\t\t\tfor (type in responses) {\n\t\t\t\tif (!dataTypes[0] || s.converters[type + \" \" + dataTypes[0]]) {\n\t\t\t\t\tfinalDataType = type;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (!firstDataType) {\n\t\t\t\t\tfirstDataType = type;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Or just use first one\n\t\t\tfinalDataType = finalDataType || firstDataType;\n\t\t}\n\n\t\t// If we found a dataType\n\t\t// We add the dataType to the list if needed\n\t\t// and return the corresponding response\n\t\tif (finalDataType) {\n\t\t\tif (finalDataType !== dataTypes[0]) {\n\t\t\t\tdataTypes.unshift(finalDataType);\n\t\t\t}\n\t\t\treturn responses[finalDataType];\n\t\t}\n\t}\n\n\t/* Chain conversions given the request and the original response\n\t * Also sets the responseXXX fields on the jqXHR instance\n\t */\n\tfunction ajaxConvert(s, response, jqXHR, isSuccess) {\n\t\tvar conv2, current, conv, tmp, prev,\n\t\t\tconverters = {},\n\n\t\t\t// Work with a copy of dataTypes in case we need to modify it for conversion\n\t\t\tdataTypes = s.dataTypes.slice();\n\n\t\t// Create converters map with lowercased keys\n\t\tif (dataTypes[1]) {\n\t\t\tfor (conv in s.converters) {\n\t\t\t\tconverters[conv.toLowerCase()] = s.converters[conv];\n\t\t\t}\n\t\t}\n\n\t\tcurrent = dataTypes.shift();\n\n\t\t// Convert to each sequential dataType\n\t\twhile (current) {\n\n\t\t\tif (s.responseFields[current]) {\n\t\t\t\tjqXHR[s.responseFields[current]] = response;\n\t\t\t}\n\n\t\t\t// Apply the dataFilter if provided\n\t\t\tif (!prev && isSuccess && s.dataFilter) {\n\t\t\t\tresponse = s.dataFilter(response, s.dataType);\n\t\t\t}\n\n\t\t\tprev = current;\n\t\t\tcurrent = dataTypes.shift();\n\n\t\t\tif (current) {\n\n\t\t\t\t// There's only work to do if current dataType is non-auto\n\t\t\t\tif (current === \"*\") {\n\n\t\t\t\t\tcurrent = prev;\n\n\t\t\t\t\t// Convert response if prev dataType is non-auto and differs from current\n\t\t\t\t} else if (prev !== \"*\" && prev !== current) {\n\n\t\t\t\t\t// Seek a direct converter\n\t\t\t\t\tconv = converters[prev + \" \" + current] || converters[\"* \" + current];\n\n\t\t\t\t\t// If none found, seek a pair\n\t\t\t\t\tif (!conv) {\n\t\t\t\t\t\tfor (conv2 in converters) {\n\n\t\t\t\t\t\t\t// If conv2 outputs current\n\t\t\t\t\t\t\ttmp = conv2.split(\" \");\n\t\t\t\t\t\t\tif (tmp[1] === current) {\n\n\t\t\t\t\t\t\t\t// If prev can be converted to accepted input\n\t\t\t\t\t\t\t\tconv = converters[prev + \" \" + tmp[0]] ||\n\t\t\t\t\t\t\t\t\tconverters[\"* \" + tmp[0]];\n\t\t\t\t\t\t\t\tif (conv) {\n\n\t\t\t\t\t\t\t\t\t// Condense equivalence converters\n\t\t\t\t\t\t\t\t\tif (conv === true) {\n\t\t\t\t\t\t\t\t\t\tconv = converters[conv2];\n\n\t\t\t\t\t\t\t\t\t\t// Otherwise, insert the intermediate dataType\n\t\t\t\t\t\t\t\t\t} else if (converters[conv2] !== true) {\n\t\t\t\t\t\t\t\t\t\tcurrent = tmp[0];\n\t\t\t\t\t\t\t\t\t\tdataTypes.unshift(tmp[1]);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Apply converter (if not an equivalence)\n\t\t\t\t\tif (conv !== true) {\n\n\t\t\t\t\t\t// Unless errors are allowed to bubble, catch and return them\n\t\t\t\t\t\tif (conv && s.throws) {\n\t\t\t\t\t\t\tresponse = conv(response);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\tresponse = conv(response);\n\t\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\tstate: \"parsererror\",\n\t\t\t\t\t\t\t\t\terror: conv ? e : \"No conversion from \" + prev + \" to \" + current\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn { state: \"success\", data: response };\n\t}\n\n\tjQuery.extend({\n\n\t\t// Counter for holding the number of active queries\n\t\tactive: 0,\n\n\t\t// Last-Modified header cache for next request\n\t\tlastModified: {},\n\t\tetag: {},\n\n\t\tajaxSettings: {\n\t\t\turl: location.href,\n\t\t\ttype: \"GET\",\n\t\t\tisLocal: rlocalProtocol.test(location.protocol),\n\t\t\tglobal: true,\n\t\t\tprocessData: true,\n\t\t\tasync: true,\n\t\t\tcontentType: \"application/x-www-form-urlencoded; charset=UTF-8\",\n\n\t\t\t/*\n\t\t\ttimeout: 0,\n\t\t\tdata: null,\n\t\t\tdataType: null,\n\t\t\tusername: null,\n\t\t\tpassword: null,\n\t\t\tcache: null,\n\t\t\tthrows: false,\n\t\t\ttraditional: false,\n\t\t\theaders: {},\n\t\t\t*/\n\n\t\t\taccepts: {\n\t\t\t\t\"*\": allTypes,\n\t\t\t\ttext: \"text/plain\",\n\t\t\t\thtml: \"text/html\",\n\t\t\t\txml: \"application/xml, text/xml\",\n\t\t\t\tjson: \"application/json, text/javascript\"\n\t\t\t},\n\n\t\t\tcontents: {\n\t\t\t\txml: /\\bxml\\b/,\n\t\t\t\thtml: /\\bhtml/,\n\t\t\t\tjson: /\\bjson\\b/\n\t\t\t},\n\n\t\t\tresponseFields: {\n\t\t\t\txml: \"responseXML\",\n\t\t\t\ttext: \"responseText\",\n\t\t\t\tjson: \"responseJSON\"\n\t\t\t},\n\n\t\t\t// Data converters\n\t\t\t// Keys separate source (or catchall \"*\") and destination types with a single space\n\t\t\tconverters: {\n\n\t\t\t\t// Convert anything to text\n\t\t\t\t\"* text\": String,\n\n\t\t\t\t// Text to html (true = no transformation)\n\t\t\t\t\"text html\": true,\n\n\t\t\t\t// Evaluate text as a json expression\n\t\t\t\t\"text json\": JSON.parse,\n\n\t\t\t\t// Parse text as xml\n\t\t\t\t\"text xml\": jQuery.parseXML\n\t\t\t},\n\n\t\t\t// For options that shouldn't be deep extended:\n\t\t\t// you can add your own custom options here if\n\t\t\t// and when you create one that shouldn't be\n\t\t\t// deep extended (see ajaxExtend)\n\t\t\tflatOptions: {\n\t\t\t\turl: true,\n\t\t\t\tcontext: true\n\t\t\t}\n\t\t},\n\n\t\t// Creates a full fledged settings object into target\n\t\t// with both ajaxSettings and settings fields.\n\t\t// If target is omitted, writes into ajaxSettings.\n\t\tajaxSetup: function (target, settings) {\n\t\t\treturn settings ?\n\n\t\t\t\t// Building a settings object\n\t\t\t\tajaxExtend(ajaxExtend(target, jQuery.ajaxSettings), settings) :\n\n\t\t\t\t// Extending ajaxSettings\n\t\t\t\tajaxExtend(jQuery.ajaxSettings, target);\n\t\t},\n\n\t\tajaxPrefilter: addToPrefiltersOrTransports(prefilters),\n\t\tajaxTransport: addToPrefiltersOrTransports(transports),\n\n\t\t// Main method\n\t\tajax: function (url, options) {\n\n\t\t\t// If url is an object, simulate pre-1.5 signature\n\t\t\tif (typeof url === \"object\") {\n\t\t\t\toptions = url;\n\t\t\t\turl = undefined;\n\t\t\t}\n\n\t\t\t// Force options to be an object\n\t\t\toptions = options || {};\n\n\t\t\tvar transport,\n\n\t\t\t\t// URL without anti-cache param\n\t\t\t\tcacheURL,\n\n\t\t\t\t// Response headers\n\t\t\t\tresponseHeadersString,\n\t\t\t\tresponseHeaders,\n\n\t\t\t\t// timeout handle\n\t\t\t\ttimeoutTimer,\n\n\t\t\t\t// Url cleanup var\n\t\t\t\turlAnchor,\n\n\t\t\t\t// Request state (becomes false upon send and true upon completion)\n\t\t\t\tcompleted,\n\n\t\t\t\t// To know if global events are to be dispatched\n\t\t\t\tfireGlobals,\n\n\t\t\t\t// Loop variable\n\t\t\t\ti,\n\n\t\t\t\t// uncached part of the url\n\t\t\t\tuncached,\n\n\t\t\t\t// Create the final options object\n\t\t\t\ts = jQuery.ajaxSetup({}, options),\n\n\t\t\t\t// Callbacks context\n\t\t\t\tcallbackContext = s.context || s,\n\n\t\t\t\t// Context for global events is callbackContext if it is a DOM node or jQuery collection\n\t\t\t\tglobalEventContext = s.context &&\n\t\t\t\t\t(callbackContext.nodeType || callbackContext.jquery) ?\n\t\t\t\t\tjQuery(callbackContext) :\n\t\t\t\t\tjQuery.event,\n\n\t\t\t\t// Deferreds\n\t\t\t\tdeferred = jQuery.Deferred(),\n\t\t\t\tcompleteDeferred = jQuery.Callbacks(\"once memory\"),\n\n\t\t\t\t// Status-dependent callbacks\n\t\t\t\tstatusCode = s.statusCode || {},\n\n\t\t\t\t// Headers (they are sent all at once)\n\t\t\t\trequestHeaders = {},\n\t\t\t\trequestHeadersNames = {},\n\n\t\t\t\t// Default abort message\n\t\t\t\tstrAbort = \"canceled\",\n\n\t\t\t\t// Fake xhr\n\t\t\t\tjqXHR = {\n\t\t\t\t\treadyState: 0,\n\n\t\t\t\t\t// Builds headers hashtable if needed\n\t\t\t\t\tgetResponseHeader: function (key) {\n\t\t\t\t\t\tvar match;\n\t\t\t\t\t\tif (completed) {\n\t\t\t\t\t\t\tif (!responseHeaders) {\n\t\t\t\t\t\t\t\tresponseHeaders = {};\n\t\t\t\t\t\t\t\twhile ((match = rheaders.exec(responseHeadersString))) {\n\t\t\t\t\t\t\t\t\tresponseHeaders[match[1].toLowerCase() + \" \"] =\n\t\t\t\t\t\t\t\t\t\t(responseHeaders[match[1].toLowerCase() + \" \"] || [])\n\t\t\t\t\t\t\t\t\t\t\t.concat(match[2]);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tmatch = responseHeaders[key.toLowerCase() + \" \"];\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn match == null ? null : match.join(\", \");\n\t\t\t\t\t},\n\n\t\t\t\t\t// Raw string\n\t\t\t\t\tgetAllResponseHeaders: function () {\n\t\t\t\t\t\treturn completed ? responseHeadersString : null;\n\t\t\t\t\t},\n\n\t\t\t\t\t// Caches the header\n\t\t\t\t\tsetRequestHeader: function (name, value) {\n\t\t\t\t\t\tif (completed == null) {\n\t\t\t\t\t\t\tname = requestHeadersNames[name.toLowerCase()] =\n\t\t\t\t\t\t\t\trequestHeadersNames[name.toLowerCase()] || name;\n\t\t\t\t\t\t\trequestHeaders[name] = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn this;\n\t\t\t\t\t},\n\n\t\t\t\t\t// Overrides response content-type header\n\t\t\t\t\toverrideMimeType: function (type) {\n\t\t\t\t\t\tif (completed == null) {\n\t\t\t\t\t\t\ts.mimeType = type;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn this;\n\t\t\t\t\t},\n\n\t\t\t\t\t// Status-dependent callbacks\n\t\t\t\t\tstatusCode: function (map) {\n\t\t\t\t\t\tvar code;\n\t\t\t\t\t\tif (map) {\n\t\t\t\t\t\t\tif (completed) {\n\n\t\t\t\t\t\t\t\t// Execute the appropriate callbacks\n\t\t\t\t\t\t\t\tjqXHR.always(map[jqXHR.status]);\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t// Lazy-add the new callbacks in a way that preserves old ones\n\t\t\t\t\t\t\t\tfor (code in map) {\n\t\t\t\t\t\t\t\t\tstatusCode[code] = [statusCode[code], map[code]];\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn this;\n\t\t\t\t\t},\n\n\t\t\t\t\t// Cancel the request\n\t\t\t\t\tabort: function (statusText) {\n\t\t\t\t\t\tvar finalText = statusText || strAbort;\n\t\t\t\t\t\tif (transport) {\n\t\t\t\t\t\t\ttransport.abort(finalText);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdone(0, finalText);\n\t\t\t\t\t\treturn this;\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t// Attach deferreds\n\t\t\tdeferred.promise(jqXHR);\n\n\t\t\t// Add protocol if not provided (prefilters might expect it)\n\t\t\t// Handle falsy url in the settings object (trac-10093: consistency with old signature)\n\t\t\t// We also use the url parameter if available\n\t\t\ts.url = ((url || s.url || location.href) + \"\")\n\t\t\t\t.replace(rprotocol, location.protocol + \"//\");\n\n\t\t\t// Alias method option to type as per ticket trac-12004\n\t\t\ts.type = options.method || options.type || s.method || s.type;\n\n\t\t\t// Extract dataTypes list\n\t\t\ts.dataTypes = (s.dataType || \"*\").toLowerCase().match(rnothtmlwhite) || [\"\"];\n\n\t\t\t// A cross-domain request is in order when the origin doesn't match the current origin.\n\t\t\tif (s.crossDomain == null) {\n\t\t\t\turlAnchor = document.createElement(\"a\");\n\n\t\t\t\t// Support: IE <=8 - 11, Edge 12 - 15\n\t\t\t\t// IE throws exception on accessing the href property if url is malformed,\n\t\t\t\t// e.g. http://example.com:80x/\n\t\t\t\ttry {\n\t\t\t\t\turlAnchor.href = s.url;\n\n\t\t\t\t\t// Support: IE <=8 - 11 only\n\t\t\t\t\t// Anchor's host property isn't correctly set when s.url is relative\n\t\t\t\t\turlAnchor.href = urlAnchor.href;\n\t\t\t\t\ts.crossDomain = originAnchor.protocol + \"//\" + originAnchor.host !==\n\t\t\t\t\t\turlAnchor.protocol + \"//\" + urlAnchor.host;\n\t\t\t\t} catch (e) {\n\n\t\t\t\t\t// If there is an error parsing the URL, assume it is crossDomain,\n\t\t\t\t\t// it can be rejected by the transport if it is invalid\n\t\t\t\t\ts.crossDomain = true;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Convert data if not already a string\n\t\t\tif (s.data && s.processData && typeof s.data !== \"string\") {\n\t\t\t\ts.data = jQuery.param(s.data, s.traditional);\n\t\t\t}\n\n\t\t\t// Apply prefilters\n\t\t\tinspectPrefiltersOrTransports(prefilters, s, options, jqXHR);\n\n\t\t\t// If request was aborted inside a prefilter, stop there\n\t\t\tif (completed) {\n\t\t\t\treturn jqXHR;\n\t\t\t}\n\n\t\t\t// We can fire global events as of now if asked to\n\t\t\t// Don't fire events if jQuery.event is undefined in an AMD-usage scenario (trac-15118)\n\t\t\tfireGlobals = jQuery.event && s.global;\n\n\t\t\t// Watch for a new set of requests\n\t\t\tif (fireGlobals && jQuery.active++ === 0) {\n\t\t\t\tjQuery.event.trigger(\"ajaxStart\");\n\t\t\t}\n\n\t\t\t// Uppercase the type\n\t\t\ts.type = s.type.toUpperCase();\n\n\t\t\t// Determine if request has content\n\t\t\ts.hasContent = !rnoContent.test(s.type);\n\n\t\t\t// Save the URL in case we're toying with the If-Modified-Since\n\t\t\t// and/or If-None-Match header later on\n\t\t\t// Remove hash to simplify url manipulation\n\t\t\tcacheURL = s.url.replace(rhash, \"\");\n\n\t\t\t// More options handling for requests with no content\n\t\t\tif (!s.hasContent) {\n\n\t\t\t\t// Remember the hash so we can put it back\n\t\t\t\tuncached = s.url.slice(cacheURL.length);\n\n\t\t\t\t// If data is available and should be processed, append data to url\n\t\t\t\tif (s.data && (s.processData || typeof s.data === \"string\")) {\n\t\t\t\t\tcacheURL += (rquery.test(cacheURL) ? \"&\" : \"?\") + s.data;\n\n\t\t\t\t\t// trac-9682: remove data so that it's not used in an eventual retry\n\t\t\t\t\tdelete s.data;\n\t\t\t\t}\n\n\t\t\t\t// Add or update anti-cache param if needed\n\t\t\t\tif (s.cache === false) {\n\t\t\t\t\tcacheURL = cacheURL.replace(rantiCache, \"$1\");\n\t\t\t\t\tuncached = (rquery.test(cacheURL) ? \"&\" : \"?\") + \"_=\" + (nonce.guid++) +\n\t\t\t\t\t\tuncached;\n\t\t\t\t}\n\n\t\t\t\t// Put hash and anti-cache on the URL that will be requested (gh-1732)\n\t\t\t\ts.url = cacheURL + uncached;\n\n\t\t\t\t// Change '%20' to '+' if this is encoded form body content (gh-2658)\n\t\t\t} else if (s.data && s.processData &&\n\t\t\t\t(s.contentType || \"\").indexOf(\"application/x-www-form-urlencoded\") === 0) {\n\t\t\t\ts.data = s.data.replace(r20, \"+\");\n\t\t\t}\n\n\t\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\t\tif (s.ifModified) {\n\t\t\t\tif (jQuery.lastModified[cacheURL]) {\n\t\t\t\t\tjqXHR.setRequestHeader(\"If-Modified-Since\", jQuery.lastModified[cacheURL]);\n\t\t\t\t}\n\t\t\t\tif (jQuery.etag[cacheURL]) {\n\t\t\t\t\tjqXHR.setRequestHeader(\"If-None-Match\", jQuery.etag[cacheURL]);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Set the correct header, if data is being sent\n\t\t\tif (s.data && s.hasContent && s.contentType !== false || options.contentType) {\n\t\t\t\tjqXHR.setRequestHeader(\"Content-Type\", s.contentType);\n\t\t\t}\n\n\t\t\t// Set the Accepts header for the server, depending on the dataType\n\t\t\tjqXHR.setRequestHeader(\n\t\t\t\t\"Accept\",\n\t\t\t\ts.dataTypes[0] && s.accepts[s.dataTypes[0]] ?\n\t\t\t\t\ts.accepts[s.dataTypes[0]] +\n\t\t\t\t\t(s.dataTypes[0] !== \"*\" ? \", \" + allTypes + \"; q=0.01\" : \"\") :\n\t\t\t\t\ts.accepts[\"*\"]\n\t\t\t);\n\n\t\t\t// Check for headers option\n\t\t\tfor (i in s.headers) {\n\t\t\t\tjqXHR.setRequestHeader(i, s.headers[i]);\n\t\t\t}\n\n\t\t\t// Allow custom headers/mimetypes and early abort\n\t\t\tif (s.beforeSend &&\n\t\t\t\t(s.beforeSend.call(callbackContext, jqXHR, s) === false || completed)) {\n\n\t\t\t\t// Abort if not done already and return\n\t\t\t\treturn jqXHR.abort();\n\t\t\t}\n\n\t\t\t// Aborting is no longer a cancellation\n\t\t\tstrAbort = \"abort\";\n\n\t\t\t// Install callbacks on deferreds\n\t\t\tcompleteDeferred.add(s.complete);\n\t\t\tjqXHR.done(s.success);\n\t\t\tjqXHR.fail(s.error);\n\n\t\t\t// Get transport\n\t\t\ttransport = inspectPrefiltersOrTransports(transports, s, options, jqXHR);\n\n\t\t\t// If no transport, we auto-abort\n\t\t\tif (!transport) {\n\t\t\t\tdone(-1, \"No Transport\");\n\t\t\t} else {\n\t\t\t\tjqXHR.readyState = 1;\n\n\t\t\t\t// Send global event\n\t\t\t\tif (fireGlobals) {\n\t\t\t\t\tglobalEventContext.trigger(\"ajaxSend\", [jqXHR, s]);\n\t\t\t\t}\n\n\t\t\t\t// If request was aborted inside ajaxSend, stop there\n\t\t\t\tif (completed) {\n\t\t\t\t\treturn jqXHR;\n\t\t\t\t}\n\n\t\t\t\t// Timeout\n\t\t\t\tif (s.async && s.timeout > 0) {\n\t\t\t\t\ttimeoutTimer = window.setTimeout(function () {\n\t\t\t\t\t\tjqXHR.abort(\"timeout\");\n\t\t\t\t\t}, s.timeout);\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tcompleted = false;\n\t\t\t\t\ttransport.send(requestHeaders, done);\n\t\t\t\t} catch (e) {\n\n\t\t\t\t\t// Rethrow post-completion exceptions\n\t\t\t\t\tif (completed) {\n\t\t\t\t\t\tthrow e;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Propagate others as results\n\t\t\t\t\tdone(-1, e);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Callback for when everything is done\n\t\t\tfunction done(status, nativeStatusText, responses, headers) {\n\t\t\t\tvar isSuccess, success, error, response, modified,\n\t\t\t\t\tstatusText = nativeStatusText;\n\n\t\t\t\t// Ignore repeat invocations\n\t\t\t\tif (completed) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tcompleted = true;\n\n\t\t\t\t// Clear timeout if it exists\n\t\t\t\tif (timeoutTimer) {\n\t\t\t\t\twindow.clearTimeout(timeoutTimer);\n\t\t\t\t}\n\n\t\t\t\t// Dereference transport for early garbage collection\n\t\t\t\t// (no matter how long the jqXHR object will be used)\n\t\t\t\ttransport = undefined;\n\n\t\t\t\t// Cache response headers\n\t\t\t\tresponseHeadersString = headers || \"\";\n\n\t\t\t\t// Set readyState\n\t\t\t\tjqXHR.readyState = status > 0 ? 4 : 0;\n\n\t\t\t\t// Determine if successful\n\t\t\t\tisSuccess = status >= 200 && status < 300 || status === 304;\n\n\t\t\t\t// Get response data\n\t\t\t\tif (responses) {\n\t\t\t\t\tresponse = ajaxHandleResponses(s, jqXHR, responses);\n\t\t\t\t}\n\n\t\t\t\t// Use a noop converter for missing script but not if jsonp\n\t\t\t\tif (!isSuccess &&\n\t\t\t\t\tjQuery.inArray(\"script\", s.dataTypes) > -1 &&\n\t\t\t\t\tjQuery.inArray(\"json\", s.dataTypes) < 0) {\n\t\t\t\t\ts.converters[\"text script\"] = function () { };\n\t\t\t\t}\n\n\t\t\t\t// Convert no matter what (that way responseXXX fields are always set)\n\t\t\t\tresponse = ajaxConvert(s, response, jqXHR, isSuccess);\n\n\t\t\t\t// If successful, handle type chaining\n\t\t\t\tif (isSuccess) {\n\n\t\t\t\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\t\t\t\tif (s.ifModified) {\n\t\t\t\t\t\tmodified = jqXHR.getResponseHeader(\"Last-Modified\");\n\t\t\t\t\t\tif (modified) {\n\t\t\t\t\t\t\tjQuery.lastModified[cacheURL] = modified;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmodified = jqXHR.getResponseHeader(\"etag\");\n\t\t\t\t\t\tif (modified) {\n\t\t\t\t\t\t\tjQuery.etag[cacheURL] = modified;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// if no content\n\t\t\t\t\tif (status === 204 || s.type === \"HEAD\") {\n\t\t\t\t\t\tstatusText = \"nocontent\";\n\n\t\t\t\t\t\t// if not modified\n\t\t\t\t\t} else if (status === 304) {\n\t\t\t\t\t\tstatusText = \"notmodified\";\n\n\t\t\t\t\t\t// If we have data, let's convert it\n\t\t\t\t\t} else {\n\t\t\t\t\t\tstatusText = response.state;\n\t\t\t\t\t\tsuccess = response.data;\n\t\t\t\t\t\terror = response.error;\n\t\t\t\t\t\tisSuccess = !error;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\n\t\t\t\t\t// Extract error from statusText and normalize for non-aborts\n\t\t\t\t\terror = statusText;\n\t\t\t\t\tif (status || !statusText) {\n\t\t\t\t\t\tstatusText = \"error\";\n\t\t\t\t\t\tif (status < 0) {\n\t\t\t\t\t\t\tstatus = 0;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Set data for the fake xhr object\n\t\t\t\tjqXHR.status = status;\n\t\t\t\tjqXHR.statusText = (nativeStatusText || statusText) + \"\";\n\n\t\t\t\t// Success/Error\n\t\t\t\tif (isSuccess) {\n\t\t\t\t\tdeferred.resolveWith(callbackContext, [success, statusText, jqXHR]);\n\t\t\t\t} else {\n\t\t\t\t\tdeferred.rejectWith(callbackContext, [jqXHR, statusText, error]);\n\t\t\t\t}\n\n\t\t\t\t// Status-dependent callbacks\n\t\t\t\tjqXHR.statusCode(statusCode);\n\t\t\t\tstatusCode = undefined;\n\n\t\t\t\tif (fireGlobals) {\n\t\t\t\t\tglobalEventContext.trigger(isSuccess ? \"ajaxSuccess\" : \"ajaxError\",\n\t\t\t\t\t\t[jqXHR, s, isSuccess ? success : error]);\n\t\t\t\t}\n\n\t\t\t\t// Complete\n\t\t\t\tcompleteDeferred.fireWith(callbackContext, [jqXHR, statusText]);\n\n\t\t\t\tif (fireGlobals) {\n\t\t\t\t\tglobalEventContext.trigger(\"ajaxComplete\", [jqXHR, s]);\n\n\t\t\t\t\t// Handle the global AJAX counter\n\t\t\t\t\tif (!(--jQuery.active)) {\n\t\t\t\t\t\tjQuery.event.trigger(\"ajaxStop\");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn jqXHR;\n\t\t},\n\n\t\tgetJSON: function (url, data, callback) {\n\t\t\treturn jQuery.get(url, data, callback, \"json\");\n\t\t},\n\n\t\tgetScript: function (url, callback) {\n\t\t\treturn jQuery.get(url, undefined, callback, \"script\");\n\t\t}\n\t});\n\n\tjQuery.each([\"get\", \"post\"], function (_i, method) {\n\t\tjQuery[method] = function (url, data, callback, type) {\n\n\t\t\t// Shift arguments if data argument was omitted\n\t\t\tif (isFunction(data)) {\n\t\t\t\ttype = type || callback;\n\t\t\t\tcallback = data;\n\t\t\t\tdata = undefined;\n\t\t\t}\n\n\t\t\t// The url can be an options object (which then must have .url)\n\t\t\treturn jQuery.ajax(jQuery.extend({\n\t\t\t\turl: url,\n\t\t\t\ttype: method,\n\t\t\t\tdataType: type,\n\t\t\t\tdata: data,\n\t\t\t\tsuccess: callback\n\t\t\t}, jQuery.isPlainObject(url) && url));\n\t\t};\n\t});\n\n\tjQuery.ajaxPrefilter(function (s) {\n\t\tvar i;\n\t\tfor (i in s.headers) {\n\t\t\tif (i.toLowerCase() === \"content-type\") {\n\t\t\t\ts.contentType = s.headers[i] || \"\";\n\t\t\t}\n\t\t}\n\t});\n\n\n\tjQuery._evalUrl = function (url, options, doc) {\n\t\treturn jQuery.ajax({\n\t\t\turl: url,\n\n\t\t\t// Make this explicit, since user can override this through ajaxSetup (trac-11264)\n\t\t\ttype: \"GET\",\n\t\t\tdataType: \"script\",\n\t\t\tcache: true,\n\t\t\tasync: false,\n\t\t\tglobal: false,\n\n\t\t\t// Only evaluate the response if it is successful (gh-4126)\n\t\t\t// dataFilter is not invoked for failure responses, so using it instead\n\t\t\t// of the default converter is kludgy but it works.\n\t\t\tconverters: {\n\t\t\t\t\"text script\": function () { }\n\t\t\t},\n\t\t\tdataFilter: function (response) {\n\t\t\t\tjQuery.globalEval(response, options, doc);\n\t\t\t}\n\t\t});\n\t};\n\n\n\tjQuery.fn.extend({\n\t\twrapAll: function (html) {\n\t\t\tvar wrap;\n\n\t\t\tif (this[0]) {\n\t\t\t\tif (isFunction(html)) {\n\t\t\t\t\thtml = html.call(this[0]);\n\t\t\t\t}\n\n\t\t\t\t// The elements to wrap the target around\n\t\t\t\twrap = jQuery(html, this[0].ownerDocument).eq(0).clone(true);\n\n\t\t\t\tif (this[0].parentNode) {\n\t\t\t\t\twrap.insertBefore(this[0]);\n\t\t\t\t}\n\n\t\t\t\twrap.map(function () {\n\t\t\t\t\tvar elem = this;\n\n\t\t\t\t\twhile (elem.firstElementChild) {\n\t\t\t\t\t\telem = elem.firstElementChild;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn elem;\n\t\t\t\t}).append(this);\n\t\t\t}\n\n\t\t\treturn this;\n\t\t},\n\n\t\twrapInner: function (html) {\n\t\t\tif (isFunction(html)) {\n\t\t\t\treturn this.each(function (i) {\n\t\t\t\t\tjQuery(this).wrapInner(html.call(this, i));\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn this.each(function () {\n\t\t\t\tvar self = jQuery(this),\n\t\t\t\t\tcontents = self.contents();\n\n\t\t\t\tif (contents.length) {\n\t\t\t\t\tcontents.wrapAll(html);\n\n\t\t\t\t} else {\n\t\t\t\t\tself.append(html);\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\twrap: function (html) {\n\t\t\tvar htmlIsFunction = isFunction(html);\n\n\t\t\treturn this.each(function (i) {\n\t\t\t\tjQuery(this).wrapAll(htmlIsFunction ? html.call(this, i) : html);\n\t\t\t});\n\t\t},\n\n\t\tunwrap: function (selector) {\n\t\t\tthis.parent(selector).not(\"body\").each(function () {\n\t\t\t\tjQuery(this).replaceWith(this.childNodes);\n\t\t\t});\n\t\t\treturn this;\n\t\t}\n\t});\n\n\n\tjQuery.expr.pseudos.hidden = function (elem) {\n\t\treturn !jQuery.expr.pseudos.visible(elem);\n\t};\n\tjQuery.expr.pseudos.visible = function (elem) {\n\t\treturn !!(elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length);\n\t};\n\n\n\n\n\tjQuery.ajaxSettings.xhr = function () {\n\t\ttry {\n\t\t\treturn new window.XMLHttpRequest();\n\t\t} catch (e) { }\n\t};\n\n\tvar xhrSuccessStatus = {\n\n\t\t// File protocol always yields status code 0, assume 200\n\t\t0: 200,\n\n\t\t// Support: IE <=9 only\n\t\t// trac-1450: sometimes IE returns 1223 when it should be 204\n\t\t1223: 204\n\t},\n\t\txhrSupported = jQuery.ajaxSettings.xhr();\n\n\tsupport.cors = !!xhrSupported && (\"withCredentials\" in xhrSupported);\n\tsupport.ajax = xhrSupported = !!xhrSupported;\n\n\tjQuery.ajaxTransport(function (options) {\n\t\tvar callback, errorCallback;\n\n\t\t// Cross domain only allowed if supported through XMLHttpRequest\n\t\tif (support.cors || xhrSupported && !options.crossDomain) {\n\t\t\treturn {\n\t\t\t\tsend: function (headers, complete) {\n\t\t\t\t\tvar i,\n\t\t\t\t\t\txhr = options.xhr();\n\n\t\t\t\t\txhr.open(\n\t\t\t\t\t\toptions.type,\n\t\t\t\t\t\toptions.url,\n\t\t\t\t\t\toptions.async,\n\t\t\t\t\t\toptions.username,\n\t\t\t\t\t\toptions.password\n\t\t\t\t\t);\n\n\t\t\t\t\t// Apply custom fields if provided\n\t\t\t\t\tif (options.xhrFields) {\n\t\t\t\t\t\tfor (i in options.xhrFields) {\n\t\t\t\t\t\t\txhr[i] = options.xhrFields[i];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Override mime type if needed\n\t\t\t\t\tif (options.mimeType && xhr.overrideMimeType) {\n\t\t\t\t\t\txhr.overrideMimeType(options.mimeType);\n\t\t\t\t\t}\n\n\t\t\t\t\t// X-Requested-With header\n\t\t\t\t\t// For cross-domain requests, seeing as conditions for a preflight are\n\t\t\t\t\t// akin to a jigsaw puzzle, we simply never set it to be sure.\n\t\t\t\t\t// (it can always be set on a per-request basis or even using ajaxSetup)\n\t\t\t\t\t// For same-domain requests, won't change header if already provided.\n\t\t\t\t\tif (!options.crossDomain && !headers[\"X-Requested-With\"]) {\n\t\t\t\t\t\theaders[\"X-Requested-With\"] = \"XMLHttpRequest\";\n\t\t\t\t\t}\n\n\t\t\t\t\t// Set headers\n\t\t\t\t\tfor (i in headers) {\n\t\t\t\t\t\txhr.setRequestHeader(i, headers[i]);\n\t\t\t\t\t}\n\n\t\t\t\t\t// Callback\n\t\t\t\t\tcallback = function (type) {\n\t\t\t\t\t\treturn function () {\n\t\t\t\t\t\t\tif (callback) {\n\t\t\t\t\t\t\t\tcallback = errorCallback = xhr.onload =\n\t\t\t\t\t\t\t\t\txhr.onerror = xhr.onabort = xhr.ontimeout =\n\t\t\t\t\t\t\t\t\txhr.onreadystatechange = null;\n\n\t\t\t\t\t\t\t\tif (type === \"abort\") {\n\t\t\t\t\t\t\t\t\txhr.abort();\n\t\t\t\t\t\t\t\t} else if (type === \"error\") {\n\n\t\t\t\t\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t\t\t\t\t// On a manual native abort, IE9 throws\n\t\t\t\t\t\t\t\t\t// errors on any property access that is not readyState\n\t\t\t\t\t\t\t\t\tif (typeof xhr.status !== \"number\") {\n\t\t\t\t\t\t\t\t\t\tcomplete(0, \"error\");\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tcomplete(\n\n\t\t\t\t\t\t\t\t\t\t\t// File: protocol always yields status 0; see trac-8605, trac-14207\n\t\t\t\t\t\t\t\t\t\t\txhr.status,\n\t\t\t\t\t\t\t\t\t\t\txhr.statusText\n\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tcomplete(\n\t\t\t\t\t\t\t\t\t\txhrSuccessStatus[xhr.status] || xhr.status,\n\t\t\t\t\t\t\t\t\t\txhr.statusText,\n\n\t\t\t\t\t\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t\t\t\t\t\t// IE9 has no XHR2 but throws on binary (trac-11426)\n\t\t\t\t\t\t\t\t\t\t// For XHR2 non-text, let the caller handle it (gh-2498)\n\t\t\t\t\t\t\t\t\t\t(xhr.responseType || \"text\") !== \"text\" ||\n\t\t\t\t\t\t\t\t\t\t\ttypeof xhr.responseText !== \"string\" ?\n\t\t\t\t\t\t\t\t\t\t\t{ binary: xhr.response } :\n\t\t\t\t\t\t\t\t\t\t\t{ text: xhr.responseText },\n\t\t\t\t\t\t\t\t\t\txhr.getAllResponseHeaders()\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\t\t\t\t\t};\n\n\t\t\t\t\t// Listen to events\n\t\t\t\t\txhr.onload = callback();\n\t\t\t\t\terrorCallback = xhr.onerror = xhr.ontimeout = callback(\"error\");\n\n\t\t\t\t\t// Support: IE 9 only\n\t\t\t\t\t// Use onreadystatechange to replace onabort\n\t\t\t\t\t// to handle uncaught aborts\n\t\t\t\t\tif (xhr.onabort !== undefined) {\n\t\t\t\t\t\txhr.onabort = errorCallback;\n\t\t\t\t\t} else {\n\t\t\t\t\t\txhr.onreadystatechange = function () {\n\n\t\t\t\t\t\t\t// Check readyState before timeout as it changes\n\t\t\t\t\t\t\tif (xhr.readyState === 4) {\n\n\t\t\t\t\t\t\t\t// Allow onerror to be called first,\n\t\t\t\t\t\t\t\t// but that will not handle a native abort\n\t\t\t\t\t\t\t\t// Also, save errorCallback to a variable\n\t\t\t\t\t\t\t\t// as xhr.onerror cannot be accessed\n\t\t\t\t\t\t\t\twindow.setTimeout(function () {\n\t\t\t\t\t\t\t\t\tif (callback) {\n\t\t\t\t\t\t\t\t\t\terrorCallback();\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\t// Create the abort callback\n\t\t\t\t\tcallback = callback(\"abort\");\n\n\t\t\t\t\ttry {\n\n\t\t\t\t\t\t// Do send the request (this may raise an exception)\n\t\t\t\t\t\txhr.send(options.hasContent && options.data || null);\n\t\t\t\t\t} catch (e) {\n\n\t\t\t\t\t\t// trac-14683: Only rethrow if this hasn't been notified as an error yet\n\t\t\t\t\t\tif (callback) {\n\t\t\t\t\t\t\tthrow e;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\t\tabort: function () {\n\t\t\t\t\tif (callback) {\n\t\t\t\t\t\tcallback();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t});\n\n\n\n\n\t// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432)\n\tjQuery.ajaxPrefilter(function (s) {\n\t\tif (s.crossDomain) {\n\t\t\ts.contents.script = false;\n\t\t}\n\t});\n\n\t// Install script dataType\n\tjQuery.ajaxSetup({\n\t\taccepts: {\n\t\t\tscript: \"text/javascript, application/javascript, \" +\n\t\t\t\t\"application/ecmascript, application/x-ecmascript\"\n\t\t},\n\t\tcontents: {\n\t\t\tscript: /\\b(?:java|ecma)script\\b/\n\t\t},\n\t\tconverters: {\n\t\t\t\"text script\": function (text) {\n\t\t\t\tjQuery.globalEval(text);\n\t\t\t\treturn text;\n\t\t\t}\n\t\t}\n\t});\n\n\t// Handle cache's special case and crossDomain\n\tjQuery.ajaxPrefilter(\"script\", function (s) {\n\t\tif (s.cache === undefined) {\n\t\t\ts.cache = false;\n\t\t}\n\t\tif (s.crossDomain) {\n\t\t\ts.type = \"GET\";\n\t\t}\n\t});\n\n\t// Bind script tag hack transport\n\tjQuery.ajaxTransport(\"script\", function (s) {\n\n\t\t// This transport only deals with cross domain or forced-by-attrs requests\n\t\tif (s.crossDomain || s.scriptAttrs) {\n\t\t\tvar script, callback;\n\t\t\treturn {\n\t\t\t\tsend: function (_, complete) {\n\t\t\t\t\tscript = jQuery(\"<script>\")\n\t\t\t\t\t\t.attr(s.scriptAttrs || {})\n\t\t\t\t\t\t.prop({ charset: s.scriptCharset, src: s.url })\n\t\t\t\t\t\t.on(\"load error\", callback = function (evt) {\n\t\t\t\t\t\t\tscript.remove();\n\t\t\t\t\t\t\tcallback = null;\n\t\t\t\t\t\t\tif (evt) {\n\t\t\t\t\t\t\t\tcomplete(evt.type === \"error\" ? 404 : 200, evt.type);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\n\t\t\t\t\t// Use native DOM manipulation to avoid our domManip AJAX trickery\n\t\t\t\t\tdocument.head.appendChild(script[0]);\n\t\t\t\t},\n\t\t\t\tabort: function () {\n\t\t\t\t\tif (callback) {\n\t\t\t\t\t\tcallback();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t});\n\n\n\n\n\tvar oldCallbacks = [],\n\t\trjsonp = /(=)\\?(?=&|$)|\\?\\?/;\n\n\t// Default jsonp settings\n\tjQuery.ajaxSetup({\n\t\tjsonp: \"callback\",\n\t\tjsonpCallback: function () {\n\t\t\tvar callback = oldCallbacks.pop() || (jQuery.expando + \"_\" + (nonce.guid++));\n\t\t\tthis[callback] = true;\n\t\t\treturn callback;\n\t\t}\n\t});\n\n\t// Detect, normalize options and install callbacks for jsonp requests\n\tjQuery.ajaxPrefilter(\"json jsonp\", function (s, originalSettings, jqXHR) {\n\n\t\tvar callbackName, overwritten, responseContainer,\n\t\t\tjsonProp = s.jsonp !== false && (rjsonp.test(s.url) ?\n\t\t\t\t\"url\" :\n\t\t\t\ttypeof s.data === \"string\" &&\n\t\t\t\t(s.contentType || \"\")\n\t\t\t\t\t.indexOf(\"application/x-www-form-urlencoded\") === 0 &&\n\t\t\t\trjsonp.test(s.data) && \"data\"\n\t\t\t);\n\n\t\t// Handle iff the expected data type is \"jsonp\" or we have a parameter to set\n\t\tif (jsonProp || s.dataTypes[0] === \"jsonp\") {\n\n\t\t\t// Get callback name, remembering preexisting value associated with it\n\t\t\tcallbackName = s.jsonpCallback = isFunction(s.jsonpCallback) ?\n\t\t\t\ts.jsonpCallback() :\n\t\t\t\ts.jsonpCallback;\n\n\t\t\t// Insert callback into url or form data\n\t\t\tif (jsonProp) {\n\t\t\t\ts[jsonProp] = s[jsonProp].replace(rjsonp, \"$1\" + callbackName);\n\t\t\t} else if (s.jsonp !== false) {\n\t\t\t\ts.url += (rquery.test(s.url) ? \"&\" : \"?\") + s.jsonp + \"=\" + callbackName;\n\t\t\t}\n\n\t\t\t// Use data converter to retrieve json after script execution\n\t\t\ts.converters[\"script json\"] = function () {\n\t\t\t\tif (!responseContainer) {\n\t\t\t\t\tjQuery.error(callbackName + \" was not called\");\n\t\t\t\t}\n\t\t\t\treturn responseContainer[0];\n\t\t\t};\n\n\t\t\t// Force json dataType\n\t\t\ts.dataTypes[0] = \"json\";\n\n\t\t\t// Install callback\n\t\t\toverwritten = window[callbackName];\n\t\t\twindow[callbackName] = function () {\n\t\t\t\tresponseContainer = arguments;\n\t\t\t};\n\n\t\t\t// Clean-up function (fires after converters)\n\t\t\tjqXHR.always(function () {\n\n\t\t\t\t// If previous value didn't exist - remove it\n\t\t\t\tif (overwritten === undefined) {\n\t\t\t\t\tjQuery(window).removeProp(callbackName);\n\n\t\t\t\t\t// Otherwise restore preexisting value\n\t\t\t\t} else {\n\t\t\t\t\twindow[callbackName] = overwritten;\n\t\t\t\t}\n\n\t\t\t\t// Save back as free\n\t\t\t\tif (s[callbackName]) {\n\n\t\t\t\t\t// Make sure that re-using the options doesn't screw things around\n\t\t\t\t\ts.jsonpCallback = originalSettings.jsonpCallback;\n\n\t\t\t\t\t// Save the callback name for future use\n\t\t\t\t\toldCallbacks.push(callbackName);\n\t\t\t\t}\n\n\t\t\t\t// Call if it was a function and we have a response\n\t\t\t\tif (responseContainer && isFunction(overwritten)) {\n\t\t\t\t\toverwritten(responseContainer[0]);\n\t\t\t\t}\n\n\t\t\t\tresponseContainer = overwritten = undefined;\n\t\t\t});\n\n\t\t\t// Delegate to script\n\t\t\treturn \"script\";\n\t\t}\n\t});\n\n\n\n\n\t// Support: Safari 8 only\n\t// In Safari 8 documents created via document.implementation.createHTMLDocument\n\t// collapse sibling forms: the second one becomes a child of the first one.\n\t// Because of that, this security measure has to be disabled in Safari 8.\n\t// https://bugs.webkit.org/show_bug.cgi?id=137337\n\tsupport.createHTMLDocument = (function () {\n\t\tvar body = document.implementation.createHTMLDocument(\"\").body;\n\t\tbody.innerHTML = \"<form></form><form></form>\";\n\t\treturn body.childNodes.length === 2;\n\t})();\n\n\n\t// Argument \"data\" should be string of html\n\t// context (optional): If specified, the fragment will be created in this context,\n\t// defaults to document\n\t// keepScripts (optional): If true, will include scripts passed in the html string\n\tjQuery.parseHTML = function (data, context, keepScripts) {\n\t\tif (typeof data !== \"string\") {\n\t\t\treturn [];\n\t\t}\n\t\tif (typeof context === \"boolean\") {\n\t\t\tkeepScripts = context;\n\t\t\tcontext = false;\n\t\t}\n\n\t\tvar base, parsed, scripts;\n\n\t\tif (!context) {\n\n\t\t\t// Stop scripts or inline event handlers from being executed immediately\n\t\t\t// by using document.implementation\n\t\t\tif (support.createHTMLDocument) {\n\t\t\t\tcontext = document.implementation.createHTMLDocument(\"\");\n\n\t\t\t\t// Set the base href for the created document\n\t\t\t\t// so any parsed elements with URLs\n\t\t\t\t// are based on the document's URL (gh-2965)\n\t\t\t\tbase = context.createElement(\"base\");\n\t\t\t\tbase.href = document.location.href;\n\t\t\t\tcontext.head.appendChild(base);\n\t\t\t} else {\n\t\t\t\tcontext = document;\n\t\t\t}\n\t\t}\n\n\t\tparsed = rsingleTag.exec(data);\n\t\tscripts = !keepScripts && [];\n\n\t\t// Single tag\n\t\tif (parsed) {\n\t\t\treturn [context.createElement(parsed[1])];\n\t\t}\n\n\t\tparsed = buildFragment([data], context, scripts);\n\n\t\tif (scripts && scripts.length) {\n\t\t\tjQuery(scripts).remove();\n\t\t}\n\n\t\treturn jQuery.merge([], parsed.childNodes);\n\t};\n\n\n\t/**\n\t * Load a url into a page\n\t */\n\tjQuery.fn.load = function (url, params, callback) {\n\t\tvar selector, type, response,\n\t\t\tself = this,\n\t\t\toff = url.indexOf(\" \");\n\n\t\tif (off > -1) {\n\t\t\tselector = stripAndCollapse(url.slice(off));\n\t\t\turl = url.slice(0, off);\n\t\t}\n\n\t\t// If it's a function\n\t\tif (isFunction(params)) {\n\n\t\t\t// We assume that it's the callback\n\t\t\tcallback = params;\n\t\t\tparams = undefined;\n\n\t\t\t// Otherwise, build a param string\n\t\t} else if (params && typeof params === \"object\") {\n\t\t\ttype = \"POST\";\n\t\t}\n\n\t\t// If we have elements to modify, make the request\n\t\tif (self.length > 0) {\n\t\t\tjQuery.ajax({\n\t\t\t\turl: url,\n\n\t\t\t\t// If \"type\" variable is undefined, then \"GET\" method will be used.\n\t\t\t\t// Make value of this field explicit since\n\t\t\t\t// user can override it through ajaxSetup method\n\t\t\t\ttype: type || \"GET\",\n\t\t\t\tdataType: \"html\",\n\t\t\t\tdata: params\n\t\t\t}).done(function (responseText) {\n\n\t\t\t\t// Save response for use in complete callback\n\t\t\t\tresponse = arguments;\n\n\t\t\t\tself.html(selector ?\n\n\t\t\t\t\t// If a selector was specified, locate the right elements in a dummy div\n\t\t\t\t\t// Exclude scripts to avoid IE 'Permission Denied' errors\n\t\t\t\t\tjQuery(\"<div>\").append(jQuery.parseHTML(responseText)).find(selector) :\n\n\t\t\t\t\t// Otherwise use the full result\n\t\t\t\t\tresponseText);\n\n\t\t\t\t// If the request succeeds, this function gets \"data\", \"status\", \"jqXHR\"\n\t\t\t\t// but they are ignored because response was set above.\n\t\t\t\t// If it fails, this function gets \"jqXHR\", \"status\", \"error\"\n\t\t\t}).always(callback && function (jqXHR, status) {\n\t\t\t\tself.each(function () {\n\t\t\t\t\tcallback.apply(this, response || [jqXHR.responseText, status, jqXHR]);\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\n\t\treturn this;\n\t};\n\n\n\n\n\tjQuery.expr.pseudos.animated = function (elem) {\n\t\treturn jQuery.grep(jQuery.timers, function (fn) {\n\t\t\treturn elem === fn.elem;\n\t\t}).length;\n\t};\n\n\n\n\n\tjQuery.offset = {\n\t\tsetOffset: function (elem, options, i) {\n\t\t\tvar curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition,\n\t\t\t\tposition = jQuery.css(elem, \"position\"),\n\t\t\t\tcurElem = jQuery(elem),\n\t\t\t\tprops = {};\n\n\t\t\t// Set position first, in-case top/left are set even on static elem\n\t\t\tif (position === \"static\") {\n\t\t\t\telem.style.position = \"relative\";\n\t\t\t}\n\n\t\t\tcurOffset = curElem.offset();\n\t\t\tcurCSSTop = jQuery.css(elem, \"top\");\n\t\t\tcurCSSLeft = jQuery.css(elem, \"left\");\n\t\t\tcalculatePosition = (position === \"absolute\" || position === \"fixed\") &&\n\t\t\t\t(curCSSTop + curCSSLeft).indexOf(\"auto\") > -1;\n\n\t\t\t// Need to be able to calculate position if either\n\t\t\t// top or left is auto and position is either absolute or fixed\n\t\t\tif (calculatePosition) {\n\t\t\t\tcurPosition = curElem.position();\n\t\t\t\tcurTop = curPosition.top;\n\t\t\t\tcurLeft = curPosition.left;\n\n\t\t\t} else {\n\t\t\t\tcurTop = parseFloat(curCSSTop) || 0;\n\t\t\t\tcurLeft = parseFloat(curCSSLeft) || 0;\n\t\t\t}\n\n\t\t\tif (isFunction(options)) {\n\n\t\t\t\t// Use jQuery.extend here to allow modification of coordinates argument (gh-1848)\n\t\t\t\toptions = options.call(elem, i, jQuery.extend({}, curOffset));\n\t\t\t}\n\n\t\t\tif (options.top != null) {\n\t\t\t\tprops.top = (options.top - curOffset.top) + curTop;\n\t\t\t}\n\t\t\tif (options.left != null) {\n\t\t\t\tprops.left = (options.left - curOffset.left) + curLeft;\n\t\t\t}\n\n\t\t\tif (\"using\" in options) {\n\t\t\t\toptions.using.call(elem, props);\n\n\t\t\t} else {\n\t\t\t\tcurElem.css(props);\n\t\t\t}\n\t\t}\n\t};\n\n\tjQuery.fn.extend({\n\n\t\t// offset() relates an element's border box to the document origin\n\t\toffset: function (options) {\n\n\t\t\t// Preserve chaining for setter\n\t\t\tif (arguments.length) {\n\t\t\t\treturn options === undefined ?\n\t\t\t\t\tthis :\n\t\t\t\t\tthis.each(function (i) {\n\t\t\t\t\t\tjQuery.offset.setOffset(this, options, i);\n\t\t\t\t\t});\n\t\t\t}\n\n\t\t\tvar rect, win,\n\t\t\t\telem = this[0];\n\n\t\t\tif (!elem) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Return zeros for disconnected and hidden (display: none) elements (gh-2310)\n\t\t\t// Support: IE <=11 only\n\t\t\t// Running getBoundingClientRect on a\n\t\t\t// disconnected node in IE throws an error\n\t\t\tif (!elem.getClientRects().length) {\n\t\t\t\treturn { top: 0, left: 0 };\n\t\t\t}\n\n\t\t\t// Get document-relative position by adding viewport scroll to viewport-relative gBCR\n\t\t\trect = elem.getBoundingClientRect();\n\t\t\twin = elem.ownerDocument.defaultView;\n\t\t\treturn {\n\t\t\t\ttop: rect.top + win.pageYOffset,\n\t\t\t\tleft: rect.left + win.pageXOffset\n\t\t\t};\n\t\t},\n\n\t\t// position() relates an element's margin box to its offset parent's padding box\n\t\t// This corresponds to the behavior of CSS absolute positioning\n\t\tposition: function () {\n\t\t\tif (!this[0]) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar offsetParent, offset, doc,\n\t\t\t\telem = this[0],\n\t\t\t\tparentOffset = { top: 0, left: 0 };\n\n\t\t\t// position:fixed elements are offset from the viewport, which itself always has zero offset\n\t\t\tif (jQuery.css(elem, \"position\") === \"fixed\") {\n\n\t\t\t\t// Assume position:fixed implies availability of getBoundingClientRect\n\t\t\t\toffset = elem.getBoundingClientRect();\n\n\t\t\t} else {\n\t\t\t\toffset = this.offset();\n\n\t\t\t\t// Account for the *real* offset parent, which can be the document or its root element\n\t\t\t\t// when a statically positioned element is identified\n\t\t\t\tdoc = elem.ownerDocument;\n\t\t\t\toffsetParent = elem.offsetParent || doc.documentElement;\n\t\t\t\twhile (offsetParent &&\n\t\t\t\t\t(offsetParent === doc.body || offsetParent === doc.documentElement) &&\n\t\t\t\t\tjQuery.css(offsetParent, \"position\") === \"static\") {\n\n\t\t\t\t\toffsetParent = offsetParent.parentNode;\n\t\t\t\t}\n\t\t\t\tif (offsetParent && offsetParent !== elem && offsetParent.nodeType === 1) {\n\n\t\t\t\t\t// Incorporate borders into its offset, since they are outside its content origin\n\t\t\t\t\tparentOffset = jQuery(offsetParent).offset();\n\t\t\t\t\tparentOffset.top += jQuery.css(offsetParent, \"borderTopWidth\", true);\n\t\t\t\t\tparentOffset.left += jQuery.css(offsetParent, \"borderLeftWidth\", true);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Subtract parent offsets and element margins\n\t\t\treturn {\n\t\t\t\ttop: offset.top - parentOffset.top - jQuery.css(elem, \"marginTop\", true),\n\t\t\t\tleft: offset.left - parentOffset.left - jQuery.css(elem, \"marginLeft\", true)\n\t\t\t};\n\t\t},\n\n\t\t// This method will return documentElement in the following cases:\n\t\t// 1) For the element inside the iframe without offsetParent, this method will return\n\t\t//    documentElement of the parent window\n\t\t// 2) For the hidden or detached element\n\t\t// 3) For body or html element, i.e. in case of the html node - it will return itself\n\t\t//\n\t\t// but those exceptions were never presented as a real life use-cases\n\t\t// and might be considered as more preferable results.\n\t\t//\n\t\t// This logic, however, is not guaranteed and can change at any point in the future\n\t\toffsetParent: function () {\n\t\t\treturn this.map(function () {\n\t\t\t\tvar offsetParent = this.offsetParent;\n\n\t\t\t\twhile (offsetParent && jQuery.css(offsetParent, \"position\") === \"static\") {\n\t\t\t\t\toffsetParent = offsetParent.offsetParent;\n\t\t\t\t}\n\n\t\t\t\treturn offsetParent || documentElement;\n\t\t\t});\n\t\t}\n\t});\n\n\t// Create scrollLeft and scrollTop methods\n\tjQuery.each({ scrollLeft: \"pageXOffset\", scrollTop: \"pageYOffset\" }, function (method, prop) {\n\t\tvar top = \"pageYOffset\" === prop;\n\n\t\tjQuery.fn[method] = function (val) {\n\t\t\treturn access(this, function (elem, method, val) {\n\n\t\t\t\t// Coalesce documents and windows\n\t\t\t\tvar win;\n\t\t\t\tif (isWindow(elem)) {\n\t\t\t\t\twin = elem;\n\t\t\t\t} else if (elem.nodeType === 9) {\n\t\t\t\t\twin = elem.defaultView;\n\t\t\t\t}\n\n\t\t\t\tif (val === undefined) {\n\t\t\t\t\treturn win ? win[prop] : elem[method];\n\t\t\t\t}\n\n\t\t\t\tif (win) {\n\t\t\t\t\twin.scrollTo(\n\t\t\t\t\t\t!top ? val : win.pageXOffset,\n\t\t\t\t\t\ttop ? val : win.pageYOffset\n\t\t\t\t\t);\n\n\t\t\t\t} else {\n\t\t\t\t\telem[method] = val;\n\t\t\t\t}\n\t\t\t}, method, val, arguments.length);\n\t\t};\n\t});\n\n\t// Support: Safari <=7 - 9.1, Chrome <=37 - 49\n\t// Add the top/left cssHooks using jQuery.fn.position\n\t// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084\n\t// Blink bug: https://bugs.chromium.org/p/chromium/issues/detail?id=589347\n\t// getComputedStyle returns percent when specified for top/left/bottom/right;\n\t// rather than make the css module depend on the offset module, just check for it here\n\tjQuery.each([\"top\", \"left\"], function (_i, prop) {\n\t\tjQuery.cssHooks[prop] = addGetHookIf(support.pixelPosition,\n\t\t\tfunction (elem, computed) {\n\t\t\t\tif (computed) {\n\t\t\t\t\tcomputed = curCSS(elem, prop);\n\n\t\t\t\t\t// If curCSS returns percentage, fallback to offset\n\t\t\t\t\treturn rnumnonpx.test(computed) ?\n\t\t\t\t\t\tjQuery(elem).position()[prop] + \"px\" :\n\t\t\t\t\t\tcomputed;\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\t});\n\n\n\t// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods\n\tjQuery.each({ Height: \"height\", Width: \"width\" }, function (name, type) {\n\t\tjQuery.each({\n\t\t\tpadding: \"inner\" + name,\n\t\t\tcontent: type,\n\t\t\t\"\": \"outer\" + name\n\t\t}, function (defaultExtra, funcName) {\n\n\t\t\t// Margin is only for outerHeight, outerWidth\n\t\t\tjQuery.fn[funcName] = function (margin, value) {\n\t\t\t\tvar chainable = arguments.length && (defaultExtra || typeof margin !== \"boolean\"),\n\t\t\t\t\textra = defaultExtra || (margin === true || value === true ? \"margin\" : \"border\");\n\n\t\t\t\treturn access(this, function (elem, type, value) {\n\t\t\t\t\tvar doc;\n\n\t\t\t\t\tif (isWindow(elem)) {\n\n\t\t\t\t\t\t// $( window ).outerWidth/Height return w/h including scrollbars (gh-1729)\n\t\t\t\t\t\treturn funcName.indexOf(\"outer\") === 0 ?\n\t\t\t\t\t\t\telem[\"inner\" + name] :\n\t\t\t\t\t\t\telem.document.documentElement[\"client\" + name];\n\t\t\t\t\t}\n\n\t\t\t\t\t// Get document width or height\n\t\t\t\t\tif (elem.nodeType === 9) {\n\t\t\t\t\t\tdoc = elem.documentElement;\n\n\t\t\t\t\t\t// Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height],\n\t\t\t\t\t\t// whichever is greatest\n\t\t\t\t\t\treturn Math.max(\n\t\t\t\t\t\t\telem.body[\"scroll\" + name], doc[\"scroll\" + name],\n\t\t\t\t\t\t\telem.body[\"offset\" + name], doc[\"offset\" + name],\n\t\t\t\t\t\t\tdoc[\"client\" + name]\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\n\t\t\t\t\treturn value === undefined ?\n\n\t\t\t\t\t\t// Get width or height on the element, requesting but not forcing parseFloat\n\t\t\t\t\t\tjQuery.css(elem, type, extra) :\n\n\t\t\t\t\t\t// Set width or height on the element\n\t\t\t\t\t\tjQuery.style(elem, type, value, extra);\n\t\t\t\t}, type, chainable ? margin : undefined, chainable);\n\t\t\t};\n\t\t});\n\t});\n\n\n\tjQuery.each([\n\t\t\"ajaxStart\",\n\t\t\"ajaxStop\",\n\t\t\"ajaxComplete\",\n\t\t\"ajaxError\",\n\t\t\"ajaxSuccess\",\n\t\t\"ajaxSend\"\n\t], function (_i, type) {\n\t\tjQuery.fn[type] = function (fn) {\n\t\t\treturn this.on(type, fn);\n\t\t};\n\t});\n\n\n\n\n\tjQuery.fn.extend({\n\n\t\tbind: function (types, data, fn) {\n\t\t\treturn this.on(types, null, data, fn);\n\t\t},\n\t\tunbind: function (types, fn) {\n\t\t\treturn this.off(types, null, fn);\n\t\t},\n\n\t\tdelegate: function (selector, types, data, fn) {\n\t\t\treturn this.on(types, selector, data, fn);\n\t\t},\n\t\tundelegate: function (selector, types, fn) {\n\n\t\t\t// ( namespace ) or ( selector, types [, fn] )\n\t\t\treturn arguments.length === 1 ?\n\t\t\t\tthis.off(selector, \"**\") :\n\t\t\t\tthis.off(types, selector || \"**\", fn);\n\t\t},\n\n\t\thover: function (fnOver, fnOut) {\n\t\t\treturn this.mouseenter(fnOver).mouseleave(fnOut || fnOver);\n\t\t}\n\t});\n\n\tjQuery.each(\n\t\t(\"blur focus focusin focusout resize scroll click dblclick \" +\n\t\t\t\"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave \" +\n\t\t\t\"change select submit keydown keypress keyup contextmenu\").split(\" \"),\n\t\tfunction (_i, name) {\n\n\t\t\t// Handle event binding\n\t\t\tjQuery.fn[name] = function (data, fn) {\n\t\t\t\treturn arguments.length > 0 ?\n\t\t\t\t\tthis.on(name, null, data, fn) :\n\t\t\t\t\tthis.trigger(name);\n\t\t\t};\n\t\t}\n\t);\n\n\n\n\n\t// Support: Android <=4.0 only\n\t// Make sure we trim BOM and NBSP\n\t// Require that the \"whitespace run\" starts from a non-whitespace\n\t// to avoid O(N^2) behavior when the engine would try matching \"\\s+$\" at each space position.\n\tvar rtrim = /^[\\s\\uFEFF\\xA0]+|([^\\s\\uFEFF\\xA0])[\\s\\uFEFF\\xA0]+$/g;\n\n\t// Bind a function to a context, optionally partially applying any\n\t// arguments.\n\t// jQuery.proxy is deprecated to promote standards (specifically Function#bind)\n\t// However, it is not slated for removal any time soon\n\tjQuery.proxy = function (fn, context) {\n\t\tvar tmp, args, proxy;\n\n\t\tif (typeof context === \"string\") {\n\t\t\ttmp = fn[context];\n\t\t\tcontext = fn;\n\t\t\tfn = tmp;\n\t\t}\n\n\t\t// Quick check to determine if target is callable, in the spec\n\t\t// this throws a TypeError, but we will just return undefined.\n\t\tif (!isFunction(fn)) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\t// Simulated bind\n\t\targs = slice.call(arguments, 2);\n\t\tproxy = function () {\n\t\t\treturn fn.apply(context || this, args.concat(slice.call(arguments)));\n\t\t};\n\n\t\t// Set the guid of unique handler to the same of original handler, so it can be removed\n\t\tproxy.guid = fn.guid = fn.guid || jQuery.guid++;\n\n\t\treturn proxy;\n\t};\n\n\tjQuery.holdReady = function (hold) {\n\t\tif (hold) {\n\t\t\tjQuery.readyWait++;\n\t\t} else {\n\t\t\tjQuery.ready(true);\n\t\t}\n\t};\n\tjQuery.isArray = Array.isArray;\n\tjQuery.parseJSON = JSON.parse;\n\tjQuery.nodeName = nodeName;\n\tjQuery.isFunction = isFunction;\n\tjQuery.isWindow = isWindow;\n\tjQuery.camelCase = camelCase;\n\tjQuery.type = toType;\n\n\tjQuery.now = Date.now;\n\n\tjQuery.isNumeric = function (obj) {\n\n\t\t// As of jQuery 3.0, isNumeric is limited to\n\t\t// strings and numbers (primitives or objects)\n\t\t// that can be coerced to finite numbers (gh-2662)\n\t\tvar type = jQuery.type(obj);\n\t\treturn (type === \"number\" || type === \"string\") &&\n\n\t\t\t// parseFloat NaNs numeric-cast false positives (\"\")\n\t\t\t// ...but misinterprets leading-number strings, particularly hex literals (\"0x...\")\n\t\t\t// subtraction forces infinities to NaN\n\t\t\t!isNaN(obj - parseFloat(obj));\n\t};\n\n\tjQuery.trim = function (text) {\n\t\treturn text == null ?\n\t\t\t\"\" :\n\t\t\t(text + \"\").replace(rtrim, \"$1\");\n\t};\n\n\n\n\t// Register as a named AMD module, since jQuery can be concatenated with other\n\t// files that may use define, but not via a proper concatenation script that\n\t// understands anonymous AMD modules. A named AMD is safest and most robust\n\t// way to register. Lowercase jquery is used because AMD module names are\n\t// derived from file names, and jQuery is normally delivered in a lowercase\n\t// file name. Do this after creating the global so that if an AMD module wants\n\t// to call noConflict to hide this version of jQuery, it will work.\n\n\t// Note that for maximum portability, libraries that are not jQuery should\n\t// declare themselves as anonymous modules, and avoid setting a global if an\n\t// AMD loader is present. jQuery is a special case. For more information, see\n\t// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon\n\n\tif (typeof define === \"function\" && define.amd) {\n\t\tdefine(\"jquery\", [], function () {\n\t\t\treturn jQuery;\n\t\t});\n\t}\n\n\n\n\n\tvar\n\n\t\t// Map over jQuery in case of overwrite\n\t\t_jQuery = window.jQuery,\n\n\t\t// Map over the $ in case of overwrite\n\t\t_$ = window.$;\n\n\tjQuery.noConflict = function (deep) {\n\t\tif (window.$ === jQuery) {\n\t\t\twindow.$ = _$;\n\t\t}\n\n\t\tif (deep && window.jQuery === jQuery) {\n\t\t\twindow.jQuery = _jQuery;\n\t\t}\n\n\t\treturn jQuery;\n\t};\n\n\t// Expose jQuery and $ identifiers, even in AMD\n\t// (trac-7102#comment:10, https://github.com/jquery/jquery/pull/557)\n\t// and CommonJS for browser emulators (trac-13566)\n\tif (typeof noGlobal === \"undefined\") {\n\t\twindow.jQuery = window.$ = jQuery;\n\t}\n\n\n\n\n\treturn jQuery;\n});"
  },
  {
    "path": "src/sourceDev.WebApp/SharedThemes/superhero/Shared/_Layout.cshtml",
    "content": "﻿@inject ISiteContextResolver siteResolver\n@inject ICoreThemeHelper themeHelper\n@{\n    var themeSettings = themeHelper.GetThemeSettings();\n    @*\n        These settings can be set by a main view to show additional columns.\n        Views that push content into the optional sections SideNav, AsidePrimary, and AsideSecondary\n        are obligated to set the needed viewtate property to true to show the section,\n        otherwise an error will occur.\n        The sideNav column also supports a toggle so it can be hidden and toggled visible even though it renders.\n    *@\n    bool sideNavVisible = true.Equals(ViewData[\"SideNavVisible\"]);\n    string sideNavToggleClass = ViewData[\"SideNavToggle\"]?.ToString() ?? \"collapse\";\n    bool asidePrimaryVisible = true.Equals(ViewData[\"AsidePrimaryVisible\"]);\n    bool asideSecondaryVisible = true.Equals(ViewData[\"AsideSecondaryVisible\"]);\n    var Tenant = await siteResolver.ResolveSite(Context.Request.Host.Host, Context.Request.Path);\n    var siteRoot = \"\";\n    if (!string.IsNullOrWhiteSpace(Tenant.SiteFolderName)) { siteRoot = \"/\" + Tenant.SiteFolderName; }\n    \n}\n<!DOCTYPE html>\n<html lang=\"@CultureInfo.CurrentUICulture.Name\">\n<head>\n    <meta charset=\"utf-8\" />\n    <title>@ViewData[\"Title\"] - @(Tenant?.SiteName ?? \"Sample\")</title>\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1, shrink-to-fit=no\">\n    @RenderSection(\"Meta\", required: false)\n    <environment names=\"Development\">\n        <link rel=\"stylesheet\" href=\"~/css/bootstrap.css\" cs-resolve-theme-resource=\"true\" cs-shared-theme=\"true\" cs-tenant=\"@Tenant\" />\n        <link rel=\"stylesheet\" href=\"~/css/fontawesome-all.min.css\" cs-resolve-theme-resource=\"true\" cs-shared-theme=\"true\" cs-tenant=\"@Tenant\" />\n        <link rel=\"stylesheet\" href=\"~/css/site.css\" cs-resolve-theme-resource=\"true\" cs-shared-theme=\"true\" cs-tenant=\"@Tenant\" asp-append-version=\"true\" />\n    </environment>\n    <environment names=\"Staging,Production\">\n        <link rel=\"stylesheet\" href=\"~/css/bootstrap.min.css\" cs-resolve-theme-resource=\"true\" cs-shared-theme=\"true\" cs-tenant=\"@Tenant\" />\n        <link rel=\"stylesheet\" href=\"~/css/fontawesome-all.min.css\" cs-resolve-theme-resource=\"true\" cs-shared-theme=\"true\" cs-tenant=\"@Tenant\" />\n        <link rel=\"stylesheet\" href=\"~/css/site.min.css\" cs-resolve-theme-resource=\"true\" cs-shared-theme=\"true\" cs-tenant=\"@Tenant\" asp-append-version=\"true\" />\n    </environment>\n    @RenderSection(\"Styles\", required: false)    \n    \n    <google-analytics profile-id=\"@Tenant.GoogleAnalyticsProfileId\" user-id=\"@User.GetUserId()\"></google-analytics>\n    <base href=\"@Context.Request.Path\" />\n</head>\n<body class=\"d-flex flex-column @ViewData[\"BodyClass\"]\">\n    <header>\n        <a id=\"skippy\" class=\"visually-hidden visually-hidden-focusable\" href=\"#content\">\n            <div class=\"container\">\n                <span class=\"skiplink-text\">Skip to main content</span>\n            </div>\n        </a>\n        <div class=\"fixed-top brand-header\">\n            <div class=\"d-flex align-items-center\">\n                @if (!string.IsNullOrWhiteSpace(Tenant.LogoUrl))\n                {\n                    <div>\n                         <partial name=\"SiteLogoPartial\" model=\"@Tenant\" />\n                    </div>\n                }\n                @if (Tenant.ShowSiteNameLink)\n                {\n                    <div class=\"align-self-center pt-4 pt-sm-0\">\n                         <partial name=\"SiteTitlePartial\" model=\"@Tenant\" />\n                    </div>\n                }\n                @if (!string.IsNullOrWhiteSpace(Tenant.HeaderContent))\n                {\n                    <div class=\"flex-fill align-self-center pt-3 d-none d-md-block\">\n                        <partial name=\"SiteHeaderPartial\" />\n                    </div>\n                }\n            </div>\n        </div>\n        <nav class=\"navbar navbar-expand-md navbar-dark fixed-top bg-dark\">\n            <button class=\"navbar-toggler\" type=\"button\" data-bs-toggle=\"collapse\" data-bs-target=\"#navbarNavDropdown\" aria-controls=\"navbarNavDropdown\" aria-expanded=\"false\" aria-label=\"Toggle navigation\">\n                <span class=\"navbar-toggler-icon\"></span>\n            </button>\n            <div class=\"collapse navbar-collapse bg-dark ps-2\" id=\"navbarNavDropdown\">\n                @await Component.InvokeAsync(\"Navigation\", new { viewName = \"Bootstrap5TopNavWithDropdowns\", filterName = NamedNavigationFilters.TopNav, startingNodeKey = \"\" })\n                <partial name=\"_LoginPartialWithDropdowns\" />\n            </div>\n        </nav>\n    </header>\n    <div id=\"wrapper\" class=\"container-fluid cs-container flex-fill\">\n        @await Component.InvokeAsync(\"Navigation\", new { viewName = \"Bootstrap5Breadcrumbs\", filterName = NamedNavigationFilters.Breadcrumbs, startingNodeKey = \"\" })\n        <div class=\"row\">\n            <main id=\"content\" class=\"col order-3\">\n                <partial name=\"AlertsPartial\" />\n                <partial name=\"_CookieConsentPartial\" />\n                <partial name=\"_AutoLogoutWarningPartial\" />\n                @RenderBody()\n            </main>\n            @if (sideNavVisible)\n            {\n                <nav id=\"sidenavmenu\" class=\" col col-3 order-1 @sideNavToggleClass\">\n                    @RenderSection(\"SideNav\", required: false)\n                </nav>\n\n            }\n            @if (asideSecondaryVisible)\n            {\n                <aside id=\"asideSecondary\" class=\"col col-1 order-2\">\n                    @RenderSection(\"AsideSecondary\", required: false)\n                </aside>\n\n            }\n            @if (asidePrimaryVisible)\n            {\n                <aside id=\"asidePrimary\" class=\"col-12 col-md-3 col-sm-12  col-sm-12 order-4\">\n                    @RenderSection(\"AsidePrimary\", required: false)\n                </aside>\n\n            }\n        </div>\n    </div>\n    <footer class=\"sticky-bottom border pt-2 h-100\">\n        <div class=\"w-100 text-center\">\n            <partial name=\"SiteFooterPartial\" />\n        </div>\n        <div class=\"d-flex flex-wrap flex-grow justify-content-center\">\n            <div class=\"p-2\">\n            <ul class=\"list-unstyled d-md-flex flex-wrap\">\n                @if (Tenant != null && !string.IsNullOrWhiteSpace(Tenant.PrivacyPolicy))\n                {\n                    <li class=\"ps-sm-2 me-sm-2\">\n                        <a asp-controller=\"Privacy\" asp-action=\"Index\">Privacy Policy</a>\n                    </li>\n                }\n                <li class=\"ps-sm-2 me-sm-2\">\n                    @* you are free to remove the powered by cloudscribe link but we appreciate it if you choose to keep it! *@\n                    <a class=\"text-nowrap\" target=\"_blank\" href=\"https://www.cloudscribe.com/?utm_source=@Context.Request.Host.Value&amp;utm_medium=referral&amp;utm_campaign=poweredbycloudscribe\">Powered by cloudscribe</a>\n                </li>\n            </ul>\n        </div>\n         <div class=\"ps-sm-2  text-center w-100\"><span class=\"text-nowrap\">Copyright &copy; @DateTime.Now.Year</span><span class=\"d-none d-sm-inline\"> - </span><span> @(Tenant?.SiteName ?? \"Sample\")</span></div>\n        <partial name=\"_CookieConsentRevokePartial\" />\n        </div>\n        \n    </footer>\n    @RenderSection(\"Toolbar\", required: false)\n    <environment names=\"Development\">\n        <script src=\"~/js/jquery.js\" cs-resolve-theme-resource=\"true\" cs-shared-theme=\"true\" cs-tenant=\"@Tenant\"></script>\n        <script src=\"~/js/bootstrap.bundle.js\" cs-resolve-theme-resource=\"true\" cs-shared-theme=\"true\" cs-tenant=\"@Tenant\"></script>\n        <script src=\"~/cr/js/bs4.smartmenus.min.js\"></script>\n    </environment>\n    <environment names=\"Staging,Production\">\n        <script src=\"~/js/jquery.min.js\" cs-resolve-theme-resource=\"true\" cs-shared-theme=\"true\" cs-tenant=\"@Tenant\"></script>\n        <script src=\"~/js/bootstrap.bundle.min.js\" cs-resolve-theme-resource=\"true\" cs-shared-theme=\"true\" cs-tenant=\"@Tenant\"></script>\n        <script src=\"~/cr/js/bs4.smartmenus.min.js\"></script>\n    </environment>\n    @RenderSection(\"Bottom\", required: false)\n    @RenderSection(\"Scripts\", required: false)     \n    @Html.RenderResources(\"js\") @*render any js resources declared via helpers in partial views etc*@\n    <add-this profile-id=\"@Tenant.AddThisDotComUsername\" async></add-this>\n</body>\n</html>\n"
  },
  {
    "path": "src/sourceDev.WebApp/SharedThemes/superhero/wwwroot/css/_bootswatch.scss",
    "content": "// Superhero 5.1.3\n// Bootswatch\n\n\n// Variables\n\n$web-font-path: \"https://fonts.googleapis.com/css2?family=Lato:wght@300;400;700&display=swap\" !default;\n@if $web-font-path {\n  @import url($web-font-path);\n}\n\n// Buttons\n\n.btn {\n  @each $color, $value in $theme-colors {\n    &-#{$color} {\n      @if $enable-gradients {\n        background: $value linear-gradient(180deg, mix($white, $value, 15%), $value) repeat-x;\n      } @else {\n        background-color: $value;\n      }\n    }\n  }\n}\n\n// Typography\n\n.dropdown-menu {\n  font-size: $font-size-sm;\n}\n\n.dropdown-header {\n  font-size: $font-size-sm;\n}\n\n.blockquote-footer {\n  color: $body-color;\n}\n\n// Tables\n\n.table {\n  font-size: $font-size-sm;\n\n  .thead-dark th {\n    color: $white;\n  }\n\n  a:not(.btn) {\n    color: $white;\n    text-decoration: underline;\n  }\n\n  .dropdown-menu a {\n    text-decoration: none;\n  }\n\n  .text-muted {\n    color: $text-muted;\n  }\n}\n\n// Forms\n\nlabel,\n.radio label,\n.checkbox label,\n.help-block {\n  font-size: $font-size-sm;\n}\n\n.form-floating {\n  label {\n    color: $input-placeholder-color;\n  }\n}\n\n// Navs\n\n.nav-tabs,\n.nav-pills {\n  .nav-link,\n  .nav-link:hover {\n    color: $body-color;\n  }\n\n  .nav-link.disabled {\n    color: $nav-link-disabled-color;\n  }\n}\n\n.page-link:hover,\n.page-link:focus {\n  color: $white;\n  text-decoration: none;\n}\n\n// Indicators\n\n.alert {\n  border: none;\n  color: $white;\n\n  a,\n  .alert-link {\n    color: $white;\n    text-decoration: underline;\n  }\n\n  @each $color, $value in $theme-colors {\n    &-#{$color} {\n      @if $enable-gradients {\n        background: $value linear-gradient(180deg, mix($white, $value, 15%), $value) repeat-x;\n      } @else {\n        background-color: $value;\n      }\n    }\n  }\n}\n\n.badge {\n  &-warning,\n  &-info {\n    color: $white;\n  }\n}\n\n// Popovers\n\n.popover-header {\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n}\n\n// Containers\n\n.modal {\n  &-header,\n  &-footer {\n    background-color: $table-hover-bg;\n  }\n}\n"
  },
  {
    "path": "src/sourceDev.WebApp/SharedThemes/superhero/wwwroot/css/_variables.scss",
    "content": "// Superhero 5.1.3\n// Bootswatch\n\n$theme: \"superhero\" !default;\n\n//\n// Color system\n//\n\n$white:    #fff !default;\n$gray-100: #ebebeb !default;\n$gray-200: #4e5d6c !default;\n$gray-300: #dee2e6 !default;\n$gray-400: #ced4da !default;\n$gray-500: #adb5bd !default;\n$gray-600: #868e96 !default;\n$gray-700: #495057 !default;\n$gray-800: #343a40 !default;\n$gray-900: #212529 !default;\n$black:    #000 !default;\n\n$blue:    #4c9be8 !default;\n$indigo:  #6610f2 !default;\n$purple:  #6f42c1 !default;\n$pink:    #e83e8c !default;\n$red:     #d9534f !default;\n$orange:  #f0ad4e !default;\n$yellow:  #ffc107 !default;\n$green:   #5cb85c !default;\n$teal:    #20c997 !default;\n$cyan:    #5bc0de !default;\n\n$primary:       $blue !default;\n$secondary:     $gray-200 !default;\n$success:       $green !default;\n$info:          $cyan !default;\n$warning:       $yellow !default;\n$danger:        $red !default;\n$light:         lighten($gray-200, 35%) !default;\n$dark:          #20374c !default;\n\n$min-contrast-ratio:   1.6 !default;\n\n// Body\n\n$body-bg:                   #0f2537 !default;\n$body-color:                $gray-100 !default;\n\n// Components\n\n$border-radius:               0 !default;\n$border-radius-lg:            0 !default;\n$border-radius-sm:            0 !default;\n\n// Fonts\n\n// stylelint-disable-next-line value-keyword-case\n$font-family-sans-serif:      Lato, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\" !default;\n\n$text-muted:                  rgba(255, 255, 255, .4) !default;\n\n// Tables\n\n$table-accent-bg:             rgba($white, .05) !default;\n$table-hover-bg:              rgba($white, .075) !default;\n$table-border-color:          rgba($black, .15) !default;\n$table-head-bg:               $light !default;\n$table-dark-bg:               $light !default;\n$table-dark-border-color:     $gray-200 !default;\n$table-dark-color:            $body-bg !default;\n\n$table-bg-scale:              0 !default;\n\n// Forms\n\n$input-bg:                          $white !default;\n$input-disabled-bg:                 $gray-100 !default;\n\n$input-color:                       $gray-900 !default;\n$input-border-color:                transparent !default;\n$input-border-width:                0 !default;\n\n$input-placeholder-color:               $gray-600 !default;\n\n$input-group-addon-color:           $body-color !default;\n\n$form-check-input-bg:                     $white !default;\n$form-check-input-border:                 none !default;\n\n$form-file-button-color:          $body-color !default;\n\n$form-floating-label-opacity:     1 !default;\n\n// Dropdowns\n\n$dropdown-bg:                       $gray-200 !default;\n$dropdown-divider-bg:               rgba($black, .15) !default;\n$dropdown-link-color:               $body-color !default;\n$dropdown-link-hover-color:         $dropdown-link-color !default;\n$dropdown-link-hover-bg:            $table-hover-bg !default;\n\n// Navs\n\n$nav-link-disabled-color:           rgba(255, 255, 255, .4) !default;\n$nav-tabs-border-color:             $gray-200 !default;\n$nav-tabs-link-active-color:        $body-color !default;\n$nav-tabs-link-active-border-color: $gray-200 !default;\n\n// Navbar\n\n$navbar-dark-color:                 rgba($white, .75) !default;\n$navbar-dark-hover-color:           $white !default;\n\n// Pagination\n\n$pagination-color:                  $white !default;\n$pagination-bg:                     $gray-200 !default;\n$pagination-border-color:           transparent !default;\n$pagination-hover-color:            $white !default;\n$pagination-hover-bg:               $nav-link-disabled-color !default;\n$pagination-hover-border-color:     $pagination-border-color !default;\n$pagination-disabled-color:         $nav-link-disabled-color !default;\n$pagination-disabled-bg:            $pagination-bg !default;\n$pagination-disabled-border-color:  $pagination-border-color !default;\n\n// Cards\n\n$card-cap-bg:                       $table-hover-bg !default;\n$card-bg:                           $gray-200 !default;\n$card-inner-border-radius:          0 !default;\n\n// Popovers\n\n$popover-bg:                        $gray-200 !default;\n$popover-header-bg:                 $table-hover-bg !default;\n\n// Toasts\n\n$toast-background-color:            $gray-200 !default;\n$toast-border-color:                rgba(0, 0, 0, .2) !default;\n$toast-header-color:                $body-color !default;\n$toast-header-background-color:     $toast-background-color !default;\n$toast-header-border-color:         $toast-border-color !default;\n\n// Modals\n\n$modal-content-bg:                  $gray-200 !default;\n$modal-header-border-color:         rgba(0, 0, 0, .2) !default;\n\n// List group\n\n$list-group-color:                  $white !default;\n$list-group-bg:                     $gray-200 !default;\n$list-group-border-color:           transparent !default;\n$list-group-hover-bg:               $nav-link-disabled-color !default;\n$list-group-disabled-color:         $nav-link-disabled-color !default;\n$list-group-action-color:           $white !default;\n$list-group-action-hover-color:     $white !default;\n\n// Breadcrumbs\n\n$breadcrumb-padding-y:              .375rem !default;\n$breadcrumb-padding-x:              .75rem !default;\n$breadcrumb-bg:                     $gray-200 !default;\n$breadcrumb-divider-color:          $body-color !default;\n$breadcrumb-active-color:           $body-color !default;\n\n// Close\n\n$btn-close-color:            $white !default;\n$btn-close-opacity:          .5 !default;\n$btn-close-hover-opacity:    1 !default;\n\n// Code\n\n$pre-color:                         inherit !default;\n"
  },
  {
    "path": "src/sourceDev.WebApp/SharedThemes/superhero/wwwroot/css/bootstrap.css",
    "content": "/*!\n * Bootswatch v5.1.3\n * Homepage: https://bootswatch.com\n * Copyright 2012-2021 Thomas Park\n * Licensed under MIT\n * Based on Bootstrap\n*/\n/*!\n * Bootstrap v5.1.3 (https://getbootstrap.com/)\n * Copyright 2011-2021 The Bootstrap Authors\n * Copyright 2011-2021 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n@import url(\"https://fonts.googleapis.com/css2?family=Lato:wght@300;400;700&display=swap\");\n:root {\n  --bs-blue: #4c9be8;\n  --bs-indigo: #6610f2;\n  --bs-purple: #6f42c1;\n  --bs-pink: #e83e8c;\n  --bs-red: #d9534f;\n  --bs-orange: #f0ad4e;\n  --bs-yellow: #ffc107;\n  --bs-green: #5cb85c;\n  --bs-teal: #20c997;\n  --bs-cyan: #5bc0de;\n  --bs-white: #fff;\n  --bs-gray: #868e96;\n  --bs-gray-dark: #343a40;\n  --bs-gray-100: #ebebeb;\n  --bs-gray-200: #4e5d6c;\n  --bs-gray-300: #dee2e6;\n  --bs-gray-400: #ced4da;\n  --bs-gray-500: #adb5bd;\n  --bs-gray-600: #868e96;\n  --bs-gray-700: #495057;\n  --bs-gray-800: #343a40;\n  --bs-gray-900: #212529;\n  --bs-primary: #4c9be8;\n  --bs-secondary: #4e5d6c;\n  --bs-success: #5cb85c;\n  --bs-info: #5bc0de;\n  --bs-warning: #ffc107;\n  --bs-danger: #d9534f;\n  --bs-light: #abb6c2;\n  --bs-dark: #20374c;\n  --bs-primary-rgb: 76, 155, 232;\n  --bs-secondary-rgb: 78, 93, 108;\n  --bs-success-rgb: 92, 184, 92;\n  --bs-info-rgb: 91, 192, 222;\n  --bs-warning-rgb: 255, 193, 7;\n  --bs-danger-rgb: 217, 83, 79;\n  --bs-light-rgb: 170.516129, 182.25, 193.983871;\n  --bs-dark-rgb: 32, 55, 76;\n  --bs-white-rgb: 255, 255, 255;\n  --bs-black-rgb: 0, 0, 0;\n  --bs-body-color-rgb: 235, 235, 235;\n  --bs-body-bg-rgb: 15, 37, 55;\n  --bs-font-sans-serif: Lato, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\";\n  --bs-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n  --bs-gradient: linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));\n  --bs-body-font-family: var(--bs-font-sans-serif);\n  --bs-body-font-size: 1rem;\n  --bs-body-font-weight: 400;\n  --bs-body-line-height: 1.5;\n  --bs-body-color: #ebebeb;\n  --bs-body-bg: #0f2537;\n}\n\n*,\n*::before,\n*::after {\n  box-sizing: border-box;\n}\n\n@media (prefers-reduced-motion: no-preference) {\n  :root {\n    scroll-behavior: smooth;\n  }\n}\n\nbody {\n  margin: 0;\n  font-family: var(--bs-body-font-family);\n  font-size: var(--bs-body-font-size);\n  font-weight: var(--bs-body-font-weight);\n  line-height: var(--bs-body-line-height);\n  color: var(--bs-body-color);\n  text-align: var(--bs-body-text-align);\n  background-color: var(--bs-body-bg);\n  -webkit-text-size-adjust: 100%;\n  -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\n\nhr {\n  margin: 1rem 0;\n  color: inherit;\n  background-color: currentColor;\n  border: 0;\n  opacity: 0.25;\n}\n\nhr:not([size]) {\n  height: 1px;\n}\n\nh1, .h1, h2, .h2, h3, .h3, h4, .h4, h5, .h5, h6, .h6 {\n  margin-top: 0;\n  margin-bottom: 0.5rem;\n  font-weight: 500;\n  line-height: 1.2;\n}\n\nh1, .h1 {\n  font-size: calc(1.375rem + 1.5vw);\n}\n\n@media (min-width: 1200px) {\n  h1, .h1 {\n    font-size: 2.5rem;\n  }\n}\n\nh2, .h2 {\n  font-size: calc(1.325rem + 0.9vw);\n}\n\n@media (min-width: 1200px) {\n  h2, .h2 {\n    font-size: 2rem;\n  }\n}\n\nh3, .h3 {\n  font-size: calc(1.3rem + 0.6vw);\n}\n\n@media (min-width: 1200px) {\n  h3, .h3 {\n    font-size: 1.75rem;\n  }\n}\n\nh4, .h4 {\n  font-size: calc(1.275rem + 0.3vw);\n}\n\n@media (min-width: 1200px) {\n  h4, .h4 {\n    font-size: 1.5rem;\n  }\n}\n\nh5, .h5 {\n  font-size: 1.25rem;\n}\n\nh6, .h6 {\n  font-size: 1rem;\n}\n\np {\n  margin-top: 0;\n  margin-bottom: 1rem;\n}\n\nabbr[title],\nabbr[data-bs-original-title] {\n  -webkit-text-decoration: underline dotted;\n  text-decoration: underline dotted;\n  cursor: help;\n  -webkit-text-decoration-skip-ink: none;\n  text-decoration-skip-ink: none;\n}\n\naddress {\n  margin-bottom: 1rem;\n  font-style: normal;\n  line-height: inherit;\n}\n\nol,\nul {\n  padding-left: 2rem;\n}\n\nol,\nul,\ndl {\n  margin-top: 0;\n  margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n  margin-bottom: 0;\n}\n\ndt {\n  font-weight: 700;\n}\n\ndd {\n  margin-bottom: .5rem;\n  margin-left: 0;\n}\n\nblockquote {\n  margin: 0 0 1rem;\n}\n\nb,\nstrong {\n  font-weight: bolder;\n}\n\nsmall, .small {\n  font-size: 0.875em;\n}\n\nmark, .mark {\n  padding: 0.2em;\n  background-color: #fcf8e3;\n}\n\nsub,\nsup {\n  position: relative;\n  font-size: 0.75em;\n  line-height: 0;\n  vertical-align: baseline;\n}\n\nsub {\n  bottom: -.25em;\n}\n\nsup {\n  top: -.5em;\n}\n\na {\n  color: #4c9be8;\n  text-decoration: underline;\n}\n\na:hover {\n  color: #3d7cba;\n}\n\na:not([href]):not([class]), a:not([href]):not([class]):hover {\n  color: inherit;\n  text-decoration: none;\n}\n\npre,\ncode,\nkbd,\nsamp {\n  font-family: var(--bs-font-monospace);\n  font-size: 1em;\n  direction: ltr /* rtl:ignore */;\n  unicode-bidi: bidi-override;\n}\n\npre {\n  display: block;\n  margin-top: 0;\n  margin-bottom: 1rem;\n  overflow: auto;\n  font-size: 0.875em;\n  color: inherit;\n}\n\npre code {\n  font-size: inherit;\n  color: inherit;\n  word-break: normal;\n}\n\ncode {\n  font-size: 0.875em;\n  color: #e83e8c;\n  word-wrap: break-word;\n}\n\na > code {\n  color: inherit;\n}\n\nkbd {\n  padding: 0.2rem 0.4rem;\n  font-size: 0.875em;\n  color: #fff;\n  background-color: #212529;\n  border-radius: 0;\n}\n\nkbd kbd {\n  padding: 0;\n  font-size: 1em;\n  font-weight: 700;\n}\n\nfigure {\n  margin: 0 0 1rem;\n}\n\nimg,\nsvg {\n  vertical-align: middle;\n}\n\ntable {\n  caption-side: bottom;\n  border-collapse: collapse;\n}\n\ncaption {\n  padding-top: 0.5rem;\n  padding-bottom: 0.5rem;\n  color: rgba(255, 255, 255, 0.4);\n  text-align: left;\n}\n\nth {\n  text-align: inherit;\n  text-align: -webkit-match-parent;\n}\n\nthead,\ntbody,\ntfoot,\ntr,\ntd,\nth {\n  border-color: inherit;\n  border-style: solid;\n  border-width: 0;\n}\n\nlabel {\n  display: inline-block;\n}\n\nbutton {\n  border-radius: 0;\n}\n\nbutton:focus:not(:focus-visible) {\n  outline: 0;\n}\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n  margin: 0;\n  font-family: inherit;\n  font-size: inherit;\n  line-height: inherit;\n}\n\nbutton,\nselect {\n  text-transform: none;\n}\n\n[role=\"button\"] {\n  cursor: pointer;\n}\n\nselect {\n  word-wrap: normal;\n}\n\nselect:disabled {\n  opacity: 1;\n}\n\n[list]::-webkit-calendar-picker-indicator {\n  display: none;\n}\n\nbutton,\n[type=\"button\"],\n[type=\"reset\"],\n[type=\"submit\"] {\n  -webkit-appearance: button;\n}\n\nbutton:not(:disabled),\n[type=\"button\"]:not(:disabled),\n[type=\"reset\"]:not(:disabled),\n[type=\"submit\"]:not(:disabled) {\n  cursor: pointer;\n}\n\n::-moz-focus-inner {\n  padding: 0;\n  border-style: none;\n}\n\ntextarea {\n  resize: vertical;\n}\n\nfieldset {\n  min-width: 0;\n  padding: 0;\n  margin: 0;\n  border: 0;\n}\n\nlegend {\n  float: left;\n  width: 100%;\n  padding: 0;\n  margin-bottom: 0.5rem;\n  font-size: calc(1.275rem + 0.3vw);\n  line-height: inherit;\n}\n\n@media (min-width: 1200px) {\n  legend {\n    font-size: 1.5rem;\n  }\n}\n\nlegend + * {\n  clear: left;\n}\n\n::-webkit-datetime-edit-fields-wrapper,\n::-webkit-datetime-edit-text,\n::-webkit-datetime-edit-minute,\n::-webkit-datetime-edit-hour-field,\n::-webkit-datetime-edit-day-field,\n::-webkit-datetime-edit-month-field,\n::-webkit-datetime-edit-year-field {\n  padding: 0;\n}\n\n::-webkit-inner-spin-button {\n  height: auto;\n}\n\n[type=\"search\"] {\n  outline-offset: -2px;\n  -webkit-appearance: textfield;\n}\n\n/* rtl:raw:\n[type=\"tel\"],\n[type=\"url\"],\n[type=\"email\"],\n[type=\"number\"] {\n  direction: ltr;\n}\n*/\n::-webkit-search-decoration {\n  -webkit-appearance: none;\n}\n\n::-webkit-color-swatch-wrapper {\n  padding: 0;\n}\n\n::file-selector-button {\n  font: inherit;\n}\n\n::-webkit-file-upload-button {\n  font: inherit;\n  -webkit-appearance: button;\n}\n\noutput {\n  display: inline-block;\n}\n\niframe {\n  border: 0;\n}\n\nsummary {\n  display: list-item;\n  cursor: pointer;\n}\n\nprogress {\n  vertical-align: baseline;\n}\n\n[hidden] {\n  display: none !important;\n}\n\n.lead {\n  font-size: 1.25rem;\n  font-weight: 300;\n}\n\n.display-1 {\n  font-size: calc(1.625rem + 4.5vw);\n  font-weight: 300;\n  line-height: 1.2;\n}\n\n@media (min-width: 1200px) {\n  .display-1 {\n    font-size: 5rem;\n  }\n}\n\n.display-2 {\n  font-size: calc(1.575rem + 3.9vw);\n  font-weight: 300;\n  line-height: 1.2;\n}\n\n@media (min-width: 1200px) {\n  .display-2 {\n    font-size: 4.5rem;\n  }\n}\n\n.display-3 {\n  font-size: calc(1.525rem + 3.3vw);\n  font-weight: 300;\n  line-height: 1.2;\n}\n\n@media (min-width: 1200px) {\n  .display-3 {\n    font-size: 4rem;\n  }\n}\n\n.display-4 {\n  font-size: calc(1.475rem + 2.7vw);\n  font-weight: 300;\n  line-height: 1.2;\n}\n\n@media (min-width: 1200px) {\n  .display-4 {\n    font-size: 3.5rem;\n  }\n}\n\n.display-5 {\n  font-size: calc(1.425rem + 2.1vw);\n  font-weight: 300;\n  line-height: 1.2;\n}\n\n@media (min-width: 1200px) {\n  .display-5 {\n    font-size: 3rem;\n  }\n}\n\n.display-6 {\n  font-size: calc(1.375rem + 1.5vw);\n  font-weight: 300;\n  line-height: 1.2;\n}\n\n@media (min-width: 1200px) {\n  .display-6 {\n    font-size: 2.5rem;\n  }\n}\n\n.list-unstyled {\n  padding-left: 0;\n  list-style: none;\n}\n\n.list-inline {\n  padding-left: 0;\n  list-style: none;\n}\n\n.list-inline-item {\n  display: inline-block;\n}\n\n.list-inline-item:not(:last-child) {\n  margin-right: 0.5rem;\n}\n\n.initialism {\n  font-size: 0.875em;\n  text-transform: uppercase;\n}\n\n.blockquote {\n  margin-bottom: 1rem;\n  font-size: 1.25rem;\n}\n\n.blockquote > :last-child {\n  margin-bottom: 0;\n}\n\n.blockquote-footer {\n  margin-top: -1rem;\n  margin-bottom: 1rem;\n  font-size: 0.875em;\n  color: #868e96;\n}\n\n.blockquote-footer::before {\n  content: \"\\2014\\00A0\";\n}\n\n.img-fluid {\n  max-width: 100%;\n  height: auto;\n}\n\n.img-thumbnail {\n  padding: 0.25rem;\n  background-color: #0f2537;\n  border: 1px solid #dee2e6;\n  border-radius: 0;\n  max-width: 100%;\n  height: auto;\n}\n\n.figure {\n  display: inline-block;\n}\n\n.figure-img {\n  margin-bottom: 0.5rem;\n  line-height: 1;\n}\n\n.figure-caption {\n  font-size: 0.875em;\n  color: #868e96;\n}\n\n.container,\n.container-fluid,\n.container-sm,\n.container-md,\n.container-lg,\n.container-xl,\n.container-xxl {\n  width: 100%;\n  padding-right: var(--bs-gutter-x, 0.75rem);\n  padding-left: var(--bs-gutter-x, 0.75rem);\n  margin-right: auto;\n  margin-left: auto;\n}\n\n@media (min-width: 576px) {\n  .container, .container-sm {\n    max-width: 540px;\n  }\n}\n\n@media (min-width: 768px) {\n  .container, .container-sm, .container-md {\n    max-width: 720px;\n  }\n}\n\n@media (min-width: 992px) {\n  .container, .container-sm, .container-md, .container-lg {\n    max-width: 960px;\n  }\n}\n\n@media (min-width: 1200px) {\n  .container, .container-sm, .container-md, .container-lg, .container-xl {\n    max-width: 1140px;\n  }\n}\n\n@media (min-width: 1400px) {\n  .container, .container-sm, .container-md, .container-lg, .container-xl, .container-xxl {\n    max-width: 1320px;\n  }\n}\n\n.row {\n  --bs-gutter-x: 1.5rem;\n  --bs-gutter-y: 0;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n  flex-wrap: wrap;\n  margin-top: calc(-1 * var(--bs-gutter-y));\n  margin-right: calc(-.5 * var(--bs-gutter-x));\n  margin-left: calc(-.5 * var(--bs-gutter-x));\n}\n\n.row > * {\n  -ms-flex-negative: 0;\n  flex-shrink: 0;\n  width: 100%;\n  max-width: 100%;\n  padding-right: calc(var(--bs-gutter-x) * .5);\n  padding-left: calc(var(--bs-gutter-x) * .5);\n  margin-top: var(--bs-gutter-y);\n}\n\n.col {\n  -ms-flex: 1 0 0%;\n  flex: 1 0 0%;\n}\n\n.row-cols-auto > * {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: auto;\n}\n\n.row-cols-1 > * {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 100%;\n}\n\n.row-cols-2 > * {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 50%;\n}\n\n.row-cols-3 > * {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 33.333333%;\n}\n\n.row-cols-4 > * {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 25%;\n}\n\n.row-cols-5 > * {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 20%;\n}\n\n.row-cols-6 > * {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 16.666667%;\n}\n\n.col-auto {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: auto;\n}\n\n.col-1 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 8.333333%;\n}\n\n.col-2 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 16.666667%;\n}\n\n.col-3 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 25%;\n}\n\n.col-4 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 33.333333%;\n}\n\n.col-5 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 41.666667%;\n}\n\n.col-6 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 50%;\n}\n\n.col-7 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 58.333333%;\n}\n\n.col-8 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 66.666667%;\n}\n\n.col-9 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 75%;\n}\n\n.col-10 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 83.333333%;\n}\n\n.col-11 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 91.666667%;\n}\n\n.col-12 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 100%;\n}\n\n.offset-1 {\n  margin-left: 8.333333%;\n}\n\n.offset-2 {\n  margin-left: 16.666667%;\n}\n\n.offset-3 {\n  margin-left: 25%;\n}\n\n.offset-4 {\n  margin-left: 33.333333%;\n}\n\n.offset-5 {\n  margin-left: 41.666667%;\n}\n\n.offset-6 {\n  margin-left: 50%;\n}\n\n.offset-7 {\n  margin-left: 58.333333%;\n}\n\n.offset-8 {\n  margin-left: 66.666667%;\n}\n\n.offset-9 {\n  margin-left: 75%;\n}\n\n.offset-10 {\n  margin-left: 83.333333%;\n}\n\n.offset-11 {\n  margin-left: 91.666667%;\n}\n\n.g-0,\n.gx-0 {\n  --bs-gutter-x: 0;\n}\n\n.g-0,\n.gy-0 {\n  --bs-gutter-y: 0;\n}\n\n.g-1,\n.gx-1 {\n  --bs-gutter-x: 0.25rem;\n}\n\n.g-1,\n.gy-1 {\n  --bs-gutter-y: 0.25rem;\n}\n\n.g-2,\n.gx-2 {\n  --bs-gutter-x: 0.5rem;\n}\n\n.g-2,\n.gy-2 {\n  --bs-gutter-y: 0.5rem;\n}\n\n.g-3,\n.gx-3 {\n  --bs-gutter-x: 1rem;\n}\n\n.g-3,\n.gy-3 {\n  --bs-gutter-y: 1rem;\n}\n\n.g-4,\n.gx-4 {\n  --bs-gutter-x: 1.5rem;\n}\n\n.g-4,\n.gy-4 {\n  --bs-gutter-y: 1.5rem;\n}\n\n.g-5,\n.gx-5 {\n  --bs-gutter-x: 3rem;\n}\n\n.g-5,\n.gy-5 {\n  --bs-gutter-y: 3rem;\n}\n\n@media (min-width: 576px) {\n  .col-sm {\n    -ms-flex: 1 0 0%;\n    flex: 1 0 0%;\n  }\n  .row-cols-sm-auto > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .row-cols-sm-1 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .row-cols-sm-2 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .row-cols-sm-3 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 33.333333%;\n  }\n  .row-cols-sm-4 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .row-cols-sm-5 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 20%;\n  }\n  .row-cols-sm-6 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 16.666667%;\n  }\n  .col-sm-auto {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .col-sm-1 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 8.333333%;\n  }\n  .col-sm-2 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 16.666667%;\n  }\n  .col-sm-3 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .col-sm-4 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 33.333333%;\n  }\n  .col-sm-5 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 41.666667%;\n  }\n  .col-sm-6 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .col-sm-7 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 58.333333%;\n  }\n  .col-sm-8 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 66.666667%;\n  }\n  .col-sm-9 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 75%;\n  }\n  .col-sm-10 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 83.333333%;\n  }\n  .col-sm-11 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 91.666667%;\n  }\n  .col-sm-12 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .offset-sm-0 {\n    margin-left: 0;\n  }\n  .offset-sm-1 {\n    margin-left: 8.333333%;\n  }\n  .offset-sm-2 {\n    margin-left: 16.666667%;\n  }\n  .offset-sm-3 {\n    margin-left: 25%;\n  }\n  .offset-sm-4 {\n    margin-left: 33.333333%;\n  }\n  .offset-sm-5 {\n    margin-left: 41.666667%;\n  }\n  .offset-sm-6 {\n    margin-left: 50%;\n  }\n  .offset-sm-7 {\n    margin-left: 58.333333%;\n  }\n  .offset-sm-8 {\n    margin-left: 66.666667%;\n  }\n  .offset-sm-9 {\n    margin-left: 75%;\n  }\n  .offset-sm-10 {\n    margin-left: 83.333333%;\n  }\n  .offset-sm-11 {\n    margin-left: 91.666667%;\n  }\n  .g-sm-0,\n  .gx-sm-0 {\n    --bs-gutter-x: 0;\n  }\n  .g-sm-0,\n  .gy-sm-0 {\n    --bs-gutter-y: 0;\n  }\n  .g-sm-1,\n  .gx-sm-1 {\n    --bs-gutter-x: 0.25rem;\n  }\n  .g-sm-1,\n  .gy-sm-1 {\n    --bs-gutter-y: 0.25rem;\n  }\n  .g-sm-2,\n  .gx-sm-2 {\n    --bs-gutter-x: 0.5rem;\n  }\n  .g-sm-2,\n  .gy-sm-2 {\n    --bs-gutter-y: 0.5rem;\n  }\n  .g-sm-3,\n  .gx-sm-3 {\n    --bs-gutter-x: 1rem;\n  }\n  .g-sm-3,\n  .gy-sm-3 {\n    --bs-gutter-y: 1rem;\n  }\n  .g-sm-4,\n  .gx-sm-4 {\n    --bs-gutter-x: 1.5rem;\n  }\n  .g-sm-4,\n  .gy-sm-4 {\n    --bs-gutter-y: 1.5rem;\n  }\n  .g-sm-5,\n  .gx-sm-5 {\n    --bs-gutter-x: 3rem;\n  }\n  .g-sm-5,\n  .gy-sm-5 {\n    --bs-gutter-y: 3rem;\n  }\n}\n\n@media (min-width: 768px) {\n  .col-md {\n    -ms-flex: 1 0 0%;\n    flex: 1 0 0%;\n  }\n  .row-cols-md-auto > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .row-cols-md-1 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .row-cols-md-2 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .row-cols-md-3 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 33.333333%;\n  }\n  .row-cols-md-4 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .row-cols-md-5 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 20%;\n  }\n  .row-cols-md-6 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 16.666667%;\n  }\n  .col-md-auto {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .col-md-1 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 8.333333%;\n  }\n  .col-md-2 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 16.666667%;\n  }\n  .col-md-3 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .col-md-4 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 33.333333%;\n  }\n  .col-md-5 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 41.666667%;\n  }\n  .col-md-6 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .col-md-7 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 58.333333%;\n  }\n  .col-md-8 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 66.666667%;\n  }\n  .col-md-9 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 75%;\n  }\n  .col-md-10 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 83.333333%;\n  }\n  .col-md-11 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 91.666667%;\n  }\n  .col-md-12 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .offset-md-0 {\n    margin-left: 0;\n  }\n  .offset-md-1 {\n    margin-left: 8.333333%;\n  }\n  .offset-md-2 {\n    margin-left: 16.666667%;\n  }\n  .offset-md-3 {\n    margin-left: 25%;\n  }\n  .offset-md-4 {\n    margin-left: 33.333333%;\n  }\n  .offset-md-5 {\n    margin-left: 41.666667%;\n  }\n  .offset-md-6 {\n    margin-left: 50%;\n  }\n  .offset-md-7 {\n    margin-left: 58.333333%;\n  }\n  .offset-md-8 {\n    margin-left: 66.666667%;\n  }\n  .offset-md-9 {\n    margin-left: 75%;\n  }\n  .offset-md-10 {\n    margin-left: 83.333333%;\n  }\n  .offset-md-11 {\n    margin-left: 91.666667%;\n  }\n  .g-md-0,\n  .gx-md-0 {\n    --bs-gutter-x: 0;\n  }\n  .g-md-0,\n  .gy-md-0 {\n    --bs-gutter-y: 0;\n  }\n  .g-md-1,\n  .gx-md-1 {\n    --bs-gutter-x: 0.25rem;\n  }\n  .g-md-1,\n  .gy-md-1 {\n    --bs-gutter-y: 0.25rem;\n  }\n  .g-md-2,\n  .gx-md-2 {\n    --bs-gutter-x: 0.5rem;\n  }\n  .g-md-2,\n  .gy-md-2 {\n    --bs-gutter-y: 0.5rem;\n  }\n  .g-md-3,\n  .gx-md-3 {\n    --bs-gutter-x: 1rem;\n  }\n  .g-md-3,\n  .gy-md-3 {\n    --bs-gutter-y: 1rem;\n  }\n  .g-md-4,\n  .gx-md-4 {\n    --bs-gutter-x: 1.5rem;\n  }\n  .g-md-4,\n  .gy-md-4 {\n    --bs-gutter-y: 1.5rem;\n  }\n  .g-md-5,\n  .gx-md-5 {\n    --bs-gutter-x: 3rem;\n  }\n  .g-md-5,\n  .gy-md-5 {\n    --bs-gutter-y: 3rem;\n  }\n}\n\n@media (min-width: 992px) {\n  .col-lg {\n    -ms-flex: 1 0 0%;\n    flex: 1 0 0%;\n  }\n  .row-cols-lg-auto > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .row-cols-lg-1 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .row-cols-lg-2 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .row-cols-lg-3 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 33.333333%;\n  }\n  .row-cols-lg-4 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .row-cols-lg-5 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 20%;\n  }\n  .row-cols-lg-6 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 16.666667%;\n  }\n  .col-lg-auto {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .col-lg-1 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 8.333333%;\n  }\n  .col-lg-2 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 16.666667%;\n  }\n  .col-lg-3 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .col-lg-4 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 33.333333%;\n  }\n  .col-lg-5 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 41.666667%;\n  }\n  .col-lg-6 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .col-lg-7 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 58.333333%;\n  }\n  .col-lg-8 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 66.666667%;\n  }\n  .col-lg-9 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 75%;\n  }\n  .col-lg-10 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 83.333333%;\n  }\n  .col-lg-11 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 91.666667%;\n  }\n  .col-lg-12 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .offset-lg-0 {\n    margin-left: 0;\n  }\n  .offset-lg-1 {\n    margin-left: 8.333333%;\n  }\n  .offset-lg-2 {\n    margin-left: 16.666667%;\n  }\n  .offset-lg-3 {\n    margin-left: 25%;\n  }\n  .offset-lg-4 {\n    margin-left: 33.333333%;\n  }\n  .offset-lg-5 {\n    margin-left: 41.666667%;\n  }\n  .offset-lg-6 {\n    margin-left: 50%;\n  }\n  .offset-lg-7 {\n    margin-left: 58.333333%;\n  }\n  .offset-lg-8 {\n    margin-left: 66.666667%;\n  }\n  .offset-lg-9 {\n    margin-left: 75%;\n  }\n  .offset-lg-10 {\n    margin-left: 83.333333%;\n  }\n  .offset-lg-11 {\n    margin-left: 91.666667%;\n  }\n  .g-lg-0,\n  .gx-lg-0 {\n    --bs-gutter-x: 0;\n  }\n  .g-lg-0,\n  .gy-lg-0 {\n    --bs-gutter-y: 0;\n  }\n  .g-lg-1,\n  .gx-lg-1 {\n    --bs-gutter-x: 0.25rem;\n  }\n  .g-lg-1,\n  .gy-lg-1 {\n    --bs-gutter-y: 0.25rem;\n  }\n  .g-lg-2,\n  .gx-lg-2 {\n    --bs-gutter-x: 0.5rem;\n  }\n  .g-lg-2,\n  .gy-lg-2 {\n    --bs-gutter-y: 0.5rem;\n  }\n  .g-lg-3,\n  .gx-lg-3 {\n    --bs-gutter-x: 1rem;\n  }\n  .g-lg-3,\n  .gy-lg-3 {\n    --bs-gutter-y: 1rem;\n  }\n  .g-lg-4,\n  .gx-lg-4 {\n    --bs-gutter-x: 1.5rem;\n  }\n  .g-lg-4,\n  .gy-lg-4 {\n    --bs-gutter-y: 1.5rem;\n  }\n  .g-lg-5,\n  .gx-lg-5 {\n    --bs-gutter-x: 3rem;\n  }\n  .g-lg-5,\n  .gy-lg-5 {\n    --bs-gutter-y: 3rem;\n  }\n}\n\n@media (min-width: 1200px) {\n  .col-xl {\n    -ms-flex: 1 0 0%;\n    flex: 1 0 0%;\n  }\n  .row-cols-xl-auto > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .row-cols-xl-1 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .row-cols-xl-2 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .row-cols-xl-3 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 33.333333%;\n  }\n  .row-cols-xl-4 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .row-cols-xl-5 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 20%;\n  }\n  .row-cols-xl-6 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 16.666667%;\n  }\n  .col-xl-auto {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .col-xl-1 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 8.333333%;\n  }\n  .col-xl-2 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 16.666667%;\n  }\n  .col-xl-3 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .col-xl-4 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 33.333333%;\n  }\n  .col-xl-5 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 41.666667%;\n  }\n  .col-xl-6 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .col-xl-7 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 58.333333%;\n  }\n  .col-xl-8 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 66.666667%;\n  }\n  .col-xl-9 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 75%;\n  }\n  .col-xl-10 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 83.333333%;\n  }\n  .col-xl-11 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 91.666667%;\n  }\n  .col-xl-12 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .offset-xl-0 {\n    margin-left: 0;\n  }\n  .offset-xl-1 {\n    margin-left: 8.333333%;\n  }\n  .offset-xl-2 {\n    margin-left: 16.666667%;\n  }\n  .offset-xl-3 {\n    margin-left: 25%;\n  }\n  .offset-xl-4 {\n    margin-left: 33.333333%;\n  }\n  .offset-xl-5 {\n    margin-left: 41.666667%;\n  }\n  .offset-xl-6 {\n    margin-left: 50%;\n  }\n  .offset-xl-7 {\n    margin-left: 58.333333%;\n  }\n  .offset-xl-8 {\n    margin-left: 66.666667%;\n  }\n  .offset-xl-9 {\n    margin-left: 75%;\n  }\n  .offset-xl-10 {\n    margin-left: 83.333333%;\n  }\n  .offset-xl-11 {\n    margin-left: 91.666667%;\n  }\n  .g-xl-0,\n  .gx-xl-0 {\n    --bs-gutter-x: 0;\n  }\n  .g-xl-0,\n  .gy-xl-0 {\n    --bs-gutter-y: 0;\n  }\n  .g-xl-1,\n  .gx-xl-1 {\n    --bs-gutter-x: 0.25rem;\n  }\n  .g-xl-1,\n  .gy-xl-1 {\n    --bs-gutter-y: 0.25rem;\n  }\n  .g-xl-2,\n  .gx-xl-2 {\n    --bs-gutter-x: 0.5rem;\n  }\n  .g-xl-2,\n  .gy-xl-2 {\n    --bs-gutter-y: 0.5rem;\n  }\n  .g-xl-3,\n  .gx-xl-3 {\n    --bs-gutter-x: 1rem;\n  }\n  .g-xl-3,\n  .gy-xl-3 {\n    --bs-gutter-y: 1rem;\n  }\n  .g-xl-4,\n  .gx-xl-4 {\n    --bs-gutter-x: 1.5rem;\n  }\n  .g-xl-4,\n  .gy-xl-4 {\n    --bs-gutter-y: 1.5rem;\n  }\n  .g-xl-5,\n  .gx-xl-5 {\n    --bs-gutter-x: 3rem;\n  }\n  .g-xl-5,\n  .gy-xl-5 {\n    --bs-gutter-y: 3rem;\n  }\n}\n\n@media (min-width: 1400px) {\n  .col-xxl {\n    -ms-flex: 1 0 0%;\n    flex: 1 0 0%;\n  }\n  .row-cols-xxl-auto > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .row-cols-xxl-1 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .row-cols-xxl-2 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .row-cols-xxl-3 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 33.333333%;\n  }\n  .row-cols-xxl-4 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .row-cols-xxl-5 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 20%;\n  }\n  .row-cols-xxl-6 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 16.666667%;\n  }\n  .col-xxl-auto {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .col-xxl-1 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 8.333333%;\n  }\n  .col-xxl-2 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 16.666667%;\n  }\n  .col-xxl-3 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .col-xxl-4 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 33.333333%;\n  }\n  .col-xxl-5 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 41.666667%;\n  }\n  .col-xxl-6 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .col-xxl-7 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 58.333333%;\n  }\n  .col-xxl-8 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 66.666667%;\n  }\n  .col-xxl-9 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 75%;\n  }\n  .col-xxl-10 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 83.333333%;\n  }\n  .col-xxl-11 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 91.666667%;\n  }\n  .col-xxl-12 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .offset-xxl-0 {\n    margin-left: 0;\n  }\n  .offset-xxl-1 {\n    margin-left: 8.333333%;\n  }\n  .offset-xxl-2 {\n    margin-left: 16.666667%;\n  }\n  .offset-xxl-3 {\n    margin-left: 25%;\n  }\n  .offset-xxl-4 {\n    margin-left: 33.333333%;\n  }\n  .offset-xxl-5 {\n    margin-left: 41.666667%;\n  }\n  .offset-xxl-6 {\n    margin-left: 50%;\n  }\n  .offset-xxl-7 {\n    margin-left: 58.333333%;\n  }\n  .offset-xxl-8 {\n    margin-left: 66.666667%;\n  }\n  .offset-xxl-9 {\n    margin-left: 75%;\n  }\n  .offset-xxl-10 {\n    margin-left: 83.333333%;\n  }\n  .offset-xxl-11 {\n    margin-left: 91.666667%;\n  }\n  .g-xxl-0,\n  .gx-xxl-0 {\n    --bs-gutter-x: 0;\n  }\n  .g-xxl-0,\n  .gy-xxl-0 {\n    --bs-gutter-y: 0;\n  }\n  .g-xxl-1,\n  .gx-xxl-1 {\n    --bs-gutter-x: 0.25rem;\n  }\n  .g-xxl-1,\n  .gy-xxl-1 {\n    --bs-gutter-y: 0.25rem;\n  }\n  .g-xxl-2,\n  .gx-xxl-2 {\n    --bs-gutter-x: 0.5rem;\n  }\n  .g-xxl-2,\n  .gy-xxl-2 {\n    --bs-gutter-y: 0.5rem;\n  }\n  .g-xxl-3,\n  .gx-xxl-3 {\n    --bs-gutter-x: 1rem;\n  }\n  .g-xxl-3,\n  .gy-xxl-3 {\n    --bs-gutter-y: 1rem;\n  }\n  .g-xxl-4,\n  .gx-xxl-4 {\n    --bs-gutter-x: 1.5rem;\n  }\n  .g-xxl-4,\n  .gy-xxl-4 {\n    --bs-gutter-y: 1.5rem;\n  }\n  .g-xxl-5,\n  .gx-xxl-5 {\n    --bs-gutter-x: 3rem;\n  }\n  .g-xxl-5,\n  .gy-xxl-5 {\n    --bs-gutter-y: 3rem;\n  }\n}\n\n.table {\n  --bs-table-bg: transparent;\n  --bs-table-accent-bg: rgba(255, 255, 255, 0.05);\n  --bs-table-striped-color: #ebebeb;\n  --bs-table-striped-bg: rgba(0, 0, 0, 0.05);\n  --bs-table-active-color: #ebebeb;\n  --bs-table-active-bg: rgba(0, 0, 0, 0.1);\n  --bs-table-hover-color: #ebebeb;\n  --bs-table-hover-bg: rgba(255, 255, 255, 0.075);\n  width: 100%;\n  margin-bottom: 1rem;\n  color: #ebebeb;\n  vertical-align: top;\n  border-color: rgba(0, 0, 0, 0.15);\n}\n\n.table > :not(caption) > * > * {\n  padding: 0.5rem 0.5rem;\n  background-color: var(--bs-table-bg);\n  border-bottom-width: 1px;\n  box-shadow: inset 0 0 0 9999px var(--bs-table-accent-bg);\n}\n\n.table > tbody {\n  vertical-align: inherit;\n}\n\n.table > thead {\n  vertical-align: bottom;\n}\n\n.table > :not(:first-child) {\n  border-top: 2px solid currentColor;\n}\n\n.caption-top {\n  caption-side: top;\n}\n\n.table-sm > :not(caption) > * > * {\n  padding: 0.25rem 0.25rem;\n}\n\n.table-bordered > :not(caption) > * {\n  border-width: 1px 0;\n}\n\n.table-bordered > :not(caption) > * > * {\n  border-width: 0 1px;\n}\n\n.table-borderless > :not(caption) > * > * {\n  border-bottom-width: 0;\n}\n\n.table-borderless > :not(:first-child) {\n  border-top-width: 0;\n}\n\n.table-striped > tbody > tr:nth-of-type(odd) > * {\n  --bs-table-accent-bg: var(--bs-table-striped-bg);\n  color: var(--bs-table-striped-color);\n}\n\n.table-active {\n  --bs-table-accent-bg: var(--bs-table-active-bg);\n  color: var(--bs-table-active-color);\n}\n\n.table-hover > tbody > tr:hover > * {\n  --bs-table-accent-bg: var(--bs-table-hover-bg);\n  color: var(--bs-table-hover-color);\n}\n\n.table-primary {\n  --bs-table-bg: #4c9be8;\n  --bs-table-striped-bg: #55a0e9;\n  --bs-table-striped-color: #fff;\n  --bs-table-active-bg: #5ea5ea;\n  --bs-table-active-color: #fff;\n  --bs-table-hover-bg: #59a3ea;\n  --bs-table-hover-color: #fff;\n  color: #fff;\n  border-color: #5ea5ea;\n}\n\n.table-secondary {\n  --bs-table-bg: #4e5d6c;\n  --bs-table-striped-bg: #576573;\n  --bs-table-striped-color: #fff;\n  --bs-table-active-bg: #606d7b;\n  --bs-table-active-color: #fff;\n  --bs-table-hover-bg: #5b6977;\n  --bs-table-hover-color: #fff;\n  color: #fff;\n  border-color: #606d7b;\n}\n\n.table-success {\n  --bs-table-bg: #5cb85c;\n  --bs-table-striped-bg: #64bc64;\n  --bs-table-striped-color: #fff;\n  --bs-table-active-bg: #6cbf6c;\n  --bs-table-active-color: #fff;\n  --bs-table-hover-bg: #68bd68;\n  --bs-table-hover-color: #fff;\n  color: #fff;\n  border-color: #6cbf6c;\n}\n\n.table-info {\n  --bs-table-bg: #5bc0de;\n  --bs-table-striped-bg: #63c3e0;\n  --bs-table-striped-color: #fff;\n  --bs-table-active-bg: #6bc6e1;\n  --bs-table-active-color: #fff;\n  --bs-table-hover-bg: #67c5e0;\n  --bs-table-hover-color: #fff;\n  color: #fff;\n  border-color: #6bc6e1;\n}\n\n.table-warning {\n  --bs-table-bg: #ffc107;\n  --bs-table-striped-bg: #ffc413;\n  --bs-table-striped-color: #000;\n  --bs-table-active-bg: #ffc720;\n  --bs-table-active-color: #000;\n  --bs-table-hover-bg: #ffc61a;\n  --bs-table-hover-color: #000;\n  color: #fff;\n  border-color: #ffc720;\n}\n\n.table-danger {\n  --bs-table-bg: #d9534f;\n  --bs-table-striped-bg: #db5c58;\n  --bs-table-striped-color: #fff;\n  --bs-table-active-bg: #dd6461;\n  --bs-table-active-color: #fff;\n  --bs-table-hover-bg: #dc605c;\n  --bs-table-hover-color: #fff;\n  color: #fff;\n  border-color: #dd6461;\n}\n\n.table-light {\n  --bs-table-bg: #abb6c2;\n  --bs-table-striped-bg: #afbac5;\n  --bs-table-striped-color: #fff;\n  --bs-table-active-bg: #b3bec8;\n  --bs-table-active-color: #fff;\n  --bs-table-hover-bg: #b1bcc7;\n  --bs-table-hover-color: #fff;\n  color: #fff;\n  border-color: #b3bec8;\n}\n\n.table-dark {\n  --bs-table-bg: #20374c;\n  --bs-table-striped-bg: #2b4155;\n  --bs-table-striped-color: #fff;\n  --bs-table-active-bg: #364b5e;\n  --bs-table-active-color: #fff;\n  --bs-table-hover-bg: #314659;\n  --bs-table-hover-color: #fff;\n  color: #fff;\n  border-color: #364b5e;\n}\n\n.table-responsive {\n  overflow-x: auto;\n  -webkit-overflow-scrolling: touch;\n}\n\n@media (max-width: 575.98px) {\n  .table-responsive-sm {\n    overflow-x: auto;\n    -webkit-overflow-scrolling: touch;\n  }\n}\n\n@media (max-width: 767.98px) {\n  .table-responsive-md {\n    overflow-x: auto;\n    -webkit-overflow-scrolling: touch;\n  }\n}\n\n@media (max-width: 991.98px) {\n  .table-responsive-lg {\n    overflow-x: auto;\n    -webkit-overflow-scrolling: touch;\n  }\n}\n\n@media (max-width: 1199.98px) {\n  .table-responsive-xl {\n    overflow-x: auto;\n    -webkit-overflow-scrolling: touch;\n  }\n}\n\n@media (max-width: 1399.98px) {\n  .table-responsive-xxl {\n    overflow-x: auto;\n    -webkit-overflow-scrolling: touch;\n  }\n}\n\n.form-label {\n  margin-bottom: 0.5rem;\n}\n\n.col-form-label {\n  padding-top: 0.375rem;\n  padding-bottom: 0.375rem;\n  margin-bottom: 0;\n  font-size: inherit;\n  line-height: 1.5;\n}\n\n.col-form-label-lg {\n  padding-top: 0.5rem;\n  padding-bottom: 0.5rem;\n  font-size: 1.25rem;\n}\n\n.col-form-label-sm {\n  padding-top: 0.25rem;\n  padding-bottom: 0.25rem;\n  font-size: 0.875rem;\n}\n\n.form-text {\n  margin-top: 0.25rem;\n  font-size: 0.875em;\n  color: rgba(255, 255, 255, 0.4);\n}\n\n.form-control {\n  display: block;\n  width: 100%;\n  padding: 0.375rem 0.75rem;\n  font-size: 1rem;\n  font-weight: 400;\n  line-height: 1.5;\n  color: #212529;\n  background-color: #fff;\n  background-clip: padding-box;\n  border: 0 solid transparent;\n  -webkit-appearance: none;\n  -moz-appearance: none;\n  appearance: none;\n  border-radius: 0;\n  transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .form-control {\n    transition: none;\n  }\n}\n\n.form-control[type=\"file\"] {\n  overflow: hidden;\n}\n\n.form-control[type=\"file\"]:not(:disabled):not([readonly]) {\n  cursor: pointer;\n}\n\n.form-control:focus {\n  color: #212529;\n  background-color: #fff;\n  border-color: #a6cdf4;\n  outline: 0;\n  box-shadow: 0 0 0 0.25rem rgba(76, 155, 232, 0.25);\n}\n\n.form-control::-webkit-date-and-time-value {\n  height: 1.5em;\n}\n\n.form-control::-webkit-input-placeholder {\n  color: #868e96;\n  opacity: 1;\n}\n\n.form-control::-moz-placeholder {\n  color: #868e96;\n  opacity: 1;\n}\n\n.form-control:-ms-input-placeholder {\n  color: #868e96;\n  opacity: 1;\n}\n\n.form-control::-ms-input-placeholder {\n  color: #868e96;\n  opacity: 1;\n}\n\n.form-control::placeholder {\n  color: #868e96;\n  opacity: 1;\n}\n\n.form-control:disabled, .form-control[readonly] {\n  background-color: #ebebeb;\n  opacity: 1;\n}\n\n.form-control::file-selector-button {\n  padding: 0.375rem 0.75rem;\n  margin: -0.375rem -0.75rem;\n  -webkit-margin-end: 0.75rem;\n  -moz-margin-end: 0.75rem;\n  margin-inline-end: 0.75rem;\n  color: #ebebeb;\n  background-color: #4e5d6c;\n  pointer-events: none;\n  border-color: inherit;\n  border-style: solid;\n  border-width: 0;\n  border-inline-end-width: 0;\n  border-radius: 0;\n  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .form-control::file-selector-button {\n    transition: none;\n  }\n}\n\n.form-control:hover:not(:disabled):not([readonly])::file-selector-button {\n  background-color: #4a5867;\n}\n\n.form-control::-webkit-file-upload-button {\n  padding: 0.375rem 0.75rem;\n  margin: -0.375rem -0.75rem;\n  -webkit-margin-end: 0.75rem;\n  margin-inline-end: 0.75rem;\n  color: #ebebeb;\n  background-color: #4e5d6c;\n  pointer-events: none;\n  border-color: inherit;\n  border-style: solid;\n  border-width: 0;\n  border-inline-end-width: 0;\n  border-radius: 0;\n  -webkit-transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .form-control::-webkit-file-upload-button {\n    -webkit-transition: none;\n    transition: none;\n  }\n}\n\n.form-control:hover:not(:disabled):not([readonly])::-webkit-file-upload-button {\n  background-color: #4a5867;\n}\n\n.form-control-plaintext {\n  display: block;\n  width: 100%;\n  padding: 0.375rem 0;\n  margin-bottom: 0;\n  line-height: 1.5;\n  color: #ebebeb;\n  background-color: transparent;\n  border: solid transparent;\n  border-width: 0 0;\n}\n\n.form-control-plaintext.form-control-sm, .form-control-plaintext.form-control-lg {\n  padding-right: 0;\n  padding-left: 0;\n}\n\n.form-control-sm {\n  min-height: calc(1.5em + 0.5rem);\n  padding: 0.25rem 0.5rem;\n  font-size: 0.875rem;\n  border-radius: 0;\n}\n\n.form-control-sm::file-selector-button {\n  padding: 0.25rem 0.5rem;\n  margin: -0.25rem -0.5rem;\n  -webkit-margin-end: 0.5rem;\n  -moz-margin-end: 0.5rem;\n  margin-inline-end: 0.5rem;\n}\n\n.form-control-sm::-webkit-file-upload-button {\n  padding: 0.25rem 0.5rem;\n  margin: -0.25rem -0.5rem;\n  -webkit-margin-end: 0.5rem;\n  margin-inline-end: 0.5rem;\n}\n\n.form-control-lg {\n  min-height: calc(1.5em + 1rem);\n  padding: 0.5rem 1rem;\n  font-size: 1.25rem;\n  border-radius: 0;\n}\n\n.form-control-lg::file-selector-button {\n  padding: 0.5rem 1rem;\n  margin: -0.5rem -1rem;\n  -webkit-margin-end: 1rem;\n  -moz-margin-end: 1rem;\n  margin-inline-end: 1rem;\n}\n\n.form-control-lg::-webkit-file-upload-button {\n  padding: 0.5rem 1rem;\n  margin: -0.5rem -1rem;\n  -webkit-margin-end: 1rem;\n  margin-inline-end: 1rem;\n}\n\ntextarea.form-control {\n  min-height: calc(1.5em + 0.75rem);\n}\n\ntextarea.form-control-sm {\n  min-height: calc(1.5em + 0.5rem);\n}\n\ntextarea.form-control-lg {\n  min-height: calc(1.5em + 1rem);\n}\n\n.form-control-color {\n  width: 3rem;\n  height: auto;\n  padding: 0.375rem;\n}\n\n.form-control-color:not(:disabled):not([readonly]) {\n  cursor: pointer;\n}\n\n.form-control-color::-moz-color-swatch {\n  height: 1.5em;\n  border-radius: 0;\n}\n\n.form-control-color::-webkit-color-swatch {\n  height: 1.5em;\n  border-radius: 0;\n}\n\n.form-select {\n  display: block;\n  width: 100%;\n  padding: 0.375rem 2.25rem 0.375rem 0.75rem;\n  -moz-padding-start: calc(0.75rem - 3px);\n  font-size: 1rem;\n  font-weight: 400;\n  line-height: 1.5;\n  color: #212529;\n  background-color: #fff;\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e\");\n  background-repeat: no-repeat;\n  background-position: right 0.75rem center;\n  background-size: 16px 12px;\n  border: 0 solid transparent;\n  border-radius: 0;\n  transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n  -webkit-appearance: none;\n  -moz-appearance: none;\n  appearance: none;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .form-select {\n    transition: none;\n  }\n}\n\n.form-select:focus {\n  border-color: #a6cdf4;\n  outline: 0;\n  box-shadow: 0 0 0 0.25rem rgba(76, 155, 232, 0.25);\n}\n\n.form-select[multiple], .form-select[size]:not([size=\"1\"]) {\n  padding-right: 0.75rem;\n  background-image: none;\n}\n\n.form-select:disabled {\n  background-color: #4e5d6c;\n}\n\n.form-select:-moz-focusring {\n  color: transparent;\n  text-shadow: 0 0 0 #212529;\n}\n\n.form-select-sm {\n  padding-top: 0.25rem;\n  padding-bottom: 0.25rem;\n  padding-left: 0.5rem;\n  font-size: 0.875rem;\n  border-radius: 0;\n}\n\n.form-select-lg {\n  padding-top: 0.5rem;\n  padding-bottom: 0.5rem;\n  padding-left: 1rem;\n  font-size: 1.25rem;\n  border-radius: 0;\n}\n\n.form-check {\n  display: block;\n  min-height: 1.5rem;\n  padding-left: 1.5em;\n  margin-bottom: 0.125rem;\n}\n\n.form-check .form-check-input {\n  float: left;\n  margin-left: -1.5em;\n}\n\n.form-check-input {\n  width: 1em;\n  height: 1em;\n  margin-top: 0.25em;\n  vertical-align: top;\n  background-color: #fff;\n  background-repeat: no-repeat;\n  background-position: center;\n  background-size: contain;\n  border: none;\n  -webkit-appearance: none;\n  -moz-appearance: none;\n  appearance: none;\n  -webkit-print-color-adjust: exact;\n  color-adjust: exact;\n}\n\n.form-check-input[type=\"checkbox\"] {\n  border-radius: 0.25em;\n}\n\n.form-check-input[type=\"radio\"] {\n  border-radius: 50%;\n}\n\n.form-check-input:active {\n  -webkit-filter: brightness(90%);\n  filter: brightness(90%);\n}\n\n.form-check-input:focus {\n  border-color: #a6cdf4;\n  outline: 0;\n  box-shadow: 0 0 0 0.25rem rgba(76, 155, 232, 0.25);\n}\n\n.form-check-input:checked {\n  background-color: #4c9be8;\n  border-color: #4c9be8;\n}\n\n.form-check-input:checked[type=\"checkbox\"] {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10l3 3l6-6'/%3e%3c/svg%3e\");\n}\n\n.form-check-input:checked[type=\"radio\"] {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='2' fill='%23fff'/%3e%3c/svg%3e\");\n}\n\n.form-check-input[type=\"checkbox\"]:indeterminate {\n  background-color: #4c9be8;\n  border-color: #4c9be8;\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10h8'/%3e%3c/svg%3e\");\n}\n\n.form-check-input:disabled {\n  pointer-events: none;\n  -webkit-filter: none;\n  filter: none;\n  opacity: 0.5;\n}\n\n.form-check-input[disabled] ~ .form-check-label, .form-check-input:disabled ~ .form-check-label {\n  opacity: 0.5;\n}\n\n.form-switch {\n  padding-left: 2.5em;\n}\n\n.form-switch .form-check-input {\n  width: 2em;\n  margin-left: -2.5em;\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%280, 0, 0, 0.25%29'/%3e%3c/svg%3e\");\n  background-position: left center;\n  border-radius: 2em;\n  transition: background-position 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .form-switch .form-check-input {\n    transition: none;\n  }\n}\n\n.form-switch .form-check-input:focus {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23a6cdf4'/%3e%3c/svg%3e\");\n}\n\n.form-switch .form-check-input:checked {\n  background-position: right center;\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e\");\n}\n\n.form-check-inline {\n  display: inline-block;\n  margin-right: 1rem;\n}\n\n.btn-check {\n  position: absolute;\n  clip: rect(0, 0, 0, 0);\n  pointer-events: none;\n}\n\n.btn-check[disabled] + .btn, .btn-check:disabled + .btn {\n  pointer-events: none;\n  -webkit-filter: none;\n  filter: none;\n  opacity: 0.65;\n}\n\n.form-range {\n  width: 100%;\n  height: 1.5rem;\n  padding: 0;\n  background-color: transparent;\n  -webkit-appearance: none;\n  -moz-appearance: none;\n  appearance: none;\n}\n\n.form-range:focus {\n  outline: 0;\n}\n\n.form-range:focus::-webkit-slider-thumb {\n  box-shadow: 0 0 0 1px #0f2537, 0 0 0 0.25rem rgba(76, 155, 232, 0.25);\n}\n\n.form-range:focus::-moz-range-thumb {\n  box-shadow: 0 0 0 1px #0f2537, 0 0 0 0.25rem rgba(76, 155, 232, 0.25);\n}\n\n.form-range::-moz-focus-outer {\n  border: 0;\n}\n\n.form-range::-webkit-slider-thumb {\n  width: 1rem;\n  height: 1rem;\n  margin-top: -0.25rem;\n  background-color: #4c9be8;\n  border: 0;\n  border-radius: 1rem;\n  -webkit-transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n  transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n  -webkit-appearance: none;\n  appearance: none;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .form-range::-webkit-slider-thumb {\n    -webkit-transition: none;\n    transition: none;\n  }\n}\n\n.form-range::-webkit-slider-thumb:active {\n  background-color: #c9e1f8;\n}\n\n.form-range::-webkit-slider-runnable-track {\n  width: 100%;\n  height: 0.5rem;\n  color: transparent;\n  cursor: pointer;\n  background-color: #dee2e6;\n  border-color: transparent;\n  border-radius: 1rem;\n}\n\n.form-range::-moz-range-thumb {\n  width: 1rem;\n  height: 1rem;\n  background-color: #4c9be8;\n  border: 0;\n  border-radius: 1rem;\n  -moz-transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n  transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n  -moz-appearance: none;\n  appearance: none;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .form-range::-moz-range-thumb {\n    -moz-transition: none;\n    transition: none;\n  }\n}\n\n.form-range::-moz-range-thumb:active {\n  background-color: #c9e1f8;\n}\n\n.form-range::-moz-range-track {\n  width: 100%;\n  height: 0.5rem;\n  color: transparent;\n  cursor: pointer;\n  background-color: #dee2e6;\n  border-color: transparent;\n  border-radius: 1rem;\n}\n\n.form-range:disabled {\n  pointer-events: none;\n}\n\n.form-range:disabled::-webkit-slider-thumb {\n  background-color: #adb5bd;\n}\n\n.form-range:disabled::-moz-range-thumb {\n  background-color: #adb5bd;\n}\n\n.form-floating {\n  position: relative;\n}\n\n.form-floating > .form-control,\n.form-floating > .form-select {\n  height: 3.5rem;\n  line-height: 1.25;\n}\n\n.form-floating > label {\n  position: absolute;\n  top: 0;\n  left: 0;\n  height: 100%;\n  padding: 1rem 0.75rem;\n  pointer-events: none;\n  border: 0 solid transparent;\n  -webkit-transform-origin: 0 0;\n  transform-origin: 0 0;\n  transition: opacity 0.1s ease-in-out, -webkit-transform 0.1s ease-in-out;\n  transition: opacity 0.1s ease-in-out, transform 0.1s ease-in-out;\n  transition: opacity 0.1s ease-in-out, transform 0.1s ease-in-out, -webkit-transform 0.1s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .form-floating > label {\n    transition: none;\n  }\n}\n\n.form-floating > .form-control {\n  padding: 1rem 0.75rem;\n}\n\n.form-floating > .form-control::-webkit-input-placeholder {\n  color: transparent;\n}\n\n.form-floating > .form-control::-moz-placeholder {\n  color: transparent;\n}\n\n.form-floating > .form-control:-ms-input-placeholder {\n  color: transparent;\n}\n\n.form-floating > .form-control::-ms-input-placeholder {\n  color: transparent;\n}\n\n.form-floating > .form-control::placeholder {\n  color: transparent;\n}\n\n.form-floating > .form-control:not(:-moz-placeholder-shown) {\n  padding-top: 1.625rem;\n  padding-bottom: 0.625rem;\n}\n\n.form-floating > .form-control:not(:-ms-input-placeholder) {\n  padding-top: 1.625rem;\n  padding-bottom: 0.625rem;\n}\n\n.form-floating > .form-control:focus, .form-floating > .form-control:not(:placeholder-shown) {\n  padding-top: 1.625rem;\n  padding-bottom: 0.625rem;\n}\n\n.form-floating > .form-control:-webkit-autofill {\n  padding-top: 1.625rem;\n  padding-bottom: 0.625rem;\n}\n\n.form-floating > .form-select {\n  padding-top: 1.625rem;\n  padding-bottom: 0.625rem;\n}\n\n.form-floating > .form-control:not(:-moz-placeholder-shown) ~ label {\n  opacity: 1;\n  transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);\n}\n\n.form-floating > .form-control:not(:-ms-input-placeholder) ~ label {\n  opacity: 1;\n  transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);\n}\n\n.form-floating > .form-control:focus ~ label,\n.form-floating > .form-control:not(:placeholder-shown) ~ label,\n.form-floating > .form-select ~ label {\n  opacity: 1;\n  -webkit-transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);\n  transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);\n}\n\n.form-floating > .form-control:-webkit-autofill ~ label {\n  opacity: 1;\n  -webkit-transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);\n  transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);\n}\n\n.input-group {\n  position: relative;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n  flex-wrap: wrap;\n  -ms-flex-align: stretch;\n  align-items: stretch;\n  width: 100%;\n}\n\n.input-group > .form-control,\n.input-group > .form-select {\n  position: relative;\n  -ms-flex: 1 1 auto;\n  flex: 1 1 auto;\n  width: 1%;\n  min-width: 0;\n}\n\n.input-group > .form-control:focus,\n.input-group > .form-select:focus {\n  z-index: 3;\n}\n\n.input-group .btn {\n  position: relative;\n  z-index: 2;\n}\n\n.input-group .btn:focus {\n  z-index: 3;\n}\n\n.input-group-text {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-align: center;\n  align-items: center;\n  padding: 0.375rem 0.75rem;\n  font-size: 1rem;\n  font-weight: 400;\n  line-height: 1.5;\n  color: #ebebeb;\n  text-align: center;\n  white-space: nowrap;\n  background-color: #4e5d6c;\n  border: 0 solid transparent;\n  border-radius: 0;\n}\n\n.input-group-lg > .form-control,\n.input-group-lg > .form-select,\n.input-group-lg > .input-group-text,\n.input-group-lg > .btn {\n  padding: 0.5rem 1rem;\n  font-size: 1.25rem;\n  border-radius: 0;\n}\n\n.input-group-sm > .form-control,\n.input-group-sm > .form-select,\n.input-group-sm > .input-group-text,\n.input-group-sm > .btn {\n  padding: 0.25rem 0.5rem;\n  font-size: 0.875rem;\n  border-radius: 0;\n}\n\n.input-group-lg > .form-select,\n.input-group-sm > .form-select {\n  padding-right: 3rem;\n}\n\n.input-group:not(.has-validation) > :not(:last-child):not(.dropdown-toggle):not(.dropdown-menu),\n.input-group:not(.has-validation) > .dropdown-toggle:nth-last-child(n + 3) {\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n}\n\n.input-group.has-validation > :nth-last-child(n + 3):not(.dropdown-toggle):not(.dropdown-menu),\n.input-group.has-validation > .dropdown-toggle:nth-last-child(n + 4) {\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n}\n\n.input-group > :not(:first-child):not(.dropdown-menu):not(.valid-tooltip):not(.valid-feedback):not(.invalid-tooltip):not(.invalid-feedback) {\n  margin-left: 0;\n  border-top-left-radius: 0;\n  border-bottom-left-radius: 0;\n}\n\n.valid-feedback {\n  display: none;\n  width: 100%;\n  margin-top: 0.25rem;\n  font-size: 0.875em;\n  color: #5cb85c;\n}\n\n.valid-tooltip {\n  position: absolute;\n  top: 100%;\n  z-index: 5;\n  display: none;\n  max-width: 100%;\n  padding: 0.25rem 0.5rem;\n  margin-top: .1rem;\n  font-size: 0.875rem;\n  color: #fff;\n  background-color: rgba(92, 184, 92, 0.9);\n  border-radius: 0;\n}\n\n.was-validated :valid ~ .valid-feedback,\n.was-validated :valid ~ .valid-tooltip,\n.is-valid ~ .valid-feedback,\n.is-valid ~ .valid-tooltip {\n  display: block;\n}\n\n.was-validated .form-control:valid, .form-control.is-valid {\n  border-color: #5cb85c;\n  padding-right: calc(1.5em + 0.75rem);\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%235cb85c' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e\");\n  background-repeat: no-repeat;\n  background-position: right calc(0.375em + 0.1875rem) center;\n  background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n\n.was-validated .form-control:valid:focus, .form-control.is-valid:focus {\n  border-color: #5cb85c;\n  box-shadow: 0 0 0 0.25rem rgba(92, 184, 92, 0.25);\n}\n\n.was-validated textarea.form-control:valid, textarea.form-control.is-valid {\n  padding-right: calc(1.5em + 0.75rem);\n  background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem);\n}\n\n.was-validated .form-select:valid, .form-select.is-valid {\n  border-color: #5cb85c;\n}\n\n.was-validated .form-select:valid:not([multiple]):not([size]), .was-validated .form-select:valid:not([multiple])[size=\"1\"], .form-select.is-valid:not([multiple]):not([size]), .form-select.is-valid:not([multiple])[size=\"1\"] {\n  padding-right: 4.125rem;\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e\"), url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%235cb85c' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e\");\n  background-position: right 0.75rem center, center right 2.25rem;\n  background-size: 16px 12px, calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n\n.was-validated .form-select:valid:focus, .form-select.is-valid:focus {\n  border-color: #5cb85c;\n  box-shadow: 0 0 0 0.25rem rgba(92, 184, 92, 0.25);\n}\n\n.was-validated .form-check-input:valid, .form-check-input.is-valid {\n  border-color: #5cb85c;\n}\n\n.was-validated .form-check-input:valid:checked, .form-check-input.is-valid:checked {\n  background-color: #5cb85c;\n}\n\n.was-validated .form-check-input:valid:focus, .form-check-input.is-valid:focus {\n  box-shadow: 0 0 0 0.25rem rgba(92, 184, 92, 0.25);\n}\n\n.was-validated .form-check-input:valid ~ .form-check-label, .form-check-input.is-valid ~ .form-check-label {\n  color: #5cb85c;\n}\n\n.form-check-inline .form-check-input ~ .valid-feedback {\n  margin-left: .5em;\n}\n\n.was-validated .input-group .form-control:valid, .input-group .form-control.is-valid, .was-validated\n.input-group .form-select:valid,\n.input-group .form-select.is-valid {\n  z-index: 1;\n}\n\n.was-validated .input-group .form-control:valid:focus, .input-group .form-control.is-valid:focus, .was-validated\n.input-group .form-select:valid:focus,\n.input-group .form-select.is-valid:focus {\n  z-index: 3;\n}\n\n.invalid-feedback {\n  display: none;\n  width: 100%;\n  margin-top: 0.25rem;\n  font-size: 0.875em;\n  color: #d9534f;\n}\n\n.invalid-tooltip {\n  position: absolute;\n  top: 100%;\n  z-index: 5;\n  display: none;\n  max-width: 100%;\n  padding: 0.25rem 0.5rem;\n  margin-top: .1rem;\n  font-size: 0.875rem;\n  color: #fff;\n  background-color: rgba(217, 83, 79, 0.9);\n  border-radius: 0;\n}\n\n.was-validated :invalid ~ .invalid-feedback,\n.was-validated :invalid ~ .invalid-tooltip,\n.is-invalid ~ .invalid-feedback,\n.is-invalid ~ .invalid-tooltip {\n  display: block;\n}\n\n.was-validated .form-control:invalid, .form-control.is-invalid {\n  border-color: #d9534f;\n  padding-right: calc(1.5em + 0.75rem);\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23d9534f'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23d9534f' stroke='none'/%3e%3c/svg%3e\");\n  background-repeat: no-repeat;\n  background-position: right calc(0.375em + 0.1875rem) center;\n  background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n\n.was-validated .form-control:invalid:focus, .form-control.is-invalid:focus {\n  border-color: #d9534f;\n  box-shadow: 0 0 0 0.25rem rgba(217, 83, 79, 0.25);\n}\n\n.was-validated textarea.form-control:invalid, textarea.form-control.is-invalid {\n  padding-right: calc(1.5em + 0.75rem);\n  background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem);\n}\n\n.was-validated .form-select:invalid, .form-select.is-invalid {\n  border-color: #d9534f;\n}\n\n.was-validated .form-select:invalid:not([multiple]):not([size]), .was-validated .form-select:invalid:not([multiple])[size=\"1\"], .form-select.is-invalid:not([multiple]):not([size]), .form-select.is-invalid:not([multiple])[size=\"1\"] {\n  padding-right: 4.125rem;\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e\"), url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23d9534f'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23d9534f' stroke='none'/%3e%3c/svg%3e\");\n  background-position: right 0.75rem center, center right 2.25rem;\n  background-size: 16px 12px, calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n\n.was-validated .form-select:invalid:focus, .form-select.is-invalid:focus {\n  border-color: #d9534f;\n  box-shadow: 0 0 0 0.25rem rgba(217, 83, 79, 0.25);\n}\n\n.was-validated .form-check-input:invalid, .form-check-input.is-invalid {\n  border-color: #d9534f;\n}\n\n.was-validated .form-check-input:invalid:checked, .form-check-input.is-invalid:checked {\n  background-color: #d9534f;\n}\n\n.was-validated .form-check-input:invalid:focus, .form-check-input.is-invalid:focus {\n  box-shadow: 0 0 0 0.25rem rgba(217, 83, 79, 0.25);\n}\n\n.was-validated .form-check-input:invalid ~ .form-check-label, .form-check-input.is-invalid ~ .form-check-label {\n  color: #d9534f;\n}\n\n.form-check-inline .form-check-input ~ .invalid-feedback {\n  margin-left: .5em;\n}\n\n.was-validated .input-group .form-control:invalid, .input-group .form-control.is-invalid, .was-validated\n.input-group .form-select:invalid,\n.input-group .form-select.is-invalid {\n  z-index: 2;\n}\n\n.was-validated .input-group .form-control:invalid:focus, .input-group .form-control.is-invalid:focus, .was-validated\n.input-group .form-select:invalid:focus,\n.input-group .form-select.is-invalid:focus {\n  z-index: 3;\n}\n\n.btn {\n  display: inline-block;\n  font-weight: 400;\n  line-height: 1.5;\n  color: #ebebeb;\n  text-align: center;\n  text-decoration: none;\n  vertical-align: middle;\n  cursor: pointer;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  user-select: none;\n  background-color: transparent;\n  border: 1px solid transparent;\n  padding: 0.375rem 0.75rem;\n  font-size: 1rem;\n  border-radius: 0;\n  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .btn {\n    transition: none;\n  }\n}\n\n.btn:hover {\n  color: #ebebeb;\n}\n\n.btn-check:focus + .btn, .btn:focus {\n  outline: 0;\n  box-shadow: 0 0 0 0.25rem rgba(76, 155, 232, 0.25);\n}\n\n.btn:disabled, .btn.disabled,\nfieldset:disabled .btn {\n  pointer-events: none;\n  opacity: 0.65;\n}\n\n.btn-primary {\n  color: #fff;\n  background-color: #4c9be8;\n  border-color: #4c9be8;\n}\n\n.btn-primary:hover {\n  color: #fff;\n  background-color: #4184c5;\n  border-color: #3d7cba;\n}\n\n.btn-check:focus + .btn-primary, .btn-primary:focus {\n  color: #fff;\n  background-color: #4184c5;\n  border-color: #3d7cba;\n  box-shadow: 0 0 0 0.25rem rgba(103, 170, 235, 0.5);\n}\n\n.btn-check:checked + .btn-primary,\n.btn-check:active + .btn-primary, .btn-primary:active, .btn-primary.active,\n.show > .btn-primary.dropdown-toggle {\n  color: #fff;\n  background-color: #3d7cba;\n  border-color: #3974ae;\n}\n\n.btn-check:checked + .btn-primary:focus,\n.btn-check:active + .btn-primary:focus, .btn-primary:active:focus, .btn-primary.active:focus,\n.show > .btn-primary.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.25rem rgba(103, 170, 235, 0.5);\n}\n\n.btn-primary:disabled, .btn-primary.disabled {\n  color: #fff;\n  background-color: #4c9be8;\n  border-color: #4c9be8;\n}\n\n.btn-secondary {\n  color: #fff;\n  background-color: #4e5d6c;\n  border-color: #4e5d6c;\n}\n\n.btn-secondary:hover {\n  color: #fff;\n  background-color: #424f5c;\n  border-color: #3e4a56;\n}\n\n.btn-check:focus + .btn-secondary, .btn-secondary:focus {\n  color: #fff;\n  background-color: #424f5c;\n  border-color: #3e4a56;\n  box-shadow: 0 0 0 0.25rem rgba(105, 117, 130, 0.5);\n}\n\n.btn-check:checked + .btn-secondary,\n.btn-check:active + .btn-secondary, .btn-secondary:active, .btn-secondary.active,\n.show > .btn-secondary.dropdown-toggle {\n  color: #fff;\n  background-color: #3e4a56;\n  border-color: #3b4651;\n}\n\n.btn-check:checked + .btn-secondary:focus,\n.btn-check:active + .btn-secondary:focus, .btn-secondary:active:focus, .btn-secondary.active:focus,\n.show > .btn-secondary.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.25rem rgba(105, 117, 130, 0.5);\n}\n\n.btn-secondary:disabled, .btn-secondary.disabled {\n  color: #fff;\n  background-color: #4e5d6c;\n  border-color: #4e5d6c;\n}\n\n.btn-success {\n  color: #fff;\n  background-color: #5cb85c;\n  border-color: #5cb85c;\n}\n\n.btn-success:hover {\n  color: #fff;\n  background-color: #4e9c4e;\n  border-color: #4a934a;\n}\n\n.btn-check:focus + .btn-success, .btn-success:focus {\n  color: #fff;\n  background-color: #4e9c4e;\n  border-color: #4a934a;\n  box-shadow: 0 0 0 0.25rem rgba(116, 195, 116, 0.5);\n}\n\n.btn-check:checked + .btn-success,\n.btn-check:active + .btn-success, .btn-success:active, .btn-success.active,\n.show > .btn-success.dropdown-toggle {\n  color: #fff;\n  background-color: #4a934a;\n  border-color: #458a45;\n}\n\n.btn-check:checked + .btn-success:focus,\n.btn-check:active + .btn-success:focus, .btn-success:active:focus, .btn-success.active:focus,\n.show > .btn-success.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.25rem rgba(116, 195, 116, 0.5);\n}\n\n.btn-success:disabled, .btn-success.disabled {\n  color: #fff;\n  background-color: #5cb85c;\n  border-color: #5cb85c;\n}\n\n.btn-info {\n  color: #fff;\n  background-color: #5bc0de;\n  border-color: #5bc0de;\n}\n\n.btn-info:hover {\n  color: #fff;\n  background-color: #4da3bd;\n  border-color: #499ab2;\n}\n\n.btn-check:focus + .btn-info, .btn-info:focus {\n  color: #fff;\n  background-color: #4da3bd;\n  border-color: #499ab2;\n  box-shadow: 0 0 0 0.25rem rgba(116, 201, 227, 0.5);\n}\n\n.btn-check:checked + .btn-info,\n.btn-check:active + .btn-info, .btn-info:active, .btn-info.active,\n.show > .btn-info.dropdown-toggle {\n  color: #fff;\n  background-color: #499ab2;\n  border-color: #4490a7;\n}\n\n.btn-check:checked + .btn-info:focus,\n.btn-check:active + .btn-info:focus, .btn-info:active:focus, .btn-info.active:focus,\n.show > .btn-info.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.25rem rgba(116, 201, 227, 0.5);\n}\n\n.btn-info:disabled, .btn-info.disabled {\n  color: #fff;\n  background-color: #5bc0de;\n  border-color: #5bc0de;\n}\n\n.btn-warning {\n  color: #fff;\n  background-color: #ffc107;\n  border-color: #ffc107;\n}\n\n.btn-warning:hover {\n  color: #fff;\n  background-color: #d9a406;\n  border-color: #cc9a06;\n}\n\n.btn-check:focus + .btn-warning, .btn-warning:focus {\n  color: #fff;\n  background-color: #d9a406;\n  border-color: #cc9a06;\n  box-shadow: 0 0 0 0.25rem rgba(255, 202, 44, 0.5);\n}\n\n.btn-check:checked + .btn-warning,\n.btn-check:active + .btn-warning, .btn-warning:active, .btn-warning.active,\n.show > .btn-warning.dropdown-toggle {\n  color: #fff;\n  background-color: #cc9a06;\n  border-color: #bf9105;\n}\n\n.btn-check:checked + .btn-warning:focus,\n.btn-check:active + .btn-warning:focus, .btn-warning:active:focus, .btn-warning.active:focus,\n.show > .btn-warning.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.25rem rgba(255, 202, 44, 0.5);\n}\n\n.btn-warning:disabled, .btn-warning.disabled {\n  color: #fff;\n  background-color: #ffc107;\n  border-color: #ffc107;\n}\n\n.btn-danger {\n  color: #fff;\n  background-color: #d9534f;\n  border-color: #d9534f;\n}\n\n.btn-danger:hover {\n  color: #fff;\n  background-color: #b84743;\n  border-color: #ae423f;\n}\n\n.btn-check:focus + .btn-danger, .btn-danger:focus {\n  color: #fff;\n  background-color: #b84743;\n  border-color: #ae423f;\n  box-shadow: 0 0 0 0.25rem rgba(223, 109, 105, 0.5);\n}\n\n.btn-check:checked + .btn-danger,\n.btn-check:active + .btn-danger, .btn-danger:active, .btn-danger.active,\n.show > .btn-danger.dropdown-toggle {\n  color: #fff;\n  background-color: #ae423f;\n  border-color: #a33e3b;\n}\n\n.btn-check:checked + .btn-danger:focus,\n.btn-check:active + .btn-danger:focus, .btn-danger:active:focus, .btn-danger.active:focus,\n.show > .btn-danger.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.25rem rgba(223, 109, 105, 0.5);\n}\n\n.btn-danger:disabled, .btn-danger.disabled {\n  color: #fff;\n  background-color: #d9534f;\n  border-color: #d9534f;\n}\n\n.btn-light {\n  color: #fff;\n  background-color: #abb6c2;\n  border-color: #abb6c2;\n}\n\n.btn-light:hover {\n  color: #fff;\n  background-color: #919ba5;\n  border-color: #88929b;\n}\n\n.btn-check:focus + .btn-light, .btn-light:focus {\n  color: #fff;\n  background-color: #919ba5;\n  border-color: #88929b;\n  box-shadow: 0 0 0 0.25rem rgba(183, 193, 203, 0.5);\n}\n\n.btn-check:checked + .btn-light,\n.btn-check:active + .btn-light, .btn-light:active, .btn-light.active,\n.show > .btn-light.dropdown-toggle {\n  color: #fff;\n  background-color: #88929b;\n  border-color: #808991;\n}\n\n.btn-check:checked + .btn-light:focus,\n.btn-check:active + .btn-light:focus, .btn-light:active:focus, .btn-light.active:focus,\n.show > .btn-light.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.25rem rgba(183, 193, 203, 0.5);\n}\n\n.btn-light:disabled, .btn-light.disabled {\n  color: #fff;\n  background-color: #abb6c2;\n  border-color: #abb6c2;\n}\n\n.btn-dark {\n  color: #fff;\n  background-color: #20374c;\n  border-color: #20374c;\n}\n\n.btn-dark:hover {\n  color: #fff;\n  background-color: #1b2f41;\n  border-color: #1a2c3d;\n}\n\n.btn-check:focus + .btn-dark, .btn-dark:focus {\n  color: #fff;\n  background-color: #1b2f41;\n  border-color: #1a2c3d;\n  box-shadow: 0 0 0 0.25rem rgba(65, 85, 103, 0.5);\n}\n\n.btn-check:checked + .btn-dark,\n.btn-check:active + .btn-dark, .btn-dark:active, .btn-dark.active,\n.show > .btn-dark.dropdown-toggle {\n  color: #fff;\n  background-color: #1a2c3d;\n  border-color: #182939;\n}\n\n.btn-check:checked + .btn-dark:focus,\n.btn-check:active + .btn-dark:focus, .btn-dark:active:focus, .btn-dark.active:focus,\n.show > .btn-dark.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.25rem rgba(65, 85, 103, 0.5);\n}\n\n.btn-dark:disabled, .btn-dark.disabled {\n  color: #fff;\n  background-color: #20374c;\n  border-color: #20374c;\n}\n\n.btn-outline-primary {\n  color: #4c9be8;\n  border-color: #4c9be8;\n}\n\n.btn-outline-primary:hover {\n  color: #fff;\n  background-color: #4c9be8;\n  border-color: #4c9be8;\n}\n\n.btn-check:focus + .btn-outline-primary, .btn-outline-primary:focus {\n  box-shadow: 0 0 0 0.25rem rgba(76, 155, 232, 0.5);\n}\n\n.btn-check:checked + .btn-outline-primary,\n.btn-check:active + .btn-outline-primary, .btn-outline-primary:active, .btn-outline-primary.active, .btn-outline-primary.dropdown-toggle.show {\n  color: #fff;\n  background-color: #4c9be8;\n  border-color: #4c9be8;\n}\n\n.btn-check:checked + .btn-outline-primary:focus,\n.btn-check:active + .btn-outline-primary:focus, .btn-outline-primary:active:focus, .btn-outline-primary.active:focus, .btn-outline-primary.dropdown-toggle.show:focus {\n  box-shadow: 0 0 0 0.25rem rgba(76, 155, 232, 0.5);\n}\n\n.btn-outline-primary:disabled, .btn-outline-primary.disabled {\n  color: #4c9be8;\n  background-color: transparent;\n}\n\n.btn-outline-secondary {\n  color: #4e5d6c;\n  border-color: #4e5d6c;\n}\n\n.btn-outline-secondary:hover {\n  color: #fff;\n  background-color: #4e5d6c;\n  border-color: #4e5d6c;\n}\n\n.btn-check:focus + .btn-outline-secondary, .btn-outline-secondary:focus {\n  box-shadow: 0 0 0 0.25rem rgba(78, 93, 108, 0.5);\n}\n\n.btn-check:checked + .btn-outline-secondary,\n.btn-check:active + .btn-outline-secondary, .btn-outline-secondary:active, .btn-outline-secondary.active, .btn-outline-secondary.dropdown-toggle.show {\n  color: #fff;\n  background-color: #4e5d6c;\n  border-color: #4e5d6c;\n}\n\n.btn-check:checked + .btn-outline-secondary:focus,\n.btn-check:active + .btn-outline-secondary:focus, .btn-outline-secondary:active:focus, .btn-outline-secondary.active:focus, .btn-outline-secondary.dropdown-toggle.show:focus {\n  box-shadow: 0 0 0 0.25rem rgba(78, 93, 108, 0.5);\n}\n\n.btn-outline-secondary:disabled, .btn-outline-secondary.disabled {\n  color: #4e5d6c;\n  background-color: transparent;\n}\n\n.btn-outline-success {\n  color: #5cb85c;\n  border-color: #5cb85c;\n}\n\n.btn-outline-success:hover {\n  color: #fff;\n  background-color: #5cb85c;\n  border-color: #5cb85c;\n}\n\n.btn-check:focus + .btn-outline-success, .btn-outline-success:focus {\n  box-shadow: 0 0 0 0.25rem rgba(92, 184, 92, 0.5);\n}\n\n.btn-check:checked + .btn-outline-success,\n.btn-check:active + .btn-outline-success, .btn-outline-success:active, .btn-outline-success.active, .btn-outline-success.dropdown-toggle.show {\n  color: #fff;\n  background-color: #5cb85c;\n  border-color: #5cb85c;\n}\n\n.btn-check:checked + .btn-outline-success:focus,\n.btn-check:active + .btn-outline-success:focus, .btn-outline-success:active:focus, .btn-outline-success.active:focus, .btn-outline-success.dropdown-toggle.show:focus {\n  box-shadow: 0 0 0 0.25rem rgba(92, 184, 92, 0.5);\n}\n\n.btn-outline-success:disabled, .btn-outline-success.disabled {\n  color: #5cb85c;\n  background-color: transparent;\n}\n\n.btn-outline-info {\n  color: #5bc0de;\n  border-color: #5bc0de;\n}\n\n.btn-outline-info:hover {\n  color: #fff;\n  background-color: #5bc0de;\n  border-color: #5bc0de;\n}\n\n.btn-check:focus + .btn-outline-info, .btn-outline-info:focus {\n  box-shadow: 0 0 0 0.25rem rgba(91, 192, 222, 0.5);\n}\n\n.btn-check:checked + .btn-outline-info,\n.btn-check:active + .btn-outline-info, .btn-outline-info:active, .btn-outline-info.active, .btn-outline-info.dropdown-toggle.show {\n  color: #fff;\n  background-color: #5bc0de;\n  border-color: #5bc0de;\n}\n\n.btn-check:checked + .btn-outline-info:focus,\n.btn-check:active + .btn-outline-info:focus, .btn-outline-info:active:focus, .btn-outline-info.active:focus, .btn-outline-info.dropdown-toggle.show:focus {\n  box-shadow: 0 0 0 0.25rem rgba(91, 192, 222, 0.5);\n}\n\n.btn-outline-info:disabled, .btn-outline-info.disabled {\n  color: #5bc0de;\n  background-color: transparent;\n}\n\n.btn-outline-warning {\n  color: #ffc107;\n  border-color: #ffc107;\n}\n\n.btn-outline-warning:hover {\n  color: #fff;\n  background-color: #ffc107;\n  border-color: #ffc107;\n}\n\n.btn-check:focus + .btn-outline-warning, .btn-outline-warning:focus {\n  box-shadow: 0 0 0 0.25rem rgba(255, 193, 7, 0.5);\n}\n\n.btn-check:checked + .btn-outline-warning,\n.btn-check:active + .btn-outline-warning, .btn-outline-warning:active, .btn-outline-warning.active, .btn-outline-warning.dropdown-toggle.show {\n  color: #fff;\n  background-color: #ffc107;\n  border-color: #ffc107;\n}\n\n.btn-check:checked + .btn-outline-warning:focus,\n.btn-check:active + .btn-outline-warning:focus, .btn-outline-warning:active:focus, .btn-outline-warning.active:focus, .btn-outline-warning.dropdown-toggle.show:focus {\n  box-shadow: 0 0 0 0.25rem rgba(255, 193, 7, 0.5);\n}\n\n.btn-outline-warning:disabled, .btn-outline-warning.disabled {\n  color: #ffc107;\n  background-color: transparent;\n}\n\n.btn-outline-danger {\n  color: #d9534f;\n  border-color: #d9534f;\n}\n\n.btn-outline-danger:hover {\n  color: #fff;\n  background-color: #d9534f;\n  border-color: #d9534f;\n}\n\n.btn-check:focus + .btn-outline-danger, .btn-outline-danger:focus {\n  box-shadow: 0 0 0 0.25rem rgba(217, 83, 79, 0.5);\n}\n\n.btn-check:checked + .btn-outline-danger,\n.btn-check:active + .btn-outline-danger, .btn-outline-danger:active, .btn-outline-danger.active, .btn-outline-danger.dropdown-toggle.show {\n  color: #fff;\n  background-color: #d9534f;\n  border-color: #d9534f;\n}\n\n.btn-check:checked + .btn-outline-danger:focus,\n.btn-check:active + .btn-outline-danger:focus, .btn-outline-danger:active:focus, .btn-outline-danger.active:focus, .btn-outline-danger.dropdown-toggle.show:focus {\n  box-shadow: 0 0 0 0.25rem rgba(217, 83, 79, 0.5);\n}\n\n.btn-outline-danger:disabled, .btn-outline-danger.disabled {\n  color: #d9534f;\n  background-color: transparent;\n}\n\n.btn-outline-light {\n  color: #abb6c2;\n  border-color: #abb6c2;\n}\n\n.btn-outline-light:hover {\n  color: #fff;\n  background-color: #abb6c2;\n  border-color: #abb6c2;\n}\n\n.btn-check:focus + .btn-outline-light, .btn-outline-light:focus {\n  box-shadow: 0 0 0 0.25rem rgba(171, 182, 194, 0.5);\n}\n\n.btn-check:checked + .btn-outline-light,\n.btn-check:active + .btn-outline-light, .btn-outline-light:active, .btn-outline-light.active, .btn-outline-light.dropdown-toggle.show {\n  color: #fff;\n  background-color: #abb6c2;\n  border-color: #abb6c2;\n}\n\n.btn-check:checked + .btn-outline-light:focus,\n.btn-check:active + .btn-outline-light:focus, .btn-outline-light:active:focus, .btn-outline-light.active:focus, .btn-outline-light.dropdown-toggle.show:focus {\n  box-shadow: 0 0 0 0.25rem rgba(171, 182, 194, 0.5);\n}\n\n.btn-outline-light:disabled, .btn-outline-light.disabled {\n  color: #abb6c2;\n  background-color: transparent;\n}\n\n.btn-outline-dark {\n  color: #20374c;\n  border-color: #20374c;\n}\n\n.btn-outline-dark:hover {\n  color: #fff;\n  background-color: #20374c;\n  border-color: #20374c;\n}\n\n.btn-check:focus + .btn-outline-dark, .btn-outline-dark:focus {\n  box-shadow: 0 0 0 0.25rem rgba(32, 55, 76, 0.5);\n}\n\n.btn-check:checked + .btn-outline-dark,\n.btn-check:active + .btn-outline-dark, .btn-outline-dark:active, .btn-outline-dark.active, .btn-outline-dark.dropdown-toggle.show {\n  color: #fff;\n  background-color: #20374c;\n  border-color: #20374c;\n}\n\n.btn-check:checked + .btn-outline-dark:focus,\n.btn-check:active + .btn-outline-dark:focus, .btn-outline-dark:active:focus, .btn-outline-dark.active:focus, .btn-outline-dark.dropdown-toggle.show:focus {\n  box-shadow: 0 0 0 0.25rem rgba(32, 55, 76, 0.5);\n}\n\n.btn-outline-dark:disabled, .btn-outline-dark.disabled {\n  color: #20374c;\n  background-color: transparent;\n}\n\n.btn-link {\n  font-weight: 400;\n  color: #4c9be8;\n  text-decoration: underline;\n}\n\n.btn-link:hover {\n  color: #3d7cba;\n}\n\n.btn-link:disabled, .btn-link.disabled {\n  color: #868e96;\n}\n\n.btn-lg, .btn-group-lg > .btn {\n  padding: 0.5rem 1rem;\n  font-size: 1.25rem;\n  border-radius: 0;\n}\n\n.btn-sm, .btn-group-sm > .btn {\n  padding: 0.25rem 0.5rem;\n  font-size: 0.875rem;\n  border-radius: 0;\n}\n\n.fade {\n  transition: opacity 0.15s linear;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .fade {\n    transition: none;\n  }\n}\n\n.fade:not(.show) {\n  opacity: 0;\n}\n\n.collapse:not(.show) {\n  display: none;\n}\n\n.collapsing {\n  height: 0;\n  overflow: hidden;\n  transition: height 0.35s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .collapsing {\n    transition: none;\n  }\n}\n\n.collapsing.collapse-horizontal {\n  width: 0;\n  height: auto;\n  transition: width 0.35s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .collapsing.collapse-horizontal {\n    transition: none;\n  }\n}\n\n.dropup,\n.dropend,\n.dropdown,\n.dropstart {\n  position: relative;\n}\n\n.dropdown-toggle {\n  white-space: nowrap;\n}\n\n.dropdown-toggle::after {\n  display: inline-block;\n  margin-left: 0.255em;\n  vertical-align: 0.255em;\n  content: \"\";\n  border-top: 0.3em solid;\n  border-right: 0.3em solid transparent;\n  border-bottom: 0;\n  border-left: 0.3em solid transparent;\n}\n\n.dropdown-toggle:empty::after {\n  margin-left: 0;\n}\n\n.dropdown-menu {\n  position: absolute;\n  z-index: 1000;\n  display: none;\n  min-width: 10rem;\n  padding: 0.5rem 0;\n  margin: 0;\n  font-size: 1rem;\n  color: #ebebeb;\n  text-align: left;\n  list-style: none;\n  background-color: #4e5d6c;\n  background-clip: padding-box;\n  border: 1px solid rgba(0, 0, 0, 0.15);\n  border-radius: 0;\n}\n\n.dropdown-menu[data-bs-popper] {\n  top: 100%;\n  left: 0;\n  margin-top: 0.125rem;\n}\n\n.dropdown-menu-start {\n  --bs-position: start;\n}\n\n.dropdown-menu-start[data-bs-popper] {\n  right: auto;\n  left: 0;\n}\n\n.dropdown-menu-end {\n  --bs-position: end;\n}\n\n.dropdown-menu-end[data-bs-popper] {\n  right: 0;\n  left: auto;\n}\n\n@media (min-width: 576px) {\n  .dropdown-menu-sm-start {\n    --bs-position: start;\n  }\n  .dropdown-menu-sm-start[data-bs-popper] {\n    right: auto;\n    left: 0;\n  }\n  .dropdown-menu-sm-end {\n    --bs-position: end;\n  }\n  .dropdown-menu-sm-end[data-bs-popper] {\n    right: 0;\n    left: auto;\n  }\n}\n\n@media (min-width: 768px) {\n  .dropdown-menu-md-start {\n    --bs-position: start;\n  }\n  .dropdown-menu-md-start[data-bs-popper] {\n    right: auto;\n    left: 0;\n  }\n  .dropdown-menu-md-end {\n    --bs-position: end;\n  }\n  .dropdown-menu-md-end[data-bs-popper] {\n    right: 0;\n    left: auto;\n  }\n}\n\n@media (min-width: 992px) {\n  .dropdown-menu-lg-start {\n    --bs-position: start;\n  }\n  .dropdown-menu-lg-start[data-bs-popper] {\n    right: auto;\n    left: 0;\n  }\n  .dropdown-menu-lg-end {\n    --bs-position: end;\n  }\n  .dropdown-menu-lg-end[data-bs-popper] {\n    right: 0;\n    left: auto;\n  }\n}\n\n@media (min-width: 1200px) {\n  .dropdown-menu-xl-start {\n    --bs-position: start;\n  }\n  .dropdown-menu-xl-start[data-bs-popper] {\n    right: auto;\n    left: 0;\n  }\n  .dropdown-menu-xl-end {\n    --bs-position: end;\n  }\n  .dropdown-menu-xl-end[data-bs-popper] {\n    right: 0;\n    left: auto;\n  }\n}\n\n@media (min-width: 1400px) {\n  .dropdown-menu-xxl-start {\n    --bs-position: start;\n  }\n  .dropdown-menu-xxl-start[data-bs-popper] {\n    right: auto;\n    left: 0;\n  }\n  .dropdown-menu-xxl-end {\n    --bs-position: end;\n  }\n  .dropdown-menu-xxl-end[data-bs-popper] {\n    right: 0;\n    left: auto;\n  }\n}\n\n.dropup .dropdown-menu[data-bs-popper] {\n  top: auto;\n  bottom: 100%;\n  margin-top: 0;\n  margin-bottom: 0.125rem;\n}\n\n.dropup .dropdown-toggle::after {\n  display: inline-block;\n  margin-left: 0.255em;\n  vertical-align: 0.255em;\n  content: \"\";\n  border-top: 0;\n  border-right: 0.3em solid transparent;\n  border-bottom: 0.3em solid;\n  border-left: 0.3em solid transparent;\n}\n\n.dropup .dropdown-toggle:empty::after {\n  margin-left: 0;\n}\n\n.dropend .dropdown-menu[data-bs-popper] {\n  top: 0;\n  right: auto;\n  left: 100%;\n  margin-top: 0;\n  margin-left: 0.125rem;\n}\n\n.dropend .dropdown-toggle::after {\n  display: inline-block;\n  margin-left: 0.255em;\n  vertical-align: 0.255em;\n  content: \"\";\n  border-top: 0.3em solid transparent;\n  border-right: 0;\n  border-bottom: 0.3em solid transparent;\n  border-left: 0.3em solid;\n}\n\n.dropend .dropdown-toggle:empty::after {\n  margin-left: 0;\n}\n\n.dropend .dropdown-toggle::after {\n  vertical-align: 0;\n}\n\n.dropstart .dropdown-menu[data-bs-popper] {\n  top: 0;\n  right: 100%;\n  left: auto;\n  margin-top: 0;\n  margin-right: 0.125rem;\n}\n\n.dropstart .dropdown-toggle::after {\n  display: inline-block;\n  margin-left: 0.255em;\n  vertical-align: 0.255em;\n  content: \"\";\n}\n\n.dropstart .dropdown-toggle::after {\n  display: none;\n}\n\n.dropstart .dropdown-toggle::before {\n  display: inline-block;\n  margin-right: 0.255em;\n  vertical-align: 0.255em;\n  content: \"\";\n  border-top: 0.3em solid transparent;\n  border-right: 0.3em solid;\n  border-bottom: 0.3em solid transparent;\n}\n\n.dropstart .dropdown-toggle:empty::after {\n  margin-left: 0;\n}\n\n.dropstart .dropdown-toggle::before {\n  vertical-align: 0;\n}\n\n.dropdown-divider {\n  height: 0;\n  margin: 0.5rem 0;\n  overflow: hidden;\n  border-top: 1px solid rgba(0, 0, 0, 0.15);\n}\n\n.dropdown-item {\n  display: block;\n  width: 100%;\n  padding: 0.25rem 1rem;\n  clear: both;\n  font-weight: 400;\n  color: #ebebeb;\n  text-align: inherit;\n  text-decoration: none;\n  white-space: nowrap;\n  background-color: transparent;\n  border: 0;\n}\n\n.dropdown-item:hover, .dropdown-item:focus {\n  color: #ebebeb;\n  background-color: rgba(255, 255, 255, 0.075);\n}\n\n.dropdown-item.active, .dropdown-item:active {\n  color: #fff;\n  text-decoration: none;\n  background-color: #4c9be8;\n}\n\n.dropdown-item.disabled, .dropdown-item:disabled {\n  color: #adb5bd;\n  pointer-events: none;\n  background-color: transparent;\n}\n\n.dropdown-menu.show {\n  display: block;\n}\n\n.dropdown-header {\n  display: block;\n  padding: 0.5rem 1rem;\n  margin-bottom: 0;\n  font-size: 0.875rem;\n  color: #868e96;\n  white-space: nowrap;\n}\n\n.dropdown-item-text {\n  display: block;\n  padding: 0.25rem 1rem;\n  color: #ebebeb;\n}\n\n.dropdown-menu-dark {\n  color: #dee2e6;\n  background-color: #343a40;\n  border-color: rgba(0, 0, 0, 0.15);\n}\n\n.dropdown-menu-dark .dropdown-item {\n  color: #dee2e6;\n}\n\n.dropdown-menu-dark .dropdown-item:hover, .dropdown-menu-dark .dropdown-item:focus {\n  color: #fff;\n  background-color: rgba(255, 255, 255, 0.15);\n}\n\n.dropdown-menu-dark .dropdown-item.active, .dropdown-menu-dark .dropdown-item:active {\n  color: #fff;\n  background-color: #4c9be8;\n}\n\n.dropdown-menu-dark .dropdown-item.disabled, .dropdown-menu-dark .dropdown-item:disabled {\n  color: #adb5bd;\n}\n\n.dropdown-menu-dark .dropdown-divider {\n  border-color: rgba(0, 0, 0, 0.15);\n}\n\n.dropdown-menu-dark .dropdown-item-text {\n  color: #dee2e6;\n}\n\n.dropdown-menu-dark .dropdown-header {\n  color: #adb5bd;\n}\n\n.btn-group,\n.btn-group-vertical {\n  position: relative;\n  display: -ms-inline-flexbox;\n  display: inline-flex;\n  vertical-align: middle;\n}\n\n.btn-group > .btn,\n.btn-group-vertical > .btn {\n  position: relative;\n  -ms-flex: 1 1 auto;\n  flex: 1 1 auto;\n}\n\n.btn-group > .btn-check:checked + .btn,\n.btn-group > .btn-check:focus + .btn,\n.btn-group > .btn:hover,\n.btn-group > .btn:focus,\n.btn-group > .btn:active,\n.btn-group > .btn.active,\n.btn-group-vertical > .btn-check:checked + .btn,\n.btn-group-vertical > .btn-check:focus + .btn,\n.btn-group-vertical > .btn:hover,\n.btn-group-vertical > .btn:focus,\n.btn-group-vertical > .btn:active,\n.btn-group-vertical > .btn.active {\n  z-index: 1;\n}\n\n.btn-toolbar {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n  flex-wrap: wrap;\n  -ms-flex-pack: start;\n  justify-content: flex-start;\n}\n\n.btn-toolbar .input-group {\n  width: auto;\n}\n\n.btn-group > .btn:not(:first-child),\n.btn-group > .btn-group:not(:first-child) {\n  margin-left: -1px;\n}\n\n.btn-group > .btn:not(:last-child):not(.dropdown-toggle),\n.btn-group > .btn-group:not(:last-child) > .btn {\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n}\n\n.btn-group > .btn:nth-child(n + 3),\n.btn-group > :not(.btn-check) + .btn,\n.btn-group > .btn-group:not(:first-child) > .btn {\n  border-top-left-radius: 0;\n  border-bottom-left-radius: 0;\n}\n\n.dropdown-toggle-split {\n  padding-right: 0.5625rem;\n  padding-left: 0.5625rem;\n}\n\n.dropdown-toggle-split::after,\n.dropup .dropdown-toggle-split::after,\n.dropend .dropdown-toggle-split::after {\n  margin-left: 0;\n}\n\n.dropstart .dropdown-toggle-split::before {\n  margin-right: 0;\n}\n\n.btn-sm + .dropdown-toggle-split, .btn-group-sm > .btn + .dropdown-toggle-split {\n  padding-right: 0.375rem;\n  padding-left: 0.375rem;\n}\n\n.btn-lg + .dropdown-toggle-split, .btn-group-lg > .btn + .dropdown-toggle-split {\n  padding-right: 0.75rem;\n  padding-left: 0.75rem;\n}\n\n.btn-group-vertical {\n  -ms-flex-direction: column;\n  flex-direction: column;\n  -ms-flex-align: start;\n  align-items: flex-start;\n  -ms-flex-pack: center;\n  justify-content: center;\n}\n\n.btn-group-vertical > .btn,\n.btn-group-vertical > .btn-group {\n  width: 100%;\n}\n\n.btn-group-vertical > .btn:not(:first-child),\n.btn-group-vertical > .btn-group:not(:first-child) {\n  margin-top: -1px;\n}\n\n.btn-group-vertical > .btn:not(:last-child):not(.dropdown-toggle),\n.btn-group-vertical > .btn-group:not(:last-child) > .btn {\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 0;\n}\n\n.btn-group-vertical > .btn ~ .btn,\n.btn-group-vertical > .btn-group:not(:first-child) > .btn {\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n}\n\n.nav {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n  flex-wrap: wrap;\n  padding-left: 0;\n  margin-bottom: 0;\n  list-style: none;\n}\n\n.nav-link {\n  display: block;\n  padding: 0.5rem 1rem;\n  color: #4c9be8;\n  text-decoration: none;\n  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .nav-link {\n    transition: none;\n  }\n}\n\n.nav-link:hover, .nav-link:focus {\n  color: #3d7cba;\n}\n\n.nav-link.disabled {\n  color: rgba(255, 255, 255, 0.4);\n  pointer-events: none;\n  cursor: default;\n}\n\n.nav-tabs {\n  border-bottom: 1px solid #4e5d6c;\n}\n\n.nav-tabs .nav-link {\n  margin-bottom: -1px;\n  background: none;\n  border: 1px solid transparent;\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n}\n\n.nav-tabs .nav-link:hover, .nav-tabs .nav-link:focus {\n  border-color: #4e5d6c #4e5d6c #4e5d6c;\n  isolation: isolate;\n}\n\n.nav-tabs .nav-link.disabled {\n  color: rgba(255, 255, 255, 0.4);\n  background-color: transparent;\n  border-color: transparent;\n}\n\n.nav-tabs .nav-link.active,\n.nav-tabs .nav-item.show .nav-link {\n  color: #ebebeb;\n  background-color: #0f2537;\n  border-color: #4e5d6c;\n}\n\n.nav-tabs .dropdown-menu {\n  margin-top: -1px;\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n}\n\n.nav-pills .nav-link {\n  background: none;\n  border: 0;\n  border-radius: 0;\n}\n\n.nav-pills .nav-link.active,\n.nav-pills .show > .nav-link {\n  color: #fff;\n  background-color: #4c9be8;\n}\n\n.nav-fill > .nav-link,\n.nav-fill .nav-item {\n  -ms-flex: 1 1 auto;\n  flex: 1 1 auto;\n  text-align: center;\n}\n\n.nav-justified > .nav-link,\n.nav-justified .nav-item {\n  -ms-flex-preferred-size: 0;\n  flex-basis: 0;\n  -ms-flex-positive: 1;\n  flex-grow: 1;\n  text-align: center;\n}\n\n.nav-fill .nav-item .nav-link,\n.nav-justified .nav-item .nav-link {\n  width: 100%;\n}\n\n.tab-content > .tab-pane {\n  display: none;\n}\n\n.tab-content > .active {\n  display: block;\n}\n\n.navbar {\n  position: relative;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n  flex-wrap: wrap;\n  -ms-flex-align: center;\n  align-items: center;\n  -ms-flex-pack: justify;\n  justify-content: space-between;\n  padding-top: 0.5rem;\n  padding-bottom: 0.5rem;\n}\n\n.navbar > .container,\n.navbar > .container-fluid, .navbar > .container-sm, .navbar > .container-md, .navbar > .container-lg, .navbar > .container-xl, .navbar > .container-xxl {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: inherit;\n  flex-wrap: inherit;\n  -ms-flex-align: center;\n  align-items: center;\n  -ms-flex-pack: justify;\n  justify-content: space-between;\n}\n\n.navbar-brand {\n  padding-top: 0.3125rem;\n  padding-bottom: 0.3125rem;\n  margin-right: 1rem;\n  font-size: 1.25rem;\n  text-decoration: none;\n  white-space: nowrap;\n}\n\n.navbar-nav {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  padding-left: 0;\n  margin-bottom: 0;\n  list-style: none;\n}\n\n.navbar-nav .nav-link {\n  padding-right: 0;\n  padding-left: 0;\n}\n\n.navbar-nav .dropdown-menu {\n  position: static;\n}\n\n.navbar-text {\n  padding-top: 0.5rem;\n  padding-bottom: 0.5rem;\n}\n\n.navbar-collapse {\n  -ms-flex-preferred-size: 100%;\n  flex-basis: 100%;\n  -ms-flex-positive: 1;\n  flex-grow: 1;\n  -ms-flex-align: center;\n  align-items: center;\n}\n\n.navbar-toggler {\n  padding: 0.25rem 0.75rem;\n  font-size: 1.25rem;\n  line-height: 1;\n  background-color: transparent;\n  border: 1px solid transparent;\n  border-radius: 0;\n  transition: box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .navbar-toggler {\n    transition: none;\n  }\n}\n\n.navbar-toggler:hover {\n  text-decoration: none;\n}\n\n.navbar-toggler:focus {\n  text-decoration: none;\n  outline: 0;\n  box-shadow: 0 0 0 0.25rem;\n}\n\n.navbar-toggler-icon {\n  display: inline-block;\n  width: 1.5em;\n  height: 1.5em;\n  vertical-align: middle;\n  background-repeat: no-repeat;\n  background-position: center;\n  background-size: 100%;\n}\n\n.navbar-nav-scroll {\n  max-height: var(--bs-scroll-height, 75vh);\n  overflow-y: auto;\n}\n\n@media (min-width: 576px) {\n  .navbar-expand-sm {\n    -ms-flex-wrap: nowrap;\n    flex-wrap: nowrap;\n    -ms-flex-pack: start;\n    justify-content: flex-start;\n  }\n  .navbar-expand-sm .navbar-nav {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .navbar-expand-sm .navbar-nav .dropdown-menu {\n    position: absolute;\n  }\n  .navbar-expand-sm .navbar-nav .nav-link {\n    padding-right: 0.5rem;\n    padding-left: 0.5rem;\n  }\n  .navbar-expand-sm .navbar-nav-scroll {\n    overflow: visible;\n  }\n  .navbar-expand-sm .navbar-collapse {\n    display: -ms-flexbox !important;\n    display: flex !important;\n    -ms-flex-preferred-size: auto;\n    flex-basis: auto;\n  }\n  .navbar-expand-sm .navbar-toggler {\n    display: none;\n  }\n  .navbar-expand-sm .offcanvas-header {\n    display: none;\n  }\n  .navbar-expand-sm .offcanvas {\n    position: inherit;\n    bottom: 0;\n    z-index: 1000;\n    -ms-flex-positive: 1;\n    flex-grow: 1;\n    visibility: visible !important;\n    background-color: transparent;\n    border-right: 0;\n    border-left: 0;\n    transition: none;\n    -webkit-transform: none;\n    transform: none;\n  }\n  .navbar-expand-sm .offcanvas-top,\n  .navbar-expand-sm .offcanvas-bottom {\n    height: auto;\n    border-top: 0;\n    border-bottom: 0;\n  }\n  .navbar-expand-sm .offcanvas-body {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-positive: 0;\n    flex-grow: 0;\n    padding: 0;\n    overflow-y: visible;\n  }\n}\n\n@media (min-width: 768px) {\n  .navbar-expand-md {\n    -ms-flex-wrap: nowrap;\n    flex-wrap: nowrap;\n    -ms-flex-pack: start;\n    justify-content: flex-start;\n  }\n  .navbar-expand-md .navbar-nav {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .navbar-expand-md .navbar-nav .dropdown-menu {\n    position: absolute;\n  }\n  .navbar-expand-md .navbar-nav .nav-link {\n    padding-right: 0.5rem;\n    padding-left: 0.5rem;\n  }\n  .navbar-expand-md .navbar-nav-scroll {\n    overflow: visible;\n  }\n  .navbar-expand-md .navbar-collapse {\n    display: -ms-flexbox !important;\n    display: flex !important;\n    -ms-flex-preferred-size: auto;\n    flex-basis: auto;\n  }\n  .navbar-expand-md .navbar-toggler {\n    display: none;\n  }\n  .navbar-expand-md .offcanvas-header {\n    display: none;\n  }\n  .navbar-expand-md .offcanvas {\n    position: inherit;\n    bottom: 0;\n    z-index: 1000;\n    -ms-flex-positive: 1;\n    flex-grow: 1;\n    visibility: visible !important;\n    background-color: transparent;\n    border-right: 0;\n    border-left: 0;\n    transition: none;\n    -webkit-transform: none;\n    transform: none;\n  }\n  .navbar-expand-md .offcanvas-top,\n  .navbar-expand-md .offcanvas-bottom {\n    height: auto;\n    border-top: 0;\n    border-bottom: 0;\n  }\n  .navbar-expand-md .offcanvas-body {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-positive: 0;\n    flex-grow: 0;\n    padding: 0;\n    overflow-y: visible;\n  }\n}\n\n@media (min-width: 992px) {\n  .navbar-expand-lg {\n    -ms-flex-wrap: nowrap;\n    flex-wrap: nowrap;\n    -ms-flex-pack: start;\n    justify-content: flex-start;\n  }\n  .navbar-expand-lg .navbar-nav {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .navbar-expand-lg .navbar-nav .dropdown-menu {\n    position: absolute;\n  }\n  .navbar-expand-lg .navbar-nav .nav-link {\n    padding-right: 0.5rem;\n    padding-left: 0.5rem;\n  }\n  .navbar-expand-lg .navbar-nav-scroll {\n    overflow: visible;\n  }\n  .navbar-expand-lg .navbar-collapse {\n    display: -ms-flexbox !important;\n    display: flex !important;\n    -ms-flex-preferred-size: auto;\n    flex-basis: auto;\n  }\n  .navbar-expand-lg .navbar-toggler {\n    display: none;\n  }\n  .navbar-expand-lg .offcanvas-header {\n    display: none;\n  }\n  .navbar-expand-lg .offcanvas {\n    position: inherit;\n    bottom: 0;\n    z-index: 1000;\n    -ms-flex-positive: 1;\n    flex-grow: 1;\n    visibility: visible !important;\n    background-color: transparent;\n    border-right: 0;\n    border-left: 0;\n    transition: none;\n    -webkit-transform: none;\n    transform: none;\n  }\n  .navbar-expand-lg .offcanvas-top,\n  .navbar-expand-lg .offcanvas-bottom {\n    height: auto;\n    border-top: 0;\n    border-bottom: 0;\n  }\n  .navbar-expand-lg .offcanvas-body {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-positive: 0;\n    flex-grow: 0;\n    padding: 0;\n    overflow-y: visible;\n  }\n}\n\n@media (min-width: 1200px) {\n  .navbar-expand-xl {\n    -ms-flex-wrap: nowrap;\n    flex-wrap: nowrap;\n    -ms-flex-pack: start;\n    justify-content: flex-start;\n  }\n  .navbar-expand-xl .navbar-nav {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .navbar-expand-xl .navbar-nav .dropdown-menu {\n    position: absolute;\n  }\n  .navbar-expand-xl .navbar-nav .nav-link {\n    padding-right: 0.5rem;\n    padding-left: 0.5rem;\n  }\n  .navbar-expand-xl .navbar-nav-scroll {\n    overflow: visible;\n  }\n  .navbar-expand-xl .navbar-collapse {\n    display: -ms-flexbox !important;\n    display: flex !important;\n    -ms-flex-preferred-size: auto;\n    flex-basis: auto;\n  }\n  .navbar-expand-xl .navbar-toggler {\n    display: none;\n  }\n  .navbar-expand-xl .offcanvas-header {\n    display: none;\n  }\n  .navbar-expand-xl .offcanvas {\n    position: inherit;\n    bottom: 0;\n    z-index: 1000;\n    -ms-flex-positive: 1;\n    flex-grow: 1;\n    visibility: visible !important;\n    background-color: transparent;\n    border-right: 0;\n    border-left: 0;\n    transition: none;\n    -webkit-transform: none;\n    transform: none;\n  }\n  .navbar-expand-xl .offcanvas-top,\n  .navbar-expand-xl .offcanvas-bottom {\n    height: auto;\n    border-top: 0;\n    border-bottom: 0;\n  }\n  .navbar-expand-xl .offcanvas-body {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-positive: 0;\n    flex-grow: 0;\n    padding: 0;\n    overflow-y: visible;\n  }\n}\n\n@media (min-width: 1400px) {\n  .navbar-expand-xxl {\n    -ms-flex-wrap: nowrap;\n    flex-wrap: nowrap;\n    -ms-flex-pack: start;\n    justify-content: flex-start;\n  }\n  .navbar-expand-xxl .navbar-nav {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .navbar-expand-xxl .navbar-nav .dropdown-menu {\n    position: absolute;\n  }\n  .navbar-expand-xxl .navbar-nav .nav-link {\n    padding-right: 0.5rem;\n    padding-left: 0.5rem;\n  }\n  .navbar-expand-xxl .navbar-nav-scroll {\n    overflow: visible;\n  }\n  .navbar-expand-xxl .navbar-collapse {\n    display: -ms-flexbox !important;\n    display: flex !important;\n    -ms-flex-preferred-size: auto;\n    flex-basis: auto;\n  }\n  .navbar-expand-xxl .navbar-toggler {\n    display: none;\n  }\n  .navbar-expand-xxl .offcanvas-header {\n    display: none;\n  }\n  .navbar-expand-xxl .offcanvas {\n    position: inherit;\n    bottom: 0;\n    z-index: 1000;\n    -ms-flex-positive: 1;\n    flex-grow: 1;\n    visibility: visible !important;\n    background-color: transparent;\n    border-right: 0;\n    border-left: 0;\n    transition: none;\n    -webkit-transform: none;\n    transform: none;\n  }\n  .navbar-expand-xxl .offcanvas-top,\n  .navbar-expand-xxl .offcanvas-bottom {\n    height: auto;\n    border-top: 0;\n    border-bottom: 0;\n  }\n  .navbar-expand-xxl .offcanvas-body {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-positive: 0;\n    flex-grow: 0;\n    padding: 0;\n    overflow-y: visible;\n  }\n}\n\n.navbar-expand {\n  -ms-flex-wrap: nowrap;\n  flex-wrap: nowrap;\n  -ms-flex-pack: start;\n  justify-content: flex-start;\n}\n\n.navbar-expand .navbar-nav {\n  -ms-flex-direction: row;\n  flex-direction: row;\n}\n\n.navbar-expand .navbar-nav .dropdown-menu {\n  position: absolute;\n}\n\n.navbar-expand .navbar-nav .nav-link {\n  padding-right: 0.5rem;\n  padding-left: 0.5rem;\n}\n\n.navbar-expand .navbar-nav-scroll {\n  overflow: visible;\n}\n\n.navbar-expand .navbar-collapse {\n  display: -ms-flexbox !important;\n  display: flex !important;\n  -ms-flex-preferred-size: auto;\n  flex-basis: auto;\n}\n\n.navbar-expand .navbar-toggler {\n  display: none;\n}\n\n.navbar-expand .offcanvas-header {\n  display: none;\n}\n\n.navbar-expand .offcanvas {\n  position: inherit;\n  bottom: 0;\n  z-index: 1000;\n  -ms-flex-positive: 1;\n  flex-grow: 1;\n  visibility: visible !important;\n  background-color: transparent;\n  border-right: 0;\n  border-left: 0;\n  transition: none;\n  -webkit-transform: none;\n  transform: none;\n}\n\n.navbar-expand .offcanvas-top,\n.navbar-expand .offcanvas-bottom {\n  height: auto;\n  border-top: 0;\n  border-bottom: 0;\n}\n\n.navbar-expand .offcanvas-body {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-positive: 0;\n  flex-grow: 0;\n  padding: 0;\n  overflow-y: visible;\n}\n\n.navbar-light .navbar-brand {\n  color: rgba(0, 0, 0, 0.9);\n}\n\n.navbar-light .navbar-brand:hover, .navbar-light .navbar-brand:focus {\n  color: rgba(0, 0, 0, 0.9);\n}\n\n.navbar-light .navbar-nav .nav-link {\n  color: rgba(0, 0, 0, 0.55);\n}\n\n.navbar-light .navbar-nav .nav-link:hover, .navbar-light .navbar-nav .nav-link:focus {\n  color: rgba(0, 0, 0, 0.7);\n}\n\n.navbar-light .navbar-nav .nav-link.disabled {\n  color: rgba(0, 0, 0, 0.3);\n}\n\n.navbar-light .navbar-nav .show > .nav-link,\n.navbar-light .navbar-nav .nav-link.active {\n  color: rgba(0, 0, 0, 0.9);\n}\n\n.navbar-light .navbar-toggler {\n  color: rgba(0, 0, 0, 0.55);\n  border-color: rgba(0, 0, 0, 0.1);\n}\n\n.navbar-light .navbar-toggler-icon {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%280, 0, 0, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e\");\n}\n\n.navbar-light .navbar-text {\n  color: rgba(0, 0, 0, 0.55);\n}\n\n.navbar-light .navbar-text a,\n.navbar-light .navbar-text a:hover,\n.navbar-light .navbar-text a:focus {\n  color: rgba(0, 0, 0, 0.9);\n}\n\n.navbar-dark .navbar-brand {\n  color: #fff;\n}\n\n.navbar-dark .navbar-brand:hover, .navbar-dark .navbar-brand:focus {\n  color: #fff;\n}\n\n.navbar-dark .navbar-nav .nav-link {\n  color: rgba(255, 255, 255, 0.75);\n}\n\n.navbar-dark .navbar-nav .nav-link:hover, .navbar-dark .navbar-nav .nav-link:focus {\n  color: #fff;\n}\n\n.navbar-dark .navbar-nav .nav-link.disabled {\n  color: rgba(255, 255, 255, 0.25);\n}\n\n.navbar-dark .navbar-nav .show > .nav-link,\n.navbar-dark .navbar-nav .nav-link.active {\n  color: #fff;\n}\n\n.navbar-dark .navbar-toggler {\n  color: rgba(255, 255, 255, 0.75);\n  border-color: rgba(255, 255, 255, 0.1);\n}\n\n.navbar-dark .navbar-toggler-icon {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.75%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e\");\n}\n\n.navbar-dark .navbar-text {\n  color: rgba(255, 255, 255, 0.75);\n}\n\n.navbar-dark .navbar-text a,\n.navbar-dark .navbar-text a:hover,\n.navbar-dark .navbar-text a:focus {\n  color: #fff;\n}\n\n.card {\n  position: relative;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  min-width: 0;\n  word-wrap: break-word;\n  background-color: #4e5d6c;\n  background-clip: border-box;\n  border: 1px solid rgba(0, 0, 0, 0.125);\n  border-radius: 0;\n}\n\n.card > hr {\n  margin-right: 0;\n  margin-left: 0;\n}\n\n.card > .list-group {\n  border-top: inherit;\n  border-bottom: inherit;\n}\n\n.card > .list-group:first-child {\n  border-top-width: 0;\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n}\n\n.card > .list-group:last-child {\n  border-bottom-width: 0;\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 0;\n}\n\n.card > .card-header + .list-group,\n.card > .list-group + .card-footer {\n  border-top: 0;\n}\n\n.card-body {\n  -ms-flex: 1 1 auto;\n  flex: 1 1 auto;\n  padding: 1rem 1rem;\n}\n\n.card-title {\n  margin-bottom: 0.5rem;\n}\n\n.card-subtitle {\n  margin-top: -0.25rem;\n  margin-bottom: 0;\n}\n\n.card-text:last-child {\n  margin-bottom: 0;\n}\n\n.card-link + .card-link {\n  margin-left: 1rem;\n}\n\n.card-header {\n  padding: 0.5rem 1rem;\n  margin-bottom: 0;\n  background-color: rgba(255, 255, 255, 0.075);\n  border-bottom: 1px solid rgba(0, 0, 0, 0.125);\n}\n\n.card-header:first-child {\n  border-radius: 0 0 0 0;\n}\n\n.card-footer {\n  padding: 0.5rem 1rem;\n  background-color: rgba(255, 255, 255, 0.075);\n  border-top: 1px solid rgba(0, 0, 0, 0.125);\n}\n\n.card-footer:last-child {\n  border-radius: 0 0 0 0;\n}\n\n.card-header-tabs {\n  margin-right: -0.5rem;\n  margin-bottom: -0.5rem;\n  margin-left: -0.5rem;\n  border-bottom: 0;\n}\n\n.card-header-tabs .nav-link.active {\n  background-color: #4e5d6c;\n  border-bottom-color: #4e5d6c;\n}\n\n.card-header-pills {\n  margin-right: -0.5rem;\n  margin-left: -0.5rem;\n}\n\n.card-img-overlay {\n  position: absolute;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  padding: 1rem;\n  border-radius: 0;\n}\n\n.card-img,\n.card-img-top,\n.card-img-bottom {\n  width: 100%;\n}\n\n.card-img,\n.card-img-top {\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n}\n\n.card-img,\n.card-img-bottom {\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 0;\n}\n\n.card-group > .card {\n  margin-bottom: 0.75rem;\n}\n\n@media (min-width: 576px) {\n  .card-group {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-flow: row wrap;\n    flex-flow: row wrap;\n  }\n  .card-group > .card {\n    -ms-flex: 1 0 0%;\n    flex: 1 0 0%;\n    margin-bottom: 0;\n  }\n  .card-group > .card + .card {\n    margin-left: 0;\n    border-left: 0;\n  }\n  .card-group > .card:not(:last-child) {\n    border-top-right-radius: 0;\n    border-bottom-right-radius: 0;\n  }\n  .card-group > .card:not(:last-child) .card-img-top,\n  .card-group > .card:not(:last-child) .card-header {\n    border-top-right-radius: 0;\n  }\n  .card-group > .card:not(:last-child) .card-img-bottom,\n  .card-group > .card:not(:last-child) .card-footer {\n    border-bottom-right-radius: 0;\n  }\n  .card-group > .card:not(:first-child) {\n    border-top-left-radius: 0;\n    border-bottom-left-radius: 0;\n  }\n  .card-group > .card:not(:first-child) .card-img-top,\n  .card-group > .card:not(:first-child) .card-header {\n    border-top-left-radius: 0;\n  }\n  .card-group > .card:not(:first-child) .card-img-bottom,\n  .card-group > .card:not(:first-child) .card-footer {\n    border-bottom-left-radius: 0;\n  }\n}\n\n.accordion-button {\n  position: relative;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-align: center;\n  align-items: center;\n  width: 100%;\n  padding: 1rem 1.25rem;\n  font-size: 1rem;\n  color: #ebebeb;\n  text-align: left;\n  background-color: #0f2537;\n  border: 0;\n  border-radius: 0;\n  overflow-anchor: none;\n  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, border-radius 0.15s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .accordion-button {\n    transition: none;\n  }\n}\n\n.accordion-button:not(.collapsed) {\n  color: #448cd1;\n  background-color: #edf5fd;\n  box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.125);\n}\n\n.accordion-button:not(.collapsed)::after {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23448cd1'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e\");\n  -webkit-transform: rotate(-180deg);\n  transform: rotate(-180deg);\n}\n\n.accordion-button::after {\n  -ms-flex-negative: 0;\n  flex-shrink: 0;\n  width: 1.25rem;\n  height: 1.25rem;\n  margin-left: auto;\n  content: \"\";\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23ebebeb'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e\");\n  background-repeat: no-repeat;\n  background-size: 1.25rem;\n  transition: -webkit-transform 0.2s ease-in-out;\n  transition: transform 0.2s ease-in-out;\n  transition: transform 0.2s ease-in-out, -webkit-transform 0.2s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .accordion-button::after {\n    transition: none;\n  }\n}\n\n.accordion-button:hover {\n  z-index: 2;\n}\n\n.accordion-button:focus {\n  z-index: 3;\n  border-color: #a6cdf4;\n  outline: 0;\n  box-shadow: 0 0 0 0.25rem rgba(76, 155, 232, 0.25);\n}\n\n.accordion-header {\n  margin-bottom: 0;\n}\n\n.accordion-item {\n  background-color: #0f2537;\n  border: 1px solid rgba(0, 0, 0, 0.125);\n}\n\n.accordion-item:first-of-type {\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n}\n\n.accordion-item:first-of-type .accordion-button {\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n}\n\n.accordion-item:not(:first-of-type) {\n  border-top: 0;\n}\n\n.accordion-item:last-of-type {\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 0;\n}\n\n.accordion-item:last-of-type .accordion-button.collapsed {\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 0;\n}\n\n.accordion-item:last-of-type .accordion-collapse {\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 0;\n}\n\n.accordion-body {\n  padding: 1rem 1.25rem;\n}\n\n.accordion-flush .accordion-collapse {\n  border-width: 0;\n}\n\n.accordion-flush .accordion-item {\n  border-right: 0;\n  border-left: 0;\n  border-radius: 0;\n}\n\n.accordion-flush .accordion-item:first-child {\n  border-top: 0;\n}\n\n.accordion-flush .accordion-item:last-child {\n  border-bottom: 0;\n}\n\n.accordion-flush .accordion-item .accordion-button {\n  border-radius: 0;\n}\n\n.breadcrumb {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n  flex-wrap: wrap;\n  padding: 0.375rem 0.75rem;\n  margin-bottom: 1rem;\n  list-style: none;\n  background-color: #4e5d6c;\n}\n\n.breadcrumb-item + .breadcrumb-item {\n  padding-left: 0.5rem;\n}\n\n.breadcrumb-item + .breadcrumb-item::before {\n  float: left;\n  padding-right: 0.5rem;\n  color: #ebebeb;\n  content: var(--bs-breadcrumb-divider, \"/\") /* rtl: var(--bs-breadcrumb-divider, \"/\") */;\n}\n\n.breadcrumb-item.active {\n  color: #ebebeb;\n}\n\n.pagination {\n  display: -ms-flexbox;\n  display: flex;\n  padding-left: 0;\n  list-style: none;\n}\n\n.page-link {\n  position: relative;\n  display: block;\n  color: #fff;\n  text-decoration: none;\n  background-color: #4e5d6c;\n  border: 1px solid transparent;\n  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .page-link {\n    transition: none;\n  }\n}\n\n.page-link:hover {\n  z-index: 2;\n  color: #fff;\n  background-color: rgba(255, 255, 255, 0.4);\n  border-color: transparent;\n}\n\n.page-link:focus {\n  z-index: 3;\n  color: #3d7cba;\n  background-color: #4e5d6c;\n  outline: 0;\n  box-shadow: 0 0 0 0.25rem rgba(76, 155, 232, 0.25);\n}\n\n.page-item:not(:first-child) .page-link {\n  margin-left: -1px;\n}\n\n.page-item.active .page-link {\n  z-index: 3;\n  color: #fff;\n  background-color: #4c9be8;\n  border-color: #4c9be8;\n}\n\n.page-item.disabled .page-link {\n  color: rgba(255, 255, 255, 0.4);\n  pointer-events: none;\n  background-color: #4e5d6c;\n  border-color: transparent;\n}\n\n.page-link {\n  padding: 0.375rem 0.75rem;\n}\n\n.page-item:first-child .page-link {\n  border-top-left-radius: 0;\n  border-bottom-left-radius: 0;\n}\n\n.page-item:last-child .page-link {\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n}\n\n.pagination-lg .page-link {\n  padding: 0.75rem 1.5rem;\n  font-size: 1.25rem;\n}\n\n.pagination-lg .page-item:first-child .page-link {\n  border-top-left-radius: 0;\n  border-bottom-left-radius: 0;\n}\n\n.pagination-lg .page-item:last-child .page-link {\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n}\n\n.pagination-sm .page-link {\n  padding: 0.25rem 0.5rem;\n  font-size: 0.875rem;\n}\n\n.pagination-sm .page-item:first-child .page-link {\n  border-top-left-radius: 0;\n  border-bottom-left-radius: 0;\n}\n\n.pagination-sm .page-item:last-child .page-link {\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n}\n\n.badge {\n  display: inline-block;\n  padding: 0.35em 0.65em;\n  font-size: 0.75em;\n  font-weight: 700;\n  line-height: 1;\n  color: #fff;\n  text-align: center;\n  white-space: nowrap;\n  vertical-align: baseline;\n  border-radius: 0;\n}\n\n.badge:empty {\n  display: none;\n}\n\n.btn .badge {\n  position: relative;\n  top: -1px;\n}\n\n.alert {\n  position: relative;\n  padding: 1rem 1rem;\n  margin-bottom: 1rem;\n  border: 1px solid transparent;\n  border-radius: 0;\n}\n\n.alert-heading {\n  color: inherit;\n}\n\n.alert-link {\n  font-weight: 700;\n}\n\n.alert-dismissible {\n  padding-right: 3rem;\n}\n\n.alert-dismissible .btn-close {\n  position: absolute;\n  top: 0;\n  right: 0;\n  z-index: 2;\n  padding: 1.25rem 1rem;\n}\n\n.alert-primary {\n  color: #2e5d8b;\n  background-color: #dbebfa;\n  border-color: #c9e1f8;\n}\n\n.alert-primary .alert-link {\n  color: #254a6f;\n}\n\n.alert-secondary {\n  color: #2f3841;\n  background-color: #dcdfe2;\n  border-color: #caced3;\n}\n\n.alert-secondary .alert-link {\n  color: #262d34;\n}\n\n.alert-success {\n  color: #376e37;\n  background-color: #def1de;\n  border-color: #ceeace;\n}\n\n.alert-success .alert-link {\n  color: #2c582c;\n}\n\n.alert-info {\n  color: #377385;\n  background-color: #def2f8;\n  border-color: #ceecf5;\n}\n\n.alert-info .alert-link {\n  color: #2c5c6a;\n}\n\n.alert-warning {\n  color: #997404;\n  background-color: #fff3cd;\n  border-color: #ffecb5;\n}\n\n.alert-warning .alert-link {\n  color: #7a5d03;\n}\n\n.alert-danger {\n  color: #82322f;\n  background-color: #f7dddc;\n  border-color: #f4cbca;\n}\n\n.alert-danger .alert-link {\n  color: #682826;\n}\n\n.alert-light {\n  color: #666d74;\n  background-color: #eef0f3;\n  border-color: #e6e9ed;\n}\n\n.alert-light .alert-link {\n  color: #52575d;\n}\n\n.alert-dark {\n  color: #13212e;\n  background-color: #d2d7db;\n  border-color: #bcc3c9;\n}\n\n.alert-dark .alert-link {\n  color: #0f1a25;\n}\n\n@-webkit-keyframes progress-bar-stripes {\n  0% {\n    background-position-x: 1rem;\n  }\n}\n\n@keyframes progress-bar-stripes {\n  0% {\n    background-position-x: 1rem;\n  }\n}\n\n.progress {\n  display: -ms-flexbox;\n  display: flex;\n  height: 1rem;\n  overflow: hidden;\n  font-size: 0.75rem;\n  background-color: #4e5d6c;\n  border-radius: 0;\n}\n\n.progress-bar {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  -ms-flex-pack: center;\n  justify-content: center;\n  overflow: hidden;\n  color: #fff;\n  text-align: center;\n  white-space: nowrap;\n  background-color: #4c9be8;\n  transition: width 0.6s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .progress-bar {\n    transition: none;\n  }\n}\n\n.progress-bar-striped {\n  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-size: 1rem 1rem;\n}\n\n.progress-bar-animated {\n  -webkit-animation: 1s linear infinite progress-bar-stripes;\n  animation: 1s linear infinite progress-bar-stripes;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .progress-bar-animated {\n    -webkit-animation: none;\n    animation: none;\n  }\n}\n\n.list-group {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  padding-left: 0;\n  margin-bottom: 0;\n  border-radius: 0;\n}\n\n.list-group-numbered {\n  list-style-type: none;\n  counter-reset: section;\n}\n\n.list-group-numbered > li::before {\n  content: counters(section, \".\") \". \";\n  counter-increment: section;\n}\n\n.list-group-item-action {\n  width: 100%;\n  color: #fff;\n  text-align: inherit;\n}\n\n.list-group-item-action:hover, .list-group-item-action:focus {\n  z-index: 1;\n  color: #fff;\n  text-decoration: none;\n  background-color: rgba(255, 255, 255, 0.4);\n}\n\n.list-group-item-action:active {\n  color: #ebebeb;\n  background-color: #4e5d6c;\n}\n\n.list-group-item {\n  position: relative;\n  display: block;\n  padding: 0.5rem 1rem;\n  color: #fff;\n  text-decoration: none;\n  background-color: #4e5d6c;\n  border: 1px solid transparent;\n}\n\n.list-group-item:first-child {\n  border-top-left-radius: inherit;\n  border-top-right-radius: inherit;\n}\n\n.list-group-item:last-child {\n  border-bottom-right-radius: inherit;\n  border-bottom-left-radius: inherit;\n}\n\n.list-group-item.disabled, .list-group-item:disabled {\n  color: rgba(255, 255, 255, 0.4);\n  pointer-events: none;\n  background-color: #4e5d6c;\n}\n\n.list-group-item.active {\n  z-index: 2;\n  color: #fff;\n  background-color: #4c9be8;\n  border-color: #4c9be8;\n}\n\n.list-group-item + .list-group-item {\n  border-top-width: 0;\n}\n\n.list-group-item + .list-group-item.active {\n  margin-top: -1px;\n  border-top-width: 1px;\n}\n\n.list-group-horizontal {\n  -ms-flex-direction: row;\n  flex-direction: row;\n}\n\n.list-group-horizontal > .list-group-item:first-child {\n  border-bottom-left-radius: 0;\n  border-top-right-radius: 0;\n}\n\n.list-group-horizontal > .list-group-item:last-child {\n  border-top-right-radius: 0;\n  border-bottom-left-radius: 0;\n}\n\n.list-group-horizontal > .list-group-item.active {\n  margin-top: 0;\n}\n\n.list-group-horizontal > .list-group-item + .list-group-item {\n  border-top-width: 1px;\n  border-left-width: 0;\n}\n\n.list-group-horizontal > .list-group-item + .list-group-item.active {\n  margin-left: -1px;\n  border-left-width: 1px;\n}\n\n@media (min-width: 576px) {\n  .list-group-horizontal-sm {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .list-group-horizontal-sm > .list-group-item:first-child {\n    border-bottom-left-radius: 0;\n    border-top-right-radius: 0;\n  }\n  .list-group-horizontal-sm > .list-group-item:last-child {\n    border-top-right-radius: 0;\n    border-bottom-left-radius: 0;\n  }\n  .list-group-horizontal-sm > .list-group-item.active {\n    margin-top: 0;\n  }\n  .list-group-horizontal-sm > .list-group-item + .list-group-item {\n    border-top-width: 1px;\n    border-left-width: 0;\n  }\n  .list-group-horizontal-sm > .list-group-item + .list-group-item.active {\n    margin-left: -1px;\n    border-left-width: 1px;\n  }\n}\n\n@media (min-width: 768px) {\n  .list-group-horizontal-md {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .list-group-horizontal-md > .list-group-item:first-child {\n    border-bottom-left-radius: 0;\n    border-top-right-radius: 0;\n  }\n  .list-group-horizontal-md > .list-group-item:last-child {\n    border-top-right-radius: 0;\n    border-bottom-left-radius: 0;\n  }\n  .list-group-horizontal-md > .list-group-item.active {\n    margin-top: 0;\n  }\n  .list-group-horizontal-md > .list-group-item + .list-group-item {\n    border-top-width: 1px;\n    border-left-width: 0;\n  }\n  .list-group-horizontal-md > .list-group-item + .list-group-item.active {\n    margin-left: -1px;\n    border-left-width: 1px;\n  }\n}\n\n@media (min-width: 992px) {\n  .list-group-horizontal-lg {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .list-group-horizontal-lg > .list-group-item:first-child {\n    border-bottom-left-radius: 0;\n    border-top-right-radius: 0;\n  }\n  .list-group-horizontal-lg > .list-group-item:last-child {\n    border-top-right-radius: 0;\n    border-bottom-left-radius: 0;\n  }\n  .list-group-horizontal-lg > .list-group-item.active {\n    margin-top: 0;\n  }\n  .list-group-horizontal-lg > .list-group-item + .list-group-item {\n    border-top-width: 1px;\n    border-left-width: 0;\n  }\n  .list-group-horizontal-lg > .list-group-item + .list-group-item.active {\n    margin-left: -1px;\n    border-left-width: 1px;\n  }\n}\n\n@media (min-width: 1200px) {\n  .list-group-horizontal-xl {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .list-group-horizontal-xl > .list-group-item:first-child {\n    border-bottom-left-radius: 0;\n    border-top-right-radius: 0;\n  }\n  .list-group-horizontal-xl > .list-group-item:last-child {\n    border-top-right-radius: 0;\n    border-bottom-left-radius: 0;\n  }\n  .list-group-horizontal-xl > .list-group-item.active {\n    margin-top: 0;\n  }\n  .list-group-horizontal-xl > .list-group-item + .list-group-item {\n    border-top-width: 1px;\n    border-left-width: 0;\n  }\n  .list-group-horizontal-xl > .list-group-item + .list-group-item.active {\n    margin-left: -1px;\n    border-left-width: 1px;\n  }\n}\n\n@media (min-width: 1400px) {\n  .list-group-horizontal-xxl {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .list-group-horizontal-xxl > .list-group-item:first-child {\n    border-bottom-left-radius: 0;\n    border-top-right-radius: 0;\n  }\n  .list-group-horizontal-xxl > .list-group-item:last-child {\n    border-top-right-radius: 0;\n    border-bottom-left-radius: 0;\n  }\n  .list-group-horizontal-xxl > .list-group-item.active {\n    margin-top: 0;\n  }\n  .list-group-horizontal-xxl > .list-group-item + .list-group-item {\n    border-top-width: 1px;\n    border-left-width: 0;\n  }\n  .list-group-horizontal-xxl > .list-group-item + .list-group-item.active {\n    margin-left: -1px;\n    border-left-width: 1px;\n  }\n}\n\n.list-group-flush {\n  border-radius: 0;\n}\n\n.list-group-flush > .list-group-item {\n  border-width: 0 0 1px;\n}\n\n.list-group-flush > .list-group-item:last-child {\n  border-bottom-width: 0;\n}\n\n.list-group-item-primary {\n  color: #2e5d8b;\n  background-color: #dbebfa;\n}\n\n.list-group-item-primary.list-group-item-action:hover, .list-group-item-primary.list-group-item-action:focus {\n  color: #2e5d8b;\n  background-color: #c5d4e1;\n}\n\n.list-group-item-primary.list-group-item-action.active {\n  color: #fff;\n  background-color: #2e5d8b;\n  border-color: #2e5d8b;\n}\n\n.list-group-item-secondary {\n  color: #2f3841;\n  background-color: #dcdfe2;\n}\n\n.list-group-item-secondary.list-group-item-action:hover, .list-group-item-secondary.list-group-item-action:focus {\n  color: #2f3841;\n  background-color: #c6c9cb;\n}\n\n.list-group-item-secondary.list-group-item-action.active {\n  color: #fff;\n  background-color: #2f3841;\n  border-color: #2f3841;\n}\n\n.list-group-item-success {\n  color: #376e37;\n  background-color: #def1de;\n}\n\n.list-group-item-success.list-group-item-action:hover, .list-group-item-success.list-group-item-action:focus {\n  color: #376e37;\n  background-color: #c8d9c8;\n}\n\n.list-group-item-success.list-group-item-action.active {\n  color: #fff;\n  background-color: #376e37;\n  border-color: #376e37;\n}\n\n.list-group-item-info {\n  color: #377385;\n  background-color: #def2f8;\n}\n\n.list-group-item-info.list-group-item-action:hover, .list-group-item-info.list-group-item-action:focus {\n  color: #377385;\n  background-color: #c8dadf;\n}\n\n.list-group-item-info.list-group-item-action.active {\n  color: #fff;\n  background-color: #377385;\n  border-color: #377385;\n}\n\n.list-group-item-warning {\n  color: #997404;\n  background-color: #fff3cd;\n}\n\n.list-group-item-warning.list-group-item-action:hover, .list-group-item-warning.list-group-item-action:focus {\n  color: #997404;\n  background-color: #e6dbb9;\n}\n\n.list-group-item-warning.list-group-item-action.active {\n  color: #fff;\n  background-color: #997404;\n  border-color: #997404;\n}\n\n.list-group-item-danger {\n  color: #82322f;\n  background-color: #f7dddc;\n}\n\n.list-group-item-danger.list-group-item-action:hover, .list-group-item-danger.list-group-item-action:focus {\n  color: #82322f;\n  background-color: #dec7c6;\n}\n\n.list-group-item-danger.list-group-item-action.active {\n  color: #fff;\n  background-color: #82322f;\n  border-color: #82322f;\n}\n\n.list-group-item-light {\n  color: #666d74;\n  background-color: #eef0f3;\n}\n\n.list-group-item-light.list-group-item-action:hover, .list-group-item-light.list-group-item-action:focus {\n  color: #666d74;\n  background-color: #d6d8db;\n}\n\n.list-group-item-light.list-group-item-action.active {\n  color: #fff;\n  background-color: #666d74;\n  border-color: #666d74;\n}\n\n.list-group-item-dark {\n  color: #13212e;\n  background-color: #d2d7db;\n}\n\n.list-group-item-dark.list-group-item-action:hover, .list-group-item-dark.list-group-item-action:focus {\n  color: #13212e;\n  background-color: #bdc2c5;\n}\n\n.list-group-item-dark.list-group-item-action.active {\n  color: #fff;\n  background-color: #13212e;\n  border-color: #13212e;\n}\n\n.btn-close {\n  box-sizing: content-box;\n  width: 1em;\n  height: 1em;\n  padding: 0.25em 0.25em;\n  color: #fff;\n  background: transparent url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M.293.293a1 1 0 011.414 0L8 6.586 14.293.293a1 1 0 111.414 1.414L9.414 8l6.293 6.293a1 1 0 01-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 01-1.414-1.414L6.586 8 .293 1.707a1 1 0 010-1.414z'/%3e%3c/svg%3e\") center/1em auto no-repeat;\n  border: 0;\n  border-radius: 0;\n  opacity: 0.5;\n}\n\n.btn-close:hover {\n  color: #fff;\n  text-decoration: none;\n  opacity: 1;\n}\n\n.btn-close:focus {\n  outline: 0;\n  box-shadow: 0 0 0 0.25rem rgba(76, 155, 232, 0.25);\n  opacity: 1;\n}\n\n.btn-close:disabled, .btn-close.disabled {\n  pointer-events: none;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  user-select: none;\n  opacity: 0.25;\n}\n\n.btn-close-white {\n  -webkit-filter: invert(1) grayscale(100%) brightness(200%);\n  filter: invert(1) grayscale(100%) brightness(200%);\n}\n\n.toast {\n  width: 350px;\n  max-width: 100%;\n  font-size: 0.875rem;\n  pointer-events: auto;\n  background-color: #4e5d6c;\n  background-clip: padding-box;\n  border: 1px solid rgba(0, 0, 0, 0.2);\n  box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15);\n  border-radius: 0;\n}\n\n.toast.showing {\n  opacity: 0;\n}\n\n.toast:not(.show) {\n  display: none;\n}\n\n.toast-container {\n  width: -webkit-max-content;\n  width: -moz-max-content;\n  width: max-content;\n  max-width: 100%;\n  pointer-events: none;\n}\n\n.toast-container > :not(:last-child) {\n  margin-bottom: 0.75rem;\n}\n\n.toast-header {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-align: center;\n  align-items: center;\n  padding: 0.5rem 0.75rem;\n  color: #ebebeb;\n  background-color: #4e5d6c;\n  background-clip: padding-box;\n  border-bottom: 1px solid rgba(0, 0, 0, 0.2);\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n}\n\n.toast-header .btn-close {\n  margin-right: -0.375rem;\n  margin-left: 0.75rem;\n}\n\n.toast-body {\n  padding: 0.75rem;\n  word-wrap: break-word;\n}\n\n.modal {\n  position: fixed;\n  top: 0;\n  left: 0;\n  z-index: 1055;\n  display: none;\n  width: 100%;\n  height: 100%;\n  overflow-x: hidden;\n  overflow-y: auto;\n  outline: 0;\n}\n\n.modal-dialog {\n  position: relative;\n  width: auto;\n  margin: 0.5rem;\n  pointer-events: none;\n}\n\n.modal.fade .modal-dialog {\n  transition: -webkit-transform 0.3s ease-out;\n  transition: transform 0.3s ease-out;\n  transition: transform 0.3s ease-out, -webkit-transform 0.3s ease-out;\n  -webkit-transform: translate(0, -50px);\n  transform: translate(0, -50px);\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .modal.fade .modal-dialog {\n    transition: none;\n  }\n}\n\n.modal.show .modal-dialog {\n  -webkit-transform: none;\n  transform: none;\n}\n\n.modal.modal-static .modal-dialog {\n  -webkit-transform: scale(1.02);\n  transform: scale(1.02);\n}\n\n.modal-dialog-scrollable {\n  height: calc(100% - 1rem);\n}\n\n.modal-dialog-scrollable .modal-content {\n  max-height: 100%;\n  overflow: hidden;\n}\n\n.modal-dialog-scrollable .modal-body {\n  overflow-y: auto;\n}\n\n.modal-dialog-centered {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-align: center;\n  align-items: center;\n  min-height: calc(100% - 1rem);\n}\n\n.modal-content {\n  position: relative;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  width: 100%;\n  pointer-events: auto;\n  background-color: #4e5d6c;\n  background-clip: padding-box;\n  border: 1px solid rgba(0, 0, 0, 0.2);\n  border-radius: 0;\n  outline: 0;\n}\n\n.modal-backdrop {\n  position: fixed;\n  top: 0;\n  left: 0;\n  z-index: 1050;\n  width: 100vw;\n  height: 100vh;\n  background-color: #000;\n}\n\n.modal-backdrop.fade {\n  opacity: 0;\n}\n\n.modal-backdrop.show {\n  opacity: 0.5;\n}\n\n.modal-header {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-negative: 0;\n  flex-shrink: 0;\n  -ms-flex-align: center;\n  align-items: center;\n  -ms-flex-pack: justify;\n  justify-content: space-between;\n  padding: 1rem 1rem;\n  border-bottom: 1px solid rgba(0, 0, 0, 0.2);\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n}\n\n.modal-header .btn-close {\n  padding: 0.5rem 0.5rem;\n  margin: -0.5rem -0.5rem -0.5rem auto;\n}\n\n.modal-title {\n  margin-bottom: 0;\n  line-height: 1.5;\n}\n\n.modal-body {\n  position: relative;\n  -ms-flex: 1 1 auto;\n  flex: 1 1 auto;\n  padding: 1rem;\n}\n\n.modal-footer {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n  flex-wrap: wrap;\n  -ms-flex-negative: 0;\n  flex-shrink: 0;\n  -ms-flex-align: center;\n  align-items: center;\n  -ms-flex-pack: end;\n  justify-content: flex-end;\n  padding: 0.75rem;\n  border-top: 1px solid rgba(0, 0, 0, 0.2);\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 0;\n}\n\n.modal-footer > * {\n  margin: 0.25rem;\n}\n\n@media (min-width: 576px) {\n  .modal-dialog {\n    max-width: 500px;\n    margin: 1.75rem auto;\n  }\n  .modal-dialog-scrollable {\n    height: calc(100% - 3.5rem);\n  }\n  .modal-dialog-centered {\n    min-height: calc(100% - 3.5rem);\n  }\n  .modal-sm {\n    max-width: 300px;\n  }\n}\n\n@media (min-width: 992px) {\n  .modal-lg,\n  .modal-xl {\n    max-width: 800px;\n  }\n}\n\n@media (min-width: 1200px) {\n  .modal-xl {\n    max-width: 1140px;\n  }\n}\n\n.modal-fullscreen {\n  width: 100vw;\n  max-width: none;\n  height: 100%;\n  margin: 0;\n}\n\n.modal-fullscreen .modal-content {\n  height: 100%;\n  border: 0;\n  border-radius: 0;\n}\n\n.modal-fullscreen .modal-header {\n  border-radius: 0;\n}\n\n.modal-fullscreen .modal-body {\n  overflow-y: auto;\n}\n\n.modal-fullscreen .modal-footer {\n  border-radius: 0;\n}\n\n@media (max-width: 575.98px) {\n  .modal-fullscreen-sm-down {\n    width: 100vw;\n    max-width: none;\n    height: 100%;\n    margin: 0;\n  }\n  .modal-fullscreen-sm-down .modal-content {\n    height: 100%;\n    border: 0;\n    border-radius: 0;\n  }\n  .modal-fullscreen-sm-down .modal-header {\n    border-radius: 0;\n  }\n  .modal-fullscreen-sm-down .modal-body {\n    overflow-y: auto;\n  }\n  .modal-fullscreen-sm-down .modal-footer {\n    border-radius: 0;\n  }\n}\n\n@media (max-width: 767.98px) {\n  .modal-fullscreen-md-down {\n    width: 100vw;\n    max-width: none;\n    height: 100%;\n    margin: 0;\n  }\n  .modal-fullscreen-md-down .modal-content {\n    height: 100%;\n    border: 0;\n    border-radius: 0;\n  }\n  .modal-fullscreen-md-down .modal-header {\n    border-radius: 0;\n  }\n  .modal-fullscreen-md-down .modal-body {\n    overflow-y: auto;\n  }\n  .modal-fullscreen-md-down .modal-footer {\n    border-radius: 0;\n  }\n}\n\n@media (max-width: 991.98px) {\n  .modal-fullscreen-lg-down {\n    width: 100vw;\n    max-width: none;\n    height: 100%;\n    margin: 0;\n  }\n  .modal-fullscreen-lg-down .modal-content {\n    height: 100%;\n    border: 0;\n    border-radius: 0;\n  }\n  .modal-fullscreen-lg-down .modal-header {\n    border-radius: 0;\n  }\n  .modal-fullscreen-lg-down .modal-body {\n    overflow-y: auto;\n  }\n  .modal-fullscreen-lg-down .modal-footer {\n    border-radius: 0;\n  }\n}\n\n@media (max-width: 1199.98px) {\n  .modal-fullscreen-xl-down {\n    width: 100vw;\n    max-width: none;\n    height: 100%;\n    margin: 0;\n  }\n  .modal-fullscreen-xl-down .modal-content {\n    height: 100%;\n    border: 0;\n    border-radius: 0;\n  }\n  .modal-fullscreen-xl-down .modal-header {\n    border-radius: 0;\n  }\n  .modal-fullscreen-xl-down .modal-body {\n    overflow-y: auto;\n  }\n  .modal-fullscreen-xl-down .modal-footer {\n    border-radius: 0;\n  }\n}\n\n@media (max-width: 1399.98px) {\n  .modal-fullscreen-xxl-down {\n    width: 100vw;\n    max-width: none;\n    height: 100%;\n    margin: 0;\n  }\n  .modal-fullscreen-xxl-down .modal-content {\n    height: 100%;\n    border: 0;\n    border-radius: 0;\n  }\n  .modal-fullscreen-xxl-down .modal-header {\n    border-radius: 0;\n  }\n  .modal-fullscreen-xxl-down .modal-body {\n    overflow-y: auto;\n  }\n  .modal-fullscreen-xxl-down .modal-footer {\n    border-radius: 0;\n  }\n}\n\n.tooltip {\n  position: absolute;\n  z-index: 1080;\n  display: block;\n  margin: 0;\n  font-family: var(--bs-font-sans-serif);\n  font-style: normal;\n  font-weight: 400;\n  line-height: 1.5;\n  text-align: left;\n  text-align: start;\n  text-decoration: none;\n  text-shadow: none;\n  text-transform: none;\n  letter-spacing: normal;\n  word-break: normal;\n  word-spacing: normal;\n  white-space: normal;\n  line-break: auto;\n  font-size: 0.875rem;\n  word-wrap: break-word;\n  opacity: 0;\n}\n\n.tooltip.show {\n  opacity: 0.9;\n}\n\n.tooltip .tooltip-arrow {\n  position: absolute;\n  display: block;\n  width: 0.8rem;\n  height: 0.4rem;\n}\n\n.tooltip .tooltip-arrow::before {\n  position: absolute;\n  content: \"\";\n  border-color: transparent;\n  border-style: solid;\n}\n\n.bs-tooltip-top, .bs-tooltip-auto[data-popper-placement^=\"top\"] {\n  padding: 0.4rem 0;\n}\n\n.bs-tooltip-top .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=\"top\"] .tooltip-arrow {\n  bottom: 0;\n}\n\n.bs-tooltip-top .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=\"top\"] .tooltip-arrow::before {\n  top: -1px;\n  border-width: 0.4rem 0.4rem 0;\n  border-top-color: #000;\n}\n\n.bs-tooltip-end, .bs-tooltip-auto[data-popper-placement^=\"right\"] {\n  padding: 0 0.4rem;\n}\n\n.bs-tooltip-end .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=\"right\"] .tooltip-arrow {\n  left: 0;\n  width: 0.4rem;\n  height: 0.8rem;\n}\n\n.bs-tooltip-end .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=\"right\"] .tooltip-arrow::before {\n  right: -1px;\n  border-width: 0.4rem 0.4rem 0.4rem 0;\n  border-right-color: #000;\n}\n\n.bs-tooltip-bottom, .bs-tooltip-auto[data-popper-placement^=\"bottom\"] {\n  padding: 0.4rem 0;\n}\n\n.bs-tooltip-bottom .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=\"bottom\"] .tooltip-arrow {\n  top: 0;\n}\n\n.bs-tooltip-bottom .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=\"bottom\"] .tooltip-arrow::before {\n  bottom: -1px;\n  border-width: 0 0.4rem 0.4rem;\n  border-bottom-color: #000;\n}\n\n.bs-tooltip-start, .bs-tooltip-auto[data-popper-placement^=\"left\"] {\n  padding: 0 0.4rem;\n}\n\n.bs-tooltip-start .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=\"left\"] .tooltip-arrow {\n  right: 0;\n  width: 0.4rem;\n  height: 0.8rem;\n}\n\n.bs-tooltip-start .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=\"left\"] .tooltip-arrow::before {\n  left: -1px;\n  border-width: 0.4rem 0 0.4rem 0.4rem;\n  border-left-color: #000;\n}\n\n.tooltip-inner {\n  max-width: 200px;\n  padding: 0.25rem 0.5rem;\n  color: #fff;\n  text-align: center;\n  background-color: #000;\n  border-radius: 0;\n}\n\n.popover {\n  position: absolute;\n  top: 0;\n  left: 0 /* rtl:ignore */;\n  z-index: 1070;\n  display: block;\n  max-width: 276px;\n  font-family: var(--bs-font-sans-serif);\n  font-style: normal;\n  font-weight: 400;\n  line-height: 1.5;\n  text-align: left;\n  text-align: start;\n  text-decoration: none;\n  text-shadow: none;\n  text-transform: none;\n  letter-spacing: normal;\n  word-break: normal;\n  word-spacing: normal;\n  white-space: normal;\n  line-break: auto;\n  font-size: 0.875rem;\n  word-wrap: break-word;\n  background-color: #4e5d6c;\n  background-clip: padding-box;\n  border: 1px solid rgba(0, 0, 0, 0.2);\n  border-radius: 0;\n}\n\n.popover .popover-arrow {\n  position: absolute;\n  display: block;\n  width: 1rem;\n  height: 0.5rem;\n}\n\n.popover .popover-arrow::before, .popover .popover-arrow::after {\n  position: absolute;\n  display: block;\n  content: \"\";\n  border-color: transparent;\n  border-style: solid;\n}\n\n.bs-popover-top > .popover-arrow, .bs-popover-auto[data-popper-placement^=\"top\"] > .popover-arrow {\n  bottom: calc(-0.5rem - 1px);\n}\n\n.bs-popover-top > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=\"top\"] > .popover-arrow::before {\n  bottom: 0;\n  border-width: 0.5rem 0.5rem 0;\n  border-top-color: rgba(0, 0, 0, 0.25);\n}\n\n.bs-popover-top > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=\"top\"] > .popover-arrow::after {\n  bottom: 1px;\n  border-width: 0.5rem 0.5rem 0;\n  border-top-color: #4e5d6c;\n}\n\n.bs-popover-end > .popover-arrow, .bs-popover-auto[data-popper-placement^=\"right\"] > .popover-arrow {\n  left: calc(-0.5rem - 1px);\n  width: 0.5rem;\n  height: 1rem;\n}\n\n.bs-popover-end > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=\"right\"] > .popover-arrow::before {\n  left: 0;\n  border-width: 0.5rem 0.5rem 0.5rem 0;\n  border-right-color: rgba(0, 0, 0, 0.25);\n}\n\n.bs-popover-end > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=\"right\"] > .popover-arrow::after {\n  left: 1px;\n  border-width: 0.5rem 0.5rem 0.5rem 0;\n  border-right-color: #4e5d6c;\n}\n\n.bs-popover-bottom > .popover-arrow, .bs-popover-auto[data-popper-placement^=\"bottom\"] > .popover-arrow {\n  top: calc(-0.5rem - 1px);\n}\n\n.bs-popover-bottom > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=\"bottom\"] > .popover-arrow::before {\n  top: 0;\n  border-width: 0 0.5rem 0.5rem 0.5rem;\n  border-bottom-color: rgba(0, 0, 0, 0.25);\n}\n\n.bs-popover-bottom > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=\"bottom\"] > .popover-arrow::after {\n  top: 1px;\n  border-width: 0 0.5rem 0.5rem 0.5rem;\n  border-bottom-color: #4e5d6c;\n}\n\n.bs-popover-bottom .popover-header::before, .bs-popover-auto[data-popper-placement^=\"bottom\"] .popover-header::before {\n  position: absolute;\n  top: 0;\n  left: 50%;\n  display: block;\n  width: 1rem;\n  margin-left: -0.5rem;\n  content: \"\";\n  border-bottom: 1px solid rgba(255, 255, 255, 0.075);\n}\n\n.bs-popover-start > .popover-arrow, .bs-popover-auto[data-popper-placement^=\"left\"] > .popover-arrow {\n  right: calc(-0.5rem - 1px);\n  width: 0.5rem;\n  height: 1rem;\n}\n\n.bs-popover-start > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=\"left\"] > .popover-arrow::before {\n  right: 0;\n  border-width: 0.5rem 0 0.5rem 0.5rem;\n  border-left-color: rgba(0, 0, 0, 0.25);\n}\n\n.bs-popover-start > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=\"left\"] > .popover-arrow::after {\n  right: 1px;\n  border-width: 0.5rem 0 0.5rem 0.5rem;\n  border-left-color: #4e5d6c;\n}\n\n.popover-header {\n  padding: 0.5rem 1rem;\n  margin-bottom: 0;\n  font-size: 1rem;\n  background-color: rgba(255, 255, 255, 0.075);\n  border-bottom: 1px solid rgba(0, 0, 0, 0.2);\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n}\n\n.popover-header:empty {\n  display: none;\n}\n\n.popover-body {\n  padding: 1rem 1rem;\n  color: #ebebeb;\n}\n\n.carousel {\n  position: relative;\n}\n\n.carousel.pointer-event {\n  -ms-touch-action: pan-y;\n  touch-action: pan-y;\n}\n\n.carousel-inner {\n  position: relative;\n  width: 100%;\n  overflow: hidden;\n}\n\n.carousel-inner::after {\n  display: block;\n  clear: both;\n  content: \"\";\n}\n\n.carousel-item {\n  position: relative;\n  display: none;\n  float: left;\n  width: 100%;\n  margin-right: -100%;\n  -webkit-backface-visibility: hidden;\n  backface-visibility: hidden;\n  transition: -webkit-transform 0.6s ease-in-out;\n  transition: transform 0.6s ease-in-out;\n  transition: transform 0.6s ease-in-out, -webkit-transform 0.6s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .carousel-item {\n    transition: none;\n  }\n}\n\n.carousel-item.active,\n.carousel-item-next,\n.carousel-item-prev {\n  display: block;\n}\n\n/* rtl:begin:ignore */\n.carousel-item-next:not(.carousel-item-start),\n.active.carousel-item-end {\n  -webkit-transform: translateX(100%);\n  transform: translateX(100%);\n}\n\n.carousel-item-prev:not(.carousel-item-end),\n.active.carousel-item-start {\n  -webkit-transform: translateX(-100%);\n  transform: translateX(-100%);\n}\n\n/* rtl:end:ignore */\n.carousel-fade .carousel-item {\n  opacity: 0;\n  transition-property: opacity;\n  -webkit-transform: none;\n  transform: none;\n}\n\n.carousel-fade .carousel-item.active,\n.carousel-fade .carousel-item-next.carousel-item-start,\n.carousel-fade .carousel-item-prev.carousel-item-end {\n  z-index: 1;\n  opacity: 1;\n}\n\n.carousel-fade .active.carousel-item-start,\n.carousel-fade .active.carousel-item-end {\n  z-index: 0;\n  opacity: 0;\n  transition: opacity 0s 0.6s;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .carousel-fade .active.carousel-item-start,\n  .carousel-fade .active.carousel-item-end {\n    transition: none;\n  }\n}\n\n.carousel-control-prev,\n.carousel-control-next {\n  position: absolute;\n  top: 0;\n  bottom: 0;\n  z-index: 1;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-align: center;\n  align-items: center;\n  -ms-flex-pack: center;\n  justify-content: center;\n  width: 15%;\n  padding: 0;\n  color: #fff;\n  text-align: center;\n  background: none;\n  border: 0;\n  opacity: 0.5;\n  transition: opacity 0.15s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .carousel-control-prev,\n  .carousel-control-next {\n    transition: none;\n  }\n}\n\n.carousel-control-prev:hover, .carousel-control-prev:focus,\n.carousel-control-next:hover,\n.carousel-control-next:focus {\n  color: #fff;\n  text-decoration: none;\n  outline: 0;\n  opacity: 0.9;\n}\n\n.carousel-control-prev {\n  left: 0;\n}\n\n.carousel-control-next {\n  right: 0;\n}\n\n.carousel-control-prev-icon,\n.carousel-control-next-icon {\n  display: inline-block;\n  width: 2rem;\n  height: 2rem;\n  background-repeat: no-repeat;\n  background-position: 50%;\n  background-size: 100% 100%;\n}\n\n/* rtl:options: {\n  \"autoRename\": true,\n  \"stringMap\":[ {\n    \"name\"    : \"prev-next\",\n    \"search\"  : \"prev\",\n    \"replace\" : \"next\"\n  } ]\n} */\n.carousel-control-prev-icon {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0z'/%3e%3c/svg%3e\");\n}\n\n.carousel-control-next-icon {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e\");\n}\n\n.carousel-indicators {\n  position: absolute;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 2;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-pack: center;\n  justify-content: center;\n  padding: 0;\n  margin-right: 15%;\n  margin-bottom: 1rem;\n  margin-left: 15%;\n  list-style: none;\n}\n\n.carousel-indicators [data-bs-target] {\n  box-sizing: content-box;\n  -ms-flex: 0 1 auto;\n  flex: 0 1 auto;\n  width: 30px;\n  height: 3px;\n  padding: 0;\n  margin-right: 3px;\n  margin-left: 3px;\n  text-indent: -999px;\n  cursor: pointer;\n  background-color: #fff;\n  background-clip: padding-box;\n  border: 0;\n  border-top: 10px solid transparent;\n  border-bottom: 10px solid transparent;\n  opacity: 0.5;\n  transition: opacity 0.6s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .carousel-indicators [data-bs-target] {\n    transition: none;\n  }\n}\n\n.carousel-indicators .active {\n  opacity: 1;\n}\n\n.carousel-caption {\n  position: absolute;\n  right: 15%;\n  bottom: 1.25rem;\n  left: 15%;\n  padding-top: 1.25rem;\n  padding-bottom: 1.25rem;\n  color: #fff;\n  text-align: center;\n}\n\n.carousel-dark .carousel-control-prev-icon,\n.carousel-dark .carousel-control-next-icon {\n  -webkit-filter: invert(1) grayscale(100);\n  filter: invert(1) grayscale(100);\n}\n\n.carousel-dark .carousel-indicators [data-bs-target] {\n  background-color: #000;\n}\n\n.carousel-dark .carousel-caption {\n  color: #000;\n}\n\n@-webkit-keyframes spinner-border {\n  to {\n    -webkit-transform: rotate(360deg) /* rtl:ignore */;\n    transform: rotate(360deg) /* rtl:ignore */;\n  }\n}\n\n@keyframes spinner-border {\n  to {\n    -webkit-transform: rotate(360deg) /* rtl:ignore */;\n    transform: rotate(360deg) /* rtl:ignore */;\n  }\n}\n\n.spinner-border {\n  display: inline-block;\n  width: 2rem;\n  height: 2rem;\n  vertical-align: -0.125em;\n  border: 0.25em solid currentColor;\n  border-right-color: transparent;\n  border-radius: 50%;\n  -webkit-animation: 0.75s linear infinite spinner-border;\n  animation: 0.75s linear infinite spinner-border;\n}\n\n.spinner-border-sm {\n  width: 1rem;\n  height: 1rem;\n  border-width: 0.2em;\n}\n\n@-webkit-keyframes spinner-grow {\n  0% {\n    -webkit-transform: scale(0);\n    transform: scale(0);\n  }\n  50% {\n    opacity: 1;\n    -webkit-transform: none;\n    transform: none;\n  }\n}\n\n@keyframes spinner-grow {\n  0% {\n    -webkit-transform: scale(0);\n    transform: scale(0);\n  }\n  50% {\n    opacity: 1;\n    -webkit-transform: none;\n    transform: none;\n  }\n}\n\n.spinner-grow {\n  display: inline-block;\n  width: 2rem;\n  height: 2rem;\n  vertical-align: -0.125em;\n  background-color: currentColor;\n  border-radius: 50%;\n  opacity: 0;\n  -webkit-animation: 0.75s linear infinite spinner-grow;\n  animation: 0.75s linear infinite spinner-grow;\n}\n\n.spinner-grow-sm {\n  width: 1rem;\n  height: 1rem;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .spinner-border,\n  .spinner-grow {\n    -webkit-animation-duration: 1.5s;\n    animation-duration: 1.5s;\n  }\n}\n\n.offcanvas {\n  position: fixed;\n  bottom: 0;\n  z-index: 1045;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  max-width: 100%;\n  visibility: hidden;\n  background-color: #4e5d6c;\n  background-clip: padding-box;\n  outline: 0;\n  transition: -webkit-transform 0.3s ease-in-out;\n  transition: transform 0.3s ease-in-out;\n  transition: transform 0.3s ease-in-out, -webkit-transform 0.3s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .offcanvas {\n    transition: none;\n  }\n}\n\n.offcanvas-backdrop {\n  position: fixed;\n  top: 0;\n  left: 0;\n  z-index: 1040;\n  width: 100vw;\n  height: 100vh;\n  background-color: #000;\n}\n\n.offcanvas-backdrop.fade {\n  opacity: 0;\n}\n\n.offcanvas-backdrop.show {\n  opacity: 0.5;\n}\n\n.offcanvas-header {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-align: center;\n  align-items: center;\n  -ms-flex-pack: justify;\n  justify-content: space-between;\n  padding: 1rem 1rem;\n}\n\n.offcanvas-header .btn-close {\n  padding: 0.5rem 0.5rem;\n  margin-top: -0.5rem;\n  margin-right: -0.5rem;\n  margin-bottom: -0.5rem;\n}\n\n.offcanvas-title {\n  margin-bottom: 0;\n  line-height: 1.5;\n}\n\n.offcanvas-body {\n  -ms-flex-positive: 1;\n  flex-grow: 1;\n  padding: 1rem 1rem;\n  overflow-y: auto;\n}\n\n.offcanvas-start {\n  top: 0;\n  left: 0;\n  width: 400px;\n  border-right: 1px solid rgba(0, 0, 0, 0.2);\n  -webkit-transform: translateX(-100%);\n  transform: translateX(-100%);\n}\n\n.offcanvas-end {\n  top: 0;\n  right: 0;\n  width: 400px;\n  border-left: 1px solid rgba(0, 0, 0, 0.2);\n  -webkit-transform: translateX(100%);\n  transform: translateX(100%);\n}\n\n.offcanvas-top {\n  top: 0;\n  right: 0;\n  left: 0;\n  height: 30vh;\n  max-height: 100%;\n  border-bottom: 1px solid rgba(0, 0, 0, 0.2);\n  -webkit-transform: translateY(-100%);\n  transform: translateY(-100%);\n}\n\n.offcanvas-bottom {\n  right: 0;\n  left: 0;\n  height: 30vh;\n  max-height: 100%;\n  border-top: 1px solid rgba(0, 0, 0, 0.2);\n  -webkit-transform: translateY(100%);\n  transform: translateY(100%);\n}\n\n.offcanvas.show {\n  -webkit-transform: none;\n  transform: none;\n}\n\n.placeholder {\n  display: inline-block;\n  min-height: 1em;\n  vertical-align: middle;\n  cursor: wait;\n  background-color: currentColor;\n  opacity: 0.5;\n}\n\n.placeholder.btn::before {\n  display: inline-block;\n  content: \"\";\n}\n\n.placeholder-xs {\n  min-height: .6em;\n}\n\n.placeholder-sm {\n  min-height: .8em;\n}\n\n.placeholder-lg {\n  min-height: 1.2em;\n}\n\n.placeholder-glow .placeholder {\n  -webkit-animation: placeholder-glow 2s ease-in-out infinite;\n  animation: placeholder-glow 2s ease-in-out infinite;\n}\n\n@-webkit-keyframes placeholder-glow {\n  50% {\n    opacity: 0.2;\n  }\n}\n\n@keyframes placeholder-glow {\n  50% {\n    opacity: 0.2;\n  }\n}\n\n.placeholder-wave {\n  -webkit-mask-image: linear-gradient(130deg, #000 55%, rgba(0, 0, 0, 0.8) 75%, #000 95%);\n  mask-image: linear-gradient(130deg, #000 55%, rgba(0, 0, 0, 0.8) 75%, #000 95%);\n  -webkit-mask-size: 200% 100%;\n  mask-size: 200% 100%;\n  -webkit-animation: placeholder-wave 2s linear infinite;\n  animation: placeholder-wave 2s linear infinite;\n}\n\n@-webkit-keyframes placeholder-wave {\n  100% {\n    -webkit-mask-position: -200% 0%;\n    mask-position: -200% 0%;\n  }\n}\n\n@keyframes placeholder-wave {\n  100% {\n    -webkit-mask-position: -200% 0%;\n    mask-position: -200% 0%;\n  }\n}\n\n.clearfix::after {\n  display: block;\n  clear: both;\n  content: \"\";\n}\n\n.link-primary {\n  color: #4c9be8;\n}\n\n.link-primary:hover, .link-primary:focus {\n  color: #3d7cba;\n}\n\n.link-secondary {\n  color: #4e5d6c;\n}\n\n.link-secondary:hover, .link-secondary:focus {\n  color: #3e4a56;\n}\n\n.link-success {\n  color: #5cb85c;\n}\n\n.link-success:hover, .link-success:focus {\n  color: #4a934a;\n}\n\n.link-info {\n  color: #5bc0de;\n}\n\n.link-info:hover, .link-info:focus {\n  color: #499ab2;\n}\n\n.link-warning {\n  color: #ffc107;\n}\n\n.link-warning:hover, .link-warning:focus {\n  color: #cc9a06;\n}\n\n.link-danger {\n  color: #d9534f;\n}\n\n.link-danger:hover, .link-danger:focus {\n  color: #ae423f;\n}\n\n.link-light {\n  color: #abb6c2;\n}\n\n.link-light:hover, .link-light:focus {\n  color: #88929b;\n}\n\n.link-dark {\n  color: #20374c;\n}\n\n.link-dark:hover, .link-dark:focus {\n  color: #1a2c3d;\n}\n\n.ratio {\n  position: relative;\n  width: 100%;\n}\n\n.ratio::before {\n  display: block;\n  padding-top: var(--bs-aspect-ratio);\n  content: \"\";\n}\n\n.ratio > * {\n  position: absolute;\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n}\n\n.ratio-1x1 {\n  --bs-aspect-ratio: 100%;\n}\n\n.ratio-4x3 {\n  --bs-aspect-ratio: calc(3 / 4 * 100%);\n}\n\n.ratio-16x9 {\n  --bs-aspect-ratio: calc(9 / 16 * 100%);\n}\n\n.ratio-21x9 {\n  --bs-aspect-ratio: calc(9 / 21 * 100%);\n}\n\n.fixed-top {\n  position: fixed;\n  top: 0;\n  right: 0;\n  left: 0;\n  z-index: 1030;\n}\n\n.fixed-bottom {\n  position: fixed;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 1030;\n}\n\n.sticky-top {\n  position: -webkit-sticky;\n  position: sticky;\n  top: 0;\n  z-index: 1020;\n}\n\n@media (min-width: 576px) {\n  .sticky-sm-top {\n    position: -webkit-sticky;\n    position: sticky;\n    top: 0;\n    z-index: 1020;\n  }\n}\n\n@media (min-width: 768px) {\n  .sticky-md-top {\n    position: -webkit-sticky;\n    position: sticky;\n    top: 0;\n    z-index: 1020;\n  }\n}\n\n@media (min-width: 992px) {\n  .sticky-lg-top {\n    position: -webkit-sticky;\n    position: sticky;\n    top: 0;\n    z-index: 1020;\n  }\n}\n\n@media (min-width: 1200px) {\n  .sticky-xl-top {\n    position: -webkit-sticky;\n    position: sticky;\n    top: 0;\n    z-index: 1020;\n  }\n}\n\n@media (min-width: 1400px) {\n  .sticky-xxl-top {\n    position: -webkit-sticky;\n    position: sticky;\n    top: 0;\n    z-index: 1020;\n  }\n}\n\n.hstack {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-direction: row;\n  flex-direction: row;\n  -ms-flex-align: center;\n  align-items: center;\n  -ms-flex-item-align: stretch;\n  align-self: stretch;\n}\n\n.vstack {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex: 1 1 auto;\n  flex: 1 1 auto;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  -ms-flex-item-align: stretch;\n  align-self: stretch;\n}\n\n.visually-hidden,\n.visually-hidden-focusable:not(:focus):not(:focus-within) {\n  position: absolute !important;\n  width: 1px !important;\n  height: 1px !important;\n  padding: 0 !important;\n  margin: -1px !important;\n  overflow: hidden !important;\n  clip: rect(0, 0, 0, 0) !important;\n  white-space: nowrap !important;\n  border: 0 !important;\n}\n\n.stretched-link::after {\n  position: absolute;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 1;\n  content: \"\";\n}\n\n.text-truncate {\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n}\n\n.vr {\n  display: inline-block;\n  -ms-flex-item-align: stretch;\n  align-self: stretch;\n  width: 1px;\n  min-height: 1em;\n  background-color: currentColor;\n  opacity: 0.25;\n}\n\n.align-baseline {\n  vertical-align: baseline !important;\n}\n\n.align-top {\n  vertical-align: top !important;\n}\n\n.align-middle {\n  vertical-align: middle !important;\n}\n\n.align-bottom {\n  vertical-align: bottom !important;\n}\n\n.align-text-bottom {\n  vertical-align: text-bottom !important;\n}\n\n.align-text-top {\n  vertical-align: text-top !important;\n}\n\n.float-start {\n  float: left !important;\n}\n\n.float-end {\n  float: right !important;\n}\n\n.float-none {\n  float: none !important;\n}\n\n.opacity-0 {\n  opacity: 0 !important;\n}\n\n.opacity-25 {\n  opacity: 0.25 !important;\n}\n\n.opacity-50 {\n  opacity: 0.5 !important;\n}\n\n.opacity-75 {\n  opacity: 0.75 !important;\n}\n\n.opacity-100 {\n  opacity: 1 !important;\n}\n\n.overflow-auto {\n  overflow: auto !important;\n}\n\n.overflow-hidden {\n  overflow: hidden !important;\n}\n\n.overflow-visible {\n  overflow: visible !important;\n}\n\n.overflow-scroll {\n  overflow: scroll !important;\n}\n\n.d-inline {\n  display: inline !important;\n}\n\n.d-inline-block {\n  display: inline-block !important;\n}\n\n.d-block {\n  display: block !important;\n}\n\n.d-grid {\n  display: grid !important;\n}\n\n.d-table {\n  display: table !important;\n}\n\n.d-table-row {\n  display: table-row !important;\n}\n\n.d-table-cell {\n  display: table-cell !important;\n}\n\n.d-flex {\n  display: -ms-flexbox !important;\n  display: flex !important;\n}\n\n.d-inline-flex {\n  display: -ms-inline-flexbox !important;\n  display: inline-flex !important;\n}\n\n.d-none {\n  display: none !important;\n}\n\n.shadow {\n  box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15) !important;\n}\n\n.shadow-sm {\n  box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075) !important;\n}\n\n.shadow-lg {\n  box-shadow: 0 1rem 3rem rgba(0, 0, 0, 0.175) !important;\n}\n\n.shadow-none {\n  box-shadow: none !important;\n}\n\n.position-static {\n  position: static !important;\n}\n\n.position-relative {\n  position: relative !important;\n}\n\n.position-absolute {\n  position: absolute !important;\n}\n\n.position-fixed {\n  position: fixed !important;\n}\n\n.position-sticky {\n  position: -webkit-sticky !important;\n  position: sticky !important;\n}\n\n.top-0 {\n  top: 0 !important;\n}\n\n.top-50 {\n  top: 50% !important;\n}\n\n.top-100 {\n  top: 100% !important;\n}\n\n.bottom-0 {\n  bottom: 0 !important;\n}\n\n.bottom-50 {\n  bottom: 50% !important;\n}\n\n.bottom-100 {\n  bottom: 100% !important;\n}\n\n.start-0 {\n  left: 0 !important;\n}\n\n.start-50 {\n  left: 50% !important;\n}\n\n.start-100 {\n  left: 100% !important;\n}\n\n.end-0 {\n  right: 0 !important;\n}\n\n.end-50 {\n  right: 50% !important;\n}\n\n.end-100 {\n  right: 100% !important;\n}\n\n.translate-middle {\n  -webkit-transform: translate(-50%, -50%) !important;\n  transform: translate(-50%, -50%) !important;\n}\n\n.translate-middle-x {\n  -webkit-transform: translateX(-50%) !important;\n  transform: translateX(-50%) !important;\n}\n\n.translate-middle-y {\n  -webkit-transform: translateY(-50%) !important;\n  transform: translateY(-50%) !important;\n}\n\n.border {\n  border: 1px solid #dee2e6 !important;\n}\n\n.border-0 {\n  border: 0 !important;\n}\n\n.border-top {\n  border-top: 1px solid #dee2e6 !important;\n}\n\n.border-top-0 {\n  border-top: 0 !important;\n}\n\n.border-end {\n  border-right: 1px solid #dee2e6 !important;\n}\n\n.border-end-0 {\n  border-right: 0 !important;\n}\n\n.border-bottom {\n  border-bottom: 1px solid #dee2e6 !important;\n}\n\n.border-bottom-0 {\n  border-bottom: 0 !important;\n}\n\n.border-start {\n  border-left: 1px solid #dee2e6 !important;\n}\n\n.border-start-0 {\n  border-left: 0 !important;\n}\n\n.border-primary {\n  border-color: #4c9be8 !important;\n}\n\n.border-secondary {\n  border-color: #4e5d6c !important;\n}\n\n.border-success {\n  border-color: #5cb85c !important;\n}\n\n.border-info {\n  border-color: #5bc0de !important;\n}\n\n.border-warning {\n  border-color: #ffc107 !important;\n}\n\n.border-danger {\n  border-color: #d9534f !important;\n}\n\n.border-light {\n  border-color: #abb6c2 !important;\n}\n\n.border-dark {\n  border-color: #20374c !important;\n}\n\n.border-white {\n  border-color: #fff !important;\n}\n\n.border-1 {\n  border-width: 1px !important;\n}\n\n.border-2 {\n  border-width: 2px !important;\n}\n\n.border-3 {\n  border-width: 3px !important;\n}\n\n.border-4 {\n  border-width: 4px !important;\n}\n\n.border-5 {\n  border-width: 5px !important;\n}\n\n.w-25 {\n  width: 25% !important;\n}\n\n.w-50 {\n  width: 50% !important;\n}\n\n.w-75 {\n  width: 75% !important;\n}\n\n.w-100 {\n  width: 100% !important;\n}\n\n.w-auto {\n  width: auto !important;\n}\n\n.mw-100 {\n  max-width: 100% !important;\n}\n\n.vw-100 {\n  width: 100vw !important;\n}\n\n.min-vw-100 {\n  min-width: 100vw !important;\n}\n\n.h-25 {\n  height: 25% !important;\n}\n\n.h-50 {\n  height: 50% !important;\n}\n\n.h-75 {\n  height: 75% !important;\n}\n\n.h-100 {\n  height: 100% !important;\n}\n\n.h-auto {\n  height: auto !important;\n}\n\n.mh-100 {\n  max-height: 100% !important;\n}\n\n.vh-100 {\n  height: 100vh !important;\n}\n\n.min-vh-100 {\n  min-height: 100vh !important;\n}\n\n.flex-fill {\n  -ms-flex: 1 1 auto !important;\n  flex: 1 1 auto !important;\n}\n\n.flex-row {\n  -ms-flex-direction: row !important;\n  flex-direction: row !important;\n}\n\n.flex-column {\n  -ms-flex-direction: column !important;\n  flex-direction: column !important;\n}\n\n.flex-row-reverse {\n  -ms-flex-direction: row-reverse !important;\n  flex-direction: row-reverse !important;\n}\n\n.flex-column-reverse {\n  -ms-flex-direction: column-reverse !important;\n  flex-direction: column-reverse !important;\n}\n\n.flex-grow-0 {\n  -ms-flex-positive: 0 !important;\n  flex-grow: 0 !important;\n}\n\n.flex-grow-1 {\n  -ms-flex-positive: 1 !important;\n  flex-grow: 1 !important;\n}\n\n.flex-shrink-0 {\n  -ms-flex-negative: 0 !important;\n  flex-shrink: 0 !important;\n}\n\n.flex-shrink-1 {\n  -ms-flex-negative: 1 !important;\n  flex-shrink: 1 !important;\n}\n\n.flex-wrap {\n  -ms-flex-wrap: wrap !important;\n  flex-wrap: wrap !important;\n}\n\n.flex-nowrap {\n  -ms-flex-wrap: nowrap !important;\n  flex-wrap: nowrap !important;\n}\n\n.flex-wrap-reverse {\n  -ms-flex-wrap: wrap-reverse !important;\n  flex-wrap: wrap-reverse !important;\n}\n\n.gap-0 {\n  gap: 0 !important;\n}\n\n.gap-1 {\n  gap: 0.25rem !important;\n}\n\n.gap-2 {\n  gap: 0.5rem !important;\n}\n\n.gap-3 {\n  gap: 1rem !important;\n}\n\n.gap-4 {\n  gap: 1.5rem !important;\n}\n\n.gap-5 {\n  gap: 3rem !important;\n}\n\n.justify-content-start {\n  -ms-flex-pack: start !important;\n  justify-content: flex-start !important;\n}\n\n.justify-content-end {\n  -ms-flex-pack: end !important;\n  justify-content: flex-end !important;\n}\n\n.justify-content-center {\n  -ms-flex-pack: center !important;\n  justify-content: center !important;\n}\n\n.justify-content-between {\n  -ms-flex-pack: justify !important;\n  justify-content: space-between !important;\n}\n\n.justify-content-around {\n  -ms-flex-pack: distribute !important;\n  justify-content: space-around !important;\n}\n\n.justify-content-evenly {\n  -ms-flex-pack: space-evenly !important;\n  justify-content: space-evenly !important;\n}\n\n.align-items-start {\n  -ms-flex-align: start !important;\n  align-items: flex-start !important;\n}\n\n.align-items-end {\n  -ms-flex-align: end !important;\n  align-items: flex-end !important;\n}\n\n.align-items-center {\n  -ms-flex-align: center !important;\n  align-items: center !important;\n}\n\n.align-items-baseline {\n  -ms-flex-align: baseline !important;\n  align-items: baseline !important;\n}\n\n.align-items-stretch {\n  -ms-flex-align: stretch !important;\n  align-items: stretch !important;\n}\n\n.align-content-start {\n  -ms-flex-line-pack: start !important;\n  align-content: flex-start !important;\n}\n\n.align-content-end {\n  -ms-flex-line-pack: end !important;\n  align-content: flex-end !important;\n}\n\n.align-content-center {\n  -ms-flex-line-pack: center !important;\n  align-content: center !important;\n}\n\n.align-content-between {\n  -ms-flex-line-pack: justify !important;\n  align-content: space-between !important;\n}\n\n.align-content-around {\n  -ms-flex-line-pack: distribute !important;\n  align-content: space-around !important;\n}\n\n.align-content-stretch {\n  -ms-flex-line-pack: stretch !important;\n  align-content: stretch !important;\n}\n\n.align-self-auto {\n  -ms-flex-item-align: auto !important;\n  align-self: auto !important;\n}\n\n.align-self-start {\n  -ms-flex-item-align: start !important;\n  align-self: flex-start !important;\n}\n\n.align-self-end {\n  -ms-flex-item-align: end !important;\n  align-self: flex-end !important;\n}\n\n.align-self-center {\n  -ms-flex-item-align: center !important;\n  align-self: center !important;\n}\n\n.align-self-baseline {\n  -ms-flex-item-align: baseline !important;\n  align-self: baseline !important;\n}\n\n.align-self-stretch {\n  -ms-flex-item-align: stretch !important;\n  align-self: stretch !important;\n}\n\n.order-first {\n  -ms-flex-order: -1 !important;\n  order: -1 !important;\n}\n\n.order-0 {\n  -ms-flex-order: 0 !important;\n  order: 0 !important;\n}\n\n.order-1 {\n  -ms-flex-order: 1 !important;\n  order: 1 !important;\n}\n\n.order-2 {\n  -ms-flex-order: 2 !important;\n  order: 2 !important;\n}\n\n.order-3 {\n  -ms-flex-order: 3 !important;\n  order: 3 !important;\n}\n\n.order-4 {\n  -ms-flex-order: 4 !important;\n  order: 4 !important;\n}\n\n.order-5 {\n  -ms-flex-order: 5 !important;\n  order: 5 !important;\n}\n\n.order-last {\n  -ms-flex-order: 6 !important;\n  order: 6 !important;\n}\n\n.m-0 {\n  margin: 0 !important;\n}\n\n.m-1 {\n  margin: 0.25rem !important;\n}\n\n.m-2 {\n  margin: 0.5rem !important;\n}\n\n.m-3 {\n  margin: 1rem !important;\n}\n\n.m-4 {\n  margin: 1.5rem !important;\n}\n\n.m-5 {\n  margin: 3rem !important;\n}\n\n.m-auto {\n  margin: auto !important;\n}\n\n.mx-0 {\n  margin-right: 0 !important;\n  margin-left: 0 !important;\n}\n\n.mx-1 {\n  margin-right: 0.25rem !important;\n  margin-left: 0.25rem !important;\n}\n\n.mx-2 {\n  margin-right: 0.5rem !important;\n  margin-left: 0.5rem !important;\n}\n\n.mx-3 {\n  margin-right: 1rem !important;\n  margin-left: 1rem !important;\n}\n\n.mx-4 {\n  margin-right: 1.5rem !important;\n  margin-left: 1.5rem !important;\n}\n\n.mx-5 {\n  margin-right: 3rem !important;\n  margin-left: 3rem !important;\n}\n\n.mx-auto {\n  margin-right: auto !important;\n  margin-left: auto !important;\n}\n\n.my-0 {\n  margin-top: 0 !important;\n  margin-bottom: 0 !important;\n}\n\n.my-1 {\n  margin-top: 0.25rem !important;\n  margin-bottom: 0.25rem !important;\n}\n\n.my-2 {\n  margin-top: 0.5rem !important;\n  margin-bottom: 0.5rem !important;\n}\n\n.my-3 {\n  margin-top: 1rem !important;\n  margin-bottom: 1rem !important;\n}\n\n.my-4 {\n  margin-top: 1.5rem !important;\n  margin-bottom: 1.5rem !important;\n}\n\n.my-5 {\n  margin-top: 3rem !important;\n  margin-bottom: 3rem !important;\n}\n\n.my-auto {\n  margin-top: auto !important;\n  margin-bottom: auto !important;\n}\n\n.mt-0 {\n  margin-top: 0 !important;\n}\n\n.mt-1 {\n  margin-top: 0.25rem !important;\n}\n\n.mt-2 {\n  margin-top: 0.5rem !important;\n}\n\n.mt-3 {\n  margin-top: 1rem !important;\n}\n\n.mt-4 {\n  margin-top: 1.5rem !important;\n}\n\n.mt-5 {\n  margin-top: 3rem !important;\n}\n\n.mt-auto {\n  margin-top: auto !important;\n}\n\n.me-0 {\n  margin-right: 0 !important;\n}\n\n.me-1 {\n  margin-right: 0.25rem !important;\n}\n\n.me-2 {\n  margin-right: 0.5rem !important;\n}\n\n.me-3 {\n  margin-right: 1rem !important;\n}\n\n.me-4 {\n  margin-right: 1.5rem !important;\n}\n\n.me-5 {\n  margin-right: 3rem !important;\n}\n\n.me-auto {\n  margin-right: auto !important;\n}\n\n.mb-0 {\n  margin-bottom: 0 !important;\n}\n\n.mb-1 {\n  margin-bottom: 0.25rem !important;\n}\n\n.mb-2 {\n  margin-bottom: 0.5rem !important;\n}\n\n.mb-3 {\n  margin-bottom: 1rem !important;\n}\n\n.mb-4 {\n  margin-bottom: 1.5rem !important;\n}\n\n.mb-5 {\n  margin-bottom: 3rem !important;\n}\n\n.mb-auto {\n  margin-bottom: auto !important;\n}\n\n.ms-0 {\n  margin-left: 0 !important;\n}\n\n.ms-1 {\n  margin-left: 0.25rem !important;\n}\n\n.ms-2 {\n  margin-left: 0.5rem !important;\n}\n\n.ms-3 {\n  margin-left: 1rem !important;\n}\n\n.ms-4 {\n  margin-left: 1.5rem !important;\n}\n\n.ms-5 {\n  margin-left: 3rem !important;\n}\n\n.ms-auto {\n  margin-left: auto !important;\n}\n\n.p-0 {\n  padding: 0 !important;\n}\n\n.p-1 {\n  padding: 0.25rem !important;\n}\n\n.p-2 {\n  padding: 0.5rem !important;\n}\n\n.p-3 {\n  padding: 1rem !important;\n}\n\n.p-4 {\n  padding: 1.5rem !important;\n}\n\n.p-5 {\n  padding: 3rem !important;\n}\n\n.px-0 {\n  padding-right: 0 !important;\n  padding-left: 0 !important;\n}\n\n.px-1 {\n  padding-right: 0.25rem !important;\n  padding-left: 0.25rem !important;\n}\n\n.px-2 {\n  padding-right: 0.5rem !important;\n  padding-left: 0.5rem !important;\n}\n\n.px-3 {\n  padding-right: 1rem !important;\n  padding-left: 1rem !important;\n}\n\n.px-4 {\n  padding-right: 1.5rem !important;\n  padding-left: 1.5rem !important;\n}\n\n.px-5 {\n  padding-right: 3rem !important;\n  padding-left: 3rem !important;\n}\n\n.py-0 {\n  padding-top: 0 !important;\n  padding-bottom: 0 !important;\n}\n\n.py-1 {\n  padding-top: 0.25rem !important;\n  padding-bottom: 0.25rem !important;\n}\n\n.py-2 {\n  padding-top: 0.5rem !important;\n  padding-bottom: 0.5rem !important;\n}\n\n.py-3 {\n  padding-top: 1rem !important;\n  padding-bottom: 1rem !important;\n}\n\n.py-4 {\n  padding-top: 1.5rem !important;\n  padding-bottom: 1.5rem !important;\n}\n\n.py-5 {\n  padding-top: 3rem !important;\n  padding-bottom: 3rem !important;\n}\n\n.pt-0 {\n  padding-top: 0 !important;\n}\n\n.pt-1 {\n  padding-top: 0.25rem !important;\n}\n\n.pt-2 {\n  padding-top: 0.5rem !important;\n}\n\n.pt-3 {\n  padding-top: 1rem !important;\n}\n\n.pt-4 {\n  padding-top: 1.5rem !important;\n}\n\n.pt-5 {\n  padding-top: 3rem !important;\n}\n\n.pe-0 {\n  padding-right: 0 !important;\n}\n\n.pe-1 {\n  padding-right: 0.25rem !important;\n}\n\n.pe-2 {\n  padding-right: 0.5rem !important;\n}\n\n.pe-3 {\n  padding-right: 1rem !important;\n}\n\n.pe-4 {\n  padding-right: 1.5rem !important;\n}\n\n.pe-5 {\n  padding-right: 3rem !important;\n}\n\n.pb-0 {\n  padding-bottom: 0 !important;\n}\n\n.pb-1 {\n  padding-bottom: 0.25rem !important;\n}\n\n.pb-2 {\n  padding-bottom: 0.5rem !important;\n}\n\n.pb-3 {\n  padding-bottom: 1rem !important;\n}\n\n.pb-4 {\n  padding-bottom: 1.5rem !important;\n}\n\n.pb-5 {\n  padding-bottom: 3rem !important;\n}\n\n.ps-0 {\n  padding-left: 0 !important;\n}\n\n.ps-1 {\n  padding-left: 0.25rem !important;\n}\n\n.ps-2 {\n  padding-left: 0.5rem !important;\n}\n\n.ps-3 {\n  padding-left: 1rem !important;\n}\n\n.ps-4 {\n  padding-left: 1.5rem !important;\n}\n\n.ps-5 {\n  padding-left: 3rem !important;\n}\n\n.font-monospace {\n  font-family: var(--bs-font-monospace) !important;\n}\n\n.fs-1 {\n  font-size: calc(1.375rem + 1.5vw) !important;\n}\n\n.fs-2 {\n  font-size: calc(1.325rem + 0.9vw) !important;\n}\n\n.fs-3 {\n  font-size: calc(1.3rem + 0.6vw) !important;\n}\n\n.fs-4 {\n  font-size: calc(1.275rem + 0.3vw) !important;\n}\n\n.fs-5 {\n  font-size: 1.25rem !important;\n}\n\n.fs-6 {\n  font-size: 1rem !important;\n}\n\n.fst-italic {\n  font-style: italic !important;\n}\n\n.fst-normal {\n  font-style: normal !important;\n}\n\n.fw-light {\n  font-weight: 300 !important;\n}\n\n.fw-lighter {\n  font-weight: lighter !important;\n}\n\n.fw-normal {\n  font-weight: 400 !important;\n}\n\n.fw-bold {\n  font-weight: 700 !important;\n}\n\n.fw-bolder {\n  font-weight: bolder !important;\n}\n\n.lh-1 {\n  line-height: 1 !important;\n}\n\n.lh-sm {\n  line-height: 1.25 !important;\n}\n\n.lh-base {\n  line-height: 1.5 !important;\n}\n\n.lh-lg {\n  line-height: 2 !important;\n}\n\n.text-start {\n  text-align: left !important;\n}\n\n.text-end {\n  text-align: right !important;\n}\n\n.text-center {\n  text-align: center !important;\n}\n\n.text-decoration-none {\n  text-decoration: none !important;\n}\n\n.text-decoration-underline {\n  text-decoration: underline !important;\n}\n\n.text-decoration-line-through {\n  text-decoration: line-through !important;\n}\n\n.text-lowercase {\n  text-transform: lowercase !important;\n}\n\n.text-uppercase {\n  text-transform: uppercase !important;\n}\n\n.text-capitalize {\n  text-transform: capitalize !important;\n}\n\n.text-wrap {\n  white-space: normal !important;\n}\n\n.text-nowrap {\n  white-space: nowrap !important;\n}\n\n/* rtl:begin:remove */\n.text-break {\n  word-wrap: break-word !important;\n  word-break: break-word !important;\n}\n\n/* rtl:end:remove */\n.text-primary {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-primary-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-secondary {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-secondary-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-success {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-success-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-info {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-info-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-warning {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-warning-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-danger {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-danger-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-light {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-light-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-dark {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-dark-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-black {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-black-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-white {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-white-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-body {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-body-color-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-muted {\n  --bs-text-opacity: 1;\n  color: rgba(255, 255, 255, 0.4) !important;\n}\n\n.text-black-50 {\n  --bs-text-opacity: 1;\n  color: rgba(0, 0, 0, 0.5) !important;\n}\n\n.text-white-50 {\n  --bs-text-opacity: 1;\n  color: rgba(255, 255, 255, 0.5) !important;\n}\n\n.text-reset {\n  --bs-text-opacity: 1;\n  color: inherit !important;\n}\n\n.text-opacity-25 {\n  --bs-text-opacity: 0.25;\n}\n\n.text-opacity-50 {\n  --bs-text-opacity: 0.5;\n}\n\n.text-opacity-75 {\n  --bs-text-opacity: 0.75;\n}\n\n.text-opacity-100 {\n  --bs-text-opacity: 1;\n}\n\n.bg-primary {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-primary-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-secondary {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-secondary-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-success {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-success-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-info {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-info-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-warning {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-warning-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-danger {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-danger-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-light {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-light-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-dark {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-dark-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-black {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-black-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-white {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-white-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-body {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-body-bg-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-transparent {\n  --bs-bg-opacity: 1;\n  background-color: transparent !important;\n}\n\n.bg-opacity-10 {\n  --bs-bg-opacity: 0.1;\n}\n\n.bg-opacity-25 {\n  --bs-bg-opacity: 0.25;\n}\n\n.bg-opacity-50 {\n  --bs-bg-opacity: 0.5;\n}\n\n.bg-opacity-75 {\n  --bs-bg-opacity: 0.75;\n}\n\n.bg-opacity-100 {\n  --bs-bg-opacity: 1;\n}\n\n.bg-gradient {\n  background-image: var(--bs-gradient) !important;\n}\n\n.user-select-all {\n  -webkit-user-select: all !important;\n  -moz-user-select: all !important;\n  user-select: all !important;\n}\n\n.user-select-auto {\n  -webkit-user-select: auto !important;\n  -moz-user-select: auto !important;\n  -ms-user-select: auto !important;\n  user-select: auto !important;\n}\n\n.user-select-none {\n  -webkit-user-select: none !important;\n  -moz-user-select: none !important;\n  -ms-user-select: none !important;\n  user-select: none !important;\n}\n\n.pe-none {\n  pointer-events: none !important;\n}\n\n.pe-auto {\n  pointer-events: auto !important;\n}\n\n.rounded {\n  border-radius: 0 !important;\n}\n\n.rounded-0 {\n  border-radius: 0 !important;\n}\n\n.rounded-1 {\n  border-radius: 0 !important;\n}\n\n.rounded-2 {\n  border-radius: 0 !important;\n}\n\n.rounded-3 {\n  border-radius: 0 !important;\n}\n\n.rounded-circle {\n  border-radius: 50% !important;\n}\n\n.rounded-pill {\n  border-radius: 50rem !important;\n}\n\n.rounded-top {\n  border-top-left-radius: 0 !important;\n  border-top-right-radius: 0 !important;\n}\n\n.rounded-end {\n  border-top-right-radius: 0 !important;\n  border-bottom-right-radius: 0 !important;\n}\n\n.rounded-bottom {\n  border-bottom-right-radius: 0 !important;\n  border-bottom-left-radius: 0 !important;\n}\n\n.rounded-start {\n  border-bottom-left-radius: 0 !important;\n  border-top-left-radius: 0 !important;\n}\n\n.visible {\n  visibility: visible !important;\n}\n\n.invisible {\n  visibility: hidden !important;\n}\n\n@media (min-width: 576px) {\n  .float-sm-start {\n    float: left !important;\n  }\n  .float-sm-end {\n    float: right !important;\n  }\n  .float-sm-none {\n    float: none !important;\n  }\n  .d-sm-inline {\n    display: inline !important;\n  }\n  .d-sm-inline-block {\n    display: inline-block !important;\n  }\n  .d-sm-block {\n    display: block !important;\n  }\n  .d-sm-grid {\n    display: grid !important;\n  }\n  .d-sm-table {\n    display: table !important;\n  }\n  .d-sm-table-row {\n    display: table-row !important;\n  }\n  .d-sm-table-cell {\n    display: table-cell !important;\n  }\n  .d-sm-flex {\n    display: -ms-flexbox !important;\n    display: flex !important;\n  }\n  .d-sm-inline-flex {\n    display: -ms-inline-flexbox !important;\n    display: inline-flex !important;\n  }\n  .d-sm-none {\n    display: none !important;\n  }\n  .flex-sm-fill {\n    -ms-flex: 1 1 auto !important;\n    flex: 1 1 auto !important;\n  }\n  .flex-sm-row {\n    -ms-flex-direction: row !important;\n    flex-direction: row !important;\n  }\n  .flex-sm-column {\n    -ms-flex-direction: column !important;\n    flex-direction: column !important;\n  }\n  .flex-sm-row-reverse {\n    -ms-flex-direction: row-reverse !important;\n    flex-direction: row-reverse !important;\n  }\n  .flex-sm-column-reverse {\n    -ms-flex-direction: column-reverse !important;\n    flex-direction: column-reverse !important;\n  }\n  .flex-sm-grow-0 {\n    -ms-flex-positive: 0 !important;\n    flex-grow: 0 !important;\n  }\n  .flex-sm-grow-1 {\n    -ms-flex-positive: 1 !important;\n    flex-grow: 1 !important;\n  }\n  .flex-sm-shrink-0 {\n    -ms-flex-negative: 0 !important;\n    flex-shrink: 0 !important;\n  }\n  .flex-sm-shrink-1 {\n    -ms-flex-negative: 1 !important;\n    flex-shrink: 1 !important;\n  }\n  .flex-sm-wrap {\n    -ms-flex-wrap: wrap !important;\n    flex-wrap: wrap !important;\n  }\n  .flex-sm-nowrap {\n    -ms-flex-wrap: nowrap !important;\n    flex-wrap: nowrap !important;\n  }\n  .flex-sm-wrap-reverse {\n    -ms-flex-wrap: wrap-reverse !important;\n    flex-wrap: wrap-reverse !important;\n  }\n  .gap-sm-0 {\n    gap: 0 !important;\n  }\n  .gap-sm-1 {\n    gap: 0.25rem !important;\n  }\n  .gap-sm-2 {\n    gap: 0.5rem !important;\n  }\n  .gap-sm-3 {\n    gap: 1rem !important;\n  }\n  .gap-sm-4 {\n    gap: 1.5rem !important;\n  }\n  .gap-sm-5 {\n    gap: 3rem !important;\n  }\n  .justify-content-sm-start {\n    -ms-flex-pack: start !important;\n    justify-content: flex-start !important;\n  }\n  .justify-content-sm-end {\n    -ms-flex-pack: end !important;\n    justify-content: flex-end !important;\n  }\n  .justify-content-sm-center {\n    -ms-flex-pack: center !important;\n    justify-content: center !important;\n  }\n  .justify-content-sm-between {\n    -ms-flex-pack: justify !important;\n    justify-content: space-between !important;\n  }\n  .justify-content-sm-around {\n    -ms-flex-pack: distribute !important;\n    justify-content: space-around !important;\n  }\n  .justify-content-sm-evenly {\n    -ms-flex-pack: space-evenly !important;\n    justify-content: space-evenly !important;\n  }\n  .align-items-sm-start {\n    -ms-flex-align: start !important;\n    align-items: flex-start !important;\n  }\n  .align-items-sm-end {\n    -ms-flex-align: end !important;\n    align-items: flex-end !important;\n  }\n  .align-items-sm-center {\n    -ms-flex-align: center !important;\n    align-items: center !important;\n  }\n  .align-items-sm-baseline {\n    -ms-flex-align: baseline !important;\n    align-items: baseline !important;\n  }\n  .align-items-sm-stretch {\n    -ms-flex-align: stretch !important;\n    align-items: stretch !important;\n  }\n  .align-content-sm-start {\n    -ms-flex-line-pack: start !important;\n    align-content: flex-start !important;\n  }\n  .align-content-sm-end {\n    -ms-flex-line-pack: end !important;\n    align-content: flex-end !important;\n  }\n  .align-content-sm-center {\n    -ms-flex-line-pack: center !important;\n    align-content: center !important;\n  }\n  .align-content-sm-between {\n    -ms-flex-line-pack: justify !important;\n    align-content: space-between !important;\n  }\n  .align-content-sm-around {\n    -ms-flex-line-pack: distribute !important;\n    align-content: space-around !important;\n  }\n  .align-content-sm-stretch {\n    -ms-flex-line-pack: stretch !important;\n    align-content: stretch !important;\n  }\n  .align-self-sm-auto {\n    -ms-flex-item-align: auto !important;\n    align-self: auto !important;\n  }\n  .align-self-sm-start {\n    -ms-flex-item-align: start !important;\n    align-self: flex-start !important;\n  }\n  .align-self-sm-end {\n    -ms-flex-item-align: end !important;\n    align-self: flex-end !important;\n  }\n  .align-self-sm-center {\n    -ms-flex-item-align: center !important;\n    align-self: center !important;\n  }\n  .align-self-sm-baseline {\n    -ms-flex-item-align: baseline !important;\n    align-self: baseline !important;\n  }\n  .align-self-sm-stretch {\n    -ms-flex-item-align: stretch !important;\n    align-self: stretch !important;\n  }\n  .order-sm-first {\n    -ms-flex-order: -1 !important;\n    order: -1 !important;\n  }\n  .order-sm-0 {\n    -ms-flex-order: 0 !important;\n    order: 0 !important;\n  }\n  .order-sm-1 {\n    -ms-flex-order: 1 !important;\n    order: 1 !important;\n  }\n  .order-sm-2 {\n    -ms-flex-order: 2 !important;\n    order: 2 !important;\n  }\n  .order-sm-3 {\n    -ms-flex-order: 3 !important;\n    order: 3 !important;\n  }\n  .order-sm-4 {\n    -ms-flex-order: 4 !important;\n    order: 4 !important;\n  }\n  .order-sm-5 {\n    -ms-flex-order: 5 !important;\n    order: 5 !important;\n  }\n  .order-sm-last {\n    -ms-flex-order: 6 !important;\n    order: 6 !important;\n  }\n  .m-sm-0 {\n    margin: 0 !important;\n  }\n  .m-sm-1 {\n    margin: 0.25rem !important;\n  }\n  .m-sm-2 {\n    margin: 0.5rem !important;\n  }\n  .m-sm-3 {\n    margin: 1rem !important;\n  }\n  .m-sm-4 {\n    margin: 1.5rem !important;\n  }\n  .m-sm-5 {\n    margin: 3rem !important;\n  }\n  .m-sm-auto {\n    margin: auto !important;\n  }\n  .mx-sm-0 {\n    margin-right: 0 !important;\n    margin-left: 0 !important;\n  }\n  .mx-sm-1 {\n    margin-right: 0.25rem !important;\n    margin-left: 0.25rem !important;\n  }\n  .mx-sm-2 {\n    margin-right: 0.5rem !important;\n    margin-left: 0.5rem !important;\n  }\n  .mx-sm-3 {\n    margin-right: 1rem !important;\n    margin-left: 1rem !important;\n  }\n  .mx-sm-4 {\n    margin-right: 1.5rem !important;\n    margin-left: 1.5rem !important;\n  }\n  .mx-sm-5 {\n    margin-right: 3rem !important;\n    margin-left: 3rem !important;\n  }\n  .mx-sm-auto {\n    margin-right: auto !important;\n    margin-left: auto !important;\n  }\n  .my-sm-0 {\n    margin-top: 0 !important;\n    margin-bottom: 0 !important;\n  }\n  .my-sm-1 {\n    margin-top: 0.25rem !important;\n    margin-bottom: 0.25rem !important;\n  }\n  .my-sm-2 {\n    margin-top: 0.5rem !important;\n    margin-bottom: 0.5rem !important;\n  }\n  .my-sm-3 {\n    margin-top: 1rem !important;\n    margin-bottom: 1rem !important;\n  }\n  .my-sm-4 {\n    margin-top: 1.5rem !important;\n    margin-bottom: 1.5rem !important;\n  }\n  .my-sm-5 {\n    margin-top: 3rem !important;\n    margin-bottom: 3rem !important;\n  }\n  .my-sm-auto {\n    margin-top: auto !important;\n    margin-bottom: auto !important;\n  }\n  .mt-sm-0 {\n    margin-top: 0 !important;\n  }\n  .mt-sm-1 {\n    margin-top: 0.25rem !important;\n  }\n  .mt-sm-2 {\n    margin-top: 0.5rem !important;\n  }\n  .mt-sm-3 {\n    margin-top: 1rem !important;\n  }\n  .mt-sm-4 {\n    margin-top: 1.5rem !important;\n  }\n  .mt-sm-5 {\n    margin-top: 3rem !important;\n  }\n  .mt-sm-auto {\n    margin-top: auto !important;\n  }\n  .me-sm-0 {\n    margin-right: 0 !important;\n  }\n  .me-sm-1 {\n    margin-right: 0.25rem !important;\n  }\n  .me-sm-2 {\n    margin-right: 0.5rem !important;\n  }\n  .me-sm-3 {\n    margin-right: 1rem !important;\n  }\n  .me-sm-4 {\n    margin-right: 1.5rem !important;\n  }\n  .me-sm-5 {\n    margin-right: 3rem !important;\n  }\n  .me-sm-auto {\n    margin-right: auto !important;\n  }\n  .mb-sm-0 {\n    margin-bottom: 0 !important;\n  }\n  .mb-sm-1 {\n    margin-bottom: 0.25rem !important;\n  }\n  .mb-sm-2 {\n    margin-bottom: 0.5rem !important;\n  }\n  .mb-sm-3 {\n    margin-bottom: 1rem !important;\n  }\n  .mb-sm-4 {\n    margin-bottom: 1.5rem !important;\n  }\n  .mb-sm-5 {\n    margin-bottom: 3rem !important;\n  }\n  .mb-sm-auto {\n    margin-bottom: auto !important;\n  }\n  .ms-sm-0 {\n    margin-left: 0 !important;\n  }\n  .ms-sm-1 {\n    margin-left: 0.25rem !important;\n  }\n  .ms-sm-2 {\n    margin-left: 0.5rem !important;\n  }\n  .ms-sm-3 {\n    margin-left: 1rem !important;\n  }\n  .ms-sm-4 {\n    margin-left: 1.5rem !important;\n  }\n  .ms-sm-5 {\n    margin-left: 3rem !important;\n  }\n  .ms-sm-auto {\n    margin-left: auto !important;\n  }\n  .p-sm-0 {\n    padding: 0 !important;\n  }\n  .p-sm-1 {\n    padding: 0.25rem !important;\n  }\n  .p-sm-2 {\n    padding: 0.5rem !important;\n  }\n  .p-sm-3 {\n    padding: 1rem !important;\n  }\n  .p-sm-4 {\n    padding: 1.5rem !important;\n  }\n  .p-sm-5 {\n    padding: 3rem !important;\n  }\n  .px-sm-0 {\n    padding-right: 0 !important;\n    padding-left: 0 !important;\n  }\n  .px-sm-1 {\n    padding-right: 0.25rem !important;\n    padding-left: 0.25rem !important;\n  }\n  .px-sm-2 {\n    padding-right: 0.5rem !important;\n    padding-left: 0.5rem !important;\n  }\n  .px-sm-3 {\n    padding-right: 1rem !important;\n    padding-left: 1rem !important;\n  }\n  .px-sm-4 {\n    padding-right: 1.5rem !important;\n    padding-left: 1.5rem !important;\n  }\n  .px-sm-5 {\n    padding-right: 3rem !important;\n    padding-left: 3rem !important;\n  }\n  .py-sm-0 {\n    padding-top: 0 !important;\n    padding-bottom: 0 !important;\n  }\n  .py-sm-1 {\n    padding-top: 0.25rem !important;\n    padding-bottom: 0.25rem !important;\n  }\n  .py-sm-2 {\n    padding-top: 0.5rem !important;\n    padding-bottom: 0.5rem !important;\n  }\n  .py-sm-3 {\n    padding-top: 1rem !important;\n    padding-bottom: 1rem !important;\n  }\n  .py-sm-4 {\n    padding-top: 1.5rem !important;\n    padding-bottom: 1.5rem !important;\n  }\n  .py-sm-5 {\n    padding-top: 3rem !important;\n    padding-bottom: 3rem !important;\n  }\n  .pt-sm-0 {\n    padding-top: 0 !important;\n  }\n  .pt-sm-1 {\n    padding-top: 0.25rem !important;\n  }\n  .pt-sm-2 {\n    padding-top: 0.5rem !important;\n  }\n  .pt-sm-3 {\n    padding-top: 1rem !important;\n  }\n  .pt-sm-4 {\n    padding-top: 1.5rem !important;\n  }\n  .pt-sm-5 {\n    padding-top: 3rem !important;\n  }\n  .pe-sm-0 {\n    padding-right: 0 !important;\n  }\n  .pe-sm-1 {\n    padding-right: 0.25rem !important;\n  }\n  .pe-sm-2 {\n    padding-right: 0.5rem !important;\n  }\n  .pe-sm-3 {\n    padding-right: 1rem !important;\n  }\n  .pe-sm-4 {\n    padding-right: 1.5rem !important;\n  }\n  .pe-sm-5 {\n    padding-right: 3rem !important;\n  }\n  .pb-sm-0 {\n    padding-bottom: 0 !important;\n  }\n  .pb-sm-1 {\n    padding-bottom: 0.25rem !important;\n  }\n  .pb-sm-2 {\n    padding-bottom: 0.5rem !important;\n  }\n  .pb-sm-3 {\n    padding-bottom: 1rem !important;\n  }\n  .pb-sm-4 {\n    padding-bottom: 1.5rem !important;\n  }\n  .pb-sm-5 {\n    padding-bottom: 3rem !important;\n  }\n  .ps-sm-0 {\n    padding-left: 0 !important;\n  }\n  .ps-sm-1 {\n    padding-left: 0.25rem !important;\n  }\n  .ps-sm-2 {\n    padding-left: 0.5rem !important;\n  }\n  .ps-sm-3 {\n    padding-left: 1rem !important;\n  }\n  .ps-sm-4 {\n    padding-left: 1.5rem !important;\n  }\n  .ps-sm-5 {\n    padding-left: 3rem !important;\n  }\n  .text-sm-start {\n    text-align: left !important;\n  }\n  .text-sm-end {\n    text-align: right !important;\n  }\n  .text-sm-center {\n    text-align: center !important;\n  }\n}\n\n@media (min-width: 768px) {\n  .float-md-start {\n    float: left !important;\n  }\n  .float-md-end {\n    float: right !important;\n  }\n  .float-md-none {\n    float: none !important;\n  }\n  .d-md-inline {\n    display: inline !important;\n  }\n  .d-md-inline-block {\n    display: inline-block !important;\n  }\n  .d-md-block {\n    display: block !important;\n  }\n  .d-md-grid {\n    display: grid !important;\n  }\n  .d-md-table {\n    display: table !important;\n  }\n  .d-md-table-row {\n    display: table-row !important;\n  }\n  .d-md-table-cell {\n    display: table-cell !important;\n  }\n  .d-md-flex {\n    display: -ms-flexbox !important;\n    display: flex !important;\n  }\n  .d-md-inline-flex {\n    display: -ms-inline-flexbox !important;\n    display: inline-flex !important;\n  }\n  .d-md-none {\n    display: none !important;\n  }\n  .flex-md-fill {\n    -ms-flex: 1 1 auto !important;\n    flex: 1 1 auto !important;\n  }\n  .flex-md-row {\n    -ms-flex-direction: row !important;\n    flex-direction: row !important;\n  }\n  .flex-md-column {\n    -ms-flex-direction: column !important;\n    flex-direction: column !important;\n  }\n  .flex-md-row-reverse {\n    -ms-flex-direction: row-reverse !important;\n    flex-direction: row-reverse !important;\n  }\n  .flex-md-column-reverse {\n    -ms-flex-direction: column-reverse !important;\n    flex-direction: column-reverse !important;\n  }\n  .flex-md-grow-0 {\n    -ms-flex-positive: 0 !important;\n    flex-grow: 0 !important;\n  }\n  .flex-md-grow-1 {\n    -ms-flex-positive: 1 !important;\n    flex-grow: 1 !important;\n  }\n  .flex-md-shrink-0 {\n    -ms-flex-negative: 0 !important;\n    flex-shrink: 0 !important;\n  }\n  .flex-md-shrink-1 {\n    -ms-flex-negative: 1 !important;\n    flex-shrink: 1 !important;\n  }\n  .flex-md-wrap {\n    -ms-flex-wrap: wrap !important;\n    flex-wrap: wrap !important;\n  }\n  .flex-md-nowrap {\n    -ms-flex-wrap: nowrap !important;\n    flex-wrap: nowrap !important;\n  }\n  .flex-md-wrap-reverse {\n    -ms-flex-wrap: wrap-reverse !important;\n    flex-wrap: wrap-reverse !important;\n  }\n  .gap-md-0 {\n    gap: 0 !important;\n  }\n  .gap-md-1 {\n    gap: 0.25rem !important;\n  }\n  .gap-md-2 {\n    gap: 0.5rem !important;\n  }\n  .gap-md-3 {\n    gap: 1rem !important;\n  }\n  .gap-md-4 {\n    gap: 1.5rem !important;\n  }\n  .gap-md-5 {\n    gap: 3rem !important;\n  }\n  .justify-content-md-start {\n    -ms-flex-pack: start !important;\n    justify-content: flex-start !important;\n  }\n  .justify-content-md-end {\n    -ms-flex-pack: end !important;\n    justify-content: flex-end !important;\n  }\n  .justify-content-md-center {\n    -ms-flex-pack: center !important;\n    justify-content: center !important;\n  }\n  .justify-content-md-between {\n    -ms-flex-pack: justify !important;\n    justify-content: space-between !important;\n  }\n  .justify-content-md-around {\n    -ms-flex-pack: distribute !important;\n    justify-content: space-around !important;\n  }\n  .justify-content-md-evenly {\n    -ms-flex-pack: space-evenly !important;\n    justify-content: space-evenly !important;\n  }\n  .align-items-md-start {\n    -ms-flex-align: start !important;\n    align-items: flex-start !important;\n  }\n  .align-items-md-end {\n    -ms-flex-align: end !important;\n    align-items: flex-end !important;\n  }\n  .align-items-md-center {\n    -ms-flex-align: center !important;\n    align-items: center !important;\n  }\n  .align-items-md-baseline {\n    -ms-flex-align: baseline !important;\n    align-items: baseline !important;\n  }\n  .align-items-md-stretch {\n    -ms-flex-align: stretch !important;\n    align-items: stretch !important;\n  }\n  .align-content-md-start {\n    -ms-flex-line-pack: start !important;\n    align-content: flex-start !important;\n  }\n  .align-content-md-end {\n    -ms-flex-line-pack: end !important;\n    align-content: flex-end !important;\n  }\n  .align-content-md-center {\n    -ms-flex-line-pack: center !important;\n    align-content: center !important;\n  }\n  .align-content-md-between {\n    -ms-flex-line-pack: justify !important;\n    align-content: space-between !important;\n  }\n  .align-content-md-around {\n    -ms-flex-line-pack: distribute !important;\n    align-content: space-around !important;\n  }\n  .align-content-md-stretch {\n    -ms-flex-line-pack: stretch !important;\n    align-content: stretch !important;\n  }\n  .align-self-md-auto {\n    -ms-flex-item-align: auto !important;\n    align-self: auto !important;\n  }\n  .align-self-md-start {\n    -ms-flex-item-align: start !important;\n    align-self: flex-start !important;\n  }\n  .align-self-md-end {\n    -ms-flex-item-align: end !important;\n    align-self: flex-end !important;\n  }\n  .align-self-md-center {\n    -ms-flex-item-align: center !important;\n    align-self: center !important;\n  }\n  .align-self-md-baseline {\n    -ms-flex-item-align: baseline !important;\n    align-self: baseline !important;\n  }\n  .align-self-md-stretch {\n    -ms-flex-item-align: stretch !important;\n    align-self: stretch !important;\n  }\n  .order-md-first {\n    -ms-flex-order: -1 !important;\n    order: -1 !important;\n  }\n  .order-md-0 {\n    -ms-flex-order: 0 !important;\n    order: 0 !important;\n  }\n  .order-md-1 {\n    -ms-flex-order: 1 !important;\n    order: 1 !important;\n  }\n  .order-md-2 {\n    -ms-flex-order: 2 !important;\n    order: 2 !important;\n  }\n  .order-md-3 {\n    -ms-flex-order: 3 !important;\n    order: 3 !important;\n  }\n  .order-md-4 {\n    -ms-flex-order: 4 !important;\n    order: 4 !important;\n  }\n  .order-md-5 {\n    -ms-flex-order: 5 !important;\n    order: 5 !important;\n  }\n  .order-md-last {\n    -ms-flex-order: 6 !important;\n    order: 6 !important;\n  }\n  .m-md-0 {\n    margin: 0 !important;\n  }\n  .m-md-1 {\n    margin: 0.25rem !important;\n  }\n  .m-md-2 {\n    margin: 0.5rem !important;\n  }\n  .m-md-3 {\n    margin: 1rem !important;\n  }\n  .m-md-4 {\n    margin: 1.5rem !important;\n  }\n  .m-md-5 {\n    margin: 3rem !important;\n  }\n  .m-md-auto {\n    margin: auto !important;\n  }\n  .mx-md-0 {\n    margin-right: 0 !important;\n    margin-left: 0 !important;\n  }\n  .mx-md-1 {\n    margin-right: 0.25rem !important;\n    margin-left: 0.25rem !important;\n  }\n  .mx-md-2 {\n    margin-right: 0.5rem !important;\n    margin-left: 0.5rem !important;\n  }\n  .mx-md-3 {\n    margin-right: 1rem !important;\n    margin-left: 1rem !important;\n  }\n  .mx-md-4 {\n    margin-right: 1.5rem !important;\n    margin-left: 1.5rem !important;\n  }\n  .mx-md-5 {\n    margin-right: 3rem !important;\n    margin-left: 3rem !important;\n  }\n  .mx-md-auto {\n    margin-right: auto !important;\n    margin-left: auto !important;\n  }\n  .my-md-0 {\n    margin-top: 0 !important;\n    margin-bottom: 0 !important;\n  }\n  .my-md-1 {\n    margin-top: 0.25rem !important;\n    margin-bottom: 0.25rem !important;\n  }\n  .my-md-2 {\n    margin-top: 0.5rem !important;\n    margin-bottom: 0.5rem !important;\n  }\n  .my-md-3 {\n    margin-top: 1rem !important;\n    margin-bottom: 1rem !important;\n  }\n  .my-md-4 {\n    margin-top: 1.5rem !important;\n    margin-bottom: 1.5rem !important;\n  }\n  .my-md-5 {\n    margin-top: 3rem !important;\n    margin-bottom: 3rem !important;\n  }\n  .my-md-auto {\n    margin-top: auto !important;\n    margin-bottom: auto !important;\n  }\n  .mt-md-0 {\n    margin-top: 0 !important;\n  }\n  .mt-md-1 {\n    margin-top: 0.25rem !important;\n  }\n  .mt-md-2 {\n    margin-top: 0.5rem !important;\n  }\n  .mt-md-3 {\n    margin-top: 1rem !important;\n  }\n  .mt-md-4 {\n    margin-top: 1.5rem !important;\n  }\n  .mt-md-5 {\n    margin-top: 3rem !important;\n  }\n  .mt-md-auto {\n    margin-top: auto !important;\n  }\n  .me-md-0 {\n    margin-right: 0 !important;\n  }\n  .me-md-1 {\n    margin-right: 0.25rem !important;\n  }\n  .me-md-2 {\n    margin-right: 0.5rem !important;\n  }\n  .me-md-3 {\n    margin-right: 1rem !important;\n  }\n  .me-md-4 {\n    margin-right: 1.5rem !important;\n  }\n  .me-md-5 {\n    margin-right: 3rem !important;\n  }\n  .me-md-auto {\n    margin-right: auto !important;\n  }\n  .mb-md-0 {\n    margin-bottom: 0 !important;\n  }\n  .mb-md-1 {\n    margin-bottom: 0.25rem !important;\n  }\n  .mb-md-2 {\n    margin-bottom: 0.5rem !important;\n  }\n  .mb-md-3 {\n    margin-bottom: 1rem !important;\n  }\n  .mb-md-4 {\n    margin-bottom: 1.5rem !important;\n  }\n  .mb-md-5 {\n    margin-bottom: 3rem !important;\n  }\n  .mb-md-auto {\n    margin-bottom: auto !important;\n  }\n  .ms-md-0 {\n    margin-left: 0 !important;\n  }\n  .ms-md-1 {\n    margin-left: 0.25rem !important;\n  }\n  .ms-md-2 {\n    margin-left: 0.5rem !important;\n  }\n  .ms-md-3 {\n    margin-left: 1rem !important;\n  }\n  .ms-md-4 {\n    margin-left: 1.5rem !important;\n  }\n  .ms-md-5 {\n    margin-left: 3rem !important;\n  }\n  .ms-md-auto {\n    margin-left: auto !important;\n  }\n  .p-md-0 {\n    padding: 0 !important;\n  }\n  .p-md-1 {\n    padding: 0.25rem !important;\n  }\n  .p-md-2 {\n    padding: 0.5rem !important;\n  }\n  .p-md-3 {\n    padding: 1rem !important;\n  }\n  .p-md-4 {\n    padding: 1.5rem !important;\n  }\n  .p-md-5 {\n    padding: 3rem !important;\n  }\n  .px-md-0 {\n    padding-right: 0 !important;\n    padding-left: 0 !important;\n  }\n  .px-md-1 {\n    padding-right: 0.25rem !important;\n    padding-left: 0.25rem !important;\n  }\n  .px-md-2 {\n    padding-right: 0.5rem !important;\n    padding-left: 0.5rem !important;\n  }\n  .px-md-3 {\n    padding-right: 1rem !important;\n    padding-left: 1rem !important;\n  }\n  .px-md-4 {\n    padding-right: 1.5rem !important;\n    padding-left: 1.5rem !important;\n  }\n  .px-md-5 {\n    padding-right: 3rem !important;\n    padding-left: 3rem !important;\n  }\n  .py-md-0 {\n    padding-top: 0 !important;\n    padding-bottom: 0 !important;\n  }\n  .py-md-1 {\n    padding-top: 0.25rem !important;\n    padding-bottom: 0.25rem !important;\n  }\n  .py-md-2 {\n    padding-top: 0.5rem !important;\n    padding-bottom: 0.5rem !important;\n  }\n  .py-md-3 {\n    padding-top: 1rem !important;\n    padding-bottom: 1rem !important;\n  }\n  .py-md-4 {\n    padding-top: 1.5rem !important;\n    padding-bottom: 1.5rem !important;\n  }\n  .py-md-5 {\n    padding-top: 3rem !important;\n    padding-bottom: 3rem !important;\n  }\n  .pt-md-0 {\n    padding-top: 0 !important;\n  }\n  .pt-md-1 {\n    padding-top: 0.25rem !important;\n  }\n  .pt-md-2 {\n    padding-top: 0.5rem !important;\n  }\n  .pt-md-3 {\n    padding-top: 1rem !important;\n  }\n  .pt-md-4 {\n    padding-top: 1.5rem !important;\n  }\n  .pt-md-5 {\n    padding-top: 3rem !important;\n  }\n  .pe-md-0 {\n    padding-right: 0 !important;\n  }\n  .pe-md-1 {\n    padding-right: 0.25rem !important;\n  }\n  .pe-md-2 {\n    padding-right: 0.5rem !important;\n  }\n  .pe-md-3 {\n    padding-right: 1rem !important;\n  }\n  .pe-md-4 {\n    padding-right: 1.5rem !important;\n  }\n  .pe-md-5 {\n    padding-right: 3rem !important;\n  }\n  .pb-md-0 {\n    padding-bottom: 0 !important;\n  }\n  .pb-md-1 {\n    padding-bottom: 0.25rem !important;\n  }\n  .pb-md-2 {\n    padding-bottom: 0.5rem !important;\n  }\n  .pb-md-3 {\n    padding-bottom: 1rem !important;\n  }\n  .pb-md-4 {\n    padding-bottom: 1.5rem !important;\n  }\n  .pb-md-5 {\n    padding-bottom: 3rem !important;\n  }\n  .ps-md-0 {\n    padding-left: 0 !important;\n  }\n  .ps-md-1 {\n    padding-left: 0.25rem !important;\n  }\n  .ps-md-2 {\n    padding-left: 0.5rem !important;\n  }\n  .ps-md-3 {\n    padding-left: 1rem !important;\n  }\n  .ps-md-4 {\n    padding-left: 1.5rem !important;\n  }\n  .ps-md-5 {\n    padding-left: 3rem !important;\n  }\n  .text-md-start {\n    text-align: left !important;\n  }\n  .text-md-end {\n    text-align: right !important;\n  }\n  .text-md-center {\n    text-align: center !important;\n  }\n}\n\n@media (min-width: 992px) {\n  .float-lg-start {\n    float: left !important;\n  }\n  .float-lg-end {\n    float: right !important;\n  }\n  .float-lg-none {\n    float: none !important;\n  }\n  .d-lg-inline {\n    display: inline !important;\n  }\n  .d-lg-inline-block {\n    display: inline-block !important;\n  }\n  .d-lg-block {\n    display: block !important;\n  }\n  .d-lg-grid {\n    display: grid !important;\n  }\n  .d-lg-table {\n    display: table !important;\n  }\n  .d-lg-table-row {\n    display: table-row !important;\n  }\n  .d-lg-table-cell {\n    display: table-cell !important;\n  }\n  .d-lg-flex {\n    display: -ms-flexbox !important;\n    display: flex !important;\n  }\n  .d-lg-inline-flex {\n    display: -ms-inline-flexbox !important;\n    display: inline-flex !important;\n  }\n  .d-lg-none {\n    display: none !important;\n  }\n  .flex-lg-fill {\n    -ms-flex: 1 1 auto !important;\n    flex: 1 1 auto !important;\n  }\n  .flex-lg-row {\n    -ms-flex-direction: row !important;\n    flex-direction: row !important;\n  }\n  .flex-lg-column {\n    -ms-flex-direction: column !important;\n    flex-direction: column !important;\n  }\n  .flex-lg-row-reverse {\n    -ms-flex-direction: row-reverse !important;\n    flex-direction: row-reverse !important;\n  }\n  .flex-lg-column-reverse {\n    -ms-flex-direction: column-reverse !important;\n    flex-direction: column-reverse !important;\n  }\n  .flex-lg-grow-0 {\n    -ms-flex-positive: 0 !important;\n    flex-grow: 0 !important;\n  }\n  .flex-lg-grow-1 {\n    -ms-flex-positive: 1 !important;\n    flex-grow: 1 !important;\n  }\n  .flex-lg-shrink-0 {\n    -ms-flex-negative: 0 !important;\n    flex-shrink: 0 !important;\n  }\n  .flex-lg-shrink-1 {\n    -ms-flex-negative: 1 !important;\n    flex-shrink: 1 !important;\n  }\n  .flex-lg-wrap {\n    -ms-flex-wrap: wrap !important;\n    flex-wrap: wrap !important;\n  }\n  .flex-lg-nowrap {\n    -ms-flex-wrap: nowrap !important;\n    flex-wrap: nowrap !important;\n  }\n  .flex-lg-wrap-reverse {\n    -ms-flex-wrap: wrap-reverse !important;\n    flex-wrap: wrap-reverse !important;\n  }\n  .gap-lg-0 {\n    gap: 0 !important;\n  }\n  .gap-lg-1 {\n    gap: 0.25rem !important;\n  }\n  .gap-lg-2 {\n    gap: 0.5rem !important;\n  }\n  .gap-lg-3 {\n    gap: 1rem !important;\n  }\n  .gap-lg-4 {\n    gap: 1.5rem !important;\n  }\n  .gap-lg-5 {\n    gap: 3rem !important;\n  }\n  .justify-content-lg-start {\n    -ms-flex-pack: start !important;\n    justify-content: flex-start !important;\n  }\n  .justify-content-lg-end {\n    -ms-flex-pack: end !important;\n    justify-content: flex-end !important;\n  }\n  .justify-content-lg-center {\n    -ms-flex-pack: center !important;\n    justify-content: center !important;\n  }\n  .justify-content-lg-between {\n    -ms-flex-pack: justify !important;\n    justify-content: space-between !important;\n  }\n  .justify-content-lg-around {\n    -ms-flex-pack: distribute !important;\n    justify-content: space-around !important;\n  }\n  .justify-content-lg-evenly {\n    -ms-flex-pack: space-evenly !important;\n    justify-content: space-evenly !important;\n  }\n  .align-items-lg-start {\n    -ms-flex-align: start !important;\n    align-items: flex-start !important;\n  }\n  .align-items-lg-end {\n    -ms-flex-align: end !important;\n    align-items: flex-end !important;\n  }\n  .align-items-lg-center {\n    -ms-flex-align: center !important;\n    align-items: center !important;\n  }\n  .align-items-lg-baseline {\n    -ms-flex-align: baseline !important;\n    align-items: baseline !important;\n  }\n  .align-items-lg-stretch {\n    -ms-flex-align: stretch !important;\n    align-items: stretch !important;\n  }\n  .align-content-lg-start {\n    -ms-flex-line-pack: start !important;\n    align-content: flex-start !important;\n  }\n  .align-content-lg-end {\n    -ms-flex-line-pack: end !important;\n    align-content: flex-end !important;\n  }\n  .align-content-lg-center {\n    -ms-flex-line-pack: center !important;\n    align-content: center !important;\n  }\n  .align-content-lg-between {\n    -ms-flex-line-pack: justify !important;\n    align-content: space-between !important;\n  }\n  .align-content-lg-around {\n    -ms-flex-line-pack: distribute !important;\n    align-content: space-around !important;\n  }\n  .align-content-lg-stretch {\n    -ms-flex-line-pack: stretch !important;\n    align-content: stretch !important;\n  }\n  .align-self-lg-auto {\n    -ms-flex-item-align: auto !important;\n    align-self: auto !important;\n  }\n  .align-self-lg-start {\n    -ms-flex-item-align: start !important;\n    align-self: flex-start !important;\n  }\n  .align-self-lg-end {\n    -ms-flex-item-align: end !important;\n    align-self: flex-end !important;\n  }\n  .align-self-lg-center {\n    -ms-flex-item-align: center !important;\n    align-self: center !important;\n  }\n  .align-self-lg-baseline {\n    -ms-flex-item-align: baseline !important;\n    align-self: baseline !important;\n  }\n  .align-self-lg-stretch {\n    -ms-flex-item-align: stretch !important;\n    align-self: stretch !important;\n  }\n  .order-lg-first {\n    -ms-flex-order: -1 !important;\n    order: -1 !important;\n  }\n  .order-lg-0 {\n    -ms-flex-order: 0 !important;\n    order: 0 !important;\n  }\n  .order-lg-1 {\n    -ms-flex-order: 1 !important;\n    order: 1 !important;\n  }\n  .order-lg-2 {\n    -ms-flex-order: 2 !important;\n    order: 2 !important;\n  }\n  .order-lg-3 {\n    -ms-flex-order: 3 !important;\n    order: 3 !important;\n  }\n  .order-lg-4 {\n    -ms-flex-order: 4 !important;\n    order: 4 !important;\n  }\n  .order-lg-5 {\n    -ms-flex-order: 5 !important;\n    order: 5 !important;\n  }\n  .order-lg-last {\n    -ms-flex-order: 6 !important;\n    order: 6 !important;\n  }\n  .m-lg-0 {\n    margin: 0 !important;\n  }\n  .m-lg-1 {\n    margin: 0.25rem !important;\n  }\n  .m-lg-2 {\n    margin: 0.5rem !important;\n  }\n  .m-lg-3 {\n    margin: 1rem !important;\n  }\n  .m-lg-4 {\n    margin: 1.5rem !important;\n  }\n  .m-lg-5 {\n    margin: 3rem !important;\n  }\n  .m-lg-auto {\n    margin: auto !important;\n  }\n  .mx-lg-0 {\n    margin-right: 0 !important;\n    margin-left: 0 !important;\n  }\n  .mx-lg-1 {\n    margin-right: 0.25rem !important;\n    margin-left: 0.25rem !important;\n  }\n  .mx-lg-2 {\n    margin-right: 0.5rem !important;\n    margin-left: 0.5rem !important;\n  }\n  .mx-lg-3 {\n    margin-right: 1rem !important;\n    margin-left: 1rem !important;\n  }\n  .mx-lg-4 {\n    margin-right: 1.5rem !important;\n    margin-left: 1.5rem !important;\n  }\n  .mx-lg-5 {\n    margin-right: 3rem !important;\n    margin-left: 3rem !important;\n  }\n  .mx-lg-auto {\n    margin-right: auto !important;\n    margin-left: auto !important;\n  }\n  .my-lg-0 {\n    margin-top: 0 !important;\n    margin-bottom: 0 !important;\n  }\n  .my-lg-1 {\n    margin-top: 0.25rem !important;\n    margin-bottom: 0.25rem !important;\n  }\n  .my-lg-2 {\n    margin-top: 0.5rem !important;\n    margin-bottom: 0.5rem !important;\n  }\n  .my-lg-3 {\n    margin-top: 1rem !important;\n    margin-bottom: 1rem !important;\n  }\n  .my-lg-4 {\n    margin-top: 1.5rem !important;\n    margin-bottom: 1.5rem !important;\n  }\n  .my-lg-5 {\n    margin-top: 3rem !important;\n    margin-bottom: 3rem !important;\n  }\n  .my-lg-auto {\n    margin-top: auto !important;\n    margin-bottom: auto !important;\n  }\n  .mt-lg-0 {\n    margin-top: 0 !important;\n  }\n  .mt-lg-1 {\n    margin-top: 0.25rem !important;\n  }\n  .mt-lg-2 {\n    margin-top: 0.5rem !important;\n  }\n  .mt-lg-3 {\n    margin-top: 1rem !important;\n  }\n  .mt-lg-4 {\n    margin-top: 1.5rem !important;\n  }\n  .mt-lg-5 {\n    margin-top: 3rem !important;\n  }\n  .mt-lg-auto {\n    margin-top: auto !important;\n  }\n  .me-lg-0 {\n    margin-right: 0 !important;\n  }\n  .me-lg-1 {\n    margin-right: 0.25rem !important;\n  }\n  .me-lg-2 {\n    margin-right: 0.5rem !important;\n  }\n  .me-lg-3 {\n    margin-right: 1rem !important;\n  }\n  .me-lg-4 {\n    margin-right: 1.5rem !important;\n  }\n  .me-lg-5 {\n    margin-right: 3rem !important;\n  }\n  .me-lg-auto {\n    margin-right: auto !important;\n  }\n  .mb-lg-0 {\n    margin-bottom: 0 !important;\n  }\n  .mb-lg-1 {\n    margin-bottom: 0.25rem !important;\n  }\n  .mb-lg-2 {\n    margin-bottom: 0.5rem !important;\n  }\n  .mb-lg-3 {\n    margin-bottom: 1rem !important;\n  }\n  .mb-lg-4 {\n    margin-bottom: 1.5rem !important;\n  }\n  .mb-lg-5 {\n    margin-bottom: 3rem !important;\n  }\n  .mb-lg-auto {\n    margin-bottom: auto !important;\n  }\n  .ms-lg-0 {\n    margin-left: 0 !important;\n  }\n  .ms-lg-1 {\n    margin-left: 0.25rem !important;\n  }\n  .ms-lg-2 {\n    margin-left: 0.5rem !important;\n  }\n  .ms-lg-3 {\n    margin-left: 1rem !important;\n  }\n  .ms-lg-4 {\n    margin-left: 1.5rem !important;\n  }\n  .ms-lg-5 {\n    margin-left: 3rem !important;\n  }\n  .ms-lg-auto {\n    margin-left: auto !important;\n  }\n  .p-lg-0 {\n    padding: 0 !important;\n  }\n  .p-lg-1 {\n    padding: 0.25rem !important;\n  }\n  .p-lg-2 {\n    padding: 0.5rem !important;\n  }\n  .p-lg-3 {\n    padding: 1rem !important;\n  }\n  .p-lg-4 {\n    padding: 1.5rem !important;\n  }\n  .p-lg-5 {\n    padding: 3rem !important;\n  }\n  .px-lg-0 {\n    padding-right: 0 !important;\n    padding-left: 0 !important;\n  }\n  .px-lg-1 {\n    padding-right: 0.25rem !important;\n    padding-left: 0.25rem !important;\n  }\n  .px-lg-2 {\n    padding-right: 0.5rem !important;\n    padding-left: 0.5rem !important;\n  }\n  .px-lg-3 {\n    padding-right: 1rem !important;\n    padding-left: 1rem !important;\n  }\n  .px-lg-4 {\n    padding-right: 1.5rem !important;\n    padding-left: 1.5rem !important;\n  }\n  .px-lg-5 {\n    padding-right: 3rem !important;\n    padding-left: 3rem !important;\n  }\n  .py-lg-0 {\n    padding-top: 0 !important;\n    padding-bottom: 0 !important;\n  }\n  .py-lg-1 {\n    padding-top: 0.25rem !important;\n    padding-bottom: 0.25rem !important;\n  }\n  .py-lg-2 {\n    padding-top: 0.5rem !important;\n    padding-bottom: 0.5rem !important;\n  }\n  .py-lg-3 {\n    padding-top: 1rem !important;\n    padding-bottom: 1rem !important;\n  }\n  .py-lg-4 {\n    padding-top: 1.5rem !important;\n    padding-bottom: 1.5rem !important;\n  }\n  .py-lg-5 {\n    padding-top: 3rem !important;\n    padding-bottom: 3rem !important;\n  }\n  .pt-lg-0 {\n    padding-top: 0 !important;\n  }\n  .pt-lg-1 {\n    padding-top: 0.25rem !important;\n  }\n  .pt-lg-2 {\n    padding-top: 0.5rem !important;\n  }\n  .pt-lg-3 {\n    padding-top: 1rem !important;\n  }\n  .pt-lg-4 {\n    padding-top: 1.5rem !important;\n  }\n  .pt-lg-5 {\n    padding-top: 3rem !important;\n  }\n  .pe-lg-0 {\n    padding-right: 0 !important;\n  }\n  .pe-lg-1 {\n    padding-right: 0.25rem !important;\n  }\n  .pe-lg-2 {\n    padding-right: 0.5rem !important;\n  }\n  .pe-lg-3 {\n    padding-right: 1rem !important;\n  }\n  .pe-lg-4 {\n    padding-right: 1.5rem !important;\n  }\n  .pe-lg-5 {\n    padding-right: 3rem !important;\n  }\n  .pb-lg-0 {\n    padding-bottom: 0 !important;\n  }\n  .pb-lg-1 {\n    padding-bottom: 0.25rem !important;\n  }\n  .pb-lg-2 {\n    padding-bottom: 0.5rem !important;\n  }\n  .pb-lg-3 {\n    padding-bottom: 1rem !important;\n  }\n  .pb-lg-4 {\n    padding-bottom: 1.5rem !important;\n  }\n  .pb-lg-5 {\n    padding-bottom: 3rem !important;\n  }\n  .ps-lg-0 {\n    padding-left: 0 !important;\n  }\n  .ps-lg-1 {\n    padding-left: 0.25rem !important;\n  }\n  .ps-lg-2 {\n    padding-left: 0.5rem !important;\n  }\n  .ps-lg-3 {\n    padding-left: 1rem !important;\n  }\n  .ps-lg-4 {\n    padding-left: 1.5rem !important;\n  }\n  .ps-lg-5 {\n    padding-left: 3rem !important;\n  }\n  .text-lg-start {\n    text-align: left !important;\n  }\n  .text-lg-end {\n    text-align: right !important;\n  }\n  .text-lg-center {\n    text-align: center !important;\n  }\n}\n\n@media (min-width: 1200px) {\n  .float-xl-start {\n    float: left !important;\n  }\n  .float-xl-end {\n    float: right !important;\n  }\n  .float-xl-none {\n    float: none !important;\n  }\n  .d-xl-inline {\n    display: inline !important;\n  }\n  .d-xl-inline-block {\n    display: inline-block !important;\n  }\n  .d-xl-block {\n    display: block !important;\n  }\n  .d-xl-grid {\n    display: grid !important;\n  }\n  .d-xl-table {\n    display: table !important;\n  }\n  .d-xl-table-row {\n    display: table-row !important;\n  }\n  .d-xl-table-cell {\n    display: table-cell !important;\n  }\n  .d-xl-flex {\n    display: -ms-flexbox !important;\n    display: flex !important;\n  }\n  .d-xl-inline-flex {\n    display: -ms-inline-flexbox !important;\n    display: inline-flex !important;\n  }\n  .d-xl-none {\n    display: none !important;\n  }\n  .flex-xl-fill {\n    -ms-flex: 1 1 auto !important;\n    flex: 1 1 auto !important;\n  }\n  .flex-xl-row {\n    -ms-flex-direction: row !important;\n    flex-direction: row !important;\n  }\n  .flex-xl-column {\n    -ms-flex-direction: column !important;\n    flex-direction: column !important;\n  }\n  .flex-xl-row-reverse {\n    -ms-flex-direction: row-reverse !important;\n    flex-direction: row-reverse !important;\n  }\n  .flex-xl-column-reverse {\n    -ms-flex-direction: column-reverse !important;\n    flex-direction: column-reverse !important;\n  }\n  .flex-xl-grow-0 {\n    -ms-flex-positive: 0 !important;\n    flex-grow: 0 !important;\n  }\n  .flex-xl-grow-1 {\n    -ms-flex-positive: 1 !important;\n    flex-grow: 1 !important;\n  }\n  .flex-xl-shrink-0 {\n    -ms-flex-negative: 0 !important;\n    flex-shrink: 0 !important;\n  }\n  .flex-xl-shrink-1 {\n    -ms-flex-negative: 1 !important;\n    flex-shrink: 1 !important;\n  }\n  .flex-xl-wrap {\n    -ms-flex-wrap: wrap !important;\n    flex-wrap: wrap !important;\n  }\n  .flex-xl-nowrap {\n    -ms-flex-wrap: nowrap !important;\n    flex-wrap: nowrap !important;\n  }\n  .flex-xl-wrap-reverse {\n    -ms-flex-wrap: wrap-reverse !important;\n    flex-wrap: wrap-reverse !important;\n  }\n  .gap-xl-0 {\n    gap: 0 !important;\n  }\n  .gap-xl-1 {\n    gap: 0.25rem !important;\n  }\n  .gap-xl-2 {\n    gap: 0.5rem !important;\n  }\n  .gap-xl-3 {\n    gap: 1rem !important;\n  }\n  .gap-xl-4 {\n    gap: 1.5rem !important;\n  }\n  .gap-xl-5 {\n    gap: 3rem !important;\n  }\n  .justify-content-xl-start {\n    -ms-flex-pack: start !important;\n    justify-content: flex-start !important;\n  }\n  .justify-content-xl-end {\n    -ms-flex-pack: end !important;\n    justify-content: flex-end !important;\n  }\n  .justify-content-xl-center {\n    -ms-flex-pack: center !important;\n    justify-content: center !important;\n  }\n  .justify-content-xl-between {\n    -ms-flex-pack: justify !important;\n    justify-content: space-between !important;\n  }\n  .justify-content-xl-around {\n    -ms-flex-pack: distribute !important;\n    justify-content: space-around !important;\n  }\n  .justify-content-xl-evenly {\n    -ms-flex-pack: space-evenly !important;\n    justify-content: space-evenly !important;\n  }\n  .align-items-xl-start {\n    -ms-flex-align: start !important;\n    align-items: flex-start !important;\n  }\n  .align-items-xl-end {\n    -ms-flex-align: end !important;\n    align-items: flex-end !important;\n  }\n  .align-items-xl-center {\n    -ms-flex-align: center !important;\n    align-items: center !important;\n  }\n  .align-items-xl-baseline {\n    -ms-flex-align: baseline !important;\n    align-items: baseline !important;\n  }\n  .align-items-xl-stretch {\n    -ms-flex-align: stretch !important;\n    align-items: stretch !important;\n  }\n  .align-content-xl-start {\n    -ms-flex-line-pack: start !important;\n    align-content: flex-start !important;\n  }\n  .align-content-xl-end {\n    -ms-flex-line-pack: end !important;\n    align-content: flex-end !important;\n  }\n  .align-content-xl-center {\n    -ms-flex-line-pack: center !important;\n    align-content: center !important;\n  }\n  .align-content-xl-between {\n    -ms-flex-line-pack: justify !important;\n    align-content: space-between !important;\n  }\n  .align-content-xl-around {\n    -ms-flex-line-pack: distribute !important;\n    align-content: space-around !important;\n  }\n  .align-content-xl-stretch {\n    -ms-flex-line-pack: stretch !important;\n    align-content: stretch !important;\n  }\n  .align-self-xl-auto {\n    -ms-flex-item-align: auto !important;\n    align-self: auto !important;\n  }\n  .align-self-xl-start {\n    -ms-flex-item-align: start !important;\n    align-self: flex-start !important;\n  }\n  .align-self-xl-end {\n    -ms-flex-item-align: end !important;\n    align-self: flex-end !important;\n  }\n  .align-self-xl-center {\n    -ms-flex-item-align: center !important;\n    align-self: center !important;\n  }\n  .align-self-xl-baseline {\n    -ms-flex-item-align: baseline !important;\n    align-self: baseline !important;\n  }\n  .align-self-xl-stretch {\n    -ms-flex-item-align: stretch !important;\n    align-self: stretch !important;\n  }\n  .order-xl-first {\n    -ms-flex-order: -1 !important;\n    order: -1 !important;\n  }\n  .order-xl-0 {\n    -ms-flex-order: 0 !important;\n    order: 0 !important;\n  }\n  .order-xl-1 {\n    -ms-flex-order: 1 !important;\n    order: 1 !important;\n  }\n  .order-xl-2 {\n    -ms-flex-order: 2 !important;\n    order: 2 !important;\n  }\n  .order-xl-3 {\n    -ms-flex-order: 3 !important;\n    order: 3 !important;\n  }\n  .order-xl-4 {\n    -ms-flex-order: 4 !important;\n    order: 4 !important;\n  }\n  .order-xl-5 {\n    -ms-flex-order: 5 !important;\n    order: 5 !important;\n  }\n  .order-xl-last {\n    -ms-flex-order: 6 !important;\n    order: 6 !important;\n  }\n  .m-xl-0 {\n    margin: 0 !important;\n  }\n  .m-xl-1 {\n    margin: 0.25rem !important;\n  }\n  .m-xl-2 {\n    margin: 0.5rem !important;\n  }\n  .m-xl-3 {\n    margin: 1rem !important;\n  }\n  .m-xl-4 {\n    margin: 1.5rem !important;\n  }\n  .m-xl-5 {\n    margin: 3rem !important;\n  }\n  .m-xl-auto {\n    margin: auto !important;\n  }\n  .mx-xl-0 {\n    margin-right: 0 !important;\n    margin-left: 0 !important;\n  }\n  .mx-xl-1 {\n    margin-right: 0.25rem !important;\n    margin-left: 0.25rem !important;\n  }\n  .mx-xl-2 {\n    margin-right: 0.5rem !important;\n    margin-left: 0.5rem !important;\n  }\n  .mx-xl-3 {\n    margin-right: 1rem !important;\n    margin-left: 1rem !important;\n  }\n  .mx-xl-4 {\n    margin-right: 1.5rem !important;\n    margin-left: 1.5rem !important;\n  }\n  .mx-xl-5 {\n    margin-right: 3rem !important;\n    margin-left: 3rem !important;\n  }\n  .mx-xl-auto {\n    margin-right: auto !important;\n    margin-left: auto !important;\n  }\n  .my-xl-0 {\n    margin-top: 0 !important;\n    margin-bottom: 0 !important;\n  }\n  .my-xl-1 {\n    margin-top: 0.25rem !important;\n    margin-bottom: 0.25rem !important;\n  }\n  .my-xl-2 {\n    margin-top: 0.5rem !important;\n    margin-bottom: 0.5rem !important;\n  }\n  .my-xl-3 {\n    margin-top: 1rem !important;\n    margin-bottom: 1rem !important;\n  }\n  .my-xl-4 {\n    margin-top: 1.5rem !important;\n    margin-bottom: 1.5rem !important;\n  }\n  .my-xl-5 {\n    margin-top: 3rem !important;\n    margin-bottom: 3rem !important;\n  }\n  .my-xl-auto {\n    margin-top: auto !important;\n    margin-bottom: auto !important;\n  }\n  .mt-xl-0 {\n    margin-top: 0 !important;\n  }\n  .mt-xl-1 {\n    margin-top: 0.25rem !important;\n  }\n  .mt-xl-2 {\n    margin-top: 0.5rem !important;\n  }\n  .mt-xl-3 {\n    margin-top: 1rem !important;\n  }\n  .mt-xl-4 {\n    margin-top: 1.5rem !important;\n  }\n  .mt-xl-5 {\n    margin-top: 3rem !important;\n  }\n  .mt-xl-auto {\n    margin-top: auto !important;\n  }\n  .me-xl-0 {\n    margin-right: 0 !important;\n  }\n  .me-xl-1 {\n    margin-right: 0.25rem !important;\n  }\n  .me-xl-2 {\n    margin-right: 0.5rem !important;\n  }\n  .me-xl-3 {\n    margin-right: 1rem !important;\n  }\n  .me-xl-4 {\n    margin-right: 1.5rem !important;\n  }\n  .me-xl-5 {\n    margin-right: 3rem !important;\n  }\n  .me-xl-auto {\n    margin-right: auto !important;\n  }\n  .mb-xl-0 {\n    margin-bottom: 0 !important;\n  }\n  .mb-xl-1 {\n    margin-bottom: 0.25rem !important;\n  }\n  .mb-xl-2 {\n    margin-bottom: 0.5rem !important;\n  }\n  .mb-xl-3 {\n    margin-bottom: 1rem !important;\n  }\n  .mb-xl-4 {\n    margin-bottom: 1.5rem !important;\n  }\n  .mb-xl-5 {\n    margin-bottom: 3rem !important;\n  }\n  .mb-xl-auto {\n    margin-bottom: auto !important;\n  }\n  .ms-xl-0 {\n    margin-left: 0 !important;\n  }\n  .ms-xl-1 {\n    margin-left: 0.25rem !important;\n  }\n  .ms-xl-2 {\n    margin-left: 0.5rem !important;\n  }\n  .ms-xl-3 {\n    margin-left: 1rem !important;\n  }\n  .ms-xl-4 {\n    margin-left: 1.5rem !important;\n  }\n  .ms-xl-5 {\n    margin-left: 3rem !important;\n  }\n  .ms-xl-auto {\n    margin-left: auto !important;\n  }\n  .p-xl-0 {\n    padding: 0 !important;\n  }\n  .p-xl-1 {\n    padding: 0.25rem !important;\n  }\n  .p-xl-2 {\n    padding: 0.5rem !important;\n  }\n  .p-xl-3 {\n    padding: 1rem !important;\n  }\n  .p-xl-4 {\n    padding: 1.5rem !important;\n  }\n  .p-xl-5 {\n    padding: 3rem !important;\n  }\n  .px-xl-0 {\n    padding-right: 0 !important;\n    padding-left: 0 !important;\n  }\n  .px-xl-1 {\n    padding-right: 0.25rem !important;\n    padding-left: 0.25rem !important;\n  }\n  .px-xl-2 {\n    padding-right: 0.5rem !important;\n    padding-left: 0.5rem !important;\n  }\n  .px-xl-3 {\n    padding-right: 1rem !important;\n    padding-left: 1rem !important;\n  }\n  .px-xl-4 {\n    padding-right: 1.5rem !important;\n    padding-left: 1.5rem !important;\n  }\n  .px-xl-5 {\n    padding-right: 3rem !important;\n    padding-left: 3rem !important;\n  }\n  .py-xl-0 {\n    padding-top: 0 !important;\n    padding-bottom: 0 !important;\n  }\n  .py-xl-1 {\n    padding-top: 0.25rem !important;\n    padding-bottom: 0.25rem !important;\n  }\n  .py-xl-2 {\n    padding-top: 0.5rem !important;\n    padding-bottom: 0.5rem !important;\n  }\n  .py-xl-3 {\n    padding-top: 1rem !important;\n    padding-bottom: 1rem !important;\n  }\n  .py-xl-4 {\n    padding-top: 1.5rem !important;\n    padding-bottom: 1.5rem !important;\n  }\n  .py-xl-5 {\n    padding-top: 3rem !important;\n    padding-bottom: 3rem !important;\n  }\n  .pt-xl-0 {\n    padding-top: 0 !important;\n  }\n  .pt-xl-1 {\n    padding-top: 0.25rem !important;\n  }\n  .pt-xl-2 {\n    padding-top: 0.5rem !important;\n  }\n  .pt-xl-3 {\n    padding-top: 1rem !important;\n  }\n  .pt-xl-4 {\n    padding-top: 1.5rem !important;\n  }\n  .pt-xl-5 {\n    padding-top: 3rem !important;\n  }\n  .pe-xl-0 {\n    padding-right: 0 !important;\n  }\n  .pe-xl-1 {\n    padding-right: 0.25rem !important;\n  }\n  .pe-xl-2 {\n    padding-right: 0.5rem !important;\n  }\n  .pe-xl-3 {\n    padding-right: 1rem !important;\n  }\n  .pe-xl-4 {\n    padding-right: 1.5rem !important;\n  }\n  .pe-xl-5 {\n    padding-right: 3rem !important;\n  }\n  .pb-xl-0 {\n    padding-bottom: 0 !important;\n  }\n  .pb-xl-1 {\n    padding-bottom: 0.25rem !important;\n  }\n  .pb-xl-2 {\n    padding-bottom: 0.5rem !important;\n  }\n  .pb-xl-3 {\n    padding-bottom: 1rem !important;\n  }\n  .pb-xl-4 {\n    padding-bottom: 1.5rem !important;\n  }\n  .pb-xl-5 {\n    padding-bottom: 3rem !important;\n  }\n  .ps-xl-0 {\n    padding-left: 0 !important;\n  }\n  .ps-xl-1 {\n    padding-left: 0.25rem !important;\n  }\n  .ps-xl-2 {\n    padding-left: 0.5rem !important;\n  }\n  .ps-xl-3 {\n    padding-left: 1rem !important;\n  }\n  .ps-xl-4 {\n    padding-left: 1.5rem !important;\n  }\n  .ps-xl-5 {\n    padding-left: 3rem !important;\n  }\n  .text-xl-start {\n    text-align: left !important;\n  }\n  .text-xl-end {\n    text-align: right !important;\n  }\n  .text-xl-center {\n    text-align: center !important;\n  }\n}\n\n@media (min-width: 1400px) {\n  .float-xxl-start {\n    float: left !important;\n  }\n  .float-xxl-end {\n    float: right !important;\n  }\n  .float-xxl-none {\n    float: none !important;\n  }\n  .d-xxl-inline {\n    display: inline !important;\n  }\n  .d-xxl-inline-block {\n    display: inline-block !important;\n  }\n  .d-xxl-block {\n    display: block !important;\n  }\n  .d-xxl-grid {\n    display: grid !important;\n  }\n  .d-xxl-table {\n    display: table !important;\n  }\n  .d-xxl-table-row {\n    display: table-row !important;\n  }\n  .d-xxl-table-cell {\n    display: table-cell !important;\n  }\n  .d-xxl-flex {\n    display: -ms-flexbox !important;\n    display: flex !important;\n  }\n  .d-xxl-inline-flex {\n    display: -ms-inline-flexbox !important;\n    display: inline-flex !important;\n  }\n  .d-xxl-none {\n    display: none !important;\n  }\n  .flex-xxl-fill {\n    -ms-flex: 1 1 auto !important;\n    flex: 1 1 auto !important;\n  }\n  .flex-xxl-row {\n    -ms-flex-direction: row !important;\n    flex-direction: row !important;\n  }\n  .flex-xxl-column {\n    -ms-flex-direction: column !important;\n    flex-direction: column !important;\n  }\n  .flex-xxl-row-reverse {\n    -ms-flex-direction: row-reverse !important;\n    flex-direction: row-reverse !important;\n  }\n  .flex-xxl-column-reverse {\n    -ms-flex-direction: column-reverse !important;\n    flex-direction: column-reverse !important;\n  }\n  .flex-xxl-grow-0 {\n    -ms-flex-positive: 0 !important;\n    flex-grow: 0 !important;\n  }\n  .flex-xxl-grow-1 {\n    -ms-flex-positive: 1 !important;\n    flex-grow: 1 !important;\n  }\n  .flex-xxl-shrink-0 {\n    -ms-flex-negative: 0 !important;\n    flex-shrink: 0 !important;\n  }\n  .flex-xxl-shrink-1 {\n    -ms-flex-negative: 1 !important;\n    flex-shrink: 1 !important;\n  }\n  .flex-xxl-wrap {\n    -ms-flex-wrap: wrap !important;\n    flex-wrap: wrap !important;\n  }\n  .flex-xxl-nowrap {\n    -ms-flex-wrap: nowrap !important;\n    flex-wrap: nowrap !important;\n  }\n  .flex-xxl-wrap-reverse {\n    -ms-flex-wrap: wrap-reverse !important;\n    flex-wrap: wrap-reverse !important;\n  }\n  .gap-xxl-0 {\n    gap: 0 !important;\n  }\n  .gap-xxl-1 {\n    gap: 0.25rem !important;\n  }\n  .gap-xxl-2 {\n    gap: 0.5rem !important;\n  }\n  .gap-xxl-3 {\n    gap: 1rem !important;\n  }\n  .gap-xxl-4 {\n    gap: 1.5rem !important;\n  }\n  .gap-xxl-5 {\n    gap: 3rem !important;\n  }\n  .justify-content-xxl-start {\n    -ms-flex-pack: start !important;\n    justify-content: flex-start !important;\n  }\n  .justify-content-xxl-end {\n    -ms-flex-pack: end !important;\n    justify-content: flex-end !important;\n  }\n  .justify-content-xxl-center {\n    -ms-flex-pack: center !important;\n    justify-content: center !important;\n  }\n  .justify-content-xxl-between {\n    -ms-flex-pack: justify !important;\n    justify-content: space-between !important;\n  }\n  .justify-content-xxl-around {\n    -ms-flex-pack: distribute !important;\n    justify-content: space-around !important;\n  }\n  .justify-content-xxl-evenly {\n    -ms-flex-pack: space-evenly !important;\n    justify-content: space-evenly !important;\n  }\n  .align-items-xxl-start {\n    -ms-flex-align: start !important;\n    align-items: flex-start !important;\n  }\n  .align-items-xxl-end {\n    -ms-flex-align: end !important;\n    align-items: flex-end !important;\n  }\n  .align-items-xxl-center {\n    -ms-flex-align: center !important;\n    align-items: center !important;\n  }\n  .align-items-xxl-baseline {\n    -ms-flex-align: baseline !important;\n    align-items: baseline !important;\n  }\n  .align-items-xxl-stretch {\n    -ms-flex-align: stretch !important;\n    align-items: stretch !important;\n  }\n  .align-content-xxl-start {\n    -ms-flex-line-pack: start !important;\n    align-content: flex-start !important;\n  }\n  .align-content-xxl-end {\n    -ms-flex-line-pack: end !important;\n    align-content: flex-end !important;\n  }\n  .align-content-xxl-center {\n    -ms-flex-line-pack: center !important;\n    align-content: center !important;\n  }\n  .align-content-xxl-between {\n    -ms-flex-line-pack: justify !important;\n    align-content: space-between !important;\n  }\n  .align-content-xxl-around {\n    -ms-flex-line-pack: distribute !important;\n    align-content: space-around !important;\n  }\n  .align-content-xxl-stretch {\n    -ms-flex-line-pack: stretch !important;\n    align-content: stretch !important;\n  }\n  .align-self-xxl-auto {\n    -ms-flex-item-align: auto !important;\n    align-self: auto !important;\n  }\n  .align-self-xxl-start {\n    -ms-flex-item-align: start !important;\n    align-self: flex-start !important;\n  }\n  .align-self-xxl-end {\n    -ms-flex-item-align: end !important;\n    align-self: flex-end !important;\n  }\n  .align-self-xxl-center {\n    -ms-flex-item-align: center !important;\n    align-self: center !important;\n  }\n  .align-self-xxl-baseline {\n    -ms-flex-item-align: baseline !important;\n    align-self: baseline !important;\n  }\n  .align-self-xxl-stretch {\n    -ms-flex-item-align: stretch !important;\n    align-self: stretch !important;\n  }\n  .order-xxl-first {\n    -ms-flex-order: -1 !important;\n    order: -1 !important;\n  }\n  .order-xxl-0 {\n    -ms-flex-order: 0 !important;\n    order: 0 !important;\n  }\n  .order-xxl-1 {\n    -ms-flex-order: 1 !important;\n    order: 1 !important;\n  }\n  .order-xxl-2 {\n    -ms-flex-order: 2 !important;\n    order: 2 !important;\n  }\n  .order-xxl-3 {\n    -ms-flex-order: 3 !important;\n    order: 3 !important;\n  }\n  .order-xxl-4 {\n    -ms-flex-order: 4 !important;\n    order: 4 !important;\n  }\n  .order-xxl-5 {\n    -ms-flex-order: 5 !important;\n    order: 5 !important;\n  }\n  .order-xxl-last {\n    -ms-flex-order: 6 !important;\n    order: 6 !important;\n  }\n  .m-xxl-0 {\n    margin: 0 !important;\n  }\n  .m-xxl-1 {\n    margin: 0.25rem !important;\n  }\n  .m-xxl-2 {\n    margin: 0.5rem !important;\n  }\n  .m-xxl-3 {\n    margin: 1rem !important;\n  }\n  .m-xxl-4 {\n    margin: 1.5rem !important;\n  }\n  .m-xxl-5 {\n    margin: 3rem !important;\n  }\n  .m-xxl-auto {\n    margin: auto !important;\n  }\n  .mx-xxl-0 {\n    margin-right: 0 !important;\n    margin-left: 0 !important;\n  }\n  .mx-xxl-1 {\n    margin-right: 0.25rem !important;\n    margin-left: 0.25rem !important;\n  }\n  .mx-xxl-2 {\n    margin-right: 0.5rem !important;\n    margin-left: 0.5rem !important;\n  }\n  .mx-xxl-3 {\n    margin-right: 1rem !important;\n    margin-left: 1rem !important;\n  }\n  .mx-xxl-4 {\n    margin-right: 1.5rem !important;\n    margin-left: 1.5rem !important;\n  }\n  .mx-xxl-5 {\n    margin-right: 3rem !important;\n    margin-left: 3rem !important;\n  }\n  .mx-xxl-auto {\n    margin-right: auto !important;\n    margin-left: auto !important;\n  }\n  .my-xxl-0 {\n    margin-top: 0 !important;\n    margin-bottom: 0 !important;\n  }\n  .my-xxl-1 {\n    margin-top: 0.25rem !important;\n    margin-bottom: 0.25rem !important;\n  }\n  .my-xxl-2 {\n    margin-top: 0.5rem !important;\n    margin-bottom: 0.5rem !important;\n  }\n  .my-xxl-3 {\n    margin-top: 1rem !important;\n    margin-bottom: 1rem !important;\n  }\n  .my-xxl-4 {\n    margin-top: 1.5rem !important;\n    margin-bottom: 1.5rem !important;\n  }\n  .my-xxl-5 {\n    margin-top: 3rem !important;\n    margin-bottom: 3rem !important;\n  }\n  .my-xxl-auto {\n    margin-top: auto !important;\n    margin-bottom: auto !important;\n  }\n  .mt-xxl-0 {\n    margin-top: 0 !important;\n  }\n  .mt-xxl-1 {\n    margin-top: 0.25rem !important;\n  }\n  .mt-xxl-2 {\n    margin-top: 0.5rem !important;\n  }\n  .mt-xxl-3 {\n    margin-top: 1rem !important;\n  }\n  .mt-xxl-4 {\n    margin-top: 1.5rem !important;\n  }\n  .mt-xxl-5 {\n    margin-top: 3rem !important;\n  }\n  .mt-xxl-auto {\n    margin-top: auto !important;\n  }\n  .me-xxl-0 {\n    margin-right: 0 !important;\n  }\n  .me-xxl-1 {\n    margin-right: 0.25rem !important;\n  }\n  .me-xxl-2 {\n    margin-right: 0.5rem !important;\n  }\n  .me-xxl-3 {\n    margin-right: 1rem !important;\n  }\n  .me-xxl-4 {\n    margin-right: 1.5rem !important;\n  }\n  .me-xxl-5 {\n    margin-right: 3rem !important;\n  }\n  .me-xxl-auto {\n    margin-right: auto !important;\n  }\n  .mb-xxl-0 {\n    margin-bottom: 0 !important;\n  }\n  .mb-xxl-1 {\n    margin-bottom: 0.25rem !important;\n  }\n  .mb-xxl-2 {\n    margin-bottom: 0.5rem !important;\n  }\n  .mb-xxl-3 {\n    margin-bottom: 1rem !important;\n  }\n  .mb-xxl-4 {\n    margin-bottom: 1.5rem !important;\n  }\n  .mb-xxl-5 {\n    margin-bottom: 3rem !important;\n  }\n  .mb-xxl-auto {\n    margin-bottom: auto !important;\n  }\n  .ms-xxl-0 {\n    margin-left: 0 !important;\n  }\n  .ms-xxl-1 {\n    margin-left: 0.25rem !important;\n  }\n  .ms-xxl-2 {\n    margin-left: 0.5rem !important;\n  }\n  .ms-xxl-3 {\n    margin-left: 1rem !important;\n  }\n  .ms-xxl-4 {\n    margin-left: 1.5rem !important;\n  }\n  .ms-xxl-5 {\n    margin-left: 3rem !important;\n  }\n  .ms-xxl-auto {\n    margin-left: auto !important;\n  }\n  .p-xxl-0 {\n    padding: 0 !important;\n  }\n  .p-xxl-1 {\n    padding: 0.25rem !important;\n  }\n  .p-xxl-2 {\n    padding: 0.5rem !important;\n  }\n  .p-xxl-3 {\n    padding: 1rem !important;\n  }\n  .p-xxl-4 {\n    padding: 1.5rem !important;\n  }\n  .p-xxl-5 {\n    padding: 3rem !important;\n  }\n  .px-xxl-0 {\n    padding-right: 0 !important;\n    padding-left: 0 !important;\n  }\n  .px-xxl-1 {\n    padding-right: 0.25rem !important;\n    padding-left: 0.25rem !important;\n  }\n  .px-xxl-2 {\n    padding-right: 0.5rem !important;\n    padding-left: 0.5rem !important;\n  }\n  .px-xxl-3 {\n    padding-right: 1rem !important;\n    padding-left: 1rem !important;\n  }\n  .px-xxl-4 {\n    padding-right: 1.5rem !important;\n    padding-left: 1.5rem !important;\n  }\n  .px-xxl-5 {\n    padding-right: 3rem !important;\n    padding-left: 3rem !important;\n  }\n  .py-xxl-0 {\n    padding-top: 0 !important;\n    padding-bottom: 0 !important;\n  }\n  .py-xxl-1 {\n    padding-top: 0.25rem !important;\n    padding-bottom: 0.25rem !important;\n  }\n  .py-xxl-2 {\n    padding-top: 0.5rem !important;\n    padding-bottom: 0.5rem !important;\n  }\n  .py-xxl-3 {\n    padding-top: 1rem !important;\n    padding-bottom: 1rem !important;\n  }\n  .py-xxl-4 {\n    padding-top: 1.5rem !important;\n    padding-bottom: 1.5rem !important;\n  }\n  .py-xxl-5 {\n    padding-top: 3rem !important;\n    padding-bottom: 3rem !important;\n  }\n  .pt-xxl-0 {\n    padding-top: 0 !important;\n  }\n  .pt-xxl-1 {\n    padding-top: 0.25rem !important;\n  }\n  .pt-xxl-2 {\n    padding-top: 0.5rem !important;\n  }\n  .pt-xxl-3 {\n    padding-top: 1rem !important;\n  }\n  .pt-xxl-4 {\n    padding-top: 1.5rem !important;\n  }\n  .pt-xxl-5 {\n    padding-top: 3rem !important;\n  }\n  .pe-xxl-0 {\n    padding-right: 0 !important;\n  }\n  .pe-xxl-1 {\n    padding-right: 0.25rem !important;\n  }\n  .pe-xxl-2 {\n    padding-right: 0.5rem !important;\n  }\n  .pe-xxl-3 {\n    padding-right: 1rem !important;\n  }\n  .pe-xxl-4 {\n    padding-right: 1.5rem !important;\n  }\n  .pe-xxl-5 {\n    padding-right: 3rem !important;\n  }\n  .pb-xxl-0 {\n    padding-bottom: 0 !important;\n  }\n  .pb-xxl-1 {\n    padding-bottom: 0.25rem !important;\n  }\n  .pb-xxl-2 {\n    padding-bottom: 0.5rem !important;\n  }\n  .pb-xxl-3 {\n    padding-bottom: 1rem !important;\n  }\n  .pb-xxl-4 {\n    padding-bottom: 1.5rem !important;\n  }\n  .pb-xxl-5 {\n    padding-bottom: 3rem !important;\n  }\n  .ps-xxl-0 {\n    padding-left: 0 !important;\n  }\n  .ps-xxl-1 {\n    padding-left: 0.25rem !important;\n  }\n  .ps-xxl-2 {\n    padding-left: 0.5rem !important;\n  }\n  .ps-xxl-3 {\n    padding-left: 1rem !important;\n  }\n  .ps-xxl-4 {\n    padding-left: 1.5rem !important;\n  }\n  .ps-xxl-5 {\n    padding-left: 3rem !important;\n  }\n  .text-xxl-start {\n    text-align: left !important;\n  }\n  .text-xxl-end {\n    text-align: right !important;\n  }\n  .text-xxl-center {\n    text-align: center !important;\n  }\n}\n\n@media (min-width: 1200px) {\n  .fs-1 {\n    font-size: 2.5rem !important;\n  }\n  .fs-2 {\n    font-size: 2rem !important;\n  }\n  .fs-3 {\n    font-size: 1.75rem !important;\n  }\n  .fs-4 {\n    font-size: 1.5rem !important;\n  }\n}\n\n@media print {\n  .d-print-inline {\n    display: inline !important;\n  }\n  .d-print-inline-block {\n    display: inline-block !important;\n  }\n  .d-print-block {\n    display: block !important;\n  }\n  .d-print-grid {\n    display: grid !important;\n  }\n  .d-print-table {\n    display: table !important;\n  }\n  .d-print-table-row {\n    display: table-row !important;\n  }\n  .d-print-table-cell {\n    display: table-cell !important;\n  }\n  .d-print-flex {\n    display: -ms-flexbox !important;\n    display: flex !important;\n  }\n  .d-print-inline-flex {\n    display: -ms-inline-flexbox !important;\n    display: inline-flex !important;\n  }\n  .d-print-none {\n    display: none !important;\n  }\n}\n\n.btn-primary {\n  background-color: #4c9be8;\n}\n\n.btn-secondary {\n  background-color: #4e5d6c;\n}\n\n.btn-success {\n  background-color: #5cb85c;\n}\n\n.btn-info {\n  background-color: #5bc0de;\n}\n\n.btn-warning {\n  background-color: #ffc107;\n}\n\n.btn-danger {\n  background-color: #d9534f;\n}\n\n.btn-light {\n  background-color: #abb6c2;\n}\n\n.btn-dark {\n  background-color: #20374c;\n}\n\n.dropdown-menu {\n  font-size: 0.875rem;\n}\n\n.dropdown-header {\n  font-size: 0.875rem;\n}\n\n.blockquote-footer {\n  color: #ebebeb;\n}\n\n.table {\n  font-size: 0.875rem;\n}\n\n.table .thead-dark th {\n  color: #fff;\n}\n\n.table a:not(.btn) {\n  color: #fff;\n  text-decoration: underline;\n}\n\n.table .dropdown-menu a {\n  text-decoration: none;\n}\n\n.table .text-muted {\n  color: rgba(255, 255, 255, 0.4);\n}\n\nlabel,\n.radio label,\n.checkbox label,\n.help-block {\n  font-size: 0.875rem;\n}\n\n.form-floating label {\n  color: #868e96;\n}\n\n.nav-tabs .nav-link,\n.nav-tabs .nav-link:hover,\n.nav-pills .nav-link,\n.nav-pills .nav-link:hover {\n  color: #ebebeb;\n}\n\n.nav-tabs .nav-link.disabled,\n.nav-pills .nav-link.disabled {\n  color: rgba(255, 255, 255, 0.4);\n}\n\n.page-link:hover,\n.page-link:focus {\n  color: #fff;\n  text-decoration: none;\n}\n\n.alert {\n  border: none;\n  color: #fff;\n}\n\n.alert a,\n.alert .alert-link {\n  color: #fff;\n  text-decoration: underline;\n}\n\n.alert-primary {\n  background-color: #4c9be8;\n}\n\n.alert-secondary {\n  background-color: #4e5d6c;\n}\n\n.alert-success {\n  background-color: #5cb85c;\n}\n\n.alert-info {\n  background-color: #5bc0de;\n}\n\n.alert-warning {\n  background-color: #ffc107;\n}\n\n.alert-danger {\n  background-color: #d9534f;\n}\n\n.alert-light {\n  background-color: #abb6c2;\n}\n\n.alert-dark {\n  background-color: #20374c;\n}\n\n.badge-warning, .badge-info {\n  color: #fff;\n}\n\n.popover-header {\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n}\n\n.modal-header, .modal-footer {\n  background-color: rgba(255, 255, 255, 0.075);\n}\n"
  },
  {
    "path": "src/sourceDev.WebApp/SharedThemes/superhero/wwwroot/css/fontawesome-all.css",
    "content": "/*!\n * Font Awesome Free 5.0.8 by @fontawesome - https://fontawesome.com\n * License - https://fontawesome.com/license (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)\n */\n.fa,\n.fas,\n.far,\n.fal,\n.fab {\n  -moz-osx-font-smoothing: grayscale;\n  -webkit-font-smoothing: antialiased;\n  display: inline-block;\n  font-style: normal;\n  font-variant: normal;\n  text-rendering: auto;\n  line-height: 1; }\n\n.fa-lg {\n  font-size: 1.33333em;\n  line-height: 0.75em;\n  vertical-align: -.0667em; }\n\n.fa-xs {\n  font-size: .75em; }\n\n.fa-sm {\n  font-size: .875em; }\n\n.fa-1x {\n  font-size: 1em; }\n\n.fa-2x {\n  font-size: 2em; }\n\n.fa-3x {\n  font-size: 3em; }\n\n.fa-4x {\n  font-size: 4em; }\n\n.fa-5x {\n  font-size: 5em; }\n\n.fa-6x {\n  font-size: 6em; }\n\n.fa-7x {\n  font-size: 7em; }\n\n.fa-8x {\n  font-size: 8em; }\n\n.fa-9x {\n  font-size: 9em; }\n\n.fa-10x {\n  font-size: 10em; }\n\n.fa-fw {\n  text-align: center;\n  width: 1.25em; }\n\n.fa-ul {\n  list-style-type: none;\n  margin-left: 2.5em;\n  padding-left: 0; }\n  .fa-ul > li {\n    position: relative; }\n\n.fa-li {\n  left: -2em;\n  position: absolute;\n  text-align: center;\n  width: 2em;\n  line-height: inherit; }\n\n.fa-border {\n  border: solid 0.08em #eee;\n  border-radius: .1em;\n  padding: .2em .25em .15em; }\n\n.fa-pull-left {\n  float: left; }\n\n.fa-pull-right {\n  float: right; }\n\n.fa.fa-pull-left,\n.fas.fa-pull-left,\n.far.fa-pull-left,\n.fal.fa-pull-left,\n.fab.fa-pull-left {\n  margin-right: .3em; }\n\n.fa.fa-pull-right,\n.fas.fa-pull-right,\n.far.fa-pull-right,\n.fal.fa-pull-right,\n.fab.fa-pull-right {\n  margin-left: .3em; }\n\n.fa-spin {\n  -webkit-animation: fa-spin 2s infinite linear;\n          animation: fa-spin 2s infinite linear; }\n\n.fa-pulse {\n  -webkit-animation: fa-spin 1s infinite steps(8);\n          animation: fa-spin 1s infinite steps(8); }\n\n@-webkit-keyframes fa-spin {\n  0% {\n    -webkit-transform: rotate(0deg);\n            transform: rotate(0deg); }\n  100% {\n    -webkit-transform: rotate(360deg);\n            transform: rotate(360deg); } }\n\n@keyframes fa-spin {\n  0% {\n    -webkit-transform: rotate(0deg);\n            transform: rotate(0deg); }\n  100% {\n    -webkit-transform: rotate(360deg);\n            transform: rotate(360deg); } }\n\n.fa-rotate-90 {\n  -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)\";\n  -webkit-transform: rotate(90deg);\n          transform: rotate(90deg); }\n\n.fa-rotate-180 {\n  -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)\";\n  -webkit-transform: rotate(180deg);\n          transform: rotate(180deg); }\n\n.fa-rotate-270 {\n  -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)\";\n  -webkit-transform: rotate(270deg);\n          transform: rotate(270deg); }\n\n.fa-flip-horizontal {\n  -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)\";\n  -webkit-transform: scale(-1, 1);\n          transform: scale(-1, 1); }\n\n.fa-flip-vertical {\n  -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)\";\n  -webkit-transform: scale(1, -1);\n          transform: scale(1, -1); }\n\n.fa-flip-horizontal.fa-flip-vertical {\n  -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)\";\n  -webkit-transform: scale(-1, -1);\n          transform: scale(-1, -1); }\n\n:root .fa-rotate-90,\n:root .fa-rotate-180,\n:root .fa-rotate-270,\n:root .fa-flip-horizontal,\n:root .fa-flip-vertical {\n  -webkit-filter: none;\n          filter: none; }\n\n.fa-stack {\n  display: inline-block;\n  height: 2em;\n  line-height: 2em;\n  position: relative;\n  vertical-align: middle;\n  width: 2em; }\n\n.fa-stack-1x,\n.fa-stack-2x {\n  left: 0;\n  position: absolute;\n  text-align: center;\n  width: 100%; }\n\n.fa-stack-1x {\n  line-height: inherit; }\n\n.fa-stack-2x {\n  font-size: 2em; }\n\n.fa-inverse {\n  color: #fff; }\n\n/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen\nreaders do not read off random characters that represent icons */\n.fa-500px:before {\n  content: \"\\f26e\"; }\n\n.fa-accessible-icon:before {\n  content: \"\\f368\"; }\n\n.fa-accusoft:before {\n  content: \"\\f369\"; }\n\n.fa-address-book:before {\n  content: \"\\f2b9\"; }\n\n.fa-address-card:before {\n  content: \"\\f2bb\"; }\n\n.fa-adjust:before {\n  content: \"\\f042\"; }\n\n.fa-adn:before {\n  content: \"\\f170\"; }\n\n.fa-adversal:before {\n  content: \"\\f36a\"; }\n\n.fa-affiliatetheme:before {\n  content: \"\\f36b\"; }\n\n.fa-algolia:before {\n  content: \"\\f36c\"; }\n\n.fa-align-center:before {\n  content: \"\\f037\"; }\n\n.fa-align-justify:before {\n  content: \"\\f039\"; }\n\n.fa-align-left:before {\n  content: \"\\f036\"; }\n\n.fa-align-right:before {\n  content: \"\\f038\"; }\n\n.fa-amazon:before {\n  content: \"\\f270\"; }\n\n.fa-amazon-pay:before {\n  content: \"\\f42c\"; }\n\n.fa-ambulance:before {\n  content: \"\\f0f9\"; }\n\n.fa-american-sign-language-interpreting:before {\n  content: \"\\f2a3\"; }\n\n.fa-amilia:before {\n  content: \"\\f36d\"; }\n\n.fa-anchor:before {\n  content: \"\\f13d\"; }\n\n.fa-android:before {\n  content: \"\\f17b\"; }\n\n.fa-angellist:before {\n  content: \"\\f209\"; }\n\n.fa-angle-double-down:before {\n  content: \"\\f103\"; }\n\n.fa-angle-double-left:before {\n  content: \"\\f100\"; }\n\n.fa-angle-double-right:before {\n  content: \"\\f101\"; }\n\n.fa-angle-double-up:before {\n  content: \"\\f102\"; }\n\n.fa-angle-down:before {\n  content: \"\\f107\"; }\n\n.fa-angle-left:before {\n  content: \"\\f104\"; }\n\n.fa-angle-right:before {\n  content: \"\\f105\"; }\n\n.fa-angle-up:before {\n  content: \"\\f106\"; }\n\n.fa-angrycreative:before {\n  content: \"\\f36e\"; }\n\n.fa-angular:before {\n  content: \"\\f420\"; }\n\n.fa-app-store:before {\n  content: \"\\f36f\"; }\n\n.fa-app-store-ios:before {\n  content: \"\\f370\"; }\n\n.fa-apper:before {\n  content: \"\\f371\"; }\n\n.fa-apple:before {\n  content: \"\\f179\"; }\n\n.fa-apple-pay:before {\n  content: \"\\f415\"; }\n\n.fa-archive:before {\n  content: \"\\f187\"; }\n\n.fa-arrow-alt-circle-down:before {\n  content: \"\\f358\"; }\n\n.fa-arrow-alt-circle-left:before {\n  content: \"\\f359\"; }\n\n.fa-arrow-alt-circle-right:before {\n  content: \"\\f35a\"; }\n\n.fa-arrow-alt-circle-up:before {\n  content: \"\\f35b\"; }\n\n.fa-arrow-circle-down:before {\n  content: \"\\f0ab\"; }\n\n.fa-arrow-circle-left:before {\n  content: \"\\f0a8\"; }\n\n.fa-arrow-circle-right:before {\n  content: \"\\f0a9\"; }\n\n.fa-arrow-circle-up:before {\n  content: \"\\f0aa\"; }\n\n.fa-arrow-down:before {\n  content: \"\\f063\"; }\n\n.fa-arrow-left:before {\n  content: \"\\f060\"; }\n\n.fa-arrow-right:before {\n  content: \"\\f061\"; }\n\n.fa-arrow-up:before {\n  content: \"\\f062\"; }\n\n.fa-arrows-alt:before {\n  content: \"\\f0b2\"; }\n\n.fa-arrows-alt-h:before {\n  content: \"\\f337\"; }\n\n.fa-arrows-alt-v:before {\n  content: \"\\f338\"; }\n\n.fa-assistive-listening-systems:before {\n  content: \"\\f2a2\"; }\n\n.fa-asterisk:before {\n  content: \"\\f069\"; }\n\n.fa-asymmetrik:before {\n  content: \"\\f372\"; }\n\n.fa-at:before {\n  content: \"\\f1fa\"; }\n\n.fa-audible:before {\n  content: \"\\f373\"; }\n\n.fa-audio-description:before {\n  content: \"\\f29e\"; }\n\n.fa-autoprefixer:before {\n  content: \"\\f41c\"; }\n\n.fa-avianex:before {\n  content: \"\\f374\"; }\n\n.fa-aviato:before {\n  content: \"\\f421\"; }\n\n.fa-aws:before {\n  content: \"\\f375\"; }\n\n.fa-backward:before {\n  content: \"\\f04a\"; }\n\n.fa-balance-scale:before {\n  content: \"\\f24e\"; }\n\n.fa-ban:before {\n  content: \"\\f05e\"; }\n\n.fa-band-aid:before {\n  content: \"\\f462\"; }\n\n.fa-bandcamp:before {\n  content: \"\\f2d5\"; }\n\n.fa-barcode:before {\n  content: \"\\f02a\"; }\n\n.fa-bars:before {\n  content: \"\\f0c9\"; }\n\n.fa-baseball-ball:before {\n  content: \"\\f433\"; }\n\n.fa-basketball-ball:before {\n  content: \"\\f434\"; }\n\n.fa-bath:before {\n  content: \"\\f2cd\"; }\n\n.fa-battery-empty:before {\n  content: \"\\f244\"; }\n\n.fa-battery-full:before {\n  content: \"\\f240\"; }\n\n.fa-battery-half:before {\n  content: \"\\f242\"; }\n\n.fa-battery-quarter:before {\n  content: \"\\f243\"; }\n\n.fa-battery-three-quarters:before {\n  content: \"\\f241\"; }\n\n.fa-bed:before {\n  content: \"\\f236\"; }\n\n.fa-beer:before {\n  content: \"\\f0fc\"; }\n\n.fa-behance:before {\n  content: \"\\f1b4\"; }\n\n.fa-behance-square:before {\n  content: \"\\f1b5\"; }\n\n.fa-bell:before {\n  content: \"\\f0f3\"; }\n\n.fa-bell-slash:before {\n  content: \"\\f1f6\"; }\n\n.fa-bicycle:before {\n  content: \"\\f206\"; }\n\n.fa-bimobject:before {\n  content: \"\\f378\"; }\n\n.fa-binoculars:before {\n  content: \"\\f1e5\"; }\n\n.fa-birthday-cake:before {\n  content: \"\\f1fd\"; }\n\n.fa-bitbucket:before {\n  content: \"\\f171\"; }\n\n.fa-bitcoin:before {\n  content: \"\\f379\"; }\n\n.fa-bity:before {\n  content: \"\\f37a\"; }\n\n.fa-black-tie:before {\n  content: \"\\f27e\"; }\n\n.fa-blackberry:before {\n  content: \"\\f37b\"; }\n\n.fa-blind:before {\n  content: \"\\f29d\"; }\n\n.fa-blogger:before {\n  content: \"\\f37c\"; }\n\n.fa-blogger-b:before {\n  content: \"\\f37d\"; }\n\n.fa-bluetooth:before {\n  content: \"\\f293\"; }\n\n.fa-bluetooth-b:before {\n  content: \"\\f294\"; }\n\n.fa-bold:before {\n  content: \"\\f032\"; }\n\n.fa-bolt:before {\n  content: \"\\f0e7\"; }\n\n.fa-bomb:before {\n  content: \"\\f1e2\"; }\n\n.fa-book:before {\n  content: \"\\f02d\"; }\n\n.fa-bookmark:before {\n  content: \"\\f02e\"; }\n\n.fa-bowling-ball:before {\n  content: \"\\f436\"; }\n\n.fa-box:before {\n  content: \"\\f466\"; }\n\n.fa-boxes:before {\n  content: \"\\f468\"; }\n\n.fa-braille:before {\n  content: \"\\f2a1\"; }\n\n.fa-briefcase:before {\n  content: \"\\f0b1\"; }\n\n.fa-btc:before {\n  content: \"\\f15a\"; }\n\n.fa-bug:before {\n  content: \"\\f188\"; }\n\n.fa-building:before {\n  content: \"\\f1ad\"; }\n\n.fa-bullhorn:before {\n  content: \"\\f0a1\"; }\n\n.fa-bullseye:before {\n  content: \"\\f140\"; }\n\n.fa-buromobelexperte:before {\n  content: \"\\f37f\"; }\n\n.fa-bus:before {\n  content: \"\\f207\"; }\n\n.fa-buysellads:before {\n  content: \"\\f20d\"; }\n\n.fa-calculator:before {\n  content: \"\\f1ec\"; }\n\n.fa-calendar:before {\n  content: \"\\f133\"; }\n\n.fa-calendar-alt:before {\n  content: \"\\f073\"; }\n\n.fa-calendar-check:before {\n  content: \"\\f274\"; }\n\n.fa-calendar-minus:before {\n  content: \"\\f272\"; }\n\n.fa-calendar-plus:before {\n  content: \"\\f271\"; }\n\n.fa-calendar-times:before {\n  content: \"\\f273\"; }\n\n.fa-camera:before {\n  content: \"\\f030\"; }\n\n.fa-camera-retro:before {\n  content: \"\\f083\"; }\n\n.fa-car:before {\n  content: \"\\f1b9\"; }\n\n.fa-caret-down:before {\n  content: \"\\f0d7\"; }\n\n.fa-caret-left:before {\n  content: \"\\f0d9\"; }\n\n.fa-caret-right:before {\n  content: \"\\f0da\"; }\n\n.fa-caret-square-down:before {\n  content: \"\\f150\"; }\n\n.fa-caret-square-left:before {\n  content: \"\\f191\"; }\n\n.fa-caret-square-right:before {\n  content: \"\\f152\"; }\n\n.fa-caret-square-up:before {\n  content: \"\\f151\"; }\n\n.fa-caret-up:before {\n  content: \"\\f0d8\"; }\n\n.fa-cart-arrow-down:before {\n  content: \"\\f218\"; }\n\n.fa-cart-plus:before {\n  content: \"\\f217\"; }\n\n.fa-cc-amazon-pay:before {\n  content: \"\\f42d\"; }\n\n.fa-cc-amex:before {\n  content: \"\\f1f3\"; }\n\n.fa-cc-apple-pay:before {\n  content: \"\\f416\"; }\n\n.fa-cc-diners-club:before {\n  content: \"\\f24c\"; }\n\n.fa-cc-discover:before {\n  content: \"\\f1f2\"; }\n\n.fa-cc-jcb:before {\n  content: \"\\f24b\"; }\n\n.fa-cc-mastercard:before {\n  content: \"\\f1f1\"; }\n\n.fa-cc-paypal:before {\n  content: \"\\f1f4\"; }\n\n.fa-cc-stripe:before {\n  content: \"\\f1f5\"; }\n\n.fa-cc-visa:before {\n  content: \"\\f1f0\"; }\n\n.fa-centercode:before {\n  content: \"\\f380\"; }\n\n.fa-certificate:before {\n  content: \"\\f0a3\"; }\n\n.fa-chart-area:before {\n  content: \"\\f1fe\"; }\n\n.fa-chart-bar:before {\n  content: \"\\f080\"; }\n\n.fa-chart-line:before {\n  content: \"\\f201\"; }\n\n.fa-chart-pie:before {\n  content: \"\\f200\"; }\n\n.fa-check:before {\n  content: \"\\f00c\"; }\n\n.fa-check-circle:before {\n  content: \"\\f058\"; }\n\n.fa-check-square:before {\n  content: \"\\f14a\"; }\n\n.fa-chess:before {\n  content: \"\\f439\"; }\n\n.fa-chess-bishop:before {\n  content: \"\\f43a\"; }\n\n.fa-chess-board:before {\n  content: \"\\f43c\"; }\n\n.fa-chess-king:before {\n  content: \"\\f43f\"; }\n\n.fa-chess-knight:before {\n  content: \"\\f441\"; }\n\n.fa-chess-pawn:before {\n  content: \"\\f443\"; }\n\n.fa-chess-queen:before {\n  content: \"\\f445\"; }\n\n.fa-chess-rook:before {\n  content: \"\\f447\"; }\n\n.fa-chevron-circle-down:before {\n  content: \"\\f13a\"; }\n\n.fa-chevron-circle-left:before {\n  content: \"\\f137\"; }\n\n.fa-chevron-circle-right:before {\n  content: \"\\f138\"; }\n\n.fa-chevron-circle-up:before {\n  content: \"\\f139\"; }\n\n.fa-chevron-down:before {\n  content: \"\\f078\"; }\n\n.fa-chevron-left:before {\n  content: \"\\f053\"; }\n\n.fa-chevron-right:before {\n  content: \"\\f054\"; }\n\n.fa-chevron-up:before {\n  content: \"\\f077\"; }\n\n.fa-child:before {\n  content: \"\\f1ae\"; }\n\n.fa-chrome:before {\n  content: \"\\f268\"; }\n\n.fa-circle:before {\n  content: \"\\f111\"; }\n\n.fa-circle-notch:before {\n  content: \"\\f1ce\"; }\n\n.fa-clipboard:before {\n  content: \"\\f328\"; }\n\n.fa-clipboard-check:before {\n  content: \"\\f46c\"; }\n\n.fa-clipboard-list:before {\n  content: \"\\f46d\"; }\n\n.fa-clock:before {\n  content: \"\\f017\"; }\n\n.fa-clone:before {\n  content: \"\\f24d\"; }\n\n.fa-closed-captioning:before {\n  content: \"\\f20a\"; }\n\n.fa-cloud:before {\n  content: \"\\f0c2\"; }\n\n.fa-cloud-download-alt:before {\n  content: \"\\f381\"; }\n\n.fa-cloud-upload-alt:before {\n  content: \"\\f382\"; }\n\n.fa-cloudscale:before {\n  content: \"\\f383\"; }\n\n.fa-cloudsmith:before {\n  content: \"\\f384\"; }\n\n.fa-cloudversify:before {\n  content: \"\\f385\"; }\n\n.fa-code:before {\n  content: \"\\f121\"; }\n\n.fa-code-branch:before {\n  content: \"\\f126\"; }\n\n.fa-codepen:before {\n  content: \"\\f1cb\"; }\n\n.fa-codiepie:before {\n  content: \"\\f284\"; }\n\n.fa-coffee:before {\n  content: \"\\f0f4\"; }\n\n.fa-cog:before {\n  content: \"\\f013\"; }\n\n.fa-cogs:before {\n  content: \"\\f085\"; }\n\n.fa-columns:before {\n  content: \"\\f0db\"; }\n\n.fa-comment:before {\n  content: \"\\f075\"; }\n\n.fa-comment-alt:before {\n  content: \"\\f27a\"; }\n\n.fa-comments:before {\n  content: \"\\f086\"; }\n\n.fa-compass:before {\n  content: \"\\f14e\"; }\n\n.fa-compress:before {\n  content: \"\\f066\"; }\n\n.fa-connectdevelop:before {\n  content: \"\\f20e\"; }\n\n.fa-contao:before {\n  content: \"\\f26d\"; }\n\n.fa-copy:before {\n  content: \"\\f0c5\"; }\n\n.fa-copyright:before {\n  content: \"\\f1f9\"; }\n\n.fa-cpanel:before {\n  content: \"\\f388\"; }\n\n.fa-creative-commons:before {\n  content: \"\\f25e\"; }\n\n.fa-credit-card:before {\n  content: \"\\f09d\"; }\n\n.fa-crop:before {\n  content: \"\\f125\"; }\n\n.fa-crosshairs:before {\n  content: \"\\f05b\"; }\n\n.fa-css3:before {\n  content: \"\\f13c\"; }\n\n.fa-css3-alt:before {\n  content: \"\\f38b\"; }\n\n.fa-cube:before {\n  content: \"\\f1b2\"; }\n\n.fa-cubes:before {\n  content: \"\\f1b3\"; }\n\n.fa-cut:before {\n  content: \"\\f0c4\"; }\n\n.fa-cuttlefish:before {\n  content: \"\\f38c\"; }\n\n.fa-d-and-d:before {\n  content: \"\\f38d\"; }\n\n.fa-dashcube:before {\n  content: \"\\f210\"; }\n\n.fa-database:before {\n  content: \"\\f1c0\"; }\n\n.fa-deaf:before {\n  content: \"\\f2a4\"; }\n\n.fa-delicious:before {\n  content: \"\\f1a5\"; }\n\n.fa-deploydog:before {\n  content: \"\\f38e\"; }\n\n.fa-deskpro:before {\n  content: \"\\f38f\"; }\n\n.fa-desktop:before {\n  content: \"\\f108\"; }\n\n.fa-deviantart:before {\n  content: \"\\f1bd\"; }\n\n.fa-digg:before {\n  content: \"\\f1a6\"; }\n\n.fa-digital-ocean:before {\n  content: \"\\f391\"; }\n\n.fa-discord:before {\n  content: \"\\f392\"; }\n\n.fa-discourse:before {\n  content: \"\\f393\"; }\n\n.fa-dna:before {\n  content: \"\\f471\"; }\n\n.fa-dochub:before {\n  content: \"\\f394\"; }\n\n.fa-docker:before {\n  content: \"\\f395\"; }\n\n.fa-dollar-sign:before {\n  content: \"\\f155\"; }\n\n.fa-dolly:before {\n  content: \"\\f472\"; }\n\n.fa-dolly-flatbed:before {\n  content: \"\\f474\"; }\n\n.fa-dot-circle:before {\n  content: \"\\f192\"; }\n\n.fa-download:before {\n  content: \"\\f019\"; }\n\n.fa-draft2digital:before {\n  content: \"\\f396\"; }\n\n.fa-dribbble:before {\n  content: \"\\f17d\"; }\n\n.fa-dribbble-square:before {\n  content: \"\\f397\"; }\n\n.fa-dropbox:before {\n  content: \"\\f16b\"; }\n\n.fa-drupal:before {\n  content: \"\\f1a9\"; }\n\n.fa-dyalog:before {\n  content: \"\\f399\"; }\n\n.fa-earlybirds:before {\n  content: \"\\f39a\"; }\n\n.fa-edge:before {\n  content: \"\\f282\"; }\n\n.fa-edit:before {\n  content: \"\\f044\"; }\n\n.fa-eject:before {\n  content: \"\\f052\"; }\n\n.fa-elementor:before {\n  content: \"\\f430\"; }\n\n.fa-ellipsis-h:before {\n  content: \"\\f141\"; }\n\n.fa-ellipsis-v:before {\n  content: \"\\f142\"; }\n\n.fa-ember:before {\n  content: \"\\f423\"; }\n\n.fa-empire:before {\n  content: \"\\f1d1\"; }\n\n.fa-envelope:before {\n  content: \"\\f0e0\"; }\n\n.fa-envelope-open:before {\n  content: \"\\f2b6\"; }\n\n.fa-envelope-square:before {\n  content: \"\\f199\"; }\n\n.fa-envira:before {\n  content: \"\\f299\"; }\n\n.fa-eraser:before {\n  content: \"\\f12d\"; }\n\n.fa-erlang:before {\n  content: \"\\f39d\"; }\n\n.fa-ethereum:before {\n  content: \"\\f42e\"; }\n\n.fa-etsy:before {\n  content: \"\\f2d7\"; }\n\n.fa-euro-sign:before {\n  content: \"\\f153\"; }\n\n.fa-exchange-alt:before {\n  content: \"\\f362\"; }\n\n.fa-exclamation:before {\n  content: \"\\f12a\"; }\n\n.fa-exclamation-circle:before {\n  content: \"\\f06a\"; }\n\n.fa-exclamation-triangle:before {\n  content: \"\\f071\"; }\n\n.fa-expand:before {\n  content: \"\\f065\"; }\n\n.fa-expand-arrows-alt:before {\n  content: \"\\f31e\"; }\n\n.fa-expeditedssl:before {\n  content: \"\\f23e\"; }\n\n.fa-external-link-alt:before {\n  content: \"\\f35d\"; }\n\n.fa-external-link-square-alt:before {\n  content: \"\\f360\"; }\n\n.fa-eye:before {\n  content: \"\\f06e\"; }\n\n.fa-eye-dropper:before {\n  content: \"\\f1fb\"; }\n\n.fa-eye-slash:before {\n  content: \"\\f070\"; }\n\n.fa-facebook:before {\n  content: \"\\f09a\"; }\n\n.fa-facebook-f:before {\n  content: \"\\f39e\"; }\n\n.fa-facebook-messenger:before {\n  content: \"\\f39f\"; }\n\n.fa-facebook-square:before {\n  content: \"\\f082\"; }\n\n.fa-fast-backward:before {\n  content: \"\\f049\"; }\n\n.fa-fast-forward:before {\n  content: \"\\f050\"; }\n\n.fa-fax:before {\n  content: \"\\f1ac\"; }\n\n.fa-female:before {\n  content: \"\\f182\"; }\n\n.fa-fighter-jet:before {\n  content: \"\\f0fb\"; }\n\n.fa-file:before {\n  content: \"\\f15b\"; }\n\n.fa-file-alt:before {\n  content: \"\\f15c\"; }\n\n.fa-file-archive:before {\n  content: \"\\f1c6\"; }\n\n.fa-file-audio:before {\n  content: \"\\f1c7\"; }\n\n.fa-file-code:before {\n  content: \"\\f1c9\"; }\n\n.fa-file-excel:before {\n  content: \"\\f1c3\"; }\n\n.fa-file-image:before {\n  content: \"\\f1c5\"; }\n\n.fa-file-pdf:before {\n  content: \"\\f1c1\"; }\n\n.fa-file-powerpoint:before {\n  content: \"\\f1c4\"; }\n\n.fa-file-video:before {\n  content: \"\\f1c8\"; }\n\n.fa-file-word:before {\n  content: \"\\f1c2\"; }\n\n.fa-film:before {\n  content: \"\\f008\"; }\n\n.fa-filter:before {\n  content: \"\\f0b0\"; }\n\n.fa-fire:before {\n  content: \"\\f06d\"; }\n\n.fa-fire-extinguisher:before {\n  content: \"\\f134\"; }\n\n.fa-firefox:before {\n  content: \"\\f269\"; }\n\n.fa-first-aid:before {\n  content: \"\\f479\"; }\n\n.fa-first-order:before {\n  content: \"\\f2b0\"; }\n\n.fa-firstdraft:before {\n  content: \"\\f3a1\"; }\n\n.fa-flag:before {\n  content: \"\\f024\"; }\n\n.fa-flag-checkered:before {\n  content: \"\\f11e\"; }\n\n.fa-flask:before {\n  content: \"\\f0c3\"; }\n\n.fa-flickr:before {\n  content: \"\\f16e\"; }\n\n.fa-flipboard:before {\n  content: \"\\f44d\"; }\n\n.fa-fly:before {\n  content: \"\\f417\"; }\n\n.fa-folder:before {\n  content: \"\\f07b\"; }\n\n.fa-folder-open:before {\n  content: \"\\f07c\"; }\n\n.fa-font:before {\n  content: \"\\f031\"; }\n\n.fa-font-awesome:before {\n  content: \"\\f2b4\"; }\n\n.fa-font-awesome-alt:before {\n  content: \"\\f35c\"; }\n\n.fa-font-awesome-flag:before {\n  content: \"\\f425\"; }\n\n.fa-fonticons:before {\n  content: \"\\f280\"; }\n\n.fa-fonticons-fi:before {\n  content: \"\\f3a2\"; }\n\n.fa-football-ball:before {\n  content: \"\\f44e\"; }\n\n.fa-fort-awesome:before {\n  content: \"\\f286\"; }\n\n.fa-fort-awesome-alt:before {\n  content: \"\\f3a3\"; }\n\n.fa-forumbee:before {\n  content: \"\\f211\"; }\n\n.fa-forward:before {\n  content: \"\\f04e\"; }\n\n.fa-foursquare:before {\n  content: \"\\f180\"; }\n\n.fa-free-code-camp:before {\n  content: \"\\f2c5\"; }\n\n.fa-freebsd:before {\n  content: \"\\f3a4\"; }\n\n.fa-frown:before {\n  content: \"\\f119\"; }\n\n.fa-futbol:before {\n  content: \"\\f1e3\"; }\n\n.fa-gamepad:before {\n  content: \"\\f11b\"; }\n\n.fa-gavel:before {\n  content: \"\\f0e3\"; }\n\n.fa-gem:before {\n  content: \"\\f3a5\"; }\n\n.fa-genderless:before {\n  content: \"\\f22d\"; }\n\n.fa-get-pocket:before {\n  content: \"\\f265\"; }\n\n.fa-gg:before {\n  content: \"\\f260\"; }\n\n.fa-gg-circle:before {\n  content: \"\\f261\"; }\n\n.fa-gift:before {\n  content: \"\\f06b\"; }\n\n.fa-git:before {\n  content: \"\\f1d3\"; }\n\n.fa-git-square:before {\n  content: \"\\f1d2\"; }\n\n.fa-github:before {\n  content: \"\\f09b\"; }\n\n.fa-github-alt:before {\n  content: \"\\f113\"; }\n\n.fa-github-square:before {\n  content: \"\\f092\"; }\n\n.fa-gitkraken:before {\n  content: \"\\f3a6\"; }\n\n.fa-gitlab:before {\n  content: \"\\f296\"; }\n\n.fa-gitter:before {\n  content: \"\\f426\"; }\n\n.fa-glass-martini:before {\n  content: \"\\f000\"; }\n\n.fa-glide:before {\n  content: \"\\f2a5\"; }\n\n.fa-glide-g:before {\n  content: \"\\f2a6\"; }\n\n.fa-globe:before {\n  content: \"\\f0ac\"; }\n\n.fa-gofore:before {\n  content: \"\\f3a7\"; }\n\n.fa-golf-ball:before {\n  content: \"\\f450\"; }\n\n.fa-goodreads:before {\n  content: \"\\f3a8\"; }\n\n.fa-goodreads-g:before {\n  content: \"\\f3a9\"; }\n\n.fa-google:before {\n  content: \"\\f1a0\"; }\n\n.fa-google-drive:before {\n  content: \"\\f3aa\"; }\n\n.fa-google-play:before {\n  content: \"\\f3ab\"; }\n\n.fa-google-plus:before {\n  content: \"\\f2b3\"; }\n\n.fa-google-plus-g:before {\n  content: \"\\f0d5\"; }\n\n.fa-google-plus-square:before {\n  content: \"\\f0d4\"; }\n\n.fa-google-wallet:before {\n  content: \"\\f1ee\"; }\n\n.fa-graduation-cap:before {\n  content: \"\\f19d\"; }\n\n.fa-gratipay:before {\n  content: \"\\f184\"; }\n\n.fa-grav:before {\n  content: \"\\f2d6\"; }\n\n.fa-gripfire:before {\n  content: \"\\f3ac\"; }\n\n.fa-grunt:before {\n  content: \"\\f3ad\"; }\n\n.fa-gulp:before {\n  content: \"\\f3ae\"; }\n\n.fa-h-square:before {\n  content: \"\\f0fd\"; }\n\n.fa-hacker-news:before {\n  content: \"\\f1d4\"; }\n\n.fa-hacker-news-square:before {\n  content: \"\\f3af\"; }\n\n.fa-hand-lizard:before {\n  content: \"\\f258\"; }\n\n.fa-hand-paper:before {\n  content: \"\\f256\"; }\n\n.fa-hand-peace:before {\n  content: \"\\f25b\"; }\n\n.fa-hand-point-down:before {\n  content: \"\\f0a7\"; }\n\n.fa-hand-point-left:before {\n  content: \"\\f0a5\"; }\n\n.fa-hand-point-right:before {\n  content: \"\\f0a4\"; }\n\n.fa-hand-point-up:before {\n  content: \"\\f0a6\"; }\n\n.fa-hand-pointer:before {\n  content: \"\\f25a\"; }\n\n.fa-hand-rock:before {\n  content: \"\\f255\"; }\n\n.fa-hand-scissors:before {\n  content: \"\\f257\"; }\n\n.fa-hand-spock:before {\n  content: \"\\f259\"; }\n\n.fa-handshake:before {\n  content: \"\\f2b5\"; }\n\n.fa-hashtag:before {\n  content: \"\\f292\"; }\n\n.fa-hdd:before {\n  content: \"\\f0a0\"; }\n\n.fa-heading:before {\n  content: \"\\f1dc\"; }\n\n.fa-headphones:before {\n  content: \"\\f025\"; }\n\n.fa-heart:before {\n  content: \"\\f004\"; }\n\n.fa-heartbeat:before {\n  content: \"\\f21e\"; }\n\n.fa-hips:before {\n  content: \"\\f452\"; }\n\n.fa-hire-a-helper:before {\n  content: \"\\f3b0\"; }\n\n.fa-history:before {\n  content: \"\\f1da\"; }\n\n.fa-hockey-puck:before {\n  content: \"\\f453\"; }\n\n.fa-home:before {\n  content: \"\\f015\"; }\n\n.fa-hooli:before {\n  content: \"\\f427\"; }\n\n.fa-hospital:before {\n  content: \"\\f0f8\"; }\n\n.fa-hospital-symbol:before {\n  content: \"\\f47e\"; }\n\n.fa-hotjar:before {\n  content: \"\\f3b1\"; }\n\n.fa-hourglass:before {\n  content: \"\\f254\"; }\n\n.fa-hourglass-end:before {\n  content: \"\\f253\"; }\n\n.fa-hourglass-half:before {\n  content: \"\\f252\"; }\n\n.fa-hourglass-start:before {\n  content: \"\\f251\"; }\n\n.fa-houzz:before {\n  content: \"\\f27c\"; }\n\n.fa-html5:before {\n  content: \"\\f13b\"; }\n\n.fa-hubspot:before {\n  content: \"\\f3b2\"; }\n\n.fa-i-cursor:before {\n  content: \"\\f246\"; }\n\n.fa-id-badge:before {\n  content: \"\\f2c1\"; }\n\n.fa-id-card:before {\n  content: \"\\f2c2\"; }\n\n.fa-image:before {\n  content: \"\\f03e\"; }\n\n.fa-images:before {\n  content: \"\\f302\"; }\n\n.fa-imdb:before {\n  content: \"\\f2d8\"; }\n\n.fa-inbox:before {\n  content: \"\\f01c\"; }\n\n.fa-indent:before {\n  content: \"\\f03c\"; }\n\n.fa-industry:before {\n  content: \"\\f275\"; }\n\n.fa-info:before {\n  content: \"\\f129\"; }\n\n.fa-info-circle:before {\n  content: \"\\f05a\"; }\n\n.fa-instagram:before {\n  content: \"\\f16d\"; }\n\n.fa-internet-explorer:before {\n  content: \"\\f26b\"; }\n\n.fa-ioxhost:before {\n  content: \"\\f208\"; }\n\n.fa-italic:before {\n  content: \"\\f033\"; }\n\n.fa-itunes:before {\n  content: \"\\f3b4\"; }\n\n.fa-itunes-note:before {\n  content: \"\\f3b5\"; }\n\n.fa-jenkins:before {\n  content: \"\\f3b6\"; }\n\n.fa-joget:before {\n  content: \"\\f3b7\"; }\n\n.fa-joomla:before {\n  content: \"\\f1aa\"; }\n\n.fa-js:before {\n  content: \"\\f3b8\"; }\n\n.fa-js-square:before {\n  content: \"\\f3b9\"; }\n\n.fa-jsfiddle:before {\n  content: \"\\f1cc\"; }\n\n.fa-key:before {\n  content: \"\\f084\"; }\n\n.fa-keyboard:before {\n  content: \"\\f11c\"; }\n\n.fa-keycdn:before {\n  content: \"\\f3ba\"; }\n\n.fa-kickstarter:before {\n  content: \"\\f3bb\"; }\n\n.fa-kickstarter-k:before {\n  content: \"\\f3bc\"; }\n\n.fa-korvue:before {\n  content: \"\\f42f\"; }\n\n.fa-language:before {\n  content: \"\\f1ab\"; }\n\n.fa-laptop:before {\n  content: \"\\f109\"; }\n\n.fa-laravel:before {\n  content: \"\\f3bd\"; }\n\n.fa-lastfm:before {\n  content: \"\\f202\"; }\n\n.fa-lastfm-square:before {\n  content: \"\\f203\"; }\n\n.fa-leaf:before {\n  content: \"\\f06c\"; }\n\n.fa-leanpub:before {\n  content: \"\\f212\"; }\n\n.fa-lemon:before {\n  content: \"\\f094\"; }\n\n.fa-less:before {\n  content: \"\\f41d\"; }\n\n.fa-level-down-alt:before {\n  content: \"\\f3be\"; }\n\n.fa-level-up-alt:before {\n  content: \"\\f3bf\"; }\n\n.fa-life-ring:before {\n  content: \"\\f1cd\"; }\n\n.fa-lightbulb:before {\n  content: \"\\f0eb\"; }\n\n.fa-line:before {\n  content: \"\\f3c0\"; }\n\n.fa-link:before {\n  content: \"\\f0c1\"; }\n\n.fa-linkedin:before {\n  content: \"\\f08c\"; }\n\n.fa-linkedin-in:before {\n  content: \"\\f0e1\"; }\n\n.fa-linode:before {\n  content: \"\\f2b8\"; }\n\n.fa-linux:before {\n  content: \"\\f17c\"; }\n\n.fa-lira-sign:before {\n  content: \"\\f195\"; }\n\n.fa-list:before {\n  content: \"\\f03a\"; }\n\n.fa-list-alt:before {\n  content: \"\\f022\"; }\n\n.fa-list-ol:before {\n  content: \"\\f0cb\"; }\n\n.fa-list-ul:before {\n  content: \"\\f0ca\"; }\n\n.fa-location-arrow:before {\n  content: \"\\f124\"; }\n\n.fa-lock:before {\n  content: \"\\f023\"; }\n\n.fa-lock-open:before {\n  content: \"\\f3c1\"; }\n\n.fa-long-arrow-alt-down:before {\n  content: \"\\f309\"; }\n\n.fa-long-arrow-alt-left:before {\n  content: \"\\f30a\"; }\n\n.fa-long-arrow-alt-right:before {\n  content: \"\\f30b\"; }\n\n.fa-long-arrow-alt-up:before {\n  content: \"\\f30c\"; }\n\n.fa-low-vision:before {\n  content: \"\\f2a8\"; }\n\n.fa-lyft:before {\n  content: \"\\f3c3\"; }\n\n.fa-magento:before {\n  content: \"\\f3c4\"; }\n\n.fa-magic:before {\n  content: \"\\f0d0\"; }\n\n.fa-magnet:before {\n  content: \"\\f076\"; }\n\n.fa-male:before {\n  content: \"\\f183\"; }\n\n.fa-map:before {\n  content: \"\\f279\"; }\n\n.fa-map-marker:before {\n  content: \"\\f041\"; }\n\n.fa-map-marker-alt:before {\n  content: \"\\f3c5\"; }\n\n.fa-map-pin:before {\n  content: \"\\f276\"; }\n\n.fa-map-signs:before {\n  content: \"\\f277\"; }\n\n.fa-mars:before {\n  content: \"\\f222\"; }\n\n.fa-mars-double:before {\n  content: \"\\f227\"; }\n\n.fa-mars-stroke:before {\n  content: \"\\f229\"; }\n\n.fa-mars-stroke-h:before {\n  content: \"\\f22b\"; }\n\n.fa-mars-stroke-v:before {\n  content: \"\\f22a\"; }\n\n.fa-maxcdn:before {\n  content: \"\\f136\"; }\n\n.fa-medapps:before {\n  content: \"\\f3c6\"; }\n\n.fa-medium:before {\n  content: \"\\f23a\"; }\n\n.fa-medium-m:before {\n  content: \"\\f3c7\"; }\n\n.fa-medkit:before {\n  content: \"\\f0fa\"; }\n\n.fa-medrt:before {\n  content: \"\\f3c8\"; }\n\n.fa-meetup:before {\n  content: \"\\f2e0\"; }\n\n.fa-meh:before {\n  content: \"\\f11a\"; }\n\n.fa-mercury:before {\n  content: \"\\f223\"; }\n\n.fa-microchip:before {\n  content: \"\\f2db\"; }\n\n.fa-microphone:before {\n  content: \"\\f130\"; }\n\n.fa-microphone-slash:before {\n  content: \"\\f131\"; }\n\n.fa-microsoft:before {\n  content: \"\\f3ca\"; }\n\n.fa-minus:before {\n  content: \"\\f068\"; }\n\n.fa-minus-circle:before {\n  content: \"\\f056\"; }\n\n.fa-minus-square:before {\n  content: \"\\f146\"; }\n\n.fa-mix:before {\n  content: \"\\f3cb\"; }\n\n.fa-mixcloud:before {\n  content: \"\\f289\"; }\n\n.fa-mizuni:before {\n  content: \"\\f3cc\"; }\n\n.fa-mobile:before {\n  content: \"\\f10b\"; }\n\n.fa-mobile-alt:before {\n  content: \"\\f3cd\"; }\n\n.fa-modx:before {\n  content: \"\\f285\"; }\n\n.fa-monero:before {\n  content: \"\\f3d0\"; }\n\n.fa-money-bill-alt:before {\n  content: \"\\f3d1\"; }\n\n.fa-moon:before {\n  content: \"\\f186\"; }\n\n.fa-motorcycle:before {\n  content: \"\\f21c\"; }\n\n.fa-mouse-pointer:before {\n  content: \"\\f245\"; }\n\n.fa-music:before {\n  content: \"\\f001\"; }\n\n.fa-napster:before {\n  content: \"\\f3d2\"; }\n\n.fa-neuter:before {\n  content: \"\\f22c\"; }\n\n.fa-newspaper:before {\n  content: \"\\f1ea\"; }\n\n.fa-nintendo-switch:before {\n  content: \"\\f418\"; }\n\n.fa-node:before {\n  content: \"\\f419\"; }\n\n.fa-node-js:before {\n  content: \"\\f3d3\"; }\n\n.fa-npm:before {\n  content: \"\\f3d4\"; }\n\n.fa-ns8:before {\n  content: \"\\f3d5\"; }\n\n.fa-nutritionix:before {\n  content: \"\\f3d6\"; }\n\n.fa-object-group:before {\n  content: \"\\f247\"; }\n\n.fa-object-ungroup:before {\n  content: \"\\f248\"; }\n\n.fa-odnoklassniki:before {\n  content: \"\\f263\"; }\n\n.fa-odnoklassniki-square:before {\n  content: \"\\f264\"; }\n\n.fa-opencart:before {\n  content: \"\\f23d\"; }\n\n.fa-openid:before {\n  content: \"\\f19b\"; }\n\n.fa-opera:before {\n  content: \"\\f26a\"; }\n\n.fa-optin-monster:before {\n  content: \"\\f23c\"; }\n\n.fa-osi:before {\n  content: \"\\f41a\"; }\n\n.fa-outdent:before {\n  content: \"\\f03b\"; }\n\n.fa-page4:before {\n  content: \"\\f3d7\"; }\n\n.fa-pagelines:before {\n  content: \"\\f18c\"; }\n\n.fa-paint-brush:before {\n  content: \"\\f1fc\"; }\n\n.fa-palfed:before {\n  content: \"\\f3d8\"; }\n\n.fa-pallet:before {\n  content: \"\\f482\"; }\n\n.fa-paper-plane:before {\n  content: \"\\f1d8\"; }\n\n.fa-paperclip:before {\n  content: \"\\f0c6\"; }\n\n.fa-paragraph:before {\n  content: \"\\f1dd\"; }\n\n.fa-paste:before {\n  content: \"\\f0ea\"; }\n\n.fa-patreon:before {\n  content: \"\\f3d9\"; }\n\n.fa-pause:before {\n  content: \"\\f04c\"; }\n\n.fa-pause-circle:before {\n  content: \"\\f28b\"; }\n\n.fa-paw:before {\n  content: \"\\f1b0\"; }\n\n.fa-paypal:before {\n  content: \"\\f1ed\"; }\n\n.fa-pen-square:before {\n  content: \"\\f14b\"; }\n\n.fa-pencil-alt:before {\n  content: \"\\f303\"; }\n\n.fa-percent:before {\n  content: \"\\f295\"; }\n\n.fa-periscope:before {\n  content: \"\\f3da\"; }\n\n.fa-phabricator:before {\n  content: \"\\f3db\"; }\n\n.fa-phoenix-framework:before {\n  content: \"\\f3dc\"; }\n\n.fa-phone:before {\n  content: \"\\f095\"; }\n\n.fa-phone-square:before {\n  content: \"\\f098\"; }\n\n.fa-phone-volume:before {\n  content: \"\\f2a0\"; }\n\n.fa-php:before {\n  content: \"\\f457\"; }\n\n.fa-pied-piper:before {\n  content: \"\\f2ae\"; }\n\n.fa-pied-piper-alt:before {\n  content: \"\\f1a8\"; }\n\n.fa-pied-piper-pp:before {\n  content: \"\\f1a7\"; }\n\n.fa-pills:before {\n  content: \"\\f484\"; }\n\n.fa-pinterest:before {\n  content: \"\\f0d2\"; }\n\n.fa-pinterest-p:before {\n  content: \"\\f231\"; }\n\n.fa-pinterest-square:before {\n  content: \"\\f0d3\"; }\n\n.fa-plane:before {\n  content: \"\\f072\"; }\n\n.fa-play:before {\n  content: \"\\f04b\"; }\n\n.fa-play-circle:before {\n  content: \"\\f144\"; }\n\n.fa-playstation:before {\n  content: \"\\f3df\"; }\n\n.fa-plug:before {\n  content: \"\\f1e6\"; }\n\n.fa-plus:before {\n  content: \"\\f067\"; }\n\n.fa-plus-circle:before {\n  content: \"\\f055\"; }\n\n.fa-plus-square:before {\n  content: \"\\f0fe\"; }\n\n.fa-podcast:before {\n  content: \"\\f2ce\"; }\n\n.fa-pound-sign:before {\n  content: \"\\f154\"; }\n\n.fa-power-off:before {\n  content: \"\\f011\"; }\n\n.fa-print:before {\n  content: \"\\f02f\"; }\n\n.fa-product-hunt:before {\n  content: \"\\f288\"; }\n\n.fa-pushed:before {\n  content: \"\\f3e1\"; }\n\n.fa-puzzle-piece:before {\n  content: \"\\f12e\"; }\n\n.fa-python:before {\n  content: \"\\f3e2\"; }\n\n.fa-qq:before {\n  content: \"\\f1d6\"; }\n\n.fa-qrcode:before {\n  content: \"\\f029\"; }\n\n.fa-question:before {\n  content: \"\\f128\"; }\n\n.fa-question-circle:before {\n  content: \"\\f059\"; }\n\n.fa-quidditch:before {\n  content: \"\\f458\"; }\n\n.fa-quinscape:before {\n  content: \"\\f459\"; }\n\n.fa-quora:before {\n  content: \"\\f2c4\"; }\n\n.fa-quote-left:before {\n  content: \"\\f10d\"; }\n\n.fa-quote-right:before {\n  content: \"\\f10e\"; }\n\n.fa-random:before {\n  content: \"\\f074\"; }\n\n.fa-ravelry:before {\n  content: \"\\f2d9\"; }\n\n.fa-react:before {\n  content: \"\\f41b\"; }\n\n.fa-rebel:before {\n  content: \"\\f1d0\"; }\n\n.fa-recycle:before {\n  content: \"\\f1b8\"; }\n\n.fa-red-river:before {\n  content: \"\\f3e3\"; }\n\n.fa-reddit:before {\n  content: \"\\f1a1\"; }\n\n.fa-reddit-alien:before {\n  content: \"\\f281\"; }\n\n.fa-reddit-square:before {\n  content: \"\\f1a2\"; }\n\n.fa-redo:before {\n  content: \"\\f01e\"; }\n\n.fa-redo-alt:before {\n  content: \"\\f2f9\"; }\n\n.fa-registered:before {\n  content: \"\\f25d\"; }\n\n.fa-rendact:before {\n  content: \"\\f3e4\"; }\n\n.fa-renren:before {\n  content: \"\\f18b\"; }\n\n.fa-reply:before {\n  content: \"\\f3e5\"; }\n\n.fa-reply-all:before {\n  content: \"\\f122\"; }\n\n.fa-replyd:before {\n  content: \"\\f3e6\"; }\n\n.fa-resolving:before {\n  content: \"\\f3e7\"; }\n\n.fa-retweet:before {\n  content: \"\\f079\"; }\n\n.fa-road:before {\n  content: \"\\f018\"; }\n\n.fa-rocket:before {\n  content: \"\\f135\"; }\n\n.fa-rocketchat:before {\n  content: \"\\f3e8\"; }\n\n.fa-rockrms:before {\n  content: \"\\f3e9\"; }\n\n.fa-rss:before {\n  content: \"\\f09e\"; }\n\n.fa-rss-square:before {\n  content: \"\\f143\"; }\n\n.fa-ruble-sign:before {\n  content: \"\\f158\"; }\n\n.fa-rupee-sign:before {\n  content: \"\\f156\"; }\n\n.fa-safari:before {\n  content: \"\\f267\"; }\n\n.fa-sass:before {\n  content: \"\\f41e\"; }\n\n.fa-save:before {\n  content: \"\\f0c7\"; }\n\n.fa-schlix:before {\n  content: \"\\f3ea\"; }\n\n.fa-scribd:before {\n  content: \"\\f28a\"; }\n\n.fa-search:before {\n  content: \"\\f002\"; }\n\n.fa-search-minus:before {\n  content: \"\\f010\"; }\n\n.fa-search-plus:before {\n  content: \"\\f00e\"; }\n\n.fa-searchengin:before {\n  content: \"\\f3eb\"; }\n\n.fa-sellcast:before {\n  content: \"\\f2da\"; }\n\n.fa-sellsy:before {\n  content: \"\\f213\"; }\n\n.fa-server:before {\n  content: \"\\f233\"; }\n\n.fa-servicestack:before {\n  content: \"\\f3ec\"; }\n\n.fa-share:before {\n  content: \"\\f064\"; }\n\n.fa-share-alt:before {\n  content: \"\\f1e0\"; }\n\n.fa-share-alt-square:before {\n  content: \"\\f1e1\"; }\n\n.fa-share-square:before {\n  content: \"\\f14d\"; }\n\n.fa-shekel-sign:before {\n  content: \"\\f20b\"; }\n\n.fa-shield-alt:before {\n  content: \"\\f3ed\"; }\n\n.fa-ship:before {\n  content: \"\\f21a\"; }\n\n.fa-shipping-fast:before {\n  content: \"\\f48b\"; }\n\n.fa-shirtsinbulk:before {\n  content: \"\\f214\"; }\n\n.fa-shopping-bag:before {\n  content: \"\\f290\"; }\n\n.fa-shopping-basket:before {\n  content: \"\\f291\"; }\n\n.fa-shopping-cart:before {\n  content: \"\\f07a\"; }\n\n.fa-shower:before {\n  content: \"\\f2cc\"; }\n\n.fa-sign-in-alt:before {\n  content: \"\\f2f6\"; }\n\n.fa-sign-language:before {\n  content: \"\\f2a7\"; }\n\n.fa-sign-out-alt:before {\n  content: \"\\f2f5\"; }\n\n.fa-signal:before {\n  content: \"\\f012\"; }\n\n.fa-simplybuilt:before {\n  content: \"\\f215\"; }\n\n.fa-sistrix:before {\n  content: \"\\f3ee\"; }\n\n.fa-sitemap:before {\n  content: \"\\f0e8\"; }\n\n.fa-skyatlas:before {\n  content: \"\\f216\"; }\n\n.fa-skype:before {\n  content: \"\\f17e\"; }\n\n.fa-slack:before {\n  content: \"\\f198\"; }\n\n.fa-slack-hash:before {\n  content: \"\\f3ef\"; }\n\n.fa-sliders-h:before {\n  content: \"\\f1de\"; }\n\n.fa-slideshare:before {\n  content: \"\\f1e7\"; }\n\n.fa-smile:before {\n  content: \"\\f118\"; }\n\n.fa-snapchat:before {\n  content: \"\\f2ab\"; }\n\n.fa-snapchat-ghost:before {\n  content: \"\\f2ac\"; }\n\n.fa-snapchat-square:before {\n  content: \"\\f2ad\"; }\n\n.fa-snowflake:before {\n  content: \"\\f2dc\"; }\n\n.fa-sort:before {\n  content: \"\\f0dc\"; }\n\n.fa-sort-alpha-down:before {\n  content: \"\\f15d\"; }\n\n.fa-sort-alpha-up:before {\n  content: \"\\f15e\"; }\n\n.fa-sort-amount-down:before {\n  content: \"\\f160\"; }\n\n.fa-sort-amount-up:before {\n  content: \"\\f161\"; }\n\n.fa-sort-down:before {\n  content: \"\\f0dd\"; }\n\n.fa-sort-numeric-down:before {\n  content: \"\\f162\"; }\n\n.fa-sort-numeric-up:before {\n  content: \"\\f163\"; }\n\n.fa-sort-up:before {\n  content: \"\\f0de\"; }\n\n.fa-soundcloud:before {\n  content: \"\\f1be\"; }\n\n.fa-space-shuttle:before {\n  content: \"\\f197\"; }\n\n.fa-speakap:before {\n  content: \"\\f3f3\"; }\n\n.fa-spinner:before {\n  content: \"\\f110\"; }\n\n.fa-spotify:before {\n  content: \"\\f1bc\"; }\n\n.fa-square:before {\n  content: \"\\f0c8\"; }\n\n.fa-square-full:before {\n  content: \"\\f45c\"; }\n\n.fa-stack-exchange:before {\n  content: \"\\f18d\"; }\n\n.fa-stack-overflow:before {\n  content: \"\\f16c\"; }\n\n.fa-star:before {\n  content: \"\\f005\"; }\n\n.fa-star-half:before {\n  content: \"\\f089\"; }\n\n.fa-staylinked:before {\n  content: \"\\f3f5\"; }\n\n.fa-steam:before {\n  content: \"\\f1b6\"; }\n\n.fa-steam-square:before {\n  content: \"\\f1b7\"; }\n\n.fa-steam-symbol:before {\n  content: \"\\f3f6\"; }\n\n.fa-step-backward:before {\n  content: \"\\f048\"; }\n\n.fa-step-forward:before {\n  content: \"\\f051\"; }\n\n.fa-stethoscope:before {\n  content: \"\\f0f1\"; }\n\n.fa-sticker-mule:before {\n  content: \"\\f3f7\"; }\n\n.fa-sticky-note:before {\n  content: \"\\f249\"; }\n\n.fa-stop:before {\n  content: \"\\f04d\"; }\n\n.fa-stop-circle:before {\n  content: \"\\f28d\"; }\n\n.fa-stopwatch:before {\n  content: \"\\f2f2\"; }\n\n.fa-strava:before {\n  content: \"\\f428\"; }\n\n.fa-street-view:before {\n  content: \"\\f21d\"; }\n\n.fa-strikethrough:before {\n  content: \"\\f0cc\"; }\n\n.fa-stripe:before {\n  content: \"\\f429\"; }\n\n.fa-stripe-s:before {\n  content: \"\\f42a\"; }\n\n.fa-studiovinari:before {\n  content: \"\\f3f8\"; }\n\n.fa-stumbleupon:before {\n  content: \"\\f1a4\"; }\n\n.fa-stumbleupon-circle:before {\n  content: \"\\f1a3\"; }\n\n.fa-subscript:before {\n  content: \"\\f12c\"; }\n\n.fa-subway:before {\n  content: \"\\f239\"; }\n\n.fa-suitcase:before {\n  content: \"\\f0f2\"; }\n\n.fa-sun:before {\n  content: \"\\f185\"; }\n\n.fa-superpowers:before {\n  content: \"\\f2dd\"; }\n\n.fa-superscript:before {\n  content: \"\\f12b\"; }\n\n.fa-supple:before {\n  content: \"\\f3f9\"; }\n\n.fa-sync:before {\n  content: \"\\f021\"; }\n\n.fa-sync-alt:before {\n  content: \"\\f2f1\"; }\n\n.fa-syringe:before {\n  content: \"\\f48e\"; }\n\n.fa-table:before {\n  content: \"\\f0ce\"; }\n\n.fa-table-tennis:before {\n  content: \"\\f45d\"; }\n\n.fa-tablet:before {\n  content: \"\\f10a\"; }\n\n.fa-tablet-alt:before {\n  content: \"\\f3fa\"; }\n\n.fa-tachometer-alt:before {\n  content: \"\\f3fd\"; }\n\n.fa-tag:before {\n  content: \"\\f02b\"; }\n\n.fa-tags:before {\n  content: \"\\f02c\"; }\n\n.fa-tasks:before {\n  content: \"\\f0ae\"; }\n\n.fa-taxi:before {\n  content: \"\\f1ba\"; }\n\n.fa-telegram:before {\n  content: \"\\f2c6\"; }\n\n.fa-telegram-plane:before {\n  content: \"\\f3fe\"; }\n\n.fa-tencent-weibo:before {\n  content: \"\\f1d5\"; }\n\n.fa-terminal:before {\n  content: \"\\f120\"; }\n\n.fa-text-height:before {\n  content: \"\\f034\"; }\n\n.fa-text-width:before {\n  content: \"\\f035\"; }\n\n.fa-th:before {\n  content: \"\\f00a\"; }\n\n.fa-th-large:before {\n  content: \"\\f009\"; }\n\n.fa-th-list:before {\n  content: \"\\f00b\"; }\n\n.fa-themeisle:before {\n  content: \"\\f2b2\"; }\n\n.fa-thermometer:before {\n  content: \"\\f491\"; }\n\n.fa-thermometer-empty:before {\n  content: \"\\f2cb\"; }\n\n.fa-thermometer-full:before {\n  content: \"\\f2c7\"; }\n\n.fa-thermometer-half:before {\n  content: \"\\f2c9\"; }\n\n.fa-thermometer-quarter:before {\n  content: \"\\f2ca\"; }\n\n.fa-thermometer-three-quarters:before {\n  content: \"\\f2c8\"; }\n\n.fa-thumbs-down:before {\n  content: \"\\f165\"; }\n\n.fa-thumbs-up:before {\n  content: \"\\f164\"; }\n\n.fa-thumbtack:before {\n  content: \"\\f08d\"; }\n\n.fa-ticket-alt:before {\n  content: \"\\f3ff\"; }\n\n.fa-times:before {\n  content: \"\\f00d\"; }\n\n.fa-times-circle:before {\n  content: \"\\f057\"; }\n\n.fa-tint:before {\n  content: \"\\f043\"; }\n\n.fa-toggle-off:before {\n  content: \"\\f204\"; }\n\n.fa-toggle-on:before {\n  content: \"\\f205\"; }\n\n.fa-trademark:before {\n  content: \"\\f25c\"; }\n\n.fa-train:before {\n  content: \"\\f238\"; }\n\n.fa-transgender:before {\n  content: \"\\f224\"; }\n\n.fa-transgender-alt:before {\n  content: \"\\f225\"; }\n\n.fa-trash:before {\n  content: \"\\f1f8\"; }\n\n.fa-trash-alt:before {\n  content: \"\\f2ed\"; }\n\n.fa-tree:before {\n  content: \"\\f1bb\"; }\n\n.fa-trello:before {\n  content: \"\\f181\"; }\n\n.fa-tripadvisor:before {\n  content: \"\\f262\"; }\n\n.fa-trophy:before {\n  content: \"\\f091\"; }\n\n.fa-truck:before {\n  content: \"\\f0d1\"; }\n\n.fa-tty:before {\n  content: \"\\f1e4\"; }\n\n.fa-tumblr:before {\n  content: \"\\f173\"; }\n\n.fa-tumblr-square:before {\n  content: \"\\f174\"; }\n\n.fa-tv:before {\n  content: \"\\f26c\"; }\n\n.fa-twitch:before {\n  content: \"\\f1e8\"; }\n\n.fa-twitter:before {\n  content: \"\\f099\"; }\n\n.fa-twitter-square:before {\n  content: \"\\f081\"; }\n\n.fa-typo3:before {\n  content: \"\\f42b\"; }\n\n.fa-uber:before {\n  content: \"\\f402\"; }\n\n.fa-uikit:before {\n  content: \"\\f403\"; }\n\n.fa-umbrella:before {\n  content: \"\\f0e9\"; }\n\n.fa-underline:before {\n  content: \"\\f0cd\"; }\n\n.fa-undo:before {\n  content: \"\\f0e2\"; }\n\n.fa-undo-alt:before {\n  content: \"\\f2ea\"; }\n\n.fa-uniregistry:before {\n  content: \"\\f404\"; }\n\n.fa-universal-access:before {\n  content: \"\\f29a\"; }\n\n.fa-university:before {\n  content: \"\\f19c\"; }\n\n.fa-unlink:before {\n  content: \"\\f127\"; }\n\n.fa-unlock:before {\n  content: \"\\f09c\"; }\n\n.fa-unlock-alt:before {\n  content: \"\\f13e\"; }\n\n.fa-untappd:before {\n  content: \"\\f405\"; }\n\n.fa-upload:before {\n  content: \"\\f093\"; }\n\n.fa-usb:before {\n  content: \"\\f287\"; }\n\n.fa-user:before {\n  content: \"\\f007\"; }\n\n.fa-user-circle:before {\n  content: \"\\f2bd\"; }\n\n.fa-user-md:before {\n  content: \"\\f0f0\"; }\n\n.fa-user-plus:before {\n  content: \"\\f234\"; }\n\n.fa-user-secret:before {\n  content: \"\\f21b\"; }\n\n.fa-user-times:before {\n  content: \"\\f235\"; }\n\n.fa-users:before {\n  content: \"\\f0c0\"; }\n\n.fa-ussunnah:before {\n  content: \"\\f407\"; }\n\n.fa-utensil-spoon:before {\n  content: \"\\f2e5\"; }\n\n.fa-utensils:before {\n  content: \"\\f2e7\"; }\n\n.fa-vaadin:before {\n  content: \"\\f408\"; }\n\n.fa-venus:before {\n  content: \"\\f221\"; }\n\n.fa-venus-double:before {\n  content: \"\\f226\"; }\n\n.fa-venus-mars:before {\n  content: \"\\f228\"; }\n\n.fa-viacoin:before {\n  content: \"\\f237\"; }\n\n.fa-viadeo:before {\n  content: \"\\f2a9\"; }\n\n.fa-viadeo-square:before {\n  content: \"\\f2aa\"; }\n\n.fa-viber:before {\n  content: \"\\f409\"; }\n\n.fa-video:before {\n  content: \"\\f03d\"; }\n\n.fa-vimeo:before {\n  content: \"\\f40a\"; }\n\n.fa-vimeo-square:before {\n  content: \"\\f194\"; }\n\n.fa-vimeo-v:before {\n  content: \"\\f27d\"; }\n\n.fa-vine:before {\n  content: \"\\f1ca\"; }\n\n.fa-vk:before {\n  content: \"\\f189\"; }\n\n.fa-vnv:before {\n  content: \"\\f40b\"; }\n\n.fa-volleyball-ball:before {\n  content: \"\\f45f\"; }\n\n.fa-volume-down:before {\n  content: \"\\f027\"; }\n\n.fa-volume-off:before {\n  content: \"\\f026\"; }\n\n.fa-volume-up:before {\n  content: \"\\f028\"; }\n\n.fa-vuejs:before {\n  content: \"\\f41f\"; }\n\n.fa-warehouse:before {\n  content: \"\\f494\"; }\n\n.fa-weibo:before {\n  content: \"\\f18a\"; }\n\n.fa-weight:before {\n  content: \"\\f496\"; }\n\n.fa-weixin:before {\n  content: \"\\f1d7\"; }\n\n.fa-whatsapp:before {\n  content: \"\\f232\"; }\n\n.fa-whatsapp-square:before {\n  content: \"\\f40c\"; }\n\n.fa-wheelchair:before {\n  content: \"\\f193\"; }\n\n.fa-whmcs:before {\n  content: \"\\f40d\"; }\n\n.fa-wifi:before {\n  content: \"\\f1eb\"; }\n\n.fa-wikipedia-w:before {\n  content: \"\\f266\"; }\n\n.fa-window-close:before {\n  content: \"\\f410\"; }\n\n.fa-window-maximize:before {\n  content: \"\\f2d0\"; }\n\n.fa-window-minimize:before {\n  content: \"\\f2d1\"; }\n\n.fa-window-restore:before {\n  content: \"\\f2d2\"; }\n\n.fa-windows:before {\n  content: \"\\f17a\"; }\n\n.fa-won-sign:before {\n  content: \"\\f159\"; }\n\n.fa-wordpress:before {\n  content: \"\\f19a\"; }\n\n.fa-wordpress-simple:before {\n  content: \"\\f411\"; }\n\n.fa-wpbeginner:before {\n  content: \"\\f297\"; }\n\n.fa-wpexplorer:before {\n  content: \"\\f2de\"; }\n\n.fa-wpforms:before {\n  content: \"\\f298\"; }\n\n.fa-wrench:before {\n  content: \"\\f0ad\"; }\n\n.fa-xbox:before {\n  content: \"\\f412\"; }\n\n.fa-xing:before {\n  content: \"\\f168\"; }\n\n.fa-xing-square:before {\n  content: \"\\f169\"; }\n\n.fa-y-combinator:before {\n  content: \"\\f23b\"; }\n\n.fa-yahoo:before {\n  content: \"\\f19e\"; }\n\n.fa-yandex:before {\n  content: \"\\f413\"; }\n\n.fa-yandex-international:before {\n  content: \"\\f414\"; }\n\n.fa-yelp:before {\n  content: \"\\f1e9\"; }\n\n.fa-yen-sign:before {\n  content: \"\\f157\"; }\n\n.fa-yoast:before {\n  content: \"\\f2b1\"; }\n\n.fa-youtube:before {\n  content: \"\\f167\"; }\n\n.fa-youtube-square:before {\n  content: \"\\f431\"; }\n\n.sr-only {\n  border: 0;\n  clip: rect(0, 0, 0, 0);\n  height: 1px;\n  margin: -1px;\n  overflow: hidden;\n  padding: 0;\n  position: absolute;\n  width: 1px; }\n\n.sr-only-focusable:active, .sr-only-focusable:focus {\n  clip: auto;\n  height: auto;\n  margin: 0;\n  overflow: visible;\n  position: static;\n  width: auto; }\n@font-face {\n  font-family: 'Font Awesome 5 Brands';\n  font-style: normal;\n  font-weight: normal;\n  src: url(\"../webfonts/fa-brands-400.eot\");\n  src: url(\"../webfonts/fa-brands-400.eot?#iefix\") format(\"embedded-opentype\"), url(\"../webfonts/fa-brands-400.woff2\") format(\"woff2\"), url(\"../webfonts/fa-brands-400.woff\") format(\"woff\"), url(\"../webfonts/fa-brands-400.ttf\") format(\"truetype\"), url(\"../webfonts/fa-brands-400.svg#fontawesome\") format(\"svg\"); }\n\n.fab {\n  font-family: 'Font Awesome 5 Brands'; }\n@font-face {\n  font-family: 'Font Awesome 5 Free';\n  font-style: normal;\n  font-weight: 400;\n  src: url(\"../webfonts/fa-regular-400.eot\");\n  src: url(\"../webfonts/fa-regular-400.eot?#iefix\") format(\"embedded-opentype\"), url(\"../webfonts/fa-regular-400.woff2\") format(\"woff2\"), url(\"../webfonts/fa-regular-400.woff\") format(\"woff\"), url(\"../webfonts/fa-regular-400.ttf\") format(\"truetype\"), url(\"../webfonts/fa-regular-400.svg#fontawesome\") format(\"svg\"); }\n\n.far {\n  font-family: 'Font Awesome 5 Free';\n  font-weight: 400; }\n@font-face {\n  font-family: 'Font Awesome 5 Free';\n  font-style: normal;\n  font-weight: 900;\n  src: url(\"../webfonts/fa-solid-900.eot\");\n  src: url(\"../webfonts/fa-solid-900.eot?#iefix\") format(\"embedded-opentype\"), url(\"../webfonts/fa-solid-900.woff2\") format(\"woff2\"), url(\"../webfonts/fa-solid-900.woff\") format(\"woff\"), url(\"../webfonts/fa-solid-900.ttf\") format(\"truetype\"), url(\"../webfonts/fa-solid-900.svg#fontawesome\") format(\"svg\"); }\n\n.fa,\n.fas {\n  font-family: 'Font Awesome 5 Free';\n  font-weight: 900; }\n"
  },
  {
    "path": "src/sourceDev.WebApp/SharedThemes/superhero/wwwroot/css/site.css",
    "content": "﻿html {\n    position: relative;\n    min-height: 100%;\n}\n\nbody {\n    min-height: 100vh;\n    padding-top: 155px;\n}\n\n#newPostLink {\n    position: absolute;\n    top: 170px;\n    right: 0px;\n}\n\n#editPostLink {\n    position: absolute;\n    top: 200px;\n    right: 0px;\n}\n\n#unpublishPostLink {\n    position: absolute;\n    top: 230px !important;\n    right: 0px !important;\n}\n\n#pageManagerLink {\n    position: absolute;\n    top: 170px;\n    right: 0px;\n}\n\n#newPageLink {\n    position: absolute;\n    top: 200px;\n    right: 0px;\n}\n\n#editPageLink {\n    position: absolute;\n    top: 230px;\n    right: 0px\n}\n\n#unpublishPageLink {\n    position: absolute;\n    top: 260px !important;\n    right: 0px !important\n}\n\n#sidenavtoggle {\n    position: absolute;\n    top: 220px;\n    right: 5px;\n}\n\n\n@media screen and (max-width: 812px) {\n    #sidenavtoggle,\n    #sidenavmenu {\n        display: none;\n    }\n}\n\n.flex-fill {\n    flex: 1 1 auto !important;\n}\n\n\n.carousel-caption p {\n    font-size: 20px;\n    line-height: 1.4;\n}\n\n@media screen and (max-width: 768px) {\n    .carousel-caption {\n        display: none\n    }\n}\n\n\n\n\nimg, video, iframe {\n    max-width: 100%;\n}\n\ntd img, video, iframe {\n    max-width: none;\n}\n\n\n\n.table td, .table th {\n    vertical-align: inherit;\n}\n\n/******** jquery smartmenu bootstrap 4 ******/\n/* Carets in collapsible mode (make them look like +/- buttons) */\n.navbar-nav.sm-collapsible .sub-arrow {\n    position: absolute;\n    top: 50%;\n    right: 0;\n    margin: -0.7em 0.5em 0 0;\n    border: 1px solid rgba(0, 0, 0, .1);\n    border-radius: .25rem;\n    padding: 0;\n    width: 2em;\n    height: 1.4em;\n    font-size: 1.25rem;\n    line-height: 1.2em;\n    text-align: center;\n}\n\n    .navbar-nav.sm-collapsible .sub-arrow::before {\n        content: '+';\n    }\n\n.navbar-nav.sm-collapsible .show > a > .sub-arrow::before {\n    content: '-';\n}\n\n.navbar-dark .navbar-nav.sm-collapsible .nav-link .sub-arrow {\n    border-color: rgba(255, 255, 255, .1);\n}\n/* make sure there's room for the carets */\n.navbar-nav.sm-collapsible .has-submenu {\n    padding-right: 3em;\n}\n/* keep the carets properly positioned */\n.navbar-nav.sm-collapsible .nav-link,\n.navbar-nav.sm-collapsible .dropdown-item {\n    position: relative;\n}\n\n\n/* Nav carets in expanded mode */\n.navbar-nav:not(.sm-collapsible) .nav-link .sub-arrow {\n    display: inline-block;\n    width: 0;\n    height: 0;\n    margin-left: .255em;\n    vertical-align: .255em;\n    border-top: .3em solid;\n    border-right: .3em solid transparent;\n    border-left: .3em solid transparent;\n}\n/* point the arrows up for .fixed-bottom navbars */\n.fixed-bottom .navbar-nav:not(.sm-collapsible) .nav-link .sub-arrow,\n.fixed-bottom .navbar-nav:not(.sm-collapsible):not([data-sm-skip]) .dropdown-toggle::after {\n    border-top: 0;\n    border-bottom: .3em solid;\n}\n\n\n/* Dropdown carets in expanded mode */\n.navbar-nav:not(.sm-collapsible) .dropdown-item .sub-arrow,\n.navbar-nav:not(.sm-collapsible):not([data-sm-skip]) .dropdown-menu .dropdown-toggle::after {\n    position: absolute;\n    top: 50%;\n    right: 0;\n    width: 0;\n    height: 0;\n    margin-top: -.3em;\n    margin-right: 1em;\n    border-top: .3em solid transparent;\n    border-bottom: .3em solid transparent;\n    border-left: .3em solid;\n}\n/* make sure there's room for the carets */\n.navbar-nav:not(.sm-collapsible) .dropdown-item.has-submenu {\n    padding-right: 2em;\n}\n\n\n/* Scrolling arrows for tall menus */\n.navbar-nav .scroll-up,\n.navbar-nav .scroll-down {\n    position: absolute;\n    display: none;\n    visibility: hidden;\n    height: 20px;\n    overflow: hidden;\n    text-align: center;\n}\n\n.navbar-nav .scroll-up-arrow,\n.navbar-nav .scroll-down-arrow {\n    position: absolute;\n    top: -2px;\n    left: 50%;\n    margin-left: -8px;\n    width: 0;\n    height: 0;\n    overflow: hidden;\n    border-top: 7px solid transparent;\n    border-right: 7px solid transparent;\n    border-bottom: 7px solid;\n    border-left: 7px solid transparent;\n}\n\n.navbar-nav .scroll-down-arrow {\n    top: 6px;\n    border-top: 7px solid;\n    border-right: 7px solid transparent;\n    border-bottom: 7px solid transparent;\n    border-left: 7px solid transparent;\n}\n\n\n/* Add some spacing for 2+ level sub menus in collapsible mode */\n.navbar-nav.sm-collapsible .dropdown-menu .dropdown-menu {\n    margin: .5em;\n}\n\n\n/* Fix SmartMenus sub menus auto width (subMenusMinWidth/subMenusMaxWidth options) */\n.navbar-nav:not([data-sm-skip]) .dropdown-item {\n    white-space: normal;\n}\n\n.navbar-nav:not(.sm-collapsible) .sm-nowrap > li > .dropdown-item {\n    white-space: nowrap;\n}\n/******** end jquery smart menu bootstrap-4 *****************/\n\n.brand-header {\n    height: 100px;\n    background-color: #2B3E50;\n}\n\nheader .navbar {\n    top: 100px;\n}\n"
  },
  {
    "path": "src/sourceDev.WebApp/SharedThemes/superhero/wwwroot/js/bootstrap.bundle.js",
    "content": "/*!\n  * Bootstrap v5.0.2 (https://getbootstrap.com/)\n  * Copyright 2011-2021 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)\n  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n  */\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n  typeof define === 'function' && define.amd ? define(factory) :\n  (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.bootstrap = factory());\n}(this, (function () { 'use strict';\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): dom/selector-engine.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n  const NODE_TEXT = 3;\n  const SelectorEngine = {\n    find(selector, element = document.documentElement) {\n      return [].concat(...Element.prototype.querySelectorAll.call(element, selector));\n    },\n\n    findOne(selector, element = document.documentElement) {\n      return Element.prototype.querySelector.call(element, selector);\n    },\n\n    children(element, selector) {\n      return [].concat(...element.children).filter(child => child.matches(selector));\n    },\n\n    parents(element, selector) {\n      const parents = [];\n      let ancestor = element.parentNode;\n\n      while (ancestor && ancestor.nodeType === Node.ELEMENT_NODE && ancestor.nodeType !== NODE_TEXT) {\n        if (ancestor.matches(selector)) {\n          parents.push(ancestor);\n        }\n\n        ancestor = ancestor.parentNode;\n      }\n\n      return parents;\n    },\n\n    prev(element, selector) {\n      let previous = element.previousElementSibling;\n\n      while (previous) {\n        if (previous.matches(selector)) {\n          return [previous];\n        }\n\n        previous = previous.previousElementSibling;\n      }\n\n      return [];\n    },\n\n    next(element, selector) {\n      let next = element.nextElementSibling;\n\n      while (next) {\n        if (next.matches(selector)) {\n          return [next];\n        }\n\n        next = next.nextElementSibling;\n      }\n\n      return [];\n    }\n\n  };\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): util/index.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n\n  const MAX_UID = 1000000;\n  const MILLISECONDS_MULTIPLIER = 1000;\n  const TRANSITION_END = 'transitionend'; // Shoutout AngusCroll (https://goo.gl/pxwQGp)\n\n  const toType = obj => {\n    if (obj === null || obj === undefined) {\n      return `${obj}`;\n    }\n\n    return {}.toString.call(obj).match(/\\s([a-z]+)/i)[1].toLowerCase();\n  };\n  /**\n   * --------------------------------------------------------------------------\n   * Public Util Api\n   * --------------------------------------------------------------------------\n   */\n\n\n  const getUID = prefix => {\n    do {\n      prefix += Math.floor(Math.random() * MAX_UID);\n    } while (document.getElementById(prefix));\n\n    return prefix;\n  };\n\n  const getSelector = element => {\n    let selector = element.getAttribute('data-bs-target');\n\n    if (!selector || selector === '#') {\n      let hrefAttr = element.getAttribute('href'); // The only valid content that could double as a selector are IDs or classes,\n      // so everything starting with `#` or `.`. If a \"real\" URL is used as the selector,\n      // `document.querySelector` will rightfully complain it is invalid.\n      // See https://github.com/twbs/bootstrap/issues/32273\n\n      if (!hrefAttr || !hrefAttr.includes('#') && !hrefAttr.startsWith('.')) {\n        return null;\n      } // Just in case some CMS puts out a full URL with the anchor appended\n\n\n      if (hrefAttr.includes('#') && !hrefAttr.startsWith('#')) {\n        hrefAttr = `#${hrefAttr.split('#')[1]}`;\n      }\n\n      selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : null;\n    }\n\n    return selector;\n  };\n\n  const getSelectorFromElement = element => {\n    const selector = getSelector(element);\n\n    if (selector) {\n      return document.querySelector(selector) ? selector : null;\n    }\n\n    return null;\n  };\n\n  const getElementFromSelector = element => {\n    const selector = getSelector(element);\n    return selector ? document.querySelector(selector) : null;\n  };\n\n  const getTransitionDurationFromElement = element => {\n    if (!element) {\n      return 0;\n    } // Get transition-duration of the element\n\n\n    let {\n      transitionDuration,\n      transitionDelay\n    } = window.getComputedStyle(element);\n    const floatTransitionDuration = Number.parseFloat(transitionDuration);\n    const floatTransitionDelay = Number.parseFloat(transitionDelay); // Return 0 if element or transition duration is not found\n\n    if (!floatTransitionDuration && !floatTransitionDelay) {\n      return 0;\n    } // If multiple durations are defined, take the first\n\n\n    transitionDuration = transitionDuration.split(',')[0];\n    transitionDelay = transitionDelay.split(',')[0];\n    return (Number.parseFloat(transitionDuration) + Number.parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER;\n  };\n\n  const triggerTransitionEnd = element => {\n    element.dispatchEvent(new Event(TRANSITION_END));\n  };\n\n  const isElement$1 = obj => {\n    if (!obj || typeof obj !== 'object') {\n      return false;\n    }\n\n    if (typeof obj.jquery !== 'undefined') {\n      obj = obj[0];\n    }\n\n    return typeof obj.nodeType !== 'undefined';\n  };\n\n  const getElement = obj => {\n    if (isElement$1(obj)) {\n      // it's a jQuery object or a node element\n      return obj.jquery ? obj[0] : obj;\n    }\n\n    if (typeof obj === 'string' && obj.length > 0) {\n      return SelectorEngine.findOne(obj);\n    }\n\n    return null;\n  };\n\n  const typeCheckConfig = (componentName, config, configTypes) => {\n    Object.keys(configTypes).forEach(property => {\n      const expectedTypes = configTypes[property];\n      const value = config[property];\n      const valueType = value && isElement$1(value) ? 'element' : toType(value);\n\n      if (!new RegExp(expectedTypes).test(valueType)) {\n        throw new TypeError(`${componentName.toUpperCase()}: Option \"${property}\" provided type \"${valueType}\" but expected type \"${expectedTypes}\".`);\n      }\n    });\n  };\n\n  const isVisible = element => {\n    if (!isElement$1(element) || element.getClientRects().length === 0) {\n      return false;\n    }\n\n    return getComputedStyle(element).getPropertyValue('visibility') === 'visible';\n  };\n\n  const isDisabled = element => {\n    if (!element || element.nodeType !== Node.ELEMENT_NODE) {\n      return true;\n    }\n\n    if (element.classList.contains('disabled')) {\n      return true;\n    }\n\n    if (typeof element.disabled !== 'undefined') {\n      return element.disabled;\n    }\n\n    return element.hasAttribute('disabled') && element.getAttribute('disabled') !== 'false';\n  };\n\n  const findShadowRoot = element => {\n    if (!document.documentElement.attachShadow) {\n      return null;\n    } // Can find the shadow root otherwise it'll return the document\n\n\n    if (typeof element.getRootNode === 'function') {\n      const root = element.getRootNode();\n      return root instanceof ShadowRoot ? root : null;\n    }\n\n    if (element instanceof ShadowRoot) {\n      return element;\n    } // when we don't find a shadow root\n\n\n    if (!element.parentNode) {\n      return null;\n    }\n\n    return findShadowRoot(element.parentNode);\n  };\n\n  const noop = () => {};\n\n  const reflow = element => element.offsetHeight;\n\n  const getjQuery = () => {\n    const {\n      jQuery\n    } = window;\n\n    if (jQuery && !document.body.hasAttribute('data-bs-no-jquery')) {\n      return jQuery;\n    }\n\n    return null;\n  };\n\n  const DOMContentLoadedCallbacks = [];\n\n  const onDOMContentLoaded = callback => {\n    if (document.readyState === 'loading') {\n      // add listener on the first call when the document is in loading state\n      if (!DOMContentLoadedCallbacks.length) {\n        document.addEventListener('DOMContentLoaded', () => {\n          DOMContentLoadedCallbacks.forEach(callback => callback());\n        });\n      }\n\n      DOMContentLoadedCallbacks.push(callback);\n    } else {\n      callback();\n    }\n  };\n\n  const isRTL = () => document.documentElement.dir === 'rtl';\n\n  const defineJQueryPlugin = plugin => {\n    onDOMContentLoaded(() => {\n      const $ = getjQuery();\n      /* istanbul ignore if */\n\n      if ($) {\n        const name = plugin.NAME;\n        const JQUERY_NO_CONFLICT = $.fn[name];\n        $.fn[name] = plugin.jQueryInterface;\n        $.fn[name].Constructor = plugin;\n\n        $.fn[name].noConflict = () => {\n          $.fn[name] = JQUERY_NO_CONFLICT;\n          return plugin.jQueryInterface;\n        };\n      }\n    });\n  };\n\n  const execute = callback => {\n    if (typeof callback === 'function') {\n      callback();\n    }\n  };\n\n  const executeAfterTransition = (callback, transitionElement, waitForTransition = true) => {\n    if (!waitForTransition) {\n      execute(callback);\n      return;\n    }\n\n    const durationPadding = 5;\n    const emulatedDuration = getTransitionDurationFromElement(transitionElement) + durationPadding;\n    let called = false;\n\n    const handler = ({\n      target\n    }) => {\n      if (target !== transitionElement) {\n        return;\n      }\n\n      called = true;\n      transitionElement.removeEventListener(TRANSITION_END, handler);\n      execute(callback);\n    };\n\n    transitionElement.addEventListener(TRANSITION_END, handler);\n    setTimeout(() => {\n      if (!called) {\n        triggerTransitionEnd(transitionElement);\n      }\n    }, emulatedDuration);\n  };\n  /**\n   * Return the previous/next element of a list.\n   *\n   * @param {array} list    The list of elements\n   * @param activeElement   The active element\n   * @param shouldGetNext   Choose to get next or previous element\n   * @param isCycleAllowed\n   * @return {Element|elem} The proper element\n   */\n\n\n  const getNextActiveElement = (list, activeElement, shouldGetNext, isCycleAllowed) => {\n    let index = list.indexOf(activeElement); // if the element does not exist in the list return an element depending on the direction and if cycle is allowed\n\n    if (index === -1) {\n      return list[!shouldGetNext && isCycleAllowed ? list.length - 1 : 0];\n    }\n\n    const listLength = list.length;\n    index += shouldGetNext ? 1 : -1;\n\n    if (isCycleAllowed) {\n      index = (index + listLength) % listLength;\n    }\n\n    return list[Math.max(0, Math.min(index, listLength - 1))];\n  };\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): dom/event-handler.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const namespaceRegex = /[^.]*(?=\\..*)\\.|.*/;\n  const stripNameRegex = /\\..*/;\n  const stripUidRegex = /::\\d+$/;\n  const eventRegistry = {}; // Events storage\n\n  let uidEvent = 1;\n  const customEvents = {\n    mouseenter: 'mouseover',\n    mouseleave: 'mouseout'\n  };\n  const customEventsRegex = /^(mouseenter|mouseleave)/i;\n  const nativeEvents = new Set(['click', 'dblclick', 'mouseup', 'mousedown', 'contextmenu', 'mousewheel', 'DOMMouseScroll', 'mouseover', 'mouseout', 'mousemove', 'selectstart', 'selectend', 'keydown', 'keypress', 'keyup', 'orientationchange', 'touchstart', 'touchmove', 'touchend', 'touchcancel', 'pointerdown', 'pointermove', 'pointerup', 'pointerleave', 'pointercancel', 'gesturestart', 'gesturechange', 'gestureend', 'focus', 'blur', 'change', 'reset', 'select', 'submit', 'focusin', 'focusout', 'load', 'unload', 'beforeunload', 'resize', 'move', 'DOMContentLoaded', 'readystatechange', 'error', 'abort', 'scroll']);\n  /**\n   * ------------------------------------------------------------------------\n   * Private methods\n   * ------------------------------------------------------------------------\n   */\n\n  function getUidEvent(element, uid) {\n    return uid && `${uid}::${uidEvent++}` || element.uidEvent || uidEvent++;\n  }\n\n  function getEvent(element) {\n    const uid = getUidEvent(element);\n    element.uidEvent = uid;\n    eventRegistry[uid] = eventRegistry[uid] || {};\n    return eventRegistry[uid];\n  }\n\n  function bootstrapHandler(element, fn) {\n    return function handler(event) {\n      event.delegateTarget = element;\n\n      if (handler.oneOff) {\n        EventHandler.off(element, event.type, fn);\n      }\n\n      return fn.apply(element, [event]);\n    };\n  }\n\n  function bootstrapDelegationHandler(element, selector, fn) {\n    return function handler(event) {\n      const domElements = element.querySelectorAll(selector);\n\n      for (let {\n        target\n      } = event; target && target !== this; target = target.parentNode) {\n        for (let i = domElements.length; i--;) {\n          if (domElements[i] === target) {\n            event.delegateTarget = target;\n\n            if (handler.oneOff) {\n              // eslint-disable-next-line unicorn/consistent-destructuring\n              EventHandler.off(element, event.type, selector, fn);\n            }\n\n            return fn.apply(target, [event]);\n          }\n        }\n      } // To please ESLint\n\n\n      return null;\n    };\n  }\n\n  function findHandler(events, handler, delegationSelector = null) {\n    const uidEventList = Object.keys(events);\n\n    for (let i = 0, len = uidEventList.length; i < len; i++) {\n      const event = events[uidEventList[i]];\n\n      if (event.originalHandler === handler && event.delegationSelector === delegationSelector) {\n        return event;\n      }\n    }\n\n    return null;\n  }\n\n  function normalizeParams(originalTypeEvent, handler, delegationFn) {\n    const delegation = typeof handler === 'string';\n    const originalHandler = delegation ? delegationFn : handler;\n    let typeEvent = getTypeEvent(originalTypeEvent);\n    const isNative = nativeEvents.has(typeEvent);\n\n    if (!isNative) {\n      typeEvent = originalTypeEvent;\n    }\n\n    return [delegation, originalHandler, typeEvent];\n  }\n\n  function addHandler(element, originalTypeEvent, handler, delegationFn, oneOff) {\n    if (typeof originalTypeEvent !== 'string' || !element) {\n      return;\n    }\n\n    if (!handler) {\n      handler = delegationFn;\n      delegationFn = null;\n    } // in case of mouseenter or mouseleave wrap the handler within a function that checks for its DOM position\n    // this prevents the handler from being dispatched the same way as mouseover or mouseout does\n\n\n    if (customEventsRegex.test(originalTypeEvent)) {\n      const wrapFn = fn => {\n        return function (event) {\n          if (!event.relatedTarget || event.relatedTarget !== event.delegateTarget && !event.delegateTarget.contains(event.relatedTarget)) {\n            return fn.call(this, event);\n          }\n        };\n      };\n\n      if (delegationFn) {\n        delegationFn = wrapFn(delegationFn);\n      } else {\n        handler = wrapFn(handler);\n      }\n    }\n\n    const [delegation, originalHandler, typeEvent] = normalizeParams(originalTypeEvent, handler, delegationFn);\n    const events = getEvent(element);\n    const handlers = events[typeEvent] || (events[typeEvent] = {});\n    const previousFn = findHandler(handlers, originalHandler, delegation ? handler : null);\n\n    if (previousFn) {\n      previousFn.oneOff = previousFn.oneOff && oneOff;\n      return;\n    }\n\n    const uid = getUidEvent(originalHandler, originalTypeEvent.replace(namespaceRegex, ''));\n    const fn = delegation ? bootstrapDelegationHandler(element, handler, delegationFn) : bootstrapHandler(element, handler);\n    fn.delegationSelector = delegation ? handler : null;\n    fn.originalHandler = originalHandler;\n    fn.oneOff = oneOff;\n    fn.uidEvent = uid;\n    handlers[uid] = fn;\n    element.addEventListener(typeEvent, fn, delegation);\n  }\n\n  function removeHandler(element, events, typeEvent, handler, delegationSelector) {\n    const fn = findHandler(events[typeEvent], handler, delegationSelector);\n\n    if (!fn) {\n      return;\n    }\n\n    element.removeEventListener(typeEvent, fn, Boolean(delegationSelector));\n    delete events[typeEvent][fn.uidEvent];\n  }\n\n  function removeNamespacedHandlers(element, events, typeEvent, namespace) {\n    const storeElementEvent = events[typeEvent] || {};\n    Object.keys(storeElementEvent).forEach(handlerKey => {\n      if (handlerKey.includes(namespace)) {\n        const event = storeElementEvent[handlerKey];\n        removeHandler(element, events, typeEvent, event.originalHandler, event.delegationSelector);\n      }\n    });\n  }\n\n  function getTypeEvent(event) {\n    // allow to get the native events from namespaced events ('click.bs.button' --> 'click')\n    event = event.replace(stripNameRegex, '');\n    return customEvents[event] || event;\n  }\n\n  const EventHandler = {\n    on(element, event, handler, delegationFn) {\n      addHandler(element, event, handler, delegationFn, false);\n    },\n\n    one(element, event, handler, delegationFn) {\n      addHandler(element, event, handler, delegationFn, true);\n    },\n\n    off(element, originalTypeEvent, handler, delegationFn) {\n      if (typeof originalTypeEvent !== 'string' || !element) {\n        return;\n      }\n\n      const [delegation, originalHandler, typeEvent] = normalizeParams(originalTypeEvent, handler, delegationFn);\n      const inNamespace = typeEvent !== originalTypeEvent;\n      const events = getEvent(element);\n      const isNamespace = originalTypeEvent.startsWith('.');\n\n      if (typeof originalHandler !== 'undefined') {\n        // Simplest case: handler is passed, remove that listener ONLY.\n        if (!events || !events[typeEvent]) {\n          return;\n        }\n\n        removeHandler(element, events, typeEvent, originalHandler, delegation ? handler : null);\n        return;\n      }\n\n      if (isNamespace) {\n        Object.keys(events).forEach(elementEvent => {\n          removeNamespacedHandlers(element, events, elementEvent, originalTypeEvent.slice(1));\n        });\n      }\n\n      const storeElementEvent = events[typeEvent] || {};\n      Object.keys(storeElementEvent).forEach(keyHandlers => {\n        const handlerKey = keyHandlers.replace(stripUidRegex, '');\n\n        if (!inNamespace || originalTypeEvent.includes(handlerKey)) {\n          const event = storeElementEvent[keyHandlers];\n          removeHandler(element, events, typeEvent, event.originalHandler, event.delegationSelector);\n        }\n      });\n    },\n\n    trigger(element, event, args) {\n      if (typeof event !== 'string' || !element) {\n        return null;\n      }\n\n      const $ = getjQuery();\n      const typeEvent = getTypeEvent(event);\n      const inNamespace = event !== typeEvent;\n      const isNative = nativeEvents.has(typeEvent);\n      let jQueryEvent;\n      let bubbles = true;\n      let nativeDispatch = true;\n      let defaultPrevented = false;\n      let evt = null;\n\n      if (inNamespace && $) {\n        jQueryEvent = $.Event(event, args);\n        $(element).trigger(jQueryEvent);\n        bubbles = !jQueryEvent.isPropagationStopped();\n        nativeDispatch = !jQueryEvent.isImmediatePropagationStopped();\n        defaultPrevented = jQueryEvent.isDefaultPrevented();\n      }\n\n      if (isNative) {\n        evt = document.createEvent('HTMLEvents');\n        evt.initEvent(typeEvent, bubbles, true);\n      } else {\n        evt = new CustomEvent(event, {\n          bubbles,\n          cancelable: true\n        });\n      } // merge custom information in our event\n\n\n      if (typeof args !== 'undefined') {\n        Object.keys(args).forEach(key => {\n          Object.defineProperty(evt, key, {\n            get() {\n              return args[key];\n            }\n\n          });\n        });\n      }\n\n      if (defaultPrevented) {\n        evt.preventDefault();\n      }\n\n      if (nativeDispatch) {\n        element.dispatchEvent(evt);\n      }\n\n      if (evt.defaultPrevented && typeof jQueryEvent !== 'undefined') {\n        jQueryEvent.preventDefault();\n      }\n\n      return evt;\n    }\n\n  };\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): dom/data.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n  const elementMap = new Map();\n  var Data = {\n    set(element, key, instance) {\n      if (!elementMap.has(element)) {\n        elementMap.set(element, new Map());\n      }\n\n      const instanceMap = elementMap.get(element); // make it clear we only want one instance per element\n      // can be removed later when multiple key/instances are fine to be used\n\n      if (!instanceMap.has(key) && instanceMap.size !== 0) {\n        // eslint-disable-next-line no-console\n        console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(instanceMap.keys())[0]}.`);\n        return;\n      }\n\n      instanceMap.set(key, instance);\n    },\n\n    get(element, key) {\n      if (elementMap.has(element)) {\n        return elementMap.get(element).get(key) || null;\n      }\n\n      return null;\n    },\n\n    remove(element, key) {\n      if (!elementMap.has(element)) {\n        return;\n      }\n\n      const instanceMap = elementMap.get(element);\n      instanceMap.delete(key); // free up element references if there are no instances left for an element\n\n      if (instanceMap.size === 0) {\n        elementMap.delete(element);\n      }\n    }\n\n  };\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): base-component.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const VERSION = '5.0.2';\n\n  class BaseComponent {\n    constructor(element) {\n      element = getElement(element);\n\n      if (!element) {\n        return;\n      }\n\n      this._element = element;\n      Data.set(this._element, this.constructor.DATA_KEY, this);\n    }\n\n    dispose() {\n      Data.remove(this._element, this.constructor.DATA_KEY);\n      EventHandler.off(this._element, this.constructor.EVENT_KEY);\n      Object.getOwnPropertyNames(this).forEach(propertyName => {\n        this[propertyName] = null;\n      });\n    }\n\n    _queueCallback(callback, element, isAnimated = true) {\n      executeAfterTransition(callback, element, isAnimated);\n    }\n    /** Static */\n\n\n    static getInstance(element) {\n      return Data.get(element, this.DATA_KEY);\n    }\n\n    static getOrCreateInstance(element, config = {}) {\n      return this.getInstance(element) || new this(element, typeof config === 'object' ? config : null);\n    }\n\n    static get VERSION() {\n      return VERSION;\n    }\n\n    static get NAME() {\n      throw new Error('You have to implement the static method \"NAME\", for each component!');\n    }\n\n    static get DATA_KEY() {\n      return `bs.${this.NAME}`;\n    }\n\n    static get EVENT_KEY() {\n      return `.${this.DATA_KEY}`;\n    }\n\n  }\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): alert.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$c = 'alert';\n  const DATA_KEY$b = 'bs.alert';\n  const EVENT_KEY$b = `.${DATA_KEY$b}`;\n  const DATA_API_KEY$8 = '.data-api';\n  const SELECTOR_DISMISS = '[data-bs-dismiss=\"alert\"]';\n  const EVENT_CLOSE = `close${EVENT_KEY$b}`;\n  const EVENT_CLOSED = `closed${EVENT_KEY$b}`;\n  const EVENT_CLICK_DATA_API$7 = `click${EVENT_KEY$b}${DATA_API_KEY$8}`;\n  const CLASS_NAME_ALERT = 'alert';\n  const CLASS_NAME_FADE$6 = 'fade';\n  const CLASS_NAME_SHOW$9 = 'show';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Alert extends BaseComponent {\n    // Getters\n    static get NAME() {\n      return NAME$c;\n    } // Public\n\n\n    close(element) {\n      const rootElement = element ? this._getRootElement(element) : this._element;\n\n      const customEvent = this._triggerCloseEvent(rootElement);\n\n      if (customEvent === null || customEvent.defaultPrevented) {\n        return;\n      }\n\n      this._removeElement(rootElement);\n    } // Private\n\n\n    _getRootElement(element) {\n      return getElementFromSelector(element) || element.closest(`.${CLASS_NAME_ALERT}`);\n    }\n\n    _triggerCloseEvent(element) {\n      return EventHandler.trigger(element, EVENT_CLOSE);\n    }\n\n    _removeElement(element) {\n      element.classList.remove(CLASS_NAME_SHOW$9);\n      const isAnimated = element.classList.contains(CLASS_NAME_FADE$6);\n\n      this._queueCallback(() => this._destroyElement(element), element, isAnimated);\n    }\n\n    _destroyElement(element) {\n      element.remove();\n      EventHandler.trigger(element, EVENT_CLOSED);\n    } // Static\n\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = Alert.getOrCreateInstance(this);\n\n        if (config === 'close') {\n          data[config](this);\n        }\n      });\n    }\n\n    static handleDismiss(alertInstance) {\n      return function (event) {\n        if (event) {\n          event.preventDefault();\n        }\n\n        alertInstance.close(this);\n      };\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(document, EVENT_CLICK_DATA_API$7, SELECTOR_DISMISS, Alert.handleDismiss(new Alert()));\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Alert to jQuery only if jQuery is present\n   */\n\n  defineJQueryPlugin(Alert);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): button.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$b = 'button';\n  const DATA_KEY$a = 'bs.button';\n  const EVENT_KEY$a = `.${DATA_KEY$a}`;\n  const DATA_API_KEY$7 = '.data-api';\n  const CLASS_NAME_ACTIVE$3 = 'active';\n  const SELECTOR_DATA_TOGGLE$5 = '[data-bs-toggle=\"button\"]';\n  const EVENT_CLICK_DATA_API$6 = `click${EVENT_KEY$a}${DATA_API_KEY$7}`;\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Button extends BaseComponent {\n    // Getters\n    static get NAME() {\n      return NAME$b;\n    } // Public\n\n\n    toggle() {\n      // Toggle class and sync the `aria-pressed` attribute with the return value of the `.toggle()` method\n      this._element.setAttribute('aria-pressed', this._element.classList.toggle(CLASS_NAME_ACTIVE$3));\n    } // Static\n\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = Button.getOrCreateInstance(this);\n\n        if (config === 'toggle') {\n          data[config]();\n        }\n      });\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(document, EVENT_CLICK_DATA_API$6, SELECTOR_DATA_TOGGLE$5, event => {\n    event.preventDefault();\n    const button = event.target.closest(SELECTOR_DATA_TOGGLE$5);\n    const data = Button.getOrCreateInstance(button);\n    data.toggle();\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Button to jQuery only if jQuery is present\n   */\n\n  defineJQueryPlugin(Button);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): dom/manipulator.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  function normalizeData(val) {\n    if (val === 'true') {\n      return true;\n    }\n\n    if (val === 'false') {\n      return false;\n    }\n\n    if (val === Number(val).toString()) {\n      return Number(val);\n    }\n\n    if (val === '' || val === 'null') {\n      return null;\n    }\n\n    return val;\n  }\n\n  function normalizeDataKey(key) {\n    return key.replace(/[A-Z]/g, chr => `-${chr.toLowerCase()}`);\n  }\n\n  const Manipulator = {\n    setDataAttribute(element, key, value) {\n      element.setAttribute(`data-bs-${normalizeDataKey(key)}`, value);\n    },\n\n    removeDataAttribute(element, key) {\n      element.removeAttribute(`data-bs-${normalizeDataKey(key)}`);\n    },\n\n    getDataAttributes(element) {\n      if (!element) {\n        return {};\n      }\n\n      const attributes = {};\n      Object.keys(element.dataset).filter(key => key.startsWith('bs')).forEach(key => {\n        let pureKey = key.replace(/^bs/, '');\n        pureKey = pureKey.charAt(0).toLowerCase() + pureKey.slice(1, pureKey.length);\n        attributes[pureKey] = normalizeData(element.dataset[key]);\n      });\n      return attributes;\n    },\n\n    getDataAttribute(element, key) {\n      return normalizeData(element.getAttribute(`data-bs-${normalizeDataKey(key)}`));\n    },\n\n    offset(element) {\n      const rect = element.getBoundingClientRect();\n      return {\n        top: rect.top + document.body.scrollTop,\n        left: rect.left + document.body.scrollLeft\n      };\n    },\n\n    position(element) {\n      return {\n        top: element.offsetTop,\n        left: element.offsetLeft\n      };\n    }\n\n  };\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): carousel.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$a = 'carousel';\n  const DATA_KEY$9 = 'bs.carousel';\n  const EVENT_KEY$9 = `.${DATA_KEY$9}`;\n  const DATA_API_KEY$6 = '.data-api';\n  const ARROW_LEFT_KEY = 'ArrowLeft';\n  const ARROW_RIGHT_KEY = 'ArrowRight';\n  const TOUCHEVENT_COMPAT_WAIT = 500; // Time for mouse compat events to fire after touch\n\n  const SWIPE_THRESHOLD = 40;\n  const Default$9 = {\n    interval: 5000,\n    keyboard: true,\n    slide: false,\n    pause: 'hover',\n    wrap: true,\n    touch: true\n  };\n  const DefaultType$9 = {\n    interval: '(number|boolean)',\n    keyboard: 'boolean',\n    slide: '(boolean|string)',\n    pause: '(string|boolean)',\n    wrap: 'boolean',\n    touch: 'boolean'\n  };\n  const ORDER_NEXT = 'next';\n  const ORDER_PREV = 'prev';\n  const DIRECTION_LEFT = 'left';\n  const DIRECTION_RIGHT = 'right';\n  const KEY_TO_DIRECTION = {\n    [ARROW_LEFT_KEY]: DIRECTION_RIGHT,\n    [ARROW_RIGHT_KEY]: DIRECTION_LEFT\n  };\n  const EVENT_SLIDE = `slide${EVENT_KEY$9}`;\n  const EVENT_SLID = `slid${EVENT_KEY$9}`;\n  const EVENT_KEYDOWN = `keydown${EVENT_KEY$9}`;\n  const EVENT_MOUSEENTER = `mouseenter${EVENT_KEY$9}`;\n  const EVENT_MOUSELEAVE = `mouseleave${EVENT_KEY$9}`;\n  const EVENT_TOUCHSTART = `touchstart${EVENT_KEY$9}`;\n  const EVENT_TOUCHMOVE = `touchmove${EVENT_KEY$9}`;\n  const EVENT_TOUCHEND = `touchend${EVENT_KEY$9}`;\n  const EVENT_POINTERDOWN = `pointerdown${EVENT_KEY$9}`;\n  const EVENT_POINTERUP = `pointerup${EVENT_KEY$9}`;\n  const EVENT_DRAG_START = `dragstart${EVENT_KEY$9}`;\n  const EVENT_LOAD_DATA_API$2 = `load${EVENT_KEY$9}${DATA_API_KEY$6}`;\n  const EVENT_CLICK_DATA_API$5 = `click${EVENT_KEY$9}${DATA_API_KEY$6}`;\n  const CLASS_NAME_CAROUSEL = 'carousel';\n  const CLASS_NAME_ACTIVE$2 = 'active';\n  const CLASS_NAME_SLIDE = 'slide';\n  const CLASS_NAME_END = 'carousel-item-end';\n  const CLASS_NAME_START = 'carousel-item-start';\n  const CLASS_NAME_NEXT = 'carousel-item-next';\n  const CLASS_NAME_PREV = 'carousel-item-prev';\n  const CLASS_NAME_POINTER_EVENT = 'pointer-event';\n  const SELECTOR_ACTIVE$1 = '.active';\n  const SELECTOR_ACTIVE_ITEM = '.active.carousel-item';\n  const SELECTOR_ITEM = '.carousel-item';\n  const SELECTOR_ITEM_IMG = '.carousel-item img';\n  const SELECTOR_NEXT_PREV = '.carousel-item-next, .carousel-item-prev';\n  const SELECTOR_INDICATORS = '.carousel-indicators';\n  const SELECTOR_INDICATOR = '[data-bs-target]';\n  const SELECTOR_DATA_SLIDE = '[data-bs-slide], [data-bs-slide-to]';\n  const SELECTOR_DATA_RIDE = '[data-bs-ride=\"carousel\"]';\n  const POINTER_TYPE_TOUCH = 'touch';\n  const POINTER_TYPE_PEN = 'pen';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Carousel extends BaseComponent {\n    constructor(element, config) {\n      super(element);\n      this._items = null;\n      this._interval = null;\n      this._activeElement = null;\n      this._isPaused = false;\n      this._isSliding = false;\n      this.touchTimeout = null;\n      this.touchStartX = 0;\n      this.touchDeltaX = 0;\n      this._config = this._getConfig(config);\n      this._indicatorsElement = SelectorEngine.findOne(SELECTOR_INDICATORS, this._element);\n      this._touchSupported = 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0;\n      this._pointerEvent = Boolean(window.PointerEvent);\n\n      this._addEventListeners();\n    } // Getters\n\n\n    static get Default() {\n      return Default$9;\n    }\n\n    static get NAME() {\n      return NAME$a;\n    } // Public\n\n\n    next() {\n      this._slide(ORDER_NEXT);\n    }\n\n    nextWhenVisible() {\n      // Don't call next when the page isn't visible\n      // or the carousel or its parent isn't visible\n      if (!document.hidden && isVisible(this._element)) {\n        this.next();\n      }\n    }\n\n    prev() {\n      this._slide(ORDER_PREV);\n    }\n\n    pause(event) {\n      if (!event) {\n        this._isPaused = true;\n      }\n\n      if (SelectorEngine.findOne(SELECTOR_NEXT_PREV, this._element)) {\n        triggerTransitionEnd(this._element);\n        this.cycle(true);\n      }\n\n      clearInterval(this._interval);\n      this._interval = null;\n    }\n\n    cycle(event) {\n      if (!event) {\n        this._isPaused = false;\n      }\n\n      if (this._interval) {\n        clearInterval(this._interval);\n        this._interval = null;\n      }\n\n      if (this._config && this._config.interval && !this._isPaused) {\n        this._updateInterval();\n\n        this._interval = setInterval((document.visibilityState ? this.nextWhenVisible : this.next).bind(this), this._config.interval);\n      }\n    }\n\n    to(index) {\n      this._activeElement = SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element);\n\n      const activeIndex = this._getItemIndex(this._activeElement);\n\n      if (index > this._items.length - 1 || index < 0) {\n        return;\n      }\n\n      if (this._isSliding) {\n        EventHandler.one(this._element, EVENT_SLID, () => this.to(index));\n        return;\n      }\n\n      if (activeIndex === index) {\n        this.pause();\n        this.cycle();\n        return;\n      }\n\n      const order = index > activeIndex ? ORDER_NEXT : ORDER_PREV;\n\n      this._slide(order, this._items[index]);\n    } // Private\n\n\n    _getConfig(config) {\n      config = { ...Default$9,\n        ...Manipulator.getDataAttributes(this._element),\n        ...(typeof config === 'object' ? config : {})\n      };\n      typeCheckConfig(NAME$a, config, DefaultType$9);\n      return config;\n    }\n\n    _handleSwipe() {\n      const absDeltax = Math.abs(this.touchDeltaX);\n\n      if (absDeltax <= SWIPE_THRESHOLD) {\n        return;\n      }\n\n      const direction = absDeltax / this.touchDeltaX;\n      this.touchDeltaX = 0;\n\n      if (!direction) {\n        return;\n      }\n\n      this._slide(direction > 0 ? DIRECTION_RIGHT : DIRECTION_LEFT);\n    }\n\n    _addEventListeners() {\n      if (this._config.keyboard) {\n        EventHandler.on(this._element, EVENT_KEYDOWN, event => this._keydown(event));\n      }\n\n      if (this._config.pause === 'hover') {\n        EventHandler.on(this._element, EVENT_MOUSEENTER, event => this.pause(event));\n        EventHandler.on(this._element, EVENT_MOUSELEAVE, event => this.cycle(event));\n      }\n\n      if (this._config.touch && this._touchSupported) {\n        this._addTouchEventListeners();\n      }\n    }\n\n    _addTouchEventListeners() {\n      const start = event => {\n        if (this._pointerEvent && (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH)) {\n          this.touchStartX = event.clientX;\n        } else if (!this._pointerEvent) {\n          this.touchStartX = event.touches[0].clientX;\n        }\n      };\n\n      const move = event => {\n        // ensure swiping with one touch and not pinching\n        this.touchDeltaX = event.touches && event.touches.length > 1 ? 0 : event.touches[0].clientX - this.touchStartX;\n      };\n\n      const end = event => {\n        if (this._pointerEvent && (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH)) {\n          this.touchDeltaX = event.clientX - this.touchStartX;\n        }\n\n        this._handleSwipe();\n\n        if (this._config.pause === 'hover') {\n          // If it's a touch-enabled device, mouseenter/leave are fired as\n          // part of the mouse compatibility events on first tap - the carousel\n          // would stop cycling until user tapped out of it;\n          // here, we listen for touchend, explicitly pause the carousel\n          // (as if it's the second time we tap on it, mouseenter compat event\n          // is NOT fired) and after a timeout (to allow for mouse compatibility\n          // events to fire) we explicitly restart cycling\n          this.pause();\n\n          if (this.touchTimeout) {\n            clearTimeout(this.touchTimeout);\n          }\n\n          this.touchTimeout = setTimeout(event => this.cycle(event), TOUCHEVENT_COMPAT_WAIT + this._config.interval);\n        }\n      };\n\n      SelectorEngine.find(SELECTOR_ITEM_IMG, this._element).forEach(itemImg => {\n        EventHandler.on(itemImg, EVENT_DRAG_START, e => e.preventDefault());\n      });\n\n      if (this._pointerEvent) {\n        EventHandler.on(this._element, EVENT_POINTERDOWN, event => start(event));\n        EventHandler.on(this._element, EVENT_POINTERUP, event => end(event));\n\n        this._element.classList.add(CLASS_NAME_POINTER_EVENT);\n      } else {\n        EventHandler.on(this._element, EVENT_TOUCHSTART, event => start(event));\n        EventHandler.on(this._element, EVENT_TOUCHMOVE, event => move(event));\n        EventHandler.on(this._element, EVENT_TOUCHEND, event => end(event));\n      }\n    }\n\n    _keydown(event) {\n      if (/input|textarea/i.test(event.target.tagName)) {\n        return;\n      }\n\n      const direction = KEY_TO_DIRECTION[event.key];\n\n      if (direction) {\n        event.preventDefault();\n\n        this._slide(direction);\n      }\n    }\n\n    _getItemIndex(element) {\n      this._items = element && element.parentNode ? SelectorEngine.find(SELECTOR_ITEM, element.parentNode) : [];\n      return this._items.indexOf(element);\n    }\n\n    _getItemByOrder(order, activeElement) {\n      const isNext = order === ORDER_NEXT;\n      return getNextActiveElement(this._items, activeElement, isNext, this._config.wrap);\n    }\n\n    _triggerSlideEvent(relatedTarget, eventDirectionName) {\n      const targetIndex = this._getItemIndex(relatedTarget);\n\n      const fromIndex = this._getItemIndex(SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element));\n\n      return EventHandler.trigger(this._element, EVENT_SLIDE, {\n        relatedTarget,\n        direction: eventDirectionName,\n        from: fromIndex,\n        to: targetIndex\n      });\n    }\n\n    _setActiveIndicatorElement(element) {\n      if (this._indicatorsElement) {\n        const activeIndicator = SelectorEngine.findOne(SELECTOR_ACTIVE$1, this._indicatorsElement);\n        activeIndicator.classList.remove(CLASS_NAME_ACTIVE$2);\n        activeIndicator.removeAttribute('aria-current');\n        const indicators = SelectorEngine.find(SELECTOR_INDICATOR, this._indicatorsElement);\n\n        for (let i = 0; i < indicators.length; i++) {\n          if (Number.parseInt(indicators[i].getAttribute('data-bs-slide-to'), 10) === this._getItemIndex(element)) {\n            indicators[i].classList.add(CLASS_NAME_ACTIVE$2);\n            indicators[i].setAttribute('aria-current', 'true');\n            break;\n          }\n        }\n      }\n    }\n\n    _updateInterval() {\n      const element = this._activeElement || SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element);\n\n      if (!element) {\n        return;\n      }\n\n      const elementInterval = Number.parseInt(element.getAttribute('data-bs-interval'), 10);\n\n      if (elementInterval) {\n        this._config.defaultInterval = this._config.defaultInterval || this._config.interval;\n        this._config.interval = elementInterval;\n      } else {\n        this._config.interval = this._config.defaultInterval || this._config.interval;\n      }\n    }\n\n    _slide(directionOrOrder, element) {\n      const order = this._directionToOrder(directionOrOrder);\n\n      const activeElement = SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element);\n\n      const activeElementIndex = this._getItemIndex(activeElement);\n\n      const nextElement = element || this._getItemByOrder(order, activeElement);\n\n      const nextElementIndex = this._getItemIndex(nextElement);\n\n      const isCycling = Boolean(this._interval);\n      const isNext = order === ORDER_NEXT;\n      const directionalClassName = isNext ? CLASS_NAME_START : CLASS_NAME_END;\n      const orderClassName = isNext ? CLASS_NAME_NEXT : CLASS_NAME_PREV;\n\n      const eventDirectionName = this._orderToDirection(order);\n\n      if (nextElement && nextElement.classList.contains(CLASS_NAME_ACTIVE$2)) {\n        this._isSliding = false;\n        return;\n      }\n\n      if (this._isSliding) {\n        return;\n      }\n\n      const slideEvent = this._triggerSlideEvent(nextElement, eventDirectionName);\n\n      if (slideEvent.defaultPrevented) {\n        return;\n      }\n\n      if (!activeElement || !nextElement) {\n        // Some weirdness is happening, so we bail\n        return;\n      }\n\n      this._isSliding = true;\n\n      if (isCycling) {\n        this.pause();\n      }\n\n      this._setActiveIndicatorElement(nextElement);\n\n      this._activeElement = nextElement;\n\n      const triggerSlidEvent = () => {\n        EventHandler.trigger(this._element, EVENT_SLID, {\n          relatedTarget: nextElement,\n          direction: eventDirectionName,\n          from: activeElementIndex,\n          to: nextElementIndex\n        });\n      };\n\n      if (this._element.classList.contains(CLASS_NAME_SLIDE)) {\n        nextElement.classList.add(orderClassName);\n        reflow(nextElement);\n        activeElement.classList.add(directionalClassName);\n        nextElement.classList.add(directionalClassName);\n\n        const completeCallBack = () => {\n          nextElement.classList.remove(directionalClassName, orderClassName);\n          nextElement.classList.add(CLASS_NAME_ACTIVE$2);\n          activeElement.classList.remove(CLASS_NAME_ACTIVE$2, orderClassName, directionalClassName);\n          this._isSliding = false;\n          setTimeout(triggerSlidEvent, 0);\n        };\n\n        this._queueCallback(completeCallBack, activeElement, true);\n      } else {\n        activeElement.classList.remove(CLASS_NAME_ACTIVE$2);\n        nextElement.classList.add(CLASS_NAME_ACTIVE$2);\n        this._isSliding = false;\n        triggerSlidEvent();\n      }\n\n      if (isCycling) {\n        this.cycle();\n      }\n    }\n\n    _directionToOrder(direction) {\n      if (![DIRECTION_RIGHT, DIRECTION_LEFT].includes(direction)) {\n        return direction;\n      }\n\n      if (isRTL()) {\n        return direction === DIRECTION_LEFT ? ORDER_PREV : ORDER_NEXT;\n      }\n\n      return direction === DIRECTION_LEFT ? ORDER_NEXT : ORDER_PREV;\n    }\n\n    _orderToDirection(order) {\n      if (![ORDER_NEXT, ORDER_PREV].includes(order)) {\n        return order;\n      }\n\n      if (isRTL()) {\n        return order === ORDER_PREV ? DIRECTION_LEFT : DIRECTION_RIGHT;\n      }\n\n      return order === ORDER_PREV ? DIRECTION_RIGHT : DIRECTION_LEFT;\n    } // Static\n\n\n    static carouselInterface(element, config) {\n      const data = Carousel.getOrCreateInstance(element, config);\n      let {\n        _config\n      } = data;\n\n      if (typeof config === 'object') {\n        _config = { ..._config,\n          ...config\n        };\n      }\n\n      const action = typeof config === 'string' ? config : _config.slide;\n\n      if (typeof config === 'number') {\n        data.to(config);\n      } else if (typeof action === 'string') {\n        if (typeof data[action] === 'undefined') {\n          throw new TypeError(`No method named \"${action}\"`);\n        }\n\n        data[action]();\n      } else if (_config.interval && _config.ride) {\n        data.pause();\n        data.cycle();\n      }\n    }\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        Carousel.carouselInterface(this, config);\n      });\n    }\n\n    static dataApiClickHandler(event) {\n      const target = getElementFromSelector(this);\n\n      if (!target || !target.classList.contains(CLASS_NAME_CAROUSEL)) {\n        return;\n      }\n\n      const config = { ...Manipulator.getDataAttributes(target),\n        ...Manipulator.getDataAttributes(this)\n      };\n      const slideIndex = this.getAttribute('data-bs-slide-to');\n\n      if (slideIndex) {\n        config.interval = false;\n      }\n\n      Carousel.carouselInterface(target, config);\n\n      if (slideIndex) {\n        Carousel.getInstance(target).to(slideIndex);\n      }\n\n      event.preventDefault();\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(document, EVENT_CLICK_DATA_API$5, SELECTOR_DATA_SLIDE, Carousel.dataApiClickHandler);\n  EventHandler.on(window, EVENT_LOAD_DATA_API$2, () => {\n    const carousels = SelectorEngine.find(SELECTOR_DATA_RIDE);\n\n    for (let i = 0, len = carousels.length; i < len; i++) {\n      Carousel.carouselInterface(carousels[i], Carousel.getInstance(carousels[i]));\n    }\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Carousel to jQuery only if jQuery is present\n   */\n\n  defineJQueryPlugin(Carousel);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): collapse.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$9 = 'collapse';\n  const DATA_KEY$8 = 'bs.collapse';\n  const EVENT_KEY$8 = `.${DATA_KEY$8}`;\n  const DATA_API_KEY$5 = '.data-api';\n  const Default$8 = {\n    toggle: true,\n    parent: ''\n  };\n  const DefaultType$8 = {\n    toggle: 'boolean',\n    parent: '(string|element)'\n  };\n  const EVENT_SHOW$5 = `show${EVENT_KEY$8}`;\n  const EVENT_SHOWN$5 = `shown${EVENT_KEY$8}`;\n  const EVENT_HIDE$5 = `hide${EVENT_KEY$8}`;\n  const EVENT_HIDDEN$5 = `hidden${EVENT_KEY$8}`;\n  const EVENT_CLICK_DATA_API$4 = `click${EVENT_KEY$8}${DATA_API_KEY$5}`;\n  const CLASS_NAME_SHOW$8 = 'show';\n  const CLASS_NAME_COLLAPSE = 'collapse';\n  const CLASS_NAME_COLLAPSING = 'collapsing';\n  const CLASS_NAME_COLLAPSED = 'collapsed';\n  const WIDTH = 'width';\n  const HEIGHT = 'height';\n  const SELECTOR_ACTIVES = '.show, .collapsing';\n  const SELECTOR_DATA_TOGGLE$4 = '[data-bs-toggle=\"collapse\"]';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Collapse extends BaseComponent {\n    constructor(element, config) {\n      super(element);\n      this._isTransitioning = false;\n      this._config = this._getConfig(config);\n      this._triggerArray = SelectorEngine.find(`${SELECTOR_DATA_TOGGLE$4}[href=\"#${this._element.id}\"],` + `${SELECTOR_DATA_TOGGLE$4}[data-bs-target=\"#${this._element.id}\"]`);\n      const toggleList = SelectorEngine.find(SELECTOR_DATA_TOGGLE$4);\n\n      for (let i = 0, len = toggleList.length; i < len; i++) {\n        const elem = toggleList[i];\n        const selector = getSelectorFromElement(elem);\n        const filterElement = SelectorEngine.find(selector).filter(foundElem => foundElem === this._element);\n\n        if (selector !== null && filterElement.length) {\n          this._selector = selector;\n\n          this._triggerArray.push(elem);\n        }\n      }\n\n      this._parent = this._config.parent ? this._getParent() : null;\n\n      if (!this._config.parent) {\n        this._addAriaAndCollapsedClass(this._element, this._triggerArray);\n      }\n\n      if (this._config.toggle) {\n        this.toggle();\n      }\n    } // Getters\n\n\n    static get Default() {\n      return Default$8;\n    }\n\n    static get NAME() {\n      return NAME$9;\n    } // Public\n\n\n    toggle() {\n      if (this._element.classList.contains(CLASS_NAME_SHOW$8)) {\n        this.hide();\n      } else {\n        this.show();\n      }\n    }\n\n    show() {\n      if (this._isTransitioning || this._element.classList.contains(CLASS_NAME_SHOW$8)) {\n        return;\n      }\n\n      let actives;\n      let activesData;\n\n      if (this._parent) {\n        actives = SelectorEngine.find(SELECTOR_ACTIVES, this._parent).filter(elem => {\n          if (typeof this._config.parent === 'string') {\n            return elem.getAttribute('data-bs-parent') === this._config.parent;\n          }\n\n          return elem.classList.contains(CLASS_NAME_COLLAPSE);\n        });\n\n        if (actives.length === 0) {\n          actives = null;\n        }\n      }\n\n      const container = SelectorEngine.findOne(this._selector);\n\n      if (actives) {\n        const tempActiveData = actives.find(elem => container !== elem);\n        activesData = tempActiveData ? Collapse.getInstance(tempActiveData) : null;\n\n        if (activesData && activesData._isTransitioning) {\n          return;\n        }\n      }\n\n      const startEvent = EventHandler.trigger(this._element, EVENT_SHOW$5);\n\n      if (startEvent.defaultPrevented) {\n        return;\n      }\n\n      if (actives) {\n        actives.forEach(elemActive => {\n          if (container !== elemActive) {\n            Collapse.collapseInterface(elemActive, 'hide');\n          }\n\n          if (!activesData) {\n            Data.set(elemActive, DATA_KEY$8, null);\n          }\n        });\n      }\n\n      const dimension = this._getDimension();\n\n      this._element.classList.remove(CLASS_NAME_COLLAPSE);\n\n      this._element.classList.add(CLASS_NAME_COLLAPSING);\n\n      this._element.style[dimension] = 0;\n\n      if (this._triggerArray.length) {\n        this._triggerArray.forEach(element => {\n          element.classList.remove(CLASS_NAME_COLLAPSED);\n          element.setAttribute('aria-expanded', true);\n        });\n      }\n\n      this.setTransitioning(true);\n\n      const complete = () => {\n        this._element.classList.remove(CLASS_NAME_COLLAPSING);\n\n        this._element.classList.add(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$8);\n\n        this._element.style[dimension] = '';\n        this.setTransitioning(false);\n        EventHandler.trigger(this._element, EVENT_SHOWN$5);\n      };\n\n      const capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1);\n      const scrollSize = `scroll${capitalizedDimension}`;\n\n      this._queueCallback(complete, this._element, true);\n\n      this._element.style[dimension] = `${this._element[scrollSize]}px`;\n    }\n\n    hide() {\n      if (this._isTransitioning || !this._element.classList.contains(CLASS_NAME_SHOW$8)) {\n        return;\n      }\n\n      const startEvent = EventHandler.trigger(this._element, EVENT_HIDE$5);\n\n      if (startEvent.defaultPrevented) {\n        return;\n      }\n\n      const dimension = this._getDimension();\n\n      this._element.style[dimension] = `${this._element.getBoundingClientRect()[dimension]}px`;\n      reflow(this._element);\n\n      this._element.classList.add(CLASS_NAME_COLLAPSING);\n\n      this._element.classList.remove(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$8);\n\n      const triggerArrayLength = this._triggerArray.length;\n\n      if (triggerArrayLength > 0) {\n        for (let i = 0; i < triggerArrayLength; i++) {\n          const trigger = this._triggerArray[i];\n          const elem = getElementFromSelector(trigger);\n\n          if (elem && !elem.classList.contains(CLASS_NAME_SHOW$8)) {\n            trigger.classList.add(CLASS_NAME_COLLAPSED);\n            trigger.setAttribute('aria-expanded', false);\n          }\n        }\n      }\n\n      this.setTransitioning(true);\n\n      const complete = () => {\n        this.setTransitioning(false);\n\n        this._element.classList.remove(CLASS_NAME_COLLAPSING);\n\n        this._element.classList.add(CLASS_NAME_COLLAPSE);\n\n        EventHandler.trigger(this._element, EVENT_HIDDEN$5);\n      };\n\n      this._element.style[dimension] = '';\n\n      this._queueCallback(complete, this._element, true);\n    }\n\n    setTransitioning(isTransitioning) {\n      this._isTransitioning = isTransitioning;\n    } // Private\n\n\n    _getConfig(config) {\n      config = { ...Default$8,\n        ...config\n      };\n      config.toggle = Boolean(config.toggle); // Coerce string values\n\n      typeCheckConfig(NAME$9, config, DefaultType$8);\n      return config;\n    }\n\n    _getDimension() {\n      return this._element.classList.contains(WIDTH) ? WIDTH : HEIGHT;\n    }\n\n    _getParent() {\n      let {\n        parent\n      } = this._config;\n      parent = getElement(parent);\n      const selector = `${SELECTOR_DATA_TOGGLE$4}[data-bs-parent=\"${parent}\"]`;\n      SelectorEngine.find(selector, parent).forEach(element => {\n        const selected = getElementFromSelector(element);\n\n        this._addAriaAndCollapsedClass(selected, [element]);\n      });\n      return parent;\n    }\n\n    _addAriaAndCollapsedClass(element, triggerArray) {\n      if (!element || !triggerArray.length) {\n        return;\n      }\n\n      const isOpen = element.classList.contains(CLASS_NAME_SHOW$8);\n      triggerArray.forEach(elem => {\n        if (isOpen) {\n          elem.classList.remove(CLASS_NAME_COLLAPSED);\n        } else {\n          elem.classList.add(CLASS_NAME_COLLAPSED);\n        }\n\n        elem.setAttribute('aria-expanded', isOpen);\n      });\n    } // Static\n\n\n    static collapseInterface(element, config) {\n      let data = Collapse.getInstance(element);\n      const _config = { ...Default$8,\n        ...Manipulator.getDataAttributes(element),\n        ...(typeof config === 'object' && config ? config : {})\n      };\n\n      if (!data && _config.toggle && typeof config === 'string' && /show|hide/.test(config)) {\n        _config.toggle = false;\n      }\n\n      if (!data) {\n        data = new Collapse(element, _config);\n      }\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config]();\n      }\n    }\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        Collapse.collapseInterface(this, config);\n      });\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(document, EVENT_CLICK_DATA_API$4, SELECTOR_DATA_TOGGLE$4, function (event) {\n    // preventDefault only for <a> elements (which change the URL) not inside the collapsible element\n    if (event.target.tagName === 'A' || event.delegateTarget && event.delegateTarget.tagName === 'A') {\n      event.preventDefault();\n    }\n\n    const triggerData = Manipulator.getDataAttributes(this);\n    const selector = getSelectorFromElement(this);\n    const selectorElements = SelectorEngine.find(selector);\n    selectorElements.forEach(element => {\n      const data = Collapse.getInstance(element);\n      let config;\n\n      if (data) {\n        // update parent attribute\n        if (data._parent === null && typeof triggerData.parent === 'string') {\n          data._config.parent = triggerData.parent;\n          data._parent = data._getParent();\n        }\n\n        config = 'toggle';\n      } else {\n        config = triggerData;\n      }\n\n      Collapse.collapseInterface(element, config);\n    });\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Collapse to jQuery only if jQuery is present\n   */\n\n  defineJQueryPlugin(Collapse);\n\n  var top = 'top';\n  var bottom = 'bottom';\n  var right = 'right';\n  var left = 'left';\n  var auto = 'auto';\n  var basePlacements = [top, bottom, right, left];\n  var start = 'start';\n  var end = 'end';\n  var clippingParents = 'clippingParents';\n  var viewport = 'viewport';\n  var popper = 'popper';\n  var reference = 'reference';\n  var variationPlacements = /*#__PURE__*/basePlacements.reduce(function (acc, placement) {\n    return acc.concat([placement + \"-\" + start, placement + \"-\" + end]);\n  }, []);\n  var placements = /*#__PURE__*/[].concat(basePlacements, [auto]).reduce(function (acc, placement) {\n    return acc.concat([placement, placement + \"-\" + start, placement + \"-\" + end]);\n  }, []); // modifiers that need to read the DOM\n\n  var beforeRead = 'beforeRead';\n  var read = 'read';\n  var afterRead = 'afterRead'; // pure-logic modifiers\n\n  var beforeMain = 'beforeMain';\n  var main = 'main';\n  var afterMain = 'afterMain'; // modifier with the purpose to write to the DOM (or write into a framework state)\n\n  var beforeWrite = 'beforeWrite';\n  var write = 'write';\n  var afterWrite = 'afterWrite';\n  var modifierPhases = [beforeRead, read, afterRead, beforeMain, main, afterMain, beforeWrite, write, afterWrite];\n\n  function getNodeName(element) {\n    return element ? (element.nodeName || '').toLowerCase() : null;\n  }\n\n  function getWindow(node) {\n    if (node == null) {\n      return window;\n    }\n\n    if (node.toString() !== '[object Window]') {\n      var ownerDocument = node.ownerDocument;\n      return ownerDocument ? ownerDocument.defaultView || window : window;\n    }\n\n    return node;\n  }\n\n  function isElement(node) {\n    var OwnElement = getWindow(node).Element;\n    return node instanceof OwnElement || node instanceof Element;\n  }\n\n  function isHTMLElement(node) {\n    var OwnElement = getWindow(node).HTMLElement;\n    return node instanceof OwnElement || node instanceof HTMLElement;\n  }\n\n  function isShadowRoot(node) {\n    // IE 11 has no ShadowRoot\n    if (typeof ShadowRoot === 'undefined') {\n      return false;\n    }\n\n    var OwnElement = getWindow(node).ShadowRoot;\n    return node instanceof OwnElement || node instanceof ShadowRoot;\n  }\n\n  // and applies them to the HTMLElements such as popper and arrow\n\n  function applyStyles(_ref) {\n    var state = _ref.state;\n    Object.keys(state.elements).forEach(function (name) {\n      var style = state.styles[name] || {};\n      var attributes = state.attributes[name] || {};\n      var element = state.elements[name]; // arrow is optional + virtual elements\n\n      if (!isHTMLElement(element) || !getNodeName(element)) {\n        return;\n      } // Flow doesn't support to extend this property, but it's the most\n      // effective way to apply styles to an HTMLElement\n      // $FlowFixMe[cannot-write]\n\n\n      Object.assign(element.style, style);\n      Object.keys(attributes).forEach(function (name) {\n        var value = attributes[name];\n\n        if (value === false) {\n          element.removeAttribute(name);\n        } else {\n          element.setAttribute(name, value === true ? '' : value);\n        }\n      });\n    });\n  }\n\n  function effect$2(_ref2) {\n    var state = _ref2.state;\n    var initialStyles = {\n      popper: {\n        position: state.options.strategy,\n        left: '0',\n        top: '0',\n        margin: '0'\n      },\n      arrow: {\n        position: 'absolute'\n      },\n      reference: {}\n    };\n    Object.assign(state.elements.popper.style, initialStyles.popper);\n    state.styles = initialStyles;\n\n    if (state.elements.arrow) {\n      Object.assign(state.elements.arrow.style, initialStyles.arrow);\n    }\n\n    return function () {\n      Object.keys(state.elements).forEach(function (name) {\n        var element = state.elements[name];\n        var attributes = state.attributes[name] || {};\n        var styleProperties = Object.keys(state.styles.hasOwnProperty(name) ? state.styles[name] : initialStyles[name]); // Set all values to an empty string to unset them\n\n        var style = styleProperties.reduce(function (style, property) {\n          style[property] = '';\n          return style;\n        }, {}); // arrow is optional + virtual elements\n\n        if (!isHTMLElement(element) || !getNodeName(element)) {\n          return;\n        }\n\n        Object.assign(element.style, style);\n        Object.keys(attributes).forEach(function (attribute) {\n          element.removeAttribute(attribute);\n        });\n      });\n    };\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  var applyStyles$1 = {\n    name: 'applyStyles',\n    enabled: true,\n    phase: 'write',\n    fn: applyStyles,\n    effect: effect$2,\n    requires: ['computeStyles']\n  };\n\n  function getBasePlacement(placement) {\n    return placement.split('-')[0];\n  }\n\n  function getBoundingClientRect(element) {\n    var rect = element.getBoundingClientRect();\n    return {\n      width: rect.width,\n      height: rect.height,\n      top: rect.top,\n      right: rect.right,\n      bottom: rect.bottom,\n      left: rect.left,\n      x: rect.left,\n      y: rect.top\n    };\n  }\n\n  // means it doesn't take into account transforms.\n\n  function getLayoutRect(element) {\n    var clientRect = getBoundingClientRect(element); // Use the clientRect sizes if it's not been transformed.\n    // Fixes https://github.com/popperjs/popper-core/issues/1223\n\n    var width = element.offsetWidth;\n    var height = element.offsetHeight;\n\n    if (Math.abs(clientRect.width - width) <= 1) {\n      width = clientRect.width;\n    }\n\n    if (Math.abs(clientRect.height - height) <= 1) {\n      height = clientRect.height;\n    }\n\n    return {\n      x: element.offsetLeft,\n      y: element.offsetTop,\n      width: width,\n      height: height\n    };\n  }\n\n  function contains(parent, child) {\n    var rootNode = child.getRootNode && child.getRootNode(); // First, attempt with faster native method\n\n    if (parent.contains(child)) {\n      return true;\n    } // then fallback to custom implementation with Shadow DOM support\n    else if (rootNode && isShadowRoot(rootNode)) {\n        var next = child;\n\n        do {\n          if (next && parent.isSameNode(next)) {\n            return true;\n          } // $FlowFixMe[prop-missing]: need a better way to handle this...\n\n\n          next = next.parentNode || next.host;\n        } while (next);\n      } // Give up, the result is false\n\n\n    return false;\n  }\n\n  function getComputedStyle$1(element) {\n    return getWindow(element).getComputedStyle(element);\n  }\n\n  function isTableElement(element) {\n    return ['table', 'td', 'th'].indexOf(getNodeName(element)) >= 0;\n  }\n\n  function getDocumentElement(element) {\n    // $FlowFixMe[incompatible-return]: assume body is always available\n    return ((isElement(element) ? element.ownerDocument : // $FlowFixMe[prop-missing]\n    element.document) || window.document).documentElement;\n  }\n\n  function getParentNode(element) {\n    if (getNodeName(element) === 'html') {\n      return element;\n    }\n\n    return (// this is a quicker (but less type safe) way to save quite some bytes from the bundle\n      // $FlowFixMe[incompatible-return]\n      // $FlowFixMe[prop-missing]\n      element.assignedSlot || // step into the shadow DOM of the parent of a slotted node\n      element.parentNode || ( // DOM Element detected\n      isShadowRoot(element) ? element.host : null) || // ShadowRoot detected\n      // $FlowFixMe[incompatible-call]: HTMLElement is a Node\n      getDocumentElement(element) // fallback\n\n    );\n  }\n\n  function getTrueOffsetParent(element) {\n    if (!isHTMLElement(element) || // https://github.com/popperjs/popper-core/issues/837\n    getComputedStyle$1(element).position === 'fixed') {\n      return null;\n    }\n\n    return element.offsetParent;\n  } // `.offsetParent` reports `null` for fixed elements, while absolute elements\n  // return the containing block\n\n\n  function getContainingBlock(element) {\n    var isFirefox = navigator.userAgent.toLowerCase().indexOf('firefox') !== -1;\n    var isIE = navigator.userAgent.indexOf('Trident') !== -1;\n\n    if (isIE && isHTMLElement(element)) {\n      // In IE 9, 10 and 11 fixed elements containing block is always established by the viewport\n      var elementCss = getComputedStyle$1(element);\n\n      if (elementCss.position === 'fixed') {\n        return null;\n      }\n    }\n\n    var currentNode = getParentNode(element);\n\n    while (isHTMLElement(currentNode) && ['html', 'body'].indexOf(getNodeName(currentNode)) < 0) {\n      var css = getComputedStyle$1(currentNode); // This is non-exhaustive but covers the most common CSS properties that\n      // create a containing block.\n      // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n\n      if (css.transform !== 'none' || css.perspective !== 'none' || css.contain === 'paint' || ['transform', 'perspective'].indexOf(css.willChange) !== -1 || isFirefox && css.willChange === 'filter' || isFirefox && css.filter && css.filter !== 'none') {\n        return currentNode;\n      } else {\n        currentNode = currentNode.parentNode;\n      }\n    }\n\n    return null;\n  } // Gets the closest ancestor positioned element. Handles some edge cases,\n  // such as table ancestors and cross browser bugs.\n\n\n  function getOffsetParent(element) {\n    var window = getWindow(element);\n    var offsetParent = getTrueOffsetParent(element);\n\n    while (offsetParent && isTableElement(offsetParent) && getComputedStyle$1(offsetParent).position === 'static') {\n      offsetParent = getTrueOffsetParent(offsetParent);\n    }\n\n    if (offsetParent && (getNodeName(offsetParent) === 'html' || getNodeName(offsetParent) === 'body' && getComputedStyle$1(offsetParent).position === 'static')) {\n      return window;\n    }\n\n    return offsetParent || getContainingBlock(element) || window;\n  }\n\n  function getMainAxisFromPlacement(placement) {\n    return ['top', 'bottom'].indexOf(placement) >= 0 ? 'x' : 'y';\n  }\n\n  var max = Math.max;\n  var min = Math.min;\n  var round = Math.round;\n\n  function within(min$1, value, max$1) {\n    return max(min$1, min(value, max$1));\n  }\n\n  function getFreshSideObject() {\n    return {\n      top: 0,\n      right: 0,\n      bottom: 0,\n      left: 0\n    };\n  }\n\n  function mergePaddingObject(paddingObject) {\n    return Object.assign({}, getFreshSideObject(), paddingObject);\n  }\n\n  function expandToHashMap(value, keys) {\n    return keys.reduce(function (hashMap, key) {\n      hashMap[key] = value;\n      return hashMap;\n    }, {});\n  }\n\n  var toPaddingObject = function toPaddingObject(padding, state) {\n    padding = typeof padding === 'function' ? padding(Object.assign({}, state.rects, {\n      placement: state.placement\n    })) : padding;\n    return mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));\n  };\n\n  function arrow(_ref) {\n    var _state$modifiersData$;\n\n    var state = _ref.state,\n        name = _ref.name,\n        options = _ref.options;\n    var arrowElement = state.elements.arrow;\n    var popperOffsets = state.modifiersData.popperOffsets;\n    var basePlacement = getBasePlacement(state.placement);\n    var axis = getMainAxisFromPlacement(basePlacement);\n    var isVertical = [left, right].indexOf(basePlacement) >= 0;\n    var len = isVertical ? 'height' : 'width';\n\n    if (!arrowElement || !popperOffsets) {\n      return;\n    }\n\n    var paddingObject = toPaddingObject(options.padding, state);\n    var arrowRect = getLayoutRect(arrowElement);\n    var minProp = axis === 'y' ? top : left;\n    var maxProp = axis === 'y' ? bottom : right;\n    var endDiff = state.rects.reference[len] + state.rects.reference[axis] - popperOffsets[axis] - state.rects.popper[len];\n    var startDiff = popperOffsets[axis] - state.rects.reference[axis];\n    var arrowOffsetParent = getOffsetParent(arrowElement);\n    var clientSize = arrowOffsetParent ? axis === 'y' ? arrowOffsetParent.clientHeight || 0 : arrowOffsetParent.clientWidth || 0 : 0;\n    var centerToReference = endDiff / 2 - startDiff / 2; // Make sure the arrow doesn't overflow the popper if the center point is\n    // outside of the popper bounds\n\n    var min = paddingObject[minProp];\n    var max = clientSize - arrowRect[len] - paddingObject[maxProp];\n    var center = clientSize / 2 - arrowRect[len] / 2 + centerToReference;\n    var offset = within(min, center, max); // Prevents breaking syntax highlighting...\n\n    var axisProp = axis;\n    state.modifiersData[name] = (_state$modifiersData$ = {}, _state$modifiersData$[axisProp] = offset, _state$modifiersData$.centerOffset = offset - center, _state$modifiersData$);\n  }\n\n  function effect$1(_ref2) {\n    var state = _ref2.state,\n        options = _ref2.options;\n    var _options$element = options.element,\n        arrowElement = _options$element === void 0 ? '[data-popper-arrow]' : _options$element;\n\n    if (arrowElement == null) {\n      return;\n    } // CSS selector\n\n\n    if (typeof arrowElement === 'string') {\n      arrowElement = state.elements.popper.querySelector(arrowElement);\n\n      if (!arrowElement) {\n        return;\n      }\n    }\n\n    if (!contains(state.elements.popper, arrowElement)) {\n\n      return;\n    }\n\n    state.elements.arrow = arrowElement;\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  var arrow$1 = {\n    name: 'arrow',\n    enabled: true,\n    phase: 'main',\n    fn: arrow,\n    effect: effect$1,\n    requires: ['popperOffsets'],\n    requiresIfExists: ['preventOverflow']\n  };\n\n  var unsetSides = {\n    top: 'auto',\n    right: 'auto',\n    bottom: 'auto',\n    left: 'auto'\n  }; // Round the offsets to the nearest suitable subpixel based on the DPR.\n  // Zooming can change the DPR, but it seems to report a value that will\n  // cleanly divide the values into the appropriate subpixels.\n\n  function roundOffsetsByDPR(_ref) {\n    var x = _ref.x,\n        y = _ref.y;\n    var win = window;\n    var dpr = win.devicePixelRatio || 1;\n    return {\n      x: round(round(x * dpr) / dpr) || 0,\n      y: round(round(y * dpr) / dpr) || 0\n    };\n  }\n\n  function mapToStyles(_ref2) {\n    var _Object$assign2;\n\n    var popper = _ref2.popper,\n        popperRect = _ref2.popperRect,\n        placement = _ref2.placement,\n        offsets = _ref2.offsets,\n        position = _ref2.position,\n        gpuAcceleration = _ref2.gpuAcceleration,\n        adaptive = _ref2.adaptive,\n        roundOffsets = _ref2.roundOffsets;\n\n    var _ref3 = roundOffsets === true ? roundOffsetsByDPR(offsets) : typeof roundOffsets === 'function' ? roundOffsets(offsets) : offsets,\n        _ref3$x = _ref3.x,\n        x = _ref3$x === void 0 ? 0 : _ref3$x,\n        _ref3$y = _ref3.y,\n        y = _ref3$y === void 0 ? 0 : _ref3$y;\n\n    var hasX = offsets.hasOwnProperty('x');\n    var hasY = offsets.hasOwnProperty('y');\n    var sideX = left;\n    var sideY = top;\n    var win = window;\n\n    if (adaptive) {\n      var offsetParent = getOffsetParent(popper);\n      var heightProp = 'clientHeight';\n      var widthProp = 'clientWidth';\n\n      if (offsetParent === getWindow(popper)) {\n        offsetParent = getDocumentElement(popper);\n\n        if (getComputedStyle$1(offsetParent).position !== 'static') {\n          heightProp = 'scrollHeight';\n          widthProp = 'scrollWidth';\n        }\n      } // $FlowFixMe[incompatible-cast]: force type refinement, we compare offsetParent with window above, but Flow doesn't detect it\n\n\n      offsetParent = offsetParent;\n\n      if (placement === top) {\n        sideY = bottom; // $FlowFixMe[prop-missing]\n\n        y -= offsetParent[heightProp] - popperRect.height;\n        y *= gpuAcceleration ? 1 : -1;\n      }\n\n      if (placement === left) {\n        sideX = right; // $FlowFixMe[prop-missing]\n\n        x -= offsetParent[widthProp] - popperRect.width;\n        x *= gpuAcceleration ? 1 : -1;\n      }\n    }\n\n    var commonStyles = Object.assign({\n      position: position\n    }, adaptive && unsetSides);\n\n    if (gpuAcceleration) {\n      var _Object$assign;\n\n      return Object.assign({}, commonStyles, (_Object$assign = {}, _Object$assign[sideY] = hasY ? '0' : '', _Object$assign[sideX] = hasX ? '0' : '', _Object$assign.transform = (win.devicePixelRatio || 1) < 2 ? \"translate(\" + x + \"px, \" + y + \"px)\" : \"translate3d(\" + x + \"px, \" + y + \"px, 0)\", _Object$assign));\n    }\n\n    return Object.assign({}, commonStyles, (_Object$assign2 = {}, _Object$assign2[sideY] = hasY ? y + \"px\" : '', _Object$assign2[sideX] = hasX ? x + \"px\" : '', _Object$assign2.transform = '', _Object$assign2));\n  }\n\n  function computeStyles(_ref4) {\n    var state = _ref4.state,\n        options = _ref4.options;\n    var _options$gpuAccelerat = options.gpuAcceleration,\n        gpuAcceleration = _options$gpuAccelerat === void 0 ? true : _options$gpuAccelerat,\n        _options$adaptive = options.adaptive,\n        adaptive = _options$adaptive === void 0 ? true : _options$adaptive,\n        _options$roundOffsets = options.roundOffsets,\n        roundOffsets = _options$roundOffsets === void 0 ? true : _options$roundOffsets;\n\n    var commonStyles = {\n      placement: getBasePlacement(state.placement),\n      popper: state.elements.popper,\n      popperRect: state.rects.popper,\n      gpuAcceleration: gpuAcceleration\n    };\n\n    if (state.modifiersData.popperOffsets != null) {\n      state.styles.popper = Object.assign({}, state.styles.popper, mapToStyles(Object.assign({}, commonStyles, {\n        offsets: state.modifiersData.popperOffsets,\n        position: state.options.strategy,\n        adaptive: adaptive,\n        roundOffsets: roundOffsets\n      })));\n    }\n\n    if (state.modifiersData.arrow != null) {\n      state.styles.arrow = Object.assign({}, state.styles.arrow, mapToStyles(Object.assign({}, commonStyles, {\n        offsets: state.modifiersData.arrow,\n        position: 'absolute',\n        adaptive: false,\n        roundOffsets: roundOffsets\n      })));\n    }\n\n    state.attributes.popper = Object.assign({}, state.attributes.popper, {\n      'data-popper-placement': state.placement\n    });\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  var computeStyles$1 = {\n    name: 'computeStyles',\n    enabled: true,\n    phase: 'beforeWrite',\n    fn: computeStyles,\n    data: {}\n  };\n\n  var passive = {\n    passive: true\n  };\n\n  function effect(_ref) {\n    var state = _ref.state,\n        instance = _ref.instance,\n        options = _ref.options;\n    var _options$scroll = options.scroll,\n        scroll = _options$scroll === void 0 ? true : _options$scroll,\n        _options$resize = options.resize,\n        resize = _options$resize === void 0 ? true : _options$resize;\n    var window = getWindow(state.elements.popper);\n    var scrollParents = [].concat(state.scrollParents.reference, state.scrollParents.popper);\n\n    if (scroll) {\n      scrollParents.forEach(function (scrollParent) {\n        scrollParent.addEventListener('scroll', instance.update, passive);\n      });\n    }\n\n    if (resize) {\n      window.addEventListener('resize', instance.update, passive);\n    }\n\n    return function () {\n      if (scroll) {\n        scrollParents.forEach(function (scrollParent) {\n          scrollParent.removeEventListener('scroll', instance.update, passive);\n        });\n      }\n\n      if (resize) {\n        window.removeEventListener('resize', instance.update, passive);\n      }\n    };\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  var eventListeners = {\n    name: 'eventListeners',\n    enabled: true,\n    phase: 'write',\n    fn: function fn() {},\n    effect: effect,\n    data: {}\n  };\n\n  var hash$1 = {\n    left: 'right',\n    right: 'left',\n    bottom: 'top',\n    top: 'bottom'\n  };\n  function getOppositePlacement(placement) {\n    return placement.replace(/left|right|bottom|top/g, function (matched) {\n      return hash$1[matched];\n    });\n  }\n\n  var hash = {\n    start: 'end',\n    end: 'start'\n  };\n  function getOppositeVariationPlacement(placement) {\n    return placement.replace(/start|end/g, function (matched) {\n      return hash[matched];\n    });\n  }\n\n  function getWindowScroll(node) {\n    var win = getWindow(node);\n    var scrollLeft = win.pageXOffset;\n    var scrollTop = win.pageYOffset;\n    return {\n      scrollLeft: scrollLeft,\n      scrollTop: scrollTop\n    };\n  }\n\n  function getWindowScrollBarX(element) {\n    // If <html> has a CSS width greater than the viewport, then this will be\n    // incorrect for RTL.\n    // Popper 1 is broken in this case and never had a bug report so let's assume\n    // it's not an issue. I don't think anyone ever specifies width on <html>\n    // anyway.\n    // Browsers where the left scrollbar doesn't cause an issue report `0` for\n    // this (e.g. Edge 2019, IE11, Safari)\n    return getBoundingClientRect(getDocumentElement(element)).left + getWindowScroll(element).scrollLeft;\n  }\n\n  function getViewportRect(element) {\n    var win = getWindow(element);\n    var html = getDocumentElement(element);\n    var visualViewport = win.visualViewport;\n    var width = html.clientWidth;\n    var height = html.clientHeight;\n    var x = 0;\n    var y = 0; // NB: This isn't supported on iOS <= 12. If the keyboard is open, the popper\n    // can be obscured underneath it.\n    // Also, `html.clientHeight` adds the bottom bar height in Safari iOS, even\n    // if it isn't open, so if this isn't available, the popper will be detected\n    // to overflow the bottom of the screen too early.\n\n    if (visualViewport) {\n      width = visualViewport.width;\n      height = visualViewport.height; // Uses Layout Viewport (like Chrome; Safari does not currently)\n      // In Chrome, it returns a value very close to 0 (+/-) but contains rounding\n      // errors due to floating point numbers, so we need to check precision.\n      // Safari returns a number <= 0, usually < -1 when pinch-zoomed\n      // Feature detection fails in mobile emulation mode in Chrome.\n      // Math.abs(win.innerWidth / visualViewport.scale - visualViewport.width) <\n      // 0.001\n      // Fallback here: \"Not Safari\" userAgent\n\n      if (!/^((?!chrome|android).)*safari/i.test(navigator.userAgent)) {\n        x = visualViewport.offsetLeft;\n        y = visualViewport.offsetTop;\n      }\n    }\n\n    return {\n      width: width,\n      height: height,\n      x: x + getWindowScrollBarX(element),\n      y: y\n    };\n  }\n\n  // of the `<html>` and `<body>` rect bounds if horizontally scrollable\n\n  function getDocumentRect(element) {\n    var _element$ownerDocumen;\n\n    var html = getDocumentElement(element);\n    var winScroll = getWindowScroll(element);\n    var body = (_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body;\n    var width = max(html.scrollWidth, html.clientWidth, body ? body.scrollWidth : 0, body ? body.clientWidth : 0);\n    var height = max(html.scrollHeight, html.clientHeight, body ? body.scrollHeight : 0, body ? body.clientHeight : 0);\n    var x = -winScroll.scrollLeft + getWindowScrollBarX(element);\n    var y = -winScroll.scrollTop;\n\n    if (getComputedStyle$1(body || html).direction === 'rtl') {\n      x += max(html.clientWidth, body ? body.clientWidth : 0) - width;\n    }\n\n    return {\n      width: width,\n      height: height,\n      x: x,\n      y: y\n    };\n  }\n\n  function isScrollParent(element) {\n    // Firefox wants us to check `-x` and `-y` variations as well\n    var _getComputedStyle = getComputedStyle$1(element),\n        overflow = _getComputedStyle.overflow,\n        overflowX = _getComputedStyle.overflowX,\n        overflowY = _getComputedStyle.overflowY;\n\n    return /auto|scroll|overlay|hidden/.test(overflow + overflowY + overflowX);\n  }\n\n  function getScrollParent(node) {\n    if (['html', 'body', '#document'].indexOf(getNodeName(node)) >= 0) {\n      // $FlowFixMe[incompatible-return]: assume body is always available\n      return node.ownerDocument.body;\n    }\n\n    if (isHTMLElement(node) && isScrollParent(node)) {\n      return node;\n    }\n\n    return getScrollParent(getParentNode(node));\n  }\n\n  /*\n  given a DOM element, return the list of all scroll parents, up the list of ancesors\n  until we get to the top window object. This list is what we attach scroll listeners\n  to, because if any of these parent elements scroll, we'll need to re-calculate the\n  reference element's position.\n  */\n\n  function listScrollParents(element, list) {\n    var _element$ownerDocumen;\n\n    if (list === void 0) {\n      list = [];\n    }\n\n    var scrollParent = getScrollParent(element);\n    var isBody = scrollParent === ((_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body);\n    var win = getWindow(scrollParent);\n    var target = isBody ? [win].concat(win.visualViewport || [], isScrollParent(scrollParent) ? scrollParent : []) : scrollParent;\n    var updatedList = list.concat(target);\n    return isBody ? updatedList : // $FlowFixMe[incompatible-call]: isBody tells us target will be an HTMLElement here\n    updatedList.concat(listScrollParents(getParentNode(target)));\n  }\n\n  function rectToClientRect(rect) {\n    return Object.assign({}, rect, {\n      left: rect.x,\n      top: rect.y,\n      right: rect.x + rect.width,\n      bottom: rect.y + rect.height\n    });\n  }\n\n  function getInnerBoundingClientRect(element) {\n    var rect = getBoundingClientRect(element);\n    rect.top = rect.top + element.clientTop;\n    rect.left = rect.left + element.clientLeft;\n    rect.bottom = rect.top + element.clientHeight;\n    rect.right = rect.left + element.clientWidth;\n    rect.width = element.clientWidth;\n    rect.height = element.clientHeight;\n    rect.x = rect.left;\n    rect.y = rect.top;\n    return rect;\n  }\n\n  function getClientRectFromMixedType(element, clippingParent) {\n    return clippingParent === viewport ? rectToClientRect(getViewportRect(element)) : isHTMLElement(clippingParent) ? getInnerBoundingClientRect(clippingParent) : rectToClientRect(getDocumentRect(getDocumentElement(element)));\n  } // A \"clipping parent\" is an overflowable container with the characteristic of\n  // clipping (or hiding) overflowing elements with a position different from\n  // `initial`\n\n\n  function getClippingParents(element) {\n    var clippingParents = listScrollParents(getParentNode(element));\n    var canEscapeClipping = ['absolute', 'fixed'].indexOf(getComputedStyle$1(element).position) >= 0;\n    var clipperElement = canEscapeClipping && isHTMLElement(element) ? getOffsetParent(element) : element;\n\n    if (!isElement(clipperElement)) {\n      return [];\n    } // $FlowFixMe[incompatible-return]: https://github.com/facebook/flow/issues/1414\n\n\n    return clippingParents.filter(function (clippingParent) {\n      return isElement(clippingParent) && contains(clippingParent, clipperElement) && getNodeName(clippingParent) !== 'body';\n    });\n  } // Gets the maximum area that the element is visible in due to any number of\n  // clipping parents\n\n\n  function getClippingRect(element, boundary, rootBoundary) {\n    var mainClippingParents = boundary === 'clippingParents' ? getClippingParents(element) : [].concat(boundary);\n    var clippingParents = [].concat(mainClippingParents, [rootBoundary]);\n    var firstClippingParent = clippingParents[0];\n    var clippingRect = clippingParents.reduce(function (accRect, clippingParent) {\n      var rect = getClientRectFromMixedType(element, clippingParent);\n      accRect.top = max(rect.top, accRect.top);\n      accRect.right = min(rect.right, accRect.right);\n      accRect.bottom = min(rect.bottom, accRect.bottom);\n      accRect.left = max(rect.left, accRect.left);\n      return accRect;\n    }, getClientRectFromMixedType(element, firstClippingParent));\n    clippingRect.width = clippingRect.right - clippingRect.left;\n    clippingRect.height = clippingRect.bottom - clippingRect.top;\n    clippingRect.x = clippingRect.left;\n    clippingRect.y = clippingRect.top;\n    return clippingRect;\n  }\n\n  function getVariation(placement) {\n    return placement.split('-')[1];\n  }\n\n  function computeOffsets(_ref) {\n    var reference = _ref.reference,\n        element = _ref.element,\n        placement = _ref.placement;\n    var basePlacement = placement ? getBasePlacement(placement) : null;\n    var variation = placement ? getVariation(placement) : null;\n    var commonX = reference.x + reference.width / 2 - element.width / 2;\n    var commonY = reference.y + reference.height / 2 - element.height / 2;\n    var offsets;\n\n    switch (basePlacement) {\n      case top:\n        offsets = {\n          x: commonX,\n          y: reference.y - element.height\n        };\n        break;\n\n      case bottom:\n        offsets = {\n          x: commonX,\n          y: reference.y + reference.height\n        };\n        break;\n\n      case right:\n        offsets = {\n          x: reference.x + reference.width,\n          y: commonY\n        };\n        break;\n\n      case left:\n        offsets = {\n          x: reference.x - element.width,\n          y: commonY\n        };\n        break;\n\n      default:\n        offsets = {\n          x: reference.x,\n          y: reference.y\n        };\n    }\n\n    var mainAxis = basePlacement ? getMainAxisFromPlacement(basePlacement) : null;\n\n    if (mainAxis != null) {\n      var len = mainAxis === 'y' ? 'height' : 'width';\n\n      switch (variation) {\n        case start:\n          offsets[mainAxis] = offsets[mainAxis] - (reference[len] / 2 - element[len] / 2);\n          break;\n\n        case end:\n          offsets[mainAxis] = offsets[mainAxis] + (reference[len] / 2 - element[len] / 2);\n          break;\n      }\n    }\n\n    return offsets;\n  }\n\n  function detectOverflow(state, options) {\n    if (options === void 0) {\n      options = {};\n    }\n\n    var _options = options,\n        _options$placement = _options.placement,\n        placement = _options$placement === void 0 ? state.placement : _options$placement,\n        _options$boundary = _options.boundary,\n        boundary = _options$boundary === void 0 ? clippingParents : _options$boundary,\n        _options$rootBoundary = _options.rootBoundary,\n        rootBoundary = _options$rootBoundary === void 0 ? viewport : _options$rootBoundary,\n        _options$elementConte = _options.elementContext,\n        elementContext = _options$elementConte === void 0 ? popper : _options$elementConte,\n        _options$altBoundary = _options.altBoundary,\n        altBoundary = _options$altBoundary === void 0 ? false : _options$altBoundary,\n        _options$padding = _options.padding,\n        padding = _options$padding === void 0 ? 0 : _options$padding;\n    var paddingObject = mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));\n    var altContext = elementContext === popper ? reference : popper;\n    var referenceElement = state.elements.reference;\n    var popperRect = state.rects.popper;\n    var element = state.elements[altBoundary ? altContext : elementContext];\n    var clippingClientRect = getClippingRect(isElement(element) ? element : element.contextElement || getDocumentElement(state.elements.popper), boundary, rootBoundary);\n    var referenceClientRect = getBoundingClientRect(referenceElement);\n    var popperOffsets = computeOffsets({\n      reference: referenceClientRect,\n      element: popperRect,\n      strategy: 'absolute',\n      placement: placement\n    });\n    var popperClientRect = rectToClientRect(Object.assign({}, popperRect, popperOffsets));\n    var elementClientRect = elementContext === popper ? popperClientRect : referenceClientRect; // positive = overflowing the clipping rect\n    // 0 or negative = within the clipping rect\n\n    var overflowOffsets = {\n      top: clippingClientRect.top - elementClientRect.top + paddingObject.top,\n      bottom: elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom,\n      left: clippingClientRect.left - elementClientRect.left + paddingObject.left,\n      right: elementClientRect.right - clippingClientRect.right + paddingObject.right\n    };\n    var offsetData = state.modifiersData.offset; // Offsets can be applied only to the popper element\n\n    if (elementContext === popper && offsetData) {\n      var offset = offsetData[placement];\n      Object.keys(overflowOffsets).forEach(function (key) {\n        var multiply = [right, bottom].indexOf(key) >= 0 ? 1 : -1;\n        var axis = [top, bottom].indexOf(key) >= 0 ? 'y' : 'x';\n        overflowOffsets[key] += offset[axis] * multiply;\n      });\n    }\n\n    return overflowOffsets;\n  }\n\n  function computeAutoPlacement(state, options) {\n    if (options === void 0) {\n      options = {};\n    }\n\n    var _options = options,\n        placement = _options.placement,\n        boundary = _options.boundary,\n        rootBoundary = _options.rootBoundary,\n        padding = _options.padding,\n        flipVariations = _options.flipVariations,\n        _options$allowedAutoP = _options.allowedAutoPlacements,\n        allowedAutoPlacements = _options$allowedAutoP === void 0 ? placements : _options$allowedAutoP;\n    var variation = getVariation(placement);\n    var placements$1 = variation ? flipVariations ? variationPlacements : variationPlacements.filter(function (placement) {\n      return getVariation(placement) === variation;\n    }) : basePlacements;\n    var allowedPlacements = placements$1.filter(function (placement) {\n      return allowedAutoPlacements.indexOf(placement) >= 0;\n    });\n\n    if (allowedPlacements.length === 0) {\n      allowedPlacements = placements$1;\n    } // $FlowFixMe[incompatible-type]: Flow seems to have problems with two array unions...\n\n\n    var overflows = allowedPlacements.reduce(function (acc, placement) {\n      acc[placement] = detectOverflow(state, {\n        placement: placement,\n        boundary: boundary,\n        rootBoundary: rootBoundary,\n        padding: padding\n      })[getBasePlacement(placement)];\n      return acc;\n    }, {});\n    return Object.keys(overflows).sort(function (a, b) {\n      return overflows[a] - overflows[b];\n    });\n  }\n\n  function getExpandedFallbackPlacements(placement) {\n    if (getBasePlacement(placement) === auto) {\n      return [];\n    }\n\n    var oppositePlacement = getOppositePlacement(placement);\n    return [getOppositeVariationPlacement(placement), oppositePlacement, getOppositeVariationPlacement(oppositePlacement)];\n  }\n\n  function flip(_ref) {\n    var state = _ref.state,\n        options = _ref.options,\n        name = _ref.name;\n\n    if (state.modifiersData[name]._skip) {\n      return;\n    }\n\n    var _options$mainAxis = options.mainAxis,\n        checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\n        _options$altAxis = options.altAxis,\n        checkAltAxis = _options$altAxis === void 0 ? true : _options$altAxis,\n        specifiedFallbackPlacements = options.fallbackPlacements,\n        padding = options.padding,\n        boundary = options.boundary,\n        rootBoundary = options.rootBoundary,\n        altBoundary = options.altBoundary,\n        _options$flipVariatio = options.flipVariations,\n        flipVariations = _options$flipVariatio === void 0 ? true : _options$flipVariatio,\n        allowedAutoPlacements = options.allowedAutoPlacements;\n    var preferredPlacement = state.options.placement;\n    var basePlacement = getBasePlacement(preferredPlacement);\n    var isBasePlacement = basePlacement === preferredPlacement;\n    var fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipVariations ? [getOppositePlacement(preferredPlacement)] : getExpandedFallbackPlacements(preferredPlacement));\n    var placements = [preferredPlacement].concat(fallbackPlacements).reduce(function (acc, placement) {\n      return acc.concat(getBasePlacement(placement) === auto ? computeAutoPlacement(state, {\n        placement: placement,\n        boundary: boundary,\n        rootBoundary: rootBoundary,\n        padding: padding,\n        flipVariations: flipVariations,\n        allowedAutoPlacements: allowedAutoPlacements\n      }) : placement);\n    }, []);\n    var referenceRect = state.rects.reference;\n    var popperRect = state.rects.popper;\n    var checksMap = new Map();\n    var makeFallbackChecks = true;\n    var firstFittingPlacement = placements[0];\n\n    for (var i = 0; i < placements.length; i++) {\n      var placement = placements[i];\n\n      var _basePlacement = getBasePlacement(placement);\n\n      var isStartVariation = getVariation(placement) === start;\n      var isVertical = [top, bottom].indexOf(_basePlacement) >= 0;\n      var len = isVertical ? 'width' : 'height';\n      var overflow = detectOverflow(state, {\n        placement: placement,\n        boundary: boundary,\n        rootBoundary: rootBoundary,\n        altBoundary: altBoundary,\n        padding: padding\n      });\n      var mainVariationSide = isVertical ? isStartVariation ? right : left : isStartVariation ? bottom : top;\n\n      if (referenceRect[len] > popperRect[len]) {\n        mainVariationSide = getOppositePlacement(mainVariationSide);\n      }\n\n      var altVariationSide = getOppositePlacement(mainVariationSide);\n      var checks = [];\n\n      if (checkMainAxis) {\n        checks.push(overflow[_basePlacement] <= 0);\n      }\n\n      if (checkAltAxis) {\n        checks.push(overflow[mainVariationSide] <= 0, overflow[altVariationSide] <= 0);\n      }\n\n      if (checks.every(function (check) {\n        return check;\n      })) {\n        firstFittingPlacement = placement;\n        makeFallbackChecks = false;\n        break;\n      }\n\n      checksMap.set(placement, checks);\n    }\n\n    if (makeFallbackChecks) {\n      // `2` may be desired in some cases – research later\n      var numberOfChecks = flipVariations ? 3 : 1;\n\n      var _loop = function _loop(_i) {\n        var fittingPlacement = placements.find(function (placement) {\n          var checks = checksMap.get(placement);\n\n          if (checks) {\n            return checks.slice(0, _i).every(function (check) {\n              return check;\n            });\n          }\n        });\n\n        if (fittingPlacement) {\n          firstFittingPlacement = fittingPlacement;\n          return \"break\";\n        }\n      };\n\n      for (var _i = numberOfChecks; _i > 0; _i--) {\n        var _ret = _loop(_i);\n\n        if (_ret === \"break\") break;\n      }\n    }\n\n    if (state.placement !== firstFittingPlacement) {\n      state.modifiersData[name]._skip = true;\n      state.placement = firstFittingPlacement;\n      state.reset = true;\n    }\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  var flip$1 = {\n    name: 'flip',\n    enabled: true,\n    phase: 'main',\n    fn: flip,\n    requiresIfExists: ['offset'],\n    data: {\n      _skip: false\n    }\n  };\n\n  function getSideOffsets(overflow, rect, preventedOffsets) {\n    if (preventedOffsets === void 0) {\n      preventedOffsets = {\n        x: 0,\n        y: 0\n      };\n    }\n\n    return {\n      top: overflow.top - rect.height - preventedOffsets.y,\n      right: overflow.right - rect.width + preventedOffsets.x,\n      bottom: overflow.bottom - rect.height + preventedOffsets.y,\n      left: overflow.left - rect.width - preventedOffsets.x\n    };\n  }\n\n  function isAnySideFullyClipped(overflow) {\n    return [top, right, bottom, left].some(function (side) {\n      return overflow[side] >= 0;\n    });\n  }\n\n  function hide(_ref) {\n    var state = _ref.state,\n        name = _ref.name;\n    var referenceRect = state.rects.reference;\n    var popperRect = state.rects.popper;\n    var preventedOffsets = state.modifiersData.preventOverflow;\n    var referenceOverflow = detectOverflow(state, {\n      elementContext: 'reference'\n    });\n    var popperAltOverflow = detectOverflow(state, {\n      altBoundary: true\n    });\n    var referenceClippingOffsets = getSideOffsets(referenceOverflow, referenceRect);\n    var popperEscapeOffsets = getSideOffsets(popperAltOverflow, popperRect, preventedOffsets);\n    var isReferenceHidden = isAnySideFullyClipped(referenceClippingOffsets);\n    var hasPopperEscaped = isAnySideFullyClipped(popperEscapeOffsets);\n    state.modifiersData[name] = {\n      referenceClippingOffsets: referenceClippingOffsets,\n      popperEscapeOffsets: popperEscapeOffsets,\n      isReferenceHidden: isReferenceHidden,\n      hasPopperEscaped: hasPopperEscaped\n    };\n    state.attributes.popper = Object.assign({}, state.attributes.popper, {\n      'data-popper-reference-hidden': isReferenceHidden,\n      'data-popper-escaped': hasPopperEscaped\n    });\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  var hide$1 = {\n    name: 'hide',\n    enabled: true,\n    phase: 'main',\n    requiresIfExists: ['preventOverflow'],\n    fn: hide\n  };\n\n  function distanceAndSkiddingToXY(placement, rects, offset) {\n    var basePlacement = getBasePlacement(placement);\n    var invertDistance = [left, top].indexOf(basePlacement) >= 0 ? -1 : 1;\n\n    var _ref = typeof offset === 'function' ? offset(Object.assign({}, rects, {\n      placement: placement\n    })) : offset,\n        skidding = _ref[0],\n        distance = _ref[1];\n\n    skidding = skidding || 0;\n    distance = (distance || 0) * invertDistance;\n    return [left, right].indexOf(basePlacement) >= 0 ? {\n      x: distance,\n      y: skidding\n    } : {\n      x: skidding,\n      y: distance\n    };\n  }\n\n  function offset(_ref2) {\n    var state = _ref2.state,\n        options = _ref2.options,\n        name = _ref2.name;\n    var _options$offset = options.offset,\n        offset = _options$offset === void 0 ? [0, 0] : _options$offset;\n    var data = placements.reduce(function (acc, placement) {\n      acc[placement] = distanceAndSkiddingToXY(placement, state.rects, offset);\n      return acc;\n    }, {});\n    var _data$state$placement = data[state.placement],\n        x = _data$state$placement.x,\n        y = _data$state$placement.y;\n\n    if (state.modifiersData.popperOffsets != null) {\n      state.modifiersData.popperOffsets.x += x;\n      state.modifiersData.popperOffsets.y += y;\n    }\n\n    state.modifiersData[name] = data;\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  var offset$1 = {\n    name: 'offset',\n    enabled: true,\n    phase: 'main',\n    requires: ['popperOffsets'],\n    fn: offset\n  };\n\n  function popperOffsets(_ref) {\n    var state = _ref.state,\n        name = _ref.name;\n    // Offsets are the actual position the popper needs to have to be\n    // properly positioned near its reference element\n    // This is the most basic placement, and will be adjusted by\n    // the modifiers in the next step\n    state.modifiersData[name] = computeOffsets({\n      reference: state.rects.reference,\n      element: state.rects.popper,\n      strategy: 'absolute',\n      placement: state.placement\n    });\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  var popperOffsets$1 = {\n    name: 'popperOffsets',\n    enabled: true,\n    phase: 'read',\n    fn: popperOffsets,\n    data: {}\n  };\n\n  function getAltAxis(axis) {\n    return axis === 'x' ? 'y' : 'x';\n  }\n\n  function preventOverflow(_ref) {\n    var state = _ref.state,\n        options = _ref.options,\n        name = _ref.name;\n    var _options$mainAxis = options.mainAxis,\n        checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\n        _options$altAxis = options.altAxis,\n        checkAltAxis = _options$altAxis === void 0 ? false : _options$altAxis,\n        boundary = options.boundary,\n        rootBoundary = options.rootBoundary,\n        altBoundary = options.altBoundary,\n        padding = options.padding,\n        _options$tether = options.tether,\n        tether = _options$tether === void 0 ? true : _options$tether,\n        _options$tetherOffset = options.tetherOffset,\n        tetherOffset = _options$tetherOffset === void 0 ? 0 : _options$tetherOffset;\n    var overflow = detectOverflow(state, {\n      boundary: boundary,\n      rootBoundary: rootBoundary,\n      padding: padding,\n      altBoundary: altBoundary\n    });\n    var basePlacement = getBasePlacement(state.placement);\n    var variation = getVariation(state.placement);\n    var isBasePlacement = !variation;\n    var mainAxis = getMainAxisFromPlacement(basePlacement);\n    var altAxis = getAltAxis(mainAxis);\n    var popperOffsets = state.modifiersData.popperOffsets;\n    var referenceRect = state.rects.reference;\n    var popperRect = state.rects.popper;\n    var tetherOffsetValue = typeof tetherOffset === 'function' ? tetherOffset(Object.assign({}, state.rects, {\n      placement: state.placement\n    })) : tetherOffset;\n    var data = {\n      x: 0,\n      y: 0\n    };\n\n    if (!popperOffsets) {\n      return;\n    }\n\n    if (checkMainAxis || checkAltAxis) {\n      var mainSide = mainAxis === 'y' ? top : left;\n      var altSide = mainAxis === 'y' ? bottom : right;\n      var len = mainAxis === 'y' ? 'height' : 'width';\n      var offset = popperOffsets[mainAxis];\n      var min$1 = popperOffsets[mainAxis] + overflow[mainSide];\n      var max$1 = popperOffsets[mainAxis] - overflow[altSide];\n      var additive = tether ? -popperRect[len] / 2 : 0;\n      var minLen = variation === start ? referenceRect[len] : popperRect[len];\n      var maxLen = variation === start ? -popperRect[len] : -referenceRect[len]; // We need to include the arrow in the calculation so the arrow doesn't go\n      // outside the reference bounds\n\n      var arrowElement = state.elements.arrow;\n      var arrowRect = tether && arrowElement ? getLayoutRect(arrowElement) : {\n        width: 0,\n        height: 0\n      };\n      var arrowPaddingObject = state.modifiersData['arrow#persistent'] ? state.modifiersData['arrow#persistent'].padding : getFreshSideObject();\n      var arrowPaddingMin = arrowPaddingObject[mainSide];\n      var arrowPaddingMax = arrowPaddingObject[altSide]; // If the reference length is smaller than the arrow length, we don't want\n      // to include its full size in the calculation. If the reference is small\n      // and near the edge of a boundary, the popper can overflow even if the\n      // reference is not overflowing as well (e.g. virtual elements with no\n      // width or height)\n\n      var arrowLen = within(0, referenceRect[len], arrowRect[len]);\n      var minOffset = isBasePlacement ? referenceRect[len] / 2 - additive - arrowLen - arrowPaddingMin - tetherOffsetValue : minLen - arrowLen - arrowPaddingMin - tetherOffsetValue;\n      var maxOffset = isBasePlacement ? -referenceRect[len] / 2 + additive + arrowLen + arrowPaddingMax + tetherOffsetValue : maxLen + arrowLen + arrowPaddingMax + tetherOffsetValue;\n      var arrowOffsetParent = state.elements.arrow && getOffsetParent(state.elements.arrow);\n      var clientOffset = arrowOffsetParent ? mainAxis === 'y' ? arrowOffsetParent.clientTop || 0 : arrowOffsetParent.clientLeft || 0 : 0;\n      var offsetModifierValue = state.modifiersData.offset ? state.modifiersData.offset[state.placement][mainAxis] : 0;\n      var tetherMin = popperOffsets[mainAxis] + minOffset - offsetModifierValue - clientOffset;\n      var tetherMax = popperOffsets[mainAxis] + maxOffset - offsetModifierValue;\n\n      if (checkMainAxis) {\n        var preventedOffset = within(tether ? min(min$1, tetherMin) : min$1, offset, tether ? max(max$1, tetherMax) : max$1);\n        popperOffsets[mainAxis] = preventedOffset;\n        data[mainAxis] = preventedOffset - offset;\n      }\n\n      if (checkAltAxis) {\n        var _mainSide = mainAxis === 'x' ? top : left;\n\n        var _altSide = mainAxis === 'x' ? bottom : right;\n\n        var _offset = popperOffsets[altAxis];\n\n        var _min = _offset + overflow[_mainSide];\n\n        var _max = _offset - overflow[_altSide];\n\n        var _preventedOffset = within(tether ? min(_min, tetherMin) : _min, _offset, tether ? max(_max, tetherMax) : _max);\n\n        popperOffsets[altAxis] = _preventedOffset;\n        data[altAxis] = _preventedOffset - _offset;\n      }\n    }\n\n    state.modifiersData[name] = data;\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  var preventOverflow$1 = {\n    name: 'preventOverflow',\n    enabled: true,\n    phase: 'main',\n    fn: preventOverflow,\n    requiresIfExists: ['offset']\n  };\n\n  function getHTMLElementScroll(element) {\n    return {\n      scrollLeft: element.scrollLeft,\n      scrollTop: element.scrollTop\n    };\n  }\n\n  function getNodeScroll(node) {\n    if (node === getWindow(node) || !isHTMLElement(node)) {\n      return getWindowScroll(node);\n    } else {\n      return getHTMLElementScroll(node);\n    }\n  }\n\n  // Composite means it takes into account transforms as well as layout.\n\n  function getCompositeRect(elementOrVirtualElement, offsetParent, isFixed) {\n    if (isFixed === void 0) {\n      isFixed = false;\n    }\n\n    var documentElement = getDocumentElement(offsetParent);\n    var rect = getBoundingClientRect(elementOrVirtualElement);\n    var isOffsetParentAnElement = isHTMLElement(offsetParent);\n    var scroll = {\n      scrollLeft: 0,\n      scrollTop: 0\n    };\n    var offsets = {\n      x: 0,\n      y: 0\n    };\n\n    if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {\n      if (getNodeName(offsetParent) !== 'body' || // https://github.com/popperjs/popper-core/issues/1078\n      isScrollParent(documentElement)) {\n        scroll = getNodeScroll(offsetParent);\n      }\n\n      if (isHTMLElement(offsetParent)) {\n        offsets = getBoundingClientRect(offsetParent);\n        offsets.x += offsetParent.clientLeft;\n        offsets.y += offsetParent.clientTop;\n      } else if (documentElement) {\n        offsets.x = getWindowScrollBarX(documentElement);\n      }\n    }\n\n    return {\n      x: rect.left + scroll.scrollLeft - offsets.x,\n      y: rect.top + scroll.scrollTop - offsets.y,\n      width: rect.width,\n      height: rect.height\n    };\n  }\n\n  function order(modifiers) {\n    var map = new Map();\n    var visited = new Set();\n    var result = [];\n    modifiers.forEach(function (modifier) {\n      map.set(modifier.name, modifier);\n    }); // On visiting object, check for its dependencies and visit them recursively\n\n    function sort(modifier) {\n      visited.add(modifier.name);\n      var requires = [].concat(modifier.requires || [], modifier.requiresIfExists || []);\n      requires.forEach(function (dep) {\n        if (!visited.has(dep)) {\n          var depModifier = map.get(dep);\n\n          if (depModifier) {\n            sort(depModifier);\n          }\n        }\n      });\n      result.push(modifier);\n    }\n\n    modifiers.forEach(function (modifier) {\n      if (!visited.has(modifier.name)) {\n        // check for visited object\n        sort(modifier);\n      }\n    });\n    return result;\n  }\n\n  function orderModifiers(modifiers) {\n    // order based on dependencies\n    var orderedModifiers = order(modifiers); // order based on phase\n\n    return modifierPhases.reduce(function (acc, phase) {\n      return acc.concat(orderedModifiers.filter(function (modifier) {\n        return modifier.phase === phase;\n      }));\n    }, []);\n  }\n\n  function debounce(fn) {\n    var pending;\n    return function () {\n      if (!pending) {\n        pending = new Promise(function (resolve) {\n          Promise.resolve().then(function () {\n            pending = undefined;\n            resolve(fn());\n          });\n        });\n      }\n\n      return pending;\n    };\n  }\n\n  function mergeByName(modifiers) {\n    var merged = modifiers.reduce(function (merged, current) {\n      var existing = merged[current.name];\n      merged[current.name] = existing ? Object.assign({}, existing, current, {\n        options: Object.assign({}, existing.options, current.options),\n        data: Object.assign({}, existing.data, current.data)\n      }) : current;\n      return merged;\n    }, {}); // IE11 does not support Object.values\n\n    return Object.keys(merged).map(function (key) {\n      return merged[key];\n    });\n  }\n\n  var DEFAULT_OPTIONS = {\n    placement: 'bottom',\n    modifiers: [],\n    strategy: 'absolute'\n  };\n\n  function areValidElements() {\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    return !args.some(function (element) {\n      return !(element && typeof element.getBoundingClientRect === 'function');\n    });\n  }\n\n  function popperGenerator(generatorOptions) {\n    if (generatorOptions === void 0) {\n      generatorOptions = {};\n    }\n\n    var _generatorOptions = generatorOptions,\n        _generatorOptions$def = _generatorOptions.defaultModifiers,\n        defaultModifiers = _generatorOptions$def === void 0 ? [] : _generatorOptions$def,\n        _generatorOptions$def2 = _generatorOptions.defaultOptions,\n        defaultOptions = _generatorOptions$def2 === void 0 ? DEFAULT_OPTIONS : _generatorOptions$def2;\n    return function createPopper(reference, popper, options) {\n      if (options === void 0) {\n        options = defaultOptions;\n      }\n\n      var state = {\n        placement: 'bottom',\n        orderedModifiers: [],\n        options: Object.assign({}, DEFAULT_OPTIONS, defaultOptions),\n        modifiersData: {},\n        elements: {\n          reference: reference,\n          popper: popper\n        },\n        attributes: {},\n        styles: {}\n      };\n      var effectCleanupFns = [];\n      var isDestroyed = false;\n      var instance = {\n        state: state,\n        setOptions: function setOptions(options) {\n          cleanupModifierEffects();\n          state.options = Object.assign({}, defaultOptions, state.options, options);\n          state.scrollParents = {\n            reference: isElement(reference) ? listScrollParents(reference) : reference.contextElement ? listScrollParents(reference.contextElement) : [],\n            popper: listScrollParents(popper)\n          }; // Orders the modifiers based on their dependencies and `phase`\n          // properties\n\n          var orderedModifiers = orderModifiers(mergeByName([].concat(defaultModifiers, state.options.modifiers))); // Strip out disabled modifiers\n\n          state.orderedModifiers = orderedModifiers.filter(function (m) {\n            return m.enabled;\n          }); // Validate the provided modifiers so that the consumer will get warned\n\n          runModifierEffects();\n          return instance.update();\n        },\n        // Sync update – it will always be executed, even if not necessary. This\n        // is useful for low frequency updates where sync behavior simplifies the\n        // logic.\n        // For high frequency updates (e.g. `resize` and `scroll` events), always\n        // prefer the async Popper#update method\n        forceUpdate: function forceUpdate() {\n          if (isDestroyed) {\n            return;\n          }\n\n          var _state$elements = state.elements,\n              reference = _state$elements.reference,\n              popper = _state$elements.popper; // Don't proceed if `reference` or `popper` are not valid elements\n          // anymore\n\n          if (!areValidElements(reference, popper)) {\n\n            return;\n          } // Store the reference and popper rects to be read by modifiers\n\n\n          state.rects = {\n            reference: getCompositeRect(reference, getOffsetParent(popper), state.options.strategy === 'fixed'),\n            popper: getLayoutRect(popper)\n          }; // Modifiers have the ability to reset the current update cycle. The\n          // most common use case for this is the `flip` modifier changing the\n          // placement, which then needs to re-run all the modifiers, because the\n          // logic was previously ran for the previous placement and is therefore\n          // stale/incorrect\n\n          state.reset = false;\n          state.placement = state.options.placement; // On each update cycle, the `modifiersData` property for each modifier\n          // is filled with the initial data specified by the modifier. This means\n          // it doesn't persist and is fresh on each update.\n          // To ensure persistent data, use `${name}#persistent`\n\n          state.orderedModifiers.forEach(function (modifier) {\n            return state.modifiersData[modifier.name] = Object.assign({}, modifier.data);\n          });\n\n          for (var index = 0; index < state.orderedModifiers.length; index++) {\n\n            if (state.reset === true) {\n              state.reset = false;\n              index = -1;\n              continue;\n            }\n\n            var _state$orderedModifie = state.orderedModifiers[index],\n                fn = _state$orderedModifie.fn,\n                _state$orderedModifie2 = _state$orderedModifie.options,\n                _options = _state$orderedModifie2 === void 0 ? {} : _state$orderedModifie2,\n                name = _state$orderedModifie.name;\n\n            if (typeof fn === 'function') {\n              state = fn({\n                state: state,\n                options: _options,\n                name: name,\n                instance: instance\n              }) || state;\n            }\n          }\n        },\n        // Async and optimistically optimized update – it will not be executed if\n        // not necessary (debounced to run at most once-per-tick)\n        update: debounce(function () {\n          return new Promise(function (resolve) {\n            instance.forceUpdate();\n            resolve(state);\n          });\n        }),\n        destroy: function destroy() {\n          cleanupModifierEffects();\n          isDestroyed = true;\n        }\n      };\n\n      if (!areValidElements(reference, popper)) {\n\n        return instance;\n      }\n\n      instance.setOptions(options).then(function (state) {\n        if (!isDestroyed && options.onFirstUpdate) {\n          options.onFirstUpdate(state);\n        }\n      }); // Modifiers have the ability to execute arbitrary code before the first\n      // update cycle runs. They will be executed in the same order as the update\n      // cycle. This is useful when a modifier adds some persistent data that\n      // other modifiers need to use, but the modifier is run after the dependent\n      // one.\n\n      function runModifierEffects() {\n        state.orderedModifiers.forEach(function (_ref3) {\n          var name = _ref3.name,\n              _ref3$options = _ref3.options,\n              options = _ref3$options === void 0 ? {} : _ref3$options,\n              effect = _ref3.effect;\n\n          if (typeof effect === 'function') {\n            var cleanupFn = effect({\n              state: state,\n              name: name,\n              instance: instance,\n              options: options\n            });\n\n            var noopFn = function noopFn() {};\n\n            effectCleanupFns.push(cleanupFn || noopFn);\n          }\n        });\n      }\n\n      function cleanupModifierEffects() {\n        effectCleanupFns.forEach(function (fn) {\n          return fn();\n        });\n        effectCleanupFns = [];\n      }\n\n      return instance;\n    };\n  }\n  var createPopper$2 = /*#__PURE__*/popperGenerator(); // eslint-disable-next-line import/no-unused-modules\n\n  var defaultModifiers$1 = [eventListeners, popperOffsets$1, computeStyles$1, applyStyles$1];\n  var createPopper$1 = /*#__PURE__*/popperGenerator({\n    defaultModifiers: defaultModifiers$1\n  }); // eslint-disable-next-line import/no-unused-modules\n\n  var defaultModifiers = [eventListeners, popperOffsets$1, computeStyles$1, applyStyles$1, offset$1, flip$1, preventOverflow$1, arrow$1, hide$1];\n  var createPopper = /*#__PURE__*/popperGenerator({\n    defaultModifiers: defaultModifiers\n  }); // eslint-disable-next-line import/no-unused-modules\n\n  var Popper = /*#__PURE__*/Object.freeze({\n    __proto__: null,\n    popperGenerator: popperGenerator,\n    detectOverflow: detectOverflow,\n    createPopperBase: createPopper$2,\n    createPopper: createPopper,\n    createPopperLite: createPopper$1,\n    top: top,\n    bottom: bottom,\n    right: right,\n    left: left,\n    auto: auto,\n    basePlacements: basePlacements,\n    start: start,\n    end: end,\n    clippingParents: clippingParents,\n    viewport: viewport,\n    popper: popper,\n    reference: reference,\n    variationPlacements: variationPlacements,\n    placements: placements,\n    beforeRead: beforeRead,\n    read: read,\n    afterRead: afterRead,\n    beforeMain: beforeMain,\n    main: main,\n    afterMain: afterMain,\n    beforeWrite: beforeWrite,\n    write: write,\n    afterWrite: afterWrite,\n    modifierPhases: modifierPhases,\n    applyStyles: applyStyles$1,\n    arrow: arrow$1,\n    computeStyles: computeStyles$1,\n    eventListeners: eventListeners,\n    flip: flip$1,\n    hide: hide$1,\n    offset: offset$1,\n    popperOffsets: popperOffsets$1,\n    preventOverflow: preventOverflow$1\n  });\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): dropdown.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$8 = 'dropdown';\n  const DATA_KEY$7 = 'bs.dropdown';\n  const EVENT_KEY$7 = `.${DATA_KEY$7}`;\n  const DATA_API_KEY$4 = '.data-api';\n  const ESCAPE_KEY$2 = 'Escape';\n  const SPACE_KEY = 'Space';\n  const TAB_KEY = 'Tab';\n  const ARROW_UP_KEY = 'ArrowUp';\n  const ARROW_DOWN_KEY = 'ArrowDown';\n  const RIGHT_MOUSE_BUTTON = 2; // MouseEvent.button value for the secondary button, usually the right button\n\n  const REGEXP_KEYDOWN = new RegExp(`${ARROW_UP_KEY}|${ARROW_DOWN_KEY}|${ESCAPE_KEY$2}`);\n  const EVENT_HIDE$4 = `hide${EVENT_KEY$7}`;\n  const EVENT_HIDDEN$4 = `hidden${EVENT_KEY$7}`;\n  const EVENT_SHOW$4 = `show${EVENT_KEY$7}`;\n  const EVENT_SHOWN$4 = `shown${EVENT_KEY$7}`;\n  const EVENT_CLICK = `click${EVENT_KEY$7}`;\n  const EVENT_CLICK_DATA_API$3 = `click${EVENT_KEY$7}${DATA_API_KEY$4}`;\n  const EVENT_KEYDOWN_DATA_API = `keydown${EVENT_KEY$7}${DATA_API_KEY$4}`;\n  const EVENT_KEYUP_DATA_API = `keyup${EVENT_KEY$7}${DATA_API_KEY$4}`;\n  const CLASS_NAME_SHOW$7 = 'show';\n  const CLASS_NAME_DROPUP = 'dropup';\n  const CLASS_NAME_DROPEND = 'dropend';\n  const CLASS_NAME_DROPSTART = 'dropstart';\n  const CLASS_NAME_NAVBAR = 'navbar';\n  const SELECTOR_DATA_TOGGLE$3 = '[data-bs-toggle=\"dropdown\"]';\n  const SELECTOR_MENU = '.dropdown-menu';\n  const SELECTOR_NAVBAR_NAV = '.navbar-nav';\n  const SELECTOR_VISIBLE_ITEMS = '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)';\n  const PLACEMENT_TOP = isRTL() ? 'top-end' : 'top-start';\n  const PLACEMENT_TOPEND = isRTL() ? 'top-start' : 'top-end';\n  const PLACEMENT_BOTTOM = isRTL() ? 'bottom-end' : 'bottom-start';\n  const PLACEMENT_BOTTOMEND = isRTL() ? 'bottom-start' : 'bottom-end';\n  const PLACEMENT_RIGHT = isRTL() ? 'left-start' : 'right-start';\n  const PLACEMENT_LEFT = isRTL() ? 'right-start' : 'left-start';\n  const Default$7 = {\n    offset: [0, 2],\n    boundary: 'clippingParents',\n    reference: 'toggle',\n    display: 'dynamic',\n    popperConfig: null,\n    autoClose: true\n  };\n  const DefaultType$7 = {\n    offset: '(array|string|function)',\n    boundary: '(string|element)',\n    reference: '(string|element|object)',\n    display: 'string',\n    popperConfig: '(null|object|function)',\n    autoClose: '(boolean|string)'\n  };\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Dropdown extends BaseComponent {\n    constructor(element, config) {\n      super(element);\n      this._popper = null;\n      this._config = this._getConfig(config);\n      this._menu = this._getMenuElement();\n      this._inNavbar = this._detectNavbar();\n\n      this._addEventListeners();\n    } // Getters\n\n\n    static get Default() {\n      return Default$7;\n    }\n\n    static get DefaultType() {\n      return DefaultType$7;\n    }\n\n    static get NAME() {\n      return NAME$8;\n    } // Public\n\n\n    toggle() {\n      if (isDisabled(this._element)) {\n        return;\n      }\n\n      const isActive = this._element.classList.contains(CLASS_NAME_SHOW$7);\n\n      if (isActive) {\n        this.hide();\n        return;\n      }\n\n      this.show();\n    }\n\n    show() {\n      if (isDisabled(this._element) || this._menu.classList.contains(CLASS_NAME_SHOW$7)) {\n        return;\n      }\n\n      const parent = Dropdown.getParentFromElement(this._element);\n      const relatedTarget = {\n        relatedTarget: this._element\n      };\n      const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$4, relatedTarget);\n\n      if (showEvent.defaultPrevented) {\n        return;\n      } // Totally disable Popper for Dropdowns in Navbar\n\n\n      if (this._inNavbar) {\n        Manipulator.setDataAttribute(this._menu, 'popper', 'none');\n      } else {\n        if (typeof Popper === 'undefined') {\n          throw new TypeError('Bootstrap\\'s dropdowns require Popper (https://popper.js.org)');\n        }\n\n        let referenceElement = this._element;\n\n        if (this._config.reference === 'parent') {\n          referenceElement = parent;\n        } else if (isElement$1(this._config.reference)) {\n          referenceElement = getElement(this._config.reference);\n        } else if (typeof this._config.reference === 'object') {\n          referenceElement = this._config.reference;\n        }\n\n        const popperConfig = this._getPopperConfig();\n\n        const isDisplayStatic = popperConfig.modifiers.find(modifier => modifier.name === 'applyStyles' && modifier.enabled === false);\n        this._popper = createPopper(referenceElement, this._menu, popperConfig);\n\n        if (isDisplayStatic) {\n          Manipulator.setDataAttribute(this._menu, 'popper', 'static');\n        }\n      } // If this is a touch-enabled device we add extra\n      // empty mouseover listeners to the body's immediate children;\n      // only needed because of broken event delegation on iOS\n      // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n\n\n      if ('ontouchstart' in document.documentElement && !parent.closest(SELECTOR_NAVBAR_NAV)) {\n        [].concat(...document.body.children).forEach(elem => EventHandler.on(elem, 'mouseover', noop));\n      }\n\n      this._element.focus();\n\n      this._element.setAttribute('aria-expanded', true);\n\n      this._menu.classList.toggle(CLASS_NAME_SHOW$7);\n\n      this._element.classList.toggle(CLASS_NAME_SHOW$7);\n\n      EventHandler.trigger(this._element, EVENT_SHOWN$4, relatedTarget);\n    }\n\n    hide() {\n      if (isDisabled(this._element) || !this._menu.classList.contains(CLASS_NAME_SHOW$7)) {\n        return;\n      }\n\n      const relatedTarget = {\n        relatedTarget: this._element\n      };\n\n      this._completeHide(relatedTarget);\n    }\n\n    dispose() {\n      if (this._popper) {\n        this._popper.destroy();\n      }\n\n      super.dispose();\n    }\n\n    update() {\n      this._inNavbar = this._detectNavbar();\n\n      if (this._popper) {\n        this._popper.update();\n      }\n    } // Private\n\n\n    _addEventListeners() {\n      EventHandler.on(this._element, EVENT_CLICK, event => {\n        event.preventDefault();\n        this.toggle();\n      });\n    }\n\n    _completeHide(relatedTarget) {\n      const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$4, relatedTarget);\n\n      if (hideEvent.defaultPrevented) {\n        return;\n      } // If this is a touch-enabled device we remove the extra\n      // empty mouseover listeners we added for iOS support\n\n\n      if ('ontouchstart' in document.documentElement) {\n        [].concat(...document.body.children).forEach(elem => EventHandler.off(elem, 'mouseover', noop));\n      }\n\n      if (this._popper) {\n        this._popper.destroy();\n      }\n\n      this._menu.classList.remove(CLASS_NAME_SHOW$7);\n\n      this._element.classList.remove(CLASS_NAME_SHOW$7);\n\n      this._element.setAttribute('aria-expanded', 'false');\n\n      Manipulator.removeDataAttribute(this._menu, 'popper');\n      EventHandler.trigger(this._element, EVENT_HIDDEN$4, relatedTarget);\n    }\n\n    _getConfig(config) {\n      config = { ...this.constructor.Default,\n        ...Manipulator.getDataAttributes(this._element),\n        ...config\n      };\n      typeCheckConfig(NAME$8, config, this.constructor.DefaultType);\n\n      if (typeof config.reference === 'object' && !isElement$1(config.reference) && typeof config.reference.getBoundingClientRect !== 'function') {\n        // Popper virtual elements require a getBoundingClientRect method\n        throw new TypeError(`${NAME$8.toUpperCase()}: Option \"reference\" provided type \"object\" without a required \"getBoundingClientRect\" method.`);\n      }\n\n      return config;\n    }\n\n    _getMenuElement() {\n      return SelectorEngine.next(this._element, SELECTOR_MENU)[0];\n    }\n\n    _getPlacement() {\n      const parentDropdown = this._element.parentNode;\n\n      if (parentDropdown.classList.contains(CLASS_NAME_DROPEND)) {\n        return PLACEMENT_RIGHT;\n      }\n\n      if (parentDropdown.classList.contains(CLASS_NAME_DROPSTART)) {\n        return PLACEMENT_LEFT;\n      } // We need to trim the value because custom properties can also include spaces\n\n\n      const isEnd = getComputedStyle(this._menu).getPropertyValue('--bs-position').trim() === 'end';\n\n      if (parentDropdown.classList.contains(CLASS_NAME_DROPUP)) {\n        return isEnd ? PLACEMENT_TOPEND : PLACEMENT_TOP;\n      }\n\n      return isEnd ? PLACEMENT_BOTTOMEND : PLACEMENT_BOTTOM;\n    }\n\n    _detectNavbar() {\n      return this._element.closest(`.${CLASS_NAME_NAVBAR}`) !== null;\n    }\n\n    _getOffset() {\n      const {\n        offset\n      } = this._config;\n\n      if (typeof offset === 'string') {\n        return offset.split(',').map(val => Number.parseInt(val, 10));\n      }\n\n      if (typeof offset === 'function') {\n        return popperData => offset(popperData, this._element);\n      }\n\n      return offset;\n    }\n\n    _getPopperConfig() {\n      const defaultBsPopperConfig = {\n        placement: this._getPlacement(),\n        modifiers: [{\n          name: 'preventOverflow',\n          options: {\n            boundary: this._config.boundary\n          }\n        }, {\n          name: 'offset',\n          options: {\n            offset: this._getOffset()\n          }\n        }]\n      }; // Disable Popper if we have a static display\n\n      if (this._config.display === 'static') {\n        defaultBsPopperConfig.modifiers = [{\n          name: 'applyStyles',\n          enabled: false\n        }];\n      }\n\n      return { ...defaultBsPopperConfig,\n        ...(typeof this._config.popperConfig === 'function' ? this._config.popperConfig(defaultBsPopperConfig) : this._config.popperConfig)\n      };\n    }\n\n    _selectMenuItem({\n      key,\n      target\n    }) {\n      const items = SelectorEngine.find(SELECTOR_VISIBLE_ITEMS, this._menu).filter(isVisible);\n\n      if (!items.length) {\n        return;\n      } // if target isn't included in items (e.g. when expanding the dropdown)\n      // allow cycling to get the last item in case key equals ARROW_UP_KEY\n\n\n      getNextActiveElement(items, target, key === ARROW_DOWN_KEY, !items.includes(target)).focus();\n    } // Static\n\n\n    static dropdownInterface(element, config) {\n      const data = Dropdown.getOrCreateInstance(element, config);\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config]();\n      }\n    }\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        Dropdown.dropdownInterface(this, config);\n      });\n    }\n\n    static clearMenus(event) {\n      if (event && (event.button === RIGHT_MOUSE_BUTTON || event.type === 'keyup' && event.key !== TAB_KEY)) {\n        return;\n      }\n\n      const toggles = SelectorEngine.find(SELECTOR_DATA_TOGGLE$3);\n\n      for (let i = 0, len = toggles.length; i < len; i++) {\n        const context = Dropdown.getInstance(toggles[i]);\n\n        if (!context || context._config.autoClose === false) {\n          continue;\n        }\n\n        if (!context._element.classList.contains(CLASS_NAME_SHOW$7)) {\n          continue;\n        }\n\n        const relatedTarget = {\n          relatedTarget: context._element\n        };\n\n        if (event) {\n          const composedPath = event.composedPath();\n          const isMenuTarget = composedPath.includes(context._menu);\n\n          if (composedPath.includes(context._element) || context._config.autoClose === 'inside' && !isMenuTarget || context._config.autoClose === 'outside' && isMenuTarget) {\n            continue;\n          } // Tab navigation through the dropdown menu or events from contained inputs shouldn't close the menu\n\n\n          if (context._menu.contains(event.target) && (event.type === 'keyup' && event.key === TAB_KEY || /input|select|option|textarea|form/i.test(event.target.tagName))) {\n            continue;\n          }\n\n          if (event.type === 'click') {\n            relatedTarget.clickEvent = event;\n          }\n        }\n\n        context._completeHide(relatedTarget);\n      }\n    }\n\n    static getParentFromElement(element) {\n      return getElementFromSelector(element) || element.parentNode;\n    }\n\n    static dataApiKeydownHandler(event) {\n      // If not input/textarea:\n      //  - And not a key in REGEXP_KEYDOWN => not a dropdown command\n      // If input/textarea:\n      //  - If space key => not a dropdown command\n      //  - If key is other than escape\n      //    - If key is not up or down => not a dropdown command\n      //    - If trigger inside the menu => not a dropdown command\n      if (/input|textarea/i.test(event.target.tagName) ? event.key === SPACE_KEY || event.key !== ESCAPE_KEY$2 && (event.key !== ARROW_DOWN_KEY && event.key !== ARROW_UP_KEY || event.target.closest(SELECTOR_MENU)) : !REGEXP_KEYDOWN.test(event.key)) {\n        return;\n      }\n\n      const isActive = this.classList.contains(CLASS_NAME_SHOW$7);\n\n      if (!isActive && event.key === ESCAPE_KEY$2) {\n        return;\n      }\n\n      event.preventDefault();\n      event.stopPropagation();\n\n      if (isDisabled(this)) {\n        return;\n      }\n\n      const getToggleButton = () => this.matches(SELECTOR_DATA_TOGGLE$3) ? this : SelectorEngine.prev(this, SELECTOR_DATA_TOGGLE$3)[0];\n\n      if (event.key === ESCAPE_KEY$2) {\n        getToggleButton().focus();\n        Dropdown.clearMenus();\n        return;\n      }\n\n      if (event.key === ARROW_UP_KEY || event.key === ARROW_DOWN_KEY) {\n        if (!isActive) {\n          getToggleButton().click();\n        }\n\n        Dropdown.getInstance(getToggleButton())._selectMenuItem(event);\n\n        return;\n      }\n\n      if (!isActive || event.key === SPACE_KEY) {\n        Dropdown.clearMenus();\n      }\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_DATA_TOGGLE$3, Dropdown.dataApiKeydownHandler);\n  EventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown.dataApiKeydownHandler);\n  EventHandler.on(document, EVENT_CLICK_DATA_API$3, Dropdown.clearMenus);\n  EventHandler.on(document, EVENT_KEYUP_DATA_API, Dropdown.clearMenus);\n  EventHandler.on(document, EVENT_CLICK_DATA_API$3, SELECTOR_DATA_TOGGLE$3, function (event) {\n    event.preventDefault();\n    Dropdown.dropdownInterface(this);\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Dropdown to jQuery only if jQuery is present\n   */\n\n  defineJQueryPlugin(Dropdown);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): util/scrollBar.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  const SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top';\n  const SELECTOR_STICKY_CONTENT = '.sticky-top';\n\n  class ScrollBarHelper {\n    constructor() {\n      this._element = document.body;\n    }\n\n    getWidth() {\n      // https://developer.mozilla.org/en-US/docs/Web/API/Window/innerWidth#usage_notes\n      const documentWidth = document.documentElement.clientWidth;\n      return Math.abs(window.innerWidth - documentWidth);\n    }\n\n    hide() {\n      const width = this.getWidth();\n\n      this._disableOverFlow(); // give padding to element to balance the hidden scrollbar width\n\n\n      this._setElementAttributes(this._element, 'paddingRight', calculatedValue => calculatedValue + width); // trick: We adjust positive paddingRight and negative marginRight to sticky-top elements to keep showing fullwidth\n\n\n      this._setElementAttributes(SELECTOR_FIXED_CONTENT, 'paddingRight', calculatedValue => calculatedValue + width);\n\n      this._setElementAttributes(SELECTOR_STICKY_CONTENT, 'marginRight', calculatedValue => calculatedValue - width);\n    }\n\n    _disableOverFlow() {\n      this._saveInitialAttribute(this._element, 'overflow');\n\n      this._element.style.overflow = 'hidden';\n    }\n\n    _setElementAttributes(selector, styleProp, callback) {\n      const scrollbarWidth = this.getWidth();\n\n      const manipulationCallBack = element => {\n        if (element !== this._element && window.innerWidth > element.clientWidth + scrollbarWidth) {\n          return;\n        }\n\n        this._saveInitialAttribute(element, styleProp);\n\n        const calculatedValue = window.getComputedStyle(element)[styleProp];\n        element.style[styleProp] = `${callback(Number.parseFloat(calculatedValue))}px`;\n      };\n\n      this._applyManipulationCallback(selector, manipulationCallBack);\n    }\n\n    reset() {\n      this._resetElementAttributes(this._element, 'overflow');\n\n      this._resetElementAttributes(this._element, 'paddingRight');\n\n      this._resetElementAttributes(SELECTOR_FIXED_CONTENT, 'paddingRight');\n\n      this._resetElementAttributes(SELECTOR_STICKY_CONTENT, 'marginRight');\n    }\n\n    _saveInitialAttribute(element, styleProp) {\n      const actualValue = element.style[styleProp];\n\n      if (actualValue) {\n        Manipulator.setDataAttribute(element, styleProp, actualValue);\n      }\n    }\n\n    _resetElementAttributes(selector, styleProp) {\n      const manipulationCallBack = element => {\n        const value = Manipulator.getDataAttribute(element, styleProp);\n\n        if (typeof value === 'undefined') {\n          element.style.removeProperty(styleProp);\n        } else {\n          Manipulator.removeDataAttribute(element, styleProp);\n          element.style[styleProp] = value;\n        }\n      };\n\n      this._applyManipulationCallback(selector, manipulationCallBack);\n    }\n\n    _applyManipulationCallback(selector, callBack) {\n      if (isElement$1(selector)) {\n        callBack(selector);\n      } else {\n        SelectorEngine.find(selector, this._element).forEach(callBack);\n      }\n    }\n\n    isOverflowing() {\n      return this.getWidth() > 0;\n    }\n\n  }\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): util/backdrop.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  const Default$6 = {\n    isVisible: true,\n    // if false, we use the backdrop helper without adding any element to the dom\n    isAnimated: false,\n    rootElement: 'body',\n    // give the choice to place backdrop under different elements\n    clickCallback: null\n  };\n  const DefaultType$6 = {\n    isVisible: 'boolean',\n    isAnimated: 'boolean',\n    rootElement: '(element|string)',\n    clickCallback: '(function|null)'\n  };\n  const NAME$7 = 'backdrop';\n  const CLASS_NAME_BACKDROP = 'modal-backdrop';\n  const CLASS_NAME_FADE$5 = 'fade';\n  const CLASS_NAME_SHOW$6 = 'show';\n  const EVENT_MOUSEDOWN = `mousedown.bs.${NAME$7}`;\n\n  class Backdrop {\n    constructor(config) {\n      this._config = this._getConfig(config);\n      this._isAppended = false;\n      this._element = null;\n    }\n\n    show(callback) {\n      if (!this._config.isVisible) {\n        execute(callback);\n        return;\n      }\n\n      this._append();\n\n      if (this._config.isAnimated) {\n        reflow(this._getElement());\n      }\n\n      this._getElement().classList.add(CLASS_NAME_SHOW$6);\n\n      this._emulateAnimation(() => {\n        execute(callback);\n      });\n    }\n\n    hide(callback) {\n      if (!this._config.isVisible) {\n        execute(callback);\n        return;\n      }\n\n      this._getElement().classList.remove(CLASS_NAME_SHOW$6);\n\n      this._emulateAnimation(() => {\n        this.dispose();\n        execute(callback);\n      });\n    } // Private\n\n\n    _getElement() {\n      if (!this._element) {\n        const backdrop = document.createElement('div');\n        backdrop.className = CLASS_NAME_BACKDROP;\n\n        if (this._config.isAnimated) {\n          backdrop.classList.add(CLASS_NAME_FADE$5);\n        }\n\n        this._element = backdrop;\n      }\n\n      return this._element;\n    }\n\n    _getConfig(config) {\n      config = { ...Default$6,\n        ...(typeof config === 'object' ? config : {})\n      }; // use getElement() with the default \"body\" to get a fresh Element on each instantiation\n\n      config.rootElement = getElement(config.rootElement);\n      typeCheckConfig(NAME$7, config, DefaultType$6);\n      return config;\n    }\n\n    _append() {\n      if (this._isAppended) {\n        return;\n      }\n\n      this._config.rootElement.appendChild(this._getElement());\n\n      EventHandler.on(this._getElement(), EVENT_MOUSEDOWN, () => {\n        execute(this._config.clickCallback);\n      });\n      this._isAppended = true;\n    }\n\n    dispose() {\n      if (!this._isAppended) {\n        return;\n      }\n\n      EventHandler.off(this._element, EVENT_MOUSEDOWN);\n\n      this._element.remove();\n\n      this._isAppended = false;\n    }\n\n    _emulateAnimation(callback) {\n      executeAfterTransition(callback, this._getElement(), this._config.isAnimated);\n    }\n\n  }\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): modal.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$6 = 'modal';\n  const DATA_KEY$6 = 'bs.modal';\n  const EVENT_KEY$6 = `.${DATA_KEY$6}`;\n  const DATA_API_KEY$3 = '.data-api';\n  const ESCAPE_KEY$1 = 'Escape';\n  const Default$5 = {\n    backdrop: true,\n    keyboard: true,\n    focus: true\n  };\n  const DefaultType$5 = {\n    backdrop: '(boolean|string)',\n    keyboard: 'boolean',\n    focus: 'boolean'\n  };\n  const EVENT_HIDE$3 = `hide${EVENT_KEY$6}`;\n  const EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY$6}`;\n  const EVENT_HIDDEN$3 = `hidden${EVENT_KEY$6}`;\n  const EVENT_SHOW$3 = `show${EVENT_KEY$6}`;\n  const EVENT_SHOWN$3 = `shown${EVENT_KEY$6}`;\n  const EVENT_FOCUSIN$2 = `focusin${EVENT_KEY$6}`;\n  const EVENT_RESIZE = `resize${EVENT_KEY$6}`;\n  const EVENT_CLICK_DISMISS$2 = `click.dismiss${EVENT_KEY$6}`;\n  const EVENT_KEYDOWN_DISMISS$1 = `keydown.dismiss${EVENT_KEY$6}`;\n  const EVENT_MOUSEUP_DISMISS = `mouseup.dismiss${EVENT_KEY$6}`;\n  const EVENT_MOUSEDOWN_DISMISS = `mousedown.dismiss${EVENT_KEY$6}`;\n  const EVENT_CLICK_DATA_API$2 = `click${EVENT_KEY$6}${DATA_API_KEY$3}`;\n  const CLASS_NAME_OPEN = 'modal-open';\n  const CLASS_NAME_FADE$4 = 'fade';\n  const CLASS_NAME_SHOW$5 = 'show';\n  const CLASS_NAME_STATIC = 'modal-static';\n  const SELECTOR_DIALOG = '.modal-dialog';\n  const SELECTOR_MODAL_BODY = '.modal-body';\n  const SELECTOR_DATA_TOGGLE$2 = '[data-bs-toggle=\"modal\"]';\n  const SELECTOR_DATA_DISMISS$2 = '[data-bs-dismiss=\"modal\"]';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Modal extends BaseComponent {\n    constructor(element, config) {\n      super(element);\n      this._config = this._getConfig(config);\n      this._dialog = SelectorEngine.findOne(SELECTOR_DIALOG, this._element);\n      this._backdrop = this._initializeBackDrop();\n      this._isShown = false;\n      this._ignoreBackdropClick = false;\n      this._isTransitioning = false;\n      this._scrollBar = new ScrollBarHelper();\n    } // Getters\n\n\n    static get Default() {\n      return Default$5;\n    }\n\n    static get NAME() {\n      return NAME$6;\n    } // Public\n\n\n    toggle(relatedTarget) {\n      return this._isShown ? this.hide() : this.show(relatedTarget);\n    }\n\n    show(relatedTarget) {\n      if (this._isShown || this._isTransitioning) {\n        return;\n      }\n\n      const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$3, {\n        relatedTarget\n      });\n\n      if (showEvent.defaultPrevented) {\n        return;\n      }\n\n      this._isShown = true;\n\n      if (this._isAnimated()) {\n        this._isTransitioning = true;\n      }\n\n      this._scrollBar.hide();\n\n      document.body.classList.add(CLASS_NAME_OPEN);\n\n      this._adjustDialog();\n\n      this._setEscapeEvent();\n\n      this._setResizeEvent();\n\n      EventHandler.on(this._element, EVENT_CLICK_DISMISS$2, SELECTOR_DATA_DISMISS$2, event => this.hide(event));\n      EventHandler.on(this._dialog, EVENT_MOUSEDOWN_DISMISS, () => {\n        EventHandler.one(this._element, EVENT_MOUSEUP_DISMISS, event => {\n          if (event.target === this._element) {\n            this._ignoreBackdropClick = true;\n          }\n        });\n      });\n\n      this._showBackdrop(() => this._showElement(relatedTarget));\n    }\n\n    hide(event) {\n      if (event && ['A', 'AREA'].includes(event.target.tagName)) {\n        event.preventDefault();\n      }\n\n      if (!this._isShown || this._isTransitioning) {\n        return;\n      }\n\n      const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$3);\n\n      if (hideEvent.defaultPrevented) {\n        return;\n      }\n\n      this._isShown = false;\n\n      const isAnimated = this._isAnimated();\n\n      if (isAnimated) {\n        this._isTransitioning = true;\n      }\n\n      this._setEscapeEvent();\n\n      this._setResizeEvent();\n\n      EventHandler.off(document, EVENT_FOCUSIN$2);\n\n      this._element.classList.remove(CLASS_NAME_SHOW$5);\n\n      EventHandler.off(this._element, EVENT_CLICK_DISMISS$2);\n      EventHandler.off(this._dialog, EVENT_MOUSEDOWN_DISMISS);\n\n      this._queueCallback(() => this._hideModal(), this._element, isAnimated);\n    }\n\n    dispose() {\n      [window, this._dialog].forEach(htmlElement => EventHandler.off(htmlElement, EVENT_KEY$6));\n\n      this._backdrop.dispose();\n\n      super.dispose();\n      /**\n       * `document` has 2 events `EVENT_FOCUSIN` and `EVENT_CLICK_DATA_API`\n       * Do not move `document` in `htmlElements` array\n       * It will remove `EVENT_CLICK_DATA_API` event that should remain\n       */\n\n      EventHandler.off(document, EVENT_FOCUSIN$2);\n    }\n\n    handleUpdate() {\n      this._adjustDialog();\n    } // Private\n\n\n    _initializeBackDrop() {\n      return new Backdrop({\n        isVisible: Boolean(this._config.backdrop),\n        // 'static' option will be translated to true, and booleans will keep their value\n        isAnimated: this._isAnimated()\n      });\n    }\n\n    _getConfig(config) {\n      config = { ...Default$5,\n        ...Manipulator.getDataAttributes(this._element),\n        ...(typeof config === 'object' ? config : {})\n      };\n      typeCheckConfig(NAME$6, config, DefaultType$5);\n      return config;\n    }\n\n    _showElement(relatedTarget) {\n      const isAnimated = this._isAnimated();\n\n      const modalBody = SelectorEngine.findOne(SELECTOR_MODAL_BODY, this._dialog);\n\n      if (!this._element.parentNode || this._element.parentNode.nodeType !== Node.ELEMENT_NODE) {\n        // Don't move modal's DOM position\n        document.body.appendChild(this._element);\n      }\n\n      this._element.style.display = 'block';\n\n      this._element.removeAttribute('aria-hidden');\n\n      this._element.setAttribute('aria-modal', true);\n\n      this._element.setAttribute('role', 'dialog');\n\n      this._element.scrollTop = 0;\n\n      if (modalBody) {\n        modalBody.scrollTop = 0;\n      }\n\n      if (isAnimated) {\n        reflow(this._element);\n      }\n\n      this._element.classList.add(CLASS_NAME_SHOW$5);\n\n      if (this._config.focus) {\n        this._enforceFocus();\n      }\n\n      const transitionComplete = () => {\n        if (this._config.focus) {\n          this._element.focus();\n        }\n\n        this._isTransitioning = false;\n        EventHandler.trigger(this._element, EVENT_SHOWN$3, {\n          relatedTarget\n        });\n      };\n\n      this._queueCallback(transitionComplete, this._dialog, isAnimated);\n    }\n\n    _enforceFocus() {\n      EventHandler.off(document, EVENT_FOCUSIN$2); // guard against infinite focus loop\n\n      EventHandler.on(document, EVENT_FOCUSIN$2, event => {\n        if (document !== event.target && this._element !== event.target && !this._element.contains(event.target)) {\n          this._element.focus();\n        }\n      });\n    }\n\n    _setEscapeEvent() {\n      if (this._isShown) {\n        EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS$1, event => {\n          if (this._config.keyboard && event.key === ESCAPE_KEY$1) {\n            event.preventDefault();\n            this.hide();\n          } else if (!this._config.keyboard && event.key === ESCAPE_KEY$1) {\n            this._triggerBackdropTransition();\n          }\n        });\n      } else {\n        EventHandler.off(this._element, EVENT_KEYDOWN_DISMISS$1);\n      }\n    }\n\n    _setResizeEvent() {\n      if (this._isShown) {\n        EventHandler.on(window, EVENT_RESIZE, () => this._adjustDialog());\n      } else {\n        EventHandler.off(window, EVENT_RESIZE);\n      }\n    }\n\n    _hideModal() {\n      this._element.style.display = 'none';\n\n      this._element.setAttribute('aria-hidden', true);\n\n      this._element.removeAttribute('aria-modal');\n\n      this._element.removeAttribute('role');\n\n      this._isTransitioning = false;\n\n      this._backdrop.hide(() => {\n        document.body.classList.remove(CLASS_NAME_OPEN);\n\n        this._resetAdjustments();\n\n        this._scrollBar.reset();\n\n        EventHandler.trigger(this._element, EVENT_HIDDEN$3);\n      });\n    }\n\n    _showBackdrop(callback) {\n      EventHandler.on(this._element, EVENT_CLICK_DISMISS$2, event => {\n        if (this._ignoreBackdropClick) {\n          this._ignoreBackdropClick = false;\n          return;\n        }\n\n        if (event.target !== event.currentTarget) {\n          return;\n        }\n\n        if (this._config.backdrop === true) {\n          this.hide();\n        } else if (this._config.backdrop === 'static') {\n          this._triggerBackdropTransition();\n        }\n      });\n\n      this._backdrop.show(callback);\n    }\n\n    _isAnimated() {\n      return this._element.classList.contains(CLASS_NAME_FADE$4);\n    }\n\n    _triggerBackdropTransition() {\n      const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED);\n\n      if (hideEvent.defaultPrevented) {\n        return;\n      }\n\n      const {\n        classList,\n        scrollHeight,\n        style\n      } = this._element;\n      const isModalOverflowing = scrollHeight > document.documentElement.clientHeight; // return if the following background transition hasn't yet completed\n\n      if (!isModalOverflowing && style.overflowY === 'hidden' || classList.contains(CLASS_NAME_STATIC)) {\n        return;\n      }\n\n      if (!isModalOverflowing) {\n        style.overflowY = 'hidden';\n      }\n\n      classList.add(CLASS_NAME_STATIC);\n\n      this._queueCallback(() => {\n        classList.remove(CLASS_NAME_STATIC);\n\n        if (!isModalOverflowing) {\n          this._queueCallback(() => {\n            style.overflowY = '';\n          }, this._dialog);\n        }\n      }, this._dialog);\n\n      this._element.focus();\n    } // ----------------------------------------------------------------------\n    // the following methods are used to handle overflowing modals\n    // ----------------------------------------------------------------------\n\n\n    _adjustDialog() {\n      const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;\n\n      const scrollbarWidth = this._scrollBar.getWidth();\n\n      const isBodyOverflowing = scrollbarWidth > 0;\n\n      if (!isBodyOverflowing && isModalOverflowing && !isRTL() || isBodyOverflowing && !isModalOverflowing && isRTL()) {\n        this._element.style.paddingLeft = `${scrollbarWidth}px`;\n      }\n\n      if (isBodyOverflowing && !isModalOverflowing && !isRTL() || !isBodyOverflowing && isModalOverflowing && isRTL()) {\n        this._element.style.paddingRight = `${scrollbarWidth}px`;\n      }\n    }\n\n    _resetAdjustments() {\n      this._element.style.paddingLeft = '';\n      this._element.style.paddingRight = '';\n    } // Static\n\n\n    static jQueryInterface(config, relatedTarget) {\n      return this.each(function () {\n        const data = Modal.getOrCreateInstance(this, config);\n\n        if (typeof config !== 'string') {\n          return;\n        }\n\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config](relatedTarget);\n      });\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(document, EVENT_CLICK_DATA_API$2, SELECTOR_DATA_TOGGLE$2, function (event) {\n    const target = getElementFromSelector(this);\n\n    if (['A', 'AREA'].includes(this.tagName)) {\n      event.preventDefault();\n    }\n\n    EventHandler.one(target, EVENT_SHOW$3, showEvent => {\n      if (showEvent.defaultPrevented) {\n        // only register focus restorer if modal will actually get shown\n        return;\n      }\n\n      EventHandler.one(target, EVENT_HIDDEN$3, () => {\n        if (isVisible(this)) {\n          this.focus();\n        }\n      });\n    });\n    const data = Modal.getOrCreateInstance(target);\n    data.toggle(this);\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Modal to jQuery only if jQuery is present\n   */\n\n  defineJQueryPlugin(Modal);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): offcanvas.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$5 = 'offcanvas';\n  const DATA_KEY$5 = 'bs.offcanvas';\n  const EVENT_KEY$5 = `.${DATA_KEY$5}`;\n  const DATA_API_KEY$2 = '.data-api';\n  const EVENT_LOAD_DATA_API$1 = `load${EVENT_KEY$5}${DATA_API_KEY$2}`;\n  const ESCAPE_KEY = 'Escape';\n  const Default$4 = {\n    backdrop: true,\n    keyboard: true,\n    scroll: false\n  };\n  const DefaultType$4 = {\n    backdrop: 'boolean',\n    keyboard: 'boolean',\n    scroll: 'boolean'\n  };\n  const CLASS_NAME_SHOW$4 = 'show';\n  const OPEN_SELECTOR = '.offcanvas.show';\n  const EVENT_SHOW$2 = `show${EVENT_KEY$5}`;\n  const EVENT_SHOWN$2 = `shown${EVENT_KEY$5}`;\n  const EVENT_HIDE$2 = `hide${EVENT_KEY$5}`;\n  const EVENT_HIDDEN$2 = `hidden${EVENT_KEY$5}`;\n  const EVENT_FOCUSIN$1 = `focusin${EVENT_KEY$5}`;\n  const EVENT_CLICK_DATA_API$1 = `click${EVENT_KEY$5}${DATA_API_KEY$2}`;\n  const EVENT_CLICK_DISMISS$1 = `click.dismiss${EVENT_KEY$5}`;\n  const EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY$5}`;\n  const SELECTOR_DATA_DISMISS$1 = '[data-bs-dismiss=\"offcanvas\"]';\n  const SELECTOR_DATA_TOGGLE$1 = '[data-bs-toggle=\"offcanvas\"]';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Offcanvas extends BaseComponent {\n    constructor(element, config) {\n      super(element);\n      this._config = this._getConfig(config);\n      this._isShown = false;\n      this._backdrop = this._initializeBackDrop();\n\n      this._addEventListeners();\n    } // Getters\n\n\n    static get NAME() {\n      return NAME$5;\n    }\n\n    static get Default() {\n      return Default$4;\n    } // Public\n\n\n    toggle(relatedTarget) {\n      return this._isShown ? this.hide() : this.show(relatedTarget);\n    }\n\n    show(relatedTarget) {\n      if (this._isShown) {\n        return;\n      }\n\n      const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$2, {\n        relatedTarget\n      });\n\n      if (showEvent.defaultPrevented) {\n        return;\n      }\n\n      this._isShown = true;\n      this._element.style.visibility = 'visible';\n\n      this._backdrop.show();\n\n      if (!this._config.scroll) {\n        new ScrollBarHelper().hide();\n\n        this._enforceFocusOnElement(this._element);\n      }\n\n      this._element.removeAttribute('aria-hidden');\n\n      this._element.setAttribute('aria-modal', true);\n\n      this._element.setAttribute('role', 'dialog');\n\n      this._element.classList.add(CLASS_NAME_SHOW$4);\n\n      const completeCallBack = () => {\n        EventHandler.trigger(this._element, EVENT_SHOWN$2, {\n          relatedTarget\n        });\n      };\n\n      this._queueCallback(completeCallBack, this._element, true);\n    }\n\n    hide() {\n      if (!this._isShown) {\n        return;\n      }\n\n      const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$2);\n\n      if (hideEvent.defaultPrevented) {\n        return;\n      }\n\n      EventHandler.off(document, EVENT_FOCUSIN$1);\n\n      this._element.blur();\n\n      this._isShown = false;\n\n      this._element.classList.remove(CLASS_NAME_SHOW$4);\n\n      this._backdrop.hide();\n\n      const completeCallback = () => {\n        this._element.setAttribute('aria-hidden', true);\n\n        this._element.removeAttribute('aria-modal');\n\n        this._element.removeAttribute('role');\n\n        this._element.style.visibility = 'hidden';\n\n        if (!this._config.scroll) {\n          new ScrollBarHelper().reset();\n        }\n\n        EventHandler.trigger(this._element, EVENT_HIDDEN$2);\n      };\n\n      this._queueCallback(completeCallback, this._element, true);\n    }\n\n    dispose() {\n      this._backdrop.dispose();\n\n      super.dispose();\n      EventHandler.off(document, EVENT_FOCUSIN$1);\n    } // Private\n\n\n    _getConfig(config) {\n      config = { ...Default$4,\n        ...Manipulator.getDataAttributes(this._element),\n        ...(typeof config === 'object' ? config : {})\n      };\n      typeCheckConfig(NAME$5, config, DefaultType$4);\n      return config;\n    }\n\n    _initializeBackDrop() {\n      return new Backdrop({\n        isVisible: this._config.backdrop,\n        isAnimated: true,\n        rootElement: this._element.parentNode,\n        clickCallback: () => this.hide()\n      });\n    }\n\n    _enforceFocusOnElement(element) {\n      EventHandler.off(document, EVENT_FOCUSIN$1); // guard against infinite focus loop\n\n      EventHandler.on(document, EVENT_FOCUSIN$1, event => {\n        if (document !== event.target && element !== event.target && !element.contains(event.target)) {\n          element.focus();\n        }\n      });\n      element.focus();\n    }\n\n    _addEventListeners() {\n      EventHandler.on(this._element, EVENT_CLICK_DISMISS$1, SELECTOR_DATA_DISMISS$1, () => this.hide());\n      EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS, event => {\n        if (this._config.keyboard && event.key === ESCAPE_KEY) {\n          this.hide();\n        }\n      });\n    } // Static\n\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = Offcanvas.getOrCreateInstance(this, config);\n\n        if (typeof config !== 'string') {\n          return;\n        }\n\n        if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config](this);\n      });\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(document, EVENT_CLICK_DATA_API$1, SELECTOR_DATA_TOGGLE$1, function (event) {\n    const target = getElementFromSelector(this);\n\n    if (['A', 'AREA'].includes(this.tagName)) {\n      event.preventDefault();\n    }\n\n    if (isDisabled(this)) {\n      return;\n    }\n\n    EventHandler.one(target, EVENT_HIDDEN$2, () => {\n      // focus on trigger when it is closed\n      if (isVisible(this)) {\n        this.focus();\n      }\n    }); // avoid conflict when clicking a toggler of an offcanvas, while another is open\n\n    const allReadyOpen = SelectorEngine.findOne(OPEN_SELECTOR);\n\n    if (allReadyOpen && allReadyOpen !== target) {\n      Offcanvas.getInstance(allReadyOpen).hide();\n    }\n\n    const data = Offcanvas.getOrCreateInstance(target);\n    data.toggle(this);\n  });\n  EventHandler.on(window, EVENT_LOAD_DATA_API$1, () => SelectorEngine.find(OPEN_SELECTOR).forEach(el => Offcanvas.getOrCreateInstance(el).show()));\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   */\n\n  defineJQueryPlugin(Offcanvas);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): util/sanitizer.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  const uriAttrs = new Set(['background', 'cite', 'href', 'itemtype', 'longdesc', 'poster', 'src', 'xlink:href']);\n  const ARIA_ATTRIBUTE_PATTERN = /^aria-[\\w-]*$/i;\n  /**\n   * A pattern that recognizes a commonly useful subset of URLs that are safe.\n   *\n   * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts\n   */\n\n  const SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file):|[^#&/:?]*(?:[#/?]|$))/i;\n  /**\n   * A pattern that matches safe data URLs. Only matches image, video and audio types.\n   *\n   * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts\n   */\n\n  const DATA_URL_PATTERN = /^data:(?:image\\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\\/(?:mpeg|mp4|ogg|webm)|audio\\/(?:mp3|oga|ogg|opus));base64,[\\d+/a-z]+=*$/i;\n\n  const allowedAttribute = (attr, allowedAttributeList) => {\n    const attrName = attr.nodeName.toLowerCase();\n\n    if (allowedAttributeList.includes(attrName)) {\n      if (uriAttrs.has(attrName)) {\n        return Boolean(SAFE_URL_PATTERN.test(attr.nodeValue) || DATA_URL_PATTERN.test(attr.nodeValue));\n      }\n\n      return true;\n    }\n\n    const regExp = allowedAttributeList.filter(attrRegex => attrRegex instanceof RegExp); // Check if a regular expression validates the attribute.\n\n    for (let i = 0, len = regExp.length; i < len; i++) {\n      if (regExp[i].test(attrName)) {\n        return true;\n      }\n    }\n\n    return false;\n  };\n\n  const DefaultAllowlist = {\n    // Global attributes allowed on any supplied element below.\n    '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],\n    a: ['target', 'href', 'title', 'rel'],\n    area: [],\n    b: [],\n    br: [],\n    col: [],\n    code: [],\n    div: [],\n    em: [],\n    hr: [],\n    h1: [],\n    h2: [],\n    h3: [],\n    h4: [],\n    h5: [],\n    h6: [],\n    i: [],\n    img: ['src', 'srcset', 'alt', 'title', 'width', 'height'],\n    li: [],\n    ol: [],\n    p: [],\n    pre: [],\n    s: [],\n    small: [],\n    span: [],\n    sub: [],\n    sup: [],\n    strong: [],\n    u: [],\n    ul: []\n  };\n  function sanitizeHtml(unsafeHtml, allowList, sanitizeFn) {\n    if (!unsafeHtml.length) {\n      return unsafeHtml;\n    }\n\n    if (sanitizeFn && typeof sanitizeFn === 'function') {\n      return sanitizeFn(unsafeHtml);\n    }\n\n    const domParser = new window.DOMParser();\n    const createdDocument = domParser.parseFromString(unsafeHtml, 'text/html');\n    const allowlistKeys = Object.keys(allowList);\n    const elements = [].concat(...createdDocument.body.querySelectorAll('*'));\n\n    for (let i = 0, len = elements.length; i < len; i++) {\n      const el = elements[i];\n      const elName = el.nodeName.toLowerCase();\n\n      if (!allowlistKeys.includes(elName)) {\n        el.remove();\n        continue;\n      }\n\n      const attributeList = [].concat(...el.attributes);\n      const allowedAttributes = [].concat(allowList['*'] || [], allowList[elName] || []);\n      attributeList.forEach(attr => {\n        if (!allowedAttribute(attr, allowedAttributes)) {\n          el.removeAttribute(attr.nodeName);\n        }\n      });\n    }\n\n    return createdDocument.body.innerHTML;\n  }\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): tooltip.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$4 = 'tooltip';\n  const DATA_KEY$4 = 'bs.tooltip';\n  const EVENT_KEY$4 = `.${DATA_KEY$4}`;\n  const CLASS_PREFIX$1 = 'bs-tooltip';\n  const BSCLS_PREFIX_REGEX$1 = new RegExp(`(^|\\\\s)${CLASS_PREFIX$1}\\\\S+`, 'g');\n  const DISALLOWED_ATTRIBUTES = new Set(['sanitize', 'allowList', 'sanitizeFn']);\n  const DefaultType$3 = {\n    animation: 'boolean',\n    template: 'string',\n    title: '(string|element|function)',\n    trigger: 'string',\n    delay: '(number|object)',\n    html: 'boolean',\n    selector: '(string|boolean)',\n    placement: '(string|function)',\n    offset: '(array|string|function)',\n    container: '(string|element|boolean)',\n    fallbackPlacements: 'array',\n    boundary: '(string|element)',\n    customClass: '(string|function)',\n    sanitize: 'boolean',\n    sanitizeFn: '(null|function)',\n    allowList: 'object',\n    popperConfig: '(null|object|function)'\n  };\n  const AttachmentMap = {\n    AUTO: 'auto',\n    TOP: 'top',\n    RIGHT: isRTL() ? 'left' : 'right',\n    BOTTOM: 'bottom',\n    LEFT: isRTL() ? 'right' : 'left'\n  };\n  const Default$3 = {\n    animation: true,\n    template: '<div class=\"tooltip\" role=\"tooltip\">' + '<div class=\"tooltip-arrow\"></div>' + '<div class=\"tooltip-inner\"></div>' + '</div>',\n    trigger: 'hover focus',\n    title: '',\n    delay: 0,\n    html: false,\n    selector: false,\n    placement: 'top',\n    offset: [0, 0],\n    container: false,\n    fallbackPlacements: ['top', 'right', 'bottom', 'left'],\n    boundary: 'clippingParents',\n    customClass: '',\n    sanitize: true,\n    sanitizeFn: null,\n    allowList: DefaultAllowlist,\n    popperConfig: null\n  };\n  const Event$2 = {\n    HIDE: `hide${EVENT_KEY$4}`,\n    HIDDEN: `hidden${EVENT_KEY$4}`,\n    SHOW: `show${EVENT_KEY$4}`,\n    SHOWN: `shown${EVENT_KEY$4}`,\n    INSERTED: `inserted${EVENT_KEY$4}`,\n    CLICK: `click${EVENT_KEY$4}`,\n    FOCUSIN: `focusin${EVENT_KEY$4}`,\n    FOCUSOUT: `focusout${EVENT_KEY$4}`,\n    MOUSEENTER: `mouseenter${EVENT_KEY$4}`,\n    MOUSELEAVE: `mouseleave${EVENT_KEY$4}`\n  };\n  const CLASS_NAME_FADE$3 = 'fade';\n  const CLASS_NAME_MODAL = 'modal';\n  const CLASS_NAME_SHOW$3 = 'show';\n  const HOVER_STATE_SHOW = 'show';\n  const HOVER_STATE_OUT = 'out';\n  const SELECTOR_TOOLTIP_INNER = '.tooltip-inner';\n  const TRIGGER_HOVER = 'hover';\n  const TRIGGER_FOCUS = 'focus';\n  const TRIGGER_CLICK = 'click';\n  const TRIGGER_MANUAL = 'manual';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Tooltip extends BaseComponent {\n    constructor(element, config) {\n      if (typeof Popper === 'undefined') {\n        throw new TypeError('Bootstrap\\'s tooltips require Popper (https://popper.js.org)');\n      }\n\n      super(element); // private\n\n      this._isEnabled = true;\n      this._timeout = 0;\n      this._hoverState = '';\n      this._activeTrigger = {};\n      this._popper = null; // Protected\n\n      this._config = this._getConfig(config);\n      this.tip = null;\n\n      this._setListeners();\n    } // Getters\n\n\n    static get Default() {\n      return Default$3;\n    }\n\n    static get NAME() {\n      return NAME$4;\n    }\n\n    static get Event() {\n      return Event$2;\n    }\n\n    static get DefaultType() {\n      return DefaultType$3;\n    } // Public\n\n\n    enable() {\n      this._isEnabled = true;\n    }\n\n    disable() {\n      this._isEnabled = false;\n    }\n\n    toggleEnabled() {\n      this._isEnabled = !this._isEnabled;\n    }\n\n    toggle(event) {\n      if (!this._isEnabled) {\n        return;\n      }\n\n      if (event) {\n        const context = this._initializeOnDelegatedTarget(event);\n\n        context._activeTrigger.click = !context._activeTrigger.click;\n\n        if (context._isWithActiveTrigger()) {\n          context._enter(null, context);\n        } else {\n          context._leave(null, context);\n        }\n      } else {\n        if (this.getTipElement().classList.contains(CLASS_NAME_SHOW$3)) {\n          this._leave(null, this);\n\n          return;\n        }\n\n        this._enter(null, this);\n      }\n    }\n\n    dispose() {\n      clearTimeout(this._timeout);\n      EventHandler.off(this._element.closest(`.${CLASS_NAME_MODAL}`), 'hide.bs.modal', this._hideModalHandler);\n\n      if (this.tip) {\n        this.tip.remove();\n      }\n\n      if (this._popper) {\n        this._popper.destroy();\n      }\n\n      super.dispose();\n    }\n\n    show() {\n      if (this._element.style.display === 'none') {\n        throw new Error('Please use show on visible elements');\n      }\n\n      if (!(this.isWithContent() && this._isEnabled)) {\n        return;\n      }\n\n      const showEvent = EventHandler.trigger(this._element, this.constructor.Event.SHOW);\n      const shadowRoot = findShadowRoot(this._element);\n      const isInTheDom = shadowRoot === null ? this._element.ownerDocument.documentElement.contains(this._element) : shadowRoot.contains(this._element);\n\n      if (showEvent.defaultPrevented || !isInTheDom) {\n        return;\n      }\n\n      const tip = this.getTipElement();\n      const tipId = getUID(this.constructor.NAME);\n      tip.setAttribute('id', tipId);\n\n      this._element.setAttribute('aria-describedby', tipId);\n\n      this.setContent();\n\n      if (this._config.animation) {\n        tip.classList.add(CLASS_NAME_FADE$3);\n      }\n\n      const placement = typeof this._config.placement === 'function' ? this._config.placement.call(this, tip, this._element) : this._config.placement;\n\n      const attachment = this._getAttachment(placement);\n\n      this._addAttachmentClass(attachment);\n\n      const {\n        container\n      } = this._config;\n      Data.set(tip, this.constructor.DATA_KEY, this);\n\n      if (!this._element.ownerDocument.documentElement.contains(this.tip)) {\n        container.appendChild(tip);\n        EventHandler.trigger(this._element, this.constructor.Event.INSERTED);\n      }\n\n      if (this._popper) {\n        this._popper.update();\n      } else {\n        this._popper = createPopper(this._element, tip, this._getPopperConfig(attachment));\n      }\n\n      tip.classList.add(CLASS_NAME_SHOW$3);\n      const customClass = typeof this._config.customClass === 'function' ? this._config.customClass() : this._config.customClass;\n\n      if (customClass) {\n        tip.classList.add(...customClass.split(' '));\n      } // If this is a touch-enabled device we add extra\n      // empty mouseover listeners to the body's immediate children;\n      // only needed because of broken event delegation on iOS\n      // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n\n\n      if ('ontouchstart' in document.documentElement) {\n        [].concat(...document.body.children).forEach(element => {\n          EventHandler.on(element, 'mouseover', noop);\n        });\n      }\n\n      const complete = () => {\n        const prevHoverState = this._hoverState;\n        this._hoverState = null;\n        EventHandler.trigger(this._element, this.constructor.Event.SHOWN);\n\n        if (prevHoverState === HOVER_STATE_OUT) {\n          this._leave(null, this);\n        }\n      };\n\n      const isAnimated = this.tip.classList.contains(CLASS_NAME_FADE$3);\n\n      this._queueCallback(complete, this.tip, isAnimated);\n    }\n\n    hide() {\n      if (!this._popper) {\n        return;\n      }\n\n      const tip = this.getTipElement();\n\n      const complete = () => {\n        if (this._isWithActiveTrigger()) {\n          return;\n        }\n\n        if (this._hoverState !== HOVER_STATE_SHOW) {\n          tip.remove();\n        }\n\n        this._cleanTipClass();\n\n        this._element.removeAttribute('aria-describedby');\n\n        EventHandler.trigger(this._element, this.constructor.Event.HIDDEN);\n\n        if (this._popper) {\n          this._popper.destroy();\n\n          this._popper = null;\n        }\n      };\n\n      const hideEvent = EventHandler.trigger(this._element, this.constructor.Event.HIDE);\n\n      if (hideEvent.defaultPrevented) {\n        return;\n      }\n\n      tip.classList.remove(CLASS_NAME_SHOW$3); // If this is a touch-enabled device we remove the extra\n      // empty mouseover listeners we added for iOS support\n\n      if ('ontouchstart' in document.documentElement) {\n        [].concat(...document.body.children).forEach(element => EventHandler.off(element, 'mouseover', noop));\n      }\n\n      this._activeTrigger[TRIGGER_CLICK] = false;\n      this._activeTrigger[TRIGGER_FOCUS] = false;\n      this._activeTrigger[TRIGGER_HOVER] = false;\n      const isAnimated = this.tip.classList.contains(CLASS_NAME_FADE$3);\n\n      this._queueCallback(complete, this.tip, isAnimated);\n\n      this._hoverState = '';\n    }\n\n    update() {\n      if (this._popper !== null) {\n        this._popper.update();\n      }\n    } // Protected\n\n\n    isWithContent() {\n      return Boolean(this.getTitle());\n    }\n\n    getTipElement() {\n      if (this.tip) {\n        return this.tip;\n      }\n\n      const element = document.createElement('div');\n      element.innerHTML = this._config.template;\n      this.tip = element.children[0];\n      return this.tip;\n    }\n\n    setContent() {\n      const tip = this.getTipElement();\n      this.setElementContent(SelectorEngine.findOne(SELECTOR_TOOLTIP_INNER, tip), this.getTitle());\n      tip.classList.remove(CLASS_NAME_FADE$3, CLASS_NAME_SHOW$3);\n    }\n\n    setElementContent(element, content) {\n      if (element === null) {\n        return;\n      }\n\n      if (isElement$1(content)) {\n        content = getElement(content); // content is a DOM node or a jQuery\n\n        if (this._config.html) {\n          if (content.parentNode !== element) {\n            element.innerHTML = '';\n            element.appendChild(content);\n          }\n        } else {\n          element.textContent = content.textContent;\n        }\n\n        return;\n      }\n\n      if (this._config.html) {\n        if (this._config.sanitize) {\n          content = sanitizeHtml(content, this._config.allowList, this._config.sanitizeFn);\n        }\n\n        element.innerHTML = content;\n      } else {\n        element.textContent = content;\n      }\n    }\n\n    getTitle() {\n      let title = this._element.getAttribute('data-bs-original-title');\n\n      if (!title) {\n        title = typeof this._config.title === 'function' ? this._config.title.call(this._element) : this._config.title;\n      }\n\n      return title;\n    }\n\n    updateAttachment(attachment) {\n      if (attachment === 'right') {\n        return 'end';\n      }\n\n      if (attachment === 'left') {\n        return 'start';\n      }\n\n      return attachment;\n    } // Private\n\n\n    _initializeOnDelegatedTarget(event, context) {\n      const dataKey = this.constructor.DATA_KEY;\n      context = context || Data.get(event.delegateTarget, dataKey);\n\n      if (!context) {\n        context = new this.constructor(event.delegateTarget, this._getDelegateConfig());\n        Data.set(event.delegateTarget, dataKey, context);\n      }\n\n      return context;\n    }\n\n    _getOffset() {\n      const {\n        offset\n      } = this._config;\n\n      if (typeof offset === 'string') {\n        return offset.split(',').map(val => Number.parseInt(val, 10));\n      }\n\n      if (typeof offset === 'function') {\n        return popperData => offset(popperData, this._element);\n      }\n\n      return offset;\n    }\n\n    _getPopperConfig(attachment) {\n      const defaultBsPopperConfig = {\n        placement: attachment,\n        modifiers: [{\n          name: 'flip',\n          options: {\n            fallbackPlacements: this._config.fallbackPlacements\n          }\n        }, {\n          name: 'offset',\n          options: {\n            offset: this._getOffset()\n          }\n        }, {\n          name: 'preventOverflow',\n          options: {\n            boundary: this._config.boundary\n          }\n        }, {\n          name: 'arrow',\n          options: {\n            element: `.${this.constructor.NAME}-arrow`\n          }\n        }, {\n          name: 'onChange',\n          enabled: true,\n          phase: 'afterWrite',\n          fn: data => this._handlePopperPlacementChange(data)\n        }],\n        onFirstUpdate: data => {\n          if (data.options.placement !== data.placement) {\n            this._handlePopperPlacementChange(data);\n          }\n        }\n      };\n      return { ...defaultBsPopperConfig,\n        ...(typeof this._config.popperConfig === 'function' ? this._config.popperConfig(defaultBsPopperConfig) : this._config.popperConfig)\n      };\n    }\n\n    _addAttachmentClass(attachment) {\n      this.getTipElement().classList.add(`${CLASS_PREFIX$1}-${this.updateAttachment(attachment)}`);\n    }\n\n    _getAttachment(placement) {\n      return AttachmentMap[placement.toUpperCase()];\n    }\n\n    _setListeners() {\n      const triggers = this._config.trigger.split(' ');\n\n      triggers.forEach(trigger => {\n        if (trigger === 'click') {\n          EventHandler.on(this._element, this.constructor.Event.CLICK, this._config.selector, event => this.toggle(event));\n        } else if (trigger !== TRIGGER_MANUAL) {\n          const eventIn = trigger === TRIGGER_HOVER ? this.constructor.Event.MOUSEENTER : this.constructor.Event.FOCUSIN;\n          const eventOut = trigger === TRIGGER_HOVER ? this.constructor.Event.MOUSELEAVE : this.constructor.Event.FOCUSOUT;\n          EventHandler.on(this._element, eventIn, this._config.selector, event => this._enter(event));\n          EventHandler.on(this._element, eventOut, this._config.selector, event => this._leave(event));\n        }\n      });\n\n      this._hideModalHandler = () => {\n        if (this._element) {\n          this.hide();\n        }\n      };\n\n      EventHandler.on(this._element.closest(`.${CLASS_NAME_MODAL}`), 'hide.bs.modal', this._hideModalHandler);\n\n      if (this._config.selector) {\n        this._config = { ...this._config,\n          trigger: 'manual',\n          selector: ''\n        };\n      } else {\n        this._fixTitle();\n      }\n    }\n\n    _fixTitle() {\n      const title = this._element.getAttribute('title');\n\n      const originalTitleType = typeof this._element.getAttribute('data-bs-original-title');\n\n      if (title || originalTitleType !== 'string') {\n        this._element.setAttribute('data-bs-original-title', title || '');\n\n        if (title && !this._element.getAttribute('aria-label') && !this._element.textContent) {\n          this._element.setAttribute('aria-label', title);\n        }\n\n        this._element.setAttribute('title', '');\n      }\n    }\n\n    _enter(event, context) {\n      context = this._initializeOnDelegatedTarget(event, context);\n\n      if (event) {\n        context._activeTrigger[event.type === 'focusin' ? TRIGGER_FOCUS : TRIGGER_HOVER] = true;\n      }\n\n      if (context.getTipElement().classList.contains(CLASS_NAME_SHOW$3) || context._hoverState === HOVER_STATE_SHOW) {\n        context._hoverState = HOVER_STATE_SHOW;\n        return;\n      }\n\n      clearTimeout(context._timeout);\n      context._hoverState = HOVER_STATE_SHOW;\n\n      if (!context._config.delay || !context._config.delay.show) {\n        context.show();\n        return;\n      }\n\n      context._timeout = setTimeout(() => {\n        if (context._hoverState === HOVER_STATE_SHOW) {\n          context.show();\n        }\n      }, context._config.delay.show);\n    }\n\n    _leave(event, context) {\n      context = this._initializeOnDelegatedTarget(event, context);\n\n      if (event) {\n        context._activeTrigger[event.type === 'focusout' ? TRIGGER_FOCUS : TRIGGER_HOVER] = context._element.contains(event.relatedTarget);\n      }\n\n      if (context._isWithActiveTrigger()) {\n        return;\n      }\n\n      clearTimeout(context._timeout);\n      context._hoverState = HOVER_STATE_OUT;\n\n      if (!context._config.delay || !context._config.delay.hide) {\n        context.hide();\n        return;\n      }\n\n      context._timeout = setTimeout(() => {\n        if (context._hoverState === HOVER_STATE_OUT) {\n          context.hide();\n        }\n      }, context._config.delay.hide);\n    }\n\n    _isWithActiveTrigger() {\n      for (const trigger in this._activeTrigger) {\n        if (this._activeTrigger[trigger]) {\n          return true;\n        }\n      }\n\n      return false;\n    }\n\n    _getConfig(config) {\n      const dataAttributes = Manipulator.getDataAttributes(this._element);\n      Object.keys(dataAttributes).forEach(dataAttr => {\n        if (DISALLOWED_ATTRIBUTES.has(dataAttr)) {\n          delete dataAttributes[dataAttr];\n        }\n      });\n      config = { ...this.constructor.Default,\n        ...dataAttributes,\n        ...(typeof config === 'object' && config ? config : {})\n      };\n      config.container = config.container === false ? document.body : getElement(config.container);\n\n      if (typeof config.delay === 'number') {\n        config.delay = {\n          show: config.delay,\n          hide: config.delay\n        };\n      }\n\n      if (typeof config.title === 'number') {\n        config.title = config.title.toString();\n      }\n\n      if (typeof config.content === 'number') {\n        config.content = config.content.toString();\n      }\n\n      typeCheckConfig(NAME$4, config, this.constructor.DefaultType);\n\n      if (config.sanitize) {\n        config.template = sanitizeHtml(config.template, config.allowList, config.sanitizeFn);\n      }\n\n      return config;\n    }\n\n    _getDelegateConfig() {\n      const config = {};\n\n      if (this._config) {\n        for (const key in this._config) {\n          if (this.constructor.Default[key] !== this._config[key]) {\n            config[key] = this._config[key];\n          }\n        }\n      }\n\n      return config;\n    }\n\n    _cleanTipClass() {\n      const tip = this.getTipElement();\n      const tabClass = tip.getAttribute('class').match(BSCLS_PREFIX_REGEX$1);\n\n      if (tabClass !== null && tabClass.length > 0) {\n        tabClass.map(token => token.trim()).forEach(tClass => tip.classList.remove(tClass));\n      }\n    }\n\n    _handlePopperPlacementChange(popperData) {\n      const {\n        state\n      } = popperData;\n\n      if (!state) {\n        return;\n      }\n\n      this.tip = state.elements.popper;\n\n      this._cleanTipClass();\n\n      this._addAttachmentClass(this._getAttachment(state.placement));\n    } // Static\n\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = Tooltip.getOrCreateInstance(this, config);\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(`No method named \"${config}\"`);\n          }\n\n          data[config]();\n        }\n      });\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Tooltip to jQuery only if jQuery is present\n   */\n\n\n  defineJQueryPlugin(Tooltip);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): popover.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$3 = 'popover';\n  const DATA_KEY$3 = 'bs.popover';\n  const EVENT_KEY$3 = `.${DATA_KEY$3}`;\n  const CLASS_PREFIX = 'bs-popover';\n  const BSCLS_PREFIX_REGEX = new RegExp(`(^|\\\\s)${CLASS_PREFIX}\\\\S+`, 'g');\n  const Default$2 = { ...Tooltip.Default,\n    placement: 'right',\n    offset: [0, 8],\n    trigger: 'click',\n    content: '',\n    template: '<div class=\"popover\" role=\"tooltip\">' + '<div class=\"popover-arrow\"></div>' + '<h3 class=\"popover-header\"></h3>' + '<div class=\"popover-body\"></div>' + '</div>'\n  };\n  const DefaultType$2 = { ...Tooltip.DefaultType,\n    content: '(string|element|function)'\n  };\n  const Event$1 = {\n    HIDE: `hide${EVENT_KEY$3}`,\n    HIDDEN: `hidden${EVENT_KEY$3}`,\n    SHOW: `show${EVENT_KEY$3}`,\n    SHOWN: `shown${EVENT_KEY$3}`,\n    INSERTED: `inserted${EVENT_KEY$3}`,\n    CLICK: `click${EVENT_KEY$3}`,\n    FOCUSIN: `focusin${EVENT_KEY$3}`,\n    FOCUSOUT: `focusout${EVENT_KEY$3}`,\n    MOUSEENTER: `mouseenter${EVENT_KEY$3}`,\n    MOUSELEAVE: `mouseleave${EVENT_KEY$3}`\n  };\n  const CLASS_NAME_FADE$2 = 'fade';\n  const CLASS_NAME_SHOW$2 = 'show';\n  const SELECTOR_TITLE = '.popover-header';\n  const SELECTOR_CONTENT = '.popover-body';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Popover extends Tooltip {\n    // Getters\n    static get Default() {\n      return Default$2;\n    }\n\n    static get NAME() {\n      return NAME$3;\n    }\n\n    static get Event() {\n      return Event$1;\n    }\n\n    static get DefaultType() {\n      return DefaultType$2;\n    } // Overrides\n\n\n    isWithContent() {\n      return this.getTitle() || this._getContent();\n    }\n\n    getTipElement() {\n      if (this.tip) {\n        return this.tip;\n      }\n\n      this.tip = super.getTipElement();\n\n      if (!this.getTitle()) {\n        SelectorEngine.findOne(SELECTOR_TITLE, this.tip).remove();\n      }\n\n      if (!this._getContent()) {\n        SelectorEngine.findOne(SELECTOR_CONTENT, this.tip).remove();\n      }\n\n      return this.tip;\n    }\n\n    setContent() {\n      const tip = this.getTipElement(); // we use append for html objects to maintain js events\n\n      this.setElementContent(SelectorEngine.findOne(SELECTOR_TITLE, tip), this.getTitle());\n\n      let content = this._getContent();\n\n      if (typeof content === 'function') {\n        content = content.call(this._element);\n      }\n\n      this.setElementContent(SelectorEngine.findOne(SELECTOR_CONTENT, tip), content);\n      tip.classList.remove(CLASS_NAME_FADE$2, CLASS_NAME_SHOW$2);\n    } // Private\n\n\n    _addAttachmentClass(attachment) {\n      this.getTipElement().classList.add(`${CLASS_PREFIX}-${this.updateAttachment(attachment)}`);\n    }\n\n    _getContent() {\n      return this._element.getAttribute('data-bs-content') || this._config.content;\n    }\n\n    _cleanTipClass() {\n      const tip = this.getTipElement();\n      const tabClass = tip.getAttribute('class').match(BSCLS_PREFIX_REGEX);\n\n      if (tabClass !== null && tabClass.length > 0) {\n        tabClass.map(token => token.trim()).forEach(tClass => tip.classList.remove(tClass));\n      }\n    } // Static\n\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = Popover.getOrCreateInstance(this, config);\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(`No method named \"${config}\"`);\n          }\n\n          data[config]();\n        }\n      });\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Popover to jQuery only if jQuery is present\n   */\n\n\n  defineJQueryPlugin(Popover);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): scrollspy.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$2 = 'scrollspy';\n  const DATA_KEY$2 = 'bs.scrollspy';\n  const EVENT_KEY$2 = `.${DATA_KEY$2}`;\n  const DATA_API_KEY$1 = '.data-api';\n  const Default$1 = {\n    offset: 10,\n    method: 'auto',\n    target: ''\n  };\n  const DefaultType$1 = {\n    offset: 'number',\n    method: 'string',\n    target: '(string|element)'\n  };\n  const EVENT_ACTIVATE = `activate${EVENT_KEY$2}`;\n  const EVENT_SCROLL = `scroll${EVENT_KEY$2}`;\n  const EVENT_LOAD_DATA_API = `load${EVENT_KEY$2}${DATA_API_KEY$1}`;\n  const CLASS_NAME_DROPDOWN_ITEM = 'dropdown-item';\n  const CLASS_NAME_ACTIVE$1 = 'active';\n  const SELECTOR_DATA_SPY = '[data-bs-spy=\"scroll\"]';\n  const SELECTOR_NAV_LIST_GROUP$1 = '.nav, .list-group';\n  const SELECTOR_NAV_LINKS = '.nav-link';\n  const SELECTOR_NAV_ITEMS = '.nav-item';\n  const SELECTOR_LIST_ITEMS = '.list-group-item';\n  const SELECTOR_DROPDOWN$1 = '.dropdown';\n  const SELECTOR_DROPDOWN_TOGGLE$1 = '.dropdown-toggle';\n  const METHOD_OFFSET = 'offset';\n  const METHOD_POSITION = 'position';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class ScrollSpy extends BaseComponent {\n    constructor(element, config) {\n      super(element);\n      this._scrollElement = this._element.tagName === 'BODY' ? window : this._element;\n      this._config = this._getConfig(config);\n      this._selector = `${this._config.target} ${SELECTOR_NAV_LINKS}, ${this._config.target} ${SELECTOR_LIST_ITEMS}, ${this._config.target} .${CLASS_NAME_DROPDOWN_ITEM}`;\n      this._offsets = [];\n      this._targets = [];\n      this._activeTarget = null;\n      this._scrollHeight = 0;\n      EventHandler.on(this._scrollElement, EVENT_SCROLL, () => this._process());\n      this.refresh();\n\n      this._process();\n    } // Getters\n\n\n    static get Default() {\n      return Default$1;\n    }\n\n    static get NAME() {\n      return NAME$2;\n    } // Public\n\n\n    refresh() {\n      const autoMethod = this._scrollElement === this._scrollElement.window ? METHOD_OFFSET : METHOD_POSITION;\n      const offsetMethod = this._config.method === 'auto' ? autoMethod : this._config.method;\n      const offsetBase = offsetMethod === METHOD_POSITION ? this._getScrollTop() : 0;\n      this._offsets = [];\n      this._targets = [];\n      this._scrollHeight = this._getScrollHeight();\n      const targets = SelectorEngine.find(this._selector);\n      targets.map(element => {\n        const targetSelector = getSelectorFromElement(element);\n        const target = targetSelector ? SelectorEngine.findOne(targetSelector) : null;\n\n        if (target) {\n          const targetBCR = target.getBoundingClientRect();\n\n          if (targetBCR.width || targetBCR.height) {\n            return [Manipulator[offsetMethod](target).top + offsetBase, targetSelector];\n          }\n        }\n\n        return null;\n      }).filter(item => item).sort((a, b) => a[0] - b[0]).forEach(item => {\n        this._offsets.push(item[0]);\n\n        this._targets.push(item[1]);\n      });\n    }\n\n    dispose() {\n      EventHandler.off(this._scrollElement, EVENT_KEY$2);\n      super.dispose();\n    } // Private\n\n\n    _getConfig(config) {\n      config = { ...Default$1,\n        ...Manipulator.getDataAttributes(this._element),\n        ...(typeof config === 'object' && config ? config : {})\n      };\n\n      if (typeof config.target !== 'string' && isElement$1(config.target)) {\n        let {\n          id\n        } = config.target;\n\n        if (!id) {\n          id = getUID(NAME$2);\n          config.target.id = id;\n        }\n\n        config.target = `#${id}`;\n      }\n\n      typeCheckConfig(NAME$2, config, DefaultType$1);\n      return config;\n    }\n\n    _getScrollTop() {\n      return this._scrollElement === window ? this._scrollElement.pageYOffset : this._scrollElement.scrollTop;\n    }\n\n    _getScrollHeight() {\n      return this._scrollElement.scrollHeight || Math.max(document.body.scrollHeight, document.documentElement.scrollHeight);\n    }\n\n    _getOffsetHeight() {\n      return this._scrollElement === window ? window.innerHeight : this._scrollElement.getBoundingClientRect().height;\n    }\n\n    _process() {\n      const scrollTop = this._getScrollTop() + this._config.offset;\n\n      const scrollHeight = this._getScrollHeight();\n\n      const maxScroll = this._config.offset + scrollHeight - this._getOffsetHeight();\n\n      if (this._scrollHeight !== scrollHeight) {\n        this.refresh();\n      }\n\n      if (scrollTop >= maxScroll) {\n        const target = this._targets[this._targets.length - 1];\n\n        if (this._activeTarget !== target) {\n          this._activate(target);\n        }\n\n        return;\n      }\n\n      if (this._activeTarget && scrollTop < this._offsets[0] && this._offsets[0] > 0) {\n        this._activeTarget = null;\n\n        this._clear();\n\n        return;\n      }\n\n      for (let i = this._offsets.length; i--;) {\n        const isActiveTarget = this._activeTarget !== this._targets[i] && scrollTop >= this._offsets[i] && (typeof this._offsets[i + 1] === 'undefined' || scrollTop < this._offsets[i + 1]);\n\n        if (isActiveTarget) {\n          this._activate(this._targets[i]);\n        }\n      }\n    }\n\n    _activate(target) {\n      this._activeTarget = target;\n\n      this._clear();\n\n      const queries = this._selector.split(',').map(selector => `${selector}[data-bs-target=\"${target}\"],${selector}[href=\"${target}\"]`);\n\n      const link = SelectorEngine.findOne(queries.join(','));\n\n      if (link.classList.contains(CLASS_NAME_DROPDOWN_ITEM)) {\n        SelectorEngine.findOne(SELECTOR_DROPDOWN_TOGGLE$1, link.closest(SELECTOR_DROPDOWN$1)).classList.add(CLASS_NAME_ACTIVE$1);\n        link.classList.add(CLASS_NAME_ACTIVE$1);\n      } else {\n        // Set triggered link as active\n        link.classList.add(CLASS_NAME_ACTIVE$1);\n        SelectorEngine.parents(link, SELECTOR_NAV_LIST_GROUP$1).forEach(listGroup => {\n          // Set triggered links parents as active\n          // With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor\n          SelectorEngine.prev(listGroup, `${SELECTOR_NAV_LINKS}, ${SELECTOR_LIST_ITEMS}`).forEach(item => item.classList.add(CLASS_NAME_ACTIVE$1)); // Handle special case when .nav-link is inside .nav-item\n\n          SelectorEngine.prev(listGroup, SELECTOR_NAV_ITEMS).forEach(navItem => {\n            SelectorEngine.children(navItem, SELECTOR_NAV_LINKS).forEach(item => item.classList.add(CLASS_NAME_ACTIVE$1));\n          });\n        });\n      }\n\n      EventHandler.trigger(this._scrollElement, EVENT_ACTIVATE, {\n        relatedTarget: target\n      });\n    }\n\n    _clear() {\n      SelectorEngine.find(this._selector).filter(node => node.classList.contains(CLASS_NAME_ACTIVE$1)).forEach(node => node.classList.remove(CLASS_NAME_ACTIVE$1));\n    } // Static\n\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = ScrollSpy.getOrCreateInstance(this, config);\n\n        if (typeof config !== 'string') {\n          return;\n        }\n\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config]();\n      });\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n    SelectorEngine.find(SELECTOR_DATA_SPY).forEach(spy => new ScrollSpy(spy));\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .ScrollSpy to jQuery only if jQuery is present\n   */\n\n  defineJQueryPlugin(ScrollSpy);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): tab.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$1 = 'tab';\n  const DATA_KEY$1 = 'bs.tab';\n  const EVENT_KEY$1 = `.${DATA_KEY$1}`;\n  const DATA_API_KEY = '.data-api';\n  const EVENT_HIDE$1 = `hide${EVENT_KEY$1}`;\n  const EVENT_HIDDEN$1 = `hidden${EVENT_KEY$1}`;\n  const EVENT_SHOW$1 = `show${EVENT_KEY$1}`;\n  const EVENT_SHOWN$1 = `shown${EVENT_KEY$1}`;\n  const EVENT_CLICK_DATA_API = `click${EVENT_KEY$1}${DATA_API_KEY}`;\n  const CLASS_NAME_DROPDOWN_MENU = 'dropdown-menu';\n  const CLASS_NAME_ACTIVE = 'active';\n  const CLASS_NAME_FADE$1 = 'fade';\n  const CLASS_NAME_SHOW$1 = 'show';\n  const SELECTOR_DROPDOWN = '.dropdown';\n  const SELECTOR_NAV_LIST_GROUP = '.nav, .list-group';\n  const SELECTOR_ACTIVE = '.active';\n  const SELECTOR_ACTIVE_UL = ':scope > li > .active';\n  const SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"tab\"], [data-bs-toggle=\"pill\"], [data-bs-toggle=\"list\"]';\n  const SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle';\n  const SELECTOR_DROPDOWN_ACTIVE_CHILD = ':scope > .dropdown-menu .active';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Tab extends BaseComponent {\n    // Getters\n    static get NAME() {\n      return NAME$1;\n    } // Public\n\n\n    show() {\n      if (this._element.parentNode && this._element.parentNode.nodeType === Node.ELEMENT_NODE && this._element.classList.contains(CLASS_NAME_ACTIVE)) {\n        return;\n      }\n\n      let previous;\n      const target = getElementFromSelector(this._element);\n\n      const listElement = this._element.closest(SELECTOR_NAV_LIST_GROUP);\n\n      if (listElement) {\n        const itemSelector = listElement.nodeName === 'UL' || listElement.nodeName === 'OL' ? SELECTOR_ACTIVE_UL : SELECTOR_ACTIVE;\n        previous = SelectorEngine.find(itemSelector, listElement);\n        previous = previous[previous.length - 1];\n      }\n\n      const hideEvent = previous ? EventHandler.trigger(previous, EVENT_HIDE$1, {\n        relatedTarget: this._element\n      }) : null;\n      const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$1, {\n        relatedTarget: previous\n      });\n\n      if (showEvent.defaultPrevented || hideEvent !== null && hideEvent.defaultPrevented) {\n        return;\n      }\n\n      this._activate(this._element, listElement);\n\n      const complete = () => {\n        EventHandler.trigger(previous, EVENT_HIDDEN$1, {\n          relatedTarget: this._element\n        });\n        EventHandler.trigger(this._element, EVENT_SHOWN$1, {\n          relatedTarget: previous\n        });\n      };\n\n      if (target) {\n        this._activate(target, target.parentNode, complete);\n      } else {\n        complete();\n      }\n    } // Private\n\n\n    _activate(element, container, callback) {\n      const activeElements = container && (container.nodeName === 'UL' || container.nodeName === 'OL') ? SelectorEngine.find(SELECTOR_ACTIVE_UL, container) : SelectorEngine.children(container, SELECTOR_ACTIVE);\n      const active = activeElements[0];\n      const isTransitioning = callback && active && active.classList.contains(CLASS_NAME_FADE$1);\n\n      const complete = () => this._transitionComplete(element, active, callback);\n\n      if (active && isTransitioning) {\n        active.classList.remove(CLASS_NAME_SHOW$1);\n\n        this._queueCallback(complete, element, true);\n      } else {\n        complete();\n      }\n    }\n\n    _transitionComplete(element, active, callback) {\n      if (active) {\n        active.classList.remove(CLASS_NAME_ACTIVE);\n        const dropdownChild = SelectorEngine.findOne(SELECTOR_DROPDOWN_ACTIVE_CHILD, active.parentNode);\n\n        if (dropdownChild) {\n          dropdownChild.classList.remove(CLASS_NAME_ACTIVE);\n        }\n\n        if (active.getAttribute('role') === 'tab') {\n          active.setAttribute('aria-selected', false);\n        }\n      }\n\n      element.classList.add(CLASS_NAME_ACTIVE);\n\n      if (element.getAttribute('role') === 'tab') {\n        element.setAttribute('aria-selected', true);\n      }\n\n      reflow(element);\n\n      if (element.classList.contains(CLASS_NAME_FADE$1)) {\n        element.classList.add(CLASS_NAME_SHOW$1);\n      }\n\n      let parent = element.parentNode;\n\n      if (parent && parent.nodeName === 'LI') {\n        parent = parent.parentNode;\n      }\n\n      if (parent && parent.classList.contains(CLASS_NAME_DROPDOWN_MENU)) {\n        const dropdownElement = element.closest(SELECTOR_DROPDOWN);\n\n        if (dropdownElement) {\n          SelectorEngine.find(SELECTOR_DROPDOWN_TOGGLE, dropdownElement).forEach(dropdown => dropdown.classList.add(CLASS_NAME_ACTIVE));\n        }\n\n        element.setAttribute('aria-expanded', true);\n      }\n\n      if (callback) {\n        callback();\n      }\n    } // Static\n\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = Tab.getOrCreateInstance(this);\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(`No method named \"${config}\"`);\n          }\n\n          data[config]();\n        }\n      });\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n    if (['A', 'AREA'].includes(this.tagName)) {\n      event.preventDefault();\n    }\n\n    if (isDisabled(this)) {\n      return;\n    }\n\n    const data = Tab.getOrCreateInstance(this);\n    data.show();\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Tab to jQuery only if jQuery is present\n   */\n\n  defineJQueryPlugin(Tab);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): toast.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME = 'toast';\n  const DATA_KEY = 'bs.toast';\n  const EVENT_KEY = `.${DATA_KEY}`;\n  const EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY}`;\n  const EVENT_MOUSEOVER = `mouseover${EVENT_KEY}`;\n  const EVENT_MOUSEOUT = `mouseout${EVENT_KEY}`;\n  const EVENT_FOCUSIN = `focusin${EVENT_KEY}`;\n  const EVENT_FOCUSOUT = `focusout${EVENT_KEY}`;\n  const EVENT_HIDE = `hide${EVENT_KEY}`;\n  const EVENT_HIDDEN = `hidden${EVENT_KEY}`;\n  const EVENT_SHOW = `show${EVENT_KEY}`;\n  const EVENT_SHOWN = `shown${EVENT_KEY}`;\n  const CLASS_NAME_FADE = 'fade';\n  const CLASS_NAME_HIDE = 'hide';\n  const CLASS_NAME_SHOW = 'show';\n  const CLASS_NAME_SHOWING = 'showing';\n  const DefaultType = {\n    animation: 'boolean',\n    autohide: 'boolean',\n    delay: 'number'\n  };\n  const Default = {\n    animation: true,\n    autohide: true,\n    delay: 5000\n  };\n  const SELECTOR_DATA_DISMISS = '[data-bs-dismiss=\"toast\"]';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Toast extends BaseComponent {\n    constructor(element, config) {\n      super(element);\n      this._config = this._getConfig(config);\n      this._timeout = null;\n      this._hasMouseInteraction = false;\n      this._hasKeyboardInteraction = false;\n\n      this._setListeners();\n    } // Getters\n\n\n    static get DefaultType() {\n      return DefaultType;\n    }\n\n    static get Default() {\n      return Default;\n    }\n\n    static get NAME() {\n      return NAME;\n    } // Public\n\n\n    show() {\n      const showEvent = EventHandler.trigger(this._element, EVENT_SHOW);\n\n      if (showEvent.defaultPrevented) {\n        return;\n      }\n\n      this._clearTimeout();\n\n      if (this._config.animation) {\n        this._element.classList.add(CLASS_NAME_FADE);\n      }\n\n      const complete = () => {\n        this._element.classList.remove(CLASS_NAME_SHOWING);\n\n        this._element.classList.add(CLASS_NAME_SHOW);\n\n        EventHandler.trigger(this._element, EVENT_SHOWN);\n\n        this._maybeScheduleHide();\n      };\n\n      this._element.classList.remove(CLASS_NAME_HIDE);\n\n      reflow(this._element);\n\n      this._element.classList.add(CLASS_NAME_SHOWING);\n\n      this._queueCallback(complete, this._element, this._config.animation);\n    }\n\n    hide() {\n      if (!this._element.classList.contains(CLASS_NAME_SHOW)) {\n        return;\n      }\n\n      const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE);\n\n      if (hideEvent.defaultPrevented) {\n        return;\n      }\n\n      const complete = () => {\n        this._element.classList.add(CLASS_NAME_HIDE);\n\n        EventHandler.trigger(this._element, EVENT_HIDDEN);\n      };\n\n      this._element.classList.remove(CLASS_NAME_SHOW);\n\n      this._queueCallback(complete, this._element, this._config.animation);\n    }\n\n    dispose() {\n      this._clearTimeout();\n\n      if (this._element.classList.contains(CLASS_NAME_SHOW)) {\n        this._element.classList.remove(CLASS_NAME_SHOW);\n      }\n\n      super.dispose();\n    } // Private\n\n\n    _getConfig(config) {\n      config = { ...Default,\n        ...Manipulator.getDataAttributes(this._element),\n        ...(typeof config === 'object' && config ? config : {})\n      };\n      typeCheckConfig(NAME, config, this.constructor.DefaultType);\n      return config;\n    }\n\n    _maybeScheduleHide() {\n      if (!this._config.autohide) {\n        return;\n      }\n\n      if (this._hasMouseInteraction || this._hasKeyboardInteraction) {\n        return;\n      }\n\n      this._timeout = setTimeout(() => {\n        this.hide();\n      }, this._config.delay);\n    }\n\n    _onInteraction(event, isInteracting) {\n      switch (event.type) {\n        case 'mouseover':\n        case 'mouseout':\n          this._hasMouseInteraction = isInteracting;\n          break;\n\n        case 'focusin':\n        case 'focusout':\n          this._hasKeyboardInteraction = isInteracting;\n          break;\n      }\n\n      if (isInteracting) {\n        this._clearTimeout();\n\n        return;\n      }\n\n      const nextElement = event.relatedTarget;\n\n      if (this._element === nextElement || this._element.contains(nextElement)) {\n        return;\n      }\n\n      this._maybeScheduleHide();\n    }\n\n    _setListeners() {\n      EventHandler.on(this._element, EVENT_CLICK_DISMISS, SELECTOR_DATA_DISMISS, () => this.hide());\n      EventHandler.on(this._element, EVENT_MOUSEOVER, event => this._onInteraction(event, true));\n      EventHandler.on(this._element, EVENT_MOUSEOUT, event => this._onInteraction(event, false));\n      EventHandler.on(this._element, EVENT_FOCUSIN, event => this._onInteraction(event, true));\n      EventHandler.on(this._element, EVENT_FOCUSOUT, event => this._onInteraction(event, false));\n    }\n\n    _clearTimeout() {\n      clearTimeout(this._timeout);\n      this._timeout = null;\n    } // Static\n\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = Toast.getOrCreateInstance(this, config);\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(`No method named \"${config}\"`);\n          }\n\n          data[config](this);\n        }\n      });\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Toast to jQuery only if jQuery is present\n   */\n\n\n  defineJQueryPlugin(Toast);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): index.umd.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  var index_umd = {\n    Alert,\n    Button,\n    Carousel,\n    Collapse,\n    Dropdown,\n    Modal,\n    Offcanvas,\n    Popover,\n    ScrollSpy,\n    Tab,\n    Toast,\n    Tooltip\n  };\n\n  return index_umd;\n\n})));\n//# sourceMappingURL=bootstrap.bundle.js.map\n"
  },
  {
    "path": "src/sourceDev.WebApp/SharedThemes/superhero/wwwroot/js/bootstrap.esm.js",
    "content": "/*!\n  * Bootstrap v5.0.2 (https://getbootstrap.com/)\n  * Copyright 2011-2021 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)\n  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n  */\nimport * as Popper from '@popperjs/core';\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): dom/selector-engine.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\nconst NODE_TEXT = 3;\nconst SelectorEngine = {\n  find(selector, element = document.documentElement) {\n    return [].concat(...Element.prototype.querySelectorAll.call(element, selector));\n  },\n\n  findOne(selector, element = document.documentElement) {\n    return Element.prototype.querySelector.call(element, selector);\n  },\n\n  children(element, selector) {\n    return [].concat(...element.children).filter(child => child.matches(selector));\n  },\n\n  parents(element, selector) {\n    const parents = [];\n    let ancestor = element.parentNode;\n\n    while (ancestor && ancestor.nodeType === Node.ELEMENT_NODE && ancestor.nodeType !== NODE_TEXT) {\n      if (ancestor.matches(selector)) {\n        parents.push(ancestor);\n      }\n\n      ancestor = ancestor.parentNode;\n    }\n\n    return parents;\n  },\n\n  prev(element, selector) {\n    let previous = element.previousElementSibling;\n\n    while (previous) {\n      if (previous.matches(selector)) {\n        return [previous];\n      }\n\n      previous = previous.previousElementSibling;\n    }\n\n    return [];\n  },\n\n  next(element, selector) {\n    let next = element.nextElementSibling;\n\n    while (next) {\n      if (next.matches(selector)) {\n        return [next];\n      }\n\n      next = next.nextElementSibling;\n    }\n\n    return [];\n  }\n\n};\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): util/index.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst MAX_UID = 1000000;\nconst MILLISECONDS_MULTIPLIER = 1000;\nconst TRANSITION_END = 'transitionend'; // Shoutout AngusCroll (https://goo.gl/pxwQGp)\n\nconst toType = obj => {\n  if (obj === null || obj === undefined) {\n    return `${obj}`;\n  }\n\n  return {}.toString.call(obj).match(/\\s([a-z]+)/i)[1].toLowerCase();\n};\n/**\n * --------------------------------------------------------------------------\n * Public Util Api\n * --------------------------------------------------------------------------\n */\n\n\nconst getUID = prefix => {\n  do {\n    prefix += Math.floor(Math.random() * MAX_UID);\n  } while (document.getElementById(prefix));\n\n  return prefix;\n};\n\nconst getSelector = element => {\n  let selector = element.getAttribute('data-bs-target');\n\n  if (!selector || selector === '#') {\n    let hrefAttr = element.getAttribute('href'); // The only valid content that could double as a selector are IDs or classes,\n    // so everything starting with `#` or `.`. If a \"real\" URL is used as the selector,\n    // `document.querySelector` will rightfully complain it is invalid.\n    // See https://github.com/twbs/bootstrap/issues/32273\n\n    if (!hrefAttr || !hrefAttr.includes('#') && !hrefAttr.startsWith('.')) {\n      return null;\n    } // Just in case some CMS puts out a full URL with the anchor appended\n\n\n    if (hrefAttr.includes('#') && !hrefAttr.startsWith('#')) {\n      hrefAttr = `#${hrefAttr.split('#')[1]}`;\n    }\n\n    selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : null;\n  }\n\n  return selector;\n};\n\nconst getSelectorFromElement = element => {\n  const selector = getSelector(element);\n\n  if (selector) {\n    return document.querySelector(selector) ? selector : null;\n  }\n\n  return null;\n};\n\nconst getElementFromSelector = element => {\n  const selector = getSelector(element);\n  return selector ? document.querySelector(selector) : null;\n};\n\nconst getTransitionDurationFromElement = element => {\n  if (!element) {\n    return 0;\n  } // Get transition-duration of the element\n\n\n  let {\n    transitionDuration,\n    transitionDelay\n  } = window.getComputedStyle(element);\n  const floatTransitionDuration = Number.parseFloat(transitionDuration);\n  const floatTransitionDelay = Number.parseFloat(transitionDelay); // Return 0 if element or transition duration is not found\n\n  if (!floatTransitionDuration && !floatTransitionDelay) {\n    return 0;\n  } // If multiple durations are defined, take the first\n\n\n  transitionDuration = transitionDuration.split(',')[0];\n  transitionDelay = transitionDelay.split(',')[0];\n  return (Number.parseFloat(transitionDuration) + Number.parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER;\n};\n\nconst triggerTransitionEnd = element => {\n  element.dispatchEvent(new Event(TRANSITION_END));\n};\n\nconst isElement = obj => {\n  if (!obj || typeof obj !== 'object') {\n    return false;\n  }\n\n  if (typeof obj.jquery !== 'undefined') {\n    obj = obj[0];\n  }\n\n  return typeof obj.nodeType !== 'undefined';\n};\n\nconst getElement = obj => {\n  if (isElement(obj)) {\n    // it's a jQuery object or a node element\n    return obj.jquery ? obj[0] : obj;\n  }\n\n  if (typeof obj === 'string' && obj.length > 0) {\n    return SelectorEngine.findOne(obj);\n  }\n\n  return null;\n};\n\nconst typeCheckConfig = (componentName, config, configTypes) => {\n  Object.keys(configTypes).forEach(property => {\n    const expectedTypes = configTypes[property];\n    const value = config[property];\n    const valueType = value && isElement(value) ? 'element' : toType(value);\n\n    if (!new RegExp(expectedTypes).test(valueType)) {\n      throw new TypeError(`${componentName.toUpperCase()}: Option \"${property}\" provided type \"${valueType}\" but expected type \"${expectedTypes}\".`);\n    }\n  });\n};\n\nconst isVisible = element => {\n  if (!isElement(element) || element.getClientRects().length === 0) {\n    return false;\n  }\n\n  return getComputedStyle(element).getPropertyValue('visibility') === 'visible';\n};\n\nconst isDisabled = element => {\n  if (!element || element.nodeType !== Node.ELEMENT_NODE) {\n    return true;\n  }\n\n  if (element.classList.contains('disabled')) {\n    return true;\n  }\n\n  if (typeof element.disabled !== 'undefined') {\n    return element.disabled;\n  }\n\n  return element.hasAttribute('disabled') && element.getAttribute('disabled') !== 'false';\n};\n\nconst findShadowRoot = element => {\n  if (!document.documentElement.attachShadow) {\n    return null;\n  } // Can find the shadow root otherwise it'll return the document\n\n\n  if (typeof element.getRootNode === 'function') {\n    const root = element.getRootNode();\n    return root instanceof ShadowRoot ? root : null;\n  }\n\n  if (element instanceof ShadowRoot) {\n    return element;\n  } // when we don't find a shadow root\n\n\n  if (!element.parentNode) {\n    return null;\n  }\n\n  return findShadowRoot(element.parentNode);\n};\n\nconst noop = () => {};\n\nconst reflow = element => element.offsetHeight;\n\nconst getjQuery = () => {\n  const {\n    jQuery\n  } = window;\n\n  if (jQuery && !document.body.hasAttribute('data-bs-no-jquery')) {\n    return jQuery;\n  }\n\n  return null;\n};\n\nconst DOMContentLoadedCallbacks = [];\n\nconst onDOMContentLoaded = callback => {\n  if (document.readyState === 'loading') {\n    // add listener on the first call when the document is in loading state\n    if (!DOMContentLoadedCallbacks.length) {\n      document.addEventListener('DOMContentLoaded', () => {\n        DOMContentLoadedCallbacks.forEach(callback => callback());\n      });\n    }\n\n    DOMContentLoadedCallbacks.push(callback);\n  } else {\n    callback();\n  }\n};\n\nconst isRTL = () => document.documentElement.dir === 'rtl';\n\nconst defineJQueryPlugin = plugin => {\n  onDOMContentLoaded(() => {\n    const $ = getjQuery();\n    /* istanbul ignore if */\n\n    if ($) {\n      const name = plugin.NAME;\n      const JQUERY_NO_CONFLICT = $.fn[name];\n      $.fn[name] = plugin.jQueryInterface;\n      $.fn[name].Constructor = plugin;\n\n      $.fn[name].noConflict = () => {\n        $.fn[name] = JQUERY_NO_CONFLICT;\n        return plugin.jQueryInterface;\n      };\n    }\n  });\n};\n\nconst execute = callback => {\n  if (typeof callback === 'function') {\n    callback();\n  }\n};\n\nconst executeAfterTransition = (callback, transitionElement, waitForTransition = true) => {\n  if (!waitForTransition) {\n    execute(callback);\n    return;\n  }\n\n  const durationPadding = 5;\n  const emulatedDuration = getTransitionDurationFromElement(transitionElement) + durationPadding;\n  let called = false;\n\n  const handler = ({\n    target\n  }) => {\n    if (target !== transitionElement) {\n      return;\n    }\n\n    called = true;\n    transitionElement.removeEventListener(TRANSITION_END, handler);\n    execute(callback);\n  };\n\n  transitionElement.addEventListener(TRANSITION_END, handler);\n  setTimeout(() => {\n    if (!called) {\n      triggerTransitionEnd(transitionElement);\n    }\n  }, emulatedDuration);\n};\n/**\n * Return the previous/next element of a list.\n *\n * @param {array} list    The list of elements\n * @param activeElement   The active element\n * @param shouldGetNext   Choose to get next or previous element\n * @param isCycleAllowed\n * @return {Element|elem} The proper element\n */\n\n\nconst getNextActiveElement = (list, activeElement, shouldGetNext, isCycleAllowed) => {\n  let index = list.indexOf(activeElement); // if the element does not exist in the list return an element depending on the direction and if cycle is allowed\n\n  if (index === -1) {\n    return list[!shouldGetNext && isCycleAllowed ? list.length - 1 : 0];\n  }\n\n  const listLength = list.length;\n  index += shouldGetNext ? 1 : -1;\n\n  if (isCycleAllowed) {\n    index = (index + listLength) % listLength;\n  }\n\n  return list[Math.max(0, Math.min(index, listLength - 1))];\n};\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): dom/event-handler.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst namespaceRegex = /[^.]*(?=\\..*)\\.|.*/;\nconst stripNameRegex = /\\..*/;\nconst stripUidRegex = /::\\d+$/;\nconst eventRegistry = {}; // Events storage\n\nlet uidEvent = 1;\nconst customEvents = {\n  mouseenter: 'mouseover',\n  mouseleave: 'mouseout'\n};\nconst customEventsRegex = /^(mouseenter|mouseleave)/i;\nconst nativeEvents = new Set(['click', 'dblclick', 'mouseup', 'mousedown', 'contextmenu', 'mousewheel', 'DOMMouseScroll', 'mouseover', 'mouseout', 'mousemove', 'selectstart', 'selectend', 'keydown', 'keypress', 'keyup', 'orientationchange', 'touchstart', 'touchmove', 'touchend', 'touchcancel', 'pointerdown', 'pointermove', 'pointerup', 'pointerleave', 'pointercancel', 'gesturestart', 'gesturechange', 'gestureend', 'focus', 'blur', 'change', 'reset', 'select', 'submit', 'focusin', 'focusout', 'load', 'unload', 'beforeunload', 'resize', 'move', 'DOMContentLoaded', 'readystatechange', 'error', 'abort', 'scroll']);\n/**\n * ------------------------------------------------------------------------\n * Private methods\n * ------------------------------------------------------------------------\n */\n\nfunction getUidEvent(element, uid) {\n  return uid && `${uid}::${uidEvent++}` || element.uidEvent || uidEvent++;\n}\n\nfunction getEvent(element) {\n  const uid = getUidEvent(element);\n  element.uidEvent = uid;\n  eventRegistry[uid] = eventRegistry[uid] || {};\n  return eventRegistry[uid];\n}\n\nfunction bootstrapHandler(element, fn) {\n  return function handler(event) {\n    event.delegateTarget = element;\n\n    if (handler.oneOff) {\n      EventHandler.off(element, event.type, fn);\n    }\n\n    return fn.apply(element, [event]);\n  };\n}\n\nfunction bootstrapDelegationHandler(element, selector, fn) {\n  return function handler(event) {\n    const domElements = element.querySelectorAll(selector);\n\n    for (let {\n      target\n    } = event; target && target !== this; target = target.parentNode) {\n      for (let i = domElements.length; i--;) {\n        if (domElements[i] === target) {\n          event.delegateTarget = target;\n\n          if (handler.oneOff) {\n            // eslint-disable-next-line unicorn/consistent-destructuring\n            EventHandler.off(element, event.type, selector, fn);\n          }\n\n          return fn.apply(target, [event]);\n        }\n      }\n    } // To please ESLint\n\n\n    return null;\n  };\n}\n\nfunction findHandler(events, handler, delegationSelector = null) {\n  const uidEventList = Object.keys(events);\n\n  for (let i = 0, len = uidEventList.length; i < len; i++) {\n    const event = events[uidEventList[i]];\n\n    if (event.originalHandler === handler && event.delegationSelector === delegationSelector) {\n      return event;\n    }\n  }\n\n  return null;\n}\n\nfunction normalizeParams(originalTypeEvent, handler, delegationFn) {\n  const delegation = typeof handler === 'string';\n  const originalHandler = delegation ? delegationFn : handler;\n  let typeEvent = getTypeEvent(originalTypeEvent);\n  const isNative = nativeEvents.has(typeEvent);\n\n  if (!isNative) {\n    typeEvent = originalTypeEvent;\n  }\n\n  return [delegation, originalHandler, typeEvent];\n}\n\nfunction addHandler(element, originalTypeEvent, handler, delegationFn, oneOff) {\n  if (typeof originalTypeEvent !== 'string' || !element) {\n    return;\n  }\n\n  if (!handler) {\n    handler = delegationFn;\n    delegationFn = null;\n  } // in case of mouseenter or mouseleave wrap the handler within a function that checks for its DOM position\n  // this prevents the handler from being dispatched the same way as mouseover or mouseout does\n\n\n  if (customEventsRegex.test(originalTypeEvent)) {\n    const wrapFn = fn => {\n      return function (event) {\n        if (!event.relatedTarget || event.relatedTarget !== event.delegateTarget && !event.delegateTarget.contains(event.relatedTarget)) {\n          return fn.call(this, event);\n        }\n      };\n    };\n\n    if (delegationFn) {\n      delegationFn = wrapFn(delegationFn);\n    } else {\n      handler = wrapFn(handler);\n    }\n  }\n\n  const [delegation, originalHandler, typeEvent] = normalizeParams(originalTypeEvent, handler, delegationFn);\n  const events = getEvent(element);\n  const handlers = events[typeEvent] || (events[typeEvent] = {});\n  const previousFn = findHandler(handlers, originalHandler, delegation ? handler : null);\n\n  if (previousFn) {\n    previousFn.oneOff = previousFn.oneOff && oneOff;\n    return;\n  }\n\n  const uid = getUidEvent(originalHandler, originalTypeEvent.replace(namespaceRegex, ''));\n  const fn = delegation ? bootstrapDelegationHandler(element, handler, delegationFn) : bootstrapHandler(element, handler);\n  fn.delegationSelector = delegation ? handler : null;\n  fn.originalHandler = originalHandler;\n  fn.oneOff = oneOff;\n  fn.uidEvent = uid;\n  handlers[uid] = fn;\n  element.addEventListener(typeEvent, fn, delegation);\n}\n\nfunction removeHandler(element, events, typeEvent, handler, delegationSelector) {\n  const fn = findHandler(events[typeEvent], handler, delegationSelector);\n\n  if (!fn) {\n    return;\n  }\n\n  element.removeEventListener(typeEvent, fn, Boolean(delegationSelector));\n  delete events[typeEvent][fn.uidEvent];\n}\n\nfunction removeNamespacedHandlers(element, events, typeEvent, namespace) {\n  const storeElementEvent = events[typeEvent] || {};\n  Object.keys(storeElementEvent).forEach(handlerKey => {\n    if (handlerKey.includes(namespace)) {\n      const event = storeElementEvent[handlerKey];\n      removeHandler(element, events, typeEvent, event.originalHandler, event.delegationSelector);\n    }\n  });\n}\n\nfunction getTypeEvent(event) {\n  // allow to get the native events from namespaced events ('click.bs.button' --> 'click')\n  event = event.replace(stripNameRegex, '');\n  return customEvents[event] || event;\n}\n\nconst EventHandler = {\n  on(element, event, handler, delegationFn) {\n    addHandler(element, event, handler, delegationFn, false);\n  },\n\n  one(element, event, handler, delegationFn) {\n    addHandler(element, event, handler, delegationFn, true);\n  },\n\n  off(element, originalTypeEvent, handler, delegationFn) {\n    if (typeof originalTypeEvent !== 'string' || !element) {\n      return;\n    }\n\n    const [delegation, originalHandler, typeEvent] = normalizeParams(originalTypeEvent, handler, delegationFn);\n    const inNamespace = typeEvent !== originalTypeEvent;\n    const events = getEvent(element);\n    const isNamespace = originalTypeEvent.startsWith('.');\n\n    if (typeof originalHandler !== 'undefined') {\n      // Simplest case: handler is passed, remove that listener ONLY.\n      if (!events || !events[typeEvent]) {\n        return;\n      }\n\n      removeHandler(element, events, typeEvent, originalHandler, delegation ? handler : null);\n      return;\n    }\n\n    if (isNamespace) {\n      Object.keys(events).forEach(elementEvent => {\n        removeNamespacedHandlers(element, events, elementEvent, originalTypeEvent.slice(1));\n      });\n    }\n\n    const storeElementEvent = events[typeEvent] || {};\n    Object.keys(storeElementEvent).forEach(keyHandlers => {\n      const handlerKey = keyHandlers.replace(stripUidRegex, '');\n\n      if (!inNamespace || originalTypeEvent.includes(handlerKey)) {\n        const event = storeElementEvent[keyHandlers];\n        removeHandler(element, events, typeEvent, event.originalHandler, event.delegationSelector);\n      }\n    });\n  },\n\n  trigger(element, event, args) {\n    if (typeof event !== 'string' || !element) {\n      return null;\n    }\n\n    const $ = getjQuery();\n    const typeEvent = getTypeEvent(event);\n    const inNamespace = event !== typeEvent;\n    const isNative = nativeEvents.has(typeEvent);\n    let jQueryEvent;\n    let bubbles = true;\n    let nativeDispatch = true;\n    let defaultPrevented = false;\n    let evt = null;\n\n    if (inNamespace && $) {\n      jQueryEvent = $.Event(event, args);\n      $(element).trigger(jQueryEvent);\n      bubbles = !jQueryEvent.isPropagationStopped();\n      nativeDispatch = !jQueryEvent.isImmediatePropagationStopped();\n      defaultPrevented = jQueryEvent.isDefaultPrevented();\n    }\n\n    if (isNative) {\n      evt = document.createEvent('HTMLEvents');\n      evt.initEvent(typeEvent, bubbles, true);\n    } else {\n      evt = new CustomEvent(event, {\n        bubbles,\n        cancelable: true\n      });\n    } // merge custom information in our event\n\n\n    if (typeof args !== 'undefined') {\n      Object.keys(args).forEach(key => {\n        Object.defineProperty(evt, key, {\n          get() {\n            return args[key];\n          }\n\n        });\n      });\n    }\n\n    if (defaultPrevented) {\n      evt.preventDefault();\n    }\n\n    if (nativeDispatch) {\n      element.dispatchEvent(evt);\n    }\n\n    if (evt.defaultPrevented && typeof jQueryEvent !== 'undefined') {\n      jQueryEvent.preventDefault();\n    }\n\n    return evt;\n  }\n\n};\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): dom/data.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\nconst elementMap = new Map();\nvar Data = {\n  set(element, key, instance) {\n    if (!elementMap.has(element)) {\n      elementMap.set(element, new Map());\n    }\n\n    const instanceMap = elementMap.get(element); // make it clear we only want one instance per element\n    // can be removed later when multiple key/instances are fine to be used\n\n    if (!instanceMap.has(key) && instanceMap.size !== 0) {\n      // eslint-disable-next-line no-console\n      console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(instanceMap.keys())[0]}.`);\n      return;\n    }\n\n    instanceMap.set(key, instance);\n  },\n\n  get(element, key) {\n    if (elementMap.has(element)) {\n      return elementMap.get(element).get(key) || null;\n    }\n\n    return null;\n  },\n\n  remove(element, key) {\n    if (!elementMap.has(element)) {\n      return;\n    }\n\n    const instanceMap = elementMap.get(element);\n    instanceMap.delete(key); // free up element references if there are no instances left for an element\n\n    if (instanceMap.size === 0) {\n      elementMap.delete(element);\n    }\n  }\n\n};\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): base-component.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst VERSION = '5.0.2';\n\nclass BaseComponent {\n  constructor(element) {\n    element = getElement(element);\n\n    if (!element) {\n      return;\n    }\n\n    this._element = element;\n    Data.set(this._element, this.constructor.DATA_KEY, this);\n  }\n\n  dispose() {\n    Data.remove(this._element, this.constructor.DATA_KEY);\n    EventHandler.off(this._element, this.constructor.EVENT_KEY);\n    Object.getOwnPropertyNames(this).forEach(propertyName => {\n      this[propertyName] = null;\n    });\n  }\n\n  _queueCallback(callback, element, isAnimated = true) {\n    executeAfterTransition(callback, element, isAnimated);\n  }\n  /** Static */\n\n\n  static getInstance(element) {\n    return Data.get(element, this.DATA_KEY);\n  }\n\n  static getOrCreateInstance(element, config = {}) {\n    return this.getInstance(element) || new this(element, typeof config === 'object' ? config : null);\n  }\n\n  static get VERSION() {\n    return VERSION;\n  }\n\n  static get NAME() {\n    throw new Error('You have to implement the static method \"NAME\", for each component!');\n  }\n\n  static get DATA_KEY() {\n    return `bs.${this.NAME}`;\n  }\n\n  static get EVENT_KEY() {\n    return `.${this.DATA_KEY}`;\n  }\n\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): alert.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$c = 'alert';\nconst DATA_KEY$b = 'bs.alert';\nconst EVENT_KEY$b = `.${DATA_KEY$b}`;\nconst DATA_API_KEY$8 = '.data-api';\nconst SELECTOR_DISMISS = '[data-bs-dismiss=\"alert\"]';\nconst EVENT_CLOSE = `close${EVENT_KEY$b}`;\nconst EVENT_CLOSED = `closed${EVENT_KEY$b}`;\nconst EVENT_CLICK_DATA_API$7 = `click${EVENT_KEY$b}${DATA_API_KEY$8}`;\nconst CLASS_NAME_ALERT = 'alert';\nconst CLASS_NAME_FADE$6 = 'fade';\nconst CLASS_NAME_SHOW$9 = 'show';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Alert extends BaseComponent {\n  // Getters\n  static get NAME() {\n    return NAME$c;\n  } // Public\n\n\n  close(element) {\n    const rootElement = element ? this._getRootElement(element) : this._element;\n\n    const customEvent = this._triggerCloseEvent(rootElement);\n\n    if (customEvent === null || customEvent.defaultPrevented) {\n      return;\n    }\n\n    this._removeElement(rootElement);\n  } // Private\n\n\n  _getRootElement(element) {\n    return getElementFromSelector(element) || element.closest(`.${CLASS_NAME_ALERT}`);\n  }\n\n  _triggerCloseEvent(element) {\n    return EventHandler.trigger(element, EVENT_CLOSE);\n  }\n\n  _removeElement(element) {\n    element.classList.remove(CLASS_NAME_SHOW$9);\n    const isAnimated = element.classList.contains(CLASS_NAME_FADE$6);\n\n    this._queueCallback(() => this._destroyElement(element), element, isAnimated);\n  }\n\n  _destroyElement(element) {\n    element.remove();\n    EventHandler.trigger(element, EVENT_CLOSED);\n  } // Static\n\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Alert.getOrCreateInstance(this);\n\n      if (config === 'close') {\n        data[config](this);\n      }\n    });\n  }\n\n  static handleDismiss(alertInstance) {\n    return function (event) {\n      if (event) {\n        event.preventDefault();\n      }\n\n      alertInstance.close(this);\n    };\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$7, SELECTOR_DISMISS, Alert.handleDismiss(new Alert()));\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Alert to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Alert);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): button.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$b = 'button';\nconst DATA_KEY$a = 'bs.button';\nconst EVENT_KEY$a = `.${DATA_KEY$a}`;\nconst DATA_API_KEY$7 = '.data-api';\nconst CLASS_NAME_ACTIVE$3 = 'active';\nconst SELECTOR_DATA_TOGGLE$5 = '[data-bs-toggle=\"button\"]';\nconst EVENT_CLICK_DATA_API$6 = `click${EVENT_KEY$a}${DATA_API_KEY$7}`;\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Button extends BaseComponent {\n  // Getters\n  static get NAME() {\n    return NAME$b;\n  } // Public\n\n\n  toggle() {\n    // Toggle class and sync the `aria-pressed` attribute with the return value of the `.toggle()` method\n    this._element.setAttribute('aria-pressed', this._element.classList.toggle(CLASS_NAME_ACTIVE$3));\n  } // Static\n\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Button.getOrCreateInstance(this);\n\n      if (config === 'toggle') {\n        data[config]();\n      }\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$6, SELECTOR_DATA_TOGGLE$5, event => {\n  event.preventDefault();\n  const button = event.target.closest(SELECTOR_DATA_TOGGLE$5);\n  const data = Button.getOrCreateInstance(button);\n  data.toggle();\n});\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Button to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Button);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): dom/manipulator.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\nfunction normalizeData(val) {\n  if (val === 'true') {\n    return true;\n  }\n\n  if (val === 'false') {\n    return false;\n  }\n\n  if (val === Number(val).toString()) {\n    return Number(val);\n  }\n\n  if (val === '' || val === 'null') {\n    return null;\n  }\n\n  return val;\n}\n\nfunction normalizeDataKey(key) {\n  return key.replace(/[A-Z]/g, chr => `-${chr.toLowerCase()}`);\n}\n\nconst Manipulator = {\n  setDataAttribute(element, key, value) {\n    element.setAttribute(`data-bs-${normalizeDataKey(key)}`, value);\n  },\n\n  removeDataAttribute(element, key) {\n    element.removeAttribute(`data-bs-${normalizeDataKey(key)}`);\n  },\n\n  getDataAttributes(element) {\n    if (!element) {\n      return {};\n    }\n\n    const attributes = {};\n    Object.keys(element.dataset).filter(key => key.startsWith('bs')).forEach(key => {\n      let pureKey = key.replace(/^bs/, '');\n      pureKey = pureKey.charAt(0).toLowerCase() + pureKey.slice(1, pureKey.length);\n      attributes[pureKey] = normalizeData(element.dataset[key]);\n    });\n    return attributes;\n  },\n\n  getDataAttribute(element, key) {\n    return normalizeData(element.getAttribute(`data-bs-${normalizeDataKey(key)}`));\n  },\n\n  offset(element) {\n    const rect = element.getBoundingClientRect();\n    return {\n      top: rect.top + document.body.scrollTop,\n      left: rect.left + document.body.scrollLeft\n    };\n  },\n\n  position(element) {\n    return {\n      top: element.offsetTop,\n      left: element.offsetLeft\n    };\n  }\n\n};\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): carousel.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$a = 'carousel';\nconst DATA_KEY$9 = 'bs.carousel';\nconst EVENT_KEY$9 = `.${DATA_KEY$9}`;\nconst DATA_API_KEY$6 = '.data-api';\nconst ARROW_LEFT_KEY = 'ArrowLeft';\nconst ARROW_RIGHT_KEY = 'ArrowRight';\nconst TOUCHEVENT_COMPAT_WAIT = 500; // Time for mouse compat events to fire after touch\n\nconst SWIPE_THRESHOLD = 40;\nconst Default$9 = {\n  interval: 5000,\n  keyboard: true,\n  slide: false,\n  pause: 'hover',\n  wrap: true,\n  touch: true\n};\nconst DefaultType$9 = {\n  interval: '(number|boolean)',\n  keyboard: 'boolean',\n  slide: '(boolean|string)',\n  pause: '(string|boolean)',\n  wrap: 'boolean',\n  touch: 'boolean'\n};\nconst ORDER_NEXT = 'next';\nconst ORDER_PREV = 'prev';\nconst DIRECTION_LEFT = 'left';\nconst DIRECTION_RIGHT = 'right';\nconst KEY_TO_DIRECTION = {\n  [ARROW_LEFT_KEY]: DIRECTION_RIGHT,\n  [ARROW_RIGHT_KEY]: DIRECTION_LEFT\n};\nconst EVENT_SLIDE = `slide${EVENT_KEY$9}`;\nconst EVENT_SLID = `slid${EVENT_KEY$9}`;\nconst EVENT_KEYDOWN = `keydown${EVENT_KEY$9}`;\nconst EVENT_MOUSEENTER = `mouseenter${EVENT_KEY$9}`;\nconst EVENT_MOUSELEAVE = `mouseleave${EVENT_KEY$9}`;\nconst EVENT_TOUCHSTART = `touchstart${EVENT_KEY$9}`;\nconst EVENT_TOUCHMOVE = `touchmove${EVENT_KEY$9}`;\nconst EVENT_TOUCHEND = `touchend${EVENT_KEY$9}`;\nconst EVENT_POINTERDOWN = `pointerdown${EVENT_KEY$9}`;\nconst EVENT_POINTERUP = `pointerup${EVENT_KEY$9}`;\nconst EVENT_DRAG_START = `dragstart${EVENT_KEY$9}`;\nconst EVENT_LOAD_DATA_API$2 = `load${EVENT_KEY$9}${DATA_API_KEY$6}`;\nconst EVENT_CLICK_DATA_API$5 = `click${EVENT_KEY$9}${DATA_API_KEY$6}`;\nconst CLASS_NAME_CAROUSEL = 'carousel';\nconst CLASS_NAME_ACTIVE$2 = 'active';\nconst CLASS_NAME_SLIDE = 'slide';\nconst CLASS_NAME_END = 'carousel-item-end';\nconst CLASS_NAME_START = 'carousel-item-start';\nconst CLASS_NAME_NEXT = 'carousel-item-next';\nconst CLASS_NAME_PREV = 'carousel-item-prev';\nconst CLASS_NAME_POINTER_EVENT = 'pointer-event';\nconst SELECTOR_ACTIVE$1 = '.active';\nconst SELECTOR_ACTIVE_ITEM = '.active.carousel-item';\nconst SELECTOR_ITEM = '.carousel-item';\nconst SELECTOR_ITEM_IMG = '.carousel-item img';\nconst SELECTOR_NEXT_PREV = '.carousel-item-next, .carousel-item-prev';\nconst SELECTOR_INDICATORS = '.carousel-indicators';\nconst SELECTOR_INDICATOR = '[data-bs-target]';\nconst SELECTOR_DATA_SLIDE = '[data-bs-slide], [data-bs-slide-to]';\nconst SELECTOR_DATA_RIDE = '[data-bs-ride=\"carousel\"]';\nconst POINTER_TYPE_TOUCH = 'touch';\nconst POINTER_TYPE_PEN = 'pen';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Carousel extends BaseComponent {\n  constructor(element, config) {\n    super(element);\n    this._items = null;\n    this._interval = null;\n    this._activeElement = null;\n    this._isPaused = false;\n    this._isSliding = false;\n    this.touchTimeout = null;\n    this.touchStartX = 0;\n    this.touchDeltaX = 0;\n    this._config = this._getConfig(config);\n    this._indicatorsElement = SelectorEngine.findOne(SELECTOR_INDICATORS, this._element);\n    this._touchSupported = 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0;\n    this._pointerEvent = Boolean(window.PointerEvent);\n\n    this._addEventListeners();\n  } // Getters\n\n\n  static get Default() {\n    return Default$9;\n  }\n\n  static get NAME() {\n    return NAME$a;\n  } // Public\n\n\n  next() {\n    this._slide(ORDER_NEXT);\n  }\n\n  nextWhenVisible() {\n    // Don't call next when the page isn't visible\n    // or the carousel or its parent isn't visible\n    if (!document.hidden && isVisible(this._element)) {\n      this.next();\n    }\n  }\n\n  prev() {\n    this._slide(ORDER_PREV);\n  }\n\n  pause(event) {\n    if (!event) {\n      this._isPaused = true;\n    }\n\n    if (SelectorEngine.findOne(SELECTOR_NEXT_PREV, this._element)) {\n      triggerTransitionEnd(this._element);\n      this.cycle(true);\n    }\n\n    clearInterval(this._interval);\n    this._interval = null;\n  }\n\n  cycle(event) {\n    if (!event) {\n      this._isPaused = false;\n    }\n\n    if (this._interval) {\n      clearInterval(this._interval);\n      this._interval = null;\n    }\n\n    if (this._config && this._config.interval && !this._isPaused) {\n      this._updateInterval();\n\n      this._interval = setInterval((document.visibilityState ? this.nextWhenVisible : this.next).bind(this), this._config.interval);\n    }\n  }\n\n  to(index) {\n    this._activeElement = SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element);\n\n    const activeIndex = this._getItemIndex(this._activeElement);\n\n    if (index > this._items.length - 1 || index < 0) {\n      return;\n    }\n\n    if (this._isSliding) {\n      EventHandler.one(this._element, EVENT_SLID, () => this.to(index));\n      return;\n    }\n\n    if (activeIndex === index) {\n      this.pause();\n      this.cycle();\n      return;\n    }\n\n    const order = index > activeIndex ? ORDER_NEXT : ORDER_PREV;\n\n    this._slide(order, this._items[index]);\n  } // Private\n\n\n  _getConfig(config) {\n    config = { ...Default$9,\n      ...Manipulator.getDataAttributes(this._element),\n      ...(typeof config === 'object' ? config : {})\n    };\n    typeCheckConfig(NAME$a, config, DefaultType$9);\n    return config;\n  }\n\n  _handleSwipe() {\n    const absDeltax = Math.abs(this.touchDeltaX);\n\n    if (absDeltax <= SWIPE_THRESHOLD) {\n      return;\n    }\n\n    const direction = absDeltax / this.touchDeltaX;\n    this.touchDeltaX = 0;\n\n    if (!direction) {\n      return;\n    }\n\n    this._slide(direction > 0 ? DIRECTION_RIGHT : DIRECTION_LEFT);\n  }\n\n  _addEventListeners() {\n    if (this._config.keyboard) {\n      EventHandler.on(this._element, EVENT_KEYDOWN, event => this._keydown(event));\n    }\n\n    if (this._config.pause === 'hover') {\n      EventHandler.on(this._element, EVENT_MOUSEENTER, event => this.pause(event));\n      EventHandler.on(this._element, EVENT_MOUSELEAVE, event => this.cycle(event));\n    }\n\n    if (this._config.touch && this._touchSupported) {\n      this._addTouchEventListeners();\n    }\n  }\n\n  _addTouchEventListeners() {\n    const start = event => {\n      if (this._pointerEvent && (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH)) {\n        this.touchStartX = event.clientX;\n      } else if (!this._pointerEvent) {\n        this.touchStartX = event.touches[0].clientX;\n      }\n    };\n\n    const move = event => {\n      // ensure swiping with one touch and not pinching\n      this.touchDeltaX = event.touches && event.touches.length > 1 ? 0 : event.touches[0].clientX - this.touchStartX;\n    };\n\n    const end = event => {\n      if (this._pointerEvent && (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH)) {\n        this.touchDeltaX = event.clientX - this.touchStartX;\n      }\n\n      this._handleSwipe();\n\n      if (this._config.pause === 'hover') {\n        // If it's a touch-enabled device, mouseenter/leave are fired as\n        // part of the mouse compatibility events on first tap - the carousel\n        // would stop cycling until user tapped out of it;\n        // here, we listen for touchend, explicitly pause the carousel\n        // (as if it's the second time we tap on it, mouseenter compat event\n        // is NOT fired) and after a timeout (to allow for mouse compatibility\n        // events to fire) we explicitly restart cycling\n        this.pause();\n\n        if (this.touchTimeout) {\n          clearTimeout(this.touchTimeout);\n        }\n\n        this.touchTimeout = setTimeout(event => this.cycle(event), TOUCHEVENT_COMPAT_WAIT + this._config.interval);\n      }\n    };\n\n    SelectorEngine.find(SELECTOR_ITEM_IMG, this._element).forEach(itemImg => {\n      EventHandler.on(itemImg, EVENT_DRAG_START, e => e.preventDefault());\n    });\n\n    if (this._pointerEvent) {\n      EventHandler.on(this._element, EVENT_POINTERDOWN, event => start(event));\n      EventHandler.on(this._element, EVENT_POINTERUP, event => end(event));\n\n      this._element.classList.add(CLASS_NAME_POINTER_EVENT);\n    } else {\n      EventHandler.on(this._element, EVENT_TOUCHSTART, event => start(event));\n      EventHandler.on(this._element, EVENT_TOUCHMOVE, event => move(event));\n      EventHandler.on(this._element, EVENT_TOUCHEND, event => end(event));\n    }\n  }\n\n  _keydown(event) {\n    if (/input|textarea/i.test(event.target.tagName)) {\n      return;\n    }\n\n    const direction = KEY_TO_DIRECTION[event.key];\n\n    if (direction) {\n      event.preventDefault();\n\n      this._slide(direction);\n    }\n  }\n\n  _getItemIndex(element) {\n    this._items = element && element.parentNode ? SelectorEngine.find(SELECTOR_ITEM, element.parentNode) : [];\n    return this._items.indexOf(element);\n  }\n\n  _getItemByOrder(order, activeElement) {\n    const isNext = order === ORDER_NEXT;\n    return getNextActiveElement(this._items, activeElement, isNext, this._config.wrap);\n  }\n\n  _triggerSlideEvent(relatedTarget, eventDirectionName) {\n    const targetIndex = this._getItemIndex(relatedTarget);\n\n    const fromIndex = this._getItemIndex(SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element));\n\n    return EventHandler.trigger(this._element, EVENT_SLIDE, {\n      relatedTarget,\n      direction: eventDirectionName,\n      from: fromIndex,\n      to: targetIndex\n    });\n  }\n\n  _setActiveIndicatorElement(element) {\n    if (this._indicatorsElement) {\n      const activeIndicator = SelectorEngine.findOne(SELECTOR_ACTIVE$1, this._indicatorsElement);\n      activeIndicator.classList.remove(CLASS_NAME_ACTIVE$2);\n      activeIndicator.removeAttribute('aria-current');\n      const indicators = SelectorEngine.find(SELECTOR_INDICATOR, this._indicatorsElement);\n\n      for (let i = 0; i < indicators.length; i++) {\n        if (Number.parseInt(indicators[i].getAttribute('data-bs-slide-to'), 10) === this._getItemIndex(element)) {\n          indicators[i].classList.add(CLASS_NAME_ACTIVE$2);\n          indicators[i].setAttribute('aria-current', 'true');\n          break;\n        }\n      }\n    }\n  }\n\n  _updateInterval() {\n    const element = this._activeElement || SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element);\n\n    if (!element) {\n      return;\n    }\n\n    const elementInterval = Number.parseInt(element.getAttribute('data-bs-interval'), 10);\n\n    if (elementInterval) {\n      this._config.defaultInterval = this._config.defaultInterval || this._config.interval;\n      this._config.interval = elementInterval;\n    } else {\n      this._config.interval = this._config.defaultInterval || this._config.interval;\n    }\n  }\n\n  _slide(directionOrOrder, element) {\n    const order = this._directionToOrder(directionOrOrder);\n\n    const activeElement = SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element);\n\n    const activeElementIndex = this._getItemIndex(activeElement);\n\n    const nextElement = element || this._getItemByOrder(order, activeElement);\n\n    const nextElementIndex = this._getItemIndex(nextElement);\n\n    const isCycling = Boolean(this._interval);\n    const isNext = order === ORDER_NEXT;\n    const directionalClassName = isNext ? CLASS_NAME_START : CLASS_NAME_END;\n    const orderClassName = isNext ? CLASS_NAME_NEXT : CLASS_NAME_PREV;\n\n    const eventDirectionName = this._orderToDirection(order);\n\n    if (nextElement && nextElement.classList.contains(CLASS_NAME_ACTIVE$2)) {\n      this._isSliding = false;\n      return;\n    }\n\n    if (this._isSliding) {\n      return;\n    }\n\n    const slideEvent = this._triggerSlideEvent(nextElement, eventDirectionName);\n\n    if (slideEvent.defaultPrevented) {\n      return;\n    }\n\n    if (!activeElement || !nextElement) {\n      // Some weirdness is happening, so we bail\n      return;\n    }\n\n    this._isSliding = true;\n\n    if (isCycling) {\n      this.pause();\n    }\n\n    this._setActiveIndicatorElement(nextElement);\n\n    this._activeElement = nextElement;\n\n    const triggerSlidEvent = () => {\n      EventHandler.trigger(this._element, EVENT_SLID, {\n        relatedTarget: nextElement,\n        direction: eventDirectionName,\n        from: activeElementIndex,\n        to: nextElementIndex\n      });\n    };\n\n    if (this._element.classList.contains(CLASS_NAME_SLIDE)) {\n      nextElement.classList.add(orderClassName);\n      reflow(nextElement);\n      activeElement.classList.add(directionalClassName);\n      nextElement.classList.add(directionalClassName);\n\n      const completeCallBack = () => {\n        nextElement.classList.remove(directionalClassName, orderClassName);\n        nextElement.classList.add(CLASS_NAME_ACTIVE$2);\n        activeElement.classList.remove(CLASS_NAME_ACTIVE$2, orderClassName, directionalClassName);\n        this._isSliding = false;\n        setTimeout(triggerSlidEvent, 0);\n      };\n\n      this._queueCallback(completeCallBack, activeElement, true);\n    } else {\n      activeElement.classList.remove(CLASS_NAME_ACTIVE$2);\n      nextElement.classList.add(CLASS_NAME_ACTIVE$2);\n      this._isSliding = false;\n      triggerSlidEvent();\n    }\n\n    if (isCycling) {\n      this.cycle();\n    }\n  }\n\n  _directionToOrder(direction) {\n    if (![DIRECTION_RIGHT, DIRECTION_LEFT].includes(direction)) {\n      return direction;\n    }\n\n    if (isRTL()) {\n      return direction === DIRECTION_LEFT ? ORDER_PREV : ORDER_NEXT;\n    }\n\n    return direction === DIRECTION_LEFT ? ORDER_NEXT : ORDER_PREV;\n  }\n\n  _orderToDirection(order) {\n    if (![ORDER_NEXT, ORDER_PREV].includes(order)) {\n      return order;\n    }\n\n    if (isRTL()) {\n      return order === ORDER_PREV ? DIRECTION_LEFT : DIRECTION_RIGHT;\n    }\n\n    return order === ORDER_PREV ? DIRECTION_RIGHT : DIRECTION_LEFT;\n  } // Static\n\n\n  static carouselInterface(element, config) {\n    const data = Carousel.getOrCreateInstance(element, config);\n    let {\n      _config\n    } = data;\n\n    if (typeof config === 'object') {\n      _config = { ..._config,\n        ...config\n      };\n    }\n\n    const action = typeof config === 'string' ? config : _config.slide;\n\n    if (typeof config === 'number') {\n      data.to(config);\n    } else if (typeof action === 'string') {\n      if (typeof data[action] === 'undefined') {\n        throw new TypeError(`No method named \"${action}\"`);\n      }\n\n      data[action]();\n    } else if (_config.interval && _config.ride) {\n      data.pause();\n      data.cycle();\n    }\n  }\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      Carousel.carouselInterface(this, config);\n    });\n  }\n\n  static dataApiClickHandler(event) {\n    const target = getElementFromSelector(this);\n\n    if (!target || !target.classList.contains(CLASS_NAME_CAROUSEL)) {\n      return;\n    }\n\n    const config = { ...Manipulator.getDataAttributes(target),\n      ...Manipulator.getDataAttributes(this)\n    };\n    const slideIndex = this.getAttribute('data-bs-slide-to');\n\n    if (slideIndex) {\n      config.interval = false;\n    }\n\n    Carousel.carouselInterface(target, config);\n\n    if (slideIndex) {\n      Carousel.getInstance(target).to(slideIndex);\n    }\n\n    event.preventDefault();\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$5, SELECTOR_DATA_SLIDE, Carousel.dataApiClickHandler);\nEventHandler.on(window, EVENT_LOAD_DATA_API$2, () => {\n  const carousels = SelectorEngine.find(SELECTOR_DATA_RIDE);\n\n  for (let i = 0, len = carousels.length; i < len; i++) {\n    Carousel.carouselInterface(carousels[i], Carousel.getInstance(carousels[i]));\n  }\n});\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Carousel to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Carousel);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): collapse.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$9 = 'collapse';\nconst DATA_KEY$8 = 'bs.collapse';\nconst EVENT_KEY$8 = `.${DATA_KEY$8}`;\nconst DATA_API_KEY$5 = '.data-api';\nconst Default$8 = {\n  toggle: true,\n  parent: ''\n};\nconst DefaultType$8 = {\n  toggle: 'boolean',\n  parent: '(string|element)'\n};\nconst EVENT_SHOW$5 = `show${EVENT_KEY$8}`;\nconst EVENT_SHOWN$5 = `shown${EVENT_KEY$8}`;\nconst EVENT_HIDE$5 = `hide${EVENT_KEY$8}`;\nconst EVENT_HIDDEN$5 = `hidden${EVENT_KEY$8}`;\nconst EVENT_CLICK_DATA_API$4 = `click${EVENT_KEY$8}${DATA_API_KEY$5}`;\nconst CLASS_NAME_SHOW$8 = 'show';\nconst CLASS_NAME_COLLAPSE = 'collapse';\nconst CLASS_NAME_COLLAPSING = 'collapsing';\nconst CLASS_NAME_COLLAPSED = 'collapsed';\nconst WIDTH = 'width';\nconst HEIGHT = 'height';\nconst SELECTOR_ACTIVES = '.show, .collapsing';\nconst SELECTOR_DATA_TOGGLE$4 = '[data-bs-toggle=\"collapse\"]';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Collapse extends BaseComponent {\n  constructor(element, config) {\n    super(element);\n    this._isTransitioning = false;\n    this._config = this._getConfig(config);\n    this._triggerArray = SelectorEngine.find(`${SELECTOR_DATA_TOGGLE$4}[href=\"#${this._element.id}\"],` + `${SELECTOR_DATA_TOGGLE$4}[data-bs-target=\"#${this._element.id}\"]`);\n    const toggleList = SelectorEngine.find(SELECTOR_DATA_TOGGLE$4);\n\n    for (let i = 0, len = toggleList.length; i < len; i++) {\n      const elem = toggleList[i];\n      const selector = getSelectorFromElement(elem);\n      const filterElement = SelectorEngine.find(selector).filter(foundElem => foundElem === this._element);\n\n      if (selector !== null && filterElement.length) {\n        this._selector = selector;\n\n        this._triggerArray.push(elem);\n      }\n    }\n\n    this._parent = this._config.parent ? this._getParent() : null;\n\n    if (!this._config.parent) {\n      this._addAriaAndCollapsedClass(this._element, this._triggerArray);\n    }\n\n    if (this._config.toggle) {\n      this.toggle();\n    }\n  } // Getters\n\n\n  static get Default() {\n    return Default$8;\n  }\n\n  static get NAME() {\n    return NAME$9;\n  } // Public\n\n\n  toggle() {\n    if (this._element.classList.contains(CLASS_NAME_SHOW$8)) {\n      this.hide();\n    } else {\n      this.show();\n    }\n  }\n\n  show() {\n    if (this._isTransitioning || this._element.classList.contains(CLASS_NAME_SHOW$8)) {\n      return;\n    }\n\n    let actives;\n    let activesData;\n\n    if (this._parent) {\n      actives = SelectorEngine.find(SELECTOR_ACTIVES, this._parent).filter(elem => {\n        if (typeof this._config.parent === 'string') {\n          return elem.getAttribute('data-bs-parent') === this._config.parent;\n        }\n\n        return elem.classList.contains(CLASS_NAME_COLLAPSE);\n      });\n\n      if (actives.length === 0) {\n        actives = null;\n      }\n    }\n\n    const container = SelectorEngine.findOne(this._selector);\n\n    if (actives) {\n      const tempActiveData = actives.find(elem => container !== elem);\n      activesData = tempActiveData ? Collapse.getInstance(tempActiveData) : null;\n\n      if (activesData && activesData._isTransitioning) {\n        return;\n      }\n    }\n\n    const startEvent = EventHandler.trigger(this._element, EVENT_SHOW$5);\n\n    if (startEvent.defaultPrevented) {\n      return;\n    }\n\n    if (actives) {\n      actives.forEach(elemActive => {\n        if (container !== elemActive) {\n          Collapse.collapseInterface(elemActive, 'hide');\n        }\n\n        if (!activesData) {\n          Data.set(elemActive, DATA_KEY$8, null);\n        }\n      });\n    }\n\n    const dimension = this._getDimension();\n\n    this._element.classList.remove(CLASS_NAME_COLLAPSE);\n\n    this._element.classList.add(CLASS_NAME_COLLAPSING);\n\n    this._element.style[dimension] = 0;\n\n    if (this._triggerArray.length) {\n      this._triggerArray.forEach(element => {\n        element.classList.remove(CLASS_NAME_COLLAPSED);\n        element.setAttribute('aria-expanded', true);\n      });\n    }\n\n    this.setTransitioning(true);\n\n    const complete = () => {\n      this._element.classList.remove(CLASS_NAME_COLLAPSING);\n\n      this._element.classList.add(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$8);\n\n      this._element.style[dimension] = '';\n      this.setTransitioning(false);\n      EventHandler.trigger(this._element, EVENT_SHOWN$5);\n    };\n\n    const capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1);\n    const scrollSize = `scroll${capitalizedDimension}`;\n\n    this._queueCallback(complete, this._element, true);\n\n    this._element.style[dimension] = `${this._element[scrollSize]}px`;\n  }\n\n  hide() {\n    if (this._isTransitioning || !this._element.classList.contains(CLASS_NAME_SHOW$8)) {\n      return;\n    }\n\n    const startEvent = EventHandler.trigger(this._element, EVENT_HIDE$5);\n\n    if (startEvent.defaultPrevented) {\n      return;\n    }\n\n    const dimension = this._getDimension();\n\n    this._element.style[dimension] = `${this._element.getBoundingClientRect()[dimension]}px`;\n    reflow(this._element);\n\n    this._element.classList.add(CLASS_NAME_COLLAPSING);\n\n    this._element.classList.remove(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$8);\n\n    const triggerArrayLength = this._triggerArray.length;\n\n    if (triggerArrayLength > 0) {\n      for (let i = 0; i < triggerArrayLength; i++) {\n        const trigger = this._triggerArray[i];\n        const elem = getElementFromSelector(trigger);\n\n        if (elem && !elem.classList.contains(CLASS_NAME_SHOW$8)) {\n          trigger.classList.add(CLASS_NAME_COLLAPSED);\n          trigger.setAttribute('aria-expanded', false);\n        }\n      }\n    }\n\n    this.setTransitioning(true);\n\n    const complete = () => {\n      this.setTransitioning(false);\n\n      this._element.classList.remove(CLASS_NAME_COLLAPSING);\n\n      this._element.classList.add(CLASS_NAME_COLLAPSE);\n\n      EventHandler.trigger(this._element, EVENT_HIDDEN$5);\n    };\n\n    this._element.style[dimension] = '';\n\n    this._queueCallback(complete, this._element, true);\n  }\n\n  setTransitioning(isTransitioning) {\n    this._isTransitioning = isTransitioning;\n  } // Private\n\n\n  _getConfig(config) {\n    config = { ...Default$8,\n      ...config\n    };\n    config.toggle = Boolean(config.toggle); // Coerce string values\n\n    typeCheckConfig(NAME$9, config, DefaultType$8);\n    return config;\n  }\n\n  _getDimension() {\n    return this._element.classList.contains(WIDTH) ? WIDTH : HEIGHT;\n  }\n\n  _getParent() {\n    let {\n      parent\n    } = this._config;\n    parent = getElement(parent);\n    const selector = `${SELECTOR_DATA_TOGGLE$4}[data-bs-parent=\"${parent}\"]`;\n    SelectorEngine.find(selector, parent).forEach(element => {\n      const selected = getElementFromSelector(element);\n\n      this._addAriaAndCollapsedClass(selected, [element]);\n    });\n    return parent;\n  }\n\n  _addAriaAndCollapsedClass(element, triggerArray) {\n    if (!element || !triggerArray.length) {\n      return;\n    }\n\n    const isOpen = element.classList.contains(CLASS_NAME_SHOW$8);\n    triggerArray.forEach(elem => {\n      if (isOpen) {\n        elem.classList.remove(CLASS_NAME_COLLAPSED);\n      } else {\n        elem.classList.add(CLASS_NAME_COLLAPSED);\n      }\n\n      elem.setAttribute('aria-expanded', isOpen);\n    });\n  } // Static\n\n\n  static collapseInterface(element, config) {\n    let data = Collapse.getInstance(element);\n    const _config = { ...Default$8,\n      ...Manipulator.getDataAttributes(element),\n      ...(typeof config === 'object' && config ? config : {})\n    };\n\n    if (!data && _config.toggle && typeof config === 'string' && /show|hide/.test(config)) {\n      _config.toggle = false;\n    }\n\n    if (!data) {\n      data = new Collapse(element, _config);\n    }\n\n    if (typeof config === 'string') {\n      if (typeof data[config] === 'undefined') {\n        throw new TypeError(`No method named \"${config}\"`);\n      }\n\n      data[config]();\n    }\n  }\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      Collapse.collapseInterface(this, config);\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$4, SELECTOR_DATA_TOGGLE$4, function (event) {\n  // preventDefault only for <a> elements (which change the URL) not inside the collapsible element\n  if (event.target.tagName === 'A' || event.delegateTarget && event.delegateTarget.tagName === 'A') {\n    event.preventDefault();\n  }\n\n  const triggerData = Manipulator.getDataAttributes(this);\n  const selector = getSelectorFromElement(this);\n  const selectorElements = SelectorEngine.find(selector);\n  selectorElements.forEach(element => {\n    const data = Collapse.getInstance(element);\n    let config;\n\n    if (data) {\n      // update parent attribute\n      if (data._parent === null && typeof triggerData.parent === 'string') {\n        data._config.parent = triggerData.parent;\n        data._parent = data._getParent();\n      }\n\n      config = 'toggle';\n    } else {\n      config = triggerData;\n    }\n\n    Collapse.collapseInterface(element, config);\n  });\n});\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Collapse to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Collapse);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): dropdown.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$8 = 'dropdown';\nconst DATA_KEY$7 = 'bs.dropdown';\nconst EVENT_KEY$7 = `.${DATA_KEY$7}`;\nconst DATA_API_KEY$4 = '.data-api';\nconst ESCAPE_KEY$2 = 'Escape';\nconst SPACE_KEY = 'Space';\nconst TAB_KEY = 'Tab';\nconst ARROW_UP_KEY = 'ArrowUp';\nconst ARROW_DOWN_KEY = 'ArrowDown';\nconst RIGHT_MOUSE_BUTTON = 2; // MouseEvent.button value for the secondary button, usually the right button\n\nconst REGEXP_KEYDOWN = new RegExp(`${ARROW_UP_KEY}|${ARROW_DOWN_KEY}|${ESCAPE_KEY$2}`);\nconst EVENT_HIDE$4 = `hide${EVENT_KEY$7}`;\nconst EVENT_HIDDEN$4 = `hidden${EVENT_KEY$7}`;\nconst EVENT_SHOW$4 = `show${EVENT_KEY$7}`;\nconst EVENT_SHOWN$4 = `shown${EVENT_KEY$7}`;\nconst EVENT_CLICK = `click${EVENT_KEY$7}`;\nconst EVENT_CLICK_DATA_API$3 = `click${EVENT_KEY$7}${DATA_API_KEY$4}`;\nconst EVENT_KEYDOWN_DATA_API = `keydown${EVENT_KEY$7}${DATA_API_KEY$4}`;\nconst EVENT_KEYUP_DATA_API = `keyup${EVENT_KEY$7}${DATA_API_KEY$4}`;\nconst CLASS_NAME_SHOW$7 = 'show';\nconst CLASS_NAME_DROPUP = 'dropup';\nconst CLASS_NAME_DROPEND = 'dropend';\nconst CLASS_NAME_DROPSTART = 'dropstart';\nconst CLASS_NAME_NAVBAR = 'navbar';\nconst SELECTOR_DATA_TOGGLE$3 = '[data-bs-toggle=\"dropdown\"]';\nconst SELECTOR_MENU = '.dropdown-menu';\nconst SELECTOR_NAVBAR_NAV = '.navbar-nav';\nconst SELECTOR_VISIBLE_ITEMS = '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)';\nconst PLACEMENT_TOP = isRTL() ? 'top-end' : 'top-start';\nconst PLACEMENT_TOPEND = isRTL() ? 'top-start' : 'top-end';\nconst PLACEMENT_BOTTOM = isRTL() ? 'bottom-end' : 'bottom-start';\nconst PLACEMENT_BOTTOMEND = isRTL() ? 'bottom-start' : 'bottom-end';\nconst PLACEMENT_RIGHT = isRTL() ? 'left-start' : 'right-start';\nconst PLACEMENT_LEFT = isRTL() ? 'right-start' : 'left-start';\nconst Default$7 = {\n  offset: [0, 2],\n  boundary: 'clippingParents',\n  reference: 'toggle',\n  display: 'dynamic',\n  popperConfig: null,\n  autoClose: true\n};\nconst DefaultType$7 = {\n  offset: '(array|string|function)',\n  boundary: '(string|element)',\n  reference: '(string|element|object)',\n  display: 'string',\n  popperConfig: '(null|object|function)',\n  autoClose: '(boolean|string)'\n};\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Dropdown extends BaseComponent {\n  constructor(element, config) {\n    super(element);\n    this._popper = null;\n    this._config = this._getConfig(config);\n    this._menu = this._getMenuElement();\n    this._inNavbar = this._detectNavbar();\n\n    this._addEventListeners();\n  } // Getters\n\n\n  static get Default() {\n    return Default$7;\n  }\n\n  static get DefaultType() {\n    return DefaultType$7;\n  }\n\n  static get NAME() {\n    return NAME$8;\n  } // Public\n\n\n  toggle() {\n    if (isDisabled(this._element)) {\n      return;\n    }\n\n    const isActive = this._element.classList.contains(CLASS_NAME_SHOW$7);\n\n    if (isActive) {\n      this.hide();\n      return;\n    }\n\n    this.show();\n  }\n\n  show() {\n    if (isDisabled(this._element) || this._menu.classList.contains(CLASS_NAME_SHOW$7)) {\n      return;\n    }\n\n    const parent = Dropdown.getParentFromElement(this._element);\n    const relatedTarget = {\n      relatedTarget: this._element\n    };\n    const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$4, relatedTarget);\n\n    if (showEvent.defaultPrevented) {\n      return;\n    } // Totally disable Popper for Dropdowns in Navbar\n\n\n    if (this._inNavbar) {\n      Manipulator.setDataAttribute(this._menu, 'popper', 'none');\n    } else {\n      if (typeof Popper === 'undefined') {\n        throw new TypeError('Bootstrap\\'s dropdowns require Popper (https://popper.js.org)');\n      }\n\n      let referenceElement = this._element;\n\n      if (this._config.reference === 'parent') {\n        referenceElement = parent;\n      } else if (isElement(this._config.reference)) {\n        referenceElement = getElement(this._config.reference);\n      } else if (typeof this._config.reference === 'object') {\n        referenceElement = this._config.reference;\n      }\n\n      const popperConfig = this._getPopperConfig();\n\n      const isDisplayStatic = popperConfig.modifiers.find(modifier => modifier.name === 'applyStyles' && modifier.enabled === false);\n      this._popper = Popper.createPopper(referenceElement, this._menu, popperConfig);\n\n      if (isDisplayStatic) {\n        Manipulator.setDataAttribute(this._menu, 'popper', 'static');\n      }\n    } // If this is a touch-enabled device we add extra\n    // empty mouseover listeners to the body's immediate children;\n    // only needed because of broken event delegation on iOS\n    // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n\n\n    if ('ontouchstart' in document.documentElement && !parent.closest(SELECTOR_NAVBAR_NAV)) {\n      [].concat(...document.body.children).forEach(elem => EventHandler.on(elem, 'mouseover', noop));\n    }\n\n    this._element.focus();\n\n    this._element.setAttribute('aria-expanded', true);\n\n    this._menu.classList.toggle(CLASS_NAME_SHOW$7);\n\n    this._element.classList.toggle(CLASS_NAME_SHOW$7);\n\n    EventHandler.trigger(this._element, EVENT_SHOWN$4, relatedTarget);\n  }\n\n  hide() {\n    if (isDisabled(this._element) || !this._menu.classList.contains(CLASS_NAME_SHOW$7)) {\n      return;\n    }\n\n    const relatedTarget = {\n      relatedTarget: this._element\n    };\n\n    this._completeHide(relatedTarget);\n  }\n\n  dispose() {\n    if (this._popper) {\n      this._popper.destroy();\n    }\n\n    super.dispose();\n  }\n\n  update() {\n    this._inNavbar = this._detectNavbar();\n\n    if (this._popper) {\n      this._popper.update();\n    }\n  } // Private\n\n\n  _addEventListeners() {\n    EventHandler.on(this._element, EVENT_CLICK, event => {\n      event.preventDefault();\n      this.toggle();\n    });\n  }\n\n  _completeHide(relatedTarget) {\n    const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$4, relatedTarget);\n\n    if (hideEvent.defaultPrevented) {\n      return;\n    } // If this is a touch-enabled device we remove the extra\n    // empty mouseover listeners we added for iOS support\n\n\n    if ('ontouchstart' in document.documentElement) {\n      [].concat(...document.body.children).forEach(elem => EventHandler.off(elem, 'mouseover', noop));\n    }\n\n    if (this._popper) {\n      this._popper.destroy();\n    }\n\n    this._menu.classList.remove(CLASS_NAME_SHOW$7);\n\n    this._element.classList.remove(CLASS_NAME_SHOW$7);\n\n    this._element.setAttribute('aria-expanded', 'false');\n\n    Manipulator.removeDataAttribute(this._menu, 'popper');\n    EventHandler.trigger(this._element, EVENT_HIDDEN$4, relatedTarget);\n  }\n\n  _getConfig(config) {\n    config = { ...this.constructor.Default,\n      ...Manipulator.getDataAttributes(this._element),\n      ...config\n    };\n    typeCheckConfig(NAME$8, config, this.constructor.DefaultType);\n\n    if (typeof config.reference === 'object' && !isElement(config.reference) && typeof config.reference.getBoundingClientRect !== 'function') {\n      // Popper virtual elements require a getBoundingClientRect method\n      throw new TypeError(`${NAME$8.toUpperCase()}: Option \"reference\" provided type \"object\" without a required \"getBoundingClientRect\" method.`);\n    }\n\n    return config;\n  }\n\n  _getMenuElement() {\n    return SelectorEngine.next(this._element, SELECTOR_MENU)[0];\n  }\n\n  _getPlacement() {\n    const parentDropdown = this._element.parentNode;\n\n    if (parentDropdown.classList.contains(CLASS_NAME_DROPEND)) {\n      return PLACEMENT_RIGHT;\n    }\n\n    if (parentDropdown.classList.contains(CLASS_NAME_DROPSTART)) {\n      return PLACEMENT_LEFT;\n    } // We need to trim the value because custom properties can also include spaces\n\n\n    const isEnd = getComputedStyle(this._menu).getPropertyValue('--bs-position').trim() === 'end';\n\n    if (parentDropdown.classList.contains(CLASS_NAME_DROPUP)) {\n      return isEnd ? PLACEMENT_TOPEND : PLACEMENT_TOP;\n    }\n\n    return isEnd ? PLACEMENT_BOTTOMEND : PLACEMENT_BOTTOM;\n  }\n\n  _detectNavbar() {\n    return this._element.closest(`.${CLASS_NAME_NAVBAR}`) !== null;\n  }\n\n  _getOffset() {\n    const {\n      offset\n    } = this._config;\n\n    if (typeof offset === 'string') {\n      return offset.split(',').map(val => Number.parseInt(val, 10));\n    }\n\n    if (typeof offset === 'function') {\n      return popperData => offset(popperData, this._element);\n    }\n\n    return offset;\n  }\n\n  _getPopperConfig() {\n    const defaultBsPopperConfig = {\n      placement: this._getPlacement(),\n      modifiers: [{\n        name: 'preventOverflow',\n        options: {\n          boundary: this._config.boundary\n        }\n      }, {\n        name: 'offset',\n        options: {\n          offset: this._getOffset()\n        }\n      }]\n    }; // Disable Popper if we have a static display\n\n    if (this._config.display === 'static') {\n      defaultBsPopperConfig.modifiers = [{\n        name: 'applyStyles',\n        enabled: false\n      }];\n    }\n\n    return { ...defaultBsPopperConfig,\n      ...(typeof this._config.popperConfig === 'function' ? this._config.popperConfig(defaultBsPopperConfig) : this._config.popperConfig)\n    };\n  }\n\n  _selectMenuItem({\n    key,\n    target\n  }) {\n    const items = SelectorEngine.find(SELECTOR_VISIBLE_ITEMS, this._menu).filter(isVisible);\n\n    if (!items.length) {\n      return;\n    } // if target isn't included in items (e.g. when expanding the dropdown)\n    // allow cycling to get the last item in case key equals ARROW_UP_KEY\n\n\n    getNextActiveElement(items, target, key === ARROW_DOWN_KEY, !items.includes(target)).focus();\n  } // Static\n\n\n  static dropdownInterface(element, config) {\n    const data = Dropdown.getOrCreateInstance(element, config);\n\n    if (typeof config === 'string') {\n      if (typeof data[config] === 'undefined') {\n        throw new TypeError(`No method named \"${config}\"`);\n      }\n\n      data[config]();\n    }\n  }\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      Dropdown.dropdownInterface(this, config);\n    });\n  }\n\n  static clearMenus(event) {\n    if (event && (event.button === RIGHT_MOUSE_BUTTON || event.type === 'keyup' && event.key !== TAB_KEY)) {\n      return;\n    }\n\n    const toggles = SelectorEngine.find(SELECTOR_DATA_TOGGLE$3);\n\n    for (let i = 0, len = toggles.length; i < len; i++) {\n      const context = Dropdown.getInstance(toggles[i]);\n\n      if (!context || context._config.autoClose === false) {\n        continue;\n      }\n\n      if (!context._element.classList.contains(CLASS_NAME_SHOW$7)) {\n        continue;\n      }\n\n      const relatedTarget = {\n        relatedTarget: context._element\n      };\n\n      if (event) {\n        const composedPath = event.composedPath();\n        const isMenuTarget = composedPath.includes(context._menu);\n\n        if (composedPath.includes(context._element) || context._config.autoClose === 'inside' && !isMenuTarget || context._config.autoClose === 'outside' && isMenuTarget) {\n          continue;\n        } // Tab navigation through the dropdown menu or events from contained inputs shouldn't close the menu\n\n\n        if (context._menu.contains(event.target) && (event.type === 'keyup' && event.key === TAB_KEY || /input|select|option|textarea|form/i.test(event.target.tagName))) {\n          continue;\n        }\n\n        if (event.type === 'click') {\n          relatedTarget.clickEvent = event;\n        }\n      }\n\n      context._completeHide(relatedTarget);\n    }\n  }\n\n  static getParentFromElement(element) {\n    return getElementFromSelector(element) || element.parentNode;\n  }\n\n  static dataApiKeydownHandler(event) {\n    // If not input/textarea:\n    //  - And not a key in REGEXP_KEYDOWN => not a dropdown command\n    // If input/textarea:\n    //  - If space key => not a dropdown command\n    //  - If key is other than escape\n    //    - If key is not up or down => not a dropdown command\n    //    - If trigger inside the menu => not a dropdown command\n    if (/input|textarea/i.test(event.target.tagName) ? event.key === SPACE_KEY || event.key !== ESCAPE_KEY$2 && (event.key !== ARROW_DOWN_KEY && event.key !== ARROW_UP_KEY || event.target.closest(SELECTOR_MENU)) : !REGEXP_KEYDOWN.test(event.key)) {\n      return;\n    }\n\n    const isActive = this.classList.contains(CLASS_NAME_SHOW$7);\n\n    if (!isActive && event.key === ESCAPE_KEY$2) {\n      return;\n    }\n\n    event.preventDefault();\n    event.stopPropagation();\n\n    if (isDisabled(this)) {\n      return;\n    }\n\n    const getToggleButton = () => this.matches(SELECTOR_DATA_TOGGLE$3) ? this : SelectorEngine.prev(this, SELECTOR_DATA_TOGGLE$3)[0];\n\n    if (event.key === ESCAPE_KEY$2) {\n      getToggleButton().focus();\n      Dropdown.clearMenus();\n      return;\n    }\n\n    if (event.key === ARROW_UP_KEY || event.key === ARROW_DOWN_KEY) {\n      if (!isActive) {\n        getToggleButton().click();\n      }\n\n      Dropdown.getInstance(getToggleButton())._selectMenuItem(event);\n\n      return;\n    }\n\n    if (!isActive || event.key === SPACE_KEY) {\n      Dropdown.clearMenus();\n    }\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_DATA_TOGGLE$3, Dropdown.dataApiKeydownHandler);\nEventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown.dataApiKeydownHandler);\nEventHandler.on(document, EVENT_CLICK_DATA_API$3, Dropdown.clearMenus);\nEventHandler.on(document, EVENT_KEYUP_DATA_API, Dropdown.clearMenus);\nEventHandler.on(document, EVENT_CLICK_DATA_API$3, SELECTOR_DATA_TOGGLE$3, function (event) {\n  event.preventDefault();\n  Dropdown.dropdownInterface(this);\n});\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Dropdown to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Dropdown);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): util/scrollBar.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\nconst SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top';\nconst SELECTOR_STICKY_CONTENT = '.sticky-top';\n\nclass ScrollBarHelper {\n  constructor() {\n    this._element = document.body;\n  }\n\n  getWidth() {\n    // https://developer.mozilla.org/en-US/docs/Web/API/Window/innerWidth#usage_notes\n    const documentWidth = document.documentElement.clientWidth;\n    return Math.abs(window.innerWidth - documentWidth);\n  }\n\n  hide() {\n    const width = this.getWidth();\n\n    this._disableOverFlow(); // give padding to element to balance the hidden scrollbar width\n\n\n    this._setElementAttributes(this._element, 'paddingRight', calculatedValue => calculatedValue + width); // trick: We adjust positive paddingRight and negative marginRight to sticky-top elements to keep showing fullwidth\n\n\n    this._setElementAttributes(SELECTOR_FIXED_CONTENT, 'paddingRight', calculatedValue => calculatedValue + width);\n\n    this._setElementAttributes(SELECTOR_STICKY_CONTENT, 'marginRight', calculatedValue => calculatedValue - width);\n  }\n\n  _disableOverFlow() {\n    this._saveInitialAttribute(this._element, 'overflow');\n\n    this._element.style.overflow = 'hidden';\n  }\n\n  _setElementAttributes(selector, styleProp, callback) {\n    const scrollbarWidth = this.getWidth();\n\n    const manipulationCallBack = element => {\n      if (element !== this._element && window.innerWidth > element.clientWidth + scrollbarWidth) {\n        return;\n      }\n\n      this._saveInitialAttribute(element, styleProp);\n\n      const calculatedValue = window.getComputedStyle(element)[styleProp];\n      element.style[styleProp] = `${callback(Number.parseFloat(calculatedValue))}px`;\n    };\n\n    this._applyManipulationCallback(selector, manipulationCallBack);\n  }\n\n  reset() {\n    this._resetElementAttributes(this._element, 'overflow');\n\n    this._resetElementAttributes(this._element, 'paddingRight');\n\n    this._resetElementAttributes(SELECTOR_FIXED_CONTENT, 'paddingRight');\n\n    this._resetElementAttributes(SELECTOR_STICKY_CONTENT, 'marginRight');\n  }\n\n  _saveInitialAttribute(element, styleProp) {\n    const actualValue = element.style[styleProp];\n\n    if (actualValue) {\n      Manipulator.setDataAttribute(element, styleProp, actualValue);\n    }\n  }\n\n  _resetElementAttributes(selector, styleProp) {\n    const manipulationCallBack = element => {\n      const value = Manipulator.getDataAttribute(element, styleProp);\n\n      if (typeof value === 'undefined') {\n        element.style.removeProperty(styleProp);\n      } else {\n        Manipulator.removeDataAttribute(element, styleProp);\n        element.style[styleProp] = value;\n      }\n    };\n\n    this._applyManipulationCallback(selector, manipulationCallBack);\n  }\n\n  _applyManipulationCallback(selector, callBack) {\n    if (isElement(selector)) {\n      callBack(selector);\n    } else {\n      SelectorEngine.find(selector, this._element).forEach(callBack);\n    }\n  }\n\n  isOverflowing() {\n    return this.getWidth() > 0;\n  }\n\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): util/backdrop.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\nconst Default$6 = {\n  isVisible: true,\n  // if false, we use the backdrop helper without adding any element to the dom\n  isAnimated: false,\n  rootElement: 'body',\n  // give the choice to place backdrop under different elements\n  clickCallback: null\n};\nconst DefaultType$6 = {\n  isVisible: 'boolean',\n  isAnimated: 'boolean',\n  rootElement: '(element|string)',\n  clickCallback: '(function|null)'\n};\nconst NAME$7 = 'backdrop';\nconst CLASS_NAME_BACKDROP = 'modal-backdrop';\nconst CLASS_NAME_FADE$5 = 'fade';\nconst CLASS_NAME_SHOW$6 = 'show';\nconst EVENT_MOUSEDOWN = `mousedown.bs.${NAME$7}`;\n\nclass Backdrop {\n  constructor(config) {\n    this._config = this._getConfig(config);\n    this._isAppended = false;\n    this._element = null;\n  }\n\n  show(callback) {\n    if (!this._config.isVisible) {\n      execute(callback);\n      return;\n    }\n\n    this._append();\n\n    if (this._config.isAnimated) {\n      reflow(this._getElement());\n    }\n\n    this._getElement().classList.add(CLASS_NAME_SHOW$6);\n\n    this._emulateAnimation(() => {\n      execute(callback);\n    });\n  }\n\n  hide(callback) {\n    if (!this._config.isVisible) {\n      execute(callback);\n      return;\n    }\n\n    this._getElement().classList.remove(CLASS_NAME_SHOW$6);\n\n    this._emulateAnimation(() => {\n      this.dispose();\n      execute(callback);\n    });\n  } // Private\n\n\n  _getElement() {\n    if (!this._element) {\n      const backdrop = document.createElement('div');\n      backdrop.className = CLASS_NAME_BACKDROP;\n\n      if (this._config.isAnimated) {\n        backdrop.classList.add(CLASS_NAME_FADE$5);\n      }\n\n      this._element = backdrop;\n    }\n\n    return this._element;\n  }\n\n  _getConfig(config) {\n    config = { ...Default$6,\n      ...(typeof config === 'object' ? config : {})\n    }; // use getElement() with the default \"body\" to get a fresh Element on each instantiation\n\n    config.rootElement = getElement(config.rootElement);\n    typeCheckConfig(NAME$7, config, DefaultType$6);\n    return config;\n  }\n\n  _append() {\n    if (this._isAppended) {\n      return;\n    }\n\n    this._config.rootElement.appendChild(this._getElement());\n\n    EventHandler.on(this._getElement(), EVENT_MOUSEDOWN, () => {\n      execute(this._config.clickCallback);\n    });\n    this._isAppended = true;\n  }\n\n  dispose() {\n    if (!this._isAppended) {\n      return;\n    }\n\n    EventHandler.off(this._element, EVENT_MOUSEDOWN);\n\n    this._element.remove();\n\n    this._isAppended = false;\n  }\n\n  _emulateAnimation(callback) {\n    executeAfterTransition(callback, this._getElement(), this._config.isAnimated);\n  }\n\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): modal.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$6 = 'modal';\nconst DATA_KEY$6 = 'bs.modal';\nconst EVENT_KEY$6 = `.${DATA_KEY$6}`;\nconst DATA_API_KEY$3 = '.data-api';\nconst ESCAPE_KEY$1 = 'Escape';\nconst Default$5 = {\n  backdrop: true,\n  keyboard: true,\n  focus: true\n};\nconst DefaultType$5 = {\n  backdrop: '(boolean|string)',\n  keyboard: 'boolean',\n  focus: 'boolean'\n};\nconst EVENT_HIDE$3 = `hide${EVENT_KEY$6}`;\nconst EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY$6}`;\nconst EVENT_HIDDEN$3 = `hidden${EVENT_KEY$6}`;\nconst EVENT_SHOW$3 = `show${EVENT_KEY$6}`;\nconst EVENT_SHOWN$3 = `shown${EVENT_KEY$6}`;\nconst EVENT_FOCUSIN$2 = `focusin${EVENT_KEY$6}`;\nconst EVENT_RESIZE = `resize${EVENT_KEY$6}`;\nconst EVENT_CLICK_DISMISS$2 = `click.dismiss${EVENT_KEY$6}`;\nconst EVENT_KEYDOWN_DISMISS$1 = `keydown.dismiss${EVENT_KEY$6}`;\nconst EVENT_MOUSEUP_DISMISS = `mouseup.dismiss${EVENT_KEY$6}`;\nconst EVENT_MOUSEDOWN_DISMISS = `mousedown.dismiss${EVENT_KEY$6}`;\nconst EVENT_CLICK_DATA_API$2 = `click${EVENT_KEY$6}${DATA_API_KEY$3}`;\nconst CLASS_NAME_OPEN = 'modal-open';\nconst CLASS_NAME_FADE$4 = 'fade';\nconst CLASS_NAME_SHOW$5 = 'show';\nconst CLASS_NAME_STATIC = 'modal-static';\nconst SELECTOR_DIALOG = '.modal-dialog';\nconst SELECTOR_MODAL_BODY = '.modal-body';\nconst SELECTOR_DATA_TOGGLE$2 = '[data-bs-toggle=\"modal\"]';\nconst SELECTOR_DATA_DISMISS$2 = '[data-bs-dismiss=\"modal\"]';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Modal extends BaseComponent {\n  constructor(element, config) {\n    super(element);\n    this._config = this._getConfig(config);\n    this._dialog = SelectorEngine.findOne(SELECTOR_DIALOG, this._element);\n    this._backdrop = this._initializeBackDrop();\n    this._isShown = false;\n    this._ignoreBackdropClick = false;\n    this._isTransitioning = false;\n    this._scrollBar = new ScrollBarHelper();\n  } // Getters\n\n\n  static get Default() {\n    return Default$5;\n  }\n\n  static get NAME() {\n    return NAME$6;\n  } // Public\n\n\n  toggle(relatedTarget) {\n    return this._isShown ? this.hide() : this.show(relatedTarget);\n  }\n\n  show(relatedTarget) {\n    if (this._isShown || this._isTransitioning) {\n      return;\n    }\n\n    const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$3, {\n      relatedTarget\n    });\n\n    if (showEvent.defaultPrevented) {\n      return;\n    }\n\n    this._isShown = true;\n\n    if (this._isAnimated()) {\n      this._isTransitioning = true;\n    }\n\n    this._scrollBar.hide();\n\n    document.body.classList.add(CLASS_NAME_OPEN);\n\n    this._adjustDialog();\n\n    this._setEscapeEvent();\n\n    this._setResizeEvent();\n\n    EventHandler.on(this._element, EVENT_CLICK_DISMISS$2, SELECTOR_DATA_DISMISS$2, event => this.hide(event));\n    EventHandler.on(this._dialog, EVENT_MOUSEDOWN_DISMISS, () => {\n      EventHandler.one(this._element, EVENT_MOUSEUP_DISMISS, event => {\n        if (event.target === this._element) {\n          this._ignoreBackdropClick = true;\n        }\n      });\n    });\n\n    this._showBackdrop(() => this._showElement(relatedTarget));\n  }\n\n  hide(event) {\n    if (event && ['A', 'AREA'].includes(event.target.tagName)) {\n      event.preventDefault();\n    }\n\n    if (!this._isShown || this._isTransitioning) {\n      return;\n    }\n\n    const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$3);\n\n    if (hideEvent.defaultPrevented) {\n      return;\n    }\n\n    this._isShown = false;\n\n    const isAnimated = this._isAnimated();\n\n    if (isAnimated) {\n      this._isTransitioning = true;\n    }\n\n    this._setEscapeEvent();\n\n    this._setResizeEvent();\n\n    EventHandler.off(document, EVENT_FOCUSIN$2);\n\n    this._element.classList.remove(CLASS_NAME_SHOW$5);\n\n    EventHandler.off(this._element, EVENT_CLICK_DISMISS$2);\n    EventHandler.off(this._dialog, EVENT_MOUSEDOWN_DISMISS);\n\n    this._queueCallback(() => this._hideModal(), this._element, isAnimated);\n  }\n\n  dispose() {\n    [window, this._dialog].forEach(htmlElement => EventHandler.off(htmlElement, EVENT_KEY$6));\n\n    this._backdrop.dispose();\n\n    super.dispose();\n    /**\n     * `document` has 2 events `EVENT_FOCUSIN` and `EVENT_CLICK_DATA_API`\n     * Do not move `document` in `htmlElements` array\n     * It will remove `EVENT_CLICK_DATA_API` event that should remain\n     */\n\n    EventHandler.off(document, EVENT_FOCUSIN$2);\n  }\n\n  handleUpdate() {\n    this._adjustDialog();\n  } // Private\n\n\n  _initializeBackDrop() {\n    return new Backdrop({\n      isVisible: Boolean(this._config.backdrop),\n      // 'static' option will be translated to true, and booleans will keep their value\n      isAnimated: this._isAnimated()\n    });\n  }\n\n  _getConfig(config) {\n    config = { ...Default$5,\n      ...Manipulator.getDataAttributes(this._element),\n      ...(typeof config === 'object' ? config : {})\n    };\n    typeCheckConfig(NAME$6, config, DefaultType$5);\n    return config;\n  }\n\n  _showElement(relatedTarget) {\n    const isAnimated = this._isAnimated();\n\n    const modalBody = SelectorEngine.findOne(SELECTOR_MODAL_BODY, this._dialog);\n\n    if (!this._element.parentNode || this._element.parentNode.nodeType !== Node.ELEMENT_NODE) {\n      // Don't move modal's DOM position\n      document.body.appendChild(this._element);\n    }\n\n    this._element.style.display = 'block';\n\n    this._element.removeAttribute('aria-hidden');\n\n    this._element.setAttribute('aria-modal', true);\n\n    this._element.setAttribute('role', 'dialog');\n\n    this._element.scrollTop = 0;\n\n    if (modalBody) {\n      modalBody.scrollTop = 0;\n    }\n\n    if (isAnimated) {\n      reflow(this._element);\n    }\n\n    this._element.classList.add(CLASS_NAME_SHOW$5);\n\n    if (this._config.focus) {\n      this._enforceFocus();\n    }\n\n    const transitionComplete = () => {\n      if (this._config.focus) {\n        this._element.focus();\n      }\n\n      this._isTransitioning = false;\n      EventHandler.trigger(this._element, EVENT_SHOWN$3, {\n        relatedTarget\n      });\n    };\n\n    this._queueCallback(transitionComplete, this._dialog, isAnimated);\n  }\n\n  _enforceFocus() {\n    EventHandler.off(document, EVENT_FOCUSIN$2); // guard against infinite focus loop\n\n    EventHandler.on(document, EVENT_FOCUSIN$2, event => {\n      if (document !== event.target && this._element !== event.target && !this._element.contains(event.target)) {\n        this._element.focus();\n      }\n    });\n  }\n\n  _setEscapeEvent() {\n    if (this._isShown) {\n      EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS$1, event => {\n        if (this._config.keyboard && event.key === ESCAPE_KEY$1) {\n          event.preventDefault();\n          this.hide();\n        } else if (!this._config.keyboard && event.key === ESCAPE_KEY$1) {\n          this._triggerBackdropTransition();\n        }\n      });\n    } else {\n      EventHandler.off(this._element, EVENT_KEYDOWN_DISMISS$1);\n    }\n  }\n\n  _setResizeEvent() {\n    if (this._isShown) {\n      EventHandler.on(window, EVENT_RESIZE, () => this._adjustDialog());\n    } else {\n      EventHandler.off(window, EVENT_RESIZE);\n    }\n  }\n\n  _hideModal() {\n    this._element.style.display = 'none';\n\n    this._element.setAttribute('aria-hidden', true);\n\n    this._element.removeAttribute('aria-modal');\n\n    this._element.removeAttribute('role');\n\n    this._isTransitioning = false;\n\n    this._backdrop.hide(() => {\n      document.body.classList.remove(CLASS_NAME_OPEN);\n\n      this._resetAdjustments();\n\n      this._scrollBar.reset();\n\n      EventHandler.trigger(this._element, EVENT_HIDDEN$3);\n    });\n  }\n\n  _showBackdrop(callback) {\n    EventHandler.on(this._element, EVENT_CLICK_DISMISS$2, event => {\n      if (this._ignoreBackdropClick) {\n        this._ignoreBackdropClick = false;\n        return;\n      }\n\n      if (event.target !== event.currentTarget) {\n        return;\n      }\n\n      if (this._config.backdrop === true) {\n        this.hide();\n      } else if (this._config.backdrop === 'static') {\n        this._triggerBackdropTransition();\n      }\n    });\n\n    this._backdrop.show(callback);\n  }\n\n  _isAnimated() {\n    return this._element.classList.contains(CLASS_NAME_FADE$4);\n  }\n\n  _triggerBackdropTransition() {\n    const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED);\n\n    if (hideEvent.defaultPrevented) {\n      return;\n    }\n\n    const {\n      classList,\n      scrollHeight,\n      style\n    } = this._element;\n    const isModalOverflowing = scrollHeight > document.documentElement.clientHeight; // return if the following background transition hasn't yet completed\n\n    if (!isModalOverflowing && style.overflowY === 'hidden' || classList.contains(CLASS_NAME_STATIC)) {\n      return;\n    }\n\n    if (!isModalOverflowing) {\n      style.overflowY = 'hidden';\n    }\n\n    classList.add(CLASS_NAME_STATIC);\n\n    this._queueCallback(() => {\n      classList.remove(CLASS_NAME_STATIC);\n\n      if (!isModalOverflowing) {\n        this._queueCallback(() => {\n          style.overflowY = '';\n        }, this._dialog);\n      }\n    }, this._dialog);\n\n    this._element.focus();\n  } // ----------------------------------------------------------------------\n  // the following methods are used to handle overflowing modals\n  // ----------------------------------------------------------------------\n\n\n  _adjustDialog() {\n    const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;\n\n    const scrollbarWidth = this._scrollBar.getWidth();\n\n    const isBodyOverflowing = scrollbarWidth > 0;\n\n    if (!isBodyOverflowing && isModalOverflowing && !isRTL() || isBodyOverflowing && !isModalOverflowing && isRTL()) {\n      this._element.style.paddingLeft = `${scrollbarWidth}px`;\n    }\n\n    if (isBodyOverflowing && !isModalOverflowing && !isRTL() || !isBodyOverflowing && isModalOverflowing && isRTL()) {\n      this._element.style.paddingRight = `${scrollbarWidth}px`;\n    }\n  }\n\n  _resetAdjustments() {\n    this._element.style.paddingLeft = '';\n    this._element.style.paddingRight = '';\n  } // Static\n\n\n  static jQueryInterface(config, relatedTarget) {\n    return this.each(function () {\n      const data = Modal.getOrCreateInstance(this, config);\n\n      if (typeof config !== 'string') {\n        return;\n      }\n\n      if (typeof data[config] === 'undefined') {\n        throw new TypeError(`No method named \"${config}\"`);\n      }\n\n      data[config](relatedTarget);\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$2, SELECTOR_DATA_TOGGLE$2, function (event) {\n  const target = getElementFromSelector(this);\n\n  if (['A', 'AREA'].includes(this.tagName)) {\n    event.preventDefault();\n  }\n\n  EventHandler.one(target, EVENT_SHOW$3, showEvent => {\n    if (showEvent.defaultPrevented) {\n      // only register focus restorer if modal will actually get shown\n      return;\n    }\n\n    EventHandler.one(target, EVENT_HIDDEN$3, () => {\n      if (isVisible(this)) {\n        this.focus();\n      }\n    });\n  });\n  const data = Modal.getOrCreateInstance(target);\n  data.toggle(this);\n});\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Modal to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Modal);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): offcanvas.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$5 = 'offcanvas';\nconst DATA_KEY$5 = 'bs.offcanvas';\nconst EVENT_KEY$5 = `.${DATA_KEY$5}`;\nconst DATA_API_KEY$2 = '.data-api';\nconst EVENT_LOAD_DATA_API$1 = `load${EVENT_KEY$5}${DATA_API_KEY$2}`;\nconst ESCAPE_KEY = 'Escape';\nconst Default$4 = {\n  backdrop: true,\n  keyboard: true,\n  scroll: false\n};\nconst DefaultType$4 = {\n  backdrop: 'boolean',\n  keyboard: 'boolean',\n  scroll: 'boolean'\n};\nconst CLASS_NAME_SHOW$4 = 'show';\nconst OPEN_SELECTOR = '.offcanvas.show';\nconst EVENT_SHOW$2 = `show${EVENT_KEY$5}`;\nconst EVENT_SHOWN$2 = `shown${EVENT_KEY$5}`;\nconst EVENT_HIDE$2 = `hide${EVENT_KEY$5}`;\nconst EVENT_HIDDEN$2 = `hidden${EVENT_KEY$5}`;\nconst EVENT_FOCUSIN$1 = `focusin${EVENT_KEY$5}`;\nconst EVENT_CLICK_DATA_API$1 = `click${EVENT_KEY$5}${DATA_API_KEY$2}`;\nconst EVENT_CLICK_DISMISS$1 = `click.dismiss${EVENT_KEY$5}`;\nconst EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY$5}`;\nconst SELECTOR_DATA_DISMISS$1 = '[data-bs-dismiss=\"offcanvas\"]';\nconst SELECTOR_DATA_TOGGLE$1 = '[data-bs-toggle=\"offcanvas\"]';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Offcanvas extends BaseComponent {\n  constructor(element, config) {\n    super(element);\n    this._config = this._getConfig(config);\n    this._isShown = false;\n    this._backdrop = this._initializeBackDrop();\n\n    this._addEventListeners();\n  } // Getters\n\n\n  static get NAME() {\n    return NAME$5;\n  }\n\n  static get Default() {\n    return Default$4;\n  } // Public\n\n\n  toggle(relatedTarget) {\n    return this._isShown ? this.hide() : this.show(relatedTarget);\n  }\n\n  show(relatedTarget) {\n    if (this._isShown) {\n      return;\n    }\n\n    const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$2, {\n      relatedTarget\n    });\n\n    if (showEvent.defaultPrevented) {\n      return;\n    }\n\n    this._isShown = true;\n    this._element.style.visibility = 'visible';\n\n    this._backdrop.show();\n\n    if (!this._config.scroll) {\n      new ScrollBarHelper().hide();\n\n      this._enforceFocusOnElement(this._element);\n    }\n\n    this._element.removeAttribute('aria-hidden');\n\n    this._element.setAttribute('aria-modal', true);\n\n    this._element.setAttribute('role', 'dialog');\n\n    this._element.classList.add(CLASS_NAME_SHOW$4);\n\n    const completeCallBack = () => {\n      EventHandler.trigger(this._element, EVENT_SHOWN$2, {\n        relatedTarget\n      });\n    };\n\n    this._queueCallback(completeCallBack, this._element, true);\n  }\n\n  hide() {\n    if (!this._isShown) {\n      return;\n    }\n\n    const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$2);\n\n    if (hideEvent.defaultPrevented) {\n      return;\n    }\n\n    EventHandler.off(document, EVENT_FOCUSIN$1);\n\n    this._element.blur();\n\n    this._isShown = false;\n\n    this._element.classList.remove(CLASS_NAME_SHOW$4);\n\n    this._backdrop.hide();\n\n    const completeCallback = () => {\n      this._element.setAttribute('aria-hidden', true);\n\n      this._element.removeAttribute('aria-modal');\n\n      this._element.removeAttribute('role');\n\n      this._element.style.visibility = 'hidden';\n\n      if (!this._config.scroll) {\n        new ScrollBarHelper().reset();\n      }\n\n      EventHandler.trigger(this._element, EVENT_HIDDEN$2);\n    };\n\n    this._queueCallback(completeCallback, this._element, true);\n  }\n\n  dispose() {\n    this._backdrop.dispose();\n\n    super.dispose();\n    EventHandler.off(document, EVENT_FOCUSIN$1);\n  } // Private\n\n\n  _getConfig(config) {\n    config = { ...Default$4,\n      ...Manipulator.getDataAttributes(this._element),\n      ...(typeof config === 'object' ? config : {})\n    };\n    typeCheckConfig(NAME$5, config, DefaultType$4);\n    return config;\n  }\n\n  _initializeBackDrop() {\n    return new Backdrop({\n      isVisible: this._config.backdrop,\n      isAnimated: true,\n      rootElement: this._element.parentNode,\n      clickCallback: () => this.hide()\n    });\n  }\n\n  _enforceFocusOnElement(element) {\n    EventHandler.off(document, EVENT_FOCUSIN$1); // guard against infinite focus loop\n\n    EventHandler.on(document, EVENT_FOCUSIN$1, event => {\n      if (document !== event.target && element !== event.target && !element.contains(event.target)) {\n        element.focus();\n      }\n    });\n    element.focus();\n  }\n\n  _addEventListeners() {\n    EventHandler.on(this._element, EVENT_CLICK_DISMISS$1, SELECTOR_DATA_DISMISS$1, () => this.hide());\n    EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS, event => {\n      if (this._config.keyboard && event.key === ESCAPE_KEY) {\n        this.hide();\n      }\n    });\n  } // Static\n\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Offcanvas.getOrCreateInstance(this, config);\n\n      if (typeof config !== 'string') {\n        return;\n      }\n\n      if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n        throw new TypeError(`No method named \"${config}\"`);\n      }\n\n      data[config](this);\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$1, SELECTOR_DATA_TOGGLE$1, function (event) {\n  const target = getElementFromSelector(this);\n\n  if (['A', 'AREA'].includes(this.tagName)) {\n    event.preventDefault();\n  }\n\n  if (isDisabled(this)) {\n    return;\n  }\n\n  EventHandler.one(target, EVENT_HIDDEN$2, () => {\n    // focus on trigger when it is closed\n    if (isVisible(this)) {\n      this.focus();\n    }\n  }); // avoid conflict when clicking a toggler of an offcanvas, while another is open\n\n  const allReadyOpen = SelectorEngine.findOne(OPEN_SELECTOR);\n\n  if (allReadyOpen && allReadyOpen !== target) {\n    Offcanvas.getInstance(allReadyOpen).hide();\n  }\n\n  const data = Offcanvas.getOrCreateInstance(target);\n  data.toggle(this);\n});\nEventHandler.on(window, EVENT_LOAD_DATA_API$1, () => SelectorEngine.find(OPEN_SELECTOR).forEach(el => Offcanvas.getOrCreateInstance(el).show()));\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\ndefineJQueryPlugin(Offcanvas);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): util/sanitizer.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\nconst uriAttrs = new Set(['background', 'cite', 'href', 'itemtype', 'longdesc', 'poster', 'src', 'xlink:href']);\nconst ARIA_ATTRIBUTE_PATTERN = /^aria-[\\w-]*$/i;\n/**\n * A pattern that recognizes a commonly useful subset of URLs that are safe.\n *\n * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts\n */\n\nconst SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file):|[^#&/:?]*(?:[#/?]|$))/i;\n/**\n * A pattern that matches safe data URLs. Only matches image, video and audio types.\n *\n * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts\n */\n\nconst DATA_URL_PATTERN = /^data:(?:image\\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\\/(?:mpeg|mp4|ogg|webm)|audio\\/(?:mp3|oga|ogg|opus));base64,[\\d+/a-z]+=*$/i;\n\nconst allowedAttribute = (attr, allowedAttributeList) => {\n  const attrName = attr.nodeName.toLowerCase();\n\n  if (allowedAttributeList.includes(attrName)) {\n    if (uriAttrs.has(attrName)) {\n      return Boolean(SAFE_URL_PATTERN.test(attr.nodeValue) || DATA_URL_PATTERN.test(attr.nodeValue));\n    }\n\n    return true;\n  }\n\n  const regExp = allowedAttributeList.filter(attrRegex => attrRegex instanceof RegExp); // Check if a regular expression validates the attribute.\n\n  for (let i = 0, len = regExp.length; i < len; i++) {\n    if (regExp[i].test(attrName)) {\n      return true;\n    }\n  }\n\n  return false;\n};\n\nconst DefaultAllowlist = {\n  // Global attributes allowed on any supplied element below.\n  '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],\n  a: ['target', 'href', 'title', 'rel'],\n  area: [],\n  b: [],\n  br: [],\n  col: [],\n  code: [],\n  div: [],\n  em: [],\n  hr: [],\n  h1: [],\n  h2: [],\n  h3: [],\n  h4: [],\n  h5: [],\n  h6: [],\n  i: [],\n  img: ['src', 'srcset', 'alt', 'title', 'width', 'height'],\n  li: [],\n  ol: [],\n  p: [],\n  pre: [],\n  s: [],\n  small: [],\n  span: [],\n  sub: [],\n  sup: [],\n  strong: [],\n  u: [],\n  ul: []\n};\nfunction sanitizeHtml(unsafeHtml, allowList, sanitizeFn) {\n  if (!unsafeHtml.length) {\n    return unsafeHtml;\n  }\n\n  if (sanitizeFn && typeof sanitizeFn === 'function') {\n    return sanitizeFn(unsafeHtml);\n  }\n\n  const domParser = new window.DOMParser();\n  const createdDocument = domParser.parseFromString(unsafeHtml, 'text/html');\n  const allowlistKeys = Object.keys(allowList);\n  const elements = [].concat(...createdDocument.body.querySelectorAll('*'));\n\n  for (let i = 0, len = elements.length; i < len; i++) {\n    const el = elements[i];\n    const elName = el.nodeName.toLowerCase();\n\n    if (!allowlistKeys.includes(elName)) {\n      el.remove();\n      continue;\n    }\n\n    const attributeList = [].concat(...el.attributes);\n    const allowedAttributes = [].concat(allowList['*'] || [], allowList[elName] || []);\n    attributeList.forEach(attr => {\n      if (!allowedAttribute(attr, allowedAttributes)) {\n        el.removeAttribute(attr.nodeName);\n      }\n    });\n  }\n\n  return createdDocument.body.innerHTML;\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): tooltip.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$4 = 'tooltip';\nconst DATA_KEY$4 = 'bs.tooltip';\nconst EVENT_KEY$4 = `.${DATA_KEY$4}`;\nconst CLASS_PREFIX$1 = 'bs-tooltip';\nconst BSCLS_PREFIX_REGEX$1 = new RegExp(`(^|\\\\s)${CLASS_PREFIX$1}\\\\S+`, 'g');\nconst DISALLOWED_ATTRIBUTES = new Set(['sanitize', 'allowList', 'sanitizeFn']);\nconst DefaultType$3 = {\n  animation: 'boolean',\n  template: 'string',\n  title: '(string|element|function)',\n  trigger: 'string',\n  delay: '(number|object)',\n  html: 'boolean',\n  selector: '(string|boolean)',\n  placement: '(string|function)',\n  offset: '(array|string|function)',\n  container: '(string|element|boolean)',\n  fallbackPlacements: 'array',\n  boundary: '(string|element)',\n  customClass: '(string|function)',\n  sanitize: 'boolean',\n  sanitizeFn: '(null|function)',\n  allowList: 'object',\n  popperConfig: '(null|object|function)'\n};\nconst AttachmentMap = {\n  AUTO: 'auto',\n  TOP: 'top',\n  RIGHT: isRTL() ? 'left' : 'right',\n  BOTTOM: 'bottom',\n  LEFT: isRTL() ? 'right' : 'left'\n};\nconst Default$3 = {\n  animation: true,\n  template: '<div class=\"tooltip\" role=\"tooltip\">' + '<div class=\"tooltip-arrow\"></div>' + '<div class=\"tooltip-inner\"></div>' + '</div>',\n  trigger: 'hover focus',\n  title: '',\n  delay: 0,\n  html: false,\n  selector: false,\n  placement: 'top',\n  offset: [0, 0],\n  container: false,\n  fallbackPlacements: ['top', 'right', 'bottom', 'left'],\n  boundary: 'clippingParents',\n  customClass: '',\n  sanitize: true,\n  sanitizeFn: null,\n  allowList: DefaultAllowlist,\n  popperConfig: null\n};\nconst Event$2 = {\n  HIDE: `hide${EVENT_KEY$4}`,\n  HIDDEN: `hidden${EVENT_KEY$4}`,\n  SHOW: `show${EVENT_KEY$4}`,\n  SHOWN: `shown${EVENT_KEY$4}`,\n  INSERTED: `inserted${EVENT_KEY$4}`,\n  CLICK: `click${EVENT_KEY$4}`,\n  FOCUSIN: `focusin${EVENT_KEY$4}`,\n  FOCUSOUT: `focusout${EVENT_KEY$4}`,\n  MOUSEENTER: `mouseenter${EVENT_KEY$4}`,\n  MOUSELEAVE: `mouseleave${EVENT_KEY$4}`\n};\nconst CLASS_NAME_FADE$3 = 'fade';\nconst CLASS_NAME_MODAL = 'modal';\nconst CLASS_NAME_SHOW$3 = 'show';\nconst HOVER_STATE_SHOW = 'show';\nconst HOVER_STATE_OUT = 'out';\nconst SELECTOR_TOOLTIP_INNER = '.tooltip-inner';\nconst TRIGGER_HOVER = 'hover';\nconst TRIGGER_FOCUS = 'focus';\nconst TRIGGER_CLICK = 'click';\nconst TRIGGER_MANUAL = 'manual';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Tooltip extends BaseComponent {\n  constructor(element, config) {\n    if (typeof Popper === 'undefined') {\n      throw new TypeError('Bootstrap\\'s tooltips require Popper (https://popper.js.org)');\n    }\n\n    super(element); // private\n\n    this._isEnabled = true;\n    this._timeout = 0;\n    this._hoverState = '';\n    this._activeTrigger = {};\n    this._popper = null; // Protected\n\n    this._config = this._getConfig(config);\n    this.tip = null;\n\n    this._setListeners();\n  } // Getters\n\n\n  static get Default() {\n    return Default$3;\n  }\n\n  static get NAME() {\n    return NAME$4;\n  }\n\n  static get Event() {\n    return Event$2;\n  }\n\n  static get DefaultType() {\n    return DefaultType$3;\n  } // Public\n\n\n  enable() {\n    this._isEnabled = true;\n  }\n\n  disable() {\n    this._isEnabled = false;\n  }\n\n  toggleEnabled() {\n    this._isEnabled = !this._isEnabled;\n  }\n\n  toggle(event) {\n    if (!this._isEnabled) {\n      return;\n    }\n\n    if (event) {\n      const context = this._initializeOnDelegatedTarget(event);\n\n      context._activeTrigger.click = !context._activeTrigger.click;\n\n      if (context._isWithActiveTrigger()) {\n        context._enter(null, context);\n      } else {\n        context._leave(null, context);\n      }\n    } else {\n      if (this.getTipElement().classList.contains(CLASS_NAME_SHOW$3)) {\n        this._leave(null, this);\n\n        return;\n      }\n\n      this._enter(null, this);\n    }\n  }\n\n  dispose() {\n    clearTimeout(this._timeout);\n    EventHandler.off(this._element.closest(`.${CLASS_NAME_MODAL}`), 'hide.bs.modal', this._hideModalHandler);\n\n    if (this.tip) {\n      this.tip.remove();\n    }\n\n    if (this._popper) {\n      this._popper.destroy();\n    }\n\n    super.dispose();\n  }\n\n  show() {\n    if (this._element.style.display === 'none') {\n      throw new Error('Please use show on visible elements');\n    }\n\n    if (!(this.isWithContent() && this._isEnabled)) {\n      return;\n    }\n\n    const showEvent = EventHandler.trigger(this._element, this.constructor.Event.SHOW);\n    const shadowRoot = findShadowRoot(this._element);\n    const isInTheDom = shadowRoot === null ? this._element.ownerDocument.documentElement.contains(this._element) : shadowRoot.contains(this._element);\n\n    if (showEvent.defaultPrevented || !isInTheDom) {\n      return;\n    }\n\n    const tip = this.getTipElement();\n    const tipId = getUID(this.constructor.NAME);\n    tip.setAttribute('id', tipId);\n\n    this._element.setAttribute('aria-describedby', tipId);\n\n    this.setContent();\n\n    if (this._config.animation) {\n      tip.classList.add(CLASS_NAME_FADE$3);\n    }\n\n    const placement = typeof this._config.placement === 'function' ? this._config.placement.call(this, tip, this._element) : this._config.placement;\n\n    const attachment = this._getAttachment(placement);\n\n    this._addAttachmentClass(attachment);\n\n    const {\n      container\n    } = this._config;\n    Data.set(tip, this.constructor.DATA_KEY, this);\n\n    if (!this._element.ownerDocument.documentElement.contains(this.tip)) {\n      container.appendChild(tip);\n      EventHandler.trigger(this._element, this.constructor.Event.INSERTED);\n    }\n\n    if (this._popper) {\n      this._popper.update();\n    } else {\n      this._popper = Popper.createPopper(this._element, tip, this._getPopperConfig(attachment));\n    }\n\n    tip.classList.add(CLASS_NAME_SHOW$3);\n    const customClass = typeof this._config.customClass === 'function' ? this._config.customClass() : this._config.customClass;\n\n    if (customClass) {\n      tip.classList.add(...customClass.split(' '));\n    } // If this is a touch-enabled device we add extra\n    // empty mouseover listeners to the body's immediate children;\n    // only needed because of broken event delegation on iOS\n    // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n\n\n    if ('ontouchstart' in document.documentElement) {\n      [].concat(...document.body.children).forEach(element => {\n        EventHandler.on(element, 'mouseover', noop);\n      });\n    }\n\n    const complete = () => {\n      const prevHoverState = this._hoverState;\n      this._hoverState = null;\n      EventHandler.trigger(this._element, this.constructor.Event.SHOWN);\n\n      if (prevHoverState === HOVER_STATE_OUT) {\n        this._leave(null, this);\n      }\n    };\n\n    const isAnimated = this.tip.classList.contains(CLASS_NAME_FADE$3);\n\n    this._queueCallback(complete, this.tip, isAnimated);\n  }\n\n  hide() {\n    if (!this._popper) {\n      return;\n    }\n\n    const tip = this.getTipElement();\n\n    const complete = () => {\n      if (this._isWithActiveTrigger()) {\n        return;\n      }\n\n      if (this._hoverState !== HOVER_STATE_SHOW) {\n        tip.remove();\n      }\n\n      this._cleanTipClass();\n\n      this._element.removeAttribute('aria-describedby');\n\n      EventHandler.trigger(this._element, this.constructor.Event.HIDDEN);\n\n      if (this._popper) {\n        this._popper.destroy();\n\n        this._popper = null;\n      }\n    };\n\n    const hideEvent = EventHandler.trigger(this._element, this.constructor.Event.HIDE);\n\n    if (hideEvent.defaultPrevented) {\n      return;\n    }\n\n    tip.classList.remove(CLASS_NAME_SHOW$3); // If this is a touch-enabled device we remove the extra\n    // empty mouseover listeners we added for iOS support\n\n    if ('ontouchstart' in document.documentElement) {\n      [].concat(...document.body.children).forEach(element => EventHandler.off(element, 'mouseover', noop));\n    }\n\n    this._activeTrigger[TRIGGER_CLICK] = false;\n    this._activeTrigger[TRIGGER_FOCUS] = false;\n    this._activeTrigger[TRIGGER_HOVER] = false;\n    const isAnimated = this.tip.classList.contains(CLASS_NAME_FADE$3);\n\n    this._queueCallback(complete, this.tip, isAnimated);\n\n    this._hoverState = '';\n  }\n\n  update() {\n    if (this._popper !== null) {\n      this._popper.update();\n    }\n  } // Protected\n\n\n  isWithContent() {\n    return Boolean(this.getTitle());\n  }\n\n  getTipElement() {\n    if (this.tip) {\n      return this.tip;\n    }\n\n    const element = document.createElement('div');\n    element.innerHTML = this._config.template;\n    this.tip = element.children[0];\n    return this.tip;\n  }\n\n  setContent() {\n    const tip = this.getTipElement();\n    this.setElementContent(SelectorEngine.findOne(SELECTOR_TOOLTIP_INNER, tip), this.getTitle());\n    tip.classList.remove(CLASS_NAME_FADE$3, CLASS_NAME_SHOW$3);\n  }\n\n  setElementContent(element, content) {\n    if (element === null) {\n      return;\n    }\n\n    if (isElement(content)) {\n      content = getElement(content); // content is a DOM node or a jQuery\n\n      if (this._config.html) {\n        if (content.parentNode !== element) {\n          element.innerHTML = '';\n          element.appendChild(content);\n        }\n      } else {\n        element.textContent = content.textContent;\n      }\n\n      return;\n    }\n\n    if (this._config.html) {\n      if (this._config.sanitize) {\n        content = sanitizeHtml(content, this._config.allowList, this._config.sanitizeFn);\n      }\n\n      element.innerHTML = content;\n    } else {\n      element.textContent = content;\n    }\n  }\n\n  getTitle() {\n    let title = this._element.getAttribute('data-bs-original-title');\n\n    if (!title) {\n      title = typeof this._config.title === 'function' ? this._config.title.call(this._element) : this._config.title;\n    }\n\n    return title;\n  }\n\n  updateAttachment(attachment) {\n    if (attachment === 'right') {\n      return 'end';\n    }\n\n    if (attachment === 'left') {\n      return 'start';\n    }\n\n    return attachment;\n  } // Private\n\n\n  _initializeOnDelegatedTarget(event, context) {\n    const dataKey = this.constructor.DATA_KEY;\n    context = context || Data.get(event.delegateTarget, dataKey);\n\n    if (!context) {\n      context = new this.constructor(event.delegateTarget, this._getDelegateConfig());\n      Data.set(event.delegateTarget, dataKey, context);\n    }\n\n    return context;\n  }\n\n  _getOffset() {\n    const {\n      offset\n    } = this._config;\n\n    if (typeof offset === 'string') {\n      return offset.split(',').map(val => Number.parseInt(val, 10));\n    }\n\n    if (typeof offset === 'function') {\n      return popperData => offset(popperData, this._element);\n    }\n\n    return offset;\n  }\n\n  _getPopperConfig(attachment) {\n    const defaultBsPopperConfig = {\n      placement: attachment,\n      modifiers: [{\n        name: 'flip',\n        options: {\n          fallbackPlacements: this._config.fallbackPlacements\n        }\n      }, {\n        name: 'offset',\n        options: {\n          offset: this._getOffset()\n        }\n      }, {\n        name: 'preventOverflow',\n        options: {\n          boundary: this._config.boundary\n        }\n      }, {\n        name: 'arrow',\n        options: {\n          element: `.${this.constructor.NAME}-arrow`\n        }\n      }, {\n        name: 'onChange',\n        enabled: true,\n        phase: 'afterWrite',\n        fn: data => this._handlePopperPlacementChange(data)\n      }],\n      onFirstUpdate: data => {\n        if (data.options.placement !== data.placement) {\n          this._handlePopperPlacementChange(data);\n        }\n      }\n    };\n    return { ...defaultBsPopperConfig,\n      ...(typeof this._config.popperConfig === 'function' ? this._config.popperConfig(defaultBsPopperConfig) : this._config.popperConfig)\n    };\n  }\n\n  _addAttachmentClass(attachment) {\n    this.getTipElement().classList.add(`${CLASS_PREFIX$1}-${this.updateAttachment(attachment)}`);\n  }\n\n  _getAttachment(placement) {\n    return AttachmentMap[placement.toUpperCase()];\n  }\n\n  _setListeners() {\n    const triggers = this._config.trigger.split(' ');\n\n    triggers.forEach(trigger => {\n      if (trigger === 'click') {\n        EventHandler.on(this._element, this.constructor.Event.CLICK, this._config.selector, event => this.toggle(event));\n      } else if (trigger !== TRIGGER_MANUAL) {\n        const eventIn = trigger === TRIGGER_HOVER ? this.constructor.Event.MOUSEENTER : this.constructor.Event.FOCUSIN;\n        const eventOut = trigger === TRIGGER_HOVER ? this.constructor.Event.MOUSELEAVE : this.constructor.Event.FOCUSOUT;\n        EventHandler.on(this._element, eventIn, this._config.selector, event => this._enter(event));\n        EventHandler.on(this._element, eventOut, this._config.selector, event => this._leave(event));\n      }\n    });\n\n    this._hideModalHandler = () => {\n      if (this._element) {\n        this.hide();\n      }\n    };\n\n    EventHandler.on(this._element.closest(`.${CLASS_NAME_MODAL}`), 'hide.bs.modal', this._hideModalHandler);\n\n    if (this._config.selector) {\n      this._config = { ...this._config,\n        trigger: 'manual',\n        selector: ''\n      };\n    } else {\n      this._fixTitle();\n    }\n  }\n\n  _fixTitle() {\n    const title = this._element.getAttribute('title');\n\n    const originalTitleType = typeof this._element.getAttribute('data-bs-original-title');\n\n    if (title || originalTitleType !== 'string') {\n      this._element.setAttribute('data-bs-original-title', title || '');\n\n      if (title && !this._element.getAttribute('aria-label') && !this._element.textContent) {\n        this._element.setAttribute('aria-label', title);\n      }\n\n      this._element.setAttribute('title', '');\n    }\n  }\n\n  _enter(event, context) {\n    context = this._initializeOnDelegatedTarget(event, context);\n\n    if (event) {\n      context._activeTrigger[event.type === 'focusin' ? TRIGGER_FOCUS : TRIGGER_HOVER] = true;\n    }\n\n    if (context.getTipElement().classList.contains(CLASS_NAME_SHOW$3) || context._hoverState === HOVER_STATE_SHOW) {\n      context._hoverState = HOVER_STATE_SHOW;\n      return;\n    }\n\n    clearTimeout(context._timeout);\n    context._hoverState = HOVER_STATE_SHOW;\n\n    if (!context._config.delay || !context._config.delay.show) {\n      context.show();\n      return;\n    }\n\n    context._timeout = setTimeout(() => {\n      if (context._hoverState === HOVER_STATE_SHOW) {\n        context.show();\n      }\n    }, context._config.delay.show);\n  }\n\n  _leave(event, context) {\n    context = this._initializeOnDelegatedTarget(event, context);\n\n    if (event) {\n      context._activeTrigger[event.type === 'focusout' ? TRIGGER_FOCUS : TRIGGER_HOVER] = context._element.contains(event.relatedTarget);\n    }\n\n    if (context._isWithActiveTrigger()) {\n      return;\n    }\n\n    clearTimeout(context._timeout);\n    context._hoverState = HOVER_STATE_OUT;\n\n    if (!context._config.delay || !context._config.delay.hide) {\n      context.hide();\n      return;\n    }\n\n    context._timeout = setTimeout(() => {\n      if (context._hoverState === HOVER_STATE_OUT) {\n        context.hide();\n      }\n    }, context._config.delay.hide);\n  }\n\n  _isWithActiveTrigger() {\n    for (const trigger in this._activeTrigger) {\n      if (this._activeTrigger[trigger]) {\n        return true;\n      }\n    }\n\n    return false;\n  }\n\n  _getConfig(config) {\n    const dataAttributes = Manipulator.getDataAttributes(this._element);\n    Object.keys(dataAttributes).forEach(dataAttr => {\n      if (DISALLOWED_ATTRIBUTES.has(dataAttr)) {\n        delete dataAttributes[dataAttr];\n      }\n    });\n    config = { ...this.constructor.Default,\n      ...dataAttributes,\n      ...(typeof config === 'object' && config ? config : {})\n    };\n    config.container = config.container === false ? document.body : getElement(config.container);\n\n    if (typeof config.delay === 'number') {\n      config.delay = {\n        show: config.delay,\n        hide: config.delay\n      };\n    }\n\n    if (typeof config.title === 'number') {\n      config.title = config.title.toString();\n    }\n\n    if (typeof config.content === 'number') {\n      config.content = config.content.toString();\n    }\n\n    typeCheckConfig(NAME$4, config, this.constructor.DefaultType);\n\n    if (config.sanitize) {\n      config.template = sanitizeHtml(config.template, config.allowList, config.sanitizeFn);\n    }\n\n    return config;\n  }\n\n  _getDelegateConfig() {\n    const config = {};\n\n    if (this._config) {\n      for (const key in this._config) {\n        if (this.constructor.Default[key] !== this._config[key]) {\n          config[key] = this._config[key];\n        }\n      }\n    }\n\n    return config;\n  }\n\n  _cleanTipClass() {\n    const tip = this.getTipElement();\n    const tabClass = tip.getAttribute('class').match(BSCLS_PREFIX_REGEX$1);\n\n    if (tabClass !== null && tabClass.length > 0) {\n      tabClass.map(token => token.trim()).forEach(tClass => tip.classList.remove(tClass));\n    }\n  }\n\n  _handlePopperPlacementChange(popperData) {\n    const {\n      state\n    } = popperData;\n\n    if (!state) {\n      return;\n    }\n\n    this.tip = state.elements.popper;\n\n    this._cleanTipClass();\n\n    this._addAttachmentClass(this._getAttachment(state.placement));\n  } // Static\n\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Tooltip.getOrCreateInstance(this, config);\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config]();\n      }\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Tooltip to jQuery only if jQuery is present\n */\n\n\ndefineJQueryPlugin(Tooltip);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): popover.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$3 = 'popover';\nconst DATA_KEY$3 = 'bs.popover';\nconst EVENT_KEY$3 = `.${DATA_KEY$3}`;\nconst CLASS_PREFIX = 'bs-popover';\nconst BSCLS_PREFIX_REGEX = new RegExp(`(^|\\\\s)${CLASS_PREFIX}\\\\S+`, 'g');\nconst Default$2 = { ...Tooltip.Default,\n  placement: 'right',\n  offset: [0, 8],\n  trigger: 'click',\n  content: '',\n  template: '<div class=\"popover\" role=\"tooltip\">' + '<div class=\"popover-arrow\"></div>' + '<h3 class=\"popover-header\"></h3>' + '<div class=\"popover-body\"></div>' + '</div>'\n};\nconst DefaultType$2 = { ...Tooltip.DefaultType,\n  content: '(string|element|function)'\n};\nconst Event$1 = {\n  HIDE: `hide${EVENT_KEY$3}`,\n  HIDDEN: `hidden${EVENT_KEY$3}`,\n  SHOW: `show${EVENT_KEY$3}`,\n  SHOWN: `shown${EVENT_KEY$3}`,\n  INSERTED: `inserted${EVENT_KEY$3}`,\n  CLICK: `click${EVENT_KEY$3}`,\n  FOCUSIN: `focusin${EVENT_KEY$3}`,\n  FOCUSOUT: `focusout${EVENT_KEY$3}`,\n  MOUSEENTER: `mouseenter${EVENT_KEY$3}`,\n  MOUSELEAVE: `mouseleave${EVENT_KEY$3}`\n};\nconst CLASS_NAME_FADE$2 = 'fade';\nconst CLASS_NAME_SHOW$2 = 'show';\nconst SELECTOR_TITLE = '.popover-header';\nconst SELECTOR_CONTENT = '.popover-body';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Popover extends Tooltip {\n  // Getters\n  static get Default() {\n    return Default$2;\n  }\n\n  static get NAME() {\n    return NAME$3;\n  }\n\n  static get Event() {\n    return Event$1;\n  }\n\n  static get DefaultType() {\n    return DefaultType$2;\n  } // Overrides\n\n\n  isWithContent() {\n    return this.getTitle() || this._getContent();\n  }\n\n  getTipElement() {\n    if (this.tip) {\n      return this.tip;\n    }\n\n    this.tip = super.getTipElement();\n\n    if (!this.getTitle()) {\n      SelectorEngine.findOne(SELECTOR_TITLE, this.tip).remove();\n    }\n\n    if (!this._getContent()) {\n      SelectorEngine.findOne(SELECTOR_CONTENT, this.tip).remove();\n    }\n\n    return this.tip;\n  }\n\n  setContent() {\n    const tip = this.getTipElement(); // we use append for html objects to maintain js events\n\n    this.setElementContent(SelectorEngine.findOne(SELECTOR_TITLE, tip), this.getTitle());\n\n    let content = this._getContent();\n\n    if (typeof content === 'function') {\n      content = content.call(this._element);\n    }\n\n    this.setElementContent(SelectorEngine.findOne(SELECTOR_CONTENT, tip), content);\n    tip.classList.remove(CLASS_NAME_FADE$2, CLASS_NAME_SHOW$2);\n  } // Private\n\n\n  _addAttachmentClass(attachment) {\n    this.getTipElement().classList.add(`${CLASS_PREFIX}-${this.updateAttachment(attachment)}`);\n  }\n\n  _getContent() {\n    return this._element.getAttribute('data-bs-content') || this._config.content;\n  }\n\n  _cleanTipClass() {\n    const tip = this.getTipElement();\n    const tabClass = tip.getAttribute('class').match(BSCLS_PREFIX_REGEX);\n\n    if (tabClass !== null && tabClass.length > 0) {\n      tabClass.map(token => token.trim()).forEach(tClass => tip.classList.remove(tClass));\n    }\n  } // Static\n\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Popover.getOrCreateInstance(this, config);\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config]();\n      }\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Popover to jQuery only if jQuery is present\n */\n\n\ndefineJQueryPlugin(Popover);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): scrollspy.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$2 = 'scrollspy';\nconst DATA_KEY$2 = 'bs.scrollspy';\nconst EVENT_KEY$2 = `.${DATA_KEY$2}`;\nconst DATA_API_KEY$1 = '.data-api';\nconst Default$1 = {\n  offset: 10,\n  method: 'auto',\n  target: ''\n};\nconst DefaultType$1 = {\n  offset: 'number',\n  method: 'string',\n  target: '(string|element)'\n};\nconst EVENT_ACTIVATE = `activate${EVENT_KEY$2}`;\nconst EVENT_SCROLL = `scroll${EVENT_KEY$2}`;\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY$2}${DATA_API_KEY$1}`;\nconst CLASS_NAME_DROPDOWN_ITEM = 'dropdown-item';\nconst CLASS_NAME_ACTIVE$1 = 'active';\nconst SELECTOR_DATA_SPY = '[data-bs-spy=\"scroll\"]';\nconst SELECTOR_NAV_LIST_GROUP$1 = '.nav, .list-group';\nconst SELECTOR_NAV_LINKS = '.nav-link';\nconst SELECTOR_NAV_ITEMS = '.nav-item';\nconst SELECTOR_LIST_ITEMS = '.list-group-item';\nconst SELECTOR_DROPDOWN$1 = '.dropdown';\nconst SELECTOR_DROPDOWN_TOGGLE$1 = '.dropdown-toggle';\nconst METHOD_OFFSET = 'offset';\nconst METHOD_POSITION = 'position';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass ScrollSpy extends BaseComponent {\n  constructor(element, config) {\n    super(element);\n    this._scrollElement = this._element.tagName === 'BODY' ? window : this._element;\n    this._config = this._getConfig(config);\n    this._selector = `${this._config.target} ${SELECTOR_NAV_LINKS}, ${this._config.target} ${SELECTOR_LIST_ITEMS}, ${this._config.target} .${CLASS_NAME_DROPDOWN_ITEM}`;\n    this._offsets = [];\n    this._targets = [];\n    this._activeTarget = null;\n    this._scrollHeight = 0;\n    EventHandler.on(this._scrollElement, EVENT_SCROLL, () => this._process());\n    this.refresh();\n\n    this._process();\n  } // Getters\n\n\n  static get Default() {\n    return Default$1;\n  }\n\n  static get NAME() {\n    return NAME$2;\n  } // Public\n\n\n  refresh() {\n    const autoMethod = this._scrollElement === this._scrollElement.window ? METHOD_OFFSET : METHOD_POSITION;\n    const offsetMethod = this._config.method === 'auto' ? autoMethod : this._config.method;\n    const offsetBase = offsetMethod === METHOD_POSITION ? this._getScrollTop() : 0;\n    this._offsets = [];\n    this._targets = [];\n    this._scrollHeight = this._getScrollHeight();\n    const targets = SelectorEngine.find(this._selector);\n    targets.map(element => {\n      const targetSelector = getSelectorFromElement(element);\n      const target = targetSelector ? SelectorEngine.findOne(targetSelector) : null;\n\n      if (target) {\n        const targetBCR = target.getBoundingClientRect();\n\n        if (targetBCR.width || targetBCR.height) {\n          return [Manipulator[offsetMethod](target).top + offsetBase, targetSelector];\n        }\n      }\n\n      return null;\n    }).filter(item => item).sort((a, b) => a[0] - b[0]).forEach(item => {\n      this._offsets.push(item[0]);\n\n      this._targets.push(item[1]);\n    });\n  }\n\n  dispose() {\n    EventHandler.off(this._scrollElement, EVENT_KEY$2);\n    super.dispose();\n  } // Private\n\n\n  _getConfig(config) {\n    config = { ...Default$1,\n      ...Manipulator.getDataAttributes(this._element),\n      ...(typeof config === 'object' && config ? config : {})\n    };\n\n    if (typeof config.target !== 'string' && isElement(config.target)) {\n      let {\n        id\n      } = config.target;\n\n      if (!id) {\n        id = getUID(NAME$2);\n        config.target.id = id;\n      }\n\n      config.target = `#${id}`;\n    }\n\n    typeCheckConfig(NAME$2, config, DefaultType$1);\n    return config;\n  }\n\n  _getScrollTop() {\n    return this._scrollElement === window ? this._scrollElement.pageYOffset : this._scrollElement.scrollTop;\n  }\n\n  _getScrollHeight() {\n    return this._scrollElement.scrollHeight || Math.max(document.body.scrollHeight, document.documentElement.scrollHeight);\n  }\n\n  _getOffsetHeight() {\n    return this._scrollElement === window ? window.innerHeight : this._scrollElement.getBoundingClientRect().height;\n  }\n\n  _process() {\n    const scrollTop = this._getScrollTop() + this._config.offset;\n\n    const scrollHeight = this._getScrollHeight();\n\n    const maxScroll = this._config.offset + scrollHeight - this._getOffsetHeight();\n\n    if (this._scrollHeight !== scrollHeight) {\n      this.refresh();\n    }\n\n    if (scrollTop >= maxScroll) {\n      const target = this._targets[this._targets.length - 1];\n\n      if (this._activeTarget !== target) {\n        this._activate(target);\n      }\n\n      return;\n    }\n\n    if (this._activeTarget && scrollTop < this._offsets[0] && this._offsets[0] > 0) {\n      this._activeTarget = null;\n\n      this._clear();\n\n      return;\n    }\n\n    for (let i = this._offsets.length; i--;) {\n      const isActiveTarget = this._activeTarget !== this._targets[i] && scrollTop >= this._offsets[i] && (typeof this._offsets[i + 1] === 'undefined' || scrollTop < this._offsets[i + 1]);\n\n      if (isActiveTarget) {\n        this._activate(this._targets[i]);\n      }\n    }\n  }\n\n  _activate(target) {\n    this._activeTarget = target;\n\n    this._clear();\n\n    const queries = this._selector.split(',').map(selector => `${selector}[data-bs-target=\"${target}\"],${selector}[href=\"${target}\"]`);\n\n    const link = SelectorEngine.findOne(queries.join(','));\n\n    if (link.classList.contains(CLASS_NAME_DROPDOWN_ITEM)) {\n      SelectorEngine.findOne(SELECTOR_DROPDOWN_TOGGLE$1, link.closest(SELECTOR_DROPDOWN$1)).classList.add(CLASS_NAME_ACTIVE$1);\n      link.classList.add(CLASS_NAME_ACTIVE$1);\n    } else {\n      // Set triggered link as active\n      link.classList.add(CLASS_NAME_ACTIVE$1);\n      SelectorEngine.parents(link, SELECTOR_NAV_LIST_GROUP$1).forEach(listGroup => {\n        // Set triggered links parents as active\n        // With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor\n        SelectorEngine.prev(listGroup, `${SELECTOR_NAV_LINKS}, ${SELECTOR_LIST_ITEMS}`).forEach(item => item.classList.add(CLASS_NAME_ACTIVE$1)); // Handle special case when .nav-link is inside .nav-item\n\n        SelectorEngine.prev(listGroup, SELECTOR_NAV_ITEMS).forEach(navItem => {\n          SelectorEngine.children(navItem, SELECTOR_NAV_LINKS).forEach(item => item.classList.add(CLASS_NAME_ACTIVE$1));\n        });\n      });\n    }\n\n    EventHandler.trigger(this._scrollElement, EVENT_ACTIVATE, {\n      relatedTarget: target\n    });\n  }\n\n  _clear() {\n    SelectorEngine.find(this._selector).filter(node => node.classList.contains(CLASS_NAME_ACTIVE$1)).forEach(node => node.classList.remove(CLASS_NAME_ACTIVE$1));\n  } // Static\n\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = ScrollSpy.getOrCreateInstance(this, config);\n\n      if (typeof config !== 'string') {\n        return;\n      }\n\n      if (typeof data[config] === 'undefined') {\n        throw new TypeError(`No method named \"${config}\"`);\n      }\n\n      data[config]();\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n  SelectorEngine.find(SELECTOR_DATA_SPY).forEach(spy => new ScrollSpy(spy));\n});\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .ScrollSpy to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(ScrollSpy);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): tab.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$1 = 'tab';\nconst DATA_KEY$1 = 'bs.tab';\nconst EVENT_KEY$1 = `.${DATA_KEY$1}`;\nconst DATA_API_KEY = '.data-api';\nconst EVENT_HIDE$1 = `hide${EVENT_KEY$1}`;\nconst EVENT_HIDDEN$1 = `hidden${EVENT_KEY$1}`;\nconst EVENT_SHOW$1 = `show${EVENT_KEY$1}`;\nconst EVENT_SHOWN$1 = `shown${EVENT_KEY$1}`;\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY$1}${DATA_API_KEY}`;\nconst CLASS_NAME_DROPDOWN_MENU = 'dropdown-menu';\nconst CLASS_NAME_ACTIVE = 'active';\nconst CLASS_NAME_FADE$1 = 'fade';\nconst CLASS_NAME_SHOW$1 = 'show';\nconst SELECTOR_DROPDOWN = '.dropdown';\nconst SELECTOR_NAV_LIST_GROUP = '.nav, .list-group';\nconst SELECTOR_ACTIVE = '.active';\nconst SELECTOR_ACTIVE_UL = ':scope > li > .active';\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"tab\"], [data-bs-toggle=\"pill\"], [data-bs-toggle=\"list\"]';\nconst SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle';\nconst SELECTOR_DROPDOWN_ACTIVE_CHILD = ':scope > .dropdown-menu .active';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Tab extends BaseComponent {\n  // Getters\n  static get NAME() {\n    return NAME$1;\n  } // Public\n\n\n  show() {\n    if (this._element.parentNode && this._element.parentNode.nodeType === Node.ELEMENT_NODE && this._element.classList.contains(CLASS_NAME_ACTIVE)) {\n      return;\n    }\n\n    let previous;\n    const target = getElementFromSelector(this._element);\n\n    const listElement = this._element.closest(SELECTOR_NAV_LIST_GROUP);\n\n    if (listElement) {\n      const itemSelector = listElement.nodeName === 'UL' || listElement.nodeName === 'OL' ? SELECTOR_ACTIVE_UL : SELECTOR_ACTIVE;\n      previous = SelectorEngine.find(itemSelector, listElement);\n      previous = previous[previous.length - 1];\n    }\n\n    const hideEvent = previous ? EventHandler.trigger(previous, EVENT_HIDE$1, {\n      relatedTarget: this._element\n    }) : null;\n    const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$1, {\n      relatedTarget: previous\n    });\n\n    if (showEvent.defaultPrevented || hideEvent !== null && hideEvent.defaultPrevented) {\n      return;\n    }\n\n    this._activate(this._element, listElement);\n\n    const complete = () => {\n      EventHandler.trigger(previous, EVENT_HIDDEN$1, {\n        relatedTarget: this._element\n      });\n      EventHandler.trigger(this._element, EVENT_SHOWN$1, {\n        relatedTarget: previous\n      });\n    };\n\n    if (target) {\n      this._activate(target, target.parentNode, complete);\n    } else {\n      complete();\n    }\n  } // Private\n\n\n  _activate(element, container, callback) {\n    const activeElements = container && (container.nodeName === 'UL' || container.nodeName === 'OL') ? SelectorEngine.find(SELECTOR_ACTIVE_UL, container) : SelectorEngine.children(container, SELECTOR_ACTIVE);\n    const active = activeElements[0];\n    const isTransitioning = callback && active && active.classList.contains(CLASS_NAME_FADE$1);\n\n    const complete = () => this._transitionComplete(element, active, callback);\n\n    if (active && isTransitioning) {\n      active.classList.remove(CLASS_NAME_SHOW$1);\n\n      this._queueCallback(complete, element, true);\n    } else {\n      complete();\n    }\n  }\n\n  _transitionComplete(element, active, callback) {\n    if (active) {\n      active.classList.remove(CLASS_NAME_ACTIVE);\n      const dropdownChild = SelectorEngine.findOne(SELECTOR_DROPDOWN_ACTIVE_CHILD, active.parentNode);\n\n      if (dropdownChild) {\n        dropdownChild.classList.remove(CLASS_NAME_ACTIVE);\n      }\n\n      if (active.getAttribute('role') === 'tab') {\n        active.setAttribute('aria-selected', false);\n      }\n    }\n\n    element.classList.add(CLASS_NAME_ACTIVE);\n\n    if (element.getAttribute('role') === 'tab') {\n      element.setAttribute('aria-selected', true);\n    }\n\n    reflow(element);\n\n    if (element.classList.contains(CLASS_NAME_FADE$1)) {\n      element.classList.add(CLASS_NAME_SHOW$1);\n    }\n\n    let parent = element.parentNode;\n\n    if (parent && parent.nodeName === 'LI') {\n      parent = parent.parentNode;\n    }\n\n    if (parent && parent.classList.contains(CLASS_NAME_DROPDOWN_MENU)) {\n      const dropdownElement = element.closest(SELECTOR_DROPDOWN);\n\n      if (dropdownElement) {\n        SelectorEngine.find(SELECTOR_DROPDOWN_TOGGLE, dropdownElement).forEach(dropdown => dropdown.classList.add(CLASS_NAME_ACTIVE));\n      }\n\n      element.setAttribute('aria-expanded', true);\n    }\n\n    if (callback) {\n      callback();\n    }\n  } // Static\n\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Tab.getOrCreateInstance(this);\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config]();\n      }\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n  if (['A', 'AREA'].includes(this.tagName)) {\n    event.preventDefault();\n  }\n\n  if (isDisabled(this)) {\n    return;\n  }\n\n  const data = Tab.getOrCreateInstance(this);\n  data.show();\n});\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Tab to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Tab);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): toast.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'toast';\nconst DATA_KEY = 'bs.toast';\nconst EVENT_KEY = `.${DATA_KEY}`;\nconst EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY}`;\nconst EVENT_MOUSEOVER = `mouseover${EVENT_KEY}`;\nconst EVENT_MOUSEOUT = `mouseout${EVENT_KEY}`;\nconst EVENT_FOCUSIN = `focusin${EVENT_KEY}`;\nconst EVENT_FOCUSOUT = `focusout${EVENT_KEY}`;\nconst EVENT_HIDE = `hide${EVENT_KEY}`;\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`;\nconst EVENT_SHOW = `show${EVENT_KEY}`;\nconst EVENT_SHOWN = `shown${EVENT_KEY}`;\nconst CLASS_NAME_FADE = 'fade';\nconst CLASS_NAME_HIDE = 'hide';\nconst CLASS_NAME_SHOW = 'show';\nconst CLASS_NAME_SHOWING = 'showing';\nconst DefaultType = {\n  animation: 'boolean',\n  autohide: 'boolean',\n  delay: 'number'\n};\nconst Default = {\n  animation: true,\n  autohide: true,\n  delay: 5000\n};\nconst SELECTOR_DATA_DISMISS = '[data-bs-dismiss=\"toast\"]';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Toast extends BaseComponent {\n  constructor(element, config) {\n    super(element);\n    this._config = this._getConfig(config);\n    this._timeout = null;\n    this._hasMouseInteraction = false;\n    this._hasKeyboardInteraction = false;\n\n    this._setListeners();\n  } // Getters\n\n\n  static get DefaultType() {\n    return DefaultType;\n  }\n\n  static get Default() {\n    return Default;\n  }\n\n  static get NAME() {\n    return NAME;\n  } // Public\n\n\n  show() {\n    const showEvent = EventHandler.trigger(this._element, EVENT_SHOW);\n\n    if (showEvent.defaultPrevented) {\n      return;\n    }\n\n    this._clearTimeout();\n\n    if (this._config.animation) {\n      this._element.classList.add(CLASS_NAME_FADE);\n    }\n\n    const complete = () => {\n      this._element.classList.remove(CLASS_NAME_SHOWING);\n\n      this._element.classList.add(CLASS_NAME_SHOW);\n\n      EventHandler.trigger(this._element, EVENT_SHOWN);\n\n      this._maybeScheduleHide();\n    };\n\n    this._element.classList.remove(CLASS_NAME_HIDE);\n\n    reflow(this._element);\n\n    this._element.classList.add(CLASS_NAME_SHOWING);\n\n    this._queueCallback(complete, this._element, this._config.animation);\n  }\n\n  hide() {\n    if (!this._element.classList.contains(CLASS_NAME_SHOW)) {\n      return;\n    }\n\n    const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE);\n\n    if (hideEvent.defaultPrevented) {\n      return;\n    }\n\n    const complete = () => {\n      this._element.classList.add(CLASS_NAME_HIDE);\n\n      EventHandler.trigger(this._element, EVENT_HIDDEN);\n    };\n\n    this._element.classList.remove(CLASS_NAME_SHOW);\n\n    this._queueCallback(complete, this._element, this._config.animation);\n  }\n\n  dispose() {\n    this._clearTimeout();\n\n    if (this._element.classList.contains(CLASS_NAME_SHOW)) {\n      this._element.classList.remove(CLASS_NAME_SHOW);\n    }\n\n    super.dispose();\n  } // Private\n\n\n  _getConfig(config) {\n    config = { ...Default,\n      ...Manipulator.getDataAttributes(this._element),\n      ...(typeof config === 'object' && config ? config : {})\n    };\n    typeCheckConfig(NAME, config, this.constructor.DefaultType);\n    return config;\n  }\n\n  _maybeScheduleHide() {\n    if (!this._config.autohide) {\n      return;\n    }\n\n    if (this._hasMouseInteraction || this._hasKeyboardInteraction) {\n      return;\n    }\n\n    this._timeout = setTimeout(() => {\n      this.hide();\n    }, this._config.delay);\n  }\n\n  _onInteraction(event, isInteracting) {\n    switch (event.type) {\n      case 'mouseover':\n      case 'mouseout':\n        this._hasMouseInteraction = isInteracting;\n        break;\n\n      case 'focusin':\n      case 'focusout':\n        this._hasKeyboardInteraction = isInteracting;\n        break;\n    }\n\n    if (isInteracting) {\n      this._clearTimeout();\n\n      return;\n    }\n\n    const nextElement = event.relatedTarget;\n\n    if (this._element === nextElement || this._element.contains(nextElement)) {\n      return;\n    }\n\n    this._maybeScheduleHide();\n  }\n\n  _setListeners() {\n    EventHandler.on(this._element, EVENT_CLICK_DISMISS, SELECTOR_DATA_DISMISS, () => this.hide());\n    EventHandler.on(this._element, EVENT_MOUSEOVER, event => this._onInteraction(event, true));\n    EventHandler.on(this._element, EVENT_MOUSEOUT, event => this._onInteraction(event, false));\n    EventHandler.on(this._element, EVENT_FOCUSIN, event => this._onInteraction(event, true));\n    EventHandler.on(this._element, EVENT_FOCUSOUT, event => this._onInteraction(event, false));\n  }\n\n  _clearTimeout() {\n    clearTimeout(this._timeout);\n    this._timeout = null;\n  } // Static\n\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Toast.getOrCreateInstance(this, config);\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config](this);\n      }\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Toast to jQuery only if jQuery is present\n */\n\n\ndefineJQueryPlugin(Toast);\n\nexport { Alert, Button, Carousel, Collapse, Dropdown, Modal, Offcanvas, Popover, ScrollSpy, Tab, Toast, Tooltip };\n//# sourceMappingURL=bootstrap.esm.js.map\n"
  },
  {
    "path": "src/sourceDev.WebApp/SharedThemes/superhero/wwwroot/js/jquery.js",
    "content": "/*!\n * jQuery JavaScript Library v3.7.0\n * https://jquery.com/\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license\n * https://jquery.org/license\n *\n * Date: 2023-05-11T18:29Z\n */\n(function (global, factory) {\n\n\t\"use strict\";\n\n\tif (typeof module === \"object\" && typeof module.exports === \"object\") {\n\n\t\t// For CommonJS and CommonJS-like environments where a proper `window`\n\t\t// is present, execute the factory and get jQuery.\n\t\t// For environments that do not have a `window` with a `document`\n\t\t// (such as Node.js), expose a factory as module.exports.\n\t\t// This accentuates the need for the creation of a real `window`.\n\t\t// e.g. var jQuery = require(\"jquery\")(window);\n\t\t// See ticket trac-14549 for more info.\n\t\tmodule.exports = global.document ?\n\t\t\tfactory(global, true) :\n\t\t\tfunction (w) {\n\t\t\t\tif (!w.document) {\n\t\t\t\t\tthrow new Error(\"jQuery requires a window with a document\");\n\t\t\t\t}\n\t\t\t\treturn factory(w);\n\t\t\t};\n\t} else {\n\t\tfactory(global);\n\t}\n\n\t// Pass this if window is not defined yet\n})(typeof window !== \"undefined\" ? window : this, function (window, noGlobal) {\n\n\t// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1\n\t// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode\n\t// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common\n\t// enough that all such attempts are guarded in a try block.\n\t\"use strict\";\n\n\tvar arr = [];\n\n\tvar getProto = Object.getPrototypeOf;\n\n\tvar slice = arr.slice;\n\n\tvar flat = arr.flat ? function (array) {\n\t\treturn arr.flat.call(array);\n\t} : function (array) {\n\t\treturn arr.concat.apply([], array);\n\t};\n\n\n\tvar push = arr.push;\n\n\tvar indexOf = arr.indexOf;\n\n\tvar class2type = {};\n\n\tvar toString = class2type.toString;\n\n\tvar hasOwn = class2type.hasOwnProperty;\n\n\tvar fnToString = hasOwn.toString;\n\n\tvar ObjectFunctionString = fnToString.call(Object);\n\n\tvar support = {};\n\n\tvar isFunction = function isFunction(obj) {\n\n\t\t// Support: Chrome <=57, Firefox <=52\n\t\t// In some browsers, typeof returns \"function\" for HTML <object> elements\n\t\t// (i.e., `typeof document.createElement( \"object\" ) === \"function\"`).\n\t\t// We don't want to classify *any* DOM node as a function.\n\t\t// Support: QtWeb <=3.8.5, WebKit <=534.34, wkhtmltopdf tool <=0.12.5\n\t\t// Plus for old WebKit, typeof returns \"function\" for HTML collections\n\t\t// (e.g., `typeof document.getElementsByTagName(\"div\") === \"function\"`). (gh-4756)\n\t\treturn typeof obj === \"function\" && typeof obj.nodeType !== \"number\" &&\n\t\t\ttypeof obj.item !== \"function\";\n\t};\n\n\n\tvar isWindow = function isWindow(obj) {\n\t\treturn obj != null && obj === obj.window;\n\t};\n\n\n\tvar document = window.document;\n\n\n\n\tvar preservedScriptAttributes = {\n\t\ttype: true,\n\t\tsrc: true,\n\t\tnonce: true,\n\t\tnoModule: true\n\t};\n\n\tfunction DOMEval(code, node, doc) {\n\t\tdoc = doc || document;\n\n\t\tvar i, val,\n\t\t\tscript = doc.createElement(\"script\");\n\n\t\tscript.text = code;\n\t\tif (node) {\n\t\t\tfor (i in preservedScriptAttributes) {\n\n\t\t\t\t// Support: Firefox 64+, Edge 18+\n\t\t\t\t// Some browsers don't support the \"nonce\" property on scripts.\n\t\t\t\t// On the other hand, just using `getAttribute` is not enough as\n\t\t\t\t// the `nonce` attribute is reset to an empty string whenever it\n\t\t\t\t// becomes browsing-context connected.\n\t\t\t\t// See https://github.com/whatwg/html/issues/2369\n\t\t\t\t// See https://html.spec.whatwg.org/#nonce-attributes\n\t\t\t\t// The `node.getAttribute` check was added for the sake of\n\t\t\t\t// `jQuery.globalEval` so that it can fake a nonce-containing node\n\t\t\t\t// via an object.\n\t\t\t\tval = node[i] || node.getAttribute && node.getAttribute(i);\n\t\t\t\tif (val) {\n\t\t\t\t\tscript.setAttribute(i, val);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tdoc.head.appendChild(script).parentNode.removeChild(script);\n\t}\n\n\n\tfunction toType(obj) {\n\t\tif (obj == null) {\n\t\t\treturn obj + \"\";\n\t\t}\n\n\t\t// Support: Android <=2.3 only (functionish RegExp)\n\t\treturn typeof obj === \"object\" || typeof obj === \"function\" ?\n\t\t\tclass2type[toString.call(obj)] || \"object\" :\n\t\t\ttypeof obj;\n\t}\n\t/* global Symbol */\n\t// Defining this global in .eslintrc.json would create a danger of using the global\n\t// unguarded in another place, it seems safer to define global only for this module\n\n\n\n\tvar version = \"3.7.0\",\n\n\t\trhtmlSuffix = /HTML$/i,\n\n\t\t// Define a local copy of jQuery\n\t\tjQuery = function (selector, context) {\n\n\t\t\t// The jQuery object is actually just the init constructor 'enhanced'\n\t\t\t// Need init if jQuery is called (just allow error to be thrown if not included)\n\t\t\treturn new jQuery.fn.init(selector, context);\n\t\t};\n\n\tjQuery.fn = jQuery.prototype = {\n\n\t\t// The current version of jQuery being used\n\t\tjquery: version,\n\n\t\tconstructor: jQuery,\n\n\t\t// The default length of a jQuery object is 0\n\t\tlength: 0,\n\n\t\ttoArray: function () {\n\t\t\treturn slice.call(this);\n\t\t},\n\n\t\t// Get the Nth element in the matched element set OR\n\t\t// Get the whole matched element set as a clean array\n\t\tget: function (num) {\n\n\t\t\t// Return all the elements in a clean array\n\t\t\tif (num == null) {\n\t\t\t\treturn slice.call(this);\n\t\t\t}\n\n\t\t\t// Return just the one element from the set\n\t\t\treturn num < 0 ? this[num + this.length] : this[num];\n\t\t},\n\n\t\t// Take an array of elements and push it onto the stack\n\t\t// (returning the new matched element set)\n\t\tpushStack: function (elems) {\n\n\t\t\t// Build a new jQuery matched element set\n\t\t\tvar ret = jQuery.merge(this.constructor(), elems);\n\n\t\t\t// Add the old object onto the stack (as a reference)\n\t\t\tret.prevObject = this;\n\n\t\t\t// Return the newly-formed element set\n\t\t\treturn ret;\n\t\t},\n\n\t\t// Execute a callback for every element in the matched set.\n\t\teach: function (callback) {\n\t\t\treturn jQuery.each(this, callback);\n\t\t},\n\n\t\tmap: function (callback) {\n\t\t\treturn this.pushStack(jQuery.map(this, function (elem, i) {\n\t\t\t\treturn callback.call(elem, i, elem);\n\t\t\t}));\n\t\t},\n\n\t\tslice: function () {\n\t\t\treturn this.pushStack(slice.apply(this, arguments));\n\t\t},\n\n\t\tfirst: function () {\n\t\t\treturn this.eq(0);\n\t\t},\n\n\t\tlast: function () {\n\t\t\treturn this.eq(-1);\n\t\t},\n\n\t\teven: function () {\n\t\t\treturn this.pushStack(jQuery.grep(this, function (_elem, i) {\n\t\t\t\treturn (i + 1) % 2;\n\t\t\t}));\n\t\t},\n\n\t\todd: function () {\n\t\t\treturn this.pushStack(jQuery.grep(this, function (_elem, i) {\n\t\t\t\treturn i % 2;\n\t\t\t}));\n\t\t},\n\n\t\teq: function (i) {\n\t\t\tvar len = this.length,\n\t\t\t\tj = +i + (i < 0 ? len : 0);\n\t\t\treturn this.pushStack(j >= 0 && j < len ? [this[j]] : []);\n\t\t},\n\n\t\tend: function () {\n\t\t\treturn this.prevObject || this.constructor();\n\t\t},\n\n\t\t// For internal use only.\n\t\t// Behaves like an Array's method, not like a jQuery method.\n\t\tpush: push,\n\t\tsort: arr.sort,\n\t\tsplice: arr.splice\n\t};\n\n\tjQuery.extend = jQuery.fn.extend = function () {\n\t\tvar options, name, src, copy, copyIsArray, clone,\n\t\t\ttarget = arguments[0] || {},\n\t\t\ti = 1,\n\t\t\tlength = arguments.length,\n\t\t\tdeep = false;\n\n\t\t// Handle a deep copy situation\n\t\tif (typeof target === \"boolean\") {\n\t\t\tdeep = target;\n\n\t\t\t// Skip the boolean and the target\n\t\t\ttarget = arguments[i] || {};\n\t\t\ti++;\n\t\t}\n\n\t\t// Handle case when target is a string or something (possible in deep copy)\n\t\tif (typeof target !== \"object\" && !isFunction(target)) {\n\t\t\ttarget = {};\n\t\t}\n\n\t\t// Extend jQuery itself if only one argument is passed\n\t\tif (i === length) {\n\t\t\ttarget = this;\n\t\t\ti--;\n\t\t}\n\n\t\tfor (; i < length; i++) {\n\n\t\t\t// Only deal with non-null/undefined values\n\t\t\tif ((options = arguments[i]) != null) {\n\n\t\t\t\t// Extend the base object\n\t\t\t\tfor (name in options) {\n\t\t\t\t\tcopy = options[name];\n\n\t\t\t\t\t// Prevent Object.prototype pollution\n\t\t\t\t\t// Prevent never-ending loop\n\t\t\t\t\tif (name === \"__proto__\" || target === copy) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\t\tif (deep && copy && (jQuery.isPlainObject(copy) ||\n\t\t\t\t\t\t(copyIsArray = Array.isArray(copy)))) {\n\t\t\t\t\t\tsrc = target[name];\n\n\t\t\t\t\t\t// Ensure proper type for the source value\n\t\t\t\t\t\tif (copyIsArray && !Array.isArray(src)) {\n\t\t\t\t\t\t\tclone = [];\n\t\t\t\t\t\t} else if (!copyIsArray && !jQuery.isPlainObject(src)) {\n\t\t\t\t\t\t\tclone = {};\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tclone = src;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcopyIsArray = false;\n\n\t\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\t\ttarget[name] = jQuery.extend(deep, clone, copy);\n\n\t\t\t\t\t\t// Don't bring in undefined values\n\t\t\t\t\t} else if (copy !== undefined) {\n\t\t\t\t\t\ttarget[name] = copy;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Return the modified object\n\t\treturn target;\n\t};\n\n\tjQuery.extend({\n\n\t\t// Unique for each copy of jQuery on the page\n\t\texpando: \"jQuery\" + (version + Math.random()).replace(/\\D/g, \"\"),\n\n\t\t// Assume jQuery is ready without the ready module\n\t\tisReady: true,\n\n\t\terror: function (msg) {\n\t\t\tthrow new Error(msg);\n\t\t},\n\n\t\tnoop: function () { },\n\n\t\tisPlainObject: function (obj) {\n\t\t\tvar proto, Ctor;\n\n\t\t\t// Detect obvious negatives\n\t\t\t// Use toString instead of jQuery.type to catch host objects\n\t\t\tif (!obj || toString.call(obj) !== \"[object Object]\") {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tproto = getProto(obj);\n\n\t\t\t// Objects with no prototype (e.g., `Object.create( null )`) are plain\n\t\t\tif (!proto) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\t// Objects with prototype are plain iff they were constructed by a global Object function\n\t\t\tCtor = hasOwn.call(proto, \"constructor\") && proto.constructor;\n\t\t\treturn typeof Ctor === \"function\" && fnToString.call(Ctor) === ObjectFunctionString;\n\t\t},\n\n\t\tisEmptyObject: function (obj) {\n\t\t\tvar name;\n\n\t\t\tfor (name in obj) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\n\t\t// Evaluates a script in a provided context; falls back to the global one\n\t\t// if not specified.\n\t\tglobalEval: function (code, options, doc) {\n\t\t\tDOMEval(code, { nonce: options && options.nonce }, doc);\n\t\t},\n\n\t\teach: function (obj, callback) {\n\t\t\tvar length, i = 0;\n\n\t\t\tif (isArrayLike(obj)) {\n\t\t\t\tlength = obj.length;\n\t\t\t\tfor (; i < length; i++) {\n\t\t\t\t\tif (callback.call(obj[i], i, obj[i]) === false) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor (i in obj) {\n\t\t\t\t\tif (callback.call(obj[i], i, obj[i]) === false) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn obj;\n\t\t},\n\n\n\t\t// Retrieve the text value of an array of DOM nodes\n\t\ttext: function (elem) {\n\t\t\tvar node,\n\t\t\t\tret = \"\",\n\t\t\t\ti = 0,\n\t\t\t\tnodeType = elem.nodeType;\n\n\t\t\tif (!nodeType) {\n\n\t\t\t\t// If no nodeType, this is expected to be an array\n\t\t\t\twhile ((node = elem[i++])) {\n\n\t\t\t\t\t// Do not traverse comment nodes\n\t\t\t\t\tret += jQuery.text(node);\n\t\t\t\t}\n\t\t\t} else if (nodeType === 1 || nodeType === 9 || nodeType === 11) {\n\t\t\t\treturn elem.textContent;\n\t\t\t} else if (nodeType === 3 || nodeType === 4) {\n\t\t\t\treturn elem.nodeValue;\n\t\t\t}\n\n\t\t\t// Do not include comment or processing instruction nodes\n\n\t\t\treturn ret;\n\t\t},\n\n\t\t// results is for internal usage only\n\t\tmakeArray: function (arr, results) {\n\t\t\tvar ret = results || [];\n\n\t\t\tif (arr != null) {\n\t\t\t\tif (isArrayLike(Object(arr))) {\n\t\t\t\t\tjQuery.merge(ret,\n\t\t\t\t\t\ttypeof arr === \"string\" ?\n\t\t\t\t\t\t\t[arr] : arr\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\tpush.call(ret, arr);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn ret;\n\t\t},\n\n\t\tinArray: function (elem, arr, i) {\n\t\t\treturn arr == null ? -1 : indexOf.call(arr, elem, i);\n\t\t},\n\n\t\tisXMLDoc: function (elem) {\n\t\t\tvar namespace = elem && elem.namespaceURI,\n\t\t\t\tdocElem = elem && (elem.ownerDocument || elem).documentElement;\n\n\t\t\t// Assume HTML when documentElement doesn't yet exist, such as inside\n\t\t\t// document fragments.\n\t\t\treturn !rhtmlSuffix.test(namespace || docElem && docElem.nodeName || \"HTML\");\n\t\t},\n\n\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\tmerge: function (first, second) {\n\t\t\tvar len = +second.length,\n\t\t\t\tj = 0,\n\t\t\t\ti = first.length;\n\n\t\t\tfor (; j < len; j++) {\n\t\t\t\tfirst[i++] = second[j];\n\t\t\t}\n\n\t\t\tfirst.length = i;\n\n\t\t\treturn first;\n\t\t},\n\n\t\tgrep: function (elems, callback, invert) {\n\t\t\tvar callbackInverse,\n\t\t\t\tmatches = [],\n\t\t\t\ti = 0,\n\t\t\t\tlength = elems.length,\n\t\t\t\tcallbackExpect = !invert;\n\n\t\t\t// Go through the array, only saving the items\n\t\t\t// that pass the validator function\n\t\t\tfor (; i < length; i++) {\n\t\t\t\tcallbackInverse = !callback(elems[i], i);\n\t\t\t\tif (callbackInverse !== callbackExpect) {\n\t\t\t\t\tmatches.push(elems[i]);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn matches;\n\t\t},\n\n\t\t// arg is for internal usage only\n\t\tmap: function (elems, callback, arg) {\n\t\t\tvar length, value,\n\t\t\t\ti = 0,\n\t\t\t\tret = [];\n\n\t\t\t// Go through the array, translating each of the items to their new values\n\t\t\tif (isArrayLike(elems)) {\n\t\t\t\tlength = elems.length;\n\t\t\t\tfor (; i < length; i++) {\n\t\t\t\t\tvalue = callback(elems[i], i, arg);\n\n\t\t\t\t\tif (value != null) {\n\t\t\t\t\t\tret.push(value);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Go through every key on the object,\n\t\t\t} else {\n\t\t\t\tfor (i in elems) {\n\t\t\t\t\tvalue = callback(elems[i], i, arg);\n\n\t\t\t\t\tif (value != null) {\n\t\t\t\t\t\tret.push(value);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Flatten any nested arrays\n\t\t\treturn flat(ret);\n\t\t},\n\n\t\t// A global GUID counter for objects\n\t\tguid: 1,\n\n\t\t// jQuery.support is not used in Core but other projects attach their\n\t\t// properties to it so it needs to exist.\n\t\tsupport: support\n\t});\n\n\tif (typeof Symbol === \"function\") {\n\t\tjQuery.fn[Symbol.iterator] = arr[Symbol.iterator];\n\t}\n\n\t// Populate the class2type map\n\tjQuery.each(\"Boolean Number String Function Array Date RegExp Object Error Symbol\".split(\" \"),\n\t\tfunction (_i, name) {\n\t\t\tclass2type[\"[object \" + name + \"]\"] = name.toLowerCase();\n\t\t});\n\n\tfunction isArrayLike(obj) {\n\n\t\t// Support: real iOS 8.2 only (not reproducible in simulator)\n\t\t// `in` check used to prevent JIT error (gh-2145)\n\t\t// hasOwn isn't used here due to false negatives\n\t\t// regarding Nodelist length in IE\n\t\tvar length = !!obj && \"length\" in obj && obj.length,\n\t\t\ttype = toType(obj);\n\n\t\tif (isFunction(obj) || isWindow(obj)) {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn type === \"array\" || length === 0 ||\n\t\t\ttypeof length === \"number\" && length > 0 && (length - 1) in obj;\n\t}\n\n\n\tfunction nodeName(elem, name) {\n\n\t\treturn elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();\n\n\t}\n\tvar pop = arr.pop;\n\n\n\tvar sort = arr.sort;\n\n\n\tvar splice = arr.splice;\n\n\n\tvar whitespace = \"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\";\n\n\n\tvar rtrimCSS = new RegExp(\n\t\t\"^\" + whitespace + \"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\" + whitespace + \"+$\",\n\t\t\"g\"\n\t);\n\n\n\n\n\t// Note: an element does not contain itself\n\tjQuery.contains = function (a, b) {\n\t\tvar bup = b && b.parentNode;\n\n\t\treturn a === bup || !!(bup && bup.nodeType === 1 && (\n\n\t\t\t// Support: IE 9 - 11+\n\t\t\t// IE doesn't have `contains` on SVG.\n\t\t\ta.contains ?\n\t\t\t\ta.contains(bup) :\n\t\t\t\ta.compareDocumentPosition && a.compareDocumentPosition(bup) & 16\n\t\t));\n\t};\n\n\n\n\n\t// CSS string/identifier serialization\n\t// https://drafts.csswg.org/cssom/#common-serializing-idioms\n\tvar rcssescape = /([\\0-\\x1f\\x7f]|^-?\\d)|^-$|[^\\x80-\\uFFFF\\w-]/g;\n\n\tfunction fcssescape(ch, asCodePoint) {\n\t\tif (asCodePoint) {\n\n\t\t\t// U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER\n\t\t\tif (ch === \"\\0\") {\n\t\t\t\treturn \"\\uFFFD\";\n\t\t\t}\n\n\t\t\t// Control characters and (dependent upon position) numbers get escaped as code points\n\t\t\treturn ch.slice(0, -1) + \"\\\\\" + ch.charCodeAt(ch.length - 1).toString(16) + \" \";\n\t\t}\n\n\t\t// Other potentially-special ASCII characters get backslash-escaped\n\t\treturn \"\\\\\" + ch;\n\t}\n\n\tjQuery.escapeSelector = function (sel) {\n\t\treturn (sel + \"\").replace(rcssescape, fcssescape);\n\t};\n\n\n\n\n\tvar preferredDoc = document,\n\t\tpushNative = push;\n\n\t(function () {\n\n\t\tvar i,\n\t\t\tExpr,\n\t\t\toutermostContext,\n\t\t\tsortInput,\n\t\t\thasDuplicate,\n\t\t\tpush = pushNative,\n\n\t\t\t// Local document vars\n\t\t\tdocument,\n\t\t\tdocumentElement,\n\t\t\tdocumentIsHTML,\n\t\t\trbuggyQSA,\n\t\t\tmatches,\n\n\t\t\t// Instance-specific data\n\t\t\texpando = jQuery.expando,\n\t\t\tdirruns = 0,\n\t\t\tdone = 0,\n\t\t\tclassCache = createCache(),\n\t\t\ttokenCache = createCache(),\n\t\t\tcompilerCache = createCache(),\n\t\t\tnonnativeSelectorCache = createCache(),\n\t\t\tsortOrder = function (a, b) {\n\t\t\t\tif (a === b) {\n\t\t\t\t\thasDuplicate = true;\n\t\t\t\t}\n\t\t\t\treturn 0;\n\t\t\t},\n\n\t\t\tbooleans = \"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|\" +\n\t\t\t\t\"loop|multiple|open|readonly|required|scoped\",\n\n\t\t\t// Regular expressions\n\n\t\t\t// https://www.w3.org/TR/css-syntax-3/#ident-token-diagram\n\t\t\tidentifier = \"(?:\\\\\\\\[\\\\da-fA-F]{1,6}\" + whitespace +\n\t\t\t\t\"?|\\\\\\\\[^\\\\r\\\\n\\\\f]|[\\\\w-]|[^\\0-\\\\x7f])+\",\n\n\t\t\t// Attribute selectors: https://www.w3.org/TR/selectors/#attribute-selectors\n\t\t\tattributes = \"\\\\[\" + whitespace + \"*(\" + identifier + \")(?:\" + whitespace +\n\n\t\t\t\t// Operator (capture 2)\n\t\t\t\t\"*([*^$|!~]?=)\" + whitespace +\n\n\t\t\t\t// \"Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]\"\n\t\t\t\t\"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\" + identifier + \"))|)\" +\n\t\t\t\twhitespace + \"*\\\\]\",\n\n\t\t\tpseudos = \":(\" + identifier + \")(?:\\\\((\" +\n\n\t\t\t\t// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:\n\t\t\t\t// 1. quoted (capture 3; capture 4 or capture 5)\n\t\t\t\t\"('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|\" +\n\n\t\t\t\t// 2. simple (capture 6)\n\t\t\t\t\"((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\" + attributes + \")*)|\" +\n\n\t\t\t\t// 3. anything else (capture 2)\n\t\t\t\t\".*\" +\n\t\t\t\t\")\\\\)|)\",\n\n\t\t\t// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter\n\t\t\trwhitespace = new RegExp(whitespace + \"+\", \"g\"),\n\n\t\t\trcomma = new RegExp(\"^\" + whitespace + \"*,\" + whitespace + \"*\"),\n\t\t\trleadingCombinator = new RegExp(\"^\" + whitespace + \"*([>+~]|\" + whitespace + \")\" +\n\t\t\t\twhitespace + \"*\"),\n\t\t\trdescend = new RegExp(whitespace + \"|>\"),\n\n\t\t\trpseudo = new RegExp(pseudos),\n\t\t\tridentifier = new RegExp(\"^\" + identifier + \"$\"),\n\n\t\t\tmatchExpr = {\n\t\t\t\tID: new RegExp(\"^#(\" + identifier + \")\"),\n\t\t\t\tCLASS: new RegExp(\"^\\\\.(\" + identifier + \")\"),\n\t\t\t\tTAG: new RegExp(\"^(\" + identifier + \"|[*])\"),\n\t\t\t\tATTR: new RegExp(\"^\" + attributes),\n\t\t\t\tPSEUDO: new RegExp(\"^\" + pseudos),\n\t\t\t\tCHILD: new RegExp(\n\t\t\t\t\t\"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\" +\n\t\t\t\t\twhitespace + \"*(even|odd|(([+-]|)(\\\\d*)n|)\" + whitespace + \"*(?:([+-]|)\" +\n\t\t\t\t\twhitespace + \"*(\\\\d+)|))\" + whitespace + \"*\\\\)|)\", \"i\"),\n\t\t\t\tbool: new RegExp(\"^(?:\" + booleans + \")$\", \"i\"),\n\n\t\t\t\t// For use in libraries implementing .is()\n\t\t\t\t// We use this for POS matching in `select`\n\t\t\t\tneedsContext: new RegExp(\"^\" + whitespace +\n\t\t\t\t\t\"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\" + whitespace +\n\t\t\t\t\t\"*((?:-\\\\d)?\\\\d*)\" + whitespace + \"*\\\\)|)(?=[^-]|$)\", \"i\")\n\t\t\t},\n\n\t\t\trinputs = /^(?:input|select|textarea|button)$/i,\n\t\t\trheader = /^h\\d$/i,\n\n\t\t\t// Easily-parseable/retrievable ID or TAG or CLASS selectors\n\t\t\trquickExpr = /^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,\n\n\t\t\trsibling = /[+~]/,\n\n\t\t\t// CSS escapes\n\t\t\t// https://www.w3.org/TR/CSS21/syndata.html#escaped-characters\n\t\t\trunescape = new RegExp(\"\\\\\\\\[\\\\da-fA-F]{1,6}\" + whitespace +\n\t\t\t\t\"?|\\\\\\\\([^\\\\r\\\\n\\\\f])\", \"g\"),\n\t\t\tfunescape = function (escape, nonHex) {\n\t\t\t\tvar high = \"0x\" + escape.slice(1) - 0x10000;\n\n\t\t\t\tif (nonHex) {\n\n\t\t\t\t\t// Strip the backslash prefix from a non-hex escape sequence\n\t\t\t\t\treturn nonHex;\n\t\t\t\t}\n\n\t\t\t\t// Replace a hexadecimal escape sequence with the encoded Unicode code point\n\t\t\t\t// Support: IE <=11+\n\t\t\t\t// For values outside the Basic Multilingual Plane (BMP), manually construct a\n\t\t\t\t// surrogate pair\n\t\t\t\treturn high < 0 ?\n\t\t\t\t\tString.fromCharCode(high + 0x10000) :\n\t\t\t\t\tString.fromCharCode(high >> 10 | 0xD800, high & 0x3FF | 0xDC00);\n\t\t\t},\n\n\t\t\t// Used for iframes; see `setDocument`.\n\t\t\t// Support: IE 9 - 11+, Edge 12 - 18+\n\t\t\t// Removing the function wrapper causes a \"Permission Denied\"\n\t\t\t// error in IE/Edge.\n\t\t\tunloadHandler = function () {\n\t\t\t\tsetDocument();\n\t\t\t},\n\n\t\t\tinDisabledFieldset = addCombinator(\n\t\t\t\tfunction (elem) {\n\t\t\t\t\treturn elem.disabled === true && nodeName(elem, \"fieldset\");\n\t\t\t\t},\n\t\t\t\t{ dir: \"parentNode\", next: \"legend\" }\n\t\t\t);\n\n\t\t// Support: IE <=9 only\n\t\t// Accessing document.activeElement can throw unexpectedly\n\t\t// https://bugs.jquery.com/ticket/13393\n\t\tfunction safeActiveElement() {\n\t\t\ttry {\n\t\t\t\treturn document.activeElement;\n\t\t\t} catch (err) { }\n\t\t}\n\n\t\t// Optimize for push.apply( _, NodeList )\n\t\ttry {\n\t\t\tpush.apply(\n\t\t\t\t(arr = slice.call(preferredDoc.childNodes)),\n\t\t\t\tpreferredDoc.childNodes\n\t\t\t);\n\n\t\t\t// Support: Android <=4.0\n\t\t\t// Detect silently failing push.apply\n\t\t\t// eslint-disable-next-line no-unused-expressions\n\t\t\tarr[preferredDoc.childNodes.length].nodeType;\n\t\t} catch (e) {\n\t\t\tpush = {\n\t\t\t\tapply: function (target, els) {\n\t\t\t\t\tpushNative.apply(target, slice.call(els));\n\t\t\t\t},\n\t\t\t\tcall: function (target) {\n\t\t\t\t\tpushNative.apply(target, slice.call(arguments, 1));\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\n\t\tfunction find(selector, context, results, seed) {\n\t\t\tvar m, i, elem, nid, match, groups, newSelector,\n\t\t\t\tnewContext = context && context.ownerDocument,\n\n\t\t\t\t// nodeType defaults to 9, since context defaults to document\n\t\t\t\tnodeType = context ? context.nodeType : 9;\n\n\t\t\tresults = results || [];\n\n\t\t\t// Return early from calls with invalid selector or context\n\t\t\tif (typeof selector !== \"string\" || !selector ||\n\t\t\t\tnodeType !== 1 && nodeType !== 9 && nodeType !== 11) {\n\n\t\t\t\treturn results;\n\t\t\t}\n\n\t\t\t// Try to shortcut find operations (as opposed to filters) in HTML documents\n\t\t\tif (!seed) {\n\t\t\t\tsetDocument(context);\n\t\t\t\tcontext = context || document;\n\n\t\t\t\tif (documentIsHTML) {\n\n\t\t\t\t\t// If the selector is sufficiently simple, try using a \"get*By*\" DOM method\n\t\t\t\t\t// (excepting DocumentFragment context, where the methods don't exist)\n\t\t\t\t\tif (nodeType !== 11 && (match = rquickExpr.exec(selector))) {\n\n\t\t\t\t\t\t// ID selector\n\t\t\t\t\t\tif ((m = match[1])) {\n\n\t\t\t\t\t\t\t// Document context\n\t\t\t\t\t\t\tif (nodeType === 9) {\n\t\t\t\t\t\t\t\tif ((elem = context.getElementById(m))) {\n\n\t\t\t\t\t\t\t\t\t// Support: IE 9 only\n\t\t\t\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\t\t\t\tif (elem.id === m) {\n\t\t\t\t\t\t\t\t\t\tpush.call(results, elem);\n\t\t\t\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t// Element context\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t// Support: IE 9 only\n\t\t\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\t\t\tif (newContext && (elem = newContext.getElementById(m)) &&\n\t\t\t\t\t\t\t\t\tfind.contains(context, elem) &&\n\t\t\t\t\t\t\t\t\telem.id === m) {\n\n\t\t\t\t\t\t\t\t\tpush.call(results, elem);\n\t\t\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Type selector\n\t\t\t\t\t\t} else if (match[2]) {\n\t\t\t\t\t\t\tpush.apply(results, context.getElementsByTagName(selector));\n\t\t\t\t\t\t\treturn results;\n\n\t\t\t\t\t\t\t// Class selector\n\t\t\t\t\t\t} else if ((m = match[3]) && context.getElementsByClassName) {\n\t\t\t\t\t\t\tpush.apply(results, context.getElementsByClassName(m));\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Take advantage of querySelectorAll\n\t\t\t\t\tif (!nonnativeSelectorCache[selector + \" \"] &&\n\t\t\t\t\t\t(!rbuggyQSA || !rbuggyQSA.test(selector))) {\n\n\t\t\t\t\t\tnewSelector = selector;\n\t\t\t\t\t\tnewContext = context;\n\n\t\t\t\t\t\t// qSA considers elements outside a scoping root when evaluating child or\n\t\t\t\t\t\t// descendant combinators, which is not what we want.\n\t\t\t\t\t\t// In such cases, we work around the behavior by prefixing every selector in the\n\t\t\t\t\t\t// list with an ID selector referencing the scope context.\n\t\t\t\t\t\t// The technique has to be used as well when a leading combinator is used\n\t\t\t\t\t\t// as such selectors are not recognized by querySelectorAll.\n\t\t\t\t\t\t// Thanks to Andrew Dupont for this technique.\n\t\t\t\t\t\tif (nodeType === 1 &&\n\t\t\t\t\t\t\t(rdescend.test(selector) || rleadingCombinator.test(selector))) {\n\n\t\t\t\t\t\t\t// Expand context for sibling selectors\n\t\t\t\t\t\t\tnewContext = rsibling.test(selector) && testContext(context.parentNode) ||\n\t\t\t\t\t\t\t\tcontext;\n\n\t\t\t\t\t\t\t// We can use :scope instead of the ID hack if the browser\n\t\t\t\t\t\t\t// supports it & if we're not changing the context.\n\t\t\t\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when\n\t\t\t\t\t\t\t// strict-comparing two documents; shallow comparisons work.\n\t\t\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\t\t\tif (newContext != context || !support.scope) {\n\n\t\t\t\t\t\t\t\t// Capture the context ID, setting it first if necessary\n\t\t\t\t\t\t\t\tif ((nid = context.getAttribute(\"id\"))) {\n\t\t\t\t\t\t\t\t\tnid = jQuery.escapeSelector(nid);\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tcontext.setAttribute(\"id\", (nid = expando));\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Prefix every selector in the list\n\t\t\t\t\t\t\tgroups = tokenize(selector);\n\t\t\t\t\t\t\ti = groups.length;\n\t\t\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\t\t\tgroups[i] = (nid ? \"#\" + nid : \":scope\") + \" \" +\n\t\t\t\t\t\t\t\t\ttoSelector(groups[i]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tnewSelector = groups.join(\",\");\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tpush.apply(results,\n\t\t\t\t\t\t\t\tnewContext.querySelectorAll(newSelector)\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t} catch (qsaError) {\n\t\t\t\t\t\t\tnonnativeSelectorCache(selector, true);\n\t\t\t\t\t\t} finally {\n\t\t\t\t\t\t\tif (nid === expando) {\n\t\t\t\t\t\t\t\tcontext.removeAttribute(\"id\");\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// All others\n\t\t\treturn select(selector.replace(rtrimCSS, \"$1\"), context, results, seed);\n\t\t}\n\n\t\t/**\n\t\t * Create key-value caches of limited size\n\t\t * @returns {function(string, object)} Returns the Object data after storing it on itself with\n\t\t *\tproperty name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)\n\t\t *\tdeleting the oldest entry\n\t\t */\n\t\tfunction createCache() {\n\t\t\tvar keys = [];\n\n\t\t\tfunction cache(key, value) {\n\n\t\t\t\t// Use (key + \" \") to avoid collision with native prototype properties\n\t\t\t\t// (see https://github.com/jquery/sizzle/issues/157)\n\t\t\t\tif (keys.push(key + \" \") > Expr.cacheLength) {\n\n\t\t\t\t\t// Only keep the most recent entries\n\t\t\t\t\tdelete cache[keys.shift()];\n\t\t\t\t}\n\t\t\t\treturn (cache[key + \" \"] = value);\n\t\t\t}\n\t\t\treturn cache;\n\t\t}\n\n\t\t/**\n\t\t * Mark a function for special use by jQuery selector module\n\t\t * @param {Function} fn The function to mark\n\t\t */\n\t\tfunction markFunction(fn) {\n\t\t\tfn[expando] = true;\n\t\t\treturn fn;\n\t\t}\n\n\t\t/**\n\t\t * Support testing using an element\n\t\t * @param {Function} fn Passed the created element and returns a boolean result\n\t\t */\n\t\tfunction assert(fn) {\n\t\t\tvar el = document.createElement(\"fieldset\");\n\n\t\t\ttry {\n\t\t\t\treturn !!fn(el);\n\t\t\t} catch (e) {\n\t\t\t\treturn false;\n\t\t\t} finally {\n\n\t\t\t\t// Remove from its parent by default\n\t\t\t\tif (el.parentNode) {\n\t\t\t\t\tel.parentNode.removeChild(el);\n\t\t\t\t}\n\n\t\t\t\t// release memory in IE\n\t\t\t\tel = null;\n\t\t\t}\n\t\t}\n\n\t\t/**\n\t\t * Returns a function to use in pseudos for input types\n\t\t * @param {String} type\n\t\t */\n\t\tfunction createInputPseudo(type) {\n\t\t\treturn function (elem) {\n\t\t\t\treturn nodeName(elem, \"input\") && elem.type === type;\n\t\t\t};\n\t\t}\n\n\t\t/**\n\t\t * Returns a function to use in pseudos for buttons\n\t\t * @param {String} type\n\t\t */\n\t\tfunction createButtonPseudo(type) {\n\t\t\treturn function (elem) {\n\t\t\t\treturn (nodeName(elem, \"input\") || nodeName(elem, \"button\")) &&\n\t\t\t\t\telem.type === type;\n\t\t\t};\n\t\t}\n\n\t\t/**\n\t\t * Returns a function to use in pseudos for :enabled/:disabled\n\t\t * @param {Boolean} disabled true for :disabled; false for :enabled\n\t\t */\n\t\tfunction createDisabledPseudo(disabled) {\n\n\t\t\t// Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable\n\t\t\treturn function (elem) {\n\n\t\t\t\t// Only certain elements can match :enabled or :disabled\n\t\t\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled\n\t\t\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled\n\t\t\t\tif (\"form\" in elem) {\n\n\t\t\t\t\t// Check for inherited disabledness on relevant non-disabled elements:\n\t\t\t\t\t// * listed form-associated elements in a disabled fieldset\n\t\t\t\t\t//   https://html.spec.whatwg.org/multipage/forms.html#category-listed\n\t\t\t\t\t//   https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled\n\t\t\t\t\t// * option elements in a disabled optgroup\n\t\t\t\t\t//   https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled\n\t\t\t\t\t// All such elements have a \"form\" property.\n\t\t\t\t\tif (elem.parentNode && elem.disabled === false) {\n\n\t\t\t\t\t\t// Option elements defer to a parent optgroup if present\n\t\t\t\t\t\tif (\"label\" in elem) {\n\t\t\t\t\t\t\tif (\"label\" in elem.parentNode) {\n\t\t\t\t\t\t\t\treturn elem.parentNode.disabled === disabled;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\treturn elem.disabled === disabled;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Support: IE 6 - 11+\n\t\t\t\t\t\t// Use the isDisabled shortcut property to check for disabled fieldset ancestors\n\t\t\t\t\t\treturn elem.isDisabled === disabled ||\n\n\t\t\t\t\t\t\t// Where there is no isDisabled, check manually\n\t\t\t\t\t\t\telem.isDisabled !== !disabled &&\n\t\t\t\t\t\t\tinDisabledFieldset(elem) === disabled;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn elem.disabled === disabled;\n\n\t\t\t\t\t// Try to winnow out elements that can't be disabled before trusting the disabled property.\n\t\t\t\t\t// Some victims get caught in our net (label, legend, menu, track), but it shouldn't\n\t\t\t\t\t// even exist on them, let alone have a boolean value.\n\t\t\t\t} else if (\"label\" in elem) {\n\t\t\t\t\treturn elem.disabled === disabled;\n\t\t\t\t}\n\n\t\t\t\t// Remaining elements are neither :enabled nor :disabled\n\t\t\t\treturn false;\n\t\t\t};\n\t\t}\n\n\t\t/**\n\t\t * Returns a function to use in pseudos for positionals\n\t\t * @param {Function} fn\n\t\t */\n\t\tfunction createPositionalPseudo(fn) {\n\t\t\treturn markFunction(function (argument) {\n\t\t\t\targument = +argument;\n\t\t\t\treturn markFunction(function (seed, matches) {\n\t\t\t\t\tvar j,\n\t\t\t\t\t\tmatchIndexes = fn([], seed.length, argument),\n\t\t\t\t\t\ti = matchIndexes.length;\n\n\t\t\t\t\t// Match elements found at the specified indexes\n\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\tif (seed[(j = matchIndexes[i])]) {\n\t\t\t\t\t\t\tseed[j] = !(matches[j] = seed[j]);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\n\t\t/**\n\t\t * Checks a node for validity as a jQuery selector context\n\t\t * @param {Element|Object=} context\n\t\t * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value\n\t\t */\n\t\tfunction testContext(context) {\n\t\t\treturn context && typeof context.getElementsByTagName !== \"undefined\" && context;\n\t\t}\n\n\t\t/**\n\t\t * Sets document-related variables once based on the current document\n\t\t * @param {Element|Object} [node] An element or document object to use to set the document\n\t\t * @returns {Object} Returns the current document\n\t\t */\n\t\tfunction setDocument(node) {\n\t\t\tvar subWindow,\n\t\t\t\tdoc = node ? node.ownerDocument || node : preferredDoc;\n\n\t\t\t// Return early if doc is invalid or already selected\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tif (doc == document || doc.nodeType !== 9 || !doc.documentElement) {\n\t\t\t\treturn document;\n\t\t\t}\n\n\t\t\t// Update global variables\n\t\t\tdocument = doc;\n\t\t\tdocumentElement = document.documentElement;\n\t\t\tdocumentIsHTML = !jQuery.isXMLDoc(document);\n\n\t\t\t// Support: iOS 7 only, IE 9 - 11+\n\t\t\t// Older browsers didn't support unprefixed `matches`.\n\t\t\tmatches = documentElement.matches ||\n\t\t\t\tdocumentElement.webkitMatchesSelector ||\n\t\t\t\tdocumentElement.msMatchesSelector;\n\n\t\t\t// Support: IE 9 - 11+, Edge 12 - 18+\n\t\t\t// Accessing iframe documents after unload throws \"permission denied\" errors (see trac-13936)\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tif (preferredDoc != document &&\n\t\t\t\t(subWindow = document.defaultView) && subWindow.top !== subWindow) {\n\n\t\t\t\t// Support: IE 9 - 11+, Edge 12 - 18+\n\t\t\t\tsubWindow.addEventListener(\"unload\", unloadHandler);\n\t\t\t}\n\n\t\t\t// Support: IE <10\n\t\t\t// Check if getElementById returns elements by name\n\t\t\t// The broken getElementById methods don't pick up programmatically-set names,\n\t\t\t// so use a roundabout getElementsByName test\n\t\t\tsupport.getById = assert(function (el) {\n\t\t\t\tdocumentElement.appendChild(el).id = jQuery.expando;\n\t\t\t\treturn !document.getElementsByName ||\n\t\t\t\t\t!document.getElementsByName(jQuery.expando).length;\n\t\t\t});\n\n\t\t\t// Support: IE 9 only\n\t\t\t// Check to see if it's possible to do matchesSelector\n\t\t\t// on a disconnected node.\n\t\t\tsupport.disconnectedMatch = assert(function (el) {\n\t\t\t\treturn matches.call(el, \"*\");\n\t\t\t});\n\n\t\t\t// Support: IE 9 - 11+, Edge 12 - 18+\n\t\t\t// IE/Edge don't support the :scope pseudo-class.\n\t\t\tsupport.scope = assert(function () {\n\t\t\t\treturn document.querySelectorAll(\":scope\");\n\t\t\t});\n\n\t\t\t// Support: Chrome 105 - 111 only, Safari 15.4 - 16.3 only\n\t\t\t// Make sure the `:has()` argument is parsed unforgivingly.\n\t\t\t// We include `*` in the test to detect buggy implementations that are\n\t\t\t// _selectively_ forgiving (specifically when the list includes at least\n\t\t\t// one valid selector).\n\t\t\t// Note that we treat complete lack of support for `:has()` as if it were\n\t\t\t// spec-compliant support, which is fine because use of `:has()` in such\n\t\t\t// environments will fail in the qSA path and fall back to jQuery traversal\n\t\t\t// anyway.\n\t\t\tsupport.cssHas = assert(function () {\n\t\t\t\ttry {\n\t\t\t\t\tdocument.querySelector(\":has(*,:jqfake)\");\n\t\t\t\t\treturn false;\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t// ID filter and find\n\t\t\tif (support.getById) {\n\t\t\t\tExpr.filter.ID = function (id) {\n\t\t\t\t\tvar attrId = id.replace(runescape, funescape);\n\t\t\t\t\treturn function (elem) {\n\t\t\t\t\t\treturn elem.getAttribute(\"id\") === attrId;\n\t\t\t\t\t};\n\t\t\t\t};\n\t\t\t\tExpr.find.ID = function (id, context) {\n\t\t\t\t\tif (typeof context.getElementById !== \"undefined\" && documentIsHTML) {\n\t\t\t\t\t\tvar elem = context.getElementById(id);\n\t\t\t\t\t\treturn elem ? [elem] : [];\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t} else {\n\t\t\t\tExpr.filter.ID = function (id) {\n\t\t\t\t\tvar attrId = id.replace(runescape, funescape);\n\t\t\t\t\treturn function (elem) {\n\t\t\t\t\t\tvar node = typeof elem.getAttributeNode !== \"undefined\" &&\n\t\t\t\t\t\t\telem.getAttributeNode(\"id\");\n\t\t\t\t\t\treturn node && node.value === attrId;\n\t\t\t\t\t};\n\t\t\t\t};\n\n\t\t\t\t// Support: IE 6 - 7 only\n\t\t\t\t// getElementById is not reliable as a find shortcut\n\t\t\t\tExpr.find.ID = function (id, context) {\n\t\t\t\t\tif (typeof context.getElementById !== \"undefined\" && documentIsHTML) {\n\t\t\t\t\t\tvar node, i, elems,\n\t\t\t\t\t\t\telem = context.getElementById(id);\n\n\t\t\t\t\t\tif (elem) {\n\n\t\t\t\t\t\t\t// Verify the id attribute\n\t\t\t\t\t\t\tnode = elem.getAttributeNode(\"id\");\n\t\t\t\t\t\t\tif (node && node.value === id) {\n\t\t\t\t\t\t\t\treturn [elem];\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Fall back on getElementsByName\n\t\t\t\t\t\t\telems = context.getElementsByName(id);\n\t\t\t\t\t\t\ti = 0;\n\t\t\t\t\t\t\twhile ((elem = elems[i++])) {\n\t\t\t\t\t\t\t\tnode = elem.getAttributeNode(\"id\");\n\t\t\t\t\t\t\t\tif (node && node.value === id) {\n\t\t\t\t\t\t\t\t\treturn [elem];\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn [];\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\n\t\t\t// Tag\n\t\t\tExpr.find.TAG = function (tag, context) {\n\t\t\t\tif (typeof context.getElementsByTagName !== \"undefined\") {\n\t\t\t\t\treturn context.getElementsByTagName(tag);\n\n\t\t\t\t\t// DocumentFragment nodes don't have gEBTN\n\t\t\t\t} else {\n\t\t\t\t\treturn context.querySelectorAll(tag);\n\t\t\t\t}\n\t\t\t};\n\n\t\t\t// Class\n\t\t\tExpr.find.CLASS = function (className, context) {\n\t\t\t\tif (typeof context.getElementsByClassName !== \"undefined\" && documentIsHTML) {\n\t\t\t\t\treturn context.getElementsByClassName(className);\n\t\t\t\t}\n\t\t\t};\n\n\t\t\t/* QSA/matchesSelector\n\t\t\t---------------------------------------------------------------------- */\n\n\t\t\t// QSA and matchesSelector support\n\n\t\t\trbuggyQSA = [];\n\n\t\t\t// Build QSA regex\n\t\t\t// Regex strategy adopted from Diego Perini\n\t\t\tassert(function (el) {\n\n\t\t\t\tvar input;\n\n\t\t\t\tdocumentElement.appendChild(el).innerHTML =\n\t\t\t\t\t\"<a id='\" + expando + \"' href='' disabled='disabled'></a>\" +\n\t\t\t\t\t\"<select id='\" + expando + \"-\\r\\\\' disabled='disabled'>\" +\n\t\t\t\t\t\"<option selected=''></option></select>\";\n\n\t\t\t\t// Support: iOS <=7 - 8 only\n\t\t\t\t// Boolean attributes and \"value\" are not treated correctly in some XML documents\n\t\t\t\tif (!el.querySelectorAll(\"[selected]\").length) {\n\t\t\t\t\trbuggyQSA.push(\"\\\\[\" + whitespace + \"*(?:value|\" + booleans + \")\");\n\t\t\t\t}\n\n\t\t\t\t// Support: iOS <=7 - 8 only\n\t\t\t\tif (!el.querySelectorAll(\"[id~=\" + expando + \"-]\").length) {\n\t\t\t\t\trbuggyQSA.push(\"~=\");\n\t\t\t\t}\n\n\t\t\t\t// Support: iOS 8 only\n\t\t\t\t// https://bugs.webkit.org/show_bug.cgi?id=136851\n\t\t\t\t// In-page `selector#id sibling-combinator selector` fails\n\t\t\t\tif (!el.querySelectorAll(\"a#\" + expando + \"+*\").length) {\n\t\t\t\t\trbuggyQSA.push(\".#.+[+~]\");\n\t\t\t\t}\n\n\t\t\t\t// Support: Chrome <=105+, Firefox <=104+, Safari <=15.4+\n\t\t\t\t// In some of the document kinds, these selectors wouldn't work natively.\n\t\t\t\t// This is probably OK but for backwards compatibility we want to maintain\n\t\t\t\t// handling them through jQuery traversal in jQuery 3.x.\n\t\t\t\tif (!el.querySelectorAll(\":checked\").length) {\n\t\t\t\t\trbuggyQSA.push(\":checked\");\n\t\t\t\t}\n\n\t\t\t\t// Support: Windows 8 Native Apps\n\t\t\t\t// The type and name attributes are restricted during .innerHTML assignment\n\t\t\t\tinput = document.createElement(\"input\");\n\t\t\t\tinput.setAttribute(\"type\", \"hidden\");\n\t\t\t\tel.appendChild(input).setAttribute(\"name\", \"D\");\n\n\t\t\t\t// Support: IE 9 - 11+\n\t\t\t\t// IE's :disabled selector does not pick up the children of disabled fieldsets\n\t\t\t\t// Support: Chrome <=105+, Firefox <=104+, Safari <=15.4+\n\t\t\t\t// In some of the document kinds, these selectors wouldn't work natively.\n\t\t\t\t// This is probably OK but for backwards compatibility we want to maintain\n\t\t\t\t// handling them through jQuery traversal in jQuery 3.x.\n\t\t\t\tdocumentElement.appendChild(el).disabled = true;\n\t\t\t\tif (el.querySelectorAll(\":disabled\").length !== 2) {\n\t\t\t\t\trbuggyQSA.push(\":enabled\", \":disabled\");\n\t\t\t\t}\n\n\t\t\t\t// Support: IE 11+, Edge 15 - 18+\n\t\t\t\t// IE 11/Edge don't find elements on a `[name='']` query in some cases.\n\t\t\t\t// Adding a temporary attribute to the document before the selection works\n\t\t\t\t// around the issue.\n\t\t\t\t// Interestingly, IE 10 & older don't seem to have the issue.\n\t\t\t\tinput = document.createElement(\"input\");\n\t\t\t\tinput.setAttribute(\"name\", \"\");\n\t\t\t\tel.appendChild(input);\n\t\t\t\tif (!el.querySelectorAll(\"[name='']\").length) {\n\t\t\t\t\trbuggyQSA.push(\"\\\\[\" + whitespace + \"*name\" + whitespace + \"*=\" +\n\t\t\t\t\t\twhitespace + \"*(?:''|\\\"\\\")\");\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tif (!support.cssHas) {\n\n\t\t\t\t// Support: Chrome 105 - 110+, Safari 15.4 - 16.3+\n\t\t\t\t// Our regular `try-catch` mechanism fails to detect natively-unsupported\n\t\t\t\t// pseudo-classes inside `:has()` (such as `:has(:contains(\"Foo\"))`)\n\t\t\t\t// in browsers that parse the `:has()` argument as a forgiving selector list.\n\t\t\t\t// https://drafts.csswg.org/selectors/#relational now requires the argument\n\t\t\t\t// to be parsed unforgivingly, but browsers have not yet fully adjusted.\n\t\t\t\trbuggyQSA.push(\":has\");\n\t\t\t}\n\n\t\t\trbuggyQSA = rbuggyQSA.length && new RegExp(rbuggyQSA.join(\"|\"));\n\n\t\t\t/* Sorting\n\t\t\t---------------------------------------------------------------------- */\n\n\t\t\t// Document order sorting\n\t\t\tsortOrder = function (a, b) {\n\n\t\t\t\t// Flag for duplicate removal\n\t\t\t\tif (a === b) {\n\t\t\t\t\thasDuplicate = true;\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\n\t\t\t\t// Sort on method existence if only one input has compareDocumentPosition\n\t\t\t\tvar compare = !a.compareDocumentPosition - !b.compareDocumentPosition;\n\t\t\t\tif (compare) {\n\t\t\t\t\treturn compare;\n\t\t\t\t}\n\n\t\t\t\t// Calculate position if both inputs belong to the same document\n\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\tcompare = (a.ownerDocument || a) == (b.ownerDocument || b) ?\n\t\t\t\t\ta.compareDocumentPosition(b) :\n\n\t\t\t\t\t// Otherwise we know they are disconnected\n\t\t\t\t\t1;\n\n\t\t\t\t// Disconnected nodes\n\t\t\t\tif (compare & 1 ||\n\t\t\t\t\t(!support.sortDetached && b.compareDocumentPosition(a) === compare)) {\n\n\t\t\t\t\t// Choose the first element that is related to our preferred document\n\t\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\tif (a === document || a.ownerDocument == preferredDoc &&\n\t\t\t\t\t\tfind.contains(preferredDoc, a)) {\n\t\t\t\t\t\treturn -1;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\tif (b === document || b.ownerDocument == preferredDoc &&\n\t\t\t\t\t\tfind.contains(preferredDoc, b)) {\n\t\t\t\t\t\treturn 1;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Maintain original order\n\t\t\t\t\treturn sortInput ?\n\t\t\t\t\t\t(indexOf.call(sortInput, a) - indexOf.call(sortInput, b)) :\n\t\t\t\t\t\t0;\n\t\t\t\t}\n\n\t\t\t\treturn compare & 4 ? -1 : 1;\n\t\t\t};\n\n\t\t\treturn document;\n\t\t}\n\n\t\tfind.matches = function (expr, elements) {\n\t\t\treturn find(expr, null, null, elements);\n\t\t};\n\n\t\tfind.matchesSelector = function (elem, expr) {\n\t\t\tsetDocument(elem);\n\n\t\t\tif (documentIsHTML &&\n\t\t\t\t!nonnativeSelectorCache[expr + \" \"] &&\n\t\t\t\t(!rbuggyQSA || !rbuggyQSA.test(expr))) {\n\n\t\t\t\ttry {\n\t\t\t\t\tvar ret = matches.call(elem, expr);\n\n\t\t\t\t\t// IE 9's matchesSelector returns false on disconnected nodes\n\t\t\t\t\tif (ret || support.disconnectedMatch ||\n\n\t\t\t\t\t\t// As well, disconnected nodes are said to be in a document\n\t\t\t\t\t\t// fragment in IE 9\n\t\t\t\t\t\telem.document && elem.document.nodeType !== 11) {\n\t\t\t\t\t\treturn ret;\n\t\t\t\t\t}\n\t\t\t\t} catch (e) {\n\t\t\t\t\tnonnativeSelectorCache(expr, true);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn find(expr, document, null, [elem]).length > 0;\n\t\t};\n\n\t\tfind.contains = function (context, elem) {\n\n\t\t\t// Set document vars if needed\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tif ((context.ownerDocument || context) != document) {\n\t\t\t\tsetDocument(context);\n\t\t\t}\n\t\t\treturn jQuery.contains(context, elem);\n\t\t};\n\n\n\t\tfind.attr = function (elem, name) {\n\n\t\t\t// Set document vars if needed\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tif ((elem.ownerDocument || elem) != document) {\n\t\t\t\tsetDocument(elem);\n\t\t\t}\n\n\t\t\tvar fn = Expr.attrHandle[name.toLowerCase()],\n\n\t\t\t\t// Don't get fooled by Object.prototype properties (see trac-13807)\n\t\t\t\tval = fn && hasOwn.call(Expr.attrHandle, name.toLowerCase()) ?\n\t\t\t\t\tfn(elem, name, !documentIsHTML) :\n\t\t\t\t\tundefined;\n\n\t\t\tif (val !== undefined) {\n\t\t\t\treturn val;\n\t\t\t}\n\n\t\t\treturn elem.getAttribute(name);\n\t\t};\n\n\t\tfind.error = function (msg) {\n\t\t\tthrow new Error(\"Syntax error, unrecognized expression: \" + msg);\n\t\t};\n\n\t\t/**\n\t\t * Document sorting and removing duplicates\n\t\t * @param {ArrayLike} results\n\t\t */\n\t\tjQuery.uniqueSort = function (results) {\n\t\t\tvar elem,\n\t\t\t\tduplicates = [],\n\t\t\t\tj = 0,\n\t\t\t\ti = 0;\n\n\t\t\t// Unless we *know* we can detect duplicates, assume their presence\n\t\t\t//\n\t\t\t// Support: Android <=4.0+\n\t\t\t// Testing for detecting duplicates is unpredictable so instead assume we can't\n\t\t\t// depend on duplicate detection in all browsers without a stable sort.\n\t\t\thasDuplicate = !support.sortStable;\n\t\t\tsortInput = !support.sortStable && slice.call(results, 0);\n\t\t\tsort.call(results, sortOrder);\n\n\t\t\tif (hasDuplicate) {\n\t\t\t\twhile ((elem = results[i++])) {\n\t\t\t\t\tif (elem === results[i]) {\n\t\t\t\t\t\tj = duplicates.push(i);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\twhile (j--) {\n\t\t\t\t\tsplice.call(results, duplicates[j], 1);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Clear input after sorting to release objects\n\t\t\t// See https://github.com/jquery/sizzle/pull/225\n\t\t\tsortInput = null;\n\n\t\t\treturn results;\n\t\t};\n\n\t\tjQuery.fn.uniqueSort = function () {\n\t\t\treturn this.pushStack(jQuery.uniqueSort(slice.apply(this)));\n\t\t};\n\n\t\tExpr = jQuery.expr = {\n\n\t\t\t// Can be adjusted by the user\n\t\t\tcacheLength: 50,\n\n\t\t\tcreatePseudo: markFunction,\n\n\t\t\tmatch: matchExpr,\n\n\t\t\tattrHandle: {},\n\n\t\t\tfind: {},\n\n\t\t\trelative: {\n\t\t\t\t\">\": { dir: \"parentNode\", first: true },\n\t\t\t\t\" \": { dir: \"parentNode\" },\n\t\t\t\t\"+\": { dir: \"previousSibling\", first: true },\n\t\t\t\t\"~\": { dir: \"previousSibling\" }\n\t\t\t},\n\n\t\t\tpreFilter: {\n\t\t\t\tATTR: function (match) {\n\t\t\t\t\tmatch[1] = match[1].replace(runescape, funescape);\n\n\t\t\t\t\t// Move the given value to match[3] whether quoted or unquoted\n\t\t\t\t\tmatch[3] = (match[3] || match[4] || match[5] || \"\")\n\t\t\t\t\t\t.replace(runescape, funescape);\n\n\t\t\t\t\tif (match[2] === \"~=\") {\n\t\t\t\t\t\tmatch[3] = \" \" + match[3] + \" \";\n\t\t\t\t\t}\n\n\t\t\t\t\treturn match.slice(0, 4);\n\t\t\t\t},\n\n\t\t\t\tCHILD: function (match) {\n\n\t\t\t\t\t/* matches from matchExpr[\"CHILD\"]\n\t\t\t\t\t\t1 type (only|nth|...)\n\t\t\t\t\t\t2 what (child|of-type)\n\t\t\t\t\t\t3 argument (even|odd|\\d*|\\d*n([+-]\\d+)?|...)\n\t\t\t\t\t\t4 xn-component of xn+y argument ([+-]?\\d*n|)\n\t\t\t\t\t\t5 sign of xn-component\n\t\t\t\t\t\t6 x of xn-component\n\t\t\t\t\t\t7 sign of y-component\n\t\t\t\t\t\t8 y of y-component\n\t\t\t\t\t*/\n\t\t\t\t\tmatch[1] = match[1].toLowerCase();\n\n\t\t\t\t\tif (match[1].slice(0, 3) === \"nth\") {\n\n\t\t\t\t\t\t// nth-* requires argument\n\t\t\t\t\t\tif (!match[3]) {\n\t\t\t\t\t\t\tfind.error(match[0]);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// numeric x and y parameters for Expr.filter.CHILD\n\t\t\t\t\t\t// remember that false/true cast respectively to 0/1\n\t\t\t\t\t\tmatch[4] = +(match[4] ?\n\t\t\t\t\t\t\tmatch[5] + (match[6] || 1) :\n\t\t\t\t\t\t\t2 * (match[3] === \"even\" || match[3] === \"odd\")\n\t\t\t\t\t\t);\n\t\t\t\t\t\tmatch[5] = +((match[7] + match[8]) || match[3] === \"odd\");\n\n\t\t\t\t\t\t// other types prohibit arguments\n\t\t\t\t\t} else if (match[3]) {\n\t\t\t\t\t\tfind.error(match[0]);\n\t\t\t\t\t}\n\n\t\t\t\t\treturn match;\n\t\t\t\t},\n\n\t\t\t\tPSEUDO: function (match) {\n\t\t\t\t\tvar excess,\n\t\t\t\t\t\tunquoted = !match[6] && match[2];\n\n\t\t\t\t\tif (matchExpr.CHILD.test(match[0])) {\n\t\t\t\t\t\treturn null;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Accept quoted arguments as-is\n\t\t\t\t\tif (match[3]) {\n\t\t\t\t\t\tmatch[2] = match[4] || match[5] || \"\";\n\n\t\t\t\t\t\t// Strip excess characters from unquoted arguments\n\t\t\t\t\t} else if (unquoted && rpseudo.test(unquoted) &&\n\n\t\t\t\t\t\t// Get excess from tokenize (recursively)\n\t\t\t\t\t\t(excess = tokenize(unquoted, true)) &&\n\n\t\t\t\t\t\t// advance to the next closing parenthesis\n\t\t\t\t\t\t(excess = unquoted.indexOf(\")\", unquoted.length - excess) - unquoted.length)) {\n\n\t\t\t\t\t\t// excess is a negative index\n\t\t\t\t\t\tmatch[0] = match[0].slice(0, excess);\n\t\t\t\t\t\tmatch[2] = unquoted.slice(0, excess);\n\t\t\t\t\t}\n\n\t\t\t\t\t// Return only captures needed by the pseudo filter method (type and argument)\n\t\t\t\t\treturn match.slice(0, 3);\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tfilter: {\n\n\t\t\t\tTAG: function (nodeNameSelector) {\n\t\t\t\t\tvar expectedNodeName = nodeNameSelector.replace(runescape, funescape).toLowerCase();\n\t\t\t\t\treturn nodeNameSelector === \"*\" ?\n\t\t\t\t\t\tfunction () {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t} :\n\t\t\t\t\t\tfunction (elem) {\n\t\t\t\t\t\t\treturn nodeName(elem, expectedNodeName);\n\t\t\t\t\t\t};\n\t\t\t\t},\n\n\t\t\t\tCLASS: function (className) {\n\t\t\t\t\tvar pattern = classCache[className + \" \"];\n\n\t\t\t\t\treturn pattern ||\n\t\t\t\t\t\t(pattern = new RegExp(\"(^|\" + whitespace + \")\" + className +\n\t\t\t\t\t\t\t\"(\" + whitespace + \"|$)\")) &&\n\t\t\t\t\t\tclassCache(className, function (elem) {\n\t\t\t\t\t\t\treturn pattern.test(\n\t\t\t\t\t\t\t\ttypeof elem.className === \"string\" && elem.className ||\n\t\t\t\t\t\t\t\ttypeof elem.getAttribute !== \"undefined\" &&\n\t\t\t\t\t\t\t\telem.getAttribute(\"class\") ||\n\t\t\t\t\t\t\t\t\"\"\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t});\n\t\t\t\t},\n\n\t\t\t\tATTR: function (name, operator, check) {\n\t\t\t\t\treturn function (elem) {\n\t\t\t\t\t\tvar result = find.attr(elem, name);\n\n\t\t\t\t\t\tif (result == null) {\n\t\t\t\t\t\t\treturn operator === \"!=\";\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!operator) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tresult += \"\";\n\n\t\t\t\t\t\tif (operator === \"=\") {\n\t\t\t\t\t\t\treturn result === check;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (operator === \"!=\") {\n\t\t\t\t\t\t\treturn result !== check;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (operator === \"^=\") {\n\t\t\t\t\t\t\treturn check && result.indexOf(check) === 0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (operator === \"*=\") {\n\t\t\t\t\t\t\treturn check && result.indexOf(check) > -1;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (operator === \"$=\") {\n\t\t\t\t\t\t\treturn check && result.slice(-check.length) === check;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (operator === \"~=\") {\n\t\t\t\t\t\t\treturn (\" \" + result.replace(rwhitespace, \" \") + \" \")\n\t\t\t\t\t\t\t\t.indexOf(check) > -1;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (operator === \"|=\") {\n\t\t\t\t\t\t\treturn result === check || result.slice(0, check.length + 1) === check + \"-\";\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t};\n\t\t\t\t},\n\n\t\t\t\tCHILD: function (type, what, _argument, first, last) {\n\t\t\t\t\tvar simple = type.slice(0, 3) !== \"nth\",\n\t\t\t\t\t\tforward = type.slice(-4) !== \"last\",\n\t\t\t\t\t\tofType = what === \"of-type\";\n\n\t\t\t\t\treturn first === 1 && last === 0 ?\n\n\t\t\t\t\t\t// Shortcut for :nth-*(n)\n\t\t\t\t\t\tfunction (elem) {\n\t\t\t\t\t\t\treturn !!elem.parentNode;\n\t\t\t\t\t\t} :\n\n\t\t\t\t\t\tfunction (elem, _context, xml) {\n\t\t\t\t\t\t\tvar cache, outerCache, node, nodeIndex, start,\n\t\t\t\t\t\t\t\tdir = simple !== forward ? \"nextSibling\" : \"previousSibling\",\n\t\t\t\t\t\t\t\tparent = elem.parentNode,\n\t\t\t\t\t\t\t\tname = ofType && elem.nodeName.toLowerCase(),\n\t\t\t\t\t\t\t\tuseCache = !xml && !ofType,\n\t\t\t\t\t\t\t\tdiff = false;\n\n\t\t\t\t\t\t\tif (parent) {\n\n\t\t\t\t\t\t\t\t// :(first|last|only)-(child|of-type)\n\t\t\t\t\t\t\t\tif (simple) {\n\t\t\t\t\t\t\t\t\twhile (dir) {\n\t\t\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\t\t\twhile ((node = node[dir])) {\n\t\t\t\t\t\t\t\t\t\t\tif (ofType ?\n\t\t\t\t\t\t\t\t\t\t\t\tnodeName(node, name) :\n\t\t\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1) {\n\n\t\t\t\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t// Reverse direction for :only-* (if we haven't yet done so)\n\t\t\t\t\t\t\t\t\t\tstart = dir = type === \"only\" && !start && \"nextSibling\";\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tstart = [forward ? parent.firstChild : parent.lastChild];\n\n\t\t\t\t\t\t\t\t// non-xml :nth-child(...) stores cache data on `parent`\n\t\t\t\t\t\t\t\tif (forward && useCache) {\n\n\t\t\t\t\t\t\t\t\t// Seek `elem` from a previously-cached index\n\t\t\t\t\t\t\t\t\touterCache = parent[expando] || (parent[expando] = {});\n\t\t\t\t\t\t\t\t\tcache = outerCache[type] || [];\n\t\t\t\t\t\t\t\t\tnodeIndex = cache[0] === dirruns && cache[1];\n\t\t\t\t\t\t\t\t\tdiff = nodeIndex && cache[2];\n\t\t\t\t\t\t\t\t\tnode = nodeIndex && parent.childNodes[nodeIndex];\n\n\t\t\t\t\t\t\t\t\twhile ((node = ++nodeIndex && node && node[dir] ||\n\n\t\t\t\t\t\t\t\t\t\t// Fallback to seeking `elem` from the start\n\t\t\t\t\t\t\t\t\t\t(diff = nodeIndex = 0) || start.pop())) {\n\n\t\t\t\t\t\t\t\t\t\t// When found, cache indexes on `parent` and break\n\t\t\t\t\t\t\t\t\t\tif (node.nodeType === 1 && ++diff && node === elem) {\n\t\t\t\t\t\t\t\t\t\t\touterCache[type] = [dirruns, nodeIndex, diff];\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t// Use previously-cached element index if available\n\t\t\t\t\t\t\t\t\tif (useCache) {\n\t\t\t\t\t\t\t\t\t\touterCache = elem[expando] || (elem[expando] = {});\n\t\t\t\t\t\t\t\t\t\tcache = outerCache[type] || [];\n\t\t\t\t\t\t\t\t\t\tnodeIndex = cache[0] === dirruns && cache[1];\n\t\t\t\t\t\t\t\t\t\tdiff = nodeIndex;\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// xml :nth-child(...)\n\t\t\t\t\t\t\t\t\t// or :nth-last-child(...) or :nth(-last)?-of-type(...)\n\t\t\t\t\t\t\t\t\tif (diff === false) {\n\n\t\t\t\t\t\t\t\t\t\t// Use the same loop as above to seek `elem` from the start\n\t\t\t\t\t\t\t\t\t\twhile ((node = ++nodeIndex && node && node[dir] ||\n\t\t\t\t\t\t\t\t\t\t\t(diff = nodeIndex = 0) || start.pop())) {\n\n\t\t\t\t\t\t\t\t\t\t\tif ((ofType ?\n\t\t\t\t\t\t\t\t\t\t\t\tnodeName(node, name) :\n\t\t\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1) &&\n\t\t\t\t\t\t\t\t\t\t\t\t++diff) {\n\n\t\t\t\t\t\t\t\t\t\t\t\t// Cache the index of each encountered element\n\t\t\t\t\t\t\t\t\t\t\t\tif (useCache) {\n\t\t\t\t\t\t\t\t\t\t\t\t\touterCache = node[expando] ||\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t(node[expando] = {});\n\t\t\t\t\t\t\t\t\t\t\t\t\touterCache[type] = [dirruns, diff];\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\tif (node === elem) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t// Incorporate the offset, then check against cycle size\n\t\t\t\t\t\t\t\tdiff -= last;\n\t\t\t\t\t\t\t\treturn diff === first || (diff % first === 0 && diff / first >= 0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\t\t\t\t},\n\n\t\t\t\tPSEUDO: function (pseudo, argument) {\n\n\t\t\t\t\t// pseudo-class names are case-insensitive\n\t\t\t\t\t// https://www.w3.org/TR/selectors/#pseudo-classes\n\t\t\t\t\t// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters\n\t\t\t\t\t// Remember that setFilters inherits from pseudos\n\t\t\t\t\tvar args,\n\t\t\t\t\t\tfn = Expr.pseudos[pseudo] || Expr.setFilters[pseudo.toLowerCase()] ||\n\t\t\t\t\t\t\tfind.error(\"unsupported pseudo: \" + pseudo);\n\n\t\t\t\t\t// The user may use createPseudo to indicate that\n\t\t\t\t\t// arguments are needed to create the filter function\n\t\t\t\t\t// just as jQuery does\n\t\t\t\t\tif (fn[expando]) {\n\t\t\t\t\t\treturn fn(argument);\n\t\t\t\t\t}\n\n\t\t\t\t\t// But maintain support for old signatures\n\t\t\t\t\tif (fn.length > 1) {\n\t\t\t\t\t\targs = [pseudo, pseudo, \"\", argument];\n\t\t\t\t\t\treturn Expr.setFilters.hasOwnProperty(pseudo.toLowerCase()) ?\n\t\t\t\t\t\t\tmarkFunction(function (seed, matches) {\n\t\t\t\t\t\t\t\tvar idx,\n\t\t\t\t\t\t\t\t\tmatched = fn(seed, argument),\n\t\t\t\t\t\t\t\t\ti = matched.length;\n\t\t\t\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\t\t\t\tidx = indexOf.call(seed, matched[i]);\n\t\t\t\t\t\t\t\t\tseed[idx] = !(matches[idx] = matched[i]);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}) :\n\t\t\t\t\t\t\tfunction (elem) {\n\t\t\t\t\t\t\t\treturn fn(elem, 0, args);\n\t\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\treturn fn;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tpseudos: {\n\n\t\t\t\t// Potentially complex pseudos\n\t\t\t\tnot: markFunction(function (selector) {\n\n\t\t\t\t\t// Trim the selector passed to compile\n\t\t\t\t\t// to avoid treating leading and trailing\n\t\t\t\t\t// spaces as combinators\n\t\t\t\t\tvar input = [],\n\t\t\t\t\t\tresults = [],\n\t\t\t\t\t\tmatcher = compile(selector.replace(rtrimCSS, \"$1\"));\n\n\t\t\t\t\treturn matcher[expando] ?\n\t\t\t\t\t\tmarkFunction(function (seed, matches, _context, xml) {\n\t\t\t\t\t\t\tvar elem,\n\t\t\t\t\t\t\t\tunmatched = matcher(seed, null, xml, []),\n\t\t\t\t\t\t\t\ti = seed.length;\n\n\t\t\t\t\t\t\t// Match elements unmatched by `matcher`\n\t\t\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\t\t\tif ((elem = unmatched[i])) {\n\t\t\t\t\t\t\t\t\tseed[i] = !(matches[i] = elem);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}) :\n\t\t\t\t\t\tfunction (elem, _context, xml) {\n\t\t\t\t\t\t\tinput[0] = elem;\n\t\t\t\t\t\t\tmatcher(input, null, xml, results);\n\n\t\t\t\t\t\t\t// Don't keep the element\n\t\t\t\t\t\t\t// (see https://github.com/jquery/sizzle/issues/299)\n\t\t\t\t\t\t\tinput[0] = null;\n\t\t\t\t\t\t\treturn !results.pop();\n\t\t\t\t\t\t};\n\t\t\t\t}),\n\n\t\t\t\thas: markFunction(function (selector) {\n\t\t\t\t\treturn function (elem) {\n\t\t\t\t\t\treturn find(selector, elem).length > 0;\n\t\t\t\t\t};\n\t\t\t\t}),\n\n\t\t\t\tcontains: markFunction(function (text) {\n\t\t\t\t\ttext = text.replace(runescape, funescape);\n\t\t\t\t\treturn function (elem) {\n\t\t\t\t\t\treturn (elem.textContent || jQuery.text(elem)).indexOf(text) > -1;\n\t\t\t\t\t};\n\t\t\t\t}),\n\n\t\t\t\t// \"Whether an element is represented by a :lang() selector\n\t\t\t\t// is based solely on the element's language value\n\t\t\t\t// being equal to the identifier C,\n\t\t\t\t// or beginning with the identifier C immediately followed by \"-\".\n\t\t\t\t// The matching of C against the element's language value is performed case-insensitively.\n\t\t\t\t// The identifier C does not have to be a valid language name.\"\n\t\t\t\t// https://www.w3.org/TR/selectors/#lang-pseudo\n\t\t\t\tlang: markFunction(function (lang) {\n\n\t\t\t\t\t// lang value must be a valid identifier\n\t\t\t\t\tif (!ridentifier.test(lang || \"\")) {\n\t\t\t\t\t\tfind.error(\"unsupported lang: \" + lang);\n\t\t\t\t\t}\n\t\t\t\t\tlang = lang.replace(runescape, funescape).toLowerCase();\n\t\t\t\t\treturn function (elem) {\n\t\t\t\t\t\tvar elemLang;\n\t\t\t\t\t\tdo {\n\t\t\t\t\t\t\tif ((elemLang = documentIsHTML ?\n\t\t\t\t\t\t\t\telem.lang :\n\t\t\t\t\t\t\t\telem.getAttribute(\"xml:lang\") || elem.getAttribute(\"lang\"))) {\n\n\t\t\t\t\t\t\t\telemLang = elemLang.toLowerCase();\n\t\t\t\t\t\t\t\treturn elemLang === lang || elemLang.indexOf(lang + \"-\") === 0;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} while ((elem = elem.parentNode) && elem.nodeType === 1);\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t};\n\t\t\t\t}),\n\n\t\t\t\t// Miscellaneous\n\t\t\t\ttarget: function (elem) {\n\t\t\t\t\tvar hash = window.location && window.location.hash;\n\t\t\t\t\treturn hash && hash.slice(1) === elem.id;\n\t\t\t\t},\n\n\t\t\t\troot: function (elem) {\n\t\t\t\t\treturn elem === documentElement;\n\t\t\t\t},\n\n\t\t\t\tfocus: function (elem) {\n\t\t\t\t\treturn elem === safeActiveElement() &&\n\t\t\t\t\t\tdocument.hasFocus() &&\n\t\t\t\t\t\t!!(elem.type || elem.href || ~elem.tabIndex);\n\t\t\t\t},\n\n\t\t\t\t// Boolean properties\n\t\t\t\tenabled: createDisabledPseudo(false),\n\t\t\t\tdisabled: createDisabledPseudo(true),\n\n\t\t\t\tchecked: function (elem) {\n\n\t\t\t\t\t// In CSS3, :checked should return both checked and selected elements\n\t\t\t\t\t// https://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\t\t\treturn (nodeName(elem, \"input\") && !!elem.checked) ||\n\t\t\t\t\t\t(nodeName(elem, \"option\") && !!elem.selected);\n\t\t\t\t},\n\n\t\t\t\tselected: function (elem) {\n\n\t\t\t\t\t// Support: IE <=11+\n\t\t\t\t\t// Accessing the selectedIndex property\n\t\t\t\t\t// forces the browser to treat the default option as\n\t\t\t\t\t// selected when in an optgroup.\n\t\t\t\t\tif (elem.parentNode) {\n\t\t\t\t\t\t// eslint-disable-next-line no-unused-expressions\n\t\t\t\t\t\telem.parentNode.selectedIndex;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn elem.selected === true;\n\t\t\t\t},\n\n\t\t\t\t// Contents\n\t\t\t\tempty: function (elem) {\n\n\t\t\t\t\t// https://www.w3.org/TR/selectors/#empty-pseudo\n\t\t\t\t\t// :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),\n\t\t\t\t\t//   but not by others (comment: 8; processing instruction: 7; etc.)\n\t\t\t\t\t// nodeType < 6 works because attributes (2) do not appear as children\n\t\t\t\t\tfor (elem = elem.firstChild; elem; elem = elem.nextSibling) {\n\t\t\t\t\t\tif (elem.nodeType < 6) {\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn true;\n\t\t\t\t},\n\n\t\t\t\tparent: function (elem) {\n\t\t\t\t\treturn !Expr.pseudos.empty(elem);\n\t\t\t\t},\n\n\t\t\t\t// Element/input types\n\t\t\t\theader: function (elem) {\n\t\t\t\t\treturn rheader.test(elem.nodeName);\n\t\t\t\t},\n\n\t\t\t\tinput: function (elem) {\n\t\t\t\t\treturn rinputs.test(elem.nodeName);\n\t\t\t\t},\n\n\t\t\t\tbutton: function (elem) {\n\t\t\t\t\treturn nodeName(elem, \"input\") && elem.type === \"button\" ||\n\t\t\t\t\t\tnodeName(elem, \"button\");\n\t\t\t\t},\n\n\t\t\t\ttext: function (elem) {\n\t\t\t\t\tvar attr;\n\t\t\t\t\treturn nodeName(elem, \"input\") && elem.type === \"text\" &&\n\n\t\t\t\t\t\t// Support: IE <10 only\n\t\t\t\t\t\t// New HTML5 attribute values (e.g., \"search\") appear\n\t\t\t\t\t\t// with elem.type === \"text\"\n\t\t\t\t\t\t((attr = elem.getAttribute(\"type\")) == null ||\n\t\t\t\t\t\t\tattr.toLowerCase() === \"text\");\n\t\t\t\t},\n\n\t\t\t\t// Position-in-collection\n\t\t\t\tfirst: createPositionalPseudo(function () {\n\t\t\t\t\treturn [0];\n\t\t\t\t}),\n\n\t\t\t\tlast: createPositionalPseudo(function (_matchIndexes, length) {\n\t\t\t\t\treturn [length - 1];\n\t\t\t\t}),\n\n\t\t\t\teq: createPositionalPseudo(function (_matchIndexes, length, argument) {\n\t\t\t\t\treturn [argument < 0 ? argument + length : argument];\n\t\t\t\t}),\n\n\t\t\t\teven: createPositionalPseudo(function (matchIndexes, length) {\n\t\t\t\t\tvar i = 0;\n\t\t\t\t\tfor (; i < length; i += 2) {\n\t\t\t\t\t\tmatchIndexes.push(i);\n\t\t\t\t\t}\n\t\t\t\t\treturn matchIndexes;\n\t\t\t\t}),\n\n\t\t\t\todd: createPositionalPseudo(function (matchIndexes, length) {\n\t\t\t\t\tvar i = 1;\n\t\t\t\t\tfor (; i < length; i += 2) {\n\t\t\t\t\t\tmatchIndexes.push(i);\n\t\t\t\t\t}\n\t\t\t\t\treturn matchIndexes;\n\t\t\t\t}),\n\n\t\t\t\tlt: createPositionalPseudo(function (matchIndexes, length, argument) {\n\t\t\t\t\tvar i;\n\n\t\t\t\t\tif (argument < 0) {\n\t\t\t\t\t\ti = argument + length;\n\t\t\t\t\t} else if (argument > length) {\n\t\t\t\t\t\ti = length;\n\t\t\t\t\t} else {\n\t\t\t\t\t\ti = argument;\n\t\t\t\t\t}\n\n\t\t\t\t\tfor (; --i >= 0;) {\n\t\t\t\t\t\tmatchIndexes.push(i);\n\t\t\t\t\t}\n\t\t\t\t\treturn matchIndexes;\n\t\t\t\t}),\n\n\t\t\t\tgt: createPositionalPseudo(function (matchIndexes, length, argument) {\n\t\t\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\t\t\tfor (; ++i < length;) {\n\t\t\t\t\t\tmatchIndexes.push(i);\n\t\t\t\t\t}\n\t\t\t\t\treturn matchIndexes;\n\t\t\t\t})\n\t\t\t}\n\t\t};\n\n\t\tExpr.pseudos.nth = Expr.pseudos.eq;\n\n\t\t// Add button/input type pseudos\n\t\tfor (i in { radio: true, checkbox: true, file: true, password: true, image: true }) {\n\t\t\tExpr.pseudos[i] = createInputPseudo(i);\n\t\t}\n\t\tfor (i in { submit: true, reset: true }) {\n\t\t\tExpr.pseudos[i] = createButtonPseudo(i);\n\t\t}\n\n\t\t// Easy API for creating new setFilters\n\t\tfunction setFilters() { }\n\t\tsetFilters.prototype = Expr.filters = Expr.pseudos;\n\t\tExpr.setFilters = new setFilters();\n\n\t\tfunction tokenize(selector, parseOnly) {\n\t\t\tvar matched, match, tokens, type,\n\t\t\t\tsoFar, groups, preFilters,\n\t\t\t\tcached = tokenCache[selector + \" \"];\n\n\t\t\tif (cached) {\n\t\t\t\treturn parseOnly ? 0 : cached.slice(0);\n\t\t\t}\n\n\t\t\tsoFar = selector;\n\t\t\tgroups = [];\n\t\t\tpreFilters = Expr.preFilter;\n\n\t\t\twhile (soFar) {\n\n\t\t\t\t// Comma and first run\n\t\t\t\tif (!matched || (match = rcomma.exec(soFar))) {\n\t\t\t\t\tif (match) {\n\n\t\t\t\t\t\t// Don't consume trailing commas as valid\n\t\t\t\t\t\tsoFar = soFar.slice(match[0].length) || soFar;\n\t\t\t\t\t}\n\t\t\t\t\tgroups.push((tokens = []));\n\t\t\t\t}\n\n\t\t\t\tmatched = false;\n\n\t\t\t\t// Combinators\n\t\t\t\tif ((match = rleadingCombinator.exec(soFar))) {\n\t\t\t\t\tmatched = match.shift();\n\t\t\t\t\ttokens.push({\n\t\t\t\t\t\tvalue: matched,\n\n\t\t\t\t\t\t// Cast descendant combinators to space\n\t\t\t\t\t\ttype: match[0].replace(rtrimCSS, \" \")\n\t\t\t\t\t});\n\t\t\t\t\tsoFar = soFar.slice(matched.length);\n\t\t\t\t}\n\n\t\t\t\t// Filters\n\t\t\t\tfor (type in Expr.filter) {\n\t\t\t\t\tif ((match = matchExpr[type].exec(soFar)) && (!preFilters[type] ||\n\t\t\t\t\t\t(match = preFilters[type](match)))) {\n\t\t\t\t\t\tmatched = match.shift();\n\t\t\t\t\t\ttokens.push({\n\t\t\t\t\t\t\tvalue: matched,\n\t\t\t\t\t\t\ttype: type,\n\t\t\t\t\t\t\tmatches: match\n\t\t\t\t\t\t});\n\t\t\t\t\t\tsoFar = soFar.slice(matched.length);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (!matched) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Return the length of the invalid excess\n\t\t\t// if we're just parsing\n\t\t\t// Otherwise, throw an error or return tokens\n\t\t\tif (parseOnly) {\n\t\t\t\treturn soFar.length;\n\t\t\t}\n\n\t\t\treturn soFar ?\n\t\t\t\tfind.error(selector) :\n\n\t\t\t\t// Cache the tokens\n\t\t\t\ttokenCache(selector, groups).slice(0);\n\t\t}\n\n\t\tfunction toSelector(tokens) {\n\t\t\tvar i = 0,\n\t\t\t\tlen = tokens.length,\n\t\t\t\tselector = \"\";\n\t\t\tfor (; i < len; i++) {\n\t\t\t\tselector += tokens[i].value;\n\t\t\t}\n\t\t\treturn selector;\n\t\t}\n\n\t\tfunction addCombinator(matcher, combinator, base) {\n\t\t\tvar dir = combinator.dir,\n\t\t\t\tskip = combinator.next,\n\t\t\t\tkey = skip || dir,\n\t\t\t\tcheckNonElements = base && key === \"parentNode\",\n\t\t\t\tdoneName = done++;\n\n\t\t\treturn combinator.first ?\n\n\t\t\t\t// Check against closest ancestor/preceding element\n\t\t\t\tfunction (elem, context, xml) {\n\t\t\t\t\twhile ((elem = elem[dir])) {\n\t\t\t\t\t\tif (elem.nodeType === 1 || checkNonElements) {\n\t\t\t\t\t\t\treturn matcher(elem, context, xml);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn false;\n\t\t\t\t} :\n\n\t\t\t\t// Check against all ancestor/preceding elements\n\t\t\t\tfunction (elem, context, xml) {\n\t\t\t\t\tvar oldCache, outerCache,\n\t\t\t\t\t\tnewCache = [dirruns, doneName];\n\n\t\t\t\t\t// We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching\n\t\t\t\t\tif (xml) {\n\t\t\t\t\t\twhile ((elem = elem[dir])) {\n\t\t\t\t\t\t\tif (elem.nodeType === 1 || checkNonElements) {\n\t\t\t\t\t\t\t\tif (matcher(elem, context, xml)) {\n\t\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\twhile ((elem = elem[dir])) {\n\t\t\t\t\t\t\tif (elem.nodeType === 1 || checkNonElements) {\n\t\t\t\t\t\t\t\touterCache = elem[expando] || (elem[expando] = {});\n\n\t\t\t\t\t\t\t\tif (skip && nodeName(elem, skip)) {\n\t\t\t\t\t\t\t\t\telem = elem[dir] || elem;\n\t\t\t\t\t\t\t\t} else if ((oldCache = outerCache[key]) &&\n\t\t\t\t\t\t\t\t\toldCache[0] === dirruns && oldCache[1] === doneName) {\n\n\t\t\t\t\t\t\t\t\t// Assign to newCache so results back-propagate to previous elements\n\t\t\t\t\t\t\t\t\treturn (newCache[2] = oldCache[2]);\n\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t// Reuse newcache so results back-propagate to previous elements\n\t\t\t\t\t\t\t\t\touterCache[key] = newCache;\n\n\t\t\t\t\t\t\t\t\t// A match means we're done; a fail means we have to keep checking\n\t\t\t\t\t\t\t\t\tif ((newCache[2] = matcher(elem, context, xml))) {\n\t\t\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn false;\n\t\t\t\t};\n\t\t}\n\n\t\tfunction elementMatcher(matchers) {\n\t\t\treturn matchers.length > 1 ?\n\t\t\t\tfunction (elem, context, xml) {\n\t\t\t\t\tvar i = matchers.length;\n\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\tif (!matchers[i](elem, context, xml)) {\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn true;\n\t\t\t\t} :\n\t\t\t\tmatchers[0];\n\t\t}\n\n\t\tfunction multipleContexts(selector, contexts, results) {\n\t\t\tvar i = 0,\n\t\t\t\tlen = contexts.length;\n\t\t\tfor (; i < len; i++) {\n\t\t\t\tfind(selector, contexts[i], results);\n\t\t\t}\n\t\t\treturn results;\n\t\t}\n\n\t\tfunction condense(unmatched, map, filter, context, xml) {\n\t\t\tvar elem,\n\t\t\t\tnewUnmatched = [],\n\t\t\t\ti = 0,\n\t\t\t\tlen = unmatched.length,\n\t\t\t\tmapped = map != null;\n\n\t\t\tfor (; i < len; i++) {\n\t\t\t\tif ((elem = unmatched[i])) {\n\t\t\t\t\tif (!filter || filter(elem, context, xml)) {\n\t\t\t\t\t\tnewUnmatched.push(elem);\n\t\t\t\t\t\tif (mapped) {\n\t\t\t\t\t\t\tmap.push(i);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn newUnmatched;\n\t\t}\n\n\t\tfunction setMatcher(preFilter, selector, matcher, postFilter, postFinder, postSelector) {\n\t\t\tif (postFilter && !postFilter[expando]) {\n\t\t\t\tpostFilter = setMatcher(postFilter);\n\t\t\t}\n\t\t\tif (postFinder && !postFinder[expando]) {\n\t\t\t\tpostFinder = setMatcher(postFinder, postSelector);\n\t\t\t}\n\t\t\treturn markFunction(function (seed, results, context, xml) {\n\t\t\t\tvar temp, i, elem, matcherOut,\n\t\t\t\t\tpreMap = [],\n\t\t\t\t\tpostMap = [],\n\t\t\t\t\tpreexisting = results.length,\n\n\t\t\t\t\t// Get initial elements from seed or context\n\t\t\t\t\telems = seed ||\n\t\t\t\t\t\tmultipleContexts(selector || \"*\",\n\t\t\t\t\t\t\tcontext.nodeType ? [context] : context, []),\n\n\t\t\t\t\t// Prefilter to get matcher input, preserving a map for seed-results synchronization\n\t\t\t\t\tmatcherIn = preFilter && (seed || !selector) ?\n\t\t\t\t\t\tcondense(elems, preMap, preFilter, context, xml) :\n\t\t\t\t\t\telems;\n\n\t\t\t\tif (matcher) {\n\n\t\t\t\t\t// If we have a postFinder, or filtered seed, or non-seed postFilter\n\t\t\t\t\t// or preexisting results,\n\t\t\t\t\tmatcherOut = postFinder || (seed ? preFilter : preexisting || postFilter) ?\n\n\t\t\t\t\t\t// ...intermediate processing is necessary\n\t\t\t\t\t\t[] :\n\n\t\t\t\t\t\t// ...otherwise use results directly\n\t\t\t\t\t\tresults;\n\n\t\t\t\t\t// Find primary matches\n\t\t\t\t\tmatcher(matcherIn, matcherOut, context, xml);\n\t\t\t\t} else {\n\t\t\t\t\tmatcherOut = matcherIn;\n\t\t\t\t}\n\n\t\t\t\t// Apply postFilter\n\t\t\t\tif (postFilter) {\n\t\t\t\t\ttemp = condense(matcherOut, postMap);\n\t\t\t\t\tpostFilter(temp, [], context, xml);\n\n\t\t\t\t\t// Un-match failing elements by moving them back to matcherIn\n\t\t\t\t\ti = temp.length;\n\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\tif ((elem = temp[i])) {\n\t\t\t\t\t\t\tmatcherOut[postMap[i]] = !(matcherIn[postMap[i]] = elem);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (seed) {\n\t\t\t\t\tif (postFinder || preFilter) {\n\t\t\t\t\t\tif (postFinder) {\n\n\t\t\t\t\t\t\t// Get the final matcherOut by condensing this intermediate into postFinder contexts\n\t\t\t\t\t\t\ttemp = [];\n\t\t\t\t\t\t\ti = matcherOut.length;\n\t\t\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\t\t\tif ((elem = matcherOut[i])) {\n\n\t\t\t\t\t\t\t\t\t// Restore matcherIn since elem is not yet a final match\n\t\t\t\t\t\t\t\t\ttemp.push((matcherIn[i] = elem));\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tpostFinder(null, (matcherOut = []), temp, xml);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Move matched elements from seed to results to keep them synchronized\n\t\t\t\t\t\ti = matcherOut.length;\n\t\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\t\tif ((elem = matcherOut[i]) &&\n\t\t\t\t\t\t\t\t(temp = postFinder ? indexOf.call(seed, elem) : preMap[i]) > -1) {\n\n\t\t\t\t\t\t\t\tseed[temp] = !(results[temp] = elem);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Add elements to results, through postFinder if defined\n\t\t\t\t} else {\n\t\t\t\t\tmatcherOut = condense(\n\t\t\t\t\t\tmatcherOut === results ?\n\t\t\t\t\t\t\tmatcherOut.splice(preexisting, matcherOut.length) :\n\t\t\t\t\t\t\tmatcherOut\n\t\t\t\t\t);\n\t\t\t\t\tif (postFinder) {\n\t\t\t\t\t\tpostFinder(null, results, matcherOut, xml);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tpush.apply(results, matcherOut);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tfunction matcherFromTokens(tokens) {\n\t\t\tvar checkContext, matcher, j,\n\t\t\t\tlen = tokens.length,\n\t\t\t\tleadingRelative = Expr.relative[tokens[0].type],\n\t\t\t\timplicitRelative = leadingRelative || Expr.relative[\" \"],\n\t\t\t\ti = leadingRelative ? 1 : 0,\n\n\t\t\t\t// The foundational matcher ensures that elements are reachable from top-level context(s)\n\t\t\t\tmatchContext = addCombinator(function (elem) {\n\t\t\t\t\treturn elem === checkContext;\n\t\t\t\t}, implicitRelative, true),\n\t\t\t\tmatchAnyContext = addCombinator(function (elem) {\n\t\t\t\t\treturn indexOf.call(checkContext, elem) > -1;\n\t\t\t\t}, implicitRelative, true),\n\t\t\t\tmatchers = [function (elem, context, xml) {\n\n\t\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\tvar ret = (!leadingRelative && (xml || context != outermostContext)) || (\n\t\t\t\t\t\t(checkContext = context).nodeType ?\n\t\t\t\t\t\t\tmatchContext(elem, context, xml) :\n\t\t\t\t\t\t\tmatchAnyContext(elem, context, xml));\n\n\t\t\t\t\t// Avoid hanging onto element\n\t\t\t\t\t// (see https://github.com/jquery/sizzle/issues/299)\n\t\t\t\t\tcheckContext = null;\n\t\t\t\t\treturn ret;\n\t\t\t\t}];\n\n\t\t\tfor (; i < len; i++) {\n\t\t\t\tif ((matcher = Expr.relative[tokens[i].type])) {\n\t\t\t\t\tmatchers = [addCombinator(elementMatcher(matchers), matcher)];\n\t\t\t\t} else {\n\t\t\t\t\tmatcher = Expr.filter[tokens[i].type].apply(null, tokens[i].matches);\n\n\t\t\t\t\t// Return special upon seeing a positional matcher\n\t\t\t\t\tif (matcher[expando]) {\n\n\t\t\t\t\t\t// Find the next relative operator (if any) for proper handling\n\t\t\t\t\t\tj = ++i;\n\t\t\t\t\t\tfor (; j < len; j++) {\n\t\t\t\t\t\t\tif (Expr.relative[tokens[j].type]) {\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn setMatcher(\n\t\t\t\t\t\t\ti > 1 && elementMatcher(matchers),\n\t\t\t\t\t\t\ti > 1 && toSelector(\n\n\t\t\t\t\t\t\t\t// If the preceding token was a descendant combinator, insert an implicit any-element `*`\n\t\t\t\t\t\t\t\ttokens.slice(0, i - 1)\n\t\t\t\t\t\t\t\t\t.concat({ value: tokens[i - 2].type === \" \" ? \"*\" : \"\" })\n\t\t\t\t\t\t\t).replace(rtrimCSS, \"$1\"),\n\t\t\t\t\t\t\tmatcher,\n\t\t\t\t\t\t\ti < j && matcherFromTokens(tokens.slice(i, j)),\n\t\t\t\t\t\t\tj < len && matcherFromTokens((tokens = tokens.slice(j))),\n\t\t\t\t\t\t\tj < len && toSelector(tokens)\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\tmatchers.push(matcher);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn elementMatcher(matchers);\n\t\t}\n\n\t\tfunction matcherFromGroupMatchers(elementMatchers, setMatchers) {\n\t\t\tvar bySet = setMatchers.length > 0,\n\t\t\t\tbyElement = elementMatchers.length > 0,\n\t\t\t\tsuperMatcher = function (seed, context, xml, results, outermost) {\n\t\t\t\t\tvar elem, j, matcher,\n\t\t\t\t\t\tmatchedCount = 0,\n\t\t\t\t\t\ti = \"0\",\n\t\t\t\t\t\tunmatched = seed && [],\n\t\t\t\t\t\tsetMatched = [],\n\t\t\t\t\t\tcontextBackup = outermostContext,\n\n\t\t\t\t\t\t// We must always have either seed elements or outermost context\n\t\t\t\t\t\telems = seed || byElement && Expr.find.TAG(\"*\", outermost),\n\n\t\t\t\t\t\t// Use integer dirruns iff this is the outermost matcher\n\t\t\t\t\t\tdirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1),\n\t\t\t\t\t\tlen = elems.length;\n\n\t\t\t\t\tif (outermost) {\n\n\t\t\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\t\toutermostContext = context == document || context || outermost;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Add elements passing elementMatchers directly to results\n\t\t\t\t\t// Support: iOS <=7 - 9 only\n\t\t\t\t\t// Tolerate NodeList properties (IE: \"length\"; Safari: <number>) matching\n\t\t\t\t\t// elements by id. (see trac-14142)\n\t\t\t\t\tfor (; i !== len && (elem = elems[i]) != null; i++) {\n\t\t\t\t\t\tif (byElement && elem) {\n\t\t\t\t\t\t\tj = 0;\n\n\t\t\t\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\t\t\tif (!context && elem.ownerDocument != document) {\n\t\t\t\t\t\t\t\tsetDocument(elem);\n\t\t\t\t\t\t\t\txml = !documentIsHTML;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\twhile ((matcher = elementMatchers[j++])) {\n\t\t\t\t\t\t\t\tif (matcher(elem, context || document, xml)) {\n\t\t\t\t\t\t\t\t\tpush.call(results, elem);\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (outermost) {\n\t\t\t\t\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Track unmatched elements for set filters\n\t\t\t\t\t\tif (bySet) {\n\n\t\t\t\t\t\t\t// They will have gone through all possible matchers\n\t\t\t\t\t\t\tif ((elem = !matcher && elem)) {\n\t\t\t\t\t\t\t\tmatchedCount--;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Lengthen the array for every element, matched or not\n\t\t\t\t\t\t\tif (seed) {\n\t\t\t\t\t\t\t\tunmatched.push(elem);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// `i` is now the count of elements visited above, and adding it to `matchedCount`\n\t\t\t\t\t// makes the latter nonnegative.\n\t\t\t\t\tmatchedCount += i;\n\n\t\t\t\t\t// Apply set filters to unmatched elements\n\t\t\t\t\t// NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`\n\t\t\t\t\t// equals `i`), unless we didn't visit _any_ elements in the above loop because we have\n\t\t\t\t\t// no element matchers and no seed.\n\t\t\t\t\t// Incrementing an initially-string \"0\" `i` allows `i` to remain a string only in that\n\t\t\t\t\t// case, which will result in a \"00\" `matchedCount` that differs from `i` but is also\n\t\t\t\t\t// numerically zero.\n\t\t\t\t\tif (bySet && i !== matchedCount) {\n\t\t\t\t\t\tj = 0;\n\t\t\t\t\t\twhile ((matcher = setMatchers[j++])) {\n\t\t\t\t\t\t\tmatcher(unmatched, setMatched, context, xml);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (seed) {\n\n\t\t\t\t\t\t\t// Reintegrate element matches to eliminate the need for sorting\n\t\t\t\t\t\t\tif (matchedCount > 0) {\n\t\t\t\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\t\t\t\tif (!(unmatched[i] || setMatched[i])) {\n\t\t\t\t\t\t\t\t\t\tsetMatched[i] = pop.call(results);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Discard index placeholder values to get only actual matches\n\t\t\t\t\t\t\tsetMatched = condense(setMatched);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Add matches to results\n\t\t\t\t\t\tpush.apply(results, setMatched);\n\n\t\t\t\t\t\t// Seedless set matches succeeding multiple successful matchers stipulate sorting\n\t\t\t\t\t\tif (outermost && !seed && setMatched.length > 0 &&\n\t\t\t\t\t\t\t(matchedCount + setMatchers.length) > 1) {\n\n\t\t\t\t\t\t\tjQuery.uniqueSort(results);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Override manipulation of globals by nested matchers\n\t\t\t\t\tif (outermost) {\n\t\t\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\t\t\toutermostContext = contextBackup;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn unmatched;\n\t\t\t\t};\n\n\t\t\treturn bySet ?\n\t\t\t\tmarkFunction(superMatcher) :\n\t\t\t\tsuperMatcher;\n\t\t}\n\n\t\tfunction compile(selector, match /* Internal Use Only */) {\n\t\t\tvar i,\n\t\t\t\tsetMatchers = [],\n\t\t\t\telementMatchers = [],\n\t\t\t\tcached = compilerCache[selector + \" \"];\n\n\t\t\tif (!cached) {\n\n\t\t\t\t// Generate a function of recursive functions that can be used to check each element\n\t\t\t\tif (!match) {\n\t\t\t\t\tmatch = tokenize(selector);\n\t\t\t\t}\n\t\t\t\ti = match.length;\n\t\t\t\twhile (i--) {\n\t\t\t\t\tcached = matcherFromTokens(match[i]);\n\t\t\t\t\tif (cached[expando]) {\n\t\t\t\t\t\tsetMatchers.push(cached);\n\t\t\t\t\t} else {\n\t\t\t\t\t\telementMatchers.push(cached);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Cache the compiled function\n\t\t\t\tcached = compilerCache(selector,\n\t\t\t\t\tmatcherFromGroupMatchers(elementMatchers, setMatchers));\n\n\t\t\t\t// Save selector and tokenization\n\t\t\t\tcached.selector = selector;\n\t\t\t}\n\t\t\treturn cached;\n\t\t}\n\n\t\t/**\n\t\t * A low-level selection function that works with jQuery's compiled\n\t\t *  selector functions\n\t\t * @param {String|Function} selector A selector or a pre-compiled\n\t\t *  selector function built with jQuery selector compile\n\t\t * @param {Element} context\n\t\t * @param {Array} [results]\n\t\t * @param {Array} [seed] A set of elements to match against\n\t\t */\n\t\tfunction select(selector, context, results, seed) {\n\t\t\tvar i, tokens, token, type, find,\n\t\t\t\tcompiled = typeof selector === \"function\" && selector,\n\t\t\t\tmatch = !seed && tokenize((selector = compiled.selector || selector));\n\n\t\t\tresults = results || [];\n\n\t\t\t// Try to minimize operations if there is only one selector in the list and no seed\n\t\t\t// (the latter of which guarantees us context)\n\t\t\tif (match.length === 1) {\n\n\t\t\t\t// Reduce context if the leading compound selector is an ID\n\t\t\t\ttokens = match[0] = match[0].slice(0);\n\t\t\t\tif (tokens.length > 2 && (token = tokens[0]).type === \"ID\" &&\n\t\t\t\t\tcontext.nodeType === 9 && documentIsHTML && Expr.relative[tokens[1].type]) {\n\n\t\t\t\t\tcontext = (Expr.find.ID(\n\t\t\t\t\t\ttoken.matches[0].replace(runescape, funescape),\n\t\t\t\t\t\tcontext\n\t\t\t\t\t) || [])[0];\n\t\t\t\t\tif (!context) {\n\t\t\t\t\t\treturn results;\n\n\t\t\t\t\t\t// Precompiled matchers will still verify ancestry, so step up a level\n\t\t\t\t\t} else if (compiled) {\n\t\t\t\t\t\tcontext = context.parentNode;\n\t\t\t\t\t}\n\n\t\t\t\t\tselector = selector.slice(tokens.shift().value.length);\n\t\t\t\t}\n\n\t\t\t\t// Fetch a seed set for right-to-left matching\n\t\t\t\ti = matchExpr.needsContext.test(selector) ? 0 : tokens.length;\n\t\t\t\twhile (i--) {\n\t\t\t\t\ttoken = tokens[i];\n\n\t\t\t\t\t// Abort if we hit a combinator\n\t\t\t\t\tif (Expr.relative[(type = token.type)]) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tif ((find = Expr.find[type])) {\n\n\t\t\t\t\t\t// Search, expanding context for leading sibling combinators\n\t\t\t\t\t\tif ((seed = find(\n\t\t\t\t\t\t\ttoken.matches[0].replace(runescape, funescape),\n\t\t\t\t\t\t\trsibling.test(tokens[0].type) &&\n\t\t\t\t\t\t\ttestContext(context.parentNode) || context\n\t\t\t\t\t\t))) {\n\n\t\t\t\t\t\t\t// If seed is empty or no tokens remain, we can return early\n\t\t\t\t\t\t\ttokens.splice(i, 1);\n\t\t\t\t\t\t\tselector = seed.length && toSelector(tokens);\n\t\t\t\t\t\t\tif (!selector) {\n\t\t\t\t\t\t\t\tpush.apply(results, seed);\n\t\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Compile and execute a filtering function if one is not provided\n\t\t\t// Provide `match` to avoid retokenization if we modified the selector above\n\t\t\t(compiled || compile(selector, match))(\n\t\t\t\tseed,\n\t\t\t\tcontext,\n\t\t\t\t!documentIsHTML,\n\t\t\t\tresults,\n\t\t\t\t!context || rsibling.test(selector) && testContext(context.parentNode) || context\n\t\t\t);\n\t\t\treturn results;\n\t\t}\n\n\t\t// One-time assignments\n\n\t\t// Support: Android <=4.0 - 4.1+\n\t\t// Sort stability\n\t\tsupport.sortStable = expando.split(\"\").sort(sortOrder).join(\"\") === expando;\n\n\t\t// Initialize against the default document\n\t\tsetDocument();\n\n\t\t// Support: Android <=4.0 - 4.1+\n\t\t// Detached nodes confoundingly follow *each other*\n\t\tsupport.sortDetached = assert(function (el) {\n\n\t\t\t// Should return 1, but returns 4 (following)\n\t\t\treturn el.compareDocumentPosition(document.createElement(\"fieldset\")) & 1;\n\t\t});\n\n\t\tjQuery.find = find;\n\n\t\t// Deprecated\n\t\tjQuery.expr[\":\"] = jQuery.expr.pseudos;\n\t\tjQuery.unique = jQuery.uniqueSort;\n\n\t\t// These have always been private, but they used to be documented\n\t\t// as part of Sizzle so let's maintain them in the 3.x line\n\t\t// for backwards compatibility purposes.\n\t\tfind.compile = compile;\n\t\tfind.select = select;\n\t\tfind.setDocument = setDocument;\n\n\t\tfind.escape = jQuery.escapeSelector;\n\t\tfind.getText = jQuery.text;\n\t\tfind.isXML = jQuery.isXMLDoc;\n\t\tfind.selectors = jQuery.expr;\n\t\tfind.support = jQuery.support;\n\t\tfind.uniqueSort = jQuery.uniqueSort;\n\n\t\t/* eslint-enable */\n\n\t})();\n\n\n\tvar dir = function (elem, dir, until) {\n\t\tvar matched = [],\n\t\t\ttruncate = until !== undefined;\n\n\t\twhile ((elem = elem[dir]) && elem.nodeType !== 9) {\n\t\t\tif (elem.nodeType === 1) {\n\t\t\t\tif (truncate && jQuery(elem).is(until)) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tmatched.push(elem);\n\t\t\t}\n\t\t}\n\t\treturn matched;\n\t};\n\n\n\tvar siblings = function (n, elem) {\n\t\tvar matched = [];\n\n\t\tfor (; n; n = n.nextSibling) {\n\t\t\tif (n.nodeType === 1 && n !== elem) {\n\t\t\t\tmatched.push(n);\n\t\t\t}\n\t\t}\n\n\t\treturn matched;\n\t};\n\n\n\tvar rneedsContext = jQuery.expr.match.needsContext;\n\n\tvar rsingleTag = (/^<([a-z][^\\/\\0>:\\x20\\t\\r\\n\\f]*)[\\x20\\t\\r\\n\\f]*\\/?>(?:<\\/\\1>|)$/i);\n\n\n\n\t// Implement the identical functionality for filter and not\n\tfunction winnow(elements, qualifier, not) {\n\t\tif (isFunction(qualifier)) {\n\t\t\treturn jQuery.grep(elements, function (elem, i) {\n\t\t\t\treturn !!qualifier.call(elem, i, elem) !== not;\n\t\t\t});\n\t\t}\n\n\t\t// Single element\n\t\tif (qualifier.nodeType) {\n\t\t\treturn jQuery.grep(elements, function (elem) {\n\t\t\t\treturn (elem === qualifier) !== not;\n\t\t\t});\n\t\t}\n\n\t\t// Arraylike of elements (jQuery, arguments, Array)\n\t\tif (typeof qualifier !== \"string\") {\n\t\t\treturn jQuery.grep(elements, function (elem) {\n\t\t\t\treturn (indexOf.call(qualifier, elem) > -1) !== not;\n\t\t\t});\n\t\t}\n\n\t\t// Filtered directly for both simple and complex selectors\n\t\treturn jQuery.filter(qualifier, elements, not);\n\t}\n\n\tjQuery.filter = function (expr, elems, not) {\n\t\tvar elem = elems[0];\n\n\t\tif (not) {\n\t\t\texpr = \":not(\" + expr + \")\";\n\t\t}\n\n\t\tif (elems.length === 1 && elem.nodeType === 1) {\n\t\t\treturn jQuery.find.matchesSelector(elem, expr) ? [elem] : [];\n\t\t}\n\n\t\treturn jQuery.find.matches(expr, jQuery.grep(elems, function (elem) {\n\t\t\treturn elem.nodeType === 1;\n\t\t}));\n\t};\n\n\tjQuery.fn.extend({\n\t\tfind: function (selector) {\n\t\t\tvar i, ret,\n\t\t\t\tlen = this.length,\n\t\t\t\tself = this;\n\n\t\t\tif (typeof selector !== \"string\") {\n\t\t\t\treturn this.pushStack(jQuery(selector).filter(function () {\n\t\t\t\t\tfor (i = 0; i < len; i++) {\n\t\t\t\t\t\tif (jQuery.contains(self[i], this)) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}));\n\t\t\t}\n\n\t\t\tret = this.pushStack([]);\n\n\t\t\tfor (i = 0; i < len; i++) {\n\t\t\t\tjQuery.find(selector, self[i], ret);\n\t\t\t}\n\n\t\t\treturn len > 1 ? jQuery.uniqueSort(ret) : ret;\n\t\t},\n\t\tfilter: function (selector) {\n\t\t\treturn this.pushStack(winnow(this, selector || [], false));\n\t\t},\n\t\tnot: function (selector) {\n\t\t\treturn this.pushStack(winnow(this, selector || [], true));\n\t\t},\n\t\tis: function (selector) {\n\t\t\treturn !!winnow(\n\t\t\t\tthis,\n\n\t\t\t\t// If this is a positional/relative selector, check membership in the returned set\n\t\t\t\t// so $(\"p:first\").is(\"p:last\") won't return true for a doc with two \"p\".\n\t\t\t\ttypeof selector === \"string\" && rneedsContext.test(selector) ?\n\t\t\t\t\tjQuery(selector) :\n\t\t\t\t\tselector || [],\n\t\t\t\tfalse\n\t\t\t).length;\n\t\t}\n\t});\n\n\n\t// Initialize a jQuery object\n\n\n\t// A central reference to the root jQuery(document)\n\tvar rootjQuery,\n\n\t\t// A simple way to check for HTML strings\n\t\t// Prioritize #id over <tag> to avoid XSS via location.hash (trac-9521)\n\t\t// Strict HTML recognition (trac-11290: must start with <)\n\t\t// Shortcut simple #id case for speed\n\t\trquickExpr = /^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]+))$/,\n\n\t\tinit = jQuery.fn.init = function (selector, context, root) {\n\t\t\tvar match, elem;\n\n\t\t\t// HANDLE: $(\"\"), $(null), $(undefined), $(false)\n\t\t\tif (!selector) {\n\t\t\t\treturn this;\n\t\t\t}\n\n\t\t\t// Method init() accepts an alternate rootjQuery\n\t\t\t// so migrate can support jQuery.sub (gh-2101)\n\t\t\troot = root || rootjQuery;\n\n\t\t\t// Handle HTML strings\n\t\t\tif (typeof selector === \"string\") {\n\t\t\t\tif (selector[0] === \"<\" &&\n\t\t\t\t\tselector[selector.length - 1] === \">\" &&\n\t\t\t\t\tselector.length >= 3) {\n\n\t\t\t\t\t// Assume that strings that start and end with <> are HTML and skip the regex check\n\t\t\t\t\tmatch = [null, selector, null];\n\n\t\t\t\t} else {\n\t\t\t\t\tmatch = rquickExpr.exec(selector);\n\t\t\t\t}\n\n\t\t\t\t// Match html or make sure no context is specified for #id\n\t\t\t\tif (match && (match[1] || !context)) {\n\n\t\t\t\t\t// HANDLE: $(html) -> $(array)\n\t\t\t\t\tif (match[1]) {\n\t\t\t\t\t\tcontext = context instanceof jQuery ? context[0] : context;\n\n\t\t\t\t\t\t// Option to run scripts is true for back-compat\n\t\t\t\t\t\t// Intentionally let the error be thrown if parseHTML is not present\n\t\t\t\t\t\tjQuery.merge(this, jQuery.parseHTML(\n\t\t\t\t\t\t\tmatch[1],\n\t\t\t\t\t\t\tcontext && context.nodeType ? context.ownerDocument || context : document,\n\t\t\t\t\t\t\ttrue\n\t\t\t\t\t\t));\n\n\t\t\t\t\t\t// HANDLE: $(html, props)\n\t\t\t\t\t\tif (rsingleTag.test(match[1]) && jQuery.isPlainObject(context)) {\n\t\t\t\t\t\t\tfor (match in context) {\n\n\t\t\t\t\t\t\t\t// Properties of context are called as methods if possible\n\t\t\t\t\t\t\t\tif (isFunction(this[match])) {\n\t\t\t\t\t\t\t\t\tthis[match](context[match]);\n\n\t\t\t\t\t\t\t\t\t// ...and otherwise set as attributes\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tthis.attr(match, context[match]);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn this;\n\n\t\t\t\t\t\t// HANDLE: $(#id)\n\t\t\t\t\t} else {\n\t\t\t\t\t\telem = document.getElementById(match[2]);\n\n\t\t\t\t\t\tif (elem) {\n\n\t\t\t\t\t\t\t// Inject the element directly into the jQuery object\n\t\t\t\t\t\t\tthis[0] = elem;\n\t\t\t\t\t\t\tthis.length = 1;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn this;\n\t\t\t\t\t}\n\n\t\t\t\t\t// HANDLE: $(expr, $(...))\n\t\t\t\t} else if (!context || context.jquery) {\n\t\t\t\t\treturn (context || root).find(selector);\n\n\t\t\t\t\t// HANDLE: $(expr, context)\n\t\t\t\t\t// (which is just equivalent to: $(context).find(expr)\n\t\t\t\t} else {\n\t\t\t\t\treturn this.constructor(context).find(selector);\n\t\t\t\t}\n\n\t\t\t\t// HANDLE: $(DOMElement)\n\t\t\t} else if (selector.nodeType) {\n\t\t\t\tthis[0] = selector;\n\t\t\t\tthis.length = 1;\n\t\t\t\treturn this;\n\n\t\t\t\t// HANDLE: $(function)\n\t\t\t\t// Shortcut for document ready\n\t\t\t} else if (isFunction(selector)) {\n\t\t\t\treturn root.ready !== undefined ?\n\t\t\t\t\troot.ready(selector) :\n\n\t\t\t\t\t// Execute immediately if ready is not present\n\t\t\t\t\tselector(jQuery);\n\t\t\t}\n\n\t\t\treturn jQuery.makeArray(selector, this);\n\t\t};\n\n\t// Give the init function the jQuery prototype for later instantiation\n\tinit.prototype = jQuery.fn;\n\n\t// Initialize central reference\n\trootjQuery = jQuery(document);\n\n\n\tvar rparentsprev = /^(?:parents|prev(?:Until|All))/,\n\n\t\t// Methods guaranteed to produce a unique set when starting from a unique set\n\t\tguaranteedUnique = {\n\t\t\tchildren: true,\n\t\t\tcontents: true,\n\t\t\tnext: true,\n\t\t\tprev: true\n\t\t};\n\n\tjQuery.fn.extend({\n\t\thas: function (target) {\n\t\t\tvar targets = jQuery(target, this),\n\t\t\t\tl = targets.length;\n\n\t\t\treturn this.filter(function () {\n\t\t\t\tvar i = 0;\n\t\t\t\tfor (; i < l; i++) {\n\t\t\t\t\tif (jQuery.contains(this, targets[i])) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\tclosest: function (selectors, context) {\n\t\t\tvar cur,\n\t\t\t\ti = 0,\n\t\t\t\tl = this.length,\n\t\t\t\tmatched = [],\n\t\t\t\ttargets = typeof selectors !== \"string\" && jQuery(selectors);\n\n\t\t\t// Positional selectors never match, since there's no _selection_ context\n\t\t\tif (!rneedsContext.test(selectors)) {\n\t\t\t\tfor (; i < l; i++) {\n\t\t\t\t\tfor (cur = this[i]; cur && cur !== context; cur = cur.parentNode) {\n\n\t\t\t\t\t\t// Always skip document fragments\n\t\t\t\t\t\tif (cur.nodeType < 11 && (targets ?\n\t\t\t\t\t\t\ttargets.index(cur) > -1 :\n\n\t\t\t\t\t\t\t// Don't pass non-elements to jQuery#find\n\t\t\t\t\t\t\tcur.nodeType === 1 &&\n\t\t\t\t\t\t\tjQuery.find.matchesSelector(cur, selectors))) {\n\n\t\t\t\t\t\t\tmatched.push(cur);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn this.pushStack(matched.length > 1 ? jQuery.uniqueSort(matched) : matched);\n\t\t},\n\n\t\t// Determine the position of an element within the set\n\t\tindex: function (elem) {\n\n\t\t\t// No argument, return index in parent\n\t\t\tif (!elem) {\n\t\t\t\treturn (this[0] && this[0].parentNode) ? this.first().prevAll().length : -1;\n\t\t\t}\n\n\t\t\t// Index in selector\n\t\t\tif (typeof elem === \"string\") {\n\t\t\t\treturn indexOf.call(jQuery(elem), this[0]);\n\t\t\t}\n\n\t\t\t// Locate the position of the desired element\n\t\t\treturn indexOf.call(this,\n\n\t\t\t\t// If it receives a jQuery object, the first element is used\n\t\t\t\telem.jquery ? elem[0] : elem\n\t\t\t);\n\t\t},\n\n\t\tadd: function (selector, context) {\n\t\t\treturn this.pushStack(\n\t\t\t\tjQuery.uniqueSort(\n\t\t\t\t\tjQuery.merge(this.get(), jQuery(selector, context))\n\t\t\t\t)\n\t\t\t);\n\t\t},\n\n\t\taddBack: function (selector) {\n\t\t\treturn this.add(selector == null ?\n\t\t\t\tthis.prevObject : this.prevObject.filter(selector)\n\t\t\t);\n\t\t}\n\t});\n\n\tfunction sibling(cur, dir) {\n\t\twhile ((cur = cur[dir]) && cur.nodeType !== 1) { }\n\t\treturn cur;\n\t}\n\n\tjQuery.each({\n\t\tparent: function (elem) {\n\t\t\tvar parent = elem.parentNode;\n\t\t\treturn parent && parent.nodeType !== 11 ? parent : null;\n\t\t},\n\t\tparents: function (elem) {\n\t\t\treturn dir(elem, \"parentNode\");\n\t\t},\n\t\tparentsUntil: function (elem, _i, until) {\n\t\t\treturn dir(elem, \"parentNode\", until);\n\t\t},\n\t\tnext: function (elem) {\n\t\t\treturn sibling(elem, \"nextSibling\");\n\t\t},\n\t\tprev: function (elem) {\n\t\t\treturn sibling(elem, \"previousSibling\");\n\t\t},\n\t\tnextAll: function (elem) {\n\t\t\treturn dir(elem, \"nextSibling\");\n\t\t},\n\t\tprevAll: function (elem) {\n\t\t\treturn dir(elem, \"previousSibling\");\n\t\t},\n\t\tnextUntil: function (elem, _i, until) {\n\t\t\treturn dir(elem, \"nextSibling\", until);\n\t\t},\n\t\tprevUntil: function (elem, _i, until) {\n\t\t\treturn dir(elem, \"previousSibling\", until);\n\t\t},\n\t\tsiblings: function (elem) {\n\t\t\treturn siblings((elem.parentNode || {}).firstChild, elem);\n\t\t},\n\t\tchildren: function (elem) {\n\t\t\treturn siblings(elem.firstChild);\n\t\t},\n\t\tcontents: function (elem) {\n\t\t\tif (elem.contentDocument != null &&\n\n\t\t\t\t// Support: IE 11+\n\t\t\t\t// <object> elements with no `data` attribute has an object\n\t\t\t\t// `contentDocument` with a `null` prototype.\n\t\t\t\tgetProto(elem.contentDocument)) {\n\n\t\t\t\treturn elem.contentDocument;\n\t\t\t}\n\n\t\t\t// Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only\n\t\t\t// Treat the template element as a regular one in browsers that\n\t\t\t// don't support it.\n\t\t\tif (nodeName(elem, \"template\")) {\n\t\t\t\telem = elem.content || elem;\n\t\t\t}\n\n\t\t\treturn jQuery.merge([], elem.childNodes);\n\t\t}\n\t}, function (name, fn) {\n\t\tjQuery.fn[name] = function (until, selector) {\n\t\t\tvar matched = jQuery.map(this, fn, until);\n\n\t\t\tif (name.slice(-5) !== \"Until\") {\n\t\t\t\tselector = until;\n\t\t\t}\n\n\t\t\tif (selector && typeof selector === \"string\") {\n\t\t\t\tmatched = jQuery.filter(selector, matched);\n\t\t\t}\n\n\t\t\tif (this.length > 1) {\n\n\t\t\t\t// Remove duplicates\n\t\t\t\tif (!guaranteedUnique[name]) {\n\t\t\t\t\tjQuery.uniqueSort(matched);\n\t\t\t\t}\n\n\t\t\t\t// Reverse order for parents* and prev-derivatives\n\t\t\t\tif (rparentsprev.test(name)) {\n\t\t\t\t\tmatched.reverse();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn this.pushStack(matched);\n\t\t};\n\t});\n\tvar rnothtmlwhite = (/[^\\x20\\t\\r\\n\\f]+/g);\n\n\n\n\t// Convert String-formatted options into Object-formatted ones\n\tfunction createOptions(options) {\n\t\tvar object = {};\n\t\tjQuery.each(options.match(rnothtmlwhite) || [], function (_, flag) {\n\t\t\tobject[flag] = true;\n\t\t});\n\t\treturn object;\n\t}\n\n\t/*\n\t * Create a callback list using the following parameters:\n\t *\n\t *\toptions: an optional list of space-separated options that will change how\n\t *\t\t\tthe callback list behaves or a more traditional option object\n\t *\n\t * By default a callback list will act like an event callback list and can be\n\t * \"fired\" multiple times.\n\t *\n\t * Possible options:\n\t *\n\t *\tonce:\t\t\twill ensure the callback list can only be fired once (like a Deferred)\n\t *\n\t *\tmemory:\t\t\twill keep track of previous values and will call any callback added\n\t *\t\t\t\t\tafter the list has been fired right away with the latest \"memorized\"\n\t *\t\t\t\t\tvalues (like a Deferred)\n\t *\n\t *\tunique:\t\t\twill ensure a callback can only be added once (no duplicate in the list)\n\t *\n\t *\tstopOnFalse:\tinterrupt callings when a callback returns false\n\t *\n\t */\n\tjQuery.Callbacks = function (options) {\n\n\t\t// Convert options from String-formatted to Object-formatted if needed\n\t\t// (we check in cache first)\n\t\toptions = typeof options === \"string\" ?\n\t\t\tcreateOptions(options) :\n\t\t\tjQuery.extend({}, options);\n\n\t\tvar // Flag to know if list is currently firing\n\t\t\tfiring,\n\n\t\t\t// Last fire value for non-forgettable lists\n\t\t\tmemory,\n\n\t\t\t// Flag to know if list was already fired\n\t\t\tfired,\n\n\t\t\t// Flag to prevent firing\n\t\t\tlocked,\n\n\t\t\t// Actual callback list\n\t\t\tlist = [],\n\n\t\t\t// Queue of execution data for repeatable lists\n\t\t\tqueue = [],\n\n\t\t\t// Index of currently firing callback (modified by add/remove as needed)\n\t\t\tfiringIndex = -1,\n\n\t\t\t// Fire callbacks\n\t\t\tfire = function () {\n\n\t\t\t\t// Enforce single-firing\n\t\t\t\tlocked = locked || options.once;\n\n\t\t\t\t// Execute callbacks for all pending executions,\n\t\t\t\t// respecting firingIndex overrides and runtime changes\n\t\t\t\tfired = firing = true;\n\t\t\t\tfor (; queue.length; firingIndex = -1) {\n\t\t\t\t\tmemory = queue.shift();\n\t\t\t\t\twhile (++firingIndex < list.length) {\n\n\t\t\t\t\t\t// Run callback and check for early termination\n\t\t\t\t\t\tif (list[firingIndex].apply(memory[0], memory[1]) === false &&\n\t\t\t\t\t\t\toptions.stopOnFalse) {\n\n\t\t\t\t\t\t\t// Jump to end and forget the data so .add doesn't re-fire\n\t\t\t\t\t\t\tfiringIndex = list.length;\n\t\t\t\t\t\t\tmemory = false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Forget the data if we're done with it\n\t\t\t\tif (!options.memory) {\n\t\t\t\t\tmemory = false;\n\t\t\t\t}\n\n\t\t\t\tfiring = false;\n\n\t\t\t\t// Clean up if we're done firing for good\n\t\t\t\tif (locked) {\n\n\t\t\t\t\t// Keep an empty list if we have data for future add calls\n\t\t\t\t\tif (memory) {\n\t\t\t\t\t\tlist = [];\n\n\t\t\t\t\t\t// Otherwise, this object is spent\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlist = \"\";\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// Actual Callbacks object\n\t\t\tself = {\n\n\t\t\t\t// Add a callback or a collection of callbacks to the list\n\t\t\t\tadd: function () {\n\t\t\t\t\tif (list) {\n\n\t\t\t\t\t\t// If we have memory from a past run, we should fire after adding\n\t\t\t\t\t\tif (memory && !firing) {\n\t\t\t\t\t\t\tfiringIndex = list.length - 1;\n\t\t\t\t\t\t\tqueue.push(memory);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t(function add(args) {\n\t\t\t\t\t\t\tjQuery.each(args, function (_, arg) {\n\t\t\t\t\t\t\t\tif (isFunction(arg)) {\n\t\t\t\t\t\t\t\t\tif (!options.unique || !self.has(arg)) {\n\t\t\t\t\t\t\t\t\t\tlist.push(arg);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} else if (arg && arg.length && toType(arg) !== \"string\") {\n\n\t\t\t\t\t\t\t\t\t// Inspect recursively\n\t\t\t\t\t\t\t\t\tadd(arg);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t})(arguments);\n\n\t\t\t\t\t\tif (memory && !firing) {\n\t\t\t\t\t\t\tfire();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Remove a callback from the list\n\t\t\t\tremove: function () {\n\t\t\t\t\tjQuery.each(arguments, function (_, arg) {\n\t\t\t\t\t\tvar index;\n\t\t\t\t\t\twhile ((index = jQuery.inArray(arg, list, index)) > -1) {\n\t\t\t\t\t\t\tlist.splice(index, 1);\n\n\t\t\t\t\t\t\t// Handle firing indexes\n\t\t\t\t\t\t\tif (index <= firingIndex) {\n\t\t\t\t\t\t\t\tfiringIndex--;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Check if a given callback is in the list.\n\t\t\t\t// If no argument is given, return whether or not list has callbacks attached.\n\t\t\t\thas: function (fn) {\n\t\t\t\t\treturn fn ?\n\t\t\t\t\t\tjQuery.inArray(fn, list) > -1 :\n\t\t\t\t\t\tlist.length > 0;\n\t\t\t\t},\n\n\t\t\t\t// Remove all callbacks from the list\n\t\t\t\tempty: function () {\n\t\t\t\t\tif (list) {\n\t\t\t\t\t\tlist = [];\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Disable .fire and .add\n\t\t\t\t// Abort any current/pending executions\n\t\t\t\t// Clear all callbacks and values\n\t\t\t\tdisable: function () {\n\t\t\t\t\tlocked = queue = [];\n\t\t\t\t\tlist = memory = \"\";\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\t\t\t\tdisabled: function () {\n\t\t\t\t\treturn !list;\n\t\t\t\t},\n\n\t\t\t\t// Disable .fire\n\t\t\t\t// Also disable .add unless we have memory (since it would have no effect)\n\t\t\t\t// Abort any pending executions\n\t\t\t\tlock: function () {\n\t\t\t\t\tlocked = queue = [];\n\t\t\t\t\tif (!memory && !firing) {\n\t\t\t\t\t\tlist = memory = \"\";\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\t\t\t\tlocked: function () {\n\t\t\t\t\treturn !!locked;\n\t\t\t\t},\n\n\t\t\t\t// Call all callbacks with the given context and arguments\n\t\t\t\tfireWith: function (context, args) {\n\t\t\t\t\tif (!locked) {\n\t\t\t\t\t\targs = args || [];\n\t\t\t\t\t\targs = [context, args.slice ? args.slice() : args];\n\t\t\t\t\t\tqueue.push(args);\n\t\t\t\t\t\tif (!firing) {\n\t\t\t\t\t\t\tfire();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Call all the callbacks with the given arguments\n\t\t\t\tfire: function () {\n\t\t\t\t\tself.fireWith(this, arguments);\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// To know if the callbacks have already been called at least once\n\t\t\t\tfired: function () {\n\t\t\t\t\treturn !!fired;\n\t\t\t\t}\n\t\t\t};\n\n\t\treturn self;\n\t};\n\n\n\tfunction Identity(v) {\n\t\treturn v;\n\t}\n\tfunction Thrower(ex) {\n\t\tthrow ex;\n\t}\n\n\tfunction adoptValue(value, resolve, reject, noValue) {\n\t\tvar method;\n\n\t\ttry {\n\n\t\t\t// Check for promise aspect first to privilege synchronous behavior\n\t\t\tif (value && isFunction((method = value.promise))) {\n\t\t\t\tmethod.call(value).done(resolve).fail(reject);\n\n\t\t\t\t// Other thenables\n\t\t\t} else if (value && isFunction((method = value.then))) {\n\t\t\t\tmethod.call(value, resolve, reject);\n\n\t\t\t\t// Other non-thenables\n\t\t\t} else {\n\n\t\t\t\t// Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer:\n\t\t\t\t// * false: [ value ].slice( 0 ) => resolve( value )\n\t\t\t\t// * true: [ value ].slice( 1 ) => resolve()\n\t\t\t\tresolve.apply(undefined, [value].slice(noValue));\n\t\t\t}\n\n\t\t\t// For Promises/A+, convert exceptions into rejections\n\t\t\t// Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in\n\t\t\t// Deferred#then to conditionally suppress rejection.\n\t\t} catch (value) {\n\n\t\t\t// Support: Android 4.0 only\n\t\t\t// Strict mode functions invoked without .call/.apply get global-object context\n\t\t\treject.apply(undefined, [value]);\n\t\t}\n\t}\n\n\tjQuery.extend({\n\n\t\tDeferred: function (func) {\n\t\t\tvar tuples = [\n\n\t\t\t\t// action, add listener, callbacks,\n\t\t\t\t// ... .then handlers, argument index, [final state]\n\t\t\t\t[\"notify\", \"progress\", jQuery.Callbacks(\"memory\"),\n\t\t\t\t\tjQuery.Callbacks(\"memory\"), 2],\n\t\t\t\t[\"resolve\", \"done\", jQuery.Callbacks(\"once memory\"),\n\t\t\t\t\tjQuery.Callbacks(\"once memory\"), 0, \"resolved\"],\n\t\t\t\t[\"reject\", \"fail\", jQuery.Callbacks(\"once memory\"),\n\t\t\t\t\tjQuery.Callbacks(\"once memory\"), 1, \"rejected\"]\n\t\t\t],\n\t\t\t\tstate = \"pending\",\n\t\t\t\tpromise = {\n\t\t\t\t\tstate: function () {\n\t\t\t\t\t\treturn state;\n\t\t\t\t\t},\n\t\t\t\t\talways: function () {\n\t\t\t\t\t\tdeferred.done(arguments).fail(arguments);\n\t\t\t\t\t\treturn this;\n\t\t\t\t\t},\n\t\t\t\t\t\"catch\": function (fn) {\n\t\t\t\t\t\treturn promise.then(null, fn);\n\t\t\t\t\t},\n\n\t\t\t\t\t// Keep pipe for back-compat\n\t\t\t\t\tpipe: function ( /* fnDone, fnFail, fnProgress */) {\n\t\t\t\t\t\tvar fns = arguments;\n\n\t\t\t\t\t\treturn jQuery.Deferred(function (newDefer) {\n\t\t\t\t\t\t\tjQuery.each(tuples, function (_i, tuple) {\n\n\t\t\t\t\t\t\t\t// Map tuples (progress, done, fail) to arguments (done, fail, progress)\n\t\t\t\t\t\t\t\tvar fn = isFunction(fns[tuple[4]]) && fns[tuple[4]];\n\n\t\t\t\t\t\t\t\t// deferred.progress(function() { bind to newDefer or newDefer.notify })\n\t\t\t\t\t\t\t\t// deferred.done(function() { bind to newDefer or newDefer.resolve })\n\t\t\t\t\t\t\t\t// deferred.fail(function() { bind to newDefer or newDefer.reject })\n\t\t\t\t\t\t\t\tdeferred[tuple[1]](function () {\n\t\t\t\t\t\t\t\t\tvar returned = fn && fn.apply(this, arguments);\n\t\t\t\t\t\t\t\t\tif (returned && isFunction(returned.promise)) {\n\t\t\t\t\t\t\t\t\t\treturned.promise()\n\t\t\t\t\t\t\t\t\t\t\t.progress(newDefer.notify)\n\t\t\t\t\t\t\t\t\t\t\t.done(newDefer.resolve)\n\t\t\t\t\t\t\t\t\t\t\t.fail(newDefer.reject);\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tnewDefer[tuple[0] + \"With\"](\n\t\t\t\t\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\t\t\t\t\tfn ? [returned] : arguments\n\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tfns = null;\n\t\t\t\t\t\t}).promise();\n\t\t\t\t\t},\n\t\t\t\t\tthen: function (onFulfilled, onRejected, onProgress) {\n\t\t\t\t\t\tvar maxDepth = 0;\n\t\t\t\t\t\tfunction resolve(depth, deferred, handler, special) {\n\t\t\t\t\t\t\treturn function () {\n\t\t\t\t\t\t\t\tvar that = this,\n\t\t\t\t\t\t\t\t\targs = arguments,\n\t\t\t\t\t\t\t\t\tmightThrow = function () {\n\t\t\t\t\t\t\t\t\t\tvar returned, then;\n\n\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.3\n\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-59\n\t\t\t\t\t\t\t\t\t\t// Ignore double-resolution attempts\n\t\t\t\t\t\t\t\t\t\tif (depth < maxDepth) {\n\t\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\treturned = handler.apply(that, args);\n\n\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.1\n\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-48\n\t\t\t\t\t\t\t\t\t\tif (returned === deferred.promise()) {\n\t\t\t\t\t\t\t\t\t\t\tthrow new TypeError(\"Thenable self-resolution\");\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ sections 2.3.3.1, 3.5\n\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-54\n\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-75\n\t\t\t\t\t\t\t\t\t\t// Retrieve `then` only once\n\t\t\t\t\t\t\t\t\t\tthen = returned &&\n\n\t\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.4\n\t\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-64\n\t\t\t\t\t\t\t\t\t\t\t// Only check objects and functions for thenability\n\t\t\t\t\t\t\t\t\t\t\t(typeof returned === \"object\" ||\n\t\t\t\t\t\t\t\t\t\t\t\ttypeof returned === \"function\") &&\n\t\t\t\t\t\t\t\t\t\t\treturned.then;\n\n\t\t\t\t\t\t\t\t\t\t// Handle a returned thenable\n\t\t\t\t\t\t\t\t\t\tif (isFunction(then)) {\n\n\t\t\t\t\t\t\t\t\t\t\t// Special processors (notify) just wait for resolution\n\t\t\t\t\t\t\t\t\t\t\tif (special) {\n\t\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\t\tresolve(maxDepth, deferred, Identity, special),\n\t\t\t\t\t\t\t\t\t\t\t\t\tresolve(maxDepth, deferred, Thrower, special)\n\t\t\t\t\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t\t\t\t\t// Normal processors (resolve) also hook into progress\n\t\t\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t\t\t// ...and disregard older resolution values\n\t\t\t\t\t\t\t\t\t\t\t\tmaxDepth++;\n\n\t\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\t\tresolve(maxDepth, deferred, Identity, special),\n\t\t\t\t\t\t\t\t\t\t\t\t\tresolve(maxDepth, deferred, Thrower, special),\n\t\t\t\t\t\t\t\t\t\t\t\t\tresolve(maxDepth, deferred, Identity,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tdeferred.notifyWith)\n\t\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t// Handle all other returned values\n\t\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\t\tif (handler !== Identity) {\n\t\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\t\targs = [returned];\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t// Process the value(s)\n\t\t\t\t\t\t\t\t\t\t\t// Default process is resolve\n\t\t\t\t\t\t\t\t\t\t\t(special || deferred.resolveWith)(that, args);\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\n\t\t\t\t\t\t\t\t\t// Only normal processors (resolve) catch and reject exceptions\n\t\t\t\t\t\t\t\t\tprocess = special ?\n\t\t\t\t\t\t\t\t\t\tmightThrow :\n\t\t\t\t\t\t\t\t\t\tfunction () {\n\t\t\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\t\t\tmightThrow();\n\t\t\t\t\t\t\t\t\t\t\t} catch (e) {\n\n\t\t\t\t\t\t\t\t\t\t\t\tif (jQuery.Deferred.exceptionHook) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tjQuery.Deferred.exceptionHook(e,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tprocess.error);\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.4.1\n\t\t\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-61\n\t\t\t\t\t\t\t\t\t\t\t\t// Ignore post-resolution exceptions\n\t\t\t\t\t\t\t\t\t\t\t\tif (depth + 1 >= maxDepth) {\n\n\t\t\t\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\t\t\t\tif (handler !== Thrower) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\targs = [e];\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\t\tdeferred.rejectWith(that, args);\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.1\n\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-57\n\t\t\t\t\t\t\t\t// Re-resolve promises immediately to dodge false rejection from\n\t\t\t\t\t\t\t\t// subsequent errors\n\t\t\t\t\t\t\t\tif (depth) {\n\t\t\t\t\t\t\t\t\tprocess();\n\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t// Call an optional hook to record the error, in case of exception\n\t\t\t\t\t\t\t\t\t// since it's otherwise lost when execution goes async\n\t\t\t\t\t\t\t\t\tif (jQuery.Deferred.getErrorHook) {\n\t\t\t\t\t\t\t\t\t\tprocess.error = jQuery.Deferred.getErrorHook();\n\n\t\t\t\t\t\t\t\t\t\t// The deprecated alias of the above. While the name suggests\n\t\t\t\t\t\t\t\t\t\t// returning the stack, not an error instance, jQuery just passes\n\t\t\t\t\t\t\t\t\t\t// it directly to `console.warn` so both will work; an instance\n\t\t\t\t\t\t\t\t\t\t// just better cooperates with source maps.\n\t\t\t\t\t\t\t\t\t} else if (jQuery.Deferred.getStackHook) {\n\t\t\t\t\t\t\t\t\t\tprocess.error = jQuery.Deferred.getStackHook();\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\twindow.setTimeout(process);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn jQuery.Deferred(function (newDefer) {\n\n\t\t\t\t\t\t\t// progress_handlers.add( ... )\n\t\t\t\t\t\t\ttuples[0][3].add(\n\t\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\t\tisFunction(onProgress) ?\n\t\t\t\t\t\t\t\t\t\tonProgress :\n\t\t\t\t\t\t\t\t\t\tIdentity,\n\t\t\t\t\t\t\t\t\tnewDefer.notifyWith\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t// fulfilled_handlers.add( ... )\n\t\t\t\t\t\t\ttuples[1][3].add(\n\t\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\t\tisFunction(onFulfilled) ?\n\t\t\t\t\t\t\t\t\t\tonFulfilled :\n\t\t\t\t\t\t\t\t\t\tIdentity\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t// rejected_handlers.add( ... )\n\t\t\t\t\t\t\ttuples[2][3].add(\n\t\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\t\tisFunction(onRejected) ?\n\t\t\t\t\t\t\t\t\t\tonRejected :\n\t\t\t\t\t\t\t\t\t\tThrower\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}).promise();\n\t\t\t\t\t},\n\n\t\t\t\t\t// Get a promise for this deferred\n\t\t\t\t\t// If obj is provided, the promise aspect is added to the object\n\t\t\t\t\tpromise: function (obj) {\n\t\t\t\t\t\treturn obj != null ? jQuery.extend(obj, promise) : promise;\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tdeferred = {};\n\n\t\t\t// Add list-specific methods\n\t\t\tjQuery.each(tuples, function (i, tuple) {\n\t\t\t\tvar list = tuple[2],\n\t\t\t\t\tstateString = tuple[5];\n\n\t\t\t\t// promise.progress = list.add\n\t\t\t\t// promise.done = list.add\n\t\t\t\t// promise.fail = list.add\n\t\t\t\tpromise[tuple[1]] = list.add;\n\n\t\t\t\t// Handle state\n\t\t\t\tif (stateString) {\n\t\t\t\t\tlist.add(\n\t\t\t\t\t\tfunction () {\n\n\t\t\t\t\t\t\t// state = \"resolved\" (i.e., fulfilled)\n\t\t\t\t\t\t\t// state = \"rejected\"\n\t\t\t\t\t\t\tstate = stateString;\n\t\t\t\t\t\t},\n\n\t\t\t\t\t\t// rejected_callbacks.disable\n\t\t\t\t\t\t// fulfilled_callbacks.disable\n\t\t\t\t\t\ttuples[3 - i][2].disable,\n\n\t\t\t\t\t\t// rejected_handlers.disable\n\t\t\t\t\t\t// fulfilled_handlers.disable\n\t\t\t\t\t\ttuples[3 - i][3].disable,\n\n\t\t\t\t\t\t// progress_callbacks.lock\n\t\t\t\t\t\ttuples[0][2].lock,\n\n\t\t\t\t\t\t// progress_handlers.lock\n\t\t\t\t\t\ttuples[0][3].lock\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\t// progress_handlers.fire\n\t\t\t\t// fulfilled_handlers.fire\n\t\t\t\t// rejected_handlers.fire\n\t\t\t\tlist.add(tuple[3].fire);\n\n\t\t\t\t// deferred.notify = function() { deferred.notifyWith(...) }\n\t\t\t\t// deferred.resolve = function() { deferred.resolveWith(...) }\n\t\t\t\t// deferred.reject = function() { deferred.rejectWith(...) }\n\t\t\t\tdeferred[tuple[0]] = function () {\n\t\t\t\t\tdeferred[tuple[0] + \"With\"](this === deferred ? undefined : this, arguments);\n\t\t\t\t\treturn this;\n\t\t\t\t};\n\n\t\t\t\t// deferred.notifyWith = list.fireWith\n\t\t\t\t// deferred.resolveWith = list.fireWith\n\t\t\t\t// deferred.rejectWith = list.fireWith\n\t\t\t\tdeferred[tuple[0] + \"With\"] = list.fireWith;\n\t\t\t});\n\n\t\t\t// Make the deferred a promise\n\t\t\tpromise.promise(deferred);\n\n\t\t\t// Call given func if any\n\t\t\tif (func) {\n\t\t\t\tfunc.call(deferred, deferred);\n\t\t\t}\n\n\t\t\t// All done!\n\t\t\treturn deferred;\n\t\t},\n\n\t\t// Deferred helper\n\t\twhen: function (singleValue) {\n\t\t\tvar\n\n\t\t\t\t// count of uncompleted subordinates\n\t\t\t\tremaining = arguments.length,\n\n\t\t\t\t// count of unprocessed arguments\n\t\t\t\ti = remaining,\n\n\t\t\t\t// subordinate fulfillment data\n\t\t\t\tresolveContexts = Array(i),\n\t\t\t\tresolveValues = slice.call(arguments),\n\n\t\t\t\t// the primary Deferred\n\t\t\t\tprimary = jQuery.Deferred(),\n\n\t\t\t\t// subordinate callback factory\n\t\t\t\tupdateFunc = function (i) {\n\t\t\t\t\treturn function (value) {\n\t\t\t\t\t\tresolveContexts[i] = this;\n\t\t\t\t\t\tresolveValues[i] = arguments.length > 1 ? slice.call(arguments) : value;\n\t\t\t\t\t\tif (!(--remaining)) {\n\t\t\t\t\t\t\tprimary.resolveWith(resolveContexts, resolveValues);\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t};\n\n\t\t\t// Single- and empty arguments are adopted like Promise.resolve\n\t\t\tif (remaining <= 1) {\n\t\t\t\tadoptValue(singleValue, primary.done(updateFunc(i)).resolve, primary.reject,\n\t\t\t\t\t!remaining);\n\n\t\t\t\t// Use .then() to unwrap secondary thenables (cf. gh-3000)\n\t\t\t\tif (primary.state() === \"pending\" ||\n\t\t\t\t\tisFunction(resolveValues[i] && resolveValues[i].then)) {\n\n\t\t\t\t\treturn primary.then();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Multiple arguments are aggregated like Promise.all array elements\n\t\t\twhile (i--) {\n\t\t\t\tadoptValue(resolveValues[i], updateFunc(i), primary.reject);\n\t\t\t}\n\n\t\t\treturn primary.promise();\n\t\t}\n\t});\n\n\n\t// These usually indicate a programmer mistake during development,\n\t// warn about them ASAP rather than swallowing them by default.\n\tvar rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;\n\n\t// If `jQuery.Deferred.getErrorHook` is defined, `asyncError` is an error\n\t// captured before the async barrier to get the original error cause\n\t// which may otherwise be hidden.\n\tjQuery.Deferred.exceptionHook = function (error, asyncError) {\n\n\t\t// Support: IE 8 - 9 only\n\t\t// Console exists when dev tools are open, which can happen at any time\n\t\tif (window.console && window.console.warn && error && rerrorNames.test(error.name)) {\n\t\t\twindow.console.warn(\"jQuery.Deferred exception: \" + error.message,\n\t\t\t\terror.stack, asyncError);\n\t\t}\n\t};\n\n\n\n\n\tjQuery.readyException = function (error) {\n\t\twindow.setTimeout(function () {\n\t\t\tthrow error;\n\t\t});\n\t};\n\n\n\n\n\t// The deferred used on DOM ready\n\tvar readyList = jQuery.Deferred();\n\n\tjQuery.fn.ready = function (fn) {\n\n\t\treadyList\n\t\t\t.then(fn)\n\n\t\t\t// Wrap jQuery.readyException in a function so that the lookup\n\t\t\t// happens at the time of error handling instead of callback\n\t\t\t// registration.\n\t\t\t.catch(function (error) {\n\t\t\t\tjQuery.readyException(error);\n\t\t\t});\n\n\t\treturn this;\n\t};\n\n\tjQuery.extend({\n\n\t\t// Is the DOM ready to be used? Set to true once it occurs.\n\t\tisReady: false,\n\n\t\t// A counter to track how many items to wait for before\n\t\t// the ready event fires. See trac-6781\n\t\treadyWait: 1,\n\n\t\t// Handle when the DOM is ready\n\t\tready: function (wait) {\n\n\t\t\t// Abort if there are pending holds or we're already ready\n\t\t\tif (wait === true ? --jQuery.readyWait : jQuery.isReady) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Remember that the DOM is ready\n\t\t\tjQuery.isReady = true;\n\n\t\t\t// If a normal DOM Ready event fired, decrement, and wait if need be\n\t\t\tif (wait !== true && --jQuery.readyWait > 0) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If there are functions bound, to execute\n\t\t\treadyList.resolveWith(document, [jQuery]);\n\t\t}\n\t});\n\n\tjQuery.ready.then = readyList.then;\n\n\t// The ready event handler and self cleanup method\n\tfunction completed() {\n\t\tdocument.removeEventListener(\"DOMContentLoaded\", completed);\n\t\twindow.removeEventListener(\"load\", completed);\n\t\tjQuery.ready();\n\t}\n\n\t// Catch cases where $(document).ready() is called\n\t// after the browser event has already occurred.\n\t// Support: IE <=9 - 10 only\n\t// Older IE sometimes signals \"interactive\" too soon\n\tif (document.readyState === \"complete\" ||\n\t\t(document.readyState !== \"loading\" && !document.documentElement.doScroll)) {\n\n\t\t// Handle it asynchronously to allow scripts the opportunity to delay ready\n\t\twindow.setTimeout(jQuery.ready);\n\n\t} else {\n\n\t\t// Use the handy event callback\n\t\tdocument.addEventListener(\"DOMContentLoaded\", completed);\n\n\t\t// A fallback to window.onload, that will always work\n\t\twindow.addEventListener(\"load\", completed);\n\t}\n\n\n\n\n\t// Multifunctional method to get and set values of a collection\n\t// The value/s can optionally be executed if it's a function\n\tvar access = function (elems, fn, key, value, chainable, emptyGet, raw) {\n\t\tvar i = 0,\n\t\t\tlen = elems.length,\n\t\t\tbulk = key == null;\n\n\t\t// Sets many values\n\t\tif (toType(key) === \"object\") {\n\t\t\tchainable = true;\n\t\t\tfor (i in key) {\n\t\t\t\taccess(elems, fn, i, key[i], true, emptyGet, raw);\n\t\t\t}\n\n\t\t\t// Sets one value\n\t\t} else if (value !== undefined) {\n\t\t\tchainable = true;\n\n\t\t\tif (!isFunction(value)) {\n\t\t\t\traw = true;\n\t\t\t}\n\n\t\t\tif (bulk) {\n\n\t\t\t\t// Bulk operations run against the entire set\n\t\t\t\tif (raw) {\n\t\t\t\t\tfn.call(elems, value);\n\t\t\t\t\tfn = null;\n\n\t\t\t\t\t// ...except when executing function values\n\t\t\t\t} else {\n\t\t\t\t\tbulk = fn;\n\t\t\t\t\tfn = function (elem, _key, value) {\n\t\t\t\t\t\treturn bulk.call(jQuery(elem), value);\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (fn) {\n\t\t\t\tfor (; i < len; i++) {\n\t\t\t\t\tfn(\n\t\t\t\t\t\telems[i], key, raw ?\n\t\t\t\t\t\tvalue :\n\t\t\t\t\t\tvalue.call(elems[i], i, fn(elems[i], key))\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (chainable) {\n\t\t\treturn elems;\n\t\t}\n\n\t\t// Gets\n\t\tif (bulk) {\n\t\t\treturn fn.call(elems);\n\t\t}\n\n\t\treturn len ? fn(elems[0], key) : emptyGet;\n\t};\n\n\n\t// Matches dashed string for camelizing\n\tvar rmsPrefix = /^-ms-/,\n\t\trdashAlpha = /-([a-z])/g;\n\n\t// Used by camelCase as callback to replace()\n\tfunction fcamelCase(_all, letter) {\n\t\treturn letter.toUpperCase();\n\t}\n\n\t// Convert dashed to camelCase; used by the css and data modules\n\t// Support: IE <=9 - 11, Edge 12 - 15\n\t// Microsoft forgot to hump their vendor prefix (trac-9572)\n\tfunction camelCase(string) {\n\t\treturn string.replace(rmsPrefix, \"ms-\").replace(rdashAlpha, fcamelCase);\n\t}\n\tvar acceptData = function (owner) {\n\n\t\t// Accepts only:\n\t\t//  - Node\n\t\t//    - Node.ELEMENT_NODE\n\t\t//    - Node.DOCUMENT_NODE\n\t\t//  - Object\n\t\t//    - Any\n\t\treturn owner.nodeType === 1 || owner.nodeType === 9 || !(+owner.nodeType);\n\t};\n\n\n\n\n\tfunction Data() {\n\t\tthis.expando = jQuery.expando + Data.uid++;\n\t}\n\n\tData.uid = 1;\n\n\tData.prototype = {\n\n\t\tcache: function (owner) {\n\n\t\t\t// Check if the owner object already has a cache\n\t\t\tvar value = owner[this.expando];\n\n\t\t\t// If not, create one\n\t\t\tif (!value) {\n\t\t\t\tvalue = {};\n\n\t\t\t\t// We can accept data for non-element nodes in modern browsers,\n\t\t\t\t// but we should not, see trac-8335.\n\t\t\t\t// Always return an empty object.\n\t\t\t\tif (acceptData(owner)) {\n\n\t\t\t\t\t// If it is a node unlikely to be stringify-ed or looped over\n\t\t\t\t\t// use plain assignment\n\t\t\t\t\tif (owner.nodeType) {\n\t\t\t\t\t\towner[this.expando] = value;\n\n\t\t\t\t\t\t// Otherwise secure it in a non-enumerable property\n\t\t\t\t\t\t// configurable must be true to allow the property to be\n\t\t\t\t\t\t// deleted when data is removed\n\t\t\t\t\t} else {\n\t\t\t\t\t\tObject.defineProperty(owner, this.expando, {\n\t\t\t\t\t\t\tvalue: value,\n\t\t\t\t\t\t\tconfigurable: true\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn value;\n\t\t},\n\t\tset: function (owner, data, value) {\n\t\t\tvar prop,\n\t\t\t\tcache = this.cache(owner);\n\n\t\t\t// Handle: [ owner, key, value ] args\n\t\t\t// Always use camelCase key (gh-2257)\n\t\t\tif (typeof data === \"string\") {\n\t\t\t\tcache[camelCase(data)] = value;\n\n\t\t\t\t// Handle: [ owner, { properties } ] args\n\t\t\t} else {\n\n\t\t\t\t// Copy the properties one-by-one to the cache object\n\t\t\t\tfor (prop in data) {\n\t\t\t\t\tcache[camelCase(prop)] = data[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn cache;\n\t\t},\n\t\tget: function (owner, key) {\n\t\t\treturn key === undefined ?\n\t\t\t\tthis.cache(owner) :\n\n\t\t\t\t// Always use camelCase key (gh-2257)\n\t\t\t\towner[this.expando] && owner[this.expando][camelCase(key)];\n\t\t},\n\t\taccess: function (owner, key, value) {\n\n\t\t\t// In cases where either:\n\t\t\t//\n\t\t\t//   1. No key was specified\n\t\t\t//   2. A string key was specified, but no value provided\n\t\t\t//\n\t\t\t// Take the \"read\" path and allow the get method to determine\n\t\t\t// which value to return, respectively either:\n\t\t\t//\n\t\t\t//   1. The entire cache object\n\t\t\t//   2. The data stored at the key\n\t\t\t//\n\t\t\tif (key === undefined ||\n\t\t\t\t((key && typeof key === \"string\") && value === undefined)) {\n\n\t\t\t\treturn this.get(owner, key);\n\t\t\t}\n\n\t\t\t// When the key is not a string, or both a key and value\n\t\t\t// are specified, set or extend (existing objects) with either:\n\t\t\t//\n\t\t\t//   1. An object of properties\n\t\t\t//   2. A key and value\n\t\t\t//\n\t\t\tthis.set(owner, key, value);\n\n\t\t\t// Since the \"set\" path can have two possible entry points\n\t\t\t// return the expected data based on which path was taken[*]\n\t\t\treturn value !== undefined ? value : key;\n\t\t},\n\t\tremove: function (owner, key) {\n\t\t\tvar i,\n\t\t\t\tcache = owner[this.expando];\n\n\t\t\tif (cache === undefined) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (key !== undefined) {\n\n\t\t\t\t// Support array or space separated string of keys\n\t\t\t\tif (Array.isArray(key)) {\n\n\t\t\t\t\t// If key is an array of keys...\n\t\t\t\t\t// We always set camelCase keys, so remove that.\n\t\t\t\t\tkey = key.map(camelCase);\n\t\t\t\t} else {\n\t\t\t\t\tkey = camelCase(key);\n\n\t\t\t\t\t// If a key with the spaces exists, use it.\n\t\t\t\t\t// Otherwise, create an array by matching non-whitespace\n\t\t\t\t\tkey = key in cache ?\n\t\t\t\t\t\t[key] :\n\t\t\t\t\t\t(key.match(rnothtmlwhite) || []);\n\t\t\t\t}\n\n\t\t\t\ti = key.length;\n\n\t\t\t\twhile (i--) {\n\t\t\t\t\tdelete cache[key[i]];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove the expando if there's no more data\n\t\t\tif (key === undefined || jQuery.isEmptyObject(cache)) {\n\n\t\t\t\t// Support: Chrome <=35 - 45\n\t\t\t\t// Webkit & Blink performance suffers when deleting properties\n\t\t\t\t// from DOM nodes, so set to undefined instead\n\t\t\t\t// https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted)\n\t\t\t\tif (owner.nodeType) {\n\t\t\t\t\towner[this.expando] = undefined;\n\t\t\t\t} else {\n\t\t\t\t\tdelete owner[this.expando];\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\thasData: function (owner) {\n\t\t\tvar cache = owner[this.expando];\n\t\t\treturn cache !== undefined && !jQuery.isEmptyObject(cache);\n\t\t}\n\t};\n\tvar dataPriv = new Data();\n\n\tvar dataUser = new Data();\n\n\n\n\t//\tImplementation Summary\n\t//\n\t//\t1. Enforce API surface and semantic compatibility with 1.9.x branch\n\t//\t2. Improve the module's maintainability by reducing the storage\n\t//\t\tpaths to a single mechanism.\n\t//\t3. Use the same single mechanism to support \"private\" and \"user\" data.\n\t//\t4. _Never_ expose \"private\" data to user code (TODO: Drop _data, _removeData)\n\t//\t5. Avoid exposing implementation details on user objects (eg. expando properties)\n\t//\t6. Provide a clear path for implementation upgrade to WeakMap in 2014\n\n\tvar rbrace = /^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,\n\t\trmultiDash = /[A-Z]/g;\n\n\tfunction getData(data) {\n\t\tif (data === \"true\") {\n\t\t\treturn true;\n\t\t}\n\n\t\tif (data === \"false\") {\n\t\t\treturn false;\n\t\t}\n\n\t\tif (data === \"null\") {\n\t\t\treturn null;\n\t\t}\n\n\t\t// Only convert to a number if it doesn't change the string\n\t\tif (data === +data + \"\") {\n\t\t\treturn +data;\n\t\t}\n\n\t\tif (rbrace.test(data)) {\n\t\t\treturn JSON.parse(data);\n\t\t}\n\n\t\treturn data;\n\t}\n\n\tfunction dataAttr(elem, key, data) {\n\t\tvar name;\n\n\t\t// If nothing was found internally, try to fetch any\n\t\t// data from the HTML5 data-* attribute\n\t\tif (data === undefined && elem.nodeType === 1) {\n\t\t\tname = \"data-\" + key.replace(rmultiDash, \"-$&\").toLowerCase();\n\t\t\tdata = elem.getAttribute(name);\n\n\t\t\tif (typeof data === \"string\") {\n\t\t\t\ttry {\n\t\t\t\t\tdata = getData(data);\n\t\t\t\t} catch (e) { }\n\n\t\t\t\t// Make sure we set the data so it isn't changed later\n\t\t\t\tdataUser.set(elem, key, data);\n\t\t\t} else {\n\t\t\t\tdata = undefined;\n\t\t\t}\n\t\t}\n\t\treturn data;\n\t}\n\n\tjQuery.extend({\n\t\thasData: function (elem) {\n\t\t\treturn dataUser.hasData(elem) || dataPriv.hasData(elem);\n\t\t},\n\n\t\tdata: function (elem, name, data) {\n\t\t\treturn dataUser.access(elem, name, data);\n\t\t},\n\n\t\tremoveData: function (elem, name) {\n\t\t\tdataUser.remove(elem, name);\n\t\t},\n\n\t\t// TODO: Now that all calls to _data and _removeData have been replaced\n\t\t// with direct calls to dataPriv methods, these can be deprecated.\n\t\t_data: function (elem, name, data) {\n\t\t\treturn dataPriv.access(elem, name, data);\n\t\t},\n\n\t\t_removeData: function (elem, name) {\n\t\t\tdataPriv.remove(elem, name);\n\t\t}\n\t});\n\n\tjQuery.fn.extend({\n\t\tdata: function (key, value) {\n\t\t\tvar i, name, data,\n\t\t\t\telem = this[0],\n\t\t\t\tattrs = elem && elem.attributes;\n\n\t\t\t// Gets all values\n\t\t\tif (key === undefined) {\n\t\t\t\tif (this.length) {\n\t\t\t\t\tdata = dataUser.get(elem);\n\n\t\t\t\t\tif (elem.nodeType === 1 && !dataPriv.get(elem, \"hasDataAttrs\")) {\n\t\t\t\t\t\ti = attrs.length;\n\t\t\t\t\t\twhile (i--) {\n\n\t\t\t\t\t\t\t// Support: IE 11 only\n\t\t\t\t\t\t\t// The attrs elements can be null (trac-14894)\n\t\t\t\t\t\t\tif (attrs[i]) {\n\t\t\t\t\t\t\t\tname = attrs[i].name;\n\t\t\t\t\t\t\t\tif (name.indexOf(\"data-\") === 0) {\n\t\t\t\t\t\t\t\t\tname = camelCase(name.slice(5));\n\t\t\t\t\t\t\t\t\tdataAttr(elem, name, data[name]);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdataPriv.set(elem, \"hasDataAttrs\", true);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn data;\n\t\t\t}\n\n\t\t\t// Sets multiple values\n\t\t\tif (typeof key === \"object\") {\n\t\t\t\treturn this.each(function () {\n\t\t\t\t\tdataUser.set(this, key);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn access(this, function (value) {\n\t\t\t\tvar data;\n\n\t\t\t\t// The calling jQuery object (element matches) is not empty\n\t\t\t\t// (and therefore has an element appears at this[ 0 ]) and the\n\t\t\t\t// `value` parameter was not undefined. An empty jQuery object\n\t\t\t\t// will result in `undefined` for elem = this[ 0 ] which will\n\t\t\t\t// throw an exception if an attempt to read a data cache is made.\n\t\t\t\tif (elem && value === undefined) {\n\n\t\t\t\t\t// Attempt to get data from the cache\n\t\t\t\t\t// The key will always be camelCased in Data\n\t\t\t\t\tdata = dataUser.get(elem, key);\n\t\t\t\t\tif (data !== undefined) {\n\t\t\t\t\t\treturn data;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Attempt to \"discover\" the data in\n\t\t\t\t\t// HTML5 custom data-* attrs\n\t\t\t\t\tdata = dataAttr(elem, key);\n\t\t\t\t\tif (data !== undefined) {\n\t\t\t\t\t\treturn data;\n\t\t\t\t\t}\n\n\t\t\t\t\t// We tried really hard, but the data doesn't exist.\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Set the data...\n\t\t\t\tthis.each(function () {\n\n\t\t\t\t\t// We always store the camelCased key\n\t\t\t\t\tdataUser.set(this, key, value);\n\t\t\t\t});\n\t\t\t}, null, value, arguments.length > 1, null, true);\n\t\t},\n\n\t\tremoveData: function (key) {\n\t\t\treturn this.each(function () {\n\t\t\t\tdataUser.remove(this, key);\n\t\t\t});\n\t\t}\n\t});\n\n\n\tjQuery.extend({\n\t\tqueue: function (elem, type, data) {\n\t\t\tvar queue;\n\n\t\t\tif (elem) {\n\t\t\t\ttype = (type || \"fx\") + \"queue\";\n\t\t\t\tqueue = dataPriv.get(elem, type);\n\n\t\t\t\t// Speed up dequeue by getting out quickly if this is just a lookup\n\t\t\t\tif (data) {\n\t\t\t\t\tif (!queue || Array.isArray(data)) {\n\t\t\t\t\t\tqueue = dataPriv.access(elem, type, jQuery.makeArray(data));\n\t\t\t\t\t} else {\n\t\t\t\t\t\tqueue.push(data);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn queue || [];\n\t\t\t}\n\t\t},\n\n\t\tdequeue: function (elem, type) {\n\t\t\ttype = type || \"fx\";\n\n\t\t\tvar queue = jQuery.queue(elem, type),\n\t\t\t\tstartLength = queue.length,\n\t\t\t\tfn = queue.shift(),\n\t\t\t\thooks = jQuery._queueHooks(elem, type),\n\t\t\t\tnext = function () {\n\t\t\t\t\tjQuery.dequeue(elem, type);\n\t\t\t\t};\n\n\t\t\t// If the fx queue is dequeued, always remove the progress sentinel\n\t\t\tif (fn === \"inprogress\") {\n\t\t\t\tfn = queue.shift();\n\t\t\t\tstartLength--;\n\t\t\t}\n\n\t\t\tif (fn) {\n\n\t\t\t\t// Add a progress sentinel to prevent the fx queue from being\n\t\t\t\t// automatically dequeued\n\t\t\t\tif (type === \"fx\") {\n\t\t\t\t\tqueue.unshift(\"inprogress\");\n\t\t\t\t}\n\n\t\t\t\t// Clear up the last queue stop function\n\t\t\t\tdelete hooks.stop;\n\t\t\t\tfn.call(elem, next, hooks);\n\t\t\t}\n\n\t\t\tif (!startLength && hooks) {\n\t\t\t\thooks.empty.fire();\n\t\t\t}\n\t\t},\n\n\t\t// Not public - generate a queueHooks object, or return the current one\n\t\t_queueHooks: function (elem, type) {\n\t\t\tvar key = type + \"queueHooks\";\n\t\t\treturn dataPriv.get(elem, key) || dataPriv.access(elem, key, {\n\t\t\t\tempty: jQuery.Callbacks(\"once memory\").add(function () {\n\t\t\t\t\tdataPriv.remove(elem, [type + \"queue\", key]);\n\t\t\t\t})\n\t\t\t});\n\t\t}\n\t});\n\n\tjQuery.fn.extend({\n\t\tqueue: function (type, data) {\n\t\t\tvar setter = 2;\n\n\t\t\tif (typeof type !== \"string\") {\n\t\t\t\tdata = type;\n\t\t\t\ttype = \"fx\";\n\t\t\t\tsetter--;\n\t\t\t}\n\n\t\t\tif (arguments.length < setter) {\n\t\t\t\treturn jQuery.queue(this[0], type);\n\t\t\t}\n\n\t\t\treturn data === undefined ?\n\t\t\t\tthis :\n\t\t\t\tthis.each(function () {\n\t\t\t\t\tvar queue = jQuery.queue(this, type, data);\n\n\t\t\t\t\t// Ensure a hooks for this queue\n\t\t\t\t\tjQuery._queueHooks(this, type);\n\n\t\t\t\t\tif (type === \"fx\" && queue[0] !== \"inprogress\") {\n\t\t\t\t\t\tjQuery.dequeue(this, type);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t},\n\t\tdequeue: function (type) {\n\t\t\treturn this.each(function () {\n\t\t\t\tjQuery.dequeue(this, type);\n\t\t\t});\n\t\t},\n\t\tclearQueue: function (type) {\n\t\t\treturn this.queue(type || \"fx\", []);\n\t\t},\n\n\t\t// Get a promise resolved when queues of a certain type\n\t\t// are emptied (fx is the type by default)\n\t\tpromise: function (type, obj) {\n\t\t\tvar tmp,\n\t\t\t\tcount = 1,\n\t\t\t\tdefer = jQuery.Deferred(),\n\t\t\t\telements = this,\n\t\t\t\ti = this.length,\n\t\t\t\tresolve = function () {\n\t\t\t\t\tif (!(--count)) {\n\t\t\t\t\t\tdefer.resolveWith(elements, [elements]);\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\tif (typeof type !== \"string\") {\n\t\t\t\tobj = type;\n\t\t\t\ttype = undefined;\n\t\t\t}\n\t\t\ttype = type || \"fx\";\n\n\t\t\twhile (i--) {\n\t\t\t\ttmp = dataPriv.get(elements[i], type + \"queueHooks\");\n\t\t\t\tif (tmp && tmp.empty) {\n\t\t\t\t\tcount++;\n\t\t\t\t\ttmp.empty.add(resolve);\n\t\t\t\t}\n\t\t\t}\n\t\t\tresolve();\n\t\t\treturn defer.promise(obj);\n\t\t}\n\t});\n\tvar pnum = (/[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/).source;\n\n\tvar rcssNum = new RegExp(\"^(?:([+-])=|)(\" + pnum + \")([a-z%]*)$\", \"i\");\n\n\n\tvar cssExpand = [\"Top\", \"Right\", \"Bottom\", \"Left\"];\n\n\tvar documentElement = document.documentElement;\n\n\n\n\tvar isAttached = function (elem) {\n\t\treturn jQuery.contains(elem.ownerDocument, elem);\n\t},\n\t\tcomposed = { composed: true };\n\n\t// Support: IE 9 - 11+, Edge 12 - 18+, iOS 10.0 - 10.2 only\n\t// Check attachment across shadow DOM boundaries when possible (gh-3504)\n\t// Support: iOS 10.0-10.2 only\n\t// Early iOS 10 versions support `attachShadow` but not `getRootNode`,\n\t// leading to errors. We need to check for `getRootNode`.\n\tif (documentElement.getRootNode) {\n\t\tisAttached = function (elem) {\n\t\t\treturn jQuery.contains(elem.ownerDocument, elem) ||\n\t\t\t\telem.getRootNode(composed) === elem.ownerDocument;\n\t\t};\n\t}\n\tvar isHiddenWithinTree = function (elem, el) {\n\n\t\t// isHiddenWithinTree might be called from jQuery#filter function;\n\t\t// in that case, element will be second argument\n\t\telem = el || elem;\n\n\t\t// Inline style trumps all\n\t\treturn elem.style.display === \"none\" ||\n\t\t\telem.style.display === \"\" &&\n\n\t\t\t// Otherwise, check computed style\n\t\t\t// Support: Firefox <=43 - 45\n\t\t\t// Disconnected elements can have computed display: none, so first confirm that elem is\n\t\t\t// in the document.\n\t\t\tisAttached(elem) &&\n\n\t\t\tjQuery.css(elem, \"display\") === \"none\";\n\t};\n\n\n\n\tfunction adjustCSS(elem, prop, valueParts, tween) {\n\t\tvar adjusted, scale,\n\t\t\tmaxIterations = 20,\n\t\t\tcurrentValue = tween ?\n\t\t\t\tfunction () {\n\t\t\t\t\treturn tween.cur();\n\t\t\t\t} :\n\t\t\t\tfunction () {\n\t\t\t\t\treturn jQuery.css(elem, prop, \"\");\n\t\t\t\t},\n\t\t\tinitial = currentValue(),\n\t\t\tunit = valueParts && valueParts[3] || (jQuery.cssNumber[prop] ? \"\" : \"px\"),\n\n\t\t\t// Starting value computation is required for potential unit mismatches\n\t\t\tinitialInUnit = elem.nodeType &&\n\t\t\t\t(jQuery.cssNumber[prop] || unit !== \"px\" && +initial) &&\n\t\t\t\trcssNum.exec(jQuery.css(elem, prop));\n\n\t\tif (initialInUnit && initialInUnit[3] !== unit) {\n\n\t\t\t// Support: Firefox <=54\n\t\t\t// Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144)\n\t\t\tinitial = initial / 2;\n\n\t\t\t// Trust units reported by jQuery.css\n\t\t\tunit = unit || initialInUnit[3];\n\n\t\t\t// Iteratively approximate from a nonzero starting point\n\t\t\tinitialInUnit = +initial || 1;\n\n\t\t\twhile (maxIterations--) {\n\n\t\t\t\t// Evaluate and update our best guess (doubling guesses that zero out).\n\t\t\t\t// Finish if the scale equals or crosses 1 (making the old*new product non-positive).\n\t\t\t\tjQuery.style(elem, prop, initialInUnit + unit);\n\t\t\t\tif ((1 - scale) * (1 - (scale = currentValue() / initial || 0.5)) <= 0) {\n\t\t\t\t\tmaxIterations = 0;\n\t\t\t\t}\n\t\t\t\tinitialInUnit = initialInUnit / scale;\n\n\t\t\t}\n\n\t\t\tinitialInUnit = initialInUnit * 2;\n\t\t\tjQuery.style(elem, prop, initialInUnit + unit);\n\n\t\t\t// Make sure we update the tween properties later on\n\t\t\tvalueParts = valueParts || [];\n\t\t}\n\n\t\tif (valueParts) {\n\t\t\tinitialInUnit = +initialInUnit || +initial || 0;\n\n\t\t\t// Apply relative offset (+=/-=) if specified\n\t\t\tadjusted = valueParts[1] ?\n\t\t\t\tinitialInUnit + (valueParts[1] + 1) * valueParts[2] :\n\t\t\t\t+valueParts[2];\n\t\t\tif (tween) {\n\t\t\t\ttween.unit = unit;\n\t\t\t\ttween.start = initialInUnit;\n\t\t\t\ttween.end = adjusted;\n\t\t\t}\n\t\t}\n\t\treturn adjusted;\n\t}\n\n\n\tvar defaultDisplayMap = {};\n\n\tfunction getDefaultDisplay(elem) {\n\t\tvar temp,\n\t\t\tdoc = elem.ownerDocument,\n\t\t\tnodeName = elem.nodeName,\n\t\t\tdisplay = defaultDisplayMap[nodeName];\n\n\t\tif (display) {\n\t\t\treturn display;\n\t\t}\n\n\t\ttemp = doc.body.appendChild(doc.createElement(nodeName));\n\t\tdisplay = jQuery.css(temp, \"display\");\n\n\t\ttemp.parentNode.removeChild(temp);\n\n\t\tif (display === \"none\") {\n\t\t\tdisplay = \"block\";\n\t\t}\n\t\tdefaultDisplayMap[nodeName] = display;\n\n\t\treturn display;\n\t}\n\n\tfunction showHide(elements, show) {\n\t\tvar display, elem,\n\t\t\tvalues = [],\n\t\t\tindex = 0,\n\t\t\tlength = elements.length;\n\n\t\t// Determine new display value for elements that need to change\n\t\tfor (; index < length; index++) {\n\t\t\telem = elements[index];\n\t\t\tif (!elem.style) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tdisplay = elem.style.display;\n\t\t\tif (show) {\n\n\t\t\t\t// Since we force visibility upon cascade-hidden elements, an immediate (and slow)\n\t\t\t\t// check is required in this first loop unless we have a nonempty display value (either\n\t\t\t\t// inline or about-to-be-restored)\n\t\t\t\tif (display === \"none\") {\n\t\t\t\t\tvalues[index] = dataPriv.get(elem, \"display\") || null;\n\t\t\t\t\tif (!values[index]) {\n\t\t\t\t\t\telem.style.display = \"\";\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (elem.style.display === \"\" && isHiddenWithinTree(elem)) {\n\t\t\t\t\tvalues[index] = getDefaultDisplay(elem);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (display !== \"none\") {\n\t\t\t\t\tvalues[index] = \"none\";\n\n\t\t\t\t\t// Remember what we're overwriting\n\t\t\t\t\tdataPriv.set(elem, \"display\", display);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Set the display of the elements in a second loop to avoid constant reflow\n\t\tfor (index = 0; index < length; index++) {\n\t\t\tif (values[index] != null) {\n\t\t\t\telements[index].style.display = values[index];\n\t\t\t}\n\t\t}\n\n\t\treturn elements;\n\t}\n\n\tjQuery.fn.extend({\n\t\tshow: function () {\n\t\t\treturn showHide(this, true);\n\t\t},\n\t\thide: function () {\n\t\t\treturn showHide(this);\n\t\t},\n\t\ttoggle: function (state) {\n\t\t\tif (typeof state === \"boolean\") {\n\t\t\t\treturn state ? this.show() : this.hide();\n\t\t\t}\n\n\t\t\treturn this.each(function () {\n\t\t\t\tif (isHiddenWithinTree(this)) {\n\t\t\t\t\tjQuery(this).show();\n\t\t\t\t} else {\n\t\t\t\t\tjQuery(this).hide();\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t});\n\tvar rcheckableType = (/^(?:checkbox|radio)$/i);\n\n\tvar rtagName = (/<([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]*)/i);\n\n\tvar rscriptType = (/^$|^module$|\\/(?:java|ecma)script/i);\n\n\n\n\t(function () {\n\t\tvar fragment = document.createDocumentFragment(),\n\t\t\tdiv = fragment.appendChild(document.createElement(\"div\")),\n\t\t\tinput = document.createElement(\"input\");\n\n\t\t// Support: Android 4.0 - 4.3 only\n\t\t// Check state lost if the name is set (trac-11217)\n\t\t// Support: Windows Web Apps (WWA)\n\t\t// `name` and `type` must use .setAttribute for WWA (trac-14901)\n\t\tinput.setAttribute(\"type\", \"radio\");\n\t\tinput.setAttribute(\"checked\", \"checked\");\n\t\tinput.setAttribute(\"name\", \"t\");\n\n\t\tdiv.appendChild(input);\n\n\t\t// Support: Android <=4.1 only\n\t\t// Older WebKit doesn't clone checked state correctly in fragments\n\t\tsupport.checkClone = div.cloneNode(true).cloneNode(true).lastChild.checked;\n\n\t\t// Support: IE <=11 only\n\t\t// Make sure textarea (and checkbox) defaultValue is properly cloned\n\t\tdiv.innerHTML = \"<textarea>x</textarea>\";\n\t\tsupport.noCloneChecked = !!div.cloneNode(true).lastChild.defaultValue;\n\n\t\t// Support: IE <=9 only\n\t\t// IE <=9 replaces <option> tags with their contents when inserted outside of\n\t\t// the select element.\n\t\tdiv.innerHTML = \"<option></option>\";\n\t\tsupport.option = !!div.lastChild;\n\t})();\n\n\n\t// We have to close these tags to support XHTML (trac-13200)\n\tvar wrapMap = {\n\n\t\t// XHTML parsers do not magically insert elements in the\n\t\t// same way that tag soup parsers do. So we cannot shorten\n\t\t// this by omitting <tbody> or other required elements.\n\t\tthead: [1, \"<table>\", \"</table>\"],\n\t\tcol: [2, \"<table><colgroup>\", \"</colgroup></table>\"],\n\t\ttr: [2, \"<table><tbody>\", \"</tbody></table>\"],\n\t\ttd: [3, \"<table><tbody><tr>\", \"</tr></tbody></table>\"],\n\n\t\t_default: [0, \"\", \"\"]\n\t};\n\n\twrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;\n\twrapMap.th = wrapMap.td;\n\n\t// Support: IE <=9 only\n\tif (!support.option) {\n\t\twrapMap.optgroup = wrapMap.option = [1, \"<select multiple='multiple'>\", \"</select>\"];\n\t}\n\n\n\tfunction getAll(context, tag) {\n\n\t\t// Support: IE <=9 - 11 only\n\t\t// Use typeof to avoid zero-argument method invocation on host objects (trac-15151)\n\t\tvar ret;\n\n\t\tif (typeof context.getElementsByTagName !== \"undefined\") {\n\t\t\tret = context.getElementsByTagName(tag || \"*\");\n\n\t\t} else if (typeof context.querySelectorAll !== \"undefined\") {\n\t\t\tret = context.querySelectorAll(tag || \"*\");\n\n\t\t} else {\n\t\t\tret = [];\n\t\t}\n\n\t\tif (tag === undefined || tag && nodeName(context, tag)) {\n\t\t\treturn jQuery.merge([context], ret);\n\t\t}\n\n\t\treturn ret;\n\t}\n\n\n\t// Mark scripts as having already been evaluated\n\tfunction setGlobalEval(elems, refElements) {\n\t\tvar i = 0,\n\t\t\tl = elems.length;\n\n\t\tfor (; i < l; i++) {\n\t\t\tdataPriv.set(\n\t\t\t\telems[i],\n\t\t\t\t\"globalEval\",\n\t\t\t\t!refElements || dataPriv.get(refElements[i], \"globalEval\")\n\t\t\t);\n\t\t}\n\t}\n\n\n\tvar rhtml = /<|&#?\\w+;/;\n\n\tfunction buildFragment(elems, context, scripts, selection, ignored) {\n\t\tvar elem, tmp, tag, wrap, attached, j,\n\t\t\tfragment = context.createDocumentFragment(),\n\t\t\tnodes = [],\n\t\t\ti = 0,\n\t\t\tl = elems.length;\n\n\t\tfor (; i < l; i++) {\n\t\t\telem = elems[i];\n\n\t\t\tif (elem || elem === 0) {\n\n\t\t\t\t// Add nodes directly\n\t\t\t\tif (toType(elem) === \"object\") {\n\n\t\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\t\tjQuery.merge(nodes, elem.nodeType ? [elem] : elem);\n\n\t\t\t\t\t// Convert non-html into a text node\n\t\t\t\t} else if (!rhtml.test(elem)) {\n\t\t\t\t\tnodes.push(context.createTextNode(elem));\n\n\t\t\t\t\t// Convert html into DOM nodes\n\t\t\t\t} else {\n\t\t\t\t\ttmp = tmp || fragment.appendChild(context.createElement(\"div\"));\n\n\t\t\t\t\t// Deserialize a standard representation\n\t\t\t\t\ttag = (rtagName.exec(elem) || [\"\", \"\"])[1].toLowerCase();\n\t\t\t\t\twrap = wrapMap[tag] || wrapMap._default;\n\t\t\t\t\ttmp.innerHTML = wrap[1] + jQuery.htmlPrefilter(elem) + wrap[2];\n\n\t\t\t\t\t// Descend through wrappers to the right content\n\t\t\t\t\tj = wrap[0];\n\t\t\t\t\twhile (j--) {\n\t\t\t\t\t\ttmp = tmp.lastChild;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\t\tjQuery.merge(nodes, tmp.childNodes);\n\n\t\t\t\t\t// Remember the top-level container\n\t\t\t\t\ttmp = fragment.firstChild;\n\n\t\t\t\t\t// Ensure the created nodes are orphaned (trac-12392)\n\t\t\t\t\ttmp.textContent = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Remove wrapper from fragment\n\t\tfragment.textContent = \"\";\n\n\t\ti = 0;\n\t\twhile ((elem = nodes[i++])) {\n\n\t\t\t// Skip elements already in the context collection (trac-4087)\n\t\t\tif (selection && jQuery.inArray(elem, selection) > -1) {\n\t\t\t\tif (ignored) {\n\t\t\t\t\tignored.push(elem);\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tattached = isAttached(elem);\n\n\t\t\t// Append to fragment\n\t\t\ttmp = getAll(fragment.appendChild(elem), \"script\");\n\n\t\t\t// Preserve script evaluation history\n\t\t\tif (attached) {\n\t\t\t\tsetGlobalEval(tmp);\n\t\t\t}\n\n\t\t\t// Capture executables\n\t\t\tif (scripts) {\n\t\t\t\tj = 0;\n\t\t\t\twhile ((elem = tmp[j++])) {\n\t\t\t\t\tif (rscriptType.test(elem.type || \"\")) {\n\t\t\t\t\t\tscripts.push(elem);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn fragment;\n\t}\n\n\n\tvar rtypenamespace = /^([^.]*)(?:\\.(.+)|)/;\n\n\tfunction returnTrue() {\n\t\treturn true;\n\t}\n\n\tfunction returnFalse() {\n\t\treturn false;\n\t}\n\n\tfunction on(elem, types, selector, data, fn, one) {\n\t\tvar origFn, type;\n\n\t\t// Types can be a map of types/handlers\n\t\tif (typeof types === \"object\") {\n\n\t\t\t// ( types-Object, selector, data )\n\t\t\tif (typeof selector !== \"string\") {\n\n\t\t\t\t// ( types-Object, data )\n\t\t\t\tdata = data || selector;\n\t\t\t\tselector = undefined;\n\t\t\t}\n\t\t\tfor (type in types) {\n\t\t\t\ton(elem, type, selector, data, types[type], one);\n\t\t\t}\n\t\t\treturn elem;\n\t\t}\n\n\t\tif (data == null && fn == null) {\n\n\t\t\t// ( types, fn )\n\t\t\tfn = selector;\n\t\t\tdata = selector = undefined;\n\t\t} else if (fn == null) {\n\t\t\tif (typeof selector === \"string\") {\n\n\t\t\t\t// ( types, selector, fn )\n\t\t\t\tfn = data;\n\t\t\t\tdata = undefined;\n\t\t\t} else {\n\n\t\t\t\t// ( types, data, fn )\n\t\t\t\tfn = data;\n\t\t\t\tdata = selector;\n\t\t\t\tselector = undefined;\n\t\t\t}\n\t\t}\n\t\tif (fn === false) {\n\t\t\tfn = returnFalse;\n\t\t} else if (!fn) {\n\t\t\treturn elem;\n\t\t}\n\n\t\tif (one === 1) {\n\t\t\torigFn = fn;\n\t\t\tfn = function (event) {\n\n\t\t\t\t// Can use an empty set, since event contains the info\n\t\t\t\tjQuery().off(event);\n\t\t\t\treturn origFn.apply(this, arguments);\n\t\t\t};\n\n\t\t\t// Use same guid so caller can remove using origFn\n\t\t\tfn.guid = origFn.guid || (origFn.guid = jQuery.guid++);\n\t\t}\n\t\treturn elem.each(function () {\n\t\t\tjQuery.event.add(this, types, fn, data, selector);\n\t\t});\n\t}\n\n\t/*\n\t * Helper functions for managing events -- not part of the public interface.\n\t * Props to Dean Edwards' addEvent library for many of the ideas.\n\t */\n\tjQuery.event = {\n\n\t\tglobal: {},\n\n\t\tadd: function (elem, types, handler, data, selector) {\n\n\t\t\tvar handleObjIn, eventHandle, tmp,\n\t\t\t\tevents, t, handleObj,\n\t\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\t\telemData = dataPriv.get(elem);\n\n\t\t\t// Only attach events to objects that accept data\n\t\t\tif (!acceptData(elem)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Caller can pass in an object of custom data in lieu of the handler\n\t\t\tif (handler.handler) {\n\t\t\t\thandleObjIn = handler;\n\t\t\t\thandler = handleObjIn.handler;\n\t\t\t\tselector = handleObjIn.selector;\n\t\t\t}\n\n\t\t\t// Ensure that invalid selectors throw exceptions at attach time\n\t\t\t// Evaluate against documentElement in case elem is a non-element node (e.g., document)\n\t\t\tif (selector) {\n\t\t\t\tjQuery.find.matchesSelector(documentElement, selector);\n\t\t\t}\n\n\t\t\t// Make sure that the handler has a unique ID, used to find/remove it later\n\t\t\tif (!handler.guid) {\n\t\t\t\thandler.guid = jQuery.guid++;\n\t\t\t}\n\n\t\t\t// Init the element's event structure and main handler, if this is the first\n\t\t\tif (!(events = elemData.events)) {\n\t\t\t\tevents = elemData.events = Object.create(null);\n\t\t\t}\n\t\t\tif (!(eventHandle = elemData.handle)) {\n\t\t\t\teventHandle = elemData.handle = function (e) {\n\n\t\t\t\t\t// Discard the second event of a jQuery.event.trigger() and\n\t\t\t\t\t// when an event is called after a page has unloaded\n\t\t\t\t\treturn typeof jQuery !== \"undefined\" && jQuery.event.triggered !== e.type ?\n\t\t\t\t\t\tjQuery.event.dispatch.apply(elem, arguments) : undefined;\n\t\t\t\t};\n\t\t\t}\n\n\t\t\t// Handle multiple events separated by a space\n\t\t\ttypes = (types || \"\").match(rnothtmlwhite) || [\"\"];\n\t\t\tt = types.length;\n\t\t\twhile (t--) {\n\t\t\t\ttmp = rtypenamespace.exec(types[t]) || [];\n\t\t\t\ttype = origType = tmp[1];\n\t\t\t\tnamespaces = (tmp[2] || \"\").split(\".\").sort();\n\n\t\t\t\t// There *must* be a type, no attaching namespace-only handlers\n\t\t\t\tif (!type) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// If event changes its type, use the special event handlers for the changed type\n\t\t\t\tspecial = jQuery.event.special[type] || {};\n\n\t\t\t\t// If selector defined, determine special event api type, otherwise given type\n\t\t\t\ttype = (selector ? special.delegateType : special.bindType) || type;\n\n\t\t\t\t// Update special based on newly reset type\n\t\t\t\tspecial = jQuery.event.special[type] || {};\n\n\t\t\t\t// handleObj is passed to all event handlers\n\t\t\t\thandleObj = jQuery.extend({\n\t\t\t\t\ttype: type,\n\t\t\t\t\torigType: origType,\n\t\t\t\t\tdata: data,\n\t\t\t\t\thandler: handler,\n\t\t\t\t\tguid: handler.guid,\n\t\t\t\t\tselector: selector,\n\t\t\t\t\tneedsContext: selector && jQuery.expr.match.needsContext.test(selector),\n\t\t\t\t\tnamespace: namespaces.join(\".\")\n\t\t\t\t}, handleObjIn);\n\n\t\t\t\t// Init the event handler queue if we're the first\n\t\t\t\tif (!(handlers = events[type])) {\n\t\t\t\t\thandlers = events[type] = [];\n\t\t\t\t\thandlers.delegateCount = 0;\n\n\t\t\t\t\t// Only use addEventListener if the special events handler returns false\n\t\t\t\t\tif (!special.setup ||\n\t\t\t\t\t\tspecial.setup.call(elem, data, namespaces, eventHandle) === false) {\n\n\t\t\t\t\t\tif (elem.addEventListener) {\n\t\t\t\t\t\t\telem.addEventListener(type, eventHandle);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (special.add) {\n\t\t\t\t\tspecial.add.call(elem, handleObj);\n\n\t\t\t\t\tif (!handleObj.handler.guid) {\n\t\t\t\t\t\thandleObj.handler.guid = handler.guid;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Add to the element's handler list, delegates in front\n\t\t\t\tif (selector) {\n\t\t\t\t\thandlers.splice(handlers.delegateCount++, 0, handleObj);\n\t\t\t\t} else {\n\t\t\t\t\thandlers.push(handleObj);\n\t\t\t\t}\n\n\t\t\t\t// Keep track of which events have ever been used, for event optimization\n\t\t\t\tjQuery.event.global[type] = true;\n\t\t\t}\n\n\t\t},\n\n\t\t// Detach an event or set of events from an element\n\t\tremove: function (elem, types, handler, selector, mappedTypes) {\n\n\t\t\tvar j, origCount, tmp,\n\t\t\t\tevents, t, handleObj,\n\t\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\t\telemData = dataPriv.hasData(elem) && dataPriv.get(elem);\n\n\t\t\tif (!elemData || !(events = elemData.events)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Once for each type.namespace in types; type may be omitted\n\t\t\ttypes = (types || \"\").match(rnothtmlwhite) || [\"\"];\n\t\t\tt = types.length;\n\t\t\twhile (t--) {\n\t\t\t\ttmp = rtypenamespace.exec(types[t]) || [];\n\t\t\t\ttype = origType = tmp[1];\n\t\t\t\tnamespaces = (tmp[2] || \"\").split(\".\").sort();\n\n\t\t\t\t// Unbind all events (on this namespace, if provided) for the element\n\t\t\t\tif (!type) {\n\t\t\t\t\tfor (type in events) {\n\t\t\t\t\t\tjQuery.event.remove(elem, type + types[t], handler, selector, true);\n\t\t\t\t\t}\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tspecial = jQuery.event.special[type] || {};\n\t\t\t\ttype = (selector ? special.delegateType : special.bindType) || type;\n\t\t\t\thandlers = events[type] || [];\n\t\t\t\ttmp = tmp[2] &&\n\t\t\t\t\tnew RegExp(\"(^|\\\\.)\" + namespaces.join(\"\\\\.(?:.*\\\\.|)\") + \"(\\\\.|$)\");\n\n\t\t\t\t// Remove matching events\n\t\t\t\torigCount = j = handlers.length;\n\t\t\t\twhile (j--) {\n\t\t\t\t\thandleObj = handlers[j];\n\n\t\t\t\t\tif ((mappedTypes || origType === handleObj.origType) &&\n\t\t\t\t\t\t(!handler || handler.guid === handleObj.guid) &&\n\t\t\t\t\t\t(!tmp || tmp.test(handleObj.namespace)) &&\n\t\t\t\t\t\t(!selector || selector === handleObj.selector ||\n\t\t\t\t\t\t\tselector === \"**\" && handleObj.selector)) {\n\t\t\t\t\t\thandlers.splice(j, 1);\n\n\t\t\t\t\t\tif (handleObj.selector) {\n\t\t\t\t\t\t\thandlers.delegateCount--;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (special.remove) {\n\t\t\t\t\t\t\tspecial.remove.call(elem, handleObj);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Remove generic event handler if we removed something and no more handlers exist\n\t\t\t\t// (avoids potential for endless recursion during removal of special event handlers)\n\t\t\t\tif (origCount && !handlers.length) {\n\t\t\t\t\tif (!special.teardown ||\n\t\t\t\t\t\tspecial.teardown.call(elem, namespaces, elemData.handle) === false) {\n\n\t\t\t\t\t\tjQuery.removeEvent(elem, type, elemData.handle);\n\t\t\t\t\t}\n\n\t\t\t\t\tdelete events[type];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove data and the expando if it's no longer used\n\t\t\tif (jQuery.isEmptyObject(events)) {\n\t\t\t\tdataPriv.remove(elem, \"handle events\");\n\t\t\t}\n\t\t},\n\n\t\tdispatch: function (nativeEvent) {\n\n\t\t\tvar i, j, ret, matched, handleObj, handlerQueue,\n\t\t\t\targs = new Array(arguments.length),\n\n\t\t\t\t// Make a writable jQuery.Event from the native event object\n\t\t\t\tevent = jQuery.event.fix(nativeEvent),\n\n\t\t\t\thandlers = (\n\t\t\t\t\tdataPriv.get(this, \"events\") || Object.create(null)\n\t\t\t\t)[event.type] || [],\n\t\t\t\tspecial = jQuery.event.special[event.type] || {};\n\n\t\t\t// Use the fix-ed jQuery.Event rather than the (read-only) native event\n\t\t\targs[0] = event;\n\n\t\t\tfor (i = 1; i < arguments.length; i++) {\n\t\t\t\targs[i] = arguments[i];\n\t\t\t}\n\n\t\t\tevent.delegateTarget = this;\n\n\t\t\t// Call the preDispatch hook for the mapped type, and let it bail if desired\n\t\t\tif (special.preDispatch && special.preDispatch.call(this, event) === false) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Determine handlers\n\t\t\thandlerQueue = jQuery.event.handlers.call(this, event, handlers);\n\n\t\t\t// Run delegates first; they may want to stop propagation beneath us\n\t\t\ti = 0;\n\t\t\twhile ((matched = handlerQueue[i++]) && !event.isPropagationStopped()) {\n\t\t\t\tevent.currentTarget = matched.elem;\n\n\t\t\t\tj = 0;\n\t\t\t\twhile ((handleObj = matched.handlers[j++]) &&\n\t\t\t\t\t!event.isImmediatePropagationStopped()) {\n\n\t\t\t\t\t// If the event is namespaced, then each handler is only invoked if it is\n\t\t\t\t\t// specially universal or its namespaces are a superset of the event's.\n\t\t\t\t\tif (!event.rnamespace || handleObj.namespace === false ||\n\t\t\t\t\t\tevent.rnamespace.test(handleObj.namespace)) {\n\n\t\t\t\t\t\tevent.handleObj = handleObj;\n\t\t\t\t\t\tevent.data = handleObj.data;\n\n\t\t\t\t\t\tret = ((jQuery.event.special[handleObj.origType] || {}).handle ||\n\t\t\t\t\t\t\thandleObj.handler).apply(matched.elem, args);\n\n\t\t\t\t\t\tif (ret !== undefined) {\n\t\t\t\t\t\t\tif ((event.result = ret) === false) {\n\t\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Call the postDispatch hook for the mapped type\n\t\t\tif (special.postDispatch) {\n\t\t\t\tspecial.postDispatch.call(this, event);\n\t\t\t}\n\n\t\t\treturn event.result;\n\t\t},\n\n\t\thandlers: function (event, handlers) {\n\t\t\tvar i, handleObj, sel, matchedHandlers, matchedSelectors,\n\t\t\t\thandlerQueue = [],\n\t\t\t\tdelegateCount = handlers.delegateCount,\n\t\t\t\tcur = event.target;\n\n\t\t\t// Find delegate handlers\n\t\t\tif (delegateCount &&\n\n\t\t\t\t// Support: IE <=9\n\t\t\t\t// Black-hole SVG <use> instance trees (trac-13180)\n\t\t\t\tcur.nodeType &&\n\n\t\t\t\t// Support: Firefox <=42\n\t\t\t\t// Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861)\n\t\t\t\t// https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click\n\t\t\t\t// Support: IE 11 only\n\t\t\t\t// ...but not arrow key \"clicks\" of radio inputs, which can have `button` -1 (gh-2343)\n\t\t\t\t!(event.type === \"click\" && event.button >= 1)) {\n\n\t\t\t\tfor (; cur !== this; cur = cur.parentNode || this) {\n\n\t\t\t\t\t// Don't check non-elements (trac-13208)\n\t\t\t\t\t// Don't process clicks on disabled elements (trac-6911, trac-8165, trac-11382, trac-11764)\n\t\t\t\t\tif (cur.nodeType === 1 && !(event.type === \"click\" && cur.disabled === true)) {\n\t\t\t\t\t\tmatchedHandlers = [];\n\t\t\t\t\t\tmatchedSelectors = {};\n\t\t\t\t\t\tfor (i = 0; i < delegateCount; i++) {\n\t\t\t\t\t\t\thandleObj = handlers[i];\n\n\t\t\t\t\t\t\t// Don't conflict with Object.prototype properties (trac-13203)\n\t\t\t\t\t\t\tsel = handleObj.selector + \" \";\n\n\t\t\t\t\t\t\tif (matchedSelectors[sel] === undefined) {\n\t\t\t\t\t\t\t\tmatchedSelectors[sel] = handleObj.needsContext ?\n\t\t\t\t\t\t\t\t\tjQuery(sel, this).index(cur) > -1 :\n\t\t\t\t\t\t\t\t\tjQuery.find(sel, this, null, [cur]).length;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (matchedSelectors[sel]) {\n\t\t\t\t\t\t\t\tmatchedHandlers.push(handleObj);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (matchedHandlers.length) {\n\t\t\t\t\t\t\thandlerQueue.push({ elem: cur, handlers: matchedHandlers });\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Add the remaining (directly-bound) handlers\n\t\t\tcur = this;\n\t\t\tif (delegateCount < handlers.length) {\n\t\t\t\thandlerQueue.push({ elem: cur, handlers: handlers.slice(delegateCount) });\n\t\t\t}\n\n\t\t\treturn handlerQueue;\n\t\t},\n\n\t\taddProp: function (name, hook) {\n\t\t\tObject.defineProperty(jQuery.Event.prototype, name, {\n\t\t\t\tenumerable: true,\n\t\t\t\tconfigurable: true,\n\n\t\t\t\tget: isFunction(hook) ?\n\t\t\t\t\tfunction () {\n\t\t\t\t\t\tif (this.originalEvent) {\n\t\t\t\t\t\t\treturn hook(this.originalEvent);\n\t\t\t\t\t\t}\n\t\t\t\t\t} :\n\t\t\t\t\tfunction () {\n\t\t\t\t\t\tif (this.originalEvent) {\n\t\t\t\t\t\t\treturn this.originalEvent[name];\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\n\t\t\t\tset: function (value) {\n\t\t\t\t\tObject.defineProperty(this, name, {\n\t\t\t\t\t\tenumerable: true,\n\t\t\t\t\t\tconfigurable: true,\n\t\t\t\t\t\twritable: true,\n\t\t\t\t\t\tvalue: value\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\tfix: function (originalEvent) {\n\t\t\treturn originalEvent[jQuery.expando] ?\n\t\t\t\toriginalEvent :\n\t\t\t\tnew jQuery.Event(originalEvent);\n\t\t},\n\n\t\tspecial: {\n\t\t\tload: {\n\n\t\t\t\t// Prevent triggered image.load events from bubbling to window.load\n\t\t\t\tnoBubble: true\n\t\t\t},\n\t\t\tclick: {\n\n\t\t\t\t// Utilize native event to ensure correct state for checkable inputs\n\t\t\t\tsetup: function (data) {\n\n\t\t\t\t\t// For mutual compressibility with _default, replace `this` access with a local var.\n\t\t\t\t\t// `|| data` is dead code meant only to preserve the variable through minification.\n\t\t\t\t\tvar el = this || data;\n\n\t\t\t\t\t// Claim the first handler\n\t\t\t\t\tif (rcheckableType.test(el.type) &&\n\t\t\t\t\t\tel.click && nodeName(el, \"input\")) {\n\n\t\t\t\t\t\t// dataPriv.set( el, \"click\", ... )\n\t\t\t\t\t\tleverageNative(el, \"click\", true);\n\t\t\t\t\t}\n\n\t\t\t\t\t// Return false to allow normal processing in the caller\n\t\t\t\t\treturn false;\n\t\t\t\t},\n\t\t\t\ttrigger: function (data) {\n\n\t\t\t\t\t// For mutual compressibility with _default, replace `this` access with a local var.\n\t\t\t\t\t// `|| data` is dead code meant only to preserve the variable through minification.\n\t\t\t\t\tvar el = this || data;\n\n\t\t\t\t\t// Force setup before triggering a click\n\t\t\t\t\tif (rcheckableType.test(el.type) &&\n\t\t\t\t\t\tel.click && nodeName(el, \"input\")) {\n\n\t\t\t\t\t\tleverageNative(el, \"click\");\n\t\t\t\t\t}\n\n\t\t\t\t\t// Return non-false to allow normal event-path propagation\n\t\t\t\t\treturn true;\n\t\t\t\t},\n\n\t\t\t\t// For cross-browser consistency, suppress native .click() on links\n\t\t\t\t// Also prevent it if we're currently inside a leveraged native-event stack\n\t\t\t\t_default: function (event) {\n\t\t\t\t\tvar target = event.target;\n\t\t\t\t\treturn rcheckableType.test(target.type) &&\n\t\t\t\t\t\ttarget.click && nodeName(target, \"input\") &&\n\t\t\t\t\t\tdataPriv.get(target, \"click\") ||\n\t\t\t\t\t\tnodeName(target, \"a\");\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tbeforeunload: {\n\t\t\t\tpostDispatch: function (event) {\n\n\t\t\t\t\t// Support: Firefox 20+\n\t\t\t\t\t// Firefox doesn't alert if the returnValue field is not set.\n\t\t\t\t\tif (event.result !== undefined && event.originalEvent) {\n\t\t\t\t\t\tevent.originalEvent.returnValue = event.result;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t// Ensure the presence of an event listener that handles manually-triggered\n\t// synthetic events by interrupting progress until reinvoked in response to\n\t// *native* events that it fires directly, ensuring that state changes have\n\t// already occurred before other listeners are invoked.\n\tfunction leverageNative(el, type, isSetup) {\n\n\t\t// Missing `isSetup` indicates a trigger call, which must force setup through jQuery.event.add\n\t\tif (!isSetup) {\n\t\t\tif (dataPriv.get(el, type) === undefined) {\n\t\t\t\tjQuery.event.add(el, type, returnTrue);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\t// Register the controller as a special universal handler for all event namespaces\n\t\tdataPriv.set(el, type, false);\n\t\tjQuery.event.add(el, type, {\n\t\t\tnamespace: false,\n\t\t\thandler: function (event) {\n\t\t\t\tvar result,\n\t\t\t\t\tsaved = dataPriv.get(this, type);\n\n\t\t\t\tif ((event.isTrigger & 1) && this[type]) {\n\n\t\t\t\t\t// Interrupt processing of the outer synthetic .trigger()ed event\n\t\t\t\t\tif (!saved) {\n\n\t\t\t\t\t\t// Store arguments for use when handling the inner native event\n\t\t\t\t\t\t// There will always be at least one argument (an event object), so this array\n\t\t\t\t\t\t// will not be confused with a leftover capture object.\n\t\t\t\t\t\tsaved = slice.call(arguments);\n\t\t\t\t\t\tdataPriv.set(this, type, saved);\n\n\t\t\t\t\t\t// Trigger the native event and capture its result\n\t\t\t\t\t\tthis[type]();\n\t\t\t\t\t\tresult = dataPriv.get(this, type);\n\t\t\t\t\t\tdataPriv.set(this, type, false);\n\n\t\t\t\t\t\tif (saved !== result) {\n\n\t\t\t\t\t\t\t// Cancel the outer synthetic event\n\t\t\t\t\t\t\tevent.stopImmediatePropagation();\n\t\t\t\t\t\t\tevent.preventDefault();\n\n\t\t\t\t\t\t\treturn result;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// If this is an inner synthetic event for an event with a bubbling surrogate\n\t\t\t\t\t\t// (focus or blur), assume that the surrogate already propagated from triggering\n\t\t\t\t\t\t// the native event and prevent that from happening again here.\n\t\t\t\t\t\t// This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the\n\t\t\t\t\t\t// bubbling surrogate propagates *after* the non-bubbling base), but that seems\n\t\t\t\t\t\t// less bad than duplication.\n\t\t\t\t\t} else if ((jQuery.event.special[type] || {}).delegateType) {\n\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t}\n\n\t\t\t\t\t// If this is a native event triggered above, everything is now in order\n\t\t\t\t\t// Fire an inner synthetic event with the original arguments\n\t\t\t\t} else if (saved) {\n\n\t\t\t\t\t// ...and capture the result\n\t\t\t\t\tdataPriv.set(this, type, jQuery.event.trigger(\n\t\t\t\t\t\tsaved[0],\n\t\t\t\t\t\tsaved.slice(1),\n\t\t\t\t\t\tthis\n\t\t\t\t\t));\n\n\t\t\t\t\t// Abort handling of the native event by all jQuery handlers while allowing\n\t\t\t\t\t// native handlers on the same element to run. On target, this is achieved\n\t\t\t\t\t// by stopping immediate propagation just on the jQuery event. However,\n\t\t\t\t\t// the native event is re-wrapped by a jQuery one on each level of the\n\t\t\t\t\t// propagation so the only way to stop it for jQuery is to stop it for\n\t\t\t\t\t// everyone via native `stopPropagation()`. This is not a problem for\n\t\t\t\t\t// focus/blur which don't bubble, but it does also stop click on checkboxes\n\t\t\t\t\t// and radios. We accept this limitation.\n\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\tevent.isImmediatePropagationStopped = returnTrue;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\tjQuery.removeEvent = function (elem, type, handle) {\n\n\t\t// This \"if\" is needed for plain objects\n\t\tif (elem.removeEventListener) {\n\t\t\telem.removeEventListener(type, handle);\n\t\t}\n\t};\n\n\tjQuery.Event = function (src, props) {\n\n\t\t// Allow instantiation without the 'new' keyword\n\t\tif (!(this instanceof jQuery.Event)) {\n\t\t\treturn new jQuery.Event(src, props);\n\t\t}\n\n\t\t// Event object\n\t\tif (src && src.type) {\n\t\t\tthis.originalEvent = src;\n\t\t\tthis.type = src.type;\n\n\t\t\t// Events bubbling up the document may have been marked as prevented\n\t\t\t// by a handler lower down the tree; reflect the correct value.\n\t\t\tthis.isDefaultPrevented = src.defaultPrevented ||\n\t\t\t\tsrc.defaultPrevented === undefined &&\n\n\t\t\t\t// Support: Android <=2.3 only\n\t\t\t\tsrc.returnValue === false ?\n\t\t\t\treturnTrue :\n\t\t\t\treturnFalse;\n\n\t\t\t// Create target properties\n\t\t\t// Support: Safari <=6 - 7 only\n\t\t\t// Target should not be a text node (trac-504, trac-13143)\n\t\t\tthis.target = (src.target && src.target.nodeType === 3) ?\n\t\t\t\tsrc.target.parentNode :\n\t\t\t\tsrc.target;\n\n\t\t\tthis.currentTarget = src.currentTarget;\n\t\t\tthis.relatedTarget = src.relatedTarget;\n\n\t\t\t// Event type\n\t\t} else {\n\t\t\tthis.type = src;\n\t\t}\n\n\t\t// Put explicitly provided properties onto the event object\n\t\tif (props) {\n\t\t\tjQuery.extend(this, props);\n\t\t}\n\n\t\t// Create a timestamp if incoming event doesn't have one\n\t\tthis.timeStamp = src && src.timeStamp || Date.now();\n\n\t\t// Mark it as fixed\n\t\tthis[jQuery.expando] = true;\n\t};\n\n\t// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding\n\t// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html\n\tjQuery.Event.prototype = {\n\t\tconstructor: jQuery.Event,\n\t\tisDefaultPrevented: returnFalse,\n\t\tisPropagationStopped: returnFalse,\n\t\tisImmediatePropagationStopped: returnFalse,\n\t\tisSimulated: false,\n\n\t\tpreventDefault: function () {\n\t\t\tvar e = this.originalEvent;\n\n\t\t\tthis.isDefaultPrevented = returnTrue;\n\n\t\t\tif (e && !this.isSimulated) {\n\t\t\t\te.preventDefault();\n\t\t\t}\n\t\t},\n\t\tstopPropagation: function () {\n\t\t\tvar e = this.originalEvent;\n\n\t\t\tthis.isPropagationStopped = returnTrue;\n\n\t\t\tif (e && !this.isSimulated) {\n\t\t\t\te.stopPropagation();\n\t\t\t}\n\t\t},\n\t\tstopImmediatePropagation: function () {\n\t\t\tvar e = this.originalEvent;\n\n\t\t\tthis.isImmediatePropagationStopped = returnTrue;\n\n\t\t\tif (e && !this.isSimulated) {\n\t\t\t\te.stopImmediatePropagation();\n\t\t\t}\n\n\t\t\tthis.stopPropagation();\n\t\t}\n\t};\n\n\t// Includes all common event props including KeyEvent and MouseEvent specific props\n\tjQuery.each({\n\t\taltKey: true,\n\t\tbubbles: true,\n\t\tcancelable: true,\n\t\tchangedTouches: true,\n\t\tctrlKey: true,\n\t\tdetail: true,\n\t\teventPhase: true,\n\t\tmetaKey: true,\n\t\tpageX: true,\n\t\tpageY: true,\n\t\tshiftKey: true,\n\t\tview: true,\n\t\t\"char\": true,\n\t\tcode: true,\n\t\tcharCode: true,\n\t\tkey: true,\n\t\tkeyCode: true,\n\t\tbutton: true,\n\t\tbuttons: true,\n\t\tclientX: true,\n\t\tclientY: true,\n\t\toffsetX: true,\n\t\toffsetY: true,\n\t\tpointerId: true,\n\t\tpointerType: true,\n\t\tscreenX: true,\n\t\tscreenY: true,\n\t\ttargetTouches: true,\n\t\ttoElement: true,\n\t\ttouches: true,\n\t\twhich: true\n\t}, jQuery.event.addProp);\n\n\tjQuery.each({ focus: \"focusin\", blur: \"focusout\" }, function (type, delegateType) {\n\n\t\tfunction focusMappedHandler(nativeEvent) {\n\t\t\tif (document.documentMode) {\n\n\t\t\t\t// Support: IE 11+\n\t\t\t\t// Attach a single focusin/focusout handler on the document while someone wants\n\t\t\t\t// focus/blur. This is because the former are synchronous in IE while the latter\n\t\t\t\t// are async. In other browsers, all those handlers are invoked synchronously.\n\n\t\t\t\t// `handle` from private data would already wrap the event, but we need\n\t\t\t\t// to change the `type` here.\n\t\t\t\tvar handle = dataPriv.get(this, \"handle\"),\n\t\t\t\t\tevent = jQuery.event.fix(nativeEvent);\n\t\t\t\tevent.type = nativeEvent.type === \"focusin\" ? \"focus\" : \"blur\";\n\t\t\t\tevent.isSimulated = true;\n\n\t\t\t\t// First, handle focusin/focusout\n\t\t\t\thandle(nativeEvent);\n\n\t\t\t\t// ...then, handle focus/blur\n\t\t\t\t//\n\t\t\t\t// focus/blur don't bubble while focusin/focusout do; simulate the former by only\n\t\t\t\t// invoking the handler at the lower level.\n\t\t\t\tif (event.target === event.currentTarget) {\n\n\t\t\t\t\t// The setup part calls `leverageNative`, which, in turn, calls\n\t\t\t\t\t// `jQuery.event.add`, so event handle will already have been set\n\t\t\t\t\t// by this point.\n\t\t\t\t\thandle(event);\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\t// For non-IE browsers, attach a single capturing handler on the document\n\t\t\t\t// while someone wants focusin/focusout.\n\t\t\t\tjQuery.event.simulate(delegateType, nativeEvent.target,\n\t\t\t\t\tjQuery.event.fix(nativeEvent));\n\t\t\t}\n\t\t}\n\n\t\tjQuery.event.special[type] = {\n\n\t\t\t// Utilize native event if possible so blur/focus sequence is correct\n\t\t\tsetup: function () {\n\n\t\t\t\tvar attaches;\n\n\t\t\t\t// Claim the first handler\n\t\t\t\t// dataPriv.set( this, \"focus\", ... )\n\t\t\t\t// dataPriv.set( this, \"blur\", ... )\n\t\t\t\tleverageNative(this, type, true);\n\n\t\t\t\tif (document.documentMode) {\n\n\t\t\t\t\t// Support: IE 9 - 11+\n\t\t\t\t\t// We use the same native handler for focusin & focus (and focusout & blur)\n\t\t\t\t\t// so we need to coordinate setup & teardown parts between those events.\n\t\t\t\t\t// Use `delegateType` as the key as `type` is already used by `leverageNative`.\n\t\t\t\t\tattaches = dataPriv.get(this, delegateType);\n\t\t\t\t\tif (!attaches) {\n\t\t\t\t\t\tthis.addEventListener(delegateType, focusMappedHandler);\n\t\t\t\t\t}\n\t\t\t\t\tdataPriv.set(this, delegateType, (attaches || 0) + 1);\n\t\t\t\t} else {\n\n\t\t\t\t\t// Return false to allow normal processing in the caller\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\t\t\ttrigger: function () {\n\n\t\t\t\t// Force setup before trigger\n\t\t\t\tleverageNative(this, type);\n\n\t\t\t\t// Return non-false to allow normal event-path propagation\n\t\t\t\treturn true;\n\t\t\t},\n\n\t\t\tteardown: function () {\n\t\t\t\tvar attaches;\n\n\t\t\t\tif (document.documentMode) {\n\t\t\t\t\tattaches = dataPriv.get(this, delegateType) - 1;\n\t\t\t\t\tif (!attaches) {\n\t\t\t\t\t\tthis.removeEventListener(delegateType, focusMappedHandler);\n\t\t\t\t\t\tdataPriv.remove(this, delegateType);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdataPriv.set(this, delegateType, attaches);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\n\t\t\t\t\t// Return false to indicate standard teardown should be applied\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// Suppress native focus or blur if we're currently inside\n\t\t\t// a leveraged native-event stack\n\t\t\t_default: function (event) {\n\t\t\t\treturn dataPriv.get(event.target, type);\n\t\t\t},\n\n\t\t\tdelegateType: delegateType\n\t\t};\n\n\t\t// Support: Firefox <=44\n\t\t// Firefox doesn't have focus(in | out) events\n\t\t// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787\n\t\t//\n\t\t// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1\n\t\t// focus(in | out) events fire after focus & blur events,\n\t\t// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order\n\t\t// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857\n\t\t//\n\t\t// Support: IE 9 - 11+\n\t\t// To preserve relative focusin/focus & focusout/blur event order guaranteed on the 3.x branch,\n\t\t// attach a single handler for both events in IE.\n\t\tjQuery.event.special[delegateType] = {\n\t\t\tsetup: function () {\n\n\t\t\t\t// Handle: regular nodes (via `this.ownerDocument`), window\n\t\t\t\t// (via `this.document`) & document (via `this`).\n\t\t\t\tvar doc = this.ownerDocument || this.document || this,\n\t\t\t\t\tdataHolder = document.documentMode ? this : doc,\n\t\t\t\t\tattaches = dataPriv.get(dataHolder, delegateType);\n\n\t\t\t\t// Support: IE 9 - 11+\n\t\t\t\t// We use the same native handler for focusin & focus (and focusout & blur)\n\t\t\t\t// so we need to coordinate setup & teardown parts between those events.\n\t\t\t\t// Use `delegateType` as the key as `type` is already used by `leverageNative`.\n\t\t\t\tif (!attaches) {\n\t\t\t\t\tif (document.documentMode) {\n\t\t\t\t\t\tthis.addEventListener(delegateType, focusMappedHandler);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdoc.addEventListener(type, focusMappedHandler, true);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tdataPriv.set(dataHolder, delegateType, (attaches || 0) + 1);\n\t\t\t},\n\t\t\tteardown: function () {\n\t\t\t\tvar doc = this.ownerDocument || this.document || this,\n\t\t\t\t\tdataHolder = document.documentMode ? this : doc,\n\t\t\t\t\tattaches = dataPriv.get(dataHolder, delegateType) - 1;\n\n\t\t\t\tif (!attaches) {\n\t\t\t\t\tif (document.documentMode) {\n\t\t\t\t\t\tthis.removeEventListener(delegateType, focusMappedHandler);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdoc.removeEventListener(type, focusMappedHandler, true);\n\t\t\t\t\t}\n\t\t\t\t\tdataPriv.remove(dataHolder, delegateType);\n\t\t\t\t} else {\n\t\t\t\t\tdataPriv.set(dataHolder, delegateType, attaches);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t});\n\n\t// Create mouseenter/leave events using mouseover/out and event-time checks\n\t// so that event delegation works in jQuery.\n\t// Do the same for pointerenter/pointerleave and pointerover/pointerout\n\t//\n\t// Support: Safari 7 only\n\t// Safari sends mouseenter too often; see:\n\t// https://bugs.chromium.org/p/chromium/issues/detail?id=470258\n\t// for the description of the bug (it existed in older Chrome versions as well).\n\tjQuery.each({\n\t\tmouseenter: \"mouseover\",\n\t\tmouseleave: \"mouseout\",\n\t\tpointerenter: \"pointerover\",\n\t\tpointerleave: \"pointerout\"\n\t}, function (orig, fix) {\n\t\tjQuery.event.special[orig] = {\n\t\t\tdelegateType: fix,\n\t\t\tbindType: fix,\n\n\t\t\thandle: function (event) {\n\t\t\t\tvar ret,\n\t\t\t\t\ttarget = this,\n\t\t\t\t\trelated = event.relatedTarget,\n\t\t\t\t\thandleObj = event.handleObj;\n\n\t\t\t\t// For mouseenter/leave call the handler if related is outside the target.\n\t\t\t\t// NB: No relatedTarget if the mouse left/entered the browser window\n\t\t\t\tif (!related || (related !== target && !jQuery.contains(target, related))) {\n\t\t\t\t\tevent.type = handleObj.origType;\n\t\t\t\t\tret = handleObj.handler.apply(this, arguments);\n\t\t\t\t\tevent.type = fix;\n\t\t\t\t}\n\t\t\t\treturn ret;\n\t\t\t}\n\t\t};\n\t});\n\n\tjQuery.fn.extend({\n\n\t\ton: function (types, selector, data, fn) {\n\t\t\treturn on(this, types, selector, data, fn);\n\t\t},\n\t\tone: function (types, selector, data, fn) {\n\t\t\treturn on(this, types, selector, data, fn, 1);\n\t\t},\n\t\toff: function (types, selector, fn) {\n\t\t\tvar handleObj, type;\n\t\t\tif (types && types.preventDefault && types.handleObj) {\n\n\t\t\t\t// ( event )  dispatched jQuery.Event\n\t\t\t\thandleObj = types.handleObj;\n\t\t\t\tjQuery(types.delegateTarget).off(\n\t\t\t\t\thandleObj.namespace ?\n\t\t\t\t\t\thandleObj.origType + \".\" + handleObj.namespace :\n\t\t\t\t\t\thandleObj.origType,\n\t\t\t\t\thandleObj.selector,\n\t\t\t\t\thandleObj.handler\n\t\t\t\t);\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\tif (typeof types === \"object\") {\n\n\t\t\t\t// ( types-object [, selector] )\n\t\t\t\tfor (type in types) {\n\t\t\t\t\tthis.off(type, selector, types[type]);\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\tif (selector === false || typeof selector === \"function\") {\n\n\t\t\t\t// ( types [, fn] )\n\t\t\t\tfn = selector;\n\t\t\t\tselector = undefined;\n\t\t\t}\n\t\t\tif (fn === false) {\n\t\t\t\tfn = returnFalse;\n\t\t\t}\n\t\t\treturn this.each(function () {\n\t\t\t\tjQuery.event.remove(this, types, fn, selector);\n\t\t\t});\n\t\t}\n\t});\n\n\n\tvar\n\n\t\t// Support: IE <=10 - 11, Edge 12 - 13 only\n\t\t// In IE/Edge using regex groups here causes severe slowdowns.\n\t\t// See https://connect.microsoft.com/IE/feedback/details/1736512/\n\t\trnoInnerhtml = /<script|<style|<link/i,\n\n\t\t// checked=\"checked\" or checked\n\t\trchecked = /checked\\s*(?:[^=]|=\\s*.checked.)/i,\n\n\t\trcleanScript = /^\\s*<!\\[CDATA\\[|\\]\\]>\\s*$/g;\n\n\t// Prefer a tbody over its parent table for containing new rows\n\tfunction manipulationTarget(elem, content) {\n\t\tif (nodeName(elem, \"table\") &&\n\t\t\tnodeName(content.nodeType !== 11 ? content : content.firstChild, \"tr\")) {\n\n\t\t\treturn jQuery(elem).children(\"tbody\")[0] || elem;\n\t\t}\n\n\t\treturn elem;\n\t}\n\n\t// Replace/restore the type attribute of script elements for safe DOM manipulation\n\tfunction disableScript(elem) {\n\t\telem.type = (elem.getAttribute(\"type\") !== null) + \"/\" + elem.type;\n\t\treturn elem;\n\t}\n\tfunction restoreScript(elem) {\n\t\tif ((elem.type || \"\").slice(0, 5) === \"true/\") {\n\t\t\telem.type = elem.type.slice(5);\n\t\t} else {\n\t\t\telem.removeAttribute(\"type\");\n\t\t}\n\n\t\treturn elem;\n\t}\n\n\tfunction cloneCopyEvent(src, dest) {\n\t\tvar i, l, type, pdataOld, udataOld, udataCur, events;\n\n\t\tif (dest.nodeType !== 1) {\n\t\t\treturn;\n\t\t}\n\n\t\t// 1. Copy private data: events, handlers, etc.\n\t\tif (dataPriv.hasData(src)) {\n\t\t\tpdataOld = dataPriv.get(src);\n\t\t\tevents = pdataOld.events;\n\n\t\t\tif (events) {\n\t\t\t\tdataPriv.remove(dest, \"handle events\");\n\n\t\t\t\tfor (type in events) {\n\t\t\t\t\tfor (i = 0, l = events[type].length; i < l; i++) {\n\t\t\t\t\t\tjQuery.event.add(dest, type, events[type][i]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// 2. Copy user data\n\t\tif (dataUser.hasData(src)) {\n\t\t\tudataOld = dataUser.access(src);\n\t\t\tudataCur = jQuery.extend({}, udataOld);\n\n\t\t\tdataUser.set(dest, udataCur);\n\t\t}\n\t}\n\n\t// Fix IE bugs, see support tests\n\tfunction fixInput(src, dest) {\n\t\tvar nodeName = dest.nodeName.toLowerCase();\n\n\t\t// Fails to persist the checked state of a cloned checkbox or radio button.\n\t\tif (nodeName === \"input\" && rcheckableType.test(src.type)) {\n\t\t\tdest.checked = src.checked;\n\n\t\t\t// Fails to return the selected option to the default selected state when cloning options\n\t\t} else if (nodeName === \"input\" || nodeName === \"textarea\") {\n\t\t\tdest.defaultValue = src.defaultValue;\n\t\t}\n\t}\n\n\tfunction domManip(collection, args, callback, ignored) {\n\n\t\t// Flatten any nested arrays\n\t\targs = flat(args);\n\n\t\tvar fragment, first, scripts, hasScripts, node, doc,\n\t\t\ti = 0,\n\t\t\tl = collection.length,\n\t\t\tiNoClone = l - 1,\n\t\t\tvalue = args[0],\n\t\t\tvalueIsFunction = isFunction(value);\n\n\t\t// We can't cloneNode fragments that contain checked, in WebKit\n\t\tif (valueIsFunction ||\n\t\t\t(l > 1 && typeof value === \"string\" &&\n\t\t\t\t!support.checkClone && rchecked.test(value))) {\n\t\t\treturn collection.each(function (index) {\n\t\t\t\tvar self = collection.eq(index);\n\t\t\t\tif (valueIsFunction) {\n\t\t\t\t\targs[0] = value.call(this, index, self.html());\n\t\t\t\t}\n\t\t\t\tdomManip(self, args, callback, ignored);\n\t\t\t});\n\t\t}\n\n\t\tif (l) {\n\t\t\tfragment = buildFragment(args, collection[0].ownerDocument, false, collection, ignored);\n\t\t\tfirst = fragment.firstChild;\n\n\t\t\tif (fragment.childNodes.length === 1) {\n\t\t\t\tfragment = first;\n\t\t\t}\n\n\t\t\t// Require either new content or an interest in ignored elements to invoke the callback\n\t\t\tif (first || ignored) {\n\t\t\t\tscripts = jQuery.map(getAll(fragment, \"script\"), disableScript);\n\t\t\t\thasScripts = scripts.length;\n\n\t\t\t\t// Use the original fragment for the last item\n\t\t\t\t// instead of the first because it can end up\n\t\t\t\t// being emptied incorrectly in certain situations (trac-8070).\n\t\t\t\tfor (; i < l; i++) {\n\t\t\t\t\tnode = fragment;\n\n\t\t\t\t\tif (i !== iNoClone) {\n\t\t\t\t\t\tnode = jQuery.clone(node, true, true);\n\n\t\t\t\t\t\t// Keep references to cloned scripts for later restoration\n\t\t\t\t\t\tif (hasScripts) {\n\n\t\t\t\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\t\t\t\tjQuery.merge(scripts, getAll(node, \"script\"));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tcallback.call(collection[i], node, i);\n\t\t\t\t}\n\n\t\t\t\tif (hasScripts) {\n\t\t\t\t\tdoc = scripts[scripts.length - 1].ownerDocument;\n\n\t\t\t\t\t// Reenable scripts\n\t\t\t\t\tjQuery.map(scripts, restoreScript);\n\n\t\t\t\t\t// Evaluate executable scripts on first document insertion\n\t\t\t\t\tfor (i = 0; i < hasScripts; i++) {\n\t\t\t\t\t\tnode = scripts[i];\n\t\t\t\t\t\tif (rscriptType.test(node.type || \"\") &&\n\t\t\t\t\t\t\t!dataPriv.access(node, \"globalEval\") &&\n\t\t\t\t\t\t\tjQuery.contains(doc, node)) {\n\n\t\t\t\t\t\t\tif (node.src && (node.type || \"\").toLowerCase() !== \"module\") {\n\n\t\t\t\t\t\t\t\t// Optional AJAX dependency, but won't run scripts if not present\n\t\t\t\t\t\t\t\tif (jQuery._evalUrl && !node.noModule) {\n\t\t\t\t\t\t\t\t\tjQuery._evalUrl(node.src, {\n\t\t\t\t\t\t\t\t\t\tnonce: node.nonce || node.getAttribute(\"nonce\")\n\t\t\t\t\t\t\t\t\t}, doc);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t// Unwrap a CDATA section containing script contents. This shouldn't be\n\t\t\t\t\t\t\t\t// needed as in XML documents they're already not visible when\n\t\t\t\t\t\t\t\t// inspecting element contents and in HTML documents they have no\n\t\t\t\t\t\t\t\t// meaning but we're preserving that logic for backwards compatibility.\n\t\t\t\t\t\t\t\t// This will be removed completely in 4.0. See gh-4904.\n\t\t\t\t\t\t\t\tDOMEval(node.textContent.replace(rcleanScript, \"\"), node, doc);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn collection;\n\t}\n\n\tfunction remove(elem, selector, keepData) {\n\t\tvar node,\n\t\t\tnodes = selector ? jQuery.filter(selector, elem) : elem,\n\t\t\ti = 0;\n\n\t\tfor (; (node = nodes[i]) != null; i++) {\n\t\t\tif (!keepData && node.nodeType === 1) {\n\t\t\t\tjQuery.cleanData(getAll(node));\n\t\t\t}\n\n\t\t\tif (node.parentNode) {\n\t\t\t\tif (keepData && isAttached(node)) {\n\t\t\t\t\tsetGlobalEval(getAll(node, \"script\"));\n\t\t\t\t}\n\t\t\t\tnode.parentNode.removeChild(node);\n\t\t\t}\n\t\t}\n\n\t\treturn elem;\n\t}\n\n\tjQuery.extend({\n\t\thtmlPrefilter: function (html) {\n\t\t\treturn html;\n\t\t},\n\n\t\tclone: function (elem, dataAndEvents, deepDataAndEvents) {\n\t\t\tvar i, l, srcElements, destElements,\n\t\t\t\tclone = elem.cloneNode(true),\n\t\t\t\tinPage = isAttached(elem);\n\n\t\t\t// Fix IE cloning issues\n\t\t\tif (!support.noCloneChecked && (elem.nodeType === 1 || elem.nodeType === 11) &&\n\t\t\t\t!jQuery.isXMLDoc(elem)) {\n\n\t\t\t\t// We eschew jQuery#find here for performance reasons:\n\t\t\t\t// https://jsperf.com/getall-vs-sizzle/2\n\t\t\t\tdestElements = getAll(clone);\n\t\t\t\tsrcElements = getAll(elem);\n\n\t\t\t\tfor (i = 0, l = srcElements.length; i < l; i++) {\n\t\t\t\t\tfixInput(srcElements[i], destElements[i]);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Copy the events from the original to the clone\n\t\t\tif (dataAndEvents) {\n\t\t\t\tif (deepDataAndEvents) {\n\t\t\t\t\tsrcElements = srcElements || getAll(elem);\n\t\t\t\t\tdestElements = destElements || getAll(clone);\n\n\t\t\t\t\tfor (i = 0, l = srcElements.length; i < l; i++) {\n\t\t\t\t\t\tcloneCopyEvent(srcElements[i], destElements[i]);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tcloneCopyEvent(elem, clone);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Preserve script evaluation history\n\t\t\tdestElements = getAll(clone, \"script\");\n\t\t\tif (destElements.length > 0) {\n\t\t\t\tsetGlobalEval(destElements, !inPage && getAll(elem, \"script\"));\n\t\t\t}\n\n\t\t\t// Return the cloned set\n\t\t\treturn clone;\n\t\t},\n\n\t\tcleanData: function (elems) {\n\t\t\tvar data, elem, type,\n\t\t\t\tspecial = jQuery.event.special,\n\t\t\t\ti = 0;\n\n\t\t\tfor (; (elem = elems[i]) !== undefined; i++) {\n\t\t\t\tif (acceptData(elem)) {\n\t\t\t\t\tif ((data = elem[dataPriv.expando])) {\n\t\t\t\t\t\tif (data.events) {\n\t\t\t\t\t\t\tfor (type in data.events) {\n\t\t\t\t\t\t\t\tif (special[type]) {\n\t\t\t\t\t\t\t\t\tjQuery.event.remove(elem, type);\n\n\t\t\t\t\t\t\t\t\t// This is a shortcut to avoid jQuery.event.remove's overhead\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tjQuery.removeEvent(elem, type, data.handle);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\t\telem[dataPriv.expando] = undefined;\n\t\t\t\t\t}\n\t\t\t\t\tif (elem[dataUser.expando]) {\n\n\t\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\t\telem[dataUser.expando] = undefined;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\n\tjQuery.fn.extend({\n\t\tdetach: function (selector) {\n\t\t\treturn remove(this, selector, true);\n\t\t},\n\n\t\tremove: function (selector) {\n\t\t\treturn remove(this, selector);\n\t\t},\n\n\t\ttext: function (value) {\n\t\t\treturn access(this, function (value) {\n\t\t\t\treturn value === undefined ?\n\t\t\t\t\tjQuery.text(this) :\n\t\t\t\t\tthis.empty().each(function () {\n\t\t\t\t\t\tif (this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9) {\n\t\t\t\t\t\t\tthis.textContent = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t}, null, value, arguments.length);\n\t\t},\n\n\t\tappend: function () {\n\t\t\treturn domManip(this, arguments, function (elem) {\n\t\t\t\tif (this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9) {\n\t\t\t\t\tvar target = manipulationTarget(this, elem);\n\t\t\t\t\ttarget.appendChild(elem);\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\tprepend: function () {\n\t\t\treturn domManip(this, arguments, function (elem) {\n\t\t\t\tif (this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9) {\n\t\t\t\t\tvar target = manipulationTarget(this, elem);\n\t\t\t\t\ttarget.insertBefore(elem, target.firstChild);\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\tbefore: function () {\n\t\t\treturn domManip(this, arguments, function (elem) {\n\t\t\t\tif (this.parentNode) {\n\t\t\t\t\tthis.parentNode.insertBefore(elem, this);\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\tafter: function () {\n\t\t\treturn domManip(this, arguments, function (elem) {\n\t\t\t\tif (this.parentNode) {\n\t\t\t\t\tthis.parentNode.insertBefore(elem, this.nextSibling);\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\tempty: function () {\n\t\t\tvar elem,\n\t\t\t\ti = 0;\n\n\t\t\tfor (; (elem = this[i]) != null; i++) {\n\t\t\t\tif (elem.nodeType === 1) {\n\n\t\t\t\t\t// Prevent memory leaks\n\t\t\t\t\tjQuery.cleanData(getAll(elem, false));\n\n\t\t\t\t\t// Remove any remaining nodes\n\t\t\t\t\telem.textContent = \"\";\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn this;\n\t\t},\n\n\t\tclone: function (dataAndEvents, deepDataAndEvents) {\n\t\t\tdataAndEvents = dataAndEvents == null ? false : dataAndEvents;\n\t\t\tdeepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;\n\n\t\t\treturn this.map(function () {\n\t\t\t\treturn jQuery.clone(this, dataAndEvents, deepDataAndEvents);\n\t\t\t});\n\t\t},\n\n\t\thtml: function (value) {\n\t\t\treturn access(this, function (value) {\n\t\t\t\tvar elem = this[0] || {},\n\t\t\t\t\ti = 0,\n\t\t\t\t\tl = this.length;\n\n\t\t\t\tif (value === undefined && elem.nodeType === 1) {\n\t\t\t\t\treturn elem.innerHTML;\n\t\t\t\t}\n\n\t\t\t\t// See if we can take a shortcut and just use innerHTML\n\t\t\t\tif (typeof value === \"string\" && !rnoInnerhtml.test(value) &&\n\t\t\t\t\t!wrapMap[(rtagName.exec(value) || [\"\", \"\"])[1].toLowerCase()]) {\n\n\t\t\t\t\tvalue = jQuery.htmlPrefilter(value);\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tfor (; i < l; i++) {\n\t\t\t\t\t\t\telem = this[i] || {};\n\n\t\t\t\t\t\t\t// Remove element nodes and prevent memory leaks\n\t\t\t\t\t\t\tif (elem.nodeType === 1) {\n\t\t\t\t\t\t\t\tjQuery.cleanData(getAll(elem, false));\n\t\t\t\t\t\t\t\telem.innerHTML = value;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\telem = 0;\n\n\t\t\t\t\t\t// If using innerHTML throws an exception, use the fallback method\n\t\t\t\t\t} catch (e) { }\n\t\t\t\t}\n\n\t\t\t\tif (elem) {\n\t\t\t\t\tthis.empty().append(value);\n\t\t\t\t}\n\t\t\t}, null, value, arguments.length);\n\t\t},\n\n\t\treplaceWith: function () {\n\t\t\tvar ignored = [];\n\n\t\t\t// Make the changes, replacing each non-ignored context element with the new content\n\t\t\treturn domManip(this, arguments, function (elem) {\n\t\t\t\tvar parent = this.parentNode;\n\n\t\t\t\tif (jQuery.inArray(this, ignored) < 0) {\n\t\t\t\t\tjQuery.cleanData(getAll(this));\n\t\t\t\t\tif (parent) {\n\t\t\t\t\t\tparent.replaceChild(elem, this);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Force callback invocation\n\t\t\t}, ignored);\n\t\t}\n\t});\n\n\tjQuery.each({\n\t\tappendTo: \"append\",\n\t\tprependTo: \"prepend\",\n\t\tinsertBefore: \"before\",\n\t\tinsertAfter: \"after\",\n\t\treplaceAll: \"replaceWith\"\n\t}, function (name, original) {\n\t\tjQuery.fn[name] = function (selector) {\n\t\t\tvar elems,\n\t\t\t\tret = [],\n\t\t\t\tinsert = jQuery(selector),\n\t\t\t\tlast = insert.length - 1,\n\t\t\t\ti = 0;\n\n\t\t\tfor (; i <= last; i++) {\n\t\t\t\telems = i === last ? this : this.clone(true);\n\t\t\t\tjQuery(insert[i])[original](elems);\n\n\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t// .get() because push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\tpush.apply(ret, elems.get());\n\t\t\t}\n\n\t\t\treturn this.pushStack(ret);\n\t\t};\n\t});\n\tvar rnumnonpx = new RegExp(\"^(\" + pnum + \")(?!px)[a-z%]+$\", \"i\");\n\n\tvar rcustomProp = /^--/;\n\n\n\tvar getStyles = function (elem) {\n\n\t\t// Support: IE <=11 only, Firefox <=30 (trac-15098, trac-14150)\n\t\t// IE throws on elements created in popups\n\t\t// FF meanwhile throws on frame elements through \"defaultView.getComputedStyle\"\n\t\tvar view = elem.ownerDocument.defaultView;\n\n\t\tif (!view || !view.opener) {\n\t\t\tview = window;\n\t\t}\n\n\t\treturn view.getComputedStyle(elem);\n\t};\n\n\tvar swap = function (elem, options, callback) {\n\t\tvar ret, name,\n\t\t\told = {};\n\n\t\t// Remember the old values, and insert the new ones\n\t\tfor (name in options) {\n\t\t\told[name] = elem.style[name];\n\t\t\telem.style[name] = options[name];\n\t\t}\n\n\t\tret = callback.call(elem);\n\n\t\t// Revert the old values\n\t\tfor (name in options) {\n\t\t\telem.style[name] = old[name];\n\t\t}\n\n\t\treturn ret;\n\t};\n\n\n\tvar rboxStyle = new RegExp(cssExpand.join(\"|\"), \"i\");\n\n\n\n\t(function () {\n\n\t\t// Executing both pixelPosition & boxSizingReliable tests require only one layout\n\t\t// so they're executed at the same time to save the second computation.\n\t\tfunction computeStyleTests() {\n\n\t\t\t// This is a singleton, we need to execute it only once\n\t\t\tif (!div) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tcontainer.style.cssText = \"position:absolute;left:-11111px;width:60px;\" +\n\t\t\t\t\"margin-top:1px;padding:0;border:0\";\n\t\t\tdiv.style.cssText =\n\t\t\t\t\"position:relative;display:block;box-sizing:border-box;overflow:scroll;\" +\n\t\t\t\t\"margin:auto;border:1px;padding:1px;\" +\n\t\t\t\t\"width:60%;top:1%\";\n\t\t\tdocumentElement.appendChild(container).appendChild(div);\n\n\t\t\tvar divStyle = window.getComputedStyle(div);\n\t\t\tpixelPositionVal = divStyle.top !== \"1%\";\n\n\t\t\t// Support: Android 4.0 - 4.3 only, Firefox <=3 - 44\n\t\t\treliableMarginLeftVal = roundPixelMeasures(divStyle.marginLeft) === 12;\n\n\t\t\t// Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3\n\t\t\t// Some styles come back with percentage values, even though they shouldn't\n\t\t\tdiv.style.right = \"60%\";\n\t\t\tpixelBoxStylesVal = roundPixelMeasures(divStyle.right) === 36;\n\n\t\t\t// Support: IE 9 - 11 only\n\t\t\t// Detect misreporting of content dimensions for box-sizing:border-box elements\n\t\t\tboxSizingReliableVal = roundPixelMeasures(divStyle.width) === 36;\n\n\t\t\t// Support: IE 9 only\n\t\t\t// Detect overflow:scroll screwiness (gh-3699)\n\t\t\t// Support: Chrome <=64\n\t\t\t// Don't get tricked when zoom affects offsetWidth (gh-4029)\n\t\t\tdiv.style.position = \"absolute\";\n\t\t\tscrollboxSizeVal = roundPixelMeasures(div.offsetWidth / 3) === 12;\n\n\t\t\tdocumentElement.removeChild(container);\n\n\t\t\t// Nullify the div so it wouldn't be stored in the memory and\n\t\t\t// it will also be a sign that checks already performed\n\t\t\tdiv = null;\n\t\t}\n\n\t\tfunction roundPixelMeasures(measure) {\n\t\t\treturn Math.round(parseFloat(measure));\n\t\t}\n\n\t\tvar pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal,\n\t\t\treliableTrDimensionsVal, reliableMarginLeftVal,\n\t\t\tcontainer = document.createElement(\"div\"),\n\t\t\tdiv = document.createElement(\"div\");\n\n\t\t// Finish early in limited (non-browser) environments\n\t\tif (!div.style) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Support: IE <=9 - 11 only\n\t\t// Style of cloned element affects source element cloned (trac-8908)\n\t\tdiv.style.backgroundClip = \"content-box\";\n\t\tdiv.cloneNode(true).style.backgroundClip = \"\";\n\t\tsupport.clearCloneStyle = div.style.backgroundClip === \"content-box\";\n\n\t\tjQuery.extend(support, {\n\t\t\tboxSizingReliable: function () {\n\t\t\t\tcomputeStyleTests();\n\t\t\t\treturn boxSizingReliableVal;\n\t\t\t},\n\t\t\tpixelBoxStyles: function () {\n\t\t\t\tcomputeStyleTests();\n\t\t\t\treturn pixelBoxStylesVal;\n\t\t\t},\n\t\t\tpixelPosition: function () {\n\t\t\t\tcomputeStyleTests();\n\t\t\t\treturn pixelPositionVal;\n\t\t\t},\n\t\t\treliableMarginLeft: function () {\n\t\t\t\tcomputeStyleTests();\n\t\t\t\treturn reliableMarginLeftVal;\n\t\t\t},\n\t\t\tscrollboxSize: function () {\n\t\t\t\tcomputeStyleTests();\n\t\t\t\treturn scrollboxSizeVal;\n\t\t\t},\n\n\t\t\t// Support: IE 9 - 11+, Edge 15 - 18+\n\t\t\t// IE/Edge misreport `getComputedStyle` of table rows with width/height\n\t\t\t// set in CSS while `offset*` properties report correct values.\n\t\t\t// Behavior in IE 9 is more subtle than in newer versions & it passes\n\t\t\t// some versions of this test; make sure not to make it pass there!\n\t\t\t//\n\t\t\t// Support: Firefox 70+\n\t\t\t// Only Firefox includes border widths\n\t\t\t// in computed dimensions. (gh-4529)\n\t\t\treliableTrDimensions: function () {\n\t\t\t\tvar table, tr, trChild, trStyle;\n\t\t\t\tif (reliableTrDimensionsVal == null) {\n\t\t\t\t\ttable = document.createElement(\"table\");\n\t\t\t\t\ttr = document.createElement(\"tr\");\n\t\t\t\t\ttrChild = document.createElement(\"div\");\n\n\t\t\t\t\ttable.style.cssText = \"position:absolute;left:-11111px;border-collapse:separate\";\n\t\t\t\t\ttr.style.cssText = \"border:1px solid\";\n\n\t\t\t\t\t// Support: Chrome 86+\n\t\t\t\t\t// Height set through cssText does not get applied.\n\t\t\t\t\t// Computed height then comes back as 0.\n\t\t\t\t\ttr.style.height = \"1px\";\n\t\t\t\t\ttrChild.style.height = \"9px\";\n\n\t\t\t\t\t// Support: Android 8 Chrome 86+\n\t\t\t\t\t// In our bodyBackground.html iframe,\n\t\t\t\t\t// display for all div elements is set to \"inline\",\n\t\t\t\t\t// which causes a problem only in Android 8 Chrome 86.\n\t\t\t\t\t// Ensuring the div is display: block\n\t\t\t\t\t// gets around this issue.\n\t\t\t\t\ttrChild.style.display = \"block\";\n\n\t\t\t\t\tdocumentElement\n\t\t\t\t\t\t.appendChild(table)\n\t\t\t\t\t\t.appendChild(tr)\n\t\t\t\t\t\t.appendChild(trChild);\n\n\t\t\t\t\ttrStyle = window.getComputedStyle(tr);\n\t\t\t\t\treliableTrDimensionsVal = (parseInt(trStyle.height, 10) +\n\t\t\t\t\t\tparseInt(trStyle.borderTopWidth, 10) +\n\t\t\t\t\t\tparseInt(trStyle.borderBottomWidth, 10)) === tr.offsetHeight;\n\n\t\t\t\t\tdocumentElement.removeChild(table);\n\t\t\t\t}\n\t\t\t\treturn reliableTrDimensionsVal;\n\t\t\t}\n\t\t});\n\t})();\n\n\n\tfunction curCSS(elem, name, computed) {\n\t\tvar width, minWidth, maxWidth, ret,\n\t\t\tisCustomProp = rcustomProp.test(name),\n\n\t\t\t// Support: Firefox 51+\n\t\t\t// Retrieving style before computed somehow\n\t\t\t// fixes an issue with getting wrong values\n\t\t\t// on detached elements\n\t\t\tstyle = elem.style;\n\n\t\tcomputed = computed || getStyles(elem);\n\n\t\t// getPropertyValue is needed for:\n\t\t//   .css('filter') (IE 9 only, trac-12537)\n\t\t//   .css('--customProperty) (gh-3144)\n\t\tif (computed) {\n\n\t\t\t// Support: IE <=9 - 11+\n\t\t\t// IE only supports `\"float\"` in `getPropertyValue`; in computed styles\n\t\t\t// it's only available as `\"cssFloat\"`. We no longer modify properties\n\t\t\t// sent to `.css()` apart from camelCasing, so we need to check both.\n\t\t\t// Normally, this would create difference in behavior: if\n\t\t\t// `getPropertyValue` returns an empty string, the value returned\n\t\t\t// by `.css()` would be `undefined`. This is usually the case for\n\t\t\t// disconnected elements. However, in IE even disconnected elements\n\t\t\t// with no styles return `\"none\"` for `getPropertyValue( \"float\" )`\n\t\t\tret = computed.getPropertyValue(name) || computed[name];\n\n\t\t\tif (isCustomProp && ret) {\n\n\t\t\t\t// Support: Firefox 105+, Chrome <=105+\n\t\t\t\t// Spec requires trimming whitespace for custom properties (gh-4926).\n\t\t\t\t// Firefox only trims leading whitespace. Chrome just collapses\n\t\t\t\t// both leading & trailing whitespace to a single space.\n\t\t\t\t//\n\t\t\t\t// Fall back to `undefined` if empty string returned.\n\t\t\t\t// This collapses a missing definition with property defined\n\t\t\t\t// and set to an empty string but there's no standard API\n\t\t\t\t// allowing us to differentiate them without a performance penalty\n\t\t\t\t// and returning `undefined` aligns with older jQuery.\n\t\t\t\t//\n\t\t\t\t// rtrimCSS treats U+000D CARRIAGE RETURN and U+000C FORM FEED\n\t\t\t\t// as whitespace while CSS does not, but this is not a problem\n\t\t\t\t// because CSS preprocessing replaces them with U+000A LINE FEED\n\t\t\t\t// (which *is* CSS whitespace)\n\t\t\t\t// https://www.w3.org/TR/css-syntax-3/#input-preprocessing\n\t\t\t\tret = ret.replace(rtrimCSS, \"$1\") || undefined;\n\t\t\t}\n\n\t\t\tif (ret === \"\" && !isAttached(elem)) {\n\t\t\t\tret = jQuery.style(elem, name);\n\t\t\t}\n\n\t\t\t// A tribute to the \"awesome hack by Dean Edwards\"\n\t\t\t// Android Browser returns percentage for some values,\n\t\t\t// but width seems to be reliably pixels.\n\t\t\t// This is against the CSSOM draft spec:\n\t\t\t// https://drafts.csswg.org/cssom/#resolved-values\n\t\t\tif (!support.pixelBoxStyles() && rnumnonpx.test(ret) && rboxStyle.test(name)) {\n\n\t\t\t\t// Remember the original values\n\t\t\t\twidth = style.width;\n\t\t\t\tminWidth = style.minWidth;\n\t\t\t\tmaxWidth = style.maxWidth;\n\n\t\t\t\t// Put in the new values to get a computed value out\n\t\t\t\tstyle.minWidth = style.maxWidth = style.width = ret;\n\t\t\t\tret = computed.width;\n\n\t\t\t\t// Revert the changed values\n\t\t\t\tstyle.width = width;\n\t\t\t\tstyle.minWidth = minWidth;\n\t\t\t\tstyle.maxWidth = maxWidth;\n\t\t\t}\n\t\t}\n\n\t\treturn ret !== undefined ?\n\n\t\t\t// Support: IE <=9 - 11 only\n\t\t\t// IE returns zIndex value as an integer.\n\t\t\tret + \"\" :\n\t\t\tret;\n\t}\n\n\n\tfunction addGetHookIf(conditionFn, hookFn) {\n\n\t\t// Define the hook, we'll check on the first run if it's really needed.\n\t\treturn {\n\t\t\tget: function () {\n\t\t\t\tif (conditionFn()) {\n\n\t\t\t\t\t// Hook not needed (or it's not possible to use it due\n\t\t\t\t\t// to missing dependency), remove it.\n\t\t\t\t\tdelete this.get;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Hook needed; redefine it so that the support test is not executed again.\n\t\t\t\treturn (this.get = hookFn).apply(this, arguments);\n\t\t\t}\n\t\t};\n\t}\n\n\n\tvar cssPrefixes = [\"Webkit\", \"Moz\", \"ms\"],\n\t\temptyStyle = document.createElement(\"div\").style,\n\t\tvendorProps = {};\n\n\t// Return a vendor-prefixed property or undefined\n\tfunction vendorPropName(name) {\n\n\t\t// Check for vendor prefixed names\n\t\tvar capName = name[0].toUpperCase() + name.slice(1),\n\t\t\ti = cssPrefixes.length;\n\n\t\twhile (i--) {\n\t\t\tname = cssPrefixes[i] + capName;\n\t\t\tif (name in emptyStyle) {\n\t\t\t\treturn name;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return a potentially-mapped jQuery.cssProps or vendor prefixed property\n\tfunction finalPropName(name) {\n\t\tvar final = jQuery.cssProps[name] || vendorProps[name];\n\n\t\tif (final) {\n\t\t\treturn final;\n\t\t}\n\t\tif (name in emptyStyle) {\n\t\t\treturn name;\n\t\t}\n\t\treturn vendorProps[name] = vendorPropName(name) || name;\n\t}\n\n\n\tvar\n\n\t\t// Swappable if display is none or starts with table\n\t\t// except \"table\", \"table-cell\", or \"table-caption\"\n\t\t// See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display\n\t\trdisplayswap = /^(none|table(?!-c[ea]).+)/,\n\t\tcssShow = { position: \"absolute\", visibility: \"hidden\", display: \"block\" },\n\t\tcssNormalTransform = {\n\t\t\tletterSpacing: \"0\",\n\t\t\tfontWeight: \"400\"\n\t\t};\n\n\tfunction setPositiveNumber(_elem, value, subtract) {\n\n\t\t// Any relative (+/-) values have already been\n\t\t// normalized at this point\n\t\tvar matches = rcssNum.exec(value);\n\t\treturn matches ?\n\n\t\t\t// Guard against undefined \"subtract\", e.g., when used as in cssHooks\n\t\t\tMath.max(0, matches[2] - (subtract || 0)) + (matches[3] || \"px\") :\n\t\t\tvalue;\n\t}\n\n\tfunction boxModelAdjustment(elem, dimension, box, isBorderBox, styles, computedVal) {\n\t\tvar i = dimension === \"width\" ? 1 : 0,\n\t\t\textra = 0,\n\t\t\tdelta = 0,\n\t\t\tmarginDelta = 0;\n\n\t\t// Adjustment may not be necessary\n\t\tif (box === (isBorderBox ? \"border\" : \"content\")) {\n\t\t\treturn 0;\n\t\t}\n\n\t\tfor (; i < 4; i += 2) {\n\n\t\t\t// Both box models exclude margin\n\t\t\t// Count margin delta separately to only add it after scroll gutter adjustment.\n\t\t\t// This is needed to make negative margins work with `outerHeight( true )` (gh-3982).\n\t\t\tif (box === \"margin\") {\n\t\t\t\tmarginDelta += jQuery.css(elem, box + cssExpand[i], true, styles);\n\t\t\t}\n\n\t\t\t// If we get here with a content-box, we're seeking \"padding\" or \"border\" or \"margin\"\n\t\t\tif (!isBorderBox) {\n\n\t\t\t\t// Add padding\n\t\t\t\tdelta += jQuery.css(elem, \"padding\" + cssExpand[i], true, styles);\n\n\t\t\t\t// For \"border\" or \"margin\", add border\n\t\t\t\tif (box !== \"padding\") {\n\t\t\t\t\tdelta += jQuery.css(elem, \"border\" + cssExpand[i] + \"Width\", true, styles);\n\n\t\t\t\t\t// But still keep track of it otherwise\n\t\t\t\t} else {\n\t\t\t\t\textra += jQuery.css(elem, \"border\" + cssExpand[i] + \"Width\", true, styles);\n\t\t\t\t}\n\n\t\t\t\t// If we get here with a border-box (content + padding + border), we're seeking \"content\" or\n\t\t\t\t// \"padding\" or \"margin\"\n\t\t\t} else {\n\n\t\t\t\t// For \"content\", subtract padding\n\t\t\t\tif (box === \"content\") {\n\t\t\t\t\tdelta -= jQuery.css(elem, \"padding\" + cssExpand[i], true, styles);\n\t\t\t\t}\n\n\t\t\t\t// For \"content\" or \"padding\", subtract border\n\t\t\t\tif (box !== \"margin\") {\n\t\t\t\t\tdelta -= jQuery.css(elem, \"border\" + cssExpand[i] + \"Width\", true, styles);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Account for positive content-box scroll gutter when requested by providing computedVal\n\t\tif (!isBorderBox && computedVal >= 0) {\n\n\t\t\t// offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border\n\t\t\t// Assuming integer scroll gutter, subtract the rest and round down\n\t\t\tdelta += Math.max(0, Math.ceil(\n\t\t\t\telem[\"offset\" + dimension[0].toUpperCase() + dimension.slice(1)] -\n\t\t\t\tcomputedVal -\n\t\t\t\tdelta -\n\t\t\t\textra -\n\t\t\t\t0.5\n\n\t\t\t\t// If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter\n\t\t\t\t// Use an explicit zero to avoid NaN (gh-3964)\n\t\t\t)) || 0;\n\t\t}\n\n\t\treturn delta + marginDelta;\n\t}\n\n\tfunction getWidthOrHeight(elem, dimension, extra) {\n\n\t\t// Start with computed style\n\t\tvar styles = getStyles(elem),\n\n\t\t\t// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322).\n\t\t\t// Fake content-box until we know it's needed to know the true value.\n\t\t\tboxSizingNeeded = !support.boxSizingReliable() || extra,\n\t\t\tisBorderBox = boxSizingNeeded &&\n\t\t\t\tjQuery.css(elem, \"boxSizing\", false, styles) === \"border-box\",\n\t\t\tvalueIsBorderBox = isBorderBox,\n\n\t\t\tval = curCSS(elem, dimension, styles),\n\t\t\toffsetProp = \"offset\" + dimension[0].toUpperCase() + dimension.slice(1);\n\n\t\t// Support: Firefox <=54\n\t\t// Return a confounding non-pixel value or feign ignorance, as appropriate.\n\t\tif (rnumnonpx.test(val)) {\n\t\t\tif (!extra) {\n\t\t\t\treturn val;\n\t\t\t}\n\t\t\tval = \"auto\";\n\t\t}\n\n\n\t\t// Support: IE 9 - 11 only\n\t\t// Use offsetWidth/offsetHeight for when box sizing is unreliable.\n\t\t// In those cases, the computed value can be trusted to be border-box.\n\t\tif ((!support.boxSizingReliable() && isBorderBox ||\n\n\t\t\t// Support: IE 10 - 11+, Edge 15 - 18+\n\t\t\t// IE/Edge misreport `getComputedStyle` of table rows with width/height\n\t\t\t// set in CSS while `offset*` properties report correct values.\n\t\t\t// Interestingly, in some cases IE 9 doesn't suffer from this issue.\n\t\t\t!support.reliableTrDimensions() && nodeName(elem, \"tr\") ||\n\n\t\t\t// Fall back to offsetWidth/offsetHeight when value is \"auto\"\n\t\t\t// This happens for inline elements with no explicit setting (gh-3571)\n\t\t\tval === \"auto\" ||\n\n\t\t\t// Support: Android <=4.1 - 4.3 only\n\t\t\t// Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602)\n\t\t\t!parseFloat(val) && jQuery.css(elem, \"display\", false, styles) === \"inline\") &&\n\n\t\t\t// Make sure the element is visible & connected\n\t\t\telem.getClientRects().length) {\n\n\t\t\tisBorderBox = jQuery.css(elem, \"boxSizing\", false, styles) === \"border-box\";\n\n\t\t\t// Where available, offsetWidth/offsetHeight approximate border box dimensions.\n\t\t\t// Where not available (e.g., SVG), assume unreliable box-sizing and interpret the\n\t\t\t// retrieved value as a content box dimension.\n\t\t\tvalueIsBorderBox = offsetProp in elem;\n\t\t\tif (valueIsBorderBox) {\n\t\t\t\tval = elem[offsetProp];\n\t\t\t}\n\t\t}\n\n\t\t// Normalize \"\" and auto\n\t\tval = parseFloat(val) || 0;\n\n\t\t// Adjust for the element's box model\n\t\treturn (val +\n\t\t\tboxModelAdjustment(\n\t\t\t\telem,\n\t\t\t\tdimension,\n\t\t\t\textra || (isBorderBox ? \"border\" : \"content\"),\n\t\t\t\tvalueIsBorderBox,\n\t\t\t\tstyles,\n\n\t\t\t\t// Provide the current computed size to request scroll gutter calculation (gh-3589)\n\t\t\t\tval\n\t\t\t)\n\t\t) + \"px\";\n\t}\n\n\tjQuery.extend({\n\n\t\t// Add in style property hooks for overriding the default\n\t\t// behavior of getting and setting a style property\n\t\tcssHooks: {\n\t\t\topacity: {\n\t\t\t\tget: function (elem, computed) {\n\t\t\t\t\tif (computed) {\n\n\t\t\t\t\t\t// We should always get a number back from opacity\n\t\t\t\t\t\tvar ret = curCSS(elem, \"opacity\");\n\t\t\t\t\t\treturn ret === \"\" ? \"1\" : ret;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t// Don't automatically add \"px\" to these possibly-unitless properties\n\t\tcssNumber: {\n\t\t\tanimationIterationCount: true,\n\t\t\taspectRatio: true,\n\t\t\tborderImageSlice: true,\n\t\t\tcolumnCount: true,\n\t\t\tflexGrow: true,\n\t\t\tflexShrink: true,\n\t\t\tfontWeight: true,\n\t\t\tgridArea: true,\n\t\t\tgridColumn: true,\n\t\t\tgridColumnEnd: true,\n\t\t\tgridColumnStart: true,\n\t\t\tgridRow: true,\n\t\t\tgridRowEnd: true,\n\t\t\tgridRowStart: true,\n\t\t\tlineHeight: true,\n\t\t\topacity: true,\n\t\t\torder: true,\n\t\t\torphans: true,\n\t\t\tscale: true,\n\t\t\twidows: true,\n\t\t\tzIndex: true,\n\t\t\tzoom: true,\n\n\t\t\t// SVG-related\n\t\t\tfillOpacity: true,\n\t\t\tfloodOpacity: true,\n\t\t\tstopOpacity: true,\n\t\t\tstrokeMiterlimit: true,\n\t\t\tstrokeOpacity: true\n\t\t},\n\n\t\t// Add in properties whose names you wish to fix before\n\t\t// setting or getting the value\n\t\tcssProps: {},\n\n\t\t// Get and set the style property on a DOM Node\n\t\tstyle: function (elem, name, value, extra) {\n\n\t\t\t// Don't set styles on text and comment nodes\n\t\t\tif (!elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Make sure that we're working with the right name\n\t\t\tvar ret, type, hooks,\n\t\t\t\torigName = camelCase(name),\n\t\t\t\tisCustomProp = rcustomProp.test(name),\n\t\t\t\tstyle = elem.style;\n\n\t\t\t// Make sure that we're working with the right name. We don't\n\t\t\t// want to query the value if it is a CSS custom property\n\t\t\t// since they are user-defined.\n\t\t\tif (!isCustomProp) {\n\t\t\t\tname = finalPropName(origName);\n\t\t\t}\n\n\t\t\t// Gets hook for the prefixed version, then unprefixed version\n\t\t\thooks = jQuery.cssHooks[name] || jQuery.cssHooks[origName];\n\n\t\t\t// Check if we're setting a value\n\t\t\tif (value !== undefined) {\n\t\t\t\ttype = typeof value;\n\n\t\t\t\t// Convert \"+=\" or \"-=\" to relative numbers (trac-7345)\n\t\t\t\tif (type === \"string\" && (ret = rcssNum.exec(value)) && ret[1]) {\n\t\t\t\t\tvalue = adjustCSS(elem, name, ret);\n\n\t\t\t\t\t// Fixes bug trac-9237\n\t\t\t\t\ttype = \"number\";\n\t\t\t\t}\n\n\t\t\t\t// Make sure that null and NaN values aren't set (trac-7116)\n\t\t\t\tif (value == null || value !== value) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// If a number was passed in, add the unit (except for certain CSS properties)\n\t\t\t\t// The isCustomProp check can be removed in jQuery 4.0 when we only auto-append\n\t\t\t\t// \"px\" to a few hardcoded values.\n\t\t\t\tif (type === \"number\" && !isCustomProp) {\n\t\t\t\t\tvalue += ret && ret[3] || (jQuery.cssNumber[origName] ? \"\" : \"px\");\n\t\t\t\t}\n\n\t\t\t\t// background-* props affect original clone's values\n\t\t\t\tif (!support.clearCloneStyle && value === \"\" && name.indexOf(\"background\") === 0) {\n\t\t\t\t\tstyle[name] = \"inherit\";\n\t\t\t\t}\n\n\t\t\t\t// If a hook was provided, use that value, otherwise just set the specified value\n\t\t\t\tif (!hooks || !(\"set\" in hooks) ||\n\t\t\t\t\t(value = hooks.set(elem, value, extra)) !== undefined) {\n\n\t\t\t\t\tif (isCustomProp) {\n\t\t\t\t\t\tstyle.setProperty(name, value);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tstyle[name] = value;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\t// If a hook was provided get the non-computed value from there\n\t\t\t\tif (hooks && \"get\" in hooks &&\n\t\t\t\t\t(ret = hooks.get(elem, false, extra)) !== undefined) {\n\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\n\t\t\t\t// Otherwise just get the value from the style object\n\t\t\t\treturn style[name];\n\t\t\t}\n\t\t},\n\n\t\tcss: function (elem, name, extra, styles) {\n\t\t\tvar val, num, hooks,\n\t\t\t\torigName = camelCase(name),\n\t\t\t\tisCustomProp = rcustomProp.test(name);\n\n\t\t\t// Make sure that we're working with the right name. We don't\n\t\t\t// want to modify the value if it is a CSS custom property\n\t\t\t// since they are user-defined.\n\t\t\tif (!isCustomProp) {\n\t\t\t\tname = finalPropName(origName);\n\t\t\t}\n\n\t\t\t// Try prefixed name followed by the unprefixed name\n\t\t\thooks = jQuery.cssHooks[name] || jQuery.cssHooks[origName];\n\n\t\t\t// If a hook was provided get the computed value from there\n\t\t\tif (hooks && \"get\" in hooks) {\n\t\t\t\tval = hooks.get(elem, true, extra);\n\t\t\t}\n\n\t\t\t// Otherwise, if a way to get the computed value exists, use that\n\t\t\tif (val === undefined) {\n\t\t\t\tval = curCSS(elem, name, styles);\n\t\t\t}\n\n\t\t\t// Convert \"normal\" to computed value\n\t\t\tif (val === \"normal\" && name in cssNormalTransform) {\n\t\t\t\tval = cssNormalTransform[name];\n\t\t\t}\n\n\t\t\t// Make numeric if forced or a qualifier was provided and val looks numeric\n\t\t\tif (extra === \"\" || extra) {\n\t\t\t\tnum = parseFloat(val);\n\t\t\t\treturn extra === true || isFinite(num) ? num || 0 : val;\n\t\t\t}\n\n\t\t\treturn val;\n\t\t}\n\t});\n\n\tjQuery.each([\"height\", \"width\"], function (_i, dimension) {\n\t\tjQuery.cssHooks[dimension] = {\n\t\t\tget: function (elem, computed, extra) {\n\t\t\t\tif (computed) {\n\n\t\t\t\t\t// Certain elements can have dimension info if we invisibly show them\n\t\t\t\t\t// but it must have a current display style that would benefit\n\t\t\t\t\treturn rdisplayswap.test(jQuery.css(elem, \"display\")) &&\n\n\t\t\t\t\t\t// Support: Safari 8+\n\t\t\t\t\t\t// Table columns in Safari have non-zero offsetWidth & zero\n\t\t\t\t\t\t// getBoundingClientRect().width unless display is changed.\n\t\t\t\t\t\t// Support: IE <=11 only\n\t\t\t\t\t\t// Running getBoundingClientRect on a disconnected node\n\t\t\t\t\t\t// in IE throws an error.\n\t\t\t\t\t\t(!elem.getClientRects().length || !elem.getBoundingClientRect().width) ?\n\t\t\t\t\t\tswap(elem, cssShow, function () {\n\t\t\t\t\t\t\treturn getWidthOrHeight(elem, dimension, extra);\n\t\t\t\t\t\t}) :\n\t\t\t\t\t\tgetWidthOrHeight(elem, dimension, extra);\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tset: function (elem, value, extra) {\n\t\t\t\tvar matches,\n\t\t\t\t\tstyles = getStyles(elem),\n\n\t\t\t\t\t// Only read styles.position if the test has a chance to fail\n\t\t\t\t\t// to avoid forcing a reflow.\n\t\t\t\t\tscrollboxSizeBuggy = !support.scrollboxSize() &&\n\t\t\t\t\t\tstyles.position === \"absolute\",\n\n\t\t\t\t\t// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991)\n\t\t\t\t\tboxSizingNeeded = scrollboxSizeBuggy || extra,\n\t\t\t\t\tisBorderBox = boxSizingNeeded &&\n\t\t\t\t\t\tjQuery.css(elem, \"boxSizing\", false, styles) === \"border-box\",\n\t\t\t\t\tsubtract = extra ?\n\t\t\t\t\t\tboxModelAdjustment(\n\t\t\t\t\t\t\telem,\n\t\t\t\t\t\t\tdimension,\n\t\t\t\t\t\t\textra,\n\t\t\t\t\t\t\tisBorderBox,\n\t\t\t\t\t\t\tstyles\n\t\t\t\t\t\t) :\n\t\t\t\t\t\t0;\n\n\t\t\t\t// Account for unreliable border-box dimensions by comparing offset* to computed and\n\t\t\t\t// faking a content-box to get border and padding (gh-3699)\n\t\t\t\tif (isBorderBox && scrollboxSizeBuggy) {\n\t\t\t\t\tsubtract -= Math.ceil(\n\t\t\t\t\t\telem[\"offset\" + dimension[0].toUpperCase() + dimension.slice(1)] -\n\t\t\t\t\t\tparseFloat(styles[dimension]) -\n\t\t\t\t\t\tboxModelAdjustment(elem, dimension, \"border\", false, styles) -\n\t\t\t\t\t\t0.5\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\t// Convert to pixels if value adjustment is needed\n\t\t\t\tif (subtract && (matches = rcssNum.exec(value)) &&\n\t\t\t\t\t(matches[3] || \"px\") !== \"px\") {\n\n\t\t\t\t\telem.style[dimension] = value;\n\t\t\t\t\tvalue = jQuery.css(elem, dimension);\n\t\t\t\t}\n\n\t\t\t\treturn setPositiveNumber(elem, value, subtract);\n\t\t\t}\n\t\t};\n\t});\n\n\tjQuery.cssHooks.marginLeft = addGetHookIf(support.reliableMarginLeft,\n\t\tfunction (elem, computed) {\n\t\t\tif (computed) {\n\t\t\t\treturn (parseFloat(curCSS(elem, \"marginLeft\")) ||\n\t\t\t\t\telem.getBoundingClientRect().left -\n\t\t\t\t\tswap(elem, { marginLeft: 0 }, function () {\n\t\t\t\t\t\treturn elem.getBoundingClientRect().left;\n\t\t\t\t\t})\n\t\t\t\t) + \"px\";\n\t\t\t}\n\t\t}\n\t);\n\n\t// These hooks are used by animate to expand properties\n\tjQuery.each({\n\t\tmargin: \"\",\n\t\tpadding: \"\",\n\t\tborder: \"Width\"\n\t}, function (prefix, suffix) {\n\t\tjQuery.cssHooks[prefix + suffix] = {\n\t\t\texpand: function (value) {\n\t\t\t\tvar i = 0,\n\t\t\t\t\texpanded = {},\n\n\t\t\t\t\t// Assumes a single number if not a string\n\t\t\t\t\tparts = typeof value === \"string\" ? value.split(\" \") : [value];\n\n\t\t\t\tfor (; i < 4; i++) {\n\t\t\t\t\texpanded[prefix + cssExpand[i] + suffix] =\n\t\t\t\t\t\tparts[i] || parts[i - 2] || parts[0];\n\t\t\t\t}\n\n\t\t\t\treturn expanded;\n\t\t\t}\n\t\t};\n\n\t\tif (prefix !== \"margin\") {\n\t\t\tjQuery.cssHooks[prefix + suffix].set = setPositiveNumber;\n\t\t}\n\t});\n\n\tjQuery.fn.extend({\n\t\tcss: function (name, value) {\n\t\t\treturn access(this, function (elem, name, value) {\n\t\t\t\tvar styles, len,\n\t\t\t\t\tmap = {},\n\t\t\t\t\ti = 0;\n\n\t\t\t\tif (Array.isArray(name)) {\n\t\t\t\t\tstyles = getStyles(elem);\n\t\t\t\t\tlen = name.length;\n\n\t\t\t\t\tfor (; i < len; i++) {\n\t\t\t\t\t\tmap[name[i]] = jQuery.css(elem, name[i], false, styles);\n\t\t\t\t\t}\n\n\t\t\t\t\treturn map;\n\t\t\t\t}\n\n\t\t\t\treturn value !== undefined ?\n\t\t\t\t\tjQuery.style(elem, name, value) :\n\t\t\t\t\tjQuery.css(elem, name);\n\t\t\t}, name, value, arguments.length > 1);\n\t\t}\n\t});\n\n\n\tfunction Tween(elem, options, prop, end, easing) {\n\t\treturn new Tween.prototype.init(elem, options, prop, end, easing);\n\t}\n\tjQuery.Tween = Tween;\n\n\tTween.prototype = {\n\t\tconstructor: Tween,\n\t\tinit: function (elem, options, prop, end, easing, unit) {\n\t\t\tthis.elem = elem;\n\t\t\tthis.prop = prop;\n\t\t\tthis.easing = easing || jQuery.easing._default;\n\t\t\tthis.options = options;\n\t\t\tthis.start = this.now = this.cur();\n\t\t\tthis.end = end;\n\t\t\tthis.unit = unit || (jQuery.cssNumber[prop] ? \"\" : \"px\");\n\t\t},\n\t\tcur: function () {\n\t\t\tvar hooks = Tween.propHooks[this.prop];\n\n\t\t\treturn hooks && hooks.get ?\n\t\t\t\thooks.get(this) :\n\t\t\t\tTween.propHooks._default.get(this);\n\t\t},\n\t\trun: function (percent) {\n\t\t\tvar eased,\n\t\t\t\thooks = Tween.propHooks[this.prop];\n\n\t\t\tif (this.options.duration) {\n\t\t\t\tthis.pos = eased = jQuery.easing[this.easing](\n\t\t\t\t\tpercent, this.options.duration * percent, 0, 1, this.options.duration\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tthis.pos = eased = percent;\n\t\t\t}\n\t\t\tthis.now = (this.end - this.start) * eased + this.start;\n\n\t\t\tif (this.options.step) {\n\t\t\t\tthis.options.step.call(this.elem, this.now, this);\n\t\t\t}\n\n\t\t\tif (hooks && hooks.set) {\n\t\t\t\thooks.set(this);\n\t\t\t} else {\n\t\t\t\tTween.propHooks._default.set(this);\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t};\n\n\tTween.prototype.init.prototype = Tween.prototype;\n\n\tTween.propHooks = {\n\t\t_default: {\n\t\t\tget: function (tween) {\n\t\t\t\tvar result;\n\n\t\t\t\t// Use a property on the element directly when it is not a DOM element,\n\t\t\t\t// or when there is no matching style property that exists.\n\t\t\t\tif (tween.elem.nodeType !== 1 ||\n\t\t\t\t\ttween.elem[tween.prop] != null && tween.elem.style[tween.prop] == null) {\n\t\t\t\t\treturn tween.elem[tween.prop];\n\t\t\t\t}\n\n\t\t\t\t// Passing an empty string as a 3rd parameter to .css will automatically\n\t\t\t\t// attempt a parseFloat and fallback to a string if the parse fails.\n\t\t\t\t// Simple values such as \"10px\" are parsed to Float;\n\t\t\t\t// complex values such as \"rotate(1rad)\" are returned as-is.\n\t\t\t\tresult = jQuery.css(tween.elem, tween.prop, \"\");\n\n\t\t\t\t// Empty strings, null, undefined and \"auto\" are converted to 0.\n\t\t\t\treturn !result || result === \"auto\" ? 0 : result;\n\t\t\t},\n\t\t\tset: function (tween) {\n\n\t\t\t\t// Use step hook for back compat.\n\t\t\t\t// Use cssHook if its there.\n\t\t\t\t// Use .style if available and use plain properties where available.\n\t\t\t\tif (jQuery.fx.step[tween.prop]) {\n\t\t\t\t\tjQuery.fx.step[tween.prop](tween);\n\t\t\t\t} else if (tween.elem.nodeType === 1 && (\n\t\t\t\t\tjQuery.cssHooks[tween.prop] ||\n\t\t\t\t\ttween.elem.style[finalPropName(tween.prop)] != null)) {\n\t\t\t\t\tjQuery.style(tween.elem, tween.prop, tween.now + tween.unit);\n\t\t\t\t} else {\n\t\t\t\t\ttween.elem[tween.prop] = tween.now;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t// Support: IE <=9 only\n\t// Panic based approach to setting things on disconnected nodes\n\tTween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {\n\t\tset: function (tween) {\n\t\t\tif (tween.elem.nodeType && tween.elem.parentNode) {\n\t\t\t\ttween.elem[tween.prop] = tween.now;\n\t\t\t}\n\t\t}\n\t};\n\n\tjQuery.easing = {\n\t\tlinear: function (p) {\n\t\t\treturn p;\n\t\t},\n\t\tswing: function (p) {\n\t\t\treturn 0.5 - Math.cos(p * Math.PI) / 2;\n\t\t},\n\t\t_default: \"swing\"\n\t};\n\n\tjQuery.fx = Tween.prototype.init;\n\n\t// Back compat <1.8 extension point\n\tjQuery.fx.step = {};\n\n\n\n\n\tvar\n\t\tfxNow, inProgress,\n\t\trfxtypes = /^(?:toggle|show|hide)$/,\n\t\trrun = /queueHooks$/;\n\n\tfunction schedule() {\n\t\tif (inProgress) {\n\t\t\tif (document.hidden === false && window.requestAnimationFrame) {\n\t\t\t\twindow.requestAnimationFrame(schedule);\n\t\t\t} else {\n\t\t\t\twindow.setTimeout(schedule, jQuery.fx.interval);\n\t\t\t}\n\n\t\t\tjQuery.fx.tick();\n\t\t}\n\t}\n\n\t// Animations created synchronously will run synchronously\n\tfunction createFxNow() {\n\t\twindow.setTimeout(function () {\n\t\t\tfxNow = undefined;\n\t\t});\n\t\treturn (fxNow = Date.now());\n\t}\n\n\t// Generate parameters to create a standard animation\n\tfunction genFx(type, includeWidth) {\n\t\tvar which,\n\t\t\ti = 0,\n\t\t\tattrs = { height: type };\n\n\t\t// If we include width, step value is 1 to do all cssExpand values,\n\t\t// otherwise step value is 2 to skip over Left and Right\n\t\tincludeWidth = includeWidth ? 1 : 0;\n\t\tfor (; i < 4; i += 2 - includeWidth) {\n\t\t\twhich = cssExpand[i];\n\t\t\tattrs[\"margin\" + which] = attrs[\"padding\" + which] = type;\n\t\t}\n\n\t\tif (includeWidth) {\n\t\t\tattrs.opacity = attrs.width = type;\n\t\t}\n\n\t\treturn attrs;\n\t}\n\n\tfunction createTween(value, prop, animation) {\n\t\tvar tween,\n\t\t\tcollection = (Animation.tweeners[prop] || []).concat(Animation.tweeners[\"*\"]),\n\t\t\tindex = 0,\n\t\t\tlength = collection.length;\n\t\tfor (; index < length; index++) {\n\t\t\tif ((tween = collection[index].call(animation, prop, value))) {\n\n\t\t\t\t// We're done with this property\n\t\t\t\treturn tween;\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction defaultPrefilter(elem, props, opts) {\n\t\tvar prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display,\n\t\t\tisBox = \"width\" in props || \"height\" in props,\n\t\t\tanim = this,\n\t\t\torig = {},\n\t\t\tstyle = elem.style,\n\t\t\thidden = elem.nodeType && isHiddenWithinTree(elem),\n\t\t\tdataShow = dataPriv.get(elem, \"fxshow\");\n\n\t\t// Queue-skipping animations hijack the fx hooks\n\t\tif (!opts.queue) {\n\t\t\thooks = jQuery._queueHooks(elem, \"fx\");\n\t\t\tif (hooks.unqueued == null) {\n\t\t\t\thooks.unqueued = 0;\n\t\t\t\toldfire = hooks.empty.fire;\n\t\t\t\thooks.empty.fire = function () {\n\t\t\t\t\tif (!hooks.unqueued) {\n\t\t\t\t\t\toldfire();\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t\thooks.unqueued++;\n\n\t\t\tanim.always(function () {\n\n\t\t\t\t// Ensure the complete handler is called before this completes\n\t\t\t\tanim.always(function () {\n\t\t\t\t\thooks.unqueued--;\n\t\t\t\t\tif (!jQuery.queue(elem, \"fx\").length) {\n\t\t\t\t\t\thooks.empty.fire();\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\n\t\t// Detect show/hide animations\n\t\tfor (prop in props) {\n\t\t\tvalue = props[prop];\n\t\t\tif (rfxtypes.test(value)) {\n\t\t\t\tdelete props[prop];\n\t\t\t\ttoggle = toggle || value === \"toggle\";\n\t\t\t\tif (value === (hidden ? \"hide\" : \"show\")) {\n\n\t\t\t\t\t// Pretend to be hidden if this is a \"show\" and\n\t\t\t\t\t// there is still data from a stopped show/hide\n\t\t\t\t\tif (value === \"show\" && dataShow && dataShow[prop] !== undefined) {\n\t\t\t\t\t\thidden = true;\n\n\t\t\t\t\t\t// Ignore all other no-op show/hide data\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\torig[prop] = dataShow && dataShow[prop] || jQuery.style(elem, prop);\n\t\t\t}\n\t\t}\n\n\t\t// Bail out if this is a no-op like .hide().hide()\n\t\tpropTween = !jQuery.isEmptyObject(props);\n\t\tif (!propTween && jQuery.isEmptyObject(orig)) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Restrict \"overflow\" and \"display\" styles during box animations\n\t\tif (isBox && elem.nodeType === 1) {\n\n\t\t\t// Support: IE <=9 - 11, Edge 12 - 15\n\t\t\t// Record all 3 overflow attributes because IE does not infer the shorthand\n\t\t\t// from identically-valued overflowX and overflowY and Edge just mirrors\n\t\t\t// the overflowX value there.\n\t\t\topts.overflow = [style.overflow, style.overflowX, style.overflowY];\n\n\t\t\t// Identify a display type, preferring old show/hide data over the CSS cascade\n\t\t\trestoreDisplay = dataShow && dataShow.display;\n\t\t\tif (restoreDisplay == null) {\n\t\t\t\trestoreDisplay = dataPriv.get(elem, \"display\");\n\t\t\t}\n\t\t\tdisplay = jQuery.css(elem, \"display\");\n\t\t\tif (display === \"none\") {\n\t\t\t\tif (restoreDisplay) {\n\t\t\t\t\tdisplay = restoreDisplay;\n\t\t\t\t} else {\n\n\t\t\t\t\t// Get nonempty value(s) by temporarily forcing visibility\n\t\t\t\t\tshowHide([elem], true);\n\t\t\t\t\trestoreDisplay = elem.style.display || restoreDisplay;\n\t\t\t\t\tdisplay = jQuery.css(elem, \"display\");\n\t\t\t\t\tshowHide([elem]);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Animate inline elements as inline-block\n\t\t\tif (display === \"inline\" || display === \"inline-block\" && restoreDisplay != null) {\n\t\t\t\tif (jQuery.css(elem, \"float\") === \"none\") {\n\n\t\t\t\t\t// Restore the original display value at the end of pure show/hide animations\n\t\t\t\t\tif (!propTween) {\n\t\t\t\t\t\tanim.done(function () {\n\t\t\t\t\t\t\tstyle.display = restoreDisplay;\n\t\t\t\t\t\t});\n\t\t\t\t\t\tif (restoreDisplay == null) {\n\t\t\t\t\t\t\tdisplay = style.display;\n\t\t\t\t\t\t\trestoreDisplay = display === \"none\" ? \"\" : display;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tstyle.display = \"inline-block\";\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (opts.overflow) {\n\t\t\tstyle.overflow = \"hidden\";\n\t\t\tanim.always(function () {\n\t\t\t\tstyle.overflow = opts.overflow[0];\n\t\t\t\tstyle.overflowX = opts.overflow[1];\n\t\t\t\tstyle.overflowY = opts.overflow[2];\n\t\t\t});\n\t\t}\n\n\t\t// Implement show/hide animations\n\t\tpropTween = false;\n\t\tfor (prop in orig) {\n\n\t\t\t// General show/hide setup for this element animation\n\t\t\tif (!propTween) {\n\t\t\t\tif (dataShow) {\n\t\t\t\t\tif (\"hidden\" in dataShow) {\n\t\t\t\t\t\thidden = dataShow.hidden;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tdataShow = dataPriv.access(elem, \"fxshow\", { display: restoreDisplay });\n\t\t\t\t}\n\n\t\t\t\t// Store hidden/visible for toggle so `.stop().toggle()` \"reverses\"\n\t\t\t\tif (toggle) {\n\t\t\t\t\tdataShow.hidden = !hidden;\n\t\t\t\t}\n\n\t\t\t\t// Show elements before animating them\n\t\t\t\tif (hidden) {\n\t\t\t\t\tshowHide([elem], true);\n\t\t\t\t}\n\n\t\t\t\t/* eslint-disable no-loop-func */\n\n\t\t\t\tanim.done(function () {\n\n\t\t\t\t\t/* eslint-enable no-loop-func */\n\n\t\t\t\t\t// The final step of a \"hide\" animation is actually hiding the element\n\t\t\t\t\tif (!hidden) {\n\t\t\t\t\t\tshowHide([elem]);\n\t\t\t\t\t}\n\t\t\t\t\tdataPriv.remove(elem, \"fxshow\");\n\t\t\t\t\tfor (prop in orig) {\n\t\t\t\t\t\tjQuery.style(elem, prop, orig[prop]);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// Per-property setup\n\t\t\tpropTween = createTween(hidden ? dataShow[prop] : 0, prop, anim);\n\t\t\tif (!(prop in dataShow)) {\n\t\t\t\tdataShow[prop] = propTween.start;\n\t\t\t\tif (hidden) {\n\t\t\t\t\tpropTween.end = propTween.start;\n\t\t\t\t\tpropTween.start = 0;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction propFilter(props, specialEasing) {\n\t\tvar index, name, easing, value, hooks;\n\n\t\t// camelCase, specialEasing and expand cssHook pass\n\t\tfor (index in props) {\n\t\t\tname = camelCase(index);\n\t\t\teasing = specialEasing[name];\n\t\t\tvalue = props[index];\n\t\t\tif (Array.isArray(value)) {\n\t\t\t\teasing = value[1];\n\t\t\t\tvalue = props[index] = value[0];\n\t\t\t}\n\n\t\t\tif (index !== name) {\n\t\t\t\tprops[name] = value;\n\t\t\t\tdelete props[index];\n\t\t\t}\n\n\t\t\thooks = jQuery.cssHooks[name];\n\t\t\tif (hooks && \"expand\" in hooks) {\n\t\t\t\tvalue = hooks.expand(value);\n\t\t\t\tdelete props[name];\n\n\t\t\t\t// Not quite $.extend, this won't overwrite existing keys.\n\t\t\t\t// Reusing 'index' because we have the correct \"name\"\n\t\t\t\tfor (index in value) {\n\t\t\t\t\tif (!(index in props)) {\n\t\t\t\t\t\tprops[index] = value[index];\n\t\t\t\t\t\tspecialEasing[index] = easing;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tspecialEasing[name] = easing;\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction Animation(elem, properties, options) {\n\t\tvar result,\n\t\t\tstopped,\n\t\t\tindex = 0,\n\t\t\tlength = Animation.prefilters.length,\n\t\t\tdeferred = jQuery.Deferred().always(function () {\n\n\t\t\t\t// Don't match elem in the :animated selector\n\t\t\t\tdelete tick.elem;\n\t\t\t}),\n\t\t\ttick = function () {\n\t\t\t\tif (stopped) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tvar currentTime = fxNow || createFxNow(),\n\t\t\t\t\tremaining = Math.max(0, animation.startTime + animation.duration - currentTime),\n\n\t\t\t\t\t// Support: Android 2.3 only\n\t\t\t\t\t// Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (trac-12497)\n\t\t\t\t\ttemp = remaining / animation.duration || 0,\n\t\t\t\t\tpercent = 1 - temp,\n\t\t\t\t\tindex = 0,\n\t\t\t\t\tlength = animation.tweens.length;\n\n\t\t\t\tfor (; index < length; index++) {\n\t\t\t\t\tanimation.tweens[index].run(percent);\n\t\t\t\t}\n\n\t\t\t\tdeferred.notifyWith(elem, [animation, percent, remaining]);\n\n\t\t\t\t// If there's more to do, yield\n\t\t\t\tif (percent < 1 && length) {\n\t\t\t\t\treturn remaining;\n\t\t\t\t}\n\n\t\t\t\t// If this was an empty animation, synthesize a final progress notification\n\t\t\t\tif (!length) {\n\t\t\t\t\tdeferred.notifyWith(elem, [animation, 1, 0]);\n\t\t\t\t}\n\n\t\t\t\t// Resolve the animation and report its conclusion\n\t\t\t\tdeferred.resolveWith(elem, [animation]);\n\t\t\t\treturn false;\n\t\t\t},\n\t\t\tanimation = deferred.promise({\n\t\t\t\telem: elem,\n\t\t\t\tprops: jQuery.extend({}, properties),\n\t\t\t\topts: jQuery.extend(true, {\n\t\t\t\t\tspecialEasing: {},\n\t\t\t\t\teasing: jQuery.easing._default\n\t\t\t\t}, options),\n\t\t\t\toriginalProperties: properties,\n\t\t\t\toriginalOptions: options,\n\t\t\t\tstartTime: fxNow || createFxNow(),\n\t\t\t\tduration: options.duration,\n\t\t\t\ttweens: [],\n\t\t\t\tcreateTween: function (prop, end) {\n\t\t\t\t\tvar tween = jQuery.Tween(elem, animation.opts, prop, end,\n\t\t\t\t\t\tanimation.opts.specialEasing[prop] || animation.opts.easing);\n\t\t\t\t\tanimation.tweens.push(tween);\n\t\t\t\t\treturn tween;\n\t\t\t\t},\n\t\t\t\tstop: function (gotoEnd) {\n\t\t\t\t\tvar index = 0,\n\n\t\t\t\t\t\t// If we are going to the end, we want to run all the tweens\n\t\t\t\t\t\t// otherwise we skip this part\n\t\t\t\t\t\tlength = gotoEnd ? animation.tweens.length : 0;\n\t\t\t\t\tif (stopped) {\n\t\t\t\t\t\treturn this;\n\t\t\t\t\t}\n\t\t\t\t\tstopped = true;\n\t\t\t\t\tfor (; index < length; index++) {\n\t\t\t\t\t\tanimation.tweens[index].run(1);\n\t\t\t\t\t}\n\n\t\t\t\t\t// Resolve when we played the last frame; otherwise, reject\n\t\t\t\t\tif (gotoEnd) {\n\t\t\t\t\t\tdeferred.notifyWith(elem, [animation, 1, 0]);\n\t\t\t\t\t\tdeferred.resolveWith(elem, [animation, gotoEnd]);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdeferred.rejectWith(elem, [animation, gotoEnd]);\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t}),\n\t\t\tprops = animation.props;\n\n\t\tpropFilter(props, animation.opts.specialEasing);\n\n\t\tfor (; index < length; index++) {\n\t\t\tresult = Animation.prefilters[index].call(animation, elem, props, animation.opts);\n\t\t\tif (result) {\n\t\t\t\tif (isFunction(result.stop)) {\n\t\t\t\t\tjQuery._queueHooks(animation.elem, animation.opts.queue).stop =\n\t\t\t\t\t\tresult.stop.bind(result);\n\t\t\t\t}\n\t\t\t\treturn result;\n\t\t\t}\n\t\t}\n\n\t\tjQuery.map(props, createTween, animation);\n\n\t\tif (isFunction(animation.opts.start)) {\n\t\t\tanimation.opts.start.call(elem, animation);\n\t\t}\n\n\t\t// Attach callbacks from options\n\t\tanimation\n\t\t\t.progress(animation.opts.progress)\n\t\t\t.done(animation.opts.done, animation.opts.complete)\n\t\t\t.fail(animation.opts.fail)\n\t\t\t.always(animation.opts.always);\n\n\t\tjQuery.fx.timer(\n\t\t\tjQuery.extend(tick, {\n\t\t\t\telem: elem,\n\t\t\t\tanim: animation,\n\t\t\t\tqueue: animation.opts.queue\n\t\t\t})\n\t\t);\n\n\t\treturn animation;\n\t}\n\n\tjQuery.Animation = jQuery.extend(Animation, {\n\n\t\ttweeners: {\n\t\t\t\"*\": [function (prop, value) {\n\t\t\t\tvar tween = this.createTween(prop, value);\n\t\t\t\tadjustCSS(tween.elem, prop, rcssNum.exec(value), tween);\n\t\t\t\treturn tween;\n\t\t\t}]\n\t\t},\n\n\t\ttweener: function (props, callback) {\n\t\t\tif (isFunction(props)) {\n\t\t\t\tcallback = props;\n\t\t\t\tprops = [\"*\"];\n\t\t\t} else {\n\t\t\t\tprops = props.match(rnothtmlwhite);\n\t\t\t}\n\n\t\t\tvar prop,\n\t\t\t\tindex = 0,\n\t\t\t\tlength = props.length;\n\n\t\t\tfor (; index < length; index++) {\n\t\t\t\tprop = props[index];\n\t\t\t\tAnimation.tweeners[prop] = Animation.tweeners[prop] || [];\n\t\t\t\tAnimation.tweeners[prop].unshift(callback);\n\t\t\t}\n\t\t},\n\n\t\tprefilters: [defaultPrefilter],\n\n\t\tprefilter: function (callback, prepend) {\n\t\t\tif (prepend) {\n\t\t\t\tAnimation.prefilters.unshift(callback);\n\t\t\t} else {\n\t\t\t\tAnimation.prefilters.push(callback);\n\t\t\t}\n\t\t}\n\t});\n\n\tjQuery.speed = function (speed, easing, fn) {\n\t\tvar opt = speed && typeof speed === \"object\" ? jQuery.extend({}, speed) : {\n\t\t\tcomplete: fn || !fn && easing ||\n\t\t\t\tisFunction(speed) && speed,\n\t\t\tduration: speed,\n\t\t\teasing: fn && easing || easing && !isFunction(easing) && easing\n\t\t};\n\n\t\t// Go to the end state if fx are off\n\t\tif (jQuery.fx.off) {\n\t\t\topt.duration = 0;\n\n\t\t} else {\n\t\t\tif (typeof opt.duration !== \"number\") {\n\t\t\t\tif (opt.duration in jQuery.fx.speeds) {\n\t\t\t\t\topt.duration = jQuery.fx.speeds[opt.duration];\n\n\t\t\t\t} else {\n\t\t\t\t\topt.duration = jQuery.fx.speeds._default;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Normalize opt.queue - true/undefined/null -> \"fx\"\n\t\tif (opt.queue == null || opt.queue === true) {\n\t\t\topt.queue = \"fx\";\n\t\t}\n\n\t\t// Queueing\n\t\topt.old = opt.complete;\n\n\t\topt.complete = function () {\n\t\t\tif (isFunction(opt.old)) {\n\t\t\t\topt.old.call(this);\n\t\t\t}\n\n\t\t\tif (opt.queue) {\n\t\t\t\tjQuery.dequeue(this, opt.queue);\n\t\t\t}\n\t\t};\n\n\t\treturn opt;\n\t};\n\n\tjQuery.fn.extend({\n\t\tfadeTo: function (speed, to, easing, callback) {\n\n\t\t\t// Show any hidden elements after setting opacity to 0\n\t\t\treturn this.filter(isHiddenWithinTree).css(\"opacity\", 0).show()\n\n\t\t\t\t// Animate to the value specified\n\t\t\t\t.end().animate({ opacity: to }, speed, easing, callback);\n\t\t},\n\t\tanimate: function (prop, speed, easing, callback) {\n\t\t\tvar empty = jQuery.isEmptyObject(prop),\n\t\t\t\toptall = jQuery.speed(speed, easing, callback),\n\t\t\t\tdoAnimation = function () {\n\n\t\t\t\t\t// Operate on a copy of prop so per-property easing won't be lost\n\t\t\t\t\tvar anim = Animation(this, jQuery.extend({}, prop), optall);\n\n\t\t\t\t\t// Empty animations, or finishing resolves immediately\n\t\t\t\t\tif (empty || dataPriv.get(this, \"finish\")) {\n\t\t\t\t\t\tanim.stop(true);\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\tdoAnimation.finish = doAnimation;\n\n\t\t\treturn empty || optall.queue === false ?\n\t\t\t\tthis.each(doAnimation) :\n\t\t\t\tthis.queue(optall.queue, doAnimation);\n\t\t},\n\t\tstop: function (type, clearQueue, gotoEnd) {\n\t\t\tvar stopQueue = function (hooks) {\n\t\t\t\tvar stop = hooks.stop;\n\t\t\t\tdelete hooks.stop;\n\t\t\t\tstop(gotoEnd);\n\t\t\t};\n\n\t\t\tif (typeof type !== \"string\") {\n\t\t\t\tgotoEnd = clearQueue;\n\t\t\t\tclearQueue = type;\n\t\t\t\ttype = undefined;\n\t\t\t}\n\t\t\tif (clearQueue) {\n\t\t\t\tthis.queue(type || \"fx\", []);\n\t\t\t}\n\n\t\t\treturn this.each(function () {\n\t\t\t\tvar dequeue = true,\n\t\t\t\t\tindex = type != null && type + \"queueHooks\",\n\t\t\t\t\ttimers = jQuery.timers,\n\t\t\t\t\tdata = dataPriv.get(this);\n\n\t\t\t\tif (index) {\n\t\t\t\t\tif (data[index] && data[index].stop) {\n\t\t\t\t\t\tstopQueue(data[index]);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tfor (index in data) {\n\t\t\t\t\t\tif (data[index] && data[index].stop && rrun.test(index)) {\n\t\t\t\t\t\t\tstopQueue(data[index]);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tfor (index = timers.length; index--;) {\n\t\t\t\t\tif (timers[index].elem === this &&\n\t\t\t\t\t\t(type == null || timers[index].queue === type)) {\n\n\t\t\t\t\t\ttimers[index].anim.stop(gotoEnd);\n\t\t\t\t\t\tdequeue = false;\n\t\t\t\t\t\ttimers.splice(index, 1);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Start the next in the queue if the last step wasn't forced.\n\t\t\t\t// Timers currently will call their complete callbacks, which\n\t\t\t\t// will dequeue but only if they were gotoEnd.\n\t\t\t\tif (dequeue || !gotoEnd) {\n\t\t\t\t\tjQuery.dequeue(this, type);\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\t\tfinish: function (type) {\n\t\t\tif (type !== false) {\n\t\t\t\ttype = type || \"fx\";\n\t\t\t}\n\t\t\treturn this.each(function () {\n\t\t\t\tvar index,\n\t\t\t\t\tdata = dataPriv.get(this),\n\t\t\t\t\tqueue = data[type + \"queue\"],\n\t\t\t\t\thooks = data[type + \"queueHooks\"],\n\t\t\t\t\ttimers = jQuery.timers,\n\t\t\t\t\tlength = queue ? queue.length : 0;\n\n\t\t\t\t// Enable finishing flag on private data\n\t\t\t\tdata.finish = true;\n\n\t\t\t\t// Empty the queue first\n\t\t\t\tjQuery.queue(this, type, []);\n\n\t\t\t\tif (hooks && hooks.stop) {\n\t\t\t\t\thooks.stop.call(this, true);\n\t\t\t\t}\n\n\t\t\t\t// Look for any active animations, and finish them\n\t\t\t\tfor (index = timers.length; index--;) {\n\t\t\t\t\tif (timers[index].elem === this && timers[index].queue === type) {\n\t\t\t\t\t\ttimers[index].anim.stop(true);\n\t\t\t\t\t\ttimers.splice(index, 1);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Look for any animations in the old queue and finish them\n\t\t\t\tfor (index = 0; index < length; index++) {\n\t\t\t\t\tif (queue[index] && queue[index].finish) {\n\t\t\t\t\t\tqueue[index].finish.call(this);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Turn off finishing flag\n\t\t\t\tdelete data.finish;\n\t\t\t});\n\t\t}\n\t});\n\n\tjQuery.each([\"toggle\", \"show\", \"hide\"], function (_i, name) {\n\t\tvar cssFn = jQuery.fn[name];\n\t\tjQuery.fn[name] = function (speed, easing, callback) {\n\t\t\treturn speed == null || typeof speed === \"boolean\" ?\n\t\t\t\tcssFn.apply(this, arguments) :\n\t\t\t\tthis.animate(genFx(name, true), speed, easing, callback);\n\t\t};\n\t});\n\n\t// Generate shortcuts for custom animations\n\tjQuery.each({\n\t\tslideDown: genFx(\"show\"),\n\t\tslideUp: genFx(\"hide\"),\n\t\tslideToggle: genFx(\"toggle\"),\n\t\tfadeIn: { opacity: \"show\" },\n\t\tfadeOut: { opacity: \"hide\" },\n\t\tfadeToggle: { opacity: \"toggle\" }\n\t}, function (name, props) {\n\t\tjQuery.fn[name] = function (speed, easing, callback) {\n\t\t\treturn this.animate(props, speed, easing, callback);\n\t\t};\n\t});\n\n\tjQuery.timers = [];\n\tjQuery.fx.tick = function () {\n\t\tvar timer,\n\t\t\ti = 0,\n\t\t\ttimers = jQuery.timers;\n\n\t\tfxNow = Date.now();\n\n\t\tfor (; i < timers.length; i++) {\n\t\t\ttimer = timers[i];\n\n\t\t\t// Run the timer and safely remove it when done (allowing for external removal)\n\t\t\tif (!timer() && timers[i] === timer) {\n\t\t\t\ttimers.splice(i--, 1);\n\t\t\t}\n\t\t}\n\n\t\tif (!timers.length) {\n\t\t\tjQuery.fx.stop();\n\t\t}\n\t\tfxNow = undefined;\n\t};\n\n\tjQuery.fx.timer = function (timer) {\n\t\tjQuery.timers.push(timer);\n\t\tjQuery.fx.start();\n\t};\n\n\tjQuery.fx.interval = 13;\n\tjQuery.fx.start = function () {\n\t\tif (inProgress) {\n\t\t\treturn;\n\t\t}\n\n\t\tinProgress = true;\n\t\tschedule();\n\t};\n\n\tjQuery.fx.stop = function () {\n\t\tinProgress = null;\n\t};\n\n\tjQuery.fx.speeds = {\n\t\tslow: 600,\n\t\tfast: 200,\n\n\t\t// Default speed\n\t\t_default: 400\n\t};\n\n\n\t// Based off of the plugin by Clint Helfers, with permission.\n\tjQuery.fn.delay = function (time, type) {\n\t\ttime = jQuery.fx ? jQuery.fx.speeds[time] || time : time;\n\t\ttype = type || \"fx\";\n\n\t\treturn this.queue(type, function (next, hooks) {\n\t\t\tvar timeout = window.setTimeout(next, time);\n\t\t\thooks.stop = function () {\n\t\t\t\twindow.clearTimeout(timeout);\n\t\t\t};\n\t\t});\n\t};\n\n\n\t(function () {\n\t\tvar input = document.createElement(\"input\"),\n\t\t\tselect = document.createElement(\"select\"),\n\t\t\topt = select.appendChild(document.createElement(\"option\"));\n\n\t\tinput.type = \"checkbox\";\n\n\t\t// Support: Android <=4.3 only\n\t\t// Default value for a checkbox should be \"on\"\n\t\tsupport.checkOn = input.value !== \"\";\n\n\t\t// Support: IE <=11 only\n\t\t// Must access selectedIndex to make default options select\n\t\tsupport.optSelected = opt.selected;\n\n\t\t// Support: IE <=11 only\n\t\t// An input loses its value after becoming a radio\n\t\tinput = document.createElement(\"input\");\n\t\tinput.value = \"t\";\n\t\tinput.type = \"radio\";\n\t\tsupport.radioValue = input.value === \"t\";\n\t})();\n\n\n\tvar boolHook,\n\t\tattrHandle = jQuery.expr.attrHandle;\n\n\tjQuery.fn.extend({\n\t\tattr: function (name, value) {\n\t\t\treturn access(this, jQuery.attr, name, value, arguments.length > 1);\n\t\t},\n\n\t\tremoveAttr: function (name) {\n\t\t\treturn this.each(function () {\n\t\t\t\tjQuery.removeAttr(this, name);\n\t\t\t});\n\t\t}\n\t});\n\n\tjQuery.extend({\n\t\tattr: function (elem, name, value) {\n\t\t\tvar ret, hooks,\n\t\t\t\tnType = elem.nodeType;\n\n\t\t\t// Don't get/set attributes on text, comment and attribute nodes\n\t\t\tif (nType === 3 || nType === 8 || nType === 2) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Fallback to prop when attributes are not supported\n\t\t\tif (typeof elem.getAttribute === \"undefined\") {\n\t\t\t\treturn jQuery.prop(elem, name, value);\n\t\t\t}\n\n\t\t\t// Attribute hooks are determined by the lowercase version\n\t\t\t// Grab necessary hook if one is defined\n\t\t\tif (nType !== 1 || !jQuery.isXMLDoc(elem)) {\n\t\t\t\thooks = jQuery.attrHooks[name.toLowerCase()] ||\n\t\t\t\t\t(jQuery.expr.match.bool.test(name) ? boolHook : undefined);\n\t\t\t}\n\n\t\t\tif (value !== undefined) {\n\t\t\t\tif (value === null) {\n\t\t\t\t\tjQuery.removeAttr(elem, name);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (hooks && \"set\" in hooks &&\n\t\t\t\t\t(ret = hooks.set(elem, value, name)) !== undefined) {\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\n\t\t\t\telem.setAttribute(name, value + \"\");\n\t\t\t\treturn value;\n\t\t\t}\n\n\t\t\tif (hooks && \"get\" in hooks && (ret = hooks.get(elem, name)) !== null) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\tret = jQuery.find.attr(elem, name);\n\n\t\t\t// Non-existent attributes return null, we normalize to undefined\n\t\t\treturn ret == null ? undefined : ret;\n\t\t},\n\n\t\tattrHooks: {\n\t\t\ttype: {\n\t\t\t\tset: function (elem, value) {\n\t\t\t\t\tif (!support.radioValue && value === \"radio\" &&\n\t\t\t\t\t\tnodeName(elem, \"input\")) {\n\t\t\t\t\t\tvar val = elem.value;\n\t\t\t\t\t\telem.setAttribute(\"type\", value);\n\t\t\t\t\t\tif (val) {\n\t\t\t\t\t\t\telem.value = val;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn value;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tremoveAttr: function (elem, value) {\n\t\t\tvar name,\n\t\t\t\ti = 0,\n\n\t\t\t\t// Attribute names can contain non-HTML whitespace characters\n\t\t\t\t// https://html.spec.whatwg.org/multipage/syntax.html#attributes-2\n\t\t\t\tattrNames = value && value.match(rnothtmlwhite);\n\n\t\t\tif (attrNames && elem.nodeType === 1) {\n\t\t\t\twhile ((name = attrNames[i++])) {\n\t\t\t\t\telem.removeAttribute(name);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\n\t// Hooks for boolean attributes\n\tboolHook = {\n\t\tset: function (elem, value, name) {\n\t\t\tif (value === false) {\n\n\t\t\t\t// Remove boolean attributes when set to false\n\t\t\t\tjQuery.removeAttr(elem, name);\n\t\t\t} else {\n\t\t\t\telem.setAttribute(name, name);\n\t\t\t}\n\t\t\treturn name;\n\t\t}\n\t};\n\n\tjQuery.each(jQuery.expr.match.bool.source.match(/\\w+/g), function (_i, name) {\n\t\tvar getter = attrHandle[name] || jQuery.find.attr;\n\n\t\tattrHandle[name] = function (elem, name, isXML) {\n\t\t\tvar ret, handle,\n\t\t\t\tlowercaseName = name.toLowerCase();\n\n\t\t\tif (!isXML) {\n\n\t\t\t\t// Avoid an infinite loop by temporarily removing this function from the getter\n\t\t\t\thandle = attrHandle[lowercaseName];\n\t\t\t\tattrHandle[lowercaseName] = ret;\n\t\t\t\tret = getter(elem, name, isXML) != null ?\n\t\t\t\t\tlowercaseName :\n\t\t\t\t\tnull;\n\t\t\t\tattrHandle[lowercaseName] = handle;\n\t\t\t}\n\t\t\treturn ret;\n\t\t};\n\t});\n\n\n\n\n\tvar rfocusable = /^(?:input|select|textarea|button)$/i,\n\t\trclickable = /^(?:a|area)$/i;\n\n\tjQuery.fn.extend({\n\t\tprop: function (name, value) {\n\t\t\treturn access(this, jQuery.prop, name, value, arguments.length > 1);\n\t\t},\n\n\t\tremoveProp: function (name) {\n\t\t\treturn this.each(function () {\n\t\t\t\tdelete this[jQuery.propFix[name] || name];\n\t\t\t});\n\t\t}\n\t});\n\n\tjQuery.extend({\n\t\tprop: function (elem, name, value) {\n\t\t\tvar ret, hooks,\n\t\t\t\tnType = elem.nodeType;\n\n\t\t\t// Don't get/set properties on text, comment and attribute nodes\n\t\t\tif (nType === 3 || nType === 8 || nType === 2) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (nType !== 1 || !jQuery.isXMLDoc(elem)) {\n\n\t\t\t\t// Fix name and attach hooks\n\t\t\t\tname = jQuery.propFix[name] || name;\n\t\t\t\thooks = jQuery.propHooks[name];\n\t\t\t}\n\n\t\t\tif (value !== undefined) {\n\t\t\t\tif (hooks && \"set\" in hooks &&\n\t\t\t\t\t(ret = hooks.set(elem, value, name)) !== undefined) {\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\n\t\t\t\treturn (elem[name] = value);\n\t\t\t}\n\n\t\t\tif (hooks && \"get\" in hooks && (ret = hooks.get(elem, name)) !== null) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\treturn elem[name];\n\t\t},\n\n\t\tpropHooks: {\n\t\t\ttabIndex: {\n\t\t\t\tget: function (elem) {\n\n\t\t\t\t\t// Support: IE <=9 - 11 only\n\t\t\t\t\t// elem.tabIndex doesn't always return the\n\t\t\t\t\t// correct value when it hasn't been explicitly set\n\t\t\t\t\t// Use proper attribute retrieval (trac-12072)\n\t\t\t\t\tvar tabindex = jQuery.find.attr(elem, \"tabindex\");\n\n\t\t\t\t\tif (tabindex) {\n\t\t\t\t\t\treturn parseInt(tabindex, 10);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (\n\t\t\t\t\t\trfocusable.test(elem.nodeName) ||\n\t\t\t\t\t\trclickable.test(elem.nodeName) &&\n\t\t\t\t\t\telem.href\n\t\t\t\t\t) {\n\t\t\t\t\t\treturn 0;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn -1;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tpropFix: {\n\t\t\t\"for\": \"htmlFor\",\n\t\t\t\"class\": \"className\"\n\t\t}\n\t});\n\n\t// Support: IE <=11 only\n\t// Accessing the selectedIndex property\n\t// forces the browser to respect setting selected\n\t// on the option\n\t// The getter ensures a default option is selected\n\t// when in an optgroup\n\t// eslint rule \"no-unused-expressions\" is disabled for this code\n\t// since it considers such accessions noop\n\tif (!support.optSelected) {\n\t\tjQuery.propHooks.selected = {\n\t\t\tget: function (elem) {\n\n\t\t\t\t/* eslint no-unused-expressions: \"off\" */\n\n\t\t\t\tvar parent = elem.parentNode;\n\t\t\t\tif (parent && parent.parentNode) {\n\t\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t\t}\n\t\t\t\treturn null;\n\t\t\t},\n\t\t\tset: function (elem) {\n\n\t\t\t\t/* eslint no-unused-expressions: \"off\" */\n\n\t\t\t\tvar parent = elem.parentNode;\n\t\t\t\tif (parent) {\n\t\t\t\t\tparent.selectedIndex;\n\n\t\t\t\t\tif (parent.parentNode) {\n\t\t\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n\n\tjQuery.each([\n\t\t\"tabIndex\",\n\t\t\"readOnly\",\n\t\t\"maxLength\",\n\t\t\"cellSpacing\",\n\t\t\"cellPadding\",\n\t\t\"rowSpan\",\n\t\t\"colSpan\",\n\t\t\"useMap\",\n\t\t\"frameBorder\",\n\t\t\"contentEditable\"\n\t], function () {\n\t\tjQuery.propFix[this.toLowerCase()] = this;\n\t});\n\n\n\n\n\t// Strip and collapse whitespace according to HTML spec\n\t// https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace\n\tfunction stripAndCollapse(value) {\n\t\tvar tokens = value.match(rnothtmlwhite) || [];\n\t\treturn tokens.join(\" \");\n\t}\n\n\n\tfunction getClass(elem) {\n\t\treturn elem.getAttribute && elem.getAttribute(\"class\") || \"\";\n\t}\n\n\tfunction classesToArray(value) {\n\t\tif (Array.isArray(value)) {\n\t\t\treturn value;\n\t\t}\n\t\tif (typeof value === \"string\") {\n\t\t\treturn value.match(rnothtmlwhite) || [];\n\t\t}\n\t\treturn [];\n\t}\n\n\tjQuery.fn.extend({\n\t\taddClass: function (value) {\n\t\t\tvar classNames, cur, curValue, className, i, finalValue;\n\n\t\t\tif (isFunction(value)) {\n\t\t\t\treturn this.each(function (j) {\n\t\t\t\t\tjQuery(this).addClass(value.call(this, j, getClass(this)));\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tclassNames = classesToArray(value);\n\n\t\t\tif (classNames.length) {\n\t\t\t\treturn this.each(function () {\n\t\t\t\t\tcurValue = getClass(this);\n\t\t\t\t\tcur = this.nodeType === 1 && (\" \" + stripAndCollapse(curValue) + \" \");\n\n\t\t\t\t\tif (cur) {\n\t\t\t\t\t\tfor (i = 0; i < classNames.length; i++) {\n\t\t\t\t\t\t\tclassName = classNames[i];\n\t\t\t\t\t\t\tif (cur.indexOf(\" \" + className + \" \") < 0) {\n\t\t\t\t\t\t\t\tcur += className + \" \";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\t\tfinalValue = stripAndCollapse(cur);\n\t\t\t\t\t\tif (curValue !== finalValue) {\n\t\t\t\t\t\t\tthis.setAttribute(\"class\", finalValue);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn this;\n\t\t},\n\n\t\tremoveClass: function (value) {\n\t\t\tvar classNames, cur, curValue, className, i, finalValue;\n\n\t\t\tif (isFunction(value)) {\n\t\t\t\treturn this.each(function (j) {\n\t\t\t\t\tjQuery(this).removeClass(value.call(this, j, getClass(this)));\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (!arguments.length) {\n\t\t\t\treturn this.attr(\"class\", \"\");\n\t\t\t}\n\n\t\t\tclassNames = classesToArray(value);\n\n\t\t\tif (classNames.length) {\n\t\t\t\treturn this.each(function () {\n\t\t\t\t\tcurValue = getClass(this);\n\n\t\t\t\t\t// This expression is here for better compressibility (see addClass)\n\t\t\t\t\tcur = this.nodeType === 1 && (\" \" + stripAndCollapse(curValue) + \" \");\n\n\t\t\t\t\tif (cur) {\n\t\t\t\t\t\tfor (i = 0; i < classNames.length; i++) {\n\t\t\t\t\t\t\tclassName = classNames[i];\n\n\t\t\t\t\t\t\t// Remove *all* instances\n\t\t\t\t\t\t\twhile (cur.indexOf(\" \" + className + \" \") > -1) {\n\t\t\t\t\t\t\t\tcur = cur.replace(\" \" + className + \" \", \" \");\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\t\tfinalValue = stripAndCollapse(cur);\n\t\t\t\t\t\tif (curValue !== finalValue) {\n\t\t\t\t\t\t\tthis.setAttribute(\"class\", finalValue);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn this;\n\t\t},\n\n\t\ttoggleClass: function (value, stateVal) {\n\t\t\tvar classNames, className, i, self,\n\t\t\t\ttype = typeof value,\n\t\t\t\tisValidValue = type === \"string\" || Array.isArray(value);\n\n\t\t\tif (isFunction(value)) {\n\t\t\t\treturn this.each(function (i) {\n\t\t\t\t\tjQuery(this).toggleClass(\n\t\t\t\t\t\tvalue.call(this, i, getClass(this), stateVal),\n\t\t\t\t\t\tstateVal\n\t\t\t\t\t);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (typeof stateVal === \"boolean\" && isValidValue) {\n\t\t\t\treturn stateVal ? this.addClass(value) : this.removeClass(value);\n\t\t\t}\n\n\t\t\tclassNames = classesToArray(value);\n\n\t\t\treturn this.each(function () {\n\t\t\t\tif (isValidValue) {\n\n\t\t\t\t\t// Toggle individual class names\n\t\t\t\t\tself = jQuery(this);\n\n\t\t\t\t\tfor (i = 0; i < classNames.length; i++) {\n\t\t\t\t\t\tclassName = classNames[i];\n\n\t\t\t\t\t\t// Check each className given, space separated list\n\t\t\t\t\t\tif (self.hasClass(className)) {\n\t\t\t\t\t\t\tself.removeClass(className);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tself.addClass(className);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Toggle whole class name\n\t\t\t\t} else if (value === undefined || type === \"boolean\") {\n\t\t\t\t\tclassName = getClass(this);\n\t\t\t\t\tif (className) {\n\n\t\t\t\t\t\t// Store className if set\n\t\t\t\t\t\tdataPriv.set(this, \"__className__\", className);\n\t\t\t\t\t}\n\n\t\t\t\t\t// If the element has a class name or if we're passed `false`,\n\t\t\t\t\t// then remove the whole classname (if there was one, the above saved it).\n\t\t\t\t\t// Otherwise bring back whatever was previously saved (if anything),\n\t\t\t\t\t// falling back to the empty string if nothing was stored.\n\t\t\t\t\tif (this.setAttribute) {\n\t\t\t\t\t\tthis.setAttribute(\"class\",\n\t\t\t\t\t\t\tclassName || value === false ?\n\t\t\t\t\t\t\t\t\"\" :\n\t\t\t\t\t\t\t\tdataPriv.get(this, \"__className__\") || \"\"\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\thasClass: function (selector) {\n\t\t\tvar className, elem,\n\t\t\t\ti = 0;\n\n\t\t\tclassName = \" \" + selector + \" \";\n\t\t\twhile ((elem = this[i++])) {\n\t\t\t\tif (elem.nodeType === 1 &&\n\t\t\t\t\t(\" \" + stripAndCollapse(getClass(elem)) + \" \").indexOf(className) > -1) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn false;\n\t\t}\n\t});\n\n\n\n\n\tvar rreturn = /\\r/g;\n\n\tjQuery.fn.extend({\n\t\tval: function (value) {\n\t\t\tvar hooks, ret, valueIsFunction,\n\t\t\t\telem = this[0];\n\n\t\t\tif (!arguments.length) {\n\t\t\t\tif (elem) {\n\t\t\t\t\thooks = jQuery.valHooks[elem.type] ||\n\t\t\t\t\t\tjQuery.valHooks[elem.nodeName.toLowerCase()];\n\n\t\t\t\t\tif (hooks &&\n\t\t\t\t\t\t\"get\" in hooks &&\n\t\t\t\t\t\t(ret = hooks.get(elem, \"value\")) !== undefined\n\t\t\t\t\t) {\n\t\t\t\t\t\treturn ret;\n\t\t\t\t\t}\n\n\t\t\t\t\tret = elem.value;\n\n\t\t\t\t\t// Handle most common string cases\n\t\t\t\t\tif (typeof ret === \"string\") {\n\t\t\t\t\t\treturn ret.replace(rreturn, \"\");\n\t\t\t\t\t}\n\n\t\t\t\t\t// Handle cases where value is null/undef or number\n\t\t\t\t\treturn ret == null ? \"\" : ret;\n\t\t\t\t}\n\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvalueIsFunction = isFunction(value);\n\n\t\t\treturn this.each(function (i) {\n\t\t\t\tvar val;\n\n\t\t\t\tif (this.nodeType !== 1) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (valueIsFunction) {\n\t\t\t\t\tval = value.call(this, i, jQuery(this).val());\n\t\t\t\t} else {\n\t\t\t\t\tval = value;\n\t\t\t\t}\n\n\t\t\t\t// Treat null/undefined as \"\"; convert numbers to string\n\t\t\t\tif (val == null) {\n\t\t\t\t\tval = \"\";\n\n\t\t\t\t} else if (typeof val === \"number\") {\n\t\t\t\t\tval += \"\";\n\n\t\t\t\t} else if (Array.isArray(val)) {\n\t\t\t\t\tval = jQuery.map(val, function (value) {\n\t\t\t\t\t\treturn value == null ? \"\" : value + \"\";\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\thooks = jQuery.valHooks[this.type] || jQuery.valHooks[this.nodeName.toLowerCase()];\n\n\t\t\t\t// If set returns undefined, fall back to normal setting\n\t\t\t\tif (!hooks || !(\"set\" in hooks) || hooks.set(this, val, \"value\") === undefined) {\n\t\t\t\t\tthis.value = val;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t});\n\n\tjQuery.extend({\n\t\tvalHooks: {\n\t\t\toption: {\n\t\t\t\tget: function (elem) {\n\n\t\t\t\t\tvar val = jQuery.find.attr(elem, \"value\");\n\t\t\t\t\treturn val != null ?\n\t\t\t\t\t\tval :\n\n\t\t\t\t\t\t// Support: IE <=10 - 11 only\n\t\t\t\t\t\t// option.text throws exceptions (trac-14686, trac-14858)\n\t\t\t\t\t\t// Strip and collapse whitespace\n\t\t\t\t\t\t// https://html.spec.whatwg.org/#strip-and-collapse-whitespace\n\t\t\t\t\t\tstripAndCollapse(jQuery.text(elem));\n\t\t\t\t}\n\t\t\t},\n\t\t\tselect: {\n\t\t\t\tget: function (elem) {\n\t\t\t\t\tvar value, option, i,\n\t\t\t\t\t\toptions = elem.options,\n\t\t\t\t\t\tindex = elem.selectedIndex,\n\t\t\t\t\t\tone = elem.type === \"select-one\",\n\t\t\t\t\t\tvalues = one ? null : [],\n\t\t\t\t\t\tmax = one ? index + 1 : options.length;\n\n\t\t\t\t\tif (index < 0) {\n\t\t\t\t\t\ti = max;\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\ti = one ? index : 0;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Loop through all the selected options\n\t\t\t\t\tfor (; i < max; i++) {\n\t\t\t\t\t\toption = options[i];\n\n\t\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t\t// IE8-9 doesn't update selected after form reset (trac-2551)\n\t\t\t\t\t\tif ((option.selected || i === index) &&\n\n\t\t\t\t\t\t\t// Don't return options that are disabled or in a disabled optgroup\n\t\t\t\t\t\t\t!option.disabled &&\n\t\t\t\t\t\t\t(!option.parentNode.disabled ||\n\t\t\t\t\t\t\t\t!nodeName(option.parentNode, \"optgroup\"))) {\n\n\t\t\t\t\t\t\t// Get the specific value for the option\n\t\t\t\t\t\t\tvalue = jQuery(option).val();\n\n\t\t\t\t\t\t\t// We don't need an array for one selects\n\t\t\t\t\t\t\tif (one) {\n\t\t\t\t\t\t\t\treturn value;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Multi-Selects return an array\n\t\t\t\t\t\t\tvalues.push(value);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn values;\n\t\t\t\t},\n\n\t\t\t\tset: function (elem, value) {\n\t\t\t\t\tvar optionSet, option,\n\t\t\t\t\t\toptions = elem.options,\n\t\t\t\t\t\tvalues = jQuery.makeArray(value),\n\t\t\t\t\t\ti = options.length;\n\n\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\toption = options[i];\n\n\t\t\t\t\t\t/* eslint-disable no-cond-assign */\n\n\t\t\t\t\t\tif (option.selected =\n\t\t\t\t\t\t\tjQuery.inArray(jQuery.valHooks.option.get(option), values) > -1\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\toptionSet = true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t/* eslint-enable no-cond-assign */\n\t\t\t\t\t}\n\n\t\t\t\t\t// Force browsers to behave consistently when non-matching value is set\n\t\t\t\t\tif (!optionSet) {\n\t\t\t\t\t\telem.selectedIndex = -1;\n\t\t\t\t\t}\n\t\t\t\t\treturn values;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\n\t// Radios and checkboxes getter/setter\n\tjQuery.each([\"radio\", \"checkbox\"], function () {\n\t\tjQuery.valHooks[this] = {\n\t\t\tset: function (elem, value) {\n\t\t\t\tif (Array.isArray(value)) {\n\t\t\t\t\treturn (elem.checked = jQuery.inArray(jQuery(elem).val(), value) > -1);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\tif (!support.checkOn) {\n\t\t\tjQuery.valHooks[this].get = function (elem) {\n\t\t\t\treturn elem.getAttribute(\"value\") === null ? \"on\" : elem.value;\n\t\t\t};\n\t\t}\n\t});\n\n\n\n\n\t// Return jQuery for attributes-only inclusion\n\tvar location = window.location;\n\n\tvar nonce = { guid: Date.now() };\n\n\tvar rquery = (/\\?/);\n\n\n\n\t// Cross-browser xml parsing\n\tjQuery.parseXML = function (data) {\n\t\tvar xml, parserErrorElem;\n\t\tif (!data || typeof data !== \"string\") {\n\t\t\treturn null;\n\t\t}\n\n\t\t// Support: IE 9 - 11 only\n\t\t// IE throws on parseFromString with invalid input.\n\t\ttry {\n\t\t\txml = (new window.DOMParser()).parseFromString(data, \"text/xml\");\n\t\t} catch (e) { }\n\n\t\tparserErrorElem = xml && xml.getElementsByTagName(\"parsererror\")[0];\n\t\tif (!xml || parserErrorElem) {\n\t\t\tjQuery.error(\"Invalid XML: \" + (\n\t\t\t\tparserErrorElem ?\n\t\t\t\t\tjQuery.map(parserErrorElem.childNodes, function (el) {\n\t\t\t\t\t\treturn el.textContent;\n\t\t\t\t\t}).join(\"\\n\") :\n\t\t\t\t\tdata\n\t\t\t));\n\t\t}\n\t\treturn xml;\n\t};\n\n\n\tvar rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,\n\t\tstopPropagationCallback = function (e) {\n\t\t\te.stopPropagation();\n\t\t};\n\n\tjQuery.extend(jQuery.event, {\n\n\t\ttrigger: function (event, data, elem, onlyHandlers) {\n\n\t\t\tvar i, cur, tmp, bubbleType, ontype, handle, special, lastElement,\n\t\t\t\teventPath = [elem || document],\n\t\t\t\ttype = hasOwn.call(event, \"type\") ? event.type : event,\n\t\t\t\tnamespaces = hasOwn.call(event, \"namespace\") ? event.namespace.split(\".\") : [];\n\n\t\t\tcur = lastElement = tmp = elem = elem || document;\n\n\t\t\t// Don't do events on text and comment nodes\n\t\t\tif (elem.nodeType === 3 || elem.nodeType === 8) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// focus/blur morphs to focusin/out; ensure we're not firing them right now\n\t\t\tif (rfocusMorph.test(type + jQuery.event.triggered)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (type.indexOf(\".\") > -1) {\n\n\t\t\t\t// Namespaced trigger; create a regexp to match event type in handle()\n\t\t\t\tnamespaces = type.split(\".\");\n\t\t\t\ttype = namespaces.shift();\n\t\t\t\tnamespaces.sort();\n\t\t\t}\n\t\t\tontype = type.indexOf(\":\") < 0 && \"on\" + type;\n\n\t\t\t// Caller can pass in a jQuery.Event object, Object, or just an event type string\n\t\t\tevent = event[jQuery.expando] ?\n\t\t\t\tevent :\n\t\t\t\tnew jQuery.Event(type, typeof event === \"object\" && event);\n\n\t\t\t// Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)\n\t\t\tevent.isTrigger = onlyHandlers ? 2 : 3;\n\t\t\tevent.namespace = namespaces.join(\".\");\n\t\t\tevent.rnamespace = event.namespace ?\n\t\t\t\tnew RegExp(\"(^|\\\\.)\" + namespaces.join(\"\\\\.(?:.*\\\\.|)\") + \"(\\\\.|$)\") :\n\t\t\t\tnull;\n\n\t\t\t// Clean up the event in case it is being reused\n\t\t\tevent.result = undefined;\n\t\t\tif (!event.target) {\n\t\t\t\tevent.target = elem;\n\t\t\t}\n\n\t\t\t// Clone any incoming data and prepend the event, creating the handler arg list\n\t\t\tdata = data == null ?\n\t\t\t\t[event] :\n\t\t\t\tjQuery.makeArray(data, [event]);\n\n\t\t\t// Allow special events to draw outside the lines\n\t\t\tspecial = jQuery.event.special[type] || {};\n\t\t\tif (!onlyHandlers && special.trigger && special.trigger.apply(elem, data) === false) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Determine event propagation path in advance, per W3C events spec (trac-9951)\n\t\t\t// Bubble up to document, then to window; watch for a global ownerDocument var (trac-9724)\n\t\t\tif (!onlyHandlers && !special.noBubble && !isWindow(elem)) {\n\n\t\t\t\tbubbleType = special.delegateType || type;\n\t\t\t\tif (!rfocusMorph.test(bubbleType + type)) {\n\t\t\t\t\tcur = cur.parentNode;\n\t\t\t\t}\n\t\t\t\tfor (; cur; cur = cur.parentNode) {\n\t\t\t\t\teventPath.push(cur);\n\t\t\t\t\ttmp = cur;\n\t\t\t\t}\n\n\t\t\t\t// Only add window if we got to document (e.g., not plain obj or detached DOM)\n\t\t\t\tif (tmp === (elem.ownerDocument || document)) {\n\t\t\t\t\teventPath.push(tmp.defaultView || tmp.parentWindow || window);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Fire handlers on the event path\n\t\t\ti = 0;\n\t\t\twhile ((cur = eventPath[i++]) && !event.isPropagationStopped()) {\n\t\t\t\tlastElement = cur;\n\t\t\t\tevent.type = i > 1 ?\n\t\t\t\t\tbubbleType :\n\t\t\t\t\tspecial.bindType || type;\n\n\t\t\t\t// jQuery handler\n\t\t\t\thandle = (dataPriv.get(cur, \"events\") || Object.create(null))[event.type] &&\n\t\t\t\t\tdataPriv.get(cur, \"handle\");\n\t\t\t\tif (handle) {\n\t\t\t\t\thandle.apply(cur, data);\n\t\t\t\t}\n\n\t\t\t\t// Native handler\n\t\t\t\thandle = ontype && cur[ontype];\n\t\t\t\tif (handle && handle.apply && acceptData(cur)) {\n\t\t\t\t\tevent.result = handle.apply(cur, data);\n\t\t\t\t\tif (event.result === false) {\n\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tevent.type = type;\n\n\t\t\t// If nobody prevented the default action, do it now\n\t\t\tif (!onlyHandlers && !event.isDefaultPrevented()) {\n\n\t\t\t\tif ((!special._default ||\n\t\t\t\t\tspecial._default.apply(eventPath.pop(), data) === false) &&\n\t\t\t\t\tacceptData(elem)) {\n\n\t\t\t\t\t// Call a native DOM method on the target with the same name as the event.\n\t\t\t\t\t// Don't do default actions on window, that's where global variables be (trac-6170)\n\t\t\t\t\tif (ontype && isFunction(elem[type]) && !isWindow(elem)) {\n\n\t\t\t\t\t\t// Don't re-trigger an onFOO event when we call its FOO() method\n\t\t\t\t\t\ttmp = elem[ontype];\n\n\t\t\t\t\t\tif (tmp) {\n\t\t\t\t\t\t\telem[ontype] = null;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Prevent re-triggering of the same event, since we already bubbled it above\n\t\t\t\t\t\tjQuery.event.triggered = type;\n\n\t\t\t\t\t\tif (event.isPropagationStopped()) {\n\t\t\t\t\t\t\tlastElement.addEventListener(type, stopPropagationCallback);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\telem[type]();\n\n\t\t\t\t\t\tif (event.isPropagationStopped()) {\n\t\t\t\t\t\t\tlastElement.removeEventListener(type, stopPropagationCallback);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tjQuery.event.triggered = undefined;\n\n\t\t\t\t\t\tif (tmp) {\n\t\t\t\t\t\t\telem[ontype] = tmp;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn event.result;\n\t\t},\n\n\t\t// Piggyback on a donor event to simulate a different one\n\t\t// Used only for `focus(in | out)` events\n\t\tsimulate: function (type, elem, event) {\n\t\t\tvar e = jQuery.extend(\n\t\t\t\tnew jQuery.Event(),\n\t\t\t\tevent,\n\t\t\t\t{\n\t\t\t\t\ttype: type,\n\t\t\t\t\tisSimulated: true\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tjQuery.event.trigger(e, null, elem);\n\t\t}\n\n\t});\n\n\tjQuery.fn.extend({\n\n\t\ttrigger: function (type, data) {\n\t\t\treturn this.each(function () {\n\t\t\t\tjQuery.event.trigger(type, data, this);\n\t\t\t});\n\t\t},\n\t\ttriggerHandler: function (type, data) {\n\t\t\tvar elem = this[0];\n\t\t\tif (elem) {\n\t\t\t\treturn jQuery.event.trigger(type, data, elem, true);\n\t\t\t}\n\t\t}\n\t});\n\n\n\tvar\n\t\trbracket = /\\[\\]$/,\n\t\trCRLF = /\\r?\\n/g,\n\t\trsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,\n\t\trsubmittable = /^(?:input|select|textarea|keygen)/i;\n\n\tfunction buildParams(prefix, obj, traditional, add) {\n\t\tvar name;\n\n\t\tif (Array.isArray(obj)) {\n\n\t\t\t// Serialize array item.\n\t\t\tjQuery.each(obj, function (i, v) {\n\t\t\t\tif (traditional || rbracket.test(prefix)) {\n\n\t\t\t\t\t// Treat each array item as a scalar.\n\t\t\t\t\tadd(prefix, v);\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// Item is non-scalar (array or object), encode its numeric index.\n\t\t\t\t\tbuildParams(\n\t\t\t\t\t\tprefix + \"[\" + (typeof v === \"object\" && v != null ? i : \"\") + \"]\",\n\t\t\t\t\t\tv,\n\t\t\t\t\t\ttraditional,\n\t\t\t\t\t\tadd\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t});\n\n\t\t} else if (!traditional && toType(obj) === \"object\") {\n\n\t\t\t// Serialize object item.\n\t\t\tfor (name in obj) {\n\t\t\t\tbuildParams(prefix + \"[\" + name + \"]\", obj[name], traditional, add);\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// Serialize scalar item.\n\t\t\tadd(prefix, obj);\n\t\t}\n\t}\n\n\t// Serialize an array of form elements or a set of\n\t// key/values into a query string\n\tjQuery.param = function (a, traditional) {\n\t\tvar prefix,\n\t\t\ts = [],\n\t\t\tadd = function (key, valueOrFunction) {\n\n\t\t\t\t// If value is a function, invoke it and use its return value\n\t\t\t\tvar value = isFunction(valueOrFunction) ?\n\t\t\t\t\tvalueOrFunction() :\n\t\t\t\t\tvalueOrFunction;\n\n\t\t\t\ts[s.length] = encodeURIComponent(key) + \"=\" +\n\t\t\t\t\tencodeURIComponent(value == null ? \"\" : value);\n\t\t\t};\n\n\t\tif (a == null) {\n\t\t\treturn \"\";\n\t\t}\n\n\t\t// If an array was passed in, assume that it is an array of form elements.\n\t\tif (Array.isArray(a) || (a.jquery && !jQuery.isPlainObject(a))) {\n\n\t\t\t// Serialize the form elements\n\t\t\tjQuery.each(a, function () {\n\t\t\t\tadd(this.name, this.value);\n\t\t\t});\n\n\t\t} else {\n\n\t\t\t// If traditional, encode the \"old\" way (the way 1.3.2 or older\n\t\t\t// did it), otherwise encode params recursively.\n\t\t\tfor (prefix in a) {\n\t\t\t\tbuildParams(prefix, a[prefix], traditional, add);\n\t\t\t}\n\t\t}\n\n\t\t// Return the resulting serialization\n\t\treturn s.join(\"&\");\n\t};\n\n\tjQuery.fn.extend({\n\t\tserialize: function () {\n\t\t\treturn jQuery.param(this.serializeArray());\n\t\t},\n\t\tserializeArray: function () {\n\t\t\treturn this.map(function () {\n\n\t\t\t\t// Can add propHook for \"elements\" to filter or add form elements\n\t\t\t\tvar elements = jQuery.prop(this, \"elements\");\n\t\t\t\treturn elements ? jQuery.makeArray(elements) : this;\n\t\t\t}).filter(function () {\n\t\t\t\tvar type = this.type;\n\n\t\t\t\t// Use .is( \":disabled\" ) so that fieldset[disabled] works\n\t\t\t\treturn this.name && !jQuery(this).is(\":disabled\") &&\n\t\t\t\t\trsubmittable.test(this.nodeName) && !rsubmitterTypes.test(type) &&\n\t\t\t\t\t(this.checked || !rcheckableType.test(type));\n\t\t\t}).map(function (_i, elem) {\n\t\t\t\tvar val = jQuery(this).val();\n\n\t\t\t\tif (val == null) {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\n\t\t\t\tif (Array.isArray(val)) {\n\t\t\t\t\treturn jQuery.map(val, function (val) {\n\t\t\t\t\t\treturn { name: elem.name, value: val.replace(rCRLF, \"\\r\\n\") };\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\treturn { name: elem.name, value: val.replace(rCRLF, \"\\r\\n\") };\n\t\t\t}).get();\n\t\t}\n\t});\n\n\n\tvar\n\t\tr20 = /%20/g,\n\t\trhash = /#.*$/,\n\t\trantiCache = /([?&])_=[^&]*/,\n\t\trheaders = /^(.*?):[ \\t]*([^\\r\\n]*)$/mg,\n\n\t\t// trac-7653, trac-8125, trac-8152: local protocol detection\n\t\trlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,\n\t\trnoContent = /^(?:GET|HEAD)$/,\n\t\trprotocol = /^\\/\\//,\n\n\t\t/* Prefilters\n\t\t * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)\n\t\t * 2) These are called:\n\t\t *    - BEFORE asking for a transport\n\t\t *    - AFTER param serialization (s.data is a string if s.processData is true)\n\t\t * 3) key is the dataType\n\t\t * 4) the catchall symbol \"*\" can be used\n\t\t * 5) execution will start with transport dataType and THEN continue down to \"*\" if needed\n\t\t */\n\t\tprefilters = {},\n\n\t\t/* Transports bindings\n\t\t * 1) key is the dataType\n\t\t * 2) the catchall symbol \"*\" can be used\n\t\t * 3) selection will start with transport dataType and THEN go to \"*\" if needed\n\t\t */\n\t\ttransports = {},\n\n\t\t// Avoid comment-prolog char sequence (trac-10098); must appease lint and evade compression\n\t\tallTypes = \"*/\".concat(\"*\"),\n\n\t\t// Anchor tag for parsing the document origin\n\t\toriginAnchor = document.createElement(\"a\");\n\n\toriginAnchor.href = location.href;\n\n\t// Base \"constructor\" for jQuery.ajaxPrefilter and jQuery.ajaxTransport\n\tfunction addToPrefiltersOrTransports(structure) {\n\n\t\t// dataTypeExpression is optional and defaults to \"*\"\n\t\treturn function (dataTypeExpression, func) {\n\n\t\t\tif (typeof dataTypeExpression !== \"string\") {\n\t\t\t\tfunc = dataTypeExpression;\n\t\t\t\tdataTypeExpression = \"*\";\n\t\t\t}\n\n\t\t\tvar dataType,\n\t\t\t\ti = 0,\n\t\t\t\tdataTypes = dataTypeExpression.toLowerCase().match(rnothtmlwhite) || [];\n\n\t\t\tif (isFunction(func)) {\n\n\t\t\t\t// For each dataType in the dataTypeExpression\n\t\t\t\twhile ((dataType = dataTypes[i++])) {\n\n\t\t\t\t\t// Prepend if requested\n\t\t\t\t\tif (dataType[0] === \"+\") {\n\t\t\t\t\t\tdataType = dataType.slice(1) || \"*\";\n\t\t\t\t\t\t(structure[dataType] = structure[dataType] || []).unshift(func);\n\n\t\t\t\t\t\t// Otherwise append\n\t\t\t\t\t} else {\n\t\t\t\t\t\t(structure[dataType] = structure[dataType] || []).push(func);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n\n\t// Base inspection function for prefilters and transports\n\tfunction inspectPrefiltersOrTransports(structure, options, originalOptions, jqXHR) {\n\n\t\tvar inspected = {},\n\t\t\tseekingTransport = (structure === transports);\n\n\t\tfunction inspect(dataType) {\n\t\t\tvar selected;\n\t\t\tinspected[dataType] = true;\n\t\t\tjQuery.each(structure[dataType] || [], function (_, prefilterOrFactory) {\n\t\t\t\tvar dataTypeOrTransport = prefilterOrFactory(options, originalOptions, jqXHR);\n\t\t\t\tif (typeof dataTypeOrTransport === \"string\" &&\n\t\t\t\t\t!seekingTransport && !inspected[dataTypeOrTransport]) {\n\n\t\t\t\t\toptions.dataTypes.unshift(dataTypeOrTransport);\n\t\t\t\t\tinspect(dataTypeOrTransport);\n\t\t\t\t\treturn false;\n\t\t\t\t} else if (seekingTransport) {\n\t\t\t\t\treturn !(selected = dataTypeOrTransport);\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn selected;\n\t\t}\n\n\t\treturn inspect(options.dataTypes[0]) || !inspected[\"*\"] && inspect(\"*\");\n\t}\n\n\t// A special extend for ajax options\n\t// that takes \"flat\" options (not to be deep extended)\n\t// Fixes trac-9887\n\tfunction ajaxExtend(target, src) {\n\t\tvar key, deep,\n\t\t\tflatOptions = jQuery.ajaxSettings.flatOptions || {};\n\n\t\tfor (key in src) {\n\t\t\tif (src[key] !== undefined) {\n\t\t\t\t(flatOptions[key] ? target : (deep || (deep = {})))[key] = src[key];\n\t\t\t}\n\t\t}\n\t\tif (deep) {\n\t\t\tjQuery.extend(true, target, deep);\n\t\t}\n\n\t\treturn target;\n\t}\n\n\t/* Handles responses to an ajax request:\n\t * - finds the right dataType (mediates between content-type and expected dataType)\n\t * - returns the corresponding response\n\t */\n\tfunction ajaxHandleResponses(s, jqXHR, responses) {\n\n\t\tvar ct, type, finalDataType, firstDataType,\n\t\t\tcontents = s.contents,\n\t\t\tdataTypes = s.dataTypes;\n\n\t\t// Remove auto dataType and get content-type in the process\n\t\twhile (dataTypes[0] === \"*\") {\n\t\t\tdataTypes.shift();\n\t\t\tif (ct === undefined) {\n\t\t\t\tct = s.mimeType || jqXHR.getResponseHeader(\"Content-Type\");\n\t\t\t}\n\t\t}\n\n\t\t// Check if we're dealing with a known content-type\n\t\tif (ct) {\n\t\t\tfor (type in contents) {\n\t\t\t\tif (contents[type] && contents[type].test(ct)) {\n\t\t\t\t\tdataTypes.unshift(type);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Check to see if we have a response for the expected dataType\n\t\tif (dataTypes[0] in responses) {\n\t\t\tfinalDataType = dataTypes[0];\n\t\t} else {\n\n\t\t\t// Try convertible dataTypes\n\t\t\tfor (type in responses) {\n\t\t\t\tif (!dataTypes[0] || s.converters[type + \" \" + dataTypes[0]]) {\n\t\t\t\t\tfinalDataType = type;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (!firstDataType) {\n\t\t\t\t\tfirstDataType = type;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Or just use first one\n\t\t\tfinalDataType = finalDataType || firstDataType;\n\t\t}\n\n\t\t// If we found a dataType\n\t\t// We add the dataType to the list if needed\n\t\t// and return the corresponding response\n\t\tif (finalDataType) {\n\t\t\tif (finalDataType !== dataTypes[0]) {\n\t\t\t\tdataTypes.unshift(finalDataType);\n\t\t\t}\n\t\t\treturn responses[finalDataType];\n\t\t}\n\t}\n\n\t/* Chain conversions given the request and the original response\n\t * Also sets the responseXXX fields on the jqXHR instance\n\t */\n\tfunction ajaxConvert(s, response, jqXHR, isSuccess) {\n\t\tvar conv2, current, conv, tmp, prev,\n\t\t\tconverters = {},\n\n\t\t\t// Work with a copy of dataTypes in case we need to modify it for conversion\n\t\t\tdataTypes = s.dataTypes.slice();\n\n\t\t// Create converters map with lowercased keys\n\t\tif (dataTypes[1]) {\n\t\t\tfor (conv in s.converters) {\n\t\t\t\tconverters[conv.toLowerCase()] = s.converters[conv];\n\t\t\t}\n\t\t}\n\n\t\tcurrent = dataTypes.shift();\n\n\t\t// Convert to each sequential dataType\n\t\twhile (current) {\n\n\t\t\tif (s.responseFields[current]) {\n\t\t\t\tjqXHR[s.responseFields[current]] = response;\n\t\t\t}\n\n\t\t\t// Apply the dataFilter if provided\n\t\t\tif (!prev && isSuccess && s.dataFilter) {\n\t\t\t\tresponse = s.dataFilter(response, s.dataType);\n\t\t\t}\n\n\t\t\tprev = current;\n\t\t\tcurrent = dataTypes.shift();\n\n\t\t\tif (current) {\n\n\t\t\t\t// There's only work to do if current dataType is non-auto\n\t\t\t\tif (current === \"*\") {\n\n\t\t\t\t\tcurrent = prev;\n\n\t\t\t\t\t// Convert response if prev dataType is non-auto and differs from current\n\t\t\t\t} else if (prev !== \"*\" && prev !== current) {\n\n\t\t\t\t\t// Seek a direct converter\n\t\t\t\t\tconv = converters[prev + \" \" + current] || converters[\"* \" + current];\n\n\t\t\t\t\t// If none found, seek a pair\n\t\t\t\t\tif (!conv) {\n\t\t\t\t\t\tfor (conv2 in converters) {\n\n\t\t\t\t\t\t\t// If conv2 outputs current\n\t\t\t\t\t\t\ttmp = conv2.split(\" \");\n\t\t\t\t\t\t\tif (tmp[1] === current) {\n\n\t\t\t\t\t\t\t\t// If prev can be converted to accepted input\n\t\t\t\t\t\t\t\tconv = converters[prev + \" \" + tmp[0]] ||\n\t\t\t\t\t\t\t\t\tconverters[\"* \" + tmp[0]];\n\t\t\t\t\t\t\t\tif (conv) {\n\n\t\t\t\t\t\t\t\t\t// Condense equivalence converters\n\t\t\t\t\t\t\t\t\tif (conv === true) {\n\t\t\t\t\t\t\t\t\t\tconv = converters[conv2];\n\n\t\t\t\t\t\t\t\t\t\t// Otherwise, insert the intermediate dataType\n\t\t\t\t\t\t\t\t\t} else if (converters[conv2] !== true) {\n\t\t\t\t\t\t\t\t\t\tcurrent = tmp[0];\n\t\t\t\t\t\t\t\t\t\tdataTypes.unshift(tmp[1]);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Apply converter (if not an equivalence)\n\t\t\t\t\tif (conv !== true) {\n\n\t\t\t\t\t\t// Unless errors are allowed to bubble, catch and return them\n\t\t\t\t\t\tif (conv && s.throws) {\n\t\t\t\t\t\t\tresponse = conv(response);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\tresponse = conv(response);\n\t\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\tstate: \"parsererror\",\n\t\t\t\t\t\t\t\t\terror: conv ? e : \"No conversion from \" + prev + \" to \" + current\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn { state: \"success\", data: response };\n\t}\n\n\tjQuery.extend({\n\n\t\t// Counter for holding the number of active queries\n\t\tactive: 0,\n\n\t\t// Last-Modified header cache for next request\n\t\tlastModified: {},\n\t\tetag: {},\n\n\t\tajaxSettings: {\n\t\t\turl: location.href,\n\t\t\ttype: \"GET\",\n\t\t\tisLocal: rlocalProtocol.test(location.protocol),\n\t\t\tglobal: true,\n\t\t\tprocessData: true,\n\t\t\tasync: true,\n\t\t\tcontentType: \"application/x-www-form-urlencoded; charset=UTF-8\",\n\n\t\t\t/*\n\t\t\ttimeout: 0,\n\t\t\tdata: null,\n\t\t\tdataType: null,\n\t\t\tusername: null,\n\t\t\tpassword: null,\n\t\t\tcache: null,\n\t\t\tthrows: false,\n\t\t\ttraditional: false,\n\t\t\theaders: {},\n\t\t\t*/\n\n\t\t\taccepts: {\n\t\t\t\t\"*\": allTypes,\n\t\t\t\ttext: \"text/plain\",\n\t\t\t\thtml: \"text/html\",\n\t\t\t\txml: \"application/xml, text/xml\",\n\t\t\t\tjson: \"application/json, text/javascript\"\n\t\t\t},\n\n\t\t\tcontents: {\n\t\t\t\txml: /\\bxml\\b/,\n\t\t\t\thtml: /\\bhtml/,\n\t\t\t\tjson: /\\bjson\\b/\n\t\t\t},\n\n\t\t\tresponseFields: {\n\t\t\t\txml: \"responseXML\",\n\t\t\t\ttext: \"responseText\",\n\t\t\t\tjson: \"responseJSON\"\n\t\t\t},\n\n\t\t\t// Data converters\n\t\t\t// Keys separate source (or catchall \"*\") and destination types with a single space\n\t\t\tconverters: {\n\n\t\t\t\t// Convert anything to text\n\t\t\t\t\"* text\": String,\n\n\t\t\t\t// Text to html (true = no transformation)\n\t\t\t\t\"text html\": true,\n\n\t\t\t\t// Evaluate text as a json expression\n\t\t\t\t\"text json\": JSON.parse,\n\n\t\t\t\t// Parse text as xml\n\t\t\t\t\"text xml\": jQuery.parseXML\n\t\t\t},\n\n\t\t\t// For options that shouldn't be deep extended:\n\t\t\t// you can add your own custom options here if\n\t\t\t// and when you create one that shouldn't be\n\t\t\t// deep extended (see ajaxExtend)\n\t\t\tflatOptions: {\n\t\t\t\turl: true,\n\t\t\t\tcontext: true\n\t\t\t}\n\t\t},\n\n\t\t// Creates a full fledged settings object into target\n\t\t// with both ajaxSettings and settings fields.\n\t\t// If target is omitted, writes into ajaxSettings.\n\t\tajaxSetup: function (target, settings) {\n\t\t\treturn settings ?\n\n\t\t\t\t// Building a settings object\n\t\t\t\tajaxExtend(ajaxExtend(target, jQuery.ajaxSettings), settings) :\n\n\t\t\t\t// Extending ajaxSettings\n\t\t\t\tajaxExtend(jQuery.ajaxSettings, target);\n\t\t},\n\n\t\tajaxPrefilter: addToPrefiltersOrTransports(prefilters),\n\t\tajaxTransport: addToPrefiltersOrTransports(transports),\n\n\t\t// Main method\n\t\tajax: function (url, options) {\n\n\t\t\t// If url is an object, simulate pre-1.5 signature\n\t\t\tif (typeof url === \"object\") {\n\t\t\t\toptions = url;\n\t\t\t\turl = undefined;\n\t\t\t}\n\n\t\t\t// Force options to be an object\n\t\t\toptions = options || {};\n\n\t\t\tvar transport,\n\n\t\t\t\t// URL without anti-cache param\n\t\t\t\tcacheURL,\n\n\t\t\t\t// Response headers\n\t\t\t\tresponseHeadersString,\n\t\t\t\tresponseHeaders,\n\n\t\t\t\t// timeout handle\n\t\t\t\ttimeoutTimer,\n\n\t\t\t\t// Url cleanup var\n\t\t\t\turlAnchor,\n\n\t\t\t\t// Request state (becomes false upon send and true upon completion)\n\t\t\t\tcompleted,\n\n\t\t\t\t// To know if global events are to be dispatched\n\t\t\t\tfireGlobals,\n\n\t\t\t\t// Loop variable\n\t\t\t\ti,\n\n\t\t\t\t// uncached part of the url\n\t\t\t\tuncached,\n\n\t\t\t\t// Create the final options object\n\t\t\t\ts = jQuery.ajaxSetup({}, options),\n\n\t\t\t\t// Callbacks context\n\t\t\t\tcallbackContext = s.context || s,\n\n\t\t\t\t// Context for global events is callbackContext if it is a DOM node or jQuery collection\n\t\t\t\tglobalEventContext = s.context &&\n\t\t\t\t\t(callbackContext.nodeType || callbackContext.jquery) ?\n\t\t\t\t\tjQuery(callbackContext) :\n\t\t\t\t\tjQuery.event,\n\n\t\t\t\t// Deferreds\n\t\t\t\tdeferred = jQuery.Deferred(),\n\t\t\t\tcompleteDeferred = jQuery.Callbacks(\"once memory\"),\n\n\t\t\t\t// Status-dependent callbacks\n\t\t\t\tstatusCode = s.statusCode || {},\n\n\t\t\t\t// Headers (they are sent all at once)\n\t\t\t\trequestHeaders = {},\n\t\t\t\trequestHeadersNames = {},\n\n\t\t\t\t// Default abort message\n\t\t\t\tstrAbort = \"canceled\",\n\n\t\t\t\t// Fake xhr\n\t\t\t\tjqXHR = {\n\t\t\t\t\treadyState: 0,\n\n\t\t\t\t\t// Builds headers hashtable if needed\n\t\t\t\t\tgetResponseHeader: function (key) {\n\t\t\t\t\t\tvar match;\n\t\t\t\t\t\tif (completed) {\n\t\t\t\t\t\t\tif (!responseHeaders) {\n\t\t\t\t\t\t\t\tresponseHeaders = {};\n\t\t\t\t\t\t\t\twhile ((match = rheaders.exec(responseHeadersString))) {\n\t\t\t\t\t\t\t\t\tresponseHeaders[match[1].toLowerCase() + \" \"] =\n\t\t\t\t\t\t\t\t\t\t(responseHeaders[match[1].toLowerCase() + \" \"] || [])\n\t\t\t\t\t\t\t\t\t\t\t.concat(match[2]);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tmatch = responseHeaders[key.toLowerCase() + \" \"];\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn match == null ? null : match.join(\", \");\n\t\t\t\t\t},\n\n\t\t\t\t\t// Raw string\n\t\t\t\t\tgetAllResponseHeaders: function () {\n\t\t\t\t\t\treturn completed ? responseHeadersString : null;\n\t\t\t\t\t},\n\n\t\t\t\t\t// Caches the header\n\t\t\t\t\tsetRequestHeader: function (name, value) {\n\t\t\t\t\t\tif (completed == null) {\n\t\t\t\t\t\t\tname = requestHeadersNames[name.toLowerCase()] =\n\t\t\t\t\t\t\t\trequestHeadersNames[name.toLowerCase()] || name;\n\t\t\t\t\t\t\trequestHeaders[name] = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn this;\n\t\t\t\t\t},\n\n\t\t\t\t\t// Overrides response content-type header\n\t\t\t\t\toverrideMimeType: function (type) {\n\t\t\t\t\t\tif (completed == null) {\n\t\t\t\t\t\t\ts.mimeType = type;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn this;\n\t\t\t\t\t},\n\n\t\t\t\t\t// Status-dependent callbacks\n\t\t\t\t\tstatusCode: function (map) {\n\t\t\t\t\t\tvar code;\n\t\t\t\t\t\tif (map) {\n\t\t\t\t\t\t\tif (completed) {\n\n\t\t\t\t\t\t\t\t// Execute the appropriate callbacks\n\t\t\t\t\t\t\t\tjqXHR.always(map[jqXHR.status]);\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t// Lazy-add the new callbacks in a way that preserves old ones\n\t\t\t\t\t\t\t\tfor (code in map) {\n\t\t\t\t\t\t\t\t\tstatusCode[code] = [statusCode[code], map[code]];\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn this;\n\t\t\t\t\t},\n\n\t\t\t\t\t// Cancel the request\n\t\t\t\t\tabort: function (statusText) {\n\t\t\t\t\t\tvar finalText = statusText || strAbort;\n\t\t\t\t\t\tif (transport) {\n\t\t\t\t\t\t\ttransport.abort(finalText);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdone(0, finalText);\n\t\t\t\t\t\treturn this;\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t// Attach deferreds\n\t\t\tdeferred.promise(jqXHR);\n\n\t\t\t// Add protocol if not provided (prefilters might expect it)\n\t\t\t// Handle falsy url in the settings object (trac-10093: consistency with old signature)\n\t\t\t// We also use the url parameter if available\n\t\t\ts.url = ((url || s.url || location.href) + \"\")\n\t\t\t\t.replace(rprotocol, location.protocol + \"//\");\n\n\t\t\t// Alias method option to type as per ticket trac-12004\n\t\t\ts.type = options.method || options.type || s.method || s.type;\n\n\t\t\t// Extract dataTypes list\n\t\t\ts.dataTypes = (s.dataType || \"*\").toLowerCase().match(rnothtmlwhite) || [\"\"];\n\n\t\t\t// A cross-domain request is in order when the origin doesn't match the current origin.\n\t\t\tif (s.crossDomain == null) {\n\t\t\t\turlAnchor = document.createElement(\"a\");\n\n\t\t\t\t// Support: IE <=8 - 11, Edge 12 - 15\n\t\t\t\t// IE throws exception on accessing the href property if url is malformed,\n\t\t\t\t// e.g. http://example.com:80x/\n\t\t\t\ttry {\n\t\t\t\t\turlAnchor.href = s.url;\n\n\t\t\t\t\t// Support: IE <=8 - 11 only\n\t\t\t\t\t// Anchor's host property isn't correctly set when s.url is relative\n\t\t\t\t\turlAnchor.href = urlAnchor.href;\n\t\t\t\t\ts.crossDomain = originAnchor.protocol + \"//\" + originAnchor.host !==\n\t\t\t\t\t\turlAnchor.protocol + \"//\" + urlAnchor.host;\n\t\t\t\t} catch (e) {\n\n\t\t\t\t\t// If there is an error parsing the URL, assume it is crossDomain,\n\t\t\t\t\t// it can be rejected by the transport if it is invalid\n\t\t\t\t\ts.crossDomain = true;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Convert data if not already a string\n\t\t\tif (s.data && s.processData && typeof s.data !== \"string\") {\n\t\t\t\ts.data = jQuery.param(s.data, s.traditional);\n\t\t\t}\n\n\t\t\t// Apply prefilters\n\t\t\tinspectPrefiltersOrTransports(prefilters, s, options, jqXHR);\n\n\t\t\t// If request was aborted inside a prefilter, stop there\n\t\t\tif (completed) {\n\t\t\t\treturn jqXHR;\n\t\t\t}\n\n\t\t\t// We can fire global events as of now if asked to\n\t\t\t// Don't fire events if jQuery.event is undefined in an AMD-usage scenario (trac-15118)\n\t\t\tfireGlobals = jQuery.event && s.global;\n\n\t\t\t// Watch for a new set of requests\n\t\t\tif (fireGlobals && jQuery.active++ === 0) {\n\t\t\t\tjQuery.event.trigger(\"ajaxStart\");\n\t\t\t}\n\n\t\t\t// Uppercase the type\n\t\t\ts.type = s.type.toUpperCase();\n\n\t\t\t// Determine if request has content\n\t\t\ts.hasContent = !rnoContent.test(s.type);\n\n\t\t\t// Save the URL in case we're toying with the If-Modified-Since\n\t\t\t// and/or If-None-Match header later on\n\t\t\t// Remove hash to simplify url manipulation\n\t\t\tcacheURL = s.url.replace(rhash, \"\");\n\n\t\t\t// More options handling for requests with no content\n\t\t\tif (!s.hasContent) {\n\n\t\t\t\t// Remember the hash so we can put it back\n\t\t\t\tuncached = s.url.slice(cacheURL.length);\n\n\t\t\t\t// If data is available and should be processed, append data to url\n\t\t\t\tif (s.data && (s.processData || typeof s.data === \"string\")) {\n\t\t\t\t\tcacheURL += (rquery.test(cacheURL) ? \"&\" : \"?\") + s.data;\n\n\t\t\t\t\t// trac-9682: remove data so that it's not used in an eventual retry\n\t\t\t\t\tdelete s.data;\n\t\t\t\t}\n\n\t\t\t\t// Add or update anti-cache param if needed\n\t\t\t\tif (s.cache === false) {\n\t\t\t\t\tcacheURL = cacheURL.replace(rantiCache, \"$1\");\n\t\t\t\t\tuncached = (rquery.test(cacheURL) ? \"&\" : \"?\") + \"_=\" + (nonce.guid++) +\n\t\t\t\t\t\tuncached;\n\t\t\t\t}\n\n\t\t\t\t// Put hash and anti-cache on the URL that will be requested (gh-1732)\n\t\t\t\ts.url = cacheURL + uncached;\n\n\t\t\t\t// Change '%20' to '+' if this is encoded form body content (gh-2658)\n\t\t\t} else if (s.data && s.processData &&\n\t\t\t\t(s.contentType || \"\").indexOf(\"application/x-www-form-urlencoded\") === 0) {\n\t\t\t\ts.data = s.data.replace(r20, \"+\");\n\t\t\t}\n\n\t\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\t\tif (s.ifModified) {\n\t\t\t\tif (jQuery.lastModified[cacheURL]) {\n\t\t\t\t\tjqXHR.setRequestHeader(\"If-Modified-Since\", jQuery.lastModified[cacheURL]);\n\t\t\t\t}\n\t\t\t\tif (jQuery.etag[cacheURL]) {\n\t\t\t\t\tjqXHR.setRequestHeader(\"If-None-Match\", jQuery.etag[cacheURL]);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Set the correct header, if data is being sent\n\t\t\tif (s.data && s.hasContent && s.contentType !== false || options.contentType) {\n\t\t\t\tjqXHR.setRequestHeader(\"Content-Type\", s.contentType);\n\t\t\t}\n\n\t\t\t// Set the Accepts header for the server, depending on the dataType\n\t\t\tjqXHR.setRequestHeader(\n\t\t\t\t\"Accept\",\n\t\t\t\ts.dataTypes[0] && s.accepts[s.dataTypes[0]] ?\n\t\t\t\t\ts.accepts[s.dataTypes[0]] +\n\t\t\t\t\t(s.dataTypes[0] !== \"*\" ? \", \" + allTypes + \"; q=0.01\" : \"\") :\n\t\t\t\t\ts.accepts[\"*\"]\n\t\t\t);\n\n\t\t\t// Check for headers option\n\t\t\tfor (i in s.headers) {\n\t\t\t\tjqXHR.setRequestHeader(i, s.headers[i]);\n\t\t\t}\n\n\t\t\t// Allow custom headers/mimetypes and early abort\n\t\t\tif (s.beforeSend &&\n\t\t\t\t(s.beforeSend.call(callbackContext, jqXHR, s) === false || completed)) {\n\n\t\t\t\t// Abort if not done already and return\n\t\t\t\treturn jqXHR.abort();\n\t\t\t}\n\n\t\t\t// Aborting is no longer a cancellation\n\t\t\tstrAbort = \"abort\";\n\n\t\t\t// Install callbacks on deferreds\n\t\t\tcompleteDeferred.add(s.complete);\n\t\t\tjqXHR.done(s.success);\n\t\t\tjqXHR.fail(s.error);\n\n\t\t\t// Get transport\n\t\t\ttransport = inspectPrefiltersOrTransports(transports, s, options, jqXHR);\n\n\t\t\t// If no transport, we auto-abort\n\t\t\tif (!transport) {\n\t\t\t\tdone(-1, \"No Transport\");\n\t\t\t} else {\n\t\t\t\tjqXHR.readyState = 1;\n\n\t\t\t\t// Send global event\n\t\t\t\tif (fireGlobals) {\n\t\t\t\t\tglobalEventContext.trigger(\"ajaxSend\", [jqXHR, s]);\n\t\t\t\t}\n\n\t\t\t\t// If request was aborted inside ajaxSend, stop there\n\t\t\t\tif (completed) {\n\t\t\t\t\treturn jqXHR;\n\t\t\t\t}\n\n\t\t\t\t// Timeout\n\t\t\t\tif (s.async && s.timeout > 0) {\n\t\t\t\t\ttimeoutTimer = window.setTimeout(function () {\n\t\t\t\t\t\tjqXHR.abort(\"timeout\");\n\t\t\t\t\t}, s.timeout);\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tcompleted = false;\n\t\t\t\t\ttransport.send(requestHeaders, done);\n\t\t\t\t} catch (e) {\n\n\t\t\t\t\t// Rethrow post-completion exceptions\n\t\t\t\t\tif (completed) {\n\t\t\t\t\t\tthrow e;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Propagate others as results\n\t\t\t\t\tdone(-1, e);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Callback for when everything is done\n\t\t\tfunction done(status, nativeStatusText, responses, headers) {\n\t\t\t\tvar isSuccess, success, error, response, modified,\n\t\t\t\t\tstatusText = nativeStatusText;\n\n\t\t\t\t// Ignore repeat invocations\n\t\t\t\tif (completed) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tcompleted = true;\n\n\t\t\t\t// Clear timeout if it exists\n\t\t\t\tif (timeoutTimer) {\n\t\t\t\t\twindow.clearTimeout(timeoutTimer);\n\t\t\t\t}\n\n\t\t\t\t// Dereference transport for early garbage collection\n\t\t\t\t// (no matter how long the jqXHR object will be used)\n\t\t\t\ttransport = undefined;\n\n\t\t\t\t// Cache response headers\n\t\t\t\tresponseHeadersString = headers || \"\";\n\n\t\t\t\t// Set readyState\n\t\t\t\tjqXHR.readyState = status > 0 ? 4 : 0;\n\n\t\t\t\t// Determine if successful\n\t\t\t\tisSuccess = status >= 200 && status < 300 || status === 304;\n\n\t\t\t\t// Get response data\n\t\t\t\tif (responses) {\n\t\t\t\t\tresponse = ajaxHandleResponses(s, jqXHR, responses);\n\t\t\t\t}\n\n\t\t\t\t// Use a noop converter for missing script but not if jsonp\n\t\t\t\tif (!isSuccess &&\n\t\t\t\t\tjQuery.inArray(\"script\", s.dataTypes) > -1 &&\n\t\t\t\t\tjQuery.inArray(\"json\", s.dataTypes) < 0) {\n\t\t\t\t\ts.converters[\"text script\"] = function () { };\n\t\t\t\t}\n\n\t\t\t\t// Convert no matter what (that way responseXXX fields are always set)\n\t\t\t\tresponse = ajaxConvert(s, response, jqXHR, isSuccess);\n\n\t\t\t\t// If successful, handle type chaining\n\t\t\t\tif (isSuccess) {\n\n\t\t\t\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\t\t\t\tif (s.ifModified) {\n\t\t\t\t\t\tmodified = jqXHR.getResponseHeader(\"Last-Modified\");\n\t\t\t\t\t\tif (modified) {\n\t\t\t\t\t\t\tjQuery.lastModified[cacheURL] = modified;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmodified = jqXHR.getResponseHeader(\"etag\");\n\t\t\t\t\t\tif (modified) {\n\t\t\t\t\t\t\tjQuery.etag[cacheURL] = modified;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// if no content\n\t\t\t\t\tif (status === 204 || s.type === \"HEAD\") {\n\t\t\t\t\t\tstatusText = \"nocontent\";\n\n\t\t\t\t\t\t// if not modified\n\t\t\t\t\t} else if (status === 304) {\n\t\t\t\t\t\tstatusText = \"notmodified\";\n\n\t\t\t\t\t\t// If we have data, let's convert it\n\t\t\t\t\t} else {\n\t\t\t\t\t\tstatusText = response.state;\n\t\t\t\t\t\tsuccess = response.data;\n\t\t\t\t\t\terror = response.error;\n\t\t\t\t\t\tisSuccess = !error;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\n\t\t\t\t\t// Extract error from statusText and normalize for non-aborts\n\t\t\t\t\terror = statusText;\n\t\t\t\t\tif (status || !statusText) {\n\t\t\t\t\t\tstatusText = \"error\";\n\t\t\t\t\t\tif (status < 0) {\n\t\t\t\t\t\t\tstatus = 0;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Set data for the fake xhr object\n\t\t\t\tjqXHR.status = status;\n\t\t\t\tjqXHR.statusText = (nativeStatusText || statusText) + \"\";\n\n\t\t\t\t// Success/Error\n\t\t\t\tif (isSuccess) {\n\t\t\t\t\tdeferred.resolveWith(callbackContext, [success, statusText, jqXHR]);\n\t\t\t\t} else {\n\t\t\t\t\tdeferred.rejectWith(callbackContext, [jqXHR, statusText, error]);\n\t\t\t\t}\n\n\t\t\t\t// Status-dependent callbacks\n\t\t\t\tjqXHR.statusCode(statusCode);\n\t\t\t\tstatusCode = undefined;\n\n\t\t\t\tif (fireGlobals) {\n\t\t\t\t\tglobalEventContext.trigger(isSuccess ? \"ajaxSuccess\" : \"ajaxError\",\n\t\t\t\t\t\t[jqXHR, s, isSuccess ? success : error]);\n\t\t\t\t}\n\n\t\t\t\t// Complete\n\t\t\t\tcompleteDeferred.fireWith(callbackContext, [jqXHR, statusText]);\n\n\t\t\t\tif (fireGlobals) {\n\t\t\t\t\tglobalEventContext.trigger(\"ajaxComplete\", [jqXHR, s]);\n\n\t\t\t\t\t// Handle the global AJAX counter\n\t\t\t\t\tif (!(--jQuery.active)) {\n\t\t\t\t\t\tjQuery.event.trigger(\"ajaxStop\");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn jqXHR;\n\t\t},\n\n\t\tgetJSON: function (url, data, callback) {\n\t\t\treturn jQuery.get(url, data, callback, \"json\");\n\t\t},\n\n\t\tgetScript: function (url, callback) {\n\t\t\treturn jQuery.get(url, undefined, callback, \"script\");\n\t\t}\n\t});\n\n\tjQuery.each([\"get\", \"post\"], function (_i, method) {\n\t\tjQuery[method] = function (url, data, callback, type) {\n\n\t\t\t// Shift arguments if data argument was omitted\n\t\t\tif (isFunction(data)) {\n\t\t\t\ttype = type || callback;\n\t\t\t\tcallback = data;\n\t\t\t\tdata = undefined;\n\t\t\t}\n\n\t\t\t// The url can be an options object (which then must have .url)\n\t\t\treturn jQuery.ajax(jQuery.extend({\n\t\t\t\turl: url,\n\t\t\t\ttype: method,\n\t\t\t\tdataType: type,\n\t\t\t\tdata: data,\n\t\t\t\tsuccess: callback\n\t\t\t}, jQuery.isPlainObject(url) && url));\n\t\t};\n\t});\n\n\tjQuery.ajaxPrefilter(function (s) {\n\t\tvar i;\n\t\tfor (i in s.headers) {\n\t\t\tif (i.toLowerCase() === \"content-type\") {\n\t\t\t\ts.contentType = s.headers[i] || \"\";\n\t\t\t}\n\t\t}\n\t});\n\n\n\tjQuery._evalUrl = function (url, options, doc) {\n\t\treturn jQuery.ajax({\n\t\t\turl: url,\n\n\t\t\t// Make this explicit, since user can override this through ajaxSetup (trac-11264)\n\t\t\ttype: \"GET\",\n\t\t\tdataType: \"script\",\n\t\t\tcache: true,\n\t\t\tasync: false,\n\t\t\tglobal: false,\n\n\t\t\t// Only evaluate the response if it is successful (gh-4126)\n\t\t\t// dataFilter is not invoked for failure responses, so using it instead\n\t\t\t// of the default converter is kludgy but it works.\n\t\t\tconverters: {\n\t\t\t\t\"text script\": function () { }\n\t\t\t},\n\t\t\tdataFilter: function (response) {\n\t\t\t\tjQuery.globalEval(response, options, doc);\n\t\t\t}\n\t\t});\n\t};\n\n\n\tjQuery.fn.extend({\n\t\twrapAll: function (html) {\n\t\t\tvar wrap;\n\n\t\t\tif (this[0]) {\n\t\t\t\tif (isFunction(html)) {\n\t\t\t\t\thtml = html.call(this[0]);\n\t\t\t\t}\n\n\t\t\t\t// The elements to wrap the target around\n\t\t\t\twrap = jQuery(html, this[0].ownerDocument).eq(0).clone(true);\n\n\t\t\t\tif (this[0].parentNode) {\n\t\t\t\t\twrap.insertBefore(this[0]);\n\t\t\t\t}\n\n\t\t\t\twrap.map(function () {\n\t\t\t\t\tvar elem = this;\n\n\t\t\t\t\twhile (elem.firstElementChild) {\n\t\t\t\t\t\telem = elem.firstElementChild;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn elem;\n\t\t\t\t}).append(this);\n\t\t\t}\n\n\t\t\treturn this;\n\t\t},\n\n\t\twrapInner: function (html) {\n\t\t\tif (isFunction(html)) {\n\t\t\t\treturn this.each(function (i) {\n\t\t\t\t\tjQuery(this).wrapInner(html.call(this, i));\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn this.each(function () {\n\t\t\t\tvar self = jQuery(this),\n\t\t\t\t\tcontents = self.contents();\n\n\t\t\t\tif (contents.length) {\n\t\t\t\t\tcontents.wrapAll(html);\n\n\t\t\t\t} else {\n\t\t\t\t\tself.append(html);\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\twrap: function (html) {\n\t\t\tvar htmlIsFunction = isFunction(html);\n\n\t\t\treturn this.each(function (i) {\n\t\t\t\tjQuery(this).wrapAll(htmlIsFunction ? html.call(this, i) : html);\n\t\t\t});\n\t\t},\n\n\t\tunwrap: function (selector) {\n\t\t\tthis.parent(selector).not(\"body\").each(function () {\n\t\t\t\tjQuery(this).replaceWith(this.childNodes);\n\t\t\t});\n\t\t\treturn this;\n\t\t}\n\t});\n\n\n\tjQuery.expr.pseudos.hidden = function (elem) {\n\t\treturn !jQuery.expr.pseudos.visible(elem);\n\t};\n\tjQuery.expr.pseudos.visible = function (elem) {\n\t\treturn !!(elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length);\n\t};\n\n\n\n\n\tjQuery.ajaxSettings.xhr = function () {\n\t\ttry {\n\t\t\treturn new window.XMLHttpRequest();\n\t\t} catch (e) { }\n\t};\n\n\tvar xhrSuccessStatus = {\n\n\t\t// File protocol always yields status code 0, assume 200\n\t\t0: 200,\n\n\t\t// Support: IE <=9 only\n\t\t// trac-1450: sometimes IE returns 1223 when it should be 204\n\t\t1223: 204\n\t},\n\t\txhrSupported = jQuery.ajaxSettings.xhr();\n\n\tsupport.cors = !!xhrSupported && (\"withCredentials\" in xhrSupported);\n\tsupport.ajax = xhrSupported = !!xhrSupported;\n\n\tjQuery.ajaxTransport(function (options) {\n\t\tvar callback, errorCallback;\n\n\t\t// Cross domain only allowed if supported through XMLHttpRequest\n\t\tif (support.cors || xhrSupported && !options.crossDomain) {\n\t\t\treturn {\n\t\t\t\tsend: function (headers, complete) {\n\t\t\t\t\tvar i,\n\t\t\t\t\t\txhr = options.xhr();\n\n\t\t\t\t\txhr.open(\n\t\t\t\t\t\toptions.type,\n\t\t\t\t\t\toptions.url,\n\t\t\t\t\t\toptions.async,\n\t\t\t\t\t\toptions.username,\n\t\t\t\t\t\toptions.password\n\t\t\t\t\t);\n\n\t\t\t\t\t// Apply custom fields if provided\n\t\t\t\t\tif (options.xhrFields) {\n\t\t\t\t\t\tfor (i in options.xhrFields) {\n\t\t\t\t\t\t\txhr[i] = options.xhrFields[i];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Override mime type if needed\n\t\t\t\t\tif (options.mimeType && xhr.overrideMimeType) {\n\t\t\t\t\t\txhr.overrideMimeType(options.mimeType);\n\t\t\t\t\t}\n\n\t\t\t\t\t// X-Requested-With header\n\t\t\t\t\t// For cross-domain requests, seeing as conditions for a preflight are\n\t\t\t\t\t// akin to a jigsaw puzzle, we simply never set it to be sure.\n\t\t\t\t\t// (it can always be set on a per-request basis or even using ajaxSetup)\n\t\t\t\t\t// For same-domain requests, won't change header if already provided.\n\t\t\t\t\tif (!options.crossDomain && !headers[\"X-Requested-With\"]) {\n\t\t\t\t\t\theaders[\"X-Requested-With\"] = \"XMLHttpRequest\";\n\t\t\t\t\t}\n\n\t\t\t\t\t// Set headers\n\t\t\t\t\tfor (i in headers) {\n\t\t\t\t\t\txhr.setRequestHeader(i, headers[i]);\n\t\t\t\t\t}\n\n\t\t\t\t\t// Callback\n\t\t\t\t\tcallback = function (type) {\n\t\t\t\t\t\treturn function () {\n\t\t\t\t\t\t\tif (callback) {\n\t\t\t\t\t\t\t\tcallback = errorCallback = xhr.onload =\n\t\t\t\t\t\t\t\t\txhr.onerror = xhr.onabort = xhr.ontimeout =\n\t\t\t\t\t\t\t\t\txhr.onreadystatechange = null;\n\n\t\t\t\t\t\t\t\tif (type === \"abort\") {\n\t\t\t\t\t\t\t\t\txhr.abort();\n\t\t\t\t\t\t\t\t} else if (type === \"error\") {\n\n\t\t\t\t\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t\t\t\t\t// On a manual native abort, IE9 throws\n\t\t\t\t\t\t\t\t\t// errors on any property access that is not readyState\n\t\t\t\t\t\t\t\t\tif (typeof xhr.status !== \"number\") {\n\t\t\t\t\t\t\t\t\t\tcomplete(0, \"error\");\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tcomplete(\n\n\t\t\t\t\t\t\t\t\t\t\t// File: protocol always yields status 0; see trac-8605, trac-14207\n\t\t\t\t\t\t\t\t\t\t\txhr.status,\n\t\t\t\t\t\t\t\t\t\t\txhr.statusText\n\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tcomplete(\n\t\t\t\t\t\t\t\t\t\txhrSuccessStatus[xhr.status] || xhr.status,\n\t\t\t\t\t\t\t\t\t\txhr.statusText,\n\n\t\t\t\t\t\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t\t\t\t\t\t// IE9 has no XHR2 but throws on binary (trac-11426)\n\t\t\t\t\t\t\t\t\t\t// For XHR2 non-text, let the caller handle it (gh-2498)\n\t\t\t\t\t\t\t\t\t\t(xhr.responseType || \"text\") !== \"text\" ||\n\t\t\t\t\t\t\t\t\t\t\ttypeof xhr.responseText !== \"string\" ?\n\t\t\t\t\t\t\t\t\t\t\t{ binary: xhr.response } :\n\t\t\t\t\t\t\t\t\t\t\t{ text: xhr.responseText },\n\t\t\t\t\t\t\t\t\t\txhr.getAllResponseHeaders()\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\t\t\t\t\t};\n\n\t\t\t\t\t// Listen to events\n\t\t\t\t\txhr.onload = callback();\n\t\t\t\t\terrorCallback = xhr.onerror = xhr.ontimeout = callback(\"error\");\n\n\t\t\t\t\t// Support: IE 9 only\n\t\t\t\t\t// Use onreadystatechange to replace onabort\n\t\t\t\t\t// to handle uncaught aborts\n\t\t\t\t\tif (xhr.onabort !== undefined) {\n\t\t\t\t\t\txhr.onabort = errorCallback;\n\t\t\t\t\t} else {\n\t\t\t\t\t\txhr.onreadystatechange = function () {\n\n\t\t\t\t\t\t\t// Check readyState before timeout as it changes\n\t\t\t\t\t\t\tif (xhr.readyState === 4) {\n\n\t\t\t\t\t\t\t\t// Allow onerror to be called first,\n\t\t\t\t\t\t\t\t// but that will not handle a native abort\n\t\t\t\t\t\t\t\t// Also, save errorCallback to a variable\n\t\t\t\t\t\t\t\t// as xhr.onerror cannot be accessed\n\t\t\t\t\t\t\t\twindow.setTimeout(function () {\n\t\t\t\t\t\t\t\t\tif (callback) {\n\t\t\t\t\t\t\t\t\t\terrorCallback();\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\t// Create the abort callback\n\t\t\t\t\tcallback = callback(\"abort\");\n\n\t\t\t\t\ttry {\n\n\t\t\t\t\t\t// Do send the request (this may raise an exception)\n\t\t\t\t\t\txhr.send(options.hasContent && options.data || null);\n\t\t\t\t\t} catch (e) {\n\n\t\t\t\t\t\t// trac-14683: Only rethrow if this hasn't been notified as an error yet\n\t\t\t\t\t\tif (callback) {\n\t\t\t\t\t\t\tthrow e;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\t\tabort: function () {\n\t\t\t\t\tif (callback) {\n\t\t\t\t\t\tcallback();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t});\n\n\n\n\n\t// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432)\n\tjQuery.ajaxPrefilter(function (s) {\n\t\tif (s.crossDomain) {\n\t\t\ts.contents.script = false;\n\t\t}\n\t});\n\n\t// Install script dataType\n\tjQuery.ajaxSetup({\n\t\taccepts: {\n\t\t\tscript: \"text/javascript, application/javascript, \" +\n\t\t\t\t\"application/ecmascript, application/x-ecmascript\"\n\t\t},\n\t\tcontents: {\n\t\t\tscript: /\\b(?:java|ecma)script\\b/\n\t\t},\n\t\tconverters: {\n\t\t\t\"text script\": function (text) {\n\t\t\t\tjQuery.globalEval(text);\n\t\t\t\treturn text;\n\t\t\t}\n\t\t}\n\t});\n\n\t// Handle cache's special case and crossDomain\n\tjQuery.ajaxPrefilter(\"script\", function (s) {\n\t\tif (s.cache === undefined) {\n\t\t\ts.cache = false;\n\t\t}\n\t\tif (s.crossDomain) {\n\t\t\ts.type = \"GET\";\n\t\t}\n\t});\n\n\t// Bind script tag hack transport\n\tjQuery.ajaxTransport(\"script\", function (s) {\n\n\t\t// This transport only deals with cross domain or forced-by-attrs requests\n\t\tif (s.crossDomain || s.scriptAttrs) {\n\t\t\tvar script, callback;\n\t\t\treturn {\n\t\t\t\tsend: function (_, complete) {\n\t\t\t\t\tscript = jQuery(\"<script>\")\n\t\t\t\t\t\t.attr(s.scriptAttrs || {})\n\t\t\t\t\t\t.prop({ charset: s.scriptCharset, src: s.url })\n\t\t\t\t\t\t.on(\"load error\", callback = function (evt) {\n\t\t\t\t\t\t\tscript.remove();\n\t\t\t\t\t\t\tcallback = null;\n\t\t\t\t\t\t\tif (evt) {\n\t\t\t\t\t\t\t\tcomplete(evt.type === \"error\" ? 404 : 200, evt.type);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\n\t\t\t\t\t// Use native DOM manipulation to avoid our domManip AJAX trickery\n\t\t\t\t\tdocument.head.appendChild(script[0]);\n\t\t\t\t},\n\t\t\t\tabort: function () {\n\t\t\t\t\tif (callback) {\n\t\t\t\t\t\tcallback();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t});\n\n\n\n\n\tvar oldCallbacks = [],\n\t\trjsonp = /(=)\\?(?=&|$)|\\?\\?/;\n\n\t// Default jsonp settings\n\tjQuery.ajaxSetup({\n\t\tjsonp: \"callback\",\n\t\tjsonpCallback: function () {\n\t\t\tvar callback = oldCallbacks.pop() || (jQuery.expando + \"_\" + (nonce.guid++));\n\t\t\tthis[callback] = true;\n\t\t\treturn callback;\n\t\t}\n\t});\n\n\t// Detect, normalize options and install callbacks for jsonp requests\n\tjQuery.ajaxPrefilter(\"json jsonp\", function (s, originalSettings, jqXHR) {\n\n\t\tvar callbackName, overwritten, responseContainer,\n\t\t\tjsonProp = s.jsonp !== false && (rjsonp.test(s.url) ?\n\t\t\t\t\"url\" :\n\t\t\t\ttypeof s.data === \"string\" &&\n\t\t\t\t(s.contentType || \"\")\n\t\t\t\t\t.indexOf(\"application/x-www-form-urlencoded\") === 0 &&\n\t\t\t\trjsonp.test(s.data) && \"data\"\n\t\t\t);\n\n\t\t// Handle iff the expected data type is \"jsonp\" or we have a parameter to set\n\t\tif (jsonProp || s.dataTypes[0] === \"jsonp\") {\n\n\t\t\t// Get callback name, remembering preexisting value associated with it\n\t\t\tcallbackName = s.jsonpCallback = isFunction(s.jsonpCallback) ?\n\t\t\t\ts.jsonpCallback() :\n\t\t\t\ts.jsonpCallback;\n\n\t\t\t// Insert callback into url or form data\n\t\t\tif (jsonProp) {\n\t\t\t\ts[jsonProp] = s[jsonProp].replace(rjsonp, \"$1\" + callbackName);\n\t\t\t} else if (s.jsonp !== false) {\n\t\t\t\ts.url += (rquery.test(s.url) ? \"&\" : \"?\") + s.jsonp + \"=\" + callbackName;\n\t\t\t}\n\n\t\t\t// Use data converter to retrieve json after script execution\n\t\t\ts.converters[\"script json\"] = function () {\n\t\t\t\tif (!responseContainer) {\n\t\t\t\t\tjQuery.error(callbackName + \" was not called\");\n\t\t\t\t}\n\t\t\t\treturn responseContainer[0];\n\t\t\t};\n\n\t\t\t// Force json dataType\n\t\t\ts.dataTypes[0] = \"json\";\n\n\t\t\t// Install callback\n\t\t\toverwritten = window[callbackName];\n\t\t\twindow[callbackName] = function () {\n\t\t\t\tresponseContainer = arguments;\n\t\t\t};\n\n\t\t\t// Clean-up function (fires after converters)\n\t\t\tjqXHR.always(function () {\n\n\t\t\t\t// If previous value didn't exist - remove it\n\t\t\t\tif (overwritten === undefined) {\n\t\t\t\t\tjQuery(window).removeProp(callbackName);\n\n\t\t\t\t\t// Otherwise restore preexisting value\n\t\t\t\t} else {\n\t\t\t\t\twindow[callbackName] = overwritten;\n\t\t\t\t}\n\n\t\t\t\t// Save back as free\n\t\t\t\tif (s[callbackName]) {\n\n\t\t\t\t\t// Make sure that re-using the options doesn't screw things around\n\t\t\t\t\ts.jsonpCallback = originalSettings.jsonpCallback;\n\n\t\t\t\t\t// Save the callback name for future use\n\t\t\t\t\toldCallbacks.push(callbackName);\n\t\t\t\t}\n\n\t\t\t\t// Call if it was a function and we have a response\n\t\t\t\tif (responseContainer && isFunction(overwritten)) {\n\t\t\t\t\toverwritten(responseContainer[0]);\n\t\t\t\t}\n\n\t\t\t\tresponseContainer = overwritten = undefined;\n\t\t\t});\n\n\t\t\t// Delegate to script\n\t\t\treturn \"script\";\n\t\t}\n\t});\n\n\n\n\n\t// Support: Safari 8 only\n\t// In Safari 8 documents created via document.implementation.createHTMLDocument\n\t// collapse sibling forms: the second one becomes a child of the first one.\n\t// Because of that, this security measure has to be disabled in Safari 8.\n\t// https://bugs.webkit.org/show_bug.cgi?id=137337\n\tsupport.createHTMLDocument = (function () {\n\t\tvar body = document.implementation.createHTMLDocument(\"\").body;\n\t\tbody.innerHTML = \"<form></form><form></form>\";\n\t\treturn body.childNodes.length === 2;\n\t})();\n\n\n\t// Argument \"data\" should be string of html\n\t// context (optional): If specified, the fragment will be created in this context,\n\t// defaults to document\n\t// keepScripts (optional): If true, will include scripts passed in the html string\n\tjQuery.parseHTML = function (data, context, keepScripts) {\n\t\tif (typeof data !== \"string\") {\n\t\t\treturn [];\n\t\t}\n\t\tif (typeof context === \"boolean\") {\n\t\t\tkeepScripts = context;\n\t\t\tcontext = false;\n\t\t}\n\n\t\tvar base, parsed, scripts;\n\n\t\tif (!context) {\n\n\t\t\t// Stop scripts or inline event handlers from being executed immediately\n\t\t\t// by using document.implementation\n\t\t\tif (support.createHTMLDocument) {\n\t\t\t\tcontext = document.implementation.createHTMLDocument(\"\");\n\n\t\t\t\t// Set the base href for the created document\n\t\t\t\t// so any parsed elements with URLs\n\t\t\t\t// are based on the document's URL (gh-2965)\n\t\t\t\tbase = context.createElement(\"base\");\n\t\t\t\tbase.href = document.location.href;\n\t\t\t\tcontext.head.appendChild(base);\n\t\t\t} else {\n\t\t\t\tcontext = document;\n\t\t\t}\n\t\t}\n\n\t\tparsed = rsingleTag.exec(data);\n\t\tscripts = !keepScripts && [];\n\n\t\t// Single tag\n\t\tif (parsed) {\n\t\t\treturn [context.createElement(parsed[1])];\n\t\t}\n\n\t\tparsed = buildFragment([data], context, scripts);\n\n\t\tif (scripts && scripts.length) {\n\t\t\tjQuery(scripts).remove();\n\t\t}\n\n\t\treturn jQuery.merge([], parsed.childNodes);\n\t};\n\n\n\t/**\n\t * Load a url into a page\n\t */\n\tjQuery.fn.load = function (url, params, callback) {\n\t\tvar selector, type, response,\n\t\t\tself = this,\n\t\t\toff = url.indexOf(\" \");\n\n\t\tif (off > -1) {\n\t\t\tselector = stripAndCollapse(url.slice(off));\n\t\t\turl = url.slice(0, off);\n\t\t}\n\n\t\t// If it's a function\n\t\tif (isFunction(params)) {\n\n\t\t\t// We assume that it's the callback\n\t\t\tcallback = params;\n\t\t\tparams = undefined;\n\n\t\t\t// Otherwise, build a param string\n\t\t} else if (params && typeof params === \"object\") {\n\t\t\ttype = \"POST\";\n\t\t}\n\n\t\t// If we have elements to modify, make the request\n\t\tif (self.length > 0) {\n\t\t\tjQuery.ajax({\n\t\t\t\turl: url,\n\n\t\t\t\t// If \"type\" variable is undefined, then \"GET\" method will be used.\n\t\t\t\t// Make value of this field explicit since\n\t\t\t\t// user can override it through ajaxSetup method\n\t\t\t\ttype: type || \"GET\",\n\t\t\t\tdataType: \"html\",\n\t\t\t\tdata: params\n\t\t\t}).done(function (responseText) {\n\n\t\t\t\t// Save response for use in complete callback\n\t\t\t\tresponse = arguments;\n\n\t\t\t\tself.html(selector ?\n\n\t\t\t\t\t// If a selector was specified, locate the right elements in a dummy div\n\t\t\t\t\t// Exclude scripts to avoid IE 'Permission Denied' errors\n\t\t\t\t\tjQuery(\"<div>\").append(jQuery.parseHTML(responseText)).find(selector) :\n\n\t\t\t\t\t// Otherwise use the full result\n\t\t\t\t\tresponseText);\n\n\t\t\t\t// If the request succeeds, this function gets \"data\", \"status\", \"jqXHR\"\n\t\t\t\t// but they are ignored because response was set above.\n\t\t\t\t// If it fails, this function gets \"jqXHR\", \"status\", \"error\"\n\t\t\t}).always(callback && function (jqXHR, status) {\n\t\t\t\tself.each(function () {\n\t\t\t\t\tcallback.apply(this, response || [jqXHR.responseText, status, jqXHR]);\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\n\t\treturn this;\n\t};\n\n\n\n\n\tjQuery.expr.pseudos.animated = function (elem) {\n\t\treturn jQuery.grep(jQuery.timers, function (fn) {\n\t\t\treturn elem === fn.elem;\n\t\t}).length;\n\t};\n\n\n\n\n\tjQuery.offset = {\n\t\tsetOffset: function (elem, options, i) {\n\t\t\tvar curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition,\n\t\t\t\tposition = jQuery.css(elem, \"position\"),\n\t\t\t\tcurElem = jQuery(elem),\n\t\t\t\tprops = {};\n\n\t\t\t// Set position first, in-case top/left are set even on static elem\n\t\t\tif (position === \"static\") {\n\t\t\t\telem.style.position = \"relative\";\n\t\t\t}\n\n\t\t\tcurOffset = curElem.offset();\n\t\t\tcurCSSTop = jQuery.css(elem, \"top\");\n\t\t\tcurCSSLeft = jQuery.css(elem, \"left\");\n\t\t\tcalculatePosition = (position === \"absolute\" || position === \"fixed\") &&\n\t\t\t\t(curCSSTop + curCSSLeft).indexOf(\"auto\") > -1;\n\n\t\t\t// Need to be able to calculate position if either\n\t\t\t// top or left is auto and position is either absolute or fixed\n\t\t\tif (calculatePosition) {\n\t\t\t\tcurPosition = curElem.position();\n\t\t\t\tcurTop = curPosition.top;\n\t\t\t\tcurLeft = curPosition.left;\n\n\t\t\t} else {\n\t\t\t\tcurTop = parseFloat(curCSSTop) || 0;\n\t\t\t\tcurLeft = parseFloat(curCSSLeft) || 0;\n\t\t\t}\n\n\t\t\tif (isFunction(options)) {\n\n\t\t\t\t// Use jQuery.extend here to allow modification of coordinates argument (gh-1848)\n\t\t\t\toptions = options.call(elem, i, jQuery.extend({}, curOffset));\n\t\t\t}\n\n\t\t\tif (options.top != null) {\n\t\t\t\tprops.top = (options.top - curOffset.top) + curTop;\n\t\t\t}\n\t\t\tif (options.left != null) {\n\t\t\t\tprops.left = (options.left - curOffset.left) + curLeft;\n\t\t\t}\n\n\t\t\tif (\"using\" in options) {\n\t\t\t\toptions.using.call(elem, props);\n\n\t\t\t} else {\n\t\t\t\tcurElem.css(props);\n\t\t\t}\n\t\t}\n\t};\n\n\tjQuery.fn.extend({\n\n\t\t// offset() relates an element's border box to the document origin\n\t\toffset: function (options) {\n\n\t\t\t// Preserve chaining for setter\n\t\t\tif (arguments.length) {\n\t\t\t\treturn options === undefined ?\n\t\t\t\t\tthis :\n\t\t\t\t\tthis.each(function (i) {\n\t\t\t\t\t\tjQuery.offset.setOffset(this, options, i);\n\t\t\t\t\t});\n\t\t\t}\n\n\t\t\tvar rect, win,\n\t\t\t\telem = this[0];\n\n\t\t\tif (!elem) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Return zeros for disconnected and hidden (display: none) elements (gh-2310)\n\t\t\t// Support: IE <=11 only\n\t\t\t// Running getBoundingClientRect on a\n\t\t\t// disconnected node in IE throws an error\n\t\t\tif (!elem.getClientRects().length) {\n\t\t\t\treturn { top: 0, left: 0 };\n\t\t\t}\n\n\t\t\t// Get document-relative position by adding viewport scroll to viewport-relative gBCR\n\t\t\trect = elem.getBoundingClientRect();\n\t\t\twin = elem.ownerDocument.defaultView;\n\t\t\treturn {\n\t\t\t\ttop: rect.top + win.pageYOffset,\n\t\t\t\tleft: rect.left + win.pageXOffset\n\t\t\t};\n\t\t},\n\n\t\t// position() relates an element's margin box to its offset parent's padding box\n\t\t// This corresponds to the behavior of CSS absolute positioning\n\t\tposition: function () {\n\t\t\tif (!this[0]) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar offsetParent, offset, doc,\n\t\t\t\telem = this[0],\n\t\t\t\tparentOffset = { top: 0, left: 0 };\n\n\t\t\t// position:fixed elements are offset from the viewport, which itself always has zero offset\n\t\t\tif (jQuery.css(elem, \"position\") === \"fixed\") {\n\n\t\t\t\t// Assume position:fixed implies availability of getBoundingClientRect\n\t\t\t\toffset = elem.getBoundingClientRect();\n\n\t\t\t} else {\n\t\t\t\toffset = this.offset();\n\n\t\t\t\t// Account for the *real* offset parent, which can be the document or its root element\n\t\t\t\t// when a statically positioned element is identified\n\t\t\t\tdoc = elem.ownerDocument;\n\t\t\t\toffsetParent = elem.offsetParent || doc.documentElement;\n\t\t\t\twhile (offsetParent &&\n\t\t\t\t\t(offsetParent === doc.body || offsetParent === doc.documentElement) &&\n\t\t\t\t\tjQuery.css(offsetParent, \"position\") === \"static\") {\n\n\t\t\t\t\toffsetParent = offsetParent.parentNode;\n\t\t\t\t}\n\t\t\t\tif (offsetParent && offsetParent !== elem && offsetParent.nodeType === 1) {\n\n\t\t\t\t\t// Incorporate borders into its offset, since they are outside its content origin\n\t\t\t\t\tparentOffset = jQuery(offsetParent).offset();\n\t\t\t\t\tparentOffset.top += jQuery.css(offsetParent, \"borderTopWidth\", true);\n\t\t\t\t\tparentOffset.left += jQuery.css(offsetParent, \"borderLeftWidth\", true);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Subtract parent offsets and element margins\n\t\t\treturn {\n\t\t\t\ttop: offset.top - parentOffset.top - jQuery.css(elem, \"marginTop\", true),\n\t\t\t\tleft: offset.left - parentOffset.left - jQuery.css(elem, \"marginLeft\", true)\n\t\t\t};\n\t\t},\n\n\t\t// This method will return documentElement in the following cases:\n\t\t// 1) For the element inside the iframe without offsetParent, this method will return\n\t\t//    documentElement of the parent window\n\t\t// 2) For the hidden or detached element\n\t\t// 3) For body or html element, i.e. in case of the html node - it will return itself\n\t\t//\n\t\t// but those exceptions were never presented as a real life use-cases\n\t\t// and might be considered as more preferable results.\n\t\t//\n\t\t// This logic, however, is not guaranteed and can change at any point in the future\n\t\toffsetParent: function () {\n\t\t\treturn this.map(function () {\n\t\t\t\tvar offsetParent = this.offsetParent;\n\n\t\t\t\twhile (offsetParent && jQuery.css(offsetParent, \"position\") === \"static\") {\n\t\t\t\t\toffsetParent = offsetParent.offsetParent;\n\t\t\t\t}\n\n\t\t\t\treturn offsetParent || documentElement;\n\t\t\t});\n\t\t}\n\t});\n\n\t// Create scrollLeft and scrollTop methods\n\tjQuery.each({ scrollLeft: \"pageXOffset\", scrollTop: \"pageYOffset\" }, function (method, prop) {\n\t\tvar top = \"pageYOffset\" === prop;\n\n\t\tjQuery.fn[method] = function (val) {\n\t\t\treturn access(this, function (elem, method, val) {\n\n\t\t\t\t// Coalesce documents and windows\n\t\t\t\tvar win;\n\t\t\t\tif (isWindow(elem)) {\n\t\t\t\t\twin = elem;\n\t\t\t\t} else if (elem.nodeType === 9) {\n\t\t\t\t\twin = elem.defaultView;\n\t\t\t\t}\n\n\t\t\t\tif (val === undefined) {\n\t\t\t\t\treturn win ? win[prop] : elem[method];\n\t\t\t\t}\n\n\t\t\t\tif (win) {\n\t\t\t\t\twin.scrollTo(\n\t\t\t\t\t\t!top ? val : win.pageXOffset,\n\t\t\t\t\t\ttop ? val : win.pageYOffset\n\t\t\t\t\t);\n\n\t\t\t\t} else {\n\t\t\t\t\telem[method] = val;\n\t\t\t\t}\n\t\t\t}, method, val, arguments.length);\n\t\t};\n\t});\n\n\t// Support: Safari <=7 - 9.1, Chrome <=37 - 49\n\t// Add the top/left cssHooks using jQuery.fn.position\n\t// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084\n\t// Blink bug: https://bugs.chromium.org/p/chromium/issues/detail?id=589347\n\t// getComputedStyle returns percent when specified for top/left/bottom/right;\n\t// rather than make the css module depend on the offset module, just check for it here\n\tjQuery.each([\"top\", \"left\"], function (_i, prop) {\n\t\tjQuery.cssHooks[prop] = addGetHookIf(support.pixelPosition,\n\t\t\tfunction (elem, computed) {\n\t\t\t\tif (computed) {\n\t\t\t\t\tcomputed = curCSS(elem, prop);\n\n\t\t\t\t\t// If curCSS returns percentage, fallback to offset\n\t\t\t\t\treturn rnumnonpx.test(computed) ?\n\t\t\t\t\t\tjQuery(elem).position()[prop] + \"px\" :\n\t\t\t\t\t\tcomputed;\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\t});\n\n\n\t// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods\n\tjQuery.each({ Height: \"height\", Width: \"width\" }, function (name, type) {\n\t\tjQuery.each({\n\t\t\tpadding: \"inner\" + name,\n\t\t\tcontent: type,\n\t\t\t\"\": \"outer\" + name\n\t\t}, function (defaultExtra, funcName) {\n\n\t\t\t// Margin is only for outerHeight, outerWidth\n\t\t\tjQuery.fn[funcName] = function (margin, value) {\n\t\t\t\tvar chainable = arguments.length && (defaultExtra || typeof margin !== \"boolean\"),\n\t\t\t\t\textra = defaultExtra || (margin === true || value === true ? \"margin\" : \"border\");\n\n\t\t\t\treturn access(this, function (elem, type, value) {\n\t\t\t\t\tvar doc;\n\n\t\t\t\t\tif (isWindow(elem)) {\n\n\t\t\t\t\t\t// $( window ).outerWidth/Height return w/h including scrollbars (gh-1729)\n\t\t\t\t\t\treturn funcName.indexOf(\"outer\") === 0 ?\n\t\t\t\t\t\t\telem[\"inner\" + name] :\n\t\t\t\t\t\t\telem.document.documentElement[\"client\" + name];\n\t\t\t\t\t}\n\n\t\t\t\t\t// Get document width or height\n\t\t\t\t\tif (elem.nodeType === 9) {\n\t\t\t\t\t\tdoc = elem.documentElement;\n\n\t\t\t\t\t\t// Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height],\n\t\t\t\t\t\t// whichever is greatest\n\t\t\t\t\t\treturn Math.max(\n\t\t\t\t\t\t\telem.body[\"scroll\" + name], doc[\"scroll\" + name],\n\t\t\t\t\t\t\telem.body[\"offset\" + name], doc[\"offset\" + name],\n\t\t\t\t\t\t\tdoc[\"client\" + name]\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\n\t\t\t\t\treturn value === undefined ?\n\n\t\t\t\t\t\t// Get width or height on the element, requesting but not forcing parseFloat\n\t\t\t\t\t\tjQuery.css(elem, type, extra) :\n\n\t\t\t\t\t\t// Set width or height on the element\n\t\t\t\t\t\tjQuery.style(elem, type, value, extra);\n\t\t\t\t}, type, chainable ? margin : undefined, chainable);\n\t\t\t};\n\t\t});\n\t});\n\n\n\tjQuery.each([\n\t\t\"ajaxStart\",\n\t\t\"ajaxStop\",\n\t\t\"ajaxComplete\",\n\t\t\"ajaxError\",\n\t\t\"ajaxSuccess\",\n\t\t\"ajaxSend\"\n\t], function (_i, type) {\n\t\tjQuery.fn[type] = function (fn) {\n\t\t\treturn this.on(type, fn);\n\t\t};\n\t});\n\n\n\n\n\tjQuery.fn.extend({\n\n\t\tbind: function (types, data, fn) {\n\t\t\treturn this.on(types, null, data, fn);\n\t\t},\n\t\tunbind: function (types, fn) {\n\t\t\treturn this.off(types, null, fn);\n\t\t},\n\n\t\tdelegate: function (selector, types, data, fn) {\n\t\t\treturn this.on(types, selector, data, fn);\n\t\t},\n\t\tundelegate: function (selector, types, fn) {\n\n\t\t\t// ( namespace ) or ( selector, types [, fn] )\n\t\t\treturn arguments.length === 1 ?\n\t\t\t\tthis.off(selector, \"**\") :\n\t\t\t\tthis.off(types, selector || \"**\", fn);\n\t\t},\n\n\t\thover: function (fnOver, fnOut) {\n\t\t\treturn this.mouseenter(fnOver).mouseleave(fnOut || fnOver);\n\t\t}\n\t});\n\n\tjQuery.each(\n\t\t(\"blur focus focusin focusout resize scroll click dblclick \" +\n\t\t\t\"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave \" +\n\t\t\t\"change select submit keydown keypress keyup contextmenu\").split(\" \"),\n\t\tfunction (_i, name) {\n\n\t\t\t// Handle event binding\n\t\t\tjQuery.fn[name] = function (data, fn) {\n\t\t\t\treturn arguments.length > 0 ?\n\t\t\t\t\tthis.on(name, null, data, fn) :\n\t\t\t\t\tthis.trigger(name);\n\t\t\t};\n\t\t}\n\t);\n\n\n\n\n\t// Support: Android <=4.0 only\n\t// Make sure we trim BOM and NBSP\n\t// Require that the \"whitespace run\" starts from a non-whitespace\n\t// to avoid O(N^2) behavior when the engine would try matching \"\\s+$\" at each space position.\n\tvar rtrim = /^[\\s\\uFEFF\\xA0]+|([^\\s\\uFEFF\\xA0])[\\s\\uFEFF\\xA0]+$/g;\n\n\t// Bind a function to a context, optionally partially applying any\n\t// arguments.\n\t// jQuery.proxy is deprecated to promote standards (specifically Function#bind)\n\t// However, it is not slated for removal any time soon\n\tjQuery.proxy = function (fn, context) {\n\t\tvar tmp, args, proxy;\n\n\t\tif (typeof context === \"string\") {\n\t\t\ttmp = fn[context];\n\t\t\tcontext = fn;\n\t\t\tfn = tmp;\n\t\t}\n\n\t\t// Quick check to determine if target is callable, in the spec\n\t\t// this throws a TypeError, but we will just return undefined.\n\t\tif (!isFunction(fn)) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\t// Simulated bind\n\t\targs = slice.call(arguments, 2);\n\t\tproxy = function () {\n\t\t\treturn fn.apply(context || this, args.concat(slice.call(arguments)));\n\t\t};\n\n\t\t// Set the guid of unique handler to the same of original handler, so it can be removed\n\t\tproxy.guid = fn.guid = fn.guid || jQuery.guid++;\n\n\t\treturn proxy;\n\t};\n\n\tjQuery.holdReady = function (hold) {\n\t\tif (hold) {\n\t\t\tjQuery.readyWait++;\n\t\t} else {\n\t\t\tjQuery.ready(true);\n\t\t}\n\t};\n\tjQuery.isArray = Array.isArray;\n\tjQuery.parseJSON = JSON.parse;\n\tjQuery.nodeName = nodeName;\n\tjQuery.isFunction = isFunction;\n\tjQuery.isWindow = isWindow;\n\tjQuery.camelCase = camelCase;\n\tjQuery.type = toType;\n\n\tjQuery.now = Date.now;\n\n\tjQuery.isNumeric = function (obj) {\n\n\t\t// As of jQuery 3.0, isNumeric is limited to\n\t\t// strings and numbers (primitives or objects)\n\t\t// that can be coerced to finite numbers (gh-2662)\n\t\tvar type = jQuery.type(obj);\n\t\treturn (type === \"number\" || type === \"string\") &&\n\n\t\t\t// parseFloat NaNs numeric-cast false positives (\"\")\n\t\t\t// ...but misinterprets leading-number strings, particularly hex literals (\"0x...\")\n\t\t\t// subtraction forces infinities to NaN\n\t\t\t!isNaN(obj - parseFloat(obj));\n\t};\n\n\tjQuery.trim = function (text) {\n\t\treturn text == null ?\n\t\t\t\"\" :\n\t\t\t(text + \"\").replace(rtrim, \"$1\");\n\t};\n\n\n\n\t// Register as a named AMD module, since jQuery can be concatenated with other\n\t// files that may use define, but not via a proper concatenation script that\n\t// understands anonymous AMD modules. A named AMD is safest and most robust\n\t// way to register. Lowercase jquery is used because AMD module names are\n\t// derived from file names, and jQuery is normally delivered in a lowercase\n\t// file name. Do this after creating the global so that if an AMD module wants\n\t// to call noConflict to hide this version of jQuery, it will work.\n\n\t// Note that for maximum portability, libraries that are not jQuery should\n\t// declare themselves as anonymous modules, and avoid setting a global if an\n\t// AMD loader is present. jQuery is a special case. For more information, see\n\t// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon\n\n\tif (typeof define === \"function\" && define.amd) {\n\t\tdefine(\"jquery\", [], function () {\n\t\t\treturn jQuery;\n\t\t});\n\t}\n\n\n\n\n\tvar\n\n\t\t// Map over jQuery in case of overwrite\n\t\t_jQuery = window.jQuery,\n\n\t\t// Map over the $ in case of overwrite\n\t\t_$ = window.$;\n\n\tjQuery.noConflict = function (deep) {\n\t\tif (window.$ === jQuery) {\n\t\t\twindow.$ = _$;\n\t\t}\n\n\t\tif (deep && window.jQuery === jQuery) {\n\t\t\twindow.jQuery = _jQuery;\n\t\t}\n\n\t\treturn jQuery;\n\t};\n\n\t// Expose jQuery and $ identifiers, even in AMD\n\t// (trac-7102#comment:10, https://github.com/jquery/jquery/pull/557)\n\t// and CommonJS for browser emulators (trac-13566)\n\tif (typeof noGlobal === \"undefined\") {\n\t\twindow.jQuery = window.$ = jQuery;\n\t}\n\n\n\n\n\treturn jQuery;\n});"
  },
  {
    "path": "src/sourceDev.WebApp/SharedThemes/united/Shared/_Layout.cshtml",
    "content": "﻿@inject ISiteContextResolver siteResolver\n@inject ICoreThemeHelper themeHelper\n@{\n    var themeSettings = themeHelper.GetThemeSettings();\n    @*\n        These settings can be set by a main view to show additional columns.\n        Views that push content into the optional sections SideNav, AsidePrimary, and AsideSecondary\n        are obligated to set the needed viewtate property to true to show the section,\n        otherwise an error will occur.\n        The sideNav column also supports a toggle so it can be hidden and toggled visible even though it renders.\n    *@\n    bool sideNavVisible = true.Equals(ViewData[\"SideNavVisible\"]);\n    string sideNavToggleClass = ViewData[\"SideNavToggle\"]?.ToString() ?? \"collapse\";\n    bool asidePrimaryVisible = true.Equals(ViewData[\"AsidePrimaryVisible\"]);\n    bool asideSecondaryVisible = true.Equals(ViewData[\"AsideSecondaryVisible\"]);\n    var Tenant = await siteResolver.ResolveSite(Context.Request.Host.Host, Context.Request.Path);\n    var siteRoot = \"\";\n    if (!string.IsNullOrWhiteSpace(Tenant.SiteFolderName)) { siteRoot = \"/\" + Tenant.SiteFolderName; }\n    \n}\n<!DOCTYPE html>\n<html lang=\"@CultureInfo.CurrentUICulture.Name\">\n<head>\n    <meta charset=\"utf-8\" />\n    <title>@ViewData[\"Title\"] - @(Tenant?.SiteName ?? \"Sample\")</title>\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1, shrink-to-fit=no\">\n    @RenderSection(\"Meta\", required: false)\n    <environment names=\"Development\">\n        <link rel=\"stylesheet\" href=\"~/css/bootstrap.css\" cs-resolve-theme-resource=\"true\" cs-shared-theme=\"true\" cs-tenant=\"@Tenant\" />\n        <link rel=\"stylesheet\" href=\"~/css/fontawesome-all.min.css\" cs-resolve-theme-resource=\"true\" cs-shared-theme=\"true\" cs-tenant=\"@Tenant\" />\n        <link rel=\"stylesheet\" href=\"~/css/site.css\" cs-resolve-theme-resource=\"true\" cs-shared-theme=\"true\" cs-tenant=\"@Tenant\" asp-append-version=\"true\" />\n    </environment>\n    <environment names=\"Staging,Production\">\n        <link rel=\"stylesheet\" href=\"~/css/bootstrap.min.css\" cs-resolve-theme-resource=\"true\" cs-shared-theme=\"true\" cs-tenant=\"@Tenant\" />\n        <link rel=\"stylesheet\" href=\"~/css/fontawesome-all.min.css\" cs-resolve-theme-resource=\"true\" cs-shared-theme=\"true\" cs-tenant=\"@Tenant\" />\n        <link rel=\"stylesheet\" href=\"~/css/site.min.css\" cs-resolve-theme-resource=\"true\" cs-shared-theme=\"true\" cs-tenant=\"@Tenant\" asp-append-version=\"true\" />\n    </environment>\n    @RenderSection(\"Styles\", required: false)    \n    \n    <google-analytics profile-id=\"@Tenant.GoogleAnalyticsProfileId\" user-id=\"@User.GetUserId()\"></google-analytics>\n    <base href=\"@Context.Request.Path\" />\n</head>\n<body class=\"d-flex flex-column @ViewData[\"BodyClass\"]\">\n    <header class=\"bg-white\">\n        <a id=\"skippy\" class=\"visually-hidden visually-hidden-focusable\" href=\"#content\">\n            <div class=\"container\">\n                <span class=\"skiplink-text\">Skip to main content</span>\n            </div>\n        </a>\n        <div class=\"fixed-top container-fluid brand-header bg-white\">\n            <div class=\"d-flex align-items-center bg-white\">\n                 @if (!string.IsNullOrWhiteSpace(Tenant.LogoUrl))\n                {\n                    <div>\n                         <partial name=\"SiteLogoPartial\" model=\"@Tenant\" />\n                    </div>\n                }\n                @if (Tenant.ShowSiteNameLink)\n                {\n                    <div class=\"align-self-center pt-4 pt-sm-0\">\n                         <partial name=\"SiteTitlePartial\" model=\"@Tenant\" />\n                    </div>\n                }\n                @if (!string.IsNullOrWhiteSpace(Tenant.HeaderContent))\n                {\n                    <div class=\"flex-fill align-self-center pt-3 d-none d-md-block\">\n                        <partial name=\"SiteHeaderPartial\" />\n                    </div>\n                }\n            </div>\n        </div>\n        <nav class=\"navbar navbar-expand-md navbar-dark fixed-top bg-dark pt-0 pb-0\">\n            <button class=\"navbar-toggler\" type=\"button\" data-bs-toggle=\"collapse\" data-bs-target=\"#navbarNavDropdown\" aria-controls=\"navbarNavDropdown\" aria-expanded=\"false\" aria-label=\"Toggle navigation\">\n                <span class=\"navbar-toggler-icon\"></span>\n            </button>\n\n            <div class=\"collapse navbar-collapse bg-dark ps-2\" id=\"navbarNavDropdown\">\n                @await Component.InvokeAsync(\"Navigation\", new { viewName = \"Bootstrap5TopNavWithDropdowns\", filterName = NamedNavigationFilters.TopNav, startingNodeKey = \"\" })\n                <partial name=\"_LoginPartialWithDropdowns\" />\n            </div>\n        </nav>\n    </header>\n    <div id=\"wrapper\" class=\"container-fluid cs-container flex-fill\">\n        @await Component.InvokeAsync(\"Navigation\", new { viewName = \"Bootstrap5Breadcrumbs\", filterName = NamedNavigationFilters.Breadcrumbs, startingNodeKey = \"\" })\n        <div class=\"row\">\n            <main id=\"content\" class=\"col order-3\">\n                <partial name=\"AlertsPartial\" />\n                <partial name=\"_CookieConsentPartial\" />\n                <partial name=\"_AutoLogoutWarningPartial\" />\n                @RenderBody()\n            </main>\n            @if (sideNavVisible)\n            {\n                <nav id=\"sidenavmenu\" class=\" col col-3 order-1 @sideNavToggleClass\">\n                    @RenderSection(\"SideNav\", required: false)\n                </nav>\n\n            }\n            @if (asideSecondaryVisible)\n            {\n                <aside id=\"asideSecondary\" class=\"col col-1 order-2\">\n                    @RenderSection(\"AsideSecondary\", required: false)\n                </aside>\n\n            }\n            @if (asidePrimaryVisible)\n            {\n                <aside id=\"asidePrimary\" class=\"col-12 col-md-3 col-sm-12  col-sm-12 order-4\">\n                    @RenderSection(\"AsidePrimary\", required: false)\n                </aside>\n\n            }\n        </div>\n    </div>\n     <footer class=\"sticky-bottom border pt-2 h-100\">\n        <div class=\"w-100 text-center\">\n            <partial name=\"SiteFooterPartial\" />\n        </div>\n        <div class=\"d-flex flex-wrap flex-grow justify-content-center\">\n            <div class=\"p-2\">\n            <ul class=\"list-unstyled d-md-flex flex-wrap\">\n                @if (Tenant != null && !string.IsNullOrWhiteSpace(Tenant.PrivacyPolicy))\n                {\n                    <li class=\"ps-sm-2 me-sm-2\">\n                        <a asp-controller=\"Privacy\" asp-action=\"Index\">Privacy Policy</a>\n                    </li>\n                }\n                <li class=\"ps-sm-2 me-sm-2\">\n                    @* you are free to remove the powered by cloudscribe link but we appreciate it if you choose to keep it! *@\n                    <a class=\"text-nowrap\" target=\"_blank\" href=\"https://www.cloudscribe.com/?utm_source=@Context.Request.Host.Value&amp;utm_medium=referral&amp;utm_campaign=poweredbycloudscribe\">Powered by cloudscribe</a>\n                </li>\n            </ul>\n        </div>\n        <div class=\"p-2 text-nowrap\">Copyright &copy; @DateTime.Now.Year - @(Tenant?.SiteName ?? \"Sample\")</div>\n        <partial name=\"_CookieConsentRevokePartial\" />\n        </div>\n    </footer>\n    @RenderSection(\"Toolbar\", required: false)\n    <environment names=\"Development\">\n        <script src=\"~/js/jquery.js\" cs-resolve-theme-resource=\"true\" cs-shared-theme=\"true\" cs-tenant=\"@Tenant\"></script>\n        <script src=\"~/js/bootstrap.bundle.js\" cs-resolve-theme-resource=\"true\" cs-shared-theme=\"true\" cs-tenant=\"@Tenant\"></script>\n        <script src=\"~/cr/js/bs4.smartmenus.min.js\"></script>\n    </environment>\n    <environment names=\"Staging,Production\">\n        <script src=\"~/js/jquery.min.js\" cs-resolve-theme-resource=\"true\" cs-shared-theme=\"true\" cs-tenant=\"@Tenant\"></script>\n        <script src=\"~/js/bootstrap.bundle.min.js\" cs-resolve-theme-resource=\"true\" cs-shared-theme=\"true\" cs-tenant=\"@Tenant\"></script>\n        <script src=\"~/cr/js/bs4.smartmenus.min.js\"></script>\n    </environment>\n    @RenderSection(\"Bottom\", required: false)\n    @RenderSection(\"Scripts\", required: false)     \n    @Html.RenderResources(\"js\") @*render any js resources declared via helpers in partial views etc*@\n    <add-this profile-id=\"@Tenant.AddThisDotComUsername\" async></add-this>\n</body>\n</html>\n"
  },
  {
    "path": "src/sourceDev.WebApp/SharedThemes/united/wwwroot/css/_bootswatch.scss",
    "content": "// United 5.1.3\n// Bootswatch\n\n\n// Variables\n\n$web-font-path: \"https://fonts.googleapis.com/css2?family=Ubuntu:wght@400;700&display=swap\" !default;\n@if $web-font-path {\n  @import url($web-font-path);\n}\n\n// Indicators\n\n.badge {\n  &.bg-light {\n    color: $body-color;\n  }\n}\n"
  },
  {
    "path": "src/sourceDev.WebApp/SharedThemes/united/wwwroot/css/_variables.scss",
    "content": "// United 5.1.3\n// Bootswatch\n\n$theme: \"united\" !default;\n\n//\n// Color system\n//\n\n$white:    #fff !default;\n$gray-100: #f8f9fa !default;\n$gray-200: #e9ecef !default;\n$gray-300: #dee2e6 !default;\n$gray-400: #ced4da !default;\n$gray-500: #aea79f !default;\n$gray-600: #868e96 !default;\n$gray-700: #495057 !default;\n$gray-800: #333 !default;\n$gray-900: #212529 !default;\n$black:    #000 !default;\n\n$blue:    #007bff !default;\n$indigo:  #6610f2 !default;\n$purple:  #772953 !default;\n$pink:    #e83e8c !default;\n$red:     #df382c !default;\n$orange:  #e95420 !default;\n$yellow:  #efb73e !default;\n$green:   #38b44a !default;\n$teal:    #20c997 !default;\n$cyan:    #17a2b8 !default;\n\n$primary:       $orange !default;\n$secondary:     $gray-500 !default;\n$success:       $green !default;\n$info:          $cyan !default;\n$warning:       $yellow !default;\n$danger:        $red !default;\n$light:         $gray-200 !default;\n$dark:          $purple !default;\n\n$min-contrast-ratio:   1.8 !default;\n\n// Body\n\n$body-color:                $gray-800 !default;\n\n// Fonts\n\n// stylelint-disable-next-line value-keyword-case\n$font-family-sans-serif:      Ubuntu, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\" !default;\n\n// Tables\n\n$table-dark-bg:               $dark !default;\n$table-dark-border-color:     darken($dark, 5%) !default;\n"
  },
  {
    "path": "src/sourceDev.WebApp/SharedThemes/united/wwwroot/css/bootstrap.css",
    "content": "/*!\n * Bootswatch v5.1.3\n * Homepage: https://bootswatch.com\n * Copyright 2012-2021 Thomas Park\n * Licensed under MIT\n * Based on Bootstrap\n*/\n/*!\n * Bootstrap v5.1.3 (https://getbootstrap.com/)\n * Copyright 2011-2021 The Bootstrap Authors\n * Copyright 2011-2021 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n@import url(\"https://fonts.googleapis.com/css2?family=Ubuntu:wght@400;700&display=swap\");\n:root {\n  --bs-blue: #007bff;\n  --bs-indigo: #6610f2;\n  --bs-purple: #772953;\n  --bs-pink: #e83e8c;\n  --bs-red: #df382c;\n  --bs-orange: #e95420;\n  --bs-yellow: #efb73e;\n  --bs-green: #38b44a;\n  --bs-teal: #20c997;\n  --bs-cyan: #17a2b8;\n  --bs-white: #fff;\n  --bs-gray: #868e96;\n  --bs-gray-dark: #333;\n  --bs-gray-100: #f8f9fa;\n  --bs-gray-200: #e9ecef;\n  --bs-gray-300: #dee2e6;\n  --bs-gray-400: #ced4da;\n  --bs-gray-500: #aea79f;\n  --bs-gray-600: #868e96;\n  --bs-gray-700: #495057;\n  --bs-gray-800: #333;\n  --bs-gray-900: #212529;\n  --bs-primary: #e95420;\n  --bs-secondary: #aea79f;\n  --bs-success: #38b44a;\n  --bs-info: #17a2b8;\n  --bs-warning: #efb73e;\n  --bs-danger: #df382c;\n  --bs-light: #e9ecef;\n  --bs-dark: #772953;\n  --bs-primary-rgb: 233, 84, 32;\n  --bs-secondary-rgb: 174, 167, 159;\n  --bs-success-rgb: 56, 180, 74;\n  --bs-info-rgb: 23, 162, 184;\n  --bs-warning-rgb: 239, 183, 62;\n  --bs-danger-rgb: 223, 56, 44;\n  --bs-light-rgb: 233, 236, 239;\n  --bs-dark-rgb: 119, 41, 83;\n  --bs-white-rgb: 255, 255, 255;\n  --bs-black-rgb: 0, 0, 0;\n  --bs-body-color-rgb: 51, 51, 51;\n  --bs-body-bg-rgb: 255, 255, 255;\n  --bs-font-sans-serif: Ubuntu, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\";\n  --bs-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n  --bs-gradient: linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));\n  --bs-body-font-family: var(--bs-font-sans-serif);\n  --bs-body-font-size: 1rem;\n  --bs-body-font-weight: 400;\n  --bs-body-line-height: 1.5;\n  --bs-body-color: #333;\n  --bs-body-bg: #fff;\n}\n\n*,\n*::before,\n*::after {\n  box-sizing: border-box;\n}\n\n@media (prefers-reduced-motion: no-preference) {\n  :root {\n    scroll-behavior: smooth;\n  }\n}\n\nbody {\n  margin: 0;\n  font-family: var(--bs-body-font-family);\n  font-size: var(--bs-body-font-size);\n  font-weight: var(--bs-body-font-weight);\n  line-height: var(--bs-body-line-height);\n  color: var(--bs-body-color);\n  text-align: var(--bs-body-text-align);\n  background-color: var(--bs-body-bg);\n  -webkit-text-size-adjust: 100%;\n  -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\n\nhr {\n  margin: 1rem 0;\n  color: inherit;\n  background-color: currentColor;\n  border: 0;\n  opacity: 0.25;\n}\n\nhr:not([size]) {\n  height: 1px;\n}\n\nh1, .h1, h2, .h2, h3, .h3, h4, .h4, h5, .h5, h6, .h6 {\n  margin-top: 0;\n  margin-bottom: 0.5rem;\n  font-weight: 500;\n  line-height: 1.2;\n}\n\nh1, .h1 {\n  font-size: calc(1.375rem + 1.5vw);\n}\n\n@media (min-width: 1200px) {\n  h1, .h1 {\n    font-size: 2.5rem;\n  }\n}\n\nh2, .h2 {\n  font-size: calc(1.325rem + 0.9vw);\n}\n\n@media (min-width: 1200px) {\n  h2, .h2 {\n    font-size: 2rem;\n  }\n}\n\nh3, .h3 {\n  font-size: calc(1.3rem + 0.6vw);\n}\n\n@media (min-width: 1200px) {\n  h3, .h3 {\n    font-size: 1.75rem;\n  }\n}\n\nh4, .h4 {\n  font-size: calc(1.275rem + 0.3vw);\n}\n\n@media (min-width: 1200px) {\n  h4, .h4 {\n    font-size: 1.5rem;\n  }\n}\n\nh5, .h5 {\n  font-size: 1.25rem;\n}\n\nh6, .h6 {\n  font-size: 1rem;\n}\n\np {\n  margin-top: 0;\n  margin-bottom: 1rem;\n}\n\nabbr[title],\nabbr[data-bs-original-title] {\n  -webkit-text-decoration: underline dotted;\n  text-decoration: underline dotted;\n  cursor: help;\n  -webkit-text-decoration-skip-ink: none;\n  text-decoration-skip-ink: none;\n}\n\naddress {\n  margin-bottom: 1rem;\n  font-style: normal;\n  line-height: inherit;\n}\n\nol,\nul {\n  padding-left: 2rem;\n}\n\nol,\nul,\ndl {\n  margin-top: 0;\n  margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n  margin-bottom: 0;\n}\n\ndt {\n  font-weight: 700;\n}\n\ndd {\n  margin-bottom: .5rem;\n  margin-left: 0;\n}\n\nblockquote {\n  margin: 0 0 1rem;\n}\n\nb,\nstrong {\n  font-weight: bolder;\n}\n\nsmall, .small {\n  font-size: 0.875em;\n}\n\nmark, .mark {\n  padding: 0.2em;\n  background-color: #fcf8e3;\n}\n\nsub,\nsup {\n  position: relative;\n  font-size: 0.75em;\n  line-height: 0;\n  vertical-align: baseline;\n}\n\nsub {\n  bottom: -.25em;\n}\n\nsup {\n  top: -.5em;\n}\n\na {\n  color: #e95420;\n  text-decoration: underline;\n}\n\na:hover {\n  color: #ba431a;\n}\n\na:not([href]):not([class]), a:not([href]):not([class]):hover {\n  color: inherit;\n  text-decoration: none;\n}\n\npre,\ncode,\nkbd,\nsamp {\n  font-family: var(--bs-font-monospace);\n  font-size: 1em;\n  direction: ltr /* rtl:ignore */;\n  unicode-bidi: bidi-override;\n}\n\npre {\n  display: block;\n  margin-top: 0;\n  margin-bottom: 1rem;\n  overflow: auto;\n  font-size: 0.875em;\n}\n\npre code {\n  font-size: inherit;\n  color: inherit;\n  word-break: normal;\n}\n\ncode {\n  font-size: 0.875em;\n  color: #e83e8c;\n  word-wrap: break-word;\n}\n\na > code {\n  color: inherit;\n}\n\nkbd {\n  padding: 0.2rem 0.4rem;\n  font-size: 0.875em;\n  color: #fff;\n  background-color: #212529;\n  border-radius: 0.2rem;\n}\n\nkbd kbd {\n  padding: 0;\n  font-size: 1em;\n  font-weight: 700;\n}\n\nfigure {\n  margin: 0 0 1rem;\n}\n\nimg,\nsvg {\n  vertical-align: middle;\n}\n\ntable {\n  caption-side: bottom;\n  border-collapse: collapse;\n}\n\ncaption {\n  padding-top: 0.5rem;\n  padding-bottom: 0.5rem;\n  color: #868e96;\n  text-align: left;\n}\n\nth {\n  text-align: inherit;\n  text-align: -webkit-match-parent;\n}\n\nthead,\ntbody,\ntfoot,\ntr,\ntd,\nth {\n  border-color: inherit;\n  border-style: solid;\n  border-width: 0;\n}\n\nlabel {\n  display: inline-block;\n}\n\nbutton {\n  border-radius: 0;\n}\n\nbutton:focus:not(:focus-visible) {\n  outline: 0;\n}\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n  margin: 0;\n  font-family: inherit;\n  font-size: inherit;\n  line-height: inherit;\n}\n\nbutton,\nselect {\n  text-transform: none;\n}\n\n[role=\"button\"] {\n  cursor: pointer;\n}\n\nselect {\n  word-wrap: normal;\n}\n\nselect:disabled {\n  opacity: 1;\n}\n\n[list]::-webkit-calendar-picker-indicator {\n  display: none;\n}\n\nbutton,\n[type=\"button\"],\n[type=\"reset\"],\n[type=\"submit\"] {\n  -webkit-appearance: button;\n}\n\nbutton:not(:disabled),\n[type=\"button\"]:not(:disabled),\n[type=\"reset\"]:not(:disabled),\n[type=\"submit\"]:not(:disabled) {\n  cursor: pointer;\n}\n\n::-moz-focus-inner {\n  padding: 0;\n  border-style: none;\n}\n\ntextarea {\n  resize: vertical;\n}\n\nfieldset {\n  min-width: 0;\n  padding: 0;\n  margin: 0;\n  border: 0;\n}\n\nlegend {\n  float: left;\n  width: 100%;\n  padding: 0;\n  margin-bottom: 0.5rem;\n  font-size: calc(1.275rem + 0.3vw);\n  line-height: inherit;\n}\n\n@media (min-width: 1200px) {\n  legend {\n    font-size: 1.5rem;\n  }\n}\n\nlegend + * {\n  clear: left;\n}\n\n::-webkit-datetime-edit-fields-wrapper,\n::-webkit-datetime-edit-text,\n::-webkit-datetime-edit-minute,\n::-webkit-datetime-edit-hour-field,\n::-webkit-datetime-edit-day-field,\n::-webkit-datetime-edit-month-field,\n::-webkit-datetime-edit-year-field {\n  padding: 0;\n}\n\n::-webkit-inner-spin-button {\n  height: auto;\n}\n\n[type=\"search\"] {\n  outline-offset: -2px;\n  -webkit-appearance: textfield;\n}\n\n/* rtl:raw:\n[type=\"tel\"],\n[type=\"url\"],\n[type=\"email\"],\n[type=\"number\"] {\n  direction: ltr;\n}\n*/\n::-webkit-search-decoration {\n  -webkit-appearance: none;\n}\n\n::-webkit-color-swatch-wrapper {\n  padding: 0;\n}\n\n::file-selector-button {\n  font: inherit;\n}\n\n::-webkit-file-upload-button {\n  font: inherit;\n  -webkit-appearance: button;\n}\n\noutput {\n  display: inline-block;\n}\n\niframe {\n  border: 0;\n}\n\nsummary {\n  display: list-item;\n  cursor: pointer;\n}\n\nprogress {\n  vertical-align: baseline;\n}\n\n[hidden] {\n  display: none !important;\n}\n\n.lead {\n  font-size: 1.25rem;\n  font-weight: 300;\n}\n\n.display-1 {\n  font-size: calc(1.625rem + 4.5vw);\n  font-weight: 300;\n  line-height: 1.2;\n}\n\n@media (min-width: 1200px) {\n  .display-1 {\n    font-size: 5rem;\n  }\n}\n\n.display-2 {\n  font-size: calc(1.575rem + 3.9vw);\n  font-weight: 300;\n  line-height: 1.2;\n}\n\n@media (min-width: 1200px) {\n  .display-2 {\n    font-size: 4.5rem;\n  }\n}\n\n.display-3 {\n  font-size: calc(1.525rem + 3.3vw);\n  font-weight: 300;\n  line-height: 1.2;\n}\n\n@media (min-width: 1200px) {\n  .display-3 {\n    font-size: 4rem;\n  }\n}\n\n.display-4 {\n  font-size: calc(1.475rem + 2.7vw);\n  font-weight: 300;\n  line-height: 1.2;\n}\n\n@media (min-width: 1200px) {\n  .display-4 {\n    font-size: 3.5rem;\n  }\n}\n\n.display-5 {\n  font-size: calc(1.425rem + 2.1vw);\n  font-weight: 300;\n  line-height: 1.2;\n}\n\n@media (min-width: 1200px) {\n  .display-5 {\n    font-size: 3rem;\n  }\n}\n\n.display-6 {\n  font-size: calc(1.375rem + 1.5vw);\n  font-weight: 300;\n  line-height: 1.2;\n}\n\n@media (min-width: 1200px) {\n  .display-6 {\n    font-size: 2.5rem;\n  }\n}\n\n.list-unstyled {\n  padding-left: 0;\n  list-style: none;\n}\n\n.list-inline {\n  padding-left: 0;\n  list-style: none;\n}\n\n.list-inline-item {\n  display: inline-block;\n}\n\n.list-inline-item:not(:last-child) {\n  margin-right: 0.5rem;\n}\n\n.initialism {\n  font-size: 0.875em;\n  text-transform: uppercase;\n}\n\n.blockquote {\n  margin-bottom: 1rem;\n  font-size: 1.25rem;\n}\n\n.blockquote > :last-child {\n  margin-bottom: 0;\n}\n\n.blockquote-footer {\n  margin-top: -1rem;\n  margin-bottom: 1rem;\n  font-size: 0.875em;\n  color: #868e96;\n}\n\n.blockquote-footer::before {\n  content: \"\\2014\\00A0\";\n}\n\n.img-fluid {\n  max-width: 100%;\n  height: auto;\n}\n\n.img-thumbnail {\n  padding: 0.25rem;\n  background-color: #fff;\n  border: 1px solid #dee2e6;\n  border-radius: 0.25rem;\n  max-width: 100%;\n  height: auto;\n}\n\n.figure {\n  display: inline-block;\n}\n\n.figure-img {\n  margin-bottom: 0.5rem;\n  line-height: 1;\n}\n\n.figure-caption {\n  font-size: 0.875em;\n  color: #868e96;\n}\n\n.container,\n.container-fluid,\n.container-sm,\n.container-md,\n.container-lg,\n.container-xl,\n.container-xxl {\n  width: 100%;\n  padding-right: var(--bs-gutter-x, 0.75rem);\n  padding-left: var(--bs-gutter-x, 0.75rem);\n  margin-right: auto;\n  margin-left: auto;\n}\n\n@media (min-width: 576px) {\n  .container, .container-sm {\n    max-width: 540px;\n  }\n}\n\n@media (min-width: 768px) {\n  .container, .container-sm, .container-md {\n    max-width: 720px;\n  }\n}\n\n@media (min-width: 992px) {\n  .container, .container-sm, .container-md, .container-lg {\n    max-width: 960px;\n  }\n}\n\n@media (min-width: 1200px) {\n  .container, .container-sm, .container-md, .container-lg, .container-xl {\n    max-width: 1140px;\n  }\n}\n\n@media (min-width: 1400px) {\n  .container, .container-sm, .container-md, .container-lg, .container-xl, .container-xxl {\n    max-width: 1320px;\n  }\n}\n\n.row {\n  --bs-gutter-x: 1.5rem;\n  --bs-gutter-y: 0;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n  flex-wrap: wrap;\n  margin-top: calc(-1 * var(--bs-gutter-y));\n  margin-right: calc(-.5 * var(--bs-gutter-x));\n  margin-left: calc(-.5 * var(--bs-gutter-x));\n}\n\n.row > * {\n  -ms-flex-negative: 0;\n  flex-shrink: 0;\n  width: 100%;\n  max-width: 100%;\n  padding-right: calc(var(--bs-gutter-x) * .5);\n  padding-left: calc(var(--bs-gutter-x) * .5);\n  margin-top: var(--bs-gutter-y);\n}\n\n.col {\n  -ms-flex: 1 0 0%;\n  flex: 1 0 0%;\n}\n\n.row-cols-auto > * {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: auto;\n}\n\n.row-cols-1 > * {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 100%;\n}\n\n.row-cols-2 > * {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 50%;\n}\n\n.row-cols-3 > * {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 33.333333%;\n}\n\n.row-cols-4 > * {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 25%;\n}\n\n.row-cols-5 > * {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 20%;\n}\n\n.row-cols-6 > * {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 16.666667%;\n}\n\n.col-auto {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: auto;\n}\n\n.col-1 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 8.333333%;\n}\n\n.col-2 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 16.666667%;\n}\n\n.col-3 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 25%;\n}\n\n.col-4 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 33.333333%;\n}\n\n.col-5 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 41.666667%;\n}\n\n.col-6 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 50%;\n}\n\n.col-7 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 58.333333%;\n}\n\n.col-8 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 66.666667%;\n}\n\n.col-9 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 75%;\n}\n\n.col-10 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 83.333333%;\n}\n\n.col-11 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 91.666667%;\n}\n\n.col-12 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 100%;\n}\n\n.offset-1 {\n  margin-left: 8.333333%;\n}\n\n.offset-2 {\n  margin-left: 16.666667%;\n}\n\n.offset-3 {\n  margin-left: 25%;\n}\n\n.offset-4 {\n  margin-left: 33.333333%;\n}\n\n.offset-5 {\n  margin-left: 41.666667%;\n}\n\n.offset-6 {\n  margin-left: 50%;\n}\n\n.offset-7 {\n  margin-left: 58.333333%;\n}\n\n.offset-8 {\n  margin-left: 66.666667%;\n}\n\n.offset-9 {\n  margin-left: 75%;\n}\n\n.offset-10 {\n  margin-left: 83.333333%;\n}\n\n.offset-11 {\n  margin-left: 91.666667%;\n}\n\n.g-0,\n.gx-0 {\n  --bs-gutter-x: 0;\n}\n\n.g-0,\n.gy-0 {\n  --bs-gutter-y: 0;\n}\n\n.g-1,\n.gx-1 {\n  --bs-gutter-x: 0.25rem;\n}\n\n.g-1,\n.gy-1 {\n  --bs-gutter-y: 0.25rem;\n}\n\n.g-2,\n.gx-2 {\n  --bs-gutter-x: 0.5rem;\n}\n\n.g-2,\n.gy-2 {\n  --bs-gutter-y: 0.5rem;\n}\n\n.g-3,\n.gx-3 {\n  --bs-gutter-x: 1rem;\n}\n\n.g-3,\n.gy-3 {\n  --bs-gutter-y: 1rem;\n}\n\n.g-4,\n.gx-4 {\n  --bs-gutter-x: 1.5rem;\n}\n\n.g-4,\n.gy-4 {\n  --bs-gutter-y: 1.5rem;\n}\n\n.g-5,\n.gx-5 {\n  --bs-gutter-x: 3rem;\n}\n\n.g-5,\n.gy-5 {\n  --bs-gutter-y: 3rem;\n}\n\n@media (min-width: 576px) {\n  .col-sm {\n    -ms-flex: 1 0 0%;\n    flex: 1 0 0%;\n  }\n  .row-cols-sm-auto > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .row-cols-sm-1 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .row-cols-sm-2 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .row-cols-sm-3 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 33.333333%;\n  }\n  .row-cols-sm-4 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .row-cols-sm-5 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 20%;\n  }\n  .row-cols-sm-6 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 16.666667%;\n  }\n  .col-sm-auto {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .col-sm-1 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 8.333333%;\n  }\n  .col-sm-2 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 16.666667%;\n  }\n  .col-sm-3 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .col-sm-4 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 33.333333%;\n  }\n  .col-sm-5 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 41.666667%;\n  }\n  .col-sm-6 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .col-sm-7 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 58.333333%;\n  }\n  .col-sm-8 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 66.666667%;\n  }\n  .col-sm-9 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 75%;\n  }\n  .col-sm-10 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 83.333333%;\n  }\n  .col-sm-11 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 91.666667%;\n  }\n  .col-sm-12 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .offset-sm-0 {\n    margin-left: 0;\n  }\n  .offset-sm-1 {\n    margin-left: 8.333333%;\n  }\n  .offset-sm-2 {\n    margin-left: 16.666667%;\n  }\n  .offset-sm-3 {\n    margin-left: 25%;\n  }\n  .offset-sm-4 {\n    margin-left: 33.333333%;\n  }\n  .offset-sm-5 {\n    margin-left: 41.666667%;\n  }\n  .offset-sm-6 {\n    margin-left: 50%;\n  }\n  .offset-sm-7 {\n    margin-left: 58.333333%;\n  }\n  .offset-sm-8 {\n    margin-left: 66.666667%;\n  }\n  .offset-sm-9 {\n    margin-left: 75%;\n  }\n  .offset-sm-10 {\n    margin-left: 83.333333%;\n  }\n  .offset-sm-11 {\n    margin-left: 91.666667%;\n  }\n  .g-sm-0,\n  .gx-sm-0 {\n    --bs-gutter-x: 0;\n  }\n  .g-sm-0,\n  .gy-sm-0 {\n    --bs-gutter-y: 0;\n  }\n  .g-sm-1,\n  .gx-sm-1 {\n    --bs-gutter-x: 0.25rem;\n  }\n  .g-sm-1,\n  .gy-sm-1 {\n    --bs-gutter-y: 0.25rem;\n  }\n  .g-sm-2,\n  .gx-sm-2 {\n    --bs-gutter-x: 0.5rem;\n  }\n  .g-sm-2,\n  .gy-sm-2 {\n    --bs-gutter-y: 0.5rem;\n  }\n  .g-sm-3,\n  .gx-sm-3 {\n    --bs-gutter-x: 1rem;\n  }\n  .g-sm-3,\n  .gy-sm-3 {\n    --bs-gutter-y: 1rem;\n  }\n  .g-sm-4,\n  .gx-sm-4 {\n    --bs-gutter-x: 1.5rem;\n  }\n  .g-sm-4,\n  .gy-sm-4 {\n    --bs-gutter-y: 1.5rem;\n  }\n  .g-sm-5,\n  .gx-sm-5 {\n    --bs-gutter-x: 3rem;\n  }\n  .g-sm-5,\n  .gy-sm-5 {\n    --bs-gutter-y: 3rem;\n  }\n}\n\n@media (min-width: 768px) {\n  .col-md {\n    -ms-flex: 1 0 0%;\n    flex: 1 0 0%;\n  }\n  .row-cols-md-auto > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .row-cols-md-1 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .row-cols-md-2 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .row-cols-md-3 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 33.333333%;\n  }\n  .row-cols-md-4 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .row-cols-md-5 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 20%;\n  }\n  .row-cols-md-6 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 16.666667%;\n  }\n  .col-md-auto {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .col-md-1 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 8.333333%;\n  }\n  .col-md-2 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 16.666667%;\n  }\n  .col-md-3 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .col-md-4 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 33.333333%;\n  }\n  .col-md-5 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 41.666667%;\n  }\n  .col-md-6 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .col-md-7 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 58.333333%;\n  }\n  .col-md-8 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 66.666667%;\n  }\n  .col-md-9 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 75%;\n  }\n  .col-md-10 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 83.333333%;\n  }\n  .col-md-11 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 91.666667%;\n  }\n  .col-md-12 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .offset-md-0 {\n    margin-left: 0;\n  }\n  .offset-md-1 {\n    margin-left: 8.333333%;\n  }\n  .offset-md-2 {\n    margin-left: 16.666667%;\n  }\n  .offset-md-3 {\n    margin-left: 25%;\n  }\n  .offset-md-4 {\n    margin-left: 33.333333%;\n  }\n  .offset-md-5 {\n    margin-left: 41.666667%;\n  }\n  .offset-md-6 {\n    margin-left: 50%;\n  }\n  .offset-md-7 {\n    margin-left: 58.333333%;\n  }\n  .offset-md-8 {\n    margin-left: 66.666667%;\n  }\n  .offset-md-9 {\n    margin-left: 75%;\n  }\n  .offset-md-10 {\n    margin-left: 83.333333%;\n  }\n  .offset-md-11 {\n    margin-left: 91.666667%;\n  }\n  .g-md-0,\n  .gx-md-0 {\n    --bs-gutter-x: 0;\n  }\n  .g-md-0,\n  .gy-md-0 {\n    --bs-gutter-y: 0;\n  }\n  .g-md-1,\n  .gx-md-1 {\n    --bs-gutter-x: 0.25rem;\n  }\n  .g-md-1,\n  .gy-md-1 {\n    --bs-gutter-y: 0.25rem;\n  }\n  .g-md-2,\n  .gx-md-2 {\n    --bs-gutter-x: 0.5rem;\n  }\n  .g-md-2,\n  .gy-md-2 {\n    --bs-gutter-y: 0.5rem;\n  }\n  .g-md-3,\n  .gx-md-3 {\n    --bs-gutter-x: 1rem;\n  }\n  .g-md-3,\n  .gy-md-3 {\n    --bs-gutter-y: 1rem;\n  }\n  .g-md-4,\n  .gx-md-4 {\n    --bs-gutter-x: 1.5rem;\n  }\n  .g-md-4,\n  .gy-md-4 {\n    --bs-gutter-y: 1.5rem;\n  }\n  .g-md-5,\n  .gx-md-5 {\n    --bs-gutter-x: 3rem;\n  }\n  .g-md-5,\n  .gy-md-5 {\n    --bs-gutter-y: 3rem;\n  }\n}\n\n@media (min-width: 992px) {\n  .col-lg {\n    -ms-flex: 1 0 0%;\n    flex: 1 0 0%;\n  }\n  .row-cols-lg-auto > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .row-cols-lg-1 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .row-cols-lg-2 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .row-cols-lg-3 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 33.333333%;\n  }\n  .row-cols-lg-4 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .row-cols-lg-5 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 20%;\n  }\n  .row-cols-lg-6 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 16.666667%;\n  }\n  .col-lg-auto {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .col-lg-1 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 8.333333%;\n  }\n  .col-lg-2 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 16.666667%;\n  }\n  .col-lg-3 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .col-lg-4 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 33.333333%;\n  }\n  .col-lg-5 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 41.666667%;\n  }\n  .col-lg-6 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .col-lg-7 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 58.333333%;\n  }\n  .col-lg-8 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 66.666667%;\n  }\n  .col-lg-9 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 75%;\n  }\n  .col-lg-10 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 83.333333%;\n  }\n  .col-lg-11 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 91.666667%;\n  }\n  .col-lg-12 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .offset-lg-0 {\n    margin-left: 0;\n  }\n  .offset-lg-1 {\n    margin-left: 8.333333%;\n  }\n  .offset-lg-2 {\n    margin-left: 16.666667%;\n  }\n  .offset-lg-3 {\n    margin-left: 25%;\n  }\n  .offset-lg-4 {\n    margin-left: 33.333333%;\n  }\n  .offset-lg-5 {\n    margin-left: 41.666667%;\n  }\n  .offset-lg-6 {\n    margin-left: 50%;\n  }\n  .offset-lg-7 {\n    margin-left: 58.333333%;\n  }\n  .offset-lg-8 {\n    margin-left: 66.666667%;\n  }\n  .offset-lg-9 {\n    margin-left: 75%;\n  }\n  .offset-lg-10 {\n    margin-left: 83.333333%;\n  }\n  .offset-lg-11 {\n    margin-left: 91.666667%;\n  }\n  .g-lg-0,\n  .gx-lg-0 {\n    --bs-gutter-x: 0;\n  }\n  .g-lg-0,\n  .gy-lg-0 {\n    --bs-gutter-y: 0;\n  }\n  .g-lg-1,\n  .gx-lg-1 {\n    --bs-gutter-x: 0.25rem;\n  }\n  .g-lg-1,\n  .gy-lg-1 {\n    --bs-gutter-y: 0.25rem;\n  }\n  .g-lg-2,\n  .gx-lg-2 {\n    --bs-gutter-x: 0.5rem;\n  }\n  .g-lg-2,\n  .gy-lg-2 {\n    --bs-gutter-y: 0.5rem;\n  }\n  .g-lg-3,\n  .gx-lg-3 {\n    --bs-gutter-x: 1rem;\n  }\n  .g-lg-3,\n  .gy-lg-3 {\n    --bs-gutter-y: 1rem;\n  }\n  .g-lg-4,\n  .gx-lg-4 {\n    --bs-gutter-x: 1.5rem;\n  }\n  .g-lg-4,\n  .gy-lg-4 {\n    --bs-gutter-y: 1.5rem;\n  }\n  .g-lg-5,\n  .gx-lg-5 {\n    --bs-gutter-x: 3rem;\n  }\n  .g-lg-5,\n  .gy-lg-5 {\n    --bs-gutter-y: 3rem;\n  }\n}\n\n@media (min-width: 1200px) {\n  .col-xl {\n    -ms-flex: 1 0 0%;\n    flex: 1 0 0%;\n  }\n  .row-cols-xl-auto > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .row-cols-xl-1 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .row-cols-xl-2 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .row-cols-xl-3 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 33.333333%;\n  }\n  .row-cols-xl-4 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .row-cols-xl-5 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 20%;\n  }\n  .row-cols-xl-6 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 16.666667%;\n  }\n  .col-xl-auto {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .col-xl-1 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 8.333333%;\n  }\n  .col-xl-2 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 16.666667%;\n  }\n  .col-xl-3 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .col-xl-4 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 33.333333%;\n  }\n  .col-xl-5 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 41.666667%;\n  }\n  .col-xl-6 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .col-xl-7 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 58.333333%;\n  }\n  .col-xl-8 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 66.666667%;\n  }\n  .col-xl-9 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 75%;\n  }\n  .col-xl-10 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 83.333333%;\n  }\n  .col-xl-11 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 91.666667%;\n  }\n  .col-xl-12 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .offset-xl-0 {\n    margin-left: 0;\n  }\n  .offset-xl-1 {\n    margin-left: 8.333333%;\n  }\n  .offset-xl-2 {\n    margin-left: 16.666667%;\n  }\n  .offset-xl-3 {\n    margin-left: 25%;\n  }\n  .offset-xl-4 {\n    margin-left: 33.333333%;\n  }\n  .offset-xl-5 {\n    margin-left: 41.666667%;\n  }\n  .offset-xl-6 {\n    margin-left: 50%;\n  }\n  .offset-xl-7 {\n    margin-left: 58.333333%;\n  }\n  .offset-xl-8 {\n    margin-left: 66.666667%;\n  }\n  .offset-xl-9 {\n    margin-left: 75%;\n  }\n  .offset-xl-10 {\n    margin-left: 83.333333%;\n  }\n  .offset-xl-11 {\n    margin-left: 91.666667%;\n  }\n  .g-xl-0,\n  .gx-xl-0 {\n    --bs-gutter-x: 0;\n  }\n  .g-xl-0,\n  .gy-xl-0 {\n    --bs-gutter-y: 0;\n  }\n  .g-xl-1,\n  .gx-xl-1 {\n    --bs-gutter-x: 0.25rem;\n  }\n  .g-xl-1,\n  .gy-xl-1 {\n    --bs-gutter-y: 0.25rem;\n  }\n  .g-xl-2,\n  .gx-xl-2 {\n    --bs-gutter-x: 0.5rem;\n  }\n  .g-xl-2,\n  .gy-xl-2 {\n    --bs-gutter-y: 0.5rem;\n  }\n  .g-xl-3,\n  .gx-xl-3 {\n    --bs-gutter-x: 1rem;\n  }\n  .g-xl-3,\n  .gy-xl-3 {\n    --bs-gutter-y: 1rem;\n  }\n  .g-xl-4,\n  .gx-xl-4 {\n    --bs-gutter-x: 1.5rem;\n  }\n  .g-xl-4,\n  .gy-xl-4 {\n    --bs-gutter-y: 1.5rem;\n  }\n  .g-xl-5,\n  .gx-xl-5 {\n    --bs-gutter-x: 3rem;\n  }\n  .g-xl-5,\n  .gy-xl-5 {\n    --bs-gutter-y: 3rem;\n  }\n}\n\n@media (min-width: 1400px) {\n  .col-xxl {\n    -ms-flex: 1 0 0%;\n    flex: 1 0 0%;\n  }\n  .row-cols-xxl-auto > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .row-cols-xxl-1 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .row-cols-xxl-2 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .row-cols-xxl-3 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 33.333333%;\n  }\n  .row-cols-xxl-4 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .row-cols-xxl-5 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 20%;\n  }\n  .row-cols-xxl-6 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 16.666667%;\n  }\n  .col-xxl-auto {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .col-xxl-1 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 8.333333%;\n  }\n  .col-xxl-2 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 16.666667%;\n  }\n  .col-xxl-3 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .col-xxl-4 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 33.333333%;\n  }\n  .col-xxl-5 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 41.666667%;\n  }\n  .col-xxl-6 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .col-xxl-7 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 58.333333%;\n  }\n  .col-xxl-8 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 66.666667%;\n  }\n  .col-xxl-9 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 75%;\n  }\n  .col-xxl-10 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 83.333333%;\n  }\n  .col-xxl-11 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 91.666667%;\n  }\n  .col-xxl-12 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .offset-xxl-0 {\n    margin-left: 0;\n  }\n  .offset-xxl-1 {\n    margin-left: 8.333333%;\n  }\n  .offset-xxl-2 {\n    margin-left: 16.666667%;\n  }\n  .offset-xxl-3 {\n    margin-left: 25%;\n  }\n  .offset-xxl-4 {\n    margin-left: 33.333333%;\n  }\n  .offset-xxl-5 {\n    margin-left: 41.666667%;\n  }\n  .offset-xxl-6 {\n    margin-left: 50%;\n  }\n  .offset-xxl-7 {\n    margin-left: 58.333333%;\n  }\n  .offset-xxl-8 {\n    margin-left: 66.666667%;\n  }\n  .offset-xxl-9 {\n    margin-left: 75%;\n  }\n  .offset-xxl-10 {\n    margin-left: 83.333333%;\n  }\n  .offset-xxl-11 {\n    margin-left: 91.666667%;\n  }\n  .g-xxl-0,\n  .gx-xxl-0 {\n    --bs-gutter-x: 0;\n  }\n  .g-xxl-0,\n  .gy-xxl-0 {\n    --bs-gutter-y: 0;\n  }\n  .g-xxl-1,\n  .gx-xxl-1 {\n    --bs-gutter-x: 0.25rem;\n  }\n  .g-xxl-1,\n  .gy-xxl-1 {\n    --bs-gutter-y: 0.25rem;\n  }\n  .g-xxl-2,\n  .gx-xxl-2 {\n    --bs-gutter-x: 0.5rem;\n  }\n  .g-xxl-2,\n  .gy-xxl-2 {\n    --bs-gutter-y: 0.5rem;\n  }\n  .g-xxl-3,\n  .gx-xxl-3 {\n    --bs-gutter-x: 1rem;\n  }\n  .g-xxl-3,\n  .gy-xxl-3 {\n    --bs-gutter-y: 1rem;\n  }\n  .g-xxl-4,\n  .gx-xxl-4 {\n    --bs-gutter-x: 1.5rem;\n  }\n  .g-xxl-4,\n  .gy-xxl-4 {\n    --bs-gutter-y: 1.5rem;\n  }\n  .g-xxl-5,\n  .gx-xxl-5 {\n    --bs-gutter-x: 3rem;\n  }\n  .g-xxl-5,\n  .gy-xxl-5 {\n    --bs-gutter-y: 3rem;\n  }\n}\n\n.table {\n  --bs-table-bg: transparent;\n  --bs-table-accent-bg: transparent;\n  --bs-table-striped-color: #333;\n  --bs-table-striped-bg: rgba(0, 0, 0, 0.05);\n  --bs-table-active-color: #333;\n  --bs-table-active-bg: rgba(0, 0, 0, 0.1);\n  --bs-table-hover-color: #333;\n  --bs-table-hover-bg: rgba(0, 0, 0, 0.075);\n  width: 100%;\n  margin-bottom: 1rem;\n  color: #333;\n  vertical-align: top;\n  border-color: #dee2e6;\n}\n\n.table > :not(caption) > * > * {\n  padding: 0.5rem 0.5rem;\n  background-color: var(--bs-table-bg);\n  border-bottom-width: 1px;\n  box-shadow: inset 0 0 0 9999px var(--bs-table-accent-bg);\n}\n\n.table > tbody {\n  vertical-align: inherit;\n}\n\n.table > thead {\n  vertical-align: bottom;\n}\n\n.table > :not(:first-child) {\n  border-top: 2px solid currentColor;\n}\n\n.caption-top {\n  caption-side: top;\n}\n\n.table-sm > :not(caption) > * > * {\n  padding: 0.25rem 0.25rem;\n}\n\n.table-bordered > :not(caption) > * {\n  border-width: 1px 0;\n}\n\n.table-bordered > :not(caption) > * > * {\n  border-width: 0 1px;\n}\n\n.table-borderless > :not(caption) > * > * {\n  border-bottom-width: 0;\n}\n\n.table-borderless > :not(:first-child) {\n  border-top-width: 0;\n}\n\n.table-striped > tbody > tr:nth-of-type(odd) > * {\n  --bs-table-accent-bg: var(--bs-table-striped-bg);\n  color: var(--bs-table-striped-color);\n}\n\n.table-active {\n  --bs-table-accent-bg: var(--bs-table-active-bg);\n  color: var(--bs-table-active-color);\n}\n\n.table-hover > tbody > tr:hover > * {\n  --bs-table-accent-bg: var(--bs-table-hover-bg);\n  color: var(--bs-table-hover-color);\n}\n\n.table-primary {\n  --bs-table-bg: #fbddd2;\n  --bs-table-striped-bg: #eed2c8;\n  --bs-table-striped-color: #000;\n  --bs-table-active-bg: #e2c7bd;\n  --bs-table-active-color: #000;\n  --bs-table-hover-bg: #e8ccc2;\n  --bs-table-hover-color: #000;\n  color: #000;\n  border-color: #e2c7bd;\n}\n\n.table-secondary {\n  --bs-table-bg: #efedec;\n  --bs-table-striped-bg: #e3e1e0;\n  --bs-table-striped-color: #000;\n  --bs-table-active-bg: #d7d5d4;\n  --bs-table-active-color: #000;\n  --bs-table-hover-bg: #dddbda;\n  --bs-table-hover-color: #000;\n  color: #000;\n  border-color: #d7d5d4;\n}\n\n.table-success {\n  --bs-table-bg: #d7f0db;\n  --bs-table-striped-bg: #cce4d0;\n  --bs-table-striped-color: #000;\n  --bs-table-active-bg: #c2d8c5;\n  --bs-table-active-color: #000;\n  --bs-table-hover-bg: #c7decb;\n  --bs-table-hover-color: #000;\n  color: #000;\n  border-color: #c2d8c5;\n}\n\n.table-info {\n  --bs-table-bg: #d1ecf1;\n  --bs-table-striped-bg: #c7e0e5;\n  --bs-table-striped-color: #000;\n  --bs-table-active-bg: #bcd4d9;\n  --bs-table-active-color: #000;\n  --bs-table-hover-bg: #c1dadf;\n  --bs-table-hover-color: #000;\n  color: #000;\n  border-color: #bcd4d9;\n}\n\n.table-warning {\n  --bs-table-bg: #fcf1d8;\n  --bs-table-striped-bg: #efe5cd;\n  --bs-table-striped-color: #000;\n  --bs-table-active-bg: #e3d9c2;\n  --bs-table-active-color: #000;\n  --bs-table-hover-bg: #e9dfc8;\n  --bs-table-hover-color: #000;\n  color: #000;\n  border-color: #e3d9c2;\n}\n\n.table-danger {\n  --bs-table-bg: #f9d7d5;\n  --bs-table-striped-bg: #edccca;\n  --bs-table-striped-color: #000;\n  --bs-table-active-bg: #e0c2c0;\n  --bs-table-active-color: #000;\n  --bs-table-hover-bg: #e6c7c5;\n  --bs-table-hover-color: #000;\n  color: #000;\n  border-color: #e0c2c0;\n}\n\n.table-light {\n  --bs-table-bg: #e9ecef;\n  --bs-table-striped-bg: #dde0e3;\n  --bs-table-striped-color: #000;\n  --bs-table-active-bg: #d2d4d7;\n  --bs-table-active-color: #000;\n  --bs-table-hover-bg: #d8dadd;\n  --bs-table-hover-color: #000;\n  color: #000;\n  border-color: #d2d4d7;\n}\n\n.table-dark {\n  --bs-table-bg: #772953;\n  --bs-table-striped-bg: #7e345c;\n  --bs-table-striped-color: #fff;\n  --bs-table-active-bg: #853e64;\n  --bs-table-active-color: #fff;\n  --bs-table-hover-bg: #813960;\n  --bs-table-hover-color: #fff;\n  color: #fff;\n  border-color: #853e64;\n}\n\n.table-responsive {\n  overflow-x: auto;\n  -webkit-overflow-scrolling: touch;\n}\n\n@media (max-width: 575.98px) {\n  .table-responsive-sm {\n    overflow-x: auto;\n    -webkit-overflow-scrolling: touch;\n  }\n}\n\n@media (max-width: 767.98px) {\n  .table-responsive-md {\n    overflow-x: auto;\n    -webkit-overflow-scrolling: touch;\n  }\n}\n\n@media (max-width: 991.98px) {\n  .table-responsive-lg {\n    overflow-x: auto;\n    -webkit-overflow-scrolling: touch;\n  }\n}\n\n@media (max-width: 1199.98px) {\n  .table-responsive-xl {\n    overflow-x: auto;\n    -webkit-overflow-scrolling: touch;\n  }\n}\n\n@media (max-width: 1399.98px) {\n  .table-responsive-xxl {\n    overflow-x: auto;\n    -webkit-overflow-scrolling: touch;\n  }\n}\n\n.form-label {\n  margin-bottom: 0.5rem;\n}\n\n.col-form-label {\n  padding-top: calc(0.375rem + 1px);\n  padding-bottom: calc(0.375rem + 1px);\n  margin-bottom: 0;\n  font-size: inherit;\n  line-height: 1.5;\n}\n\n.col-form-label-lg {\n  padding-top: calc(0.5rem + 1px);\n  padding-bottom: calc(0.5rem + 1px);\n  font-size: 1.25rem;\n}\n\n.col-form-label-sm {\n  padding-top: calc(0.25rem + 1px);\n  padding-bottom: calc(0.25rem + 1px);\n  font-size: 0.875rem;\n}\n\n.form-text {\n  margin-top: 0.25rem;\n  font-size: 0.875em;\n  color: #868e96;\n}\n\n.form-control {\n  display: block;\n  width: 100%;\n  padding: 0.375rem 0.75rem;\n  font-size: 1rem;\n  font-weight: 400;\n  line-height: 1.5;\n  color: #333;\n  background-color: #fff;\n  background-clip: padding-box;\n  border: 1px solid #ced4da;\n  -webkit-appearance: none;\n  -moz-appearance: none;\n  appearance: none;\n  border-radius: 0.25rem;\n  transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .form-control {\n    transition: none;\n  }\n}\n\n.form-control[type=\"file\"] {\n  overflow: hidden;\n}\n\n.form-control[type=\"file\"]:not(:disabled):not([readonly]) {\n  cursor: pointer;\n}\n\n.form-control:focus {\n  color: #333;\n  background-color: #fff;\n  border-color: #f4aa90;\n  outline: 0;\n  box-shadow: 0 0 0 0.25rem rgba(233, 84, 32, 0.25);\n}\n\n.form-control::-webkit-date-and-time-value {\n  height: 1.5em;\n}\n\n.form-control::-webkit-input-placeholder {\n  color: #868e96;\n  opacity: 1;\n}\n\n.form-control::-moz-placeholder {\n  color: #868e96;\n  opacity: 1;\n}\n\n.form-control:-ms-input-placeholder {\n  color: #868e96;\n  opacity: 1;\n}\n\n.form-control::-ms-input-placeholder {\n  color: #868e96;\n  opacity: 1;\n}\n\n.form-control::placeholder {\n  color: #868e96;\n  opacity: 1;\n}\n\n.form-control:disabled, .form-control[readonly] {\n  background-color: #e9ecef;\n  opacity: 1;\n}\n\n.form-control::file-selector-button {\n  padding: 0.375rem 0.75rem;\n  margin: -0.375rem -0.75rem;\n  -webkit-margin-end: 0.75rem;\n  -moz-margin-end: 0.75rem;\n  margin-inline-end: 0.75rem;\n  color: #333;\n  background-color: #e9ecef;\n  pointer-events: none;\n  border-color: inherit;\n  border-style: solid;\n  border-width: 0;\n  border-inline-end-width: 1px;\n  border-radius: 0;\n  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .form-control::file-selector-button {\n    transition: none;\n  }\n}\n\n.form-control:hover:not(:disabled):not([readonly])::file-selector-button {\n  background-color: #dde0e3;\n}\n\n.form-control::-webkit-file-upload-button {\n  padding: 0.375rem 0.75rem;\n  margin: -0.375rem -0.75rem;\n  -webkit-margin-end: 0.75rem;\n  margin-inline-end: 0.75rem;\n  color: #333;\n  background-color: #e9ecef;\n  pointer-events: none;\n  border-color: inherit;\n  border-style: solid;\n  border-width: 0;\n  border-inline-end-width: 1px;\n  border-radius: 0;\n  -webkit-transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .form-control::-webkit-file-upload-button {\n    -webkit-transition: none;\n    transition: none;\n  }\n}\n\n.form-control:hover:not(:disabled):not([readonly])::-webkit-file-upload-button {\n  background-color: #dde0e3;\n}\n\n.form-control-plaintext {\n  display: block;\n  width: 100%;\n  padding: 0.375rem 0;\n  margin-bottom: 0;\n  line-height: 1.5;\n  color: #333;\n  background-color: transparent;\n  border: solid transparent;\n  border-width: 1px 0;\n}\n\n.form-control-plaintext.form-control-sm, .form-control-plaintext.form-control-lg {\n  padding-right: 0;\n  padding-left: 0;\n}\n\n.form-control-sm {\n  min-height: calc(1.5em + 0.5rem + 2px);\n  padding: 0.25rem 0.5rem;\n  font-size: 0.875rem;\n  border-radius: 0.2rem;\n}\n\n.form-control-sm::file-selector-button {\n  padding: 0.25rem 0.5rem;\n  margin: -0.25rem -0.5rem;\n  -webkit-margin-end: 0.5rem;\n  -moz-margin-end: 0.5rem;\n  margin-inline-end: 0.5rem;\n}\n\n.form-control-sm::-webkit-file-upload-button {\n  padding: 0.25rem 0.5rem;\n  margin: -0.25rem -0.5rem;\n  -webkit-margin-end: 0.5rem;\n  margin-inline-end: 0.5rem;\n}\n\n.form-control-lg {\n  min-height: calc(1.5em + 1rem + 2px);\n  padding: 0.5rem 1rem;\n  font-size: 1.25rem;\n  border-radius: 0.3rem;\n}\n\n.form-control-lg::file-selector-button {\n  padding: 0.5rem 1rem;\n  margin: -0.5rem -1rem;\n  -webkit-margin-end: 1rem;\n  -moz-margin-end: 1rem;\n  margin-inline-end: 1rem;\n}\n\n.form-control-lg::-webkit-file-upload-button {\n  padding: 0.5rem 1rem;\n  margin: -0.5rem -1rem;\n  -webkit-margin-end: 1rem;\n  margin-inline-end: 1rem;\n}\n\ntextarea.form-control {\n  min-height: calc(1.5em + 0.75rem + 2px);\n}\n\ntextarea.form-control-sm {\n  min-height: calc(1.5em + 0.5rem + 2px);\n}\n\ntextarea.form-control-lg {\n  min-height: calc(1.5em + 1rem + 2px);\n}\n\n.form-control-color {\n  width: 3rem;\n  height: auto;\n  padding: 0.375rem;\n}\n\n.form-control-color:not(:disabled):not([readonly]) {\n  cursor: pointer;\n}\n\n.form-control-color::-moz-color-swatch {\n  height: 1.5em;\n  border-radius: 0.25rem;\n}\n\n.form-control-color::-webkit-color-swatch {\n  height: 1.5em;\n  border-radius: 0.25rem;\n}\n\n.form-select {\n  display: block;\n  width: 100%;\n  padding: 0.375rem 2.25rem 0.375rem 0.75rem;\n  -moz-padding-start: calc(0.75rem - 3px);\n  font-size: 1rem;\n  font-weight: 400;\n  line-height: 1.5;\n  color: #333;\n  background-color: #fff;\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23333' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e\");\n  background-repeat: no-repeat;\n  background-position: right 0.75rem center;\n  background-size: 16px 12px;\n  border: 1px solid #ced4da;\n  border-radius: 0.25rem;\n  transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n  -webkit-appearance: none;\n  -moz-appearance: none;\n  appearance: none;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .form-select {\n    transition: none;\n  }\n}\n\n.form-select:focus {\n  border-color: #f4aa90;\n  outline: 0;\n  box-shadow: 0 0 0 0.25rem rgba(233, 84, 32, 0.25);\n}\n\n.form-select[multiple], .form-select[size]:not([size=\"1\"]) {\n  padding-right: 0.75rem;\n  background-image: none;\n}\n\n.form-select:disabled {\n  background-color: #e9ecef;\n}\n\n.form-select:-moz-focusring {\n  color: transparent;\n  text-shadow: 0 0 0 #333;\n}\n\n.form-select-sm {\n  padding-top: 0.25rem;\n  padding-bottom: 0.25rem;\n  padding-left: 0.5rem;\n  font-size: 0.875rem;\n  border-radius: 0.2rem;\n}\n\n.form-select-lg {\n  padding-top: 0.5rem;\n  padding-bottom: 0.5rem;\n  padding-left: 1rem;\n  font-size: 1.25rem;\n  border-radius: 0.3rem;\n}\n\n.form-check {\n  display: block;\n  min-height: 1.5rem;\n  padding-left: 1.5em;\n  margin-bottom: 0.125rem;\n}\n\n.form-check .form-check-input {\n  float: left;\n  margin-left: -1.5em;\n}\n\n.form-check-input {\n  width: 1em;\n  height: 1em;\n  margin-top: 0.25em;\n  vertical-align: top;\n  background-color: #fff;\n  background-repeat: no-repeat;\n  background-position: center;\n  background-size: contain;\n  border: 1px solid rgba(0, 0, 0, 0.25);\n  -webkit-appearance: none;\n  -moz-appearance: none;\n  appearance: none;\n  -webkit-print-color-adjust: exact;\n  color-adjust: exact;\n}\n\n.form-check-input[type=\"checkbox\"] {\n  border-radius: 0.25em;\n}\n\n.form-check-input[type=\"radio\"] {\n  border-radius: 50%;\n}\n\n.form-check-input:active {\n  -webkit-filter: brightness(90%);\n  filter: brightness(90%);\n}\n\n.form-check-input:focus {\n  border-color: #f4aa90;\n  outline: 0;\n  box-shadow: 0 0 0 0.25rem rgba(233, 84, 32, 0.25);\n}\n\n.form-check-input:checked {\n  background-color: #e95420;\n  border-color: #e95420;\n}\n\n.form-check-input:checked[type=\"checkbox\"] {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10l3 3l6-6'/%3e%3c/svg%3e\");\n}\n\n.form-check-input:checked[type=\"radio\"] {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='2' fill='%23fff'/%3e%3c/svg%3e\");\n}\n\n.form-check-input[type=\"checkbox\"]:indeterminate {\n  background-color: #e95420;\n  border-color: #e95420;\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10h8'/%3e%3c/svg%3e\");\n}\n\n.form-check-input:disabled {\n  pointer-events: none;\n  -webkit-filter: none;\n  filter: none;\n  opacity: 0.5;\n}\n\n.form-check-input[disabled] ~ .form-check-label, .form-check-input:disabled ~ .form-check-label {\n  opacity: 0.5;\n}\n\n.form-switch {\n  padding-left: 2.5em;\n}\n\n.form-switch .form-check-input {\n  width: 2em;\n  margin-left: -2.5em;\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%280, 0, 0, 0.25%29'/%3e%3c/svg%3e\");\n  background-position: left center;\n  border-radius: 2em;\n  transition: background-position 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .form-switch .form-check-input {\n    transition: none;\n  }\n}\n\n.form-switch .form-check-input:focus {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23f4aa90'/%3e%3c/svg%3e\");\n}\n\n.form-switch .form-check-input:checked {\n  background-position: right center;\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e\");\n}\n\n.form-check-inline {\n  display: inline-block;\n  margin-right: 1rem;\n}\n\n.btn-check {\n  position: absolute;\n  clip: rect(0, 0, 0, 0);\n  pointer-events: none;\n}\n\n.btn-check[disabled] + .btn, .btn-check:disabled + .btn {\n  pointer-events: none;\n  -webkit-filter: none;\n  filter: none;\n  opacity: 0.65;\n}\n\n.form-range {\n  width: 100%;\n  height: 1.5rem;\n  padding: 0;\n  background-color: transparent;\n  -webkit-appearance: none;\n  -moz-appearance: none;\n  appearance: none;\n}\n\n.form-range:focus {\n  outline: 0;\n}\n\n.form-range:focus::-webkit-slider-thumb {\n  box-shadow: 0 0 0 1px #fff, 0 0 0 0.25rem rgba(233, 84, 32, 0.25);\n}\n\n.form-range:focus::-moz-range-thumb {\n  box-shadow: 0 0 0 1px #fff, 0 0 0 0.25rem rgba(233, 84, 32, 0.25);\n}\n\n.form-range::-moz-focus-outer {\n  border: 0;\n}\n\n.form-range::-webkit-slider-thumb {\n  width: 1rem;\n  height: 1rem;\n  margin-top: -0.25rem;\n  background-color: #e95420;\n  border: 0;\n  border-radius: 1rem;\n  -webkit-transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n  transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n  -webkit-appearance: none;\n  appearance: none;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .form-range::-webkit-slider-thumb {\n    -webkit-transition: none;\n    transition: none;\n  }\n}\n\n.form-range::-webkit-slider-thumb:active {\n  background-color: #f8ccbc;\n}\n\n.form-range::-webkit-slider-runnable-track {\n  width: 100%;\n  height: 0.5rem;\n  color: transparent;\n  cursor: pointer;\n  background-color: #dee2e6;\n  border-color: transparent;\n  border-radius: 1rem;\n}\n\n.form-range::-moz-range-thumb {\n  width: 1rem;\n  height: 1rem;\n  background-color: #e95420;\n  border: 0;\n  border-radius: 1rem;\n  -moz-transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n  transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n  -moz-appearance: none;\n  appearance: none;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .form-range::-moz-range-thumb {\n    -moz-transition: none;\n    transition: none;\n  }\n}\n\n.form-range::-moz-range-thumb:active {\n  background-color: #f8ccbc;\n}\n\n.form-range::-moz-range-track {\n  width: 100%;\n  height: 0.5rem;\n  color: transparent;\n  cursor: pointer;\n  background-color: #dee2e6;\n  border-color: transparent;\n  border-radius: 1rem;\n}\n\n.form-range:disabled {\n  pointer-events: none;\n}\n\n.form-range:disabled::-webkit-slider-thumb {\n  background-color: #aea79f;\n}\n\n.form-range:disabled::-moz-range-thumb {\n  background-color: #aea79f;\n}\n\n.form-floating {\n  position: relative;\n}\n\n.form-floating > .form-control,\n.form-floating > .form-select {\n  height: calc(3.5rem + 2px);\n  line-height: 1.25;\n}\n\n.form-floating > label {\n  position: absolute;\n  top: 0;\n  left: 0;\n  height: 100%;\n  padding: 1rem 0.75rem;\n  pointer-events: none;\n  border: 1px solid transparent;\n  -webkit-transform-origin: 0 0;\n  transform-origin: 0 0;\n  transition: opacity 0.1s ease-in-out, -webkit-transform 0.1s ease-in-out;\n  transition: opacity 0.1s ease-in-out, transform 0.1s ease-in-out;\n  transition: opacity 0.1s ease-in-out, transform 0.1s ease-in-out, -webkit-transform 0.1s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .form-floating > label {\n    transition: none;\n  }\n}\n\n.form-floating > .form-control {\n  padding: 1rem 0.75rem;\n}\n\n.form-floating > .form-control::-webkit-input-placeholder {\n  color: transparent;\n}\n\n.form-floating > .form-control::-moz-placeholder {\n  color: transparent;\n}\n\n.form-floating > .form-control:-ms-input-placeholder {\n  color: transparent;\n}\n\n.form-floating > .form-control::-ms-input-placeholder {\n  color: transparent;\n}\n\n.form-floating > .form-control::placeholder {\n  color: transparent;\n}\n\n.form-floating > .form-control:not(:-moz-placeholder-shown) {\n  padding-top: 1.625rem;\n  padding-bottom: 0.625rem;\n}\n\n.form-floating > .form-control:not(:-ms-input-placeholder) {\n  padding-top: 1.625rem;\n  padding-bottom: 0.625rem;\n}\n\n.form-floating > .form-control:focus, .form-floating > .form-control:not(:placeholder-shown) {\n  padding-top: 1.625rem;\n  padding-bottom: 0.625rem;\n}\n\n.form-floating > .form-control:-webkit-autofill {\n  padding-top: 1.625rem;\n  padding-bottom: 0.625rem;\n}\n\n.form-floating > .form-select {\n  padding-top: 1.625rem;\n  padding-bottom: 0.625rem;\n}\n\n.form-floating > .form-control:not(:-moz-placeholder-shown) ~ label {\n  opacity: 0.65;\n  transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);\n}\n\n.form-floating > .form-control:not(:-ms-input-placeholder) ~ label {\n  opacity: 0.65;\n  transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);\n}\n\n.form-floating > .form-control:focus ~ label,\n.form-floating > .form-control:not(:placeholder-shown) ~ label,\n.form-floating > .form-select ~ label {\n  opacity: 0.65;\n  -webkit-transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);\n  transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);\n}\n\n.form-floating > .form-control:-webkit-autofill ~ label {\n  opacity: 0.65;\n  -webkit-transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);\n  transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);\n}\n\n.input-group {\n  position: relative;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n  flex-wrap: wrap;\n  -ms-flex-align: stretch;\n  align-items: stretch;\n  width: 100%;\n}\n\n.input-group > .form-control,\n.input-group > .form-select {\n  position: relative;\n  -ms-flex: 1 1 auto;\n  flex: 1 1 auto;\n  width: 1%;\n  min-width: 0;\n}\n\n.input-group > .form-control:focus,\n.input-group > .form-select:focus {\n  z-index: 3;\n}\n\n.input-group .btn {\n  position: relative;\n  z-index: 2;\n}\n\n.input-group .btn:focus {\n  z-index: 3;\n}\n\n.input-group-text {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-align: center;\n  align-items: center;\n  padding: 0.375rem 0.75rem;\n  font-size: 1rem;\n  font-weight: 400;\n  line-height: 1.5;\n  color: #333;\n  text-align: center;\n  white-space: nowrap;\n  background-color: #e9ecef;\n  border: 1px solid #ced4da;\n  border-radius: 0.25rem;\n}\n\n.input-group-lg > .form-control,\n.input-group-lg > .form-select,\n.input-group-lg > .input-group-text,\n.input-group-lg > .btn {\n  padding: 0.5rem 1rem;\n  font-size: 1.25rem;\n  border-radius: 0.3rem;\n}\n\n.input-group-sm > .form-control,\n.input-group-sm > .form-select,\n.input-group-sm > .input-group-text,\n.input-group-sm > .btn {\n  padding: 0.25rem 0.5rem;\n  font-size: 0.875rem;\n  border-radius: 0.2rem;\n}\n\n.input-group-lg > .form-select,\n.input-group-sm > .form-select {\n  padding-right: 3rem;\n}\n\n.input-group:not(.has-validation) > :not(:last-child):not(.dropdown-toggle):not(.dropdown-menu),\n.input-group:not(.has-validation) > .dropdown-toggle:nth-last-child(n + 3) {\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n}\n\n.input-group.has-validation > :nth-last-child(n + 3):not(.dropdown-toggle):not(.dropdown-menu),\n.input-group.has-validation > .dropdown-toggle:nth-last-child(n + 4) {\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n}\n\n.input-group > :not(:first-child):not(.dropdown-menu):not(.valid-tooltip):not(.valid-feedback):not(.invalid-tooltip):not(.invalid-feedback) {\n  margin-left: -1px;\n  border-top-left-radius: 0;\n  border-bottom-left-radius: 0;\n}\n\n.valid-feedback {\n  display: none;\n  width: 100%;\n  margin-top: 0.25rem;\n  font-size: 0.875em;\n  color: #38b44a;\n}\n\n.valid-tooltip {\n  position: absolute;\n  top: 100%;\n  z-index: 5;\n  display: none;\n  max-width: 100%;\n  padding: 0.25rem 0.5rem;\n  margin-top: .1rem;\n  font-size: 0.875rem;\n  color: #fff;\n  background-color: rgba(56, 180, 74, 0.9);\n  border-radius: 0.25rem;\n}\n\n.was-validated :valid ~ .valid-feedback,\n.was-validated :valid ~ .valid-tooltip,\n.is-valid ~ .valid-feedback,\n.is-valid ~ .valid-tooltip {\n  display: block;\n}\n\n.was-validated .form-control:valid, .form-control.is-valid {\n  border-color: #38b44a;\n  padding-right: calc(1.5em + 0.75rem);\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%2338b44a' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e\");\n  background-repeat: no-repeat;\n  background-position: right calc(0.375em + 0.1875rem) center;\n  background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n\n.was-validated .form-control:valid:focus, .form-control.is-valid:focus {\n  border-color: #38b44a;\n  box-shadow: 0 0 0 0.25rem rgba(56, 180, 74, 0.25);\n}\n\n.was-validated textarea.form-control:valid, textarea.form-control.is-valid {\n  padding-right: calc(1.5em + 0.75rem);\n  background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem);\n}\n\n.was-validated .form-select:valid, .form-select.is-valid {\n  border-color: #38b44a;\n}\n\n.was-validated .form-select:valid:not([multiple]):not([size]), .was-validated .form-select:valid:not([multiple])[size=\"1\"], .form-select.is-valid:not([multiple]):not([size]), .form-select.is-valid:not([multiple])[size=\"1\"] {\n  padding-right: 4.125rem;\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23333' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e\"), url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%2338b44a' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e\");\n  background-position: right 0.75rem center, center right 2.25rem;\n  background-size: 16px 12px, calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n\n.was-validated .form-select:valid:focus, .form-select.is-valid:focus {\n  border-color: #38b44a;\n  box-shadow: 0 0 0 0.25rem rgba(56, 180, 74, 0.25);\n}\n\n.was-validated .form-check-input:valid, .form-check-input.is-valid {\n  border-color: #38b44a;\n}\n\n.was-validated .form-check-input:valid:checked, .form-check-input.is-valid:checked {\n  background-color: #38b44a;\n}\n\n.was-validated .form-check-input:valid:focus, .form-check-input.is-valid:focus {\n  box-shadow: 0 0 0 0.25rem rgba(56, 180, 74, 0.25);\n}\n\n.was-validated .form-check-input:valid ~ .form-check-label, .form-check-input.is-valid ~ .form-check-label {\n  color: #38b44a;\n}\n\n.form-check-inline .form-check-input ~ .valid-feedback {\n  margin-left: .5em;\n}\n\n.was-validated .input-group .form-control:valid, .input-group .form-control.is-valid, .was-validated\n.input-group .form-select:valid,\n.input-group .form-select.is-valid {\n  z-index: 1;\n}\n\n.was-validated .input-group .form-control:valid:focus, .input-group .form-control.is-valid:focus, .was-validated\n.input-group .form-select:valid:focus,\n.input-group .form-select.is-valid:focus {\n  z-index: 3;\n}\n\n.invalid-feedback {\n  display: none;\n  width: 100%;\n  margin-top: 0.25rem;\n  font-size: 0.875em;\n  color: #df382c;\n}\n\n.invalid-tooltip {\n  position: absolute;\n  top: 100%;\n  z-index: 5;\n  display: none;\n  max-width: 100%;\n  padding: 0.25rem 0.5rem;\n  margin-top: .1rem;\n  font-size: 0.875rem;\n  color: #fff;\n  background-color: rgba(223, 56, 44, 0.9);\n  border-radius: 0.25rem;\n}\n\n.was-validated :invalid ~ .invalid-feedback,\n.was-validated :invalid ~ .invalid-tooltip,\n.is-invalid ~ .invalid-feedback,\n.is-invalid ~ .invalid-tooltip {\n  display: block;\n}\n\n.was-validated .form-control:invalid, .form-control.is-invalid {\n  border-color: #df382c;\n  padding-right: calc(1.5em + 0.75rem);\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23df382c'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23df382c' stroke='none'/%3e%3c/svg%3e\");\n  background-repeat: no-repeat;\n  background-position: right calc(0.375em + 0.1875rem) center;\n  background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n\n.was-validated .form-control:invalid:focus, .form-control.is-invalid:focus {\n  border-color: #df382c;\n  box-shadow: 0 0 0 0.25rem rgba(223, 56, 44, 0.25);\n}\n\n.was-validated textarea.form-control:invalid, textarea.form-control.is-invalid {\n  padding-right: calc(1.5em + 0.75rem);\n  background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem);\n}\n\n.was-validated .form-select:invalid, .form-select.is-invalid {\n  border-color: #df382c;\n}\n\n.was-validated .form-select:invalid:not([multiple]):not([size]), .was-validated .form-select:invalid:not([multiple])[size=\"1\"], .form-select.is-invalid:not([multiple]):not([size]), .form-select.is-invalid:not([multiple])[size=\"1\"] {\n  padding-right: 4.125rem;\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23333' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e\"), url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23df382c'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23df382c' stroke='none'/%3e%3c/svg%3e\");\n  background-position: right 0.75rem center, center right 2.25rem;\n  background-size: 16px 12px, calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n\n.was-validated .form-select:invalid:focus, .form-select.is-invalid:focus {\n  border-color: #df382c;\n  box-shadow: 0 0 0 0.25rem rgba(223, 56, 44, 0.25);\n}\n\n.was-validated .form-check-input:invalid, .form-check-input.is-invalid {\n  border-color: #df382c;\n}\n\n.was-validated .form-check-input:invalid:checked, .form-check-input.is-invalid:checked {\n  background-color: #df382c;\n}\n\n.was-validated .form-check-input:invalid:focus, .form-check-input.is-invalid:focus {\n  box-shadow: 0 0 0 0.25rem rgba(223, 56, 44, 0.25);\n}\n\n.was-validated .form-check-input:invalid ~ .form-check-label, .form-check-input.is-invalid ~ .form-check-label {\n  color: #df382c;\n}\n\n.form-check-inline .form-check-input ~ .invalid-feedback {\n  margin-left: .5em;\n}\n\n.was-validated .input-group .form-control:invalid, .input-group .form-control.is-invalid, .was-validated\n.input-group .form-select:invalid,\n.input-group .form-select.is-invalid {\n  z-index: 2;\n}\n\n.was-validated .input-group .form-control:invalid:focus, .input-group .form-control.is-invalid:focus, .was-validated\n.input-group .form-select:invalid:focus,\n.input-group .form-select.is-invalid:focus {\n  z-index: 3;\n}\n\n.btn {\n  display: inline-block;\n  font-weight: 400;\n  line-height: 1.5;\n  color: #333;\n  text-align: center;\n  text-decoration: none;\n  vertical-align: middle;\n  cursor: pointer;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  user-select: none;\n  background-color: transparent;\n  border: 1px solid transparent;\n  padding: 0.375rem 0.75rem;\n  font-size: 1rem;\n  border-radius: 0.25rem;\n  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .btn {\n    transition: none;\n  }\n}\n\n.btn:hover {\n  color: #333;\n}\n\n.btn-check:focus + .btn, .btn:focus {\n  outline: 0;\n  box-shadow: 0 0 0 0.25rem rgba(233, 84, 32, 0.25);\n}\n\n.btn:disabled, .btn.disabled,\nfieldset:disabled .btn {\n  pointer-events: none;\n  opacity: 0.65;\n}\n\n.btn-primary {\n  color: #fff;\n  background-color: #e95420;\n  border-color: #e95420;\n}\n\n.btn-primary:hover {\n  color: #fff;\n  background-color: #c6471b;\n  border-color: #ba431a;\n}\n\n.btn-check:focus + .btn-primary, .btn-primary:focus {\n  color: #fff;\n  background-color: #c6471b;\n  border-color: #ba431a;\n  box-shadow: 0 0 0 0.25rem rgba(236, 110, 65, 0.5);\n}\n\n.btn-check:checked + .btn-primary,\n.btn-check:active + .btn-primary, .btn-primary:active, .btn-primary.active,\n.show > .btn-primary.dropdown-toggle {\n  color: #fff;\n  background-color: #ba431a;\n  border-color: #af3f18;\n}\n\n.btn-check:checked + .btn-primary:focus,\n.btn-check:active + .btn-primary:focus, .btn-primary:active:focus, .btn-primary.active:focus,\n.show > .btn-primary.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.25rem rgba(236, 110, 65, 0.5);\n}\n\n.btn-primary:disabled, .btn-primary.disabled {\n  color: #fff;\n  background-color: #e95420;\n  border-color: #e95420;\n}\n\n.btn-secondary {\n  color: #fff;\n  background-color: #aea79f;\n  border-color: #aea79f;\n}\n\n.btn-secondary:hover {\n  color: #fff;\n  background-color: #948e87;\n  border-color: #8b867f;\n}\n\n.btn-check:focus + .btn-secondary, .btn-secondary:focus {\n  color: #fff;\n  background-color: #948e87;\n  border-color: #8b867f;\n  box-shadow: 0 0 0 0.25rem rgba(186, 180, 173, 0.5);\n}\n\n.btn-check:checked + .btn-secondary,\n.btn-check:active + .btn-secondary, .btn-secondary:active, .btn-secondary.active,\n.show > .btn-secondary.dropdown-toggle {\n  color: #fff;\n  background-color: #8b867f;\n  border-color: #837d77;\n}\n\n.btn-check:checked + .btn-secondary:focus,\n.btn-check:active + .btn-secondary:focus, .btn-secondary:active:focus, .btn-secondary.active:focus,\n.show > .btn-secondary.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.25rem rgba(186, 180, 173, 0.5);\n}\n\n.btn-secondary:disabled, .btn-secondary.disabled {\n  color: #fff;\n  background-color: #aea79f;\n  border-color: #aea79f;\n}\n\n.btn-success {\n  color: #fff;\n  background-color: #38b44a;\n  border-color: #38b44a;\n}\n\n.btn-success:hover {\n  color: #fff;\n  background-color: #30993f;\n  border-color: #2d903b;\n}\n\n.btn-check:focus + .btn-success, .btn-success:focus {\n  color: #fff;\n  background-color: #30993f;\n  border-color: #2d903b;\n  box-shadow: 0 0 0 0.25rem rgba(86, 191, 101, 0.5);\n}\n\n.btn-check:checked + .btn-success,\n.btn-check:active + .btn-success, .btn-success:active, .btn-success.active,\n.show > .btn-success.dropdown-toggle {\n  color: #fff;\n  background-color: #2d903b;\n  border-color: #2a8738;\n}\n\n.btn-check:checked + .btn-success:focus,\n.btn-check:active + .btn-success:focus, .btn-success:active:focus, .btn-success.active:focus,\n.show > .btn-success.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.25rem rgba(86, 191, 101, 0.5);\n}\n\n.btn-success:disabled, .btn-success.disabled {\n  color: #fff;\n  background-color: #38b44a;\n  border-color: #38b44a;\n}\n\n.btn-info {\n  color: #fff;\n  background-color: #17a2b8;\n  border-color: #17a2b8;\n}\n\n.btn-info:hover {\n  color: #fff;\n  background-color: #148a9c;\n  border-color: #128293;\n}\n\n.btn-check:focus + .btn-info, .btn-info:focus {\n  color: #fff;\n  background-color: #148a9c;\n  border-color: #128293;\n  box-shadow: 0 0 0 0.25rem rgba(58, 176, 195, 0.5);\n}\n\n.btn-check:checked + .btn-info,\n.btn-check:active + .btn-info, .btn-info:active, .btn-info.active,\n.show > .btn-info.dropdown-toggle {\n  color: #fff;\n  background-color: #128293;\n  border-color: #117a8a;\n}\n\n.btn-check:checked + .btn-info:focus,\n.btn-check:active + .btn-info:focus, .btn-info:active:focus, .btn-info.active:focus,\n.show > .btn-info.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.25rem rgba(58, 176, 195, 0.5);\n}\n\n.btn-info:disabled, .btn-info.disabled {\n  color: #fff;\n  background-color: #17a2b8;\n  border-color: #17a2b8;\n}\n\n.btn-warning {\n  color: #fff;\n  background-color: #efb73e;\n  border-color: #efb73e;\n}\n\n.btn-warning:hover {\n  color: #fff;\n  background-color: #cb9c35;\n  border-color: #bf9232;\n}\n\n.btn-check:focus + .btn-warning, .btn-warning:focus {\n  color: #fff;\n  background-color: #cb9c35;\n  border-color: #bf9232;\n  box-shadow: 0 0 0 0.25rem rgba(241, 194, 91, 0.5);\n}\n\n.btn-check:checked + .btn-warning,\n.btn-check:active + .btn-warning, .btn-warning:active, .btn-warning.active,\n.show > .btn-warning.dropdown-toggle {\n  color: #fff;\n  background-color: #bf9232;\n  border-color: #b3892f;\n}\n\n.btn-check:checked + .btn-warning:focus,\n.btn-check:active + .btn-warning:focus, .btn-warning:active:focus, .btn-warning.active:focus,\n.show > .btn-warning.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.25rem rgba(241, 194, 91, 0.5);\n}\n\n.btn-warning:disabled, .btn-warning.disabled {\n  color: #fff;\n  background-color: #efb73e;\n  border-color: #efb73e;\n}\n\n.btn-danger {\n  color: #fff;\n  background-color: #df382c;\n  border-color: #df382c;\n}\n\n.btn-danger:hover {\n  color: #fff;\n  background-color: #be3025;\n  border-color: #b22d23;\n}\n\n.btn-check:focus + .btn-danger, .btn-danger:focus {\n  color: #fff;\n  background-color: #be3025;\n  border-color: #b22d23;\n  box-shadow: 0 0 0 0.25rem rgba(228, 86, 76, 0.5);\n}\n\n.btn-check:checked + .btn-danger,\n.btn-check:active + .btn-danger, .btn-danger:active, .btn-danger.active,\n.show > .btn-danger.dropdown-toggle {\n  color: #fff;\n  background-color: #b22d23;\n  border-color: #a72a21;\n}\n\n.btn-check:checked + .btn-danger:focus,\n.btn-check:active + .btn-danger:focus, .btn-danger:active:focus, .btn-danger.active:focus,\n.show > .btn-danger.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.25rem rgba(228, 86, 76, 0.5);\n}\n\n.btn-danger:disabled, .btn-danger.disabled {\n  color: #fff;\n  background-color: #df382c;\n  border-color: #df382c;\n}\n\n.btn-light {\n  color: #000;\n  background-color: #e9ecef;\n  border-color: #e9ecef;\n}\n\n.btn-light:hover {\n  color: #000;\n  background-color: #eceff1;\n  border-color: #ebeef1;\n}\n\n.btn-check:focus + .btn-light, .btn-light:focus {\n  color: #000;\n  background-color: #eceff1;\n  border-color: #ebeef1;\n  box-shadow: 0 0 0 0.25rem rgba(198, 201, 203, 0.5);\n}\n\n.btn-check:checked + .btn-light,\n.btn-check:active + .btn-light, .btn-light:active, .btn-light.active,\n.show > .btn-light.dropdown-toggle {\n  color: #000;\n  background-color: #edf0f2;\n  border-color: #ebeef1;\n}\n\n.btn-check:checked + .btn-light:focus,\n.btn-check:active + .btn-light:focus, .btn-light:active:focus, .btn-light.active:focus,\n.show > .btn-light.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.25rem rgba(198, 201, 203, 0.5);\n}\n\n.btn-light:disabled, .btn-light.disabled {\n  color: #000;\n  background-color: #e9ecef;\n  border-color: #e9ecef;\n}\n\n.btn-dark {\n  color: #fff;\n  background-color: #772953;\n  border-color: #772953;\n}\n\n.btn-dark:hover {\n  color: #fff;\n  background-color: #652347;\n  border-color: #5f2142;\n}\n\n.btn-check:focus + .btn-dark, .btn-dark:focus {\n  color: #fff;\n  background-color: #652347;\n  border-color: #5f2142;\n  box-shadow: 0 0 0 0.25rem rgba(139, 73, 109, 0.5);\n}\n\n.btn-check:checked + .btn-dark,\n.btn-check:active + .btn-dark, .btn-dark:active, .btn-dark.active,\n.show > .btn-dark.dropdown-toggle {\n  color: #fff;\n  background-color: #5f2142;\n  border-color: #591f3e;\n}\n\n.btn-check:checked + .btn-dark:focus,\n.btn-check:active + .btn-dark:focus, .btn-dark:active:focus, .btn-dark.active:focus,\n.show > .btn-dark.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.25rem rgba(139, 73, 109, 0.5);\n}\n\n.btn-dark:disabled, .btn-dark.disabled {\n  color: #fff;\n  background-color: #772953;\n  border-color: #772953;\n}\n\n.btn-outline-primary {\n  color: #e95420;\n  border-color: #e95420;\n}\n\n.btn-outline-primary:hover {\n  color: #fff;\n  background-color: #e95420;\n  border-color: #e95420;\n}\n\n.btn-check:focus + .btn-outline-primary, .btn-outline-primary:focus {\n  box-shadow: 0 0 0 0.25rem rgba(233, 84, 32, 0.5);\n}\n\n.btn-check:checked + .btn-outline-primary,\n.btn-check:active + .btn-outline-primary, .btn-outline-primary:active, .btn-outline-primary.active, .btn-outline-primary.dropdown-toggle.show {\n  color: #fff;\n  background-color: #e95420;\n  border-color: #e95420;\n}\n\n.btn-check:checked + .btn-outline-primary:focus,\n.btn-check:active + .btn-outline-primary:focus, .btn-outline-primary:active:focus, .btn-outline-primary.active:focus, .btn-outline-primary.dropdown-toggle.show:focus {\n  box-shadow: 0 0 0 0.25rem rgba(233, 84, 32, 0.5);\n}\n\n.btn-outline-primary:disabled, .btn-outline-primary.disabled {\n  color: #e95420;\n  background-color: transparent;\n}\n\n.btn-outline-secondary {\n  color: #aea79f;\n  border-color: #aea79f;\n}\n\n.btn-outline-secondary:hover {\n  color: #fff;\n  background-color: #aea79f;\n  border-color: #aea79f;\n}\n\n.btn-check:focus + .btn-outline-secondary, .btn-outline-secondary:focus {\n  box-shadow: 0 0 0 0.25rem rgba(174, 167, 159, 0.5);\n}\n\n.btn-check:checked + .btn-outline-secondary,\n.btn-check:active + .btn-outline-secondary, .btn-outline-secondary:active, .btn-outline-secondary.active, .btn-outline-secondary.dropdown-toggle.show {\n  color: #fff;\n  background-color: #aea79f;\n  border-color: #aea79f;\n}\n\n.btn-check:checked + .btn-outline-secondary:focus,\n.btn-check:active + .btn-outline-secondary:focus, .btn-outline-secondary:active:focus, .btn-outline-secondary.active:focus, .btn-outline-secondary.dropdown-toggle.show:focus {\n  box-shadow: 0 0 0 0.25rem rgba(174, 167, 159, 0.5);\n}\n\n.btn-outline-secondary:disabled, .btn-outline-secondary.disabled {\n  color: #aea79f;\n  background-color: transparent;\n}\n\n.btn-outline-success {\n  color: #38b44a;\n  border-color: #38b44a;\n}\n\n.btn-outline-success:hover {\n  color: #fff;\n  background-color: #38b44a;\n  border-color: #38b44a;\n}\n\n.btn-check:focus + .btn-outline-success, .btn-outline-success:focus {\n  box-shadow: 0 0 0 0.25rem rgba(56, 180, 74, 0.5);\n}\n\n.btn-check:checked + .btn-outline-success,\n.btn-check:active + .btn-outline-success, .btn-outline-success:active, .btn-outline-success.active, .btn-outline-success.dropdown-toggle.show {\n  color: #fff;\n  background-color: #38b44a;\n  border-color: #38b44a;\n}\n\n.btn-check:checked + .btn-outline-success:focus,\n.btn-check:active + .btn-outline-success:focus, .btn-outline-success:active:focus, .btn-outline-success.active:focus, .btn-outline-success.dropdown-toggle.show:focus {\n  box-shadow: 0 0 0 0.25rem rgba(56, 180, 74, 0.5);\n}\n\n.btn-outline-success:disabled, .btn-outline-success.disabled {\n  color: #38b44a;\n  background-color: transparent;\n}\n\n.btn-outline-info {\n  color: #17a2b8;\n  border-color: #17a2b8;\n}\n\n.btn-outline-info:hover {\n  color: #fff;\n  background-color: #17a2b8;\n  border-color: #17a2b8;\n}\n\n.btn-check:focus + .btn-outline-info, .btn-outline-info:focus {\n  box-shadow: 0 0 0 0.25rem rgba(23, 162, 184, 0.5);\n}\n\n.btn-check:checked + .btn-outline-info,\n.btn-check:active + .btn-outline-info, .btn-outline-info:active, .btn-outline-info.active, .btn-outline-info.dropdown-toggle.show {\n  color: #fff;\n  background-color: #17a2b8;\n  border-color: #17a2b8;\n}\n\n.btn-check:checked + .btn-outline-info:focus,\n.btn-check:active + .btn-outline-info:focus, .btn-outline-info:active:focus, .btn-outline-info.active:focus, .btn-outline-info.dropdown-toggle.show:focus {\n  box-shadow: 0 0 0 0.25rem rgba(23, 162, 184, 0.5);\n}\n\n.btn-outline-info:disabled, .btn-outline-info.disabled {\n  color: #17a2b8;\n  background-color: transparent;\n}\n\n.btn-outline-warning {\n  color: #efb73e;\n  border-color: #efb73e;\n}\n\n.btn-outline-warning:hover {\n  color: #fff;\n  background-color: #efb73e;\n  border-color: #efb73e;\n}\n\n.btn-check:focus + .btn-outline-warning, .btn-outline-warning:focus {\n  box-shadow: 0 0 0 0.25rem rgba(239, 183, 62, 0.5);\n}\n\n.btn-check:checked + .btn-outline-warning,\n.btn-check:active + .btn-outline-warning, .btn-outline-warning:active, .btn-outline-warning.active, .btn-outline-warning.dropdown-toggle.show {\n  color: #fff;\n  background-color: #efb73e;\n  border-color: #efb73e;\n}\n\n.btn-check:checked + .btn-outline-warning:focus,\n.btn-check:active + .btn-outline-warning:focus, .btn-outline-warning:active:focus, .btn-outline-warning.active:focus, .btn-outline-warning.dropdown-toggle.show:focus {\n  box-shadow: 0 0 0 0.25rem rgba(239, 183, 62, 0.5);\n}\n\n.btn-outline-warning:disabled, .btn-outline-warning.disabled {\n  color: #efb73e;\n  background-color: transparent;\n}\n\n.btn-outline-danger {\n  color: #df382c;\n  border-color: #df382c;\n}\n\n.btn-outline-danger:hover {\n  color: #fff;\n  background-color: #df382c;\n  border-color: #df382c;\n}\n\n.btn-check:focus + .btn-outline-danger, .btn-outline-danger:focus {\n  box-shadow: 0 0 0 0.25rem rgba(223, 56, 44, 0.5);\n}\n\n.btn-check:checked + .btn-outline-danger,\n.btn-check:active + .btn-outline-danger, .btn-outline-danger:active, .btn-outline-danger.active, .btn-outline-danger.dropdown-toggle.show {\n  color: #fff;\n  background-color: #df382c;\n  border-color: #df382c;\n}\n\n.btn-check:checked + .btn-outline-danger:focus,\n.btn-check:active + .btn-outline-danger:focus, .btn-outline-danger:active:focus, .btn-outline-danger.active:focus, .btn-outline-danger.dropdown-toggle.show:focus {\n  box-shadow: 0 0 0 0.25rem rgba(223, 56, 44, 0.5);\n}\n\n.btn-outline-danger:disabled, .btn-outline-danger.disabled {\n  color: #df382c;\n  background-color: transparent;\n}\n\n.btn-outline-light {\n  color: #e9ecef;\n  border-color: #e9ecef;\n}\n\n.btn-outline-light:hover {\n  color: #000;\n  background-color: #e9ecef;\n  border-color: #e9ecef;\n}\n\n.btn-check:focus + .btn-outline-light, .btn-outline-light:focus {\n  box-shadow: 0 0 0 0.25rem rgba(233, 236, 239, 0.5);\n}\n\n.btn-check:checked + .btn-outline-light,\n.btn-check:active + .btn-outline-light, .btn-outline-light:active, .btn-outline-light.active, .btn-outline-light.dropdown-toggle.show {\n  color: #000;\n  background-color: #e9ecef;\n  border-color: #e9ecef;\n}\n\n.btn-check:checked + .btn-outline-light:focus,\n.btn-check:active + .btn-outline-light:focus, .btn-outline-light:active:focus, .btn-outline-light.active:focus, .btn-outline-light.dropdown-toggle.show:focus {\n  box-shadow: 0 0 0 0.25rem rgba(233, 236, 239, 0.5);\n}\n\n.btn-outline-light:disabled, .btn-outline-light.disabled {\n  color: #e9ecef;\n  background-color: transparent;\n}\n\n.btn-outline-dark {\n  color: #772953;\n  border-color: #772953;\n}\n\n.btn-outline-dark:hover {\n  color: #fff;\n  background-color: #772953;\n  border-color: #772953;\n}\n\n.btn-check:focus + .btn-outline-dark, .btn-outline-dark:focus {\n  box-shadow: 0 0 0 0.25rem rgba(119, 41, 83, 0.5);\n}\n\n.btn-check:checked + .btn-outline-dark,\n.btn-check:active + .btn-outline-dark, .btn-outline-dark:active, .btn-outline-dark.active, .btn-outline-dark.dropdown-toggle.show {\n  color: #fff;\n  background-color: #772953;\n  border-color: #772953;\n}\n\n.btn-check:checked + .btn-outline-dark:focus,\n.btn-check:active + .btn-outline-dark:focus, .btn-outline-dark:active:focus, .btn-outline-dark.active:focus, .btn-outline-dark.dropdown-toggle.show:focus {\n  box-shadow: 0 0 0 0.25rem rgba(119, 41, 83, 0.5);\n}\n\n.btn-outline-dark:disabled, .btn-outline-dark.disabled {\n  color: #772953;\n  background-color: transparent;\n}\n\n.btn-link {\n  font-weight: 400;\n  color: #e95420;\n  text-decoration: underline;\n}\n\n.btn-link:hover {\n  color: #ba431a;\n}\n\n.btn-link:disabled, .btn-link.disabled {\n  color: #868e96;\n}\n\n.btn-lg, .btn-group-lg > .btn {\n  padding: 0.5rem 1rem;\n  font-size: 1.25rem;\n  border-radius: 0.3rem;\n}\n\n.btn-sm, .btn-group-sm > .btn {\n  padding: 0.25rem 0.5rem;\n  font-size: 0.875rem;\n  border-radius: 0.2rem;\n}\n\n.fade {\n  transition: opacity 0.15s linear;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .fade {\n    transition: none;\n  }\n}\n\n.fade:not(.show) {\n  opacity: 0;\n}\n\n.collapse:not(.show) {\n  display: none;\n}\n\n.collapsing {\n  height: 0;\n  overflow: hidden;\n  transition: height 0.35s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .collapsing {\n    transition: none;\n  }\n}\n\n.collapsing.collapse-horizontal {\n  width: 0;\n  height: auto;\n  transition: width 0.35s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .collapsing.collapse-horizontal {\n    transition: none;\n  }\n}\n\n.dropup,\n.dropend,\n.dropdown,\n.dropstart {\n  position: relative;\n}\n\n.dropdown-toggle {\n  white-space: nowrap;\n}\n\n.dropdown-toggle::after {\n  display: inline-block;\n  margin-left: 0.255em;\n  vertical-align: 0.255em;\n  content: \"\";\n  border-top: 0.3em solid;\n  border-right: 0.3em solid transparent;\n  border-bottom: 0;\n  border-left: 0.3em solid transparent;\n}\n\n.dropdown-toggle:empty::after {\n  margin-left: 0;\n}\n\n.dropdown-menu {\n  position: absolute;\n  z-index: 1000;\n  display: none;\n  min-width: 10rem;\n  padding: 0.5rem 0;\n  margin: 0;\n  font-size: 1rem;\n  color: #333;\n  text-align: left;\n  list-style: none;\n  background-color: #fff;\n  background-clip: padding-box;\n  border: 1px solid rgba(0, 0, 0, 0.15);\n  border-radius: 0.25rem;\n}\n\n.dropdown-menu[data-bs-popper] {\n  top: 100%;\n  left: 0;\n  margin-top: 0.125rem;\n}\n\n.dropdown-menu-start {\n  --bs-position: start;\n}\n\n.dropdown-menu-start[data-bs-popper] {\n  right: auto;\n  left: 0;\n}\n\n.dropdown-menu-end {\n  --bs-position: end;\n}\n\n.dropdown-menu-end[data-bs-popper] {\n  right: 0;\n  left: auto;\n}\n\n@media (min-width: 576px) {\n  .dropdown-menu-sm-start {\n    --bs-position: start;\n  }\n  .dropdown-menu-sm-start[data-bs-popper] {\n    right: auto;\n    left: 0;\n  }\n  .dropdown-menu-sm-end {\n    --bs-position: end;\n  }\n  .dropdown-menu-sm-end[data-bs-popper] {\n    right: 0;\n    left: auto;\n  }\n}\n\n@media (min-width: 768px) {\n  .dropdown-menu-md-start {\n    --bs-position: start;\n  }\n  .dropdown-menu-md-start[data-bs-popper] {\n    right: auto;\n    left: 0;\n  }\n  .dropdown-menu-md-end {\n    --bs-position: end;\n  }\n  .dropdown-menu-md-end[data-bs-popper] {\n    right: 0;\n    left: auto;\n  }\n}\n\n@media (min-width: 992px) {\n  .dropdown-menu-lg-start {\n    --bs-position: start;\n  }\n  .dropdown-menu-lg-start[data-bs-popper] {\n    right: auto;\n    left: 0;\n  }\n  .dropdown-menu-lg-end {\n    --bs-position: end;\n  }\n  .dropdown-menu-lg-end[data-bs-popper] {\n    right: 0;\n    left: auto;\n  }\n}\n\n@media (min-width: 1200px) {\n  .dropdown-menu-xl-start {\n    --bs-position: start;\n  }\n  .dropdown-menu-xl-start[data-bs-popper] {\n    right: auto;\n    left: 0;\n  }\n  .dropdown-menu-xl-end {\n    --bs-position: end;\n  }\n  .dropdown-menu-xl-end[data-bs-popper] {\n    right: 0;\n    left: auto;\n  }\n}\n\n@media (min-width: 1400px) {\n  .dropdown-menu-xxl-start {\n    --bs-position: start;\n  }\n  .dropdown-menu-xxl-start[data-bs-popper] {\n    right: auto;\n    left: 0;\n  }\n  .dropdown-menu-xxl-end {\n    --bs-position: end;\n  }\n  .dropdown-menu-xxl-end[data-bs-popper] {\n    right: 0;\n    left: auto;\n  }\n}\n\n.dropup .dropdown-menu[data-bs-popper] {\n  top: auto;\n  bottom: 100%;\n  margin-top: 0;\n  margin-bottom: 0.125rem;\n}\n\n.dropup .dropdown-toggle::after {\n  display: inline-block;\n  margin-left: 0.255em;\n  vertical-align: 0.255em;\n  content: \"\";\n  border-top: 0;\n  border-right: 0.3em solid transparent;\n  border-bottom: 0.3em solid;\n  border-left: 0.3em solid transparent;\n}\n\n.dropup .dropdown-toggle:empty::after {\n  margin-left: 0;\n}\n\n.dropend .dropdown-menu[data-bs-popper] {\n  top: 0;\n  right: auto;\n  left: 100%;\n  margin-top: 0;\n  margin-left: 0.125rem;\n}\n\n.dropend .dropdown-toggle::after {\n  display: inline-block;\n  margin-left: 0.255em;\n  vertical-align: 0.255em;\n  content: \"\";\n  border-top: 0.3em solid transparent;\n  border-right: 0;\n  border-bottom: 0.3em solid transparent;\n  border-left: 0.3em solid;\n}\n\n.dropend .dropdown-toggle:empty::after {\n  margin-left: 0;\n}\n\n.dropend .dropdown-toggle::after {\n  vertical-align: 0;\n}\n\n.dropstart .dropdown-menu[data-bs-popper] {\n  top: 0;\n  right: 100%;\n  left: auto;\n  margin-top: 0;\n  margin-right: 0.125rem;\n}\n\n.dropstart .dropdown-toggle::after {\n  display: inline-block;\n  margin-left: 0.255em;\n  vertical-align: 0.255em;\n  content: \"\";\n}\n\n.dropstart .dropdown-toggle::after {\n  display: none;\n}\n\n.dropstart .dropdown-toggle::before {\n  display: inline-block;\n  margin-right: 0.255em;\n  vertical-align: 0.255em;\n  content: \"\";\n  border-top: 0.3em solid transparent;\n  border-right: 0.3em solid;\n  border-bottom: 0.3em solid transparent;\n}\n\n.dropstart .dropdown-toggle:empty::after {\n  margin-left: 0;\n}\n\n.dropstart .dropdown-toggle::before {\n  vertical-align: 0;\n}\n\n.dropdown-divider {\n  height: 0;\n  margin: 0.5rem 0;\n  overflow: hidden;\n  border-top: 1px solid rgba(0, 0, 0, 0.15);\n}\n\n.dropdown-item {\n  display: block;\n  width: 100%;\n  padding: 0.25rem 1rem;\n  clear: both;\n  font-weight: 400;\n  color: #212529;\n  text-align: inherit;\n  text-decoration: none;\n  white-space: nowrap;\n  background-color: transparent;\n  border: 0;\n}\n\n.dropdown-item:hover, .dropdown-item:focus {\n  color: #1e2125;\n  background-color: #e9ecef;\n}\n\n.dropdown-item.active, .dropdown-item:active {\n  color: #fff;\n  text-decoration: none;\n  background-color: #e95420;\n}\n\n.dropdown-item.disabled, .dropdown-item:disabled {\n  color: #aea79f;\n  pointer-events: none;\n  background-color: transparent;\n}\n\n.dropdown-menu.show {\n  display: block;\n}\n\n.dropdown-header {\n  display: block;\n  padding: 0.5rem 1rem;\n  margin-bottom: 0;\n  font-size: 0.875rem;\n  color: #868e96;\n  white-space: nowrap;\n}\n\n.dropdown-item-text {\n  display: block;\n  padding: 0.25rem 1rem;\n  color: #212529;\n}\n\n.dropdown-menu-dark {\n  color: #dee2e6;\n  background-color: #333;\n  border-color: rgba(0, 0, 0, 0.15);\n}\n\n.dropdown-menu-dark .dropdown-item {\n  color: #dee2e6;\n}\n\n.dropdown-menu-dark .dropdown-item:hover, .dropdown-menu-dark .dropdown-item:focus {\n  color: #fff;\n  background-color: rgba(255, 255, 255, 0.15);\n}\n\n.dropdown-menu-dark .dropdown-item.active, .dropdown-menu-dark .dropdown-item:active {\n  color: #fff;\n  background-color: #e95420;\n}\n\n.dropdown-menu-dark .dropdown-item.disabled, .dropdown-menu-dark .dropdown-item:disabled {\n  color: #aea79f;\n}\n\n.dropdown-menu-dark .dropdown-divider {\n  border-color: rgba(0, 0, 0, 0.15);\n}\n\n.dropdown-menu-dark .dropdown-item-text {\n  color: #dee2e6;\n}\n\n.dropdown-menu-dark .dropdown-header {\n  color: #aea79f;\n}\n\n.btn-group,\n.btn-group-vertical {\n  position: relative;\n  display: -ms-inline-flexbox;\n  display: inline-flex;\n  vertical-align: middle;\n}\n\n.btn-group > .btn,\n.btn-group-vertical > .btn {\n  position: relative;\n  -ms-flex: 1 1 auto;\n  flex: 1 1 auto;\n}\n\n.btn-group > .btn-check:checked + .btn,\n.btn-group > .btn-check:focus + .btn,\n.btn-group > .btn:hover,\n.btn-group > .btn:focus,\n.btn-group > .btn:active,\n.btn-group > .btn.active,\n.btn-group-vertical > .btn-check:checked + .btn,\n.btn-group-vertical > .btn-check:focus + .btn,\n.btn-group-vertical > .btn:hover,\n.btn-group-vertical > .btn:focus,\n.btn-group-vertical > .btn:active,\n.btn-group-vertical > .btn.active {\n  z-index: 1;\n}\n\n.btn-toolbar {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n  flex-wrap: wrap;\n  -ms-flex-pack: start;\n  justify-content: flex-start;\n}\n\n.btn-toolbar .input-group {\n  width: auto;\n}\n\n.btn-group > .btn:not(:first-child),\n.btn-group > .btn-group:not(:first-child) {\n  margin-left: -1px;\n}\n\n.btn-group > .btn:not(:last-child):not(.dropdown-toggle),\n.btn-group > .btn-group:not(:last-child) > .btn {\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n}\n\n.btn-group > .btn:nth-child(n + 3),\n.btn-group > :not(.btn-check) + .btn,\n.btn-group > .btn-group:not(:first-child) > .btn {\n  border-top-left-radius: 0;\n  border-bottom-left-radius: 0;\n}\n\n.dropdown-toggle-split {\n  padding-right: 0.5625rem;\n  padding-left: 0.5625rem;\n}\n\n.dropdown-toggle-split::after,\n.dropup .dropdown-toggle-split::after,\n.dropend .dropdown-toggle-split::after {\n  margin-left: 0;\n}\n\n.dropstart .dropdown-toggle-split::before {\n  margin-right: 0;\n}\n\n.btn-sm + .dropdown-toggle-split, .btn-group-sm > .btn + .dropdown-toggle-split {\n  padding-right: 0.375rem;\n  padding-left: 0.375rem;\n}\n\n.btn-lg + .dropdown-toggle-split, .btn-group-lg > .btn + .dropdown-toggle-split {\n  padding-right: 0.75rem;\n  padding-left: 0.75rem;\n}\n\n.btn-group-vertical {\n  -ms-flex-direction: column;\n  flex-direction: column;\n  -ms-flex-align: start;\n  align-items: flex-start;\n  -ms-flex-pack: center;\n  justify-content: center;\n}\n\n.btn-group-vertical > .btn,\n.btn-group-vertical > .btn-group {\n  width: 100%;\n}\n\n.btn-group-vertical > .btn:not(:first-child),\n.btn-group-vertical > .btn-group:not(:first-child) {\n  margin-top: -1px;\n}\n\n.btn-group-vertical > .btn:not(:last-child):not(.dropdown-toggle),\n.btn-group-vertical > .btn-group:not(:last-child) > .btn {\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 0;\n}\n\n.btn-group-vertical > .btn ~ .btn,\n.btn-group-vertical > .btn-group:not(:first-child) > .btn {\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n}\n\n.nav {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n  flex-wrap: wrap;\n  padding-left: 0;\n  margin-bottom: 0;\n  list-style: none;\n}\n\n.nav-link {\n  display: block;\n  padding: 0.5rem 1rem;\n  color: #e95420;\n  text-decoration: none;\n  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .nav-link {\n    transition: none;\n  }\n}\n\n.nav-link:hover, .nav-link:focus {\n  color: #ba431a;\n}\n\n.nav-link.disabled {\n  color: #868e96;\n  pointer-events: none;\n  cursor: default;\n}\n\n.nav-tabs {\n  border-bottom: 1px solid #dee2e6;\n}\n\n.nav-tabs .nav-link {\n  margin-bottom: -1px;\n  background: none;\n  border: 1px solid transparent;\n  border-top-left-radius: 0.25rem;\n  border-top-right-radius: 0.25rem;\n}\n\n.nav-tabs .nav-link:hover, .nav-tabs .nav-link:focus {\n  border-color: #e9ecef #e9ecef #dee2e6;\n  isolation: isolate;\n}\n\n.nav-tabs .nav-link.disabled {\n  color: #868e96;\n  background-color: transparent;\n  border-color: transparent;\n}\n\n.nav-tabs .nav-link.active,\n.nav-tabs .nav-item.show .nav-link {\n  color: #495057;\n  background-color: #fff;\n  border-color: #dee2e6 #dee2e6 #fff;\n}\n\n.nav-tabs .dropdown-menu {\n  margin-top: -1px;\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n}\n\n.nav-pills .nav-link {\n  background: none;\n  border: 0;\n  border-radius: 0.25rem;\n}\n\n.nav-pills .nav-link.active,\n.nav-pills .show > .nav-link {\n  color: #fff;\n  background-color: #e95420;\n}\n\n.nav-fill > .nav-link,\n.nav-fill .nav-item {\n  -ms-flex: 1 1 auto;\n  flex: 1 1 auto;\n  text-align: center;\n}\n\n.nav-justified > .nav-link,\n.nav-justified .nav-item {\n  -ms-flex-preferred-size: 0;\n  flex-basis: 0;\n  -ms-flex-positive: 1;\n  flex-grow: 1;\n  text-align: center;\n}\n\n.nav-fill .nav-item .nav-link,\n.nav-justified .nav-item .nav-link {\n  width: 100%;\n}\n\n.tab-content > .tab-pane {\n  display: none;\n}\n\n.tab-content > .active {\n  display: block;\n}\n\n.navbar {\n  position: relative;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n  flex-wrap: wrap;\n  -ms-flex-align: center;\n  align-items: center;\n  -ms-flex-pack: justify;\n  justify-content: space-between;\n  padding-top: 0.5rem;\n  padding-bottom: 0.5rem;\n}\n\n.navbar > .container,\n.navbar > .container-fluid, .navbar > .container-sm, .navbar > .container-md, .navbar > .container-lg, .navbar > .container-xl, .navbar > .container-xxl {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: inherit;\n  flex-wrap: inherit;\n  -ms-flex-align: center;\n  align-items: center;\n  -ms-flex-pack: justify;\n  justify-content: space-between;\n}\n\n.navbar-brand {\n  padding-top: 0.3125rem;\n  padding-bottom: 0.3125rem;\n  margin-right: 1rem;\n  font-size: 1.25rem;\n  text-decoration: none;\n  white-space: nowrap;\n}\n\n.navbar-nav {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  padding-left: 0;\n  margin-bottom: 0;\n  list-style: none;\n}\n\n.navbar-nav .nav-link {\n  padding-right: 0;\n  padding-left: 0;\n}\n\n.navbar-nav .dropdown-menu {\n  position: static;\n}\n\n.navbar-text {\n  padding-top: 0.5rem;\n  padding-bottom: 0.5rem;\n}\n\n.navbar-collapse {\n  -ms-flex-preferred-size: 100%;\n  flex-basis: 100%;\n  -ms-flex-positive: 1;\n  flex-grow: 1;\n  -ms-flex-align: center;\n  align-items: center;\n}\n\n.navbar-toggler {\n  padding: 0.25rem 0.75rem;\n  font-size: 1.25rem;\n  line-height: 1;\n  background-color: transparent;\n  border: 1px solid transparent;\n  border-radius: 0.25rem;\n  transition: box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .navbar-toggler {\n    transition: none;\n  }\n}\n\n.navbar-toggler:hover {\n  text-decoration: none;\n}\n\n.navbar-toggler:focus {\n  text-decoration: none;\n  outline: 0;\n  box-shadow: 0 0 0 0.25rem;\n}\n\n.navbar-toggler-icon {\n  display: inline-block;\n  width: 1.5em;\n  height: 1.5em;\n  vertical-align: middle;\n  background-repeat: no-repeat;\n  background-position: center;\n  background-size: 100%;\n}\n\n.navbar-nav-scroll {\n  max-height: var(--bs-scroll-height, 75vh);\n  overflow-y: auto;\n}\n\n@media (min-width: 576px) {\n  .navbar-expand-sm {\n    -ms-flex-wrap: nowrap;\n    flex-wrap: nowrap;\n    -ms-flex-pack: start;\n    justify-content: flex-start;\n  }\n  .navbar-expand-sm .navbar-nav {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .navbar-expand-sm .navbar-nav .dropdown-menu {\n    position: absolute;\n  }\n  .navbar-expand-sm .navbar-nav .nav-link {\n    padding-right: 0.5rem;\n    padding-left: 0.5rem;\n  }\n  .navbar-expand-sm .navbar-nav-scroll {\n    overflow: visible;\n  }\n  .navbar-expand-sm .navbar-collapse {\n    display: -ms-flexbox !important;\n    display: flex !important;\n    -ms-flex-preferred-size: auto;\n    flex-basis: auto;\n  }\n  .navbar-expand-sm .navbar-toggler {\n    display: none;\n  }\n  .navbar-expand-sm .offcanvas-header {\n    display: none;\n  }\n  .navbar-expand-sm .offcanvas {\n    position: inherit;\n    bottom: 0;\n    z-index: 1000;\n    -ms-flex-positive: 1;\n    flex-grow: 1;\n    visibility: visible !important;\n    background-color: transparent;\n    border-right: 0;\n    border-left: 0;\n    transition: none;\n    -webkit-transform: none;\n    transform: none;\n  }\n  .navbar-expand-sm .offcanvas-top,\n  .navbar-expand-sm .offcanvas-bottom {\n    height: auto;\n    border-top: 0;\n    border-bottom: 0;\n  }\n  .navbar-expand-sm .offcanvas-body {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-positive: 0;\n    flex-grow: 0;\n    padding: 0;\n    overflow-y: visible;\n  }\n}\n\n@media (min-width: 768px) {\n  .navbar-expand-md {\n    -ms-flex-wrap: nowrap;\n    flex-wrap: nowrap;\n    -ms-flex-pack: start;\n    justify-content: flex-start;\n  }\n  .navbar-expand-md .navbar-nav {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .navbar-expand-md .navbar-nav .dropdown-menu {\n    position: absolute;\n  }\n  .navbar-expand-md .navbar-nav .nav-link {\n    padding-right: 0.5rem;\n    padding-left: 0.5rem;\n  }\n  .navbar-expand-md .navbar-nav-scroll {\n    overflow: visible;\n  }\n  .navbar-expand-md .navbar-collapse {\n    display: -ms-flexbox !important;\n    display: flex !important;\n    -ms-flex-preferred-size: auto;\n    flex-basis: auto;\n  }\n  .navbar-expand-md .navbar-toggler {\n    display: none;\n  }\n  .navbar-expand-md .offcanvas-header {\n    display: none;\n  }\n  .navbar-expand-md .offcanvas {\n    position: inherit;\n    bottom: 0;\n    z-index: 1000;\n    -ms-flex-positive: 1;\n    flex-grow: 1;\n    visibility: visible !important;\n    background-color: transparent;\n    border-right: 0;\n    border-left: 0;\n    transition: none;\n    -webkit-transform: none;\n    transform: none;\n  }\n  .navbar-expand-md .offcanvas-top,\n  .navbar-expand-md .offcanvas-bottom {\n    height: auto;\n    border-top: 0;\n    border-bottom: 0;\n  }\n  .navbar-expand-md .offcanvas-body {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-positive: 0;\n    flex-grow: 0;\n    padding: 0;\n    overflow-y: visible;\n  }\n}\n\n@media (min-width: 992px) {\n  .navbar-expand-lg {\n    -ms-flex-wrap: nowrap;\n    flex-wrap: nowrap;\n    -ms-flex-pack: start;\n    justify-content: flex-start;\n  }\n  .navbar-expand-lg .navbar-nav {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .navbar-expand-lg .navbar-nav .dropdown-menu {\n    position: absolute;\n  }\n  .navbar-expand-lg .navbar-nav .nav-link {\n    padding-right: 0.5rem;\n    padding-left: 0.5rem;\n  }\n  .navbar-expand-lg .navbar-nav-scroll {\n    overflow: visible;\n  }\n  .navbar-expand-lg .navbar-collapse {\n    display: -ms-flexbox !important;\n    display: flex !important;\n    -ms-flex-preferred-size: auto;\n    flex-basis: auto;\n  }\n  .navbar-expand-lg .navbar-toggler {\n    display: none;\n  }\n  .navbar-expand-lg .offcanvas-header {\n    display: none;\n  }\n  .navbar-expand-lg .offcanvas {\n    position: inherit;\n    bottom: 0;\n    z-index: 1000;\n    -ms-flex-positive: 1;\n    flex-grow: 1;\n    visibility: visible !important;\n    background-color: transparent;\n    border-right: 0;\n    border-left: 0;\n    transition: none;\n    -webkit-transform: none;\n    transform: none;\n  }\n  .navbar-expand-lg .offcanvas-top,\n  .navbar-expand-lg .offcanvas-bottom {\n    height: auto;\n    border-top: 0;\n    border-bottom: 0;\n  }\n  .navbar-expand-lg .offcanvas-body {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-positive: 0;\n    flex-grow: 0;\n    padding: 0;\n    overflow-y: visible;\n  }\n}\n\n@media (min-width: 1200px) {\n  .navbar-expand-xl {\n    -ms-flex-wrap: nowrap;\n    flex-wrap: nowrap;\n    -ms-flex-pack: start;\n    justify-content: flex-start;\n  }\n  .navbar-expand-xl .navbar-nav {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .navbar-expand-xl .navbar-nav .dropdown-menu {\n    position: absolute;\n  }\n  .navbar-expand-xl .navbar-nav .nav-link {\n    padding-right: 0.5rem;\n    padding-left: 0.5rem;\n  }\n  .navbar-expand-xl .navbar-nav-scroll {\n    overflow: visible;\n  }\n  .navbar-expand-xl .navbar-collapse {\n    display: -ms-flexbox !important;\n    display: flex !important;\n    -ms-flex-preferred-size: auto;\n    flex-basis: auto;\n  }\n  .navbar-expand-xl .navbar-toggler {\n    display: none;\n  }\n  .navbar-expand-xl .offcanvas-header {\n    display: none;\n  }\n  .navbar-expand-xl .offcanvas {\n    position: inherit;\n    bottom: 0;\n    z-index: 1000;\n    -ms-flex-positive: 1;\n    flex-grow: 1;\n    visibility: visible !important;\n    background-color: transparent;\n    border-right: 0;\n    border-left: 0;\n    transition: none;\n    -webkit-transform: none;\n    transform: none;\n  }\n  .navbar-expand-xl .offcanvas-top,\n  .navbar-expand-xl .offcanvas-bottom {\n    height: auto;\n    border-top: 0;\n    border-bottom: 0;\n  }\n  .navbar-expand-xl .offcanvas-body {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-positive: 0;\n    flex-grow: 0;\n    padding: 0;\n    overflow-y: visible;\n  }\n}\n\n@media (min-width: 1400px) {\n  .navbar-expand-xxl {\n    -ms-flex-wrap: nowrap;\n    flex-wrap: nowrap;\n    -ms-flex-pack: start;\n    justify-content: flex-start;\n  }\n  .navbar-expand-xxl .navbar-nav {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .navbar-expand-xxl .navbar-nav .dropdown-menu {\n    position: absolute;\n  }\n  .navbar-expand-xxl .navbar-nav .nav-link {\n    padding-right: 0.5rem;\n    padding-left: 0.5rem;\n  }\n  .navbar-expand-xxl .navbar-nav-scroll {\n    overflow: visible;\n  }\n  .navbar-expand-xxl .navbar-collapse {\n    display: -ms-flexbox !important;\n    display: flex !important;\n    -ms-flex-preferred-size: auto;\n    flex-basis: auto;\n  }\n  .navbar-expand-xxl .navbar-toggler {\n    display: none;\n  }\n  .navbar-expand-xxl .offcanvas-header {\n    display: none;\n  }\n  .navbar-expand-xxl .offcanvas {\n    position: inherit;\n    bottom: 0;\n    z-index: 1000;\n    -ms-flex-positive: 1;\n    flex-grow: 1;\n    visibility: visible !important;\n    background-color: transparent;\n    border-right: 0;\n    border-left: 0;\n    transition: none;\n    -webkit-transform: none;\n    transform: none;\n  }\n  .navbar-expand-xxl .offcanvas-top,\n  .navbar-expand-xxl .offcanvas-bottom {\n    height: auto;\n    border-top: 0;\n    border-bottom: 0;\n  }\n  .navbar-expand-xxl .offcanvas-body {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-positive: 0;\n    flex-grow: 0;\n    padding: 0;\n    overflow-y: visible;\n  }\n}\n\n.navbar-expand {\n  -ms-flex-wrap: nowrap;\n  flex-wrap: nowrap;\n  -ms-flex-pack: start;\n  justify-content: flex-start;\n}\n\n.navbar-expand .navbar-nav {\n  -ms-flex-direction: row;\n  flex-direction: row;\n}\n\n.navbar-expand .navbar-nav .dropdown-menu {\n  position: absolute;\n}\n\n.navbar-expand .navbar-nav .nav-link {\n  padding-right: 0.5rem;\n  padding-left: 0.5rem;\n}\n\n.navbar-expand .navbar-nav-scroll {\n  overflow: visible;\n}\n\n.navbar-expand .navbar-collapse {\n  display: -ms-flexbox !important;\n  display: flex !important;\n  -ms-flex-preferred-size: auto;\n  flex-basis: auto;\n}\n\n.navbar-expand .navbar-toggler {\n  display: none;\n}\n\n.navbar-expand .offcanvas-header {\n  display: none;\n}\n\n.navbar-expand .offcanvas {\n  position: inherit;\n  bottom: 0;\n  z-index: 1000;\n  -ms-flex-positive: 1;\n  flex-grow: 1;\n  visibility: visible !important;\n  background-color: transparent;\n  border-right: 0;\n  border-left: 0;\n  transition: none;\n  -webkit-transform: none;\n  transform: none;\n}\n\n.navbar-expand .offcanvas-top,\n.navbar-expand .offcanvas-bottom {\n  height: auto;\n  border-top: 0;\n  border-bottom: 0;\n}\n\n.navbar-expand .offcanvas-body {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-positive: 0;\n  flex-grow: 0;\n  padding: 0;\n  overflow-y: visible;\n}\n\n.navbar-light .navbar-brand {\n  color: rgba(0, 0, 0, 0.9);\n}\n\n.navbar-light .navbar-brand:hover, .navbar-light .navbar-brand:focus {\n  color: rgba(0, 0, 0, 0.9);\n}\n\n.navbar-light .navbar-nav .nav-link {\n  color: rgba(0, 0, 0, 0.55);\n}\n\n.navbar-light .navbar-nav .nav-link:hover, .navbar-light .navbar-nav .nav-link:focus {\n  color: rgba(0, 0, 0, 0.7);\n}\n\n.navbar-light .navbar-nav .nav-link.disabled {\n  color: rgba(0, 0, 0, 0.3);\n}\n\n.navbar-light .navbar-nav .show > .nav-link,\n.navbar-light .navbar-nav .nav-link.active {\n  color: rgba(0, 0, 0, 0.9);\n}\n\n.navbar-light .navbar-toggler {\n  color: rgba(0, 0, 0, 0.55);\n  border-color: rgba(0, 0, 0, 0.1);\n}\n\n.navbar-light .navbar-toggler-icon {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%280, 0, 0, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e\");\n}\n\n.navbar-light .navbar-text {\n  color: rgba(0, 0, 0, 0.55);\n}\n\n.navbar-light .navbar-text a,\n.navbar-light .navbar-text a:hover,\n.navbar-light .navbar-text a:focus {\n  color: rgba(0, 0, 0, 0.9);\n}\n\n.navbar-dark .navbar-brand {\n  color: #fff;\n}\n\n.navbar-dark .navbar-brand:hover, .navbar-dark .navbar-brand:focus {\n  color: #fff;\n}\n\n.navbar-dark .navbar-nav .nav-link {\n  color: rgba(255, 255, 255, 0.55);\n}\n\n.navbar-dark .navbar-nav .nav-link:hover, .navbar-dark .navbar-nav .nav-link:focus {\n  color: rgba(255, 255, 255, 0.75);\n}\n\n.navbar-dark .navbar-nav .nav-link.disabled {\n  color: rgba(255, 255, 255, 0.25);\n}\n\n.navbar-dark .navbar-nav .show > .nav-link,\n.navbar-dark .navbar-nav .nav-link.active {\n  color: #fff;\n}\n\n.navbar-dark .navbar-toggler {\n  color: rgba(255, 255, 255, 0.55);\n  border-color: rgba(255, 255, 255, 0.1);\n}\n\n.navbar-dark .navbar-toggler-icon {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e\");\n}\n\n.navbar-dark .navbar-text {\n  color: rgba(255, 255, 255, 0.55);\n}\n\n.navbar-dark .navbar-text a,\n.navbar-dark .navbar-text a:hover,\n.navbar-dark .navbar-text a:focus {\n  color: #fff;\n}\n\n.card {\n  position: relative;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  min-width: 0;\n  word-wrap: break-word;\n  background-color: #fff;\n  background-clip: border-box;\n  border: 1px solid rgba(0, 0, 0, 0.125);\n  border-radius: 0.25rem;\n}\n\n.card > hr {\n  margin-right: 0;\n  margin-left: 0;\n}\n\n.card > .list-group {\n  border-top: inherit;\n  border-bottom: inherit;\n}\n\n.card > .list-group:first-child {\n  border-top-width: 0;\n  border-top-left-radius: calc(0.25rem - 1px);\n  border-top-right-radius: calc(0.25rem - 1px);\n}\n\n.card > .list-group:last-child {\n  border-bottom-width: 0;\n  border-bottom-right-radius: calc(0.25rem - 1px);\n  border-bottom-left-radius: calc(0.25rem - 1px);\n}\n\n.card > .card-header + .list-group,\n.card > .list-group + .card-footer {\n  border-top: 0;\n}\n\n.card-body {\n  -ms-flex: 1 1 auto;\n  flex: 1 1 auto;\n  padding: 1rem 1rem;\n}\n\n.card-title {\n  margin-bottom: 0.5rem;\n}\n\n.card-subtitle {\n  margin-top: -0.25rem;\n  margin-bottom: 0;\n}\n\n.card-text:last-child {\n  margin-bottom: 0;\n}\n\n.card-link + .card-link {\n  margin-left: 1rem;\n}\n\n.card-header {\n  padding: 0.5rem 1rem;\n  margin-bottom: 0;\n  background-color: rgba(0, 0, 0, 0.03);\n  border-bottom: 1px solid rgba(0, 0, 0, 0.125);\n}\n\n.card-header:first-child {\n  border-radius: calc(0.25rem - 1px) calc(0.25rem - 1px) 0 0;\n}\n\n.card-footer {\n  padding: 0.5rem 1rem;\n  background-color: rgba(0, 0, 0, 0.03);\n  border-top: 1px solid rgba(0, 0, 0, 0.125);\n}\n\n.card-footer:last-child {\n  border-radius: 0 0 calc(0.25rem - 1px) calc(0.25rem - 1px);\n}\n\n.card-header-tabs {\n  margin-right: -0.5rem;\n  margin-bottom: -0.5rem;\n  margin-left: -0.5rem;\n  border-bottom: 0;\n}\n\n.card-header-pills {\n  margin-right: -0.5rem;\n  margin-left: -0.5rem;\n}\n\n.card-img-overlay {\n  position: absolute;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  padding: 1rem;\n  border-radius: calc(0.25rem - 1px);\n}\n\n.card-img,\n.card-img-top,\n.card-img-bottom {\n  width: 100%;\n}\n\n.card-img,\n.card-img-top {\n  border-top-left-radius: calc(0.25rem - 1px);\n  border-top-right-radius: calc(0.25rem - 1px);\n}\n\n.card-img,\n.card-img-bottom {\n  border-bottom-right-radius: calc(0.25rem - 1px);\n  border-bottom-left-radius: calc(0.25rem - 1px);\n}\n\n.card-group > .card {\n  margin-bottom: 0.75rem;\n}\n\n@media (min-width: 576px) {\n  .card-group {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-flow: row wrap;\n    flex-flow: row wrap;\n  }\n  .card-group > .card {\n    -ms-flex: 1 0 0%;\n    flex: 1 0 0%;\n    margin-bottom: 0;\n  }\n  .card-group > .card + .card {\n    margin-left: 0;\n    border-left: 0;\n  }\n  .card-group > .card:not(:last-child) {\n    border-top-right-radius: 0;\n    border-bottom-right-radius: 0;\n  }\n  .card-group > .card:not(:last-child) .card-img-top,\n  .card-group > .card:not(:last-child) .card-header {\n    border-top-right-radius: 0;\n  }\n  .card-group > .card:not(:last-child) .card-img-bottom,\n  .card-group > .card:not(:last-child) .card-footer {\n    border-bottom-right-radius: 0;\n  }\n  .card-group > .card:not(:first-child) {\n    border-top-left-radius: 0;\n    border-bottom-left-radius: 0;\n  }\n  .card-group > .card:not(:first-child) .card-img-top,\n  .card-group > .card:not(:first-child) .card-header {\n    border-top-left-radius: 0;\n  }\n  .card-group > .card:not(:first-child) .card-img-bottom,\n  .card-group > .card:not(:first-child) .card-footer {\n    border-bottom-left-radius: 0;\n  }\n}\n\n.accordion-button {\n  position: relative;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-align: center;\n  align-items: center;\n  width: 100%;\n  padding: 1rem 1.25rem;\n  font-size: 1rem;\n  color: #333;\n  text-align: left;\n  background-color: #fff;\n  border: 0;\n  border-radius: 0;\n  overflow-anchor: none;\n  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, border-radius 0.15s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .accordion-button {\n    transition: none;\n  }\n}\n\n.accordion-button:not(.collapsed) {\n  color: #d24c1d;\n  background-color: #fdeee9;\n  box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.125);\n}\n\n.accordion-button:not(.collapsed)::after {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23d24c1d'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e\");\n  -webkit-transform: rotate(-180deg);\n  transform: rotate(-180deg);\n}\n\n.accordion-button::after {\n  -ms-flex-negative: 0;\n  flex-shrink: 0;\n  width: 1.25rem;\n  height: 1.25rem;\n  margin-left: auto;\n  content: \"\";\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23333'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e\");\n  background-repeat: no-repeat;\n  background-size: 1.25rem;\n  transition: -webkit-transform 0.2s ease-in-out;\n  transition: transform 0.2s ease-in-out;\n  transition: transform 0.2s ease-in-out, -webkit-transform 0.2s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .accordion-button::after {\n    transition: none;\n  }\n}\n\n.accordion-button:hover {\n  z-index: 2;\n}\n\n.accordion-button:focus {\n  z-index: 3;\n  border-color: #f4aa90;\n  outline: 0;\n  box-shadow: 0 0 0 0.25rem rgba(233, 84, 32, 0.25);\n}\n\n.accordion-header {\n  margin-bottom: 0;\n}\n\n.accordion-item {\n  background-color: #fff;\n  border: 1px solid rgba(0, 0, 0, 0.125);\n}\n\n.accordion-item:first-of-type {\n  border-top-left-radius: 0.25rem;\n  border-top-right-radius: 0.25rem;\n}\n\n.accordion-item:first-of-type .accordion-button {\n  border-top-left-radius: calc(0.25rem - 1px);\n  border-top-right-radius: calc(0.25rem - 1px);\n}\n\n.accordion-item:not(:first-of-type) {\n  border-top: 0;\n}\n\n.accordion-item:last-of-type {\n  border-bottom-right-radius: 0.25rem;\n  border-bottom-left-radius: 0.25rem;\n}\n\n.accordion-item:last-of-type .accordion-button.collapsed {\n  border-bottom-right-radius: calc(0.25rem - 1px);\n  border-bottom-left-radius: calc(0.25rem - 1px);\n}\n\n.accordion-item:last-of-type .accordion-collapse {\n  border-bottom-right-radius: 0.25rem;\n  border-bottom-left-radius: 0.25rem;\n}\n\n.accordion-body {\n  padding: 1rem 1.25rem;\n}\n\n.accordion-flush .accordion-collapse {\n  border-width: 0;\n}\n\n.accordion-flush .accordion-item {\n  border-right: 0;\n  border-left: 0;\n  border-radius: 0;\n}\n\n.accordion-flush .accordion-item:first-child {\n  border-top: 0;\n}\n\n.accordion-flush .accordion-item:last-child {\n  border-bottom: 0;\n}\n\n.accordion-flush .accordion-item .accordion-button {\n  border-radius: 0;\n}\n\n.breadcrumb {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n  flex-wrap: wrap;\n  padding: 0 0;\n  margin-bottom: 1rem;\n  list-style: none;\n}\n\n.breadcrumb-item + .breadcrumb-item {\n  padding-left: 0.5rem;\n}\n\n.breadcrumb-item + .breadcrumb-item::before {\n  float: left;\n  padding-right: 0.5rem;\n  color: #868e96;\n  content: var(--bs-breadcrumb-divider, \"/\") /* rtl: var(--bs-breadcrumb-divider, \"/\") */;\n}\n\n.breadcrumb-item.active {\n  color: #868e96;\n}\n\n.pagination {\n  display: -ms-flexbox;\n  display: flex;\n  padding-left: 0;\n  list-style: none;\n}\n\n.page-link {\n  position: relative;\n  display: block;\n  color: #e95420;\n  text-decoration: none;\n  background-color: #fff;\n  border: 1px solid #dee2e6;\n  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .page-link {\n    transition: none;\n  }\n}\n\n.page-link:hover {\n  z-index: 2;\n  color: #ba431a;\n  background-color: #e9ecef;\n  border-color: #dee2e6;\n}\n\n.page-link:focus {\n  z-index: 3;\n  color: #ba431a;\n  background-color: #e9ecef;\n  outline: 0;\n  box-shadow: 0 0 0 0.25rem rgba(233, 84, 32, 0.25);\n}\n\n.page-item:not(:first-child) .page-link {\n  margin-left: -1px;\n}\n\n.page-item.active .page-link {\n  z-index: 3;\n  color: #fff;\n  background-color: #e95420;\n  border-color: #e95420;\n}\n\n.page-item.disabled .page-link {\n  color: #868e96;\n  pointer-events: none;\n  background-color: #fff;\n  border-color: #dee2e6;\n}\n\n.page-link {\n  padding: 0.375rem 0.75rem;\n}\n\n.page-item:first-child .page-link {\n  border-top-left-radius: 0.25rem;\n  border-bottom-left-radius: 0.25rem;\n}\n\n.page-item:last-child .page-link {\n  border-top-right-radius: 0.25rem;\n  border-bottom-right-radius: 0.25rem;\n}\n\n.pagination-lg .page-link {\n  padding: 0.75rem 1.5rem;\n  font-size: 1.25rem;\n}\n\n.pagination-lg .page-item:first-child .page-link {\n  border-top-left-radius: 0.3rem;\n  border-bottom-left-radius: 0.3rem;\n}\n\n.pagination-lg .page-item:last-child .page-link {\n  border-top-right-radius: 0.3rem;\n  border-bottom-right-radius: 0.3rem;\n}\n\n.pagination-sm .page-link {\n  padding: 0.25rem 0.5rem;\n  font-size: 0.875rem;\n}\n\n.pagination-sm .page-item:first-child .page-link {\n  border-top-left-radius: 0.2rem;\n  border-bottom-left-radius: 0.2rem;\n}\n\n.pagination-sm .page-item:last-child .page-link {\n  border-top-right-radius: 0.2rem;\n  border-bottom-right-radius: 0.2rem;\n}\n\n.badge {\n  display: inline-block;\n  padding: 0.35em 0.65em;\n  font-size: 0.75em;\n  font-weight: 700;\n  line-height: 1;\n  color: #fff;\n  text-align: center;\n  white-space: nowrap;\n  vertical-align: baseline;\n  border-radius: 0.25rem;\n}\n\n.badge:empty {\n  display: none;\n}\n\n.btn .badge {\n  position: relative;\n  top: -1px;\n}\n\n.alert {\n  position: relative;\n  padding: 1rem 1rem;\n  margin-bottom: 1rem;\n  border: 1px solid transparent;\n  border-radius: 0.25rem;\n}\n\n.alert-heading {\n  color: inherit;\n}\n\n.alert-link {\n  font-weight: 700;\n}\n\n.alert-dismissible {\n  padding-right: 3rem;\n}\n\n.alert-dismissible .btn-close {\n  position: absolute;\n  top: 0;\n  right: 0;\n  z-index: 2;\n  padding: 1.25rem 1rem;\n}\n\n.alert-primary {\n  color: #8c3213;\n  background-color: #fbddd2;\n  border-color: #f8ccbc;\n}\n\n.alert-primary .alert-link {\n  color: #70280f;\n}\n\n.alert-secondary {\n  color: #68645f;\n  background-color: #efedec;\n  border-color: #e7e5e2;\n}\n\n.alert-secondary .alert-link {\n  color: #53504c;\n}\n\n.alert-success {\n  color: #226c2c;\n  background-color: #d7f0db;\n  border-color: #c3e9c9;\n}\n\n.alert-success .alert-link {\n  color: #1b5623;\n}\n\n.alert-info {\n  color: #0e616e;\n  background-color: #d1ecf1;\n  border-color: #b9e3ea;\n}\n\n.alert-info .alert-link {\n  color: #0b4e58;\n}\n\n.alert-warning {\n  color: #8f6e25;\n  background-color: #fcf1d8;\n  border-color: #fae9c5;\n}\n\n.alert-warning .alert-link {\n  color: #72581e;\n}\n\n.alert-danger {\n  color: #86221a;\n  background-color: #f9d7d5;\n  border-color: #f5c3c0;\n}\n\n.alert-danger .alert-link {\n  color: #6b1b15;\n}\n\n.alert-light {\n  color: #8c8e8f;\n  background-color: #fbfbfc;\n  border-color: #f8f9fa;\n}\n\n.alert-light .alert-link {\n  color: #707272;\n}\n\n.alert-dark {\n  color: #471932;\n  background-color: #e4d4dd;\n  border-color: #d6bfcb;\n}\n\n.alert-dark .alert-link {\n  color: #391428;\n}\n\n@-webkit-keyframes progress-bar-stripes {\n  0% {\n    background-position-x: 1rem;\n  }\n}\n\n@keyframes progress-bar-stripes {\n  0% {\n    background-position-x: 1rem;\n  }\n}\n\n.progress {\n  display: -ms-flexbox;\n  display: flex;\n  height: 1rem;\n  overflow: hidden;\n  font-size: 0.75rem;\n  background-color: #e9ecef;\n  border-radius: 0.25rem;\n}\n\n.progress-bar {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  -ms-flex-pack: center;\n  justify-content: center;\n  overflow: hidden;\n  color: #fff;\n  text-align: center;\n  white-space: nowrap;\n  background-color: #e95420;\n  transition: width 0.6s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .progress-bar {\n    transition: none;\n  }\n}\n\n.progress-bar-striped {\n  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-size: 1rem 1rem;\n}\n\n.progress-bar-animated {\n  -webkit-animation: 1s linear infinite progress-bar-stripes;\n  animation: 1s linear infinite progress-bar-stripes;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .progress-bar-animated {\n    -webkit-animation: none;\n    animation: none;\n  }\n}\n\n.list-group {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  padding-left: 0;\n  margin-bottom: 0;\n  border-radius: 0.25rem;\n}\n\n.list-group-numbered {\n  list-style-type: none;\n  counter-reset: section;\n}\n\n.list-group-numbered > li::before {\n  content: counters(section, \".\") \". \";\n  counter-increment: section;\n}\n\n.list-group-item-action {\n  width: 100%;\n  color: #495057;\n  text-align: inherit;\n}\n\n.list-group-item-action:hover, .list-group-item-action:focus {\n  z-index: 1;\n  color: #495057;\n  text-decoration: none;\n  background-color: #f8f9fa;\n}\n\n.list-group-item-action:active {\n  color: #333;\n  background-color: #e9ecef;\n}\n\n.list-group-item {\n  position: relative;\n  display: block;\n  padding: 0.5rem 1rem;\n  color: #212529;\n  text-decoration: none;\n  background-color: #fff;\n  border: 1px solid rgba(0, 0, 0, 0.125);\n}\n\n.list-group-item:first-child {\n  border-top-left-radius: inherit;\n  border-top-right-radius: inherit;\n}\n\n.list-group-item:last-child {\n  border-bottom-right-radius: inherit;\n  border-bottom-left-radius: inherit;\n}\n\n.list-group-item.disabled, .list-group-item:disabled {\n  color: #868e96;\n  pointer-events: none;\n  background-color: #fff;\n}\n\n.list-group-item.active {\n  z-index: 2;\n  color: #fff;\n  background-color: #e95420;\n  border-color: #e95420;\n}\n\n.list-group-item + .list-group-item {\n  border-top-width: 0;\n}\n\n.list-group-item + .list-group-item.active {\n  margin-top: -1px;\n  border-top-width: 1px;\n}\n\n.list-group-horizontal {\n  -ms-flex-direction: row;\n  flex-direction: row;\n}\n\n.list-group-horizontal > .list-group-item:first-child {\n  border-bottom-left-radius: 0.25rem;\n  border-top-right-radius: 0;\n}\n\n.list-group-horizontal > .list-group-item:last-child {\n  border-top-right-radius: 0.25rem;\n  border-bottom-left-radius: 0;\n}\n\n.list-group-horizontal > .list-group-item.active {\n  margin-top: 0;\n}\n\n.list-group-horizontal > .list-group-item + .list-group-item {\n  border-top-width: 1px;\n  border-left-width: 0;\n}\n\n.list-group-horizontal > .list-group-item + .list-group-item.active {\n  margin-left: -1px;\n  border-left-width: 1px;\n}\n\n@media (min-width: 576px) {\n  .list-group-horizontal-sm {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .list-group-horizontal-sm > .list-group-item:first-child {\n    border-bottom-left-radius: 0.25rem;\n    border-top-right-radius: 0;\n  }\n  .list-group-horizontal-sm > .list-group-item:last-child {\n    border-top-right-radius: 0.25rem;\n    border-bottom-left-radius: 0;\n  }\n  .list-group-horizontal-sm > .list-group-item.active {\n    margin-top: 0;\n  }\n  .list-group-horizontal-sm > .list-group-item + .list-group-item {\n    border-top-width: 1px;\n    border-left-width: 0;\n  }\n  .list-group-horizontal-sm > .list-group-item + .list-group-item.active {\n    margin-left: -1px;\n    border-left-width: 1px;\n  }\n}\n\n@media (min-width: 768px) {\n  .list-group-horizontal-md {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .list-group-horizontal-md > .list-group-item:first-child {\n    border-bottom-left-radius: 0.25rem;\n    border-top-right-radius: 0;\n  }\n  .list-group-horizontal-md > .list-group-item:last-child {\n    border-top-right-radius: 0.25rem;\n    border-bottom-left-radius: 0;\n  }\n  .list-group-horizontal-md > .list-group-item.active {\n    margin-top: 0;\n  }\n  .list-group-horizontal-md > .list-group-item + .list-group-item {\n    border-top-width: 1px;\n    border-left-width: 0;\n  }\n  .list-group-horizontal-md > .list-group-item + .list-group-item.active {\n    margin-left: -1px;\n    border-left-width: 1px;\n  }\n}\n\n@media (min-width: 992px) {\n  .list-group-horizontal-lg {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .list-group-horizontal-lg > .list-group-item:first-child {\n    border-bottom-left-radius: 0.25rem;\n    border-top-right-radius: 0;\n  }\n  .list-group-horizontal-lg > .list-group-item:last-child {\n    border-top-right-radius: 0.25rem;\n    border-bottom-left-radius: 0;\n  }\n  .list-group-horizontal-lg > .list-group-item.active {\n    margin-top: 0;\n  }\n  .list-group-horizontal-lg > .list-group-item + .list-group-item {\n    border-top-width: 1px;\n    border-left-width: 0;\n  }\n  .list-group-horizontal-lg > .list-group-item + .list-group-item.active {\n    margin-left: -1px;\n    border-left-width: 1px;\n  }\n}\n\n@media (min-width: 1200px) {\n  .list-group-horizontal-xl {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .list-group-horizontal-xl > .list-group-item:first-child {\n    border-bottom-left-radius: 0.25rem;\n    border-top-right-radius: 0;\n  }\n  .list-group-horizontal-xl > .list-group-item:last-child {\n    border-top-right-radius: 0.25rem;\n    border-bottom-left-radius: 0;\n  }\n  .list-group-horizontal-xl > .list-group-item.active {\n    margin-top: 0;\n  }\n  .list-group-horizontal-xl > .list-group-item + .list-group-item {\n    border-top-width: 1px;\n    border-left-width: 0;\n  }\n  .list-group-horizontal-xl > .list-group-item + .list-group-item.active {\n    margin-left: -1px;\n    border-left-width: 1px;\n  }\n}\n\n@media (min-width: 1400px) {\n  .list-group-horizontal-xxl {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .list-group-horizontal-xxl > .list-group-item:first-child {\n    border-bottom-left-radius: 0.25rem;\n    border-top-right-radius: 0;\n  }\n  .list-group-horizontal-xxl > .list-group-item:last-child {\n    border-top-right-radius: 0.25rem;\n    border-bottom-left-radius: 0;\n  }\n  .list-group-horizontal-xxl > .list-group-item.active {\n    margin-top: 0;\n  }\n  .list-group-horizontal-xxl > .list-group-item + .list-group-item {\n    border-top-width: 1px;\n    border-left-width: 0;\n  }\n  .list-group-horizontal-xxl > .list-group-item + .list-group-item.active {\n    margin-left: -1px;\n    border-left-width: 1px;\n  }\n}\n\n.list-group-flush {\n  border-radius: 0;\n}\n\n.list-group-flush > .list-group-item {\n  border-width: 0 0 1px;\n}\n\n.list-group-flush > .list-group-item:last-child {\n  border-bottom-width: 0;\n}\n\n.list-group-item-primary {\n  color: #8c3213;\n  background-color: #fbddd2;\n}\n\n.list-group-item-primary.list-group-item-action:hover, .list-group-item-primary.list-group-item-action:focus {\n  color: #8c3213;\n  background-color: #e2c7bd;\n}\n\n.list-group-item-primary.list-group-item-action.active {\n  color: #fff;\n  background-color: #8c3213;\n  border-color: #8c3213;\n}\n\n.list-group-item-secondary {\n  color: #68645f;\n  background-color: #efedec;\n}\n\n.list-group-item-secondary.list-group-item-action:hover, .list-group-item-secondary.list-group-item-action:focus {\n  color: #68645f;\n  background-color: #d7d5d4;\n}\n\n.list-group-item-secondary.list-group-item-action.active {\n  color: #fff;\n  background-color: #68645f;\n  border-color: #68645f;\n}\n\n.list-group-item-success {\n  color: #226c2c;\n  background-color: #d7f0db;\n}\n\n.list-group-item-success.list-group-item-action:hover, .list-group-item-success.list-group-item-action:focus {\n  color: #226c2c;\n  background-color: #c2d8c5;\n}\n\n.list-group-item-success.list-group-item-action.active {\n  color: #fff;\n  background-color: #226c2c;\n  border-color: #226c2c;\n}\n\n.list-group-item-info {\n  color: #0e616e;\n  background-color: #d1ecf1;\n}\n\n.list-group-item-info.list-group-item-action:hover, .list-group-item-info.list-group-item-action:focus {\n  color: #0e616e;\n  background-color: #bcd4d9;\n}\n\n.list-group-item-info.list-group-item-action.active {\n  color: #fff;\n  background-color: #0e616e;\n  border-color: #0e616e;\n}\n\n.list-group-item-warning {\n  color: #8f6e25;\n  background-color: #fcf1d8;\n}\n\n.list-group-item-warning.list-group-item-action:hover, .list-group-item-warning.list-group-item-action:focus {\n  color: #8f6e25;\n  background-color: #e3d9c2;\n}\n\n.list-group-item-warning.list-group-item-action.active {\n  color: #fff;\n  background-color: #8f6e25;\n  border-color: #8f6e25;\n}\n\n.list-group-item-danger {\n  color: #86221a;\n  background-color: #f9d7d5;\n}\n\n.list-group-item-danger.list-group-item-action:hover, .list-group-item-danger.list-group-item-action:focus {\n  color: #86221a;\n  background-color: #e0c2c0;\n}\n\n.list-group-item-danger.list-group-item-action.active {\n  color: #fff;\n  background-color: #86221a;\n  border-color: #86221a;\n}\n\n.list-group-item-light {\n  color: #8c8e8f;\n  background-color: #fbfbfc;\n}\n\n.list-group-item-light.list-group-item-action:hover, .list-group-item-light.list-group-item-action:focus {\n  color: #8c8e8f;\n  background-color: #e2e2e3;\n}\n\n.list-group-item-light.list-group-item-action.active {\n  color: #fff;\n  background-color: #8c8e8f;\n  border-color: #8c8e8f;\n}\n\n.list-group-item-dark {\n  color: #471932;\n  background-color: #e4d4dd;\n}\n\n.list-group-item-dark.list-group-item-action:hover, .list-group-item-dark.list-group-item-action:focus {\n  color: #471932;\n  background-color: #cdbfc7;\n}\n\n.list-group-item-dark.list-group-item-action.active {\n  color: #fff;\n  background-color: #471932;\n  border-color: #471932;\n}\n\n.btn-close {\n  box-sizing: content-box;\n  width: 1em;\n  height: 1em;\n  padding: 0.25em 0.25em;\n  color: #000;\n  background: transparent url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23000'%3e%3cpath d='M.293.293a1 1 0 011.414 0L8 6.586 14.293.293a1 1 0 111.414 1.414L9.414 8l6.293 6.293a1 1 0 01-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 01-1.414-1.414L6.586 8 .293 1.707a1 1 0 010-1.414z'/%3e%3c/svg%3e\") center/1em auto no-repeat;\n  border: 0;\n  border-radius: 0.25rem;\n  opacity: 0.5;\n}\n\n.btn-close:hover {\n  color: #000;\n  text-decoration: none;\n  opacity: 0.75;\n}\n\n.btn-close:focus {\n  outline: 0;\n  box-shadow: 0 0 0 0.25rem rgba(233, 84, 32, 0.25);\n  opacity: 1;\n}\n\n.btn-close:disabled, .btn-close.disabled {\n  pointer-events: none;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  user-select: none;\n  opacity: 0.25;\n}\n\n.btn-close-white {\n  -webkit-filter: invert(1) grayscale(100%) brightness(200%);\n  filter: invert(1) grayscale(100%) brightness(200%);\n}\n\n.toast {\n  width: 350px;\n  max-width: 100%;\n  font-size: 0.875rem;\n  pointer-events: auto;\n  background-color: rgba(255, 255, 255, 0.85);\n  background-clip: padding-box;\n  border: 1px solid rgba(0, 0, 0, 0.1);\n  box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15);\n  border-radius: 0.25rem;\n}\n\n.toast.showing {\n  opacity: 0;\n}\n\n.toast:not(.show) {\n  display: none;\n}\n\n.toast-container {\n  width: -webkit-max-content;\n  width: -moz-max-content;\n  width: max-content;\n  max-width: 100%;\n  pointer-events: none;\n}\n\n.toast-container > :not(:last-child) {\n  margin-bottom: 0.75rem;\n}\n\n.toast-header {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-align: center;\n  align-items: center;\n  padding: 0.5rem 0.75rem;\n  color: #868e96;\n  background-color: rgba(255, 255, 255, 0.85);\n  background-clip: padding-box;\n  border-bottom: 1px solid rgba(0, 0, 0, 0.05);\n  border-top-left-radius: calc(0.25rem - 1px);\n  border-top-right-radius: calc(0.25rem - 1px);\n}\n\n.toast-header .btn-close {\n  margin-right: -0.375rem;\n  margin-left: 0.75rem;\n}\n\n.toast-body {\n  padding: 0.75rem;\n  word-wrap: break-word;\n}\n\n.modal {\n  position: fixed;\n  top: 0;\n  left: 0;\n  z-index: 1055;\n  display: none;\n  width: 100%;\n  height: 100%;\n  overflow-x: hidden;\n  overflow-y: auto;\n  outline: 0;\n}\n\n.modal-dialog {\n  position: relative;\n  width: auto;\n  margin: 0.5rem;\n  pointer-events: none;\n}\n\n.modal.fade .modal-dialog {\n  transition: -webkit-transform 0.3s ease-out;\n  transition: transform 0.3s ease-out;\n  transition: transform 0.3s ease-out, -webkit-transform 0.3s ease-out;\n  -webkit-transform: translate(0, -50px);\n  transform: translate(0, -50px);\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .modal.fade .modal-dialog {\n    transition: none;\n  }\n}\n\n.modal.show .modal-dialog {\n  -webkit-transform: none;\n  transform: none;\n}\n\n.modal.modal-static .modal-dialog {\n  -webkit-transform: scale(1.02);\n  transform: scale(1.02);\n}\n\n.modal-dialog-scrollable {\n  height: calc(100% - 1rem);\n}\n\n.modal-dialog-scrollable .modal-content {\n  max-height: 100%;\n  overflow: hidden;\n}\n\n.modal-dialog-scrollable .modal-body {\n  overflow-y: auto;\n}\n\n.modal-dialog-centered {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-align: center;\n  align-items: center;\n  min-height: calc(100% - 1rem);\n}\n\n.modal-content {\n  position: relative;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  width: 100%;\n  pointer-events: auto;\n  background-color: #fff;\n  background-clip: padding-box;\n  border: 1px solid rgba(0, 0, 0, 0.2);\n  border-radius: 0.3rem;\n  outline: 0;\n}\n\n.modal-backdrop {\n  position: fixed;\n  top: 0;\n  left: 0;\n  z-index: 1050;\n  width: 100vw;\n  height: 100vh;\n  background-color: #000;\n}\n\n.modal-backdrop.fade {\n  opacity: 0;\n}\n\n.modal-backdrop.show {\n  opacity: 0.5;\n}\n\n.modal-header {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-negative: 0;\n  flex-shrink: 0;\n  -ms-flex-align: center;\n  align-items: center;\n  -ms-flex-pack: justify;\n  justify-content: space-between;\n  padding: 1rem 1rem;\n  border-bottom: 1px solid #dee2e6;\n  border-top-left-radius: calc(0.3rem - 1px);\n  border-top-right-radius: calc(0.3rem - 1px);\n}\n\n.modal-header .btn-close {\n  padding: 0.5rem 0.5rem;\n  margin: -0.5rem -0.5rem -0.5rem auto;\n}\n\n.modal-title {\n  margin-bottom: 0;\n  line-height: 1.5;\n}\n\n.modal-body {\n  position: relative;\n  -ms-flex: 1 1 auto;\n  flex: 1 1 auto;\n  padding: 1rem;\n}\n\n.modal-footer {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n  flex-wrap: wrap;\n  -ms-flex-negative: 0;\n  flex-shrink: 0;\n  -ms-flex-align: center;\n  align-items: center;\n  -ms-flex-pack: end;\n  justify-content: flex-end;\n  padding: 0.75rem;\n  border-top: 1px solid #dee2e6;\n  border-bottom-right-radius: calc(0.3rem - 1px);\n  border-bottom-left-radius: calc(0.3rem - 1px);\n}\n\n.modal-footer > * {\n  margin: 0.25rem;\n}\n\n@media (min-width: 576px) {\n  .modal-dialog {\n    max-width: 500px;\n    margin: 1.75rem auto;\n  }\n  .modal-dialog-scrollable {\n    height: calc(100% - 3.5rem);\n  }\n  .modal-dialog-centered {\n    min-height: calc(100% - 3.5rem);\n  }\n  .modal-sm {\n    max-width: 300px;\n  }\n}\n\n@media (min-width: 992px) {\n  .modal-lg,\n  .modal-xl {\n    max-width: 800px;\n  }\n}\n\n@media (min-width: 1200px) {\n  .modal-xl {\n    max-width: 1140px;\n  }\n}\n\n.modal-fullscreen {\n  width: 100vw;\n  max-width: none;\n  height: 100%;\n  margin: 0;\n}\n\n.modal-fullscreen .modal-content {\n  height: 100%;\n  border: 0;\n  border-radius: 0;\n}\n\n.modal-fullscreen .modal-header {\n  border-radius: 0;\n}\n\n.modal-fullscreen .modal-body {\n  overflow-y: auto;\n}\n\n.modal-fullscreen .modal-footer {\n  border-radius: 0;\n}\n\n@media (max-width: 575.98px) {\n  .modal-fullscreen-sm-down {\n    width: 100vw;\n    max-width: none;\n    height: 100%;\n    margin: 0;\n  }\n  .modal-fullscreen-sm-down .modal-content {\n    height: 100%;\n    border: 0;\n    border-radius: 0;\n  }\n  .modal-fullscreen-sm-down .modal-header {\n    border-radius: 0;\n  }\n  .modal-fullscreen-sm-down .modal-body {\n    overflow-y: auto;\n  }\n  .modal-fullscreen-sm-down .modal-footer {\n    border-radius: 0;\n  }\n}\n\n@media (max-width: 767.98px) {\n  .modal-fullscreen-md-down {\n    width: 100vw;\n    max-width: none;\n    height: 100%;\n    margin: 0;\n  }\n  .modal-fullscreen-md-down .modal-content {\n    height: 100%;\n    border: 0;\n    border-radius: 0;\n  }\n  .modal-fullscreen-md-down .modal-header {\n    border-radius: 0;\n  }\n  .modal-fullscreen-md-down .modal-body {\n    overflow-y: auto;\n  }\n  .modal-fullscreen-md-down .modal-footer {\n    border-radius: 0;\n  }\n}\n\n@media (max-width: 991.98px) {\n  .modal-fullscreen-lg-down {\n    width: 100vw;\n    max-width: none;\n    height: 100%;\n    margin: 0;\n  }\n  .modal-fullscreen-lg-down .modal-content {\n    height: 100%;\n    border: 0;\n    border-radius: 0;\n  }\n  .modal-fullscreen-lg-down .modal-header {\n    border-radius: 0;\n  }\n  .modal-fullscreen-lg-down .modal-body {\n    overflow-y: auto;\n  }\n  .modal-fullscreen-lg-down .modal-footer {\n    border-radius: 0;\n  }\n}\n\n@media (max-width: 1199.98px) {\n  .modal-fullscreen-xl-down {\n    width: 100vw;\n    max-width: none;\n    height: 100%;\n    margin: 0;\n  }\n  .modal-fullscreen-xl-down .modal-content {\n    height: 100%;\n    border: 0;\n    border-radius: 0;\n  }\n  .modal-fullscreen-xl-down .modal-header {\n    border-radius: 0;\n  }\n  .modal-fullscreen-xl-down .modal-body {\n    overflow-y: auto;\n  }\n  .modal-fullscreen-xl-down .modal-footer {\n    border-radius: 0;\n  }\n}\n\n@media (max-width: 1399.98px) {\n  .modal-fullscreen-xxl-down {\n    width: 100vw;\n    max-width: none;\n    height: 100%;\n    margin: 0;\n  }\n  .modal-fullscreen-xxl-down .modal-content {\n    height: 100%;\n    border: 0;\n    border-radius: 0;\n  }\n  .modal-fullscreen-xxl-down .modal-header {\n    border-radius: 0;\n  }\n  .modal-fullscreen-xxl-down .modal-body {\n    overflow-y: auto;\n  }\n  .modal-fullscreen-xxl-down .modal-footer {\n    border-radius: 0;\n  }\n}\n\n.tooltip {\n  position: absolute;\n  z-index: 1080;\n  display: block;\n  margin: 0;\n  font-family: var(--bs-font-sans-serif);\n  font-style: normal;\n  font-weight: 400;\n  line-height: 1.5;\n  text-align: left;\n  text-align: start;\n  text-decoration: none;\n  text-shadow: none;\n  text-transform: none;\n  letter-spacing: normal;\n  word-break: normal;\n  word-spacing: normal;\n  white-space: normal;\n  line-break: auto;\n  font-size: 0.875rem;\n  word-wrap: break-word;\n  opacity: 0;\n}\n\n.tooltip.show {\n  opacity: 0.9;\n}\n\n.tooltip .tooltip-arrow {\n  position: absolute;\n  display: block;\n  width: 0.8rem;\n  height: 0.4rem;\n}\n\n.tooltip .tooltip-arrow::before {\n  position: absolute;\n  content: \"\";\n  border-color: transparent;\n  border-style: solid;\n}\n\n.bs-tooltip-top, .bs-tooltip-auto[data-popper-placement^=\"top\"] {\n  padding: 0.4rem 0;\n}\n\n.bs-tooltip-top .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=\"top\"] .tooltip-arrow {\n  bottom: 0;\n}\n\n.bs-tooltip-top .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=\"top\"] .tooltip-arrow::before {\n  top: -1px;\n  border-width: 0.4rem 0.4rem 0;\n  border-top-color: #000;\n}\n\n.bs-tooltip-end, .bs-tooltip-auto[data-popper-placement^=\"right\"] {\n  padding: 0 0.4rem;\n}\n\n.bs-tooltip-end .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=\"right\"] .tooltip-arrow {\n  left: 0;\n  width: 0.4rem;\n  height: 0.8rem;\n}\n\n.bs-tooltip-end .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=\"right\"] .tooltip-arrow::before {\n  right: -1px;\n  border-width: 0.4rem 0.4rem 0.4rem 0;\n  border-right-color: #000;\n}\n\n.bs-tooltip-bottom, .bs-tooltip-auto[data-popper-placement^=\"bottom\"] {\n  padding: 0.4rem 0;\n}\n\n.bs-tooltip-bottom .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=\"bottom\"] .tooltip-arrow {\n  top: 0;\n}\n\n.bs-tooltip-bottom .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=\"bottom\"] .tooltip-arrow::before {\n  bottom: -1px;\n  border-width: 0 0.4rem 0.4rem;\n  border-bottom-color: #000;\n}\n\n.bs-tooltip-start, .bs-tooltip-auto[data-popper-placement^=\"left\"] {\n  padding: 0 0.4rem;\n}\n\n.bs-tooltip-start .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=\"left\"] .tooltip-arrow {\n  right: 0;\n  width: 0.4rem;\n  height: 0.8rem;\n}\n\n.bs-tooltip-start .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=\"left\"] .tooltip-arrow::before {\n  left: -1px;\n  border-width: 0.4rem 0 0.4rem 0.4rem;\n  border-left-color: #000;\n}\n\n.tooltip-inner {\n  max-width: 200px;\n  padding: 0.25rem 0.5rem;\n  color: #fff;\n  text-align: center;\n  background-color: #000;\n  border-radius: 0.25rem;\n}\n\n.popover {\n  position: absolute;\n  top: 0;\n  left: 0 /* rtl:ignore */;\n  z-index: 1070;\n  display: block;\n  max-width: 276px;\n  font-family: var(--bs-font-sans-serif);\n  font-style: normal;\n  font-weight: 400;\n  line-height: 1.5;\n  text-align: left;\n  text-align: start;\n  text-decoration: none;\n  text-shadow: none;\n  text-transform: none;\n  letter-spacing: normal;\n  word-break: normal;\n  word-spacing: normal;\n  white-space: normal;\n  line-break: auto;\n  font-size: 0.875rem;\n  word-wrap: break-word;\n  background-color: #fff;\n  background-clip: padding-box;\n  border: 1px solid rgba(0, 0, 0, 0.2);\n  border-radius: 0.3rem;\n}\n\n.popover .popover-arrow {\n  position: absolute;\n  display: block;\n  width: 1rem;\n  height: 0.5rem;\n}\n\n.popover .popover-arrow::before, .popover .popover-arrow::after {\n  position: absolute;\n  display: block;\n  content: \"\";\n  border-color: transparent;\n  border-style: solid;\n}\n\n.bs-popover-top > .popover-arrow, .bs-popover-auto[data-popper-placement^=\"top\"] > .popover-arrow {\n  bottom: calc(-0.5rem - 1px);\n}\n\n.bs-popover-top > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=\"top\"] > .popover-arrow::before {\n  bottom: 0;\n  border-width: 0.5rem 0.5rem 0;\n  border-top-color: rgba(0, 0, 0, 0.25);\n}\n\n.bs-popover-top > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=\"top\"] > .popover-arrow::after {\n  bottom: 1px;\n  border-width: 0.5rem 0.5rem 0;\n  border-top-color: #fff;\n}\n\n.bs-popover-end > .popover-arrow, .bs-popover-auto[data-popper-placement^=\"right\"] > .popover-arrow {\n  left: calc(-0.5rem - 1px);\n  width: 0.5rem;\n  height: 1rem;\n}\n\n.bs-popover-end > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=\"right\"] > .popover-arrow::before {\n  left: 0;\n  border-width: 0.5rem 0.5rem 0.5rem 0;\n  border-right-color: rgba(0, 0, 0, 0.25);\n}\n\n.bs-popover-end > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=\"right\"] > .popover-arrow::after {\n  left: 1px;\n  border-width: 0.5rem 0.5rem 0.5rem 0;\n  border-right-color: #fff;\n}\n\n.bs-popover-bottom > .popover-arrow, .bs-popover-auto[data-popper-placement^=\"bottom\"] > .popover-arrow {\n  top: calc(-0.5rem - 1px);\n}\n\n.bs-popover-bottom > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=\"bottom\"] > .popover-arrow::before {\n  top: 0;\n  border-width: 0 0.5rem 0.5rem 0.5rem;\n  border-bottom-color: rgba(0, 0, 0, 0.25);\n}\n\n.bs-popover-bottom > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=\"bottom\"] > .popover-arrow::after {\n  top: 1px;\n  border-width: 0 0.5rem 0.5rem 0.5rem;\n  border-bottom-color: #fff;\n}\n\n.bs-popover-bottom .popover-header::before, .bs-popover-auto[data-popper-placement^=\"bottom\"] .popover-header::before {\n  position: absolute;\n  top: 0;\n  left: 50%;\n  display: block;\n  width: 1rem;\n  margin-left: -0.5rem;\n  content: \"\";\n  border-bottom: 1px solid #f0f0f0;\n}\n\n.bs-popover-start > .popover-arrow, .bs-popover-auto[data-popper-placement^=\"left\"] > .popover-arrow {\n  right: calc(-0.5rem - 1px);\n  width: 0.5rem;\n  height: 1rem;\n}\n\n.bs-popover-start > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=\"left\"] > .popover-arrow::before {\n  right: 0;\n  border-width: 0.5rem 0 0.5rem 0.5rem;\n  border-left-color: rgba(0, 0, 0, 0.25);\n}\n\n.bs-popover-start > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=\"left\"] > .popover-arrow::after {\n  right: 1px;\n  border-width: 0.5rem 0 0.5rem 0.5rem;\n  border-left-color: #fff;\n}\n\n.popover-header {\n  padding: 0.5rem 1rem;\n  margin-bottom: 0;\n  font-size: 1rem;\n  background-color: #f0f0f0;\n  border-bottom: 1px solid rgba(0, 0, 0, 0.2);\n  border-top-left-radius: calc(0.3rem - 1px);\n  border-top-right-radius: calc(0.3rem - 1px);\n}\n\n.popover-header:empty {\n  display: none;\n}\n\n.popover-body {\n  padding: 1rem 1rem;\n  color: #333;\n}\n\n.carousel {\n  position: relative;\n}\n\n.carousel.pointer-event {\n  -ms-touch-action: pan-y;\n  touch-action: pan-y;\n}\n\n.carousel-inner {\n  position: relative;\n  width: 100%;\n  overflow: hidden;\n}\n\n.carousel-inner::after {\n  display: block;\n  clear: both;\n  content: \"\";\n}\n\n.carousel-item {\n  position: relative;\n  display: none;\n  float: left;\n  width: 100%;\n  margin-right: -100%;\n  -webkit-backface-visibility: hidden;\n  backface-visibility: hidden;\n  transition: -webkit-transform 0.6s ease-in-out;\n  transition: transform 0.6s ease-in-out;\n  transition: transform 0.6s ease-in-out, -webkit-transform 0.6s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .carousel-item {\n    transition: none;\n  }\n}\n\n.carousel-item.active,\n.carousel-item-next,\n.carousel-item-prev {\n  display: block;\n}\n\n/* rtl:begin:ignore */\n.carousel-item-next:not(.carousel-item-start),\n.active.carousel-item-end {\n  -webkit-transform: translateX(100%);\n  transform: translateX(100%);\n}\n\n.carousel-item-prev:not(.carousel-item-end),\n.active.carousel-item-start {\n  -webkit-transform: translateX(-100%);\n  transform: translateX(-100%);\n}\n\n/* rtl:end:ignore */\n.carousel-fade .carousel-item {\n  opacity: 0;\n  transition-property: opacity;\n  -webkit-transform: none;\n  transform: none;\n}\n\n.carousel-fade .carousel-item.active,\n.carousel-fade .carousel-item-next.carousel-item-start,\n.carousel-fade .carousel-item-prev.carousel-item-end {\n  z-index: 1;\n  opacity: 1;\n}\n\n.carousel-fade .active.carousel-item-start,\n.carousel-fade .active.carousel-item-end {\n  z-index: 0;\n  opacity: 0;\n  transition: opacity 0s 0.6s;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .carousel-fade .active.carousel-item-start,\n  .carousel-fade .active.carousel-item-end {\n    transition: none;\n  }\n}\n\n.carousel-control-prev,\n.carousel-control-next {\n  position: absolute;\n  top: 0;\n  bottom: 0;\n  z-index: 1;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-align: center;\n  align-items: center;\n  -ms-flex-pack: center;\n  justify-content: center;\n  width: 15%;\n  padding: 0;\n  color: #fff;\n  text-align: center;\n  background: none;\n  border: 0;\n  opacity: 0.5;\n  transition: opacity 0.15s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .carousel-control-prev,\n  .carousel-control-next {\n    transition: none;\n  }\n}\n\n.carousel-control-prev:hover, .carousel-control-prev:focus,\n.carousel-control-next:hover,\n.carousel-control-next:focus {\n  color: #fff;\n  text-decoration: none;\n  outline: 0;\n  opacity: 0.9;\n}\n\n.carousel-control-prev {\n  left: 0;\n}\n\n.carousel-control-next {\n  right: 0;\n}\n\n.carousel-control-prev-icon,\n.carousel-control-next-icon {\n  display: inline-block;\n  width: 2rem;\n  height: 2rem;\n  background-repeat: no-repeat;\n  background-position: 50%;\n  background-size: 100% 100%;\n}\n\n/* rtl:options: {\n  \"autoRename\": true,\n  \"stringMap\":[ {\n    \"name\"    : \"prev-next\",\n    \"search\"  : \"prev\",\n    \"replace\" : \"next\"\n  } ]\n} */\n.carousel-control-prev-icon {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0z'/%3e%3c/svg%3e\");\n}\n\n.carousel-control-next-icon {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e\");\n}\n\n.carousel-indicators {\n  position: absolute;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 2;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-pack: center;\n  justify-content: center;\n  padding: 0;\n  margin-right: 15%;\n  margin-bottom: 1rem;\n  margin-left: 15%;\n  list-style: none;\n}\n\n.carousel-indicators [data-bs-target] {\n  box-sizing: content-box;\n  -ms-flex: 0 1 auto;\n  flex: 0 1 auto;\n  width: 30px;\n  height: 3px;\n  padding: 0;\n  margin-right: 3px;\n  margin-left: 3px;\n  text-indent: -999px;\n  cursor: pointer;\n  background-color: #fff;\n  background-clip: padding-box;\n  border: 0;\n  border-top: 10px solid transparent;\n  border-bottom: 10px solid transparent;\n  opacity: 0.5;\n  transition: opacity 0.6s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .carousel-indicators [data-bs-target] {\n    transition: none;\n  }\n}\n\n.carousel-indicators .active {\n  opacity: 1;\n}\n\n.carousel-caption {\n  position: absolute;\n  right: 15%;\n  bottom: 1.25rem;\n  left: 15%;\n  padding-top: 1.25rem;\n  padding-bottom: 1.25rem;\n  color: #fff;\n  text-align: center;\n}\n\n.carousel-dark .carousel-control-prev-icon,\n.carousel-dark .carousel-control-next-icon {\n  -webkit-filter: invert(1) grayscale(100);\n  filter: invert(1) grayscale(100);\n}\n\n.carousel-dark .carousel-indicators [data-bs-target] {\n  background-color: #000;\n}\n\n.carousel-dark .carousel-caption {\n  color: #000;\n}\n\n@-webkit-keyframes spinner-border {\n  to {\n    -webkit-transform: rotate(360deg) /* rtl:ignore */;\n    transform: rotate(360deg) /* rtl:ignore */;\n  }\n}\n\n@keyframes spinner-border {\n  to {\n    -webkit-transform: rotate(360deg) /* rtl:ignore */;\n    transform: rotate(360deg) /* rtl:ignore */;\n  }\n}\n\n.spinner-border {\n  display: inline-block;\n  width: 2rem;\n  height: 2rem;\n  vertical-align: -0.125em;\n  border: 0.25em solid currentColor;\n  border-right-color: transparent;\n  border-radius: 50%;\n  -webkit-animation: 0.75s linear infinite spinner-border;\n  animation: 0.75s linear infinite spinner-border;\n}\n\n.spinner-border-sm {\n  width: 1rem;\n  height: 1rem;\n  border-width: 0.2em;\n}\n\n@-webkit-keyframes spinner-grow {\n  0% {\n    -webkit-transform: scale(0);\n    transform: scale(0);\n  }\n  50% {\n    opacity: 1;\n    -webkit-transform: none;\n    transform: none;\n  }\n}\n\n@keyframes spinner-grow {\n  0% {\n    -webkit-transform: scale(0);\n    transform: scale(0);\n  }\n  50% {\n    opacity: 1;\n    -webkit-transform: none;\n    transform: none;\n  }\n}\n\n.spinner-grow {\n  display: inline-block;\n  width: 2rem;\n  height: 2rem;\n  vertical-align: -0.125em;\n  background-color: currentColor;\n  border-radius: 50%;\n  opacity: 0;\n  -webkit-animation: 0.75s linear infinite spinner-grow;\n  animation: 0.75s linear infinite spinner-grow;\n}\n\n.spinner-grow-sm {\n  width: 1rem;\n  height: 1rem;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .spinner-border,\n  .spinner-grow {\n    -webkit-animation-duration: 1.5s;\n    animation-duration: 1.5s;\n  }\n}\n\n.offcanvas {\n  position: fixed;\n  bottom: 0;\n  z-index: 1045;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  max-width: 100%;\n  visibility: hidden;\n  background-color: #fff;\n  background-clip: padding-box;\n  outline: 0;\n  transition: -webkit-transform 0.3s ease-in-out;\n  transition: transform 0.3s ease-in-out;\n  transition: transform 0.3s ease-in-out, -webkit-transform 0.3s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .offcanvas {\n    transition: none;\n  }\n}\n\n.offcanvas-backdrop {\n  position: fixed;\n  top: 0;\n  left: 0;\n  z-index: 1040;\n  width: 100vw;\n  height: 100vh;\n  background-color: #000;\n}\n\n.offcanvas-backdrop.fade {\n  opacity: 0;\n}\n\n.offcanvas-backdrop.show {\n  opacity: 0.5;\n}\n\n.offcanvas-header {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-align: center;\n  align-items: center;\n  -ms-flex-pack: justify;\n  justify-content: space-between;\n  padding: 1rem 1rem;\n}\n\n.offcanvas-header .btn-close {\n  padding: 0.5rem 0.5rem;\n  margin-top: -0.5rem;\n  margin-right: -0.5rem;\n  margin-bottom: -0.5rem;\n}\n\n.offcanvas-title {\n  margin-bottom: 0;\n  line-height: 1.5;\n}\n\n.offcanvas-body {\n  -ms-flex-positive: 1;\n  flex-grow: 1;\n  padding: 1rem 1rem;\n  overflow-y: auto;\n}\n\n.offcanvas-start {\n  top: 0;\n  left: 0;\n  width: 400px;\n  border-right: 1px solid rgba(0, 0, 0, 0.2);\n  -webkit-transform: translateX(-100%);\n  transform: translateX(-100%);\n}\n\n.offcanvas-end {\n  top: 0;\n  right: 0;\n  width: 400px;\n  border-left: 1px solid rgba(0, 0, 0, 0.2);\n  -webkit-transform: translateX(100%);\n  transform: translateX(100%);\n}\n\n.offcanvas-top {\n  top: 0;\n  right: 0;\n  left: 0;\n  height: 30vh;\n  max-height: 100%;\n  border-bottom: 1px solid rgba(0, 0, 0, 0.2);\n  -webkit-transform: translateY(-100%);\n  transform: translateY(-100%);\n}\n\n.offcanvas-bottom {\n  right: 0;\n  left: 0;\n  height: 30vh;\n  max-height: 100%;\n  border-top: 1px solid rgba(0, 0, 0, 0.2);\n  -webkit-transform: translateY(100%);\n  transform: translateY(100%);\n}\n\n.offcanvas.show {\n  -webkit-transform: none;\n  transform: none;\n}\n\n.placeholder {\n  display: inline-block;\n  min-height: 1em;\n  vertical-align: middle;\n  cursor: wait;\n  background-color: currentColor;\n  opacity: 0.5;\n}\n\n.placeholder.btn::before {\n  display: inline-block;\n  content: \"\";\n}\n\n.placeholder-xs {\n  min-height: .6em;\n}\n\n.placeholder-sm {\n  min-height: .8em;\n}\n\n.placeholder-lg {\n  min-height: 1.2em;\n}\n\n.placeholder-glow .placeholder {\n  -webkit-animation: placeholder-glow 2s ease-in-out infinite;\n  animation: placeholder-glow 2s ease-in-out infinite;\n}\n\n@-webkit-keyframes placeholder-glow {\n  50% {\n    opacity: 0.2;\n  }\n}\n\n@keyframes placeholder-glow {\n  50% {\n    opacity: 0.2;\n  }\n}\n\n.placeholder-wave {\n  -webkit-mask-image: linear-gradient(130deg, #000 55%, rgba(0, 0, 0, 0.8) 75%, #000 95%);\n  mask-image: linear-gradient(130deg, #000 55%, rgba(0, 0, 0, 0.8) 75%, #000 95%);\n  -webkit-mask-size: 200% 100%;\n  mask-size: 200% 100%;\n  -webkit-animation: placeholder-wave 2s linear infinite;\n  animation: placeholder-wave 2s linear infinite;\n}\n\n@-webkit-keyframes placeholder-wave {\n  100% {\n    -webkit-mask-position: -200% 0%;\n    mask-position: -200% 0%;\n  }\n}\n\n@keyframes placeholder-wave {\n  100% {\n    -webkit-mask-position: -200% 0%;\n    mask-position: -200% 0%;\n  }\n}\n\n.clearfix::after {\n  display: block;\n  clear: both;\n  content: \"\";\n}\n\n.link-primary {\n  color: #e95420;\n}\n\n.link-primary:hover, .link-primary:focus {\n  color: #ba431a;\n}\n\n.link-secondary {\n  color: #aea79f;\n}\n\n.link-secondary:hover, .link-secondary:focus {\n  color: #8b867f;\n}\n\n.link-success {\n  color: #38b44a;\n}\n\n.link-success:hover, .link-success:focus {\n  color: #2d903b;\n}\n\n.link-info {\n  color: #17a2b8;\n}\n\n.link-info:hover, .link-info:focus {\n  color: #128293;\n}\n\n.link-warning {\n  color: #efb73e;\n}\n\n.link-warning:hover, .link-warning:focus {\n  color: #bf9232;\n}\n\n.link-danger {\n  color: #df382c;\n}\n\n.link-danger:hover, .link-danger:focus {\n  color: #b22d23;\n}\n\n.link-light {\n  color: #e9ecef;\n}\n\n.link-light:hover, .link-light:focus {\n  color: #edf0f2;\n}\n\n.link-dark {\n  color: #772953;\n}\n\n.link-dark:hover, .link-dark:focus {\n  color: #5f2142;\n}\n\n.ratio {\n  position: relative;\n  width: 100%;\n}\n\n.ratio::before {\n  display: block;\n  padding-top: var(--bs-aspect-ratio);\n  content: \"\";\n}\n\n.ratio > * {\n  position: absolute;\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n}\n\n.ratio-1x1 {\n  --bs-aspect-ratio: 100%;\n}\n\n.ratio-4x3 {\n  --bs-aspect-ratio: calc(3 / 4 * 100%);\n}\n\n.ratio-16x9 {\n  --bs-aspect-ratio: calc(9 / 16 * 100%);\n}\n\n.ratio-21x9 {\n  --bs-aspect-ratio: calc(9 / 21 * 100%);\n}\n\n.fixed-top {\n  position: fixed;\n  top: 0;\n  right: 0;\n  left: 0;\n  z-index: 1030;\n}\n\n.fixed-bottom {\n  position: fixed;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 1030;\n}\n\n.sticky-top {\n  position: -webkit-sticky;\n  position: sticky;\n  top: 0;\n  z-index: 1020;\n}\n\n@media (min-width: 576px) {\n  .sticky-sm-top {\n    position: -webkit-sticky;\n    position: sticky;\n    top: 0;\n    z-index: 1020;\n  }\n}\n\n@media (min-width: 768px) {\n  .sticky-md-top {\n    position: -webkit-sticky;\n    position: sticky;\n    top: 0;\n    z-index: 1020;\n  }\n}\n\n@media (min-width: 992px) {\n  .sticky-lg-top {\n    position: -webkit-sticky;\n    position: sticky;\n    top: 0;\n    z-index: 1020;\n  }\n}\n\n@media (min-width: 1200px) {\n  .sticky-xl-top {\n    position: -webkit-sticky;\n    position: sticky;\n    top: 0;\n    z-index: 1020;\n  }\n}\n\n@media (min-width: 1400px) {\n  .sticky-xxl-top {\n    position: -webkit-sticky;\n    position: sticky;\n    top: 0;\n    z-index: 1020;\n  }\n}\n\n.hstack {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-direction: row;\n  flex-direction: row;\n  -ms-flex-align: center;\n  align-items: center;\n  -ms-flex-item-align: stretch;\n  align-self: stretch;\n}\n\n.vstack {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex: 1 1 auto;\n  flex: 1 1 auto;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  -ms-flex-item-align: stretch;\n  align-self: stretch;\n}\n\n.visually-hidden,\n.visually-hidden-focusable:not(:focus):not(:focus-within) {\n  position: absolute !important;\n  width: 1px !important;\n  height: 1px !important;\n  padding: 0 !important;\n  margin: -1px !important;\n  overflow: hidden !important;\n  clip: rect(0, 0, 0, 0) !important;\n  white-space: nowrap !important;\n  border: 0 !important;\n}\n\n.stretched-link::after {\n  position: absolute;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 1;\n  content: \"\";\n}\n\n.text-truncate {\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n}\n\n.vr {\n  display: inline-block;\n  -ms-flex-item-align: stretch;\n  align-self: stretch;\n  width: 1px;\n  min-height: 1em;\n  background-color: currentColor;\n  opacity: 0.25;\n}\n\n.align-baseline {\n  vertical-align: baseline !important;\n}\n\n.align-top {\n  vertical-align: top !important;\n}\n\n.align-middle {\n  vertical-align: middle !important;\n}\n\n.align-bottom {\n  vertical-align: bottom !important;\n}\n\n.align-text-bottom {\n  vertical-align: text-bottom !important;\n}\n\n.align-text-top {\n  vertical-align: text-top !important;\n}\n\n.float-start {\n  float: left !important;\n}\n\n.float-end {\n  float: right !important;\n}\n\n.float-none {\n  float: none !important;\n}\n\n.opacity-0 {\n  opacity: 0 !important;\n}\n\n.opacity-25 {\n  opacity: 0.25 !important;\n}\n\n.opacity-50 {\n  opacity: 0.5 !important;\n}\n\n.opacity-75 {\n  opacity: 0.75 !important;\n}\n\n.opacity-100 {\n  opacity: 1 !important;\n}\n\n.overflow-auto {\n  overflow: auto !important;\n}\n\n.overflow-hidden {\n  overflow: hidden !important;\n}\n\n.overflow-visible {\n  overflow: visible !important;\n}\n\n.overflow-scroll {\n  overflow: scroll !important;\n}\n\n.d-inline {\n  display: inline !important;\n}\n\n.d-inline-block {\n  display: inline-block !important;\n}\n\n.d-block {\n  display: block !important;\n}\n\n.d-grid {\n  display: grid !important;\n}\n\n.d-table {\n  display: table !important;\n}\n\n.d-table-row {\n  display: table-row !important;\n}\n\n.d-table-cell {\n  display: table-cell !important;\n}\n\n.d-flex {\n  display: -ms-flexbox !important;\n  display: flex !important;\n}\n\n.d-inline-flex {\n  display: -ms-inline-flexbox !important;\n  display: inline-flex !important;\n}\n\n.d-none {\n  display: none !important;\n}\n\n.shadow {\n  box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15) !important;\n}\n\n.shadow-sm {\n  box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075) !important;\n}\n\n.shadow-lg {\n  box-shadow: 0 1rem 3rem rgba(0, 0, 0, 0.175) !important;\n}\n\n.shadow-none {\n  box-shadow: none !important;\n}\n\n.position-static {\n  position: static !important;\n}\n\n.position-relative {\n  position: relative !important;\n}\n\n.position-absolute {\n  position: absolute !important;\n}\n\n.position-fixed {\n  position: fixed !important;\n}\n\n.position-sticky {\n  position: -webkit-sticky !important;\n  position: sticky !important;\n}\n\n.top-0 {\n  top: 0 !important;\n}\n\n.top-50 {\n  top: 50% !important;\n}\n\n.top-100 {\n  top: 100% !important;\n}\n\n.bottom-0 {\n  bottom: 0 !important;\n}\n\n.bottom-50 {\n  bottom: 50% !important;\n}\n\n.bottom-100 {\n  bottom: 100% !important;\n}\n\n.start-0 {\n  left: 0 !important;\n}\n\n.start-50 {\n  left: 50% !important;\n}\n\n.start-100 {\n  left: 100% !important;\n}\n\n.end-0 {\n  right: 0 !important;\n}\n\n.end-50 {\n  right: 50% !important;\n}\n\n.end-100 {\n  right: 100% !important;\n}\n\n.translate-middle {\n  -webkit-transform: translate(-50%, -50%) !important;\n  transform: translate(-50%, -50%) !important;\n}\n\n.translate-middle-x {\n  -webkit-transform: translateX(-50%) !important;\n  transform: translateX(-50%) !important;\n}\n\n.translate-middle-y {\n  -webkit-transform: translateY(-50%) !important;\n  transform: translateY(-50%) !important;\n}\n\n.border {\n  border: 1px solid #dee2e6 !important;\n}\n\n.border-0 {\n  border: 0 !important;\n}\n\n.border-top {\n  border-top: 1px solid #dee2e6 !important;\n}\n\n.border-top-0 {\n  border-top: 0 !important;\n}\n\n.border-end {\n  border-right: 1px solid #dee2e6 !important;\n}\n\n.border-end-0 {\n  border-right: 0 !important;\n}\n\n.border-bottom {\n  border-bottom: 1px solid #dee2e6 !important;\n}\n\n.border-bottom-0 {\n  border-bottom: 0 !important;\n}\n\n.border-start {\n  border-left: 1px solid #dee2e6 !important;\n}\n\n.border-start-0 {\n  border-left: 0 !important;\n}\n\n.border-primary {\n  border-color: #e95420 !important;\n}\n\n.border-secondary {\n  border-color: #aea79f !important;\n}\n\n.border-success {\n  border-color: #38b44a !important;\n}\n\n.border-info {\n  border-color: #17a2b8 !important;\n}\n\n.border-warning {\n  border-color: #efb73e !important;\n}\n\n.border-danger {\n  border-color: #df382c !important;\n}\n\n.border-light {\n  border-color: #e9ecef !important;\n}\n\n.border-dark {\n  border-color: #772953 !important;\n}\n\n.border-white {\n  border-color: #fff !important;\n}\n\n.border-1 {\n  border-width: 1px !important;\n}\n\n.border-2 {\n  border-width: 2px !important;\n}\n\n.border-3 {\n  border-width: 3px !important;\n}\n\n.border-4 {\n  border-width: 4px !important;\n}\n\n.border-5 {\n  border-width: 5px !important;\n}\n\n.w-25 {\n  width: 25% !important;\n}\n\n.w-50 {\n  width: 50% !important;\n}\n\n.w-75 {\n  width: 75% !important;\n}\n\n.w-100 {\n  width: 100% !important;\n}\n\n.w-auto {\n  width: auto !important;\n}\n\n.mw-100 {\n  max-width: 100% !important;\n}\n\n.vw-100 {\n  width: 100vw !important;\n}\n\n.min-vw-100 {\n  min-width: 100vw !important;\n}\n\n.h-25 {\n  height: 25% !important;\n}\n\n.h-50 {\n  height: 50% !important;\n}\n\n.h-75 {\n  height: 75% !important;\n}\n\n.h-100 {\n  height: 100% !important;\n}\n\n.h-auto {\n  height: auto !important;\n}\n\n.mh-100 {\n  max-height: 100% !important;\n}\n\n.vh-100 {\n  height: 100vh !important;\n}\n\n.min-vh-100 {\n  min-height: 100vh !important;\n}\n\n.flex-fill {\n  -ms-flex: 1 1 auto !important;\n  flex: 1 1 auto !important;\n}\n\n.flex-row {\n  -ms-flex-direction: row !important;\n  flex-direction: row !important;\n}\n\n.flex-column {\n  -ms-flex-direction: column !important;\n  flex-direction: column !important;\n}\n\n.flex-row-reverse {\n  -ms-flex-direction: row-reverse !important;\n  flex-direction: row-reverse !important;\n}\n\n.flex-column-reverse {\n  -ms-flex-direction: column-reverse !important;\n  flex-direction: column-reverse !important;\n}\n\n.flex-grow-0 {\n  -ms-flex-positive: 0 !important;\n  flex-grow: 0 !important;\n}\n\n.flex-grow-1 {\n  -ms-flex-positive: 1 !important;\n  flex-grow: 1 !important;\n}\n\n.flex-shrink-0 {\n  -ms-flex-negative: 0 !important;\n  flex-shrink: 0 !important;\n}\n\n.flex-shrink-1 {\n  -ms-flex-negative: 1 !important;\n  flex-shrink: 1 !important;\n}\n\n.flex-wrap {\n  -ms-flex-wrap: wrap !important;\n  flex-wrap: wrap !important;\n}\n\n.flex-nowrap {\n  -ms-flex-wrap: nowrap !important;\n  flex-wrap: nowrap !important;\n}\n\n.flex-wrap-reverse {\n  -ms-flex-wrap: wrap-reverse !important;\n  flex-wrap: wrap-reverse !important;\n}\n\n.gap-0 {\n  gap: 0 !important;\n}\n\n.gap-1 {\n  gap: 0.25rem !important;\n}\n\n.gap-2 {\n  gap: 0.5rem !important;\n}\n\n.gap-3 {\n  gap: 1rem !important;\n}\n\n.gap-4 {\n  gap: 1.5rem !important;\n}\n\n.gap-5 {\n  gap: 3rem !important;\n}\n\n.justify-content-start {\n  -ms-flex-pack: start !important;\n  justify-content: flex-start !important;\n}\n\n.justify-content-end {\n  -ms-flex-pack: end !important;\n  justify-content: flex-end !important;\n}\n\n.justify-content-center {\n  -ms-flex-pack: center !important;\n  justify-content: center !important;\n}\n\n.justify-content-between {\n  -ms-flex-pack: justify !important;\n  justify-content: space-between !important;\n}\n\n.justify-content-around {\n  -ms-flex-pack: distribute !important;\n  justify-content: space-around !important;\n}\n\n.justify-content-evenly {\n  -ms-flex-pack: space-evenly !important;\n  justify-content: space-evenly !important;\n}\n\n.align-items-start {\n  -ms-flex-align: start !important;\n  align-items: flex-start !important;\n}\n\n.align-items-end {\n  -ms-flex-align: end !important;\n  align-items: flex-end !important;\n}\n\n.align-items-center {\n  -ms-flex-align: center !important;\n  align-items: center !important;\n}\n\n.align-items-baseline {\n  -ms-flex-align: baseline !important;\n  align-items: baseline !important;\n}\n\n.align-items-stretch {\n  -ms-flex-align: stretch !important;\n  align-items: stretch !important;\n}\n\n.align-content-start {\n  -ms-flex-line-pack: start !important;\n  align-content: flex-start !important;\n}\n\n.align-content-end {\n  -ms-flex-line-pack: end !important;\n  align-content: flex-end !important;\n}\n\n.align-content-center {\n  -ms-flex-line-pack: center !important;\n  align-content: center !important;\n}\n\n.align-content-between {\n  -ms-flex-line-pack: justify !important;\n  align-content: space-between !important;\n}\n\n.align-content-around {\n  -ms-flex-line-pack: distribute !important;\n  align-content: space-around !important;\n}\n\n.align-content-stretch {\n  -ms-flex-line-pack: stretch !important;\n  align-content: stretch !important;\n}\n\n.align-self-auto {\n  -ms-flex-item-align: auto !important;\n  align-self: auto !important;\n}\n\n.align-self-start {\n  -ms-flex-item-align: start !important;\n  align-self: flex-start !important;\n}\n\n.align-self-end {\n  -ms-flex-item-align: end !important;\n  align-self: flex-end !important;\n}\n\n.align-self-center {\n  -ms-flex-item-align: center !important;\n  align-self: center !important;\n}\n\n.align-self-baseline {\n  -ms-flex-item-align: baseline !important;\n  align-self: baseline !important;\n}\n\n.align-self-stretch {\n  -ms-flex-item-align: stretch !important;\n  align-self: stretch !important;\n}\n\n.order-first {\n  -ms-flex-order: -1 !important;\n  order: -1 !important;\n}\n\n.order-0 {\n  -ms-flex-order: 0 !important;\n  order: 0 !important;\n}\n\n.order-1 {\n  -ms-flex-order: 1 !important;\n  order: 1 !important;\n}\n\n.order-2 {\n  -ms-flex-order: 2 !important;\n  order: 2 !important;\n}\n\n.order-3 {\n  -ms-flex-order: 3 !important;\n  order: 3 !important;\n}\n\n.order-4 {\n  -ms-flex-order: 4 !important;\n  order: 4 !important;\n}\n\n.order-5 {\n  -ms-flex-order: 5 !important;\n  order: 5 !important;\n}\n\n.order-last {\n  -ms-flex-order: 6 !important;\n  order: 6 !important;\n}\n\n.m-0 {\n  margin: 0 !important;\n}\n\n.m-1 {\n  margin: 0.25rem !important;\n}\n\n.m-2 {\n  margin: 0.5rem !important;\n}\n\n.m-3 {\n  margin: 1rem !important;\n}\n\n.m-4 {\n  margin: 1.5rem !important;\n}\n\n.m-5 {\n  margin: 3rem !important;\n}\n\n.m-auto {\n  margin: auto !important;\n}\n\n.mx-0 {\n  margin-right: 0 !important;\n  margin-left: 0 !important;\n}\n\n.mx-1 {\n  margin-right: 0.25rem !important;\n  margin-left: 0.25rem !important;\n}\n\n.mx-2 {\n  margin-right: 0.5rem !important;\n  margin-left: 0.5rem !important;\n}\n\n.mx-3 {\n  margin-right: 1rem !important;\n  margin-left: 1rem !important;\n}\n\n.mx-4 {\n  margin-right: 1.5rem !important;\n  margin-left: 1.5rem !important;\n}\n\n.mx-5 {\n  margin-right: 3rem !important;\n  margin-left: 3rem !important;\n}\n\n.mx-auto {\n  margin-right: auto !important;\n  margin-left: auto !important;\n}\n\n.my-0 {\n  margin-top: 0 !important;\n  margin-bottom: 0 !important;\n}\n\n.my-1 {\n  margin-top: 0.25rem !important;\n  margin-bottom: 0.25rem !important;\n}\n\n.my-2 {\n  margin-top: 0.5rem !important;\n  margin-bottom: 0.5rem !important;\n}\n\n.my-3 {\n  margin-top: 1rem !important;\n  margin-bottom: 1rem !important;\n}\n\n.my-4 {\n  margin-top: 1.5rem !important;\n  margin-bottom: 1.5rem !important;\n}\n\n.my-5 {\n  margin-top: 3rem !important;\n  margin-bottom: 3rem !important;\n}\n\n.my-auto {\n  margin-top: auto !important;\n  margin-bottom: auto !important;\n}\n\n.mt-0 {\n  margin-top: 0 !important;\n}\n\n.mt-1 {\n  margin-top: 0.25rem !important;\n}\n\n.mt-2 {\n  margin-top: 0.5rem !important;\n}\n\n.mt-3 {\n  margin-top: 1rem !important;\n}\n\n.mt-4 {\n  margin-top: 1.5rem !important;\n}\n\n.mt-5 {\n  margin-top: 3rem !important;\n}\n\n.mt-auto {\n  margin-top: auto !important;\n}\n\n.me-0 {\n  margin-right: 0 !important;\n}\n\n.me-1 {\n  margin-right: 0.25rem !important;\n}\n\n.me-2 {\n  margin-right: 0.5rem !important;\n}\n\n.me-3 {\n  margin-right: 1rem !important;\n}\n\n.me-4 {\n  margin-right: 1.5rem !important;\n}\n\n.me-5 {\n  margin-right: 3rem !important;\n}\n\n.me-auto {\n  margin-right: auto !important;\n}\n\n.mb-0 {\n  margin-bottom: 0 !important;\n}\n\n.mb-1 {\n  margin-bottom: 0.25rem !important;\n}\n\n.mb-2 {\n  margin-bottom: 0.5rem !important;\n}\n\n.mb-3 {\n  margin-bottom: 1rem !important;\n}\n\n.mb-4 {\n  margin-bottom: 1.5rem !important;\n}\n\n.mb-5 {\n  margin-bottom: 3rem !important;\n}\n\n.mb-auto {\n  margin-bottom: auto !important;\n}\n\n.ms-0 {\n  margin-left: 0 !important;\n}\n\n.ms-1 {\n  margin-left: 0.25rem !important;\n}\n\n.ms-2 {\n  margin-left: 0.5rem !important;\n}\n\n.ms-3 {\n  margin-left: 1rem !important;\n}\n\n.ms-4 {\n  margin-left: 1.5rem !important;\n}\n\n.ms-5 {\n  margin-left: 3rem !important;\n}\n\n.ms-auto {\n  margin-left: auto !important;\n}\n\n.p-0 {\n  padding: 0 !important;\n}\n\n.p-1 {\n  padding: 0.25rem !important;\n}\n\n.p-2 {\n  padding: 0.5rem !important;\n}\n\n.p-3 {\n  padding: 1rem !important;\n}\n\n.p-4 {\n  padding: 1.5rem !important;\n}\n\n.p-5 {\n  padding: 3rem !important;\n}\n\n.px-0 {\n  padding-right: 0 !important;\n  padding-left: 0 !important;\n}\n\n.px-1 {\n  padding-right: 0.25rem !important;\n  padding-left: 0.25rem !important;\n}\n\n.px-2 {\n  padding-right: 0.5rem !important;\n  padding-left: 0.5rem !important;\n}\n\n.px-3 {\n  padding-right: 1rem !important;\n  padding-left: 1rem !important;\n}\n\n.px-4 {\n  padding-right: 1.5rem !important;\n  padding-left: 1.5rem !important;\n}\n\n.px-5 {\n  padding-right: 3rem !important;\n  padding-left: 3rem !important;\n}\n\n.py-0 {\n  padding-top: 0 !important;\n  padding-bottom: 0 !important;\n}\n\n.py-1 {\n  padding-top: 0.25rem !important;\n  padding-bottom: 0.25rem !important;\n}\n\n.py-2 {\n  padding-top: 0.5rem !important;\n  padding-bottom: 0.5rem !important;\n}\n\n.py-3 {\n  padding-top: 1rem !important;\n  padding-bottom: 1rem !important;\n}\n\n.py-4 {\n  padding-top: 1.5rem !important;\n  padding-bottom: 1.5rem !important;\n}\n\n.py-5 {\n  padding-top: 3rem !important;\n  padding-bottom: 3rem !important;\n}\n\n.pt-0 {\n  padding-top: 0 !important;\n}\n\n.pt-1 {\n  padding-top: 0.25rem !important;\n}\n\n.pt-2 {\n  padding-top: 0.5rem !important;\n}\n\n.pt-3 {\n  padding-top: 1rem !important;\n}\n\n.pt-4 {\n  padding-top: 1.5rem !important;\n}\n\n.pt-5 {\n  padding-top: 3rem !important;\n}\n\n.pe-0 {\n  padding-right: 0 !important;\n}\n\n.pe-1 {\n  padding-right: 0.25rem !important;\n}\n\n.pe-2 {\n  padding-right: 0.5rem !important;\n}\n\n.pe-3 {\n  padding-right: 1rem !important;\n}\n\n.pe-4 {\n  padding-right: 1.5rem !important;\n}\n\n.pe-5 {\n  padding-right: 3rem !important;\n}\n\n.pb-0 {\n  padding-bottom: 0 !important;\n}\n\n.pb-1 {\n  padding-bottom: 0.25rem !important;\n}\n\n.pb-2 {\n  padding-bottom: 0.5rem !important;\n}\n\n.pb-3 {\n  padding-bottom: 1rem !important;\n}\n\n.pb-4 {\n  padding-bottom: 1.5rem !important;\n}\n\n.pb-5 {\n  padding-bottom: 3rem !important;\n}\n\n.ps-0 {\n  padding-left: 0 !important;\n}\n\n.ps-1 {\n  padding-left: 0.25rem !important;\n}\n\n.ps-2 {\n  padding-left: 0.5rem !important;\n}\n\n.ps-3 {\n  padding-left: 1rem !important;\n}\n\n.ps-4 {\n  padding-left: 1.5rem !important;\n}\n\n.ps-5 {\n  padding-left: 3rem !important;\n}\n\n.font-monospace {\n  font-family: var(--bs-font-monospace) !important;\n}\n\n.fs-1 {\n  font-size: calc(1.375rem + 1.5vw) !important;\n}\n\n.fs-2 {\n  font-size: calc(1.325rem + 0.9vw) !important;\n}\n\n.fs-3 {\n  font-size: calc(1.3rem + 0.6vw) !important;\n}\n\n.fs-4 {\n  font-size: calc(1.275rem + 0.3vw) !important;\n}\n\n.fs-5 {\n  font-size: 1.25rem !important;\n}\n\n.fs-6 {\n  font-size: 1rem !important;\n}\n\n.fst-italic {\n  font-style: italic !important;\n}\n\n.fst-normal {\n  font-style: normal !important;\n}\n\n.fw-light {\n  font-weight: 300 !important;\n}\n\n.fw-lighter {\n  font-weight: lighter !important;\n}\n\n.fw-normal {\n  font-weight: 400 !important;\n}\n\n.fw-bold {\n  font-weight: 700 !important;\n}\n\n.fw-bolder {\n  font-weight: bolder !important;\n}\n\n.lh-1 {\n  line-height: 1 !important;\n}\n\n.lh-sm {\n  line-height: 1.25 !important;\n}\n\n.lh-base {\n  line-height: 1.5 !important;\n}\n\n.lh-lg {\n  line-height: 2 !important;\n}\n\n.text-start {\n  text-align: left !important;\n}\n\n.text-end {\n  text-align: right !important;\n}\n\n.text-center {\n  text-align: center !important;\n}\n\n.text-decoration-none {\n  text-decoration: none !important;\n}\n\n.text-decoration-underline {\n  text-decoration: underline !important;\n}\n\n.text-decoration-line-through {\n  text-decoration: line-through !important;\n}\n\n.text-lowercase {\n  text-transform: lowercase !important;\n}\n\n.text-uppercase {\n  text-transform: uppercase !important;\n}\n\n.text-capitalize {\n  text-transform: capitalize !important;\n}\n\n.text-wrap {\n  white-space: normal !important;\n}\n\n.text-nowrap {\n  white-space: nowrap !important;\n}\n\n/* rtl:begin:remove */\n.text-break {\n  word-wrap: break-word !important;\n  word-break: break-word !important;\n}\n\n/* rtl:end:remove */\n.text-primary {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-primary-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-secondary {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-secondary-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-success {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-success-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-info {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-info-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-warning {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-warning-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-danger {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-danger-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-light {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-light-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-dark {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-dark-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-black {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-black-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-white {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-white-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-body {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-body-color-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-muted {\n  --bs-text-opacity: 1;\n  color: #868e96 !important;\n}\n\n.text-black-50 {\n  --bs-text-opacity: 1;\n  color: rgba(0, 0, 0, 0.5) !important;\n}\n\n.text-white-50 {\n  --bs-text-opacity: 1;\n  color: rgba(255, 255, 255, 0.5) !important;\n}\n\n.text-reset {\n  --bs-text-opacity: 1;\n  color: inherit !important;\n}\n\n.text-opacity-25 {\n  --bs-text-opacity: 0.25;\n}\n\n.text-opacity-50 {\n  --bs-text-opacity: 0.5;\n}\n\n.text-opacity-75 {\n  --bs-text-opacity: 0.75;\n}\n\n.text-opacity-100 {\n  --bs-text-opacity: 1;\n}\n\n.bg-primary {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-primary-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-secondary {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-secondary-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-success {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-success-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-info {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-info-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-warning {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-warning-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-danger {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-danger-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-light {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-light-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-dark {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-dark-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-black {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-black-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-white {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-white-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-body {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-body-bg-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-transparent {\n  --bs-bg-opacity: 1;\n  background-color: transparent !important;\n}\n\n.bg-opacity-10 {\n  --bs-bg-opacity: 0.1;\n}\n\n.bg-opacity-25 {\n  --bs-bg-opacity: 0.25;\n}\n\n.bg-opacity-50 {\n  --bs-bg-opacity: 0.5;\n}\n\n.bg-opacity-75 {\n  --bs-bg-opacity: 0.75;\n}\n\n.bg-opacity-100 {\n  --bs-bg-opacity: 1;\n}\n\n.bg-gradient {\n  background-image: var(--bs-gradient) !important;\n}\n\n.user-select-all {\n  -webkit-user-select: all !important;\n  -moz-user-select: all !important;\n  user-select: all !important;\n}\n\n.user-select-auto {\n  -webkit-user-select: auto !important;\n  -moz-user-select: auto !important;\n  -ms-user-select: auto !important;\n  user-select: auto !important;\n}\n\n.user-select-none {\n  -webkit-user-select: none !important;\n  -moz-user-select: none !important;\n  -ms-user-select: none !important;\n  user-select: none !important;\n}\n\n.pe-none {\n  pointer-events: none !important;\n}\n\n.pe-auto {\n  pointer-events: auto !important;\n}\n\n.rounded {\n  border-radius: 0.25rem !important;\n}\n\n.rounded-0 {\n  border-radius: 0 !important;\n}\n\n.rounded-1 {\n  border-radius: 0.2rem !important;\n}\n\n.rounded-2 {\n  border-radius: 0.25rem !important;\n}\n\n.rounded-3 {\n  border-radius: 0.3rem !important;\n}\n\n.rounded-circle {\n  border-radius: 50% !important;\n}\n\n.rounded-pill {\n  border-radius: 50rem !important;\n}\n\n.rounded-top {\n  border-top-left-radius: 0.25rem !important;\n  border-top-right-radius: 0.25rem !important;\n}\n\n.rounded-end {\n  border-top-right-radius: 0.25rem !important;\n  border-bottom-right-radius: 0.25rem !important;\n}\n\n.rounded-bottom {\n  border-bottom-right-radius: 0.25rem !important;\n  border-bottom-left-radius: 0.25rem !important;\n}\n\n.rounded-start {\n  border-bottom-left-radius: 0.25rem !important;\n  border-top-left-radius: 0.25rem !important;\n}\n\n.visible {\n  visibility: visible !important;\n}\n\n.invisible {\n  visibility: hidden !important;\n}\n\n@media (min-width: 576px) {\n  .float-sm-start {\n    float: left !important;\n  }\n  .float-sm-end {\n    float: right !important;\n  }\n  .float-sm-none {\n    float: none !important;\n  }\n  .d-sm-inline {\n    display: inline !important;\n  }\n  .d-sm-inline-block {\n    display: inline-block !important;\n  }\n  .d-sm-block {\n    display: block !important;\n  }\n  .d-sm-grid {\n    display: grid !important;\n  }\n  .d-sm-table {\n    display: table !important;\n  }\n  .d-sm-table-row {\n    display: table-row !important;\n  }\n  .d-sm-table-cell {\n    display: table-cell !important;\n  }\n  .d-sm-flex {\n    display: -ms-flexbox !important;\n    display: flex !important;\n  }\n  .d-sm-inline-flex {\n    display: -ms-inline-flexbox !important;\n    display: inline-flex !important;\n  }\n  .d-sm-none {\n    display: none !important;\n  }\n  .flex-sm-fill {\n    -ms-flex: 1 1 auto !important;\n    flex: 1 1 auto !important;\n  }\n  .flex-sm-row {\n    -ms-flex-direction: row !important;\n    flex-direction: row !important;\n  }\n  .flex-sm-column {\n    -ms-flex-direction: column !important;\n    flex-direction: column !important;\n  }\n  .flex-sm-row-reverse {\n    -ms-flex-direction: row-reverse !important;\n    flex-direction: row-reverse !important;\n  }\n  .flex-sm-column-reverse {\n    -ms-flex-direction: column-reverse !important;\n    flex-direction: column-reverse !important;\n  }\n  .flex-sm-grow-0 {\n    -ms-flex-positive: 0 !important;\n    flex-grow: 0 !important;\n  }\n  .flex-sm-grow-1 {\n    -ms-flex-positive: 1 !important;\n    flex-grow: 1 !important;\n  }\n  .flex-sm-shrink-0 {\n    -ms-flex-negative: 0 !important;\n    flex-shrink: 0 !important;\n  }\n  .flex-sm-shrink-1 {\n    -ms-flex-negative: 1 !important;\n    flex-shrink: 1 !important;\n  }\n  .flex-sm-wrap {\n    -ms-flex-wrap: wrap !important;\n    flex-wrap: wrap !important;\n  }\n  .flex-sm-nowrap {\n    -ms-flex-wrap: nowrap !important;\n    flex-wrap: nowrap !important;\n  }\n  .flex-sm-wrap-reverse {\n    -ms-flex-wrap: wrap-reverse !important;\n    flex-wrap: wrap-reverse !important;\n  }\n  .gap-sm-0 {\n    gap: 0 !important;\n  }\n  .gap-sm-1 {\n    gap: 0.25rem !important;\n  }\n  .gap-sm-2 {\n    gap: 0.5rem !important;\n  }\n  .gap-sm-3 {\n    gap: 1rem !important;\n  }\n  .gap-sm-4 {\n    gap: 1.5rem !important;\n  }\n  .gap-sm-5 {\n    gap: 3rem !important;\n  }\n  .justify-content-sm-start {\n    -ms-flex-pack: start !important;\n    justify-content: flex-start !important;\n  }\n  .justify-content-sm-end {\n    -ms-flex-pack: end !important;\n    justify-content: flex-end !important;\n  }\n  .justify-content-sm-center {\n    -ms-flex-pack: center !important;\n    justify-content: center !important;\n  }\n  .justify-content-sm-between {\n    -ms-flex-pack: justify !important;\n    justify-content: space-between !important;\n  }\n  .justify-content-sm-around {\n    -ms-flex-pack: distribute !important;\n    justify-content: space-around !important;\n  }\n  .justify-content-sm-evenly {\n    -ms-flex-pack: space-evenly !important;\n    justify-content: space-evenly !important;\n  }\n  .align-items-sm-start {\n    -ms-flex-align: start !important;\n    align-items: flex-start !important;\n  }\n  .align-items-sm-end {\n    -ms-flex-align: end !important;\n    align-items: flex-end !important;\n  }\n  .align-items-sm-center {\n    -ms-flex-align: center !important;\n    align-items: center !important;\n  }\n  .align-items-sm-baseline {\n    -ms-flex-align: baseline !important;\n    align-items: baseline !important;\n  }\n  .align-items-sm-stretch {\n    -ms-flex-align: stretch !important;\n    align-items: stretch !important;\n  }\n  .align-content-sm-start {\n    -ms-flex-line-pack: start !important;\n    align-content: flex-start !important;\n  }\n  .align-content-sm-end {\n    -ms-flex-line-pack: end !important;\n    align-content: flex-end !important;\n  }\n  .align-content-sm-center {\n    -ms-flex-line-pack: center !important;\n    align-content: center !important;\n  }\n  .align-content-sm-between {\n    -ms-flex-line-pack: justify !important;\n    align-content: space-between !important;\n  }\n  .align-content-sm-around {\n    -ms-flex-line-pack: distribute !important;\n    align-content: space-around !important;\n  }\n  .align-content-sm-stretch {\n    -ms-flex-line-pack: stretch !important;\n    align-content: stretch !important;\n  }\n  .align-self-sm-auto {\n    -ms-flex-item-align: auto !important;\n    align-self: auto !important;\n  }\n  .align-self-sm-start {\n    -ms-flex-item-align: start !important;\n    align-self: flex-start !important;\n  }\n  .align-self-sm-end {\n    -ms-flex-item-align: end !important;\n    align-self: flex-end !important;\n  }\n  .align-self-sm-center {\n    -ms-flex-item-align: center !important;\n    align-self: center !important;\n  }\n  .align-self-sm-baseline {\n    -ms-flex-item-align: baseline !important;\n    align-self: baseline !important;\n  }\n  .align-self-sm-stretch {\n    -ms-flex-item-align: stretch !important;\n    align-self: stretch !important;\n  }\n  .order-sm-first {\n    -ms-flex-order: -1 !important;\n    order: -1 !important;\n  }\n  .order-sm-0 {\n    -ms-flex-order: 0 !important;\n    order: 0 !important;\n  }\n  .order-sm-1 {\n    -ms-flex-order: 1 !important;\n    order: 1 !important;\n  }\n  .order-sm-2 {\n    -ms-flex-order: 2 !important;\n    order: 2 !important;\n  }\n  .order-sm-3 {\n    -ms-flex-order: 3 !important;\n    order: 3 !important;\n  }\n  .order-sm-4 {\n    -ms-flex-order: 4 !important;\n    order: 4 !important;\n  }\n  .order-sm-5 {\n    -ms-flex-order: 5 !important;\n    order: 5 !important;\n  }\n  .order-sm-last {\n    -ms-flex-order: 6 !important;\n    order: 6 !important;\n  }\n  .m-sm-0 {\n    margin: 0 !important;\n  }\n  .m-sm-1 {\n    margin: 0.25rem !important;\n  }\n  .m-sm-2 {\n    margin: 0.5rem !important;\n  }\n  .m-sm-3 {\n    margin: 1rem !important;\n  }\n  .m-sm-4 {\n    margin: 1.5rem !important;\n  }\n  .m-sm-5 {\n    margin: 3rem !important;\n  }\n  .m-sm-auto {\n    margin: auto !important;\n  }\n  .mx-sm-0 {\n    margin-right: 0 !important;\n    margin-left: 0 !important;\n  }\n  .mx-sm-1 {\n    margin-right: 0.25rem !important;\n    margin-left: 0.25rem !important;\n  }\n  .mx-sm-2 {\n    margin-right: 0.5rem !important;\n    margin-left: 0.5rem !important;\n  }\n  .mx-sm-3 {\n    margin-right: 1rem !important;\n    margin-left: 1rem !important;\n  }\n  .mx-sm-4 {\n    margin-right: 1.5rem !important;\n    margin-left: 1.5rem !important;\n  }\n  .mx-sm-5 {\n    margin-right: 3rem !important;\n    margin-left: 3rem !important;\n  }\n  .mx-sm-auto {\n    margin-right: auto !important;\n    margin-left: auto !important;\n  }\n  .my-sm-0 {\n    margin-top: 0 !important;\n    margin-bottom: 0 !important;\n  }\n  .my-sm-1 {\n    margin-top: 0.25rem !important;\n    margin-bottom: 0.25rem !important;\n  }\n  .my-sm-2 {\n    margin-top: 0.5rem !important;\n    margin-bottom: 0.5rem !important;\n  }\n  .my-sm-3 {\n    margin-top: 1rem !important;\n    margin-bottom: 1rem !important;\n  }\n  .my-sm-4 {\n    margin-top: 1.5rem !important;\n    margin-bottom: 1.5rem !important;\n  }\n  .my-sm-5 {\n    margin-top: 3rem !important;\n    margin-bottom: 3rem !important;\n  }\n  .my-sm-auto {\n    margin-top: auto !important;\n    margin-bottom: auto !important;\n  }\n  .mt-sm-0 {\n    margin-top: 0 !important;\n  }\n  .mt-sm-1 {\n    margin-top: 0.25rem !important;\n  }\n  .mt-sm-2 {\n    margin-top: 0.5rem !important;\n  }\n  .mt-sm-3 {\n    margin-top: 1rem !important;\n  }\n  .mt-sm-4 {\n    margin-top: 1.5rem !important;\n  }\n  .mt-sm-5 {\n    margin-top: 3rem !important;\n  }\n  .mt-sm-auto {\n    margin-top: auto !important;\n  }\n  .me-sm-0 {\n    margin-right: 0 !important;\n  }\n  .me-sm-1 {\n    margin-right: 0.25rem !important;\n  }\n  .me-sm-2 {\n    margin-right: 0.5rem !important;\n  }\n  .me-sm-3 {\n    margin-right: 1rem !important;\n  }\n  .me-sm-4 {\n    margin-right: 1.5rem !important;\n  }\n  .me-sm-5 {\n    margin-right: 3rem !important;\n  }\n  .me-sm-auto {\n    margin-right: auto !important;\n  }\n  .mb-sm-0 {\n    margin-bottom: 0 !important;\n  }\n  .mb-sm-1 {\n    margin-bottom: 0.25rem !important;\n  }\n  .mb-sm-2 {\n    margin-bottom: 0.5rem !important;\n  }\n  .mb-sm-3 {\n    margin-bottom: 1rem !important;\n  }\n  .mb-sm-4 {\n    margin-bottom: 1.5rem !important;\n  }\n  .mb-sm-5 {\n    margin-bottom: 3rem !important;\n  }\n  .mb-sm-auto {\n    margin-bottom: auto !important;\n  }\n  .ms-sm-0 {\n    margin-left: 0 !important;\n  }\n  .ms-sm-1 {\n    margin-left: 0.25rem !important;\n  }\n  .ms-sm-2 {\n    margin-left: 0.5rem !important;\n  }\n  .ms-sm-3 {\n    margin-left: 1rem !important;\n  }\n  .ms-sm-4 {\n    margin-left: 1.5rem !important;\n  }\n  .ms-sm-5 {\n    margin-left: 3rem !important;\n  }\n  .ms-sm-auto {\n    margin-left: auto !important;\n  }\n  .p-sm-0 {\n    padding: 0 !important;\n  }\n  .p-sm-1 {\n    padding: 0.25rem !important;\n  }\n  .p-sm-2 {\n    padding: 0.5rem !important;\n  }\n  .p-sm-3 {\n    padding: 1rem !important;\n  }\n  .p-sm-4 {\n    padding: 1.5rem !important;\n  }\n  .p-sm-5 {\n    padding: 3rem !important;\n  }\n  .px-sm-0 {\n    padding-right: 0 !important;\n    padding-left: 0 !important;\n  }\n  .px-sm-1 {\n    padding-right: 0.25rem !important;\n    padding-left: 0.25rem !important;\n  }\n  .px-sm-2 {\n    padding-right: 0.5rem !important;\n    padding-left: 0.5rem !important;\n  }\n  .px-sm-3 {\n    padding-right: 1rem !important;\n    padding-left: 1rem !important;\n  }\n  .px-sm-4 {\n    padding-right: 1.5rem !important;\n    padding-left: 1.5rem !important;\n  }\n  .px-sm-5 {\n    padding-right: 3rem !important;\n    padding-left: 3rem !important;\n  }\n  .py-sm-0 {\n    padding-top: 0 !important;\n    padding-bottom: 0 !important;\n  }\n  .py-sm-1 {\n    padding-top: 0.25rem !important;\n    padding-bottom: 0.25rem !important;\n  }\n  .py-sm-2 {\n    padding-top: 0.5rem !important;\n    padding-bottom: 0.5rem !important;\n  }\n  .py-sm-3 {\n    padding-top: 1rem !important;\n    padding-bottom: 1rem !important;\n  }\n  .py-sm-4 {\n    padding-top: 1.5rem !important;\n    padding-bottom: 1.5rem !important;\n  }\n  .py-sm-5 {\n    padding-top: 3rem !important;\n    padding-bottom: 3rem !important;\n  }\n  .pt-sm-0 {\n    padding-top: 0 !important;\n  }\n  .pt-sm-1 {\n    padding-top: 0.25rem !important;\n  }\n  .pt-sm-2 {\n    padding-top: 0.5rem !important;\n  }\n  .pt-sm-3 {\n    padding-top: 1rem !important;\n  }\n  .pt-sm-4 {\n    padding-top: 1.5rem !important;\n  }\n  .pt-sm-5 {\n    padding-top: 3rem !important;\n  }\n  .pe-sm-0 {\n    padding-right: 0 !important;\n  }\n  .pe-sm-1 {\n    padding-right: 0.25rem !important;\n  }\n  .pe-sm-2 {\n    padding-right: 0.5rem !important;\n  }\n  .pe-sm-3 {\n    padding-right: 1rem !important;\n  }\n  .pe-sm-4 {\n    padding-right: 1.5rem !important;\n  }\n  .pe-sm-5 {\n    padding-right: 3rem !important;\n  }\n  .pb-sm-0 {\n    padding-bottom: 0 !important;\n  }\n  .pb-sm-1 {\n    padding-bottom: 0.25rem !important;\n  }\n  .pb-sm-2 {\n    padding-bottom: 0.5rem !important;\n  }\n  .pb-sm-3 {\n    padding-bottom: 1rem !important;\n  }\n  .pb-sm-4 {\n    padding-bottom: 1.5rem !important;\n  }\n  .pb-sm-5 {\n    padding-bottom: 3rem !important;\n  }\n  .ps-sm-0 {\n    padding-left: 0 !important;\n  }\n  .ps-sm-1 {\n    padding-left: 0.25rem !important;\n  }\n  .ps-sm-2 {\n    padding-left: 0.5rem !important;\n  }\n  .ps-sm-3 {\n    padding-left: 1rem !important;\n  }\n  .ps-sm-4 {\n    padding-left: 1.5rem !important;\n  }\n  .ps-sm-5 {\n    padding-left: 3rem !important;\n  }\n  .text-sm-start {\n    text-align: left !important;\n  }\n  .text-sm-end {\n    text-align: right !important;\n  }\n  .text-sm-center {\n    text-align: center !important;\n  }\n}\n\n@media (min-width: 768px) {\n  .float-md-start {\n    float: left !important;\n  }\n  .float-md-end {\n    float: right !important;\n  }\n  .float-md-none {\n    float: none !important;\n  }\n  .d-md-inline {\n    display: inline !important;\n  }\n  .d-md-inline-block {\n    display: inline-block !important;\n  }\n  .d-md-block {\n    display: block !important;\n  }\n  .d-md-grid {\n    display: grid !important;\n  }\n  .d-md-table {\n    display: table !important;\n  }\n  .d-md-table-row {\n    display: table-row !important;\n  }\n  .d-md-table-cell {\n    display: table-cell !important;\n  }\n  .d-md-flex {\n    display: -ms-flexbox !important;\n    display: flex !important;\n  }\n  .d-md-inline-flex {\n    display: -ms-inline-flexbox !important;\n    display: inline-flex !important;\n  }\n  .d-md-none {\n    display: none !important;\n  }\n  .flex-md-fill {\n    -ms-flex: 1 1 auto !important;\n    flex: 1 1 auto !important;\n  }\n  .flex-md-row {\n    -ms-flex-direction: row !important;\n    flex-direction: row !important;\n  }\n  .flex-md-column {\n    -ms-flex-direction: column !important;\n    flex-direction: column !important;\n  }\n  .flex-md-row-reverse {\n    -ms-flex-direction: row-reverse !important;\n    flex-direction: row-reverse !important;\n  }\n  .flex-md-column-reverse {\n    -ms-flex-direction: column-reverse !important;\n    flex-direction: column-reverse !important;\n  }\n  .flex-md-grow-0 {\n    -ms-flex-positive: 0 !important;\n    flex-grow: 0 !important;\n  }\n  .flex-md-grow-1 {\n    -ms-flex-positive: 1 !important;\n    flex-grow: 1 !important;\n  }\n  .flex-md-shrink-0 {\n    -ms-flex-negative: 0 !important;\n    flex-shrink: 0 !important;\n  }\n  .flex-md-shrink-1 {\n    -ms-flex-negative: 1 !important;\n    flex-shrink: 1 !important;\n  }\n  .flex-md-wrap {\n    -ms-flex-wrap: wrap !important;\n    flex-wrap: wrap !important;\n  }\n  .flex-md-nowrap {\n    -ms-flex-wrap: nowrap !important;\n    flex-wrap: nowrap !important;\n  }\n  .flex-md-wrap-reverse {\n    -ms-flex-wrap: wrap-reverse !important;\n    flex-wrap: wrap-reverse !important;\n  }\n  .gap-md-0 {\n    gap: 0 !important;\n  }\n  .gap-md-1 {\n    gap: 0.25rem !important;\n  }\n  .gap-md-2 {\n    gap: 0.5rem !important;\n  }\n  .gap-md-3 {\n    gap: 1rem !important;\n  }\n  .gap-md-4 {\n    gap: 1.5rem !important;\n  }\n  .gap-md-5 {\n    gap: 3rem !important;\n  }\n  .justify-content-md-start {\n    -ms-flex-pack: start !important;\n    justify-content: flex-start !important;\n  }\n  .justify-content-md-end {\n    -ms-flex-pack: end !important;\n    justify-content: flex-end !important;\n  }\n  .justify-content-md-center {\n    -ms-flex-pack: center !important;\n    justify-content: center !important;\n  }\n  .justify-content-md-between {\n    -ms-flex-pack: justify !important;\n    justify-content: space-between !important;\n  }\n  .justify-content-md-around {\n    -ms-flex-pack: distribute !important;\n    justify-content: space-around !important;\n  }\n  .justify-content-md-evenly {\n    -ms-flex-pack: space-evenly !important;\n    justify-content: space-evenly !important;\n  }\n  .align-items-md-start {\n    -ms-flex-align: start !important;\n    align-items: flex-start !important;\n  }\n  .align-items-md-end {\n    -ms-flex-align: end !important;\n    align-items: flex-end !important;\n  }\n  .align-items-md-center {\n    -ms-flex-align: center !important;\n    align-items: center !important;\n  }\n  .align-items-md-baseline {\n    -ms-flex-align: baseline !important;\n    align-items: baseline !important;\n  }\n  .align-items-md-stretch {\n    -ms-flex-align: stretch !important;\n    align-items: stretch !important;\n  }\n  .align-content-md-start {\n    -ms-flex-line-pack: start !important;\n    align-content: flex-start !important;\n  }\n  .align-content-md-end {\n    -ms-flex-line-pack: end !important;\n    align-content: flex-end !important;\n  }\n  .align-content-md-center {\n    -ms-flex-line-pack: center !important;\n    align-content: center !important;\n  }\n  .align-content-md-between {\n    -ms-flex-line-pack: justify !important;\n    align-content: space-between !important;\n  }\n  .align-content-md-around {\n    -ms-flex-line-pack: distribute !important;\n    align-content: space-around !important;\n  }\n  .align-content-md-stretch {\n    -ms-flex-line-pack: stretch !important;\n    align-content: stretch !important;\n  }\n  .align-self-md-auto {\n    -ms-flex-item-align: auto !important;\n    align-self: auto !important;\n  }\n  .align-self-md-start {\n    -ms-flex-item-align: start !important;\n    align-self: flex-start !important;\n  }\n  .align-self-md-end {\n    -ms-flex-item-align: end !important;\n    align-self: flex-end !important;\n  }\n  .align-self-md-center {\n    -ms-flex-item-align: center !important;\n    align-self: center !important;\n  }\n  .align-self-md-baseline {\n    -ms-flex-item-align: baseline !important;\n    align-self: baseline !important;\n  }\n  .align-self-md-stretch {\n    -ms-flex-item-align: stretch !important;\n    align-self: stretch !important;\n  }\n  .order-md-first {\n    -ms-flex-order: -1 !important;\n    order: -1 !important;\n  }\n  .order-md-0 {\n    -ms-flex-order: 0 !important;\n    order: 0 !important;\n  }\n  .order-md-1 {\n    -ms-flex-order: 1 !important;\n    order: 1 !important;\n  }\n  .order-md-2 {\n    -ms-flex-order: 2 !important;\n    order: 2 !important;\n  }\n  .order-md-3 {\n    -ms-flex-order: 3 !important;\n    order: 3 !important;\n  }\n  .order-md-4 {\n    -ms-flex-order: 4 !important;\n    order: 4 !important;\n  }\n  .order-md-5 {\n    -ms-flex-order: 5 !important;\n    order: 5 !important;\n  }\n  .order-md-last {\n    -ms-flex-order: 6 !important;\n    order: 6 !important;\n  }\n  .m-md-0 {\n    margin: 0 !important;\n  }\n  .m-md-1 {\n    margin: 0.25rem !important;\n  }\n  .m-md-2 {\n    margin: 0.5rem !important;\n  }\n  .m-md-3 {\n    margin: 1rem !important;\n  }\n  .m-md-4 {\n    margin: 1.5rem !important;\n  }\n  .m-md-5 {\n    margin: 3rem !important;\n  }\n  .m-md-auto {\n    margin: auto !important;\n  }\n  .mx-md-0 {\n    margin-right: 0 !important;\n    margin-left: 0 !important;\n  }\n  .mx-md-1 {\n    margin-right: 0.25rem !important;\n    margin-left: 0.25rem !important;\n  }\n  .mx-md-2 {\n    margin-right: 0.5rem !important;\n    margin-left: 0.5rem !important;\n  }\n  .mx-md-3 {\n    margin-right: 1rem !important;\n    margin-left: 1rem !important;\n  }\n  .mx-md-4 {\n    margin-right: 1.5rem !important;\n    margin-left: 1.5rem !important;\n  }\n  .mx-md-5 {\n    margin-right: 3rem !important;\n    margin-left: 3rem !important;\n  }\n  .mx-md-auto {\n    margin-right: auto !important;\n    margin-left: auto !important;\n  }\n  .my-md-0 {\n    margin-top: 0 !important;\n    margin-bottom: 0 !important;\n  }\n  .my-md-1 {\n    margin-top: 0.25rem !important;\n    margin-bottom: 0.25rem !important;\n  }\n  .my-md-2 {\n    margin-top: 0.5rem !important;\n    margin-bottom: 0.5rem !important;\n  }\n  .my-md-3 {\n    margin-top: 1rem !important;\n    margin-bottom: 1rem !important;\n  }\n  .my-md-4 {\n    margin-top: 1.5rem !important;\n    margin-bottom: 1.5rem !important;\n  }\n  .my-md-5 {\n    margin-top: 3rem !important;\n    margin-bottom: 3rem !important;\n  }\n  .my-md-auto {\n    margin-top: auto !important;\n    margin-bottom: auto !important;\n  }\n  .mt-md-0 {\n    margin-top: 0 !important;\n  }\n  .mt-md-1 {\n    margin-top: 0.25rem !important;\n  }\n  .mt-md-2 {\n    margin-top: 0.5rem !important;\n  }\n  .mt-md-3 {\n    margin-top: 1rem !important;\n  }\n  .mt-md-4 {\n    margin-top: 1.5rem !important;\n  }\n  .mt-md-5 {\n    margin-top: 3rem !important;\n  }\n  .mt-md-auto {\n    margin-top: auto !important;\n  }\n  .me-md-0 {\n    margin-right: 0 !important;\n  }\n  .me-md-1 {\n    margin-right: 0.25rem !important;\n  }\n  .me-md-2 {\n    margin-right: 0.5rem !important;\n  }\n  .me-md-3 {\n    margin-right: 1rem !important;\n  }\n  .me-md-4 {\n    margin-right: 1.5rem !important;\n  }\n  .me-md-5 {\n    margin-right: 3rem !important;\n  }\n  .me-md-auto {\n    margin-right: auto !important;\n  }\n  .mb-md-0 {\n    margin-bottom: 0 !important;\n  }\n  .mb-md-1 {\n    margin-bottom: 0.25rem !important;\n  }\n  .mb-md-2 {\n    margin-bottom: 0.5rem !important;\n  }\n  .mb-md-3 {\n    margin-bottom: 1rem !important;\n  }\n  .mb-md-4 {\n    margin-bottom: 1.5rem !important;\n  }\n  .mb-md-5 {\n    margin-bottom: 3rem !important;\n  }\n  .mb-md-auto {\n    margin-bottom: auto !important;\n  }\n  .ms-md-0 {\n    margin-left: 0 !important;\n  }\n  .ms-md-1 {\n    margin-left: 0.25rem !important;\n  }\n  .ms-md-2 {\n    margin-left: 0.5rem !important;\n  }\n  .ms-md-3 {\n    margin-left: 1rem !important;\n  }\n  .ms-md-4 {\n    margin-left: 1.5rem !important;\n  }\n  .ms-md-5 {\n    margin-left: 3rem !important;\n  }\n  .ms-md-auto {\n    margin-left: auto !important;\n  }\n  .p-md-0 {\n    padding: 0 !important;\n  }\n  .p-md-1 {\n    padding: 0.25rem !important;\n  }\n  .p-md-2 {\n    padding: 0.5rem !important;\n  }\n  .p-md-3 {\n    padding: 1rem !important;\n  }\n  .p-md-4 {\n    padding: 1.5rem !important;\n  }\n  .p-md-5 {\n    padding: 3rem !important;\n  }\n  .px-md-0 {\n    padding-right: 0 !important;\n    padding-left: 0 !important;\n  }\n  .px-md-1 {\n    padding-right: 0.25rem !important;\n    padding-left: 0.25rem !important;\n  }\n  .px-md-2 {\n    padding-right: 0.5rem !important;\n    padding-left: 0.5rem !important;\n  }\n  .px-md-3 {\n    padding-right: 1rem !important;\n    padding-left: 1rem !important;\n  }\n  .px-md-4 {\n    padding-right: 1.5rem !important;\n    padding-left: 1.5rem !important;\n  }\n  .px-md-5 {\n    padding-right: 3rem !important;\n    padding-left: 3rem !important;\n  }\n  .py-md-0 {\n    padding-top: 0 !important;\n    padding-bottom: 0 !important;\n  }\n  .py-md-1 {\n    padding-top: 0.25rem !important;\n    padding-bottom: 0.25rem !important;\n  }\n  .py-md-2 {\n    padding-top: 0.5rem !important;\n    padding-bottom: 0.5rem !important;\n  }\n  .py-md-3 {\n    padding-top: 1rem !important;\n    padding-bottom: 1rem !important;\n  }\n  .py-md-4 {\n    padding-top: 1.5rem !important;\n    padding-bottom: 1.5rem !important;\n  }\n  .py-md-5 {\n    padding-top: 3rem !important;\n    padding-bottom: 3rem !important;\n  }\n  .pt-md-0 {\n    padding-top: 0 !important;\n  }\n  .pt-md-1 {\n    padding-top: 0.25rem !important;\n  }\n  .pt-md-2 {\n    padding-top: 0.5rem !important;\n  }\n  .pt-md-3 {\n    padding-top: 1rem !important;\n  }\n  .pt-md-4 {\n    padding-top: 1.5rem !important;\n  }\n  .pt-md-5 {\n    padding-top: 3rem !important;\n  }\n  .pe-md-0 {\n    padding-right: 0 !important;\n  }\n  .pe-md-1 {\n    padding-right: 0.25rem !important;\n  }\n  .pe-md-2 {\n    padding-right: 0.5rem !important;\n  }\n  .pe-md-3 {\n    padding-right: 1rem !important;\n  }\n  .pe-md-4 {\n    padding-right: 1.5rem !important;\n  }\n  .pe-md-5 {\n    padding-right: 3rem !important;\n  }\n  .pb-md-0 {\n    padding-bottom: 0 !important;\n  }\n  .pb-md-1 {\n    padding-bottom: 0.25rem !important;\n  }\n  .pb-md-2 {\n    padding-bottom: 0.5rem !important;\n  }\n  .pb-md-3 {\n    padding-bottom: 1rem !important;\n  }\n  .pb-md-4 {\n    padding-bottom: 1.5rem !important;\n  }\n  .pb-md-5 {\n    padding-bottom: 3rem !important;\n  }\n  .ps-md-0 {\n    padding-left: 0 !important;\n  }\n  .ps-md-1 {\n    padding-left: 0.25rem !important;\n  }\n  .ps-md-2 {\n    padding-left: 0.5rem !important;\n  }\n  .ps-md-3 {\n    padding-left: 1rem !important;\n  }\n  .ps-md-4 {\n    padding-left: 1.5rem !important;\n  }\n  .ps-md-5 {\n    padding-left: 3rem !important;\n  }\n  .text-md-start {\n    text-align: left !important;\n  }\n  .text-md-end {\n    text-align: right !important;\n  }\n  .text-md-center {\n    text-align: center !important;\n  }\n}\n\n@media (min-width: 992px) {\n  .float-lg-start {\n    float: left !important;\n  }\n  .float-lg-end {\n    float: right !important;\n  }\n  .float-lg-none {\n    float: none !important;\n  }\n  .d-lg-inline {\n    display: inline !important;\n  }\n  .d-lg-inline-block {\n    display: inline-block !important;\n  }\n  .d-lg-block {\n    display: block !important;\n  }\n  .d-lg-grid {\n    display: grid !important;\n  }\n  .d-lg-table {\n    display: table !important;\n  }\n  .d-lg-table-row {\n    display: table-row !important;\n  }\n  .d-lg-table-cell {\n    display: table-cell !important;\n  }\n  .d-lg-flex {\n    display: -ms-flexbox !important;\n    display: flex !important;\n  }\n  .d-lg-inline-flex {\n    display: -ms-inline-flexbox !important;\n    display: inline-flex !important;\n  }\n  .d-lg-none {\n    display: none !important;\n  }\n  .flex-lg-fill {\n    -ms-flex: 1 1 auto !important;\n    flex: 1 1 auto !important;\n  }\n  .flex-lg-row {\n    -ms-flex-direction: row !important;\n    flex-direction: row !important;\n  }\n  .flex-lg-column {\n    -ms-flex-direction: column !important;\n    flex-direction: column !important;\n  }\n  .flex-lg-row-reverse {\n    -ms-flex-direction: row-reverse !important;\n    flex-direction: row-reverse !important;\n  }\n  .flex-lg-column-reverse {\n    -ms-flex-direction: column-reverse !important;\n    flex-direction: column-reverse !important;\n  }\n  .flex-lg-grow-0 {\n    -ms-flex-positive: 0 !important;\n    flex-grow: 0 !important;\n  }\n  .flex-lg-grow-1 {\n    -ms-flex-positive: 1 !important;\n    flex-grow: 1 !important;\n  }\n  .flex-lg-shrink-0 {\n    -ms-flex-negative: 0 !important;\n    flex-shrink: 0 !important;\n  }\n  .flex-lg-shrink-1 {\n    -ms-flex-negative: 1 !important;\n    flex-shrink: 1 !important;\n  }\n  .flex-lg-wrap {\n    -ms-flex-wrap: wrap !important;\n    flex-wrap: wrap !important;\n  }\n  .flex-lg-nowrap {\n    -ms-flex-wrap: nowrap !important;\n    flex-wrap: nowrap !important;\n  }\n  .flex-lg-wrap-reverse {\n    -ms-flex-wrap: wrap-reverse !important;\n    flex-wrap: wrap-reverse !important;\n  }\n  .gap-lg-0 {\n    gap: 0 !important;\n  }\n  .gap-lg-1 {\n    gap: 0.25rem !important;\n  }\n  .gap-lg-2 {\n    gap: 0.5rem !important;\n  }\n  .gap-lg-3 {\n    gap: 1rem !important;\n  }\n  .gap-lg-4 {\n    gap: 1.5rem !important;\n  }\n  .gap-lg-5 {\n    gap: 3rem !important;\n  }\n  .justify-content-lg-start {\n    -ms-flex-pack: start !important;\n    justify-content: flex-start !important;\n  }\n  .justify-content-lg-end {\n    -ms-flex-pack: end !important;\n    justify-content: flex-end !important;\n  }\n  .justify-content-lg-center {\n    -ms-flex-pack: center !important;\n    justify-content: center !important;\n  }\n  .justify-content-lg-between {\n    -ms-flex-pack: justify !important;\n    justify-content: space-between !important;\n  }\n  .justify-content-lg-around {\n    -ms-flex-pack: distribute !important;\n    justify-content: space-around !important;\n  }\n  .justify-content-lg-evenly {\n    -ms-flex-pack: space-evenly !important;\n    justify-content: space-evenly !important;\n  }\n  .align-items-lg-start {\n    -ms-flex-align: start !important;\n    align-items: flex-start !important;\n  }\n  .align-items-lg-end {\n    -ms-flex-align: end !important;\n    align-items: flex-end !important;\n  }\n  .align-items-lg-center {\n    -ms-flex-align: center !important;\n    align-items: center !important;\n  }\n  .align-items-lg-baseline {\n    -ms-flex-align: baseline !important;\n    align-items: baseline !important;\n  }\n  .align-items-lg-stretch {\n    -ms-flex-align: stretch !important;\n    align-items: stretch !important;\n  }\n  .align-content-lg-start {\n    -ms-flex-line-pack: start !important;\n    align-content: flex-start !important;\n  }\n  .align-content-lg-end {\n    -ms-flex-line-pack: end !important;\n    align-content: flex-end !important;\n  }\n  .align-content-lg-center {\n    -ms-flex-line-pack: center !important;\n    align-content: center !important;\n  }\n  .align-content-lg-between {\n    -ms-flex-line-pack: justify !important;\n    align-content: space-between !important;\n  }\n  .align-content-lg-around {\n    -ms-flex-line-pack: distribute !important;\n    align-content: space-around !important;\n  }\n  .align-content-lg-stretch {\n    -ms-flex-line-pack: stretch !important;\n    align-content: stretch !important;\n  }\n  .align-self-lg-auto {\n    -ms-flex-item-align: auto !important;\n    align-self: auto !important;\n  }\n  .align-self-lg-start {\n    -ms-flex-item-align: start !important;\n    align-self: flex-start !important;\n  }\n  .align-self-lg-end {\n    -ms-flex-item-align: end !important;\n    align-self: flex-end !important;\n  }\n  .align-self-lg-center {\n    -ms-flex-item-align: center !important;\n    align-self: center !important;\n  }\n  .align-self-lg-baseline {\n    -ms-flex-item-align: baseline !important;\n    align-self: baseline !important;\n  }\n  .align-self-lg-stretch {\n    -ms-flex-item-align: stretch !important;\n    align-self: stretch !important;\n  }\n  .order-lg-first {\n    -ms-flex-order: -1 !important;\n    order: -1 !important;\n  }\n  .order-lg-0 {\n    -ms-flex-order: 0 !important;\n    order: 0 !important;\n  }\n  .order-lg-1 {\n    -ms-flex-order: 1 !important;\n    order: 1 !important;\n  }\n  .order-lg-2 {\n    -ms-flex-order: 2 !important;\n    order: 2 !important;\n  }\n  .order-lg-3 {\n    -ms-flex-order: 3 !important;\n    order: 3 !important;\n  }\n  .order-lg-4 {\n    -ms-flex-order: 4 !important;\n    order: 4 !important;\n  }\n  .order-lg-5 {\n    -ms-flex-order: 5 !important;\n    order: 5 !important;\n  }\n  .order-lg-last {\n    -ms-flex-order: 6 !important;\n    order: 6 !important;\n  }\n  .m-lg-0 {\n    margin: 0 !important;\n  }\n  .m-lg-1 {\n    margin: 0.25rem !important;\n  }\n  .m-lg-2 {\n    margin: 0.5rem !important;\n  }\n  .m-lg-3 {\n    margin: 1rem !important;\n  }\n  .m-lg-4 {\n    margin: 1.5rem !important;\n  }\n  .m-lg-5 {\n    margin: 3rem !important;\n  }\n  .m-lg-auto {\n    margin: auto !important;\n  }\n  .mx-lg-0 {\n    margin-right: 0 !important;\n    margin-left: 0 !important;\n  }\n  .mx-lg-1 {\n    margin-right: 0.25rem !important;\n    margin-left: 0.25rem !important;\n  }\n  .mx-lg-2 {\n    margin-right: 0.5rem !important;\n    margin-left: 0.5rem !important;\n  }\n  .mx-lg-3 {\n    margin-right: 1rem !important;\n    margin-left: 1rem !important;\n  }\n  .mx-lg-4 {\n    margin-right: 1.5rem !important;\n    margin-left: 1.5rem !important;\n  }\n  .mx-lg-5 {\n    margin-right: 3rem !important;\n    margin-left: 3rem !important;\n  }\n  .mx-lg-auto {\n    margin-right: auto !important;\n    margin-left: auto !important;\n  }\n  .my-lg-0 {\n    margin-top: 0 !important;\n    margin-bottom: 0 !important;\n  }\n  .my-lg-1 {\n    margin-top: 0.25rem !important;\n    margin-bottom: 0.25rem !important;\n  }\n  .my-lg-2 {\n    margin-top: 0.5rem !important;\n    margin-bottom: 0.5rem !important;\n  }\n  .my-lg-3 {\n    margin-top: 1rem !important;\n    margin-bottom: 1rem !important;\n  }\n  .my-lg-4 {\n    margin-top: 1.5rem !important;\n    margin-bottom: 1.5rem !important;\n  }\n  .my-lg-5 {\n    margin-top: 3rem !important;\n    margin-bottom: 3rem !important;\n  }\n  .my-lg-auto {\n    margin-top: auto !important;\n    margin-bottom: auto !important;\n  }\n  .mt-lg-0 {\n    margin-top: 0 !important;\n  }\n  .mt-lg-1 {\n    margin-top: 0.25rem !important;\n  }\n  .mt-lg-2 {\n    margin-top: 0.5rem !important;\n  }\n  .mt-lg-3 {\n    margin-top: 1rem !important;\n  }\n  .mt-lg-4 {\n    margin-top: 1.5rem !important;\n  }\n  .mt-lg-5 {\n    margin-top: 3rem !important;\n  }\n  .mt-lg-auto {\n    margin-top: auto !important;\n  }\n  .me-lg-0 {\n    margin-right: 0 !important;\n  }\n  .me-lg-1 {\n    margin-right: 0.25rem !important;\n  }\n  .me-lg-2 {\n    margin-right: 0.5rem !important;\n  }\n  .me-lg-3 {\n    margin-right: 1rem !important;\n  }\n  .me-lg-4 {\n    margin-right: 1.5rem !important;\n  }\n  .me-lg-5 {\n    margin-right: 3rem !important;\n  }\n  .me-lg-auto {\n    margin-right: auto !important;\n  }\n  .mb-lg-0 {\n    margin-bottom: 0 !important;\n  }\n  .mb-lg-1 {\n    margin-bottom: 0.25rem !important;\n  }\n  .mb-lg-2 {\n    margin-bottom: 0.5rem !important;\n  }\n  .mb-lg-3 {\n    margin-bottom: 1rem !important;\n  }\n  .mb-lg-4 {\n    margin-bottom: 1.5rem !important;\n  }\n  .mb-lg-5 {\n    margin-bottom: 3rem !important;\n  }\n  .mb-lg-auto {\n    margin-bottom: auto !important;\n  }\n  .ms-lg-0 {\n    margin-left: 0 !important;\n  }\n  .ms-lg-1 {\n    margin-left: 0.25rem !important;\n  }\n  .ms-lg-2 {\n    margin-left: 0.5rem !important;\n  }\n  .ms-lg-3 {\n    margin-left: 1rem !important;\n  }\n  .ms-lg-4 {\n    margin-left: 1.5rem !important;\n  }\n  .ms-lg-5 {\n    margin-left: 3rem !important;\n  }\n  .ms-lg-auto {\n    margin-left: auto !important;\n  }\n  .p-lg-0 {\n    padding: 0 !important;\n  }\n  .p-lg-1 {\n    padding: 0.25rem !important;\n  }\n  .p-lg-2 {\n    padding: 0.5rem !important;\n  }\n  .p-lg-3 {\n    padding: 1rem !important;\n  }\n  .p-lg-4 {\n    padding: 1.5rem !important;\n  }\n  .p-lg-5 {\n    padding: 3rem !important;\n  }\n  .px-lg-0 {\n    padding-right: 0 !important;\n    padding-left: 0 !important;\n  }\n  .px-lg-1 {\n    padding-right: 0.25rem !important;\n    padding-left: 0.25rem !important;\n  }\n  .px-lg-2 {\n    padding-right: 0.5rem !important;\n    padding-left: 0.5rem !important;\n  }\n  .px-lg-3 {\n    padding-right: 1rem !important;\n    padding-left: 1rem !important;\n  }\n  .px-lg-4 {\n    padding-right: 1.5rem !important;\n    padding-left: 1.5rem !important;\n  }\n  .px-lg-5 {\n    padding-right: 3rem !important;\n    padding-left: 3rem !important;\n  }\n  .py-lg-0 {\n    padding-top: 0 !important;\n    padding-bottom: 0 !important;\n  }\n  .py-lg-1 {\n    padding-top: 0.25rem !important;\n    padding-bottom: 0.25rem !important;\n  }\n  .py-lg-2 {\n    padding-top: 0.5rem !important;\n    padding-bottom: 0.5rem !important;\n  }\n  .py-lg-3 {\n    padding-top: 1rem !important;\n    padding-bottom: 1rem !important;\n  }\n  .py-lg-4 {\n    padding-top: 1.5rem !important;\n    padding-bottom: 1.5rem !important;\n  }\n  .py-lg-5 {\n    padding-top: 3rem !important;\n    padding-bottom: 3rem !important;\n  }\n  .pt-lg-0 {\n    padding-top: 0 !important;\n  }\n  .pt-lg-1 {\n    padding-top: 0.25rem !important;\n  }\n  .pt-lg-2 {\n    padding-top: 0.5rem !important;\n  }\n  .pt-lg-3 {\n    padding-top: 1rem !important;\n  }\n  .pt-lg-4 {\n    padding-top: 1.5rem !important;\n  }\n  .pt-lg-5 {\n    padding-top: 3rem !important;\n  }\n  .pe-lg-0 {\n    padding-right: 0 !important;\n  }\n  .pe-lg-1 {\n    padding-right: 0.25rem !important;\n  }\n  .pe-lg-2 {\n    padding-right: 0.5rem !important;\n  }\n  .pe-lg-3 {\n    padding-right: 1rem !important;\n  }\n  .pe-lg-4 {\n    padding-right: 1.5rem !important;\n  }\n  .pe-lg-5 {\n    padding-right: 3rem !important;\n  }\n  .pb-lg-0 {\n    padding-bottom: 0 !important;\n  }\n  .pb-lg-1 {\n    padding-bottom: 0.25rem !important;\n  }\n  .pb-lg-2 {\n    padding-bottom: 0.5rem !important;\n  }\n  .pb-lg-3 {\n    padding-bottom: 1rem !important;\n  }\n  .pb-lg-4 {\n    padding-bottom: 1.5rem !important;\n  }\n  .pb-lg-5 {\n    padding-bottom: 3rem !important;\n  }\n  .ps-lg-0 {\n    padding-left: 0 !important;\n  }\n  .ps-lg-1 {\n    padding-left: 0.25rem !important;\n  }\n  .ps-lg-2 {\n    padding-left: 0.5rem !important;\n  }\n  .ps-lg-3 {\n    padding-left: 1rem !important;\n  }\n  .ps-lg-4 {\n    padding-left: 1.5rem !important;\n  }\n  .ps-lg-5 {\n    padding-left: 3rem !important;\n  }\n  .text-lg-start {\n    text-align: left !important;\n  }\n  .text-lg-end {\n    text-align: right !important;\n  }\n  .text-lg-center {\n    text-align: center !important;\n  }\n}\n\n@media (min-width: 1200px) {\n  .float-xl-start {\n    float: left !important;\n  }\n  .float-xl-end {\n    float: right !important;\n  }\n  .float-xl-none {\n    float: none !important;\n  }\n  .d-xl-inline {\n    display: inline !important;\n  }\n  .d-xl-inline-block {\n    display: inline-block !important;\n  }\n  .d-xl-block {\n    display: block !important;\n  }\n  .d-xl-grid {\n    display: grid !important;\n  }\n  .d-xl-table {\n    display: table !important;\n  }\n  .d-xl-table-row {\n    display: table-row !important;\n  }\n  .d-xl-table-cell {\n    display: table-cell !important;\n  }\n  .d-xl-flex {\n    display: -ms-flexbox !important;\n    display: flex !important;\n  }\n  .d-xl-inline-flex {\n    display: -ms-inline-flexbox !important;\n    display: inline-flex !important;\n  }\n  .d-xl-none {\n    display: none !important;\n  }\n  .flex-xl-fill {\n    -ms-flex: 1 1 auto !important;\n    flex: 1 1 auto !important;\n  }\n  .flex-xl-row {\n    -ms-flex-direction: row !important;\n    flex-direction: row !important;\n  }\n  .flex-xl-column {\n    -ms-flex-direction: column !important;\n    flex-direction: column !important;\n  }\n  .flex-xl-row-reverse {\n    -ms-flex-direction: row-reverse !important;\n    flex-direction: row-reverse !important;\n  }\n  .flex-xl-column-reverse {\n    -ms-flex-direction: column-reverse !important;\n    flex-direction: column-reverse !important;\n  }\n  .flex-xl-grow-0 {\n    -ms-flex-positive: 0 !important;\n    flex-grow: 0 !important;\n  }\n  .flex-xl-grow-1 {\n    -ms-flex-positive: 1 !important;\n    flex-grow: 1 !important;\n  }\n  .flex-xl-shrink-0 {\n    -ms-flex-negative: 0 !important;\n    flex-shrink: 0 !important;\n  }\n  .flex-xl-shrink-1 {\n    -ms-flex-negative: 1 !important;\n    flex-shrink: 1 !important;\n  }\n  .flex-xl-wrap {\n    -ms-flex-wrap: wrap !important;\n    flex-wrap: wrap !important;\n  }\n  .flex-xl-nowrap {\n    -ms-flex-wrap: nowrap !important;\n    flex-wrap: nowrap !important;\n  }\n  .flex-xl-wrap-reverse {\n    -ms-flex-wrap: wrap-reverse !important;\n    flex-wrap: wrap-reverse !important;\n  }\n  .gap-xl-0 {\n    gap: 0 !important;\n  }\n  .gap-xl-1 {\n    gap: 0.25rem !important;\n  }\n  .gap-xl-2 {\n    gap: 0.5rem !important;\n  }\n  .gap-xl-3 {\n    gap: 1rem !important;\n  }\n  .gap-xl-4 {\n    gap: 1.5rem !important;\n  }\n  .gap-xl-5 {\n    gap: 3rem !important;\n  }\n  .justify-content-xl-start {\n    -ms-flex-pack: start !important;\n    justify-content: flex-start !important;\n  }\n  .justify-content-xl-end {\n    -ms-flex-pack: end !important;\n    justify-content: flex-end !important;\n  }\n  .justify-content-xl-center {\n    -ms-flex-pack: center !important;\n    justify-content: center !important;\n  }\n  .justify-content-xl-between {\n    -ms-flex-pack: justify !important;\n    justify-content: space-between !important;\n  }\n  .justify-content-xl-around {\n    -ms-flex-pack: distribute !important;\n    justify-content: space-around !important;\n  }\n  .justify-content-xl-evenly {\n    -ms-flex-pack: space-evenly !important;\n    justify-content: space-evenly !important;\n  }\n  .align-items-xl-start {\n    -ms-flex-align: start !important;\n    align-items: flex-start !important;\n  }\n  .align-items-xl-end {\n    -ms-flex-align: end !important;\n    align-items: flex-end !important;\n  }\n  .align-items-xl-center {\n    -ms-flex-align: center !important;\n    align-items: center !important;\n  }\n  .align-items-xl-baseline {\n    -ms-flex-align: baseline !important;\n    align-items: baseline !important;\n  }\n  .align-items-xl-stretch {\n    -ms-flex-align: stretch !important;\n    align-items: stretch !important;\n  }\n  .align-content-xl-start {\n    -ms-flex-line-pack: start !important;\n    align-content: flex-start !important;\n  }\n  .align-content-xl-end {\n    -ms-flex-line-pack: end !important;\n    align-content: flex-end !important;\n  }\n  .align-content-xl-center {\n    -ms-flex-line-pack: center !important;\n    align-content: center !important;\n  }\n  .align-content-xl-between {\n    -ms-flex-line-pack: justify !important;\n    align-content: space-between !important;\n  }\n  .align-content-xl-around {\n    -ms-flex-line-pack: distribute !important;\n    align-content: space-around !important;\n  }\n  .align-content-xl-stretch {\n    -ms-flex-line-pack: stretch !important;\n    align-content: stretch !important;\n  }\n  .align-self-xl-auto {\n    -ms-flex-item-align: auto !important;\n    align-self: auto !important;\n  }\n  .align-self-xl-start {\n    -ms-flex-item-align: start !important;\n    align-self: flex-start !important;\n  }\n  .align-self-xl-end {\n    -ms-flex-item-align: end !important;\n    align-self: flex-end !important;\n  }\n  .align-self-xl-center {\n    -ms-flex-item-align: center !important;\n    align-self: center !important;\n  }\n  .align-self-xl-baseline {\n    -ms-flex-item-align: baseline !important;\n    align-self: baseline !important;\n  }\n  .align-self-xl-stretch {\n    -ms-flex-item-align: stretch !important;\n    align-self: stretch !important;\n  }\n  .order-xl-first {\n    -ms-flex-order: -1 !important;\n    order: -1 !important;\n  }\n  .order-xl-0 {\n    -ms-flex-order: 0 !important;\n    order: 0 !important;\n  }\n  .order-xl-1 {\n    -ms-flex-order: 1 !important;\n    order: 1 !important;\n  }\n  .order-xl-2 {\n    -ms-flex-order: 2 !important;\n    order: 2 !important;\n  }\n  .order-xl-3 {\n    -ms-flex-order: 3 !important;\n    order: 3 !important;\n  }\n  .order-xl-4 {\n    -ms-flex-order: 4 !important;\n    order: 4 !important;\n  }\n  .order-xl-5 {\n    -ms-flex-order: 5 !important;\n    order: 5 !important;\n  }\n  .order-xl-last {\n    -ms-flex-order: 6 !important;\n    order: 6 !important;\n  }\n  .m-xl-0 {\n    margin: 0 !important;\n  }\n  .m-xl-1 {\n    margin: 0.25rem !important;\n  }\n  .m-xl-2 {\n    margin: 0.5rem !important;\n  }\n  .m-xl-3 {\n    margin: 1rem !important;\n  }\n  .m-xl-4 {\n    margin: 1.5rem !important;\n  }\n  .m-xl-5 {\n    margin: 3rem !important;\n  }\n  .m-xl-auto {\n    margin: auto !important;\n  }\n  .mx-xl-0 {\n    margin-right: 0 !important;\n    margin-left: 0 !important;\n  }\n  .mx-xl-1 {\n    margin-right: 0.25rem !important;\n    margin-left: 0.25rem !important;\n  }\n  .mx-xl-2 {\n    margin-right: 0.5rem !important;\n    margin-left: 0.5rem !important;\n  }\n  .mx-xl-3 {\n    margin-right: 1rem !important;\n    margin-left: 1rem !important;\n  }\n  .mx-xl-4 {\n    margin-right: 1.5rem !important;\n    margin-left: 1.5rem !important;\n  }\n  .mx-xl-5 {\n    margin-right: 3rem !important;\n    margin-left: 3rem !important;\n  }\n  .mx-xl-auto {\n    margin-right: auto !important;\n    margin-left: auto !important;\n  }\n  .my-xl-0 {\n    margin-top: 0 !important;\n    margin-bottom: 0 !important;\n  }\n  .my-xl-1 {\n    margin-top: 0.25rem !important;\n    margin-bottom: 0.25rem !important;\n  }\n  .my-xl-2 {\n    margin-top: 0.5rem !important;\n    margin-bottom: 0.5rem !important;\n  }\n  .my-xl-3 {\n    margin-top: 1rem !important;\n    margin-bottom: 1rem !important;\n  }\n  .my-xl-4 {\n    margin-top: 1.5rem !important;\n    margin-bottom: 1.5rem !important;\n  }\n  .my-xl-5 {\n    margin-top: 3rem !important;\n    margin-bottom: 3rem !important;\n  }\n  .my-xl-auto {\n    margin-top: auto !important;\n    margin-bottom: auto !important;\n  }\n  .mt-xl-0 {\n    margin-top: 0 !important;\n  }\n  .mt-xl-1 {\n    margin-top: 0.25rem !important;\n  }\n  .mt-xl-2 {\n    margin-top: 0.5rem !important;\n  }\n  .mt-xl-3 {\n    margin-top: 1rem !important;\n  }\n  .mt-xl-4 {\n    margin-top: 1.5rem !important;\n  }\n  .mt-xl-5 {\n    margin-top: 3rem !important;\n  }\n  .mt-xl-auto {\n    margin-top: auto !important;\n  }\n  .me-xl-0 {\n    margin-right: 0 !important;\n  }\n  .me-xl-1 {\n    margin-right: 0.25rem !important;\n  }\n  .me-xl-2 {\n    margin-right: 0.5rem !important;\n  }\n  .me-xl-3 {\n    margin-right: 1rem !important;\n  }\n  .me-xl-4 {\n    margin-right: 1.5rem !important;\n  }\n  .me-xl-5 {\n    margin-right: 3rem !important;\n  }\n  .me-xl-auto {\n    margin-right: auto !important;\n  }\n  .mb-xl-0 {\n    margin-bottom: 0 !important;\n  }\n  .mb-xl-1 {\n    margin-bottom: 0.25rem !important;\n  }\n  .mb-xl-2 {\n    margin-bottom: 0.5rem !important;\n  }\n  .mb-xl-3 {\n    margin-bottom: 1rem !important;\n  }\n  .mb-xl-4 {\n    margin-bottom: 1.5rem !important;\n  }\n  .mb-xl-5 {\n    margin-bottom: 3rem !important;\n  }\n  .mb-xl-auto {\n    margin-bottom: auto !important;\n  }\n  .ms-xl-0 {\n    margin-left: 0 !important;\n  }\n  .ms-xl-1 {\n    margin-left: 0.25rem !important;\n  }\n  .ms-xl-2 {\n    margin-left: 0.5rem !important;\n  }\n  .ms-xl-3 {\n    margin-left: 1rem !important;\n  }\n  .ms-xl-4 {\n    margin-left: 1.5rem !important;\n  }\n  .ms-xl-5 {\n    margin-left: 3rem !important;\n  }\n  .ms-xl-auto {\n    margin-left: auto !important;\n  }\n  .p-xl-0 {\n    padding: 0 !important;\n  }\n  .p-xl-1 {\n    padding: 0.25rem !important;\n  }\n  .p-xl-2 {\n    padding: 0.5rem !important;\n  }\n  .p-xl-3 {\n    padding: 1rem !important;\n  }\n  .p-xl-4 {\n    padding: 1.5rem !important;\n  }\n  .p-xl-5 {\n    padding: 3rem !important;\n  }\n  .px-xl-0 {\n    padding-right: 0 !important;\n    padding-left: 0 !important;\n  }\n  .px-xl-1 {\n    padding-right: 0.25rem !important;\n    padding-left: 0.25rem !important;\n  }\n  .px-xl-2 {\n    padding-right: 0.5rem !important;\n    padding-left: 0.5rem !important;\n  }\n  .px-xl-3 {\n    padding-right: 1rem !important;\n    padding-left: 1rem !important;\n  }\n  .px-xl-4 {\n    padding-right: 1.5rem !important;\n    padding-left: 1.5rem !important;\n  }\n  .px-xl-5 {\n    padding-right: 3rem !important;\n    padding-left: 3rem !important;\n  }\n  .py-xl-0 {\n    padding-top: 0 !important;\n    padding-bottom: 0 !important;\n  }\n  .py-xl-1 {\n    padding-top: 0.25rem !important;\n    padding-bottom: 0.25rem !important;\n  }\n  .py-xl-2 {\n    padding-top: 0.5rem !important;\n    padding-bottom: 0.5rem !important;\n  }\n  .py-xl-3 {\n    padding-top: 1rem !important;\n    padding-bottom: 1rem !important;\n  }\n  .py-xl-4 {\n    padding-top: 1.5rem !important;\n    padding-bottom: 1.5rem !important;\n  }\n  .py-xl-5 {\n    padding-top: 3rem !important;\n    padding-bottom: 3rem !important;\n  }\n  .pt-xl-0 {\n    padding-top: 0 !important;\n  }\n  .pt-xl-1 {\n    padding-top: 0.25rem !important;\n  }\n  .pt-xl-2 {\n    padding-top: 0.5rem !important;\n  }\n  .pt-xl-3 {\n    padding-top: 1rem !important;\n  }\n  .pt-xl-4 {\n    padding-top: 1.5rem !important;\n  }\n  .pt-xl-5 {\n    padding-top: 3rem !important;\n  }\n  .pe-xl-0 {\n    padding-right: 0 !important;\n  }\n  .pe-xl-1 {\n    padding-right: 0.25rem !important;\n  }\n  .pe-xl-2 {\n    padding-right: 0.5rem !important;\n  }\n  .pe-xl-3 {\n    padding-right: 1rem !important;\n  }\n  .pe-xl-4 {\n    padding-right: 1.5rem !important;\n  }\n  .pe-xl-5 {\n    padding-right: 3rem !important;\n  }\n  .pb-xl-0 {\n    padding-bottom: 0 !important;\n  }\n  .pb-xl-1 {\n    padding-bottom: 0.25rem !important;\n  }\n  .pb-xl-2 {\n    padding-bottom: 0.5rem !important;\n  }\n  .pb-xl-3 {\n    padding-bottom: 1rem !important;\n  }\n  .pb-xl-4 {\n    padding-bottom: 1.5rem !important;\n  }\n  .pb-xl-5 {\n    padding-bottom: 3rem !important;\n  }\n  .ps-xl-0 {\n    padding-left: 0 !important;\n  }\n  .ps-xl-1 {\n    padding-left: 0.25rem !important;\n  }\n  .ps-xl-2 {\n    padding-left: 0.5rem !important;\n  }\n  .ps-xl-3 {\n    padding-left: 1rem !important;\n  }\n  .ps-xl-4 {\n    padding-left: 1.5rem !important;\n  }\n  .ps-xl-5 {\n    padding-left: 3rem !important;\n  }\n  .text-xl-start {\n    text-align: left !important;\n  }\n  .text-xl-end {\n    text-align: right !important;\n  }\n  .text-xl-center {\n    text-align: center !important;\n  }\n}\n\n@media (min-width: 1400px) {\n  .float-xxl-start {\n    float: left !important;\n  }\n  .float-xxl-end {\n    float: right !important;\n  }\n  .float-xxl-none {\n    float: none !important;\n  }\n  .d-xxl-inline {\n    display: inline !important;\n  }\n  .d-xxl-inline-block {\n    display: inline-block !important;\n  }\n  .d-xxl-block {\n    display: block !important;\n  }\n  .d-xxl-grid {\n    display: grid !important;\n  }\n  .d-xxl-table {\n    display: table !important;\n  }\n  .d-xxl-table-row {\n    display: table-row !important;\n  }\n  .d-xxl-table-cell {\n    display: table-cell !important;\n  }\n  .d-xxl-flex {\n    display: -ms-flexbox !important;\n    display: flex !important;\n  }\n  .d-xxl-inline-flex {\n    display: -ms-inline-flexbox !important;\n    display: inline-flex !important;\n  }\n  .d-xxl-none {\n    display: none !important;\n  }\n  .flex-xxl-fill {\n    -ms-flex: 1 1 auto !important;\n    flex: 1 1 auto !important;\n  }\n  .flex-xxl-row {\n    -ms-flex-direction: row !important;\n    flex-direction: row !important;\n  }\n  .flex-xxl-column {\n    -ms-flex-direction: column !important;\n    flex-direction: column !important;\n  }\n  .flex-xxl-row-reverse {\n    -ms-flex-direction: row-reverse !important;\n    flex-direction: row-reverse !important;\n  }\n  .flex-xxl-column-reverse {\n    -ms-flex-direction: column-reverse !important;\n    flex-direction: column-reverse !important;\n  }\n  .flex-xxl-grow-0 {\n    -ms-flex-positive: 0 !important;\n    flex-grow: 0 !important;\n  }\n  .flex-xxl-grow-1 {\n    -ms-flex-positive: 1 !important;\n    flex-grow: 1 !important;\n  }\n  .flex-xxl-shrink-0 {\n    -ms-flex-negative: 0 !important;\n    flex-shrink: 0 !important;\n  }\n  .flex-xxl-shrink-1 {\n    -ms-flex-negative: 1 !important;\n    flex-shrink: 1 !important;\n  }\n  .flex-xxl-wrap {\n    -ms-flex-wrap: wrap !important;\n    flex-wrap: wrap !important;\n  }\n  .flex-xxl-nowrap {\n    -ms-flex-wrap: nowrap !important;\n    flex-wrap: nowrap !important;\n  }\n  .flex-xxl-wrap-reverse {\n    -ms-flex-wrap: wrap-reverse !important;\n    flex-wrap: wrap-reverse !important;\n  }\n  .gap-xxl-0 {\n    gap: 0 !important;\n  }\n  .gap-xxl-1 {\n    gap: 0.25rem !important;\n  }\n  .gap-xxl-2 {\n    gap: 0.5rem !important;\n  }\n  .gap-xxl-3 {\n    gap: 1rem !important;\n  }\n  .gap-xxl-4 {\n    gap: 1.5rem !important;\n  }\n  .gap-xxl-5 {\n    gap: 3rem !important;\n  }\n  .justify-content-xxl-start {\n    -ms-flex-pack: start !important;\n    justify-content: flex-start !important;\n  }\n  .justify-content-xxl-end {\n    -ms-flex-pack: end !important;\n    justify-content: flex-end !important;\n  }\n  .justify-content-xxl-center {\n    -ms-flex-pack: center !important;\n    justify-content: center !important;\n  }\n  .justify-content-xxl-between {\n    -ms-flex-pack: justify !important;\n    justify-content: space-between !important;\n  }\n  .justify-content-xxl-around {\n    -ms-flex-pack: distribute !important;\n    justify-content: space-around !important;\n  }\n  .justify-content-xxl-evenly {\n    -ms-flex-pack: space-evenly !important;\n    justify-content: space-evenly !important;\n  }\n  .align-items-xxl-start {\n    -ms-flex-align: start !important;\n    align-items: flex-start !important;\n  }\n  .align-items-xxl-end {\n    -ms-flex-align: end !important;\n    align-items: flex-end !important;\n  }\n  .align-items-xxl-center {\n    -ms-flex-align: center !important;\n    align-items: center !important;\n  }\n  .align-items-xxl-baseline {\n    -ms-flex-align: baseline !important;\n    align-items: baseline !important;\n  }\n  .align-items-xxl-stretch {\n    -ms-flex-align: stretch !important;\n    align-items: stretch !important;\n  }\n  .align-content-xxl-start {\n    -ms-flex-line-pack: start !important;\n    align-content: flex-start !important;\n  }\n  .align-content-xxl-end {\n    -ms-flex-line-pack: end !important;\n    align-content: flex-end !important;\n  }\n  .align-content-xxl-center {\n    -ms-flex-line-pack: center !important;\n    align-content: center !important;\n  }\n  .align-content-xxl-between {\n    -ms-flex-line-pack: justify !important;\n    align-content: space-between !important;\n  }\n  .align-content-xxl-around {\n    -ms-flex-line-pack: distribute !important;\n    align-content: space-around !important;\n  }\n  .align-content-xxl-stretch {\n    -ms-flex-line-pack: stretch !important;\n    align-content: stretch !important;\n  }\n  .align-self-xxl-auto {\n    -ms-flex-item-align: auto !important;\n    align-self: auto !important;\n  }\n  .align-self-xxl-start {\n    -ms-flex-item-align: start !important;\n    align-self: flex-start !important;\n  }\n  .align-self-xxl-end {\n    -ms-flex-item-align: end !important;\n    align-self: flex-end !important;\n  }\n  .align-self-xxl-center {\n    -ms-flex-item-align: center !important;\n    align-self: center !important;\n  }\n  .align-self-xxl-baseline {\n    -ms-flex-item-align: baseline !important;\n    align-self: baseline !important;\n  }\n  .align-self-xxl-stretch {\n    -ms-flex-item-align: stretch !important;\n    align-self: stretch !important;\n  }\n  .order-xxl-first {\n    -ms-flex-order: -1 !important;\n    order: -1 !important;\n  }\n  .order-xxl-0 {\n    -ms-flex-order: 0 !important;\n    order: 0 !important;\n  }\n  .order-xxl-1 {\n    -ms-flex-order: 1 !important;\n    order: 1 !important;\n  }\n  .order-xxl-2 {\n    -ms-flex-order: 2 !important;\n    order: 2 !important;\n  }\n  .order-xxl-3 {\n    -ms-flex-order: 3 !important;\n    order: 3 !important;\n  }\n  .order-xxl-4 {\n    -ms-flex-order: 4 !important;\n    order: 4 !important;\n  }\n  .order-xxl-5 {\n    -ms-flex-order: 5 !important;\n    order: 5 !important;\n  }\n  .order-xxl-last {\n    -ms-flex-order: 6 !important;\n    order: 6 !important;\n  }\n  .m-xxl-0 {\n    margin: 0 !important;\n  }\n  .m-xxl-1 {\n    margin: 0.25rem !important;\n  }\n  .m-xxl-2 {\n    margin: 0.5rem !important;\n  }\n  .m-xxl-3 {\n    margin: 1rem !important;\n  }\n  .m-xxl-4 {\n    margin: 1.5rem !important;\n  }\n  .m-xxl-5 {\n    margin: 3rem !important;\n  }\n  .m-xxl-auto {\n    margin: auto !important;\n  }\n  .mx-xxl-0 {\n    margin-right: 0 !important;\n    margin-left: 0 !important;\n  }\n  .mx-xxl-1 {\n    margin-right: 0.25rem !important;\n    margin-left: 0.25rem !important;\n  }\n  .mx-xxl-2 {\n    margin-right: 0.5rem !important;\n    margin-left: 0.5rem !important;\n  }\n  .mx-xxl-3 {\n    margin-right: 1rem !important;\n    margin-left: 1rem !important;\n  }\n  .mx-xxl-4 {\n    margin-right: 1.5rem !important;\n    margin-left: 1.5rem !important;\n  }\n  .mx-xxl-5 {\n    margin-right: 3rem !important;\n    margin-left: 3rem !important;\n  }\n  .mx-xxl-auto {\n    margin-right: auto !important;\n    margin-left: auto !important;\n  }\n  .my-xxl-0 {\n    margin-top: 0 !important;\n    margin-bottom: 0 !important;\n  }\n  .my-xxl-1 {\n    margin-top: 0.25rem !important;\n    margin-bottom: 0.25rem !important;\n  }\n  .my-xxl-2 {\n    margin-top: 0.5rem !important;\n    margin-bottom: 0.5rem !important;\n  }\n  .my-xxl-3 {\n    margin-top: 1rem !important;\n    margin-bottom: 1rem !important;\n  }\n  .my-xxl-4 {\n    margin-top: 1.5rem !important;\n    margin-bottom: 1.5rem !important;\n  }\n  .my-xxl-5 {\n    margin-top: 3rem !important;\n    margin-bottom: 3rem !important;\n  }\n  .my-xxl-auto {\n    margin-top: auto !important;\n    margin-bottom: auto !important;\n  }\n  .mt-xxl-0 {\n    margin-top: 0 !important;\n  }\n  .mt-xxl-1 {\n    margin-top: 0.25rem !important;\n  }\n  .mt-xxl-2 {\n    margin-top: 0.5rem !important;\n  }\n  .mt-xxl-3 {\n    margin-top: 1rem !important;\n  }\n  .mt-xxl-4 {\n    margin-top: 1.5rem !important;\n  }\n  .mt-xxl-5 {\n    margin-top: 3rem !important;\n  }\n  .mt-xxl-auto {\n    margin-top: auto !important;\n  }\n  .me-xxl-0 {\n    margin-right: 0 !important;\n  }\n  .me-xxl-1 {\n    margin-right: 0.25rem !important;\n  }\n  .me-xxl-2 {\n    margin-right: 0.5rem !important;\n  }\n  .me-xxl-3 {\n    margin-right: 1rem !important;\n  }\n  .me-xxl-4 {\n    margin-right: 1.5rem !important;\n  }\n  .me-xxl-5 {\n    margin-right: 3rem !important;\n  }\n  .me-xxl-auto {\n    margin-right: auto !important;\n  }\n  .mb-xxl-0 {\n    margin-bottom: 0 !important;\n  }\n  .mb-xxl-1 {\n    margin-bottom: 0.25rem !important;\n  }\n  .mb-xxl-2 {\n    margin-bottom: 0.5rem !important;\n  }\n  .mb-xxl-3 {\n    margin-bottom: 1rem !important;\n  }\n  .mb-xxl-4 {\n    margin-bottom: 1.5rem !important;\n  }\n  .mb-xxl-5 {\n    margin-bottom: 3rem !important;\n  }\n  .mb-xxl-auto {\n    margin-bottom: auto !important;\n  }\n  .ms-xxl-0 {\n    margin-left: 0 !important;\n  }\n  .ms-xxl-1 {\n    margin-left: 0.25rem !important;\n  }\n  .ms-xxl-2 {\n    margin-left: 0.5rem !important;\n  }\n  .ms-xxl-3 {\n    margin-left: 1rem !important;\n  }\n  .ms-xxl-4 {\n    margin-left: 1.5rem !important;\n  }\n  .ms-xxl-5 {\n    margin-left: 3rem !important;\n  }\n  .ms-xxl-auto {\n    margin-left: auto !important;\n  }\n  .p-xxl-0 {\n    padding: 0 !important;\n  }\n  .p-xxl-1 {\n    padding: 0.25rem !important;\n  }\n  .p-xxl-2 {\n    padding: 0.5rem !important;\n  }\n  .p-xxl-3 {\n    padding: 1rem !important;\n  }\n  .p-xxl-4 {\n    padding: 1.5rem !important;\n  }\n  .p-xxl-5 {\n    padding: 3rem !important;\n  }\n  .px-xxl-0 {\n    padding-right: 0 !important;\n    padding-left: 0 !important;\n  }\n  .px-xxl-1 {\n    padding-right: 0.25rem !important;\n    padding-left: 0.25rem !important;\n  }\n  .px-xxl-2 {\n    padding-right: 0.5rem !important;\n    padding-left: 0.5rem !important;\n  }\n  .px-xxl-3 {\n    padding-right: 1rem !important;\n    padding-left: 1rem !important;\n  }\n  .px-xxl-4 {\n    padding-right: 1.5rem !important;\n    padding-left: 1.5rem !important;\n  }\n  .px-xxl-5 {\n    padding-right: 3rem !important;\n    padding-left: 3rem !important;\n  }\n  .py-xxl-0 {\n    padding-top: 0 !important;\n    padding-bottom: 0 !important;\n  }\n  .py-xxl-1 {\n    padding-top: 0.25rem !important;\n    padding-bottom: 0.25rem !important;\n  }\n  .py-xxl-2 {\n    padding-top: 0.5rem !important;\n    padding-bottom: 0.5rem !important;\n  }\n  .py-xxl-3 {\n    padding-top: 1rem !important;\n    padding-bottom: 1rem !important;\n  }\n  .py-xxl-4 {\n    padding-top: 1.5rem !important;\n    padding-bottom: 1.5rem !important;\n  }\n  .py-xxl-5 {\n    padding-top: 3rem !important;\n    padding-bottom: 3rem !important;\n  }\n  .pt-xxl-0 {\n    padding-top: 0 !important;\n  }\n  .pt-xxl-1 {\n    padding-top: 0.25rem !important;\n  }\n  .pt-xxl-2 {\n    padding-top: 0.5rem !important;\n  }\n  .pt-xxl-3 {\n    padding-top: 1rem !important;\n  }\n  .pt-xxl-4 {\n    padding-top: 1.5rem !important;\n  }\n  .pt-xxl-5 {\n    padding-top: 3rem !important;\n  }\n  .pe-xxl-0 {\n    padding-right: 0 !important;\n  }\n  .pe-xxl-1 {\n    padding-right: 0.25rem !important;\n  }\n  .pe-xxl-2 {\n    padding-right: 0.5rem !important;\n  }\n  .pe-xxl-3 {\n    padding-right: 1rem !important;\n  }\n  .pe-xxl-4 {\n    padding-right: 1.5rem !important;\n  }\n  .pe-xxl-5 {\n    padding-right: 3rem !important;\n  }\n  .pb-xxl-0 {\n    padding-bottom: 0 !important;\n  }\n  .pb-xxl-1 {\n    padding-bottom: 0.25rem !important;\n  }\n  .pb-xxl-2 {\n    padding-bottom: 0.5rem !important;\n  }\n  .pb-xxl-3 {\n    padding-bottom: 1rem !important;\n  }\n  .pb-xxl-4 {\n    padding-bottom: 1.5rem !important;\n  }\n  .pb-xxl-5 {\n    padding-bottom: 3rem !important;\n  }\n  .ps-xxl-0 {\n    padding-left: 0 !important;\n  }\n  .ps-xxl-1 {\n    padding-left: 0.25rem !important;\n  }\n  .ps-xxl-2 {\n    padding-left: 0.5rem !important;\n  }\n  .ps-xxl-3 {\n    padding-left: 1rem !important;\n  }\n  .ps-xxl-4 {\n    padding-left: 1.5rem !important;\n  }\n  .ps-xxl-5 {\n    padding-left: 3rem !important;\n  }\n  .text-xxl-start {\n    text-align: left !important;\n  }\n  .text-xxl-end {\n    text-align: right !important;\n  }\n  .text-xxl-center {\n    text-align: center !important;\n  }\n}\n\n@media (min-width: 1200px) {\n  .fs-1 {\n    font-size: 2.5rem !important;\n  }\n  .fs-2 {\n    font-size: 2rem !important;\n  }\n  .fs-3 {\n    font-size: 1.75rem !important;\n  }\n  .fs-4 {\n    font-size: 1.5rem !important;\n  }\n}\n\n@media print {\n  .d-print-inline {\n    display: inline !important;\n  }\n  .d-print-inline-block {\n    display: inline-block !important;\n  }\n  .d-print-block {\n    display: block !important;\n  }\n  .d-print-grid {\n    display: grid !important;\n  }\n  .d-print-table {\n    display: table !important;\n  }\n  .d-print-table-row {\n    display: table-row !important;\n  }\n  .d-print-table-cell {\n    display: table-cell !important;\n  }\n  .d-print-flex {\n    display: -ms-flexbox !important;\n    display: flex !important;\n  }\n  .d-print-inline-flex {\n    display: -ms-inline-flexbox !important;\n    display: inline-flex !important;\n  }\n  .d-print-none {\n    display: none !important;\n  }\n}\n\n.badge.bg-light {\n  color: #333;\n}\n"
  },
  {
    "path": "src/sourceDev.WebApp/SharedThemes/united/wwwroot/css/fontawesome-all.css",
    "content": "/*!\n * Font Awesome Free 5.0.8 by @fontawesome - https://fontawesome.com\n * License - https://fontawesome.com/license (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)\n */\n.fa,\n.fas,\n.far,\n.fal,\n.fab {\n  -moz-osx-font-smoothing: grayscale;\n  -webkit-font-smoothing: antialiased;\n  display: inline-block;\n  font-style: normal;\n  font-variant: normal;\n  text-rendering: auto;\n  line-height: 1; }\n\n.fa-lg {\n  font-size: 1.33333em;\n  line-height: 0.75em;\n  vertical-align: -.0667em; }\n\n.fa-xs {\n  font-size: .75em; }\n\n.fa-sm {\n  font-size: .875em; }\n\n.fa-1x {\n  font-size: 1em; }\n\n.fa-2x {\n  font-size: 2em; }\n\n.fa-3x {\n  font-size: 3em; }\n\n.fa-4x {\n  font-size: 4em; }\n\n.fa-5x {\n  font-size: 5em; }\n\n.fa-6x {\n  font-size: 6em; }\n\n.fa-7x {\n  font-size: 7em; }\n\n.fa-8x {\n  font-size: 8em; }\n\n.fa-9x {\n  font-size: 9em; }\n\n.fa-10x {\n  font-size: 10em; }\n\n.fa-fw {\n  text-align: center;\n  width: 1.25em; }\n\n.fa-ul {\n  list-style-type: none;\n  margin-left: 2.5em;\n  padding-left: 0; }\n  .fa-ul > li {\n    position: relative; }\n\n.fa-li {\n  left: -2em;\n  position: absolute;\n  text-align: center;\n  width: 2em;\n  line-height: inherit; }\n\n.fa-border {\n  border: solid 0.08em #eee;\n  border-radius: .1em;\n  padding: .2em .25em .15em; }\n\n.fa-pull-left {\n  float: left; }\n\n.fa-pull-right {\n  float: right; }\n\n.fa.fa-pull-left,\n.fas.fa-pull-left,\n.far.fa-pull-left,\n.fal.fa-pull-left,\n.fab.fa-pull-left {\n  margin-right: .3em; }\n\n.fa.fa-pull-right,\n.fas.fa-pull-right,\n.far.fa-pull-right,\n.fal.fa-pull-right,\n.fab.fa-pull-right {\n  margin-left: .3em; }\n\n.fa-spin {\n  -webkit-animation: fa-spin 2s infinite linear;\n          animation: fa-spin 2s infinite linear; }\n\n.fa-pulse {\n  -webkit-animation: fa-spin 1s infinite steps(8);\n          animation: fa-spin 1s infinite steps(8); }\n\n@-webkit-keyframes fa-spin {\n  0% {\n    -webkit-transform: rotate(0deg);\n            transform: rotate(0deg); }\n  100% {\n    -webkit-transform: rotate(360deg);\n            transform: rotate(360deg); } }\n\n@keyframes fa-spin {\n  0% {\n    -webkit-transform: rotate(0deg);\n            transform: rotate(0deg); }\n  100% {\n    -webkit-transform: rotate(360deg);\n            transform: rotate(360deg); } }\n\n.fa-rotate-90 {\n  -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)\";\n  -webkit-transform: rotate(90deg);\n          transform: rotate(90deg); }\n\n.fa-rotate-180 {\n  -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)\";\n  -webkit-transform: rotate(180deg);\n          transform: rotate(180deg); }\n\n.fa-rotate-270 {\n  -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)\";\n  -webkit-transform: rotate(270deg);\n          transform: rotate(270deg); }\n\n.fa-flip-horizontal {\n  -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)\";\n  -webkit-transform: scale(-1, 1);\n          transform: scale(-1, 1); }\n\n.fa-flip-vertical {\n  -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)\";\n  -webkit-transform: scale(1, -1);\n          transform: scale(1, -1); }\n\n.fa-flip-horizontal.fa-flip-vertical {\n  -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)\";\n  -webkit-transform: scale(-1, -1);\n          transform: scale(-1, -1); }\n\n:root .fa-rotate-90,\n:root .fa-rotate-180,\n:root .fa-rotate-270,\n:root .fa-flip-horizontal,\n:root .fa-flip-vertical {\n  -webkit-filter: none;\n          filter: none; }\n\n.fa-stack {\n  display: inline-block;\n  height: 2em;\n  line-height: 2em;\n  position: relative;\n  vertical-align: middle;\n  width: 2em; }\n\n.fa-stack-1x,\n.fa-stack-2x {\n  left: 0;\n  position: absolute;\n  text-align: center;\n  width: 100%; }\n\n.fa-stack-1x {\n  line-height: inherit; }\n\n.fa-stack-2x {\n  font-size: 2em; }\n\n.fa-inverse {\n  color: #fff; }\n\n/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen\nreaders do not read off random characters that represent icons */\n.fa-500px:before {\n  content: \"\\f26e\"; }\n\n.fa-accessible-icon:before {\n  content: \"\\f368\"; }\n\n.fa-accusoft:before {\n  content: \"\\f369\"; }\n\n.fa-address-book:before {\n  content: \"\\f2b9\"; }\n\n.fa-address-card:before {\n  content: \"\\f2bb\"; }\n\n.fa-adjust:before {\n  content: \"\\f042\"; }\n\n.fa-adn:before {\n  content: \"\\f170\"; }\n\n.fa-adversal:before {\n  content: \"\\f36a\"; }\n\n.fa-affiliatetheme:before {\n  content: \"\\f36b\"; }\n\n.fa-algolia:before {\n  content: \"\\f36c\"; }\n\n.fa-align-center:before {\n  content: \"\\f037\"; }\n\n.fa-align-justify:before {\n  content: \"\\f039\"; }\n\n.fa-align-left:before {\n  content: \"\\f036\"; }\n\n.fa-align-right:before {\n  content: \"\\f038\"; }\n\n.fa-amazon:before {\n  content: \"\\f270\"; }\n\n.fa-amazon-pay:before {\n  content: \"\\f42c\"; }\n\n.fa-ambulance:before {\n  content: \"\\f0f9\"; }\n\n.fa-american-sign-language-interpreting:before {\n  content: \"\\f2a3\"; }\n\n.fa-amilia:before {\n  content: \"\\f36d\"; }\n\n.fa-anchor:before {\n  content: \"\\f13d\"; }\n\n.fa-android:before {\n  content: \"\\f17b\"; }\n\n.fa-angellist:before {\n  content: \"\\f209\"; }\n\n.fa-angle-double-down:before {\n  content: \"\\f103\"; }\n\n.fa-angle-double-left:before {\n  content: \"\\f100\"; }\n\n.fa-angle-double-right:before {\n  content: \"\\f101\"; }\n\n.fa-angle-double-up:before {\n  content: \"\\f102\"; }\n\n.fa-angle-down:before {\n  content: \"\\f107\"; }\n\n.fa-angle-left:before {\n  content: \"\\f104\"; }\n\n.fa-angle-right:before {\n  content: \"\\f105\"; }\n\n.fa-angle-up:before {\n  content: \"\\f106\"; }\n\n.fa-angrycreative:before {\n  content: \"\\f36e\"; }\n\n.fa-angular:before {\n  content: \"\\f420\"; }\n\n.fa-app-store:before {\n  content: \"\\f36f\"; }\n\n.fa-app-store-ios:before {\n  content: \"\\f370\"; }\n\n.fa-apper:before {\n  content: \"\\f371\"; }\n\n.fa-apple:before {\n  content: \"\\f179\"; }\n\n.fa-apple-pay:before {\n  content: \"\\f415\"; }\n\n.fa-archive:before {\n  content: \"\\f187\"; }\n\n.fa-arrow-alt-circle-down:before {\n  content: \"\\f358\"; }\n\n.fa-arrow-alt-circle-left:before {\n  content: \"\\f359\"; }\n\n.fa-arrow-alt-circle-right:before {\n  content: \"\\f35a\"; }\n\n.fa-arrow-alt-circle-up:before {\n  content: \"\\f35b\"; }\n\n.fa-arrow-circle-down:before {\n  content: \"\\f0ab\"; }\n\n.fa-arrow-circle-left:before {\n  content: \"\\f0a8\"; }\n\n.fa-arrow-circle-right:before {\n  content: \"\\f0a9\"; }\n\n.fa-arrow-circle-up:before {\n  content: \"\\f0aa\"; }\n\n.fa-arrow-down:before {\n  content: \"\\f063\"; }\n\n.fa-arrow-left:before {\n  content: \"\\f060\"; }\n\n.fa-arrow-right:before {\n  content: \"\\f061\"; }\n\n.fa-arrow-up:before {\n  content: \"\\f062\"; }\n\n.fa-arrows-alt:before {\n  content: \"\\f0b2\"; }\n\n.fa-arrows-alt-h:before {\n  content: \"\\f337\"; }\n\n.fa-arrows-alt-v:before {\n  content: \"\\f338\"; }\n\n.fa-assistive-listening-systems:before {\n  content: \"\\f2a2\"; }\n\n.fa-asterisk:before {\n  content: \"\\f069\"; }\n\n.fa-asymmetrik:before {\n  content: \"\\f372\"; }\n\n.fa-at:before {\n  content: \"\\f1fa\"; }\n\n.fa-audible:before {\n  content: \"\\f373\"; }\n\n.fa-audio-description:before {\n  content: \"\\f29e\"; }\n\n.fa-autoprefixer:before {\n  content: \"\\f41c\"; }\n\n.fa-avianex:before {\n  content: \"\\f374\"; }\n\n.fa-aviato:before {\n  content: \"\\f421\"; }\n\n.fa-aws:before {\n  content: \"\\f375\"; }\n\n.fa-backward:before {\n  content: \"\\f04a\"; }\n\n.fa-balance-scale:before {\n  content: \"\\f24e\"; }\n\n.fa-ban:before {\n  content: \"\\f05e\"; }\n\n.fa-band-aid:before {\n  content: \"\\f462\"; }\n\n.fa-bandcamp:before {\n  content: \"\\f2d5\"; }\n\n.fa-barcode:before {\n  content: \"\\f02a\"; }\n\n.fa-bars:before {\n  content: \"\\f0c9\"; }\n\n.fa-baseball-ball:before {\n  content: \"\\f433\"; }\n\n.fa-basketball-ball:before {\n  content: \"\\f434\"; }\n\n.fa-bath:before {\n  content: \"\\f2cd\"; }\n\n.fa-battery-empty:before {\n  content: \"\\f244\"; }\n\n.fa-battery-full:before {\n  content: \"\\f240\"; }\n\n.fa-battery-half:before {\n  content: \"\\f242\"; }\n\n.fa-battery-quarter:before {\n  content: \"\\f243\"; }\n\n.fa-battery-three-quarters:before {\n  content: \"\\f241\"; }\n\n.fa-bed:before {\n  content: \"\\f236\"; }\n\n.fa-beer:before {\n  content: \"\\f0fc\"; }\n\n.fa-behance:before {\n  content: \"\\f1b4\"; }\n\n.fa-behance-square:before {\n  content: \"\\f1b5\"; }\n\n.fa-bell:before {\n  content: \"\\f0f3\"; }\n\n.fa-bell-slash:before {\n  content: \"\\f1f6\"; }\n\n.fa-bicycle:before {\n  content: \"\\f206\"; }\n\n.fa-bimobject:before {\n  content: \"\\f378\"; }\n\n.fa-binoculars:before {\n  content: \"\\f1e5\"; }\n\n.fa-birthday-cake:before {\n  content: \"\\f1fd\"; }\n\n.fa-bitbucket:before {\n  content: \"\\f171\"; }\n\n.fa-bitcoin:before {\n  content: \"\\f379\"; }\n\n.fa-bity:before {\n  content: \"\\f37a\"; }\n\n.fa-black-tie:before {\n  content: \"\\f27e\"; }\n\n.fa-blackberry:before {\n  content: \"\\f37b\"; }\n\n.fa-blind:before {\n  content: \"\\f29d\"; }\n\n.fa-blogger:before {\n  content: \"\\f37c\"; }\n\n.fa-blogger-b:before {\n  content: \"\\f37d\"; }\n\n.fa-bluetooth:before {\n  content: \"\\f293\"; }\n\n.fa-bluetooth-b:before {\n  content: \"\\f294\"; }\n\n.fa-bold:before {\n  content: \"\\f032\"; }\n\n.fa-bolt:before {\n  content: \"\\f0e7\"; }\n\n.fa-bomb:before {\n  content: \"\\f1e2\"; }\n\n.fa-book:before {\n  content: \"\\f02d\"; }\n\n.fa-bookmark:before {\n  content: \"\\f02e\"; }\n\n.fa-bowling-ball:before {\n  content: \"\\f436\"; }\n\n.fa-box:before {\n  content: \"\\f466\"; }\n\n.fa-boxes:before {\n  content: \"\\f468\"; }\n\n.fa-braille:before {\n  content: \"\\f2a1\"; }\n\n.fa-briefcase:before {\n  content: \"\\f0b1\"; }\n\n.fa-btc:before {\n  content: \"\\f15a\"; }\n\n.fa-bug:before {\n  content: \"\\f188\"; }\n\n.fa-building:before {\n  content: \"\\f1ad\"; }\n\n.fa-bullhorn:before {\n  content: \"\\f0a1\"; }\n\n.fa-bullseye:before {\n  content: \"\\f140\"; }\n\n.fa-buromobelexperte:before {\n  content: \"\\f37f\"; }\n\n.fa-bus:before {\n  content: \"\\f207\"; }\n\n.fa-buysellads:before {\n  content: \"\\f20d\"; }\n\n.fa-calculator:before {\n  content: \"\\f1ec\"; }\n\n.fa-calendar:before {\n  content: \"\\f133\"; }\n\n.fa-calendar-alt:before {\n  content: \"\\f073\"; }\n\n.fa-calendar-check:before {\n  content: \"\\f274\"; }\n\n.fa-calendar-minus:before {\n  content: \"\\f272\"; }\n\n.fa-calendar-plus:before {\n  content: \"\\f271\"; }\n\n.fa-calendar-times:before {\n  content: \"\\f273\"; }\n\n.fa-camera:before {\n  content: \"\\f030\"; }\n\n.fa-camera-retro:before {\n  content: \"\\f083\"; }\n\n.fa-car:before {\n  content: \"\\f1b9\"; }\n\n.fa-caret-down:before {\n  content: \"\\f0d7\"; }\n\n.fa-caret-left:before {\n  content: \"\\f0d9\"; }\n\n.fa-caret-right:before {\n  content: \"\\f0da\"; }\n\n.fa-caret-square-down:before {\n  content: \"\\f150\"; }\n\n.fa-caret-square-left:before {\n  content: \"\\f191\"; }\n\n.fa-caret-square-right:before {\n  content: \"\\f152\"; }\n\n.fa-caret-square-up:before {\n  content: \"\\f151\"; }\n\n.fa-caret-up:before {\n  content: \"\\f0d8\"; }\n\n.fa-cart-arrow-down:before {\n  content: \"\\f218\"; }\n\n.fa-cart-plus:before {\n  content: \"\\f217\"; }\n\n.fa-cc-amazon-pay:before {\n  content: \"\\f42d\"; }\n\n.fa-cc-amex:before {\n  content: \"\\f1f3\"; }\n\n.fa-cc-apple-pay:before {\n  content: \"\\f416\"; }\n\n.fa-cc-diners-club:before {\n  content: \"\\f24c\"; }\n\n.fa-cc-discover:before {\n  content: \"\\f1f2\"; }\n\n.fa-cc-jcb:before {\n  content: \"\\f24b\"; }\n\n.fa-cc-mastercard:before {\n  content: \"\\f1f1\"; }\n\n.fa-cc-paypal:before {\n  content: \"\\f1f4\"; }\n\n.fa-cc-stripe:before {\n  content: \"\\f1f5\"; }\n\n.fa-cc-visa:before {\n  content: \"\\f1f0\"; }\n\n.fa-centercode:before {\n  content: \"\\f380\"; }\n\n.fa-certificate:before {\n  content: \"\\f0a3\"; }\n\n.fa-chart-area:before {\n  content: \"\\f1fe\"; }\n\n.fa-chart-bar:before {\n  content: \"\\f080\"; }\n\n.fa-chart-line:before {\n  content: \"\\f201\"; }\n\n.fa-chart-pie:before {\n  content: \"\\f200\"; }\n\n.fa-check:before {\n  content: \"\\f00c\"; }\n\n.fa-check-circle:before {\n  content: \"\\f058\"; }\n\n.fa-check-square:before {\n  content: \"\\f14a\"; }\n\n.fa-chess:before {\n  content: \"\\f439\"; }\n\n.fa-chess-bishop:before {\n  content: \"\\f43a\"; }\n\n.fa-chess-board:before {\n  content: \"\\f43c\"; }\n\n.fa-chess-king:before {\n  content: \"\\f43f\"; }\n\n.fa-chess-knight:before {\n  content: \"\\f441\"; }\n\n.fa-chess-pawn:before {\n  content: \"\\f443\"; }\n\n.fa-chess-queen:before {\n  content: \"\\f445\"; }\n\n.fa-chess-rook:before {\n  content: \"\\f447\"; }\n\n.fa-chevron-circle-down:before {\n  content: \"\\f13a\"; }\n\n.fa-chevron-circle-left:before {\n  content: \"\\f137\"; }\n\n.fa-chevron-circle-right:before {\n  content: \"\\f138\"; }\n\n.fa-chevron-circle-up:before {\n  content: \"\\f139\"; }\n\n.fa-chevron-down:before {\n  content: \"\\f078\"; }\n\n.fa-chevron-left:before {\n  content: \"\\f053\"; }\n\n.fa-chevron-right:before {\n  content: \"\\f054\"; }\n\n.fa-chevron-up:before {\n  content: \"\\f077\"; }\n\n.fa-child:before {\n  content: \"\\f1ae\"; }\n\n.fa-chrome:before {\n  content: \"\\f268\"; }\n\n.fa-circle:before {\n  content: \"\\f111\"; }\n\n.fa-circle-notch:before {\n  content: \"\\f1ce\"; }\n\n.fa-clipboard:before {\n  content: \"\\f328\"; }\n\n.fa-clipboard-check:before {\n  content: \"\\f46c\"; }\n\n.fa-clipboard-list:before {\n  content: \"\\f46d\"; }\n\n.fa-clock:before {\n  content: \"\\f017\"; }\n\n.fa-clone:before {\n  content: \"\\f24d\"; }\n\n.fa-closed-captioning:before {\n  content: \"\\f20a\"; }\n\n.fa-cloud:before {\n  content: \"\\f0c2\"; }\n\n.fa-cloud-download-alt:before {\n  content: \"\\f381\"; }\n\n.fa-cloud-upload-alt:before {\n  content: \"\\f382\"; }\n\n.fa-cloudscale:before {\n  content: \"\\f383\"; }\n\n.fa-cloudsmith:before {\n  content: \"\\f384\"; }\n\n.fa-cloudversify:before {\n  content: \"\\f385\"; }\n\n.fa-code:before {\n  content: \"\\f121\"; }\n\n.fa-code-branch:before {\n  content: \"\\f126\"; }\n\n.fa-codepen:before {\n  content: \"\\f1cb\"; }\n\n.fa-codiepie:before {\n  content: \"\\f284\"; }\n\n.fa-coffee:before {\n  content: \"\\f0f4\"; }\n\n.fa-cog:before {\n  content: \"\\f013\"; }\n\n.fa-cogs:before {\n  content: \"\\f085\"; }\n\n.fa-columns:before {\n  content: \"\\f0db\"; }\n\n.fa-comment:before {\n  content: \"\\f075\"; }\n\n.fa-comment-alt:before {\n  content: \"\\f27a\"; }\n\n.fa-comments:before {\n  content: \"\\f086\"; }\n\n.fa-compass:before {\n  content: \"\\f14e\"; }\n\n.fa-compress:before {\n  content: \"\\f066\"; }\n\n.fa-connectdevelop:before {\n  content: \"\\f20e\"; }\n\n.fa-contao:before {\n  content: \"\\f26d\"; }\n\n.fa-copy:before {\n  content: \"\\f0c5\"; }\n\n.fa-copyright:before {\n  content: \"\\f1f9\"; }\n\n.fa-cpanel:before {\n  content: \"\\f388\"; }\n\n.fa-creative-commons:before {\n  content: \"\\f25e\"; }\n\n.fa-credit-card:before {\n  content: \"\\f09d\"; }\n\n.fa-crop:before {\n  content: \"\\f125\"; }\n\n.fa-crosshairs:before {\n  content: \"\\f05b\"; }\n\n.fa-css3:before {\n  content: \"\\f13c\"; }\n\n.fa-css3-alt:before {\n  content: \"\\f38b\"; }\n\n.fa-cube:before {\n  content: \"\\f1b2\"; }\n\n.fa-cubes:before {\n  content: \"\\f1b3\"; }\n\n.fa-cut:before {\n  content: \"\\f0c4\"; }\n\n.fa-cuttlefish:before {\n  content: \"\\f38c\"; }\n\n.fa-d-and-d:before {\n  content: \"\\f38d\"; }\n\n.fa-dashcube:before {\n  content: \"\\f210\"; }\n\n.fa-database:before {\n  content: \"\\f1c0\"; }\n\n.fa-deaf:before {\n  content: \"\\f2a4\"; }\n\n.fa-delicious:before {\n  content: \"\\f1a5\"; }\n\n.fa-deploydog:before {\n  content: \"\\f38e\"; }\n\n.fa-deskpro:before {\n  content: \"\\f38f\"; }\n\n.fa-desktop:before {\n  content: \"\\f108\"; }\n\n.fa-deviantart:before {\n  content: \"\\f1bd\"; }\n\n.fa-digg:before {\n  content: \"\\f1a6\"; }\n\n.fa-digital-ocean:before {\n  content: \"\\f391\"; }\n\n.fa-discord:before {\n  content: \"\\f392\"; }\n\n.fa-discourse:before {\n  content: \"\\f393\"; }\n\n.fa-dna:before {\n  content: \"\\f471\"; }\n\n.fa-dochub:before {\n  content: \"\\f394\"; }\n\n.fa-docker:before {\n  content: \"\\f395\"; }\n\n.fa-dollar-sign:before {\n  content: \"\\f155\"; }\n\n.fa-dolly:before {\n  content: \"\\f472\"; }\n\n.fa-dolly-flatbed:before {\n  content: \"\\f474\"; }\n\n.fa-dot-circle:before {\n  content: \"\\f192\"; }\n\n.fa-download:before {\n  content: \"\\f019\"; }\n\n.fa-draft2digital:before {\n  content: \"\\f396\"; }\n\n.fa-dribbble:before {\n  content: \"\\f17d\"; }\n\n.fa-dribbble-square:before {\n  content: \"\\f397\"; }\n\n.fa-dropbox:before {\n  content: \"\\f16b\"; }\n\n.fa-drupal:before {\n  content: \"\\f1a9\"; }\n\n.fa-dyalog:before {\n  content: \"\\f399\"; }\n\n.fa-earlybirds:before {\n  content: \"\\f39a\"; }\n\n.fa-edge:before {\n  content: \"\\f282\"; }\n\n.fa-edit:before {\n  content: \"\\f044\"; }\n\n.fa-eject:before {\n  content: \"\\f052\"; }\n\n.fa-elementor:before {\n  content: \"\\f430\"; }\n\n.fa-ellipsis-h:before {\n  content: \"\\f141\"; }\n\n.fa-ellipsis-v:before {\n  content: \"\\f142\"; }\n\n.fa-ember:before {\n  content: \"\\f423\"; }\n\n.fa-empire:before {\n  content: \"\\f1d1\"; }\n\n.fa-envelope:before {\n  content: \"\\f0e0\"; }\n\n.fa-envelope-open:before {\n  content: \"\\f2b6\"; }\n\n.fa-envelope-square:before {\n  content: \"\\f199\"; }\n\n.fa-envira:before {\n  content: \"\\f299\"; }\n\n.fa-eraser:before {\n  content: \"\\f12d\"; }\n\n.fa-erlang:before {\n  content: \"\\f39d\"; }\n\n.fa-ethereum:before {\n  content: \"\\f42e\"; }\n\n.fa-etsy:before {\n  content: \"\\f2d7\"; }\n\n.fa-euro-sign:before {\n  content: \"\\f153\"; }\n\n.fa-exchange-alt:before {\n  content: \"\\f362\"; }\n\n.fa-exclamation:before {\n  content: \"\\f12a\"; }\n\n.fa-exclamation-circle:before {\n  content: \"\\f06a\"; }\n\n.fa-exclamation-triangle:before {\n  content: \"\\f071\"; }\n\n.fa-expand:before {\n  content: \"\\f065\"; }\n\n.fa-expand-arrows-alt:before {\n  content: \"\\f31e\"; }\n\n.fa-expeditedssl:before {\n  content: \"\\f23e\"; }\n\n.fa-external-link-alt:before {\n  content: \"\\f35d\"; }\n\n.fa-external-link-square-alt:before {\n  content: \"\\f360\"; }\n\n.fa-eye:before {\n  content: \"\\f06e\"; }\n\n.fa-eye-dropper:before {\n  content: \"\\f1fb\"; }\n\n.fa-eye-slash:before {\n  content: \"\\f070\"; }\n\n.fa-facebook:before {\n  content: \"\\f09a\"; }\n\n.fa-facebook-f:before {\n  content: \"\\f39e\"; }\n\n.fa-facebook-messenger:before {\n  content: \"\\f39f\"; }\n\n.fa-facebook-square:before {\n  content: \"\\f082\"; }\n\n.fa-fast-backward:before {\n  content: \"\\f049\"; }\n\n.fa-fast-forward:before {\n  content: \"\\f050\"; }\n\n.fa-fax:before {\n  content: \"\\f1ac\"; }\n\n.fa-female:before {\n  content: \"\\f182\"; }\n\n.fa-fighter-jet:before {\n  content: \"\\f0fb\"; }\n\n.fa-file:before {\n  content: \"\\f15b\"; }\n\n.fa-file-alt:before {\n  content: \"\\f15c\"; }\n\n.fa-file-archive:before {\n  content: \"\\f1c6\"; }\n\n.fa-file-audio:before {\n  content: \"\\f1c7\"; }\n\n.fa-file-code:before {\n  content: \"\\f1c9\"; }\n\n.fa-file-excel:before {\n  content: \"\\f1c3\"; }\n\n.fa-file-image:before {\n  content: \"\\f1c5\"; }\n\n.fa-file-pdf:before {\n  content: \"\\f1c1\"; }\n\n.fa-file-powerpoint:before {\n  content: \"\\f1c4\"; }\n\n.fa-file-video:before {\n  content: \"\\f1c8\"; }\n\n.fa-file-word:before {\n  content: \"\\f1c2\"; }\n\n.fa-film:before {\n  content: \"\\f008\"; }\n\n.fa-filter:before {\n  content: \"\\f0b0\"; }\n\n.fa-fire:before {\n  content: \"\\f06d\"; }\n\n.fa-fire-extinguisher:before {\n  content: \"\\f134\"; }\n\n.fa-firefox:before {\n  content: \"\\f269\"; }\n\n.fa-first-aid:before {\n  content: \"\\f479\"; }\n\n.fa-first-order:before {\n  content: \"\\f2b0\"; }\n\n.fa-firstdraft:before {\n  content: \"\\f3a1\"; }\n\n.fa-flag:before {\n  content: \"\\f024\"; }\n\n.fa-flag-checkered:before {\n  content: \"\\f11e\"; }\n\n.fa-flask:before {\n  content: \"\\f0c3\"; }\n\n.fa-flickr:before {\n  content: \"\\f16e\"; }\n\n.fa-flipboard:before {\n  content: \"\\f44d\"; }\n\n.fa-fly:before {\n  content: \"\\f417\"; }\n\n.fa-folder:before {\n  content: \"\\f07b\"; }\n\n.fa-folder-open:before {\n  content: \"\\f07c\"; }\n\n.fa-font:before {\n  content: \"\\f031\"; }\n\n.fa-font-awesome:before {\n  content: \"\\f2b4\"; }\n\n.fa-font-awesome-alt:before {\n  content: \"\\f35c\"; }\n\n.fa-font-awesome-flag:before {\n  content: \"\\f425\"; }\n\n.fa-fonticons:before {\n  content: \"\\f280\"; }\n\n.fa-fonticons-fi:before {\n  content: \"\\f3a2\"; }\n\n.fa-football-ball:before {\n  content: \"\\f44e\"; }\n\n.fa-fort-awesome:before {\n  content: \"\\f286\"; }\n\n.fa-fort-awesome-alt:before {\n  content: \"\\f3a3\"; }\n\n.fa-forumbee:before {\n  content: \"\\f211\"; }\n\n.fa-forward:before {\n  content: \"\\f04e\"; }\n\n.fa-foursquare:before {\n  content: \"\\f180\"; }\n\n.fa-free-code-camp:before {\n  content: \"\\f2c5\"; }\n\n.fa-freebsd:before {\n  content: \"\\f3a4\"; }\n\n.fa-frown:before {\n  content: \"\\f119\"; }\n\n.fa-futbol:before {\n  content: \"\\f1e3\"; }\n\n.fa-gamepad:before {\n  content: \"\\f11b\"; }\n\n.fa-gavel:before {\n  content: \"\\f0e3\"; }\n\n.fa-gem:before {\n  content: \"\\f3a5\"; }\n\n.fa-genderless:before {\n  content: \"\\f22d\"; }\n\n.fa-get-pocket:before {\n  content: \"\\f265\"; }\n\n.fa-gg:before {\n  content: \"\\f260\"; }\n\n.fa-gg-circle:before {\n  content: \"\\f261\"; }\n\n.fa-gift:before {\n  content: \"\\f06b\"; }\n\n.fa-git:before {\n  content: \"\\f1d3\"; }\n\n.fa-git-square:before {\n  content: \"\\f1d2\"; }\n\n.fa-github:before {\n  content: \"\\f09b\"; }\n\n.fa-github-alt:before {\n  content: \"\\f113\"; }\n\n.fa-github-square:before {\n  content: \"\\f092\"; }\n\n.fa-gitkraken:before {\n  content: \"\\f3a6\"; }\n\n.fa-gitlab:before {\n  content: \"\\f296\"; }\n\n.fa-gitter:before {\n  content: \"\\f426\"; }\n\n.fa-glass-martini:before {\n  content: \"\\f000\"; }\n\n.fa-glide:before {\n  content: \"\\f2a5\"; }\n\n.fa-glide-g:before {\n  content: \"\\f2a6\"; }\n\n.fa-globe:before {\n  content: \"\\f0ac\"; }\n\n.fa-gofore:before {\n  content: \"\\f3a7\"; }\n\n.fa-golf-ball:before {\n  content: \"\\f450\"; }\n\n.fa-goodreads:before {\n  content: \"\\f3a8\"; }\n\n.fa-goodreads-g:before {\n  content: \"\\f3a9\"; }\n\n.fa-google:before {\n  content: \"\\f1a0\"; }\n\n.fa-google-drive:before {\n  content: \"\\f3aa\"; }\n\n.fa-google-play:before {\n  content: \"\\f3ab\"; }\n\n.fa-google-plus:before {\n  content: \"\\f2b3\"; }\n\n.fa-google-plus-g:before {\n  content: \"\\f0d5\"; }\n\n.fa-google-plus-square:before {\n  content: \"\\f0d4\"; }\n\n.fa-google-wallet:before {\n  content: \"\\f1ee\"; }\n\n.fa-graduation-cap:before {\n  content: \"\\f19d\"; }\n\n.fa-gratipay:before {\n  content: \"\\f184\"; }\n\n.fa-grav:before {\n  content: \"\\f2d6\"; }\n\n.fa-gripfire:before {\n  content: \"\\f3ac\"; }\n\n.fa-grunt:before {\n  content: \"\\f3ad\"; }\n\n.fa-gulp:before {\n  content: \"\\f3ae\"; }\n\n.fa-h-square:before {\n  content: \"\\f0fd\"; }\n\n.fa-hacker-news:before {\n  content: \"\\f1d4\"; }\n\n.fa-hacker-news-square:before {\n  content: \"\\f3af\"; }\n\n.fa-hand-lizard:before {\n  content: \"\\f258\"; }\n\n.fa-hand-paper:before {\n  content: \"\\f256\"; }\n\n.fa-hand-peace:before {\n  content: \"\\f25b\"; }\n\n.fa-hand-point-down:before {\n  content: \"\\f0a7\"; }\n\n.fa-hand-point-left:before {\n  content: \"\\f0a5\"; }\n\n.fa-hand-point-right:before {\n  content: \"\\f0a4\"; }\n\n.fa-hand-point-up:before {\n  content: \"\\f0a6\"; }\n\n.fa-hand-pointer:before {\n  content: \"\\f25a\"; }\n\n.fa-hand-rock:before {\n  content: \"\\f255\"; }\n\n.fa-hand-scissors:before {\n  content: \"\\f257\"; }\n\n.fa-hand-spock:before {\n  content: \"\\f259\"; }\n\n.fa-handshake:before {\n  content: \"\\f2b5\"; }\n\n.fa-hashtag:before {\n  content: \"\\f292\"; }\n\n.fa-hdd:before {\n  content: \"\\f0a0\"; }\n\n.fa-heading:before {\n  content: \"\\f1dc\"; }\n\n.fa-headphones:before {\n  content: \"\\f025\"; }\n\n.fa-heart:before {\n  content: \"\\f004\"; }\n\n.fa-heartbeat:before {\n  content: \"\\f21e\"; }\n\n.fa-hips:before {\n  content: \"\\f452\"; }\n\n.fa-hire-a-helper:before {\n  content: \"\\f3b0\"; }\n\n.fa-history:before {\n  content: \"\\f1da\"; }\n\n.fa-hockey-puck:before {\n  content: \"\\f453\"; }\n\n.fa-home:before {\n  content: \"\\f015\"; }\n\n.fa-hooli:before {\n  content: \"\\f427\"; }\n\n.fa-hospital:before {\n  content: \"\\f0f8\"; }\n\n.fa-hospital-symbol:before {\n  content: \"\\f47e\"; }\n\n.fa-hotjar:before {\n  content: \"\\f3b1\"; }\n\n.fa-hourglass:before {\n  content: \"\\f254\"; }\n\n.fa-hourglass-end:before {\n  content: \"\\f253\"; }\n\n.fa-hourglass-half:before {\n  content: \"\\f252\"; }\n\n.fa-hourglass-start:before {\n  content: \"\\f251\"; }\n\n.fa-houzz:before {\n  content: \"\\f27c\"; }\n\n.fa-html5:before {\n  content: \"\\f13b\"; }\n\n.fa-hubspot:before {\n  content: \"\\f3b2\"; }\n\n.fa-i-cursor:before {\n  content: \"\\f246\"; }\n\n.fa-id-badge:before {\n  content: \"\\f2c1\"; }\n\n.fa-id-card:before {\n  content: \"\\f2c2\"; }\n\n.fa-image:before {\n  content: \"\\f03e\"; }\n\n.fa-images:before {\n  content: \"\\f302\"; }\n\n.fa-imdb:before {\n  content: \"\\f2d8\"; }\n\n.fa-inbox:before {\n  content: \"\\f01c\"; }\n\n.fa-indent:before {\n  content: \"\\f03c\"; }\n\n.fa-industry:before {\n  content: \"\\f275\"; }\n\n.fa-info:before {\n  content: \"\\f129\"; }\n\n.fa-info-circle:before {\n  content: \"\\f05a\"; }\n\n.fa-instagram:before {\n  content: \"\\f16d\"; }\n\n.fa-internet-explorer:before {\n  content: \"\\f26b\"; }\n\n.fa-ioxhost:before {\n  content: \"\\f208\"; }\n\n.fa-italic:before {\n  content: \"\\f033\"; }\n\n.fa-itunes:before {\n  content: \"\\f3b4\"; }\n\n.fa-itunes-note:before {\n  content: \"\\f3b5\"; }\n\n.fa-jenkins:before {\n  content: \"\\f3b6\"; }\n\n.fa-joget:before {\n  content: \"\\f3b7\"; }\n\n.fa-joomla:before {\n  content: \"\\f1aa\"; }\n\n.fa-js:before {\n  content: \"\\f3b8\"; }\n\n.fa-js-square:before {\n  content: \"\\f3b9\"; }\n\n.fa-jsfiddle:before {\n  content: \"\\f1cc\"; }\n\n.fa-key:before {\n  content: \"\\f084\"; }\n\n.fa-keyboard:before {\n  content: \"\\f11c\"; }\n\n.fa-keycdn:before {\n  content: \"\\f3ba\"; }\n\n.fa-kickstarter:before {\n  content: \"\\f3bb\"; }\n\n.fa-kickstarter-k:before {\n  content: \"\\f3bc\"; }\n\n.fa-korvue:before {\n  content: \"\\f42f\"; }\n\n.fa-language:before {\n  content: \"\\f1ab\"; }\n\n.fa-laptop:before {\n  content: \"\\f109\"; }\n\n.fa-laravel:before {\n  content: \"\\f3bd\"; }\n\n.fa-lastfm:before {\n  content: \"\\f202\"; }\n\n.fa-lastfm-square:before {\n  content: \"\\f203\"; }\n\n.fa-leaf:before {\n  content: \"\\f06c\"; }\n\n.fa-leanpub:before {\n  content: \"\\f212\"; }\n\n.fa-lemon:before {\n  content: \"\\f094\"; }\n\n.fa-less:before {\n  content: \"\\f41d\"; }\n\n.fa-level-down-alt:before {\n  content: \"\\f3be\"; }\n\n.fa-level-up-alt:before {\n  content: \"\\f3bf\"; }\n\n.fa-life-ring:before {\n  content: \"\\f1cd\"; }\n\n.fa-lightbulb:before {\n  content: \"\\f0eb\"; }\n\n.fa-line:before {\n  content: \"\\f3c0\"; }\n\n.fa-link:before {\n  content: \"\\f0c1\"; }\n\n.fa-linkedin:before {\n  content: \"\\f08c\"; }\n\n.fa-linkedin-in:before {\n  content: \"\\f0e1\"; }\n\n.fa-linode:before {\n  content: \"\\f2b8\"; }\n\n.fa-linux:before {\n  content: \"\\f17c\"; }\n\n.fa-lira-sign:before {\n  content: \"\\f195\"; }\n\n.fa-list:before {\n  content: \"\\f03a\"; }\n\n.fa-list-alt:before {\n  content: \"\\f022\"; }\n\n.fa-list-ol:before {\n  content: \"\\f0cb\"; }\n\n.fa-list-ul:before {\n  content: \"\\f0ca\"; }\n\n.fa-location-arrow:before {\n  content: \"\\f124\"; }\n\n.fa-lock:before {\n  content: \"\\f023\"; }\n\n.fa-lock-open:before {\n  content: \"\\f3c1\"; }\n\n.fa-long-arrow-alt-down:before {\n  content: \"\\f309\"; }\n\n.fa-long-arrow-alt-left:before {\n  content: \"\\f30a\"; }\n\n.fa-long-arrow-alt-right:before {\n  content: \"\\f30b\"; }\n\n.fa-long-arrow-alt-up:before {\n  content: \"\\f30c\"; }\n\n.fa-low-vision:before {\n  content: \"\\f2a8\"; }\n\n.fa-lyft:before {\n  content: \"\\f3c3\"; }\n\n.fa-magento:before {\n  content: \"\\f3c4\"; }\n\n.fa-magic:before {\n  content: \"\\f0d0\"; }\n\n.fa-magnet:before {\n  content: \"\\f076\"; }\n\n.fa-male:before {\n  content: \"\\f183\"; }\n\n.fa-map:before {\n  content: \"\\f279\"; }\n\n.fa-map-marker:before {\n  content: \"\\f041\"; }\n\n.fa-map-marker-alt:before {\n  content: \"\\f3c5\"; }\n\n.fa-map-pin:before {\n  content: \"\\f276\"; }\n\n.fa-map-signs:before {\n  content: \"\\f277\"; }\n\n.fa-mars:before {\n  content: \"\\f222\"; }\n\n.fa-mars-double:before {\n  content: \"\\f227\"; }\n\n.fa-mars-stroke:before {\n  content: \"\\f229\"; }\n\n.fa-mars-stroke-h:before {\n  content: \"\\f22b\"; }\n\n.fa-mars-stroke-v:before {\n  content: \"\\f22a\"; }\n\n.fa-maxcdn:before {\n  content: \"\\f136\"; }\n\n.fa-medapps:before {\n  content: \"\\f3c6\"; }\n\n.fa-medium:before {\n  content: \"\\f23a\"; }\n\n.fa-medium-m:before {\n  content: \"\\f3c7\"; }\n\n.fa-medkit:before {\n  content: \"\\f0fa\"; }\n\n.fa-medrt:before {\n  content: \"\\f3c8\"; }\n\n.fa-meetup:before {\n  content: \"\\f2e0\"; }\n\n.fa-meh:before {\n  content: \"\\f11a\"; }\n\n.fa-mercury:before {\n  content: \"\\f223\"; }\n\n.fa-microchip:before {\n  content: \"\\f2db\"; }\n\n.fa-microphone:before {\n  content: \"\\f130\"; }\n\n.fa-microphone-slash:before {\n  content: \"\\f131\"; }\n\n.fa-microsoft:before {\n  content: \"\\f3ca\"; }\n\n.fa-minus:before {\n  content: \"\\f068\"; }\n\n.fa-minus-circle:before {\n  content: \"\\f056\"; }\n\n.fa-minus-square:before {\n  content: \"\\f146\"; }\n\n.fa-mix:before {\n  content: \"\\f3cb\"; }\n\n.fa-mixcloud:before {\n  content: \"\\f289\"; }\n\n.fa-mizuni:before {\n  content: \"\\f3cc\"; }\n\n.fa-mobile:before {\n  content: \"\\f10b\"; }\n\n.fa-mobile-alt:before {\n  content: \"\\f3cd\"; }\n\n.fa-modx:before {\n  content: \"\\f285\"; }\n\n.fa-monero:before {\n  content: \"\\f3d0\"; }\n\n.fa-money-bill-alt:before {\n  content: \"\\f3d1\"; }\n\n.fa-moon:before {\n  content: \"\\f186\"; }\n\n.fa-motorcycle:before {\n  content: \"\\f21c\"; }\n\n.fa-mouse-pointer:before {\n  content: \"\\f245\"; }\n\n.fa-music:before {\n  content: \"\\f001\"; }\n\n.fa-napster:before {\n  content: \"\\f3d2\"; }\n\n.fa-neuter:before {\n  content: \"\\f22c\"; }\n\n.fa-newspaper:before {\n  content: \"\\f1ea\"; }\n\n.fa-nintendo-switch:before {\n  content: \"\\f418\"; }\n\n.fa-node:before {\n  content: \"\\f419\"; }\n\n.fa-node-js:before {\n  content: \"\\f3d3\"; }\n\n.fa-npm:before {\n  content: \"\\f3d4\"; }\n\n.fa-ns8:before {\n  content: \"\\f3d5\"; }\n\n.fa-nutritionix:before {\n  content: \"\\f3d6\"; }\n\n.fa-object-group:before {\n  content: \"\\f247\"; }\n\n.fa-object-ungroup:before {\n  content: \"\\f248\"; }\n\n.fa-odnoklassniki:before {\n  content: \"\\f263\"; }\n\n.fa-odnoklassniki-square:before {\n  content: \"\\f264\"; }\n\n.fa-opencart:before {\n  content: \"\\f23d\"; }\n\n.fa-openid:before {\n  content: \"\\f19b\"; }\n\n.fa-opera:before {\n  content: \"\\f26a\"; }\n\n.fa-optin-monster:before {\n  content: \"\\f23c\"; }\n\n.fa-osi:before {\n  content: \"\\f41a\"; }\n\n.fa-outdent:before {\n  content: \"\\f03b\"; }\n\n.fa-page4:before {\n  content: \"\\f3d7\"; }\n\n.fa-pagelines:before {\n  content: \"\\f18c\"; }\n\n.fa-paint-brush:before {\n  content: \"\\f1fc\"; }\n\n.fa-palfed:before {\n  content: \"\\f3d8\"; }\n\n.fa-pallet:before {\n  content: \"\\f482\"; }\n\n.fa-paper-plane:before {\n  content: \"\\f1d8\"; }\n\n.fa-paperclip:before {\n  content: \"\\f0c6\"; }\n\n.fa-paragraph:before {\n  content: \"\\f1dd\"; }\n\n.fa-paste:before {\n  content: \"\\f0ea\"; }\n\n.fa-patreon:before {\n  content: \"\\f3d9\"; }\n\n.fa-pause:before {\n  content: \"\\f04c\"; }\n\n.fa-pause-circle:before {\n  content: \"\\f28b\"; }\n\n.fa-paw:before {\n  content: \"\\f1b0\"; }\n\n.fa-paypal:before {\n  content: \"\\f1ed\"; }\n\n.fa-pen-square:before {\n  content: \"\\f14b\"; }\n\n.fa-pencil-alt:before {\n  content: \"\\f303\"; }\n\n.fa-percent:before {\n  content: \"\\f295\"; }\n\n.fa-periscope:before {\n  content: \"\\f3da\"; }\n\n.fa-phabricator:before {\n  content: \"\\f3db\"; }\n\n.fa-phoenix-framework:before {\n  content: \"\\f3dc\"; }\n\n.fa-phone:before {\n  content: \"\\f095\"; }\n\n.fa-phone-square:before {\n  content: \"\\f098\"; }\n\n.fa-phone-volume:before {\n  content: \"\\f2a0\"; }\n\n.fa-php:before {\n  content: \"\\f457\"; }\n\n.fa-pied-piper:before {\n  content: \"\\f2ae\"; }\n\n.fa-pied-piper-alt:before {\n  content: \"\\f1a8\"; }\n\n.fa-pied-piper-pp:before {\n  content: \"\\f1a7\"; }\n\n.fa-pills:before {\n  content: \"\\f484\"; }\n\n.fa-pinterest:before {\n  content: \"\\f0d2\"; }\n\n.fa-pinterest-p:before {\n  content: \"\\f231\"; }\n\n.fa-pinterest-square:before {\n  content: \"\\f0d3\"; }\n\n.fa-plane:before {\n  content: \"\\f072\"; }\n\n.fa-play:before {\n  content: \"\\f04b\"; }\n\n.fa-play-circle:before {\n  content: \"\\f144\"; }\n\n.fa-playstation:before {\n  content: \"\\f3df\"; }\n\n.fa-plug:before {\n  content: \"\\f1e6\"; }\n\n.fa-plus:before {\n  content: \"\\f067\"; }\n\n.fa-plus-circle:before {\n  content: \"\\f055\"; }\n\n.fa-plus-square:before {\n  content: \"\\f0fe\"; }\n\n.fa-podcast:before {\n  content: \"\\f2ce\"; }\n\n.fa-pound-sign:before {\n  content: \"\\f154\"; }\n\n.fa-power-off:before {\n  content: \"\\f011\"; }\n\n.fa-print:before {\n  content: \"\\f02f\"; }\n\n.fa-product-hunt:before {\n  content: \"\\f288\"; }\n\n.fa-pushed:before {\n  content: \"\\f3e1\"; }\n\n.fa-puzzle-piece:before {\n  content: \"\\f12e\"; }\n\n.fa-python:before {\n  content: \"\\f3e2\"; }\n\n.fa-qq:before {\n  content: \"\\f1d6\"; }\n\n.fa-qrcode:before {\n  content: \"\\f029\"; }\n\n.fa-question:before {\n  content: \"\\f128\"; }\n\n.fa-question-circle:before {\n  content: \"\\f059\"; }\n\n.fa-quidditch:before {\n  content: \"\\f458\"; }\n\n.fa-quinscape:before {\n  content: \"\\f459\"; }\n\n.fa-quora:before {\n  content: \"\\f2c4\"; }\n\n.fa-quote-left:before {\n  content: \"\\f10d\"; }\n\n.fa-quote-right:before {\n  content: \"\\f10e\"; }\n\n.fa-random:before {\n  content: \"\\f074\"; }\n\n.fa-ravelry:before {\n  content: \"\\f2d9\"; }\n\n.fa-react:before {\n  content: \"\\f41b\"; }\n\n.fa-rebel:before {\n  content: \"\\f1d0\"; }\n\n.fa-recycle:before {\n  content: \"\\f1b8\"; }\n\n.fa-red-river:before {\n  content: \"\\f3e3\"; }\n\n.fa-reddit:before {\n  content: \"\\f1a1\"; }\n\n.fa-reddit-alien:before {\n  content: \"\\f281\"; }\n\n.fa-reddit-square:before {\n  content: \"\\f1a2\"; }\n\n.fa-redo:before {\n  content: \"\\f01e\"; }\n\n.fa-redo-alt:before {\n  content: \"\\f2f9\"; }\n\n.fa-registered:before {\n  content: \"\\f25d\"; }\n\n.fa-rendact:before {\n  content: \"\\f3e4\"; }\n\n.fa-renren:before {\n  content: \"\\f18b\"; }\n\n.fa-reply:before {\n  content: \"\\f3e5\"; }\n\n.fa-reply-all:before {\n  content: \"\\f122\"; }\n\n.fa-replyd:before {\n  content: \"\\f3e6\"; }\n\n.fa-resolving:before {\n  content: \"\\f3e7\"; }\n\n.fa-retweet:before {\n  content: \"\\f079\"; }\n\n.fa-road:before {\n  content: \"\\f018\"; }\n\n.fa-rocket:before {\n  content: \"\\f135\"; }\n\n.fa-rocketchat:before {\n  content: \"\\f3e8\"; }\n\n.fa-rockrms:before {\n  content: \"\\f3e9\"; }\n\n.fa-rss:before {\n  content: \"\\f09e\"; }\n\n.fa-rss-square:before {\n  content: \"\\f143\"; }\n\n.fa-ruble-sign:before {\n  content: \"\\f158\"; }\n\n.fa-rupee-sign:before {\n  content: \"\\f156\"; }\n\n.fa-safari:before {\n  content: \"\\f267\"; }\n\n.fa-sass:before {\n  content: \"\\f41e\"; }\n\n.fa-save:before {\n  content: \"\\f0c7\"; }\n\n.fa-schlix:before {\n  content: \"\\f3ea\"; }\n\n.fa-scribd:before {\n  content: \"\\f28a\"; }\n\n.fa-search:before {\n  content: \"\\f002\"; }\n\n.fa-search-minus:before {\n  content: \"\\f010\"; }\n\n.fa-search-plus:before {\n  content: \"\\f00e\"; }\n\n.fa-searchengin:before {\n  content: \"\\f3eb\"; }\n\n.fa-sellcast:before {\n  content: \"\\f2da\"; }\n\n.fa-sellsy:before {\n  content: \"\\f213\"; }\n\n.fa-server:before {\n  content: \"\\f233\"; }\n\n.fa-servicestack:before {\n  content: \"\\f3ec\"; }\n\n.fa-share:before {\n  content: \"\\f064\"; }\n\n.fa-share-alt:before {\n  content: \"\\f1e0\"; }\n\n.fa-share-alt-square:before {\n  content: \"\\f1e1\"; }\n\n.fa-share-square:before {\n  content: \"\\f14d\"; }\n\n.fa-shekel-sign:before {\n  content: \"\\f20b\"; }\n\n.fa-shield-alt:before {\n  content: \"\\f3ed\"; }\n\n.fa-ship:before {\n  content: \"\\f21a\"; }\n\n.fa-shipping-fast:before {\n  content: \"\\f48b\"; }\n\n.fa-shirtsinbulk:before {\n  content: \"\\f214\"; }\n\n.fa-shopping-bag:before {\n  content: \"\\f290\"; }\n\n.fa-shopping-basket:before {\n  content: \"\\f291\"; }\n\n.fa-shopping-cart:before {\n  content: \"\\f07a\"; }\n\n.fa-shower:before {\n  content: \"\\f2cc\"; }\n\n.fa-sign-in-alt:before {\n  content: \"\\f2f6\"; }\n\n.fa-sign-language:before {\n  content: \"\\f2a7\"; }\n\n.fa-sign-out-alt:before {\n  content: \"\\f2f5\"; }\n\n.fa-signal:before {\n  content: \"\\f012\"; }\n\n.fa-simplybuilt:before {\n  content: \"\\f215\"; }\n\n.fa-sistrix:before {\n  content: \"\\f3ee\"; }\n\n.fa-sitemap:before {\n  content: \"\\f0e8\"; }\n\n.fa-skyatlas:before {\n  content: \"\\f216\"; }\n\n.fa-skype:before {\n  content: \"\\f17e\"; }\n\n.fa-slack:before {\n  content: \"\\f198\"; }\n\n.fa-slack-hash:before {\n  content: \"\\f3ef\"; }\n\n.fa-sliders-h:before {\n  content: \"\\f1de\"; }\n\n.fa-slideshare:before {\n  content: \"\\f1e7\"; }\n\n.fa-smile:before {\n  content: \"\\f118\"; }\n\n.fa-snapchat:before {\n  content: \"\\f2ab\"; }\n\n.fa-snapchat-ghost:before {\n  content: \"\\f2ac\"; }\n\n.fa-snapchat-square:before {\n  content: \"\\f2ad\"; }\n\n.fa-snowflake:before {\n  content: \"\\f2dc\"; }\n\n.fa-sort:before {\n  content: \"\\f0dc\"; }\n\n.fa-sort-alpha-down:before {\n  content: \"\\f15d\"; }\n\n.fa-sort-alpha-up:before {\n  content: \"\\f15e\"; }\n\n.fa-sort-amount-down:before {\n  content: \"\\f160\"; }\n\n.fa-sort-amount-up:before {\n  content: \"\\f161\"; }\n\n.fa-sort-down:before {\n  content: \"\\f0dd\"; }\n\n.fa-sort-numeric-down:before {\n  content: \"\\f162\"; }\n\n.fa-sort-numeric-up:before {\n  content: \"\\f163\"; }\n\n.fa-sort-up:before {\n  content: \"\\f0de\"; }\n\n.fa-soundcloud:before {\n  content: \"\\f1be\"; }\n\n.fa-space-shuttle:before {\n  content: \"\\f197\"; }\n\n.fa-speakap:before {\n  content: \"\\f3f3\"; }\n\n.fa-spinner:before {\n  content: \"\\f110\"; }\n\n.fa-spotify:before {\n  content: \"\\f1bc\"; }\n\n.fa-square:before {\n  content: \"\\f0c8\"; }\n\n.fa-square-full:before {\n  content: \"\\f45c\"; }\n\n.fa-stack-exchange:before {\n  content: \"\\f18d\"; }\n\n.fa-stack-overflow:before {\n  content: \"\\f16c\"; }\n\n.fa-star:before {\n  content: \"\\f005\"; }\n\n.fa-star-half:before {\n  content: \"\\f089\"; }\n\n.fa-staylinked:before {\n  content: \"\\f3f5\"; }\n\n.fa-steam:before {\n  content: \"\\f1b6\"; }\n\n.fa-steam-square:before {\n  content: \"\\f1b7\"; }\n\n.fa-steam-symbol:before {\n  content: \"\\f3f6\"; }\n\n.fa-step-backward:before {\n  content: \"\\f048\"; }\n\n.fa-step-forward:before {\n  content: \"\\f051\"; }\n\n.fa-stethoscope:before {\n  content: \"\\f0f1\"; }\n\n.fa-sticker-mule:before {\n  content: \"\\f3f7\"; }\n\n.fa-sticky-note:before {\n  content: \"\\f249\"; }\n\n.fa-stop:before {\n  content: \"\\f04d\"; }\n\n.fa-stop-circle:before {\n  content: \"\\f28d\"; }\n\n.fa-stopwatch:before {\n  content: \"\\f2f2\"; }\n\n.fa-strava:before {\n  content: \"\\f428\"; }\n\n.fa-street-view:before {\n  content: \"\\f21d\"; }\n\n.fa-strikethrough:before {\n  content: \"\\f0cc\"; }\n\n.fa-stripe:before {\n  content: \"\\f429\"; }\n\n.fa-stripe-s:before {\n  content: \"\\f42a\"; }\n\n.fa-studiovinari:before {\n  content: \"\\f3f8\"; }\n\n.fa-stumbleupon:before {\n  content: \"\\f1a4\"; }\n\n.fa-stumbleupon-circle:before {\n  content: \"\\f1a3\"; }\n\n.fa-subscript:before {\n  content: \"\\f12c\"; }\n\n.fa-subway:before {\n  content: \"\\f239\"; }\n\n.fa-suitcase:before {\n  content: \"\\f0f2\"; }\n\n.fa-sun:before {\n  content: \"\\f185\"; }\n\n.fa-superpowers:before {\n  content: \"\\f2dd\"; }\n\n.fa-superscript:before {\n  content: \"\\f12b\"; }\n\n.fa-supple:before {\n  content: \"\\f3f9\"; }\n\n.fa-sync:before {\n  content: \"\\f021\"; }\n\n.fa-sync-alt:before {\n  content: \"\\f2f1\"; }\n\n.fa-syringe:before {\n  content: \"\\f48e\"; }\n\n.fa-table:before {\n  content: \"\\f0ce\"; }\n\n.fa-table-tennis:before {\n  content: \"\\f45d\"; }\n\n.fa-tablet:before {\n  content: \"\\f10a\"; }\n\n.fa-tablet-alt:before {\n  content: \"\\f3fa\"; }\n\n.fa-tachometer-alt:before {\n  content: \"\\f3fd\"; }\n\n.fa-tag:before {\n  content: \"\\f02b\"; }\n\n.fa-tags:before {\n  content: \"\\f02c\"; }\n\n.fa-tasks:before {\n  content: \"\\f0ae\"; }\n\n.fa-taxi:before {\n  content: \"\\f1ba\"; }\n\n.fa-telegram:before {\n  content: \"\\f2c6\"; }\n\n.fa-telegram-plane:before {\n  content: \"\\f3fe\"; }\n\n.fa-tencent-weibo:before {\n  content: \"\\f1d5\"; }\n\n.fa-terminal:before {\n  content: \"\\f120\"; }\n\n.fa-text-height:before {\n  content: \"\\f034\"; }\n\n.fa-text-width:before {\n  content: \"\\f035\"; }\n\n.fa-th:before {\n  content: \"\\f00a\"; }\n\n.fa-th-large:before {\n  content: \"\\f009\"; }\n\n.fa-th-list:before {\n  content: \"\\f00b\"; }\n\n.fa-themeisle:before {\n  content: \"\\f2b2\"; }\n\n.fa-thermometer:before {\n  content: \"\\f491\"; }\n\n.fa-thermometer-empty:before {\n  content: \"\\f2cb\"; }\n\n.fa-thermometer-full:before {\n  content: \"\\f2c7\"; }\n\n.fa-thermometer-half:before {\n  content: \"\\f2c9\"; }\n\n.fa-thermometer-quarter:before {\n  content: \"\\f2ca\"; }\n\n.fa-thermometer-three-quarters:before {\n  content: \"\\f2c8\"; }\n\n.fa-thumbs-down:before {\n  content: \"\\f165\"; }\n\n.fa-thumbs-up:before {\n  content: \"\\f164\"; }\n\n.fa-thumbtack:before {\n  content: \"\\f08d\"; }\n\n.fa-ticket-alt:before {\n  content: \"\\f3ff\"; }\n\n.fa-times:before {\n  content: \"\\f00d\"; }\n\n.fa-times-circle:before {\n  content: \"\\f057\"; }\n\n.fa-tint:before {\n  content: \"\\f043\"; }\n\n.fa-toggle-off:before {\n  content: \"\\f204\"; }\n\n.fa-toggle-on:before {\n  content: \"\\f205\"; }\n\n.fa-trademark:before {\n  content: \"\\f25c\"; }\n\n.fa-train:before {\n  content: \"\\f238\"; }\n\n.fa-transgender:before {\n  content: \"\\f224\"; }\n\n.fa-transgender-alt:before {\n  content: \"\\f225\"; }\n\n.fa-trash:before {\n  content: \"\\f1f8\"; }\n\n.fa-trash-alt:before {\n  content: \"\\f2ed\"; }\n\n.fa-tree:before {\n  content: \"\\f1bb\"; }\n\n.fa-trello:before {\n  content: \"\\f181\"; }\n\n.fa-tripadvisor:before {\n  content: \"\\f262\"; }\n\n.fa-trophy:before {\n  content: \"\\f091\"; }\n\n.fa-truck:before {\n  content: \"\\f0d1\"; }\n\n.fa-tty:before {\n  content: \"\\f1e4\"; }\n\n.fa-tumblr:before {\n  content: \"\\f173\"; }\n\n.fa-tumblr-square:before {\n  content: \"\\f174\"; }\n\n.fa-tv:before {\n  content: \"\\f26c\"; }\n\n.fa-twitch:before {\n  content: \"\\f1e8\"; }\n\n.fa-twitter:before {\n  content: \"\\f099\"; }\n\n.fa-twitter-square:before {\n  content: \"\\f081\"; }\n\n.fa-typo3:before {\n  content: \"\\f42b\"; }\n\n.fa-uber:before {\n  content: \"\\f402\"; }\n\n.fa-uikit:before {\n  content: \"\\f403\"; }\n\n.fa-umbrella:before {\n  content: \"\\f0e9\"; }\n\n.fa-underline:before {\n  content: \"\\f0cd\"; }\n\n.fa-undo:before {\n  content: \"\\f0e2\"; }\n\n.fa-undo-alt:before {\n  content: \"\\f2ea\"; }\n\n.fa-uniregistry:before {\n  content: \"\\f404\"; }\n\n.fa-universal-access:before {\n  content: \"\\f29a\"; }\n\n.fa-university:before {\n  content: \"\\f19c\"; }\n\n.fa-unlink:before {\n  content: \"\\f127\"; }\n\n.fa-unlock:before {\n  content: \"\\f09c\"; }\n\n.fa-unlock-alt:before {\n  content: \"\\f13e\"; }\n\n.fa-untappd:before {\n  content: \"\\f405\"; }\n\n.fa-upload:before {\n  content: \"\\f093\"; }\n\n.fa-usb:before {\n  content: \"\\f287\"; }\n\n.fa-user:before {\n  content: \"\\f007\"; }\n\n.fa-user-circle:before {\n  content: \"\\f2bd\"; }\n\n.fa-user-md:before {\n  content: \"\\f0f0\"; }\n\n.fa-user-plus:before {\n  content: \"\\f234\"; }\n\n.fa-user-secret:before {\n  content: \"\\f21b\"; }\n\n.fa-user-times:before {\n  content: \"\\f235\"; }\n\n.fa-users:before {\n  content: \"\\f0c0\"; }\n\n.fa-ussunnah:before {\n  content: \"\\f407\"; }\n\n.fa-utensil-spoon:before {\n  content: \"\\f2e5\"; }\n\n.fa-utensils:before {\n  content: \"\\f2e7\"; }\n\n.fa-vaadin:before {\n  content: \"\\f408\"; }\n\n.fa-venus:before {\n  content: \"\\f221\"; }\n\n.fa-venus-double:before {\n  content: \"\\f226\"; }\n\n.fa-venus-mars:before {\n  content: \"\\f228\"; }\n\n.fa-viacoin:before {\n  content: \"\\f237\"; }\n\n.fa-viadeo:before {\n  content: \"\\f2a9\"; }\n\n.fa-viadeo-square:before {\n  content: \"\\f2aa\"; }\n\n.fa-viber:before {\n  content: \"\\f409\"; }\n\n.fa-video:before {\n  content: \"\\f03d\"; }\n\n.fa-vimeo:before {\n  content: \"\\f40a\"; }\n\n.fa-vimeo-square:before {\n  content: \"\\f194\"; }\n\n.fa-vimeo-v:before {\n  content: \"\\f27d\"; }\n\n.fa-vine:before {\n  content: \"\\f1ca\"; }\n\n.fa-vk:before {\n  content: \"\\f189\"; }\n\n.fa-vnv:before {\n  content: \"\\f40b\"; }\n\n.fa-volleyball-ball:before {\n  content: \"\\f45f\"; }\n\n.fa-volume-down:before {\n  content: \"\\f027\"; }\n\n.fa-volume-off:before {\n  content: \"\\f026\"; }\n\n.fa-volume-up:before {\n  content: \"\\f028\"; }\n\n.fa-vuejs:before {\n  content: \"\\f41f\"; }\n\n.fa-warehouse:before {\n  content: \"\\f494\"; }\n\n.fa-weibo:before {\n  content: \"\\f18a\"; }\n\n.fa-weight:before {\n  content: \"\\f496\"; }\n\n.fa-weixin:before {\n  content: \"\\f1d7\"; }\n\n.fa-whatsapp:before {\n  content: \"\\f232\"; }\n\n.fa-whatsapp-square:before {\n  content: \"\\f40c\"; }\n\n.fa-wheelchair:before {\n  content: \"\\f193\"; }\n\n.fa-whmcs:before {\n  content: \"\\f40d\"; }\n\n.fa-wifi:before {\n  content: \"\\f1eb\"; }\n\n.fa-wikipedia-w:before {\n  content: \"\\f266\"; }\n\n.fa-window-close:before {\n  content: \"\\f410\"; }\n\n.fa-window-maximize:before {\n  content: \"\\f2d0\"; }\n\n.fa-window-minimize:before {\n  content: \"\\f2d1\"; }\n\n.fa-window-restore:before {\n  content: \"\\f2d2\"; }\n\n.fa-windows:before {\n  content: \"\\f17a\"; }\n\n.fa-won-sign:before {\n  content: \"\\f159\"; }\n\n.fa-wordpress:before {\n  content: \"\\f19a\"; }\n\n.fa-wordpress-simple:before {\n  content: \"\\f411\"; }\n\n.fa-wpbeginner:before {\n  content: \"\\f297\"; }\n\n.fa-wpexplorer:before {\n  content: \"\\f2de\"; }\n\n.fa-wpforms:before {\n  content: \"\\f298\"; }\n\n.fa-wrench:before {\n  content: \"\\f0ad\"; }\n\n.fa-xbox:before {\n  content: \"\\f412\"; }\n\n.fa-xing:before {\n  content: \"\\f168\"; }\n\n.fa-xing-square:before {\n  content: \"\\f169\"; }\n\n.fa-y-combinator:before {\n  content: \"\\f23b\"; }\n\n.fa-yahoo:before {\n  content: \"\\f19e\"; }\n\n.fa-yandex:before {\n  content: \"\\f413\"; }\n\n.fa-yandex-international:before {\n  content: \"\\f414\"; }\n\n.fa-yelp:before {\n  content: \"\\f1e9\"; }\n\n.fa-yen-sign:before {\n  content: \"\\f157\"; }\n\n.fa-yoast:before {\n  content: \"\\f2b1\"; }\n\n.fa-youtube:before {\n  content: \"\\f167\"; }\n\n.fa-youtube-square:before {\n  content: \"\\f431\"; }\n\n.sr-only {\n  border: 0;\n  clip: rect(0, 0, 0, 0);\n  height: 1px;\n  margin: -1px;\n  overflow: hidden;\n  padding: 0;\n  position: absolute;\n  width: 1px; }\n\n.sr-only-focusable:active, .sr-only-focusable:focus {\n  clip: auto;\n  height: auto;\n  margin: 0;\n  overflow: visible;\n  position: static;\n  width: auto; }\n@font-face {\n  font-family: 'Font Awesome 5 Brands';\n  font-style: normal;\n  font-weight: normal;\n  src: url(\"../webfonts/fa-brands-400.eot\");\n  src: url(\"../webfonts/fa-brands-400.eot?#iefix\") format(\"embedded-opentype\"), url(\"../webfonts/fa-brands-400.woff2\") format(\"woff2\"), url(\"../webfonts/fa-brands-400.woff\") format(\"woff\"), url(\"../webfonts/fa-brands-400.ttf\") format(\"truetype\"), url(\"../webfonts/fa-brands-400.svg#fontawesome\") format(\"svg\"); }\n\n.fab {\n  font-family: 'Font Awesome 5 Brands'; }\n@font-face {\n  font-family: 'Font Awesome 5 Free';\n  font-style: normal;\n  font-weight: 400;\n  src: url(\"../webfonts/fa-regular-400.eot\");\n  src: url(\"../webfonts/fa-regular-400.eot?#iefix\") format(\"embedded-opentype\"), url(\"../webfonts/fa-regular-400.woff2\") format(\"woff2\"), url(\"../webfonts/fa-regular-400.woff\") format(\"woff\"), url(\"../webfonts/fa-regular-400.ttf\") format(\"truetype\"), url(\"../webfonts/fa-regular-400.svg#fontawesome\") format(\"svg\"); }\n\n.far {\n  font-family: 'Font Awesome 5 Free';\n  font-weight: 400; }\n@font-face {\n  font-family: 'Font Awesome 5 Free';\n  font-style: normal;\n  font-weight: 900;\n  src: url(\"../webfonts/fa-solid-900.eot\");\n  src: url(\"../webfonts/fa-solid-900.eot?#iefix\") format(\"embedded-opentype\"), url(\"../webfonts/fa-solid-900.woff2\") format(\"woff2\"), url(\"../webfonts/fa-solid-900.woff\") format(\"woff\"), url(\"../webfonts/fa-solid-900.ttf\") format(\"truetype\"), url(\"../webfonts/fa-solid-900.svg#fontawesome\") format(\"svg\"); }\n\n.fa,\n.fas {\n  font-family: 'Font Awesome 5 Free';\n  font-weight: 900; }\n"
  },
  {
    "path": "src/sourceDev.WebApp/SharedThemes/united/wwwroot/css/site.css",
    "content": "﻿html {\n    position: relative;\n    min-height: 100%;\n}\n\nbody {\n    min-height: 100vh;\n    padding-top: 146px;\n}\n\n\n#newPostLink {\n    position: absolute;\n    top: 170px;\n    right: 0px;\n}\n\n#editPostLink {\n    position: absolute;\n    top: 200px;\n    right: 0px;\n}\n\n#unpublishPostLink {\n    position: absolute;\n    top: 230px !important;\n    right: 0px !important;\n}\n\n#pageManagerLink {\n    position: absolute;\n    top: 170px;\n    right: 0px;\n}\n\n#newPageLink {\n    position: absolute;\n    top: 200px;\n    right: 0px;\n}\n\n#editPageLink {\n    position: absolute;\n    top: 230px;\n    right: 0px\n}\n\n#unpublishPageLink {\n    position: absolute;\n    top: 260px !important;\n    right: 0px !important\n}\n\n#sidenavtoggle {\n    position: absolute;\n    top: 220px;\n    right: 5px;\n}\n\n\n@media screen and (max-width: 812px) {\n    #sidenavtoggle,\n    #sidenavmenu {\n        display: none;\n    }\n}\n\n.flex-fill {\n    flex: 1 1 auto !important;\n}\n\n\n.carousel-caption p {\n    font-size: 20px;\n    line-height: 1.4;\n}\n\n@media screen and (max-width: 768px) {\n    .carousel-caption {\n        display: none\n    }\n}\n\n\n\n\nimg, video, iframe {\n    max-width: 100%;\n}\n\ntd img, video, iframe {\n    max-width: none;\n}\n\n\n\n.table td, .table th {\n    vertical-align: inherit;\n}\n\n/******** jquery smartmenu bootstrap 4 ******/\n/* Carets in collapsible mode (make them look like +/- buttons) */\n.navbar-nav.sm-collapsible .sub-arrow {\n    position: absolute;\n    top: 50%;\n    right: 0;\n    margin: -0.7em 0.5em 0 0;\n    border: 1px solid rgba(0, 0, 0, .1);\n    border-radius: .25rem;\n    padding: 0;\n    width: 2em;\n    height: 1.4em;\n    font-size: 1.25rem;\n    line-height: 1.2em;\n    text-align: center;\n}\n\n    .navbar-nav.sm-collapsible .sub-arrow::before {\n        content: '+';\n    }\n\n.navbar-nav.sm-collapsible .show > a > .sub-arrow::before {\n    content: '-';\n}\n\n.navbar-dark .navbar-nav.sm-collapsible .nav-link .sub-arrow {\n    border-color: rgba(255, 255, 255, .1);\n}\n/* make sure there's room for the carets */\n.navbar-nav.sm-collapsible .has-submenu {\n    padding-right: 3em;\n}\n/* keep the carets properly positioned */\n.navbar-nav.sm-collapsible .nav-link,\n.navbar-nav.sm-collapsible .dropdown-item {\n    position: relative;\n}\n\n\n/* Nav carets in expanded mode */\n.navbar-nav:not(.sm-collapsible) .nav-link .sub-arrow {\n    display: inline-block;\n    width: 0;\n    height: 0;\n    margin-left: .255em;\n    vertical-align: .255em;\n    border-top: .3em solid;\n    border-right: .3em solid transparent;\n    border-left: .3em solid transparent;\n}\n/* point the arrows up for .fixed-bottom navbars */\n.fixed-bottom .navbar-nav:not(.sm-collapsible) .nav-link .sub-arrow,\n.fixed-bottom .navbar-nav:not(.sm-collapsible):not([data-sm-skip]) .dropdown-toggle::after {\n    border-top: 0;\n    border-bottom: .3em solid;\n}\n\n\n/* Dropdown carets in expanded mode */\n.navbar-nav:not(.sm-collapsible) .dropdown-item .sub-arrow,\n.navbar-nav:not(.sm-collapsible):not([data-sm-skip]) .dropdown-menu .dropdown-toggle::after {\n    position: absolute;\n    top: 50%;\n    right: 0;\n    width: 0;\n    height: 0;\n    margin-top: -.3em;\n    margin-right: 1em;\n    border-top: .3em solid transparent;\n    border-bottom: .3em solid transparent;\n    border-left: .3em solid;\n}\n/* make sure there's room for the carets */\n.navbar-nav:not(.sm-collapsible) .dropdown-item.has-submenu {\n    padding-right: 2em;\n}\n\n\n/* Scrolling arrows for tall menus */\n.navbar-nav .scroll-up,\n.navbar-nav .scroll-down {\n    position: absolute;\n    display: none;\n    visibility: hidden;\n    height: 20px;\n    overflow: hidden;\n    text-align: center;\n}\n\n.navbar-nav .scroll-up-arrow,\n.navbar-nav .scroll-down-arrow {\n    position: absolute;\n    top: -2px;\n    left: 50%;\n    margin-left: -8px;\n    width: 0;\n    height: 0;\n    overflow: hidden;\n    border-top: 7px solid transparent;\n    border-right: 7px solid transparent;\n    border-bottom: 7px solid;\n    border-left: 7px solid transparent;\n}\n\n.navbar-nav .scroll-down-arrow {\n    top: 6px;\n    border-top: 7px solid;\n    border-right: 7px solid transparent;\n    border-bottom: 7px solid transparent;\n    border-left: 7px solid transparent;\n}\n\n\n/* Add some spacing for 2+ level sub menus in collapsible mode */\n.navbar-nav.sm-collapsible .dropdown-menu .dropdown-menu {\n    margin: .5em;\n}\n\n\n/* Fix SmartMenus sub menus auto width (subMenusMinWidth/subMenusMaxWidth options) */\n.navbar-nav:not([data-sm-skip]) .dropdown-item {\n    white-space: normal;\n}\n\n.navbar-nav:not(.sm-collapsible) .sm-nowrap > li > .dropdown-item {\n    white-space: nowrap;\n}\n/******** end jquery smart menu bootstrap-4 *****************/\n\n.brand-header {\n    height: 100px;\n}\n\nheader .navbar {\n    top: 100px;\n}\n"
  },
  {
    "path": "src/sourceDev.WebApp/SharedThemes/united/wwwroot/js/bootstrap.bundle.js",
    "content": "/*!\n  * Bootstrap v5.0.2 (https://getbootstrap.com/)\n  * Copyright 2011-2021 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)\n  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n  */\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n  typeof define === 'function' && define.amd ? define(factory) :\n  (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.bootstrap = factory());\n}(this, (function () { 'use strict';\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): dom/selector-engine.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n  const NODE_TEXT = 3;\n  const SelectorEngine = {\n    find(selector, element = document.documentElement) {\n      return [].concat(...Element.prototype.querySelectorAll.call(element, selector));\n    },\n\n    findOne(selector, element = document.documentElement) {\n      return Element.prototype.querySelector.call(element, selector);\n    },\n\n    children(element, selector) {\n      return [].concat(...element.children).filter(child => child.matches(selector));\n    },\n\n    parents(element, selector) {\n      const parents = [];\n      let ancestor = element.parentNode;\n\n      while (ancestor && ancestor.nodeType === Node.ELEMENT_NODE && ancestor.nodeType !== NODE_TEXT) {\n        if (ancestor.matches(selector)) {\n          parents.push(ancestor);\n        }\n\n        ancestor = ancestor.parentNode;\n      }\n\n      return parents;\n    },\n\n    prev(element, selector) {\n      let previous = element.previousElementSibling;\n\n      while (previous) {\n        if (previous.matches(selector)) {\n          return [previous];\n        }\n\n        previous = previous.previousElementSibling;\n      }\n\n      return [];\n    },\n\n    next(element, selector) {\n      let next = element.nextElementSibling;\n\n      while (next) {\n        if (next.matches(selector)) {\n          return [next];\n        }\n\n        next = next.nextElementSibling;\n      }\n\n      return [];\n    }\n\n  };\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): util/index.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n\n  const MAX_UID = 1000000;\n  const MILLISECONDS_MULTIPLIER = 1000;\n  const TRANSITION_END = 'transitionend'; // Shoutout AngusCroll (https://goo.gl/pxwQGp)\n\n  const toType = obj => {\n    if (obj === null || obj === undefined) {\n      return `${obj}`;\n    }\n\n    return {}.toString.call(obj).match(/\\s([a-z]+)/i)[1].toLowerCase();\n  };\n  /**\n   * --------------------------------------------------------------------------\n   * Public Util Api\n   * --------------------------------------------------------------------------\n   */\n\n\n  const getUID = prefix => {\n    do {\n      prefix += Math.floor(Math.random() * MAX_UID);\n    } while (document.getElementById(prefix));\n\n    return prefix;\n  };\n\n  const getSelector = element => {\n    let selector = element.getAttribute('data-bs-target');\n\n    if (!selector || selector === '#') {\n      let hrefAttr = element.getAttribute('href'); // The only valid content that could double as a selector are IDs or classes,\n      // so everything starting with `#` or `.`. If a \"real\" URL is used as the selector,\n      // `document.querySelector` will rightfully complain it is invalid.\n      // See https://github.com/twbs/bootstrap/issues/32273\n\n      if (!hrefAttr || !hrefAttr.includes('#') && !hrefAttr.startsWith('.')) {\n        return null;\n      } // Just in case some CMS puts out a full URL with the anchor appended\n\n\n      if (hrefAttr.includes('#') && !hrefAttr.startsWith('#')) {\n        hrefAttr = `#${hrefAttr.split('#')[1]}`;\n      }\n\n      selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : null;\n    }\n\n    return selector;\n  };\n\n  const getSelectorFromElement = element => {\n    const selector = getSelector(element);\n\n    if (selector) {\n      return document.querySelector(selector) ? selector : null;\n    }\n\n    return null;\n  };\n\n  const getElementFromSelector = element => {\n    const selector = getSelector(element);\n    return selector ? document.querySelector(selector) : null;\n  };\n\n  const getTransitionDurationFromElement = element => {\n    if (!element) {\n      return 0;\n    } // Get transition-duration of the element\n\n\n    let {\n      transitionDuration,\n      transitionDelay\n    } = window.getComputedStyle(element);\n    const floatTransitionDuration = Number.parseFloat(transitionDuration);\n    const floatTransitionDelay = Number.parseFloat(transitionDelay); // Return 0 if element or transition duration is not found\n\n    if (!floatTransitionDuration && !floatTransitionDelay) {\n      return 0;\n    } // If multiple durations are defined, take the first\n\n\n    transitionDuration = transitionDuration.split(',')[0];\n    transitionDelay = transitionDelay.split(',')[0];\n    return (Number.parseFloat(transitionDuration) + Number.parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER;\n  };\n\n  const triggerTransitionEnd = element => {\n    element.dispatchEvent(new Event(TRANSITION_END));\n  };\n\n  const isElement$1 = obj => {\n    if (!obj || typeof obj !== 'object') {\n      return false;\n    }\n\n    if (typeof obj.jquery !== 'undefined') {\n      obj = obj[0];\n    }\n\n    return typeof obj.nodeType !== 'undefined';\n  };\n\n  const getElement = obj => {\n    if (isElement$1(obj)) {\n      // it's a jQuery object or a node element\n      return obj.jquery ? obj[0] : obj;\n    }\n\n    if (typeof obj === 'string' && obj.length > 0) {\n      return SelectorEngine.findOne(obj);\n    }\n\n    return null;\n  };\n\n  const typeCheckConfig = (componentName, config, configTypes) => {\n    Object.keys(configTypes).forEach(property => {\n      const expectedTypes = configTypes[property];\n      const value = config[property];\n      const valueType = value && isElement$1(value) ? 'element' : toType(value);\n\n      if (!new RegExp(expectedTypes).test(valueType)) {\n        throw new TypeError(`${componentName.toUpperCase()}: Option \"${property}\" provided type \"${valueType}\" but expected type \"${expectedTypes}\".`);\n      }\n    });\n  };\n\n  const isVisible = element => {\n    if (!isElement$1(element) || element.getClientRects().length === 0) {\n      return false;\n    }\n\n    return getComputedStyle(element).getPropertyValue('visibility') === 'visible';\n  };\n\n  const isDisabled = element => {\n    if (!element || element.nodeType !== Node.ELEMENT_NODE) {\n      return true;\n    }\n\n    if (element.classList.contains('disabled')) {\n      return true;\n    }\n\n    if (typeof element.disabled !== 'undefined') {\n      return element.disabled;\n    }\n\n    return element.hasAttribute('disabled') && element.getAttribute('disabled') !== 'false';\n  };\n\n  const findShadowRoot = element => {\n    if (!document.documentElement.attachShadow) {\n      return null;\n    } // Can find the shadow root otherwise it'll return the document\n\n\n    if (typeof element.getRootNode === 'function') {\n      const root = element.getRootNode();\n      return root instanceof ShadowRoot ? root : null;\n    }\n\n    if (element instanceof ShadowRoot) {\n      return element;\n    } // when we don't find a shadow root\n\n\n    if (!element.parentNode) {\n      return null;\n    }\n\n    return findShadowRoot(element.parentNode);\n  };\n\n  const noop = () => {};\n\n  const reflow = element => element.offsetHeight;\n\n  const getjQuery = () => {\n    const {\n      jQuery\n    } = window;\n\n    if (jQuery && !document.body.hasAttribute('data-bs-no-jquery')) {\n      return jQuery;\n    }\n\n    return null;\n  };\n\n  const DOMContentLoadedCallbacks = [];\n\n  const onDOMContentLoaded = callback => {\n    if (document.readyState === 'loading') {\n      // add listener on the first call when the document is in loading state\n      if (!DOMContentLoadedCallbacks.length) {\n        document.addEventListener('DOMContentLoaded', () => {\n          DOMContentLoadedCallbacks.forEach(callback => callback());\n        });\n      }\n\n      DOMContentLoadedCallbacks.push(callback);\n    } else {\n      callback();\n    }\n  };\n\n  const isRTL = () => document.documentElement.dir === 'rtl';\n\n  const defineJQueryPlugin = plugin => {\n    onDOMContentLoaded(() => {\n      const $ = getjQuery();\n      /* istanbul ignore if */\n\n      if ($) {\n        const name = plugin.NAME;\n        const JQUERY_NO_CONFLICT = $.fn[name];\n        $.fn[name] = plugin.jQueryInterface;\n        $.fn[name].Constructor = plugin;\n\n        $.fn[name].noConflict = () => {\n          $.fn[name] = JQUERY_NO_CONFLICT;\n          return plugin.jQueryInterface;\n        };\n      }\n    });\n  };\n\n  const execute = callback => {\n    if (typeof callback === 'function') {\n      callback();\n    }\n  };\n\n  const executeAfterTransition = (callback, transitionElement, waitForTransition = true) => {\n    if (!waitForTransition) {\n      execute(callback);\n      return;\n    }\n\n    const durationPadding = 5;\n    const emulatedDuration = getTransitionDurationFromElement(transitionElement) + durationPadding;\n    let called = false;\n\n    const handler = ({\n      target\n    }) => {\n      if (target !== transitionElement) {\n        return;\n      }\n\n      called = true;\n      transitionElement.removeEventListener(TRANSITION_END, handler);\n      execute(callback);\n    };\n\n    transitionElement.addEventListener(TRANSITION_END, handler);\n    setTimeout(() => {\n      if (!called) {\n        triggerTransitionEnd(transitionElement);\n      }\n    }, emulatedDuration);\n  };\n  /**\n   * Return the previous/next element of a list.\n   *\n   * @param {array} list    The list of elements\n   * @param activeElement   The active element\n   * @param shouldGetNext   Choose to get next or previous element\n   * @param isCycleAllowed\n   * @return {Element|elem} The proper element\n   */\n\n\n  const getNextActiveElement = (list, activeElement, shouldGetNext, isCycleAllowed) => {\n    let index = list.indexOf(activeElement); // if the element does not exist in the list return an element depending on the direction and if cycle is allowed\n\n    if (index === -1) {\n      return list[!shouldGetNext && isCycleAllowed ? list.length - 1 : 0];\n    }\n\n    const listLength = list.length;\n    index += shouldGetNext ? 1 : -1;\n\n    if (isCycleAllowed) {\n      index = (index + listLength) % listLength;\n    }\n\n    return list[Math.max(0, Math.min(index, listLength - 1))];\n  };\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): dom/event-handler.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const namespaceRegex = /[^.]*(?=\\..*)\\.|.*/;\n  const stripNameRegex = /\\..*/;\n  const stripUidRegex = /::\\d+$/;\n  const eventRegistry = {}; // Events storage\n\n  let uidEvent = 1;\n  const customEvents = {\n    mouseenter: 'mouseover',\n    mouseleave: 'mouseout'\n  };\n  const customEventsRegex = /^(mouseenter|mouseleave)/i;\n  const nativeEvents = new Set(['click', 'dblclick', 'mouseup', 'mousedown', 'contextmenu', 'mousewheel', 'DOMMouseScroll', 'mouseover', 'mouseout', 'mousemove', 'selectstart', 'selectend', 'keydown', 'keypress', 'keyup', 'orientationchange', 'touchstart', 'touchmove', 'touchend', 'touchcancel', 'pointerdown', 'pointermove', 'pointerup', 'pointerleave', 'pointercancel', 'gesturestart', 'gesturechange', 'gestureend', 'focus', 'blur', 'change', 'reset', 'select', 'submit', 'focusin', 'focusout', 'load', 'unload', 'beforeunload', 'resize', 'move', 'DOMContentLoaded', 'readystatechange', 'error', 'abort', 'scroll']);\n  /**\n   * ------------------------------------------------------------------------\n   * Private methods\n   * ------------------------------------------------------------------------\n   */\n\n  function getUidEvent(element, uid) {\n    return uid && `${uid}::${uidEvent++}` || element.uidEvent || uidEvent++;\n  }\n\n  function getEvent(element) {\n    const uid = getUidEvent(element);\n    element.uidEvent = uid;\n    eventRegistry[uid] = eventRegistry[uid] || {};\n    return eventRegistry[uid];\n  }\n\n  function bootstrapHandler(element, fn) {\n    return function handler(event) {\n      event.delegateTarget = element;\n\n      if (handler.oneOff) {\n        EventHandler.off(element, event.type, fn);\n      }\n\n      return fn.apply(element, [event]);\n    };\n  }\n\n  function bootstrapDelegationHandler(element, selector, fn) {\n    return function handler(event) {\n      const domElements = element.querySelectorAll(selector);\n\n      for (let {\n        target\n      } = event; target && target !== this; target = target.parentNode) {\n        for (let i = domElements.length; i--;) {\n          if (domElements[i] === target) {\n            event.delegateTarget = target;\n\n            if (handler.oneOff) {\n              // eslint-disable-next-line unicorn/consistent-destructuring\n              EventHandler.off(element, event.type, selector, fn);\n            }\n\n            return fn.apply(target, [event]);\n          }\n        }\n      } // To please ESLint\n\n\n      return null;\n    };\n  }\n\n  function findHandler(events, handler, delegationSelector = null) {\n    const uidEventList = Object.keys(events);\n\n    for (let i = 0, len = uidEventList.length; i < len; i++) {\n      const event = events[uidEventList[i]];\n\n      if (event.originalHandler === handler && event.delegationSelector === delegationSelector) {\n        return event;\n      }\n    }\n\n    return null;\n  }\n\n  function normalizeParams(originalTypeEvent, handler, delegationFn) {\n    const delegation = typeof handler === 'string';\n    const originalHandler = delegation ? delegationFn : handler;\n    let typeEvent = getTypeEvent(originalTypeEvent);\n    const isNative = nativeEvents.has(typeEvent);\n\n    if (!isNative) {\n      typeEvent = originalTypeEvent;\n    }\n\n    return [delegation, originalHandler, typeEvent];\n  }\n\n  function addHandler(element, originalTypeEvent, handler, delegationFn, oneOff) {\n    if (typeof originalTypeEvent !== 'string' || !element) {\n      return;\n    }\n\n    if (!handler) {\n      handler = delegationFn;\n      delegationFn = null;\n    } // in case of mouseenter or mouseleave wrap the handler within a function that checks for its DOM position\n    // this prevents the handler from being dispatched the same way as mouseover or mouseout does\n\n\n    if (customEventsRegex.test(originalTypeEvent)) {\n      const wrapFn = fn => {\n        return function (event) {\n          if (!event.relatedTarget || event.relatedTarget !== event.delegateTarget && !event.delegateTarget.contains(event.relatedTarget)) {\n            return fn.call(this, event);\n          }\n        };\n      };\n\n      if (delegationFn) {\n        delegationFn = wrapFn(delegationFn);\n      } else {\n        handler = wrapFn(handler);\n      }\n    }\n\n    const [delegation, originalHandler, typeEvent] = normalizeParams(originalTypeEvent, handler, delegationFn);\n    const events = getEvent(element);\n    const handlers = events[typeEvent] || (events[typeEvent] = {});\n    const previousFn = findHandler(handlers, originalHandler, delegation ? handler : null);\n\n    if (previousFn) {\n      previousFn.oneOff = previousFn.oneOff && oneOff;\n      return;\n    }\n\n    const uid = getUidEvent(originalHandler, originalTypeEvent.replace(namespaceRegex, ''));\n    const fn = delegation ? bootstrapDelegationHandler(element, handler, delegationFn) : bootstrapHandler(element, handler);\n    fn.delegationSelector = delegation ? handler : null;\n    fn.originalHandler = originalHandler;\n    fn.oneOff = oneOff;\n    fn.uidEvent = uid;\n    handlers[uid] = fn;\n    element.addEventListener(typeEvent, fn, delegation);\n  }\n\n  function removeHandler(element, events, typeEvent, handler, delegationSelector) {\n    const fn = findHandler(events[typeEvent], handler, delegationSelector);\n\n    if (!fn) {\n      return;\n    }\n\n    element.removeEventListener(typeEvent, fn, Boolean(delegationSelector));\n    delete events[typeEvent][fn.uidEvent];\n  }\n\n  function removeNamespacedHandlers(element, events, typeEvent, namespace) {\n    const storeElementEvent = events[typeEvent] || {};\n    Object.keys(storeElementEvent).forEach(handlerKey => {\n      if (handlerKey.includes(namespace)) {\n        const event = storeElementEvent[handlerKey];\n        removeHandler(element, events, typeEvent, event.originalHandler, event.delegationSelector);\n      }\n    });\n  }\n\n  function getTypeEvent(event) {\n    // allow to get the native events from namespaced events ('click.bs.button' --> 'click')\n    event = event.replace(stripNameRegex, '');\n    return customEvents[event] || event;\n  }\n\n  const EventHandler = {\n    on(element, event, handler, delegationFn) {\n      addHandler(element, event, handler, delegationFn, false);\n    },\n\n    one(element, event, handler, delegationFn) {\n      addHandler(element, event, handler, delegationFn, true);\n    },\n\n    off(element, originalTypeEvent, handler, delegationFn) {\n      if (typeof originalTypeEvent !== 'string' || !element) {\n        return;\n      }\n\n      const [delegation, originalHandler, typeEvent] = normalizeParams(originalTypeEvent, handler, delegationFn);\n      const inNamespace = typeEvent !== originalTypeEvent;\n      const events = getEvent(element);\n      const isNamespace = originalTypeEvent.startsWith('.');\n\n      if (typeof originalHandler !== 'undefined') {\n        // Simplest case: handler is passed, remove that listener ONLY.\n        if (!events || !events[typeEvent]) {\n          return;\n        }\n\n        removeHandler(element, events, typeEvent, originalHandler, delegation ? handler : null);\n        return;\n      }\n\n      if (isNamespace) {\n        Object.keys(events).forEach(elementEvent => {\n          removeNamespacedHandlers(element, events, elementEvent, originalTypeEvent.slice(1));\n        });\n      }\n\n      const storeElementEvent = events[typeEvent] || {};\n      Object.keys(storeElementEvent).forEach(keyHandlers => {\n        const handlerKey = keyHandlers.replace(stripUidRegex, '');\n\n        if (!inNamespace || originalTypeEvent.includes(handlerKey)) {\n          const event = storeElementEvent[keyHandlers];\n          removeHandler(element, events, typeEvent, event.originalHandler, event.delegationSelector);\n        }\n      });\n    },\n\n    trigger(element, event, args) {\n      if (typeof event !== 'string' || !element) {\n        return null;\n      }\n\n      const $ = getjQuery();\n      const typeEvent = getTypeEvent(event);\n      const inNamespace = event !== typeEvent;\n      const isNative = nativeEvents.has(typeEvent);\n      let jQueryEvent;\n      let bubbles = true;\n      let nativeDispatch = true;\n      let defaultPrevented = false;\n      let evt = null;\n\n      if (inNamespace && $) {\n        jQueryEvent = $.Event(event, args);\n        $(element).trigger(jQueryEvent);\n        bubbles = !jQueryEvent.isPropagationStopped();\n        nativeDispatch = !jQueryEvent.isImmediatePropagationStopped();\n        defaultPrevented = jQueryEvent.isDefaultPrevented();\n      }\n\n      if (isNative) {\n        evt = document.createEvent('HTMLEvents');\n        evt.initEvent(typeEvent, bubbles, true);\n      } else {\n        evt = new CustomEvent(event, {\n          bubbles,\n          cancelable: true\n        });\n      } // merge custom information in our event\n\n\n      if (typeof args !== 'undefined') {\n        Object.keys(args).forEach(key => {\n          Object.defineProperty(evt, key, {\n            get() {\n              return args[key];\n            }\n\n          });\n        });\n      }\n\n      if (defaultPrevented) {\n        evt.preventDefault();\n      }\n\n      if (nativeDispatch) {\n        element.dispatchEvent(evt);\n      }\n\n      if (evt.defaultPrevented && typeof jQueryEvent !== 'undefined') {\n        jQueryEvent.preventDefault();\n      }\n\n      return evt;\n    }\n\n  };\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): dom/data.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n  const elementMap = new Map();\n  var Data = {\n    set(element, key, instance) {\n      if (!elementMap.has(element)) {\n        elementMap.set(element, new Map());\n      }\n\n      const instanceMap = elementMap.get(element); // make it clear we only want one instance per element\n      // can be removed later when multiple key/instances are fine to be used\n\n      if (!instanceMap.has(key) && instanceMap.size !== 0) {\n        // eslint-disable-next-line no-console\n        console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(instanceMap.keys())[0]}.`);\n        return;\n      }\n\n      instanceMap.set(key, instance);\n    },\n\n    get(element, key) {\n      if (elementMap.has(element)) {\n        return elementMap.get(element).get(key) || null;\n      }\n\n      return null;\n    },\n\n    remove(element, key) {\n      if (!elementMap.has(element)) {\n        return;\n      }\n\n      const instanceMap = elementMap.get(element);\n      instanceMap.delete(key); // free up element references if there are no instances left for an element\n\n      if (instanceMap.size === 0) {\n        elementMap.delete(element);\n      }\n    }\n\n  };\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): base-component.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const VERSION = '5.0.2';\n\n  class BaseComponent {\n    constructor(element) {\n      element = getElement(element);\n\n      if (!element) {\n        return;\n      }\n\n      this._element = element;\n      Data.set(this._element, this.constructor.DATA_KEY, this);\n    }\n\n    dispose() {\n      Data.remove(this._element, this.constructor.DATA_KEY);\n      EventHandler.off(this._element, this.constructor.EVENT_KEY);\n      Object.getOwnPropertyNames(this).forEach(propertyName => {\n        this[propertyName] = null;\n      });\n    }\n\n    _queueCallback(callback, element, isAnimated = true) {\n      executeAfterTransition(callback, element, isAnimated);\n    }\n    /** Static */\n\n\n    static getInstance(element) {\n      return Data.get(element, this.DATA_KEY);\n    }\n\n    static getOrCreateInstance(element, config = {}) {\n      return this.getInstance(element) || new this(element, typeof config === 'object' ? config : null);\n    }\n\n    static get VERSION() {\n      return VERSION;\n    }\n\n    static get NAME() {\n      throw new Error('You have to implement the static method \"NAME\", for each component!');\n    }\n\n    static get DATA_KEY() {\n      return `bs.${this.NAME}`;\n    }\n\n    static get EVENT_KEY() {\n      return `.${this.DATA_KEY}`;\n    }\n\n  }\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): alert.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$c = 'alert';\n  const DATA_KEY$b = 'bs.alert';\n  const EVENT_KEY$b = `.${DATA_KEY$b}`;\n  const DATA_API_KEY$8 = '.data-api';\n  const SELECTOR_DISMISS = '[data-bs-dismiss=\"alert\"]';\n  const EVENT_CLOSE = `close${EVENT_KEY$b}`;\n  const EVENT_CLOSED = `closed${EVENT_KEY$b}`;\n  const EVENT_CLICK_DATA_API$7 = `click${EVENT_KEY$b}${DATA_API_KEY$8}`;\n  const CLASS_NAME_ALERT = 'alert';\n  const CLASS_NAME_FADE$6 = 'fade';\n  const CLASS_NAME_SHOW$9 = 'show';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Alert extends BaseComponent {\n    // Getters\n    static get NAME() {\n      return NAME$c;\n    } // Public\n\n\n    close(element) {\n      const rootElement = element ? this._getRootElement(element) : this._element;\n\n      const customEvent = this._triggerCloseEvent(rootElement);\n\n      if (customEvent === null || customEvent.defaultPrevented) {\n        return;\n      }\n\n      this._removeElement(rootElement);\n    } // Private\n\n\n    _getRootElement(element) {\n      return getElementFromSelector(element) || element.closest(`.${CLASS_NAME_ALERT}`);\n    }\n\n    _triggerCloseEvent(element) {\n      return EventHandler.trigger(element, EVENT_CLOSE);\n    }\n\n    _removeElement(element) {\n      element.classList.remove(CLASS_NAME_SHOW$9);\n      const isAnimated = element.classList.contains(CLASS_NAME_FADE$6);\n\n      this._queueCallback(() => this._destroyElement(element), element, isAnimated);\n    }\n\n    _destroyElement(element) {\n      element.remove();\n      EventHandler.trigger(element, EVENT_CLOSED);\n    } // Static\n\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = Alert.getOrCreateInstance(this);\n\n        if (config === 'close') {\n          data[config](this);\n        }\n      });\n    }\n\n    static handleDismiss(alertInstance) {\n      return function (event) {\n        if (event) {\n          event.preventDefault();\n        }\n\n        alertInstance.close(this);\n      };\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(document, EVENT_CLICK_DATA_API$7, SELECTOR_DISMISS, Alert.handleDismiss(new Alert()));\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Alert to jQuery only if jQuery is present\n   */\n\n  defineJQueryPlugin(Alert);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): button.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$b = 'button';\n  const DATA_KEY$a = 'bs.button';\n  const EVENT_KEY$a = `.${DATA_KEY$a}`;\n  const DATA_API_KEY$7 = '.data-api';\n  const CLASS_NAME_ACTIVE$3 = 'active';\n  const SELECTOR_DATA_TOGGLE$5 = '[data-bs-toggle=\"button\"]';\n  const EVENT_CLICK_DATA_API$6 = `click${EVENT_KEY$a}${DATA_API_KEY$7}`;\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Button extends BaseComponent {\n    // Getters\n    static get NAME() {\n      return NAME$b;\n    } // Public\n\n\n    toggle() {\n      // Toggle class and sync the `aria-pressed` attribute with the return value of the `.toggle()` method\n      this._element.setAttribute('aria-pressed', this._element.classList.toggle(CLASS_NAME_ACTIVE$3));\n    } // Static\n\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = Button.getOrCreateInstance(this);\n\n        if (config === 'toggle') {\n          data[config]();\n        }\n      });\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(document, EVENT_CLICK_DATA_API$6, SELECTOR_DATA_TOGGLE$5, event => {\n    event.preventDefault();\n    const button = event.target.closest(SELECTOR_DATA_TOGGLE$5);\n    const data = Button.getOrCreateInstance(button);\n    data.toggle();\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Button to jQuery only if jQuery is present\n   */\n\n  defineJQueryPlugin(Button);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): dom/manipulator.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  function normalizeData(val) {\n    if (val === 'true') {\n      return true;\n    }\n\n    if (val === 'false') {\n      return false;\n    }\n\n    if (val === Number(val).toString()) {\n      return Number(val);\n    }\n\n    if (val === '' || val === 'null') {\n      return null;\n    }\n\n    return val;\n  }\n\n  function normalizeDataKey(key) {\n    return key.replace(/[A-Z]/g, chr => `-${chr.toLowerCase()}`);\n  }\n\n  const Manipulator = {\n    setDataAttribute(element, key, value) {\n      element.setAttribute(`data-bs-${normalizeDataKey(key)}`, value);\n    },\n\n    removeDataAttribute(element, key) {\n      element.removeAttribute(`data-bs-${normalizeDataKey(key)}`);\n    },\n\n    getDataAttributes(element) {\n      if (!element) {\n        return {};\n      }\n\n      const attributes = {};\n      Object.keys(element.dataset).filter(key => key.startsWith('bs')).forEach(key => {\n        let pureKey = key.replace(/^bs/, '');\n        pureKey = pureKey.charAt(0).toLowerCase() + pureKey.slice(1, pureKey.length);\n        attributes[pureKey] = normalizeData(element.dataset[key]);\n      });\n      return attributes;\n    },\n\n    getDataAttribute(element, key) {\n      return normalizeData(element.getAttribute(`data-bs-${normalizeDataKey(key)}`));\n    },\n\n    offset(element) {\n      const rect = element.getBoundingClientRect();\n      return {\n        top: rect.top + document.body.scrollTop,\n        left: rect.left + document.body.scrollLeft\n      };\n    },\n\n    position(element) {\n      return {\n        top: element.offsetTop,\n        left: element.offsetLeft\n      };\n    }\n\n  };\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): carousel.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$a = 'carousel';\n  const DATA_KEY$9 = 'bs.carousel';\n  const EVENT_KEY$9 = `.${DATA_KEY$9}`;\n  const DATA_API_KEY$6 = '.data-api';\n  const ARROW_LEFT_KEY = 'ArrowLeft';\n  const ARROW_RIGHT_KEY = 'ArrowRight';\n  const TOUCHEVENT_COMPAT_WAIT = 500; // Time for mouse compat events to fire after touch\n\n  const SWIPE_THRESHOLD = 40;\n  const Default$9 = {\n    interval: 5000,\n    keyboard: true,\n    slide: false,\n    pause: 'hover',\n    wrap: true,\n    touch: true\n  };\n  const DefaultType$9 = {\n    interval: '(number|boolean)',\n    keyboard: 'boolean',\n    slide: '(boolean|string)',\n    pause: '(string|boolean)',\n    wrap: 'boolean',\n    touch: 'boolean'\n  };\n  const ORDER_NEXT = 'next';\n  const ORDER_PREV = 'prev';\n  const DIRECTION_LEFT = 'left';\n  const DIRECTION_RIGHT = 'right';\n  const KEY_TO_DIRECTION = {\n    [ARROW_LEFT_KEY]: DIRECTION_RIGHT,\n    [ARROW_RIGHT_KEY]: DIRECTION_LEFT\n  };\n  const EVENT_SLIDE = `slide${EVENT_KEY$9}`;\n  const EVENT_SLID = `slid${EVENT_KEY$9}`;\n  const EVENT_KEYDOWN = `keydown${EVENT_KEY$9}`;\n  const EVENT_MOUSEENTER = `mouseenter${EVENT_KEY$9}`;\n  const EVENT_MOUSELEAVE = `mouseleave${EVENT_KEY$9}`;\n  const EVENT_TOUCHSTART = `touchstart${EVENT_KEY$9}`;\n  const EVENT_TOUCHMOVE = `touchmove${EVENT_KEY$9}`;\n  const EVENT_TOUCHEND = `touchend${EVENT_KEY$9}`;\n  const EVENT_POINTERDOWN = `pointerdown${EVENT_KEY$9}`;\n  const EVENT_POINTERUP = `pointerup${EVENT_KEY$9}`;\n  const EVENT_DRAG_START = `dragstart${EVENT_KEY$9}`;\n  const EVENT_LOAD_DATA_API$2 = `load${EVENT_KEY$9}${DATA_API_KEY$6}`;\n  const EVENT_CLICK_DATA_API$5 = `click${EVENT_KEY$9}${DATA_API_KEY$6}`;\n  const CLASS_NAME_CAROUSEL = 'carousel';\n  const CLASS_NAME_ACTIVE$2 = 'active';\n  const CLASS_NAME_SLIDE = 'slide';\n  const CLASS_NAME_END = 'carousel-item-end';\n  const CLASS_NAME_START = 'carousel-item-start';\n  const CLASS_NAME_NEXT = 'carousel-item-next';\n  const CLASS_NAME_PREV = 'carousel-item-prev';\n  const CLASS_NAME_POINTER_EVENT = 'pointer-event';\n  const SELECTOR_ACTIVE$1 = '.active';\n  const SELECTOR_ACTIVE_ITEM = '.active.carousel-item';\n  const SELECTOR_ITEM = '.carousel-item';\n  const SELECTOR_ITEM_IMG = '.carousel-item img';\n  const SELECTOR_NEXT_PREV = '.carousel-item-next, .carousel-item-prev';\n  const SELECTOR_INDICATORS = '.carousel-indicators';\n  const SELECTOR_INDICATOR = '[data-bs-target]';\n  const SELECTOR_DATA_SLIDE = '[data-bs-slide], [data-bs-slide-to]';\n  const SELECTOR_DATA_RIDE = '[data-bs-ride=\"carousel\"]';\n  const POINTER_TYPE_TOUCH = 'touch';\n  const POINTER_TYPE_PEN = 'pen';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Carousel extends BaseComponent {\n    constructor(element, config) {\n      super(element);\n      this._items = null;\n      this._interval = null;\n      this._activeElement = null;\n      this._isPaused = false;\n      this._isSliding = false;\n      this.touchTimeout = null;\n      this.touchStartX = 0;\n      this.touchDeltaX = 0;\n      this._config = this._getConfig(config);\n      this._indicatorsElement = SelectorEngine.findOne(SELECTOR_INDICATORS, this._element);\n      this._touchSupported = 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0;\n      this._pointerEvent = Boolean(window.PointerEvent);\n\n      this._addEventListeners();\n    } // Getters\n\n\n    static get Default() {\n      return Default$9;\n    }\n\n    static get NAME() {\n      return NAME$a;\n    } // Public\n\n\n    next() {\n      this._slide(ORDER_NEXT);\n    }\n\n    nextWhenVisible() {\n      // Don't call next when the page isn't visible\n      // or the carousel or its parent isn't visible\n      if (!document.hidden && isVisible(this._element)) {\n        this.next();\n      }\n    }\n\n    prev() {\n      this._slide(ORDER_PREV);\n    }\n\n    pause(event) {\n      if (!event) {\n        this._isPaused = true;\n      }\n\n      if (SelectorEngine.findOne(SELECTOR_NEXT_PREV, this._element)) {\n        triggerTransitionEnd(this._element);\n        this.cycle(true);\n      }\n\n      clearInterval(this._interval);\n      this._interval = null;\n    }\n\n    cycle(event) {\n      if (!event) {\n        this._isPaused = false;\n      }\n\n      if (this._interval) {\n        clearInterval(this._interval);\n        this._interval = null;\n      }\n\n      if (this._config && this._config.interval && !this._isPaused) {\n        this._updateInterval();\n\n        this._interval = setInterval((document.visibilityState ? this.nextWhenVisible : this.next).bind(this), this._config.interval);\n      }\n    }\n\n    to(index) {\n      this._activeElement = SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element);\n\n      const activeIndex = this._getItemIndex(this._activeElement);\n\n      if (index > this._items.length - 1 || index < 0) {\n        return;\n      }\n\n      if (this._isSliding) {\n        EventHandler.one(this._element, EVENT_SLID, () => this.to(index));\n        return;\n      }\n\n      if (activeIndex === index) {\n        this.pause();\n        this.cycle();\n        return;\n      }\n\n      const order = index > activeIndex ? ORDER_NEXT : ORDER_PREV;\n\n      this._slide(order, this._items[index]);\n    } // Private\n\n\n    _getConfig(config) {\n      config = { ...Default$9,\n        ...Manipulator.getDataAttributes(this._element),\n        ...(typeof config === 'object' ? config : {})\n      };\n      typeCheckConfig(NAME$a, config, DefaultType$9);\n      return config;\n    }\n\n    _handleSwipe() {\n      const absDeltax = Math.abs(this.touchDeltaX);\n\n      if (absDeltax <= SWIPE_THRESHOLD) {\n        return;\n      }\n\n      const direction = absDeltax / this.touchDeltaX;\n      this.touchDeltaX = 0;\n\n      if (!direction) {\n        return;\n      }\n\n      this._slide(direction > 0 ? DIRECTION_RIGHT : DIRECTION_LEFT);\n    }\n\n    _addEventListeners() {\n      if (this._config.keyboard) {\n        EventHandler.on(this._element, EVENT_KEYDOWN, event => this._keydown(event));\n      }\n\n      if (this._config.pause === 'hover') {\n        EventHandler.on(this._element, EVENT_MOUSEENTER, event => this.pause(event));\n        EventHandler.on(this._element, EVENT_MOUSELEAVE, event => this.cycle(event));\n      }\n\n      if (this._config.touch && this._touchSupported) {\n        this._addTouchEventListeners();\n      }\n    }\n\n    _addTouchEventListeners() {\n      const start = event => {\n        if (this._pointerEvent && (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH)) {\n          this.touchStartX = event.clientX;\n        } else if (!this._pointerEvent) {\n          this.touchStartX = event.touches[0].clientX;\n        }\n      };\n\n      const move = event => {\n        // ensure swiping with one touch and not pinching\n        this.touchDeltaX = event.touches && event.touches.length > 1 ? 0 : event.touches[0].clientX - this.touchStartX;\n      };\n\n      const end = event => {\n        if (this._pointerEvent && (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH)) {\n          this.touchDeltaX = event.clientX - this.touchStartX;\n        }\n\n        this._handleSwipe();\n\n        if (this._config.pause === 'hover') {\n          // If it's a touch-enabled device, mouseenter/leave are fired as\n          // part of the mouse compatibility events on first tap - the carousel\n          // would stop cycling until user tapped out of it;\n          // here, we listen for touchend, explicitly pause the carousel\n          // (as if it's the second time we tap on it, mouseenter compat event\n          // is NOT fired) and after a timeout (to allow for mouse compatibility\n          // events to fire) we explicitly restart cycling\n          this.pause();\n\n          if (this.touchTimeout) {\n            clearTimeout(this.touchTimeout);\n          }\n\n          this.touchTimeout = setTimeout(event => this.cycle(event), TOUCHEVENT_COMPAT_WAIT + this._config.interval);\n        }\n      };\n\n      SelectorEngine.find(SELECTOR_ITEM_IMG, this._element).forEach(itemImg => {\n        EventHandler.on(itemImg, EVENT_DRAG_START, e => e.preventDefault());\n      });\n\n      if (this._pointerEvent) {\n        EventHandler.on(this._element, EVENT_POINTERDOWN, event => start(event));\n        EventHandler.on(this._element, EVENT_POINTERUP, event => end(event));\n\n        this._element.classList.add(CLASS_NAME_POINTER_EVENT);\n      } else {\n        EventHandler.on(this._element, EVENT_TOUCHSTART, event => start(event));\n        EventHandler.on(this._element, EVENT_TOUCHMOVE, event => move(event));\n        EventHandler.on(this._element, EVENT_TOUCHEND, event => end(event));\n      }\n    }\n\n    _keydown(event) {\n      if (/input|textarea/i.test(event.target.tagName)) {\n        return;\n      }\n\n      const direction = KEY_TO_DIRECTION[event.key];\n\n      if (direction) {\n        event.preventDefault();\n\n        this._slide(direction);\n      }\n    }\n\n    _getItemIndex(element) {\n      this._items = element && element.parentNode ? SelectorEngine.find(SELECTOR_ITEM, element.parentNode) : [];\n      return this._items.indexOf(element);\n    }\n\n    _getItemByOrder(order, activeElement) {\n      const isNext = order === ORDER_NEXT;\n      return getNextActiveElement(this._items, activeElement, isNext, this._config.wrap);\n    }\n\n    _triggerSlideEvent(relatedTarget, eventDirectionName) {\n      const targetIndex = this._getItemIndex(relatedTarget);\n\n      const fromIndex = this._getItemIndex(SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element));\n\n      return EventHandler.trigger(this._element, EVENT_SLIDE, {\n        relatedTarget,\n        direction: eventDirectionName,\n        from: fromIndex,\n        to: targetIndex\n      });\n    }\n\n    _setActiveIndicatorElement(element) {\n      if (this._indicatorsElement) {\n        const activeIndicator = SelectorEngine.findOne(SELECTOR_ACTIVE$1, this._indicatorsElement);\n        activeIndicator.classList.remove(CLASS_NAME_ACTIVE$2);\n        activeIndicator.removeAttribute('aria-current');\n        const indicators = SelectorEngine.find(SELECTOR_INDICATOR, this._indicatorsElement);\n\n        for (let i = 0; i < indicators.length; i++) {\n          if (Number.parseInt(indicators[i].getAttribute('data-bs-slide-to'), 10) === this._getItemIndex(element)) {\n            indicators[i].classList.add(CLASS_NAME_ACTIVE$2);\n            indicators[i].setAttribute('aria-current', 'true');\n            break;\n          }\n        }\n      }\n    }\n\n    _updateInterval() {\n      const element = this._activeElement || SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element);\n\n      if (!element) {\n        return;\n      }\n\n      const elementInterval = Number.parseInt(element.getAttribute('data-bs-interval'), 10);\n\n      if (elementInterval) {\n        this._config.defaultInterval = this._config.defaultInterval || this._config.interval;\n        this._config.interval = elementInterval;\n      } else {\n        this._config.interval = this._config.defaultInterval || this._config.interval;\n      }\n    }\n\n    _slide(directionOrOrder, element) {\n      const order = this._directionToOrder(directionOrOrder);\n\n      const activeElement = SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element);\n\n      const activeElementIndex = this._getItemIndex(activeElement);\n\n      const nextElement = element || this._getItemByOrder(order, activeElement);\n\n      const nextElementIndex = this._getItemIndex(nextElement);\n\n      const isCycling = Boolean(this._interval);\n      const isNext = order === ORDER_NEXT;\n      const directionalClassName = isNext ? CLASS_NAME_START : CLASS_NAME_END;\n      const orderClassName = isNext ? CLASS_NAME_NEXT : CLASS_NAME_PREV;\n\n      const eventDirectionName = this._orderToDirection(order);\n\n      if (nextElement && nextElement.classList.contains(CLASS_NAME_ACTIVE$2)) {\n        this._isSliding = false;\n        return;\n      }\n\n      if (this._isSliding) {\n        return;\n      }\n\n      const slideEvent = this._triggerSlideEvent(nextElement, eventDirectionName);\n\n      if (slideEvent.defaultPrevented) {\n        return;\n      }\n\n      if (!activeElement || !nextElement) {\n        // Some weirdness is happening, so we bail\n        return;\n      }\n\n      this._isSliding = true;\n\n      if (isCycling) {\n        this.pause();\n      }\n\n      this._setActiveIndicatorElement(nextElement);\n\n      this._activeElement = nextElement;\n\n      const triggerSlidEvent = () => {\n        EventHandler.trigger(this._element, EVENT_SLID, {\n          relatedTarget: nextElement,\n          direction: eventDirectionName,\n          from: activeElementIndex,\n          to: nextElementIndex\n        });\n      };\n\n      if (this._element.classList.contains(CLASS_NAME_SLIDE)) {\n        nextElement.classList.add(orderClassName);\n        reflow(nextElement);\n        activeElement.classList.add(directionalClassName);\n        nextElement.classList.add(directionalClassName);\n\n        const completeCallBack = () => {\n          nextElement.classList.remove(directionalClassName, orderClassName);\n          nextElement.classList.add(CLASS_NAME_ACTIVE$2);\n          activeElement.classList.remove(CLASS_NAME_ACTIVE$2, orderClassName, directionalClassName);\n          this._isSliding = false;\n          setTimeout(triggerSlidEvent, 0);\n        };\n\n        this._queueCallback(completeCallBack, activeElement, true);\n      } else {\n        activeElement.classList.remove(CLASS_NAME_ACTIVE$2);\n        nextElement.classList.add(CLASS_NAME_ACTIVE$2);\n        this._isSliding = false;\n        triggerSlidEvent();\n      }\n\n      if (isCycling) {\n        this.cycle();\n      }\n    }\n\n    _directionToOrder(direction) {\n      if (![DIRECTION_RIGHT, DIRECTION_LEFT].includes(direction)) {\n        return direction;\n      }\n\n      if (isRTL()) {\n        return direction === DIRECTION_LEFT ? ORDER_PREV : ORDER_NEXT;\n      }\n\n      return direction === DIRECTION_LEFT ? ORDER_NEXT : ORDER_PREV;\n    }\n\n    _orderToDirection(order) {\n      if (![ORDER_NEXT, ORDER_PREV].includes(order)) {\n        return order;\n      }\n\n      if (isRTL()) {\n        return order === ORDER_PREV ? DIRECTION_LEFT : DIRECTION_RIGHT;\n      }\n\n      return order === ORDER_PREV ? DIRECTION_RIGHT : DIRECTION_LEFT;\n    } // Static\n\n\n    static carouselInterface(element, config) {\n      const data = Carousel.getOrCreateInstance(element, config);\n      let {\n        _config\n      } = data;\n\n      if (typeof config === 'object') {\n        _config = { ..._config,\n          ...config\n        };\n      }\n\n      const action = typeof config === 'string' ? config : _config.slide;\n\n      if (typeof config === 'number') {\n        data.to(config);\n      } else if (typeof action === 'string') {\n        if (typeof data[action] === 'undefined') {\n          throw new TypeError(`No method named \"${action}\"`);\n        }\n\n        data[action]();\n      } else if (_config.interval && _config.ride) {\n        data.pause();\n        data.cycle();\n      }\n    }\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        Carousel.carouselInterface(this, config);\n      });\n    }\n\n    static dataApiClickHandler(event) {\n      const target = getElementFromSelector(this);\n\n      if (!target || !target.classList.contains(CLASS_NAME_CAROUSEL)) {\n        return;\n      }\n\n      const config = { ...Manipulator.getDataAttributes(target),\n        ...Manipulator.getDataAttributes(this)\n      };\n      const slideIndex = this.getAttribute('data-bs-slide-to');\n\n      if (slideIndex) {\n        config.interval = false;\n      }\n\n      Carousel.carouselInterface(target, config);\n\n      if (slideIndex) {\n        Carousel.getInstance(target).to(slideIndex);\n      }\n\n      event.preventDefault();\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(document, EVENT_CLICK_DATA_API$5, SELECTOR_DATA_SLIDE, Carousel.dataApiClickHandler);\n  EventHandler.on(window, EVENT_LOAD_DATA_API$2, () => {\n    const carousels = SelectorEngine.find(SELECTOR_DATA_RIDE);\n\n    for (let i = 0, len = carousels.length; i < len; i++) {\n      Carousel.carouselInterface(carousels[i], Carousel.getInstance(carousels[i]));\n    }\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Carousel to jQuery only if jQuery is present\n   */\n\n  defineJQueryPlugin(Carousel);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): collapse.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$9 = 'collapse';\n  const DATA_KEY$8 = 'bs.collapse';\n  const EVENT_KEY$8 = `.${DATA_KEY$8}`;\n  const DATA_API_KEY$5 = '.data-api';\n  const Default$8 = {\n    toggle: true,\n    parent: ''\n  };\n  const DefaultType$8 = {\n    toggle: 'boolean',\n    parent: '(string|element)'\n  };\n  const EVENT_SHOW$5 = `show${EVENT_KEY$8}`;\n  const EVENT_SHOWN$5 = `shown${EVENT_KEY$8}`;\n  const EVENT_HIDE$5 = `hide${EVENT_KEY$8}`;\n  const EVENT_HIDDEN$5 = `hidden${EVENT_KEY$8}`;\n  const EVENT_CLICK_DATA_API$4 = `click${EVENT_KEY$8}${DATA_API_KEY$5}`;\n  const CLASS_NAME_SHOW$8 = 'show';\n  const CLASS_NAME_COLLAPSE = 'collapse';\n  const CLASS_NAME_COLLAPSING = 'collapsing';\n  const CLASS_NAME_COLLAPSED = 'collapsed';\n  const WIDTH = 'width';\n  const HEIGHT = 'height';\n  const SELECTOR_ACTIVES = '.show, .collapsing';\n  const SELECTOR_DATA_TOGGLE$4 = '[data-bs-toggle=\"collapse\"]';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Collapse extends BaseComponent {\n    constructor(element, config) {\n      super(element);\n      this._isTransitioning = false;\n      this._config = this._getConfig(config);\n      this._triggerArray = SelectorEngine.find(`${SELECTOR_DATA_TOGGLE$4}[href=\"#${this._element.id}\"],` + `${SELECTOR_DATA_TOGGLE$4}[data-bs-target=\"#${this._element.id}\"]`);\n      const toggleList = SelectorEngine.find(SELECTOR_DATA_TOGGLE$4);\n\n      for (let i = 0, len = toggleList.length; i < len; i++) {\n        const elem = toggleList[i];\n        const selector = getSelectorFromElement(elem);\n        const filterElement = SelectorEngine.find(selector).filter(foundElem => foundElem === this._element);\n\n        if (selector !== null && filterElement.length) {\n          this._selector = selector;\n\n          this._triggerArray.push(elem);\n        }\n      }\n\n      this._parent = this._config.parent ? this._getParent() : null;\n\n      if (!this._config.parent) {\n        this._addAriaAndCollapsedClass(this._element, this._triggerArray);\n      }\n\n      if (this._config.toggle) {\n        this.toggle();\n      }\n    } // Getters\n\n\n    static get Default() {\n      return Default$8;\n    }\n\n    static get NAME() {\n      return NAME$9;\n    } // Public\n\n\n    toggle() {\n      if (this._element.classList.contains(CLASS_NAME_SHOW$8)) {\n        this.hide();\n      } else {\n        this.show();\n      }\n    }\n\n    show() {\n      if (this._isTransitioning || this._element.classList.contains(CLASS_NAME_SHOW$8)) {\n        return;\n      }\n\n      let actives;\n      let activesData;\n\n      if (this._parent) {\n        actives = SelectorEngine.find(SELECTOR_ACTIVES, this._parent).filter(elem => {\n          if (typeof this._config.parent === 'string') {\n            return elem.getAttribute('data-bs-parent') === this._config.parent;\n          }\n\n          return elem.classList.contains(CLASS_NAME_COLLAPSE);\n        });\n\n        if (actives.length === 0) {\n          actives = null;\n        }\n      }\n\n      const container = SelectorEngine.findOne(this._selector);\n\n      if (actives) {\n        const tempActiveData = actives.find(elem => container !== elem);\n        activesData = tempActiveData ? Collapse.getInstance(tempActiveData) : null;\n\n        if (activesData && activesData._isTransitioning) {\n          return;\n        }\n      }\n\n      const startEvent = EventHandler.trigger(this._element, EVENT_SHOW$5);\n\n      if (startEvent.defaultPrevented) {\n        return;\n      }\n\n      if (actives) {\n        actives.forEach(elemActive => {\n          if (container !== elemActive) {\n            Collapse.collapseInterface(elemActive, 'hide');\n          }\n\n          if (!activesData) {\n            Data.set(elemActive, DATA_KEY$8, null);\n          }\n        });\n      }\n\n      const dimension = this._getDimension();\n\n      this._element.classList.remove(CLASS_NAME_COLLAPSE);\n\n      this._element.classList.add(CLASS_NAME_COLLAPSING);\n\n      this._element.style[dimension] = 0;\n\n      if (this._triggerArray.length) {\n        this._triggerArray.forEach(element => {\n          element.classList.remove(CLASS_NAME_COLLAPSED);\n          element.setAttribute('aria-expanded', true);\n        });\n      }\n\n      this.setTransitioning(true);\n\n      const complete = () => {\n        this._element.classList.remove(CLASS_NAME_COLLAPSING);\n\n        this._element.classList.add(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$8);\n\n        this._element.style[dimension] = '';\n        this.setTransitioning(false);\n        EventHandler.trigger(this._element, EVENT_SHOWN$5);\n      };\n\n      const capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1);\n      const scrollSize = `scroll${capitalizedDimension}`;\n\n      this._queueCallback(complete, this._element, true);\n\n      this._element.style[dimension] = `${this._element[scrollSize]}px`;\n    }\n\n    hide() {\n      if (this._isTransitioning || !this._element.classList.contains(CLASS_NAME_SHOW$8)) {\n        return;\n      }\n\n      const startEvent = EventHandler.trigger(this._element, EVENT_HIDE$5);\n\n      if (startEvent.defaultPrevented) {\n        return;\n      }\n\n      const dimension = this._getDimension();\n\n      this._element.style[dimension] = `${this._element.getBoundingClientRect()[dimension]}px`;\n      reflow(this._element);\n\n      this._element.classList.add(CLASS_NAME_COLLAPSING);\n\n      this._element.classList.remove(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$8);\n\n      const triggerArrayLength = this._triggerArray.length;\n\n      if (triggerArrayLength > 0) {\n        for (let i = 0; i < triggerArrayLength; i++) {\n          const trigger = this._triggerArray[i];\n          const elem = getElementFromSelector(trigger);\n\n          if (elem && !elem.classList.contains(CLASS_NAME_SHOW$8)) {\n            trigger.classList.add(CLASS_NAME_COLLAPSED);\n            trigger.setAttribute('aria-expanded', false);\n          }\n        }\n      }\n\n      this.setTransitioning(true);\n\n      const complete = () => {\n        this.setTransitioning(false);\n\n        this._element.classList.remove(CLASS_NAME_COLLAPSING);\n\n        this._element.classList.add(CLASS_NAME_COLLAPSE);\n\n        EventHandler.trigger(this._element, EVENT_HIDDEN$5);\n      };\n\n      this._element.style[dimension] = '';\n\n      this._queueCallback(complete, this._element, true);\n    }\n\n    setTransitioning(isTransitioning) {\n      this._isTransitioning = isTransitioning;\n    } // Private\n\n\n    _getConfig(config) {\n      config = { ...Default$8,\n        ...config\n      };\n      config.toggle = Boolean(config.toggle); // Coerce string values\n\n      typeCheckConfig(NAME$9, config, DefaultType$8);\n      return config;\n    }\n\n    _getDimension() {\n      return this._element.classList.contains(WIDTH) ? WIDTH : HEIGHT;\n    }\n\n    _getParent() {\n      let {\n        parent\n      } = this._config;\n      parent = getElement(parent);\n      const selector = `${SELECTOR_DATA_TOGGLE$4}[data-bs-parent=\"${parent}\"]`;\n      SelectorEngine.find(selector, parent).forEach(element => {\n        const selected = getElementFromSelector(element);\n\n        this._addAriaAndCollapsedClass(selected, [element]);\n      });\n      return parent;\n    }\n\n    _addAriaAndCollapsedClass(element, triggerArray) {\n      if (!element || !triggerArray.length) {\n        return;\n      }\n\n      const isOpen = element.classList.contains(CLASS_NAME_SHOW$8);\n      triggerArray.forEach(elem => {\n        if (isOpen) {\n          elem.classList.remove(CLASS_NAME_COLLAPSED);\n        } else {\n          elem.classList.add(CLASS_NAME_COLLAPSED);\n        }\n\n        elem.setAttribute('aria-expanded', isOpen);\n      });\n    } // Static\n\n\n    static collapseInterface(element, config) {\n      let data = Collapse.getInstance(element);\n      const _config = { ...Default$8,\n        ...Manipulator.getDataAttributes(element),\n        ...(typeof config === 'object' && config ? config : {})\n      };\n\n      if (!data && _config.toggle && typeof config === 'string' && /show|hide/.test(config)) {\n        _config.toggle = false;\n      }\n\n      if (!data) {\n        data = new Collapse(element, _config);\n      }\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config]();\n      }\n    }\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        Collapse.collapseInterface(this, config);\n      });\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(document, EVENT_CLICK_DATA_API$4, SELECTOR_DATA_TOGGLE$4, function (event) {\n    // preventDefault only for <a> elements (which change the URL) not inside the collapsible element\n    if (event.target.tagName === 'A' || event.delegateTarget && event.delegateTarget.tagName === 'A') {\n      event.preventDefault();\n    }\n\n    const triggerData = Manipulator.getDataAttributes(this);\n    const selector = getSelectorFromElement(this);\n    const selectorElements = SelectorEngine.find(selector);\n    selectorElements.forEach(element => {\n      const data = Collapse.getInstance(element);\n      let config;\n\n      if (data) {\n        // update parent attribute\n        if (data._parent === null && typeof triggerData.parent === 'string') {\n          data._config.parent = triggerData.parent;\n          data._parent = data._getParent();\n        }\n\n        config = 'toggle';\n      } else {\n        config = triggerData;\n      }\n\n      Collapse.collapseInterface(element, config);\n    });\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Collapse to jQuery only if jQuery is present\n   */\n\n  defineJQueryPlugin(Collapse);\n\n  var top = 'top';\n  var bottom = 'bottom';\n  var right = 'right';\n  var left = 'left';\n  var auto = 'auto';\n  var basePlacements = [top, bottom, right, left];\n  var start = 'start';\n  var end = 'end';\n  var clippingParents = 'clippingParents';\n  var viewport = 'viewport';\n  var popper = 'popper';\n  var reference = 'reference';\n  var variationPlacements = /*#__PURE__*/basePlacements.reduce(function (acc, placement) {\n    return acc.concat([placement + \"-\" + start, placement + \"-\" + end]);\n  }, []);\n  var placements = /*#__PURE__*/[].concat(basePlacements, [auto]).reduce(function (acc, placement) {\n    return acc.concat([placement, placement + \"-\" + start, placement + \"-\" + end]);\n  }, []); // modifiers that need to read the DOM\n\n  var beforeRead = 'beforeRead';\n  var read = 'read';\n  var afterRead = 'afterRead'; // pure-logic modifiers\n\n  var beforeMain = 'beforeMain';\n  var main = 'main';\n  var afterMain = 'afterMain'; // modifier with the purpose to write to the DOM (or write into a framework state)\n\n  var beforeWrite = 'beforeWrite';\n  var write = 'write';\n  var afterWrite = 'afterWrite';\n  var modifierPhases = [beforeRead, read, afterRead, beforeMain, main, afterMain, beforeWrite, write, afterWrite];\n\n  function getNodeName(element) {\n    return element ? (element.nodeName || '').toLowerCase() : null;\n  }\n\n  function getWindow(node) {\n    if (node == null) {\n      return window;\n    }\n\n    if (node.toString() !== '[object Window]') {\n      var ownerDocument = node.ownerDocument;\n      return ownerDocument ? ownerDocument.defaultView || window : window;\n    }\n\n    return node;\n  }\n\n  function isElement(node) {\n    var OwnElement = getWindow(node).Element;\n    return node instanceof OwnElement || node instanceof Element;\n  }\n\n  function isHTMLElement(node) {\n    var OwnElement = getWindow(node).HTMLElement;\n    return node instanceof OwnElement || node instanceof HTMLElement;\n  }\n\n  function isShadowRoot(node) {\n    // IE 11 has no ShadowRoot\n    if (typeof ShadowRoot === 'undefined') {\n      return false;\n    }\n\n    var OwnElement = getWindow(node).ShadowRoot;\n    return node instanceof OwnElement || node instanceof ShadowRoot;\n  }\n\n  // and applies them to the HTMLElements such as popper and arrow\n\n  function applyStyles(_ref) {\n    var state = _ref.state;\n    Object.keys(state.elements).forEach(function (name) {\n      var style = state.styles[name] || {};\n      var attributes = state.attributes[name] || {};\n      var element = state.elements[name]; // arrow is optional + virtual elements\n\n      if (!isHTMLElement(element) || !getNodeName(element)) {\n        return;\n      } // Flow doesn't support to extend this property, but it's the most\n      // effective way to apply styles to an HTMLElement\n      // $FlowFixMe[cannot-write]\n\n\n      Object.assign(element.style, style);\n      Object.keys(attributes).forEach(function (name) {\n        var value = attributes[name];\n\n        if (value === false) {\n          element.removeAttribute(name);\n        } else {\n          element.setAttribute(name, value === true ? '' : value);\n        }\n      });\n    });\n  }\n\n  function effect$2(_ref2) {\n    var state = _ref2.state;\n    var initialStyles = {\n      popper: {\n        position: state.options.strategy,\n        left: '0',\n        top: '0',\n        margin: '0'\n      },\n      arrow: {\n        position: 'absolute'\n      },\n      reference: {}\n    };\n    Object.assign(state.elements.popper.style, initialStyles.popper);\n    state.styles = initialStyles;\n\n    if (state.elements.arrow) {\n      Object.assign(state.elements.arrow.style, initialStyles.arrow);\n    }\n\n    return function () {\n      Object.keys(state.elements).forEach(function (name) {\n        var element = state.elements[name];\n        var attributes = state.attributes[name] || {};\n        var styleProperties = Object.keys(state.styles.hasOwnProperty(name) ? state.styles[name] : initialStyles[name]); // Set all values to an empty string to unset them\n\n        var style = styleProperties.reduce(function (style, property) {\n          style[property] = '';\n          return style;\n        }, {}); // arrow is optional + virtual elements\n\n        if (!isHTMLElement(element) || !getNodeName(element)) {\n          return;\n        }\n\n        Object.assign(element.style, style);\n        Object.keys(attributes).forEach(function (attribute) {\n          element.removeAttribute(attribute);\n        });\n      });\n    };\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  var applyStyles$1 = {\n    name: 'applyStyles',\n    enabled: true,\n    phase: 'write',\n    fn: applyStyles,\n    effect: effect$2,\n    requires: ['computeStyles']\n  };\n\n  function getBasePlacement(placement) {\n    return placement.split('-')[0];\n  }\n\n  function getBoundingClientRect(element) {\n    var rect = element.getBoundingClientRect();\n    return {\n      width: rect.width,\n      height: rect.height,\n      top: rect.top,\n      right: rect.right,\n      bottom: rect.bottom,\n      left: rect.left,\n      x: rect.left,\n      y: rect.top\n    };\n  }\n\n  // means it doesn't take into account transforms.\n\n  function getLayoutRect(element) {\n    var clientRect = getBoundingClientRect(element); // Use the clientRect sizes if it's not been transformed.\n    // Fixes https://github.com/popperjs/popper-core/issues/1223\n\n    var width = element.offsetWidth;\n    var height = element.offsetHeight;\n\n    if (Math.abs(clientRect.width - width) <= 1) {\n      width = clientRect.width;\n    }\n\n    if (Math.abs(clientRect.height - height) <= 1) {\n      height = clientRect.height;\n    }\n\n    return {\n      x: element.offsetLeft,\n      y: element.offsetTop,\n      width: width,\n      height: height\n    };\n  }\n\n  function contains(parent, child) {\n    var rootNode = child.getRootNode && child.getRootNode(); // First, attempt with faster native method\n\n    if (parent.contains(child)) {\n      return true;\n    } // then fallback to custom implementation with Shadow DOM support\n    else if (rootNode && isShadowRoot(rootNode)) {\n        var next = child;\n\n        do {\n          if (next && parent.isSameNode(next)) {\n            return true;\n          } // $FlowFixMe[prop-missing]: need a better way to handle this...\n\n\n          next = next.parentNode || next.host;\n        } while (next);\n      } // Give up, the result is false\n\n\n    return false;\n  }\n\n  function getComputedStyle$1(element) {\n    return getWindow(element).getComputedStyle(element);\n  }\n\n  function isTableElement(element) {\n    return ['table', 'td', 'th'].indexOf(getNodeName(element)) >= 0;\n  }\n\n  function getDocumentElement(element) {\n    // $FlowFixMe[incompatible-return]: assume body is always available\n    return ((isElement(element) ? element.ownerDocument : // $FlowFixMe[prop-missing]\n    element.document) || window.document).documentElement;\n  }\n\n  function getParentNode(element) {\n    if (getNodeName(element) === 'html') {\n      return element;\n    }\n\n    return (// this is a quicker (but less type safe) way to save quite some bytes from the bundle\n      // $FlowFixMe[incompatible-return]\n      // $FlowFixMe[prop-missing]\n      element.assignedSlot || // step into the shadow DOM of the parent of a slotted node\n      element.parentNode || ( // DOM Element detected\n      isShadowRoot(element) ? element.host : null) || // ShadowRoot detected\n      // $FlowFixMe[incompatible-call]: HTMLElement is a Node\n      getDocumentElement(element) // fallback\n\n    );\n  }\n\n  function getTrueOffsetParent(element) {\n    if (!isHTMLElement(element) || // https://github.com/popperjs/popper-core/issues/837\n    getComputedStyle$1(element).position === 'fixed') {\n      return null;\n    }\n\n    return element.offsetParent;\n  } // `.offsetParent` reports `null` for fixed elements, while absolute elements\n  // return the containing block\n\n\n  function getContainingBlock(element) {\n    var isFirefox = navigator.userAgent.toLowerCase().indexOf('firefox') !== -1;\n    var isIE = navigator.userAgent.indexOf('Trident') !== -1;\n\n    if (isIE && isHTMLElement(element)) {\n      // In IE 9, 10 and 11 fixed elements containing block is always established by the viewport\n      var elementCss = getComputedStyle$1(element);\n\n      if (elementCss.position === 'fixed') {\n        return null;\n      }\n    }\n\n    var currentNode = getParentNode(element);\n\n    while (isHTMLElement(currentNode) && ['html', 'body'].indexOf(getNodeName(currentNode)) < 0) {\n      var css = getComputedStyle$1(currentNode); // This is non-exhaustive but covers the most common CSS properties that\n      // create a containing block.\n      // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n\n      if (css.transform !== 'none' || css.perspective !== 'none' || css.contain === 'paint' || ['transform', 'perspective'].indexOf(css.willChange) !== -1 || isFirefox && css.willChange === 'filter' || isFirefox && css.filter && css.filter !== 'none') {\n        return currentNode;\n      } else {\n        currentNode = currentNode.parentNode;\n      }\n    }\n\n    return null;\n  } // Gets the closest ancestor positioned element. Handles some edge cases,\n  // such as table ancestors and cross browser bugs.\n\n\n  function getOffsetParent(element) {\n    var window = getWindow(element);\n    var offsetParent = getTrueOffsetParent(element);\n\n    while (offsetParent && isTableElement(offsetParent) && getComputedStyle$1(offsetParent).position === 'static') {\n      offsetParent = getTrueOffsetParent(offsetParent);\n    }\n\n    if (offsetParent && (getNodeName(offsetParent) === 'html' || getNodeName(offsetParent) === 'body' && getComputedStyle$1(offsetParent).position === 'static')) {\n      return window;\n    }\n\n    return offsetParent || getContainingBlock(element) || window;\n  }\n\n  function getMainAxisFromPlacement(placement) {\n    return ['top', 'bottom'].indexOf(placement) >= 0 ? 'x' : 'y';\n  }\n\n  var max = Math.max;\n  var min = Math.min;\n  var round = Math.round;\n\n  function within(min$1, value, max$1) {\n    return max(min$1, min(value, max$1));\n  }\n\n  function getFreshSideObject() {\n    return {\n      top: 0,\n      right: 0,\n      bottom: 0,\n      left: 0\n    };\n  }\n\n  function mergePaddingObject(paddingObject) {\n    return Object.assign({}, getFreshSideObject(), paddingObject);\n  }\n\n  function expandToHashMap(value, keys) {\n    return keys.reduce(function (hashMap, key) {\n      hashMap[key] = value;\n      return hashMap;\n    }, {});\n  }\n\n  var toPaddingObject = function toPaddingObject(padding, state) {\n    padding = typeof padding === 'function' ? padding(Object.assign({}, state.rects, {\n      placement: state.placement\n    })) : padding;\n    return mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));\n  };\n\n  function arrow(_ref) {\n    var _state$modifiersData$;\n\n    var state = _ref.state,\n        name = _ref.name,\n        options = _ref.options;\n    var arrowElement = state.elements.arrow;\n    var popperOffsets = state.modifiersData.popperOffsets;\n    var basePlacement = getBasePlacement(state.placement);\n    var axis = getMainAxisFromPlacement(basePlacement);\n    var isVertical = [left, right].indexOf(basePlacement) >= 0;\n    var len = isVertical ? 'height' : 'width';\n\n    if (!arrowElement || !popperOffsets) {\n      return;\n    }\n\n    var paddingObject = toPaddingObject(options.padding, state);\n    var arrowRect = getLayoutRect(arrowElement);\n    var minProp = axis === 'y' ? top : left;\n    var maxProp = axis === 'y' ? bottom : right;\n    var endDiff = state.rects.reference[len] + state.rects.reference[axis] - popperOffsets[axis] - state.rects.popper[len];\n    var startDiff = popperOffsets[axis] - state.rects.reference[axis];\n    var arrowOffsetParent = getOffsetParent(arrowElement);\n    var clientSize = arrowOffsetParent ? axis === 'y' ? arrowOffsetParent.clientHeight || 0 : arrowOffsetParent.clientWidth || 0 : 0;\n    var centerToReference = endDiff / 2 - startDiff / 2; // Make sure the arrow doesn't overflow the popper if the center point is\n    // outside of the popper bounds\n\n    var min = paddingObject[minProp];\n    var max = clientSize - arrowRect[len] - paddingObject[maxProp];\n    var center = clientSize / 2 - arrowRect[len] / 2 + centerToReference;\n    var offset = within(min, center, max); // Prevents breaking syntax highlighting...\n\n    var axisProp = axis;\n    state.modifiersData[name] = (_state$modifiersData$ = {}, _state$modifiersData$[axisProp] = offset, _state$modifiersData$.centerOffset = offset - center, _state$modifiersData$);\n  }\n\n  function effect$1(_ref2) {\n    var state = _ref2.state,\n        options = _ref2.options;\n    var _options$element = options.element,\n        arrowElement = _options$element === void 0 ? '[data-popper-arrow]' : _options$element;\n\n    if (arrowElement == null) {\n      return;\n    } // CSS selector\n\n\n    if (typeof arrowElement === 'string') {\n      arrowElement = state.elements.popper.querySelector(arrowElement);\n\n      if (!arrowElement) {\n        return;\n      }\n    }\n\n    if (!contains(state.elements.popper, arrowElement)) {\n\n      return;\n    }\n\n    state.elements.arrow = arrowElement;\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  var arrow$1 = {\n    name: 'arrow',\n    enabled: true,\n    phase: 'main',\n    fn: arrow,\n    effect: effect$1,\n    requires: ['popperOffsets'],\n    requiresIfExists: ['preventOverflow']\n  };\n\n  var unsetSides = {\n    top: 'auto',\n    right: 'auto',\n    bottom: 'auto',\n    left: 'auto'\n  }; // Round the offsets to the nearest suitable subpixel based on the DPR.\n  // Zooming can change the DPR, but it seems to report a value that will\n  // cleanly divide the values into the appropriate subpixels.\n\n  function roundOffsetsByDPR(_ref) {\n    var x = _ref.x,\n        y = _ref.y;\n    var win = window;\n    var dpr = win.devicePixelRatio || 1;\n    return {\n      x: round(round(x * dpr) / dpr) || 0,\n      y: round(round(y * dpr) / dpr) || 0\n    };\n  }\n\n  function mapToStyles(_ref2) {\n    var _Object$assign2;\n\n    var popper = _ref2.popper,\n        popperRect = _ref2.popperRect,\n        placement = _ref2.placement,\n        offsets = _ref2.offsets,\n        position = _ref2.position,\n        gpuAcceleration = _ref2.gpuAcceleration,\n        adaptive = _ref2.adaptive,\n        roundOffsets = _ref2.roundOffsets;\n\n    var _ref3 = roundOffsets === true ? roundOffsetsByDPR(offsets) : typeof roundOffsets === 'function' ? roundOffsets(offsets) : offsets,\n        _ref3$x = _ref3.x,\n        x = _ref3$x === void 0 ? 0 : _ref3$x,\n        _ref3$y = _ref3.y,\n        y = _ref3$y === void 0 ? 0 : _ref3$y;\n\n    var hasX = offsets.hasOwnProperty('x');\n    var hasY = offsets.hasOwnProperty('y');\n    var sideX = left;\n    var sideY = top;\n    var win = window;\n\n    if (adaptive) {\n      var offsetParent = getOffsetParent(popper);\n      var heightProp = 'clientHeight';\n      var widthProp = 'clientWidth';\n\n      if (offsetParent === getWindow(popper)) {\n        offsetParent = getDocumentElement(popper);\n\n        if (getComputedStyle$1(offsetParent).position !== 'static') {\n          heightProp = 'scrollHeight';\n          widthProp = 'scrollWidth';\n        }\n      } // $FlowFixMe[incompatible-cast]: force type refinement, we compare offsetParent with window above, but Flow doesn't detect it\n\n\n      offsetParent = offsetParent;\n\n      if (placement === top) {\n        sideY = bottom; // $FlowFixMe[prop-missing]\n\n        y -= offsetParent[heightProp] - popperRect.height;\n        y *= gpuAcceleration ? 1 : -1;\n      }\n\n      if (placement === left) {\n        sideX = right; // $FlowFixMe[prop-missing]\n\n        x -= offsetParent[widthProp] - popperRect.width;\n        x *= gpuAcceleration ? 1 : -1;\n      }\n    }\n\n    var commonStyles = Object.assign({\n      position: position\n    }, adaptive && unsetSides);\n\n    if (gpuAcceleration) {\n      var _Object$assign;\n\n      return Object.assign({}, commonStyles, (_Object$assign = {}, _Object$assign[sideY] = hasY ? '0' : '', _Object$assign[sideX] = hasX ? '0' : '', _Object$assign.transform = (win.devicePixelRatio || 1) < 2 ? \"translate(\" + x + \"px, \" + y + \"px)\" : \"translate3d(\" + x + \"px, \" + y + \"px, 0)\", _Object$assign));\n    }\n\n    return Object.assign({}, commonStyles, (_Object$assign2 = {}, _Object$assign2[sideY] = hasY ? y + \"px\" : '', _Object$assign2[sideX] = hasX ? x + \"px\" : '', _Object$assign2.transform = '', _Object$assign2));\n  }\n\n  function computeStyles(_ref4) {\n    var state = _ref4.state,\n        options = _ref4.options;\n    var _options$gpuAccelerat = options.gpuAcceleration,\n        gpuAcceleration = _options$gpuAccelerat === void 0 ? true : _options$gpuAccelerat,\n        _options$adaptive = options.adaptive,\n        adaptive = _options$adaptive === void 0 ? true : _options$adaptive,\n        _options$roundOffsets = options.roundOffsets,\n        roundOffsets = _options$roundOffsets === void 0 ? true : _options$roundOffsets;\n\n    var commonStyles = {\n      placement: getBasePlacement(state.placement),\n      popper: state.elements.popper,\n      popperRect: state.rects.popper,\n      gpuAcceleration: gpuAcceleration\n    };\n\n    if (state.modifiersData.popperOffsets != null) {\n      state.styles.popper = Object.assign({}, state.styles.popper, mapToStyles(Object.assign({}, commonStyles, {\n        offsets: state.modifiersData.popperOffsets,\n        position: state.options.strategy,\n        adaptive: adaptive,\n        roundOffsets: roundOffsets\n      })));\n    }\n\n    if (state.modifiersData.arrow != null) {\n      state.styles.arrow = Object.assign({}, state.styles.arrow, mapToStyles(Object.assign({}, commonStyles, {\n        offsets: state.modifiersData.arrow,\n        position: 'absolute',\n        adaptive: false,\n        roundOffsets: roundOffsets\n      })));\n    }\n\n    state.attributes.popper = Object.assign({}, state.attributes.popper, {\n      'data-popper-placement': state.placement\n    });\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  var computeStyles$1 = {\n    name: 'computeStyles',\n    enabled: true,\n    phase: 'beforeWrite',\n    fn: computeStyles,\n    data: {}\n  };\n\n  var passive = {\n    passive: true\n  };\n\n  function effect(_ref) {\n    var state = _ref.state,\n        instance = _ref.instance,\n        options = _ref.options;\n    var _options$scroll = options.scroll,\n        scroll = _options$scroll === void 0 ? true : _options$scroll,\n        _options$resize = options.resize,\n        resize = _options$resize === void 0 ? true : _options$resize;\n    var window = getWindow(state.elements.popper);\n    var scrollParents = [].concat(state.scrollParents.reference, state.scrollParents.popper);\n\n    if (scroll) {\n      scrollParents.forEach(function (scrollParent) {\n        scrollParent.addEventListener('scroll', instance.update, passive);\n      });\n    }\n\n    if (resize) {\n      window.addEventListener('resize', instance.update, passive);\n    }\n\n    return function () {\n      if (scroll) {\n        scrollParents.forEach(function (scrollParent) {\n          scrollParent.removeEventListener('scroll', instance.update, passive);\n        });\n      }\n\n      if (resize) {\n        window.removeEventListener('resize', instance.update, passive);\n      }\n    };\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  var eventListeners = {\n    name: 'eventListeners',\n    enabled: true,\n    phase: 'write',\n    fn: function fn() {},\n    effect: effect,\n    data: {}\n  };\n\n  var hash$1 = {\n    left: 'right',\n    right: 'left',\n    bottom: 'top',\n    top: 'bottom'\n  };\n  function getOppositePlacement(placement) {\n    return placement.replace(/left|right|bottom|top/g, function (matched) {\n      return hash$1[matched];\n    });\n  }\n\n  var hash = {\n    start: 'end',\n    end: 'start'\n  };\n  function getOppositeVariationPlacement(placement) {\n    return placement.replace(/start|end/g, function (matched) {\n      return hash[matched];\n    });\n  }\n\n  function getWindowScroll(node) {\n    var win = getWindow(node);\n    var scrollLeft = win.pageXOffset;\n    var scrollTop = win.pageYOffset;\n    return {\n      scrollLeft: scrollLeft,\n      scrollTop: scrollTop\n    };\n  }\n\n  function getWindowScrollBarX(element) {\n    // If <html> has a CSS width greater than the viewport, then this will be\n    // incorrect for RTL.\n    // Popper 1 is broken in this case and never had a bug report so let's assume\n    // it's not an issue. I don't think anyone ever specifies width on <html>\n    // anyway.\n    // Browsers where the left scrollbar doesn't cause an issue report `0` for\n    // this (e.g. Edge 2019, IE11, Safari)\n    return getBoundingClientRect(getDocumentElement(element)).left + getWindowScroll(element).scrollLeft;\n  }\n\n  function getViewportRect(element) {\n    var win = getWindow(element);\n    var html = getDocumentElement(element);\n    var visualViewport = win.visualViewport;\n    var width = html.clientWidth;\n    var height = html.clientHeight;\n    var x = 0;\n    var y = 0; // NB: This isn't supported on iOS <= 12. If the keyboard is open, the popper\n    // can be obscured underneath it.\n    // Also, `html.clientHeight` adds the bottom bar height in Safari iOS, even\n    // if it isn't open, so if this isn't available, the popper will be detected\n    // to overflow the bottom of the screen too early.\n\n    if (visualViewport) {\n      width = visualViewport.width;\n      height = visualViewport.height; // Uses Layout Viewport (like Chrome; Safari does not currently)\n      // In Chrome, it returns a value very close to 0 (+/-) but contains rounding\n      // errors due to floating point numbers, so we need to check precision.\n      // Safari returns a number <= 0, usually < -1 when pinch-zoomed\n      // Feature detection fails in mobile emulation mode in Chrome.\n      // Math.abs(win.innerWidth / visualViewport.scale - visualViewport.width) <\n      // 0.001\n      // Fallback here: \"Not Safari\" userAgent\n\n      if (!/^((?!chrome|android).)*safari/i.test(navigator.userAgent)) {\n        x = visualViewport.offsetLeft;\n        y = visualViewport.offsetTop;\n      }\n    }\n\n    return {\n      width: width,\n      height: height,\n      x: x + getWindowScrollBarX(element),\n      y: y\n    };\n  }\n\n  // of the `<html>` and `<body>` rect bounds if horizontally scrollable\n\n  function getDocumentRect(element) {\n    var _element$ownerDocumen;\n\n    var html = getDocumentElement(element);\n    var winScroll = getWindowScroll(element);\n    var body = (_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body;\n    var width = max(html.scrollWidth, html.clientWidth, body ? body.scrollWidth : 0, body ? body.clientWidth : 0);\n    var height = max(html.scrollHeight, html.clientHeight, body ? body.scrollHeight : 0, body ? body.clientHeight : 0);\n    var x = -winScroll.scrollLeft + getWindowScrollBarX(element);\n    var y = -winScroll.scrollTop;\n\n    if (getComputedStyle$1(body || html).direction === 'rtl') {\n      x += max(html.clientWidth, body ? body.clientWidth : 0) - width;\n    }\n\n    return {\n      width: width,\n      height: height,\n      x: x,\n      y: y\n    };\n  }\n\n  function isScrollParent(element) {\n    // Firefox wants us to check `-x` and `-y` variations as well\n    var _getComputedStyle = getComputedStyle$1(element),\n        overflow = _getComputedStyle.overflow,\n        overflowX = _getComputedStyle.overflowX,\n        overflowY = _getComputedStyle.overflowY;\n\n    return /auto|scroll|overlay|hidden/.test(overflow + overflowY + overflowX);\n  }\n\n  function getScrollParent(node) {\n    if (['html', 'body', '#document'].indexOf(getNodeName(node)) >= 0) {\n      // $FlowFixMe[incompatible-return]: assume body is always available\n      return node.ownerDocument.body;\n    }\n\n    if (isHTMLElement(node) && isScrollParent(node)) {\n      return node;\n    }\n\n    return getScrollParent(getParentNode(node));\n  }\n\n  /*\n  given a DOM element, return the list of all scroll parents, up the list of ancesors\n  until we get to the top window object. This list is what we attach scroll listeners\n  to, because if any of these parent elements scroll, we'll need to re-calculate the\n  reference element's position.\n  */\n\n  function listScrollParents(element, list) {\n    var _element$ownerDocumen;\n\n    if (list === void 0) {\n      list = [];\n    }\n\n    var scrollParent = getScrollParent(element);\n    var isBody = scrollParent === ((_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body);\n    var win = getWindow(scrollParent);\n    var target = isBody ? [win].concat(win.visualViewport || [], isScrollParent(scrollParent) ? scrollParent : []) : scrollParent;\n    var updatedList = list.concat(target);\n    return isBody ? updatedList : // $FlowFixMe[incompatible-call]: isBody tells us target will be an HTMLElement here\n    updatedList.concat(listScrollParents(getParentNode(target)));\n  }\n\n  function rectToClientRect(rect) {\n    return Object.assign({}, rect, {\n      left: rect.x,\n      top: rect.y,\n      right: rect.x + rect.width,\n      bottom: rect.y + rect.height\n    });\n  }\n\n  function getInnerBoundingClientRect(element) {\n    var rect = getBoundingClientRect(element);\n    rect.top = rect.top + element.clientTop;\n    rect.left = rect.left + element.clientLeft;\n    rect.bottom = rect.top + element.clientHeight;\n    rect.right = rect.left + element.clientWidth;\n    rect.width = element.clientWidth;\n    rect.height = element.clientHeight;\n    rect.x = rect.left;\n    rect.y = rect.top;\n    return rect;\n  }\n\n  function getClientRectFromMixedType(element, clippingParent) {\n    return clippingParent === viewport ? rectToClientRect(getViewportRect(element)) : isHTMLElement(clippingParent) ? getInnerBoundingClientRect(clippingParent) : rectToClientRect(getDocumentRect(getDocumentElement(element)));\n  } // A \"clipping parent\" is an overflowable container with the characteristic of\n  // clipping (or hiding) overflowing elements with a position different from\n  // `initial`\n\n\n  function getClippingParents(element) {\n    var clippingParents = listScrollParents(getParentNode(element));\n    var canEscapeClipping = ['absolute', 'fixed'].indexOf(getComputedStyle$1(element).position) >= 0;\n    var clipperElement = canEscapeClipping && isHTMLElement(element) ? getOffsetParent(element) : element;\n\n    if (!isElement(clipperElement)) {\n      return [];\n    } // $FlowFixMe[incompatible-return]: https://github.com/facebook/flow/issues/1414\n\n\n    return clippingParents.filter(function (clippingParent) {\n      return isElement(clippingParent) && contains(clippingParent, clipperElement) && getNodeName(clippingParent) !== 'body';\n    });\n  } // Gets the maximum area that the element is visible in due to any number of\n  // clipping parents\n\n\n  function getClippingRect(element, boundary, rootBoundary) {\n    var mainClippingParents = boundary === 'clippingParents' ? getClippingParents(element) : [].concat(boundary);\n    var clippingParents = [].concat(mainClippingParents, [rootBoundary]);\n    var firstClippingParent = clippingParents[0];\n    var clippingRect = clippingParents.reduce(function (accRect, clippingParent) {\n      var rect = getClientRectFromMixedType(element, clippingParent);\n      accRect.top = max(rect.top, accRect.top);\n      accRect.right = min(rect.right, accRect.right);\n      accRect.bottom = min(rect.bottom, accRect.bottom);\n      accRect.left = max(rect.left, accRect.left);\n      return accRect;\n    }, getClientRectFromMixedType(element, firstClippingParent));\n    clippingRect.width = clippingRect.right - clippingRect.left;\n    clippingRect.height = clippingRect.bottom - clippingRect.top;\n    clippingRect.x = clippingRect.left;\n    clippingRect.y = clippingRect.top;\n    return clippingRect;\n  }\n\n  function getVariation(placement) {\n    return placement.split('-')[1];\n  }\n\n  function computeOffsets(_ref) {\n    var reference = _ref.reference,\n        element = _ref.element,\n        placement = _ref.placement;\n    var basePlacement = placement ? getBasePlacement(placement) : null;\n    var variation = placement ? getVariation(placement) : null;\n    var commonX = reference.x + reference.width / 2 - element.width / 2;\n    var commonY = reference.y + reference.height / 2 - element.height / 2;\n    var offsets;\n\n    switch (basePlacement) {\n      case top:\n        offsets = {\n          x: commonX,\n          y: reference.y - element.height\n        };\n        break;\n\n      case bottom:\n        offsets = {\n          x: commonX,\n          y: reference.y + reference.height\n        };\n        break;\n\n      case right:\n        offsets = {\n          x: reference.x + reference.width,\n          y: commonY\n        };\n        break;\n\n      case left:\n        offsets = {\n          x: reference.x - element.width,\n          y: commonY\n        };\n        break;\n\n      default:\n        offsets = {\n          x: reference.x,\n          y: reference.y\n        };\n    }\n\n    var mainAxis = basePlacement ? getMainAxisFromPlacement(basePlacement) : null;\n\n    if (mainAxis != null) {\n      var len = mainAxis === 'y' ? 'height' : 'width';\n\n      switch (variation) {\n        case start:\n          offsets[mainAxis] = offsets[mainAxis] - (reference[len] / 2 - element[len] / 2);\n          break;\n\n        case end:\n          offsets[mainAxis] = offsets[mainAxis] + (reference[len] / 2 - element[len] / 2);\n          break;\n      }\n    }\n\n    return offsets;\n  }\n\n  function detectOverflow(state, options) {\n    if (options === void 0) {\n      options = {};\n    }\n\n    var _options = options,\n        _options$placement = _options.placement,\n        placement = _options$placement === void 0 ? state.placement : _options$placement,\n        _options$boundary = _options.boundary,\n        boundary = _options$boundary === void 0 ? clippingParents : _options$boundary,\n        _options$rootBoundary = _options.rootBoundary,\n        rootBoundary = _options$rootBoundary === void 0 ? viewport : _options$rootBoundary,\n        _options$elementConte = _options.elementContext,\n        elementContext = _options$elementConte === void 0 ? popper : _options$elementConte,\n        _options$altBoundary = _options.altBoundary,\n        altBoundary = _options$altBoundary === void 0 ? false : _options$altBoundary,\n        _options$padding = _options.padding,\n        padding = _options$padding === void 0 ? 0 : _options$padding;\n    var paddingObject = mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));\n    var altContext = elementContext === popper ? reference : popper;\n    var referenceElement = state.elements.reference;\n    var popperRect = state.rects.popper;\n    var element = state.elements[altBoundary ? altContext : elementContext];\n    var clippingClientRect = getClippingRect(isElement(element) ? element : element.contextElement || getDocumentElement(state.elements.popper), boundary, rootBoundary);\n    var referenceClientRect = getBoundingClientRect(referenceElement);\n    var popperOffsets = computeOffsets({\n      reference: referenceClientRect,\n      element: popperRect,\n      strategy: 'absolute',\n      placement: placement\n    });\n    var popperClientRect = rectToClientRect(Object.assign({}, popperRect, popperOffsets));\n    var elementClientRect = elementContext === popper ? popperClientRect : referenceClientRect; // positive = overflowing the clipping rect\n    // 0 or negative = within the clipping rect\n\n    var overflowOffsets = {\n      top: clippingClientRect.top - elementClientRect.top + paddingObject.top,\n      bottom: elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom,\n      left: clippingClientRect.left - elementClientRect.left + paddingObject.left,\n      right: elementClientRect.right - clippingClientRect.right + paddingObject.right\n    };\n    var offsetData = state.modifiersData.offset; // Offsets can be applied only to the popper element\n\n    if (elementContext === popper && offsetData) {\n      var offset = offsetData[placement];\n      Object.keys(overflowOffsets).forEach(function (key) {\n        var multiply = [right, bottom].indexOf(key) >= 0 ? 1 : -1;\n        var axis = [top, bottom].indexOf(key) >= 0 ? 'y' : 'x';\n        overflowOffsets[key] += offset[axis] * multiply;\n      });\n    }\n\n    return overflowOffsets;\n  }\n\n  function computeAutoPlacement(state, options) {\n    if (options === void 0) {\n      options = {};\n    }\n\n    var _options = options,\n        placement = _options.placement,\n        boundary = _options.boundary,\n        rootBoundary = _options.rootBoundary,\n        padding = _options.padding,\n        flipVariations = _options.flipVariations,\n        _options$allowedAutoP = _options.allowedAutoPlacements,\n        allowedAutoPlacements = _options$allowedAutoP === void 0 ? placements : _options$allowedAutoP;\n    var variation = getVariation(placement);\n    var placements$1 = variation ? flipVariations ? variationPlacements : variationPlacements.filter(function (placement) {\n      return getVariation(placement) === variation;\n    }) : basePlacements;\n    var allowedPlacements = placements$1.filter(function (placement) {\n      return allowedAutoPlacements.indexOf(placement) >= 0;\n    });\n\n    if (allowedPlacements.length === 0) {\n      allowedPlacements = placements$1;\n    } // $FlowFixMe[incompatible-type]: Flow seems to have problems with two array unions...\n\n\n    var overflows = allowedPlacements.reduce(function (acc, placement) {\n      acc[placement] = detectOverflow(state, {\n        placement: placement,\n        boundary: boundary,\n        rootBoundary: rootBoundary,\n        padding: padding\n      })[getBasePlacement(placement)];\n      return acc;\n    }, {});\n    return Object.keys(overflows).sort(function (a, b) {\n      return overflows[a] - overflows[b];\n    });\n  }\n\n  function getExpandedFallbackPlacements(placement) {\n    if (getBasePlacement(placement) === auto) {\n      return [];\n    }\n\n    var oppositePlacement = getOppositePlacement(placement);\n    return [getOppositeVariationPlacement(placement), oppositePlacement, getOppositeVariationPlacement(oppositePlacement)];\n  }\n\n  function flip(_ref) {\n    var state = _ref.state,\n        options = _ref.options,\n        name = _ref.name;\n\n    if (state.modifiersData[name]._skip) {\n      return;\n    }\n\n    var _options$mainAxis = options.mainAxis,\n        checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\n        _options$altAxis = options.altAxis,\n        checkAltAxis = _options$altAxis === void 0 ? true : _options$altAxis,\n        specifiedFallbackPlacements = options.fallbackPlacements,\n        padding = options.padding,\n        boundary = options.boundary,\n        rootBoundary = options.rootBoundary,\n        altBoundary = options.altBoundary,\n        _options$flipVariatio = options.flipVariations,\n        flipVariations = _options$flipVariatio === void 0 ? true : _options$flipVariatio,\n        allowedAutoPlacements = options.allowedAutoPlacements;\n    var preferredPlacement = state.options.placement;\n    var basePlacement = getBasePlacement(preferredPlacement);\n    var isBasePlacement = basePlacement === preferredPlacement;\n    var fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipVariations ? [getOppositePlacement(preferredPlacement)] : getExpandedFallbackPlacements(preferredPlacement));\n    var placements = [preferredPlacement].concat(fallbackPlacements).reduce(function (acc, placement) {\n      return acc.concat(getBasePlacement(placement) === auto ? computeAutoPlacement(state, {\n        placement: placement,\n        boundary: boundary,\n        rootBoundary: rootBoundary,\n        padding: padding,\n        flipVariations: flipVariations,\n        allowedAutoPlacements: allowedAutoPlacements\n      }) : placement);\n    }, []);\n    var referenceRect = state.rects.reference;\n    var popperRect = state.rects.popper;\n    var checksMap = new Map();\n    var makeFallbackChecks = true;\n    var firstFittingPlacement = placements[0];\n\n    for (var i = 0; i < placements.length; i++) {\n      var placement = placements[i];\n\n      var _basePlacement = getBasePlacement(placement);\n\n      var isStartVariation = getVariation(placement) === start;\n      var isVertical = [top, bottom].indexOf(_basePlacement) >= 0;\n      var len = isVertical ? 'width' : 'height';\n      var overflow = detectOverflow(state, {\n        placement: placement,\n        boundary: boundary,\n        rootBoundary: rootBoundary,\n        altBoundary: altBoundary,\n        padding: padding\n      });\n      var mainVariationSide = isVertical ? isStartVariation ? right : left : isStartVariation ? bottom : top;\n\n      if (referenceRect[len] > popperRect[len]) {\n        mainVariationSide = getOppositePlacement(mainVariationSide);\n      }\n\n      var altVariationSide = getOppositePlacement(mainVariationSide);\n      var checks = [];\n\n      if (checkMainAxis) {\n        checks.push(overflow[_basePlacement] <= 0);\n      }\n\n      if (checkAltAxis) {\n        checks.push(overflow[mainVariationSide] <= 0, overflow[altVariationSide] <= 0);\n      }\n\n      if (checks.every(function (check) {\n        return check;\n      })) {\n        firstFittingPlacement = placement;\n        makeFallbackChecks = false;\n        break;\n      }\n\n      checksMap.set(placement, checks);\n    }\n\n    if (makeFallbackChecks) {\n      // `2` may be desired in some cases – research later\n      var numberOfChecks = flipVariations ? 3 : 1;\n\n      var _loop = function _loop(_i) {\n        var fittingPlacement = placements.find(function (placement) {\n          var checks = checksMap.get(placement);\n\n          if (checks) {\n            return checks.slice(0, _i).every(function (check) {\n              return check;\n            });\n          }\n        });\n\n        if (fittingPlacement) {\n          firstFittingPlacement = fittingPlacement;\n          return \"break\";\n        }\n      };\n\n      for (var _i = numberOfChecks; _i > 0; _i--) {\n        var _ret = _loop(_i);\n\n        if (_ret === \"break\") break;\n      }\n    }\n\n    if (state.placement !== firstFittingPlacement) {\n      state.modifiersData[name]._skip = true;\n      state.placement = firstFittingPlacement;\n      state.reset = true;\n    }\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  var flip$1 = {\n    name: 'flip',\n    enabled: true,\n    phase: 'main',\n    fn: flip,\n    requiresIfExists: ['offset'],\n    data: {\n      _skip: false\n    }\n  };\n\n  function getSideOffsets(overflow, rect, preventedOffsets) {\n    if (preventedOffsets === void 0) {\n      preventedOffsets = {\n        x: 0,\n        y: 0\n      };\n    }\n\n    return {\n      top: overflow.top - rect.height - preventedOffsets.y,\n      right: overflow.right - rect.width + preventedOffsets.x,\n      bottom: overflow.bottom - rect.height + preventedOffsets.y,\n      left: overflow.left - rect.width - preventedOffsets.x\n    };\n  }\n\n  function isAnySideFullyClipped(overflow) {\n    return [top, right, bottom, left].some(function (side) {\n      return overflow[side] >= 0;\n    });\n  }\n\n  function hide(_ref) {\n    var state = _ref.state,\n        name = _ref.name;\n    var referenceRect = state.rects.reference;\n    var popperRect = state.rects.popper;\n    var preventedOffsets = state.modifiersData.preventOverflow;\n    var referenceOverflow = detectOverflow(state, {\n      elementContext: 'reference'\n    });\n    var popperAltOverflow = detectOverflow(state, {\n      altBoundary: true\n    });\n    var referenceClippingOffsets = getSideOffsets(referenceOverflow, referenceRect);\n    var popperEscapeOffsets = getSideOffsets(popperAltOverflow, popperRect, preventedOffsets);\n    var isReferenceHidden = isAnySideFullyClipped(referenceClippingOffsets);\n    var hasPopperEscaped = isAnySideFullyClipped(popperEscapeOffsets);\n    state.modifiersData[name] = {\n      referenceClippingOffsets: referenceClippingOffsets,\n      popperEscapeOffsets: popperEscapeOffsets,\n      isReferenceHidden: isReferenceHidden,\n      hasPopperEscaped: hasPopperEscaped\n    };\n    state.attributes.popper = Object.assign({}, state.attributes.popper, {\n      'data-popper-reference-hidden': isReferenceHidden,\n      'data-popper-escaped': hasPopperEscaped\n    });\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  var hide$1 = {\n    name: 'hide',\n    enabled: true,\n    phase: 'main',\n    requiresIfExists: ['preventOverflow'],\n    fn: hide\n  };\n\n  function distanceAndSkiddingToXY(placement, rects, offset) {\n    var basePlacement = getBasePlacement(placement);\n    var invertDistance = [left, top].indexOf(basePlacement) >= 0 ? -1 : 1;\n\n    var _ref = typeof offset === 'function' ? offset(Object.assign({}, rects, {\n      placement: placement\n    })) : offset,\n        skidding = _ref[0],\n        distance = _ref[1];\n\n    skidding = skidding || 0;\n    distance = (distance || 0) * invertDistance;\n    return [left, right].indexOf(basePlacement) >= 0 ? {\n      x: distance,\n      y: skidding\n    } : {\n      x: skidding,\n      y: distance\n    };\n  }\n\n  function offset(_ref2) {\n    var state = _ref2.state,\n        options = _ref2.options,\n        name = _ref2.name;\n    var _options$offset = options.offset,\n        offset = _options$offset === void 0 ? [0, 0] : _options$offset;\n    var data = placements.reduce(function (acc, placement) {\n      acc[placement] = distanceAndSkiddingToXY(placement, state.rects, offset);\n      return acc;\n    }, {});\n    var _data$state$placement = data[state.placement],\n        x = _data$state$placement.x,\n        y = _data$state$placement.y;\n\n    if (state.modifiersData.popperOffsets != null) {\n      state.modifiersData.popperOffsets.x += x;\n      state.modifiersData.popperOffsets.y += y;\n    }\n\n    state.modifiersData[name] = data;\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  var offset$1 = {\n    name: 'offset',\n    enabled: true,\n    phase: 'main',\n    requires: ['popperOffsets'],\n    fn: offset\n  };\n\n  function popperOffsets(_ref) {\n    var state = _ref.state,\n        name = _ref.name;\n    // Offsets are the actual position the popper needs to have to be\n    // properly positioned near its reference element\n    // This is the most basic placement, and will be adjusted by\n    // the modifiers in the next step\n    state.modifiersData[name] = computeOffsets({\n      reference: state.rects.reference,\n      element: state.rects.popper,\n      strategy: 'absolute',\n      placement: state.placement\n    });\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  var popperOffsets$1 = {\n    name: 'popperOffsets',\n    enabled: true,\n    phase: 'read',\n    fn: popperOffsets,\n    data: {}\n  };\n\n  function getAltAxis(axis) {\n    return axis === 'x' ? 'y' : 'x';\n  }\n\n  function preventOverflow(_ref) {\n    var state = _ref.state,\n        options = _ref.options,\n        name = _ref.name;\n    var _options$mainAxis = options.mainAxis,\n        checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\n        _options$altAxis = options.altAxis,\n        checkAltAxis = _options$altAxis === void 0 ? false : _options$altAxis,\n        boundary = options.boundary,\n        rootBoundary = options.rootBoundary,\n        altBoundary = options.altBoundary,\n        padding = options.padding,\n        _options$tether = options.tether,\n        tether = _options$tether === void 0 ? true : _options$tether,\n        _options$tetherOffset = options.tetherOffset,\n        tetherOffset = _options$tetherOffset === void 0 ? 0 : _options$tetherOffset;\n    var overflow = detectOverflow(state, {\n      boundary: boundary,\n      rootBoundary: rootBoundary,\n      padding: padding,\n      altBoundary: altBoundary\n    });\n    var basePlacement = getBasePlacement(state.placement);\n    var variation = getVariation(state.placement);\n    var isBasePlacement = !variation;\n    var mainAxis = getMainAxisFromPlacement(basePlacement);\n    var altAxis = getAltAxis(mainAxis);\n    var popperOffsets = state.modifiersData.popperOffsets;\n    var referenceRect = state.rects.reference;\n    var popperRect = state.rects.popper;\n    var tetherOffsetValue = typeof tetherOffset === 'function' ? tetherOffset(Object.assign({}, state.rects, {\n      placement: state.placement\n    })) : tetherOffset;\n    var data = {\n      x: 0,\n      y: 0\n    };\n\n    if (!popperOffsets) {\n      return;\n    }\n\n    if (checkMainAxis || checkAltAxis) {\n      var mainSide = mainAxis === 'y' ? top : left;\n      var altSide = mainAxis === 'y' ? bottom : right;\n      var len = mainAxis === 'y' ? 'height' : 'width';\n      var offset = popperOffsets[mainAxis];\n      var min$1 = popperOffsets[mainAxis] + overflow[mainSide];\n      var max$1 = popperOffsets[mainAxis] - overflow[altSide];\n      var additive = tether ? -popperRect[len] / 2 : 0;\n      var minLen = variation === start ? referenceRect[len] : popperRect[len];\n      var maxLen = variation === start ? -popperRect[len] : -referenceRect[len]; // We need to include the arrow in the calculation so the arrow doesn't go\n      // outside the reference bounds\n\n      var arrowElement = state.elements.arrow;\n      var arrowRect = tether && arrowElement ? getLayoutRect(arrowElement) : {\n        width: 0,\n        height: 0\n      };\n      var arrowPaddingObject = state.modifiersData['arrow#persistent'] ? state.modifiersData['arrow#persistent'].padding : getFreshSideObject();\n      var arrowPaddingMin = arrowPaddingObject[mainSide];\n      var arrowPaddingMax = arrowPaddingObject[altSide]; // If the reference length is smaller than the arrow length, we don't want\n      // to include its full size in the calculation. If the reference is small\n      // and near the edge of a boundary, the popper can overflow even if the\n      // reference is not overflowing as well (e.g. virtual elements with no\n      // width or height)\n\n      var arrowLen = within(0, referenceRect[len], arrowRect[len]);\n      var minOffset = isBasePlacement ? referenceRect[len] / 2 - additive - arrowLen - arrowPaddingMin - tetherOffsetValue : minLen - arrowLen - arrowPaddingMin - tetherOffsetValue;\n      var maxOffset = isBasePlacement ? -referenceRect[len] / 2 + additive + arrowLen + arrowPaddingMax + tetherOffsetValue : maxLen + arrowLen + arrowPaddingMax + tetherOffsetValue;\n      var arrowOffsetParent = state.elements.arrow && getOffsetParent(state.elements.arrow);\n      var clientOffset = arrowOffsetParent ? mainAxis === 'y' ? arrowOffsetParent.clientTop || 0 : arrowOffsetParent.clientLeft || 0 : 0;\n      var offsetModifierValue = state.modifiersData.offset ? state.modifiersData.offset[state.placement][mainAxis] : 0;\n      var tetherMin = popperOffsets[mainAxis] + minOffset - offsetModifierValue - clientOffset;\n      var tetherMax = popperOffsets[mainAxis] + maxOffset - offsetModifierValue;\n\n      if (checkMainAxis) {\n        var preventedOffset = within(tether ? min(min$1, tetherMin) : min$1, offset, tether ? max(max$1, tetherMax) : max$1);\n        popperOffsets[mainAxis] = preventedOffset;\n        data[mainAxis] = preventedOffset - offset;\n      }\n\n      if (checkAltAxis) {\n        var _mainSide = mainAxis === 'x' ? top : left;\n\n        var _altSide = mainAxis === 'x' ? bottom : right;\n\n        var _offset = popperOffsets[altAxis];\n\n        var _min = _offset + overflow[_mainSide];\n\n        var _max = _offset - overflow[_altSide];\n\n        var _preventedOffset = within(tether ? min(_min, tetherMin) : _min, _offset, tether ? max(_max, tetherMax) : _max);\n\n        popperOffsets[altAxis] = _preventedOffset;\n        data[altAxis] = _preventedOffset - _offset;\n      }\n    }\n\n    state.modifiersData[name] = data;\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  var preventOverflow$1 = {\n    name: 'preventOverflow',\n    enabled: true,\n    phase: 'main',\n    fn: preventOverflow,\n    requiresIfExists: ['offset']\n  };\n\n  function getHTMLElementScroll(element) {\n    return {\n      scrollLeft: element.scrollLeft,\n      scrollTop: element.scrollTop\n    };\n  }\n\n  function getNodeScroll(node) {\n    if (node === getWindow(node) || !isHTMLElement(node)) {\n      return getWindowScroll(node);\n    } else {\n      return getHTMLElementScroll(node);\n    }\n  }\n\n  // Composite means it takes into account transforms as well as layout.\n\n  function getCompositeRect(elementOrVirtualElement, offsetParent, isFixed) {\n    if (isFixed === void 0) {\n      isFixed = false;\n    }\n\n    var documentElement = getDocumentElement(offsetParent);\n    var rect = getBoundingClientRect(elementOrVirtualElement);\n    var isOffsetParentAnElement = isHTMLElement(offsetParent);\n    var scroll = {\n      scrollLeft: 0,\n      scrollTop: 0\n    };\n    var offsets = {\n      x: 0,\n      y: 0\n    };\n\n    if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {\n      if (getNodeName(offsetParent) !== 'body' || // https://github.com/popperjs/popper-core/issues/1078\n      isScrollParent(documentElement)) {\n        scroll = getNodeScroll(offsetParent);\n      }\n\n      if (isHTMLElement(offsetParent)) {\n        offsets = getBoundingClientRect(offsetParent);\n        offsets.x += offsetParent.clientLeft;\n        offsets.y += offsetParent.clientTop;\n      } else if (documentElement) {\n        offsets.x = getWindowScrollBarX(documentElement);\n      }\n    }\n\n    return {\n      x: rect.left + scroll.scrollLeft - offsets.x,\n      y: rect.top + scroll.scrollTop - offsets.y,\n      width: rect.width,\n      height: rect.height\n    };\n  }\n\n  function order(modifiers) {\n    var map = new Map();\n    var visited = new Set();\n    var result = [];\n    modifiers.forEach(function (modifier) {\n      map.set(modifier.name, modifier);\n    }); // On visiting object, check for its dependencies and visit them recursively\n\n    function sort(modifier) {\n      visited.add(modifier.name);\n      var requires = [].concat(modifier.requires || [], modifier.requiresIfExists || []);\n      requires.forEach(function (dep) {\n        if (!visited.has(dep)) {\n          var depModifier = map.get(dep);\n\n          if (depModifier) {\n            sort(depModifier);\n          }\n        }\n      });\n      result.push(modifier);\n    }\n\n    modifiers.forEach(function (modifier) {\n      if (!visited.has(modifier.name)) {\n        // check for visited object\n        sort(modifier);\n      }\n    });\n    return result;\n  }\n\n  function orderModifiers(modifiers) {\n    // order based on dependencies\n    var orderedModifiers = order(modifiers); // order based on phase\n\n    return modifierPhases.reduce(function (acc, phase) {\n      return acc.concat(orderedModifiers.filter(function (modifier) {\n        return modifier.phase === phase;\n      }));\n    }, []);\n  }\n\n  function debounce(fn) {\n    var pending;\n    return function () {\n      if (!pending) {\n        pending = new Promise(function (resolve) {\n          Promise.resolve().then(function () {\n            pending = undefined;\n            resolve(fn());\n          });\n        });\n      }\n\n      return pending;\n    };\n  }\n\n  function mergeByName(modifiers) {\n    var merged = modifiers.reduce(function (merged, current) {\n      var existing = merged[current.name];\n      merged[current.name] = existing ? Object.assign({}, existing, current, {\n        options: Object.assign({}, existing.options, current.options),\n        data: Object.assign({}, existing.data, current.data)\n      }) : current;\n      return merged;\n    }, {}); // IE11 does not support Object.values\n\n    return Object.keys(merged).map(function (key) {\n      return merged[key];\n    });\n  }\n\n  var DEFAULT_OPTIONS = {\n    placement: 'bottom',\n    modifiers: [],\n    strategy: 'absolute'\n  };\n\n  function areValidElements() {\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    return !args.some(function (element) {\n      return !(element && typeof element.getBoundingClientRect === 'function');\n    });\n  }\n\n  function popperGenerator(generatorOptions) {\n    if (generatorOptions === void 0) {\n      generatorOptions = {};\n    }\n\n    var _generatorOptions = generatorOptions,\n        _generatorOptions$def = _generatorOptions.defaultModifiers,\n        defaultModifiers = _generatorOptions$def === void 0 ? [] : _generatorOptions$def,\n        _generatorOptions$def2 = _generatorOptions.defaultOptions,\n        defaultOptions = _generatorOptions$def2 === void 0 ? DEFAULT_OPTIONS : _generatorOptions$def2;\n    return function createPopper(reference, popper, options) {\n      if (options === void 0) {\n        options = defaultOptions;\n      }\n\n      var state = {\n        placement: 'bottom',\n        orderedModifiers: [],\n        options: Object.assign({}, DEFAULT_OPTIONS, defaultOptions),\n        modifiersData: {},\n        elements: {\n          reference: reference,\n          popper: popper\n        },\n        attributes: {},\n        styles: {}\n      };\n      var effectCleanupFns = [];\n      var isDestroyed = false;\n      var instance = {\n        state: state,\n        setOptions: function setOptions(options) {\n          cleanupModifierEffects();\n          state.options = Object.assign({}, defaultOptions, state.options, options);\n          state.scrollParents = {\n            reference: isElement(reference) ? listScrollParents(reference) : reference.contextElement ? listScrollParents(reference.contextElement) : [],\n            popper: listScrollParents(popper)\n          }; // Orders the modifiers based on their dependencies and `phase`\n          // properties\n\n          var orderedModifiers = orderModifiers(mergeByName([].concat(defaultModifiers, state.options.modifiers))); // Strip out disabled modifiers\n\n          state.orderedModifiers = orderedModifiers.filter(function (m) {\n            return m.enabled;\n          }); // Validate the provided modifiers so that the consumer will get warned\n\n          runModifierEffects();\n          return instance.update();\n        },\n        // Sync update – it will always be executed, even if not necessary. This\n        // is useful for low frequency updates where sync behavior simplifies the\n        // logic.\n        // For high frequency updates (e.g. `resize` and `scroll` events), always\n        // prefer the async Popper#update method\n        forceUpdate: function forceUpdate() {\n          if (isDestroyed) {\n            return;\n          }\n\n          var _state$elements = state.elements,\n              reference = _state$elements.reference,\n              popper = _state$elements.popper; // Don't proceed if `reference` or `popper` are not valid elements\n          // anymore\n\n          if (!areValidElements(reference, popper)) {\n\n            return;\n          } // Store the reference and popper rects to be read by modifiers\n\n\n          state.rects = {\n            reference: getCompositeRect(reference, getOffsetParent(popper), state.options.strategy === 'fixed'),\n            popper: getLayoutRect(popper)\n          }; // Modifiers have the ability to reset the current update cycle. The\n          // most common use case for this is the `flip` modifier changing the\n          // placement, which then needs to re-run all the modifiers, because the\n          // logic was previously ran for the previous placement and is therefore\n          // stale/incorrect\n\n          state.reset = false;\n          state.placement = state.options.placement; // On each update cycle, the `modifiersData` property for each modifier\n          // is filled with the initial data specified by the modifier. This means\n          // it doesn't persist and is fresh on each update.\n          // To ensure persistent data, use `${name}#persistent`\n\n          state.orderedModifiers.forEach(function (modifier) {\n            return state.modifiersData[modifier.name] = Object.assign({}, modifier.data);\n          });\n\n          for (var index = 0; index < state.orderedModifiers.length; index++) {\n\n            if (state.reset === true) {\n              state.reset = false;\n              index = -1;\n              continue;\n            }\n\n            var _state$orderedModifie = state.orderedModifiers[index],\n                fn = _state$orderedModifie.fn,\n                _state$orderedModifie2 = _state$orderedModifie.options,\n                _options = _state$orderedModifie2 === void 0 ? {} : _state$orderedModifie2,\n                name = _state$orderedModifie.name;\n\n            if (typeof fn === 'function') {\n              state = fn({\n                state: state,\n                options: _options,\n                name: name,\n                instance: instance\n              }) || state;\n            }\n          }\n        },\n        // Async and optimistically optimized update – it will not be executed if\n        // not necessary (debounced to run at most once-per-tick)\n        update: debounce(function () {\n          return new Promise(function (resolve) {\n            instance.forceUpdate();\n            resolve(state);\n          });\n        }),\n        destroy: function destroy() {\n          cleanupModifierEffects();\n          isDestroyed = true;\n        }\n      };\n\n      if (!areValidElements(reference, popper)) {\n\n        return instance;\n      }\n\n      instance.setOptions(options).then(function (state) {\n        if (!isDestroyed && options.onFirstUpdate) {\n          options.onFirstUpdate(state);\n        }\n      }); // Modifiers have the ability to execute arbitrary code before the first\n      // update cycle runs. They will be executed in the same order as the update\n      // cycle. This is useful when a modifier adds some persistent data that\n      // other modifiers need to use, but the modifier is run after the dependent\n      // one.\n\n      function runModifierEffects() {\n        state.orderedModifiers.forEach(function (_ref3) {\n          var name = _ref3.name,\n              _ref3$options = _ref3.options,\n              options = _ref3$options === void 0 ? {} : _ref3$options,\n              effect = _ref3.effect;\n\n          if (typeof effect === 'function') {\n            var cleanupFn = effect({\n              state: state,\n              name: name,\n              instance: instance,\n              options: options\n            });\n\n            var noopFn = function noopFn() {};\n\n            effectCleanupFns.push(cleanupFn || noopFn);\n          }\n        });\n      }\n\n      function cleanupModifierEffects() {\n        effectCleanupFns.forEach(function (fn) {\n          return fn();\n        });\n        effectCleanupFns = [];\n      }\n\n      return instance;\n    };\n  }\n  var createPopper$2 = /*#__PURE__*/popperGenerator(); // eslint-disable-next-line import/no-unused-modules\n\n  var defaultModifiers$1 = [eventListeners, popperOffsets$1, computeStyles$1, applyStyles$1];\n  var createPopper$1 = /*#__PURE__*/popperGenerator({\n    defaultModifiers: defaultModifiers$1\n  }); // eslint-disable-next-line import/no-unused-modules\n\n  var defaultModifiers = [eventListeners, popperOffsets$1, computeStyles$1, applyStyles$1, offset$1, flip$1, preventOverflow$1, arrow$1, hide$1];\n  var createPopper = /*#__PURE__*/popperGenerator({\n    defaultModifiers: defaultModifiers\n  }); // eslint-disable-next-line import/no-unused-modules\n\n  var Popper = /*#__PURE__*/Object.freeze({\n    __proto__: null,\n    popperGenerator: popperGenerator,\n    detectOverflow: detectOverflow,\n    createPopperBase: createPopper$2,\n    createPopper: createPopper,\n    createPopperLite: createPopper$1,\n    top: top,\n    bottom: bottom,\n    right: right,\n    left: left,\n    auto: auto,\n    basePlacements: basePlacements,\n    start: start,\n    end: end,\n    clippingParents: clippingParents,\n    viewport: viewport,\n    popper: popper,\n    reference: reference,\n    variationPlacements: variationPlacements,\n    placements: placements,\n    beforeRead: beforeRead,\n    read: read,\n    afterRead: afterRead,\n    beforeMain: beforeMain,\n    main: main,\n    afterMain: afterMain,\n    beforeWrite: beforeWrite,\n    write: write,\n    afterWrite: afterWrite,\n    modifierPhases: modifierPhases,\n    applyStyles: applyStyles$1,\n    arrow: arrow$1,\n    computeStyles: computeStyles$1,\n    eventListeners: eventListeners,\n    flip: flip$1,\n    hide: hide$1,\n    offset: offset$1,\n    popperOffsets: popperOffsets$1,\n    preventOverflow: preventOverflow$1\n  });\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): dropdown.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$8 = 'dropdown';\n  const DATA_KEY$7 = 'bs.dropdown';\n  const EVENT_KEY$7 = `.${DATA_KEY$7}`;\n  const DATA_API_KEY$4 = '.data-api';\n  const ESCAPE_KEY$2 = 'Escape';\n  const SPACE_KEY = 'Space';\n  const TAB_KEY = 'Tab';\n  const ARROW_UP_KEY = 'ArrowUp';\n  const ARROW_DOWN_KEY = 'ArrowDown';\n  const RIGHT_MOUSE_BUTTON = 2; // MouseEvent.button value for the secondary button, usually the right button\n\n  const REGEXP_KEYDOWN = new RegExp(`${ARROW_UP_KEY}|${ARROW_DOWN_KEY}|${ESCAPE_KEY$2}`);\n  const EVENT_HIDE$4 = `hide${EVENT_KEY$7}`;\n  const EVENT_HIDDEN$4 = `hidden${EVENT_KEY$7}`;\n  const EVENT_SHOW$4 = `show${EVENT_KEY$7}`;\n  const EVENT_SHOWN$4 = `shown${EVENT_KEY$7}`;\n  const EVENT_CLICK = `click${EVENT_KEY$7}`;\n  const EVENT_CLICK_DATA_API$3 = `click${EVENT_KEY$7}${DATA_API_KEY$4}`;\n  const EVENT_KEYDOWN_DATA_API = `keydown${EVENT_KEY$7}${DATA_API_KEY$4}`;\n  const EVENT_KEYUP_DATA_API = `keyup${EVENT_KEY$7}${DATA_API_KEY$4}`;\n  const CLASS_NAME_SHOW$7 = 'show';\n  const CLASS_NAME_DROPUP = 'dropup';\n  const CLASS_NAME_DROPEND = 'dropend';\n  const CLASS_NAME_DROPSTART = 'dropstart';\n  const CLASS_NAME_NAVBAR = 'navbar';\n  const SELECTOR_DATA_TOGGLE$3 = '[data-bs-toggle=\"dropdown\"]';\n  const SELECTOR_MENU = '.dropdown-menu';\n  const SELECTOR_NAVBAR_NAV = '.navbar-nav';\n  const SELECTOR_VISIBLE_ITEMS = '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)';\n  const PLACEMENT_TOP = isRTL() ? 'top-end' : 'top-start';\n  const PLACEMENT_TOPEND = isRTL() ? 'top-start' : 'top-end';\n  const PLACEMENT_BOTTOM = isRTL() ? 'bottom-end' : 'bottom-start';\n  const PLACEMENT_BOTTOMEND = isRTL() ? 'bottom-start' : 'bottom-end';\n  const PLACEMENT_RIGHT = isRTL() ? 'left-start' : 'right-start';\n  const PLACEMENT_LEFT = isRTL() ? 'right-start' : 'left-start';\n  const Default$7 = {\n    offset: [0, 2],\n    boundary: 'clippingParents',\n    reference: 'toggle',\n    display: 'dynamic',\n    popperConfig: null,\n    autoClose: true\n  };\n  const DefaultType$7 = {\n    offset: '(array|string|function)',\n    boundary: '(string|element)',\n    reference: '(string|element|object)',\n    display: 'string',\n    popperConfig: '(null|object|function)',\n    autoClose: '(boolean|string)'\n  };\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Dropdown extends BaseComponent {\n    constructor(element, config) {\n      super(element);\n      this._popper = null;\n      this._config = this._getConfig(config);\n      this._menu = this._getMenuElement();\n      this._inNavbar = this._detectNavbar();\n\n      this._addEventListeners();\n    } // Getters\n\n\n    static get Default() {\n      return Default$7;\n    }\n\n    static get DefaultType() {\n      return DefaultType$7;\n    }\n\n    static get NAME() {\n      return NAME$8;\n    } // Public\n\n\n    toggle() {\n      if (isDisabled(this._element)) {\n        return;\n      }\n\n      const isActive = this._element.classList.contains(CLASS_NAME_SHOW$7);\n\n      if (isActive) {\n        this.hide();\n        return;\n      }\n\n      this.show();\n    }\n\n    show() {\n      if (isDisabled(this._element) || this._menu.classList.contains(CLASS_NAME_SHOW$7)) {\n        return;\n      }\n\n      const parent = Dropdown.getParentFromElement(this._element);\n      const relatedTarget = {\n        relatedTarget: this._element\n      };\n      const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$4, relatedTarget);\n\n      if (showEvent.defaultPrevented) {\n        return;\n      } // Totally disable Popper for Dropdowns in Navbar\n\n\n      if (this._inNavbar) {\n        Manipulator.setDataAttribute(this._menu, 'popper', 'none');\n      } else {\n        if (typeof Popper === 'undefined') {\n          throw new TypeError('Bootstrap\\'s dropdowns require Popper (https://popper.js.org)');\n        }\n\n        let referenceElement = this._element;\n\n        if (this._config.reference === 'parent') {\n          referenceElement = parent;\n        } else if (isElement$1(this._config.reference)) {\n          referenceElement = getElement(this._config.reference);\n        } else if (typeof this._config.reference === 'object') {\n          referenceElement = this._config.reference;\n        }\n\n        const popperConfig = this._getPopperConfig();\n\n        const isDisplayStatic = popperConfig.modifiers.find(modifier => modifier.name === 'applyStyles' && modifier.enabled === false);\n        this._popper = createPopper(referenceElement, this._menu, popperConfig);\n\n        if (isDisplayStatic) {\n          Manipulator.setDataAttribute(this._menu, 'popper', 'static');\n        }\n      } // If this is a touch-enabled device we add extra\n      // empty mouseover listeners to the body's immediate children;\n      // only needed because of broken event delegation on iOS\n      // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n\n\n      if ('ontouchstart' in document.documentElement && !parent.closest(SELECTOR_NAVBAR_NAV)) {\n        [].concat(...document.body.children).forEach(elem => EventHandler.on(elem, 'mouseover', noop));\n      }\n\n      this._element.focus();\n\n      this._element.setAttribute('aria-expanded', true);\n\n      this._menu.classList.toggle(CLASS_NAME_SHOW$7);\n\n      this._element.classList.toggle(CLASS_NAME_SHOW$7);\n\n      EventHandler.trigger(this._element, EVENT_SHOWN$4, relatedTarget);\n    }\n\n    hide() {\n      if (isDisabled(this._element) || !this._menu.classList.contains(CLASS_NAME_SHOW$7)) {\n        return;\n      }\n\n      const relatedTarget = {\n        relatedTarget: this._element\n      };\n\n      this._completeHide(relatedTarget);\n    }\n\n    dispose() {\n      if (this._popper) {\n        this._popper.destroy();\n      }\n\n      super.dispose();\n    }\n\n    update() {\n      this._inNavbar = this._detectNavbar();\n\n      if (this._popper) {\n        this._popper.update();\n      }\n    } // Private\n\n\n    _addEventListeners() {\n      EventHandler.on(this._element, EVENT_CLICK, event => {\n        event.preventDefault();\n        this.toggle();\n      });\n    }\n\n    _completeHide(relatedTarget) {\n      const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$4, relatedTarget);\n\n      if (hideEvent.defaultPrevented) {\n        return;\n      } // If this is a touch-enabled device we remove the extra\n      // empty mouseover listeners we added for iOS support\n\n\n      if ('ontouchstart' in document.documentElement) {\n        [].concat(...document.body.children).forEach(elem => EventHandler.off(elem, 'mouseover', noop));\n      }\n\n      if (this._popper) {\n        this._popper.destroy();\n      }\n\n      this._menu.classList.remove(CLASS_NAME_SHOW$7);\n\n      this._element.classList.remove(CLASS_NAME_SHOW$7);\n\n      this._element.setAttribute('aria-expanded', 'false');\n\n      Manipulator.removeDataAttribute(this._menu, 'popper');\n      EventHandler.trigger(this._element, EVENT_HIDDEN$4, relatedTarget);\n    }\n\n    _getConfig(config) {\n      config = { ...this.constructor.Default,\n        ...Manipulator.getDataAttributes(this._element),\n        ...config\n      };\n      typeCheckConfig(NAME$8, config, this.constructor.DefaultType);\n\n      if (typeof config.reference === 'object' && !isElement$1(config.reference) && typeof config.reference.getBoundingClientRect !== 'function') {\n        // Popper virtual elements require a getBoundingClientRect method\n        throw new TypeError(`${NAME$8.toUpperCase()}: Option \"reference\" provided type \"object\" without a required \"getBoundingClientRect\" method.`);\n      }\n\n      return config;\n    }\n\n    _getMenuElement() {\n      return SelectorEngine.next(this._element, SELECTOR_MENU)[0];\n    }\n\n    _getPlacement() {\n      const parentDropdown = this._element.parentNode;\n\n      if (parentDropdown.classList.contains(CLASS_NAME_DROPEND)) {\n        return PLACEMENT_RIGHT;\n      }\n\n      if (parentDropdown.classList.contains(CLASS_NAME_DROPSTART)) {\n        return PLACEMENT_LEFT;\n      } // We need to trim the value because custom properties can also include spaces\n\n\n      const isEnd = getComputedStyle(this._menu).getPropertyValue('--bs-position').trim() === 'end';\n\n      if (parentDropdown.classList.contains(CLASS_NAME_DROPUP)) {\n        return isEnd ? PLACEMENT_TOPEND : PLACEMENT_TOP;\n      }\n\n      return isEnd ? PLACEMENT_BOTTOMEND : PLACEMENT_BOTTOM;\n    }\n\n    _detectNavbar() {\n      return this._element.closest(`.${CLASS_NAME_NAVBAR}`) !== null;\n    }\n\n    _getOffset() {\n      const {\n        offset\n      } = this._config;\n\n      if (typeof offset === 'string') {\n        return offset.split(',').map(val => Number.parseInt(val, 10));\n      }\n\n      if (typeof offset === 'function') {\n        return popperData => offset(popperData, this._element);\n      }\n\n      return offset;\n    }\n\n    _getPopperConfig() {\n      const defaultBsPopperConfig = {\n        placement: this._getPlacement(),\n        modifiers: [{\n          name: 'preventOverflow',\n          options: {\n            boundary: this._config.boundary\n          }\n        }, {\n          name: 'offset',\n          options: {\n            offset: this._getOffset()\n          }\n        }]\n      }; // Disable Popper if we have a static display\n\n      if (this._config.display === 'static') {\n        defaultBsPopperConfig.modifiers = [{\n          name: 'applyStyles',\n          enabled: false\n        }];\n      }\n\n      return { ...defaultBsPopperConfig,\n        ...(typeof this._config.popperConfig === 'function' ? this._config.popperConfig(defaultBsPopperConfig) : this._config.popperConfig)\n      };\n    }\n\n    _selectMenuItem({\n      key,\n      target\n    }) {\n      const items = SelectorEngine.find(SELECTOR_VISIBLE_ITEMS, this._menu).filter(isVisible);\n\n      if (!items.length) {\n        return;\n      } // if target isn't included in items (e.g. when expanding the dropdown)\n      // allow cycling to get the last item in case key equals ARROW_UP_KEY\n\n\n      getNextActiveElement(items, target, key === ARROW_DOWN_KEY, !items.includes(target)).focus();\n    } // Static\n\n\n    static dropdownInterface(element, config) {\n      const data = Dropdown.getOrCreateInstance(element, config);\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config]();\n      }\n    }\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        Dropdown.dropdownInterface(this, config);\n      });\n    }\n\n    static clearMenus(event) {\n      if (event && (event.button === RIGHT_MOUSE_BUTTON || event.type === 'keyup' && event.key !== TAB_KEY)) {\n        return;\n      }\n\n      const toggles = SelectorEngine.find(SELECTOR_DATA_TOGGLE$3);\n\n      for (let i = 0, len = toggles.length; i < len; i++) {\n        const context = Dropdown.getInstance(toggles[i]);\n\n        if (!context || context._config.autoClose === false) {\n          continue;\n        }\n\n        if (!context._element.classList.contains(CLASS_NAME_SHOW$7)) {\n          continue;\n        }\n\n        const relatedTarget = {\n          relatedTarget: context._element\n        };\n\n        if (event) {\n          const composedPath = event.composedPath();\n          const isMenuTarget = composedPath.includes(context._menu);\n\n          if (composedPath.includes(context._element) || context._config.autoClose === 'inside' && !isMenuTarget || context._config.autoClose === 'outside' && isMenuTarget) {\n            continue;\n          } // Tab navigation through the dropdown menu or events from contained inputs shouldn't close the menu\n\n\n          if (context._menu.contains(event.target) && (event.type === 'keyup' && event.key === TAB_KEY || /input|select|option|textarea|form/i.test(event.target.tagName))) {\n            continue;\n          }\n\n          if (event.type === 'click') {\n            relatedTarget.clickEvent = event;\n          }\n        }\n\n        context._completeHide(relatedTarget);\n      }\n    }\n\n    static getParentFromElement(element) {\n      return getElementFromSelector(element) || element.parentNode;\n    }\n\n    static dataApiKeydownHandler(event) {\n      // If not input/textarea:\n      //  - And not a key in REGEXP_KEYDOWN => not a dropdown command\n      // If input/textarea:\n      //  - If space key => not a dropdown command\n      //  - If key is other than escape\n      //    - If key is not up or down => not a dropdown command\n      //    - If trigger inside the menu => not a dropdown command\n      if (/input|textarea/i.test(event.target.tagName) ? event.key === SPACE_KEY || event.key !== ESCAPE_KEY$2 && (event.key !== ARROW_DOWN_KEY && event.key !== ARROW_UP_KEY || event.target.closest(SELECTOR_MENU)) : !REGEXP_KEYDOWN.test(event.key)) {\n        return;\n      }\n\n      const isActive = this.classList.contains(CLASS_NAME_SHOW$7);\n\n      if (!isActive && event.key === ESCAPE_KEY$2) {\n        return;\n      }\n\n      event.preventDefault();\n      event.stopPropagation();\n\n      if (isDisabled(this)) {\n        return;\n      }\n\n      const getToggleButton = () => this.matches(SELECTOR_DATA_TOGGLE$3) ? this : SelectorEngine.prev(this, SELECTOR_DATA_TOGGLE$3)[0];\n\n      if (event.key === ESCAPE_KEY$2) {\n        getToggleButton().focus();\n        Dropdown.clearMenus();\n        return;\n      }\n\n      if (event.key === ARROW_UP_KEY || event.key === ARROW_DOWN_KEY) {\n        if (!isActive) {\n          getToggleButton().click();\n        }\n\n        Dropdown.getInstance(getToggleButton())._selectMenuItem(event);\n\n        return;\n      }\n\n      if (!isActive || event.key === SPACE_KEY) {\n        Dropdown.clearMenus();\n      }\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_DATA_TOGGLE$3, Dropdown.dataApiKeydownHandler);\n  EventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown.dataApiKeydownHandler);\n  EventHandler.on(document, EVENT_CLICK_DATA_API$3, Dropdown.clearMenus);\n  EventHandler.on(document, EVENT_KEYUP_DATA_API, Dropdown.clearMenus);\n  EventHandler.on(document, EVENT_CLICK_DATA_API$3, SELECTOR_DATA_TOGGLE$3, function (event) {\n    event.preventDefault();\n    Dropdown.dropdownInterface(this);\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Dropdown to jQuery only if jQuery is present\n   */\n\n  defineJQueryPlugin(Dropdown);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): util/scrollBar.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  const SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top';\n  const SELECTOR_STICKY_CONTENT = '.sticky-top';\n\n  class ScrollBarHelper {\n    constructor() {\n      this._element = document.body;\n    }\n\n    getWidth() {\n      // https://developer.mozilla.org/en-US/docs/Web/API/Window/innerWidth#usage_notes\n      const documentWidth = document.documentElement.clientWidth;\n      return Math.abs(window.innerWidth - documentWidth);\n    }\n\n    hide() {\n      const width = this.getWidth();\n\n      this._disableOverFlow(); // give padding to element to balance the hidden scrollbar width\n\n\n      this._setElementAttributes(this._element, 'paddingRight', calculatedValue => calculatedValue + width); // trick: We adjust positive paddingRight and negative marginRight to sticky-top elements to keep showing fullwidth\n\n\n      this._setElementAttributes(SELECTOR_FIXED_CONTENT, 'paddingRight', calculatedValue => calculatedValue + width);\n\n      this._setElementAttributes(SELECTOR_STICKY_CONTENT, 'marginRight', calculatedValue => calculatedValue - width);\n    }\n\n    _disableOverFlow() {\n      this._saveInitialAttribute(this._element, 'overflow');\n\n      this._element.style.overflow = 'hidden';\n    }\n\n    _setElementAttributes(selector, styleProp, callback) {\n      const scrollbarWidth = this.getWidth();\n\n      const manipulationCallBack = element => {\n        if (element !== this._element && window.innerWidth > element.clientWidth + scrollbarWidth) {\n          return;\n        }\n\n        this._saveInitialAttribute(element, styleProp);\n\n        const calculatedValue = window.getComputedStyle(element)[styleProp];\n        element.style[styleProp] = `${callback(Number.parseFloat(calculatedValue))}px`;\n      };\n\n      this._applyManipulationCallback(selector, manipulationCallBack);\n    }\n\n    reset() {\n      this._resetElementAttributes(this._element, 'overflow');\n\n      this._resetElementAttributes(this._element, 'paddingRight');\n\n      this._resetElementAttributes(SELECTOR_FIXED_CONTENT, 'paddingRight');\n\n      this._resetElementAttributes(SELECTOR_STICKY_CONTENT, 'marginRight');\n    }\n\n    _saveInitialAttribute(element, styleProp) {\n      const actualValue = element.style[styleProp];\n\n      if (actualValue) {\n        Manipulator.setDataAttribute(element, styleProp, actualValue);\n      }\n    }\n\n    _resetElementAttributes(selector, styleProp) {\n      const manipulationCallBack = element => {\n        const value = Manipulator.getDataAttribute(element, styleProp);\n\n        if (typeof value === 'undefined') {\n          element.style.removeProperty(styleProp);\n        } else {\n          Manipulator.removeDataAttribute(element, styleProp);\n          element.style[styleProp] = value;\n        }\n      };\n\n      this._applyManipulationCallback(selector, manipulationCallBack);\n    }\n\n    _applyManipulationCallback(selector, callBack) {\n      if (isElement$1(selector)) {\n        callBack(selector);\n      } else {\n        SelectorEngine.find(selector, this._element).forEach(callBack);\n      }\n    }\n\n    isOverflowing() {\n      return this.getWidth() > 0;\n    }\n\n  }\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): util/backdrop.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  const Default$6 = {\n    isVisible: true,\n    // if false, we use the backdrop helper without adding any element to the dom\n    isAnimated: false,\n    rootElement: 'body',\n    // give the choice to place backdrop under different elements\n    clickCallback: null\n  };\n  const DefaultType$6 = {\n    isVisible: 'boolean',\n    isAnimated: 'boolean',\n    rootElement: '(element|string)',\n    clickCallback: '(function|null)'\n  };\n  const NAME$7 = 'backdrop';\n  const CLASS_NAME_BACKDROP = 'modal-backdrop';\n  const CLASS_NAME_FADE$5 = 'fade';\n  const CLASS_NAME_SHOW$6 = 'show';\n  const EVENT_MOUSEDOWN = `mousedown.bs.${NAME$7}`;\n\n  class Backdrop {\n    constructor(config) {\n      this._config = this._getConfig(config);\n      this._isAppended = false;\n      this._element = null;\n    }\n\n    show(callback) {\n      if (!this._config.isVisible) {\n        execute(callback);\n        return;\n      }\n\n      this._append();\n\n      if (this._config.isAnimated) {\n        reflow(this._getElement());\n      }\n\n      this._getElement().classList.add(CLASS_NAME_SHOW$6);\n\n      this._emulateAnimation(() => {\n        execute(callback);\n      });\n    }\n\n    hide(callback) {\n      if (!this._config.isVisible) {\n        execute(callback);\n        return;\n      }\n\n      this._getElement().classList.remove(CLASS_NAME_SHOW$6);\n\n      this._emulateAnimation(() => {\n        this.dispose();\n        execute(callback);\n      });\n    } // Private\n\n\n    _getElement() {\n      if (!this._element) {\n        const backdrop = document.createElement('div');\n        backdrop.className = CLASS_NAME_BACKDROP;\n\n        if (this._config.isAnimated) {\n          backdrop.classList.add(CLASS_NAME_FADE$5);\n        }\n\n        this._element = backdrop;\n      }\n\n      return this._element;\n    }\n\n    _getConfig(config) {\n      config = { ...Default$6,\n        ...(typeof config === 'object' ? config : {})\n      }; // use getElement() with the default \"body\" to get a fresh Element on each instantiation\n\n      config.rootElement = getElement(config.rootElement);\n      typeCheckConfig(NAME$7, config, DefaultType$6);\n      return config;\n    }\n\n    _append() {\n      if (this._isAppended) {\n        return;\n      }\n\n      this._config.rootElement.appendChild(this._getElement());\n\n      EventHandler.on(this._getElement(), EVENT_MOUSEDOWN, () => {\n        execute(this._config.clickCallback);\n      });\n      this._isAppended = true;\n    }\n\n    dispose() {\n      if (!this._isAppended) {\n        return;\n      }\n\n      EventHandler.off(this._element, EVENT_MOUSEDOWN);\n\n      this._element.remove();\n\n      this._isAppended = false;\n    }\n\n    _emulateAnimation(callback) {\n      executeAfterTransition(callback, this._getElement(), this._config.isAnimated);\n    }\n\n  }\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): modal.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$6 = 'modal';\n  const DATA_KEY$6 = 'bs.modal';\n  const EVENT_KEY$6 = `.${DATA_KEY$6}`;\n  const DATA_API_KEY$3 = '.data-api';\n  const ESCAPE_KEY$1 = 'Escape';\n  const Default$5 = {\n    backdrop: true,\n    keyboard: true,\n    focus: true\n  };\n  const DefaultType$5 = {\n    backdrop: '(boolean|string)',\n    keyboard: 'boolean',\n    focus: 'boolean'\n  };\n  const EVENT_HIDE$3 = `hide${EVENT_KEY$6}`;\n  const EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY$6}`;\n  const EVENT_HIDDEN$3 = `hidden${EVENT_KEY$6}`;\n  const EVENT_SHOW$3 = `show${EVENT_KEY$6}`;\n  const EVENT_SHOWN$3 = `shown${EVENT_KEY$6}`;\n  const EVENT_FOCUSIN$2 = `focusin${EVENT_KEY$6}`;\n  const EVENT_RESIZE = `resize${EVENT_KEY$6}`;\n  const EVENT_CLICK_DISMISS$2 = `click.dismiss${EVENT_KEY$6}`;\n  const EVENT_KEYDOWN_DISMISS$1 = `keydown.dismiss${EVENT_KEY$6}`;\n  const EVENT_MOUSEUP_DISMISS = `mouseup.dismiss${EVENT_KEY$6}`;\n  const EVENT_MOUSEDOWN_DISMISS = `mousedown.dismiss${EVENT_KEY$6}`;\n  const EVENT_CLICK_DATA_API$2 = `click${EVENT_KEY$6}${DATA_API_KEY$3}`;\n  const CLASS_NAME_OPEN = 'modal-open';\n  const CLASS_NAME_FADE$4 = 'fade';\n  const CLASS_NAME_SHOW$5 = 'show';\n  const CLASS_NAME_STATIC = 'modal-static';\n  const SELECTOR_DIALOG = '.modal-dialog';\n  const SELECTOR_MODAL_BODY = '.modal-body';\n  const SELECTOR_DATA_TOGGLE$2 = '[data-bs-toggle=\"modal\"]';\n  const SELECTOR_DATA_DISMISS$2 = '[data-bs-dismiss=\"modal\"]';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Modal extends BaseComponent {\n    constructor(element, config) {\n      super(element);\n      this._config = this._getConfig(config);\n      this._dialog = SelectorEngine.findOne(SELECTOR_DIALOG, this._element);\n      this._backdrop = this._initializeBackDrop();\n      this._isShown = false;\n      this._ignoreBackdropClick = false;\n      this._isTransitioning = false;\n      this._scrollBar = new ScrollBarHelper();\n    } // Getters\n\n\n    static get Default() {\n      return Default$5;\n    }\n\n    static get NAME() {\n      return NAME$6;\n    } // Public\n\n\n    toggle(relatedTarget) {\n      return this._isShown ? this.hide() : this.show(relatedTarget);\n    }\n\n    show(relatedTarget) {\n      if (this._isShown || this._isTransitioning) {\n        return;\n      }\n\n      const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$3, {\n        relatedTarget\n      });\n\n      if (showEvent.defaultPrevented) {\n        return;\n      }\n\n      this._isShown = true;\n\n      if (this._isAnimated()) {\n        this._isTransitioning = true;\n      }\n\n      this._scrollBar.hide();\n\n      document.body.classList.add(CLASS_NAME_OPEN);\n\n      this._adjustDialog();\n\n      this._setEscapeEvent();\n\n      this._setResizeEvent();\n\n      EventHandler.on(this._element, EVENT_CLICK_DISMISS$2, SELECTOR_DATA_DISMISS$2, event => this.hide(event));\n      EventHandler.on(this._dialog, EVENT_MOUSEDOWN_DISMISS, () => {\n        EventHandler.one(this._element, EVENT_MOUSEUP_DISMISS, event => {\n          if (event.target === this._element) {\n            this._ignoreBackdropClick = true;\n          }\n        });\n      });\n\n      this._showBackdrop(() => this._showElement(relatedTarget));\n    }\n\n    hide(event) {\n      if (event && ['A', 'AREA'].includes(event.target.tagName)) {\n        event.preventDefault();\n      }\n\n      if (!this._isShown || this._isTransitioning) {\n        return;\n      }\n\n      const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$3);\n\n      if (hideEvent.defaultPrevented) {\n        return;\n      }\n\n      this._isShown = false;\n\n      const isAnimated = this._isAnimated();\n\n      if (isAnimated) {\n        this._isTransitioning = true;\n      }\n\n      this._setEscapeEvent();\n\n      this._setResizeEvent();\n\n      EventHandler.off(document, EVENT_FOCUSIN$2);\n\n      this._element.classList.remove(CLASS_NAME_SHOW$5);\n\n      EventHandler.off(this._element, EVENT_CLICK_DISMISS$2);\n      EventHandler.off(this._dialog, EVENT_MOUSEDOWN_DISMISS);\n\n      this._queueCallback(() => this._hideModal(), this._element, isAnimated);\n    }\n\n    dispose() {\n      [window, this._dialog].forEach(htmlElement => EventHandler.off(htmlElement, EVENT_KEY$6));\n\n      this._backdrop.dispose();\n\n      super.dispose();\n      /**\n       * `document` has 2 events `EVENT_FOCUSIN` and `EVENT_CLICK_DATA_API`\n       * Do not move `document` in `htmlElements` array\n       * It will remove `EVENT_CLICK_DATA_API` event that should remain\n       */\n\n      EventHandler.off(document, EVENT_FOCUSIN$2);\n    }\n\n    handleUpdate() {\n      this._adjustDialog();\n    } // Private\n\n\n    _initializeBackDrop() {\n      return new Backdrop({\n        isVisible: Boolean(this._config.backdrop),\n        // 'static' option will be translated to true, and booleans will keep their value\n        isAnimated: this._isAnimated()\n      });\n    }\n\n    _getConfig(config) {\n      config = { ...Default$5,\n        ...Manipulator.getDataAttributes(this._element),\n        ...(typeof config === 'object' ? config : {})\n      };\n      typeCheckConfig(NAME$6, config, DefaultType$5);\n      return config;\n    }\n\n    _showElement(relatedTarget) {\n      const isAnimated = this._isAnimated();\n\n      const modalBody = SelectorEngine.findOne(SELECTOR_MODAL_BODY, this._dialog);\n\n      if (!this._element.parentNode || this._element.parentNode.nodeType !== Node.ELEMENT_NODE) {\n        // Don't move modal's DOM position\n        document.body.appendChild(this._element);\n      }\n\n      this._element.style.display = 'block';\n\n      this._element.removeAttribute('aria-hidden');\n\n      this._element.setAttribute('aria-modal', true);\n\n      this._element.setAttribute('role', 'dialog');\n\n      this._element.scrollTop = 0;\n\n      if (modalBody) {\n        modalBody.scrollTop = 0;\n      }\n\n      if (isAnimated) {\n        reflow(this._element);\n      }\n\n      this._element.classList.add(CLASS_NAME_SHOW$5);\n\n      if (this._config.focus) {\n        this._enforceFocus();\n      }\n\n      const transitionComplete = () => {\n        if (this._config.focus) {\n          this._element.focus();\n        }\n\n        this._isTransitioning = false;\n        EventHandler.trigger(this._element, EVENT_SHOWN$3, {\n          relatedTarget\n        });\n      };\n\n      this._queueCallback(transitionComplete, this._dialog, isAnimated);\n    }\n\n    _enforceFocus() {\n      EventHandler.off(document, EVENT_FOCUSIN$2); // guard against infinite focus loop\n\n      EventHandler.on(document, EVENT_FOCUSIN$2, event => {\n        if (document !== event.target && this._element !== event.target && !this._element.contains(event.target)) {\n          this._element.focus();\n        }\n      });\n    }\n\n    _setEscapeEvent() {\n      if (this._isShown) {\n        EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS$1, event => {\n          if (this._config.keyboard && event.key === ESCAPE_KEY$1) {\n            event.preventDefault();\n            this.hide();\n          } else if (!this._config.keyboard && event.key === ESCAPE_KEY$1) {\n            this._triggerBackdropTransition();\n          }\n        });\n      } else {\n        EventHandler.off(this._element, EVENT_KEYDOWN_DISMISS$1);\n      }\n    }\n\n    _setResizeEvent() {\n      if (this._isShown) {\n        EventHandler.on(window, EVENT_RESIZE, () => this._adjustDialog());\n      } else {\n        EventHandler.off(window, EVENT_RESIZE);\n      }\n    }\n\n    _hideModal() {\n      this._element.style.display = 'none';\n\n      this._element.setAttribute('aria-hidden', true);\n\n      this._element.removeAttribute('aria-modal');\n\n      this._element.removeAttribute('role');\n\n      this._isTransitioning = false;\n\n      this._backdrop.hide(() => {\n        document.body.classList.remove(CLASS_NAME_OPEN);\n\n        this._resetAdjustments();\n\n        this._scrollBar.reset();\n\n        EventHandler.trigger(this._element, EVENT_HIDDEN$3);\n      });\n    }\n\n    _showBackdrop(callback) {\n      EventHandler.on(this._element, EVENT_CLICK_DISMISS$2, event => {\n        if (this._ignoreBackdropClick) {\n          this._ignoreBackdropClick = false;\n          return;\n        }\n\n        if (event.target !== event.currentTarget) {\n          return;\n        }\n\n        if (this._config.backdrop === true) {\n          this.hide();\n        } else if (this._config.backdrop === 'static') {\n          this._triggerBackdropTransition();\n        }\n      });\n\n      this._backdrop.show(callback);\n    }\n\n    _isAnimated() {\n      return this._element.classList.contains(CLASS_NAME_FADE$4);\n    }\n\n    _triggerBackdropTransition() {\n      const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED);\n\n      if (hideEvent.defaultPrevented) {\n        return;\n      }\n\n      const {\n        classList,\n        scrollHeight,\n        style\n      } = this._element;\n      const isModalOverflowing = scrollHeight > document.documentElement.clientHeight; // return if the following background transition hasn't yet completed\n\n      if (!isModalOverflowing && style.overflowY === 'hidden' || classList.contains(CLASS_NAME_STATIC)) {\n        return;\n      }\n\n      if (!isModalOverflowing) {\n        style.overflowY = 'hidden';\n      }\n\n      classList.add(CLASS_NAME_STATIC);\n\n      this._queueCallback(() => {\n        classList.remove(CLASS_NAME_STATIC);\n\n        if (!isModalOverflowing) {\n          this._queueCallback(() => {\n            style.overflowY = '';\n          }, this._dialog);\n        }\n      }, this._dialog);\n\n      this._element.focus();\n    } // ----------------------------------------------------------------------\n    // the following methods are used to handle overflowing modals\n    // ----------------------------------------------------------------------\n\n\n    _adjustDialog() {\n      const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;\n\n      const scrollbarWidth = this._scrollBar.getWidth();\n\n      const isBodyOverflowing = scrollbarWidth > 0;\n\n      if (!isBodyOverflowing && isModalOverflowing && !isRTL() || isBodyOverflowing && !isModalOverflowing && isRTL()) {\n        this._element.style.paddingLeft = `${scrollbarWidth}px`;\n      }\n\n      if (isBodyOverflowing && !isModalOverflowing && !isRTL() || !isBodyOverflowing && isModalOverflowing && isRTL()) {\n        this._element.style.paddingRight = `${scrollbarWidth}px`;\n      }\n    }\n\n    _resetAdjustments() {\n      this._element.style.paddingLeft = '';\n      this._element.style.paddingRight = '';\n    } // Static\n\n\n    static jQueryInterface(config, relatedTarget) {\n      return this.each(function () {\n        const data = Modal.getOrCreateInstance(this, config);\n\n        if (typeof config !== 'string') {\n          return;\n        }\n\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config](relatedTarget);\n      });\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(document, EVENT_CLICK_DATA_API$2, SELECTOR_DATA_TOGGLE$2, function (event) {\n    const target = getElementFromSelector(this);\n\n    if (['A', 'AREA'].includes(this.tagName)) {\n      event.preventDefault();\n    }\n\n    EventHandler.one(target, EVENT_SHOW$3, showEvent => {\n      if (showEvent.defaultPrevented) {\n        // only register focus restorer if modal will actually get shown\n        return;\n      }\n\n      EventHandler.one(target, EVENT_HIDDEN$3, () => {\n        if (isVisible(this)) {\n          this.focus();\n        }\n      });\n    });\n    const data = Modal.getOrCreateInstance(target);\n    data.toggle(this);\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Modal to jQuery only if jQuery is present\n   */\n\n  defineJQueryPlugin(Modal);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): offcanvas.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$5 = 'offcanvas';\n  const DATA_KEY$5 = 'bs.offcanvas';\n  const EVENT_KEY$5 = `.${DATA_KEY$5}`;\n  const DATA_API_KEY$2 = '.data-api';\n  const EVENT_LOAD_DATA_API$1 = `load${EVENT_KEY$5}${DATA_API_KEY$2}`;\n  const ESCAPE_KEY = 'Escape';\n  const Default$4 = {\n    backdrop: true,\n    keyboard: true,\n    scroll: false\n  };\n  const DefaultType$4 = {\n    backdrop: 'boolean',\n    keyboard: 'boolean',\n    scroll: 'boolean'\n  };\n  const CLASS_NAME_SHOW$4 = 'show';\n  const OPEN_SELECTOR = '.offcanvas.show';\n  const EVENT_SHOW$2 = `show${EVENT_KEY$5}`;\n  const EVENT_SHOWN$2 = `shown${EVENT_KEY$5}`;\n  const EVENT_HIDE$2 = `hide${EVENT_KEY$5}`;\n  const EVENT_HIDDEN$2 = `hidden${EVENT_KEY$5}`;\n  const EVENT_FOCUSIN$1 = `focusin${EVENT_KEY$5}`;\n  const EVENT_CLICK_DATA_API$1 = `click${EVENT_KEY$5}${DATA_API_KEY$2}`;\n  const EVENT_CLICK_DISMISS$1 = `click.dismiss${EVENT_KEY$5}`;\n  const EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY$5}`;\n  const SELECTOR_DATA_DISMISS$1 = '[data-bs-dismiss=\"offcanvas\"]';\n  const SELECTOR_DATA_TOGGLE$1 = '[data-bs-toggle=\"offcanvas\"]';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Offcanvas extends BaseComponent {\n    constructor(element, config) {\n      super(element);\n      this._config = this._getConfig(config);\n      this._isShown = false;\n      this._backdrop = this._initializeBackDrop();\n\n      this._addEventListeners();\n    } // Getters\n\n\n    static get NAME() {\n      return NAME$5;\n    }\n\n    static get Default() {\n      return Default$4;\n    } // Public\n\n\n    toggle(relatedTarget) {\n      return this._isShown ? this.hide() : this.show(relatedTarget);\n    }\n\n    show(relatedTarget) {\n      if (this._isShown) {\n        return;\n      }\n\n      const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$2, {\n        relatedTarget\n      });\n\n      if (showEvent.defaultPrevented) {\n        return;\n      }\n\n      this._isShown = true;\n      this._element.style.visibility = 'visible';\n\n      this._backdrop.show();\n\n      if (!this._config.scroll) {\n        new ScrollBarHelper().hide();\n\n        this._enforceFocusOnElement(this._element);\n      }\n\n      this._element.removeAttribute('aria-hidden');\n\n      this._element.setAttribute('aria-modal', true);\n\n      this._element.setAttribute('role', 'dialog');\n\n      this._element.classList.add(CLASS_NAME_SHOW$4);\n\n      const completeCallBack = () => {\n        EventHandler.trigger(this._element, EVENT_SHOWN$2, {\n          relatedTarget\n        });\n      };\n\n      this._queueCallback(completeCallBack, this._element, true);\n    }\n\n    hide() {\n      if (!this._isShown) {\n        return;\n      }\n\n      const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$2);\n\n      if (hideEvent.defaultPrevented) {\n        return;\n      }\n\n      EventHandler.off(document, EVENT_FOCUSIN$1);\n\n      this._element.blur();\n\n      this._isShown = false;\n\n      this._element.classList.remove(CLASS_NAME_SHOW$4);\n\n      this._backdrop.hide();\n\n      const completeCallback = () => {\n        this._element.setAttribute('aria-hidden', true);\n\n        this._element.removeAttribute('aria-modal');\n\n        this._element.removeAttribute('role');\n\n        this._element.style.visibility = 'hidden';\n\n        if (!this._config.scroll) {\n          new ScrollBarHelper().reset();\n        }\n\n        EventHandler.trigger(this._element, EVENT_HIDDEN$2);\n      };\n\n      this._queueCallback(completeCallback, this._element, true);\n    }\n\n    dispose() {\n      this._backdrop.dispose();\n\n      super.dispose();\n      EventHandler.off(document, EVENT_FOCUSIN$1);\n    } // Private\n\n\n    _getConfig(config) {\n      config = { ...Default$4,\n        ...Manipulator.getDataAttributes(this._element),\n        ...(typeof config === 'object' ? config : {})\n      };\n      typeCheckConfig(NAME$5, config, DefaultType$4);\n      return config;\n    }\n\n    _initializeBackDrop() {\n      return new Backdrop({\n        isVisible: this._config.backdrop,\n        isAnimated: true,\n        rootElement: this._element.parentNode,\n        clickCallback: () => this.hide()\n      });\n    }\n\n    _enforceFocusOnElement(element) {\n      EventHandler.off(document, EVENT_FOCUSIN$1); // guard against infinite focus loop\n\n      EventHandler.on(document, EVENT_FOCUSIN$1, event => {\n        if (document !== event.target && element !== event.target && !element.contains(event.target)) {\n          element.focus();\n        }\n      });\n      element.focus();\n    }\n\n    _addEventListeners() {\n      EventHandler.on(this._element, EVENT_CLICK_DISMISS$1, SELECTOR_DATA_DISMISS$1, () => this.hide());\n      EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS, event => {\n        if (this._config.keyboard && event.key === ESCAPE_KEY) {\n          this.hide();\n        }\n      });\n    } // Static\n\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = Offcanvas.getOrCreateInstance(this, config);\n\n        if (typeof config !== 'string') {\n          return;\n        }\n\n        if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config](this);\n      });\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(document, EVENT_CLICK_DATA_API$1, SELECTOR_DATA_TOGGLE$1, function (event) {\n    const target = getElementFromSelector(this);\n\n    if (['A', 'AREA'].includes(this.tagName)) {\n      event.preventDefault();\n    }\n\n    if (isDisabled(this)) {\n      return;\n    }\n\n    EventHandler.one(target, EVENT_HIDDEN$2, () => {\n      // focus on trigger when it is closed\n      if (isVisible(this)) {\n        this.focus();\n      }\n    }); // avoid conflict when clicking a toggler of an offcanvas, while another is open\n\n    const allReadyOpen = SelectorEngine.findOne(OPEN_SELECTOR);\n\n    if (allReadyOpen && allReadyOpen !== target) {\n      Offcanvas.getInstance(allReadyOpen).hide();\n    }\n\n    const data = Offcanvas.getOrCreateInstance(target);\n    data.toggle(this);\n  });\n  EventHandler.on(window, EVENT_LOAD_DATA_API$1, () => SelectorEngine.find(OPEN_SELECTOR).forEach(el => Offcanvas.getOrCreateInstance(el).show()));\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   */\n\n  defineJQueryPlugin(Offcanvas);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): util/sanitizer.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  const uriAttrs = new Set(['background', 'cite', 'href', 'itemtype', 'longdesc', 'poster', 'src', 'xlink:href']);\n  const ARIA_ATTRIBUTE_PATTERN = /^aria-[\\w-]*$/i;\n  /**\n   * A pattern that recognizes a commonly useful subset of URLs that are safe.\n   *\n   * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts\n   */\n\n  const SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file):|[^#&/:?]*(?:[#/?]|$))/i;\n  /**\n   * A pattern that matches safe data URLs. Only matches image, video and audio types.\n   *\n   * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts\n   */\n\n  const DATA_URL_PATTERN = /^data:(?:image\\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\\/(?:mpeg|mp4|ogg|webm)|audio\\/(?:mp3|oga|ogg|opus));base64,[\\d+/a-z]+=*$/i;\n\n  const allowedAttribute = (attr, allowedAttributeList) => {\n    const attrName = attr.nodeName.toLowerCase();\n\n    if (allowedAttributeList.includes(attrName)) {\n      if (uriAttrs.has(attrName)) {\n        return Boolean(SAFE_URL_PATTERN.test(attr.nodeValue) || DATA_URL_PATTERN.test(attr.nodeValue));\n      }\n\n      return true;\n    }\n\n    const regExp = allowedAttributeList.filter(attrRegex => attrRegex instanceof RegExp); // Check if a regular expression validates the attribute.\n\n    for (let i = 0, len = regExp.length; i < len; i++) {\n      if (regExp[i].test(attrName)) {\n        return true;\n      }\n    }\n\n    return false;\n  };\n\n  const DefaultAllowlist = {\n    // Global attributes allowed on any supplied element below.\n    '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],\n    a: ['target', 'href', 'title', 'rel'],\n    area: [],\n    b: [],\n    br: [],\n    col: [],\n    code: [],\n    div: [],\n    em: [],\n    hr: [],\n    h1: [],\n    h2: [],\n    h3: [],\n    h4: [],\n    h5: [],\n    h6: [],\n    i: [],\n    img: ['src', 'srcset', 'alt', 'title', 'width', 'height'],\n    li: [],\n    ol: [],\n    p: [],\n    pre: [],\n    s: [],\n    small: [],\n    span: [],\n    sub: [],\n    sup: [],\n    strong: [],\n    u: [],\n    ul: []\n  };\n  function sanitizeHtml(unsafeHtml, allowList, sanitizeFn) {\n    if (!unsafeHtml.length) {\n      return unsafeHtml;\n    }\n\n    if (sanitizeFn && typeof sanitizeFn === 'function') {\n      return sanitizeFn(unsafeHtml);\n    }\n\n    const domParser = new window.DOMParser();\n    const createdDocument = domParser.parseFromString(unsafeHtml, 'text/html');\n    const allowlistKeys = Object.keys(allowList);\n    const elements = [].concat(...createdDocument.body.querySelectorAll('*'));\n\n    for (let i = 0, len = elements.length; i < len; i++) {\n      const el = elements[i];\n      const elName = el.nodeName.toLowerCase();\n\n      if (!allowlistKeys.includes(elName)) {\n        el.remove();\n        continue;\n      }\n\n      const attributeList = [].concat(...el.attributes);\n      const allowedAttributes = [].concat(allowList['*'] || [], allowList[elName] || []);\n      attributeList.forEach(attr => {\n        if (!allowedAttribute(attr, allowedAttributes)) {\n          el.removeAttribute(attr.nodeName);\n        }\n      });\n    }\n\n    return createdDocument.body.innerHTML;\n  }\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): tooltip.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$4 = 'tooltip';\n  const DATA_KEY$4 = 'bs.tooltip';\n  const EVENT_KEY$4 = `.${DATA_KEY$4}`;\n  const CLASS_PREFIX$1 = 'bs-tooltip';\n  const BSCLS_PREFIX_REGEX$1 = new RegExp(`(^|\\\\s)${CLASS_PREFIX$1}\\\\S+`, 'g');\n  const DISALLOWED_ATTRIBUTES = new Set(['sanitize', 'allowList', 'sanitizeFn']);\n  const DefaultType$3 = {\n    animation: 'boolean',\n    template: 'string',\n    title: '(string|element|function)',\n    trigger: 'string',\n    delay: '(number|object)',\n    html: 'boolean',\n    selector: '(string|boolean)',\n    placement: '(string|function)',\n    offset: '(array|string|function)',\n    container: '(string|element|boolean)',\n    fallbackPlacements: 'array',\n    boundary: '(string|element)',\n    customClass: '(string|function)',\n    sanitize: 'boolean',\n    sanitizeFn: '(null|function)',\n    allowList: 'object',\n    popperConfig: '(null|object|function)'\n  };\n  const AttachmentMap = {\n    AUTO: 'auto',\n    TOP: 'top',\n    RIGHT: isRTL() ? 'left' : 'right',\n    BOTTOM: 'bottom',\n    LEFT: isRTL() ? 'right' : 'left'\n  };\n  const Default$3 = {\n    animation: true,\n    template: '<div class=\"tooltip\" role=\"tooltip\">' + '<div class=\"tooltip-arrow\"></div>' + '<div class=\"tooltip-inner\"></div>' + '</div>',\n    trigger: 'hover focus',\n    title: '',\n    delay: 0,\n    html: false,\n    selector: false,\n    placement: 'top',\n    offset: [0, 0],\n    container: false,\n    fallbackPlacements: ['top', 'right', 'bottom', 'left'],\n    boundary: 'clippingParents',\n    customClass: '',\n    sanitize: true,\n    sanitizeFn: null,\n    allowList: DefaultAllowlist,\n    popperConfig: null\n  };\n  const Event$2 = {\n    HIDE: `hide${EVENT_KEY$4}`,\n    HIDDEN: `hidden${EVENT_KEY$4}`,\n    SHOW: `show${EVENT_KEY$4}`,\n    SHOWN: `shown${EVENT_KEY$4}`,\n    INSERTED: `inserted${EVENT_KEY$4}`,\n    CLICK: `click${EVENT_KEY$4}`,\n    FOCUSIN: `focusin${EVENT_KEY$4}`,\n    FOCUSOUT: `focusout${EVENT_KEY$4}`,\n    MOUSEENTER: `mouseenter${EVENT_KEY$4}`,\n    MOUSELEAVE: `mouseleave${EVENT_KEY$4}`\n  };\n  const CLASS_NAME_FADE$3 = 'fade';\n  const CLASS_NAME_MODAL = 'modal';\n  const CLASS_NAME_SHOW$3 = 'show';\n  const HOVER_STATE_SHOW = 'show';\n  const HOVER_STATE_OUT = 'out';\n  const SELECTOR_TOOLTIP_INNER = '.tooltip-inner';\n  const TRIGGER_HOVER = 'hover';\n  const TRIGGER_FOCUS = 'focus';\n  const TRIGGER_CLICK = 'click';\n  const TRIGGER_MANUAL = 'manual';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Tooltip extends BaseComponent {\n    constructor(element, config) {\n      if (typeof Popper === 'undefined') {\n        throw new TypeError('Bootstrap\\'s tooltips require Popper (https://popper.js.org)');\n      }\n\n      super(element); // private\n\n      this._isEnabled = true;\n      this._timeout = 0;\n      this._hoverState = '';\n      this._activeTrigger = {};\n      this._popper = null; // Protected\n\n      this._config = this._getConfig(config);\n      this.tip = null;\n\n      this._setListeners();\n    } // Getters\n\n\n    static get Default() {\n      return Default$3;\n    }\n\n    static get NAME() {\n      return NAME$4;\n    }\n\n    static get Event() {\n      return Event$2;\n    }\n\n    static get DefaultType() {\n      return DefaultType$3;\n    } // Public\n\n\n    enable() {\n      this._isEnabled = true;\n    }\n\n    disable() {\n      this._isEnabled = false;\n    }\n\n    toggleEnabled() {\n      this._isEnabled = !this._isEnabled;\n    }\n\n    toggle(event) {\n      if (!this._isEnabled) {\n        return;\n      }\n\n      if (event) {\n        const context = this._initializeOnDelegatedTarget(event);\n\n        context._activeTrigger.click = !context._activeTrigger.click;\n\n        if (context._isWithActiveTrigger()) {\n          context._enter(null, context);\n        } else {\n          context._leave(null, context);\n        }\n      } else {\n        if (this.getTipElement().classList.contains(CLASS_NAME_SHOW$3)) {\n          this._leave(null, this);\n\n          return;\n        }\n\n        this._enter(null, this);\n      }\n    }\n\n    dispose() {\n      clearTimeout(this._timeout);\n      EventHandler.off(this._element.closest(`.${CLASS_NAME_MODAL}`), 'hide.bs.modal', this._hideModalHandler);\n\n      if (this.tip) {\n        this.tip.remove();\n      }\n\n      if (this._popper) {\n        this._popper.destroy();\n      }\n\n      super.dispose();\n    }\n\n    show() {\n      if (this._element.style.display === 'none') {\n        throw new Error('Please use show on visible elements');\n      }\n\n      if (!(this.isWithContent() && this._isEnabled)) {\n        return;\n      }\n\n      const showEvent = EventHandler.trigger(this._element, this.constructor.Event.SHOW);\n      const shadowRoot = findShadowRoot(this._element);\n      const isInTheDom = shadowRoot === null ? this._element.ownerDocument.documentElement.contains(this._element) : shadowRoot.contains(this._element);\n\n      if (showEvent.defaultPrevented || !isInTheDom) {\n        return;\n      }\n\n      const tip = this.getTipElement();\n      const tipId = getUID(this.constructor.NAME);\n      tip.setAttribute('id', tipId);\n\n      this._element.setAttribute('aria-describedby', tipId);\n\n      this.setContent();\n\n      if (this._config.animation) {\n        tip.classList.add(CLASS_NAME_FADE$3);\n      }\n\n      const placement = typeof this._config.placement === 'function' ? this._config.placement.call(this, tip, this._element) : this._config.placement;\n\n      const attachment = this._getAttachment(placement);\n\n      this._addAttachmentClass(attachment);\n\n      const {\n        container\n      } = this._config;\n      Data.set(tip, this.constructor.DATA_KEY, this);\n\n      if (!this._element.ownerDocument.documentElement.contains(this.tip)) {\n        container.appendChild(tip);\n        EventHandler.trigger(this._element, this.constructor.Event.INSERTED);\n      }\n\n      if (this._popper) {\n        this._popper.update();\n      } else {\n        this._popper = createPopper(this._element, tip, this._getPopperConfig(attachment));\n      }\n\n      tip.classList.add(CLASS_NAME_SHOW$3);\n      const customClass = typeof this._config.customClass === 'function' ? this._config.customClass() : this._config.customClass;\n\n      if (customClass) {\n        tip.classList.add(...customClass.split(' '));\n      } // If this is a touch-enabled device we add extra\n      // empty mouseover listeners to the body's immediate children;\n      // only needed because of broken event delegation on iOS\n      // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n\n\n      if ('ontouchstart' in document.documentElement) {\n        [].concat(...document.body.children).forEach(element => {\n          EventHandler.on(element, 'mouseover', noop);\n        });\n      }\n\n      const complete = () => {\n        const prevHoverState = this._hoverState;\n        this._hoverState = null;\n        EventHandler.trigger(this._element, this.constructor.Event.SHOWN);\n\n        if (prevHoverState === HOVER_STATE_OUT) {\n          this._leave(null, this);\n        }\n      };\n\n      const isAnimated = this.tip.classList.contains(CLASS_NAME_FADE$3);\n\n      this._queueCallback(complete, this.tip, isAnimated);\n    }\n\n    hide() {\n      if (!this._popper) {\n        return;\n      }\n\n      const tip = this.getTipElement();\n\n      const complete = () => {\n        if (this._isWithActiveTrigger()) {\n          return;\n        }\n\n        if (this._hoverState !== HOVER_STATE_SHOW) {\n          tip.remove();\n        }\n\n        this._cleanTipClass();\n\n        this._element.removeAttribute('aria-describedby');\n\n        EventHandler.trigger(this._element, this.constructor.Event.HIDDEN);\n\n        if (this._popper) {\n          this._popper.destroy();\n\n          this._popper = null;\n        }\n      };\n\n      const hideEvent = EventHandler.trigger(this._element, this.constructor.Event.HIDE);\n\n      if (hideEvent.defaultPrevented) {\n        return;\n      }\n\n      tip.classList.remove(CLASS_NAME_SHOW$3); // If this is a touch-enabled device we remove the extra\n      // empty mouseover listeners we added for iOS support\n\n      if ('ontouchstart' in document.documentElement) {\n        [].concat(...document.body.children).forEach(element => EventHandler.off(element, 'mouseover', noop));\n      }\n\n      this._activeTrigger[TRIGGER_CLICK] = false;\n      this._activeTrigger[TRIGGER_FOCUS] = false;\n      this._activeTrigger[TRIGGER_HOVER] = false;\n      const isAnimated = this.tip.classList.contains(CLASS_NAME_FADE$3);\n\n      this._queueCallback(complete, this.tip, isAnimated);\n\n      this._hoverState = '';\n    }\n\n    update() {\n      if (this._popper !== null) {\n        this._popper.update();\n      }\n    } // Protected\n\n\n    isWithContent() {\n      return Boolean(this.getTitle());\n    }\n\n    getTipElement() {\n      if (this.tip) {\n        return this.tip;\n      }\n\n      const element = document.createElement('div');\n      element.innerHTML = this._config.template;\n      this.tip = element.children[0];\n      return this.tip;\n    }\n\n    setContent() {\n      const tip = this.getTipElement();\n      this.setElementContent(SelectorEngine.findOne(SELECTOR_TOOLTIP_INNER, tip), this.getTitle());\n      tip.classList.remove(CLASS_NAME_FADE$3, CLASS_NAME_SHOW$3);\n    }\n\n    setElementContent(element, content) {\n      if (element === null) {\n        return;\n      }\n\n      if (isElement$1(content)) {\n        content = getElement(content); // content is a DOM node or a jQuery\n\n        if (this._config.html) {\n          if (content.parentNode !== element) {\n            element.innerHTML = '';\n            element.appendChild(content);\n          }\n        } else {\n          element.textContent = content.textContent;\n        }\n\n        return;\n      }\n\n      if (this._config.html) {\n        if (this._config.sanitize) {\n          content = sanitizeHtml(content, this._config.allowList, this._config.sanitizeFn);\n        }\n\n        element.innerHTML = content;\n      } else {\n        element.textContent = content;\n      }\n    }\n\n    getTitle() {\n      let title = this._element.getAttribute('data-bs-original-title');\n\n      if (!title) {\n        title = typeof this._config.title === 'function' ? this._config.title.call(this._element) : this._config.title;\n      }\n\n      return title;\n    }\n\n    updateAttachment(attachment) {\n      if (attachment === 'right') {\n        return 'end';\n      }\n\n      if (attachment === 'left') {\n        return 'start';\n      }\n\n      return attachment;\n    } // Private\n\n\n    _initializeOnDelegatedTarget(event, context) {\n      const dataKey = this.constructor.DATA_KEY;\n      context = context || Data.get(event.delegateTarget, dataKey);\n\n      if (!context) {\n        context = new this.constructor(event.delegateTarget, this._getDelegateConfig());\n        Data.set(event.delegateTarget, dataKey, context);\n      }\n\n      return context;\n    }\n\n    _getOffset() {\n      const {\n        offset\n      } = this._config;\n\n      if (typeof offset === 'string') {\n        return offset.split(',').map(val => Number.parseInt(val, 10));\n      }\n\n      if (typeof offset === 'function') {\n        return popperData => offset(popperData, this._element);\n      }\n\n      return offset;\n    }\n\n    _getPopperConfig(attachment) {\n      const defaultBsPopperConfig = {\n        placement: attachment,\n        modifiers: [{\n          name: 'flip',\n          options: {\n            fallbackPlacements: this._config.fallbackPlacements\n          }\n        }, {\n          name: 'offset',\n          options: {\n            offset: this._getOffset()\n          }\n        }, {\n          name: 'preventOverflow',\n          options: {\n            boundary: this._config.boundary\n          }\n        }, {\n          name: 'arrow',\n          options: {\n            element: `.${this.constructor.NAME}-arrow`\n          }\n        }, {\n          name: 'onChange',\n          enabled: true,\n          phase: 'afterWrite',\n          fn: data => this._handlePopperPlacementChange(data)\n        }],\n        onFirstUpdate: data => {\n          if (data.options.placement !== data.placement) {\n            this._handlePopperPlacementChange(data);\n          }\n        }\n      };\n      return { ...defaultBsPopperConfig,\n        ...(typeof this._config.popperConfig === 'function' ? this._config.popperConfig(defaultBsPopperConfig) : this._config.popperConfig)\n      };\n    }\n\n    _addAttachmentClass(attachment) {\n      this.getTipElement().classList.add(`${CLASS_PREFIX$1}-${this.updateAttachment(attachment)}`);\n    }\n\n    _getAttachment(placement) {\n      return AttachmentMap[placement.toUpperCase()];\n    }\n\n    _setListeners() {\n      const triggers = this._config.trigger.split(' ');\n\n      triggers.forEach(trigger => {\n        if (trigger === 'click') {\n          EventHandler.on(this._element, this.constructor.Event.CLICK, this._config.selector, event => this.toggle(event));\n        } else if (trigger !== TRIGGER_MANUAL) {\n          const eventIn = trigger === TRIGGER_HOVER ? this.constructor.Event.MOUSEENTER : this.constructor.Event.FOCUSIN;\n          const eventOut = trigger === TRIGGER_HOVER ? this.constructor.Event.MOUSELEAVE : this.constructor.Event.FOCUSOUT;\n          EventHandler.on(this._element, eventIn, this._config.selector, event => this._enter(event));\n          EventHandler.on(this._element, eventOut, this._config.selector, event => this._leave(event));\n        }\n      });\n\n      this._hideModalHandler = () => {\n        if (this._element) {\n          this.hide();\n        }\n      };\n\n      EventHandler.on(this._element.closest(`.${CLASS_NAME_MODAL}`), 'hide.bs.modal', this._hideModalHandler);\n\n      if (this._config.selector) {\n        this._config = { ...this._config,\n          trigger: 'manual',\n          selector: ''\n        };\n      } else {\n        this._fixTitle();\n      }\n    }\n\n    _fixTitle() {\n      const title = this._element.getAttribute('title');\n\n      const originalTitleType = typeof this._element.getAttribute('data-bs-original-title');\n\n      if (title || originalTitleType !== 'string') {\n        this._element.setAttribute('data-bs-original-title', title || '');\n\n        if (title && !this._element.getAttribute('aria-label') && !this._element.textContent) {\n          this._element.setAttribute('aria-label', title);\n        }\n\n        this._element.setAttribute('title', '');\n      }\n    }\n\n    _enter(event, context) {\n      context = this._initializeOnDelegatedTarget(event, context);\n\n      if (event) {\n        context._activeTrigger[event.type === 'focusin' ? TRIGGER_FOCUS : TRIGGER_HOVER] = true;\n      }\n\n      if (context.getTipElement().classList.contains(CLASS_NAME_SHOW$3) || context._hoverState === HOVER_STATE_SHOW) {\n        context._hoverState = HOVER_STATE_SHOW;\n        return;\n      }\n\n      clearTimeout(context._timeout);\n      context._hoverState = HOVER_STATE_SHOW;\n\n      if (!context._config.delay || !context._config.delay.show) {\n        context.show();\n        return;\n      }\n\n      context._timeout = setTimeout(() => {\n        if (context._hoverState === HOVER_STATE_SHOW) {\n          context.show();\n        }\n      }, context._config.delay.show);\n    }\n\n    _leave(event, context) {\n      context = this._initializeOnDelegatedTarget(event, context);\n\n      if (event) {\n        context._activeTrigger[event.type === 'focusout' ? TRIGGER_FOCUS : TRIGGER_HOVER] = context._element.contains(event.relatedTarget);\n      }\n\n      if (context._isWithActiveTrigger()) {\n        return;\n      }\n\n      clearTimeout(context._timeout);\n      context._hoverState = HOVER_STATE_OUT;\n\n      if (!context._config.delay || !context._config.delay.hide) {\n        context.hide();\n        return;\n      }\n\n      context._timeout = setTimeout(() => {\n        if (context._hoverState === HOVER_STATE_OUT) {\n          context.hide();\n        }\n      }, context._config.delay.hide);\n    }\n\n    _isWithActiveTrigger() {\n      for (const trigger in this._activeTrigger) {\n        if (this._activeTrigger[trigger]) {\n          return true;\n        }\n      }\n\n      return false;\n    }\n\n    _getConfig(config) {\n      const dataAttributes = Manipulator.getDataAttributes(this._element);\n      Object.keys(dataAttributes).forEach(dataAttr => {\n        if (DISALLOWED_ATTRIBUTES.has(dataAttr)) {\n          delete dataAttributes[dataAttr];\n        }\n      });\n      config = { ...this.constructor.Default,\n        ...dataAttributes,\n        ...(typeof config === 'object' && config ? config : {})\n      };\n      config.container = config.container === false ? document.body : getElement(config.container);\n\n      if (typeof config.delay === 'number') {\n        config.delay = {\n          show: config.delay,\n          hide: config.delay\n        };\n      }\n\n      if (typeof config.title === 'number') {\n        config.title = config.title.toString();\n      }\n\n      if (typeof config.content === 'number') {\n        config.content = config.content.toString();\n      }\n\n      typeCheckConfig(NAME$4, config, this.constructor.DefaultType);\n\n      if (config.sanitize) {\n        config.template = sanitizeHtml(config.template, config.allowList, config.sanitizeFn);\n      }\n\n      return config;\n    }\n\n    _getDelegateConfig() {\n      const config = {};\n\n      if (this._config) {\n        for (const key in this._config) {\n          if (this.constructor.Default[key] !== this._config[key]) {\n            config[key] = this._config[key];\n          }\n        }\n      }\n\n      return config;\n    }\n\n    _cleanTipClass() {\n      const tip = this.getTipElement();\n      const tabClass = tip.getAttribute('class').match(BSCLS_PREFIX_REGEX$1);\n\n      if (tabClass !== null && tabClass.length > 0) {\n        tabClass.map(token => token.trim()).forEach(tClass => tip.classList.remove(tClass));\n      }\n    }\n\n    _handlePopperPlacementChange(popperData) {\n      const {\n        state\n      } = popperData;\n\n      if (!state) {\n        return;\n      }\n\n      this.tip = state.elements.popper;\n\n      this._cleanTipClass();\n\n      this._addAttachmentClass(this._getAttachment(state.placement));\n    } // Static\n\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = Tooltip.getOrCreateInstance(this, config);\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(`No method named \"${config}\"`);\n          }\n\n          data[config]();\n        }\n      });\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Tooltip to jQuery only if jQuery is present\n   */\n\n\n  defineJQueryPlugin(Tooltip);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): popover.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$3 = 'popover';\n  const DATA_KEY$3 = 'bs.popover';\n  const EVENT_KEY$3 = `.${DATA_KEY$3}`;\n  const CLASS_PREFIX = 'bs-popover';\n  const BSCLS_PREFIX_REGEX = new RegExp(`(^|\\\\s)${CLASS_PREFIX}\\\\S+`, 'g');\n  const Default$2 = { ...Tooltip.Default,\n    placement: 'right',\n    offset: [0, 8],\n    trigger: 'click',\n    content: '',\n    template: '<div class=\"popover\" role=\"tooltip\">' + '<div class=\"popover-arrow\"></div>' + '<h3 class=\"popover-header\"></h3>' + '<div class=\"popover-body\"></div>' + '</div>'\n  };\n  const DefaultType$2 = { ...Tooltip.DefaultType,\n    content: '(string|element|function)'\n  };\n  const Event$1 = {\n    HIDE: `hide${EVENT_KEY$3}`,\n    HIDDEN: `hidden${EVENT_KEY$3}`,\n    SHOW: `show${EVENT_KEY$3}`,\n    SHOWN: `shown${EVENT_KEY$3}`,\n    INSERTED: `inserted${EVENT_KEY$3}`,\n    CLICK: `click${EVENT_KEY$3}`,\n    FOCUSIN: `focusin${EVENT_KEY$3}`,\n    FOCUSOUT: `focusout${EVENT_KEY$3}`,\n    MOUSEENTER: `mouseenter${EVENT_KEY$3}`,\n    MOUSELEAVE: `mouseleave${EVENT_KEY$3}`\n  };\n  const CLASS_NAME_FADE$2 = 'fade';\n  const CLASS_NAME_SHOW$2 = 'show';\n  const SELECTOR_TITLE = '.popover-header';\n  const SELECTOR_CONTENT = '.popover-body';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Popover extends Tooltip {\n    // Getters\n    static get Default() {\n      return Default$2;\n    }\n\n    static get NAME() {\n      return NAME$3;\n    }\n\n    static get Event() {\n      return Event$1;\n    }\n\n    static get DefaultType() {\n      return DefaultType$2;\n    } // Overrides\n\n\n    isWithContent() {\n      return this.getTitle() || this._getContent();\n    }\n\n    getTipElement() {\n      if (this.tip) {\n        return this.tip;\n      }\n\n      this.tip = super.getTipElement();\n\n      if (!this.getTitle()) {\n        SelectorEngine.findOne(SELECTOR_TITLE, this.tip).remove();\n      }\n\n      if (!this._getContent()) {\n        SelectorEngine.findOne(SELECTOR_CONTENT, this.tip).remove();\n      }\n\n      return this.tip;\n    }\n\n    setContent() {\n      const tip = this.getTipElement(); // we use append for html objects to maintain js events\n\n      this.setElementContent(SelectorEngine.findOne(SELECTOR_TITLE, tip), this.getTitle());\n\n      let content = this._getContent();\n\n      if (typeof content === 'function') {\n        content = content.call(this._element);\n      }\n\n      this.setElementContent(SelectorEngine.findOne(SELECTOR_CONTENT, tip), content);\n      tip.classList.remove(CLASS_NAME_FADE$2, CLASS_NAME_SHOW$2);\n    } // Private\n\n\n    _addAttachmentClass(attachment) {\n      this.getTipElement().classList.add(`${CLASS_PREFIX}-${this.updateAttachment(attachment)}`);\n    }\n\n    _getContent() {\n      return this._element.getAttribute('data-bs-content') || this._config.content;\n    }\n\n    _cleanTipClass() {\n      const tip = this.getTipElement();\n      const tabClass = tip.getAttribute('class').match(BSCLS_PREFIX_REGEX);\n\n      if (tabClass !== null && tabClass.length > 0) {\n        tabClass.map(token => token.trim()).forEach(tClass => tip.classList.remove(tClass));\n      }\n    } // Static\n\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = Popover.getOrCreateInstance(this, config);\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(`No method named \"${config}\"`);\n          }\n\n          data[config]();\n        }\n      });\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Popover to jQuery only if jQuery is present\n   */\n\n\n  defineJQueryPlugin(Popover);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): scrollspy.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$2 = 'scrollspy';\n  const DATA_KEY$2 = 'bs.scrollspy';\n  const EVENT_KEY$2 = `.${DATA_KEY$2}`;\n  const DATA_API_KEY$1 = '.data-api';\n  const Default$1 = {\n    offset: 10,\n    method: 'auto',\n    target: ''\n  };\n  const DefaultType$1 = {\n    offset: 'number',\n    method: 'string',\n    target: '(string|element)'\n  };\n  const EVENT_ACTIVATE = `activate${EVENT_KEY$2}`;\n  const EVENT_SCROLL = `scroll${EVENT_KEY$2}`;\n  const EVENT_LOAD_DATA_API = `load${EVENT_KEY$2}${DATA_API_KEY$1}`;\n  const CLASS_NAME_DROPDOWN_ITEM = 'dropdown-item';\n  const CLASS_NAME_ACTIVE$1 = 'active';\n  const SELECTOR_DATA_SPY = '[data-bs-spy=\"scroll\"]';\n  const SELECTOR_NAV_LIST_GROUP$1 = '.nav, .list-group';\n  const SELECTOR_NAV_LINKS = '.nav-link';\n  const SELECTOR_NAV_ITEMS = '.nav-item';\n  const SELECTOR_LIST_ITEMS = '.list-group-item';\n  const SELECTOR_DROPDOWN$1 = '.dropdown';\n  const SELECTOR_DROPDOWN_TOGGLE$1 = '.dropdown-toggle';\n  const METHOD_OFFSET = 'offset';\n  const METHOD_POSITION = 'position';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class ScrollSpy extends BaseComponent {\n    constructor(element, config) {\n      super(element);\n      this._scrollElement = this._element.tagName === 'BODY' ? window : this._element;\n      this._config = this._getConfig(config);\n      this._selector = `${this._config.target} ${SELECTOR_NAV_LINKS}, ${this._config.target} ${SELECTOR_LIST_ITEMS}, ${this._config.target} .${CLASS_NAME_DROPDOWN_ITEM}`;\n      this._offsets = [];\n      this._targets = [];\n      this._activeTarget = null;\n      this._scrollHeight = 0;\n      EventHandler.on(this._scrollElement, EVENT_SCROLL, () => this._process());\n      this.refresh();\n\n      this._process();\n    } // Getters\n\n\n    static get Default() {\n      return Default$1;\n    }\n\n    static get NAME() {\n      return NAME$2;\n    } // Public\n\n\n    refresh() {\n      const autoMethod = this._scrollElement === this._scrollElement.window ? METHOD_OFFSET : METHOD_POSITION;\n      const offsetMethod = this._config.method === 'auto' ? autoMethod : this._config.method;\n      const offsetBase = offsetMethod === METHOD_POSITION ? this._getScrollTop() : 0;\n      this._offsets = [];\n      this._targets = [];\n      this._scrollHeight = this._getScrollHeight();\n      const targets = SelectorEngine.find(this._selector);\n      targets.map(element => {\n        const targetSelector = getSelectorFromElement(element);\n        const target = targetSelector ? SelectorEngine.findOne(targetSelector) : null;\n\n        if (target) {\n          const targetBCR = target.getBoundingClientRect();\n\n          if (targetBCR.width || targetBCR.height) {\n            return [Manipulator[offsetMethod](target).top + offsetBase, targetSelector];\n          }\n        }\n\n        return null;\n      }).filter(item => item).sort((a, b) => a[0] - b[0]).forEach(item => {\n        this._offsets.push(item[0]);\n\n        this._targets.push(item[1]);\n      });\n    }\n\n    dispose() {\n      EventHandler.off(this._scrollElement, EVENT_KEY$2);\n      super.dispose();\n    } // Private\n\n\n    _getConfig(config) {\n      config = { ...Default$1,\n        ...Manipulator.getDataAttributes(this._element),\n        ...(typeof config === 'object' && config ? config : {})\n      };\n\n      if (typeof config.target !== 'string' && isElement$1(config.target)) {\n        let {\n          id\n        } = config.target;\n\n        if (!id) {\n          id = getUID(NAME$2);\n          config.target.id = id;\n        }\n\n        config.target = `#${id}`;\n      }\n\n      typeCheckConfig(NAME$2, config, DefaultType$1);\n      return config;\n    }\n\n    _getScrollTop() {\n      return this._scrollElement === window ? this._scrollElement.pageYOffset : this._scrollElement.scrollTop;\n    }\n\n    _getScrollHeight() {\n      return this._scrollElement.scrollHeight || Math.max(document.body.scrollHeight, document.documentElement.scrollHeight);\n    }\n\n    _getOffsetHeight() {\n      return this._scrollElement === window ? window.innerHeight : this._scrollElement.getBoundingClientRect().height;\n    }\n\n    _process() {\n      const scrollTop = this._getScrollTop() + this._config.offset;\n\n      const scrollHeight = this._getScrollHeight();\n\n      const maxScroll = this._config.offset + scrollHeight - this._getOffsetHeight();\n\n      if (this._scrollHeight !== scrollHeight) {\n        this.refresh();\n      }\n\n      if (scrollTop >= maxScroll) {\n        const target = this._targets[this._targets.length - 1];\n\n        if (this._activeTarget !== target) {\n          this._activate(target);\n        }\n\n        return;\n      }\n\n      if (this._activeTarget && scrollTop < this._offsets[0] && this._offsets[0] > 0) {\n        this._activeTarget = null;\n\n        this._clear();\n\n        return;\n      }\n\n      for (let i = this._offsets.length; i--;) {\n        const isActiveTarget = this._activeTarget !== this._targets[i] && scrollTop >= this._offsets[i] && (typeof this._offsets[i + 1] === 'undefined' || scrollTop < this._offsets[i + 1]);\n\n        if (isActiveTarget) {\n          this._activate(this._targets[i]);\n        }\n      }\n    }\n\n    _activate(target) {\n      this._activeTarget = target;\n\n      this._clear();\n\n      const queries = this._selector.split(',').map(selector => `${selector}[data-bs-target=\"${target}\"],${selector}[href=\"${target}\"]`);\n\n      const link = SelectorEngine.findOne(queries.join(','));\n\n      if (link.classList.contains(CLASS_NAME_DROPDOWN_ITEM)) {\n        SelectorEngine.findOne(SELECTOR_DROPDOWN_TOGGLE$1, link.closest(SELECTOR_DROPDOWN$1)).classList.add(CLASS_NAME_ACTIVE$1);\n        link.classList.add(CLASS_NAME_ACTIVE$1);\n      } else {\n        // Set triggered link as active\n        link.classList.add(CLASS_NAME_ACTIVE$1);\n        SelectorEngine.parents(link, SELECTOR_NAV_LIST_GROUP$1).forEach(listGroup => {\n          // Set triggered links parents as active\n          // With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor\n          SelectorEngine.prev(listGroup, `${SELECTOR_NAV_LINKS}, ${SELECTOR_LIST_ITEMS}`).forEach(item => item.classList.add(CLASS_NAME_ACTIVE$1)); // Handle special case when .nav-link is inside .nav-item\n\n          SelectorEngine.prev(listGroup, SELECTOR_NAV_ITEMS).forEach(navItem => {\n            SelectorEngine.children(navItem, SELECTOR_NAV_LINKS).forEach(item => item.classList.add(CLASS_NAME_ACTIVE$1));\n          });\n        });\n      }\n\n      EventHandler.trigger(this._scrollElement, EVENT_ACTIVATE, {\n        relatedTarget: target\n      });\n    }\n\n    _clear() {\n      SelectorEngine.find(this._selector).filter(node => node.classList.contains(CLASS_NAME_ACTIVE$1)).forEach(node => node.classList.remove(CLASS_NAME_ACTIVE$1));\n    } // Static\n\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = ScrollSpy.getOrCreateInstance(this, config);\n\n        if (typeof config !== 'string') {\n          return;\n        }\n\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config]();\n      });\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n    SelectorEngine.find(SELECTOR_DATA_SPY).forEach(spy => new ScrollSpy(spy));\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .ScrollSpy to jQuery only if jQuery is present\n   */\n\n  defineJQueryPlugin(ScrollSpy);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): tab.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$1 = 'tab';\n  const DATA_KEY$1 = 'bs.tab';\n  const EVENT_KEY$1 = `.${DATA_KEY$1}`;\n  const DATA_API_KEY = '.data-api';\n  const EVENT_HIDE$1 = `hide${EVENT_KEY$1}`;\n  const EVENT_HIDDEN$1 = `hidden${EVENT_KEY$1}`;\n  const EVENT_SHOW$1 = `show${EVENT_KEY$1}`;\n  const EVENT_SHOWN$1 = `shown${EVENT_KEY$1}`;\n  const EVENT_CLICK_DATA_API = `click${EVENT_KEY$1}${DATA_API_KEY}`;\n  const CLASS_NAME_DROPDOWN_MENU = 'dropdown-menu';\n  const CLASS_NAME_ACTIVE = 'active';\n  const CLASS_NAME_FADE$1 = 'fade';\n  const CLASS_NAME_SHOW$1 = 'show';\n  const SELECTOR_DROPDOWN = '.dropdown';\n  const SELECTOR_NAV_LIST_GROUP = '.nav, .list-group';\n  const SELECTOR_ACTIVE = '.active';\n  const SELECTOR_ACTIVE_UL = ':scope > li > .active';\n  const SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"tab\"], [data-bs-toggle=\"pill\"], [data-bs-toggle=\"list\"]';\n  const SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle';\n  const SELECTOR_DROPDOWN_ACTIVE_CHILD = ':scope > .dropdown-menu .active';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Tab extends BaseComponent {\n    // Getters\n    static get NAME() {\n      return NAME$1;\n    } // Public\n\n\n    show() {\n      if (this._element.parentNode && this._element.parentNode.nodeType === Node.ELEMENT_NODE && this._element.classList.contains(CLASS_NAME_ACTIVE)) {\n        return;\n      }\n\n      let previous;\n      const target = getElementFromSelector(this._element);\n\n      const listElement = this._element.closest(SELECTOR_NAV_LIST_GROUP);\n\n      if (listElement) {\n        const itemSelector = listElement.nodeName === 'UL' || listElement.nodeName === 'OL' ? SELECTOR_ACTIVE_UL : SELECTOR_ACTIVE;\n        previous = SelectorEngine.find(itemSelector, listElement);\n        previous = previous[previous.length - 1];\n      }\n\n      const hideEvent = previous ? EventHandler.trigger(previous, EVENT_HIDE$1, {\n        relatedTarget: this._element\n      }) : null;\n      const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$1, {\n        relatedTarget: previous\n      });\n\n      if (showEvent.defaultPrevented || hideEvent !== null && hideEvent.defaultPrevented) {\n        return;\n      }\n\n      this._activate(this._element, listElement);\n\n      const complete = () => {\n        EventHandler.trigger(previous, EVENT_HIDDEN$1, {\n          relatedTarget: this._element\n        });\n        EventHandler.trigger(this._element, EVENT_SHOWN$1, {\n          relatedTarget: previous\n        });\n      };\n\n      if (target) {\n        this._activate(target, target.parentNode, complete);\n      } else {\n        complete();\n      }\n    } // Private\n\n\n    _activate(element, container, callback) {\n      const activeElements = container && (container.nodeName === 'UL' || container.nodeName === 'OL') ? SelectorEngine.find(SELECTOR_ACTIVE_UL, container) : SelectorEngine.children(container, SELECTOR_ACTIVE);\n      const active = activeElements[0];\n      const isTransitioning = callback && active && active.classList.contains(CLASS_NAME_FADE$1);\n\n      const complete = () => this._transitionComplete(element, active, callback);\n\n      if (active && isTransitioning) {\n        active.classList.remove(CLASS_NAME_SHOW$1);\n\n        this._queueCallback(complete, element, true);\n      } else {\n        complete();\n      }\n    }\n\n    _transitionComplete(element, active, callback) {\n      if (active) {\n        active.classList.remove(CLASS_NAME_ACTIVE);\n        const dropdownChild = SelectorEngine.findOne(SELECTOR_DROPDOWN_ACTIVE_CHILD, active.parentNode);\n\n        if (dropdownChild) {\n          dropdownChild.classList.remove(CLASS_NAME_ACTIVE);\n        }\n\n        if (active.getAttribute('role') === 'tab') {\n          active.setAttribute('aria-selected', false);\n        }\n      }\n\n      element.classList.add(CLASS_NAME_ACTIVE);\n\n      if (element.getAttribute('role') === 'tab') {\n        element.setAttribute('aria-selected', true);\n      }\n\n      reflow(element);\n\n      if (element.classList.contains(CLASS_NAME_FADE$1)) {\n        element.classList.add(CLASS_NAME_SHOW$1);\n      }\n\n      let parent = element.parentNode;\n\n      if (parent && parent.nodeName === 'LI') {\n        parent = parent.parentNode;\n      }\n\n      if (parent && parent.classList.contains(CLASS_NAME_DROPDOWN_MENU)) {\n        const dropdownElement = element.closest(SELECTOR_DROPDOWN);\n\n        if (dropdownElement) {\n          SelectorEngine.find(SELECTOR_DROPDOWN_TOGGLE, dropdownElement).forEach(dropdown => dropdown.classList.add(CLASS_NAME_ACTIVE));\n        }\n\n        element.setAttribute('aria-expanded', true);\n      }\n\n      if (callback) {\n        callback();\n      }\n    } // Static\n\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = Tab.getOrCreateInstance(this);\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(`No method named \"${config}\"`);\n          }\n\n          data[config]();\n        }\n      });\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n    if (['A', 'AREA'].includes(this.tagName)) {\n      event.preventDefault();\n    }\n\n    if (isDisabled(this)) {\n      return;\n    }\n\n    const data = Tab.getOrCreateInstance(this);\n    data.show();\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Tab to jQuery only if jQuery is present\n   */\n\n  defineJQueryPlugin(Tab);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): toast.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME = 'toast';\n  const DATA_KEY = 'bs.toast';\n  const EVENT_KEY = `.${DATA_KEY}`;\n  const EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY}`;\n  const EVENT_MOUSEOVER = `mouseover${EVENT_KEY}`;\n  const EVENT_MOUSEOUT = `mouseout${EVENT_KEY}`;\n  const EVENT_FOCUSIN = `focusin${EVENT_KEY}`;\n  const EVENT_FOCUSOUT = `focusout${EVENT_KEY}`;\n  const EVENT_HIDE = `hide${EVENT_KEY}`;\n  const EVENT_HIDDEN = `hidden${EVENT_KEY}`;\n  const EVENT_SHOW = `show${EVENT_KEY}`;\n  const EVENT_SHOWN = `shown${EVENT_KEY}`;\n  const CLASS_NAME_FADE = 'fade';\n  const CLASS_NAME_HIDE = 'hide';\n  const CLASS_NAME_SHOW = 'show';\n  const CLASS_NAME_SHOWING = 'showing';\n  const DefaultType = {\n    animation: 'boolean',\n    autohide: 'boolean',\n    delay: 'number'\n  };\n  const Default = {\n    animation: true,\n    autohide: true,\n    delay: 5000\n  };\n  const SELECTOR_DATA_DISMISS = '[data-bs-dismiss=\"toast\"]';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Toast extends BaseComponent {\n    constructor(element, config) {\n      super(element);\n      this._config = this._getConfig(config);\n      this._timeout = null;\n      this._hasMouseInteraction = false;\n      this._hasKeyboardInteraction = false;\n\n      this._setListeners();\n    } // Getters\n\n\n    static get DefaultType() {\n      return DefaultType;\n    }\n\n    static get Default() {\n      return Default;\n    }\n\n    static get NAME() {\n      return NAME;\n    } // Public\n\n\n    show() {\n      const showEvent = EventHandler.trigger(this._element, EVENT_SHOW);\n\n      if (showEvent.defaultPrevented) {\n        return;\n      }\n\n      this._clearTimeout();\n\n      if (this._config.animation) {\n        this._element.classList.add(CLASS_NAME_FADE);\n      }\n\n      const complete = () => {\n        this._element.classList.remove(CLASS_NAME_SHOWING);\n\n        this._element.classList.add(CLASS_NAME_SHOW);\n\n        EventHandler.trigger(this._element, EVENT_SHOWN);\n\n        this._maybeScheduleHide();\n      };\n\n      this._element.classList.remove(CLASS_NAME_HIDE);\n\n      reflow(this._element);\n\n      this._element.classList.add(CLASS_NAME_SHOWING);\n\n      this._queueCallback(complete, this._element, this._config.animation);\n    }\n\n    hide() {\n      if (!this._element.classList.contains(CLASS_NAME_SHOW)) {\n        return;\n      }\n\n      const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE);\n\n      if (hideEvent.defaultPrevented) {\n        return;\n      }\n\n      const complete = () => {\n        this._element.classList.add(CLASS_NAME_HIDE);\n\n        EventHandler.trigger(this._element, EVENT_HIDDEN);\n      };\n\n      this._element.classList.remove(CLASS_NAME_SHOW);\n\n      this._queueCallback(complete, this._element, this._config.animation);\n    }\n\n    dispose() {\n      this._clearTimeout();\n\n      if (this._element.classList.contains(CLASS_NAME_SHOW)) {\n        this._element.classList.remove(CLASS_NAME_SHOW);\n      }\n\n      super.dispose();\n    } // Private\n\n\n    _getConfig(config) {\n      config = { ...Default,\n        ...Manipulator.getDataAttributes(this._element),\n        ...(typeof config === 'object' && config ? config : {})\n      };\n      typeCheckConfig(NAME, config, this.constructor.DefaultType);\n      return config;\n    }\n\n    _maybeScheduleHide() {\n      if (!this._config.autohide) {\n        return;\n      }\n\n      if (this._hasMouseInteraction || this._hasKeyboardInteraction) {\n        return;\n      }\n\n      this._timeout = setTimeout(() => {\n        this.hide();\n      }, this._config.delay);\n    }\n\n    _onInteraction(event, isInteracting) {\n      switch (event.type) {\n        case 'mouseover':\n        case 'mouseout':\n          this._hasMouseInteraction = isInteracting;\n          break;\n\n        case 'focusin':\n        case 'focusout':\n          this._hasKeyboardInteraction = isInteracting;\n          break;\n      }\n\n      if (isInteracting) {\n        this._clearTimeout();\n\n        return;\n      }\n\n      const nextElement = event.relatedTarget;\n\n      if (this._element === nextElement || this._element.contains(nextElement)) {\n        return;\n      }\n\n      this._maybeScheduleHide();\n    }\n\n    _setListeners() {\n      EventHandler.on(this._element, EVENT_CLICK_DISMISS, SELECTOR_DATA_DISMISS, () => this.hide());\n      EventHandler.on(this._element, EVENT_MOUSEOVER, event => this._onInteraction(event, true));\n      EventHandler.on(this._element, EVENT_MOUSEOUT, event => this._onInteraction(event, false));\n      EventHandler.on(this._element, EVENT_FOCUSIN, event => this._onInteraction(event, true));\n      EventHandler.on(this._element, EVENT_FOCUSOUT, event => this._onInteraction(event, false));\n    }\n\n    _clearTimeout() {\n      clearTimeout(this._timeout);\n      this._timeout = null;\n    } // Static\n\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = Toast.getOrCreateInstance(this, config);\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(`No method named \"${config}\"`);\n          }\n\n          data[config](this);\n        }\n      });\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Toast to jQuery only if jQuery is present\n   */\n\n\n  defineJQueryPlugin(Toast);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): index.umd.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  var index_umd = {\n    Alert,\n    Button,\n    Carousel,\n    Collapse,\n    Dropdown,\n    Modal,\n    Offcanvas,\n    Popover,\n    ScrollSpy,\n    Tab,\n    Toast,\n    Tooltip\n  };\n\n  return index_umd;\n\n})));\n//# sourceMappingURL=bootstrap.bundle.js.map\n"
  },
  {
    "path": "src/sourceDev.WebApp/SharedThemes/united/wwwroot/js/bootstrap.esm.js",
    "content": "/*!\n  * Bootstrap v5.0.2 (https://getbootstrap.com/)\n  * Copyright 2011-2021 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)\n  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n  */\nimport * as Popper from '@popperjs/core';\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): dom/selector-engine.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\nconst NODE_TEXT = 3;\nconst SelectorEngine = {\n  find(selector, element = document.documentElement) {\n    return [].concat(...Element.prototype.querySelectorAll.call(element, selector));\n  },\n\n  findOne(selector, element = document.documentElement) {\n    return Element.prototype.querySelector.call(element, selector);\n  },\n\n  children(element, selector) {\n    return [].concat(...element.children).filter(child => child.matches(selector));\n  },\n\n  parents(element, selector) {\n    const parents = [];\n    let ancestor = element.parentNode;\n\n    while (ancestor && ancestor.nodeType === Node.ELEMENT_NODE && ancestor.nodeType !== NODE_TEXT) {\n      if (ancestor.matches(selector)) {\n        parents.push(ancestor);\n      }\n\n      ancestor = ancestor.parentNode;\n    }\n\n    return parents;\n  },\n\n  prev(element, selector) {\n    let previous = element.previousElementSibling;\n\n    while (previous) {\n      if (previous.matches(selector)) {\n        return [previous];\n      }\n\n      previous = previous.previousElementSibling;\n    }\n\n    return [];\n  },\n\n  next(element, selector) {\n    let next = element.nextElementSibling;\n\n    while (next) {\n      if (next.matches(selector)) {\n        return [next];\n      }\n\n      next = next.nextElementSibling;\n    }\n\n    return [];\n  }\n\n};\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): util/index.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst MAX_UID = 1000000;\nconst MILLISECONDS_MULTIPLIER = 1000;\nconst TRANSITION_END = 'transitionend'; // Shoutout AngusCroll (https://goo.gl/pxwQGp)\n\nconst toType = obj => {\n  if (obj === null || obj === undefined) {\n    return `${obj}`;\n  }\n\n  return {}.toString.call(obj).match(/\\s([a-z]+)/i)[1].toLowerCase();\n};\n/**\n * --------------------------------------------------------------------------\n * Public Util Api\n * --------------------------------------------------------------------------\n */\n\n\nconst getUID = prefix => {\n  do {\n    prefix += Math.floor(Math.random() * MAX_UID);\n  } while (document.getElementById(prefix));\n\n  return prefix;\n};\n\nconst getSelector = element => {\n  let selector = element.getAttribute('data-bs-target');\n\n  if (!selector || selector === '#') {\n    let hrefAttr = element.getAttribute('href'); // The only valid content that could double as a selector are IDs or classes,\n    // so everything starting with `#` or `.`. If a \"real\" URL is used as the selector,\n    // `document.querySelector` will rightfully complain it is invalid.\n    // See https://github.com/twbs/bootstrap/issues/32273\n\n    if (!hrefAttr || !hrefAttr.includes('#') && !hrefAttr.startsWith('.')) {\n      return null;\n    } // Just in case some CMS puts out a full URL with the anchor appended\n\n\n    if (hrefAttr.includes('#') && !hrefAttr.startsWith('#')) {\n      hrefAttr = `#${hrefAttr.split('#')[1]}`;\n    }\n\n    selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : null;\n  }\n\n  return selector;\n};\n\nconst getSelectorFromElement = element => {\n  const selector = getSelector(element);\n\n  if (selector) {\n    return document.querySelector(selector) ? selector : null;\n  }\n\n  return null;\n};\n\nconst getElementFromSelector = element => {\n  const selector = getSelector(element);\n  return selector ? document.querySelector(selector) : null;\n};\n\nconst getTransitionDurationFromElement = element => {\n  if (!element) {\n    return 0;\n  } // Get transition-duration of the element\n\n\n  let {\n    transitionDuration,\n    transitionDelay\n  } = window.getComputedStyle(element);\n  const floatTransitionDuration = Number.parseFloat(transitionDuration);\n  const floatTransitionDelay = Number.parseFloat(transitionDelay); // Return 0 if element or transition duration is not found\n\n  if (!floatTransitionDuration && !floatTransitionDelay) {\n    return 0;\n  } // If multiple durations are defined, take the first\n\n\n  transitionDuration = transitionDuration.split(',')[0];\n  transitionDelay = transitionDelay.split(',')[0];\n  return (Number.parseFloat(transitionDuration) + Number.parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER;\n};\n\nconst triggerTransitionEnd = element => {\n  element.dispatchEvent(new Event(TRANSITION_END));\n};\n\nconst isElement = obj => {\n  if (!obj || typeof obj !== 'object') {\n    return false;\n  }\n\n  if (typeof obj.jquery !== 'undefined') {\n    obj = obj[0];\n  }\n\n  return typeof obj.nodeType !== 'undefined';\n};\n\nconst getElement = obj => {\n  if (isElement(obj)) {\n    // it's a jQuery object or a node element\n    return obj.jquery ? obj[0] : obj;\n  }\n\n  if (typeof obj === 'string' && obj.length > 0) {\n    return SelectorEngine.findOne(obj);\n  }\n\n  return null;\n};\n\nconst typeCheckConfig = (componentName, config, configTypes) => {\n  Object.keys(configTypes).forEach(property => {\n    const expectedTypes = configTypes[property];\n    const value = config[property];\n    const valueType = value && isElement(value) ? 'element' : toType(value);\n\n    if (!new RegExp(expectedTypes).test(valueType)) {\n      throw new TypeError(`${componentName.toUpperCase()}: Option \"${property}\" provided type \"${valueType}\" but expected type \"${expectedTypes}\".`);\n    }\n  });\n};\n\nconst isVisible = element => {\n  if (!isElement(element) || element.getClientRects().length === 0) {\n    return false;\n  }\n\n  return getComputedStyle(element).getPropertyValue('visibility') === 'visible';\n};\n\nconst isDisabled = element => {\n  if (!element || element.nodeType !== Node.ELEMENT_NODE) {\n    return true;\n  }\n\n  if (element.classList.contains('disabled')) {\n    return true;\n  }\n\n  if (typeof element.disabled !== 'undefined') {\n    return element.disabled;\n  }\n\n  return element.hasAttribute('disabled') && element.getAttribute('disabled') !== 'false';\n};\n\nconst findShadowRoot = element => {\n  if (!document.documentElement.attachShadow) {\n    return null;\n  } // Can find the shadow root otherwise it'll return the document\n\n\n  if (typeof element.getRootNode === 'function') {\n    const root = element.getRootNode();\n    return root instanceof ShadowRoot ? root : null;\n  }\n\n  if (element instanceof ShadowRoot) {\n    return element;\n  } // when we don't find a shadow root\n\n\n  if (!element.parentNode) {\n    return null;\n  }\n\n  return findShadowRoot(element.parentNode);\n};\n\nconst noop = () => {};\n\nconst reflow = element => element.offsetHeight;\n\nconst getjQuery = () => {\n  const {\n    jQuery\n  } = window;\n\n  if (jQuery && !document.body.hasAttribute('data-bs-no-jquery')) {\n    return jQuery;\n  }\n\n  return null;\n};\n\nconst DOMContentLoadedCallbacks = [];\n\nconst onDOMContentLoaded = callback => {\n  if (document.readyState === 'loading') {\n    // add listener on the first call when the document is in loading state\n    if (!DOMContentLoadedCallbacks.length) {\n      document.addEventListener('DOMContentLoaded', () => {\n        DOMContentLoadedCallbacks.forEach(callback => callback());\n      });\n    }\n\n    DOMContentLoadedCallbacks.push(callback);\n  } else {\n    callback();\n  }\n};\n\nconst isRTL = () => document.documentElement.dir === 'rtl';\n\nconst defineJQueryPlugin = plugin => {\n  onDOMContentLoaded(() => {\n    const $ = getjQuery();\n    /* istanbul ignore if */\n\n    if ($) {\n      const name = plugin.NAME;\n      const JQUERY_NO_CONFLICT = $.fn[name];\n      $.fn[name] = plugin.jQueryInterface;\n      $.fn[name].Constructor = plugin;\n\n      $.fn[name].noConflict = () => {\n        $.fn[name] = JQUERY_NO_CONFLICT;\n        return plugin.jQueryInterface;\n      };\n    }\n  });\n};\n\nconst execute = callback => {\n  if (typeof callback === 'function') {\n    callback();\n  }\n};\n\nconst executeAfterTransition = (callback, transitionElement, waitForTransition = true) => {\n  if (!waitForTransition) {\n    execute(callback);\n    return;\n  }\n\n  const durationPadding = 5;\n  const emulatedDuration = getTransitionDurationFromElement(transitionElement) + durationPadding;\n  let called = false;\n\n  const handler = ({\n    target\n  }) => {\n    if (target !== transitionElement) {\n      return;\n    }\n\n    called = true;\n    transitionElement.removeEventListener(TRANSITION_END, handler);\n    execute(callback);\n  };\n\n  transitionElement.addEventListener(TRANSITION_END, handler);\n  setTimeout(() => {\n    if (!called) {\n      triggerTransitionEnd(transitionElement);\n    }\n  }, emulatedDuration);\n};\n/**\n * Return the previous/next element of a list.\n *\n * @param {array} list    The list of elements\n * @param activeElement   The active element\n * @param shouldGetNext   Choose to get next or previous element\n * @param isCycleAllowed\n * @return {Element|elem} The proper element\n */\n\n\nconst getNextActiveElement = (list, activeElement, shouldGetNext, isCycleAllowed) => {\n  let index = list.indexOf(activeElement); // if the element does not exist in the list return an element depending on the direction and if cycle is allowed\n\n  if (index === -1) {\n    return list[!shouldGetNext && isCycleAllowed ? list.length - 1 : 0];\n  }\n\n  const listLength = list.length;\n  index += shouldGetNext ? 1 : -1;\n\n  if (isCycleAllowed) {\n    index = (index + listLength) % listLength;\n  }\n\n  return list[Math.max(0, Math.min(index, listLength - 1))];\n};\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): dom/event-handler.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst namespaceRegex = /[^.]*(?=\\..*)\\.|.*/;\nconst stripNameRegex = /\\..*/;\nconst stripUidRegex = /::\\d+$/;\nconst eventRegistry = {}; // Events storage\n\nlet uidEvent = 1;\nconst customEvents = {\n  mouseenter: 'mouseover',\n  mouseleave: 'mouseout'\n};\nconst customEventsRegex = /^(mouseenter|mouseleave)/i;\nconst nativeEvents = new Set(['click', 'dblclick', 'mouseup', 'mousedown', 'contextmenu', 'mousewheel', 'DOMMouseScroll', 'mouseover', 'mouseout', 'mousemove', 'selectstart', 'selectend', 'keydown', 'keypress', 'keyup', 'orientationchange', 'touchstart', 'touchmove', 'touchend', 'touchcancel', 'pointerdown', 'pointermove', 'pointerup', 'pointerleave', 'pointercancel', 'gesturestart', 'gesturechange', 'gestureend', 'focus', 'blur', 'change', 'reset', 'select', 'submit', 'focusin', 'focusout', 'load', 'unload', 'beforeunload', 'resize', 'move', 'DOMContentLoaded', 'readystatechange', 'error', 'abort', 'scroll']);\n/**\n * ------------------------------------------------------------------------\n * Private methods\n * ------------------------------------------------------------------------\n */\n\nfunction getUidEvent(element, uid) {\n  return uid && `${uid}::${uidEvent++}` || element.uidEvent || uidEvent++;\n}\n\nfunction getEvent(element) {\n  const uid = getUidEvent(element);\n  element.uidEvent = uid;\n  eventRegistry[uid] = eventRegistry[uid] || {};\n  return eventRegistry[uid];\n}\n\nfunction bootstrapHandler(element, fn) {\n  return function handler(event) {\n    event.delegateTarget = element;\n\n    if (handler.oneOff) {\n      EventHandler.off(element, event.type, fn);\n    }\n\n    return fn.apply(element, [event]);\n  };\n}\n\nfunction bootstrapDelegationHandler(element, selector, fn) {\n  return function handler(event) {\n    const domElements = element.querySelectorAll(selector);\n\n    for (let {\n      target\n    } = event; target && target !== this; target = target.parentNode) {\n      for (let i = domElements.length; i--;) {\n        if (domElements[i] === target) {\n          event.delegateTarget = target;\n\n          if (handler.oneOff) {\n            // eslint-disable-next-line unicorn/consistent-destructuring\n            EventHandler.off(element, event.type, selector, fn);\n          }\n\n          return fn.apply(target, [event]);\n        }\n      }\n    } // To please ESLint\n\n\n    return null;\n  };\n}\n\nfunction findHandler(events, handler, delegationSelector = null) {\n  const uidEventList = Object.keys(events);\n\n  for (let i = 0, len = uidEventList.length; i < len; i++) {\n    const event = events[uidEventList[i]];\n\n    if (event.originalHandler === handler && event.delegationSelector === delegationSelector) {\n      return event;\n    }\n  }\n\n  return null;\n}\n\nfunction normalizeParams(originalTypeEvent, handler, delegationFn) {\n  const delegation = typeof handler === 'string';\n  const originalHandler = delegation ? delegationFn : handler;\n  let typeEvent = getTypeEvent(originalTypeEvent);\n  const isNative = nativeEvents.has(typeEvent);\n\n  if (!isNative) {\n    typeEvent = originalTypeEvent;\n  }\n\n  return [delegation, originalHandler, typeEvent];\n}\n\nfunction addHandler(element, originalTypeEvent, handler, delegationFn, oneOff) {\n  if (typeof originalTypeEvent !== 'string' || !element) {\n    return;\n  }\n\n  if (!handler) {\n    handler = delegationFn;\n    delegationFn = null;\n  } // in case of mouseenter or mouseleave wrap the handler within a function that checks for its DOM position\n  // this prevents the handler from being dispatched the same way as mouseover or mouseout does\n\n\n  if (customEventsRegex.test(originalTypeEvent)) {\n    const wrapFn = fn => {\n      return function (event) {\n        if (!event.relatedTarget || event.relatedTarget !== event.delegateTarget && !event.delegateTarget.contains(event.relatedTarget)) {\n          return fn.call(this, event);\n        }\n      };\n    };\n\n    if (delegationFn) {\n      delegationFn = wrapFn(delegationFn);\n    } else {\n      handler = wrapFn(handler);\n    }\n  }\n\n  const [delegation, originalHandler, typeEvent] = normalizeParams(originalTypeEvent, handler, delegationFn);\n  const events = getEvent(element);\n  const handlers = events[typeEvent] || (events[typeEvent] = {});\n  const previousFn = findHandler(handlers, originalHandler, delegation ? handler : null);\n\n  if (previousFn) {\n    previousFn.oneOff = previousFn.oneOff && oneOff;\n    return;\n  }\n\n  const uid = getUidEvent(originalHandler, originalTypeEvent.replace(namespaceRegex, ''));\n  const fn = delegation ? bootstrapDelegationHandler(element, handler, delegationFn) : bootstrapHandler(element, handler);\n  fn.delegationSelector = delegation ? handler : null;\n  fn.originalHandler = originalHandler;\n  fn.oneOff = oneOff;\n  fn.uidEvent = uid;\n  handlers[uid] = fn;\n  element.addEventListener(typeEvent, fn, delegation);\n}\n\nfunction removeHandler(element, events, typeEvent, handler, delegationSelector) {\n  const fn = findHandler(events[typeEvent], handler, delegationSelector);\n\n  if (!fn) {\n    return;\n  }\n\n  element.removeEventListener(typeEvent, fn, Boolean(delegationSelector));\n  delete events[typeEvent][fn.uidEvent];\n}\n\nfunction removeNamespacedHandlers(element, events, typeEvent, namespace) {\n  const storeElementEvent = events[typeEvent] || {};\n  Object.keys(storeElementEvent).forEach(handlerKey => {\n    if (handlerKey.includes(namespace)) {\n      const event = storeElementEvent[handlerKey];\n      removeHandler(element, events, typeEvent, event.originalHandler, event.delegationSelector);\n    }\n  });\n}\n\nfunction getTypeEvent(event) {\n  // allow to get the native events from namespaced events ('click.bs.button' --> 'click')\n  event = event.replace(stripNameRegex, '');\n  return customEvents[event] || event;\n}\n\nconst EventHandler = {\n  on(element, event, handler, delegationFn) {\n    addHandler(element, event, handler, delegationFn, false);\n  },\n\n  one(element, event, handler, delegationFn) {\n    addHandler(element, event, handler, delegationFn, true);\n  },\n\n  off(element, originalTypeEvent, handler, delegationFn) {\n    if (typeof originalTypeEvent !== 'string' || !element) {\n      return;\n    }\n\n    const [delegation, originalHandler, typeEvent] = normalizeParams(originalTypeEvent, handler, delegationFn);\n    const inNamespace = typeEvent !== originalTypeEvent;\n    const events = getEvent(element);\n    const isNamespace = originalTypeEvent.startsWith('.');\n\n    if (typeof originalHandler !== 'undefined') {\n      // Simplest case: handler is passed, remove that listener ONLY.\n      if (!events || !events[typeEvent]) {\n        return;\n      }\n\n      removeHandler(element, events, typeEvent, originalHandler, delegation ? handler : null);\n      return;\n    }\n\n    if (isNamespace) {\n      Object.keys(events).forEach(elementEvent => {\n        removeNamespacedHandlers(element, events, elementEvent, originalTypeEvent.slice(1));\n      });\n    }\n\n    const storeElementEvent = events[typeEvent] || {};\n    Object.keys(storeElementEvent).forEach(keyHandlers => {\n      const handlerKey = keyHandlers.replace(stripUidRegex, '');\n\n      if (!inNamespace || originalTypeEvent.includes(handlerKey)) {\n        const event = storeElementEvent[keyHandlers];\n        removeHandler(element, events, typeEvent, event.originalHandler, event.delegationSelector);\n      }\n    });\n  },\n\n  trigger(element, event, args) {\n    if (typeof event !== 'string' || !element) {\n      return null;\n    }\n\n    const $ = getjQuery();\n    const typeEvent = getTypeEvent(event);\n    const inNamespace = event !== typeEvent;\n    const isNative = nativeEvents.has(typeEvent);\n    let jQueryEvent;\n    let bubbles = true;\n    let nativeDispatch = true;\n    let defaultPrevented = false;\n    let evt = null;\n\n    if (inNamespace && $) {\n      jQueryEvent = $.Event(event, args);\n      $(element).trigger(jQueryEvent);\n      bubbles = !jQueryEvent.isPropagationStopped();\n      nativeDispatch = !jQueryEvent.isImmediatePropagationStopped();\n      defaultPrevented = jQueryEvent.isDefaultPrevented();\n    }\n\n    if (isNative) {\n      evt = document.createEvent('HTMLEvents');\n      evt.initEvent(typeEvent, bubbles, true);\n    } else {\n      evt = new CustomEvent(event, {\n        bubbles,\n        cancelable: true\n      });\n    } // merge custom information in our event\n\n\n    if (typeof args !== 'undefined') {\n      Object.keys(args).forEach(key => {\n        Object.defineProperty(evt, key, {\n          get() {\n            return args[key];\n          }\n\n        });\n      });\n    }\n\n    if (defaultPrevented) {\n      evt.preventDefault();\n    }\n\n    if (nativeDispatch) {\n      element.dispatchEvent(evt);\n    }\n\n    if (evt.defaultPrevented && typeof jQueryEvent !== 'undefined') {\n      jQueryEvent.preventDefault();\n    }\n\n    return evt;\n  }\n\n};\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): dom/data.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\nconst elementMap = new Map();\nvar Data = {\n  set(element, key, instance) {\n    if (!elementMap.has(element)) {\n      elementMap.set(element, new Map());\n    }\n\n    const instanceMap = elementMap.get(element); // make it clear we only want one instance per element\n    // can be removed later when multiple key/instances are fine to be used\n\n    if (!instanceMap.has(key) && instanceMap.size !== 0) {\n      // eslint-disable-next-line no-console\n      console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(instanceMap.keys())[0]}.`);\n      return;\n    }\n\n    instanceMap.set(key, instance);\n  },\n\n  get(element, key) {\n    if (elementMap.has(element)) {\n      return elementMap.get(element).get(key) || null;\n    }\n\n    return null;\n  },\n\n  remove(element, key) {\n    if (!elementMap.has(element)) {\n      return;\n    }\n\n    const instanceMap = elementMap.get(element);\n    instanceMap.delete(key); // free up element references if there are no instances left for an element\n\n    if (instanceMap.size === 0) {\n      elementMap.delete(element);\n    }\n  }\n\n};\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): base-component.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst VERSION = '5.0.2';\n\nclass BaseComponent {\n  constructor(element) {\n    element = getElement(element);\n\n    if (!element) {\n      return;\n    }\n\n    this._element = element;\n    Data.set(this._element, this.constructor.DATA_KEY, this);\n  }\n\n  dispose() {\n    Data.remove(this._element, this.constructor.DATA_KEY);\n    EventHandler.off(this._element, this.constructor.EVENT_KEY);\n    Object.getOwnPropertyNames(this).forEach(propertyName => {\n      this[propertyName] = null;\n    });\n  }\n\n  _queueCallback(callback, element, isAnimated = true) {\n    executeAfterTransition(callback, element, isAnimated);\n  }\n  /** Static */\n\n\n  static getInstance(element) {\n    return Data.get(element, this.DATA_KEY);\n  }\n\n  static getOrCreateInstance(element, config = {}) {\n    return this.getInstance(element) || new this(element, typeof config === 'object' ? config : null);\n  }\n\n  static get VERSION() {\n    return VERSION;\n  }\n\n  static get NAME() {\n    throw new Error('You have to implement the static method \"NAME\", for each component!');\n  }\n\n  static get DATA_KEY() {\n    return `bs.${this.NAME}`;\n  }\n\n  static get EVENT_KEY() {\n    return `.${this.DATA_KEY}`;\n  }\n\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): alert.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$c = 'alert';\nconst DATA_KEY$b = 'bs.alert';\nconst EVENT_KEY$b = `.${DATA_KEY$b}`;\nconst DATA_API_KEY$8 = '.data-api';\nconst SELECTOR_DISMISS = '[data-bs-dismiss=\"alert\"]';\nconst EVENT_CLOSE = `close${EVENT_KEY$b}`;\nconst EVENT_CLOSED = `closed${EVENT_KEY$b}`;\nconst EVENT_CLICK_DATA_API$7 = `click${EVENT_KEY$b}${DATA_API_KEY$8}`;\nconst CLASS_NAME_ALERT = 'alert';\nconst CLASS_NAME_FADE$6 = 'fade';\nconst CLASS_NAME_SHOW$9 = 'show';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Alert extends BaseComponent {\n  // Getters\n  static get NAME() {\n    return NAME$c;\n  } // Public\n\n\n  close(element) {\n    const rootElement = element ? this._getRootElement(element) : this._element;\n\n    const customEvent = this._triggerCloseEvent(rootElement);\n\n    if (customEvent === null || customEvent.defaultPrevented) {\n      return;\n    }\n\n    this._removeElement(rootElement);\n  } // Private\n\n\n  _getRootElement(element) {\n    return getElementFromSelector(element) || element.closest(`.${CLASS_NAME_ALERT}`);\n  }\n\n  _triggerCloseEvent(element) {\n    return EventHandler.trigger(element, EVENT_CLOSE);\n  }\n\n  _removeElement(element) {\n    element.classList.remove(CLASS_NAME_SHOW$9);\n    const isAnimated = element.classList.contains(CLASS_NAME_FADE$6);\n\n    this._queueCallback(() => this._destroyElement(element), element, isAnimated);\n  }\n\n  _destroyElement(element) {\n    element.remove();\n    EventHandler.trigger(element, EVENT_CLOSED);\n  } // Static\n\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Alert.getOrCreateInstance(this);\n\n      if (config === 'close') {\n        data[config](this);\n      }\n    });\n  }\n\n  static handleDismiss(alertInstance) {\n    return function (event) {\n      if (event) {\n        event.preventDefault();\n      }\n\n      alertInstance.close(this);\n    };\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$7, SELECTOR_DISMISS, Alert.handleDismiss(new Alert()));\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Alert to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Alert);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): button.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$b = 'button';\nconst DATA_KEY$a = 'bs.button';\nconst EVENT_KEY$a = `.${DATA_KEY$a}`;\nconst DATA_API_KEY$7 = '.data-api';\nconst CLASS_NAME_ACTIVE$3 = 'active';\nconst SELECTOR_DATA_TOGGLE$5 = '[data-bs-toggle=\"button\"]';\nconst EVENT_CLICK_DATA_API$6 = `click${EVENT_KEY$a}${DATA_API_KEY$7}`;\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Button extends BaseComponent {\n  // Getters\n  static get NAME() {\n    return NAME$b;\n  } // Public\n\n\n  toggle() {\n    // Toggle class and sync the `aria-pressed` attribute with the return value of the `.toggle()` method\n    this._element.setAttribute('aria-pressed', this._element.classList.toggle(CLASS_NAME_ACTIVE$3));\n  } // Static\n\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Button.getOrCreateInstance(this);\n\n      if (config === 'toggle') {\n        data[config]();\n      }\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$6, SELECTOR_DATA_TOGGLE$5, event => {\n  event.preventDefault();\n  const button = event.target.closest(SELECTOR_DATA_TOGGLE$5);\n  const data = Button.getOrCreateInstance(button);\n  data.toggle();\n});\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Button to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Button);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): dom/manipulator.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\nfunction normalizeData(val) {\n  if (val === 'true') {\n    return true;\n  }\n\n  if (val === 'false') {\n    return false;\n  }\n\n  if (val === Number(val).toString()) {\n    return Number(val);\n  }\n\n  if (val === '' || val === 'null') {\n    return null;\n  }\n\n  return val;\n}\n\nfunction normalizeDataKey(key) {\n  return key.replace(/[A-Z]/g, chr => `-${chr.toLowerCase()}`);\n}\n\nconst Manipulator = {\n  setDataAttribute(element, key, value) {\n    element.setAttribute(`data-bs-${normalizeDataKey(key)}`, value);\n  },\n\n  removeDataAttribute(element, key) {\n    element.removeAttribute(`data-bs-${normalizeDataKey(key)}`);\n  },\n\n  getDataAttributes(element) {\n    if (!element) {\n      return {};\n    }\n\n    const attributes = {};\n    Object.keys(element.dataset).filter(key => key.startsWith('bs')).forEach(key => {\n      let pureKey = key.replace(/^bs/, '');\n      pureKey = pureKey.charAt(0).toLowerCase() + pureKey.slice(1, pureKey.length);\n      attributes[pureKey] = normalizeData(element.dataset[key]);\n    });\n    return attributes;\n  },\n\n  getDataAttribute(element, key) {\n    return normalizeData(element.getAttribute(`data-bs-${normalizeDataKey(key)}`));\n  },\n\n  offset(element) {\n    const rect = element.getBoundingClientRect();\n    return {\n      top: rect.top + document.body.scrollTop,\n      left: rect.left + document.body.scrollLeft\n    };\n  },\n\n  position(element) {\n    return {\n      top: element.offsetTop,\n      left: element.offsetLeft\n    };\n  }\n\n};\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): carousel.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$a = 'carousel';\nconst DATA_KEY$9 = 'bs.carousel';\nconst EVENT_KEY$9 = `.${DATA_KEY$9}`;\nconst DATA_API_KEY$6 = '.data-api';\nconst ARROW_LEFT_KEY = 'ArrowLeft';\nconst ARROW_RIGHT_KEY = 'ArrowRight';\nconst TOUCHEVENT_COMPAT_WAIT = 500; // Time for mouse compat events to fire after touch\n\nconst SWIPE_THRESHOLD = 40;\nconst Default$9 = {\n  interval: 5000,\n  keyboard: true,\n  slide: false,\n  pause: 'hover',\n  wrap: true,\n  touch: true\n};\nconst DefaultType$9 = {\n  interval: '(number|boolean)',\n  keyboard: 'boolean',\n  slide: '(boolean|string)',\n  pause: '(string|boolean)',\n  wrap: 'boolean',\n  touch: 'boolean'\n};\nconst ORDER_NEXT = 'next';\nconst ORDER_PREV = 'prev';\nconst DIRECTION_LEFT = 'left';\nconst DIRECTION_RIGHT = 'right';\nconst KEY_TO_DIRECTION = {\n  [ARROW_LEFT_KEY]: DIRECTION_RIGHT,\n  [ARROW_RIGHT_KEY]: DIRECTION_LEFT\n};\nconst EVENT_SLIDE = `slide${EVENT_KEY$9}`;\nconst EVENT_SLID = `slid${EVENT_KEY$9}`;\nconst EVENT_KEYDOWN = `keydown${EVENT_KEY$9}`;\nconst EVENT_MOUSEENTER = `mouseenter${EVENT_KEY$9}`;\nconst EVENT_MOUSELEAVE = `mouseleave${EVENT_KEY$9}`;\nconst EVENT_TOUCHSTART = `touchstart${EVENT_KEY$9}`;\nconst EVENT_TOUCHMOVE = `touchmove${EVENT_KEY$9}`;\nconst EVENT_TOUCHEND = `touchend${EVENT_KEY$9}`;\nconst EVENT_POINTERDOWN = `pointerdown${EVENT_KEY$9}`;\nconst EVENT_POINTERUP = `pointerup${EVENT_KEY$9}`;\nconst EVENT_DRAG_START = `dragstart${EVENT_KEY$9}`;\nconst EVENT_LOAD_DATA_API$2 = `load${EVENT_KEY$9}${DATA_API_KEY$6}`;\nconst EVENT_CLICK_DATA_API$5 = `click${EVENT_KEY$9}${DATA_API_KEY$6}`;\nconst CLASS_NAME_CAROUSEL = 'carousel';\nconst CLASS_NAME_ACTIVE$2 = 'active';\nconst CLASS_NAME_SLIDE = 'slide';\nconst CLASS_NAME_END = 'carousel-item-end';\nconst CLASS_NAME_START = 'carousel-item-start';\nconst CLASS_NAME_NEXT = 'carousel-item-next';\nconst CLASS_NAME_PREV = 'carousel-item-prev';\nconst CLASS_NAME_POINTER_EVENT = 'pointer-event';\nconst SELECTOR_ACTIVE$1 = '.active';\nconst SELECTOR_ACTIVE_ITEM = '.active.carousel-item';\nconst SELECTOR_ITEM = '.carousel-item';\nconst SELECTOR_ITEM_IMG = '.carousel-item img';\nconst SELECTOR_NEXT_PREV = '.carousel-item-next, .carousel-item-prev';\nconst SELECTOR_INDICATORS = '.carousel-indicators';\nconst SELECTOR_INDICATOR = '[data-bs-target]';\nconst SELECTOR_DATA_SLIDE = '[data-bs-slide], [data-bs-slide-to]';\nconst SELECTOR_DATA_RIDE = '[data-bs-ride=\"carousel\"]';\nconst POINTER_TYPE_TOUCH = 'touch';\nconst POINTER_TYPE_PEN = 'pen';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Carousel extends BaseComponent {\n  constructor(element, config) {\n    super(element);\n    this._items = null;\n    this._interval = null;\n    this._activeElement = null;\n    this._isPaused = false;\n    this._isSliding = false;\n    this.touchTimeout = null;\n    this.touchStartX = 0;\n    this.touchDeltaX = 0;\n    this._config = this._getConfig(config);\n    this._indicatorsElement = SelectorEngine.findOne(SELECTOR_INDICATORS, this._element);\n    this._touchSupported = 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0;\n    this._pointerEvent = Boolean(window.PointerEvent);\n\n    this._addEventListeners();\n  } // Getters\n\n\n  static get Default() {\n    return Default$9;\n  }\n\n  static get NAME() {\n    return NAME$a;\n  } // Public\n\n\n  next() {\n    this._slide(ORDER_NEXT);\n  }\n\n  nextWhenVisible() {\n    // Don't call next when the page isn't visible\n    // or the carousel or its parent isn't visible\n    if (!document.hidden && isVisible(this._element)) {\n      this.next();\n    }\n  }\n\n  prev() {\n    this._slide(ORDER_PREV);\n  }\n\n  pause(event) {\n    if (!event) {\n      this._isPaused = true;\n    }\n\n    if (SelectorEngine.findOne(SELECTOR_NEXT_PREV, this._element)) {\n      triggerTransitionEnd(this._element);\n      this.cycle(true);\n    }\n\n    clearInterval(this._interval);\n    this._interval = null;\n  }\n\n  cycle(event) {\n    if (!event) {\n      this._isPaused = false;\n    }\n\n    if (this._interval) {\n      clearInterval(this._interval);\n      this._interval = null;\n    }\n\n    if (this._config && this._config.interval && !this._isPaused) {\n      this._updateInterval();\n\n      this._interval = setInterval((document.visibilityState ? this.nextWhenVisible : this.next).bind(this), this._config.interval);\n    }\n  }\n\n  to(index) {\n    this._activeElement = SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element);\n\n    const activeIndex = this._getItemIndex(this._activeElement);\n\n    if (index > this._items.length - 1 || index < 0) {\n      return;\n    }\n\n    if (this._isSliding) {\n      EventHandler.one(this._element, EVENT_SLID, () => this.to(index));\n      return;\n    }\n\n    if (activeIndex === index) {\n      this.pause();\n      this.cycle();\n      return;\n    }\n\n    const order = index > activeIndex ? ORDER_NEXT : ORDER_PREV;\n\n    this._slide(order, this._items[index]);\n  } // Private\n\n\n  _getConfig(config) {\n    config = { ...Default$9,\n      ...Manipulator.getDataAttributes(this._element),\n      ...(typeof config === 'object' ? config : {})\n    };\n    typeCheckConfig(NAME$a, config, DefaultType$9);\n    return config;\n  }\n\n  _handleSwipe() {\n    const absDeltax = Math.abs(this.touchDeltaX);\n\n    if (absDeltax <= SWIPE_THRESHOLD) {\n      return;\n    }\n\n    const direction = absDeltax / this.touchDeltaX;\n    this.touchDeltaX = 0;\n\n    if (!direction) {\n      return;\n    }\n\n    this._slide(direction > 0 ? DIRECTION_RIGHT : DIRECTION_LEFT);\n  }\n\n  _addEventListeners() {\n    if (this._config.keyboard) {\n      EventHandler.on(this._element, EVENT_KEYDOWN, event => this._keydown(event));\n    }\n\n    if (this._config.pause === 'hover') {\n      EventHandler.on(this._element, EVENT_MOUSEENTER, event => this.pause(event));\n      EventHandler.on(this._element, EVENT_MOUSELEAVE, event => this.cycle(event));\n    }\n\n    if (this._config.touch && this._touchSupported) {\n      this._addTouchEventListeners();\n    }\n  }\n\n  _addTouchEventListeners() {\n    const start = event => {\n      if (this._pointerEvent && (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH)) {\n        this.touchStartX = event.clientX;\n      } else if (!this._pointerEvent) {\n        this.touchStartX = event.touches[0].clientX;\n      }\n    };\n\n    const move = event => {\n      // ensure swiping with one touch and not pinching\n      this.touchDeltaX = event.touches && event.touches.length > 1 ? 0 : event.touches[0].clientX - this.touchStartX;\n    };\n\n    const end = event => {\n      if (this._pointerEvent && (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH)) {\n        this.touchDeltaX = event.clientX - this.touchStartX;\n      }\n\n      this._handleSwipe();\n\n      if (this._config.pause === 'hover') {\n        // If it's a touch-enabled device, mouseenter/leave are fired as\n        // part of the mouse compatibility events on first tap - the carousel\n        // would stop cycling until user tapped out of it;\n        // here, we listen for touchend, explicitly pause the carousel\n        // (as if it's the second time we tap on it, mouseenter compat event\n        // is NOT fired) and after a timeout (to allow for mouse compatibility\n        // events to fire) we explicitly restart cycling\n        this.pause();\n\n        if (this.touchTimeout) {\n          clearTimeout(this.touchTimeout);\n        }\n\n        this.touchTimeout = setTimeout(event => this.cycle(event), TOUCHEVENT_COMPAT_WAIT + this._config.interval);\n      }\n    };\n\n    SelectorEngine.find(SELECTOR_ITEM_IMG, this._element).forEach(itemImg => {\n      EventHandler.on(itemImg, EVENT_DRAG_START, e => e.preventDefault());\n    });\n\n    if (this._pointerEvent) {\n      EventHandler.on(this._element, EVENT_POINTERDOWN, event => start(event));\n      EventHandler.on(this._element, EVENT_POINTERUP, event => end(event));\n\n      this._element.classList.add(CLASS_NAME_POINTER_EVENT);\n    } else {\n      EventHandler.on(this._element, EVENT_TOUCHSTART, event => start(event));\n      EventHandler.on(this._element, EVENT_TOUCHMOVE, event => move(event));\n      EventHandler.on(this._element, EVENT_TOUCHEND, event => end(event));\n    }\n  }\n\n  _keydown(event) {\n    if (/input|textarea/i.test(event.target.tagName)) {\n      return;\n    }\n\n    const direction = KEY_TO_DIRECTION[event.key];\n\n    if (direction) {\n      event.preventDefault();\n\n      this._slide(direction);\n    }\n  }\n\n  _getItemIndex(element) {\n    this._items = element && element.parentNode ? SelectorEngine.find(SELECTOR_ITEM, element.parentNode) : [];\n    return this._items.indexOf(element);\n  }\n\n  _getItemByOrder(order, activeElement) {\n    const isNext = order === ORDER_NEXT;\n    return getNextActiveElement(this._items, activeElement, isNext, this._config.wrap);\n  }\n\n  _triggerSlideEvent(relatedTarget, eventDirectionName) {\n    const targetIndex = this._getItemIndex(relatedTarget);\n\n    const fromIndex = this._getItemIndex(SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element));\n\n    return EventHandler.trigger(this._element, EVENT_SLIDE, {\n      relatedTarget,\n      direction: eventDirectionName,\n      from: fromIndex,\n      to: targetIndex\n    });\n  }\n\n  _setActiveIndicatorElement(element) {\n    if (this._indicatorsElement) {\n      const activeIndicator = SelectorEngine.findOne(SELECTOR_ACTIVE$1, this._indicatorsElement);\n      activeIndicator.classList.remove(CLASS_NAME_ACTIVE$2);\n      activeIndicator.removeAttribute('aria-current');\n      const indicators = SelectorEngine.find(SELECTOR_INDICATOR, this._indicatorsElement);\n\n      for (let i = 0; i < indicators.length; i++) {\n        if (Number.parseInt(indicators[i].getAttribute('data-bs-slide-to'), 10) === this._getItemIndex(element)) {\n          indicators[i].classList.add(CLASS_NAME_ACTIVE$2);\n          indicators[i].setAttribute('aria-current', 'true');\n          break;\n        }\n      }\n    }\n  }\n\n  _updateInterval() {\n    const element = this._activeElement || SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element);\n\n    if (!element) {\n      return;\n    }\n\n    const elementInterval = Number.parseInt(element.getAttribute('data-bs-interval'), 10);\n\n    if (elementInterval) {\n      this._config.defaultInterval = this._config.defaultInterval || this._config.interval;\n      this._config.interval = elementInterval;\n    } else {\n      this._config.interval = this._config.defaultInterval || this._config.interval;\n    }\n  }\n\n  _slide(directionOrOrder, element) {\n    const order = this._directionToOrder(directionOrOrder);\n\n    const activeElement = SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element);\n\n    const activeElementIndex = this._getItemIndex(activeElement);\n\n    const nextElement = element || this._getItemByOrder(order, activeElement);\n\n    const nextElementIndex = this._getItemIndex(nextElement);\n\n    const isCycling = Boolean(this._interval);\n    const isNext = order === ORDER_NEXT;\n    const directionalClassName = isNext ? CLASS_NAME_START : CLASS_NAME_END;\n    const orderClassName = isNext ? CLASS_NAME_NEXT : CLASS_NAME_PREV;\n\n    const eventDirectionName = this._orderToDirection(order);\n\n    if (nextElement && nextElement.classList.contains(CLASS_NAME_ACTIVE$2)) {\n      this._isSliding = false;\n      return;\n    }\n\n    if (this._isSliding) {\n      return;\n    }\n\n    const slideEvent = this._triggerSlideEvent(nextElement, eventDirectionName);\n\n    if (slideEvent.defaultPrevented) {\n      return;\n    }\n\n    if (!activeElement || !nextElement) {\n      // Some weirdness is happening, so we bail\n      return;\n    }\n\n    this._isSliding = true;\n\n    if (isCycling) {\n      this.pause();\n    }\n\n    this._setActiveIndicatorElement(nextElement);\n\n    this._activeElement = nextElement;\n\n    const triggerSlidEvent = () => {\n      EventHandler.trigger(this._element, EVENT_SLID, {\n        relatedTarget: nextElement,\n        direction: eventDirectionName,\n        from: activeElementIndex,\n        to: nextElementIndex\n      });\n    };\n\n    if (this._element.classList.contains(CLASS_NAME_SLIDE)) {\n      nextElement.classList.add(orderClassName);\n      reflow(nextElement);\n      activeElement.classList.add(directionalClassName);\n      nextElement.classList.add(directionalClassName);\n\n      const completeCallBack = () => {\n        nextElement.classList.remove(directionalClassName, orderClassName);\n        nextElement.classList.add(CLASS_NAME_ACTIVE$2);\n        activeElement.classList.remove(CLASS_NAME_ACTIVE$2, orderClassName, directionalClassName);\n        this._isSliding = false;\n        setTimeout(triggerSlidEvent, 0);\n      };\n\n      this._queueCallback(completeCallBack, activeElement, true);\n    } else {\n      activeElement.classList.remove(CLASS_NAME_ACTIVE$2);\n      nextElement.classList.add(CLASS_NAME_ACTIVE$2);\n      this._isSliding = false;\n      triggerSlidEvent();\n    }\n\n    if (isCycling) {\n      this.cycle();\n    }\n  }\n\n  _directionToOrder(direction) {\n    if (![DIRECTION_RIGHT, DIRECTION_LEFT].includes(direction)) {\n      return direction;\n    }\n\n    if (isRTL()) {\n      return direction === DIRECTION_LEFT ? ORDER_PREV : ORDER_NEXT;\n    }\n\n    return direction === DIRECTION_LEFT ? ORDER_NEXT : ORDER_PREV;\n  }\n\n  _orderToDirection(order) {\n    if (![ORDER_NEXT, ORDER_PREV].includes(order)) {\n      return order;\n    }\n\n    if (isRTL()) {\n      return order === ORDER_PREV ? DIRECTION_LEFT : DIRECTION_RIGHT;\n    }\n\n    return order === ORDER_PREV ? DIRECTION_RIGHT : DIRECTION_LEFT;\n  } // Static\n\n\n  static carouselInterface(element, config) {\n    const data = Carousel.getOrCreateInstance(element, config);\n    let {\n      _config\n    } = data;\n\n    if (typeof config === 'object') {\n      _config = { ..._config,\n        ...config\n      };\n    }\n\n    const action = typeof config === 'string' ? config : _config.slide;\n\n    if (typeof config === 'number') {\n      data.to(config);\n    } else if (typeof action === 'string') {\n      if (typeof data[action] === 'undefined') {\n        throw new TypeError(`No method named \"${action}\"`);\n      }\n\n      data[action]();\n    } else if (_config.interval && _config.ride) {\n      data.pause();\n      data.cycle();\n    }\n  }\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      Carousel.carouselInterface(this, config);\n    });\n  }\n\n  static dataApiClickHandler(event) {\n    const target = getElementFromSelector(this);\n\n    if (!target || !target.classList.contains(CLASS_NAME_CAROUSEL)) {\n      return;\n    }\n\n    const config = { ...Manipulator.getDataAttributes(target),\n      ...Manipulator.getDataAttributes(this)\n    };\n    const slideIndex = this.getAttribute('data-bs-slide-to');\n\n    if (slideIndex) {\n      config.interval = false;\n    }\n\n    Carousel.carouselInterface(target, config);\n\n    if (slideIndex) {\n      Carousel.getInstance(target).to(slideIndex);\n    }\n\n    event.preventDefault();\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$5, SELECTOR_DATA_SLIDE, Carousel.dataApiClickHandler);\nEventHandler.on(window, EVENT_LOAD_DATA_API$2, () => {\n  const carousels = SelectorEngine.find(SELECTOR_DATA_RIDE);\n\n  for (let i = 0, len = carousels.length; i < len; i++) {\n    Carousel.carouselInterface(carousels[i], Carousel.getInstance(carousels[i]));\n  }\n});\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Carousel to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Carousel);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): collapse.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$9 = 'collapse';\nconst DATA_KEY$8 = 'bs.collapse';\nconst EVENT_KEY$8 = `.${DATA_KEY$8}`;\nconst DATA_API_KEY$5 = '.data-api';\nconst Default$8 = {\n  toggle: true,\n  parent: ''\n};\nconst DefaultType$8 = {\n  toggle: 'boolean',\n  parent: '(string|element)'\n};\nconst EVENT_SHOW$5 = `show${EVENT_KEY$8}`;\nconst EVENT_SHOWN$5 = `shown${EVENT_KEY$8}`;\nconst EVENT_HIDE$5 = `hide${EVENT_KEY$8}`;\nconst EVENT_HIDDEN$5 = `hidden${EVENT_KEY$8}`;\nconst EVENT_CLICK_DATA_API$4 = `click${EVENT_KEY$8}${DATA_API_KEY$5}`;\nconst CLASS_NAME_SHOW$8 = 'show';\nconst CLASS_NAME_COLLAPSE = 'collapse';\nconst CLASS_NAME_COLLAPSING = 'collapsing';\nconst CLASS_NAME_COLLAPSED = 'collapsed';\nconst WIDTH = 'width';\nconst HEIGHT = 'height';\nconst SELECTOR_ACTIVES = '.show, .collapsing';\nconst SELECTOR_DATA_TOGGLE$4 = '[data-bs-toggle=\"collapse\"]';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Collapse extends BaseComponent {\n  constructor(element, config) {\n    super(element);\n    this._isTransitioning = false;\n    this._config = this._getConfig(config);\n    this._triggerArray = SelectorEngine.find(`${SELECTOR_DATA_TOGGLE$4}[href=\"#${this._element.id}\"],` + `${SELECTOR_DATA_TOGGLE$4}[data-bs-target=\"#${this._element.id}\"]`);\n    const toggleList = SelectorEngine.find(SELECTOR_DATA_TOGGLE$4);\n\n    for (let i = 0, len = toggleList.length; i < len; i++) {\n      const elem = toggleList[i];\n      const selector = getSelectorFromElement(elem);\n      const filterElement = SelectorEngine.find(selector).filter(foundElem => foundElem === this._element);\n\n      if (selector !== null && filterElement.length) {\n        this._selector = selector;\n\n        this._triggerArray.push(elem);\n      }\n    }\n\n    this._parent = this._config.parent ? this._getParent() : null;\n\n    if (!this._config.parent) {\n      this._addAriaAndCollapsedClass(this._element, this._triggerArray);\n    }\n\n    if (this._config.toggle) {\n      this.toggle();\n    }\n  } // Getters\n\n\n  static get Default() {\n    return Default$8;\n  }\n\n  static get NAME() {\n    return NAME$9;\n  } // Public\n\n\n  toggle() {\n    if (this._element.classList.contains(CLASS_NAME_SHOW$8)) {\n      this.hide();\n    } else {\n      this.show();\n    }\n  }\n\n  show() {\n    if (this._isTransitioning || this._element.classList.contains(CLASS_NAME_SHOW$8)) {\n      return;\n    }\n\n    let actives;\n    let activesData;\n\n    if (this._parent) {\n      actives = SelectorEngine.find(SELECTOR_ACTIVES, this._parent).filter(elem => {\n        if (typeof this._config.parent === 'string') {\n          return elem.getAttribute('data-bs-parent') === this._config.parent;\n        }\n\n        return elem.classList.contains(CLASS_NAME_COLLAPSE);\n      });\n\n      if (actives.length === 0) {\n        actives = null;\n      }\n    }\n\n    const container = SelectorEngine.findOne(this._selector);\n\n    if (actives) {\n      const tempActiveData = actives.find(elem => container !== elem);\n      activesData = tempActiveData ? Collapse.getInstance(tempActiveData) : null;\n\n      if (activesData && activesData._isTransitioning) {\n        return;\n      }\n    }\n\n    const startEvent = EventHandler.trigger(this._element, EVENT_SHOW$5);\n\n    if (startEvent.defaultPrevented) {\n      return;\n    }\n\n    if (actives) {\n      actives.forEach(elemActive => {\n        if (container !== elemActive) {\n          Collapse.collapseInterface(elemActive, 'hide');\n        }\n\n        if (!activesData) {\n          Data.set(elemActive, DATA_KEY$8, null);\n        }\n      });\n    }\n\n    const dimension = this._getDimension();\n\n    this._element.classList.remove(CLASS_NAME_COLLAPSE);\n\n    this._element.classList.add(CLASS_NAME_COLLAPSING);\n\n    this._element.style[dimension] = 0;\n\n    if (this._triggerArray.length) {\n      this._triggerArray.forEach(element => {\n        element.classList.remove(CLASS_NAME_COLLAPSED);\n        element.setAttribute('aria-expanded', true);\n      });\n    }\n\n    this.setTransitioning(true);\n\n    const complete = () => {\n      this._element.classList.remove(CLASS_NAME_COLLAPSING);\n\n      this._element.classList.add(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$8);\n\n      this._element.style[dimension] = '';\n      this.setTransitioning(false);\n      EventHandler.trigger(this._element, EVENT_SHOWN$5);\n    };\n\n    const capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1);\n    const scrollSize = `scroll${capitalizedDimension}`;\n\n    this._queueCallback(complete, this._element, true);\n\n    this._element.style[dimension] = `${this._element[scrollSize]}px`;\n  }\n\n  hide() {\n    if (this._isTransitioning || !this._element.classList.contains(CLASS_NAME_SHOW$8)) {\n      return;\n    }\n\n    const startEvent = EventHandler.trigger(this._element, EVENT_HIDE$5);\n\n    if (startEvent.defaultPrevented) {\n      return;\n    }\n\n    const dimension = this._getDimension();\n\n    this._element.style[dimension] = `${this._element.getBoundingClientRect()[dimension]}px`;\n    reflow(this._element);\n\n    this._element.classList.add(CLASS_NAME_COLLAPSING);\n\n    this._element.classList.remove(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$8);\n\n    const triggerArrayLength = this._triggerArray.length;\n\n    if (triggerArrayLength > 0) {\n      for (let i = 0; i < triggerArrayLength; i++) {\n        const trigger = this._triggerArray[i];\n        const elem = getElementFromSelector(trigger);\n\n        if (elem && !elem.classList.contains(CLASS_NAME_SHOW$8)) {\n          trigger.classList.add(CLASS_NAME_COLLAPSED);\n          trigger.setAttribute('aria-expanded', false);\n        }\n      }\n    }\n\n    this.setTransitioning(true);\n\n    const complete = () => {\n      this.setTransitioning(false);\n\n      this._element.classList.remove(CLASS_NAME_COLLAPSING);\n\n      this._element.classList.add(CLASS_NAME_COLLAPSE);\n\n      EventHandler.trigger(this._element, EVENT_HIDDEN$5);\n    };\n\n    this._element.style[dimension] = '';\n\n    this._queueCallback(complete, this._element, true);\n  }\n\n  setTransitioning(isTransitioning) {\n    this._isTransitioning = isTransitioning;\n  } // Private\n\n\n  _getConfig(config) {\n    config = { ...Default$8,\n      ...config\n    };\n    config.toggle = Boolean(config.toggle); // Coerce string values\n\n    typeCheckConfig(NAME$9, config, DefaultType$8);\n    return config;\n  }\n\n  _getDimension() {\n    return this._element.classList.contains(WIDTH) ? WIDTH : HEIGHT;\n  }\n\n  _getParent() {\n    let {\n      parent\n    } = this._config;\n    parent = getElement(parent);\n    const selector = `${SELECTOR_DATA_TOGGLE$4}[data-bs-parent=\"${parent}\"]`;\n    SelectorEngine.find(selector, parent).forEach(element => {\n      const selected = getElementFromSelector(element);\n\n      this._addAriaAndCollapsedClass(selected, [element]);\n    });\n    return parent;\n  }\n\n  _addAriaAndCollapsedClass(element, triggerArray) {\n    if (!element || !triggerArray.length) {\n      return;\n    }\n\n    const isOpen = element.classList.contains(CLASS_NAME_SHOW$8);\n    triggerArray.forEach(elem => {\n      if (isOpen) {\n        elem.classList.remove(CLASS_NAME_COLLAPSED);\n      } else {\n        elem.classList.add(CLASS_NAME_COLLAPSED);\n      }\n\n      elem.setAttribute('aria-expanded', isOpen);\n    });\n  } // Static\n\n\n  static collapseInterface(element, config) {\n    let data = Collapse.getInstance(element);\n    const _config = { ...Default$8,\n      ...Manipulator.getDataAttributes(element),\n      ...(typeof config === 'object' && config ? config : {})\n    };\n\n    if (!data && _config.toggle && typeof config === 'string' && /show|hide/.test(config)) {\n      _config.toggle = false;\n    }\n\n    if (!data) {\n      data = new Collapse(element, _config);\n    }\n\n    if (typeof config === 'string') {\n      if (typeof data[config] === 'undefined') {\n        throw new TypeError(`No method named \"${config}\"`);\n      }\n\n      data[config]();\n    }\n  }\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      Collapse.collapseInterface(this, config);\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$4, SELECTOR_DATA_TOGGLE$4, function (event) {\n  // preventDefault only for <a> elements (which change the URL) not inside the collapsible element\n  if (event.target.tagName === 'A' || event.delegateTarget && event.delegateTarget.tagName === 'A') {\n    event.preventDefault();\n  }\n\n  const triggerData = Manipulator.getDataAttributes(this);\n  const selector = getSelectorFromElement(this);\n  const selectorElements = SelectorEngine.find(selector);\n  selectorElements.forEach(element => {\n    const data = Collapse.getInstance(element);\n    let config;\n\n    if (data) {\n      // update parent attribute\n      if (data._parent === null && typeof triggerData.parent === 'string') {\n        data._config.parent = triggerData.parent;\n        data._parent = data._getParent();\n      }\n\n      config = 'toggle';\n    } else {\n      config = triggerData;\n    }\n\n    Collapse.collapseInterface(element, config);\n  });\n});\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Collapse to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Collapse);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): dropdown.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$8 = 'dropdown';\nconst DATA_KEY$7 = 'bs.dropdown';\nconst EVENT_KEY$7 = `.${DATA_KEY$7}`;\nconst DATA_API_KEY$4 = '.data-api';\nconst ESCAPE_KEY$2 = 'Escape';\nconst SPACE_KEY = 'Space';\nconst TAB_KEY = 'Tab';\nconst ARROW_UP_KEY = 'ArrowUp';\nconst ARROW_DOWN_KEY = 'ArrowDown';\nconst RIGHT_MOUSE_BUTTON = 2; // MouseEvent.button value for the secondary button, usually the right button\n\nconst REGEXP_KEYDOWN = new RegExp(`${ARROW_UP_KEY}|${ARROW_DOWN_KEY}|${ESCAPE_KEY$2}`);\nconst EVENT_HIDE$4 = `hide${EVENT_KEY$7}`;\nconst EVENT_HIDDEN$4 = `hidden${EVENT_KEY$7}`;\nconst EVENT_SHOW$4 = `show${EVENT_KEY$7}`;\nconst EVENT_SHOWN$4 = `shown${EVENT_KEY$7}`;\nconst EVENT_CLICK = `click${EVENT_KEY$7}`;\nconst EVENT_CLICK_DATA_API$3 = `click${EVENT_KEY$7}${DATA_API_KEY$4}`;\nconst EVENT_KEYDOWN_DATA_API = `keydown${EVENT_KEY$7}${DATA_API_KEY$4}`;\nconst EVENT_KEYUP_DATA_API = `keyup${EVENT_KEY$7}${DATA_API_KEY$4}`;\nconst CLASS_NAME_SHOW$7 = 'show';\nconst CLASS_NAME_DROPUP = 'dropup';\nconst CLASS_NAME_DROPEND = 'dropend';\nconst CLASS_NAME_DROPSTART = 'dropstart';\nconst CLASS_NAME_NAVBAR = 'navbar';\nconst SELECTOR_DATA_TOGGLE$3 = '[data-bs-toggle=\"dropdown\"]';\nconst SELECTOR_MENU = '.dropdown-menu';\nconst SELECTOR_NAVBAR_NAV = '.navbar-nav';\nconst SELECTOR_VISIBLE_ITEMS = '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)';\nconst PLACEMENT_TOP = isRTL() ? 'top-end' : 'top-start';\nconst PLACEMENT_TOPEND = isRTL() ? 'top-start' : 'top-end';\nconst PLACEMENT_BOTTOM = isRTL() ? 'bottom-end' : 'bottom-start';\nconst PLACEMENT_BOTTOMEND = isRTL() ? 'bottom-start' : 'bottom-end';\nconst PLACEMENT_RIGHT = isRTL() ? 'left-start' : 'right-start';\nconst PLACEMENT_LEFT = isRTL() ? 'right-start' : 'left-start';\nconst Default$7 = {\n  offset: [0, 2],\n  boundary: 'clippingParents',\n  reference: 'toggle',\n  display: 'dynamic',\n  popperConfig: null,\n  autoClose: true\n};\nconst DefaultType$7 = {\n  offset: '(array|string|function)',\n  boundary: '(string|element)',\n  reference: '(string|element|object)',\n  display: 'string',\n  popperConfig: '(null|object|function)',\n  autoClose: '(boolean|string)'\n};\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Dropdown extends BaseComponent {\n  constructor(element, config) {\n    super(element);\n    this._popper = null;\n    this._config = this._getConfig(config);\n    this._menu = this._getMenuElement();\n    this._inNavbar = this._detectNavbar();\n\n    this._addEventListeners();\n  } // Getters\n\n\n  static get Default() {\n    return Default$7;\n  }\n\n  static get DefaultType() {\n    return DefaultType$7;\n  }\n\n  static get NAME() {\n    return NAME$8;\n  } // Public\n\n\n  toggle() {\n    if (isDisabled(this._element)) {\n      return;\n    }\n\n    const isActive = this._element.classList.contains(CLASS_NAME_SHOW$7);\n\n    if (isActive) {\n      this.hide();\n      return;\n    }\n\n    this.show();\n  }\n\n  show() {\n    if (isDisabled(this._element) || this._menu.classList.contains(CLASS_NAME_SHOW$7)) {\n      return;\n    }\n\n    const parent = Dropdown.getParentFromElement(this._element);\n    const relatedTarget = {\n      relatedTarget: this._element\n    };\n    const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$4, relatedTarget);\n\n    if (showEvent.defaultPrevented) {\n      return;\n    } // Totally disable Popper for Dropdowns in Navbar\n\n\n    if (this._inNavbar) {\n      Manipulator.setDataAttribute(this._menu, 'popper', 'none');\n    } else {\n      if (typeof Popper === 'undefined') {\n        throw new TypeError('Bootstrap\\'s dropdowns require Popper (https://popper.js.org)');\n      }\n\n      let referenceElement = this._element;\n\n      if (this._config.reference === 'parent') {\n        referenceElement = parent;\n      } else if (isElement(this._config.reference)) {\n        referenceElement = getElement(this._config.reference);\n      } else if (typeof this._config.reference === 'object') {\n        referenceElement = this._config.reference;\n      }\n\n      const popperConfig = this._getPopperConfig();\n\n      const isDisplayStatic = popperConfig.modifiers.find(modifier => modifier.name === 'applyStyles' && modifier.enabled === false);\n      this._popper = Popper.createPopper(referenceElement, this._menu, popperConfig);\n\n      if (isDisplayStatic) {\n        Manipulator.setDataAttribute(this._menu, 'popper', 'static');\n      }\n    } // If this is a touch-enabled device we add extra\n    // empty mouseover listeners to the body's immediate children;\n    // only needed because of broken event delegation on iOS\n    // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n\n\n    if ('ontouchstart' in document.documentElement && !parent.closest(SELECTOR_NAVBAR_NAV)) {\n      [].concat(...document.body.children).forEach(elem => EventHandler.on(elem, 'mouseover', noop));\n    }\n\n    this._element.focus();\n\n    this._element.setAttribute('aria-expanded', true);\n\n    this._menu.classList.toggle(CLASS_NAME_SHOW$7);\n\n    this._element.classList.toggle(CLASS_NAME_SHOW$7);\n\n    EventHandler.trigger(this._element, EVENT_SHOWN$4, relatedTarget);\n  }\n\n  hide() {\n    if (isDisabled(this._element) || !this._menu.classList.contains(CLASS_NAME_SHOW$7)) {\n      return;\n    }\n\n    const relatedTarget = {\n      relatedTarget: this._element\n    };\n\n    this._completeHide(relatedTarget);\n  }\n\n  dispose() {\n    if (this._popper) {\n      this._popper.destroy();\n    }\n\n    super.dispose();\n  }\n\n  update() {\n    this._inNavbar = this._detectNavbar();\n\n    if (this._popper) {\n      this._popper.update();\n    }\n  } // Private\n\n\n  _addEventListeners() {\n    EventHandler.on(this._element, EVENT_CLICK, event => {\n      event.preventDefault();\n      this.toggle();\n    });\n  }\n\n  _completeHide(relatedTarget) {\n    const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$4, relatedTarget);\n\n    if (hideEvent.defaultPrevented) {\n      return;\n    } // If this is a touch-enabled device we remove the extra\n    // empty mouseover listeners we added for iOS support\n\n\n    if ('ontouchstart' in document.documentElement) {\n      [].concat(...document.body.children).forEach(elem => EventHandler.off(elem, 'mouseover', noop));\n    }\n\n    if (this._popper) {\n      this._popper.destroy();\n    }\n\n    this._menu.classList.remove(CLASS_NAME_SHOW$7);\n\n    this._element.classList.remove(CLASS_NAME_SHOW$7);\n\n    this._element.setAttribute('aria-expanded', 'false');\n\n    Manipulator.removeDataAttribute(this._menu, 'popper');\n    EventHandler.trigger(this._element, EVENT_HIDDEN$4, relatedTarget);\n  }\n\n  _getConfig(config) {\n    config = { ...this.constructor.Default,\n      ...Manipulator.getDataAttributes(this._element),\n      ...config\n    };\n    typeCheckConfig(NAME$8, config, this.constructor.DefaultType);\n\n    if (typeof config.reference === 'object' && !isElement(config.reference) && typeof config.reference.getBoundingClientRect !== 'function') {\n      // Popper virtual elements require a getBoundingClientRect method\n      throw new TypeError(`${NAME$8.toUpperCase()}: Option \"reference\" provided type \"object\" without a required \"getBoundingClientRect\" method.`);\n    }\n\n    return config;\n  }\n\n  _getMenuElement() {\n    return SelectorEngine.next(this._element, SELECTOR_MENU)[0];\n  }\n\n  _getPlacement() {\n    const parentDropdown = this._element.parentNode;\n\n    if (parentDropdown.classList.contains(CLASS_NAME_DROPEND)) {\n      return PLACEMENT_RIGHT;\n    }\n\n    if (parentDropdown.classList.contains(CLASS_NAME_DROPSTART)) {\n      return PLACEMENT_LEFT;\n    } // We need to trim the value because custom properties can also include spaces\n\n\n    const isEnd = getComputedStyle(this._menu).getPropertyValue('--bs-position').trim() === 'end';\n\n    if (parentDropdown.classList.contains(CLASS_NAME_DROPUP)) {\n      return isEnd ? PLACEMENT_TOPEND : PLACEMENT_TOP;\n    }\n\n    return isEnd ? PLACEMENT_BOTTOMEND : PLACEMENT_BOTTOM;\n  }\n\n  _detectNavbar() {\n    return this._element.closest(`.${CLASS_NAME_NAVBAR}`) !== null;\n  }\n\n  _getOffset() {\n    const {\n      offset\n    } = this._config;\n\n    if (typeof offset === 'string') {\n      return offset.split(',').map(val => Number.parseInt(val, 10));\n    }\n\n    if (typeof offset === 'function') {\n      return popperData => offset(popperData, this._element);\n    }\n\n    return offset;\n  }\n\n  _getPopperConfig() {\n    const defaultBsPopperConfig = {\n      placement: this._getPlacement(),\n      modifiers: [{\n        name: 'preventOverflow',\n        options: {\n          boundary: this._config.boundary\n        }\n      }, {\n        name: 'offset',\n        options: {\n          offset: this._getOffset()\n        }\n      }]\n    }; // Disable Popper if we have a static display\n\n    if (this._config.display === 'static') {\n      defaultBsPopperConfig.modifiers = [{\n        name: 'applyStyles',\n        enabled: false\n      }];\n    }\n\n    return { ...defaultBsPopperConfig,\n      ...(typeof this._config.popperConfig === 'function' ? this._config.popperConfig(defaultBsPopperConfig) : this._config.popperConfig)\n    };\n  }\n\n  _selectMenuItem({\n    key,\n    target\n  }) {\n    const items = SelectorEngine.find(SELECTOR_VISIBLE_ITEMS, this._menu).filter(isVisible);\n\n    if (!items.length) {\n      return;\n    } // if target isn't included in items (e.g. when expanding the dropdown)\n    // allow cycling to get the last item in case key equals ARROW_UP_KEY\n\n\n    getNextActiveElement(items, target, key === ARROW_DOWN_KEY, !items.includes(target)).focus();\n  } // Static\n\n\n  static dropdownInterface(element, config) {\n    const data = Dropdown.getOrCreateInstance(element, config);\n\n    if (typeof config === 'string') {\n      if (typeof data[config] === 'undefined') {\n        throw new TypeError(`No method named \"${config}\"`);\n      }\n\n      data[config]();\n    }\n  }\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      Dropdown.dropdownInterface(this, config);\n    });\n  }\n\n  static clearMenus(event) {\n    if (event && (event.button === RIGHT_MOUSE_BUTTON || event.type === 'keyup' && event.key !== TAB_KEY)) {\n      return;\n    }\n\n    const toggles = SelectorEngine.find(SELECTOR_DATA_TOGGLE$3);\n\n    for (let i = 0, len = toggles.length; i < len; i++) {\n      const context = Dropdown.getInstance(toggles[i]);\n\n      if (!context || context._config.autoClose === false) {\n        continue;\n      }\n\n      if (!context._element.classList.contains(CLASS_NAME_SHOW$7)) {\n        continue;\n      }\n\n      const relatedTarget = {\n        relatedTarget: context._element\n      };\n\n      if (event) {\n        const composedPath = event.composedPath();\n        const isMenuTarget = composedPath.includes(context._menu);\n\n        if (composedPath.includes(context._element) || context._config.autoClose === 'inside' && !isMenuTarget || context._config.autoClose === 'outside' && isMenuTarget) {\n          continue;\n        } // Tab navigation through the dropdown menu or events from contained inputs shouldn't close the menu\n\n\n        if (context._menu.contains(event.target) && (event.type === 'keyup' && event.key === TAB_KEY || /input|select|option|textarea|form/i.test(event.target.tagName))) {\n          continue;\n        }\n\n        if (event.type === 'click') {\n          relatedTarget.clickEvent = event;\n        }\n      }\n\n      context._completeHide(relatedTarget);\n    }\n  }\n\n  static getParentFromElement(element) {\n    return getElementFromSelector(element) || element.parentNode;\n  }\n\n  static dataApiKeydownHandler(event) {\n    // If not input/textarea:\n    //  - And not a key in REGEXP_KEYDOWN => not a dropdown command\n    // If input/textarea:\n    //  - If space key => not a dropdown command\n    //  - If key is other than escape\n    //    - If key is not up or down => not a dropdown command\n    //    - If trigger inside the menu => not a dropdown command\n    if (/input|textarea/i.test(event.target.tagName) ? event.key === SPACE_KEY || event.key !== ESCAPE_KEY$2 && (event.key !== ARROW_DOWN_KEY && event.key !== ARROW_UP_KEY || event.target.closest(SELECTOR_MENU)) : !REGEXP_KEYDOWN.test(event.key)) {\n      return;\n    }\n\n    const isActive = this.classList.contains(CLASS_NAME_SHOW$7);\n\n    if (!isActive && event.key === ESCAPE_KEY$2) {\n      return;\n    }\n\n    event.preventDefault();\n    event.stopPropagation();\n\n    if (isDisabled(this)) {\n      return;\n    }\n\n    const getToggleButton = () => this.matches(SELECTOR_DATA_TOGGLE$3) ? this : SelectorEngine.prev(this, SELECTOR_DATA_TOGGLE$3)[0];\n\n    if (event.key === ESCAPE_KEY$2) {\n      getToggleButton().focus();\n      Dropdown.clearMenus();\n      return;\n    }\n\n    if (event.key === ARROW_UP_KEY || event.key === ARROW_DOWN_KEY) {\n      if (!isActive) {\n        getToggleButton().click();\n      }\n\n      Dropdown.getInstance(getToggleButton())._selectMenuItem(event);\n\n      return;\n    }\n\n    if (!isActive || event.key === SPACE_KEY) {\n      Dropdown.clearMenus();\n    }\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_DATA_TOGGLE$3, Dropdown.dataApiKeydownHandler);\nEventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown.dataApiKeydownHandler);\nEventHandler.on(document, EVENT_CLICK_DATA_API$3, Dropdown.clearMenus);\nEventHandler.on(document, EVENT_KEYUP_DATA_API, Dropdown.clearMenus);\nEventHandler.on(document, EVENT_CLICK_DATA_API$3, SELECTOR_DATA_TOGGLE$3, function (event) {\n  event.preventDefault();\n  Dropdown.dropdownInterface(this);\n});\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Dropdown to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Dropdown);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): util/scrollBar.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\nconst SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top';\nconst SELECTOR_STICKY_CONTENT = '.sticky-top';\n\nclass ScrollBarHelper {\n  constructor() {\n    this._element = document.body;\n  }\n\n  getWidth() {\n    // https://developer.mozilla.org/en-US/docs/Web/API/Window/innerWidth#usage_notes\n    const documentWidth = document.documentElement.clientWidth;\n    return Math.abs(window.innerWidth - documentWidth);\n  }\n\n  hide() {\n    const width = this.getWidth();\n\n    this._disableOverFlow(); // give padding to element to balance the hidden scrollbar width\n\n\n    this._setElementAttributes(this._element, 'paddingRight', calculatedValue => calculatedValue + width); // trick: We adjust positive paddingRight and negative marginRight to sticky-top elements to keep showing fullwidth\n\n\n    this._setElementAttributes(SELECTOR_FIXED_CONTENT, 'paddingRight', calculatedValue => calculatedValue + width);\n\n    this._setElementAttributes(SELECTOR_STICKY_CONTENT, 'marginRight', calculatedValue => calculatedValue - width);\n  }\n\n  _disableOverFlow() {\n    this._saveInitialAttribute(this._element, 'overflow');\n\n    this._element.style.overflow = 'hidden';\n  }\n\n  _setElementAttributes(selector, styleProp, callback) {\n    const scrollbarWidth = this.getWidth();\n\n    const manipulationCallBack = element => {\n      if (element !== this._element && window.innerWidth > element.clientWidth + scrollbarWidth) {\n        return;\n      }\n\n      this._saveInitialAttribute(element, styleProp);\n\n      const calculatedValue = window.getComputedStyle(element)[styleProp];\n      element.style[styleProp] = `${callback(Number.parseFloat(calculatedValue))}px`;\n    };\n\n    this._applyManipulationCallback(selector, manipulationCallBack);\n  }\n\n  reset() {\n    this._resetElementAttributes(this._element, 'overflow');\n\n    this._resetElementAttributes(this._element, 'paddingRight');\n\n    this._resetElementAttributes(SELECTOR_FIXED_CONTENT, 'paddingRight');\n\n    this._resetElementAttributes(SELECTOR_STICKY_CONTENT, 'marginRight');\n  }\n\n  _saveInitialAttribute(element, styleProp) {\n    const actualValue = element.style[styleProp];\n\n    if (actualValue) {\n      Manipulator.setDataAttribute(element, styleProp, actualValue);\n    }\n  }\n\n  _resetElementAttributes(selector, styleProp) {\n    const manipulationCallBack = element => {\n      const value = Manipulator.getDataAttribute(element, styleProp);\n\n      if (typeof value === 'undefined') {\n        element.style.removeProperty(styleProp);\n      } else {\n        Manipulator.removeDataAttribute(element, styleProp);\n        element.style[styleProp] = value;\n      }\n    };\n\n    this._applyManipulationCallback(selector, manipulationCallBack);\n  }\n\n  _applyManipulationCallback(selector, callBack) {\n    if (isElement(selector)) {\n      callBack(selector);\n    } else {\n      SelectorEngine.find(selector, this._element).forEach(callBack);\n    }\n  }\n\n  isOverflowing() {\n    return this.getWidth() > 0;\n  }\n\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): util/backdrop.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\nconst Default$6 = {\n  isVisible: true,\n  // if false, we use the backdrop helper without adding any element to the dom\n  isAnimated: false,\n  rootElement: 'body',\n  // give the choice to place backdrop under different elements\n  clickCallback: null\n};\nconst DefaultType$6 = {\n  isVisible: 'boolean',\n  isAnimated: 'boolean',\n  rootElement: '(element|string)',\n  clickCallback: '(function|null)'\n};\nconst NAME$7 = 'backdrop';\nconst CLASS_NAME_BACKDROP = 'modal-backdrop';\nconst CLASS_NAME_FADE$5 = 'fade';\nconst CLASS_NAME_SHOW$6 = 'show';\nconst EVENT_MOUSEDOWN = `mousedown.bs.${NAME$7}`;\n\nclass Backdrop {\n  constructor(config) {\n    this._config = this._getConfig(config);\n    this._isAppended = false;\n    this._element = null;\n  }\n\n  show(callback) {\n    if (!this._config.isVisible) {\n      execute(callback);\n      return;\n    }\n\n    this._append();\n\n    if (this._config.isAnimated) {\n      reflow(this._getElement());\n    }\n\n    this._getElement().classList.add(CLASS_NAME_SHOW$6);\n\n    this._emulateAnimation(() => {\n      execute(callback);\n    });\n  }\n\n  hide(callback) {\n    if (!this._config.isVisible) {\n      execute(callback);\n      return;\n    }\n\n    this._getElement().classList.remove(CLASS_NAME_SHOW$6);\n\n    this._emulateAnimation(() => {\n      this.dispose();\n      execute(callback);\n    });\n  } // Private\n\n\n  _getElement() {\n    if (!this._element) {\n      const backdrop = document.createElement('div');\n      backdrop.className = CLASS_NAME_BACKDROP;\n\n      if (this._config.isAnimated) {\n        backdrop.classList.add(CLASS_NAME_FADE$5);\n      }\n\n      this._element = backdrop;\n    }\n\n    return this._element;\n  }\n\n  _getConfig(config) {\n    config = { ...Default$6,\n      ...(typeof config === 'object' ? config : {})\n    }; // use getElement() with the default \"body\" to get a fresh Element on each instantiation\n\n    config.rootElement = getElement(config.rootElement);\n    typeCheckConfig(NAME$7, config, DefaultType$6);\n    return config;\n  }\n\n  _append() {\n    if (this._isAppended) {\n      return;\n    }\n\n    this._config.rootElement.appendChild(this._getElement());\n\n    EventHandler.on(this._getElement(), EVENT_MOUSEDOWN, () => {\n      execute(this._config.clickCallback);\n    });\n    this._isAppended = true;\n  }\n\n  dispose() {\n    if (!this._isAppended) {\n      return;\n    }\n\n    EventHandler.off(this._element, EVENT_MOUSEDOWN);\n\n    this._element.remove();\n\n    this._isAppended = false;\n  }\n\n  _emulateAnimation(callback) {\n    executeAfterTransition(callback, this._getElement(), this._config.isAnimated);\n  }\n\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): modal.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$6 = 'modal';\nconst DATA_KEY$6 = 'bs.modal';\nconst EVENT_KEY$6 = `.${DATA_KEY$6}`;\nconst DATA_API_KEY$3 = '.data-api';\nconst ESCAPE_KEY$1 = 'Escape';\nconst Default$5 = {\n  backdrop: true,\n  keyboard: true,\n  focus: true\n};\nconst DefaultType$5 = {\n  backdrop: '(boolean|string)',\n  keyboard: 'boolean',\n  focus: 'boolean'\n};\nconst EVENT_HIDE$3 = `hide${EVENT_KEY$6}`;\nconst EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY$6}`;\nconst EVENT_HIDDEN$3 = `hidden${EVENT_KEY$6}`;\nconst EVENT_SHOW$3 = `show${EVENT_KEY$6}`;\nconst EVENT_SHOWN$3 = `shown${EVENT_KEY$6}`;\nconst EVENT_FOCUSIN$2 = `focusin${EVENT_KEY$6}`;\nconst EVENT_RESIZE = `resize${EVENT_KEY$6}`;\nconst EVENT_CLICK_DISMISS$2 = `click.dismiss${EVENT_KEY$6}`;\nconst EVENT_KEYDOWN_DISMISS$1 = `keydown.dismiss${EVENT_KEY$6}`;\nconst EVENT_MOUSEUP_DISMISS = `mouseup.dismiss${EVENT_KEY$6}`;\nconst EVENT_MOUSEDOWN_DISMISS = `mousedown.dismiss${EVENT_KEY$6}`;\nconst EVENT_CLICK_DATA_API$2 = `click${EVENT_KEY$6}${DATA_API_KEY$3}`;\nconst CLASS_NAME_OPEN = 'modal-open';\nconst CLASS_NAME_FADE$4 = 'fade';\nconst CLASS_NAME_SHOW$5 = 'show';\nconst CLASS_NAME_STATIC = 'modal-static';\nconst SELECTOR_DIALOG = '.modal-dialog';\nconst SELECTOR_MODAL_BODY = '.modal-body';\nconst SELECTOR_DATA_TOGGLE$2 = '[data-bs-toggle=\"modal\"]';\nconst SELECTOR_DATA_DISMISS$2 = '[data-bs-dismiss=\"modal\"]';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Modal extends BaseComponent {\n  constructor(element, config) {\n    super(element);\n    this._config = this._getConfig(config);\n    this._dialog = SelectorEngine.findOne(SELECTOR_DIALOG, this._element);\n    this._backdrop = this._initializeBackDrop();\n    this._isShown = false;\n    this._ignoreBackdropClick = false;\n    this._isTransitioning = false;\n    this._scrollBar = new ScrollBarHelper();\n  } // Getters\n\n\n  static get Default() {\n    return Default$5;\n  }\n\n  static get NAME() {\n    return NAME$6;\n  } // Public\n\n\n  toggle(relatedTarget) {\n    return this._isShown ? this.hide() : this.show(relatedTarget);\n  }\n\n  show(relatedTarget) {\n    if (this._isShown || this._isTransitioning) {\n      return;\n    }\n\n    const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$3, {\n      relatedTarget\n    });\n\n    if (showEvent.defaultPrevented) {\n      return;\n    }\n\n    this._isShown = true;\n\n    if (this._isAnimated()) {\n      this._isTransitioning = true;\n    }\n\n    this._scrollBar.hide();\n\n    document.body.classList.add(CLASS_NAME_OPEN);\n\n    this._adjustDialog();\n\n    this._setEscapeEvent();\n\n    this._setResizeEvent();\n\n    EventHandler.on(this._element, EVENT_CLICK_DISMISS$2, SELECTOR_DATA_DISMISS$2, event => this.hide(event));\n    EventHandler.on(this._dialog, EVENT_MOUSEDOWN_DISMISS, () => {\n      EventHandler.one(this._element, EVENT_MOUSEUP_DISMISS, event => {\n        if (event.target === this._element) {\n          this._ignoreBackdropClick = true;\n        }\n      });\n    });\n\n    this._showBackdrop(() => this._showElement(relatedTarget));\n  }\n\n  hide(event) {\n    if (event && ['A', 'AREA'].includes(event.target.tagName)) {\n      event.preventDefault();\n    }\n\n    if (!this._isShown || this._isTransitioning) {\n      return;\n    }\n\n    const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$3);\n\n    if (hideEvent.defaultPrevented) {\n      return;\n    }\n\n    this._isShown = false;\n\n    const isAnimated = this._isAnimated();\n\n    if (isAnimated) {\n      this._isTransitioning = true;\n    }\n\n    this._setEscapeEvent();\n\n    this._setResizeEvent();\n\n    EventHandler.off(document, EVENT_FOCUSIN$2);\n\n    this._element.classList.remove(CLASS_NAME_SHOW$5);\n\n    EventHandler.off(this._element, EVENT_CLICK_DISMISS$2);\n    EventHandler.off(this._dialog, EVENT_MOUSEDOWN_DISMISS);\n\n    this._queueCallback(() => this._hideModal(), this._element, isAnimated);\n  }\n\n  dispose() {\n    [window, this._dialog].forEach(htmlElement => EventHandler.off(htmlElement, EVENT_KEY$6));\n\n    this._backdrop.dispose();\n\n    super.dispose();\n    /**\n     * `document` has 2 events `EVENT_FOCUSIN` and `EVENT_CLICK_DATA_API`\n     * Do not move `document` in `htmlElements` array\n     * It will remove `EVENT_CLICK_DATA_API` event that should remain\n     */\n\n    EventHandler.off(document, EVENT_FOCUSIN$2);\n  }\n\n  handleUpdate() {\n    this._adjustDialog();\n  } // Private\n\n\n  _initializeBackDrop() {\n    return new Backdrop({\n      isVisible: Boolean(this._config.backdrop),\n      // 'static' option will be translated to true, and booleans will keep their value\n      isAnimated: this._isAnimated()\n    });\n  }\n\n  _getConfig(config) {\n    config = { ...Default$5,\n      ...Manipulator.getDataAttributes(this._element),\n      ...(typeof config === 'object' ? config : {})\n    };\n    typeCheckConfig(NAME$6, config, DefaultType$5);\n    return config;\n  }\n\n  _showElement(relatedTarget) {\n    const isAnimated = this._isAnimated();\n\n    const modalBody = SelectorEngine.findOne(SELECTOR_MODAL_BODY, this._dialog);\n\n    if (!this._element.parentNode || this._element.parentNode.nodeType !== Node.ELEMENT_NODE) {\n      // Don't move modal's DOM position\n      document.body.appendChild(this._element);\n    }\n\n    this._element.style.display = 'block';\n\n    this._element.removeAttribute('aria-hidden');\n\n    this._element.setAttribute('aria-modal', true);\n\n    this._element.setAttribute('role', 'dialog');\n\n    this._element.scrollTop = 0;\n\n    if (modalBody) {\n      modalBody.scrollTop = 0;\n    }\n\n    if (isAnimated) {\n      reflow(this._element);\n    }\n\n    this._element.classList.add(CLASS_NAME_SHOW$5);\n\n    if (this._config.focus) {\n      this._enforceFocus();\n    }\n\n    const transitionComplete = () => {\n      if (this._config.focus) {\n        this._element.focus();\n      }\n\n      this._isTransitioning = false;\n      EventHandler.trigger(this._element, EVENT_SHOWN$3, {\n        relatedTarget\n      });\n    };\n\n    this._queueCallback(transitionComplete, this._dialog, isAnimated);\n  }\n\n  _enforceFocus() {\n    EventHandler.off(document, EVENT_FOCUSIN$2); // guard against infinite focus loop\n\n    EventHandler.on(document, EVENT_FOCUSIN$2, event => {\n      if (document !== event.target && this._element !== event.target && !this._element.contains(event.target)) {\n        this._element.focus();\n      }\n    });\n  }\n\n  _setEscapeEvent() {\n    if (this._isShown) {\n      EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS$1, event => {\n        if (this._config.keyboard && event.key === ESCAPE_KEY$1) {\n          event.preventDefault();\n          this.hide();\n        } else if (!this._config.keyboard && event.key === ESCAPE_KEY$1) {\n          this._triggerBackdropTransition();\n        }\n      });\n    } else {\n      EventHandler.off(this._element, EVENT_KEYDOWN_DISMISS$1);\n    }\n  }\n\n  _setResizeEvent() {\n    if (this._isShown) {\n      EventHandler.on(window, EVENT_RESIZE, () => this._adjustDialog());\n    } else {\n      EventHandler.off(window, EVENT_RESIZE);\n    }\n  }\n\n  _hideModal() {\n    this._element.style.display = 'none';\n\n    this._element.setAttribute('aria-hidden', true);\n\n    this._element.removeAttribute('aria-modal');\n\n    this._element.removeAttribute('role');\n\n    this._isTransitioning = false;\n\n    this._backdrop.hide(() => {\n      document.body.classList.remove(CLASS_NAME_OPEN);\n\n      this._resetAdjustments();\n\n      this._scrollBar.reset();\n\n      EventHandler.trigger(this._element, EVENT_HIDDEN$3);\n    });\n  }\n\n  _showBackdrop(callback) {\n    EventHandler.on(this._element, EVENT_CLICK_DISMISS$2, event => {\n      if (this._ignoreBackdropClick) {\n        this._ignoreBackdropClick = false;\n        return;\n      }\n\n      if (event.target !== event.currentTarget) {\n        return;\n      }\n\n      if (this._config.backdrop === true) {\n        this.hide();\n      } else if (this._config.backdrop === 'static') {\n        this._triggerBackdropTransition();\n      }\n    });\n\n    this._backdrop.show(callback);\n  }\n\n  _isAnimated() {\n    return this._element.classList.contains(CLASS_NAME_FADE$4);\n  }\n\n  _triggerBackdropTransition() {\n    const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED);\n\n    if (hideEvent.defaultPrevented) {\n      return;\n    }\n\n    const {\n      classList,\n      scrollHeight,\n      style\n    } = this._element;\n    const isModalOverflowing = scrollHeight > document.documentElement.clientHeight; // return if the following background transition hasn't yet completed\n\n    if (!isModalOverflowing && style.overflowY === 'hidden' || classList.contains(CLASS_NAME_STATIC)) {\n      return;\n    }\n\n    if (!isModalOverflowing) {\n      style.overflowY = 'hidden';\n    }\n\n    classList.add(CLASS_NAME_STATIC);\n\n    this._queueCallback(() => {\n      classList.remove(CLASS_NAME_STATIC);\n\n      if (!isModalOverflowing) {\n        this._queueCallback(() => {\n          style.overflowY = '';\n        }, this._dialog);\n      }\n    }, this._dialog);\n\n    this._element.focus();\n  } // ----------------------------------------------------------------------\n  // the following methods are used to handle overflowing modals\n  // ----------------------------------------------------------------------\n\n\n  _adjustDialog() {\n    const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;\n\n    const scrollbarWidth = this._scrollBar.getWidth();\n\n    const isBodyOverflowing = scrollbarWidth > 0;\n\n    if (!isBodyOverflowing && isModalOverflowing && !isRTL() || isBodyOverflowing && !isModalOverflowing && isRTL()) {\n      this._element.style.paddingLeft = `${scrollbarWidth}px`;\n    }\n\n    if (isBodyOverflowing && !isModalOverflowing && !isRTL() || !isBodyOverflowing && isModalOverflowing && isRTL()) {\n      this._element.style.paddingRight = `${scrollbarWidth}px`;\n    }\n  }\n\n  _resetAdjustments() {\n    this._element.style.paddingLeft = '';\n    this._element.style.paddingRight = '';\n  } // Static\n\n\n  static jQueryInterface(config, relatedTarget) {\n    return this.each(function () {\n      const data = Modal.getOrCreateInstance(this, config);\n\n      if (typeof config !== 'string') {\n        return;\n      }\n\n      if (typeof data[config] === 'undefined') {\n        throw new TypeError(`No method named \"${config}\"`);\n      }\n\n      data[config](relatedTarget);\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$2, SELECTOR_DATA_TOGGLE$2, function (event) {\n  const target = getElementFromSelector(this);\n\n  if (['A', 'AREA'].includes(this.tagName)) {\n    event.preventDefault();\n  }\n\n  EventHandler.one(target, EVENT_SHOW$3, showEvent => {\n    if (showEvent.defaultPrevented) {\n      // only register focus restorer if modal will actually get shown\n      return;\n    }\n\n    EventHandler.one(target, EVENT_HIDDEN$3, () => {\n      if (isVisible(this)) {\n        this.focus();\n      }\n    });\n  });\n  const data = Modal.getOrCreateInstance(target);\n  data.toggle(this);\n});\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Modal to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Modal);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): offcanvas.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$5 = 'offcanvas';\nconst DATA_KEY$5 = 'bs.offcanvas';\nconst EVENT_KEY$5 = `.${DATA_KEY$5}`;\nconst DATA_API_KEY$2 = '.data-api';\nconst EVENT_LOAD_DATA_API$1 = `load${EVENT_KEY$5}${DATA_API_KEY$2}`;\nconst ESCAPE_KEY = 'Escape';\nconst Default$4 = {\n  backdrop: true,\n  keyboard: true,\n  scroll: false\n};\nconst DefaultType$4 = {\n  backdrop: 'boolean',\n  keyboard: 'boolean',\n  scroll: 'boolean'\n};\nconst CLASS_NAME_SHOW$4 = 'show';\nconst OPEN_SELECTOR = '.offcanvas.show';\nconst EVENT_SHOW$2 = `show${EVENT_KEY$5}`;\nconst EVENT_SHOWN$2 = `shown${EVENT_KEY$5}`;\nconst EVENT_HIDE$2 = `hide${EVENT_KEY$5}`;\nconst EVENT_HIDDEN$2 = `hidden${EVENT_KEY$5}`;\nconst EVENT_FOCUSIN$1 = `focusin${EVENT_KEY$5}`;\nconst EVENT_CLICK_DATA_API$1 = `click${EVENT_KEY$5}${DATA_API_KEY$2}`;\nconst EVENT_CLICK_DISMISS$1 = `click.dismiss${EVENT_KEY$5}`;\nconst EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY$5}`;\nconst SELECTOR_DATA_DISMISS$1 = '[data-bs-dismiss=\"offcanvas\"]';\nconst SELECTOR_DATA_TOGGLE$1 = '[data-bs-toggle=\"offcanvas\"]';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Offcanvas extends BaseComponent {\n  constructor(element, config) {\n    super(element);\n    this._config = this._getConfig(config);\n    this._isShown = false;\n    this._backdrop = this._initializeBackDrop();\n\n    this._addEventListeners();\n  } // Getters\n\n\n  static get NAME() {\n    return NAME$5;\n  }\n\n  static get Default() {\n    return Default$4;\n  } // Public\n\n\n  toggle(relatedTarget) {\n    return this._isShown ? this.hide() : this.show(relatedTarget);\n  }\n\n  show(relatedTarget) {\n    if (this._isShown) {\n      return;\n    }\n\n    const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$2, {\n      relatedTarget\n    });\n\n    if (showEvent.defaultPrevented) {\n      return;\n    }\n\n    this._isShown = true;\n    this._element.style.visibility = 'visible';\n\n    this._backdrop.show();\n\n    if (!this._config.scroll) {\n      new ScrollBarHelper().hide();\n\n      this._enforceFocusOnElement(this._element);\n    }\n\n    this._element.removeAttribute('aria-hidden');\n\n    this._element.setAttribute('aria-modal', true);\n\n    this._element.setAttribute('role', 'dialog');\n\n    this._element.classList.add(CLASS_NAME_SHOW$4);\n\n    const completeCallBack = () => {\n      EventHandler.trigger(this._element, EVENT_SHOWN$2, {\n        relatedTarget\n      });\n    };\n\n    this._queueCallback(completeCallBack, this._element, true);\n  }\n\n  hide() {\n    if (!this._isShown) {\n      return;\n    }\n\n    const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$2);\n\n    if (hideEvent.defaultPrevented) {\n      return;\n    }\n\n    EventHandler.off(document, EVENT_FOCUSIN$1);\n\n    this._element.blur();\n\n    this._isShown = false;\n\n    this._element.classList.remove(CLASS_NAME_SHOW$4);\n\n    this._backdrop.hide();\n\n    const completeCallback = () => {\n      this._element.setAttribute('aria-hidden', true);\n\n      this._element.removeAttribute('aria-modal');\n\n      this._element.removeAttribute('role');\n\n      this._element.style.visibility = 'hidden';\n\n      if (!this._config.scroll) {\n        new ScrollBarHelper().reset();\n      }\n\n      EventHandler.trigger(this._element, EVENT_HIDDEN$2);\n    };\n\n    this._queueCallback(completeCallback, this._element, true);\n  }\n\n  dispose() {\n    this._backdrop.dispose();\n\n    super.dispose();\n    EventHandler.off(document, EVENT_FOCUSIN$1);\n  } // Private\n\n\n  _getConfig(config) {\n    config = { ...Default$4,\n      ...Manipulator.getDataAttributes(this._element),\n      ...(typeof config === 'object' ? config : {})\n    };\n    typeCheckConfig(NAME$5, config, DefaultType$4);\n    return config;\n  }\n\n  _initializeBackDrop() {\n    return new Backdrop({\n      isVisible: this._config.backdrop,\n      isAnimated: true,\n      rootElement: this._element.parentNode,\n      clickCallback: () => this.hide()\n    });\n  }\n\n  _enforceFocusOnElement(element) {\n    EventHandler.off(document, EVENT_FOCUSIN$1); // guard against infinite focus loop\n\n    EventHandler.on(document, EVENT_FOCUSIN$1, event => {\n      if (document !== event.target && element !== event.target && !element.contains(event.target)) {\n        element.focus();\n      }\n    });\n    element.focus();\n  }\n\n  _addEventListeners() {\n    EventHandler.on(this._element, EVENT_CLICK_DISMISS$1, SELECTOR_DATA_DISMISS$1, () => this.hide());\n    EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS, event => {\n      if (this._config.keyboard && event.key === ESCAPE_KEY) {\n        this.hide();\n      }\n    });\n  } // Static\n\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Offcanvas.getOrCreateInstance(this, config);\n\n      if (typeof config !== 'string') {\n        return;\n      }\n\n      if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n        throw new TypeError(`No method named \"${config}\"`);\n      }\n\n      data[config](this);\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$1, SELECTOR_DATA_TOGGLE$1, function (event) {\n  const target = getElementFromSelector(this);\n\n  if (['A', 'AREA'].includes(this.tagName)) {\n    event.preventDefault();\n  }\n\n  if (isDisabled(this)) {\n    return;\n  }\n\n  EventHandler.one(target, EVENT_HIDDEN$2, () => {\n    // focus on trigger when it is closed\n    if (isVisible(this)) {\n      this.focus();\n    }\n  }); // avoid conflict when clicking a toggler of an offcanvas, while another is open\n\n  const allReadyOpen = SelectorEngine.findOne(OPEN_SELECTOR);\n\n  if (allReadyOpen && allReadyOpen !== target) {\n    Offcanvas.getInstance(allReadyOpen).hide();\n  }\n\n  const data = Offcanvas.getOrCreateInstance(target);\n  data.toggle(this);\n});\nEventHandler.on(window, EVENT_LOAD_DATA_API$1, () => SelectorEngine.find(OPEN_SELECTOR).forEach(el => Offcanvas.getOrCreateInstance(el).show()));\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\ndefineJQueryPlugin(Offcanvas);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): util/sanitizer.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\nconst uriAttrs = new Set(['background', 'cite', 'href', 'itemtype', 'longdesc', 'poster', 'src', 'xlink:href']);\nconst ARIA_ATTRIBUTE_PATTERN = /^aria-[\\w-]*$/i;\n/**\n * A pattern that recognizes a commonly useful subset of URLs that are safe.\n *\n * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts\n */\n\nconst SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file):|[^#&/:?]*(?:[#/?]|$))/i;\n/**\n * A pattern that matches safe data URLs. Only matches image, video and audio types.\n *\n * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts\n */\n\nconst DATA_URL_PATTERN = /^data:(?:image\\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\\/(?:mpeg|mp4|ogg|webm)|audio\\/(?:mp3|oga|ogg|opus));base64,[\\d+/a-z]+=*$/i;\n\nconst allowedAttribute = (attr, allowedAttributeList) => {\n  const attrName = attr.nodeName.toLowerCase();\n\n  if (allowedAttributeList.includes(attrName)) {\n    if (uriAttrs.has(attrName)) {\n      return Boolean(SAFE_URL_PATTERN.test(attr.nodeValue) || DATA_URL_PATTERN.test(attr.nodeValue));\n    }\n\n    return true;\n  }\n\n  const regExp = allowedAttributeList.filter(attrRegex => attrRegex instanceof RegExp); // Check if a regular expression validates the attribute.\n\n  for (let i = 0, len = regExp.length; i < len; i++) {\n    if (regExp[i].test(attrName)) {\n      return true;\n    }\n  }\n\n  return false;\n};\n\nconst DefaultAllowlist = {\n  // Global attributes allowed on any supplied element below.\n  '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],\n  a: ['target', 'href', 'title', 'rel'],\n  area: [],\n  b: [],\n  br: [],\n  col: [],\n  code: [],\n  div: [],\n  em: [],\n  hr: [],\n  h1: [],\n  h2: [],\n  h3: [],\n  h4: [],\n  h5: [],\n  h6: [],\n  i: [],\n  img: ['src', 'srcset', 'alt', 'title', 'width', 'height'],\n  li: [],\n  ol: [],\n  p: [],\n  pre: [],\n  s: [],\n  small: [],\n  span: [],\n  sub: [],\n  sup: [],\n  strong: [],\n  u: [],\n  ul: []\n};\nfunction sanitizeHtml(unsafeHtml, allowList, sanitizeFn) {\n  if (!unsafeHtml.length) {\n    return unsafeHtml;\n  }\n\n  if (sanitizeFn && typeof sanitizeFn === 'function') {\n    return sanitizeFn(unsafeHtml);\n  }\n\n  const domParser = new window.DOMParser();\n  const createdDocument = domParser.parseFromString(unsafeHtml, 'text/html');\n  const allowlistKeys = Object.keys(allowList);\n  const elements = [].concat(...createdDocument.body.querySelectorAll('*'));\n\n  for (let i = 0, len = elements.length; i < len; i++) {\n    const el = elements[i];\n    const elName = el.nodeName.toLowerCase();\n\n    if (!allowlistKeys.includes(elName)) {\n      el.remove();\n      continue;\n    }\n\n    const attributeList = [].concat(...el.attributes);\n    const allowedAttributes = [].concat(allowList['*'] || [], allowList[elName] || []);\n    attributeList.forEach(attr => {\n      if (!allowedAttribute(attr, allowedAttributes)) {\n        el.removeAttribute(attr.nodeName);\n      }\n    });\n  }\n\n  return createdDocument.body.innerHTML;\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): tooltip.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$4 = 'tooltip';\nconst DATA_KEY$4 = 'bs.tooltip';\nconst EVENT_KEY$4 = `.${DATA_KEY$4}`;\nconst CLASS_PREFIX$1 = 'bs-tooltip';\nconst BSCLS_PREFIX_REGEX$1 = new RegExp(`(^|\\\\s)${CLASS_PREFIX$1}\\\\S+`, 'g');\nconst DISALLOWED_ATTRIBUTES = new Set(['sanitize', 'allowList', 'sanitizeFn']);\nconst DefaultType$3 = {\n  animation: 'boolean',\n  template: 'string',\n  title: '(string|element|function)',\n  trigger: 'string',\n  delay: '(number|object)',\n  html: 'boolean',\n  selector: '(string|boolean)',\n  placement: '(string|function)',\n  offset: '(array|string|function)',\n  container: '(string|element|boolean)',\n  fallbackPlacements: 'array',\n  boundary: '(string|element)',\n  customClass: '(string|function)',\n  sanitize: 'boolean',\n  sanitizeFn: '(null|function)',\n  allowList: 'object',\n  popperConfig: '(null|object|function)'\n};\nconst AttachmentMap = {\n  AUTO: 'auto',\n  TOP: 'top',\n  RIGHT: isRTL() ? 'left' : 'right',\n  BOTTOM: 'bottom',\n  LEFT: isRTL() ? 'right' : 'left'\n};\nconst Default$3 = {\n  animation: true,\n  template: '<div class=\"tooltip\" role=\"tooltip\">' + '<div class=\"tooltip-arrow\"></div>' + '<div class=\"tooltip-inner\"></div>' + '</div>',\n  trigger: 'hover focus',\n  title: '',\n  delay: 0,\n  html: false,\n  selector: false,\n  placement: 'top',\n  offset: [0, 0],\n  container: false,\n  fallbackPlacements: ['top', 'right', 'bottom', 'left'],\n  boundary: 'clippingParents',\n  customClass: '',\n  sanitize: true,\n  sanitizeFn: null,\n  allowList: DefaultAllowlist,\n  popperConfig: null\n};\nconst Event$2 = {\n  HIDE: `hide${EVENT_KEY$4}`,\n  HIDDEN: `hidden${EVENT_KEY$4}`,\n  SHOW: `show${EVENT_KEY$4}`,\n  SHOWN: `shown${EVENT_KEY$4}`,\n  INSERTED: `inserted${EVENT_KEY$4}`,\n  CLICK: `click${EVENT_KEY$4}`,\n  FOCUSIN: `focusin${EVENT_KEY$4}`,\n  FOCUSOUT: `focusout${EVENT_KEY$4}`,\n  MOUSEENTER: `mouseenter${EVENT_KEY$4}`,\n  MOUSELEAVE: `mouseleave${EVENT_KEY$4}`\n};\nconst CLASS_NAME_FADE$3 = 'fade';\nconst CLASS_NAME_MODAL = 'modal';\nconst CLASS_NAME_SHOW$3 = 'show';\nconst HOVER_STATE_SHOW = 'show';\nconst HOVER_STATE_OUT = 'out';\nconst SELECTOR_TOOLTIP_INNER = '.tooltip-inner';\nconst TRIGGER_HOVER = 'hover';\nconst TRIGGER_FOCUS = 'focus';\nconst TRIGGER_CLICK = 'click';\nconst TRIGGER_MANUAL = 'manual';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Tooltip extends BaseComponent {\n  constructor(element, config) {\n    if (typeof Popper === 'undefined') {\n      throw new TypeError('Bootstrap\\'s tooltips require Popper (https://popper.js.org)');\n    }\n\n    super(element); // private\n\n    this._isEnabled = true;\n    this._timeout = 0;\n    this._hoverState = '';\n    this._activeTrigger = {};\n    this._popper = null; // Protected\n\n    this._config = this._getConfig(config);\n    this.tip = null;\n\n    this._setListeners();\n  } // Getters\n\n\n  static get Default() {\n    return Default$3;\n  }\n\n  static get NAME() {\n    return NAME$4;\n  }\n\n  static get Event() {\n    return Event$2;\n  }\n\n  static get DefaultType() {\n    return DefaultType$3;\n  } // Public\n\n\n  enable() {\n    this._isEnabled = true;\n  }\n\n  disable() {\n    this._isEnabled = false;\n  }\n\n  toggleEnabled() {\n    this._isEnabled = !this._isEnabled;\n  }\n\n  toggle(event) {\n    if (!this._isEnabled) {\n      return;\n    }\n\n    if (event) {\n      const context = this._initializeOnDelegatedTarget(event);\n\n      context._activeTrigger.click = !context._activeTrigger.click;\n\n      if (context._isWithActiveTrigger()) {\n        context._enter(null, context);\n      } else {\n        context._leave(null, context);\n      }\n    } else {\n      if (this.getTipElement().classList.contains(CLASS_NAME_SHOW$3)) {\n        this._leave(null, this);\n\n        return;\n      }\n\n      this._enter(null, this);\n    }\n  }\n\n  dispose() {\n    clearTimeout(this._timeout);\n    EventHandler.off(this._element.closest(`.${CLASS_NAME_MODAL}`), 'hide.bs.modal', this._hideModalHandler);\n\n    if (this.tip) {\n      this.tip.remove();\n    }\n\n    if (this._popper) {\n      this._popper.destroy();\n    }\n\n    super.dispose();\n  }\n\n  show() {\n    if (this._element.style.display === 'none') {\n      throw new Error('Please use show on visible elements');\n    }\n\n    if (!(this.isWithContent() && this._isEnabled)) {\n      return;\n    }\n\n    const showEvent = EventHandler.trigger(this._element, this.constructor.Event.SHOW);\n    const shadowRoot = findShadowRoot(this._element);\n    const isInTheDom = shadowRoot === null ? this._element.ownerDocument.documentElement.contains(this._element) : shadowRoot.contains(this._element);\n\n    if (showEvent.defaultPrevented || !isInTheDom) {\n      return;\n    }\n\n    const tip = this.getTipElement();\n    const tipId = getUID(this.constructor.NAME);\n    tip.setAttribute('id', tipId);\n\n    this._element.setAttribute('aria-describedby', tipId);\n\n    this.setContent();\n\n    if (this._config.animation) {\n      tip.classList.add(CLASS_NAME_FADE$3);\n    }\n\n    const placement = typeof this._config.placement === 'function' ? this._config.placement.call(this, tip, this._element) : this._config.placement;\n\n    const attachment = this._getAttachment(placement);\n\n    this._addAttachmentClass(attachment);\n\n    const {\n      container\n    } = this._config;\n    Data.set(tip, this.constructor.DATA_KEY, this);\n\n    if (!this._element.ownerDocument.documentElement.contains(this.tip)) {\n      container.appendChild(tip);\n      EventHandler.trigger(this._element, this.constructor.Event.INSERTED);\n    }\n\n    if (this._popper) {\n      this._popper.update();\n    } else {\n      this._popper = Popper.createPopper(this._element, tip, this._getPopperConfig(attachment));\n    }\n\n    tip.classList.add(CLASS_NAME_SHOW$3);\n    const customClass = typeof this._config.customClass === 'function' ? this._config.customClass() : this._config.customClass;\n\n    if (customClass) {\n      tip.classList.add(...customClass.split(' '));\n    } // If this is a touch-enabled device we add extra\n    // empty mouseover listeners to the body's immediate children;\n    // only needed because of broken event delegation on iOS\n    // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n\n\n    if ('ontouchstart' in document.documentElement) {\n      [].concat(...document.body.children).forEach(element => {\n        EventHandler.on(element, 'mouseover', noop);\n      });\n    }\n\n    const complete = () => {\n      const prevHoverState = this._hoverState;\n      this._hoverState = null;\n      EventHandler.trigger(this._element, this.constructor.Event.SHOWN);\n\n      if (prevHoverState === HOVER_STATE_OUT) {\n        this._leave(null, this);\n      }\n    };\n\n    const isAnimated = this.tip.classList.contains(CLASS_NAME_FADE$3);\n\n    this._queueCallback(complete, this.tip, isAnimated);\n  }\n\n  hide() {\n    if (!this._popper) {\n      return;\n    }\n\n    const tip = this.getTipElement();\n\n    const complete = () => {\n      if (this._isWithActiveTrigger()) {\n        return;\n      }\n\n      if (this._hoverState !== HOVER_STATE_SHOW) {\n        tip.remove();\n      }\n\n      this._cleanTipClass();\n\n      this._element.removeAttribute('aria-describedby');\n\n      EventHandler.trigger(this._element, this.constructor.Event.HIDDEN);\n\n      if (this._popper) {\n        this._popper.destroy();\n\n        this._popper = null;\n      }\n    };\n\n    const hideEvent = EventHandler.trigger(this._element, this.constructor.Event.HIDE);\n\n    if (hideEvent.defaultPrevented) {\n      return;\n    }\n\n    tip.classList.remove(CLASS_NAME_SHOW$3); // If this is a touch-enabled device we remove the extra\n    // empty mouseover listeners we added for iOS support\n\n    if ('ontouchstart' in document.documentElement) {\n      [].concat(...document.body.children).forEach(element => EventHandler.off(element, 'mouseover', noop));\n    }\n\n    this._activeTrigger[TRIGGER_CLICK] = false;\n    this._activeTrigger[TRIGGER_FOCUS] = false;\n    this._activeTrigger[TRIGGER_HOVER] = false;\n    const isAnimated = this.tip.classList.contains(CLASS_NAME_FADE$3);\n\n    this._queueCallback(complete, this.tip, isAnimated);\n\n    this._hoverState = '';\n  }\n\n  update() {\n    if (this._popper !== null) {\n      this._popper.update();\n    }\n  } // Protected\n\n\n  isWithContent() {\n    return Boolean(this.getTitle());\n  }\n\n  getTipElement() {\n    if (this.tip) {\n      return this.tip;\n    }\n\n    const element = document.createElement('div');\n    element.innerHTML = this._config.template;\n    this.tip = element.children[0];\n    return this.tip;\n  }\n\n  setContent() {\n    const tip = this.getTipElement();\n    this.setElementContent(SelectorEngine.findOne(SELECTOR_TOOLTIP_INNER, tip), this.getTitle());\n    tip.classList.remove(CLASS_NAME_FADE$3, CLASS_NAME_SHOW$3);\n  }\n\n  setElementContent(element, content) {\n    if (element === null) {\n      return;\n    }\n\n    if (isElement(content)) {\n      content = getElement(content); // content is a DOM node or a jQuery\n\n      if (this._config.html) {\n        if (content.parentNode !== element) {\n          element.innerHTML = '';\n          element.appendChild(content);\n        }\n      } else {\n        element.textContent = content.textContent;\n      }\n\n      return;\n    }\n\n    if (this._config.html) {\n      if (this._config.sanitize) {\n        content = sanitizeHtml(content, this._config.allowList, this._config.sanitizeFn);\n      }\n\n      element.innerHTML = content;\n    } else {\n      element.textContent = content;\n    }\n  }\n\n  getTitle() {\n    let title = this._element.getAttribute('data-bs-original-title');\n\n    if (!title) {\n      title = typeof this._config.title === 'function' ? this._config.title.call(this._element) : this._config.title;\n    }\n\n    return title;\n  }\n\n  updateAttachment(attachment) {\n    if (attachment === 'right') {\n      return 'end';\n    }\n\n    if (attachment === 'left') {\n      return 'start';\n    }\n\n    return attachment;\n  } // Private\n\n\n  _initializeOnDelegatedTarget(event, context) {\n    const dataKey = this.constructor.DATA_KEY;\n    context = context || Data.get(event.delegateTarget, dataKey);\n\n    if (!context) {\n      context = new this.constructor(event.delegateTarget, this._getDelegateConfig());\n      Data.set(event.delegateTarget, dataKey, context);\n    }\n\n    return context;\n  }\n\n  _getOffset() {\n    const {\n      offset\n    } = this._config;\n\n    if (typeof offset === 'string') {\n      return offset.split(',').map(val => Number.parseInt(val, 10));\n    }\n\n    if (typeof offset === 'function') {\n      return popperData => offset(popperData, this._element);\n    }\n\n    return offset;\n  }\n\n  _getPopperConfig(attachment) {\n    const defaultBsPopperConfig = {\n      placement: attachment,\n      modifiers: [{\n        name: 'flip',\n        options: {\n          fallbackPlacements: this._config.fallbackPlacements\n        }\n      }, {\n        name: 'offset',\n        options: {\n          offset: this._getOffset()\n        }\n      }, {\n        name: 'preventOverflow',\n        options: {\n          boundary: this._config.boundary\n        }\n      }, {\n        name: 'arrow',\n        options: {\n          element: `.${this.constructor.NAME}-arrow`\n        }\n      }, {\n        name: 'onChange',\n        enabled: true,\n        phase: 'afterWrite',\n        fn: data => this._handlePopperPlacementChange(data)\n      }],\n      onFirstUpdate: data => {\n        if (data.options.placement !== data.placement) {\n          this._handlePopperPlacementChange(data);\n        }\n      }\n    };\n    return { ...defaultBsPopperConfig,\n      ...(typeof this._config.popperConfig === 'function' ? this._config.popperConfig(defaultBsPopperConfig) : this._config.popperConfig)\n    };\n  }\n\n  _addAttachmentClass(attachment) {\n    this.getTipElement().classList.add(`${CLASS_PREFIX$1}-${this.updateAttachment(attachment)}`);\n  }\n\n  _getAttachment(placement) {\n    return AttachmentMap[placement.toUpperCase()];\n  }\n\n  _setListeners() {\n    const triggers = this._config.trigger.split(' ');\n\n    triggers.forEach(trigger => {\n      if (trigger === 'click') {\n        EventHandler.on(this._element, this.constructor.Event.CLICK, this._config.selector, event => this.toggle(event));\n      } else if (trigger !== TRIGGER_MANUAL) {\n        const eventIn = trigger === TRIGGER_HOVER ? this.constructor.Event.MOUSEENTER : this.constructor.Event.FOCUSIN;\n        const eventOut = trigger === TRIGGER_HOVER ? this.constructor.Event.MOUSELEAVE : this.constructor.Event.FOCUSOUT;\n        EventHandler.on(this._element, eventIn, this._config.selector, event => this._enter(event));\n        EventHandler.on(this._element, eventOut, this._config.selector, event => this._leave(event));\n      }\n    });\n\n    this._hideModalHandler = () => {\n      if (this._element) {\n        this.hide();\n      }\n    };\n\n    EventHandler.on(this._element.closest(`.${CLASS_NAME_MODAL}`), 'hide.bs.modal', this._hideModalHandler);\n\n    if (this._config.selector) {\n      this._config = { ...this._config,\n        trigger: 'manual',\n        selector: ''\n      };\n    } else {\n      this._fixTitle();\n    }\n  }\n\n  _fixTitle() {\n    const title = this._element.getAttribute('title');\n\n    const originalTitleType = typeof this._element.getAttribute('data-bs-original-title');\n\n    if (title || originalTitleType !== 'string') {\n      this._element.setAttribute('data-bs-original-title', title || '');\n\n      if (title && !this._element.getAttribute('aria-label') && !this._element.textContent) {\n        this._element.setAttribute('aria-label', title);\n      }\n\n      this._element.setAttribute('title', '');\n    }\n  }\n\n  _enter(event, context) {\n    context = this._initializeOnDelegatedTarget(event, context);\n\n    if (event) {\n      context._activeTrigger[event.type === 'focusin' ? TRIGGER_FOCUS : TRIGGER_HOVER] = true;\n    }\n\n    if (context.getTipElement().classList.contains(CLASS_NAME_SHOW$3) || context._hoverState === HOVER_STATE_SHOW) {\n      context._hoverState = HOVER_STATE_SHOW;\n      return;\n    }\n\n    clearTimeout(context._timeout);\n    context._hoverState = HOVER_STATE_SHOW;\n\n    if (!context._config.delay || !context._config.delay.show) {\n      context.show();\n      return;\n    }\n\n    context._timeout = setTimeout(() => {\n      if (context._hoverState === HOVER_STATE_SHOW) {\n        context.show();\n      }\n    }, context._config.delay.show);\n  }\n\n  _leave(event, context) {\n    context = this._initializeOnDelegatedTarget(event, context);\n\n    if (event) {\n      context._activeTrigger[event.type === 'focusout' ? TRIGGER_FOCUS : TRIGGER_HOVER] = context._element.contains(event.relatedTarget);\n    }\n\n    if (context._isWithActiveTrigger()) {\n      return;\n    }\n\n    clearTimeout(context._timeout);\n    context._hoverState = HOVER_STATE_OUT;\n\n    if (!context._config.delay || !context._config.delay.hide) {\n      context.hide();\n      return;\n    }\n\n    context._timeout = setTimeout(() => {\n      if (context._hoverState === HOVER_STATE_OUT) {\n        context.hide();\n      }\n    }, context._config.delay.hide);\n  }\n\n  _isWithActiveTrigger() {\n    for (const trigger in this._activeTrigger) {\n      if (this._activeTrigger[trigger]) {\n        return true;\n      }\n    }\n\n    return false;\n  }\n\n  _getConfig(config) {\n    const dataAttributes = Manipulator.getDataAttributes(this._element);\n    Object.keys(dataAttributes).forEach(dataAttr => {\n      if (DISALLOWED_ATTRIBUTES.has(dataAttr)) {\n        delete dataAttributes[dataAttr];\n      }\n    });\n    config = { ...this.constructor.Default,\n      ...dataAttributes,\n      ...(typeof config === 'object' && config ? config : {})\n    };\n    config.container = config.container === false ? document.body : getElement(config.container);\n\n    if (typeof config.delay === 'number') {\n      config.delay = {\n        show: config.delay,\n        hide: config.delay\n      };\n    }\n\n    if (typeof config.title === 'number') {\n      config.title = config.title.toString();\n    }\n\n    if (typeof config.content === 'number') {\n      config.content = config.content.toString();\n    }\n\n    typeCheckConfig(NAME$4, config, this.constructor.DefaultType);\n\n    if (config.sanitize) {\n      config.template = sanitizeHtml(config.template, config.allowList, config.sanitizeFn);\n    }\n\n    return config;\n  }\n\n  _getDelegateConfig() {\n    const config = {};\n\n    if (this._config) {\n      for (const key in this._config) {\n        if (this.constructor.Default[key] !== this._config[key]) {\n          config[key] = this._config[key];\n        }\n      }\n    }\n\n    return config;\n  }\n\n  _cleanTipClass() {\n    const tip = this.getTipElement();\n    const tabClass = tip.getAttribute('class').match(BSCLS_PREFIX_REGEX$1);\n\n    if (tabClass !== null && tabClass.length > 0) {\n      tabClass.map(token => token.trim()).forEach(tClass => tip.classList.remove(tClass));\n    }\n  }\n\n  _handlePopperPlacementChange(popperData) {\n    const {\n      state\n    } = popperData;\n\n    if (!state) {\n      return;\n    }\n\n    this.tip = state.elements.popper;\n\n    this._cleanTipClass();\n\n    this._addAttachmentClass(this._getAttachment(state.placement));\n  } // Static\n\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Tooltip.getOrCreateInstance(this, config);\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config]();\n      }\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Tooltip to jQuery only if jQuery is present\n */\n\n\ndefineJQueryPlugin(Tooltip);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): popover.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$3 = 'popover';\nconst DATA_KEY$3 = 'bs.popover';\nconst EVENT_KEY$3 = `.${DATA_KEY$3}`;\nconst CLASS_PREFIX = 'bs-popover';\nconst BSCLS_PREFIX_REGEX = new RegExp(`(^|\\\\s)${CLASS_PREFIX}\\\\S+`, 'g');\nconst Default$2 = { ...Tooltip.Default,\n  placement: 'right',\n  offset: [0, 8],\n  trigger: 'click',\n  content: '',\n  template: '<div class=\"popover\" role=\"tooltip\">' + '<div class=\"popover-arrow\"></div>' + '<h3 class=\"popover-header\"></h3>' + '<div class=\"popover-body\"></div>' + '</div>'\n};\nconst DefaultType$2 = { ...Tooltip.DefaultType,\n  content: '(string|element|function)'\n};\nconst Event$1 = {\n  HIDE: `hide${EVENT_KEY$3}`,\n  HIDDEN: `hidden${EVENT_KEY$3}`,\n  SHOW: `show${EVENT_KEY$3}`,\n  SHOWN: `shown${EVENT_KEY$3}`,\n  INSERTED: `inserted${EVENT_KEY$3}`,\n  CLICK: `click${EVENT_KEY$3}`,\n  FOCUSIN: `focusin${EVENT_KEY$3}`,\n  FOCUSOUT: `focusout${EVENT_KEY$3}`,\n  MOUSEENTER: `mouseenter${EVENT_KEY$3}`,\n  MOUSELEAVE: `mouseleave${EVENT_KEY$3}`\n};\nconst CLASS_NAME_FADE$2 = 'fade';\nconst CLASS_NAME_SHOW$2 = 'show';\nconst SELECTOR_TITLE = '.popover-header';\nconst SELECTOR_CONTENT = '.popover-body';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Popover extends Tooltip {\n  // Getters\n  static get Default() {\n    return Default$2;\n  }\n\n  static get NAME() {\n    return NAME$3;\n  }\n\n  static get Event() {\n    return Event$1;\n  }\n\n  static get DefaultType() {\n    return DefaultType$2;\n  } // Overrides\n\n\n  isWithContent() {\n    return this.getTitle() || this._getContent();\n  }\n\n  getTipElement() {\n    if (this.tip) {\n      return this.tip;\n    }\n\n    this.tip = super.getTipElement();\n\n    if (!this.getTitle()) {\n      SelectorEngine.findOne(SELECTOR_TITLE, this.tip).remove();\n    }\n\n    if (!this._getContent()) {\n      SelectorEngine.findOne(SELECTOR_CONTENT, this.tip).remove();\n    }\n\n    return this.tip;\n  }\n\n  setContent() {\n    const tip = this.getTipElement(); // we use append for html objects to maintain js events\n\n    this.setElementContent(SelectorEngine.findOne(SELECTOR_TITLE, tip), this.getTitle());\n\n    let content = this._getContent();\n\n    if (typeof content === 'function') {\n      content = content.call(this._element);\n    }\n\n    this.setElementContent(SelectorEngine.findOne(SELECTOR_CONTENT, tip), content);\n    tip.classList.remove(CLASS_NAME_FADE$2, CLASS_NAME_SHOW$2);\n  } // Private\n\n\n  _addAttachmentClass(attachment) {\n    this.getTipElement().classList.add(`${CLASS_PREFIX}-${this.updateAttachment(attachment)}`);\n  }\n\n  _getContent() {\n    return this._element.getAttribute('data-bs-content') || this._config.content;\n  }\n\n  _cleanTipClass() {\n    const tip = this.getTipElement();\n    const tabClass = tip.getAttribute('class').match(BSCLS_PREFIX_REGEX);\n\n    if (tabClass !== null && tabClass.length > 0) {\n      tabClass.map(token => token.trim()).forEach(tClass => tip.classList.remove(tClass));\n    }\n  } // Static\n\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Popover.getOrCreateInstance(this, config);\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config]();\n      }\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Popover to jQuery only if jQuery is present\n */\n\n\ndefineJQueryPlugin(Popover);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): scrollspy.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$2 = 'scrollspy';\nconst DATA_KEY$2 = 'bs.scrollspy';\nconst EVENT_KEY$2 = `.${DATA_KEY$2}`;\nconst DATA_API_KEY$1 = '.data-api';\nconst Default$1 = {\n  offset: 10,\n  method: 'auto',\n  target: ''\n};\nconst DefaultType$1 = {\n  offset: 'number',\n  method: 'string',\n  target: '(string|element)'\n};\nconst EVENT_ACTIVATE = `activate${EVENT_KEY$2}`;\nconst EVENT_SCROLL = `scroll${EVENT_KEY$2}`;\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY$2}${DATA_API_KEY$1}`;\nconst CLASS_NAME_DROPDOWN_ITEM = 'dropdown-item';\nconst CLASS_NAME_ACTIVE$1 = 'active';\nconst SELECTOR_DATA_SPY = '[data-bs-spy=\"scroll\"]';\nconst SELECTOR_NAV_LIST_GROUP$1 = '.nav, .list-group';\nconst SELECTOR_NAV_LINKS = '.nav-link';\nconst SELECTOR_NAV_ITEMS = '.nav-item';\nconst SELECTOR_LIST_ITEMS = '.list-group-item';\nconst SELECTOR_DROPDOWN$1 = '.dropdown';\nconst SELECTOR_DROPDOWN_TOGGLE$1 = '.dropdown-toggle';\nconst METHOD_OFFSET = 'offset';\nconst METHOD_POSITION = 'position';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass ScrollSpy extends BaseComponent {\n  constructor(element, config) {\n    super(element);\n    this._scrollElement = this._element.tagName === 'BODY' ? window : this._element;\n    this._config = this._getConfig(config);\n    this._selector = `${this._config.target} ${SELECTOR_NAV_LINKS}, ${this._config.target} ${SELECTOR_LIST_ITEMS}, ${this._config.target} .${CLASS_NAME_DROPDOWN_ITEM}`;\n    this._offsets = [];\n    this._targets = [];\n    this._activeTarget = null;\n    this._scrollHeight = 0;\n    EventHandler.on(this._scrollElement, EVENT_SCROLL, () => this._process());\n    this.refresh();\n\n    this._process();\n  } // Getters\n\n\n  static get Default() {\n    return Default$1;\n  }\n\n  static get NAME() {\n    return NAME$2;\n  } // Public\n\n\n  refresh() {\n    const autoMethod = this._scrollElement === this._scrollElement.window ? METHOD_OFFSET : METHOD_POSITION;\n    const offsetMethod = this._config.method === 'auto' ? autoMethod : this._config.method;\n    const offsetBase = offsetMethod === METHOD_POSITION ? this._getScrollTop() : 0;\n    this._offsets = [];\n    this._targets = [];\n    this._scrollHeight = this._getScrollHeight();\n    const targets = SelectorEngine.find(this._selector);\n    targets.map(element => {\n      const targetSelector = getSelectorFromElement(element);\n      const target = targetSelector ? SelectorEngine.findOne(targetSelector) : null;\n\n      if (target) {\n        const targetBCR = target.getBoundingClientRect();\n\n        if (targetBCR.width || targetBCR.height) {\n          return [Manipulator[offsetMethod](target).top + offsetBase, targetSelector];\n        }\n      }\n\n      return null;\n    }).filter(item => item).sort((a, b) => a[0] - b[0]).forEach(item => {\n      this._offsets.push(item[0]);\n\n      this._targets.push(item[1]);\n    });\n  }\n\n  dispose() {\n    EventHandler.off(this._scrollElement, EVENT_KEY$2);\n    super.dispose();\n  } // Private\n\n\n  _getConfig(config) {\n    config = { ...Default$1,\n      ...Manipulator.getDataAttributes(this._element),\n      ...(typeof config === 'object' && config ? config : {})\n    };\n\n    if (typeof config.target !== 'string' && isElement(config.target)) {\n      let {\n        id\n      } = config.target;\n\n      if (!id) {\n        id = getUID(NAME$2);\n        config.target.id = id;\n      }\n\n      config.target = `#${id}`;\n    }\n\n    typeCheckConfig(NAME$2, config, DefaultType$1);\n    return config;\n  }\n\n  _getScrollTop() {\n    return this._scrollElement === window ? this._scrollElement.pageYOffset : this._scrollElement.scrollTop;\n  }\n\n  _getScrollHeight() {\n    return this._scrollElement.scrollHeight || Math.max(document.body.scrollHeight, document.documentElement.scrollHeight);\n  }\n\n  _getOffsetHeight() {\n    return this._scrollElement === window ? window.innerHeight : this._scrollElement.getBoundingClientRect().height;\n  }\n\n  _process() {\n    const scrollTop = this._getScrollTop() + this._config.offset;\n\n    const scrollHeight = this._getScrollHeight();\n\n    const maxScroll = this._config.offset + scrollHeight - this._getOffsetHeight();\n\n    if (this._scrollHeight !== scrollHeight) {\n      this.refresh();\n    }\n\n    if (scrollTop >= maxScroll) {\n      const target = this._targets[this._targets.length - 1];\n\n      if (this._activeTarget !== target) {\n        this._activate(target);\n      }\n\n      return;\n    }\n\n    if (this._activeTarget && scrollTop < this._offsets[0] && this._offsets[0] > 0) {\n      this._activeTarget = null;\n\n      this._clear();\n\n      return;\n    }\n\n    for (let i = this._offsets.length; i--;) {\n      const isActiveTarget = this._activeTarget !== this._targets[i] && scrollTop >= this._offsets[i] && (typeof this._offsets[i + 1] === 'undefined' || scrollTop < this._offsets[i + 1]);\n\n      if (isActiveTarget) {\n        this._activate(this._targets[i]);\n      }\n    }\n  }\n\n  _activate(target) {\n    this._activeTarget = target;\n\n    this._clear();\n\n    const queries = this._selector.split(',').map(selector => `${selector}[data-bs-target=\"${target}\"],${selector}[href=\"${target}\"]`);\n\n    const link = SelectorEngine.findOne(queries.join(','));\n\n    if (link.classList.contains(CLASS_NAME_DROPDOWN_ITEM)) {\n      SelectorEngine.findOne(SELECTOR_DROPDOWN_TOGGLE$1, link.closest(SELECTOR_DROPDOWN$1)).classList.add(CLASS_NAME_ACTIVE$1);\n      link.classList.add(CLASS_NAME_ACTIVE$1);\n    } else {\n      // Set triggered link as active\n      link.classList.add(CLASS_NAME_ACTIVE$1);\n      SelectorEngine.parents(link, SELECTOR_NAV_LIST_GROUP$1).forEach(listGroup => {\n        // Set triggered links parents as active\n        // With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor\n        SelectorEngine.prev(listGroup, `${SELECTOR_NAV_LINKS}, ${SELECTOR_LIST_ITEMS}`).forEach(item => item.classList.add(CLASS_NAME_ACTIVE$1)); // Handle special case when .nav-link is inside .nav-item\n\n        SelectorEngine.prev(listGroup, SELECTOR_NAV_ITEMS).forEach(navItem => {\n          SelectorEngine.children(navItem, SELECTOR_NAV_LINKS).forEach(item => item.classList.add(CLASS_NAME_ACTIVE$1));\n        });\n      });\n    }\n\n    EventHandler.trigger(this._scrollElement, EVENT_ACTIVATE, {\n      relatedTarget: target\n    });\n  }\n\n  _clear() {\n    SelectorEngine.find(this._selector).filter(node => node.classList.contains(CLASS_NAME_ACTIVE$1)).forEach(node => node.classList.remove(CLASS_NAME_ACTIVE$1));\n  } // Static\n\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = ScrollSpy.getOrCreateInstance(this, config);\n\n      if (typeof config !== 'string') {\n        return;\n      }\n\n      if (typeof data[config] === 'undefined') {\n        throw new TypeError(`No method named \"${config}\"`);\n      }\n\n      data[config]();\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n  SelectorEngine.find(SELECTOR_DATA_SPY).forEach(spy => new ScrollSpy(spy));\n});\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .ScrollSpy to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(ScrollSpy);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): tab.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$1 = 'tab';\nconst DATA_KEY$1 = 'bs.tab';\nconst EVENT_KEY$1 = `.${DATA_KEY$1}`;\nconst DATA_API_KEY = '.data-api';\nconst EVENT_HIDE$1 = `hide${EVENT_KEY$1}`;\nconst EVENT_HIDDEN$1 = `hidden${EVENT_KEY$1}`;\nconst EVENT_SHOW$1 = `show${EVENT_KEY$1}`;\nconst EVENT_SHOWN$1 = `shown${EVENT_KEY$1}`;\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY$1}${DATA_API_KEY}`;\nconst CLASS_NAME_DROPDOWN_MENU = 'dropdown-menu';\nconst CLASS_NAME_ACTIVE = 'active';\nconst CLASS_NAME_FADE$1 = 'fade';\nconst CLASS_NAME_SHOW$1 = 'show';\nconst SELECTOR_DROPDOWN = '.dropdown';\nconst SELECTOR_NAV_LIST_GROUP = '.nav, .list-group';\nconst SELECTOR_ACTIVE = '.active';\nconst SELECTOR_ACTIVE_UL = ':scope > li > .active';\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"tab\"], [data-bs-toggle=\"pill\"], [data-bs-toggle=\"list\"]';\nconst SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle';\nconst SELECTOR_DROPDOWN_ACTIVE_CHILD = ':scope > .dropdown-menu .active';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Tab extends BaseComponent {\n  // Getters\n  static get NAME() {\n    return NAME$1;\n  } // Public\n\n\n  show() {\n    if (this._element.parentNode && this._element.parentNode.nodeType === Node.ELEMENT_NODE && this._element.classList.contains(CLASS_NAME_ACTIVE)) {\n      return;\n    }\n\n    let previous;\n    const target = getElementFromSelector(this._element);\n\n    const listElement = this._element.closest(SELECTOR_NAV_LIST_GROUP);\n\n    if (listElement) {\n      const itemSelector = listElement.nodeName === 'UL' || listElement.nodeName === 'OL' ? SELECTOR_ACTIVE_UL : SELECTOR_ACTIVE;\n      previous = SelectorEngine.find(itemSelector, listElement);\n      previous = previous[previous.length - 1];\n    }\n\n    const hideEvent = previous ? EventHandler.trigger(previous, EVENT_HIDE$1, {\n      relatedTarget: this._element\n    }) : null;\n    const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$1, {\n      relatedTarget: previous\n    });\n\n    if (showEvent.defaultPrevented || hideEvent !== null && hideEvent.defaultPrevented) {\n      return;\n    }\n\n    this._activate(this._element, listElement);\n\n    const complete = () => {\n      EventHandler.trigger(previous, EVENT_HIDDEN$1, {\n        relatedTarget: this._element\n      });\n      EventHandler.trigger(this._element, EVENT_SHOWN$1, {\n        relatedTarget: previous\n      });\n    };\n\n    if (target) {\n      this._activate(target, target.parentNode, complete);\n    } else {\n      complete();\n    }\n  } // Private\n\n\n  _activate(element, container, callback) {\n    const activeElements = container && (container.nodeName === 'UL' || container.nodeName === 'OL') ? SelectorEngine.find(SELECTOR_ACTIVE_UL, container) : SelectorEngine.children(container, SELECTOR_ACTIVE);\n    const active = activeElements[0];\n    const isTransitioning = callback && active && active.classList.contains(CLASS_NAME_FADE$1);\n\n    const complete = () => this._transitionComplete(element, active, callback);\n\n    if (active && isTransitioning) {\n      active.classList.remove(CLASS_NAME_SHOW$1);\n\n      this._queueCallback(complete, element, true);\n    } else {\n      complete();\n    }\n  }\n\n  _transitionComplete(element, active, callback) {\n    if (active) {\n      active.classList.remove(CLASS_NAME_ACTIVE);\n      const dropdownChild = SelectorEngine.findOne(SELECTOR_DROPDOWN_ACTIVE_CHILD, active.parentNode);\n\n      if (dropdownChild) {\n        dropdownChild.classList.remove(CLASS_NAME_ACTIVE);\n      }\n\n      if (active.getAttribute('role') === 'tab') {\n        active.setAttribute('aria-selected', false);\n      }\n    }\n\n    element.classList.add(CLASS_NAME_ACTIVE);\n\n    if (element.getAttribute('role') === 'tab') {\n      element.setAttribute('aria-selected', true);\n    }\n\n    reflow(element);\n\n    if (element.classList.contains(CLASS_NAME_FADE$1)) {\n      element.classList.add(CLASS_NAME_SHOW$1);\n    }\n\n    let parent = element.parentNode;\n\n    if (parent && parent.nodeName === 'LI') {\n      parent = parent.parentNode;\n    }\n\n    if (parent && parent.classList.contains(CLASS_NAME_DROPDOWN_MENU)) {\n      const dropdownElement = element.closest(SELECTOR_DROPDOWN);\n\n      if (dropdownElement) {\n        SelectorEngine.find(SELECTOR_DROPDOWN_TOGGLE, dropdownElement).forEach(dropdown => dropdown.classList.add(CLASS_NAME_ACTIVE));\n      }\n\n      element.setAttribute('aria-expanded', true);\n    }\n\n    if (callback) {\n      callback();\n    }\n  } // Static\n\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Tab.getOrCreateInstance(this);\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config]();\n      }\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n  if (['A', 'AREA'].includes(this.tagName)) {\n    event.preventDefault();\n  }\n\n  if (isDisabled(this)) {\n    return;\n  }\n\n  const data = Tab.getOrCreateInstance(this);\n  data.show();\n});\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Tab to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Tab);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): toast.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'toast';\nconst DATA_KEY = 'bs.toast';\nconst EVENT_KEY = `.${DATA_KEY}`;\nconst EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY}`;\nconst EVENT_MOUSEOVER = `mouseover${EVENT_KEY}`;\nconst EVENT_MOUSEOUT = `mouseout${EVENT_KEY}`;\nconst EVENT_FOCUSIN = `focusin${EVENT_KEY}`;\nconst EVENT_FOCUSOUT = `focusout${EVENT_KEY}`;\nconst EVENT_HIDE = `hide${EVENT_KEY}`;\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`;\nconst EVENT_SHOW = `show${EVENT_KEY}`;\nconst EVENT_SHOWN = `shown${EVENT_KEY}`;\nconst CLASS_NAME_FADE = 'fade';\nconst CLASS_NAME_HIDE = 'hide';\nconst CLASS_NAME_SHOW = 'show';\nconst CLASS_NAME_SHOWING = 'showing';\nconst DefaultType = {\n  animation: 'boolean',\n  autohide: 'boolean',\n  delay: 'number'\n};\nconst Default = {\n  animation: true,\n  autohide: true,\n  delay: 5000\n};\nconst SELECTOR_DATA_DISMISS = '[data-bs-dismiss=\"toast\"]';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Toast extends BaseComponent {\n  constructor(element, config) {\n    super(element);\n    this._config = this._getConfig(config);\n    this._timeout = null;\n    this._hasMouseInteraction = false;\n    this._hasKeyboardInteraction = false;\n\n    this._setListeners();\n  } // Getters\n\n\n  static get DefaultType() {\n    return DefaultType;\n  }\n\n  static get Default() {\n    return Default;\n  }\n\n  static get NAME() {\n    return NAME;\n  } // Public\n\n\n  show() {\n    const showEvent = EventHandler.trigger(this._element, EVENT_SHOW);\n\n    if (showEvent.defaultPrevented) {\n      return;\n    }\n\n    this._clearTimeout();\n\n    if (this._config.animation) {\n      this._element.classList.add(CLASS_NAME_FADE);\n    }\n\n    const complete = () => {\n      this._element.classList.remove(CLASS_NAME_SHOWING);\n\n      this._element.classList.add(CLASS_NAME_SHOW);\n\n      EventHandler.trigger(this._element, EVENT_SHOWN);\n\n      this._maybeScheduleHide();\n    };\n\n    this._element.classList.remove(CLASS_NAME_HIDE);\n\n    reflow(this._element);\n\n    this._element.classList.add(CLASS_NAME_SHOWING);\n\n    this._queueCallback(complete, this._element, this._config.animation);\n  }\n\n  hide() {\n    if (!this._element.classList.contains(CLASS_NAME_SHOW)) {\n      return;\n    }\n\n    const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE);\n\n    if (hideEvent.defaultPrevented) {\n      return;\n    }\n\n    const complete = () => {\n      this._element.classList.add(CLASS_NAME_HIDE);\n\n      EventHandler.trigger(this._element, EVENT_HIDDEN);\n    };\n\n    this._element.classList.remove(CLASS_NAME_SHOW);\n\n    this._queueCallback(complete, this._element, this._config.animation);\n  }\n\n  dispose() {\n    this._clearTimeout();\n\n    if (this._element.classList.contains(CLASS_NAME_SHOW)) {\n      this._element.classList.remove(CLASS_NAME_SHOW);\n    }\n\n    super.dispose();\n  } // Private\n\n\n  _getConfig(config) {\n    config = { ...Default,\n      ...Manipulator.getDataAttributes(this._element),\n      ...(typeof config === 'object' && config ? config : {})\n    };\n    typeCheckConfig(NAME, config, this.constructor.DefaultType);\n    return config;\n  }\n\n  _maybeScheduleHide() {\n    if (!this._config.autohide) {\n      return;\n    }\n\n    if (this._hasMouseInteraction || this._hasKeyboardInteraction) {\n      return;\n    }\n\n    this._timeout = setTimeout(() => {\n      this.hide();\n    }, this._config.delay);\n  }\n\n  _onInteraction(event, isInteracting) {\n    switch (event.type) {\n      case 'mouseover':\n      case 'mouseout':\n        this._hasMouseInteraction = isInteracting;\n        break;\n\n      case 'focusin':\n      case 'focusout':\n        this._hasKeyboardInteraction = isInteracting;\n        break;\n    }\n\n    if (isInteracting) {\n      this._clearTimeout();\n\n      return;\n    }\n\n    const nextElement = event.relatedTarget;\n\n    if (this._element === nextElement || this._element.contains(nextElement)) {\n      return;\n    }\n\n    this._maybeScheduleHide();\n  }\n\n  _setListeners() {\n    EventHandler.on(this._element, EVENT_CLICK_DISMISS, SELECTOR_DATA_DISMISS, () => this.hide());\n    EventHandler.on(this._element, EVENT_MOUSEOVER, event => this._onInteraction(event, true));\n    EventHandler.on(this._element, EVENT_MOUSEOUT, event => this._onInteraction(event, false));\n    EventHandler.on(this._element, EVENT_FOCUSIN, event => this._onInteraction(event, true));\n    EventHandler.on(this._element, EVENT_FOCUSOUT, event => this._onInteraction(event, false));\n  }\n\n  _clearTimeout() {\n    clearTimeout(this._timeout);\n    this._timeout = null;\n  } // Static\n\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Toast.getOrCreateInstance(this, config);\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config](this);\n      }\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Toast to jQuery only if jQuery is present\n */\n\n\ndefineJQueryPlugin(Toast);\n\nexport { Alert, Button, Carousel, Collapse, Dropdown, Modal, Offcanvas, Popover, ScrollSpy, Tab, Toast, Tooltip };\n//# sourceMappingURL=bootstrap.esm.js.map\n"
  },
  {
    "path": "src/sourceDev.WebApp/SharedThemes/united/wwwroot/js/jquery.js",
    "content": "/*!\n * jQuery JavaScript Library v3.7.0\n * https://jquery.com/\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license\n * https://jquery.org/license\n *\n * Date: 2023-05-11T18:29Z\n */\n(function (global, factory) {\n\n\t\"use strict\";\n\n\tif (typeof module === \"object\" && typeof module.exports === \"object\") {\n\n\t\t// For CommonJS and CommonJS-like environments where a proper `window`\n\t\t// is present, execute the factory and get jQuery.\n\t\t// For environments that do not have a `window` with a `document`\n\t\t// (such as Node.js), expose a factory as module.exports.\n\t\t// This accentuates the need for the creation of a real `window`.\n\t\t// e.g. var jQuery = require(\"jquery\")(window);\n\t\t// See ticket trac-14549 for more info.\n\t\tmodule.exports = global.document ?\n\t\t\tfactory(global, true) :\n\t\t\tfunction (w) {\n\t\t\t\tif (!w.document) {\n\t\t\t\t\tthrow new Error(\"jQuery requires a window with a document\");\n\t\t\t\t}\n\t\t\t\treturn factory(w);\n\t\t\t};\n\t} else {\n\t\tfactory(global);\n\t}\n\n\t// Pass this if window is not defined yet\n})(typeof window !== \"undefined\" ? window : this, function (window, noGlobal) {\n\n\t// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1\n\t// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode\n\t// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common\n\t// enough that all such attempts are guarded in a try block.\n\t\"use strict\";\n\n\tvar arr = [];\n\n\tvar getProto = Object.getPrototypeOf;\n\n\tvar slice = arr.slice;\n\n\tvar flat = arr.flat ? function (array) {\n\t\treturn arr.flat.call(array);\n\t} : function (array) {\n\t\treturn arr.concat.apply([], array);\n\t};\n\n\n\tvar push = arr.push;\n\n\tvar indexOf = arr.indexOf;\n\n\tvar class2type = {};\n\n\tvar toString = class2type.toString;\n\n\tvar hasOwn = class2type.hasOwnProperty;\n\n\tvar fnToString = hasOwn.toString;\n\n\tvar ObjectFunctionString = fnToString.call(Object);\n\n\tvar support = {};\n\n\tvar isFunction = function isFunction(obj) {\n\n\t\t// Support: Chrome <=57, Firefox <=52\n\t\t// In some browsers, typeof returns \"function\" for HTML <object> elements\n\t\t// (i.e., `typeof document.createElement( \"object\" ) === \"function\"`).\n\t\t// We don't want to classify *any* DOM node as a function.\n\t\t// Support: QtWeb <=3.8.5, WebKit <=534.34, wkhtmltopdf tool <=0.12.5\n\t\t// Plus for old WebKit, typeof returns \"function\" for HTML collections\n\t\t// (e.g., `typeof document.getElementsByTagName(\"div\") === \"function\"`). (gh-4756)\n\t\treturn typeof obj === \"function\" && typeof obj.nodeType !== \"number\" &&\n\t\t\ttypeof obj.item !== \"function\";\n\t};\n\n\n\tvar isWindow = function isWindow(obj) {\n\t\treturn obj != null && obj === obj.window;\n\t};\n\n\n\tvar document = window.document;\n\n\n\n\tvar preservedScriptAttributes = {\n\t\ttype: true,\n\t\tsrc: true,\n\t\tnonce: true,\n\t\tnoModule: true\n\t};\n\n\tfunction DOMEval(code, node, doc) {\n\t\tdoc = doc || document;\n\n\t\tvar i, val,\n\t\t\tscript = doc.createElement(\"script\");\n\n\t\tscript.text = code;\n\t\tif (node) {\n\t\t\tfor (i in preservedScriptAttributes) {\n\n\t\t\t\t// Support: Firefox 64+, Edge 18+\n\t\t\t\t// Some browsers don't support the \"nonce\" property on scripts.\n\t\t\t\t// On the other hand, just using `getAttribute` is not enough as\n\t\t\t\t// the `nonce` attribute is reset to an empty string whenever it\n\t\t\t\t// becomes browsing-context connected.\n\t\t\t\t// See https://github.com/whatwg/html/issues/2369\n\t\t\t\t// See https://html.spec.whatwg.org/#nonce-attributes\n\t\t\t\t// The `node.getAttribute` check was added for the sake of\n\t\t\t\t// `jQuery.globalEval` so that it can fake a nonce-containing node\n\t\t\t\t// via an object.\n\t\t\t\tval = node[i] || node.getAttribute && node.getAttribute(i);\n\t\t\t\tif (val) {\n\t\t\t\t\tscript.setAttribute(i, val);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tdoc.head.appendChild(script).parentNode.removeChild(script);\n\t}\n\n\n\tfunction toType(obj) {\n\t\tif (obj == null) {\n\t\t\treturn obj + \"\";\n\t\t}\n\n\t\t// Support: Android <=2.3 only (functionish RegExp)\n\t\treturn typeof obj === \"object\" || typeof obj === \"function\" ?\n\t\t\tclass2type[toString.call(obj)] || \"object\" :\n\t\t\ttypeof obj;\n\t}\n\t/* global Symbol */\n\t// Defining this global in .eslintrc.json would create a danger of using the global\n\t// unguarded in another place, it seems safer to define global only for this module\n\n\n\n\tvar version = \"3.7.0\",\n\n\t\trhtmlSuffix = /HTML$/i,\n\n\t\t// Define a local copy of jQuery\n\t\tjQuery = function (selector, context) {\n\n\t\t\t// The jQuery object is actually just the init constructor 'enhanced'\n\t\t\t// Need init if jQuery is called (just allow error to be thrown if not included)\n\t\t\treturn new jQuery.fn.init(selector, context);\n\t\t};\n\n\tjQuery.fn = jQuery.prototype = {\n\n\t\t// The current version of jQuery being used\n\t\tjquery: version,\n\n\t\tconstructor: jQuery,\n\n\t\t// The default length of a jQuery object is 0\n\t\tlength: 0,\n\n\t\ttoArray: function () {\n\t\t\treturn slice.call(this);\n\t\t},\n\n\t\t// Get the Nth element in the matched element set OR\n\t\t// Get the whole matched element set as a clean array\n\t\tget: function (num) {\n\n\t\t\t// Return all the elements in a clean array\n\t\t\tif (num == null) {\n\t\t\t\treturn slice.call(this);\n\t\t\t}\n\n\t\t\t// Return just the one element from the set\n\t\t\treturn num < 0 ? this[num + this.length] : this[num];\n\t\t},\n\n\t\t// Take an array of elements and push it onto the stack\n\t\t// (returning the new matched element set)\n\t\tpushStack: function (elems) {\n\n\t\t\t// Build a new jQuery matched element set\n\t\t\tvar ret = jQuery.merge(this.constructor(), elems);\n\n\t\t\t// Add the old object onto the stack (as a reference)\n\t\t\tret.prevObject = this;\n\n\t\t\t// Return the newly-formed element set\n\t\t\treturn ret;\n\t\t},\n\n\t\t// Execute a callback for every element in the matched set.\n\t\teach: function (callback) {\n\t\t\treturn jQuery.each(this, callback);\n\t\t},\n\n\t\tmap: function (callback) {\n\t\t\treturn this.pushStack(jQuery.map(this, function (elem, i) {\n\t\t\t\treturn callback.call(elem, i, elem);\n\t\t\t}));\n\t\t},\n\n\t\tslice: function () {\n\t\t\treturn this.pushStack(slice.apply(this, arguments));\n\t\t},\n\n\t\tfirst: function () {\n\t\t\treturn this.eq(0);\n\t\t},\n\n\t\tlast: function () {\n\t\t\treturn this.eq(-1);\n\t\t},\n\n\t\teven: function () {\n\t\t\treturn this.pushStack(jQuery.grep(this, function (_elem, i) {\n\t\t\t\treturn (i + 1) % 2;\n\t\t\t}));\n\t\t},\n\n\t\todd: function () {\n\t\t\treturn this.pushStack(jQuery.grep(this, function (_elem, i) {\n\t\t\t\treturn i % 2;\n\t\t\t}));\n\t\t},\n\n\t\teq: function (i) {\n\t\t\tvar len = this.length,\n\t\t\t\tj = +i + (i < 0 ? len : 0);\n\t\t\treturn this.pushStack(j >= 0 && j < len ? [this[j]] : []);\n\t\t},\n\n\t\tend: function () {\n\t\t\treturn this.prevObject || this.constructor();\n\t\t},\n\n\t\t// For internal use only.\n\t\t// Behaves like an Array's method, not like a jQuery method.\n\t\tpush: push,\n\t\tsort: arr.sort,\n\t\tsplice: arr.splice\n\t};\n\n\tjQuery.extend = jQuery.fn.extend = function () {\n\t\tvar options, name, src, copy, copyIsArray, clone,\n\t\t\ttarget = arguments[0] || {},\n\t\t\ti = 1,\n\t\t\tlength = arguments.length,\n\t\t\tdeep = false;\n\n\t\t// Handle a deep copy situation\n\t\tif (typeof target === \"boolean\") {\n\t\t\tdeep = target;\n\n\t\t\t// Skip the boolean and the target\n\t\t\ttarget = arguments[i] || {};\n\t\t\ti++;\n\t\t}\n\n\t\t// Handle case when target is a string or something (possible in deep copy)\n\t\tif (typeof target !== \"object\" && !isFunction(target)) {\n\t\t\ttarget = {};\n\t\t}\n\n\t\t// Extend jQuery itself if only one argument is passed\n\t\tif (i === length) {\n\t\t\ttarget = this;\n\t\t\ti--;\n\t\t}\n\n\t\tfor (; i < length; i++) {\n\n\t\t\t// Only deal with non-null/undefined values\n\t\t\tif ((options = arguments[i]) != null) {\n\n\t\t\t\t// Extend the base object\n\t\t\t\tfor (name in options) {\n\t\t\t\t\tcopy = options[name];\n\n\t\t\t\t\t// Prevent Object.prototype pollution\n\t\t\t\t\t// Prevent never-ending loop\n\t\t\t\t\tif (name === \"__proto__\" || target === copy) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\t\tif (deep && copy && (jQuery.isPlainObject(copy) ||\n\t\t\t\t\t\t(copyIsArray = Array.isArray(copy)))) {\n\t\t\t\t\t\tsrc = target[name];\n\n\t\t\t\t\t\t// Ensure proper type for the source value\n\t\t\t\t\t\tif (copyIsArray && !Array.isArray(src)) {\n\t\t\t\t\t\t\tclone = [];\n\t\t\t\t\t\t} else if (!copyIsArray && !jQuery.isPlainObject(src)) {\n\t\t\t\t\t\t\tclone = {};\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tclone = src;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcopyIsArray = false;\n\n\t\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\t\ttarget[name] = jQuery.extend(deep, clone, copy);\n\n\t\t\t\t\t\t// Don't bring in undefined values\n\t\t\t\t\t} else if (copy !== undefined) {\n\t\t\t\t\t\ttarget[name] = copy;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Return the modified object\n\t\treturn target;\n\t};\n\n\tjQuery.extend({\n\n\t\t// Unique for each copy of jQuery on the page\n\t\texpando: \"jQuery\" + (version + Math.random()).replace(/\\D/g, \"\"),\n\n\t\t// Assume jQuery is ready without the ready module\n\t\tisReady: true,\n\n\t\terror: function (msg) {\n\t\t\tthrow new Error(msg);\n\t\t},\n\n\t\tnoop: function () { },\n\n\t\tisPlainObject: function (obj) {\n\t\t\tvar proto, Ctor;\n\n\t\t\t// Detect obvious negatives\n\t\t\t// Use toString instead of jQuery.type to catch host objects\n\t\t\tif (!obj || toString.call(obj) !== \"[object Object]\") {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tproto = getProto(obj);\n\n\t\t\t// Objects with no prototype (e.g., `Object.create( null )`) are plain\n\t\t\tif (!proto) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\t// Objects with prototype are plain iff they were constructed by a global Object function\n\t\t\tCtor = hasOwn.call(proto, \"constructor\") && proto.constructor;\n\t\t\treturn typeof Ctor === \"function\" && fnToString.call(Ctor) === ObjectFunctionString;\n\t\t},\n\n\t\tisEmptyObject: function (obj) {\n\t\t\tvar name;\n\n\t\t\tfor (name in obj) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\n\t\t// Evaluates a script in a provided context; falls back to the global one\n\t\t// if not specified.\n\t\tglobalEval: function (code, options, doc) {\n\t\t\tDOMEval(code, { nonce: options && options.nonce }, doc);\n\t\t},\n\n\t\teach: function (obj, callback) {\n\t\t\tvar length, i = 0;\n\n\t\t\tif (isArrayLike(obj)) {\n\t\t\t\tlength = obj.length;\n\t\t\t\tfor (; i < length; i++) {\n\t\t\t\t\tif (callback.call(obj[i], i, obj[i]) === false) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor (i in obj) {\n\t\t\t\t\tif (callback.call(obj[i], i, obj[i]) === false) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn obj;\n\t\t},\n\n\n\t\t// Retrieve the text value of an array of DOM nodes\n\t\ttext: function (elem) {\n\t\t\tvar node,\n\t\t\t\tret = \"\",\n\t\t\t\ti = 0,\n\t\t\t\tnodeType = elem.nodeType;\n\n\t\t\tif (!nodeType) {\n\n\t\t\t\t// If no nodeType, this is expected to be an array\n\t\t\t\twhile ((node = elem[i++])) {\n\n\t\t\t\t\t// Do not traverse comment nodes\n\t\t\t\t\tret += jQuery.text(node);\n\t\t\t\t}\n\t\t\t} else if (nodeType === 1 || nodeType === 9 || nodeType === 11) {\n\t\t\t\treturn elem.textContent;\n\t\t\t} else if (nodeType === 3 || nodeType === 4) {\n\t\t\t\treturn elem.nodeValue;\n\t\t\t}\n\n\t\t\t// Do not include comment or processing instruction nodes\n\n\t\t\treturn ret;\n\t\t},\n\n\t\t// results is for internal usage only\n\t\tmakeArray: function (arr, results) {\n\t\t\tvar ret = results || [];\n\n\t\t\tif (arr != null) {\n\t\t\t\tif (isArrayLike(Object(arr))) {\n\t\t\t\t\tjQuery.merge(ret,\n\t\t\t\t\t\ttypeof arr === \"string\" ?\n\t\t\t\t\t\t\t[arr] : arr\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\tpush.call(ret, arr);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn ret;\n\t\t},\n\n\t\tinArray: function (elem, arr, i) {\n\t\t\treturn arr == null ? -1 : indexOf.call(arr, elem, i);\n\t\t},\n\n\t\tisXMLDoc: function (elem) {\n\t\t\tvar namespace = elem && elem.namespaceURI,\n\t\t\t\tdocElem = elem && (elem.ownerDocument || elem).documentElement;\n\n\t\t\t// Assume HTML when documentElement doesn't yet exist, such as inside\n\t\t\t// document fragments.\n\t\t\treturn !rhtmlSuffix.test(namespace || docElem && docElem.nodeName || \"HTML\");\n\t\t},\n\n\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\tmerge: function (first, second) {\n\t\t\tvar len = +second.length,\n\t\t\t\tj = 0,\n\t\t\t\ti = first.length;\n\n\t\t\tfor (; j < len; j++) {\n\t\t\t\tfirst[i++] = second[j];\n\t\t\t}\n\n\t\t\tfirst.length = i;\n\n\t\t\treturn first;\n\t\t},\n\n\t\tgrep: function (elems, callback, invert) {\n\t\t\tvar callbackInverse,\n\t\t\t\tmatches = [],\n\t\t\t\ti = 0,\n\t\t\t\tlength = elems.length,\n\t\t\t\tcallbackExpect = !invert;\n\n\t\t\t// Go through the array, only saving the items\n\t\t\t// that pass the validator function\n\t\t\tfor (; i < length; i++) {\n\t\t\t\tcallbackInverse = !callback(elems[i], i);\n\t\t\t\tif (callbackInverse !== callbackExpect) {\n\t\t\t\t\tmatches.push(elems[i]);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn matches;\n\t\t},\n\n\t\t// arg is for internal usage only\n\t\tmap: function (elems, callback, arg) {\n\t\t\tvar length, value,\n\t\t\t\ti = 0,\n\t\t\t\tret = [];\n\n\t\t\t// Go through the array, translating each of the items to their new values\n\t\t\tif (isArrayLike(elems)) {\n\t\t\t\tlength = elems.length;\n\t\t\t\tfor (; i < length; i++) {\n\t\t\t\t\tvalue = callback(elems[i], i, arg);\n\n\t\t\t\t\tif (value != null) {\n\t\t\t\t\t\tret.push(value);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Go through every key on the object,\n\t\t\t} else {\n\t\t\t\tfor (i in elems) {\n\t\t\t\t\tvalue = callback(elems[i], i, arg);\n\n\t\t\t\t\tif (value != null) {\n\t\t\t\t\t\tret.push(value);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Flatten any nested arrays\n\t\t\treturn flat(ret);\n\t\t},\n\n\t\t// A global GUID counter for objects\n\t\tguid: 1,\n\n\t\t// jQuery.support is not used in Core but other projects attach their\n\t\t// properties to it so it needs to exist.\n\t\tsupport: support\n\t});\n\n\tif (typeof Symbol === \"function\") {\n\t\tjQuery.fn[Symbol.iterator] = arr[Symbol.iterator];\n\t}\n\n\t// Populate the class2type map\n\tjQuery.each(\"Boolean Number String Function Array Date RegExp Object Error Symbol\".split(\" \"),\n\t\tfunction (_i, name) {\n\t\t\tclass2type[\"[object \" + name + \"]\"] = name.toLowerCase();\n\t\t});\n\n\tfunction isArrayLike(obj) {\n\n\t\t// Support: real iOS 8.2 only (not reproducible in simulator)\n\t\t// `in` check used to prevent JIT error (gh-2145)\n\t\t// hasOwn isn't used here due to false negatives\n\t\t// regarding Nodelist length in IE\n\t\tvar length = !!obj && \"length\" in obj && obj.length,\n\t\t\ttype = toType(obj);\n\n\t\tif (isFunction(obj) || isWindow(obj)) {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn type === \"array\" || length === 0 ||\n\t\t\ttypeof length === \"number\" && length > 0 && (length - 1) in obj;\n\t}\n\n\n\tfunction nodeName(elem, name) {\n\n\t\treturn elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();\n\n\t}\n\tvar pop = arr.pop;\n\n\n\tvar sort = arr.sort;\n\n\n\tvar splice = arr.splice;\n\n\n\tvar whitespace = \"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\";\n\n\n\tvar rtrimCSS = new RegExp(\n\t\t\"^\" + whitespace + \"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\" + whitespace + \"+$\",\n\t\t\"g\"\n\t);\n\n\n\n\n\t// Note: an element does not contain itself\n\tjQuery.contains = function (a, b) {\n\t\tvar bup = b && b.parentNode;\n\n\t\treturn a === bup || !!(bup && bup.nodeType === 1 && (\n\n\t\t\t// Support: IE 9 - 11+\n\t\t\t// IE doesn't have `contains` on SVG.\n\t\t\ta.contains ?\n\t\t\t\ta.contains(bup) :\n\t\t\t\ta.compareDocumentPosition && a.compareDocumentPosition(bup) & 16\n\t\t));\n\t};\n\n\n\n\n\t// CSS string/identifier serialization\n\t// https://drafts.csswg.org/cssom/#common-serializing-idioms\n\tvar rcssescape = /([\\0-\\x1f\\x7f]|^-?\\d)|^-$|[^\\x80-\\uFFFF\\w-]/g;\n\n\tfunction fcssescape(ch, asCodePoint) {\n\t\tif (asCodePoint) {\n\n\t\t\t// U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER\n\t\t\tif (ch === \"\\0\") {\n\t\t\t\treturn \"\\uFFFD\";\n\t\t\t}\n\n\t\t\t// Control characters and (dependent upon position) numbers get escaped as code points\n\t\t\treturn ch.slice(0, -1) + \"\\\\\" + ch.charCodeAt(ch.length - 1).toString(16) + \" \";\n\t\t}\n\n\t\t// Other potentially-special ASCII characters get backslash-escaped\n\t\treturn \"\\\\\" + ch;\n\t}\n\n\tjQuery.escapeSelector = function (sel) {\n\t\treturn (sel + \"\").replace(rcssescape, fcssescape);\n\t};\n\n\n\n\n\tvar preferredDoc = document,\n\t\tpushNative = push;\n\n\t(function () {\n\n\t\tvar i,\n\t\t\tExpr,\n\t\t\toutermostContext,\n\t\t\tsortInput,\n\t\t\thasDuplicate,\n\t\t\tpush = pushNative,\n\n\t\t\t// Local document vars\n\t\t\tdocument,\n\t\t\tdocumentElement,\n\t\t\tdocumentIsHTML,\n\t\t\trbuggyQSA,\n\t\t\tmatches,\n\n\t\t\t// Instance-specific data\n\t\t\texpando = jQuery.expando,\n\t\t\tdirruns = 0,\n\t\t\tdone = 0,\n\t\t\tclassCache = createCache(),\n\t\t\ttokenCache = createCache(),\n\t\t\tcompilerCache = createCache(),\n\t\t\tnonnativeSelectorCache = createCache(),\n\t\t\tsortOrder = function (a, b) {\n\t\t\t\tif (a === b) {\n\t\t\t\t\thasDuplicate = true;\n\t\t\t\t}\n\t\t\t\treturn 0;\n\t\t\t},\n\n\t\t\tbooleans = \"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|\" +\n\t\t\t\t\"loop|multiple|open|readonly|required|scoped\",\n\n\t\t\t// Regular expressions\n\n\t\t\t// https://www.w3.org/TR/css-syntax-3/#ident-token-diagram\n\t\t\tidentifier = \"(?:\\\\\\\\[\\\\da-fA-F]{1,6}\" + whitespace +\n\t\t\t\t\"?|\\\\\\\\[^\\\\r\\\\n\\\\f]|[\\\\w-]|[^\\0-\\\\x7f])+\",\n\n\t\t\t// Attribute selectors: https://www.w3.org/TR/selectors/#attribute-selectors\n\t\t\tattributes = \"\\\\[\" + whitespace + \"*(\" + identifier + \")(?:\" + whitespace +\n\n\t\t\t\t// Operator (capture 2)\n\t\t\t\t\"*([*^$|!~]?=)\" + whitespace +\n\n\t\t\t\t// \"Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]\"\n\t\t\t\t\"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\" + identifier + \"))|)\" +\n\t\t\t\twhitespace + \"*\\\\]\",\n\n\t\t\tpseudos = \":(\" + identifier + \")(?:\\\\((\" +\n\n\t\t\t\t// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:\n\t\t\t\t// 1. quoted (capture 3; capture 4 or capture 5)\n\t\t\t\t\"('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|\" +\n\n\t\t\t\t// 2. simple (capture 6)\n\t\t\t\t\"((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\" + attributes + \")*)|\" +\n\n\t\t\t\t// 3. anything else (capture 2)\n\t\t\t\t\".*\" +\n\t\t\t\t\")\\\\)|)\",\n\n\t\t\t// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter\n\t\t\trwhitespace = new RegExp(whitespace + \"+\", \"g\"),\n\n\t\t\trcomma = new RegExp(\"^\" + whitespace + \"*,\" + whitespace + \"*\"),\n\t\t\trleadingCombinator = new RegExp(\"^\" + whitespace + \"*([>+~]|\" + whitespace + \")\" +\n\t\t\t\twhitespace + \"*\"),\n\t\t\trdescend = new RegExp(whitespace + \"|>\"),\n\n\t\t\trpseudo = new RegExp(pseudos),\n\t\t\tridentifier = new RegExp(\"^\" + identifier + \"$\"),\n\n\t\t\tmatchExpr = {\n\t\t\t\tID: new RegExp(\"^#(\" + identifier + \")\"),\n\t\t\t\tCLASS: new RegExp(\"^\\\\.(\" + identifier + \")\"),\n\t\t\t\tTAG: new RegExp(\"^(\" + identifier + \"|[*])\"),\n\t\t\t\tATTR: new RegExp(\"^\" + attributes),\n\t\t\t\tPSEUDO: new RegExp(\"^\" + pseudos),\n\t\t\t\tCHILD: new RegExp(\n\t\t\t\t\t\"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\" +\n\t\t\t\t\twhitespace + \"*(even|odd|(([+-]|)(\\\\d*)n|)\" + whitespace + \"*(?:([+-]|)\" +\n\t\t\t\t\twhitespace + \"*(\\\\d+)|))\" + whitespace + \"*\\\\)|)\", \"i\"),\n\t\t\t\tbool: new RegExp(\"^(?:\" + booleans + \")$\", \"i\"),\n\n\t\t\t\t// For use in libraries implementing .is()\n\t\t\t\t// We use this for POS matching in `select`\n\t\t\t\tneedsContext: new RegExp(\"^\" + whitespace +\n\t\t\t\t\t\"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\" + whitespace +\n\t\t\t\t\t\"*((?:-\\\\d)?\\\\d*)\" + whitespace + \"*\\\\)|)(?=[^-]|$)\", \"i\")\n\t\t\t},\n\n\t\t\trinputs = /^(?:input|select|textarea|button)$/i,\n\t\t\trheader = /^h\\d$/i,\n\n\t\t\t// Easily-parseable/retrievable ID or TAG or CLASS selectors\n\t\t\trquickExpr = /^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,\n\n\t\t\trsibling = /[+~]/,\n\n\t\t\t// CSS escapes\n\t\t\t// https://www.w3.org/TR/CSS21/syndata.html#escaped-characters\n\t\t\trunescape = new RegExp(\"\\\\\\\\[\\\\da-fA-F]{1,6}\" + whitespace +\n\t\t\t\t\"?|\\\\\\\\([^\\\\r\\\\n\\\\f])\", \"g\"),\n\t\t\tfunescape = function (escape, nonHex) {\n\t\t\t\tvar high = \"0x\" + escape.slice(1) - 0x10000;\n\n\t\t\t\tif (nonHex) {\n\n\t\t\t\t\t// Strip the backslash prefix from a non-hex escape sequence\n\t\t\t\t\treturn nonHex;\n\t\t\t\t}\n\n\t\t\t\t// Replace a hexadecimal escape sequence with the encoded Unicode code point\n\t\t\t\t// Support: IE <=11+\n\t\t\t\t// For values outside the Basic Multilingual Plane (BMP), manually construct a\n\t\t\t\t// surrogate pair\n\t\t\t\treturn high < 0 ?\n\t\t\t\t\tString.fromCharCode(high + 0x10000) :\n\t\t\t\t\tString.fromCharCode(high >> 10 | 0xD800, high & 0x3FF | 0xDC00);\n\t\t\t},\n\n\t\t\t// Used for iframes; see `setDocument`.\n\t\t\t// Support: IE 9 - 11+, Edge 12 - 18+\n\t\t\t// Removing the function wrapper causes a \"Permission Denied\"\n\t\t\t// error in IE/Edge.\n\t\t\tunloadHandler = function () {\n\t\t\t\tsetDocument();\n\t\t\t},\n\n\t\t\tinDisabledFieldset = addCombinator(\n\t\t\t\tfunction (elem) {\n\t\t\t\t\treturn elem.disabled === true && nodeName(elem, \"fieldset\");\n\t\t\t\t},\n\t\t\t\t{ dir: \"parentNode\", next: \"legend\" }\n\t\t\t);\n\n\t\t// Support: IE <=9 only\n\t\t// Accessing document.activeElement can throw unexpectedly\n\t\t// https://bugs.jquery.com/ticket/13393\n\t\tfunction safeActiveElement() {\n\t\t\ttry {\n\t\t\t\treturn document.activeElement;\n\t\t\t} catch (err) { }\n\t\t}\n\n\t\t// Optimize for push.apply( _, NodeList )\n\t\ttry {\n\t\t\tpush.apply(\n\t\t\t\t(arr = slice.call(preferredDoc.childNodes)),\n\t\t\t\tpreferredDoc.childNodes\n\t\t\t);\n\n\t\t\t// Support: Android <=4.0\n\t\t\t// Detect silently failing push.apply\n\t\t\t// eslint-disable-next-line no-unused-expressions\n\t\t\tarr[preferredDoc.childNodes.length].nodeType;\n\t\t} catch (e) {\n\t\t\tpush = {\n\t\t\t\tapply: function (target, els) {\n\t\t\t\t\tpushNative.apply(target, slice.call(els));\n\t\t\t\t},\n\t\t\t\tcall: function (target) {\n\t\t\t\t\tpushNative.apply(target, slice.call(arguments, 1));\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\n\t\tfunction find(selector, context, results, seed) {\n\t\t\tvar m, i, elem, nid, match, groups, newSelector,\n\t\t\t\tnewContext = context && context.ownerDocument,\n\n\t\t\t\t// nodeType defaults to 9, since context defaults to document\n\t\t\t\tnodeType = context ? context.nodeType : 9;\n\n\t\t\tresults = results || [];\n\n\t\t\t// Return early from calls with invalid selector or context\n\t\t\tif (typeof selector !== \"string\" || !selector ||\n\t\t\t\tnodeType !== 1 && nodeType !== 9 && nodeType !== 11) {\n\n\t\t\t\treturn results;\n\t\t\t}\n\n\t\t\t// Try to shortcut find operations (as opposed to filters) in HTML documents\n\t\t\tif (!seed) {\n\t\t\t\tsetDocument(context);\n\t\t\t\tcontext = context || document;\n\n\t\t\t\tif (documentIsHTML) {\n\n\t\t\t\t\t// If the selector is sufficiently simple, try using a \"get*By*\" DOM method\n\t\t\t\t\t// (excepting DocumentFragment context, where the methods don't exist)\n\t\t\t\t\tif (nodeType !== 11 && (match = rquickExpr.exec(selector))) {\n\n\t\t\t\t\t\t// ID selector\n\t\t\t\t\t\tif ((m = match[1])) {\n\n\t\t\t\t\t\t\t// Document context\n\t\t\t\t\t\t\tif (nodeType === 9) {\n\t\t\t\t\t\t\t\tif ((elem = context.getElementById(m))) {\n\n\t\t\t\t\t\t\t\t\t// Support: IE 9 only\n\t\t\t\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\t\t\t\tif (elem.id === m) {\n\t\t\t\t\t\t\t\t\t\tpush.call(results, elem);\n\t\t\t\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t// Element context\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t// Support: IE 9 only\n\t\t\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\t\t\tif (newContext && (elem = newContext.getElementById(m)) &&\n\t\t\t\t\t\t\t\t\tfind.contains(context, elem) &&\n\t\t\t\t\t\t\t\t\telem.id === m) {\n\n\t\t\t\t\t\t\t\t\tpush.call(results, elem);\n\t\t\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Type selector\n\t\t\t\t\t\t} else if (match[2]) {\n\t\t\t\t\t\t\tpush.apply(results, context.getElementsByTagName(selector));\n\t\t\t\t\t\t\treturn results;\n\n\t\t\t\t\t\t\t// Class selector\n\t\t\t\t\t\t} else if ((m = match[3]) && context.getElementsByClassName) {\n\t\t\t\t\t\t\tpush.apply(results, context.getElementsByClassName(m));\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Take advantage of querySelectorAll\n\t\t\t\t\tif (!nonnativeSelectorCache[selector + \" \"] &&\n\t\t\t\t\t\t(!rbuggyQSA || !rbuggyQSA.test(selector))) {\n\n\t\t\t\t\t\tnewSelector = selector;\n\t\t\t\t\t\tnewContext = context;\n\n\t\t\t\t\t\t// qSA considers elements outside a scoping root when evaluating child or\n\t\t\t\t\t\t// descendant combinators, which is not what we want.\n\t\t\t\t\t\t// In such cases, we work around the behavior by prefixing every selector in the\n\t\t\t\t\t\t// list with an ID selector referencing the scope context.\n\t\t\t\t\t\t// The technique has to be used as well when a leading combinator is used\n\t\t\t\t\t\t// as such selectors are not recognized by querySelectorAll.\n\t\t\t\t\t\t// Thanks to Andrew Dupont for this technique.\n\t\t\t\t\t\tif (nodeType === 1 &&\n\t\t\t\t\t\t\t(rdescend.test(selector) || rleadingCombinator.test(selector))) {\n\n\t\t\t\t\t\t\t// Expand context for sibling selectors\n\t\t\t\t\t\t\tnewContext = rsibling.test(selector) && testContext(context.parentNode) ||\n\t\t\t\t\t\t\t\tcontext;\n\n\t\t\t\t\t\t\t// We can use :scope instead of the ID hack if the browser\n\t\t\t\t\t\t\t// supports it & if we're not changing the context.\n\t\t\t\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when\n\t\t\t\t\t\t\t// strict-comparing two documents; shallow comparisons work.\n\t\t\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\t\t\tif (newContext != context || !support.scope) {\n\n\t\t\t\t\t\t\t\t// Capture the context ID, setting it first if necessary\n\t\t\t\t\t\t\t\tif ((nid = context.getAttribute(\"id\"))) {\n\t\t\t\t\t\t\t\t\tnid = jQuery.escapeSelector(nid);\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tcontext.setAttribute(\"id\", (nid = expando));\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Prefix every selector in the list\n\t\t\t\t\t\t\tgroups = tokenize(selector);\n\t\t\t\t\t\t\ti = groups.length;\n\t\t\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\t\t\tgroups[i] = (nid ? \"#\" + nid : \":scope\") + \" \" +\n\t\t\t\t\t\t\t\t\ttoSelector(groups[i]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tnewSelector = groups.join(\",\");\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tpush.apply(results,\n\t\t\t\t\t\t\t\tnewContext.querySelectorAll(newSelector)\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t} catch (qsaError) {\n\t\t\t\t\t\t\tnonnativeSelectorCache(selector, true);\n\t\t\t\t\t\t} finally {\n\t\t\t\t\t\t\tif (nid === expando) {\n\t\t\t\t\t\t\t\tcontext.removeAttribute(\"id\");\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// All others\n\t\t\treturn select(selector.replace(rtrimCSS, \"$1\"), context, results, seed);\n\t\t}\n\n\t\t/**\n\t\t * Create key-value caches of limited size\n\t\t * @returns {function(string, object)} Returns the Object data after storing it on itself with\n\t\t *\tproperty name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)\n\t\t *\tdeleting the oldest entry\n\t\t */\n\t\tfunction createCache() {\n\t\t\tvar keys = [];\n\n\t\t\tfunction cache(key, value) {\n\n\t\t\t\t// Use (key + \" \") to avoid collision with native prototype properties\n\t\t\t\t// (see https://github.com/jquery/sizzle/issues/157)\n\t\t\t\tif (keys.push(key + \" \") > Expr.cacheLength) {\n\n\t\t\t\t\t// Only keep the most recent entries\n\t\t\t\t\tdelete cache[keys.shift()];\n\t\t\t\t}\n\t\t\t\treturn (cache[key + \" \"] = value);\n\t\t\t}\n\t\t\treturn cache;\n\t\t}\n\n\t\t/**\n\t\t * Mark a function for special use by jQuery selector module\n\t\t * @param {Function} fn The function to mark\n\t\t */\n\t\tfunction markFunction(fn) {\n\t\t\tfn[expando] = true;\n\t\t\treturn fn;\n\t\t}\n\n\t\t/**\n\t\t * Support testing using an element\n\t\t * @param {Function} fn Passed the created element and returns a boolean result\n\t\t */\n\t\tfunction assert(fn) {\n\t\t\tvar el = document.createElement(\"fieldset\");\n\n\t\t\ttry {\n\t\t\t\treturn !!fn(el);\n\t\t\t} catch (e) {\n\t\t\t\treturn false;\n\t\t\t} finally {\n\n\t\t\t\t// Remove from its parent by default\n\t\t\t\tif (el.parentNode) {\n\t\t\t\t\tel.parentNode.removeChild(el);\n\t\t\t\t}\n\n\t\t\t\t// release memory in IE\n\t\t\t\tel = null;\n\t\t\t}\n\t\t}\n\n\t\t/**\n\t\t * Returns a function to use in pseudos for input types\n\t\t * @param {String} type\n\t\t */\n\t\tfunction createInputPseudo(type) {\n\t\t\treturn function (elem) {\n\t\t\t\treturn nodeName(elem, \"input\") && elem.type === type;\n\t\t\t};\n\t\t}\n\n\t\t/**\n\t\t * Returns a function to use in pseudos for buttons\n\t\t * @param {String} type\n\t\t */\n\t\tfunction createButtonPseudo(type) {\n\t\t\treturn function (elem) {\n\t\t\t\treturn (nodeName(elem, \"input\") || nodeName(elem, \"button\")) &&\n\t\t\t\t\telem.type === type;\n\t\t\t};\n\t\t}\n\n\t\t/**\n\t\t * Returns a function to use in pseudos for :enabled/:disabled\n\t\t * @param {Boolean} disabled true for :disabled; false for :enabled\n\t\t */\n\t\tfunction createDisabledPseudo(disabled) {\n\n\t\t\t// Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable\n\t\t\treturn function (elem) {\n\n\t\t\t\t// Only certain elements can match :enabled or :disabled\n\t\t\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled\n\t\t\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled\n\t\t\t\tif (\"form\" in elem) {\n\n\t\t\t\t\t// Check for inherited disabledness on relevant non-disabled elements:\n\t\t\t\t\t// * listed form-associated elements in a disabled fieldset\n\t\t\t\t\t//   https://html.spec.whatwg.org/multipage/forms.html#category-listed\n\t\t\t\t\t//   https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled\n\t\t\t\t\t// * option elements in a disabled optgroup\n\t\t\t\t\t//   https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled\n\t\t\t\t\t// All such elements have a \"form\" property.\n\t\t\t\t\tif (elem.parentNode && elem.disabled === false) {\n\n\t\t\t\t\t\t// Option elements defer to a parent optgroup if present\n\t\t\t\t\t\tif (\"label\" in elem) {\n\t\t\t\t\t\t\tif (\"label\" in elem.parentNode) {\n\t\t\t\t\t\t\t\treturn elem.parentNode.disabled === disabled;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\treturn elem.disabled === disabled;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Support: IE 6 - 11+\n\t\t\t\t\t\t// Use the isDisabled shortcut property to check for disabled fieldset ancestors\n\t\t\t\t\t\treturn elem.isDisabled === disabled ||\n\n\t\t\t\t\t\t\t// Where there is no isDisabled, check manually\n\t\t\t\t\t\t\telem.isDisabled !== !disabled &&\n\t\t\t\t\t\t\tinDisabledFieldset(elem) === disabled;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn elem.disabled === disabled;\n\n\t\t\t\t\t// Try to winnow out elements that can't be disabled before trusting the disabled property.\n\t\t\t\t\t// Some victims get caught in our net (label, legend, menu, track), but it shouldn't\n\t\t\t\t\t// even exist on them, let alone have a boolean value.\n\t\t\t\t} else if (\"label\" in elem) {\n\t\t\t\t\treturn elem.disabled === disabled;\n\t\t\t\t}\n\n\t\t\t\t// Remaining elements are neither :enabled nor :disabled\n\t\t\t\treturn false;\n\t\t\t};\n\t\t}\n\n\t\t/**\n\t\t * Returns a function to use in pseudos for positionals\n\t\t * @param {Function} fn\n\t\t */\n\t\tfunction createPositionalPseudo(fn) {\n\t\t\treturn markFunction(function (argument) {\n\t\t\t\targument = +argument;\n\t\t\t\treturn markFunction(function (seed, matches) {\n\t\t\t\t\tvar j,\n\t\t\t\t\t\tmatchIndexes = fn([], seed.length, argument),\n\t\t\t\t\t\ti = matchIndexes.length;\n\n\t\t\t\t\t// Match elements found at the specified indexes\n\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\tif (seed[(j = matchIndexes[i])]) {\n\t\t\t\t\t\t\tseed[j] = !(matches[j] = seed[j]);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\n\t\t/**\n\t\t * Checks a node for validity as a jQuery selector context\n\t\t * @param {Element|Object=} context\n\t\t * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value\n\t\t */\n\t\tfunction testContext(context) {\n\t\t\treturn context && typeof context.getElementsByTagName !== \"undefined\" && context;\n\t\t}\n\n\t\t/**\n\t\t * Sets document-related variables once based on the current document\n\t\t * @param {Element|Object} [node] An element or document object to use to set the document\n\t\t * @returns {Object} Returns the current document\n\t\t */\n\t\tfunction setDocument(node) {\n\t\t\tvar subWindow,\n\t\t\t\tdoc = node ? node.ownerDocument || node : preferredDoc;\n\n\t\t\t// Return early if doc is invalid or already selected\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tif (doc == document || doc.nodeType !== 9 || !doc.documentElement) {\n\t\t\t\treturn document;\n\t\t\t}\n\n\t\t\t// Update global variables\n\t\t\tdocument = doc;\n\t\t\tdocumentElement = document.documentElement;\n\t\t\tdocumentIsHTML = !jQuery.isXMLDoc(document);\n\n\t\t\t// Support: iOS 7 only, IE 9 - 11+\n\t\t\t// Older browsers didn't support unprefixed `matches`.\n\t\t\tmatches = documentElement.matches ||\n\t\t\t\tdocumentElement.webkitMatchesSelector ||\n\t\t\t\tdocumentElement.msMatchesSelector;\n\n\t\t\t// Support: IE 9 - 11+, Edge 12 - 18+\n\t\t\t// Accessing iframe documents after unload throws \"permission denied\" errors (see trac-13936)\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tif (preferredDoc != document &&\n\t\t\t\t(subWindow = document.defaultView) && subWindow.top !== subWindow) {\n\n\t\t\t\t// Support: IE 9 - 11+, Edge 12 - 18+\n\t\t\t\tsubWindow.addEventListener(\"unload\", unloadHandler);\n\t\t\t}\n\n\t\t\t// Support: IE <10\n\t\t\t// Check if getElementById returns elements by name\n\t\t\t// The broken getElementById methods don't pick up programmatically-set names,\n\t\t\t// so use a roundabout getElementsByName test\n\t\t\tsupport.getById = assert(function (el) {\n\t\t\t\tdocumentElement.appendChild(el).id = jQuery.expando;\n\t\t\t\treturn !document.getElementsByName ||\n\t\t\t\t\t!document.getElementsByName(jQuery.expando).length;\n\t\t\t});\n\n\t\t\t// Support: IE 9 only\n\t\t\t// Check to see if it's possible to do matchesSelector\n\t\t\t// on a disconnected node.\n\t\t\tsupport.disconnectedMatch = assert(function (el) {\n\t\t\t\treturn matches.call(el, \"*\");\n\t\t\t});\n\n\t\t\t// Support: IE 9 - 11+, Edge 12 - 18+\n\t\t\t// IE/Edge don't support the :scope pseudo-class.\n\t\t\tsupport.scope = assert(function () {\n\t\t\t\treturn document.querySelectorAll(\":scope\");\n\t\t\t});\n\n\t\t\t// Support: Chrome 105 - 111 only, Safari 15.4 - 16.3 only\n\t\t\t// Make sure the `:has()` argument is parsed unforgivingly.\n\t\t\t// We include `*` in the test to detect buggy implementations that are\n\t\t\t// _selectively_ forgiving (specifically when the list includes at least\n\t\t\t// one valid selector).\n\t\t\t// Note that we treat complete lack of support for `:has()` as if it were\n\t\t\t// spec-compliant support, which is fine because use of `:has()` in such\n\t\t\t// environments will fail in the qSA path and fall back to jQuery traversal\n\t\t\t// anyway.\n\t\t\tsupport.cssHas = assert(function () {\n\t\t\t\ttry {\n\t\t\t\t\tdocument.querySelector(\":has(*,:jqfake)\");\n\t\t\t\t\treturn false;\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t// ID filter and find\n\t\t\tif (support.getById) {\n\t\t\t\tExpr.filter.ID = function (id) {\n\t\t\t\t\tvar attrId = id.replace(runescape, funescape);\n\t\t\t\t\treturn function (elem) {\n\t\t\t\t\t\treturn elem.getAttribute(\"id\") === attrId;\n\t\t\t\t\t};\n\t\t\t\t};\n\t\t\t\tExpr.find.ID = function (id, context) {\n\t\t\t\t\tif (typeof context.getElementById !== \"undefined\" && documentIsHTML) {\n\t\t\t\t\t\tvar elem = context.getElementById(id);\n\t\t\t\t\t\treturn elem ? [elem] : [];\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t} else {\n\t\t\t\tExpr.filter.ID = function (id) {\n\t\t\t\t\tvar attrId = id.replace(runescape, funescape);\n\t\t\t\t\treturn function (elem) {\n\t\t\t\t\t\tvar node = typeof elem.getAttributeNode !== \"undefined\" &&\n\t\t\t\t\t\t\telem.getAttributeNode(\"id\");\n\t\t\t\t\t\treturn node && node.value === attrId;\n\t\t\t\t\t};\n\t\t\t\t};\n\n\t\t\t\t// Support: IE 6 - 7 only\n\t\t\t\t// getElementById is not reliable as a find shortcut\n\t\t\t\tExpr.find.ID = function (id, context) {\n\t\t\t\t\tif (typeof context.getElementById !== \"undefined\" && documentIsHTML) {\n\t\t\t\t\t\tvar node, i, elems,\n\t\t\t\t\t\t\telem = context.getElementById(id);\n\n\t\t\t\t\t\tif (elem) {\n\n\t\t\t\t\t\t\t// Verify the id attribute\n\t\t\t\t\t\t\tnode = elem.getAttributeNode(\"id\");\n\t\t\t\t\t\t\tif (node && node.value === id) {\n\t\t\t\t\t\t\t\treturn [elem];\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Fall back on getElementsByName\n\t\t\t\t\t\t\telems = context.getElementsByName(id);\n\t\t\t\t\t\t\ti = 0;\n\t\t\t\t\t\t\twhile ((elem = elems[i++])) {\n\t\t\t\t\t\t\t\tnode = elem.getAttributeNode(\"id\");\n\t\t\t\t\t\t\t\tif (node && node.value === id) {\n\t\t\t\t\t\t\t\t\treturn [elem];\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn [];\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\n\t\t\t// Tag\n\t\t\tExpr.find.TAG = function (tag, context) {\n\t\t\t\tif (typeof context.getElementsByTagName !== \"undefined\") {\n\t\t\t\t\treturn context.getElementsByTagName(tag);\n\n\t\t\t\t\t// DocumentFragment nodes don't have gEBTN\n\t\t\t\t} else {\n\t\t\t\t\treturn context.querySelectorAll(tag);\n\t\t\t\t}\n\t\t\t};\n\n\t\t\t// Class\n\t\t\tExpr.find.CLASS = function (className, context) {\n\t\t\t\tif (typeof context.getElementsByClassName !== \"undefined\" && documentIsHTML) {\n\t\t\t\t\treturn context.getElementsByClassName(className);\n\t\t\t\t}\n\t\t\t};\n\n\t\t\t/* QSA/matchesSelector\n\t\t\t---------------------------------------------------------------------- */\n\n\t\t\t// QSA and matchesSelector support\n\n\t\t\trbuggyQSA = [];\n\n\t\t\t// Build QSA regex\n\t\t\t// Regex strategy adopted from Diego Perini\n\t\t\tassert(function (el) {\n\n\t\t\t\tvar input;\n\n\t\t\t\tdocumentElement.appendChild(el).innerHTML =\n\t\t\t\t\t\"<a id='\" + expando + \"' href='' disabled='disabled'></a>\" +\n\t\t\t\t\t\"<select id='\" + expando + \"-\\r\\\\' disabled='disabled'>\" +\n\t\t\t\t\t\"<option selected=''></option></select>\";\n\n\t\t\t\t// Support: iOS <=7 - 8 only\n\t\t\t\t// Boolean attributes and \"value\" are not treated correctly in some XML documents\n\t\t\t\tif (!el.querySelectorAll(\"[selected]\").length) {\n\t\t\t\t\trbuggyQSA.push(\"\\\\[\" + whitespace + \"*(?:value|\" + booleans + \")\");\n\t\t\t\t}\n\n\t\t\t\t// Support: iOS <=7 - 8 only\n\t\t\t\tif (!el.querySelectorAll(\"[id~=\" + expando + \"-]\").length) {\n\t\t\t\t\trbuggyQSA.push(\"~=\");\n\t\t\t\t}\n\n\t\t\t\t// Support: iOS 8 only\n\t\t\t\t// https://bugs.webkit.org/show_bug.cgi?id=136851\n\t\t\t\t// In-page `selector#id sibling-combinator selector` fails\n\t\t\t\tif (!el.querySelectorAll(\"a#\" + expando + \"+*\").length) {\n\t\t\t\t\trbuggyQSA.push(\".#.+[+~]\");\n\t\t\t\t}\n\n\t\t\t\t// Support: Chrome <=105+, Firefox <=104+, Safari <=15.4+\n\t\t\t\t// In some of the document kinds, these selectors wouldn't work natively.\n\t\t\t\t// This is probably OK but for backwards compatibility we want to maintain\n\t\t\t\t// handling them through jQuery traversal in jQuery 3.x.\n\t\t\t\tif (!el.querySelectorAll(\":checked\").length) {\n\t\t\t\t\trbuggyQSA.push(\":checked\");\n\t\t\t\t}\n\n\t\t\t\t// Support: Windows 8 Native Apps\n\t\t\t\t// The type and name attributes are restricted during .innerHTML assignment\n\t\t\t\tinput = document.createElement(\"input\");\n\t\t\t\tinput.setAttribute(\"type\", \"hidden\");\n\t\t\t\tel.appendChild(input).setAttribute(\"name\", \"D\");\n\n\t\t\t\t// Support: IE 9 - 11+\n\t\t\t\t// IE's :disabled selector does not pick up the children of disabled fieldsets\n\t\t\t\t// Support: Chrome <=105+, Firefox <=104+, Safari <=15.4+\n\t\t\t\t// In some of the document kinds, these selectors wouldn't work natively.\n\t\t\t\t// This is probably OK but for backwards compatibility we want to maintain\n\t\t\t\t// handling them through jQuery traversal in jQuery 3.x.\n\t\t\t\tdocumentElement.appendChild(el).disabled = true;\n\t\t\t\tif (el.querySelectorAll(\":disabled\").length !== 2) {\n\t\t\t\t\trbuggyQSA.push(\":enabled\", \":disabled\");\n\t\t\t\t}\n\n\t\t\t\t// Support: IE 11+, Edge 15 - 18+\n\t\t\t\t// IE 11/Edge don't find elements on a `[name='']` query in some cases.\n\t\t\t\t// Adding a temporary attribute to the document before the selection works\n\t\t\t\t// around the issue.\n\t\t\t\t// Interestingly, IE 10 & older don't seem to have the issue.\n\t\t\t\tinput = document.createElement(\"input\");\n\t\t\t\tinput.setAttribute(\"name\", \"\");\n\t\t\t\tel.appendChild(input);\n\t\t\t\tif (!el.querySelectorAll(\"[name='']\").length) {\n\t\t\t\t\trbuggyQSA.push(\"\\\\[\" + whitespace + \"*name\" + whitespace + \"*=\" +\n\t\t\t\t\t\twhitespace + \"*(?:''|\\\"\\\")\");\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tif (!support.cssHas) {\n\n\t\t\t\t// Support: Chrome 105 - 110+, Safari 15.4 - 16.3+\n\t\t\t\t// Our regular `try-catch` mechanism fails to detect natively-unsupported\n\t\t\t\t// pseudo-classes inside `:has()` (such as `:has(:contains(\"Foo\"))`)\n\t\t\t\t// in browsers that parse the `:has()` argument as a forgiving selector list.\n\t\t\t\t// https://drafts.csswg.org/selectors/#relational now requires the argument\n\t\t\t\t// to be parsed unforgivingly, but browsers have not yet fully adjusted.\n\t\t\t\trbuggyQSA.push(\":has\");\n\t\t\t}\n\n\t\t\trbuggyQSA = rbuggyQSA.length && new RegExp(rbuggyQSA.join(\"|\"));\n\n\t\t\t/* Sorting\n\t\t\t---------------------------------------------------------------------- */\n\n\t\t\t// Document order sorting\n\t\t\tsortOrder = function (a, b) {\n\n\t\t\t\t// Flag for duplicate removal\n\t\t\t\tif (a === b) {\n\t\t\t\t\thasDuplicate = true;\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\n\t\t\t\t// Sort on method existence if only one input has compareDocumentPosition\n\t\t\t\tvar compare = !a.compareDocumentPosition - !b.compareDocumentPosition;\n\t\t\t\tif (compare) {\n\t\t\t\t\treturn compare;\n\t\t\t\t}\n\n\t\t\t\t// Calculate position if both inputs belong to the same document\n\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\tcompare = (a.ownerDocument || a) == (b.ownerDocument || b) ?\n\t\t\t\t\ta.compareDocumentPosition(b) :\n\n\t\t\t\t\t// Otherwise we know they are disconnected\n\t\t\t\t\t1;\n\n\t\t\t\t// Disconnected nodes\n\t\t\t\tif (compare & 1 ||\n\t\t\t\t\t(!support.sortDetached && b.compareDocumentPosition(a) === compare)) {\n\n\t\t\t\t\t// Choose the first element that is related to our preferred document\n\t\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\tif (a === document || a.ownerDocument == preferredDoc &&\n\t\t\t\t\t\tfind.contains(preferredDoc, a)) {\n\t\t\t\t\t\treturn -1;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\tif (b === document || b.ownerDocument == preferredDoc &&\n\t\t\t\t\t\tfind.contains(preferredDoc, b)) {\n\t\t\t\t\t\treturn 1;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Maintain original order\n\t\t\t\t\treturn sortInput ?\n\t\t\t\t\t\t(indexOf.call(sortInput, a) - indexOf.call(sortInput, b)) :\n\t\t\t\t\t\t0;\n\t\t\t\t}\n\n\t\t\t\treturn compare & 4 ? -1 : 1;\n\t\t\t};\n\n\t\t\treturn document;\n\t\t}\n\n\t\tfind.matches = function (expr, elements) {\n\t\t\treturn find(expr, null, null, elements);\n\t\t};\n\n\t\tfind.matchesSelector = function (elem, expr) {\n\t\t\tsetDocument(elem);\n\n\t\t\tif (documentIsHTML &&\n\t\t\t\t!nonnativeSelectorCache[expr + \" \"] &&\n\t\t\t\t(!rbuggyQSA || !rbuggyQSA.test(expr))) {\n\n\t\t\t\ttry {\n\t\t\t\t\tvar ret = matches.call(elem, expr);\n\n\t\t\t\t\t// IE 9's matchesSelector returns false on disconnected nodes\n\t\t\t\t\tif (ret || support.disconnectedMatch ||\n\n\t\t\t\t\t\t// As well, disconnected nodes are said to be in a document\n\t\t\t\t\t\t// fragment in IE 9\n\t\t\t\t\t\telem.document && elem.document.nodeType !== 11) {\n\t\t\t\t\t\treturn ret;\n\t\t\t\t\t}\n\t\t\t\t} catch (e) {\n\t\t\t\t\tnonnativeSelectorCache(expr, true);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn find(expr, document, null, [elem]).length > 0;\n\t\t};\n\n\t\tfind.contains = function (context, elem) {\n\n\t\t\t// Set document vars if needed\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tif ((context.ownerDocument || context) != document) {\n\t\t\t\tsetDocument(context);\n\t\t\t}\n\t\t\treturn jQuery.contains(context, elem);\n\t\t};\n\n\n\t\tfind.attr = function (elem, name) {\n\n\t\t\t// Set document vars if needed\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tif ((elem.ownerDocument || elem) != document) {\n\t\t\t\tsetDocument(elem);\n\t\t\t}\n\n\t\t\tvar fn = Expr.attrHandle[name.toLowerCase()],\n\n\t\t\t\t// Don't get fooled by Object.prototype properties (see trac-13807)\n\t\t\t\tval = fn && hasOwn.call(Expr.attrHandle, name.toLowerCase()) ?\n\t\t\t\t\tfn(elem, name, !documentIsHTML) :\n\t\t\t\t\tundefined;\n\n\t\t\tif (val !== undefined) {\n\t\t\t\treturn val;\n\t\t\t}\n\n\t\t\treturn elem.getAttribute(name);\n\t\t};\n\n\t\tfind.error = function (msg) {\n\t\t\tthrow new Error(\"Syntax error, unrecognized expression: \" + msg);\n\t\t};\n\n\t\t/**\n\t\t * Document sorting and removing duplicates\n\t\t * @param {ArrayLike} results\n\t\t */\n\t\tjQuery.uniqueSort = function (results) {\n\t\t\tvar elem,\n\t\t\t\tduplicates = [],\n\t\t\t\tj = 0,\n\t\t\t\ti = 0;\n\n\t\t\t// Unless we *know* we can detect duplicates, assume their presence\n\t\t\t//\n\t\t\t// Support: Android <=4.0+\n\t\t\t// Testing for detecting duplicates is unpredictable so instead assume we can't\n\t\t\t// depend on duplicate detection in all browsers without a stable sort.\n\t\t\thasDuplicate = !support.sortStable;\n\t\t\tsortInput = !support.sortStable && slice.call(results, 0);\n\t\t\tsort.call(results, sortOrder);\n\n\t\t\tif (hasDuplicate) {\n\t\t\t\twhile ((elem = results[i++])) {\n\t\t\t\t\tif (elem === results[i]) {\n\t\t\t\t\t\tj = duplicates.push(i);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\twhile (j--) {\n\t\t\t\t\tsplice.call(results, duplicates[j], 1);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Clear input after sorting to release objects\n\t\t\t// See https://github.com/jquery/sizzle/pull/225\n\t\t\tsortInput = null;\n\n\t\t\treturn results;\n\t\t};\n\n\t\tjQuery.fn.uniqueSort = function () {\n\t\t\treturn this.pushStack(jQuery.uniqueSort(slice.apply(this)));\n\t\t};\n\n\t\tExpr = jQuery.expr = {\n\n\t\t\t// Can be adjusted by the user\n\t\t\tcacheLength: 50,\n\n\t\t\tcreatePseudo: markFunction,\n\n\t\t\tmatch: matchExpr,\n\n\t\t\tattrHandle: {},\n\n\t\t\tfind: {},\n\n\t\t\trelative: {\n\t\t\t\t\">\": { dir: \"parentNode\", first: true },\n\t\t\t\t\" \": { dir: \"parentNode\" },\n\t\t\t\t\"+\": { dir: \"previousSibling\", first: true },\n\t\t\t\t\"~\": { dir: \"previousSibling\" }\n\t\t\t},\n\n\t\t\tpreFilter: {\n\t\t\t\tATTR: function (match) {\n\t\t\t\t\tmatch[1] = match[1].replace(runescape, funescape);\n\n\t\t\t\t\t// Move the given value to match[3] whether quoted or unquoted\n\t\t\t\t\tmatch[3] = (match[3] || match[4] || match[5] || \"\")\n\t\t\t\t\t\t.replace(runescape, funescape);\n\n\t\t\t\t\tif (match[2] === \"~=\") {\n\t\t\t\t\t\tmatch[3] = \" \" + match[3] + \" \";\n\t\t\t\t\t}\n\n\t\t\t\t\treturn match.slice(0, 4);\n\t\t\t\t},\n\n\t\t\t\tCHILD: function (match) {\n\n\t\t\t\t\t/* matches from matchExpr[\"CHILD\"]\n\t\t\t\t\t\t1 type (only|nth|...)\n\t\t\t\t\t\t2 what (child|of-type)\n\t\t\t\t\t\t3 argument (even|odd|\\d*|\\d*n([+-]\\d+)?|...)\n\t\t\t\t\t\t4 xn-component of xn+y argument ([+-]?\\d*n|)\n\t\t\t\t\t\t5 sign of xn-component\n\t\t\t\t\t\t6 x of xn-component\n\t\t\t\t\t\t7 sign of y-component\n\t\t\t\t\t\t8 y of y-component\n\t\t\t\t\t*/\n\t\t\t\t\tmatch[1] = match[1].toLowerCase();\n\n\t\t\t\t\tif (match[1].slice(0, 3) === \"nth\") {\n\n\t\t\t\t\t\t// nth-* requires argument\n\t\t\t\t\t\tif (!match[3]) {\n\t\t\t\t\t\t\tfind.error(match[0]);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// numeric x and y parameters for Expr.filter.CHILD\n\t\t\t\t\t\t// remember that false/true cast respectively to 0/1\n\t\t\t\t\t\tmatch[4] = +(match[4] ?\n\t\t\t\t\t\t\tmatch[5] + (match[6] || 1) :\n\t\t\t\t\t\t\t2 * (match[3] === \"even\" || match[3] === \"odd\")\n\t\t\t\t\t\t);\n\t\t\t\t\t\tmatch[5] = +((match[7] + match[8]) || match[3] === \"odd\");\n\n\t\t\t\t\t\t// other types prohibit arguments\n\t\t\t\t\t} else if (match[3]) {\n\t\t\t\t\t\tfind.error(match[0]);\n\t\t\t\t\t}\n\n\t\t\t\t\treturn match;\n\t\t\t\t},\n\n\t\t\t\tPSEUDO: function (match) {\n\t\t\t\t\tvar excess,\n\t\t\t\t\t\tunquoted = !match[6] && match[2];\n\n\t\t\t\t\tif (matchExpr.CHILD.test(match[0])) {\n\t\t\t\t\t\treturn null;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Accept quoted arguments as-is\n\t\t\t\t\tif (match[3]) {\n\t\t\t\t\t\tmatch[2] = match[4] || match[5] || \"\";\n\n\t\t\t\t\t\t// Strip excess characters from unquoted arguments\n\t\t\t\t\t} else if (unquoted && rpseudo.test(unquoted) &&\n\n\t\t\t\t\t\t// Get excess from tokenize (recursively)\n\t\t\t\t\t\t(excess = tokenize(unquoted, true)) &&\n\n\t\t\t\t\t\t// advance to the next closing parenthesis\n\t\t\t\t\t\t(excess = unquoted.indexOf(\")\", unquoted.length - excess) - unquoted.length)) {\n\n\t\t\t\t\t\t// excess is a negative index\n\t\t\t\t\t\tmatch[0] = match[0].slice(0, excess);\n\t\t\t\t\t\tmatch[2] = unquoted.slice(0, excess);\n\t\t\t\t\t}\n\n\t\t\t\t\t// Return only captures needed by the pseudo filter method (type and argument)\n\t\t\t\t\treturn match.slice(0, 3);\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tfilter: {\n\n\t\t\t\tTAG: function (nodeNameSelector) {\n\t\t\t\t\tvar expectedNodeName = nodeNameSelector.replace(runescape, funescape).toLowerCase();\n\t\t\t\t\treturn nodeNameSelector === \"*\" ?\n\t\t\t\t\t\tfunction () {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t} :\n\t\t\t\t\t\tfunction (elem) {\n\t\t\t\t\t\t\treturn nodeName(elem, expectedNodeName);\n\t\t\t\t\t\t};\n\t\t\t\t},\n\n\t\t\t\tCLASS: function (className) {\n\t\t\t\t\tvar pattern = classCache[className + \" \"];\n\n\t\t\t\t\treturn pattern ||\n\t\t\t\t\t\t(pattern = new RegExp(\"(^|\" + whitespace + \")\" + className +\n\t\t\t\t\t\t\t\"(\" + whitespace + \"|$)\")) &&\n\t\t\t\t\t\tclassCache(className, function (elem) {\n\t\t\t\t\t\t\treturn pattern.test(\n\t\t\t\t\t\t\t\ttypeof elem.className === \"string\" && elem.className ||\n\t\t\t\t\t\t\t\ttypeof elem.getAttribute !== \"undefined\" &&\n\t\t\t\t\t\t\t\telem.getAttribute(\"class\") ||\n\t\t\t\t\t\t\t\t\"\"\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t});\n\t\t\t\t},\n\n\t\t\t\tATTR: function (name, operator, check) {\n\t\t\t\t\treturn function (elem) {\n\t\t\t\t\t\tvar result = find.attr(elem, name);\n\n\t\t\t\t\t\tif (result == null) {\n\t\t\t\t\t\t\treturn operator === \"!=\";\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!operator) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tresult += \"\";\n\n\t\t\t\t\t\tif (operator === \"=\") {\n\t\t\t\t\t\t\treturn result === check;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (operator === \"!=\") {\n\t\t\t\t\t\t\treturn result !== check;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (operator === \"^=\") {\n\t\t\t\t\t\t\treturn check && result.indexOf(check) === 0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (operator === \"*=\") {\n\t\t\t\t\t\t\treturn check && result.indexOf(check) > -1;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (operator === \"$=\") {\n\t\t\t\t\t\t\treturn check && result.slice(-check.length) === check;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (operator === \"~=\") {\n\t\t\t\t\t\t\treturn (\" \" + result.replace(rwhitespace, \" \") + \" \")\n\t\t\t\t\t\t\t\t.indexOf(check) > -1;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (operator === \"|=\") {\n\t\t\t\t\t\t\treturn result === check || result.slice(0, check.length + 1) === check + \"-\";\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t};\n\t\t\t\t},\n\n\t\t\t\tCHILD: function (type, what, _argument, first, last) {\n\t\t\t\t\tvar simple = type.slice(0, 3) !== \"nth\",\n\t\t\t\t\t\tforward = type.slice(-4) !== \"last\",\n\t\t\t\t\t\tofType = what === \"of-type\";\n\n\t\t\t\t\treturn first === 1 && last === 0 ?\n\n\t\t\t\t\t\t// Shortcut for :nth-*(n)\n\t\t\t\t\t\tfunction (elem) {\n\t\t\t\t\t\t\treturn !!elem.parentNode;\n\t\t\t\t\t\t} :\n\n\t\t\t\t\t\tfunction (elem, _context, xml) {\n\t\t\t\t\t\t\tvar cache, outerCache, node, nodeIndex, start,\n\t\t\t\t\t\t\t\tdir = simple !== forward ? \"nextSibling\" : \"previousSibling\",\n\t\t\t\t\t\t\t\tparent = elem.parentNode,\n\t\t\t\t\t\t\t\tname = ofType && elem.nodeName.toLowerCase(),\n\t\t\t\t\t\t\t\tuseCache = !xml && !ofType,\n\t\t\t\t\t\t\t\tdiff = false;\n\n\t\t\t\t\t\t\tif (parent) {\n\n\t\t\t\t\t\t\t\t// :(first|last|only)-(child|of-type)\n\t\t\t\t\t\t\t\tif (simple) {\n\t\t\t\t\t\t\t\t\twhile (dir) {\n\t\t\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\t\t\twhile ((node = node[dir])) {\n\t\t\t\t\t\t\t\t\t\t\tif (ofType ?\n\t\t\t\t\t\t\t\t\t\t\t\tnodeName(node, name) :\n\t\t\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1) {\n\n\t\t\t\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t// Reverse direction for :only-* (if we haven't yet done so)\n\t\t\t\t\t\t\t\t\t\tstart = dir = type === \"only\" && !start && \"nextSibling\";\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tstart = [forward ? parent.firstChild : parent.lastChild];\n\n\t\t\t\t\t\t\t\t// non-xml :nth-child(...) stores cache data on `parent`\n\t\t\t\t\t\t\t\tif (forward && useCache) {\n\n\t\t\t\t\t\t\t\t\t// Seek `elem` from a previously-cached index\n\t\t\t\t\t\t\t\t\touterCache = parent[expando] || (parent[expando] = {});\n\t\t\t\t\t\t\t\t\tcache = outerCache[type] || [];\n\t\t\t\t\t\t\t\t\tnodeIndex = cache[0] === dirruns && cache[1];\n\t\t\t\t\t\t\t\t\tdiff = nodeIndex && cache[2];\n\t\t\t\t\t\t\t\t\tnode = nodeIndex && parent.childNodes[nodeIndex];\n\n\t\t\t\t\t\t\t\t\twhile ((node = ++nodeIndex && node && node[dir] ||\n\n\t\t\t\t\t\t\t\t\t\t// Fallback to seeking `elem` from the start\n\t\t\t\t\t\t\t\t\t\t(diff = nodeIndex = 0) || start.pop())) {\n\n\t\t\t\t\t\t\t\t\t\t// When found, cache indexes on `parent` and break\n\t\t\t\t\t\t\t\t\t\tif (node.nodeType === 1 && ++diff && node === elem) {\n\t\t\t\t\t\t\t\t\t\t\touterCache[type] = [dirruns, nodeIndex, diff];\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t// Use previously-cached element index if available\n\t\t\t\t\t\t\t\t\tif (useCache) {\n\t\t\t\t\t\t\t\t\t\touterCache = elem[expando] || (elem[expando] = {});\n\t\t\t\t\t\t\t\t\t\tcache = outerCache[type] || [];\n\t\t\t\t\t\t\t\t\t\tnodeIndex = cache[0] === dirruns && cache[1];\n\t\t\t\t\t\t\t\t\t\tdiff = nodeIndex;\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// xml :nth-child(...)\n\t\t\t\t\t\t\t\t\t// or :nth-last-child(...) or :nth(-last)?-of-type(...)\n\t\t\t\t\t\t\t\t\tif (diff === false) {\n\n\t\t\t\t\t\t\t\t\t\t// Use the same loop as above to seek `elem` from the start\n\t\t\t\t\t\t\t\t\t\twhile ((node = ++nodeIndex && node && node[dir] ||\n\t\t\t\t\t\t\t\t\t\t\t(diff = nodeIndex = 0) || start.pop())) {\n\n\t\t\t\t\t\t\t\t\t\t\tif ((ofType ?\n\t\t\t\t\t\t\t\t\t\t\t\tnodeName(node, name) :\n\t\t\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1) &&\n\t\t\t\t\t\t\t\t\t\t\t\t++diff) {\n\n\t\t\t\t\t\t\t\t\t\t\t\t// Cache the index of each encountered element\n\t\t\t\t\t\t\t\t\t\t\t\tif (useCache) {\n\t\t\t\t\t\t\t\t\t\t\t\t\touterCache = node[expando] ||\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t(node[expando] = {});\n\t\t\t\t\t\t\t\t\t\t\t\t\touterCache[type] = [dirruns, diff];\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\tif (node === elem) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t// Incorporate the offset, then check against cycle size\n\t\t\t\t\t\t\t\tdiff -= last;\n\t\t\t\t\t\t\t\treturn diff === first || (diff % first === 0 && diff / first >= 0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\t\t\t\t},\n\n\t\t\t\tPSEUDO: function (pseudo, argument) {\n\n\t\t\t\t\t// pseudo-class names are case-insensitive\n\t\t\t\t\t// https://www.w3.org/TR/selectors/#pseudo-classes\n\t\t\t\t\t// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters\n\t\t\t\t\t// Remember that setFilters inherits from pseudos\n\t\t\t\t\tvar args,\n\t\t\t\t\t\tfn = Expr.pseudos[pseudo] || Expr.setFilters[pseudo.toLowerCase()] ||\n\t\t\t\t\t\t\tfind.error(\"unsupported pseudo: \" + pseudo);\n\n\t\t\t\t\t// The user may use createPseudo to indicate that\n\t\t\t\t\t// arguments are needed to create the filter function\n\t\t\t\t\t// just as jQuery does\n\t\t\t\t\tif (fn[expando]) {\n\t\t\t\t\t\treturn fn(argument);\n\t\t\t\t\t}\n\n\t\t\t\t\t// But maintain support for old signatures\n\t\t\t\t\tif (fn.length > 1) {\n\t\t\t\t\t\targs = [pseudo, pseudo, \"\", argument];\n\t\t\t\t\t\treturn Expr.setFilters.hasOwnProperty(pseudo.toLowerCase()) ?\n\t\t\t\t\t\t\tmarkFunction(function (seed, matches) {\n\t\t\t\t\t\t\t\tvar idx,\n\t\t\t\t\t\t\t\t\tmatched = fn(seed, argument),\n\t\t\t\t\t\t\t\t\ti = matched.length;\n\t\t\t\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\t\t\t\tidx = indexOf.call(seed, matched[i]);\n\t\t\t\t\t\t\t\t\tseed[idx] = !(matches[idx] = matched[i]);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}) :\n\t\t\t\t\t\t\tfunction (elem) {\n\t\t\t\t\t\t\t\treturn fn(elem, 0, args);\n\t\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\treturn fn;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tpseudos: {\n\n\t\t\t\t// Potentially complex pseudos\n\t\t\t\tnot: markFunction(function (selector) {\n\n\t\t\t\t\t// Trim the selector passed to compile\n\t\t\t\t\t// to avoid treating leading and trailing\n\t\t\t\t\t// spaces as combinators\n\t\t\t\t\tvar input = [],\n\t\t\t\t\t\tresults = [],\n\t\t\t\t\t\tmatcher = compile(selector.replace(rtrimCSS, \"$1\"));\n\n\t\t\t\t\treturn matcher[expando] ?\n\t\t\t\t\t\tmarkFunction(function (seed, matches, _context, xml) {\n\t\t\t\t\t\t\tvar elem,\n\t\t\t\t\t\t\t\tunmatched = matcher(seed, null, xml, []),\n\t\t\t\t\t\t\t\ti = seed.length;\n\n\t\t\t\t\t\t\t// Match elements unmatched by `matcher`\n\t\t\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\t\t\tif ((elem = unmatched[i])) {\n\t\t\t\t\t\t\t\t\tseed[i] = !(matches[i] = elem);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}) :\n\t\t\t\t\t\tfunction (elem, _context, xml) {\n\t\t\t\t\t\t\tinput[0] = elem;\n\t\t\t\t\t\t\tmatcher(input, null, xml, results);\n\n\t\t\t\t\t\t\t// Don't keep the element\n\t\t\t\t\t\t\t// (see https://github.com/jquery/sizzle/issues/299)\n\t\t\t\t\t\t\tinput[0] = null;\n\t\t\t\t\t\t\treturn !results.pop();\n\t\t\t\t\t\t};\n\t\t\t\t}),\n\n\t\t\t\thas: markFunction(function (selector) {\n\t\t\t\t\treturn function (elem) {\n\t\t\t\t\t\treturn find(selector, elem).length > 0;\n\t\t\t\t\t};\n\t\t\t\t}),\n\n\t\t\t\tcontains: markFunction(function (text) {\n\t\t\t\t\ttext = text.replace(runescape, funescape);\n\t\t\t\t\treturn function (elem) {\n\t\t\t\t\t\treturn (elem.textContent || jQuery.text(elem)).indexOf(text) > -1;\n\t\t\t\t\t};\n\t\t\t\t}),\n\n\t\t\t\t// \"Whether an element is represented by a :lang() selector\n\t\t\t\t// is based solely on the element's language value\n\t\t\t\t// being equal to the identifier C,\n\t\t\t\t// or beginning with the identifier C immediately followed by \"-\".\n\t\t\t\t// The matching of C against the element's language value is performed case-insensitively.\n\t\t\t\t// The identifier C does not have to be a valid language name.\"\n\t\t\t\t// https://www.w3.org/TR/selectors/#lang-pseudo\n\t\t\t\tlang: markFunction(function (lang) {\n\n\t\t\t\t\t// lang value must be a valid identifier\n\t\t\t\t\tif (!ridentifier.test(lang || \"\")) {\n\t\t\t\t\t\tfind.error(\"unsupported lang: \" + lang);\n\t\t\t\t\t}\n\t\t\t\t\tlang = lang.replace(runescape, funescape).toLowerCase();\n\t\t\t\t\treturn function (elem) {\n\t\t\t\t\t\tvar elemLang;\n\t\t\t\t\t\tdo {\n\t\t\t\t\t\t\tif ((elemLang = documentIsHTML ?\n\t\t\t\t\t\t\t\telem.lang :\n\t\t\t\t\t\t\t\telem.getAttribute(\"xml:lang\") || elem.getAttribute(\"lang\"))) {\n\n\t\t\t\t\t\t\t\telemLang = elemLang.toLowerCase();\n\t\t\t\t\t\t\t\treturn elemLang === lang || elemLang.indexOf(lang + \"-\") === 0;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} while ((elem = elem.parentNode) && elem.nodeType === 1);\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t};\n\t\t\t\t}),\n\n\t\t\t\t// Miscellaneous\n\t\t\t\ttarget: function (elem) {\n\t\t\t\t\tvar hash = window.location && window.location.hash;\n\t\t\t\t\treturn hash && hash.slice(1) === elem.id;\n\t\t\t\t},\n\n\t\t\t\troot: function (elem) {\n\t\t\t\t\treturn elem === documentElement;\n\t\t\t\t},\n\n\t\t\t\tfocus: function (elem) {\n\t\t\t\t\treturn elem === safeActiveElement() &&\n\t\t\t\t\t\tdocument.hasFocus() &&\n\t\t\t\t\t\t!!(elem.type || elem.href || ~elem.tabIndex);\n\t\t\t\t},\n\n\t\t\t\t// Boolean properties\n\t\t\t\tenabled: createDisabledPseudo(false),\n\t\t\t\tdisabled: createDisabledPseudo(true),\n\n\t\t\t\tchecked: function (elem) {\n\n\t\t\t\t\t// In CSS3, :checked should return both checked and selected elements\n\t\t\t\t\t// https://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\t\t\treturn (nodeName(elem, \"input\") && !!elem.checked) ||\n\t\t\t\t\t\t(nodeName(elem, \"option\") && !!elem.selected);\n\t\t\t\t},\n\n\t\t\t\tselected: function (elem) {\n\n\t\t\t\t\t// Support: IE <=11+\n\t\t\t\t\t// Accessing the selectedIndex property\n\t\t\t\t\t// forces the browser to treat the default option as\n\t\t\t\t\t// selected when in an optgroup.\n\t\t\t\t\tif (elem.parentNode) {\n\t\t\t\t\t\t// eslint-disable-next-line no-unused-expressions\n\t\t\t\t\t\telem.parentNode.selectedIndex;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn elem.selected === true;\n\t\t\t\t},\n\n\t\t\t\t// Contents\n\t\t\t\tempty: function (elem) {\n\n\t\t\t\t\t// https://www.w3.org/TR/selectors/#empty-pseudo\n\t\t\t\t\t// :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),\n\t\t\t\t\t//   but not by others (comment: 8; processing instruction: 7; etc.)\n\t\t\t\t\t// nodeType < 6 works because attributes (2) do not appear as children\n\t\t\t\t\tfor (elem = elem.firstChild; elem; elem = elem.nextSibling) {\n\t\t\t\t\t\tif (elem.nodeType < 6) {\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn true;\n\t\t\t\t},\n\n\t\t\t\tparent: function (elem) {\n\t\t\t\t\treturn !Expr.pseudos.empty(elem);\n\t\t\t\t},\n\n\t\t\t\t// Element/input types\n\t\t\t\theader: function (elem) {\n\t\t\t\t\treturn rheader.test(elem.nodeName);\n\t\t\t\t},\n\n\t\t\t\tinput: function (elem) {\n\t\t\t\t\treturn rinputs.test(elem.nodeName);\n\t\t\t\t},\n\n\t\t\t\tbutton: function (elem) {\n\t\t\t\t\treturn nodeName(elem, \"input\") && elem.type === \"button\" ||\n\t\t\t\t\t\tnodeName(elem, \"button\");\n\t\t\t\t},\n\n\t\t\t\ttext: function (elem) {\n\t\t\t\t\tvar attr;\n\t\t\t\t\treturn nodeName(elem, \"input\") && elem.type === \"text\" &&\n\n\t\t\t\t\t\t// Support: IE <10 only\n\t\t\t\t\t\t// New HTML5 attribute values (e.g., \"search\") appear\n\t\t\t\t\t\t// with elem.type === \"text\"\n\t\t\t\t\t\t((attr = elem.getAttribute(\"type\")) == null ||\n\t\t\t\t\t\t\tattr.toLowerCase() === \"text\");\n\t\t\t\t},\n\n\t\t\t\t// Position-in-collection\n\t\t\t\tfirst: createPositionalPseudo(function () {\n\t\t\t\t\treturn [0];\n\t\t\t\t}),\n\n\t\t\t\tlast: createPositionalPseudo(function (_matchIndexes, length) {\n\t\t\t\t\treturn [length - 1];\n\t\t\t\t}),\n\n\t\t\t\teq: createPositionalPseudo(function (_matchIndexes, length, argument) {\n\t\t\t\t\treturn [argument < 0 ? argument + length : argument];\n\t\t\t\t}),\n\n\t\t\t\teven: createPositionalPseudo(function (matchIndexes, length) {\n\t\t\t\t\tvar i = 0;\n\t\t\t\t\tfor (; i < length; i += 2) {\n\t\t\t\t\t\tmatchIndexes.push(i);\n\t\t\t\t\t}\n\t\t\t\t\treturn matchIndexes;\n\t\t\t\t}),\n\n\t\t\t\todd: createPositionalPseudo(function (matchIndexes, length) {\n\t\t\t\t\tvar i = 1;\n\t\t\t\t\tfor (; i < length; i += 2) {\n\t\t\t\t\t\tmatchIndexes.push(i);\n\t\t\t\t\t}\n\t\t\t\t\treturn matchIndexes;\n\t\t\t\t}),\n\n\t\t\t\tlt: createPositionalPseudo(function (matchIndexes, length, argument) {\n\t\t\t\t\tvar i;\n\n\t\t\t\t\tif (argument < 0) {\n\t\t\t\t\t\ti = argument + length;\n\t\t\t\t\t} else if (argument > length) {\n\t\t\t\t\t\ti = length;\n\t\t\t\t\t} else {\n\t\t\t\t\t\ti = argument;\n\t\t\t\t\t}\n\n\t\t\t\t\tfor (; --i >= 0;) {\n\t\t\t\t\t\tmatchIndexes.push(i);\n\t\t\t\t\t}\n\t\t\t\t\treturn matchIndexes;\n\t\t\t\t}),\n\n\t\t\t\tgt: createPositionalPseudo(function (matchIndexes, length, argument) {\n\t\t\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\t\t\tfor (; ++i < length;) {\n\t\t\t\t\t\tmatchIndexes.push(i);\n\t\t\t\t\t}\n\t\t\t\t\treturn matchIndexes;\n\t\t\t\t})\n\t\t\t}\n\t\t};\n\n\t\tExpr.pseudos.nth = Expr.pseudos.eq;\n\n\t\t// Add button/input type pseudos\n\t\tfor (i in { radio: true, checkbox: true, file: true, password: true, image: true }) {\n\t\t\tExpr.pseudos[i] = createInputPseudo(i);\n\t\t}\n\t\tfor (i in { submit: true, reset: true }) {\n\t\t\tExpr.pseudos[i] = createButtonPseudo(i);\n\t\t}\n\n\t\t// Easy API for creating new setFilters\n\t\tfunction setFilters() { }\n\t\tsetFilters.prototype = Expr.filters = Expr.pseudos;\n\t\tExpr.setFilters = new setFilters();\n\n\t\tfunction tokenize(selector, parseOnly) {\n\t\t\tvar matched, match, tokens, type,\n\t\t\t\tsoFar, groups, preFilters,\n\t\t\t\tcached = tokenCache[selector + \" \"];\n\n\t\t\tif (cached) {\n\t\t\t\treturn parseOnly ? 0 : cached.slice(0);\n\t\t\t}\n\n\t\t\tsoFar = selector;\n\t\t\tgroups = [];\n\t\t\tpreFilters = Expr.preFilter;\n\n\t\t\twhile (soFar) {\n\n\t\t\t\t// Comma and first run\n\t\t\t\tif (!matched || (match = rcomma.exec(soFar))) {\n\t\t\t\t\tif (match) {\n\n\t\t\t\t\t\t// Don't consume trailing commas as valid\n\t\t\t\t\t\tsoFar = soFar.slice(match[0].length) || soFar;\n\t\t\t\t\t}\n\t\t\t\t\tgroups.push((tokens = []));\n\t\t\t\t}\n\n\t\t\t\tmatched = false;\n\n\t\t\t\t// Combinators\n\t\t\t\tif ((match = rleadingCombinator.exec(soFar))) {\n\t\t\t\t\tmatched = match.shift();\n\t\t\t\t\ttokens.push({\n\t\t\t\t\t\tvalue: matched,\n\n\t\t\t\t\t\t// Cast descendant combinators to space\n\t\t\t\t\t\ttype: match[0].replace(rtrimCSS, \" \")\n\t\t\t\t\t});\n\t\t\t\t\tsoFar = soFar.slice(matched.length);\n\t\t\t\t}\n\n\t\t\t\t// Filters\n\t\t\t\tfor (type in Expr.filter) {\n\t\t\t\t\tif ((match = matchExpr[type].exec(soFar)) && (!preFilters[type] ||\n\t\t\t\t\t\t(match = preFilters[type](match)))) {\n\t\t\t\t\t\tmatched = match.shift();\n\t\t\t\t\t\ttokens.push({\n\t\t\t\t\t\t\tvalue: matched,\n\t\t\t\t\t\t\ttype: type,\n\t\t\t\t\t\t\tmatches: match\n\t\t\t\t\t\t});\n\t\t\t\t\t\tsoFar = soFar.slice(matched.length);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (!matched) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Return the length of the invalid excess\n\t\t\t// if we're just parsing\n\t\t\t// Otherwise, throw an error or return tokens\n\t\t\tif (parseOnly) {\n\t\t\t\treturn soFar.length;\n\t\t\t}\n\n\t\t\treturn soFar ?\n\t\t\t\tfind.error(selector) :\n\n\t\t\t\t// Cache the tokens\n\t\t\t\ttokenCache(selector, groups).slice(0);\n\t\t}\n\n\t\tfunction toSelector(tokens) {\n\t\t\tvar i = 0,\n\t\t\t\tlen = tokens.length,\n\t\t\t\tselector = \"\";\n\t\t\tfor (; i < len; i++) {\n\t\t\t\tselector += tokens[i].value;\n\t\t\t}\n\t\t\treturn selector;\n\t\t}\n\n\t\tfunction addCombinator(matcher, combinator, base) {\n\t\t\tvar dir = combinator.dir,\n\t\t\t\tskip = combinator.next,\n\t\t\t\tkey = skip || dir,\n\t\t\t\tcheckNonElements = base && key === \"parentNode\",\n\t\t\t\tdoneName = done++;\n\n\t\t\treturn combinator.first ?\n\n\t\t\t\t// Check against closest ancestor/preceding element\n\t\t\t\tfunction (elem, context, xml) {\n\t\t\t\t\twhile ((elem = elem[dir])) {\n\t\t\t\t\t\tif (elem.nodeType === 1 || checkNonElements) {\n\t\t\t\t\t\t\treturn matcher(elem, context, xml);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn false;\n\t\t\t\t} :\n\n\t\t\t\t// Check against all ancestor/preceding elements\n\t\t\t\tfunction (elem, context, xml) {\n\t\t\t\t\tvar oldCache, outerCache,\n\t\t\t\t\t\tnewCache = [dirruns, doneName];\n\n\t\t\t\t\t// We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching\n\t\t\t\t\tif (xml) {\n\t\t\t\t\t\twhile ((elem = elem[dir])) {\n\t\t\t\t\t\t\tif (elem.nodeType === 1 || checkNonElements) {\n\t\t\t\t\t\t\t\tif (matcher(elem, context, xml)) {\n\t\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\twhile ((elem = elem[dir])) {\n\t\t\t\t\t\t\tif (elem.nodeType === 1 || checkNonElements) {\n\t\t\t\t\t\t\t\touterCache = elem[expando] || (elem[expando] = {});\n\n\t\t\t\t\t\t\t\tif (skip && nodeName(elem, skip)) {\n\t\t\t\t\t\t\t\t\telem = elem[dir] || elem;\n\t\t\t\t\t\t\t\t} else if ((oldCache = outerCache[key]) &&\n\t\t\t\t\t\t\t\t\toldCache[0] === dirruns && oldCache[1] === doneName) {\n\n\t\t\t\t\t\t\t\t\t// Assign to newCache so results back-propagate to previous elements\n\t\t\t\t\t\t\t\t\treturn (newCache[2] = oldCache[2]);\n\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t// Reuse newcache so results back-propagate to previous elements\n\t\t\t\t\t\t\t\t\touterCache[key] = newCache;\n\n\t\t\t\t\t\t\t\t\t// A match means we're done; a fail means we have to keep checking\n\t\t\t\t\t\t\t\t\tif ((newCache[2] = matcher(elem, context, xml))) {\n\t\t\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn false;\n\t\t\t\t};\n\t\t}\n\n\t\tfunction elementMatcher(matchers) {\n\t\t\treturn matchers.length > 1 ?\n\t\t\t\tfunction (elem, context, xml) {\n\t\t\t\t\tvar i = matchers.length;\n\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\tif (!matchers[i](elem, context, xml)) {\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn true;\n\t\t\t\t} :\n\t\t\t\tmatchers[0];\n\t\t}\n\n\t\tfunction multipleContexts(selector, contexts, results) {\n\t\t\tvar i = 0,\n\t\t\t\tlen = contexts.length;\n\t\t\tfor (; i < len; i++) {\n\t\t\t\tfind(selector, contexts[i], results);\n\t\t\t}\n\t\t\treturn results;\n\t\t}\n\n\t\tfunction condense(unmatched, map, filter, context, xml) {\n\t\t\tvar elem,\n\t\t\t\tnewUnmatched = [],\n\t\t\t\ti = 0,\n\t\t\t\tlen = unmatched.length,\n\t\t\t\tmapped = map != null;\n\n\t\t\tfor (; i < len; i++) {\n\t\t\t\tif ((elem = unmatched[i])) {\n\t\t\t\t\tif (!filter || filter(elem, context, xml)) {\n\t\t\t\t\t\tnewUnmatched.push(elem);\n\t\t\t\t\t\tif (mapped) {\n\t\t\t\t\t\t\tmap.push(i);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn newUnmatched;\n\t\t}\n\n\t\tfunction setMatcher(preFilter, selector, matcher, postFilter, postFinder, postSelector) {\n\t\t\tif (postFilter && !postFilter[expando]) {\n\t\t\t\tpostFilter = setMatcher(postFilter);\n\t\t\t}\n\t\t\tif (postFinder && !postFinder[expando]) {\n\t\t\t\tpostFinder = setMatcher(postFinder, postSelector);\n\t\t\t}\n\t\t\treturn markFunction(function (seed, results, context, xml) {\n\t\t\t\tvar temp, i, elem, matcherOut,\n\t\t\t\t\tpreMap = [],\n\t\t\t\t\tpostMap = [],\n\t\t\t\t\tpreexisting = results.length,\n\n\t\t\t\t\t// Get initial elements from seed or context\n\t\t\t\t\telems = seed ||\n\t\t\t\t\t\tmultipleContexts(selector || \"*\",\n\t\t\t\t\t\t\tcontext.nodeType ? [context] : context, []),\n\n\t\t\t\t\t// Prefilter to get matcher input, preserving a map for seed-results synchronization\n\t\t\t\t\tmatcherIn = preFilter && (seed || !selector) ?\n\t\t\t\t\t\tcondense(elems, preMap, preFilter, context, xml) :\n\t\t\t\t\t\telems;\n\n\t\t\t\tif (matcher) {\n\n\t\t\t\t\t// If we have a postFinder, or filtered seed, or non-seed postFilter\n\t\t\t\t\t// or preexisting results,\n\t\t\t\t\tmatcherOut = postFinder || (seed ? preFilter : preexisting || postFilter) ?\n\n\t\t\t\t\t\t// ...intermediate processing is necessary\n\t\t\t\t\t\t[] :\n\n\t\t\t\t\t\t// ...otherwise use results directly\n\t\t\t\t\t\tresults;\n\n\t\t\t\t\t// Find primary matches\n\t\t\t\t\tmatcher(matcherIn, matcherOut, context, xml);\n\t\t\t\t} else {\n\t\t\t\t\tmatcherOut = matcherIn;\n\t\t\t\t}\n\n\t\t\t\t// Apply postFilter\n\t\t\t\tif (postFilter) {\n\t\t\t\t\ttemp = condense(matcherOut, postMap);\n\t\t\t\t\tpostFilter(temp, [], context, xml);\n\n\t\t\t\t\t// Un-match failing elements by moving them back to matcherIn\n\t\t\t\t\ti = temp.length;\n\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\tif ((elem = temp[i])) {\n\t\t\t\t\t\t\tmatcherOut[postMap[i]] = !(matcherIn[postMap[i]] = elem);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (seed) {\n\t\t\t\t\tif (postFinder || preFilter) {\n\t\t\t\t\t\tif (postFinder) {\n\n\t\t\t\t\t\t\t// Get the final matcherOut by condensing this intermediate into postFinder contexts\n\t\t\t\t\t\t\ttemp = [];\n\t\t\t\t\t\t\ti = matcherOut.length;\n\t\t\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\t\t\tif ((elem = matcherOut[i])) {\n\n\t\t\t\t\t\t\t\t\t// Restore matcherIn since elem is not yet a final match\n\t\t\t\t\t\t\t\t\ttemp.push((matcherIn[i] = elem));\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tpostFinder(null, (matcherOut = []), temp, xml);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Move matched elements from seed to results to keep them synchronized\n\t\t\t\t\t\ti = matcherOut.length;\n\t\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\t\tif ((elem = matcherOut[i]) &&\n\t\t\t\t\t\t\t\t(temp = postFinder ? indexOf.call(seed, elem) : preMap[i]) > -1) {\n\n\t\t\t\t\t\t\t\tseed[temp] = !(results[temp] = elem);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Add elements to results, through postFinder if defined\n\t\t\t\t} else {\n\t\t\t\t\tmatcherOut = condense(\n\t\t\t\t\t\tmatcherOut === results ?\n\t\t\t\t\t\t\tmatcherOut.splice(preexisting, matcherOut.length) :\n\t\t\t\t\t\t\tmatcherOut\n\t\t\t\t\t);\n\t\t\t\t\tif (postFinder) {\n\t\t\t\t\t\tpostFinder(null, results, matcherOut, xml);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tpush.apply(results, matcherOut);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tfunction matcherFromTokens(tokens) {\n\t\t\tvar checkContext, matcher, j,\n\t\t\t\tlen = tokens.length,\n\t\t\t\tleadingRelative = Expr.relative[tokens[0].type],\n\t\t\t\timplicitRelative = leadingRelative || Expr.relative[\" \"],\n\t\t\t\ti = leadingRelative ? 1 : 0,\n\n\t\t\t\t// The foundational matcher ensures that elements are reachable from top-level context(s)\n\t\t\t\tmatchContext = addCombinator(function (elem) {\n\t\t\t\t\treturn elem === checkContext;\n\t\t\t\t}, implicitRelative, true),\n\t\t\t\tmatchAnyContext = addCombinator(function (elem) {\n\t\t\t\t\treturn indexOf.call(checkContext, elem) > -1;\n\t\t\t\t}, implicitRelative, true),\n\t\t\t\tmatchers = [function (elem, context, xml) {\n\n\t\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\tvar ret = (!leadingRelative && (xml || context != outermostContext)) || (\n\t\t\t\t\t\t(checkContext = context).nodeType ?\n\t\t\t\t\t\t\tmatchContext(elem, context, xml) :\n\t\t\t\t\t\t\tmatchAnyContext(elem, context, xml));\n\n\t\t\t\t\t// Avoid hanging onto element\n\t\t\t\t\t// (see https://github.com/jquery/sizzle/issues/299)\n\t\t\t\t\tcheckContext = null;\n\t\t\t\t\treturn ret;\n\t\t\t\t}];\n\n\t\t\tfor (; i < len; i++) {\n\t\t\t\tif ((matcher = Expr.relative[tokens[i].type])) {\n\t\t\t\t\tmatchers = [addCombinator(elementMatcher(matchers), matcher)];\n\t\t\t\t} else {\n\t\t\t\t\tmatcher = Expr.filter[tokens[i].type].apply(null, tokens[i].matches);\n\n\t\t\t\t\t// Return special upon seeing a positional matcher\n\t\t\t\t\tif (matcher[expando]) {\n\n\t\t\t\t\t\t// Find the next relative operator (if any) for proper handling\n\t\t\t\t\t\tj = ++i;\n\t\t\t\t\t\tfor (; j < len; j++) {\n\t\t\t\t\t\t\tif (Expr.relative[tokens[j].type]) {\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn setMatcher(\n\t\t\t\t\t\t\ti > 1 && elementMatcher(matchers),\n\t\t\t\t\t\t\ti > 1 && toSelector(\n\n\t\t\t\t\t\t\t\t// If the preceding token was a descendant combinator, insert an implicit any-element `*`\n\t\t\t\t\t\t\t\ttokens.slice(0, i - 1)\n\t\t\t\t\t\t\t\t\t.concat({ value: tokens[i - 2].type === \" \" ? \"*\" : \"\" })\n\t\t\t\t\t\t\t).replace(rtrimCSS, \"$1\"),\n\t\t\t\t\t\t\tmatcher,\n\t\t\t\t\t\t\ti < j && matcherFromTokens(tokens.slice(i, j)),\n\t\t\t\t\t\t\tj < len && matcherFromTokens((tokens = tokens.slice(j))),\n\t\t\t\t\t\t\tj < len && toSelector(tokens)\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\tmatchers.push(matcher);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn elementMatcher(matchers);\n\t\t}\n\n\t\tfunction matcherFromGroupMatchers(elementMatchers, setMatchers) {\n\t\t\tvar bySet = setMatchers.length > 0,\n\t\t\t\tbyElement = elementMatchers.length > 0,\n\t\t\t\tsuperMatcher = function (seed, context, xml, results, outermost) {\n\t\t\t\t\tvar elem, j, matcher,\n\t\t\t\t\t\tmatchedCount = 0,\n\t\t\t\t\t\ti = \"0\",\n\t\t\t\t\t\tunmatched = seed && [],\n\t\t\t\t\t\tsetMatched = [],\n\t\t\t\t\t\tcontextBackup = outermostContext,\n\n\t\t\t\t\t\t// We must always have either seed elements or outermost context\n\t\t\t\t\t\telems = seed || byElement && Expr.find.TAG(\"*\", outermost),\n\n\t\t\t\t\t\t// Use integer dirruns iff this is the outermost matcher\n\t\t\t\t\t\tdirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1),\n\t\t\t\t\t\tlen = elems.length;\n\n\t\t\t\t\tif (outermost) {\n\n\t\t\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\t\toutermostContext = context == document || context || outermost;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Add elements passing elementMatchers directly to results\n\t\t\t\t\t// Support: iOS <=7 - 9 only\n\t\t\t\t\t// Tolerate NodeList properties (IE: \"length\"; Safari: <number>) matching\n\t\t\t\t\t// elements by id. (see trac-14142)\n\t\t\t\t\tfor (; i !== len && (elem = elems[i]) != null; i++) {\n\t\t\t\t\t\tif (byElement && elem) {\n\t\t\t\t\t\t\tj = 0;\n\n\t\t\t\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\t\t\tif (!context && elem.ownerDocument != document) {\n\t\t\t\t\t\t\t\tsetDocument(elem);\n\t\t\t\t\t\t\t\txml = !documentIsHTML;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\twhile ((matcher = elementMatchers[j++])) {\n\t\t\t\t\t\t\t\tif (matcher(elem, context || document, xml)) {\n\t\t\t\t\t\t\t\t\tpush.call(results, elem);\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (outermost) {\n\t\t\t\t\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Track unmatched elements for set filters\n\t\t\t\t\t\tif (bySet) {\n\n\t\t\t\t\t\t\t// They will have gone through all possible matchers\n\t\t\t\t\t\t\tif ((elem = !matcher && elem)) {\n\t\t\t\t\t\t\t\tmatchedCount--;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Lengthen the array for every element, matched or not\n\t\t\t\t\t\t\tif (seed) {\n\t\t\t\t\t\t\t\tunmatched.push(elem);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// `i` is now the count of elements visited above, and adding it to `matchedCount`\n\t\t\t\t\t// makes the latter nonnegative.\n\t\t\t\t\tmatchedCount += i;\n\n\t\t\t\t\t// Apply set filters to unmatched elements\n\t\t\t\t\t// NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`\n\t\t\t\t\t// equals `i`), unless we didn't visit _any_ elements in the above loop because we have\n\t\t\t\t\t// no element matchers and no seed.\n\t\t\t\t\t// Incrementing an initially-string \"0\" `i` allows `i` to remain a string only in that\n\t\t\t\t\t// case, which will result in a \"00\" `matchedCount` that differs from `i` but is also\n\t\t\t\t\t// numerically zero.\n\t\t\t\t\tif (bySet && i !== matchedCount) {\n\t\t\t\t\t\tj = 0;\n\t\t\t\t\t\twhile ((matcher = setMatchers[j++])) {\n\t\t\t\t\t\t\tmatcher(unmatched, setMatched, context, xml);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (seed) {\n\n\t\t\t\t\t\t\t// Reintegrate element matches to eliminate the need for sorting\n\t\t\t\t\t\t\tif (matchedCount > 0) {\n\t\t\t\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\t\t\t\tif (!(unmatched[i] || setMatched[i])) {\n\t\t\t\t\t\t\t\t\t\tsetMatched[i] = pop.call(results);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Discard index placeholder values to get only actual matches\n\t\t\t\t\t\t\tsetMatched = condense(setMatched);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Add matches to results\n\t\t\t\t\t\tpush.apply(results, setMatched);\n\n\t\t\t\t\t\t// Seedless set matches succeeding multiple successful matchers stipulate sorting\n\t\t\t\t\t\tif (outermost && !seed && setMatched.length > 0 &&\n\t\t\t\t\t\t\t(matchedCount + setMatchers.length) > 1) {\n\n\t\t\t\t\t\t\tjQuery.uniqueSort(results);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Override manipulation of globals by nested matchers\n\t\t\t\t\tif (outermost) {\n\t\t\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\t\t\toutermostContext = contextBackup;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn unmatched;\n\t\t\t\t};\n\n\t\t\treturn bySet ?\n\t\t\t\tmarkFunction(superMatcher) :\n\t\t\t\tsuperMatcher;\n\t\t}\n\n\t\tfunction compile(selector, match /* Internal Use Only */) {\n\t\t\tvar i,\n\t\t\t\tsetMatchers = [],\n\t\t\t\telementMatchers = [],\n\t\t\t\tcached = compilerCache[selector + \" \"];\n\n\t\t\tif (!cached) {\n\n\t\t\t\t// Generate a function of recursive functions that can be used to check each element\n\t\t\t\tif (!match) {\n\t\t\t\t\tmatch = tokenize(selector);\n\t\t\t\t}\n\t\t\t\ti = match.length;\n\t\t\t\twhile (i--) {\n\t\t\t\t\tcached = matcherFromTokens(match[i]);\n\t\t\t\t\tif (cached[expando]) {\n\t\t\t\t\t\tsetMatchers.push(cached);\n\t\t\t\t\t} else {\n\t\t\t\t\t\telementMatchers.push(cached);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Cache the compiled function\n\t\t\t\tcached = compilerCache(selector,\n\t\t\t\t\tmatcherFromGroupMatchers(elementMatchers, setMatchers));\n\n\t\t\t\t// Save selector and tokenization\n\t\t\t\tcached.selector = selector;\n\t\t\t}\n\t\t\treturn cached;\n\t\t}\n\n\t\t/**\n\t\t * A low-level selection function that works with jQuery's compiled\n\t\t *  selector functions\n\t\t * @param {String|Function} selector A selector or a pre-compiled\n\t\t *  selector function built with jQuery selector compile\n\t\t * @param {Element} context\n\t\t * @param {Array} [results]\n\t\t * @param {Array} [seed] A set of elements to match against\n\t\t */\n\t\tfunction select(selector, context, results, seed) {\n\t\t\tvar i, tokens, token, type, find,\n\t\t\t\tcompiled = typeof selector === \"function\" && selector,\n\t\t\t\tmatch = !seed && tokenize((selector = compiled.selector || selector));\n\n\t\t\tresults = results || [];\n\n\t\t\t// Try to minimize operations if there is only one selector in the list and no seed\n\t\t\t// (the latter of which guarantees us context)\n\t\t\tif (match.length === 1) {\n\n\t\t\t\t// Reduce context if the leading compound selector is an ID\n\t\t\t\ttokens = match[0] = match[0].slice(0);\n\t\t\t\tif (tokens.length > 2 && (token = tokens[0]).type === \"ID\" &&\n\t\t\t\t\tcontext.nodeType === 9 && documentIsHTML && Expr.relative[tokens[1].type]) {\n\n\t\t\t\t\tcontext = (Expr.find.ID(\n\t\t\t\t\t\ttoken.matches[0].replace(runescape, funescape),\n\t\t\t\t\t\tcontext\n\t\t\t\t\t) || [])[0];\n\t\t\t\t\tif (!context) {\n\t\t\t\t\t\treturn results;\n\n\t\t\t\t\t\t// Precompiled matchers will still verify ancestry, so step up a level\n\t\t\t\t\t} else if (compiled) {\n\t\t\t\t\t\tcontext = context.parentNode;\n\t\t\t\t\t}\n\n\t\t\t\t\tselector = selector.slice(tokens.shift().value.length);\n\t\t\t\t}\n\n\t\t\t\t// Fetch a seed set for right-to-left matching\n\t\t\t\ti = matchExpr.needsContext.test(selector) ? 0 : tokens.length;\n\t\t\t\twhile (i--) {\n\t\t\t\t\ttoken = tokens[i];\n\n\t\t\t\t\t// Abort if we hit a combinator\n\t\t\t\t\tif (Expr.relative[(type = token.type)]) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tif ((find = Expr.find[type])) {\n\n\t\t\t\t\t\t// Search, expanding context for leading sibling combinators\n\t\t\t\t\t\tif ((seed = find(\n\t\t\t\t\t\t\ttoken.matches[0].replace(runescape, funescape),\n\t\t\t\t\t\t\trsibling.test(tokens[0].type) &&\n\t\t\t\t\t\t\ttestContext(context.parentNode) || context\n\t\t\t\t\t\t))) {\n\n\t\t\t\t\t\t\t// If seed is empty or no tokens remain, we can return early\n\t\t\t\t\t\t\ttokens.splice(i, 1);\n\t\t\t\t\t\t\tselector = seed.length && toSelector(tokens);\n\t\t\t\t\t\t\tif (!selector) {\n\t\t\t\t\t\t\t\tpush.apply(results, seed);\n\t\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Compile and execute a filtering function if one is not provided\n\t\t\t// Provide `match` to avoid retokenization if we modified the selector above\n\t\t\t(compiled || compile(selector, match))(\n\t\t\t\tseed,\n\t\t\t\tcontext,\n\t\t\t\t!documentIsHTML,\n\t\t\t\tresults,\n\t\t\t\t!context || rsibling.test(selector) && testContext(context.parentNode) || context\n\t\t\t);\n\t\t\treturn results;\n\t\t}\n\n\t\t// One-time assignments\n\n\t\t// Support: Android <=4.0 - 4.1+\n\t\t// Sort stability\n\t\tsupport.sortStable = expando.split(\"\").sort(sortOrder).join(\"\") === expando;\n\n\t\t// Initialize against the default document\n\t\tsetDocument();\n\n\t\t// Support: Android <=4.0 - 4.1+\n\t\t// Detached nodes confoundingly follow *each other*\n\t\tsupport.sortDetached = assert(function (el) {\n\n\t\t\t// Should return 1, but returns 4 (following)\n\t\t\treturn el.compareDocumentPosition(document.createElement(\"fieldset\")) & 1;\n\t\t});\n\n\t\tjQuery.find = find;\n\n\t\t// Deprecated\n\t\tjQuery.expr[\":\"] = jQuery.expr.pseudos;\n\t\tjQuery.unique = jQuery.uniqueSort;\n\n\t\t// These have always been private, but they used to be documented\n\t\t// as part of Sizzle so let's maintain them in the 3.x line\n\t\t// for backwards compatibility purposes.\n\t\tfind.compile = compile;\n\t\tfind.select = select;\n\t\tfind.setDocument = setDocument;\n\n\t\tfind.escape = jQuery.escapeSelector;\n\t\tfind.getText = jQuery.text;\n\t\tfind.isXML = jQuery.isXMLDoc;\n\t\tfind.selectors = jQuery.expr;\n\t\tfind.support = jQuery.support;\n\t\tfind.uniqueSort = jQuery.uniqueSort;\n\n\t\t/* eslint-enable */\n\n\t})();\n\n\n\tvar dir = function (elem, dir, until) {\n\t\tvar matched = [],\n\t\t\ttruncate = until !== undefined;\n\n\t\twhile ((elem = elem[dir]) && elem.nodeType !== 9) {\n\t\t\tif (elem.nodeType === 1) {\n\t\t\t\tif (truncate && jQuery(elem).is(until)) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tmatched.push(elem);\n\t\t\t}\n\t\t}\n\t\treturn matched;\n\t};\n\n\n\tvar siblings = function (n, elem) {\n\t\tvar matched = [];\n\n\t\tfor (; n; n = n.nextSibling) {\n\t\t\tif (n.nodeType === 1 && n !== elem) {\n\t\t\t\tmatched.push(n);\n\t\t\t}\n\t\t}\n\n\t\treturn matched;\n\t};\n\n\n\tvar rneedsContext = jQuery.expr.match.needsContext;\n\n\tvar rsingleTag = (/^<([a-z][^\\/\\0>:\\x20\\t\\r\\n\\f]*)[\\x20\\t\\r\\n\\f]*\\/?>(?:<\\/\\1>|)$/i);\n\n\n\n\t// Implement the identical functionality for filter and not\n\tfunction winnow(elements, qualifier, not) {\n\t\tif (isFunction(qualifier)) {\n\t\t\treturn jQuery.grep(elements, function (elem, i) {\n\t\t\t\treturn !!qualifier.call(elem, i, elem) !== not;\n\t\t\t});\n\t\t}\n\n\t\t// Single element\n\t\tif (qualifier.nodeType) {\n\t\t\treturn jQuery.grep(elements, function (elem) {\n\t\t\t\treturn (elem === qualifier) !== not;\n\t\t\t});\n\t\t}\n\n\t\t// Arraylike of elements (jQuery, arguments, Array)\n\t\tif (typeof qualifier !== \"string\") {\n\t\t\treturn jQuery.grep(elements, function (elem) {\n\t\t\t\treturn (indexOf.call(qualifier, elem) > -1) !== not;\n\t\t\t});\n\t\t}\n\n\t\t// Filtered directly for both simple and complex selectors\n\t\treturn jQuery.filter(qualifier, elements, not);\n\t}\n\n\tjQuery.filter = function (expr, elems, not) {\n\t\tvar elem = elems[0];\n\n\t\tif (not) {\n\t\t\texpr = \":not(\" + expr + \")\";\n\t\t}\n\n\t\tif (elems.length === 1 && elem.nodeType === 1) {\n\t\t\treturn jQuery.find.matchesSelector(elem, expr) ? [elem] : [];\n\t\t}\n\n\t\treturn jQuery.find.matches(expr, jQuery.grep(elems, function (elem) {\n\t\t\treturn elem.nodeType === 1;\n\t\t}));\n\t};\n\n\tjQuery.fn.extend({\n\t\tfind: function (selector) {\n\t\t\tvar i, ret,\n\t\t\t\tlen = this.length,\n\t\t\t\tself = this;\n\n\t\t\tif (typeof selector !== \"string\") {\n\t\t\t\treturn this.pushStack(jQuery(selector).filter(function () {\n\t\t\t\t\tfor (i = 0; i < len; i++) {\n\t\t\t\t\t\tif (jQuery.contains(self[i], this)) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}));\n\t\t\t}\n\n\t\t\tret = this.pushStack([]);\n\n\t\t\tfor (i = 0; i < len; i++) {\n\t\t\t\tjQuery.find(selector, self[i], ret);\n\t\t\t}\n\n\t\t\treturn len > 1 ? jQuery.uniqueSort(ret) : ret;\n\t\t},\n\t\tfilter: function (selector) {\n\t\t\treturn this.pushStack(winnow(this, selector || [], false));\n\t\t},\n\t\tnot: function (selector) {\n\t\t\treturn this.pushStack(winnow(this, selector || [], true));\n\t\t},\n\t\tis: function (selector) {\n\t\t\treturn !!winnow(\n\t\t\t\tthis,\n\n\t\t\t\t// If this is a positional/relative selector, check membership in the returned set\n\t\t\t\t// so $(\"p:first\").is(\"p:last\") won't return true for a doc with two \"p\".\n\t\t\t\ttypeof selector === \"string\" && rneedsContext.test(selector) ?\n\t\t\t\t\tjQuery(selector) :\n\t\t\t\t\tselector || [],\n\t\t\t\tfalse\n\t\t\t).length;\n\t\t}\n\t});\n\n\n\t// Initialize a jQuery object\n\n\n\t// A central reference to the root jQuery(document)\n\tvar rootjQuery,\n\n\t\t// A simple way to check for HTML strings\n\t\t// Prioritize #id over <tag> to avoid XSS via location.hash (trac-9521)\n\t\t// Strict HTML recognition (trac-11290: must start with <)\n\t\t// Shortcut simple #id case for speed\n\t\trquickExpr = /^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]+))$/,\n\n\t\tinit = jQuery.fn.init = function (selector, context, root) {\n\t\t\tvar match, elem;\n\n\t\t\t// HANDLE: $(\"\"), $(null), $(undefined), $(false)\n\t\t\tif (!selector) {\n\t\t\t\treturn this;\n\t\t\t}\n\n\t\t\t// Method init() accepts an alternate rootjQuery\n\t\t\t// so migrate can support jQuery.sub (gh-2101)\n\t\t\troot = root || rootjQuery;\n\n\t\t\t// Handle HTML strings\n\t\t\tif (typeof selector === \"string\") {\n\t\t\t\tif (selector[0] === \"<\" &&\n\t\t\t\t\tselector[selector.length - 1] === \">\" &&\n\t\t\t\t\tselector.length >= 3) {\n\n\t\t\t\t\t// Assume that strings that start and end with <> are HTML and skip the regex check\n\t\t\t\t\tmatch = [null, selector, null];\n\n\t\t\t\t} else {\n\t\t\t\t\tmatch = rquickExpr.exec(selector);\n\t\t\t\t}\n\n\t\t\t\t// Match html or make sure no context is specified for #id\n\t\t\t\tif (match && (match[1] || !context)) {\n\n\t\t\t\t\t// HANDLE: $(html) -> $(array)\n\t\t\t\t\tif (match[1]) {\n\t\t\t\t\t\tcontext = context instanceof jQuery ? context[0] : context;\n\n\t\t\t\t\t\t// Option to run scripts is true for back-compat\n\t\t\t\t\t\t// Intentionally let the error be thrown if parseHTML is not present\n\t\t\t\t\t\tjQuery.merge(this, jQuery.parseHTML(\n\t\t\t\t\t\t\tmatch[1],\n\t\t\t\t\t\t\tcontext && context.nodeType ? context.ownerDocument || context : document,\n\t\t\t\t\t\t\ttrue\n\t\t\t\t\t\t));\n\n\t\t\t\t\t\t// HANDLE: $(html, props)\n\t\t\t\t\t\tif (rsingleTag.test(match[1]) && jQuery.isPlainObject(context)) {\n\t\t\t\t\t\t\tfor (match in context) {\n\n\t\t\t\t\t\t\t\t// Properties of context are called as methods if possible\n\t\t\t\t\t\t\t\tif (isFunction(this[match])) {\n\t\t\t\t\t\t\t\t\tthis[match](context[match]);\n\n\t\t\t\t\t\t\t\t\t// ...and otherwise set as attributes\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tthis.attr(match, context[match]);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn this;\n\n\t\t\t\t\t\t// HANDLE: $(#id)\n\t\t\t\t\t} else {\n\t\t\t\t\t\telem = document.getElementById(match[2]);\n\n\t\t\t\t\t\tif (elem) {\n\n\t\t\t\t\t\t\t// Inject the element directly into the jQuery object\n\t\t\t\t\t\t\tthis[0] = elem;\n\t\t\t\t\t\t\tthis.length = 1;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn this;\n\t\t\t\t\t}\n\n\t\t\t\t\t// HANDLE: $(expr, $(...))\n\t\t\t\t} else if (!context || context.jquery) {\n\t\t\t\t\treturn (context || root).find(selector);\n\n\t\t\t\t\t// HANDLE: $(expr, context)\n\t\t\t\t\t// (which is just equivalent to: $(context).find(expr)\n\t\t\t\t} else {\n\t\t\t\t\treturn this.constructor(context).find(selector);\n\t\t\t\t}\n\n\t\t\t\t// HANDLE: $(DOMElement)\n\t\t\t} else if (selector.nodeType) {\n\t\t\t\tthis[0] = selector;\n\t\t\t\tthis.length = 1;\n\t\t\t\treturn this;\n\n\t\t\t\t// HANDLE: $(function)\n\t\t\t\t// Shortcut for document ready\n\t\t\t} else if (isFunction(selector)) {\n\t\t\t\treturn root.ready !== undefined ?\n\t\t\t\t\troot.ready(selector) :\n\n\t\t\t\t\t// Execute immediately if ready is not present\n\t\t\t\t\tselector(jQuery);\n\t\t\t}\n\n\t\t\treturn jQuery.makeArray(selector, this);\n\t\t};\n\n\t// Give the init function the jQuery prototype for later instantiation\n\tinit.prototype = jQuery.fn;\n\n\t// Initialize central reference\n\trootjQuery = jQuery(document);\n\n\n\tvar rparentsprev = /^(?:parents|prev(?:Until|All))/,\n\n\t\t// Methods guaranteed to produce a unique set when starting from a unique set\n\t\tguaranteedUnique = {\n\t\t\tchildren: true,\n\t\t\tcontents: true,\n\t\t\tnext: true,\n\t\t\tprev: true\n\t\t};\n\n\tjQuery.fn.extend({\n\t\thas: function (target) {\n\t\t\tvar targets = jQuery(target, this),\n\t\t\t\tl = targets.length;\n\n\t\t\treturn this.filter(function () {\n\t\t\t\tvar i = 0;\n\t\t\t\tfor (; i < l; i++) {\n\t\t\t\t\tif (jQuery.contains(this, targets[i])) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\tclosest: function (selectors, context) {\n\t\t\tvar cur,\n\t\t\t\ti = 0,\n\t\t\t\tl = this.length,\n\t\t\t\tmatched = [],\n\t\t\t\ttargets = typeof selectors !== \"string\" && jQuery(selectors);\n\n\t\t\t// Positional selectors never match, since there's no _selection_ context\n\t\t\tif (!rneedsContext.test(selectors)) {\n\t\t\t\tfor (; i < l; i++) {\n\t\t\t\t\tfor (cur = this[i]; cur && cur !== context; cur = cur.parentNode) {\n\n\t\t\t\t\t\t// Always skip document fragments\n\t\t\t\t\t\tif (cur.nodeType < 11 && (targets ?\n\t\t\t\t\t\t\ttargets.index(cur) > -1 :\n\n\t\t\t\t\t\t\t// Don't pass non-elements to jQuery#find\n\t\t\t\t\t\t\tcur.nodeType === 1 &&\n\t\t\t\t\t\t\tjQuery.find.matchesSelector(cur, selectors))) {\n\n\t\t\t\t\t\t\tmatched.push(cur);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn this.pushStack(matched.length > 1 ? jQuery.uniqueSort(matched) : matched);\n\t\t},\n\n\t\t// Determine the position of an element within the set\n\t\tindex: function (elem) {\n\n\t\t\t// No argument, return index in parent\n\t\t\tif (!elem) {\n\t\t\t\treturn (this[0] && this[0].parentNode) ? this.first().prevAll().length : -1;\n\t\t\t}\n\n\t\t\t// Index in selector\n\t\t\tif (typeof elem === \"string\") {\n\t\t\t\treturn indexOf.call(jQuery(elem), this[0]);\n\t\t\t}\n\n\t\t\t// Locate the position of the desired element\n\t\t\treturn indexOf.call(this,\n\n\t\t\t\t// If it receives a jQuery object, the first element is used\n\t\t\t\telem.jquery ? elem[0] : elem\n\t\t\t);\n\t\t},\n\n\t\tadd: function (selector, context) {\n\t\t\treturn this.pushStack(\n\t\t\t\tjQuery.uniqueSort(\n\t\t\t\t\tjQuery.merge(this.get(), jQuery(selector, context))\n\t\t\t\t)\n\t\t\t);\n\t\t},\n\n\t\taddBack: function (selector) {\n\t\t\treturn this.add(selector == null ?\n\t\t\t\tthis.prevObject : this.prevObject.filter(selector)\n\t\t\t);\n\t\t}\n\t});\n\n\tfunction sibling(cur, dir) {\n\t\twhile ((cur = cur[dir]) && cur.nodeType !== 1) { }\n\t\treturn cur;\n\t}\n\n\tjQuery.each({\n\t\tparent: function (elem) {\n\t\t\tvar parent = elem.parentNode;\n\t\t\treturn parent && parent.nodeType !== 11 ? parent : null;\n\t\t},\n\t\tparents: function (elem) {\n\t\t\treturn dir(elem, \"parentNode\");\n\t\t},\n\t\tparentsUntil: function (elem, _i, until) {\n\t\t\treturn dir(elem, \"parentNode\", until);\n\t\t},\n\t\tnext: function (elem) {\n\t\t\treturn sibling(elem, \"nextSibling\");\n\t\t},\n\t\tprev: function (elem) {\n\t\t\treturn sibling(elem, \"previousSibling\");\n\t\t},\n\t\tnextAll: function (elem) {\n\t\t\treturn dir(elem, \"nextSibling\");\n\t\t},\n\t\tprevAll: function (elem) {\n\t\t\treturn dir(elem, \"previousSibling\");\n\t\t},\n\t\tnextUntil: function (elem, _i, until) {\n\t\t\treturn dir(elem, \"nextSibling\", until);\n\t\t},\n\t\tprevUntil: function (elem, _i, until) {\n\t\t\treturn dir(elem, \"previousSibling\", until);\n\t\t},\n\t\tsiblings: function (elem) {\n\t\t\treturn siblings((elem.parentNode || {}).firstChild, elem);\n\t\t},\n\t\tchildren: function (elem) {\n\t\t\treturn siblings(elem.firstChild);\n\t\t},\n\t\tcontents: function (elem) {\n\t\t\tif (elem.contentDocument != null &&\n\n\t\t\t\t// Support: IE 11+\n\t\t\t\t// <object> elements with no `data` attribute has an object\n\t\t\t\t// `contentDocument` with a `null` prototype.\n\t\t\t\tgetProto(elem.contentDocument)) {\n\n\t\t\t\treturn elem.contentDocument;\n\t\t\t}\n\n\t\t\t// Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only\n\t\t\t// Treat the template element as a regular one in browsers that\n\t\t\t// don't support it.\n\t\t\tif (nodeName(elem, \"template\")) {\n\t\t\t\telem = elem.content || elem;\n\t\t\t}\n\n\t\t\treturn jQuery.merge([], elem.childNodes);\n\t\t}\n\t}, function (name, fn) {\n\t\tjQuery.fn[name] = function (until, selector) {\n\t\t\tvar matched = jQuery.map(this, fn, until);\n\n\t\t\tif (name.slice(-5) !== \"Until\") {\n\t\t\t\tselector = until;\n\t\t\t}\n\n\t\t\tif (selector && typeof selector === \"string\") {\n\t\t\t\tmatched = jQuery.filter(selector, matched);\n\t\t\t}\n\n\t\t\tif (this.length > 1) {\n\n\t\t\t\t// Remove duplicates\n\t\t\t\tif (!guaranteedUnique[name]) {\n\t\t\t\t\tjQuery.uniqueSort(matched);\n\t\t\t\t}\n\n\t\t\t\t// Reverse order for parents* and prev-derivatives\n\t\t\t\tif (rparentsprev.test(name)) {\n\t\t\t\t\tmatched.reverse();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn this.pushStack(matched);\n\t\t};\n\t});\n\tvar rnothtmlwhite = (/[^\\x20\\t\\r\\n\\f]+/g);\n\n\n\n\t// Convert String-formatted options into Object-formatted ones\n\tfunction createOptions(options) {\n\t\tvar object = {};\n\t\tjQuery.each(options.match(rnothtmlwhite) || [], function (_, flag) {\n\t\t\tobject[flag] = true;\n\t\t});\n\t\treturn object;\n\t}\n\n\t/*\n\t * Create a callback list using the following parameters:\n\t *\n\t *\toptions: an optional list of space-separated options that will change how\n\t *\t\t\tthe callback list behaves or a more traditional option object\n\t *\n\t * By default a callback list will act like an event callback list and can be\n\t * \"fired\" multiple times.\n\t *\n\t * Possible options:\n\t *\n\t *\tonce:\t\t\twill ensure the callback list can only be fired once (like a Deferred)\n\t *\n\t *\tmemory:\t\t\twill keep track of previous values and will call any callback added\n\t *\t\t\t\t\tafter the list has been fired right away with the latest \"memorized\"\n\t *\t\t\t\t\tvalues (like a Deferred)\n\t *\n\t *\tunique:\t\t\twill ensure a callback can only be added once (no duplicate in the list)\n\t *\n\t *\tstopOnFalse:\tinterrupt callings when a callback returns false\n\t *\n\t */\n\tjQuery.Callbacks = function (options) {\n\n\t\t// Convert options from String-formatted to Object-formatted if needed\n\t\t// (we check in cache first)\n\t\toptions = typeof options === \"string\" ?\n\t\t\tcreateOptions(options) :\n\t\t\tjQuery.extend({}, options);\n\n\t\tvar // Flag to know if list is currently firing\n\t\t\tfiring,\n\n\t\t\t// Last fire value for non-forgettable lists\n\t\t\tmemory,\n\n\t\t\t// Flag to know if list was already fired\n\t\t\tfired,\n\n\t\t\t// Flag to prevent firing\n\t\t\tlocked,\n\n\t\t\t// Actual callback list\n\t\t\tlist = [],\n\n\t\t\t// Queue of execution data for repeatable lists\n\t\t\tqueue = [],\n\n\t\t\t// Index of currently firing callback (modified by add/remove as needed)\n\t\t\tfiringIndex = -1,\n\n\t\t\t// Fire callbacks\n\t\t\tfire = function () {\n\n\t\t\t\t// Enforce single-firing\n\t\t\t\tlocked = locked || options.once;\n\n\t\t\t\t// Execute callbacks for all pending executions,\n\t\t\t\t// respecting firingIndex overrides and runtime changes\n\t\t\t\tfired = firing = true;\n\t\t\t\tfor (; queue.length; firingIndex = -1) {\n\t\t\t\t\tmemory = queue.shift();\n\t\t\t\t\twhile (++firingIndex < list.length) {\n\n\t\t\t\t\t\t// Run callback and check for early termination\n\t\t\t\t\t\tif (list[firingIndex].apply(memory[0], memory[1]) === false &&\n\t\t\t\t\t\t\toptions.stopOnFalse) {\n\n\t\t\t\t\t\t\t// Jump to end and forget the data so .add doesn't re-fire\n\t\t\t\t\t\t\tfiringIndex = list.length;\n\t\t\t\t\t\t\tmemory = false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Forget the data if we're done with it\n\t\t\t\tif (!options.memory) {\n\t\t\t\t\tmemory = false;\n\t\t\t\t}\n\n\t\t\t\tfiring = false;\n\n\t\t\t\t// Clean up if we're done firing for good\n\t\t\t\tif (locked) {\n\n\t\t\t\t\t// Keep an empty list if we have data for future add calls\n\t\t\t\t\tif (memory) {\n\t\t\t\t\t\tlist = [];\n\n\t\t\t\t\t\t// Otherwise, this object is spent\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlist = \"\";\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// Actual Callbacks object\n\t\t\tself = {\n\n\t\t\t\t// Add a callback or a collection of callbacks to the list\n\t\t\t\tadd: function () {\n\t\t\t\t\tif (list) {\n\n\t\t\t\t\t\t// If we have memory from a past run, we should fire after adding\n\t\t\t\t\t\tif (memory && !firing) {\n\t\t\t\t\t\t\tfiringIndex = list.length - 1;\n\t\t\t\t\t\t\tqueue.push(memory);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t(function add(args) {\n\t\t\t\t\t\t\tjQuery.each(args, function (_, arg) {\n\t\t\t\t\t\t\t\tif (isFunction(arg)) {\n\t\t\t\t\t\t\t\t\tif (!options.unique || !self.has(arg)) {\n\t\t\t\t\t\t\t\t\t\tlist.push(arg);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} else if (arg && arg.length && toType(arg) !== \"string\") {\n\n\t\t\t\t\t\t\t\t\t// Inspect recursively\n\t\t\t\t\t\t\t\t\tadd(arg);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t})(arguments);\n\n\t\t\t\t\t\tif (memory && !firing) {\n\t\t\t\t\t\t\tfire();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Remove a callback from the list\n\t\t\t\tremove: function () {\n\t\t\t\t\tjQuery.each(arguments, function (_, arg) {\n\t\t\t\t\t\tvar index;\n\t\t\t\t\t\twhile ((index = jQuery.inArray(arg, list, index)) > -1) {\n\t\t\t\t\t\t\tlist.splice(index, 1);\n\n\t\t\t\t\t\t\t// Handle firing indexes\n\t\t\t\t\t\t\tif (index <= firingIndex) {\n\t\t\t\t\t\t\t\tfiringIndex--;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Check if a given callback is in the list.\n\t\t\t\t// If no argument is given, return whether or not list has callbacks attached.\n\t\t\t\thas: function (fn) {\n\t\t\t\t\treturn fn ?\n\t\t\t\t\t\tjQuery.inArray(fn, list) > -1 :\n\t\t\t\t\t\tlist.length > 0;\n\t\t\t\t},\n\n\t\t\t\t// Remove all callbacks from the list\n\t\t\t\tempty: function () {\n\t\t\t\t\tif (list) {\n\t\t\t\t\t\tlist = [];\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Disable .fire and .add\n\t\t\t\t// Abort any current/pending executions\n\t\t\t\t// Clear all callbacks and values\n\t\t\t\tdisable: function () {\n\t\t\t\t\tlocked = queue = [];\n\t\t\t\t\tlist = memory = \"\";\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\t\t\t\tdisabled: function () {\n\t\t\t\t\treturn !list;\n\t\t\t\t},\n\n\t\t\t\t// Disable .fire\n\t\t\t\t// Also disable .add unless we have memory (since it would have no effect)\n\t\t\t\t// Abort any pending executions\n\t\t\t\tlock: function () {\n\t\t\t\t\tlocked = queue = [];\n\t\t\t\t\tif (!memory && !firing) {\n\t\t\t\t\t\tlist = memory = \"\";\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\t\t\t\tlocked: function () {\n\t\t\t\t\treturn !!locked;\n\t\t\t\t},\n\n\t\t\t\t// Call all callbacks with the given context and arguments\n\t\t\t\tfireWith: function (context, args) {\n\t\t\t\t\tif (!locked) {\n\t\t\t\t\t\targs = args || [];\n\t\t\t\t\t\targs = [context, args.slice ? args.slice() : args];\n\t\t\t\t\t\tqueue.push(args);\n\t\t\t\t\t\tif (!firing) {\n\t\t\t\t\t\t\tfire();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Call all the callbacks with the given arguments\n\t\t\t\tfire: function () {\n\t\t\t\t\tself.fireWith(this, arguments);\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// To know if the callbacks have already been called at least once\n\t\t\t\tfired: function () {\n\t\t\t\t\treturn !!fired;\n\t\t\t\t}\n\t\t\t};\n\n\t\treturn self;\n\t};\n\n\n\tfunction Identity(v) {\n\t\treturn v;\n\t}\n\tfunction Thrower(ex) {\n\t\tthrow ex;\n\t}\n\n\tfunction adoptValue(value, resolve, reject, noValue) {\n\t\tvar method;\n\n\t\ttry {\n\n\t\t\t// Check for promise aspect first to privilege synchronous behavior\n\t\t\tif (value && isFunction((method = value.promise))) {\n\t\t\t\tmethod.call(value).done(resolve).fail(reject);\n\n\t\t\t\t// Other thenables\n\t\t\t} else if (value && isFunction((method = value.then))) {\n\t\t\t\tmethod.call(value, resolve, reject);\n\n\t\t\t\t// Other non-thenables\n\t\t\t} else {\n\n\t\t\t\t// Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer:\n\t\t\t\t// * false: [ value ].slice( 0 ) => resolve( value )\n\t\t\t\t// * true: [ value ].slice( 1 ) => resolve()\n\t\t\t\tresolve.apply(undefined, [value].slice(noValue));\n\t\t\t}\n\n\t\t\t// For Promises/A+, convert exceptions into rejections\n\t\t\t// Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in\n\t\t\t// Deferred#then to conditionally suppress rejection.\n\t\t} catch (value) {\n\n\t\t\t// Support: Android 4.0 only\n\t\t\t// Strict mode functions invoked without .call/.apply get global-object context\n\t\t\treject.apply(undefined, [value]);\n\t\t}\n\t}\n\n\tjQuery.extend({\n\n\t\tDeferred: function (func) {\n\t\t\tvar tuples = [\n\n\t\t\t\t// action, add listener, callbacks,\n\t\t\t\t// ... .then handlers, argument index, [final state]\n\t\t\t\t[\"notify\", \"progress\", jQuery.Callbacks(\"memory\"),\n\t\t\t\t\tjQuery.Callbacks(\"memory\"), 2],\n\t\t\t\t[\"resolve\", \"done\", jQuery.Callbacks(\"once memory\"),\n\t\t\t\t\tjQuery.Callbacks(\"once memory\"), 0, \"resolved\"],\n\t\t\t\t[\"reject\", \"fail\", jQuery.Callbacks(\"once memory\"),\n\t\t\t\t\tjQuery.Callbacks(\"once memory\"), 1, \"rejected\"]\n\t\t\t],\n\t\t\t\tstate = \"pending\",\n\t\t\t\tpromise = {\n\t\t\t\t\tstate: function () {\n\t\t\t\t\t\treturn state;\n\t\t\t\t\t},\n\t\t\t\t\talways: function () {\n\t\t\t\t\t\tdeferred.done(arguments).fail(arguments);\n\t\t\t\t\t\treturn this;\n\t\t\t\t\t},\n\t\t\t\t\t\"catch\": function (fn) {\n\t\t\t\t\t\treturn promise.then(null, fn);\n\t\t\t\t\t},\n\n\t\t\t\t\t// Keep pipe for back-compat\n\t\t\t\t\tpipe: function ( /* fnDone, fnFail, fnProgress */) {\n\t\t\t\t\t\tvar fns = arguments;\n\n\t\t\t\t\t\treturn jQuery.Deferred(function (newDefer) {\n\t\t\t\t\t\t\tjQuery.each(tuples, function (_i, tuple) {\n\n\t\t\t\t\t\t\t\t// Map tuples (progress, done, fail) to arguments (done, fail, progress)\n\t\t\t\t\t\t\t\tvar fn = isFunction(fns[tuple[4]]) && fns[tuple[4]];\n\n\t\t\t\t\t\t\t\t// deferred.progress(function() { bind to newDefer or newDefer.notify })\n\t\t\t\t\t\t\t\t// deferred.done(function() { bind to newDefer or newDefer.resolve })\n\t\t\t\t\t\t\t\t// deferred.fail(function() { bind to newDefer or newDefer.reject })\n\t\t\t\t\t\t\t\tdeferred[tuple[1]](function () {\n\t\t\t\t\t\t\t\t\tvar returned = fn && fn.apply(this, arguments);\n\t\t\t\t\t\t\t\t\tif (returned && isFunction(returned.promise)) {\n\t\t\t\t\t\t\t\t\t\treturned.promise()\n\t\t\t\t\t\t\t\t\t\t\t.progress(newDefer.notify)\n\t\t\t\t\t\t\t\t\t\t\t.done(newDefer.resolve)\n\t\t\t\t\t\t\t\t\t\t\t.fail(newDefer.reject);\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tnewDefer[tuple[0] + \"With\"](\n\t\t\t\t\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\t\t\t\t\tfn ? [returned] : arguments\n\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tfns = null;\n\t\t\t\t\t\t}).promise();\n\t\t\t\t\t},\n\t\t\t\t\tthen: function (onFulfilled, onRejected, onProgress) {\n\t\t\t\t\t\tvar maxDepth = 0;\n\t\t\t\t\t\tfunction resolve(depth, deferred, handler, special) {\n\t\t\t\t\t\t\treturn function () {\n\t\t\t\t\t\t\t\tvar that = this,\n\t\t\t\t\t\t\t\t\targs = arguments,\n\t\t\t\t\t\t\t\t\tmightThrow = function () {\n\t\t\t\t\t\t\t\t\t\tvar returned, then;\n\n\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.3\n\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-59\n\t\t\t\t\t\t\t\t\t\t// Ignore double-resolution attempts\n\t\t\t\t\t\t\t\t\t\tif (depth < maxDepth) {\n\t\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\treturned = handler.apply(that, args);\n\n\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.1\n\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-48\n\t\t\t\t\t\t\t\t\t\tif (returned === deferred.promise()) {\n\t\t\t\t\t\t\t\t\t\t\tthrow new TypeError(\"Thenable self-resolution\");\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ sections 2.3.3.1, 3.5\n\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-54\n\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-75\n\t\t\t\t\t\t\t\t\t\t// Retrieve `then` only once\n\t\t\t\t\t\t\t\t\t\tthen = returned &&\n\n\t\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.4\n\t\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-64\n\t\t\t\t\t\t\t\t\t\t\t// Only check objects and functions for thenability\n\t\t\t\t\t\t\t\t\t\t\t(typeof returned === \"object\" ||\n\t\t\t\t\t\t\t\t\t\t\t\ttypeof returned === \"function\") &&\n\t\t\t\t\t\t\t\t\t\t\treturned.then;\n\n\t\t\t\t\t\t\t\t\t\t// Handle a returned thenable\n\t\t\t\t\t\t\t\t\t\tif (isFunction(then)) {\n\n\t\t\t\t\t\t\t\t\t\t\t// Special processors (notify) just wait for resolution\n\t\t\t\t\t\t\t\t\t\t\tif (special) {\n\t\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\t\tresolve(maxDepth, deferred, Identity, special),\n\t\t\t\t\t\t\t\t\t\t\t\t\tresolve(maxDepth, deferred, Thrower, special)\n\t\t\t\t\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t\t\t\t\t// Normal processors (resolve) also hook into progress\n\t\t\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t\t\t// ...and disregard older resolution values\n\t\t\t\t\t\t\t\t\t\t\t\tmaxDepth++;\n\n\t\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\t\tresolve(maxDepth, deferred, Identity, special),\n\t\t\t\t\t\t\t\t\t\t\t\t\tresolve(maxDepth, deferred, Thrower, special),\n\t\t\t\t\t\t\t\t\t\t\t\t\tresolve(maxDepth, deferred, Identity,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tdeferred.notifyWith)\n\t\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t// Handle all other returned values\n\t\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\t\tif (handler !== Identity) {\n\t\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\t\targs = [returned];\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t// Process the value(s)\n\t\t\t\t\t\t\t\t\t\t\t// Default process is resolve\n\t\t\t\t\t\t\t\t\t\t\t(special || deferred.resolveWith)(that, args);\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\n\t\t\t\t\t\t\t\t\t// Only normal processors (resolve) catch and reject exceptions\n\t\t\t\t\t\t\t\t\tprocess = special ?\n\t\t\t\t\t\t\t\t\t\tmightThrow :\n\t\t\t\t\t\t\t\t\t\tfunction () {\n\t\t\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\t\t\tmightThrow();\n\t\t\t\t\t\t\t\t\t\t\t} catch (e) {\n\n\t\t\t\t\t\t\t\t\t\t\t\tif (jQuery.Deferred.exceptionHook) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tjQuery.Deferred.exceptionHook(e,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tprocess.error);\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.4.1\n\t\t\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-61\n\t\t\t\t\t\t\t\t\t\t\t\t// Ignore post-resolution exceptions\n\t\t\t\t\t\t\t\t\t\t\t\tif (depth + 1 >= maxDepth) {\n\n\t\t\t\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\t\t\t\tif (handler !== Thrower) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\targs = [e];\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\t\tdeferred.rejectWith(that, args);\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.1\n\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-57\n\t\t\t\t\t\t\t\t// Re-resolve promises immediately to dodge false rejection from\n\t\t\t\t\t\t\t\t// subsequent errors\n\t\t\t\t\t\t\t\tif (depth) {\n\t\t\t\t\t\t\t\t\tprocess();\n\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t// Call an optional hook to record the error, in case of exception\n\t\t\t\t\t\t\t\t\t// since it's otherwise lost when execution goes async\n\t\t\t\t\t\t\t\t\tif (jQuery.Deferred.getErrorHook) {\n\t\t\t\t\t\t\t\t\t\tprocess.error = jQuery.Deferred.getErrorHook();\n\n\t\t\t\t\t\t\t\t\t\t// The deprecated alias of the above. While the name suggests\n\t\t\t\t\t\t\t\t\t\t// returning the stack, not an error instance, jQuery just passes\n\t\t\t\t\t\t\t\t\t\t// it directly to `console.warn` so both will work; an instance\n\t\t\t\t\t\t\t\t\t\t// just better cooperates with source maps.\n\t\t\t\t\t\t\t\t\t} else if (jQuery.Deferred.getStackHook) {\n\t\t\t\t\t\t\t\t\t\tprocess.error = jQuery.Deferred.getStackHook();\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\twindow.setTimeout(process);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn jQuery.Deferred(function (newDefer) {\n\n\t\t\t\t\t\t\t// progress_handlers.add( ... )\n\t\t\t\t\t\t\ttuples[0][3].add(\n\t\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\t\tisFunction(onProgress) ?\n\t\t\t\t\t\t\t\t\t\tonProgress :\n\t\t\t\t\t\t\t\t\t\tIdentity,\n\t\t\t\t\t\t\t\t\tnewDefer.notifyWith\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t// fulfilled_handlers.add( ... )\n\t\t\t\t\t\t\ttuples[1][3].add(\n\t\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\t\tisFunction(onFulfilled) ?\n\t\t\t\t\t\t\t\t\t\tonFulfilled :\n\t\t\t\t\t\t\t\t\t\tIdentity\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t// rejected_handlers.add( ... )\n\t\t\t\t\t\t\ttuples[2][3].add(\n\t\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\t\tisFunction(onRejected) ?\n\t\t\t\t\t\t\t\t\t\tonRejected :\n\t\t\t\t\t\t\t\t\t\tThrower\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}).promise();\n\t\t\t\t\t},\n\n\t\t\t\t\t// Get a promise for this deferred\n\t\t\t\t\t// If obj is provided, the promise aspect is added to the object\n\t\t\t\t\tpromise: function (obj) {\n\t\t\t\t\t\treturn obj != null ? jQuery.extend(obj, promise) : promise;\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tdeferred = {};\n\n\t\t\t// Add list-specific methods\n\t\t\tjQuery.each(tuples, function (i, tuple) {\n\t\t\t\tvar list = tuple[2],\n\t\t\t\t\tstateString = tuple[5];\n\n\t\t\t\t// promise.progress = list.add\n\t\t\t\t// promise.done = list.add\n\t\t\t\t// promise.fail = list.add\n\t\t\t\tpromise[tuple[1]] = list.add;\n\n\t\t\t\t// Handle state\n\t\t\t\tif (stateString) {\n\t\t\t\t\tlist.add(\n\t\t\t\t\t\tfunction () {\n\n\t\t\t\t\t\t\t// state = \"resolved\" (i.e., fulfilled)\n\t\t\t\t\t\t\t// state = \"rejected\"\n\t\t\t\t\t\t\tstate = stateString;\n\t\t\t\t\t\t},\n\n\t\t\t\t\t\t// rejected_callbacks.disable\n\t\t\t\t\t\t// fulfilled_callbacks.disable\n\t\t\t\t\t\ttuples[3 - i][2].disable,\n\n\t\t\t\t\t\t// rejected_handlers.disable\n\t\t\t\t\t\t// fulfilled_handlers.disable\n\t\t\t\t\t\ttuples[3 - i][3].disable,\n\n\t\t\t\t\t\t// progress_callbacks.lock\n\t\t\t\t\t\ttuples[0][2].lock,\n\n\t\t\t\t\t\t// progress_handlers.lock\n\t\t\t\t\t\ttuples[0][3].lock\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\t// progress_handlers.fire\n\t\t\t\t// fulfilled_handlers.fire\n\t\t\t\t// rejected_handlers.fire\n\t\t\t\tlist.add(tuple[3].fire);\n\n\t\t\t\t// deferred.notify = function() { deferred.notifyWith(...) }\n\t\t\t\t// deferred.resolve = function() { deferred.resolveWith(...) }\n\t\t\t\t// deferred.reject = function() { deferred.rejectWith(...) }\n\t\t\t\tdeferred[tuple[0]] = function () {\n\t\t\t\t\tdeferred[tuple[0] + \"With\"](this === deferred ? undefined : this, arguments);\n\t\t\t\t\treturn this;\n\t\t\t\t};\n\n\t\t\t\t// deferred.notifyWith = list.fireWith\n\t\t\t\t// deferred.resolveWith = list.fireWith\n\t\t\t\t// deferred.rejectWith = list.fireWith\n\t\t\t\tdeferred[tuple[0] + \"With\"] = list.fireWith;\n\t\t\t});\n\n\t\t\t// Make the deferred a promise\n\t\t\tpromise.promise(deferred);\n\n\t\t\t// Call given func if any\n\t\t\tif (func) {\n\t\t\t\tfunc.call(deferred, deferred);\n\t\t\t}\n\n\t\t\t// All done!\n\t\t\treturn deferred;\n\t\t},\n\n\t\t// Deferred helper\n\t\twhen: function (singleValue) {\n\t\t\tvar\n\n\t\t\t\t// count of uncompleted subordinates\n\t\t\t\tremaining = arguments.length,\n\n\t\t\t\t// count of unprocessed arguments\n\t\t\t\ti = remaining,\n\n\t\t\t\t// subordinate fulfillment data\n\t\t\t\tresolveContexts = Array(i),\n\t\t\t\tresolveValues = slice.call(arguments),\n\n\t\t\t\t// the primary Deferred\n\t\t\t\tprimary = jQuery.Deferred(),\n\n\t\t\t\t// subordinate callback factory\n\t\t\t\tupdateFunc = function (i) {\n\t\t\t\t\treturn function (value) {\n\t\t\t\t\t\tresolveContexts[i] = this;\n\t\t\t\t\t\tresolveValues[i] = arguments.length > 1 ? slice.call(arguments) : value;\n\t\t\t\t\t\tif (!(--remaining)) {\n\t\t\t\t\t\t\tprimary.resolveWith(resolveContexts, resolveValues);\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t};\n\n\t\t\t// Single- and empty arguments are adopted like Promise.resolve\n\t\t\tif (remaining <= 1) {\n\t\t\t\tadoptValue(singleValue, primary.done(updateFunc(i)).resolve, primary.reject,\n\t\t\t\t\t!remaining);\n\n\t\t\t\t// Use .then() to unwrap secondary thenables (cf. gh-3000)\n\t\t\t\tif (primary.state() === \"pending\" ||\n\t\t\t\t\tisFunction(resolveValues[i] && resolveValues[i].then)) {\n\n\t\t\t\t\treturn primary.then();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Multiple arguments are aggregated like Promise.all array elements\n\t\t\twhile (i--) {\n\t\t\t\tadoptValue(resolveValues[i], updateFunc(i), primary.reject);\n\t\t\t}\n\n\t\t\treturn primary.promise();\n\t\t}\n\t});\n\n\n\t// These usually indicate a programmer mistake during development,\n\t// warn about them ASAP rather than swallowing them by default.\n\tvar rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;\n\n\t// If `jQuery.Deferred.getErrorHook` is defined, `asyncError` is an error\n\t// captured before the async barrier to get the original error cause\n\t// which may otherwise be hidden.\n\tjQuery.Deferred.exceptionHook = function (error, asyncError) {\n\n\t\t// Support: IE 8 - 9 only\n\t\t// Console exists when dev tools are open, which can happen at any time\n\t\tif (window.console && window.console.warn && error && rerrorNames.test(error.name)) {\n\t\t\twindow.console.warn(\"jQuery.Deferred exception: \" + error.message,\n\t\t\t\terror.stack, asyncError);\n\t\t}\n\t};\n\n\n\n\n\tjQuery.readyException = function (error) {\n\t\twindow.setTimeout(function () {\n\t\t\tthrow error;\n\t\t});\n\t};\n\n\n\n\n\t// The deferred used on DOM ready\n\tvar readyList = jQuery.Deferred();\n\n\tjQuery.fn.ready = function (fn) {\n\n\t\treadyList\n\t\t\t.then(fn)\n\n\t\t\t// Wrap jQuery.readyException in a function so that the lookup\n\t\t\t// happens at the time of error handling instead of callback\n\t\t\t// registration.\n\t\t\t.catch(function (error) {\n\t\t\t\tjQuery.readyException(error);\n\t\t\t});\n\n\t\treturn this;\n\t};\n\n\tjQuery.extend({\n\n\t\t// Is the DOM ready to be used? Set to true once it occurs.\n\t\tisReady: false,\n\n\t\t// A counter to track how many items to wait for before\n\t\t// the ready event fires. See trac-6781\n\t\treadyWait: 1,\n\n\t\t// Handle when the DOM is ready\n\t\tready: function (wait) {\n\n\t\t\t// Abort if there are pending holds or we're already ready\n\t\t\tif (wait === true ? --jQuery.readyWait : jQuery.isReady) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Remember that the DOM is ready\n\t\t\tjQuery.isReady = true;\n\n\t\t\t// If a normal DOM Ready event fired, decrement, and wait if need be\n\t\t\tif (wait !== true && --jQuery.readyWait > 0) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If there are functions bound, to execute\n\t\t\treadyList.resolveWith(document, [jQuery]);\n\t\t}\n\t});\n\n\tjQuery.ready.then = readyList.then;\n\n\t// The ready event handler and self cleanup method\n\tfunction completed() {\n\t\tdocument.removeEventListener(\"DOMContentLoaded\", completed);\n\t\twindow.removeEventListener(\"load\", completed);\n\t\tjQuery.ready();\n\t}\n\n\t// Catch cases where $(document).ready() is called\n\t// after the browser event has already occurred.\n\t// Support: IE <=9 - 10 only\n\t// Older IE sometimes signals \"interactive\" too soon\n\tif (document.readyState === \"complete\" ||\n\t\t(document.readyState !== \"loading\" && !document.documentElement.doScroll)) {\n\n\t\t// Handle it asynchronously to allow scripts the opportunity to delay ready\n\t\twindow.setTimeout(jQuery.ready);\n\n\t} else {\n\n\t\t// Use the handy event callback\n\t\tdocument.addEventListener(\"DOMContentLoaded\", completed);\n\n\t\t// A fallback to window.onload, that will always work\n\t\twindow.addEventListener(\"load\", completed);\n\t}\n\n\n\n\n\t// Multifunctional method to get and set values of a collection\n\t// The value/s can optionally be executed if it's a function\n\tvar access = function (elems, fn, key, value, chainable, emptyGet, raw) {\n\t\tvar i = 0,\n\t\t\tlen = elems.length,\n\t\t\tbulk = key == null;\n\n\t\t// Sets many values\n\t\tif (toType(key) === \"object\") {\n\t\t\tchainable = true;\n\t\t\tfor (i in key) {\n\t\t\t\taccess(elems, fn, i, key[i], true, emptyGet, raw);\n\t\t\t}\n\n\t\t\t// Sets one value\n\t\t} else if (value !== undefined) {\n\t\t\tchainable = true;\n\n\t\t\tif (!isFunction(value)) {\n\t\t\t\traw = true;\n\t\t\t}\n\n\t\t\tif (bulk) {\n\n\t\t\t\t// Bulk operations run against the entire set\n\t\t\t\tif (raw) {\n\t\t\t\t\tfn.call(elems, value);\n\t\t\t\t\tfn = null;\n\n\t\t\t\t\t// ...except when executing function values\n\t\t\t\t} else {\n\t\t\t\t\tbulk = fn;\n\t\t\t\t\tfn = function (elem, _key, value) {\n\t\t\t\t\t\treturn bulk.call(jQuery(elem), value);\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (fn) {\n\t\t\t\tfor (; i < len; i++) {\n\t\t\t\t\tfn(\n\t\t\t\t\t\telems[i], key, raw ?\n\t\t\t\t\t\tvalue :\n\t\t\t\t\t\tvalue.call(elems[i], i, fn(elems[i], key))\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (chainable) {\n\t\t\treturn elems;\n\t\t}\n\n\t\t// Gets\n\t\tif (bulk) {\n\t\t\treturn fn.call(elems);\n\t\t}\n\n\t\treturn len ? fn(elems[0], key) : emptyGet;\n\t};\n\n\n\t// Matches dashed string for camelizing\n\tvar rmsPrefix = /^-ms-/,\n\t\trdashAlpha = /-([a-z])/g;\n\n\t// Used by camelCase as callback to replace()\n\tfunction fcamelCase(_all, letter) {\n\t\treturn letter.toUpperCase();\n\t}\n\n\t// Convert dashed to camelCase; used by the css and data modules\n\t// Support: IE <=9 - 11, Edge 12 - 15\n\t// Microsoft forgot to hump their vendor prefix (trac-9572)\n\tfunction camelCase(string) {\n\t\treturn string.replace(rmsPrefix, \"ms-\").replace(rdashAlpha, fcamelCase);\n\t}\n\tvar acceptData = function (owner) {\n\n\t\t// Accepts only:\n\t\t//  - Node\n\t\t//    - Node.ELEMENT_NODE\n\t\t//    - Node.DOCUMENT_NODE\n\t\t//  - Object\n\t\t//    - Any\n\t\treturn owner.nodeType === 1 || owner.nodeType === 9 || !(+owner.nodeType);\n\t};\n\n\n\n\n\tfunction Data() {\n\t\tthis.expando = jQuery.expando + Data.uid++;\n\t}\n\n\tData.uid = 1;\n\n\tData.prototype = {\n\n\t\tcache: function (owner) {\n\n\t\t\t// Check if the owner object already has a cache\n\t\t\tvar value = owner[this.expando];\n\n\t\t\t// If not, create one\n\t\t\tif (!value) {\n\t\t\t\tvalue = {};\n\n\t\t\t\t// We can accept data for non-element nodes in modern browsers,\n\t\t\t\t// but we should not, see trac-8335.\n\t\t\t\t// Always return an empty object.\n\t\t\t\tif (acceptData(owner)) {\n\n\t\t\t\t\t// If it is a node unlikely to be stringify-ed or looped over\n\t\t\t\t\t// use plain assignment\n\t\t\t\t\tif (owner.nodeType) {\n\t\t\t\t\t\towner[this.expando] = value;\n\n\t\t\t\t\t\t// Otherwise secure it in a non-enumerable property\n\t\t\t\t\t\t// configurable must be true to allow the property to be\n\t\t\t\t\t\t// deleted when data is removed\n\t\t\t\t\t} else {\n\t\t\t\t\t\tObject.defineProperty(owner, this.expando, {\n\t\t\t\t\t\t\tvalue: value,\n\t\t\t\t\t\t\tconfigurable: true\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn value;\n\t\t},\n\t\tset: function (owner, data, value) {\n\t\t\tvar prop,\n\t\t\t\tcache = this.cache(owner);\n\n\t\t\t// Handle: [ owner, key, value ] args\n\t\t\t// Always use camelCase key (gh-2257)\n\t\t\tif (typeof data === \"string\") {\n\t\t\t\tcache[camelCase(data)] = value;\n\n\t\t\t\t// Handle: [ owner, { properties } ] args\n\t\t\t} else {\n\n\t\t\t\t// Copy the properties one-by-one to the cache object\n\t\t\t\tfor (prop in data) {\n\t\t\t\t\tcache[camelCase(prop)] = data[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn cache;\n\t\t},\n\t\tget: function (owner, key) {\n\t\t\treturn key === undefined ?\n\t\t\t\tthis.cache(owner) :\n\n\t\t\t\t// Always use camelCase key (gh-2257)\n\t\t\t\towner[this.expando] && owner[this.expando][camelCase(key)];\n\t\t},\n\t\taccess: function (owner, key, value) {\n\n\t\t\t// In cases where either:\n\t\t\t//\n\t\t\t//   1. No key was specified\n\t\t\t//   2. A string key was specified, but no value provided\n\t\t\t//\n\t\t\t// Take the \"read\" path and allow the get method to determine\n\t\t\t// which value to return, respectively either:\n\t\t\t//\n\t\t\t//   1. The entire cache object\n\t\t\t//   2. The data stored at the key\n\t\t\t//\n\t\t\tif (key === undefined ||\n\t\t\t\t((key && typeof key === \"string\") && value === undefined)) {\n\n\t\t\t\treturn this.get(owner, key);\n\t\t\t}\n\n\t\t\t// When the key is not a string, or both a key and value\n\t\t\t// are specified, set or extend (existing objects) with either:\n\t\t\t//\n\t\t\t//   1. An object of properties\n\t\t\t//   2. A key and value\n\t\t\t//\n\t\t\tthis.set(owner, key, value);\n\n\t\t\t// Since the \"set\" path can have two possible entry points\n\t\t\t// return the expected data based on which path was taken[*]\n\t\t\treturn value !== undefined ? value : key;\n\t\t},\n\t\tremove: function (owner, key) {\n\t\t\tvar i,\n\t\t\t\tcache = owner[this.expando];\n\n\t\t\tif (cache === undefined) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (key !== undefined) {\n\n\t\t\t\t// Support array or space separated string of keys\n\t\t\t\tif (Array.isArray(key)) {\n\n\t\t\t\t\t// If key is an array of keys...\n\t\t\t\t\t// We always set camelCase keys, so remove that.\n\t\t\t\t\tkey = key.map(camelCase);\n\t\t\t\t} else {\n\t\t\t\t\tkey = camelCase(key);\n\n\t\t\t\t\t// If a key with the spaces exists, use it.\n\t\t\t\t\t// Otherwise, create an array by matching non-whitespace\n\t\t\t\t\tkey = key in cache ?\n\t\t\t\t\t\t[key] :\n\t\t\t\t\t\t(key.match(rnothtmlwhite) || []);\n\t\t\t\t}\n\n\t\t\t\ti = key.length;\n\n\t\t\t\twhile (i--) {\n\t\t\t\t\tdelete cache[key[i]];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove the expando if there's no more data\n\t\t\tif (key === undefined || jQuery.isEmptyObject(cache)) {\n\n\t\t\t\t// Support: Chrome <=35 - 45\n\t\t\t\t// Webkit & Blink performance suffers when deleting properties\n\t\t\t\t// from DOM nodes, so set to undefined instead\n\t\t\t\t// https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted)\n\t\t\t\tif (owner.nodeType) {\n\t\t\t\t\towner[this.expando] = undefined;\n\t\t\t\t} else {\n\t\t\t\t\tdelete owner[this.expando];\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\thasData: function (owner) {\n\t\t\tvar cache = owner[this.expando];\n\t\t\treturn cache !== undefined && !jQuery.isEmptyObject(cache);\n\t\t}\n\t};\n\tvar dataPriv = new Data();\n\n\tvar dataUser = new Data();\n\n\n\n\t//\tImplementation Summary\n\t//\n\t//\t1. Enforce API surface and semantic compatibility with 1.9.x branch\n\t//\t2. Improve the module's maintainability by reducing the storage\n\t//\t\tpaths to a single mechanism.\n\t//\t3. Use the same single mechanism to support \"private\" and \"user\" data.\n\t//\t4. _Never_ expose \"private\" data to user code (TODO: Drop _data, _removeData)\n\t//\t5. Avoid exposing implementation details on user objects (eg. expando properties)\n\t//\t6. Provide a clear path for implementation upgrade to WeakMap in 2014\n\n\tvar rbrace = /^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,\n\t\trmultiDash = /[A-Z]/g;\n\n\tfunction getData(data) {\n\t\tif (data === \"true\") {\n\t\t\treturn true;\n\t\t}\n\n\t\tif (data === \"false\") {\n\t\t\treturn false;\n\t\t}\n\n\t\tif (data === \"null\") {\n\t\t\treturn null;\n\t\t}\n\n\t\t// Only convert to a number if it doesn't change the string\n\t\tif (data === +data + \"\") {\n\t\t\treturn +data;\n\t\t}\n\n\t\tif (rbrace.test(data)) {\n\t\t\treturn JSON.parse(data);\n\t\t}\n\n\t\treturn data;\n\t}\n\n\tfunction dataAttr(elem, key, data) {\n\t\tvar name;\n\n\t\t// If nothing was found internally, try to fetch any\n\t\t// data from the HTML5 data-* attribute\n\t\tif (data === undefined && elem.nodeType === 1) {\n\t\t\tname = \"data-\" + key.replace(rmultiDash, \"-$&\").toLowerCase();\n\t\t\tdata = elem.getAttribute(name);\n\n\t\t\tif (typeof data === \"string\") {\n\t\t\t\ttry {\n\t\t\t\t\tdata = getData(data);\n\t\t\t\t} catch (e) { }\n\n\t\t\t\t// Make sure we set the data so it isn't changed later\n\t\t\t\tdataUser.set(elem, key, data);\n\t\t\t} else {\n\t\t\t\tdata = undefined;\n\t\t\t}\n\t\t}\n\t\treturn data;\n\t}\n\n\tjQuery.extend({\n\t\thasData: function (elem) {\n\t\t\treturn dataUser.hasData(elem) || dataPriv.hasData(elem);\n\t\t},\n\n\t\tdata: function (elem, name, data) {\n\t\t\treturn dataUser.access(elem, name, data);\n\t\t},\n\n\t\tremoveData: function (elem, name) {\n\t\t\tdataUser.remove(elem, name);\n\t\t},\n\n\t\t// TODO: Now that all calls to _data and _removeData have been replaced\n\t\t// with direct calls to dataPriv methods, these can be deprecated.\n\t\t_data: function (elem, name, data) {\n\t\t\treturn dataPriv.access(elem, name, data);\n\t\t},\n\n\t\t_removeData: function (elem, name) {\n\t\t\tdataPriv.remove(elem, name);\n\t\t}\n\t});\n\n\tjQuery.fn.extend({\n\t\tdata: function (key, value) {\n\t\t\tvar i, name, data,\n\t\t\t\telem = this[0],\n\t\t\t\tattrs = elem && elem.attributes;\n\n\t\t\t// Gets all values\n\t\t\tif (key === undefined) {\n\t\t\t\tif (this.length) {\n\t\t\t\t\tdata = dataUser.get(elem);\n\n\t\t\t\t\tif (elem.nodeType === 1 && !dataPriv.get(elem, \"hasDataAttrs\")) {\n\t\t\t\t\t\ti = attrs.length;\n\t\t\t\t\t\twhile (i--) {\n\n\t\t\t\t\t\t\t// Support: IE 11 only\n\t\t\t\t\t\t\t// The attrs elements can be null (trac-14894)\n\t\t\t\t\t\t\tif (attrs[i]) {\n\t\t\t\t\t\t\t\tname = attrs[i].name;\n\t\t\t\t\t\t\t\tif (name.indexOf(\"data-\") === 0) {\n\t\t\t\t\t\t\t\t\tname = camelCase(name.slice(5));\n\t\t\t\t\t\t\t\t\tdataAttr(elem, name, data[name]);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdataPriv.set(elem, \"hasDataAttrs\", true);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn data;\n\t\t\t}\n\n\t\t\t// Sets multiple values\n\t\t\tif (typeof key === \"object\") {\n\t\t\t\treturn this.each(function () {\n\t\t\t\t\tdataUser.set(this, key);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn access(this, function (value) {\n\t\t\t\tvar data;\n\n\t\t\t\t// The calling jQuery object (element matches) is not empty\n\t\t\t\t// (and therefore has an element appears at this[ 0 ]) and the\n\t\t\t\t// `value` parameter was not undefined. An empty jQuery object\n\t\t\t\t// will result in `undefined` for elem = this[ 0 ] which will\n\t\t\t\t// throw an exception if an attempt to read a data cache is made.\n\t\t\t\tif (elem && value === undefined) {\n\n\t\t\t\t\t// Attempt to get data from the cache\n\t\t\t\t\t// The key will always be camelCased in Data\n\t\t\t\t\tdata = dataUser.get(elem, key);\n\t\t\t\t\tif (data !== undefined) {\n\t\t\t\t\t\treturn data;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Attempt to \"discover\" the data in\n\t\t\t\t\t// HTML5 custom data-* attrs\n\t\t\t\t\tdata = dataAttr(elem, key);\n\t\t\t\t\tif (data !== undefined) {\n\t\t\t\t\t\treturn data;\n\t\t\t\t\t}\n\n\t\t\t\t\t// We tried really hard, but the data doesn't exist.\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Set the data...\n\t\t\t\tthis.each(function () {\n\n\t\t\t\t\t// We always store the camelCased key\n\t\t\t\t\tdataUser.set(this, key, value);\n\t\t\t\t});\n\t\t\t}, null, value, arguments.length > 1, null, true);\n\t\t},\n\n\t\tremoveData: function (key) {\n\t\t\treturn this.each(function () {\n\t\t\t\tdataUser.remove(this, key);\n\t\t\t});\n\t\t}\n\t});\n\n\n\tjQuery.extend({\n\t\tqueue: function (elem, type, data) {\n\t\t\tvar queue;\n\n\t\t\tif (elem) {\n\t\t\t\ttype = (type || \"fx\") + \"queue\";\n\t\t\t\tqueue = dataPriv.get(elem, type);\n\n\t\t\t\t// Speed up dequeue by getting out quickly if this is just a lookup\n\t\t\t\tif (data) {\n\t\t\t\t\tif (!queue || Array.isArray(data)) {\n\t\t\t\t\t\tqueue = dataPriv.access(elem, type, jQuery.makeArray(data));\n\t\t\t\t\t} else {\n\t\t\t\t\t\tqueue.push(data);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn queue || [];\n\t\t\t}\n\t\t},\n\n\t\tdequeue: function (elem, type) {\n\t\t\ttype = type || \"fx\";\n\n\t\t\tvar queue = jQuery.queue(elem, type),\n\t\t\t\tstartLength = queue.length,\n\t\t\t\tfn = queue.shift(),\n\t\t\t\thooks = jQuery._queueHooks(elem, type),\n\t\t\t\tnext = function () {\n\t\t\t\t\tjQuery.dequeue(elem, type);\n\t\t\t\t};\n\n\t\t\t// If the fx queue is dequeued, always remove the progress sentinel\n\t\t\tif (fn === \"inprogress\") {\n\t\t\t\tfn = queue.shift();\n\t\t\t\tstartLength--;\n\t\t\t}\n\n\t\t\tif (fn) {\n\n\t\t\t\t// Add a progress sentinel to prevent the fx queue from being\n\t\t\t\t// automatically dequeued\n\t\t\t\tif (type === \"fx\") {\n\t\t\t\t\tqueue.unshift(\"inprogress\");\n\t\t\t\t}\n\n\t\t\t\t// Clear up the last queue stop function\n\t\t\t\tdelete hooks.stop;\n\t\t\t\tfn.call(elem, next, hooks);\n\t\t\t}\n\n\t\t\tif (!startLength && hooks) {\n\t\t\t\thooks.empty.fire();\n\t\t\t}\n\t\t},\n\n\t\t// Not public - generate a queueHooks object, or return the current one\n\t\t_queueHooks: function (elem, type) {\n\t\t\tvar key = type + \"queueHooks\";\n\t\t\treturn dataPriv.get(elem, key) || dataPriv.access(elem, key, {\n\t\t\t\tempty: jQuery.Callbacks(\"once memory\").add(function () {\n\t\t\t\t\tdataPriv.remove(elem, [type + \"queue\", key]);\n\t\t\t\t})\n\t\t\t});\n\t\t}\n\t});\n\n\tjQuery.fn.extend({\n\t\tqueue: function (type, data) {\n\t\t\tvar setter = 2;\n\n\t\t\tif (typeof type !== \"string\") {\n\t\t\t\tdata = type;\n\t\t\t\ttype = \"fx\";\n\t\t\t\tsetter--;\n\t\t\t}\n\n\t\t\tif (arguments.length < setter) {\n\t\t\t\treturn jQuery.queue(this[0], type);\n\t\t\t}\n\n\t\t\treturn data === undefined ?\n\t\t\t\tthis :\n\t\t\t\tthis.each(function () {\n\t\t\t\t\tvar queue = jQuery.queue(this, type, data);\n\n\t\t\t\t\t// Ensure a hooks for this queue\n\t\t\t\t\tjQuery._queueHooks(this, type);\n\n\t\t\t\t\tif (type === \"fx\" && queue[0] !== \"inprogress\") {\n\t\t\t\t\t\tjQuery.dequeue(this, type);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t},\n\t\tdequeue: function (type) {\n\t\t\treturn this.each(function () {\n\t\t\t\tjQuery.dequeue(this, type);\n\t\t\t});\n\t\t},\n\t\tclearQueue: function (type) {\n\t\t\treturn this.queue(type || \"fx\", []);\n\t\t},\n\n\t\t// Get a promise resolved when queues of a certain type\n\t\t// are emptied (fx is the type by default)\n\t\tpromise: function (type, obj) {\n\t\t\tvar tmp,\n\t\t\t\tcount = 1,\n\t\t\t\tdefer = jQuery.Deferred(),\n\t\t\t\telements = this,\n\t\t\t\ti = this.length,\n\t\t\t\tresolve = function () {\n\t\t\t\t\tif (!(--count)) {\n\t\t\t\t\t\tdefer.resolveWith(elements, [elements]);\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\tif (typeof type !== \"string\") {\n\t\t\t\tobj = type;\n\t\t\t\ttype = undefined;\n\t\t\t}\n\t\t\ttype = type || \"fx\";\n\n\t\t\twhile (i--) {\n\t\t\t\ttmp = dataPriv.get(elements[i], type + \"queueHooks\");\n\t\t\t\tif (tmp && tmp.empty) {\n\t\t\t\t\tcount++;\n\t\t\t\t\ttmp.empty.add(resolve);\n\t\t\t\t}\n\t\t\t}\n\t\t\tresolve();\n\t\t\treturn defer.promise(obj);\n\t\t}\n\t});\n\tvar pnum = (/[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/).source;\n\n\tvar rcssNum = new RegExp(\"^(?:([+-])=|)(\" + pnum + \")([a-z%]*)$\", \"i\");\n\n\n\tvar cssExpand = [\"Top\", \"Right\", \"Bottom\", \"Left\"];\n\n\tvar documentElement = document.documentElement;\n\n\n\n\tvar isAttached = function (elem) {\n\t\treturn jQuery.contains(elem.ownerDocument, elem);\n\t},\n\t\tcomposed = { composed: true };\n\n\t// Support: IE 9 - 11+, Edge 12 - 18+, iOS 10.0 - 10.2 only\n\t// Check attachment across shadow DOM boundaries when possible (gh-3504)\n\t// Support: iOS 10.0-10.2 only\n\t// Early iOS 10 versions support `attachShadow` but not `getRootNode`,\n\t// leading to errors. We need to check for `getRootNode`.\n\tif (documentElement.getRootNode) {\n\t\tisAttached = function (elem) {\n\t\t\treturn jQuery.contains(elem.ownerDocument, elem) ||\n\t\t\t\telem.getRootNode(composed) === elem.ownerDocument;\n\t\t};\n\t}\n\tvar isHiddenWithinTree = function (elem, el) {\n\n\t\t// isHiddenWithinTree might be called from jQuery#filter function;\n\t\t// in that case, element will be second argument\n\t\telem = el || elem;\n\n\t\t// Inline style trumps all\n\t\treturn elem.style.display === \"none\" ||\n\t\t\telem.style.display === \"\" &&\n\n\t\t\t// Otherwise, check computed style\n\t\t\t// Support: Firefox <=43 - 45\n\t\t\t// Disconnected elements can have computed display: none, so first confirm that elem is\n\t\t\t// in the document.\n\t\t\tisAttached(elem) &&\n\n\t\t\tjQuery.css(elem, \"display\") === \"none\";\n\t};\n\n\n\n\tfunction adjustCSS(elem, prop, valueParts, tween) {\n\t\tvar adjusted, scale,\n\t\t\tmaxIterations = 20,\n\t\t\tcurrentValue = tween ?\n\t\t\t\tfunction () {\n\t\t\t\t\treturn tween.cur();\n\t\t\t\t} :\n\t\t\t\tfunction () {\n\t\t\t\t\treturn jQuery.css(elem, prop, \"\");\n\t\t\t\t},\n\t\t\tinitial = currentValue(),\n\t\t\tunit = valueParts && valueParts[3] || (jQuery.cssNumber[prop] ? \"\" : \"px\"),\n\n\t\t\t// Starting value computation is required for potential unit mismatches\n\t\t\tinitialInUnit = elem.nodeType &&\n\t\t\t\t(jQuery.cssNumber[prop] || unit !== \"px\" && +initial) &&\n\t\t\t\trcssNum.exec(jQuery.css(elem, prop));\n\n\t\tif (initialInUnit && initialInUnit[3] !== unit) {\n\n\t\t\t// Support: Firefox <=54\n\t\t\t// Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144)\n\t\t\tinitial = initial / 2;\n\n\t\t\t// Trust units reported by jQuery.css\n\t\t\tunit = unit || initialInUnit[3];\n\n\t\t\t// Iteratively approximate from a nonzero starting point\n\t\t\tinitialInUnit = +initial || 1;\n\n\t\t\twhile (maxIterations--) {\n\n\t\t\t\t// Evaluate and update our best guess (doubling guesses that zero out).\n\t\t\t\t// Finish if the scale equals or crosses 1 (making the old*new product non-positive).\n\t\t\t\tjQuery.style(elem, prop, initialInUnit + unit);\n\t\t\t\tif ((1 - scale) * (1 - (scale = currentValue() / initial || 0.5)) <= 0) {\n\t\t\t\t\tmaxIterations = 0;\n\t\t\t\t}\n\t\t\t\tinitialInUnit = initialInUnit / scale;\n\n\t\t\t}\n\n\t\t\tinitialInUnit = initialInUnit * 2;\n\t\t\tjQuery.style(elem, prop, initialInUnit + unit);\n\n\t\t\t// Make sure we update the tween properties later on\n\t\t\tvalueParts = valueParts || [];\n\t\t}\n\n\t\tif (valueParts) {\n\t\t\tinitialInUnit = +initialInUnit || +initial || 0;\n\n\t\t\t// Apply relative offset (+=/-=) if specified\n\t\t\tadjusted = valueParts[1] ?\n\t\t\t\tinitialInUnit + (valueParts[1] + 1) * valueParts[2] :\n\t\t\t\t+valueParts[2];\n\t\t\tif (tween) {\n\t\t\t\ttween.unit = unit;\n\t\t\t\ttween.start = initialInUnit;\n\t\t\t\ttween.end = adjusted;\n\t\t\t}\n\t\t}\n\t\treturn adjusted;\n\t}\n\n\n\tvar defaultDisplayMap = {};\n\n\tfunction getDefaultDisplay(elem) {\n\t\tvar temp,\n\t\t\tdoc = elem.ownerDocument,\n\t\t\tnodeName = elem.nodeName,\n\t\t\tdisplay = defaultDisplayMap[nodeName];\n\n\t\tif (display) {\n\t\t\treturn display;\n\t\t}\n\n\t\ttemp = doc.body.appendChild(doc.createElement(nodeName));\n\t\tdisplay = jQuery.css(temp, \"display\");\n\n\t\ttemp.parentNode.removeChild(temp);\n\n\t\tif (display === \"none\") {\n\t\t\tdisplay = \"block\";\n\t\t}\n\t\tdefaultDisplayMap[nodeName] = display;\n\n\t\treturn display;\n\t}\n\n\tfunction showHide(elements, show) {\n\t\tvar display, elem,\n\t\t\tvalues = [],\n\t\t\tindex = 0,\n\t\t\tlength = elements.length;\n\n\t\t// Determine new display value for elements that need to change\n\t\tfor (; index < length; index++) {\n\t\t\telem = elements[index];\n\t\t\tif (!elem.style) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tdisplay = elem.style.display;\n\t\t\tif (show) {\n\n\t\t\t\t// Since we force visibility upon cascade-hidden elements, an immediate (and slow)\n\t\t\t\t// check is required in this first loop unless we have a nonempty display value (either\n\t\t\t\t// inline or about-to-be-restored)\n\t\t\t\tif (display === \"none\") {\n\t\t\t\t\tvalues[index] = dataPriv.get(elem, \"display\") || null;\n\t\t\t\t\tif (!values[index]) {\n\t\t\t\t\t\telem.style.display = \"\";\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (elem.style.display === \"\" && isHiddenWithinTree(elem)) {\n\t\t\t\t\tvalues[index] = getDefaultDisplay(elem);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (display !== \"none\") {\n\t\t\t\t\tvalues[index] = \"none\";\n\n\t\t\t\t\t// Remember what we're overwriting\n\t\t\t\t\tdataPriv.set(elem, \"display\", display);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Set the display of the elements in a second loop to avoid constant reflow\n\t\tfor (index = 0; index < length; index++) {\n\t\t\tif (values[index] != null) {\n\t\t\t\telements[index].style.display = values[index];\n\t\t\t}\n\t\t}\n\n\t\treturn elements;\n\t}\n\n\tjQuery.fn.extend({\n\t\tshow: function () {\n\t\t\treturn showHide(this, true);\n\t\t},\n\t\thide: function () {\n\t\t\treturn showHide(this);\n\t\t},\n\t\ttoggle: function (state) {\n\t\t\tif (typeof state === \"boolean\") {\n\t\t\t\treturn state ? this.show() : this.hide();\n\t\t\t}\n\n\t\t\treturn this.each(function () {\n\t\t\t\tif (isHiddenWithinTree(this)) {\n\t\t\t\t\tjQuery(this).show();\n\t\t\t\t} else {\n\t\t\t\t\tjQuery(this).hide();\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t});\n\tvar rcheckableType = (/^(?:checkbox|radio)$/i);\n\n\tvar rtagName = (/<([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]*)/i);\n\n\tvar rscriptType = (/^$|^module$|\\/(?:java|ecma)script/i);\n\n\n\n\t(function () {\n\t\tvar fragment = document.createDocumentFragment(),\n\t\t\tdiv = fragment.appendChild(document.createElement(\"div\")),\n\t\t\tinput = document.createElement(\"input\");\n\n\t\t// Support: Android 4.0 - 4.3 only\n\t\t// Check state lost if the name is set (trac-11217)\n\t\t// Support: Windows Web Apps (WWA)\n\t\t// `name` and `type` must use .setAttribute for WWA (trac-14901)\n\t\tinput.setAttribute(\"type\", \"radio\");\n\t\tinput.setAttribute(\"checked\", \"checked\");\n\t\tinput.setAttribute(\"name\", \"t\");\n\n\t\tdiv.appendChild(input);\n\n\t\t// Support: Android <=4.1 only\n\t\t// Older WebKit doesn't clone checked state correctly in fragments\n\t\tsupport.checkClone = div.cloneNode(true).cloneNode(true).lastChild.checked;\n\n\t\t// Support: IE <=11 only\n\t\t// Make sure textarea (and checkbox) defaultValue is properly cloned\n\t\tdiv.innerHTML = \"<textarea>x</textarea>\";\n\t\tsupport.noCloneChecked = !!div.cloneNode(true).lastChild.defaultValue;\n\n\t\t// Support: IE <=9 only\n\t\t// IE <=9 replaces <option> tags with their contents when inserted outside of\n\t\t// the select element.\n\t\tdiv.innerHTML = \"<option></option>\";\n\t\tsupport.option = !!div.lastChild;\n\t})();\n\n\n\t// We have to close these tags to support XHTML (trac-13200)\n\tvar wrapMap = {\n\n\t\t// XHTML parsers do not magically insert elements in the\n\t\t// same way that tag soup parsers do. So we cannot shorten\n\t\t// this by omitting <tbody> or other required elements.\n\t\tthead: [1, \"<table>\", \"</table>\"],\n\t\tcol: [2, \"<table><colgroup>\", \"</colgroup></table>\"],\n\t\ttr: [2, \"<table><tbody>\", \"</tbody></table>\"],\n\t\ttd: [3, \"<table><tbody><tr>\", \"</tr></tbody></table>\"],\n\n\t\t_default: [0, \"\", \"\"]\n\t};\n\n\twrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;\n\twrapMap.th = wrapMap.td;\n\n\t// Support: IE <=9 only\n\tif (!support.option) {\n\t\twrapMap.optgroup = wrapMap.option = [1, \"<select multiple='multiple'>\", \"</select>\"];\n\t}\n\n\n\tfunction getAll(context, tag) {\n\n\t\t// Support: IE <=9 - 11 only\n\t\t// Use typeof to avoid zero-argument method invocation on host objects (trac-15151)\n\t\tvar ret;\n\n\t\tif (typeof context.getElementsByTagName !== \"undefined\") {\n\t\t\tret = context.getElementsByTagName(tag || \"*\");\n\n\t\t} else if (typeof context.querySelectorAll !== \"undefined\") {\n\t\t\tret = context.querySelectorAll(tag || \"*\");\n\n\t\t} else {\n\t\t\tret = [];\n\t\t}\n\n\t\tif (tag === undefined || tag && nodeName(context, tag)) {\n\t\t\treturn jQuery.merge([context], ret);\n\t\t}\n\n\t\treturn ret;\n\t}\n\n\n\t// Mark scripts as having already been evaluated\n\tfunction setGlobalEval(elems, refElements) {\n\t\tvar i = 0,\n\t\t\tl = elems.length;\n\n\t\tfor (; i < l; i++) {\n\t\t\tdataPriv.set(\n\t\t\t\telems[i],\n\t\t\t\t\"globalEval\",\n\t\t\t\t!refElements || dataPriv.get(refElements[i], \"globalEval\")\n\t\t\t);\n\t\t}\n\t}\n\n\n\tvar rhtml = /<|&#?\\w+;/;\n\n\tfunction buildFragment(elems, context, scripts, selection, ignored) {\n\t\tvar elem, tmp, tag, wrap, attached, j,\n\t\t\tfragment = context.createDocumentFragment(),\n\t\t\tnodes = [],\n\t\t\ti = 0,\n\t\t\tl = elems.length;\n\n\t\tfor (; i < l; i++) {\n\t\t\telem = elems[i];\n\n\t\t\tif (elem || elem === 0) {\n\n\t\t\t\t// Add nodes directly\n\t\t\t\tif (toType(elem) === \"object\") {\n\n\t\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\t\tjQuery.merge(nodes, elem.nodeType ? [elem] : elem);\n\n\t\t\t\t\t// Convert non-html into a text node\n\t\t\t\t} else if (!rhtml.test(elem)) {\n\t\t\t\t\tnodes.push(context.createTextNode(elem));\n\n\t\t\t\t\t// Convert html into DOM nodes\n\t\t\t\t} else {\n\t\t\t\t\ttmp = tmp || fragment.appendChild(context.createElement(\"div\"));\n\n\t\t\t\t\t// Deserialize a standard representation\n\t\t\t\t\ttag = (rtagName.exec(elem) || [\"\", \"\"])[1].toLowerCase();\n\t\t\t\t\twrap = wrapMap[tag] || wrapMap._default;\n\t\t\t\t\ttmp.innerHTML = wrap[1] + jQuery.htmlPrefilter(elem) + wrap[2];\n\n\t\t\t\t\t// Descend through wrappers to the right content\n\t\t\t\t\tj = wrap[0];\n\t\t\t\t\twhile (j--) {\n\t\t\t\t\t\ttmp = tmp.lastChild;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\t\tjQuery.merge(nodes, tmp.childNodes);\n\n\t\t\t\t\t// Remember the top-level container\n\t\t\t\t\ttmp = fragment.firstChild;\n\n\t\t\t\t\t// Ensure the created nodes are orphaned (trac-12392)\n\t\t\t\t\ttmp.textContent = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Remove wrapper from fragment\n\t\tfragment.textContent = \"\";\n\n\t\ti = 0;\n\t\twhile ((elem = nodes[i++])) {\n\n\t\t\t// Skip elements already in the context collection (trac-4087)\n\t\t\tif (selection && jQuery.inArray(elem, selection) > -1) {\n\t\t\t\tif (ignored) {\n\t\t\t\t\tignored.push(elem);\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tattached = isAttached(elem);\n\n\t\t\t// Append to fragment\n\t\t\ttmp = getAll(fragment.appendChild(elem), \"script\");\n\n\t\t\t// Preserve script evaluation history\n\t\t\tif (attached) {\n\t\t\t\tsetGlobalEval(tmp);\n\t\t\t}\n\n\t\t\t// Capture executables\n\t\t\tif (scripts) {\n\t\t\t\tj = 0;\n\t\t\t\twhile ((elem = tmp[j++])) {\n\t\t\t\t\tif (rscriptType.test(elem.type || \"\")) {\n\t\t\t\t\t\tscripts.push(elem);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn fragment;\n\t}\n\n\n\tvar rtypenamespace = /^([^.]*)(?:\\.(.+)|)/;\n\n\tfunction returnTrue() {\n\t\treturn true;\n\t}\n\n\tfunction returnFalse() {\n\t\treturn false;\n\t}\n\n\tfunction on(elem, types, selector, data, fn, one) {\n\t\tvar origFn, type;\n\n\t\t// Types can be a map of types/handlers\n\t\tif (typeof types === \"object\") {\n\n\t\t\t// ( types-Object, selector, data )\n\t\t\tif (typeof selector !== \"string\") {\n\n\t\t\t\t// ( types-Object, data )\n\t\t\t\tdata = data || selector;\n\t\t\t\tselector = undefined;\n\t\t\t}\n\t\t\tfor (type in types) {\n\t\t\t\ton(elem, type, selector, data, types[type], one);\n\t\t\t}\n\t\t\treturn elem;\n\t\t}\n\n\t\tif (data == null && fn == null) {\n\n\t\t\t// ( types, fn )\n\t\t\tfn = selector;\n\t\t\tdata = selector = undefined;\n\t\t} else if (fn == null) {\n\t\t\tif (typeof selector === \"string\") {\n\n\t\t\t\t// ( types, selector, fn )\n\t\t\t\tfn = data;\n\t\t\t\tdata = undefined;\n\t\t\t} else {\n\n\t\t\t\t// ( types, data, fn )\n\t\t\t\tfn = data;\n\t\t\t\tdata = selector;\n\t\t\t\tselector = undefined;\n\t\t\t}\n\t\t}\n\t\tif (fn === false) {\n\t\t\tfn = returnFalse;\n\t\t} else if (!fn) {\n\t\t\treturn elem;\n\t\t}\n\n\t\tif (one === 1) {\n\t\t\torigFn = fn;\n\t\t\tfn = function (event) {\n\n\t\t\t\t// Can use an empty set, since event contains the info\n\t\t\t\tjQuery().off(event);\n\t\t\t\treturn origFn.apply(this, arguments);\n\t\t\t};\n\n\t\t\t// Use same guid so caller can remove using origFn\n\t\t\tfn.guid = origFn.guid || (origFn.guid = jQuery.guid++);\n\t\t}\n\t\treturn elem.each(function () {\n\t\t\tjQuery.event.add(this, types, fn, data, selector);\n\t\t});\n\t}\n\n\t/*\n\t * Helper functions for managing events -- not part of the public interface.\n\t * Props to Dean Edwards' addEvent library for many of the ideas.\n\t */\n\tjQuery.event = {\n\n\t\tglobal: {},\n\n\t\tadd: function (elem, types, handler, data, selector) {\n\n\t\t\tvar handleObjIn, eventHandle, tmp,\n\t\t\t\tevents, t, handleObj,\n\t\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\t\telemData = dataPriv.get(elem);\n\n\t\t\t// Only attach events to objects that accept data\n\t\t\tif (!acceptData(elem)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Caller can pass in an object of custom data in lieu of the handler\n\t\t\tif (handler.handler) {\n\t\t\t\thandleObjIn = handler;\n\t\t\t\thandler = handleObjIn.handler;\n\t\t\t\tselector = handleObjIn.selector;\n\t\t\t}\n\n\t\t\t// Ensure that invalid selectors throw exceptions at attach time\n\t\t\t// Evaluate against documentElement in case elem is a non-element node (e.g., document)\n\t\t\tif (selector) {\n\t\t\t\tjQuery.find.matchesSelector(documentElement, selector);\n\t\t\t}\n\n\t\t\t// Make sure that the handler has a unique ID, used to find/remove it later\n\t\t\tif (!handler.guid) {\n\t\t\t\thandler.guid = jQuery.guid++;\n\t\t\t}\n\n\t\t\t// Init the element's event structure and main handler, if this is the first\n\t\t\tif (!(events = elemData.events)) {\n\t\t\t\tevents = elemData.events = Object.create(null);\n\t\t\t}\n\t\t\tif (!(eventHandle = elemData.handle)) {\n\t\t\t\teventHandle = elemData.handle = function (e) {\n\n\t\t\t\t\t// Discard the second event of a jQuery.event.trigger() and\n\t\t\t\t\t// when an event is called after a page has unloaded\n\t\t\t\t\treturn typeof jQuery !== \"undefined\" && jQuery.event.triggered !== e.type ?\n\t\t\t\t\t\tjQuery.event.dispatch.apply(elem, arguments) : undefined;\n\t\t\t\t};\n\t\t\t}\n\n\t\t\t// Handle multiple events separated by a space\n\t\t\ttypes = (types || \"\").match(rnothtmlwhite) || [\"\"];\n\t\t\tt = types.length;\n\t\t\twhile (t--) {\n\t\t\t\ttmp = rtypenamespace.exec(types[t]) || [];\n\t\t\t\ttype = origType = tmp[1];\n\t\t\t\tnamespaces = (tmp[2] || \"\").split(\".\").sort();\n\n\t\t\t\t// There *must* be a type, no attaching namespace-only handlers\n\t\t\t\tif (!type) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// If event changes its type, use the special event handlers for the changed type\n\t\t\t\tspecial = jQuery.event.special[type] || {};\n\n\t\t\t\t// If selector defined, determine special event api type, otherwise given type\n\t\t\t\ttype = (selector ? special.delegateType : special.bindType) || type;\n\n\t\t\t\t// Update special based on newly reset type\n\t\t\t\tspecial = jQuery.event.special[type] || {};\n\n\t\t\t\t// handleObj is passed to all event handlers\n\t\t\t\thandleObj = jQuery.extend({\n\t\t\t\t\ttype: type,\n\t\t\t\t\torigType: origType,\n\t\t\t\t\tdata: data,\n\t\t\t\t\thandler: handler,\n\t\t\t\t\tguid: handler.guid,\n\t\t\t\t\tselector: selector,\n\t\t\t\t\tneedsContext: selector && jQuery.expr.match.needsContext.test(selector),\n\t\t\t\t\tnamespace: namespaces.join(\".\")\n\t\t\t\t}, handleObjIn);\n\n\t\t\t\t// Init the event handler queue if we're the first\n\t\t\t\tif (!(handlers = events[type])) {\n\t\t\t\t\thandlers = events[type] = [];\n\t\t\t\t\thandlers.delegateCount = 0;\n\n\t\t\t\t\t// Only use addEventListener if the special events handler returns false\n\t\t\t\t\tif (!special.setup ||\n\t\t\t\t\t\tspecial.setup.call(elem, data, namespaces, eventHandle) === false) {\n\n\t\t\t\t\t\tif (elem.addEventListener) {\n\t\t\t\t\t\t\telem.addEventListener(type, eventHandle);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (special.add) {\n\t\t\t\t\tspecial.add.call(elem, handleObj);\n\n\t\t\t\t\tif (!handleObj.handler.guid) {\n\t\t\t\t\t\thandleObj.handler.guid = handler.guid;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Add to the element's handler list, delegates in front\n\t\t\t\tif (selector) {\n\t\t\t\t\thandlers.splice(handlers.delegateCount++, 0, handleObj);\n\t\t\t\t} else {\n\t\t\t\t\thandlers.push(handleObj);\n\t\t\t\t}\n\n\t\t\t\t// Keep track of which events have ever been used, for event optimization\n\t\t\t\tjQuery.event.global[type] = true;\n\t\t\t}\n\n\t\t},\n\n\t\t// Detach an event or set of events from an element\n\t\tremove: function (elem, types, handler, selector, mappedTypes) {\n\n\t\t\tvar j, origCount, tmp,\n\t\t\t\tevents, t, handleObj,\n\t\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\t\telemData = dataPriv.hasData(elem) && dataPriv.get(elem);\n\n\t\t\tif (!elemData || !(events = elemData.events)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Once for each type.namespace in types; type may be omitted\n\t\t\ttypes = (types || \"\").match(rnothtmlwhite) || [\"\"];\n\t\t\tt = types.length;\n\t\t\twhile (t--) {\n\t\t\t\ttmp = rtypenamespace.exec(types[t]) || [];\n\t\t\t\ttype = origType = tmp[1];\n\t\t\t\tnamespaces = (tmp[2] || \"\").split(\".\").sort();\n\n\t\t\t\t// Unbind all events (on this namespace, if provided) for the element\n\t\t\t\tif (!type) {\n\t\t\t\t\tfor (type in events) {\n\t\t\t\t\t\tjQuery.event.remove(elem, type + types[t], handler, selector, true);\n\t\t\t\t\t}\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tspecial = jQuery.event.special[type] || {};\n\t\t\t\ttype = (selector ? special.delegateType : special.bindType) || type;\n\t\t\t\thandlers = events[type] || [];\n\t\t\t\ttmp = tmp[2] &&\n\t\t\t\t\tnew RegExp(\"(^|\\\\.)\" + namespaces.join(\"\\\\.(?:.*\\\\.|)\") + \"(\\\\.|$)\");\n\n\t\t\t\t// Remove matching events\n\t\t\t\torigCount = j = handlers.length;\n\t\t\t\twhile (j--) {\n\t\t\t\t\thandleObj = handlers[j];\n\n\t\t\t\t\tif ((mappedTypes || origType === handleObj.origType) &&\n\t\t\t\t\t\t(!handler || handler.guid === handleObj.guid) &&\n\t\t\t\t\t\t(!tmp || tmp.test(handleObj.namespace)) &&\n\t\t\t\t\t\t(!selector || selector === handleObj.selector ||\n\t\t\t\t\t\t\tselector === \"**\" && handleObj.selector)) {\n\t\t\t\t\t\thandlers.splice(j, 1);\n\n\t\t\t\t\t\tif (handleObj.selector) {\n\t\t\t\t\t\t\thandlers.delegateCount--;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (special.remove) {\n\t\t\t\t\t\t\tspecial.remove.call(elem, handleObj);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Remove generic event handler if we removed something and no more handlers exist\n\t\t\t\t// (avoids potential for endless recursion during removal of special event handlers)\n\t\t\t\tif (origCount && !handlers.length) {\n\t\t\t\t\tif (!special.teardown ||\n\t\t\t\t\t\tspecial.teardown.call(elem, namespaces, elemData.handle) === false) {\n\n\t\t\t\t\t\tjQuery.removeEvent(elem, type, elemData.handle);\n\t\t\t\t\t}\n\n\t\t\t\t\tdelete events[type];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove data and the expando if it's no longer used\n\t\t\tif (jQuery.isEmptyObject(events)) {\n\t\t\t\tdataPriv.remove(elem, \"handle events\");\n\t\t\t}\n\t\t},\n\n\t\tdispatch: function (nativeEvent) {\n\n\t\t\tvar i, j, ret, matched, handleObj, handlerQueue,\n\t\t\t\targs = new Array(arguments.length),\n\n\t\t\t\t// Make a writable jQuery.Event from the native event object\n\t\t\t\tevent = jQuery.event.fix(nativeEvent),\n\n\t\t\t\thandlers = (\n\t\t\t\t\tdataPriv.get(this, \"events\") || Object.create(null)\n\t\t\t\t)[event.type] || [],\n\t\t\t\tspecial = jQuery.event.special[event.type] || {};\n\n\t\t\t// Use the fix-ed jQuery.Event rather than the (read-only) native event\n\t\t\targs[0] = event;\n\n\t\t\tfor (i = 1; i < arguments.length; i++) {\n\t\t\t\targs[i] = arguments[i];\n\t\t\t}\n\n\t\t\tevent.delegateTarget = this;\n\n\t\t\t// Call the preDispatch hook for the mapped type, and let it bail if desired\n\t\t\tif (special.preDispatch && special.preDispatch.call(this, event) === false) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Determine handlers\n\t\t\thandlerQueue = jQuery.event.handlers.call(this, event, handlers);\n\n\t\t\t// Run delegates first; they may want to stop propagation beneath us\n\t\t\ti = 0;\n\t\t\twhile ((matched = handlerQueue[i++]) && !event.isPropagationStopped()) {\n\t\t\t\tevent.currentTarget = matched.elem;\n\n\t\t\t\tj = 0;\n\t\t\t\twhile ((handleObj = matched.handlers[j++]) &&\n\t\t\t\t\t!event.isImmediatePropagationStopped()) {\n\n\t\t\t\t\t// If the event is namespaced, then each handler is only invoked if it is\n\t\t\t\t\t// specially universal or its namespaces are a superset of the event's.\n\t\t\t\t\tif (!event.rnamespace || handleObj.namespace === false ||\n\t\t\t\t\t\tevent.rnamespace.test(handleObj.namespace)) {\n\n\t\t\t\t\t\tevent.handleObj = handleObj;\n\t\t\t\t\t\tevent.data = handleObj.data;\n\n\t\t\t\t\t\tret = ((jQuery.event.special[handleObj.origType] || {}).handle ||\n\t\t\t\t\t\t\thandleObj.handler).apply(matched.elem, args);\n\n\t\t\t\t\t\tif (ret !== undefined) {\n\t\t\t\t\t\t\tif ((event.result = ret) === false) {\n\t\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Call the postDispatch hook for the mapped type\n\t\t\tif (special.postDispatch) {\n\t\t\t\tspecial.postDispatch.call(this, event);\n\t\t\t}\n\n\t\t\treturn event.result;\n\t\t},\n\n\t\thandlers: function (event, handlers) {\n\t\t\tvar i, handleObj, sel, matchedHandlers, matchedSelectors,\n\t\t\t\thandlerQueue = [],\n\t\t\t\tdelegateCount = handlers.delegateCount,\n\t\t\t\tcur = event.target;\n\n\t\t\t// Find delegate handlers\n\t\t\tif (delegateCount &&\n\n\t\t\t\t// Support: IE <=9\n\t\t\t\t// Black-hole SVG <use> instance trees (trac-13180)\n\t\t\t\tcur.nodeType &&\n\n\t\t\t\t// Support: Firefox <=42\n\t\t\t\t// Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861)\n\t\t\t\t// https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click\n\t\t\t\t// Support: IE 11 only\n\t\t\t\t// ...but not arrow key \"clicks\" of radio inputs, which can have `button` -1 (gh-2343)\n\t\t\t\t!(event.type === \"click\" && event.button >= 1)) {\n\n\t\t\t\tfor (; cur !== this; cur = cur.parentNode || this) {\n\n\t\t\t\t\t// Don't check non-elements (trac-13208)\n\t\t\t\t\t// Don't process clicks on disabled elements (trac-6911, trac-8165, trac-11382, trac-11764)\n\t\t\t\t\tif (cur.nodeType === 1 && !(event.type === \"click\" && cur.disabled === true)) {\n\t\t\t\t\t\tmatchedHandlers = [];\n\t\t\t\t\t\tmatchedSelectors = {};\n\t\t\t\t\t\tfor (i = 0; i < delegateCount; i++) {\n\t\t\t\t\t\t\thandleObj = handlers[i];\n\n\t\t\t\t\t\t\t// Don't conflict with Object.prototype properties (trac-13203)\n\t\t\t\t\t\t\tsel = handleObj.selector + \" \";\n\n\t\t\t\t\t\t\tif (matchedSelectors[sel] === undefined) {\n\t\t\t\t\t\t\t\tmatchedSelectors[sel] = handleObj.needsContext ?\n\t\t\t\t\t\t\t\t\tjQuery(sel, this).index(cur) > -1 :\n\t\t\t\t\t\t\t\t\tjQuery.find(sel, this, null, [cur]).length;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (matchedSelectors[sel]) {\n\t\t\t\t\t\t\t\tmatchedHandlers.push(handleObj);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (matchedHandlers.length) {\n\t\t\t\t\t\t\thandlerQueue.push({ elem: cur, handlers: matchedHandlers });\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Add the remaining (directly-bound) handlers\n\t\t\tcur = this;\n\t\t\tif (delegateCount < handlers.length) {\n\t\t\t\thandlerQueue.push({ elem: cur, handlers: handlers.slice(delegateCount) });\n\t\t\t}\n\n\t\t\treturn handlerQueue;\n\t\t},\n\n\t\taddProp: function (name, hook) {\n\t\t\tObject.defineProperty(jQuery.Event.prototype, name, {\n\t\t\t\tenumerable: true,\n\t\t\t\tconfigurable: true,\n\n\t\t\t\tget: isFunction(hook) ?\n\t\t\t\t\tfunction () {\n\t\t\t\t\t\tif (this.originalEvent) {\n\t\t\t\t\t\t\treturn hook(this.originalEvent);\n\t\t\t\t\t\t}\n\t\t\t\t\t} :\n\t\t\t\t\tfunction () {\n\t\t\t\t\t\tif (this.originalEvent) {\n\t\t\t\t\t\t\treturn this.originalEvent[name];\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\n\t\t\t\tset: function (value) {\n\t\t\t\t\tObject.defineProperty(this, name, {\n\t\t\t\t\t\tenumerable: true,\n\t\t\t\t\t\tconfigurable: true,\n\t\t\t\t\t\twritable: true,\n\t\t\t\t\t\tvalue: value\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\tfix: function (originalEvent) {\n\t\t\treturn originalEvent[jQuery.expando] ?\n\t\t\t\toriginalEvent :\n\t\t\t\tnew jQuery.Event(originalEvent);\n\t\t},\n\n\t\tspecial: {\n\t\t\tload: {\n\n\t\t\t\t// Prevent triggered image.load events from bubbling to window.load\n\t\t\t\tnoBubble: true\n\t\t\t},\n\t\t\tclick: {\n\n\t\t\t\t// Utilize native event to ensure correct state for checkable inputs\n\t\t\t\tsetup: function (data) {\n\n\t\t\t\t\t// For mutual compressibility with _default, replace `this` access with a local var.\n\t\t\t\t\t// `|| data` is dead code meant only to preserve the variable through minification.\n\t\t\t\t\tvar el = this || data;\n\n\t\t\t\t\t// Claim the first handler\n\t\t\t\t\tif (rcheckableType.test(el.type) &&\n\t\t\t\t\t\tel.click && nodeName(el, \"input\")) {\n\n\t\t\t\t\t\t// dataPriv.set( el, \"click\", ... )\n\t\t\t\t\t\tleverageNative(el, \"click\", true);\n\t\t\t\t\t}\n\n\t\t\t\t\t// Return false to allow normal processing in the caller\n\t\t\t\t\treturn false;\n\t\t\t\t},\n\t\t\t\ttrigger: function (data) {\n\n\t\t\t\t\t// For mutual compressibility with _default, replace `this` access with a local var.\n\t\t\t\t\t// `|| data` is dead code meant only to preserve the variable through minification.\n\t\t\t\t\tvar el = this || data;\n\n\t\t\t\t\t// Force setup before triggering a click\n\t\t\t\t\tif (rcheckableType.test(el.type) &&\n\t\t\t\t\t\tel.click && nodeName(el, \"input\")) {\n\n\t\t\t\t\t\tleverageNative(el, \"click\");\n\t\t\t\t\t}\n\n\t\t\t\t\t// Return non-false to allow normal event-path propagation\n\t\t\t\t\treturn true;\n\t\t\t\t},\n\n\t\t\t\t// For cross-browser consistency, suppress native .click() on links\n\t\t\t\t// Also prevent it if we're currently inside a leveraged native-event stack\n\t\t\t\t_default: function (event) {\n\t\t\t\t\tvar target = event.target;\n\t\t\t\t\treturn rcheckableType.test(target.type) &&\n\t\t\t\t\t\ttarget.click && nodeName(target, \"input\") &&\n\t\t\t\t\t\tdataPriv.get(target, \"click\") ||\n\t\t\t\t\t\tnodeName(target, \"a\");\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tbeforeunload: {\n\t\t\t\tpostDispatch: function (event) {\n\n\t\t\t\t\t// Support: Firefox 20+\n\t\t\t\t\t// Firefox doesn't alert if the returnValue field is not set.\n\t\t\t\t\tif (event.result !== undefined && event.originalEvent) {\n\t\t\t\t\t\tevent.originalEvent.returnValue = event.result;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t// Ensure the presence of an event listener that handles manually-triggered\n\t// synthetic events by interrupting progress until reinvoked in response to\n\t// *native* events that it fires directly, ensuring that state changes have\n\t// already occurred before other listeners are invoked.\n\tfunction leverageNative(el, type, isSetup) {\n\n\t\t// Missing `isSetup` indicates a trigger call, which must force setup through jQuery.event.add\n\t\tif (!isSetup) {\n\t\t\tif (dataPriv.get(el, type) === undefined) {\n\t\t\t\tjQuery.event.add(el, type, returnTrue);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\t// Register the controller as a special universal handler for all event namespaces\n\t\tdataPriv.set(el, type, false);\n\t\tjQuery.event.add(el, type, {\n\t\t\tnamespace: false,\n\t\t\thandler: function (event) {\n\t\t\t\tvar result,\n\t\t\t\t\tsaved = dataPriv.get(this, type);\n\n\t\t\t\tif ((event.isTrigger & 1) && this[type]) {\n\n\t\t\t\t\t// Interrupt processing of the outer synthetic .trigger()ed event\n\t\t\t\t\tif (!saved) {\n\n\t\t\t\t\t\t// Store arguments for use when handling the inner native event\n\t\t\t\t\t\t// There will always be at least one argument (an event object), so this array\n\t\t\t\t\t\t// will not be confused with a leftover capture object.\n\t\t\t\t\t\tsaved = slice.call(arguments);\n\t\t\t\t\t\tdataPriv.set(this, type, saved);\n\n\t\t\t\t\t\t// Trigger the native event and capture its result\n\t\t\t\t\t\tthis[type]();\n\t\t\t\t\t\tresult = dataPriv.get(this, type);\n\t\t\t\t\t\tdataPriv.set(this, type, false);\n\n\t\t\t\t\t\tif (saved !== result) {\n\n\t\t\t\t\t\t\t// Cancel the outer synthetic event\n\t\t\t\t\t\t\tevent.stopImmediatePropagation();\n\t\t\t\t\t\t\tevent.preventDefault();\n\n\t\t\t\t\t\t\treturn result;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// If this is an inner synthetic event for an event with a bubbling surrogate\n\t\t\t\t\t\t// (focus or blur), assume that the surrogate already propagated from triggering\n\t\t\t\t\t\t// the native event and prevent that from happening again here.\n\t\t\t\t\t\t// This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the\n\t\t\t\t\t\t// bubbling surrogate propagates *after* the non-bubbling base), but that seems\n\t\t\t\t\t\t// less bad than duplication.\n\t\t\t\t\t} else if ((jQuery.event.special[type] || {}).delegateType) {\n\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t}\n\n\t\t\t\t\t// If this is a native event triggered above, everything is now in order\n\t\t\t\t\t// Fire an inner synthetic event with the original arguments\n\t\t\t\t} else if (saved) {\n\n\t\t\t\t\t// ...and capture the result\n\t\t\t\t\tdataPriv.set(this, type, jQuery.event.trigger(\n\t\t\t\t\t\tsaved[0],\n\t\t\t\t\t\tsaved.slice(1),\n\t\t\t\t\t\tthis\n\t\t\t\t\t));\n\n\t\t\t\t\t// Abort handling of the native event by all jQuery handlers while allowing\n\t\t\t\t\t// native handlers on the same element to run. On target, this is achieved\n\t\t\t\t\t// by stopping immediate propagation just on the jQuery event. However,\n\t\t\t\t\t// the native event is re-wrapped by a jQuery one on each level of the\n\t\t\t\t\t// propagation so the only way to stop it for jQuery is to stop it for\n\t\t\t\t\t// everyone via native `stopPropagation()`. This is not a problem for\n\t\t\t\t\t// focus/blur which don't bubble, but it does also stop click on checkboxes\n\t\t\t\t\t// and radios. We accept this limitation.\n\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\tevent.isImmediatePropagationStopped = returnTrue;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\tjQuery.removeEvent = function (elem, type, handle) {\n\n\t\t// This \"if\" is needed for plain objects\n\t\tif (elem.removeEventListener) {\n\t\t\telem.removeEventListener(type, handle);\n\t\t}\n\t};\n\n\tjQuery.Event = function (src, props) {\n\n\t\t// Allow instantiation without the 'new' keyword\n\t\tif (!(this instanceof jQuery.Event)) {\n\t\t\treturn new jQuery.Event(src, props);\n\t\t}\n\n\t\t// Event object\n\t\tif (src && src.type) {\n\t\t\tthis.originalEvent = src;\n\t\t\tthis.type = src.type;\n\n\t\t\t// Events bubbling up the document may have been marked as prevented\n\t\t\t// by a handler lower down the tree; reflect the correct value.\n\t\t\tthis.isDefaultPrevented = src.defaultPrevented ||\n\t\t\t\tsrc.defaultPrevented === undefined &&\n\n\t\t\t\t// Support: Android <=2.3 only\n\t\t\t\tsrc.returnValue === false ?\n\t\t\t\treturnTrue :\n\t\t\t\treturnFalse;\n\n\t\t\t// Create target properties\n\t\t\t// Support: Safari <=6 - 7 only\n\t\t\t// Target should not be a text node (trac-504, trac-13143)\n\t\t\tthis.target = (src.target && src.target.nodeType === 3) ?\n\t\t\t\tsrc.target.parentNode :\n\t\t\t\tsrc.target;\n\n\t\t\tthis.currentTarget = src.currentTarget;\n\t\t\tthis.relatedTarget = src.relatedTarget;\n\n\t\t\t// Event type\n\t\t} else {\n\t\t\tthis.type = src;\n\t\t}\n\n\t\t// Put explicitly provided properties onto the event object\n\t\tif (props) {\n\t\t\tjQuery.extend(this, props);\n\t\t}\n\n\t\t// Create a timestamp if incoming event doesn't have one\n\t\tthis.timeStamp = src && src.timeStamp || Date.now();\n\n\t\t// Mark it as fixed\n\t\tthis[jQuery.expando] = true;\n\t};\n\n\t// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding\n\t// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html\n\tjQuery.Event.prototype = {\n\t\tconstructor: jQuery.Event,\n\t\tisDefaultPrevented: returnFalse,\n\t\tisPropagationStopped: returnFalse,\n\t\tisImmediatePropagationStopped: returnFalse,\n\t\tisSimulated: false,\n\n\t\tpreventDefault: function () {\n\t\t\tvar e = this.originalEvent;\n\n\t\t\tthis.isDefaultPrevented = returnTrue;\n\n\t\t\tif (e && !this.isSimulated) {\n\t\t\t\te.preventDefault();\n\t\t\t}\n\t\t},\n\t\tstopPropagation: function () {\n\t\t\tvar e = this.originalEvent;\n\n\t\t\tthis.isPropagationStopped = returnTrue;\n\n\t\t\tif (e && !this.isSimulated) {\n\t\t\t\te.stopPropagation();\n\t\t\t}\n\t\t},\n\t\tstopImmediatePropagation: function () {\n\t\t\tvar e = this.originalEvent;\n\n\t\t\tthis.isImmediatePropagationStopped = returnTrue;\n\n\t\t\tif (e && !this.isSimulated) {\n\t\t\t\te.stopImmediatePropagation();\n\t\t\t}\n\n\t\t\tthis.stopPropagation();\n\t\t}\n\t};\n\n\t// Includes all common event props including KeyEvent and MouseEvent specific props\n\tjQuery.each({\n\t\taltKey: true,\n\t\tbubbles: true,\n\t\tcancelable: true,\n\t\tchangedTouches: true,\n\t\tctrlKey: true,\n\t\tdetail: true,\n\t\teventPhase: true,\n\t\tmetaKey: true,\n\t\tpageX: true,\n\t\tpageY: true,\n\t\tshiftKey: true,\n\t\tview: true,\n\t\t\"char\": true,\n\t\tcode: true,\n\t\tcharCode: true,\n\t\tkey: true,\n\t\tkeyCode: true,\n\t\tbutton: true,\n\t\tbuttons: true,\n\t\tclientX: true,\n\t\tclientY: true,\n\t\toffsetX: true,\n\t\toffsetY: true,\n\t\tpointerId: true,\n\t\tpointerType: true,\n\t\tscreenX: true,\n\t\tscreenY: true,\n\t\ttargetTouches: true,\n\t\ttoElement: true,\n\t\ttouches: true,\n\t\twhich: true\n\t}, jQuery.event.addProp);\n\n\tjQuery.each({ focus: \"focusin\", blur: \"focusout\" }, function (type, delegateType) {\n\n\t\tfunction focusMappedHandler(nativeEvent) {\n\t\t\tif (document.documentMode) {\n\n\t\t\t\t// Support: IE 11+\n\t\t\t\t// Attach a single focusin/focusout handler on the document while someone wants\n\t\t\t\t// focus/blur. This is because the former are synchronous in IE while the latter\n\t\t\t\t// are async. In other browsers, all those handlers are invoked synchronously.\n\n\t\t\t\t// `handle` from private data would already wrap the event, but we need\n\t\t\t\t// to change the `type` here.\n\t\t\t\tvar handle = dataPriv.get(this, \"handle\"),\n\t\t\t\t\tevent = jQuery.event.fix(nativeEvent);\n\t\t\t\tevent.type = nativeEvent.type === \"focusin\" ? \"focus\" : \"blur\";\n\t\t\t\tevent.isSimulated = true;\n\n\t\t\t\t// First, handle focusin/focusout\n\t\t\t\thandle(nativeEvent);\n\n\t\t\t\t// ...then, handle focus/blur\n\t\t\t\t//\n\t\t\t\t// focus/blur don't bubble while focusin/focusout do; simulate the former by only\n\t\t\t\t// invoking the handler at the lower level.\n\t\t\t\tif (event.target === event.currentTarget) {\n\n\t\t\t\t\t// The setup part calls `leverageNative`, which, in turn, calls\n\t\t\t\t\t// `jQuery.event.add`, so event handle will already have been set\n\t\t\t\t\t// by this point.\n\t\t\t\t\thandle(event);\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\t// For non-IE browsers, attach a single capturing handler on the document\n\t\t\t\t// while someone wants focusin/focusout.\n\t\t\t\tjQuery.event.simulate(delegateType, nativeEvent.target,\n\t\t\t\t\tjQuery.event.fix(nativeEvent));\n\t\t\t}\n\t\t}\n\n\t\tjQuery.event.special[type] = {\n\n\t\t\t// Utilize native event if possible so blur/focus sequence is correct\n\t\t\tsetup: function () {\n\n\t\t\t\tvar attaches;\n\n\t\t\t\t// Claim the first handler\n\t\t\t\t// dataPriv.set( this, \"focus\", ... )\n\t\t\t\t// dataPriv.set( this, \"blur\", ... )\n\t\t\t\tleverageNative(this, type, true);\n\n\t\t\t\tif (document.documentMode) {\n\n\t\t\t\t\t// Support: IE 9 - 11+\n\t\t\t\t\t// We use the same native handler for focusin & focus (and focusout & blur)\n\t\t\t\t\t// so we need to coordinate setup & teardown parts between those events.\n\t\t\t\t\t// Use `delegateType` as the key as `type` is already used by `leverageNative`.\n\t\t\t\t\tattaches = dataPriv.get(this, delegateType);\n\t\t\t\t\tif (!attaches) {\n\t\t\t\t\t\tthis.addEventListener(delegateType, focusMappedHandler);\n\t\t\t\t\t}\n\t\t\t\t\tdataPriv.set(this, delegateType, (attaches || 0) + 1);\n\t\t\t\t} else {\n\n\t\t\t\t\t// Return false to allow normal processing in the caller\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\t\t\ttrigger: function () {\n\n\t\t\t\t// Force setup before trigger\n\t\t\t\tleverageNative(this, type);\n\n\t\t\t\t// Return non-false to allow normal event-path propagation\n\t\t\t\treturn true;\n\t\t\t},\n\n\t\t\tteardown: function () {\n\t\t\t\tvar attaches;\n\n\t\t\t\tif (document.documentMode) {\n\t\t\t\t\tattaches = dataPriv.get(this, delegateType) - 1;\n\t\t\t\t\tif (!attaches) {\n\t\t\t\t\t\tthis.removeEventListener(delegateType, focusMappedHandler);\n\t\t\t\t\t\tdataPriv.remove(this, delegateType);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdataPriv.set(this, delegateType, attaches);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\n\t\t\t\t\t// Return false to indicate standard teardown should be applied\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// Suppress native focus or blur if we're currently inside\n\t\t\t// a leveraged native-event stack\n\t\t\t_default: function (event) {\n\t\t\t\treturn dataPriv.get(event.target, type);\n\t\t\t},\n\n\t\t\tdelegateType: delegateType\n\t\t};\n\n\t\t// Support: Firefox <=44\n\t\t// Firefox doesn't have focus(in | out) events\n\t\t// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787\n\t\t//\n\t\t// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1\n\t\t// focus(in | out) events fire after focus & blur events,\n\t\t// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order\n\t\t// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857\n\t\t//\n\t\t// Support: IE 9 - 11+\n\t\t// To preserve relative focusin/focus & focusout/blur event order guaranteed on the 3.x branch,\n\t\t// attach a single handler for both events in IE.\n\t\tjQuery.event.special[delegateType] = {\n\t\t\tsetup: function () {\n\n\t\t\t\t// Handle: regular nodes (via `this.ownerDocument`), window\n\t\t\t\t// (via `this.document`) & document (via `this`).\n\t\t\t\tvar doc = this.ownerDocument || this.document || this,\n\t\t\t\t\tdataHolder = document.documentMode ? this : doc,\n\t\t\t\t\tattaches = dataPriv.get(dataHolder, delegateType);\n\n\t\t\t\t// Support: IE 9 - 11+\n\t\t\t\t// We use the same native handler for focusin & focus (and focusout & blur)\n\t\t\t\t// so we need to coordinate setup & teardown parts between those events.\n\t\t\t\t// Use `delegateType` as the key as `type` is already used by `leverageNative`.\n\t\t\t\tif (!attaches) {\n\t\t\t\t\tif (document.documentMode) {\n\t\t\t\t\t\tthis.addEventListener(delegateType, focusMappedHandler);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdoc.addEventListener(type, focusMappedHandler, true);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tdataPriv.set(dataHolder, delegateType, (attaches || 0) + 1);\n\t\t\t},\n\t\t\tteardown: function () {\n\t\t\t\tvar doc = this.ownerDocument || this.document || this,\n\t\t\t\t\tdataHolder = document.documentMode ? this : doc,\n\t\t\t\t\tattaches = dataPriv.get(dataHolder, delegateType) - 1;\n\n\t\t\t\tif (!attaches) {\n\t\t\t\t\tif (document.documentMode) {\n\t\t\t\t\t\tthis.removeEventListener(delegateType, focusMappedHandler);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdoc.removeEventListener(type, focusMappedHandler, true);\n\t\t\t\t\t}\n\t\t\t\t\tdataPriv.remove(dataHolder, delegateType);\n\t\t\t\t} else {\n\t\t\t\t\tdataPriv.set(dataHolder, delegateType, attaches);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t});\n\n\t// Create mouseenter/leave events using mouseover/out and event-time checks\n\t// so that event delegation works in jQuery.\n\t// Do the same for pointerenter/pointerleave and pointerover/pointerout\n\t//\n\t// Support: Safari 7 only\n\t// Safari sends mouseenter too often; see:\n\t// https://bugs.chromium.org/p/chromium/issues/detail?id=470258\n\t// for the description of the bug (it existed in older Chrome versions as well).\n\tjQuery.each({\n\t\tmouseenter: \"mouseover\",\n\t\tmouseleave: \"mouseout\",\n\t\tpointerenter: \"pointerover\",\n\t\tpointerleave: \"pointerout\"\n\t}, function (orig, fix) {\n\t\tjQuery.event.special[orig] = {\n\t\t\tdelegateType: fix,\n\t\t\tbindType: fix,\n\n\t\t\thandle: function (event) {\n\t\t\t\tvar ret,\n\t\t\t\t\ttarget = this,\n\t\t\t\t\trelated = event.relatedTarget,\n\t\t\t\t\thandleObj = event.handleObj;\n\n\t\t\t\t// For mouseenter/leave call the handler if related is outside the target.\n\t\t\t\t// NB: No relatedTarget if the mouse left/entered the browser window\n\t\t\t\tif (!related || (related !== target && !jQuery.contains(target, related))) {\n\t\t\t\t\tevent.type = handleObj.origType;\n\t\t\t\t\tret = handleObj.handler.apply(this, arguments);\n\t\t\t\t\tevent.type = fix;\n\t\t\t\t}\n\t\t\t\treturn ret;\n\t\t\t}\n\t\t};\n\t});\n\n\tjQuery.fn.extend({\n\n\t\ton: function (types, selector, data, fn) {\n\t\t\treturn on(this, types, selector, data, fn);\n\t\t},\n\t\tone: function (types, selector, data, fn) {\n\t\t\treturn on(this, types, selector, data, fn, 1);\n\t\t},\n\t\toff: function (types, selector, fn) {\n\t\t\tvar handleObj, type;\n\t\t\tif (types && types.preventDefault && types.handleObj) {\n\n\t\t\t\t// ( event )  dispatched jQuery.Event\n\t\t\t\thandleObj = types.handleObj;\n\t\t\t\tjQuery(types.delegateTarget).off(\n\t\t\t\t\thandleObj.namespace ?\n\t\t\t\t\t\thandleObj.origType + \".\" + handleObj.namespace :\n\t\t\t\t\t\thandleObj.origType,\n\t\t\t\t\thandleObj.selector,\n\t\t\t\t\thandleObj.handler\n\t\t\t\t);\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\tif (typeof types === \"object\") {\n\n\t\t\t\t// ( types-object [, selector] )\n\t\t\t\tfor (type in types) {\n\t\t\t\t\tthis.off(type, selector, types[type]);\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\tif (selector === false || typeof selector === \"function\") {\n\n\t\t\t\t// ( types [, fn] )\n\t\t\t\tfn = selector;\n\t\t\t\tselector = undefined;\n\t\t\t}\n\t\t\tif (fn === false) {\n\t\t\t\tfn = returnFalse;\n\t\t\t}\n\t\t\treturn this.each(function () {\n\t\t\t\tjQuery.event.remove(this, types, fn, selector);\n\t\t\t});\n\t\t}\n\t});\n\n\n\tvar\n\n\t\t// Support: IE <=10 - 11, Edge 12 - 13 only\n\t\t// In IE/Edge using regex groups here causes severe slowdowns.\n\t\t// See https://connect.microsoft.com/IE/feedback/details/1736512/\n\t\trnoInnerhtml = /<script|<style|<link/i,\n\n\t\t// checked=\"checked\" or checked\n\t\trchecked = /checked\\s*(?:[^=]|=\\s*.checked.)/i,\n\n\t\trcleanScript = /^\\s*<!\\[CDATA\\[|\\]\\]>\\s*$/g;\n\n\t// Prefer a tbody over its parent table for containing new rows\n\tfunction manipulationTarget(elem, content) {\n\t\tif (nodeName(elem, \"table\") &&\n\t\t\tnodeName(content.nodeType !== 11 ? content : content.firstChild, \"tr\")) {\n\n\t\t\treturn jQuery(elem).children(\"tbody\")[0] || elem;\n\t\t}\n\n\t\treturn elem;\n\t}\n\n\t// Replace/restore the type attribute of script elements for safe DOM manipulation\n\tfunction disableScript(elem) {\n\t\telem.type = (elem.getAttribute(\"type\") !== null) + \"/\" + elem.type;\n\t\treturn elem;\n\t}\n\tfunction restoreScript(elem) {\n\t\tif ((elem.type || \"\").slice(0, 5) === \"true/\") {\n\t\t\telem.type = elem.type.slice(5);\n\t\t} else {\n\t\t\telem.removeAttribute(\"type\");\n\t\t}\n\n\t\treturn elem;\n\t}\n\n\tfunction cloneCopyEvent(src, dest) {\n\t\tvar i, l, type, pdataOld, udataOld, udataCur, events;\n\n\t\tif (dest.nodeType !== 1) {\n\t\t\treturn;\n\t\t}\n\n\t\t// 1. Copy private data: events, handlers, etc.\n\t\tif (dataPriv.hasData(src)) {\n\t\t\tpdataOld = dataPriv.get(src);\n\t\t\tevents = pdataOld.events;\n\n\t\t\tif (events) {\n\t\t\t\tdataPriv.remove(dest, \"handle events\");\n\n\t\t\t\tfor (type in events) {\n\t\t\t\t\tfor (i = 0, l = events[type].length; i < l; i++) {\n\t\t\t\t\t\tjQuery.event.add(dest, type, events[type][i]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// 2. Copy user data\n\t\tif (dataUser.hasData(src)) {\n\t\t\tudataOld = dataUser.access(src);\n\t\t\tudataCur = jQuery.extend({}, udataOld);\n\n\t\t\tdataUser.set(dest, udataCur);\n\t\t}\n\t}\n\n\t// Fix IE bugs, see support tests\n\tfunction fixInput(src, dest) {\n\t\tvar nodeName = dest.nodeName.toLowerCase();\n\n\t\t// Fails to persist the checked state of a cloned checkbox or radio button.\n\t\tif (nodeName === \"input\" && rcheckableType.test(src.type)) {\n\t\t\tdest.checked = src.checked;\n\n\t\t\t// Fails to return the selected option to the default selected state when cloning options\n\t\t} else if (nodeName === \"input\" || nodeName === \"textarea\") {\n\t\t\tdest.defaultValue = src.defaultValue;\n\t\t}\n\t}\n\n\tfunction domManip(collection, args, callback, ignored) {\n\n\t\t// Flatten any nested arrays\n\t\targs = flat(args);\n\n\t\tvar fragment, first, scripts, hasScripts, node, doc,\n\t\t\ti = 0,\n\t\t\tl = collection.length,\n\t\t\tiNoClone = l - 1,\n\t\t\tvalue = args[0],\n\t\t\tvalueIsFunction = isFunction(value);\n\n\t\t// We can't cloneNode fragments that contain checked, in WebKit\n\t\tif (valueIsFunction ||\n\t\t\t(l > 1 && typeof value === \"string\" &&\n\t\t\t\t!support.checkClone && rchecked.test(value))) {\n\t\t\treturn collection.each(function (index) {\n\t\t\t\tvar self = collection.eq(index);\n\t\t\t\tif (valueIsFunction) {\n\t\t\t\t\targs[0] = value.call(this, index, self.html());\n\t\t\t\t}\n\t\t\t\tdomManip(self, args, callback, ignored);\n\t\t\t});\n\t\t}\n\n\t\tif (l) {\n\t\t\tfragment = buildFragment(args, collection[0].ownerDocument, false, collection, ignored);\n\t\t\tfirst = fragment.firstChild;\n\n\t\t\tif (fragment.childNodes.length === 1) {\n\t\t\t\tfragment = first;\n\t\t\t}\n\n\t\t\t// Require either new content or an interest in ignored elements to invoke the callback\n\t\t\tif (first || ignored) {\n\t\t\t\tscripts = jQuery.map(getAll(fragment, \"script\"), disableScript);\n\t\t\t\thasScripts = scripts.length;\n\n\t\t\t\t// Use the original fragment for the last item\n\t\t\t\t// instead of the first because it can end up\n\t\t\t\t// being emptied incorrectly in certain situations (trac-8070).\n\t\t\t\tfor (; i < l; i++) {\n\t\t\t\t\tnode = fragment;\n\n\t\t\t\t\tif (i !== iNoClone) {\n\t\t\t\t\t\tnode = jQuery.clone(node, true, true);\n\n\t\t\t\t\t\t// Keep references to cloned scripts for later restoration\n\t\t\t\t\t\tif (hasScripts) {\n\n\t\t\t\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\t\t\t\tjQuery.merge(scripts, getAll(node, \"script\"));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tcallback.call(collection[i], node, i);\n\t\t\t\t}\n\n\t\t\t\tif (hasScripts) {\n\t\t\t\t\tdoc = scripts[scripts.length - 1].ownerDocument;\n\n\t\t\t\t\t// Reenable scripts\n\t\t\t\t\tjQuery.map(scripts, restoreScript);\n\n\t\t\t\t\t// Evaluate executable scripts on first document insertion\n\t\t\t\t\tfor (i = 0; i < hasScripts; i++) {\n\t\t\t\t\t\tnode = scripts[i];\n\t\t\t\t\t\tif (rscriptType.test(node.type || \"\") &&\n\t\t\t\t\t\t\t!dataPriv.access(node, \"globalEval\") &&\n\t\t\t\t\t\t\tjQuery.contains(doc, node)) {\n\n\t\t\t\t\t\t\tif (node.src && (node.type || \"\").toLowerCase() !== \"module\") {\n\n\t\t\t\t\t\t\t\t// Optional AJAX dependency, but won't run scripts if not present\n\t\t\t\t\t\t\t\tif (jQuery._evalUrl && !node.noModule) {\n\t\t\t\t\t\t\t\t\tjQuery._evalUrl(node.src, {\n\t\t\t\t\t\t\t\t\t\tnonce: node.nonce || node.getAttribute(\"nonce\")\n\t\t\t\t\t\t\t\t\t}, doc);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t// Unwrap a CDATA section containing script contents. This shouldn't be\n\t\t\t\t\t\t\t\t// needed as in XML documents they're already not visible when\n\t\t\t\t\t\t\t\t// inspecting element contents and in HTML documents they have no\n\t\t\t\t\t\t\t\t// meaning but we're preserving that logic for backwards compatibility.\n\t\t\t\t\t\t\t\t// This will be removed completely in 4.0. See gh-4904.\n\t\t\t\t\t\t\t\tDOMEval(node.textContent.replace(rcleanScript, \"\"), node, doc);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn collection;\n\t}\n\n\tfunction remove(elem, selector, keepData) {\n\t\tvar node,\n\t\t\tnodes = selector ? jQuery.filter(selector, elem) : elem,\n\t\t\ti = 0;\n\n\t\tfor (; (node = nodes[i]) != null; i++) {\n\t\t\tif (!keepData && node.nodeType === 1) {\n\t\t\t\tjQuery.cleanData(getAll(node));\n\t\t\t}\n\n\t\t\tif (node.parentNode) {\n\t\t\t\tif (keepData && isAttached(node)) {\n\t\t\t\t\tsetGlobalEval(getAll(node, \"script\"));\n\t\t\t\t}\n\t\t\t\tnode.parentNode.removeChild(node);\n\t\t\t}\n\t\t}\n\n\t\treturn elem;\n\t}\n\n\tjQuery.extend({\n\t\thtmlPrefilter: function (html) {\n\t\t\treturn html;\n\t\t},\n\n\t\tclone: function (elem, dataAndEvents, deepDataAndEvents) {\n\t\t\tvar i, l, srcElements, destElements,\n\t\t\t\tclone = elem.cloneNode(true),\n\t\t\t\tinPage = isAttached(elem);\n\n\t\t\t// Fix IE cloning issues\n\t\t\tif (!support.noCloneChecked && (elem.nodeType === 1 || elem.nodeType === 11) &&\n\t\t\t\t!jQuery.isXMLDoc(elem)) {\n\n\t\t\t\t// We eschew jQuery#find here for performance reasons:\n\t\t\t\t// https://jsperf.com/getall-vs-sizzle/2\n\t\t\t\tdestElements = getAll(clone);\n\t\t\t\tsrcElements = getAll(elem);\n\n\t\t\t\tfor (i = 0, l = srcElements.length; i < l; i++) {\n\t\t\t\t\tfixInput(srcElements[i], destElements[i]);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Copy the events from the original to the clone\n\t\t\tif (dataAndEvents) {\n\t\t\t\tif (deepDataAndEvents) {\n\t\t\t\t\tsrcElements = srcElements || getAll(elem);\n\t\t\t\t\tdestElements = destElements || getAll(clone);\n\n\t\t\t\t\tfor (i = 0, l = srcElements.length; i < l; i++) {\n\t\t\t\t\t\tcloneCopyEvent(srcElements[i], destElements[i]);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tcloneCopyEvent(elem, clone);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Preserve script evaluation history\n\t\t\tdestElements = getAll(clone, \"script\");\n\t\t\tif (destElements.length > 0) {\n\t\t\t\tsetGlobalEval(destElements, !inPage && getAll(elem, \"script\"));\n\t\t\t}\n\n\t\t\t// Return the cloned set\n\t\t\treturn clone;\n\t\t},\n\n\t\tcleanData: function (elems) {\n\t\t\tvar data, elem, type,\n\t\t\t\tspecial = jQuery.event.special,\n\t\t\t\ti = 0;\n\n\t\t\tfor (; (elem = elems[i]) !== undefined; i++) {\n\t\t\t\tif (acceptData(elem)) {\n\t\t\t\t\tif ((data = elem[dataPriv.expando])) {\n\t\t\t\t\t\tif (data.events) {\n\t\t\t\t\t\t\tfor (type in data.events) {\n\t\t\t\t\t\t\t\tif (special[type]) {\n\t\t\t\t\t\t\t\t\tjQuery.event.remove(elem, type);\n\n\t\t\t\t\t\t\t\t\t// This is a shortcut to avoid jQuery.event.remove's overhead\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tjQuery.removeEvent(elem, type, data.handle);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\t\telem[dataPriv.expando] = undefined;\n\t\t\t\t\t}\n\t\t\t\t\tif (elem[dataUser.expando]) {\n\n\t\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\t\telem[dataUser.expando] = undefined;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\n\tjQuery.fn.extend({\n\t\tdetach: function (selector) {\n\t\t\treturn remove(this, selector, true);\n\t\t},\n\n\t\tremove: function (selector) {\n\t\t\treturn remove(this, selector);\n\t\t},\n\n\t\ttext: function (value) {\n\t\t\treturn access(this, function (value) {\n\t\t\t\treturn value === undefined ?\n\t\t\t\t\tjQuery.text(this) :\n\t\t\t\t\tthis.empty().each(function () {\n\t\t\t\t\t\tif (this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9) {\n\t\t\t\t\t\t\tthis.textContent = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t}, null, value, arguments.length);\n\t\t},\n\n\t\tappend: function () {\n\t\t\treturn domManip(this, arguments, function (elem) {\n\t\t\t\tif (this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9) {\n\t\t\t\t\tvar target = manipulationTarget(this, elem);\n\t\t\t\t\ttarget.appendChild(elem);\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\tprepend: function () {\n\t\t\treturn domManip(this, arguments, function (elem) {\n\t\t\t\tif (this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9) {\n\t\t\t\t\tvar target = manipulationTarget(this, elem);\n\t\t\t\t\ttarget.insertBefore(elem, target.firstChild);\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\tbefore: function () {\n\t\t\treturn domManip(this, arguments, function (elem) {\n\t\t\t\tif (this.parentNode) {\n\t\t\t\t\tthis.parentNode.insertBefore(elem, this);\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\tafter: function () {\n\t\t\treturn domManip(this, arguments, function (elem) {\n\t\t\t\tif (this.parentNode) {\n\t\t\t\t\tthis.parentNode.insertBefore(elem, this.nextSibling);\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\tempty: function () {\n\t\t\tvar elem,\n\t\t\t\ti = 0;\n\n\t\t\tfor (; (elem = this[i]) != null; i++) {\n\t\t\t\tif (elem.nodeType === 1) {\n\n\t\t\t\t\t// Prevent memory leaks\n\t\t\t\t\tjQuery.cleanData(getAll(elem, false));\n\n\t\t\t\t\t// Remove any remaining nodes\n\t\t\t\t\telem.textContent = \"\";\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn this;\n\t\t},\n\n\t\tclone: function (dataAndEvents, deepDataAndEvents) {\n\t\t\tdataAndEvents = dataAndEvents == null ? false : dataAndEvents;\n\t\t\tdeepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;\n\n\t\t\treturn this.map(function () {\n\t\t\t\treturn jQuery.clone(this, dataAndEvents, deepDataAndEvents);\n\t\t\t});\n\t\t},\n\n\t\thtml: function (value) {\n\t\t\treturn access(this, function (value) {\n\t\t\t\tvar elem = this[0] || {},\n\t\t\t\t\ti = 0,\n\t\t\t\t\tl = this.length;\n\n\t\t\t\tif (value === undefined && elem.nodeType === 1) {\n\t\t\t\t\treturn elem.innerHTML;\n\t\t\t\t}\n\n\t\t\t\t// See if we can take a shortcut and just use innerHTML\n\t\t\t\tif (typeof value === \"string\" && !rnoInnerhtml.test(value) &&\n\t\t\t\t\t!wrapMap[(rtagName.exec(value) || [\"\", \"\"])[1].toLowerCase()]) {\n\n\t\t\t\t\tvalue = jQuery.htmlPrefilter(value);\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tfor (; i < l; i++) {\n\t\t\t\t\t\t\telem = this[i] || {};\n\n\t\t\t\t\t\t\t// Remove element nodes and prevent memory leaks\n\t\t\t\t\t\t\tif (elem.nodeType === 1) {\n\t\t\t\t\t\t\t\tjQuery.cleanData(getAll(elem, false));\n\t\t\t\t\t\t\t\telem.innerHTML = value;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\telem = 0;\n\n\t\t\t\t\t\t// If using innerHTML throws an exception, use the fallback method\n\t\t\t\t\t} catch (e) { }\n\t\t\t\t}\n\n\t\t\t\tif (elem) {\n\t\t\t\t\tthis.empty().append(value);\n\t\t\t\t}\n\t\t\t}, null, value, arguments.length);\n\t\t},\n\n\t\treplaceWith: function () {\n\t\t\tvar ignored = [];\n\n\t\t\t// Make the changes, replacing each non-ignored context element with the new content\n\t\t\treturn domManip(this, arguments, function (elem) {\n\t\t\t\tvar parent = this.parentNode;\n\n\t\t\t\tif (jQuery.inArray(this, ignored) < 0) {\n\t\t\t\t\tjQuery.cleanData(getAll(this));\n\t\t\t\t\tif (parent) {\n\t\t\t\t\t\tparent.replaceChild(elem, this);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Force callback invocation\n\t\t\t}, ignored);\n\t\t}\n\t});\n\n\tjQuery.each({\n\t\tappendTo: \"append\",\n\t\tprependTo: \"prepend\",\n\t\tinsertBefore: \"before\",\n\t\tinsertAfter: \"after\",\n\t\treplaceAll: \"replaceWith\"\n\t}, function (name, original) {\n\t\tjQuery.fn[name] = function (selector) {\n\t\t\tvar elems,\n\t\t\t\tret = [],\n\t\t\t\tinsert = jQuery(selector),\n\t\t\t\tlast = insert.length - 1,\n\t\t\t\ti = 0;\n\n\t\t\tfor (; i <= last; i++) {\n\t\t\t\telems = i === last ? this : this.clone(true);\n\t\t\t\tjQuery(insert[i])[original](elems);\n\n\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t// .get() because push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\tpush.apply(ret, elems.get());\n\t\t\t}\n\n\t\t\treturn this.pushStack(ret);\n\t\t};\n\t});\n\tvar rnumnonpx = new RegExp(\"^(\" + pnum + \")(?!px)[a-z%]+$\", \"i\");\n\n\tvar rcustomProp = /^--/;\n\n\n\tvar getStyles = function (elem) {\n\n\t\t// Support: IE <=11 only, Firefox <=30 (trac-15098, trac-14150)\n\t\t// IE throws on elements created in popups\n\t\t// FF meanwhile throws on frame elements through \"defaultView.getComputedStyle\"\n\t\tvar view = elem.ownerDocument.defaultView;\n\n\t\tif (!view || !view.opener) {\n\t\t\tview = window;\n\t\t}\n\n\t\treturn view.getComputedStyle(elem);\n\t};\n\n\tvar swap = function (elem, options, callback) {\n\t\tvar ret, name,\n\t\t\told = {};\n\n\t\t// Remember the old values, and insert the new ones\n\t\tfor (name in options) {\n\t\t\told[name] = elem.style[name];\n\t\t\telem.style[name] = options[name];\n\t\t}\n\n\t\tret = callback.call(elem);\n\n\t\t// Revert the old values\n\t\tfor (name in options) {\n\t\t\telem.style[name] = old[name];\n\t\t}\n\n\t\treturn ret;\n\t};\n\n\n\tvar rboxStyle = new RegExp(cssExpand.join(\"|\"), \"i\");\n\n\n\n\t(function () {\n\n\t\t// Executing both pixelPosition & boxSizingReliable tests require only one layout\n\t\t// so they're executed at the same time to save the second computation.\n\t\tfunction computeStyleTests() {\n\n\t\t\t// This is a singleton, we need to execute it only once\n\t\t\tif (!div) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tcontainer.style.cssText = \"position:absolute;left:-11111px;width:60px;\" +\n\t\t\t\t\"margin-top:1px;padding:0;border:0\";\n\t\t\tdiv.style.cssText =\n\t\t\t\t\"position:relative;display:block;box-sizing:border-box;overflow:scroll;\" +\n\t\t\t\t\"margin:auto;border:1px;padding:1px;\" +\n\t\t\t\t\"width:60%;top:1%\";\n\t\t\tdocumentElement.appendChild(container).appendChild(div);\n\n\t\t\tvar divStyle = window.getComputedStyle(div);\n\t\t\tpixelPositionVal = divStyle.top !== \"1%\";\n\n\t\t\t// Support: Android 4.0 - 4.3 only, Firefox <=3 - 44\n\t\t\treliableMarginLeftVal = roundPixelMeasures(divStyle.marginLeft) === 12;\n\n\t\t\t// Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3\n\t\t\t// Some styles come back with percentage values, even though they shouldn't\n\t\t\tdiv.style.right = \"60%\";\n\t\t\tpixelBoxStylesVal = roundPixelMeasures(divStyle.right) === 36;\n\n\t\t\t// Support: IE 9 - 11 only\n\t\t\t// Detect misreporting of content dimensions for box-sizing:border-box elements\n\t\t\tboxSizingReliableVal = roundPixelMeasures(divStyle.width) === 36;\n\n\t\t\t// Support: IE 9 only\n\t\t\t// Detect overflow:scroll screwiness (gh-3699)\n\t\t\t// Support: Chrome <=64\n\t\t\t// Don't get tricked when zoom affects offsetWidth (gh-4029)\n\t\t\tdiv.style.position = \"absolute\";\n\t\t\tscrollboxSizeVal = roundPixelMeasures(div.offsetWidth / 3) === 12;\n\n\t\t\tdocumentElement.removeChild(container);\n\n\t\t\t// Nullify the div so it wouldn't be stored in the memory and\n\t\t\t// it will also be a sign that checks already performed\n\t\t\tdiv = null;\n\t\t}\n\n\t\tfunction roundPixelMeasures(measure) {\n\t\t\treturn Math.round(parseFloat(measure));\n\t\t}\n\n\t\tvar pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal,\n\t\t\treliableTrDimensionsVal, reliableMarginLeftVal,\n\t\t\tcontainer = document.createElement(\"div\"),\n\t\t\tdiv = document.createElement(\"div\");\n\n\t\t// Finish early in limited (non-browser) environments\n\t\tif (!div.style) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Support: IE <=9 - 11 only\n\t\t// Style of cloned element affects source element cloned (trac-8908)\n\t\tdiv.style.backgroundClip = \"content-box\";\n\t\tdiv.cloneNode(true).style.backgroundClip = \"\";\n\t\tsupport.clearCloneStyle = div.style.backgroundClip === \"content-box\";\n\n\t\tjQuery.extend(support, {\n\t\t\tboxSizingReliable: function () {\n\t\t\t\tcomputeStyleTests();\n\t\t\t\treturn boxSizingReliableVal;\n\t\t\t},\n\t\t\tpixelBoxStyles: function () {\n\t\t\t\tcomputeStyleTests();\n\t\t\t\treturn pixelBoxStylesVal;\n\t\t\t},\n\t\t\tpixelPosition: function () {\n\t\t\t\tcomputeStyleTests();\n\t\t\t\treturn pixelPositionVal;\n\t\t\t},\n\t\t\treliableMarginLeft: function () {\n\t\t\t\tcomputeStyleTests();\n\t\t\t\treturn reliableMarginLeftVal;\n\t\t\t},\n\t\t\tscrollboxSize: function () {\n\t\t\t\tcomputeStyleTests();\n\t\t\t\treturn scrollboxSizeVal;\n\t\t\t},\n\n\t\t\t// Support: IE 9 - 11+, Edge 15 - 18+\n\t\t\t// IE/Edge misreport `getComputedStyle` of table rows with width/height\n\t\t\t// set in CSS while `offset*` properties report correct values.\n\t\t\t// Behavior in IE 9 is more subtle than in newer versions & it passes\n\t\t\t// some versions of this test; make sure not to make it pass there!\n\t\t\t//\n\t\t\t// Support: Firefox 70+\n\t\t\t// Only Firefox includes border widths\n\t\t\t// in computed dimensions. (gh-4529)\n\t\t\treliableTrDimensions: function () {\n\t\t\t\tvar table, tr, trChild, trStyle;\n\t\t\t\tif (reliableTrDimensionsVal == null) {\n\t\t\t\t\ttable = document.createElement(\"table\");\n\t\t\t\t\ttr = document.createElement(\"tr\");\n\t\t\t\t\ttrChild = document.createElement(\"div\");\n\n\t\t\t\t\ttable.style.cssText = \"position:absolute;left:-11111px;border-collapse:separate\";\n\t\t\t\t\ttr.style.cssText = \"border:1px solid\";\n\n\t\t\t\t\t// Support: Chrome 86+\n\t\t\t\t\t// Height set through cssText does not get applied.\n\t\t\t\t\t// Computed height then comes back as 0.\n\t\t\t\t\ttr.style.height = \"1px\";\n\t\t\t\t\ttrChild.style.height = \"9px\";\n\n\t\t\t\t\t// Support: Android 8 Chrome 86+\n\t\t\t\t\t// In our bodyBackground.html iframe,\n\t\t\t\t\t// display for all div elements is set to \"inline\",\n\t\t\t\t\t// which causes a problem only in Android 8 Chrome 86.\n\t\t\t\t\t// Ensuring the div is display: block\n\t\t\t\t\t// gets around this issue.\n\t\t\t\t\ttrChild.style.display = \"block\";\n\n\t\t\t\t\tdocumentElement\n\t\t\t\t\t\t.appendChild(table)\n\t\t\t\t\t\t.appendChild(tr)\n\t\t\t\t\t\t.appendChild(trChild);\n\n\t\t\t\t\ttrStyle = window.getComputedStyle(tr);\n\t\t\t\t\treliableTrDimensionsVal = (parseInt(trStyle.height, 10) +\n\t\t\t\t\t\tparseInt(trStyle.borderTopWidth, 10) +\n\t\t\t\t\t\tparseInt(trStyle.borderBottomWidth, 10)) === tr.offsetHeight;\n\n\t\t\t\t\tdocumentElement.removeChild(table);\n\t\t\t\t}\n\t\t\t\treturn reliableTrDimensionsVal;\n\t\t\t}\n\t\t});\n\t})();\n\n\n\tfunction curCSS(elem, name, computed) {\n\t\tvar width, minWidth, maxWidth, ret,\n\t\t\tisCustomProp = rcustomProp.test(name),\n\n\t\t\t// Support: Firefox 51+\n\t\t\t// Retrieving style before computed somehow\n\t\t\t// fixes an issue with getting wrong values\n\t\t\t// on detached elements\n\t\t\tstyle = elem.style;\n\n\t\tcomputed = computed || getStyles(elem);\n\n\t\t// getPropertyValue is needed for:\n\t\t//   .css('filter') (IE 9 only, trac-12537)\n\t\t//   .css('--customProperty) (gh-3144)\n\t\tif (computed) {\n\n\t\t\t// Support: IE <=9 - 11+\n\t\t\t// IE only supports `\"float\"` in `getPropertyValue`; in computed styles\n\t\t\t// it's only available as `\"cssFloat\"`. We no longer modify properties\n\t\t\t// sent to `.css()` apart from camelCasing, so we need to check both.\n\t\t\t// Normally, this would create difference in behavior: if\n\t\t\t// `getPropertyValue` returns an empty string, the value returned\n\t\t\t// by `.css()` would be `undefined`. This is usually the case for\n\t\t\t// disconnected elements. However, in IE even disconnected elements\n\t\t\t// with no styles return `\"none\"` for `getPropertyValue( \"float\" )`\n\t\t\tret = computed.getPropertyValue(name) || computed[name];\n\n\t\t\tif (isCustomProp && ret) {\n\n\t\t\t\t// Support: Firefox 105+, Chrome <=105+\n\t\t\t\t// Spec requires trimming whitespace for custom properties (gh-4926).\n\t\t\t\t// Firefox only trims leading whitespace. Chrome just collapses\n\t\t\t\t// both leading & trailing whitespace to a single space.\n\t\t\t\t//\n\t\t\t\t// Fall back to `undefined` if empty string returned.\n\t\t\t\t// This collapses a missing definition with property defined\n\t\t\t\t// and set to an empty string but there's no standard API\n\t\t\t\t// allowing us to differentiate them without a performance penalty\n\t\t\t\t// and returning `undefined` aligns with older jQuery.\n\t\t\t\t//\n\t\t\t\t// rtrimCSS treats U+000D CARRIAGE RETURN and U+000C FORM FEED\n\t\t\t\t// as whitespace while CSS does not, but this is not a problem\n\t\t\t\t// because CSS preprocessing replaces them with U+000A LINE FEED\n\t\t\t\t// (which *is* CSS whitespace)\n\t\t\t\t// https://www.w3.org/TR/css-syntax-3/#input-preprocessing\n\t\t\t\tret = ret.replace(rtrimCSS, \"$1\") || undefined;\n\t\t\t}\n\n\t\t\tif (ret === \"\" && !isAttached(elem)) {\n\t\t\t\tret = jQuery.style(elem, name);\n\t\t\t}\n\n\t\t\t// A tribute to the \"awesome hack by Dean Edwards\"\n\t\t\t// Android Browser returns percentage for some values,\n\t\t\t// but width seems to be reliably pixels.\n\t\t\t// This is against the CSSOM draft spec:\n\t\t\t// https://drafts.csswg.org/cssom/#resolved-values\n\t\t\tif (!support.pixelBoxStyles() && rnumnonpx.test(ret) && rboxStyle.test(name)) {\n\n\t\t\t\t// Remember the original values\n\t\t\t\twidth = style.width;\n\t\t\t\tminWidth = style.minWidth;\n\t\t\t\tmaxWidth = style.maxWidth;\n\n\t\t\t\t// Put in the new values to get a computed value out\n\t\t\t\tstyle.minWidth = style.maxWidth = style.width = ret;\n\t\t\t\tret = computed.width;\n\n\t\t\t\t// Revert the changed values\n\t\t\t\tstyle.width = width;\n\t\t\t\tstyle.minWidth = minWidth;\n\t\t\t\tstyle.maxWidth = maxWidth;\n\t\t\t}\n\t\t}\n\n\t\treturn ret !== undefined ?\n\n\t\t\t// Support: IE <=9 - 11 only\n\t\t\t// IE returns zIndex value as an integer.\n\t\t\tret + \"\" :\n\t\t\tret;\n\t}\n\n\n\tfunction addGetHookIf(conditionFn, hookFn) {\n\n\t\t// Define the hook, we'll check on the first run if it's really needed.\n\t\treturn {\n\t\t\tget: function () {\n\t\t\t\tif (conditionFn()) {\n\n\t\t\t\t\t// Hook not needed (or it's not possible to use it due\n\t\t\t\t\t// to missing dependency), remove it.\n\t\t\t\t\tdelete this.get;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Hook needed; redefine it so that the support test is not executed again.\n\t\t\t\treturn (this.get = hookFn).apply(this, arguments);\n\t\t\t}\n\t\t};\n\t}\n\n\n\tvar cssPrefixes = [\"Webkit\", \"Moz\", \"ms\"],\n\t\temptyStyle = document.createElement(\"div\").style,\n\t\tvendorProps = {};\n\n\t// Return a vendor-prefixed property or undefined\n\tfunction vendorPropName(name) {\n\n\t\t// Check for vendor prefixed names\n\t\tvar capName = name[0].toUpperCase() + name.slice(1),\n\t\t\ti = cssPrefixes.length;\n\n\t\twhile (i--) {\n\t\t\tname = cssPrefixes[i] + capName;\n\t\t\tif (name in emptyStyle) {\n\t\t\t\treturn name;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return a potentially-mapped jQuery.cssProps or vendor prefixed property\n\tfunction finalPropName(name) {\n\t\tvar final = jQuery.cssProps[name] || vendorProps[name];\n\n\t\tif (final) {\n\t\t\treturn final;\n\t\t}\n\t\tif (name in emptyStyle) {\n\t\t\treturn name;\n\t\t}\n\t\treturn vendorProps[name] = vendorPropName(name) || name;\n\t}\n\n\n\tvar\n\n\t\t// Swappable if display is none or starts with table\n\t\t// except \"table\", \"table-cell\", or \"table-caption\"\n\t\t// See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display\n\t\trdisplayswap = /^(none|table(?!-c[ea]).+)/,\n\t\tcssShow = { position: \"absolute\", visibility: \"hidden\", display: \"block\" },\n\t\tcssNormalTransform = {\n\t\t\tletterSpacing: \"0\",\n\t\t\tfontWeight: \"400\"\n\t\t};\n\n\tfunction setPositiveNumber(_elem, value, subtract) {\n\n\t\t// Any relative (+/-) values have already been\n\t\t// normalized at this point\n\t\tvar matches = rcssNum.exec(value);\n\t\treturn matches ?\n\n\t\t\t// Guard against undefined \"subtract\", e.g., when used as in cssHooks\n\t\t\tMath.max(0, matches[2] - (subtract || 0)) + (matches[3] || \"px\") :\n\t\t\tvalue;\n\t}\n\n\tfunction boxModelAdjustment(elem, dimension, box, isBorderBox, styles, computedVal) {\n\t\tvar i = dimension === \"width\" ? 1 : 0,\n\t\t\textra = 0,\n\t\t\tdelta = 0,\n\t\t\tmarginDelta = 0;\n\n\t\t// Adjustment may not be necessary\n\t\tif (box === (isBorderBox ? \"border\" : \"content\")) {\n\t\t\treturn 0;\n\t\t}\n\n\t\tfor (; i < 4; i += 2) {\n\n\t\t\t// Both box models exclude margin\n\t\t\t// Count margin delta separately to only add it after scroll gutter adjustment.\n\t\t\t// This is needed to make negative margins work with `outerHeight( true )` (gh-3982).\n\t\t\tif (box === \"margin\") {\n\t\t\t\tmarginDelta += jQuery.css(elem, box + cssExpand[i], true, styles);\n\t\t\t}\n\n\t\t\t// If we get here with a content-box, we're seeking \"padding\" or \"border\" or \"margin\"\n\t\t\tif (!isBorderBox) {\n\n\t\t\t\t// Add padding\n\t\t\t\tdelta += jQuery.css(elem, \"padding\" + cssExpand[i], true, styles);\n\n\t\t\t\t// For \"border\" or \"margin\", add border\n\t\t\t\tif (box !== \"padding\") {\n\t\t\t\t\tdelta += jQuery.css(elem, \"border\" + cssExpand[i] + \"Width\", true, styles);\n\n\t\t\t\t\t// But still keep track of it otherwise\n\t\t\t\t} else {\n\t\t\t\t\textra += jQuery.css(elem, \"border\" + cssExpand[i] + \"Width\", true, styles);\n\t\t\t\t}\n\n\t\t\t\t// If we get here with a border-box (content + padding + border), we're seeking \"content\" or\n\t\t\t\t// \"padding\" or \"margin\"\n\t\t\t} else {\n\n\t\t\t\t// For \"content\", subtract padding\n\t\t\t\tif (box === \"content\") {\n\t\t\t\t\tdelta -= jQuery.css(elem, \"padding\" + cssExpand[i], true, styles);\n\t\t\t\t}\n\n\t\t\t\t// For \"content\" or \"padding\", subtract border\n\t\t\t\tif (box !== \"margin\") {\n\t\t\t\t\tdelta -= jQuery.css(elem, \"border\" + cssExpand[i] + \"Width\", true, styles);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Account for positive content-box scroll gutter when requested by providing computedVal\n\t\tif (!isBorderBox && computedVal >= 0) {\n\n\t\t\t// offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border\n\t\t\t// Assuming integer scroll gutter, subtract the rest and round down\n\t\t\tdelta += Math.max(0, Math.ceil(\n\t\t\t\telem[\"offset\" + dimension[0].toUpperCase() + dimension.slice(1)] -\n\t\t\t\tcomputedVal -\n\t\t\t\tdelta -\n\t\t\t\textra -\n\t\t\t\t0.5\n\n\t\t\t\t// If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter\n\t\t\t\t// Use an explicit zero to avoid NaN (gh-3964)\n\t\t\t)) || 0;\n\t\t}\n\n\t\treturn delta + marginDelta;\n\t}\n\n\tfunction getWidthOrHeight(elem, dimension, extra) {\n\n\t\t// Start with computed style\n\t\tvar styles = getStyles(elem),\n\n\t\t\t// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322).\n\t\t\t// Fake content-box until we know it's needed to know the true value.\n\t\t\tboxSizingNeeded = !support.boxSizingReliable() || extra,\n\t\t\tisBorderBox = boxSizingNeeded &&\n\t\t\t\tjQuery.css(elem, \"boxSizing\", false, styles) === \"border-box\",\n\t\t\tvalueIsBorderBox = isBorderBox,\n\n\t\t\tval = curCSS(elem, dimension, styles),\n\t\t\toffsetProp = \"offset\" + dimension[0].toUpperCase() + dimension.slice(1);\n\n\t\t// Support: Firefox <=54\n\t\t// Return a confounding non-pixel value or feign ignorance, as appropriate.\n\t\tif (rnumnonpx.test(val)) {\n\t\t\tif (!extra) {\n\t\t\t\treturn val;\n\t\t\t}\n\t\t\tval = \"auto\";\n\t\t}\n\n\n\t\t// Support: IE 9 - 11 only\n\t\t// Use offsetWidth/offsetHeight for when box sizing is unreliable.\n\t\t// In those cases, the computed value can be trusted to be border-box.\n\t\tif ((!support.boxSizingReliable() && isBorderBox ||\n\n\t\t\t// Support: IE 10 - 11+, Edge 15 - 18+\n\t\t\t// IE/Edge misreport `getComputedStyle` of table rows with width/height\n\t\t\t// set in CSS while `offset*` properties report correct values.\n\t\t\t// Interestingly, in some cases IE 9 doesn't suffer from this issue.\n\t\t\t!support.reliableTrDimensions() && nodeName(elem, \"tr\") ||\n\n\t\t\t// Fall back to offsetWidth/offsetHeight when value is \"auto\"\n\t\t\t// This happens for inline elements with no explicit setting (gh-3571)\n\t\t\tval === \"auto\" ||\n\n\t\t\t// Support: Android <=4.1 - 4.3 only\n\t\t\t// Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602)\n\t\t\t!parseFloat(val) && jQuery.css(elem, \"display\", false, styles) === \"inline\") &&\n\n\t\t\t// Make sure the element is visible & connected\n\t\t\telem.getClientRects().length) {\n\n\t\t\tisBorderBox = jQuery.css(elem, \"boxSizing\", false, styles) === \"border-box\";\n\n\t\t\t// Where available, offsetWidth/offsetHeight approximate border box dimensions.\n\t\t\t// Where not available (e.g., SVG), assume unreliable box-sizing and interpret the\n\t\t\t// retrieved value as a content box dimension.\n\t\t\tvalueIsBorderBox = offsetProp in elem;\n\t\t\tif (valueIsBorderBox) {\n\t\t\t\tval = elem[offsetProp];\n\t\t\t}\n\t\t}\n\n\t\t// Normalize \"\" and auto\n\t\tval = parseFloat(val) || 0;\n\n\t\t// Adjust for the element's box model\n\t\treturn (val +\n\t\t\tboxModelAdjustment(\n\t\t\t\telem,\n\t\t\t\tdimension,\n\t\t\t\textra || (isBorderBox ? \"border\" : \"content\"),\n\t\t\t\tvalueIsBorderBox,\n\t\t\t\tstyles,\n\n\t\t\t\t// Provide the current computed size to request scroll gutter calculation (gh-3589)\n\t\t\t\tval\n\t\t\t)\n\t\t) + \"px\";\n\t}\n\n\tjQuery.extend({\n\n\t\t// Add in style property hooks for overriding the default\n\t\t// behavior of getting and setting a style property\n\t\tcssHooks: {\n\t\t\topacity: {\n\t\t\t\tget: function (elem, computed) {\n\t\t\t\t\tif (computed) {\n\n\t\t\t\t\t\t// We should always get a number back from opacity\n\t\t\t\t\t\tvar ret = curCSS(elem, \"opacity\");\n\t\t\t\t\t\treturn ret === \"\" ? \"1\" : ret;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t// Don't automatically add \"px\" to these possibly-unitless properties\n\t\tcssNumber: {\n\t\t\tanimationIterationCount: true,\n\t\t\taspectRatio: true,\n\t\t\tborderImageSlice: true,\n\t\t\tcolumnCount: true,\n\t\t\tflexGrow: true,\n\t\t\tflexShrink: true,\n\t\t\tfontWeight: true,\n\t\t\tgridArea: true,\n\t\t\tgridColumn: true,\n\t\t\tgridColumnEnd: true,\n\t\t\tgridColumnStart: true,\n\t\t\tgridRow: true,\n\t\t\tgridRowEnd: true,\n\t\t\tgridRowStart: true,\n\t\t\tlineHeight: true,\n\t\t\topacity: true,\n\t\t\torder: true,\n\t\t\torphans: true,\n\t\t\tscale: true,\n\t\t\twidows: true,\n\t\t\tzIndex: true,\n\t\t\tzoom: true,\n\n\t\t\t// SVG-related\n\t\t\tfillOpacity: true,\n\t\t\tfloodOpacity: true,\n\t\t\tstopOpacity: true,\n\t\t\tstrokeMiterlimit: true,\n\t\t\tstrokeOpacity: true\n\t\t},\n\n\t\t// Add in properties whose names you wish to fix before\n\t\t// setting or getting the value\n\t\tcssProps: {},\n\n\t\t// Get and set the style property on a DOM Node\n\t\tstyle: function (elem, name, value, extra) {\n\n\t\t\t// Don't set styles on text and comment nodes\n\t\t\tif (!elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Make sure that we're working with the right name\n\t\t\tvar ret, type, hooks,\n\t\t\t\torigName = camelCase(name),\n\t\t\t\tisCustomProp = rcustomProp.test(name),\n\t\t\t\tstyle = elem.style;\n\n\t\t\t// Make sure that we're working with the right name. We don't\n\t\t\t// want to query the value if it is a CSS custom property\n\t\t\t// since they are user-defined.\n\t\t\tif (!isCustomProp) {\n\t\t\t\tname = finalPropName(origName);\n\t\t\t}\n\n\t\t\t// Gets hook for the prefixed version, then unprefixed version\n\t\t\thooks = jQuery.cssHooks[name] || jQuery.cssHooks[origName];\n\n\t\t\t// Check if we're setting a value\n\t\t\tif (value !== undefined) {\n\t\t\t\ttype = typeof value;\n\n\t\t\t\t// Convert \"+=\" or \"-=\" to relative numbers (trac-7345)\n\t\t\t\tif (type === \"string\" && (ret = rcssNum.exec(value)) && ret[1]) {\n\t\t\t\t\tvalue = adjustCSS(elem, name, ret);\n\n\t\t\t\t\t// Fixes bug trac-9237\n\t\t\t\t\ttype = \"number\";\n\t\t\t\t}\n\n\t\t\t\t// Make sure that null and NaN values aren't set (trac-7116)\n\t\t\t\tif (value == null || value !== value) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// If a number was passed in, add the unit (except for certain CSS properties)\n\t\t\t\t// The isCustomProp check can be removed in jQuery 4.0 when we only auto-append\n\t\t\t\t// \"px\" to a few hardcoded values.\n\t\t\t\tif (type === \"number\" && !isCustomProp) {\n\t\t\t\t\tvalue += ret && ret[3] || (jQuery.cssNumber[origName] ? \"\" : \"px\");\n\t\t\t\t}\n\n\t\t\t\t// background-* props affect original clone's values\n\t\t\t\tif (!support.clearCloneStyle && value === \"\" && name.indexOf(\"background\") === 0) {\n\t\t\t\t\tstyle[name] = \"inherit\";\n\t\t\t\t}\n\n\t\t\t\t// If a hook was provided, use that value, otherwise just set the specified value\n\t\t\t\tif (!hooks || !(\"set\" in hooks) ||\n\t\t\t\t\t(value = hooks.set(elem, value, extra)) !== undefined) {\n\n\t\t\t\t\tif (isCustomProp) {\n\t\t\t\t\t\tstyle.setProperty(name, value);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tstyle[name] = value;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\t// If a hook was provided get the non-computed value from there\n\t\t\t\tif (hooks && \"get\" in hooks &&\n\t\t\t\t\t(ret = hooks.get(elem, false, extra)) !== undefined) {\n\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\n\t\t\t\t// Otherwise just get the value from the style object\n\t\t\t\treturn style[name];\n\t\t\t}\n\t\t},\n\n\t\tcss: function (elem, name, extra, styles) {\n\t\t\tvar val, num, hooks,\n\t\t\t\torigName = camelCase(name),\n\t\t\t\tisCustomProp = rcustomProp.test(name);\n\n\t\t\t// Make sure that we're working with the right name. We don't\n\t\t\t// want to modify the value if it is a CSS custom property\n\t\t\t// since they are user-defined.\n\t\t\tif (!isCustomProp) {\n\t\t\t\tname = finalPropName(origName);\n\t\t\t}\n\n\t\t\t// Try prefixed name followed by the unprefixed name\n\t\t\thooks = jQuery.cssHooks[name] || jQuery.cssHooks[origName];\n\n\t\t\t// If a hook was provided get the computed value from there\n\t\t\tif (hooks && \"get\" in hooks) {\n\t\t\t\tval = hooks.get(elem, true, extra);\n\t\t\t}\n\n\t\t\t// Otherwise, if a way to get the computed value exists, use that\n\t\t\tif (val === undefined) {\n\t\t\t\tval = curCSS(elem, name, styles);\n\t\t\t}\n\n\t\t\t// Convert \"normal\" to computed value\n\t\t\tif (val === \"normal\" && name in cssNormalTransform) {\n\t\t\t\tval = cssNormalTransform[name];\n\t\t\t}\n\n\t\t\t// Make numeric if forced or a qualifier was provided and val looks numeric\n\t\t\tif (extra === \"\" || extra) {\n\t\t\t\tnum = parseFloat(val);\n\t\t\t\treturn extra === true || isFinite(num) ? num || 0 : val;\n\t\t\t}\n\n\t\t\treturn val;\n\t\t}\n\t});\n\n\tjQuery.each([\"height\", \"width\"], function (_i, dimension) {\n\t\tjQuery.cssHooks[dimension] = {\n\t\t\tget: function (elem, computed, extra) {\n\t\t\t\tif (computed) {\n\n\t\t\t\t\t// Certain elements can have dimension info if we invisibly show them\n\t\t\t\t\t// but it must have a current display style that would benefit\n\t\t\t\t\treturn rdisplayswap.test(jQuery.css(elem, \"display\")) &&\n\n\t\t\t\t\t\t// Support: Safari 8+\n\t\t\t\t\t\t// Table columns in Safari have non-zero offsetWidth & zero\n\t\t\t\t\t\t// getBoundingClientRect().width unless display is changed.\n\t\t\t\t\t\t// Support: IE <=11 only\n\t\t\t\t\t\t// Running getBoundingClientRect on a disconnected node\n\t\t\t\t\t\t// in IE throws an error.\n\t\t\t\t\t\t(!elem.getClientRects().length || !elem.getBoundingClientRect().width) ?\n\t\t\t\t\t\tswap(elem, cssShow, function () {\n\t\t\t\t\t\t\treturn getWidthOrHeight(elem, dimension, extra);\n\t\t\t\t\t\t}) :\n\t\t\t\t\t\tgetWidthOrHeight(elem, dimension, extra);\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tset: function (elem, value, extra) {\n\t\t\t\tvar matches,\n\t\t\t\t\tstyles = getStyles(elem),\n\n\t\t\t\t\t// Only read styles.position if the test has a chance to fail\n\t\t\t\t\t// to avoid forcing a reflow.\n\t\t\t\t\tscrollboxSizeBuggy = !support.scrollboxSize() &&\n\t\t\t\t\t\tstyles.position === \"absolute\",\n\n\t\t\t\t\t// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991)\n\t\t\t\t\tboxSizingNeeded = scrollboxSizeBuggy || extra,\n\t\t\t\t\tisBorderBox = boxSizingNeeded &&\n\t\t\t\t\t\tjQuery.css(elem, \"boxSizing\", false, styles) === \"border-box\",\n\t\t\t\t\tsubtract = extra ?\n\t\t\t\t\t\tboxModelAdjustment(\n\t\t\t\t\t\t\telem,\n\t\t\t\t\t\t\tdimension,\n\t\t\t\t\t\t\textra,\n\t\t\t\t\t\t\tisBorderBox,\n\t\t\t\t\t\t\tstyles\n\t\t\t\t\t\t) :\n\t\t\t\t\t\t0;\n\n\t\t\t\t// Account for unreliable border-box dimensions by comparing offset* to computed and\n\t\t\t\t// faking a content-box to get border and padding (gh-3699)\n\t\t\t\tif (isBorderBox && scrollboxSizeBuggy) {\n\t\t\t\t\tsubtract -= Math.ceil(\n\t\t\t\t\t\telem[\"offset\" + dimension[0].toUpperCase() + dimension.slice(1)] -\n\t\t\t\t\t\tparseFloat(styles[dimension]) -\n\t\t\t\t\t\tboxModelAdjustment(elem, dimension, \"border\", false, styles) -\n\t\t\t\t\t\t0.5\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\t// Convert to pixels if value adjustment is needed\n\t\t\t\tif (subtract && (matches = rcssNum.exec(value)) &&\n\t\t\t\t\t(matches[3] || \"px\") !== \"px\") {\n\n\t\t\t\t\telem.style[dimension] = value;\n\t\t\t\t\tvalue = jQuery.css(elem, dimension);\n\t\t\t\t}\n\n\t\t\t\treturn setPositiveNumber(elem, value, subtract);\n\t\t\t}\n\t\t};\n\t});\n\n\tjQuery.cssHooks.marginLeft = addGetHookIf(support.reliableMarginLeft,\n\t\tfunction (elem, computed) {\n\t\t\tif (computed) {\n\t\t\t\treturn (parseFloat(curCSS(elem, \"marginLeft\")) ||\n\t\t\t\t\telem.getBoundingClientRect().left -\n\t\t\t\t\tswap(elem, { marginLeft: 0 }, function () {\n\t\t\t\t\t\treturn elem.getBoundingClientRect().left;\n\t\t\t\t\t})\n\t\t\t\t) + \"px\";\n\t\t\t}\n\t\t}\n\t);\n\n\t// These hooks are used by animate to expand properties\n\tjQuery.each({\n\t\tmargin: \"\",\n\t\tpadding: \"\",\n\t\tborder: \"Width\"\n\t}, function (prefix, suffix) {\n\t\tjQuery.cssHooks[prefix + suffix] = {\n\t\t\texpand: function (value) {\n\t\t\t\tvar i = 0,\n\t\t\t\t\texpanded = {},\n\n\t\t\t\t\t// Assumes a single number if not a string\n\t\t\t\t\tparts = typeof value === \"string\" ? value.split(\" \") : [value];\n\n\t\t\t\tfor (; i < 4; i++) {\n\t\t\t\t\texpanded[prefix + cssExpand[i] + suffix] =\n\t\t\t\t\t\tparts[i] || parts[i - 2] || parts[0];\n\t\t\t\t}\n\n\t\t\t\treturn expanded;\n\t\t\t}\n\t\t};\n\n\t\tif (prefix !== \"margin\") {\n\t\t\tjQuery.cssHooks[prefix + suffix].set = setPositiveNumber;\n\t\t}\n\t});\n\n\tjQuery.fn.extend({\n\t\tcss: function (name, value) {\n\t\t\treturn access(this, function (elem, name, value) {\n\t\t\t\tvar styles, len,\n\t\t\t\t\tmap = {},\n\t\t\t\t\ti = 0;\n\n\t\t\t\tif (Array.isArray(name)) {\n\t\t\t\t\tstyles = getStyles(elem);\n\t\t\t\t\tlen = name.length;\n\n\t\t\t\t\tfor (; i < len; i++) {\n\t\t\t\t\t\tmap[name[i]] = jQuery.css(elem, name[i], false, styles);\n\t\t\t\t\t}\n\n\t\t\t\t\treturn map;\n\t\t\t\t}\n\n\t\t\t\treturn value !== undefined ?\n\t\t\t\t\tjQuery.style(elem, name, value) :\n\t\t\t\t\tjQuery.css(elem, name);\n\t\t\t}, name, value, arguments.length > 1);\n\t\t}\n\t});\n\n\n\tfunction Tween(elem, options, prop, end, easing) {\n\t\treturn new Tween.prototype.init(elem, options, prop, end, easing);\n\t}\n\tjQuery.Tween = Tween;\n\n\tTween.prototype = {\n\t\tconstructor: Tween,\n\t\tinit: function (elem, options, prop, end, easing, unit) {\n\t\t\tthis.elem = elem;\n\t\t\tthis.prop = prop;\n\t\t\tthis.easing = easing || jQuery.easing._default;\n\t\t\tthis.options = options;\n\t\t\tthis.start = this.now = this.cur();\n\t\t\tthis.end = end;\n\t\t\tthis.unit = unit || (jQuery.cssNumber[prop] ? \"\" : \"px\");\n\t\t},\n\t\tcur: function () {\n\t\t\tvar hooks = Tween.propHooks[this.prop];\n\n\t\t\treturn hooks && hooks.get ?\n\t\t\t\thooks.get(this) :\n\t\t\t\tTween.propHooks._default.get(this);\n\t\t},\n\t\trun: function (percent) {\n\t\t\tvar eased,\n\t\t\t\thooks = Tween.propHooks[this.prop];\n\n\t\t\tif (this.options.duration) {\n\t\t\t\tthis.pos = eased = jQuery.easing[this.easing](\n\t\t\t\t\tpercent, this.options.duration * percent, 0, 1, this.options.duration\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tthis.pos = eased = percent;\n\t\t\t}\n\t\t\tthis.now = (this.end - this.start) * eased + this.start;\n\n\t\t\tif (this.options.step) {\n\t\t\t\tthis.options.step.call(this.elem, this.now, this);\n\t\t\t}\n\n\t\t\tif (hooks && hooks.set) {\n\t\t\t\thooks.set(this);\n\t\t\t} else {\n\t\t\t\tTween.propHooks._default.set(this);\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t};\n\n\tTween.prototype.init.prototype = Tween.prototype;\n\n\tTween.propHooks = {\n\t\t_default: {\n\t\t\tget: function (tween) {\n\t\t\t\tvar result;\n\n\t\t\t\t// Use a property on the element directly when it is not a DOM element,\n\t\t\t\t// or when there is no matching style property that exists.\n\t\t\t\tif (tween.elem.nodeType !== 1 ||\n\t\t\t\t\ttween.elem[tween.prop] != null && tween.elem.style[tween.prop] == null) {\n\t\t\t\t\treturn tween.elem[tween.prop];\n\t\t\t\t}\n\n\t\t\t\t// Passing an empty string as a 3rd parameter to .css will automatically\n\t\t\t\t// attempt a parseFloat and fallback to a string if the parse fails.\n\t\t\t\t// Simple values such as \"10px\" are parsed to Float;\n\t\t\t\t// complex values such as \"rotate(1rad)\" are returned as-is.\n\t\t\t\tresult = jQuery.css(tween.elem, tween.prop, \"\");\n\n\t\t\t\t// Empty strings, null, undefined and \"auto\" are converted to 0.\n\t\t\t\treturn !result || result === \"auto\" ? 0 : result;\n\t\t\t},\n\t\t\tset: function (tween) {\n\n\t\t\t\t// Use step hook for back compat.\n\t\t\t\t// Use cssHook if its there.\n\t\t\t\t// Use .style if available and use plain properties where available.\n\t\t\t\tif (jQuery.fx.step[tween.prop]) {\n\t\t\t\t\tjQuery.fx.step[tween.prop](tween);\n\t\t\t\t} else if (tween.elem.nodeType === 1 && (\n\t\t\t\t\tjQuery.cssHooks[tween.prop] ||\n\t\t\t\t\ttween.elem.style[finalPropName(tween.prop)] != null)) {\n\t\t\t\t\tjQuery.style(tween.elem, tween.prop, tween.now + tween.unit);\n\t\t\t\t} else {\n\t\t\t\t\ttween.elem[tween.prop] = tween.now;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t// Support: IE <=9 only\n\t// Panic based approach to setting things on disconnected nodes\n\tTween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {\n\t\tset: function (tween) {\n\t\t\tif (tween.elem.nodeType && tween.elem.parentNode) {\n\t\t\t\ttween.elem[tween.prop] = tween.now;\n\t\t\t}\n\t\t}\n\t};\n\n\tjQuery.easing = {\n\t\tlinear: function (p) {\n\t\t\treturn p;\n\t\t},\n\t\tswing: function (p) {\n\t\t\treturn 0.5 - Math.cos(p * Math.PI) / 2;\n\t\t},\n\t\t_default: \"swing\"\n\t};\n\n\tjQuery.fx = Tween.prototype.init;\n\n\t// Back compat <1.8 extension point\n\tjQuery.fx.step = {};\n\n\n\n\n\tvar\n\t\tfxNow, inProgress,\n\t\trfxtypes = /^(?:toggle|show|hide)$/,\n\t\trrun = /queueHooks$/;\n\n\tfunction schedule() {\n\t\tif (inProgress) {\n\t\t\tif (document.hidden === false && window.requestAnimationFrame) {\n\t\t\t\twindow.requestAnimationFrame(schedule);\n\t\t\t} else {\n\t\t\t\twindow.setTimeout(schedule, jQuery.fx.interval);\n\t\t\t}\n\n\t\t\tjQuery.fx.tick();\n\t\t}\n\t}\n\n\t// Animations created synchronously will run synchronously\n\tfunction createFxNow() {\n\t\twindow.setTimeout(function () {\n\t\t\tfxNow = undefined;\n\t\t});\n\t\treturn (fxNow = Date.now());\n\t}\n\n\t// Generate parameters to create a standard animation\n\tfunction genFx(type, includeWidth) {\n\t\tvar which,\n\t\t\ti = 0,\n\t\t\tattrs = { height: type };\n\n\t\t// If we include width, step value is 1 to do all cssExpand values,\n\t\t// otherwise step value is 2 to skip over Left and Right\n\t\tincludeWidth = includeWidth ? 1 : 0;\n\t\tfor (; i < 4; i += 2 - includeWidth) {\n\t\t\twhich = cssExpand[i];\n\t\t\tattrs[\"margin\" + which] = attrs[\"padding\" + which] = type;\n\t\t}\n\n\t\tif (includeWidth) {\n\t\t\tattrs.opacity = attrs.width = type;\n\t\t}\n\n\t\treturn attrs;\n\t}\n\n\tfunction createTween(value, prop, animation) {\n\t\tvar tween,\n\t\t\tcollection = (Animation.tweeners[prop] || []).concat(Animation.tweeners[\"*\"]),\n\t\t\tindex = 0,\n\t\t\tlength = collection.length;\n\t\tfor (; index < length; index++) {\n\t\t\tif ((tween = collection[index].call(animation, prop, value))) {\n\n\t\t\t\t// We're done with this property\n\t\t\t\treturn tween;\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction defaultPrefilter(elem, props, opts) {\n\t\tvar prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display,\n\t\t\tisBox = \"width\" in props || \"height\" in props,\n\t\t\tanim = this,\n\t\t\torig = {},\n\t\t\tstyle = elem.style,\n\t\t\thidden = elem.nodeType && isHiddenWithinTree(elem),\n\t\t\tdataShow = dataPriv.get(elem, \"fxshow\");\n\n\t\t// Queue-skipping animations hijack the fx hooks\n\t\tif (!opts.queue) {\n\t\t\thooks = jQuery._queueHooks(elem, \"fx\");\n\t\t\tif (hooks.unqueued == null) {\n\t\t\t\thooks.unqueued = 0;\n\t\t\t\toldfire = hooks.empty.fire;\n\t\t\t\thooks.empty.fire = function () {\n\t\t\t\t\tif (!hooks.unqueued) {\n\t\t\t\t\t\toldfire();\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t\thooks.unqueued++;\n\n\t\t\tanim.always(function () {\n\n\t\t\t\t// Ensure the complete handler is called before this completes\n\t\t\t\tanim.always(function () {\n\t\t\t\t\thooks.unqueued--;\n\t\t\t\t\tif (!jQuery.queue(elem, \"fx\").length) {\n\t\t\t\t\t\thooks.empty.fire();\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\n\t\t// Detect show/hide animations\n\t\tfor (prop in props) {\n\t\t\tvalue = props[prop];\n\t\t\tif (rfxtypes.test(value)) {\n\t\t\t\tdelete props[prop];\n\t\t\t\ttoggle = toggle || value === \"toggle\";\n\t\t\t\tif (value === (hidden ? \"hide\" : \"show\")) {\n\n\t\t\t\t\t// Pretend to be hidden if this is a \"show\" and\n\t\t\t\t\t// there is still data from a stopped show/hide\n\t\t\t\t\tif (value === \"show\" && dataShow && dataShow[prop] !== undefined) {\n\t\t\t\t\t\thidden = true;\n\n\t\t\t\t\t\t// Ignore all other no-op show/hide data\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\torig[prop] = dataShow && dataShow[prop] || jQuery.style(elem, prop);\n\t\t\t}\n\t\t}\n\n\t\t// Bail out if this is a no-op like .hide().hide()\n\t\tpropTween = !jQuery.isEmptyObject(props);\n\t\tif (!propTween && jQuery.isEmptyObject(orig)) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Restrict \"overflow\" and \"display\" styles during box animations\n\t\tif (isBox && elem.nodeType === 1) {\n\n\t\t\t// Support: IE <=9 - 11, Edge 12 - 15\n\t\t\t// Record all 3 overflow attributes because IE does not infer the shorthand\n\t\t\t// from identically-valued overflowX and overflowY and Edge just mirrors\n\t\t\t// the overflowX value there.\n\t\t\topts.overflow = [style.overflow, style.overflowX, style.overflowY];\n\n\t\t\t// Identify a display type, preferring old show/hide data over the CSS cascade\n\t\t\trestoreDisplay = dataShow && dataShow.display;\n\t\t\tif (restoreDisplay == null) {\n\t\t\t\trestoreDisplay = dataPriv.get(elem, \"display\");\n\t\t\t}\n\t\t\tdisplay = jQuery.css(elem, \"display\");\n\t\t\tif (display === \"none\") {\n\t\t\t\tif (restoreDisplay) {\n\t\t\t\t\tdisplay = restoreDisplay;\n\t\t\t\t} else {\n\n\t\t\t\t\t// Get nonempty value(s) by temporarily forcing visibility\n\t\t\t\t\tshowHide([elem], true);\n\t\t\t\t\trestoreDisplay = elem.style.display || restoreDisplay;\n\t\t\t\t\tdisplay = jQuery.css(elem, \"display\");\n\t\t\t\t\tshowHide([elem]);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Animate inline elements as inline-block\n\t\t\tif (display === \"inline\" || display === \"inline-block\" && restoreDisplay != null) {\n\t\t\t\tif (jQuery.css(elem, \"float\") === \"none\") {\n\n\t\t\t\t\t// Restore the original display value at the end of pure show/hide animations\n\t\t\t\t\tif (!propTween) {\n\t\t\t\t\t\tanim.done(function () {\n\t\t\t\t\t\t\tstyle.display = restoreDisplay;\n\t\t\t\t\t\t});\n\t\t\t\t\t\tif (restoreDisplay == null) {\n\t\t\t\t\t\t\tdisplay = style.display;\n\t\t\t\t\t\t\trestoreDisplay = display === \"none\" ? \"\" : display;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tstyle.display = \"inline-block\";\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (opts.overflow) {\n\t\t\tstyle.overflow = \"hidden\";\n\t\t\tanim.always(function () {\n\t\t\t\tstyle.overflow = opts.overflow[0];\n\t\t\t\tstyle.overflowX = opts.overflow[1];\n\t\t\t\tstyle.overflowY = opts.overflow[2];\n\t\t\t});\n\t\t}\n\n\t\t// Implement show/hide animations\n\t\tpropTween = false;\n\t\tfor (prop in orig) {\n\n\t\t\t// General show/hide setup for this element animation\n\t\t\tif (!propTween) {\n\t\t\t\tif (dataShow) {\n\t\t\t\t\tif (\"hidden\" in dataShow) {\n\t\t\t\t\t\thidden = dataShow.hidden;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tdataShow = dataPriv.access(elem, \"fxshow\", { display: restoreDisplay });\n\t\t\t\t}\n\n\t\t\t\t// Store hidden/visible for toggle so `.stop().toggle()` \"reverses\"\n\t\t\t\tif (toggle) {\n\t\t\t\t\tdataShow.hidden = !hidden;\n\t\t\t\t}\n\n\t\t\t\t// Show elements before animating them\n\t\t\t\tif (hidden) {\n\t\t\t\t\tshowHide([elem], true);\n\t\t\t\t}\n\n\t\t\t\t/* eslint-disable no-loop-func */\n\n\t\t\t\tanim.done(function () {\n\n\t\t\t\t\t/* eslint-enable no-loop-func */\n\n\t\t\t\t\t// The final step of a \"hide\" animation is actually hiding the element\n\t\t\t\t\tif (!hidden) {\n\t\t\t\t\t\tshowHide([elem]);\n\t\t\t\t\t}\n\t\t\t\t\tdataPriv.remove(elem, \"fxshow\");\n\t\t\t\t\tfor (prop in orig) {\n\t\t\t\t\t\tjQuery.style(elem, prop, orig[prop]);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// Per-property setup\n\t\t\tpropTween = createTween(hidden ? dataShow[prop] : 0, prop, anim);\n\t\t\tif (!(prop in dataShow)) {\n\t\t\t\tdataShow[prop] = propTween.start;\n\t\t\t\tif (hidden) {\n\t\t\t\t\tpropTween.end = propTween.start;\n\t\t\t\t\tpropTween.start = 0;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction propFilter(props, specialEasing) {\n\t\tvar index, name, easing, value, hooks;\n\n\t\t// camelCase, specialEasing and expand cssHook pass\n\t\tfor (index in props) {\n\t\t\tname = camelCase(index);\n\t\t\teasing = specialEasing[name];\n\t\t\tvalue = props[index];\n\t\t\tif (Array.isArray(value)) {\n\t\t\t\teasing = value[1];\n\t\t\t\tvalue = props[index] = value[0];\n\t\t\t}\n\n\t\t\tif (index !== name) {\n\t\t\t\tprops[name] = value;\n\t\t\t\tdelete props[index];\n\t\t\t}\n\n\t\t\thooks = jQuery.cssHooks[name];\n\t\t\tif (hooks && \"expand\" in hooks) {\n\t\t\t\tvalue = hooks.expand(value);\n\t\t\t\tdelete props[name];\n\n\t\t\t\t// Not quite $.extend, this won't overwrite existing keys.\n\t\t\t\t// Reusing 'index' because we have the correct \"name\"\n\t\t\t\tfor (index in value) {\n\t\t\t\t\tif (!(index in props)) {\n\t\t\t\t\t\tprops[index] = value[index];\n\t\t\t\t\t\tspecialEasing[index] = easing;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tspecialEasing[name] = easing;\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction Animation(elem, properties, options) {\n\t\tvar result,\n\t\t\tstopped,\n\t\t\tindex = 0,\n\t\t\tlength = Animation.prefilters.length,\n\t\t\tdeferred = jQuery.Deferred().always(function () {\n\n\t\t\t\t// Don't match elem in the :animated selector\n\t\t\t\tdelete tick.elem;\n\t\t\t}),\n\t\t\ttick = function () {\n\t\t\t\tif (stopped) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tvar currentTime = fxNow || createFxNow(),\n\t\t\t\t\tremaining = Math.max(0, animation.startTime + animation.duration - currentTime),\n\n\t\t\t\t\t// Support: Android 2.3 only\n\t\t\t\t\t// Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (trac-12497)\n\t\t\t\t\ttemp = remaining / animation.duration || 0,\n\t\t\t\t\tpercent = 1 - temp,\n\t\t\t\t\tindex = 0,\n\t\t\t\t\tlength = animation.tweens.length;\n\n\t\t\t\tfor (; index < length; index++) {\n\t\t\t\t\tanimation.tweens[index].run(percent);\n\t\t\t\t}\n\n\t\t\t\tdeferred.notifyWith(elem, [animation, percent, remaining]);\n\n\t\t\t\t// If there's more to do, yield\n\t\t\t\tif (percent < 1 && length) {\n\t\t\t\t\treturn remaining;\n\t\t\t\t}\n\n\t\t\t\t// If this was an empty animation, synthesize a final progress notification\n\t\t\t\tif (!length) {\n\t\t\t\t\tdeferred.notifyWith(elem, [animation, 1, 0]);\n\t\t\t\t}\n\n\t\t\t\t// Resolve the animation and report its conclusion\n\t\t\t\tdeferred.resolveWith(elem, [animation]);\n\t\t\t\treturn false;\n\t\t\t},\n\t\t\tanimation = deferred.promise({\n\t\t\t\telem: elem,\n\t\t\t\tprops: jQuery.extend({}, properties),\n\t\t\t\topts: jQuery.extend(true, {\n\t\t\t\t\tspecialEasing: {},\n\t\t\t\t\teasing: jQuery.easing._default\n\t\t\t\t}, options),\n\t\t\t\toriginalProperties: properties,\n\t\t\t\toriginalOptions: options,\n\t\t\t\tstartTime: fxNow || createFxNow(),\n\t\t\t\tduration: options.duration,\n\t\t\t\ttweens: [],\n\t\t\t\tcreateTween: function (prop, end) {\n\t\t\t\t\tvar tween = jQuery.Tween(elem, animation.opts, prop, end,\n\t\t\t\t\t\tanimation.opts.specialEasing[prop] || animation.opts.easing);\n\t\t\t\t\tanimation.tweens.push(tween);\n\t\t\t\t\treturn tween;\n\t\t\t\t},\n\t\t\t\tstop: function (gotoEnd) {\n\t\t\t\t\tvar index = 0,\n\n\t\t\t\t\t\t// If we are going to the end, we want to run all the tweens\n\t\t\t\t\t\t// otherwise we skip this part\n\t\t\t\t\t\tlength = gotoEnd ? animation.tweens.length : 0;\n\t\t\t\t\tif (stopped) {\n\t\t\t\t\t\treturn this;\n\t\t\t\t\t}\n\t\t\t\t\tstopped = true;\n\t\t\t\t\tfor (; index < length; index++) {\n\t\t\t\t\t\tanimation.tweens[index].run(1);\n\t\t\t\t\t}\n\n\t\t\t\t\t// Resolve when we played the last frame; otherwise, reject\n\t\t\t\t\tif (gotoEnd) {\n\t\t\t\t\t\tdeferred.notifyWith(elem, [animation, 1, 0]);\n\t\t\t\t\t\tdeferred.resolveWith(elem, [animation, gotoEnd]);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdeferred.rejectWith(elem, [animation, gotoEnd]);\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t}),\n\t\t\tprops = animation.props;\n\n\t\tpropFilter(props, animation.opts.specialEasing);\n\n\t\tfor (; index < length; index++) {\n\t\t\tresult = Animation.prefilters[index].call(animation, elem, props, animation.opts);\n\t\t\tif (result) {\n\t\t\t\tif (isFunction(result.stop)) {\n\t\t\t\t\tjQuery._queueHooks(animation.elem, animation.opts.queue).stop =\n\t\t\t\t\t\tresult.stop.bind(result);\n\t\t\t\t}\n\t\t\t\treturn result;\n\t\t\t}\n\t\t}\n\n\t\tjQuery.map(props, createTween, animation);\n\n\t\tif (isFunction(animation.opts.start)) {\n\t\t\tanimation.opts.start.call(elem, animation);\n\t\t}\n\n\t\t// Attach callbacks from options\n\t\tanimation\n\t\t\t.progress(animation.opts.progress)\n\t\t\t.done(animation.opts.done, animation.opts.complete)\n\t\t\t.fail(animation.opts.fail)\n\t\t\t.always(animation.opts.always);\n\n\t\tjQuery.fx.timer(\n\t\t\tjQuery.extend(tick, {\n\t\t\t\telem: elem,\n\t\t\t\tanim: animation,\n\t\t\t\tqueue: animation.opts.queue\n\t\t\t})\n\t\t);\n\n\t\treturn animation;\n\t}\n\n\tjQuery.Animation = jQuery.extend(Animation, {\n\n\t\ttweeners: {\n\t\t\t\"*\": [function (prop, value) {\n\t\t\t\tvar tween = this.createTween(prop, value);\n\t\t\t\tadjustCSS(tween.elem, prop, rcssNum.exec(value), tween);\n\t\t\t\treturn tween;\n\t\t\t}]\n\t\t},\n\n\t\ttweener: function (props, callback) {\n\t\t\tif (isFunction(props)) {\n\t\t\t\tcallback = props;\n\t\t\t\tprops = [\"*\"];\n\t\t\t} else {\n\t\t\t\tprops = props.match(rnothtmlwhite);\n\t\t\t}\n\n\t\t\tvar prop,\n\t\t\t\tindex = 0,\n\t\t\t\tlength = props.length;\n\n\t\t\tfor (; index < length; index++) {\n\t\t\t\tprop = props[index];\n\t\t\t\tAnimation.tweeners[prop] = Animation.tweeners[prop] || [];\n\t\t\t\tAnimation.tweeners[prop].unshift(callback);\n\t\t\t}\n\t\t},\n\n\t\tprefilters: [defaultPrefilter],\n\n\t\tprefilter: function (callback, prepend) {\n\t\t\tif (prepend) {\n\t\t\t\tAnimation.prefilters.unshift(callback);\n\t\t\t} else {\n\t\t\t\tAnimation.prefilters.push(callback);\n\t\t\t}\n\t\t}\n\t});\n\n\tjQuery.speed = function (speed, easing, fn) {\n\t\tvar opt = speed && typeof speed === \"object\" ? jQuery.extend({}, speed) : {\n\t\t\tcomplete: fn || !fn && easing ||\n\t\t\t\tisFunction(speed) && speed,\n\t\t\tduration: speed,\n\t\t\teasing: fn && easing || easing && !isFunction(easing) && easing\n\t\t};\n\n\t\t// Go to the end state if fx are off\n\t\tif (jQuery.fx.off) {\n\t\t\topt.duration = 0;\n\n\t\t} else {\n\t\t\tif (typeof opt.duration !== \"number\") {\n\t\t\t\tif (opt.duration in jQuery.fx.speeds) {\n\t\t\t\t\topt.duration = jQuery.fx.speeds[opt.duration];\n\n\t\t\t\t} else {\n\t\t\t\t\topt.duration = jQuery.fx.speeds._default;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Normalize opt.queue - true/undefined/null -> \"fx\"\n\t\tif (opt.queue == null || opt.queue === true) {\n\t\t\topt.queue = \"fx\";\n\t\t}\n\n\t\t// Queueing\n\t\topt.old = opt.complete;\n\n\t\topt.complete = function () {\n\t\t\tif (isFunction(opt.old)) {\n\t\t\t\topt.old.call(this);\n\t\t\t}\n\n\t\t\tif (opt.queue) {\n\t\t\t\tjQuery.dequeue(this, opt.queue);\n\t\t\t}\n\t\t};\n\n\t\treturn opt;\n\t};\n\n\tjQuery.fn.extend({\n\t\tfadeTo: function (speed, to, easing, callback) {\n\n\t\t\t// Show any hidden elements after setting opacity to 0\n\t\t\treturn this.filter(isHiddenWithinTree).css(\"opacity\", 0).show()\n\n\t\t\t\t// Animate to the value specified\n\t\t\t\t.end().animate({ opacity: to }, speed, easing, callback);\n\t\t},\n\t\tanimate: function (prop, speed, easing, callback) {\n\t\t\tvar empty = jQuery.isEmptyObject(prop),\n\t\t\t\toptall = jQuery.speed(speed, easing, callback),\n\t\t\t\tdoAnimation = function () {\n\n\t\t\t\t\t// Operate on a copy of prop so per-property easing won't be lost\n\t\t\t\t\tvar anim = Animation(this, jQuery.extend({}, prop), optall);\n\n\t\t\t\t\t// Empty animations, or finishing resolves immediately\n\t\t\t\t\tif (empty || dataPriv.get(this, \"finish\")) {\n\t\t\t\t\t\tanim.stop(true);\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\tdoAnimation.finish = doAnimation;\n\n\t\t\treturn empty || optall.queue === false ?\n\t\t\t\tthis.each(doAnimation) :\n\t\t\t\tthis.queue(optall.queue, doAnimation);\n\t\t},\n\t\tstop: function (type, clearQueue, gotoEnd) {\n\t\t\tvar stopQueue = function (hooks) {\n\t\t\t\tvar stop = hooks.stop;\n\t\t\t\tdelete hooks.stop;\n\t\t\t\tstop(gotoEnd);\n\t\t\t};\n\n\t\t\tif (typeof type !== \"string\") {\n\t\t\t\tgotoEnd = clearQueue;\n\t\t\t\tclearQueue = type;\n\t\t\t\ttype = undefined;\n\t\t\t}\n\t\t\tif (clearQueue) {\n\t\t\t\tthis.queue(type || \"fx\", []);\n\t\t\t}\n\n\t\t\treturn this.each(function () {\n\t\t\t\tvar dequeue = true,\n\t\t\t\t\tindex = type != null && type + \"queueHooks\",\n\t\t\t\t\ttimers = jQuery.timers,\n\t\t\t\t\tdata = dataPriv.get(this);\n\n\t\t\t\tif (index) {\n\t\t\t\t\tif (data[index] && data[index].stop) {\n\t\t\t\t\t\tstopQueue(data[index]);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tfor (index in data) {\n\t\t\t\t\t\tif (data[index] && data[index].stop && rrun.test(index)) {\n\t\t\t\t\t\t\tstopQueue(data[index]);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tfor (index = timers.length; index--;) {\n\t\t\t\t\tif (timers[index].elem === this &&\n\t\t\t\t\t\t(type == null || timers[index].queue === type)) {\n\n\t\t\t\t\t\ttimers[index].anim.stop(gotoEnd);\n\t\t\t\t\t\tdequeue = false;\n\t\t\t\t\t\ttimers.splice(index, 1);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Start the next in the queue if the last step wasn't forced.\n\t\t\t\t// Timers currently will call their complete callbacks, which\n\t\t\t\t// will dequeue but only if they were gotoEnd.\n\t\t\t\tif (dequeue || !gotoEnd) {\n\t\t\t\t\tjQuery.dequeue(this, type);\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\t\tfinish: function (type) {\n\t\t\tif (type !== false) {\n\t\t\t\ttype = type || \"fx\";\n\t\t\t}\n\t\t\treturn this.each(function () {\n\t\t\t\tvar index,\n\t\t\t\t\tdata = dataPriv.get(this),\n\t\t\t\t\tqueue = data[type + \"queue\"],\n\t\t\t\t\thooks = data[type + \"queueHooks\"],\n\t\t\t\t\ttimers = jQuery.timers,\n\t\t\t\t\tlength = queue ? queue.length : 0;\n\n\t\t\t\t// Enable finishing flag on private data\n\t\t\t\tdata.finish = true;\n\n\t\t\t\t// Empty the queue first\n\t\t\t\tjQuery.queue(this, type, []);\n\n\t\t\t\tif (hooks && hooks.stop) {\n\t\t\t\t\thooks.stop.call(this, true);\n\t\t\t\t}\n\n\t\t\t\t// Look for any active animations, and finish them\n\t\t\t\tfor (index = timers.length; index--;) {\n\t\t\t\t\tif (timers[index].elem === this && timers[index].queue === type) {\n\t\t\t\t\t\ttimers[index].anim.stop(true);\n\t\t\t\t\t\ttimers.splice(index, 1);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Look for any animations in the old queue and finish them\n\t\t\t\tfor (index = 0; index < length; index++) {\n\t\t\t\t\tif (queue[index] && queue[index].finish) {\n\t\t\t\t\t\tqueue[index].finish.call(this);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Turn off finishing flag\n\t\t\t\tdelete data.finish;\n\t\t\t});\n\t\t}\n\t});\n\n\tjQuery.each([\"toggle\", \"show\", \"hide\"], function (_i, name) {\n\t\tvar cssFn = jQuery.fn[name];\n\t\tjQuery.fn[name] = function (speed, easing, callback) {\n\t\t\treturn speed == null || typeof speed === \"boolean\" ?\n\t\t\t\tcssFn.apply(this, arguments) :\n\t\t\t\tthis.animate(genFx(name, true), speed, easing, callback);\n\t\t};\n\t});\n\n\t// Generate shortcuts for custom animations\n\tjQuery.each({\n\t\tslideDown: genFx(\"show\"),\n\t\tslideUp: genFx(\"hide\"),\n\t\tslideToggle: genFx(\"toggle\"),\n\t\tfadeIn: { opacity: \"show\" },\n\t\tfadeOut: { opacity: \"hide\" },\n\t\tfadeToggle: { opacity: \"toggle\" }\n\t}, function (name, props) {\n\t\tjQuery.fn[name] = function (speed, easing, callback) {\n\t\t\treturn this.animate(props, speed, easing, callback);\n\t\t};\n\t});\n\n\tjQuery.timers = [];\n\tjQuery.fx.tick = function () {\n\t\tvar timer,\n\t\t\ti = 0,\n\t\t\ttimers = jQuery.timers;\n\n\t\tfxNow = Date.now();\n\n\t\tfor (; i < timers.length; i++) {\n\t\t\ttimer = timers[i];\n\n\t\t\t// Run the timer and safely remove it when done (allowing for external removal)\n\t\t\tif (!timer() && timers[i] === timer) {\n\t\t\t\ttimers.splice(i--, 1);\n\t\t\t}\n\t\t}\n\n\t\tif (!timers.length) {\n\t\t\tjQuery.fx.stop();\n\t\t}\n\t\tfxNow = undefined;\n\t};\n\n\tjQuery.fx.timer = function (timer) {\n\t\tjQuery.timers.push(timer);\n\t\tjQuery.fx.start();\n\t};\n\n\tjQuery.fx.interval = 13;\n\tjQuery.fx.start = function () {\n\t\tif (inProgress) {\n\t\t\treturn;\n\t\t}\n\n\t\tinProgress = true;\n\t\tschedule();\n\t};\n\n\tjQuery.fx.stop = function () {\n\t\tinProgress = null;\n\t};\n\n\tjQuery.fx.speeds = {\n\t\tslow: 600,\n\t\tfast: 200,\n\n\t\t// Default speed\n\t\t_default: 400\n\t};\n\n\n\t// Based off of the plugin by Clint Helfers, with permission.\n\tjQuery.fn.delay = function (time, type) {\n\t\ttime = jQuery.fx ? jQuery.fx.speeds[time] || time : time;\n\t\ttype = type || \"fx\";\n\n\t\treturn this.queue(type, function (next, hooks) {\n\t\t\tvar timeout = window.setTimeout(next, time);\n\t\t\thooks.stop = function () {\n\t\t\t\twindow.clearTimeout(timeout);\n\t\t\t};\n\t\t});\n\t};\n\n\n\t(function () {\n\t\tvar input = document.createElement(\"input\"),\n\t\t\tselect = document.createElement(\"select\"),\n\t\t\topt = select.appendChild(document.createElement(\"option\"));\n\n\t\tinput.type = \"checkbox\";\n\n\t\t// Support: Android <=4.3 only\n\t\t// Default value for a checkbox should be \"on\"\n\t\tsupport.checkOn = input.value !== \"\";\n\n\t\t// Support: IE <=11 only\n\t\t// Must access selectedIndex to make default options select\n\t\tsupport.optSelected = opt.selected;\n\n\t\t// Support: IE <=11 only\n\t\t// An input loses its value after becoming a radio\n\t\tinput = document.createElement(\"input\");\n\t\tinput.value = \"t\";\n\t\tinput.type = \"radio\";\n\t\tsupport.radioValue = input.value === \"t\";\n\t})();\n\n\n\tvar boolHook,\n\t\tattrHandle = jQuery.expr.attrHandle;\n\n\tjQuery.fn.extend({\n\t\tattr: function (name, value) {\n\t\t\treturn access(this, jQuery.attr, name, value, arguments.length > 1);\n\t\t},\n\n\t\tremoveAttr: function (name) {\n\t\t\treturn this.each(function () {\n\t\t\t\tjQuery.removeAttr(this, name);\n\t\t\t});\n\t\t}\n\t});\n\n\tjQuery.extend({\n\t\tattr: function (elem, name, value) {\n\t\t\tvar ret, hooks,\n\t\t\t\tnType = elem.nodeType;\n\n\t\t\t// Don't get/set attributes on text, comment and attribute nodes\n\t\t\tif (nType === 3 || nType === 8 || nType === 2) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Fallback to prop when attributes are not supported\n\t\t\tif (typeof elem.getAttribute === \"undefined\") {\n\t\t\t\treturn jQuery.prop(elem, name, value);\n\t\t\t}\n\n\t\t\t// Attribute hooks are determined by the lowercase version\n\t\t\t// Grab necessary hook if one is defined\n\t\t\tif (nType !== 1 || !jQuery.isXMLDoc(elem)) {\n\t\t\t\thooks = jQuery.attrHooks[name.toLowerCase()] ||\n\t\t\t\t\t(jQuery.expr.match.bool.test(name) ? boolHook : undefined);\n\t\t\t}\n\n\t\t\tif (value !== undefined) {\n\t\t\t\tif (value === null) {\n\t\t\t\t\tjQuery.removeAttr(elem, name);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (hooks && \"set\" in hooks &&\n\t\t\t\t\t(ret = hooks.set(elem, value, name)) !== undefined) {\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\n\t\t\t\telem.setAttribute(name, value + \"\");\n\t\t\t\treturn value;\n\t\t\t}\n\n\t\t\tif (hooks && \"get\" in hooks && (ret = hooks.get(elem, name)) !== null) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\tret = jQuery.find.attr(elem, name);\n\n\t\t\t// Non-existent attributes return null, we normalize to undefined\n\t\t\treturn ret == null ? undefined : ret;\n\t\t},\n\n\t\tattrHooks: {\n\t\t\ttype: {\n\t\t\t\tset: function (elem, value) {\n\t\t\t\t\tif (!support.radioValue && value === \"radio\" &&\n\t\t\t\t\t\tnodeName(elem, \"input\")) {\n\t\t\t\t\t\tvar val = elem.value;\n\t\t\t\t\t\telem.setAttribute(\"type\", value);\n\t\t\t\t\t\tif (val) {\n\t\t\t\t\t\t\telem.value = val;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn value;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tremoveAttr: function (elem, value) {\n\t\t\tvar name,\n\t\t\t\ti = 0,\n\n\t\t\t\t// Attribute names can contain non-HTML whitespace characters\n\t\t\t\t// https://html.spec.whatwg.org/multipage/syntax.html#attributes-2\n\t\t\t\tattrNames = value && value.match(rnothtmlwhite);\n\n\t\t\tif (attrNames && elem.nodeType === 1) {\n\t\t\t\twhile ((name = attrNames[i++])) {\n\t\t\t\t\telem.removeAttribute(name);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\n\t// Hooks for boolean attributes\n\tboolHook = {\n\t\tset: function (elem, value, name) {\n\t\t\tif (value === false) {\n\n\t\t\t\t// Remove boolean attributes when set to false\n\t\t\t\tjQuery.removeAttr(elem, name);\n\t\t\t} else {\n\t\t\t\telem.setAttribute(name, name);\n\t\t\t}\n\t\t\treturn name;\n\t\t}\n\t};\n\n\tjQuery.each(jQuery.expr.match.bool.source.match(/\\w+/g), function (_i, name) {\n\t\tvar getter = attrHandle[name] || jQuery.find.attr;\n\n\t\tattrHandle[name] = function (elem, name, isXML) {\n\t\t\tvar ret, handle,\n\t\t\t\tlowercaseName = name.toLowerCase();\n\n\t\t\tif (!isXML) {\n\n\t\t\t\t// Avoid an infinite loop by temporarily removing this function from the getter\n\t\t\t\thandle = attrHandle[lowercaseName];\n\t\t\t\tattrHandle[lowercaseName] = ret;\n\t\t\t\tret = getter(elem, name, isXML) != null ?\n\t\t\t\t\tlowercaseName :\n\t\t\t\t\tnull;\n\t\t\t\tattrHandle[lowercaseName] = handle;\n\t\t\t}\n\t\t\treturn ret;\n\t\t};\n\t});\n\n\n\n\n\tvar rfocusable = /^(?:input|select|textarea|button)$/i,\n\t\trclickable = /^(?:a|area)$/i;\n\n\tjQuery.fn.extend({\n\t\tprop: function (name, value) {\n\t\t\treturn access(this, jQuery.prop, name, value, arguments.length > 1);\n\t\t},\n\n\t\tremoveProp: function (name) {\n\t\t\treturn this.each(function () {\n\t\t\t\tdelete this[jQuery.propFix[name] || name];\n\t\t\t});\n\t\t}\n\t});\n\n\tjQuery.extend({\n\t\tprop: function (elem, name, value) {\n\t\t\tvar ret, hooks,\n\t\t\t\tnType = elem.nodeType;\n\n\t\t\t// Don't get/set properties on text, comment and attribute nodes\n\t\t\tif (nType === 3 || nType === 8 || nType === 2) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (nType !== 1 || !jQuery.isXMLDoc(elem)) {\n\n\t\t\t\t// Fix name and attach hooks\n\t\t\t\tname = jQuery.propFix[name] || name;\n\t\t\t\thooks = jQuery.propHooks[name];\n\t\t\t}\n\n\t\t\tif (value !== undefined) {\n\t\t\t\tif (hooks && \"set\" in hooks &&\n\t\t\t\t\t(ret = hooks.set(elem, value, name)) !== undefined) {\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\n\t\t\t\treturn (elem[name] = value);\n\t\t\t}\n\n\t\t\tif (hooks && \"get\" in hooks && (ret = hooks.get(elem, name)) !== null) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\treturn elem[name];\n\t\t},\n\n\t\tpropHooks: {\n\t\t\ttabIndex: {\n\t\t\t\tget: function (elem) {\n\n\t\t\t\t\t// Support: IE <=9 - 11 only\n\t\t\t\t\t// elem.tabIndex doesn't always return the\n\t\t\t\t\t// correct value when it hasn't been explicitly set\n\t\t\t\t\t// Use proper attribute retrieval (trac-12072)\n\t\t\t\t\tvar tabindex = jQuery.find.attr(elem, \"tabindex\");\n\n\t\t\t\t\tif (tabindex) {\n\t\t\t\t\t\treturn parseInt(tabindex, 10);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (\n\t\t\t\t\t\trfocusable.test(elem.nodeName) ||\n\t\t\t\t\t\trclickable.test(elem.nodeName) &&\n\t\t\t\t\t\telem.href\n\t\t\t\t\t) {\n\t\t\t\t\t\treturn 0;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn -1;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tpropFix: {\n\t\t\t\"for\": \"htmlFor\",\n\t\t\t\"class\": \"className\"\n\t\t}\n\t});\n\n\t// Support: IE <=11 only\n\t// Accessing the selectedIndex property\n\t// forces the browser to respect setting selected\n\t// on the option\n\t// The getter ensures a default option is selected\n\t// when in an optgroup\n\t// eslint rule \"no-unused-expressions\" is disabled for this code\n\t// since it considers such accessions noop\n\tif (!support.optSelected) {\n\t\tjQuery.propHooks.selected = {\n\t\t\tget: function (elem) {\n\n\t\t\t\t/* eslint no-unused-expressions: \"off\" */\n\n\t\t\t\tvar parent = elem.parentNode;\n\t\t\t\tif (parent && parent.parentNode) {\n\t\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t\t}\n\t\t\t\treturn null;\n\t\t\t},\n\t\t\tset: function (elem) {\n\n\t\t\t\t/* eslint no-unused-expressions: \"off\" */\n\n\t\t\t\tvar parent = elem.parentNode;\n\t\t\t\tif (parent) {\n\t\t\t\t\tparent.selectedIndex;\n\n\t\t\t\t\tif (parent.parentNode) {\n\t\t\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n\n\tjQuery.each([\n\t\t\"tabIndex\",\n\t\t\"readOnly\",\n\t\t\"maxLength\",\n\t\t\"cellSpacing\",\n\t\t\"cellPadding\",\n\t\t\"rowSpan\",\n\t\t\"colSpan\",\n\t\t\"useMap\",\n\t\t\"frameBorder\",\n\t\t\"contentEditable\"\n\t], function () {\n\t\tjQuery.propFix[this.toLowerCase()] = this;\n\t});\n\n\n\n\n\t// Strip and collapse whitespace according to HTML spec\n\t// https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace\n\tfunction stripAndCollapse(value) {\n\t\tvar tokens = value.match(rnothtmlwhite) || [];\n\t\treturn tokens.join(\" \");\n\t}\n\n\n\tfunction getClass(elem) {\n\t\treturn elem.getAttribute && elem.getAttribute(\"class\") || \"\";\n\t}\n\n\tfunction classesToArray(value) {\n\t\tif (Array.isArray(value)) {\n\t\t\treturn value;\n\t\t}\n\t\tif (typeof value === \"string\") {\n\t\t\treturn value.match(rnothtmlwhite) || [];\n\t\t}\n\t\treturn [];\n\t}\n\n\tjQuery.fn.extend({\n\t\taddClass: function (value) {\n\t\t\tvar classNames, cur, curValue, className, i, finalValue;\n\n\t\t\tif (isFunction(value)) {\n\t\t\t\treturn this.each(function (j) {\n\t\t\t\t\tjQuery(this).addClass(value.call(this, j, getClass(this)));\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tclassNames = classesToArray(value);\n\n\t\t\tif (classNames.length) {\n\t\t\t\treturn this.each(function () {\n\t\t\t\t\tcurValue = getClass(this);\n\t\t\t\t\tcur = this.nodeType === 1 && (\" \" + stripAndCollapse(curValue) + \" \");\n\n\t\t\t\t\tif (cur) {\n\t\t\t\t\t\tfor (i = 0; i < classNames.length; i++) {\n\t\t\t\t\t\t\tclassName = classNames[i];\n\t\t\t\t\t\t\tif (cur.indexOf(\" \" + className + \" \") < 0) {\n\t\t\t\t\t\t\t\tcur += className + \" \";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\t\tfinalValue = stripAndCollapse(cur);\n\t\t\t\t\t\tif (curValue !== finalValue) {\n\t\t\t\t\t\t\tthis.setAttribute(\"class\", finalValue);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn this;\n\t\t},\n\n\t\tremoveClass: function (value) {\n\t\t\tvar classNames, cur, curValue, className, i, finalValue;\n\n\t\t\tif (isFunction(value)) {\n\t\t\t\treturn this.each(function (j) {\n\t\t\t\t\tjQuery(this).removeClass(value.call(this, j, getClass(this)));\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (!arguments.length) {\n\t\t\t\treturn this.attr(\"class\", \"\");\n\t\t\t}\n\n\t\t\tclassNames = classesToArray(value);\n\n\t\t\tif (classNames.length) {\n\t\t\t\treturn this.each(function () {\n\t\t\t\t\tcurValue = getClass(this);\n\n\t\t\t\t\t// This expression is here for better compressibility (see addClass)\n\t\t\t\t\tcur = this.nodeType === 1 && (\" \" + stripAndCollapse(curValue) + \" \");\n\n\t\t\t\t\tif (cur) {\n\t\t\t\t\t\tfor (i = 0; i < classNames.length; i++) {\n\t\t\t\t\t\t\tclassName = classNames[i];\n\n\t\t\t\t\t\t\t// Remove *all* instances\n\t\t\t\t\t\t\twhile (cur.indexOf(\" \" + className + \" \") > -1) {\n\t\t\t\t\t\t\t\tcur = cur.replace(\" \" + className + \" \", \" \");\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\t\tfinalValue = stripAndCollapse(cur);\n\t\t\t\t\t\tif (curValue !== finalValue) {\n\t\t\t\t\t\t\tthis.setAttribute(\"class\", finalValue);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn this;\n\t\t},\n\n\t\ttoggleClass: function (value, stateVal) {\n\t\t\tvar classNames, className, i, self,\n\t\t\t\ttype = typeof value,\n\t\t\t\tisValidValue = type === \"string\" || Array.isArray(value);\n\n\t\t\tif (isFunction(value)) {\n\t\t\t\treturn this.each(function (i) {\n\t\t\t\t\tjQuery(this).toggleClass(\n\t\t\t\t\t\tvalue.call(this, i, getClass(this), stateVal),\n\t\t\t\t\t\tstateVal\n\t\t\t\t\t);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (typeof stateVal === \"boolean\" && isValidValue) {\n\t\t\t\treturn stateVal ? this.addClass(value) : this.removeClass(value);\n\t\t\t}\n\n\t\t\tclassNames = classesToArray(value);\n\n\t\t\treturn this.each(function () {\n\t\t\t\tif (isValidValue) {\n\n\t\t\t\t\t// Toggle individual class names\n\t\t\t\t\tself = jQuery(this);\n\n\t\t\t\t\tfor (i = 0; i < classNames.length; i++) {\n\t\t\t\t\t\tclassName = classNames[i];\n\n\t\t\t\t\t\t// Check each className given, space separated list\n\t\t\t\t\t\tif (self.hasClass(className)) {\n\t\t\t\t\t\t\tself.removeClass(className);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tself.addClass(className);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Toggle whole class name\n\t\t\t\t} else if (value === undefined || type === \"boolean\") {\n\t\t\t\t\tclassName = getClass(this);\n\t\t\t\t\tif (className) {\n\n\t\t\t\t\t\t// Store className if set\n\t\t\t\t\t\tdataPriv.set(this, \"__className__\", className);\n\t\t\t\t\t}\n\n\t\t\t\t\t// If the element has a class name or if we're passed `false`,\n\t\t\t\t\t// then remove the whole classname (if there was one, the above saved it).\n\t\t\t\t\t// Otherwise bring back whatever was previously saved (if anything),\n\t\t\t\t\t// falling back to the empty string if nothing was stored.\n\t\t\t\t\tif (this.setAttribute) {\n\t\t\t\t\t\tthis.setAttribute(\"class\",\n\t\t\t\t\t\t\tclassName || value === false ?\n\t\t\t\t\t\t\t\t\"\" :\n\t\t\t\t\t\t\t\tdataPriv.get(this, \"__className__\") || \"\"\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\thasClass: function (selector) {\n\t\t\tvar className, elem,\n\t\t\t\ti = 0;\n\n\t\t\tclassName = \" \" + selector + \" \";\n\t\t\twhile ((elem = this[i++])) {\n\t\t\t\tif (elem.nodeType === 1 &&\n\t\t\t\t\t(\" \" + stripAndCollapse(getClass(elem)) + \" \").indexOf(className) > -1) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn false;\n\t\t}\n\t});\n\n\n\n\n\tvar rreturn = /\\r/g;\n\n\tjQuery.fn.extend({\n\t\tval: function (value) {\n\t\t\tvar hooks, ret, valueIsFunction,\n\t\t\t\telem = this[0];\n\n\t\t\tif (!arguments.length) {\n\t\t\t\tif (elem) {\n\t\t\t\t\thooks = jQuery.valHooks[elem.type] ||\n\t\t\t\t\t\tjQuery.valHooks[elem.nodeName.toLowerCase()];\n\n\t\t\t\t\tif (hooks &&\n\t\t\t\t\t\t\"get\" in hooks &&\n\t\t\t\t\t\t(ret = hooks.get(elem, \"value\")) !== undefined\n\t\t\t\t\t) {\n\t\t\t\t\t\treturn ret;\n\t\t\t\t\t}\n\n\t\t\t\t\tret = elem.value;\n\n\t\t\t\t\t// Handle most common string cases\n\t\t\t\t\tif (typeof ret === \"string\") {\n\t\t\t\t\t\treturn ret.replace(rreturn, \"\");\n\t\t\t\t\t}\n\n\t\t\t\t\t// Handle cases where value is null/undef or number\n\t\t\t\t\treturn ret == null ? \"\" : ret;\n\t\t\t\t}\n\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvalueIsFunction = isFunction(value);\n\n\t\t\treturn this.each(function (i) {\n\t\t\t\tvar val;\n\n\t\t\t\tif (this.nodeType !== 1) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (valueIsFunction) {\n\t\t\t\t\tval = value.call(this, i, jQuery(this).val());\n\t\t\t\t} else {\n\t\t\t\t\tval = value;\n\t\t\t\t}\n\n\t\t\t\t// Treat null/undefined as \"\"; convert numbers to string\n\t\t\t\tif (val == null) {\n\t\t\t\t\tval = \"\";\n\n\t\t\t\t} else if (typeof val === \"number\") {\n\t\t\t\t\tval += \"\";\n\n\t\t\t\t} else if (Array.isArray(val)) {\n\t\t\t\t\tval = jQuery.map(val, function (value) {\n\t\t\t\t\t\treturn value == null ? \"\" : value + \"\";\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\thooks = jQuery.valHooks[this.type] || jQuery.valHooks[this.nodeName.toLowerCase()];\n\n\t\t\t\t// If set returns undefined, fall back to normal setting\n\t\t\t\tif (!hooks || !(\"set\" in hooks) || hooks.set(this, val, \"value\") === undefined) {\n\t\t\t\t\tthis.value = val;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t});\n\n\tjQuery.extend({\n\t\tvalHooks: {\n\t\t\toption: {\n\t\t\t\tget: function (elem) {\n\n\t\t\t\t\tvar val = jQuery.find.attr(elem, \"value\");\n\t\t\t\t\treturn val != null ?\n\t\t\t\t\t\tval :\n\n\t\t\t\t\t\t// Support: IE <=10 - 11 only\n\t\t\t\t\t\t// option.text throws exceptions (trac-14686, trac-14858)\n\t\t\t\t\t\t// Strip and collapse whitespace\n\t\t\t\t\t\t// https://html.spec.whatwg.org/#strip-and-collapse-whitespace\n\t\t\t\t\t\tstripAndCollapse(jQuery.text(elem));\n\t\t\t\t}\n\t\t\t},\n\t\t\tselect: {\n\t\t\t\tget: function (elem) {\n\t\t\t\t\tvar value, option, i,\n\t\t\t\t\t\toptions = elem.options,\n\t\t\t\t\t\tindex = elem.selectedIndex,\n\t\t\t\t\t\tone = elem.type === \"select-one\",\n\t\t\t\t\t\tvalues = one ? null : [],\n\t\t\t\t\t\tmax = one ? index + 1 : options.length;\n\n\t\t\t\t\tif (index < 0) {\n\t\t\t\t\t\ti = max;\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\ti = one ? index : 0;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Loop through all the selected options\n\t\t\t\t\tfor (; i < max; i++) {\n\t\t\t\t\t\toption = options[i];\n\n\t\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t\t// IE8-9 doesn't update selected after form reset (trac-2551)\n\t\t\t\t\t\tif ((option.selected || i === index) &&\n\n\t\t\t\t\t\t\t// Don't return options that are disabled or in a disabled optgroup\n\t\t\t\t\t\t\t!option.disabled &&\n\t\t\t\t\t\t\t(!option.parentNode.disabled ||\n\t\t\t\t\t\t\t\t!nodeName(option.parentNode, \"optgroup\"))) {\n\n\t\t\t\t\t\t\t// Get the specific value for the option\n\t\t\t\t\t\t\tvalue = jQuery(option).val();\n\n\t\t\t\t\t\t\t// We don't need an array for one selects\n\t\t\t\t\t\t\tif (one) {\n\t\t\t\t\t\t\t\treturn value;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Multi-Selects return an array\n\t\t\t\t\t\t\tvalues.push(value);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn values;\n\t\t\t\t},\n\n\t\t\t\tset: function (elem, value) {\n\t\t\t\t\tvar optionSet, option,\n\t\t\t\t\t\toptions = elem.options,\n\t\t\t\t\t\tvalues = jQuery.makeArray(value),\n\t\t\t\t\t\ti = options.length;\n\n\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\toption = options[i];\n\n\t\t\t\t\t\t/* eslint-disable no-cond-assign */\n\n\t\t\t\t\t\tif (option.selected =\n\t\t\t\t\t\t\tjQuery.inArray(jQuery.valHooks.option.get(option), values) > -1\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\toptionSet = true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t/* eslint-enable no-cond-assign */\n\t\t\t\t\t}\n\n\t\t\t\t\t// Force browsers to behave consistently when non-matching value is set\n\t\t\t\t\tif (!optionSet) {\n\t\t\t\t\t\telem.selectedIndex = -1;\n\t\t\t\t\t}\n\t\t\t\t\treturn values;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\n\t// Radios and checkboxes getter/setter\n\tjQuery.each([\"radio\", \"checkbox\"], function () {\n\t\tjQuery.valHooks[this] = {\n\t\t\tset: function (elem, value) {\n\t\t\t\tif (Array.isArray(value)) {\n\t\t\t\t\treturn (elem.checked = jQuery.inArray(jQuery(elem).val(), value) > -1);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\tif (!support.checkOn) {\n\t\t\tjQuery.valHooks[this].get = function (elem) {\n\t\t\t\treturn elem.getAttribute(\"value\") === null ? \"on\" : elem.value;\n\t\t\t};\n\t\t}\n\t});\n\n\n\n\n\t// Return jQuery for attributes-only inclusion\n\tvar location = window.location;\n\n\tvar nonce = { guid: Date.now() };\n\n\tvar rquery = (/\\?/);\n\n\n\n\t// Cross-browser xml parsing\n\tjQuery.parseXML = function (data) {\n\t\tvar xml, parserErrorElem;\n\t\tif (!data || typeof data !== \"string\") {\n\t\t\treturn null;\n\t\t}\n\n\t\t// Support: IE 9 - 11 only\n\t\t// IE throws on parseFromString with invalid input.\n\t\ttry {\n\t\t\txml = (new window.DOMParser()).parseFromString(data, \"text/xml\");\n\t\t} catch (e) { }\n\n\t\tparserErrorElem = xml && xml.getElementsByTagName(\"parsererror\")[0];\n\t\tif (!xml || parserErrorElem) {\n\t\t\tjQuery.error(\"Invalid XML: \" + (\n\t\t\t\tparserErrorElem ?\n\t\t\t\t\tjQuery.map(parserErrorElem.childNodes, function (el) {\n\t\t\t\t\t\treturn el.textContent;\n\t\t\t\t\t}).join(\"\\n\") :\n\t\t\t\t\tdata\n\t\t\t));\n\t\t}\n\t\treturn xml;\n\t};\n\n\n\tvar rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,\n\t\tstopPropagationCallback = function (e) {\n\t\t\te.stopPropagation();\n\t\t};\n\n\tjQuery.extend(jQuery.event, {\n\n\t\ttrigger: function (event, data, elem, onlyHandlers) {\n\n\t\t\tvar i, cur, tmp, bubbleType, ontype, handle, special, lastElement,\n\t\t\t\teventPath = [elem || document],\n\t\t\t\ttype = hasOwn.call(event, \"type\") ? event.type : event,\n\t\t\t\tnamespaces = hasOwn.call(event, \"namespace\") ? event.namespace.split(\".\") : [];\n\n\t\t\tcur = lastElement = tmp = elem = elem || document;\n\n\t\t\t// Don't do events on text and comment nodes\n\t\t\tif (elem.nodeType === 3 || elem.nodeType === 8) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// focus/blur morphs to focusin/out; ensure we're not firing them right now\n\t\t\tif (rfocusMorph.test(type + jQuery.event.triggered)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (type.indexOf(\".\") > -1) {\n\n\t\t\t\t// Namespaced trigger; create a regexp to match event type in handle()\n\t\t\t\tnamespaces = type.split(\".\");\n\t\t\t\ttype = namespaces.shift();\n\t\t\t\tnamespaces.sort();\n\t\t\t}\n\t\t\tontype = type.indexOf(\":\") < 0 && \"on\" + type;\n\n\t\t\t// Caller can pass in a jQuery.Event object, Object, or just an event type string\n\t\t\tevent = event[jQuery.expando] ?\n\t\t\t\tevent :\n\t\t\t\tnew jQuery.Event(type, typeof event === \"object\" && event);\n\n\t\t\t// Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)\n\t\t\tevent.isTrigger = onlyHandlers ? 2 : 3;\n\t\t\tevent.namespace = namespaces.join(\".\");\n\t\t\tevent.rnamespace = event.namespace ?\n\t\t\t\tnew RegExp(\"(^|\\\\.)\" + namespaces.join(\"\\\\.(?:.*\\\\.|)\") + \"(\\\\.|$)\") :\n\t\t\t\tnull;\n\n\t\t\t// Clean up the event in case it is being reused\n\t\t\tevent.result = undefined;\n\t\t\tif (!event.target) {\n\t\t\t\tevent.target = elem;\n\t\t\t}\n\n\t\t\t// Clone any incoming data and prepend the event, creating the handler arg list\n\t\t\tdata = data == null ?\n\t\t\t\t[event] :\n\t\t\t\tjQuery.makeArray(data, [event]);\n\n\t\t\t// Allow special events to draw outside the lines\n\t\t\tspecial = jQuery.event.special[type] || {};\n\t\t\tif (!onlyHandlers && special.trigger && special.trigger.apply(elem, data) === false) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Determine event propagation path in advance, per W3C events spec (trac-9951)\n\t\t\t// Bubble up to document, then to window; watch for a global ownerDocument var (trac-9724)\n\t\t\tif (!onlyHandlers && !special.noBubble && !isWindow(elem)) {\n\n\t\t\t\tbubbleType = special.delegateType || type;\n\t\t\t\tif (!rfocusMorph.test(bubbleType + type)) {\n\t\t\t\t\tcur = cur.parentNode;\n\t\t\t\t}\n\t\t\t\tfor (; cur; cur = cur.parentNode) {\n\t\t\t\t\teventPath.push(cur);\n\t\t\t\t\ttmp = cur;\n\t\t\t\t}\n\n\t\t\t\t// Only add window if we got to document (e.g., not plain obj or detached DOM)\n\t\t\t\tif (tmp === (elem.ownerDocument || document)) {\n\t\t\t\t\teventPath.push(tmp.defaultView || tmp.parentWindow || window);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Fire handlers on the event path\n\t\t\ti = 0;\n\t\t\twhile ((cur = eventPath[i++]) && !event.isPropagationStopped()) {\n\t\t\t\tlastElement = cur;\n\t\t\t\tevent.type = i > 1 ?\n\t\t\t\t\tbubbleType :\n\t\t\t\t\tspecial.bindType || type;\n\n\t\t\t\t// jQuery handler\n\t\t\t\thandle = (dataPriv.get(cur, \"events\") || Object.create(null))[event.type] &&\n\t\t\t\t\tdataPriv.get(cur, \"handle\");\n\t\t\t\tif (handle) {\n\t\t\t\t\thandle.apply(cur, data);\n\t\t\t\t}\n\n\t\t\t\t// Native handler\n\t\t\t\thandle = ontype && cur[ontype];\n\t\t\t\tif (handle && handle.apply && acceptData(cur)) {\n\t\t\t\t\tevent.result = handle.apply(cur, data);\n\t\t\t\t\tif (event.result === false) {\n\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tevent.type = type;\n\n\t\t\t// If nobody prevented the default action, do it now\n\t\t\tif (!onlyHandlers && !event.isDefaultPrevented()) {\n\n\t\t\t\tif ((!special._default ||\n\t\t\t\t\tspecial._default.apply(eventPath.pop(), data) === false) &&\n\t\t\t\t\tacceptData(elem)) {\n\n\t\t\t\t\t// Call a native DOM method on the target with the same name as the event.\n\t\t\t\t\t// Don't do default actions on window, that's where global variables be (trac-6170)\n\t\t\t\t\tif (ontype && isFunction(elem[type]) && !isWindow(elem)) {\n\n\t\t\t\t\t\t// Don't re-trigger an onFOO event when we call its FOO() method\n\t\t\t\t\t\ttmp = elem[ontype];\n\n\t\t\t\t\t\tif (tmp) {\n\t\t\t\t\t\t\telem[ontype] = null;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Prevent re-triggering of the same event, since we already bubbled it above\n\t\t\t\t\t\tjQuery.event.triggered = type;\n\n\t\t\t\t\t\tif (event.isPropagationStopped()) {\n\t\t\t\t\t\t\tlastElement.addEventListener(type, stopPropagationCallback);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\telem[type]();\n\n\t\t\t\t\t\tif (event.isPropagationStopped()) {\n\t\t\t\t\t\t\tlastElement.removeEventListener(type, stopPropagationCallback);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tjQuery.event.triggered = undefined;\n\n\t\t\t\t\t\tif (tmp) {\n\t\t\t\t\t\t\telem[ontype] = tmp;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn event.result;\n\t\t},\n\n\t\t// Piggyback on a donor event to simulate a different one\n\t\t// Used only for `focus(in | out)` events\n\t\tsimulate: function (type, elem, event) {\n\t\t\tvar e = jQuery.extend(\n\t\t\t\tnew jQuery.Event(),\n\t\t\t\tevent,\n\t\t\t\t{\n\t\t\t\t\ttype: type,\n\t\t\t\t\tisSimulated: true\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tjQuery.event.trigger(e, null, elem);\n\t\t}\n\n\t});\n\n\tjQuery.fn.extend({\n\n\t\ttrigger: function (type, data) {\n\t\t\treturn this.each(function () {\n\t\t\t\tjQuery.event.trigger(type, data, this);\n\t\t\t});\n\t\t},\n\t\ttriggerHandler: function (type, data) {\n\t\t\tvar elem = this[0];\n\t\t\tif (elem) {\n\t\t\t\treturn jQuery.event.trigger(type, data, elem, true);\n\t\t\t}\n\t\t}\n\t});\n\n\n\tvar\n\t\trbracket = /\\[\\]$/,\n\t\trCRLF = /\\r?\\n/g,\n\t\trsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,\n\t\trsubmittable = /^(?:input|select|textarea|keygen)/i;\n\n\tfunction buildParams(prefix, obj, traditional, add) {\n\t\tvar name;\n\n\t\tif (Array.isArray(obj)) {\n\n\t\t\t// Serialize array item.\n\t\t\tjQuery.each(obj, function (i, v) {\n\t\t\t\tif (traditional || rbracket.test(prefix)) {\n\n\t\t\t\t\t// Treat each array item as a scalar.\n\t\t\t\t\tadd(prefix, v);\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// Item is non-scalar (array or object), encode its numeric index.\n\t\t\t\t\tbuildParams(\n\t\t\t\t\t\tprefix + \"[\" + (typeof v === \"object\" && v != null ? i : \"\") + \"]\",\n\t\t\t\t\t\tv,\n\t\t\t\t\t\ttraditional,\n\t\t\t\t\t\tadd\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t});\n\n\t\t} else if (!traditional && toType(obj) === \"object\") {\n\n\t\t\t// Serialize object item.\n\t\t\tfor (name in obj) {\n\t\t\t\tbuildParams(prefix + \"[\" + name + \"]\", obj[name], traditional, add);\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// Serialize scalar item.\n\t\t\tadd(prefix, obj);\n\t\t}\n\t}\n\n\t// Serialize an array of form elements or a set of\n\t// key/values into a query string\n\tjQuery.param = function (a, traditional) {\n\t\tvar prefix,\n\t\t\ts = [],\n\t\t\tadd = function (key, valueOrFunction) {\n\n\t\t\t\t// If value is a function, invoke it and use its return value\n\t\t\t\tvar value = isFunction(valueOrFunction) ?\n\t\t\t\t\tvalueOrFunction() :\n\t\t\t\t\tvalueOrFunction;\n\n\t\t\t\ts[s.length] = encodeURIComponent(key) + \"=\" +\n\t\t\t\t\tencodeURIComponent(value == null ? \"\" : value);\n\t\t\t};\n\n\t\tif (a == null) {\n\t\t\treturn \"\";\n\t\t}\n\n\t\t// If an array was passed in, assume that it is an array of form elements.\n\t\tif (Array.isArray(a) || (a.jquery && !jQuery.isPlainObject(a))) {\n\n\t\t\t// Serialize the form elements\n\t\t\tjQuery.each(a, function () {\n\t\t\t\tadd(this.name, this.value);\n\t\t\t});\n\n\t\t} else {\n\n\t\t\t// If traditional, encode the \"old\" way (the way 1.3.2 or older\n\t\t\t// did it), otherwise encode params recursively.\n\t\t\tfor (prefix in a) {\n\t\t\t\tbuildParams(prefix, a[prefix], traditional, add);\n\t\t\t}\n\t\t}\n\n\t\t// Return the resulting serialization\n\t\treturn s.join(\"&\");\n\t};\n\n\tjQuery.fn.extend({\n\t\tserialize: function () {\n\t\t\treturn jQuery.param(this.serializeArray());\n\t\t},\n\t\tserializeArray: function () {\n\t\t\treturn this.map(function () {\n\n\t\t\t\t// Can add propHook for \"elements\" to filter or add form elements\n\t\t\t\tvar elements = jQuery.prop(this, \"elements\");\n\t\t\t\treturn elements ? jQuery.makeArray(elements) : this;\n\t\t\t}).filter(function () {\n\t\t\t\tvar type = this.type;\n\n\t\t\t\t// Use .is( \":disabled\" ) so that fieldset[disabled] works\n\t\t\t\treturn this.name && !jQuery(this).is(\":disabled\") &&\n\t\t\t\t\trsubmittable.test(this.nodeName) && !rsubmitterTypes.test(type) &&\n\t\t\t\t\t(this.checked || !rcheckableType.test(type));\n\t\t\t}).map(function (_i, elem) {\n\t\t\t\tvar val = jQuery(this).val();\n\n\t\t\t\tif (val == null) {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\n\t\t\t\tif (Array.isArray(val)) {\n\t\t\t\t\treturn jQuery.map(val, function (val) {\n\t\t\t\t\t\treturn { name: elem.name, value: val.replace(rCRLF, \"\\r\\n\") };\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\treturn { name: elem.name, value: val.replace(rCRLF, \"\\r\\n\") };\n\t\t\t}).get();\n\t\t}\n\t});\n\n\n\tvar\n\t\tr20 = /%20/g,\n\t\trhash = /#.*$/,\n\t\trantiCache = /([?&])_=[^&]*/,\n\t\trheaders = /^(.*?):[ \\t]*([^\\r\\n]*)$/mg,\n\n\t\t// trac-7653, trac-8125, trac-8152: local protocol detection\n\t\trlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,\n\t\trnoContent = /^(?:GET|HEAD)$/,\n\t\trprotocol = /^\\/\\//,\n\n\t\t/* Prefilters\n\t\t * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)\n\t\t * 2) These are called:\n\t\t *    - BEFORE asking for a transport\n\t\t *    - AFTER param serialization (s.data is a string if s.processData is true)\n\t\t * 3) key is the dataType\n\t\t * 4) the catchall symbol \"*\" can be used\n\t\t * 5) execution will start with transport dataType and THEN continue down to \"*\" if needed\n\t\t */\n\t\tprefilters = {},\n\n\t\t/* Transports bindings\n\t\t * 1) key is the dataType\n\t\t * 2) the catchall symbol \"*\" can be used\n\t\t * 3) selection will start with transport dataType and THEN go to \"*\" if needed\n\t\t */\n\t\ttransports = {},\n\n\t\t// Avoid comment-prolog char sequence (trac-10098); must appease lint and evade compression\n\t\tallTypes = \"*/\".concat(\"*\"),\n\n\t\t// Anchor tag for parsing the document origin\n\t\toriginAnchor = document.createElement(\"a\");\n\n\toriginAnchor.href = location.href;\n\n\t// Base \"constructor\" for jQuery.ajaxPrefilter and jQuery.ajaxTransport\n\tfunction addToPrefiltersOrTransports(structure) {\n\n\t\t// dataTypeExpression is optional and defaults to \"*\"\n\t\treturn function (dataTypeExpression, func) {\n\n\t\t\tif (typeof dataTypeExpression !== \"string\") {\n\t\t\t\tfunc = dataTypeExpression;\n\t\t\t\tdataTypeExpression = \"*\";\n\t\t\t}\n\n\t\t\tvar dataType,\n\t\t\t\ti = 0,\n\t\t\t\tdataTypes = dataTypeExpression.toLowerCase().match(rnothtmlwhite) || [];\n\n\t\t\tif (isFunction(func)) {\n\n\t\t\t\t// For each dataType in the dataTypeExpression\n\t\t\t\twhile ((dataType = dataTypes[i++])) {\n\n\t\t\t\t\t// Prepend if requested\n\t\t\t\t\tif (dataType[0] === \"+\") {\n\t\t\t\t\t\tdataType = dataType.slice(1) || \"*\";\n\t\t\t\t\t\t(structure[dataType] = structure[dataType] || []).unshift(func);\n\n\t\t\t\t\t\t// Otherwise append\n\t\t\t\t\t} else {\n\t\t\t\t\t\t(structure[dataType] = structure[dataType] || []).push(func);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n\n\t// Base inspection function for prefilters and transports\n\tfunction inspectPrefiltersOrTransports(structure, options, originalOptions, jqXHR) {\n\n\t\tvar inspected = {},\n\t\t\tseekingTransport = (structure === transports);\n\n\t\tfunction inspect(dataType) {\n\t\t\tvar selected;\n\t\t\tinspected[dataType] = true;\n\t\t\tjQuery.each(structure[dataType] || [], function (_, prefilterOrFactory) {\n\t\t\t\tvar dataTypeOrTransport = prefilterOrFactory(options, originalOptions, jqXHR);\n\t\t\t\tif (typeof dataTypeOrTransport === \"string\" &&\n\t\t\t\t\t!seekingTransport && !inspected[dataTypeOrTransport]) {\n\n\t\t\t\t\toptions.dataTypes.unshift(dataTypeOrTransport);\n\t\t\t\t\tinspect(dataTypeOrTransport);\n\t\t\t\t\treturn false;\n\t\t\t\t} else if (seekingTransport) {\n\t\t\t\t\treturn !(selected = dataTypeOrTransport);\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn selected;\n\t\t}\n\n\t\treturn inspect(options.dataTypes[0]) || !inspected[\"*\"] && inspect(\"*\");\n\t}\n\n\t// A special extend for ajax options\n\t// that takes \"flat\" options (not to be deep extended)\n\t// Fixes trac-9887\n\tfunction ajaxExtend(target, src) {\n\t\tvar key, deep,\n\t\t\tflatOptions = jQuery.ajaxSettings.flatOptions || {};\n\n\t\tfor (key in src) {\n\t\t\tif (src[key] !== undefined) {\n\t\t\t\t(flatOptions[key] ? target : (deep || (deep = {})))[key] = src[key];\n\t\t\t}\n\t\t}\n\t\tif (deep) {\n\t\t\tjQuery.extend(true, target, deep);\n\t\t}\n\n\t\treturn target;\n\t}\n\n\t/* Handles responses to an ajax request:\n\t * - finds the right dataType (mediates between content-type and expected dataType)\n\t * - returns the corresponding response\n\t */\n\tfunction ajaxHandleResponses(s, jqXHR, responses) {\n\n\t\tvar ct, type, finalDataType, firstDataType,\n\t\t\tcontents = s.contents,\n\t\t\tdataTypes = s.dataTypes;\n\n\t\t// Remove auto dataType and get content-type in the process\n\t\twhile (dataTypes[0] === \"*\") {\n\t\t\tdataTypes.shift();\n\t\t\tif (ct === undefined) {\n\t\t\t\tct = s.mimeType || jqXHR.getResponseHeader(\"Content-Type\");\n\t\t\t}\n\t\t}\n\n\t\t// Check if we're dealing with a known content-type\n\t\tif (ct) {\n\t\t\tfor (type in contents) {\n\t\t\t\tif (contents[type] && contents[type].test(ct)) {\n\t\t\t\t\tdataTypes.unshift(type);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Check to see if we have a response for the expected dataType\n\t\tif (dataTypes[0] in responses) {\n\t\t\tfinalDataType = dataTypes[0];\n\t\t} else {\n\n\t\t\t// Try convertible dataTypes\n\t\t\tfor (type in responses) {\n\t\t\t\tif (!dataTypes[0] || s.converters[type + \" \" + dataTypes[0]]) {\n\t\t\t\t\tfinalDataType = type;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (!firstDataType) {\n\t\t\t\t\tfirstDataType = type;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Or just use first one\n\t\t\tfinalDataType = finalDataType || firstDataType;\n\t\t}\n\n\t\t// If we found a dataType\n\t\t// We add the dataType to the list if needed\n\t\t// and return the corresponding response\n\t\tif (finalDataType) {\n\t\t\tif (finalDataType !== dataTypes[0]) {\n\t\t\t\tdataTypes.unshift(finalDataType);\n\t\t\t}\n\t\t\treturn responses[finalDataType];\n\t\t}\n\t}\n\n\t/* Chain conversions given the request and the original response\n\t * Also sets the responseXXX fields on the jqXHR instance\n\t */\n\tfunction ajaxConvert(s, response, jqXHR, isSuccess) {\n\t\tvar conv2, current, conv, tmp, prev,\n\t\t\tconverters = {},\n\n\t\t\t// Work with a copy of dataTypes in case we need to modify it for conversion\n\t\t\tdataTypes = s.dataTypes.slice();\n\n\t\t// Create converters map with lowercased keys\n\t\tif (dataTypes[1]) {\n\t\t\tfor (conv in s.converters) {\n\t\t\t\tconverters[conv.toLowerCase()] = s.converters[conv];\n\t\t\t}\n\t\t}\n\n\t\tcurrent = dataTypes.shift();\n\n\t\t// Convert to each sequential dataType\n\t\twhile (current) {\n\n\t\t\tif (s.responseFields[current]) {\n\t\t\t\tjqXHR[s.responseFields[current]] = response;\n\t\t\t}\n\n\t\t\t// Apply the dataFilter if provided\n\t\t\tif (!prev && isSuccess && s.dataFilter) {\n\t\t\t\tresponse = s.dataFilter(response, s.dataType);\n\t\t\t}\n\n\t\t\tprev = current;\n\t\t\tcurrent = dataTypes.shift();\n\n\t\t\tif (current) {\n\n\t\t\t\t// There's only work to do if current dataType is non-auto\n\t\t\t\tif (current === \"*\") {\n\n\t\t\t\t\tcurrent = prev;\n\n\t\t\t\t\t// Convert response if prev dataType is non-auto and differs from current\n\t\t\t\t} else if (prev !== \"*\" && prev !== current) {\n\n\t\t\t\t\t// Seek a direct converter\n\t\t\t\t\tconv = converters[prev + \" \" + current] || converters[\"* \" + current];\n\n\t\t\t\t\t// If none found, seek a pair\n\t\t\t\t\tif (!conv) {\n\t\t\t\t\t\tfor (conv2 in converters) {\n\n\t\t\t\t\t\t\t// If conv2 outputs current\n\t\t\t\t\t\t\ttmp = conv2.split(\" \");\n\t\t\t\t\t\t\tif (tmp[1] === current) {\n\n\t\t\t\t\t\t\t\t// If prev can be converted to accepted input\n\t\t\t\t\t\t\t\tconv = converters[prev + \" \" + tmp[0]] ||\n\t\t\t\t\t\t\t\t\tconverters[\"* \" + tmp[0]];\n\t\t\t\t\t\t\t\tif (conv) {\n\n\t\t\t\t\t\t\t\t\t// Condense equivalence converters\n\t\t\t\t\t\t\t\t\tif (conv === true) {\n\t\t\t\t\t\t\t\t\t\tconv = converters[conv2];\n\n\t\t\t\t\t\t\t\t\t\t// Otherwise, insert the intermediate dataType\n\t\t\t\t\t\t\t\t\t} else if (converters[conv2] !== true) {\n\t\t\t\t\t\t\t\t\t\tcurrent = tmp[0];\n\t\t\t\t\t\t\t\t\t\tdataTypes.unshift(tmp[1]);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Apply converter (if not an equivalence)\n\t\t\t\t\tif (conv !== true) {\n\n\t\t\t\t\t\t// Unless errors are allowed to bubble, catch and return them\n\t\t\t\t\t\tif (conv && s.throws) {\n\t\t\t\t\t\t\tresponse = conv(response);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\tresponse = conv(response);\n\t\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\tstate: \"parsererror\",\n\t\t\t\t\t\t\t\t\terror: conv ? e : \"No conversion from \" + prev + \" to \" + current\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn { state: \"success\", data: response };\n\t}\n\n\tjQuery.extend({\n\n\t\t// Counter for holding the number of active queries\n\t\tactive: 0,\n\n\t\t// Last-Modified header cache for next request\n\t\tlastModified: {},\n\t\tetag: {},\n\n\t\tajaxSettings: {\n\t\t\turl: location.href,\n\t\t\ttype: \"GET\",\n\t\t\tisLocal: rlocalProtocol.test(location.protocol),\n\t\t\tglobal: true,\n\t\t\tprocessData: true,\n\t\t\tasync: true,\n\t\t\tcontentType: \"application/x-www-form-urlencoded; charset=UTF-8\",\n\n\t\t\t/*\n\t\t\ttimeout: 0,\n\t\t\tdata: null,\n\t\t\tdataType: null,\n\t\t\tusername: null,\n\t\t\tpassword: null,\n\t\t\tcache: null,\n\t\t\tthrows: false,\n\t\t\ttraditional: false,\n\t\t\theaders: {},\n\t\t\t*/\n\n\t\t\taccepts: {\n\t\t\t\t\"*\": allTypes,\n\t\t\t\ttext: \"text/plain\",\n\t\t\t\thtml: \"text/html\",\n\t\t\t\txml: \"application/xml, text/xml\",\n\t\t\t\tjson: \"application/json, text/javascript\"\n\t\t\t},\n\n\t\t\tcontents: {\n\t\t\t\txml: /\\bxml\\b/,\n\t\t\t\thtml: /\\bhtml/,\n\t\t\t\tjson: /\\bjson\\b/\n\t\t\t},\n\n\t\t\tresponseFields: {\n\t\t\t\txml: \"responseXML\",\n\t\t\t\ttext: \"responseText\",\n\t\t\t\tjson: \"responseJSON\"\n\t\t\t},\n\n\t\t\t// Data converters\n\t\t\t// Keys separate source (or catchall \"*\") and destination types with a single space\n\t\t\tconverters: {\n\n\t\t\t\t// Convert anything to text\n\t\t\t\t\"* text\": String,\n\n\t\t\t\t// Text to html (true = no transformation)\n\t\t\t\t\"text html\": true,\n\n\t\t\t\t// Evaluate text as a json expression\n\t\t\t\t\"text json\": JSON.parse,\n\n\t\t\t\t// Parse text as xml\n\t\t\t\t\"text xml\": jQuery.parseXML\n\t\t\t},\n\n\t\t\t// For options that shouldn't be deep extended:\n\t\t\t// you can add your own custom options here if\n\t\t\t// and when you create one that shouldn't be\n\t\t\t// deep extended (see ajaxExtend)\n\t\t\tflatOptions: {\n\t\t\t\turl: true,\n\t\t\t\tcontext: true\n\t\t\t}\n\t\t},\n\n\t\t// Creates a full fledged settings object into target\n\t\t// with both ajaxSettings and settings fields.\n\t\t// If target is omitted, writes into ajaxSettings.\n\t\tajaxSetup: function (target, settings) {\n\t\t\treturn settings ?\n\n\t\t\t\t// Building a settings object\n\t\t\t\tajaxExtend(ajaxExtend(target, jQuery.ajaxSettings), settings) :\n\n\t\t\t\t// Extending ajaxSettings\n\t\t\t\tajaxExtend(jQuery.ajaxSettings, target);\n\t\t},\n\n\t\tajaxPrefilter: addToPrefiltersOrTransports(prefilters),\n\t\tajaxTransport: addToPrefiltersOrTransports(transports),\n\n\t\t// Main method\n\t\tajax: function (url, options) {\n\n\t\t\t// If url is an object, simulate pre-1.5 signature\n\t\t\tif (typeof url === \"object\") {\n\t\t\t\toptions = url;\n\t\t\t\turl = undefined;\n\t\t\t}\n\n\t\t\t// Force options to be an object\n\t\t\toptions = options || {};\n\n\t\t\tvar transport,\n\n\t\t\t\t// URL without anti-cache param\n\t\t\t\tcacheURL,\n\n\t\t\t\t// Response headers\n\t\t\t\tresponseHeadersString,\n\t\t\t\tresponseHeaders,\n\n\t\t\t\t// timeout handle\n\t\t\t\ttimeoutTimer,\n\n\t\t\t\t// Url cleanup var\n\t\t\t\turlAnchor,\n\n\t\t\t\t// Request state (becomes false upon send and true upon completion)\n\t\t\t\tcompleted,\n\n\t\t\t\t// To know if global events are to be dispatched\n\t\t\t\tfireGlobals,\n\n\t\t\t\t// Loop variable\n\t\t\t\ti,\n\n\t\t\t\t// uncached part of the url\n\t\t\t\tuncached,\n\n\t\t\t\t// Create the final options object\n\t\t\t\ts = jQuery.ajaxSetup({}, options),\n\n\t\t\t\t// Callbacks context\n\t\t\t\tcallbackContext = s.context || s,\n\n\t\t\t\t// Context for global events is callbackContext if it is a DOM node or jQuery collection\n\t\t\t\tglobalEventContext = s.context &&\n\t\t\t\t\t(callbackContext.nodeType || callbackContext.jquery) ?\n\t\t\t\t\tjQuery(callbackContext) :\n\t\t\t\t\tjQuery.event,\n\n\t\t\t\t// Deferreds\n\t\t\t\tdeferred = jQuery.Deferred(),\n\t\t\t\tcompleteDeferred = jQuery.Callbacks(\"once memory\"),\n\n\t\t\t\t// Status-dependent callbacks\n\t\t\t\tstatusCode = s.statusCode || {},\n\n\t\t\t\t// Headers (they are sent all at once)\n\t\t\t\trequestHeaders = {},\n\t\t\t\trequestHeadersNames = {},\n\n\t\t\t\t// Default abort message\n\t\t\t\tstrAbort = \"canceled\",\n\n\t\t\t\t// Fake xhr\n\t\t\t\tjqXHR = {\n\t\t\t\t\treadyState: 0,\n\n\t\t\t\t\t// Builds headers hashtable if needed\n\t\t\t\t\tgetResponseHeader: function (key) {\n\t\t\t\t\t\tvar match;\n\t\t\t\t\t\tif (completed) {\n\t\t\t\t\t\t\tif (!responseHeaders) {\n\t\t\t\t\t\t\t\tresponseHeaders = {};\n\t\t\t\t\t\t\t\twhile ((match = rheaders.exec(responseHeadersString))) {\n\t\t\t\t\t\t\t\t\tresponseHeaders[match[1].toLowerCase() + \" \"] =\n\t\t\t\t\t\t\t\t\t\t(responseHeaders[match[1].toLowerCase() + \" \"] || [])\n\t\t\t\t\t\t\t\t\t\t\t.concat(match[2]);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tmatch = responseHeaders[key.toLowerCase() + \" \"];\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn match == null ? null : match.join(\", \");\n\t\t\t\t\t},\n\n\t\t\t\t\t// Raw string\n\t\t\t\t\tgetAllResponseHeaders: function () {\n\t\t\t\t\t\treturn completed ? responseHeadersString : null;\n\t\t\t\t\t},\n\n\t\t\t\t\t// Caches the header\n\t\t\t\t\tsetRequestHeader: function (name, value) {\n\t\t\t\t\t\tif (completed == null) {\n\t\t\t\t\t\t\tname = requestHeadersNames[name.toLowerCase()] =\n\t\t\t\t\t\t\t\trequestHeadersNames[name.toLowerCase()] || name;\n\t\t\t\t\t\t\trequestHeaders[name] = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn this;\n\t\t\t\t\t},\n\n\t\t\t\t\t// Overrides response content-type header\n\t\t\t\t\toverrideMimeType: function (type) {\n\t\t\t\t\t\tif (completed == null) {\n\t\t\t\t\t\t\ts.mimeType = type;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn this;\n\t\t\t\t\t},\n\n\t\t\t\t\t// Status-dependent callbacks\n\t\t\t\t\tstatusCode: function (map) {\n\t\t\t\t\t\tvar code;\n\t\t\t\t\t\tif (map) {\n\t\t\t\t\t\t\tif (completed) {\n\n\t\t\t\t\t\t\t\t// Execute the appropriate callbacks\n\t\t\t\t\t\t\t\tjqXHR.always(map[jqXHR.status]);\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t// Lazy-add the new callbacks in a way that preserves old ones\n\t\t\t\t\t\t\t\tfor (code in map) {\n\t\t\t\t\t\t\t\t\tstatusCode[code] = [statusCode[code], map[code]];\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn this;\n\t\t\t\t\t},\n\n\t\t\t\t\t// Cancel the request\n\t\t\t\t\tabort: function (statusText) {\n\t\t\t\t\t\tvar finalText = statusText || strAbort;\n\t\t\t\t\t\tif (transport) {\n\t\t\t\t\t\t\ttransport.abort(finalText);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdone(0, finalText);\n\t\t\t\t\t\treturn this;\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t// Attach deferreds\n\t\t\tdeferred.promise(jqXHR);\n\n\t\t\t// Add protocol if not provided (prefilters might expect it)\n\t\t\t// Handle falsy url in the settings object (trac-10093: consistency with old signature)\n\t\t\t// We also use the url parameter if available\n\t\t\ts.url = ((url || s.url || location.href) + \"\")\n\t\t\t\t.replace(rprotocol, location.protocol + \"//\");\n\n\t\t\t// Alias method option to type as per ticket trac-12004\n\t\t\ts.type = options.method || options.type || s.method || s.type;\n\n\t\t\t// Extract dataTypes list\n\t\t\ts.dataTypes = (s.dataType || \"*\").toLowerCase().match(rnothtmlwhite) || [\"\"];\n\n\t\t\t// A cross-domain request is in order when the origin doesn't match the current origin.\n\t\t\tif (s.crossDomain == null) {\n\t\t\t\turlAnchor = document.createElement(\"a\");\n\n\t\t\t\t// Support: IE <=8 - 11, Edge 12 - 15\n\t\t\t\t// IE throws exception on accessing the href property if url is malformed,\n\t\t\t\t// e.g. http://example.com:80x/\n\t\t\t\ttry {\n\t\t\t\t\turlAnchor.href = s.url;\n\n\t\t\t\t\t// Support: IE <=8 - 11 only\n\t\t\t\t\t// Anchor's host property isn't correctly set when s.url is relative\n\t\t\t\t\turlAnchor.href = urlAnchor.href;\n\t\t\t\t\ts.crossDomain = originAnchor.protocol + \"//\" + originAnchor.host !==\n\t\t\t\t\t\turlAnchor.protocol + \"//\" + urlAnchor.host;\n\t\t\t\t} catch (e) {\n\n\t\t\t\t\t// If there is an error parsing the URL, assume it is crossDomain,\n\t\t\t\t\t// it can be rejected by the transport if it is invalid\n\t\t\t\t\ts.crossDomain = true;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Convert data if not already a string\n\t\t\tif (s.data && s.processData && typeof s.data !== \"string\") {\n\t\t\t\ts.data = jQuery.param(s.data, s.traditional);\n\t\t\t}\n\n\t\t\t// Apply prefilters\n\t\t\tinspectPrefiltersOrTransports(prefilters, s, options, jqXHR);\n\n\t\t\t// If request was aborted inside a prefilter, stop there\n\t\t\tif (completed) {\n\t\t\t\treturn jqXHR;\n\t\t\t}\n\n\t\t\t// We can fire global events as of now if asked to\n\t\t\t// Don't fire events if jQuery.event is undefined in an AMD-usage scenario (trac-15118)\n\t\t\tfireGlobals = jQuery.event && s.global;\n\n\t\t\t// Watch for a new set of requests\n\t\t\tif (fireGlobals && jQuery.active++ === 0) {\n\t\t\t\tjQuery.event.trigger(\"ajaxStart\");\n\t\t\t}\n\n\t\t\t// Uppercase the type\n\t\t\ts.type = s.type.toUpperCase();\n\n\t\t\t// Determine if request has content\n\t\t\ts.hasContent = !rnoContent.test(s.type);\n\n\t\t\t// Save the URL in case we're toying with the If-Modified-Since\n\t\t\t// and/or If-None-Match header later on\n\t\t\t// Remove hash to simplify url manipulation\n\t\t\tcacheURL = s.url.replace(rhash, \"\");\n\n\t\t\t// More options handling for requests with no content\n\t\t\tif (!s.hasContent) {\n\n\t\t\t\t// Remember the hash so we can put it back\n\t\t\t\tuncached = s.url.slice(cacheURL.length);\n\n\t\t\t\t// If data is available and should be processed, append data to url\n\t\t\t\tif (s.data && (s.processData || typeof s.data === \"string\")) {\n\t\t\t\t\tcacheURL += (rquery.test(cacheURL) ? \"&\" : \"?\") + s.data;\n\n\t\t\t\t\t// trac-9682: remove data so that it's not used in an eventual retry\n\t\t\t\t\tdelete s.data;\n\t\t\t\t}\n\n\t\t\t\t// Add or update anti-cache param if needed\n\t\t\t\tif (s.cache === false) {\n\t\t\t\t\tcacheURL = cacheURL.replace(rantiCache, \"$1\");\n\t\t\t\t\tuncached = (rquery.test(cacheURL) ? \"&\" : \"?\") + \"_=\" + (nonce.guid++) +\n\t\t\t\t\t\tuncached;\n\t\t\t\t}\n\n\t\t\t\t// Put hash and anti-cache on the URL that will be requested (gh-1732)\n\t\t\t\ts.url = cacheURL + uncached;\n\n\t\t\t\t// Change '%20' to '+' if this is encoded form body content (gh-2658)\n\t\t\t} else if (s.data && s.processData &&\n\t\t\t\t(s.contentType || \"\").indexOf(\"application/x-www-form-urlencoded\") === 0) {\n\t\t\t\ts.data = s.data.replace(r20, \"+\");\n\t\t\t}\n\n\t\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\t\tif (s.ifModified) {\n\t\t\t\tif (jQuery.lastModified[cacheURL]) {\n\t\t\t\t\tjqXHR.setRequestHeader(\"If-Modified-Since\", jQuery.lastModified[cacheURL]);\n\t\t\t\t}\n\t\t\t\tif (jQuery.etag[cacheURL]) {\n\t\t\t\t\tjqXHR.setRequestHeader(\"If-None-Match\", jQuery.etag[cacheURL]);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Set the correct header, if data is being sent\n\t\t\tif (s.data && s.hasContent && s.contentType !== false || options.contentType) {\n\t\t\t\tjqXHR.setRequestHeader(\"Content-Type\", s.contentType);\n\t\t\t}\n\n\t\t\t// Set the Accepts header for the server, depending on the dataType\n\t\t\tjqXHR.setRequestHeader(\n\t\t\t\t\"Accept\",\n\t\t\t\ts.dataTypes[0] && s.accepts[s.dataTypes[0]] ?\n\t\t\t\t\ts.accepts[s.dataTypes[0]] +\n\t\t\t\t\t(s.dataTypes[0] !== \"*\" ? \", \" + allTypes + \"; q=0.01\" : \"\") :\n\t\t\t\t\ts.accepts[\"*\"]\n\t\t\t);\n\n\t\t\t// Check for headers option\n\t\t\tfor (i in s.headers) {\n\t\t\t\tjqXHR.setRequestHeader(i, s.headers[i]);\n\t\t\t}\n\n\t\t\t// Allow custom headers/mimetypes and early abort\n\t\t\tif (s.beforeSend &&\n\t\t\t\t(s.beforeSend.call(callbackContext, jqXHR, s) === false || completed)) {\n\n\t\t\t\t// Abort if not done already and return\n\t\t\t\treturn jqXHR.abort();\n\t\t\t}\n\n\t\t\t// Aborting is no longer a cancellation\n\t\t\tstrAbort = \"abort\";\n\n\t\t\t// Install callbacks on deferreds\n\t\t\tcompleteDeferred.add(s.complete);\n\t\t\tjqXHR.done(s.success);\n\t\t\tjqXHR.fail(s.error);\n\n\t\t\t// Get transport\n\t\t\ttransport = inspectPrefiltersOrTransports(transports, s, options, jqXHR);\n\n\t\t\t// If no transport, we auto-abort\n\t\t\tif (!transport) {\n\t\t\t\tdone(-1, \"No Transport\");\n\t\t\t} else {\n\t\t\t\tjqXHR.readyState = 1;\n\n\t\t\t\t// Send global event\n\t\t\t\tif (fireGlobals) {\n\t\t\t\t\tglobalEventContext.trigger(\"ajaxSend\", [jqXHR, s]);\n\t\t\t\t}\n\n\t\t\t\t// If request was aborted inside ajaxSend, stop there\n\t\t\t\tif (completed) {\n\t\t\t\t\treturn jqXHR;\n\t\t\t\t}\n\n\t\t\t\t// Timeout\n\t\t\t\tif (s.async && s.timeout > 0) {\n\t\t\t\t\ttimeoutTimer = window.setTimeout(function () {\n\t\t\t\t\t\tjqXHR.abort(\"timeout\");\n\t\t\t\t\t}, s.timeout);\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tcompleted = false;\n\t\t\t\t\ttransport.send(requestHeaders, done);\n\t\t\t\t} catch (e) {\n\n\t\t\t\t\t// Rethrow post-completion exceptions\n\t\t\t\t\tif (completed) {\n\t\t\t\t\t\tthrow e;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Propagate others as results\n\t\t\t\t\tdone(-1, e);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Callback for when everything is done\n\t\t\tfunction done(status, nativeStatusText, responses, headers) {\n\t\t\t\tvar isSuccess, success, error, response, modified,\n\t\t\t\t\tstatusText = nativeStatusText;\n\n\t\t\t\t// Ignore repeat invocations\n\t\t\t\tif (completed) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tcompleted = true;\n\n\t\t\t\t// Clear timeout if it exists\n\t\t\t\tif (timeoutTimer) {\n\t\t\t\t\twindow.clearTimeout(timeoutTimer);\n\t\t\t\t}\n\n\t\t\t\t// Dereference transport for early garbage collection\n\t\t\t\t// (no matter how long the jqXHR object will be used)\n\t\t\t\ttransport = undefined;\n\n\t\t\t\t// Cache response headers\n\t\t\t\tresponseHeadersString = headers || \"\";\n\n\t\t\t\t// Set readyState\n\t\t\t\tjqXHR.readyState = status > 0 ? 4 : 0;\n\n\t\t\t\t// Determine if successful\n\t\t\t\tisSuccess = status >= 200 && status < 300 || status === 304;\n\n\t\t\t\t// Get response data\n\t\t\t\tif (responses) {\n\t\t\t\t\tresponse = ajaxHandleResponses(s, jqXHR, responses);\n\t\t\t\t}\n\n\t\t\t\t// Use a noop converter for missing script but not if jsonp\n\t\t\t\tif (!isSuccess &&\n\t\t\t\t\tjQuery.inArray(\"script\", s.dataTypes) > -1 &&\n\t\t\t\t\tjQuery.inArray(\"json\", s.dataTypes) < 0) {\n\t\t\t\t\ts.converters[\"text script\"] = function () { };\n\t\t\t\t}\n\n\t\t\t\t// Convert no matter what (that way responseXXX fields are always set)\n\t\t\t\tresponse = ajaxConvert(s, response, jqXHR, isSuccess);\n\n\t\t\t\t// If successful, handle type chaining\n\t\t\t\tif (isSuccess) {\n\n\t\t\t\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\t\t\t\tif (s.ifModified) {\n\t\t\t\t\t\tmodified = jqXHR.getResponseHeader(\"Last-Modified\");\n\t\t\t\t\t\tif (modified) {\n\t\t\t\t\t\t\tjQuery.lastModified[cacheURL] = modified;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmodified = jqXHR.getResponseHeader(\"etag\");\n\t\t\t\t\t\tif (modified) {\n\t\t\t\t\t\t\tjQuery.etag[cacheURL] = modified;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// if no content\n\t\t\t\t\tif (status === 204 || s.type === \"HEAD\") {\n\t\t\t\t\t\tstatusText = \"nocontent\";\n\n\t\t\t\t\t\t// if not modified\n\t\t\t\t\t} else if (status === 304) {\n\t\t\t\t\t\tstatusText = \"notmodified\";\n\n\t\t\t\t\t\t// If we have data, let's convert it\n\t\t\t\t\t} else {\n\t\t\t\t\t\tstatusText = response.state;\n\t\t\t\t\t\tsuccess = response.data;\n\t\t\t\t\t\terror = response.error;\n\t\t\t\t\t\tisSuccess = !error;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\n\t\t\t\t\t// Extract error from statusText and normalize for non-aborts\n\t\t\t\t\terror = statusText;\n\t\t\t\t\tif (status || !statusText) {\n\t\t\t\t\t\tstatusText = \"error\";\n\t\t\t\t\t\tif (status < 0) {\n\t\t\t\t\t\t\tstatus = 0;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Set data for the fake xhr object\n\t\t\t\tjqXHR.status = status;\n\t\t\t\tjqXHR.statusText = (nativeStatusText || statusText) + \"\";\n\n\t\t\t\t// Success/Error\n\t\t\t\tif (isSuccess) {\n\t\t\t\t\tdeferred.resolveWith(callbackContext, [success, statusText, jqXHR]);\n\t\t\t\t} else {\n\t\t\t\t\tdeferred.rejectWith(callbackContext, [jqXHR, statusText, error]);\n\t\t\t\t}\n\n\t\t\t\t// Status-dependent callbacks\n\t\t\t\tjqXHR.statusCode(statusCode);\n\t\t\t\tstatusCode = undefined;\n\n\t\t\t\tif (fireGlobals) {\n\t\t\t\t\tglobalEventContext.trigger(isSuccess ? \"ajaxSuccess\" : \"ajaxError\",\n\t\t\t\t\t\t[jqXHR, s, isSuccess ? success : error]);\n\t\t\t\t}\n\n\t\t\t\t// Complete\n\t\t\t\tcompleteDeferred.fireWith(callbackContext, [jqXHR, statusText]);\n\n\t\t\t\tif (fireGlobals) {\n\t\t\t\t\tglobalEventContext.trigger(\"ajaxComplete\", [jqXHR, s]);\n\n\t\t\t\t\t// Handle the global AJAX counter\n\t\t\t\t\tif (!(--jQuery.active)) {\n\t\t\t\t\t\tjQuery.event.trigger(\"ajaxStop\");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn jqXHR;\n\t\t},\n\n\t\tgetJSON: function (url, data, callback) {\n\t\t\treturn jQuery.get(url, data, callback, \"json\");\n\t\t},\n\n\t\tgetScript: function (url, callback) {\n\t\t\treturn jQuery.get(url, undefined, callback, \"script\");\n\t\t}\n\t});\n\n\tjQuery.each([\"get\", \"post\"], function (_i, method) {\n\t\tjQuery[method] = function (url, data, callback, type) {\n\n\t\t\t// Shift arguments if data argument was omitted\n\t\t\tif (isFunction(data)) {\n\t\t\t\ttype = type || callback;\n\t\t\t\tcallback = data;\n\t\t\t\tdata = undefined;\n\t\t\t}\n\n\t\t\t// The url can be an options object (which then must have .url)\n\t\t\treturn jQuery.ajax(jQuery.extend({\n\t\t\t\turl: url,\n\t\t\t\ttype: method,\n\t\t\t\tdataType: type,\n\t\t\t\tdata: data,\n\t\t\t\tsuccess: callback\n\t\t\t}, jQuery.isPlainObject(url) && url));\n\t\t};\n\t});\n\n\tjQuery.ajaxPrefilter(function (s) {\n\t\tvar i;\n\t\tfor (i in s.headers) {\n\t\t\tif (i.toLowerCase() === \"content-type\") {\n\t\t\t\ts.contentType = s.headers[i] || \"\";\n\t\t\t}\n\t\t}\n\t});\n\n\n\tjQuery._evalUrl = function (url, options, doc) {\n\t\treturn jQuery.ajax({\n\t\t\turl: url,\n\n\t\t\t// Make this explicit, since user can override this through ajaxSetup (trac-11264)\n\t\t\ttype: \"GET\",\n\t\t\tdataType: \"script\",\n\t\t\tcache: true,\n\t\t\tasync: false,\n\t\t\tglobal: false,\n\n\t\t\t// Only evaluate the response if it is successful (gh-4126)\n\t\t\t// dataFilter is not invoked for failure responses, so using it instead\n\t\t\t// of the default converter is kludgy but it works.\n\t\t\tconverters: {\n\t\t\t\t\"text script\": function () { }\n\t\t\t},\n\t\t\tdataFilter: function (response) {\n\t\t\t\tjQuery.globalEval(response, options, doc);\n\t\t\t}\n\t\t});\n\t};\n\n\n\tjQuery.fn.extend({\n\t\twrapAll: function (html) {\n\t\t\tvar wrap;\n\n\t\t\tif (this[0]) {\n\t\t\t\tif (isFunction(html)) {\n\t\t\t\t\thtml = html.call(this[0]);\n\t\t\t\t}\n\n\t\t\t\t// The elements to wrap the target around\n\t\t\t\twrap = jQuery(html, this[0].ownerDocument).eq(0).clone(true);\n\n\t\t\t\tif (this[0].parentNode) {\n\t\t\t\t\twrap.insertBefore(this[0]);\n\t\t\t\t}\n\n\t\t\t\twrap.map(function () {\n\t\t\t\t\tvar elem = this;\n\n\t\t\t\t\twhile (elem.firstElementChild) {\n\t\t\t\t\t\telem = elem.firstElementChild;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn elem;\n\t\t\t\t}).append(this);\n\t\t\t}\n\n\t\t\treturn this;\n\t\t},\n\n\t\twrapInner: function (html) {\n\t\t\tif (isFunction(html)) {\n\t\t\t\treturn this.each(function (i) {\n\t\t\t\t\tjQuery(this).wrapInner(html.call(this, i));\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn this.each(function () {\n\t\t\t\tvar self = jQuery(this),\n\t\t\t\t\tcontents = self.contents();\n\n\t\t\t\tif (contents.length) {\n\t\t\t\t\tcontents.wrapAll(html);\n\n\t\t\t\t} else {\n\t\t\t\t\tself.append(html);\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\twrap: function (html) {\n\t\t\tvar htmlIsFunction = isFunction(html);\n\n\t\t\treturn this.each(function (i) {\n\t\t\t\tjQuery(this).wrapAll(htmlIsFunction ? html.call(this, i) : html);\n\t\t\t});\n\t\t},\n\n\t\tunwrap: function (selector) {\n\t\t\tthis.parent(selector).not(\"body\").each(function () {\n\t\t\t\tjQuery(this).replaceWith(this.childNodes);\n\t\t\t});\n\t\t\treturn this;\n\t\t}\n\t});\n\n\n\tjQuery.expr.pseudos.hidden = function (elem) {\n\t\treturn !jQuery.expr.pseudos.visible(elem);\n\t};\n\tjQuery.expr.pseudos.visible = function (elem) {\n\t\treturn !!(elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length);\n\t};\n\n\n\n\n\tjQuery.ajaxSettings.xhr = function () {\n\t\ttry {\n\t\t\treturn new window.XMLHttpRequest();\n\t\t} catch (e) { }\n\t};\n\n\tvar xhrSuccessStatus = {\n\n\t\t// File protocol always yields status code 0, assume 200\n\t\t0: 200,\n\n\t\t// Support: IE <=9 only\n\t\t// trac-1450: sometimes IE returns 1223 when it should be 204\n\t\t1223: 204\n\t},\n\t\txhrSupported = jQuery.ajaxSettings.xhr();\n\n\tsupport.cors = !!xhrSupported && (\"withCredentials\" in xhrSupported);\n\tsupport.ajax = xhrSupported = !!xhrSupported;\n\n\tjQuery.ajaxTransport(function (options) {\n\t\tvar callback, errorCallback;\n\n\t\t// Cross domain only allowed if supported through XMLHttpRequest\n\t\tif (support.cors || xhrSupported && !options.crossDomain) {\n\t\t\treturn {\n\t\t\t\tsend: function (headers, complete) {\n\t\t\t\t\tvar i,\n\t\t\t\t\t\txhr = options.xhr();\n\n\t\t\t\t\txhr.open(\n\t\t\t\t\t\toptions.type,\n\t\t\t\t\t\toptions.url,\n\t\t\t\t\t\toptions.async,\n\t\t\t\t\t\toptions.username,\n\t\t\t\t\t\toptions.password\n\t\t\t\t\t);\n\n\t\t\t\t\t// Apply custom fields if provided\n\t\t\t\t\tif (options.xhrFields) {\n\t\t\t\t\t\tfor (i in options.xhrFields) {\n\t\t\t\t\t\t\txhr[i] = options.xhrFields[i];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Override mime type if needed\n\t\t\t\t\tif (options.mimeType && xhr.overrideMimeType) {\n\t\t\t\t\t\txhr.overrideMimeType(options.mimeType);\n\t\t\t\t\t}\n\n\t\t\t\t\t// X-Requested-With header\n\t\t\t\t\t// For cross-domain requests, seeing as conditions for a preflight are\n\t\t\t\t\t// akin to a jigsaw puzzle, we simply never set it to be sure.\n\t\t\t\t\t// (it can always be set on a per-request basis or even using ajaxSetup)\n\t\t\t\t\t// For same-domain requests, won't change header if already provided.\n\t\t\t\t\tif (!options.crossDomain && !headers[\"X-Requested-With\"]) {\n\t\t\t\t\t\theaders[\"X-Requested-With\"] = \"XMLHttpRequest\";\n\t\t\t\t\t}\n\n\t\t\t\t\t// Set headers\n\t\t\t\t\tfor (i in headers) {\n\t\t\t\t\t\txhr.setRequestHeader(i, headers[i]);\n\t\t\t\t\t}\n\n\t\t\t\t\t// Callback\n\t\t\t\t\tcallback = function (type) {\n\t\t\t\t\t\treturn function () {\n\t\t\t\t\t\t\tif (callback) {\n\t\t\t\t\t\t\t\tcallback = errorCallback = xhr.onload =\n\t\t\t\t\t\t\t\t\txhr.onerror = xhr.onabort = xhr.ontimeout =\n\t\t\t\t\t\t\t\t\txhr.onreadystatechange = null;\n\n\t\t\t\t\t\t\t\tif (type === \"abort\") {\n\t\t\t\t\t\t\t\t\txhr.abort();\n\t\t\t\t\t\t\t\t} else if (type === \"error\") {\n\n\t\t\t\t\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t\t\t\t\t// On a manual native abort, IE9 throws\n\t\t\t\t\t\t\t\t\t// errors on any property access that is not readyState\n\t\t\t\t\t\t\t\t\tif (typeof xhr.status !== \"number\") {\n\t\t\t\t\t\t\t\t\t\tcomplete(0, \"error\");\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tcomplete(\n\n\t\t\t\t\t\t\t\t\t\t\t// File: protocol always yields status 0; see trac-8605, trac-14207\n\t\t\t\t\t\t\t\t\t\t\txhr.status,\n\t\t\t\t\t\t\t\t\t\t\txhr.statusText\n\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tcomplete(\n\t\t\t\t\t\t\t\t\t\txhrSuccessStatus[xhr.status] || xhr.status,\n\t\t\t\t\t\t\t\t\t\txhr.statusText,\n\n\t\t\t\t\t\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t\t\t\t\t\t// IE9 has no XHR2 but throws on binary (trac-11426)\n\t\t\t\t\t\t\t\t\t\t// For XHR2 non-text, let the caller handle it (gh-2498)\n\t\t\t\t\t\t\t\t\t\t(xhr.responseType || \"text\") !== \"text\" ||\n\t\t\t\t\t\t\t\t\t\t\ttypeof xhr.responseText !== \"string\" ?\n\t\t\t\t\t\t\t\t\t\t\t{ binary: xhr.response } :\n\t\t\t\t\t\t\t\t\t\t\t{ text: xhr.responseText },\n\t\t\t\t\t\t\t\t\t\txhr.getAllResponseHeaders()\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\t\t\t\t\t};\n\n\t\t\t\t\t// Listen to events\n\t\t\t\t\txhr.onload = callback();\n\t\t\t\t\terrorCallback = xhr.onerror = xhr.ontimeout = callback(\"error\");\n\n\t\t\t\t\t// Support: IE 9 only\n\t\t\t\t\t// Use onreadystatechange to replace onabort\n\t\t\t\t\t// to handle uncaught aborts\n\t\t\t\t\tif (xhr.onabort !== undefined) {\n\t\t\t\t\t\txhr.onabort = errorCallback;\n\t\t\t\t\t} else {\n\t\t\t\t\t\txhr.onreadystatechange = function () {\n\n\t\t\t\t\t\t\t// Check readyState before timeout as it changes\n\t\t\t\t\t\t\tif (xhr.readyState === 4) {\n\n\t\t\t\t\t\t\t\t// Allow onerror to be called first,\n\t\t\t\t\t\t\t\t// but that will not handle a native abort\n\t\t\t\t\t\t\t\t// Also, save errorCallback to a variable\n\t\t\t\t\t\t\t\t// as xhr.onerror cannot be accessed\n\t\t\t\t\t\t\t\twindow.setTimeout(function () {\n\t\t\t\t\t\t\t\t\tif (callback) {\n\t\t\t\t\t\t\t\t\t\terrorCallback();\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\t// Create the abort callback\n\t\t\t\t\tcallback = callback(\"abort\");\n\n\t\t\t\t\ttry {\n\n\t\t\t\t\t\t// Do send the request (this may raise an exception)\n\t\t\t\t\t\txhr.send(options.hasContent && options.data || null);\n\t\t\t\t\t} catch (e) {\n\n\t\t\t\t\t\t// trac-14683: Only rethrow if this hasn't been notified as an error yet\n\t\t\t\t\t\tif (callback) {\n\t\t\t\t\t\t\tthrow e;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\t\tabort: function () {\n\t\t\t\t\tif (callback) {\n\t\t\t\t\t\tcallback();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t});\n\n\n\n\n\t// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432)\n\tjQuery.ajaxPrefilter(function (s) {\n\t\tif (s.crossDomain) {\n\t\t\ts.contents.script = false;\n\t\t}\n\t});\n\n\t// Install script dataType\n\tjQuery.ajaxSetup({\n\t\taccepts: {\n\t\t\tscript: \"text/javascript, application/javascript, \" +\n\t\t\t\t\"application/ecmascript, application/x-ecmascript\"\n\t\t},\n\t\tcontents: {\n\t\t\tscript: /\\b(?:java|ecma)script\\b/\n\t\t},\n\t\tconverters: {\n\t\t\t\"text script\": function (text) {\n\t\t\t\tjQuery.globalEval(text);\n\t\t\t\treturn text;\n\t\t\t}\n\t\t}\n\t});\n\n\t// Handle cache's special case and crossDomain\n\tjQuery.ajaxPrefilter(\"script\", function (s) {\n\t\tif (s.cache === undefined) {\n\t\t\ts.cache = false;\n\t\t}\n\t\tif (s.crossDomain) {\n\t\t\ts.type = \"GET\";\n\t\t}\n\t});\n\n\t// Bind script tag hack transport\n\tjQuery.ajaxTransport(\"script\", function (s) {\n\n\t\t// This transport only deals with cross domain or forced-by-attrs requests\n\t\tif (s.crossDomain || s.scriptAttrs) {\n\t\t\tvar script, callback;\n\t\t\treturn {\n\t\t\t\tsend: function (_, complete) {\n\t\t\t\t\tscript = jQuery(\"<script>\")\n\t\t\t\t\t\t.attr(s.scriptAttrs || {})\n\t\t\t\t\t\t.prop({ charset: s.scriptCharset, src: s.url })\n\t\t\t\t\t\t.on(\"load error\", callback = function (evt) {\n\t\t\t\t\t\t\tscript.remove();\n\t\t\t\t\t\t\tcallback = null;\n\t\t\t\t\t\t\tif (evt) {\n\t\t\t\t\t\t\t\tcomplete(evt.type === \"error\" ? 404 : 200, evt.type);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\n\t\t\t\t\t// Use native DOM manipulation to avoid our domManip AJAX trickery\n\t\t\t\t\tdocument.head.appendChild(script[0]);\n\t\t\t\t},\n\t\t\t\tabort: function () {\n\t\t\t\t\tif (callback) {\n\t\t\t\t\t\tcallback();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t});\n\n\n\n\n\tvar oldCallbacks = [],\n\t\trjsonp = /(=)\\?(?=&|$)|\\?\\?/;\n\n\t// Default jsonp settings\n\tjQuery.ajaxSetup({\n\t\tjsonp: \"callback\",\n\t\tjsonpCallback: function () {\n\t\t\tvar callback = oldCallbacks.pop() || (jQuery.expando + \"_\" + (nonce.guid++));\n\t\t\tthis[callback] = true;\n\t\t\treturn callback;\n\t\t}\n\t});\n\n\t// Detect, normalize options and install callbacks for jsonp requests\n\tjQuery.ajaxPrefilter(\"json jsonp\", function (s, originalSettings, jqXHR) {\n\n\t\tvar callbackName, overwritten, responseContainer,\n\t\t\tjsonProp = s.jsonp !== false && (rjsonp.test(s.url) ?\n\t\t\t\t\"url\" :\n\t\t\t\ttypeof s.data === \"string\" &&\n\t\t\t\t(s.contentType || \"\")\n\t\t\t\t\t.indexOf(\"application/x-www-form-urlencoded\") === 0 &&\n\t\t\t\trjsonp.test(s.data) && \"data\"\n\t\t\t);\n\n\t\t// Handle iff the expected data type is \"jsonp\" or we have a parameter to set\n\t\tif (jsonProp || s.dataTypes[0] === \"jsonp\") {\n\n\t\t\t// Get callback name, remembering preexisting value associated with it\n\t\t\tcallbackName = s.jsonpCallback = isFunction(s.jsonpCallback) ?\n\t\t\t\ts.jsonpCallback() :\n\t\t\t\ts.jsonpCallback;\n\n\t\t\t// Insert callback into url or form data\n\t\t\tif (jsonProp) {\n\t\t\t\ts[jsonProp] = s[jsonProp].replace(rjsonp, \"$1\" + callbackName);\n\t\t\t} else if (s.jsonp !== false) {\n\t\t\t\ts.url += (rquery.test(s.url) ? \"&\" : \"?\") + s.jsonp + \"=\" + callbackName;\n\t\t\t}\n\n\t\t\t// Use data converter to retrieve json after script execution\n\t\t\ts.converters[\"script json\"] = function () {\n\t\t\t\tif (!responseContainer) {\n\t\t\t\t\tjQuery.error(callbackName + \" was not called\");\n\t\t\t\t}\n\t\t\t\treturn responseContainer[0];\n\t\t\t};\n\n\t\t\t// Force json dataType\n\t\t\ts.dataTypes[0] = \"json\";\n\n\t\t\t// Install callback\n\t\t\toverwritten = window[callbackName];\n\t\t\twindow[callbackName] = function () {\n\t\t\t\tresponseContainer = arguments;\n\t\t\t};\n\n\t\t\t// Clean-up function (fires after converters)\n\t\t\tjqXHR.always(function () {\n\n\t\t\t\t// If previous value didn't exist - remove it\n\t\t\t\tif (overwritten === undefined) {\n\t\t\t\t\tjQuery(window).removeProp(callbackName);\n\n\t\t\t\t\t// Otherwise restore preexisting value\n\t\t\t\t} else {\n\t\t\t\t\twindow[callbackName] = overwritten;\n\t\t\t\t}\n\n\t\t\t\t// Save back as free\n\t\t\t\tif (s[callbackName]) {\n\n\t\t\t\t\t// Make sure that re-using the options doesn't screw things around\n\t\t\t\t\ts.jsonpCallback = originalSettings.jsonpCallback;\n\n\t\t\t\t\t// Save the callback name for future use\n\t\t\t\t\toldCallbacks.push(callbackName);\n\t\t\t\t}\n\n\t\t\t\t// Call if it was a function and we have a response\n\t\t\t\tif (responseContainer && isFunction(overwritten)) {\n\t\t\t\t\toverwritten(responseContainer[0]);\n\t\t\t\t}\n\n\t\t\t\tresponseContainer = overwritten = undefined;\n\t\t\t});\n\n\t\t\t// Delegate to script\n\t\t\treturn \"script\";\n\t\t}\n\t});\n\n\n\n\n\t// Support: Safari 8 only\n\t// In Safari 8 documents created via document.implementation.createHTMLDocument\n\t// collapse sibling forms: the second one becomes a child of the first one.\n\t// Because of that, this security measure has to be disabled in Safari 8.\n\t// https://bugs.webkit.org/show_bug.cgi?id=137337\n\tsupport.createHTMLDocument = (function () {\n\t\tvar body = document.implementation.createHTMLDocument(\"\").body;\n\t\tbody.innerHTML = \"<form></form><form></form>\";\n\t\treturn body.childNodes.length === 2;\n\t})();\n\n\n\t// Argument \"data\" should be string of html\n\t// context (optional): If specified, the fragment will be created in this context,\n\t// defaults to document\n\t// keepScripts (optional): If true, will include scripts passed in the html string\n\tjQuery.parseHTML = function (data, context, keepScripts) {\n\t\tif (typeof data !== \"string\") {\n\t\t\treturn [];\n\t\t}\n\t\tif (typeof context === \"boolean\") {\n\t\t\tkeepScripts = context;\n\t\t\tcontext = false;\n\t\t}\n\n\t\tvar base, parsed, scripts;\n\n\t\tif (!context) {\n\n\t\t\t// Stop scripts or inline event handlers from being executed immediately\n\t\t\t// by using document.implementation\n\t\t\tif (support.createHTMLDocument) {\n\t\t\t\tcontext = document.implementation.createHTMLDocument(\"\");\n\n\t\t\t\t// Set the base href for the created document\n\t\t\t\t// so any parsed elements with URLs\n\t\t\t\t// are based on the document's URL (gh-2965)\n\t\t\t\tbase = context.createElement(\"base\");\n\t\t\t\tbase.href = document.location.href;\n\t\t\t\tcontext.head.appendChild(base);\n\t\t\t} else {\n\t\t\t\tcontext = document;\n\t\t\t}\n\t\t}\n\n\t\tparsed = rsingleTag.exec(data);\n\t\tscripts = !keepScripts && [];\n\n\t\t// Single tag\n\t\tif (parsed) {\n\t\t\treturn [context.createElement(parsed[1])];\n\t\t}\n\n\t\tparsed = buildFragment([data], context, scripts);\n\n\t\tif (scripts && scripts.length) {\n\t\t\tjQuery(scripts).remove();\n\t\t}\n\n\t\treturn jQuery.merge([], parsed.childNodes);\n\t};\n\n\n\t/**\n\t * Load a url into a page\n\t */\n\tjQuery.fn.load = function (url, params, callback) {\n\t\tvar selector, type, response,\n\t\t\tself = this,\n\t\t\toff = url.indexOf(\" \");\n\n\t\tif (off > -1) {\n\t\t\tselector = stripAndCollapse(url.slice(off));\n\t\t\turl = url.slice(0, off);\n\t\t}\n\n\t\t// If it's a function\n\t\tif (isFunction(params)) {\n\n\t\t\t// We assume that it's the callback\n\t\t\tcallback = params;\n\t\t\tparams = undefined;\n\n\t\t\t// Otherwise, build a param string\n\t\t} else if (params && typeof params === \"object\") {\n\t\t\ttype = \"POST\";\n\t\t}\n\n\t\t// If we have elements to modify, make the request\n\t\tif (self.length > 0) {\n\t\t\tjQuery.ajax({\n\t\t\t\turl: url,\n\n\t\t\t\t// If \"type\" variable is undefined, then \"GET\" method will be used.\n\t\t\t\t// Make value of this field explicit since\n\t\t\t\t// user can override it through ajaxSetup method\n\t\t\t\ttype: type || \"GET\",\n\t\t\t\tdataType: \"html\",\n\t\t\t\tdata: params\n\t\t\t}).done(function (responseText) {\n\n\t\t\t\t// Save response for use in complete callback\n\t\t\t\tresponse = arguments;\n\n\t\t\t\tself.html(selector ?\n\n\t\t\t\t\t// If a selector was specified, locate the right elements in a dummy div\n\t\t\t\t\t// Exclude scripts to avoid IE 'Permission Denied' errors\n\t\t\t\t\tjQuery(\"<div>\").append(jQuery.parseHTML(responseText)).find(selector) :\n\n\t\t\t\t\t// Otherwise use the full result\n\t\t\t\t\tresponseText);\n\n\t\t\t\t// If the request succeeds, this function gets \"data\", \"status\", \"jqXHR\"\n\t\t\t\t// but they are ignored because response was set above.\n\t\t\t\t// If it fails, this function gets \"jqXHR\", \"status\", \"error\"\n\t\t\t}).always(callback && function (jqXHR, status) {\n\t\t\t\tself.each(function () {\n\t\t\t\t\tcallback.apply(this, response || [jqXHR.responseText, status, jqXHR]);\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\n\t\treturn this;\n\t};\n\n\n\n\n\tjQuery.expr.pseudos.animated = function (elem) {\n\t\treturn jQuery.grep(jQuery.timers, function (fn) {\n\t\t\treturn elem === fn.elem;\n\t\t}).length;\n\t};\n\n\n\n\n\tjQuery.offset = {\n\t\tsetOffset: function (elem, options, i) {\n\t\t\tvar curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition,\n\t\t\t\tposition = jQuery.css(elem, \"position\"),\n\t\t\t\tcurElem = jQuery(elem),\n\t\t\t\tprops = {};\n\n\t\t\t// Set position first, in-case top/left are set even on static elem\n\t\t\tif (position === \"static\") {\n\t\t\t\telem.style.position = \"relative\";\n\t\t\t}\n\n\t\t\tcurOffset = curElem.offset();\n\t\t\tcurCSSTop = jQuery.css(elem, \"top\");\n\t\t\tcurCSSLeft = jQuery.css(elem, \"left\");\n\t\t\tcalculatePosition = (position === \"absolute\" || position === \"fixed\") &&\n\t\t\t\t(curCSSTop + curCSSLeft).indexOf(\"auto\") > -1;\n\n\t\t\t// Need to be able to calculate position if either\n\t\t\t// top or left is auto and position is either absolute or fixed\n\t\t\tif (calculatePosition) {\n\t\t\t\tcurPosition = curElem.position();\n\t\t\t\tcurTop = curPosition.top;\n\t\t\t\tcurLeft = curPosition.left;\n\n\t\t\t} else {\n\t\t\t\tcurTop = parseFloat(curCSSTop) || 0;\n\t\t\t\tcurLeft = parseFloat(curCSSLeft) || 0;\n\t\t\t}\n\n\t\t\tif (isFunction(options)) {\n\n\t\t\t\t// Use jQuery.extend here to allow modification of coordinates argument (gh-1848)\n\t\t\t\toptions = options.call(elem, i, jQuery.extend({}, curOffset));\n\t\t\t}\n\n\t\t\tif (options.top != null) {\n\t\t\t\tprops.top = (options.top - curOffset.top) + curTop;\n\t\t\t}\n\t\t\tif (options.left != null) {\n\t\t\t\tprops.left = (options.left - curOffset.left) + curLeft;\n\t\t\t}\n\n\t\t\tif (\"using\" in options) {\n\t\t\t\toptions.using.call(elem, props);\n\n\t\t\t} else {\n\t\t\t\tcurElem.css(props);\n\t\t\t}\n\t\t}\n\t};\n\n\tjQuery.fn.extend({\n\n\t\t// offset() relates an element's border box to the document origin\n\t\toffset: function (options) {\n\n\t\t\t// Preserve chaining for setter\n\t\t\tif (arguments.length) {\n\t\t\t\treturn options === undefined ?\n\t\t\t\t\tthis :\n\t\t\t\t\tthis.each(function (i) {\n\t\t\t\t\t\tjQuery.offset.setOffset(this, options, i);\n\t\t\t\t\t});\n\t\t\t}\n\n\t\t\tvar rect, win,\n\t\t\t\telem = this[0];\n\n\t\t\tif (!elem) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Return zeros for disconnected and hidden (display: none) elements (gh-2310)\n\t\t\t// Support: IE <=11 only\n\t\t\t// Running getBoundingClientRect on a\n\t\t\t// disconnected node in IE throws an error\n\t\t\tif (!elem.getClientRects().length) {\n\t\t\t\treturn { top: 0, left: 0 };\n\t\t\t}\n\n\t\t\t// Get document-relative position by adding viewport scroll to viewport-relative gBCR\n\t\t\trect = elem.getBoundingClientRect();\n\t\t\twin = elem.ownerDocument.defaultView;\n\t\t\treturn {\n\t\t\t\ttop: rect.top + win.pageYOffset,\n\t\t\t\tleft: rect.left + win.pageXOffset\n\t\t\t};\n\t\t},\n\n\t\t// position() relates an element's margin box to its offset parent's padding box\n\t\t// This corresponds to the behavior of CSS absolute positioning\n\t\tposition: function () {\n\t\t\tif (!this[0]) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar offsetParent, offset, doc,\n\t\t\t\telem = this[0],\n\t\t\t\tparentOffset = { top: 0, left: 0 };\n\n\t\t\t// position:fixed elements are offset from the viewport, which itself always has zero offset\n\t\t\tif (jQuery.css(elem, \"position\") === \"fixed\") {\n\n\t\t\t\t// Assume position:fixed implies availability of getBoundingClientRect\n\t\t\t\toffset = elem.getBoundingClientRect();\n\n\t\t\t} else {\n\t\t\t\toffset = this.offset();\n\n\t\t\t\t// Account for the *real* offset parent, which can be the document or its root element\n\t\t\t\t// when a statically positioned element is identified\n\t\t\t\tdoc = elem.ownerDocument;\n\t\t\t\toffsetParent = elem.offsetParent || doc.documentElement;\n\t\t\t\twhile (offsetParent &&\n\t\t\t\t\t(offsetParent === doc.body || offsetParent === doc.documentElement) &&\n\t\t\t\t\tjQuery.css(offsetParent, \"position\") === \"static\") {\n\n\t\t\t\t\toffsetParent = offsetParent.parentNode;\n\t\t\t\t}\n\t\t\t\tif (offsetParent && offsetParent !== elem && offsetParent.nodeType === 1) {\n\n\t\t\t\t\t// Incorporate borders into its offset, since they are outside its content origin\n\t\t\t\t\tparentOffset = jQuery(offsetParent).offset();\n\t\t\t\t\tparentOffset.top += jQuery.css(offsetParent, \"borderTopWidth\", true);\n\t\t\t\t\tparentOffset.left += jQuery.css(offsetParent, \"borderLeftWidth\", true);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Subtract parent offsets and element margins\n\t\t\treturn {\n\t\t\t\ttop: offset.top - parentOffset.top - jQuery.css(elem, \"marginTop\", true),\n\t\t\t\tleft: offset.left - parentOffset.left - jQuery.css(elem, \"marginLeft\", true)\n\t\t\t};\n\t\t},\n\n\t\t// This method will return documentElement in the following cases:\n\t\t// 1) For the element inside the iframe without offsetParent, this method will return\n\t\t//    documentElement of the parent window\n\t\t// 2) For the hidden or detached element\n\t\t// 3) For body or html element, i.e. in case of the html node - it will return itself\n\t\t//\n\t\t// but those exceptions were never presented as a real life use-cases\n\t\t// and might be considered as more preferable results.\n\t\t//\n\t\t// This logic, however, is not guaranteed and can change at any point in the future\n\t\toffsetParent: function () {\n\t\t\treturn this.map(function () {\n\t\t\t\tvar offsetParent = this.offsetParent;\n\n\t\t\t\twhile (offsetParent && jQuery.css(offsetParent, \"position\") === \"static\") {\n\t\t\t\t\toffsetParent = offsetParent.offsetParent;\n\t\t\t\t}\n\n\t\t\t\treturn offsetParent || documentElement;\n\t\t\t});\n\t\t}\n\t});\n\n\t// Create scrollLeft and scrollTop methods\n\tjQuery.each({ scrollLeft: \"pageXOffset\", scrollTop: \"pageYOffset\" }, function (method, prop) {\n\t\tvar top = \"pageYOffset\" === prop;\n\n\t\tjQuery.fn[method] = function (val) {\n\t\t\treturn access(this, function (elem, method, val) {\n\n\t\t\t\t// Coalesce documents and windows\n\t\t\t\tvar win;\n\t\t\t\tif (isWindow(elem)) {\n\t\t\t\t\twin = elem;\n\t\t\t\t} else if (elem.nodeType === 9) {\n\t\t\t\t\twin = elem.defaultView;\n\t\t\t\t}\n\n\t\t\t\tif (val === undefined) {\n\t\t\t\t\treturn win ? win[prop] : elem[method];\n\t\t\t\t}\n\n\t\t\t\tif (win) {\n\t\t\t\t\twin.scrollTo(\n\t\t\t\t\t\t!top ? val : win.pageXOffset,\n\t\t\t\t\t\ttop ? val : win.pageYOffset\n\t\t\t\t\t);\n\n\t\t\t\t} else {\n\t\t\t\t\telem[method] = val;\n\t\t\t\t}\n\t\t\t}, method, val, arguments.length);\n\t\t};\n\t});\n\n\t// Support: Safari <=7 - 9.1, Chrome <=37 - 49\n\t// Add the top/left cssHooks using jQuery.fn.position\n\t// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084\n\t// Blink bug: https://bugs.chromium.org/p/chromium/issues/detail?id=589347\n\t// getComputedStyle returns percent when specified for top/left/bottom/right;\n\t// rather than make the css module depend on the offset module, just check for it here\n\tjQuery.each([\"top\", \"left\"], function (_i, prop) {\n\t\tjQuery.cssHooks[prop] = addGetHookIf(support.pixelPosition,\n\t\t\tfunction (elem, computed) {\n\t\t\t\tif (computed) {\n\t\t\t\t\tcomputed = curCSS(elem, prop);\n\n\t\t\t\t\t// If curCSS returns percentage, fallback to offset\n\t\t\t\t\treturn rnumnonpx.test(computed) ?\n\t\t\t\t\t\tjQuery(elem).position()[prop] + \"px\" :\n\t\t\t\t\t\tcomputed;\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\t});\n\n\n\t// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods\n\tjQuery.each({ Height: \"height\", Width: \"width\" }, function (name, type) {\n\t\tjQuery.each({\n\t\t\tpadding: \"inner\" + name,\n\t\t\tcontent: type,\n\t\t\t\"\": \"outer\" + name\n\t\t}, function (defaultExtra, funcName) {\n\n\t\t\t// Margin is only for outerHeight, outerWidth\n\t\t\tjQuery.fn[funcName] = function (margin, value) {\n\t\t\t\tvar chainable = arguments.length && (defaultExtra || typeof margin !== \"boolean\"),\n\t\t\t\t\textra = defaultExtra || (margin === true || value === true ? \"margin\" : \"border\");\n\n\t\t\t\treturn access(this, function (elem, type, value) {\n\t\t\t\t\tvar doc;\n\n\t\t\t\t\tif (isWindow(elem)) {\n\n\t\t\t\t\t\t// $( window ).outerWidth/Height return w/h including scrollbars (gh-1729)\n\t\t\t\t\t\treturn funcName.indexOf(\"outer\") === 0 ?\n\t\t\t\t\t\t\telem[\"inner\" + name] :\n\t\t\t\t\t\t\telem.document.documentElement[\"client\" + name];\n\t\t\t\t\t}\n\n\t\t\t\t\t// Get document width or height\n\t\t\t\t\tif (elem.nodeType === 9) {\n\t\t\t\t\t\tdoc = elem.documentElement;\n\n\t\t\t\t\t\t// Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height],\n\t\t\t\t\t\t// whichever is greatest\n\t\t\t\t\t\treturn Math.max(\n\t\t\t\t\t\t\telem.body[\"scroll\" + name], doc[\"scroll\" + name],\n\t\t\t\t\t\t\telem.body[\"offset\" + name], doc[\"offset\" + name],\n\t\t\t\t\t\t\tdoc[\"client\" + name]\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\n\t\t\t\t\treturn value === undefined ?\n\n\t\t\t\t\t\t// Get width or height on the element, requesting but not forcing parseFloat\n\t\t\t\t\t\tjQuery.css(elem, type, extra) :\n\n\t\t\t\t\t\t// Set width or height on the element\n\t\t\t\t\t\tjQuery.style(elem, type, value, extra);\n\t\t\t\t}, type, chainable ? margin : undefined, chainable);\n\t\t\t};\n\t\t});\n\t});\n\n\n\tjQuery.each([\n\t\t\"ajaxStart\",\n\t\t\"ajaxStop\",\n\t\t\"ajaxComplete\",\n\t\t\"ajaxError\",\n\t\t\"ajaxSuccess\",\n\t\t\"ajaxSend\"\n\t], function (_i, type) {\n\t\tjQuery.fn[type] = function (fn) {\n\t\t\treturn this.on(type, fn);\n\t\t};\n\t});\n\n\n\n\n\tjQuery.fn.extend({\n\n\t\tbind: function (types, data, fn) {\n\t\t\treturn this.on(types, null, data, fn);\n\t\t},\n\t\tunbind: function (types, fn) {\n\t\t\treturn this.off(types, null, fn);\n\t\t},\n\n\t\tdelegate: function (selector, types, data, fn) {\n\t\t\treturn this.on(types, selector, data, fn);\n\t\t},\n\t\tundelegate: function (selector, types, fn) {\n\n\t\t\t// ( namespace ) or ( selector, types [, fn] )\n\t\t\treturn arguments.length === 1 ?\n\t\t\t\tthis.off(selector, \"**\") :\n\t\t\t\tthis.off(types, selector || \"**\", fn);\n\t\t},\n\n\t\thover: function (fnOver, fnOut) {\n\t\t\treturn this.mouseenter(fnOver).mouseleave(fnOut || fnOver);\n\t\t}\n\t});\n\n\tjQuery.each(\n\t\t(\"blur focus focusin focusout resize scroll click dblclick \" +\n\t\t\t\"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave \" +\n\t\t\t\"change select submit keydown keypress keyup contextmenu\").split(\" \"),\n\t\tfunction (_i, name) {\n\n\t\t\t// Handle event binding\n\t\t\tjQuery.fn[name] = function (data, fn) {\n\t\t\t\treturn arguments.length > 0 ?\n\t\t\t\t\tthis.on(name, null, data, fn) :\n\t\t\t\t\tthis.trigger(name);\n\t\t\t};\n\t\t}\n\t);\n\n\n\n\n\t// Support: Android <=4.0 only\n\t// Make sure we trim BOM and NBSP\n\t// Require that the \"whitespace run\" starts from a non-whitespace\n\t// to avoid O(N^2) behavior when the engine would try matching \"\\s+$\" at each space position.\n\tvar rtrim = /^[\\s\\uFEFF\\xA0]+|([^\\s\\uFEFF\\xA0])[\\s\\uFEFF\\xA0]+$/g;\n\n\t// Bind a function to a context, optionally partially applying any\n\t// arguments.\n\t// jQuery.proxy is deprecated to promote standards (specifically Function#bind)\n\t// However, it is not slated for removal any time soon\n\tjQuery.proxy = function (fn, context) {\n\t\tvar tmp, args, proxy;\n\n\t\tif (typeof context === \"string\") {\n\t\t\ttmp = fn[context];\n\t\t\tcontext = fn;\n\t\t\tfn = tmp;\n\t\t}\n\n\t\t// Quick check to determine if target is callable, in the spec\n\t\t// this throws a TypeError, but we will just return undefined.\n\t\tif (!isFunction(fn)) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\t// Simulated bind\n\t\targs = slice.call(arguments, 2);\n\t\tproxy = function () {\n\t\t\treturn fn.apply(context || this, args.concat(slice.call(arguments)));\n\t\t};\n\n\t\t// Set the guid of unique handler to the same of original handler, so it can be removed\n\t\tproxy.guid = fn.guid = fn.guid || jQuery.guid++;\n\n\t\treturn proxy;\n\t};\n\n\tjQuery.holdReady = function (hold) {\n\t\tif (hold) {\n\t\t\tjQuery.readyWait++;\n\t\t} else {\n\t\t\tjQuery.ready(true);\n\t\t}\n\t};\n\tjQuery.isArray = Array.isArray;\n\tjQuery.parseJSON = JSON.parse;\n\tjQuery.nodeName = nodeName;\n\tjQuery.isFunction = isFunction;\n\tjQuery.isWindow = isWindow;\n\tjQuery.camelCase = camelCase;\n\tjQuery.type = toType;\n\n\tjQuery.now = Date.now;\n\n\tjQuery.isNumeric = function (obj) {\n\n\t\t// As of jQuery 3.0, isNumeric is limited to\n\t\t// strings and numbers (primitives or objects)\n\t\t// that can be coerced to finite numbers (gh-2662)\n\t\tvar type = jQuery.type(obj);\n\t\treturn (type === \"number\" || type === \"string\") &&\n\n\t\t\t// parseFloat NaNs numeric-cast false positives (\"\")\n\t\t\t// ...but misinterprets leading-number strings, particularly hex literals (\"0x...\")\n\t\t\t// subtraction forces infinities to NaN\n\t\t\t!isNaN(obj - parseFloat(obj));\n\t};\n\n\tjQuery.trim = function (text) {\n\t\treturn text == null ?\n\t\t\t\"\" :\n\t\t\t(text + \"\").replace(rtrim, \"$1\");\n\t};\n\n\n\n\t// Register as a named AMD module, since jQuery can be concatenated with other\n\t// files that may use define, but not via a proper concatenation script that\n\t// understands anonymous AMD modules. A named AMD is safest and most robust\n\t// way to register. Lowercase jquery is used because AMD module names are\n\t// derived from file names, and jQuery is normally delivered in a lowercase\n\t// file name. Do this after creating the global so that if an AMD module wants\n\t// to call noConflict to hide this version of jQuery, it will work.\n\n\t// Note that for maximum portability, libraries that are not jQuery should\n\t// declare themselves as anonymous modules, and avoid setting a global if an\n\t// AMD loader is present. jQuery is a special case. For more information, see\n\t// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon\n\n\tif (typeof define === \"function\" && define.amd) {\n\t\tdefine(\"jquery\", [], function () {\n\t\t\treturn jQuery;\n\t\t});\n\t}\n\n\n\n\n\tvar\n\n\t\t// Map over jQuery in case of overwrite\n\t\t_jQuery = window.jQuery,\n\n\t\t// Map over the $ in case of overwrite\n\t\t_$ = window.$;\n\n\tjQuery.noConflict = function (deep) {\n\t\tif (window.$ === jQuery) {\n\t\t\twindow.$ = _$;\n\t\t}\n\n\t\tif (deep && window.jQuery === jQuery) {\n\t\t\twindow.jQuery = _jQuery;\n\t\t}\n\n\t\treturn jQuery;\n\t};\n\n\t// Expose jQuery and $ identifiers, even in AMD\n\t// (trac-7102#comment:10, https://github.com/jquery/jquery/pull/557)\n\t// and CommonJS for browser emulators (trac-13566)\n\tif (typeof noGlobal === \"undefined\") {\n\t\twindow.jQuery = window.$ = jQuery;\n\t}\n\n\n\n\n\treturn jQuery;\n});"
  },
  {
    "path": "src/sourceDev.WebApp/SharedThemes/yeti/Shared/_Layout.cshtml",
    "content": "﻿@inject ISiteContextResolver siteResolver\n@inject ICoreThemeHelper themeHelper\n@{\n    var themeSettings = themeHelper.GetThemeSettings();\n    @*\n        These settings can be set by a main view to show additional columns.\n        Views that push content into the optional sections SideNav, AsidePrimary, and AsideSecondary\n        are obligated to set the needed viewtate property to true to show the section,\n        otherwise an error will occur.\n        The sideNav column also supports a toggle so it can be hidden and toggled visible even though it renders.\n    *@\n    bool sideNavVisible = true.Equals(ViewData[\"SideNavVisible\"]);\n    string sideNavToggleClass = ViewData[\"SideNavToggle\"]?.ToString() ?? \"collapse\";\n    bool asidePrimaryVisible = true.Equals(ViewData[\"AsidePrimaryVisible\"]);\n    bool asideSecondaryVisible = true.Equals(ViewData[\"AsideSecondaryVisible\"]);\n    var Tenant = await siteResolver.ResolveSite(Context.Request.Host.Host, Context.Request.Path);\n    var siteRoot = \"\";\n    if (!string.IsNullOrWhiteSpace(Tenant.SiteFolderName)) { siteRoot = \"/\" + Tenant.SiteFolderName; }\n    \n}\n<!DOCTYPE html>\n<html lang=\"@CultureInfo.CurrentUICulture.Name\">\n<head>\n    <meta charset=\"utf-8\" />\n    <title>@ViewData[\"Title\"] - @(Tenant?.SiteName ?? \"Sample\")</title>\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1, shrink-to-fit=no\">\n    @RenderSection(\"Meta\", required: false)\n    <environment names=\"Development\">\n        <link rel=\"stylesheet\" href=\"~/css/bootstrap.css\" cs-resolve-theme-resource=\"true\" cs-shared-theme=\"true\" cs-tenant=\"@Tenant\" />\n        <link rel=\"stylesheet\" href=\"~/css/fontawesome-all.min.css\" cs-resolve-theme-resource=\"true\" cs-shared-theme=\"true\" cs-tenant=\"@Tenant\" />\n        <link rel=\"stylesheet\" href=\"~/css/site.css\" cs-resolve-theme-resource=\"true\" cs-shared-theme=\"true\" cs-tenant=\"@Tenant\" asp-append-version=\"true\" />\n    </environment>\n    <environment names=\"Staging,Production\">\n        <link rel=\"stylesheet\" href=\"~/css/bootstrap.min.css\" cs-resolve-theme-resource=\"true\" cs-shared-theme=\"true\" cs-tenant=\"@Tenant\" />\n        <link rel=\"stylesheet\" href=\"~/css/fontawesome-all.min.css\" cs-resolve-theme-resource=\"true\" cs-shared-theme=\"true\" cs-tenant=\"@Tenant\" />\n        <link rel=\"stylesheet\" href=\"~/css/site.min.css\" cs-resolve-theme-resource=\"true\" cs-shared-theme=\"true\" cs-tenant=\"@Tenant\" asp-append-version=\"true\" />\n    </environment>\n    @RenderSection(\"Styles\", required: false)    \n    \n    <google-analytics profile-id=\"@Tenant.GoogleAnalyticsProfileId\" user-id=\"@User.GetUserId()\"></google-analytics>\n    <base href=\"@Context.Request.Path\" />\n</head>\n<body class=\"d-flex flex-column @ViewData[\"BodyClass\"]\">\n    <header class=\"bg-white\">\n        <a id=\"skippy\" class=\"visually-hidden visually-hidden-focusable\" href=\"#content\">\n            <div class=\"container\">\n                <span class=\"skiplink-text\">Skip to main content</span>\n            </div>\n        </a>\n        <div class=\"fixed-top container-fluid brand-header bg-white border\">\n            <div class=\"d-flex align-items-center bg-white\">\n                @if (!string.IsNullOrWhiteSpace(Tenant.LogoUrl))\n                {\n                    <div>\n                         <partial name=\"SiteLogoPartial\" model=\"@Tenant\" />\n                    </div>\n                }\n                @if (Tenant.ShowSiteNameLink)\n                {\n                    <div class=\"align-self-center pt-4 pt-sm-0\">\n                         <partial name=\"SiteTitlePartial\" model=\"@Tenant\" />\n                    </div>\n                }\n                @if (!string.IsNullOrWhiteSpace(Tenant.HeaderContent))\n                {\n                    <div class=\"flex-fill align-self-center pt-3 d-none d-md-block\">\n                        <partial name=\"SiteHeaderPartial\" />\n                    </div>\n                }\n            </div>\n        </div>\n        <nav class=\"navbar navbar-expand-md navbar-dark fixed-top bg-dark pt-0 pb-0\">\n            <button class=\"navbar-toggler\" type=\"button\" data-bs-toggle=\"collapse\" data-bs-target=\"#navbarNavDropdown\" aria-controls=\"navbarNavDropdown\" aria-expanded=\"false\" aria-label=\"Toggle navigation\">\n                <span class=\"navbar-toggler-icon\"></span>\n            </button>\n\n            <div class=\"collapse navbar-collapse bg-dark ps-2\" id=\"navbarNavDropdown\">\n                @await Component.InvokeAsync(\"Navigation\", new { viewName = \"Bootstrap5TopNavWithDropdowns\", filterName = NamedNavigationFilters.TopNav, startingNodeKey = \"\" })\n                <partial name=\"_LoginPartialWithDropdowns\" />\n            </div>\n        </nav>\n    </header>\n    <div id=\"wrapper\" class=\"container-fluid cs-container flex-fill\">\n        @await Component.InvokeAsync(\"Navigation\", new { viewName = \"Bootstrap5Breadcrumbs\", filterName = NamedNavigationFilters.Breadcrumbs, startingNodeKey = \"\" })\n        <div class=\"row\">\n            <main id=\"content\" class=\"col order-3\">\n                <partial name=\"AlertsPartial\" />\n                <partial name=\"_CookieConsentPartial\" />\n                <partial name=\"_AutoLogoutWarningPartial\" />\n                @RenderBody()\n            </main>\n            @if (sideNavVisible)\n            {\n                <nav id=\"sidenavmenu\" class=\" col col-3 order-1 @sideNavToggleClass\">\n                    @RenderSection(\"SideNav\", required: false)\n                </nav>\n\n            }\n            @if (asideSecondaryVisible)\n            {\n                <aside id=\"asideSecondary\" class=\"col col-1 order-2\">\n                    @RenderSection(\"AsideSecondary\", required: false)\n                </aside>\n\n            }\n            @if (asidePrimaryVisible)\n            {\n                <aside id=\"asidePrimary\" class=\"col-12 col-md-3 col-sm-12  col-sm-12 order-4\">\n                    @RenderSection(\"AsidePrimary\", required: false)\n                </aside>\n\n            }\n        </div>\n    </div>\n    <footer class=\"sticky-bottom border pt-2  h-100\">\n        <div class=\"w-100 text-center\">\n            <partial name=\"SiteFooterPartial\" />\n        </div>\n        <div class=\"d-flex flex-wrap flex-grow justify-content-center\">\n            <div class=\"p-2\">\n            <ul class=\"list-unstyled d-flex flex-wrap\">\n                @if (Tenant != null && !string.IsNullOrWhiteSpace(Tenant.PrivacyPolicy))\n                {\n                    <li class=\"border-left ps-2 me-2\">\n                        <a asp-controller=\"Privacy\" asp-action=\"Index\">Privacy Policy</a>\n                    </li>\n                }\n                <li class=\"border-left ps-2 me-2\">\n                    @* you are free to remove the powered by cloudscribe link but we appreciate it if you choose to keep it! *@\n                    <a class=\"text-nowrap\" target=\"_blank\" href=\"https://www.cloudscribe.com/?utm_source=@Context.Request.Host.Value&amp;utm_medium=referral&amp;utm_campaign=poweredbycloudscribe\">Powered by cloudscribe</a>\n                </li>\n            </ul>\n        </div>\n        <div class=\"ps-sm-2  text-center w-100\"><span class=\"text-nowrap\">Copyright &copy; @DateTime.Now.Year</span><span class=\"d-none d-sm-inline\"> - </span><span> @(Tenant?.SiteName ?? \"Sample\")</span></div>\n        <partial name=\"_CookieConsentRevokePartial\" />\n        </div>   \n    </footer>\n    @RenderSection(\"Toolbar\", required: false)\n    <environment names=\"Development\">\n        <script src=\"~/js/jquery.js\" cs-resolve-theme-resource=\"true\" cs-shared-theme=\"true\" cs-tenant=\"@Tenant\"></script>\n        <script src=\"~/js/bootstrap.bundle.js\" cs-resolve-theme-resource=\"true\" cs-shared-theme=\"true\" cs-tenant=\"@Tenant\"></script>\n        <script src=\"~/cr/js/bs4.smartmenus.min.js\"></script>\n    </environment>\n    <environment names=\"Staging,Production\">\n        <script src=\"~/js/jquery.min.js\" cs-resolve-theme-resource=\"true\" cs-shared-theme=\"true\" cs-tenant=\"@Tenant\"></script>\n        <script src=\"~/js/bootstrap.bundle.min.js\" cs-resolve-theme-resource=\"true\" cs-shared-theme=\"true\" cs-tenant=\"@Tenant\"></script>\n        <script src=\"~/cr/js/bs4.smartmenus.min.js\"></script>\n    </environment>\n    @RenderSection(\"Bottom\", required: false)\n    @RenderSection(\"Scripts\", required: false)     \n    @Html.RenderResources(\"js\") @*render any js resources declared via helpers in partial views etc*@\n    <add-this profile-id=\"@Tenant.AddThisDotComUsername\" async></add-this>\n</body>\n</html>\n"
  },
  {
    "path": "src/sourceDev.WebApp/SharedThemes/yeti/wwwroot/css/_bootswatch.scss",
    "content": "// Yeti 5.1.3\n// Bootswatch\n\n\n// Variables\n\n$web-font-path: \"https://fonts.googleapis.com/css2?family=Open+Sans:ital,wght@0,300;0,400;0,700;1,300;1,400;1,700&display=swap\" !default;\n@if $web-font-path {\n  @import url($web-font-path);\n}\n\n// Navbar\n\n.navbar {\n  font-weight: $headings-font-weight;\n}\n\n.bg-primary {\n  .dropdown-menu {\n    background-color: $primary;\n\n    .dropdown-item,\n    .dropdown-item:focus {\n      color: $navbar-dark-color;\n    }\n\n    .dropdown-item.active,\n    .dropdown-item:hover,\n    .dropdown-item:focus {\n      background-color: shade-color($primary, 10%);\n      color: $white;\n    }\n  }\n}\n\n.bg-dark {\n  background-color: $gray-800 !important;\n\n  .dropdown-menu {\n    background-color: $gray-800;\n\n    .dropdown-item,\n    .dropdown-item:focus {\n      color: $navbar-dark-color;\n    }\n\n    .dropdown-item.active,\n    .dropdown-item:hover,\n    .dropdown-item:focus  {\n      background-color: shade-color($gray-800, 10%);\n      color: $white;\n    }\n  }\n}\n\n.bg-light {\n  .dropdown-menu {\n    background-color: $gray-200;\n\n    .dropdown-item,\n    .dropdown-item:focus {\n      color: $navbar-light-color;\n    }\n\n    .dropdown-item.active,\n    .dropdown-item:hover,\n    .dropdown-item:focus  {\n      background-color: tint-color($gray-200, 10%);\n      color: $navbar-light-hover-color;\n    }\n  }\n}\n\n// Buttons\n\n.btn {\n  &-primary {\n    border-color: shade-color($primary, 10%);\n  }\n\n  &-secondary {\n    border-color: shade-color($secondary, 10%);\n  }\n\n  &-success {\n    border-color: shade-color($success, 10%);\n  }\n\n  &-info {\n    border-color: shade-color($info, 10%);\n    color: $white;\n  }\n\n  &-danger {\n    border-color: shade-color($danger, 10%);\n  }\n\n  &-warning {\n    border-color: shade-color($warning, 10%);\n    color: $white;\n  }\n\n  &-light {\n    border-color: shade-color($light, 10%);\n  }\n\n  &-dark {\n    border-color: shade-color($dark, 10%);\n  }\n}\n\n.btn-group {\n  .dropdown-menu {\n    border-top-width: 0;\n  }\n\n  .dropdown-toggle {\n    &.btn-primary ~ .dropdown-menu {\n      background-color: $primary;\n      border-color: shade-color($primary, 10%);\n\n      .dropdown-item {\n        color: $white;\n      }\n\n      .dropdown-item:hover,\n      .dropdown-item:focus {\n        background-color: shade-color($primary, 16%);\n      }\n    }\n\n    &.btn-secondary ~ .dropdown-menu {\n      background-color: $secondary;\n      border-color: shade-color($secondary, 10%);\n\n      .dropdown-item {\n        color: $body-color;\n      }\n\n      .dropdown-item:hover,\n      .dropdown-item:focus {\n        background-color: shade-color($secondary, 16%);\n      }\n    }\n\n    &.btn-success ~ .dropdown-menu {\n      background-color: $success;\n      border-color: shade-color($success, 10%);\n\n      .dropdown-item {\n        color: $white;\n      }\n\n      .dropdown-item:hover,\n      .dropdown-item:focus {\n        background-color: shade-color($success, 16%);\n      }\n    }\n\n    &.btn-info ~ .dropdown-menu {\n      background-color: $info;\n      border-color: shade-color($info, 10%);\n\n      .dropdown-item {\n        color: $white;\n      }\n\n      .dropdown-item:hover,\n      .dropdown-item:focus {\n        background-color: shade-color($info, 16%);\n      }\n    }\n\n    &.btn-warning ~ .dropdown-menu {\n      background-color: $warning;\n      border-color: shade-color($warning, 10%);\n\n      .dropdown-item {\n        color: $white;\n      }\n\n      .dropdown-item:hover,\n      .dropdown-item:focus {\n        background-color: shade-color($warning, 16%);\n      }\n    }\n\n    &.btn-danger ~ .dropdown-menu {\n      background-color: $danger;\n      border-color: shade-color($danger, 10%);\n\n      .dropdown-item {\n        color: $white;\n      }\n\n      .dropdown-item:hover,\n      .dropdown-item:focus {\n        background-color: shade-color($danger, 16%);\n      }\n    }\n  }\n}\n\n// Typography\n\n.text-secondary {\n  color: $gray-700 !important;\n}\n\n.blockquote-footer {\n  color: $gray-600;\n}\n\n// Tables\n\ntable {\n  font-size: $font-size-sm;\n}\n\n// Forms\n\nlabel,\n.control-label,\n.help-block,\n.checkbox,\n.radio,\n.form-control-feedback {\n  font-size: $font-size-sm;\n}\n\n// Navs\n\n.dropdown-item {\n  padding-top: .75rem;\n  padding-bottom: .75rem;\n  font-size: $font-size-sm;\n  font-weight: 300;\n}\n\n.nav-tabs {\n  .nav-link,\n  .nav-link.disabled,\n  .nav-link.disabled:hover,\n  .nav-link.disabled:focus {\n    border-color: $nav-tabs-border-color;\n    background-color: $gray-200;\n  }\n\n  .nav-link:hover,\n  .nav-link:focus {\n    background-color: tint-color($gray-200, 10%);\n  }\n}\n\n.nav-pills {\n  .active {\n    border: 1px solid shade-color($primary, 10%);\n  }\n}\n\n.breadcrumb {\n  border: 1px solid $dropdown-border-color;\n  font-size: $font-size-sm;\n  font-weight: 300;\n  text-transform: uppercase;\n}\n\n.pagination {\n  font-weight: 300;\n\n  .page-link {\n    border-color: transparent;\n    border-radius: 3px;\n    margin-left: .1em;\n    margin-right: .1em;\n\n    &:hover,\n    &:focus {\n      text-decoration: none;\n    }\n  }\n\n  .page-item.disabled {\n    .page-link {\n      border-color: transparent;\n    }\n  }\n}\n\n.pagination,\n.pagination-lg,\n.pagination-sm {\n  .page-item:first-child,\n  .page-item:last-child {\n    .page-link {\n      border-radius: 3px;\n    }\n  }\n}\n\n.list-group {\n  font-size: $font-size-sm;\n  font-weight: 300;\n}\n\n// Indicators\n\n.alert {\n  font-size: $font-size-sm;\n  font-weight: 300;\n  color: $white;\n\n  .alert-link {\n    color: $white;\n    text-decoration: underline;\n  }\n\n  &:not(.alert-secondary):not(.alert-light) .btn-close {\n    background-image: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'><path d='M.293.293a1 1 0 011.414 0L8 6.586 14.293.293a1 1 0 111.414 1.414L9.414 8l6.293 6.293a1 1 0 01-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 01-1.414-1.414L6.586 8 .293 1.707a1 1 0 010-1.414z'/></svg>\");\n  }\n\n  &-secondary,\n  &-light {\n    &,\n    a:not(.btn),\n    .alert-link {\n      color: $body-color;\n    }\n  }\n}\n\n.badge {\n  &.bg-secondary,\n  &.bg-light {\n    color: $dark;\n  }\n}\n\n// Progress bars\n\n.progress[value] {\n  height: 22px;\n  padding: 2px;\n  background-color: #f6f6f6;\n  border: 1px solid #ccc;\n  @include box-shadow(none);\n}\n\n// Popovers\n\n.popover-header {\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n}\n"
  },
  {
    "path": "src/sourceDev.WebApp/SharedThemes/yeti/wwwroot/css/_variables.scss",
    "content": "// Yeti 5.1.3\n// Bootswatch\n\n$theme: \"yeti\" !default;\n\n//\n// Color system\n//\n\n$white:    #fff !default;\n$gray-100: #f8f9fa !default;\n$gray-200: #eee !default;\n$gray-300: #dee2e6 !default;\n$gray-400: #ccc !default;\n$gray-500: #adb5bd !default;\n$gray-600: #888 !default;\n$gray-700: #495057 !default;\n$gray-800: #333 !default;\n$gray-900: #222 !default;\n$black:    #000 !default;\n\n$blue:    #008cba !default;\n$indigo:  #6610f2 !default;\n$purple:  #6f42c1 !default;\n$pink:    #e83e8c !default;\n$red:     #f04124 !default;\n$orange:  #fd7e14 !default;\n$yellow:  #e99002 !default;\n$green:   #43ac6a !default;\n$teal:    #20c997 !default;\n$cyan:    #5bc0de !default;\n\n$primary:       $blue !default;\n$secondary:     $gray-200 !default;\n$success:       $green !default;\n$info:          $cyan !default;\n$warning:       $yellow !default;\n$danger:        $red !default;\n$light:         $gray-200 !default;\n$dark:          $gray-900 !default;\n\n$min-contrast-ratio:   1.9 !default;\n\n// Components\n\n$border-radius:               0 !default;\n$border-radius-lg:            0 !default;\n$border-radius-sm:            0 !default;\n\n// Fonts\n\n// stylelint-disable-next-line value-keyword-case\n$font-family-sans-serif:      \"Open Sans\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\" !default;\n$headings-font-weight:        300 !default;\n\n// Tables\n\n$table-bg-scale:              0 !default;\n\n// Buttons\n\n$input-btn-padding-x:         .5rem !default;\n$btn-font-weight:             300 !default;\n\n// Dropdowns\n\n$dropdown-border-color:             rgba($black, .1) !default;\n$dropdown-divider-bg:               rgba($black, .1) !default;\n\n// Navs\n\n$nav-link-disabled-color:           $gray-400 !default;\n$nav-tabs-border-color:             $dropdown-border-color !default;\n$nav-tabs-link-hover-border-color:  $nav-tabs-border-color !default;\n$nav-tabs-link-active-border-color: $nav-tabs-border-color !default;\n\n// Navbar\n\n$navbar-dark-color:                 rgba($white, .7) !default;\n$navbar-dark-hover-color:           $white !default;\n\n// Pagination\n\n$pagination-color:                  $gray-600 !default;\n$pagination-border-color:           $nav-tabs-border-color !default;\n$pagination-active-border-color:    darken($primary, 5%) !default;\n$pagination-disabled-color:         $gray-200 !default;\n\n// Cards\n\n$card-inner-border-radius:          0 !default;\n\n// Badges\n\n$badge-font-weight:                 300 !default;\n$badge-padding-x:                   1rem !default;\n\n// Alerts\n\n$alert-link-font-weight:            400 !default;\n\n$alert-bg-scale:                    0 !default;\n\n// Progress bars\n\n$progress-bg:                       $gray-400 !default;\n$progress-bar-color:                $white !default;\n\n// List group\n\n$list-group-disabled-bg:            $gray-200 !default;\n\n// Breadcrumbs\n\n$breadcrumb-padding-y:              .375rem !default;\n$breadcrumb-padding-x:              .75rem !default;\n$breadcrumb-border-radius:          3px !default;\n\n// Close\n\n$btn-close-color:            $gray-600 !default;\n$btn-close-opacity:          .6 !default;\n$btn-close-hover-opacity:    1 !default;\n"
  },
  {
    "path": "src/sourceDev.WebApp/SharedThemes/yeti/wwwroot/css/bootstrap.css",
    "content": "/*!\n * Bootswatch v5.1.3\n * Homepage: https://bootswatch.com\n * Copyright 2012-2021 Thomas Park\n * Licensed under MIT\n * Based on Bootstrap\n*/\n/*!\n * Bootstrap v5.1.3 (https://getbootstrap.com/)\n * Copyright 2011-2021 The Bootstrap Authors\n * Copyright 2011-2021 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n@import url(\"https://fonts.googleapis.com/css2?family=Open+Sans:ital,wght@0,300;0,400;0,700;1,300;1,400;1,700&display=swap\");\n:root {\n  --bs-blue: #008cba;\n  --bs-indigo: #6610f2;\n  --bs-purple: #6f42c1;\n  --bs-pink: #e83e8c;\n  --bs-red: #f04124;\n  --bs-orange: #fd7e14;\n  --bs-yellow: #e99002;\n  --bs-green: #43ac6a;\n  --bs-teal: #20c997;\n  --bs-cyan: #5bc0de;\n  --bs-white: #fff;\n  --bs-gray: #888;\n  --bs-gray-dark: #333;\n  --bs-gray-100: #f8f9fa;\n  --bs-gray-200: #eee;\n  --bs-gray-300: #dee2e6;\n  --bs-gray-400: #ccc;\n  --bs-gray-500: #adb5bd;\n  --bs-gray-600: #888;\n  --bs-gray-700: #495057;\n  --bs-gray-800: #333;\n  --bs-gray-900: #222;\n  --bs-primary: #008cba;\n  --bs-secondary: #eee;\n  --bs-success: #43ac6a;\n  --bs-info: #5bc0de;\n  --bs-warning: #e99002;\n  --bs-danger: #f04124;\n  --bs-light: #eee;\n  --bs-dark: #222;\n  --bs-primary-rgb: 0, 140, 186;\n  --bs-secondary-rgb: 238, 238, 238;\n  --bs-success-rgb: 67, 172, 106;\n  --bs-info-rgb: 91, 192, 222;\n  --bs-warning-rgb: 233, 144, 2;\n  --bs-danger-rgb: 240, 65, 36;\n  --bs-light-rgb: 238, 238, 238;\n  --bs-dark-rgb: 34, 34, 34;\n  --bs-white-rgb: 255, 255, 255;\n  --bs-black-rgb: 0, 0, 0;\n  --bs-body-color-rgb: 34, 34, 34;\n  --bs-body-bg-rgb: 255, 255, 255;\n  --bs-font-sans-serif: \"Open Sans\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\";\n  --bs-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n  --bs-gradient: linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));\n  --bs-body-font-family: var(--bs-font-sans-serif);\n  --bs-body-font-size: 1rem;\n  --bs-body-font-weight: 400;\n  --bs-body-line-height: 1.5;\n  --bs-body-color: #222;\n  --bs-body-bg: #fff;\n}\n\n*,\n*::before,\n*::after {\n  box-sizing: border-box;\n}\n\n@media (prefers-reduced-motion: no-preference) {\n  :root {\n    scroll-behavior: smooth;\n  }\n}\n\nbody {\n  margin: 0;\n  font-family: var(--bs-body-font-family);\n  font-size: var(--bs-body-font-size);\n  font-weight: var(--bs-body-font-weight);\n  line-height: var(--bs-body-line-height);\n  color: var(--bs-body-color);\n  text-align: var(--bs-body-text-align);\n  background-color: var(--bs-body-bg);\n  -webkit-text-size-adjust: 100%;\n  -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\n\nhr {\n  margin: 1rem 0;\n  color: inherit;\n  background-color: currentColor;\n  border: 0;\n  opacity: 0.25;\n}\n\nhr:not([size]) {\n  height: 1px;\n}\n\nh1, .h1, h2, .h2, h3, .h3, h4, .h4, h5, .h5, h6, .h6 {\n  margin-top: 0;\n  margin-bottom: 0.5rem;\n  font-weight: 300;\n  line-height: 1.2;\n}\n\nh1, .h1 {\n  font-size: calc(1.375rem + 1.5vw);\n}\n\n@media (min-width: 1200px) {\n  h1, .h1 {\n    font-size: 2.5rem;\n  }\n}\n\nh2, .h2 {\n  font-size: calc(1.325rem + 0.9vw);\n}\n\n@media (min-width: 1200px) {\n  h2, .h2 {\n    font-size: 2rem;\n  }\n}\n\nh3, .h3 {\n  font-size: calc(1.3rem + 0.6vw);\n}\n\n@media (min-width: 1200px) {\n  h3, .h3 {\n    font-size: 1.75rem;\n  }\n}\n\nh4, .h4 {\n  font-size: calc(1.275rem + 0.3vw);\n}\n\n@media (min-width: 1200px) {\n  h4, .h4 {\n    font-size: 1.5rem;\n  }\n}\n\nh5, .h5 {\n  font-size: 1.25rem;\n}\n\nh6, .h6 {\n  font-size: 1rem;\n}\n\np {\n  margin-top: 0;\n  margin-bottom: 1rem;\n}\n\nabbr[title],\nabbr[data-bs-original-title] {\n  -webkit-text-decoration: underline dotted;\n  text-decoration: underline dotted;\n  cursor: help;\n  -webkit-text-decoration-skip-ink: none;\n  text-decoration-skip-ink: none;\n}\n\naddress {\n  margin-bottom: 1rem;\n  font-style: normal;\n  line-height: inherit;\n}\n\nol,\nul {\n  padding-left: 2rem;\n}\n\nol,\nul,\ndl {\n  margin-top: 0;\n  margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n  margin-bottom: 0;\n}\n\ndt {\n  font-weight: 700;\n}\n\ndd {\n  margin-bottom: .5rem;\n  margin-left: 0;\n}\n\nblockquote {\n  margin: 0 0 1rem;\n}\n\nb,\nstrong {\n  font-weight: bolder;\n}\n\nsmall, .small {\n  font-size: 0.875em;\n}\n\nmark, .mark {\n  padding: 0.2em;\n  background-color: #fcf8e3;\n}\n\nsub,\nsup {\n  position: relative;\n  font-size: 0.75em;\n  line-height: 0;\n  vertical-align: baseline;\n}\n\nsub {\n  bottom: -.25em;\n}\n\nsup {\n  top: -.5em;\n}\n\na {\n  color: #008cba;\n  text-decoration: underline;\n}\n\na:hover {\n  color: #007095;\n}\n\na:not([href]):not([class]), a:not([href]):not([class]):hover {\n  color: inherit;\n  text-decoration: none;\n}\n\npre,\ncode,\nkbd,\nsamp {\n  font-family: var(--bs-font-monospace);\n  font-size: 1em;\n  direction: ltr /* rtl:ignore */;\n  unicode-bidi: bidi-override;\n}\n\npre {\n  display: block;\n  margin-top: 0;\n  margin-bottom: 1rem;\n  overflow: auto;\n  font-size: 0.875em;\n}\n\npre code {\n  font-size: inherit;\n  color: inherit;\n  word-break: normal;\n}\n\ncode {\n  font-size: 0.875em;\n  color: #e83e8c;\n  word-wrap: break-word;\n}\n\na > code {\n  color: inherit;\n}\n\nkbd {\n  padding: 0.2rem 0.4rem;\n  font-size: 0.875em;\n  color: #fff;\n  background-color: #222;\n  border-radius: 0;\n}\n\nkbd kbd {\n  padding: 0;\n  font-size: 1em;\n  font-weight: 700;\n}\n\nfigure {\n  margin: 0 0 1rem;\n}\n\nimg,\nsvg {\n  vertical-align: middle;\n}\n\ntable {\n  caption-side: bottom;\n  border-collapse: collapse;\n}\n\ncaption {\n  padding-top: 0.5rem;\n  padding-bottom: 0.5rem;\n  color: #888;\n  text-align: left;\n}\n\nth {\n  text-align: inherit;\n  text-align: -webkit-match-parent;\n}\n\nthead,\ntbody,\ntfoot,\ntr,\ntd,\nth {\n  border-color: inherit;\n  border-style: solid;\n  border-width: 0;\n}\n\nlabel {\n  display: inline-block;\n}\n\nbutton {\n  border-radius: 0;\n}\n\nbutton:focus:not(:focus-visible) {\n  outline: 0;\n}\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n  margin: 0;\n  font-family: inherit;\n  font-size: inherit;\n  line-height: inherit;\n}\n\nbutton,\nselect {\n  text-transform: none;\n}\n\n[role=\"button\"] {\n  cursor: pointer;\n}\n\nselect {\n  word-wrap: normal;\n}\n\nselect:disabled {\n  opacity: 1;\n}\n\n[list]::-webkit-calendar-picker-indicator {\n  display: none;\n}\n\nbutton,\n[type=\"button\"],\n[type=\"reset\"],\n[type=\"submit\"] {\n  -webkit-appearance: button;\n}\n\nbutton:not(:disabled),\n[type=\"button\"]:not(:disabled),\n[type=\"reset\"]:not(:disabled),\n[type=\"submit\"]:not(:disabled) {\n  cursor: pointer;\n}\n\n::-moz-focus-inner {\n  padding: 0;\n  border-style: none;\n}\n\ntextarea {\n  resize: vertical;\n}\n\nfieldset {\n  min-width: 0;\n  padding: 0;\n  margin: 0;\n  border: 0;\n}\n\nlegend {\n  float: left;\n  width: 100%;\n  padding: 0;\n  margin-bottom: 0.5rem;\n  font-size: calc(1.275rem + 0.3vw);\n  line-height: inherit;\n}\n\n@media (min-width: 1200px) {\n  legend {\n    font-size: 1.5rem;\n  }\n}\n\nlegend + * {\n  clear: left;\n}\n\n::-webkit-datetime-edit-fields-wrapper,\n::-webkit-datetime-edit-text,\n::-webkit-datetime-edit-minute,\n::-webkit-datetime-edit-hour-field,\n::-webkit-datetime-edit-day-field,\n::-webkit-datetime-edit-month-field,\n::-webkit-datetime-edit-year-field {\n  padding: 0;\n}\n\n::-webkit-inner-spin-button {\n  height: auto;\n}\n\n[type=\"search\"] {\n  outline-offset: -2px;\n  -webkit-appearance: textfield;\n}\n\n/* rtl:raw:\n[type=\"tel\"],\n[type=\"url\"],\n[type=\"email\"],\n[type=\"number\"] {\n  direction: ltr;\n}\n*/\n::-webkit-search-decoration {\n  -webkit-appearance: none;\n}\n\n::-webkit-color-swatch-wrapper {\n  padding: 0;\n}\n\n::file-selector-button {\n  font: inherit;\n}\n\n::-webkit-file-upload-button {\n  font: inherit;\n  -webkit-appearance: button;\n}\n\noutput {\n  display: inline-block;\n}\n\niframe {\n  border: 0;\n}\n\nsummary {\n  display: list-item;\n  cursor: pointer;\n}\n\nprogress {\n  vertical-align: baseline;\n}\n\n[hidden] {\n  display: none !important;\n}\n\n.lead {\n  font-size: 1.25rem;\n  font-weight: 300;\n}\n\n.display-1 {\n  font-size: calc(1.625rem + 4.5vw);\n  font-weight: 300;\n  line-height: 1.2;\n}\n\n@media (min-width: 1200px) {\n  .display-1 {\n    font-size: 5rem;\n  }\n}\n\n.display-2 {\n  font-size: calc(1.575rem + 3.9vw);\n  font-weight: 300;\n  line-height: 1.2;\n}\n\n@media (min-width: 1200px) {\n  .display-2 {\n    font-size: 4.5rem;\n  }\n}\n\n.display-3 {\n  font-size: calc(1.525rem + 3.3vw);\n  font-weight: 300;\n  line-height: 1.2;\n}\n\n@media (min-width: 1200px) {\n  .display-3 {\n    font-size: 4rem;\n  }\n}\n\n.display-4 {\n  font-size: calc(1.475rem + 2.7vw);\n  font-weight: 300;\n  line-height: 1.2;\n}\n\n@media (min-width: 1200px) {\n  .display-4 {\n    font-size: 3.5rem;\n  }\n}\n\n.display-5 {\n  font-size: calc(1.425rem + 2.1vw);\n  font-weight: 300;\n  line-height: 1.2;\n}\n\n@media (min-width: 1200px) {\n  .display-5 {\n    font-size: 3rem;\n  }\n}\n\n.display-6 {\n  font-size: calc(1.375rem + 1.5vw);\n  font-weight: 300;\n  line-height: 1.2;\n}\n\n@media (min-width: 1200px) {\n  .display-6 {\n    font-size: 2.5rem;\n  }\n}\n\n.list-unstyled {\n  padding-left: 0;\n  list-style: none;\n}\n\n.list-inline {\n  padding-left: 0;\n  list-style: none;\n}\n\n.list-inline-item {\n  display: inline-block;\n}\n\n.list-inline-item:not(:last-child) {\n  margin-right: 0.5rem;\n}\n\n.initialism {\n  font-size: 0.875em;\n  text-transform: uppercase;\n}\n\n.blockquote {\n  margin-bottom: 1rem;\n  font-size: 1.25rem;\n}\n\n.blockquote > :last-child {\n  margin-bottom: 0;\n}\n\n.blockquote-footer {\n  margin-top: -1rem;\n  margin-bottom: 1rem;\n  font-size: 0.875em;\n  color: #888;\n}\n\n.blockquote-footer::before {\n  content: \"\\2014\\00A0\";\n}\n\n.img-fluid {\n  max-width: 100%;\n  height: auto;\n}\n\n.img-thumbnail {\n  padding: 0.25rem;\n  background-color: #fff;\n  border: 1px solid #dee2e6;\n  border-radius: 0;\n  max-width: 100%;\n  height: auto;\n}\n\n.figure {\n  display: inline-block;\n}\n\n.figure-img {\n  margin-bottom: 0.5rem;\n  line-height: 1;\n}\n\n.figure-caption {\n  font-size: 0.875em;\n  color: #888;\n}\n\n.container,\n.container-fluid,\n.container-sm,\n.container-md,\n.container-lg,\n.container-xl,\n.container-xxl {\n  width: 100%;\n  padding-right: var(--bs-gutter-x, 0.75rem);\n  padding-left: var(--bs-gutter-x, 0.75rem);\n  margin-right: auto;\n  margin-left: auto;\n}\n\n@media (min-width: 576px) {\n  .container, .container-sm {\n    max-width: 540px;\n  }\n}\n\n@media (min-width: 768px) {\n  .container, .container-sm, .container-md {\n    max-width: 720px;\n  }\n}\n\n@media (min-width: 992px) {\n  .container, .container-sm, .container-md, .container-lg {\n    max-width: 960px;\n  }\n}\n\n@media (min-width: 1200px) {\n  .container, .container-sm, .container-md, .container-lg, .container-xl {\n    max-width: 1140px;\n  }\n}\n\n@media (min-width: 1400px) {\n  .container, .container-sm, .container-md, .container-lg, .container-xl, .container-xxl {\n    max-width: 1320px;\n  }\n}\n\n.row {\n  --bs-gutter-x: 1.5rem;\n  --bs-gutter-y: 0;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n  flex-wrap: wrap;\n  margin-top: calc(-1 * var(--bs-gutter-y));\n  margin-right: calc(-.5 * var(--bs-gutter-x));\n  margin-left: calc(-.5 * var(--bs-gutter-x));\n}\n\n.row > * {\n  -ms-flex-negative: 0;\n  flex-shrink: 0;\n  width: 100%;\n  max-width: 100%;\n  padding-right: calc(var(--bs-gutter-x) * .5);\n  padding-left: calc(var(--bs-gutter-x) * .5);\n  margin-top: var(--bs-gutter-y);\n}\n\n.col {\n  -ms-flex: 1 0 0%;\n  flex: 1 0 0%;\n}\n\n.row-cols-auto > * {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: auto;\n}\n\n.row-cols-1 > * {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 100%;\n}\n\n.row-cols-2 > * {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 50%;\n}\n\n.row-cols-3 > * {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 33.333333%;\n}\n\n.row-cols-4 > * {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 25%;\n}\n\n.row-cols-5 > * {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 20%;\n}\n\n.row-cols-6 > * {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 16.666667%;\n}\n\n.col-auto {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: auto;\n}\n\n.col-1 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 8.333333%;\n}\n\n.col-2 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 16.666667%;\n}\n\n.col-3 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 25%;\n}\n\n.col-4 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 33.333333%;\n}\n\n.col-5 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 41.666667%;\n}\n\n.col-6 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 50%;\n}\n\n.col-7 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 58.333333%;\n}\n\n.col-8 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 66.666667%;\n}\n\n.col-9 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 75%;\n}\n\n.col-10 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 83.333333%;\n}\n\n.col-11 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 91.666667%;\n}\n\n.col-12 {\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 100%;\n}\n\n.offset-1 {\n  margin-left: 8.333333%;\n}\n\n.offset-2 {\n  margin-left: 16.666667%;\n}\n\n.offset-3 {\n  margin-left: 25%;\n}\n\n.offset-4 {\n  margin-left: 33.333333%;\n}\n\n.offset-5 {\n  margin-left: 41.666667%;\n}\n\n.offset-6 {\n  margin-left: 50%;\n}\n\n.offset-7 {\n  margin-left: 58.333333%;\n}\n\n.offset-8 {\n  margin-left: 66.666667%;\n}\n\n.offset-9 {\n  margin-left: 75%;\n}\n\n.offset-10 {\n  margin-left: 83.333333%;\n}\n\n.offset-11 {\n  margin-left: 91.666667%;\n}\n\n.g-0,\n.gx-0 {\n  --bs-gutter-x: 0;\n}\n\n.g-0,\n.gy-0 {\n  --bs-gutter-y: 0;\n}\n\n.g-1,\n.gx-1 {\n  --bs-gutter-x: 0.25rem;\n}\n\n.g-1,\n.gy-1 {\n  --bs-gutter-y: 0.25rem;\n}\n\n.g-2,\n.gx-2 {\n  --bs-gutter-x: 0.5rem;\n}\n\n.g-2,\n.gy-2 {\n  --bs-gutter-y: 0.5rem;\n}\n\n.g-3,\n.gx-3 {\n  --bs-gutter-x: 1rem;\n}\n\n.g-3,\n.gy-3 {\n  --bs-gutter-y: 1rem;\n}\n\n.g-4,\n.gx-4 {\n  --bs-gutter-x: 1.5rem;\n}\n\n.g-4,\n.gy-4 {\n  --bs-gutter-y: 1.5rem;\n}\n\n.g-5,\n.gx-5 {\n  --bs-gutter-x: 3rem;\n}\n\n.g-5,\n.gy-5 {\n  --bs-gutter-y: 3rem;\n}\n\n@media (min-width: 576px) {\n  .col-sm {\n    -ms-flex: 1 0 0%;\n    flex: 1 0 0%;\n  }\n  .row-cols-sm-auto > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .row-cols-sm-1 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .row-cols-sm-2 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .row-cols-sm-3 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 33.333333%;\n  }\n  .row-cols-sm-4 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .row-cols-sm-5 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 20%;\n  }\n  .row-cols-sm-6 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 16.666667%;\n  }\n  .col-sm-auto {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .col-sm-1 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 8.333333%;\n  }\n  .col-sm-2 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 16.666667%;\n  }\n  .col-sm-3 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .col-sm-4 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 33.333333%;\n  }\n  .col-sm-5 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 41.666667%;\n  }\n  .col-sm-6 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .col-sm-7 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 58.333333%;\n  }\n  .col-sm-8 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 66.666667%;\n  }\n  .col-sm-9 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 75%;\n  }\n  .col-sm-10 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 83.333333%;\n  }\n  .col-sm-11 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 91.666667%;\n  }\n  .col-sm-12 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .offset-sm-0 {\n    margin-left: 0;\n  }\n  .offset-sm-1 {\n    margin-left: 8.333333%;\n  }\n  .offset-sm-2 {\n    margin-left: 16.666667%;\n  }\n  .offset-sm-3 {\n    margin-left: 25%;\n  }\n  .offset-sm-4 {\n    margin-left: 33.333333%;\n  }\n  .offset-sm-5 {\n    margin-left: 41.666667%;\n  }\n  .offset-sm-6 {\n    margin-left: 50%;\n  }\n  .offset-sm-7 {\n    margin-left: 58.333333%;\n  }\n  .offset-sm-8 {\n    margin-left: 66.666667%;\n  }\n  .offset-sm-9 {\n    margin-left: 75%;\n  }\n  .offset-sm-10 {\n    margin-left: 83.333333%;\n  }\n  .offset-sm-11 {\n    margin-left: 91.666667%;\n  }\n  .g-sm-0,\n  .gx-sm-0 {\n    --bs-gutter-x: 0;\n  }\n  .g-sm-0,\n  .gy-sm-0 {\n    --bs-gutter-y: 0;\n  }\n  .g-sm-1,\n  .gx-sm-1 {\n    --bs-gutter-x: 0.25rem;\n  }\n  .g-sm-1,\n  .gy-sm-1 {\n    --bs-gutter-y: 0.25rem;\n  }\n  .g-sm-2,\n  .gx-sm-2 {\n    --bs-gutter-x: 0.5rem;\n  }\n  .g-sm-2,\n  .gy-sm-2 {\n    --bs-gutter-y: 0.5rem;\n  }\n  .g-sm-3,\n  .gx-sm-3 {\n    --bs-gutter-x: 1rem;\n  }\n  .g-sm-3,\n  .gy-sm-3 {\n    --bs-gutter-y: 1rem;\n  }\n  .g-sm-4,\n  .gx-sm-4 {\n    --bs-gutter-x: 1.5rem;\n  }\n  .g-sm-4,\n  .gy-sm-4 {\n    --bs-gutter-y: 1.5rem;\n  }\n  .g-sm-5,\n  .gx-sm-5 {\n    --bs-gutter-x: 3rem;\n  }\n  .g-sm-5,\n  .gy-sm-5 {\n    --bs-gutter-y: 3rem;\n  }\n}\n\n@media (min-width: 768px) {\n  .col-md {\n    -ms-flex: 1 0 0%;\n    flex: 1 0 0%;\n  }\n  .row-cols-md-auto > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .row-cols-md-1 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .row-cols-md-2 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .row-cols-md-3 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 33.333333%;\n  }\n  .row-cols-md-4 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .row-cols-md-5 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 20%;\n  }\n  .row-cols-md-6 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 16.666667%;\n  }\n  .col-md-auto {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .col-md-1 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 8.333333%;\n  }\n  .col-md-2 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 16.666667%;\n  }\n  .col-md-3 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .col-md-4 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 33.333333%;\n  }\n  .col-md-5 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 41.666667%;\n  }\n  .col-md-6 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .col-md-7 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 58.333333%;\n  }\n  .col-md-8 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 66.666667%;\n  }\n  .col-md-9 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 75%;\n  }\n  .col-md-10 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 83.333333%;\n  }\n  .col-md-11 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 91.666667%;\n  }\n  .col-md-12 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .offset-md-0 {\n    margin-left: 0;\n  }\n  .offset-md-1 {\n    margin-left: 8.333333%;\n  }\n  .offset-md-2 {\n    margin-left: 16.666667%;\n  }\n  .offset-md-3 {\n    margin-left: 25%;\n  }\n  .offset-md-4 {\n    margin-left: 33.333333%;\n  }\n  .offset-md-5 {\n    margin-left: 41.666667%;\n  }\n  .offset-md-6 {\n    margin-left: 50%;\n  }\n  .offset-md-7 {\n    margin-left: 58.333333%;\n  }\n  .offset-md-8 {\n    margin-left: 66.666667%;\n  }\n  .offset-md-9 {\n    margin-left: 75%;\n  }\n  .offset-md-10 {\n    margin-left: 83.333333%;\n  }\n  .offset-md-11 {\n    margin-left: 91.666667%;\n  }\n  .g-md-0,\n  .gx-md-0 {\n    --bs-gutter-x: 0;\n  }\n  .g-md-0,\n  .gy-md-0 {\n    --bs-gutter-y: 0;\n  }\n  .g-md-1,\n  .gx-md-1 {\n    --bs-gutter-x: 0.25rem;\n  }\n  .g-md-1,\n  .gy-md-1 {\n    --bs-gutter-y: 0.25rem;\n  }\n  .g-md-2,\n  .gx-md-2 {\n    --bs-gutter-x: 0.5rem;\n  }\n  .g-md-2,\n  .gy-md-2 {\n    --bs-gutter-y: 0.5rem;\n  }\n  .g-md-3,\n  .gx-md-3 {\n    --bs-gutter-x: 1rem;\n  }\n  .g-md-3,\n  .gy-md-3 {\n    --bs-gutter-y: 1rem;\n  }\n  .g-md-4,\n  .gx-md-4 {\n    --bs-gutter-x: 1.5rem;\n  }\n  .g-md-4,\n  .gy-md-4 {\n    --bs-gutter-y: 1.5rem;\n  }\n  .g-md-5,\n  .gx-md-5 {\n    --bs-gutter-x: 3rem;\n  }\n  .g-md-5,\n  .gy-md-5 {\n    --bs-gutter-y: 3rem;\n  }\n}\n\n@media (min-width: 992px) {\n  .col-lg {\n    -ms-flex: 1 0 0%;\n    flex: 1 0 0%;\n  }\n  .row-cols-lg-auto > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .row-cols-lg-1 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .row-cols-lg-2 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .row-cols-lg-3 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 33.333333%;\n  }\n  .row-cols-lg-4 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .row-cols-lg-5 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 20%;\n  }\n  .row-cols-lg-6 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 16.666667%;\n  }\n  .col-lg-auto {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .col-lg-1 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 8.333333%;\n  }\n  .col-lg-2 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 16.666667%;\n  }\n  .col-lg-3 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .col-lg-4 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 33.333333%;\n  }\n  .col-lg-5 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 41.666667%;\n  }\n  .col-lg-6 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .col-lg-7 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 58.333333%;\n  }\n  .col-lg-8 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 66.666667%;\n  }\n  .col-lg-9 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 75%;\n  }\n  .col-lg-10 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 83.333333%;\n  }\n  .col-lg-11 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 91.666667%;\n  }\n  .col-lg-12 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .offset-lg-0 {\n    margin-left: 0;\n  }\n  .offset-lg-1 {\n    margin-left: 8.333333%;\n  }\n  .offset-lg-2 {\n    margin-left: 16.666667%;\n  }\n  .offset-lg-3 {\n    margin-left: 25%;\n  }\n  .offset-lg-4 {\n    margin-left: 33.333333%;\n  }\n  .offset-lg-5 {\n    margin-left: 41.666667%;\n  }\n  .offset-lg-6 {\n    margin-left: 50%;\n  }\n  .offset-lg-7 {\n    margin-left: 58.333333%;\n  }\n  .offset-lg-8 {\n    margin-left: 66.666667%;\n  }\n  .offset-lg-9 {\n    margin-left: 75%;\n  }\n  .offset-lg-10 {\n    margin-left: 83.333333%;\n  }\n  .offset-lg-11 {\n    margin-left: 91.666667%;\n  }\n  .g-lg-0,\n  .gx-lg-0 {\n    --bs-gutter-x: 0;\n  }\n  .g-lg-0,\n  .gy-lg-0 {\n    --bs-gutter-y: 0;\n  }\n  .g-lg-1,\n  .gx-lg-1 {\n    --bs-gutter-x: 0.25rem;\n  }\n  .g-lg-1,\n  .gy-lg-1 {\n    --bs-gutter-y: 0.25rem;\n  }\n  .g-lg-2,\n  .gx-lg-2 {\n    --bs-gutter-x: 0.5rem;\n  }\n  .g-lg-2,\n  .gy-lg-2 {\n    --bs-gutter-y: 0.5rem;\n  }\n  .g-lg-3,\n  .gx-lg-3 {\n    --bs-gutter-x: 1rem;\n  }\n  .g-lg-3,\n  .gy-lg-3 {\n    --bs-gutter-y: 1rem;\n  }\n  .g-lg-4,\n  .gx-lg-4 {\n    --bs-gutter-x: 1.5rem;\n  }\n  .g-lg-4,\n  .gy-lg-4 {\n    --bs-gutter-y: 1.5rem;\n  }\n  .g-lg-5,\n  .gx-lg-5 {\n    --bs-gutter-x: 3rem;\n  }\n  .g-lg-5,\n  .gy-lg-5 {\n    --bs-gutter-y: 3rem;\n  }\n}\n\n@media (min-width: 1200px) {\n  .col-xl {\n    -ms-flex: 1 0 0%;\n    flex: 1 0 0%;\n  }\n  .row-cols-xl-auto > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .row-cols-xl-1 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .row-cols-xl-2 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .row-cols-xl-3 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 33.333333%;\n  }\n  .row-cols-xl-4 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .row-cols-xl-5 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 20%;\n  }\n  .row-cols-xl-6 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 16.666667%;\n  }\n  .col-xl-auto {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .col-xl-1 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 8.333333%;\n  }\n  .col-xl-2 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 16.666667%;\n  }\n  .col-xl-3 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .col-xl-4 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 33.333333%;\n  }\n  .col-xl-5 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 41.666667%;\n  }\n  .col-xl-6 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .col-xl-7 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 58.333333%;\n  }\n  .col-xl-8 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 66.666667%;\n  }\n  .col-xl-9 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 75%;\n  }\n  .col-xl-10 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 83.333333%;\n  }\n  .col-xl-11 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 91.666667%;\n  }\n  .col-xl-12 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .offset-xl-0 {\n    margin-left: 0;\n  }\n  .offset-xl-1 {\n    margin-left: 8.333333%;\n  }\n  .offset-xl-2 {\n    margin-left: 16.666667%;\n  }\n  .offset-xl-3 {\n    margin-left: 25%;\n  }\n  .offset-xl-4 {\n    margin-left: 33.333333%;\n  }\n  .offset-xl-5 {\n    margin-left: 41.666667%;\n  }\n  .offset-xl-6 {\n    margin-left: 50%;\n  }\n  .offset-xl-7 {\n    margin-left: 58.333333%;\n  }\n  .offset-xl-8 {\n    margin-left: 66.666667%;\n  }\n  .offset-xl-9 {\n    margin-left: 75%;\n  }\n  .offset-xl-10 {\n    margin-left: 83.333333%;\n  }\n  .offset-xl-11 {\n    margin-left: 91.666667%;\n  }\n  .g-xl-0,\n  .gx-xl-0 {\n    --bs-gutter-x: 0;\n  }\n  .g-xl-0,\n  .gy-xl-0 {\n    --bs-gutter-y: 0;\n  }\n  .g-xl-1,\n  .gx-xl-1 {\n    --bs-gutter-x: 0.25rem;\n  }\n  .g-xl-1,\n  .gy-xl-1 {\n    --bs-gutter-y: 0.25rem;\n  }\n  .g-xl-2,\n  .gx-xl-2 {\n    --bs-gutter-x: 0.5rem;\n  }\n  .g-xl-2,\n  .gy-xl-2 {\n    --bs-gutter-y: 0.5rem;\n  }\n  .g-xl-3,\n  .gx-xl-3 {\n    --bs-gutter-x: 1rem;\n  }\n  .g-xl-3,\n  .gy-xl-3 {\n    --bs-gutter-y: 1rem;\n  }\n  .g-xl-4,\n  .gx-xl-4 {\n    --bs-gutter-x: 1.5rem;\n  }\n  .g-xl-4,\n  .gy-xl-4 {\n    --bs-gutter-y: 1.5rem;\n  }\n  .g-xl-5,\n  .gx-xl-5 {\n    --bs-gutter-x: 3rem;\n  }\n  .g-xl-5,\n  .gy-xl-5 {\n    --bs-gutter-y: 3rem;\n  }\n}\n\n@media (min-width: 1400px) {\n  .col-xxl {\n    -ms-flex: 1 0 0%;\n    flex: 1 0 0%;\n  }\n  .row-cols-xxl-auto > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .row-cols-xxl-1 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .row-cols-xxl-2 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .row-cols-xxl-3 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 33.333333%;\n  }\n  .row-cols-xxl-4 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .row-cols-xxl-5 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 20%;\n  }\n  .row-cols-xxl-6 > * {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 16.666667%;\n  }\n  .col-xxl-auto {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .col-xxl-1 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 8.333333%;\n  }\n  .col-xxl-2 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 16.666667%;\n  }\n  .col-xxl-3 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .col-xxl-4 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 33.333333%;\n  }\n  .col-xxl-5 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 41.666667%;\n  }\n  .col-xxl-6 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .col-xxl-7 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 58.333333%;\n  }\n  .col-xxl-8 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 66.666667%;\n  }\n  .col-xxl-9 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 75%;\n  }\n  .col-xxl-10 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 83.333333%;\n  }\n  .col-xxl-11 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 91.666667%;\n  }\n  .col-xxl-12 {\n    -ms-flex: 0 0 auto;\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .offset-xxl-0 {\n    margin-left: 0;\n  }\n  .offset-xxl-1 {\n    margin-left: 8.333333%;\n  }\n  .offset-xxl-2 {\n    margin-left: 16.666667%;\n  }\n  .offset-xxl-3 {\n    margin-left: 25%;\n  }\n  .offset-xxl-4 {\n    margin-left: 33.333333%;\n  }\n  .offset-xxl-5 {\n    margin-left: 41.666667%;\n  }\n  .offset-xxl-6 {\n    margin-left: 50%;\n  }\n  .offset-xxl-7 {\n    margin-left: 58.333333%;\n  }\n  .offset-xxl-8 {\n    margin-left: 66.666667%;\n  }\n  .offset-xxl-9 {\n    margin-left: 75%;\n  }\n  .offset-xxl-10 {\n    margin-left: 83.333333%;\n  }\n  .offset-xxl-11 {\n    margin-left: 91.666667%;\n  }\n  .g-xxl-0,\n  .gx-xxl-0 {\n    --bs-gutter-x: 0;\n  }\n  .g-xxl-0,\n  .gy-xxl-0 {\n    --bs-gutter-y: 0;\n  }\n  .g-xxl-1,\n  .gx-xxl-1 {\n    --bs-gutter-x: 0.25rem;\n  }\n  .g-xxl-1,\n  .gy-xxl-1 {\n    --bs-gutter-y: 0.25rem;\n  }\n  .g-xxl-2,\n  .gx-xxl-2 {\n    --bs-gutter-x: 0.5rem;\n  }\n  .g-xxl-2,\n  .gy-xxl-2 {\n    --bs-gutter-y: 0.5rem;\n  }\n  .g-xxl-3,\n  .gx-xxl-3 {\n    --bs-gutter-x: 1rem;\n  }\n  .g-xxl-3,\n  .gy-xxl-3 {\n    --bs-gutter-y: 1rem;\n  }\n  .g-xxl-4,\n  .gx-xxl-4 {\n    --bs-gutter-x: 1.5rem;\n  }\n  .g-xxl-4,\n  .gy-xxl-4 {\n    --bs-gutter-y: 1.5rem;\n  }\n  .g-xxl-5,\n  .gx-xxl-5 {\n    --bs-gutter-x: 3rem;\n  }\n  .g-xxl-5,\n  .gy-xxl-5 {\n    --bs-gutter-y: 3rem;\n  }\n}\n\n.table {\n  --bs-table-bg: transparent;\n  --bs-table-accent-bg: transparent;\n  --bs-table-striped-color: #222;\n  --bs-table-striped-bg: rgba(0, 0, 0, 0.05);\n  --bs-table-active-color: #222;\n  --bs-table-active-bg: rgba(0, 0, 0, 0.1);\n  --bs-table-hover-color: #222;\n  --bs-table-hover-bg: rgba(0, 0, 0, 0.075);\n  width: 100%;\n  margin-bottom: 1rem;\n  color: #222;\n  vertical-align: top;\n  border-color: #dee2e6;\n}\n\n.table > :not(caption) > * > * {\n  padding: 0.5rem 0.5rem;\n  background-color: var(--bs-table-bg);\n  border-bottom-width: 1px;\n  box-shadow: inset 0 0 0 9999px var(--bs-table-accent-bg);\n}\n\n.table > tbody {\n  vertical-align: inherit;\n}\n\n.table > thead {\n  vertical-align: bottom;\n}\n\n.table > :not(:first-child) {\n  border-top: 2px solid currentColor;\n}\n\n.caption-top {\n  caption-side: top;\n}\n\n.table-sm > :not(caption) > * > * {\n  padding: 0.25rem 0.25rem;\n}\n\n.table-bordered > :not(caption) > * {\n  border-width: 1px 0;\n}\n\n.table-bordered > :not(caption) > * > * {\n  border-width: 0 1px;\n}\n\n.table-borderless > :not(caption) > * > * {\n  border-bottom-width: 0;\n}\n\n.table-borderless > :not(:first-child) {\n  border-top-width: 0;\n}\n\n.table-striped > tbody > tr:nth-of-type(odd) > * {\n  --bs-table-accent-bg: var(--bs-table-striped-bg);\n  color: var(--bs-table-striped-color);\n}\n\n.table-active {\n  --bs-table-accent-bg: var(--bs-table-active-bg);\n  color: var(--bs-table-active-color);\n}\n\n.table-hover > tbody > tr:hover > * {\n  --bs-table-accent-bg: var(--bs-table-hover-bg);\n  color: var(--bs-table-hover-color);\n}\n\n.table-primary {\n  --bs-table-bg: #008cba;\n  --bs-table-striped-bg: #0d92bd;\n  --bs-table-striped-color: #fff;\n  --bs-table-active-bg: #1a98c1;\n  --bs-table-active-color: #fff;\n  --bs-table-hover-bg: #1395bf;\n  --bs-table-hover-color: #fff;\n  color: #fff;\n  border-color: #1a98c1;\n}\n\n.table-secondary {\n  --bs-table-bg: #eeeeee;\n  --bs-table-striped-bg: #e2e2e2;\n  --bs-table-striped-color: #000;\n  --bs-table-active-bg: #d6d6d6;\n  --bs-table-active-color: #000;\n  --bs-table-hover-bg: gainsboro;\n  --bs-table-hover-color: #000;\n  color: #000;\n  border-color: #d6d6d6;\n}\n\n.table-success {\n  --bs-table-bg: #43ac6a;\n  --bs-table-striped-bg: #4cb071;\n  --bs-table-striped-color: #fff;\n  --bs-table-active-bg: #56b479;\n  --bs-table-active-color: #fff;\n  --bs-table-hover-bg: #51b275;\n  --bs-table-hover-color: #fff;\n  color: #fff;\n  border-color: #56b479;\n}\n\n.table-info {\n  --bs-table-bg: #5bc0de;\n  --bs-table-striped-bg: #63c3e0;\n  --bs-table-striped-color: #fff;\n  --bs-table-active-bg: #6bc6e1;\n  --bs-table-active-color: #fff;\n  --bs-table-hover-bg: #67c5e0;\n  --bs-table-hover-color: #fff;\n  color: #fff;\n  border-color: #6bc6e1;\n}\n\n.table-warning {\n  --bs-table-bg: #e99002;\n  --bs-table-striped-bg: #ea960f;\n  --bs-table-striped-color: #fff;\n  --bs-table-active-bg: #eb9b1b;\n  --bs-table-active-color: #fff;\n  --bs-table-hover-bg: #eb9815;\n  --bs-table-hover-color: #fff;\n  color: #fff;\n  border-color: #eb9b1b;\n}\n\n.table-danger {\n  --bs-table-bg: #f04124;\n  --bs-table-striped-bg: #f14b2f;\n  --bs-table-striped-color: #fff;\n  --bs-table-active-bg: #f2543a;\n  --bs-table-active-color: #fff;\n  --bs-table-hover-bg: #f14f34;\n  --bs-table-hover-color: #fff;\n  color: #fff;\n  border-color: #f2543a;\n}\n\n.table-light {\n  --bs-table-bg: #eee;\n  --bs-table-striped-bg: #e2e2e2;\n  --bs-table-striped-color: #000;\n  --bs-table-active-bg: #d6d6d6;\n  --bs-table-active-color: #000;\n  --bs-table-hover-bg: gainsboro;\n  --bs-table-hover-color: #000;\n  color: #000;\n  border-color: #d6d6d6;\n}\n\n.table-dark {\n  --bs-table-bg: #222;\n  --bs-table-striped-bg: #2d2d2d;\n  --bs-table-striped-color: #fff;\n  --bs-table-active-bg: #383838;\n  --bs-table-active-color: #fff;\n  --bs-table-hover-bg: #333333;\n  --bs-table-hover-color: #fff;\n  color: #fff;\n  border-color: #383838;\n}\n\n.table-responsive {\n  overflow-x: auto;\n  -webkit-overflow-scrolling: touch;\n}\n\n@media (max-width: 575.98px) {\n  .table-responsive-sm {\n    overflow-x: auto;\n    -webkit-overflow-scrolling: touch;\n  }\n}\n\n@media (max-width: 767.98px) {\n  .table-responsive-md {\n    overflow-x: auto;\n    -webkit-overflow-scrolling: touch;\n  }\n}\n\n@media (max-width: 991.98px) {\n  .table-responsive-lg {\n    overflow-x: auto;\n    -webkit-overflow-scrolling: touch;\n  }\n}\n\n@media (max-width: 1199.98px) {\n  .table-responsive-xl {\n    overflow-x: auto;\n    -webkit-overflow-scrolling: touch;\n  }\n}\n\n@media (max-width: 1399.98px) {\n  .table-responsive-xxl {\n    overflow-x: auto;\n    -webkit-overflow-scrolling: touch;\n  }\n}\n\n.form-label {\n  margin-bottom: 0.5rem;\n}\n\n.col-form-label {\n  padding-top: calc(0.375rem + 1px);\n  padding-bottom: calc(0.375rem + 1px);\n  margin-bottom: 0;\n  font-size: inherit;\n  line-height: 1.5;\n}\n\n.col-form-label-lg {\n  padding-top: calc(0.5rem + 1px);\n  padding-bottom: calc(0.5rem + 1px);\n  font-size: 1.25rem;\n}\n\n.col-form-label-sm {\n  padding-top: calc(0.25rem + 1px);\n  padding-bottom: calc(0.25rem + 1px);\n  font-size: 0.875rem;\n}\n\n.form-text {\n  margin-top: 0.25rem;\n  font-size: 0.875em;\n  color: #888;\n}\n\n.form-control {\n  display: block;\n  width: 100%;\n  padding: 0.375rem 0.5rem;\n  font-size: 1rem;\n  font-weight: 400;\n  line-height: 1.5;\n  color: #222;\n  background-color: #fff;\n  background-clip: padding-box;\n  border: 1px solid #ccc;\n  -webkit-appearance: none;\n  -moz-appearance: none;\n  appearance: none;\n  border-radius: 0;\n  transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .form-control {\n    transition: none;\n  }\n}\n\n.form-control[type=\"file\"] {\n  overflow: hidden;\n}\n\n.form-control[type=\"file\"]:not(:disabled):not([readonly]) {\n  cursor: pointer;\n}\n\n.form-control:focus {\n  color: #222;\n  background-color: #fff;\n  border-color: #80c6dd;\n  outline: 0;\n  box-shadow: 0 0 0 0.25rem rgba(0, 140, 186, 0.25);\n}\n\n.form-control::-webkit-date-and-time-value {\n  height: 1.5em;\n}\n\n.form-control::-webkit-input-placeholder {\n  color: #888;\n  opacity: 1;\n}\n\n.form-control::-moz-placeholder {\n  color: #888;\n  opacity: 1;\n}\n\n.form-control:-ms-input-placeholder {\n  color: #888;\n  opacity: 1;\n}\n\n.form-control::-ms-input-placeholder {\n  color: #888;\n  opacity: 1;\n}\n\n.form-control::placeholder {\n  color: #888;\n  opacity: 1;\n}\n\n.form-control:disabled, .form-control[readonly] {\n  background-color: #eee;\n  opacity: 1;\n}\n\n.form-control::file-selector-button {\n  padding: 0.375rem 0.5rem;\n  margin: -0.375rem -0.5rem;\n  -webkit-margin-end: 0.5rem;\n  -moz-margin-end: 0.5rem;\n  margin-inline-end: 0.5rem;\n  color: #222;\n  background-color: #eee;\n  pointer-events: none;\n  border-color: inherit;\n  border-style: solid;\n  border-width: 0;\n  border-inline-end-width: 1px;\n  border-radius: 0;\n  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .form-control::file-selector-button {\n    transition: none;\n  }\n}\n\n.form-control:hover:not(:disabled):not([readonly])::file-selector-button {\n  background-color: #e2e2e2;\n}\n\n.form-control::-webkit-file-upload-button {\n  padding: 0.375rem 0.5rem;\n  margin: -0.375rem -0.5rem;\n  -webkit-margin-end: 0.5rem;\n  margin-inline-end: 0.5rem;\n  color: #222;\n  background-color: #eee;\n  pointer-events: none;\n  border-color: inherit;\n  border-style: solid;\n  border-width: 0;\n  border-inline-end-width: 1px;\n  border-radius: 0;\n  -webkit-transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .form-control::-webkit-file-upload-button {\n    -webkit-transition: none;\n    transition: none;\n  }\n}\n\n.form-control:hover:not(:disabled):not([readonly])::-webkit-file-upload-button {\n  background-color: #e2e2e2;\n}\n\n.form-control-plaintext {\n  display: block;\n  width: 100%;\n  padding: 0.375rem 0;\n  margin-bottom: 0;\n  line-height: 1.5;\n  color: #222;\n  background-color: transparent;\n  border: solid transparent;\n  border-width: 1px 0;\n}\n\n.form-control-plaintext.form-control-sm, .form-control-plaintext.form-control-lg {\n  padding-right: 0;\n  padding-left: 0;\n}\n\n.form-control-sm {\n  min-height: calc(1.5em + 0.5rem + 2px);\n  padding: 0.25rem 0.5rem;\n  font-size: 0.875rem;\n  border-radius: 0;\n}\n\n.form-control-sm::file-selector-button {\n  padding: 0.25rem 0.5rem;\n  margin: -0.25rem -0.5rem;\n  -webkit-margin-end: 0.5rem;\n  -moz-margin-end: 0.5rem;\n  margin-inline-end: 0.5rem;\n}\n\n.form-control-sm::-webkit-file-upload-button {\n  padding: 0.25rem 0.5rem;\n  margin: -0.25rem -0.5rem;\n  -webkit-margin-end: 0.5rem;\n  margin-inline-end: 0.5rem;\n}\n\n.form-control-lg {\n  min-height: calc(1.5em + 1rem + 2px);\n  padding: 0.5rem 1rem;\n  font-size: 1.25rem;\n  border-radius: 0;\n}\n\n.form-control-lg::file-selector-button {\n  padding: 0.5rem 1rem;\n  margin: -0.5rem -1rem;\n  -webkit-margin-end: 1rem;\n  -moz-margin-end: 1rem;\n  margin-inline-end: 1rem;\n}\n\n.form-control-lg::-webkit-file-upload-button {\n  padding: 0.5rem 1rem;\n  margin: -0.5rem -1rem;\n  -webkit-margin-end: 1rem;\n  margin-inline-end: 1rem;\n}\n\ntextarea.form-control {\n  min-height: calc(1.5em + 0.75rem + 2px);\n}\n\ntextarea.form-control-sm {\n  min-height: calc(1.5em + 0.5rem + 2px);\n}\n\ntextarea.form-control-lg {\n  min-height: calc(1.5em + 1rem + 2px);\n}\n\n.form-control-color {\n  width: 3rem;\n  height: auto;\n  padding: 0.375rem;\n}\n\n.form-control-color:not(:disabled):not([readonly]) {\n  cursor: pointer;\n}\n\n.form-control-color::-moz-color-swatch {\n  height: 1.5em;\n  border-radius: 0;\n}\n\n.form-control-color::-webkit-color-swatch {\n  height: 1.5em;\n  border-radius: 0;\n}\n\n.form-select {\n  display: block;\n  width: 100%;\n  padding: 0.375rem 1.5rem 0.375rem 0.5rem;\n  -moz-padding-start: calc(0.5rem - 3px);\n  font-size: 1rem;\n  font-weight: 400;\n  line-height: 1.5;\n  color: #222;\n  background-color: #fff;\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23333' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e\");\n  background-repeat: no-repeat;\n  background-position: right 0.5rem center;\n  background-size: 16px 12px;\n  border: 1px solid #ccc;\n  border-radius: 0;\n  transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n  -webkit-appearance: none;\n  -moz-appearance: none;\n  appearance: none;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .form-select {\n    transition: none;\n  }\n}\n\n.form-select:focus {\n  border-color: #80c6dd;\n  outline: 0;\n  box-shadow: 0 0 0 0.25rem rgba(0, 140, 186, 0.25);\n}\n\n.form-select[multiple], .form-select[size]:not([size=\"1\"]) {\n  padding-right: 0.5rem;\n  background-image: none;\n}\n\n.form-select:disabled {\n  background-color: #eee;\n}\n\n.form-select:-moz-focusring {\n  color: transparent;\n  text-shadow: 0 0 0 #222;\n}\n\n.form-select-sm {\n  padding-top: 0.25rem;\n  padding-bottom: 0.25rem;\n  padding-left: 0.5rem;\n  font-size: 0.875rem;\n  border-radius: 0;\n}\n\n.form-select-lg {\n  padding-top: 0.5rem;\n  padding-bottom: 0.5rem;\n  padding-left: 1rem;\n  font-size: 1.25rem;\n  border-radius: 0;\n}\n\n.form-check {\n  display: block;\n  min-height: 1.5rem;\n  padding-left: 1.5em;\n  margin-bottom: 0.125rem;\n}\n\n.form-check .form-check-input {\n  float: left;\n  margin-left: -1.5em;\n}\n\n.form-check-input {\n  width: 1em;\n  height: 1em;\n  margin-top: 0.25em;\n  vertical-align: top;\n  background-color: #fff;\n  background-repeat: no-repeat;\n  background-position: center;\n  background-size: contain;\n  border: 1px solid rgba(0, 0, 0, 0.25);\n  -webkit-appearance: none;\n  -moz-appearance: none;\n  appearance: none;\n  -webkit-print-color-adjust: exact;\n  color-adjust: exact;\n}\n\n.form-check-input[type=\"checkbox\"] {\n  border-radius: 0.25em;\n}\n\n.form-check-input[type=\"radio\"] {\n  border-radius: 50%;\n}\n\n.form-check-input:active {\n  -webkit-filter: brightness(90%);\n  filter: brightness(90%);\n}\n\n.form-check-input:focus {\n  border-color: #80c6dd;\n  outline: 0;\n  box-shadow: 0 0 0 0.25rem rgba(0, 140, 186, 0.25);\n}\n\n.form-check-input:checked {\n  background-color: #008cba;\n  border-color: #008cba;\n}\n\n.form-check-input:checked[type=\"checkbox\"] {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10l3 3l6-6'/%3e%3c/svg%3e\");\n}\n\n.form-check-input:checked[type=\"radio\"] {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='2' fill='%23fff'/%3e%3c/svg%3e\");\n}\n\n.form-check-input[type=\"checkbox\"]:indeterminate {\n  background-color: #008cba;\n  border-color: #008cba;\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10h8'/%3e%3c/svg%3e\");\n}\n\n.form-check-input:disabled {\n  pointer-events: none;\n  -webkit-filter: none;\n  filter: none;\n  opacity: 0.5;\n}\n\n.form-check-input[disabled] ~ .form-check-label, .form-check-input:disabled ~ .form-check-label {\n  opacity: 0.5;\n}\n\n.form-switch {\n  padding-left: 2.5em;\n}\n\n.form-switch .form-check-input {\n  width: 2em;\n  margin-left: -2.5em;\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%280, 0, 0, 0.25%29'/%3e%3c/svg%3e\");\n  background-position: left center;\n  border-radius: 2em;\n  transition: background-position 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .form-switch .form-check-input {\n    transition: none;\n  }\n}\n\n.form-switch .form-check-input:focus {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%2380c6dd'/%3e%3c/svg%3e\");\n}\n\n.form-switch .form-check-input:checked {\n  background-position: right center;\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e\");\n}\n\n.form-check-inline {\n  display: inline-block;\n  margin-right: 1rem;\n}\n\n.btn-check {\n  position: absolute;\n  clip: rect(0, 0, 0, 0);\n  pointer-events: none;\n}\n\n.btn-check[disabled] + .btn, .btn-check:disabled + .btn {\n  pointer-events: none;\n  -webkit-filter: none;\n  filter: none;\n  opacity: 0.65;\n}\n\n.form-range {\n  width: 100%;\n  height: 1.5rem;\n  padding: 0;\n  background-color: transparent;\n  -webkit-appearance: none;\n  -moz-appearance: none;\n  appearance: none;\n}\n\n.form-range:focus {\n  outline: 0;\n}\n\n.form-range:focus::-webkit-slider-thumb {\n  box-shadow: 0 0 0 1px #fff, 0 0 0 0.25rem rgba(0, 140, 186, 0.25);\n}\n\n.form-range:focus::-moz-range-thumb {\n  box-shadow: 0 0 0 1px #fff, 0 0 0 0.25rem rgba(0, 140, 186, 0.25);\n}\n\n.form-range::-moz-focus-outer {\n  border: 0;\n}\n\n.form-range::-webkit-slider-thumb {\n  width: 1rem;\n  height: 1rem;\n  margin-top: -0.25rem;\n  background-color: #008cba;\n  border: 0;\n  border-radius: 1rem;\n  -webkit-transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n  transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n  -webkit-appearance: none;\n  appearance: none;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .form-range::-webkit-slider-thumb {\n    -webkit-transition: none;\n    transition: none;\n  }\n}\n\n.form-range::-webkit-slider-thumb:active {\n  background-color: #b3ddea;\n}\n\n.form-range::-webkit-slider-runnable-track {\n  width: 100%;\n  height: 0.5rem;\n  color: transparent;\n  cursor: pointer;\n  background-color: #dee2e6;\n  border-color: transparent;\n  border-radius: 1rem;\n}\n\n.form-range::-moz-range-thumb {\n  width: 1rem;\n  height: 1rem;\n  background-color: #008cba;\n  border: 0;\n  border-radius: 1rem;\n  -moz-transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n  transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n  -moz-appearance: none;\n  appearance: none;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .form-range::-moz-range-thumb {\n    -moz-transition: none;\n    transition: none;\n  }\n}\n\n.form-range::-moz-range-thumb:active {\n  background-color: #b3ddea;\n}\n\n.form-range::-moz-range-track {\n  width: 100%;\n  height: 0.5rem;\n  color: transparent;\n  cursor: pointer;\n  background-color: #dee2e6;\n  border-color: transparent;\n  border-radius: 1rem;\n}\n\n.form-range:disabled {\n  pointer-events: none;\n}\n\n.form-range:disabled::-webkit-slider-thumb {\n  background-color: #adb5bd;\n}\n\n.form-range:disabled::-moz-range-thumb {\n  background-color: #adb5bd;\n}\n\n.form-floating {\n  position: relative;\n}\n\n.form-floating > .form-control,\n.form-floating > .form-select {\n  height: calc(3.5rem + 2px);\n  line-height: 1.25;\n}\n\n.form-floating > label {\n  position: absolute;\n  top: 0;\n  left: 0;\n  height: 100%;\n  padding: 1rem 0.5rem;\n  pointer-events: none;\n  border: 1px solid transparent;\n  -webkit-transform-origin: 0 0;\n  transform-origin: 0 0;\n  transition: opacity 0.1s ease-in-out, -webkit-transform 0.1s ease-in-out;\n  transition: opacity 0.1s ease-in-out, transform 0.1s ease-in-out;\n  transition: opacity 0.1s ease-in-out, transform 0.1s ease-in-out, -webkit-transform 0.1s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .form-floating > label {\n    transition: none;\n  }\n}\n\n.form-floating > .form-control {\n  padding: 1rem 0.5rem;\n}\n\n.form-floating > .form-control::-webkit-input-placeholder {\n  color: transparent;\n}\n\n.form-floating > .form-control::-moz-placeholder {\n  color: transparent;\n}\n\n.form-floating > .form-control:-ms-input-placeholder {\n  color: transparent;\n}\n\n.form-floating > .form-control::-ms-input-placeholder {\n  color: transparent;\n}\n\n.form-floating > .form-control::placeholder {\n  color: transparent;\n}\n\n.form-floating > .form-control:not(:-moz-placeholder-shown) {\n  padding-top: 1.625rem;\n  padding-bottom: 0.625rem;\n}\n\n.form-floating > .form-control:not(:-ms-input-placeholder) {\n  padding-top: 1.625rem;\n  padding-bottom: 0.625rem;\n}\n\n.form-floating > .form-control:focus, .form-floating > .form-control:not(:placeholder-shown) {\n  padding-top: 1.625rem;\n  padding-bottom: 0.625rem;\n}\n\n.form-floating > .form-control:-webkit-autofill {\n  padding-top: 1.625rem;\n  padding-bottom: 0.625rem;\n}\n\n.form-floating > .form-select {\n  padding-top: 1.625rem;\n  padding-bottom: 0.625rem;\n}\n\n.form-floating > .form-control:not(:-moz-placeholder-shown) ~ label {\n  opacity: 0.65;\n  transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);\n}\n\n.form-floating > .form-control:not(:-ms-input-placeholder) ~ label {\n  opacity: 0.65;\n  transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);\n}\n\n.form-floating > .form-control:focus ~ label,\n.form-floating > .form-control:not(:placeholder-shown) ~ label,\n.form-floating > .form-select ~ label {\n  opacity: 0.65;\n  -webkit-transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);\n  transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);\n}\n\n.form-floating > .form-control:-webkit-autofill ~ label {\n  opacity: 0.65;\n  -webkit-transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);\n  transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);\n}\n\n.input-group {\n  position: relative;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n  flex-wrap: wrap;\n  -ms-flex-align: stretch;\n  align-items: stretch;\n  width: 100%;\n}\n\n.input-group > .form-control,\n.input-group > .form-select {\n  position: relative;\n  -ms-flex: 1 1 auto;\n  flex: 1 1 auto;\n  width: 1%;\n  min-width: 0;\n}\n\n.input-group > .form-control:focus,\n.input-group > .form-select:focus {\n  z-index: 3;\n}\n\n.input-group .btn {\n  position: relative;\n  z-index: 2;\n}\n\n.input-group .btn:focus {\n  z-index: 3;\n}\n\n.input-group-text {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-align: center;\n  align-items: center;\n  padding: 0.375rem 0.5rem;\n  font-size: 1rem;\n  font-weight: 400;\n  line-height: 1.5;\n  color: #222;\n  text-align: center;\n  white-space: nowrap;\n  background-color: #eee;\n  border: 1px solid #ccc;\n  border-radius: 0;\n}\n\n.input-group-lg > .form-control,\n.input-group-lg > .form-select,\n.input-group-lg > .input-group-text,\n.input-group-lg > .btn {\n  padding: 0.5rem 1rem;\n  font-size: 1.25rem;\n  border-radius: 0;\n}\n\n.input-group-sm > .form-control,\n.input-group-sm > .form-select,\n.input-group-sm > .input-group-text,\n.input-group-sm > .btn {\n  padding: 0.25rem 0.5rem;\n  font-size: 0.875rem;\n  border-radius: 0;\n}\n\n.input-group-lg > .form-select,\n.input-group-sm > .form-select {\n  padding-right: 2rem;\n}\n\n.input-group:not(.has-validation) > :not(:last-child):not(.dropdown-toggle):not(.dropdown-menu),\n.input-group:not(.has-validation) > .dropdown-toggle:nth-last-child(n + 3) {\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n}\n\n.input-group.has-validation > :nth-last-child(n + 3):not(.dropdown-toggle):not(.dropdown-menu),\n.input-group.has-validation > .dropdown-toggle:nth-last-child(n + 4) {\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n}\n\n.input-group > :not(:first-child):not(.dropdown-menu):not(.valid-tooltip):not(.valid-feedback):not(.invalid-tooltip):not(.invalid-feedback) {\n  margin-left: -1px;\n  border-top-left-radius: 0;\n  border-bottom-left-radius: 0;\n}\n\n.valid-feedback {\n  display: none;\n  width: 100%;\n  margin-top: 0.25rem;\n  font-size: 0.875em;\n  color: #43ac6a;\n}\n\n.valid-tooltip {\n  position: absolute;\n  top: 100%;\n  z-index: 5;\n  display: none;\n  max-width: 100%;\n  padding: 0.25rem 0.5rem;\n  margin-top: .1rem;\n  font-size: 0.875rem;\n  color: #fff;\n  background-color: rgba(67, 172, 106, 0.9);\n  border-radius: 0;\n}\n\n.was-validated :valid ~ .valid-feedback,\n.was-validated :valid ~ .valid-tooltip,\n.is-valid ~ .valid-feedback,\n.is-valid ~ .valid-tooltip {\n  display: block;\n}\n\n.was-validated .form-control:valid, .form-control.is-valid {\n  border-color: #43ac6a;\n  padding-right: calc(1.5em + 0.75rem);\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%2343ac6a' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e\");\n  background-repeat: no-repeat;\n  background-position: right calc(0.375em + 0.1875rem) center;\n  background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n\n.was-validated .form-control:valid:focus, .form-control.is-valid:focus {\n  border-color: #43ac6a;\n  box-shadow: 0 0 0 0.25rem rgba(67, 172, 106, 0.25);\n}\n\n.was-validated textarea.form-control:valid, textarea.form-control.is-valid {\n  padding-right: calc(1.5em + 0.75rem);\n  background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem);\n}\n\n.was-validated .form-select:valid, .form-select.is-valid {\n  border-color: #43ac6a;\n}\n\n.was-validated .form-select:valid:not([multiple]):not([size]), .was-validated .form-select:valid:not([multiple])[size=\"1\"], .form-select.is-valid:not([multiple]):not([size]), .form-select.is-valid:not([multiple])[size=\"1\"] {\n  padding-right: 2.75rem;\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23333' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e\"), url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%2343ac6a' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e\");\n  background-position: right 0.5rem center, center right 1.5rem;\n  background-size: 16px 12px, calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n\n.was-validated .form-select:valid:focus, .form-select.is-valid:focus {\n  border-color: #43ac6a;\n  box-shadow: 0 0 0 0.25rem rgba(67, 172, 106, 0.25);\n}\n\n.was-validated .form-check-input:valid, .form-check-input.is-valid {\n  border-color: #43ac6a;\n}\n\n.was-validated .form-check-input:valid:checked, .form-check-input.is-valid:checked {\n  background-color: #43ac6a;\n}\n\n.was-validated .form-check-input:valid:focus, .form-check-input.is-valid:focus {\n  box-shadow: 0 0 0 0.25rem rgba(67, 172, 106, 0.25);\n}\n\n.was-validated .form-check-input:valid ~ .form-check-label, .form-check-input.is-valid ~ .form-check-label {\n  color: #43ac6a;\n}\n\n.form-check-inline .form-check-input ~ .valid-feedback {\n  margin-left: .5em;\n}\n\n.was-validated .input-group .form-control:valid, .input-group .form-control.is-valid, .was-validated\n.input-group .form-select:valid,\n.input-group .form-select.is-valid {\n  z-index: 1;\n}\n\n.was-validated .input-group .form-control:valid:focus, .input-group .form-control.is-valid:focus, .was-validated\n.input-group .form-select:valid:focus,\n.input-group .form-select.is-valid:focus {\n  z-index: 3;\n}\n\n.invalid-feedback {\n  display: none;\n  width: 100%;\n  margin-top: 0.25rem;\n  font-size: 0.875em;\n  color: #f04124;\n}\n\n.invalid-tooltip {\n  position: absolute;\n  top: 100%;\n  z-index: 5;\n  display: none;\n  max-width: 100%;\n  padding: 0.25rem 0.5rem;\n  margin-top: .1rem;\n  font-size: 0.875rem;\n  color: #fff;\n  background-color: rgba(240, 65, 36, 0.9);\n  border-radius: 0;\n}\n\n.was-validated :invalid ~ .invalid-feedback,\n.was-validated :invalid ~ .invalid-tooltip,\n.is-invalid ~ .invalid-feedback,\n.is-invalid ~ .invalid-tooltip {\n  display: block;\n}\n\n.was-validated .form-control:invalid, .form-control.is-invalid {\n  border-color: #f04124;\n  padding-right: calc(1.5em + 0.75rem);\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23f04124'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23f04124' stroke='none'/%3e%3c/svg%3e\");\n  background-repeat: no-repeat;\n  background-position: right calc(0.375em + 0.1875rem) center;\n  background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n\n.was-validated .form-control:invalid:focus, .form-control.is-invalid:focus {\n  border-color: #f04124;\n  box-shadow: 0 0 0 0.25rem rgba(240, 65, 36, 0.25);\n}\n\n.was-validated textarea.form-control:invalid, textarea.form-control.is-invalid {\n  padding-right: calc(1.5em + 0.75rem);\n  background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem);\n}\n\n.was-validated .form-select:invalid, .form-select.is-invalid {\n  border-color: #f04124;\n}\n\n.was-validated .form-select:invalid:not([multiple]):not([size]), .was-validated .form-select:invalid:not([multiple])[size=\"1\"], .form-select.is-invalid:not([multiple]):not([size]), .form-select.is-invalid:not([multiple])[size=\"1\"] {\n  padding-right: 2.75rem;\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23333' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e\"), url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23f04124'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23f04124' stroke='none'/%3e%3c/svg%3e\");\n  background-position: right 0.5rem center, center right 1.5rem;\n  background-size: 16px 12px, calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n\n.was-validated .form-select:invalid:focus, .form-select.is-invalid:focus {\n  border-color: #f04124;\n  box-shadow: 0 0 0 0.25rem rgba(240, 65, 36, 0.25);\n}\n\n.was-validated .form-check-input:invalid, .form-check-input.is-invalid {\n  border-color: #f04124;\n}\n\n.was-validated .form-check-input:invalid:checked, .form-check-input.is-invalid:checked {\n  background-color: #f04124;\n}\n\n.was-validated .form-check-input:invalid:focus, .form-check-input.is-invalid:focus {\n  box-shadow: 0 0 0 0.25rem rgba(240, 65, 36, 0.25);\n}\n\n.was-validated .form-check-input:invalid ~ .form-check-label, .form-check-input.is-invalid ~ .form-check-label {\n  color: #f04124;\n}\n\n.form-check-inline .form-check-input ~ .invalid-feedback {\n  margin-left: .5em;\n}\n\n.was-validated .input-group .form-control:invalid, .input-group .form-control.is-invalid, .was-validated\n.input-group .form-select:invalid,\n.input-group .form-select.is-invalid {\n  z-index: 2;\n}\n\n.was-validated .input-group .form-control:invalid:focus, .input-group .form-control.is-invalid:focus, .was-validated\n.input-group .form-select:invalid:focus,\n.input-group .form-select.is-invalid:focus {\n  z-index: 3;\n}\n\n.btn {\n  display: inline-block;\n  font-weight: 300;\n  line-height: 1.5;\n  color: #222;\n  text-align: center;\n  text-decoration: none;\n  vertical-align: middle;\n  cursor: pointer;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  user-select: none;\n  background-color: transparent;\n  border: 1px solid transparent;\n  padding: 0.375rem 0.5rem;\n  font-size: 1rem;\n  border-radius: 0;\n  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .btn {\n    transition: none;\n  }\n}\n\n.btn:hover {\n  color: #222;\n}\n\n.btn-check:focus + .btn, .btn:focus {\n  outline: 0;\n  box-shadow: 0 0 0 0.25rem rgba(0, 140, 186, 0.25);\n}\n\n.btn:disabled, .btn.disabled,\nfieldset:disabled .btn {\n  pointer-events: none;\n  opacity: 0.65;\n}\n\n.btn-primary {\n  color: #fff;\n  background-color: #008cba;\n  border-color: #008cba;\n}\n\n.btn-primary:hover {\n  color: #fff;\n  background-color: #00779e;\n  border-color: #007095;\n}\n\n.btn-check:focus + .btn-primary, .btn-primary:focus {\n  color: #fff;\n  background-color: #00779e;\n  border-color: #007095;\n  box-shadow: 0 0 0 0.25rem rgba(38, 157, 196, 0.5);\n}\n\n.btn-check:checked + .btn-primary,\n.btn-check:active + .btn-primary, .btn-primary:active, .btn-primary.active,\n.show > .btn-primary.dropdown-toggle {\n  color: #fff;\n  background-color: #007095;\n  border-color: #00698c;\n}\n\n.btn-check:checked + .btn-primary:focus,\n.btn-check:active + .btn-primary:focus, .btn-primary:active:focus, .btn-primary.active:focus,\n.show > .btn-primary.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.25rem rgba(38, 157, 196, 0.5);\n}\n\n.btn-primary:disabled, .btn-primary.disabled {\n  color: #fff;\n  background-color: #008cba;\n  border-color: #008cba;\n}\n\n.btn-secondary {\n  color: #000;\n  background-color: #eee;\n  border-color: #eee;\n}\n\n.btn-secondary:hover {\n  color: #000;\n  background-color: #f1f1f1;\n  border-color: #f0f0f0;\n}\n\n.btn-check:focus + .btn-secondary, .btn-secondary:focus {\n  color: #000;\n  background-color: #f1f1f1;\n  border-color: #f0f0f0;\n  box-shadow: 0 0 0 0.25rem rgba(202, 202, 202, 0.5);\n}\n\n.btn-check:checked + .btn-secondary,\n.btn-check:active + .btn-secondary, .btn-secondary:active, .btn-secondary.active,\n.show > .btn-secondary.dropdown-toggle {\n  color: #000;\n  background-color: #f1f1f1;\n  border-color: #f0f0f0;\n}\n\n.btn-check:checked + .btn-secondary:focus,\n.btn-check:active + .btn-secondary:focus, .btn-secondary:active:focus, .btn-secondary.active:focus,\n.show > .btn-secondary.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.25rem rgba(202, 202, 202, 0.5);\n}\n\n.btn-secondary:disabled, .btn-secondary.disabled {\n  color: #000;\n  background-color: #eee;\n  border-color: #eee;\n}\n\n.btn-success {\n  color: #fff;\n  background-color: #43ac6a;\n  border-color: #43ac6a;\n}\n\n.btn-success:hover {\n  color: #fff;\n  background-color: #39925a;\n  border-color: #368a55;\n}\n\n.btn-check:focus + .btn-success, .btn-success:focus {\n  color: #fff;\n  background-color: #39925a;\n  border-color: #368a55;\n  box-shadow: 0 0 0 0.25rem rgba(95, 184, 128, 0.5);\n}\n\n.btn-check:checked + .btn-success,\n.btn-check:active + .btn-success, .btn-success:active, .btn-success.active,\n.show > .btn-success.dropdown-toggle {\n  color: #fff;\n  background-color: #368a55;\n  border-color: #328150;\n}\n\n.btn-check:checked + .btn-success:focus,\n.btn-check:active + .btn-success:focus, .btn-success:active:focus, .btn-success.active:focus,\n.show > .btn-success.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.25rem rgba(95, 184, 128, 0.5);\n}\n\n.btn-success:disabled, .btn-success.disabled {\n  color: #fff;\n  background-color: #43ac6a;\n  border-color: #43ac6a;\n}\n\n.btn-info {\n  color: #fff;\n  background-color: #5bc0de;\n  border-color: #5bc0de;\n}\n\n.btn-info:hover {\n  color: #fff;\n  background-color: #4da3bd;\n  border-color: #499ab2;\n}\n\n.btn-check:focus + .btn-info, .btn-info:focus {\n  color: #fff;\n  background-color: #4da3bd;\n  border-color: #499ab2;\n  box-shadow: 0 0 0 0.25rem rgba(116, 201, 227, 0.5);\n}\n\n.btn-check:checked + .btn-info,\n.btn-check:active + .btn-info, .btn-info:active, .btn-info.active,\n.show > .btn-info.dropdown-toggle {\n  color: #fff;\n  background-color: #499ab2;\n  border-color: #4490a7;\n}\n\n.btn-check:checked + .btn-info:focus,\n.btn-check:active + .btn-info:focus, .btn-info:active:focus, .btn-info.active:focus,\n.show > .btn-info.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.25rem rgba(116, 201, 227, 0.5);\n}\n\n.btn-info:disabled, .btn-info.disabled {\n  color: #fff;\n  background-color: #5bc0de;\n  border-color: #5bc0de;\n}\n\n.btn-warning {\n  color: #fff;\n  background-color: #e99002;\n  border-color: #e99002;\n}\n\n.btn-warning:hover {\n  color: #fff;\n  background-color: #c67a02;\n  border-color: #ba7302;\n}\n\n.btn-check:focus + .btn-warning, .btn-warning:focus {\n  color: #fff;\n  background-color: #c67a02;\n  border-color: #ba7302;\n  box-shadow: 0 0 0 0.25rem rgba(236, 161, 40, 0.5);\n}\n\n.btn-check:checked + .btn-warning,\n.btn-check:active + .btn-warning, .btn-warning:active, .btn-warning.active,\n.show > .btn-warning.dropdown-toggle {\n  color: #fff;\n  background-color: #ba7302;\n  border-color: #af6c02;\n}\n\n.btn-check:checked + .btn-warning:focus,\n.btn-check:active + .btn-warning:focus, .btn-warning:active:focus, .btn-warning.active:focus,\n.show > .btn-warning.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.25rem rgba(236, 161, 40, 0.5);\n}\n\n.btn-warning:disabled, .btn-warning.disabled {\n  color: #fff;\n  background-color: #e99002;\n  border-color: #e99002;\n}\n\n.btn-danger {\n  color: #fff;\n  background-color: #f04124;\n  border-color: #f04124;\n}\n\n.btn-danger:hover {\n  color: #fff;\n  background-color: #cc371f;\n  border-color: #c0341d;\n}\n\n.btn-check:focus + .btn-danger, .btn-danger:focus {\n  color: #fff;\n  background-color: #cc371f;\n  border-color: #c0341d;\n  box-shadow: 0 0 0 0.25rem rgba(242, 94, 69, 0.5);\n}\n\n.btn-check:checked + .btn-danger,\n.btn-check:active + .btn-danger, .btn-danger:active, .btn-danger.active,\n.show > .btn-danger.dropdown-toggle {\n  color: #fff;\n  background-color: #c0341d;\n  border-color: #b4311b;\n}\n\n.btn-check:checked + .btn-danger:focus,\n.btn-check:active + .btn-danger:focus, .btn-danger:active:focus, .btn-danger.active:focus,\n.show > .btn-danger.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.25rem rgba(242, 94, 69, 0.5);\n}\n\n.btn-danger:disabled, .btn-danger.disabled {\n  color: #fff;\n  background-color: #f04124;\n  border-color: #f04124;\n}\n\n.btn-light {\n  color: #000;\n  background-color: #eee;\n  border-color: #eee;\n}\n\n.btn-light:hover {\n  color: #000;\n  background-color: #f1f1f1;\n  border-color: #f0f0f0;\n}\n\n.btn-check:focus + .btn-light, .btn-light:focus {\n  color: #000;\n  background-color: #f1f1f1;\n  border-color: #f0f0f0;\n  box-shadow: 0 0 0 0.25rem rgba(202, 202, 202, 0.5);\n}\n\n.btn-check:checked + .btn-light,\n.btn-check:active + .btn-light, .btn-light:active, .btn-light.active,\n.show > .btn-light.dropdown-toggle {\n  color: #000;\n  background-color: #f1f1f1;\n  border-color: #f0f0f0;\n}\n\n.btn-check:checked + .btn-light:focus,\n.btn-check:active + .btn-light:focus, .btn-light:active:focus, .btn-light.active:focus,\n.show > .btn-light.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.25rem rgba(202, 202, 202, 0.5);\n}\n\n.btn-light:disabled, .btn-light.disabled {\n  color: #000;\n  background-color: #eee;\n  border-color: #eee;\n}\n\n.btn-dark {\n  color: #fff;\n  background-color: #222;\n  border-color: #222;\n}\n\n.btn-dark:hover {\n  color: #fff;\n  background-color: #1d1d1d;\n  border-color: #1b1b1b;\n}\n\n.btn-check:focus + .btn-dark, .btn-dark:focus {\n  color: #fff;\n  background-color: #1d1d1d;\n  border-color: #1b1b1b;\n  box-shadow: 0 0 0 0.25rem rgba(67, 67, 67, 0.5);\n}\n\n.btn-check:checked + .btn-dark,\n.btn-check:active + .btn-dark, .btn-dark:active, .btn-dark.active,\n.show > .btn-dark.dropdown-toggle {\n  color: #fff;\n  background-color: #1b1b1b;\n  border-color: #1a1a1a;\n}\n\n.btn-check:checked + .btn-dark:focus,\n.btn-check:active + .btn-dark:focus, .btn-dark:active:focus, .btn-dark.active:focus,\n.show > .btn-dark.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.25rem rgba(67, 67, 67, 0.5);\n}\n\n.btn-dark:disabled, .btn-dark.disabled {\n  color: #fff;\n  background-color: #222;\n  border-color: #222;\n}\n\n.btn-outline-primary {\n  color: #008cba;\n  border-color: #008cba;\n}\n\n.btn-outline-primary:hover {\n  color: #fff;\n  background-color: #008cba;\n  border-color: #008cba;\n}\n\n.btn-check:focus + .btn-outline-primary, .btn-outline-primary:focus {\n  box-shadow: 0 0 0 0.25rem rgba(0, 140, 186, 0.5);\n}\n\n.btn-check:checked + .btn-outline-primary,\n.btn-check:active + .btn-outline-primary, .btn-outline-primary:active, .btn-outline-primary.active, .btn-outline-primary.dropdown-toggle.show {\n  color: #fff;\n  background-color: #008cba;\n  border-color: #008cba;\n}\n\n.btn-check:checked + .btn-outline-primary:focus,\n.btn-check:active + .btn-outline-primary:focus, .btn-outline-primary:active:focus, .btn-outline-primary.active:focus, .btn-outline-primary.dropdown-toggle.show:focus {\n  box-shadow: 0 0 0 0.25rem rgba(0, 140, 186, 0.5);\n}\n\n.btn-outline-primary:disabled, .btn-outline-primary.disabled {\n  color: #008cba;\n  background-color: transparent;\n}\n\n.btn-outline-secondary {\n  color: #eee;\n  border-color: #eee;\n}\n\n.btn-outline-secondary:hover {\n  color: #000;\n  background-color: #eee;\n  border-color: #eee;\n}\n\n.btn-check:focus + .btn-outline-secondary, .btn-outline-secondary:focus {\n  box-shadow: 0 0 0 0.25rem rgba(238, 238, 238, 0.5);\n}\n\n.btn-check:checked + .btn-outline-secondary,\n.btn-check:active + .btn-outline-secondary, .btn-outline-secondary:active, .btn-outline-secondary.active, .btn-outline-secondary.dropdown-toggle.show {\n  color: #000;\n  background-color: #eee;\n  border-color: #eee;\n}\n\n.btn-check:checked + .btn-outline-secondary:focus,\n.btn-check:active + .btn-outline-secondary:focus, .btn-outline-secondary:active:focus, .btn-outline-secondary.active:focus, .btn-outline-secondary.dropdown-toggle.show:focus {\n  box-shadow: 0 0 0 0.25rem rgba(238, 238, 238, 0.5);\n}\n\n.btn-outline-secondary:disabled, .btn-outline-secondary.disabled {\n  color: #eee;\n  background-color: transparent;\n}\n\n.btn-outline-success {\n  color: #43ac6a;\n  border-color: #43ac6a;\n}\n\n.btn-outline-success:hover {\n  color: #fff;\n  background-color: #43ac6a;\n  border-color: #43ac6a;\n}\n\n.btn-check:focus + .btn-outline-success, .btn-outline-success:focus {\n  box-shadow: 0 0 0 0.25rem rgba(67, 172, 106, 0.5);\n}\n\n.btn-check:checked + .btn-outline-success,\n.btn-check:active + .btn-outline-success, .btn-outline-success:active, .btn-outline-success.active, .btn-outline-success.dropdown-toggle.show {\n  color: #fff;\n  background-color: #43ac6a;\n  border-color: #43ac6a;\n}\n\n.btn-check:checked + .btn-outline-success:focus,\n.btn-check:active + .btn-outline-success:focus, .btn-outline-success:active:focus, .btn-outline-success.active:focus, .btn-outline-success.dropdown-toggle.show:focus {\n  box-shadow: 0 0 0 0.25rem rgba(67, 172, 106, 0.5);\n}\n\n.btn-outline-success:disabled, .btn-outline-success.disabled {\n  color: #43ac6a;\n  background-color: transparent;\n}\n\n.btn-outline-info {\n  color: #5bc0de;\n  border-color: #5bc0de;\n}\n\n.btn-outline-info:hover {\n  color: #fff;\n  background-color: #5bc0de;\n  border-color: #5bc0de;\n}\n\n.btn-check:focus + .btn-outline-info, .btn-outline-info:focus {\n  box-shadow: 0 0 0 0.25rem rgba(91, 192, 222, 0.5);\n}\n\n.btn-check:checked + .btn-outline-info,\n.btn-check:active + .btn-outline-info, .btn-outline-info:active, .btn-outline-info.active, .btn-outline-info.dropdown-toggle.show {\n  color: #fff;\n  background-color: #5bc0de;\n  border-color: #5bc0de;\n}\n\n.btn-check:checked + .btn-outline-info:focus,\n.btn-check:active + .btn-outline-info:focus, .btn-outline-info:active:focus, .btn-outline-info.active:focus, .btn-outline-info.dropdown-toggle.show:focus {\n  box-shadow: 0 0 0 0.25rem rgba(91, 192, 222, 0.5);\n}\n\n.btn-outline-info:disabled, .btn-outline-info.disabled {\n  color: #5bc0de;\n  background-color: transparent;\n}\n\n.btn-outline-warning {\n  color: #e99002;\n  border-color: #e99002;\n}\n\n.btn-outline-warning:hover {\n  color: #fff;\n  background-color: #e99002;\n  border-color: #e99002;\n}\n\n.btn-check:focus + .btn-outline-warning, .btn-outline-warning:focus {\n  box-shadow: 0 0 0 0.25rem rgba(233, 144, 2, 0.5);\n}\n\n.btn-check:checked + .btn-outline-warning,\n.btn-check:active + .btn-outline-warning, .btn-outline-warning:active, .btn-outline-warning.active, .btn-outline-warning.dropdown-toggle.show {\n  color: #fff;\n  background-color: #e99002;\n  border-color: #e99002;\n}\n\n.btn-check:checked + .btn-outline-warning:focus,\n.btn-check:active + .btn-outline-warning:focus, .btn-outline-warning:active:focus, .btn-outline-warning.active:focus, .btn-outline-warning.dropdown-toggle.show:focus {\n  box-shadow: 0 0 0 0.25rem rgba(233, 144, 2, 0.5);\n}\n\n.btn-outline-warning:disabled, .btn-outline-warning.disabled {\n  color: #e99002;\n  background-color: transparent;\n}\n\n.btn-outline-danger {\n  color: #f04124;\n  border-color: #f04124;\n}\n\n.btn-outline-danger:hover {\n  color: #fff;\n  background-color: #f04124;\n  border-color: #f04124;\n}\n\n.btn-check:focus + .btn-outline-danger, .btn-outline-danger:focus {\n  box-shadow: 0 0 0 0.25rem rgba(240, 65, 36, 0.5);\n}\n\n.btn-check:checked + .btn-outline-danger,\n.btn-check:active + .btn-outline-danger, .btn-outline-danger:active, .btn-outline-danger.active, .btn-outline-danger.dropdown-toggle.show {\n  color: #fff;\n  background-color: #f04124;\n  border-color: #f04124;\n}\n\n.btn-check:checked + .btn-outline-danger:focus,\n.btn-check:active + .btn-outline-danger:focus, .btn-outline-danger:active:focus, .btn-outline-danger.active:focus, .btn-outline-danger.dropdown-toggle.show:focus {\n  box-shadow: 0 0 0 0.25rem rgba(240, 65, 36, 0.5);\n}\n\n.btn-outline-danger:disabled, .btn-outline-danger.disabled {\n  color: #f04124;\n  background-color: transparent;\n}\n\n.btn-outline-light {\n  color: #eee;\n  border-color: #eee;\n}\n\n.btn-outline-light:hover {\n  color: #000;\n  background-color: #eee;\n  border-color: #eee;\n}\n\n.btn-check:focus + .btn-outline-light, .btn-outline-light:focus {\n  box-shadow: 0 0 0 0.25rem rgba(238, 238, 238, 0.5);\n}\n\n.btn-check:checked + .btn-outline-light,\n.btn-check:active + .btn-outline-light, .btn-outline-light:active, .btn-outline-light.active, .btn-outline-light.dropdown-toggle.show {\n  color: #000;\n  background-color: #eee;\n  border-color: #eee;\n}\n\n.btn-check:checked + .btn-outline-light:focus,\n.btn-check:active + .btn-outline-light:focus, .btn-outline-light:active:focus, .btn-outline-light.active:focus, .btn-outline-light.dropdown-toggle.show:focus {\n  box-shadow: 0 0 0 0.25rem rgba(238, 238, 238, 0.5);\n}\n\n.btn-outline-light:disabled, .btn-outline-light.disabled {\n  color: #eee;\n  background-color: transparent;\n}\n\n.btn-outline-dark {\n  color: #222;\n  border-color: #222;\n}\n\n.btn-outline-dark:hover {\n  color: #fff;\n  background-color: #222;\n  border-color: #222;\n}\n\n.btn-check:focus + .btn-outline-dark, .btn-outline-dark:focus {\n  box-shadow: 0 0 0 0.25rem rgba(34, 34, 34, 0.5);\n}\n\n.btn-check:checked + .btn-outline-dark,\n.btn-check:active + .btn-outline-dark, .btn-outline-dark:active, .btn-outline-dark.active, .btn-outline-dark.dropdown-toggle.show {\n  color: #fff;\n  background-color: #222;\n  border-color: #222;\n}\n\n.btn-check:checked + .btn-outline-dark:focus,\n.btn-check:active + .btn-outline-dark:focus, .btn-outline-dark:active:focus, .btn-outline-dark.active:focus, .btn-outline-dark.dropdown-toggle.show:focus {\n  box-shadow: 0 0 0 0.25rem rgba(34, 34, 34, 0.5);\n}\n\n.btn-outline-dark:disabled, .btn-outline-dark.disabled {\n  color: #222;\n  background-color: transparent;\n}\n\n.btn-link {\n  font-weight: 400;\n  color: #008cba;\n  text-decoration: underline;\n}\n\n.btn-link:hover {\n  color: #007095;\n}\n\n.btn-link:disabled, .btn-link.disabled {\n  color: #888;\n}\n\n.btn-lg, .btn-group-lg > .btn {\n  padding: 0.5rem 1rem;\n  font-size: 1.25rem;\n  border-radius: 0;\n}\n\n.btn-sm, .btn-group-sm > .btn {\n  padding: 0.25rem 0.5rem;\n  font-size: 0.875rem;\n  border-radius: 0;\n}\n\n.fade {\n  transition: opacity 0.15s linear;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .fade {\n    transition: none;\n  }\n}\n\n.fade:not(.show) {\n  opacity: 0;\n}\n\n.collapse:not(.show) {\n  display: none;\n}\n\n.collapsing {\n  height: 0;\n  overflow: hidden;\n  transition: height 0.35s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .collapsing {\n    transition: none;\n  }\n}\n\n.collapsing.collapse-horizontal {\n  width: 0;\n  height: auto;\n  transition: width 0.35s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .collapsing.collapse-horizontal {\n    transition: none;\n  }\n}\n\n.dropup,\n.dropend,\n.dropdown,\n.dropstart {\n  position: relative;\n}\n\n.dropdown-toggle {\n  white-space: nowrap;\n}\n\n.dropdown-toggle::after {\n  display: inline-block;\n  margin-left: 0.255em;\n  vertical-align: 0.255em;\n  content: \"\";\n  border-top: 0.3em solid;\n  border-right: 0.3em solid transparent;\n  border-bottom: 0;\n  border-left: 0.3em solid transparent;\n}\n\n.dropdown-toggle:empty::after {\n  margin-left: 0;\n}\n\n.dropdown-menu {\n  position: absolute;\n  z-index: 1000;\n  display: none;\n  min-width: 10rem;\n  padding: 0.5rem 0;\n  margin: 0;\n  font-size: 1rem;\n  color: #222;\n  text-align: left;\n  list-style: none;\n  background-color: #fff;\n  background-clip: padding-box;\n  border: 1px solid rgba(0, 0, 0, 0.1);\n  border-radius: 0;\n}\n\n.dropdown-menu[data-bs-popper] {\n  top: 100%;\n  left: 0;\n  margin-top: 0.125rem;\n}\n\n.dropdown-menu-start {\n  --bs-position: start;\n}\n\n.dropdown-menu-start[data-bs-popper] {\n  right: auto;\n  left: 0;\n}\n\n.dropdown-menu-end {\n  --bs-position: end;\n}\n\n.dropdown-menu-end[data-bs-popper] {\n  right: 0;\n  left: auto;\n}\n\n@media (min-width: 576px) {\n  .dropdown-menu-sm-start {\n    --bs-position: start;\n  }\n  .dropdown-menu-sm-start[data-bs-popper] {\n    right: auto;\n    left: 0;\n  }\n  .dropdown-menu-sm-end {\n    --bs-position: end;\n  }\n  .dropdown-menu-sm-end[data-bs-popper] {\n    right: 0;\n    left: auto;\n  }\n}\n\n@media (min-width: 768px) {\n  .dropdown-menu-md-start {\n    --bs-position: start;\n  }\n  .dropdown-menu-md-start[data-bs-popper] {\n    right: auto;\n    left: 0;\n  }\n  .dropdown-menu-md-end {\n    --bs-position: end;\n  }\n  .dropdown-menu-md-end[data-bs-popper] {\n    right: 0;\n    left: auto;\n  }\n}\n\n@media (min-width: 992px) {\n  .dropdown-menu-lg-start {\n    --bs-position: start;\n  }\n  .dropdown-menu-lg-start[data-bs-popper] {\n    right: auto;\n    left: 0;\n  }\n  .dropdown-menu-lg-end {\n    --bs-position: end;\n  }\n  .dropdown-menu-lg-end[data-bs-popper] {\n    right: 0;\n    left: auto;\n  }\n}\n\n@media (min-width: 1200px) {\n  .dropdown-menu-xl-start {\n    --bs-position: start;\n  }\n  .dropdown-menu-xl-start[data-bs-popper] {\n    right: auto;\n    left: 0;\n  }\n  .dropdown-menu-xl-end {\n    --bs-position: end;\n  }\n  .dropdown-menu-xl-end[data-bs-popper] {\n    right: 0;\n    left: auto;\n  }\n}\n\n@media (min-width: 1400px) {\n  .dropdown-menu-xxl-start {\n    --bs-position: start;\n  }\n  .dropdown-menu-xxl-start[data-bs-popper] {\n    right: auto;\n    left: 0;\n  }\n  .dropdown-menu-xxl-end {\n    --bs-position: end;\n  }\n  .dropdown-menu-xxl-end[data-bs-popper] {\n    right: 0;\n    left: auto;\n  }\n}\n\n.dropup .dropdown-menu[data-bs-popper] {\n  top: auto;\n  bottom: 100%;\n  margin-top: 0;\n  margin-bottom: 0.125rem;\n}\n\n.dropup .dropdown-toggle::after {\n  display: inline-block;\n  margin-left: 0.255em;\n  vertical-align: 0.255em;\n  content: \"\";\n  border-top: 0;\n  border-right: 0.3em solid transparent;\n  border-bottom: 0.3em solid;\n  border-left: 0.3em solid transparent;\n}\n\n.dropup .dropdown-toggle:empty::after {\n  margin-left: 0;\n}\n\n.dropend .dropdown-menu[data-bs-popper] {\n  top: 0;\n  right: auto;\n  left: 100%;\n  margin-top: 0;\n  margin-left: 0.125rem;\n}\n\n.dropend .dropdown-toggle::after {\n  display: inline-block;\n  margin-left: 0.255em;\n  vertical-align: 0.255em;\n  content: \"\";\n  border-top: 0.3em solid transparent;\n  border-right: 0;\n  border-bottom: 0.3em solid transparent;\n  border-left: 0.3em solid;\n}\n\n.dropend .dropdown-toggle:empty::after {\n  margin-left: 0;\n}\n\n.dropend .dropdown-toggle::after {\n  vertical-align: 0;\n}\n\n.dropstart .dropdown-menu[data-bs-popper] {\n  top: 0;\n  right: 100%;\n  left: auto;\n  margin-top: 0;\n  margin-right: 0.125rem;\n}\n\n.dropstart .dropdown-toggle::after {\n  display: inline-block;\n  margin-left: 0.255em;\n  vertical-align: 0.255em;\n  content: \"\";\n}\n\n.dropstart .dropdown-toggle::after {\n  display: none;\n}\n\n.dropstart .dropdown-toggle::before {\n  display: inline-block;\n  margin-right: 0.255em;\n  vertical-align: 0.255em;\n  content: \"\";\n  border-top: 0.3em solid transparent;\n  border-right: 0.3em solid;\n  border-bottom: 0.3em solid transparent;\n}\n\n.dropstart .dropdown-toggle:empty::after {\n  margin-left: 0;\n}\n\n.dropstart .dropdown-toggle::before {\n  vertical-align: 0;\n}\n\n.dropdown-divider {\n  height: 0;\n  margin: 0.5rem 0;\n  overflow: hidden;\n  border-top: 1px solid rgba(0, 0, 0, 0.1);\n}\n\n.dropdown-item {\n  display: block;\n  width: 100%;\n  padding: 0.25rem 1rem;\n  clear: both;\n  font-weight: 400;\n  color: #222;\n  text-align: inherit;\n  text-decoration: none;\n  white-space: nowrap;\n  background-color: transparent;\n  border: 0;\n}\n\n.dropdown-item:hover, .dropdown-item:focus {\n  color: #1f1f1f;\n  background-color: #eee;\n}\n\n.dropdown-item.active, .dropdown-item:active {\n  color: #fff;\n  text-decoration: none;\n  background-color: #008cba;\n}\n\n.dropdown-item.disabled, .dropdown-item:disabled {\n  color: #adb5bd;\n  pointer-events: none;\n  background-color: transparent;\n}\n\n.dropdown-menu.show {\n  display: block;\n}\n\n.dropdown-header {\n  display: block;\n  padding: 0.5rem 1rem;\n  margin-bottom: 0;\n  font-size: 0.875rem;\n  color: #888;\n  white-space: nowrap;\n}\n\n.dropdown-item-text {\n  display: block;\n  padding: 0.25rem 1rem;\n  color: #222;\n}\n\n.dropdown-menu-dark {\n  color: #dee2e6;\n  background-color: #333;\n  border-color: rgba(0, 0, 0, 0.1);\n}\n\n.dropdown-menu-dark .dropdown-item {\n  color: #dee2e6;\n}\n\n.dropdown-menu-dark .dropdown-item:hover, .dropdown-menu-dark .dropdown-item:focus {\n  color: #fff;\n  background-color: rgba(255, 255, 255, 0.15);\n}\n\n.dropdown-menu-dark .dropdown-item.active, .dropdown-menu-dark .dropdown-item:active {\n  color: #fff;\n  background-color: #008cba;\n}\n\n.dropdown-menu-dark .dropdown-item.disabled, .dropdown-menu-dark .dropdown-item:disabled {\n  color: #adb5bd;\n}\n\n.dropdown-menu-dark .dropdown-divider {\n  border-color: rgba(0, 0, 0, 0.1);\n}\n\n.dropdown-menu-dark .dropdown-item-text {\n  color: #dee2e6;\n}\n\n.dropdown-menu-dark .dropdown-header {\n  color: #adb5bd;\n}\n\n.btn-group,\n.btn-group-vertical {\n  position: relative;\n  display: -ms-inline-flexbox;\n  display: inline-flex;\n  vertical-align: middle;\n}\n\n.btn-group > .btn,\n.btn-group-vertical > .btn {\n  position: relative;\n  -ms-flex: 1 1 auto;\n  flex: 1 1 auto;\n}\n\n.btn-group > .btn-check:checked + .btn,\n.btn-group > .btn-check:focus + .btn,\n.btn-group > .btn:hover,\n.btn-group > .btn:focus,\n.btn-group > .btn:active,\n.btn-group > .btn.active,\n.btn-group-vertical > .btn-check:checked + .btn,\n.btn-group-vertical > .btn-check:focus + .btn,\n.btn-group-vertical > .btn:hover,\n.btn-group-vertical > .btn:focus,\n.btn-group-vertical > .btn:active,\n.btn-group-vertical > .btn.active {\n  z-index: 1;\n}\n\n.btn-toolbar {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n  flex-wrap: wrap;\n  -ms-flex-pack: start;\n  justify-content: flex-start;\n}\n\n.btn-toolbar .input-group {\n  width: auto;\n}\n\n.btn-group > .btn:not(:first-child),\n.btn-group > .btn-group:not(:first-child) {\n  margin-left: -1px;\n}\n\n.btn-group > .btn:not(:last-child):not(.dropdown-toggle),\n.btn-group > .btn-group:not(:last-child) > .btn {\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n}\n\n.btn-group > .btn:nth-child(n + 3),\n.btn-group > :not(.btn-check) + .btn,\n.btn-group > .btn-group:not(:first-child) > .btn {\n  border-top-left-radius: 0;\n  border-bottom-left-radius: 0;\n}\n\n.dropdown-toggle-split {\n  padding-right: 0.375rem;\n  padding-left: 0.375rem;\n}\n\n.dropdown-toggle-split::after,\n.dropup .dropdown-toggle-split::after,\n.dropend .dropdown-toggle-split::after {\n  margin-left: 0;\n}\n\n.dropstart .dropdown-toggle-split::before {\n  margin-right: 0;\n}\n\n.btn-sm + .dropdown-toggle-split, .btn-group-sm > .btn + .dropdown-toggle-split {\n  padding-right: 0.375rem;\n  padding-left: 0.375rem;\n}\n\n.btn-lg + .dropdown-toggle-split, .btn-group-lg > .btn + .dropdown-toggle-split {\n  padding-right: 0.75rem;\n  padding-left: 0.75rem;\n}\n\n.btn-group-vertical {\n  -ms-flex-direction: column;\n  flex-direction: column;\n  -ms-flex-align: start;\n  align-items: flex-start;\n  -ms-flex-pack: center;\n  justify-content: center;\n}\n\n.btn-group-vertical > .btn,\n.btn-group-vertical > .btn-group {\n  width: 100%;\n}\n\n.btn-group-vertical > .btn:not(:first-child),\n.btn-group-vertical > .btn-group:not(:first-child) {\n  margin-top: -1px;\n}\n\n.btn-group-vertical > .btn:not(:last-child):not(.dropdown-toggle),\n.btn-group-vertical > .btn-group:not(:last-child) > .btn {\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 0;\n}\n\n.btn-group-vertical > .btn ~ .btn,\n.btn-group-vertical > .btn-group:not(:first-child) > .btn {\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n}\n\n.nav {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n  flex-wrap: wrap;\n  padding-left: 0;\n  margin-bottom: 0;\n  list-style: none;\n}\n\n.nav-link {\n  display: block;\n  padding: 0.5rem 1rem;\n  color: #008cba;\n  text-decoration: none;\n  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .nav-link {\n    transition: none;\n  }\n}\n\n.nav-link:hover, .nav-link:focus {\n  color: #007095;\n}\n\n.nav-link.disabled {\n  color: #ccc;\n  pointer-events: none;\n  cursor: default;\n}\n\n.nav-tabs {\n  border-bottom: 1px solid rgba(0, 0, 0, 0.1);\n}\n\n.nav-tabs .nav-link {\n  margin-bottom: -1px;\n  background: none;\n  border: 1px solid transparent;\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n}\n\n.nav-tabs .nav-link:hover, .nav-tabs .nav-link:focus {\n  border-color: rgba(0, 0, 0, 0.1);\n  isolation: isolate;\n}\n\n.nav-tabs .nav-link.disabled {\n  color: #ccc;\n  background-color: transparent;\n  border-color: transparent;\n}\n\n.nav-tabs .nav-link.active,\n.nav-tabs .nav-item.show .nav-link {\n  color: #495057;\n  background-color: #fff;\n  border-color: rgba(0, 0, 0, 0.1);\n}\n\n.nav-tabs .dropdown-menu {\n  margin-top: -1px;\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n}\n\n.nav-pills .nav-link {\n  background: none;\n  border: 0;\n  border-radius: 0;\n}\n\n.nav-pills .nav-link.active,\n.nav-pills .show > .nav-link {\n  color: #fff;\n  background-color: #008cba;\n}\n\n.nav-fill > .nav-link,\n.nav-fill .nav-item {\n  -ms-flex: 1 1 auto;\n  flex: 1 1 auto;\n  text-align: center;\n}\n\n.nav-justified > .nav-link,\n.nav-justified .nav-item {\n  -ms-flex-preferred-size: 0;\n  flex-basis: 0;\n  -ms-flex-positive: 1;\n  flex-grow: 1;\n  text-align: center;\n}\n\n.nav-fill .nav-item .nav-link,\n.nav-justified .nav-item .nav-link {\n  width: 100%;\n}\n\n.tab-content > .tab-pane {\n  display: none;\n}\n\n.tab-content > .active {\n  display: block;\n}\n\n.navbar {\n  position: relative;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n  flex-wrap: wrap;\n  -ms-flex-align: center;\n  align-items: center;\n  -ms-flex-pack: justify;\n  justify-content: space-between;\n  padding-top: 0.5rem;\n  padding-bottom: 0.5rem;\n}\n\n.navbar > .container,\n.navbar > .container-fluid, .navbar > .container-sm, .navbar > .container-md, .navbar > .container-lg, .navbar > .container-xl, .navbar > .container-xxl {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: inherit;\n  flex-wrap: inherit;\n  -ms-flex-align: center;\n  align-items: center;\n  -ms-flex-pack: justify;\n  justify-content: space-between;\n}\n\n.navbar-brand {\n  padding-top: 0.3125rem;\n  padding-bottom: 0.3125rem;\n  margin-right: 1rem;\n  font-size: 1.25rem;\n  text-decoration: none;\n  white-space: nowrap;\n}\n\n.navbar-nav {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  padding-left: 0;\n  margin-bottom: 0;\n  list-style: none;\n}\n\n.navbar-nav .nav-link {\n  padding-right: 0;\n  padding-left: 0;\n}\n\n.navbar-nav .dropdown-menu {\n  position: static;\n}\n\n.navbar-text {\n  padding-top: 0.5rem;\n  padding-bottom: 0.5rem;\n}\n\n.navbar-collapse {\n  -ms-flex-preferred-size: 100%;\n  flex-basis: 100%;\n  -ms-flex-positive: 1;\n  flex-grow: 1;\n  -ms-flex-align: center;\n  align-items: center;\n}\n\n.navbar-toggler {\n  padding: 0.25rem 0.75rem;\n  font-size: 1.25rem;\n  line-height: 1;\n  background-color: transparent;\n  border: 1px solid transparent;\n  border-radius: 0;\n  transition: box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .navbar-toggler {\n    transition: none;\n  }\n}\n\n.navbar-toggler:hover {\n  text-decoration: none;\n}\n\n.navbar-toggler:focus {\n  text-decoration: none;\n  outline: 0;\n  box-shadow: 0 0 0 0.25rem;\n}\n\n.navbar-toggler-icon {\n  display: inline-block;\n  width: 1.5em;\n  height: 1.5em;\n  vertical-align: middle;\n  background-repeat: no-repeat;\n  background-position: center;\n  background-size: 100%;\n}\n\n.navbar-nav-scroll {\n  max-height: var(--bs-scroll-height, 75vh);\n  overflow-y: auto;\n}\n\n@media (min-width: 576px) {\n  .navbar-expand-sm {\n    -ms-flex-wrap: nowrap;\n    flex-wrap: nowrap;\n    -ms-flex-pack: start;\n    justify-content: flex-start;\n  }\n  .navbar-expand-sm .navbar-nav {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .navbar-expand-sm .navbar-nav .dropdown-menu {\n    position: absolute;\n  }\n  .navbar-expand-sm .navbar-nav .nav-link {\n    padding-right: 0.5rem;\n    padding-left: 0.5rem;\n  }\n  .navbar-expand-sm .navbar-nav-scroll {\n    overflow: visible;\n  }\n  .navbar-expand-sm .navbar-collapse {\n    display: -ms-flexbox !important;\n    display: flex !important;\n    -ms-flex-preferred-size: auto;\n    flex-basis: auto;\n  }\n  .navbar-expand-sm .navbar-toggler {\n    display: none;\n  }\n  .navbar-expand-sm .offcanvas-header {\n    display: none;\n  }\n  .navbar-expand-sm .offcanvas {\n    position: inherit;\n    bottom: 0;\n    z-index: 1000;\n    -ms-flex-positive: 1;\n    flex-grow: 1;\n    visibility: visible !important;\n    background-color: transparent;\n    border-right: 0;\n    border-left: 0;\n    transition: none;\n    -webkit-transform: none;\n    transform: none;\n  }\n  .navbar-expand-sm .offcanvas-top,\n  .navbar-expand-sm .offcanvas-bottom {\n    height: auto;\n    border-top: 0;\n    border-bottom: 0;\n  }\n  .navbar-expand-sm .offcanvas-body {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-positive: 0;\n    flex-grow: 0;\n    padding: 0;\n    overflow-y: visible;\n  }\n}\n\n@media (min-width: 768px) {\n  .navbar-expand-md {\n    -ms-flex-wrap: nowrap;\n    flex-wrap: nowrap;\n    -ms-flex-pack: start;\n    justify-content: flex-start;\n  }\n  .navbar-expand-md .navbar-nav {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .navbar-expand-md .navbar-nav .dropdown-menu {\n    position: absolute;\n  }\n  .navbar-expand-md .navbar-nav .nav-link {\n    padding-right: 0.5rem;\n    padding-left: 0.5rem;\n  }\n  .navbar-expand-md .navbar-nav-scroll {\n    overflow: visible;\n  }\n  .navbar-expand-md .navbar-collapse {\n    display: -ms-flexbox !important;\n    display: flex !important;\n    -ms-flex-preferred-size: auto;\n    flex-basis: auto;\n  }\n  .navbar-expand-md .navbar-toggler {\n    display: none;\n  }\n  .navbar-expand-md .offcanvas-header {\n    display: none;\n  }\n  .navbar-expand-md .offcanvas {\n    position: inherit;\n    bottom: 0;\n    z-index: 1000;\n    -ms-flex-positive: 1;\n    flex-grow: 1;\n    visibility: visible !important;\n    background-color: transparent;\n    border-right: 0;\n    border-left: 0;\n    transition: none;\n    -webkit-transform: none;\n    transform: none;\n  }\n  .navbar-expand-md .offcanvas-top,\n  .navbar-expand-md .offcanvas-bottom {\n    height: auto;\n    border-top: 0;\n    border-bottom: 0;\n  }\n  .navbar-expand-md .offcanvas-body {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-positive: 0;\n    flex-grow: 0;\n    padding: 0;\n    overflow-y: visible;\n  }\n}\n\n@media (min-width: 992px) {\n  .navbar-expand-lg {\n    -ms-flex-wrap: nowrap;\n    flex-wrap: nowrap;\n    -ms-flex-pack: start;\n    justify-content: flex-start;\n  }\n  .navbar-expand-lg .navbar-nav {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .navbar-expand-lg .navbar-nav .dropdown-menu {\n    position: absolute;\n  }\n  .navbar-expand-lg .navbar-nav .nav-link {\n    padding-right: 0.5rem;\n    padding-left: 0.5rem;\n  }\n  .navbar-expand-lg .navbar-nav-scroll {\n    overflow: visible;\n  }\n  .navbar-expand-lg .navbar-collapse {\n    display: -ms-flexbox !important;\n    display: flex !important;\n    -ms-flex-preferred-size: auto;\n    flex-basis: auto;\n  }\n  .navbar-expand-lg .navbar-toggler {\n    display: none;\n  }\n  .navbar-expand-lg .offcanvas-header {\n    display: none;\n  }\n  .navbar-expand-lg .offcanvas {\n    position: inherit;\n    bottom: 0;\n    z-index: 1000;\n    -ms-flex-positive: 1;\n    flex-grow: 1;\n    visibility: visible !important;\n    background-color: transparent;\n    border-right: 0;\n    border-left: 0;\n    transition: none;\n    -webkit-transform: none;\n    transform: none;\n  }\n  .navbar-expand-lg .offcanvas-top,\n  .navbar-expand-lg .offcanvas-bottom {\n    height: auto;\n    border-top: 0;\n    border-bottom: 0;\n  }\n  .navbar-expand-lg .offcanvas-body {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-positive: 0;\n    flex-grow: 0;\n    padding: 0;\n    overflow-y: visible;\n  }\n}\n\n@media (min-width: 1200px) {\n  .navbar-expand-xl {\n    -ms-flex-wrap: nowrap;\n    flex-wrap: nowrap;\n    -ms-flex-pack: start;\n    justify-content: flex-start;\n  }\n  .navbar-expand-xl .navbar-nav {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .navbar-expand-xl .navbar-nav .dropdown-menu {\n    position: absolute;\n  }\n  .navbar-expand-xl .navbar-nav .nav-link {\n    padding-right: 0.5rem;\n    padding-left: 0.5rem;\n  }\n  .navbar-expand-xl .navbar-nav-scroll {\n    overflow: visible;\n  }\n  .navbar-expand-xl .navbar-collapse {\n    display: -ms-flexbox !important;\n    display: flex !important;\n    -ms-flex-preferred-size: auto;\n    flex-basis: auto;\n  }\n  .navbar-expand-xl .navbar-toggler {\n    display: none;\n  }\n  .navbar-expand-xl .offcanvas-header {\n    display: none;\n  }\n  .navbar-expand-xl .offcanvas {\n    position: inherit;\n    bottom: 0;\n    z-index: 1000;\n    -ms-flex-positive: 1;\n    flex-grow: 1;\n    visibility: visible !important;\n    background-color: transparent;\n    border-right: 0;\n    border-left: 0;\n    transition: none;\n    -webkit-transform: none;\n    transform: none;\n  }\n  .navbar-expand-xl .offcanvas-top,\n  .navbar-expand-xl .offcanvas-bottom {\n    height: auto;\n    border-top: 0;\n    border-bottom: 0;\n  }\n  .navbar-expand-xl .offcanvas-body {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-positive: 0;\n    flex-grow: 0;\n    padding: 0;\n    overflow-y: visible;\n  }\n}\n\n@media (min-width: 1400px) {\n  .navbar-expand-xxl {\n    -ms-flex-wrap: nowrap;\n    flex-wrap: nowrap;\n    -ms-flex-pack: start;\n    justify-content: flex-start;\n  }\n  .navbar-expand-xxl .navbar-nav {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .navbar-expand-xxl .navbar-nav .dropdown-menu {\n    position: absolute;\n  }\n  .navbar-expand-xxl .navbar-nav .nav-link {\n    padding-right: 0.5rem;\n    padding-left: 0.5rem;\n  }\n  .navbar-expand-xxl .navbar-nav-scroll {\n    overflow: visible;\n  }\n  .navbar-expand-xxl .navbar-collapse {\n    display: -ms-flexbox !important;\n    display: flex !important;\n    -ms-flex-preferred-size: auto;\n    flex-basis: auto;\n  }\n  .navbar-expand-xxl .navbar-toggler {\n    display: none;\n  }\n  .navbar-expand-xxl .offcanvas-header {\n    display: none;\n  }\n  .navbar-expand-xxl .offcanvas {\n    position: inherit;\n    bottom: 0;\n    z-index: 1000;\n    -ms-flex-positive: 1;\n    flex-grow: 1;\n    visibility: visible !important;\n    background-color: transparent;\n    border-right: 0;\n    border-left: 0;\n    transition: none;\n    -webkit-transform: none;\n    transform: none;\n  }\n  .navbar-expand-xxl .offcanvas-top,\n  .navbar-expand-xxl .offcanvas-bottom {\n    height: auto;\n    border-top: 0;\n    border-bottom: 0;\n  }\n  .navbar-expand-xxl .offcanvas-body {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-positive: 0;\n    flex-grow: 0;\n    padding: 0;\n    overflow-y: visible;\n  }\n}\n\n.navbar-expand {\n  -ms-flex-wrap: nowrap;\n  flex-wrap: nowrap;\n  -ms-flex-pack: start;\n  justify-content: flex-start;\n}\n\n.navbar-expand .navbar-nav {\n  -ms-flex-direction: row;\n  flex-direction: row;\n}\n\n.navbar-expand .navbar-nav .dropdown-menu {\n  position: absolute;\n}\n\n.navbar-expand .navbar-nav .nav-link {\n  padding-right: 0.5rem;\n  padding-left: 0.5rem;\n}\n\n.navbar-expand .navbar-nav-scroll {\n  overflow: visible;\n}\n\n.navbar-expand .navbar-collapse {\n  display: -ms-flexbox !important;\n  display: flex !important;\n  -ms-flex-preferred-size: auto;\n  flex-basis: auto;\n}\n\n.navbar-expand .navbar-toggler {\n  display: none;\n}\n\n.navbar-expand .offcanvas-header {\n  display: none;\n}\n\n.navbar-expand .offcanvas {\n  position: inherit;\n  bottom: 0;\n  z-index: 1000;\n  -ms-flex-positive: 1;\n  flex-grow: 1;\n  visibility: visible !important;\n  background-color: transparent;\n  border-right: 0;\n  border-left: 0;\n  transition: none;\n  -webkit-transform: none;\n  transform: none;\n}\n\n.navbar-expand .offcanvas-top,\n.navbar-expand .offcanvas-bottom {\n  height: auto;\n  border-top: 0;\n  border-bottom: 0;\n}\n\n.navbar-expand .offcanvas-body {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-positive: 0;\n  flex-grow: 0;\n  padding: 0;\n  overflow-y: visible;\n}\n\n.navbar-light .navbar-brand {\n  color: rgba(0, 0, 0, 0.9);\n}\n\n.navbar-light .navbar-brand:hover, .navbar-light .navbar-brand:focus {\n  color: rgba(0, 0, 0, 0.9);\n}\n\n.navbar-light .navbar-nav .nav-link {\n  color: rgba(0, 0, 0, 0.55);\n}\n\n.navbar-light .navbar-nav .nav-link:hover, .navbar-light .navbar-nav .nav-link:focus {\n  color: rgba(0, 0, 0, 0.7);\n}\n\n.navbar-light .navbar-nav .nav-link.disabled {\n  color: rgba(0, 0, 0, 0.3);\n}\n\n.navbar-light .navbar-nav .show > .nav-link,\n.navbar-light .navbar-nav .nav-link.active {\n  color: rgba(0, 0, 0, 0.9);\n}\n\n.navbar-light .navbar-toggler {\n  color: rgba(0, 0, 0, 0.55);\n  border-color: rgba(0, 0, 0, 0.1);\n}\n\n.navbar-light .navbar-toggler-icon {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%280, 0, 0, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e\");\n}\n\n.navbar-light .navbar-text {\n  color: rgba(0, 0, 0, 0.55);\n}\n\n.navbar-light .navbar-text a,\n.navbar-light .navbar-text a:hover,\n.navbar-light .navbar-text a:focus {\n  color: rgba(0, 0, 0, 0.9);\n}\n\n.navbar-dark .navbar-brand {\n  color: #fff;\n}\n\n.navbar-dark .navbar-brand:hover, .navbar-dark .navbar-brand:focus {\n  color: #fff;\n}\n\n.navbar-dark .navbar-nav .nav-link {\n  color: rgba(255, 255, 255, 0.7);\n}\n\n.navbar-dark .navbar-nav .nav-link:hover, .navbar-dark .navbar-nav .nav-link:focus {\n  color: #fff;\n}\n\n.navbar-dark .navbar-nav .nav-link.disabled {\n  color: rgba(255, 255, 255, 0.25);\n}\n\n.navbar-dark .navbar-nav .show > .nav-link,\n.navbar-dark .navbar-nav .nav-link.active {\n  color: #fff;\n}\n\n.navbar-dark .navbar-toggler {\n  color: rgba(255, 255, 255, 0.7);\n  border-color: rgba(255, 255, 255, 0.1);\n}\n\n.navbar-dark .navbar-toggler-icon {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.7%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e\");\n}\n\n.navbar-dark .navbar-text {\n  color: rgba(255, 255, 255, 0.7);\n}\n\n.navbar-dark .navbar-text a,\n.navbar-dark .navbar-text a:hover,\n.navbar-dark .navbar-text a:focus {\n  color: #fff;\n}\n\n.card {\n  position: relative;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  min-width: 0;\n  word-wrap: break-word;\n  background-color: #fff;\n  background-clip: border-box;\n  border: 1px solid rgba(0, 0, 0, 0.125);\n  border-radius: 0;\n}\n\n.card > hr {\n  margin-right: 0;\n  margin-left: 0;\n}\n\n.card > .list-group {\n  border-top: inherit;\n  border-bottom: inherit;\n}\n\n.card > .list-group:first-child {\n  border-top-width: 0;\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n}\n\n.card > .list-group:last-child {\n  border-bottom-width: 0;\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 0;\n}\n\n.card > .card-header + .list-group,\n.card > .list-group + .card-footer {\n  border-top: 0;\n}\n\n.card-body {\n  -ms-flex: 1 1 auto;\n  flex: 1 1 auto;\n  padding: 1rem 1rem;\n}\n\n.card-title {\n  margin-bottom: 0.5rem;\n}\n\n.card-subtitle {\n  margin-top: -0.25rem;\n  margin-bottom: 0;\n}\n\n.card-text:last-child {\n  margin-bottom: 0;\n}\n\n.card-link + .card-link {\n  margin-left: 1rem;\n}\n\n.card-header {\n  padding: 0.5rem 1rem;\n  margin-bottom: 0;\n  background-color: rgba(0, 0, 0, 0.03);\n  border-bottom: 1px solid rgba(0, 0, 0, 0.125);\n}\n\n.card-header:first-child {\n  border-radius: 0 0 0 0;\n}\n\n.card-footer {\n  padding: 0.5rem 1rem;\n  background-color: rgba(0, 0, 0, 0.03);\n  border-top: 1px solid rgba(0, 0, 0, 0.125);\n}\n\n.card-footer:last-child {\n  border-radius: 0 0 0 0;\n}\n\n.card-header-tabs {\n  margin-right: -0.5rem;\n  margin-bottom: -0.5rem;\n  margin-left: -0.5rem;\n  border-bottom: 0;\n}\n\n.card-header-pills {\n  margin-right: -0.5rem;\n  margin-left: -0.5rem;\n}\n\n.card-img-overlay {\n  position: absolute;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  padding: 1rem;\n  border-radius: 0;\n}\n\n.card-img,\n.card-img-top,\n.card-img-bottom {\n  width: 100%;\n}\n\n.card-img,\n.card-img-top {\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n}\n\n.card-img,\n.card-img-bottom {\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 0;\n}\n\n.card-group > .card {\n  margin-bottom: 0.75rem;\n}\n\n@media (min-width: 576px) {\n  .card-group {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-flow: row wrap;\n    flex-flow: row wrap;\n  }\n  .card-group > .card {\n    -ms-flex: 1 0 0%;\n    flex: 1 0 0%;\n    margin-bottom: 0;\n  }\n  .card-group > .card + .card {\n    margin-left: 0;\n    border-left: 0;\n  }\n  .card-group > .card:not(:last-child) {\n    border-top-right-radius: 0;\n    border-bottom-right-radius: 0;\n  }\n  .card-group > .card:not(:last-child) .card-img-top,\n  .card-group > .card:not(:last-child) .card-header {\n    border-top-right-radius: 0;\n  }\n  .card-group > .card:not(:last-child) .card-img-bottom,\n  .card-group > .card:not(:last-child) .card-footer {\n    border-bottom-right-radius: 0;\n  }\n  .card-group > .card:not(:first-child) {\n    border-top-left-radius: 0;\n    border-bottom-left-radius: 0;\n  }\n  .card-group > .card:not(:first-child) .card-img-top,\n  .card-group > .card:not(:first-child) .card-header {\n    border-top-left-radius: 0;\n  }\n  .card-group > .card:not(:first-child) .card-img-bottom,\n  .card-group > .card:not(:first-child) .card-footer {\n    border-bottom-left-radius: 0;\n  }\n}\n\n.accordion-button {\n  position: relative;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-align: center;\n  align-items: center;\n  width: 100%;\n  padding: 1rem 1.25rem;\n  font-size: 1rem;\n  color: #222;\n  text-align: left;\n  background-color: #fff;\n  border: 0;\n  border-radius: 0;\n  overflow-anchor: none;\n  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, border-radius 0.15s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .accordion-button {\n    transition: none;\n  }\n}\n\n.accordion-button:not(.collapsed) {\n  color: #007ea7;\n  background-color: #e6f4f8;\n  box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.125);\n}\n\n.accordion-button:not(.collapsed)::after {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23007ea7'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e\");\n  -webkit-transform: rotate(-180deg);\n  transform: rotate(-180deg);\n}\n\n.accordion-button::after {\n  -ms-flex-negative: 0;\n  flex-shrink: 0;\n  width: 1.25rem;\n  height: 1.25rem;\n  margin-left: auto;\n  content: \"\";\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23222'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e\");\n  background-repeat: no-repeat;\n  background-size: 1.25rem;\n  transition: -webkit-transform 0.2s ease-in-out;\n  transition: transform 0.2s ease-in-out;\n  transition: transform 0.2s ease-in-out, -webkit-transform 0.2s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .accordion-button::after {\n    transition: none;\n  }\n}\n\n.accordion-button:hover {\n  z-index: 2;\n}\n\n.accordion-button:focus {\n  z-index: 3;\n  border-color: #80c6dd;\n  outline: 0;\n  box-shadow: 0 0 0 0.25rem rgba(0, 140, 186, 0.25);\n}\n\n.accordion-header {\n  margin-bottom: 0;\n}\n\n.accordion-item {\n  background-color: #fff;\n  border: 1px solid rgba(0, 0, 0, 0.125);\n}\n\n.accordion-item:first-of-type {\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n}\n\n.accordion-item:first-of-type .accordion-button {\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n}\n\n.accordion-item:not(:first-of-type) {\n  border-top: 0;\n}\n\n.accordion-item:last-of-type {\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 0;\n}\n\n.accordion-item:last-of-type .accordion-button.collapsed {\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 0;\n}\n\n.accordion-item:last-of-type .accordion-collapse {\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 0;\n}\n\n.accordion-body {\n  padding: 1rem 1.25rem;\n}\n\n.accordion-flush .accordion-collapse {\n  border-width: 0;\n}\n\n.accordion-flush .accordion-item {\n  border-right: 0;\n  border-left: 0;\n  border-radius: 0;\n}\n\n.accordion-flush .accordion-item:first-child {\n  border-top: 0;\n}\n\n.accordion-flush .accordion-item:last-child {\n  border-bottom: 0;\n}\n\n.accordion-flush .accordion-item .accordion-button {\n  border-radius: 0;\n}\n\n.breadcrumb {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n  flex-wrap: wrap;\n  padding: 0.375rem 0.75rem;\n  margin-bottom: 1rem;\n  list-style: none;\n  border-radius: 3px;\n}\n\n.breadcrumb-item + .breadcrumb-item {\n  padding-left: 0.5rem;\n}\n\n.breadcrumb-item + .breadcrumb-item::before {\n  float: left;\n  padding-right: 0.5rem;\n  color: #888;\n  content: var(--bs-breadcrumb-divider, \"/\") /* rtl: var(--bs-breadcrumb-divider, \"/\") */;\n}\n\n.breadcrumb-item.active {\n  color: #888;\n}\n\n.pagination {\n  display: -ms-flexbox;\n  display: flex;\n  padding-left: 0;\n  list-style: none;\n}\n\n.page-link {\n  position: relative;\n  display: block;\n  color: #888;\n  text-decoration: none;\n  background-color: #fff;\n  border: 1px solid rgba(0, 0, 0, 0.1);\n  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .page-link {\n    transition: none;\n  }\n}\n\n.page-link:hover {\n  z-index: 2;\n  color: #007095;\n  background-color: #eee;\n  border-color: #dee2e6;\n}\n\n.page-link:focus {\n  z-index: 3;\n  color: #007095;\n  background-color: #eee;\n  outline: 0;\n  box-shadow: 0 0 0 0.25rem rgba(0, 140, 186, 0.25);\n}\n\n.page-item:not(:first-child) .page-link {\n  margin-left: -1px;\n}\n\n.page-item.active .page-link {\n  z-index: 3;\n  color: #fff;\n  background-color: #008cba;\n  border-color: #0079a1;\n}\n\n.page-item.disabled .page-link {\n  color: #eee;\n  pointer-events: none;\n  background-color: #fff;\n  border-color: #dee2e6;\n}\n\n.page-link {\n  padding: 0.375rem 0.75rem;\n}\n\n.page-item:first-child .page-link {\n  border-top-left-radius: 0;\n  border-bottom-left-radius: 0;\n}\n\n.page-item:last-child .page-link {\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n}\n\n.pagination-lg .page-link {\n  padding: 0.75rem 1.5rem;\n  font-size: 1.25rem;\n}\n\n.pagination-lg .page-item:first-child .page-link {\n  border-top-left-radius: 0;\n  border-bottom-left-radius: 0;\n}\n\n.pagination-lg .page-item:last-child .page-link {\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n}\n\n.pagination-sm .page-link {\n  padding: 0.25rem 0.5rem;\n  font-size: 0.875rem;\n}\n\n.pagination-sm .page-item:first-child .page-link {\n  border-top-left-radius: 0;\n  border-bottom-left-radius: 0;\n}\n\n.pagination-sm .page-item:last-child .page-link {\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n}\n\n.badge {\n  display: inline-block;\n  padding: 0.35em 1rem;\n  font-size: 0.75em;\n  font-weight: 300;\n  line-height: 1;\n  color: #fff;\n  text-align: center;\n  white-space: nowrap;\n  vertical-align: baseline;\n  border-radius: 0;\n}\n\n.badge:empty {\n  display: none;\n}\n\n.btn .badge {\n  position: relative;\n  top: -1px;\n}\n\n.alert {\n  position: relative;\n  padding: 1rem 1rem;\n  margin-bottom: 1rem;\n  border: 1px solid transparent;\n  border-radius: 0;\n}\n\n.alert-heading {\n  color: inherit;\n}\n\n.alert-link {\n  font-weight: 400;\n}\n\n.alert-dismissible {\n  padding-right: 3rem;\n}\n\n.alert-dismissible .btn-close {\n  position: absolute;\n  top: 0;\n  right: 0;\n  z-index: 2;\n  padding: 1.25rem 1rem;\n}\n\n.alert-primary {\n  color: #005470;\n  background-color: #008cba;\n  border-color: #b3ddea;\n}\n\n.alert-primary .alert-link {\n  color: #00435a;\n}\n\n.alert-secondary {\n  color: #8f8f8f;\n  background-color: #eeeeee;\n  border-color: #fafafa;\n}\n\n.alert-secondary .alert-link {\n  color: #727272;\n}\n\n.alert-success {\n  color: #286740;\n  background-color: #43ac6a;\n  border-color: #c7e6d2;\n}\n\n.alert-success .alert-link {\n  color: #205233;\n}\n\n.alert-info {\n  color: #377385;\n  background-color: #5bc0de;\n  border-color: #ceecf5;\n}\n\n.alert-info .alert-link {\n  color: #2c5c6a;\n}\n\n.alert-warning {\n  color: #8c5601;\n  background-color: #e99002;\n  border-color: #f8deb3;\n}\n\n.alert-warning .alert-link {\n  color: #704501;\n}\n\n.alert-danger {\n  color: #902716;\n  background-color: #f04124;\n  border-color: #fbc6bd;\n}\n\n.alert-danger .alert-link {\n  color: #731f12;\n}\n\n.alert-light {\n  color: #8f8f8f;\n  background-color: #eeeeee;\n  border-color: #fafafa;\n}\n\n.alert-light .alert-link {\n  color: #727272;\n}\n\n.alert-dark {\n  color: #a7a7a7;\n  background-color: #222222;\n  border-color: #bdbdbd;\n}\n\n.alert-dark .alert-link {\n  color: #868686;\n}\n\n@-webkit-keyframes progress-bar-stripes {\n  0% {\n    background-position-x: 1rem;\n  }\n}\n\n@keyframes progress-bar-stripes {\n  0% {\n    background-position-x: 1rem;\n  }\n}\n\n.progress {\n  display: -ms-flexbox;\n  display: flex;\n  height: 1rem;\n  overflow: hidden;\n  font-size: 0.75rem;\n  background-color: #ccc;\n  border-radius: 0;\n}\n\n.progress-bar {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  -ms-flex-pack: center;\n  justify-content: center;\n  overflow: hidden;\n  color: #fff;\n  text-align: center;\n  white-space: nowrap;\n  background-color: #008cba;\n  transition: width 0.6s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .progress-bar {\n    transition: none;\n  }\n}\n\n.progress-bar-striped {\n  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-size: 1rem 1rem;\n}\n\n.progress-bar-animated {\n  -webkit-animation: 1s linear infinite progress-bar-stripes;\n  animation: 1s linear infinite progress-bar-stripes;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .progress-bar-animated {\n    -webkit-animation: none;\n    animation: none;\n  }\n}\n\n.list-group {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  padding-left: 0;\n  margin-bottom: 0;\n  border-radius: 0;\n}\n\n.list-group-numbered {\n  list-style-type: none;\n  counter-reset: section;\n}\n\n.list-group-numbered > li::before {\n  content: counters(section, \".\") \". \";\n  counter-increment: section;\n}\n\n.list-group-item-action {\n  width: 100%;\n  color: #495057;\n  text-align: inherit;\n}\n\n.list-group-item-action:hover, .list-group-item-action:focus {\n  z-index: 1;\n  color: #495057;\n  text-decoration: none;\n  background-color: #f8f9fa;\n}\n\n.list-group-item-action:active {\n  color: #222;\n  background-color: #eee;\n}\n\n.list-group-item {\n  position: relative;\n  display: block;\n  padding: 0.5rem 1rem;\n  color: #222;\n  text-decoration: none;\n  background-color: #fff;\n  border: 1px solid rgba(0, 0, 0, 0.125);\n}\n\n.list-group-item:first-child {\n  border-top-left-radius: inherit;\n  border-top-right-radius: inherit;\n}\n\n.list-group-item:last-child {\n  border-bottom-right-radius: inherit;\n  border-bottom-left-radius: inherit;\n}\n\n.list-group-item.disabled, .list-group-item:disabled {\n  color: #888;\n  pointer-events: none;\n  background-color: #eee;\n}\n\n.list-group-item.active {\n  z-index: 2;\n  color: #fff;\n  background-color: #008cba;\n  border-color: #008cba;\n}\n\n.list-group-item + .list-group-item {\n  border-top-width: 0;\n}\n\n.list-group-item + .list-group-item.active {\n  margin-top: -1px;\n  border-top-width: 1px;\n}\n\n.list-group-horizontal {\n  -ms-flex-direction: row;\n  flex-direction: row;\n}\n\n.list-group-horizontal > .list-group-item:first-child {\n  border-bottom-left-radius: 0;\n  border-top-right-radius: 0;\n}\n\n.list-group-horizontal > .list-group-item:last-child {\n  border-top-right-radius: 0;\n  border-bottom-left-radius: 0;\n}\n\n.list-group-horizontal > .list-group-item.active {\n  margin-top: 0;\n}\n\n.list-group-horizontal > .list-group-item + .list-group-item {\n  border-top-width: 1px;\n  border-left-width: 0;\n}\n\n.list-group-horizontal > .list-group-item + .list-group-item.active {\n  margin-left: -1px;\n  border-left-width: 1px;\n}\n\n@media (min-width: 576px) {\n  .list-group-horizontal-sm {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .list-group-horizontal-sm > .list-group-item:first-child {\n    border-bottom-left-radius: 0;\n    border-top-right-radius: 0;\n  }\n  .list-group-horizontal-sm > .list-group-item:last-child {\n    border-top-right-radius: 0;\n    border-bottom-left-radius: 0;\n  }\n  .list-group-horizontal-sm > .list-group-item.active {\n    margin-top: 0;\n  }\n  .list-group-horizontal-sm > .list-group-item + .list-group-item {\n    border-top-width: 1px;\n    border-left-width: 0;\n  }\n  .list-group-horizontal-sm > .list-group-item + .list-group-item.active {\n    margin-left: -1px;\n    border-left-width: 1px;\n  }\n}\n\n@media (min-width: 768px) {\n  .list-group-horizontal-md {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .list-group-horizontal-md > .list-group-item:first-child {\n    border-bottom-left-radius: 0;\n    border-top-right-radius: 0;\n  }\n  .list-group-horizontal-md > .list-group-item:last-child {\n    border-top-right-radius: 0;\n    border-bottom-left-radius: 0;\n  }\n  .list-group-horizontal-md > .list-group-item.active {\n    margin-top: 0;\n  }\n  .list-group-horizontal-md > .list-group-item + .list-group-item {\n    border-top-width: 1px;\n    border-left-width: 0;\n  }\n  .list-group-horizontal-md > .list-group-item + .list-group-item.active {\n    margin-left: -1px;\n    border-left-width: 1px;\n  }\n}\n\n@media (min-width: 992px) {\n  .list-group-horizontal-lg {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .list-group-horizontal-lg > .list-group-item:first-child {\n    border-bottom-left-radius: 0;\n    border-top-right-radius: 0;\n  }\n  .list-group-horizontal-lg > .list-group-item:last-child {\n    border-top-right-radius: 0;\n    border-bottom-left-radius: 0;\n  }\n  .list-group-horizontal-lg > .list-group-item.active {\n    margin-top: 0;\n  }\n  .list-group-horizontal-lg > .list-group-item + .list-group-item {\n    border-top-width: 1px;\n    border-left-width: 0;\n  }\n  .list-group-horizontal-lg > .list-group-item + .list-group-item.active {\n    margin-left: -1px;\n    border-left-width: 1px;\n  }\n}\n\n@media (min-width: 1200px) {\n  .list-group-horizontal-xl {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .list-group-horizontal-xl > .list-group-item:first-child {\n    border-bottom-left-radius: 0;\n    border-top-right-radius: 0;\n  }\n  .list-group-horizontal-xl > .list-group-item:last-child {\n    border-top-right-radius: 0;\n    border-bottom-left-radius: 0;\n  }\n  .list-group-horizontal-xl > .list-group-item.active {\n    margin-top: 0;\n  }\n  .list-group-horizontal-xl > .list-group-item + .list-group-item {\n    border-top-width: 1px;\n    border-left-width: 0;\n  }\n  .list-group-horizontal-xl > .list-group-item + .list-group-item.active {\n    margin-left: -1px;\n    border-left-width: 1px;\n  }\n}\n\n@media (min-width: 1400px) {\n  .list-group-horizontal-xxl {\n    -ms-flex-direction: row;\n    flex-direction: row;\n  }\n  .list-group-horizontal-xxl > .list-group-item:first-child {\n    border-bottom-left-radius: 0;\n    border-top-right-radius: 0;\n  }\n  .list-group-horizontal-xxl > .list-group-item:last-child {\n    border-top-right-radius: 0;\n    border-bottom-left-radius: 0;\n  }\n  .list-group-horizontal-xxl > .list-group-item.active {\n    margin-top: 0;\n  }\n  .list-group-horizontal-xxl > .list-group-item + .list-group-item {\n    border-top-width: 1px;\n    border-left-width: 0;\n  }\n  .list-group-horizontal-xxl > .list-group-item + .list-group-item.active {\n    margin-left: -1px;\n    border-left-width: 1px;\n  }\n}\n\n.list-group-flush {\n  border-radius: 0;\n}\n\n.list-group-flush > .list-group-item {\n  border-width: 0 0 1px;\n}\n\n.list-group-flush > .list-group-item:last-child {\n  border-bottom-width: 0;\n}\n\n.list-group-item-primary {\n  color: #005470;\n  background-color: #cce8f1;\n}\n\n.list-group-item-primary.list-group-item-action:hover, .list-group-item-primary.list-group-item-action:focus {\n  color: #005470;\n  background-color: #b8d1d9;\n}\n\n.list-group-item-primary.list-group-item-action.active {\n  color: #fff;\n  background-color: #005470;\n  border-color: #005470;\n}\n\n.list-group-item-secondary {\n  color: #8f8f8f;\n  background-color: #fcfcfc;\n}\n\n.list-group-item-secondary.list-group-item-action:hover, .list-group-item-secondary.list-group-item-action:focus {\n  color: #8f8f8f;\n  background-color: #e3e3e3;\n}\n\n.list-group-item-secondary.list-group-item-action.active {\n  color: #fff;\n  background-color: #8f8f8f;\n  border-color: #8f8f8f;\n}\n\n.list-group-item-success {\n  color: #286740;\n  background-color: #d9eee1;\n}\n\n.list-group-item-success.list-group-item-action:hover, .list-group-item-success.list-group-item-action:focus {\n  color: #286740;\n  background-color: #c3d6cb;\n}\n\n.list-group-item-success.list-group-item-action.active {\n  color: #fff;\n  background-color: #286740;\n  border-color: #286740;\n}\n\n.list-group-item-info {\n  color: #377385;\n  background-color: #def2f8;\n}\n\n.list-group-item-info.list-group-item-action:hover, .list-group-item-info.list-group-item-action:focus {\n  color: #377385;\n  background-color: #c8dadf;\n}\n\n.list-group-item-info.list-group-item-action.active {\n  color: #fff;\n  background-color: #377385;\n  border-color: #377385;\n}\n\n.list-group-item-warning {\n  color: #8c5601;\n  background-color: #fbe9cc;\n}\n\n.list-group-item-warning.list-group-item-action:hover, .list-group-item-warning.list-group-item-action:focus {\n  color: #8c5601;\n  background-color: #e2d2b8;\n}\n\n.list-group-item-warning.list-group-item-action.active {\n  color: #fff;\n  background-color: #8c5601;\n  border-color: #8c5601;\n}\n\n.list-group-item-danger {\n  color: #902716;\n  background-color: #fcd9d3;\n}\n\n.list-group-item-danger.list-group-item-action:hover, .list-group-item-danger.list-group-item-action:focus {\n  color: #902716;\n  background-color: #e3c3be;\n}\n\n.list-group-item-danger.list-group-item-action.active {\n  color: #fff;\n  background-color: #902716;\n  border-color: #902716;\n}\n\n.list-group-item-light {\n  color: #8f8f8f;\n  background-color: #fcfcfc;\n}\n\n.list-group-item-light.list-group-item-action:hover, .list-group-item-light.list-group-item-action:focus {\n  color: #8f8f8f;\n  background-color: #e3e3e3;\n}\n\n.list-group-item-light.list-group-item-action.active {\n  color: #fff;\n  background-color: #8f8f8f;\n  border-color: #8f8f8f;\n}\n\n.list-group-item-dark {\n  color: #141414;\n  background-color: lightgray;\n}\n\n.list-group-item-dark.list-group-item-action:hover, .list-group-item-dark.list-group-item-action:focus {\n  color: #141414;\n  background-color: #bebebe;\n}\n\n.list-group-item-dark.list-group-item-action.active {\n  color: #fff;\n  background-color: #141414;\n  border-color: #141414;\n}\n\n.btn-close {\n  box-sizing: content-box;\n  width: 1em;\n  height: 1em;\n  padding: 0.25em 0.25em;\n  color: #888;\n  background: transparent url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23888'%3e%3cpath d='M.293.293a1 1 0 011.414 0L8 6.586 14.293.293a1 1 0 111.414 1.414L9.414 8l6.293 6.293a1 1 0 01-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 01-1.414-1.414L6.586 8 .293 1.707a1 1 0 010-1.414z'/%3e%3c/svg%3e\") center/1em auto no-repeat;\n  border: 0;\n  border-radius: 0;\n  opacity: 0.6;\n}\n\n.btn-close:hover {\n  color: #888;\n  text-decoration: none;\n  opacity: 1;\n}\n\n.btn-close:focus {\n  outline: 0;\n  box-shadow: 0 0 0 0.25rem rgba(0, 140, 186, 0.25);\n  opacity: 1;\n}\n\n.btn-close:disabled, .btn-close.disabled {\n  pointer-events: none;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  user-select: none;\n  opacity: 0.25;\n}\n\n.btn-close-white {\n  -webkit-filter: invert(1) grayscale(100%) brightness(200%);\n  filter: invert(1) grayscale(100%) brightness(200%);\n}\n\n.toast {\n  width: 350px;\n  max-width: 100%;\n  font-size: 0.875rem;\n  pointer-events: auto;\n  background-color: rgba(255, 255, 255, 0.85);\n  background-clip: padding-box;\n  border: 1px solid rgba(0, 0, 0, 0.1);\n  box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15);\n  border-radius: 0;\n}\n\n.toast.showing {\n  opacity: 0;\n}\n\n.toast:not(.show) {\n  display: none;\n}\n\n.toast-container {\n  width: -webkit-max-content;\n  width: -moz-max-content;\n  width: max-content;\n  max-width: 100%;\n  pointer-events: none;\n}\n\n.toast-container > :not(:last-child) {\n  margin-bottom: 0.75rem;\n}\n\n.toast-header {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-align: center;\n  align-items: center;\n  padding: 0.5rem 0.75rem;\n  color: #888;\n  background-color: rgba(255, 255, 255, 0.85);\n  background-clip: padding-box;\n  border-bottom: 1px solid rgba(0, 0, 0, 0.05);\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n}\n\n.toast-header .btn-close {\n  margin-right: -0.375rem;\n  margin-left: 0.75rem;\n}\n\n.toast-body {\n  padding: 0.75rem;\n  word-wrap: break-word;\n}\n\n.modal {\n  position: fixed;\n  top: 0;\n  left: 0;\n  z-index: 1055;\n  display: none;\n  width: 100%;\n  height: 100%;\n  overflow-x: hidden;\n  overflow-y: auto;\n  outline: 0;\n}\n\n.modal-dialog {\n  position: relative;\n  width: auto;\n  margin: 0.5rem;\n  pointer-events: none;\n}\n\n.modal.fade .modal-dialog {\n  transition: -webkit-transform 0.3s ease-out;\n  transition: transform 0.3s ease-out;\n  transition: transform 0.3s ease-out, -webkit-transform 0.3s ease-out;\n  -webkit-transform: translate(0, -50px);\n  transform: translate(0, -50px);\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .modal.fade .modal-dialog {\n    transition: none;\n  }\n}\n\n.modal.show .modal-dialog {\n  -webkit-transform: none;\n  transform: none;\n}\n\n.modal.modal-static .modal-dialog {\n  -webkit-transform: scale(1.02);\n  transform: scale(1.02);\n}\n\n.modal-dialog-scrollable {\n  height: calc(100% - 1rem);\n}\n\n.modal-dialog-scrollable .modal-content {\n  max-height: 100%;\n  overflow: hidden;\n}\n\n.modal-dialog-scrollable .modal-body {\n  overflow-y: auto;\n}\n\n.modal-dialog-centered {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-align: center;\n  align-items: center;\n  min-height: calc(100% - 1rem);\n}\n\n.modal-content {\n  position: relative;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  width: 100%;\n  pointer-events: auto;\n  background-color: #fff;\n  background-clip: padding-box;\n  border: 1px solid rgba(0, 0, 0, 0.2);\n  border-radius: 0;\n  outline: 0;\n}\n\n.modal-backdrop {\n  position: fixed;\n  top: 0;\n  left: 0;\n  z-index: 1050;\n  width: 100vw;\n  height: 100vh;\n  background-color: #000;\n}\n\n.modal-backdrop.fade {\n  opacity: 0;\n}\n\n.modal-backdrop.show {\n  opacity: 0.5;\n}\n\n.modal-header {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-negative: 0;\n  flex-shrink: 0;\n  -ms-flex-align: center;\n  align-items: center;\n  -ms-flex-pack: justify;\n  justify-content: space-between;\n  padding: 1rem 1rem;\n  border-bottom: 1px solid #dee2e6;\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n}\n\n.modal-header .btn-close {\n  padding: 0.5rem 0.5rem;\n  margin: -0.5rem -0.5rem -0.5rem auto;\n}\n\n.modal-title {\n  margin-bottom: 0;\n  line-height: 1.5;\n}\n\n.modal-body {\n  position: relative;\n  -ms-flex: 1 1 auto;\n  flex: 1 1 auto;\n  padding: 1rem;\n}\n\n.modal-footer {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n  flex-wrap: wrap;\n  -ms-flex-negative: 0;\n  flex-shrink: 0;\n  -ms-flex-align: center;\n  align-items: center;\n  -ms-flex-pack: end;\n  justify-content: flex-end;\n  padding: 0.75rem;\n  border-top: 1px solid #dee2e6;\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 0;\n}\n\n.modal-footer > * {\n  margin: 0.25rem;\n}\n\n@media (min-width: 576px) {\n  .modal-dialog {\n    max-width: 500px;\n    margin: 1.75rem auto;\n  }\n  .modal-dialog-scrollable {\n    height: calc(100% - 3.5rem);\n  }\n  .modal-dialog-centered {\n    min-height: calc(100% - 3.5rem);\n  }\n  .modal-sm {\n    max-width: 300px;\n  }\n}\n\n@media (min-width: 992px) {\n  .modal-lg,\n  .modal-xl {\n    max-width: 800px;\n  }\n}\n\n@media (min-width: 1200px) {\n  .modal-xl {\n    max-width: 1140px;\n  }\n}\n\n.modal-fullscreen {\n  width: 100vw;\n  max-width: none;\n  height: 100%;\n  margin: 0;\n}\n\n.modal-fullscreen .modal-content {\n  height: 100%;\n  border: 0;\n  border-radius: 0;\n}\n\n.modal-fullscreen .modal-header {\n  border-radius: 0;\n}\n\n.modal-fullscreen .modal-body {\n  overflow-y: auto;\n}\n\n.modal-fullscreen .modal-footer {\n  border-radius: 0;\n}\n\n@media (max-width: 575.98px) {\n  .modal-fullscreen-sm-down {\n    width: 100vw;\n    max-width: none;\n    height: 100%;\n    margin: 0;\n  }\n  .modal-fullscreen-sm-down .modal-content {\n    height: 100%;\n    border: 0;\n    border-radius: 0;\n  }\n  .modal-fullscreen-sm-down .modal-header {\n    border-radius: 0;\n  }\n  .modal-fullscreen-sm-down .modal-body {\n    overflow-y: auto;\n  }\n  .modal-fullscreen-sm-down .modal-footer {\n    border-radius: 0;\n  }\n}\n\n@media (max-width: 767.98px) {\n  .modal-fullscreen-md-down {\n    width: 100vw;\n    max-width: none;\n    height: 100%;\n    margin: 0;\n  }\n  .modal-fullscreen-md-down .modal-content {\n    height: 100%;\n    border: 0;\n    border-radius: 0;\n  }\n  .modal-fullscreen-md-down .modal-header {\n    border-radius: 0;\n  }\n  .modal-fullscreen-md-down .modal-body {\n    overflow-y: auto;\n  }\n  .modal-fullscreen-md-down .modal-footer {\n    border-radius: 0;\n  }\n}\n\n@media (max-width: 991.98px) {\n  .modal-fullscreen-lg-down {\n    width: 100vw;\n    max-width: none;\n    height: 100%;\n    margin: 0;\n  }\n  .modal-fullscreen-lg-down .modal-content {\n    height: 100%;\n    border: 0;\n    border-radius: 0;\n  }\n  .modal-fullscreen-lg-down .modal-header {\n    border-radius: 0;\n  }\n  .modal-fullscreen-lg-down .modal-body {\n    overflow-y: auto;\n  }\n  .modal-fullscreen-lg-down .modal-footer {\n    border-radius: 0;\n  }\n}\n\n@media (max-width: 1199.98px) {\n  .modal-fullscreen-xl-down {\n    width: 100vw;\n    max-width: none;\n    height: 100%;\n    margin: 0;\n  }\n  .modal-fullscreen-xl-down .modal-content {\n    height: 100%;\n    border: 0;\n    border-radius: 0;\n  }\n  .modal-fullscreen-xl-down .modal-header {\n    border-radius: 0;\n  }\n  .modal-fullscreen-xl-down .modal-body {\n    overflow-y: auto;\n  }\n  .modal-fullscreen-xl-down .modal-footer {\n    border-radius: 0;\n  }\n}\n\n@media (max-width: 1399.98px) {\n  .modal-fullscreen-xxl-down {\n    width: 100vw;\n    max-width: none;\n    height: 100%;\n    margin: 0;\n  }\n  .modal-fullscreen-xxl-down .modal-content {\n    height: 100%;\n    border: 0;\n    border-radius: 0;\n  }\n  .modal-fullscreen-xxl-down .modal-header {\n    border-radius: 0;\n  }\n  .modal-fullscreen-xxl-down .modal-body {\n    overflow-y: auto;\n  }\n  .modal-fullscreen-xxl-down .modal-footer {\n    border-radius: 0;\n  }\n}\n\n.tooltip {\n  position: absolute;\n  z-index: 1080;\n  display: block;\n  margin: 0;\n  font-family: var(--bs-font-sans-serif);\n  font-style: normal;\n  font-weight: 400;\n  line-height: 1.5;\n  text-align: left;\n  text-align: start;\n  text-decoration: none;\n  text-shadow: none;\n  text-transform: none;\n  letter-spacing: normal;\n  word-break: normal;\n  word-spacing: normal;\n  white-space: normal;\n  line-break: auto;\n  font-size: 0.875rem;\n  word-wrap: break-word;\n  opacity: 0;\n}\n\n.tooltip.show {\n  opacity: 0.9;\n}\n\n.tooltip .tooltip-arrow {\n  position: absolute;\n  display: block;\n  width: 0.8rem;\n  height: 0.4rem;\n}\n\n.tooltip .tooltip-arrow::before {\n  position: absolute;\n  content: \"\";\n  border-color: transparent;\n  border-style: solid;\n}\n\n.bs-tooltip-top, .bs-tooltip-auto[data-popper-placement^=\"top\"] {\n  padding: 0.4rem 0;\n}\n\n.bs-tooltip-top .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=\"top\"] .tooltip-arrow {\n  bottom: 0;\n}\n\n.bs-tooltip-top .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=\"top\"] .tooltip-arrow::before {\n  top: -1px;\n  border-width: 0.4rem 0.4rem 0;\n  border-top-color: #000;\n}\n\n.bs-tooltip-end, .bs-tooltip-auto[data-popper-placement^=\"right\"] {\n  padding: 0 0.4rem;\n}\n\n.bs-tooltip-end .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=\"right\"] .tooltip-arrow {\n  left: 0;\n  width: 0.4rem;\n  height: 0.8rem;\n}\n\n.bs-tooltip-end .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=\"right\"] .tooltip-arrow::before {\n  right: -1px;\n  border-width: 0.4rem 0.4rem 0.4rem 0;\n  border-right-color: #000;\n}\n\n.bs-tooltip-bottom, .bs-tooltip-auto[data-popper-placement^=\"bottom\"] {\n  padding: 0.4rem 0;\n}\n\n.bs-tooltip-bottom .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=\"bottom\"] .tooltip-arrow {\n  top: 0;\n}\n\n.bs-tooltip-bottom .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=\"bottom\"] .tooltip-arrow::before {\n  bottom: -1px;\n  border-width: 0 0.4rem 0.4rem;\n  border-bottom-color: #000;\n}\n\n.bs-tooltip-start, .bs-tooltip-auto[data-popper-placement^=\"left\"] {\n  padding: 0 0.4rem;\n}\n\n.bs-tooltip-start .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=\"left\"] .tooltip-arrow {\n  right: 0;\n  width: 0.4rem;\n  height: 0.8rem;\n}\n\n.bs-tooltip-start .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=\"left\"] .tooltip-arrow::before {\n  left: -1px;\n  border-width: 0.4rem 0 0.4rem 0.4rem;\n  border-left-color: #000;\n}\n\n.tooltip-inner {\n  max-width: 200px;\n  padding: 0.25rem 0.5rem;\n  color: #fff;\n  text-align: center;\n  background-color: #000;\n  border-radius: 0;\n}\n\n.popover {\n  position: absolute;\n  top: 0;\n  left: 0 /* rtl:ignore */;\n  z-index: 1070;\n  display: block;\n  max-width: 276px;\n  font-family: var(--bs-font-sans-serif);\n  font-style: normal;\n  font-weight: 400;\n  line-height: 1.5;\n  text-align: left;\n  text-align: start;\n  text-decoration: none;\n  text-shadow: none;\n  text-transform: none;\n  letter-spacing: normal;\n  word-break: normal;\n  word-spacing: normal;\n  white-space: normal;\n  line-break: auto;\n  font-size: 0.875rem;\n  word-wrap: break-word;\n  background-color: #fff;\n  background-clip: padding-box;\n  border: 1px solid rgba(0, 0, 0, 0.2);\n  border-radius: 0;\n}\n\n.popover .popover-arrow {\n  position: absolute;\n  display: block;\n  width: 1rem;\n  height: 0.5rem;\n}\n\n.popover .popover-arrow::before, .popover .popover-arrow::after {\n  position: absolute;\n  display: block;\n  content: \"\";\n  border-color: transparent;\n  border-style: solid;\n}\n\n.bs-popover-top > .popover-arrow, .bs-popover-auto[data-popper-placement^=\"top\"] > .popover-arrow {\n  bottom: calc(-0.5rem - 1px);\n}\n\n.bs-popover-top > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=\"top\"] > .popover-arrow::before {\n  bottom: 0;\n  border-width: 0.5rem 0.5rem 0;\n  border-top-color: rgba(0, 0, 0, 0.25);\n}\n\n.bs-popover-top > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=\"top\"] > .popover-arrow::after {\n  bottom: 1px;\n  border-width: 0.5rem 0.5rem 0;\n  border-top-color: #fff;\n}\n\n.bs-popover-end > .popover-arrow, .bs-popover-auto[data-popper-placement^=\"right\"] > .popover-arrow {\n  left: calc(-0.5rem - 1px);\n  width: 0.5rem;\n  height: 1rem;\n}\n\n.bs-popover-end > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=\"right\"] > .popover-arrow::before {\n  left: 0;\n  border-width: 0.5rem 0.5rem 0.5rem 0;\n  border-right-color: rgba(0, 0, 0, 0.25);\n}\n\n.bs-popover-end > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=\"right\"] > .popover-arrow::after {\n  left: 1px;\n  border-width: 0.5rem 0.5rem 0.5rem 0;\n  border-right-color: #fff;\n}\n\n.bs-popover-bottom > .popover-arrow, .bs-popover-auto[data-popper-placement^=\"bottom\"] > .popover-arrow {\n  top: calc(-0.5rem - 1px);\n}\n\n.bs-popover-bottom > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=\"bottom\"] > .popover-arrow::before {\n  top: 0;\n  border-width: 0 0.5rem 0.5rem 0.5rem;\n  border-bottom-color: rgba(0, 0, 0, 0.25);\n}\n\n.bs-popover-bottom > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=\"bottom\"] > .popover-arrow::after {\n  top: 1px;\n  border-width: 0 0.5rem 0.5rem 0.5rem;\n  border-bottom-color: #fff;\n}\n\n.bs-popover-bottom .popover-header::before, .bs-popover-auto[data-popper-placement^=\"bottom\"] .popover-header::before {\n  position: absolute;\n  top: 0;\n  left: 50%;\n  display: block;\n  width: 1rem;\n  margin-left: -0.5rem;\n  content: \"\";\n  border-bottom: 1px solid #f0f0f0;\n}\n\n.bs-popover-start > .popover-arrow, .bs-popover-auto[data-popper-placement^=\"left\"] > .popover-arrow {\n  right: calc(-0.5rem - 1px);\n  width: 0.5rem;\n  height: 1rem;\n}\n\n.bs-popover-start > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=\"left\"] > .popover-arrow::before {\n  right: 0;\n  border-width: 0.5rem 0 0.5rem 0.5rem;\n  border-left-color: rgba(0, 0, 0, 0.25);\n}\n\n.bs-popover-start > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=\"left\"] > .popover-arrow::after {\n  right: 1px;\n  border-width: 0.5rem 0 0.5rem 0.5rem;\n  border-left-color: #fff;\n}\n\n.popover-header {\n  padding: 0.5rem 1rem;\n  margin-bottom: 0;\n  font-size: 1rem;\n  background-color: #f0f0f0;\n  border-bottom: 1px solid rgba(0, 0, 0, 0.2);\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n}\n\n.popover-header:empty {\n  display: none;\n}\n\n.popover-body {\n  padding: 1rem 1rem;\n  color: #222;\n}\n\n.carousel {\n  position: relative;\n}\n\n.carousel.pointer-event {\n  -ms-touch-action: pan-y;\n  touch-action: pan-y;\n}\n\n.carousel-inner {\n  position: relative;\n  width: 100%;\n  overflow: hidden;\n}\n\n.carousel-inner::after {\n  display: block;\n  clear: both;\n  content: \"\";\n}\n\n.carousel-item {\n  position: relative;\n  display: none;\n  float: left;\n  width: 100%;\n  margin-right: -100%;\n  -webkit-backface-visibility: hidden;\n  backface-visibility: hidden;\n  transition: -webkit-transform 0.6s ease-in-out;\n  transition: transform 0.6s ease-in-out;\n  transition: transform 0.6s ease-in-out, -webkit-transform 0.6s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .carousel-item {\n    transition: none;\n  }\n}\n\n.carousel-item.active,\n.carousel-item-next,\n.carousel-item-prev {\n  display: block;\n}\n\n/* rtl:begin:ignore */\n.carousel-item-next:not(.carousel-item-start),\n.active.carousel-item-end {\n  -webkit-transform: translateX(100%);\n  transform: translateX(100%);\n}\n\n.carousel-item-prev:not(.carousel-item-end),\n.active.carousel-item-start {\n  -webkit-transform: translateX(-100%);\n  transform: translateX(-100%);\n}\n\n/* rtl:end:ignore */\n.carousel-fade .carousel-item {\n  opacity: 0;\n  transition-property: opacity;\n  -webkit-transform: none;\n  transform: none;\n}\n\n.carousel-fade .carousel-item.active,\n.carousel-fade .carousel-item-next.carousel-item-start,\n.carousel-fade .carousel-item-prev.carousel-item-end {\n  z-index: 1;\n  opacity: 1;\n}\n\n.carousel-fade .active.carousel-item-start,\n.carousel-fade .active.carousel-item-end {\n  z-index: 0;\n  opacity: 0;\n  transition: opacity 0s 0.6s;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .carousel-fade .active.carousel-item-start,\n  .carousel-fade .active.carousel-item-end {\n    transition: none;\n  }\n}\n\n.carousel-control-prev,\n.carousel-control-next {\n  position: absolute;\n  top: 0;\n  bottom: 0;\n  z-index: 1;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-align: center;\n  align-items: center;\n  -ms-flex-pack: center;\n  justify-content: center;\n  width: 15%;\n  padding: 0;\n  color: #fff;\n  text-align: center;\n  background: none;\n  border: 0;\n  opacity: 0.5;\n  transition: opacity 0.15s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .carousel-control-prev,\n  .carousel-control-next {\n    transition: none;\n  }\n}\n\n.carousel-control-prev:hover, .carousel-control-prev:focus,\n.carousel-control-next:hover,\n.carousel-control-next:focus {\n  color: #fff;\n  text-decoration: none;\n  outline: 0;\n  opacity: 0.9;\n}\n\n.carousel-control-prev {\n  left: 0;\n}\n\n.carousel-control-next {\n  right: 0;\n}\n\n.carousel-control-prev-icon,\n.carousel-control-next-icon {\n  display: inline-block;\n  width: 2rem;\n  height: 2rem;\n  background-repeat: no-repeat;\n  background-position: 50%;\n  background-size: 100% 100%;\n}\n\n/* rtl:options: {\n  \"autoRename\": true,\n  \"stringMap\":[ {\n    \"name\"    : \"prev-next\",\n    \"search\"  : \"prev\",\n    \"replace\" : \"next\"\n  } ]\n} */\n.carousel-control-prev-icon {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0z'/%3e%3c/svg%3e\");\n}\n\n.carousel-control-next-icon {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e\");\n}\n\n.carousel-indicators {\n  position: absolute;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 2;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-pack: center;\n  justify-content: center;\n  padding: 0;\n  margin-right: 15%;\n  margin-bottom: 1rem;\n  margin-left: 15%;\n  list-style: none;\n}\n\n.carousel-indicators [data-bs-target] {\n  box-sizing: content-box;\n  -ms-flex: 0 1 auto;\n  flex: 0 1 auto;\n  width: 30px;\n  height: 3px;\n  padding: 0;\n  margin-right: 3px;\n  margin-left: 3px;\n  text-indent: -999px;\n  cursor: pointer;\n  background-color: #fff;\n  background-clip: padding-box;\n  border: 0;\n  border-top: 10px solid transparent;\n  border-bottom: 10px solid transparent;\n  opacity: 0.5;\n  transition: opacity 0.6s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .carousel-indicators [data-bs-target] {\n    transition: none;\n  }\n}\n\n.carousel-indicators .active {\n  opacity: 1;\n}\n\n.carousel-caption {\n  position: absolute;\n  right: 15%;\n  bottom: 1.25rem;\n  left: 15%;\n  padding-top: 1.25rem;\n  padding-bottom: 1.25rem;\n  color: #fff;\n  text-align: center;\n}\n\n.carousel-dark .carousel-control-prev-icon,\n.carousel-dark .carousel-control-next-icon {\n  -webkit-filter: invert(1) grayscale(100);\n  filter: invert(1) grayscale(100);\n}\n\n.carousel-dark .carousel-indicators [data-bs-target] {\n  background-color: #000;\n}\n\n.carousel-dark .carousel-caption {\n  color: #000;\n}\n\n@-webkit-keyframes spinner-border {\n  to {\n    -webkit-transform: rotate(360deg) /* rtl:ignore */;\n    transform: rotate(360deg) /* rtl:ignore */;\n  }\n}\n\n@keyframes spinner-border {\n  to {\n    -webkit-transform: rotate(360deg) /* rtl:ignore */;\n    transform: rotate(360deg) /* rtl:ignore */;\n  }\n}\n\n.spinner-border {\n  display: inline-block;\n  width: 2rem;\n  height: 2rem;\n  vertical-align: -0.125em;\n  border: 0.25em solid currentColor;\n  border-right-color: transparent;\n  border-radius: 50%;\n  -webkit-animation: 0.75s linear infinite spinner-border;\n  animation: 0.75s linear infinite spinner-border;\n}\n\n.spinner-border-sm {\n  width: 1rem;\n  height: 1rem;\n  border-width: 0.2em;\n}\n\n@-webkit-keyframes spinner-grow {\n  0% {\n    -webkit-transform: scale(0);\n    transform: scale(0);\n  }\n  50% {\n    opacity: 1;\n    -webkit-transform: none;\n    transform: none;\n  }\n}\n\n@keyframes spinner-grow {\n  0% {\n    -webkit-transform: scale(0);\n    transform: scale(0);\n  }\n  50% {\n    opacity: 1;\n    -webkit-transform: none;\n    transform: none;\n  }\n}\n\n.spinner-grow {\n  display: inline-block;\n  width: 2rem;\n  height: 2rem;\n  vertical-align: -0.125em;\n  background-color: currentColor;\n  border-radius: 50%;\n  opacity: 0;\n  -webkit-animation: 0.75s linear infinite spinner-grow;\n  animation: 0.75s linear infinite spinner-grow;\n}\n\n.spinner-grow-sm {\n  width: 1rem;\n  height: 1rem;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .spinner-border,\n  .spinner-grow {\n    -webkit-animation-duration: 1.5s;\n    animation-duration: 1.5s;\n  }\n}\n\n.offcanvas {\n  position: fixed;\n  bottom: 0;\n  z-index: 1045;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  max-width: 100%;\n  visibility: hidden;\n  background-color: #fff;\n  background-clip: padding-box;\n  outline: 0;\n  transition: -webkit-transform 0.3s ease-in-out;\n  transition: transform 0.3s ease-in-out;\n  transition: transform 0.3s ease-in-out, -webkit-transform 0.3s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .offcanvas {\n    transition: none;\n  }\n}\n\n.offcanvas-backdrop {\n  position: fixed;\n  top: 0;\n  left: 0;\n  z-index: 1040;\n  width: 100vw;\n  height: 100vh;\n  background-color: #000;\n}\n\n.offcanvas-backdrop.fade {\n  opacity: 0;\n}\n\n.offcanvas-backdrop.show {\n  opacity: 0.5;\n}\n\n.offcanvas-header {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-align: center;\n  align-items: center;\n  -ms-flex-pack: justify;\n  justify-content: space-between;\n  padding: 1rem 1rem;\n}\n\n.offcanvas-header .btn-close {\n  padding: 0.5rem 0.5rem;\n  margin-top: -0.5rem;\n  margin-right: -0.5rem;\n  margin-bottom: -0.5rem;\n}\n\n.offcanvas-title {\n  margin-bottom: 0;\n  line-height: 1.5;\n}\n\n.offcanvas-body {\n  -ms-flex-positive: 1;\n  flex-grow: 1;\n  padding: 1rem 1rem;\n  overflow-y: auto;\n}\n\n.offcanvas-start {\n  top: 0;\n  left: 0;\n  width: 400px;\n  border-right: 1px solid rgba(0, 0, 0, 0.2);\n  -webkit-transform: translateX(-100%);\n  transform: translateX(-100%);\n}\n\n.offcanvas-end {\n  top: 0;\n  right: 0;\n  width: 400px;\n  border-left: 1px solid rgba(0, 0, 0, 0.2);\n  -webkit-transform: translateX(100%);\n  transform: translateX(100%);\n}\n\n.offcanvas-top {\n  top: 0;\n  right: 0;\n  left: 0;\n  height: 30vh;\n  max-height: 100%;\n  border-bottom: 1px solid rgba(0, 0, 0, 0.2);\n  -webkit-transform: translateY(-100%);\n  transform: translateY(-100%);\n}\n\n.offcanvas-bottom {\n  right: 0;\n  left: 0;\n  height: 30vh;\n  max-height: 100%;\n  border-top: 1px solid rgba(0, 0, 0, 0.2);\n  -webkit-transform: translateY(100%);\n  transform: translateY(100%);\n}\n\n.offcanvas.show {\n  -webkit-transform: none;\n  transform: none;\n}\n\n.placeholder {\n  display: inline-block;\n  min-height: 1em;\n  vertical-align: middle;\n  cursor: wait;\n  background-color: currentColor;\n  opacity: 0.5;\n}\n\n.placeholder.btn::before {\n  display: inline-block;\n  content: \"\";\n}\n\n.placeholder-xs {\n  min-height: .6em;\n}\n\n.placeholder-sm {\n  min-height: .8em;\n}\n\n.placeholder-lg {\n  min-height: 1.2em;\n}\n\n.placeholder-glow .placeholder {\n  -webkit-animation: placeholder-glow 2s ease-in-out infinite;\n  animation: placeholder-glow 2s ease-in-out infinite;\n}\n\n@-webkit-keyframes placeholder-glow {\n  50% {\n    opacity: 0.2;\n  }\n}\n\n@keyframes placeholder-glow {\n  50% {\n    opacity: 0.2;\n  }\n}\n\n.placeholder-wave {\n  -webkit-mask-image: linear-gradient(130deg, #000 55%, rgba(0, 0, 0, 0.8) 75%, #000 95%);\n  mask-image: linear-gradient(130deg, #000 55%, rgba(0, 0, 0, 0.8) 75%, #000 95%);\n  -webkit-mask-size: 200% 100%;\n  mask-size: 200% 100%;\n  -webkit-animation: placeholder-wave 2s linear infinite;\n  animation: placeholder-wave 2s linear infinite;\n}\n\n@-webkit-keyframes placeholder-wave {\n  100% {\n    -webkit-mask-position: -200% 0%;\n    mask-position: -200% 0%;\n  }\n}\n\n@keyframes placeholder-wave {\n  100% {\n    -webkit-mask-position: -200% 0%;\n    mask-position: -200% 0%;\n  }\n}\n\n.clearfix::after {\n  display: block;\n  clear: both;\n  content: \"\";\n}\n\n.link-primary {\n  color: #008cba;\n}\n\n.link-primary:hover, .link-primary:focus {\n  color: #007095;\n}\n\n.link-secondary {\n  color: #eee;\n}\n\n.link-secondary:hover, .link-secondary:focus {\n  color: #f1f1f1;\n}\n\n.link-success {\n  color: #43ac6a;\n}\n\n.link-success:hover, .link-success:focus {\n  color: #368a55;\n}\n\n.link-info {\n  color: #5bc0de;\n}\n\n.link-info:hover, .link-info:focus {\n  color: #499ab2;\n}\n\n.link-warning {\n  color: #e99002;\n}\n\n.link-warning:hover, .link-warning:focus {\n  color: #ba7302;\n}\n\n.link-danger {\n  color: #f04124;\n}\n\n.link-danger:hover, .link-danger:focus {\n  color: #c0341d;\n}\n\n.link-light {\n  color: #eee;\n}\n\n.link-light:hover, .link-light:focus {\n  color: #f1f1f1;\n}\n\n.link-dark {\n  color: #222;\n}\n\n.link-dark:hover, .link-dark:focus {\n  color: #1b1b1b;\n}\n\n.ratio {\n  position: relative;\n  width: 100%;\n}\n\n.ratio::before {\n  display: block;\n  padding-top: var(--bs-aspect-ratio);\n  content: \"\";\n}\n\n.ratio > * {\n  position: absolute;\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n}\n\n.ratio-1x1 {\n  --bs-aspect-ratio: 100%;\n}\n\n.ratio-4x3 {\n  --bs-aspect-ratio: calc(3 / 4 * 100%);\n}\n\n.ratio-16x9 {\n  --bs-aspect-ratio: calc(9 / 16 * 100%);\n}\n\n.ratio-21x9 {\n  --bs-aspect-ratio: calc(9 / 21 * 100%);\n}\n\n.fixed-top {\n  position: fixed;\n  top: 0;\n  right: 0;\n  left: 0;\n  z-index: 1030;\n}\n\n.fixed-bottom {\n  position: fixed;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 1030;\n}\n\n.sticky-top {\n  position: -webkit-sticky;\n  position: sticky;\n  top: 0;\n  z-index: 1020;\n}\n\n@media (min-width: 576px) {\n  .sticky-sm-top {\n    position: -webkit-sticky;\n    position: sticky;\n    top: 0;\n    z-index: 1020;\n  }\n}\n\n@media (min-width: 768px) {\n  .sticky-md-top {\n    position: -webkit-sticky;\n    position: sticky;\n    top: 0;\n    z-index: 1020;\n  }\n}\n\n@media (min-width: 992px) {\n  .sticky-lg-top {\n    position: -webkit-sticky;\n    position: sticky;\n    top: 0;\n    z-index: 1020;\n  }\n}\n\n@media (min-width: 1200px) {\n  .sticky-xl-top {\n    position: -webkit-sticky;\n    position: sticky;\n    top: 0;\n    z-index: 1020;\n  }\n}\n\n@media (min-width: 1400px) {\n  .sticky-xxl-top {\n    position: -webkit-sticky;\n    position: sticky;\n    top: 0;\n    z-index: 1020;\n  }\n}\n\n.hstack {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-direction: row;\n  flex-direction: row;\n  -ms-flex-align: center;\n  align-items: center;\n  -ms-flex-item-align: stretch;\n  align-self: stretch;\n}\n\n.vstack {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex: 1 1 auto;\n  flex: 1 1 auto;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  -ms-flex-item-align: stretch;\n  align-self: stretch;\n}\n\n.visually-hidden,\n.visually-hidden-focusable:not(:focus):not(:focus-within) {\n  position: absolute !important;\n  width: 1px !important;\n  height: 1px !important;\n  padding: 0 !important;\n  margin: -1px !important;\n  overflow: hidden !important;\n  clip: rect(0, 0, 0, 0) !important;\n  white-space: nowrap !important;\n  border: 0 !important;\n}\n\n.stretched-link::after {\n  position: absolute;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 1;\n  content: \"\";\n}\n\n.text-truncate {\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n}\n\n.vr {\n  display: inline-block;\n  -ms-flex-item-align: stretch;\n  align-self: stretch;\n  width: 1px;\n  min-height: 1em;\n  background-color: currentColor;\n  opacity: 0.25;\n}\n\n.align-baseline {\n  vertical-align: baseline !important;\n}\n\n.align-top {\n  vertical-align: top !important;\n}\n\n.align-middle {\n  vertical-align: middle !important;\n}\n\n.align-bottom {\n  vertical-align: bottom !important;\n}\n\n.align-text-bottom {\n  vertical-align: text-bottom !important;\n}\n\n.align-text-top {\n  vertical-align: text-top !important;\n}\n\n.float-start {\n  float: left !important;\n}\n\n.float-end {\n  float: right !important;\n}\n\n.float-none {\n  float: none !important;\n}\n\n.opacity-0 {\n  opacity: 0 !important;\n}\n\n.opacity-25 {\n  opacity: 0.25 !important;\n}\n\n.opacity-50 {\n  opacity: 0.5 !important;\n}\n\n.opacity-75 {\n  opacity: 0.75 !important;\n}\n\n.opacity-100 {\n  opacity: 1 !important;\n}\n\n.overflow-auto {\n  overflow: auto !important;\n}\n\n.overflow-hidden {\n  overflow: hidden !important;\n}\n\n.overflow-visible {\n  overflow: visible !important;\n}\n\n.overflow-scroll {\n  overflow: scroll !important;\n}\n\n.d-inline {\n  display: inline !important;\n}\n\n.d-inline-block {\n  display: inline-block !important;\n}\n\n.d-block {\n  display: block !important;\n}\n\n.d-grid {\n  display: grid !important;\n}\n\n.d-table {\n  display: table !important;\n}\n\n.d-table-row {\n  display: table-row !important;\n}\n\n.d-table-cell {\n  display: table-cell !important;\n}\n\n.d-flex {\n  display: -ms-flexbox !important;\n  display: flex !important;\n}\n\n.d-inline-flex {\n  display: -ms-inline-flexbox !important;\n  display: inline-flex !important;\n}\n\n.d-none {\n  display: none !important;\n}\n\n.shadow {\n  box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15) !important;\n}\n\n.shadow-sm {\n  box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075) !important;\n}\n\n.shadow-lg {\n  box-shadow: 0 1rem 3rem rgba(0, 0, 0, 0.175) !important;\n}\n\n.shadow-none {\n  box-shadow: none !important;\n}\n\n.position-static {\n  position: static !important;\n}\n\n.position-relative {\n  position: relative !important;\n}\n\n.position-absolute {\n  position: absolute !important;\n}\n\n.position-fixed {\n  position: fixed !important;\n}\n\n.position-sticky {\n  position: -webkit-sticky !important;\n  position: sticky !important;\n}\n\n.top-0 {\n  top: 0 !important;\n}\n\n.top-50 {\n  top: 50% !important;\n}\n\n.top-100 {\n  top: 100% !important;\n}\n\n.bottom-0 {\n  bottom: 0 !important;\n}\n\n.bottom-50 {\n  bottom: 50% !important;\n}\n\n.bottom-100 {\n  bottom: 100% !important;\n}\n\n.start-0 {\n  left: 0 !important;\n}\n\n.start-50 {\n  left: 50% !important;\n}\n\n.start-100 {\n  left: 100% !important;\n}\n\n.end-0 {\n  right: 0 !important;\n}\n\n.end-50 {\n  right: 50% !important;\n}\n\n.end-100 {\n  right: 100% !important;\n}\n\n.translate-middle {\n  -webkit-transform: translate(-50%, -50%) !important;\n  transform: translate(-50%, -50%) !important;\n}\n\n.translate-middle-x {\n  -webkit-transform: translateX(-50%) !important;\n  transform: translateX(-50%) !important;\n}\n\n.translate-middle-y {\n  -webkit-transform: translateY(-50%) !important;\n  transform: translateY(-50%) !important;\n}\n\n.border {\n  border: 1px solid #dee2e6 !important;\n}\n\n.border-0 {\n  border: 0 !important;\n}\n\n.border-top {\n  border-top: 1px solid #dee2e6 !important;\n}\n\n.border-top-0 {\n  border-top: 0 !important;\n}\n\n.border-end {\n  border-right: 1px solid #dee2e6 !important;\n}\n\n.border-end-0 {\n  border-right: 0 !important;\n}\n\n.border-bottom {\n  border-bottom: 1px solid #dee2e6 !important;\n}\n\n.border-bottom-0 {\n  border-bottom: 0 !important;\n}\n\n.border-start {\n  border-left: 1px solid #dee2e6 !important;\n}\n\n.border-start-0 {\n  border-left: 0 !important;\n}\n\n.border-primary {\n  border-color: #008cba !important;\n}\n\n.border-secondary {\n  border-color: #eee !important;\n}\n\n.border-success {\n  border-color: #43ac6a !important;\n}\n\n.border-info {\n  border-color: #5bc0de !important;\n}\n\n.border-warning {\n  border-color: #e99002 !important;\n}\n\n.border-danger {\n  border-color: #f04124 !important;\n}\n\n.border-light {\n  border-color: #eee !important;\n}\n\n.border-dark {\n  border-color: #222 !important;\n}\n\n.border-white {\n  border-color: #fff !important;\n}\n\n.border-1 {\n  border-width: 1px !important;\n}\n\n.border-2 {\n  border-width: 2px !important;\n}\n\n.border-3 {\n  border-width: 3px !important;\n}\n\n.border-4 {\n  border-width: 4px !important;\n}\n\n.border-5 {\n  border-width: 5px !important;\n}\n\n.w-25 {\n  width: 25% !important;\n}\n\n.w-50 {\n  width: 50% !important;\n}\n\n.w-75 {\n  width: 75% !important;\n}\n\n.w-100 {\n  width: 100% !important;\n}\n\n.w-auto {\n  width: auto !important;\n}\n\n.mw-100 {\n  max-width: 100% !important;\n}\n\n.vw-100 {\n  width: 100vw !important;\n}\n\n.min-vw-100 {\n  min-width: 100vw !important;\n}\n\n.h-25 {\n  height: 25% !important;\n}\n\n.h-50 {\n  height: 50% !important;\n}\n\n.h-75 {\n  height: 75% !important;\n}\n\n.h-100 {\n  height: 100% !important;\n}\n\n.h-auto {\n  height: auto !important;\n}\n\n.mh-100 {\n  max-height: 100% !important;\n}\n\n.vh-100 {\n  height: 100vh !important;\n}\n\n.min-vh-100 {\n  min-height: 100vh !important;\n}\n\n.flex-fill {\n  -ms-flex: 1 1 auto !important;\n  flex: 1 1 auto !important;\n}\n\n.flex-row {\n  -ms-flex-direction: row !important;\n  flex-direction: row !important;\n}\n\n.flex-column {\n  -ms-flex-direction: column !important;\n  flex-direction: column !important;\n}\n\n.flex-row-reverse {\n  -ms-flex-direction: row-reverse !important;\n  flex-direction: row-reverse !important;\n}\n\n.flex-column-reverse {\n  -ms-flex-direction: column-reverse !important;\n  flex-direction: column-reverse !important;\n}\n\n.flex-grow-0 {\n  -ms-flex-positive: 0 !important;\n  flex-grow: 0 !important;\n}\n\n.flex-grow-1 {\n  -ms-flex-positive: 1 !important;\n  flex-grow: 1 !important;\n}\n\n.flex-shrink-0 {\n  -ms-flex-negative: 0 !important;\n  flex-shrink: 0 !important;\n}\n\n.flex-shrink-1 {\n  -ms-flex-negative: 1 !important;\n  flex-shrink: 1 !important;\n}\n\n.flex-wrap {\n  -ms-flex-wrap: wrap !important;\n  flex-wrap: wrap !important;\n}\n\n.flex-nowrap {\n  -ms-flex-wrap: nowrap !important;\n  flex-wrap: nowrap !important;\n}\n\n.flex-wrap-reverse {\n  -ms-flex-wrap: wrap-reverse !important;\n  flex-wrap: wrap-reverse !important;\n}\n\n.gap-0 {\n  gap: 0 !important;\n}\n\n.gap-1 {\n  gap: 0.25rem !important;\n}\n\n.gap-2 {\n  gap: 0.5rem !important;\n}\n\n.gap-3 {\n  gap: 1rem !important;\n}\n\n.gap-4 {\n  gap: 1.5rem !important;\n}\n\n.gap-5 {\n  gap: 3rem !important;\n}\n\n.justify-content-start {\n  -ms-flex-pack: start !important;\n  justify-content: flex-start !important;\n}\n\n.justify-content-end {\n  -ms-flex-pack: end !important;\n  justify-content: flex-end !important;\n}\n\n.justify-content-center {\n  -ms-flex-pack: center !important;\n  justify-content: center !important;\n}\n\n.justify-content-between {\n  -ms-flex-pack: justify !important;\n  justify-content: space-between !important;\n}\n\n.justify-content-around {\n  -ms-flex-pack: distribute !important;\n  justify-content: space-around !important;\n}\n\n.justify-content-evenly {\n  -ms-flex-pack: space-evenly !important;\n  justify-content: space-evenly !important;\n}\n\n.align-items-start {\n  -ms-flex-align: start !important;\n  align-items: flex-start !important;\n}\n\n.align-items-end {\n  -ms-flex-align: end !important;\n  align-items: flex-end !important;\n}\n\n.align-items-center {\n  -ms-flex-align: center !important;\n  align-items: center !important;\n}\n\n.align-items-baseline {\n  -ms-flex-align: baseline !important;\n  align-items: baseline !important;\n}\n\n.align-items-stretch {\n  -ms-flex-align: stretch !important;\n  align-items: stretch !important;\n}\n\n.align-content-start {\n  -ms-flex-line-pack: start !important;\n  align-content: flex-start !important;\n}\n\n.align-content-end {\n  -ms-flex-line-pack: end !important;\n  align-content: flex-end !important;\n}\n\n.align-content-center {\n  -ms-flex-line-pack: center !important;\n  align-content: center !important;\n}\n\n.align-content-between {\n  -ms-flex-line-pack: justify !important;\n  align-content: space-between !important;\n}\n\n.align-content-around {\n  -ms-flex-line-pack: distribute !important;\n  align-content: space-around !important;\n}\n\n.align-content-stretch {\n  -ms-flex-line-pack: stretch !important;\n  align-content: stretch !important;\n}\n\n.align-self-auto {\n  -ms-flex-item-align: auto !important;\n  align-self: auto !important;\n}\n\n.align-self-start {\n  -ms-flex-item-align: start !important;\n  align-self: flex-start !important;\n}\n\n.align-self-end {\n  -ms-flex-item-align: end !important;\n  align-self: flex-end !important;\n}\n\n.align-self-center {\n  -ms-flex-item-align: center !important;\n  align-self: center !important;\n}\n\n.align-self-baseline {\n  -ms-flex-item-align: baseline !important;\n  align-self: baseline !important;\n}\n\n.align-self-stretch {\n  -ms-flex-item-align: stretch !important;\n  align-self: stretch !important;\n}\n\n.order-first {\n  -ms-flex-order: -1 !important;\n  order: -1 !important;\n}\n\n.order-0 {\n  -ms-flex-order: 0 !important;\n  order: 0 !important;\n}\n\n.order-1 {\n  -ms-flex-order: 1 !important;\n  order: 1 !important;\n}\n\n.order-2 {\n  -ms-flex-order: 2 !important;\n  order: 2 !important;\n}\n\n.order-3 {\n  -ms-flex-order: 3 !important;\n  order: 3 !important;\n}\n\n.order-4 {\n  -ms-flex-order: 4 !important;\n  order: 4 !important;\n}\n\n.order-5 {\n  -ms-flex-order: 5 !important;\n  order: 5 !important;\n}\n\n.order-last {\n  -ms-flex-order: 6 !important;\n  order: 6 !important;\n}\n\n.m-0 {\n  margin: 0 !important;\n}\n\n.m-1 {\n  margin: 0.25rem !important;\n}\n\n.m-2 {\n  margin: 0.5rem !important;\n}\n\n.m-3 {\n  margin: 1rem !important;\n}\n\n.m-4 {\n  margin: 1.5rem !important;\n}\n\n.m-5 {\n  margin: 3rem !important;\n}\n\n.m-auto {\n  margin: auto !important;\n}\n\n.mx-0 {\n  margin-right: 0 !important;\n  margin-left: 0 !important;\n}\n\n.mx-1 {\n  margin-right: 0.25rem !important;\n  margin-left: 0.25rem !important;\n}\n\n.mx-2 {\n  margin-right: 0.5rem !important;\n  margin-left: 0.5rem !important;\n}\n\n.mx-3 {\n  margin-right: 1rem !important;\n  margin-left: 1rem !important;\n}\n\n.mx-4 {\n  margin-right: 1.5rem !important;\n  margin-left: 1.5rem !important;\n}\n\n.mx-5 {\n  margin-right: 3rem !important;\n  margin-left: 3rem !important;\n}\n\n.mx-auto {\n  margin-right: auto !important;\n  margin-left: auto !important;\n}\n\n.my-0 {\n  margin-top: 0 !important;\n  margin-bottom: 0 !important;\n}\n\n.my-1 {\n  margin-top: 0.25rem !important;\n  margin-bottom: 0.25rem !important;\n}\n\n.my-2 {\n  margin-top: 0.5rem !important;\n  margin-bottom: 0.5rem !important;\n}\n\n.my-3 {\n  margin-top: 1rem !important;\n  margin-bottom: 1rem !important;\n}\n\n.my-4 {\n  margin-top: 1.5rem !important;\n  margin-bottom: 1.5rem !important;\n}\n\n.my-5 {\n  margin-top: 3rem !important;\n  margin-bottom: 3rem !important;\n}\n\n.my-auto {\n  margin-top: auto !important;\n  margin-bottom: auto !important;\n}\n\n.mt-0 {\n  margin-top: 0 !important;\n}\n\n.mt-1 {\n  margin-top: 0.25rem !important;\n}\n\n.mt-2 {\n  margin-top: 0.5rem !important;\n}\n\n.mt-3 {\n  margin-top: 1rem !important;\n}\n\n.mt-4 {\n  margin-top: 1.5rem !important;\n}\n\n.mt-5 {\n  margin-top: 3rem !important;\n}\n\n.mt-auto {\n  margin-top: auto !important;\n}\n\n.me-0 {\n  margin-right: 0 !important;\n}\n\n.me-1 {\n  margin-right: 0.25rem !important;\n}\n\n.me-2 {\n  margin-right: 0.5rem !important;\n}\n\n.me-3 {\n  margin-right: 1rem !important;\n}\n\n.me-4 {\n  margin-right: 1.5rem !important;\n}\n\n.me-5 {\n  margin-right: 3rem !important;\n}\n\n.me-auto {\n  margin-right: auto !important;\n}\n\n.mb-0 {\n  margin-bottom: 0 !important;\n}\n\n.mb-1 {\n  margin-bottom: 0.25rem !important;\n}\n\n.mb-2 {\n  margin-bottom: 0.5rem !important;\n}\n\n.mb-3 {\n  margin-bottom: 1rem !important;\n}\n\n.mb-4 {\n  margin-bottom: 1.5rem !important;\n}\n\n.mb-5 {\n  margin-bottom: 3rem !important;\n}\n\n.mb-auto {\n  margin-bottom: auto !important;\n}\n\n.ms-0 {\n  margin-left: 0 !important;\n}\n\n.ms-1 {\n  margin-left: 0.25rem !important;\n}\n\n.ms-2 {\n  margin-left: 0.5rem !important;\n}\n\n.ms-3 {\n  margin-left: 1rem !important;\n}\n\n.ms-4 {\n  margin-left: 1.5rem !important;\n}\n\n.ms-5 {\n  margin-left: 3rem !important;\n}\n\n.ms-auto {\n  margin-left: auto !important;\n}\n\n.p-0 {\n  padding: 0 !important;\n}\n\n.p-1 {\n  padding: 0.25rem !important;\n}\n\n.p-2 {\n  padding: 0.5rem !important;\n}\n\n.p-3 {\n  padding: 1rem !important;\n}\n\n.p-4 {\n  padding: 1.5rem !important;\n}\n\n.p-5 {\n  padding: 3rem !important;\n}\n\n.px-0 {\n  padding-right: 0 !important;\n  padding-left: 0 !important;\n}\n\n.px-1 {\n  padding-right: 0.25rem !important;\n  padding-left: 0.25rem !important;\n}\n\n.px-2 {\n  padding-right: 0.5rem !important;\n  padding-left: 0.5rem !important;\n}\n\n.px-3 {\n  padding-right: 1rem !important;\n  padding-left: 1rem !important;\n}\n\n.px-4 {\n  padding-right: 1.5rem !important;\n  padding-left: 1.5rem !important;\n}\n\n.px-5 {\n  padding-right: 3rem !important;\n  padding-left: 3rem !important;\n}\n\n.py-0 {\n  padding-top: 0 !important;\n  padding-bottom: 0 !important;\n}\n\n.py-1 {\n  padding-top: 0.25rem !important;\n  padding-bottom: 0.25rem !important;\n}\n\n.py-2 {\n  padding-top: 0.5rem !important;\n  padding-bottom: 0.5rem !important;\n}\n\n.py-3 {\n  padding-top: 1rem !important;\n  padding-bottom: 1rem !important;\n}\n\n.py-4 {\n  padding-top: 1.5rem !important;\n  padding-bottom: 1.5rem !important;\n}\n\n.py-5 {\n  padding-top: 3rem !important;\n  padding-bottom: 3rem !important;\n}\n\n.pt-0 {\n  padding-top: 0 !important;\n}\n\n.pt-1 {\n  padding-top: 0.25rem !important;\n}\n\n.pt-2 {\n  padding-top: 0.5rem !important;\n}\n\n.pt-3 {\n  padding-top: 1rem !important;\n}\n\n.pt-4 {\n  padding-top: 1.5rem !important;\n}\n\n.pt-5 {\n  padding-top: 3rem !important;\n}\n\n.pe-0 {\n  padding-right: 0 !important;\n}\n\n.pe-1 {\n  padding-right: 0.25rem !important;\n}\n\n.pe-2 {\n  padding-right: 0.5rem !important;\n}\n\n.pe-3 {\n  padding-right: 1rem !important;\n}\n\n.pe-4 {\n  padding-right: 1.5rem !important;\n}\n\n.pe-5 {\n  padding-right: 3rem !important;\n}\n\n.pb-0 {\n  padding-bottom: 0 !important;\n}\n\n.pb-1 {\n  padding-bottom: 0.25rem !important;\n}\n\n.pb-2 {\n  padding-bottom: 0.5rem !important;\n}\n\n.pb-3 {\n  padding-bottom: 1rem !important;\n}\n\n.pb-4 {\n  padding-bottom: 1.5rem !important;\n}\n\n.pb-5 {\n  padding-bottom: 3rem !important;\n}\n\n.ps-0 {\n  padding-left: 0 !important;\n}\n\n.ps-1 {\n  padding-left: 0.25rem !important;\n}\n\n.ps-2 {\n  padding-left: 0.5rem !important;\n}\n\n.ps-3 {\n  padding-left: 1rem !important;\n}\n\n.ps-4 {\n  padding-left: 1.5rem !important;\n}\n\n.ps-5 {\n  padding-left: 3rem !important;\n}\n\n.font-monospace {\n  font-family: var(--bs-font-monospace) !important;\n}\n\n.fs-1 {\n  font-size: calc(1.375rem + 1.5vw) !important;\n}\n\n.fs-2 {\n  font-size: calc(1.325rem + 0.9vw) !important;\n}\n\n.fs-3 {\n  font-size: calc(1.3rem + 0.6vw) !important;\n}\n\n.fs-4 {\n  font-size: calc(1.275rem + 0.3vw) !important;\n}\n\n.fs-5 {\n  font-size: 1.25rem !important;\n}\n\n.fs-6 {\n  font-size: 1rem !important;\n}\n\n.fst-italic {\n  font-style: italic !important;\n}\n\n.fst-normal {\n  font-style: normal !important;\n}\n\n.fw-light {\n  font-weight: 300 !important;\n}\n\n.fw-lighter {\n  font-weight: lighter !important;\n}\n\n.fw-normal {\n  font-weight: 400 !important;\n}\n\n.fw-bold {\n  font-weight: 700 !important;\n}\n\n.fw-bolder {\n  font-weight: bolder !important;\n}\n\n.lh-1 {\n  line-height: 1 !important;\n}\n\n.lh-sm {\n  line-height: 1.25 !important;\n}\n\n.lh-base {\n  line-height: 1.5 !important;\n}\n\n.lh-lg {\n  line-height: 2 !important;\n}\n\n.text-start {\n  text-align: left !important;\n}\n\n.text-end {\n  text-align: right !important;\n}\n\n.text-center {\n  text-align: center !important;\n}\n\n.text-decoration-none {\n  text-decoration: none !important;\n}\n\n.text-decoration-underline {\n  text-decoration: underline !important;\n}\n\n.text-decoration-line-through {\n  text-decoration: line-through !important;\n}\n\n.text-lowercase {\n  text-transform: lowercase !important;\n}\n\n.text-uppercase {\n  text-transform: uppercase !important;\n}\n\n.text-capitalize {\n  text-transform: capitalize !important;\n}\n\n.text-wrap {\n  white-space: normal !important;\n}\n\n.text-nowrap {\n  white-space: nowrap !important;\n}\n\n/* rtl:begin:remove */\n.text-break {\n  word-wrap: break-word !important;\n  word-break: break-word !important;\n}\n\n/* rtl:end:remove */\n.text-primary {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-primary-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-secondary {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-secondary-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-success {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-success-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-info {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-info-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-warning {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-warning-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-danger {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-danger-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-light {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-light-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-dark {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-dark-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-black {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-black-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-white {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-white-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-body {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-body-color-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-muted {\n  --bs-text-opacity: 1;\n  color: #888 !important;\n}\n\n.text-black-50 {\n  --bs-text-opacity: 1;\n  color: rgba(0, 0, 0, 0.5) !important;\n}\n\n.text-white-50 {\n  --bs-text-opacity: 1;\n  color: rgba(255, 255, 255, 0.5) !important;\n}\n\n.text-reset {\n  --bs-text-opacity: 1;\n  color: inherit !important;\n}\n\n.text-opacity-25 {\n  --bs-text-opacity: 0.25;\n}\n\n.text-opacity-50 {\n  --bs-text-opacity: 0.5;\n}\n\n.text-opacity-75 {\n  --bs-text-opacity: 0.75;\n}\n\n.text-opacity-100 {\n  --bs-text-opacity: 1;\n}\n\n.bg-primary {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-primary-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-secondary {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-secondary-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-success {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-success-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-info {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-info-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-warning {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-warning-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-danger {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-danger-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-light {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-light-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-dark {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-dark-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-black {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-black-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-white {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-white-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-body {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-body-bg-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-transparent {\n  --bs-bg-opacity: 1;\n  background-color: transparent !important;\n}\n\n.bg-opacity-10 {\n  --bs-bg-opacity: 0.1;\n}\n\n.bg-opacity-25 {\n  --bs-bg-opacity: 0.25;\n}\n\n.bg-opacity-50 {\n  --bs-bg-opacity: 0.5;\n}\n\n.bg-opacity-75 {\n  --bs-bg-opacity: 0.75;\n}\n\n.bg-opacity-100 {\n  --bs-bg-opacity: 1;\n}\n\n.bg-gradient {\n  background-image: var(--bs-gradient) !important;\n}\n\n.user-select-all {\n  -webkit-user-select: all !important;\n  -moz-user-select: all !important;\n  user-select: all !important;\n}\n\n.user-select-auto {\n  -webkit-user-select: auto !important;\n  -moz-user-select: auto !important;\n  -ms-user-select: auto !important;\n  user-select: auto !important;\n}\n\n.user-select-none {\n  -webkit-user-select: none !important;\n  -moz-user-select: none !important;\n  -ms-user-select: none !important;\n  user-select: none !important;\n}\n\n.pe-none {\n  pointer-events: none !important;\n}\n\n.pe-auto {\n  pointer-events: auto !important;\n}\n\n.rounded {\n  border-radius: 0 !important;\n}\n\n.rounded-0 {\n  border-radius: 0 !important;\n}\n\n.rounded-1 {\n  border-radius: 0 !important;\n}\n\n.rounded-2 {\n  border-radius: 0 !important;\n}\n\n.rounded-3 {\n  border-radius: 0 !important;\n}\n\n.rounded-circle {\n  border-radius: 50% !important;\n}\n\n.rounded-pill {\n  border-radius: 50rem !important;\n}\n\n.rounded-top {\n  border-top-left-radius: 0 !important;\n  border-top-right-radius: 0 !important;\n}\n\n.rounded-end {\n  border-top-right-radius: 0 !important;\n  border-bottom-right-radius: 0 !important;\n}\n\n.rounded-bottom {\n  border-bottom-right-radius: 0 !important;\n  border-bottom-left-radius: 0 !important;\n}\n\n.rounded-start {\n  border-bottom-left-radius: 0 !important;\n  border-top-left-radius: 0 !important;\n}\n\n.visible {\n  visibility: visible !important;\n}\n\n.invisible {\n  visibility: hidden !important;\n}\n\n@media (min-width: 576px) {\n  .float-sm-start {\n    float: left !important;\n  }\n  .float-sm-end {\n    float: right !important;\n  }\n  .float-sm-none {\n    float: none !important;\n  }\n  .d-sm-inline {\n    display: inline !important;\n  }\n  .d-sm-inline-block {\n    display: inline-block !important;\n  }\n  .d-sm-block {\n    display: block !important;\n  }\n  .d-sm-grid {\n    display: grid !important;\n  }\n  .d-sm-table {\n    display: table !important;\n  }\n  .d-sm-table-row {\n    display: table-row !important;\n  }\n  .d-sm-table-cell {\n    display: table-cell !important;\n  }\n  .d-sm-flex {\n    display: -ms-flexbox !important;\n    display: flex !important;\n  }\n  .d-sm-inline-flex {\n    display: -ms-inline-flexbox !important;\n    display: inline-flex !important;\n  }\n  .d-sm-none {\n    display: none !important;\n  }\n  .flex-sm-fill {\n    -ms-flex: 1 1 auto !important;\n    flex: 1 1 auto !important;\n  }\n  .flex-sm-row {\n    -ms-flex-direction: row !important;\n    flex-direction: row !important;\n  }\n  .flex-sm-column {\n    -ms-flex-direction: column !important;\n    flex-direction: column !important;\n  }\n  .flex-sm-row-reverse {\n    -ms-flex-direction: row-reverse !important;\n    flex-direction: row-reverse !important;\n  }\n  .flex-sm-column-reverse {\n    -ms-flex-direction: column-reverse !important;\n    flex-direction: column-reverse !important;\n  }\n  .flex-sm-grow-0 {\n    -ms-flex-positive: 0 !important;\n    flex-grow: 0 !important;\n  }\n  .flex-sm-grow-1 {\n    -ms-flex-positive: 1 !important;\n    flex-grow: 1 !important;\n  }\n  .flex-sm-shrink-0 {\n    -ms-flex-negative: 0 !important;\n    flex-shrink: 0 !important;\n  }\n  .flex-sm-shrink-1 {\n    -ms-flex-negative: 1 !important;\n    flex-shrink: 1 !important;\n  }\n  .flex-sm-wrap {\n    -ms-flex-wrap: wrap !important;\n    flex-wrap: wrap !important;\n  }\n  .flex-sm-nowrap {\n    -ms-flex-wrap: nowrap !important;\n    flex-wrap: nowrap !important;\n  }\n  .flex-sm-wrap-reverse {\n    -ms-flex-wrap: wrap-reverse !important;\n    flex-wrap: wrap-reverse !important;\n  }\n  .gap-sm-0 {\n    gap: 0 !important;\n  }\n  .gap-sm-1 {\n    gap: 0.25rem !important;\n  }\n  .gap-sm-2 {\n    gap: 0.5rem !important;\n  }\n  .gap-sm-3 {\n    gap: 1rem !important;\n  }\n  .gap-sm-4 {\n    gap: 1.5rem !important;\n  }\n  .gap-sm-5 {\n    gap: 3rem !important;\n  }\n  .justify-content-sm-start {\n    -ms-flex-pack: start !important;\n    justify-content: flex-start !important;\n  }\n  .justify-content-sm-end {\n    -ms-flex-pack: end !important;\n    justify-content: flex-end !important;\n  }\n  .justify-content-sm-center {\n    -ms-flex-pack: center !important;\n    justify-content: center !important;\n  }\n  .justify-content-sm-between {\n    -ms-flex-pack: justify !important;\n    justify-content: space-between !important;\n  }\n  .justify-content-sm-around {\n    -ms-flex-pack: distribute !important;\n    justify-content: space-around !important;\n  }\n  .justify-content-sm-evenly {\n    -ms-flex-pack: space-evenly !important;\n    justify-content: space-evenly !important;\n  }\n  .align-items-sm-start {\n    -ms-flex-align: start !important;\n    align-items: flex-start !important;\n  }\n  .align-items-sm-end {\n    -ms-flex-align: end !important;\n    align-items: flex-end !important;\n  }\n  .align-items-sm-center {\n    -ms-flex-align: center !important;\n    align-items: center !important;\n  }\n  .align-items-sm-baseline {\n    -ms-flex-align: baseline !important;\n    align-items: baseline !important;\n  }\n  .align-items-sm-stretch {\n    -ms-flex-align: stretch !important;\n    align-items: stretch !important;\n  }\n  .align-content-sm-start {\n    -ms-flex-line-pack: start !important;\n    align-content: flex-start !important;\n  }\n  .align-content-sm-end {\n    -ms-flex-line-pack: end !important;\n    align-content: flex-end !important;\n  }\n  .align-content-sm-center {\n    -ms-flex-line-pack: center !important;\n    align-content: center !important;\n  }\n  .align-content-sm-between {\n    -ms-flex-line-pack: justify !important;\n    align-content: space-between !important;\n  }\n  .align-content-sm-around {\n    -ms-flex-line-pack: distribute !important;\n    align-content: space-around !important;\n  }\n  .align-content-sm-stretch {\n    -ms-flex-line-pack: stretch !important;\n    align-content: stretch !important;\n  }\n  .align-self-sm-auto {\n    -ms-flex-item-align: auto !important;\n    align-self: auto !important;\n  }\n  .align-self-sm-start {\n    -ms-flex-item-align: start !important;\n    align-self: flex-start !important;\n  }\n  .align-self-sm-end {\n    -ms-flex-item-align: end !important;\n    align-self: flex-end !important;\n  }\n  .align-self-sm-center {\n    -ms-flex-item-align: center !important;\n    align-self: center !important;\n  }\n  .align-self-sm-baseline {\n    -ms-flex-item-align: baseline !important;\n    align-self: baseline !important;\n  }\n  .align-self-sm-stretch {\n    -ms-flex-item-align: stretch !important;\n    align-self: stretch !important;\n  }\n  .order-sm-first {\n    -ms-flex-order: -1 !important;\n    order: -1 !important;\n  }\n  .order-sm-0 {\n    -ms-flex-order: 0 !important;\n    order: 0 !important;\n  }\n  .order-sm-1 {\n    -ms-flex-order: 1 !important;\n    order: 1 !important;\n  }\n  .order-sm-2 {\n    -ms-flex-order: 2 !important;\n    order: 2 !important;\n  }\n  .order-sm-3 {\n    -ms-flex-order: 3 !important;\n    order: 3 !important;\n  }\n  .order-sm-4 {\n    -ms-flex-order: 4 !important;\n    order: 4 !important;\n  }\n  .order-sm-5 {\n    -ms-flex-order: 5 !important;\n    order: 5 !important;\n  }\n  .order-sm-last {\n    -ms-flex-order: 6 !important;\n    order: 6 !important;\n  }\n  .m-sm-0 {\n    margin: 0 !important;\n  }\n  .m-sm-1 {\n    margin: 0.25rem !important;\n  }\n  .m-sm-2 {\n    margin: 0.5rem !important;\n  }\n  .m-sm-3 {\n    margin: 1rem !important;\n  }\n  .m-sm-4 {\n    margin: 1.5rem !important;\n  }\n  .m-sm-5 {\n    margin: 3rem !important;\n  }\n  .m-sm-auto {\n    margin: auto !important;\n  }\n  .mx-sm-0 {\n    margin-right: 0 !important;\n    margin-left: 0 !important;\n  }\n  .mx-sm-1 {\n    margin-right: 0.25rem !important;\n    margin-left: 0.25rem !important;\n  }\n  .mx-sm-2 {\n    margin-right: 0.5rem !important;\n    margin-left: 0.5rem !important;\n  }\n  .mx-sm-3 {\n    margin-right: 1rem !important;\n    margin-left: 1rem !important;\n  }\n  .mx-sm-4 {\n    margin-right: 1.5rem !important;\n    margin-left: 1.5rem !important;\n  }\n  .mx-sm-5 {\n    margin-right: 3rem !important;\n    margin-left: 3rem !important;\n  }\n  .mx-sm-auto {\n    margin-right: auto !important;\n    margin-left: auto !important;\n  }\n  .my-sm-0 {\n    margin-top: 0 !important;\n    margin-bottom: 0 !important;\n  }\n  .my-sm-1 {\n    margin-top: 0.25rem !important;\n    margin-bottom: 0.25rem !important;\n  }\n  .my-sm-2 {\n    margin-top: 0.5rem !important;\n    margin-bottom: 0.5rem !important;\n  }\n  .my-sm-3 {\n    margin-top: 1rem !important;\n    margin-bottom: 1rem !important;\n  }\n  .my-sm-4 {\n    margin-top: 1.5rem !important;\n    margin-bottom: 1.5rem !important;\n  }\n  .my-sm-5 {\n    margin-top: 3rem !important;\n    margin-bottom: 3rem !important;\n  }\n  .my-sm-auto {\n    margin-top: auto !important;\n    margin-bottom: auto !important;\n  }\n  .mt-sm-0 {\n    margin-top: 0 !important;\n  }\n  .mt-sm-1 {\n    margin-top: 0.25rem !important;\n  }\n  .mt-sm-2 {\n    margin-top: 0.5rem !important;\n  }\n  .mt-sm-3 {\n    margin-top: 1rem !important;\n  }\n  .mt-sm-4 {\n    margin-top: 1.5rem !important;\n  }\n  .mt-sm-5 {\n    margin-top: 3rem !important;\n  }\n  .mt-sm-auto {\n    margin-top: auto !important;\n  }\n  .me-sm-0 {\n    margin-right: 0 !important;\n  }\n  .me-sm-1 {\n    margin-right: 0.25rem !important;\n  }\n  .me-sm-2 {\n    margin-right: 0.5rem !important;\n  }\n  .me-sm-3 {\n    margin-right: 1rem !important;\n  }\n  .me-sm-4 {\n    margin-right: 1.5rem !important;\n  }\n  .me-sm-5 {\n    margin-right: 3rem !important;\n  }\n  .me-sm-auto {\n    margin-right: auto !important;\n  }\n  .mb-sm-0 {\n    margin-bottom: 0 !important;\n  }\n  .mb-sm-1 {\n    margin-bottom: 0.25rem !important;\n  }\n  .mb-sm-2 {\n    margin-bottom: 0.5rem !important;\n  }\n  .mb-sm-3 {\n    margin-bottom: 1rem !important;\n  }\n  .mb-sm-4 {\n    margin-bottom: 1.5rem !important;\n  }\n  .mb-sm-5 {\n    margin-bottom: 3rem !important;\n  }\n  .mb-sm-auto {\n    margin-bottom: auto !important;\n  }\n  .ms-sm-0 {\n    margin-left: 0 !important;\n  }\n  .ms-sm-1 {\n    margin-left: 0.25rem !important;\n  }\n  .ms-sm-2 {\n    margin-left: 0.5rem !important;\n  }\n  .ms-sm-3 {\n    margin-left: 1rem !important;\n  }\n  .ms-sm-4 {\n    margin-left: 1.5rem !important;\n  }\n  .ms-sm-5 {\n    margin-left: 3rem !important;\n  }\n  .ms-sm-auto {\n    margin-left: auto !important;\n  }\n  .p-sm-0 {\n    padding: 0 !important;\n  }\n  .p-sm-1 {\n    padding: 0.25rem !important;\n  }\n  .p-sm-2 {\n    padding: 0.5rem !important;\n  }\n  .p-sm-3 {\n    padding: 1rem !important;\n  }\n  .p-sm-4 {\n    padding: 1.5rem !important;\n  }\n  .p-sm-5 {\n    padding: 3rem !important;\n  }\n  .px-sm-0 {\n    padding-right: 0 !important;\n    padding-left: 0 !important;\n  }\n  .px-sm-1 {\n    padding-right: 0.25rem !important;\n    padding-left: 0.25rem !important;\n  }\n  .px-sm-2 {\n    padding-right: 0.5rem !important;\n    padding-left: 0.5rem !important;\n  }\n  .px-sm-3 {\n    padding-right: 1rem !important;\n    padding-left: 1rem !important;\n  }\n  .px-sm-4 {\n    padding-right: 1.5rem !important;\n    padding-left: 1.5rem !important;\n  }\n  .px-sm-5 {\n    padding-right: 3rem !important;\n    padding-left: 3rem !important;\n  }\n  .py-sm-0 {\n    padding-top: 0 !important;\n    padding-bottom: 0 !important;\n  }\n  .py-sm-1 {\n    padding-top: 0.25rem !important;\n    padding-bottom: 0.25rem !important;\n  }\n  .py-sm-2 {\n    padding-top: 0.5rem !important;\n    padding-bottom: 0.5rem !important;\n  }\n  .py-sm-3 {\n    padding-top: 1rem !important;\n    padding-bottom: 1rem !important;\n  }\n  .py-sm-4 {\n    padding-top: 1.5rem !important;\n    padding-bottom: 1.5rem !important;\n  }\n  .py-sm-5 {\n    padding-top: 3rem !important;\n    padding-bottom: 3rem !important;\n  }\n  .pt-sm-0 {\n    padding-top: 0 !important;\n  }\n  .pt-sm-1 {\n    padding-top: 0.25rem !important;\n  }\n  .pt-sm-2 {\n    padding-top: 0.5rem !important;\n  }\n  .pt-sm-3 {\n    padding-top: 1rem !important;\n  }\n  .pt-sm-4 {\n    padding-top: 1.5rem !important;\n  }\n  .pt-sm-5 {\n    padding-top: 3rem !important;\n  }\n  .pe-sm-0 {\n    padding-right: 0 !important;\n  }\n  .pe-sm-1 {\n    padding-right: 0.25rem !important;\n  }\n  .pe-sm-2 {\n    padding-right: 0.5rem !important;\n  }\n  .pe-sm-3 {\n    padding-right: 1rem !important;\n  }\n  .pe-sm-4 {\n    padding-right: 1.5rem !important;\n  }\n  .pe-sm-5 {\n    padding-right: 3rem !important;\n  }\n  .pb-sm-0 {\n    padding-bottom: 0 !important;\n  }\n  .pb-sm-1 {\n    padding-bottom: 0.25rem !important;\n  }\n  .pb-sm-2 {\n    padding-bottom: 0.5rem !important;\n  }\n  .pb-sm-3 {\n    padding-bottom: 1rem !important;\n  }\n  .pb-sm-4 {\n    padding-bottom: 1.5rem !important;\n  }\n  .pb-sm-5 {\n    padding-bottom: 3rem !important;\n  }\n  .ps-sm-0 {\n    padding-left: 0 !important;\n  }\n  .ps-sm-1 {\n    padding-left: 0.25rem !important;\n  }\n  .ps-sm-2 {\n    padding-left: 0.5rem !important;\n  }\n  .ps-sm-3 {\n    padding-left: 1rem !important;\n  }\n  .ps-sm-4 {\n    padding-left: 1.5rem !important;\n  }\n  .ps-sm-5 {\n    padding-left: 3rem !important;\n  }\n  .text-sm-start {\n    text-align: left !important;\n  }\n  .text-sm-end {\n    text-align: right !important;\n  }\n  .text-sm-center {\n    text-align: center !important;\n  }\n}\n\n@media (min-width: 768px) {\n  .float-md-start {\n    float: left !important;\n  }\n  .float-md-end {\n    float: right !important;\n  }\n  .float-md-none {\n    float: none !important;\n  }\n  .d-md-inline {\n    display: inline !important;\n  }\n  .d-md-inline-block {\n    display: inline-block !important;\n  }\n  .d-md-block {\n    display: block !important;\n  }\n  .d-md-grid {\n    display: grid !important;\n  }\n  .d-md-table {\n    display: table !important;\n  }\n  .d-md-table-row {\n    display: table-row !important;\n  }\n  .d-md-table-cell {\n    display: table-cell !important;\n  }\n  .d-md-flex {\n    display: -ms-flexbox !important;\n    display: flex !important;\n  }\n  .d-md-inline-flex {\n    display: -ms-inline-flexbox !important;\n    display: inline-flex !important;\n  }\n  .d-md-none {\n    display: none !important;\n  }\n  .flex-md-fill {\n    -ms-flex: 1 1 auto !important;\n    flex: 1 1 auto !important;\n  }\n  .flex-md-row {\n    -ms-flex-direction: row !important;\n    flex-direction: row !important;\n  }\n  .flex-md-column {\n    -ms-flex-direction: column !important;\n    flex-direction: column !important;\n  }\n  .flex-md-row-reverse {\n    -ms-flex-direction: row-reverse !important;\n    flex-direction: row-reverse !important;\n  }\n  .flex-md-column-reverse {\n    -ms-flex-direction: column-reverse !important;\n    flex-direction: column-reverse !important;\n  }\n  .flex-md-grow-0 {\n    -ms-flex-positive: 0 !important;\n    flex-grow: 0 !important;\n  }\n  .flex-md-grow-1 {\n    -ms-flex-positive: 1 !important;\n    flex-grow: 1 !important;\n  }\n  .flex-md-shrink-0 {\n    -ms-flex-negative: 0 !important;\n    flex-shrink: 0 !important;\n  }\n  .flex-md-shrink-1 {\n    -ms-flex-negative: 1 !important;\n    flex-shrink: 1 !important;\n  }\n  .flex-md-wrap {\n    -ms-flex-wrap: wrap !important;\n    flex-wrap: wrap !important;\n  }\n  .flex-md-nowrap {\n    -ms-flex-wrap: nowrap !important;\n    flex-wrap: nowrap !important;\n  }\n  .flex-md-wrap-reverse {\n    -ms-flex-wrap: wrap-reverse !important;\n    flex-wrap: wrap-reverse !important;\n  }\n  .gap-md-0 {\n    gap: 0 !important;\n  }\n  .gap-md-1 {\n    gap: 0.25rem !important;\n  }\n  .gap-md-2 {\n    gap: 0.5rem !important;\n  }\n  .gap-md-3 {\n    gap: 1rem !important;\n  }\n  .gap-md-4 {\n    gap: 1.5rem !important;\n  }\n  .gap-md-5 {\n    gap: 3rem !important;\n  }\n  .justify-content-md-start {\n    -ms-flex-pack: start !important;\n    justify-content: flex-start !important;\n  }\n  .justify-content-md-end {\n    -ms-flex-pack: end !important;\n    justify-content: flex-end !important;\n  }\n  .justify-content-md-center {\n    -ms-flex-pack: center !important;\n    justify-content: center !important;\n  }\n  .justify-content-md-between {\n    -ms-flex-pack: justify !important;\n    justify-content: space-between !important;\n  }\n  .justify-content-md-around {\n    -ms-flex-pack: distribute !important;\n    justify-content: space-around !important;\n  }\n  .justify-content-md-evenly {\n    -ms-flex-pack: space-evenly !important;\n    justify-content: space-evenly !important;\n  }\n  .align-items-md-start {\n    -ms-flex-align: start !important;\n    align-items: flex-start !important;\n  }\n  .align-items-md-end {\n    -ms-flex-align: end !important;\n    align-items: flex-end !important;\n  }\n  .align-items-md-center {\n    -ms-flex-align: center !important;\n    align-items: center !important;\n  }\n  .align-items-md-baseline {\n    -ms-flex-align: baseline !important;\n    align-items: baseline !important;\n  }\n  .align-items-md-stretch {\n    -ms-flex-align: stretch !important;\n    align-items: stretch !important;\n  }\n  .align-content-md-start {\n    -ms-flex-line-pack: start !important;\n    align-content: flex-start !important;\n  }\n  .align-content-md-end {\n    -ms-flex-line-pack: end !important;\n    align-content: flex-end !important;\n  }\n  .align-content-md-center {\n    -ms-flex-line-pack: center !important;\n    align-content: center !important;\n  }\n  .align-content-md-between {\n    -ms-flex-line-pack: justify !important;\n    align-content: space-between !important;\n  }\n  .align-content-md-around {\n    -ms-flex-line-pack: distribute !important;\n    align-content: space-around !important;\n  }\n  .align-content-md-stretch {\n    -ms-flex-line-pack: stretch !important;\n    align-content: stretch !important;\n  }\n  .align-self-md-auto {\n    -ms-flex-item-align: auto !important;\n    align-self: auto !important;\n  }\n  .align-self-md-start {\n    -ms-flex-item-align: start !important;\n    align-self: flex-start !important;\n  }\n  .align-self-md-end {\n    -ms-flex-item-align: end !important;\n    align-self: flex-end !important;\n  }\n  .align-self-md-center {\n    -ms-flex-item-align: center !important;\n    align-self: center !important;\n  }\n  .align-self-md-baseline {\n    -ms-flex-item-align: baseline !important;\n    align-self: baseline !important;\n  }\n  .align-self-md-stretch {\n    -ms-flex-item-align: stretch !important;\n    align-self: stretch !important;\n  }\n  .order-md-first {\n    -ms-flex-order: -1 !important;\n    order: -1 !important;\n  }\n  .order-md-0 {\n    -ms-flex-order: 0 !important;\n    order: 0 !important;\n  }\n  .order-md-1 {\n    -ms-flex-order: 1 !important;\n    order: 1 !important;\n  }\n  .order-md-2 {\n    -ms-flex-order: 2 !important;\n    order: 2 !important;\n  }\n  .order-md-3 {\n    -ms-flex-order: 3 !important;\n    order: 3 !important;\n  }\n  .order-md-4 {\n    -ms-flex-order: 4 !important;\n    order: 4 !important;\n  }\n  .order-md-5 {\n    -ms-flex-order: 5 !important;\n    order: 5 !important;\n  }\n  .order-md-last {\n    -ms-flex-order: 6 !important;\n    order: 6 !important;\n  }\n  .m-md-0 {\n    margin: 0 !important;\n  }\n  .m-md-1 {\n    margin: 0.25rem !important;\n  }\n  .m-md-2 {\n    margin: 0.5rem !important;\n  }\n  .m-md-3 {\n    margin: 1rem !important;\n  }\n  .m-md-4 {\n    margin: 1.5rem !important;\n  }\n  .m-md-5 {\n    margin: 3rem !important;\n  }\n  .m-md-auto {\n    margin: auto !important;\n  }\n  .mx-md-0 {\n    margin-right: 0 !important;\n    margin-left: 0 !important;\n  }\n  .mx-md-1 {\n    margin-right: 0.25rem !important;\n    margin-left: 0.25rem !important;\n  }\n  .mx-md-2 {\n    margin-right: 0.5rem !important;\n    margin-left: 0.5rem !important;\n  }\n  .mx-md-3 {\n    margin-right: 1rem !important;\n    margin-left: 1rem !important;\n  }\n  .mx-md-4 {\n    margin-right: 1.5rem !important;\n    margin-left: 1.5rem !important;\n  }\n  .mx-md-5 {\n    margin-right: 3rem !important;\n    margin-left: 3rem !important;\n  }\n  .mx-md-auto {\n    margin-right: auto !important;\n    margin-left: auto !important;\n  }\n  .my-md-0 {\n    margin-top: 0 !important;\n    margin-bottom: 0 !important;\n  }\n  .my-md-1 {\n    margin-top: 0.25rem !important;\n    margin-bottom: 0.25rem !important;\n  }\n  .my-md-2 {\n    margin-top: 0.5rem !important;\n    margin-bottom: 0.5rem !important;\n  }\n  .my-md-3 {\n    margin-top: 1rem !important;\n    margin-bottom: 1rem !important;\n  }\n  .my-md-4 {\n    margin-top: 1.5rem !important;\n    margin-bottom: 1.5rem !important;\n  }\n  .my-md-5 {\n    margin-top: 3rem !important;\n    margin-bottom: 3rem !important;\n  }\n  .my-md-auto {\n    margin-top: auto !important;\n    margin-bottom: auto !important;\n  }\n  .mt-md-0 {\n    margin-top: 0 !important;\n  }\n  .mt-md-1 {\n    margin-top: 0.25rem !important;\n  }\n  .mt-md-2 {\n    margin-top: 0.5rem !important;\n  }\n  .mt-md-3 {\n    margin-top: 1rem !important;\n  }\n  .mt-md-4 {\n    margin-top: 1.5rem !important;\n  }\n  .mt-md-5 {\n    margin-top: 3rem !important;\n  }\n  .mt-md-auto {\n    margin-top: auto !important;\n  }\n  .me-md-0 {\n    margin-right: 0 !important;\n  }\n  .me-md-1 {\n    margin-right: 0.25rem !important;\n  }\n  .me-md-2 {\n    margin-right: 0.5rem !important;\n  }\n  .me-md-3 {\n    margin-right: 1rem !important;\n  }\n  .me-md-4 {\n    margin-right: 1.5rem !important;\n  }\n  .me-md-5 {\n    margin-right: 3rem !important;\n  }\n  .me-md-auto {\n    margin-right: auto !important;\n  }\n  .mb-md-0 {\n    margin-bottom: 0 !important;\n  }\n  .mb-md-1 {\n    margin-bottom: 0.25rem !important;\n  }\n  .mb-md-2 {\n    margin-bottom: 0.5rem !important;\n  }\n  .mb-md-3 {\n    margin-bottom: 1rem !important;\n  }\n  .mb-md-4 {\n    margin-bottom: 1.5rem !important;\n  }\n  .mb-md-5 {\n    margin-bottom: 3rem !important;\n  }\n  .mb-md-auto {\n    margin-bottom: auto !important;\n  }\n  .ms-md-0 {\n    margin-left: 0 !important;\n  }\n  .ms-md-1 {\n    margin-left: 0.25rem !important;\n  }\n  .ms-md-2 {\n    margin-left: 0.5rem !important;\n  }\n  .ms-md-3 {\n    margin-left: 1rem !important;\n  }\n  .ms-md-4 {\n    margin-left: 1.5rem !important;\n  }\n  .ms-md-5 {\n    margin-left: 3rem !important;\n  }\n  .ms-md-auto {\n    margin-left: auto !important;\n  }\n  .p-md-0 {\n    padding: 0 !important;\n  }\n  .p-md-1 {\n    padding: 0.25rem !important;\n  }\n  .p-md-2 {\n    padding: 0.5rem !important;\n  }\n  .p-md-3 {\n    padding: 1rem !important;\n  }\n  .p-md-4 {\n    padding: 1.5rem !important;\n  }\n  .p-md-5 {\n    padding: 3rem !important;\n  }\n  .px-md-0 {\n    padding-right: 0 !important;\n    padding-left: 0 !important;\n  }\n  .px-md-1 {\n    padding-right: 0.25rem !important;\n    padding-left: 0.25rem !important;\n  }\n  .px-md-2 {\n    padding-right: 0.5rem !important;\n    padding-left: 0.5rem !important;\n  }\n  .px-md-3 {\n    padding-right: 1rem !important;\n    padding-left: 1rem !important;\n  }\n  .px-md-4 {\n    padding-right: 1.5rem !important;\n    padding-left: 1.5rem !important;\n  }\n  .px-md-5 {\n    padding-right: 3rem !important;\n    padding-left: 3rem !important;\n  }\n  .py-md-0 {\n    padding-top: 0 !important;\n    padding-bottom: 0 !important;\n  }\n  .py-md-1 {\n    padding-top: 0.25rem !important;\n    padding-bottom: 0.25rem !important;\n  }\n  .py-md-2 {\n    padding-top: 0.5rem !important;\n    padding-bottom: 0.5rem !important;\n  }\n  .py-md-3 {\n    padding-top: 1rem !important;\n    padding-bottom: 1rem !important;\n  }\n  .py-md-4 {\n    padding-top: 1.5rem !important;\n    padding-bottom: 1.5rem !important;\n  }\n  .py-md-5 {\n    padding-top: 3rem !important;\n    padding-bottom: 3rem !important;\n  }\n  .pt-md-0 {\n    padding-top: 0 !important;\n  }\n  .pt-md-1 {\n    padding-top: 0.25rem !important;\n  }\n  .pt-md-2 {\n    padding-top: 0.5rem !important;\n  }\n  .pt-md-3 {\n    padding-top: 1rem !important;\n  }\n  .pt-md-4 {\n    padding-top: 1.5rem !important;\n  }\n  .pt-md-5 {\n    padding-top: 3rem !important;\n  }\n  .pe-md-0 {\n    padding-right: 0 !important;\n  }\n  .pe-md-1 {\n    padding-right: 0.25rem !important;\n  }\n  .pe-md-2 {\n    padding-right: 0.5rem !important;\n  }\n  .pe-md-3 {\n    padding-right: 1rem !important;\n  }\n  .pe-md-4 {\n    padding-right: 1.5rem !important;\n  }\n  .pe-md-5 {\n    padding-right: 3rem !important;\n  }\n  .pb-md-0 {\n    padding-bottom: 0 !important;\n  }\n  .pb-md-1 {\n    padding-bottom: 0.25rem !important;\n  }\n  .pb-md-2 {\n    padding-bottom: 0.5rem !important;\n  }\n  .pb-md-3 {\n    padding-bottom: 1rem !important;\n  }\n  .pb-md-4 {\n    padding-bottom: 1.5rem !important;\n  }\n  .pb-md-5 {\n    padding-bottom: 3rem !important;\n  }\n  .ps-md-0 {\n    padding-left: 0 !important;\n  }\n  .ps-md-1 {\n    padding-left: 0.25rem !important;\n  }\n  .ps-md-2 {\n    padding-left: 0.5rem !important;\n  }\n  .ps-md-3 {\n    padding-left: 1rem !important;\n  }\n  .ps-md-4 {\n    padding-left: 1.5rem !important;\n  }\n  .ps-md-5 {\n    padding-left: 3rem !important;\n  }\n  .text-md-start {\n    text-align: left !important;\n  }\n  .text-md-end {\n    text-align: right !important;\n  }\n  .text-md-center {\n    text-align: center !important;\n  }\n}\n\n@media (min-width: 992px) {\n  .float-lg-start {\n    float: left !important;\n  }\n  .float-lg-end {\n    float: right !important;\n  }\n  .float-lg-none {\n    float: none !important;\n  }\n  .d-lg-inline {\n    display: inline !important;\n  }\n  .d-lg-inline-block {\n    display: inline-block !important;\n  }\n  .d-lg-block {\n    display: block !important;\n  }\n  .d-lg-grid {\n    display: grid !important;\n  }\n  .d-lg-table {\n    display: table !important;\n  }\n  .d-lg-table-row {\n    display: table-row !important;\n  }\n  .d-lg-table-cell {\n    display: table-cell !important;\n  }\n  .d-lg-flex {\n    display: -ms-flexbox !important;\n    display: flex !important;\n  }\n  .d-lg-inline-flex {\n    display: -ms-inline-flexbox !important;\n    display: inline-flex !important;\n  }\n  .d-lg-none {\n    display: none !important;\n  }\n  .flex-lg-fill {\n    -ms-flex: 1 1 auto !important;\n    flex: 1 1 auto !important;\n  }\n  .flex-lg-row {\n    -ms-flex-direction: row !important;\n    flex-direction: row !important;\n  }\n  .flex-lg-column {\n    -ms-flex-direction: column !important;\n    flex-direction: column !important;\n  }\n  .flex-lg-row-reverse {\n    -ms-flex-direction: row-reverse !important;\n    flex-direction: row-reverse !important;\n  }\n  .flex-lg-column-reverse {\n    -ms-flex-direction: column-reverse !important;\n    flex-direction: column-reverse !important;\n  }\n  .flex-lg-grow-0 {\n    -ms-flex-positive: 0 !important;\n    flex-grow: 0 !important;\n  }\n  .flex-lg-grow-1 {\n    -ms-flex-positive: 1 !important;\n    flex-grow: 1 !important;\n  }\n  .flex-lg-shrink-0 {\n    -ms-flex-negative: 0 !important;\n    flex-shrink: 0 !important;\n  }\n  .flex-lg-shrink-1 {\n    -ms-flex-negative: 1 !important;\n    flex-shrink: 1 !important;\n  }\n  .flex-lg-wrap {\n    -ms-flex-wrap: wrap !important;\n    flex-wrap: wrap !important;\n  }\n  .flex-lg-nowrap {\n    -ms-flex-wrap: nowrap !important;\n    flex-wrap: nowrap !important;\n  }\n  .flex-lg-wrap-reverse {\n    -ms-flex-wrap: wrap-reverse !important;\n    flex-wrap: wrap-reverse !important;\n  }\n  .gap-lg-0 {\n    gap: 0 !important;\n  }\n  .gap-lg-1 {\n    gap: 0.25rem !important;\n  }\n  .gap-lg-2 {\n    gap: 0.5rem !important;\n  }\n  .gap-lg-3 {\n    gap: 1rem !important;\n  }\n  .gap-lg-4 {\n    gap: 1.5rem !important;\n  }\n  .gap-lg-5 {\n    gap: 3rem !important;\n  }\n  .justify-content-lg-start {\n    -ms-flex-pack: start !important;\n    justify-content: flex-start !important;\n  }\n  .justify-content-lg-end {\n    -ms-flex-pack: end !important;\n    justify-content: flex-end !important;\n  }\n  .justify-content-lg-center {\n    -ms-flex-pack: center !important;\n    justify-content: center !important;\n  }\n  .justify-content-lg-between {\n    -ms-flex-pack: justify !important;\n    justify-content: space-between !important;\n  }\n  .justify-content-lg-around {\n    -ms-flex-pack: distribute !important;\n    justify-content: space-around !important;\n  }\n  .justify-content-lg-evenly {\n    -ms-flex-pack: space-evenly !important;\n    justify-content: space-evenly !important;\n  }\n  .align-items-lg-start {\n    -ms-flex-align: start !important;\n    align-items: flex-start !important;\n  }\n  .align-items-lg-end {\n    -ms-flex-align: end !important;\n    align-items: flex-end !important;\n  }\n  .align-items-lg-center {\n    -ms-flex-align: center !important;\n    align-items: center !important;\n  }\n  .align-items-lg-baseline {\n    -ms-flex-align: baseline !important;\n    align-items: baseline !important;\n  }\n  .align-items-lg-stretch {\n    -ms-flex-align: stretch !important;\n    align-items: stretch !important;\n  }\n  .align-content-lg-start {\n    -ms-flex-line-pack: start !important;\n    align-content: flex-start !important;\n  }\n  .align-content-lg-end {\n    -ms-flex-line-pack: end !important;\n    align-content: flex-end !important;\n  }\n  .align-content-lg-center {\n    -ms-flex-line-pack: center !important;\n    align-content: center !important;\n  }\n  .align-content-lg-between {\n    -ms-flex-line-pack: justify !important;\n    align-content: space-between !important;\n  }\n  .align-content-lg-around {\n    -ms-flex-line-pack: distribute !important;\n    align-content: space-around !important;\n  }\n  .align-content-lg-stretch {\n    -ms-flex-line-pack: stretch !important;\n    align-content: stretch !important;\n  }\n  .align-self-lg-auto {\n    -ms-flex-item-align: auto !important;\n    align-self: auto !important;\n  }\n  .align-self-lg-start {\n    -ms-flex-item-align: start !important;\n    align-self: flex-start !important;\n  }\n  .align-self-lg-end {\n    -ms-flex-item-align: end !important;\n    align-self: flex-end !important;\n  }\n  .align-self-lg-center {\n    -ms-flex-item-align: center !important;\n    align-self: center !important;\n  }\n  .align-self-lg-baseline {\n    -ms-flex-item-align: baseline !important;\n    align-self: baseline !important;\n  }\n  .align-self-lg-stretch {\n    -ms-flex-item-align: stretch !important;\n    align-self: stretch !important;\n  }\n  .order-lg-first {\n    -ms-flex-order: -1 !important;\n    order: -1 !important;\n  }\n  .order-lg-0 {\n    -ms-flex-order: 0 !important;\n    order: 0 !important;\n  }\n  .order-lg-1 {\n    -ms-flex-order: 1 !important;\n    order: 1 !important;\n  }\n  .order-lg-2 {\n    -ms-flex-order: 2 !important;\n    order: 2 !important;\n  }\n  .order-lg-3 {\n    -ms-flex-order: 3 !important;\n    order: 3 !important;\n  }\n  .order-lg-4 {\n    -ms-flex-order: 4 !important;\n    order: 4 !important;\n  }\n  .order-lg-5 {\n    -ms-flex-order: 5 !important;\n    order: 5 !important;\n  }\n  .order-lg-last {\n    -ms-flex-order: 6 !important;\n    order: 6 !important;\n  }\n  .m-lg-0 {\n    margin: 0 !important;\n  }\n  .m-lg-1 {\n    margin: 0.25rem !important;\n  }\n  .m-lg-2 {\n    margin: 0.5rem !important;\n  }\n  .m-lg-3 {\n    margin: 1rem !important;\n  }\n  .m-lg-4 {\n    margin: 1.5rem !important;\n  }\n  .m-lg-5 {\n    margin: 3rem !important;\n  }\n  .m-lg-auto {\n    margin: auto !important;\n  }\n  .mx-lg-0 {\n    margin-right: 0 !important;\n    margin-left: 0 !important;\n  }\n  .mx-lg-1 {\n    margin-right: 0.25rem !important;\n    margin-left: 0.25rem !important;\n  }\n  .mx-lg-2 {\n    margin-right: 0.5rem !important;\n    margin-left: 0.5rem !important;\n  }\n  .mx-lg-3 {\n    margin-right: 1rem !important;\n    margin-left: 1rem !important;\n  }\n  .mx-lg-4 {\n    margin-right: 1.5rem !important;\n    margin-left: 1.5rem !important;\n  }\n  .mx-lg-5 {\n    margin-right: 3rem !important;\n    margin-left: 3rem !important;\n  }\n  .mx-lg-auto {\n    margin-right: auto !important;\n    margin-left: auto !important;\n  }\n  .my-lg-0 {\n    margin-top: 0 !important;\n    margin-bottom: 0 !important;\n  }\n  .my-lg-1 {\n    margin-top: 0.25rem !important;\n    margin-bottom: 0.25rem !important;\n  }\n  .my-lg-2 {\n    margin-top: 0.5rem !important;\n    margin-bottom: 0.5rem !important;\n  }\n  .my-lg-3 {\n    margin-top: 1rem !important;\n    margin-bottom: 1rem !important;\n  }\n  .my-lg-4 {\n    margin-top: 1.5rem !important;\n    margin-bottom: 1.5rem !important;\n  }\n  .my-lg-5 {\n    margin-top: 3rem !important;\n    margin-bottom: 3rem !important;\n  }\n  .my-lg-auto {\n    margin-top: auto !important;\n    margin-bottom: auto !important;\n  }\n  .mt-lg-0 {\n    margin-top: 0 !important;\n  }\n  .mt-lg-1 {\n    margin-top: 0.25rem !important;\n  }\n  .mt-lg-2 {\n    margin-top: 0.5rem !important;\n  }\n  .mt-lg-3 {\n    margin-top: 1rem !important;\n  }\n  .mt-lg-4 {\n    margin-top: 1.5rem !important;\n  }\n  .mt-lg-5 {\n    margin-top: 3rem !important;\n  }\n  .mt-lg-auto {\n    margin-top: auto !important;\n  }\n  .me-lg-0 {\n    margin-right: 0 !important;\n  }\n  .me-lg-1 {\n    margin-right: 0.25rem !important;\n  }\n  .me-lg-2 {\n    margin-right: 0.5rem !important;\n  }\n  .me-lg-3 {\n    margin-right: 1rem !important;\n  }\n  .me-lg-4 {\n    margin-right: 1.5rem !important;\n  }\n  .me-lg-5 {\n    margin-right: 3rem !important;\n  }\n  .me-lg-auto {\n    margin-right: auto !important;\n  }\n  .mb-lg-0 {\n    margin-bottom: 0 !important;\n  }\n  .mb-lg-1 {\n    margin-bottom: 0.25rem !important;\n  }\n  .mb-lg-2 {\n    margin-bottom: 0.5rem !important;\n  }\n  .mb-lg-3 {\n    margin-bottom: 1rem !important;\n  }\n  .mb-lg-4 {\n    margin-bottom: 1.5rem !important;\n  }\n  .mb-lg-5 {\n    margin-bottom: 3rem !important;\n  }\n  .mb-lg-auto {\n    margin-bottom: auto !important;\n  }\n  .ms-lg-0 {\n    margin-left: 0 !important;\n  }\n  .ms-lg-1 {\n    margin-left: 0.25rem !important;\n  }\n  .ms-lg-2 {\n    margin-left: 0.5rem !important;\n  }\n  .ms-lg-3 {\n    margin-left: 1rem !important;\n  }\n  .ms-lg-4 {\n    margin-left: 1.5rem !important;\n  }\n  .ms-lg-5 {\n    margin-left: 3rem !important;\n  }\n  .ms-lg-auto {\n    margin-left: auto !important;\n  }\n  .p-lg-0 {\n    padding: 0 !important;\n  }\n  .p-lg-1 {\n    padding: 0.25rem !important;\n  }\n  .p-lg-2 {\n    padding: 0.5rem !important;\n  }\n  .p-lg-3 {\n    padding: 1rem !important;\n  }\n  .p-lg-4 {\n    padding: 1.5rem !important;\n  }\n  .p-lg-5 {\n    padding: 3rem !important;\n  }\n  .px-lg-0 {\n    padding-right: 0 !important;\n    padding-left: 0 !important;\n  }\n  .px-lg-1 {\n    padding-right: 0.25rem !important;\n    padding-left: 0.25rem !important;\n  }\n  .px-lg-2 {\n    padding-right: 0.5rem !important;\n    padding-left: 0.5rem !important;\n  }\n  .px-lg-3 {\n    padding-right: 1rem !important;\n    padding-left: 1rem !important;\n  }\n  .px-lg-4 {\n    padding-right: 1.5rem !important;\n    padding-left: 1.5rem !important;\n  }\n  .px-lg-5 {\n    padding-right: 3rem !important;\n    padding-left: 3rem !important;\n  }\n  .py-lg-0 {\n    padding-top: 0 !important;\n    padding-bottom: 0 !important;\n  }\n  .py-lg-1 {\n    padding-top: 0.25rem !important;\n    padding-bottom: 0.25rem !important;\n  }\n  .py-lg-2 {\n    padding-top: 0.5rem !important;\n    padding-bottom: 0.5rem !important;\n  }\n  .py-lg-3 {\n    padding-top: 1rem !important;\n    padding-bottom: 1rem !important;\n  }\n  .py-lg-4 {\n    padding-top: 1.5rem !important;\n    padding-bottom: 1.5rem !important;\n  }\n  .py-lg-5 {\n    padding-top: 3rem !important;\n    padding-bottom: 3rem !important;\n  }\n  .pt-lg-0 {\n    padding-top: 0 !important;\n  }\n  .pt-lg-1 {\n    padding-top: 0.25rem !important;\n  }\n  .pt-lg-2 {\n    padding-top: 0.5rem !important;\n  }\n  .pt-lg-3 {\n    padding-top: 1rem !important;\n  }\n  .pt-lg-4 {\n    padding-top: 1.5rem !important;\n  }\n  .pt-lg-5 {\n    padding-top: 3rem !important;\n  }\n  .pe-lg-0 {\n    padding-right: 0 !important;\n  }\n  .pe-lg-1 {\n    padding-right: 0.25rem !important;\n  }\n  .pe-lg-2 {\n    padding-right: 0.5rem !important;\n  }\n  .pe-lg-3 {\n    padding-right: 1rem !important;\n  }\n  .pe-lg-4 {\n    padding-right: 1.5rem !important;\n  }\n  .pe-lg-5 {\n    padding-right: 3rem !important;\n  }\n  .pb-lg-0 {\n    padding-bottom: 0 !important;\n  }\n  .pb-lg-1 {\n    padding-bottom: 0.25rem !important;\n  }\n  .pb-lg-2 {\n    padding-bottom: 0.5rem !important;\n  }\n  .pb-lg-3 {\n    padding-bottom: 1rem !important;\n  }\n  .pb-lg-4 {\n    padding-bottom: 1.5rem !important;\n  }\n  .pb-lg-5 {\n    padding-bottom: 3rem !important;\n  }\n  .ps-lg-0 {\n    padding-left: 0 !important;\n  }\n  .ps-lg-1 {\n    padding-left: 0.25rem !important;\n  }\n  .ps-lg-2 {\n    padding-left: 0.5rem !important;\n  }\n  .ps-lg-3 {\n    padding-left: 1rem !important;\n  }\n  .ps-lg-4 {\n    padding-left: 1.5rem !important;\n  }\n  .ps-lg-5 {\n    padding-left: 3rem !important;\n  }\n  .text-lg-start {\n    text-align: left !important;\n  }\n  .text-lg-end {\n    text-align: right !important;\n  }\n  .text-lg-center {\n    text-align: center !important;\n  }\n}\n\n@media (min-width: 1200px) {\n  .float-xl-start {\n    float: left !important;\n  }\n  .float-xl-end {\n    float: right !important;\n  }\n  .float-xl-none {\n    float: none !important;\n  }\n  .d-xl-inline {\n    display: inline !important;\n  }\n  .d-xl-inline-block {\n    display: inline-block !important;\n  }\n  .d-xl-block {\n    display: block !important;\n  }\n  .d-xl-grid {\n    display: grid !important;\n  }\n  .d-xl-table {\n    display: table !important;\n  }\n  .d-xl-table-row {\n    display: table-row !important;\n  }\n  .d-xl-table-cell {\n    display: table-cell !important;\n  }\n  .d-xl-flex {\n    display: -ms-flexbox !important;\n    display: flex !important;\n  }\n  .d-xl-inline-flex {\n    display: -ms-inline-flexbox !important;\n    display: inline-flex !important;\n  }\n  .d-xl-none {\n    display: none !important;\n  }\n  .flex-xl-fill {\n    -ms-flex: 1 1 auto !important;\n    flex: 1 1 auto !important;\n  }\n  .flex-xl-row {\n    -ms-flex-direction: row !important;\n    flex-direction: row !important;\n  }\n  .flex-xl-column {\n    -ms-flex-direction: column !important;\n    flex-direction: column !important;\n  }\n  .flex-xl-row-reverse {\n    -ms-flex-direction: row-reverse !important;\n    flex-direction: row-reverse !important;\n  }\n  .flex-xl-column-reverse {\n    -ms-flex-direction: column-reverse !important;\n    flex-direction: column-reverse !important;\n  }\n  .flex-xl-grow-0 {\n    -ms-flex-positive: 0 !important;\n    flex-grow: 0 !important;\n  }\n  .flex-xl-grow-1 {\n    -ms-flex-positive: 1 !important;\n    flex-grow: 1 !important;\n  }\n  .flex-xl-shrink-0 {\n    -ms-flex-negative: 0 !important;\n    flex-shrink: 0 !important;\n  }\n  .flex-xl-shrink-1 {\n    -ms-flex-negative: 1 !important;\n    flex-shrink: 1 !important;\n  }\n  .flex-xl-wrap {\n    -ms-flex-wrap: wrap !important;\n    flex-wrap: wrap !important;\n  }\n  .flex-xl-nowrap {\n    -ms-flex-wrap: nowrap !important;\n    flex-wrap: nowrap !important;\n  }\n  .flex-xl-wrap-reverse {\n    -ms-flex-wrap: wrap-reverse !important;\n    flex-wrap: wrap-reverse !important;\n  }\n  .gap-xl-0 {\n    gap: 0 !important;\n  }\n  .gap-xl-1 {\n    gap: 0.25rem !important;\n  }\n  .gap-xl-2 {\n    gap: 0.5rem !important;\n  }\n  .gap-xl-3 {\n    gap: 1rem !important;\n  }\n  .gap-xl-4 {\n    gap: 1.5rem !important;\n  }\n  .gap-xl-5 {\n    gap: 3rem !important;\n  }\n  .justify-content-xl-start {\n    -ms-flex-pack: start !important;\n    justify-content: flex-start !important;\n  }\n  .justify-content-xl-end {\n    -ms-flex-pack: end !important;\n    justify-content: flex-end !important;\n  }\n  .justify-content-xl-center {\n    -ms-flex-pack: center !important;\n    justify-content: center !important;\n  }\n  .justify-content-xl-between {\n    -ms-flex-pack: justify !important;\n    justify-content: space-between !important;\n  }\n  .justify-content-xl-around {\n    -ms-flex-pack: distribute !important;\n    justify-content: space-around !important;\n  }\n  .justify-content-xl-evenly {\n    -ms-flex-pack: space-evenly !important;\n    justify-content: space-evenly !important;\n  }\n  .align-items-xl-start {\n    -ms-flex-align: start !important;\n    align-items: flex-start !important;\n  }\n  .align-items-xl-end {\n    -ms-flex-align: end !important;\n    align-items: flex-end !important;\n  }\n  .align-items-xl-center {\n    -ms-flex-align: center !important;\n    align-items: center !important;\n  }\n  .align-items-xl-baseline {\n    -ms-flex-align: baseline !important;\n    align-items: baseline !important;\n  }\n  .align-items-xl-stretch {\n    -ms-flex-align: stretch !important;\n    align-items: stretch !important;\n  }\n  .align-content-xl-start {\n    -ms-flex-line-pack: start !important;\n    align-content: flex-start !important;\n  }\n  .align-content-xl-end {\n    -ms-flex-line-pack: end !important;\n    align-content: flex-end !important;\n  }\n  .align-content-xl-center {\n    -ms-flex-line-pack: center !important;\n    align-content: center !important;\n  }\n  .align-content-xl-between {\n    -ms-flex-line-pack: justify !important;\n    align-content: space-between !important;\n  }\n  .align-content-xl-around {\n    -ms-flex-line-pack: distribute !important;\n    align-content: space-around !important;\n  }\n  .align-content-xl-stretch {\n    -ms-flex-line-pack: stretch !important;\n    align-content: stretch !important;\n  }\n  .align-self-xl-auto {\n    -ms-flex-item-align: auto !important;\n    align-self: auto !important;\n  }\n  .align-self-xl-start {\n    -ms-flex-item-align: start !important;\n    align-self: flex-start !important;\n  }\n  .align-self-xl-end {\n    -ms-flex-item-align: end !important;\n    align-self: flex-end !important;\n  }\n  .align-self-xl-center {\n    -ms-flex-item-align: center !important;\n    align-self: center !important;\n  }\n  .align-self-xl-baseline {\n    -ms-flex-item-align: baseline !important;\n    align-self: baseline !important;\n  }\n  .align-self-xl-stretch {\n    -ms-flex-item-align: stretch !important;\n    align-self: stretch !important;\n  }\n  .order-xl-first {\n    -ms-flex-order: -1 !important;\n    order: -1 !important;\n  }\n  .order-xl-0 {\n    -ms-flex-order: 0 !important;\n    order: 0 !important;\n  }\n  .order-xl-1 {\n    -ms-flex-order: 1 !important;\n    order: 1 !important;\n  }\n  .order-xl-2 {\n    -ms-flex-order: 2 !important;\n    order: 2 !important;\n  }\n  .order-xl-3 {\n    -ms-flex-order: 3 !important;\n    order: 3 !important;\n  }\n  .order-xl-4 {\n    -ms-flex-order: 4 !important;\n    order: 4 !important;\n  }\n  .order-xl-5 {\n    -ms-flex-order: 5 !important;\n    order: 5 !important;\n  }\n  .order-xl-last {\n    -ms-flex-order: 6 !important;\n    order: 6 !important;\n  }\n  .m-xl-0 {\n    margin: 0 !important;\n  }\n  .m-xl-1 {\n    margin: 0.25rem !important;\n  }\n  .m-xl-2 {\n    margin: 0.5rem !important;\n  }\n  .m-xl-3 {\n    margin: 1rem !important;\n  }\n  .m-xl-4 {\n    margin: 1.5rem !important;\n  }\n  .m-xl-5 {\n    margin: 3rem !important;\n  }\n  .m-xl-auto {\n    margin: auto !important;\n  }\n  .mx-xl-0 {\n    margin-right: 0 !important;\n    margin-left: 0 !important;\n  }\n  .mx-xl-1 {\n    margin-right: 0.25rem !important;\n    margin-left: 0.25rem !important;\n  }\n  .mx-xl-2 {\n    margin-right: 0.5rem !important;\n    margin-left: 0.5rem !important;\n  }\n  .mx-xl-3 {\n    margin-right: 1rem !important;\n    margin-left: 1rem !important;\n  }\n  .mx-xl-4 {\n    margin-right: 1.5rem !important;\n    margin-left: 1.5rem !important;\n  }\n  .mx-xl-5 {\n    margin-right: 3rem !important;\n    margin-left: 3rem !important;\n  }\n  .mx-xl-auto {\n    margin-right: auto !important;\n    margin-left: auto !important;\n  }\n  .my-xl-0 {\n    margin-top: 0 !important;\n    margin-bottom: 0 !important;\n  }\n  .my-xl-1 {\n    margin-top: 0.25rem !important;\n    margin-bottom: 0.25rem !important;\n  }\n  .my-xl-2 {\n    margin-top: 0.5rem !important;\n    margin-bottom: 0.5rem !important;\n  }\n  .my-xl-3 {\n    margin-top: 1rem !important;\n    margin-bottom: 1rem !important;\n  }\n  .my-xl-4 {\n    margin-top: 1.5rem !important;\n    margin-bottom: 1.5rem !important;\n  }\n  .my-xl-5 {\n    margin-top: 3rem !important;\n    margin-bottom: 3rem !important;\n  }\n  .my-xl-auto {\n    margin-top: auto !important;\n    margin-bottom: auto !important;\n  }\n  .mt-xl-0 {\n    margin-top: 0 !important;\n  }\n  .mt-xl-1 {\n    margin-top: 0.25rem !important;\n  }\n  .mt-xl-2 {\n    margin-top: 0.5rem !important;\n  }\n  .mt-xl-3 {\n    margin-top: 1rem !important;\n  }\n  .mt-xl-4 {\n    margin-top: 1.5rem !important;\n  }\n  .mt-xl-5 {\n    margin-top: 3rem !important;\n  }\n  .mt-xl-auto {\n    margin-top: auto !important;\n  }\n  .me-xl-0 {\n    margin-right: 0 !important;\n  }\n  .me-xl-1 {\n    margin-right: 0.25rem !important;\n  }\n  .me-xl-2 {\n    margin-right: 0.5rem !important;\n  }\n  .me-xl-3 {\n    margin-right: 1rem !important;\n  }\n  .me-xl-4 {\n    margin-right: 1.5rem !important;\n  }\n  .me-xl-5 {\n    margin-right: 3rem !important;\n  }\n  .me-xl-auto {\n    margin-right: auto !important;\n  }\n  .mb-xl-0 {\n    margin-bottom: 0 !important;\n  }\n  .mb-xl-1 {\n    margin-bottom: 0.25rem !important;\n  }\n  .mb-xl-2 {\n    margin-bottom: 0.5rem !important;\n  }\n  .mb-xl-3 {\n    margin-bottom: 1rem !important;\n  }\n  .mb-xl-4 {\n    margin-bottom: 1.5rem !important;\n  }\n  .mb-xl-5 {\n    margin-bottom: 3rem !important;\n  }\n  .mb-xl-auto {\n    margin-bottom: auto !important;\n  }\n  .ms-xl-0 {\n    margin-left: 0 !important;\n  }\n  .ms-xl-1 {\n    margin-left: 0.25rem !important;\n  }\n  .ms-xl-2 {\n    margin-left: 0.5rem !important;\n  }\n  .ms-xl-3 {\n    margin-left: 1rem !important;\n  }\n  .ms-xl-4 {\n    margin-left: 1.5rem !important;\n  }\n  .ms-xl-5 {\n    margin-left: 3rem !important;\n  }\n  .ms-xl-auto {\n    margin-left: auto !important;\n  }\n  .p-xl-0 {\n    padding: 0 !important;\n  }\n  .p-xl-1 {\n    padding: 0.25rem !important;\n  }\n  .p-xl-2 {\n    padding: 0.5rem !important;\n  }\n  .p-xl-3 {\n    padding: 1rem !important;\n  }\n  .p-xl-4 {\n    padding: 1.5rem !important;\n  }\n  .p-xl-5 {\n    padding: 3rem !important;\n  }\n  .px-xl-0 {\n    padding-right: 0 !important;\n    padding-left: 0 !important;\n  }\n  .px-xl-1 {\n    padding-right: 0.25rem !important;\n    padding-left: 0.25rem !important;\n  }\n  .px-xl-2 {\n    padding-right: 0.5rem !important;\n    padding-left: 0.5rem !important;\n  }\n  .px-xl-3 {\n    padding-right: 1rem !important;\n    padding-left: 1rem !important;\n  }\n  .px-xl-4 {\n    padding-right: 1.5rem !important;\n    padding-left: 1.5rem !important;\n  }\n  .px-xl-5 {\n    padding-right: 3rem !important;\n    padding-left: 3rem !important;\n  }\n  .py-xl-0 {\n    padding-top: 0 !important;\n    padding-bottom: 0 !important;\n  }\n  .py-xl-1 {\n    padding-top: 0.25rem !important;\n    padding-bottom: 0.25rem !important;\n  }\n  .py-xl-2 {\n    padding-top: 0.5rem !important;\n    padding-bottom: 0.5rem !important;\n  }\n  .py-xl-3 {\n    padding-top: 1rem !important;\n    padding-bottom: 1rem !important;\n  }\n  .py-xl-4 {\n    padding-top: 1.5rem !important;\n    padding-bottom: 1.5rem !important;\n  }\n  .py-xl-5 {\n    padding-top: 3rem !important;\n    padding-bottom: 3rem !important;\n  }\n  .pt-xl-0 {\n    padding-top: 0 !important;\n  }\n  .pt-xl-1 {\n    padding-top: 0.25rem !important;\n  }\n  .pt-xl-2 {\n    padding-top: 0.5rem !important;\n  }\n  .pt-xl-3 {\n    padding-top: 1rem !important;\n  }\n  .pt-xl-4 {\n    padding-top: 1.5rem !important;\n  }\n  .pt-xl-5 {\n    padding-top: 3rem !important;\n  }\n  .pe-xl-0 {\n    padding-right: 0 !important;\n  }\n  .pe-xl-1 {\n    padding-right: 0.25rem !important;\n  }\n  .pe-xl-2 {\n    padding-right: 0.5rem !important;\n  }\n  .pe-xl-3 {\n    padding-right: 1rem !important;\n  }\n  .pe-xl-4 {\n    padding-right: 1.5rem !important;\n  }\n  .pe-xl-5 {\n    padding-right: 3rem !important;\n  }\n  .pb-xl-0 {\n    padding-bottom: 0 !important;\n  }\n  .pb-xl-1 {\n    padding-bottom: 0.25rem !important;\n  }\n  .pb-xl-2 {\n    padding-bottom: 0.5rem !important;\n  }\n  .pb-xl-3 {\n    padding-bottom: 1rem !important;\n  }\n  .pb-xl-4 {\n    padding-bottom: 1.5rem !important;\n  }\n  .pb-xl-5 {\n    padding-bottom: 3rem !important;\n  }\n  .ps-xl-0 {\n    padding-left: 0 !important;\n  }\n  .ps-xl-1 {\n    padding-left: 0.25rem !important;\n  }\n  .ps-xl-2 {\n    padding-left: 0.5rem !important;\n  }\n  .ps-xl-3 {\n    padding-left: 1rem !important;\n  }\n  .ps-xl-4 {\n    padding-left: 1.5rem !important;\n  }\n  .ps-xl-5 {\n    padding-left: 3rem !important;\n  }\n  .text-xl-start {\n    text-align: left !important;\n  }\n  .text-xl-end {\n    text-align: right !important;\n  }\n  .text-xl-center {\n    text-align: center !important;\n  }\n}\n\n@media (min-width: 1400px) {\n  .float-xxl-start {\n    float: left !important;\n  }\n  .float-xxl-end {\n    float: right !important;\n  }\n  .float-xxl-none {\n    float: none !important;\n  }\n  .d-xxl-inline {\n    display: inline !important;\n  }\n  .d-xxl-inline-block {\n    display: inline-block !important;\n  }\n  .d-xxl-block {\n    display: block !important;\n  }\n  .d-xxl-grid {\n    display: grid !important;\n  }\n  .d-xxl-table {\n    display: table !important;\n  }\n  .d-xxl-table-row {\n    display: table-row !important;\n  }\n  .d-xxl-table-cell {\n    display: table-cell !important;\n  }\n  .d-xxl-flex {\n    display: -ms-flexbox !important;\n    display: flex !important;\n  }\n  .d-xxl-inline-flex {\n    display: -ms-inline-flexbox !important;\n    display: inline-flex !important;\n  }\n  .d-xxl-none {\n    display: none !important;\n  }\n  .flex-xxl-fill {\n    -ms-flex: 1 1 auto !important;\n    flex: 1 1 auto !important;\n  }\n  .flex-xxl-row {\n    -ms-flex-direction: row !important;\n    flex-direction: row !important;\n  }\n  .flex-xxl-column {\n    -ms-flex-direction: column !important;\n    flex-direction: column !important;\n  }\n  .flex-xxl-row-reverse {\n    -ms-flex-direction: row-reverse !important;\n    flex-direction: row-reverse !important;\n  }\n  .flex-xxl-column-reverse {\n    -ms-flex-direction: column-reverse !important;\n    flex-direction: column-reverse !important;\n  }\n  .flex-xxl-grow-0 {\n    -ms-flex-positive: 0 !important;\n    flex-grow: 0 !important;\n  }\n  .flex-xxl-grow-1 {\n    -ms-flex-positive: 1 !important;\n    flex-grow: 1 !important;\n  }\n  .flex-xxl-shrink-0 {\n    -ms-flex-negative: 0 !important;\n    flex-shrink: 0 !important;\n  }\n  .flex-xxl-shrink-1 {\n    -ms-flex-negative: 1 !important;\n    flex-shrink: 1 !important;\n  }\n  .flex-xxl-wrap {\n    -ms-flex-wrap: wrap !important;\n    flex-wrap: wrap !important;\n  }\n  .flex-xxl-nowrap {\n    -ms-flex-wrap: nowrap !important;\n    flex-wrap: nowrap !important;\n  }\n  .flex-xxl-wrap-reverse {\n    -ms-flex-wrap: wrap-reverse !important;\n    flex-wrap: wrap-reverse !important;\n  }\n  .gap-xxl-0 {\n    gap: 0 !important;\n  }\n  .gap-xxl-1 {\n    gap: 0.25rem !important;\n  }\n  .gap-xxl-2 {\n    gap: 0.5rem !important;\n  }\n  .gap-xxl-3 {\n    gap: 1rem !important;\n  }\n  .gap-xxl-4 {\n    gap: 1.5rem !important;\n  }\n  .gap-xxl-5 {\n    gap: 3rem !important;\n  }\n  .justify-content-xxl-start {\n    -ms-flex-pack: start !important;\n    justify-content: flex-start !important;\n  }\n  .justify-content-xxl-end {\n    -ms-flex-pack: end !important;\n    justify-content: flex-end !important;\n  }\n  .justify-content-xxl-center {\n    -ms-flex-pack: center !important;\n    justify-content: center !important;\n  }\n  .justify-content-xxl-between {\n    -ms-flex-pack: justify !important;\n    justify-content: space-between !important;\n  }\n  .justify-content-xxl-around {\n    -ms-flex-pack: distribute !important;\n    justify-content: space-around !important;\n  }\n  .justify-content-xxl-evenly {\n    -ms-flex-pack: space-evenly !important;\n    justify-content: space-evenly !important;\n  }\n  .align-items-xxl-start {\n    -ms-flex-align: start !important;\n    align-items: flex-start !important;\n  }\n  .align-items-xxl-end {\n    -ms-flex-align: end !important;\n    align-items: flex-end !important;\n  }\n  .align-items-xxl-center {\n    -ms-flex-align: center !important;\n    align-items: center !important;\n  }\n  .align-items-xxl-baseline {\n    -ms-flex-align: baseline !important;\n    align-items: baseline !important;\n  }\n  .align-items-xxl-stretch {\n    -ms-flex-align: stretch !important;\n    align-items: stretch !important;\n  }\n  .align-content-xxl-start {\n    -ms-flex-line-pack: start !important;\n    align-content: flex-start !important;\n  }\n  .align-content-xxl-end {\n    -ms-flex-line-pack: end !important;\n    align-content: flex-end !important;\n  }\n  .align-content-xxl-center {\n    -ms-flex-line-pack: center !important;\n    align-content: center !important;\n  }\n  .align-content-xxl-between {\n    -ms-flex-line-pack: justify !important;\n    align-content: space-between !important;\n  }\n  .align-content-xxl-around {\n    -ms-flex-line-pack: distribute !important;\n    align-content: space-around !important;\n  }\n  .align-content-xxl-stretch {\n    -ms-flex-line-pack: stretch !important;\n    align-content: stretch !important;\n  }\n  .align-self-xxl-auto {\n    -ms-flex-item-align: auto !important;\n    align-self: auto !important;\n  }\n  .align-self-xxl-start {\n    -ms-flex-item-align: start !important;\n    align-self: flex-start !important;\n  }\n  .align-self-xxl-end {\n    -ms-flex-item-align: end !important;\n    align-self: flex-end !important;\n  }\n  .align-self-xxl-center {\n    -ms-flex-item-align: center !important;\n    align-self: center !important;\n  }\n  .align-self-xxl-baseline {\n    -ms-flex-item-align: baseline !important;\n    align-self: baseline !important;\n  }\n  .align-self-xxl-stretch {\n    -ms-flex-item-align: stretch !important;\n    align-self: stretch !important;\n  }\n  .order-xxl-first {\n    -ms-flex-order: -1 !important;\n    order: -1 !important;\n  }\n  .order-xxl-0 {\n    -ms-flex-order: 0 !important;\n    order: 0 !important;\n  }\n  .order-xxl-1 {\n    -ms-flex-order: 1 !important;\n    order: 1 !important;\n  }\n  .order-xxl-2 {\n    -ms-flex-order: 2 !important;\n    order: 2 !important;\n  }\n  .order-xxl-3 {\n    -ms-flex-order: 3 !important;\n    order: 3 !important;\n  }\n  .order-xxl-4 {\n    -ms-flex-order: 4 !important;\n    order: 4 !important;\n  }\n  .order-xxl-5 {\n    -ms-flex-order: 5 !important;\n    order: 5 !important;\n  }\n  .order-xxl-last {\n    -ms-flex-order: 6 !important;\n    order: 6 !important;\n  }\n  .m-xxl-0 {\n    margin: 0 !important;\n  }\n  .m-xxl-1 {\n    margin: 0.25rem !important;\n  }\n  .m-xxl-2 {\n    margin: 0.5rem !important;\n  }\n  .m-xxl-3 {\n    margin: 1rem !important;\n  }\n  .m-xxl-4 {\n    margin: 1.5rem !important;\n  }\n  .m-xxl-5 {\n    margin: 3rem !important;\n  }\n  .m-xxl-auto {\n    margin: auto !important;\n  }\n  .mx-xxl-0 {\n    margin-right: 0 !important;\n    margin-left: 0 !important;\n  }\n  .mx-xxl-1 {\n    margin-right: 0.25rem !important;\n    margin-left: 0.25rem !important;\n  }\n  .mx-xxl-2 {\n    margin-right: 0.5rem !important;\n    margin-left: 0.5rem !important;\n  }\n  .mx-xxl-3 {\n    margin-right: 1rem !important;\n    margin-left: 1rem !important;\n  }\n  .mx-xxl-4 {\n    margin-right: 1.5rem !important;\n    margin-left: 1.5rem !important;\n  }\n  .mx-xxl-5 {\n    margin-right: 3rem !important;\n    margin-left: 3rem !important;\n  }\n  .mx-xxl-auto {\n    margin-right: auto !important;\n    margin-left: auto !important;\n  }\n  .my-xxl-0 {\n    margin-top: 0 !important;\n    margin-bottom: 0 !important;\n  }\n  .my-xxl-1 {\n    margin-top: 0.25rem !important;\n    margin-bottom: 0.25rem !important;\n  }\n  .my-xxl-2 {\n    margin-top: 0.5rem !important;\n    margin-bottom: 0.5rem !important;\n  }\n  .my-xxl-3 {\n    margin-top: 1rem !important;\n    margin-bottom: 1rem !important;\n  }\n  .my-xxl-4 {\n    margin-top: 1.5rem !important;\n    margin-bottom: 1.5rem !important;\n  }\n  .my-xxl-5 {\n    margin-top: 3rem !important;\n    margin-bottom: 3rem !important;\n  }\n  .my-xxl-auto {\n    margin-top: auto !important;\n    margin-bottom: auto !important;\n  }\n  .mt-xxl-0 {\n    margin-top: 0 !important;\n  }\n  .mt-xxl-1 {\n    margin-top: 0.25rem !important;\n  }\n  .mt-xxl-2 {\n    margin-top: 0.5rem !important;\n  }\n  .mt-xxl-3 {\n    margin-top: 1rem !important;\n  }\n  .mt-xxl-4 {\n    margin-top: 1.5rem !important;\n  }\n  .mt-xxl-5 {\n    margin-top: 3rem !important;\n  }\n  .mt-xxl-auto {\n    margin-top: auto !important;\n  }\n  .me-xxl-0 {\n    margin-right: 0 !important;\n  }\n  .me-xxl-1 {\n    margin-right: 0.25rem !important;\n  }\n  .me-xxl-2 {\n    margin-right: 0.5rem !important;\n  }\n  .me-xxl-3 {\n    margin-right: 1rem !important;\n  }\n  .me-xxl-4 {\n    margin-right: 1.5rem !important;\n  }\n  .me-xxl-5 {\n    margin-right: 3rem !important;\n  }\n  .me-xxl-auto {\n    margin-right: auto !important;\n  }\n  .mb-xxl-0 {\n    margin-bottom: 0 !important;\n  }\n  .mb-xxl-1 {\n    margin-bottom: 0.25rem !important;\n  }\n  .mb-xxl-2 {\n    margin-bottom: 0.5rem !important;\n  }\n  .mb-xxl-3 {\n    margin-bottom: 1rem !important;\n  }\n  .mb-xxl-4 {\n    margin-bottom: 1.5rem !important;\n  }\n  .mb-xxl-5 {\n    margin-bottom: 3rem !important;\n  }\n  .mb-xxl-auto {\n    margin-bottom: auto !important;\n  }\n  .ms-xxl-0 {\n    margin-left: 0 !important;\n  }\n  .ms-xxl-1 {\n    margin-left: 0.25rem !important;\n  }\n  .ms-xxl-2 {\n    margin-left: 0.5rem !important;\n  }\n  .ms-xxl-3 {\n    margin-left: 1rem !important;\n  }\n  .ms-xxl-4 {\n    margin-left: 1.5rem !important;\n  }\n  .ms-xxl-5 {\n    margin-left: 3rem !important;\n  }\n  .ms-xxl-auto {\n    margin-left: auto !important;\n  }\n  .p-xxl-0 {\n    padding: 0 !important;\n  }\n  .p-xxl-1 {\n    padding: 0.25rem !important;\n  }\n  .p-xxl-2 {\n    padding: 0.5rem !important;\n  }\n  .p-xxl-3 {\n    padding: 1rem !important;\n  }\n  .p-xxl-4 {\n    padding: 1.5rem !important;\n  }\n  .p-xxl-5 {\n    padding: 3rem !important;\n  }\n  .px-xxl-0 {\n    padding-right: 0 !important;\n    padding-left: 0 !important;\n  }\n  .px-xxl-1 {\n    padding-right: 0.25rem !important;\n    padding-left: 0.25rem !important;\n  }\n  .px-xxl-2 {\n    padding-right: 0.5rem !important;\n    padding-left: 0.5rem !important;\n  }\n  .px-xxl-3 {\n    padding-right: 1rem !important;\n    padding-left: 1rem !important;\n  }\n  .px-xxl-4 {\n    padding-right: 1.5rem !important;\n    padding-left: 1.5rem !important;\n  }\n  .px-xxl-5 {\n    padding-right: 3rem !important;\n    padding-left: 3rem !important;\n  }\n  .py-xxl-0 {\n    padding-top: 0 !important;\n    padding-bottom: 0 !important;\n  }\n  .py-xxl-1 {\n    padding-top: 0.25rem !important;\n    padding-bottom: 0.25rem !important;\n  }\n  .py-xxl-2 {\n    padding-top: 0.5rem !important;\n    padding-bottom: 0.5rem !important;\n  }\n  .py-xxl-3 {\n    padding-top: 1rem !important;\n    padding-bottom: 1rem !important;\n  }\n  .py-xxl-4 {\n    padding-top: 1.5rem !important;\n    padding-bottom: 1.5rem !important;\n  }\n  .py-xxl-5 {\n    padding-top: 3rem !important;\n    padding-bottom: 3rem !important;\n  }\n  .pt-xxl-0 {\n    padding-top: 0 !important;\n  }\n  .pt-xxl-1 {\n    padding-top: 0.25rem !important;\n  }\n  .pt-xxl-2 {\n    padding-top: 0.5rem !important;\n  }\n  .pt-xxl-3 {\n    padding-top: 1rem !important;\n  }\n  .pt-xxl-4 {\n    padding-top: 1.5rem !important;\n  }\n  .pt-xxl-5 {\n    padding-top: 3rem !important;\n  }\n  .pe-xxl-0 {\n    padding-right: 0 !important;\n  }\n  .pe-xxl-1 {\n    padding-right: 0.25rem !important;\n  }\n  .pe-xxl-2 {\n    padding-right: 0.5rem !important;\n  }\n  .pe-xxl-3 {\n    padding-right: 1rem !important;\n  }\n  .pe-xxl-4 {\n    padding-right: 1.5rem !important;\n  }\n  .pe-xxl-5 {\n    padding-right: 3rem !important;\n  }\n  .pb-xxl-0 {\n    padding-bottom: 0 !important;\n  }\n  .pb-xxl-1 {\n    padding-bottom: 0.25rem !important;\n  }\n  .pb-xxl-2 {\n    padding-bottom: 0.5rem !important;\n  }\n  .pb-xxl-3 {\n    padding-bottom: 1rem !important;\n  }\n  .pb-xxl-4 {\n    padding-bottom: 1.5rem !important;\n  }\n  .pb-xxl-5 {\n    padding-bottom: 3rem !important;\n  }\n  .ps-xxl-0 {\n    padding-left: 0 !important;\n  }\n  .ps-xxl-1 {\n    padding-left: 0.25rem !important;\n  }\n  .ps-xxl-2 {\n    padding-left: 0.5rem !important;\n  }\n  .ps-xxl-3 {\n    padding-left: 1rem !important;\n  }\n  .ps-xxl-4 {\n    padding-left: 1.5rem !important;\n  }\n  .ps-xxl-5 {\n    padding-left: 3rem !important;\n  }\n  .text-xxl-start {\n    text-align: left !important;\n  }\n  .text-xxl-end {\n    text-align: right !important;\n  }\n  .text-xxl-center {\n    text-align: center !important;\n  }\n}\n\n@media (min-width: 1200px) {\n  .fs-1 {\n    font-size: 2.5rem !important;\n  }\n  .fs-2 {\n    font-size: 2rem !important;\n  }\n  .fs-3 {\n    font-size: 1.75rem !important;\n  }\n  .fs-4 {\n    font-size: 1.5rem !important;\n  }\n}\n\n@media print {\n  .d-print-inline {\n    display: inline !important;\n  }\n  .d-print-inline-block {\n    display: inline-block !important;\n  }\n  .d-print-block {\n    display: block !important;\n  }\n  .d-print-grid {\n    display: grid !important;\n  }\n  .d-print-table {\n    display: table !important;\n  }\n  .d-print-table-row {\n    display: table-row !important;\n  }\n  .d-print-table-cell {\n    display: table-cell !important;\n  }\n  .d-print-flex {\n    display: -ms-flexbox !important;\n    display: flex !important;\n  }\n  .d-print-inline-flex {\n    display: -ms-inline-flexbox !important;\n    display: inline-flex !important;\n  }\n  .d-print-none {\n    display: none !important;\n  }\n}\n\n.navbar {\n  font-weight: 300;\n}\n\n.bg-primary .dropdown-menu {\n  background-color: #008cba;\n}\n\n.bg-primary .dropdown-menu .dropdown-item,\n.bg-primary .dropdown-menu .dropdown-item:focus {\n  color: rgba(255, 255, 255, 0.7);\n}\n\n.bg-primary .dropdown-menu .dropdown-item.active,\n.bg-primary .dropdown-menu .dropdown-item:hover,\n.bg-primary .dropdown-menu .dropdown-item:focus {\n  background-color: #007ea7;\n  color: #fff;\n}\n\n.bg-dark {\n  background-color: #333 !important;\n}\n\n.bg-dark .dropdown-menu {\n  background-color: #333;\n}\n\n.bg-dark .dropdown-menu .dropdown-item,\n.bg-dark .dropdown-menu .dropdown-item:focus {\n  color: rgba(255, 255, 255, 0.7);\n}\n\n.bg-dark .dropdown-menu .dropdown-item.active,\n.bg-dark .dropdown-menu .dropdown-item:hover,\n.bg-dark .dropdown-menu .dropdown-item:focus {\n  background-color: #2e2e2e;\n  color: #fff;\n}\n\n.bg-light .dropdown-menu {\n  background-color: #eee;\n}\n\n.bg-light .dropdown-menu .dropdown-item,\n.bg-light .dropdown-menu .dropdown-item:focus {\n  color: rgba(0, 0, 0, 0.55);\n}\n\n.bg-light .dropdown-menu .dropdown-item.active,\n.bg-light .dropdown-menu .dropdown-item:hover,\n.bg-light .dropdown-menu .dropdown-item:focus {\n  background-color: #f0f0f0;\n  color: rgba(0, 0, 0, 0.7);\n}\n\n.btn-primary {\n  border-color: #007ea7;\n}\n\n.btn-secondary {\n  border-color: #d6d6d6;\n}\n\n.btn-success {\n  border-color: #3c9b5f;\n}\n\n.btn-info {\n  border-color: #52adc8;\n  color: #fff;\n}\n\n.btn-danger {\n  border-color: #d83b20;\n}\n\n.btn-warning {\n  border-color: #d28202;\n  color: #fff;\n}\n\n.btn-light {\n  border-color: #d6d6d6;\n}\n\n.btn-dark {\n  border-color: #1f1f1f;\n}\n\n.btn-group .dropdown-menu {\n  border-top-width: 0;\n}\n\n.btn-group .dropdown-toggle.btn-primary ~ .dropdown-menu {\n  background-color: #008cba;\n  border-color: #007ea7;\n}\n\n.btn-group .dropdown-toggle.btn-primary ~ .dropdown-menu .dropdown-item {\n  color: #fff;\n}\n\n.btn-group .dropdown-toggle.btn-primary ~ .dropdown-menu .dropdown-item:hover,\n.btn-group .dropdown-toggle.btn-primary ~ .dropdown-menu .dropdown-item:focus {\n  background-color: #00769c;\n}\n\n.btn-group .dropdown-toggle.btn-secondary ~ .dropdown-menu {\n  background-color: #eee;\n  border-color: #d6d6d6;\n}\n\n.btn-group .dropdown-toggle.btn-secondary ~ .dropdown-menu .dropdown-item {\n  color: #222;\n}\n\n.btn-group .dropdown-toggle.btn-secondary ~ .dropdown-menu .dropdown-item:hover,\n.btn-group .dropdown-toggle.btn-secondary ~ .dropdown-menu .dropdown-item:focus {\n  background-color: #c8c8c8;\n}\n\n.btn-group .dropdown-toggle.btn-success ~ .dropdown-menu {\n  background-color: #43ac6a;\n  border-color: #3c9b5f;\n}\n\n.btn-group .dropdown-toggle.btn-success ~ .dropdown-menu .dropdown-item {\n  color: #fff;\n}\n\n.btn-group .dropdown-toggle.btn-success ~ .dropdown-menu .dropdown-item:hover,\n.btn-group .dropdown-toggle.btn-success ~ .dropdown-menu .dropdown-item:focus {\n  background-color: #389059;\n}\n\n.btn-group .dropdown-toggle.btn-info ~ .dropdown-menu {\n  background-color: #5bc0de;\n  border-color: #52adc8;\n}\n\n.btn-group .dropdown-toggle.btn-info ~ .dropdown-menu .dropdown-item {\n  color: #fff;\n}\n\n.btn-group .dropdown-toggle.btn-info ~ .dropdown-menu .dropdown-item:hover,\n.btn-group .dropdown-toggle.btn-info ~ .dropdown-menu .dropdown-item:focus {\n  background-color: #4ca1ba;\n}\n\n.btn-group .dropdown-toggle.btn-warning ~ .dropdown-menu {\n  background-color: #e99002;\n  border-color: #d28202;\n}\n\n.btn-group .dropdown-toggle.btn-warning ~ .dropdown-menu .dropdown-item {\n  color: #fff;\n}\n\n.btn-group .dropdown-toggle.btn-warning ~ .dropdown-menu .dropdown-item:hover,\n.btn-group .dropdown-toggle.btn-warning ~ .dropdown-menu .dropdown-item:focus {\n  background-color: #c47902;\n}\n\n.btn-group .dropdown-toggle.btn-danger ~ .dropdown-menu {\n  background-color: #f04124;\n  border-color: #d83b20;\n}\n\n.btn-group .dropdown-toggle.btn-danger ~ .dropdown-menu .dropdown-item {\n  color: #fff;\n}\n\n.btn-group .dropdown-toggle.btn-danger ~ .dropdown-menu .dropdown-item:hover,\n.btn-group .dropdown-toggle.btn-danger ~ .dropdown-menu .dropdown-item:focus {\n  background-color: #ca371e;\n}\n\n.text-secondary {\n  color: #495057 !important;\n}\n\n.blockquote-footer {\n  color: #888;\n}\n\ntable {\n  font-size: 0.875rem;\n}\n\nlabel,\n.control-label,\n.help-block,\n.checkbox,\n.radio,\n.form-control-feedback {\n  font-size: 0.875rem;\n}\n\n.dropdown-item {\n  padding-top: .75rem;\n  padding-bottom: .75rem;\n  font-size: 0.875rem;\n  font-weight: 300;\n}\n\n.nav-tabs .nav-link,\n.nav-tabs .nav-link.disabled,\n.nav-tabs .nav-link.disabled:hover,\n.nav-tabs .nav-link.disabled:focus {\n  border-color: rgba(0, 0, 0, 0.1);\n  background-color: #eee;\n}\n\n.nav-tabs .nav-link:hover, .nav-tabs .nav-link:focus {\n  background-color: #f0f0f0;\n}\n\n.nav-pills .active {\n  border: 1px solid #007ea7;\n}\n\n.breadcrumb {\n  border: 1px solid rgba(0, 0, 0, 0.1);\n  font-size: 0.875rem;\n  font-weight: 300;\n  text-transform: uppercase;\n}\n\n.pagination {\n  font-weight: 300;\n}\n\n.pagination .page-link {\n  border-color: transparent;\n  border-radius: 3px;\n  margin-left: .1em;\n  margin-right: .1em;\n}\n\n.pagination .page-link:hover, .pagination .page-link:focus {\n  text-decoration: none;\n}\n\n.pagination .page-item.disabled .page-link {\n  border-color: transparent;\n}\n\n.pagination .page-item:first-child .page-link,\n.pagination .page-item:last-child .page-link,\n.pagination-lg .page-item:first-child .page-link,\n.pagination-lg .page-item:last-child .page-link,\n.pagination-sm .page-item:first-child .page-link,\n.pagination-sm .page-item:last-child .page-link {\n  border-radius: 3px;\n}\n\n.list-group {\n  font-size: 0.875rem;\n  font-weight: 300;\n}\n\n.alert {\n  font-size: 0.875rem;\n  font-weight: 300;\n  color: #fff;\n}\n\n.alert .alert-link {\n  color: #fff;\n  text-decoration: underline;\n}\n\n.alert:not(.alert-secondary):not(.alert-light) .btn-close {\n  background-image: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'><path d='M.293.293a1 1 0 011.414 0L8 6.586 14.293.293a1 1 0 111.414 1.414L9.414 8l6.293 6.293a1 1 0 01-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 01-1.414-1.414L6.586 8 .293 1.707a1 1 0 010-1.414z'/></svg>\");\n}\n\n.alert-secondary,\n.alert-secondary a:not(.btn),\n.alert-secondary .alert-link, .alert-light,\n.alert-light a:not(.btn),\n.alert-light .alert-link {\n  color: #222;\n}\n\n.badge.bg-secondary, .badge.bg-light {\n  color: #222;\n}\n\n.progress[value] {\n  height: 22px;\n  padding: 2px;\n  background-color: #f6f6f6;\n  border: 1px solid #ccc;\n}\n\n.popover-header {\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n}\n"
  },
  {
    "path": "src/sourceDev.WebApp/SharedThemes/yeti/wwwroot/css/fontawesome-all.css",
    "content": "/*!\n * Font Awesome Free 5.0.8 by @fontawesome - https://fontawesome.com\n * License - https://fontawesome.com/license (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)\n */\n.fa,\n.fas,\n.far,\n.fal,\n.fab {\n  -moz-osx-font-smoothing: grayscale;\n  -webkit-font-smoothing: antialiased;\n  display: inline-block;\n  font-style: normal;\n  font-variant: normal;\n  text-rendering: auto;\n  line-height: 1; }\n\n.fa-lg {\n  font-size: 1.33333em;\n  line-height: 0.75em;\n  vertical-align: -.0667em; }\n\n.fa-xs {\n  font-size: .75em; }\n\n.fa-sm {\n  font-size: .875em; }\n\n.fa-1x {\n  font-size: 1em; }\n\n.fa-2x {\n  font-size: 2em; }\n\n.fa-3x {\n  font-size: 3em; }\n\n.fa-4x {\n  font-size: 4em; }\n\n.fa-5x {\n  font-size: 5em; }\n\n.fa-6x {\n  font-size: 6em; }\n\n.fa-7x {\n  font-size: 7em; }\n\n.fa-8x {\n  font-size: 8em; }\n\n.fa-9x {\n  font-size: 9em; }\n\n.fa-10x {\n  font-size: 10em; }\n\n.fa-fw {\n  text-align: center;\n  width: 1.25em; }\n\n.fa-ul {\n  list-style-type: none;\n  margin-left: 2.5em;\n  padding-left: 0; }\n  .fa-ul > li {\n    position: relative; }\n\n.fa-li {\n  left: -2em;\n  position: absolute;\n  text-align: center;\n  width: 2em;\n  line-height: inherit; }\n\n.fa-border {\n  border: solid 0.08em #eee;\n  border-radius: .1em;\n  padding: .2em .25em .15em; }\n\n.fa-pull-left {\n  float: left; }\n\n.fa-pull-right {\n  float: right; }\n\n.fa.fa-pull-left,\n.fas.fa-pull-left,\n.far.fa-pull-left,\n.fal.fa-pull-left,\n.fab.fa-pull-left {\n  margin-right: .3em; }\n\n.fa.fa-pull-right,\n.fas.fa-pull-right,\n.far.fa-pull-right,\n.fal.fa-pull-right,\n.fab.fa-pull-right {\n  margin-left: .3em; }\n\n.fa-spin {\n  -webkit-animation: fa-spin 2s infinite linear;\n          animation: fa-spin 2s infinite linear; }\n\n.fa-pulse {\n  -webkit-animation: fa-spin 1s infinite steps(8);\n          animation: fa-spin 1s infinite steps(8); }\n\n@-webkit-keyframes fa-spin {\n  0% {\n    -webkit-transform: rotate(0deg);\n            transform: rotate(0deg); }\n  100% {\n    -webkit-transform: rotate(360deg);\n            transform: rotate(360deg); } }\n\n@keyframes fa-spin {\n  0% {\n    -webkit-transform: rotate(0deg);\n            transform: rotate(0deg); }\n  100% {\n    -webkit-transform: rotate(360deg);\n            transform: rotate(360deg); } }\n\n.fa-rotate-90 {\n  -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)\";\n  -webkit-transform: rotate(90deg);\n          transform: rotate(90deg); }\n\n.fa-rotate-180 {\n  -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)\";\n  -webkit-transform: rotate(180deg);\n          transform: rotate(180deg); }\n\n.fa-rotate-270 {\n  -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)\";\n  -webkit-transform: rotate(270deg);\n          transform: rotate(270deg); }\n\n.fa-flip-horizontal {\n  -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)\";\n  -webkit-transform: scale(-1, 1);\n          transform: scale(-1, 1); }\n\n.fa-flip-vertical {\n  -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)\";\n  -webkit-transform: scale(1, -1);\n          transform: scale(1, -1); }\n\n.fa-flip-horizontal.fa-flip-vertical {\n  -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)\";\n  -webkit-transform: scale(-1, -1);\n          transform: scale(-1, -1); }\n\n:root .fa-rotate-90,\n:root .fa-rotate-180,\n:root .fa-rotate-270,\n:root .fa-flip-horizontal,\n:root .fa-flip-vertical {\n  -webkit-filter: none;\n          filter: none; }\n\n.fa-stack {\n  display: inline-block;\n  height: 2em;\n  line-height: 2em;\n  position: relative;\n  vertical-align: middle;\n  width: 2em; }\n\n.fa-stack-1x,\n.fa-stack-2x {\n  left: 0;\n  position: absolute;\n  text-align: center;\n  width: 100%; }\n\n.fa-stack-1x {\n  line-height: inherit; }\n\n.fa-stack-2x {\n  font-size: 2em; }\n\n.fa-inverse {\n  color: #fff; }\n\n/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen\nreaders do not read off random characters that represent icons */\n.fa-500px:before {\n  content: \"\\f26e\"; }\n\n.fa-accessible-icon:before {\n  content: \"\\f368\"; }\n\n.fa-accusoft:before {\n  content: \"\\f369\"; }\n\n.fa-address-book:before {\n  content: \"\\f2b9\"; }\n\n.fa-address-card:before {\n  content: \"\\f2bb\"; }\n\n.fa-adjust:before {\n  content: \"\\f042\"; }\n\n.fa-adn:before {\n  content: \"\\f170\"; }\n\n.fa-adversal:before {\n  content: \"\\f36a\"; }\n\n.fa-affiliatetheme:before {\n  content: \"\\f36b\"; }\n\n.fa-algolia:before {\n  content: \"\\f36c\"; }\n\n.fa-align-center:before {\n  content: \"\\f037\"; }\n\n.fa-align-justify:before {\n  content: \"\\f039\"; }\n\n.fa-align-left:before {\n  content: \"\\f036\"; }\n\n.fa-align-right:before {\n  content: \"\\f038\"; }\n\n.fa-amazon:before {\n  content: \"\\f270\"; }\n\n.fa-amazon-pay:before {\n  content: \"\\f42c\"; }\n\n.fa-ambulance:before {\n  content: \"\\f0f9\"; }\n\n.fa-american-sign-language-interpreting:before {\n  content: \"\\f2a3\"; }\n\n.fa-amilia:before {\n  content: \"\\f36d\"; }\n\n.fa-anchor:before {\n  content: \"\\f13d\"; }\n\n.fa-android:before {\n  content: \"\\f17b\"; }\n\n.fa-angellist:before {\n  content: \"\\f209\"; }\n\n.fa-angle-double-down:before {\n  content: \"\\f103\"; }\n\n.fa-angle-double-left:before {\n  content: \"\\f100\"; }\n\n.fa-angle-double-right:before {\n  content: \"\\f101\"; }\n\n.fa-angle-double-up:before {\n  content: \"\\f102\"; }\n\n.fa-angle-down:before {\n  content: \"\\f107\"; }\n\n.fa-angle-left:before {\n  content: \"\\f104\"; }\n\n.fa-angle-right:before {\n  content: \"\\f105\"; }\n\n.fa-angle-up:before {\n  content: \"\\f106\"; }\n\n.fa-angrycreative:before {\n  content: \"\\f36e\"; }\n\n.fa-angular:before {\n  content: \"\\f420\"; }\n\n.fa-app-store:before {\n  content: \"\\f36f\"; }\n\n.fa-app-store-ios:before {\n  content: \"\\f370\"; }\n\n.fa-apper:before {\n  content: \"\\f371\"; }\n\n.fa-apple:before {\n  content: \"\\f179\"; }\n\n.fa-apple-pay:before {\n  content: \"\\f415\"; }\n\n.fa-archive:before {\n  content: \"\\f187\"; }\n\n.fa-arrow-alt-circle-down:before {\n  content: \"\\f358\"; }\n\n.fa-arrow-alt-circle-left:before {\n  content: \"\\f359\"; }\n\n.fa-arrow-alt-circle-right:before {\n  content: \"\\f35a\"; }\n\n.fa-arrow-alt-circle-up:before {\n  content: \"\\f35b\"; }\n\n.fa-arrow-circle-down:before {\n  content: \"\\f0ab\"; }\n\n.fa-arrow-circle-left:before {\n  content: \"\\f0a8\"; }\n\n.fa-arrow-circle-right:before {\n  content: \"\\f0a9\"; }\n\n.fa-arrow-circle-up:before {\n  content: \"\\f0aa\"; }\n\n.fa-arrow-down:before {\n  content: \"\\f063\"; }\n\n.fa-arrow-left:before {\n  content: \"\\f060\"; }\n\n.fa-arrow-right:before {\n  content: \"\\f061\"; }\n\n.fa-arrow-up:before {\n  content: \"\\f062\"; }\n\n.fa-arrows-alt:before {\n  content: \"\\f0b2\"; }\n\n.fa-arrows-alt-h:before {\n  content: \"\\f337\"; }\n\n.fa-arrows-alt-v:before {\n  content: \"\\f338\"; }\n\n.fa-assistive-listening-systems:before {\n  content: \"\\f2a2\"; }\n\n.fa-asterisk:before {\n  content: \"\\f069\"; }\n\n.fa-asymmetrik:before {\n  content: \"\\f372\"; }\n\n.fa-at:before {\n  content: \"\\f1fa\"; }\n\n.fa-audible:before {\n  content: \"\\f373\"; }\n\n.fa-audio-description:before {\n  content: \"\\f29e\"; }\n\n.fa-autoprefixer:before {\n  content: \"\\f41c\"; }\n\n.fa-avianex:before {\n  content: \"\\f374\"; }\n\n.fa-aviato:before {\n  content: \"\\f421\"; }\n\n.fa-aws:before {\n  content: \"\\f375\"; }\n\n.fa-backward:before {\n  content: \"\\f04a\"; }\n\n.fa-balance-scale:before {\n  content: \"\\f24e\"; }\n\n.fa-ban:before {\n  content: \"\\f05e\"; }\n\n.fa-band-aid:before {\n  content: \"\\f462\"; }\n\n.fa-bandcamp:before {\n  content: \"\\f2d5\"; }\n\n.fa-barcode:before {\n  content: \"\\f02a\"; }\n\n.fa-bars:before {\n  content: \"\\f0c9\"; }\n\n.fa-baseball-ball:before {\n  content: \"\\f433\"; }\n\n.fa-basketball-ball:before {\n  content: \"\\f434\"; }\n\n.fa-bath:before {\n  content: \"\\f2cd\"; }\n\n.fa-battery-empty:before {\n  content: \"\\f244\"; }\n\n.fa-battery-full:before {\n  content: \"\\f240\"; }\n\n.fa-battery-half:before {\n  content: \"\\f242\"; }\n\n.fa-battery-quarter:before {\n  content: \"\\f243\"; }\n\n.fa-battery-three-quarters:before {\n  content: \"\\f241\"; }\n\n.fa-bed:before {\n  content: \"\\f236\"; }\n\n.fa-beer:before {\n  content: \"\\f0fc\"; }\n\n.fa-behance:before {\n  content: \"\\f1b4\"; }\n\n.fa-behance-square:before {\n  content: \"\\f1b5\"; }\n\n.fa-bell:before {\n  content: \"\\f0f3\"; }\n\n.fa-bell-slash:before {\n  content: \"\\f1f6\"; }\n\n.fa-bicycle:before {\n  content: \"\\f206\"; }\n\n.fa-bimobject:before {\n  content: \"\\f378\"; }\n\n.fa-binoculars:before {\n  content: \"\\f1e5\"; }\n\n.fa-birthday-cake:before {\n  content: \"\\f1fd\"; }\n\n.fa-bitbucket:before {\n  content: \"\\f171\"; }\n\n.fa-bitcoin:before {\n  content: \"\\f379\"; }\n\n.fa-bity:before {\n  content: \"\\f37a\"; }\n\n.fa-black-tie:before {\n  content: \"\\f27e\"; }\n\n.fa-blackberry:before {\n  content: \"\\f37b\"; }\n\n.fa-blind:before {\n  content: \"\\f29d\"; }\n\n.fa-blogger:before {\n  content: \"\\f37c\"; }\n\n.fa-blogger-b:before {\n  content: \"\\f37d\"; }\n\n.fa-bluetooth:before {\n  content: \"\\f293\"; }\n\n.fa-bluetooth-b:before {\n  content: \"\\f294\"; }\n\n.fa-bold:before {\n  content: \"\\f032\"; }\n\n.fa-bolt:before {\n  content: \"\\f0e7\"; }\n\n.fa-bomb:before {\n  content: \"\\f1e2\"; }\n\n.fa-book:before {\n  content: \"\\f02d\"; }\n\n.fa-bookmark:before {\n  content: \"\\f02e\"; }\n\n.fa-bowling-ball:before {\n  content: \"\\f436\"; }\n\n.fa-box:before {\n  content: \"\\f466\"; }\n\n.fa-boxes:before {\n  content: \"\\f468\"; }\n\n.fa-braille:before {\n  content: \"\\f2a1\"; }\n\n.fa-briefcase:before {\n  content: \"\\f0b1\"; }\n\n.fa-btc:before {\n  content: \"\\f15a\"; }\n\n.fa-bug:before {\n  content: \"\\f188\"; }\n\n.fa-building:before {\n  content: \"\\f1ad\"; }\n\n.fa-bullhorn:before {\n  content: \"\\f0a1\"; }\n\n.fa-bullseye:before {\n  content: \"\\f140\"; }\n\n.fa-buromobelexperte:before {\n  content: \"\\f37f\"; }\n\n.fa-bus:before {\n  content: \"\\f207\"; }\n\n.fa-buysellads:before {\n  content: \"\\f20d\"; }\n\n.fa-calculator:before {\n  content: \"\\f1ec\"; }\n\n.fa-calendar:before {\n  content: \"\\f133\"; }\n\n.fa-calendar-alt:before {\n  content: \"\\f073\"; }\n\n.fa-calendar-check:before {\n  content: \"\\f274\"; }\n\n.fa-calendar-minus:before {\n  content: \"\\f272\"; }\n\n.fa-calendar-plus:before {\n  content: \"\\f271\"; }\n\n.fa-calendar-times:before {\n  content: \"\\f273\"; }\n\n.fa-camera:before {\n  content: \"\\f030\"; }\n\n.fa-camera-retro:before {\n  content: \"\\f083\"; }\n\n.fa-car:before {\n  content: \"\\f1b9\"; }\n\n.fa-caret-down:before {\n  content: \"\\f0d7\"; }\n\n.fa-caret-left:before {\n  content: \"\\f0d9\"; }\n\n.fa-caret-right:before {\n  content: \"\\f0da\"; }\n\n.fa-caret-square-down:before {\n  content: \"\\f150\"; }\n\n.fa-caret-square-left:before {\n  content: \"\\f191\"; }\n\n.fa-caret-square-right:before {\n  content: \"\\f152\"; }\n\n.fa-caret-square-up:before {\n  content: \"\\f151\"; }\n\n.fa-caret-up:before {\n  content: \"\\f0d8\"; }\n\n.fa-cart-arrow-down:before {\n  content: \"\\f218\"; }\n\n.fa-cart-plus:before {\n  content: \"\\f217\"; }\n\n.fa-cc-amazon-pay:before {\n  content: \"\\f42d\"; }\n\n.fa-cc-amex:before {\n  content: \"\\f1f3\"; }\n\n.fa-cc-apple-pay:before {\n  content: \"\\f416\"; }\n\n.fa-cc-diners-club:before {\n  content: \"\\f24c\"; }\n\n.fa-cc-discover:before {\n  content: \"\\f1f2\"; }\n\n.fa-cc-jcb:before {\n  content: \"\\f24b\"; }\n\n.fa-cc-mastercard:before {\n  content: \"\\f1f1\"; }\n\n.fa-cc-paypal:before {\n  content: \"\\f1f4\"; }\n\n.fa-cc-stripe:before {\n  content: \"\\f1f5\"; }\n\n.fa-cc-visa:before {\n  content: \"\\f1f0\"; }\n\n.fa-centercode:before {\n  content: \"\\f380\"; }\n\n.fa-certificate:before {\n  content: \"\\f0a3\"; }\n\n.fa-chart-area:before {\n  content: \"\\f1fe\"; }\n\n.fa-chart-bar:before {\n  content: \"\\f080\"; }\n\n.fa-chart-line:before {\n  content: \"\\f201\"; }\n\n.fa-chart-pie:before {\n  content: \"\\f200\"; }\n\n.fa-check:before {\n  content: \"\\f00c\"; }\n\n.fa-check-circle:before {\n  content: \"\\f058\"; }\n\n.fa-check-square:before {\n  content: \"\\f14a\"; }\n\n.fa-chess:before {\n  content: \"\\f439\"; }\n\n.fa-chess-bishop:before {\n  content: \"\\f43a\"; }\n\n.fa-chess-board:before {\n  content: \"\\f43c\"; }\n\n.fa-chess-king:before {\n  content: \"\\f43f\"; }\n\n.fa-chess-knight:before {\n  content: \"\\f441\"; }\n\n.fa-chess-pawn:before {\n  content: \"\\f443\"; }\n\n.fa-chess-queen:before {\n  content: \"\\f445\"; }\n\n.fa-chess-rook:before {\n  content: \"\\f447\"; }\n\n.fa-chevron-circle-down:before {\n  content: \"\\f13a\"; }\n\n.fa-chevron-circle-left:before {\n  content: \"\\f137\"; }\n\n.fa-chevron-circle-right:before {\n  content: \"\\f138\"; }\n\n.fa-chevron-circle-up:before {\n  content: \"\\f139\"; }\n\n.fa-chevron-down:before {\n  content: \"\\f078\"; }\n\n.fa-chevron-left:before {\n  content: \"\\f053\"; }\n\n.fa-chevron-right:before {\n  content: \"\\f054\"; }\n\n.fa-chevron-up:before {\n  content: \"\\f077\"; }\n\n.fa-child:before {\n  content: \"\\f1ae\"; }\n\n.fa-chrome:before {\n  content: \"\\f268\"; }\n\n.fa-circle:before {\n  content: \"\\f111\"; }\n\n.fa-circle-notch:before {\n  content: \"\\f1ce\"; }\n\n.fa-clipboard:before {\n  content: \"\\f328\"; }\n\n.fa-clipboard-check:before {\n  content: \"\\f46c\"; }\n\n.fa-clipboard-list:before {\n  content: \"\\f46d\"; }\n\n.fa-clock:before {\n  content: \"\\f017\"; }\n\n.fa-clone:before {\n  content: \"\\f24d\"; }\n\n.fa-closed-captioning:before {\n  content: \"\\f20a\"; }\n\n.fa-cloud:before {\n  content: \"\\f0c2\"; }\n\n.fa-cloud-download-alt:before {\n  content: \"\\f381\"; }\n\n.fa-cloud-upload-alt:before {\n  content: \"\\f382\"; }\n\n.fa-cloudscale:before {\n  content: \"\\f383\"; }\n\n.fa-cloudsmith:before {\n  content: \"\\f384\"; }\n\n.fa-cloudversify:before {\n  content: \"\\f385\"; }\n\n.fa-code:before {\n  content: \"\\f121\"; }\n\n.fa-code-branch:before {\n  content: \"\\f126\"; }\n\n.fa-codepen:before {\n  content: \"\\f1cb\"; }\n\n.fa-codiepie:before {\n  content: \"\\f284\"; }\n\n.fa-coffee:before {\n  content: \"\\f0f4\"; }\n\n.fa-cog:before {\n  content: \"\\f013\"; }\n\n.fa-cogs:before {\n  content: \"\\f085\"; }\n\n.fa-columns:before {\n  content: \"\\f0db\"; }\n\n.fa-comment:before {\n  content: \"\\f075\"; }\n\n.fa-comment-alt:before {\n  content: \"\\f27a\"; }\n\n.fa-comments:before {\n  content: \"\\f086\"; }\n\n.fa-compass:before {\n  content: \"\\f14e\"; }\n\n.fa-compress:before {\n  content: \"\\f066\"; }\n\n.fa-connectdevelop:before {\n  content: \"\\f20e\"; }\n\n.fa-contao:before {\n  content: \"\\f26d\"; }\n\n.fa-copy:before {\n  content: \"\\f0c5\"; }\n\n.fa-copyright:before {\n  content: \"\\f1f9\"; }\n\n.fa-cpanel:before {\n  content: \"\\f388\"; }\n\n.fa-creative-commons:before {\n  content: \"\\f25e\"; }\n\n.fa-credit-card:before {\n  content: \"\\f09d\"; }\n\n.fa-crop:before {\n  content: \"\\f125\"; }\n\n.fa-crosshairs:before {\n  content: \"\\f05b\"; }\n\n.fa-css3:before {\n  content: \"\\f13c\"; }\n\n.fa-css3-alt:before {\n  content: \"\\f38b\"; }\n\n.fa-cube:before {\n  content: \"\\f1b2\"; }\n\n.fa-cubes:before {\n  content: \"\\f1b3\"; }\n\n.fa-cut:before {\n  content: \"\\f0c4\"; }\n\n.fa-cuttlefish:before {\n  content: \"\\f38c\"; }\n\n.fa-d-and-d:before {\n  content: \"\\f38d\"; }\n\n.fa-dashcube:before {\n  content: \"\\f210\"; }\n\n.fa-database:before {\n  content: \"\\f1c0\"; }\n\n.fa-deaf:before {\n  content: \"\\f2a4\"; }\n\n.fa-delicious:before {\n  content: \"\\f1a5\"; }\n\n.fa-deploydog:before {\n  content: \"\\f38e\"; }\n\n.fa-deskpro:before {\n  content: \"\\f38f\"; }\n\n.fa-desktop:before {\n  content: \"\\f108\"; }\n\n.fa-deviantart:before {\n  content: \"\\f1bd\"; }\n\n.fa-digg:before {\n  content: \"\\f1a6\"; }\n\n.fa-digital-ocean:before {\n  content: \"\\f391\"; }\n\n.fa-discord:before {\n  content: \"\\f392\"; }\n\n.fa-discourse:before {\n  content: \"\\f393\"; }\n\n.fa-dna:before {\n  content: \"\\f471\"; }\n\n.fa-dochub:before {\n  content: \"\\f394\"; }\n\n.fa-docker:before {\n  content: \"\\f395\"; }\n\n.fa-dollar-sign:before {\n  content: \"\\f155\"; }\n\n.fa-dolly:before {\n  content: \"\\f472\"; }\n\n.fa-dolly-flatbed:before {\n  content: \"\\f474\"; }\n\n.fa-dot-circle:before {\n  content: \"\\f192\"; }\n\n.fa-download:before {\n  content: \"\\f019\"; }\n\n.fa-draft2digital:before {\n  content: \"\\f396\"; }\n\n.fa-dribbble:before {\n  content: \"\\f17d\"; }\n\n.fa-dribbble-square:before {\n  content: \"\\f397\"; }\n\n.fa-dropbox:before {\n  content: \"\\f16b\"; }\n\n.fa-drupal:before {\n  content: \"\\f1a9\"; }\n\n.fa-dyalog:before {\n  content: \"\\f399\"; }\n\n.fa-earlybirds:before {\n  content: \"\\f39a\"; }\n\n.fa-edge:before {\n  content: \"\\f282\"; }\n\n.fa-edit:before {\n  content: \"\\f044\"; }\n\n.fa-eject:before {\n  content: \"\\f052\"; }\n\n.fa-elementor:before {\n  content: \"\\f430\"; }\n\n.fa-ellipsis-h:before {\n  content: \"\\f141\"; }\n\n.fa-ellipsis-v:before {\n  content: \"\\f142\"; }\n\n.fa-ember:before {\n  content: \"\\f423\"; }\n\n.fa-empire:before {\n  content: \"\\f1d1\"; }\n\n.fa-envelope:before {\n  content: \"\\f0e0\"; }\n\n.fa-envelope-open:before {\n  content: \"\\f2b6\"; }\n\n.fa-envelope-square:before {\n  content: \"\\f199\"; }\n\n.fa-envira:before {\n  content: \"\\f299\"; }\n\n.fa-eraser:before {\n  content: \"\\f12d\"; }\n\n.fa-erlang:before {\n  content: \"\\f39d\"; }\n\n.fa-ethereum:before {\n  content: \"\\f42e\"; }\n\n.fa-etsy:before {\n  content: \"\\f2d7\"; }\n\n.fa-euro-sign:before {\n  content: \"\\f153\"; }\n\n.fa-exchange-alt:before {\n  content: \"\\f362\"; }\n\n.fa-exclamation:before {\n  content: \"\\f12a\"; }\n\n.fa-exclamation-circle:before {\n  content: \"\\f06a\"; }\n\n.fa-exclamation-triangle:before {\n  content: \"\\f071\"; }\n\n.fa-expand:before {\n  content: \"\\f065\"; }\n\n.fa-expand-arrows-alt:before {\n  content: \"\\f31e\"; }\n\n.fa-expeditedssl:before {\n  content: \"\\f23e\"; }\n\n.fa-external-link-alt:before {\n  content: \"\\f35d\"; }\n\n.fa-external-link-square-alt:before {\n  content: \"\\f360\"; }\n\n.fa-eye:before {\n  content: \"\\f06e\"; }\n\n.fa-eye-dropper:before {\n  content: \"\\f1fb\"; }\n\n.fa-eye-slash:before {\n  content: \"\\f070\"; }\n\n.fa-facebook:before {\n  content: \"\\f09a\"; }\n\n.fa-facebook-f:before {\n  content: \"\\f39e\"; }\n\n.fa-facebook-messenger:before {\n  content: \"\\f39f\"; }\n\n.fa-facebook-square:before {\n  content: \"\\f082\"; }\n\n.fa-fast-backward:before {\n  content: \"\\f049\"; }\n\n.fa-fast-forward:before {\n  content: \"\\f050\"; }\n\n.fa-fax:before {\n  content: \"\\f1ac\"; }\n\n.fa-female:before {\n  content: \"\\f182\"; }\n\n.fa-fighter-jet:before {\n  content: \"\\f0fb\"; }\n\n.fa-file:before {\n  content: \"\\f15b\"; }\n\n.fa-file-alt:before {\n  content: \"\\f15c\"; }\n\n.fa-file-archive:before {\n  content: \"\\f1c6\"; }\n\n.fa-file-audio:before {\n  content: \"\\f1c7\"; }\n\n.fa-file-code:before {\n  content: \"\\f1c9\"; }\n\n.fa-file-excel:before {\n  content: \"\\f1c3\"; }\n\n.fa-file-image:before {\n  content: \"\\f1c5\"; }\n\n.fa-file-pdf:before {\n  content: \"\\f1c1\"; }\n\n.fa-file-powerpoint:before {\n  content: \"\\f1c4\"; }\n\n.fa-file-video:before {\n  content: \"\\f1c8\"; }\n\n.fa-file-word:before {\n  content: \"\\f1c2\"; }\n\n.fa-film:before {\n  content: \"\\f008\"; }\n\n.fa-filter:before {\n  content: \"\\f0b0\"; }\n\n.fa-fire:before {\n  content: \"\\f06d\"; }\n\n.fa-fire-extinguisher:before {\n  content: \"\\f134\"; }\n\n.fa-firefox:before {\n  content: \"\\f269\"; }\n\n.fa-first-aid:before {\n  content: \"\\f479\"; }\n\n.fa-first-order:before {\n  content: \"\\f2b0\"; }\n\n.fa-firstdraft:before {\n  content: \"\\f3a1\"; }\n\n.fa-flag:before {\n  content: \"\\f024\"; }\n\n.fa-flag-checkered:before {\n  content: \"\\f11e\"; }\n\n.fa-flask:before {\n  content: \"\\f0c3\"; }\n\n.fa-flickr:before {\n  content: \"\\f16e\"; }\n\n.fa-flipboard:before {\n  content: \"\\f44d\"; }\n\n.fa-fly:before {\n  content: \"\\f417\"; }\n\n.fa-folder:before {\n  content: \"\\f07b\"; }\n\n.fa-folder-open:before {\n  content: \"\\f07c\"; }\n\n.fa-font:before {\n  content: \"\\f031\"; }\n\n.fa-font-awesome:before {\n  content: \"\\f2b4\"; }\n\n.fa-font-awesome-alt:before {\n  content: \"\\f35c\"; }\n\n.fa-font-awesome-flag:before {\n  content: \"\\f425\"; }\n\n.fa-fonticons:before {\n  content: \"\\f280\"; }\n\n.fa-fonticons-fi:before {\n  content: \"\\f3a2\"; }\n\n.fa-football-ball:before {\n  content: \"\\f44e\"; }\n\n.fa-fort-awesome:before {\n  content: \"\\f286\"; }\n\n.fa-fort-awesome-alt:before {\n  content: \"\\f3a3\"; }\n\n.fa-forumbee:before {\n  content: \"\\f211\"; }\n\n.fa-forward:before {\n  content: \"\\f04e\"; }\n\n.fa-foursquare:before {\n  content: \"\\f180\"; }\n\n.fa-free-code-camp:before {\n  content: \"\\f2c5\"; }\n\n.fa-freebsd:before {\n  content: \"\\f3a4\"; }\n\n.fa-frown:before {\n  content: \"\\f119\"; }\n\n.fa-futbol:before {\n  content: \"\\f1e3\"; }\n\n.fa-gamepad:before {\n  content: \"\\f11b\"; }\n\n.fa-gavel:before {\n  content: \"\\f0e3\"; }\n\n.fa-gem:before {\n  content: \"\\f3a5\"; }\n\n.fa-genderless:before {\n  content: \"\\f22d\"; }\n\n.fa-get-pocket:before {\n  content: \"\\f265\"; }\n\n.fa-gg:before {\n  content: \"\\f260\"; }\n\n.fa-gg-circle:before {\n  content: \"\\f261\"; }\n\n.fa-gift:before {\n  content: \"\\f06b\"; }\n\n.fa-git:before {\n  content: \"\\f1d3\"; }\n\n.fa-git-square:before {\n  content: \"\\f1d2\"; }\n\n.fa-github:before {\n  content: \"\\f09b\"; }\n\n.fa-github-alt:before {\n  content: \"\\f113\"; }\n\n.fa-github-square:before {\n  content: \"\\f092\"; }\n\n.fa-gitkraken:before {\n  content: \"\\f3a6\"; }\n\n.fa-gitlab:before {\n  content: \"\\f296\"; }\n\n.fa-gitter:before {\n  content: \"\\f426\"; }\n\n.fa-glass-martini:before {\n  content: \"\\f000\"; }\n\n.fa-glide:before {\n  content: \"\\f2a5\"; }\n\n.fa-glide-g:before {\n  content: \"\\f2a6\"; }\n\n.fa-globe:before {\n  content: \"\\f0ac\"; }\n\n.fa-gofore:before {\n  content: \"\\f3a7\"; }\n\n.fa-golf-ball:before {\n  content: \"\\f450\"; }\n\n.fa-goodreads:before {\n  content: \"\\f3a8\"; }\n\n.fa-goodreads-g:before {\n  content: \"\\f3a9\"; }\n\n.fa-google:before {\n  content: \"\\f1a0\"; }\n\n.fa-google-drive:before {\n  content: \"\\f3aa\"; }\n\n.fa-google-play:before {\n  content: \"\\f3ab\"; }\n\n.fa-google-plus:before {\n  content: \"\\f2b3\"; }\n\n.fa-google-plus-g:before {\n  content: \"\\f0d5\"; }\n\n.fa-google-plus-square:before {\n  content: \"\\f0d4\"; }\n\n.fa-google-wallet:before {\n  content: \"\\f1ee\"; }\n\n.fa-graduation-cap:before {\n  content: \"\\f19d\"; }\n\n.fa-gratipay:before {\n  content: \"\\f184\"; }\n\n.fa-grav:before {\n  content: \"\\f2d6\"; }\n\n.fa-gripfire:before {\n  content: \"\\f3ac\"; }\n\n.fa-grunt:before {\n  content: \"\\f3ad\"; }\n\n.fa-gulp:before {\n  content: \"\\f3ae\"; }\n\n.fa-h-square:before {\n  content: \"\\f0fd\"; }\n\n.fa-hacker-news:before {\n  content: \"\\f1d4\"; }\n\n.fa-hacker-news-square:before {\n  content: \"\\f3af\"; }\n\n.fa-hand-lizard:before {\n  content: \"\\f258\"; }\n\n.fa-hand-paper:before {\n  content: \"\\f256\"; }\n\n.fa-hand-peace:before {\n  content: \"\\f25b\"; }\n\n.fa-hand-point-down:before {\n  content: \"\\f0a7\"; }\n\n.fa-hand-point-left:before {\n  content: \"\\f0a5\"; }\n\n.fa-hand-point-right:before {\n  content: \"\\f0a4\"; }\n\n.fa-hand-point-up:before {\n  content: \"\\f0a6\"; }\n\n.fa-hand-pointer:before {\n  content: \"\\f25a\"; }\n\n.fa-hand-rock:before {\n  content: \"\\f255\"; }\n\n.fa-hand-scissors:before {\n  content: \"\\f257\"; }\n\n.fa-hand-spock:before {\n  content: \"\\f259\"; }\n\n.fa-handshake:before {\n  content: \"\\f2b5\"; }\n\n.fa-hashtag:before {\n  content: \"\\f292\"; }\n\n.fa-hdd:before {\n  content: \"\\f0a0\"; }\n\n.fa-heading:before {\n  content: \"\\f1dc\"; }\n\n.fa-headphones:before {\n  content: \"\\f025\"; }\n\n.fa-heart:before {\n  content: \"\\f004\"; }\n\n.fa-heartbeat:before {\n  content: \"\\f21e\"; }\n\n.fa-hips:before {\n  content: \"\\f452\"; }\n\n.fa-hire-a-helper:before {\n  content: \"\\f3b0\"; }\n\n.fa-history:before {\n  content: \"\\f1da\"; }\n\n.fa-hockey-puck:before {\n  content: \"\\f453\"; }\n\n.fa-home:before {\n  content: \"\\f015\"; }\n\n.fa-hooli:before {\n  content: \"\\f427\"; }\n\n.fa-hospital:before {\n  content: \"\\f0f8\"; }\n\n.fa-hospital-symbol:before {\n  content: \"\\f47e\"; }\n\n.fa-hotjar:before {\n  content: \"\\f3b1\"; }\n\n.fa-hourglass:before {\n  content: \"\\f254\"; }\n\n.fa-hourglass-end:before {\n  content: \"\\f253\"; }\n\n.fa-hourglass-half:before {\n  content: \"\\f252\"; }\n\n.fa-hourglass-start:before {\n  content: \"\\f251\"; }\n\n.fa-houzz:before {\n  content: \"\\f27c\"; }\n\n.fa-html5:before {\n  content: \"\\f13b\"; }\n\n.fa-hubspot:before {\n  content: \"\\f3b2\"; }\n\n.fa-i-cursor:before {\n  content: \"\\f246\"; }\n\n.fa-id-badge:before {\n  content: \"\\f2c1\"; }\n\n.fa-id-card:before {\n  content: \"\\f2c2\"; }\n\n.fa-image:before {\n  content: \"\\f03e\"; }\n\n.fa-images:before {\n  content: \"\\f302\"; }\n\n.fa-imdb:before {\n  content: \"\\f2d8\"; }\n\n.fa-inbox:before {\n  content: \"\\f01c\"; }\n\n.fa-indent:before {\n  content: \"\\f03c\"; }\n\n.fa-industry:before {\n  content: \"\\f275\"; }\n\n.fa-info:before {\n  content: \"\\f129\"; }\n\n.fa-info-circle:before {\n  content: \"\\f05a\"; }\n\n.fa-instagram:before {\n  content: \"\\f16d\"; }\n\n.fa-internet-explorer:before {\n  content: \"\\f26b\"; }\n\n.fa-ioxhost:before {\n  content: \"\\f208\"; }\n\n.fa-italic:before {\n  content: \"\\f033\"; }\n\n.fa-itunes:before {\n  content: \"\\f3b4\"; }\n\n.fa-itunes-note:before {\n  content: \"\\f3b5\"; }\n\n.fa-jenkins:before {\n  content: \"\\f3b6\"; }\n\n.fa-joget:before {\n  content: \"\\f3b7\"; }\n\n.fa-joomla:before {\n  content: \"\\f1aa\"; }\n\n.fa-js:before {\n  content: \"\\f3b8\"; }\n\n.fa-js-square:before {\n  content: \"\\f3b9\"; }\n\n.fa-jsfiddle:before {\n  content: \"\\f1cc\"; }\n\n.fa-key:before {\n  content: \"\\f084\"; }\n\n.fa-keyboard:before {\n  content: \"\\f11c\"; }\n\n.fa-keycdn:before {\n  content: \"\\f3ba\"; }\n\n.fa-kickstarter:before {\n  content: \"\\f3bb\"; }\n\n.fa-kickstarter-k:before {\n  content: \"\\f3bc\"; }\n\n.fa-korvue:before {\n  content: \"\\f42f\"; }\n\n.fa-language:before {\n  content: \"\\f1ab\"; }\n\n.fa-laptop:before {\n  content: \"\\f109\"; }\n\n.fa-laravel:before {\n  content: \"\\f3bd\"; }\n\n.fa-lastfm:before {\n  content: \"\\f202\"; }\n\n.fa-lastfm-square:before {\n  content: \"\\f203\"; }\n\n.fa-leaf:before {\n  content: \"\\f06c\"; }\n\n.fa-leanpub:before {\n  content: \"\\f212\"; }\n\n.fa-lemon:before {\n  content: \"\\f094\"; }\n\n.fa-less:before {\n  content: \"\\f41d\"; }\n\n.fa-level-down-alt:before {\n  content: \"\\f3be\"; }\n\n.fa-level-up-alt:before {\n  content: \"\\f3bf\"; }\n\n.fa-life-ring:before {\n  content: \"\\f1cd\"; }\n\n.fa-lightbulb:before {\n  content: \"\\f0eb\"; }\n\n.fa-line:before {\n  content: \"\\f3c0\"; }\n\n.fa-link:before {\n  content: \"\\f0c1\"; }\n\n.fa-linkedin:before {\n  content: \"\\f08c\"; }\n\n.fa-linkedin-in:before {\n  content: \"\\f0e1\"; }\n\n.fa-linode:before {\n  content: \"\\f2b8\"; }\n\n.fa-linux:before {\n  content: \"\\f17c\"; }\n\n.fa-lira-sign:before {\n  content: \"\\f195\"; }\n\n.fa-list:before {\n  content: \"\\f03a\"; }\n\n.fa-list-alt:before {\n  content: \"\\f022\"; }\n\n.fa-list-ol:before {\n  content: \"\\f0cb\"; }\n\n.fa-list-ul:before {\n  content: \"\\f0ca\"; }\n\n.fa-location-arrow:before {\n  content: \"\\f124\"; }\n\n.fa-lock:before {\n  content: \"\\f023\"; }\n\n.fa-lock-open:before {\n  content: \"\\f3c1\"; }\n\n.fa-long-arrow-alt-down:before {\n  content: \"\\f309\"; }\n\n.fa-long-arrow-alt-left:before {\n  content: \"\\f30a\"; }\n\n.fa-long-arrow-alt-right:before {\n  content: \"\\f30b\"; }\n\n.fa-long-arrow-alt-up:before {\n  content: \"\\f30c\"; }\n\n.fa-low-vision:before {\n  content: \"\\f2a8\"; }\n\n.fa-lyft:before {\n  content: \"\\f3c3\"; }\n\n.fa-magento:before {\n  content: \"\\f3c4\"; }\n\n.fa-magic:before {\n  content: \"\\f0d0\"; }\n\n.fa-magnet:before {\n  content: \"\\f076\"; }\n\n.fa-male:before {\n  content: \"\\f183\"; }\n\n.fa-map:before {\n  content: \"\\f279\"; }\n\n.fa-map-marker:before {\n  content: \"\\f041\"; }\n\n.fa-map-marker-alt:before {\n  content: \"\\f3c5\"; }\n\n.fa-map-pin:before {\n  content: \"\\f276\"; }\n\n.fa-map-signs:before {\n  content: \"\\f277\"; }\n\n.fa-mars:before {\n  content: \"\\f222\"; }\n\n.fa-mars-double:before {\n  content: \"\\f227\"; }\n\n.fa-mars-stroke:before {\n  content: \"\\f229\"; }\n\n.fa-mars-stroke-h:before {\n  content: \"\\f22b\"; }\n\n.fa-mars-stroke-v:before {\n  content: \"\\f22a\"; }\n\n.fa-maxcdn:before {\n  content: \"\\f136\"; }\n\n.fa-medapps:before {\n  content: \"\\f3c6\"; }\n\n.fa-medium:before {\n  content: \"\\f23a\"; }\n\n.fa-medium-m:before {\n  content: \"\\f3c7\"; }\n\n.fa-medkit:before {\n  content: \"\\f0fa\"; }\n\n.fa-medrt:before {\n  content: \"\\f3c8\"; }\n\n.fa-meetup:before {\n  content: \"\\f2e0\"; }\n\n.fa-meh:before {\n  content: \"\\f11a\"; }\n\n.fa-mercury:before {\n  content: \"\\f223\"; }\n\n.fa-microchip:before {\n  content: \"\\f2db\"; }\n\n.fa-microphone:before {\n  content: \"\\f130\"; }\n\n.fa-microphone-slash:before {\n  content: \"\\f131\"; }\n\n.fa-microsoft:before {\n  content: \"\\f3ca\"; }\n\n.fa-minus:before {\n  content: \"\\f068\"; }\n\n.fa-minus-circle:before {\n  content: \"\\f056\"; }\n\n.fa-minus-square:before {\n  content: \"\\f146\"; }\n\n.fa-mix:before {\n  content: \"\\f3cb\"; }\n\n.fa-mixcloud:before {\n  content: \"\\f289\"; }\n\n.fa-mizuni:before {\n  content: \"\\f3cc\"; }\n\n.fa-mobile:before {\n  content: \"\\f10b\"; }\n\n.fa-mobile-alt:before {\n  content: \"\\f3cd\"; }\n\n.fa-modx:before {\n  content: \"\\f285\"; }\n\n.fa-monero:before {\n  content: \"\\f3d0\"; }\n\n.fa-money-bill-alt:before {\n  content: \"\\f3d1\"; }\n\n.fa-moon:before {\n  content: \"\\f186\"; }\n\n.fa-motorcycle:before {\n  content: \"\\f21c\"; }\n\n.fa-mouse-pointer:before {\n  content: \"\\f245\"; }\n\n.fa-music:before {\n  content: \"\\f001\"; }\n\n.fa-napster:before {\n  content: \"\\f3d2\"; }\n\n.fa-neuter:before {\n  content: \"\\f22c\"; }\n\n.fa-newspaper:before {\n  content: \"\\f1ea\"; }\n\n.fa-nintendo-switch:before {\n  content: \"\\f418\"; }\n\n.fa-node:before {\n  content: \"\\f419\"; }\n\n.fa-node-js:before {\n  content: \"\\f3d3\"; }\n\n.fa-npm:before {\n  content: \"\\f3d4\"; }\n\n.fa-ns8:before {\n  content: \"\\f3d5\"; }\n\n.fa-nutritionix:before {\n  content: \"\\f3d6\"; }\n\n.fa-object-group:before {\n  content: \"\\f247\"; }\n\n.fa-object-ungroup:before {\n  content: \"\\f248\"; }\n\n.fa-odnoklassniki:before {\n  content: \"\\f263\"; }\n\n.fa-odnoklassniki-square:before {\n  content: \"\\f264\"; }\n\n.fa-opencart:before {\n  content: \"\\f23d\"; }\n\n.fa-openid:before {\n  content: \"\\f19b\"; }\n\n.fa-opera:before {\n  content: \"\\f26a\"; }\n\n.fa-optin-monster:before {\n  content: \"\\f23c\"; }\n\n.fa-osi:before {\n  content: \"\\f41a\"; }\n\n.fa-outdent:before {\n  content: \"\\f03b\"; }\n\n.fa-page4:before {\n  content: \"\\f3d7\"; }\n\n.fa-pagelines:before {\n  content: \"\\f18c\"; }\n\n.fa-paint-brush:before {\n  content: \"\\f1fc\"; }\n\n.fa-palfed:before {\n  content: \"\\f3d8\"; }\n\n.fa-pallet:before {\n  content: \"\\f482\"; }\n\n.fa-paper-plane:before {\n  content: \"\\f1d8\"; }\n\n.fa-paperclip:before {\n  content: \"\\f0c6\"; }\n\n.fa-paragraph:before {\n  content: \"\\f1dd\"; }\n\n.fa-paste:before {\n  content: \"\\f0ea\"; }\n\n.fa-patreon:before {\n  content: \"\\f3d9\"; }\n\n.fa-pause:before {\n  content: \"\\f04c\"; }\n\n.fa-pause-circle:before {\n  content: \"\\f28b\"; }\n\n.fa-paw:before {\n  content: \"\\f1b0\"; }\n\n.fa-paypal:before {\n  content: \"\\f1ed\"; }\n\n.fa-pen-square:before {\n  content: \"\\f14b\"; }\n\n.fa-pencil-alt:before {\n  content: \"\\f303\"; }\n\n.fa-percent:before {\n  content: \"\\f295\"; }\n\n.fa-periscope:before {\n  content: \"\\f3da\"; }\n\n.fa-phabricator:before {\n  content: \"\\f3db\"; }\n\n.fa-phoenix-framework:before {\n  content: \"\\f3dc\"; }\n\n.fa-phone:before {\n  content: \"\\f095\"; }\n\n.fa-phone-square:before {\n  content: \"\\f098\"; }\n\n.fa-phone-volume:before {\n  content: \"\\f2a0\"; }\n\n.fa-php:before {\n  content: \"\\f457\"; }\n\n.fa-pied-piper:before {\n  content: \"\\f2ae\"; }\n\n.fa-pied-piper-alt:before {\n  content: \"\\f1a8\"; }\n\n.fa-pied-piper-pp:before {\n  content: \"\\f1a7\"; }\n\n.fa-pills:before {\n  content: \"\\f484\"; }\n\n.fa-pinterest:before {\n  content: \"\\f0d2\"; }\n\n.fa-pinterest-p:before {\n  content: \"\\f231\"; }\n\n.fa-pinterest-square:before {\n  content: \"\\f0d3\"; }\n\n.fa-plane:before {\n  content: \"\\f072\"; }\n\n.fa-play:before {\n  content: \"\\f04b\"; }\n\n.fa-play-circle:before {\n  content: \"\\f144\"; }\n\n.fa-playstation:before {\n  content: \"\\f3df\"; }\n\n.fa-plug:before {\n  content: \"\\f1e6\"; }\n\n.fa-plus:before {\n  content: \"\\f067\"; }\n\n.fa-plus-circle:before {\n  content: \"\\f055\"; }\n\n.fa-plus-square:before {\n  content: \"\\f0fe\"; }\n\n.fa-podcast:before {\n  content: \"\\f2ce\"; }\n\n.fa-pound-sign:before {\n  content: \"\\f154\"; }\n\n.fa-power-off:before {\n  content: \"\\f011\"; }\n\n.fa-print:before {\n  content: \"\\f02f\"; }\n\n.fa-product-hunt:before {\n  content: \"\\f288\"; }\n\n.fa-pushed:before {\n  content: \"\\f3e1\"; }\n\n.fa-puzzle-piece:before {\n  content: \"\\f12e\"; }\n\n.fa-python:before {\n  content: \"\\f3e2\"; }\n\n.fa-qq:before {\n  content: \"\\f1d6\"; }\n\n.fa-qrcode:before {\n  content: \"\\f029\"; }\n\n.fa-question:before {\n  content: \"\\f128\"; }\n\n.fa-question-circle:before {\n  content: \"\\f059\"; }\n\n.fa-quidditch:before {\n  content: \"\\f458\"; }\n\n.fa-quinscape:before {\n  content: \"\\f459\"; }\n\n.fa-quora:before {\n  content: \"\\f2c4\"; }\n\n.fa-quote-left:before {\n  content: \"\\f10d\"; }\n\n.fa-quote-right:before {\n  content: \"\\f10e\"; }\n\n.fa-random:before {\n  content: \"\\f074\"; }\n\n.fa-ravelry:before {\n  content: \"\\f2d9\"; }\n\n.fa-react:before {\n  content: \"\\f41b\"; }\n\n.fa-rebel:before {\n  content: \"\\f1d0\"; }\n\n.fa-recycle:before {\n  content: \"\\f1b8\"; }\n\n.fa-red-river:before {\n  content: \"\\f3e3\"; }\n\n.fa-reddit:before {\n  content: \"\\f1a1\"; }\n\n.fa-reddit-alien:before {\n  content: \"\\f281\"; }\n\n.fa-reddit-square:before {\n  content: \"\\f1a2\"; }\n\n.fa-redo:before {\n  content: \"\\f01e\"; }\n\n.fa-redo-alt:before {\n  content: \"\\f2f9\"; }\n\n.fa-registered:before {\n  content: \"\\f25d\"; }\n\n.fa-rendact:before {\n  content: \"\\f3e4\"; }\n\n.fa-renren:before {\n  content: \"\\f18b\"; }\n\n.fa-reply:before {\n  content: \"\\f3e5\"; }\n\n.fa-reply-all:before {\n  content: \"\\f122\"; }\n\n.fa-replyd:before {\n  content: \"\\f3e6\"; }\n\n.fa-resolving:before {\n  content: \"\\f3e7\"; }\n\n.fa-retweet:before {\n  content: \"\\f079\"; }\n\n.fa-road:before {\n  content: \"\\f018\"; }\n\n.fa-rocket:before {\n  content: \"\\f135\"; }\n\n.fa-rocketchat:before {\n  content: \"\\f3e8\"; }\n\n.fa-rockrms:before {\n  content: \"\\f3e9\"; }\n\n.fa-rss:before {\n  content: \"\\f09e\"; }\n\n.fa-rss-square:before {\n  content: \"\\f143\"; }\n\n.fa-ruble-sign:before {\n  content: \"\\f158\"; }\n\n.fa-rupee-sign:before {\n  content: \"\\f156\"; }\n\n.fa-safari:before {\n  content: \"\\f267\"; }\n\n.fa-sass:before {\n  content: \"\\f41e\"; }\n\n.fa-save:before {\n  content: \"\\f0c7\"; }\n\n.fa-schlix:before {\n  content: \"\\f3ea\"; }\n\n.fa-scribd:before {\n  content: \"\\f28a\"; }\n\n.fa-search:before {\n  content: \"\\f002\"; }\n\n.fa-search-minus:before {\n  content: \"\\f010\"; }\n\n.fa-search-plus:before {\n  content: \"\\f00e\"; }\n\n.fa-searchengin:before {\n  content: \"\\f3eb\"; }\n\n.fa-sellcast:before {\n  content: \"\\f2da\"; }\n\n.fa-sellsy:before {\n  content: \"\\f213\"; }\n\n.fa-server:before {\n  content: \"\\f233\"; }\n\n.fa-servicestack:before {\n  content: \"\\f3ec\"; }\n\n.fa-share:before {\n  content: \"\\f064\"; }\n\n.fa-share-alt:before {\n  content: \"\\f1e0\"; }\n\n.fa-share-alt-square:before {\n  content: \"\\f1e1\"; }\n\n.fa-share-square:before {\n  content: \"\\f14d\"; }\n\n.fa-shekel-sign:before {\n  content: \"\\f20b\"; }\n\n.fa-shield-alt:before {\n  content: \"\\f3ed\"; }\n\n.fa-ship:before {\n  content: \"\\f21a\"; }\n\n.fa-shipping-fast:before {\n  content: \"\\f48b\"; }\n\n.fa-shirtsinbulk:before {\n  content: \"\\f214\"; }\n\n.fa-shopping-bag:before {\n  content: \"\\f290\"; }\n\n.fa-shopping-basket:before {\n  content: \"\\f291\"; }\n\n.fa-shopping-cart:before {\n  content: \"\\f07a\"; }\n\n.fa-shower:before {\n  content: \"\\f2cc\"; }\n\n.fa-sign-in-alt:before {\n  content: \"\\f2f6\"; }\n\n.fa-sign-language:before {\n  content: \"\\f2a7\"; }\n\n.fa-sign-out-alt:before {\n  content: \"\\f2f5\"; }\n\n.fa-signal:before {\n  content: \"\\f012\"; }\n\n.fa-simplybuilt:before {\n  content: \"\\f215\"; }\n\n.fa-sistrix:before {\n  content: \"\\f3ee\"; }\n\n.fa-sitemap:before {\n  content: \"\\f0e8\"; }\n\n.fa-skyatlas:before {\n  content: \"\\f216\"; }\n\n.fa-skype:before {\n  content: \"\\f17e\"; }\n\n.fa-slack:before {\n  content: \"\\f198\"; }\n\n.fa-slack-hash:before {\n  content: \"\\f3ef\"; }\n\n.fa-sliders-h:before {\n  content: \"\\f1de\"; }\n\n.fa-slideshare:before {\n  content: \"\\f1e7\"; }\n\n.fa-smile:before {\n  content: \"\\f118\"; }\n\n.fa-snapchat:before {\n  content: \"\\f2ab\"; }\n\n.fa-snapchat-ghost:before {\n  content: \"\\f2ac\"; }\n\n.fa-snapchat-square:before {\n  content: \"\\f2ad\"; }\n\n.fa-snowflake:before {\n  content: \"\\f2dc\"; }\n\n.fa-sort:before {\n  content: \"\\f0dc\"; }\n\n.fa-sort-alpha-down:before {\n  content: \"\\f15d\"; }\n\n.fa-sort-alpha-up:before {\n  content: \"\\f15e\"; }\n\n.fa-sort-amount-down:before {\n  content: \"\\f160\"; }\n\n.fa-sort-amount-up:before {\n  content: \"\\f161\"; }\n\n.fa-sort-down:before {\n  content: \"\\f0dd\"; }\n\n.fa-sort-numeric-down:before {\n  content: \"\\f162\"; }\n\n.fa-sort-numeric-up:before {\n  content: \"\\f163\"; }\n\n.fa-sort-up:before {\n  content: \"\\f0de\"; }\n\n.fa-soundcloud:before {\n  content: \"\\f1be\"; }\n\n.fa-space-shuttle:before {\n  content: \"\\f197\"; }\n\n.fa-speakap:before {\n  content: \"\\f3f3\"; }\n\n.fa-spinner:before {\n  content: \"\\f110\"; }\n\n.fa-spotify:before {\n  content: \"\\f1bc\"; }\n\n.fa-square:before {\n  content: \"\\f0c8\"; }\n\n.fa-square-full:before {\n  content: \"\\f45c\"; }\n\n.fa-stack-exchange:before {\n  content: \"\\f18d\"; }\n\n.fa-stack-overflow:before {\n  content: \"\\f16c\"; }\n\n.fa-star:before {\n  content: \"\\f005\"; }\n\n.fa-star-half:before {\n  content: \"\\f089\"; }\n\n.fa-staylinked:before {\n  content: \"\\f3f5\"; }\n\n.fa-steam:before {\n  content: \"\\f1b6\"; }\n\n.fa-steam-square:before {\n  content: \"\\f1b7\"; }\n\n.fa-steam-symbol:before {\n  content: \"\\f3f6\"; }\n\n.fa-step-backward:before {\n  content: \"\\f048\"; }\n\n.fa-step-forward:before {\n  content: \"\\f051\"; }\n\n.fa-stethoscope:before {\n  content: \"\\f0f1\"; }\n\n.fa-sticker-mule:before {\n  content: \"\\f3f7\"; }\n\n.fa-sticky-note:before {\n  content: \"\\f249\"; }\n\n.fa-stop:before {\n  content: \"\\f04d\"; }\n\n.fa-stop-circle:before {\n  content: \"\\f28d\"; }\n\n.fa-stopwatch:before {\n  content: \"\\f2f2\"; }\n\n.fa-strava:before {\n  content: \"\\f428\"; }\n\n.fa-street-view:before {\n  content: \"\\f21d\"; }\n\n.fa-strikethrough:before {\n  content: \"\\f0cc\"; }\n\n.fa-stripe:before {\n  content: \"\\f429\"; }\n\n.fa-stripe-s:before {\n  content: \"\\f42a\"; }\n\n.fa-studiovinari:before {\n  content: \"\\f3f8\"; }\n\n.fa-stumbleupon:before {\n  content: \"\\f1a4\"; }\n\n.fa-stumbleupon-circle:before {\n  content: \"\\f1a3\"; }\n\n.fa-subscript:before {\n  content: \"\\f12c\"; }\n\n.fa-subway:before {\n  content: \"\\f239\"; }\n\n.fa-suitcase:before {\n  content: \"\\f0f2\"; }\n\n.fa-sun:before {\n  content: \"\\f185\"; }\n\n.fa-superpowers:before {\n  content: \"\\f2dd\"; }\n\n.fa-superscript:before {\n  content: \"\\f12b\"; }\n\n.fa-supple:before {\n  content: \"\\f3f9\"; }\n\n.fa-sync:before {\n  content: \"\\f021\"; }\n\n.fa-sync-alt:before {\n  content: \"\\f2f1\"; }\n\n.fa-syringe:before {\n  content: \"\\f48e\"; }\n\n.fa-table:before {\n  content: \"\\f0ce\"; }\n\n.fa-table-tennis:before {\n  content: \"\\f45d\"; }\n\n.fa-tablet:before {\n  content: \"\\f10a\"; }\n\n.fa-tablet-alt:before {\n  content: \"\\f3fa\"; }\n\n.fa-tachometer-alt:before {\n  content: \"\\f3fd\"; }\n\n.fa-tag:before {\n  content: \"\\f02b\"; }\n\n.fa-tags:before {\n  content: \"\\f02c\"; }\n\n.fa-tasks:before {\n  content: \"\\f0ae\"; }\n\n.fa-taxi:before {\n  content: \"\\f1ba\"; }\n\n.fa-telegram:before {\n  content: \"\\f2c6\"; }\n\n.fa-telegram-plane:before {\n  content: \"\\f3fe\"; }\n\n.fa-tencent-weibo:before {\n  content: \"\\f1d5\"; }\n\n.fa-terminal:before {\n  content: \"\\f120\"; }\n\n.fa-text-height:before {\n  content: \"\\f034\"; }\n\n.fa-text-width:before {\n  content: \"\\f035\"; }\n\n.fa-th:before {\n  content: \"\\f00a\"; }\n\n.fa-th-large:before {\n  content: \"\\f009\"; }\n\n.fa-th-list:before {\n  content: \"\\f00b\"; }\n\n.fa-themeisle:before {\n  content: \"\\f2b2\"; }\n\n.fa-thermometer:before {\n  content: \"\\f491\"; }\n\n.fa-thermometer-empty:before {\n  content: \"\\f2cb\"; }\n\n.fa-thermometer-full:before {\n  content: \"\\f2c7\"; }\n\n.fa-thermometer-half:before {\n  content: \"\\f2c9\"; }\n\n.fa-thermometer-quarter:before {\n  content: \"\\f2ca\"; }\n\n.fa-thermometer-three-quarters:before {\n  content: \"\\f2c8\"; }\n\n.fa-thumbs-down:before {\n  content: \"\\f165\"; }\n\n.fa-thumbs-up:before {\n  content: \"\\f164\"; }\n\n.fa-thumbtack:before {\n  content: \"\\f08d\"; }\n\n.fa-ticket-alt:before {\n  content: \"\\f3ff\"; }\n\n.fa-times:before {\n  content: \"\\f00d\"; }\n\n.fa-times-circle:before {\n  content: \"\\f057\"; }\n\n.fa-tint:before {\n  content: \"\\f043\"; }\n\n.fa-toggle-off:before {\n  content: \"\\f204\"; }\n\n.fa-toggle-on:before {\n  content: \"\\f205\"; }\n\n.fa-trademark:before {\n  content: \"\\f25c\"; }\n\n.fa-train:before {\n  content: \"\\f238\"; }\n\n.fa-transgender:before {\n  content: \"\\f224\"; }\n\n.fa-transgender-alt:before {\n  content: \"\\f225\"; }\n\n.fa-trash:before {\n  content: \"\\f1f8\"; }\n\n.fa-trash-alt:before {\n  content: \"\\f2ed\"; }\n\n.fa-tree:before {\n  content: \"\\f1bb\"; }\n\n.fa-trello:before {\n  content: \"\\f181\"; }\n\n.fa-tripadvisor:before {\n  content: \"\\f262\"; }\n\n.fa-trophy:before {\n  content: \"\\f091\"; }\n\n.fa-truck:before {\n  content: \"\\f0d1\"; }\n\n.fa-tty:before {\n  content: \"\\f1e4\"; }\n\n.fa-tumblr:before {\n  content: \"\\f173\"; }\n\n.fa-tumblr-square:before {\n  content: \"\\f174\"; }\n\n.fa-tv:before {\n  content: \"\\f26c\"; }\n\n.fa-twitch:before {\n  content: \"\\f1e8\"; }\n\n.fa-twitter:before {\n  content: \"\\f099\"; }\n\n.fa-twitter-square:before {\n  content: \"\\f081\"; }\n\n.fa-typo3:before {\n  content: \"\\f42b\"; }\n\n.fa-uber:before {\n  content: \"\\f402\"; }\n\n.fa-uikit:before {\n  content: \"\\f403\"; }\n\n.fa-umbrella:before {\n  content: \"\\f0e9\"; }\n\n.fa-underline:before {\n  content: \"\\f0cd\"; }\n\n.fa-undo:before {\n  content: \"\\f0e2\"; }\n\n.fa-undo-alt:before {\n  content: \"\\f2ea\"; }\n\n.fa-uniregistry:before {\n  content: \"\\f404\"; }\n\n.fa-universal-access:before {\n  content: \"\\f29a\"; }\n\n.fa-university:before {\n  content: \"\\f19c\"; }\n\n.fa-unlink:before {\n  content: \"\\f127\"; }\n\n.fa-unlock:before {\n  content: \"\\f09c\"; }\n\n.fa-unlock-alt:before {\n  content: \"\\f13e\"; }\n\n.fa-untappd:before {\n  content: \"\\f405\"; }\n\n.fa-upload:before {\n  content: \"\\f093\"; }\n\n.fa-usb:before {\n  content: \"\\f287\"; }\n\n.fa-user:before {\n  content: \"\\f007\"; }\n\n.fa-user-circle:before {\n  content: \"\\f2bd\"; }\n\n.fa-user-md:before {\n  content: \"\\f0f0\"; }\n\n.fa-user-plus:before {\n  content: \"\\f234\"; }\n\n.fa-user-secret:before {\n  content: \"\\f21b\"; }\n\n.fa-user-times:before {\n  content: \"\\f235\"; }\n\n.fa-users:before {\n  content: \"\\f0c0\"; }\n\n.fa-ussunnah:before {\n  content: \"\\f407\"; }\n\n.fa-utensil-spoon:before {\n  content: \"\\f2e5\"; }\n\n.fa-utensils:before {\n  content: \"\\f2e7\"; }\n\n.fa-vaadin:before {\n  content: \"\\f408\"; }\n\n.fa-venus:before {\n  content: \"\\f221\"; }\n\n.fa-venus-double:before {\n  content: \"\\f226\"; }\n\n.fa-venus-mars:before {\n  content: \"\\f228\"; }\n\n.fa-viacoin:before {\n  content: \"\\f237\"; }\n\n.fa-viadeo:before {\n  content: \"\\f2a9\"; }\n\n.fa-viadeo-square:before {\n  content: \"\\f2aa\"; }\n\n.fa-viber:before {\n  content: \"\\f409\"; }\n\n.fa-video:before {\n  content: \"\\f03d\"; }\n\n.fa-vimeo:before {\n  content: \"\\f40a\"; }\n\n.fa-vimeo-square:before {\n  content: \"\\f194\"; }\n\n.fa-vimeo-v:before {\n  content: \"\\f27d\"; }\n\n.fa-vine:before {\n  content: \"\\f1ca\"; }\n\n.fa-vk:before {\n  content: \"\\f189\"; }\n\n.fa-vnv:before {\n  content: \"\\f40b\"; }\n\n.fa-volleyball-ball:before {\n  content: \"\\f45f\"; }\n\n.fa-volume-down:before {\n  content: \"\\f027\"; }\n\n.fa-volume-off:before {\n  content: \"\\f026\"; }\n\n.fa-volume-up:before {\n  content: \"\\f028\"; }\n\n.fa-vuejs:before {\n  content: \"\\f41f\"; }\n\n.fa-warehouse:before {\n  content: \"\\f494\"; }\n\n.fa-weibo:before {\n  content: \"\\f18a\"; }\n\n.fa-weight:before {\n  content: \"\\f496\"; }\n\n.fa-weixin:before {\n  content: \"\\f1d7\"; }\n\n.fa-whatsapp:before {\n  content: \"\\f232\"; }\n\n.fa-whatsapp-square:before {\n  content: \"\\f40c\"; }\n\n.fa-wheelchair:before {\n  content: \"\\f193\"; }\n\n.fa-whmcs:before {\n  content: \"\\f40d\"; }\n\n.fa-wifi:before {\n  content: \"\\f1eb\"; }\n\n.fa-wikipedia-w:before {\n  content: \"\\f266\"; }\n\n.fa-window-close:before {\n  content: \"\\f410\"; }\n\n.fa-window-maximize:before {\n  content: \"\\f2d0\"; }\n\n.fa-window-minimize:before {\n  content: \"\\f2d1\"; }\n\n.fa-window-restore:before {\n  content: \"\\f2d2\"; }\n\n.fa-windows:before {\n  content: \"\\f17a\"; }\n\n.fa-won-sign:before {\n  content: \"\\f159\"; }\n\n.fa-wordpress:before {\n  content: \"\\f19a\"; }\n\n.fa-wordpress-simple:before {\n  content: \"\\f411\"; }\n\n.fa-wpbeginner:before {\n  content: \"\\f297\"; }\n\n.fa-wpexplorer:before {\n  content: \"\\f2de\"; }\n\n.fa-wpforms:before {\n  content: \"\\f298\"; }\n\n.fa-wrench:before {\n  content: \"\\f0ad\"; }\n\n.fa-xbox:before {\n  content: \"\\f412\"; }\n\n.fa-xing:before {\n  content: \"\\f168\"; }\n\n.fa-xing-square:before {\n  content: \"\\f169\"; }\n\n.fa-y-combinator:before {\n  content: \"\\f23b\"; }\n\n.fa-yahoo:before {\n  content: \"\\f19e\"; }\n\n.fa-yandex:before {\n  content: \"\\f413\"; }\n\n.fa-yandex-international:before {\n  content: \"\\f414\"; }\n\n.fa-yelp:before {\n  content: \"\\f1e9\"; }\n\n.fa-yen-sign:before {\n  content: \"\\f157\"; }\n\n.fa-yoast:before {\n  content: \"\\f2b1\"; }\n\n.fa-youtube:before {\n  content: \"\\f167\"; }\n\n.fa-youtube-square:before {\n  content: \"\\f431\"; }\n\n.sr-only {\n  border: 0;\n  clip: rect(0, 0, 0, 0);\n  height: 1px;\n  margin: -1px;\n  overflow: hidden;\n  padding: 0;\n  position: absolute;\n  width: 1px; }\n\n.sr-only-focusable:active, .sr-only-focusable:focus {\n  clip: auto;\n  height: auto;\n  margin: 0;\n  overflow: visible;\n  position: static;\n  width: auto; }\n@font-face {\n  font-family: 'Font Awesome 5 Brands';\n  font-style: normal;\n  font-weight: normal;\n  src: url(\"../webfonts/fa-brands-400.eot\");\n  src: url(\"../webfonts/fa-brands-400.eot?#iefix\") format(\"embedded-opentype\"), url(\"../webfonts/fa-brands-400.woff2\") format(\"woff2\"), url(\"../webfonts/fa-brands-400.woff\") format(\"woff\"), url(\"../webfonts/fa-brands-400.ttf\") format(\"truetype\"), url(\"../webfonts/fa-brands-400.svg#fontawesome\") format(\"svg\"); }\n\n.fab {\n  font-family: 'Font Awesome 5 Brands'; }\n@font-face {\n  font-family: 'Font Awesome 5 Free';\n  font-style: normal;\n  font-weight: 400;\n  src: url(\"../webfonts/fa-regular-400.eot\");\n  src: url(\"../webfonts/fa-regular-400.eot?#iefix\") format(\"embedded-opentype\"), url(\"../webfonts/fa-regular-400.woff2\") format(\"woff2\"), url(\"../webfonts/fa-regular-400.woff\") format(\"woff\"), url(\"../webfonts/fa-regular-400.ttf\") format(\"truetype\"), url(\"../webfonts/fa-regular-400.svg#fontawesome\") format(\"svg\"); }\n\n.far {\n  font-family: 'Font Awesome 5 Free';\n  font-weight: 400; }\n@font-face {\n  font-family: 'Font Awesome 5 Free';\n  font-style: normal;\n  font-weight: 900;\n  src: url(\"../webfonts/fa-solid-900.eot\");\n  src: url(\"../webfonts/fa-solid-900.eot?#iefix\") format(\"embedded-opentype\"), url(\"../webfonts/fa-solid-900.woff2\") format(\"woff2\"), url(\"../webfonts/fa-solid-900.woff\") format(\"woff\"), url(\"../webfonts/fa-solid-900.ttf\") format(\"truetype\"), url(\"../webfonts/fa-solid-900.svg#fontawesome\") format(\"svg\"); }\n\n.fa,\n.fas {\n  font-family: 'Font Awesome 5 Free';\n  font-weight: 900; }\n"
  },
  {
    "path": "src/sourceDev.WebApp/SharedThemes/yeti/wwwroot/css/site.css",
    "content": "﻿html {\n    position: relative;\n    min-height: 100%;\n}\n\nbody {\n    min-height: 100vh;\n    padding-top: 146px;\n}\n\n\n#newPostLink {\n    position: absolute;\n    top: 170px;\n    right: 0px;\n}\n\n#editPostLink {\n    position: absolute;\n    top: 200px;\n    right: 0px;\n}\n\n#unpublishPostLink {\n    position: absolute;\n    top: 230px !important;\n    right: 0px !important;\n}\n\n#pageManagerLink {\n    position: absolute;\n    top: 170px;\n    right: 0px;\n}\n\n#newPageLink {\n    position: absolute;\n    top: 200px;\n    right: 0px;\n}\n\n#editPageLink {\n    position: absolute;\n    top: 230px;\n    right: 0px\n}\n\n#unpublishPageLink {\n    position: absolute;\n    top: 260px !important;\n    right: 0px !important\n}\n\n#sidenavtoggle {\n    position: absolute;\n    top: 220px;\n    right: 5px;\n}\n\n\n@media screen and (max-width: 812px) {\n    #sidenavtoggle,\n    #sidenavmenu {\n        display: none;\n    }\n}\n\n.flex-fill {\n    flex: 1 1 auto !important;\n}\n\n\n.carousel-caption p {\n    font-size: 20px;\n    line-height: 1.4;\n}\n\n@media screen and (max-width: 768px) {\n    .carousel-caption {\n        display: none\n    }\n}\n\n\n\n\nimg, video, iframe {\n    max-width: 100%;\n}\n\ntd img, video, iframe {\n    max-width: none;\n}\n\n\n\n.table td, .table th {\n    vertical-align: inherit;\n}\n\n/******** jquery smartmenu bootstrap 4 ******/\n/* Carets in collapsible mode (make them look like +/- buttons) */\n.navbar-nav.sm-collapsible .sub-arrow {\n    position: absolute;\n    top: 50%;\n    right: 0;\n    margin: -0.7em 0.5em 0 0;\n    border: 1px solid rgba(0, 0, 0, .1);\n    border-radius: .25rem;\n    padding: 0;\n    width: 2em;\n    height: 1.4em;\n    font-size: 1.25rem;\n    line-height: 1.2em;\n    text-align: center;\n}\n\n    .navbar-nav.sm-collapsible .sub-arrow::before {\n        content: '+';\n    }\n\n.navbar-nav.sm-collapsible .show > a > .sub-arrow::before {\n    content: '-';\n}\n\n.navbar-dark .navbar-nav.sm-collapsible .nav-link .sub-arrow {\n    border-color: rgba(255, 255, 255, .1);\n}\n/* make sure there's room for the carets */\n.navbar-nav.sm-collapsible .has-submenu {\n    padding-right: 3em;\n}\n/* keep the carets properly positioned */\n.navbar-nav.sm-collapsible .nav-link,\n.navbar-nav.sm-collapsible .dropdown-item {\n    position: relative;\n}\n\n\n/* Nav carets in expanded mode */\n.navbar-nav:not(.sm-collapsible) .nav-link .sub-arrow {\n    display: inline-block;\n    width: 0;\n    height: 0;\n    margin-left: .255em;\n    vertical-align: .255em;\n    border-top: .3em solid;\n    border-right: .3em solid transparent;\n    border-left: .3em solid transparent;\n}\n/* point the arrows up for .fixed-bottom navbars */\n.fixed-bottom .navbar-nav:not(.sm-collapsible) .nav-link .sub-arrow,\n.fixed-bottom .navbar-nav:not(.sm-collapsible):not([data-sm-skip]) .dropdown-toggle::after {\n    border-top: 0;\n    border-bottom: .3em solid;\n}\n\n\n/* Dropdown carets in expanded mode */\n.navbar-nav:not(.sm-collapsible) .dropdown-item .sub-arrow,\n.navbar-nav:not(.sm-collapsible):not([data-sm-skip]) .dropdown-menu .dropdown-toggle::after {\n    position: absolute;\n    top: 50%;\n    right: 0;\n    width: 0;\n    height: 0;\n    margin-top: -.3em;\n    margin-right: 1em;\n    border-top: .3em solid transparent;\n    border-bottom: .3em solid transparent;\n    border-left: .3em solid;\n}\n/* make sure there's room for the carets */\n.navbar-nav:not(.sm-collapsible) .dropdown-item.has-submenu {\n    padding-right: 2em;\n}\n\n\n/* Scrolling arrows for tall menus */\n.navbar-nav .scroll-up,\n.navbar-nav .scroll-down {\n    position: absolute;\n    display: none;\n    visibility: hidden;\n    height: 20px;\n    overflow: hidden;\n    text-align: center;\n}\n\n.navbar-nav .scroll-up-arrow,\n.navbar-nav .scroll-down-arrow {\n    position: absolute;\n    top: -2px;\n    left: 50%;\n    margin-left: -8px;\n    width: 0;\n    height: 0;\n    overflow: hidden;\n    border-top: 7px solid transparent;\n    border-right: 7px solid transparent;\n    border-bottom: 7px solid;\n    border-left: 7px solid transparent;\n}\n\n.navbar-nav .scroll-down-arrow {\n    top: 6px;\n    border-top: 7px solid;\n    border-right: 7px solid transparent;\n    border-bottom: 7px solid transparent;\n    border-left: 7px solid transparent;\n}\n\n\n/* Add some spacing for 2+ level sub menus in collapsible mode */\n.navbar-nav.sm-collapsible .dropdown-menu .dropdown-menu {\n    margin: .5em;\n}\n\n\n/* Fix SmartMenus sub menus auto width (subMenusMinWidth/subMenusMaxWidth options) */\n.navbar-nav:not([data-sm-skip]) .dropdown-item {\n    white-space: normal;\n}\n\n.navbar-nav:not(.sm-collapsible) .sm-nowrap > li > .dropdown-item {\n    white-space: nowrap;\n}\n/******** end jquery smart menu bootstrap-4 *****************/\n\n.brand-header {\n    height: 100px;\n}\n\nheader .navbar {\n    top: 100px;\n}\n"
  },
  {
    "path": "src/sourceDev.WebApp/SharedThemes/yeti/wwwroot/js/bootstrap.bundle.js",
    "content": "/*!\n  * Bootstrap v5.0.2 (https://getbootstrap.com/)\n  * Copyright 2011-2021 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)\n  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n  */\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n  typeof define === 'function' && define.amd ? define(factory) :\n  (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.bootstrap = factory());\n}(this, (function () { 'use strict';\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): dom/selector-engine.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n  const NODE_TEXT = 3;\n  const SelectorEngine = {\n    find(selector, element = document.documentElement) {\n      return [].concat(...Element.prototype.querySelectorAll.call(element, selector));\n    },\n\n    findOne(selector, element = document.documentElement) {\n      return Element.prototype.querySelector.call(element, selector);\n    },\n\n    children(element, selector) {\n      return [].concat(...element.children).filter(child => child.matches(selector));\n    },\n\n    parents(element, selector) {\n      const parents = [];\n      let ancestor = element.parentNode;\n\n      while (ancestor && ancestor.nodeType === Node.ELEMENT_NODE && ancestor.nodeType !== NODE_TEXT) {\n        if (ancestor.matches(selector)) {\n          parents.push(ancestor);\n        }\n\n        ancestor = ancestor.parentNode;\n      }\n\n      return parents;\n    },\n\n    prev(element, selector) {\n      let previous = element.previousElementSibling;\n\n      while (previous) {\n        if (previous.matches(selector)) {\n          return [previous];\n        }\n\n        previous = previous.previousElementSibling;\n      }\n\n      return [];\n    },\n\n    next(element, selector) {\n      let next = element.nextElementSibling;\n\n      while (next) {\n        if (next.matches(selector)) {\n          return [next];\n        }\n\n        next = next.nextElementSibling;\n      }\n\n      return [];\n    }\n\n  };\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): util/index.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n\n  const MAX_UID = 1000000;\n  const MILLISECONDS_MULTIPLIER = 1000;\n  const TRANSITION_END = 'transitionend'; // Shoutout AngusCroll (https://goo.gl/pxwQGp)\n\n  const toType = obj => {\n    if (obj === null || obj === undefined) {\n      return `${obj}`;\n    }\n\n    return {}.toString.call(obj).match(/\\s([a-z]+)/i)[1].toLowerCase();\n  };\n  /**\n   * --------------------------------------------------------------------------\n   * Public Util Api\n   * --------------------------------------------------------------------------\n   */\n\n\n  const getUID = prefix => {\n    do {\n      prefix += Math.floor(Math.random() * MAX_UID);\n    } while (document.getElementById(prefix));\n\n    return prefix;\n  };\n\n  const getSelector = element => {\n    let selector = element.getAttribute('data-bs-target');\n\n    if (!selector || selector === '#') {\n      let hrefAttr = element.getAttribute('href'); // The only valid content that could double as a selector are IDs or classes,\n      // so everything starting with `#` or `.`. If a \"real\" URL is used as the selector,\n      // `document.querySelector` will rightfully complain it is invalid.\n      // See https://github.com/twbs/bootstrap/issues/32273\n\n      if (!hrefAttr || !hrefAttr.includes('#') && !hrefAttr.startsWith('.')) {\n        return null;\n      } // Just in case some CMS puts out a full URL with the anchor appended\n\n\n      if (hrefAttr.includes('#') && !hrefAttr.startsWith('#')) {\n        hrefAttr = `#${hrefAttr.split('#')[1]}`;\n      }\n\n      selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : null;\n    }\n\n    return selector;\n  };\n\n  const getSelectorFromElement = element => {\n    const selector = getSelector(element);\n\n    if (selector) {\n      return document.querySelector(selector) ? selector : null;\n    }\n\n    return null;\n  };\n\n  const getElementFromSelector = element => {\n    const selector = getSelector(element);\n    return selector ? document.querySelector(selector) : null;\n  };\n\n  const getTransitionDurationFromElement = element => {\n    if (!element) {\n      return 0;\n    } // Get transition-duration of the element\n\n\n    let {\n      transitionDuration,\n      transitionDelay\n    } = window.getComputedStyle(element);\n    const floatTransitionDuration = Number.parseFloat(transitionDuration);\n    const floatTransitionDelay = Number.parseFloat(transitionDelay); // Return 0 if element or transition duration is not found\n\n    if (!floatTransitionDuration && !floatTransitionDelay) {\n      return 0;\n    } // If multiple durations are defined, take the first\n\n\n    transitionDuration = transitionDuration.split(',')[0];\n    transitionDelay = transitionDelay.split(',')[0];\n    return (Number.parseFloat(transitionDuration) + Number.parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER;\n  };\n\n  const triggerTransitionEnd = element => {\n    element.dispatchEvent(new Event(TRANSITION_END));\n  };\n\n  const isElement$1 = obj => {\n    if (!obj || typeof obj !== 'object') {\n      return false;\n    }\n\n    if (typeof obj.jquery !== 'undefined') {\n      obj = obj[0];\n    }\n\n    return typeof obj.nodeType !== 'undefined';\n  };\n\n  const getElement = obj => {\n    if (isElement$1(obj)) {\n      // it's a jQuery object or a node element\n      return obj.jquery ? obj[0] : obj;\n    }\n\n    if (typeof obj === 'string' && obj.length > 0) {\n      return SelectorEngine.findOne(obj);\n    }\n\n    return null;\n  };\n\n  const typeCheckConfig = (componentName, config, configTypes) => {\n    Object.keys(configTypes).forEach(property => {\n      const expectedTypes = configTypes[property];\n      const value = config[property];\n      const valueType = value && isElement$1(value) ? 'element' : toType(value);\n\n      if (!new RegExp(expectedTypes).test(valueType)) {\n        throw new TypeError(`${componentName.toUpperCase()}: Option \"${property}\" provided type \"${valueType}\" but expected type \"${expectedTypes}\".`);\n      }\n    });\n  };\n\n  const isVisible = element => {\n    if (!isElement$1(element) || element.getClientRects().length === 0) {\n      return false;\n    }\n\n    return getComputedStyle(element).getPropertyValue('visibility') === 'visible';\n  };\n\n  const isDisabled = element => {\n    if (!element || element.nodeType !== Node.ELEMENT_NODE) {\n      return true;\n    }\n\n    if (element.classList.contains('disabled')) {\n      return true;\n    }\n\n    if (typeof element.disabled !== 'undefined') {\n      return element.disabled;\n    }\n\n    return element.hasAttribute('disabled') && element.getAttribute('disabled') !== 'false';\n  };\n\n  const findShadowRoot = element => {\n    if (!document.documentElement.attachShadow) {\n      return null;\n    } // Can find the shadow root otherwise it'll return the document\n\n\n    if (typeof element.getRootNode === 'function') {\n      const root = element.getRootNode();\n      return root instanceof ShadowRoot ? root : null;\n    }\n\n    if (element instanceof ShadowRoot) {\n      return element;\n    } // when we don't find a shadow root\n\n\n    if (!element.parentNode) {\n      return null;\n    }\n\n    return findShadowRoot(element.parentNode);\n  };\n\n  const noop = () => {};\n\n  const reflow = element => element.offsetHeight;\n\n  const getjQuery = () => {\n    const {\n      jQuery\n    } = window;\n\n    if (jQuery && !document.body.hasAttribute('data-bs-no-jquery')) {\n      return jQuery;\n    }\n\n    return null;\n  };\n\n  const DOMContentLoadedCallbacks = [];\n\n  const onDOMContentLoaded = callback => {\n    if (document.readyState === 'loading') {\n      // add listener on the first call when the document is in loading state\n      if (!DOMContentLoadedCallbacks.length) {\n        document.addEventListener('DOMContentLoaded', () => {\n          DOMContentLoadedCallbacks.forEach(callback => callback());\n        });\n      }\n\n      DOMContentLoadedCallbacks.push(callback);\n    } else {\n      callback();\n    }\n  };\n\n  const isRTL = () => document.documentElement.dir === 'rtl';\n\n  const defineJQueryPlugin = plugin => {\n    onDOMContentLoaded(() => {\n      const $ = getjQuery();\n      /* istanbul ignore if */\n\n      if ($) {\n        const name = plugin.NAME;\n        const JQUERY_NO_CONFLICT = $.fn[name];\n        $.fn[name] = plugin.jQueryInterface;\n        $.fn[name].Constructor = plugin;\n\n        $.fn[name].noConflict = () => {\n          $.fn[name] = JQUERY_NO_CONFLICT;\n          return plugin.jQueryInterface;\n        };\n      }\n    });\n  };\n\n  const execute = callback => {\n    if (typeof callback === 'function') {\n      callback();\n    }\n  };\n\n  const executeAfterTransition = (callback, transitionElement, waitForTransition = true) => {\n    if (!waitForTransition) {\n      execute(callback);\n      return;\n    }\n\n    const durationPadding = 5;\n    const emulatedDuration = getTransitionDurationFromElement(transitionElement) + durationPadding;\n    let called = false;\n\n    const handler = ({\n      target\n    }) => {\n      if (target !== transitionElement) {\n        return;\n      }\n\n      called = true;\n      transitionElement.removeEventListener(TRANSITION_END, handler);\n      execute(callback);\n    };\n\n    transitionElement.addEventListener(TRANSITION_END, handler);\n    setTimeout(() => {\n      if (!called) {\n        triggerTransitionEnd(transitionElement);\n      }\n    }, emulatedDuration);\n  };\n  /**\n   * Return the previous/next element of a list.\n   *\n   * @param {array} list    The list of elements\n   * @param activeElement   The active element\n   * @param shouldGetNext   Choose to get next or previous element\n   * @param isCycleAllowed\n   * @return {Element|elem} The proper element\n   */\n\n\n  const getNextActiveElement = (list, activeElement, shouldGetNext, isCycleAllowed) => {\n    let index = list.indexOf(activeElement); // if the element does not exist in the list return an element depending on the direction and if cycle is allowed\n\n    if (index === -1) {\n      return list[!shouldGetNext && isCycleAllowed ? list.length - 1 : 0];\n    }\n\n    const listLength = list.length;\n    index += shouldGetNext ? 1 : -1;\n\n    if (isCycleAllowed) {\n      index = (index + listLength) % listLength;\n    }\n\n    return list[Math.max(0, Math.min(index, listLength - 1))];\n  };\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): dom/event-handler.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const namespaceRegex = /[^.]*(?=\\..*)\\.|.*/;\n  const stripNameRegex = /\\..*/;\n  const stripUidRegex = /::\\d+$/;\n  const eventRegistry = {}; // Events storage\n\n  let uidEvent = 1;\n  const customEvents = {\n    mouseenter: 'mouseover',\n    mouseleave: 'mouseout'\n  };\n  const customEventsRegex = /^(mouseenter|mouseleave)/i;\n  const nativeEvents = new Set(['click', 'dblclick', 'mouseup', 'mousedown', 'contextmenu', 'mousewheel', 'DOMMouseScroll', 'mouseover', 'mouseout', 'mousemove', 'selectstart', 'selectend', 'keydown', 'keypress', 'keyup', 'orientationchange', 'touchstart', 'touchmove', 'touchend', 'touchcancel', 'pointerdown', 'pointermove', 'pointerup', 'pointerleave', 'pointercancel', 'gesturestart', 'gesturechange', 'gestureend', 'focus', 'blur', 'change', 'reset', 'select', 'submit', 'focusin', 'focusout', 'load', 'unload', 'beforeunload', 'resize', 'move', 'DOMContentLoaded', 'readystatechange', 'error', 'abort', 'scroll']);\n  /**\n   * ------------------------------------------------------------------------\n   * Private methods\n   * ------------------------------------------------------------------------\n   */\n\n  function getUidEvent(element, uid) {\n    return uid && `${uid}::${uidEvent++}` || element.uidEvent || uidEvent++;\n  }\n\n  function getEvent(element) {\n    const uid = getUidEvent(element);\n    element.uidEvent = uid;\n    eventRegistry[uid] = eventRegistry[uid] || {};\n    return eventRegistry[uid];\n  }\n\n  function bootstrapHandler(element, fn) {\n    return function handler(event) {\n      event.delegateTarget = element;\n\n      if (handler.oneOff) {\n        EventHandler.off(element, event.type, fn);\n      }\n\n      return fn.apply(element, [event]);\n    };\n  }\n\n  function bootstrapDelegationHandler(element, selector, fn) {\n    return function handler(event) {\n      const domElements = element.querySelectorAll(selector);\n\n      for (let {\n        target\n      } = event; target && target !== this; target = target.parentNode) {\n        for (let i = domElements.length; i--;) {\n          if (domElements[i] === target) {\n            event.delegateTarget = target;\n\n            if (handler.oneOff) {\n              // eslint-disable-next-line unicorn/consistent-destructuring\n              EventHandler.off(element, event.type, selector, fn);\n            }\n\n            return fn.apply(target, [event]);\n          }\n        }\n      } // To please ESLint\n\n\n      return null;\n    };\n  }\n\n  function findHandler(events, handler, delegationSelector = null) {\n    const uidEventList = Object.keys(events);\n\n    for (let i = 0, len = uidEventList.length; i < len; i++) {\n      const event = events[uidEventList[i]];\n\n      if (event.originalHandler === handler && event.delegationSelector === delegationSelector) {\n        return event;\n      }\n    }\n\n    return null;\n  }\n\n  function normalizeParams(originalTypeEvent, handler, delegationFn) {\n    const delegation = typeof handler === 'string';\n    const originalHandler = delegation ? delegationFn : handler;\n    let typeEvent = getTypeEvent(originalTypeEvent);\n    const isNative = nativeEvents.has(typeEvent);\n\n    if (!isNative) {\n      typeEvent = originalTypeEvent;\n    }\n\n    return [delegation, originalHandler, typeEvent];\n  }\n\n  function addHandler(element, originalTypeEvent, handler, delegationFn, oneOff) {\n    if (typeof originalTypeEvent !== 'string' || !element) {\n      return;\n    }\n\n    if (!handler) {\n      handler = delegationFn;\n      delegationFn = null;\n    } // in case of mouseenter or mouseleave wrap the handler within a function that checks for its DOM position\n    // this prevents the handler from being dispatched the same way as mouseover or mouseout does\n\n\n    if (customEventsRegex.test(originalTypeEvent)) {\n      const wrapFn = fn => {\n        return function (event) {\n          if (!event.relatedTarget || event.relatedTarget !== event.delegateTarget && !event.delegateTarget.contains(event.relatedTarget)) {\n            return fn.call(this, event);\n          }\n        };\n      };\n\n      if (delegationFn) {\n        delegationFn = wrapFn(delegationFn);\n      } else {\n        handler = wrapFn(handler);\n      }\n    }\n\n    const [delegation, originalHandler, typeEvent] = normalizeParams(originalTypeEvent, handler, delegationFn);\n    const events = getEvent(element);\n    const handlers = events[typeEvent] || (events[typeEvent] = {});\n    const previousFn = findHandler(handlers, originalHandler, delegation ? handler : null);\n\n    if (previousFn) {\n      previousFn.oneOff = previousFn.oneOff && oneOff;\n      return;\n    }\n\n    const uid = getUidEvent(originalHandler, originalTypeEvent.replace(namespaceRegex, ''));\n    const fn = delegation ? bootstrapDelegationHandler(element, handler, delegationFn) : bootstrapHandler(element, handler);\n    fn.delegationSelector = delegation ? handler : null;\n    fn.originalHandler = originalHandler;\n    fn.oneOff = oneOff;\n    fn.uidEvent = uid;\n    handlers[uid] = fn;\n    element.addEventListener(typeEvent, fn, delegation);\n  }\n\n  function removeHandler(element, events, typeEvent, handler, delegationSelector) {\n    const fn = findHandler(events[typeEvent], handler, delegationSelector);\n\n    if (!fn) {\n      return;\n    }\n\n    element.removeEventListener(typeEvent, fn, Boolean(delegationSelector));\n    delete events[typeEvent][fn.uidEvent];\n  }\n\n  function removeNamespacedHandlers(element, events, typeEvent, namespace) {\n    const storeElementEvent = events[typeEvent] || {};\n    Object.keys(storeElementEvent).forEach(handlerKey => {\n      if (handlerKey.includes(namespace)) {\n        const event = storeElementEvent[handlerKey];\n        removeHandler(element, events, typeEvent, event.originalHandler, event.delegationSelector);\n      }\n    });\n  }\n\n  function getTypeEvent(event) {\n    // allow to get the native events from namespaced events ('click.bs.button' --> 'click')\n    event = event.replace(stripNameRegex, '');\n    return customEvents[event] || event;\n  }\n\n  const EventHandler = {\n    on(element, event, handler, delegationFn) {\n      addHandler(element, event, handler, delegationFn, false);\n    },\n\n    one(element, event, handler, delegationFn) {\n      addHandler(element, event, handler, delegationFn, true);\n    },\n\n    off(element, originalTypeEvent, handler, delegationFn) {\n      if (typeof originalTypeEvent !== 'string' || !element) {\n        return;\n      }\n\n      const [delegation, originalHandler, typeEvent] = normalizeParams(originalTypeEvent, handler, delegationFn);\n      const inNamespace = typeEvent !== originalTypeEvent;\n      const events = getEvent(element);\n      const isNamespace = originalTypeEvent.startsWith('.');\n\n      if (typeof originalHandler !== 'undefined') {\n        // Simplest case: handler is passed, remove that listener ONLY.\n        if (!events || !events[typeEvent]) {\n          return;\n        }\n\n        removeHandler(element, events, typeEvent, originalHandler, delegation ? handler : null);\n        return;\n      }\n\n      if (isNamespace) {\n        Object.keys(events).forEach(elementEvent => {\n          removeNamespacedHandlers(element, events, elementEvent, originalTypeEvent.slice(1));\n        });\n      }\n\n      const storeElementEvent = events[typeEvent] || {};\n      Object.keys(storeElementEvent).forEach(keyHandlers => {\n        const handlerKey = keyHandlers.replace(stripUidRegex, '');\n\n        if (!inNamespace || originalTypeEvent.includes(handlerKey)) {\n          const event = storeElementEvent[keyHandlers];\n          removeHandler(element, events, typeEvent, event.originalHandler, event.delegationSelector);\n        }\n      });\n    },\n\n    trigger(element, event, args) {\n      if (typeof event !== 'string' || !element) {\n        return null;\n      }\n\n      const $ = getjQuery();\n      const typeEvent = getTypeEvent(event);\n      const inNamespace = event !== typeEvent;\n      const isNative = nativeEvents.has(typeEvent);\n      let jQueryEvent;\n      let bubbles = true;\n      let nativeDispatch = true;\n      let defaultPrevented = false;\n      let evt = null;\n\n      if (inNamespace && $) {\n        jQueryEvent = $.Event(event, args);\n        $(element).trigger(jQueryEvent);\n        bubbles = !jQueryEvent.isPropagationStopped();\n        nativeDispatch = !jQueryEvent.isImmediatePropagationStopped();\n        defaultPrevented = jQueryEvent.isDefaultPrevented();\n      }\n\n      if (isNative) {\n        evt = document.createEvent('HTMLEvents');\n        evt.initEvent(typeEvent, bubbles, true);\n      } else {\n        evt = new CustomEvent(event, {\n          bubbles,\n          cancelable: true\n        });\n      } // merge custom information in our event\n\n\n      if (typeof args !== 'undefined') {\n        Object.keys(args).forEach(key => {\n          Object.defineProperty(evt, key, {\n            get() {\n              return args[key];\n            }\n\n          });\n        });\n      }\n\n      if (defaultPrevented) {\n        evt.preventDefault();\n      }\n\n      if (nativeDispatch) {\n        element.dispatchEvent(evt);\n      }\n\n      if (evt.defaultPrevented && typeof jQueryEvent !== 'undefined') {\n        jQueryEvent.preventDefault();\n      }\n\n      return evt;\n    }\n\n  };\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): dom/data.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n  const elementMap = new Map();\n  var Data = {\n    set(element, key, instance) {\n      if (!elementMap.has(element)) {\n        elementMap.set(element, new Map());\n      }\n\n      const instanceMap = elementMap.get(element); // make it clear we only want one instance per element\n      // can be removed later when multiple key/instances are fine to be used\n\n      if (!instanceMap.has(key) && instanceMap.size !== 0) {\n        // eslint-disable-next-line no-console\n        console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(instanceMap.keys())[0]}.`);\n        return;\n      }\n\n      instanceMap.set(key, instance);\n    },\n\n    get(element, key) {\n      if (elementMap.has(element)) {\n        return elementMap.get(element).get(key) || null;\n      }\n\n      return null;\n    },\n\n    remove(element, key) {\n      if (!elementMap.has(element)) {\n        return;\n      }\n\n      const instanceMap = elementMap.get(element);\n      instanceMap.delete(key); // free up element references if there are no instances left for an element\n\n      if (instanceMap.size === 0) {\n        elementMap.delete(element);\n      }\n    }\n\n  };\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): base-component.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const VERSION = '5.0.2';\n\n  class BaseComponent {\n    constructor(element) {\n      element = getElement(element);\n\n      if (!element) {\n        return;\n      }\n\n      this._element = element;\n      Data.set(this._element, this.constructor.DATA_KEY, this);\n    }\n\n    dispose() {\n      Data.remove(this._element, this.constructor.DATA_KEY);\n      EventHandler.off(this._element, this.constructor.EVENT_KEY);\n      Object.getOwnPropertyNames(this).forEach(propertyName => {\n        this[propertyName] = null;\n      });\n    }\n\n    _queueCallback(callback, element, isAnimated = true) {\n      executeAfterTransition(callback, element, isAnimated);\n    }\n    /** Static */\n\n\n    static getInstance(element) {\n      return Data.get(element, this.DATA_KEY);\n    }\n\n    static getOrCreateInstance(element, config = {}) {\n      return this.getInstance(element) || new this(element, typeof config === 'object' ? config : null);\n    }\n\n    static get VERSION() {\n      return VERSION;\n    }\n\n    static get NAME() {\n      throw new Error('You have to implement the static method \"NAME\", for each component!');\n    }\n\n    static get DATA_KEY() {\n      return `bs.${this.NAME}`;\n    }\n\n    static get EVENT_KEY() {\n      return `.${this.DATA_KEY}`;\n    }\n\n  }\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): alert.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$c = 'alert';\n  const DATA_KEY$b = 'bs.alert';\n  const EVENT_KEY$b = `.${DATA_KEY$b}`;\n  const DATA_API_KEY$8 = '.data-api';\n  const SELECTOR_DISMISS = '[data-bs-dismiss=\"alert\"]';\n  const EVENT_CLOSE = `close${EVENT_KEY$b}`;\n  const EVENT_CLOSED = `closed${EVENT_KEY$b}`;\n  const EVENT_CLICK_DATA_API$7 = `click${EVENT_KEY$b}${DATA_API_KEY$8}`;\n  const CLASS_NAME_ALERT = 'alert';\n  const CLASS_NAME_FADE$6 = 'fade';\n  const CLASS_NAME_SHOW$9 = 'show';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Alert extends BaseComponent {\n    // Getters\n    static get NAME() {\n      return NAME$c;\n    } // Public\n\n\n    close(element) {\n      const rootElement = element ? this._getRootElement(element) : this._element;\n\n      const customEvent = this._triggerCloseEvent(rootElement);\n\n      if (customEvent === null || customEvent.defaultPrevented) {\n        return;\n      }\n\n      this._removeElement(rootElement);\n    } // Private\n\n\n    _getRootElement(element) {\n      return getElementFromSelector(element) || element.closest(`.${CLASS_NAME_ALERT}`);\n    }\n\n    _triggerCloseEvent(element) {\n      return EventHandler.trigger(element, EVENT_CLOSE);\n    }\n\n    _removeElement(element) {\n      element.classList.remove(CLASS_NAME_SHOW$9);\n      const isAnimated = element.classList.contains(CLASS_NAME_FADE$6);\n\n      this._queueCallback(() => this._destroyElement(element), element, isAnimated);\n    }\n\n    _destroyElement(element) {\n      element.remove();\n      EventHandler.trigger(element, EVENT_CLOSED);\n    } // Static\n\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = Alert.getOrCreateInstance(this);\n\n        if (config === 'close') {\n          data[config](this);\n        }\n      });\n    }\n\n    static handleDismiss(alertInstance) {\n      return function (event) {\n        if (event) {\n          event.preventDefault();\n        }\n\n        alertInstance.close(this);\n      };\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(document, EVENT_CLICK_DATA_API$7, SELECTOR_DISMISS, Alert.handleDismiss(new Alert()));\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Alert to jQuery only if jQuery is present\n   */\n\n  defineJQueryPlugin(Alert);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): button.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$b = 'button';\n  const DATA_KEY$a = 'bs.button';\n  const EVENT_KEY$a = `.${DATA_KEY$a}`;\n  const DATA_API_KEY$7 = '.data-api';\n  const CLASS_NAME_ACTIVE$3 = 'active';\n  const SELECTOR_DATA_TOGGLE$5 = '[data-bs-toggle=\"button\"]';\n  const EVENT_CLICK_DATA_API$6 = `click${EVENT_KEY$a}${DATA_API_KEY$7}`;\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Button extends BaseComponent {\n    // Getters\n    static get NAME() {\n      return NAME$b;\n    } // Public\n\n\n    toggle() {\n      // Toggle class and sync the `aria-pressed` attribute with the return value of the `.toggle()` method\n      this._element.setAttribute('aria-pressed', this._element.classList.toggle(CLASS_NAME_ACTIVE$3));\n    } // Static\n\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = Button.getOrCreateInstance(this);\n\n        if (config === 'toggle') {\n          data[config]();\n        }\n      });\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(document, EVENT_CLICK_DATA_API$6, SELECTOR_DATA_TOGGLE$5, event => {\n    event.preventDefault();\n    const button = event.target.closest(SELECTOR_DATA_TOGGLE$5);\n    const data = Button.getOrCreateInstance(button);\n    data.toggle();\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Button to jQuery only if jQuery is present\n   */\n\n  defineJQueryPlugin(Button);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): dom/manipulator.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  function normalizeData(val) {\n    if (val === 'true') {\n      return true;\n    }\n\n    if (val === 'false') {\n      return false;\n    }\n\n    if (val === Number(val).toString()) {\n      return Number(val);\n    }\n\n    if (val === '' || val === 'null') {\n      return null;\n    }\n\n    return val;\n  }\n\n  function normalizeDataKey(key) {\n    return key.replace(/[A-Z]/g, chr => `-${chr.toLowerCase()}`);\n  }\n\n  const Manipulator = {\n    setDataAttribute(element, key, value) {\n      element.setAttribute(`data-bs-${normalizeDataKey(key)}`, value);\n    },\n\n    removeDataAttribute(element, key) {\n      element.removeAttribute(`data-bs-${normalizeDataKey(key)}`);\n    },\n\n    getDataAttributes(element) {\n      if (!element) {\n        return {};\n      }\n\n      const attributes = {};\n      Object.keys(element.dataset).filter(key => key.startsWith('bs')).forEach(key => {\n        let pureKey = key.replace(/^bs/, '');\n        pureKey = pureKey.charAt(0).toLowerCase() + pureKey.slice(1, pureKey.length);\n        attributes[pureKey] = normalizeData(element.dataset[key]);\n      });\n      return attributes;\n    },\n\n    getDataAttribute(element, key) {\n      return normalizeData(element.getAttribute(`data-bs-${normalizeDataKey(key)}`));\n    },\n\n    offset(element) {\n      const rect = element.getBoundingClientRect();\n      return {\n        top: rect.top + document.body.scrollTop,\n        left: rect.left + document.body.scrollLeft\n      };\n    },\n\n    position(element) {\n      return {\n        top: element.offsetTop,\n        left: element.offsetLeft\n      };\n    }\n\n  };\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): carousel.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$a = 'carousel';\n  const DATA_KEY$9 = 'bs.carousel';\n  const EVENT_KEY$9 = `.${DATA_KEY$9}`;\n  const DATA_API_KEY$6 = '.data-api';\n  const ARROW_LEFT_KEY = 'ArrowLeft';\n  const ARROW_RIGHT_KEY = 'ArrowRight';\n  const TOUCHEVENT_COMPAT_WAIT = 500; // Time for mouse compat events to fire after touch\n\n  const SWIPE_THRESHOLD = 40;\n  const Default$9 = {\n    interval: 5000,\n    keyboard: true,\n    slide: false,\n    pause: 'hover',\n    wrap: true,\n    touch: true\n  };\n  const DefaultType$9 = {\n    interval: '(number|boolean)',\n    keyboard: 'boolean',\n    slide: '(boolean|string)',\n    pause: '(string|boolean)',\n    wrap: 'boolean',\n    touch: 'boolean'\n  };\n  const ORDER_NEXT = 'next';\n  const ORDER_PREV = 'prev';\n  const DIRECTION_LEFT = 'left';\n  const DIRECTION_RIGHT = 'right';\n  const KEY_TO_DIRECTION = {\n    [ARROW_LEFT_KEY]: DIRECTION_RIGHT,\n    [ARROW_RIGHT_KEY]: DIRECTION_LEFT\n  };\n  const EVENT_SLIDE = `slide${EVENT_KEY$9}`;\n  const EVENT_SLID = `slid${EVENT_KEY$9}`;\n  const EVENT_KEYDOWN = `keydown${EVENT_KEY$9}`;\n  const EVENT_MOUSEENTER = `mouseenter${EVENT_KEY$9}`;\n  const EVENT_MOUSELEAVE = `mouseleave${EVENT_KEY$9}`;\n  const EVENT_TOUCHSTART = `touchstart${EVENT_KEY$9}`;\n  const EVENT_TOUCHMOVE = `touchmove${EVENT_KEY$9}`;\n  const EVENT_TOUCHEND = `touchend${EVENT_KEY$9}`;\n  const EVENT_POINTERDOWN = `pointerdown${EVENT_KEY$9}`;\n  const EVENT_POINTERUP = `pointerup${EVENT_KEY$9}`;\n  const EVENT_DRAG_START = `dragstart${EVENT_KEY$9}`;\n  const EVENT_LOAD_DATA_API$2 = `load${EVENT_KEY$9}${DATA_API_KEY$6}`;\n  const EVENT_CLICK_DATA_API$5 = `click${EVENT_KEY$9}${DATA_API_KEY$6}`;\n  const CLASS_NAME_CAROUSEL = 'carousel';\n  const CLASS_NAME_ACTIVE$2 = 'active';\n  const CLASS_NAME_SLIDE = 'slide';\n  const CLASS_NAME_END = 'carousel-item-end';\n  const CLASS_NAME_START = 'carousel-item-start';\n  const CLASS_NAME_NEXT = 'carousel-item-next';\n  const CLASS_NAME_PREV = 'carousel-item-prev';\n  const CLASS_NAME_POINTER_EVENT = 'pointer-event';\n  const SELECTOR_ACTIVE$1 = '.active';\n  const SELECTOR_ACTIVE_ITEM = '.active.carousel-item';\n  const SELECTOR_ITEM = '.carousel-item';\n  const SELECTOR_ITEM_IMG = '.carousel-item img';\n  const SELECTOR_NEXT_PREV = '.carousel-item-next, .carousel-item-prev';\n  const SELECTOR_INDICATORS = '.carousel-indicators';\n  const SELECTOR_INDICATOR = '[data-bs-target]';\n  const SELECTOR_DATA_SLIDE = '[data-bs-slide], [data-bs-slide-to]';\n  const SELECTOR_DATA_RIDE = '[data-bs-ride=\"carousel\"]';\n  const POINTER_TYPE_TOUCH = 'touch';\n  const POINTER_TYPE_PEN = 'pen';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Carousel extends BaseComponent {\n    constructor(element, config) {\n      super(element);\n      this._items = null;\n      this._interval = null;\n      this._activeElement = null;\n      this._isPaused = false;\n      this._isSliding = false;\n      this.touchTimeout = null;\n      this.touchStartX = 0;\n      this.touchDeltaX = 0;\n      this._config = this._getConfig(config);\n      this._indicatorsElement = SelectorEngine.findOne(SELECTOR_INDICATORS, this._element);\n      this._touchSupported = 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0;\n      this._pointerEvent = Boolean(window.PointerEvent);\n\n      this._addEventListeners();\n    } // Getters\n\n\n    static get Default() {\n      return Default$9;\n    }\n\n    static get NAME() {\n      return NAME$a;\n    } // Public\n\n\n    next() {\n      this._slide(ORDER_NEXT);\n    }\n\n    nextWhenVisible() {\n      // Don't call next when the page isn't visible\n      // or the carousel or its parent isn't visible\n      if (!document.hidden && isVisible(this._element)) {\n        this.next();\n      }\n    }\n\n    prev() {\n      this._slide(ORDER_PREV);\n    }\n\n    pause(event) {\n      if (!event) {\n        this._isPaused = true;\n      }\n\n      if (SelectorEngine.findOne(SELECTOR_NEXT_PREV, this._element)) {\n        triggerTransitionEnd(this._element);\n        this.cycle(true);\n      }\n\n      clearInterval(this._interval);\n      this._interval = null;\n    }\n\n    cycle(event) {\n      if (!event) {\n        this._isPaused = false;\n      }\n\n      if (this._interval) {\n        clearInterval(this._interval);\n        this._interval = null;\n      }\n\n      if (this._config && this._config.interval && !this._isPaused) {\n        this._updateInterval();\n\n        this._interval = setInterval((document.visibilityState ? this.nextWhenVisible : this.next).bind(this), this._config.interval);\n      }\n    }\n\n    to(index) {\n      this._activeElement = SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element);\n\n      const activeIndex = this._getItemIndex(this._activeElement);\n\n      if (index > this._items.length - 1 || index < 0) {\n        return;\n      }\n\n      if (this._isSliding) {\n        EventHandler.one(this._element, EVENT_SLID, () => this.to(index));\n        return;\n      }\n\n      if (activeIndex === index) {\n        this.pause();\n        this.cycle();\n        return;\n      }\n\n      const order = index > activeIndex ? ORDER_NEXT : ORDER_PREV;\n\n      this._slide(order, this._items[index]);\n    } // Private\n\n\n    _getConfig(config) {\n      config = { ...Default$9,\n        ...Manipulator.getDataAttributes(this._element),\n        ...(typeof config === 'object' ? config : {})\n      };\n      typeCheckConfig(NAME$a, config, DefaultType$9);\n      return config;\n    }\n\n    _handleSwipe() {\n      const absDeltax = Math.abs(this.touchDeltaX);\n\n      if (absDeltax <= SWIPE_THRESHOLD) {\n        return;\n      }\n\n      const direction = absDeltax / this.touchDeltaX;\n      this.touchDeltaX = 0;\n\n      if (!direction) {\n        return;\n      }\n\n      this._slide(direction > 0 ? DIRECTION_RIGHT : DIRECTION_LEFT);\n    }\n\n    _addEventListeners() {\n      if (this._config.keyboard) {\n        EventHandler.on(this._element, EVENT_KEYDOWN, event => this._keydown(event));\n      }\n\n      if (this._config.pause === 'hover') {\n        EventHandler.on(this._element, EVENT_MOUSEENTER, event => this.pause(event));\n        EventHandler.on(this._element, EVENT_MOUSELEAVE, event => this.cycle(event));\n      }\n\n      if (this._config.touch && this._touchSupported) {\n        this._addTouchEventListeners();\n      }\n    }\n\n    _addTouchEventListeners() {\n      const start = event => {\n        if (this._pointerEvent && (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH)) {\n          this.touchStartX = event.clientX;\n        } else if (!this._pointerEvent) {\n          this.touchStartX = event.touches[0].clientX;\n        }\n      };\n\n      const move = event => {\n        // ensure swiping with one touch and not pinching\n        this.touchDeltaX = event.touches && event.touches.length > 1 ? 0 : event.touches[0].clientX - this.touchStartX;\n      };\n\n      const end = event => {\n        if (this._pointerEvent && (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH)) {\n          this.touchDeltaX = event.clientX - this.touchStartX;\n        }\n\n        this._handleSwipe();\n\n        if (this._config.pause === 'hover') {\n          // If it's a touch-enabled device, mouseenter/leave are fired as\n          // part of the mouse compatibility events on first tap - the carousel\n          // would stop cycling until user tapped out of it;\n          // here, we listen for touchend, explicitly pause the carousel\n          // (as if it's the second time we tap on it, mouseenter compat event\n          // is NOT fired) and after a timeout (to allow for mouse compatibility\n          // events to fire) we explicitly restart cycling\n          this.pause();\n\n          if (this.touchTimeout) {\n            clearTimeout(this.touchTimeout);\n          }\n\n          this.touchTimeout = setTimeout(event => this.cycle(event), TOUCHEVENT_COMPAT_WAIT + this._config.interval);\n        }\n      };\n\n      SelectorEngine.find(SELECTOR_ITEM_IMG, this._element).forEach(itemImg => {\n        EventHandler.on(itemImg, EVENT_DRAG_START, e => e.preventDefault());\n      });\n\n      if (this._pointerEvent) {\n        EventHandler.on(this._element, EVENT_POINTERDOWN, event => start(event));\n        EventHandler.on(this._element, EVENT_POINTERUP, event => end(event));\n\n        this._element.classList.add(CLASS_NAME_POINTER_EVENT);\n      } else {\n        EventHandler.on(this._element, EVENT_TOUCHSTART, event => start(event));\n        EventHandler.on(this._element, EVENT_TOUCHMOVE, event => move(event));\n        EventHandler.on(this._element, EVENT_TOUCHEND, event => end(event));\n      }\n    }\n\n    _keydown(event) {\n      if (/input|textarea/i.test(event.target.tagName)) {\n        return;\n      }\n\n      const direction = KEY_TO_DIRECTION[event.key];\n\n      if (direction) {\n        event.preventDefault();\n\n        this._slide(direction);\n      }\n    }\n\n    _getItemIndex(element) {\n      this._items = element && element.parentNode ? SelectorEngine.find(SELECTOR_ITEM, element.parentNode) : [];\n      return this._items.indexOf(element);\n    }\n\n    _getItemByOrder(order, activeElement) {\n      const isNext = order === ORDER_NEXT;\n      return getNextActiveElement(this._items, activeElement, isNext, this._config.wrap);\n    }\n\n    _triggerSlideEvent(relatedTarget, eventDirectionName) {\n      const targetIndex = this._getItemIndex(relatedTarget);\n\n      const fromIndex = this._getItemIndex(SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element));\n\n      return EventHandler.trigger(this._element, EVENT_SLIDE, {\n        relatedTarget,\n        direction: eventDirectionName,\n        from: fromIndex,\n        to: targetIndex\n      });\n    }\n\n    _setActiveIndicatorElement(element) {\n      if (this._indicatorsElement) {\n        const activeIndicator = SelectorEngine.findOne(SELECTOR_ACTIVE$1, this._indicatorsElement);\n        activeIndicator.classList.remove(CLASS_NAME_ACTIVE$2);\n        activeIndicator.removeAttribute('aria-current');\n        const indicators = SelectorEngine.find(SELECTOR_INDICATOR, this._indicatorsElement);\n\n        for (let i = 0; i < indicators.length; i++) {\n          if (Number.parseInt(indicators[i].getAttribute('data-bs-slide-to'), 10) === this._getItemIndex(element)) {\n            indicators[i].classList.add(CLASS_NAME_ACTIVE$2);\n            indicators[i].setAttribute('aria-current', 'true');\n            break;\n          }\n        }\n      }\n    }\n\n    _updateInterval() {\n      const element = this._activeElement || SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element);\n\n      if (!element) {\n        return;\n      }\n\n      const elementInterval = Number.parseInt(element.getAttribute('data-bs-interval'), 10);\n\n      if (elementInterval) {\n        this._config.defaultInterval = this._config.defaultInterval || this._config.interval;\n        this._config.interval = elementInterval;\n      } else {\n        this._config.interval = this._config.defaultInterval || this._config.interval;\n      }\n    }\n\n    _slide(directionOrOrder, element) {\n      const order = this._directionToOrder(directionOrOrder);\n\n      const activeElement = SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element);\n\n      const activeElementIndex = this._getItemIndex(activeElement);\n\n      const nextElement = element || this._getItemByOrder(order, activeElement);\n\n      const nextElementIndex = this._getItemIndex(nextElement);\n\n      const isCycling = Boolean(this._interval);\n      const isNext = order === ORDER_NEXT;\n      const directionalClassName = isNext ? CLASS_NAME_START : CLASS_NAME_END;\n      const orderClassName = isNext ? CLASS_NAME_NEXT : CLASS_NAME_PREV;\n\n      const eventDirectionName = this._orderToDirection(order);\n\n      if (nextElement && nextElement.classList.contains(CLASS_NAME_ACTIVE$2)) {\n        this._isSliding = false;\n        return;\n      }\n\n      if (this._isSliding) {\n        return;\n      }\n\n      const slideEvent = this._triggerSlideEvent(nextElement, eventDirectionName);\n\n      if (slideEvent.defaultPrevented) {\n        return;\n      }\n\n      if (!activeElement || !nextElement) {\n        // Some weirdness is happening, so we bail\n        return;\n      }\n\n      this._isSliding = true;\n\n      if (isCycling) {\n        this.pause();\n      }\n\n      this._setActiveIndicatorElement(nextElement);\n\n      this._activeElement = nextElement;\n\n      const triggerSlidEvent = () => {\n        EventHandler.trigger(this._element, EVENT_SLID, {\n          relatedTarget: nextElement,\n          direction: eventDirectionName,\n          from: activeElementIndex,\n          to: nextElementIndex\n        });\n      };\n\n      if (this._element.classList.contains(CLASS_NAME_SLIDE)) {\n        nextElement.classList.add(orderClassName);\n        reflow(nextElement);\n        activeElement.classList.add(directionalClassName);\n        nextElement.classList.add(directionalClassName);\n\n        const completeCallBack = () => {\n          nextElement.classList.remove(directionalClassName, orderClassName);\n          nextElement.classList.add(CLASS_NAME_ACTIVE$2);\n          activeElement.classList.remove(CLASS_NAME_ACTIVE$2, orderClassName, directionalClassName);\n          this._isSliding = false;\n          setTimeout(triggerSlidEvent, 0);\n        };\n\n        this._queueCallback(completeCallBack, activeElement, true);\n      } else {\n        activeElement.classList.remove(CLASS_NAME_ACTIVE$2);\n        nextElement.classList.add(CLASS_NAME_ACTIVE$2);\n        this._isSliding = false;\n        triggerSlidEvent();\n      }\n\n      if (isCycling) {\n        this.cycle();\n      }\n    }\n\n    _directionToOrder(direction) {\n      if (![DIRECTION_RIGHT, DIRECTION_LEFT].includes(direction)) {\n        return direction;\n      }\n\n      if (isRTL()) {\n        return direction === DIRECTION_LEFT ? ORDER_PREV : ORDER_NEXT;\n      }\n\n      return direction === DIRECTION_LEFT ? ORDER_NEXT : ORDER_PREV;\n    }\n\n    _orderToDirection(order) {\n      if (![ORDER_NEXT, ORDER_PREV].includes(order)) {\n        return order;\n      }\n\n      if (isRTL()) {\n        return order === ORDER_PREV ? DIRECTION_LEFT : DIRECTION_RIGHT;\n      }\n\n      return order === ORDER_PREV ? DIRECTION_RIGHT : DIRECTION_LEFT;\n    } // Static\n\n\n    static carouselInterface(element, config) {\n      const data = Carousel.getOrCreateInstance(element, config);\n      let {\n        _config\n      } = data;\n\n      if (typeof config === 'object') {\n        _config = { ..._config,\n          ...config\n        };\n      }\n\n      const action = typeof config === 'string' ? config : _config.slide;\n\n      if (typeof config === 'number') {\n        data.to(config);\n      } else if (typeof action === 'string') {\n        if (typeof data[action] === 'undefined') {\n          throw new TypeError(`No method named \"${action}\"`);\n        }\n\n        data[action]();\n      } else if (_config.interval && _config.ride) {\n        data.pause();\n        data.cycle();\n      }\n    }\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        Carousel.carouselInterface(this, config);\n      });\n    }\n\n    static dataApiClickHandler(event) {\n      const target = getElementFromSelector(this);\n\n      if (!target || !target.classList.contains(CLASS_NAME_CAROUSEL)) {\n        return;\n      }\n\n      const config = { ...Manipulator.getDataAttributes(target),\n        ...Manipulator.getDataAttributes(this)\n      };\n      const slideIndex = this.getAttribute('data-bs-slide-to');\n\n      if (slideIndex) {\n        config.interval = false;\n      }\n\n      Carousel.carouselInterface(target, config);\n\n      if (slideIndex) {\n        Carousel.getInstance(target).to(slideIndex);\n      }\n\n      event.preventDefault();\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(document, EVENT_CLICK_DATA_API$5, SELECTOR_DATA_SLIDE, Carousel.dataApiClickHandler);\n  EventHandler.on(window, EVENT_LOAD_DATA_API$2, () => {\n    const carousels = SelectorEngine.find(SELECTOR_DATA_RIDE);\n\n    for (let i = 0, len = carousels.length; i < len; i++) {\n      Carousel.carouselInterface(carousels[i], Carousel.getInstance(carousels[i]));\n    }\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Carousel to jQuery only if jQuery is present\n   */\n\n  defineJQueryPlugin(Carousel);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): collapse.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$9 = 'collapse';\n  const DATA_KEY$8 = 'bs.collapse';\n  const EVENT_KEY$8 = `.${DATA_KEY$8}`;\n  const DATA_API_KEY$5 = '.data-api';\n  const Default$8 = {\n    toggle: true,\n    parent: ''\n  };\n  const DefaultType$8 = {\n    toggle: 'boolean',\n    parent: '(string|element)'\n  };\n  const EVENT_SHOW$5 = `show${EVENT_KEY$8}`;\n  const EVENT_SHOWN$5 = `shown${EVENT_KEY$8}`;\n  const EVENT_HIDE$5 = `hide${EVENT_KEY$8}`;\n  const EVENT_HIDDEN$5 = `hidden${EVENT_KEY$8}`;\n  const EVENT_CLICK_DATA_API$4 = `click${EVENT_KEY$8}${DATA_API_KEY$5}`;\n  const CLASS_NAME_SHOW$8 = 'show';\n  const CLASS_NAME_COLLAPSE = 'collapse';\n  const CLASS_NAME_COLLAPSING = 'collapsing';\n  const CLASS_NAME_COLLAPSED = 'collapsed';\n  const WIDTH = 'width';\n  const HEIGHT = 'height';\n  const SELECTOR_ACTIVES = '.show, .collapsing';\n  const SELECTOR_DATA_TOGGLE$4 = '[data-bs-toggle=\"collapse\"]';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Collapse extends BaseComponent {\n    constructor(element, config) {\n      super(element);\n      this._isTransitioning = false;\n      this._config = this._getConfig(config);\n      this._triggerArray = SelectorEngine.find(`${SELECTOR_DATA_TOGGLE$4}[href=\"#${this._element.id}\"],` + `${SELECTOR_DATA_TOGGLE$4}[data-bs-target=\"#${this._element.id}\"]`);\n      const toggleList = SelectorEngine.find(SELECTOR_DATA_TOGGLE$4);\n\n      for (let i = 0, len = toggleList.length; i < len; i++) {\n        const elem = toggleList[i];\n        const selector = getSelectorFromElement(elem);\n        const filterElement = SelectorEngine.find(selector).filter(foundElem => foundElem === this._element);\n\n        if (selector !== null && filterElement.length) {\n          this._selector = selector;\n\n          this._triggerArray.push(elem);\n        }\n      }\n\n      this._parent = this._config.parent ? this._getParent() : null;\n\n      if (!this._config.parent) {\n        this._addAriaAndCollapsedClass(this._element, this._triggerArray);\n      }\n\n      if (this._config.toggle) {\n        this.toggle();\n      }\n    } // Getters\n\n\n    static get Default() {\n      return Default$8;\n    }\n\n    static get NAME() {\n      return NAME$9;\n    } // Public\n\n\n    toggle() {\n      if (this._element.classList.contains(CLASS_NAME_SHOW$8)) {\n        this.hide();\n      } else {\n        this.show();\n      }\n    }\n\n    show() {\n      if (this._isTransitioning || this._element.classList.contains(CLASS_NAME_SHOW$8)) {\n        return;\n      }\n\n      let actives;\n      let activesData;\n\n      if (this._parent) {\n        actives = SelectorEngine.find(SELECTOR_ACTIVES, this._parent).filter(elem => {\n          if (typeof this._config.parent === 'string') {\n            return elem.getAttribute('data-bs-parent') === this._config.parent;\n          }\n\n          return elem.classList.contains(CLASS_NAME_COLLAPSE);\n        });\n\n        if (actives.length === 0) {\n          actives = null;\n        }\n      }\n\n      const container = SelectorEngine.findOne(this._selector);\n\n      if (actives) {\n        const tempActiveData = actives.find(elem => container !== elem);\n        activesData = tempActiveData ? Collapse.getInstance(tempActiveData) : null;\n\n        if (activesData && activesData._isTransitioning) {\n          return;\n        }\n      }\n\n      const startEvent = EventHandler.trigger(this._element, EVENT_SHOW$5);\n\n      if (startEvent.defaultPrevented) {\n        return;\n      }\n\n      if (actives) {\n        actives.forEach(elemActive => {\n          if (container !== elemActive) {\n            Collapse.collapseInterface(elemActive, 'hide');\n          }\n\n          if (!activesData) {\n            Data.set(elemActive, DATA_KEY$8, null);\n          }\n        });\n      }\n\n      const dimension = this._getDimension();\n\n      this._element.classList.remove(CLASS_NAME_COLLAPSE);\n\n      this._element.classList.add(CLASS_NAME_COLLAPSING);\n\n      this._element.style[dimension] = 0;\n\n      if (this._triggerArray.length) {\n        this._triggerArray.forEach(element => {\n          element.classList.remove(CLASS_NAME_COLLAPSED);\n          element.setAttribute('aria-expanded', true);\n        });\n      }\n\n      this.setTransitioning(true);\n\n      const complete = () => {\n        this._element.classList.remove(CLASS_NAME_COLLAPSING);\n\n        this._element.classList.add(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$8);\n\n        this._element.style[dimension] = '';\n        this.setTransitioning(false);\n        EventHandler.trigger(this._element, EVENT_SHOWN$5);\n      };\n\n      const capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1);\n      const scrollSize = `scroll${capitalizedDimension}`;\n\n      this._queueCallback(complete, this._element, true);\n\n      this._element.style[dimension] = `${this._element[scrollSize]}px`;\n    }\n\n    hide() {\n      if (this._isTransitioning || !this._element.classList.contains(CLASS_NAME_SHOW$8)) {\n        return;\n      }\n\n      const startEvent = EventHandler.trigger(this._element, EVENT_HIDE$5);\n\n      if (startEvent.defaultPrevented) {\n        return;\n      }\n\n      const dimension = this._getDimension();\n\n      this._element.style[dimension] = `${this._element.getBoundingClientRect()[dimension]}px`;\n      reflow(this._element);\n\n      this._element.classList.add(CLASS_NAME_COLLAPSING);\n\n      this._element.classList.remove(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$8);\n\n      const triggerArrayLength = this._triggerArray.length;\n\n      if (triggerArrayLength > 0) {\n        for (let i = 0; i < triggerArrayLength; i++) {\n          const trigger = this._triggerArray[i];\n          const elem = getElementFromSelector(trigger);\n\n          if (elem && !elem.classList.contains(CLASS_NAME_SHOW$8)) {\n            trigger.classList.add(CLASS_NAME_COLLAPSED);\n            trigger.setAttribute('aria-expanded', false);\n          }\n        }\n      }\n\n      this.setTransitioning(true);\n\n      const complete = () => {\n        this.setTransitioning(false);\n\n        this._element.classList.remove(CLASS_NAME_COLLAPSING);\n\n        this._element.classList.add(CLASS_NAME_COLLAPSE);\n\n        EventHandler.trigger(this._element, EVENT_HIDDEN$5);\n      };\n\n      this._element.style[dimension] = '';\n\n      this._queueCallback(complete, this._element, true);\n    }\n\n    setTransitioning(isTransitioning) {\n      this._isTransitioning = isTransitioning;\n    } // Private\n\n\n    _getConfig(config) {\n      config = { ...Default$8,\n        ...config\n      };\n      config.toggle = Boolean(config.toggle); // Coerce string values\n\n      typeCheckConfig(NAME$9, config, DefaultType$8);\n      return config;\n    }\n\n    _getDimension() {\n      return this._element.classList.contains(WIDTH) ? WIDTH : HEIGHT;\n    }\n\n    _getParent() {\n      let {\n        parent\n      } = this._config;\n      parent = getElement(parent);\n      const selector = `${SELECTOR_DATA_TOGGLE$4}[data-bs-parent=\"${parent}\"]`;\n      SelectorEngine.find(selector, parent).forEach(element => {\n        const selected = getElementFromSelector(element);\n\n        this._addAriaAndCollapsedClass(selected, [element]);\n      });\n      return parent;\n    }\n\n    _addAriaAndCollapsedClass(element, triggerArray) {\n      if (!element || !triggerArray.length) {\n        return;\n      }\n\n      const isOpen = element.classList.contains(CLASS_NAME_SHOW$8);\n      triggerArray.forEach(elem => {\n        if (isOpen) {\n          elem.classList.remove(CLASS_NAME_COLLAPSED);\n        } else {\n          elem.classList.add(CLASS_NAME_COLLAPSED);\n        }\n\n        elem.setAttribute('aria-expanded', isOpen);\n      });\n    } // Static\n\n\n    static collapseInterface(element, config) {\n      let data = Collapse.getInstance(element);\n      const _config = { ...Default$8,\n        ...Manipulator.getDataAttributes(element),\n        ...(typeof config === 'object' && config ? config : {})\n      };\n\n      if (!data && _config.toggle && typeof config === 'string' && /show|hide/.test(config)) {\n        _config.toggle = false;\n      }\n\n      if (!data) {\n        data = new Collapse(element, _config);\n      }\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config]();\n      }\n    }\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        Collapse.collapseInterface(this, config);\n      });\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(document, EVENT_CLICK_DATA_API$4, SELECTOR_DATA_TOGGLE$4, function (event) {\n    // preventDefault only for <a> elements (which change the URL) not inside the collapsible element\n    if (event.target.tagName === 'A' || event.delegateTarget && event.delegateTarget.tagName === 'A') {\n      event.preventDefault();\n    }\n\n    const triggerData = Manipulator.getDataAttributes(this);\n    const selector = getSelectorFromElement(this);\n    const selectorElements = SelectorEngine.find(selector);\n    selectorElements.forEach(element => {\n      const data = Collapse.getInstance(element);\n      let config;\n\n      if (data) {\n        // update parent attribute\n        if (data._parent === null && typeof triggerData.parent === 'string') {\n          data._config.parent = triggerData.parent;\n          data._parent = data._getParent();\n        }\n\n        config = 'toggle';\n      } else {\n        config = triggerData;\n      }\n\n      Collapse.collapseInterface(element, config);\n    });\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Collapse to jQuery only if jQuery is present\n   */\n\n  defineJQueryPlugin(Collapse);\n\n  var top = 'top';\n  var bottom = 'bottom';\n  var right = 'right';\n  var left = 'left';\n  var auto = 'auto';\n  var basePlacements = [top, bottom, right, left];\n  var start = 'start';\n  var end = 'end';\n  var clippingParents = 'clippingParents';\n  var viewport = 'viewport';\n  var popper = 'popper';\n  var reference = 'reference';\n  var variationPlacements = /*#__PURE__*/basePlacements.reduce(function (acc, placement) {\n    return acc.concat([placement + \"-\" + start, placement + \"-\" + end]);\n  }, []);\n  var placements = /*#__PURE__*/[].concat(basePlacements, [auto]).reduce(function (acc, placement) {\n    return acc.concat([placement, placement + \"-\" + start, placement + \"-\" + end]);\n  }, []); // modifiers that need to read the DOM\n\n  var beforeRead = 'beforeRead';\n  var read = 'read';\n  var afterRead = 'afterRead'; // pure-logic modifiers\n\n  var beforeMain = 'beforeMain';\n  var main = 'main';\n  var afterMain = 'afterMain'; // modifier with the purpose to write to the DOM (or write into a framework state)\n\n  var beforeWrite = 'beforeWrite';\n  var write = 'write';\n  var afterWrite = 'afterWrite';\n  var modifierPhases = [beforeRead, read, afterRead, beforeMain, main, afterMain, beforeWrite, write, afterWrite];\n\n  function getNodeName(element) {\n    return element ? (element.nodeName || '').toLowerCase() : null;\n  }\n\n  function getWindow(node) {\n    if (node == null) {\n      return window;\n    }\n\n    if (node.toString() !== '[object Window]') {\n      var ownerDocument = node.ownerDocument;\n      return ownerDocument ? ownerDocument.defaultView || window : window;\n    }\n\n    return node;\n  }\n\n  function isElement(node) {\n    var OwnElement = getWindow(node).Element;\n    return node instanceof OwnElement || node instanceof Element;\n  }\n\n  function isHTMLElement(node) {\n    var OwnElement = getWindow(node).HTMLElement;\n    return node instanceof OwnElement || node instanceof HTMLElement;\n  }\n\n  function isShadowRoot(node) {\n    // IE 11 has no ShadowRoot\n    if (typeof ShadowRoot === 'undefined') {\n      return false;\n    }\n\n    var OwnElement = getWindow(node).ShadowRoot;\n    return node instanceof OwnElement || node instanceof ShadowRoot;\n  }\n\n  // and applies them to the HTMLElements such as popper and arrow\n\n  function applyStyles(_ref) {\n    var state = _ref.state;\n    Object.keys(state.elements).forEach(function (name) {\n      var style = state.styles[name] || {};\n      var attributes = state.attributes[name] || {};\n      var element = state.elements[name]; // arrow is optional + virtual elements\n\n      if (!isHTMLElement(element) || !getNodeName(element)) {\n        return;\n      } // Flow doesn't support to extend this property, but it's the most\n      // effective way to apply styles to an HTMLElement\n      // $FlowFixMe[cannot-write]\n\n\n      Object.assign(element.style, style);\n      Object.keys(attributes).forEach(function (name) {\n        var value = attributes[name];\n\n        if (value === false) {\n          element.removeAttribute(name);\n        } else {\n          element.setAttribute(name, value === true ? '' : value);\n        }\n      });\n    });\n  }\n\n  function effect$2(_ref2) {\n    var state = _ref2.state;\n    var initialStyles = {\n      popper: {\n        position: state.options.strategy,\n        left: '0',\n        top: '0',\n        margin: '0'\n      },\n      arrow: {\n        position: 'absolute'\n      },\n      reference: {}\n    };\n    Object.assign(state.elements.popper.style, initialStyles.popper);\n    state.styles = initialStyles;\n\n    if (state.elements.arrow) {\n      Object.assign(state.elements.arrow.style, initialStyles.arrow);\n    }\n\n    return function () {\n      Object.keys(state.elements).forEach(function (name) {\n        var element = state.elements[name];\n        var attributes = state.attributes[name] || {};\n        var styleProperties = Object.keys(state.styles.hasOwnProperty(name) ? state.styles[name] : initialStyles[name]); // Set all values to an empty string to unset them\n\n        var style = styleProperties.reduce(function (style, property) {\n          style[property] = '';\n          return style;\n        }, {}); // arrow is optional + virtual elements\n\n        if (!isHTMLElement(element) || !getNodeName(element)) {\n          return;\n        }\n\n        Object.assign(element.style, style);\n        Object.keys(attributes).forEach(function (attribute) {\n          element.removeAttribute(attribute);\n        });\n      });\n    };\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  var applyStyles$1 = {\n    name: 'applyStyles',\n    enabled: true,\n    phase: 'write',\n    fn: applyStyles,\n    effect: effect$2,\n    requires: ['computeStyles']\n  };\n\n  function getBasePlacement(placement) {\n    return placement.split('-')[0];\n  }\n\n  function getBoundingClientRect(element) {\n    var rect = element.getBoundingClientRect();\n    return {\n      width: rect.width,\n      height: rect.height,\n      top: rect.top,\n      right: rect.right,\n      bottom: rect.bottom,\n      left: rect.left,\n      x: rect.left,\n      y: rect.top\n    };\n  }\n\n  // means it doesn't take into account transforms.\n\n  function getLayoutRect(element) {\n    var clientRect = getBoundingClientRect(element); // Use the clientRect sizes if it's not been transformed.\n    // Fixes https://github.com/popperjs/popper-core/issues/1223\n\n    var width = element.offsetWidth;\n    var height = element.offsetHeight;\n\n    if (Math.abs(clientRect.width - width) <= 1) {\n      width = clientRect.width;\n    }\n\n    if (Math.abs(clientRect.height - height) <= 1) {\n      height = clientRect.height;\n    }\n\n    return {\n      x: element.offsetLeft,\n      y: element.offsetTop,\n      width: width,\n      height: height\n    };\n  }\n\n  function contains(parent, child) {\n    var rootNode = child.getRootNode && child.getRootNode(); // First, attempt with faster native method\n\n    if (parent.contains(child)) {\n      return true;\n    } // then fallback to custom implementation with Shadow DOM support\n    else if (rootNode && isShadowRoot(rootNode)) {\n        var next = child;\n\n        do {\n          if (next && parent.isSameNode(next)) {\n            return true;\n          } // $FlowFixMe[prop-missing]: need a better way to handle this...\n\n\n          next = next.parentNode || next.host;\n        } while (next);\n      } // Give up, the result is false\n\n\n    return false;\n  }\n\n  function getComputedStyle$1(element) {\n    return getWindow(element).getComputedStyle(element);\n  }\n\n  function isTableElement(element) {\n    return ['table', 'td', 'th'].indexOf(getNodeName(element)) >= 0;\n  }\n\n  function getDocumentElement(element) {\n    // $FlowFixMe[incompatible-return]: assume body is always available\n    return ((isElement(element) ? element.ownerDocument : // $FlowFixMe[prop-missing]\n    element.document) || window.document).documentElement;\n  }\n\n  function getParentNode(element) {\n    if (getNodeName(element) === 'html') {\n      return element;\n    }\n\n    return (// this is a quicker (but less type safe) way to save quite some bytes from the bundle\n      // $FlowFixMe[incompatible-return]\n      // $FlowFixMe[prop-missing]\n      element.assignedSlot || // step into the shadow DOM of the parent of a slotted node\n      element.parentNode || ( // DOM Element detected\n      isShadowRoot(element) ? element.host : null) || // ShadowRoot detected\n      // $FlowFixMe[incompatible-call]: HTMLElement is a Node\n      getDocumentElement(element) // fallback\n\n    );\n  }\n\n  function getTrueOffsetParent(element) {\n    if (!isHTMLElement(element) || // https://github.com/popperjs/popper-core/issues/837\n    getComputedStyle$1(element).position === 'fixed') {\n      return null;\n    }\n\n    return element.offsetParent;\n  } // `.offsetParent` reports `null` for fixed elements, while absolute elements\n  // return the containing block\n\n\n  function getContainingBlock(element) {\n    var isFirefox = navigator.userAgent.toLowerCase().indexOf('firefox') !== -1;\n    var isIE = navigator.userAgent.indexOf('Trident') !== -1;\n\n    if (isIE && isHTMLElement(element)) {\n      // In IE 9, 10 and 11 fixed elements containing block is always established by the viewport\n      var elementCss = getComputedStyle$1(element);\n\n      if (elementCss.position === 'fixed') {\n        return null;\n      }\n    }\n\n    var currentNode = getParentNode(element);\n\n    while (isHTMLElement(currentNode) && ['html', 'body'].indexOf(getNodeName(currentNode)) < 0) {\n      var css = getComputedStyle$1(currentNode); // This is non-exhaustive but covers the most common CSS properties that\n      // create a containing block.\n      // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n\n      if (css.transform !== 'none' || css.perspective !== 'none' || css.contain === 'paint' || ['transform', 'perspective'].indexOf(css.willChange) !== -1 || isFirefox && css.willChange === 'filter' || isFirefox && css.filter && css.filter !== 'none') {\n        return currentNode;\n      } else {\n        currentNode = currentNode.parentNode;\n      }\n    }\n\n    return null;\n  } // Gets the closest ancestor positioned element. Handles some edge cases,\n  // such as table ancestors and cross browser bugs.\n\n\n  function getOffsetParent(element) {\n    var window = getWindow(element);\n    var offsetParent = getTrueOffsetParent(element);\n\n    while (offsetParent && isTableElement(offsetParent) && getComputedStyle$1(offsetParent).position === 'static') {\n      offsetParent = getTrueOffsetParent(offsetParent);\n    }\n\n    if (offsetParent && (getNodeName(offsetParent) === 'html' || getNodeName(offsetParent) === 'body' && getComputedStyle$1(offsetParent).position === 'static')) {\n      return window;\n    }\n\n    return offsetParent || getContainingBlock(element) || window;\n  }\n\n  function getMainAxisFromPlacement(placement) {\n    return ['top', 'bottom'].indexOf(placement) >= 0 ? 'x' : 'y';\n  }\n\n  var max = Math.max;\n  var min = Math.min;\n  var round = Math.round;\n\n  function within(min$1, value, max$1) {\n    return max(min$1, min(value, max$1));\n  }\n\n  function getFreshSideObject() {\n    return {\n      top: 0,\n      right: 0,\n      bottom: 0,\n      left: 0\n    };\n  }\n\n  function mergePaddingObject(paddingObject) {\n    return Object.assign({}, getFreshSideObject(), paddingObject);\n  }\n\n  function expandToHashMap(value, keys) {\n    return keys.reduce(function (hashMap, key) {\n      hashMap[key] = value;\n      return hashMap;\n    }, {});\n  }\n\n  var toPaddingObject = function toPaddingObject(padding, state) {\n    padding = typeof padding === 'function' ? padding(Object.assign({}, state.rects, {\n      placement: state.placement\n    })) : padding;\n    return mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));\n  };\n\n  function arrow(_ref) {\n    var _state$modifiersData$;\n\n    var state = _ref.state,\n        name = _ref.name,\n        options = _ref.options;\n    var arrowElement = state.elements.arrow;\n    var popperOffsets = state.modifiersData.popperOffsets;\n    var basePlacement = getBasePlacement(state.placement);\n    var axis = getMainAxisFromPlacement(basePlacement);\n    var isVertical = [left, right].indexOf(basePlacement) >= 0;\n    var len = isVertical ? 'height' : 'width';\n\n    if (!arrowElement || !popperOffsets) {\n      return;\n    }\n\n    var paddingObject = toPaddingObject(options.padding, state);\n    var arrowRect = getLayoutRect(arrowElement);\n    var minProp = axis === 'y' ? top : left;\n    var maxProp = axis === 'y' ? bottom : right;\n    var endDiff = state.rects.reference[len] + state.rects.reference[axis] - popperOffsets[axis] - state.rects.popper[len];\n    var startDiff = popperOffsets[axis] - state.rects.reference[axis];\n    var arrowOffsetParent = getOffsetParent(arrowElement);\n    var clientSize = arrowOffsetParent ? axis === 'y' ? arrowOffsetParent.clientHeight || 0 : arrowOffsetParent.clientWidth || 0 : 0;\n    var centerToReference = endDiff / 2 - startDiff / 2; // Make sure the arrow doesn't overflow the popper if the center point is\n    // outside of the popper bounds\n\n    var min = paddingObject[minProp];\n    var max = clientSize - arrowRect[len] - paddingObject[maxProp];\n    var center = clientSize / 2 - arrowRect[len] / 2 + centerToReference;\n    var offset = within(min, center, max); // Prevents breaking syntax highlighting...\n\n    var axisProp = axis;\n    state.modifiersData[name] = (_state$modifiersData$ = {}, _state$modifiersData$[axisProp] = offset, _state$modifiersData$.centerOffset = offset - center, _state$modifiersData$);\n  }\n\n  function effect$1(_ref2) {\n    var state = _ref2.state,\n        options = _ref2.options;\n    var _options$element = options.element,\n        arrowElement = _options$element === void 0 ? '[data-popper-arrow]' : _options$element;\n\n    if (arrowElement == null) {\n      return;\n    } // CSS selector\n\n\n    if (typeof arrowElement === 'string') {\n      arrowElement = state.elements.popper.querySelector(arrowElement);\n\n      if (!arrowElement) {\n        return;\n      }\n    }\n\n    if (!contains(state.elements.popper, arrowElement)) {\n\n      return;\n    }\n\n    state.elements.arrow = arrowElement;\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  var arrow$1 = {\n    name: 'arrow',\n    enabled: true,\n    phase: 'main',\n    fn: arrow,\n    effect: effect$1,\n    requires: ['popperOffsets'],\n    requiresIfExists: ['preventOverflow']\n  };\n\n  var unsetSides = {\n    top: 'auto',\n    right: 'auto',\n    bottom: 'auto',\n    left: 'auto'\n  }; // Round the offsets to the nearest suitable subpixel based on the DPR.\n  // Zooming can change the DPR, but it seems to report a value that will\n  // cleanly divide the values into the appropriate subpixels.\n\n  function roundOffsetsByDPR(_ref) {\n    var x = _ref.x,\n        y = _ref.y;\n    var win = window;\n    var dpr = win.devicePixelRatio || 1;\n    return {\n      x: round(round(x * dpr) / dpr) || 0,\n      y: round(round(y * dpr) / dpr) || 0\n    };\n  }\n\n  function mapToStyles(_ref2) {\n    var _Object$assign2;\n\n    var popper = _ref2.popper,\n        popperRect = _ref2.popperRect,\n        placement = _ref2.placement,\n        offsets = _ref2.offsets,\n        position = _ref2.position,\n        gpuAcceleration = _ref2.gpuAcceleration,\n        adaptive = _ref2.adaptive,\n        roundOffsets = _ref2.roundOffsets;\n\n    var _ref3 = roundOffsets === true ? roundOffsetsByDPR(offsets) : typeof roundOffsets === 'function' ? roundOffsets(offsets) : offsets,\n        _ref3$x = _ref3.x,\n        x = _ref3$x === void 0 ? 0 : _ref3$x,\n        _ref3$y = _ref3.y,\n        y = _ref3$y === void 0 ? 0 : _ref3$y;\n\n    var hasX = offsets.hasOwnProperty('x');\n    var hasY = offsets.hasOwnProperty('y');\n    var sideX = left;\n    var sideY = top;\n    var win = window;\n\n    if (adaptive) {\n      var offsetParent = getOffsetParent(popper);\n      var heightProp = 'clientHeight';\n      var widthProp = 'clientWidth';\n\n      if (offsetParent === getWindow(popper)) {\n        offsetParent = getDocumentElement(popper);\n\n        if (getComputedStyle$1(offsetParent).position !== 'static') {\n          heightProp = 'scrollHeight';\n          widthProp = 'scrollWidth';\n        }\n      } // $FlowFixMe[incompatible-cast]: force type refinement, we compare offsetParent with window above, but Flow doesn't detect it\n\n\n      offsetParent = offsetParent;\n\n      if (placement === top) {\n        sideY = bottom; // $FlowFixMe[prop-missing]\n\n        y -= offsetParent[heightProp] - popperRect.height;\n        y *= gpuAcceleration ? 1 : -1;\n      }\n\n      if (placement === left) {\n        sideX = right; // $FlowFixMe[prop-missing]\n\n        x -= offsetParent[widthProp] - popperRect.width;\n        x *= gpuAcceleration ? 1 : -1;\n      }\n    }\n\n    var commonStyles = Object.assign({\n      position: position\n    }, adaptive && unsetSides);\n\n    if (gpuAcceleration) {\n      var _Object$assign;\n\n      return Object.assign({}, commonStyles, (_Object$assign = {}, _Object$assign[sideY] = hasY ? '0' : '', _Object$assign[sideX] = hasX ? '0' : '', _Object$assign.transform = (win.devicePixelRatio || 1) < 2 ? \"translate(\" + x + \"px, \" + y + \"px)\" : \"translate3d(\" + x + \"px, \" + y + \"px, 0)\", _Object$assign));\n    }\n\n    return Object.assign({}, commonStyles, (_Object$assign2 = {}, _Object$assign2[sideY] = hasY ? y + \"px\" : '', _Object$assign2[sideX] = hasX ? x + \"px\" : '', _Object$assign2.transform = '', _Object$assign2));\n  }\n\n  function computeStyles(_ref4) {\n    var state = _ref4.state,\n        options = _ref4.options;\n    var _options$gpuAccelerat = options.gpuAcceleration,\n        gpuAcceleration = _options$gpuAccelerat === void 0 ? true : _options$gpuAccelerat,\n        _options$adaptive = options.adaptive,\n        adaptive = _options$adaptive === void 0 ? true : _options$adaptive,\n        _options$roundOffsets = options.roundOffsets,\n        roundOffsets = _options$roundOffsets === void 0 ? true : _options$roundOffsets;\n\n    var commonStyles = {\n      placement: getBasePlacement(state.placement),\n      popper: state.elements.popper,\n      popperRect: state.rects.popper,\n      gpuAcceleration: gpuAcceleration\n    };\n\n    if (state.modifiersData.popperOffsets != null) {\n      state.styles.popper = Object.assign({}, state.styles.popper, mapToStyles(Object.assign({}, commonStyles, {\n        offsets: state.modifiersData.popperOffsets,\n        position: state.options.strategy,\n        adaptive: adaptive,\n        roundOffsets: roundOffsets\n      })));\n    }\n\n    if (state.modifiersData.arrow != null) {\n      state.styles.arrow = Object.assign({}, state.styles.arrow, mapToStyles(Object.assign({}, commonStyles, {\n        offsets: state.modifiersData.arrow,\n        position: 'absolute',\n        adaptive: false,\n        roundOffsets: roundOffsets\n      })));\n    }\n\n    state.attributes.popper = Object.assign({}, state.attributes.popper, {\n      'data-popper-placement': state.placement\n    });\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  var computeStyles$1 = {\n    name: 'computeStyles',\n    enabled: true,\n    phase: 'beforeWrite',\n    fn: computeStyles,\n    data: {}\n  };\n\n  var passive = {\n    passive: true\n  };\n\n  function effect(_ref) {\n    var state = _ref.state,\n        instance = _ref.instance,\n        options = _ref.options;\n    var _options$scroll = options.scroll,\n        scroll = _options$scroll === void 0 ? true : _options$scroll,\n        _options$resize = options.resize,\n        resize = _options$resize === void 0 ? true : _options$resize;\n    var window = getWindow(state.elements.popper);\n    var scrollParents = [].concat(state.scrollParents.reference, state.scrollParents.popper);\n\n    if (scroll) {\n      scrollParents.forEach(function (scrollParent) {\n        scrollParent.addEventListener('scroll', instance.update, passive);\n      });\n    }\n\n    if (resize) {\n      window.addEventListener('resize', instance.update, passive);\n    }\n\n    return function () {\n      if (scroll) {\n        scrollParents.forEach(function (scrollParent) {\n          scrollParent.removeEventListener('scroll', instance.update, passive);\n        });\n      }\n\n      if (resize) {\n        window.removeEventListener('resize', instance.update, passive);\n      }\n    };\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  var eventListeners = {\n    name: 'eventListeners',\n    enabled: true,\n    phase: 'write',\n    fn: function fn() {},\n    effect: effect,\n    data: {}\n  };\n\n  var hash$1 = {\n    left: 'right',\n    right: 'left',\n    bottom: 'top',\n    top: 'bottom'\n  };\n  function getOppositePlacement(placement) {\n    return placement.replace(/left|right|bottom|top/g, function (matched) {\n      return hash$1[matched];\n    });\n  }\n\n  var hash = {\n    start: 'end',\n    end: 'start'\n  };\n  function getOppositeVariationPlacement(placement) {\n    return placement.replace(/start|end/g, function (matched) {\n      return hash[matched];\n    });\n  }\n\n  function getWindowScroll(node) {\n    var win = getWindow(node);\n    var scrollLeft = win.pageXOffset;\n    var scrollTop = win.pageYOffset;\n    return {\n      scrollLeft: scrollLeft,\n      scrollTop: scrollTop\n    };\n  }\n\n  function getWindowScrollBarX(element) {\n    // If <html> has a CSS width greater than the viewport, then this will be\n    // incorrect for RTL.\n    // Popper 1 is broken in this case and never had a bug report so let's assume\n    // it's not an issue. I don't think anyone ever specifies width on <html>\n    // anyway.\n    // Browsers where the left scrollbar doesn't cause an issue report `0` for\n    // this (e.g. Edge 2019, IE11, Safari)\n    return getBoundingClientRect(getDocumentElement(element)).left + getWindowScroll(element).scrollLeft;\n  }\n\n  function getViewportRect(element) {\n    var win = getWindow(element);\n    var html = getDocumentElement(element);\n    var visualViewport = win.visualViewport;\n    var width = html.clientWidth;\n    var height = html.clientHeight;\n    var x = 0;\n    var y = 0; // NB: This isn't supported on iOS <= 12. If the keyboard is open, the popper\n    // can be obscured underneath it.\n    // Also, `html.clientHeight` adds the bottom bar height in Safari iOS, even\n    // if it isn't open, so if this isn't available, the popper will be detected\n    // to overflow the bottom of the screen too early.\n\n    if (visualViewport) {\n      width = visualViewport.width;\n      height = visualViewport.height; // Uses Layout Viewport (like Chrome; Safari does not currently)\n      // In Chrome, it returns a value very close to 0 (+/-) but contains rounding\n      // errors due to floating point numbers, so we need to check precision.\n      // Safari returns a number <= 0, usually < -1 when pinch-zoomed\n      // Feature detection fails in mobile emulation mode in Chrome.\n      // Math.abs(win.innerWidth / visualViewport.scale - visualViewport.width) <\n      // 0.001\n      // Fallback here: \"Not Safari\" userAgent\n\n      if (!/^((?!chrome|android).)*safari/i.test(navigator.userAgent)) {\n        x = visualViewport.offsetLeft;\n        y = visualViewport.offsetTop;\n      }\n    }\n\n    return {\n      width: width,\n      height: height,\n      x: x + getWindowScrollBarX(element),\n      y: y\n    };\n  }\n\n  // of the `<html>` and `<body>` rect bounds if horizontally scrollable\n\n  function getDocumentRect(element) {\n    var _element$ownerDocumen;\n\n    var html = getDocumentElement(element);\n    var winScroll = getWindowScroll(element);\n    var body = (_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body;\n    var width = max(html.scrollWidth, html.clientWidth, body ? body.scrollWidth : 0, body ? body.clientWidth : 0);\n    var height = max(html.scrollHeight, html.clientHeight, body ? body.scrollHeight : 0, body ? body.clientHeight : 0);\n    var x = -winScroll.scrollLeft + getWindowScrollBarX(element);\n    var y = -winScroll.scrollTop;\n\n    if (getComputedStyle$1(body || html).direction === 'rtl') {\n      x += max(html.clientWidth, body ? body.clientWidth : 0) - width;\n    }\n\n    return {\n      width: width,\n      height: height,\n      x: x,\n      y: y\n    };\n  }\n\n  function isScrollParent(element) {\n    // Firefox wants us to check `-x` and `-y` variations as well\n    var _getComputedStyle = getComputedStyle$1(element),\n        overflow = _getComputedStyle.overflow,\n        overflowX = _getComputedStyle.overflowX,\n        overflowY = _getComputedStyle.overflowY;\n\n    return /auto|scroll|overlay|hidden/.test(overflow + overflowY + overflowX);\n  }\n\n  function getScrollParent(node) {\n    if (['html', 'body', '#document'].indexOf(getNodeName(node)) >= 0) {\n      // $FlowFixMe[incompatible-return]: assume body is always available\n      return node.ownerDocument.body;\n    }\n\n    if (isHTMLElement(node) && isScrollParent(node)) {\n      return node;\n    }\n\n    return getScrollParent(getParentNode(node));\n  }\n\n  /*\n  given a DOM element, return the list of all scroll parents, up the list of ancesors\n  until we get to the top window object. This list is what we attach scroll listeners\n  to, because if any of these parent elements scroll, we'll need to re-calculate the\n  reference element's position.\n  */\n\n  function listScrollParents(element, list) {\n    var _element$ownerDocumen;\n\n    if (list === void 0) {\n      list = [];\n    }\n\n    var scrollParent = getScrollParent(element);\n    var isBody = scrollParent === ((_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body);\n    var win = getWindow(scrollParent);\n    var target = isBody ? [win].concat(win.visualViewport || [], isScrollParent(scrollParent) ? scrollParent : []) : scrollParent;\n    var updatedList = list.concat(target);\n    return isBody ? updatedList : // $FlowFixMe[incompatible-call]: isBody tells us target will be an HTMLElement here\n    updatedList.concat(listScrollParents(getParentNode(target)));\n  }\n\n  function rectToClientRect(rect) {\n    return Object.assign({}, rect, {\n      left: rect.x,\n      top: rect.y,\n      right: rect.x + rect.width,\n      bottom: rect.y + rect.height\n    });\n  }\n\n  function getInnerBoundingClientRect(element) {\n    var rect = getBoundingClientRect(element);\n    rect.top = rect.top + element.clientTop;\n    rect.left = rect.left + element.clientLeft;\n    rect.bottom = rect.top + element.clientHeight;\n    rect.right = rect.left + element.clientWidth;\n    rect.width = element.clientWidth;\n    rect.height = element.clientHeight;\n    rect.x = rect.left;\n    rect.y = rect.top;\n    return rect;\n  }\n\n  function getClientRectFromMixedType(element, clippingParent) {\n    return clippingParent === viewport ? rectToClientRect(getViewportRect(element)) : isHTMLElement(clippingParent) ? getInnerBoundingClientRect(clippingParent) : rectToClientRect(getDocumentRect(getDocumentElement(element)));\n  } // A \"clipping parent\" is an overflowable container with the characteristic of\n  // clipping (or hiding) overflowing elements with a position different from\n  // `initial`\n\n\n  function getClippingParents(element) {\n    var clippingParents = listScrollParents(getParentNode(element));\n    var canEscapeClipping = ['absolute', 'fixed'].indexOf(getComputedStyle$1(element).position) >= 0;\n    var clipperElement = canEscapeClipping && isHTMLElement(element) ? getOffsetParent(element) : element;\n\n    if (!isElement(clipperElement)) {\n      return [];\n    } // $FlowFixMe[incompatible-return]: https://github.com/facebook/flow/issues/1414\n\n\n    return clippingParents.filter(function (clippingParent) {\n      return isElement(clippingParent) && contains(clippingParent, clipperElement) && getNodeName(clippingParent) !== 'body';\n    });\n  } // Gets the maximum area that the element is visible in due to any number of\n  // clipping parents\n\n\n  function getClippingRect(element, boundary, rootBoundary) {\n    var mainClippingParents = boundary === 'clippingParents' ? getClippingParents(element) : [].concat(boundary);\n    var clippingParents = [].concat(mainClippingParents, [rootBoundary]);\n    var firstClippingParent = clippingParents[0];\n    var clippingRect = clippingParents.reduce(function (accRect, clippingParent) {\n      var rect = getClientRectFromMixedType(element, clippingParent);\n      accRect.top = max(rect.top, accRect.top);\n      accRect.right = min(rect.right, accRect.right);\n      accRect.bottom = min(rect.bottom, accRect.bottom);\n      accRect.left = max(rect.left, accRect.left);\n      return accRect;\n    }, getClientRectFromMixedType(element, firstClippingParent));\n    clippingRect.width = clippingRect.right - clippingRect.left;\n    clippingRect.height = clippingRect.bottom - clippingRect.top;\n    clippingRect.x = clippingRect.left;\n    clippingRect.y = clippingRect.top;\n    return clippingRect;\n  }\n\n  function getVariation(placement) {\n    return placement.split('-')[1];\n  }\n\n  function computeOffsets(_ref) {\n    var reference = _ref.reference,\n        element = _ref.element,\n        placement = _ref.placement;\n    var basePlacement = placement ? getBasePlacement(placement) : null;\n    var variation = placement ? getVariation(placement) : null;\n    var commonX = reference.x + reference.width / 2 - element.width / 2;\n    var commonY = reference.y + reference.height / 2 - element.height / 2;\n    var offsets;\n\n    switch (basePlacement) {\n      case top:\n        offsets = {\n          x: commonX,\n          y: reference.y - element.height\n        };\n        break;\n\n      case bottom:\n        offsets = {\n          x: commonX,\n          y: reference.y + reference.height\n        };\n        break;\n\n      case right:\n        offsets = {\n          x: reference.x + reference.width,\n          y: commonY\n        };\n        break;\n\n      case left:\n        offsets = {\n          x: reference.x - element.width,\n          y: commonY\n        };\n        break;\n\n      default:\n        offsets = {\n          x: reference.x,\n          y: reference.y\n        };\n    }\n\n    var mainAxis = basePlacement ? getMainAxisFromPlacement(basePlacement) : null;\n\n    if (mainAxis != null) {\n      var len = mainAxis === 'y' ? 'height' : 'width';\n\n      switch (variation) {\n        case start:\n          offsets[mainAxis] = offsets[mainAxis] - (reference[len] / 2 - element[len] / 2);\n          break;\n\n        case end:\n          offsets[mainAxis] = offsets[mainAxis] + (reference[len] / 2 - element[len] / 2);\n          break;\n      }\n    }\n\n    return offsets;\n  }\n\n  function detectOverflow(state, options) {\n    if (options === void 0) {\n      options = {};\n    }\n\n    var _options = options,\n        _options$placement = _options.placement,\n        placement = _options$placement === void 0 ? state.placement : _options$placement,\n        _options$boundary = _options.boundary,\n        boundary = _options$boundary === void 0 ? clippingParents : _options$boundary,\n        _options$rootBoundary = _options.rootBoundary,\n        rootBoundary = _options$rootBoundary === void 0 ? viewport : _options$rootBoundary,\n        _options$elementConte = _options.elementContext,\n        elementContext = _options$elementConte === void 0 ? popper : _options$elementConte,\n        _options$altBoundary = _options.altBoundary,\n        altBoundary = _options$altBoundary === void 0 ? false : _options$altBoundary,\n        _options$padding = _options.padding,\n        padding = _options$padding === void 0 ? 0 : _options$padding;\n    var paddingObject = mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));\n    var altContext = elementContext === popper ? reference : popper;\n    var referenceElement = state.elements.reference;\n    var popperRect = state.rects.popper;\n    var element = state.elements[altBoundary ? altContext : elementContext];\n    var clippingClientRect = getClippingRect(isElement(element) ? element : element.contextElement || getDocumentElement(state.elements.popper), boundary, rootBoundary);\n    var referenceClientRect = getBoundingClientRect(referenceElement);\n    var popperOffsets = computeOffsets({\n      reference: referenceClientRect,\n      element: popperRect,\n      strategy: 'absolute',\n      placement: placement\n    });\n    var popperClientRect = rectToClientRect(Object.assign({}, popperRect, popperOffsets));\n    var elementClientRect = elementContext === popper ? popperClientRect : referenceClientRect; // positive = overflowing the clipping rect\n    // 0 or negative = within the clipping rect\n\n    var overflowOffsets = {\n      top: clippingClientRect.top - elementClientRect.top + paddingObject.top,\n      bottom: elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom,\n      left: clippingClientRect.left - elementClientRect.left + paddingObject.left,\n      right: elementClientRect.right - clippingClientRect.right + paddingObject.right\n    };\n    var offsetData = state.modifiersData.offset; // Offsets can be applied only to the popper element\n\n    if (elementContext === popper && offsetData) {\n      var offset = offsetData[placement];\n      Object.keys(overflowOffsets).forEach(function (key) {\n        var multiply = [right, bottom].indexOf(key) >= 0 ? 1 : -1;\n        var axis = [top, bottom].indexOf(key) >= 0 ? 'y' : 'x';\n        overflowOffsets[key] += offset[axis] * multiply;\n      });\n    }\n\n    return overflowOffsets;\n  }\n\n  function computeAutoPlacement(state, options) {\n    if (options === void 0) {\n      options = {};\n    }\n\n    var _options = options,\n        placement = _options.placement,\n        boundary = _options.boundary,\n        rootBoundary = _options.rootBoundary,\n        padding = _options.padding,\n        flipVariations = _options.flipVariations,\n        _options$allowedAutoP = _options.allowedAutoPlacements,\n        allowedAutoPlacements = _options$allowedAutoP === void 0 ? placements : _options$allowedAutoP;\n    var variation = getVariation(placement);\n    var placements$1 = variation ? flipVariations ? variationPlacements : variationPlacements.filter(function (placement) {\n      return getVariation(placement) === variation;\n    }) : basePlacements;\n    var allowedPlacements = placements$1.filter(function (placement) {\n      return allowedAutoPlacements.indexOf(placement) >= 0;\n    });\n\n    if (allowedPlacements.length === 0) {\n      allowedPlacements = placements$1;\n    } // $FlowFixMe[incompatible-type]: Flow seems to have problems with two array unions...\n\n\n    var overflows = allowedPlacements.reduce(function (acc, placement) {\n      acc[placement] = detectOverflow(state, {\n        placement: placement,\n        boundary: boundary,\n        rootBoundary: rootBoundary,\n        padding: padding\n      })[getBasePlacement(placement)];\n      return acc;\n    }, {});\n    return Object.keys(overflows).sort(function (a, b) {\n      return overflows[a] - overflows[b];\n    });\n  }\n\n  function getExpandedFallbackPlacements(placement) {\n    if (getBasePlacement(placement) === auto) {\n      return [];\n    }\n\n    var oppositePlacement = getOppositePlacement(placement);\n    return [getOppositeVariationPlacement(placement), oppositePlacement, getOppositeVariationPlacement(oppositePlacement)];\n  }\n\n  function flip(_ref) {\n    var state = _ref.state,\n        options = _ref.options,\n        name = _ref.name;\n\n    if (state.modifiersData[name]._skip) {\n      return;\n    }\n\n    var _options$mainAxis = options.mainAxis,\n        checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\n        _options$altAxis = options.altAxis,\n        checkAltAxis = _options$altAxis === void 0 ? true : _options$altAxis,\n        specifiedFallbackPlacements = options.fallbackPlacements,\n        padding = options.padding,\n        boundary = options.boundary,\n        rootBoundary = options.rootBoundary,\n        altBoundary = options.altBoundary,\n        _options$flipVariatio = options.flipVariations,\n        flipVariations = _options$flipVariatio === void 0 ? true : _options$flipVariatio,\n        allowedAutoPlacements = options.allowedAutoPlacements;\n    var preferredPlacement = state.options.placement;\n    var basePlacement = getBasePlacement(preferredPlacement);\n    var isBasePlacement = basePlacement === preferredPlacement;\n    var fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipVariations ? [getOppositePlacement(preferredPlacement)] : getExpandedFallbackPlacements(preferredPlacement));\n    var placements = [preferredPlacement].concat(fallbackPlacements).reduce(function (acc, placement) {\n      return acc.concat(getBasePlacement(placement) === auto ? computeAutoPlacement(state, {\n        placement: placement,\n        boundary: boundary,\n        rootBoundary: rootBoundary,\n        padding: padding,\n        flipVariations: flipVariations,\n        allowedAutoPlacements: allowedAutoPlacements\n      }) : placement);\n    }, []);\n    var referenceRect = state.rects.reference;\n    var popperRect = state.rects.popper;\n    var checksMap = new Map();\n    var makeFallbackChecks = true;\n    var firstFittingPlacement = placements[0];\n\n    for (var i = 0; i < placements.length; i++) {\n      var placement = placements[i];\n\n      var _basePlacement = getBasePlacement(placement);\n\n      var isStartVariation = getVariation(placement) === start;\n      var isVertical = [top, bottom].indexOf(_basePlacement) >= 0;\n      var len = isVertical ? 'width' : 'height';\n      var overflow = detectOverflow(state, {\n        placement: placement,\n        boundary: boundary,\n        rootBoundary: rootBoundary,\n        altBoundary: altBoundary,\n        padding: padding\n      });\n      var mainVariationSide = isVertical ? isStartVariation ? right : left : isStartVariation ? bottom : top;\n\n      if (referenceRect[len] > popperRect[len]) {\n        mainVariationSide = getOppositePlacement(mainVariationSide);\n      }\n\n      var altVariationSide = getOppositePlacement(mainVariationSide);\n      var checks = [];\n\n      if (checkMainAxis) {\n        checks.push(overflow[_basePlacement] <= 0);\n      }\n\n      if (checkAltAxis) {\n        checks.push(overflow[mainVariationSide] <= 0, overflow[altVariationSide] <= 0);\n      }\n\n      if (checks.every(function (check) {\n        return check;\n      })) {\n        firstFittingPlacement = placement;\n        makeFallbackChecks = false;\n        break;\n      }\n\n      checksMap.set(placement, checks);\n    }\n\n    if (makeFallbackChecks) {\n      // `2` may be desired in some cases – research later\n      var numberOfChecks = flipVariations ? 3 : 1;\n\n      var _loop = function _loop(_i) {\n        var fittingPlacement = placements.find(function (placement) {\n          var checks = checksMap.get(placement);\n\n          if (checks) {\n            return checks.slice(0, _i).every(function (check) {\n              return check;\n            });\n          }\n        });\n\n        if (fittingPlacement) {\n          firstFittingPlacement = fittingPlacement;\n          return \"break\";\n        }\n      };\n\n      for (var _i = numberOfChecks; _i > 0; _i--) {\n        var _ret = _loop(_i);\n\n        if (_ret === \"break\") break;\n      }\n    }\n\n    if (state.placement !== firstFittingPlacement) {\n      state.modifiersData[name]._skip = true;\n      state.placement = firstFittingPlacement;\n      state.reset = true;\n    }\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  var flip$1 = {\n    name: 'flip',\n    enabled: true,\n    phase: 'main',\n    fn: flip,\n    requiresIfExists: ['offset'],\n    data: {\n      _skip: false\n    }\n  };\n\n  function getSideOffsets(overflow, rect, preventedOffsets) {\n    if (preventedOffsets === void 0) {\n      preventedOffsets = {\n        x: 0,\n        y: 0\n      };\n    }\n\n    return {\n      top: overflow.top - rect.height - preventedOffsets.y,\n      right: overflow.right - rect.width + preventedOffsets.x,\n      bottom: overflow.bottom - rect.height + preventedOffsets.y,\n      left: overflow.left - rect.width - preventedOffsets.x\n    };\n  }\n\n  function isAnySideFullyClipped(overflow) {\n    return [top, right, bottom, left].some(function (side) {\n      return overflow[side] >= 0;\n    });\n  }\n\n  function hide(_ref) {\n    var state = _ref.state,\n        name = _ref.name;\n    var referenceRect = state.rects.reference;\n    var popperRect = state.rects.popper;\n    var preventedOffsets = state.modifiersData.preventOverflow;\n    var referenceOverflow = detectOverflow(state, {\n      elementContext: 'reference'\n    });\n    var popperAltOverflow = detectOverflow(state, {\n      altBoundary: true\n    });\n    var referenceClippingOffsets = getSideOffsets(referenceOverflow, referenceRect);\n    var popperEscapeOffsets = getSideOffsets(popperAltOverflow, popperRect, preventedOffsets);\n    var isReferenceHidden = isAnySideFullyClipped(referenceClippingOffsets);\n    var hasPopperEscaped = isAnySideFullyClipped(popperEscapeOffsets);\n    state.modifiersData[name] = {\n      referenceClippingOffsets: referenceClippingOffsets,\n      popperEscapeOffsets: popperEscapeOffsets,\n      isReferenceHidden: isReferenceHidden,\n      hasPopperEscaped: hasPopperEscaped\n    };\n    state.attributes.popper = Object.assign({}, state.attributes.popper, {\n      'data-popper-reference-hidden': isReferenceHidden,\n      'data-popper-escaped': hasPopperEscaped\n    });\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  var hide$1 = {\n    name: 'hide',\n    enabled: true,\n    phase: 'main',\n    requiresIfExists: ['preventOverflow'],\n    fn: hide\n  };\n\n  function distanceAndSkiddingToXY(placement, rects, offset) {\n    var basePlacement = getBasePlacement(placement);\n    var invertDistance = [left, top].indexOf(basePlacement) >= 0 ? -1 : 1;\n\n    var _ref = typeof offset === 'function' ? offset(Object.assign({}, rects, {\n      placement: placement\n    })) : offset,\n        skidding = _ref[0],\n        distance = _ref[1];\n\n    skidding = skidding || 0;\n    distance = (distance || 0) * invertDistance;\n    return [left, right].indexOf(basePlacement) >= 0 ? {\n      x: distance,\n      y: skidding\n    } : {\n      x: skidding,\n      y: distance\n    };\n  }\n\n  function offset(_ref2) {\n    var state = _ref2.state,\n        options = _ref2.options,\n        name = _ref2.name;\n    var _options$offset = options.offset,\n        offset = _options$offset === void 0 ? [0, 0] : _options$offset;\n    var data = placements.reduce(function (acc, placement) {\n      acc[placement] = distanceAndSkiddingToXY(placement, state.rects, offset);\n      return acc;\n    }, {});\n    var _data$state$placement = data[state.placement],\n        x = _data$state$placement.x,\n        y = _data$state$placement.y;\n\n    if (state.modifiersData.popperOffsets != null) {\n      state.modifiersData.popperOffsets.x += x;\n      state.modifiersData.popperOffsets.y += y;\n    }\n\n    state.modifiersData[name] = data;\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  var offset$1 = {\n    name: 'offset',\n    enabled: true,\n    phase: 'main',\n    requires: ['popperOffsets'],\n    fn: offset\n  };\n\n  function popperOffsets(_ref) {\n    var state = _ref.state,\n        name = _ref.name;\n    // Offsets are the actual position the popper needs to have to be\n    // properly positioned near its reference element\n    // This is the most basic placement, and will be adjusted by\n    // the modifiers in the next step\n    state.modifiersData[name] = computeOffsets({\n      reference: state.rects.reference,\n      element: state.rects.popper,\n      strategy: 'absolute',\n      placement: state.placement\n    });\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  var popperOffsets$1 = {\n    name: 'popperOffsets',\n    enabled: true,\n    phase: 'read',\n    fn: popperOffsets,\n    data: {}\n  };\n\n  function getAltAxis(axis) {\n    return axis === 'x' ? 'y' : 'x';\n  }\n\n  function preventOverflow(_ref) {\n    var state = _ref.state,\n        options = _ref.options,\n        name = _ref.name;\n    var _options$mainAxis = options.mainAxis,\n        checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\n        _options$altAxis = options.altAxis,\n        checkAltAxis = _options$altAxis === void 0 ? false : _options$altAxis,\n        boundary = options.boundary,\n        rootBoundary = options.rootBoundary,\n        altBoundary = options.altBoundary,\n        padding = options.padding,\n        _options$tether = options.tether,\n        tether = _options$tether === void 0 ? true : _options$tether,\n        _options$tetherOffset = options.tetherOffset,\n        tetherOffset = _options$tetherOffset === void 0 ? 0 : _options$tetherOffset;\n    var overflow = detectOverflow(state, {\n      boundary: boundary,\n      rootBoundary: rootBoundary,\n      padding: padding,\n      altBoundary: altBoundary\n    });\n    var basePlacement = getBasePlacement(state.placement);\n    var variation = getVariation(state.placement);\n    var isBasePlacement = !variation;\n    var mainAxis = getMainAxisFromPlacement(basePlacement);\n    var altAxis = getAltAxis(mainAxis);\n    var popperOffsets = state.modifiersData.popperOffsets;\n    var referenceRect = state.rects.reference;\n    var popperRect = state.rects.popper;\n    var tetherOffsetValue = typeof tetherOffset === 'function' ? tetherOffset(Object.assign({}, state.rects, {\n      placement: state.placement\n    })) : tetherOffset;\n    var data = {\n      x: 0,\n      y: 0\n    };\n\n    if (!popperOffsets) {\n      return;\n    }\n\n    if (checkMainAxis || checkAltAxis) {\n      var mainSide = mainAxis === 'y' ? top : left;\n      var altSide = mainAxis === 'y' ? bottom : right;\n      var len = mainAxis === 'y' ? 'height' : 'width';\n      var offset = popperOffsets[mainAxis];\n      var min$1 = popperOffsets[mainAxis] + overflow[mainSide];\n      var max$1 = popperOffsets[mainAxis] - overflow[altSide];\n      var additive = tether ? -popperRect[len] / 2 : 0;\n      var minLen = variation === start ? referenceRect[len] : popperRect[len];\n      var maxLen = variation === start ? -popperRect[len] : -referenceRect[len]; // We need to include the arrow in the calculation so the arrow doesn't go\n      // outside the reference bounds\n\n      var arrowElement = state.elements.arrow;\n      var arrowRect = tether && arrowElement ? getLayoutRect(arrowElement) : {\n        width: 0,\n        height: 0\n      };\n      var arrowPaddingObject = state.modifiersData['arrow#persistent'] ? state.modifiersData['arrow#persistent'].padding : getFreshSideObject();\n      var arrowPaddingMin = arrowPaddingObject[mainSide];\n      var arrowPaddingMax = arrowPaddingObject[altSide]; // If the reference length is smaller than the arrow length, we don't want\n      // to include its full size in the calculation. If the reference is small\n      // and near the edge of a boundary, the popper can overflow even if the\n      // reference is not overflowing as well (e.g. virtual elements with no\n      // width or height)\n\n      var arrowLen = within(0, referenceRect[len], arrowRect[len]);\n      var minOffset = isBasePlacement ? referenceRect[len] / 2 - additive - arrowLen - arrowPaddingMin - tetherOffsetValue : minLen - arrowLen - arrowPaddingMin - tetherOffsetValue;\n      var maxOffset = isBasePlacement ? -referenceRect[len] / 2 + additive + arrowLen + arrowPaddingMax + tetherOffsetValue : maxLen + arrowLen + arrowPaddingMax + tetherOffsetValue;\n      var arrowOffsetParent = state.elements.arrow && getOffsetParent(state.elements.arrow);\n      var clientOffset = arrowOffsetParent ? mainAxis === 'y' ? arrowOffsetParent.clientTop || 0 : arrowOffsetParent.clientLeft || 0 : 0;\n      var offsetModifierValue = state.modifiersData.offset ? state.modifiersData.offset[state.placement][mainAxis] : 0;\n      var tetherMin = popperOffsets[mainAxis] + minOffset - offsetModifierValue - clientOffset;\n      var tetherMax = popperOffsets[mainAxis] + maxOffset - offsetModifierValue;\n\n      if (checkMainAxis) {\n        var preventedOffset = within(tether ? min(min$1, tetherMin) : min$1, offset, tether ? max(max$1, tetherMax) : max$1);\n        popperOffsets[mainAxis] = preventedOffset;\n        data[mainAxis] = preventedOffset - offset;\n      }\n\n      if (checkAltAxis) {\n        var _mainSide = mainAxis === 'x' ? top : left;\n\n        var _altSide = mainAxis === 'x' ? bottom : right;\n\n        var _offset = popperOffsets[altAxis];\n\n        var _min = _offset + overflow[_mainSide];\n\n        var _max = _offset - overflow[_altSide];\n\n        var _preventedOffset = within(tether ? min(_min, tetherMin) : _min, _offset, tether ? max(_max, tetherMax) : _max);\n\n        popperOffsets[altAxis] = _preventedOffset;\n        data[altAxis] = _preventedOffset - _offset;\n      }\n    }\n\n    state.modifiersData[name] = data;\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  var preventOverflow$1 = {\n    name: 'preventOverflow',\n    enabled: true,\n    phase: 'main',\n    fn: preventOverflow,\n    requiresIfExists: ['offset']\n  };\n\n  function getHTMLElementScroll(element) {\n    return {\n      scrollLeft: element.scrollLeft,\n      scrollTop: element.scrollTop\n    };\n  }\n\n  function getNodeScroll(node) {\n    if (node === getWindow(node) || !isHTMLElement(node)) {\n      return getWindowScroll(node);\n    } else {\n      return getHTMLElementScroll(node);\n    }\n  }\n\n  // Composite means it takes into account transforms as well as layout.\n\n  function getCompositeRect(elementOrVirtualElement, offsetParent, isFixed) {\n    if (isFixed === void 0) {\n      isFixed = false;\n    }\n\n    var documentElement = getDocumentElement(offsetParent);\n    var rect = getBoundingClientRect(elementOrVirtualElement);\n    var isOffsetParentAnElement = isHTMLElement(offsetParent);\n    var scroll = {\n      scrollLeft: 0,\n      scrollTop: 0\n    };\n    var offsets = {\n      x: 0,\n      y: 0\n    };\n\n    if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {\n      if (getNodeName(offsetParent) !== 'body' || // https://github.com/popperjs/popper-core/issues/1078\n      isScrollParent(documentElement)) {\n        scroll = getNodeScroll(offsetParent);\n      }\n\n      if (isHTMLElement(offsetParent)) {\n        offsets = getBoundingClientRect(offsetParent);\n        offsets.x += offsetParent.clientLeft;\n        offsets.y += offsetParent.clientTop;\n      } else if (documentElement) {\n        offsets.x = getWindowScrollBarX(documentElement);\n      }\n    }\n\n    return {\n      x: rect.left + scroll.scrollLeft - offsets.x,\n      y: rect.top + scroll.scrollTop - offsets.y,\n      width: rect.width,\n      height: rect.height\n    };\n  }\n\n  function order(modifiers) {\n    var map = new Map();\n    var visited = new Set();\n    var result = [];\n    modifiers.forEach(function (modifier) {\n      map.set(modifier.name, modifier);\n    }); // On visiting object, check for its dependencies and visit them recursively\n\n    function sort(modifier) {\n      visited.add(modifier.name);\n      var requires = [].concat(modifier.requires || [], modifier.requiresIfExists || []);\n      requires.forEach(function (dep) {\n        if (!visited.has(dep)) {\n          var depModifier = map.get(dep);\n\n          if (depModifier) {\n            sort(depModifier);\n          }\n        }\n      });\n      result.push(modifier);\n    }\n\n    modifiers.forEach(function (modifier) {\n      if (!visited.has(modifier.name)) {\n        // check for visited object\n        sort(modifier);\n      }\n    });\n    return result;\n  }\n\n  function orderModifiers(modifiers) {\n    // order based on dependencies\n    var orderedModifiers = order(modifiers); // order based on phase\n\n    return modifierPhases.reduce(function (acc, phase) {\n      return acc.concat(orderedModifiers.filter(function (modifier) {\n        return modifier.phase === phase;\n      }));\n    }, []);\n  }\n\n  function debounce(fn) {\n    var pending;\n    return function () {\n      if (!pending) {\n        pending = new Promise(function (resolve) {\n          Promise.resolve().then(function () {\n            pending = undefined;\n            resolve(fn());\n          });\n        });\n      }\n\n      return pending;\n    };\n  }\n\n  function mergeByName(modifiers) {\n    var merged = modifiers.reduce(function (merged, current) {\n      var existing = merged[current.name];\n      merged[current.name] = existing ? Object.assign({}, existing, current, {\n        options: Object.assign({}, existing.options, current.options),\n        data: Object.assign({}, existing.data, current.data)\n      }) : current;\n      return merged;\n    }, {}); // IE11 does not support Object.values\n\n    return Object.keys(merged).map(function (key) {\n      return merged[key];\n    });\n  }\n\n  var DEFAULT_OPTIONS = {\n    placement: 'bottom',\n    modifiers: [],\n    strategy: 'absolute'\n  };\n\n  function areValidElements() {\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    return !args.some(function (element) {\n      return !(element && typeof element.getBoundingClientRect === 'function');\n    });\n  }\n\n  function popperGenerator(generatorOptions) {\n    if (generatorOptions === void 0) {\n      generatorOptions = {};\n    }\n\n    var _generatorOptions = generatorOptions,\n        _generatorOptions$def = _generatorOptions.defaultModifiers,\n        defaultModifiers = _generatorOptions$def === void 0 ? [] : _generatorOptions$def,\n        _generatorOptions$def2 = _generatorOptions.defaultOptions,\n        defaultOptions = _generatorOptions$def2 === void 0 ? DEFAULT_OPTIONS : _generatorOptions$def2;\n    return function createPopper(reference, popper, options) {\n      if (options === void 0) {\n        options = defaultOptions;\n      }\n\n      var state = {\n        placement: 'bottom',\n        orderedModifiers: [],\n        options: Object.assign({}, DEFAULT_OPTIONS, defaultOptions),\n        modifiersData: {},\n        elements: {\n          reference: reference,\n          popper: popper\n        },\n        attributes: {},\n        styles: {}\n      };\n      var effectCleanupFns = [];\n      var isDestroyed = false;\n      var instance = {\n        state: state,\n        setOptions: function setOptions(options) {\n          cleanupModifierEffects();\n          state.options = Object.assign({}, defaultOptions, state.options, options);\n          state.scrollParents = {\n            reference: isElement(reference) ? listScrollParents(reference) : reference.contextElement ? listScrollParents(reference.contextElement) : [],\n            popper: listScrollParents(popper)\n          }; // Orders the modifiers based on their dependencies and `phase`\n          // properties\n\n          var orderedModifiers = orderModifiers(mergeByName([].concat(defaultModifiers, state.options.modifiers))); // Strip out disabled modifiers\n\n          state.orderedModifiers = orderedModifiers.filter(function (m) {\n            return m.enabled;\n          }); // Validate the provided modifiers so that the consumer will get warned\n\n          runModifierEffects();\n          return instance.update();\n        },\n        // Sync update – it will always be executed, even if not necessary. This\n        // is useful for low frequency updates where sync behavior simplifies the\n        // logic.\n        // For high frequency updates (e.g. `resize` and `scroll` events), always\n        // prefer the async Popper#update method\n        forceUpdate: function forceUpdate() {\n          if (isDestroyed) {\n            return;\n          }\n\n          var _state$elements = state.elements,\n              reference = _state$elements.reference,\n              popper = _state$elements.popper; // Don't proceed if `reference` or `popper` are not valid elements\n          // anymore\n\n          if (!areValidElements(reference, popper)) {\n\n            return;\n          } // Store the reference and popper rects to be read by modifiers\n\n\n          state.rects = {\n            reference: getCompositeRect(reference, getOffsetParent(popper), state.options.strategy === 'fixed'),\n            popper: getLayoutRect(popper)\n          }; // Modifiers have the ability to reset the current update cycle. The\n          // most common use case for this is the `flip` modifier changing the\n          // placement, which then needs to re-run all the modifiers, because the\n          // logic was previously ran for the previous placement and is therefore\n          // stale/incorrect\n\n          state.reset = false;\n          state.placement = state.options.placement; // On each update cycle, the `modifiersData` property for each modifier\n          // is filled with the initial data specified by the modifier. This means\n          // it doesn't persist and is fresh on each update.\n          // To ensure persistent data, use `${name}#persistent`\n\n          state.orderedModifiers.forEach(function (modifier) {\n            return state.modifiersData[modifier.name] = Object.assign({}, modifier.data);\n          });\n\n          for (var index = 0; index < state.orderedModifiers.length; index++) {\n\n            if (state.reset === true) {\n              state.reset = false;\n              index = -1;\n              continue;\n            }\n\n            var _state$orderedModifie = state.orderedModifiers[index],\n                fn = _state$orderedModifie.fn,\n                _state$orderedModifie2 = _state$orderedModifie.options,\n                _options = _state$orderedModifie2 === void 0 ? {} : _state$orderedModifie2,\n                name = _state$orderedModifie.name;\n\n            if (typeof fn === 'function') {\n              state = fn({\n                state: state,\n                options: _options,\n                name: name,\n                instance: instance\n              }) || state;\n            }\n          }\n        },\n        // Async and optimistically optimized update – it will not be executed if\n        // not necessary (debounced to run at most once-per-tick)\n        update: debounce(function () {\n          return new Promise(function (resolve) {\n            instance.forceUpdate();\n            resolve(state);\n          });\n        }),\n        destroy: function destroy() {\n          cleanupModifierEffects();\n          isDestroyed = true;\n        }\n      };\n\n      if (!areValidElements(reference, popper)) {\n\n        return instance;\n      }\n\n      instance.setOptions(options).then(function (state) {\n        if (!isDestroyed && options.onFirstUpdate) {\n          options.onFirstUpdate(state);\n        }\n      }); // Modifiers have the ability to execute arbitrary code before the first\n      // update cycle runs. They will be executed in the same order as the update\n      // cycle. This is useful when a modifier adds some persistent data that\n      // other modifiers need to use, but the modifier is run after the dependent\n      // one.\n\n      function runModifierEffects() {\n        state.orderedModifiers.forEach(function (_ref3) {\n          var name = _ref3.name,\n              _ref3$options = _ref3.options,\n              options = _ref3$options === void 0 ? {} : _ref3$options,\n              effect = _ref3.effect;\n\n          if (typeof effect === 'function') {\n            var cleanupFn = effect({\n              state: state,\n              name: name,\n              instance: instance,\n              options: options\n            });\n\n            var noopFn = function noopFn() {};\n\n            effectCleanupFns.push(cleanupFn || noopFn);\n          }\n        });\n      }\n\n      function cleanupModifierEffects() {\n        effectCleanupFns.forEach(function (fn) {\n          return fn();\n        });\n        effectCleanupFns = [];\n      }\n\n      return instance;\n    };\n  }\n  var createPopper$2 = /*#__PURE__*/popperGenerator(); // eslint-disable-next-line import/no-unused-modules\n\n  var defaultModifiers$1 = [eventListeners, popperOffsets$1, computeStyles$1, applyStyles$1];\n  var createPopper$1 = /*#__PURE__*/popperGenerator({\n    defaultModifiers: defaultModifiers$1\n  }); // eslint-disable-next-line import/no-unused-modules\n\n  var defaultModifiers = [eventListeners, popperOffsets$1, computeStyles$1, applyStyles$1, offset$1, flip$1, preventOverflow$1, arrow$1, hide$1];\n  var createPopper = /*#__PURE__*/popperGenerator({\n    defaultModifiers: defaultModifiers\n  }); // eslint-disable-next-line import/no-unused-modules\n\n  var Popper = /*#__PURE__*/Object.freeze({\n    __proto__: null,\n    popperGenerator: popperGenerator,\n    detectOverflow: detectOverflow,\n    createPopperBase: createPopper$2,\n    createPopper: createPopper,\n    createPopperLite: createPopper$1,\n    top: top,\n    bottom: bottom,\n    right: right,\n    left: left,\n    auto: auto,\n    basePlacements: basePlacements,\n    start: start,\n    end: end,\n    clippingParents: clippingParents,\n    viewport: viewport,\n    popper: popper,\n    reference: reference,\n    variationPlacements: variationPlacements,\n    placements: placements,\n    beforeRead: beforeRead,\n    read: read,\n    afterRead: afterRead,\n    beforeMain: beforeMain,\n    main: main,\n    afterMain: afterMain,\n    beforeWrite: beforeWrite,\n    write: write,\n    afterWrite: afterWrite,\n    modifierPhases: modifierPhases,\n    applyStyles: applyStyles$1,\n    arrow: arrow$1,\n    computeStyles: computeStyles$1,\n    eventListeners: eventListeners,\n    flip: flip$1,\n    hide: hide$1,\n    offset: offset$1,\n    popperOffsets: popperOffsets$1,\n    preventOverflow: preventOverflow$1\n  });\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): dropdown.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$8 = 'dropdown';\n  const DATA_KEY$7 = 'bs.dropdown';\n  const EVENT_KEY$7 = `.${DATA_KEY$7}`;\n  const DATA_API_KEY$4 = '.data-api';\n  const ESCAPE_KEY$2 = 'Escape';\n  const SPACE_KEY = 'Space';\n  const TAB_KEY = 'Tab';\n  const ARROW_UP_KEY = 'ArrowUp';\n  const ARROW_DOWN_KEY = 'ArrowDown';\n  const RIGHT_MOUSE_BUTTON = 2; // MouseEvent.button value for the secondary button, usually the right button\n\n  const REGEXP_KEYDOWN = new RegExp(`${ARROW_UP_KEY}|${ARROW_DOWN_KEY}|${ESCAPE_KEY$2}`);\n  const EVENT_HIDE$4 = `hide${EVENT_KEY$7}`;\n  const EVENT_HIDDEN$4 = `hidden${EVENT_KEY$7}`;\n  const EVENT_SHOW$4 = `show${EVENT_KEY$7}`;\n  const EVENT_SHOWN$4 = `shown${EVENT_KEY$7}`;\n  const EVENT_CLICK = `click${EVENT_KEY$7}`;\n  const EVENT_CLICK_DATA_API$3 = `click${EVENT_KEY$7}${DATA_API_KEY$4}`;\n  const EVENT_KEYDOWN_DATA_API = `keydown${EVENT_KEY$7}${DATA_API_KEY$4}`;\n  const EVENT_KEYUP_DATA_API = `keyup${EVENT_KEY$7}${DATA_API_KEY$4}`;\n  const CLASS_NAME_SHOW$7 = 'show';\n  const CLASS_NAME_DROPUP = 'dropup';\n  const CLASS_NAME_DROPEND = 'dropend';\n  const CLASS_NAME_DROPSTART = 'dropstart';\n  const CLASS_NAME_NAVBAR = 'navbar';\n  const SELECTOR_DATA_TOGGLE$3 = '[data-bs-toggle=\"dropdown\"]';\n  const SELECTOR_MENU = '.dropdown-menu';\n  const SELECTOR_NAVBAR_NAV = '.navbar-nav';\n  const SELECTOR_VISIBLE_ITEMS = '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)';\n  const PLACEMENT_TOP = isRTL() ? 'top-end' : 'top-start';\n  const PLACEMENT_TOPEND = isRTL() ? 'top-start' : 'top-end';\n  const PLACEMENT_BOTTOM = isRTL() ? 'bottom-end' : 'bottom-start';\n  const PLACEMENT_BOTTOMEND = isRTL() ? 'bottom-start' : 'bottom-end';\n  const PLACEMENT_RIGHT = isRTL() ? 'left-start' : 'right-start';\n  const PLACEMENT_LEFT = isRTL() ? 'right-start' : 'left-start';\n  const Default$7 = {\n    offset: [0, 2],\n    boundary: 'clippingParents',\n    reference: 'toggle',\n    display: 'dynamic',\n    popperConfig: null,\n    autoClose: true\n  };\n  const DefaultType$7 = {\n    offset: '(array|string|function)',\n    boundary: '(string|element)',\n    reference: '(string|element|object)',\n    display: 'string',\n    popperConfig: '(null|object|function)',\n    autoClose: '(boolean|string)'\n  };\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Dropdown extends BaseComponent {\n    constructor(element, config) {\n      super(element);\n      this._popper = null;\n      this._config = this._getConfig(config);\n      this._menu = this._getMenuElement();\n      this._inNavbar = this._detectNavbar();\n\n      this._addEventListeners();\n    } // Getters\n\n\n    static get Default() {\n      return Default$7;\n    }\n\n    static get DefaultType() {\n      return DefaultType$7;\n    }\n\n    static get NAME() {\n      return NAME$8;\n    } // Public\n\n\n    toggle() {\n      if (isDisabled(this._element)) {\n        return;\n      }\n\n      const isActive = this._element.classList.contains(CLASS_NAME_SHOW$7);\n\n      if (isActive) {\n        this.hide();\n        return;\n      }\n\n      this.show();\n    }\n\n    show() {\n      if (isDisabled(this._element) || this._menu.classList.contains(CLASS_NAME_SHOW$7)) {\n        return;\n      }\n\n      const parent = Dropdown.getParentFromElement(this._element);\n      const relatedTarget = {\n        relatedTarget: this._element\n      };\n      const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$4, relatedTarget);\n\n      if (showEvent.defaultPrevented) {\n        return;\n      } // Totally disable Popper for Dropdowns in Navbar\n\n\n      if (this._inNavbar) {\n        Manipulator.setDataAttribute(this._menu, 'popper', 'none');\n      } else {\n        if (typeof Popper === 'undefined') {\n          throw new TypeError('Bootstrap\\'s dropdowns require Popper (https://popper.js.org)');\n        }\n\n        let referenceElement = this._element;\n\n        if (this._config.reference === 'parent') {\n          referenceElement = parent;\n        } else if (isElement$1(this._config.reference)) {\n          referenceElement = getElement(this._config.reference);\n        } else if (typeof this._config.reference === 'object') {\n          referenceElement = this._config.reference;\n        }\n\n        const popperConfig = this._getPopperConfig();\n\n        const isDisplayStatic = popperConfig.modifiers.find(modifier => modifier.name === 'applyStyles' && modifier.enabled === false);\n        this._popper = createPopper(referenceElement, this._menu, popperConfig);\n\n        if (isDisplayStatic) {\n          Manipulator.setDataAttribute(this._menu, 'popper', 'static');\n        }\n      } // If this is a touch-enabled device we add extra\n      // empty mouseover listeners to the body's immediate children;\n      // only needed because of broken event delegation on iOS\n      // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n\n\n      if ('ontouchstart' in document.documentElement && !parent.closest(SELECTOR_NAVBAR_NAV)) {\n        [].concat(...document.body.children).forEach(elem => EventHandler.on(elem, 'mouseover', noop));\n      }\n\n      this._element.focus();\n\n      this._element.setAttribute('aria-expanded', true);\n\n      this._menu.classList.toggle(CLASS_NAME_SHOW$7);\n\n      this._element.classList.toggle(CLASS_NAME_SHOW$7);\n\n      EventHandler.trigger(this._element, EVENT_SHOWN$4, relatedTarget);\n    }\n\n    hide() {\n      if (isDisabled(this._element) || !this._menu.classList.contains(CLASS_NAME_SHOW$7)) {\n        return;\n      }\n\n      const relatedTarget = {\n        relatedTarget: this._element\n      };\n\n      this._completeHide(relatedTarget);\n    }\n\n    dispose() {\n      if (this._popper) {\n        this._popper.destroy();\n      }\n\n      super.dispose();\n    }\n\n    update() {\n      this._inNavbar = this._detectNavbar();\n\n      if (this._popper) {\n        this._popper.update();\n      }\n    } // Private\n\n\n    _addEventListeners() {\n      EventHandler.on(this._element, EVENT_CLICK, event => {\n        event.preventDefault();\n        this.toggle();\n      });\n    }\n\n    _completeHide(relatedTarget) {\n      const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$4, relatedTarget);\n\n      if (hideEvent.defaultPrevented) {\n        return;\n      } // If this is a touch-enabled device we remove the extra\n      // empty mouseover listeners we added for iOS support\n\n\n      if ('ontouchstart' in document.documentElement) {\n        [].concat(...document.body.children).forEach(elem => EventHandler.off(elem, 'mouseover', noop));\n      }\n\n      if (this._popper) {\n        this._popper.destroy();\n      }\n\n      this._menu.classList.remove(CLASS_NAME_SHOW$7);\n\n      this._element.classList.remove(CLASS_NAME_SHOW$7);\n\n      this._element.setAttribute('aria-expanded', 'false');\n\n      Manipulator.removeDataAttribute(this._menu, 'popper');\n      EventHandler.trigger(this._element, EVENT_HIDDEN$4, relatedTarget);\n    }\n\n    _getConfig(config) {\n      config = { ...this.constructor.Default,\n        ...Manipulator.getDataAttributes(this._element),\n        ...config\n      };\n      typeCheckConfig(NAME$8, config, this.constructor.DefaultType);\n\n      if (typeof config.reference === 'object' && !isElement$1(config.reference) && typeof config.reference.getBoundingClientRect !== 'function') {\n        // Popper virtual elements require a getBoundingClientRect method\n        throw new TypeError(`${NAME$8.toUpperCase()}: Option \"reference\" provided type \"object\" without a required \"getBoundingClientRect\" method.`);\n      }\n\n      return config;\n    }\n\n    _getMenuElement() {\n      return SelectorEngine.next(this._element, SELECTOR_MENU)[0];\n    }\n\n    _getPlacement() {\n      const parentDropdown = this._element.parentNode;\n\n      if (parentDropdown.classList.contains(CLASS_NAME_DROPEND)) {\n        return PLACEMENT_RIGHT;\n      }\n\n      if (parentDropdown.classList.contains(CLASS_NAME_DROPSTART)) {\n        return PLACEMENT_LEFT;\n      } // We need to trim the value because custom properties can also include spaces\n\n\n      const isEnd = getComputedStyle(this._menu).getPropertyValue('--bs-position').trim() === 'end';\n\n      if (parentDropdown.classList.contains(CLASS_NAME_DROPUP)) {\n        return isEnd ? PLACEMENT_TOPEND : PLACEMENT_TOP;\n      }\n\n      return isEnd ? PLACEMENT_BOTTOMEND : PLACEMENT_BOTTOM;\n    }\n\n    _detectNavbar() {\n      return this._element.closest(`.${CLASS_NAME_NAVBAR}`) !== null;\n    }\n\n    _getOffset() {\n      const {\n        offset\n      } = this._config;\n\n      if (typeof offset === 'string') {\n        return offset.split(',').map(val => Number.parseInt(val, 10));\n      }\n\n      if (typeof offset === 'function') {\n        return popperData => offset(popperData, this._element);\n      }\n\n      return offset;\n    }\n\n    _getPopperConfig() {\n      const defaultBsPopperConfig = {\n        placement: this._getPlacement(),\n        modifiers: [{\n          name: 'preventOverflow',\n          options: {\n            boundary: this._config.boundary\n          }\n        }, {\n          name: 'offset',\n          options: {\n            offset: this._getOffset()\n          }\n        }]\n      }; // Disable Popper if we have a static display\n\n      if (this._config.display === 'static') {\n        defaultBsPopperConfig.modifiers = [{\n          name: 'applyStyles',\n          enabled: false\n        }];\n      }\n\n      return { ...defaultBsPopperConfig,\n        ...(typeof this._config.popperConfig === 'function' ? this._config.popperConfig(defaultBsPopperConfig) : this._config.popperConfig)\n      };\n    }\n\n    _selectMenuItem({\n      key,\n      target\n    }) {\n      const items = SelectorEngine.find(SELECTOR_VISIBLE_ITEMS, this._menu).filter(isVisible);\n\n      if (!items.length) {\n        return;\n      } // if target isn't included in items (e.g. when expanding the dropdown)\n      // allow cycling to get the last item in case key equals ARROW_UP_KEY\n\n\n      getNextActiveElement(items, target, key === ARROW_DOWN_KEY, !items.includes(target)).focus();\n    } // Static\n\n\n    static dropdownInterface(element, config) {\n      const data = Dropdown.getOrCreateInstance(element, config);\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config]();\n      }\n    }\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        Dropdown.dropdownInterface(this, config);\n      });\n    }\n\n    static clearMenus(event) {\n      if (event && (event.button === RIGHT_MOUSE_BUTTON || event.type === 'keyup' && event.key !== TAB_KEY)) {\n        return;\n      }\n\n      const toggles = SelectorEngine.find(SELECTOR_DATA_TOGGLE$3);\n\n      for (let i = 0, len = toggles.length; i < len; i++) {\n        const context = Dropdown.getInstance(toggles[i]);\n\n        if (!context || context._config.autoClose === false) {\n          continue;\n        }\n\n        if (!context._element.classList.contains(CLASS_NAME_SHOW$7)) {\n          continue;\n        }\n\n        const relatedTarget = {\n          relatedTarget: context._element\n        };\n\n        if (event) {\n          const composedPath = event.composedPath();\n          const isMenuTarget = composedPath.includes(context._menu);\n\n          if (composedPath.includes(context._element) || context._config.autoClose === 'inside' && !isMenuTarget || context._config.autoClose === 'outside' && isMenuTarget) {\n            continue;\n          } // Tab navigation through the dropdown menu or events from contained inputs shouldn't close the menu\n\n\n          if (context._menu.contains(event.target) && (event.type === 'keyup' && event.key === TAB_KEY || /input|select|option|textarea|form/i.test(event.target.tagName))) {\n            continue;\n          }\n\n          if (event.type === 'click') {\n            relatedTarget.clickEvent = event;\n          }\n        }\n\n        context._completeHide(relatedTarget);\n      }\n    }\n\n    static getParentFromElement(element) {\n      return getElementFromSelector(element) || element.parentNode;\n    }\n\n    static dataApiKeydownHandler(event) {\n      // If not input/textarea:\n      //  - And not a key in REGEXP_KEYDOWN => not a dropdown command\n      // If input/textarea:\n      //  - If space key => not a dropdown command\n      //  - If key is other than escape\n      //    - If key is not up or down => not a dropdown command\n      //    - If trigger inside the menu => not a dropdown command\n      if (/input|textarea/i.test(event.target.tagName) ? event.key === SPACE_KEY || event.key !== ESCAPE_KEY$2 && (event.key !== ARROW_DOWN_KEY && event.key !== ARROW_UP_KEY || event.target.closest(SELECTOR_MENU)) : !REGEXP_KEYDOWN.test(event.key)) {\n        return;\n      }\n\n      const isActive = this.classList.contains(CLASS_NAME_SHOW$7);\n\n      if (!isActive && event.key === ESCAPE_KEY$2) {\n        return;\n      }\n\n      event.preventDefault();\n      event.stopPropagation();\n\n      if (isDisabled(this)) {\n        return;\n      }\n\n      const getToggleButton = () => this.matches(SELECTOR_DATA_TOGGLE$3) ? this : SelectorEngine.prev(this, SELECTOR_DATA_TOGGLE$3)[0];\n\n      if (event.key === ESCAPE_KEY$2) {\n        getToggleButton().focus();\n        Dropdown.clearMenus();\n        return;\n      }\n\n      if (event.key === ARROW_UP_KEY || event.key === ARROW_DOWN_KEY) {\n        if (!isActive) {\n          getToggleButton().click();\n        }\n\n        Dropdown.getInstance(getToggleButton())._selectMenuItem(event);\n\n        return;\n      }\n\n      if (!isActive || event.key === SPACE_KEY) {\n        Dropdown.clearMenus();\n      }\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_DATA_TOGGLE$3, Dropdown.dataApiKeydownHandler);\n  EventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown.dataApiKeydownHandler);\n  EventHandler.on(document, EVENT_CLICK_DATA_API$3, Dropdown.clearMenus);\n  EventHandler.on(document, EVENT_KEYUP_DATA_API, Dropdown.clearMenus);\n  EventHandler.on(document, EVENT_CLICK_DATA_API$3, SELECTOR_DATA_TOGGLE$3, function (event) {\n    event.preventDefault();\n    Dropdown.dropdownInterface(this);\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Dropdown to jQuery only if jQuery is present\n   */\n\n  defineJQueryPlugin(Dropdown);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): util/scrollBar.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  const SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top';\n  const SELECTOR_STICKY_CONTENT = '.sticky-top';\n\n  class ScrollBarHelper {\n    constructor() {\n      this._element = document.body;\n    }\n\n    getWidth() {\n      // https://developer.mozilla.org/en-US/docs/Web/API/Window/innerWidth#usage_notes\n      const documentWidth = document.documentElement.clientWidth;\n      return Math.abs(window.innerWidth - documentWidth);\n    }\n\n    hide() {\n      const width = this.getWidth();\n\n      this._disableOverFlow(); // give padding to element to balance the hidden scrollbar width\n\n\n      this._setElementAttributes(this._element, 'paddingRight', calculatedValue => calculatedValue + width); // trick: We adjust positive paddingRight and negative marginRight to sticky-top elements to keep showing fullwidth\n\n\n      this._setElementAttributes(SELECTOR_FIXED_CONTENT, 'paddingRight', calculatedValue => calculatedValue + width);\n\n      this._setElementAttributes(SELECTOR_STICKY_CONTENT, 'marginRight', calculatedValue => calculatedValue - width);\n    }\n\n    _disableOverFlow() {\n      this._saveInitialAttribute(this._element, 'overflow');\n\n      this._element.style.overflow = 'hidden';\n    }\n\n    _setElementAttributes(selector, styleProp, callback) {\n      const scrollbarWidth = this.getWidth();\n\n      const manipulationCallBack = element => {\n        if (element !== this._element && window.innerWidth > element.clientWidth + scrollbarWidth) {\n          return;\n        }\n\n        this._saveInitialAttribute(element, styleProp);\n\n        const calculatedValue = window.getComputedStyle(element)[styleProp];\n        element.style[styleProp] = `${callback(Number.parseFloat(calculatedValue))}px`;\n      };\n\n      this._applyManipulationCallback(selector, manipulationCallBack);\n    }\n\n    reset() {\n      this._resetElementAttributes(this._element, 'overflow');\n\n      this._resetElementAttributes(this._element, 'paddingRight');\n\n      this._resetElementAttributes(SELECTOR_FIXED_CONTENT, 'paddingRight');\n\n      this._resetElementAttributes(SELECTOR_STICKY_CONTENT, 'marginRight');\n    }\n\n    _saveInitialAttribute(element, styleProp) {\n      const actualValue = element.style[styleProp];\n\n      if (actualValue) {\n        Manipulator.setDataAttribute(element, styleProp, actualValue);\n      }\n    }\n\n    _resetElementAttributes(selector, styleProp) {\n      const manipulationCallBack = element => {\n        const value = Manipulator.getDataAttribute(element, styleProp);\n\n        if (typeof value === 'undefined') {\n          element.style.removeProperty(styleProp);\n        } else {\n          Manipulator.removeDataAttribute(element, styleProp);\n          element.style[styleProp] = value;\n        }\n      };\n\n      this._applyManipulationCallback(selector, manipulationCallBack);\n    }\n\n    _applyManipulationCallback(selector, callBack) {\n      if (isElement$1(selector)) {\n        callBack(selector);\n      } else {\n        SelectorEngine.find(selector, this._element).forEach(callBack);\n      }\n    }\n\n    isOverflowing() {\n      return this.getWidth() > 0;\n    }\n\n  }\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): util/backdrop.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  const Default$6 = {\n    isVisible: true,\n    // if false, we use the backdrop helper without adding any element to the dom\n    isAnimated: false,\n    rootElement: 'body',\n    // give the choice to place backdrop under different elements\n    clickCallback: null\n  };\n  const DefaultType$6 = {\n    isVisible: 'boolean',\n    isAnimated: 'boolean',\n    rootElement: '(element|string)',\n    clickCallback: '(function|null)'\n  };\n  const NAME$7 = 'backdrop';\n  const CLASS_NAME_BACKDROP = 'modal-backdrop';\n  const CLASS_NAME_FADE$5 = 'fade';\n  const CLASS_NAME_SHOW$6 = 'show';\n  const EVENT_MOUSEDOWN = `mousedown.bs.${NAME$7}`;\n\n  class Backdrop {\n    constructor(config) {\n      this._config = this._getConfig(config);\n      this._isAppended = false;\n      this._element = null;\n    }\n\n    show(callback) {\n      if (!this._config.isVisible) {\n        execute(callback);\n        return;\n      }\n\n      this._append();\n\n      if (this._config.isAnimated) {\n        reflow(this._getElement());\n      }\n\n      this._getElement().classList.add(CLASS_NAME_SHOW$6);\n\n      this._emulateAnimation(() => {\n        execute(callback);\n      });\n    }\n\n    hide(callback) {\n      if (!this._config.isVisible) {\n        execute(callback);\n        return;\n      }\n\n      this._getElement().classList.remove(CLASS_NAME_SHOW$6);\n\n      this._emulateAnimation(() => {\n        this.dispose();\n        execute(callback);\n      });\n    } // Private\n\n\n    _getElement() {\n      if (!this._element) {\n        const backdrop = document.createElement('div');\n        backdrop.className = CLASS_NAME_BACKDROP;\n\n        if (this._config.isAnimated) {\n          backdrop.classList.add(CLASS_NAME_FADE$5);\n        }\n\n        this._element = backdrop;\n      }\n\n      return this._element;\n    }\n\n    _getConfig(config) {\n      config = { ...Default$6,\n        ...(typeof config === 'object' ? config : {})\n      }; // use getElement() with the default \"body\" to get a fresh Element on each instantiation\n\n      config.rootElement = getElement(config.rootElement);\n      typeCheckConfig(NAME$7, config, DefaultType$6);\n      return config;\n    }\n\n    _append() {\n      if (this._isAppended) {\n        return;\n      }\n\n      this._config.rootElement.appendChild(this._getElement());\n\n      EventHandler.on(this._getElement(), EVENT_MOUSEDOWN, () => {\n        execute(this._config.clickCallback);\n      });\n      this._isAppended = true;\n    }\n\n    dispose() {\n      if (!this._isAppended) {\n        return;\n      }\n\n      EventHandler.off(this._element, EVENT_MOUSEDOWN);\n\n      this._element.remove();\n\n      this._isAppended = false;\n    }\n\n    _emulateAnimation(callback) {\n      executeAfterTransition(callback, this._getElement(), this._config.isAnimated);\n    }\n\n  }\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): modal.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$6 = 'modal';\n  const DATA_KEY$6 = 'bs.modal';\n  const EVENT_KEY$6 = `.${DATA_KEY$6}`;\n  const DATA_API_KEY$3 = '.data-api';\n  const ESCAPE_KEY$1 = 'Escape';\n  const Default$5 = {\n    backdrop: true,\n    keyboard: true,\n    focus: true\n  };\n  const DefaultType$5 = {\n    backdrop: '(boolean|string)',\n    keyboard: 'boolean',\n    focus: 'boolean'\n  };\n  const EVENT_HIDE$3 = `hide${EVENT_KEY$6}`;\n  const EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY$6}`;\n  const EVENT_HIDDEN$3 = `hidden${EVENT_KEY$6}`;\n  const EVENT_SHOW$3 = `show${EVENT_KEY$6}`;\n  const EVENT_SHOWN$3 = `shown${EVENT_KEY$6}`;\n  const EVENT_FOCUSIN$2 = `focusin${EVENT_KEY$6}`;\n  const EVENT_RESIZE = `resize${EVENT_KEY$6}`;\n  const EVENT_CLICK_DISMISS$2 = `click.dismiss${EVENT_KEY$6}`;\n  const EVENT_KEYDOWN_DISMISS$1 = `keydown.dismiss${EVENT_KEY$6}`;\n  const EVENT_MOUSEUP_DISMISS = `mouseup.dismiss${EVENT_KEY$6}`;\n  const EVENT_MOUSEDOWN_DISMISS = `mousedown.dismiss${EVENT_KEY$6}`;\n  const EVENT_CLICK_DATA_API$2 = `click${EVENT_KEY$6}${DATA_API_KEY$3}`;\n  const CLASS_NAME_OPEN = 'modal-open';\n  const CLASS_NAME_FADE$4 = 'fade';\n  const CLASS_NAME_SHOW$5 = 'show';\n  const CLASS_NAME_STATIC = 'modal-static';\n  const SELECTOR_DIALOG = '.modal-dialog';\n  const SELECTOR_MODAL_BODY = '.modal-body';\n  const SELECTOR_DATA_TOGGLE$2 = '[data-bs-toggle=\"modal\"]';\n  const SELECTOR_DATA_DISMISS$2 = '[data-bs-dismiss=\"modal\"]';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Modal extends BaseComponent {\n    constructor(element, config) {\n      super(element);\n      this._config = this._getConfig(config);\n      this._dialog = SelectorEngine.findOne(SELECTOR_DIALOG, this._element);\n      this._backdrop = this._initializeBackDrop();\n      this._isShown = false;\n      this._ignoreBackdropClick = false;\n      this._isTransitioning = false;\n      this._scrollBar = new ScrollBarHelper();\n    } // Getters\n\n\n    static get Default() {\n      return Default$5;\n    }\n\n    static get NAME() {\n      return NAME$6;\n    } // Public\n\n\n    toggle(relatedTarget) {\n      return this._isShown ? this.hide() : this.show(relatedTarget);\n    }\n\n    show(relatedTarget) {\n      if (this._isShown || this._isTransitioning) {\n        return;\n      }\n\n      const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$3, {\n        relatedTarget\n      });\n\n      if (showEvent.defaultPrevented) {\n        return;\n      }\n\n      this._isShown = true;\n\n      if (this._isAnimated()) {\n        this._isTransitioning = true;\n      }\n\n      this._scrollBar.hide();\n\n      document.body.classList.add(CLASS_NAME_OPEN);\n\n      this._adjustDialog();\n\n      this._setEscapeEvent();\n\n      this._setResizeEvent();\n\n      EventHandler.on(this._element, EVENT_CLICK_DISMISS$2, SELECTOR_DATA_DISMISS$2, event => this.hide(event));\n      EventHandler.on(this._dialog, EVENT_MOUSEDOWN_DISMISS, () => {\n        EventHandler.one(this._element, EVENT_MOUSEUP_DISMISS, event => {\n          if (event.target === this._element) {\n            this._ignoreBackdropClick = true;\n          }\n        });\n      });\n\n      this._showBackdrop(() => this._showElement(relatedTarget));\n    }\n\n    hide(event) {\n      if (event && ['A', 'AREA'].includes(event.target.tagName)) {\n        event.preventDefault();\n      }\n\n      if (!this._isShown || this._isTransitioning) {\n        return;\n      }\n\n      const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$3);\n\n      if (hideEvent.defaultPrevented) {\n        return;\n      }\n\n      this._isShown = false;\n\n      const isAnimated = this._isAnimated();\n\n      if (isAnimated) {\n        this._isTransitioning = true;\n      }\n\n      this._setEscapeEvent();\n\n      this._setResizeEvent();\n\n      EventHandler.off(document, EVENT_FOCUSIN$2);\n\n      this._element.classList.remove(CLASS_NAME_SHOW$5);\n\n      EventHandler.off(this._element, EVENT_CLICK_DISMISS$2);\n      EventHandler.off(this._dialog, EVENT_MOUSEDOWN_DISMISS);\n\n      this._queueCallback(() => this._hideModal(), this._element, isAnimated);\n    }\n\n    dispose() {\n      [window, this._dialog].forEach(htmlElement => EventHandler.off(htmlElement, EVENT_KEY$6));\n\n      this._backdrop.dispose();\n\n      super.dispose();\n      /**\n       * `document` has 2 events `EVENT_FOCUSIN` and `EVENT_CLICK_DATA_API`\n       * Do not move `document` in `htmlElements` array\n       * It will remove `EVENT_CLICK_DATA_API` event that should remain\n       */\n\n      EventHandler.off(document, EVENT_FOCUSIN$2);\n    }\n\n    handleUpdate() {\n      this._adjustDialog();\n    } // Private\n\n\n    _initializeBackDrop() {\n      return new Backdrop({\n        isVisible: Boolean(this._config.backdrop),\n        // 'static' option will be translated to true, and booleans will keep their value\n        isAnimated: this._isAnimated()\n      });\n    }\n\n    _getConfig(config) {\n      config = { ...Default$5,\n        ...Manipulator.getDataAttributes(this._element),\n        ...(typeof config === 'object' ? config : {})\n      };\n      typeCheckConfig(NAME$6, config, DefaultType$5);\n      return config;\n    }\n\n    _showElement(relatedTarget) {\n      const isAnimated = this._isAnimated();\n\n      const modalBody = SelectorEngine.findOne(SELECTOR_MODAL_BODY, this._dialog);\n\n      if (!this._element.parentNode || this._element.parentNode.nodeType !== Node.ELEMENT_NODE) {\n        // Don't move modal's DOM position\n        document.body.appendChild(this._element);\n      }\n\n      this._element.style.display = 'block';\n\n      this._element.removeAttribute('aria-hidden');\n\n      this._element.setAttribute('aria-modal', true);\n\n      this._element.setAttribute('role', 'dialog');\n\n      this._element.scrollTop = 0;\n\n      if (modalBody) {\n        modalBody.scrollTop = 0;\n      }\n\n      if (isAnimated) {\n        reflow(this._element);\n      }\n\n      this._element.classList.add(CLASS_NAME_SHOW$5);\n\n      if (this._config.focus) {\n        this._enforceFocus();\n      }\n\n      const transitionComplete = () => {\n        if (this._config.focus) {\n          this._element.focus();\n        }\n\n        this._isTransitioning = false;\n        EventHandler.trigger(this._element, EVENT_SHOWN$3, {\n          relatedTarget\n        });\n      };\n\n      this._queueCallback(transitionComplete, this._dialog, isAnimated);\n    }\n\n    _enforceFocus() {\n      EventHandler.off(document, EVENT_FOCUSIN$2); // guard against infinite focus loop\n\n      EventHandler.on(document, EVENT_FOCUSIN$2, event => {\n        if (document !== event.target && this._element !== event.target && !this._element.contains(event.target)) {\n          this._element.focus();\n        }\n      });\n    }\n\n    _setEscapeEvent() {\n      if (this._isShown) {\n        EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS$1, event => {\n          if (this._config.keyboard && event.key === ESCAPE_KEY$1) {\n            event.preventDefault();\n            this.hide();\n          } else if (!this._config.keyboard && event.key === ESCAPE_KEY$1) {\n            this._triggerBackdropTransition();\n          }\n        });\n      } else {\n        EventHandler.off(this._element, EVENT_KEYDOWN_DISMISS$1);\n      }\n    }\n\n    _setResizeEvent() {\n      if (this._isShown) {\n        EventHandler.on(window, EVENT_RESIZE, () => this._adjustDialog());\n      } else {\n        EventHandler.off(window, EVENT_RESIZE);\n      }\n    }\n\n    _hideModal() {\n      this._element.style.display = 'none';\n\n      this._element.setAttribute('aria-hidden', true);\n\n      this._element.removeAttribute('aria-modal');\n\n      this._element.removeAttribute('role');\n\n      this._isTransitioning = false;\n\n      this._backdrop.hide(() => {\n        document.body.classList.remove(CLASS_NAME_OPEN);\n\n        this._resetAdjustments();\n\n        this._scrollBar.reset();\n\n        EventHandler.trigger(this._element, EVENT_HIDDEN$3);\n      });\n    }\n\n    _showBackdrop(callback) {\n      EventHandler.on(this._element, EVENT_CLICK_DISMISS$2, event => {\n        if (this._ignoreBackdropClick) {\n          this._ignoreBackdropClick = false;\n          return;\n        }\n\n        if (event.target !== event.currentTarget) {\n          return;\n        }\n\n        if (this._config.backdrop === true) {\n          this.hide();\n        } else if (this._config.backdrop === 'static') {\n          this._triggerBackdropTransition();\n        }\n      });\n\n      this._backdrop.show(callback);\n    }\n\n    _isAnimated() {\n      return this._element.classList.contains(CLASS_NAME_FADE$4);\n    }\n\n    _triggerBackdropTransition() {\n      const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED);\n\n      if (hideEvent.defaultPrevented) {\n        return;\n      }\n\n      const {\n        classList,\n        scrollHeight,\n        style\n      } = this._element;\n      const isModalOverflowing = scrollHeight > document.documentElement.clientHeight; // return if the following background transition hasn't yet completed\n\n      if (!isModalOverflowing && style.overflowY === 'hidden' || classList.contains(CLASS_NAME_STATIC)) {\n        return;\n      }\n\n      if (!isModalOverflowing) {\n        style.overflowY = 'hidden';\n      }\n\n      classList.add(CLASS_NAME_STATIC);\n\n      this._queueCallback(() => {\n        classList.remove(CLASS_NAME_STATIC);\n\n        if (!isModalOverflowing) {\n          this._queueCallback(() => {\n            style.overflowY = '';\n          }, this._dialog);\n        }\n      }, this._dialog);\n\n      this._element.focus();\n    } // ----------------------------------------------------------------------\n    // the following methods are used to handle overflowing modals\n    // ----------------------------------------------------------------------\n\n\n    _adjustDialog() {\n      const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;\n\n      const scrollbarWidth = this._scrollBar.getWidth();\n\n      const isBodyOverflowing = scrollbarWidth > 0;\n\n      if (!isBodyOverflowing && isModalOverflowing && !isRTL() || isBodyOverflowing && !isModalOverflowing && isRTL()) {\n        this._element.style.paddingLeft = `${scrollbarWidth}px`;\n      }\n\n      if (isBodyOverflowing && !isModalOverflowing && !isRTL() || !isBodyOverflowing && isModalOverflowing && isRTL()) {\n        this._element.style.paddingRight = `${scrollbarWidth}px`;\n      }\n    }\n\n    _resetAdjustments() {\n      this._element.style.paddingLeft = '';\n      this._element.style.paddingRight = '';\n    } // Static\n\n\n    static jQueryInterface(config, relatedTarget) {\n      return this.each(function () {\n        const data = Modal.getOrCreateInstance(this, config);\n\n        if (typeof config !== 'string') {\n          return;\n        }\n\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config](relatedTarget);\n      });\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(document, EVENT_CLICK_DATA_API$2, SELECTOR_DATA_TOGGLE$2, function (event) {\n    const target = getElementFromSelector(this);\n\n    if (['A', 'AREA'].includes(this.tagName)) {\n      event.preventDefault();\n    }\n\n    EventHandler.one(target, EVENT_SHOW$3, showEvent => {\n      if (showEvent.defaultPrevented) {\n        // only register focus restorer if modal will actually get shown\n        return;\n      }\n\n      EventHandler.one(target, EVENT_HIDDEN$3, () => {\n        if (isVisible(this)) {\n          this.focus();\n        }\n      });\n    });\n    const data = Modal.getOrCreateInstance(target);\n    data.toggle(this);\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Modal to jQuery only if jQuery is present\n   */\n\n  defineJQueryPlugin(Modal);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): offcanvas.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$5 = 'offcanvas';\n  const DATA_KEY$5 = 'bs.offcanvas';\n  const EVENT_KEY$5 = `.${DATA_KEY$5}`;\n  const DATA_API_KEY$2 = '.data-api';\n  const EVENT_LOAD_DATA_API$1 = `load${EVENT_KEY$5}${DATA_API_KEY$2}`;\n  const ESCAPE_KEY = 'Escape';\n  const Default$4 = {\n    backdrop: true,\n    keyboard: true,\n    scroll: false\n  };\n  const DefaultType$4 = {\n    backdrop: 'boolean',\n    keyboard: 'boolean',\n    scroll: 'boolean'\n  };\n  const CLASS_NAME_SHOW$4 = 'show';\n  const OPEN_SELECTOR = '.offcanvas.show';\n  const EVENT_SHOW$2 = `show${EVENT_KEY$5}`;\n  const EVENT_SHOWN$2 = `shown${EVENT_KEY$5}`;\n  const EVENT_HIDE$2 = `hide${EVENT_KEY$5}`;\n  const EVENT_HIDDEN$2 = `hidden${EVENT_KEY$5}`;\n  const EVENT_FOCUSIN$1 = `focusin${EVENT_KEY$5}`;\n  const EVENT_CLICK_DATA_API$1 = `click${EVENT_KEY$5}${DATA_API_KEY$2}`;\n  const EVENT_CLICK_DISMISS$1 = `click.dismiss${EVENT_KEY$5}`;\n  const EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY$5}`;\n  const SELECTOR_DATA_DISMISS$1 = '[data-bs-dismiss=\"offcanvas\"]';\n  const SELECTOR_DATA_TOGGLE$1 = '[data-bs-toggle=\"offcanvas\"]';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Offcanvas extends BaseComponent {\n    constructor(element, config) {\n      super(element);\n      this._config = this._getConfig(config);\n      this._isShown = false;\n      this._backdrop = this._initializeBackDrop();\n\n      this._addEventListeners();\n    } // Getters\n\n\n    static get NAME() {\n      return NAME$5;\n    }\n\n    static get Default() {\n      return Default$4;\n    } // Public\n\n\n    toggle(relatedTarget) {\n      return this._isShown ? this.hide() : this.show(relatedTarget);\n    }\n\n    show(relatedTarget) {\n      if (this._isShown) {\n        return;\n      }\n\n      const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$2, {\n        relatedTarget\n      });\n\n      if (showEvent.defaultPrevented) {\n        return;\n      }\n\n      this._isShown = true;\n      this._element.style.visibility = 'visible';\n\n      this._backdrop.show();\n\n      if (!this._config.scroll) {\n        new ScrollBarHelper().hide();\n\n        this._enforceFocusOnElement(this._element);\n      }\n\n      this._element.removeAttribute('aria-hidden');\n\n      this._element.setAttribute('aria-modal', true);\n\n      this._element.setAttribute('role', 'dialog');\n\n      this._element.classList.add(CLASS_NAME_SHOW$4);\n\n      const completeCallBack = () => {\n        EventHandler.trigger(this._element, EVENT_SHOWN$2, {\n          relatedTarget\n        });\n      };\n\n      this._queueCallback(completeCallBack, this._element, true);\n    }\n\n    hide() {\n      if (!this._isShown) {\n        return;\n      }\n\n      const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$2);\n\n      if (hideEvent.defaultPrevented) {\n        return;\n      }\n\n      EventHandler.off(document, EVENT_FOCUSIN$1);\n\n      this._element.blur();\n\n      this._isShown = false;\n\n      this._element.classList.remove(CLASS_NAME_SHOW$4);\n\n      this._backdrop.hide();\n\n      const completeCallback = () => {\n        this._element.setAttribute('aria-hidden', true);\n\n        this._element.removeAttribute('aria-modal');\n\n        this._element.removeAttribute('role');\n\n        this._element.style.visibility = 'hidden';\n\n        if (!this._config.scroll) {\n          new ScrollBarHelper().reset();\n        }\n\n        EventHandler.trigger(this._element, EVENT_HIDDEN$2);\n      };\n\n      this._queueCallback(completeCallback, this._element, true);\n    }\n\n    dispose() {\n      this._backdrop.dispose();\n\n      super.dispose();\n      EventHandler.off(document, EVENT_FOCUSIN$1);\n    } // Private\n\n\n    _getConfig(config) {\n      config = { ...Default$4,\n        ...Manipulator.getDataAttributes(this._element),\n        ...(typeof config === 'object' ? config : {})\n      };\n      typeCheckConfig(NAME$5, config, DefaultType$4);\n      return config;\n    }\n\n    _initializeBackDrop() {\n      return new Backdrop({\n        isVisible: this._config.backdrop,\n        isAnimated: true,\n        rootElement: this._element.parentNode,\n        clickCallback: () => this.hide()\n      });\n    }\n\n    _enforceFocusOnElement(element) {\n      EventHandler.off(document, EVENT_FOCUSIN$1); // guard against infinite focus loop\n\n      EventHandler.on(document, EVENT_FOCUSIN$1, event => {\n        if (document !== event.target && element !== event.target && !element.contains(event.target)) {\n          element.focus();\n        }\n      });\n      element.focus();\n    }\n\n    _addEventListeners() {\n      EventHandler.on(this._element, EVENT_CLICK_DISMISS$1, SELECTOR_DATA_DISMISS$1, () => this.hide());\n      EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS, event => {\n        if (this._config.keyboard && event.key === ESCAPE_KEY) {\n          this.hide();\n        }\n      });\n    } // Static\n\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = Offcanvas.getOrCreateInstance(this, config);\n\n        if (typeof config !== 'string') {\n          return;\n        }\n\n        if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config](this);\n      });\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(document, EVENT_CLICK_DATA_API$1, SELECTOR_DATA_TOGGLE$1, function (event) {\n    const target = getElementFromSelector(this);\n\n    if (['A', 'AREA'].includes(this.tagName)) {\n      event.preventDefault();\n    }\n\n    if (isDisabled(this)) {\n      return;\n    }\n\n    EventHandler.one(target, EVENT_HIDDEN$2, () => {\n      // focus on trigger when it is closed\n      if (isVisible(this)) {\n        this.focus();\n      }\n    }); // avoid conflict when clicking a toggler of an offcanvas, while another is open\n\n    const allReadyOpen = SelectorEngine.findOne(OPEN_SELECTOR);\n\n    if (allReadyOpen && allReadyOpen !== target) {\n      Offcanvas.getInstance(allReadyOpen).hide();\n    }\n\n    const data = Offcanvas.getOrCreateInstance(target);\n    data.toggle(this);\n  });\n  EventHandler.on(window, EVENT_LOAD_DATA_API$1, () => SelectorEngine.find(OPEN_SELECTOR).forEach(el => Offcanvas.getOrCreateInstance(el).show()));\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   */\n\n  defineJQueryPlugin(Offcanvas);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): util/sanitizer.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  const uriAttrs = new Set(['background', 'cite', 'href', 'itemtype', 'longdesc', 'poster', 'src', 'xlink:href']);\n  const ARIA_ATTRIBUTE_PATTERN = /^aria-[\\w-]*$/i;\n  /**\n   * A pattern that recognizes a commonly useful subset of URLs that are safe.\n   *\n   * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts\n   */\n\n  const SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file):|[^#&/:?]*(?:[#/?]|$))/i;\n  /**\n   * A pattern that matches safe data URLs. Only matches image, video and audio types.\n   *\n   * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts\n   */\n\n  const DATA_URL_PATTERN = /^data:(?:image\\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\\/(?:mpeg|mp4|ogg|webm)|audio\\/(?:mp3|oga|ogg|opus));base64,[\\d+/a-z]+=*$/i;\n\n  const allowedAttribute = (attr, allowedAttributeList) => {\n    const attrName = attr.nodeName.toLowerCase();\n\n    if (allowedAttributeList.includes(attrName)) {\n      if (uriAttrs.has(attrName)) {\n        return Boolean(SAFE_URL_PATTERN.test(attr.nodeValue) || DATA_URL_PATTERN.test(attr.nodeValue));\n      }\n\n      return true;\n    }\n\n    const regExp = allowedAttributeList.filter(attrRegex => attrRegex instanceof RegExp); // Check if a regular expression validates the attribute.\n\n    for (let i = 0, len = regExp.length; i < len; i++) {\n      if (regExp[i].test(attrName)) {\n        return true;\n      }\n    }\n\n    return false;\n  };\n\n  const DefaultAllowlist = {\n    // Global attributes allowed on any supplied element below.\n    '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],\n    a: ['target', 'href', 'title', 'rel'],\n    area: [],\n    b: [],\n    br: [],\n    col: [],\n    code: [],\n    div: [],\n    em: [],\n    hr: [],\n    h1: [],\n    h2: [],\n    h3: [],\n    h4: [],\n    h5: [],\n    h6: [],\n    i: [],\n    img: ['src', 'srcset', 'alt', 'title', 'width', 'height'],\n    li: [],\n    ol: [],\n    p: [],\n    pre: [],\n    s: [],\n    small: [],\n    span: [],\n    sub: [],\n    sup: [],\n    strong: [],\n    u: [],\n    ul: []\n  };\n  function sanitizeHtml(unsafeHtml, allowList, sanitizeFn) {\n    if (!unsafeHtml.length) {\n      return unsafeHtml;\n    }\n\n    if (sanitizeFn && typeof sanitizeFn === 'function') {\n      return sanitizeFn(unsafeHtml);\n    }\n\n    const domParser = new window.DOMParser();\n    const createdDocument = domParser.parseFromString(unsafeHtml, 'text/html');\n    const allowlistKeys = Object.keys(allowList);\n    const elements = [].concat(...createdDocument.body.querySelectorAll('*'));\n\n    for (let i = 0, len = elements.length; i < len; i++) {\n      const el = elements[i];\n      const elName = el.nodeName.toLowerCase();\n\n      if (!allowlistKeys.includes(elName)) {\n        el.remove();\n        continue;\n      }\n\n      const attributeList = [].concat(...el.attributes);\n      const allowedAttributes = [].concat(allowList['*'] || [], allowList[elName] || []);\n      attributeList.forEach(attr => {\n        if (!allowedAttribute(attr, allowedAttributes)) {\n          el.removeAttribute(attr.nodeName);\n        }\n      });\n    }\n\n    return createdDocument.body.innerHTML;\n  }\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): tooltip.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$4 = 'tooltip';\n  const DATA_KEY$4 = 'bs.tooltip';\n  const EVENT_KEY$4 = `.${DATA_KEY$4}`;\n  const CLASS_PREFIX$1 = 'bs-tooltip';\n  const BSCLS_PREFIX_REGEX$1 = new RegExp(`(^|\\\\s)${CLASS_PREFIX$1}\\\\S+`, 'g');\n  const DISALLOWED_ATTRIBUTES = new Set(['sanitize', 'allowList', 'sanitizeFn']);\n  const DefaultType$3 = {\n    animation: 'boolean',\n    template: 'string',\n    title: '(string|element|function)',\n    trigger: 'string',\n    delay: '(number|object)',\n    html: 'boolean',\n    selector: '(string|boolean)',\n    placement: '(string|function)',\n    offset: '(array|string|function)',\n    container: '(string|element|boolean)',\n    fallbackPlacements: 'array',\n    boundary: '(string|element)',\n    customClass: '(string|function)',\n    sanitize: 'boolean',\n    sanitizeFn: '(null|function)',\n    allowList: 'object',\n    popperConfig: '(null|object|function)'\n  };\n  const AttachmentMap = {\n    AUTO: 'auto',\n    TOP: 'top',\n    RIGHT: isRTL() ? 'left' : 'right',\n    BOTTOM: 'bottom',\n    LEFT: isRTL() ? 'right' : 'left'\n  };\n  const Default$3 = {\n    animation: true,\n    template: '<div class=\"tooltip\" role=\"tooltip\">' + '<div class=\"tooltip-arrow\"></div>' + '<div class=\"tooltip-inner\"></div>' + '</div>',\n    trigger: 'hover focus',\n    title: '',\n    delay: 0,\n    html: false,\n    selector: false,\n    placement: 'top',\n    offset: [0, 0],\n    container: false,\n    fallbackPlacements: ['top', 'right', 'bottom', 'left'],\n    boundary: 'clippingParents',\n    customClass: '',\n    sanitize: true,\n    sanitizeFn: null,\n    allowList: DefaultAllowlist,\n    popperConfig: null\n  };\n  const Event$2 = {\n    HIDE: `hide${EVENT_KEY$4}`,\n    HIDDEN: `hidden${EVENT_KEY$4}`,\n    SHOW: `show${EVENT_KEY$4}`,\n    SHOWN: `shown${EVENT_KEY$4}`,\n    INSERTED: `inserted${EVENT_KEY$4}`,\n    CLICK: `click${EVENT_KEY$4}`,\n    FOCUSIN: `focusin${EVENT_KEY$4}`,\n    FOCUSOUT: `focusout${EVENT_KEY$4}`,\n    MOUSEENTER: `mouseenter${EVENT_KEY$4}`,\n    MOUSELEAVE: `mouseleave${EVENT_KEY$4}`\n  };\n  const CLASS_NAME_FADE$3 = 'fade';\n  const CLASS_NAME_MODAL = 'modal';\n  const CLASS_NAME_SHOW$3 = 'show';\n  const HOVER_STATE_SHOW = 'show';\n  const HOVER_STATE_OUT = 'out';\n  const SELECTOR_TOOLTIP_INNER = '.tooltip-inner';\n  const TRIGGER_HOVER = 'hover';\n  const TRIGGER_FOCUS = 'focus';\n  const TRIGGER_CLICK = 'click';\n  const TRIGGER_MANUAL = 'manual';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Tooltip extends BaseComponent {\n    constructor(element, config) {\n      if (typeof Popper === 'undefined') {\n        throw new TypeError('Bootstrap\\'s tooltips require Popper (https://popper.js.org)');\n      }\n\n      super(element); // private\n\n      this._isEnabled = true;\n      this._timeout = 0;\n      this._hoverState = '';\n      this._activeTrigger = {};\n      this._popper = null; // Protected\n\n      this._config = this._getConfig(config);\n      this.tip = null;\n\n      this._setListeners();\n    } // Getters\n\n\n    static get Default() {\n      return Default$3;\n    }\n\n    static get NAME() {\n      return NAME$4;\n    }\n\n    static get Event() {\n      return Event$2;\n    }\n\n    static get DefaultType() {\n      return DefaultType$3;\n    } // Public\n\n\n    enable() {\n      this._isEnabled = true;\n    }\n\n    disable() {\n      this._isEnabled = false;\n    }\n\n    toggleEnabled() {\n      this._isEnabled = !this._isEnabled;\n    }\n\n    toggle(event) {\n      if (!this._isEnabled) {\n        return;\n      }\n\n      if (event) {\n        const context = this._initializeOnDelegatedTarget(event);\n\n        context._activeTrigger.click = !context._activeTrigger.click;\n\n        if (context._isWithActiveTrigger()) {\n          context._enter(null, context);\n        } else {\n          context._leave(null, context);\n        }\n      } else {\n        if (this.getTipElement().classList.contains(CLASS_NAME_SHOW$3)) {\n          this._leave(null, this);\n\n          return;\n        }\n\n        this._enter(null, this);\n      }\n    }\n\n    dispose() {\n      clearTimeout(this._timeout);\n      EventHandler.off(this._element.closest(`.${CLASS_NAME_MODAL}`), 'hide.bs.modal', this._hideModalHandler);\n\n      if (this.tip) {\n        this.tip.remove();\n      }\n\n      if (this._popper) {\n        this._popper.destroy();\n      }\n\n      super.dispose();\n    }\n\n    show() {\n      if (this._element.style.display === 'none') {\n        throw new Error('Please use show on visible elements');\n      }\n\n      if (!(this.isWithContent() && this._isEnabled)) {\n        return;\n      }\n\n      const showEvent = EventHandler.trigger(this._element, this.constructor.Event.SHOW);\n      const shadowRoot = findShadowRoot(this._element);\n      const isInTheDom = shadowRoot === null ? this._element.ownerDocument.documentElement.contains(this._element) : shadowRoot.contains(this._element);\n\n      if (showEvent.defaultPrevented || !isInTheDom) {\n        return;\n      }\n\n      const tip = this.getTipElement();\n      const tipId = getUID(this.constructor.NAME);\n      tip.setAttribute('id', tipId);\n\n      this._element.setAttribute('aria-describedby', tipId);\n\n      this.setContent();\n\n      if (this._config.animation) {\n        tip.classList.add(CLASS_NAME_FADE$3);\n      }\n\n      const placement = typeof this._config.placement === 'function' ? this._config.placement.call(this, tip, this._element) : this._config.placement;\n\n      const attachment = this._getAttachment(placement);\n\n      this._addAttachmentClass(attachment);\n\n      const {\n        container\n      } = this._config;\n      Data.set(tip, this.constructor.DATA_KEY, this);\n\n      if (!this._element.ownerDocument.documentElement.contains(this.tip)) {\n        container.appendChild(tip);\n        EventHandler.trigger(this._element, this.constructor.Event.INSERTED);\n      }\n\n      if (this._popper) {\n        this._popper.update();\n      } else {\n        this._popper = createPopper(this._element, tip, this._getPopperConfig(attachment));\n      }\n\n      tip.classList.add(CLASS_NAME_SHOW$3);\n      const customClass = typeof this._config.customClass === 'function' ? this._config.customClass() : this._config.customClass;\n\n      if (customClass) {\n        tip.classList.add(...customClass.split(' '));\n      } // If this is a touch-enabled device we add extra\n      // empty mouseover listeners to the body's immediate children;\n      // only needed because of broken event delegation on iOS\n      // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n\n\n      if ('ontouchstart' in document.documentElement) {\n        [].concat(...document.body.children).forEach(element => {\n          EventHandler.on(element, 'mouseover', noop);\n        });\n      }\n\n      const complete = () => {\n        const prevHoverState = this._hoverState;\n        this._hoverState = null;\n        EventHandler.trigger(this._element, this.constructor.Event.SHOWN);\n\n        if (prevHoverState === HOVER_STATE_OUT) {\n          this._leave(null, this);\n        }\n      };\n\n      const isAnimated = this.tip.classList.contains(CLASS_NAME_FADE$3);\n\n      this._queueCallback(complete, this.tip, isAnimated);\n    }\n\n    hide() {\n      if (!this._popper) {\n        return;\n      }\n\n      const tip = this.getTipElement();\n\n      const complete = () => {\n        if (this._isWithActiveTrigger()) {\n          return;\n        }\n\n        if (this._hoverState !== HOVER_STATE_SHOW) {\n          tip.remove();\n        }\n\n        this._cleanTipClass();\n\n        this._element.removeAttribute('aria-describedby');\n\n        EventHandler.trigger(this._element, this.constructor.Event.HIDDEN);\n\n        if (this._popper) {\n          this._popper.destroy();\n\n          this._popper = null;\n        }\n      };\n\n      const hideEvent = EventHandler.trigger(this._element, this.constructor.Event.HIDE);\n\n      if (hideEvent.defaultPrevented) {\n        return;\n      }\n\n      tip.classList.remove(CLASS_NAME_SHOW$3); // If this is a touch-enabled device we remove the extra\n      // empty mouseover listeners we added for iOS support\n\n      if ('ontouchstart' in document.documentElement) {\n        [].concat(...document.body.children).forEach(element => EventHandler.off(element, 'mouseover', noop));\n      }\n\n      this._activeTrigger[TRIGGER_CLICK] = false;\n      this._activeTrigger[TRIGGER_FOCUS] = false;\n      this._activeTrigger[TRIGGER_HOVER] = false;\n      const isAnimated = this.tip.classList.contains(CLASS_NAME_FADE$3);\n\n      this._queueCallback(complete, this.tip, isAnimated);\n\n      this._hoverState = '';\n    }\n\n    update() {\n      if (this._popper !== null) {\n        this._popper.update();\n      }\n    } // Protected\n\n\n    isWithContent() {\n      return Boolean(this.getTitle());\n    }\n\n    getTipElement() {\n      if (this.tip) {\n        return this.tip;\n      }\n\n      const element = document.createElement('div');\n      element.innerHTML = this._config.template;\n      this.tip = element.children[0];\n      return this.tip;\n    }\n\n    setContent() {\n      const tip = this.getTipElement();\n      this.setElementContent(SelectorEngine.findOne(SELECTOR_TOOLTIP_INNER, tip), this.getTitle());\n      tip.classList.remove(CLASS_NAME_FADE$3, CLASS_NAME_SHOW$3);\n    }\n\n    setElementContent(element, content) {\n      if (element === null) {\n        return;\n      }\n\n      if (isElement$1(content)) {\n        content = getElement(content); // content is a DOM node or a jQuery\n\n        if (this._config.html) {\n          if (content.parentNode !== element) {\n            element.innerHTML = '';\n            element.appendChild(content);\n          }\n        } else {\n          element.textContent = content.textContent;\n        }\n\n        return;\n      }\n\n      if (this._config.html) {\n        if (this._config.sanitize) {\n          content = sanitizeHtml(content, this._config.allowList, this._config.sanitizeFn);\n        }\n\n        element.innerHTML = content;\n      } else {\n        element.textContent = content;\n      }\n    }\n\n    getTitle() {\n      let title = this._element.getAttribute('data-bs-original-title');\n\n      if (!title) {\n        title = typeof this._config.title === 'function' ? this._config.title.call(this._element) : this._config.title;\n      }\n\n      return title;\n    }\n\n    updateAttachment(attachment) {\n      if (attachment === 'right') {\n        return 'end';\n      }\n\n      if (attachment === 'left') {\n        return 'start';\n      }\n\n      return attachment;\n    } // Private\n\n\n    _initializeOnDelegatedTarget(event, context) {\n      const dataKey = this.constructor.DATA_KEY;\n      context = context || Data.get(event.delegateTarget, dataKey);\n\n      if (!context) {\n        context = new this.constructor(event.delegateTarget, this._getDelegateConfig());\n        Data.set(event.delegateTarget, dataKey, context);\n      }\n\n      return context;\n    }\n\n    _getOffset() {\n      const {\n        offset\n      } = this._config;\n\n      if (typeof offset === 'string') {\n        return offset.split(',').map(val => Number.parseInt(val, 10));\n      }\n\n      if (typeof offset === 'function') {\n        return popperData => offset(popperData, this._element);\n      }\n\n      return offset;\n    }\n\n    _getPopperConfig(attachment) {\n      const defaultBsPopperConfig = {\n        placement: attachment,\n        modifiers: [{\n          name: 'flip',\n          options: {\n            fallbackPlacements: this._config.fallbackPlacements\n          }\n        }, {\n          name: 'offset',\n          options: {\n            offset: this._getOffset()\n          }\n        }, {\n          name: 'preventOverflow',\n          options: {\n            boundary: this._config.boundary\n          }\n        }, {\n          name: 'arrow',\n          options: {\n            element: `.${this.constructor.NAME}-arrow`\n          }\n        }, {\n          name: 'onChange',\n          enabled: true,\n          phase: 'afterWrite',\n          fn: data => this._handlePopperPlacementChange(data)\n        }],\n        onFirstUpdate: data => {\n          if (data.options.placement !== data.placement) {\n            this._handlePopperPlacementChange(data);\n          }\n        }\n      };\n      return { ...defaultBsPopperConfig,\n        ...(typeof this._config.popperConfig === 'function' ? this._config.popperConfig(defaultBsPopperConfig) : this._config.popperConfig)\n      };\n    }\n\n    _addAttachmentClass(attachment) {\n      this.getTipElement().classList.add(`${CLASS_PREFIX$1}-${this.updateAttachment(attachment)}`);\n    }\n\n    _getAttachment(placement) {\n      return AttachmentMap[placement.toUpperCase()];\n    }\n\n    _setListeners() {\n      const triggers = this._config.trigger.split(' ');\n\n      triggers.forEach(trigger => {\n        if (trigger === 'click') {\n          EventHandler.on(this._element, this.constructor.Event.CLICK, this._config.selector, event => this.toggle(event));\n        } else if (trigger !== TRIGGER_MANUAL) {\n          const eventIn = trigger === TRIGGER_HOVER ? this.constructor.Event.MOUSEENTER : this.constructor.Event.FOCUSIN;\n          const eventOut = trigger === TRIGGER_HOVER ? this.constructor.Event.MOUSELEAVE : this.constructor.Event.FOCUSOUT;\n          EventHandler.on(this._element, eventIn, this._config.selector, event => this._enter(event));\n          EventHandler.on(this._element, eventOut, this._config.selector, event => this._leave(event));\n        }\n      });\n\n      this._hideModalHandler = () => {\n        if (this._element) {\n          this.hide();\n        }\n      };\n\n      EventHandler.on(this._element.closest(`.${CLASS_NAME_MODAL}`), 'hide.bs.modal', this._hideModalHandler);\n\n      if (this._config.selector) {\n        this._config = { ...this._config,\n          trigger: 'manual',\n          selector: ''\n        };\n      } else {\n        this._fixTitle();\n      }\n    }\n\n    _fixTitle() {\n      const title = this._element.getAttribute('title');\n\n      const originalTitleType = typeof this._element.getAttribute('data-bs-original-title');\n\n      if (title || originalTitleType !== 'string') {\n        this._element.setAttribute('data-bs-original-title', title || '');\n\n        if (title && !this._element.getAttribute('aria-label') && !this._element.textContent) {\n          this._element.setAttribute('aria-label', title);\n        }\n\n        this._element.setAttribute('title', '');\n      }\n    }\n\n    _enter(event, context) {\n      context = this._initializeOnDelegatedTarget(event, context);\n\n      if (event) {\n        context._activeTrigger[event.type === 'focusin' ? TRIGGER_FOCUS : TRIGGER_HOVER] = true;\n      }\n\n      if (context.getTipElement().classList.contains(CLASS_NAME_SHOW$3) || context._hoverState === HOVER_STATE_SHOW) {\n        context._hoverState = HOVER_STATE_SHOW;\n        return;\n      }\n\n      clearTimeout(context._timeout);\n      context._hoverState = HOVER_STATE_SHOW;\n\n      if (!context._config.delay || !context._config.delay.show) {\n        context.show();\n        return;\n      }\n\n      context._timeout = setTimeout(() => {\n        if (context._hoverState === HOVER_STATE_SHOW) {\n          context.show();\n        }\n      }, context._config.delay.show);\n    }\n\n    _leave(event, context) {\n      context = this._initializeOnDelegatedTarget(event, context);\n\n      if (event) {\n        context._activeTrigger[event.type === 'focusout' ? TRIGGER_FOCUS : TRIGGER_HOVER] = context._element.contains(event.relatedTarget);\n      }\n\n      if (context._isWithActiveTrigger()) {\n        return;\n      }\n\n      clearTimeout(context._timeout);\n      context._hoverState = HOVER_STATE_OUT;\n\n      if (!context._config.delay || !context._config.delay.hide) {\n        context.hide();\n        return;\n      }\n\n      context._timeout = setTimeout(() => {\n        if (context._hoverState === HOVER_STATE_OUT) {\n          context.hide();\n        }\n      }, context._config.delay.hide);\n    }\n\n    _isWithActiveTrigger() {\n      for (const trigger in this._activeTrigger) {\n        if (this._activeTrigger[trigger]) {\n          return true;\n        }\n      }\n\n      return false;\n    }\n\n    _getConfig(config) {\n      const dataAttributes = Manipulator.getDataAttributes(this._element);\n      Object.keys(dataAttributes).forEach(dataAttr => {\n        if (DISALLOWED_ATTRIBUTES.has(dataAttr)) {\n          delete dataAttributes[dataAttr];\n        }\n      });\n      config = { ...this.constructor.Default,\n        ...dataAttributes,\n        ...(typeof config === 'object' && config ? config : {})\n      };\n      config.container = config.container === false ? document.body : getElement(config.container);\n\n      if (typeof config.delay === 'number') {\n        config.delay = {\n          show: config.delay,\n          hide: config.delay\n        };\n      }\n\n      if (typeof config.title === 'number') {\n        config.title = config.title.toString();\n      }\n\n      if (typeof config.content === 'number') {\n        config.content = config.content.toString();\n      }\n\n      typeCheckConfig(NAME$4, config, this.constructor.DefaultType);\n\n      if (config.sanitize) {\n        config.template = sanitizeHtml(config.template, config.allowList, config.sanitizeFn);\n      }\n\n      return config;\n    }\n\n    _getDelegateConfig() {\n      const config = {};\n\n      if (this._config) {\n        for (const key in this._config) {\n          if (this.constructor.Default[key] !== this._config[key]) {\n            config[key] = this._config[key];\n          }\n        }\n      }\n\n      return config;\n    }\n\n    _cleanTipClass() {\n      const tip = this.getTipElement();\n      const tabClass = tip.getAttribute('class').match(BSCLS_PREFIX_REGEX$1);\n\n      if (tabClass !== null && tabClass.length > 0) {\n        tabClass.map(token => token.trim()).forEach(tClass => tip.classList.remove(tClass));\n      }\n    }\n\n    _handlePopperPlacementChange(popperData) {\n      const {\n        state\n      } = popperData;\n\n      if (!state) {\n        return;\n      }\n\n      this.tip = state.elements.popper;\n\n      this._cleanTipClass();\n\n      this._addAttachmentClass(this._getAttachment(state.placement));\n    } // Static\n\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = Tooltip.getOrCreateInstance(this, config);\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(`No method named \"${config}\"`);\n          }\n\n          data[config]();\n        }\n      });\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Tooltip to jQuery only if jQuery is present\n   */\n\n\n  defineJQueryPlugin(Tooltip);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): popover.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$3 = 'popover';\n  const DATA_KEY$3 = 'bs.popover';\n  const EVENT_KEY$3 = `.${DATA_KEY$3}`;\n  const CLASS_PREFIX = 'bs-popover';\n  const BSCLS_PREFIX_REGEX = new RegExp(`(^|\\\\s)${CLASS_PREFIX}\\\\S+`, 'g');\n  const Default$2 = { ...Tooltip.Default,\n    placement: 'right',\n    offset: [0, 8],\n    trigger: 'click',\n    content: '',\n    template: '<div class=\"popover\" role=\"tooltip\">' + '<div class=\"popover-arrow\"></div>' + '<h3 class=\"popover-header\"></h3>' + '<div class=\"popover-body\"></div>' + '</div>'\n  };\n  const DefaultType$2 = { ...Tooltip.DefaultType,\n    content: '(string|element|function)'\n  };\n  const Event$1 = {\n    HIDE: `hide${EVENT_KEY$3}`,\n    HIDDEN: `hidden${EVENT_KEY$3}`,\n    SHOW: `show${EVENT_KEY$3}`,\n    SHOWN: `shown${EVENT_KEY$3}`,\n    INSERTED: `inserted${EVENT_KEY$3}`,\n    CLICK: `click${EVENT_KEY$3}`,\n    FOCUSIN: `focusin${EVENT_KEY$3}`,\n    FOCUSOUT: `focusout${EVENT_KEY$3}`,\n    MOUSEENTER: `mouseenter${EVENT_KEY$3}`,\n    MOUSELEAVE: `mouseleave${EVENT_KEY$3}`\n  };\n  const CLASS_NAME_FADE$2 = 'fade';\n  const CLASS_NAME_SHOW$2 = 'show';\n  const SELECTOR_TITLE = '.popover-header';\n  const SELECTOR_CONTENT = '.popover-body';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Popover extends Tooltip {\n    // Getters\n    static get Default() {\n      return Default$2;\n    }\n\n    static get NAME() {\n      return NAME$3;\n    }\n\n    static get Event() {\n      return Event$1;\n    }\n\n    static get DefaultType() {\n      return DefaultType$2;\n    } // Overrides\n\n\n    isWithContent() {\n      return this.getTitle() || this._getContent();\n    }\n\n    getTipElement() {\n      if (this.tip) {\n        return this.tip;\n      }\n\n      this.tip = super.getTipElement();\n\n      if (!this.getTitle()) {\n        SelectorEngine.findOne(SELECTOR_TITLE, this.tip).remove();\n      }\n\n      if (!this._getContent()) {\n        SelectorEngine.findOne(SELECTOR_CONTENT, this.tip).remove();\n      }\n\n      return this.tip;\n    }\n\n    setContent() {\n      const tip = this.getTipElement(); // we use append for html objects to maintain js events\n\n      this.setElementContent(SelectorEngine.findOne(SELECTOR_TITLE, tip), this.getTitle());\n\n      let content = this._getContent();\n\n      if (typeof content === 'function') {\n        content = content.call(this._element);\n      }\n\n      this.setElementContent(SelectorEngine.findOne(SELECTOR_CONTENT, tip), content);\n      tip.classList.remove(CLASS_NAME_FADE$2, CLASS_NAME_SHOW$2);\n    } // Private\n\n\n    _addAttachmentClass(attachment) {\n      this.getTipElement().classList.add(`${CLASS_PREFIX}-${this.updateAttachment(attachment)}`);\n    }\n\n    _getContent() {\n      return this._element.getAttribute('data-bs-content') || this._config.content;\n    }\n\n    _cleanTipClass() {\n      const tip = this.getTipElement();\n      const tabClass = tip.getAttribute('class').match(BSCLS_PREFIX_REGEX);\n\n      if (tabClass !== null && tabClass.length > 0) {\n        tabClass.map(token => token.trim()).forEach(tClass => tip.classList.remove(tClass));\n      }\n    } // Static\n\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = Popover.getOrCreateInstance(this, config);\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(`No method named \"${config}\"`);\n          }\n\n          data[config]();\n        }\n      });\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Popover to jQuery only if jQuery is present\n   */\n\n\n  defineJQueryPlugin(Popover);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): scrollspy.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$2 = 'scrollspy';\n  const DATA_KEY$2 = 'bs.scrollspy';\n  const EVENT_KEY$2 = `.${DATA_KEY$2}`;\n  const DATA_API_KEY$1 = '.data-api';\n  const Default$1 = {\n    offset: 10,\n    method: 'auto',\n    target: ''\n  };\n  const DefaultType$1 = {\n    offset: 'number',\n    method: 'string',\n    target: '(string|element)'\n  };\n  const EVENT_ACTIVATE = `activate${EVENT_KEY$2}`;\n  const EVENT_SCROLL = `scroll${EVENT_KEY$2}`;\n  const EVENT_LOAD_DATA_API = `load${EVENT_KEY$2}${DATA_API_KEY$1}`;\n  const CLASS_NAME_DROPDOWN_ITEM = 'dropdown-item';\n  const CLASS_NAME_ACTIVE$1 = 'active';\n  const SELECTOR_DATA_SPY = '[data-bs-spy=\"scroll\"]';\n  const SELECTOR_NAV_LIST_GROUP$1 = '.nav, .list-group';\n  const SELECTOR_NAV_LINKS = '.nav-link';\n  const SELECTOR_NAV_ITEMS = '.nav-item';\n  const SELECTOR_LIST_ITEMS = '.list-group-item';\n  const SELECTOR_DROPDOWN$1 = '.dropdown';\n  const SELECTOR_DROPDOWN_TOGGLE$1 = '.dropdown-toggle';\n  const METHOD_OFFSET = 'offset';\n  const METHOD_POSITION = 'position';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class ScrollSpy extends BaseComponent {\n    constructor(element, config) {\n      super(element);\n      this._scrollElement = this._element.tagName === 'BODY' ? window : this._element;\n      this._config = this._getConfig(config);\n      this._selector = `${this._config.target} ${SELECTOR_NAV_LINKS}, ${this._config.target} ${SELECTOR_LIST_ITEMS}, ${this._config.target} .${CLASS_NAME_DROPDOWN_ITEM}`;\n      this._offsets = [];\n      this._targets = [];\n      this._activeTarget = null;\n      this._scrollHeight = 0;\n      EventHandler.on(this._scrollElement, EVENT_SCROLL, () => this._process());\n      this.refresh();\n\n      this._process();\n    } // Getters\n\n\n    static get Default() {\n      return Default$1;\n    }\n\n    static get NAME() {\n      return NAME$2;\n    } // Public\n\n\n    refresh() {\n      const autoMethod = this._scrollElement === this._scrollElement.window ? METHOD_OFFSET : METHOD_POSITION;\n      const offsetMethod = this._config.method === 'auto' ? autoMethod : this._config.method;\n      const offsetBase = offsetMethod === METHOD_POSITION ? this._getScrollTop() : 0;\n      this._offsets = [];\n      this._targets = [];\n      this._scrollHeight = this._getScrollHeight();\n      const targets = SelectorEngine.find(this._selector);\n      targets.map(element => {\n        const targetSelector = getSelectorFromElement(element);\n        const target = targetSelector ? SelectorEngine.findOne(targetSelector) : null;\n\n        if (target) {\n          const targetBCR = target.getBoundingClientRect();\n\n          if (targetBCR.width || targetBCR.height) {\n            return [Manipulator[offsetMethod](target).top + offsetBase, targetSelector];\n          }\n        }\n\n        return null;\n      }).filter(item => item).sort((a, b) => a[0] - b[0]).forEach(item => {\n        this._offsets.push(item[0]);\n\n        this._targets.push(item[1]);\n      });\n    }\n\n    dispose() {\n      EventHandler.off(this._scrollElement, EVENT_KEY$2);\n      super.dispose();\n    } // Private\n\n\n    _getConfig(config) {\n      config = { ...Default$1,\n        ...Manipulator.getDataAttributes(this._element),\n        ...(typeof config === 'object' && config ? config : {})\n      };\n\n      if (typeof config.target !== 'string' && isElement$1(config.target)) {\n        let {\n          id\n        } = config.target;\n\n        if (!id) {\n          id = getUID(NAME$2);\n          config.target.id = id;\n        }\n\n        config.target = `#${id}`;\n      }\n\n      typeCheckConfig(NAME$2, config, DefaultType$1);\n      return config;\n    }\n\n    _getScrollTop() {\n      return this._scrollElement === window ? this._scrollElement.pageYOffset : this._scrollElement.scrollTop;\n    }\n\n    _getScrollHeight() {\n      return this._scrollElement.scrollHeight || Math.max(document.body.scrollHeight, document.documentElement.scrollHeight);\n    }\n\n    _getOffsetHeight() {\n      return this._scrollElement === window ? window.innerHeight : this._scrollElement.getBoundingClientRect().height;\n    }\n\n    _process() {\n      const scrollTop = this._getScrollTop() + this._config.offset;\n\n      const scrollHeight = this._getScrollHeight();\n\n      const maxScroll = this._config.offset + scrollHeight - this._getOffsetHeight();\n\n      if (this._scrollHeight !== scrollHeight) {\n        this.refresh();\n      }\n\n      if (scrollTop >= maxScroll) {\n        const target = this._targets[this._targets.length - 1];\n\n        if (this._activeTarget !== target) {\n          this._activate(target);\n        }\n\n        return;\n      }\n\n      if (this._activeTarget && scrollTop < this._offsets[0] && this._offsets[0] > 0) {\n        this._activeTarget = null;\n\n        this._clear();\n\n        return;\n      }\n\n      for (let i = this._offsets.length; i--;) {\n        const isActiveTarget = this._activeTarget !== this._targets[i] && scrollTop >= this._offsets[i] && (typeof this._offsets[i + 1] === 'undefined' || scrollTop < this._offsets[i + 1]);\n\n        if (isActiveTarget) {\n          this._activate(this._targets[i]);\n        }\n      }\n    }\n\n    _activate(target) {\n      this._activeTarget = target;\n\n      this._clear();\n\n      const queries = this._selector.split(',').map(selector => `${selector}[data-bs-target=\"${target}\"],${selector}[href=\"${target}\"]`);\n\n      const link = SelectorEngine.findOne(queries.join(','));\n\n      if (link.classList.contains(CLASS_NAME_DROPDOWN_ITEM)) {\n        SelectorEngine.findOne(SELECTOR_DROPDOWN_TOGGLE$1, link.closest(SELECTOR_DROPDOWN$1)).classList.add(CLASS_NAME_ACTIVE$1);\n        link.classList.add(CLASS_NAME_ACTIVE$1);\n      } else {\n        // Set triggered link as active\n        link.classList.add(CLASS_NAME_ACTIVE$1);\n        SelectorEngine.parents(link, SELECTOR_NAV_LIST_GROUP$1).forEach(listGroup => {\n          // Set triggered links parents as active\n          // With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor\n          SelectorEngine.prev(listGroup, `${SELECTOR_NAV_LINKS}, ${SELECTOR_LIST_ITEMS}`).forEach(item => item.classList.add(CLASS_NAME_ACTIVE$1)); // Handle special case when .nav-link is inside .nav-item\n\n          SelectorEngine.prev(listGroup, SELECTOR_NAV_ITEMS).forEach(navItem => {\n            SelectorEngine.children(navItem, SELECTOR_NAV_LINKS).forEach(item => item.classList.add(CLASS_NAME_ACTIVE$1));\n          });\n        });\n      }\n\n      EventHandler.trigger(this._scrollElement, EVENT_ACTIVATE, {\n        relatedTarget: target\n      });\n    }\n\n    _clear() {\n      SelectorEngine.find(this._selector).filter(node => node.classList.contains(CLASS_NAME_ACTIVE$1)).forEach(node => node.classList.remove(CLASS_NAME_ACTIVE$1));\n    } // Static\n\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = ScrollSpy.getOrCreateInstance(this, config);\n\n        if (typeof config !== 'string') {\n          return;\n        }\n\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config]();\n      });\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n    SelectorEngine.find(SELECTOR_DATA_SPY).forEach(spy => new ScrollSpy(spy));\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .ScrollSpy to jQuery only if jQuery is present\n   */\n\n  defineJQueryPlugin(ScrollSpy);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): tab.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$1 = 'tab';\n  const DATA_KEY$1 = 'bs.tab';\n  const EVENT_KEY$1 = `.${DATA_KEY$1}`;\n  const DATA_API_KEY = '.data-api';\n  const EVENT_HIDE$1 = `hide${EVENT_KEY$1}`;\n  const EVENT_HIDDEN$1 = `hidden${EVENT_KEY$1}`;\n  const EVENT_SHOW$1 = `show${EVENT_KEY$1}`;\n  const EVENT_SHOWN$1 = `shown${EVENT_KEY$1}`;\n  const EVENT_CLICK_DATA_API = `click${EVENT_KEY$1}${DATA_API_KEY}`;\n  const CLASS_NAME_DROPDOWN_MENU = 'dropdown-menu';\n  const CLASS_NAME_ACTIVE = 'active';\n  const CLASS_NAME_FADE$1 = 'fade';\n  const CLASS_NAME_SHOW$1 = 'show';\n  const SELECTOR_DROPDOWN = '.dropdown';\n  const SELECTOR_NAV_LIST_GROUP = '.nav, .list-group';\n  const SELECTOR_ACTIVE = '.active';\n  const SELECTOR_ACTIVE_UL = ':scope > li > .active';\n  const SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"tab\"], [data-bs-toggle=\"pill\"], [data-bs-toggle=\"list\"]';\n  const SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle';\n  const SELECTOR_DROPDOWN_ACTIVE_CHILD = ':scope > .dropdown-menu .active';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Tab extends BaseComponent {\n    // Getters\n    static get NAME() {\n      return NAME$1;\n    } // Public\n\n\n    show() {\n      if (this._element.parentNode && this._element.parentNode.nodeType === Node.ELEMENT_NODE && this._element.classList.contains(CLASS_NAME_ACTIVE)) {\n        return;\n      }\n\n      let previous;\n      const target = getElementFromSelector(this._element);\n\n      const listElement = this._element.closest(SELECTOR_NAV_LIST_GROUP);\n\n      if (listElement) {\n        const itemSelector = listElement.nodeName === 'UL' || listElement.nodeName === 'OL' ? SELECTOR_ACTIVE_UL : SELECTOR_ACTIVE;\n        previous = SelectorEngine.find(itemSelector, listElement);\n        previous = previous[previous.length - 1];\n      }\n\n      const hideEvent = previous ? EventHandler.trigger(previous, EVENT_HIDE$1, {\n        relatedTarget: this._element\n      }) : null;\n      const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$1, {\n        relatedTarget: previous\n      });\n\n      if (showEvent.defaultPrevented || hideEvent !== null && hideEvent.defaultPrevented) {\n        return;\n      }\n\n      this._activate(this._element, listElement);\n\n      const complete = () => {\n        EventHandler.trigger(previous, EVENT_HIDDEN$1, {\n          relatedTarget: this._element\n        });\n        EventHandler.trigger(this._element, EVENT_SHOWN$1, {\n          relatedTarget: previous\n        });\n      };\n\n      if (target) {\n        this._activate(target, target.parentNode, complete);\n      } else {\n        complete();\n      }\n    } // Private\n\n\n    _activate(element, container, callback) {\n      const activeElements = container && (container.nodeName === 'UL' || container.nodeName === 'OL') ? SelectorEngine.find(SELECTOR_ACTIVE_UL, container) : SelectorEngine.children(container, SELECTOR_ACTIVE);\n      const active = activeElements[0];\n      const isTransitioning = callback && active && active.classList.contains(CLASS_NAME_FADE$1);\n\n      const complete = () => this._transitionComplete(element, active, callback);\n\n      if (active && isTransitioning) {\n        active.classList.remove(CLASS_NAME_SHOW$1);\n\n        this._queueCallback(complete, element, true);\n      } else {\n        complete();\n      }\n    }\n\n    _transitionComplete(element, active, callback) {\n      if (active) {\n        active.classList.remove(CLASS_NAME_ACTIVE);\n        const dropdownChild = SelectorEngine.findOne(SELECTOR_DROPDOWN_ACTIVE_CHILD, active.parentNode);\n\n        if (dropdownChild) {\n          dropdownChild.classList.remove(CLASS_NAME_ACTIVE);\n        }\n\n        if (active.getAttribute('role') === 'tab') {\n          active.setAttribute('aria-selected', false);\n        }\n      }\n\n      element.classList.add(CLASS_NAME_ACTIVE);\n\n      if (element.getAttribute('role') === 'tab') {\n        element.setAttribute('aria-selected', true);\n      }\n\n      reflow(element);\n\n      if (element.classList.contains(CLASS_NAME_FADE$1)) {\n        element.classList.add(CLASS_NAME_SHOW$1);\n      }\n\n      let parent = element.parentNode;\n\n      if (parent && parent.nodeName === 'LI') {\n        parent = parent.parentNode;\n      }\n\n      if (parent && parent.classList.contains(CLASS_NAME_DROPDOWN_MENU)) {\n        const dropdownElement = element.closest(SELECTOR_DROPDOWN);\n\n        if (dropdownElement) {\n          SelectorEngine.find(SELECTOR_DROPDOWN_TOGGLE, dropdownElement).forEach(dropdown => dropdown.classList.add(CLASS_NAME_ACTIVE));\n        }\n\n        element.setAttribute('aria-expanded', true);\n      }\n\n      if (callback) {\n        callback();\n      }\n    } // Static\n\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = Tab.getOrCreateInstance(this);\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(`No method named \"${config}\"`);\n          }\n\n          data[config]();\n        }\n      });\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n    if (['A', 'AREA'].includes(this.tagName)) {\n      event.preventDefault();\n    }\n\n    if (isDisabled(this)) {\n      return;\n    }\n\n    const data = Tab.getOrCreateInstance(this);\n    data.show();\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Tab to jQuery only if jQuery is present\n   */\n\n  defineJQueryPlugin(Tab);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): toast.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME = 'toast';\n  const DATA_KEY = 'bs.toast';\n  const EVENT_KEY = `.${DATA_KEY}`;\n  const EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY}`;\n  const EVENT_MOUSEOVER = `mouseover${EVENT_KEY}`;\n  const EVENT_MOUSEOUT = `mouseout${EVENT_KEY}`;\n  const EVENT_FOCUSIN = `focusin${EVENT_KEY}`;\n  const EVENT_FOCUSOUT = `focusout${EVENT_KEY}`;\n  const EVENT_HIDE = `hide${EVENT_KEY}`;\n  const EVENT_HIDDEN = `hidden${EVENT_KEY}`;\n  const EVENT_SHOW = `show${EVENT_KEY}`;\n  const EVENT_SHOWN = `shown${EVENT_KEY}`;\n  const CLASS_NAME_FADE = 'fade';\n  const CLASS_NAME_HIDE = 'hide';\n  const CLASS_NAME_SHOW = 'show';\n  const CLASS_NAME_SHOWING = 'showing';\n  const DefaultType = {\n    animation: 'boolean',\n    autohide: 'boolean',\n    delay: 'number'\n  };\n  const Default = {\n    animation: true,\n    autohide: true,\n    delay: 5000\n  };\n  const SELECTOR_DATA_DISMISS = '[data-bs-dismiss=\"toast\"]';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Toast extends BaseComponent {\n    constructor(element, config) {\n      super(element);\n      this._config = this._getConfig(config);\n      this._timeout = null;\n      this._hasMouseInteraction = false;\n      this._hasKeyboardInteraction = false;\n\n      this._setListeners();\n    } // Getters\n\n\n    static get DefaultType() {\n      return DefaultType;\n    }\n\n    static get Default() {\n      return Default;\n    }\n\n    static get NAME() {\n      return NAME;\n    } // Public\n\n\n    show() {\n      const showEvent = EventHandler.trigger(this._element, EVENT_SHOW);\n\n      if (showEvent.defaultPrevented) {\n        return;\n      }\n\n      this._clearTimeout();\n\n      if (this._config.animation) {\n        this._element.classList.add(CLASS_NAME_FADE);\n      }\n\n      const complete = () => {\n        this._element.classList.remove(CLASS_NAME_SHOWING);\n\n        this._element.classList.add(CLASS_NAME_SHOW);\n\n        EventHandler.trigger(this._element, EVENT_SHOWN);\n\n        this._maybeScheduleHide();\n      };\n\n      this._element.classList.remove(CLASS_NAME_HIDE);\n\n      reflow(this._element);\n\n      this._element.classList.add(CLASS_NAME_SHOWING);\n\n      this._queueCallback(complete, this._element, this._config.animation);\n    }\n\n    hide() {\n      if (!this._element.classList.contains(CLASS_NAME_SHOW)) {\n        return;\n      }\n\n      const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE);\n\n      if (hideEvent.defaultPrevented) {\n        return;\n      }\n\n      const complete = () => {\n        this._element.classList.add(CLASS_NAME_HIDE);\n\n        EventHandler.trigger(this._element, EVENT_HIDDEN);\n      };\n\n      this._element.classList.remove(CLASS_NAME_SHOW);\n\n      this._queueCallback(complete, this._element, this._config.animation);\n    }\n\n    dispose() {\n      this._clearTimeout();\n\n      if (this._element.classList.contains(CLASS_NAME_SHOW)) {\n        this._element.classList.remove(CLASS_NAME_SHOW);\n      }\n\n      super.dispose();\n    } // Private\n\n\n    _getConfig(config) {\n      config = { ...Default,\n        ...Manipulator.getDataAttributes(this._element),\n        ...(typeof config === 'object' && config ? config : {})\n      };\n      typeCheckConfig(NAME, config, this.constructor.DefaultType);\n      return config;\n    }\n\n    _maybeScheduleHide() {\n      if (!this._config.autohide) {\n        return;\n      }\n\n      if (this._hasMouseInteraction || this._hasKeyboardInteraction) {\n        return;\n      }\n\n      this._timeout = setTimeout(() => {\n        this.hide();\n      }, this._config.delay);\n    }\n\n    _onInteraction(event, isInteracting) {\n      switch (event.type) {\n        case 'mouseover':\n        case 'mouseout':\n          this._hasMouseInteraction = isInteracting;\n          break;\n\n        case 'focusin':\n        case 'focusout':\n          this._hasKeyboardInteraction = isInteracting;\n          break;\n      }\n\n      if (isInteracting) {\n        this._clearTimeout();\n\n        return;\n      }\n\n      const nextElement = event.relatedTarget;\n\n      if (this._element === nextElement || this._element.contains(nextElement)) {\n        return;\n      }\n\n      this._maybeScheduleHide();\n    }\n\n    _setListeners() {\n      EventHandler.on(this._element, EVENT_CLICK_DISMISS, SELECTOR_DATA_DISMISS, () => this.hide());\n      EventHandler.on(this._element, EVENT_MOUSEOVER, event => this._onInteraction(event, true));\n      EventHandler.on(this._element, EVENT_MOUSEOUT, event => this._onInteraction(event, false));\n      EventHandler.on(this._element, EVENT_FOCUSIN, event => this._onInteraction(event, true));\n      EventHandler.on(this._element, EVENT_FOCUSOUT, event => this._onInteraction(event, false));\n    }\n\n    _clearTimeout() {\n      clearTimeout(this._timeout);\n      this._timeout = null;\n    } // Static\n\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = Toast.getOrCreateInstance(this, config);\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(`No method named \"${config}\"`);\n          }\n\n          data[config](this);\n        }\n      });\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Toast to jQuery only if jQuery is present\n   */\n\n\n  defineJQueryPlugin(Toast);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): index.umd.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  var index_umd = {\n    Alert,\n    Button,\n    Carousel,\n    Collapse,\n    Dropdown,\n    Modal,\n    Offcanvas,\n    Popover,\n    ScrollSpy,\n    Tab,\n    Toast,\n    Tooltip\n  };\n\n  return index_umd;\n\n})));\n//# sourceMappingURL=bootstrap.bundle.js.map\n"
  },
  {
    "path": "src/sourceDev.WebApp/SharedThemes/yeti/wwwroot/js/bootstrap.esm.js",
    "content": "/*!\n  * Bootstrap v5.0.2 (https://getbootstrap.com/)\n  * Copyright 2011-2021 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)\n  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n  */\nimport * as Popper from '@popperjs/core';\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): dom/selector-engine.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\nconst NODE_TEXT = 3;\nconst SelectorEngine = {\n  find(selector, element = document.documentElement) {\n    return [].concat(...Element.prototype.querySelectorAll.call(element, selector));\n  },\n\n  findOne(selector, element = document.documentElement) {\n    return Element.prototype.querySelector.call(element, selector);\n  },\n\n  children(element, selector) {\n    return [].concat(...element.children).filter(child => child.matches(selector));\n  },\n\n  parents(element, selector) {\n    const parents = [];\n    let ancestor = element.parentNode;\n\n    while (ancestor && ancestor.nodeType === Node.ELEMENT_NODE && ancestor.nodeType !== NODE_TEXT) {\n      if (ancestor.matches(selector)) {\n        parents.push(ancestor);\n      }\n\n      ancestor = ancestor.parentNode;\n    }\n\n    return parents;\n  },\n\n  prev(element, selector) {\n    let previous = element.previousElementSibling;\n\n    while (previous) {\n      if (previous.matches(selector)) {\n        return [previous];\n      }\n\n      previous = previous.previousElementSibling;\n    }\n\n    return [];\n  },\n\n  next(element, selector) {\n    let next = element.nextElementSibling;\n\n    while (next) {\n      if (next.matches(selector)) {\n        return [next];\n      }\n\n      next = next.nextElementSibling;\n    }\n\n    return [];\n  }\n\n};\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): util/index.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst MAX_UID = 1000000;\nconst MILLISECONDS_MULTIPLIER = 1000;\nconst TRANSITION_END = 'transitionend'; // Shoutout AngusCroll (https://goo.gl/pxwQGp)\n\nconst toType = obj => {\n  if (obj === null || obj === undefined) {\n    return `${obj}`;\n  }\n\n  return {}.toString.call(obj).match(/\\s([a-z]+)/i)[1].toLowerCase();\n};\n/**\n * --------------------------------------------------------------------------\n * Public Util Api\n * --------------------------------------------------------------------------\n */\n\n\nconst getUID = prefix => {\n  do {\n    prefix += Math.floor(Math.random() * MAX_UID);\n  } while (document.getElementById(prefix));\n\n  return prefix;\n};\n\nconst getSelector = element => {\n  let selector = element.getAttribute('data-bs-target');\n\n  if (!selector || selector === '#') {\n    let hrefAttr = element.getAttribute('href'); // The only valid content that could double as a selector are IDs or classes,\n    // so everything starting with `#` or `.`. If a \"real\" URL is used as the selector,\n    // `document.querySelector` will rightfully complain it is invalid.\n    // See https://github.com/twbs/bootstrap/issues/32273\n\n    if (!hrefAttr || !hrefAttr.includes('#') && !hrefAttr.startsWith('.')) {\n      return null;\n    } // Just in case some CMS puts out a full URL with the anchor appended\n\n\n    if (hrefAttr.includes('#') && !hrefAttr.startsWith('#')) {\n      hrefAttr = `#${hrefAttr.split('#')[1]}`;\n    }\n\n    selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : null;\n  }\n\n  return selector;\n};\n\nconst getSelectorFromElement = element => {\n  const selector = getSelector(element);\n\n  if (selector) {\n    return document.querySelector(selector) ? selector : null;\n  }\n\n  return null;\n};\n\nconst getElementFromSelector = element => {\n  const selector = getSelector(element);\n  return selector ? document.querySelector(selector) : null;\n};\n\nconst getTransitionDurationFromElement = element => {\n  if (!element) {\n    return 0;\n  } // Get transition-duration of the element\n\n\n  let {\n    transitionDuration,\n    transitionDelay\n  } = window.getComputedStyle(element);\n  const floatTransitionDuration = Number.parseFloat(transitionDuration);\n  const floatTransitionDelay = Number.parseFloat(transitionDelay); // Return 0 if element or transition duration is not found\n\n  if (!floatTransitionDuration && !floatTransitionDelay) {\n    return 0;\n  } // If multiple durations are defined, take the first\n\n\n  transitionDuration = transitionDuration.split(',')[0];\n  transitionDelay = transitionDelay.split(',')[0];\n  return (Number.parseFloat(transitionDuration) + Number.parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER;\n};\n\nconst triggerTransitionEnd = element => {\n  element.dispatchEvent(new Event(TRANSITION_END));\n};\n\nconst isElement = obj => {\n  if (!obj || typeof obj !== 'object') {\n    return false;\n  }\n\n  if (typeof obj.jquery !== 'undefined') {\n    obj = obj[0];\n  }\n\n  return typeof obj.nodeType !== 'undefined';\n};\n\nconst getElement = obj => {\n  if (isElement(obj)) {\n    // it's a jQuery object or a node element\n    return obj.jquery ? obj[0] : obj;\n  }\n\n  if (typeof obj === 'string' && obj.length > 0) {\n    return SelectorEngine.findOne(obj);\n  }\n\n  return null;\n};\n\nconst typeCheckConfig = (componentName, config, configTypes) => {\n  Object.keys(configTypes).forEach(property => {\n    const expectedTypes = configTypes[property];\n    const value = config[property];\n    const valueType = value && isElement(value) ? 'element' : toType(value);\n\n    if (!new RegExp(expectedTypes).test(valueType)) {\n      throw new TypeError(`${componentName.toUpperCase()}: Option \"${property}\" provided type \"${valueType}\" but expected type \"${expectedTypes}\".`);\n    }\n  });\n};\n\nconst isVisible = element => {\n  if (!isElement(element) || element.getClientRects().length === 0) {\n    return false;\n  }\n\n  return getComputedStyle(element).getPropertyValue('visibility') === 'visible';\n};\n\nconst isDisabled = element => {\n  if (!element || element.nodeType !== Node.ELEMENT_NODE) {\n    return true;\n  }\n\n  if (element.classList.contains('disabled')) {\n    return true;\n  }\n\n  if (typeof element.disabled !== 'undefined') {\n    return element.disabled;\n  }\n\n  return element.hasAttribute('disabled') && element.getAttribute('disabled') !== 'false';\n};\n\nconst findShadowRoot = element => {\n  if (!document.documentElement.attachShadow) {\n    return null;\n  } // Can find the shadow root otherwise it'll return the document\n\n\n  if (typeof element.getRootNode === 'function') {\n    const root = element.getRootNode();\n    return root instanceof ShadowRoot ? root : null;\n  }\n\n  if (element instanceof ShadowRoot) {\n    return element;\n  } // when we don't find a shadow root\n\n\n  if (!element.parentNode) {\n    return null;\n  }\n\n  return findShadowRoot(element.parentNode);\n};\n\nconst noop = () => {};\n\nconst reflow = element => element.offsetHeight;\n\nconst getjQuery = () => {\n  const {\n    jQuery\n  } = window;\n\n  if (jQuery && !document.body.hasAttribute('data-bs-no-jquery')) {\n    return jQuery;\n  }\n\n  return null;\n};\n\nconst DOMContentLoadedCallbacks = [];\n\nconst onDOMContentLoaded = callback => {\n  if (document.readyState === 'loading') {\n    // add listener on the first call when the document is in loading state\n    if (!DOMContentLoadedCallbacks.length) {\n      document.addEventListener('DOMContentLoaded', () => {\n        DOMContentLoadedCallbacks.forEach(callback => callback());\n      });\n    }\n\n    DOMContentLoadedCallbacks.push(callback);\n  } else {\n    callback();\n  }\n};\n\nconst isRTL = () => document.documentElement.dir === 'rtl';\n\nconst defineJQueryPlugin = plugin => {\n  onDOMContentLoaded(() => {\n    const $ = getjQuery();\n    /* istanbul ignore if */\n\n    if ($) {\n      const name = plugin.NAME;\n      const JQUERY_NO_CONFLICT = $.fn[name];\n      $.fn[name] = plugin.jQueryInterface;\n      $.fn[name].Constructor = plugin;\n\n      $.fn[name].noConflict = () => {\n        $.fn[name] = JQUERY_NO_CONFLICT;\n        return plugin.jQueryInterface;\n      };\n    }\n  });\n};\n\nconst execute = callback => {\n  if (typeof callback === 'function') {\n    callback();\n  }\n};\n\nconst executeAfterTransition = (callback, transitionElement, waitForTransition = true) => {\n  if (!waitForTransition) {\n    execute(callback);\n    return;\n  }\n\n  const durationPadding = 5;\n  const emulatedDuration = getTransitionDurationFromElement(transitionElement) + durationPadding;\n  let called = false;\n\n  const handler = ({\n    target\n  }) => {\n    if (target !== transitionElement) {\n      return;\n    }\n\n    called = true;\n    transitionElement.removeEventListener(TRANSITION_END, handler);\n    execute(callback);\n  };\n\n  transitionElement.addEventListener(TRANSITION_END, handler);\n  setTimeout(() => {\n    if (!called) {\n      triggerTransitionEnd(transitionElement);\n    }\n  }, emulatedDuration);\n};\n/**\n * Return the previous/next element of a list.\n *\n * @param {array} list    The list of elements\n * @param activeElement   The active element\n * @param shouldGetNext   Choose to get next or previous element\n * @param isCycleAllowed\n * @return {Element|elem} The proper element\n */\n\n\nconst getNextActiveElement = (list, activeElement, shouldGetNext, isCycleAllowed) => {\n  let index = list.indexOf(activeElement); // if the element does not exist in the list return an element depending on the direction and if cycle is allowed\n\n  if (index === -1) {\n    return list[!shouldGetNext && isCycleAllowed ? list.length - 1 : 0];\n  }\n\n  const listLength = list.length;\n  index += shouldGetNext ? 1 : -1;\n\n  if (isCycleAllowed) {\n    index = (index + listLength) % listLength;\n  }\n\n  return list[Math.max(0, Math.min(index, listLength - 1))];\n};\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): dom/event-handler.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst namespaceRegex = /[^.]*(?=\\..*)\\.|.*/;\nconst stripNameRegex = /\\..*/;\nconst stripUidRegex = /::\\d+$/;\nconst eventRegistry = {}; // Events storage\n\nlet uidEvent = 1;\nconst customEvents = {\n  mouseenter: 'mouseover',\n  mouseleave: 'mouseout'\n};\nconst customEventsRegex = /^(mouseenter|mouseleave)/i;\nconst nativeEvents = new Set(['click', 'dblclick', 'mouseup', 'mousedown', 'contextmenu', 'mousewheel', 'DOMMouseScroll', 'mouseover', 'mouseout', 'mousemove', 'selectstart', 'selectend', 'keydown', 'keypress', 'keyup', 'orientationchange', 'touchstart', 'touchmove', 'touchend', 'touchcancel', 'pointerdown', 'pointermove', 'pointerup', 'pointerleave', 'pointercancel', 'gesturestart', 'gesturechange', 'gestureend', 'focus', 'blur', 'change', 'reset', 'select', 'submit', 'focusin', 'focusout', 'load', 'unload', 'beforeunload', 'resize', 'move', 'DOMContentLoaded', 'readystatechange', 'error', 'abort', 'scroll']);\n/**\n * ------------------------------------------------------------------------\n * Private methods\n * ------------------------------------------------------------------------\n */\n\nfunction getUidEvent(element, uid) {\n  return uid && `${uid}::${uidEvent++}` || element.uidEvent || uidEvent++;\n}\n\nfunction getEvent(element) {\n  const uid = getUidEvent(element);\n  element.uidEvent = uid;\n  eventRegistry[uid] = eventRegistry[uid] || {};\n  return eventRegistry[uid];\n}\n\nfunction bootstrapHandler(element, fn) {\n  return function handler(event) {\n    event.delegateTarget = element;\n\n    if (handler.oneOff) {\n      EventHandler.off(element, event.type, fn);\n    }\n\n    return fn.apply(element, [event]);\n  };\n}\n\nfunction bootstrapDelegationHandler(element, selector, fn) {\n  return function handler(event) {\n    const domElements = element.querySelectorAll(selector);\n\n    for (let {\n      target\n    } = event; target && target !== this; target = target.parentNode) {\n      for (let i = domElements.length; i--;) {\n        if (domElements[i] === target) {\n          event.delegateTarget = target;\n\n          if (handler.oneOff) {\n            // eslint-disable-next-line unicorn/consistent-destructuring\n            EventHandler.off(element, event.type, selector, fn);\n          }\n\n          return fn.apply(target, [event]);\n        }\n      }\n    } // To please ESLint\n\n\n    return null;\n  };\n}\n\nfunction findHandler(events, handler, delegationSelector = null) {\n  const uidEventList = Object.keys(events);\n\n  for (let i = 0, len = uidEventList.length; i < len; i++) {\n    const event = events[uidEventList[i]];\n\n    if (event.originalHandler === handler && event.delegationSelector === delegationSelector) {\n      return event;\n    }\n  }\n\n  return null;\n}\n\nfunction normalizeParams(originalTypeEvent, handler, delegationFn) {\n  const delegation = typeof handler === 'string';\n  const originalHandler = delegation ? delegationFn : handler;\n  let typeEvent = getTypeEvent(originalTypeEvent);\n  const isNative = nativeEvents.has(typeEvent);\n\n  if (!isNative) {\n    typeEvent = originalTypeEvent;\n  }\n\n  return [delegation, originalHandler, typeEvent];\n}\n\nfunction addHandler(element, originalTypeEvent, handler, delegationFn, oneOff) {\n  if (typeof originalTypeEvent !== 'string' || !element) {\n    return;\n  }\n\n  if (!handler) {\n    handler = delegationFn;\n    delegationFn = null;\n  } // in case of mouseenter or mouseleave wrap the handler within a function that checks for its DOM position\n  // this prevents the handler from being dispatched the same way as mouseover or mouseout does\n\n\n  if (customEventsRegex.test(originalTypeEvent)) {\n    const wrapFn = fn => {\n      return function (event) {\n        if (!event.relatedTarget || event.relatedTarget !== event.delegateTarget && !event.delegateTarget.contains(event.relatedTarget)) {\n          return fn.call(this, event);\n        }\n      };\n    };\n\n    if (delegationFn) {\n      delegationFn = wrapFn(delegationFn);\n    } else {\n      handler = wrapFn(handler);\n    }\n  }\n\n  const [delegation, originalHandler, typeEvent] = normalizeParams(originalTypeEvent, handler, delegationFn);\n  const events = getEvent(element);\n  const handlers = events[typeEvent] || (events[typeEvent] = {});\n  const previousFn = findHandler(handlers, originalHandler, delegation ? handler : null);\n\n  if (previousFn) {\n    previousFn.oneOff = previousFn.oneOff && oneOff;\n    return;\n  }\n\n  const uid = getUidEvent(originalHandler, originalTypeEvent.replace(namespaceRegex, ''));\n  const fn = delegation ? bootstrapDelegationHandler(element, handler, delegationFn) : bootstrapHandler(element, handler);\n  fn.delegationSelector = delegation ? handler : null;\n  fn.originalHandler = originalHandler;\n  fn.oneOff = oneOff;\n  fn.uidEvent = uid;\n  handlers[uid] = fn;\n  element.addEventListener(typeEvent, fn, delegation);\n}\n\nfunction removeHandler(element, events, typeEvent, handler, delegationSelector) {\n  const fn = findHandler(events[typeEvent], handler, delegationSelector);\n\n  if (!fn) {\n    return;\n  }\n\n  element.removeEventListener(typeEvent, fn, Boolean(delegationSelector));\n  delete events[typeEvent][fn.uidEvent];\n}\n\nfunction removeNamespacedHandlers(element, events, typeEvent, namespace) {\n  const storeElementEvent = events[typeEvent] || {};\n  Object.keys(storeElementEvent).forEach(handlerKey => {\n    if (handlerKey.includes(namespace)) {\n      const event = storeElementEvent[handlerKey];\n      removeHandler(element, events, typeEvent, event.originalHandler, event.delegationSelector);\n    }\n  });\n}\n\nfunction getTypeEvent(event) {\n  // allow to get the native events from namespaced events ('click.bs.button' --> 'click')\n  event = event.replace(stripNameRegex, '');\n  return customEvents[event] || event;\n}\n\nconst EventHandler = {\n  on(element, event, handler, delegationFn) {\n    addHandler(element, event, handler, delegationFn, false);\n  },\n\n  one(element, event, handler, delegationFn) {\n    addHandler(element, event, handler, delegationFn, true);\n  },\n\n  off(element, originalTypeEvent, handler, delegationFn) {\n    if (typeof originalTypeEvent !== 'string' || !element) {\n      return;\n    }\n\n    const [delegation, originalHandler, typeEvent] = normalizeParams(originalTypeEvent, handler, delegationFn);\n    const inNamespace = typeEvent !== originalTypeEvent;\n    const events = getEvent(element);\n    const isNamespace = originalTypeEvent.startsWith('.');\n\n    if (typeof originalHandler !== 'undefined') {\n      // Simplest case: handler is passed, remove that listener ONLY.\n      if (!events || !events[typeEvent]) {\n        return;\n      }\n\n      removeHandler(element, events, typeEvent, originalHandler, delegation ? handler : null);\n      return;\n    }\n\n    if (isNamespace) {\n      Object.keys(events).forEach(elementEvent => {\n        removeNamespacedHandlers(element, events, elementEvent, originalTypeEvent.slice(1));\n      });\n    }\n\n    const storeElementEvent = events[typeEvent] || {};\n    Object.keys(storeElementEvent).forEach(keyHandlers => {\n      const handlerKey = keyHandlers.replace(stripUidRegex, '');\n\n      if (!inNamespace || originalTypeEvent.includes(handlerKey)) {\n        const event = storeElementEvent[keyHandlers];\n        removeHandler(element, events, typeEvent, event.originalHandler, event.delegationSelector);\n      }\n    });\n  },\n\n  trigger(element, event, args) {\n    if (typeof event !== 'string' || !element) {\n      return null;\n    }\n\n    const $ = getjQuery();\n    const typeEvent = getTypeEvent(event);\n    const inNamespace = event !== typeEvent;\n    const isNative = nativeEvents.has(typeEvent);\n    let jQueryEvent;\n    let bubbles = true;\n    let nativeDispatch = true;\n    let defaultPrevented = false;\n    let evt = null;\n\n    if (inNamespace && $) {\n      jQueryEvent = $.Event(event, args);\n      $(element).trigger(jQueryEvent);\n      bubbles = !jQueryEvent.isPropagationStopped();\n      nativeDispatch = !jQueryEvent.isImmediatePropagationStopped();\n      defaultPrevented = jQueryEvent.isDefaultPrevented();\n    }\n\n    if (isNative) {\n      evt = document.createEvent('HTMLEvents');\n      evt.initEvent(typeEvent, bubbles, true);\n    } else {\n      evt = new CustomEvent(event, {\n        bubbles,\n        cancelable: true\n      });\n    } // merge custom information in our event\n\n\n    if (typeof args !== 'undefined') {\n      Object.keys(args).forEach(key => {\n        Object.defineProperty(evt, key, {\n          get() {\n            return args[key];\n          }\n\n        });\n      });\n    }\n\n    if (defaultPrevented) {\n      evt.preventDefault();\n    }\n\n    if (nativeDispatch) {\n      element.dispatchEvent(evt);\n    }\n\n    if (evt.defaultPrevented && typeof jQueryEvent !== 'undefined') {\n      jQueryEvent.preventDefault();\n    }\n\n    return evt;\n  }\n\n};\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): dom/data.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\nconst elementMap = new Map();\nvar Data = {\n  set(element, key, instance) {\n    if (!elementMap.has(element)) {\n      elementMap.set(element, new Map());\n    }\n\n    const instanceMap = elementMap.get(element); // make it clear we only want one instance per element\n    // can be removed later when multiple key/instances are fine to be used\n\n    if (!instanceMap.has(key) && instanceMap.size !== 0) {\n      // eslint-disable-next-line no-console\n      console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(instanceMap.keys())[0]}.`);\n      return;\n    }\n\n    instanceMap.set(key, instance);\n  },\n\n  get(element, key) {\n    if (elementMap.has(element)) {\n      return elementMap.get(element).get(key) || null;\n    }\n\n    return null;\n  },\n\n  remove(element, key) {\n    if (!elementMap.has(element)) {\n      return;\n    }\n\n    const instanceMap = elementMap.get(element);\n    instanceMap.delete(key); // free up element references if there are no instances left for an element\n\n    if (instanceMap.size === 0) {\n      elementMap.delete(element);\n    }\n  }\n\n};\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): base-component.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst VERSION = '5.0.2';\n\nclass BaseComponent {\n  constructor(element) {\n    element = getElement(element);\n\n    if (!element) {\n      return;\n    }\n\n    this._element = element;\n    Data.set(this._element, this.constructor.DATA_KEY, this);\n  }\n\n  dispose() {\n    Data.remove(this._element, this.constructor.DATA_KEY);\n    EventHandler.off(this._element, this.constructor.EVENT_KEY);\n    Object.getOwnPropertyNames(this).forEach(propertyName => {\n      this[propertyName] = null;\n    });\n  }\n\n  _queueCallback(callback, element, isAnimated = true) {\n    executeAfterTransition(callback, element, isAnimated);\n  }\n  /** Static */\n\n\n  static getInstance(element) {\n    return Data.get(element, this.DATA_KEY);\n  }\n\n  static getOrCreateInstance(element, config = {}) {\n    return this.getInstance(element) || new this(element, typeof config === 'object' ? config : null);\n  }\n\n  static get VERSION() {\n    return VERSION;\n  }\n\n  static get NAME() {\n    throw new Error('You have to implement the static method \"NAME\", for each component!');\n  }\n\n  static get DATA_KEY() {\n    return `bs.${this.NAME}`;\n  }\n\n  static get EVENT_KEY() {\n    return `.${this.DATA_KEY}`;\n  }\n\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): alert.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$c = 'alert';\nconst DATA_KEY$b = 'bs.alert';\nconst EVENT_KEY$b = `.${DATA_KEY$b}`;\nconst DATA_API_KEY$8 = '.data-api';\nconst SELECTOR_DISMISS = '[data-bs-dismiss=\"alert\"]';\nconst EVENT_CLOSE = `close${EVENT_KEY$b}`;\nconst EVENT_CLOSED = `closed${EVENT_KEY$b}`;\nconst EVENT_CLICK_DATA_API$7 = `click${EVENT_KEY$b}${DATA_API_KEY$8}`;\nconst CLASS_NAME_ALERT = 'alert';\nconst CLASS_NAME_FADE$6 = 'fade';\nconst CLASS_NAME_SHOW$9 = 'show';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Alert extends BaseComponent {\n  // Getters\n  static get NAME() {\n    return NAME$c;\n  } // Public\n\n\n  close(element) {\n    const rootElement = element ? this._getRootElement(element) : this._element;\n\n    const customEvent = this._triggerCloseEvent(rootElement);\n\n    if (customEvent === null || customEvent.defaultPrevented) {\n      return;\n    }\n\n    this._removeElement(rootElement);\n  } // Private\n\n\n  _getRootElement(element) {\n    return getElementFromSelector(element) || element.closest(`.${CLASS_NAME_ALERT}`);\n  }\n\n  _triggerCloseEvent(element) {\n    return EventHandler.trigger(element, EVENT_CLOSE);\n  }\n\n  _removeElement(element) {\n    element.classList.remove(CLASS_NAME_SHOW$9);\n    const isAnimated = element.classList.contains(CLASS_NAME_FADE$6);\n\n    this._queueCallback(() => this._destroyElement(element), element, isAnimated);\n  }\n\n  _destroyElement(element) {\n    element.remove();\n    EventHandler.trigger(element, EVENT_CLOSED);\n  } // Static\n\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Alert.getOrCreateInstance(this);\n\n      if (config === 'close') {\n        data[config](this);\n      }\n    });\n  }\n\n  static handleDismiss(alertInstance) {\n    return function (event) {\n      if (event) {\n        event.preventDefault();\n      }\n\n      alertInstance.close(this);\n    };\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$7, SELECTOR_DISMISS, Alert.handleDismiss(new Alert()));\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Alert to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Alert);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): button.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$b = 'button';\nconst DATA_KEY$a = 'bs.button';\nconst EVENT_KEY$a = `.${DATA_KEY$a}`;\nconst DATA_API_KEY$7 = '.data-api';\nconst CLASS_NAME_ACTIVE$3 = 'active';\nconst SELECTOR_DATA_TOGGLE$5 = '[data-bs-toggle=\"button\"]';\nconst EVENT_CLICK_DATA_API$6 = `click${EVENT_KEY$a}${DATA_API_KEY$7}`;\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Button extends BaseComponent {\n  // Getters\n  static get NAME() {\n    return NAME$b;\n  } // Public\n\n\n  toggle() {\n    // Toggle class and sync the `aria-pressed` attribute with the return value of the `.toggle()` method\n    this._element.setAttribute('aria-pressed', this._element.classList.toggle(CLASS_NAME_ACTIVE$3));\n  } // Static\n\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Button.getOrCreateInstance(this);\n\n      if (config === 'toggle') {\n        data[config]();\n      }\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$6, SELECTOR_DATA_TOGGLE$5, event => {\n  event.preventDefault();\n  const button = event.target.closest(SELECTOR_DATA_TOGGLE$5);\n  const data = Button.getOrCreateInstance(button);\n  data.toggle();\n});\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Button to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Button);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): dom/manipulator.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\nfunction normalizeData(val) {\n  if (val === 'true') {\n    return true;\n  }\n\n  if (val === 'false') {\n    return false;\n  }\n\n  if (val === Number(val).toString()) {\n    return Number(val);\n  }\n\n  if (val === '' || val === 'null') {\n    return null;\n  }\n\n  return val;\n}\n\nfunction normalizeDataKey(key) {\n  return key.replace(/[A-Z]/g, chr => `-${chr.toLowerCase()}`);\n}\n\nconst Manipulator = {\n  setDataAttribute(element, key, value) {\n    element.setAttribute(`data-bs-${normalizeDataKey(key)}`, value);\n  },\n\n  removeDataAttribute(element, key) {\n    element.removeAttribute(`data-bs-${normalizeDataKey(key)}`);\n  },\n\n  getDataAttributes(element) {\n    if (!element) {\n      return {};\n    }\n\n    const attributes = {};\n    Object.keys(element.dataset).filter(key => key.startsWith('bs')).forEach(key => {\n      let pureKey = key.replace(/^bs/, '');\n      pureKey = pureKey.charAt(0).toLowerCase() + pureKey.slice(1, pureKey.length);\n      attributes[pureKey] = normalizeData(element.dataset[key]);\n    });\n    return attributes;\n  },\n\n  getDataAttribute(element, key) {\n    return normalizeData(element.getAttribute(`data-bs-${normalizeDataKey(key)}`));\n  },\n\n  offset(element) {\n    const rect = element.getBoundingClientRect();\n    return {\n      top: rect.top + document.body.scrollTop,\n      left: rect.left + document.body.scrollLeft\n    };\n  },\n\n  position(element) {\n    return {\n      top: element.offsetTop,\n      left: element.offsetLeft\n    };\n  }\n\n};\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): carousel.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$a = 'carousel';\nconst DATA_KEY$9 = 'bs.carousel';\nconst EVENT_KEY$9 = `.${DATA_KEY$9}`;\nconst DATA_API_KEY$6 = '.data-api';\nconst ARROW_LEFT_KEY = 'ArrowLeft';\nconst ARROW_RIGHT_KEY = 'ArrowRight';\nconst TOUCHEVENT_COMPAT_WAIT = 500; // Time for mouse compat events to fire after touch\n\nconst SWIPE_THRESHOLD = 40;\nconst Default$9 = {\n  interval: 5000,\n  keyboard: true,\n  slide: false,\n  pause: 'hover',\n  wrap: true,\n  touch: true\n};\nconst DefaultType$9 = {\n  interval: '(number|boolean)',\n  keyboard: 'boolean',\n  slide: '(boolean|string)',\n  pause: '(string|boolean)',\n  wrap: 'boolean',\n  touch: 'boolean'\n};\nconst ORDER_NEXT = 'next';\nconst ORDER_PREV = 'prev';\nconst DIRECTION_LEFT = 'left';\nconst DIRECTION_RIGHT = 'right';\nconst KEY_TO_DIRECTION = {\n  [ARROW_LEFT_KEY]: DIRECTION_RIGHT,\n  [ARROW_RIGHT_KEY]: DIRECTION_LEFT\n};\nconst EVENT_SLIDE = `slide${EVENT_KEY$9}`;\nconst EVENT_SLID = `slid${EVENT_KEY$9}`;\nconst EVENT_KEYDOWN = `keydown${EVENT_KEY$9}`;\nconst EVENT_MOUSEENTER = `mouseenter${EVENT_KEY$9}`;\nconst EVENT_MOUSELEAVE = `mouseleave${EVENT_KEY$9}`;\nconst EVENT_TOUCHSTART = `touchstart${EVENT_KEY$9}`;\nconst EVENT_TOUCHMOVE = `touchmove${EVENT_KEY$9}`;\nconst EVENT_TOUCHEND = `touchend${EVENT_KEY$9}`;\nconst EVENT_POINTERDOWN = `pointerdown${EVENT_KEY$9}`;\nconst EVENT_POINTERUP = `pointerup${EVENT_KEY$9}`;\nconst EVENT_DRAG_START = `dragstart${EVENT_KEY$9}`;\nconst EVENT_LOAD_DATA_API$2 = `load${EVENT_KEY$9}${DATA_API_KEY$6}`;\nconst EVENT_CLICK_DATA_API$5 = `click${EVENT_KEY$9}${DATA_API_KEY$6}`;\nconst CLASS_NAME_CAROUSEL = 'carousel';\nconst CLASS_NAME_ACTIVE$2 = 'active';\nconst CLASS_NAME_SLIDE = 'slide';\nconst CLASS_NAME_END = 'carousel-item-end';\nconst CLASS_NAME_START = 'carousel-item-start';\nconst CLASS_NAME_NEXT = 'carousel-item-next';\nconst CLASS_NAME_PREV = 'carousel-item-prev';\nconst CLASS_NAME_POINTER_EVENT = 'pointer-event';\nconst SELECTOR_ACTIVE$1 = '.active';\nconst SELECTOR_ACTIVE_ITEM = '.active.carousel-item';\nconst SELECTOR_ITEM = '.carousel-item';\nconst SELECTOR_ITEM_IMG = '.carousel-item img';\nconst SELECTOR_NEXT_PREV = '.carousel-item-next, .carousel-item-prev';\nconst SELECTOR_INDICATORS = '.carousel-indicators';\nconst SELECTOR_INDICATOR = '[data-bs-target]';\nconst SELECTOR_DATA_SLIDE = '[data-bs-slide], [data-bs-slide-to]';\nconst SELECTOR_DATA_RIDE = '[data-bs-ride=\"carousel\"]';\nconst POINTER_TYPE_TOUCH = 'touch';\nconst POINTER_TYPE_PEN = 'pen';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Carousel extends BaseComponent {\n  constructor(element, config) {\n    super(element);\n    this._items = null;\n    this._interval = null;\n    this._activeElement = null;\n    this._isPaused = false;\n    this._isSliding = false;\n    this.touchTimeout = null;\n    this.touchStartX = 0;\n    this.touchDeltaX = 0;\n    this._config = this._getConfig(config);\n    this._indicatorsElement = SelectorEngine.findOne(SELECTOR_INDICATORS, this._element);\n    this._touchSupported = 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0;\n    this._pointerEvent = Boolean(window.PointerEvent);\n\n    this._addEventListeners();\n  } // Getters\n\n\n  static get Default() {\n    return Default$9;\n  }\n\n  static get NAME() {\n    return NAME$a;\n  } // Public\n\n\n  next() {\n    this._slide(ORDER_NEXT);\n  }\n\n  nextWhenVisible() {\n    // Don't call next when the page isn't visible\n    // or the carousel or its parent isn't visible\n    if (!document.hidden && isVisible(this._element)) {\n      this.next();\n    }\n  }\n\n  prev() {\n    this._slide(ORDER_PREV);\n  }\n\n  pause(event) {\n    if (!event) {\n      this._isPaused = true;\n    }\n\n    if (SelectorEngine.findOne(SELECTOR_NEXT_PREV, this._element)) {\n      triggerTransitionEnd(this._element);\n      this.cycle(true);\n    }\n\n    clearInterval(this._interval);\n    this._interval = null;\n  }\n\n  cycle(event) {\n    if (!event) {\n      this._isPaused = false;\n    }\n\n    if (this._interval) {\n      clearInterval(this._interval);\n      this._interval = null;\n    }\n\n    if (this._config && this._config.interval && !this._isPaused) {\n      this._updateInterval();\n\n      this._interval = setInterval((document.visibilityState ? this.nextWhenVisible : this.next).bind(this), this._config.interval);\n    }\n  }\n\n  to(index) {\n    this._activeElement = SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element);\n\n    const activeIndex = this._getItemIndex(this._activeElement);\n\n    if (index > this._items.length - 1 || index < 0) {\n      return;\n    }\n\n    if (this._isSliding) {\n      EventHandler.one(this._element, EVENT_SLID, () => this.to(index));\n      return;\n    }\n\n    if (activeIndex === index) {\n      this.pause();\n      this.cycle();\n      return;\n    }\n\n    const order = index > activeIndex ? ORDER_NEXT : ORDER_PREV;\n\n    this._slide(order, this._items[index]);\n  } // Private\n\n\n  _getConfig(config) {\n    config = { ...Default$9,\n      ...Manipulator.getDataAttributes(this._element),\n      ...(typeof config === 'object' ? config : {})\n    };\n    typeCheckConfig(NAME$a, config, DefaultType$9);\n    return config;\n  }\n\n  _handleSwipe() {\n    const absDeltax = Math.abs(this.touchDeltaX);\n\n    if (absDeltax <= SWIPE_THRESHOLD) {\n      return;\n    }\n\n    const direction = absDeltax / this.touchDeltaX;\n    this.touchDeltaX = 0;\n\n    if (!direction) {\n      return;\n    }\n\n    this._slide(direction > 0 ? DIRECTION_RIGHT : DIRECTION_LEFT);\n  }\n\n  _addEventListeners() {\n    if (this._config.keyboard) {\n      EventHandler.on(this._element, EVENT_KEYDOWN, event => this._keydown(event));\n    }\n\n    if (this._config.pause === 'hover') {\n      EventHandler.on(this._element, EVENT_MOUSEENTER, event => this.pause(event));\n      EventHandler.on(this._element, EVENT_MOUSELEAVE, event => this.cycle(event));\n    }\n\n    if (this._config.touch && this._touchSupported) {\n      this._addTouchEventListeners();\n    }\n  }\n\n  _addTouchEventListeners() {\n    const start = event => {\n      if (this._pointerEvent && (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH)) {\n        this.touchStartX = event.clientX;\n      } else if (!this._pointerEvent) {\n        this.touchStartX = event.touches[0].clientX;\n      }\n    };\n\n    const move = event => {\n      // ensure swiping with one touch and not pinching\n      this.touchDeltaX = event.touches && event.touches.length > 1 ? 0 : event.touches[0].clientX - this.touchStartX;\n    };\n\n    const end = event => {\n      if (this._pointerEvent && (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH)) {\n        this.touchDeltaX = event.clientX - this.touchStartX;\n      }\n\n      this._handleSwipe();\n\n      if (this._config.pause === 'hover') {\n        // If it's a touch-enabled device, mouseenter/leave are fired as\n        // part of the mouse compatibility events on first tap - the carousel\n        // would stop cycling until user tapped out of it;\n        // here, we listen for touchend, explicitly pause the carousel\n        // (as if it's the second time we tap on it, mouseenter compat event\n        // is NOT fired) and after a timeout (to allow for mouse compatibility\n        // events to fire) we explicitly restart cycling\n        this.pause();\n\n        if (this.touchTimeout) {\n          clearTimeout(this.touchTimeout);\n        }\n\n        this.touchTimeout = setTimeout(event => this.cycle(event), TOUCHEVENT_COMPAT_WAIT + this._config.interval);\n      }\n    };\n\n    SelectorEngine.find(SELECTOR_ITEM_IMG, this._element).forEach(itemImg => {\n      EventHandler.on(itemImg, EVENT_DRAG_START, e => e.preventDefault());\n    });\n\n    if (this._pointerEvent) {\n      EventHandler.on(this._element, EVENT_POINTERDOWN, event => start(event));\n      EventHandler.on(this._element, EVENT_POINTERUP, event => end(event));\n\n      this._element.classList.add(CLASS_NAME_POINTER_EVENT);\n    } else {\n      EventHandler.on(this._element, EVENT_TOUCHSTART, event => start(event));\n      EventHandler.on(this._element, EVENT_TOUCHMOVE, event => move(event));\n      EventHandler.on(this._element, EVENT_TOUCHEND, event => end(event));\n    }\n  }\n\n  _keydown(event) {\n    if (/input|textarea/i.test(event.target.tagName)) {\n      return;\n    }\n\n    const direction = KEY_TO_DIRECTION[event.key];\n\n    if (direction) {\n      event.preventDefault();\n\n      this._slide(direction);\n    }\n  }\n\n  _getItemIndex(element) {\n    this._items = element && element.parentNode ? SelectorEngine.find(SELECTOR_ITEM, element.parentNode) : [];\n    return this._items.indexOf(element);\n  }\n\n  _getItemByOrder(order, activeElement) {\n    const isNext = order === ORDER_NEXT;\n    return getNextActiveElement(this._items, activeElement, isNext, this._config.wrap);\n  }\n\n  _triggerSlideEvent(relatedTarget, eventDirectionName) {\n    const targetIndex = this._getItemIndex(relatedTarget);\n\n    const fromIndex = this._getItemIndex(SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element));\n\n    return EventHandler.trigger(this._element, EVENT_SLIDE, {\n      relatedTarget,\n      direction: eventDirectionName,\n      from: fromIndex,\n      to: targetIndex\n    });\n  }\n\n  _setActiveIndicatorElement(element) {\n    if (this._indicatorsElement) {\n      const activeIndicator = SelectorEngine.findOne(SELECTOR_ACTIVE$1, this._indicatorsElement);\n      activeIndicator.classList.remove(CLASS_NAME_ACTIVE$2);\n      activeIndicator.removeAttribute('aria-current');\n      const indicators = SelectorEngine.find(SELECTOR_INDICATOR, this._indicatorsElement);\n\n      for (let i = 0; i < indicators.length; i++) {\n        if (Number.parseInt(indicators[i].getAttribute('data-bs-slide-to'), 10) === this._getItemIndex(element)) {\n          indicators[i].classList.add(CLASS_NAME_ACTIVE$2);\n          indicators[i].setAttribute('aria-current', 'true');\n          break;\n        }\n      }\n    }\n  }\n\n  _updateInterval() {\n    const element = this._activeElement || SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element);\n\n    if (!element) {\n      return;\n    }\n\n    const elementInterval = Number.parseInt(element.getAttribute('data-bs-interval'), 10);\n\n    if (elementInterval) {\n      this._config.defaultInterval = this._config.defaultInterval || this._config.interval;\n      this._config.interval = elementInterval;\n    } else {\n      this._config.interval = this._config.defaultInterval || this._config.interval;\n    }\n  }\n\n  _slide(directionOrOrder, element) {\n    const order = this._directionToOrder(directionOrOrder);\n\n    const activeElement = SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element);\n\n    const activeElementIndex = this._getItemIndex(activeElement);\n\n    const nextElement = element || this._getItemByOrder(order, activeElement);\n\n    const nextElementIndex = this._getItemIndex(nextElement);\n\n    const isCycling = Boolean(this._interval);\n    const isNext = order === ORDER_NEXT;\n    const directionalClassName = isNext ? CLASS_NAME_START : CLASS_NAME_END;\n    const orderClassName = isNext ? CLASS_NAME_NEXT : CLASS_NAME_PREV;\n\n    const eventDirectionName = this._orderToDirection(order);\n\n    if (nextElement && nextElement.classList.contains(CLASS_NAME_ACTIVE$2)) {\n      this._isSliding = false;\n      return;\n    }\n\n    if (this._isSliding) {\n      return;\n    }\n\n    const slideEvent = this._triggerSlideEvent(nextElement, eventDirectionName);\n\n    if (slideEvent.defaultPrevented) {\n      return;\n    }\n\n    if (!activeElement || !nextElement) {\n      // Some weirdness is happening, so we bail\n      return;\n    }\n\n    this._isSliding = true;\n\n    if (isCycling) {\n      this.pause();\n    }\n\n    this._setActiveIndicatorElement(nextElement);\n\n    this._activeElement = nextElement;\n\n    const triggerSlidEvent = () => {\n      EventHandler.trigger(this._element, EVENT_SLID, {\n        relatedTarget: nextElement,\n        direction: eventDirectionName,\n        from: activeElementIndex,\n        to: nextElementIndex\n      });\n    };\n\n    if (this._element.classList.contains(CLASS_NAME_SLIDE)) {\n      nextElement.classList.add(orderClassName);\n      reflow(nextElement);\n      activeElement.classList.add(directionalClassName);\n      nextElement.classList.add(directionalClassName);\n\n      const completeCallBack = () => {\n        nextElement.classList.remove(directionalClassName, orderClassName);\n        nextElement.classList.add(CLASS_NAME_ACTIVE$2);\n        activeElement.classList.remove(CLASS_NAME_ACTIVE$2, orderClassName, directionalClassName);\n        this._isSliding = false;\n        setTimeout(triggerSlidEvent, 0);\n      };\n\n      this._queueCallback(completeCallBack, activeElement, true);\n    } else {\n      activeElement.classList.remove(CLASS_NAME_ACTIVE$2);\n      nextElement.classList.add(CLASS_NAME_ACTIVE$2);\n      this._isSliding = false;\n      triggerSlidEvent();\n    }\n\n    if (isCycling) {\n      this.cycle();\n    }\n  }\n\n  _directionToOrder(direction) {\n    if (![DIRECTION_RIGHT, DIRECTION_LEFT].includes(direction)) {\n      return direction;\n    }\n\n    if (isRTL()) {\n      return direction === DIRECTION_LEFT ? ORDER_PREV : ORDER_NEXT;\n    }\n\n    return direction === DIRECTION_LEFT ? ORDER_NEXT : ORDER_PREV;\n  }\n\n  _orderToDirection(order) {\n    if (![ORDER_NEXT, ORDER_PREV].includes(order)) {\n      return order;\n    }\n\n    if (isRTL()) {\n      return order === ORDER_PREV ? DIRECTION_LEFT : DIRECTION_RIGHT;\n    }\n\n    return order === ORDER_PREV ? DIRECTION_RIGHT : DIRECTION_LEFT;\n  } // Static\n\n\n  static carouselInterface(element, config) {\n    const data = Carousel.getOrCreateInstance(element, config);\n    let {\n      _config\n    } = data;\n\n    if (typeof config === 'object') {\n      _config = { ..._config,\n        ...config\n      };\n    }\n\n    const action = typeof config === 'string' ? config : _config.slide;\n\n    if (typeof config === 'number') {\n      data.to(config);\n    } else if (typeof action === 'string') {\n      if (typeof data[action] === 'undefined') {\n        throw new TypeError(`No method named \"${action}\"`);\n      }\n\n      data[action]();\n    } else if (_config.interval && _config.ride) {\n      data.pause();\n      data.cycle();\n    }\n  }\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      Carousel.carouselInterface(this, config);\n    });\n  }\n\n  static dataApiClickHandler(event) {\n    const target = getElementFromSelector(this);\n\n    if (!target || !target.classList.contains(CLASS_NAME_CAROUSEL)) {\n      return;\n    }\n\n    const config = { ...Manipulator.getDataAttributes(target),\n      ...Manipulator.getDataAttributes(this)\n    };\n    const slideIndex = this.getAttribute('data-bs-slide-to');\n\n    if (slideIndex) {\n      config.interval = false;\n    }\n\n    Carousel.carouselInterface(target, config);\n\n    if (slideIndex) {\n      Carousel.getInstance(target).to(slideIndex);\n    }\n\n    event.preventDefault();\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$5, SELECTOR_DATA_SLIDE, Carousel.dataApiClickHandler);\nEventHandler.on(window, EVENT_LOAD_DATA_API$2, () => {\n  const carousels = SelectorEngine.find(SELECTOR_DATA_RIDE);\n\n  for (let i = 0, len = carousels.length; i < len; i++) {\n    Carousel.carouselInterface(carousels[i], Carousel.getInstance(carousels[i]));\n  }\n});\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Carousel to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Carousel);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): collapse.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$9 = 'collapse';\nconst DATA_KEY$8 = 'bs.collapse';\nconst EVENT_KEY$8 = `.${DATA_KEY$8}`;\nconst DATA_API_KEY$5 = '.data-api';\nconst Default$8 = {\n  toggle: true,\n  parent: ''\n};\nconst DefaultType$8 = {\n  toggle: 'boolean',\n  parent: '(string|element)'\n};\nconst EVENT_SHOW$5 = `show${EVENT_KEY$8}`;\nconst EVENT_SHOWN$5 = `shown${EVENT_KEY$8}`;\nconst EVENT_HIDE$5 = `hide${EVENT_KEY$8}`;\nconst EVENT_HIDDEN$5 = `hidden${EVENT_KEY$8}`;\nconst EVENT_CLICK_DATA_API$4 = `click${EVENT_KEY$8}${DATA_API_KEY$5}`;\nconst CLASS_NAME_SHOW$8 = 'show';\nconst CLASS_NAME_COLLAPSE = 'collapse';\nconst CLASS_NAME_COLLAPSING = 'collapsing';\nconst CLASS_NAME_COLLAPSED = 'collapsed';\nconst WIDTH = 'width';\nconst HEIGHT = 'height';\nconst SELECTOR_ACTIVES = '.show, .collapsing';\nconst SELECTOR_DATA_TOGGLE$4 = '[data-bs-toggle=\"collapse\"]';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Collapse extends BaseComponent {\n  constructor(element, config) {\n    super(element);\n    this._isTransitioning = false;\n    this._config = this._getConfig(config);\n    this._triggerArray = SelectorEngine.find(`${SELECTOR_DATA_TOGGLE$4}[href=\"#${this._element.id}\"],` + `${SELECTOR_DATA_TOGGLE$4}[data-bs-target=\"#${this._element.id}\"]`);\n    const toggleList = SelectorEngine.find(SELECTOR_DATA_TOGGLE$4);\n\n    for (let i = 0, len = toggleList.length; i < len; i++) {\n      const elem = toggleList[i];\n      const selector = getSelectorFromElement(elem);\n      const filterElement = SelectorEngine.find(selector).filter(foundElem => foundElem === this._element);\n\n      if (selector !== null && filterElement.length) {\n        this._selector = selector;\n\n        this._triggerArray.push(elem);\n      }\n    }\n\n    this._parent = this._config.parent ? this._getParent() : null;\n\n    if (!this._config.parent) {\n      this._addAriaAndCollapsedClass(this._element, this._triggerArray);\n    }\n\n    if (this._config.toggle) {\n      this.toggle();\n    }\n  } // Getters\n\n\n  static get Default() {\n    return Default$8;\n  }\n\n  static get NAME() {\n    return NAME$9;\n  } // Public\n\n\n  toggle() {\n    if (this._element.classList.contains(CLASS_NAME_SHOW$8)) {\n      this.hide();\n    } else {\n      this.show();\n    }\n  }\n\n  show() {\n    if (this._isTransitioning || this._element.classList.contains(CLASS_NAME_SHOW$8)) {\n      return;\n    }\n\n    let actives;\n    let activesData;\n\n    if (this._parent) {\n      actives = SelectorEngine.find(SELECTOR_ACTIVES, this._parent).filter(elem => {\n        if (typeof this._config.parent === 'string') {\n          return elem.getAttribute('data-bs-parent') === this._config.parent;\n        }\n\n        return elem.classList.contains(CLASS_NAME_COLLAPSE);\n      });\n\n      if (actives.length === 0) {\n        actives = null;\n      }\n    }\n\n    const container = SelectorEngine.findOne(this._selector);\n\n    if (actives) {\n      const tempActiveData = actives.find(elem => container !== elem);\n      activesData = tempActiveData ? Collapse.getInstance(tempActiveData) : null;\n\n      if (activesData && activesData._isTransitioning) {\n        return;\n      }\n    }\n\n    const startEvent = EventHandler.trigger(this._element, EVENT_SHOW$5);\n\n    if (startEvent.defaultPrevented) {\n      return;\n    }\n\n    if (actives) {\n      actives.forEach(elemActive => {\n        if (container !== elemActive) {\n          Collapse.collapseInterface(elemActive, 'hide');\n        }\n\n        if (!activesData) {\n          Data.set(elemActive, DATA_KEY$8, null);\n        }\n      });\n    }\n\n    const dimension = this._getDimension();\n\n    this._element.classList.remove(CLASS_NAME_COLLAPSE);\n\n    this._element.classList.add(CLASS_NAME_COLLAPSING);\n\n    this._element.style[dimension] = 0;\n\n    if (this._triggerArray.length) {\n      this._triggerArray.forEach(element => {\n        element.classList.remove(CLASS_NAME_COLLAPSED);\n        element.setAttribute('aria-expanded', true);\n      });\n    }\n\n    this.setTransitioning(true);\n\n    const complete = () => {\n      this._element.classList.remove(CLASS_NAME_COLLAPSING);\n\n      this._element.classList.add(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$8);\n\n      this._element.style[dimension] = '';\n      this.setTransitioning(false);\n      EventHandler.trigger(this._element, EVENT_SHOWN$5);\n    };\n\n    const capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1);\n    const scrollSize = `scroll${capitalizedDimension}`;\n\n    this._queueCallback(complete, this._element, true);\n\n    this._element.style[dimension] = `${this._element[scrollSize]}px`;\n  }\n\n  hide() {\n    if (this._isTransitioning || !this._element.classList.contains(CLASS_NAME_SHOW$8)) {\n      return;\n    }\n\n    const startEvent = EventHandler.trigger(this._element, EVENT_HIDE$5);\n\n    if (startEvent.defaultPrevented) {\n      return;\n    }\n\n    const dimension = this._getDimension();\n\n    this._element.style[dimension] = `${this._element.getBoundingClientRect()[dimension]}px`;\n    reflow(this._element);\n\n    this._element.classList.add(CLASS_NAME_COLLAPSING);\n\n    this._element.classList.remove(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$8);\n\n    const triggerArrayLength = this._triggerArray.length;\n\n    if (triggerArrayLength > 0) {\n      for (let i = 0; i < triggerArrayLength; i++) {\n        const trigger = this._triggerArray[i];\n        const elem = getElementFromSelector(trigger);\n\n        if (elem && !elem.classList.contains(CLASS_NAME_SHOW$8)) {\n          trigger.classList.add(CLASS_NAME_COLLAPSED);\n          trigger.setAttribute('aria-expanded', false);\n        }\n      }\n    }\n\n    this.setTransitioning(true);\n\n    const complete = () => {\n      this.setTransitioning(false);\n\n      this._element.classList.remove(CLASS_NAME_COLLAPSING);\n\n      this._element.classList.add(CLASS_NAME_COLLAPSE);\n\n      EventHandler.trigger(this._element, EVENT_HIDDEN$5);\n    };\n\n    this._element.style[dimension] = '';\n\n    this._queueCallback(complete, this._element, true);\n  }\n\n  setTransitioning(isTransitioning) {\n    this._isTransitioning = isTransitioning;\n  } // Private\n\n\n  _getConfig(config) {\n    config = { ...Default$8,\n      ...config\n    };\n    config.toggle = Boolean(config.toggle); // Coerce string values\n\n    typeCheckConfig(NAME$9, config, DefaultType$8);\n    return config;\n  }\n\n  _getDimension() {\n    return this._element.classList.contains(WIDTH) ? WIDTH : HEIGHT;\n  }\n\n  _getParent() {\n    let {\n      parent\n    } = this._config;\n    parent = getElement(parent);\n    const selector = `${SELECTOR_DATA_TOGGLE$4}[data-bs-parent=\"${parent}\"]`;\n    SelectorEngine.find(selector, parent).forEach(element => {\n      const selected = getElementFromSelector(element);\n\n      this._addAriaAndCollapsedClass(selected, [element]);\n    });\n    return parent;\n  }\n\n  _addAriaAndCollapsedClass(element, triggerArray) {\n    if (!element || !triggerArray.length) {\n      return;\n    }\n\n    const isOpen = element.classList.contains(CLASS_NAME_SHOW$8);\n    triggerArray.forEach(elem => {\n      if (isOpen) {\n        elem.classList.remove(CLASS_NAME_COLLAPSED);\n      } else {\n        elem.classList.add(CLASS_NAME_COLLAPSED);\n      }\n\n      elem.setAttribute('aria-expanded', isOpen);\n    });\n  } // Static\n\n\n  static collapseInterface(element, config) {\n    let data = Collapse.getInstance(element);\n    const _config = { ...Default$8,\n      ...Manipulator.getDataAttributes(element),\n      ...(typeof config === 'object' && config ? config : {})\n    };\n\n    if (!data && _config.toggle && typeof config === 'string' && /show|hide/.test(config)) {\n      _config.toggle = false;\n    }\n\n    if (!data) {\n      data = new Collapse(element, _config);\n    }\n\n    if (typeof config === 'string') {\n      if (typeof data[config] === 'undefined') {\n        throw new TypeError(`No method named \"${config}\"`);\n      }\n\n      data[config]();\n    }\n  }\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      Collapse.collapseInterface(this, config);\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$4, SELECTOR_DATA_TOGGLE$4, function (event) {\n  // preventDefault only for <a> elements (which change the URL) not inside the collapsible element\n  if (event.target.tagName === 'A' || event.delegateTarget && event.delegateTarget.tagName === 'A') {\n    event.preventDefault();\n  }\n\n  const triggerData = Manipulator.getDataAttributes(this);\n  const selector = getSelectorFromElement(this);\n  const selectorElements = SelectorEngine.find(selector);\n  selectorElements.forEach(element => {\n    const data = Collapse.getInstance(element);\n    let config;\n\n    if (data) {\n      // update parent attribute\n      if (data._parent === null && typeof triggerData.parent === 'string') {\n        data._config.parent = triggerData.parent;\n        data._parent = data._getParent();\n      }\n\n      config = 'toggle';\n    } else {\n      config = triggerData;\n    }\n\n    Collapse.collapseInterface(element, config);\n  });\n});\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Collapse to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Collapse);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): dropdown.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$8 = 'dropdown';\nconst DATA_KEY$7 = 'bs.dropdown';\nconst EVENT_KEY$7 = `.${DATA_KEY$7}`;\nconst DATA_API_KEY$4 = '.data-api';\nconst ESCAPE_KEY$2 = 'Escape';\nconst SPACE_KEY = 'Space';\nconst TAB_KEY = 'Tab';\nconst ARROW_UP_KEY = 'ArrowUp';\nconst ARROW_DOWN_KEY = 'ArrowDown';\nconst RIGHT_MOUSE_BUTTON = 2; // MouseEvent.button value for the secondary button, usually the right button\n\nconst REGEXP_KEYDOWN = new RegExp(`${ARROW_UP_KEY}|${ARROW_DOWN_KEY}|${ESCAPE_KEY$2}`);\nconst EVENT_HIDE$4 = `hide${EVENT_KEY$7}`;\nconst EVENT_HIDDEN$4 = `hidden${EVENT_KEY$7}`;\nconst EVENT_SHOW$4 = `show${EVENT_KEY$7}`;\nconst EVENT_SHOWN$4 = `shown${EVENT_KEY$7}`;\nconst EVENT_CLICK = `click${EVENT_KEY$7}`;\nconst EVENT_CLICK_DATA_API$3 = `click${EVENT_KEY$7}${DATA_API_KEY$4}`;\nconst EVENT_KEYDOWN_DATA_API = `keydown${EVENT_KEY$7}${DATA_API_KEY$4}`;\nconst EVENT_KEYUP_DATA_API = `keyup${EVENT_KEY$7}${DATA_API_KEY$4}`;\nconst CLASS_NAME_SHOW$7 = 'show';\nconst CLASS_NAME_DROPUP = 'dropup';\nconst CLASS_NAME_DROPEND = 'dropend';\nconst CLASS_NAME_DROPSTART = 'dropstart';\nconst CLASS_NAME_NAVBAR = 'navbar';\nconst SELECTOR_DATA_TOGGLE$3 = '[data-bs-toggle=\"dropdown\"]';\nconst SELECTOR_MENU = '.dropdown-menu';\nconst SELECTOR_NAVBAR_NAV = '.navbar-nav';\nconst SELECTOR_VISIBLE_ITEMS = '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)';\nconst PLACEMENT_TOP = isRTL() ? 'top-end' : 'top-start';\nconst PLACEMENT_TOPEND = isRTL() ? 'top-start' : 'top-end';\nconst PLACEMENT_BOTTOM = isRTL() ? 'bottom-end' : 'bottom-start';\nconst PLACEMENT_BOTTOMEND = isRTL() ? 'bottom-start' : 'bottom-end';\nconst PLACEMENT_RIGHT = isRTL() ? 'left-start' : 'right-start';\nconst PLACEMENT_LEFT = isRTL() ? 'right-start' : 'left-start';\nconst Default$7 = {\n  offset: [0, 2],\n  boundary: 'clippingParents',\n  reference: 'toggle',\n  display: 'dynamic',\n  popperConfig: null,\n  autoClose: true\n};\nconst DefaultType$7 = {\n  offset: '(array|string|function)',\n  boundary: '(string|element)',\n  reference: '(string|element|object)',\n  display: 'string',\n  popperConfig: '(null|object|function)',\n  autoClose: '(boolean|string)'\n};\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Dropdown extends BaseComponent {\n  constructor(element, config) {\n    super(element);\n    this._popper = null;\n    this._config = this._getConfig(config);\n    this._menu = this._getMenuElement();\n    this._inNavbar = this._detectNavbar();\n\n    this._addEventListeners();\n  } // Getters\n\n\n  static get Default() {\n    return Default$7;\n  }\n\n  static get DefaultType() {\n    return DefaultType$7;\n  }\n\n  static get NAME() {\n    return NAME$8;\n  } // Public\n\n\n  toggle() {\n    if (isDisabled(this._element)) {\n      return;\n    }\n\n    const isActive = this._element.classList.contains(CLASS_NAME_SHOW$7);\n\n    if (isActive) {\n      this.hide();\n      return;\n    }\n\n    this.show();\n  }\n\n  show() {\n    if (isDisabled(this._element) || this._menu.classList.contains(CLASS_NAME_SHOW$7)) {\n      return;\n    }\n\n    const parent = Dropdown.getParentFromElement(this._element);\n    const relatedTarget = {\n      relatedTarget: this._element\n    };\n    const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$4, relatedTarget);\n\n    if (showEvent.defaultPrevented) {\n      return;\n    } // Totally disable Popper for Dropdowns in Navbar\n\n\n    if (this._inNavbar) {\n      Manipulator.setDataAttribute(this._menu, 'popper', 'none');\n    } else {\n      if (typeof Popper === 'undefined') {\n        throw new TypeError('Bootstrap\\'s dropdowns require Popper (https://popper.js.org)');\n      }\n\n      let referenceElement = this._element;\n\n      if (this._config.reference === 'parent') {\n        referenceElement = parent;\n      } else if (isElement(this._config.reference)) {\n        referenceElement = getElement(this._config.reference);\n      } else if (typeof this._config.reference === 'object') {\n        referenceElement = this._config.reference;\n      }\n\n      const popperConfig = this._getPopperConfig();\n\n      const isDisplayStatic = popperConfig.modifiers.find(modifier => modifier.name === 'applyStyles' && modifier.enabled === false);\n      this._popper = Popper.createPopper(referenceElement, this._menu, popperConfig);\n\n      if (isDisplayStatic) {\n        Manipulator.setDataAttribute(this._menu, 'popper', 'static');\n      }\n    } // If this is a touch-enabled device we add extra\n    // empty mouseover listeners to the body's immediate children;\n    // only needed because of broken event delegation on iOS\n    // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n\n\n    if ('ontouchstart' in document.documentElement && !parent.closest(SELECTOR_NAVBAR_NAV)) {\n      [].concat(...document.body.children).forEach(elem => EventHandler.on(elem, 'mouseover', noop));\n    }\n\n    this._element.focus();\n\n    this._element.setAttribute('aria-expanded', true);\n\n    this._menu.classList.toggle(CLASS_NAME_SHOW$7);\n\n    this._element.classList.toggle(CLASS_NAME_SHOW$7);\n\n    EventHandler.trigger(this._element, EVENT_SHOWN$4, relatedTarget);\n  }\n\n  hide() {\n    if (isDisabled(this._element) || !this._menu.classList.contains(CLASS_NAME_SHOW$7)) {\n      return;\n    }\n\n    const relatedTarget = {\n      relatedTarget: this._element\n    };\n\n    this._completeHide(relatedTarget);\n  }\n\n  dispose() {\n    if (this._popper) {\n      this._popper.destroy();\n    }\n\n    super.dispose();\n  }\n\n  update() {\n    this._inNavbar = this._detectNavbar();\n\n    if (this._popper) {\n      this._popper.update();\n    }\n  } // Private\n\n\n  _addEventListeners() {\n    EventHandler.on(this._element, EVENT_CLICK, event => {\n      event.preventDefault();\n      this.toggle();\n    });\n  }\n\n  _completeHide(relatedTarget) {\n    const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$4, relatedTarget);\n\n    if (hideEvent.defaultPrevented) {\n      return;\n    } // If this is a touch-enabled device we remove the extra\n    // empty mouseover listeners we added for iOS support\n\n\n    if ('ontouchstart' in document.documentElement) {\n      [].concat(...document.body.children).forEach(elem => EventHandler.off(elem, 'mouseover', noop));\n    }\n\n    if (this._popper) {\n      this._popper.destroy();\n    }\n\n    this._menu.classList.remove(CLASS_NAME_SHOW$7);\n\n    this._element.classList.remove(CLASS_NAME_SHOW$7);\n\n    this._element.setAttribute('aria-expanded', 'false');\n\n    Manipulator.removeDataAttribute(this._menu, 'popper');\n    EventHandler.trigger(this._element, EVENT_HIDDEN$4, relatedTarget);\n  }\n\n  _getConfig(config) {\n    config = { ...this.constructor.Default,\n      ...Manipulator.getDataAttributes(this._element),\n      ...config\n    };\n    typeCheckConfig(NAME$8, config, this.constructor.DefaultType);\n\n    if (typeof config.reference === 'object' && !isElement(config.reference) && typeof config.reference.getBoundingClientRect !== 'function') {\n      // Popper virtual elements require a getBoundingClientRect method\n      throw new TypeError(`${NAME$8.toUpperCase()}: Option \"reference\" provided type \"object\" without a required \"getBoundingClientRect\" method.`);\n    }\n\n    return config;\n  }\n\n  _getMenuElement() {\n    return SelectorEngine.next(this._element, SELECTOR_MENU)[0];\n  }\n\n  _getPlacement() {\n    const parentDropdown = this._element.parentNode;\n\n    if (parentDropdown.classList.contains(CLASS_NAME_DROPEND)) {\n      return PLACEMENT_RIGHT;\n    }\n\n    if (parentDropdown.classList.contains(CLASS_NAME_DROPSTART)) {\n      return PLACEMENT_LEFT;\n    } // We need to trim the value because custom properties can also include spaces\n\n\n    const isEnd = getComputedStyle(this._menu).getPropertyValue('--bs-position').trim() === 'end';\n\n    if (parentDropdown.classList.contains(CLASS_NAME_DROPUP)) {\n      return isEnd ? PLACEMENT_TOPEND : PLACEMENT_TOP;\n    }\n\n    return isEnd ? PLACEMENT_BOTTOMEND : PLACEMENT_BOTTOM;\n  }\n\n  _detectNavbar() {\n    return this._element.closest(`.${CLASS_NAME_NAVBAR}`) !== null;\n  }\n\n  _getOffset() {\n    const {\n      offset\n    } = this._config;\n\n    if (typeof offset === 'string') {\n      return offset.split(',').map(val => Number.parseInt(val, 10));\n    }\n\n    if (typeof offset === 'function') {\n      return popperData => offset(popperData, this._element);\n    }\n\n    return offset;\n  }\n\n  _getPopperConfig() {\n    const defaultBsPopperConfig = {\n      placement: this._getPlacement(),\n      modifiers: [{\n        name: 'preventOverflow',\n        options: {\n          boundary: this._config.boundary\n        }\n      }, {\n        name: 'offset',\n        options: {\n          offset: this._getOffset()\n        }\n      }]\n    }; // Disable Popper if we have a static display\n\n    if (this._config.display === 'static') {\n      defaultBsPopperConfig.modifiers = [{\n        name: 'applyStyles',\n        enabled: false\n      }];\n    }\n\n    return { ...defaultBsPopperConfig,\n      ...(typeof this._config.popperConfig === 'function' ? this._config.popperConfig(defaultBsPopperConfig) : this._config.popperConfig)\n    };\n  }\n\n  _selectMenuItem({\n    key,\n    target\n  }) {\n    const items = SelectorEngine.find(SELECTOR_VISIBLE_ITEMS, this._menu).filter(isVisible);\n\n    if (!items.length) {\n      return;\n    } // if target isn't included in items (e.g. when expanding the dropdown)\n    // allow cycling to get the last item in case key equals ARROW_UP_KEY\n\n\n    getNextActiveElement(items, target, key === ARROW_DOWN_KEY, !items.includes(target)).focus();\n  } // Static\n\n\n  static dropdownInterface(element, config) {\n    const data = Dropdown.getOrCreateInstance(element, config);\n\n    if (typeof config === 'string') {\n      if (typeof data[config] === 'undefined') {\n        throw new TypeError(`No method named \"${config}\"`);\n      }\n\n      data[config]();\n    }\n  }\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      Dropdown.dropdownInterface(this, config);\n    });\n  }\n\n  static clearMenus(event) {\n    if (event && (event.button === RIGHT_MOUSE_BUTTON || event.type === 'keyup' && event.key !== TAB_KEY)) {\n      return;\n    }\n\n    const toggles = SelectorEngine.find(SELECTOR_DATA_TOGGLE$3);\n\n    for (let i = 0, len = toggles.length; i < len; i++) {\n      const context = Dropdown.getInstance(toggles[i]);\n\n      if (!context || context._config.autoClose === false) {\n        continue;\n      }\n\n      if (!context._element.classList.contains(CLASS_NAME_SHOW$7)) {\n        continue;\n      }\n\n      const relatedTarget = {\n        relatedTarget: context._element\n      };\n\n      if (event) {\n        const composedPath = event.composedPath();\n        const isMenuTarget = composedPath.includes(context._menu);\n\n        if (composedPath.includes(context._element) || context._config.autoClose === 'inside' && !isMenuTarget || context._config.autoClose === 'outside' && isMenuTarget) {\n          continue;\n        } // Tab navigation through the dropdown menu or events from contained inputs shouldn't close the menu\n\n\n        if (context._menu.contains(event.target) && (event.type === 'keyup' && event.key === TAB_KEY || /input|select|option|textarea|form/i.test(event.target.tagName))) {\n          continue;\n        }\n\n        if (event.type === 'click') {\n          relatedTarget.clickEvent = event;\n        }\n      }\n\n      context._completeHide(relatedTarget);\n    }\n  }\n\n  static getParentFromElement(element) {\n    return getElementFromSelector(element) || element.parentNode;\n  }\n\n  static dataApiKeydownHandler(event) {\n    // If not input/textarea:\n    //  - And not a key in REGEXP_KEYDOWN => not a dropdown command\n    // If input/textarea:\n    //  - If space key => not a dropdown command\n    //  - If key is other than escape\n    //    - If key is not up or down => not a dropdown command\n    //    - If trigger inside the menu => not a dropdown command\n    if (/input|textarea/i.test(event.target.tagName) ? event.key === SPACE_KEY || event.key !== ESCAPE_KEY$2 && (event.key !== ARROW_DOWN_KEY && event.key !== ARROW_UP_KEY || event.target.closest(SELECTOR_MENU)) : !REGEXP_KEYDOWN.test(event.key)) {\n      return;\n    }\n\n    const isActive = this.classList.contains(CLASS_NAME_SHOW$7);\n\n    if (!isActive && event.key === ESCAPE_KEY$2) {\n      return;\n    }\n\n    event.preventDefault();\n    event.stopPropagation();\n\n    if (isDisabled(this)) {\n      return;\n    }\n\n    const getToggleButton = () => this.matches(SELECTOR_DATA_TOGGLE$3) ? this : SelectorEngine.prev(this, SELECTOR_DATA_TOGGLE$3)[0];\n\n    if (event.key === ESCAPE_KEY$2) {\n      getToggleButton().focus();\n      Dropdown.clearMenus();\n      return;\n    }\n\n    if (event.key === ARROW_UP_KEY || event.key === ARROW_DOWN_KEY) {\n      if (!isActive) {\n        getToggleButton().click();\n      }\n\n      Dropdown.getInstance(getToggleButton())._selectMenuItem(event);\n\n      return;\n    }\n\n    if (!isActive || event.key === SPACE_KEY) {\n      Dropdown.clearMenus();\n    }\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_DATA_TOGGLE$3, Dropdown.dataApiKeydownHandler);\nEventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown.dataApiKeydownHandler);\nEventHandler.on(document, EVENT_CLICK_DATA_API$3, Dropdown.clearMenus);\nEventHandler.on(document, EVENT_KEYUP_DATA_API, Dropdown.clearMenus);\nEventHandler.on(document, EVENT_CLICK_DATA_API$3, SELECTOR_DATA_TOGGLE$3, function (event) {\n  event.preventDefault();\n  Dropdown.dropdownInterface(this);\n});\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Dropdown to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Dropdown);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): util/scrollBar.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\nconst SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top';\nconst SELECTOR_STICKY_CONTENT = '.sticky-top';\n\nclass ScrollBarHelper {\n  constructor() {\n    this._element = document.body;\n  }\n\n  getWidth() {\n    // https://developer.mozilla.org/en-US/docs/Web/API/Window/innerWidth#usage_notes\n    const documentWidth = document.documentElement.clientWidth;\n    return Math.abs(window.innerWidth - documentWidth);\n  }\n\n  hide() {\n    const width = this.getWidth();\n\n    this._disableOverFlow(); // give padding to element to balance the hidden scrollbar width\n\n\n    this._setElementAttributes(this._element, 'paddingRight', calculatedValue => calculatedValue + width); // trick: We adjust positive paddingRight and negative marginRight to sticky-top elements to keep showing fullwidth\n\n\n    this._setElementAttributes(SELECTOR_FIXED_CONTENT, 'paddingRight', calculatedValue => calculatedValue + width);\n\n    this._setElementAttributes(SELECTOR_STICKY_CONTENT, 'marginRight', calculatedValue => calculatedValue - width);\n  }\n\n  _disableOverFlow() {\n    this._saveInitialAttribute(this._element, 'overflow');\n\n    this._element.style.overflow = 'hidden';\n  }\n\n  _setElementAttributes(selector, styleProp, callback) {\n    const scrollbarWidth = this.getWidth();\n\n    const manipulationCallBack = element => {\n      if (element !== this._element && window.innerWidth > element.clientWidth + scrollbarWidth) {\n        return;\n      }\n\n      this._saveInitialAttribute(element, styleProp);\n\n      const calculatedValue = window.getComputedStyle(element)[styleProp];\n      element.style[styleProp] = `${callback(Number.parseFloat(calculatedValue))}px`;\n    };\n\n    this._applyManipulationCallback(selector, manipulationCallBack);\n  }\n\n  reset() {\n    this._resetElementAttributes(this._element, 'overflow');\n\n    this._resetElementAttributes(this._element, 'paddingRight');\n\n    this._resetElementAttributes(SELECTOR_FIXED_CONTENT, 'paddingRight');\n\n    this._resetElementAttributes(SELECTOR_STICKY_CONTENT, 'marginRight');\n  }\n\n  _saveInitialAttribute(element, styleProp) {\n    const actualValue = element.style[styleProp];\n\n    if (actualValue) {\n      Manipulator.setDataAttribute(element, styleProp, actualValue);\n    }\n  }\n\n  _resetElementAttributes(selector, styleProp) {\n    const manipulationCallBack = element => {\n      const value = Manipulator.getDataAttribute(element, styleProp);\n\n      if (typeof value === 'undefined') {\n        element.style.removeProperty(styleProp);\n      } else {\n        Manipulator.removeDataAttribute(element, styleProp);\n        element.style[styleProp] = value;\n      }\n    };\n\n    this._applyManipulationCallback(selector, manipulationCallBack);\n  }\n\n  _applyManipulationCallback(selector, callBack) {\n    if (isElement(selector)) {\n      callBack(selector);\n    } else {\n      SelectorEngine.find(selector, this._element).forEach(callBack);\n    }\n  }\n\n  isOverflowing() {\n    return this.getWidth() > 0;\n  }\n\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): util/backdrop.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\nconst Default$6 = {\n  isVisible: true,\n  // if false, we use the backdrop helper without adding any element to the dom\n  isAnimated: false,\n  rootElement: 'body',\n  // give the choice to place backdrop under different elements\n  clickCallback: null\n};\nconst DefaultType$6 = {\n  isVisible: 'boolean',\n  isAnimated: 'boolean',\n  rootElement: '(element|string)',\n  clickCallback: '(function|null)'\n};\nconst NAME$7 = 'backdrop';\nconst CLASS_NAME_BACKDROP = 'modal-backdrop';\nconst CLASS_NAME_FADE$5 = 'fade';\nconst CLASS_NAME_SHOW$6 = 'show';\nconst EVENT_MOUSEDOWN = `mousedown.bs.${NAME$7}`;\n\nclass Backdrop {\n  constructor(config) {\n    this._config = this._getConfig(config);\n    this._isAppended = false;\n    this._element = null;\n  }\n\n  show(callback) {\n    if (!this._config.isVisible) {\n      execute(callback);\n      return;\n    }\n\n    this._append();\n\n    if (this._config.isAnimated) {\n      reflow(this._getElement());\n    }\n\n    this._getElement().classList.add(CLASS_NAME_SHOW$6);\n\n    this._emulateAnimation(() => {\n      execute(callback);\n    });\n  }\n\n  hide(callback) {\n    if (!this._config.isVisible) {\n      execute(callback);\n      return;\n    }\n\n    this._getElement().classList.remove(CLASS_NAME_SHOW$6);\n\n    this._emulateAnimation(() => {\n      this.dispose();\n      execute(callback);\n    });\n  } // Private\n\n\n  _getElement() {\n    if (!this._element) {\n      const backdrop = document.createElement('div');\n      backdrop.className = CLASS_NAME_BACKDROP;\n\n      if (this._config.isAnimated) {\n        backdrop.classList.add(CLASS_NAME_FADE$5);\n      }\n\n      this._element = backdrop;\n    }\n\n    return this._element;\n  }\n\n  _getConfig(config) {\n    config = { ...Default$6,\n      ...(typeof config === 'object' ? config : {})\n    }; // use getElement() with the default \"body\" to get a fresh Element on each instantiation\n\n    config.rootElement = getElement(config.rootElement);\n    typeCheckConfig(NAME$7, config, DefaultType$6);\n    return config;\n  }\n\n  _append() {\n    if (this._isAppended) {\n      return;\n    }\n\n    this._config.rootElement.appendChild(this._getElement());\n\n    EventHandler.on(this._getElement(), EVENT_MOUSEDOWN, () => {\n      execute(this._config.clickCallback);\n    });\n    this._isAppended = true;\n  }\n\n  dispose() {\n    if (!this._isAppended) {\n      return;\n    }\n\n    EventHandler.off(this._element, EVENT_MOUSEDOWN);\n\n    this._element.remove();\n\n    this._isAppended = false;\n  }\n\n  _emulateAnimation(callback) {\n    executeAfterTransition(callback, this._getElement(), this._config.isAnimated);\n  }\n\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): modal.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$6 = 'modal';\nconst DATA_KEY$6 = 'bs.modal';\nconst EVENT_KEY$6 = `.${DATA_KEY$6}`;\nconst DATA_API_KEY$3 = '.data-api';\nconst ESCAPE_KEY$1 = 'Escape';\nconst Default$5 = {\n  backdrop: true,\n  keyboard: true,\n  focus: true\n};\nconst DefaultType$5 = {\n  backdrop: '(boolean|string)',\n  keyboard: 'boolean',\n  focus: 'boolean'\n};\nconst EVENT_HIDE$3 = `hide${EVENT_KEY$6}`;\nconst EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY$6}`;\nconst EVENT_HIDDEN$3 = `hidden${EVENT_KEY$6}`;\nconst EVENT_SHOW$3 = `show${EVENT_KEY$6}`;\nconst EVENT_SHOWN$3 = `shown${EVENT_KEY$6}`;\nconst EVENT_FOCUSIN$2 = `focusin${EVENT_KEY$6}`;\nconst EVENT_RESIZE = `resize${EVENT_KEY$6}`;\nconst EVENT_CLICK_DISMISS$2 = `click.dismiss${EVENT_KEY$6}`;\nconst EVENT_KEYDOWN_DISMISS$1 = `keydown.dismiss${EVENT_KEY$6}`;\nconst EVENT_MOUSEUP_DISMISS = `mouseup.dismiss${EVENT_KEY$6}`;\nconst EVENT_MOUSEDOWN_DISMISS = `mousedown.dismiss${EVENT_KEY$6}`;\nconst EVENT_CLICK_DATA_API$2 = `click${EVENT_KEY$6}${DATA_API_KEY$3}`;\nconst CLASS_NAME_OPEN = 'modal-open';\nconst CLASS_NAME_FADE$4 = 'fade';\nconst CLASS_NAME_SHOW$5 = 'show';\nconst CLASS_NAME_STATIC = 'modal-static';\nconst SELECTOR_DIALOG = '.modal-dialog';\nconst SELECTOR_MODAL_BODY = '.modal-body';\nconst SELECTOR_DATA_TOGGLE$2 = '[data-bs-toggle=\"modal\"]';\nconst SELECTOR_DATA_DISMISS$2 = '[data-bs-dismiss=\"modal\"]';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Modal extends BaseComponent {\n  constructor(element, config) {\n    super(element);\n    this._config = this._getConfig(config);\n    this._dialog = SelectorEngine.findOne(SELECTOR_DIALOG, this._element);\n    this._backdrop = this._initializeBackDrop();\n    this._isShown = false;\n    this._ignoreBackdropClick = false;\n    this._isTransitioning = false;\n    this._scrollBar = new ScrollBarHelper();\n  } // Getters\n\n\n  static get Default() {\n    return Default$5;\n  }\n\n  static get NAME() {\n    return NAME$6;\n  } // Public\n\n\n  toggle(relatedTarget) {\n    return this._isShown ? this.hide() : this.show(relatedTarget);\n  }\n\n  show(relatedTarget) {\n    if (this._isShown || this._isTransitioning) {\n      return;\n    }\n\n    const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$3, {\n      relatedTarget\n    });\n\n    if (showEvent.defaultPrevented) {\n      return;\n    }\n\n    this._isShown = true;\n\n    if (this._isAnimated()) {\n      this._isTransitioning = true;\n    }\n\n    this._scrollBar.hide();\n\n    document.body.classList.add(CLASS_NAME_OPEN);\n\n    this._adjustDialog();\n\n    this._setEscapeEvent();\n\n    this._setResizeEvent();\n\n    EventHandler.on(this._element, EVENT_CLICK_DISMISS$2, SELECTOR_DATA_DISMISS$2, event => this.hide(event));\n    EventHandler.on(this._dialog, EVENT_MOUSEDOWN_DISMISS, () => {\n      EventHandler.one(this._element, EVENT_MOUSEUP_DISMISS, event => {\n        if (event.target === this._element) {\n          this._ignoreBackdropClick = true;\n        }\n      });\n    });\n\n    this._showBackdrop(() => this._showElement(relatedTarget));\n  }\n\n  hide(event) {\n    if (event && ['A', 'AREA'].includes(event.target.tagName)) {\n      event.preventDefault();\n    }\n\n    if (!this._isShown || this._isTransitioning) {\n      return;\n    }\n\n    const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$3);\n\n    if (hideEvent.defaultPrevented) {\n      return;\n    }\n\n    this._isShown = false;\n\n    const isAnimated = this._isAnimated();\n\n    if (isAnimated) {\n      this._isTransitioning = true;\n    }\n\n    this._setEscapeEvent();\n\n    this._setResizeEvent();\n\n    EventHandler.off(document, EVENT_FOCUSIN$2);\n\n    this._element.classList.remove(CLASS_NAME_SHOW$5);\n\n    EventHandler.off(this._element, EVENT_CLICK_DISMISS$2);\n    EventHandler.off(this._dialog, EVENT_MOUSEDOWN_DISMISS);\n\n    this._queueCallback(() => this._hideModal(), this._element, isAnimated);\n  }\n\n  dispose() {\n    [window, this._dialog].forEach(htmlElement => EventHandler.off(htmlElement, EVENT_KEY$6));\n\n    this._backdrop.dispose();\n\n    super.dispose();\n    /**\n     * `document` has 2 events `EVENT_FOCUSIN` and `EVENT_CLICK_DATA_API`\n     * Do not move `document` in `htmlElements` array\n     * It will remove `EVENT_CLICK_DATA_API` event that should remain\n     */\n\n    EventHandler.off(document, EVENT_FOCUSIN$2);\n  }\n\n  handleUpdate() {\n    this._adjustDialog();\n  } // Private\n\n\n  _initializeBackDrop() {\n    return new Backdrop({\n      isVisible: Boolean(this._config.backdrop),\n      // 'static' option will be translated to true, and booleans will keep their value\n      isAnimated: this._isAnimated()\n    });\n  }\n\n  _getConfig(config) {\n    config = { ...Default$5,\n      ...Manipulator.getDataAttributes(this._element),\n      ...(typeof config === 'object' ? config : {})\n    };\n    typeCheckConfig(NAME$6, config, DefaultType$5);\n    return config;\n  }\n\n  _showElement(relatedTarget) {\n    const isAnimated = this._isAnimated();\n\n    const modalBody = SelectorEngine.findOne(SELECTOR_MODAL_BODY, this._dialog);\n\n    if (!this._element.parentNode || this._element.parentNode.nodeType !== Node.ELEMENT_NODE) {\n      // Don't move modal's DOM position\n      document.body.appendChild(this._element);\n    }\n\n    this._element.style.display = 'block';\n\n    this._element.removeAttribute('aria-hidden');\n\n    this._element.setAttribute('aria-modal', true);\n\n    this._element.setAttribute('role', 'dialog');\n\n    this._element.scrollTop = 0;\n\n    if (modalBody) {\n      modalBody.scrollTop = 0;\n    }\n\n    if (isAnimated) {\n      reflow(this._element);\n    }\n\n    this._element.classList.add(CLASS_NAME_SHOW$5);\n\n    if (this._config.focus) {\n      this._enforceFocus();\n    }\n\n    const transitionComplete = () => {\n      if (this._config.focus) {\n        this._element.focus();\n      }\n\n      this._isTransitioning = false;\n      EventHandler.trigger(this._element, EVENT_SHOWN$3, {\n        relatedTarget\n      });\n    };\n\n    this._queueCallback(transitionComplete, this._dialog, isAnimated);\n  }\n\n  _enforceFocus() {\n    EventHandler.off(document, EVENT_FOCUSIN$2); // guard against infinite focus loop\n\n    EventHandler.on(document, EVENT_FOCUSIN$2, event => {\n      if (document !== event.target && this._element !== event.target && !this._element.contains(event.target)) {\n        this._element.focus();\n      }\n    });\n  }\n\n  _setEscapeEvent() {\n    if (this._isShown) {\n      EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS$1, event => {\n        if (this._config.keyboard && event.key === ESCAPE_KEY$1) {\n          event.preventDefault();\n          this.hide();\n        } else if (!this._config.keyboard && event.key === ESCAPE_KEY$1) {\n          this._triggerBackdropTransition();\n        }\n      });\n    } else {\n      EventHandler.off(this._element, EVENT_KEYDOWN_DISMISS$1);\n    }\n  }\n\n  _setResizeEvent() {\n    if (this._isShown) {\n      EventHandler.on(window, EVENT_RESIZE, () => this._adjustDialog());\n    } else {\n      EventHandler.off(window, EVENT_RESIZE);\n    }\n  }\n\n  _hideModal() {\n    this._element.style.display = 'none';\n\n    this._element.setAttribute('aria-hidden', true);\n\n    this._element.removeAttribute('aria-modal');\n\n    this._element.removeAttribute('role');\n\n    this._isTransitioning = false;\n\n    this._backdrop.hide(() => {\n      document.body.classList.remove(CLASS_NAME_OPEN);\n\n      this._resetAdjustments();\n\n      this._scrollBar.reset();\n\n      EventHandler.trigger(this._element, EVENT_HIDDEN$3);\n    });\n  }\n\n  _showBackdrop(callback) {\n    EventHandler.on(this._element, EVENT_CLICK_DISMISS$2, event => {\n      if (this._ignoreBackdropClick) {\n        this._ignoreBackdropClick = false;\n        return;\n      }\n\n      if (event.target !== event.currentTarget) {\n        return;\n      }\n\n      if (this._config.backdrop === true) {\n        this.hide();\n      } else if (this._config.backdrop === 'static') {\n        this._triggerBackdropTransition();\n      }\n    });\n\n    this._backdrop.show(callback);\n  }\n\n  _isAnimated() {\n    return this._element.classList.contains(CLASS_NAME_FADE$4);\n  }\n\n  _triggerBackdropTransition() {\n    const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED);\n\n    if (hideEvent.defaultPrevented) {\n      return;\n    }\n\n    const {\n      classList,\n      scrollHeight,\n      style\n    } = this._element;\n    const isModalOverflowing = scrollHeight > document.documentElement.clientHeight; // return if the following background transition hasn't yet completed\n\n    if (!isModalOverflowing && style.overflowY === 'hidden' || classList.contains(CLASS_NAME_STATIC)) {\n      return;\n    }\n\n    if (!isModalOverflowing) {\n      style.overflowY = 'hidden';\n    }\n\n    classList.add(CLASS_NAME_STATIC);\n\n    this._queueCallback(() => {\n      classList.remove(CLASS_NAME_STATIC);\n\n      if (!isModalOverflowing) {\n        this._queueCallback(() => {\n          style.overflowY = '';\n        }, this._dialog);\n      }\n    }, this._dialog);\n\n    this._element.focus();\n  } // ----------------------------------------------------------------------\n  // the following methods are used to handle overflowing modals\n  // ----------------------------------------------------------------------\n\n\n  _adjustDialog() {\n    const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;\n\n    const scrollbarWidth = this._scrollBar.getWidth();\n\n    const isBodyOverflowing = scrollbarWidth > 0;\n\n    if (!isBodyOverflowing && isModalOverflowing && !isRTL() || isBodyOverflowing && !isModalOverflowing && isRTL()) {\n      this._element.style.paddingLeft = `${scrollbarWidth}px`;\n    }\n\n    if (isBodyOverflowing && !isModalOverflowing && !isRTL() || !isBodyOverflowing && isModalOverflowing && isRTL()) {\n      this._element.style.paddingRight = `${scrollbarWidth}px`;\n    }\n  }\n\n  _resetAdjustments() {\n    this._element.style.paddingLeft = '';\n    this._element.style.paddingRight = '';\n  } // Static\n\n\n  static jQueryInterface(config, relatedTarget) {\n    return this.each(function () {\n      const data = Modal.getOrCreateInstance(this, config);\n\n      if (typeof config !== 'string') {\n        return;\n      }\n\n      if (typeof data[config] === 'undefined') {\n        throw new TypeError(`No method named \"${config}\"`);\n      }\n\n      data[config](relatedTarget);\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$2, SELECTOR_DATA_TOGGLE$2, function (event) {\n  const target = getElementFromSelector(this);\n\n  if (['A', 'AREA'].includes(this.tagName)) {\n    event.preventDefault();\n  }\n\n  EventHandler.one(target, EVENT_SHOW$3, showEvent => {\n    if (showEvent.defaultPrevented) {\n      // only register focus restorer if modal will actually get shown\n      return;\n    }\n\n    EventHandler.one(target, EVENT_HIDDEN$3, () => {\n      if (isVisible(this)) {\n        this.focus();\n      }\n    });\n  });\n  const data = Modal.getOrCreateInstance(target);\n  data.toggle(this);\n});\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Modal to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Modal);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): offcanvas.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$5 = 'offcanvas';\nconst DATA_KEY$5 = 'bs.offcanvas';\nconst EVENT_KEY$5 = `.${DATA_KEY$5}`;\nconst DATA_API_KEY$2 = '.data-api';\nconst EVENT_LOAD_DATA_API$1 = `load${EVENT_KEY$5}${DATA_API_KEY$2}`;\nconst ESCAPE_KEY = 'Escape';\nconst Default$4 = {\n  backdrop: true,\n  keyboard: true,\n  scroll: false\n};\nconst DefaultType$4 = {\n  backdrop: 'boolean',\n  keyboard: 'boolean',\n  scroll: 'boolean'\n};\nconst CLASS_NAME_SHOW$4 = 'show';\nconst OPEN_SELECTOR = '.offcanvas.show';\nconst EVENT_SHOW$2 = `show${EVENT_KEY$5}`;\nconst EVENT_SHOWN$2 = `shown${EVENT_KEY$5}`;\nconst EVENT_HIDE$2 = `hide${EVENT_KEY$5}`;\nconst EVENT_HIDDEN$2 = `hidden${EVENT_KEY$5}`;\nconst EVENT_FOCUSIN$1 = `focusin${EVENT_KEY$5}`;\nconst EVENT_CLICK_DATA_API$1 = `click${EVENT_KEY$5}${DATA_API_KEY$2}`;\nconst EVENT_CLICK_DISMISS$1 = `click.dismiss${EVENT_KEY$5}`;\nconst EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY$5}`;\nconst SELECTOR_DATA_DISMISS$1 = '[data-bs-dismiss=\"offcanvas\"]';\nconst SELECTOR_DATA_TOGGLE$1 = '[data-bs-toggle=\"offcanvas\"]';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Offcanvas extends BaseComponent {\n  constructor(element, config) {\n    super(element);\n    this._config = this._getConfig(config);\n    this._isShown = false;\n    this._backdrop = this._initializeBackDrop();\n\n    this._addEventListeners();\n  } // Getters\n\n\n  static get NAME() {\n    return NAME$5;\n  }\n\n  static get Default() {\n    return Default$4;\n  } // Public\n\n\n  toggle(relatedTarget) {\n    return this._isShown ? this.hide() : this.show(relatedTarget);\n  }\n\n  show(relatedTarget) {\n    if (this._isShown) {\n      return;\n    }\n\n    const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$2, {\n      relatedTarget\n    });\n\n    if (showEvent.defaultPrevented) {\n      return;\n    }\n\n    this._isShown = true;\n    this._element.style.visibility = 'visible';\n\n    this._backdrop.show();\n\n    if (!this._config.scroll) {\n      new ScrollBarHelper().hide();\n\n      this._enforceFocusOnElement(this._element);\n    }\n\n    this._element.removeAttribute('aria-hidden');\n\n    this._element.setAttribute('aria-modal', true);\n\n    this._element.setAttribute('role', 'dialog');\n\n    this._element.classList.add(CLASS_NAME_SHOW$4);\n\n    const completeCallBack = () => {\n      EventHandler.trigger(this._element, EVENT_SHOWN$2, {\n        relatedTarget\n      });\n    };\n\n    this._queueCallback(completeCallBack, this._element, true);\n  }\n\n  hide() {\n    if (!this._isShown) {\n      return;\n    }\n\n    const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$2);\n\n    if (hideEvent.defaultPrevented) {\n      return;\n    }\n\n    EventHandler.off(document, EVENT_FOCUSIN$1);\n\n    this._element.blur();\n\n    this._isShown = false;\n\n    this._element.classList.remove(CLASS_NAME_SHOW$4);\n\n    this._backdrop.hide();\n\n    const completeCallback = () => {\n      this._element.setAttribute('aria-hidden', true);\n\n      this._element.removeAttribute('aria-modal');\n\n      this._element.removeAttribute('role');\n\n      this._element.style.visibility = 'hidden';\n\n      if (!this._config.scroll) {\n        new ScrollBarHelper().reset();\n      }\n\n      EventHandler.trigger(this._element, EVENT_HIDDEN$2);\n    };\n\n    this._queueCallback(completeCallback, this._element, true);\n  }\n\n  dispose() {\n    this._backdrop.dispose();\n\n    super.dispose();\n    EventHandler.off(document, EVENT_FOCUSIN$1);\n  } // Private\n\n\n  _getConfig(config) {\n    config = { ...Default$4,\n      ...Manipulator.getDataAttributes(this._element),\n      ...(typeof config === 'object' ? config : {})\n    };\n    typeCheckConfig(NAME$5, config, DefaultType$4);\n    return config;\n  }\n\n  _initializeBackDrop() {\n    return new Backdrop({\n      isVisible: this._config.backdrop,\n      isAnimated: true,\n      rootElement: this._element.parentNode,\n      clickCallback: () => this.hide()\n    });\n  }\n\n  _enforceFocusOnElement(element) {\n    EventHandler.off(document, EVENT_FOCUSIN$1); // guard against infinite focus loop\n\n    EventHandler.on(document, EVENT_FOCUSIN$1, event => {\n      if (document !== event.target && element !== event.target && !element.contains(event.target)) {\n        element.focus();\n      }\n    });\n    element.focus();\n  }\n\n  _addEventListeners() {\n    EventHandler.on(this._element, EVENT_CLICK_DISMISS$1, SELECTOR_DATA_DISMISS$1, () => this.hide());\n    EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS, event => {\n      if (this._config.keyboard && event.key === ESCAPE_KEY) {\n        this.hide();\n      }\n    });\n  } // Static\n\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Offcanvas.getOrCreateInstance(this, config);\n\n      if (typeof config !== 'string') {\n        return;\n      }\n\n      if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n        throw new TypeError(`No method named \"${config}\"`);\n      }\n\n      data[config](this);\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$1, SELECTOR_DATA_TOGGLE$1, function (event) {\n  const target = getElementFromSelector(this);\n\n  if (['A', 'AREA'].includes(this.tagName)) {\n    event.preventDefault();\n  }\n\n  if (isDisabled(this)) {\n    return;\n  }\n\n  EventHandler.one(target, EVENT_HIDDEN$2, () => {\n    // focus on trigger when it is closed\n    if (isVisible(this)) {\n      this.focus();\n    }\n  }); // avoid conflict when clicking a toggler of an offcanvas, while another is open\n\n  const allReadyOpen = SelectorEngine.findOne(OPEN_SELECTOR);\n\n  if (allReadyOpen && allReadyOpen !== target) {\n    Offcanvas.getInstance(allReadyOpen).hide();\n  }\n\n  const data = Offcanvas.getOrCreateInstance(target);\n  data.toggle(this);\n});\nEventHandler.on(window, EVENT_LOAD_DATA_API$1, () => SelectorEngine.find(OPEN_SELECTOR).forEach(el => Offcanvas.getOrCreateInstance(el).show()));\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\ndefineJQueryPlugin(Offcanvas);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): util/sanitizer.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\nconst uriAttrs = new Set(['background', 'cite', 'href', 'itemtype', 'longdesc', 'poster', 'src', 'xlink:href']);\nconst ARIA_ATTRIBUTE_PATTERN = /^aria-[\\w-]*$/i;\n/**\n * A pattern that recognizes a commonly useful subset of URLs that are safe.\n *\n * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts\n */\n\nconst SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file):|[^#&/:?]*(?:[#/?]|$))/i;\n/**\n * A pattern that matches safe data URLs. Only matches image, video and audio types.\n *\n * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts\n */\n\nconst DATA_URL_PATTERN = /^data:(?:image\\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\\/(?:mpeg|mp4|ogg|webm)|audio\\/(?:mp3|oga|ogg|opus));base64,[\\d+/a-z]+=*$/i;\n\nconst allowedAttribute = (attr, allowedAttributeList) => {\n  const attrName = attr.nodeName.toLowerCase();\n\n  if (allowedAttributeList.includes(attrName)) {\n    if (uriAttrs.has(attrName)) {\n      return Boolean(SAFE_URL_PATTERN.test(attr.nodeValue) || DATA_URL_PATTERN.test(attr.nodeValue));\n    }\n\n    return true;\n  }\n\n  const regExp = allowedAttributeList.filter(attrRegex => attrRegex instanceof RegExp); // Check if a regular expression validates the attribute.\n\n  for (let i = 0, len = regExp.length; i < len; i++) {\n    if (regExp[i].test(attrName)) {\n      return true;\n    }\n  }\n\n  return false;\n};\n\nconst DefaultAllowlist = {\n  // Global attributes allowed on any supplied element below.\n  '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],\n  a: ['target', 'href', 'title', 'rel'],\n  area: [],\n  b: [],\n  br: [],\n  col: [],\n  code: [],\n  div: [],\n  em: [],\n  hr: [],\n  h1: [],\n  h2: [],\n  h3: [],\n  h4: [],\n  h5: [],\n  h6: [],\n  i: [],\n  img: ['src', 'srcset', 'alt', 'title', 'width', 'height'],\n  li: [],\n  ol: [],\n  p: [],\n  pre: [],\n  s: [],\n  small: [],\n  span: [],\n  sub: [],\n  sup: [],\n  strong: [],\n  u: [],\n  ul: []\n};\nfunction sanitizeHtml(unsafeHtml, allowList, sanitizeFn) {\n  if (!unsafeHtml.length) {\n    return unsafeHtml;\n  }\n\n  if (sanitizeFn && typeof sanitizeFn === 'function') {\n    return sanitizeFn(unsafeHtml);\n  }\n\n  const domParser = new window.DOMParser();\n  const createdDocument = domParser.parseFromString(unsafeHtml, 'text/html');\n  const allowlistKeys = Object.keys(allowList);\n  const elements = [].concat(...createdDocument.body.querySelectorAll('*'));\n\n  for (let i = 0, len = elements.length; i < len; i++) {\n    const el = elements[i];\n    const elName = el.nodeName.toLowerCase();\n\n    if (!allowlistKeys.includes(elName)) {\n      el.remove();\n      continue;\n    }\n\n    const attributeList = [].concat(...el.attributes);\n    const allowedAttributes = [].concat(allowList['*'] || [], allowList[elName] || []);\n    attributeList.forEach(attr => {\n      if (!allowedAttribute(attr, allowedAttributes)) {\n        el.removeAttribute(attr.nodeName);\n      }\n    });\n  }\n\n  return createdDocument.body.innerHTML;\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): tooltip.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$4 = 'tooltip';\nconst DATA_KEY$4 = 'bs.tooltip';\nconst EVENT_KEY$4 = `.${DATA_KEY$4}`;\nconst CLASS_PREFIX$1 = 'bs-tooltip';\nconst BSCLS_PREFIX_REGEX$1 = new RegExp(`(^|\\\\s)${CLASS_PREFIX$1}\\\\S+`, 'g');\nconst DISALLOWED_ATTRIBUTES = new Set(['sanitize', 'allowList', 'sanitizeFn']);\nconst DefaultType$3 = {\n  animation: 'boolean',\n  template: 'string',\n  title: '(string|element|function)',\n  trigger: 'string',\n  delay: '(number|object)',\n  html: 'boolean',\n  selector: '(string|boolean)',\n  placement: '(string|function)',\n  offset: '(array|string|function)',\n  container: '(string|element|boolean)',\n  fallbackPlacements: 'array',\n  boundary: '(string|element)',\n  customClass: '(string|function)',\n  sanitize: 'boolean',\n  sanitizeFn: '(null|function)',\n  allowList: 'object',\n  popperConfig: '(null|object|function)'\n};\nconst AttachmentMap = {\n  AUTO: 'auto',\n  TOP: 'top',\n  RIGHT: isRTL() ? 'left' : 'right',\n  BOTTOM: 'bottom',\n  LEFT: isRTL() ? 'right' : 'left'\n};\nconst Default$3 = {\n  animation: true,\n  template: '<div class=\"tooltip\" role=\"tooltip\">' + '<div class=\"tooltip-arrow\"></div>' + '<div class=\"tooltip-inner\"></div>' + '</div>',\n  trigger: 'hover focus',\n  title: '',\n  delay: 0,\n  html: false,\n  selector: false,\n  placement: 'top',\n  offset: [0, 0],\n  container: false,\n  fallbackPlacements: ['top', 'right', 'bottom', 'left'],\n  boundary: 'clippingParents',\n  customClass: '',\n  sanitize: true,\n  sanitizeFn: null,\n  allowList: DefaultAllowlist,\n  popperConfig: null\n};\nconst Event$2 = {\n  HIDE: `hide${EVENT_KEY$4}`,\n  HIDDEN: `hidden${EVENT_KEY$4}`,\n  SHOW: `show${EVENT_KEY$4}`,\n  SHOWN: `shown${EVENT_KEY$4}`,\n  INSERTED: `inserted${EVENT_KEY$4}`,\n  CLICK: `click${EVENT_KEY$4}`,\n  FOCUSIN: `focusin${EVENT_KEY$4}`,\n  FOCUSOUT: `focusout${EVENT_KEY$4}`,\n  MOUSEENTER: `mouseenter${EVENT_KEY$4}`,\n  MOUSELEAVE: `mouseleave${EVENT_KEY$4}`\n};\nconst CLASS_NAME_FADE$3 = 'fade';\nconst CLASS_NAME_MODAL = 'modal';\nconst CLASS_NAME_SHOW$3 = 'show';\nconst HOVER_STATE_SHOW = 'show';\nconst HOVER_STATE_OUT = 'out';\nconst SELECTOR_TOOLTIP_INNER = '.tooltip-inner';\nconst TRIGGER_HOVER = 'hover';\nconst TRIGGER_FOCUS = 'focus';\nconst TRIGGER_CLICK = 'click';\nconst TRIGGER_MANUAL = 'manual';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Tooltip extends BaseComponent {\n  constructor(element, config) {\n    if (typeof Popper === 'undefined') {\n      throw new TypeError('Bootstrap\\'s tooltips require Popper (https://popper.js.org)');\n    }\n\n    super(element); // private\n\n    this._isEnabled = true;\n    this._timeout = 0;\n    this._hoverState = '';\n    this._activeTrigger = {};\n    this._popper = null; // Protected\n\n    this._config = this._getConfig(config);\n    this.tip = null;\n\n    this._setListeners();\n  } // Getters\n\n\n  static get Default() {\n    return Default$3;\n  }\n\n  static get NAME() {\n    return NAME$4;\n  }\n\n  static get Event() {\n    return Event$2;\n  }\n\n  static get DefaultType() {\n    return DefaultType$3;\n  } // Public\n\n\n  enable() {\n    this._isEnabled = true;\n  }\n\n  disable() {\n    this._isEnabled = false;\n  }\n\n  toggleEnabled() {\n    this._isEnabled = !this._isEnabled;\n  }\n\n  toggle(event) {\n    if (!this._isEnabled) {\n      return;\n    }\n\n    if (event) {\n      const context = this._initializeOnDelegatedTarget(event);\n\n      context._activeTrigger.click = !context._activeTrigger.click;\n\n      if (context._isWithActiveTrigger()) {\n        context._enter(null, context);\n      } else {\n        context._leave(null, context);\n      }\n    } else {\n      if (this.getTipElement().classList.contains(CLASS_NAME_SHOW$3)) {\n        this._leave(null, this);\n\n        return;\n      }\n\n      this._enter(null, this);\n    }\n  }\n\n  dispose() {\n    clearTimeout(this._timeout);\n    EventHandler.off(this._element.closest(`.${CLASS_NAME_MODAL}`), 'hide.bs.modal', this._hideModalHandler);\n\n    if (this.tip) {\n      this.tip.remove();\n    }\n\n    if (this._popper) {\n      this._popper.destroy();\n    }\n\n    super.dispose();\n  }\n\n  show() {\n    if (this._element.style.display === 'none') {\n      throw new Error('Please use show on visible elements');\n    }\n\n    if (!(this.isWithContent() && this._isEnabled)) {\n      return;\n    }\n\n    const showEvent = EventHandler.trigger(this._element, this.constructor.Event.SHOW);\n    const shadowRoot = findShadowRoot(this._element);\n    const isInTheDom = shadowRoot === null ? this._element.ownerDocument.documentElement.contains(this._element) : shadowRoot.contains(this._element);\n\n    if (showEvent.defaultPrevented || !isInTheDom) {\n      return;\n    }\n\n    const tip = this.getTipElement();\n    const tipId = getUID(this.constructor.NAME);\n    tip.setAttribute('id', tipId);\n\n    this._element.setAttribute('aria-describedby', tipId);\n\n    this.setContent();\n\n    if (this._config.animation) {\n      tip.classList.add(CLASS_NAME_FADE$3);\n    }\n\n    const placement = typeof this._config.placement === 'function' ? this._config.placement.call(this, tip, this._element) : this._config.placement;\n\n    const attachment = this._getAttachment(placement);\n\n    this._addAttachmentClass(attachment);\n\n    const {\n      container\n    } = this._config;\n    Data.set(tip, this.constructor.DATA_KEY, this);\n\n    if (!this._element.ownerDocument.documentElement.contains(this.tip)) {\n      container.appendChild(tip);\n      EventHandler.trigger(this._element, this.constructor.Event.INSERTED);\n    }\n\n    if (this._popper) {\n      this._popper.update();\n    } else {\n      this._popper = Popper.createPopper(this._element, tip, this._getPopperConfig(attachment));\n    }\n\n    tip.classList.add(CLASS_NAME_SHOW$3);\n    const customClass = typeof this._config.customClass === 'function' ? this._config.customClass() : this._config.customClass;\n\n    if (customClass) {\n      tip.classList.add(...customClass.split(' '));\n    } // If this is a touch-enabled device we add extra\n    // empty mouseover listeners to the body's immediate children;\n    // only needed because of broken event delegation on iOS\n    // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n\n\n    if ('ontouchstart' in document.documentElement) {\n      [].concat(...document.body.children).forEach(element => {\n        EventHandler.on(element, 'mouseover', noop);\n      });\n    }\n\n    const complete = () => {\n      const prevHoverState = this._hoverState;\n      this._hoverState = null;\n      EventHandler.trigger(this._element, this.constructor.Event.SHOWN);\n\n      if (prevHoverState === HOVER_STATE_OUT) {\n        this._leave(null, this);\n      }\n    };\n\n    const isAnimated = this.tip.classList.contains(CLASS_NAME_FADE$3);\n\n    this._queueCallback(complete, this.tip, isAnimated);\n  }\n\n  hide() {\n    if (!this._popper) {\n      return;\n    }\n\n    const tip = this.getTipElement();\n\n    const complete = () => {\n      if (this._isWithActiveTrigger()) {\n        return;\n      }\n\n      if (this._hoverState !== HOVER_STATE_SHOW) {\n        tip.remove();\n      }\n\n      this._cleanTipClass();\n\n      this._element.removeAttribute('aria-describedby');\n\n      EventHandler.trigger(this._element, this.constructor.Event.HIDDEN);\n\n      if (this._popper) {\n        this._popper.destroy();\n\n        this._popper = null;\n      }\n    };\n\n    const hideEvent = EventHandler.trigger(this._element, this.constructor.Event.HIDE);\n\n    if (hideEvent.defaultPrevented) {\n      return;\n    }\n\n    tip.classList.remove(CLASS_NAME_SHOW$3); // If this is a touch-enabled device we remove the extra\n    // empty mouseover listeners we added for iOS support\n\n    if ('ontouchstart' in document.documentElement) {\n      [].concat(...document.body.children).forEach(element => EventHandler.off(element, 'mouseover', noop));\n    }\n\n    this._activeTrigger[TRIGGER_CLICK] = false;\n    this._activeTrigger[TRIGGER_FOCUS] = false;\n    this._activeTrigger[TRIGGER_HOVER] = false;\n    const isAnimated = this.tip.classList.contains(CLASS_NAME_FADE$3);\n\n    this._queueCallback(complete, this.tip, isAnimated);\n\n    this._hoverState = '';\n  }\n\n  update() {\n    if (this._popper !== null) {\n      this._popper.update();\n    }\n  } // Protected\n\n\n  isWithContent() {\n    return Boolean(this.getTitle());\n  }\n\n  getTipElement() {\n    if (this.tip) {\n      return this.tip;\n    }\n\n    const element = document.createElement('div');\n    element.innerHTML = this._config.template;\n    this.tip = element.children[0];\n    return this.tip;\n  }\n\n  setContent() {\n    const tip = this.getTipElement();\n    this.setElementContent(SelectorEngine.findOne(SELECTOR_TOOLTIP_INNER, tip), this.getTitle());\n    tip.classList.remove(CLASS_NAME_FADE$3, CLASS_NAME_SHOW$3);\n  }\n\n  setElementContent(element, content) {\n    if (element === null) {\n      return;\n    }\n\n    if (isElement(content)) {\n      content = getElement(content); // content is a DOM node or a jQuery\n\n      if (this._config.html) {\n        if (content.parentNode !== element) {\n          element.innerHTML = '';\n          element.appendChild(content);\n        }\n      } else {\n        element.textContent = content.textContent;\n      }\n\n      return;\n    }\n\n    if (this._config.html) {\n      if (this._config.sanitize) {\n        content = sanitizeHtml(content, this._config.allowList, this._config.sanitizeFn);\n      }\n\n      element.innerHTML = content;\n    } else {\n      element.textContent = content;\n    }\n  }\n\n  getTitle() {\n    let title = this._element.getAttribute('data-bs-original-title');\n\n    if (!title) {\n      title = typeof this._config.title === 'function' ? this._config.title.call(this._element) : this._config.title;\n    }\n\n    return title;\n  }\n\n  updateAttachment(attachment) {\n    if (attachment === 'right') {\n      return 'end';\n    }\n\n    if (attachment === 'left') {\n      return 'start';\n    }\n\n    return attachment;\n  } // Private\n\n\n  _initializeOnDelegatedTarget(event, context) {\n    const dataKey = this.constructor.DATA_KEY;\n    context = context || Data.get(event.delegateTarget, dataKey);\n\n    if (!context) {\n      context = new this.constructor(event.delegateTarget, this._getDelegateConfig());\n      Data.set(event.delegateTarget, dataKey, context);\n    }\n\n    return context;\n  }\n\n  _getOffset() {\n    const {\n      offset\n    } = this._config;\n\n    if (typeof offset === 'string') {\n      return offset.split(',').map(val => Number.parseInt(val, 10));\n    }\n\n    if (typeof offset === 'function') {\n      return popperData => offset(popperData, this._element);\n    }\n\n    return offset;\n  }\n\n  _getPopperConfig(attachment) {\n    const defaultBsPopperConfig = {\n      placement: attachment,\n      modifiers: [{\n        name: 'flip',\n        options: {\n          fallbackPlacements: this._config.fallbackPlacements\n        }\n      }, {\n        name: 'offset',\n        options: {\n          offset: this._getOffset()\n        }\n      }, {\n        name: 'preventOverflow',\n        options: {\n          boundary: this._config.boundary\n        }\n      }, {\n        name: 'arrow',\n        options: {\n          element: `.${this.constructor.NAME}-arrow`\n        }\n      }, {\n        name: 'onChange',\n        enabled: true,\n        phase: 'afterWrite',\n        fn: data => this._handlePopperPlacementChange(data)\n      }],\n      onFirstUpdate: data => {\n        if (data.options.placement !== data.placement) {\n          this._handlePopperPlacementChange(data);\n        }\n      }\n    };\n    return { ...defaultBsPopperConfig,\n      ...(typeof this._config.popperConfig === 'function' ? this._config.popperConfig(defaultBsPopperConfig) : this._config.popperConfig)\n    };\n  }\n\n  _addAttachmentClass(attachment) {\n    this.getTipElement().classList.add(`${CLASS_PREFIX$1}-${this.updateAttachment(attachment)}`);\n  }\n\n  _getAttachment(placement) {\n    return AttachmentMap[placement.toUpperCase()];\n  }\n\n  _setListeners() {\n    const triggers = this._config.trigger.split(' ');\n\n    triggers.forEach(trigger => {\n      if (trigger === 'click') {\n        EventHandler.on(this._element, this.constructor.Event.CLICK, this._config.selector, event => this.toggle(event));\n      } else if (trigger !== TRIGGER_MANUAL) {\n        const eventIn = trigger === TRIGGER_HOVER ? this.constructor.Event.MOUSEENTER : this.constructor.Event.FOCUSIN;\n        const eventOut = trigger === TRIGGER_HOVER ? this.constructor.Event.MOUSELEAVE : this.constructor.Event.FOCUSOUT;\n        EventHandler.on(this._element, eventIn, this._config.selector, event => this._enter(event));\n        EventHandler.on(this._element, eventOut, this._config.selector, event => this._leave(event));\n      }\n    });\n\n    this._hideModalHandler = () => {\n      if (this._element) {\n        this.hide();\n      }\n    };\n\n    EventHandler.on(this._element.closest(`.${CLASS_NAME_MODAL}`), 'hide.bs.modal', this._hideModalHandler);\n\n    if (this._config.selector) {\n      this._config = { ...this._config,\n        trigger: 'manual',\n        selector: ''\n      };\n    } else {\n      this._fixTitle();\n    }\n  }\n\n  _fixTitle() {\n    const title = this._element.getAttribute('title');\n\n    const originalTitleType = typeof this._element.getAttribute('data-bs-original-title');\n\n    if (title || originalTitleType !== 'string') {\n      this._element.setAttribute('data-bs-original-title', title || '');\n\n      if (title && !this._element.getAttribute('aria-label') && !this._element.textContent) {\n        this._element.setAttribute('aria-label', title);\n      }\n\n      this._element.setAttribute('title', '');\n    }\n  }\n\n  _enter(event, context) {\n    context = this._initializeOnDelegatedTarget(event, context);\n\n    if (event) {\n      context._activeTrigger[event.type === 'focusin' ? TRIGGER_FOCUS : TRIGGER_HOVER] = true;\n    }\n\n    if (context.getTipElement().classList.contains(CLASS_NAME_SHOW$3) || context._hoverState === HOVER_STATE_SHOW) {\n      context._hoverState = HOVER_STATE_SHOW;\n      return;\n    }\n\n    clearTimeout(context._timeout);\n    context._hoverState = HOVER_STATE_SHOW;\n\n    if (!context._config.delay || !context._config.delay.show) {\n      context.show();\n      return;\n    }\n\n    context._timeout = setTimeout(() => {\n      if (context._hoverState === HOVER_STATE_SHOW) {\n        context.show();\n      }\n    }, context._config.delay.show);\n  }\n\n  _leave(event, context) {\n    context = this._initializeOnDelegatedTarget(event, context);\n\n    if (event) {\n      context._activeTrigger[event.type === 'focusout' ? TRIGGER_FOCUS : TRIGGER_HOVER] = context._element.contains(event.relatedTarget);\n    }\n\n    if (context._isWithActiveTrigger()) {\n      return;\n    }\n\n    clearTimeout(context._timeout);\n    context._hoverState = HOVER_STATE_OUT;\n\n    if (!context._config.delay || !context._config.delay.hide) {\n      context.hide();\n      return;\n    }\n\n    context._timeout = setTimeout(() => {\n      if (context._hoverState === HOVER_STATE_OUT) {\n        context.hide();\n      }\n    }, context._config.delay.hide);\n  }\n\n  _isWithActiveTrigger() {\n    for (const trigger in this._activeTrigger) {\n      if (this._activeTrigger[trigger]) {\n        return true;\n      }\n    }\n\n    return false;\n  }\n\n  _getConfig(config) {\n    const dataAttributes = Manipulator.getDataAttributes(this._element);\n    Object.keys(dataAttributes).forEach(dataAttr => {\n      if (DISALLOWED_ATTRIBUTES.has(dataAttr)) {\n        delete dataAttributes[dataAttr];\n      }\n    });\n    config = { ...this.constructor.Default,\n      ...dataAttributes,\n      ...(typeof config === 'object' && config ? config : {})\n    };\n    config.container = config.container === false ? document.body : getElement(config.container);\n\n    if (typeof config.delay === 'number') {\n      config.delay = {\n        show: config.delay,\n        hide: config.delay\n      };\n    }\n\n    if (typeof config.title === 'number') {\n      config.title = config.title.toString();\n    }\n\n    if (typeof config.content === 'number') {\n      config.content = config.content.toString();\n    }\n\n    typeCheckConfig(NAME$4, config, this.constructor.DefaultType);\n\n    if (config.sanitize) {\n      config.template = sanitizeHtml(config.template, config.allowList, config.sanitizeFn);\n    }\n\n    return config;\n  }\n\n  _getDelegateConfig() {\n    const config = {};\n\n    if (this._config) {\n      for (const key in this._config) {\n        if (this.constructor.Default[key] !== this._config[key]) {\n          config[key] = this._config[key];\n        }\n      }\n    }\n\n    return config;\n  }\n\n  _cleanTipClass() {\n    const tip = this.getTipElement();\n    const tabClass = tip.getAttribute('class').match(BSCLS_PREFIX_REGEX$1);\n\n    if (tabClass !== null && tabClass.length > 0) {\n      tabClass.map(token => token.trim()).forEach(tClass => tip.classList.remove(tClass));\n    }\n  }\n\n  _handlePopperPlacementChange(popperData) {\n    const {\n      state\n    } = popperData;\n\n    if (!state) {\n      return;\n    }\n\n    this.tip = state.elements.popper;\n\n    this._cleanTipClass();\n\n    this._addAttachmentClass(this._getAttachment(state.placement));\n  } // Static\n\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Tooltip.getOrCreateInstance(this, config);\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config]();\n      }\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Tooltip to jQuery only if jQuery is present\n */\n\n\ndefineJQueryPlugin(Tooltip);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): popover.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$3 = 'popover';\nconst DATA_KEY$3 = 'bs.popover';\nconst EVENT_KEY$3 = `.${DATA_KEY$3}`;\nconst CLASS_PREFIX = 'bs-popover';\nconst BSCLS_PREFIX_REGEX = new RegExp(`(^|\\\\s)${CLASS_PREFIX}\\\\S+`, 'g');\nconst Default$2 = { ...Tooltip.Default,\n  placement: 'right',\n  offset: [0, 8],\n  trigger: 'click',\n  content: '',\n  template: '<div class=\"popover\" role=\"tooltip\">' + '<div class=\"popover-arrow\"></div>' + '<h3 class=\"popover-header\"></h3>' + '<div class=\"popover-body\"></div>' + '</div>'\n};\nconst DefaultType$2 = { ...Tooltip.DefaultType,\n  content: '(string|element|function)'\n};\nconst Event$1 = {\n  HIDE: `hide${EVENT_KEY$3}`,\n  HIDDEN: `hidden${EVENT_KEY$3}`,\n  SHOW: `show${EVENT_KEY$3}`,\n  SHOWN: `shown${EVENT_KEY$3}`,\n  INSERTED: `inserted${EVENT_KEY$3}`,\n  CLICK: `click${EVENT_KEY$3}`,\n  FOCUSIN: `focusin${EVENT_KEY$3}`,\n  FOCUSOUT: `focusout${EVENT_KEY$3}`,\n  MOUSEENTER: `mouseenter${EVENT_KEY$3}`,\n  MOUSELEAVE: `mouseleave${EVENT_KEY$3}`\n};\nconst CLASS_NAME_FADE$2 = 'fade';\nconst CLASS_NAME_SHOW$2 = 'show';\nconst SELECTOR_TITLE = '.popover-header';\nconst SELECTOR_CONTENT = '.popover-body';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Popover extends Tooltip {\n  // Getters\n  static get Default() {\n    return Default$2;\n  }\n\n  static get NAME() {\n    return NAME$3;\n  }\n\n  static get Event() {\n    return Event$1;\n  }\n\n  static get DefaultType() {\n    return DefaultType$2;\n  } // Overrides\n\n\n  isWithContent() {\n    return this.getTitle() || this._getContent();\n  }\n\n  getTipElement() {\n    if (this.tip) {\n      return this.tip;\n    }\n\n    this.tip = super.getTipElement();\n\n    if (!this.getTitle()) {\n      SelectorEngine.findOne(SELECTOR_TITLE, this.tip).remove();\n    }\n\n    if (!this._getContent()) {\n      SelectorEngine.findOne(SELECTOR_CONTENT, this.tip).remove();\n    }\n\n    return this.tip;\n  }\n\n  setContent() {\n    const tip = this.getTipElement(); // we use append for html objects to maintain js events\n\n    this.setElementContent(SelectorEngine.findOne(SELECTOR_TITLE, tip), this.getTitle());\n\n    let content = this._getContent();\n\n    if (typeof content === 'function') {\n      content = content.call(this._element);\n    }\n\n    this.setElementContent(SelectorEngine.findOne(SELECTOR_CONTENT, tip), content);\n    tip.classList.remove(CLASS_NAME_FADE$2, CLASS_NAME_SHOW$2);\n  } // Private\n\n\n  _addAttachmentClass(attachment) {\n    this.getTipElement().classList.add(`${CLASS_PREFIX}-${this.updateAttachment(attachment)}`);\n  }\n\n  _getContent() {\n    return this._element.getAttribute('data-bs-content') || this._config.content;\n  }\n\n  _cleanTipClass() {\n    const tip = this.getTipElement();\n    const tabClass = tip.getAttribute('class').match(BSCLS_PREFIX_REGEX);\n\n    if (tabClass !== null && tabClass.length > 0) {\n      tabClass.map(token => token.trim()).forEach(tClass => tip.classList.remove(tClass));\n    }\n  } // Static\n\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Popover.getOrCreateInstance(this, config);\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config]();\n      }\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Popover to jQuery only if jQuery is present\n */\n\n\ndefineJQueryPlugin(Popover);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): scrollspy.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$2 = 'scrollspy';\nconst DATA_KEY$2 = 'bs.scrollspy';\nconst EVENT_KEY$2 = `.${DATA_KEY$2}`;\nconst DATA_API_KEY$1 = '.data-api';\nconst Default$1 = {\n  offset: 10,\n  method: 'auto',\n  target: ''\n};\nconst DefaultType$1 = {\n  offset: 'number',\n  method: 'string',\n  target: '(string|element)'\n};\nconst EVENT_ACTIVATE = `activate${EVENT_KEY$2}`;\nconst EVENT_SCROLL = `scroll${EVENT_KEY$2}`;\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY$2}${DATA_API_KEY$1}`;\nconst CLASS_NAME_DROPDOWN_ITEM = 'dropdown-item';\nconst CLASS_NAME_ACTIVE$1 = 'active';\nconst SELECTOR_DATA_SPY = '[data-bs-spy=\"scroll\"]';\nconst SELECTOR_NAV_LIST_GROUP$1 = '.nav, .list-group';\nconst SELECTOR_NAV_LINKS = '.nav-link';\nconst SELECTOR_NAV_ITEMS = '.nav-item';\nconst SELECTOR_LIST_ITEMS = '.list-group-item';\nconst SELECTOR_DROPDOWN$1 = '.dropdown';\nconst SELECTOR_DROPDOWN_TOGGLE$1 = '.dropdown-toggle';\nconst METHOD_OFFSET = 'offset';\nconst METHOD_POSITION = 'position';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass ScrollSpy extends BaseComponent {\n  constructor(element, config) {\n    super(element);\n    this._scrollElement = this._element.tagName === 'BODY' ? window : this._element;\n    this._config = this._getConfig(config);\n    this._selector = `${this._config.target} ${SELECTOR_NAV_LINKS}, ${this._config.target} ${SELECTOR_LIST_ITEMS}, ${this._config.target} .${CLASS_NAME_DROPDOWN_ITEM}`;\n    this._offsets = [];\n    this._targets = [];\n    this._activeTarget = null;\n    this._scrollHeight = 0;\n    EventHandler.on(this._scrollElement, EVENT_SCROLL, () => this._process());\n    this.refresh();\n\n    this._process();\n  } // Getters\n\n\n  static get Default() {\n    return Default$1;\n  }\n\n  static get NAME() {\n    return NAME$2;\n  } // Public\n\n\n  refresh() {\n    const autoMethod = this._scrollElement === this._scrollElement.window ? METHOD_OFFSET : METHOD_POSITION;\n    const offsetMethod = this._config.method === 'auto' ? autoMethod : this._config.method;\n    const offsetBase = offsetMethod === METHOD_POSITION ? this._getScrollTop() : 0;\n    this._offsets = [];\n    this._targets = [];\n    this._scrollHeight = this._getScrollHeight();\n    const targets = SelectorEngine.find(this._selector);\n    targets.map(element => {\n      const targetSelector = getSelectorFromElement(element);\n      const target = targetSelector ? SelectorEngine.findOne(targetSelector) : null;\n\n      if (target) {\n        const targetBCR = target.getBoundingClientRect();\n\n        if (targetBCR.width || targetBCR.height) {\n          return [Manipulator[offsetMethod](target).top + offsetBase, targetSelector];\n        }\n      }\n\n      return null;\n    }).filter(item => item).sort((a, b) => a[0] - b[0]).forEach(item => {\n      this._offsets.push(item[0]);\n\n      this._targets.push(item[1]);\n    });\n  }\n\n  dispose() {\n    EventHandler.off(this._scrollElement, EVENT_KEY$2);\n    super.dispose();\n  } // Private\n\n\n  _getConfig(config) {\n    config = { ...Default$1,\n      ...Manipulator.getDataAttributes(this._element),\n      ...(typeof config === 'object' && config ? config : {})\n    };\n\n    if (typeof config.target !== 'string' && isElement(config.target)) {\n      let {\n        id\n      } = config.target;\n\n      if (!id) {\n        id = getUID(NAME$2);\n        config.target.id = id;\n      }\n\n      config.target = `#${id}`;\n    }\n\n    typeCheckConfig(NAME$2, config, DefaultType$1);\n    return config;\n  }\n\n  _getScrollTop() {\n    return this._scrollElement === window ? this._scrollElement.pageYOffset : this._scrollElement.scrollTop;\n  }\n\n  _getScrollHeight() {\n    return this._scrollElement.scrollHeight || Math.max(document.body.scrollHeight, document.documentElement.scrollHeight);\n  }\n\n  _getOffsetHeight() {\n    return this._scrollElement === window ? window.innerHeight : this._scrollElement.getBoundingClientRect().height;\n  }\n\n  _process() {\n    const scrollTop = this._getScrollTop() + this._config.offset;\n\n    const scrollHeight = this._getScrollHeight();\n\n    const maxScroll = this._config.offset + scrollHeight - this._getOffsetHeight();\n\n    if (this._scrollHeight !== scrollHeight) {\n      this.refresh();\n    }\n\n    if (scrollTop >= maxScroll) {\n      const target = this._targets[this._targets.length - 1];\n\n      if (this._activeTarget !== target) {\n        this._activate(target);\n      }\n\n      return;\n    }\n\n    if (this._activeTarget && scrollTop < this._offsets[0] && this._offsets[0] > 0) {\n      this._activeTarget = null;\n\n      this._clear();\n\n      return;\n    }\n\n    for (let i = this._offsets.length; i--;) {\n      const isActiveTarget = this._activeTarget !== this._targets[i] && scrollTop >= this._offsets[i] && (typeof this._offsets[i + 1] === 'undefined' || scrollTop < this._offsets[i + 1]);\n\n      if (isActiveTarget) {\n        this._activate(this._targets[i]);\n      }\n    }\n  }\n\n  _activate(target) {\n    this._activeTarget = target;\n\n    this._clear();\n\n    const queries = this._selector.split(',').map(selector => `${selector}[data-bs-target=\"${target}\"],${selector}[href=\"${target}\"]`);\n\n    const link = SelectorEngine.findOne(queries.join(','));\n\n    if (link.classList.contains(CLASS_NAME_DROPDOWN_ITEM)) {\n      SelectorEngine.findOne(SELECTOR_DROPDOWN_TOGGLE$1, link.closest(SELECTOR_DROPDOWN$1)).classList.add(CLASS_NAME_ACTIVE$1);\n      link.classList.add(CLASS_NAME_ACTIVE$1);\n    } else {\n      // Set triggered link as active\n      link.classList.add(CLASS_NAME_ACTIVE$1);\n      SelectorEngine.parents(link, SELECTOR_NAV_LIST_GROUP$1).forEach(listGroup => {\n        // Set triggered links parents as active\n        // With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor\n        SelectorEngine.prev(listGroup, `${SELECTOR_NAV_LINKS}, ${SELECTOR_LIST_ITEMS}`).forEach(item => item.classList.add(CLASS_NAME_ACTIVE$1)); // Handle special case when .nav-link is inside .nav-item\n\n        SelectorEngine.prev(listGroup, SELECTOR_NAV_ITEMS).forEach(navItem => {\n          SelectorEngine.children(navItem, SELECTOR_NAV_LINKS).forEach(item => item.classList.add(CLASS_NAME_ACTIVE$1));\n        });\n      });\n    }\n\n    EventHandler.trigger(this._scrollElement, EVENT_ACTIVATE, {\n      relatedTarget: target\n    });\n  }\n\n  _clear() {\n    SelectorEngine.find(this._selector).filter(node => node.classList.contains(CLASS_NAME_ACTIVE$1)).forEach(node => node.classList.remove(CLASS_NAME_ACTIVE$1));\n  } // Static\n\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = ScrollSpy.getOrCreateInstance(this, config);\n\n      if (typeof config !== 'string') {\n        return;\n      }\n\n      if (typeof data[config] === 'undefined') {\n        throw new TypeError(`No method named \"${config}\"`);\n      }\n\n      data[config]();\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n  SelectorEngine.find(SELECTOR_DATA_SPY).forEach(spy => new ScrollSpy(spy));\n});\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .ScrollSpy to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(ScrollSpy);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): tab.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$1 = 'tab';\nconst DATA_KEY$1 = 'bs.tab';\nconst EVENT_KEY$1 = `.${DATA_KEY$1}`;\nconst DATA_API_KEY = '.data-api';\nconst EVENT_HIDE$1 = `hide${EVENT_KEY$1}`;\nconst EVENT_HIDDEN$1 = `hidden${EVENT_KEY$1}`;\nconst EVENT_SHOW$1 = `show${EVENT_KEY$1}`;\nconst EVENT_SHOWN$1 = `shown${EVENT_KEY$1}`;\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY$1}${DATA_API_KEY}`;\nconst CLASS_NAME_DROPDOWN_MENU = 'dropdown-menu';\nconst CLASS_NAME_ACTIVE = 'active';\nconst CLASS_NAME_FADE$1 = 'fade';\nconst CLASS_NAME_SHOW$1 = 'show';\nconst SELECTOR_DROPDOWN = '.dropdown';\nconst SELECTOR_NAV_LIST_GROUP = '.nav, .list-group';\nconst SELECTOR_ACTIVE = '.active';\nconst SELECTOR_ACTIVE_UL = ':scope > li > .active';\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"tab\"], [data-bs-toggle=\"pill\"], [data-bs-toggle=\"list\"]';\nconst SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle';\nconst SELECTOR_DROPDOWN_ACTIVE_CHILD = ':scope > .dropdown-menu .active';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Tab extends BaseComponent {\n  // Getters\n  static get NAME() {\n    return NAME$1;\n  } // Public\n\n\n  show() {\n    if (this._element.parentNode && this._element.parentNode.nodeType === Node.ELEMENT_NODE && this._element.classList.contains(CLASS_NAME_ACTIVE)) {\n      return;\n    }\n\n    let previous;\n    const target = getElementFromSelector(this._element);\n\n    const listElement = this._element.closest(SELECTOR_NAV_LIST_GROUP);\n\n    if (listElement) {\n      const itemSelector = listElement.nodeName === 'UL' || listElement.nodeName === 'OL' ? SELECTOR_ACTIVE_UL : SELECTOR_ACTIVE;\n      previous = SelectorEngine.find(itemSelector, listElement);\n      previous = previous[previous.length - 1];\n    }\n\n    const hideEvent = previous ? EventHandler.trigger(previous, EVENT_HIDE$1, {\n      relatedTarget: this._element\n    }) : null;\n    const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$1, {\n      relatedTarget: previous\n    });\n\n    if (showEvent.defaultPrevented || hideEvent !== null && hideEvent.defaultPrevented) {\n      return;\n    }\n\n    this._activate(this._element, listElement);\n\n    const complete = () => {\n      EventHandler.trigger(previous, EVENT_HIDDEN$1, {\n        relatedTarget: this._element\n      });\n      EventHandler.trigger(this._element, EVENT_SHOWN$1, {\n        relatedTarget: previous\n      });\n    };\n\n    if (target) {\n      this._activate(target, target.parentNode, complete);\n    } else {\n      complete();\n    }\n  } // Private\n\n\n  _activate(element, container, callback) {\n    const activeElements = container && (container.nodeName === 'UL' || container.nodeName === 'OL') ? SelectorEngine.find(SELECTOR_ACTIVE_UL, container) : SelectorEngine.children(container, SELECTOR_ACTIVE);\n    const active = activeElements[0];\n    const isTransitioning = callback && active && active.classList.contains(CLASS_NAME_FADE$1);\n\n    const complete = () => this._transitionComplete(element, active, callback);\n\n    if (active && isTransitioning) {\n      active.classList.remove(CLASS_NAME_SHOW$1);\n\n      this._queueCallback(complete, element, true);\n    } else {\n      complete();\n    }\n  }\n\n  _transitionComplete(element, active, callback) {\n    if (active) {\n      active.classList.remove(CLASS_NAME_ACTIVE);\n      const dropdownChild = SelectorEngine.findOne(SELECTOR_DROPDOWN_ACTIVE_CHILD, active.parentNode);\n\n      if (dropdownChild) {\n        dropdownChild.classList.remove(CLASS_NAME_ACTIVE);\n      }\n\n      if (active.getAttribute('role') === 'tab') {\n        active.setAttribute('aria-selected', false);\n      }\n    }\n\n    element.classList.add(CLASS_NAME_ACTIVE);\n\n    if (element.getAttribute('role') === 'tab') {\n      element.setAttribute('aria-selected', true);\n    }\n\n    reflow(element);\n\n    if (element.classList.contains(CLASS_NAME_FADE$1)) {\n      element.classList.add(CLASS_NAME_SHOW$1);\n    }\n\n    let parent = element.parentNode;\n\n    if (parent && parent.nodeName === 'LI') {\n      parent = parent.parentNode;\n    }\n\n    if (parent && parent.classList.contains(CLASS_NAME_DROPDOWN_MENU)) {\n      const dropdownElement = element.closest(SELECTOR_DROPDOWN);\n\n      if (dropdownElement) {\n        SelectorEngine.find(SELECTOR_DROPDOWN_TOGGLE, dropdownElement).forEach(dropdown => dropdown.classList.add(CLASS_NAME_ACTIVE));\n      }\n\n      element.setAttribute('aria-expanded', true);\n    }\n\n    if (callback) {\n      callback();\n    }\n  } // Static\n\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Tab.getOrCreateInstance(this);\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config]();\n      }\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n  if (['A', 'AREA'].includes(this.tagName)) {\n    event.preventDefault();\n  }\n\n  if (isDisabled(this)) {\n    return;\n  }\n\n  const data = Tab.getOrCreateInstance(this);\n  data.show();\n});\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Tab to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Tab);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): toast.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'toast';\nconst DATA_KEY = 'bs.toast';\nconst EVENT_KEY = `.${DATA_KEY}`;\nconst EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY}`;\nconst EVENT_MOUSEOVER = `mouseover${EVENT_KEY}`;\nconst EVENT_MOUSEOUT = `mouseout${EVENT_KEY}`;\nconst EVENT_FOCUSIN = `focusin${EVENT_KEY}`;\nconst EVENT_FOCUSOUT = `focusout${EVENT_KEY}`;\nconst EVENT_HIDE = `hide${EVENT_KEY}`;\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`;\nconst EVENT_SHOW = `show${EVENT_KEY}`;\nconst EVENT_SHOWN = `shown${EVENT_KEY}`;\nconst CLASS_NAME_FADE = 'fade';\nconst CLASS_NAME_HIDE = 'hide';\nconst CLASS_NAME_SHOW = 'show';\nconst CLASS_NAME_SHOWING = 'showing';\nconst DefaultType = {\n  animation: 'boolean',\n  autohide: 'boolean',\n  delay: 'number'\n};\nconst Default = {\n  animation: true,\n  autohide: true,\n  delay: 5000\n};\nconst SELECTOR_DATA_DISMISS = '[data-bs-dismiss=\"toast\"]';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Toast extends BaseComponent {\n  constructor(element, config) {\n    super(element);\n    this._config = this._getConfig(config);\n    this._timeout = null;\n    this._hasMouseInteraction = false;\n    this._hasKeyboardInteraction = false;\n\n    this._setListeners();\n  } // Getters\n\n\n  static get DefaultType() {\n    return DefaultType;\n  }\n\n  static get Default() {\n    return Default;\n  }\n\n  static get NAME() {\n    return NAME;\n  } // Public\n\n\n  show() {\n    const showEvent = EventHandler.trigger(this._element, EVENT_SHOW);\n\n    if (showEvent.defaultPrevented) {\n      return;\n    }\n\n    this._clearTimeout();\n\n    if (this._config.animation) {\n      this._element.classList.add(CLASS_NAME_FADE);\n    }\n\n    const complete = () => {\n      this._element.classList.remove(CLASS_NAME_SHOWING);\n\n      this._element.classList.add(CLASS_NAME_SHOW);\n\n      EventHandler.trigger(this._element, EVENT_SHOWN);\n\n      this._maybeScheduleHide();\n    };\n\n    this._element.classList.remove(CLASS_NAME_HIDE);\n\n    reflow(this._element);\n\n    this._element.classList.add(CLASS_NAME_SHOWING);\n\n    this._queueCallback(complete, this._element, this._config.animation);\n  }\n\n  hide() {\n    if (!this._element.classList.contains(CLASS_NAME_SHOW)) {\n      return;\n    }\n\n    const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE);\n\n    if (hideEvent.defaultPrevented) {\n      return;\n    }\n\n    const complete = () => {\n      this._element.classList.add(CLASS_NAME_HIDE);\n\n      EventHandler.trigger(this._element, EVENT_HIDDEN);\n    };\n\n    this._element.classList.remove(CLASS_NAME_SHOW);\n\n    this._queueCallback(complete, this._element, this._config.animation);\n  }\n\n  dispose() {\n    this._clearTimeout();\n\n    if (this._element.classList.contains(CLASS_NAME_SHOW)) {\n      this._element.classList.remove(CLASS_NAME_SHOW);\n    }\n\n    super.dispose();\n  } // Private\n\n\n  _getConfig(config) {\n    config = { ...Default,\n      ...Manipulator.getDataAttributes(this._element),\n      ...(typeof config === 'object' && config ? config : {})\n    };\n    typeCheckConfig(NAME, config, this.constructor.DefaultType);\n    return config;\n  }\n\n  _maybeScheduleHide() {\n    if (!this._config.autohide) {\n      return;\n    }\n\n    if (this._hasMouseInteraction || this._hasKeyboardInteraction) {\n      return;\n    }\n\n    this._timeout = setTimeout(() => {\n      this.hide();\n    }, this._config.delay);\n  }\n\n  _onInteraction(event, isInteracting) {\n    switch (event.type) {\n      case 'mouseover':\n      case 'mouseout':\n        this._hasMouseInteraction = isInteracting;\n        break;\n\n      case 'focusin':\n      case 'focusout':\n        this._hasKeyboardInteraction = isInteracting;\n        break;\n    }\n\n    if (isInteracting) {\n      this._clearTimeout();\n\n      return;\n    }\n\n    const nextElement = event.relatedTarget;\n\n    if (this._element === nextElement || this._element.contains(nextElement)) {\n      return;\n    }\n\n    this._maybeScheduleHide();\n  }\n\n  _setListeners() {\n    EventHandler.on(this._element, EVENT_CLICK_DISMISS, SELECTOR_DATA_DISMISS, () => this.hide());\n    EventHandler.on(this._element, EVENT_MOUSEOVER, event => this._onInteraction(event, true));\n    EventHandler.on(this._element, EVENT_MOUSEOUT, event => this._onInteraction(event, false));\n    EventHandler.on(this._element, EVENT_FOCUSIN, event => this._onInteraction(event, true));\n    EventHandler.on(this._element, EVENT_FOCUSOUT, event => this._onInteraction(event, false));\n  }\n\n  _clearTimeout() {\n    clearTimeout(this._timeout);\n    this._timeout = null;\n  } // Static\n\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Toast.getOrCreateInstance(this, config);\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config](this);\n      }\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Toast to jQuery only if jQuery is present\n */\n\n\ndefineJQueryPlugin(Toast);\n\nexport { Alert, Button, Carousel, Collapse, Dropdown, Modal, Offcanvas, Popover, ScrollSpy, Tab, Toast, Tooltip };\n//# sourceMappingURL=bootstrap.esm.js.map\n"
  },
  {
    "path": "src/sourceDev.WebApp/SharedThemes/yeti/wwwroot/js/jquery.js",
    "content": "/*!\n * jQuery JavaScript Library v3.7.0\n * https://jquery.com/\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license\n * https://jquery.org/license\n *\n * Date: 2023-05-11T18:29Z\n */\n(function (global, factory) {\n\n\t\"use strict\";\n\n\tif (typeof module === \"object\" && typeof module.exports === \"object\") {\n\n\t\t// For CommonJS and CommonJS-like environments where a proper `window`\n\t\t// is present, execute the factory and get jQuery.\n\t\t// For environments that do not have a `window` with a `document`\n\t\t// (such as Node.js), expose a factory as module.exports.\n\t\t// This accentuates the need for the creation of a real `window`.\n\t\t// e.g. var jQuery = require(\"jquery\")(window);\n\t\t// See ticket trac-14549 for more info.\n\t\tmodule.exports = global.document ?\n\t\t\tfactory(global, true) :\n\t\t\tfunction (w) {\n\t\t\t\tif (!w.document) {\n\t\t\t\t\tthrow new Error(\"jQuery requires a window with a document\");\n\t\t\t\t}\n\t\t\t\treturn factory(w);\n\t\t\t};\n\t} else {\n\t\tfactory(global);\n\t}\n\n\t// Pass this if window is not defined yet\n})(typeof window !== \"undefined\" ? window : this, function (window, noGlobal) {\n\n\t// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1\n\t// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode\n\t// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common\n\t// enough that all such attempts are guarded in a try block.\n\t\"use strict\";\n\n\tvar arr = [];\n\n\tvar getProto = Object.getPrototypeOf;\n\n\tvar slice = arr.slice;\n\n\tvar flat = arr.flat ? function (array) {\n\t\treturn arr.flat.call(array);\n\t} : function (array) {\n\t\treturn arr.concat.apply([], array);\n\t};\n\n\n\tvar push = arr.push;\n\n\tvar indexOf = arr.indexOf;\n\n\tvar class2type = {};\n\n\tvar toString = class2type.toString;\n\n\tvar hasOwn = class2type.hasOwnProperty;\n\n\tvar fnToString = hasOwn.toString;\n\n\tvar ObjectFunctionString = fnToString.call(Object);\n\n\tvar support = {};\n\n\tvar isFunction = function isFunction(obj) {\n\n\t\t// Support: Chrome <=57, Firefox <=52\n\t\t// In some browsers, typeof returns \"function\" for HTML <object> elements\n\t\t// (i.e., `typeof document.createElement( \"object\" ) === \"function\"`).\n\t\t// We don't want to classify *any* DOM node as a function.\n\t\t// Support: QtWeb <=3.8.5, WebKit <=534.34, wkhtmltopdf tool <=0.12.5\n\t\t// Plus for old WebKit, typeof returns \"function\" for HTML collections\n\t\t// (e.g., `typeof document.getElementsByTagName(\"div\") === \"function\"`). (gh-4756)\n\t\treturn typeof obj === \"function\" && typeof obj.nodeType !== \"number\" &&\n\t\t\ttypeof obj.item !== \"function\";\n\t};\n\n\n\tvar isWindow = function isWindow(obj) {\n\t\treturn obj != null && obj === obj.window;\n\t};\n\n\n\tvar document = window.document;\n\n\n\n\tvar preservedScriptAttributes = {\n\t\ttype: true,\n\t\tsrc: true,\n\t\tnonce: true,\n\t\tnoModule: true\n\t};\n\n\tfunction DOMEval(code, node, doc) {\n\t\tdoc = doc || document;\n\n\t\tvar i, val,\n\t\t\tscript = doc.createElement(\"script\");\n\n\t\tscript.text = code;\n\t\tif (node) {\n\t\t\tfor (i in preservedScriptAttributes) {\n\n\t\t\t\t// Support: Firefox 64+, Edge 18+\n\t\t\t\t// Some browsers don't support the \"nonce\" property on scripts.\n\t\t\t\t// On the other hand, just using `getAttribute` is not enough as\n\t\t\t\t// the `nonce` attribute is reset to an empty string whenever it\n\t\t\t\t// becomes browsing-context connected.\n\t\t\t\t// See https://github.com/whatwg/html/issues/2369\n\t\t\t\t// See https://html.spec.whatwg.org/#nonce-attributes\n\t\t\t\t// The `node.getAttribute` check was added for the sake of\n\t\t\t\t// `jQuery.globalEval` so that it can fake a nonce-containing node\n\t\t\t\t// via an object.\n\t\t\t\tval = node[i] || node.getAttribute && node.getAttribute(i);\n\t\t\t\tif (val) {\n\t\t\t\t\tscript.setAttribute(i, val);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tdoc.head.appendChild(script).parentNode.removeChild(script);\n\t}\n\n\n\tfunction toType(obj) {\n\t\tif (obj == null) {\n\t\t\treturn obj + \"\";\n\t\t}\n\n\t\t// Support: Android <=2.3 only (functionish RegExp)\n\t\treturn typeof obj === \"object\" || typeof obj === \"function\" ?\n\t\t\tclass2type[toString.call(obj)] || \"object\" :\n\t\t\ttypeof obj;\n\t}\n\t/* global Symbol */\n\t// Defining this global in .eslintrc.json would create a danger of using the global\n\t// unguarded in another place, it seems safer to define global only for this module\n\n\n\n\tvar version = \"3.7.0\",\n\n\t\trhtmlSuffix = /HTML$/i,\n\n\t\t// Define a local copy of jQuery\n\t\tjQuery = function (selector, context) {\n\n\t\t\t// The jQuery object is actually just the init constructor 'enhanced'\n\t\t\t// Need init if jQuery is called (just allow error to be thrown if not included)\n\t\t\treturn new jQuery.fn.init(selector, context);\n\t\t};\n\n\tjQuery.fn = jQuery.prototype = {\n\n\t\t// The current version of jQuery being used\n\t\tjquery: version,\n\n\t\tconstructor: jQuery,\n\n\t\t// The default length of a jQuery object is 0\n\t\tlength: 0,\n\n\t\ttoArray: function () {\n\t\t\treturn slice.call(this);\n\t\t},\n\n\t\t// Get the Nth element in the matched element set OR\n\t\t// Get the whole matched element set as a clean array\n\t\tget: function (num) {\n\n\t\t\t// Return all the elements in a clean array\n\t\t\tif (num == null) {\n\t\t\t\treturn slice.call(this);\n\t\t\t}\n\n\t\t\t// Return just the one element from the set\n\t\t\treturn num < 0 ? this[num + this.length] : this[num];\n\t\t},\n\n\t\t// Take an array of elements and push it onto the stack\n\t\t// (returning the new matched element set)\n\t\tpushStack: function (elems) {\n\n\t\t\t// Build a new jQuery matched element set\n\t\t\tvar ret = jQuery.merge(this.constructor(), elems);\n\n\t\t\t// Add the old object onto the stack (as a reference)\n\t\t\tret.prevObject = this;\n\n\t\t\t// Return the newly-formed element set\n\t\t\treturn ret;\n\t\t},\n\n\t\t// Execute a callback for every element in the matched set.\n\t\teach: function (callback) {\n\t\t\treturn jQuery.each(this, callback);\n\t\t},\n\n\t\tmap: function (callback) {\n\t\t\treturn this.pushStack(jQuery.map(this, function (elem, i) {\n\t\t\t\treturn callback.call(elem, i, elem);\n\t\t\t}));\n\t\t},\n\n\t\tslice: function () {\n\t\t\treturn this.pushStack(slice.apply(this, arguments));\n\t\t},\n\n\t\tfirst: function () {\n\t\t\treturn this.eq(0);\n\t\t},\n\n\t\tlast: function () {\n\t\t\treturn this.eq(-1);\n\t\t},\n\n\t\teven: function () {\n\t\t\treturn this.pushStack(jQuery.grep(this, function (_elem, i) {\n\t\t\t\treturn (i + 1) % 2;\n\t\t\t}));\n\t\t},\n\n\t\todd: function () {\n\t\t\treturn this.pushStack(jQuery.grep(this, function (_elem, i) {\n\t\t\t\treturn i % 2;\n\t\t\t}));\n\t\t},\n\n\t\teq: function (i) {\n\t\t\tvar len = this.length,\n\t\t\t\tj = +i + (i < 0 ? len : 0);\n\t\t\treturn this.pushStack(j >= 0 && j < len ? [this[j]] : []);\n\t\t},\n\n\t\tend: function () {\n\t\t\treturn this.prevObject || this.constructor();\n\t\t},\n\n\t\t// For internal use only.\n\t\t// Behaves like an Array's method, not like a jQuery method.\n\t\tpush: push,\n\t\tsort: arr.sort,\n\t\tsplice: arr.splice\n\t};\n\n\tjQuery.extend = jQuery.fn.extend = function () {\n\t\tvar options, name, src, copy, copyIsArray, clone,\n\t\t\ttarget = arguments[0] || {},\n\t\t\ti = 1,\n\t\t\tlength = arguments.length,\n\t\t\tdeep = false;\n\n\t\t// Handle a deep copy situation\n\t\tif (typeof target === \"boolean\") {\n\t\t\tdeep = target;\n\n\t\t\t// Skip the boolean and the target\n\t\t\ttarget = arguments[i] || {};\n\t\t\ti++;\n\t\t}\n\n\t\t// Handle case when target is a string or something (possible in deep copy)\n\t\tif (typeof target !== \"object\" && !isFunction(target)) {\n\t\t\ttarget = {};\n\t\t}\n\n\t\t// Extend jQuery itself if only one argument is passed\n\t\tif (i === length) {\n\t\t\ttarget = this;\n\t\t\ti--;\n\t\t}\n\n\t\tfor (; i < length; i++) {\n\n\t\t\t// Only deal with non-null/undefined values\n\t\t\tif ((options = arguments[i]) != null) {\n\n\t\t\t\t// Extend the base object\n\t\t\t\tfor (name in options) {\n\t\t\t\t\tcopy = options[name];\n\n\t\t\t\t\t// Prevent Object.prototype pollution\n\t\t\t\t\t// Prevent never-ending loop\n\t\t\t\t\tif (name === \"__proto__\" || target === copy) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\t\tif (deep && copy && (jQuery.isPlainObject(copy) ||\n\t\t\t\t\t\t(copyIsArray = Array.isArray(copy)))) {\n\t\t\t\t\t\tsrc = target[name];\n\n\t\t\t\t\t\t// Ensure proper type for the source value\n\t\t\t\t\t\tif (copyIsArray && !Array.isArray(src)) {\n\t\t\t\t\t\t\tclone = [];\n\t\t\t\t\t\t} else if (!copyIsArray && !jQuery.isPlainObject(src)) {\n\t\t\t\t\t\t\tclone = {};\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tclone = src;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcopyIsArray = false;\n\n\t\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\t\ttarget[name] = jQuery.extend(deep, clone, copy);\n\n\t\t\t\t\t\t// Don't bring in undefined values\n\t\t\t\t\t} else if (copy !== undefined) {\n\t\t\t\t\t\ttarget[name] = copy;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Return the modified object\n\t\treturn target;\n\t};\n\n\tjQuery.extend({\n\n\t\t// Unique for each copy of jQuery on the page\n\t\texpando: \"jQuery\" + (version + Math.random()).replace(/\\D/g, \"\"),\n\n\t\t// Assume jQuery is ready without the ready module\n\t\tisReady: true,\n\n\t\terror: function (msg) {\n\t\t\tthrow new Error(msg);\n\t\t},\n\n\t\tnoop: function () { },\n\n\t\tisPlainObject: function (obj) {\n\t\t\tvar proto, Ctor;\n\n\t\t\t// Detect obvious negatives\n\t\t\t// Use toString instead of jQuery.type to catch host objects\n\t\t\tif (!obj || toString.call(obj) !== \"[object Object]\") {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tproto = getProto(obj);\n\n\t\t\t// Objects with no prototype (e.g., `Object.create( null )`) are plain\n\t\t\tif (!proto) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\t// Objects with prototype are plain iff they were constructed by a global Object function\n\t\t\tCtor = hasOwn.call(proto, \"constructor\") && proto.constructor;\n\t\t\treturn typeof Ctor === \"function\" && fnToString.call(Ctor) === ObjectFunctionString;\n\t\t},\n\n\t\tisEmptyObject: function (obj) {\n\t\t\tvar name;\n\n\t\t\tfor (name in obj) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\n\t\t// Evaluates a script in a provided context; falls back to the global one\n\t\t// if not specified.\n\t\tglobalEval: function (code, options, doc) {\n\t\t\tDOMEval(code, { nonce: options && options.nonce }, doc);\n\t\t},\n\n\t\teach: function (obj, callback) {\n\t\t\tvar length, i = 0;\n\n\t\t\tif (isArrayLike(obj)) {\n\t\t\t\tlength = obj.length;\n\t\t\t\tfor (; i < length; i++) {\n\t\t\t\t\tif (callback.call(obj[i], i, obj[i]) === false) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor (i in obj) {\n\t\t\t\t\tif (callback.call(obj[i], i, obj[i]) === false) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn obj;\n\t\t},\n\n\n\t\t// Retrieve the text value of an array of DOM nodes\n\t\ttext: function (elem) {\n\t\t\tvar node,\n\t\t\t\tret = \"\",\n\t\t\t\ti = 0,\n\t\t\t\tnodeType = elem.nodeType;\n\n\t\t\tif (!nodeType) {\n\n\t\t\t\t// If no nodeType, this is expected to be an array\n\t\t\t\twhile ((node = elem[i++])) {\n\n\t\t\t\t\t// Do not traverse comment nodes\n\t\t\t\t\tret += jQuery.text(node);\n\t\t\t\t}\n\t\t\t} else if (nodeType === 1 || nodeType === 9 || nodeType === 11) {\n\t\t\t\treturn elem.textContent;\n\t\t\t} else if (nodeType === 3 || nodeType === 4) {\n\t\t\t\treturn elem.nodeValue;\n\t\t\t}\n\n\t\t\t// Do not include comment or processing instruction nodes\n\n\t\t\treturn ret;\n\t\t},\n\n\t\t// results is for internal usage only\n\t\tmakeArray: function (arr, results) {\n\t\t\tvar ret = results || [];\n\n\t\t\tif (arr != null) {\n\t\t\t\tif (isArrayLike(Object(arr))) {\n\t\t\t\t\tjQuery.merge(ret,\n\t\t\t\t\t\ttypeof arr === \"string\" ?\n\t\t\t\t\t\t\t[arr] : arr\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\tpush.call(ret, arr);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn ret;\n\t\t},\n\n\t\tinArray: function (elem, arr, i) {\n\t\t\treturn arr == null ? -1 : indexOf.call(arr, elem, i);\n\t\t},\n\n\t\tisXMLDoc: function (elem) {\n\t\t\tvar namespace = elem && elem.namespaceURI,\n\t\t\t\tdocElem = elem && (elem.ownerDocument || elem).documentElement;\n\n\t\t\t// Assume HTML when documentElement doesn't yet exist, such as inside\n\t\t\t// document fragments.\n\t\t\treturn !rhtmlSuffix.test(namespace || docElem && docElem.nodeName || \"HTML\");\n\t\t},\n\n\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\tmerge: function (first, second) {\n\t\t\tvar len = +second.length,\n\t\t\t\tj = 0,\n\t\t\t\ti = first.length;\n\n\t\t\tfor (; j < len; j++) {\n\t\t\t\tfirst[i++] = second[j];\n\t\t\t}\n\n\t\t\tfirst.length = i;\n\n\t\t\treturn first;\n\t\t},\n\n\t\tgrep: function (elems, callback, invert) {\n\t\t\tvar callbackInverse,\n\t\t\t\tmatches = [],\n\t\t\t\ti = 0,\n\t\t\t\tlength = elems.length,\n\t\t\t\tcallbackExpect = !invert;\n\n\t\t\t// Go through the array, only saving the items\n\t\t\t// that pass the validator function\n\t\t\tfor (; i < length; i++) {\n\t\t\t\tcallbackInverse = !callback(elems[i], i);\n\t\t\t\tif (callbackInverse !== callbackExpect) {\n\t\t\t\t\tmatches.push(elems[i]);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn matches;\n\t\t},\n\n\t\t// arg is for internal usage only\n\t\tmap: function (elems, callback, arg) {\n\t\t\tvar length, value,\n\t\t\t\ti = 0,\n\t\t\t\tret = [];\n\n\t\t\t// Go through the array, translating each of the items to their new values\n\t\t\tif (isArrayLike(elems)) {\n\t\t\t\tlength = elems.length;\n\t\t\t\tfor (; i < length; i++) {\n\t\t\t\t\tvalue = callback(elems[i], i, arg);\n\n\t\t\t\t\tif (value != null) {\n\t\t\t\t\t\tret.push(value);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Go through every key on the object,\n\t\t\t} else {\n\t\t\t\tfor (i in elems) {\n\t\t\t\t\tvalue = callback(elems[i], i, arg);\n\n\t\t\t\t\tif (value != null) {\n\t\t\t\t\t\tret.push(value);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Flatten any nested arrays\n\t\t\treturn flat(ret);\n\t\t},\n\n\t\t// A global GUID counter for objects\n\t\tguid: 1,\n\n\t\t// jQuery.support is not used in Core but other projects attach their\n\t\t// properties to it so it needs to exist.\n\t\tsupport: support\n\t});\n\n\tif (typeof Symbol === \"function\") {\n\t\tjQuery.fn[Symbol.iterator] = arr[Symbol.iterator];\n\t}\n\n\t// Populate the class2type map\n\tjQuery.each(\"Boolean Number String Function Array Date RegExp Object Error Symbol\".split(\" \"),\n\t\tfunction (_i, name) {\n\t\t\tclass2type[\"[object \" + name + \"]\"] = name.toLowerCase();\n\t\t});\n\n\tfunction isArrayLike(obj) {\n\n\t\t// Support: real iOS 8.2 only (not reproducible in simulator)\n\t\t// `in` check used to prevent JIT error (gh-2145)\n\t\t// hasOwn isn't used here due to false negatives\n\t\t// regarding Nodelist length in IE\n\t\tvar length = !!obj && \"length\" in obj && obj.length,\n\t\t\ttype = toType(obj);\n\n\t\tif (isFunction(obj) || isWindow(obj)) {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn type === \"array\" || length === 0 ||\n\t\t\ttypeof length === \"number\" && length > 0 && (length - 1) in obj;\n\t}\n\n\n\tfunction nodeName(elem, name) {\n\n\t\treturn elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();\n\n\t}\n\tvar pop = arr.pop;\n\n\n\tvar sort = arr.sort;\n\n\n\tvar splice = arr.splice;\n\n\n\tvar whitespace = \"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\";\n\n\n\tvar rtrimCSS = new RegExp(\n\t\t\"^\" + whitespace + \"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\" + whitespace + \"+$\",\n\t\t\"g\"\n\t);\n\n\n\n\n\t// Note: an element does not contain itself\n\tjQuery.contains = function (a, b) {\n\t\tvar bup = b && b.parentNode;\n\n\t\treturn a === bup || !!(bup && bup.nodeType === 1 && (\n\n\t\t\t// Support: IE 9 - 11+\n\t\t\t// IE doesn't have `contains` on SVG.\n\t\t\ta.contains ?\n\t\t\t\ta.contains(bup) :\n\t\t\t\ta.compareDocumentPosition && a.compareDocumentPosition(bup) & 16\n\t\t));\n\t};\n\n\n\n\n\t// CSS string/identifier serialization\n\t// https://drafts.csswg.org/cssom/#common-serializing-idioms\n\tvar rcssescape = /([\\0-\\x1f\\x7f]|^-?\\d)|^-$|[^\\x80-\\uFFFF\\w-]/g;\n\n\tfunction fcssescape(ch, asCodePoint) {\n\t\tif (asCodePoint) {\n\n\t\t\t// U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER\n\t\t\tif (ch === \"\\0\") {\n\t\t\t\treturn \"\\uFFFD\";\n\t\t\t}\n\n\t\t\t// Control characters and (dependent upon position) numbers get escaped as code points\n\t\t\treturn ch.slice(0, -1) + \"\\\\\" + ch.charCodeAt(ch.length - 1).toString(16) + \" \";\n\t\t}\n\n\t\t// Other potentially-special ASCII characters get backslash-escaped\n\t\treturn \"\\\\\" + ch;\n\t}\n\n\tjQuery.escapeSelector = function (sel) {\n\t\treturn (sel + \"\").replace(rcssescape, fcssescape);\n\t};\n\n\n\n\n\tvar preferredDoc = document,\n\t\tpushNative = push;\n\n\t(function () {\n\n\t\tvar i,\n\t\t\tExpr,\n\t\t\toutermostContext,\n\t\t\tsortInput,\n\t\t\thasDuplicate,\n\t\t\tpush = pushNative,\n\n\t\t\t// Local document vars\n\t\t\tdocument,\n\t\t\tdocumentElement,\n\t\t\tdocumentIsHTML,\n\t\t\trbuggyQSA,\n\t\t\tmatches,\n\n\t\t\t// Instance-specific data\n\t\t\texpando = jQuery.expando,\n\t\t\tdirruns = 0,\n\t\t\tdone = 0,\n\t\t\tclassCache = createCache(),\n\t\t\ttokenCache = createCache(),\n\t\t\tcompilerCache = createCache(),\n\t\t\tnonnativeSelectorCache = createCache(),\n\t\t\tsortOrder = function (a, b) {\n\t\t\t\tif (a === b) {\n\t\t\t\t\thasDuplicate = true;\n\t\t\t\t}\n\t\t\t\treturn 0;\n\t\t\t},\n\n\t\t\tbooleans = \"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|\" +\n\t\t\t\t\"loop|multiple|open|readonly|required|scoped\",\n\n\t\t\t// Regular expressions\n\n\t\t\t// https://www.w3.org/TR/css-syntax-3/#ident-token-diagram\n\t\t\tidentifier = \"(?:\\\\\\\\[\\\\da-fA-F]{1,6}\" + whitespace +\n\t\t\t\t\"?|\\\\\\\\[^\\\\r\\\\n\\\\f]|[\\\\w-]|[^\\0-\\\\x7f])+\",\n\n\t\t\t// Attribute selectors: https://www.w3.org/TR/selectors/#attribute-selectors\n\t\t\tattributes = \"\\\\[\" + whitespace + \"*(\" + identifier + \")(?:\" + whitespace +\n\n\t\t\t\t// Operator (capture 2)\n\t\t\t\t\"*([*^$|!~]?=)\" + whitespace +\n\n\t\t\t\t// \"Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]\"\n\t\t\t\t\"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\" + identifier + \"))|)\" +\n\t\t\t\twhitespace + \"*\\\\]\",\n\n\t\t\tpseudos = \":(\" + identifier + \")(?:\\\\((\" +\n\n\t\t\t\t// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:\n\t\t\t\t// 1. quoted (capture 3; capture 4 or capture 5)\n\t\t\t\t\"('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|\" +\n\n\t\t\t\t// 2. simple (capture 6)\n\t\t\t\t\"((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\" + attributes + \")*)|\" +\n\n\t\t\t\t// 3. anything else (capture 2)\n\t\t\t\t\".*\" +\n\t\t\t\t\")\\\\)|)\",\n\n\t\t\t// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter\n\t\t\trwhitespace = new RegExp(whitespace + \"+\", \"g\"),\n\n\t\t\trcomma = new RegExp(\"^\" + whitespace + \"*,\" + whitespace + \"*\"),\n\t\t\trleadingCombinator = new RegExp(\"^\" + whitespace + \"*([>+~]|\" + whitespace + \")\" +\n\t\t\t\twhitespace + \"*\"),\n\t\t\trdescend = new RegExp(whitespace + \"|>\"),\n\n\t\t\trpseudo = new RegExp(pseudos),\n\t\t\tridentifier = new RegExp(\"^\" + identifier + \"$\"),\n\n\t\t\tmatchExpr = {\n\t\t\t\tID: new RegExp(\"^#(\" + identifier + \")\"),\n\t\t\t\tCLASS: new RegExp(\"^\\\\.(\" + identifier + \")\"),\n\t\t\t\tTAG: new RegExp(\"^(\" + identifier + \"|[*])\"),\n\t\t\t\tATTR: new RegExp(\"^\" + attributes),\n\t\t\t\tPSEUDO: new RegExp(\"^\" + pseudos),\n\t\t\t\tCHILD: new RegExp(\n\t\t\t\t\t\"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\" +\n\t\t\t\t\twhitespace + \"*(even|odd|(([+-]|)(\\\\d*)n|)\" + whitespace + \"*(?:([+-]|)\" +\n\t\t\t\t\twhitespace + \"*(\\\\d+)|))\" + whitespace + \"*\\\\)|)\", \"i\"),\n\t\t\t\tbool: new RegExp(\"^(?:\" + booleans + \")$\", \"i\"),\n\n\t\t\t\t// For use in libraries implementing .is()\n\t\t\t\t// We use this for POS matching in `select`\n\t\t\t\tneedsContext: new RegExp(\"^\" + whitespace +\n\t\t\t\t\t\"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\" + whitespace +\n\t\t\t\t\t\"*((?:-\\\\d)?\\\\d*)\" + whitespace + \"*\\\\)|)(?=[^-]|$)\", \"i\")\n\t\t\t},\n\n\t\t\trinputs = /^(?:input|select|textarea|button)$/i,\n\t\t\trheader = /^h\\d$/i,\n\n\t\t\t// Easily-parseable/retrievable ID or TAG or CLASS selectors\n\t\t\trquickExpr = /^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,\n\n\t\t\trsibling = /[+~]/,\n\n\t\t\t// CSS escapes\n\t\t\t// https://www.w3.org/TR/CSS21/syndata.html#escaped-characters\n\t\t\trunescape = new RegExp(\"\\\\\\\\[\\\\da-fA-F]{1,6}\" + whitespace +\n\t\t\t\t\"?|\\\\\\\\([^\\\\r\\\\n\\\\f])\", \"g\"),\n\t\t\tfunescape = function (escape, nonHex) {\n\t\t\t\tvar high = \"0x\" + escape.slice(1) - 0x10000;\n\n\t\t\t\tif (nonHex) {\n\n\t\t\t\t\t// Strip the backslash prefix from a non-hex escape sequence\n\t\t\t\t\treturn nonHex;\n\t\t\t\t}\n\n\t\t\t\t// Replace a hexadecimal escape sequence with the encoded Unicode code point\n\t\t\t\t// Support: IE <=11+\n\t\t\t\t// For values outside the Basic Multilingual Plane (BMP), manually construct a\n\t\t\t\t// surrogate pair\n\t\t\t\treturn high < 0 ?\n\t\t\t\t\tString.fromCharCode(high + 0x10000) :\n\t\t\t\t\tString.fromCharCode(high >> 10 | 0xD800, high & 0x3FF | 0xDC00);\n\t\t\t},\n\n\t\t\t// Used for iframes; see `setDocument`.\n\t\t\t// Support: IE 9 - 11+, Edge 12 - 18+\n\t\t\t// Removing the function wrapper causes a \"Permission Denied\"\n\t\t\t// error in IE/Edge.\n\t\t\tunloadHandler = function () {\n\t\t\t\tsetDocument();\n\t\t\t},\n\n\t\t\tinDisabledFieldset = addCombinator(\n\t\t\t\tfunction (elem) {\n\t\t\t\t\treturn elem.disabled === true && nodeName(elem, \"fieldset\");\n\t\t\t\t},\n\t\t\t\t{ dir: \"parentNode\", next: \"legend\" }\n\t\t\t);\n\n\t\t// Support: IE <=9 only\n\t\t// Accessing document.activeElement can throw unexpectedly\n\t\t// https://bugs.jquery.com/ticket/13393\n\t\tfunction safeActiveElement() {\n\t\t\ttry {\n\t\t\t\treturn document.activeElement;\n\t\t\t} catch (err) { }\n\t\t}\n\n\t\t// Optimize for push.apply( _, NodeList )\n\t\ttry {\n\t\t\tpush.apply(\n\t\t\t\t(arr = slice.call(preferredDoc.childNodes)),\n\t\t\t\tpreferredDoc.childNodes\n\t\t\t);\n\n\t\t\t// Support: Android <=4.0\n\t\t\t// Detect silently failing push.apply\n\t\t\t// eslint-disable-next-line no-unused-expressions\n\t\t\tarr[preferredDoc.childNodes.length].nodeType;\n\t\t} catch (e) {\n\t\t\tpush = {\n\t\t\t\tapply: function (target, els) {\n\t\t\t\t\tpushNative.apply(target, slice.call(els));\n\t\t\t\t},\n\t\t\t\tcall: function (target) {\n\t\t\t\t\tpushNative.apply(target, slice.call(arguments, 1));\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\n\t\tfunction find(selector, context, results, seed) {\n\t\t\tvar m, i, elem, nid, match, groups, newSelector,\n\t\t\t\tnewContext = context && context.ownerDocument,\n\n\t\t\t\t// nodeType defaults to 9, since context defaults to document\n\t\t\t\tnodeType = context ? context.nodeType : 9;\n\n\t\t\tresults = results || [];\n\n\t\t\t// Return early from calls with invalid selector or context\n\t\t\tif (typeof selector !== \"string\" || !selector ||\n\t\t\t\tnodeType !== 1 && nodeType !== 9 && nodeType !== 11) {\n\n\t\t\t\treturn results;\n\t\t\t}\n\n\t\t\t// Try to shortcut find operations (as opposed to filters) in HTML documents\n\t\t\tif (!seed) {\n\t\t\t\tsetDocument(context);\n\t\t\t\tcontext = context || document;\n\n\t\t\t\tif (documentIsHTML) {\n\n\t\t\t\t\t// If the selector is sufficiently simple, try using a \"get*By*\" DOM method\n\t\t\t\t\t// (excepting DocumentFragment context, where the methods don't exist)\n\t\t\t\t\tif (nodeType !== 11 && (match = rquickExpr.exec(selector))) {\n\n\t\t\t\t\t\t// ID selector\n\t\t\t\t\t\tif ((m = match[1])) {\n\n\t\t\t\t\t\t\t// Document context\n\t\t\t\t\t\t\tif (nodeType === 9) {\n\t\t\t\t\t\t\t\tif ((elem = context.getElementById(m))) {\n\n\t\t\t\t\t\t\t\t\t// Support: IE 9 only\n\t\t\t\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\t\t\t\tif (elem.id === m) {\n\t\t\t\t\t\t\t\t\t\tpush.call(results, elem);\n\t\t\t\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t// Element context\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t// Support: IE 9 only\n\t\t\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\t\t\tif (newContext && (elem = newContext.getElementById(m)) &&\n\t\t\t\t\t\t\t\t\tfind.contains(context, elem) &&\n\t\t\t\t\t\t\t\t\telem.id === m) {\n\n\t\t\t\t\t\t\t\t\tpush.call(results, elem);\n\t\t\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Type selector\n\t\t\t\t\t\t} else if (match[2]) {\n\t\t\t\t\t\t\tpush.apply(results, context.getElementsByTagName(selector));\n\t\t\t\t\t\t\treturn results;\n\n\t\t\t\t\t\t\t// Class selector\n\t\t\t\t\t\t} else if ((m = match[3]) && context.getElementsByClassName) {\n\t\t\t\t\t\t\tpush.apply(results, context.getElementsByClassName(m));\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Take advantage of querySelectorAll\n\t\t\t\t\tif (!nonnativeSelectorCache[selector + \" \"] &&\n\t\t\t\t\t\t(!rbuggyQSA || !rbuggyQSA.test(selector))) {\n\n\t\t\t\t\t\tnewSelector = selector;\n\t\t\t\t\t\tnewContext = context;\n\n\t\t\t\t\t\t// qSA considers elements outside a scoping root when evaluating child or\n\t\t\t\t\t\t// descendant combinators, which is not what we want.\n\t\t\t\t\t\t// In such cases, we work around the behavior by prefixing every selector in the\n\t\t\t\t\t\t// list with an ID selector referencing the scope context.\n\t\t\t\t\t\t// The technique has to be used as well when a leading combinator is used\n\t\t\t\t\t\t// as such selectors are not recognized by querySelectorAll.\n\t\t\t\t\t\t// Thanks to Andrew Dupont for this technique.\n\t\t\t\t\t\tif (nodeType === 1 &&\n\t\t\t\t\t\t\t(rdescend.test(selector) || rleadingCombinator.test(selector))) {\n\n\t\t\t\t\t\t\t// Expand context for sibling selectors\n\t\t\t\t\t\t\tnewContext = rsibling.test(selector) && testContext(context.parentNode) ||\n\t\t\t\t\t\t\t\tcontext;\n\n\t\t\t\t\t\t\t// We can use :scope instead of the ID hack if the browser\n\t\t\t\t\t\t\t// supports it & if we're not changing the context.\n\t\t\t\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when\n\t\t\t\t\t\t\t// strict-comparing two documents; shallow comparisons work.\n\t\t\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\t\t\tif (newContext != context || !support.scope) {\n\n\t\t\t\t\t\t\t\t// Capture the context ID, setting it first if necessary\n\t\t\t\t\t\t\t\tif ((nid = context.getAttribute(\"id\"))) {\n\t\t\t\t\t\t\t\t\tnid = jQuery.escapeSelector(nid);\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tcontext.setAttribute(\"id\", (nid = expando));\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Prefix every selector in the list\n\t\t\t\t\t\t\tgroups = tokenize(selector);\n\t\t\t\t\t\t\ti = groups.length;\n\t\t\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\t\t\tgroups[i] = (nid ? \"#\" + nid : \":scope\") + \" \" +\n\t\t\t\t\t\t\t\t\ttoSelector(groups[i]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tnewSelector = groups.join(\",\");\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tpush.apply(results,\n\t\t\t\t\t\t\t\tnewContext.querySelectorAll(newSelector)\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t} catch (qsaError) {\n\t\t\t\t\t\t\tnonnativeSelectorCache(selector, true);\n\t\t\t\t\t\t} finally {\n\t\t\t\t\t\t\tif (nid === expando) {\n\t\t\t\t\t\t\t\tcontext.removeAttribute(\"id\");\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// All others\n\t\t\treturn select(selector.replace(rtrimCSS, \"$1\"), context, results, seed);\n\t\t}\n\n\t\t/**\n\t\t * Create key-value caches of limited size\n\t\t * @returns {function(string, object)} Returns the Object data after storing it on itself with\n\t\t *\tproperty name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)\n\t\t *\tdeleting the oldest entry\n\t\t */\n\t\tfunction createCache() {\n\t\t\tvar keys = [];\n\n\t\t\tfunction cache(key, value) {\n\n\t\t\t\t// Use (key + \" \") to avoid collision with native prototype properties\n\t\t\t\t// (see https://github.com/jquery/sizzle/issues/157)\n\t\t\t\tif (keys.push(key + \" \") > Expr.cacheLength) {\n\n\t\t\t\t\t// Only keep the most recent entries\n\t\t\t\t\tdelete cache[keys.shift()];\n\t\t\t\t}\n\t\t\t\treturn (cache[key + \" \"] = value);\n\t\t\t}\n\t\t\treturn cache;\n\t\t}\n\n\t\t/**\n\t\t * Mark a function for special use by jQuery selector module\n\t\t * @param {Function} fn The function to mark\n\t\t */\n\t\tfunction markFunction(fn) {\n\t\t\tfn[expando] = true;\n\t\t\treturn fn;\n\t\t}\n\n\t\t/**\n\t\t * Support testing using an element\n\t\t * @param {Function} fn Passed the created element and returns a boolean result\n\t\t */\n\t\tfunction assert(fn) {\n\t\t\tvar el = document.createElement(\"fieldset\");\n\n\t\t\ttry {\n\t\t\t\treturn !!fn(el);\n\t\t\t} catch (e) {\n\t\t\t\treturn false;\n\t\t\t} finally {\n\n\t\t\t\t// Remove from its parent by default\n\t\t\t\tif (el.parentNode) {\n\t\t\t\t\tel.parentNode.removeChild(el);\n\t\t\t\t}\n\n\t\t\t\t// release memory in IE\n\t\t\t\tel = null;\n\t\t\t}\n\t\t}\n\n\t\t/**\n\t\t * Returns a function to use in pseudos for input types\n\t\t * @param {String} type\n\t\t */\n\t\tfunction createInputPseudo(type) {\n\t\t\treturn function (elem) {\n\t\t\t\treturn nodeName(elem, \"input\") && elem.type === type;\n\t\t\t};\n\t\t}\n\n\t\t/**\n\t\t * Returns a function to use in pseudos for buttons\n\t\t * @param {String} type\n\t\t */\n\t\tfunction createButtonPseudo(type) {\n\t\t\treturn function (elem) {\n\t\t\t\treturn (nodeName(elem, \"input\") || nodeName(elem, \"button\")) &&\n\t\t\t\t\telem.type === type;\n\t\t\t};\n\t\t}\n\n\t\t/**\n\t\t * Returns a function to use in pseudos for :enabled/:disabled\n\t\t * @param {Boolean} disabled true for :disabled; false for :enabled\n\t\t */\n\t\tfunction createDisabledPseudo(disabled) {\n\n\t\t\t// Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable\n\t\t\treturn function (elem) {\n\n\t\t\t\t// Only certain elements can match :enabled or :disabled\n\t\t\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled\n\t\t\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled\n\t\t\t\tif (\"form\" in elem) {\n\n\t\t\t\t\t// Check for inherited disabledness on relevant non-disabled elements:\n\t\t\t\t\t// * listed form-associated elements in a disabled fieldset\n\t\t\t\t\t//   https://html.spec.whatwg.org/multipage/forms.html#category-listed\n\t\t\t\t\t//   https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled\n\t\t\t\t\t// * option elements in a disabled optgroup\n\t\t\t\t\t//   https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled\n\t\t\t\t\t// All such elements have a \"form\" property.\n\t\t\t\t\tif (elem.parentNode && elem.disabled === false) {\n\n\t\t\t\t\t\t// Option elements defer to a parent optgroup if present\n\t\t\t\t\t\tif (\"label\" in elem) {\n\t\t\t\t\t\t\tif (\"label\" in elem.parentNode) {\n\t\t\t\t\t\t\t\treturn elem.parentNode.disabled === disabled;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\treturn elem.disabled === disabled;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Support: IE 6 - 11+\n\t\t\t\t\t\t// Use the isDisabled shortcut property to check for disabled fieldset ancestors\n\t\t\t\t\t\treturn elem.isDisabled === disabled ||\n\n\t\t\t\t\t\t\t// Where there is no isDisabled, check manually\n\t\t\t\t\t\t\telem.isDisabled !== !disabled &&\n\t\t\t\t\t\t\tinDisabledFieldset(elem) === disabled;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn elem.disabled === disabled;\n\n\t\t\t\t\t// Try to winnow out elements that can't be disabled before trusting the disabled property.\n\t\t\t\t\t// Some victims get caught in our net (label, legend, menu, track), but it shouldn't\n\t\t\t\t\t// even exist on them, let alone have a boolean value.\n\t\t\t\t} else if (\"label\" in elem) {\n\t\t\t\t\treturn elem.disabled === disabled;\n\t\t\t\t}\n\n\t\t\t\t// Remaining elements are neither :enabled nor :disabled\n\t\t\t\treturn false;\n\t\t\t};\n\t\t}\n\n\t\t/**\n\t\t * Returns a function to use in pseudos for positionals\n\t\t * @param {Function} fn\n\t\t */\n\t\tfunction createPositionalPseudo(fn) {\n\t\t\treturn markFunction(function (argument) {\n\t\t\t\targument = +argument;\n\t\t\t\treturn markFunction(function (seed, matches) {\n\t\t\t\t\tvar j,\n\t\t\t\t\t\tmatchIndexes = fn([], seed.length, argument),\n\t\t\t\t\t\ti = matchIndexes.length;\n\n\t\t\t\t\t// Match elements found at the specified indexes\n\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\tif (seed[(j = matchIndexes[i])]) {\n\t\t\t\t\t\t\tseed[j] = !(matches[j] = seed[j]);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\n\t\t/**\n\t\t * Checks a node for validity as a jQuery selector context\n\t\t * @param {Element|Object=} context\n\t\t * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value\n\t\t */\n\t\tfunction testContext(context) {\n\t\t\treturn context && typeof context.getElementsByTagName !== \"undefined\" && context;\n\t\t}\n\n\t\t/**\n\t\t * Sets document-related variables once based on the current document\n\t\t * @param {Element|Object} [node] An element or document object to use to set the document\n\t\t * @returns {Object} Returns the current document\n\t\t */\n\t\tfunction setDocument(node) {\n\t\t\tvar subWindow,\n\t\t\t\tdoc = node ? node.ownerDocument || node : preferredDoc;\n\n\t\t\t// Return early if doc is invalid or already selected\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tif (doc == document || doc.nodeType !== 9 || !doc.documentElement) {\n\t\t\t\treturn document;\n\t\t\t}\n\n\t\t\t// Update global variables\n\t\t\tdocument = doc;\n\t\t\tdocumentElement = document.documentElement;\n\t\t\tdocumentIsHTML = !jQuery.isXMLDoc(document);\n\n\t\t\t// Support: iOS 7 only, IE 9 - 11+\n\t\t\t// Older browsers didn't support unprefixed `matches`.\n\t\t\tmatches = documentElement.matches ||\n\t\t\t\tdocumentElement.webkitMatchesSelector ||\n\t\t\t\tdocumentElement.msMatchesSelector;\n\n\t\t\t// Support: IE 9 - 11+, Edge 12 - 18+\n\t\t\t// Accessing iframe documents after unload throws \"permission denied\" errors (see trac-13936)\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tif (preferredDoc != document &&\n\t\t\t\t(subWindow = document.defaultView) && subWindow.top !== subWindow) {\n\n\t\t\t\t// Support: IE 9 - 11+, Edge 12 - 18+\n\t\t\t\tsubWindow.addEventListener(\"unload\", unloadHandler);\n\t\t\t}\n\n\t\t\t// Support: IE <10\n\t\t\t// Check if getElementById returns elements by name\n\t\t\t// The broken getElementById methods don't pick up programmatically-set names,\n\t\t\t// so use a roundabout getElementsByName test\n\t\t\tsupport.getById = assert(function (el) {\n\t\t\t\tdocumentElement.appendChild(el).id = jQuery.expando;\n\t\t\t\treturn !document.getElementsByName ||\n\t\t\t\t\t!document.getElementsByName(jQuery.expando).length;\n\t\t\t});\n\n\t\t\t// Support: IE 9 only\n\t\t\t// Check to see if it's possible to do matchesSelector\n\t\t\t// on a disconnected node.\n\t\t\tsupport.disconnectedMatch = assert(function (el) {\n\t\t\t\treturn matches.call(el, \"*\");\n\t\t\t});\n\n\t\t\t// Support: IE 9 - 11+, Edge 12 - 18+\n\t\t\t// IE/Edge don't support the :scope pseudo-class.\n\t\t\tsupport.scope = assert(function () {\n\t\t\t\treturn document.querySelectorAll(\":scope\");\n\t\t\t});\n\n\t\t\t// Support: Chrome 105 - 111 only, Safari 15.4 - 16.3 only\n\t\t\t// Make sure the `:has()` argument is parsed unforgivingly.\n\t\t\t// We include `*` in the test to detect buggy implementations that are\n\t\t\t// _selectively_ forgiving (specifically when the list includes at least\n\t\t\t// one valid selector).\n\t\t\t// Note that we treat complete lack of support for `:has()` as if it were\n\t\t\t// spec-compliant support, which is fine because use of `:has()` in such\n\t\t\t// environments will fail in the qSA path and fall back to jQuery traversal\n\t\t\t// anyway.\n\t\t\tsupport.cssHas = assert(function () {\n\t\t\t\ttry {\n\t\t\t\t\tdocument.querySelector(\":has(*,:jqfake)\");\n\t\t\t\t\treturn false;\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t// ID filter and find\n\t\t\tif (support.getById) {\n\t\t\t\tExpr.filter.ID = function (id) {\n\t\t\t\t\tvar attrId = id.replace(runescape, funescape);\n\t\t\t\t\treturn function (elem) {\n\t\t\t\t\t\treturn elem.getAttribute(\"id\") === attrId;\n\t\t\t\t\t};\n\t\t\t\t};\n\t\t\t\tExpr.find.ID = function (id, context) {\n\t\t\t\t\tif (typeof context.getElementById !== \"undefined\" && documentIsHTML) {\n\t\t\t\t\t\tvar elem = context.getElementById(id);\n\t\t\t\t\t\treturn elem ? [elem] : [];\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t} else {\n\t\t\t\tExpr.filter.ID = function (id) {\n\t\t\t\t\tvar attrId = id.replace(runescape, funescape);\n\t\t\t\t\treturn function (elem) {\n\t\t\t\t\t\tvar node = typeof elem.getAttributeNode !== \"undefined\" &&\n\t\t\t\t\t\t\telem.getAttributeNode(\"id\");\n\t\t\t\t\t\treturn node && node.value === attrId;\n\t\t\t\t\t};\n\t\t\t\t};\n\n\t\t\t\t// Support: IE 6 - 7 only\n\t\t\t\t// getElementById is not reliable as a find shortcut\n\t\t\t\tExpr.find.ID = function (id, context) {\n\t\t\t\t\tif (typeof context.getElementById !== \"undefined\" && documentIsHTML) {\n\t\t\t\t\t\tvar node, i, elems,\n\t\t\t\t\t\t\telem = context.getElementById(id);\n\n\t\t\t\t\t\tif (elem) {\n\n\t\t\t\t\t\t\t// Verify the id attribute\n\t\t\t\t\t\t\tnode = elem.getAttributeNode(\"id\");\n\t\t\t\t\t\t\tif (node && node.value === id) {\n\t\t\t\t\t\t\t\treturn [elem];\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Fall back on getElementsByName\n\t\t\t\t\t\t\telems = context.getElementsByName(id);\n\t\t\t\t\t\t\ti = 0;\n\t\t\t\t\t\t\twhile ((elem = elems[i++])) {\n\t\t\t\t\t\t\t\tnode = elem.getAttributeNode(\"id\");\n\t\t\t\t\t\t\t\tif (node && node.value === id) {\n\t\t\t\t\t\t\t\t\treturn [elem];\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn [];\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\n\t\t\t// Tag\n\t\t\tExpr.find.TAG = function (tag, context) {\n\t\t\t\tif (typeof context.getElementsByTagName !== \"undefined\") {\n\t\t\t\t\treturn context.getElementsByTagName(tag);\n\n\t\t\t\t\t// DocumentFragment nodes don't have gEBTN\n\t\t\t\t} else {\n\t\t\t\t\treturn context.querySelectorAll(tag);\n\t\t\t\t}\n\t\t\t};\n\n\t\t\t// Class\n\t\t\tExpr.find.CLASS = function (className, context) {\n\t\t\t\tif (typeof context.getElementsByClassName !== \"undefined\" && documentIsHTML) {\n\t\t\t\t\treturn context.getElementsByClassName(className);\n\t\t\t\t}\n\t\t\t};\n\n\t\t\t/* QSA/matchesSelector\n\t\t\t---------------------------------------------------------------------- */\n\n\t\t\t// QSA and matchesSelector support\n\n\t\t\trbuggyQSA = [];\n\n\t\t\t// Build QSA regex\n\t\t\t// Regex strategy adopted from Diego Perini\n\t\t\tassert(function (el) {\n\n\t\t\t\tvar input;\n\n\t\t\t\tdocumentElement.appendChild(el).innerHTML =\n\t\t\t\t\t\"<a id='\" + expando + \"' href='' disabled='disabled'></a>\" +\n\t\t\t\t\t\"<select id='\" + expando + \"-\\r\\\\' disabled='disabled'>\" +\n\t\t\t\t\t\"<option selected=''></option></select>\";\n\n\t\t\t\t// Support: iOS <=7 - 8 only\n\t\t\t\t// Boolean attributes and \"value\" are not treated correctly in some XML documents\n\t\t\t\tif (!el.querySelectorAll(\"[selected]\").length) {\n\t\t\t\t\trbuggyQSA.push(\"\\\\[\" + whitespace + \"*(?:value|\" + booleans + \")\");\n\t\t\t\t}\n\n\t\t\t\t// Support: iOS <=7 - 8 only\n\t\t\t\tif (!el.querySelectorAll(\"[id~=\" + expando + \"-]\").length) {\n\t\t\t\t\trbuggyQSA.push(\"~=\");\n\t\t\t\t}\n\n\t\t\t\t// Support: iOS 8 only\n\t\t\t\t// https://bugs.webkit.org/show_bug.cgi?id=136851\n\t\t\t\t// In-page `selector#id sibling-combinator selector` fails\n\t\t\t\tif (!el.querySelectorAll(\"a#\" + expando + \"+*\").length) {\n\t\t\t\t\trbuggyQSA.push(\".#.+[+~]\");\n\t\t\t\t}\n\n\t\t\t\t// Support: Chrome <=105+, Firefox <=104+, Safari <=15.4+\n\t\t\t\t// In some of the document kinds, these selectors wouldn't work natively.\n\t\t\t\t// This is probably OK but for backwards compatibility we want to maintain\n\t\t\t\t// handling them through jQuery traversal in jQuery 3.x.\n\t\t\t\tif (!el.querySelectorAll(\":checked\").length) {\n\t\t\t\t\trbuggyQSA.push(\":checked\");\n\t\t\t\t}\n\n\t\t\t\t// Support: Windows 8 Native Apps\n\t\t\t\t// The type and name attributes are restricted during .innerHTML assignment\n\t\t\t\tinput = document.createElement(\"input\");\n\t\t\t\tinput.setAttribute(\"type\", \"hidden\");\n\t\t\t\tel.appendChild(input).setAttribute(\"name\", \"D\");\n\n\t\t\t\t// Support: IE 9 - 11+\n\t\t\t\t// IE's :disabled selector does not pick up the children of disabled fieldsets\n\t\t\t\t// Support: Chrome <=105+, Firefox <=104+, Safari <=15.4+\n\t\t\t\t// In some of the document kinds, these selectors wouldn't work natively.\n\t\t\t\t// This is probably OK but for backwards compatibility we want to maintain\n\t\t\t\t// handling them through jQuery traversal in jQuery 3.x.\n\t\t\t\tdocumentElement.appendChild(el).disabled = true;\n\t\t\t\tif (el.querySelectorAll(\":disabled\").length !== 2) {\n\t\t\t\t\trbuggyQSA.push(\":enabled\", \":disabled\");\n\t\t\t\t}\n\n\t\t\t\t// Support: IE 11+, Edge 15 - 18+\n\t\t\t\t// IE 11/Edge don't find elements on a `[name='']` query in some cases.\n\t\t\t\t// Adding a temporary attribute to the document before the selection works\n\t\t\t\t// around the issue.\n\t\t\t\t// Interestingly, IE 10 & older don't seem to have the issue.\n\t\t\t\tinput = document.createElement(\"input\");\n\t\t\t\tinput.setAttribute(\"name\", \"\");\n\t\t\t\tel.appendChild(input);\n\t\t\t\tif (!el.querySelectorAll(\"[name='']\").length) {\n\t\t\t\t\trbuggyQSA.push(\"\\\\[\" + whitespace + \"*name\" + whitespace + \"*=\" +\n\t\t\t\t\t\twhitespace + \"*(?:''|\\\"\\\")\");\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tif (!support.cssHas) {\n\n\t\t\t\t// Support: Chrome 105 - 110+, Safari 15.4 - 16.3+\n\t\t\t\t// Our regular `try-catch` mechanism fails to detect natively-unsupported\n\t\t\t\t// pseudo-classes inside `:has()` (such as `:has(:contains(\"Foo\"))`)\n\t\t\t\t// in browsers that parse the `:has()` argument as a forgiving selector list.\n\t\t\t\t// https://drafts.csswg.org/selectors/#relational now requires the argument\n\t\t\t\t// to be parsed unforgivingly, but browsers have not yet fully adjusted.\n\t\t\t\trbuggyQSA.push(\":has\");\n\t\t\t}\n\n\t\t\trbuggyQSA = rbuggyQSA.length && new RegExp(rbuggyQSA.join(\"|\"));\n\n\t\t\t/* Sorting\n\t\t\t---------------------------------------------------------------------- */\n\n\t\t\t// Document order sorting\n\t\t\tsortOrder = function (a, b) {\n\n\t\t\t\t// Flag for duplicate removal\n\t\t\t\tif (a === b) {\n\t\t\t\t\thasDuplicate = true;\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\n\t\t\t\t// Sort on method existence if only one input has compareDocumentPosition\n\t\t\t\tvar compare = !a.compareDocumentPosition - !b.compareDocumentPosition;\n\t\t\t\tif (compare) {\n\t\t\t\t\treturn compare;\n\t\t\t\t}\n\n\t\t\t\t// Calculate position if both inputs belong to the same document\n\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\tcompare = (a.ownerDocument || a) == (b.ownerDocument || b) ?\n\t\t\t\t\ta.compareDocumentPosition(b) :\n\n\t\t\t\t\t// Otherwise we know they are disconnected\n\t\t\t\t\t1;\n\n\t\t\t\t// Disconnected nodes\n\t\t\t\tif (compare & 1 ||\n\t\t\t\t\t(!support.sortDetached && b.compareDocumentPosition(a) === compare)) {\n\n\t\t\t\t\t// Choose the first element that is related to our preferred document\n\t\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\tif (a === document || a.ownerDocument == preferredDoc &&\n\t\t\t\t\t\tfind.contains(preferredDoc, a)) {\n\t\t\t\t\t\treturn -1;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\tif (b === document || b.ownerDocument == preferredDoc &&\n\t\t\t\t\t\tfind.contains(preferredDoc, b)) {\n\t\t\t\t\t\treturn 1;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Maintain original order\n\t\t\t\t\treturn sortInput ?\n\t\t\t\t\t\t(indexOf.call(sortInput, a) - indexOf.call(sortInput, b)) :\n\t\t\t\t\t\t0;\n\t\t\t\t}\n\n\t\t\t\treturn compare & 4 ? -1 : 1;\n\t\t\t};\n\n\t\t\treturn document;\n\t\t}\n\n\t\tfind.matches = function (expr, elements) {\n\t\t\treturn find(expr, null, null, elements);\n\t\t};\n\n\t\tfind.matchesSelector = function (elem, expr) {\n\t\t\tsetDocument(elem);\n\n\t\t\tif (documentIsHTML &&\n\t\t\t\t!nonnativeSelectorCache[expr + \" \"] &&\n\t\t\t\t(!rbuggyQSA || !rbuggyQSA.test(expr))) {\n\n\t\t\t\ttry {\n\t\t\t\t\tvar ret = matches.call(elem, expr);\n\n\t\t\t\t\t// IE 9's matchesSelector returns false on disconnected nodes\n\t\t\t\t\tif (ret || support.disconnectedMatch ||\n\n\t\t\t\t\t\t// As well, disconnected nodes are said to be in a document\n\t\t\t\t\t\t// fragment in IE 9\n\t\t\t\t\t\telem.document && elem.document.nodeType !== 11) {\n\t\t\t\t\t\treturn ret;\n\t\t\t\t\t}\n\t\t\t\t} catch (e) {\n\t\t\t\t\tnonnativeSelectorCache(expr, true);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn find(expr, document, null, [elem]).length > 0;\n\t\t};\n\n\t\tfind.contains = function (context, elem) {\n\n\t\t\t// Set document vars if needed\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tif ((context.ownerDocument || context) != document) {\n\t\t\t\tsetDocument(context);\n\t\t\t}\n\t\t\treturn jQuery.contains(context, elem);\n\t\t};\n\n\n\t\tfind.attr = function (elem, name) {\n\n\t\t\t// Set document vars if needed\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tif ((elem.ownerDocument || elem) != document) {\n\t\t\t\tsetDocument(elem);\n\t\t\t}\n\n\t\t\tvar fn = Expr.attrHandle[name.toLowerCase()],\n\n\t\t\t\t// Don't get fooled by Object.prototype properties (see trac-13807)\n\t\t\t\tval = fn && hasOwn.call(Expr.attrHandle, name.toLowerCase()) ?\n\t\t\t\t\tfn(elem, name, !documentIsHTML) :\n\t\t\t\t\tundefined;\n\n\t\t\tif (val !== undefined) {\n\t\t\t\treturn val;\n\t\t\t}\n\n\t\t\treturn elem.getAttribute(name);\n\t\t};\n\n\t\tfind.error = function (msg) {\n\t\t\tthrow new Error(\"Syntax error, unrecognized expression: \" + msg);\n\t\t};\n\n\t\t/**\n\t\t * Document sorting and removing duplicates\n\t\t * @param {ArrayLike} results\n\t\t */\n\t\tjQuery.uniqueSort = function (results) {\n\t\t\tvar elem,\n\t\t\t\tduplicates = [],\n\t\t\t\tj = 0,\n\t\t\t\ti = 0;\n\n\t\t\t// Unless we *know* we can detect duplicates, assume their presence\n\t\t\t//\n\t\t\t// Support: Android <=4.0+\n\t\t\t// Testing for detecting duplicates is unpredictable so instead assume we can't\n\t\t\t// depend on duplicate detection in all browsers without a stable sort.\n\t\t\thasDuplicate = !support.sortStable;\n\t\t\tsortInput = !support.sortStable && slice.call(results, 0);\n\t\t\tsort.call(results, sortOrder);\n\n\t\t\tif (hasDuplicate) {\n\t\t\t\twhile ((elem = results[i++])) {\n\t\t\t\t\tif (elem === results[i]) {\n\t\t\t\t\t\tj = duplicates.push(i);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\twhile (j--) {\n\t\t\t\t\tsplice.call(results, duplicates[j], 1);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Clear input after sorting to release objects\n\t\t\t// See https://github.com/jquery/sizzle/pull/225\n\t\t\tsortInput = null;\n\n\t\t\treturn results;\n\t\t};\n\n\t\tjQuery.fn.uniqueSort = function () {\n\t\t\treturn this.pushStack(jQuery.uniqueSort(slice.apply(this)));\n\t\t};\n\n\t\tExpr = jQuery.expr = {\n\n\t\t\t// Can be adjusted by the user\n\t\t\tcacheLength: 50,\n\n\t\t\tcreatePseudo: markFunction,\n\n\t\t\tmatch: matchExpr,\n\n\t\t\tattrHandle: {},\n\n\t\t\tfind: {},\n\n\t\t\trelative: {\n\t\t\t\t\">\": { dir: \"parentNode\", first: true },\n\t\t\t\t\" \": { dir: \"parentNode\" },\n\t\t\t\t\"+\": { dir: \"previousSibling\", first: true },\n\t\t\t\t\"~\": { dir: \"previousSibling\" }\n\t\t\t},\n\n\t\t\tpreFilter: {\n\t\t\t\tATTR: function (match) {\n\t\t\t\t\tmatch[1] = match[1].replace(runescape, funescape);\n\n\t\t\t\t\t// Move the given value to match[3] whether quoted or unquoted\n\t\t\t\t\tmatch[3] = (match[3] || match[4] || match[5] || \"\")\n\t\t\t\t\t\t.replace(runescape, funescape);\n\n\t\t\t\t\tif (match[2] === \"~=\") {\n\t\t\t\t\t\tmatch[3] = \" \" + match[3] + \" \";\n\t\t\t\t\t}\n\n\t\t\t\t\treturn match.slice(0, 4);\n\t\t\t\t},\n\n\t\t\t\tCHILD: function (match) {\n\n\t\t\t\t\t/* matches from matchExpr[\"CHILD\"]\n\t\t\t\t\t\t1 type (only|nth|...)\n\t\t\t\t\t\t2 what (child|of-type)\n\t\t\t\t\t\t3 argument (even|odd|\\d*|\\d*n([+-]\\d+)?|...)\n\t\t\t\t\t\t4 xn-component of xn+y argument ([+-]?\\d*n|)\n\t\t\t\t\t\t5 sign of xn-component\n\t\t\t\t\t\t6 x of xn-component\n\t\t\t\t\t\t7 sign of y-component\n\t\t\t\t\t\t8 y of y-component\n\t\t\t\t\t*/\n\t\t\t\t\tmatch[1] = match[1].toLowerCase();\n\n\t\t\t\t\tif (match[1].slice(0, 3) === \"nth\") {\n\n\t\t\t\t\t\t// nth-* requires argument\n\t\t\t\t\t\tif (!match[3]) {\n\t\t\t\t\t\t\tfind.error(match[0]);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// numeric x and y parameters for Expr.filter.CHILD\n\t\t\t\t\t\t// remember that false/true cast respectively to 0/1\n\t\t\t\t\t\tmatch[4] = +(match[4] ?\n\t\t\t\t\t\t\tmatch[5] + (match[6] || 1) :\n\t\t\t\t\t\t\t2 * (match[3] === \"even\" || match[3] === \"odd\")\n\t\t\t\t\t\t);\n\t\t\t\t\t\tmatch[5] = +((match[7] + match[8]) || match[3] === \"odd\");\n\n\t\t\t\t\t\t// other types prohibit arguments\n\t\t\t\t\t} else if (match[3]) {\n\t\t\t\t\t\tfind.error(match[0]);\n\t\t\t\t\t}\n\n\t\t\t\t\treturn match;\n\t\t\t\t},\n\n\t\t\t\tPSEUDO: function (match) {\n\t\t\t\t\tvar excess,\n\t\t\t\t\t\tunquoted = !match[6] && match[2];\n\n\t\t\t\t\tif (matchExpr.CHILD.test(match[0])) {\n\t\t\t\t\t\treturn null;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Accept quoted arguments as-is\n\t\t\t\t\tif (match[3]) {\n\t\t\t\t\t\tmatch[2] = match[4] || match[5] || \"\";\n\n\t\t\t\t\t\t// Strip excess characters from unquoted arguments\n\t\t\t\t\t} else if (unquoted && rpseudo.test(unquoted) &&\n\n\t\t\t\t\t\t// Get excess from tokenize (recursively)\n\t\t\t\t\t\t(excess = tokenize(unquoted, true)) &&\n\n\t\t\t\t\t\t// advance to the next closing parenthesis\n\t\t\t\t\t\t(excess = unquoted.indexOf(\")\", unquoted.length - excess) - unquoted.length)) {\n\n\t\t\t\t\t\t// excess is a negative index\n\t\t\t\t\t\tmatch[0] = match[0].slice(0, excess);\n\t\t\t\t\t\tmatch[2] = unquoted.slice(0, excess);\n\t\t\t\t\t}\n\n\t\t\t\t\t// Return only captures needed by the pseudo filter method (type and argument)\n\t\t\t\t\treturn match.slice(0, 3);\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tfilter: {\n\n\t\t\t\tTAG: function (nodeNameSelector) {\n\t\t\t\t\tvar expectedNodeName = nodeNameSelector.replace(runescape, funescape).toLowerCase();\n\t\t\t\t\treturn nodeNameSelector === \"*\" ?\n\t\t\t\t\t\tfunction () {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t} :\n\t\t\t\t\t\tfunction (elem) {\n\t\t\t\t\t\t\treturn nodeName(elem, expectedNodeName);\n\t\t\t\t\t\t};\n\t\t\t\t},\n\n\t\t\t\tCLASS: function (className) {\n\t\t\t\t\tvar pattern = classCache[className + \" \"];\n\n\t\t\t\t\treturn pattern ||\n\t\t\t\t\t\t(pattern = new RegExp(\"(^|\" + whitespace + \")\" + className +\n\t\t\t\t\t\t\t\"(\" + whitespace + \"|$)\")) &&\n\t\t\t\t\t\tclassCache(className, function (elem) {\n\t\t\t\t\t\t\treturn pattern.test(\n\t\t\t\t\t\t\t\ttypeof elem.className === \"string\" && elem.className ||\n\t\t\t\t\t\t\t\ttypeof elem.getAttribute !== \"undefined\" &&\n\t\t\t\t\t\t\t\telem.getAttribute(\"class\") ||\n\t\t\t\t\t\t\t\t\"\"\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t});\n\t\t\t\t},\n\n\t\t\t\tATTR: function (name, operator, check) {\n\t\t\t\t\treturn function (elem) {\n\t\t\t\t\t\tvar result = find.attr(elem, name);\n\n\t\t\t\t\t\tif (result == null) {\n\t\t\t\t\t\t\treturn operator === \"!=\";\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!operator) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tresult += \"\";\n\n\t\t\t\t\t\tif (operator === \"=\") {\n\t\t\t\t\t\t\treturn result === check;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (operator === \"!=\") {\n\t\t\t\t\t\t\treturn result !== check;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (operator === \"^=\") {\n\t\t\t\t\t\t\treturn check && result.indexOf(check) === 0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (operator === \"*=\") {\n\t\t\t\t\t\t\treturn check && result.indexOf(check) > -1;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (operator === \"$=\") {\n\t\t\t\t\t\t\treturn check && result.slice(-check.length) === check;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (operator === \"~=\") {\n\t\t\t\t\t\t\treturn (\" \" + result.replace(rwhitespace, \" \") + \" \")\n\t\t\t\t\t\t\t\t.indexOf(check) > -1;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (operator === \"|=\") {\n\t\t\t\t\t\t\treturn result === check || result.slice(0, check.length + 1) === check + \"-\";\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t};\n\t\t\t\t},\n\n\t\t\t\tCHILD: function (type, what, _argument, first, last) {\n\t\t\t\t\tvar simple = type.slice(0, 3) !== \"nth\",\n\t\t\t\t\t\tforward = type.slice(-4) !== \"last\",\n\t\t\t\t\t\tofType = what === \"of-type\";\n\n\t\t\t\t\treturn first === 1 && last === 0 ?\n\n\t\t\t\t\t\t// Shortcut for :nth-*(n)\n\t\t\t\t\t\tfunction (elem) {\n\t\t\t\t\t\t\treturn !!elem.parentNode;\n\t\t\t\t\t\t} :\n\n\t\t\t\t\t\tfunction (elem, _context, xml) {\n\t\t\t\t\t\t\tvar cache, outerCache, node, nodeIndex, start,\n\t\t\t\t\t\t\t\tdir = simple !== forward ? \"nextSibling\" : \"previousSibling\",\n\t\t\t\t\t\t\t\tparent = elem.parentNode,\n\t\t\t\t\t\t\t\tname = ofType && elem.nodeName.toLowerCase(),\n\t\t\t\t\t\t\t\tuseCache = !xml && !ofType,\n\t\t\t\t\t\t\t\tdiff = false;\n\n\t\t\t\t\t\t\tif (parent) {\n\n\t\t\t\t\t\t\t\t// :(first|last|only)-(child|of-type)\n\t\t\t\t\t\t\t\tif (simple) {\n\t\t\t\t\t\t\t\t\twhile (dir) {\n\t\t\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\t\t\twhile ((node = node[dir])) {\n\t\t\t\t\t\t\t\t\t\t\tif (ofType ?\n\t\t\t\t\t\t\t\t\t\t\t\tnodeName(node, name) :\n\t\t\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1) {\n\n\t\t\t\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t// Reverse direction for :only-* (if we haven't yet done so)\n\t\t\t\t\t\t\t\t\t\tstart = dir = type === \"only\" && !start && \"nextSibling\";\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tstart = [forward ? parent.firstChild : parent.lastChild];\n\n\t\t\t\t\t\t\t\t// non-xml :nth-child(...) stores cache data on `parent`\n\t\t\t\t\t\t\t\tif (forward && useCache) {\n\n\t\t\t\t\t\t\t\t\t// Seek `elem` from a previously-cached index\n\t\t\t\t\t\t\t\t\touterCache = parent[expando] || (parent[expando] = {});\n\t\t\t\t\t\t\t\t\tcache = outerCache[type] || [];\n\t\t\t\t\t\t\t\t\tnodeIndex = cache[0] === dirruns && cache[1];\n\t\t\t\t\t\t\t\t\tdiff = nodeIndex && cache[2];\n\t\t\t\t\t\t\t\t\tnode = nodeIndex && parent.childNodes[nodeIndex];\n\n\t\t\t\t\t\t\t\t\twhile ((node = ++nodeIndex && node && node[dir] ||\n\n\t\t\t\t\t\t\t\t\t\t// Fallback to seeking `elem` from the start\n\t\t\t\t\t\t\t\t\t\t(diff = nodeIndex = 0) || start.pop())) {\n\n\t\t\t\t\t\t\t\t\t\t// When found, cache indexes on `parent` and break\n\t\t\t\t\t\t\t\t\t\tif (node.nodeType === 1 && ++diff && node === elem) {\n\t\t\t\t\t\t\t\t\t\t\touterCache[type] = [dirruns, nodeIndex, diff];\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t// Use previously-cached element index if available\n\t\t\t\t\t\t\t\t\tif (useCache) {\n\t\t\t\t\t\t\t\t\t\touterCache = elem[expando] || (elem[expando] = {});\n\t\t\t\t\t\t\t\t\t\tcache = outerCache[type] || [];\n\t\t\t\t\t\t\t\t\t\tnodeIndex = cache[0] === dirruns && cache[1];\n\t\t\t\t\t\t\t\t\t\tdiff = nodeIndex;\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// xml :nth-child(...)\n\t\t\t\t\t\t\t\t\t// or :nth-last-child(...) or :nth(-last)?-of-type(...)\n\t\t\t\t\t\t\t\t\tif (diff === false) {\n\n\t\t\t\t\t\t\t\t\t\t// Use the same loop as above to seek `elem` from the start\n\t\t\t\t\t\t\t\t\t\twhile ((node = ++nodeIndex && node && node[dir] ||\n\t\t\t\t\t\t\t\t\t\t\t(diff = nodeIndex = 0) || start.pop())) {\n\n\t\t\t\t\t\t\t\t\t\t\tif ((ofType ?\n\t\t\t\t\t\t\t\t\t\t\t\tnodeName(node, name) :\n\t\t\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1) &&\n\t\t\t\t\t\t\t\t\t\t\t\t++diff) {\n\n\t\t\t\t\t\t\t\t\t\t\t\t// Cache the index of each encountered element\n\t\t\t\t\t\t\t\t\t\t\t\tif (useCache) {\n\t\t\t\t\t\t\t\t\t\t\t\t\touterCache = node[expando] ||\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t(node[expando] = {});\n\t\t\t\t\t\t\t\t\t\t\t\t\touterCache[type] = [dirruns, diff];\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\tif (node === elem) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t// Incorporate the offset, then check against cycle size\n\t\t\t\t\t\t\t\tdiff -= last;\n\t\t\t\t\t\t\t\treturn diff === first || (diff % first === 0 && diff / first >= 0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\t\t\t\t},\n\n\t\t\t\tPSEUDO: function (pseudo, argument) {\n\n\t\t\t\t\t// pseudo-class names are case-insensitive\n\t\t\t\t\t// https://www.w3.org/TR/selectors/#pseudo-classes\n\t\t\t\t\t// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters\n\t\t\t\t\t// Remember that setFilters inherits from pseudos\n\t\t\t\t\tvar args,\n\t\t\t\t\t\tfn = Expr.pseudos[pseudo] || Expr.setFilters[pseudo.toLowerCase()] ||\n\t\t\t\t\t\t\tfind.error(\"unsupported pseudo: \" + pseudo);\n\n\t\t\t\t\t// The user may use createPseudo to indicate that\n\t\t\t\t\t// arguments are needed to create the filter function\n\t\t\t\t\t// just as jQuery does\n\t\t\t\t\tif (fn[expando]) {\n\t\t\t\t\t\treturn fn(argument);\n\t\t\t\t\t}\n\n\t\t\t\t\t// But maintain support for old signatures\n\t\t\t\t\tif (fn.length > 1) {\n\t\t\t\t\t\targs = [pseudo, pseudo, \"\", argument];\n\t\t\t\t\t\treturn Expr.setFilters.hasOwnProperty(pseudo.toLowerCase()) ?\n\t\t\t\t\t\t\tmarkFunction(function (seed, matches) {\n\t\t\t\t\t\t\t\tvar idx,\n\t\t\t\t\t\t\t\t\tmatched = fn(seed, argument),\n\t\t\t\t\t\t\t\t\ti = matched.length;\n\t\t\t\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\t\t\t\tidx = indexOf.call(seed, matched[i]);\n\t\t\t\t\t\t\t\t\tseed[idx] = !(matches[idx] = matched[i]);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}) :\n\t\t\t\t\t\t\tfunction (elem) {\n\t\t\t\t\t\t\t\treturn fn(elem, 0, args);\n\t\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\treturn fn;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tpseudos: {\n\n\t\t\t\t// Potentially complex pseudos\n\t\t\t\tnot: markFunction(function (selector) {\n\n\t\t\t\t\t// Trim the selector passed to compile\n\t\t\t\t\t// to avoid treating leading and trailing\n\t\t\t\t\t// spaces as combinators\n\t\t\t\t\tvar input = [],\n\t\t\t\t\t\tresults = [],\n\t\t\t\t\t\tmatcher = compile(selector.replace(rtrimCSS, \"$1\"));\n\n\t\t\t\t\treturn matcher[expando] ?\n\t\t\t\t\t\tmarkFunction(function (seed, matches, _context, xml) {\n\t\t\t\t\t\t\tvar elem,\n\t\t\t\t\t\t\t\tunmatched = matcher(seed, null, xml, []),\n\t\t\t\t\t\t\t\ti = seed.length;\n\n\t\t\t\t\t\t\t// Match elements unmatched by `matcher`\n\t\t\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\t\t\tif ((elem = unmatched[i])) {\n\t\t\t\t\t\t\t\t\tseed[i] = !(matches[i] = elem);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}) :\n\t\t\t\t\t\tfunction (elem, _context, xml) {\n\t\t\t\t\t\t\tinput[0] = elem;\n\t\t\t\t\t\t\tmatcher(input, null, xml, results);\n\n\t\t\t\t\t\t\t// Don't keep the element\n\t\t\t\t\t\t\t// (see https://github.com/jquery/sizzle/issues/299)\n\t\t\t\t\t\t\tinput[0] = null;\n\t\t\t\t\t\t\treturn !results.pop();\n\t\t\t\t\t\t};\n\t\t\t\t}),\n\n\t\t\t\thas: markFunction(function (selector) {\n\t\t\t\t\treturn function (elem) {\n\t\t\t\t\t\treturn find(selector, elem).length > 0;\n\t\t\t\t\t};\n\t\t\t\t}),\n\n\t\t\t\tcontains: markFunction(function (text) {\n\t\t\t\t\ttext = text.replace(runescape, funescape);\n\t\t\t\t\treturn function (elem) {\n\t\t\t\t\t\treturn (elem.textContent || jQuery.text(elem)).indexOf(text) > -1;\n\t\t\t\t\t};\n\t\t\t\t}),\n\n\t\t\t\t// \"Whether an element is represented by a :lang() selector\n\t\t\t\t// is based solely on the element's language value\n\t\t\t\t// being equal to the identifier C,\n\t\t\t\t// or beginning with the identifier C immediately followed by \"-\".\n\t\t\t\t// The matching of C against the element's language value is performed case-insensitively.\n\t\t\t\t// The identifier C does not have to be a valid language name.\"\n\t\t\t\t// https://www.w3.org/TR/selectors/#lang-pseudo\n\t\t\t\tlang: markFunction(function (lang) {\n\n\t\t\t\t\t// lang value must be a valid identifier\n\t\t\t\t\tif (!ridentifier.test(lang || \"\")) {\n\t\t\t\t\t\tfind.error(\"unsupported lang: \" + lang);\n\t\t\t\t\t}\n\t\t\t\t\tlang = lang.replace(runescape, funescape).toLowerCase();\n\t\t\t\t\treturn function (elem) {\n\t\t\t\t\t\tvar elemLang;\n\t\t\t\t\t\tdo {\n\t\t\t\t\t\t\tif ((elemLang = documentIsHTML ?\n\t\t\t\t\t\t\t\telem.lang :\n\t\t\t\t\t\t\t\telem.getAttribute(\"xml:lang\") || elem.getAttribute(\"lang\"))) {\n\n\t\t\t\t\t\t\t\telemLang = elemLang.toLowerCase();\n\t\t\t\t\t\t\t\treturn elemLang === lang || elemLang.indexOf(lang + \"-\") === 0;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} while ((elem = elem.parentNode) && elem.nodeType === 1);\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t};\n\t\t\t\t}),\n\n\t\t\t\t// Miscellaneous\n\t\t\t\ttarget: function (elem) {\n\t\t\t\t\tvar hash = window.location && window.location.hash;\n\t\t\t\t\treturn hash && hash.slice(1) === elem.id;\n\t\t\t\t},\n\n\t\t\t\troot: function (elem) {\n\t\t\t\t\treturn elem === documentElement;\n\t\t\t\t},\n\n\t\t\t\tfocus: function (elem) {\n\t\t\t\t\treturn elem === safeActiveElement() &&\n\t\t\t\t\t\tdocument.hasFocus() &&\n\t\t\t\t\t\t!!(elem.type || elem.href || ~elem.tabIndex);\n\t\t\t\t},\n\n\t\t\t\t// Boolean properties\n\t\t\t\tenabled: createDisabledPseudo(false),\n\t\t\t\tdisabled: createDisabledPseudo(true),\n\n\t\t\t\tchecked: function (elem) {\n\n\t\t\t\t\t// In CSS3, :checked should return both checked and selected elements\n\t\t\t\t\t// https://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\t\t\treturn (nodeName(elem, \"input\") && !!elem.checked) ||\n\t\t\t\t\t\t(nodeName(elem, \"option\") && !!elem.selected);\n\t\t\t\t},\n\n\t\t\t\tselected: function (elem) {\n\n\t\t\t\t\t// Support: IE <=11+\n\t\t\t\t\t// Accessing the selectedIndex property\n\t\t\t\t\t// forces the browser to treat the default option as\n\t\t\t\t\t// selected when in an optgroup.\n\t\t\t\t\tif (elem.parentNode) {\n\t\t\t\t\t\t// eslint-disable-next-line no-unused-expressions\n\t\t\t\t\t\telem.parentNode.selectedIndex;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn elem.selected === true;\n\t\t\t\t},\n\n\t\t\t\t// Contents\n\t\t\t\tempty: function (elem) {\n\n\t\t\t\t\t// https://www.w3.org/TR/selectors/#empty-pseudo\n\t\t\t\t\t// :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),\n\t\t\t\t\t//   but not by others (comment: 8; processing instruction: 7; etc.)\n\t\t\t\t\t// nodeType < 6 works because attributes (2) do not appear as children\n\t\t\t\t\tfor (elem = elem.firstChild; elem; elem = elem.nextSibling) {\n\t\t\t\t\t\tif (elem.nodeType < 6) {\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn true;\n\t\t\t\t},\n\n\t\t\t\tparent: function (elem) {\n\t\t\t\t\treturn !Expr.pseudos.empty(elem);\n\t\t\t\t},\n\n\t\t\t\t// Element/input types\n\t\t\t\theader: function (elem) {\n\t\t\t\t\treturn rheader.test(elem.nodeName);\n\t\t\t\t},\n\n\t\t\t\tinput: function (elem) {\n\t\t\t\t\treturn rinputs.test(elem.nodeName);\n\t\t\t\t},\n\n\t\t\t\tbutton: function (elem) {\n\t\t\t\t\treturn nodeName(elem, \"input\") && elem.type === \"button\" ||\n\t\t\t\t\t\tnodeName(elem, \"button\");\n\t\t\t\t},\n\n\t\t\t\ttext: function (elem) {\n\t\t\t\t\tvar attr;\n\t\t\t\t\treturn nodeName(elem, \"input\") && elem.type === \"text\" &&\n\n\t\t\t\t\t\t// Support: IE <10 only\n\t\t\t\t\t\t// New HTML5 attribute values (e.g., \"search\") appear\n\t\t\t\t\t\t// with elem.type === \"text\"\n\t\t\t\t\t\t((attr = elem.getAttribute(\"type\")) == null ||\n\t\t\t\t\t\t\tattr.toLowerCase() === \"text\");\n\t\t\t\t},\n\n\t\t\t\t// Position-in-collection\n\t\t\t\tfirst: createPositionalPseudo(function () {\n\t\t\t\t\treturn [0];\n\t\t\t\t}),\n\n\t\t\t\tlast: createPositionalPseudo(function (_matchIndexes, length) {\n\t\t\t\t\treturn [length - 1];\n\t\t\t\t}),\n\n\t\t\t\teq: createPositionalPseudo(function (_matchIndexes, length, argument) {\n\t\t\t\t\treturn [argument < 0 ? argument + length : argument];\n\t\t\t\t}),\n\n\t\t\t\teven: createPositionalPseudo(function (matchIndexes, length) {\n\t\t\t\t\tvar i = 0;\n\t\t\t\t\tfor (; i < length; i += 2) {\n\t\t\t\t\t\tmatchIndexes.push(i);\n\t\t\t\t\t}\n\t\t\t\t\treturn matchIndexes;\n\t\t\t\t}),\n\n\t\t\t\todd: createPositionalPseudo(function (matchIndexes, length) {\n\t\t\t\t\tvar i = 1;\n\t\t\t\t\tfor (; i < length; i += 2) {\n\t\t\t\t\t\tmatchIndexes.push(i);\n\t\t\t\t\t}\n\t\t\t\t\treturn matchIndexes;\n\t\t\t\t}),\n\n\t\t\t\tlt: createPositionalPseudo(function (matchIndexes, length, argument) {\n\t\t\t\t\tvar i;\n\n\t\t\t\t\tif (argument < 0) {\n\t\t\t\t\t\ti = argument + length;\n\t\t\t\t\t} else if (argument > length) {\n\t\t\t\t\t\ti = length;\n\t\t\t\t\t} else {\n\t\t\t\t\t\ti = argument;\n\t\t\t\t\t}\n\n\t\t\t\t\tfor (; --i >= 0;) {\n\t\t\t\t\t\tmatchIndexes.push(i);\n\t\t\t\t\t}\n\t\t\t\t\treturn matchIndexes;\n\t\t\t\t}),\n\n\t\t\t\tgt: createPositionalPseudo(function (matchIndexes, length, argument) {\n\t\t\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\t\t\tfor (; ++i < length;) {\n\t\t\t\t\t\tmatchIndexes.push(i);\n\t\t\t\t\t}\n\t\t\t\t\treturn matchIndexes;\n\t\t\t\t})\n\t\t\t}\n\t\t};\n\n\t\tExpr.pseudos.nth = Expr.pseudos.eq;\n\n\t\t// Add button/input type pseudos\n\t\tfor (i in { radio: true, checkbox: true, file: true, password: true, image: true }) {\n\t\t\tExpr.pseudos[i] = createInputPseudo(i);\n\t\t}\n\t\tfor (i in { submit: true, reset: true }) {\n\t\t\tExpr.pseudos[i] = createButtonPseudo(i);\n\t\t}\n\n\t\t// Easy API for creating new setFilters\n\t\tfunction setFilters() { }\n\t\tsetFilters.prototype = Expr.filters = Expr.pseudos;\n\t\tExpr.setFilters = new setFilters();\n\n\t\tfunction tokenize(selector, parseOnly) {\n\t\t\tvar matched, match, tokens, type,\n\t\t\t\tsoFar, groups, preFilters,\n\t\t\t\tcached = tokenCache[selector + \" \"];\n\n\t\t\tif (cached) {\n\t\t\t\treturn parseOnly ? 0 : cached.slice(0);\n\t\t\t}\n\n\t\t\tsoFar = selector;\n\t\t\tgroups = [];\n\t\t\tpreFilters = Expr.preFilter;\n\n\t\t\twhile (soFar) {\n\n\t\t\t\t// Comma and first run\n\t\t\t\tif (!matched || (match = rcomma.exec(soFar))) {\n\t\t\t\t\tif (match) {\n\n\t\t\t\t\t\t// Don't consume trailing commas as valid\n\t\t\t\t\t\tsoFar = soFar.slice(match[0].length) || soFar;\n\t\t\t\t\t}\n\t\t\t\t\tgroups.push((tokens = []));\n\t\t\t\t}\n\n\t\t\t\tmatched = false;\n\n\t\t\t\t// Combinators\n\t\t\t\tif ((match = rleadingCombinator.exec(soFar))) {\n\t\t\t\t\tmatched = match.shift();\n\t\t\t\t\ttokens.push({\n\t\t\t\t\t\tvalue: matched,\n\n\t\t\t\t\t\t// Cast descendant combinators to space\n\t\t\t\t\t\ttype: match[0].replace(rtrimCSS, \" \")\n\t\t\t\t\t});\n\t\t\t\t\tsoFar = soFar.slice(matched.length);\n\t\t\t\t}\n\n\t\t\t\t// Filters\n\t\t\t\tfor (type in Expr.filter) {\n\t\t\t\t\tif ((match = matchExpr[type].exec(soFar)) && (!preFilters[type] ||\n\t\t\t\t\t\t(match = preFilters[type](match)))) {\n\t\t\t\t\t\tmatched = match.shift();\n\t\t\t\t\t\ttokens.push({\n\t\t\t\t\t\t\tvalue: matched,\n\t\t\t\t\t\t\ttype: type,\n\t\t\t\t\t\t\tmatches: match\n\t\t\t\t\t\t});\n\t\t\t\t\t\tsoFar = soFar.slice(matched.length);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (!matched) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Return the length of the invalid excess\n\t\t\t// if we're just parsing\n\t\t\t// Otherwise, throw an error or return tokens\n\t\t\tif (parseOnly) {\n\t\t\t\treturn soFar.length;\n\t\t\t}\n\n\t\t\treturn soFar ?\n\t\t\t\tfind.error(selector) :\n\n\t\t\t\t// Cache the tokens\n\t\t\t\ttokenCache(selector, groups).slice(0);\n\t\t}\n\n\t\tfunction toSelector(tokens) {\n\t\t\tvar i = 0,\n\t\t\t\tlen = tokens.length,\n\t\t\t\tselector = \"\";\n\t\t\tfor (; i < len; i++) {\n\t\t\t\tselector += tokens[i].value;\n\t\t\t}\n\t\t\treturn selector;\n\t\t}\n\n\t\tfunction addCombinator(matcher, combinator, base) {\n\t\t\tvar dir = combinator.dir,\n\t\t\t\tskip = combinator.next,\n\t\t\t\tkey = skip || dir,\n\t\t\t\tcheckNonElements = base && key === \"parentNode\",\n\t\t\t\tdoneName = done++;\n\n\t\t\treturn combinator.first ?\n\n\t\t\t\t// Check against closest ancestor/preceding element\n\t\t\t\tfunction (elem, context, xml) {\n\t\t\t\t\twhile ((elem = elem[dir])) {\n\t\t\t\t\t\tif (elem.nodeType === 1 || checkNonElements) {\n\t\t\t\t\t\t\treturn matcher(elem, context, xml);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn false;\n\t\t\t\t} :\n\n\t\t\t\t// Check against all ancestor/preceding elements\n\t\t\t\tfunction (elem, context, xml) {\n\t\t\t\t\tvar oldCache, outerCache,\n\t\t\t\t\t\tnewCache = [dirruns, doneName];\n\n\t\t\t\t\t// We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching\n\t\t\t\t\tif (xml) {\n\t\t\t\t\t\twhile ((elem = elem[dir])) {\n\t\t\t\t\t\t\tif (elem.nodeType === 1 || checkNonElements) {\n\t\t\t\t\t\t\t\tif (matcher(elem, context, xml)) {\n\t\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\twhile ((elem = elem[dir])) {\n\t\t\t\t\t\t\tif (elem.nodeType === 1 || checkNonElements) {\n\t\t\t\t\t\t\t\touterCache = elem[expando] || (elem[expando] = {});\n\n\t\t\t\t\t\t\t\tif (skip && nodeName(elem, skip)) {\n\t\t\t\t\t\t\t\t\telem = elem[dir] || elem;\n\t\t\t\t\t\t\t\t} else if ((oldCache = outerCache[key]) &&\n\t\t\t\t\t\t\t\t\toldCache[0] === dirruns && oldCache[1] === doneName) {\n\n\t\t\t\t\t\t\t\t\t// Assign to newCache so results back-propagate to previous elements\n\t\t\t\t\t\t\t\t\treturn (newCache[2] = oldCache[2]);\n\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t// Reuse newcache so results back-propagate to previous elements\n\t\t\t\t\t\t\t\t\touterCache[key] = newCache;\n\n\t\t\t\t\t\t\t\t\t// A match means we're done; a fail means we have to keep checking\n\t\t\t\t\t\t\t\t\tif ((newCache[2] = matcher(elem, context, xml))) {\n\t\t\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn false;\n\t\t\t\t};\n\t\t}\n\n\t\tfunction elementMatcher(matchers) {\n\t\t\treturn matchers.length > 1 ?\n\t\t\t\tfunction (elem, context, xml) {\n\t\t\t\t\tvar i = matchers.length;\n\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\tif (!matchers[i](elem, context, xml)) {\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn true;\n\t\t\t\t} :\n\t\t\t\tmatchers[0];\n\t\t}\n\n\t\tfunction multipleContexts(selector, contexts, results) {\n\t\t\tvar i = 0,\n\t\t\t\tlen = contexts.length;\n\t\t\tfor (; i < len; i++) {\n\t\t\t\tfind(selector, contexts[i], results);\n\t\t\t}\n\t\t\treturn results;\n\t\t}\n\n\t\tfunction condense(unmatched, map, filter, context, xml) {\n\t\t\tvar elem,\n\t\t\t\tnewUnmatched = [],\n\t\t\t\ti = 0,\n\t\t\t\tlen = unmatched.length,\n\t\t\t\tmapped = map != null;\n\n\t\t\tfor (; i < len; i++) {\n\t\t\t\tif ((elem = unmatched[i])) {\n\t\t\t\t\tif (!filter || filter(elem, context, xml)) {\n\t\t\t\t\t\tnewUnmatched.push(elem);\n\t\t\t\t\t\tif (mapped) {\n\t\t\t\t\t\t\tmap.push(i);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn newUnmatched;\n\t\t}\n\n\t\tfunction setMatcher(preFilter, selector, matcher, postFilter, postFinder, postSelector) {\n\t\t\tif (postFilter && !postFilter[expando]) {\n\t\t\t\tpostFilter = setMatcher(postFilter);\n\t\t\t}\n\t\t\tif (postFinder && !postFinder[expando]) {\n\t\t\t\tpostFinder = setMatcher(postFinder, postSelector);\n\t\t\t}\n\t\t\treturn markFunction(function (seed, results, context, xml) {\n\t\t\t\tvar temp, i, elem, matcherOut,\n\t\t\t\t\tpreMap = [],\n\t\t\t\t\tpostMap = [],\n\t\t\t\t\tpreexisting = results.length,\n\n\t\t\t\t\t// Get initial elements from seed or context\n\t\t\t\t\telems = seed ||\n\t\t\t\t\t\tmultipleContexts(selector || \"*\",\n\t\t\t\t\t\t\tcontext.nodeType ? [context] : context, []),\n\n\t\t\t\t\t// Prefilter to get matcher input, preserving a map for seed-results synchronization\n\t\t\t\t\tmatcherIn = preFilter && (seed || !selector) ?\n\t\t\t\t\t\tcondense(elems, preMap, preFilter, context, xml) :\n\t\t\t\t\t\telems;\n\n\t\t\t\tif (matcher) {\n\n\t\t\t\t\t// If we have a postFinder, or filtered seed, or non-seed postFilter\n\t\t\t\t\t// or preexisting results,\n\t\t\t\t\tmatcherOut = postFinder || (seed ? preFilter : preexisting || postFilter) ?\n\n\t\t\t\t\t\t// ...intermediate processing is necessary\n\t\t\t\t\t\t[] :\n\n\t\t\t\t\t\t// ...otherwise use results directly\n\t\t\t\t\t\tresults;\n\n\t\t\t\t\t// Find primary matches\n\t\t\t\t\tmatcher(matcherIn, matcherOut, context, xml);\n\t\t\t\t} else {\n\t\t\t\t\tmatcherOut = matcherIn;\n\t\t\t\t}\n\n\t\t\t\t// Apply postFilter\n\t\t\t\tif (postFilter) {\n\t\t\t\t\ttemp = condense(matcherOut, postMap);\n\t\t\t\t\tpostFilter(temp, [], context, xml);\n\n\t\t\t\t\t// Un-match failing elements by moving them back to matcherIn\n\t\t\t\t\ti = temp.length;\n\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\tif ((elem = temp[i])) {\n\t\t\t\t\t\t\tmatcherOut[postMap[i]] = !(matcherIn[postMap[i]] = elem);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (seed) {\n\t\t\t\t\tif (postFinder || preFilter) {\n\t\t\t\t\t\tif (postFinder) {\n\n\t\t\t\t\t\t\t// Get the final matcherOut by condensing this intermediate into postFinder contexts\n\t\t\t\t\t\t\ttemp = [];\n\t\t\t\t\t\t\ti = matcherOut.length;\n\t\t\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\t\t\tif ((elem = matcherOut[i])) {\n\n\t\t\t\t\t\t\t\t\t// Restore matcherIn since elem is not yet a final match\n\t\t\t\t\t\t\t\t\ttemp.push((matcherIn[i] = elem));\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tpostFinder(null, (matcherOut = []), temp, xml);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Move matched elements from seed to results to keep them synchronized\n\t\t\t\t\t\ti = matcherOut.length;\n\t\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\t\tif ((elem = matcherOut[i]) &&\n\t\t\t\t\t\t\t\t(temp = postFinder ? indexOf.call(seed, elem) : preMap[i]) > -1) {\n\n\t\t\t\t\t\t\t\tseed[temp] = !(results[temp] = elem);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Add elements to results, through postFinder if defined\n\t\t\t\t} else {\n\t\t\t\t\tmatcherOut = condense(\n\t\t\t\t\t\tmatcherOut === results ?\n\t\t\t\t\t\t\tmatcherOut.splice(preexisting, matcherOut.length) :\n\t\t\t\t\t\t\tmatcherOut\n\t\t\t\t\t);\n\t\t\t\t\tif (postFinder) {\n\t\t\t\t\t\tpostFinder(null, results, matcherOut, xml);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tpush.apply(results, matcherOut);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tfunction matcherFromTokens(tokens) {\n\t\t\tvar checkContext, matcher, j,\n\t\t\t\tlen = tokens.length,\n\t\t\t\tleadingRelative = Expr.relative[tokens[0].type],\n\t\t\t\timplicitRelative = leadingRelative || Expr.relative[\" \"],\n\t\t\t\ti = leadingRelative ? 1 : 0,\n\n\t\t\t\t// The foundational matcher ensures that elements are reachable from top-level context(s)\n\t\t\t\tmatchContext = addCombinator(function (elem) {\n\t\t\t\t\treturn elem === checkContext;\n\t\t\t\t}, implicitRelative, true),\n\t\t\t\tmatchAnyContext = addCombinator(function (elem) {\n\t\t\t\t\treturn indexOf.call(checkContext, elem) > -1;\n\t\t\t\t}, implicitRelative, true),\n\t\t\t\tmatchers = [function (elem, context, xml) {\n\n\t\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\tvar ret = (!leadingRelative && (xml || context != outermostContext)) || (\n\t\t\t\t\t\t(checkContext = context).nodeType ?\n\t\t\t\t\t\t\tmatchContext(elem, context, xml) :\n\t\t\t\t\t\t\tmatchAnyContext(elem, context, xml));\n\n\t\t\t\t\t// Avoid hanging onto element\n\t\t\t\t\t// (see https://github.com/jquery/sizzle/issues/299)\n\t\t\t\t\tcheckContext = null;\n\t\t\t\t\treturn ret;\n\t\t\t\t}];\n\n\t\t\tfor (; i < len; i++) {\n\t\t\t\tif ((matcher = Expr.relative[tokens[i].type])) {\n\t\t\t\t\tmatchers = [addCombinator(elementMatcher(matchers), matcher)];\n\t\t\t\t} else {\n\t\t\t\t\tmatcher = Expr.filter[tokens[i].type].apply(null, tokens[i].matches);\n\n\t\t\t\t\t// Return special upon seeing a positional matcher\n\t\t\t\t\tif (matcher[expando]) {\n\n\t\t\t\t\t\t// Find the next relative operator (if any) for proper handling\n\t\t\t\t\t\tj = ++i;\n\t\t\t\t\t\tfor (; j < len; j++) {\n\t\t\t\t\t\t\tif (Expr.relative[tokens[j].type]) {\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn setMatcher(\n\t\t\t\t\t\t\ti > 1 && elementMatcher(matchers),\n\t\t\t\t\t\t\ti > 1 && toSelector(\n\n\t\t\t\t\t\t\t\t// If the preceding token was a descendant combinator, insert an implicit any-element `*`\n\t\t\t\t\t\t\t\ttokens.slice(0, i - 1)\n\t\t\t\t\t\t\t\t\t.concat({ value: tokens[i - 2].type === \" \" ? \"*\" : \"\" })\n\t\t\t\t\t\t\t).replace(rtrimCSS, \"$1\"),\n\t\t\t\t\t\t\tmatcher,\n\t\t\t\t\t\t\ti < j && matcherFromTokens(tokens.slice(i, j)),\n\t\t\t\t\t\t\tj < len && matcherFromTokens((tokens = tokens.slice(j))),\n\t\t\t\t\t\t\tj < len && toSelector(tokens)\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\tmatchers.push(matcher);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn elementMatcher(matchers);\n\t\t}\n\n\t\tfunction matcherFromGroupMatchers(elementMatchers, setMatchers) {\n\t\t\tvar bySet = setMatchers.length > 0,\n\t\t\t\tbyElement = elementMatchers.length > 0,\n\t\t\t\tsuperMatcher = function (seed, context, xml, results, outermost) {\n\t\t\t\t\tvar elem, j, matcher,\n\t\t\t\t\t\tmatchedCount = 0,\n\t\t\t\t\t\ti = \"0\",\n\t\t\t\t\t\tunmatched = seed && [],\n\t\t\t\t\t\tsetMatched = [],\n\t\t\t\t\t\tcontextBackup = outermostContext,\n\n\t\t\t\t\t\t// We must always have either seed elements or outermost context\n\t\t\t\t\t\telems = seed || byElement && Expr.find.TAG(\"*\", outermost),\n\n\t\t\t\t\t\t// Use integer dirruns iff this is the outermost matcher\n\t\t\t\t\t\tdirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1),\n\t\t\t\t\t\tlen = elems.length;\n\n\t\t\t\t\tif (outermost) {\n\n\t\t\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\t\toutermostContext = context == document || context || outermost;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Add elements passing elementMatchers directly to results\n\t\t\t\t\t// Support: iOS <=7 - 9 only\n\t\t\t\t\t// Tolerate NodeList properties (IE: \"length\"; Safari: <number>) matching\n\t\t\t\t\t// elements by id. (see trac-14142)\n\t\t\t\t\tfor (; i !== len && (elem = elems[i]) != null; i++) {\n\t\t\t\t\t\tif (byElement && elem) {\n\t\t\t\t\t\t\tj = 0;\n\n\t\t\t\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\t\t\tif (!context && elem.ownerDocument != document) {\n\t\t\t\t\t\t\t\tsetDocument(elem);\n\t\t\t\t\t\t\t\txml = !documentIsHTML;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\twhile ((matcher = elementMatchers[j++])) {\n\t\t\t\t\t\t\t\tif (matcher(elem, context || document, xml)) {\n\t\t\t\t\t\t\t\t\tpush.call(results, elem);\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (outermost) {\n\t\t\t\t\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Track unmatched elements for set filters\n\t\t\t\t\t\tif (bySet) {\n\n\t\t\t\t\t\t\t// They will have gone through all possible matchers\n\t\t\t\t\t\t\tif ((elem = !matcher && elem)) {\n\t\t\t\t\t\t\t\tmatchedCount--;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Lengthen the array for every element, matched or not\n\t\t\t\t\t\t\tif (seed) {\n\t\t\t\t\t\t\t\tunmatched.push(elem);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// `i` is now the count of elements visited above, and adding it to `matchedCount`\n\t\t\t\t\t// makes the latter nonnegative.\n\t\t\t\t\tmatchedCount += i;\n\n\t\t\t\t\t// Apply set filters to unmatched elements\n\t\t\t\t\t// NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`\n\t\t\t\t\t// equals `i`), unless we didn't visit _any_ elements in the above loop because we have\n\t\t\t\t\t// no element matchers and no seed.\n\t\t\t\t\t// Incrementing an initially-string \"0\" `i` allows `i` to remain a string only in that\n\t\t\t\t\t// case, which will result in a \"00\" `matchedCount` that differs from `i` but is also\n\t\t\t\t\t// numerically zero.\n\t\t\t\t\tif (bySet && i !== matchedCount) {\n\t\t\t\t\t\tj = 0;\n\t\t\t\t\t\twhile ((matcher = setMatchers[j++])) {\n\t\t\t\t\t\t\tmatcher(unmatched, setMatched, context, xml);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (seed) {\n\n\t\t\t\t\t\t\t// Reintegrate element matches to eliminate the need for sorting\n\t\t\t\t\t\t\tif (matchedCount > 0) {\n\t\t\t\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\t\t\t\tif (!(unmatched[i] || setMatched[i])) {\n\t\t\t\t\t\t\t\t\t\tsetMatched[i] = pop.call(results);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Discard index placeholder values to get only actual matches\n\t\t\t\t\t\t\tsetMatched = condense(setMatched);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Add matches to results\n\t\t\t\t\t\tpush.apply(results, setMatched);\n\n\t\t\t\t\t\t// Seedless set matches succeeding multiple successful matchers stipulate sorting\n\t\t\t\t\t\tif (outermost && !seed && setMatched.length > 0 &&\n\t\t\t\t\t\t\t(matchedCount + setMatchers.length) > 1) {\n\n\t\t\t\t\t\t\tjQuery.uniqueSort(results);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Override manipulation of globals by nested matchers\n\t\t\t\t\tif (outermost) {\n\t\t\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\t\t\toutermostContext = contextBackup;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn unmatched;\n\t\t\t\t};\n\n\t\t\treturn bySet ?\n\t\t\t\tmarkFunction(superMatcher) :\n\t\t\t\tsuperMatcher;\n\t\t}\n\n\t\tfunction compile(selector, match /* Internal Use Only */) {\n\t\t\tvar i,\n\t\t\t\tsetMatchers = [],\n\t\t\t\telementMatchers = [],\n\t\t\t\tcached = compilerCache[selector + \" \"];\n\n\t\t\tif (!cached) {\n\n\t\t\t\t// Generate a function of recursive functions that can be used to check each element\n\t\t\t\tif (!match) {\n\t\t\t\t\tmatch = tokenize(selector);\n\t\t\t\t}\n\t\t\t\ti = match.length;\n\t\t\t\twhile (i--) {\n\t\t\t\t\tcached = matcherFromTokens(match[i]);\n\t\t\t\t\tif (cached[expando]) {\n\t\t\t\t\t\tsetMatchers.push(cached);\n\t\t\t\t\t} else {\n\t\t\t\t\t\telementMatchers.push(cached);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Cache the compiled function\n\t\t\t\tcached = compilerCache(selector,\n\t\t\t\t\tmatcherFromGroupMatchers(elementMatchers, setMatchers));\n\n\t\t\t\t// Save selector and tokenization\n\t\t\t\tcached.selector = selector;\n\t\t\t}\n\t\t\treturn cached;\n\t\t}\n\n\t\t/**\n\t\t * A low-level selection function that works with jQuery's compiled\n\t\t *  selector functions\n\t\t * @param {String|Function} selector A selector or a pre-compiled\n\t\t *  selector function built with jQuery selector compile\n\t\t * @param {Element} context\n\t\t * @param {Array} [results]\n\t\t * @param {Array} [seed] A set of elements to match against\n\t\t */\n\t\tfunction select(selector, context, results, seed) {\n\t\t\tvar i, tokens, token, type, find,\n\t\t\t\tcompiled = typeof selector === \"function\" && selector,\n\t\t\t\tmatch = !seed && tokenize((selector = compiled.selector || selector));\n\n\t\t\tresults = results || [];\n\n\t\t\t// Try to minimize operations if there is only one selector in the list and no seed\n\t\t\t// (the latter of which guarantees us context)\n\t\t\tif (match.length === 1) {\n\n\t\t\t\t// Reduce context if the leading compound selector is an ID\n\t\t\t\ttokens = match[0] = match[0].slice(0);\n\t\t\t\tif (tokens.length > 2 && (token = tokens[0]).type === \"ID\" &&\n\t\t\t\t\tcontext.nodeType === 9 && documentIsHTML && Expr.relative[tokens[1].type]) {\n\n\t\t\t\t\tcontext = (Expr.find.ID(\n\t\t\t\t\t\ttoken.matches[0].replace(runescape, funescape),\n\t\t\t\t\t\tcontext\n\t\t\t\t\t) || [])[0];\n\t\t\t\t\tif (!context) {\n\t\t\t\t\t\treturn results;\n\n\t\t\t\t\t\t// Precompiled matchers will still verify ancestry, so step up a level\n\t\t\t\t\t} else if (compiled) {\n\t\t\t\t\t\tcontext = context.parentNode;\n\t\t\t\t\t}\n\n\t\t\t\t\tselector = selector.slice(tokens.shift().value.length);\n\t\t\t\t}\n\n\t\t\t\t// Fetch a seed set for right-to-left matching\n\t\t\t\ti = matchExpr.needsContext.test(selector) ? 0 : tokens.length;\n\t\t\t\twhile (i--) {\n\t\t\t\t\ttoken = tokens[i];\n\n\t\t\t\t\t// Abort if we hit a combinator\n\t\t\t\t\tif (Expr.relative[(type = token.type)]) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tif ((find = Expr.find[type])) {\n\n\t\t\t\t\t\t// Search, expanding context for leading sibling combinators\n\t\t\t\t\t\tif ((seed = find(\n\t\t\t\t\t\t\ttoken.matches[0].replace(runescape, funescape),\n\t\t\t\t\t\t\trsibling.test(tokens[0].type) &&\n\t\t\t\t\t\t\ttestContext(context.parentNode) || context\n\t\t\t\t\t\t))) {\n\n\t\t\t\t\t\t\t// If seed is empty or no tokens remain, we can return early\n\t\t\t\t\t\t\ttokens.splice(i, 1);\n\t\t\t\t\t\t\tselector = seed.length && toSelector(tokens);\n\t\t\t\t\t\t\tif (!selector) {\n\t\t\t\t\t\t\t\tpush.apply(results, seed);\n\t\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Compile and execute a filtering function if one is not provided\n\t\t\t// Provide `match` to avoid retokenization if we modified the selector above\n\t\t\t(compiled || compile(selector, match))(\n\t\t\t\tseed,\n\t\t\t\tcontext,\n\t\t\t\t!documentIsHTML,\n\t\t\t\tresults,\n\t\t\t\t!context || rsibling.test(selector) && testContext(context.parentNode) || context\n\t\t\t);\n\t\t\treturn results;\n\t\t}\n\n\t\t// One-time assignments\n\n\t\t// Support: Android <=4.0 - 4.1+\n\t\t// Sort stability\n\t\tsupport.sortStable = expando.split(\"\").sort(sortOrder).join(\"\") === expando;\n\n\t\t// Initialize against the default document\n\t\tsetDocument();\n\n\t\t// Support: Android <=4.0 - 4.1+\n\t\t// Detached nodes confoundingly follow *each other*\n\t\tsupport.sortDetached = assert(function (el) {\n\n\t\t\t// Should return 1, but returns 4 (following)\n\t\t\treturn el.compareDocumentPosition(document.createElement(\"fieldset\")) & 1;\n\t\t});\n\n\t\tjQuery.find = find;\n\n\t\t// Deprecated\n\t\tjQuery.expr[\":\"] = jQuery.expr.pseudos;\n\t\tjQuery.unique = jQuery.uniqueSort;\n\n\t\t// These have always been private, but they used to be documented\n\t\t// as part of Sizzle so let's maintain them in the 3.x line\n\t\t// for backwards compatibility purposes.\n\t\tfind.compile = compile;\n\t\tfind.select = select;\n\t\tfind.setDocument = setDocument;\n\n\t\tfind.escape = jQuery.escapeSelector;\n\t\tfind.getText = jQuery.text;\n\t\tfind.isXML = jQuery.isXMLDoc;\n\t\tfind.selectors = jQuery.expr;\n\t\tfind.support = jQuery.support;\n\t\tfind.uniqueSort = jQuery.uniqueSort;\n\n\t\t/* eslint-enable */\n\n\t})();\n\n\n\tvar dir = function (elem, dir, until) {\n\t\tvar matched = [],\n\t\t\ttruncate = until !== undefined;\n\n\t\twhile ((elem = elem[dir]) && elem.nodeType !== 9) {\n\t\t\tif (elem.nodeType === 1) {\n\t\t\t\tif (truncate && jQuery(elem).is(until)) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tmatched.push(elem);\n\t\t\t}\n\t\t}\n\t\treturn matched;\n\t};\n\n\n\tvar siblings = function (n, elem) {\n\t\tvar matched = [];\n\n\t\tfor (; n; n = n.nextSibling) {\n\t\t\tif (n.nodeType === 1 && n !== elem) {\n\t\t\t\tmatched.push(n);\n\t\t\t}\n\t\t}\n\n\t\treturn matched;\n\t};\n\n\n\tvar rneedsContext = jQuery.expr.match.needsContext;\n\n\tvar rsingleTag = (/^<([a-z][^\\/\\0>:\\x20\\t\\r\\n\\f]*)[\\x20\\t\\r\\n\\f]*\\/?>(?:<\\/\\1>|)$/i);\n\n\n\n\t// Implement the identical functionality for filter and not\n\tfunction winnow(elements, qualifier, not) {\n\t\tif (isFunction(qualifier)) {\n\t\t\treturn jQuery.grep(elements, function (elem, i) {\n\t\t\t\treturn !!qualifier.call(elem, i, elem) !== not;\n\t\t\t});\n\t\t}\n\n\t\t// Single element\n\t\tif (qualifier.nodeType) {\n\t\t\treturn jQuery.grep(elements, function (elem) {\n\t\t\t\treturn (elem === qualifier) !== not;\n\t\t\t});\n\t\t}\n\n\t\t// Arraylike of elements (jQuery, arguments, Array)\n\t\tif (typeof qualifier !== \"string\") {\n\t\t\treturn jQuery.grep(elements, function (elem) {\n\t\t\t\treturn (indexOf.call(qualifier, elem) > -1) !== not;\n\t\t\t});\n\t\t}\n\n\t\t// Filtered directly for both simple and complex selectors\n\t\treturn jQuery.filter(qualifier, elements, not);\n\t}\n\n\tjQuery.filter = function (expr, elems, not) {\n\t\tvar elem = elems[0];\n\n\t\tif (not) {\n\t\t\texpr = \":not(\" + expr + \")\";\n\t\t}\n\n\t\tif (elems.length === 1 && elem.nodeType === 1) {\n\t\t\treturn jQuery.find.matchesSelector(elem, expr) ? [elem] : [];\n\t\t}\n\n\t\treturn jQuery.find.matches(expr, jQuery.grep(elems, function (elem) {\n\t\t\treturn elem.nodeType === 1;\n\t\t}));\n\t};\n\n\tjQuery.fn.extend({\n\t\tfind: function (selector) {\n\t\t\tvar i, ret,\n\t\t\t\tlen = this.length,\n\t\t\t\tself = this;\n\n\t\t\tif (typeof selector !== \"string\") {\n\t\t\t\treturn this.pushStack(jQuery(selector).filter(function () {\n\t\t\t\t\tfor (i = 0; i < len; i++) {\n\t\t\t\t\t\tif (jQuery.contains(self[i], this)) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}));\n\t\t\t}\n\n\t\t\tret = this.pushStack([]);\n\n\t\t\tfor (i = 0; i < len; i++) {\n\t\t\t\tjQuery.find(selector, self[i], ret);\n\t\t\t}\n\n\t\t\treturn len > 1 ? jQuery.uniqueSort(ret) : ret;\n\t\t},\n\t\tfilter: function (selector) {\n\t\t\treturn this.pushStack(winnow(this, selector || [], false));\n\t\t},\n\t\tnot: function (selector) {\n\t\t\treturn this.pushStack(winnow(this, selector || [], true));\n\t\t},\n\t\tis: function (selector) {\n\t\t\treturn !!winnow(\n\t\t\t\tthis,\n\n\t\t\t\t// If this is a positional/relative selector, check membership in the returned set\n\t\t\t\t// so $(\"p:first\").is(\"p:last\") won't return true for a doc with two \"p\".\n\t\t\t\ttypeof selector === \"string\" && rneedsContext.test(selector) ?\n\t\t\t\t\tjQuery(selector) :\n\t\t\t\t\tselector || [],\n\t\t\t\tfalse\n\t\t\t).length;\n\t\t}\n\t});\n\n\n\t// Initialize a jQuery object\n\n\n\t// A central reference to the root jQuery(document)\n\tvar rootjQuery,\n\n\t\t// A simple way to check for HTML strings\n\t\t// Prioritize #id over <tag> to avoid XSS via location.hash (trac-9521)\n\t\t// Strict HTML recognition (trac-11290: must start with <)\n\t\t// Shortcut simple #id case for speed\n\t\trquickExpr = /^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]+))$/,\n\n\t\tinit = jQuery.fn.init = function (selector, context, root) {\n\t\t\tvar match, elem;\n\n\t\t\t// HANDLE: $(\"\"), $(null), $(undefined), $(false)\n\t\t\tif (!selector) {\n\t\t\t\treturn this;\n\t\t\t}\n\n\t\t\t// Method init() accepts an alternate rootjQuery\n\t\t\t// so migrate can support jQuery.sub (gh-2101)\n\t\t\troot = root || rootjQuery;\n\n\t\t\t// Handle HTML strings\n\t\t\tif (typeof selector === \"string\") {\n\t\t\t\tif (selector[0] === \"<\" &&\n\t\t\t\t\tselector[selector.length - 1] === \">\" &&\n\t\t\t\t\tselector.length >= 3) {\n\n\t\t\t\t\t// Assume that strings that start and end with <> are HTML and skip the regex check\n\t\t\t\t\tmatch = [null, selector, null];\n\n\t\t\t\t} else {\n\t\t\t\t\tmatch = rquickExpr.exec(selector);\n\t\t\t\t}\n\n\t\t\t\t// Match html or make sure no context is specified for #id\n\t\t\t\tif (match && (match[1] || !context)) {\n\n\t\t\t\t\t// HANDLE: $(html) -> $(array)\n\t\t\t\t\tif (match[1]) {\n\t\t\t\t\t\tcontext = context instanceof jQuery ? context[0] : context;\n\n\t\t\t\t\t\t// Option to run scripts is true for back-compat\n\t\t\t\t\t\t// Intentionally let the error be thrown if parseHTML is not present\n\t\t\t\t\t\tjQuery.merge(this, jQuery.parseHTML(\n\t\t\t\t\t\t\tmatch[1],\n\t\t\t\t\t\t\tcontext && context.nodeType ? context.ownerDocument || context : document,\n\t\t\t\t\t\t\ttrue\n\t\t\t\t\t\t));\n\n\t\t\t\t\t\t// HANDLE: $(html, props)\n\t\t\t\t\t\tif (rsingleTag.test(match[1]) && jQuery.isPlainObject(context)) {\n\t\t\t\t\t\t\tfor (match in context) {\n\n\t\t\t\t\t\t\t\t// Properties of context are called as methods if possible\n\t\t\t\t\t\t\t\tif (isFunction(this[match])) {\n\t\t\t\t\t\t\t\t\tthis[match](context[match]);\n\n\t\t\t\t\t\t\t\t\t// ...and otherwise set as attributes\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tthis.attr(match, context[match]);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn this;\n\n\t\t\t\t\t\t// HANDLE: $(#id)\n\t\t\t\t\t} else {\n\t\t\t\t\t\telem = document.getElementById(match[2]);\n\n\t\t\t\t\t\tif (elem) {\n\n\t\t\t\t\t\t\t// Inject the element directly into the jQuery object\n\t\t\t\t\t\t\tthis[0] = elem;\n\t\t\t\t\t\t\tthis.length = 1;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn this;\n\t\t\t\t\t}\n\n\t\t\t\t\t// HANDLE: $(expr, $(...))\n\t\t\t\t} else if (!context || context.jquery) {\n\t\t\t\t\treturn (context || root).find(selector);\n\n\t\t\t\t\t// HANDLE: $(expr, context)\n\t\t\t\t\t// (which is just equivalent to: $(context).find(expr)\n\t\t\t\t} else {\n\t\t\t\t\treturn this.constructor(context).find(selector);\n\t\t\t\t}\n\n\t\t\t\t// HANDLE: $(DOMElement)\n\t\t\t} else if (selector.nodeType) {\n\t\t\t\tthis[0] = selector;\n\t\t\t\tthis.length = 1;\n\t\t\t\treturn this;\n\n\t\t\t\t// HANDLE: $(function)\n\t\t\t\t// Shortcut for document ready\n\t\t\t} else if (isFunction(selector)) {\n\t\t\t\treturn root.ready !== undefined ?\n\t\t\t\t\troot.ready(selector) :\n\n\t\t\t\t\t// Execute immediately if ready is not present\n\t\t\t\t\tselector(jQuery);\n\t\t\t}\n\n\t\t\treturn jQuery.makeArray(selector, this);\n\t\t};\n\n\t// Give the init function the jQuery prototype for later instantiation\n\tinit.prototype = jQuery.fn;\n\n\t// Initialize central reference\n\trootjQuery = jQuery(document);\n\n\n\tvar rparentsprev = /^(?:parents|prev(?:Until|All))/,\n\n\t\t// Methods guaranteed to produce a unique set when starting from a unique set\n\t\tguaranteedUnique = {\n\t\t\tchildren: true,\n\t\t\tcontents: true,\n\t\t\tnext: true,\n\t\t\tprev: true\n\t\t};\n\n\tjQuery.fn.extend({\n\t\thas: function (target) {\n\t\t\tvar targets = jQuery(target, this),\n\t\t\t\tl = targets.length;\n\n\t\t\treturn this.filter(function () {\n\t\t\t\tvar i = 0;\n\t\t\t\tfor (; i < l; i++) {\n\t\t\t\t\tif (jQuery.contains(this, targets[i])) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\tclosest: function (selectors, context) {\n\t\t\tvar cur,\n\t\t\t\ti = 0,\n\t\t\t\tl = this.length,\n\t\t\t\tmatched = [],\n\t\t\t\ttargets = typeof selectors !== \"string\" && jQuery(selectors);\n\n\t\t\t// Positional selectors never match, since there's no _selection_ context\n\t\t\tif (!rneedsContext.test(selectors)) {\n\t\t\t\tfor (; i < l; i++) {\n\t\t\t\t\tfor (cur = this[i]; cur && cur !== context; cur = cur.parentNode) {\n\n\t\t\t\t\t\t// Always skip document fragments\n\t\t\t\t\t\tif (cur.nodeType < 11 && (targets ?\n\t\t\t\t\t\t\ttargets.index(cur) > -1 :\n\n\t\t\t\t\t\t\t// Don't pass non-elements to jQuery#find\n\t\t\t\t\t\t\tcur.nodeType === 1 &&\n\t\t\t\t\t\t\tjQuery.find.matchesSelector(cur, selectors))) {\n\n\t\t\t\t\t\t\tmatched.push(cur);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn this.pushStack(matched.length > 1 ? jQuery.uniqueSort(matched) : matched);\n\t\t},\n\n\t\t// Determine the position of an element within the set\n\t\tindex: function (elem) {\n\n\t\t\t// No argument, return index in parent\n\t\t\tif (!elem) {\n\t\t\t\treturn (this[0] && this[0].parentNode) ? this.first().prevAll().length : -1;\n\t\t\t}\n\n\t\t\t// Index in selector\n\t\t\tif (typeof elem === \"string\") {\n\t\t\t\treturn indexOf.call(jQuery(elem), this[0]);\n\t\t\t}\n\n\t\t\t// Locate the position of the desired element\n\t\t\treturn indexOf.call(this,\n\n\t\t\t\t// If it receives a jQuery object, the first element is used\n\t\t\t\telem.jquery ? elem[0] : elem\n\t\t\t);\n\t\t},\n\n\t\tadd: function (selector, context) {\n\t\t\treturn this.pushStack(\n\t\t\t\tjQuery.uniqueSort(\n\t\t\t\t\tjQuery.merge(this.get(), jQuery(selector, context))\n\t\t\t\t)\n\t\t\t);\n\t\t},\n\n\t\taddBack: function (selector) {\n\t\t\treturn this.add(selector == null ?\n\t\t\t\tthis.prevObject : this.prevObject.filter(selector)\n\t\t\t);\n\t\t}\n\t});\n\n\tfunction sibling(cur, dir) {\n\t\twhile ((cur = cur[dir]) && cur.nodeType !== 1) { }\n\t\treturn cur;\n\t}\n\n\tjQuery.each({\n\t\tparent: function (elem) {\n\t\t\tvar parent = elem.parentNode;\n\t\t\treturn parent && parent.nodeType !== 11 ? parent : null;\n\t\t},\n\t\tparents: function (elem) {\n\t\t\treturn dir(elem, \"parentNode\");\n\t\t},\n\t\tparentsUntil: function (elem, _i, until) {\n\t\t\treturn dir(elem, \"parentNode\", until);\n\t\t},\n\t\tnext: function (elem) {\n\t\t\treturn sibling(elem, \"nextSibling\");\n\t\t},\n\t\tprev: function (elem) {\n\t\t\treturn sibling(elem, \"previousSibling\");\n\t\t},\n\t\tnextAll: function (elem) {\n\t\t\treturn dir(elem, \"nextSibling\");\n\t\t},\n\t\tprevAll: function (elem) {\n\t\t\treturn dir(elem, \"previousSibling\");\n\t\t},\n\t\tnextUntil: function (elem, _i, until) {\n\t\t\treturn dir(elem, \"nextSibling\", until);\n\t\t},\n\t\tprevUntil: function (elem, _i, until) {\n\t\t\treturn dir(elem, \"previousSibling\", until);\n\t\t},\n\t\tsiblings: function (elem) {\n\t\t\treturn siblings((elem.parentNode || {}).firstChild, elem);\n\t\t},\n\t\tchildren: function (elem) {\n\t\t\treturn siblings(elem.firstChild);\n\t\t},\n\t\tcontents: function (elem) {\n\t\t\tif (elem.contentDocument != null &&\n\n\t\t\t\t// Support: IE 11+\n\t\t\t\t// <object> elements with no `data` attribute has an object\n\t\t\t\t// `contentDocument` with a `null` prototype.\n\t\t\t\tgetProto(elem.contentDocument)) {\n\n\t\t\t\treturn elem.contentDocument;\n\t\t\t}\n\n\t\t\t// Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only\n\t\t\t// Treat the template element as a regular one in browsers that\n\t\t\t// don't support it.\n\t\t\tif (nodeName(elem, \"template\")) {\n\t\t\t\telem = elem.content || elem;\n\t\t\t}\n\n\t\t\treturn jQuery.merge([], elem.childNodes);\n\t\t}\n\t}, function (name, fn) {\n\t\tjQuery.fn[name] = function (until, selector) {\n\t\t\tvar matched = jQuery.map(this, fn, until);\n\n\t\t\tif (name.slice(-5) !== \"Until\") {\n\t\t\t\tselector = until;\n\t\t\t}\n\n\t\t\tif (selector && typeof selector === \"string\") {\n\t\t\t\tmatched = jQuery.filter(selector, matched);\n\t\t\t}\n\n\t\t\tif (this.length > 1) {\n\n\t\t\t\t// Remove duplicates\n\t\t\t\tif (!guaranteedUnique[name]) {\n\t\t\t\t\tjQuery.uniqueSort(matched);\n\t\t\t\t}\n\n\t\t\t\t// Reverse order for parents* and prev-derivatives\n\t\t\t\tif (rparentsprev.test(name)) {\n\t\t\t\t\tmatched.reverse();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn this.pushStack(matched);\n\t\t};\n\t});\n\tvar rnothtmlwhite = (/[^\\x20\\t\\r\\n\\f]+/g);\n\n\n\n\t// Convert String-formatted options into Object-formatted ones\n\tfunction createOptions(options) {\n\t\tvar object = {};\n\t\tjQuery.each(options.match(rnothtmlwhite) || [], function (_, flag) {\n\t\t\tobject[flag] = true;\n\t\t});\n\t\treturn object;\n\t}\n\n\t/*\n\t * Create a callback list using the following parameters:\n\t *\n\t *\toptions: an optional list of space-separated options that will change how\n\t *\t\t\tthe callback list behaves or a more traditional option object\n\t *\n\t * By default a callback list will act like an event callback list and can be\n\t * \"fired\" multiple times.\n\t *\n\t * Possible options:\n\t *\n\t *\tonce:\t\t\twill ensure the callback list can only be fired once (like a Deferred)\n\t *\n\t *\tmemory:\t\t\twill keep track of previous values and will call any callback added\n\t *\t\t\t\t\tafter the list has been fired right away with the latest \"memorized\"\n\t *\t\t\t\t\tvalues (like a Deferred)\n\t *\n\t *\tunique:\t\t\twill ensure a callback can only be added once (no duplicate in the list)\n\t *\n\t *\tstopOnFalse:\tinterrupt callings when a callback returns false\n\t *\n\t */\n\tjQuery.Callbacks = function (options) {\n\n\t\t// Convert options from String-formatted to Object-formatted if needed\n\t\t// (we check in cache first)\n\t\toptions = typeof options === \"string\" ?\n\t\t\tcreateOptions(options) :\n\t\t\tjQuery.extend({}, options);\n\n\t\tvar // Flag to know if list is currently firing\n\t\t\tfiring,\n\n\t\t\t// Last fire value for non-forgettable lists\n\t\t\tmemory,\n\n\t\t\t// Flag to know if list was already fired\n\t\t\tfired,\n\n\t\t\t// Flag to prevent firing\n\t\t\tlocked,\n\n\t\t\t// Actual callback list\n\t\t\tlist = [],\n\n\t\t\t// Queue of execution data for repeatable lists\n\t\t\tqueue = [],\n\n\t\t\t// Index of currently firing callback (modified by add/remove as needed)\n\t\t\tfiringIndex = -1,\n\n\t\t\t// Fire callbacks\n\t\t\tfire = function () {\n\n\t\t\t\t// Enforce single-firing\n\t\t\t\tlocked = locked || options.once;\n\n\t\t\t\t// Execute callbacks for all pending executions,\n\t\t\t\t// respecting firingIndex overrides and runtime changes\n\t\t\t\tfired = firing = true;\n\t\t\t\tfor (; queue.length; firingIndex = -1) {\n\t\t\t\t\tmemory = queue.shift();\n\t\t\t\t\twhile (++firingIndex < list.length) {\n\n\t\t\t\t\t\t// Run callback and check for early termination\n\t\t\t\t\t\tif (list[firingIndex].apply(memory[0], memory[1]) === false &&\n\t\t\t\t\t\t\toptions.stopOnFalse) {\n\n\t\t\t\t\t\t\t// Jump to end and forget the data so .add doesn't re-fire\n\t\t\t\t\t\t\tfiringIndex = list.length;\n\t\t\t\t\t\t\tmemory = false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Forget the data if we're done with it\n\t\t\t\tif (!options.memory) {\n\t\t\t\t\tmemory = false;\n\t\t\t\t}\n\n\t\t\t\tfiring = false;\n\n\t\t\t\t// Clean up if we're done firing for good\n\t\t\t\tif (locked) {\n\n\t\t\t\t\t// Keep an empty list if we have data for future add calls\n\t\t\t\t\tif (memory) {\n\t\t\t\t\t\tlist = [];\n\n\t\t\t\t\t\t// Otherwise, this object is spent\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlist = \"\";\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// Actual Callbacks object\n\t\t\tself = {\n\n\t\t\t\t// Add a callback or a collection of callbacks to the list\n\t\t\t\tadd: function () {\n\t\t\t\t\tif (list) {\n\n\t\t\t\t\t\t// If we have memory from a past run, we should fire after adding\n\t\t\t\t\t\tif (memory && !firing) {\n\t\t\t\t\t\t\tfiringIndex = list.length - 1;\n\t\t\t\t\t\t\tqueue.push(memory);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t(function add(args) {\n\t\t\t\t\t\t\tjQuery.each(args, function (_, arg) {\n\t\t\t\t\t\t\t\tif (isFunction(arg)) {\n\t\t\t\t\t\t\t\t\tif (!options.unique || !self.has(arg)) {\n\t\t\t\t\t\t\t\t\t\tlist.push(arg);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} else if (arg && arg.length && toType(arg) !== \"string\") {\n\n\t\t\t\t\t\t\t\t\t// Inspect recursively\n\t\t\t\t\t\t\t\t\tadd(arg);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t})(arguments);\n\n\t\t\t\t\t\tif (memory && !firing) {\n\t\t\t\t\t\t\tfire();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Remove a callback from the list\n\t\t\t\tremove: function () {\n\t\t\t\t\tjQuery.each(arguments, function (_, arg) {\n\t\t\t\t\t\tvar index;\n\t\t\t\t\t\twhile ((index = jQuery.inArray(arg, list, index)) > -1) {\n\t\t\t\t\t\t\tlist.splice(index, 1);\n\n\t\t\t\t\t\t\t// Handle firing indexes\n\t\t\t\t\t\t\tif (index <= firingIndex) {\n\t\t\t\t\t\t\t\tfiringIndex--;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Check if a given callback is in the list.\n\t\t\t\t// If no argument is given, return whether or not list has callbacks attached.\n\t\t\t\thas: function (fn) {\n\t\t\t\t\treturn fn ?\n\t\t\t\t\t\tjQuery.inArray(fn, list) > -1 :\n\t\t\t\t\t\tlist.length > 0;\n\t\t\t\t},\n\n\t\t\t\t// Remove all callbacks from the list\n\t\t\t\tempty: function () {\n\t\t\t\t\tif (list) {\n\t\t\t\t\t\tlist = [];\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Disable .fire and .add\n\t\t\t\t// Abort any current/pending executions\n\t\t\t\t// Clear all callbacks and values\n\t\t\t\tdisable: function () {\n\t\t\t\t\tlocked = queue = [];\n\t\t\t\t\tlist = memory = \"\";\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\t\t\t\tdisabled: function () {\n\t\t\t\t\treturn !list;\n\t\t\t\t},\n\n\t\t\t\t// Disable .fire\n\t\t\t\t// Also disable .add unless we have memory (since it would have no effect)\n\t\t\t\t// Abort any pending executions\n\t\t\t\tlock: function () {\n\t\t\t\t\tlocked = queue = [];\n\t\t\t\t\tif (!memory && !firing) {\n\t\t\t\t\t\tlist = memory = \"\";\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\t\t\t\tlocked: function () {\n\t\t\t\t\treturn !!locked;\n\t\t\t\t},\n\n\t\t\t\t// Call all callbacks with the given context and arguments\n\t\t\t\tfireWith: function (context, args) {\n\t\t\t\t\tif (!locked) {\n\t\t\t\t\t\targs = args || [];\n\t\t\t\t\t\targs = [context, args.slice ? args.slice() : args];\n\t\t\t\t\t\tqueue.push(args);\n\t\t\t\t\t\tif (!firing) {\n\t\t\t\t\t\t\tfire();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Call all the callbacks with the given arguments\n\t\t\t\tfire: function () {\n\t\t\t\t\tself.fireWith(this, arguments);\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// To know if the callbacks have already been called at least once\n\t\t\t\tfired: function () {\n\t\t\t\t\treturn !!fired;\n\t\t\t\t}\n\t\t\t};\n\n\t\treturn self;\n\t};\n\n\n\tfunction Identity(v) {\n\t\treturn v;\n\t}\n\tfunction Thrower(ex) {\n\t\tthrow ex;\n\t}\n\n\tfunction adoptValue(value, resolve, reject, noValue) {\n\t\tvar method;\n\n\t\ttry {\n\n\t\t\t// Check for promise aspect first to privilege synchronous behavior\n\t\t\tif (value && isFunction((method = value.promise))) {\n\t\t\t\tmethod.call(value).done(resolve).fail(reject);\n\n\t\t\t\t// Other thenables\n\t\t\t} else if (value && isFunction((method = value.then))) {\n\t\t\t\tmethod.call(value, resolve, reject);\n\n\t\t\t\t// Other non-thenables\n\t\t\t} else {\n\n\t\t\t\t// Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer:\n\t\t\t\t// * false: [ value ].slice( 0 ) => resolve( value )\n\t\t\t\t// * true: [ value ].slice( 1 ) => resolve()\n\t\t\t\tresolve.apply(undefined, [value].slice(noValue));\n\t\t\t}\n\n\t\t\t// For Promises/A+, convert exceptions into rejections\n\t\t\t// Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in\n\t\t\t// Deferred#then to conditionally suppress rejection.\n\t\t} catch (value) {\n\n\t\t\t// Support: Android 4.0 only\n\t\t\t// Strict mode functions invoked without .call/.apply get global-object context\n\t\t\treject.apply(undefined, [value]);\n\t\t}\n\t}\n\n\tjQuery.extend({\n\n\t\tDeferred: function (func) {\n\t\t\tvar tuples = [\n\n\t\t\t\t// action, add listener, callbacks,\n\t\t\t\t// ... .then handlers, argument index, [final state]\n\t\t\t\t[\"notify\", \"progress\", jQuery.Callbacks(\"memory\"),\n\t\t\t\t\tjQuery.Callbacks(\"memory\"), 2],\n\t\t\t\t[\"resolve\", \"done\", jQuery.Callbacks(\"once memory\"),\n\t\t\t\t\tjQuery.Callbacks(\"once memory\"), 0, \"resolved\"],\n\t\t\t\t[\"reject\", \"fail\", jQuery.Callbacks(\"once memory\"),\n\t\t\t\t\tjQuery.Callbacks(\"once memory\"), 1, \"rejected\"]\n\t\t\t],\n\t\t\t\tstate = \"pending\",\n\t\t\t\tpromise = {\n\t\t\t\t\tstate: function () {\n\t\t\t\t\t\treturn state;\n\t\t\t\t\t},\n\t\t\t\t\talways: function () {\n\t\t\t\t\t\tdeferred.done(arguments).fail(arguments);\n\t\t\t\t\t\treturn this;\n\t\t\t\t\t},\n\t\t\t\t\t\"catch\": function (fn) {\n\t\t\t\t\t\treturn promise.then(null, fn);\n\t\t\t\t\t},\n\n\t\t\t\t\t// Keep pipe for back-compat\n\t\t\t\t\tpipe: function ( /* fnDone, fnFail, fnProgress */) {\n\t\t\t\t\t\tvar fns = arguments;\n\n\t\t\t\t\t\treturn jQuery.Deferred(function (newDefer) {\n\t\t\t\t\t\t\tjQuery.each(tuples, function (_i, tuple) {\n\n\t\t\t\t\t\t\t\t// Map tuples (progress, done, fail) to arguments (done, fail, progress)\n\t\t\t\t\t\t\t\tvar fn = isFunction(fns[tuple[4]]) && fns[tuple[4]];\n\n\t\t\t\t\t\t\t\t// deferred.progress(function() { bind to newDefer or newDefer.notify })\n\t\t\t\t\t\t\t\t// deferred.done(function() { bind to newDefer or newDefer.resolve })\n\t\t\t\t\t\t\t\t// deferred.fail(function() { bind to newDefer or newDefer.reject })\n\t\t\t\t\t\t\t\tdeferred[tuple[1]](function () {\n\t\t\t\t\t\t\t\t\tvar returned = fn && fn.apply(this, arguments);\n\t\t\t\t\t\t\t\t\tif (returned && isFunction(returned.promise)) {\n\t\t\t\t\t\t\t\t\t\treturned.promise()\n\t\t\t\t\t\t\t\t\t\t\t.progress(newDefer.notify)\n\t\t\t\t\t\t\t\t\t\t\t.done(newDefer.resolve)\n\t\t\t\t\t\t\t\t\t\t\t.fail(newDefer.reject);\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tnewDefer[tuple[0] + \"With\"](\n\t\t\t\t\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\t\t\t\t\tfn ? [returned] : arguments\n\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tfns = null;\n\t\t\t\t\t\t}).promise();\n\t\t\t\t\t},\n\t\t\t\t\tthen: function (onFulfilled, onRejected, onProgress) {\n\t\t\t\t\t\tvar maxDepth = 0;\n\t\t\t\t\t\tfunction resolve(depth, deferred, handler, special) {\n\t\t\t\t\t\t\treturn function () {\n\t\t\t\t\t\t\t\tvar that = this,\n\t\t\t\t\t\t\t\t\targs = arguments,\n\t\t\t\t\t\t\t\t\tmightThrow = function () {\n\t\t\t\t\t\t\t\t\t\tvar returned, then;\n\n\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.3\n\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-59\n\t\t\t\t\t\t\t\t\t\t// Ignore double-resolution attempts\n\t\t\t\t\t\t\t\t\t\tif (depth < maxDepth) {\n\t\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\treturned = handler.apply(that, args);\n\n\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.1\n\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-48\n\t\t\t\t\t\t\t\t\t\tif (returned === deferred.promise()) {\n\t\t\t\t\t\t\t\t\t\t\tthrow new TypeError(\"Thenable self-resolution\");\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ sections 2.3.3.1, 3.5\n\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-54\n\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-75\n\t\t\t\t\t\t\t\t\t\t// Retrieve `then` only once\n\t\t\t\t\t\t\t\t\t\tthen = returned &&\n\n\t\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.4\n\t\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-64\n\t\t\t\t\t\t\t\t\t\t\t// Only check objects and functions for thenability\n\t\t\t\t\t\t\t\t\t\t\t(typeof returned === \"object\" ||\n\t\t\t\t\t\t\t\t\t\t\t\ttypeof returned === \"function\") &&\n\t\t\t\t\t\t\t\t\t\t\treturned.then;\n\n\t\t\t\t\t\t\t\t\t\t// Handle a returned thenable\n\t\t\t\t\t\t\t\t\t\tif (isFunction(then)) {\n\n\t\t\t\t\t\t\t\t\t\t\t// Special processors (notify) just wait for resolution\n\t\t\t\t\t\t\t\t\t\t\tif (special) {\n\t\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\t\tresolve(maxDepth, deferred, Identity, special),\n\t\t\t\t\t\t\t\t\t\t\t\t\tresolve(maxDepth, deferred, Thrower, special)\n\t\t\t\t\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t\t\t\t\t// Normal processors (resolve) also hook into progress\n\t\t\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t\t\t// ...and disregard older resolution values\n\t\t\t\t\t\t\t\t\t\t\t\tmaxDepth++;\n\n\t\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\t\tresolve(maxDepth, deferred, Identity, special),\n\t\t\t\t\t\t\t\t\t\t\t\t\tresolve(maxDepth, deferred, Thrower, special),\n\t\t\t\t\t\t\t\t\t\t\t\t\tresolve(maxDepth, deferred, Identity,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tdeferred.notifyWith)\n\t\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t// Handle all other returned values\n\t\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\t\tif (handler !== Identity) {\n\t\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\t\targs = [returned];\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t// Process the value(s)\n\t\t\t\t\t\t\t\t\t\t\t// Default process is resolve\n\t\t\t\t\t\t\t\t\t\t\t(special || deferred.resolveWith)(that, args);\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\n\t\t\t\t\t\t\t\t\t// Only normal processors (resolve) catch and reject exceptions\n\t\t\t\t\t\t\t\t\tprocess = special ?\n\t\t\t\t\t\t\t\t\t\tmightThrow :\n\t\t\t\t\t\t\t\t\t\tfunction () {\n\t\t\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\t\t\tmightThrow();\n\t\t\t\t\t\t\t\t\t\t\t} catch (e) {\n\n\t\t\t\t\t\t\t\t\t\t\t\tif (jQuery.Deferred.exceptionHook) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tjQuery.Deferred.exceptionHook(e,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tprocess.error);\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.4.1\n\t\t\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-61\n\t\t\t\t\t\t\t\t\t\t\t\t// Ignore post-resolution exceptions\n\t\t\t\t\t\t\t\t\t\t\t\tif (depth + 1 >= maxDepth) {\n\n\t\t\t\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\t\t\t\tif (handler !== Thrower) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\targs = [e];\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\t\tdeferred.rejectWith(that, args);\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.1\n\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-57\n\t\t\t\t\t\t\t\t// Re-resolve promises immediately to dodge false rejection from\n\t\t\t\t\t\t\t\t// subsequent errors\n\t\t\t\t\t\t\t\tif (depth) {\n\t\t\t\t\t\t\t\t\tprocess();\n\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t// Call an optional hook to record the error, in case of exception\n\t\t\t\t\t\t\t\t\t// since it's otherwise lost when execution goes async\n\t\t\t\t\t\t\t\t\tif (jQuery.Deferred.getErrorHook) {\n\t\t\t\t\t\t\t\t\t\tprocess.error = jQuery.Deferred.getErrorHook();\n\n\t\t\t\t\t\t\t\t\t\t// The deprecated alias of the above. While the name suggests\n\t\t\t\t\t\t\t\t\t\t// returning the stack, not an error instance, jQuery just passes\n\t\t\t\t\t\t\t\t\t\t// it directly to `console.warn` so both will work; an instance\n\t\t\t\t\t\t\t\t\t\t// just better cooperates with source maps.\n\t\t\t\t\t\t\t\t\t} else if (jQuery.Deferred.getStackHook) {\n\t\t\t\t\t\t\t\t\t\tprocess.error = jQuery.Deferred.getStackHook();\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\twindow.setTimeout(process);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn jQuery.Deferred(function (newDefer) {\n\n\t\t\t\t\t\t\t// progress_handlers.add( ... )\n\t\t\t\t\t\t\ttuples[0][3].add(\n\t\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\t\tisFunction(onProgress) ?\n\t\t\t\t\t\t\t\t\t\tonProgress :\n\t\t\t\t\t\t\t\t\t\tIdentity,\n\t\t\t\t\t\t\t\t\tnewDefer.notifyWith\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t// fulfilled_handlers.add( ... )\n\t\t\t\t\t\t\ttuples[1][3].add(\n\t\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\t\tisFunction(onFulfilled) ?\n\t\t\t\t\t\t\t\t\t\tonFulfilled :\n\t\t\t\t\t\t\t\t\t\tIdentity\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t// rejected_handlers.add( ... )\n\t\t\t\t\t\t\ttuples[2][3].add(\n\t\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\t\tisFunction(onRejected) ?\n\t\t\t\t\t\t\t\t\t\tonRejected :\n\t\t\t\t\t\t\t\t\t\tThrower\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}).promise();\n\t\t\t\t\t},\n\n\t\t\t\t\t// Get a promise for this deferred\n\t\t\t\t\t// If obj is provided, the promise aspect is added to the object\n\t\t\t\t\tpromise: function (obj) {\n\t\t\t\t\t\treturn obj != null ? jQuery.extend(obj, promise) : promise;\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tdeferred = {};\n\n\t\t\t// Add list-specific methods\n\t\t\tjQuery.each(tuples, function (i, tuple) {\n\t\t\t\tvar list = tuple[2],\n\t\t\t\t\tstateString = tuple[5];\n\n\t\t\t\t// promise.progress = list.add\n\t\t\t\t// promise.done = list.add\n\t\t\t\t// promise.fail = list.add\n\t\t\t\tpromise[tuple[1]] = list.add;\n\n\t\t\t\t// Handle state\n\t\t\t\tif (stateString) {\n\t\t\t\t\tlist.add(\n\t\t\t\t\t\tfunction () {\n\n\t\t\t\t\t\t\t// state = \"resolved\" (i.e., fulfilled)\n\t\t\t\t\t\t\t// state = \"rejected\"\n\t\t\t\t\t\t\tstate = stateString;\n\t\t\t\t\t\t},\n\n\t\t\t\t\t\t// rejected_callbacks.disable\n\t\t\t\t\t\t// fulfilled_callbacks.disable\n\t\t\t\t\t\ttuples[3 - i][2].disable,\n\n\t\t\t\t\t\t// rejected_handlers.disable\n\t\t\t\t\t\t// fulfilled_handlers.disable\n\t\t\t\t\t\ttuples[3 - i][3].disable,\n\n\t\t\t\t\t\t// progress_callbacks.lock\n\t\t\t\t\t\ttuples[0][2].lock,\n\n\t\t\t\t\t\t// progress_handlers.lock\n\t\t\t\t\t\ttuples[0][3].lock\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\t// progress_handlers.fire\n\t\t\t\t// fulfilled_handlers.fire\n\t\t\t\t// rejected_handlers.fire\n\t\t\t\tlist.add(tuple[3].fire);\n\n\t\t\t\t// deferred.notify = function() { deferred.notifyWith(...) }\n\t\t\t\t// deferred.resolve = function() { deferred.resolveWith(...) }\n\t\t\t\t// deferred.reject = function() { deferred.rejectWith(...) }\n\t\t\t\tdeferred[tuple[0]] = function () {\n\t\t\t\t\tdeferred[tuple[0] + \"With\"](this === deferred ? undefined : this, arguments);\n\t\t\t\t\treturn this;\n\t\t\t\t};\n\n\t\t\t\t// deferred.notifyWith = list.fireWith\n\t\t\t\t// deferred.resolveWith = list.fireWith\n\t\t\t\t// deferred.rejectWith = list.fireWith\n\t\t\t\tdeferred[tuple[0] + \"With\"] = list.fireWith;\n\t\t\t});\n\n\t\t\t// Make the deferred a promise\n\t\t\tpromise.promise(deferred);\n\n\t\t\t// Call given func if any\n\t\t\tif (func) {\n\t\t\t\tfunc.call(deferred, deferred);\n\t\t\t}\n\n\t\t\t// All done!\n\t\t\treturn deferred;\n\t\t},\n\n\t\t// Deferred helper\n\t\twhen: function (singleValue) {\n\t\t\tvar\n\n\t\t\t\t// count of uncompleted subordinates\n\t\t\t\tremaining = arguments.length,\n\n\t\t\t\t// count of unprocessed arguments\n\t\t\t\ti = remaining,\n\n\t\t\t\t// subordinate fulfillment data\n\t\t\t\tresolveContexts = Array(i),\n\t\t\t\tresolveValues = slice.call(arguments),\n\n\t\t\t\t// the primary Deferred\n\t\t\t\tprimary = jQuery.Deferred(),\n\n\t\t\t\t// subordinate callback factory\n\t\t\t\tupdateFunc = function (i) {\n\t\t\t\t\treturn function (value) {\n\t\t\t\t\t\tresolveContexts[i] = this;\n\t\t\t\t\t\tresolveValues[i] = arguments.length > 1 ? slice.call(arguments) : value;\n\t\t\t\t\t\tif (!(--remaining)) {\n\t\t\t\t\t\t\tprimary.resolveWith(resolveContexts, resolveValues);\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t};\n\n\t\t\t// Single- and empty arguments are adopted like Promise.resolve\n\t\t\tif (remaining <= 1) {\n\t\t\t\tadoptValue(singleValue, primary.done(updateFunc(i)).resolve, primary.reject,\n\t\t\t\t\t!remaining);\n\n\t\t\t\t// Use .then() to unwrap secondary thenables (cf. gh-3000)\n\t\t\t\tif (primary.state() === \"pending\" ||\n\t\t\t\t\tisFunction(resolveValues[i] && resolveValues[i].then)) {\n\n\t\t\t\t\treturn primary.then();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Multiple arguments are aggregated like Promise.all array elements\n\t\t\twhile (i--) {\n\t\t\t\tadoptValue(resolveValues[i], updateFunc(i), primary.reject);\n\t\t\t}\n\n\t\t\treturn primary.promise();\n\t\t}\n\t});\n\n\n\t// These usually indicate a programmer mistake during development,\n\t// warn about them ASAP rather than swallowing them by default.\n\tvar rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;\n\n\t// If `jQuery.Deferred.getErrorHook` is defined, `asyncError` is an error\n\t// captured before the async barrier to get the original error cause\n\t// which may otherwise be hidden.\n\tjQuery.Deferred.exceptionHook = function (error, asyncError) {\n\n\t\t// Support: IE 8 - 9 only\n\t\t// Console exists when dev tools are open, which can happen at any time\n\t\tif (window.console && window.console.warn && error && rerrorNames.test(error.name)) {\n\t\t\twindow.console.warn(\"jQuery.Deferred exception: \" + error.message,\n\t\t\t\terror.stack, asyncError);\n\t\t}\n\t};\n\n\n\n\n\tjQuery.readyException = function (error) {\n\t\twindow.setTimeout(function () {\n\t\t\tthrow error;\n\t\t});\n\t};\n\n\n\n\n\t// The deferred used on DOM ready\n\tvar readyList = jQuery.Deferred();\n\n\tjQuery.fn.ready = function (fn) {\n\n\t\treadyList\n\t\t\t.then(fn)\n\n\t\t\t// Wrap jQuery.readyException in a function so that the lookup\n\t\t\t// happens at the time of error handling instead of callback\n\t\t\t// registration.\n\t\t\t.catch(function (error) {\n\t\t\t\tjQuery.readyException(error);\n\t\t\t});\n\n\t\treturn this;\n\t};\n\n\tjQuery.extend({\n\n\t\t// Is the DOM ready to be used? Set to true once it occurs.\n\t\tisReady: false,\n\n\t\t// A counter to track how many items to wait for before\n\t\t// the ready event fires. See trac-6781\n\t\treadyWait: 1,\n\n\t\t// Handle when the DOM is ready\n\t\tready: function (wait) {\n\n\t\t\t// Abort if there are pending holds or we're already ready\n\t\t\tif (wait === true ? --jQuery.readyWait : jQuery.isReady) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Remember that the DOM is ready\n\t\t\tjQuery.isReady = true;\n\n\t\t\t// If a normal DOM Ready event fired, decrement, and wait if need be\n\t\t\tif (wait !== true && --jQuery.readyWait > 0) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If there are functions bound, to execute\n\t\t\treadyList.resolveWith(document, [jQuery]);\n\t\t}\n\t});\n\n\tjQuery.ready.then = readyList.then;\n\n\t// The ready event handler and self cleanup method\n\tfunction completed() {\n\t\tdocument.removeEventListener(\"DOMContentLoaded\", completed);\n\t\twindow.removeEventListener(\"load\", completed);\n\t\tjQuery.ready();\n\t}\n\n\t// Catch cases where $(document).ready() is called\n\t// after the browser event has already occurred.\n\t// Support: IE <=9 - 10 only\n\t// Older IE sometimes signals \"interactive\" too soon\n\tif (document.readyState === \"complete\" ||\n\t\t(document.readyState !== \"loading\" && !document.documentElement.doScroll)) {\n\n\t\t// Handle it asynchronously to allow scripts the opportunity to delay ready\n\t\twindow.setTimeout(jQuery.ready);\n\n\t} else {\n\n\t\t// Use the handy event callback\n\t\tdocument.addEventListener(\"DOMContentLoaded\", completed);\n\n\t\t// A fallback to window.onload, that will always work\n\t\twindow.addEventListener(\"load\", completed);\n\t}\n\n\n\n\n\t// Multifunctional method to get and set values of a collection\n\t// The value/s can optionally be executed if it's a function\n\tvar access = function (elems, fn, key, value, chainable, emptyGet, raw) {\n\t\tvar i = 0,\n\t\t\tlen = elems.length,\n\t\t\tbulk = key == null;\n\n\t\t// Sets many values\n\t\tif (toType(key) === \"object\") {\n\t\t\tchainable = true;\n\t\t\tfor (i in key) {\n\t\t\t\taccess(elems, fn, i, key[i], true, emptyGet, raw);\n\t\t\t}\n\n\t\t\t// Sets one value\n\t\t} else if (value !== undefined) {\n\t\t\tchainable = true;\n\n\t\t\tif (!isFunction(value)) {\n\t\t\t\traw = true;\n\t\t\t}\n\n\t\t\tif (bulk) {\n\n\t\t\t\t// Bulk operations run against the entire set\n\t\t\t\tif (raw) {\n\t\t\t\t\tfn.call(elems, value);\n\t\t\t\t\tfn = null;\n\n\t\t\t\t\t// ...except when executing function values\n\t\t\t\t} else {\n\t\t\t\t\tbulk = fn;\n\t\t\t\t\tfn = function (elem, _key, value) {\n\t\t\t\t\t\treturn bulk.call(jQuery(elem), value);\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (fn) {\n\t\t\t\tfor (; i < len; i++) {\n\t\t\t\t\tfn(\n\t\t\t\t\t\telems[i], key, raw ?\n\t\t\t\t\t\tvalue :\n\t\t\t\t\t\tvalue.call(elems[i], i, fn(elems[i], key))\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (chainable) {\n\t\t\treturn elems;\n\t\t}\n\n\t\t// Gets\n\t\tif (bulk) {\n\t\t\treturn fn.call(elems);\n\t\t}\n\n\t\treturn len ? fn(elems[0], key) : emptyGet;\n\t};\n\n\n\t// Matches dashed string for camelizing\n\tvar rmsPrefix = /^-ms-/,\n\t\trdashAlpha = /-([a-z])/g;\n\n\t// Used by camelCase as callback to replace()\n\tfunction fcamelCase(_all, letter) {\n\t\treturn letter.toUpperCase();\n\t}\n\n\t// Convert dashed to camelCase; used by the css and data modules\n\t// Support: IE <=9 - 11, Edge 12 - 15\n\t// Microsoft forgot to hump their vendor prefix (trac-9572)\n\tfunction camelCase(string) {\n\t\treturn string.replace(rmsPrefix, \"ms-\").replace(rdashAlpha, fcamelCase);\n\t}\n\tvar acceptData = function (owner) {\n\n\t\t// Accepts only:\n\t\t//  - Node\n\t\t//    - Node.ELEMENT_NODE\n\t\t//    - Node.DOCUMENT_NODE\n\t\t//  - Object\n\t\t//    - Any\n\t\treturn owner.nodeType === 1 || owner.nodeType === 9 || !(+owner.nodeType);\n\t};\n\n\n\n\n\tfunction Data() {\n\t\tthis.expando = jQuery.expando + Data.uid++;\n\t}\n\n\tData.uid = 1;\n\n\tData.prototype = {\n\n\t\tcache: function (owner) {\n\n\t\t\t// Check if the owner object already has a cache\n\t\t\tvar value = owner[this.expando];\n\n\t\t\t// If not, create one\n\t\t\tif (!value) {\n\t\t\t\tvalue = {};\n\n\t\t\t\t// We can accept data for non-element nodes in modern browsers,\n\t\t\t\t// but we should not, see trac-8335.\n\t\t\t\t// Always return an empty object.\n\t\t\t\tif (acceptData(owner)) {\n\n\t\t\t\t\t// If it is a node unlikely to be stringify-ed or looped over\n\t\t\t\t\t// use plain assignment\n\t\t\t\t\tif (owner.nodeType) {\n\t\t\t\t\t\towner[this.expando] = value;\n\n\t\t\t\t\t\t// Otherwise secure it in a non-enumerable property\n\t\t\t\t\t\t// configurable must be true to allow the property to be\n\t\t\t\t\t\t// deleted when data is removed\n\t\t\t\t\t} else {\n\t\t\t\t\t\tObject.defineProperty(owner, this.expando, {\n\t\t\t\t\t\t\tvalue: value,\n\t\t\t\t\t\t\tconfigurable: true\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn value;\n\t\t},\n\t\tset: function (owner, data, value) {\n\t\t\tvar prop,\n\t\t\t\tcache = this.cache(owner);\n\n\t\t\t// Handle: [ owner, key, value ] args\n\t\t\t// Always use camelCase key (gh-2257)\n\t\t\tif (typeof data === \"string\") {\n\t\t\t\tcache[camelCase(data)] = value;\n\n\t\t\t\t// Handle: [ owner, { properties } ] args\n\t\t\t} else {\n\n\t\t\t\t// Copy the properties one-by-one to the cache object\n\t\t\t\tfor (prop in data) {\n\t\t\t\t\tcache[camelCase(prop)] = data[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn cache;\n\t\t},\n\t\tget: function (owner, key) {\n\t\t\treturn key === undefined ?\n\t\t\t\tthis.cache(owner) :\n\n\t\t\t\t// Always use camelCase key (gh-2257)\n\t\t\t\towner[this.expando] && owner[this.expando][camelCase(key)];\n\t\t},\n\t\taccess: function (owner, key, value) {\n\n\t\t\t// In cases where either:\n\t\t\t//\n\t\t\t//   1. No key was specified\n\t\t\t//   2. A string key was specified, but no value provided\n\t\t\t//\n\t\t\t// Take the \"read\" path and allow the get method to determine\n\t\t\t// which value to return, respectively either:\n\t\t\t//\n\t\t\t//   1. The entire cache object\n\t\t\t//   2. The data stored at the key\n\t\t\t//\n\t\t\tif (key === undefined ||\n\t\t\t\t((key && typeof key === \"string\") && value === undefined)) {\n\n\t\t\t\treturn this.get(owner, key);\n\t\t\t}\n\n\t\t\t// When the key is not a string, or both a key and value\n\t\t\t// are specified, set or extend (existing objects) with either:\n\t\t\t//\n\t\t\t//   1. An object of properties\n\t\t\t//   2. A key and value\n\t\t\t//\n\t\t\tthis.set(owner, key, value);\n\n\t\t\t// Since the \"set\" path can have two possible entry points\n\t\t\t// return the expected data based on which path was taken[*]\n\t\t\treturn value !== undefined ? value : key;\n\t\t},\n\t\tremove: function (owner, key) {\n\t\t\tvar i,\n\t\t\t\tcache = owner[this.expando];\n\n\t\t\tif (cache === undefined) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (key !== undefined) {\n\n\t\t\t\t// Support array or space separated string of keys\n\t\t\t\tif (Array.isArray(key)) {\n\n\t\t\t\t\t// If key is an array of keys...\n\t\t\t\t\t// We always set camelCase keys, so remove that.\n\t\t\t\t\tkey = key.map(camelCase);\n\t\t\t\t} else {\n\t\t\t\t\tkey = camelCase(key);\n\n\t\t\t\t\t// If a key with the spaces exists, use it.\n\t\t\t\t\t// Otherwise, create an array by matching non-whitespace\n\t\t\t\t\tkey = key in cache ?\n\t\t\t\t\t\t[key] :\n\t\t\t\t\t\t(key.match(rnothtmlwhite) || []);\n\t\t\t\t}\n\n\t\t\t\ti = key.length;\n\n\t\t\t\twhile (i--) {\n\t\t\t\t\tdelete cache[key[i]];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove the expando if there's no more data\n\t\t\tif (key === undefined || jQuery.isEmptyObject(cache)) {\n\n\t\t\t\t// Support: Chrome <=35 - 45\n\t\t\t\t// Webkit & Blink performance suffers when deleting properties\n\t\t\t\t// from DOM nodes, so set to undefined instead\n\t\t\t\t// https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted)\n\t\t\t\tif (owner.nodeType) {\n\t\t\t\t\towner[this.expando] = undefined;\n\t\t\t\t} else {\n\t\t\t\t\tdelete owner[this.expando];\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\thasData: function (owner) {\n\t\t\tvar cache = owner[this.expando];\n\t\t\treturn cache !== undefined && !jQuery.isEmptyObject(cache);\n\t\t}\n\t};\n\tvar dataPriv = new Data();\n\n\tvar dataUser = new Data();\n\n\n\n\t//\tImplementation Summary\n\t//\n\t//\t1. Enforce API surface and semantic compatibility with 1.9.x branch\n\t//\t2. Improve the module's maintainability by reducing the storage\n\t//\t\tpaths to a single mechanism.\n\t//\t3. Use the same single mechanism to support \"private\" and \"user\" data.\n\t//\t4. _Never_ expose \"private\" data to user code (TODO: Drop _data, _removeData)\n\t//\t5. Avoid exposing implementation details on user objects (eg. expando properties)\n\t//\t6. Provide a clear path for implementation upgrade to WeakMap in 2014\n\n\tvar rbrace = /^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,\n\t\trmultiDash = /[A-Z]/g;\n\n\tfunction getData(data) {\n\t\tif (data === \"true\") {\n\t\t\treturn true;\n\t\t}\n\n\t\tif (data === \"false\") {\n\t\t\treturn false;\n\t\t}\n\n\t\tif (data === \"null\") {\n\t\t\treturn null;\n\t\t}\n\n\t\t// Only convert to a number if it doesn't change the string\n\t\tif (data === +data + \"\") {\n\t\t\treturn +data;\n\t\t}\n\n\t\tif (rbrace.test(data)) {\n\t\t\treturn JSON.parse(data);\n\t\t}\n\n\t\treturn data;\n\t}\n\n\tfunction dataAttr(elem, key, data) {\n\t\tvar name;\n\n\t\t// If nothing was found internally, try to fetch any\n\t\t// data from the HTML5 data-* attribute\n\t\tif (data === undefined && elem.nodeType === 1) {\n\t\t\tname = \"data-\" + key.replace(rmultiDash, \"-$&\").toLowerCase();\n\t\t\tdata = elem.getAttribute(name);\n\n\t\t\tif (typeof data === \"string\") {\n\t\t\t\ttry {\n\t\t\t\t\tdata = getData(data);\n\t\t\t\t} catch (e) { }\n\n\t\t\t\t// Make sure we set the data so it isn't changed later\n\t\t\t\tdataUser.set(elem, key, data);\n\t\t\t} else {\n\t\t\t\tdata = undefined;\n\t\t\t}\n\t\t}\n\t\treturn data;\n\t}\n\n\tjQuery.extend({\n\t\thasData: function (elem) {\n\t\t\treturn dataUser.hasData(elem) || dataPriv.hasData(elem);\n\t\t},\n\n\t\tdata: function (elem, name, data) {\n\t\t\treturn dataUser.access(elem, name, data);\n\t\t},\n\n\t\tremoveData: function (elem, name) {\n\t\t\tdataUser.remove(elem, name);\n\t\t},\n\n\t\t// TODO: Now that all calls to _data and _removeData have been replaced\n\t\t// with direct calls to dataPriv methods, these can be deprecated.\n\t\t_data: function (elem, name, data) {\n\t\t\treturn dataPriv.access(elem, name, data);\n\t\t},\n\n\t\t_removeData: function (elem, name) {\n\t\t\tdataPriv.remove(elem, name);\n\t\t}\n\t});\n\n\tjQuery.fn.extend({\n\t\tdata: function (key, value) {\n\t\t\tvar i, name, data,\n\t\t\t\telem = this[0],\n\t\t\t\tattrs = elem && elem.attributes;\n\n\t\t\t// Gets all values\n\t\t\tif (key === undefined) {\n\t\t\t\tif (this.length) {\n\t\t\t\t\tdata = dataUser.get(elem);\n\n\t\t\t\t\tif (elem.nodeType === 1 && !dataPriv.get(elem, \"hasDataAttrs\")) {\n\t\t\t\t\t\ti = attrs.length;\n\t\t\t\t\t\twhile (i--) {\n\n\t\t\t\t\t\t\t// Support: IE 11 only\n\t\t\t\t\t\t\t// The attrs elements can be null (trac-14894)\n\t\t\t\t\t\t\tif (attrs[i]) {\n\t\t\t\t\t\t\t\tname = attrs[i].name;\n\t\t\t\t\t\t\t\tif (name.indexOf(\"data-\") === 0) {\n\t\t\t\t\t\t\t\t\tname = camelCase(name.slice(5));\n\t\t\t\t\t\t\t\t\tdataAttr(elem, name, data[name]);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdataPriv.set(elem, \"hasDataAttrs\", true);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn data;\n\t\t\t}\n\n\t\t\t// Sets multiple values\n\t\t\tif (typeof key === \"object\") {\n\t\t\t\treturn this.each(function () {\n\t\t\t\t\tdataUser.set(this, key);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn access(this, function (value) {\n\t\t\t\tvar data;\n\n\t\t\t\t// The calling jQuery object (element matches) is not empty\n\t\t\t\t// (and therefore has an element appears at this[ 0 ]) and the\n\t\t\t\t// `value` parameter was not undefined. An empty jQuery object\n\t\t\t\t// will result in `undefined` for elem = this[ 0 ] which will\n\t\t\t\t// throw an exception if an attempt to read a data cache is made.\n\t\t\t\tif (elem && value === undefined) {\n\n\t\t\t\t\t// Attempt to get data from the cache\n\t\t\t\t\t// The key will always be camelCased in Data\n\t\t\t\t\tdata = dataUser.get(elem, key);\n\t\t\t\t\tif (data !== undefined) {\n\t\t\t\t\t\treturn data;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Attempt to \"discover\" the data in\n\t\t\t\t\t// HTML5 custom data-* attrs\n\t\t\t\t\tdata = dataAttr(elem, key);\n\t\t\t\t\tif (data !== undefined) {\n\t\t\t\t\t\treturn data;\n\t\t\t\t\t}\n\n\t\t\t\t\t// We tried really hard, but the data doesn't exist.\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Set the data...\n\t\t\t\tthis.each(function () {\n\n\t\t\t\t\t// We always store the camelCased key\n\t\t\t\t\tdataUser.set(this, key, value);\n\t\t\t\t});\n\t\t\t}, null, value, arguments.length > 1, null, true);\n\t\t},\n\n\t\tremoveData: function (key) {\n\t\t\treturn this.each(function () {\n\t\t\t\tdataUser.remove(this, key);\n\t\t\t});\n\t\t}\n\t});\n\n\n\tjQuery.extend({\n\t\tqueue: function (elem, type, data) {\n\t\t\tvar queue;\n\n\t\t\tif (elem) {\n\t\t\t\ttype = (type || \"fx\") + \"queue\";\n\t\t\t\tqueue = dataPriv.get(elem, type);\n\n\t\t\t\t// Speed up dequeue by getting out quickly if this is just a lookup\n\t\t\t\tif (data) {\n\t\t\t\t\tif (!queue || Array.isArray(data)) {\n\t\t\t\t\t\tqueue = dataPriv.access(elem, type, jQuery.makeArray(data));\n\t\t\t\t\t} else {\n\t\t\t\t\t\tqueue.push(data);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn queue || [];\n\t\t\t}\n\t\t},\n\n\t\tdequeue: function (elem, type) {\n\t\t\ttype = type || \"fx\";\n\n\t\t\tvar queue = jQuery.queue(elem, type),\n\t\t\t\tstartLength = queue.length,\n\t\t\t\tfn = queue.shift(),\n\t\t\t\thooks = jQuery._queueHooks(elem, type),\n\t\t\t\tnext = function () {\n\t\t\t\t\tjQuery.dequeue(elem, type);\n\t\t\t\t};\n\n\t\t\t// If the fx queue is dequeued, always remove the progress sentinel\n\t\t\tif (fn === \"inprogress\") {\n\t\t\t\tfn = queue.shift();\n\t\t\t\tstartLength--;\n\t\t\t}\n\n\t\t\tif (fn) {\n\n\t\t\t\t// Add a progress sentinel to prevent the fx queue from being\n\t\t\t\t// automatically dequeued\n\t\t\t\tif (type === \"fx\") {\n\t\t\t\t\tqueue.unshift(\"inprogress\");\n\t\t\t\t}\n\n\t\t\t\t// Clear up the last queue stop function\n\t\t\t\tdelete hooks.stop;\n\t\t\t\tfn.call(elem, next, hooks);\n\t\t\t}\n\n\t\t\tif (!startLength && hooks) {\n\t\t\t\thooks.empty.fire();\n\t\t\t}\n\t\t},\n\n\t\t// Not public - generate a queueHooks object, or return the current one\n\t\t_queueHooks: function (elem, type) {\n\t\t\tvar key = type + \"queueHooks\";\n\t\t\treturn dataPriv.get(elem, key) || dataPriv.access(elem, key, {\n\t\t\t\tempty: jQuery.Callbacks(\"once memory\").add(function () {\n\t\t\t\t\tdataPriv.remove(elem, [type + \"queue\", key]);\n\t\t\t\t})\n\t\t\t});\n\t\t}\n\t});\n\n\tjQuery.fn.extend({\n\t\tqueue: function (type, data) {\n\t\t\tvar setter = 2;\n\n\t\t\tif (typeof type !== \"string\") {\n\t\t\t\tdata = type;\n\t\t\t\ttype = \"fx\";\n\t\t\t\tsetter--;\n\t\t\t}\n\n\t\t\tif (arguments.length < setter) {\n\t\t\t\treturn jQuery.queue(this[0], type);\n\t\t\t}\n\n\t\t\treturn data === undefined ?\n\t\t\t\tthis :\n\t\t\t\tthis.each(function () {\n\t\t\t\t\tvar queue = jQuery.queue(this, type, data);\n\n\t\t\t\t\t// Ensure a hooks for this queue\n\t\t\t\t\tjQuery._queueHooks(this, type);\n\n\t\t\t\t\tif (type === \"fx\" && queue[0] !== \"inprogress\") {\n\t\t\t\t\t\tjQuery.dequeue(this, type);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t},\n\t\tdequeue: function (type) {\n\t\t\treturn this.each(function () {\n\t\t\t\tjQuery.dequeue(this, type);\n\t\t\t});\n\t\t},\n\t\tclearQueue: function (type) {\n\t\t\treturn this.queue(type || \"fx\", []);\n\t\t},\n\n\t\t// Get a promise resolved when queues of a certain type\n\t\t// are emptied (fx is the type by default)\n\t\tpromise: function (type, obj) {\n\t\t\tvar tmp,\n\t\t\t\tcount = 1,\n\t\t\t\tdefer = jQuery.Deferred(),\n\t\t\t\telements = this,\n\t\t\t\ti = this.length,\n\t\t\t\tresolve = function () {\n\t\t\t\t\tif (!(--count)) {\n\t\t\t\t\t\tdefer.resolveWith(elements, [elements]);\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\tif (typeof type !== \"string\") {\n\t\t\t\tobj = type;\n\t\t\t\ttype = undefined;\n\t\t\t}\n\t\t\ttype = type || \"fx\";\n\n\t\t\twhile (i--) {\n\t\t\t\ttmp = dataPriv.get(elements[i], type + \"queueHooks\");\n\t\t\t\tif (tmp && tmp.empty) {\n\t\t\t\t\tcount++;\n\t\t\t\t\ttmp.empty.add(resolve);\n\t\t\t\t}\n\t\t\t}\n\t\t\tresolve();\n\t\t\treturn defer.promise(obj);\n\t\t}\n\t});\n\tvar pnum = (/[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/).source;\n\n\tvar rcssNum = new RegExp(\"^(?:([+-])=|)(\" + pnum + \")([a-z%]*)$\", \"i\");\n\n\n\tvar cssExpand = [\"Top\", \"Right\", \"Bottom\", \"Left\"];\n\n\tvar documentElement = document.documentElement;\n\n\n\n\tvar isAttached = function (elem) {\n\t\treturn jQuery.contains(elem.ownerDocument, elem);\n\t},\n\t\tcomposed = { composed: true };\n\n\t// Support: IE 9 - 11+, Edge 12 - 18+, iOS 10.0 - 10.2 only\n\t// Check attachment across shadow DOM boundaries when possible (gh-3504)\n\t// Support: iOS 10.0-10.2 only\n\t// Early iOS 10 versions support `attachShadow` but not `getRootNode`,\n\t// leading to errors. We need to check for `getRootNode`.\n\tif (documentElement.getRootNode) {\n\t\tisAttached = function (elem) {\n\t\t\treturn jQuery.contains(elem.ownerDocument, elem) ||\n\t\t\t\telem.getRootNode(composed) === elem.ownerDocument;\n\t\t};\n\t}\n\tvar isHiddenWithinTree = function (elem, el) {\n\n\t\t// isHiddenWithinTree might be called from jQuery#filter function;\n\t\t// in that case, element will be second argument\n\t\telem = el || elem;\n\n\t\t// Inline style trumps all\n\t\treturn elem.style.display === \"none\" ||\n\t\t\telem.style.display === \"\" &&\n\n\t\t\t// Otherwise, check computed style\n\t\t\t// Support: Firefox <=43 - 45\n\t\t\t// Disconnected elements can have computed display: none, so first confirm that elem is\n\t\t\t// in the document.\n\t\t\tisAttached(elem) &&\n\n\t\t\tjQuery.css(elem, \"display\") === \"none\";\n\t};\n\n\n\n\tfunction adjustCSS(elem, prop, valueParts, tween) {\n\t\tvar adjusted, scale,\n\t\t\tmaxIterations = 20,\n\t\t\tcurrentValue = tween ?\n\t\t\t\tfunction () {\n\t\t\t\t\treturn tween.cur();\n\t\t\t\t} :\n\t\t\t\tfunction () {\n\t\t\t\t\treturn jQuery.css(elem, prop, \"\");\n\t\t\t\t},\n\t\t\tinitial = currentValue(),\n\t\t\tunit = valueParts && valueParts[3] || (jQuery.cssNumber[prop] ? \"\" : \"px\"),\n\n\t\t\t// Starting value computation is required for potential unit mismatches\n\t\t\tinitialInUnit = elem.nodeType &&\n\t\t\t\t(jQuery.cssNumber[prop] || unit !== \"px\" && +initial) &&\n\t\t\t\trcssNum.exec(jQuery.css(elem, prop));\n\n\t\tif (initialInUnit && initialInUnit[3] !== unit) {\n\n\t\t\t// Support: Firefox <=54\n\t\t\t// Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144)\n\t\t\tinitial = initial / 2;\n\n\t\t\t// Trust units reported by jQuery.css\n\t\t\tunit = unit || initialInUnit[3];\n\n\t\t\t// Iteratively approximate from a nonzero starting point\n\t\t\tinitialInUnit = +initial || 1;\n\n\t\t\twhile (maxIterations--) {\n\n\t\t\t\t// Evaluate and update our best guess (doubling guesses that zero out).\n\t\t\t\t// Finish if the scale equals or crosses 1 (making the old*new product non-positive).\n\t\t\t\tjQuery.style(elem, prop, initialInUnit + unit);\n\t\t\t\tif ((1 - scale) * (1 - (scale = currentValue() / initial || 0.5)) <= 0) {\n\t\t\t\t\tmaxIterations = 0;\n\t\t\t\t}\n\t\t\t\tinitialInUnit = initialInUnit / scale;\n\n\t\t\t}\n\n\t\t\tinitialInUnit = initialInUnit * 2;\n\t\t\tjQuery.style(elem, prop, initialInUnit + unit);\n\n\t\t\t// Make sure we update the tween properties later on\n\t\t\tvalueParts = valueParts || [];\n\t\t}\n\n\t\tif (valueParts) {\n\t\t\tinitialInUnit = +initialInUnit || +initial || 0;\n\n\t\t\t// Apply relative offset (+=/-=) if specified\n\t\t\tadjusted = valueParts[1] ?\n\t\t\t\tinitialInUnit + (valueParts[1] + 1) * valueParts[2] :\n\t\t\t\t+valueParts[2];\n\t\t\tif (tween) {\n\t\t\t\ttween.unit = unit;\n\t\t\t\ttween.start = initialInUnit;\n\t\t\t\ttween.end = adjusted;\n\t\t\t}\n\t\t}\n\t\treturn adjusted;\n\t}\n\n\n\tvar defaultDisplayMap = {};\n\n\tfunction getDefaultDisplay(elem) {\n\t\tvar temp,\n\t\t\tdoc = elem.ownerDocument,\n\t\t\tnodeName = elem.nodeName,\n\t\t\tdisplay = defaultDisplayMap[nodeName];\n\n\t\tif (display) {\n\t\t\treturn display;\n\t\t}\n\n\t\ttemp = doc.body.appendChild(doc.createElement(nodeName));\n\t\tdisplay = jQuery.css(temp, \"display\");\n\n\t\ttemp.parentNode.removeChild(temp);\n\n\t\tif (display === \"none\") {\n\t\t\tdisplay = \"block\";\n\t\t}\n\t\tdefaultDisplayMap[nodeName] = display;\n\n\t\treturn display;\n\t}\n\n\tfunction showHide(elements, show) {\n\t\tvar display, elem,\n\t\t\tvalues = [],\n\t\t\tindex = 0,\n\t\t\tlength = elements.length;\n\n\t\t// Determine new display value for elements that need to change\n\t\tfor (; index < length; index++) {\n\t\t\telem = elements[index];\n\t\t\tif (!elem.style) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tdisplay = elem.style.display;\n\t\t\tif (show) {\n\n\t\t\t\t// Since we force visibility upon cascade-hidden elements, an immediate (and slow)\n\t\t\t\t// check is required in this first loop unless we have a nonempty display value (either\n\t\t\t\t// inline or about-to-be-restored)\n\t\t\t\tif (display === \"none\") {\n\t\t\t\t\tvalues[index] = dataPriv.get(elem, \"display\") || null;\n\t\t\t\t\tif (!values[index]) {\n\t\t\t\t\t\telem.style.display = \"\";\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (elem.style.display === \"\" && isHiddenWithinTree(elem)) {\n\t\t\t\t\tvalues[index] = getDefaultDisplay(elem);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (display !== \"none\") {\n\t\t\t\t\tvalues[index] = \"none\";\n\n\t\t\t\t\t// Remember what we're overwriting\n\t\t\t\t\tdataPriv.set(elem, \"display\", display);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Set the display of the elements in a second loop to avoid constant reflow\n\t\tfor (index = 0; index < length; index++) {\n\t\t\tif (values[index] != null) {\n\t\t\t\telements[index].style.display = values[index];\n\t\t\t}\n\t\t}\n\n\t\treturn elements;\n\t}\n\n\tjQuery.fn.extend({\n\t\tshow: function () {\n\t\t\treturn showHide(this, true);\n\t\t},\n\t\thide: function () {\n\t\t\treturn showHide(this);\n\t\t},\n\t\ttoggle: function (state) {\n\t\t\tif (typeof state === \"boolean\") {\n\t\t\t\treturn state ? this.show() : this.hide();\n\t\t\t}\n\n\t\t\treturn this.each(function () {\n\t\t\t\tif (isHiddenWithinTree(this)) {\n\t\t\t\t\tjQuery(this).show();\n\t\t\t\t} else {\n\t\t\t\t\tjQuery(this).hide();\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t});\n\tvar rcheckableType = (/^(?:checkbox|radio)$/i);\n\n\tvar rtagName = (/<([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]*)/i);\n\n\tvar rscriptType = (/^$|^module$|\\/(?:java|ecma)script/i);\n\n\n\n\t(function () {\n\t\tvar fragment = document.createDocumentFragment(),\n\t\t\tdiv = fragment.appendChild(document.createElement(\"div\")),\n\t\t\tinput = document.createElement(\"input\");\n\n\t\t// Support: Android 4.0 - 4.3 only\n\t\t// Check state lost if the name is set (trac-11217)\n\t\t// Support: Windows Web Apps (WWA)\n\t\t// `name` and `type` must use .setAttribute for WWA (trac-14901)\n\t\tinput.setAttribute(\"type\", \"radio\");\n\t\tinput.setAttribute(\"checked\", \"checked\");\n\t\tinput.setAttribute(\"name\", \"t\");\n\n\t\tdiv.appendChild(input);\n\n\t\t// Support: Android <=4.1 only\n\t\t// Older WebKit doesn't clone checked state correctly in fragments\n\t\tsupport.checkClone = div.cloneNode(true).cloneNode(true).lastChild.checked;\n\n\t\t// Support: IE <=11 only\n\t\t// Make sure textarea (and checkbox) defaultValue is properly cloned\n\t\tdiv.innerHTML = \"<textarea>x</textarea>\";\n\t\tsupport.noCloneChecked = !!div.cloneNode(true).lastChild.defaultValue;\n\n\t\t// Support: IE <=9 only\n\t\t// IE <=9 replaces <option> tags with their contents when inserted outside of\n\t\t// the select element.\n\t\tdiv.innerHTML = \"<option></option>\";\n\t\tsupport.option = !!div.lastChild;\n\t})();\n\n\n\t// We have to close these tags to support XHTML (trac-13200)\n\tvar wrapMap = {\n\n\t\t// XHTML parsers do not magically insert elements in the\n\t\t// same way that tag soup parsers do. So we cannot shorten\n\t\t// this by omitting <tbody> or other required elements.\n\t\tthead: [1, \"<table>\", \"</table>\"],\n\t\tcol: [2, \"<table><colgroup>\", \"</colgroup></table>\"],\n\t\ttr: [2, \"<table><tbody>\", \"</tbody></table>\"],\n\t\ttd: [3, \"<table><tbody><tr>\", \"</tr></tbody></table>\"],\n\n\t\t_default: [0, \"\", \"\"]\n\t};\n\n\twrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;\n\twrapMap.th = wrapMap.td;\n\n\t// Support: IE <=9 only\n\tif (!support.option) {\n\t\twrapMap.optgroup = wrapMap.option = [1, \"<select multiple='multiple'>\", \"</select>\"];\n\t}\n\n\n\tfunction getAll(context, tag) {\n\n\t\t// Support: IE <=9 - 11 only\n\t\t// Use typeof to avoid zero-argument method invocation on host objects (trac-15151)\n\t\tvar ret;\n\n\t\tif (typeof context.getElementsByTagName !== \"undefined\") {\n\t\t\tret = context.getElementsByTagName(tag || \"*\");\n\n\t\t} else if (typeof context.querySelectorAll !== \"undefined\") {\n\t\t\tret = context.querySelectorAll(tag || \"*\");\n\n\t\t} else {\n\t\t\tret = [];\n\t\t}\n\n\t\tif (tag === undefined || tag && nodeName(context, tag)) {\n\t\t\treturn jQuery.merge([context], ret);\n\t\t}\n\n\t\treturn ret;\n\t}\n\n\n\t// Mark scripts as having already been evaluated\n\tfunction setGlobalEval(elems, refElements) {\n\t\tvar i = 0,\n\t\t\tl = elems.length;\n\n\t\tfor (; i < l; i++) {\n\t\t\tdataPriv.set(\n\t\t\t\telems[i],\n\t\t\t\t\"globalEval\",\n\t\t\t\t!refElements || dataPriv.get(refElements[i], \"globalEval\")\n\t\t\t);\n\t\t}\n\t}\n\n\n\tvar rhtml = /<|&#?\\w+;/;\n\n\tfunction buildFragment(elems, context, scripts, selection, ignored) {\n\t\tvar elem, tmp, tag, wrap, attached, j,\n\t\t\tfragment = context.createDocumentFragment(),\n\t\t\tnodes = [],\n\t\t\ti = 0,\n\t\t\tl = elems.length;\n\n\t\tfor (; i < l; i++) {\n\t\t\telem = elems[i];\n\n\t\t\tif (elem || elem === 0) {\n\n\t\t\t\t// Add nodes directly\n\t\t\t\tif (toType(elem) === \"object\") {\n\n\t\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\t\tjQuery.merge(nodes, elem.nodeType ? [elem] : elem);\n\n\t\t\t\t\t// Convert non-html into a text node\n\t\t\t\t} else if (!rhtml.test(elem)) {\n\t\t\t\t\tnodes.push(context.createTextNode(elem));\n\n\t\t\t\t\t// Convert html into DOM nodes\n\t\t\t\t} else {\n\t\t\t\t\ttmp = tmp || fragment.appendChild(context.createElement(\"div\"));\n\n\t\t\t\t\t// Deserialize a standard representation\n\t\t\t\t\ttag = (rtagName.exec(elem) || [\"\", \"\"])[1].toLowerCase();\n\t\t\t\t\twrap = wrapMap[tag] || wrapMap._default;\n\t\t\t\t\ttmp.innerHTML = wrap[1] + jQuery.htmlPrefilter(elem) + wrap[2];\n\n\t\t\t\t\t// Descend through wrappers to the right content\n\t\t\t\t\tj = wrap[0];\n\t\t\t\t\twhile (j--) {\n\t\t\t\t\t\ttmp = tmp.lastChild;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\t\tjQuery.merge(nodes, tmp.childNodes);\n\n\t\t\t\t\t// Remember the top-level container\n\t\t\t\t\ttmp = fragment.firstChild;\n\n\t\t\t\t\t// Ensure the created nodes are orphaned (trac-12392)\n\t\t\t\t\ttmp.textContent = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Remove wrapper from fragment\n\t\tfragment.textContent = \"\";\n\n\t\ti = 0;\n\t\twhile ((elem = nodes[i++])) {\n\n\t\t\t// Skip elements already in the context collection (trac-4087)\n\t\t\tif (selection && jQuery.inArray(elem, selection) > -1) {\n\t\t\t\tif (ignored) {\n\t\t\t\t\tignored.push(elem);\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tattached = isAttached(elem);\n\n\t\t\t// Append to fragment\n\t\t\ttmp = getAll(fragment.appendChild(elem), \"script\");\n\n\t\t\t// Preserve script evaluation history\n\t\t\tif (attached) {\n\t\t\t\tsetGlobalEval(tmp);\n\t\t\t}\n\n\t\t\t// Capture executables\n\t\t\tif (scripts) {\n\t\t\t\tj = 0;\n\t\t\t\twhile ((elem = tmp[j++])) {\n\t\t\t\t\tif (rscriptType.test(elem.type || \"\")) {\n\t\t\t\t\t\tscripts.push(elem);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn fragment;\n\t}\n\n\n\tvar rtypenamespace = /^([^.]*)(?:\\.(.+)|)/;\n\n\tfunction returnTrue() {\n\t\treturn true;\n\t}\n\n\tfunction returnFalse() {\n\t\treturn false;\n\t}\n\n\tfunction on(elem, types, selector, data, fn, one) {\n\t\tvar origFn, type;\n\n\t\t// Types can be a map of types/handlers\n\t\tif (typeof types === \"object\") {\n\n\t\t\t// ( types-Object, selector, data )\n\t\t\tif (typeof selector !== \"string\") {\n\n\t\t\t\t// ( types-Object, data )\n\t\t\t\tdata = data || selector;\n\t\t\t\tselector = undefined;\n\t\t\t}\n\t\t\tfor (type in types) {\n\t\t\t\ton(elem, type, selector, data, types[type], one);\n\t\t\t}\n\t\t\treturn elem;\n\t\t}\n\n\t\tif (data == null && fn == null) {\n\n\t\t\t// ( types, fn )\n\t\t\tfn = selector;\n\t\t\tdata = selector = undefined;\n\t\t} else if (fn == null) {\n\t\t\tif (typeof selector === \"string\") {\n\n\t\t\t\t// ( types, selector, fn )\n\t\t\t\tfn = data;\n\t\t\t\tdata = undefined;\n\t\t\t} else {\n\n\t\t\t\t// ( types, data, fn )\n\t\t\t\tfn = data;\n\t\t\t\tdata = selector;\n\t\t\t\tselector = undefined;\n\t\t\t}\n\t\t}\n\t\tif (fn === false) {\n\t\t\tfn = returnFalse;\n\t\t} else if (!fn) {\n\t\t\treturn elem;\n\t\t}\n\n\t\tif (one === 1) {\n\t\t\torigFn = fn;\n\t\t\tfn = function (event) {\n\n\t\t\t\t// Can use an empty set, since event contains the info\n\t\t\t\tjQuery().off(event);\n\t\t\t\treturn origFn.apply(this, arguments);\n\t\t\t};\n\n\t\t\t// Use same guid so caller can remove using origFn\n\t\t\tfn.guid = origFn.guid || (origFn.guid = jQuery.guid++);\n\t\t}\n\t\treturn elem.each(function () {\n\t\t\tjQuery.event.add(this, types, fn, data, selector);\n\t\t});\n\t}\n\n\t/*\n\t * Helper functions for managing events -- not part of the public interface.\n\t * Props to Dean Edwards' addEvent library for many of the ideas.\n\t */\n\tjQuery.event = {\n\n\t\tglobal: {},\n\n\t\tadd: function (elem, types, handler, data, selector) {\n\n\t\t\tvar handleObjIn, eventHandle, tmp,\n\t\t\t\tevents, t, handleObj,\n\t\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\t\telemData = dataPriv.get(elem);\n\n\t\t\t// Only attach events to objects that accept data\n\t\t\tif (!acceptData(elem)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Caller can pass in an object of custom data in lieu of the handler\n\t\t\tif (handler.handler) {\n\t\t\t\thandleObjIn = handler;\n\t\t\t\thandler = handleObjIn.handler;\n\t\t\t\tselector = handleObjIn.selector;\n\t\t\t}\n\n\t\t\t// Ensure that invalid selectors throw exceptions at attach time\n\t\t\t// Evaluate against documentElement in case elem is a non-element node (e.g., document)\n\t\t\tif (selector) {\n\t\t\t\tjQuery.find.matchesSelector(documentElement, selector);\n\t\t\t}\n\n\t\t\t// Make sure that the handler has a unique ID, used to find/remove it later\n\t\t\tif (!handler.guid) {\n\t\t\t\thandler.guid = jQuery.guid++;\n\t\t\t}\n\n\t\t\t// Init the element's event structure and main handler, if this is the first\n\t\t\tif (!(events = elemData.events)) {\n\t\t\t\tevents = elemData.events = Object.create(null);\n\t\t\t}\n\t\t\tif (!(eventHandle = elemData.handle)) {\n\t\t\t\teventHandle = elemData.handle = function (e) {\n\n\t\t\t\t\t// Discard the second event of a jQuery.event.trigger() and\n\t\t\t\t\t// when an event is called after a page has unloaded\n\t\t\t\t\treturn typeof jQuery !== \"undefined\" && jQuery.event.triggered !== e.type ?\n\t\t\t\t\t\tjQuery.event.dispatch.apply(elem, arguments) : undefined;\n\t\t\t\t};\n\t\t\t}\n\n\t\t\t// Handle multiple events separated by a space\n\t\t\ttypes = (types || \"\").match(rnothtmlwhite) || [\"\"];\n\t\t\tt = types.length;\n\t\t\twhile (t--) {\n\t\t\t\ttmp = rtypenamespace.exec(types[t]) || [];\n\t\t\t\ttype = origType = tmp[1];\n\t\t\t\tnamespaces = (tmp[2] || \"\").split(\".\").sort();\n\n\t\t\t\t// There *must* be a type, no attaching namespace-only handlers\n\t\t\t\tif (!type) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// If event changes its type, use the special event handlers for the changed type\n\t\t\t\tspecial = jQuery.event.special[type] || {};\n\n\t\t\t\t// If selector defined, determine special event api type, otherwise given type\n\t\t\t\ttype = (selector ? special.delegateType : special.bindType) || type;\n\n\t\t\t\t// Update special based on newly reset type\n\t\t\t\tspecial = jQuery.event.special[type] || {};\n\n\t\t\t\t// handleObj is passed to all event handlers\n\t\t\t\thandleObj = jQuery.extend({\n\t\t\t\t\ttype: type,\n\t\t\t\t\torigType: origType,\n\t\t\t\t\tdata: data,\n\t\t\t\t\thandler: handler,\n\t\t\t\t\tguid: handler.guid,\n\t\t\t\t\tselector: selector,\n\t\t\t\t\tneedsContext: selector && jQuery.expr.match.needsContext.test(selector),\n\t\t\t\t\tnamespace: namespaces.join(\".\")\n\t\t\t\t}, handleObjIn);\n\n\t\t\t\t// Init the event handler queue if we're the first\n\t\t\t\tif (!(handlers = events[type])) {\n\t\t\t\t\thandlers = events[type] = [];\n\t\t\t\t\thandlers.delegateCount = 0;\n\n\t\t\t\t\t// Only use addEventListener if the special events handler returns false\n\t\t\t\t\tif (!special.setup ||\n\t\t\t\t\t\tspecial.setup.call(elem, data, namespaces, eventHandle) === false) {\n\n\t\t\t\t\t\tif (elem.addEventListener) {\n\t\t\t\t\t\t\telem.addEventListener(type, eventHandle);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (special.add) {\n\t\t\t\t\tspecial.add.call(elem, handleObj);\n\n\t\t\t\t\tif (!handleObj.handler.guid) {\n\t\t\t\t\t\thandleObj.handler.guid = handler.guid;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Add to the element's handler list, delegates in front\n\t\t\t\tif (selector) {\n\t\t\t\t\thandlers.splice(handlers.delegateCount++, 0, handleObj);\n\t\t\t\t} else {\n\t\t\t\t\thandlers.push(handleObj);\n\t\t\t\t}\n\n\t\t\t\t// Keep track of which events have ever been used, for event optimization\n\t\t\t\tjQuery.event.global[type] = true;\n\t\t\t}\n\n\t\t},\n\n\t\t// Detach an event or set of events from an element\n\t\tremove: function (elem, types, handler, selector, mappedTypes) {\n\n\t\t\tvar j, origCount, tmp,\n\t\t\t\tevents, t, handleObj,\n\t\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\t\telemData = dataPriv.hasData(elem) && dataPriv.get(elem);\n\n\t\t\tif (!elemData || !(events = elemData.events)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Once for each type.namespace in types; type may be omitted\n\t\t\ttypes = (types || \"\").match(rnothtmlwhite) || [\"\"];\n\t\t\tt = types.length;\n\t\t\twhile (t--) {\n\t\t\t\ttmp = rtypenamespace.exec(types[t]) || [];\n\t\t\t\ttype = origType = tmp[1];\n\t\t\t\tnamespaces = (tmp[2] || \"\").split(\".\").sort();\n\n\t\t\t\t// Unbind all events (on this namespace, if provided) for the element\n\t\t\t\tif (!type) {\n\t\t\t\t\tfor (type in events) {\n\t\t\t\t\t\tjQuery.event.remove(elem, type + types[t], handler, selector, true);\n\t\t\t\t\t}\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tspecial = jQuery.event.special[type] || {};\n\t\t\t\ttype = (selector ? special.delegateType : special.bindType) || type;\n\t\t\t\thandlers = events[type] || [];\n\t\t\t\ttmp = tmp[2] &&\n\t\t\t\t\tnew RegExp(\"(^|\\\\.)\" + namespaces.join(\"\\\\.(?:.*\\\\.|)\") + \"(\\\\.|$)\");\n\n\t\t\t\t// Remove matching events\n\t\t\t\torigCount = j = handlers.length;\n\t\t\t\twhile (j--) {\n\t\t\t\t\thandleObj = handlers[j];\n\n\t\t\t\t\tif ((mappedTypes || origType === handleObj.origType) &&\n\t\t\t\t\t\t(!handler || handler.guid === handleObj.guid) &&\n\t\t\t\t\t\t(!tmp || tmp.test(handleObj.namespace)) &&\n\t\t\t\t\t\t(!selector || selector === handleObj.selector ||\n\t\t\t\t\t\t\tselector === \"**\" && handleObj.selector)) {\n\t\t\t\t\t\thandlers.splice(j, 1);\n\n\t\t\t\t\t\tif (handleObj.selector) {\n\t\t\t\t\t\t\thandlers.delegateCount--;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (special.remove) {\n\t\t\t\t\t\t\tspecial.remove.call(elem, handleObj);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Remove generic event handler if we removed something and no more handlers exist\n\t\t\t\t// (avoids potential for endless recursion during removal of special event handlers)\n\t\t\t\tif (origCount && !handlers.length) {\n\t\t\t\t\tif (!special.teardown ||\n\t\t\t\t\t\tspecial.teardown.call(elem, namespaces, elemData.handle) === false) {\n\n\t\t\t\t\t\tjQuery.removeEvent(elem, type, elemData.handle);\n\t\t\t\t\t}\n\n\t\t\t\t\tdelete events[type];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove data and the expando if it's no longer used\n\t\t\tif (jQuery.isEmptyObject(events)) {\n\t\t\t\tdataPriv.remove(elem, \"handle events\");\n\t\t\t}\n\t\t},\n\n\t\tdispatch: function (nativeEvent) {\n\n\t\t\tvar i, j, ret, matched, handleObj, handlerQueue,\n\t\t\t\targs = new Array(arguments.length),\n\n\t\t\t\t// Make a writable jQuery.Event from the native event object\n\t\t\t\tevent = jQuery.event.fix(nativeEvent),\n\n\t\t\t\thandlers = (\n\t\t\t\t\tdataPriv.get(this, \"events\") || Object.create(null)\n\t\t\t\t)[event.type] || [],\n\t\t\t\tspecial = jQuery.event.special[event.type] || {};\n\n\t\t\t// Use the fix-ed jQuery.Event rather than the (read-only) native event\n\t\t\targs[0] = event;\n\n\t\t\tfor (i = 1; i < arguments.length; i++) {\n\t\t\t\targs[i] = arguments[i];\n\t\t\t}\n\n\t\t\tevent.delegateTarget = this;\n\n\t\t\t// Call the preDispatch hook for the mapped type, and let it bail if desired\n\t\t\tif (special.preDispatch && special.preDispatch.call(this, event) === false) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Determine handlers\n\t\t\thandlerQueue = jQuery.event.handlers.call(this, event, handlers);\n\n\t\t\t// Run delegates first; they may want to stop propagation beneath us\n\t\t\ti = 0;\n\t\t\twhile ((matched = handlerQueue[i++]) && !event.isPropagationStopped()) {\n\t\t\t\tevent.currentTarget = matched.elem;\n\n\t\t\t\tj = 0;\n\t\t\t\twhile ((handleObj = matched.handlers[j++]) &&\n\t\t\t\t\t!event.isImmediatePropagationStopped()) {\n\n\t\t\t\t\t// If the event is namespaced, then each handler is only invoked if it is\n\t\t\t\t\t// specially universal or its namespaces are a superset of the event's.\n\t\t\t\t\tif (!event.rnamespace || handleObj.namespace === false ||\n\t\t\t\t\t\tevent.rnamespace.test(handleObj.namespace)) {\n\n\t\t\t\t\t\tevent.handleObj = handleObj;\n\t\t\t\t\t\tevent.data = handleObj.data;\n\n\t\t\t\t\t\tret = ((jQuery.event.special[handleObj.origType] || {}).handle ||\n\t\t\t\t\t\t\thandleObj.handler).apply(matched.elem, args);\n\n\t\t\t\t\t\tif (ret !== undefined) {\n\t\t\t\t\t\t\tif ((event.result = ret) === false) {\n\t\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Call the postDispatch hook for the mapped type\n\t\t\tif (special.postDispatch) {\n\t\t\t\tspecial.postDispatch.call(this, event);\n\t\t\t}\n\n\t\t\treturn event.result;\n\t\t},\n\n\t\thandlers: function (event, handlers) {\n\t\t\tvar i, handleObj, sel, matchedHandlers, matchedSelectors,\n\t\t\t\thandlerQueue = [],\n\t\t\t\tdelegateCount = handlers.delegateCount,\n\t\t\t\tcur = event.target;\n\n\t\t\t// Find delegate handlers\n\t\t\tif (delegateCount &&\n\n\t\t\t\t// Support: IE <=9\n\t\t\t\t// Black-hole SVG <use> instance trees (trac-13180)\n\t\t\t\tcur.nodeType &&\n\n\t\t\t\t// Support: Firefox <=42\n\t\t\t\t// Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861)\n\t\t\t\t// https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click\n\t\t\t\t// Support: IE 11 only\n\t\t\t\t// ...but not arrow key \"clicks\" of radio inputs, which can have `button` -1 (gh-2343)\n\t\t\t\t!(event.type === \"click\" && event.button >= 1)) {\n\n\t\t\t\tfor (; cur !== this; cur = cur.parentNode || this) {\n\n\t\t\t\t\t// Don't check non-elements (trac-13208)\n\t\t\t\t\t// Don't process clicks on disabled elements (trac-6911, trac-8165, trac-11382, trac-11764)\n\t\t\t\t\tif (cur.nodeType === 1 && !(event.type === \"click\" && cur.disabled === true)) {\n\t\t\t\t\t\tmatchedHandlers = [];\n\t\t\t\t\t\tmatchedSelectors = {};\n\t\t\t\t\t\tfor (i = 0; i < delegateCount; i++) {\n\t\t\t\t\t\t\thandleObj = handlers[i];\n\n\t\t\t\t\t\t\t// Don't conflict with Object.prototype properties (trac-13203)\n\t\t\t\t\t\t\tsel = handleObj.selector + \" \";\n\n\t\t\t\t\t\t\tif (matchedSelectors[sel] === undefined) {\n\t\t\t\t\t\t\t\tmatchedSelectors[sel] = handleObj.needsContext ?\n\t\t\t\t\t\t\t\t\tjQuery(sel, this).index(cur) > -1 :\n\t\t\t\t\t\t\t\t\tjQuery.find(sel, this, null, [cur]).length;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (matchedSelectors[sel]) {\n\t\t\t\t\t\t\t\tmatchedHandlers.push(handleObj);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (matchedHandlers.length) {\n\t\t\t\t\t\t\thandlerQueue.push({ elem: cur, handlers: matchedHandlers });\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Add the remaining (directly-bound) handlers\n\t\t\tcur = this;\n\t\t\tif (delegateCount < handlers.length) {\n\t\t\t\thandlerQueue.push({ elem: cur, handlers: handlers.slice(delegateCount) });\n\t\t\t}\n\n\t\t\treturn handlerQueue;\n\t\t},\n\n\t\taddProp: function (name, hook) {\n\t\t\tObject.defineProperty(jQuery.Event.prototype, name, {\n\t\t\t\tenumerable: true,\n\t\t\t\tconfigurable: true,\n\n\t\t\t\tget: isFunction(hook) ?\n\t\t\t\t\tfunction () {\n\t\t\t\t\t\tif (this.originalEvent) {\n\t\t\t\t\t\t\treturn hook(this.originalEvent);\n\t\t\t\t\t\t}\n\t\t\t\t\t} :\n\t\t\t\t\tfunction () {\n\t\t\t\t\t\tif (this.originalEvent) {\n\t\t\t\t\t\t\treturn this.originalEvent[name];\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\n\t\t\t\tset: function (value) {\n\t\t\t\t\tObject.defineProperty(this, name, {\n\t\t\t\t\t\tenumerable: true,\n\t\t\t\t\t\tconfigurable: true,\n\t\t\t\t\t\twritable: true,\n\t\t\t\t\t\tvalue: value\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\tfix: function (originalEvent) {\n\t\t\treturn originalEvent[jQuery.expando] ?\n\t\t\t\toriginalEvent :\n\t\t\t\tnew jQuery.Event(originalEvent);\n\t\t},\n\n\t\tspecial: {\n\t\t\tload: {\n\n\t\t\t\t// Prevent triggered image.load events from bubbling to window.load\n\t\t\t\tnoBubble: true\n\t\t\t},\n\t\t\tclick: {\n\n\t\t\t\t// Utilize native event to ensure correct state for checkable inputs\n\t\t\t\tsetup: function (data) {\n\n\t\t\t\t\t// For mutual compressibility with _default, replace `this` access with a local var.\n\t\t\t\t\t// `|| data` is dead code meant only to preserve the variable through minification.\n\t\t\t\t\tvar el = this || data;\n\n\t\t\t\t\t// Claim the first handler\n\t\t\t\t\tif (rcheckableType.test(el.type) &&\n\t\t\t\t\t\tel.click && nodeName(el, \"input\")) {\n\n\t\t\t\t\t\t// dataPriv.set( el, \"click\", ... )\n\t\t\t\t\t\tleverageNative(el, \"click\", true);\n\t\t\t\t\t}\n\n\t\t\t\t\t// Return false to allow normal processing in the caller\n\t\t\t\t\treturn false;\n\t\t\t\t},\n\t\t\t\ttrigger: function (data) {\n\n\t\t\t\t\t// For mutual compressibility with _default, replace `this` access with a local var.\n\t\t\t\t\t// `|| data` is dead code meant only to preserve the variable through minification.\n\t\t\t\t\tvar el = this || data;\n\n\t\t\t\t\t// Force setup before triggering a click\n\t\t\t\t\tif (rcheckableType.test(el.type) &&\n\t\t\t\t\t\tel.click && nodeName(el, \"input\")) {\n\n\t\t\t\t\t\tleverageNative(el, \"click\");\n\t\t\t\t\t}\n\n\t\t\t\t\t// Return non-false to allow normal event-path propagation\n\t\t\t\t\treturn true;\n\t\t\t\t},\n\n\t\t\t\t// For cross-browser consistency, suppress native .click() on links\n\t\t\t\t// Also prevent it if we're currently inside a leveraged native-event stack\n\t\t\t\t_default: function (event) {\n\t\t\t\t\tvar target = event.target;\n\t\t\t\t\treturn rcheckableType.test(target.type) &&\n\t\t\t\t\t\ttarget.click && nodeName(target, \"input\") &&\n\t\t\t\t\t\tdataPriv.get(target, \"click\") ||\n\t\t\t\t\t\tnodeName(target, \"a\");\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tbeforeunload: {\n\t\t\t\tpostDispatch: function (event) {\n\n\t\t\t\t\t// Support: Firefox 20+\n\t\t\t\t\t// Firefox doesn't alert if the returnValue field is not set.\n\t\t\t\t\tif (event.result !== undefined && event.originalEvent) {\n\t\t\t\t\t\tevent.originalEvent.returnValue = event.result;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t// Ensure the presence of an event listener that handles manually-triggered\n\t// synthetic events by interrupting progress until reinvoked in response to\n\t// *native* events that it fires directly, ensuring that state changes have\n\t// already occurred before other listeners are invoked.\n\tfunction leverageNative(el, type, isSetup) {\n\n\t\t// Missing `isSetup` indicates a trigger call, which must force setup through jQuery.event.add\n\t\tif (!isSetup) {\n\t\t\tif (dataPriv.get(el, type) === undefined) {\n\t\t\t\tjQuery.event.add(el, type, returnTrue);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\t// Register the controller as a special universal handler for all event namespaces\n\t\tdataPriv.set(el, type, false);\n\t\tjQuery.event.add(el, type, {\n\t\t\tnamespace: false,\n\t\t\thandler: function (event) {\n\t\t\t\tvar result,\n\t\t\t\t\tsaved = dataPriv.get(this, type);\n\n\t\t\t\tif ((event.isTrigger & 1) && this[type]) {\n\n\t\t\t\t\t// Interrupt processing of the outer synthetic .trigger()ed event\n\t\t\t\t\tif (!saved) {\n\n\t\t\t\t\t\t// Store arguments for use when handling the inner native event\n\t\t\t\t\t\t// There will always be at least one argument (an event object), so this array\n\t\t\t\t\t\t// will not be confused with a leftover capture object.\n\t\t\t\t\t\tsaved = slice.call(arguments);\n\t\t\t\t\t\tdataPriv.set(this, type, saved);\n\n\t\t\t\t\t\t// Trigger the native event and capture its result\n\t\t\t\t\t\tthis[type]();\n\t\t\t\t\t\tresult = dataPriv.get(this, type);\n\t\t\t\t\t\tdataPriv.set(this, type, false);\n\n\t\t\t\t\t\tif (saved !== result) {\n\n\t\t\t\t\t\t\t// Cancel the outer synthetic event\n\t\t\t\t\t\t\tevent.stopImmediatePropagation();\n\t\t\t\t\t\t\tevent.preventDefault();\n\n\t\t\t\t\t\t\treturn result;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// If this is an inner synthetic event for an event with a bubbling surrogate\n\t\t\t\t\t\t// (focus or blur), assume that the surrogate already propagated from triggering\n\t\t\t\t\t\t// the native event and prevent that from happening again here.\n\t\t\t\t\t\t// This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the\n\t\t\t\t\t\t// bubbling surrogate propagates *after* the non-bubbling base), but that seems\n\t\t\t\t\t\t// less bad than duplication.\n\t\t\t\t\t} else if ((jQuery.event.special[type] || {}).delegateType) {\n\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t}\n\n\t\t\t\t\t// If this is a native event triggered above, everything is now in order\n\t\t\t\t\t// Fire an inner synthetic event with the original arguments\n\t\t\t\t} else if (saved) {\n\n\t\t\t\t\t// ...and capture the result\n\t\t\t\t\tdataPriv.set(this, type, jQuery.event.trigger(\n\t\t\t\t\t\tsaved[0],\n\t\t\t\t\t\tsaved.slice(1),\n\t\t\t\t\t\tthis\n\t\t\t\t\t));\n\n\t\t\t\t\t// Abort handling of the native event by all jQuery handlers while allowing\n\t\t\t\t\t// native handlers on the same element to run. On target, this is achieved\n\t\t\t\t\t// by stopping immediate propagation just on the jQuery event. However,\n\t\t\t\t\t// the native event is re-wrapped by a jQuery one on each level of the\n\t\t\t\t\t// propagation so the only way to stop it for jQuery is to stop it for\n\t\t\t\t\t// everyone via native `stopPropagation()`. This is not a problem for\n\t\t\t\t\t// focus/blur which don't bubble, but it does also stop click on checkboxes\n\t\t\t\t\t// and radios. We accept this limitation.\n\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\tevent.isImmediatePropagationStopped = returnTrue;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\tjQuery.removeEvent = function (elem, type, handle) {\n\n\t\t// This \"if\" is needed for plain objects\n\t\tif (elem.removeEventListener) {\n\t\t\telem.removeEventListener(type, handle);\n\t\t}\n\t};\n\n\tjQuery.Event = function (src, props) {\n\n\t\t// Allow instantiation without the 'new' keyword\n\t\tif (!(this instanceof jQuery.Event)) {\n\t\t\treturn new jQuery.Event(src, props);\n\t\t}\n\n\t\t// Event object\n\t\tif (src && src.type) {\n\t\t\tthis.originalEvent = src;\n\t\t\tthis.type = src.type;\n\n\t\t\t// Events bubbling up the document may have been marked as prevented\n\t\t\t// by a handler lower down the tree; reflect the correct value.\n\t\t\tthis.isDefaultPrevented = src.defaultPrevented ||\n\t\t\t\tsrc.defaultPrevented === undefined &&\n\n\t\t\t\t// Support: Android <=2.3 only\n\t\t\t\tsrc.returnValue === false ?\n\t\t\t\treturnTrue :\n\t\t\t\treturnFalse;\n\n\t\t\t// Create target properties\n\t\t\t// Support: Safari <=6 - 7 only\n\t\t\t// Target should not be a text node (trac-504, trac-13143)\n\t\t\tthis.target = (src.target && src.target.nodeType === 3) ?\n\t\t\t\tsrc.target.parentNode :\n\t\t\t\tsrc.target;\n\n\t\t\tthis.currentTarget = src.currentTarget;\n\t\t\tthis.relatedTarget = src.relatedTarget;\n\n\t\t\t// Event type\n\t\t} else {\n\t\t\tthis.type = src;\n\t\t}\n\n\t\t// Put explicitly provided properties onto the event object\n\t\tif (props) {\n\t\t\tjQuery.extend(this, props);\n\t\t}\n\n\t\t// Create a timestamp if incoming event doesn't have one\n\t\tthis.timeStamp = src && src.timeStamp || Date.now();\n\n\t\t// Mark it as fixed\n\t\tthis[jQuery.expando] = true;\n\t};\n\n\t// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding\n\t// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html\n\tjQuery.Event.prototype = {\n\t\tconstructor: jQuery.Event,\n\t\tisDefaultPrevented: returnFalse,\n\t\tisPropagationStopped: returnFalse,\n\t\tisImmediatePropagationStopped: returnFalse,\n\t\tisSimulated: false,\n\n\t\tpreventDefault: function () {\n\t\t\tvar e = this.originalEvent;\n\n\t\t\tthis.isDefaultPrevented = returnTrue;\n\n\t\t\tif (e && !this.isSimulated) {\n\t\t\t\te.preventDefault();\n\t\t\t}\n\t\t},\n\t\tstopPropagation: function () {\n\t\t\tvar e = this.originalEvent;\n\n\t\t\tthis.isPropagationStopped = returnTrue;\n\n\t\t\tif (e && !this.isSimulated) {\n\t\t\t\te.stopPropagation();\n\t\t\t}\n\t\t},\n\t\tstopImmediatePropagation: function () {\n\t\t\tvar e = this.originalEvent;\n\n\t\t\tthis.isImmediatePropagationStopped = returnTrue;\n\n\t\t\tif (e && !this.isSimulated) {\n\t\t\t\te.stopImmediatePropagation();\n\t\t\t}\n\n\t\t\tthis.stopPropagation();\n\t\t}\n\t};\n\n\t// Includes all common event props including KeyEvent and MouseEvent specific props\n\tjQuery.each({\n\t\taltKey: true,\n\t\tbubbles: true,\n\t\tcancelable: true,\n\t\tchangedTouches: true,\n\t\tctrlKey: true,\n\t\tdetail: true,\n\t\teventPhase: true,\n\t\tmetaKey: true,\n\t\tpageX: true,\n\t\tpageY: true,\n\t\tshiftKey: true,\n\t\tview: true,\n\t\t\"char\": true,\n\t\tcode: true,\n\t\tcharCode: true,\n\t\tkey: true,\n\t\tkeyCode: true,\n\t\tbutton: true,\n\t\tbuttons: true,\n\t\tclientX: true,\n\t\tclientY: true,\n\t\toffsetX: true,\n\t\toffsetY: true,\n\t\tpointerId: true,\n\t\tpointerType: true,\n\t\tscreenX: true,\n\t\tscreenY: true,\n\t\ttargetTouches: true,\n\t\ttoElement: true,\n\t\ttouches: true,\n\t\twhich: true\n\t}, jQuery.event.addProp);\n\n\tjQuery.each({ focus: \"focusin\", blur: \"focusout\" }, function (type, delegateType) {\n\n\t\tfunction focusMappedHandler(nativeEvent) {\n\t\t\tif (document.documentMode) {\n\n\t\t\t\t// Support: IE 11+\n\t\t\t\t// Attach a single focusin/focusout handler on the document while someone wants\n\t\t\t\t// focus/blur. This is because the former are synchronous in IE while the latter\n\t\t\t\t// are async. In other browsers, all those handlers are invoked synchronously.\n\n\t\t\t\t// `handle` from private data would already wrap the event, but we need\n\t\t\t\t// to change the `type` here.\n\t\t\t\tvar handle = dataPriv.get(this, \"handle\"),\n\t\t\t\t\tevent = jQuery.event.fix(nativeEvent);\n\t\t\t\tevent.type = nativeEvent.type === \"focusin\" ? \"focus\" : \"blur\";\n\t\t\t\tevent.isSimulated = true;\n\n\t\t\t\t// First, handle focusin/focusout\n\t\t\t\thandle(nativeEvent);\n\n\t\t\t\t// ...then, handle focus/blur\n\t\t\t\t//\n\t\t\t\t// focus/blur don't bubble while focusin/focusout do; simulate the former by only\n\t\t\t\t// invoking the handler at the lower level.\n\t\t\t\tif (event.target === event.currentTarget) {\n\n\t\t\t\t\t// The setup part calls `leverageNative`, which, in turn, calls\n\t\t\t\t\t// `jQuery.event.add`, so event handle will already have been set\n\t\t\t\t\t// by this point.\n\t\t\t\t\thandle(event);\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\t// For non-IE browsers, attach a single capturing handler on the document\n\t\t\t\t// while someone wants focusin/focusout.\n\t\t\t\tjQuery.event.simulate(delegateType, nativeEvent.target,\n\t\t\t\t\tjQuery.event.fix(nativeEvent));\n\t\t\t}\n\t\t}\n\n\t\tjQuery.event.special[type] = {\n\n\t\t\t// Utilize native event if possible so blur/focus sequence is correct\n\t\t\tsetup: function () {\n\n\t\t\t\tvar attaches;\n\n\t\t\t\t// Claim the first handler\n\t\t\t\t// dataPriv.set( this, \"focus\", ... )\n\t\t\t\t// dataPriv.set( this, \"blur\", ... )\n\t\t\t\tleverageNative(this, type, true);\n\n\t\t\t\tif (document.documentMode) {\n\n\t\t\t\t\t// Support: IE 9 - 11+\n\t\t\t\t\t// We use the same native handler for focusin & focus (and focusout & blur)\n\t\t\t\t\t// so we need to coordinate setup & teardown parts between those events.\n\t\t\t\t\t// Use `delegateType` as the key as `type` is already used by `leverageNative`.\n\t\t\t\t\tattaches = dataPriv.get(this, delegateType);\n\t\t\t\t\tif (!attaches) {\n\t\t\t\t\t\tthis.addEventListener(delegateType, focusMappedHandler);\n\t\t\t\t\t}\n\t\t\t\t\tdataPriv.set(this, delegateType, (attaches || 0) + 1);\n\t\t\t\t} else {\n\n\t\t\t\t\t// Return false to allow normal processing in the caller\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\t\t\ttrigger: function () {\n\n\t\t\t\t// Force setup before trigger\n\t\t\t\tleverageNative(this, type);\n\n\t\t\t\t// Return non-false to allow normal event-path propagation\n\t\t\t\treturn true;\n\t\t\t},\n\n\t\t\tteardown: function () {\n\t\t\t\tvar attaches;\n\n\t\t\t\tif (document.documentMode) {\n\t\t\t\t\tattaches = dataPriv.get(this, delegateType) - 1;\n\t\t\t\t\tif (!attaches) {\n\t\t\t\t\t\tthis.removeEventListener(delegateType, focusMappedHandler);\n\t\t\t\t\t\tdataPriv.remove(this, delegateType);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdataPriv.set(this, delegateType, attaches);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\n\t\t\t\t\t// Return false to indicate standard teardown should be applied\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// Suppress native focus or blur if we're currently inside\n\t\t\t// a leveraged native-event stack\n\t\t\t_default: function (event) {\n\t\t\t\treturn dataPriv.get(event.target, type);\n\t\t\t},\n\n\t\t\tdelegateType: delegateType\n\t\t};\n\n\t\t// Support: Firefox <=44\n\t\t// Firefox doesn't have focus(in | out) events\n\t\t// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787\n\t\t//\n\t\t// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1\n\t\t// focus(in | out) events fire after focus & blur events,\n\t\t// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order\n\t\t// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857\n\t\t//\n\t\t// Support: IE 9 - 11+\n\t\t// To preserve relative focusin/focus & focusout/blur event order guaranteed on the 3.x branch,\n\t\t// attach a single handler for both events in IE.\n\t\tjQuery.event.special[delegateType] = {\n\t\t\tsetup: function () {\n\n\t\t\t\t// Handle: regular nodes (via `this.ownerDocument`), window\n\t\t\t\t// (via `this.document`) & document (via `this`).\n\t\t\t\tvar doc = this.ownerDocument || this.document || this,\n\t\t\t\t\tdataHolder = document.documentMode ? this : doc,\n\t\t\t\t\tattaches = dataPriv.get(dataHolder, delegateType);\n\n\t\t\t\t// Support: IE 9 - 11+\n\t\t\t\t// We use the same native handler for focusin & focus (and focusout & blur)\n\t\t\t\t// so we need to coordinate setup & teardown parts between those events.\n\t\t\t\t// Use `delegateType` as the key as `type` is already used by `leverageNative`.\n\t\t\t\tif (!attaches) {\n\t\t\t\t\tif (document.documentMode) {\n\t\t\t\t\t\tthis.addEventListener(delegateType, focusMappedHandler);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdoc.addEventListener(type, focusMappedHandler, true);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tdataPriv.set(dataHolder, delegateType, (attaches || 0) + 1);\n\t\t\t},\n\t\t\tteardown: function () {\n\t\t\t\tvar doc = this.ownerDocument || this.document || this,\n\t\t\t\t\tdataHolder = document.documentMode ? this : doc,\n\t\t\t\t\tattaches = dataPriv.get(dataHolder, delegateType) - 1;\n\n\t\t\t\tif (!attaches) {\n\t\t\t\t\tif (document.documentMode) {\n\t\t\t\t\t\tthis.removeEventListener(delegateType, focusMappedHandler);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdoc.removeEventListener(type, focusMappedHandler, true);\n\t\t\t\t\t}\n\t\t\t\t\tdataPriv.remove(dataHolder, delegateType);\n\t\t\t\t} else {\n\t\t\t\t\tdataPriv.set(dataHolder, delegateType, attaches);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t});\n\n\t// Create mouseenter/leave events using mouseover/out and event-time checks\n\t// so that event delegation works in jQuery.\n\t// Do the same for pointerenter/pointerleave and pointerover/pointerout\n\t//\n\t// Support: Safari 7 only\n\t// Safari sends mouseenter too often; see:\n\t// https://bugs.chromium.org/p/chromium/issues/detail?id=470258\n\t// for the description of the bug (it existed in older Chrome versions as well).\n\tjQuery.each({\n\t\tmouseenter: \"mouseover\",\n\t\tmouseleave: \"mouseout\",\n\t\tpointerenter: \"pointerover\",\n\t\tpointerleave: \"pointerout\"\n\t}, function (orig, fix) {\n\t\tjQuery.event.special[orig] = {\n\t\t\tdelegateType: fix,\n\t\t\tbindType: fix,\n\n\t\t\thandle: function (event) {\n\t\t\t\tvar ret,\n\t\t\t\t\ttarget = this,\n\t\t\t\t\trelated = event.relatedTarget,\n\t\t\t\t\thandleObj = event.handleObj;\n\n\t\t\t\t// For mouseenter/leave call the handler if related is outside the target.\n\t\t\t\t// NB: No relatedTarget if the mouse left/entered the browser window\n\t\t\t\tif (!related || (related !== target && !jQuery.contains(target, related))) {\n\t\t\t\t\tevent.type = handleObj.origType;\n\t\t\t\t\tret = handleObj.handler.apply(this, arguments);\n\t\t\t\t\tevent.type = fix;\n\t\t\t\t}\n\t\t\t\treturn ret;\n\t\t\t}\n\t\t};\n\t});\n\n\tjQuery.fn.extend({\n\n\t\ton: function (types, selector, data, fn) {\n\t\t\treturn on(this, types, selector, data, fn);\n\t\t},\n\t\tone: function (types, selector, data, fn) {\n\t\t\treturn on(this, types, selector, data, fn, 1);\n\t\t},\n\t\toff: function (types, selector, fn) {\n\t\t\tvar handleObj, type;\n\t\t\tif (types && types.preventDefault && types.handleObj) {\n\n\t\t\t\t// ( event )  dispatched jQuery.Event\n\t\t\t\thandleObj = types.handleObj;\n\t\t\t\tjQuery(types.delegateTarget).off(\n\t\t\t\t\thandleObj.namespace ?\n\t\t\t\t\t\thandleObj.origType + \".\" + handleObj.namespace :\n\t\t\t\t\t\thandleObj.origType,\n\t\t\t\t\thandleObj.selector,\n\t\t\t\t\thandleObj.handler\n\t\t\t\t);\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\tif (typeof types === \"object\") {\n\n\t\t\t\t// ( types-object [, selector] )\n\t\t\t\tfor (type in types) {\n\t\t\t\t\tthis.off(type, selector, types[type]);\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\tif (selector === false || typeof selector === \"function\") {\n\n\t\t\t\t// ( types [, fn] )\n\t\t\t\tfn = selector;\n\t\t\t\tselector = undefined;\n\t\t\t}\n\t\t\tif (fn === false) {\n\t\t\t\tfn = returnFalse;\n\t\t\t}\n\t\t\treturn this.each(function () {\n\t\t\t\tjQuery.event.remove(this, types, fn, selector);\n\t\t\t});\n\t\t}\n\t});\n\n\n\tvar\n\n\t\t// Support: IE <=10 - 11, Edge 12 - 13 only\n\t\t// In IE/Edge using regex groups here causes severe slowdowns.\n\t\t// See https://connect.microsoft.com/IE/feedback/details/1736512/\n\t\trnoInnerhtml = /<script|<style|<link/i,\n\n\t\t// checked=\"checked\" or checked\n\t\trchecked = /checked\\s*(?:[^=]|=\\s*.checked.)/i,\n\n\t\trcleanScript = /^\\s*<!\\[CDATA\\[|\\]\\]>\\s*$/g;\n\n\t// Prefer a tbody over its parent table for containing new rows\n\tfunction manipulationTarget(elem, content) {\n\t\tif (nodeName(elem, \"table\") &&\n\t\t\tnodeName(content.nodeType !== 11 ? content : content.firstChild, \"tr\")) {\n\n\t\t\treturn jQuery(elem).children(\"tbody\")[0] || elem;\n\t\t}\n\n\t\treturn elem;\n\t}\n\n\t// Replace/restore the type attribute of script elements for safe DOM manipulation\n\tfunction disableScript(elem) {\n\t\telem.type = (elem.getAttribute(\"type\") !== null) + \"/\" + elem.type;\n\t\treturn elem;\n\t}\n\tfunction restoreScript(elem) {\n\t\tif ((elem.type || \"\").slice(0, 5) === \"true/\") {\n\t\t\telem.type = elem.type.slice(5);\n\t\t} else {\n\t\t\telem.removeAttribute(\"type\");\n\t\t}\n\n\t\treturn elem;\n\t}\n\n\tfunction cloneCopyEvent(src, dest) {\n\t\tvar i, l, type, pdataOld, udataOld, udataCur, events;\n\n\t\tif (dest.nodeType !== 1) {\n\t\t\treturn;\n\t\t}\n\n\t\t// 1. Copy private data: events, handlers, etc.\n\t\tif (dataPriv.hasData(src)) {\n\t\t\tpdataOld = dataPriv.get(src);\n\t\t\tevents = pdataOld.events;\n\n\t\t\tif (events) {\n\t\t\t\tdataPriv.remove(dest, \"handle events\");\n\n\t\t\t\tfor (type in events) {\n\t\t\t\t\tfor (i = 0, l = events[type].length; i < l; i++) {\n\t\t\t\t\t\tjQuery.event.add(dest, type, events[type][i]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// 2. Copy user data\n\t\tif (dataUser.hasData(src)) {\n\t\t\tudataOld = dataUser.access(src);\n\t\t\tudataCur = jQuery.extend({}, udataOld);\n\n\t\t\tdataUser.set(dest, udataCur);\n\t\t}\n\t}\n\n\t// Fix IE bugs, see support tests\n\tfunction fixInput(src, dest) {\n\t\tvar nodeName = dest.nodeName.toLowerCase();\n\n\t\t// Fails to persist the checked state of a cloned checkbox or radio button.\n\t\tif (nodeName === \"input\" && rcheckableType.test(src.type)) {\n\t\t\tdest.checked = src.checked;\n\n\t\t\t// Fails to return the selected option to the default selected state when cloning options\n\t\t} else if (nodeName === \"input\" || nodeName === \"textarea\") {\n\t\t\tdest.defaultValue = src.defaultValue;\n\t\t}\n\t}\n\n\tfunction domManip(collection, args, callback, ignored) {\n\n\t\t// Flatten any nested arrays\n\t\targs = flat(args);\n\n\t\tvar fragment, first, scripts, hasScripts, node, doc,\n\t\t\ti = 0,\n\t\t\tl = collection.length,\n\t\t\tiNoClone = l - 1,\n\t\t\tvalue = args[0],\n\t\t\tvalueIsFunction = isFunction(value);\n\n\t\t// We can't cloneNode fragments that contain checked, in WebKit\n\t\tif (valueIsFunction ||\n\t\t\t(l > 1 && typeof value === \"string\" &&\n\t\t\t\t!support.checkClone && rchecked.test(value))) {\n\t\t\treturn collection.each(function (index) {\n\t\t\t\tvar self = collection.eq(index);\n\t\t\t\tif (valueIsFunction) {\n\t\t\t\t\targs[0] = value.call(this, index, self.html());\n\t\t\t\t}\n\t\t\t\tdomManip(self, args, callback, ignored);\n\t\t\t});\n\t\t}\n\n\t\tif (l) {\n\t\t\tfragment = buildFragment(args, collection[0].ownerDocument, false, collection, ignored);\n\t\t\tfirst = fragment.firstChild;\n\n\t\t\tif (fragment.childNodes.length === 1) {\n\t\t\t\tfragment = first;\n\t\t\t}\n\n\t\t\t// Require either new content or an interest in ignored elements to invoke the callback\n\t\t\tif (first || ignored) {\n\t\t\t\tscripts = jQuery.map(getAll(fragment, \"script\"), disableScript);\n\t\t\t\thasScripts = scripts.length;\n\n\t\t\t\t// Use the original fragment for the last item\n\t\t\t\t// instead of the first because it can end up\n\t\t\t\t// being emptied incorrectly in certain situations (trac-8070).\n\t\t\t\tfor (; i < l; i++) {\n\t\t\t\t\tnode = fragment;\n\n\t\t\t\t\tif (i !== iNoClone) {\n\t\t\t\t\t\tnode = jQuery.clone(node, true, true);\n\n\t\t\t\t\t\t// Keep references to cloned scripts for later restoration\n\t\t\t\t\t\tif (hasScripts) {\n\n\t\t\t\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\t\t\t\tjQuery.merge(scripts, getAll(node, \"script\"));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tcallback.call(collection[i], node, i);\n\t\t\t\t}\n\n\t\t\t\tif (hasScripts) {\n\t\t\t\t\tdoc = scripts[scripts.length - 1].ownerDocument;\n\n\t\t\t\t\t// Reenable scripts\n\t\t\t\t\tjQuery.map(scripts, restoreScript);\n\n\t\t\t\t\t// Evaluate executable scripts on first document insertion\n\t\t\t\t\tfor (i = 0; i < hasScripts; i++) {\n\t\t\t\t\t\tnode = scripts[i];\n\t\t\t\t\t\tif (rscriptType.test(node.type || \"\") &&\n\t\t\t\t\t\t\t!dataPriv.access(node, \"globalEval\") &&\n\t\t\t\t\t\t\tjQuery.contains(doc, node)) {\n\n\t\t\t\t\t\t\tif (node.src && (node.type || \"\").toLowerCase() !== \"module\") {\n\n\t\t\t\t\t\t\t\t// Optional AJAX dependency, but won't run scripts if not present\n\t\t\t\t\t\t\t\tif (jQuery._evalUrl && !node.noModule) {\n\t\t\t\t\t\t\t\t\tjQuery._evalUrl(node.src, {\n\t\t\t\t\t\t\t\t\t\tnonce: node.nonce || node.getAttribute(\"nonce\")\n\t\t\t\t\t\t\t\t\t}, doc);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t// Unwrap a CDATA section containing script contents. This shouldn't be\n\t\t\t\t\t\t\t\t// needed as in XML documents they're already not visible when\n\t\t\t\t\t\t\t\t// inspecting element contents and in HTML documents they have no\n\t\t\t\t\t\t\t\t// meaning but we're preserving that logic for backwards compatibility.\n\t\t\t\t\t\t\t\t// This will be removed completely in 4.0. See gh-4904.\n\t\t\t\t\t\t\t\tDOMEval(node.textContent.replace(rcleanScript, \"\"), node, doc);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn collection;\n\t}\n\n\tfunction remove(elem, selector, keepData) {\n\t\tvar node,\n\t\t\tnodes = selector ? jQuery.filter(selector, elem) : elem,\n\t\t\ti = 0;\n\n\t\tfor (; (node = nodes[i]) != null; i++) {\n\t\t\tif (!keepData && node.nodeType === 1) {\n\t\t\t\tjQuery.cleanData(getAll(node));\n\t\t\t}\n\n\t\t\tif (node.parentNode) {\n\t\t\t\tif (keepData && isAttached(node)) {\n\t\t\t\t\tsetGlobalEval(getAll(node, \"script\"));\n\t\t\t\t}\n\t\t\t\tnode.parentNode.removeChild(node);\n\t\t\t}\n\t\t}\n\n\t\treturn elem;\n\t}\n\n\tjQuery.extend({\n\t\thtmlPrefilter: function (html) {\n\t\t\treturn html;\n\t\t},\n\n\t\tclone: function (elem, dataAndEvents, deepDataAndEvents) {\n\t\t\tvar i, l, srcElements, destElements,\n\t\t\t\tclone = elem.cloneNode(true),\n\t\t\t\tinPage = isAttached(elem);\n\n\t\t\t// Fix IE cloning issues\n\t\t\tif (!support.noCloneChecked && (elem.nodeType === 1 || elem.nodeType === 11) &&\n\t\t\t\t!jQuery.isXMLDoc(elem)) {\n\n\t\t\t\t// We eschew jQuery#find here for performance reasons:\n\t\t\t\t// https://jsperf.com/getall-vs-sizzle/2\n\t\t\t\tdestElements = getAll(clone);\n\t\t\t\tsrcElements = getAll(elem);\n\n\t\t\t\tfor (i = 0, l = srcElements.length; i < l; i++) {\n\t\t\t\t\tfixInput(srcElements[i], destElements[i]);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Copy the events from the original to the clone\n\t\t\tif (dataAndEvents) {\n\t\t\t\tif (deepDataAndEvents) {\n\t\t\t\t\tsrcElements = srcElements || getAll(elem);\n\t\t\t\t\tdestElements = destElements || getAll(clone);\n\n\t\t\t\t\tfor (i = 0, l = srcElements.length; i < l; i++) {\n\t\t\t\t\t\tcloneCopyEvent(srcElements[i], destElements[i]);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tcloneCopyEvent(elem, clone);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Preserve script evaluation history\n\t\t\tdestElements = getAll(clone, \"script\");\n\t\t\tif (destElements.length > 0) {\n\t\t\t\tsetGlobalEval(destElements, !inPage && getAll(elem, \"script\"));\n\t\t\t}\n\n\t\t\t// Return the cloned set\n\t\t\treturn clone;\n\t\t},\n\n\t\tcleanData: function (elems) {\n\t\t\tvar data, elem, type,\n\t\t\t\tspecial = jQuery.event.special,\n\t\t\t\ti = 0;\n\n\t\t\tfor (; (elem = elems[i]) !== undefined; i++) {\n\t\t\t\tif (acceptData(elem)) {\n\t\t\t\t\tif ((data = elem[dataPriv.expando])) {\n\t\t\t\t\t\tif (data.events) {\n\t\t\t\t\t\t\tfor (type in data.events) {\n\t\t\t\t\t\t\t\tif (special[type]) {\n\t\t\t\t\t\t\t\t\tjQuery.event.remove(elem, type);\n\n\t\t\t\t\t\t\t\t\t// This is a shortcut to avoid jQuery.event.remove's overhead\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tjQuery.removeEvent(elem, type, data.handle);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\t\telem[dataPriv.expando] = undefined;\n\t\t\t\t\t}\n\t\t\t\t\tif (elem[dataUser.expando]) {\n\n\t\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\t\telem[dataUser.expando] = undefined;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\n\tjQuery.fn.extend({\n\t\tdetach: function (selector) {\n\t\t\treturn remove(this, selector, true);\n\t\t},\n\n\t\tremove: function (selector) {\n\t\t\treturn remove(this, selector);\n\t\t},\n\n\t\ttext: function (value) {\n\t\t\treturn access(this, function (value) {\n\t\t\t\treturn value === undefined ?\n\t\t\t\t\tjQuery.text(this) :\n\t\t\t\t\tthis.empty().each(function () {\n\t\t\t\t\t\tif (this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9) {\n\t\t\t\t\t\t\tthis.textContent = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t}, null, value, arguments.length);\n\t\t},\n\n\t\tappend: function () {\n\t\t\treturn domManip(this, arguments, function (elem) {\n\t\t\t\tif (this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9) {\n\t\t\t\t\tvar target = manipulationTarget(this, elem);\n\t\t\t\t\ttarget.appendChild(elem);\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\tprepend: function () {\n\t\t\treturn domManip(this, arguments, function (elem) {\n\t\t\t\tif (this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9) {\n\t\t\t\t\tvar target = manipulationTarget(this, elem);\n\t\t\t\t\ttarget.insertBefore(elem, target.firstChild);\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\tbefore: function () {\n\t\t\treturn domManip(this, arguments, function (elem) {\n\t\t\t\tif (this.parentNode) {\n\t\t\t\t\tthis.parentNode.insertBefore(elem, this);\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\tafter: function () {\n\t\t\treturn domManip(this, arguments, function (elem) {\n\t\t\t\tif (this.parentNode) {\n\t\t\t\t\tthis.parentNode.insertBefore(elem, this.nextSibling);\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\tempty: function () {\n\t\t\tvar elem,\n\t\t\t\ti = 0;\n\n\t\t\tfor (; (elem = this[i]) != null; i++) {\n\t\t\t\tif (elem.nodeType === 1) {\n\n\t\t\t\t\t// Prevent memory leaks\n\t\t\t\t\tjQuery.cleanData(getAll(elem, false));\n\n\t\t\t\t\t// Remove any remaining nodes\n\t\t\t\t\telem.textContent = \"\";\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn this;\n\t\t},\n\n\t\tclone: function (dataAndEvents, deepDataAndEvents) {\n\t\t\tdataAndEvents = dataAndEvents == null ? false : dataAndEvents;\n\t\t\tdeepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;\n\n\t\t\treturn this.map(function () {\n\t\t\t\treturn jQuery.clone(this, dataAndEvents, deepDataAndEvents);\n\t\t\t});\n\t\t},\n\n\t\thtml: function (value) {\n\t\t\treturn access(this, function (value) {\n\t\t\t\tvar elem = this[0] || {},\n\t\t\t\t\ti = 0,\n\t\t\t\t\tl = this.length;\n\n\t\t\t\tif (value === undefined && elem.nodeType === 1) {\n\t\t\t\t\treturn elem.innerHTML;\n\t\t\t\t}\n\n\t\t\t\t// See if we can take a shortcut and just use innerHTML\n\t\t\t\tif (typeof value === \"string\" && !rnoInnerhtml.test(value) &&\n\t\t\t\t\t!wrapMap[(rtagName.exec(value) || [\"\", \"\"])[1].toLowerCase()]) {\n\n\t\t\t\t\tvalue = jQuery.htmlPrefilter(value);\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tfor (; i < l; i++) {\n\t\t\t\t\t\t\telem = this[i] || {};\n\n\t\t\t\t\t\t\t// Remove element nodes and prevent memory leaks\n\t\t\t\t\t\t\tif (elem.nodeType === 1) {\n\t\t\t\t\t\t\t\tjQuery.cleanData(getAll(elem, false));\n\t\t\t\t\t\t\t\telem.innerHTML = value;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\telem = 0;\n\n\t\t\t\t\t\t// If using innerHTML throws an exception, use the fallback method\n\t\t\t\t\t} catch (e) { }\n\t\t\t\t}\n\n\t\t\t\tif (elem) {\n\t\t\t\t\tthis.empty().append(value);\n\t\t\t\t}\n\t\t\t}, null, value, arguments.length);\n\t\t},\n\n\t\treplaceWith: function () {\n\t\t\tvar ignored = [];\n\n\t\t\t// Make the changes, replacing each non-ignored context element with the new content\n\t\t\treturn domManip(this, arguments, function (elem) {\n\t\t\t\tvar parent = this.parentNode;\n\n\t\t\t\tif (jQuery.inArray(this, ignored) < 0) {\n\t\t\t\t\tjQuery.cleanData(getAll(this));\n\t\t\t\t\tif (parent) {\n\t\t\t\t\t\tparent.replaceChild(elem, this);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Force callback invocation\n\t\t\t}, ignored);\n\t\t}\n\t});\n\n\tjQuery.each({\n\t\tappendTo: \"append\",\n\t\tprependTo: \"prepend\",\n\t\tinsertBefore: \"before\",\n\t\tinsertAfter: \"after\",\n\t\treplaceAll: \"replaceWith\"\n\t}, function (name, original) {\n\t\tjQuery.fn[name] = function (selector) {\n\t\t\tvar elems,\n\t\t\t\tret = [],\n\t\t\t\tinsert = jQuery(selector),\n\t\t\t\tlast = insert.length - 1,\n\t\t\t\ti = 0;\n\n\t\t\tfor (; i <= last; i++) {\n\t\t\t\telems = i === last ? this : this.clone(true);\n\t\t\t\tjQuery(insert[i])[original](elems);\n\n\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t// .get() because push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\tpush.apply(ret, elems.get());\n\t\t\t}\n\n\t\t\treturn this.pushStack(ret);\n\t\t};\n\t});\n\tvar rnumnonpx = new RegExp(\"^(\" + pnum + \")(?!px)[a-z%]+$\", \"i\");\n\n\tvar rcustomProp = /^--/;\n\n\n\tvar getStyles = function (elem) {\n\n\t\t// Support: IE <=11 only, Firefox <=30 (trac-15098, trac-14150)\n\t\t// IE throws on elements created in popups\n\t\t// FF meanwhile throws on frame elements through \"defaultView.getComputedStyle\"\n\t\tvar view = elem.ownerDocument.defaultView;\n\n\t\tif (!view || !view.opener) {\n\t\t\tview = window;\n\t\t}\n\n\t\treturn view.getComputedStyle(elem);\n\t};\n\n\tvar swap = function (elem, options, callback) {\n\t\tvar ret, name,\n\t\t\told = {};\n\n\t\t// Remember the old values, and insert the new ones\n\t\tfor (name in options) {\n\t\t\told[name] = elem.style[name];\n\t\t\telem.style[name] = options[name];\n\t\t}\n\n\t\tret = callback.call(elem);\n\n\t\t// Revert the old values\n\t\tfor (name in options) {\n\t\t\telem.style[name] = old[name];\n\t\t}\n\n\t\treturn ret;\n\t};\n\n\n\tvar rboxStyle = new RegExp(cssExpand.join(\"|\"), \"i\");\n\n\n\n\t(function () {\n\n\t\t// Executing both pixelPosition & boxSizingReliable tests require only one layout\n\t\t// so they're executed at the same time to save the second computation.\n\t\tfunction computeStyleTests() {\n\n\t\t\t// This is a singleton, we need to execute it only once\n\t\t\tif (!div) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tcontainer.style.cssText = \"position:absolute;left:-11111px;width:60px;\" +\n\t\t\t\t\"margin-top:1px;padding:0;border:0\";\n\t\t\tdiv.style.cssText =\n\t\t\t\t\"position:relative;display:block;box-sizing:border-box;overflow:scroll;\" +\n\t\t\t\t\"margin:auto;border:1px;padding:1px;\" +\n\t\t\t\t\"width:60%;top:1%\";\n\t\t\tdocumentElement.appendChild(container).appendChild(div);\n\n\t\t\tvar divStyle = window.getComputedStyle(div);\n\t\t\tpixelPositionVal = divStyle.top !== \"1%\";\n\n\t\t\t// Support: Android 4.0 - 4.3 only, Firefox <=3 - 44\n\t\t\treliableMarginLeftVal = roundPixelMeasures(divStyle.marginLeft) === 12;\n\n\t\t\t// Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3\n\t\t\t// Some styles come back with percentage values, even though they shouldn't\n\t\t\tdiv.style.right = \"60%\";\n\t\t\tpixelBoxStylesVal = roundPixelMeasures(divStyle.right) === 36;\n\n\t\t\t// Support: IE 9 - 11 only\n\t\t\t// Detect misreporting of content dimensions for box-sizing:border-box elements\n\t\t\tboxSizingReliableVal = roundPixelMeasures(divStyle.width) === 36;\n\n\t\t\t// Support: IE 9 only\n\t\t\t// Detect overflow:scroll screwiness (gh-3699)\n\t\t\t// Support: Chrome <=64\n\t\t\t// Don't get tricked when zoom affects offsetWidth (gh-4029)\n\t\t\tdiv.style.position = \"absolute\";\n\t\t\tscrollboxSizeVal = roundPixelMeasures(div.offsetWidth / 3) === 12;\n\n\t\t\tdocumentElement.removeChild(container);\n\n\t\t\t// Nullify the div so it wouldn't be stored in the memory and\n\t\t\t// it will also be a sign that checks already performed\n\t\t\tdiv = null;\n\t\t}\n\n\t\tfunction roundPixelMeasures(measure) {\n\t\t\treturn Math.round(parseFloat(measure));\n\t\t}\n\n\t\tvar pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal,\n\t\t\treliableTrDimensionsVal, reliableMarginLeftVal,\n\t\t\tcontainer = document.createElement(\"div\"),\n\t\t\tdiv = document.createElement(\"div\");\n\n\t\t// Finish early in limited (non-browser) environments\n\t\tif (!div.style) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Support: IE <=9 - 11 only\n\t\t// Style of cloned element affects source element cloned (trac-8908)\n\t\tdiv.style.backgroundClip = \"content-box\";\n\t\tdiv.cloneNode(true).style.backgroundClip = \"\";\n\t\tsupport.clearCloneStyle = div.style.backgroundClip === \"content-box\";\n\n\t\tjQuery.extend(support, {\n\t\t\tboxSizingReliable: function () {\n\t\t\t\tcomputeStyleTests();\n\t\t\t\treturn boxSizingReliableVal;\n\t\t\t},\n\t\t\tpixelBoxStyles: function () {\n\t\t\t\tcomputeStyleTests();\n\t\t\t\treturn pixelBoxStylesVal;\n\t\t\t},\n\t\t\tpixelPosition: function () {\n\t\t\t\tcomputeStyleTests();\n\t\t\t\treturn pixelPositionVal;\n\t\t\t},\n\t\t\treliableMarginLeft: function () {\n\t\t\t\tcomputeStyleTests();\n\t\t\t\treturn reliableMarginLeftVal;\n\t\t\t},\n\t\t\tscrollboxSize: function () {\n\t\t\t\tcomputeStyleTests();\n\t\t\t\treturn scrollboxSizeVal;\n\t\t\t},\n\n\t\t\t// Support: IE 9 - 11+, Edge 15 - 18+\n\t\t\t// IE/Edge misreport `getComputedStyle` of table rows with width/height\n\t\t\t// set in CSS while `offset*` properties report correct values.\n\t\t\t// Behavior in IE 9 is more subtle than in newer versions & it passes\n\t\t\t// some versions of this test; make sure not to make it pass there!\n\t\t\t//\n\t\t\t// Support: Firefox 70+\n\t\t\t// Only Firefox includes border widths\n\t\t\t// in computed dimensions. (gh-4529)\n\t\t\treliableTrDimensions: function () {\n\t\t\t\tvar table, tr, trChild, trStyle;\n\t\t\t\tif (reliableTrDimensionsVal == null) {\n\t\t\t\t\ttable = document.createElement(\"table\");\n\t\t\t\t\ttr = document.createElement(\"tr\");\n\t\t\t\t\ttrChild = document.createElement(\"div\");\n\n\t\t\t\t\ttable.style.cssText = \"position:absolute;left:-11111px;border-collapse:separate\";\n\t\t\t\t\ttr.style.cssText = \"border:1px solid\";\n\n\t\t\t\t\t// Support: Chrome 86+\n\t\t\t\t\t// Height set through cssText does not get applied.\n\t\t\t\t\t// Computed height then comes back as 0.\n\t\t\t\t\ttr.style.height = \"1px\";\n\t\t\t\t\ttrChild.style.height = \"9px\";\n\n\t\t\t\t\t// Support: Android 8 Chrome 86+\n\t\t\t\t\t// In our bodyBackground.html iframe,\n\t\t\t\t\t// display for all div elements is set to \"inline\",\n\t\t\t\t\t// which causes a problem only in Android 8 Chrome 86.\n\t\t\t\t\t// Ensuring the div is display: block\n\t\t\t\t\t// gets around this issue.\n\t\t\t\t\ttrChild.style.display = \"block\";\n\n\t\t\t\t\tdocumentElement\n\t\t\t\t\t\t.appendChild(table)\n\t\t\t\t\t\t.appendChild(tr)\n\t\t\t\t\t\t.appendChild(trChild);\n\n\t\t\t\t\ttrStyle = window.getComputedStyle(tr);\n\t\t\t\t\treliableTrDimensionsVal = (parseInt(trStyle.height, 10) +\n\t\t\t\t\t\tparseInt(trStyle.borderTopWidth, 10) +\n\t\t\t\t\t\tparseInt(trStyle.borderBottomWidth, 10)) === tr.offsetHeight;\n\n\t\t\t\t\tdocumentElement.removeChild(table);\n\t\t\t\t}\n\t\t\t\treturn reliableTrDimensionsVal;\n\t\t\t}\n\t\t});\n\t})();\n\n\n\tfunction curCSS(elem, name, computed) {\n\t\tvar width, minWidth, maxWidth, ret,\n\t\t\tisCustomProp = rcustomProp.test(name),\n\n\t\t\t// Support: Firefox 51+\n\t\t\t// Retrieving style before computed somehow\n\t\t\t// fixes an issue with getting wrong values\n\t\t\t// on detached elements\n\t\t\tstyle = elem.style;\n\n\t\tcomputed = computed || getStyles(elem);\n\n\t\t// getPropertyValue is needed for:\n\t\t//   .css('filter') (IE 9 only, trac-12537)\n\t\t//   .css('--customProperty) (gh-3144)\n\t\tif (computed) {\n\n\t\t\t// Support: IE <=9 - 11+\n\t\t\t// IE only supports `\"float\"` in `getPropertyValue`; in computed styles\n\t\t\t// it's only available as `\"cssFloat\"`. We no longer modify properties\n\t\t\t// sent to `.css()` apart from camelCasing, so we need to check both.\n\t\t\t// Normally, this would create difference in behavior: if\n\t\t\t// `getPropertyValue` returns an empty string, the value returned\n\t\t\t// by `.css()` would be `undefined`. This is usually the case for\n\t\t\t// disconnected elements. However, in IE even disconnected elements\n\t\t\t// with no styles return `\"none\"` for `getPropertyValue( \"float\" )`\n\t\t\tret = computed.getPropertyValue(name) || computed[name];\n\n\t\t\tif (isCustomProp && ret) {\n\n\t\t\t\t// Support: Firefox 105+, Chrome <=105+\n\t\t\t\t// Spec requires trimming whitespace for custom properties (gh-4926).\n\t\t\t\t// Firefox only trims leading whitespace. Chrome just collapses\n\t\t\t\t// both leading & trailing whitespace to a single space.\n\t\t\t\t//\n\t\t\t\t// Fall back to `undefined` if empty string returned.\n\t\t\t\t// This collapses a missing definition with property defined\n\t\t\t\t// and set to an empty string but there's no standard API\n\t\t\t\t// allowing us to differentiate them without a performance penalty\n\t\t\t\t// and returning `undefined` aligns with older jQuery.\n\t\t\t\t//\n\t\t\t\t// rtrimCSS treats U+000D CARRIAGE RETURN and U+000C FORM FEED\n\t\t\t\t// as whitespace while CSS does not, but this is not a problem\n\t\t\t\t// because CSS preprocessing replaces them with U+000A LINE FEED\n\t\t\t\t// (which *is* CSS whitespace)\n\t\t\t\t// https://www.w3.org/TR/css-syntax-3/#input-preprocessing\n\t\t\t\tret = ret.replace(rtrimCSS, \"$1\") || undefined;\n\t\t\t}\n\n\t\t\tif (ret === \"\" && !isAttached(elem)) {\n\t\t\t\tret = jQuery.style(elem, name);\n\t\t\t}\n\n\t\t\t// A tribute to the \"awesome hack by Dean Edwards\"\n\t\t\t// Android Browser returns percentage for some values,\n\t\t\t// but width seems to be reliably pixels.\n\t\t\t// This is against the CSSOM draft spec:\n\t\t\t// https://drafts.csswg.org/cssom/#resolved-values\n\t\t\tif (!support.pixelBoxStyles() && rnumnonpx.test(ret) && rboxStyle.test(name)) {\n\n\t\t\t\t// Remember the original values\n\t\t\t\twidth = style.width;\n\t\t\t\tminWidth = style.minWidth;\n\t\t\t\tmaxWidth = style.maxWidth;\n\n\t\t\t\t// Put in the new values to get a computed value out\n\t\t\t\tstyle.minWidth = style.maxWidth = style.width = ret;\n\t\t\t\tret = computed.width;\n\n\t\t\t\t// Revert the changed values\n\t\t\t\tstyle.width = width;\n\t\t\t\tstyle.minWidth = minWidth;\n\t\t\t\tstyle.maxWidth = maxWidth;\n\t\t\t}\n\t\t}\n\n\t\treturn ret !== undefined ?\n\n\t\t\t// Support: IE <=9 - 11 only\n\t\t\t// IE returns zIndex value as an integer.\n\t\t\tret + \"\" :\n\t\t\tret;\n\t}\n\n\n\tfunction addGetHookIf(conditionFn, hookFn) {\n\n\t\t// Define the hook, we'll check on the first run if it's really needed.\n\t\treturn {\n\t\t\tget: function () {\n\t\t\t\tif (conditionFn()) {\n\n\t\t\t\t\t// Hook not needed (or it's not possible to use it due\n\t\t\t\t\t// to missing dependency), remove it.\n\t\t\t\t\tdelete this.get;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Hook needed; redefine it so that the support test is not executed again.\n\t\t\t\treturn (this.get = hookFn).apply(this, arguments);\n\t\t\t}\n\t\t};\n\t}\n\n\n\tvar cssPrefixes = [\"Webkit\", \"Moz\", \"ms\"],\n\t\temptyStyle = document.createElement(\"div\").style,\n\t\tvendorProps = {};\n\n\t// Return a vendor-prefixed property or undefined\n\tfunction vendorPropName(name) {\n\n\t\t// Check for vendor prefixed names\n\t\tvar capName = name[0].toUpperCase() + name.slice(1),\n\t\t\ti = cssPrefixes.length;\n\n\t\twhile (i--) {\n\t\t\tname = cssPrefixes[i] + capName;\n\t\t\tif (name in emptyStyle) {\n\t\t\t\treturn name;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return a potentially-mapped jQuery.cssProps or vendor prefixed property\n\tfunction finalPropName(name) {\n\t\tvar final = jQuery.cssProps[name] || vendorProps[name];\n\n\t\tif (final) {\n\t\t\treturn final;\n\t\t}\n\t\tif (name in emptyStyle) {\n\t\t\treturn name;\n\t\t}\n\t\treturn vendorProps[name] = vendorPropName(name) || name;\n\t}\n\n\n\tvar\n\n\t\t// Swappable if display is none or starts with table\n\t\t// except \"table\", \"table-cell\", or \"table-caption\"\n\t\t// See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display\n\t\trdisplayswap = /^(none|table(?!-c[ea]).+)/,\n\t\tcssShow = { position: \"absolute\", visibility: \"hidden\", display: \"block\" },\n\t\tcssNormalTransform = {\n\t\t\tletterSpacing: \"0\",\n\t\t\tfontWeight: \"400\"\n\t\t};\n\n\tfunction setPositiveNumber(_elem, value, subtract) {\n\n\t\t// Any relative (+/-) values have already been\n\t\t// normalized at this point\n\t\tvar matches = rcssNum.exec(value);\n\t\treturn matches ?\n\n\t\t\t// Guard against undefined \"subtract\", e.g., when used as in cssHooks\n\t\t\tMath.max(0, matches[2] - (subtract || 0)) + (matches[3] || \"px\") :\n\t\t\tvalue;\n\t}\n\n\tfunction boxModelAdjustment(elem, dimension, box, isBorderBox, styles, computedVal) {\n\t\tvar i = dimension === \"width\" ? 1 : 0,\n\t\t\textra = 0,\n\t\t\tdelta = 0,\n\t\t\tmarginDelta = 0;\n\n\t\t// Adjustment may not be necessary\n\t\tif (box === (isBorderBox ? \"border\" : \"content\")) {\n\t\t\treturn 0;\n\t\t}\n\n\t\tfor (; i < 4; i += 2) {\n\n\t\t\t// Both box models exclude margin\n\t\t\t// Count margin delta separately to only add it after scroll gutter adjustment.\n\t\t\t// This is needed to make negative margins work with `outerHeight( true )` (gh-3982).\n\t\t\tif (box === \"margin\") {\n\t\t\t\tmarginDelta += jQuery.css(elem, box + cssExpand[i], true, styles);\n\t\t\t}\n\n\t\t\t// If we get here with a content-box, we're seeking \"padding\" or \"border\" or \"margin\"\n\t\t\tif (!isBorderBox) {\n\n\t\t\t\t// Add padding\n\t\t\t\tdelta += jQuery.css(elem, \"padding\" + cssExpand[i], true, styles);\n\n\t\t\t\t// For \"border\" or \"margin\", add border\n\t\t\t\tif (box !== \"padding\") {\n\t\t\t\t\tdelta += jQuery.css(elem, \"border\" + cssExpand[i] + \"Width\", true, styles);\n\n\t\t\t\t\t// But still keep track of it otherwise\n\t\t\t\t} else {\n\t\t\t\t\textra += jQuery.css(elem, \"border\" + cssExpand[i] + \"Width\", true, styles);\n\t\t\t\t}\n\n\t\t\t\t// If we get here with a border-box (content + padding + border), we're seeking \"content\" or\n\t\t\t\t// \"padding\" or \"margin\"\n\t\t\t} else {\n\n\t\t\t\t// For \"content\", subtract padding\n\t\t\t\tif (box === \"content\") {\n\t\t\t\t\tdelta -= jQuery.css(elem, \"padding\" + cssExpand[i], true, styles);\n\t\t\t\t}\n\n\t\t\t\t// For \"content\" or \"padding\", subtract border\n\t\t\t\tif (box !== \"margin\") {\n\t\t\t\t\tdelta -= jQuery.css(elem, \"border\" + cssExpand[i] + \"Width\", true, styles);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Account for positive content-box scroll gutter when requested by providing computedVal\n\t\tif (!isBorderBox && computedVal >= 0) {\n\n\t\t\t// offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border\n\t\t\t// Assuming integer scroll gutter, subtract the rest and round down\n\t\t\tdelta += Math.max(0, Math.ceil(\n\t\t\t\telem[\"offset\" + dimension[0].toUpperCase() + dimension.slice(1)] -\n\t\t\t\tcomputedVal -\n\t\t\t\tdelta -\n\t\t\t\textra -\n\t\t\t\t0.5\n\n\t\t\t\t// If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter\n\t\t\t\t// Use an explicit zero to avoid NaN (gh-3964)\n\t\t\t)) || 0;\n\t\t}\n\n\t\treturn delta + marginDelta;\n\t}\n\n\tfunction getWidthOrHeight(elem, dimension, extra) {\n\n\t\t// Start with computed style\n\t\tvar styles = getStyles(elem),\n\n\t\t\t// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322).\n\t\t\t// Fake content-box until we know it's needed to know the true value.\n\t\t\tboxSizingNeeded = !support.boxSizingReliable() || extra,\n\t\t\tisBorderBox = boxSizingNeeded &&\n\t\t\t\tjQuery.css(elem, \"boxSizing\", false, styles) === \"border-box\",\n\t\t\tvalueIsBorderBox = isBorderBox,\n\n\t\t\tval = curCSS(elem, dimension, styles),\n\t\t\toffsetProp = \"offset\" + dimension[0].toUpperCase() + dimension.slice(1);\n\n\t\t// Support: Firefox <=54\n\t\t// Return a confounding non-pixel value or feign ignorance, as appropriate.\n\t\tif (rnumnonpx.test(val)) {\n\t\t\tif (!extra) {\n\t\t\t\treturn val;\n\t\t\t}\n\t\t\tval = \"auto\";\n\t\t}\n\n\n\t\t// Support: IE 9 - 11 only\n\t\t// Use offsetWidth/offsetHeight for when box sizing is unreliable.\n\t\t// In those cases, the computed value can be trusted to be border-box.\n\t\tif ((!support.boxSizingReliable() && isBorderBox ||\n\n\t\t\t// Support: IE 10 - 11+, Edge 15 - 18+\n\t\t\t// IE/Edge misreport `getComputedStyle` of table rows with width/height\n\t\t\t// set in CSS while `offset*` properties report correct values.\n\t\t\t// Interestingly, in some cases IE 9 doesn't suffer from this issue.\n\t\t\t!support.reliableTrDimensions() && nodeName(elem, \"tr\") ||\n\n\t\t\t// Fall back to offsetWidth/offsetHeight when value is \"auto\"\n\t\t\t// This happens for inline elements with no explicit setting (gh-3571)\n\t\t\tval === \"auto\" ||\n\n\t\t\t// Support: Android <=4.1 - 4.3 only\n\t\t\t// Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602)\n\t\t\t!parseFloat(val) && jQuery.css(elem, \"display\", false, styles) === \"inline\") &&\n\n\t\t\t// Make sure the element is visible & connected\n\t\t\telem.getClientRects().length) {\n\n\t\t\tisBorderBox = jQuery.css(elem, \"boxSizing\", false, styles) === \"border-box\";\n\n\t\t\t// Where available, offsetWidth/offsetHeight approximate border box dimensions.\n\t\t\t// Where not available (e.g., SVG), assume unreliable box-sizing and interpret the\n\t\t\t// retrieved value as a content box dimension.\n\t\t\tvalueIsBorderBox = offsetProp in elem;\n\t\t\tif (valueIsBorderBox) {\n\t\t\t\tval = elem[offsetProp];\n\t\t\t}\n\t\t}\n\n\t\t// Normalize \"\" and auto\n\t\tval = parseFloat(val) || 0;\n\n\t\t// Adjust for the element's box model\n\t\treturn (val +\n\t\t\tboxModelAdjustment(\n\t\t\t\telem,\n\t\t\t\tdimension,\n\t\t\t\textra || (isBorderBox ? \"border\" : \"content\"),\n\t\t\t\tvalueIsBorderBox,\n\t\t\t\tstyles,\n\n\t\t\t\t// Provide the current computed size to request scroll gutter calculation (gh-3589)\n\t\t\t\tval\n\t\t\t)\n\t\t) + \"px\";\n\t}\n\n\tjQuery.extend({\n\n\t\t// Add in style property hooks for overriding the default\n\t\t// behavior of getting and setting a style property\n\t\tcssHooks: {\n\t\t\topacity: {\n\t\t\t\tget: function (elem, computed) {\n\t\t\t\t\tif (computed) {\n\n\t\t\t\t\t\t// We should always get a number back from opacity\n\t\t\t\t\t\tvar ret = curCSS(elem, \"opacity\");\n\t\t\t\t\t\treturn ret === \"\" ? \"1\" : ret;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t// Don't automatically add \"px\" to these possibly-unitless properties\n\t\tcssNumber: {\n\t\t\tanimationIterationCount: true,\n\t\t\taspectRatio: true,\n\t\t\tborderImageSlice: true,\n\t\t\tcolumnCount: true,\n\t\t\tflexGrow: true,\n\t\t\tflexShrink: true,\n\t\t\tfontWeight: true,\n\t\t\tgridArea: true,\n\t\t\tgridColumn: true,\n\t\t\tgridColumnEnd: true,\n\t\t\tgridColumnStart: true,\n\t\t\tgridRow: true,\n\t\t\tgridRowEnd: true,\n\t\t\tgridRowStart: true,\n\t\t\tlineHeight: true,\n\t\t\topacity: true,\n\t\t\torder: true,\n\t\t\torphans: true,\n\t\t\tscale: true,\n\t\t\twidows: true,\n\t\t\tzIndex: true,\n\t\t\tzoom: true,\n\n\t\t\t// SVG-related\n\t\t\tfillOpacity: true,\n\t\t\tfloodOpacity: true,\n\t\t\tstopOpacity: true,\n\t\t\tstrokeMiterlimit: true,\n\t\t\tstrokeOpacity: true\n\t\t},\n\n\t\t// Add in properties whose names you wish to fix before\n\t\t// setting or getting the value\n\t\tcssProps: {},\n\n\t\t// Get and set the style property on a DOM Node\n\t\tstyle: function (elem, name, value, extra) {\n\n\t\t\t// Don't set styles on text and comment nodes\n\t\t\tif (!elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Make sure that we're working with the right name\n\t\t\tvar ret, type, hooks,\n\t\t\t\torigName = camelCase(name),\n\t\t\t\tisCustomProp = rcustomProp.test(name),\n\t\t\t\tstyle = elem.style;\n\n\t\t\t// Make sure that we're working with the right name. We don't\n\t\t\t// want to query the value if it is a CSS custom property\n\t\t\t// since they are user-defined.\n\t\t\tif (!isCustomProp) {\n\t\t\t\tname = finalPropName(origName);\n\t\t\t}\n\n\t\t\t// Gets hook for the prefixed version, then unprefixed version\n\t\t\thooks = jQuery.cssHooks[name] || jQuery.cssHooks[origName];\n\n\t\t\t// Check if we're setting a value\n\t\t\tif (value !== undefined) {\n\t\t\t\ttype = typeof value;\n\n\t\t\t\t// Convert \"+=\" or \"-=\" to relative numbers (trac-7345)\n\t\t\t\tif (type === \"string\" && (ret = rcssNum.exec(value)) && ret[1]) {\n\t\t\t\t\tvalue = adjustCSS(elem, name, ret);\n\n\t\t\t\t\t// Fixes bug trac-9237\n\t\t\t\t\ttype = \"number\";\n\t\t\t\t}\n\n\t\t\t\t// Make sure that null and NaN values aren't set (trac-7116)\n\t\t\t\tif (value == null || value !== value) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// If a number was passed in, add the unit (except for certain CSS properties)\n\t\t\t\t// The isCustomProp check can be removed in jQuery 4.0 when we only auto-append\n\t\t\t\t// \"px\" to a few hardcoded values.\n\t\t\t\tif (type === \"number\" && !isCustomProp) {\n\t\t\t\t\tvalue += ret && ret[3] || (jQuery.cssNumber[origName] ? \"\" : \"px\");\n\t\t\t\t}\n\n\t\t\t\t// background-* props affect original clone's values\n\t\t\t\tif (!support.clearCloneStyle && value === \"\" && name.indexOf(\"background\") === 0) {\n\t\t\t\t\tstyle[name] = \"inherit\";\n\t\t\t\t}\n\n\t\t\t\t// If a hook was provided, use that value, otherwise just set the specified value\n\t\t\t\tif (!hooks || !(\"set\" in hooks) ||\n\t\t\t\t\t(value = hooks.set(elem, value, extra)) !== undefined) {\n\n\t\t\t\t\tif (isCustomProp) {\n\t\t\t\t\t\tstyle.setProperty(name, value);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tstyle[name] = value;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\t// If a hook was provided get the non-computed value from there\n\t\t\t\tif (hooks && \"get\" in hooks &&\n\t\t\t\t\t(ret = hooks.get(elem, false, extra)) !== undefined) {\n\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\n\t\t\t\t// Otherwise just get the value from the style object\n\t\t\t\treturn style[name];\n\t\t\t}\n\t\t},\n\n\t\tcss: function (elem, name, extra, styles) {\n\t\t\tvar val, num, hooks,\n\t\t\t\torigName = camelCase(name),\n\t\t\t\tisCustomProp = rcustomProp.test(name);\n\n\t\t\t// Make sure that we're working with the right name. We don't\n\t\t\t// want to modify the value if it is a CSS custom property\n\t\t\t// since they are user-defined.\n\t\t\tif (!isCustomProp) {\n\t\t\t\tname = finalPropName(origName);\n\t\t\t}\n\n\t\t\t// Try prefixed name followed by the unprefixed name\n\t\t\thooks = jQuery.cssHooks[name] || jQuery.cssHooks[origName];\n\n\t\t\t// If a hook was provided get the computed value from there\n\t\t\tif (hooks && \"get\" in hooks) {\n\t\t\t\tval = hooks.get(elem, true, extra);\n\t\t\t}\n\n\t\t\t// Otherwise, if a way to get the computed value exists, use that\n\t\t\tif (val === undefined) {\n\t\t\t\tval = curCSS(elem, name, styles);\n\t\t\t}\n\n\t\t\t// Convert \"normal\" to computed value\n\t\t\tif (val === \"normal\" && name in cssNormalTransform) {\n\t\t\t\tval = cssNormalTransform[name];\n\t\t\t}\n\n\t\t\t// Make numeric if forced or a qualifier was provided and val looks numeric\n\t\t\tif (extra === \"\" || extra) {\n\t\t\t\tnum = parseFloat(val);\n\t\t\t\treturn extra === true || isFinite(num) ? num || 0 : val;\n\t\t\t}\n\n\t\t\treturn val;\n\t\t}\n\t});\n\n\tjQuery.each([\"height\", \"width\"], function (_i, dimension) {\n\t\tjQuery.cssHooks[dimension] = {\n\t\t\tget: function (elem, computed, extra) {\n\t\t\t\tif (computed) {\n\n\t\t\t\t\t// Certain elements can have dimension info if we invisibly show them\n\t\t\t\t\t// but it must have a current display style that would benefit\n\t\t\t\t\treturn rdisplayswap.test(jQuery.css(elem, \"display\")) &&\n\n\t\t\t\t\t\t// Support: Safari 8+\n\t\t\t\t\t\t// Table columns in Safari have non-zero offsetWidth & zero\n\t\t\t\t\t\t// getBoundingClientRect().width unless display is changed.\n\t\t\t\t\t\t// Support: IE <=11 only\n\t\t\t\t\t\t// Running getBoundingClientRect on a disconnected node\n\t\t\t\t\t\t// in IE throws an error.\n\t\t\t\t\t\t(!elem.getClientRects().length || !elem.getBoundingClientRect().width) ?\n\t\t\t\t\t\tswap(elem, cssShow, function () {\n\t\t\t\t\t\t\treturn getWidthOrHeight(elem, dimension, extra);\n\t\t\t\t\t\t}) :\n\t\t\t\t\t\tgetWidthOrHeight(elem, dimension, extra);\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tset: function (elem, value, extra) {\n\t\t\t\tvar matches,\n\t\t\t\t\tstyles = getStyles(elem),\n\n\t\t\t\t\t// Only read styles.position if the test has a chance to fail\n\t\t\t\t\t// to avoid forcing a reflow.\n\t\t\t\t\tscrollboxSizeBuggy = !support.scrollboxSize() &&\n\t\t\t\t\t\tstyles.position === \"absolute\",\n\n\t\t\t\t\t// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991)\n\t\t\t\t\tboxSizingNeeded = scrollboxSizeBuggy || extra,\n\t\t\t\t\tisBorderBox = boxSizingNeeded &&\n\t\t\t\t\t\tjQuery.css(elem, \"boxSizing\", false, styles) === \"border-box\",\n\t\t\t\t\tsubtract = extra ?\n\t\t\t\t\t\tboxModelAdjustment(\n\t\t\t\t\t\t\telem,\n\t\t\t\t\t\t\tdimension,\n\t\t\t\t\t\t\textra,\n\t\t\t\t\t\t\tisBorderBox,\n\t\t\t\t\t\t\tstyles\n\t\t\t\t\t\t) :\n\t\t\t\t\t\t0;\n\n\t\t\t\t// Account for unreliable border-box dimensions by comparing offset* to computed and\n\t\t\t\t// faking a content-box to get border and padding (gh-3699)\n\t\t\t\tif (isBorderBox && scrollboxSizeBuggy) {\n\t\t\t\t\tsubtract -= Math.ceil(\n\t\t\t\t\t\telem[\"offset\" + dimension[0].toUpperCase() + dimension.slice(1)] -\n\t\t\t\t\t\tparseFloat(styles[dimension]) -\n\t\t\t\t\t\tboxModelAdjustment(elem, dimension, \"border\", false, styles) -\n\t\t\t\t\t\t0.5\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\t// Convert to pixels if value adjustment is needed\n\t\t\t\tif (subtract && (matches = rcssNum.exec(value)) &&\n\t\t\t\t\t(matches[3] || \"px\") !== \"px\") {\n\n\t\t\t\t\telem.style[dimension] = value;\n\t\t\t\t\tvalue = jQuery.css(elem, dimension);\n\t\t\t\t}\n\n\t\t\t\treturn setPositiveNumber(elem, value, subtract);\n\t\t\t}\n\t\t};\n\t});\n\n\tjQuery.cssHooks.marginLeft = addGetHookIf(support.reliableMarginLeft,\n\t\tfunction (elem, computed) {\n\t\t\tif (computed) {\n\t\t\t\treturn (parseFloat(curCSS(elem, \"marginLeft\")) ||\n\t\t\t\t\telem.getBoundingClientRect().left -\n\t\t\t\t\tswap(elem, { marginLeft: 0 }, function () {\n\t\t\t\t\t\treturn elem.getBoundingClientRect().left;\n\t\t\t\t\t})\n\t\t\t\t) + \"px\";\n\t\t\t}\n\t\t}\n\t);\n\n\t// These hooks are used by animate to expand properties\n\tjQuery.each({\n\t\tmargin: \"\",\n\t\tpadding: \"\",\n\t\tborder: \"Width\"\n\t}, function (prefix, suffix) {\n\t\tjQuery.cssHooks[prefix + suffix] = {\n\t\t\texpand: function (value) {\n\t\t\t\tvar i = 0,\n\t\t\t\t\texpanded = {},\n\n\t\t\t\t\t// Assumes a single number if not a string\n\t\t\t\t\tparts = typeof value === \"string\" ? value.split(\" \") : [value];\n\n\t\t\t\tfor (; i < 4; i++) {\n\t\t\t\t\texpanded[prefix + cssExpand[i] + suffix] =\n\t\t\t\t\t\tparts[i] || parts[i - 2] || parts[0];\n\t\t\t\t}\n\n\t\t\t\treturn expanded;\n\t\t\t}\n\t\t};\n\n\t\tif (prefix !== \"margin\") {\n\t\t\tjQuery.cssHooks[prefix + suffix].set = setPositiveNumber;\n\t\t}\n\t});\n\n\tjQuery.fn.extend({\n\t\tcss: function (name, value) {\n\t\t\treturn access(this, function (elem, name, value) {\n\t\t\t\tvar styles, len,\n\t\t\t\t\tmap = {},\n\t\t\t\t\ti = 0;\n\n\t\t\t\tif (Array.isArray(name)) {\n\t\t\t\t\tstyles = getStyles(elem);\n\t\t\t\t\tlen = name.length;\n\n\t\t\t\t\tfor (; i < len; i++) {\n\t\t\t\t\t\tmap[name[i]] = jQuery.css(elem, name[i], false, styles);\n\t\t\t\t\t}\n\n\t\t\t\t\treturn map;\n\t\t\t\t}\n\n\t\t\t\treturn value !== undefined ?\n\t\t\t\t\tjQuery.style(elem, name, value) :\n\t\t\t\t\tjQuery.css(elem, name);\n\t\t\t}, name, value, arguments.length > 1);\n\t\t}\n\t});\n\n\n\tfunction Tween(elem, options, prop, end, easing) {\n\t\treturn new Tween.prototype.init(elem, options, prop, end, easing);\n\t}\n\tjQuery.Tween = Tween;\n\n\tTween.prototype = {\n\t\tconstructor: Tween,\n\t\tinit: function (elem, options, prop, end, easing, unit) {\n\t\t\tthis.elem = elem;\n\t\t\tthis.prop = prop;\n\t\t\tthis.easing = easing || jQuery.easing._default;\n\t\t\tthis.options = options;\n\t\t\tthis.start = this.now = this.cur();\n\t\t\tthis.end = end;\n\t\t\tthis.unit = unit || (jQuery.cssNumber[prop] ? \"\" : \"px\");\n\t\t},\n\t\tcur: function () {\n\t\t\tvar hooks = Tween.propHooks[this.prop];\n\n\t\t\treturn hooks && hooks.get ?\n\t\t\t\thooks.get(this) :\n\t\t\t\tTween.propHooks._default.get(this);\n\t\t},\n\t\trun: function (percent) {\n\t\t\tvar eased,\n\t\t\t\thooks = Tween.propHooks[this.prop];\n\n\t\t\tif (this.options.duration) {\n\t\t\t\tthis.pos = eased = jQuery.easing[this.easing](\n\t\t\t\t\tpercent, this.options.duration * percent, 0, 1, this.options.duration\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tthis.pos = eased = percent;\n\t\t\t}\n\t\t\tthis.now = (this.end - this.start) * eased + this.start;\n\n\t\t\tif (this.options.step) {\n\t\t\t\tthis.options.step.call(this.elem, this.now, this);\n\t\t\t}\n\n\t\t\tif (hooks && hooks.set) {\n\t\t\t\thooks.set(this);\n\t\t\t} else {\n\t\t\t\tTween.propHooks._default.set(this);\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t};\n\n\tTween.prototype.init.prototype = Tween.prototype;\n\n\tTween.propHooks = {\n\t\t_default: {\n\t\t\tget: function (tween) {\n\t\t\t\tvar result;\n\n\t\t\t\t// Use a property on the element directly when it is not a DOM element,\n\t\t\t\t// or when there is no matching style property that exists.\n\t\t\t\tif (tween.elem.nodeType !== 1 ||\n\t\t\t\t\ttween.elem[tween.prop] != null && tween.elem.style[tween.prop] == null) {\n\t\t\t\t\treturn tween.elem[tween.prop];\n\t\t\t\t}\n\n\t\t\t\t// Passing an empty string as a 3rd parameter to .css will automatically\n\t\t\t\t// attempt a parseFloat and fallback to a string if the parse fails.\n\t\t\t\t// Simple values such as \"10px\" are parsed to Float;\n\t\t\t\t// complex values such as \"rotate(1rad)\" are returned as-is.\n\t\t\t\tresult = jQuery.css(tween.elem, tween.prop, \"\");\n\n\t\t\t\t// Empty strings, null, undefined and \"auto\" are converted to 0.\n\t\t\t\treturn !result || result === \"auto\" ? 0 : result;\n\t\t\t},\n\t\t\tset: function (tween) {\n\n\t\t\t\t// Use step hook for back compat.\n\t\t\t\t// Use cssHook if its there.\n\t\t\t\t// Use .style if available and use plain properties where available.\n\t\t\t\tif (jQuery.fx.step[tween.prop]) {\n\t\t\t\t\tjQuery.fx.step[tween.prop](tween);\n\t\t\t\t} else if (tween.elem.nodeType === 1 && (\n\t\t\t\t\tjQuery.cssHooks[tween.prop] ||\n\t\t\t\t\ttween.elem.style[finalPropName(tween.prop)] != null)) {\n\t\t\t\t\tjQuery.style(tween.elem, tween.prop, tween.now + tween.unit);\n\t\t\t\t} else {\n\t\t\t\t\ttween.elem[tween.prop] = tween.now;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t// Support: IE <=9 only\n\t// Panic based approach to setting things on disconnected nodes\n\tTween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {\n\t\tset: function (tween) {\n\t\t\tif (tween.elem.nodeType && tween.elem.parentNode) {\n\t\t\t\ttween.elem[tween.prop] = tween.now;\n\t\t\t}\n\t\t}\n\t};\n\n\tjQuery.easing = {\n\t\tlinear: function (p) {\n\t\t\treturn p;\n\t\t},\n\t\tswing: function (p) {\n\t\t\treturn 0.5 - Math.cos(p * Math.PI) / 2;\n\t\t},\n\t\t_default: \"swing\"\n\t};\n\n\tjQuery.fx = Tween.prototype.init;\n\n\t// Back compat <1.8 extension point\n\tjQuery.fx.step = {};\n\n\n\n\n\tvar\n\t\tfxNow, inProgress,\n\t\trfxtypes = /^(?:toggle|show|hide)$/,\n\t\trrun = /queueHooks$/;\n\n\tfunction schedule() {\n\t\tif (inProgress) {\n\t\t\tif (document.hidden === false && window.requestAnimationFrame) {\n\t\t\t\twindow.requestAnimationFrame(schedule);\n\t\t\t} else {\n\t\t\t\twindow.setTimeout(schedule, jQuery.fx.interval);\n\t\t\t}\n\n\t\t\tjQuery.fx.tick();\n\t\t}\n\t}\n\n\t// Animations created synchronously will run synchronously\n\tfunction createFxNow() {\n\t\twindow.setTimeout(function () {\n\t\t\tfxNow = undefined;\n\t\t});\n\t\treturn (fxNow = Date.now());\n\t}\n\n\t// Generate parameters to create a standard animation\n\tfunction genFx(type, includeWidth) {\n\t\tvar which,\n\t\t\ti = 0,\n\t\t\tattrs = { height: type };\n\n\t\t// If we include width, step value is 1 to do all cssExpand values,\n\t\t// otherwise step value is 2 to skip over Left and Right\n\t\tincludeWidth = includeWidth ? 1 : 0;\n\t\tfor (; i < 4; i += 2 - includeWidth) {\n\t\t\twhich = cssExpand[i];\n\t\t\tattrs[\"margin\" + which] = attrs[\"padding\" + which] = type;\n\t\t}\n\n\t\tif (includeWidth) {\n\t\t\tattrs.opacity = attrs.width = type;\n\t\t}\n\n\t\treturn attrs;\n\t}\n\n\tfunction createTween(value, prop, animation) {\n\t\tvar tween,\n\t\t\tcollection = (Animation.tweeners[prop] || []).concat(Animation.tweeners[\"*\"]),\n\t\t\tindex = 0,\n\t\t\tlength = collection.length;\n\t\tfor (; index < length; index++) {\n\t\t\tif ((tween = collection[index].call(animation, prop, value))) {\n\n\t\t\t\t// We're done with this property\n\t\t\t\treturn tween;\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction defaultPrefilter(elem, props, opts) {\n\t\tvar prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display,\n\t\t\tisBox = \"width\" in props || \"height\" in props,\n\t\t\tanim = this,\n\t\t\torig = {},\n\t\t\tstyle = elem.style,\n\t\t\thidden = elem.nodeType && isHiddenWithinTree(elem),\n\t\t\tdataShow = dataPriv.get(elem, \"fxshow\");\n\n\t\t// Queue-skipping animations hijack the fx hooks\n\t\tif (!opts.queue) {\n\t\t\thooks = jQuery._queueHooks(elem, \"fx\");\n\t\t\tif (hooks.unqueued == null) {\n\t\t\t\thooks.unqueued = 0;\n\t\t\t\toldfire = hooks.empty.fire;\n\t\t\t\thooks.empty.fire = function () {\n\t\t\t\t\tif (!hooks.unqueued) {\n\t\t\t\t\t\toldfire();\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t\thooks.unqueued++;\n\n\t\t\tanim.always(function () {\n\n\t\t\t\t// Ensure the complete handler is called before this completes\n\t\t\t\tanim.always(function () {\n\t\t\t\t\thooks.unqueued--;\n\t\t\t\t\tif (!jQuery.queue(elem, \"fx\").length) {\n\t\t\t\t\t\thooks.empty.fire();\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\n\t\t// Detect show/hide animations\n\t\tfor (prop in props) {\n\t\t\tvalue = props[prop];\n\t\t\tif (rfxtypes.test(value)) {\n\t\t\t\tdelete props[prop];\n\t\t\t\ttoggle = toggle || value === \"toggle\";\n\t\t\t\tif (value === (hidden ? \"hide\" : \"show\")) {\n\n\t\t\t\t\t// Pretend to be hidden if this is a \"show\" and\n\t\t\t\t\t// there is still data from a stopped show/hide\n\t\t\t\t\tif (value === \"show\" && dataShow && dataShow[prop] !== undefined) {\n\t\t\t\t\t\thidden = true;\n\n\t\t\t\t\t\t// Ignore all other no-op show/hide data\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\torig[prop] = dataShow && dataShow[prop] || jQuery.style(elem, prop);\n\t\t\t}\n\t\t}\n\n\t\t// Bail out if this is a no-op like .hide().hide()\n\t\tpropTween = !jQuery.isEmptyObject(props);\n\t\tif (!propTween && jQuery.isEmptyObject(orig)) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Restrict \"overflow\" and \"display\" styles during box animations\n\t\tif (isBox && elem.nodeType === 1) {\n\n\t\t\t// Support: IE <=9 - 11, Edge 12 - 15\n\t\t\t// Record all 3 overflow attributes because IE does not infer the shorthand\n\t\t\t// from identically-valued overflowX and overflowY and Edge just mirrors\n\t\t\t// the overflowX value there.\n\t\t\topts.overflow = [style.overflow, style.overflowX, style.overflowY];\n\n\t\t\t// Identify a display type, preferring old show/hide data over the CSS cascade\n\t\t\trestoreDisplay = dataShow && dataShow.display;\n\t\t\tif (restoreDisplay == null) {\n\t\t\t\trestoreDisplay = dataPriv.get(elem, \"display\");\n\t\t\t}\n\t\t\tdisplay = jQuery.css(elem, \"display\");\n\t\t\tif (display === \"none\") {\n\t\t\t\tif (restoreDisplay) {\n\t\t\t\t\tdisplay = restoreDisplay;\n\t\t\t\t} else {\n\n\t\t\t\t\t// Get nonempty value(s) by temporarily forcing visibility\n\t\t\t\t\tshowHide([elem], true);\n\t\t\t\t\trestoreDisplay = elem.style.display || restoreDisplay;\n\t\t\t\t\tdisplay = jQuery.css(elem, \"display\");\n\t\t\t\t\tshowHide([elem]);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Animate inline elements as inline-block\n\t\t\tif (display === \"inline\" || display === \"inline-block\" && restoreDisplay != null) {\n\t\t\t\tif (jQuery.css(elem, \"float\") === \"none\") {\n\n\t\t\t\t\t// Restore the original display value at the end of pure show/hide animations\n\t\t\t\t\tif (!propTween) {\n\t\t\t\t\t\tanim.done(function () {\n\t\t\t\t\t\t\tstyle.display = restoreDisplay;\n\t\t\t\t\t\t});\n\t\t\t\t\t\tif (restoreDisplay == null) {\n\t\t\t\t\t\t\tdisplay = style.display;\n\t\t\t\t\t\t\trestoreDisplay = display === \"none\" ? \"\" : display;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tstyle.display = \"inline-block\";\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (opts.overflow) {\n\t\t\tstyle.overflow = \"hidden\";\n\t\t\tanim.always(function () {\n\t\t\t\tstyle.overflow = opts.overflow[0];\n\t\t\t\tstyle.overflowX = opts.overflow[1];\n\t\t\t\tstyle.overflowY = opts.overflow[2];\n\t\t\t});\n\t\t}\n\n\t\t// Implement show/hide animations\n\t\tpropTween = false;\n\t\tfor (prop in orig) {\n\n\t\t\t// General show/hide setup for this element animation\n\t\t\tif (!propTween) {\n\t\t\t\tif (dataShow) {\n\t\t\t\t\tif (\"hidden\" in dataShow) {\n\t\t\t\t\t\thidden = dataShow.hidden;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tdataShow = dataPriv.access(elem, \"fxshow\", { display: restoreDisplay });\n\t\t\t\t}\n\n\t\t\t\t// Store hidden/visible for toggle so `.stop().toggle()` \"reverses\"\n\t\t\t\tif (toggle) {\n\t\t\t\t\tdataShow.hidden = !hidden;\n\t\t\t\t}\n\n\t\t\t\t// Show elements before animating them\n\t\t\t\tif (hidden) {\n\t\t\t\t\tshowHide([elem], true);\n\t\t\t\t}\n\n\t\t\t\t/* eslint-disable no-loop-func */\n\n\t\t\t\tanim.done(function () {\n\n\t\t\t\t\t/* eslint-enable no-loop-func */\n\n\t\t\t\t\t// The final step of a \"hide\" animation is actually hiding the element\n\t\t\t\t\tif (!hidden) {\n\t\t\t\t\t\tshowHide([elem]);\n\t\t\t\t\t}\n\t\t\t\t\tdataPriv.remove(elem, \"fxshow\");\n\t\t\t\t\tfor (prop in orig) {\n\t\t\t\t\t\tjQuery.style(elem, prop, orig[prop]);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// Per-property setup\n\t\t\tpropTween = createTween(hidden ? dataShow[prop] : 0, prop, anim);\n\t\t\tif (!(prop in dataShow)) {\n\t\t\t\tdataShow[prop] = propTween.start;\n\t\t\t\tif (hidden) {\n\t\t\t\t\tpropTween.end = propTween.start;\n\t\t\t\t\tpropTween.start = 0;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction propFilter(props, specialEasing) {\n\t\tvar index, name, easing, value, hooks;\n\n\t\t// camelCase, specialEasing and expand cssHook pass\n\t\tfor (index in props) {\n\t\t\tname = camelCase(index);\n\t\t\teasing = specialEasing[name];\n\t\t\tvalue = props[index];\n\t\t\tif (Array.isArray(value)) {\n\t\t\t\teasing = value[1];\n\t\t\t\tvalue = props[index] = value[0];\n\t\t\t}\n\n\t\t\tif (index !== name) {\n\t\t\t\tprops[name] = value;\n\t\t\t\tdelete props[index];\n\t\t\t}\n\n\t\t\thooks = jQuery.cssHooks[name];\n\t\t\tif (hooks && \"expand\" in hooks) {\n\t\t\t\tvalue = hooks.expand(value);\n\t\t\t\tdelete props[name];\n\n\t\t\t\t// Not quite $.extend, this won't overwrite existing keys.\n\t\t\t\t// Reusing 'index' because we have the correct \"name\"\n\t\t\t\tfor (index in value) {\n\t\t\t\t\tif (!(index in props)) {\n\t\t\t\t\t\tprops[index] = value[index];\n\t\t\t\t\t\tspecialEasing[index] = easing;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tspecialEasing[name] = easing;\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction Animation(elem, properties, options) {\n\t\tvar result,\n\t\t\tstopped,\n\t\t\tindex = 0,\n\t\t\tlength = Animation.prefilters.length,\n\t\t\tdeferred = jQuery.Deferred().always(function () {\n\n\t\t\t\t// Don't match elem in the :animated selector\n\t\t\t\tdelete tick.elem;\n\t\t\t}),\n\t\t\ttick = function () {\n\t\t\t\tif (stopped) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tvar currentTime = fxNow || createFxNow(),\n\t\t\t\t\tremaining = Math.max(0, animation.startTime + animation.duration - currentTime),\n\n\t\t\t\t\t// Support: Android 2.3 only\n\t\t\t\t\t// Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (trac-12497)\n\t\t\t\t\ttemp = remaining / animation.duration || 0,\n\t\t\t\t\tpercent = 1 - temp,\n\t\t\t\t\tindex = 0,\n\t\t\t\t\tlength = animation.tweens.length;\n\n\t\t\t\tfor (; index < length; index++) {\n\t\t\t\t\tanimation.tweens[index].run(percent);\n\t\t\t\t}\n\n\t\t\t\tdeferred.notifyWith(elem, [animation, percent, remaining]);\n\n\t\t\t\t// If there's more to do, yield\n\t\t\t\tif (percent < 1 && length) {\n\t\t\t\t\treturn remaining;\n\t\t\t\t}\n\n\t\t\t\t// If this was an empty animation, synthesize a final progress notification\n\t\t\t\tif (!length) {\n\t\t\t\t\tdeferred.notifyWith(elem, [animation, 1, 0]);\n\t\t\t\t}\n\n\t\t\t\t// Resolve the animation and report its conclusion\n\t\t\t\tdeferred.resolveWith(elem, [animation]);\n\t\t\t\treturn false;\n\t\t\t},\n\t\t\tanimation = deferred.promise({\n\t\t\t\telem: elem,\n\t\t\t\tprops: jQuery.extend({}, properties),\n\t\t\t\topts: jQuery.extend(true, {\n\t\t\t\t\tspecialEasing: {},\n\t\t\t\t\teasing: jQuery.easing._default\n\t\t\t\t}, options),\n\t\t\t\toriginalProperties: properties,\n\t\t\t\toriginalOptions: options,\n\t\t\t\tstartTime: fxNow || createFxNow(),\n\t\t\t\tduration: options.duration,\n\t\t\t\ttweens: [],\n\t\t\t\tcreateTween: function (prop, end) {\n\t\t\t\t\tvar tween = jQuery.Tween(elem, animation.opts, prop, end,\n\t\t\t\t\t\tanimation.opts.specialEasing[prop] || animation.opts.easing);\n\t\t\t\t\tanimation.tweens.push(tween);\n\t\t\t\t\treturn tween;\n\t\t\t\t},\n\t\t\t\tstop: function (gotoEnd) {\n\t\t\t\t\tvar index = 0,\n\n\t\t\t\t\t\t// If we are going to the end, we want to run all the tweens\n\t\t\t\t\t\t// otherwise we skip this part\n\t\t\t\t\t\tlength = gotoEnd ? animation.tweens.length : 0;\n\t\t\t\t\tif (stopped) {\n\t\t\t\t\t\treturn this;\n\t\t\t\t\t}\n\t\t\t\t\tstopped = true;\n\t\t\t\t\tfor (; index < length; index++) {\n\t\t\t\t\t\tanimation.tweens[index].run(1);\n\t\t\t\t\t}\n\n\t\t\t\t\t// Resolve when we played the last frame; otherwise, reject\n\t\t\t\t\tif (gotoEnd) {\n\t\t\t\t\t\tdeferred.notifyWith(elem, [animation, 1, 0]);\n\t\t\t\t\t\tdeferred.resolveWith(elem, [animation, gotoEnd]);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdeferred.rejectWith(elem, [animation, gotoEnd]);\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t}),\n\t\t\tprops = animation.props;\n\n\t\tpropFilter(props, animation.opts.specialEasing);\n\n\t\tfor (; index < length; index++) {\n\t\t\tresult = Animation.prefilters[index].call(animation, elem, props, animation.opts);\n\t\t\tif (result) {\n\t\t\t\tif (isFunction(result.stop)) {\n\t\t\t\t\tjQuery._queueHooks(animation.elem, animation.opts.queue).stop =\n\t\t\t\t\t\tresult.stop.bind(result);\n\t\t\t\t}\n\t\t\t\treturn result;\n\t\t\t}\n\t\t}\n\n\t\tjQuery.map(props, createTween, animation);\n\n\t\tif (isFunction(animation.opts.start)) {\n\t\t\tanimation.opts.start.call(elem, animation);\n\t\t}\n\n\t\t// Attach callbacks from options\n\t\tanimation\n\t\t\t.progress(animation.opts.progress)\n\t\t\t.done(animation.opts.done, animation.opts.complete)\n\t\t\t.fail(animation.opts.fail)\n\t\t\t.always(animation.opts.always);\n\n\t\tjQuery.fx.timer(\n\t\t\tjQuery.extend(tick, {\n\t\t\t\telem: elem,\n\t\t\t\tanim: animation,\n\t\t\t\tqueue: animation.opts.queue\n\t\t\t})\n\t\t);\n\n\t\treturn animation;\n\t}\n\n\tjQuery.Animation = jQuery.extend(Animation, {\n\n\t\ttweeners: {\n\t\t\t\"*\": [function (prop, value) {\n\t\t\t\tvar tween = this.createTween(prop, value);\n\t\t\t\tadjustCSS(tween.elem, prop, rcssNum.exec(value), tween);\n\t\t\t\treturn tween;\n\t\t\t}]\n\t\t},\n\n\t\ttweener: function (props, callback) {\n\t\t\tif (isFunction(props)) {\n\t\t\t\tcallback = props;\n\t\t\t\tprops = [\"*\"];\n\t\t\t} else {\n\t\t\t\tprops = props.match(rnothtmlwhite);\n\t\t\t}\n\n\t\t\tvar prop,\n\t\t\t\tindex = 0,\n\t\t\t\tlength = props.length;\n\n\t\t\tfor (; index < length; index++) {\n\t\t\t\tprop = props[index];\n\t\t\t\tAnimation.tweeners[prop] = Animation.tweeners[prop] || [];\n\t\t\t\tAnimation.tweeners[prop].unshift(callback);\n\t\t\t}\n\t\t},\n\n\t\tprefilters: [defaultPrefilter],\n\n\t\tprefilter: function (callback, prepend) {\n\t\t\tif (prepend) {\n\t\t\t\tAnimation.prefilters.unshift(callback);\n\t\t\t} else {\n\t\t\t\tAnimation.prefilters.push(callback);\n\t\t\t}\n\t\t}\n\t});\n\n\tjQuery.speed = function (speed, easing, fn) {\n\t\tvar opt = speed && typeof speed === \"object\" ? jQuery.extend({}, speed) : {\n\t\t\tcomplete: fn || !fn && easing ||\n\t\t\t\tisFunction(speed) && speed,\n\t\t\tduration: speed,\n\t\t\teasing: fn && easing || easing && !isFunction(easing) && easing\n\t\t};\n\n\t\t// Go to the end state if fx are off\n\t\tif (jQuery.fx.off) {\n\t\t\topt.duration = 0;\n\n\t\t} else {\n\t\t\tif (typeof opt.duration !== \"number\") {\n\t\t\t\tif (opt.duration in jQuery.fx.speeds) {\n\t\t\t\t\topt.duration = jQuery.fx.speeds[opt.duration];\n\n\t\t\t\t} else {\n\t\t\t\t\topt.duration = jQuery.fx.speeds._default;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Normalize opt.queue - true/undefined/null -> \"fx\"\n\t\tif (opt.queue == null || opt.queue === true) {\n\t\t\topt.queue = \"fx\";\n\t\t}\n\n\t\t// Queueing\n\t\topt.old = opt.complete;\n\n\t\topt.complete = function () {\n\t\t\tif (isFunction(opt.old)) {\n\t\t\t\topt.old.call(this);\n\t\t\t}\n\n\t\t\tif (opt.queue) {\n\t\t\t\tjQuery.dequeue(this, opt.queue);\n\t\t\t}\n\t\t};\n\n\t\treturn opt;\n\t};\n\n\tjQuery.fn.extend({\n\t\tfadeTo: function (speed, to, easing, callback) {\n\n\t\t\t// Show any hidden elements after setting opacity to 0\n\t\t\treturn this.filter(isHiddenWithinTree).css(\"opacity\", 0).show()\n\n\t\t\t\t// Animate to the value specified\n\t\t\t\t.end().animate({ opacity: to }, speed, easing, callback);\n\t\t},\n\t\tanimate: function (prop, speed, easing, callback) {\n\t\t\tvar empty = jQuery.isEmptyObject(prop),\n\t\t\t\toptall = jQuery.speed(speed, easing, callback),\n\t\t\t\tdoAnimation = function () {\n\n\t\t\t\t\t// Operate on a copy of prop so per-property easing won't be lost\n\t\t\t\t\tvar anim = Animation(this, jQuery.extend({}, prop), optall);\n\n\t\t\t\t\t// Empty animations, or finishing resolves immediately\n\t\t\t\t\tif (empty || dataPriv.get(this, \"finish\")) {\n\t\t\t\t\t\tanim.stop(true);\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\tdoAnimation.finish = doAnimation;\n\n\t\t\treturn empty || optall.queue === false ?\n\t\t\t\tthis.each(doAnimation) :\n\t\t\t\tthis.queue(optall.queue, doAnimation);\n\t\t},\n\t\tstop: function (type, clearQueue, gotoEnd) {\n\t\t\tvar stopQueue = function (hooks) {\n\t\t\t\tvar stop = hooks.stop;\n\t\t\t\tdelete hooks.stop;\n\t\t\t\tstop(gotoEnd);\n\t\t\t};\n\n\t\t\tif (typeof type !== \"string\") {\n\t\t\t\tgotoEnd = clearQueue;\n\t\t\t\tclearQueue = type;\n\t\t\t\ttype = undefined;\n\t\t\t}\n\t\t\tif (clearQueue) {\n\t\t\t\tthis.queue(type || \"fx\", []);\n\t\t\t}\n\n\t\t\treturn this.each(function () {\n\t\t\t\tvar dequeue = true,\n\t\t\t\t\tindex = type != null && type + \"queueHooks\",\n\t\t\t\t\ttimers = jQuery.timers,\n\t\t\t\t\tdata = dataPriv.get(this);\n\n\t\t\t\tif (index) {\n\t\t\t\t\tif (data[index] && data[index].stop) {\n\t\t\t\t\t\tstopQueue(data[index]);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tfor (index in data) {\n\t\t\t\t\t\tif (data[index] && data[index].stop && rrun.test(index)) {\n\t\t\t\t\t\t\tstopQueue(data[index]);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tfor (index = timers.length; index--;) {\n\t\t\t\t\tif (timers[index].elem === this &&\n\t\t\t\t\t\t(type == null || timers[index].queue === type)) {\n\n\t\t\t\t\t\ttimers[index].anim.stop(gotoEnd);\n\t\t\t\t\t\tdequeue = false;\n\t\t\t\t\t\ttimers.splice(index, 1);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Start the next in the queue if the last step wasn't forced.\n\t\t\t\t// Timers currently will call their complete callbacks, which\n\t\t\t\t// will dequeue but only if they were gotoEnd.\n\t\t\t\tif (dequeue || !gotoEnd) {\n\t\t\t\t\tjQuery.dequeue(this, type);\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\t\tfinish: function (type) {\n\t\t\tif (type !== false) {\n\t\t\t\ttype = type || \"fx\";\n\t\t\t}\n\t\t\treturn this.each(function () {\n\t\t\t\tvar index,\n\t\t\t\t\tdata = dataPriv.get(this),\n\t\t\t\t\tqueue = data[type + \"queue\"],\n\t\t\t\t\thooks = data[type + \"queueHooks\"],\n\t\t\t\t\ttimers = jQuery.timers,\n\t\t\t\t\tlength = queue ? queue.length : 0;\n\n\t\t\t\t// Enable finishing flag on private data\n\t\t\t\tdata.finish = true;\n\n\t\t\t\t// Empty the queue first\n\t\t\t\tjQuery.queue(this, type, []);\n\n\t\t\t\tif (hooks && hooks.stop) {\n\t\t\t\t\thooks.stop.call(this, true);\n\t\t\t\t}\n\n\t\t\t\t// Look for any active animations, and finish them\n\t\t\t\tfor (index = timers.length; index--;) {\n\t\t\t\t\tif (timers[index].elem === this && timers[index].queue === type) {\n\t\t\t\t\t\ttimers[index].anim.stop(true);\n\t\t\t\t\t\ttimers.splice(index, 1);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Look for any animations in the old queue and finish them\n\t\t\t\tfor (index = 0; index < length; index++) {\n\t\t\t\t\tif (queue[index] && queue[index].finish) {\n\t\t\t\t\t\tqueue[index].finish.call(this);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Turn off finishing flag\n\t\t\t\tdelete data.finish;\n\t\t\t});\n\t\t}\n\t});\n\n\tjQuery.each([\"toggle\", \"show\", \"hide\"], function (_i, name) {\n\t\tvar cssFn = jQuery.fn[name];\n\t\tjQuery.fn[name] = function (speed, easing, callback) {\n\t\t\treturn speed == null || typeof speed === \"boolean\" ?\n\t\t\t\tcssFn.apply(this, arguments) :\n\t\t\t\tthis.animate(genFx(name, true), speed, easing, callback);\n\t\t};\n\t});\n\n\t// Generate shortcuts for custom animations\n\tjQuery.each({\n\t\tslideDown: genFx(\"show\"),\n\t\tslideUp: genFx(\"hide\"),\n\t\tslideToggle: genFx(\"toggle\"),\n\t\tfadeIn: { opacity: \"show\" },\n\t\tfadeOut: { opacity: \"hide\" },\n\t\tfadeToggle: { opacity: \"toggle\" }\n\t}, function (name, props) {\n\t\tjQuery.fn[name] = function (speed, easing, callback) {\n\t\t\treturn this.animate(props, speed, easing, callback);\n\t\t};\n\t});\n\n\tjQuery.timers = [];\n\tjQuery.fx.tick = function () {\n\t\tvar timer,\n\t\t\ti = 0,\n\t\t\ttimers = jQuery.timers;\n\n\t\tfxNow = Date.now();\n\n\t\tfor (; i < timers.length; i++) {\n\t\t\ttimer = timers[i];\n\n\t\t\t// Run the timer and safely remove it when done (allowing for external removal)\n\t\t\tif (!timer() && timers[i] === timer) {\n\t\t\t\ttimers.splice(i--, 1);\n\t\t\t}\n\t\t}\n\n\t\tif (!timers.length) {\n\t\t\tjQuery.fx.stop();\n\t\t}\n\t\tfxNow = undefined;\n\t};\n\n\tjQuery.fx.timer = function (timer) {\n\t\tjQuery.timers.push(timer);\n\t\tjQuery.fx.start();\n\t};\n\n\tjQuery.fx.interval = 13;\n\tjQuery.fx.start = function () {\n\t\tif (inProgress) {\n\t\t\treturn;\n\t\t}\n\n\t\tinProgress = true;\n\t\tschedule();\n\t};\n\n\tjQuery.fx.stop = function () {\n\t\tinProgress = null;\n\t};\n\n\tjQuery.fx.speeds = {\n\t\tslow: 600,\n\t\tfast: 200,\n\n\t\t// Default speed\n\t\t_default: 400\n\t};\n\n\n\t// Based off of the plugin by Clint Helfers, with permission.\n\tjQuery.fn.delay = function (time, type) {\n\t\ttime = jQuery.fx ? jQuery.fx.speeds[time] || time : time;\n\t\ttype = type || \"fx\";\n\n\t\treturn this.queue(type, function (next, hooks) {\n\t\t\tvar timeout = window.setTimeout(next, time);\n\t\t\thooks.stop = function () {\n\t\t\t\twindow.clearTimeout(timeout);\n\t\t\t};\n\t\t});\n\t};\n\n\n\t(function () {\n\t\tvar input = document.createElement(\"input\"),\n\t\t\tselect = document.createElement(\"select\"),\n\t\t\topt = select.appendChild(document.createElement(\"option\"));\n\n\t\tinput.type = \"checkbox\";\n\n\t\t// Support: Android <=4.3 only\n\t\t// Default value for a checkbox should be \"on\"\n\t\tsupport.checkOn = input.value !== \"\";\n\n\t\t// Support: IE <=11 only\n\t\t// Must access selectedIndex to make default options select\n\t\tsupport.optSelected = opt.selected;\n\n\t\t// Support: IE <=11 only\n\t\t// An input loses its value after becoming a radio\n\t\tinput = document.createElement(\"input\");\n\t\tinput.value = \"t\";\n\t\tinput.type = \"radio\";\n\t\tsupport.radioValue = input.value === \"t\";\n\t})();\n\n\n\tvar boolHook,\n\t\tattrHandle = jQuery.expr.attrHandle;\n\n\tjQuery.fn.extend({\n\t\tattr: function (name, value) {\n\t\t\treturn access(this, jQuery.attr, name, value, arguments.length > 1);\n\t\t},\n\n\t\tremoveAttr: function (name) {\n\t\t\treturn this.each(function () {\n\t\t\t\tjQuery.removeAttr(this, name);\n\t\t\t});\n\t\t}\n\t});\n\n\tjQuery.extend({\n\t\tattr: function (elem, name, value) {\n\t\t\tvar ret, hooks,\n\t\t\t\tnType = elem.nodeType;\n\n\t\t\t// Don't get/set attributes on text, comment and attribute nodes\n\t\t\tif (nType === 3 || nType === 8 || nType === 2) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Fallback to prop when attributes are not supported\n\t\t\tif (typeof elem.getAttribute === \"undefined\") {\n\t\t\t\treturn jQuery.prop(elem, name, value);\n\t\t\t}\n\n\t\t\t// Attribute hooks are determined by the lowercase version\n\t\t\t// Grab necessary hook if one is defined\n\t\t\tif (nType !== 1 || !jQuery.isXMLDoc(elem)) {\n\t\t\t\thooks = jQuery.attrHooks[name.toLowerCase()] ||\n\t\t\t\t\t(jQuery.expr.match.bool.test(name) ? boolHook : undefined);\n\t\t\t}\n\n\t\t\tif (value !== undefined) {\n\t\t\t\tif (value === null) {\n\t\t\t\t\tjQuery.removeAttr(elem, name);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (hooks && \"set\" in hooks &&\n\t\t\t\t\t(ret = hooks.set(elem, value, name)) !== undefined) {\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\n\t\t\t\telem.setAttribute(name, value + \"\");\n\t\t\t\treturn value;\n\t\t\t}\n\n\t\t\tif (hooks && \"get\" in hooks && (ret = hooks.get(elem, name)) !== null) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\tret = jQuery.find.attr(elem, name);\n\n\t\t\t// Non-existent attributes return null, we normalize to undefined\n\t\t\treturn ret == null ? undefined : ret;\n\t\t},\n\n\t\tattrHooks: {\n\t\t\ttype: {\n\t\t\t\tset: function (elem, value) {\n\t\t\t\t\tif (!support.radioValue && value === \"radio\" &&\n\t\t\t\t\t\tnodeName(elem, \"input\")) {\n\t\t\t\t\t\tvar val = elem.value;\n\t\t\t\t\t\telem.setAttribute(\"type\", value);\n\t\t\t\t\t\tif (val) {\n\t\t\t\t\t\t\telem.value = val;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn value;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tremoveAttr: function (elem, value) {\n\t\t\tvar name,\n\t\t\t\ti = 0,\n\n\t\t\t\t// Attribute names can contain non-HTML whitespace characters\n\t\t\t\t// https://html.spec.whatwg.org/multipage/syntax.html#attributes-2\n\t\t\t\tattrNames = value && value.match(rnothtmlwhite);\n\n\t\t\tif (attrNames && elem.nodeType === 1) {\n\t\t\t\twhile ((name = attrNames[i++])) {\n\t\t\t\t\telem.removeAttribute(name);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\n\t// Hooks for boolean attributes\n\tboolHook = {\n\t\tset: function (elem, value, name) {\n\t\t\tif (value === false) {\n\n\t\t\t\t// Remove boolean attributes when set to false\n\t\t\t\tjQuery.removeAttr(elem, name);\n\t\t\t} else {\n\t\t\t\telem.setAttribute(name, name);\n\t\t\t}\n\t\t\treturn name;\n\t\t}\n\t};\n\n\tjQuery.each(jQuery.expr.match.bool.source.match(/\\w+/g), function (_i, name) {\n\t\tvar getter = attrHandle[name] || jQuery.find.attr;\n\n\t\tattrHandle[name] = function (elem, name, isXML) {\n\t\t\tvar ret, handle,\n\t\t\t\tlowercaseName = name.toLowerCase();\n\n\t\t\tif (!isXML) {\n\n\t\t\t\t// Avoid an infinite loop by temporarily removing this function from the getter\n\t\t\t\thandle = attrHandle[lowercaseName];\n\t\t\t\tattrHandle[lowercaseName] = ret;\n\t\t\t\tret = getter(elem, name, isXML) != null ?\n\t\t\t\t\tlowercaseName :\n\t\t\t\t\tnull;\n\t\t\t\tattrHandle[lowercaseName] = handle;\n\t\t\t}\n\t\t\treturn ret;\n\t\t};\n\t});\n\n\n\n\n\tvar rfocusable = /^(?:input|select|textarea|button)$/i,\n\t\trclickable = /^(?:a|area)$/i;\n\n\tjQuery.fn.extend({\n\t\tprop: function (name, value) {\n\t\t\treturn access(this, jQuery.prop, name, value, arguments.length > 1);\n\t\t},\n\n\t\tremoveProp: function (name) {\n\t\t\treturn this.each(function () {\n\t\t\t\tdelete this[jQuery.propFix[name] || name];\n\t\t\t});\n\t\t}\n\t});\n\n\tjQuery.extend({\n\t\tprop: function (elem, name, value) {\n\t\t\tvar ret, hooks,\n\t\t\t\tnType = elem.nodeType;\n\n\t\t\t// Don't get/set properties on text, comment and attribute nodes\n\t\t\tif (nType === 3 || nType === 8 || nType === 2) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (nType !== 1 || !jQuery.isXMLDoc(elem)) {\n\n\t\t\t\t// Fix name and attach hooks\n\t\t\t\tname = jQuery.propFix[name] || name;\n\t\t\t\thooks = jQuery.propHooks[name];\n\t\t\t}\n\n\t\t\tif (value !== undefined) {\n\t\t\t\tif (hooks && \"set\" in hooks &&\n\t\t\t\t\t(ret = hooks.set(elem, value, name)) !== undefined) {\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\n\t\t\t\treturn (elem[name] = value);\n\t\t\t}\n\n\t\t\tif (hooks && \"get\" in hooks && (ret = hooks.get(elem, name)) !== null) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\treturn elem[name];\n\t\t},\n\n\t\tpropHooks: {\n\t\t\ttabIndex: {\n\t\t\t\tget: function (elem) {\n\n\t\t\t\t\t// Support: IE <=9 - 11 only\n\t\t\t\t\t// elem.tabIndex doesn't always return the\n\t\t\t\t\t// correct value when it hasn't been explicitly set\n\t\t\t\t\t// Use proper attribute retrieval (trac-12072)\n\t\t\t\t\tvar tabindex = jQuery.find.attr(elem, \"tabindex\");\n\n\t\t\t\t\tif (tabindex) {\n\t\t\t\t\t\treturn parseInt(tabindex, 10);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (\n\t\t\t\t\t\trfocusable.test(elem.nodeName) ||\n\t\t\t\t\t\trclickable.test(elem.nodeName) &&\n\t\t\t\t\t\telem.href\n\t\t\t\t\t) {\n\t\t\t\t\t\treturn 0;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn -1;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tpropFix: {\n\t\t\t\"for\": \"htmlFor\",\n\t\t\t\"class\": \"className\"\n\t\t}\n\t});\n\n\t// Support: IE <=11 only\n\t// Accessing the selectedIndex property\n\t// forces the browser to respect setting selected\n\t// on the option\n\t// The getter ensures a default option is selected\n\t// when in an optgroup\n\t// eslint rule \"no-unused-expressions\" is disabled for this code\n\t// since it considers such accessions noop\n\tif (!support.optSelected) {\n\t\tjQuery.propHooks.selected = {\n\t\t\tget: function (elem) {\n\n\t\t\t\t/* eslint no-unused-expressions: \"off\" */\n\n\t\t\t\tvar parent = elem.parentNode;\n\t\t\t\tif (parent && parent.parentNode) {\n\t\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t\t}\n\t\t\t\treturn null;\n\t\t\t},\n\t\t\tset: function (elem) {\n\n\t\t\t\t/* eslint no-unused-expressions: \"off\" */\n\n\t\t\t\tvar parent = elem.parentNode;\n\t\t\t\tif (parent) {\n\t\t\t\t\tparent.selectedIndex;\n\n\t\t\t\t\tif (parent.parentNode) {\n\t\t\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n\n\tjQuery.each([\n\t\t\"tabIndex\",\n\t\t\"readOnly\",\n\t\t\"maxLength\",\n\t\t\"cellSpacing\",\n\t\t\"cellPadding\",\n\t\t\"rowSpan\",\n\t\t\"colSpan\",\n\t\t\"useMap\",\n\t\t\"frameBorder\",\n\t\t\"contentEditable\"\n\t], function () {\n\t\tjQuery.propFix[this.toLowerCase()] = this;\n\t});\n\n\n\n\n\t// Strip and collapse whitespace according to HTML spec\n\t// https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace\n\tfunction stripAndCollapse(value) {\n\t\tvar tokens = value.match(rnothtmlwhite) || [];\n\t\treturn tokens.join(\" \");\n\t}\n\n\n\tfunction getClass(elem) {\n\t\treturn elem.getAttribute && elem.getAttribute(\"class\") || \"\";\n\t}\n\n\tfunction classesToArray(value) {\n\t\tif (Array.isArray(value)) {\n\t\t\treturn value;\n\t\t}\n\t\tif (typeof value === \"string\") {\n\t\t\treturn value.match(rnothtmlwhite) || [];\n\t\t}\n\t\treturn [];\n\t}\n\n\tjQuery.fn.extend({\n\t\taddClass: function (value) {\n\t\t\tvar classNames, cur, curValue, className, i, finalValue;\n\n\t\t\tif (isFunction(value)) {\n\t\t\t\treturn this.each(function (j) {\n\t\t\t\t\tjQuery(this).addClass(value.call(this, j, getClass(this)));\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tclassNames = classesToArray(value);\n\n\t\t\tif (classNames.length) {\n\t\t\t\treturn this.each(function () {\n\t\t\t\t\tcurValue = getClass(this);\n\t\t\t\t\tcur = this.nodeType === 1 && (\" \" + stripAndCollapse(curValue) + \" \");\n\n\t\t\t\t\tif (cur) {\n\t\t\t\t\t\tfor (i = 0; i < classNames.length; i++) {\n\t\t\t\t\t\t\tclassName = classNames[i];\n\t\t\t\t\t\t\tif (cur.indexOf(\" \" + className + \" \") < 0) {\n\t\t\t\t\t\t\t\tcur += className + \" \";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\t\tfinalValue = stripAndCollapse(cur);\n\t\t\t\t\t\tif (curValue !== finalValue) {\n\t\t\t\t\t\t\tthis.setAttribute(\"class\", finalValue);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn this;\n\t\t},\n\n\t\tremoveClass: function (value) {\n\t\t\tvar classNames, cur, curValue, className, i, finalValue;\n\n\t\t\tif (isFunction(value)) {\n\t\t\t\treturn this.each(function (j) {\n\t\t\t\t\tjQuery(this).removeClass(value.call(this, j, getClass(this)));\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (!arguments.length) {\n\t\t\t\treturn this.attr(\"class\", \"\");\n\t\t\t}\n\n\t\t\tclassNames = classesToArray(value);\n\n\t\t\tif (classNames.length) {\n\t\t\t\treturn this.each(function () {\n\t\t\t\t\tcurValue = getClass(this);\n\n\t\t\t\t\t// This expression is here for better compressibility (see addClass)\n\t\t\t\t\tcur = this.nodeType === 1 && (\" \" + stripAndCollapse(curValue) + \" \");\n\n\t\t\t\t\tif (cur) {\n\t\t\t\t\t\tfor (i = 0; i < classNames.length; i++) {\n\t\t\t\t\t\t\tclassName = classNames[i];\n\n\t\t\t\t\t\t\t// Remove *all* instances\n\t\t\t\t\t\t\twhile (cur.indexOf(\" \" + className + \" \") > -1) {\n\t\t\t\t\t\t\t\tcur = cur.replace(\" \" + className + \" \", \" \");\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\t\tfinalValue = stripAndCollapse(cur);\n\t\t\t\t\t\tif (curValue !== finalValue) {\n\t\t\t\t\t\t\tthis.setAttribute(\"class\", finalValue);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn this;\n\t\t},\n\n\t\ttoggleClass: function (value, stateVal) {\n\t\t\tvar classNames, className, i, self,\n\t\t\t\ttype = typeof value,\n\t\t\t\tisValidValue = type === \"string\" || Array.isArray(value);\n\n\t\t\tif (isFunction(value)) {\n\t\t\t\treturn this.each(function (i) {\n\t\t\t\t\tjQuery(this).toggleClass(\n\t\t\t\t\t\tvalue.call(this, i, getClass(this), stateVal),\n\t\t\t\t\t\tstateVal\n\t\t\t\t\t);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (typeof stateVal === \"boolean\" && isValidValue) {\n\t\t\t\treturn stateVal ? this.addClass(value) : this.removeClass(value);\n\t\t\t}\n\n\t\t\tclassNames = classesToArray(value);\n\n\t\t\treturn this.each(function () {\n\t\t\t\tif (isValidValue) {\n\n\t\t\t\t\t// Toggle individual class names\n\t\t\t\t\tself = jQuery(this);\n\n\t\t\t\t\tfor (i = 0; i < classNames.length; i++) {\n\t\t\t\t\t\tclassName = classNames[i];\n\n\t\t\t\t\t\t// Check each className given, space separated list\n\t\t\t\t\t\tif (self.hasClass(className)) {\n\t\t\t\t\t\t\tself.removeClass(className);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tself.addClass(className);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Toggle whole class name\n\t\t\t\t} else if (value === undefined || type === \"boolean\") {\n\t\t\t\t\tclassName = getClass(this);\n\t\t\t\t\tif (className) {\n\n\t\t\t\t\t\t// Store className if set\n\t\t\t\t\t\tdataPriv.set(this, \"__className__\", className);\n\t\t\t\t\t}\n\n\t\t\t\t\t// If the element has a class name or if we're passed `false`,\n\t\t\t\t\t// then remove the whole classname (if there was one, the above saved it).\n\t\t\t\t\t// Otherwise bring back whatever was previously saved (if anything),\n\t\t\t\t\t// falling back to the empty string if nothing was stored.\n\t\t\t\t\tif (this.setAttribute) {\n\t\t\t\t\t\tthis.setAttribute(\"class\",\n\t\t\t\t\t\t\tclassName || value === false ?\n\t\t\t\t\t\t\t\t\"\" :\n\t\t\t\t\t\t\t\tdataPriv.get(this, \"__className__\") || \"\"\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\thasClass: function (selector) {\n\t\t\tvar className, elem,\n\t\t\t\ti = 0;\n\n\t\t\tclassName = \" \" + selector + \" \";\n\t\t\twhile ((elem = this[i++])) {\n\t\t\t\tif (elem.nodeType === 1 &&\n\t\t\t\t\t(\" \" + stripAndCollapse(getClass(elem)) + \" \").indexOf(className) > -1) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn false;\n\t\t}\n\t});\n\n\n\n\n\tvar rreturn = /\\r/g;\n\n\tjQuery.fn.extend({\n\t\tval: function (value) {\n\t\t\tvar hooks, ret, valueIsFunction,\n\t\t\t\telem = this[0];\n\n\t\t\tif (!arguments.length) {\n\t\t\t\tif (elem) {\n\t\t\t\t\thooks = jQuery.valHooks[elem.type] ||\n\t\t\t\t\t\tjQuery.valHooks[elem.nodeName.toLowerCase()];\n\n\t\t\t\t\tif (hooks &&\n\t\t\t\t\t\t\"get\" in hooks &&\n\t\t\t\t\t\t(ret = hooks.get(elem, \"value\")) !== undefined\n\t\t\t\t\t) {\n\t\t\t\t\t\treturn ret;\n\t\t\t\t\t}\n\n\t\t\t\t\tret = elem.value;\n\n\t\t\t\t\t// Handle most common string cases\n\t\t\t\t\tif (typeof ret === \"string\") {\n\t\t\t\t\t\treturn ret.replace(rreturn, \"\");\n\t\t\t\t\t}\n\n\t\t\t\t\t// Handle cases where value is null/undef or number\n\t\t\t\t\treturn ret == null ? \"\" : ret;\n\t\t\t\t}\n\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvalueIsFunction = isFunction(value);\n\n\t\t\treturn this.each(function (i) {\n\t\t\t\tvar val;\n\n\t\t\t\tif (this.nodeType !== 1) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (valueIsFunction) {\n\t\t\t\t\tval = value.call(this, i, jQuery(this).val());\n\t\t\t\t} else {\n\t\t\t\t\tval = value;\n\t\t\t\t}\n\n\t\t\t\t// Treat null/undefined as \"\"; convert numbers to string\n\t\t\t\tif (val == null) {\n\t\t\t\t\tval = \"\";\n\n\t\t\t\t} else if (typeof val === \"number\") {\n\t\t\t\t\tval += \"\";\n\n\t\t\t\t} else if (Array.isArray(val)) {\n\t\t\t\t\tval = jQuery.map(val, function (value) {\n\t\t\t\t\t\treturn value == null ? \"\" : value + \"\";\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\thooks = jQuery.valHooks[this.type] || jQuery.valHooks[this.nodeName.toLowerCase()];\n\n\t\t\t\t// If set returns undefined, fall back to normal setting\n\t\t\t\tif (!hooks || !(\"set\" in hooks) || hooks.set(this, val, \"value\") === undefined) {\n\t\t\t\t\tthis.value = val;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t});\n\n\tjQuery.extend({\n\t\tvalHooks: {\n\t\t\toption: {\n\t\t\t\tget: function (elem) {\n\n\t\t\t\t\tvar val = jQuery.find.attr(elem, \"value\");\n\t\t\t\t\treturn val != null ?\n\t\t\t\t\t\tval :\n\n\t\t\t\t\t\t// Support: IE <=10 - 11 only\n\t\t\t\t\t\t// option.text throws exceptions (trac-14686, trac-14858)\n\t\t\t\t\t\t// Strip and collapse whitespace\n\t\t\t\t\t\t// https://html.spec.whatwg.org/#strip-and-collapse-whitespace\n\t\t\t\t\t\tstripAndCollapse(jQuery.text(elem));\n\t\t\t\t}\n\t\t\t},\n\t\t\tselect: {\n\t\t\t\tget: function (elem) {\n\t\t\t\t\tvar value, option, i,\n\t\t\t\t\t\toptions = elem.options,\n\t\t\t\t\t\tindex = elem.selectedIndex,\n\t\t\t\t\t\tone = elem.type === \"select-one\",\n\t\t\t\t\t\tvalues = one ? null : [],\n\t\t\t\t\t\tmax = one ? index + 1 : options.length;\n\n\t\t\t\t\tif (index < 0) {\n\t\t\t\t\t\ti = max;\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\ti = one ? index : 0;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Loop through all the selected options\n\t\t\t\t\tfor (; i < max; i++) {\n\t\t\t\t\t\toption = options[i];\n\n\t\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t\t// IE8-9 doesn't update selected after form reset (trac-2551)\n\t\t\t\t\t\tif ((option.selected || i === index) &&\n\n\t\t\t\t\t\t\t// Don't return options that are disabled or in a disabled optgroup\n\t\t\t\t\t\t\t!option.disabled &&\n\t\t\t\t\t\t\t(!option.parentNode.disabled ||\n\t\t\t\t\t\t\t\t!nodeName(option.parentNode, \"optgroup\"))) {\n\n\t\t\t\t\t\t\t// Get the specific value for the option\n\t\t\t\t\t\t\tvalue = jQuery(option).val();\n\n\t\t\t\t\t\t\t// We don't need an array for one selects\n\t\t\t\t\t\t\tif (one) {\n\t\t\t\t\t\t\t\treturn value;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Multi-Selects return an array\n\t\t\t\t\t\t\tvalues.push(value);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn values;\n\t\t\t\t},\n\n\t\t\t\tset: function (elem, value) {\n\t\t\t\t\tvar optionSet, option,\n\t\t\t\t\t\toptions = elem.options,\n\t\t\t\t\t\tvalues = jQuery.makeArray(value),\n\t\t\t\t\t\ti = options.length;\n\n\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\toption = options[i];\n\n\t\t\t\t\t\t/* eslint-disable no-cond-assign */\n\n\t\t\t\t\t\tif (option.selected =\n\t\t\t\t\t\t\tjQuery.inArray(jQuery.valHooks.option.get(option), values) > -1\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\toptionSet = true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t/* eslint-enable no-cond-assign */\n\t\t\t\t\t}\n\n\t\t\t\t\t// Force browsers to behave consistently when non-matching value is set\n\t\t\t\t\tif (!optionSet) {\n\t\t\t\t\t\telem.selectedIndex = -1;\n\t\t\t\t\t}\n\t\t\t\t\treturn values;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\n\t// Radios and checkboxes getter/setter\n\tjQuery.each([\"radio\", \"checkbox\"], function () {\n\t\tjQuery.valHooks[this] = {\n\t\t\tset: function (elem, value) {\n\t\t\t\tif (Array.isArray(value)) {\n\t\t\t\t\treturn (elem.checked = jQuery.inArray(jQuery(elem).val(), value) > -1);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\tif (!support.checkOn) {\n\t\t\tjQuery.valHooks[this].get = function (elem) {\n\t\t\t\treturn elem.getAttribute(\"value\") === null ? \"on\" : elem.value;\n\t\t\t};\n\t\t}\n\t});\n\n\n\n\n\t// Return jQuery for attributes-only inclusion\n\tvar location = window.location;\n\n\tvar nonce = { guid: Date.now() };\n\n\tvar rquery = (/\\?/);\n\n\n\n\t// Cross-browser xml parsing\n\tjQuery.parseXML = function (data) {\n\t\tvar xml, parserErrorElem;\n\t\tif (!data || typeof data !== \"string\") {\n\t\t\treturn null;\n\t\t}\n\n\t\t// Support: IE 9 - 11 only\n\t\t// IE throws on parseFromString with invalid input.\n\t\ttry {\n\t\t\txml = (new window.DOMParser()).parseFromString(data, \"text/xml\");\n\t\t} catch (e) { }\n\n\t\tparserErrorElem = xml && xml.getElementsByTagName(\"parsererror\")[0];\n\t\tif (!xml || parserErrorElem) {\n\t\t\tjQuery.error(\"Invalid XML: \" + (\n\t\t\t\tparserErrorElem ?\n\t\t\t\t\tjQuery.map(parserErrorElem.childNodes, function (el) {\n\t\t\t\t\t\treturn el.textContent;\n\t\t\t\t\t}).join(\"\\n\") :\n\t\t\t\t\tdata\n\t\t\t));\n\t\t}\n\t\treturn xml;\n\t};\n\n\n\tvar rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,\n\t\tstopPropagationCallback = function (e) {\n\t\t\te.stopPropagation();\n\t\t};\n\n\tjQuery.extend(jQuery.event, {\n\n\t\ttrigger: function (event, data, elem, onlyHandlers) {\n\n\t\t\tvar i, cur, tmp, bubbleType, ontype, handle, special, lastElement,\n\t\t\t\teventPath = [elem || document],\n\t\t\t\ttype = hasOwn.call(event, \"type\") ? event.type : event,\n\t\t\t\tnamespaces = hasOwn.call(event, \"namespace\") ? event.namespace.split(\".\") : [];\n\n\t\t\tcur = lastElement = tmp = elem = elem || document;\n\n\t\t\t// Don't do events on text and comment nodes\n\t\t\tif (elem.nodeType === 3 || elem.nodeType === 8) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// focus/blur morphs to focusin/out; ensure we're not firing them right now\n\t\t\tif (rfocusMorph.test(type + jQuery.event.triggered)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (type.indexOf(\".\") > -1) {\n\n\t\t\t\t// Namespaced trigger; create a regexp to match event type in handle()\n\t\t\t\tnamespaces = type.split(\".\");\n\t\t\t\ttype = namespaces.shift();\n\t\t\t\tnamespaces.sort();\n\t\t\t}\n\t\t\tontype = type.indexOf(\":\") < 0 && \"on\" + type;\n\n\t\t\t// Caller can pass in a jQuery.Event object, Object, or just an event type string\n\t\t\tevent = event[jQuery.expando] ?\n\t\t\t\tevent :\n\t\t\t\tnew jQuery.Event(type, typeof event === \"object\" && event);\n\n\t\t\t// Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)\n\t\t\tevent.isTrigger = onlyHandlers ? 2 : 3;\n\t\t\tevent.namespace = namespaces.join(\".\");\n\t\t\tevent.rnamespace = event.namespace ?\n\t\t\t\tnew RegExp(\"(^|\\\\.)\" + namespaces.join(\"\\\\.(?:.*\\\\.|)\") + \"(\\\\.|$)\") :\n\t\t\t\tnull;\n\n\t\t\t// Clean up the event in case it is being reused\n\t\t\tevent.result = undefined;\n\t\t\tif (!event.target) {\n\t\t\t\tevent.target = elem;\n\t\t\t}\n\n\t\t\t// Clone any incoming data and prepend the event, creating the handler arg list\n\t\t\tdata = data == null ?\n\t\t\t\t[event] :\n\t\t\t\tjQuery.makeArray(data, [event]);\n\n\t\t\t// Allow special events to draw outside the lines\n\t\t\tspecial = jQuery.event.special[type] || {};\n\t\t\tif (!onlyHandlers && special.trigger && special.trigger.apply(elem, data) === false) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Determine event propagation path in advance, per W3C events spec (trac-9951)\n\t\t\t// Bubble up to document, then to window; watch for a global ownerDocument var (trac-9724)\n\t\t\tif (!onlyHandlers && !special.noBubble && !isWindow(elem)) {\n\n\t\t\t\tbubbleType = special.delegateType || type;\n\t\t\t\tif (!rfocusMorph.test(bubbleType + type)) {\n\t\t\t\t\tcur = cur.parentNode;\n\t\t\t\t}\n\t\t\t\tfor (; cur; cur = cur.parentNode) {\n\t\t\t\t\teventPath.push(cur);\n\t\t\t\t\ttmp = cur;\n\t\t\t\t}\n\n\t\t\t\t// Only add window if we got to document (e.g., not plain obj or detached DOM)\n\t\t\t\tif (tmp === (elem.ownerDocument || document)) {\n\t\t\t\t\teventPath.push(tmp.defaultView || tmp.parentWindow || window);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Fire handlers on the event path\n\t\t\ti = 0;\n\t\t\twhile ((cur = eventPath[i++]) && !event.isPropagationStopped()) {\n\t\t\t\tlastElement = cur;\n\t\t\t\tevent.type = i > 1 ?\n\t\t\t\t\tbubbleType :\n\t\t\t\t\tspecial.bindType || type;\n\n\t\t\t\t// jQuery handler\n\t\t\t\thandle = (dataPriv.get(cur, \"events\") || Object.create(null))[event.type] &&\n\t\t\t\t\tdataPriv.get(cur, \"handle\");\n\t\t\t\tif (handle) {\n\t\t\t\t\thandle.apply(cur, data);\n\t\t\t\t}\n\n\t\t\t\t// Native handler\n\t\t\t\thandle = ontype && cur[ontype];\n\t\t\t\tif (handle && handle.apply && acceptData(cur)) {\n\t\t\t\t\tevent.result = handle.apply(cur, data);\n\t\t\t\t\tif (event.result === false) {\n\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tevent.type = type;\n\n\t\t\t// If nobody prevented the default action, do it now\n\t\t\tif (!onlyHandlers && !event.isDefaultPrevented()) {\n\n\t\t\t\tif ((!special._default ||\n\t\t\t\t\tspecial._default.apply(eventPath.pop(), data) === false) &&\n\t\t\t\t\tacceptData(elem)) {\n\n\t\t\t\t\t// Call a native DOM method on the target with the same name as the event.\n\t\t\t\t\t// Don't do default actions on window, that's where global variables be (trac-6170)\n\t\t\t\t\tif (ontype && isFunction(elem[type]) && !isWindow(elem)) {\n\n\t\t\t\t\t\t// Don't re-trigger an onFOO event when we call its FOO() method\n\t\t\t\t\t\ttmp = elem[ontype];\n\n\t\t\t\t\t\tif (tmp) {\n\t\t\t\t\t\t\telem[ontype] = null;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Prevent re-triggering of the same event, since we already bubbled it above\n\t\t\t\t\t\tjQuery.event.triggered = type;\n\n\t\t\t\t\t\tif (event.isPropagationStopped()) {\n\t\t\t\t\t\t\tlastElement.addEventListener(type, stopPropagationCallback);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\telem[type]();\n\n\t\t\t\t\t\tif (event.isPropagationStopped()) {\n\t\t\t\t\t\t\tlastElement.removeEventListener(type, stopPropagationCallback);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tjQuery.event.triggered = undefined;\n\n\t\t\t\t\t\tif (tmp) {\n\t\t\t\t\t\t\telem[ontype] = tmp;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn event.result;\n\t\t},\n\n\t\t// Piggyback on a donor event to simulate a different one\n\t\t// Used only for `focus(in | out)` events\n\t\tsimulate: function (type, elem, event) {\n\t\t\tvar e = jQuery.extend(\n\t\t\t\tnew jQuery.Event(),\n\t\t\t\tevent,\n\t\t\t\t{\n\t\t\t\t\ttype: type,\n\t\t\t\t\tisSimulated: true\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tjQuery.event.trigger(e, null, elem);\n\t\t}\n\n\t});\n\n\tjQuery.fn.extend({\n\n\t\ttrigger: function (type, data) {\n\t\t\treturn this.each(function () {\n\t\t\t\tjQuery.event.trigger(type, data, this);\n\t\t\t});\n\t\t},\n\t\ttriggerHandler: function (type, data) {\n\t\t\tvar elem = this[0];\n\t\t\tif (elem) {\n\t\t\t\treturn jQuery.event.trigger(type, data, elem, true);\n\t\t\t}\n\t\t}\n\t});\n\n\n\tvar\n\t\trbracket = /\\[\\]$/,\n\t\trCRLF = /\\r?\\n/g,\n\t\trsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,\n\t\trsubmittable = /^(?:input|select|textarea|keygen)/i;\n\n\tfunction buildParams(prefix, obj, traditional, add) {\n\t\tvar name;\n\n\t\tif (Array.isArray(obj)) {\n\n\t\t\t// Serialize array item.\n\t\t\tjQuery.each(obj, function (i, v) {\n\t\t\t\tif (traditional || rbracket.test(prefix)) {\n\n\t\t\t\t\t// Treat each array item as a scalar.\n\t\t\t\t\tadd(prefix, v);\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// Item is non-scalar (array or object), encode its numeric index.\n\t\t\t\t\tbuildParams(\n\t\t\t\t\t\tprefix + \"[\" + (typeof v === \"object\" && v != null ? i : \"\") + \"]\",\n\t\t\t\t\t\tv,\n\t\t\t\t\t\ttraditional,\n\t\t\t\t\t\tadd\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t});\n\n\t\t} else if (!traditional && toType(obj) === \"object\") {\n\n\t\t\t// Serialize object item.\n\t\t\tfor (name in obj) {\n\t\t\t\tbuildParams(prefix + \"[\" + name + \"]\", obj[name], traditional, add);\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// Serialize scalar item.\n\t\t\tadd(prefix, obj);\n\t\t}\n\t}\n\n\t// Serialize an array of form elements or a set of\n\t// key/values into a query string\n\tjQuery.param = function (a, traditional) {\n\t\tvar prefix,\n\t\t\ts = [],\n\t\t\tadd = function (key, valueOrFunction) {\n\n\t\t\t\t// If value is a function, invoke it and use its return value\n\t\t\t\tvar value = isFunction(valueOrFunction) ?\n\t\t\t\t\tvalueOrFunction() :\n\t\t\t\t\tvalueOrFunction;\n\n\t\t\t\ts[s.length] = encodeURIComponent(key) + \"=\" +\n\t\t\t\t\tencodeURIComponent(value == null ? \"\" : value);\n\t\t\t};\n\n\t\tif (a == null) {\n\t\t\treturn \"\";\n\t\t}\n\n\t\t// If an array was passed in, assume that it is an array of form elements.\n\t\tif (Array.isArray(a) || (a.jquery && !jQuery.isPlainObject(a))) {\n\n\t\t\t// Serialize the form elements\n\t\t\tjQuery.each(a, function () {\n\t\t\t\tadd(this.name, this.value);\n\t\t\t});\n\n\t\t} else {\n\n\t\t\t// If traditional, encode the \"old\" way (the way 1.3.2 or older\n\t\t\t// did it), otherwise encode params recursively.\n\t\t\tfor (prefix in a) {\n\t\t\t\tbuildParams(prefix, a[prefix], traditional, add);\n\t\t\t}\n\t\t}\n\n\t\t// Return the resulting serialization\n\t\treturn s.join(\"&\");\n\t};\n\n\tjQuery.fn.extend({\n\t\tserialize: function () {\n\t\t\treturn jQuery.param(this.serializeArray());\n\t\t},\n\t\tserializeArray: function () {\n\t\t\treturn this.map(function () {\n\n\t\t\t\t// Can add propHook for \"elements\" to filter or add form elements\n\t\t\t\tvar elements = jQuery.prop(this, \"elements\");\n\t\t\t\treturn elements ? jQuery.makeArray(elements) : this;\n\t\t\t}).filter(function () {\n\t\t\t\tvar type = this.type;\n\n\t\t\t\t// Use .is( \":disabled\" ) so that fieldset[disabled] works\n\t\t\t\treturn this.name && !jQuery(this).is(\":disabled\") &&\n\t\t\t\t\trsubmittable.test(this.nodeName) && !rsubmitterTypes.test(type) &&\n\t\t\t\t\t(this.checked || !rcheckableType.test(type));\n\t\t\t}).map(function (_i, elem) {\n\t\t\t\tvar val = jQuery(this).val();\n\n\t\t\t\tif (val == null) {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\n\t\t\t\tif (Array.isArray(val)) {\n\t\t\t\t\treturn jQuery.map(val, function (val) {\n\t\t\t\t\t\treturn { name: elem.name, value: val.replace(rCRLF, \"\\r\\n\") };\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\treturn { name: elem.name, value: val.replace(rCRLF, \"\\r\\n\") };\n\t\t\t}).get();\n\t\t}\n\t});\n\n\n\tvar\n\t\tr20 = /%20/g,\n\t\trhash = /#.*$/,\n\t\trantiCache = /([?&])_=[^&]*/,\n\t\trheaders = /^(.*?):[ \\t]*([^\\r\\n]*)$/mg,\n\n\t\t// trac-7653, trac-8125, trac-8152: local protocol detection\n\t\trlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,\n\t\trnoContent = /^(?:GET|HEAD)$/,\n\t\trprotocol = /^\\/\\//,\n\n\t\t/* Prefilters\n\t\t * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)\n\t\t * 2) These are called:\n\t\t *    - BEFORE asking for a transport\n\t\t *    - AFTER param serialization (s.data is a string if s.processData is true)\n\t\t * 3) key is the dataType\n\t\t * 4) the catchall symbol \"*\" can be used\n\t\t * 5) execution will start with transport dataType and THEN continue down to \"*\" if needed\n\t\t */\n\t\tprefilters = {},\n\n\t\t/* Transports bindings\n\t\t * 1) key is the dataType\n\t\t * 2) the catchall symbol \"*\" can be used\n\t\t * 3) selection will start with transport dataType and THEN go to \"*\" if needed\n\t\t */\n\t\ttransports = {},\n\n\t\t// Avoid comment-prolog char sequence (trac-10098); must appease lint and evade compression\n\t\tallTypes = \"*/\".concat(\"*\"),\n\n\t\t// Anchor tag for parsing the document origin\n\t\toriginAnchor = document.createElement(\"a\");\n\n\toriginAnchor.href = location.href;\n\n\t// Base \"constructor\" for jQuery.ajaxPrefilter and jQuery.ajaxTransport\n\tfunction addToPrefiltersOrTransports(structure) {\n\n\t\t// dataTypeExpression is optional and defaults to \"*\"\n\t\treturn function (dataTypeExpression, func) {\n\n\t\t\tif (typeof dataTypeExpression !== \"string\") {\n\t\t\t\tfunc = dataTypeExpression;\n\t\t\t\tdataTypeExpression = \"*\";\n\t\t\t}\n\n\t\t\tvar dataType,\n\t\t\t\ti = 0,\n\t\t\t\tdataTypes = dataTypeExpression.toLowerCase().match(rnothtmlwhite) || [];\n\n\t\t\tif (isFunction(func)) {\n\n\t\t\t\t// For each dataType in the dataTypeExpression\n\t\t\t\twhile ((dataType = dataTypes[i++])) {\n\n\t\t\t\t\t// Prepend if requested\n\t\t\t\t\tif (dataType[0] === \"+\") {\n\t\t\t\t\t\tdataType = dataType.slice(1) || \"*\";\n\t\t\t\t\t\t(structure[dataType] = structure[dataType] || []).unshift(func);\n\n\t\t\t\t\t\t// Otherwise append\n\t\t\t\t\t} else {\n\t\t\t\t\t\t(structure[dataType] = structure[dataType] || []).push(func);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n\n\t// Base inspection function for prefilters and transports\n\tfunction inspectPrefiltersOrTransports(structure, options, originalOptions, jqXHR) {\n\n\t\tvar inspected = {},\n\t\t\tseekingTransport = (structure === transports);\n\n\t\tfunction inspect(dataType) {\n\t\t\tvar selected;\n\t\t\tinspected[dataType] = true;\n\t\t\tjQuery.each(structure[dataType] || [], function (_, prefilterOrFactory) {\n\t\t\t\tvar dataTypeOrTransport = prefilterOrFactory(options, originalOptions, jqXHR);\n\t\t\t\tif (typeof dataTypeOrTransport === \"string\" &&\n\t\t\t\t\t!seekingTransport && !inspected[dataTypeOrTransport]) {\n\n\t\t\t\t\toptions.dataTypes.unshift(dataTypeOrTransport);\n\t\t\t\t\tinspect(dataTypeOrTransport);\n\t\t\t\t\treturn false;\n\t\t\t\t} else if (seekingTransport) {\n\t\t\t\t\treturn !(selected = dataTypeOrTransport);\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn selected;\n\t\t}\n\n\t\treturn inspect(options.dataTypes[0]) || !inspected[\"*\"] && inspect(\"*\");\n\t}\n\n\t// A special extend for ajax options\n\t// that takes \"flat\" options (not to be deep extended)\n\t// Fixes trac-9887\n\tfunction ajaxExtend(target, src) {\n\t\tvar key, deep,\n\t\t\tflatOptions = jQuery.ajaxSettings.flatOptions || {};\n\n\t\tfor (key in src) {\n\t\t\tif (src[key] !== undefined) {\n\t\t\t\t(flatOptions[key] ? target : (deep || (deep = {})))[key] = src[key];\n\t\t\t}\n\t\t}\n\t\tif (deep) {\n\t\t\tjQuery.extend(true, target, deep);\n\t\t}\n\n\t\treturn target;\n\t}\n\n\t/* Handles responses to an ajax request:\n\t * - finds the right dataType (mediates between content-type and expected dataType)\n\t * - returns the corresponding response\n\t */\n\tfunction ajaxHandleResponses(s, jqXHR, responses) {\n\n\t\tvar ct, type, finalDataType, firstDataType,\n\t\t\tcontents = s.contents,\n\t\t\tdataTypes = s.dataTypes;\n\n\t\t// Remove auto dataType and get content-type in the process\n\t\twhile (dataTypes[0] === \"*\") {\n\t\t\tdataTypes.shift();\n\t\t\tif (ct === undefined) {\n\t\t\t\tct = s.mimeType || jqXHR.getResponseHeader(\"Content-Type\");\n\t\t\t}\n\t\t}\n\n\t\t// Check if we're dealing with a known content-type\n\t\tif (ct) {\n\t\t\tfor (type in contents) {\n\t\t\t\tif (contents[type] && contents[type].test(ct)) {\n\t\t\t\t\tdataTypes.unshift(type);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Check to see if we have a response for the expected dataType\n\t\tif (dataTypes[0] in responses) {\n\t\t\tfinalDataType = dataTypes[0];\n\t\t} else {\n\n\t\t\t// Try convertible dataTypes\n\t\t\tfor (type in responses) {\n\t\t\t\tif (!dataTypes[0] || s.converters[type + \" \" + dataTypes[0]]) {\n\t\t\t\t\tfinalDataType = type;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (!firstDataType) {\n\t\t\t\t\tfirstDataType = type;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Or just use first one\n\t\t\tfinalDataType = finalDataType || firstDataType;\n\t\t}\n\n\t\t// If we found a dataType\n\t\t// We add the dataType to the list if needed\n\t\t// and return the corresponding response\n\t\tif (finalDataType) {\n\t\t\tif (finalDataType !== dataTypes[0]) {\n\t\t\t\tdataTypes.unshift(finalDataType);\n\t\t\t}\n\t\t\treturn responses[finalDataType];\n\t\t}\n\t}\n\n\t/* Chain conversions given the request and the original response\n\t * Also sets the responseXXX fields on the jqXHR instance\n\t */\n\tfunction ajaxConvert(s, response, jqXHR, isSuccess) {\n\t\tvar conv2, current, conv, tmp, prev,\n\t\t\tconverters = {},\n\n\t\t\t// Work with a copy of dataTypes in case we need to modify it for conversion\n\t\t\tdataTypes = s.dataTypes.slice();\n\n\t\t// Create converters map with lowercased keys\n\t\tif (dataTypes[1]) {\n\t\t\tfor (conv in s.converters) {\n\t\t\t\tconverters[conv.toLowerCase()] = s.converters[conv];\n\t\t\t}\n\t\t}\n\n\t\tcurrent = dataTypes.shift();\n\n\t\t// Convert to each sequential dataType\n\t\twhile (current) {\n\n\t\t\tif (s.responseFields[current]) {\n\t\t\t\tjqXHR[s.responseFields[current]] = response;\n\t\t\t}\n\n\t\t\t// Apply the dataFilter if provided\n\t\t\tif (!prev && isSuccess && s.dataFilter) {\n\t\t\t\tresponse = s.dataFilter(response, s.dataType);\n\t\t\t}\n\n\t\t\tprev = current;\n\t\t\tcurrent = dataTypes.shift();\n\n\t\t\tif (current) {\n\n\t\t\t\t// There's only work to do if current dataType is non-auto\n\t\t\t\tif (current === \"*\") {\n\n\t\t\t\t\tcurrent = prev;\n\n\t\t\t\t\t// Convert response if prev dataType is non-auto and differs from current\n\t\t\t\t} else if (prev !== \"*\" && prev !== current) {\n\n\t\t\t\t\t// Seek a direct converter\n\t\t\t\t\tconv = converters[prev + \" \" + current] || converters[\"* \" + current];\n\n\t\t\t\t\t// If none found, seek a pair\n\t\t\t\t\tif (!conv) {\n\t\t\t\t\t\tfor (conv2 in converters) {\n\n\t\t\t\t\t\t\t// If conv2 outputs current\n\t\t\t\t\t\t\ttmp = conv2.split(\" \");\n\t\t\t\t\t\t\tif (tmp[1] === current) {\n\n\t\t\t\t\t\t\t\t// If prev can be converted to accepted input\n\t\t\t\t\t\t\t\tconv = converters[prev + \" \" + tmp[0]] ||\n\t\t\t\t\t\t\t\t\tconverters[\"* \" + tmp[0]];\n\t\t\t\t\t\t\t\tif (conv) {\n\n\t\t\t\t\t\t\t\t\t// Condense equivalence converters\n\t\t\t\t\t\t\t\t\tif (conv === true) {\n\t\t\t\t\t\t\t\t\t\tconv = converters[conv2];\n\n\t\t\t\t\t\t\t\t\t\t// Otherwise, insert the intermediate dataType\n\t\t\t\t\t\t\t\t\t} else if (converters[conv2] !== true) {\n\t\t\t\t\t\t\t\t\t\tcurrent = tmp[0];\n\t\t\t\t\t\t\t\t\t\tdataTypes.unshift(tmp[1]);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Apply converter (if not an equivalence)\n\t\t\t\t\tif (conv !== true) {\n\n\t\t\t\t\t\t// Unless errors are allowed to bubble, catch and return them\n\t\t\t\t\t\tif (conv && s.throws) {\n\t\t\t\t\t\t\tresponse = conv(response);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\tresponse = conv(response);\n\t\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\tstate: \"parsererror\",\n\t\t\t\t\t\t\t\t\terror: conv ? e : \"No conversion from \" + prev + \" to \" + current\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn { state: \"success\", data: response };\n\t}\n\n\tjQuery.extend({\n\n\t\t// Counter for holding the number of active queries\n\t\tactive: 0,\n\n\t\t// Last-Modified header cache for next request\n\t\tlastModified: {},\n\t\tetag: {},\n\n\t\tajaxSettings: {\n\t\t\turl: location.href,\n\t\t\ttype: \"GET\",\n\t\t\tisLocal: rlocalProtocol.test(location.protocol),\n\t\t\tglobal: true,\n\t\t\tprocessData: true,\n\t\t\tasync: true,\n\t\t\tcontentType: \"application/x-www-form-urlencoded; charset=UTF-8\",\n\n\t\t\t/*\n\t\t\ttimeout: 0,\n\t\t\tdata: null,\n\t\t\tdataType: null,\n\t\t\tusername: null,\n\t\t\tpassword: null,\n\t\t\tcache: null,\n\t\t\tthrows: false,\n\t\t\ttraditional: false,\n\t\t\theaders: {},\n\t\t\t*/\n\n\t\t\taccepts: {\n\t\t\t\t\"*\": allTypes,\n\t\t\t\ttext: \"text/plain\",\n\t\t\t\thtml: \"text/html\",\n\t\t\t\txml: \"application/xml, text/xml\",\n\t\t\t\tjson: \"application/json, text/javascript\"\n\t\t\t},\n\n\t\t\tcontents: {\n\t\t\t\txml: /\\bxml\\b/,\n\t\t\t\thtml: /\\bhtml/,\n\t\t\t\tjson: /\\bjson\\b/\n\t\t\t},\n\n\t\t\tresponseFields: {\n\t\t\t\txml: \"responseXML\",\n\t\t\t\ttext: \"responseText\",\n\t\t\t\tjson: \"responseJSON\"\n\t\t\t},\n\n\t\t\t// Data converters\n\t\t\t// Keys separate source (or catchall \"*\") and destination types with a single space\n\t\t\tconverters: {\n\n\t\t\t\t// Convert anything to text\n\t\t\t\t\"* text\": String,\n\n\t\t\t\t// Text to html (true = no transformation)\n\t\t\t\t\"text html\": true,\n\n\t\t\t\t// Evaluate text as a json expression\n\t\t\t\t\"text json\": JSON.parse,\n\n\t\t\t\t// Parse text as xml\n\t\t\t\t\"text xml\": jQuery.parseXML\n\t\t\t},\n\n\t\t\t// For options that shouldn't be deep extended:\n\t\t\t// you can add your own custom options here if\n\t\t\t// and when you create one that shouldn't be\n\t\t\t// deep extended (see ajaxExtend)\n\t\t\tflatOptions: {\n\t\t\t\turl: true,\n\t\t\t\tcontext: true\n\t\t\t}\n\t\t},\n\n\t\t// Creates a full fledged settings object into target\n\t\t// with both ajaxSettings and settings fields.\n\t\t// If target is omitted, writes into ajaxSettings.\n\t\tajaxSetup: function (target, settings) {\n\t\t\treturn settings ?\n\n\t\t\t\t// Building a settings object\n\t\t\t\tajaxExtend(ajaxExtend(target, jQuery.ajaxSettings), settings) :\n\n\t\t\t\t// Extending ajaxSettings\n\t\t\t\tajaxExtend(jQuery.ajaxSettings, target);\n\t\t},\n\n\t\tajaxPrefilter: addToPrefiltersOrTransports(prefilters),\n\t\tajaxTransport: addToPrefiltersOrTransports(transports),\n\n\t\t// Main method\n\t\tajax: function (url, options) {\n\n\t\t\t// If url is an object, simulate pre-1.5 signature\n\t\t\tif (typeof url === \"object\") {\n\t\t\t\toptions = url;\n\t\t\t\turl = undefined;\n\t\t\t}\n\n\t\t\t// Force options to be an object\n\t\t\toptions = options || {};\n\n\t\t\tvar transport,\n\n\t\t\t\t// URL without anti-cache param\n\t\t\t\tcacheURL,\n\n\t\t\t\t// Response headers\n\t\t\t\tresponseHeadersString,\n\t\t\t\tresponseHeaders,\n\n\t\t\t\t// timeout handle\n\t\t\t\ttimeoutTimer,\n\n\t\t\t\t// Url cleanup var\n\t\t\t\turlAnchor,\n\n\t\t\t\t// Request state (becomes false upon send and true upon completion)\n\t\t\t\tcompleted,\n\n\t\t\t\t// To know if global events are to be dispatched\n\t\t\t\tfireGlobals,\n\n\t\t\t\t// Loop variable\n\t\t\t\ti,\n\n\t\t\t\t// uncached part of the url\n\t\t\t\tuncached,\n\n\t\t\t\t// Create the final options object\n\t\t\t\ts = jQuery.ajaxSetup({}, options),\n\n\t\t\t\t// Callbacks context\n\t\t\t\tcallbackContext = s.context || s,\n\n\t\t\t\t// Context for global events is callbackContext if it is a DOM node or jQuery collection\n\t\t\t\tglobalEventContext = s.context &&\n\t\t\t\t\t(callbackContext.nodeType || callbackContext.jquery) ?\n\t\t\t\t\tjQuery(callbackContext) :\n\t\t\t\t\tjQuery.event,\n\n\t\t\t\t// Deferreds\n\t\t\t\tdeferred = jQuery.Deferred(),\n\t\t\t\tcompleteDeferred = jQuery.Callbacks(\"once memory\"),\n\n\t\t\t\t// Status-dependent callbacks\n\t\t\t\tstatusCode = s.statusCode || {},\n\n\t\t\t\t// Headers (they are sent all at once)\n\t\t\t\trequestHeaders = {},\n\t\t\t\trequestHeadersNames = {},\n\n\t\t\t\t// Default abort message\n\t\t\t\tstrAbort = \"canceled\",\n\n\t\t\t\t// Fake xhr\n\t\t\t\tjqXHR = {\n\t\t\t\t\treadyState: 0,\n\n\t\t\t\t\t// Builds headers hashtable if needed\n\t\t\t\t\tgetResponseHeader: function (key) {\n\t\t\t\t\t\tvar match;\n\t\t\t\t\t\tif (completed) {\n\t\t\t\t\t\t\tif (!responseHeaders) {\n\t\t\t\t\t\t\t\tresponseHeaders = {};\n\t\t\t\t\t\t\t\twhile ((match = rheaders.exec(responseHeadersString))) {\n\t\t\t\t\t\t\t\t\tresponseHeaders[match[1].toLowerCase() + \" \"] =\n\t\t\t\t\t\t\t\t\t\t(responseHeaders[match[1].toLowerCase() + \" \"] || [])\n\t\t\t\t\t\t\t\t\t\t\t.concat(match[2]);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tmatch = responseHeaders[key.toLowerCase() + \" \"];\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn match == null ? null : match.join(\", \");\n\t\t\t\t\t},\n\n\t\t\t\t\t// Raw string\n\t\t\t\t\tgetAllResponseHeaders: function () {\n\t\t\t\t\t\treturn completed ? responseHeadersString : null;\n\t\t\t\t\t},\n\n\t\t\t\t\t// Caches the header\n\t\t\t\t\tsetRequestHeader: function (name, value) {\n\t\t\t\t\t\tif (completed == null) {\n\t\t\t\t\t\t\tname = requestHeadersNames[name.toLowerCase()] =\n\t\t\t\t\t\t\t\trequestHeadersNames[name.toLowerCase()] || name;\n\t\t\t\t\t\t\trequestHeaders[name] = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn this;\n\t\t\t\t\t},\n\n\t\t\t\t\t// Overrides response content-type header\n\t\t\t\t\toverrideMimeType: function (type) {\n\t\t\t\t\t\tif (completed == null) {\n\t\t\t\t\t\t\ts.mimeType = type;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn this;\n\t\t\t\t\t},\n\n\t\t\t\t\t// Status-dependent callbacks\n\t\t\t\t\tstatusCode: function (map) {\n\t\t\t\t\t\tvar code;\n\t\t\t\t\t\tif (map) {\n\t\t\t\t\t\t\tif (completed) {\n\n\t\t\t\t\t\t\t\t// Execute the appropriate callbacks\n\t\t\t\t\t\t\t\tjqXHR.always(map[jqXHR.status]);\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t// Lazy-add the new callbacks in a way that preserves old ones\n\t\t\t\t\t\t\t\tfor (code in map) {\n\t\t\t\t\t\t\t\t\tstatusCode[code] = [statusCode[code], map[code]];\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn this;\n\t\t\t\t\t},\n\n\t\t\t\t\t// Cancel the request\n\t\t\t\t\tabort: function (statusText) {\n\t\t\t\t\t\tvar finalText = statusText || strAbort;\n\t\t\t\t\t\tif (transport) {\n\t\t\t\t\t\t\ttransport.abort(finalText);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdone(0, finalText);\n\t\t\t\t\t\treturn this;\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t// Attach deferreds\n\t\t\tdeferred.promise(jqXHR);\n\n\t\t\t// Add protocol if not provided (prefilters might expect it)\n\t\t\t// Handle falsy url in the settings object (trac-10093: consistency with old signature)\n\t\t\t// We also use the url parameter if available\n\t\t\ts.url = ((url || s.url || location.href) + \"\")\n\t\t\t\t.replace(rprotocol, location.protocol + \"//\");\n\n\t\t\t// Alias method option to type as per ticket trac-12004\n\t\t\ts.type = options.method || options.type || s.method || s.type;\n\n\t\t\t// Extract dataTypes list\n\t\t\ts.dataTypes = (s.dataType || \"*\").toLowerCase().match(rnothtmlwhite) || [\"\"];\n\n\t\t\t// A cross-domain request is in order when the origin doesn't match the current origin.\n\t\t\tif (s.crossDomain == null) {\n\t\t\t\turlAnchor = document.createElement(\"a\");\n\n\t\t\t\t// Support: IE <=8 - 11, Edge 12 - 15\n\t\t\t\t// IE throws exception on accessing the href property if url is malformed,\n\t\t\t\t// e.g. http://example.com:80x/\n\t\t\t\ttry {\n\t\t\t\t\turlAnchor.href = s.url;\n\n\t\t\t\t\t// Support: IE <=8 - 11 only\n\t\t\t\t\t// Anchor's host property isn't correctly set when s.url is relative\n\t\t\t\t\turlAnchor.href = urlAnchor.href;\n\t\t\t\t\ts.crossDomain = originAnchor.protocol + \"//\" + originAnchor.host !==\n\t\t\t\t\t\turlAnchor.protocol + \"//\" + urlAnchor.host;\n\t\t\t\t} catch (e) {\n\n\t\t\t\t\t// If there is an error parsing the URL, assume it is crossDomain,\n\t\t\t\t\t// it can be rejected by the transport if it is invalid\n\t\t\t\t\ts.crossDomain = true;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Convert data if not already a string\n\t\t\tif (s.data && s.processData && typeof s.data !== \"string\") {\n\t\t\t\ts.data = jQuery.param(s.data, s.traditional);\n\t\t\t}\n\n\t\t\t// Apply prefilters\n\t\t\tinspectPrefiltersOrTransports(prefilters, s, options, jqXHR);\n\n\t\t\t// If request was aborted inside a prefilter, stop there\n\t\t\tif (completed) {\n\t\t\t\treturn jqXHR;\n\t\t\t}\n\n\t\t\t// We can fire global events as of now if asked to\n\t\t\t// Don't fire events if jQuery.event is undefined in an AMD-usage scenario (trac-15118)\n\t\t\tfireGlobals = jQuery.event && s.global;\n\n\t\t\t// Watch for a new set of requests\n\t\t\tif (fireGlobals && jQuery.active++ === 0) {\n\t\t\t\tjQuery.event.trigger(\"ajaxStart\");\n\t\t\t}\n\n\t\t\t// Uppercase the type\n\t\t\ts.type = s.type.toUpperCase();\n\n\t\t\t// Determine if request has content\n\t\t\ts.hasContent = !rnoContent.test(s.type);\n\n\t\t\t// Save the URL in case we're toying with the If-Modified-Since\n\t\t\t// and/or If-None-Match header later on\n\t\t\t// Remove hash to simplify url manipulation\n\t\t\tcacheURL = s.url.replace(rhash, \"\");\n\n\t\t\t// More options handling for requests with no content\n\t\t\tif (!s.hasContent) {\n\n\t\t\t\t// Remember the hash so we can put it back\n\t\t\t\tuncached = s.url.slice(cacheURL.length);\n\n\t\t\t\t// If data is available and should be processed, append data to url\n\t\t\t\tif (s.data && (s.processData || typeof s.data === \"string\")) {\n\t\t\t\t\tcacheURL += (rquery.test(cacheURL) ? \"&\" : \"?\") + s.data;\n\n\t\t\t\t\t// trac-9682: remove data so that it's not used in an eventual retry\n\t\t\t\t\tdelete s.data;\n\t\t\t\t}\n\n\t\t\t\t// Add or update anti-cache param if needed\n\t\t\t\tif (s.cache === false) {\n\t\t\t\t\tcacheURL = cacheURL.replace(rantiCache, \"$1\");\n\t\t\t\t\tuncached = (rquery.test(cacheURL) ? \"&\" : \"?\") + \"_=\" + (nonce.guid++) +\n\t\t\t\t\t\tuncached;\n\t\t\t\t}\n\n\t\t\t\t// Put hash and anti-cache on the URL that will be requested (gh-1732)\n\t\t\t\ts.url = cacheURL + uncached;\n\n\t\t\t\t// Change '%20' to '+' if this is encoded form body content (gh-2658)\n\t\t\t} else if (s.data && s.processData &&\n\t\t\t\t(s.contentType || \"\").indexOf(\"application/x-www-form-urlencoded\") === 0) {\n\t\t\t\ts.data = s.data.replace(r20, \"+\");\n\t\t\t}\n\n\t\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\t\tif (s.ifModified) {\n\t\t\t\tif (jQuery.lastModified[cacheURL]) {\n\t\t\t\t\tjqXHR.setRequestHeader(\"If-Modified-Since\", jQuery.lastModified[cacheURL]);\n\t\t\t\t}\n\t\t\t\tif (jQuery.etag[cacheURL]) {\n\t\t\t\t\tjqXHR.setRequestHeader(\"If-None-Match\", jQuery.etag[cacheURL]);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Set the correct header, if data is being sent\n\t\t\tif (s.data && s.hasContent && s.contentType !== false || options.contentType) {\n\t\t\t\tjqXHR.setRequestHeader(\"Content-Type\", s.contentType);\n\t\t\t}\n\n\t\t\t// Set the Accepts header for the server, depending on the dataType\n\t\t\tjqXHR.setRequestHeader(\n\t\t\t\t\"Accept\",\n\t\t\t\ts.dataTypes[0] && s.accepts[s.dataTypes[0]] ?\n\t\t\t\t\ts.accepts[s.dataTypes[0]] +\n\t\t\t\t\t(s.dataTypes[0] !== \"*\" ? \", \" + allTypes + \"; q=0.01\" : \"\") :\n\t\t\t\t\ts.accepts[\"*\"]\n\t\t\t);\n\n\t\t\t// Check for headers option\n\t\t\tfor (i in s.headers) {\n\t\t\t\tjqXHR.setRequestHeader(i, s.headers[i]);\n\t\t\t}\n\n\t\t\t// Allow custom headers/mimetypes and early abort\n\t\t\tif (s.beforeSend &&\n\t\t\t\t(s.beforeSend.call(callbackContext, jqXHR, s) === false || completed)) {\n\n\t\t\t\t// Abort if not done already and return\n\t\t\t\treturn jqXHR.abort();\n\t\t\t}\n\n\t\t\t// Aborting is no longer a cancellation\n\t\t\tstrAbort = \"abort\";\n\n\t\t\t// Install callbacks on deferreds\n\t\t\tcompleteDeferred.add(s.complete);\n\t\t\tjqXHR.done(s.success);\n\t\t\tjqXHR.fail(s.error);\n\n\t\t\t// Get transport\n\t\t\ttransport = inspectPrefiltersOrTransports(transports, s, options, jqXHR);\n\n\t\t\t// If no transport, we auto-abort\n\t\t\tif (!transport) {\n\t\t\t\tdone(-1, \"No Transport\");\n\t\t\t} else {\n\t\t\t\tjqXHR.readyState = 1;\n\n\t\t\t\t// Send global event\n\t\t\t\tif (fireGlobals) {\n\t\t\t\t\tglobalEventContext.trigger(\"ajaxSend\", [jqXHR, s]);\n\t\t\t\t}\n\n\t\t\t\t// If request was aborted inside ajaxSend, stop there\n\t\t\t\tif (completed) {\n\t\t\t\t\treturn jqXHR;\n\t\t\t\t}\n\n\t\t\t\t// Timeout\n\t\t\t\tif (s.async && s.timeout > 0) {\n\t\t\t\t\ttimeoutTimer = window.setTimeout(function () {\n\t\t\t\t\t\tjqXHR.abort(\"timeout\");\n\t\t\t\t\t}, s.timeout);\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tcompleted = false;\n\t\t\t\t\ttransport.send(requestHeaders, done);\n\t\t\t\t} catch (e) {\n\n\t\t\t\t\t// Rethrow post-completion exceptions\n\t\t\t\t\tif (completed) {\n\t\t\t\t\t\tthrow e;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Propagate others as results\n\t\t\t\t\tdone(-1, e);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Callback for when everything is done\n\t\t\tfunction done(status, nativeStatusText, responses, headers) {\n\t\t\t\tvar isSuccess, success, error, response, modified,\n\t\t\t\t\tstatusText = nativeStatusText;\n\n\t\t\t\t// Ignore repeat invocations\n\t\t\t\tif (completed) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tcompleted = true;\n\n\t\t\t\t// Clear timeout if it exists\n\t\t\t\tif (timeoutTimer) {\n\t\t\t\t\twindow.clearTimeout(timeoutTimer);\n\t\t\t\t}\n\n\t\t\t\t// Dereference transport for early garbage collection\n\t\t\t\t// (no matter how long the jqXHR object will be used)\n\t\t\t\ttransport = undefined;\n\n\t\t\t\t// Cache response headers\n\t\t\t\tresponseHeadersString = headers || \"\";\n\n\t\t\t\t// Set readyState\n\t\t\t\tjqXHR.readyState = status > 0 ? 4 : 0;\n\n\t\t\t\t// Determine if successful\n\t\t\t\tisSuccess = status >= 200 && status < 300 || status === 304;\n\n\t\t\t\t// Get response data\n\t\t\t\tif (responses) {\n\t\t\t\t\tresponse = ajaxHandleResponses(s, jqXHR, responses);\n\t\t\t\t}\n\n\t\t\t\t// Use a noop converter for missing script but not if jsonp\n\t\t\t\tif (!isSuccess &&\n\t\t\t\t\tjQuery.inArray(\"script\", s.dataTypes) > -1 &&\n\t\t\t\t\tjQuery.inArray(\"json\", s.dataTypes) < 0) {\n\t\t\t\t\ts.converters[\"text script\"] = function () { };\n\t\t\t\t}\n\n\t\t\t\t// Convert no matter what (that way responseXXX fields are always set)\n\t\t\t\tresponse = ajaxConvert(s, response, jqXHR, isSuccess);\n\n\t\t\t\t// If successful, handle type chaining\n\t\t\t\tif (isSuccess) {\n\n\t\t\t\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\t\t\t\tif (s.ifModified) {\n\t\t\t\t\t\tmodified = jqXHR.getResponseHeader(\"Last-Modified\");\n\t\t\t\t\t\tif (modified) {\n\t\t\t\t\t\t\tjQuery.lastModified[cacheURL] = modified;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmodified = jqXHR.getResponseHeader(\"etag\");\n\t\t\t\t\t\tif (modified) {\n\t\t\t\t\t\t\tjQuery.etag[cacheURL] = modified;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// if no content\n\t\t\t\t\tif (status === 204 || s.type === \"HEAD\") {\n\t\t\t\t\t\tstatusText = \"nocontent\";\n\n\t\t\t\t\t\t// if not modified\n\t\t\t\t\t} else if (status === 304) {\n\t\t\t\t\t\tstatusText = \"notmodified\";\n\n\t\t\t\t\t\t// If we have data, let's convert it\n\t\t\t\t\t} else {\n\t\t\t\t\t\tstatusText = response.state;\n\t\t\t\t\t\tsuccess = response.data;\n\t\t\t\t\t\terror = response.error;\n\t\t\t\t\t\tisSuccess = !error;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\n\t\t\t\t\t// Extract error from statusText and normalize for non-aborts\n\t\t\t\t\terror = statusText;\n\t\t\t\t\tif (status || !statusText) {\n\t\t\t\t\t\tstatusText = \"error\";\n\t\t\t\t\t\tif (status < 0) {\n\t\t\t\t\t\t\tstatus = 0;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Set data for the fake xhr object\n\t\t\t\tjqXHR.status = status;\n\t\t\t\tjqXHR.statusText = (nativeStatusText || statusText) + \"\";\n\n\t\t\t\t// Success/Error\n\t\t\t\tif (isSuccess) {\n\t\t\t\t\tdeferred.resolveWith(callbackContext, [success, statusText, jqXHR]);\n\t\t\t\t} else {\n\t\t\t\t\tdeferred.rejectWith(callbackContext, [jqXHR, statusText, error]);\n\t\t\t\t}\n\n\t\t\t\t// Status-dependent callbacks\n\t\t\t\tjqXHR.statusCode(statusCode);\n\t\t\t\tstatusCode = undefined;\n\n\t\t\t\tif (fireGlobals) {\n\t\t\t\t\tglobalEventContext.trigger(isSuccess ? \"ajaxSuccess\" : \"ajaxError\",\n\t\t\t\t\t\t[jqXHR, s, isSuccess ? success : error]);\n\t\t\t\t}\n\n\t\t\t\t// Complete\n\t\t\t\tcompleteDeferred.fireWith(callbackContext, [jqXHR, statusText]);\n\n\t\t\t\tif (fireGlobals) {\n\t\t\t\t\tglobalEventContext.trigger(\"ajaxComplete\", [jqXHR, s]);\n\n\t\t\t\t\t// Handle the global AJAX counter\n\t\t\t\t\tif (!(--jQuery.active)) {\n\t\t\t\t\t\tjQuery.event.trigger(\"ajaxStop\");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn jqXHR;\n\t\t},\n\n\t\tgetJSON: function (url, data, callback) {\n\t\t\treturn jQuery.get(url, data, callback, \"json\");\n\t\t},\n\n\t\tgetScript: function (url, callback) {\n\t\t\treturn jQuery.get(url, undefined, callback, \"script\");\n\t\t}\n\t});\n\n\tjQuery.each([\"get\", \"post\"], function (_i, method) {\n\t\tjQuery[method] = function (url, data, callback, type) {\n\n\t\t\t// Shift arguments if data argument was omitted\n\t\t\tif (isFunction(data)) {\n\t\t\t\ttype = type || callback;\n\t\t\t\tcallback = data;\n\t\t\t\tdata = undefined;\n\t\t\t}\n\n\t\t\t// The url can be an options object (which then must have .url)\n\t\t\treturn jQuery.ajax(jQuery.extend({\n\t\t\t\turl: url,\n\t\t\t\ttype: method,\n\t\t\t\tdataType: type,\n\t\t\t\tdata: data,\n\t\t\t\tsuccess: callback\n\t\t\t}, jQuery.isPlainObject(url) && url));\n\t\t};\n\t});\n\n\tjQuery.ajaxPrefilter(function (s) {\n\t\tvar i;\n\t\tfor (i in s.headers) {\n\t\t\tif (i.toLowerCase() === \"content-type\") {\n\t\t\t\ts.contentType = s.headers[i] || \"\";\n\t\t\t}\n\t\t}\n\t});\n\n\n\tjQuery._evalUrl = function (url, options, doc) {\n\t\treturn jQuery.ajax({\n\t\t\turl: url,\n\n\t\t\t// Make this explicit, since user can override this through ajaxSetup (trac-11264)\n\t\t\ttype: \"GET\",\n\t\t\tdataType: \"script\",\n\t\t\tcache: true,\n\t\t\tasync: false,\n\t\t\tglobal: false,\n\n\t\t\t// Only evaluate the response if it is successful (gh-4126)\n\t\t\t// dataFilter is not invoked for failure responses, so using it instead\n\t\t\t// of the default converter is kludgy but it works.\n\t\t\tconverters: {\n\t\t\t\t\"text script\": function () { }\n\t\t\t},\n\t\t\tdataFilter: function (response) {\n\t\t\t\tjQuery.globalEval(response, options, doc);\n\t\t\t}\n\t\t});\n\t};\n\n\n\tjQuery.fn.extend({\n\t\twrapAll: function (html) {\n\t\t\tvar wrap;\n\n\t\t\tif (this[0]) {\n\t\t\t\tif (isFunction(html)) {\n\t\t\t\t\thtml = html.call(this[0]);\n\t\t\t\t}\n\n\t\t\t\t// The elements to wrap the target around\n\t\t\t\twrap = jQuery(html, this[0].ownerDocument).eq(0).clone(true);\n\n\t\t\t\tif (this[0].parentNode) {\n\t\t\t\t\twrap.insertBefore(this[0]);\n\t\t\t\t}\n\n\t\t\t\twrap.map(function () {\n\t\t\t\t\tvar elem = this;\n\n\t\t\t\t\twhile (elem.firstElementChild) {\n\t\t\t\t\t\telem = elem.firstElementChild;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn elem;\n\t\t\t\t}).append(this);\n\t\t\t}\n\n\t\t\treturn this;\n\t\t},\n\n\t\twrapInner: function (html) {\n\t\t\tif (isFunction(html)) {\n\t\t\t\treturn this.each(function (i) {\n\t\t\t\t\tjQuery(this).wrapInner(html.call(this, i));\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn this.each(function () {\n\t\t\t\tvar self = jQuery(this),\n\t\t\t\t\tcontents = self.contents();\n\n\t\t\t\tif (contents.length) {\n\t\t\t\t\tcontents.wrapAll(html);\n\n\t\t\t\t} else {\n\t\t\t\t\tself.append(html);\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\twrap: function (html) {\n\t\t\tvar htmlIsFunction = isFunction(html);\n\n\t\t\treturn this.each(function (i) {\n\t\t\t\tjQuery(this).wrapAll(htmlIsFunction ? html.call(this, i) : html);\n\t\t\t});\n\t\t},\n\n\t\tunwrap: function (selector) {\n\t\t\tthis.parent(selector).not(\"body\").each(function () {\n\t\t\t\tjQuery(this).replaceWith(this.childNodes);\n\t\t\t});\n\t\t\treturn this;\n\t\t}\n\t});\n\n\n\tjQuery.expr.pseudos.hidden = function (elem) {\n\t\treturn !jQuery.expr.pseudos.visible(elem);\n\t};\n\tjQuery.expr.pseudos.visible = function (elem) {\n\t\treturn !!(elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length);\n\t};\n\n\n\n\n\tjQuery.ajaxSettings.xhr = function () {\n\t\ttry {\n\t\t\treturn new window.XMLHttpRequest();\n\t\t} catch (e) { }\n\t};\n\n\tvar xhrSuccessStatus = {\n\n\t\t// File protocol always yields status code 0, assume 200\n\t\t0: 200,\n\n\t\t// Support: IE <=9 only\n\t\t// trac-1450: sometimes IE returns 1223 when it should be 204\n\t\t1223: 204\n\t},\n\t\txhrSupported = jQuery.ajaxSettings.xhr();\n\n\tsupport.cors = !!xhrSupported && (\"withCredentials\" in xhrSupported);\n\tsupport.ajax = xhrSupported = !!xhrSupported;\n\n\tjQuery.ajaxTransport(function (options) {\n\t\tvar callback, errorCallback;\n\n\t\t// Cross domain only allowed if supported through XMLHttpRequest\n\t\tif (support.cors || xhrSupported && !options.crossDomain) {\n\t\t\treturn {\n\t\t\t\tsend: function (headers, complete) {\n\t\t\t\t\tvar i,\n\t\t\t\t\t\txhr = options.xhr();\n\n\t\t\t\t\txhr.open(\n\t\t\t\t\t\toptions.type,\n\t\t\t\t\t\toptions.url,\n\t\t\t\t\t\toptions.async,\n\t\t\t\t\t\toptions.username,\n\t\t\t\t\t\toptions.password\n\t\t\t\t\t);\n\n\t\t\t\t\t// Apply custom fields if provided\n\t\t\t\t\tif (options.xhrFields) {\n\t\t\t\t\t\tfor (i in options.xhrFields) {\n\t\t\t\t\t\t\txhr[i] = options.xhrFields[i];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Override mime type if needed\n\t\t\t\t\tif (options.mimeType && xhr.overrideMimeType) {\n\t\t\t\t\t\txhr.overrideMimeType(options.mimeType);\n\t\t\t\t\t}\n\n\t\t\t\t\t// X-Requested-With header\n\t\t\t\t\t// For cross-domain requests, seeing as conditions for a preflight are\n\t\t\t\t\t// akin to a jigsaw puzzle, we simply never set it to be sure.\n\t\t\t\t\t// (it can always be set on a per-request basis or even using ajaxSetup)\n\t\t\t\t\t// For same-domain requests, won't change header if already provided.\n\t\t\t\t\tif (!options.crossDomain && !headers[\"X-Requested-With\"]) {\n\t\t\t\t\t\theaders[\"X-Requested-With\"] = \"XMLHttpRequest\";\n\t\t\t\t\t}\n\n\t\t\t\t\t// Set headers\n\t\t\t\t\tfor (i in headers) {\n\t\t\t\t\t\txhr.setRequestHeader(i, headers[i]);\n\t\t\t\t\t}\n\n\t\t\t\t\t// Callback\n\t\t\t\t\tcallback = function (type) {\n\t\t\t\t\t\treturn function () {\n\t\t\t\t\t\t\tif (callback) {\n\t\t\t\t\t\t\t\tcallback = errorCallback = xhr.onload =\n\t\t\t\t\t\t\t\t\txhr.onerror = xhr.onabort = xhr.ontimeout =\n\t\t\t\t\t\t\t\t\txhr.onreadystatechange = null;\n\n\t\t\t\t\t\t\t\tif (type === \"abort\") {\n\t\t\t\t\t\t\t\t\txhr.abort();\n\t\t\t\t\t\t\t\t} else if (type === \"error\") {\n\n\t\t\t\t\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t\t\t\t\t// On a manual native abort, IE9 throws\n\t\t\t\t\t\t\t\t\t// errors on any property access that is not readyState\n\t\t\t\t\t\t\t\t\tif (typeof xhr.status !== \"number\") {\n\t\t\t\t\t\t\t\t\t\tcomplete(0, \"error\");\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tcomplete(\n\n\t\t\t\t\t\t\t\t\t\t\t// File: protocol always yields status 0; see trac-8605, trac-14207\n\t\t\t\t\t\t\t\t\t\t\txhr.status,\n\t\t\t\t\t\t\t\t\t\t\txhr.statusText\n\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tcomplete(\n\t\t\t\t\t\t\t\t\t\txhrSuccessStatus[xhr.status] || xhr.status,\n\t\t\t\t\t\t\t\t\t\txhr.statusText,\n\n\t\t\t\t\t\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t\t\t\t\t\t// IE9 has no XHR2 but throws on binary (trac-11426)\n\t\t\t\t\t\t\t\t\t\t// For XHR2 non-text, let the caller handle it (gh-2498)\n\t\t\t\t\t\t\t\t\t\t(xhr.responseType || \"text\") !== \"text\" ||\n\t\t\t\t\t\t\t\t\t\t\ttypeof xhr.responseText !== \"string\" ?\n\t\t\t\t\t\t\t\t\t\t\t{ binary: xhr.response } :\n\t\t\t\t\t\t\t\t\t\t\t{ text: xhr.responseText },\n\t\t\t\t\t\t\t\t\t\txhr.getAllResponseHeaders()\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\t\t\t\t\t};\n\n\t\t\t\t\t// Listen to events\n\t\t\t\t\txhr.onload = callback();\n\t\t\t\t\terrorCallback = xhr.onerror = xhr.ontimeout = callback(\"error\");\n\n\t\t\t\t\t// Support: IE 9 only\n\t\t\t\t\t// Use onreadystatechange to replace onabort\n\t\t\t\t\t// to handle uncaught aborts\n\t\t\t\t\tif (xhr.onabort !== undefined) {\n\t\t\t\t\t\txhr.onabort = errorCallback;\n\t\t\t\t\t} else {\n\t\t\t\t\t\txhr.onreadystatechange = function () {\n\n\t\t\t\t\t\t\t// Check readyState before timeout as it changes\n\t\t\t\t\t\t\tif (xhr.readyState === 4) {\n\n\t\t\t\t\t\t\t\t// Allow onerror to be called first,\n\t\t\t\t\t\t\t\t// but that will not handle a native abort\n\t\t\t\t\t\t\t\t// Also, save errorCallback to a variable\n\t\t\t\t\t\t\t\t// as xhr.onerror cannot be accessed\n\t\t\t\t\t\t\t\twindow.setTimeout(function () {\n\t\t\t\t\t\t\t\t\tif (callback) {\n\t\t\t\t\t\t\t\t\t\terrorCallback();\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\t// Create the abort callback\n\t\t\t\t\tcallback = callback(\"abort\");\n\n\t\t\t\t\ttry {\n\n\t\t\t\t\t\t// Do send the request (this may raise an exception)\n\t\t\t\t\t\txhr.send(options.hasContent && options.data || null);\n\t\t\t\t\t} catch (e) {\n\n\t\t\t\t\t\t// trac-14683: Only rethrow if this hasn't been notified as an error yet\n\t\t\t\t\t\tif (callback) {\n\t\t\t\t\t\t\tthrow e;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\t\tabort: function () {\n\t\t\t\t\tif (callback) {\n\t\t\t\t\t\tcallback();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t});\n\n\n\n\n\t// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432)\n\tjQuery.ajaxPrefilter(function (s) {\n\t\tif (s.crossDomain) {\n\t\t\ts.contents.script = false;\n\t\t}\n\t});\n\n\t// Install script dataType\n\tjQuery.ajaxSetup({\n\t\taccepts: {\n\t\t\tscript: \"text/javascript, application/javascript, \" +\n\t\t\t\t\"application/ecmascript, application/x-ecmascript\"\n\t\t},\n\t\tcontents: {\n\t\t\tscript: /\\b(?:java|ecma)script\\b/\n\t\t},\n\t\tconverters: {\n\t\t\t\"text script\": function (text) {\n\t\t\t\tjQuery.globalEval(text);\n\t\t\t\treturn text;\n\t\t\t}\n\t\t}\n\t});\n\n\t// Handle cache's special case and crossDomain\n\tjQuery.ajaxPrefilter(\"script\", function (s) {\n\t\tif (s.cache === undefined) {\n\t\t\ts.cache = false;\n\t\t}\n\t\tif (s.crossDomain) {\n\t\t\ts.type = \"GET\";\n\t\t}\n\t});\n\n\t// Bind script tag hack transport\n\tjQuery.ajaxTransport(\"script\", function (s) {\n\n\t\t// This transport only deals with cross domain or forced-by-attrs requests\n\t\tif (s.crossDomain || s.scriptAttrs) {\n\t\t\tvar script, callback;\n\t\t\treturn {\n\t\t\t\tsend: function (_, complete) {\n\t\t\t\t\tscript = jQuery(\"<script>\")\n\t\t\t\t\t\t.attr(s.scriptAttrs || {})\n\t\t\t\t\t\t.prop({ charset: s.scriptCharset, src: s.url })\n\t\t\t\t\t\t.on(\"load error\", callback = function (evt) {\n\t\t\t\t\t\t\tscript.remove();\n\t\t\t\t\t\t\tcallback = null;\n\t\t\t\t\t\t\tif (evt) {\n\t\t\t\t\t\t\t\tcomplete(evt.type === \"error\" ? 404 : 200, evt.type);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\n\t\t\t\t\t// Use native DOM manipulation to avoid our domManip AJAX trickery\n\t\t\t\t\tdocument.head.appendChild(script[0]);\n\t\t\t\t},\n\t\t\t\tabort: function () {\n\t\t\t\t\tif (callback) {\n\t\t\t\t\t\tcallback();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t});\n\n\n\n\n\tvar oldCallbacks = [],\n\t\trjsonp = /(=)\\?(?=&|$)|\\?\\?/;\n\n\t// Default jsonp settings\n\tjQuery.ajaxSetup({\n\t\tjsonp: \"callback\",\n\t\tjsonpCallback: function () {\n\t\t\tvar callback = oldCallbacks.pop() || (jQuery.expando + \"_\" + (nonce.guid++));\n\t\t\tthis[callback] = true;\n\t\t\treturn callback;\n\t\t}\n\t});\n\n\t// Detect, normalize options and install callbacks for jsonp requests\n\tjQuery.ajaxPrefilter(\"json jsonp\", function (s, originalSettings, jqXHR) {\n\n\t\tvar callbackName, overwritten, responseContainer,\n\t\t\tjsonProp = s.jsonp !== false && (rjsonp.test(s.url) ?\n\t\t\t\t\"url\" :\n\t\t\t\ttypeof s.data === \"string\" &&\n\t\t\t\t(s.contentType || \"\")\n\t\t\t\t\t.indexOf(\"application/x-www-form-urlencoded\") === 0 &&\n\t\t\t\trjsonp.test(s.data) && \"data\"\n\t\t\t);\n\n\t\t// Handle iff the expected data type is \"jsonp\" or we have a parameter to set\n\t\tif (jsonProp || s.dataTypes[0] === \"jsonp\") {\n\n\t\t\t// Get callback name, remembering preexisting value associated with it\n\t\t\tcallbackName = s.jsonpCallback = isFunction(s.jsonpCallback) ?\n\t\t\t\ts.jsonpCallback() :\n\t\t\t\ts.jsonpCallback;\n\n\t\t\t// Insert callback into url or form data\n\t\t\tif (jsonProp) {\n\t\t\t\ts[jsonProp] = s[jsonProp].replace(rjsonp, \"$1\" + callbackName);\n\t\t\t} else if (s.jsonp !== false) {\n\t\t\t\ts.url += (rquery.test(s.url) ? \"&\" : \"?\") + s.jsonp + \"=\" + callbackName;\n\t\t\t}\n\n\t\t\t// Use data converter to retrieve json after script execution\n\t\t\ts.converters[\"script json\"] = function () {\n\t\t\t\tif (!responseContainer) {\n\t\t\t\t\tjQuery.error(callbackName + \" was not called\");\n\t\t\t\t}\n\t\t\t\treturn responseContainer[0];\n\t\t\t};\n\n\t\t\t// Force json dataType\n\t\t\ts.dataTypes[0] = \"json\";\n\n\t\t\t// Install callback\n\t\t\toverwritten = window[callbackName];\n\t\t\twindow[callbackName] = function () {\n\t\t\t\tresponseContainer = arguments;\n\t\t\t};\n\n\t\t\t// Clean-up function (fires after converters)\n\t\t\tjqXHR.always(function () {\n\n\t\t\t\t// If previous value didn't exist - remove it\n\t\t\t\tif (overwritten === undefined) {\n\t\t\t\t\tjQuery(window).removeProp(callbackName);\n\n\t\t\t\t\t// Otherwise restore preexisting value\n\t\t\t\t} else {\n\t\t\t\t\twindow[callbackName] = overwritten;\n\t\t\t\t}\n\n\t\t\t\t// Save back as free\n\t\t\t\tif (s[callbackName]) {\n\n\t\t\t\t\t// Make sure that re-using the options doesn't screw things around\n\t\t\t\t\ts.jsonpCallback = originalSettings.jsonpCallback;\n\n\t\t\t\t\t// Save the callback name for future use\n\t\t\t\t\toldCallbacks.push(callbackName);\n\t\t\t\t}\n\n\t\t\t\t// Call if it was a function and we have a response\n\t\t\t\tif (responseContainer && isFunction(overwritten)) {\n\t\t\t\t\toverwritten(responseContainer[0]);\n\t\t\t\t}\n\n\t\t\t\tresponseContainer = overwritten = undefined;\n\t\t\t});\n\n\t\t\t// Delegate to script\n\t\t\treturn \"script\";\n\t\t}\n\t});\n\n\n\n\n\t// Support: Safari 8 only\n\t// In Safari 8 documents created via document.implementation.createHTMLDocument\n\t// collapse sibling forms: the second one becomes a child of the first one.\n\t// Because of that, this security measure has to be disabled in Safari 8.\n\t// https://bugs.webkit.org/show_bug.cgi?id=137337\n\tsupport.createHTMLDocument = (function () {\n\t\tvar body = document.implementation.createHTMLDocument(\"\").body;\n\t\tbody.innerHTML = \"<form></form><form></form>\";\n\t\treturn body.childNodes.length === 2;\n\t})();\n\n\n\t// Argument \"data\" should be string of html\n\t// context (optional): If specified, the fragment will be created in this context,\n\t// defaults to document\n\t// keepScripts (optional): If true, will include scripts passed in the html string\n\tjQuery.parseHTML = function (data, context, keepScripts) {\n\t\tif (typeof data !== \"string\") {\n\t\t\treturn [];\n\t\t}\n\t\tif (typeof context === \"boolean\") {\n\t\t\tkeepScripts = context;\n\t\t\tcontext = false;\n\t\t}\n\n\t\tvar base, parsed, scripts;\n\n\t\tif (!context) {\n\n\t\t\t// Stop scripts or inline event handlers from being executed immediately\n\t\t\t// by using document.implementation\n\t\t\tif (support.createHTMLDocument) {\n\t\t\t\tcontext = document.implementation.createHTMLDocument(\"\");\n\n\t\t\t\t// Set the base href for the created document\n\t\t\t\t// so any parsed elements with URLs\n\t\t\t\t// are based on the document's URL (gh-2965)\n\t\t\t\tbase = context.createElement(\"base\");\n\t\t\t\tbase.href = document.location.href;\n\t\t\t\tcontext.head.appendChild(base);\n\t\t\t} else {\n\t\t\t\tcontext = document;\n\t\t\t}\n\t\t}\n\n\t\tparsed = rsingleTag.exec(data);\n\t\tscripts = !keepScripts && [];\n\n\t\t// Single tag\n\t\tif (parsed) {\n\t\t\treturn [context.createElement(parsed[1])];\n\t\t}\n\n\t\tparsed = buildFragment([data], context, scripts);\n\n\t\tif (scripts && scripts.length) {\n\t\t\tjQuery(scripts).remove();\n\t\t}\n\n\t\treturn jQuery.merge([], parsed.childNodes);\n\t};\n\n\n\t/**\n\t * Load a url into a page\n\t */\n\tjQuery.fn.load = function (url, params, callback) {\n\t\tvar selector, type, response,\n\t\t\tself = this,\n\t\t\toff = url.indexOf(\" \");\n\n\t\tif (off > -1) {\n\t\t\tselector = stripAndCollapse(url.slice(off));\n\t\t\turl = url.slice(0, off);\n\t\t}\n\n\t\t// If it's a function\n\t\tif (isFunction(params)) {\n\n\t\t\t// We assume that it's the callback\n\t\t\tcallback = params;\n\t\t\tparams = undefined;\n\n\t\t\t// Otherwise, build a param string\n\t\t} else if (params && typeof params === \"object\") {\n\t\t\ttype = \"POST\";\n\t\t}\n\n\t\t// If we have elements to modify, make the request\n\t\tif (self.length > 0) {\n\t\t\tjQuery.ajax({\n\t\t\t\turl: url,\n\n\t\t\t\t// If \"type\" variable is undefined, then \"GET\" method will be used.\n\t\t\t\t// Make value of this field explicit since\n\t\t\t\t// user can override it through ajaxSetup method\n\t\t\t\ttype: type || \"GET\",\n\t\t\t\tdataType: \"html\",\n\t\t\t\tdata: params\n\t\t\t}).done(function (responseText) {\n\n\t\t\t\t// Save response for use in complete callback\n\t\t\t\tresponse = arguments;\n\n\t\t\t\tself.html(selector ?\n\n\t\t\t\t\t// If a selector was specified, locate the right elements in a dummy div\n\t\t\t\t\t// Exclude scripts to avoid IE 'Permission Denied' errors\n\t\t\t\t\tjQuery(\"<div>\").append(jQuery.parseHTML(responseText)).find(selector) :\n\n\t\t\t\t\t// Otherwise use the full result\n\t\t\t\t\tresponseText);\n\n\t\t\t\t// If the request succeeds, this function gets \"data\", \"status\", \"jqXHR\"\n\t\t\t\t// but they are ignored because response was set above.\n\t\t\t\t// If it fails, this function gets \"jqXHR\", \"status\", \"error\"\n\t\t\t}).always(callback && function (jqXHR, status) {\n\t\t\t\tself.each(function () {\n\t\t\t\t\tcallback.apply(this, response || [jqXHR.responseText, status, jqXHR]);\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\n\t\treturn this;\n\t};\n\n\n\n\n\tjQuery.expr.pseudos.animated = function (elem) {\n\t\treturn jQuery.grep(jQuery.timers, function (fn) {\n\t\t\treturn elem === fn.elem;\n\t\t}).length;\n\t};\n\n\n\n\n\tjQuery.offset = {\n\t\tsetOffset: function (elem, options, i) {\n\t\t\tvar curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition,\n\t\t\t\tposition = jQuery.css(elem, \"position\"),\n\t\t\t\tcurElem = jQuery(elem),\n\t\t\t\tprops = {};\n\n\t\t\t// Set position first, in-case top/left are set even on static elem\n\t\t\tif (position === \"static\") {\n\t\t\t\telem.style.position = \"relative\";\n\t\t\t}\n\n\t\t\tcurOffset = curElem.offset();\n\t\t\tcurCSSTop = jQuery.css(elem, \"top\");\n\t\t\tcurCSSLeft = jQuery.css(elem, \"left\");\n\t\t\tcalculatePosition = (position === \"absolute\" || position === \"fixed\") &&\n\t\t\t\t(curCSSTop + curCSSLeft).indexOf(\"auto\") > -1;\n\n\t\t\t// Need to be able to calculate position if either\n\t\t\t// top or left is auto and position is either absolute or fixed\n\t\t\tif (calculatePosition) {\n\t\t\t\tcurPosition = curElem.position();\n\t\t\t\tcurTop = curPosition.top;\n\t\t\t\tcurLeft = curPosition.left;\n\n\t\t\t} else {\n\t\t\t\tcurTop = parseFloat(curCSSTop) || 0;\n\t\t\t\tcurLeft = parseFloat(curCSSLeft) || 0;\n\t\t\t}\n\n\t\t\tif (isFunction(options)) {\n\n\t\t\t\t// Use jQuery.extend here to allow modification of coordinates argument (gh-1848)\n\t\t\t\toptions = options.call(elem, i, jQuery.extend({}, curOffset));\n\t\t\t}\n\n\t\t\tif (options.top != null) {\n\t\t\t\tprops.top = (options.top - curOffset.top) + curTop;\n\t\t\t}\n\t\t\tif (options.left != null) {\n\t\t\t\tprops.left = (options.left - curOffset.left) + curLeft;\n\t\t\t}\n\n\t\t\tif (\"using\" in options) {\n\t\t\t\toptions.using.call(elem, props);\n\n\t\t\t} else {\n\t\t\t\tcurElem.css(props);\n\t\t\t}\n\t\t}\n\t};\n\n\tjQuery.fn.extend({\n\n\t\t// offset() relates an element's border box to the document origin\n\t\toffset: function (options) {\n\n\t\t\t// Preserve chaining for setter\n\t\t\tif (arguments.length) {\n\t\t\t\treturn options === undefined ?\n\t\t\t\t\tthis :\n\t\t\t\t\tthis.each(function (i) {\n\t\t\t\t\t\tjQuery.offset.setOffset(this, options, i);\n\t\t\t\t\t});\n\t\t\t}\n\n\t\t\tvar rect, win,\n\t\t\t\telem = this[0];\n\n\t\t\tif (!elem) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Return zeros for disconnected and hidden (display: none) elements (gh-2310)\n\t\t\t// Support: IE <=11 only\n\t\t\t// Running getBoundingClientRect on a\n\t\t\t// disconnected node in IE throws an error\n\t\t\tif (!elem.getClientRects().length) {\n\t\t\t\treturn { top: 0, left: 0 };\n\t\t\t}\n\n\t\t\t// Get document-relative position by adding viewport scroll to viewport-relative gBCR\n\t\t\trect = elem.getBoundingClientRect();\n\t\t\twin = elem.ownerDocument.defaultView;\n\t\t\treturn {\n\t\t\t\ttop: rect.top + win.pageYOffset,\n\t\t\t\tleft: rect.left + win.pageXOffset\n\t\t\t};\n\t\t},\n\n\t\t// position() relates an element's margin box to its offset parent's padding box\n\t\t// This corresponds to the behavior of CSS absolute positioning\n\t\tposition: function () {\n\t\t\tif (!this[0]) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar offsetParent, offset, doc,\n\t\t\t\telem = this[0],\n\t\t\t\tparentOffset = { top: 0, left: 0 };\n\n\t\t\t// position:fixed elements are offset from the viewport, which itself always has zero offset\n\t\t\tif (jQuery.css(elem, \"position\") === \"fixed\") {\n\n\t\t\t\t// Assume position:fixed implies availability of getBoundingClientRect\n\t\t\t\toffset = elem.getBoundingClientRect();\n\n\t\t\t} else {\n\t\t\t\toffset = this.offset();\n\n\t\t\t\t// Account for the *real* offset parent, which can be the document or its root element\n\t\t\t\t// when a statically positioned element is identified\n\t\t\t\tdoc = elem.ownerDocument;\n\t\t\t\toffsetParent = elem.offsetParent || doc.documentElement;\n\t\t\t\twhile (offsetParent &&\n\t\t\t\t\t(offsetParent === doc.body || offsetParent === doc.documentElement) &&\n\t\t\t\t\tjQuery.css(offsetParent, \"position\") === \"static\") {\n\n\t\t\t\t\toffsetParent = offsetParent.parentNode;\n\t\t\t\t}\n\t\t\t\tif (offsetParent && offsetParent !== elem && offsetParent.nodeType === 1) {\n\n\t\t\t\t\t// Incorporate borders into its offset, since they are outside its content origin\n\t\t\t\t\tparentOffset = jQuery(offsetParent).offset();\n\t\t\t\t\tparentOffset.top += jQuery.css(offsetParent, \"borderTopWidth\", true);\n\t\t\t\t\tparentOffset.left += jQuery.css(offsetParent, \"borderLeftWidth\", true);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Subtract parent offsets and element margins\n\t\t\treturn {\n\t\t\t\ttop: offset.top - parentOffset.top - jQuery.css(elem, \"marginTop\", true),\n\t\t\t\tleft: offset.left - parentOffset.left - jQuery.css(elem, \"marginLeft\", true)\n\t\t\t};\n\t\t},\n\n\t\t// This method will return documentElement in the following cases:\n\t\t// 1) For the element inside the iframe without offsetParent, this method will return\n\t\t//    documentElement of the parent window\n\t\t// 2) For the hidden or detached element\n\t\t// 3) For body or html element, i.e. in case of the html node - it will return itself\n\t\t//\n\t\t// but those exceptions were never presented as a real life use-cases\n\t\t// and might be considered as more preferable results.\n\t\t//\n\t\t// This logic, however, is not guaranteed and can change at any point in the future\n\t\toffsetParent: function () {\n\t\t\treturn this.map(function () {\n\t\t\t\tvar offsetParent = this.offsetParent;\n\n\t\t\t\twhile (offsetParent && jQuery.css(offsetParent, \"position\") === \"static\") {\n\t\t\t\t\toffsetParent = offsetParent.offsetParent;\n\t\t\t\t}\n\n\t\t\t\treturn offsetParent || documentElement;\n\t\t\t});\n\t\t}\n\t});\n\n\t// Create scrollLeft and scrollTop methods\n\tjQuery.each({ scrollLeft: \"pageXOffset\", scrollTop: \"pageYOffset\" }, function (method, prop) {\n\t\tvar top = \"pageYOffset\" === prop;\n\n\t\tjQuery.fn[method] = function (val) {\n\t\t\treturn access(this, function (elem, method, val) {\n\n\t\t\t\t// Coalesce documents and windows\n\t\t\t\tvar win;\n\t\t\t\tif (isWindow(elem)) {\n\t\t\t\t\twin = elem;\n\t\t\t\t} else if (elem.nodeType === 9) {\n\t\t\t\t\twin = elem.defaultView;\n\t\t\t\t}\n\n\t\t\t\tif (val === undefined) {\n\t\t\t\t\treturn win ? win[prop] : elem[method];\n\t\t\t\t}\n\n\t\t\t\tif (win) {\n\t\t\t\t\twin.scrollTo(\n\t\t\t\t\t\t!top ? val : win.pageXOffset,\n\t\t\t\t\t\ttop ? val : win.pageYOffset\n\t\t\t\t\t);\n\n\t\t\t\t} else {\n\t\t\t\t\telem[method] = val;\n\t\t\t\t}\n\t\t\t}, method, val, arguments.length);\n\t\t};\n\t});\n\n\t// Support: Safari <=7 - 9.1, Chrome <=37 - 49\n\t// Add the top/left cssHooks using jQuery.fn.position\n\t// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084\n\t// Blink bug: https://bugs.chromium.org/p/chromium/issues/detail?id=589347\n\t// getComputedStyle returns percent when specified for top/left/bottom/right;\n\t// rather than make the css module depend on the offset module, just check for it here\n\tjQuery.each([\"top\", \"left\"], function (_i, prop) {\n\t\tjQuery.cssHooks[prop] = addGetHookIf(support.pixelPosition,\n\t\t\tfunction (elem, computed) {\n\t\t\t\tif (computed) {\n\t\t\t\t\tcomputed = curCSS(elem, prop);\n\n\t\t\t\t\t// If curCSS returns percentage, fallback to offset\n\t\t\t\t\treturn rnumnonpx.test(computed) ?\n\t\t\t\t\t\tjQuery(elem).position()[prop] + \"px\" :\n\t\t\t\t\t\tcomputed;\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\t});\n\n\n\t// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods\n\tjQuery.each({ Height: \"height\", Width: \"width\" }, function (name, type) {\n\t\tjQuery.each({\n\t\t\tpadding: \"inner\" + name,\n\t\t\tcontent: type,\n\t\t\t\"\": \"outer\" + name\n\t\t}, function (defaultExtra, funcName) {\n\n\t\t\t// Margin is only for outerHeight, outerWidth\n\t\t\tjQuery.fn[funcName] = function (margin, value) {\n\t\t\t\tvar chainable = arguments.length && (defaultExtra || typeof margin !== \"boolean\"),\n\t\t\t\t\textra = defaultExtra || (margin === true || value === true ? \"margin\" : \"border\");\n\n\t\t\t\treturn access(this, function (elem, type, value) {\n\t\t\t\t\tvar doc;\n\n\t\t\t\t\tif (isWindow(elem)) {\n\n\t\t\t\t\t\t// $( window ).outerWidth/Height return w/h including scrollbars (gh-1729)\n\t\t\t\t\t\treturn funcName.indexOf(\"outer\") === 0 ?\n\t\t\t\t\t\t\telem[\"inner\" + name] :\n\t\t\t\t\t\t\telem.document.documentElement[\"client\" + name];\n\t\t\t\t\t}\n\n\t\t\t\t\t// Get document width or height\n\t\t\t\t\tif (elem.nodeType === 9) {\n\t\t\t\t\t\tdoc = elem.documentElement;\n\n\t\t\t\t\t\t// Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height],\n\t\t\t\t\t\t// whichever is greatest\n\t\t\t\t\t\treturn Math.max(\n\t\t\t\t\t\t\telem.body[\"scroll\" + name], doc[\"scroll\" + name],\n\t\t\t\t\t\t\telem.body[\"offset\" + name], doc[\"offset\" + name],\n\t\t\t\t\t\t\tdoc[\"client\" + name]\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\n\t\t\t\t\treturn value === undefined ?\n\n\t\t\t\t\t\t// Get width or height on the element, requesting but not forcing parseFloat\n\t\t\t\t\t\tjQuery.css(elem, type, extra) :\n\n\t\t\t\t\t\t// Set width or height on the element\n\t\t\t\t\t\tjQuery.style(elem, type, value, extra);\n\t\t\t\t}, type, chainable ? margin : undefined, chainable);\n\t\t\t};\n\t\t});\n\t});\n\n\n\tjQuery.each([\n\t\t\"ajaxStart\",\n\t\t\"ajaxStop\",\n\t\t\"ajaxComplete\",\n\t\t\"ajaxError\",\n\t\t\"ajaxSuccess\",\n\t\t\"ajaxSend\"\n\t], function (_i, type) {\n\t\tjQuery.fn[type] = function (fn) {\n\t\t\treturn this.on(type, fn);\n\t\t};\n\t});\n\n\n\n\n\tjQuery.fn.extend({\n\n\t\tbind: function (types, data, fn) {\n\t\t\treturn this.on(types, null, data, fn);\n\t\t},\n\t\tunbind: function (types, fn) {\n\t\t\treturn this.off(types, null, fn);\n\t\t},\n\n\t\tdelegate: function (selector, types, data, fn) {\n\t\t\treturn this.on(types, selector, data, fn);\n\t\t},\n\t\tundelegate: function (selector, types, fn) {\n\n\t\t\t// ( namespace ) or ( selector, types [, fn] )\n\t\t\treturn arguments.length === 1 ?\n\t\t\t\tthis.off(selector, \"**\") :\n\t\t\t\tthis.off(types, selector || \"**\", fn);\n\t\t},\n\n\t\thover: function (fnOver, fnOut) {\n\t\t\treturn this.mouseenter(fnOver).mouseleave(fnOut || fnOver);\n\t\t}\n\t});\n\n\tjQuery.each(\n\t\t(\"blur focus focusin focusout resize scroll click dblclick \" +\n\t\t\t\"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave \" +\n\t\t\t\"change select submit keydown keypress keyup contextmenu\").split(\" \"),\n\t\tfunction (_i, name) {\n\n\t\t\t// Handle event binding\n\t\t\tjQuery.fn[name] = function (data, fn) {\n\t\t\t\treturn arguments.length > 0 ?\n\t\t\t\t\tthis.on(name, null, data, fn) :\n\t\t\t\t\tthis.trigger(name);\n\t\t\t};\n\t\t}\n\t);\n\n\n\n\n\t// Support: Android <=4.0 only\n\t// Make sure we trim BOM and NBSP\n\t// Require that the \"whitespace run\" starts from a non-whitespace\n\t// to avoid O(N^2) behavior when the engine would try matching \"\\s+$\" at each space position.\n\tvar rtrim = /^[\\s\\uFEFF\\xA0]+|([^\\s\\uFEFF\\xA0])[\\s\\uFEFF\\xA0]+$/g;\n\n\t// Bind a function to a context, optionally partially applying any\n\t// arguments.\n\t// jQuery.proxy is deprecated to promote standards (specifically Function#bind)\n\t// However, it is not slated for removal any time soon\n\tjQuery.proxy = function (fn, context) {\n\t\tvar tmp, args, proxy;\n\n\t\tif (typeof context === \"string\") {\n\t\t\ttmp = fn[context];\n\t\t\tcontext = fn;\n\t\t\tfn = tmp;\n\t\t}\n\n\t\t// Quick check to determine if target is callable, in the spec\n\t\t// this throws a TypeError, but we will just return undefined.\n\t\tif (!isFunction(fn)) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\t// Simulated bind\n\t\targs = slice.call(arguments, 2);\n\t\tproxy = function () {\n\t\t\treturn fn.apply(context || this, args.concat(slice.call(arguments)));\n\t\t};\n\n\t\t// Set the guid of unique handler to the same of original handler, so it can be removed\n\t\tproxy.guid = fn.guid = fn.guid || jQuery.guid++;\n\n\t\treturn proxy;\n\t};\n\n\tjQuery.holdReady = function (hold) {\n\t\tif (hold) {\n\t\t\tjQuery.readyWait++;\n\t\t} else {\n\t\t\tjQuery.ready(true);\n\t\t}\n\t};\n\tjQuery.isArray = Array.isArray;\n\tjQuery.parseJSON = JSON.parse;\n\tjQuery.nodeName = nodeName;\n\tjQuery.isFunction = isFunction;\n\tjQuery.isWindow = isWindow;\n\tjQuery.camelCase = camelCase;\n\tjQuery.type = toType;\n\n\tjQuery.now = Date.now;\n\n\tjQuery.isNumeric = function (obj) {\n\n\t\t// As of jQuery 3.0, isNumeric is limited to\n\t\t// strings and numbers (primitives or objects)\n\t\t// that can be coerced to finite numbers (gh-2662)\n\t\tvar type = jQuery.type(obj);\n\t\treturn (type === \"number\" || type === \"string\") &&\n\n\t\t\t// parseFloat NaNs numeric-cast false positives (\"\")\n\t\t\t// ...but misinterprets leading-number strings, particularly hex literals (\"0x...\")\n\t\t\t// subtraction forces infinities to NaN\n\t\t\t!isNaN(obj - parseFloat(obj));\n\t};\n\n\tjQuery.trim = function (text) {\n\t\treturn text == null ?\n\t\t\t\"\" :\n\t\t\t(text + \"\").replace(rtrim, \"$1\");\n\t};\n\n\n\n\t// Register as a named AMD module, since jQuery can be concatenated with other\n\t// files that may use define, but not via a proper concatenation script that\n\t// understands anonymous AMD modules. A named AMD is safest and most robust\n\t// way to register. Lowercase jquery is used because AMD module names are\n\t// derived from file names, and jQuery is normally delivered in a lowercase\n\t// file name. Do this after creating the global so that if an AMD module wants\n\t// to call noConflict to hide this version of jQuery, it will work.\n\n\t// Note that for maximum portability, libraries that are not jQuery should\n\t// declare themselves as anonymous modules, and avoid setting a global if an\n\t// AMD loader is present. jQuery is a special case. For more information, see\n\t// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon\n\n\tif (typeof define === \"function\" && define.amd) {\n\t\tdefine(\"jquery\", [], function () {\n\t\t\treturn jQuery;\n\t\t});\n\t}\n\n\n\n\n\tvar\n\n\t\t// Map over jQuery in case of overwrite\n\t\t_jQuery = window.jQuery,\n\n\t\t// Map over the $ in case of overwrite\n\t\t_$ = window.$;\n\n\tjQuery.noConflict = function (deep) {\n\t\tif (window.$ === jQuery) {\n\t\t\twindow.$ = _$;\n\t\t}\n\n\t\tif (deep && window.jQuery === jQuery) {\n\t\t\twindow.jQuery = _jQuery;\n\t\t}\n\n\t\treturn jQuery;\n\t};\n\n\t// Expose jQuery and $ identifiers, even in AMD\n\t// (trac-7102#comment:10, https://github.com/jquery/jquery/pull/557)\n\t// and CommonJS for browser emulators (trac-13566)\n\tif (typeof noGlobal === \"undefined\") {\n\t\twindow.jQuery = window.$ = jQuery;\n\t}\n\n\n\n\n\treturn jQuery;\n});"
  },
  {
    "path": "src/sourceDev.WebApp/Startup.cs",
    "content": "﻿using Microsoft.AspNetCore.Builder;\nusing Microsoft.AspNetCore.Hosting;\nusing Microsoft.AspNetCore.Http;\nusing Microsoft.AspNetCore.HttpOverrides;\nusing Microsoft.Extensions.Configuration;\nusing Microsoft.Extensions.DependencyInjection;\nusing Microsoft.Extensions.Hosting;\nusing Microsoft.Extensions.Logging;\nusing Microsoft.Extensions.Options;\nusing System;\n\nnamespace sourceDev.WebApp\n{\n    public class Startup\n    {\n        public Startup(\n            IConfiguration configuration,\n            IWebHostEnvironment env\n            )\n        {\n            _configuration = configuration;\n            _environment = env;\n\n            _sslIsAvailable = _configuration.GetValue<bool>(\"AppSettings:UseSsl\");\n            _enableWebpackMiddleware = _configuration.GetValue<bool>(\"DevOptions:EnableWebpackMiddleware\");\n        }\n\n        private readonly IConfiguration _configuration;\n        private readonly IWebHostEnvironment _environment;\n        private readonly bool _sslIsAvailable;\n        private bool _enableWebpackMiddleware;\n\n\n        // This method gets called by the runtime. Use this method to add services to the container.\n        public void ConfigureServices(IServiceCollection services)\n        {\n            services.AddMemoryCache();\n\n            //// **** VERY IMPORTANT *****\n            // This is a custom extension method in Config/DataProtection.cs\n            // These settings require your review to correctly configur data protection for your environment\n            services.SetupDataProtection(_configuration, _environment);\n\n            services.AddAuthorization(options =>\n            {\n                //https://docs.asp.net/en/latest/security/authorization/policies.html\n                //** IMPORTANT ***\n                //This is a custom extension method in Config/Authorization.cs\n                //That is where you can review or customize or add additional authorization policies\n                options.SetupAuthorizationPolicies();\n\n            });\n\n            //// **** IMPORTANT *****\n            // This is a custom extension method in Config/CloudscribeFeatures.cs\n            services.SetupDataStorage(_configuration, _environment);\n\n\n            //*** Important ***\n            // This is a custom extension method in Config/CloudscribeFeatures.cs\n            services.SetupCloudscribeFeatures(_configuration);\n\n            //*** Important ***\n            // This is a custom extension method in Config/Localization.cs\n            services.SetupLocalization(_configuration);\n\n            services.Configure<CookiePolicyOptions>(options =>\n            {\n                // This lambda determines whether user consent for non-essential cookies is needed for a given request.\n                options.CheckConsentNeeded = cloudscribe.Core.Identity.SiteCookieConsent.NeedsConsent;\n                options.MinimumSameSitePolicy = Microsoft.AspNetCore.Http.SameSiteMode.None;\n                options.ConsentCookie.Name = \"cookieconsent_status\";\n                options.Secure = CookieSecurePolicy.Always;\n            });\n\n            if (_sslIsAvailable)\n            {\n                services.AddHsts(options =>\n                {\n                    options.Preload = true;\n                    options.IncludeSubDomains = true;\n                    options.MaxAge = TimeSpan.FromDays(180);\n                });\n            }\n\n            services.Configure<Microsoft.AspNetCore.Mvc.CookieTempDataProviderOptions>(options =>\n            {\n                options.Cookie.IsEssential = true;\n            });\n\n            //*** Important ***\n            // This is a custom extension method in Config/RoutingAndMvc.cs\n            services.SetupMvc(_sslIsAvailable);\n\n            if(!_environment.IsDevelopment())\n            {\n                var httpsPort = _configuration.GetValue<int>(\"AppSettings:HttpsPort\");\n                services.AddHttpsRedirection(options =>\n                {\n                    options.RedirectStatusCode = StatusCodes.Status307TemporaryRedirect;\n                    options.HttpsPort = httpsPort;\n                });\n            }\n\n\n        }\n\n        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.\n        public void Configure(\n            IServiceProvider serviceProvider,\n            IApplicationBuilder app,\n            IWebHostEnvironment env,\n            ILoggerFactory loggerFactory,\n            IOptions<cloudscribe.Core.Models.MultiTenantOptions> multiTenantOptionsAccessor,\n            IOptions<RequestLocalizationOptions> localizationOptionsAccessor\n            )\n        {\n            // When running behind a proxy, the request to the proxy may be made via https,\n            // but the proxy may be configured to talk to cloudscribe by http only. In that case,\n            // we want our httpContext to contain the correct client IP address (rather than 127.0.0.1)\n            // and the correct protocol (https).\n            // See: https://docs.microsoft.com/en-us/aspnet/core/host-and-deploy/linux-apache?view=aspnetcore-3.1#configure-apache\n            app.UseForwardedHeaders(new ForwardedHeadersOptions\n            {\n                ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto\n            });\n\n\n            if (env.IsDevelopment())\n            {\n                app.UseDeveloperExceptionPage();\n            }\n            else\n            {\n                app.UseExceptionHandler(\"/oops/error\");\n                if(_sslIsAvailable)\n                {\n                    app.UseHsts();\n                }\n            }\n            if(_sslIsAvailable)\n            {\n                app.UseHttpsRedirection();\n            }\n\n            app.UseStaticFiles();\n            app.UseCloudscribeCommonStaticFiles();\n            app.UseCookiePolicy();\n\n            //app.UseRouting();\n\n            app.UseRequestLocalization(localizationOptionsAccessor.Value);\n\n            var multiTenantOptions = multiTenantOptionsAccessor.Value;\n\n            app.UseCloudscribeCore();\n\n\n#pragma warning disable MVC1005 // Cannot use UseMvc with Endpoint Routing.\n// workaround for\n//https://github.com/cloudscribe/cloudscribe.SimpleContent/issues/466\n app.UseMvc(routes =>\n            {\n                var useFolders = multiTenantOptions.Mode == cloudscribe.Core.Models.MultiTenantMode.FolderName;\n                //*** IMPORTANT ***\n                // this is in Config/RoutingAndMvc.cs\n                // you can change or add routes there\n                routes.UseCustomRoutes(useFolders, _configuration);\n            });\n#pragma warning restore MVC1005 // Cannot use UseMvc with Endpoint Routing.\n\n//             app.UseEndpoints(endpoints =>\n//             {\n//                 var useFolders = multiTenantOptions.Mode == cloudscribe.Core.Models.MultiTenantMode.FolderName;\n//                 //*** IMPORTANT ***\n//                 // this is in Config/RoutingAndMvc.cs\n//                 // you can change or add routes there\n//                 endpoints.UseCustomRoutes(useFolders);\n//             });\n\n        }\n\n\n\n    }\n}"
  },
  {
    "path": "src/sourceDev.WebApp/Views/Home/About.cshtml",
    "content": "﻿@{\n    ViewData[\"Title\"] = \"About\";\n}\n<h1>@ViewData[\"Title\"].</h1>\n<h3>@ViewData[\"Message\"]</h3>\n\n<p>Use this area to provide additional information.</p>\n"
  },
  {
    "path": "src/sourceDev.WebApp/Views/Home/Contact.cshtml",
    "content": "﻿@{\n    ViewData[\"Title\"] = \"Contact\";\n}\n<h1>@ViewData[\"Title\"].</h1>\n<h3>@ViewData[\"Message\"]</h3>\n\n<address>\n    One Microsoft Way<br />\n    Redmond, WA 98052-6399<br />\n    <abbr title=\"Phone\">P:</abbr>\n    425.555.0100\n</address>\n\n<address>\n    <strong>Support:</strong> <a href=\"mailto:Support@example.com\">Support@example.com</a><br />\n    <strong>Marketing:</strong> <a href=\"mailto:Marketing@example.com\">Marketing@example.com</a>\n</address>\n"
  },
  {
    "path": "src/sourceDev.WebApp/Views/Home/Index.cshtml",
    "content": "﻿@{\n    ViewData[\"Title\"] = \"Home Page\";\n}\n\n<div class=\"text-center\">\n    <h1 class=\"display-4\">Welcome</h1>\n    <p>Learn about <a href=\"https://docs.microsoft.com/aspnet/core\">building Web apps with ASP.NET Core</a>.</p>\n    <p>Learn about <a href=\"https://www.cloudscribe.com/docs\">building ASP.NET Core Web apps with cloudscribe</a>.</p>\n</div>\n"
  },
  {
    "path": "src/sourceDev.WebApp/Views/Shared/AlertsPartial.cshtml",
    "content": "﻿@using cloudscribe.Web.Common.Extensions\n@using cloudscribe.Web.Common\n@using Microsoft.Extensions.Options\n@using Microsoft.Extensions.Localization\n@inject IStringLocalizer<CloudscribeCommonResources> sr\n@{\n    var alerts = TempData.GetAlerts();\n    foreach (var alert in alerts)\n    {\n        var dismissableClass = alert.Dismissable ? \"alert-dismissable\" : null;\n        <div role=\"alert\" class=\"alert alert-@alert.AlertStyle @dismissableClass\">\n            @if (alert.Dismissable)\n            {\n                <button type=\"button\" class=\"btn-close float-end\" data-bs-dismiss=\"alert\" aria-hidden=\"true\" aria-label='@sr[\"Close\"]'></button>\n            }\n            @Html.Raw(alert.Message)\n        </div>\n    }  \n}\n"
  },
  {
    "path": "src/sourceDev.WebApp/Views/Shared/_CookieConsentPartial.cshtml",
    "content": "﻿@using Microsoft.AspNetCore.Http.Features\n@inject IStringLocalizer<CloudscribeCore> sr\n@inject ISiteContextResolver siteResolver\n@{\n    var consentFeature = Context.Features.Get<ITrackingConsentFeature>();\n    var showBanner = !consentFeature?.CanTrack ?? false;\n\tif(Context.Request.Path.ToString().Contains(\"/offline\")) { showBanner = false; }\n    var cookieString = consentFeature?.CreateConsentCookie();\n    var policySummary = sr[\"To ensure you get the best experience, this website uses cookies.\"];\n    var tenant = await siteResolver.ResolveSite(Context.Request.Host.Host, Context.Request.Path);\n    if(tenant != null && !string.IsNullOrWhiteSpace(tenant.CookiePolicySummary))\n    {\n        policySummary = sr[tenant.CookiePolicySummary];\n    }\n}\n@if (showBanner)\n{\n    <div id=\"cookieConsent\" class=\"alert alert-dark mt-2\" style=\"min-height:60px;\" role=\"alert\">\n        <p class=\"float-left\">\n            <span class=\"float-left me-2\"><i class=\"glyphicon glyphicon-info-sign fas fa-info-circle fa-2x\" aria-hidden=\"true\"></i></span>\n            @policySummary\n        </p>\n        <div class=\"float-lg-left\">\n            <a asp-controller=\"Privacy\" asp-action=\"Index\" class=\"btn btn-info  ms-2 mb-1\">@sr[\"Learn More\"]</a>\n            <button type=\"button\" class=\"btn btn-primary ms-2 mb-1\" data-cookie-string=\"@cookieString\">Accept</button>\n        </div>\n    </div>\n    <script>\n        (function () {\n            document.querySelector(\"#cookieConsent button[data-cookie-string]\").addEventListener(\"click\", function (el) {\n                document.cookie = el.target.dataset.cookieString;\n                document.querySelector(\"#cookieConsent\").classList.add(\"collapse\");\n            }, false);\n        })();\n    </script>\n}"
  },
  {
    "path": "src/sourceDev.WebApp/Views/Shared/_CookieConsentRevokePartial.cshtml",
    "content": "﻿@using Microsoft.AspNetCore.Http.Features\n@inject IStringLocalizer<CloudscribeCore> sr\n@{\n    bool showRevoke = false;\n    var consentFeature = Context.Features.Get<ITrackingConsentFeature>();\n    if(consentFeature != null && consentFeature.IsConsentNeeded)\n    {\n        showRevoke = consentFeature.CanTrack;\n    }\n\tif (Context.Request.Path.ToString().Contains(\"/offline\")) { showRevoke = false; }\n\n}\n@if (showRevoke)\n{\n    <form style=\"display:inline\" asp-controller=\"Privacy\" asp-action=\"WithdrawCookieConsent\" method=\"post\">\n        <button type=\"submit\" class=\"btn btn-link\">@sr[\"Revoke Cookie Consent\"]</button>\n    </form>\n}\n"
  },
  {
    "path": "src/sourceDev.WebApp/Views/Shared/_Layout.cshtml",
    "content": "﻿@inject ISiteContextResolver siteResolver\n@inject ICoreThemeHelper themeHelper\n@{\n    var themeSettings = themeHelper.GetThemeSettings();\n    @*\n        These settings can be set by a main view to show additional columns.\n        Views that push content into the optional sections SideNav, AsidePrimary, and AsideSecondary\n        are obligated to set the needed viewtate property to true to show the section,\n        otherwise an error will occur.\n        The sideNav column also supports a toggle so it can be hidden and toggled visible even though it renders.\n    *@\n    bool sideNavVisible = true.Equals(ViewData[\"SideNavVisible\"]);\n    string sideNavToggleClass = ViewData[\"SideNavToggle\"]?.ToString() ?? \"collapse\";\n    bool asidePrimaryVisible = true.Equals(ViewData[\"AsidePrimaryVisible\"]);\n    bool asideSecondaryVisible = true.Equals(ViewData[\"AsideSecondaryVisible\"]);\n    var Tenant = await siteResolver.ResolveSite(Context.Request.Host.Host, Context.Request.Path);\n    var siteRoot = \"\";\n    if (!string.IsNullOrWhiteSpace(Tenant.SiteFolderName)) { siteRoot = \"/\" + Tenant.SiteFolderName; }\n    \n}\n<!DOCTYPE html>\n<html lang=\"@CultureInfo.CurrentUICulture.Name\">\n<head>\n    <meta charset=\"utf-8\" />\n    <title>@ViewData[\"Title\"] - @(Tenant?.SiteName ?? \"Sample\")</title>\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1, shrink-to-fit=no\">\n    @RenderSection(\"Meta\", required: false)\n    <environment names=\"Development\">\n        <link rel=\"stylesheet\" href=\"~/css/bootstrap.css\"  />\n        <link rel=\"stylesheet\" href=\"~/css/fontawesome-all.min.css\"  />\n        <link rel=\"stylesheet\" href=\"~/css/site.css\"  />\n    </environment>\n    <environment names=\"Staging,Production\">\n        <link rel=\"stylesheet\" href=\"~/css/bootstrap.min.css\"  />\n        <link rel=\"stylesheet\" href=\"~/css/fontawesome-all.min.css\"  />\n        <link rel=\"stylesheet\" href=\"~/css/site.min.css\"  />\n    </environment>\n    @RenderSection(\"Styles\", required: false)    \n    \n    <google-analytics profile-id=\"@Tenant.GoogleAnalyticsProfileId\" user-id=\"@User.GetUserId()\"></google-analytics>\n    <base href=\"@Context.Request.Path\" />\n</head>\n<body class=\"d-flex flex-column @ViewData[\"BodyClass\"]\" style=\"@themeSettings.GetBodyStyle()\">\n    <header>\n        <a id=\"skippy\" class=\"visually-hidden visually-hidden-focusable\" href=\"#content\">\n            <div class=\"container\">\n                <span class=\"skiplink-text\">Skip to main content</span>\n            </div>\n        </a>\n        <nav class=\"navbar navbar-expand-lg navbar-dark fixed-top bg-dark pt-0 pb-0\" style=\"@themeSettings.GetNavbarStyle()\">\n               @if (!string.IsNullOrWhiteSpace(Tenant.LogoUrl))\n                {\n                    <div>\n                         <partial name=\"SiteLogoPartial\" model=\"@Tenant\" />\n                    </div>\n                }\n                @if (Tenant.ShowSiteNameLink)\n                {\n                    <div class=\"align-self-center pt-4 pt-sm-0\">\n                         <partial name=\"SiteTitlePartial\" model=\"@Tenant\" />\n                    </div>\n                }\n                @if (!string.IsNullOrWhiteSpace(Tenant.HeaderContent))\n                {\n                    <div class=\"flex-fill align-self-center pt-3 d-none d-sm-block\">\n                        <partial name=\"SiteHeaderPartial\" />\n                    </div>\n                }\n            <button class=\"navbar-toggler\" type=\"button\" data-bs-toggle=\"collapse\" data-bs-target=\"#navbarNavDropdown\" aria-controls=\"navbarNavDropdown\" aria-expanded=\"false\" aria-label=\"Toggle navigation\">\n                <span class=\"navbar-toggler-icon\"></span>\n            </button>\n\n            <div class=\"collapse navbar-collapse bg-dark ps-2\" id=\"navbarNavDropdown\">\n                @await Component.InvokeAsync(\"Navigation\", new { viewName = \"Bootstrap5TopNavWithDropdowns\", filterName = NamedNavigationFilters.TopNav, startingNodeKey = \"\" })\n                <partial name=\"_LoginPartialWithDropdowns\" />\n            </div>\n        </nav>\n    </header>\n    <div id=\"wrapper\" class=\"container-fluid cs-container flex-fill\">\n        @await Component.InvokeAsync(\"Navigation\", new { viewName = \"Bootstrap5Breadcrumbs\", filterName = NamedNavigationFilters.Breadcrumbs, startingNodeKey = \"\" })\n        <div class=\"row\">\n            <main id=\"content\" class=\"col order-3\">\n                <partial name=\"AlertsPartial\" />\n                <partial name=\"_CookieConsentPartial\" />\n                <partial name=\"_AutoLogoutWarningPartial\" />\n                @RenderBody()\n            </main>\n            @if (sideNavVisible)\n            {\n                <nav id=\"sidenavmenu\" class=\" col col-3 order-1 @sideNavToggleClass\">\n                    @RenderSection(\"SideNav\", required: false)\n                </nav>\n\n            }\n            @if (asideSecondaryVisible)\n            {\n                <aside id=\"asideSecondary\" class=\"col col-1 order-2\">\n                    @RenderSection(\"AsideSecondary\", required: false)\n                </aside>\n\n            }\n            @if (asidePrimaryVisible)\n            {\n                <aside id=\"asidePrimary\" class=\"col-12 col-md-3 col-sm-12  col-sm-12 order-4\">\n                    @RenderSection(\"AsidePrimary\", required: false)\n                </aside>\n\n            }\n        </div>\n    </div>\n    <footer class=\"sticky-bottom border pt-2 d-flex h-100 flex-wrap flex-grow justify-content-center\">\n        <partial name=\"SiteFooterPartial\" />\n        <div class=\"p-2\">\n            <ul class=\"list-unstyled d-flex flex-wrap\">\n                @if (Tenant != null && !string.IsNullOrWhiteSpace(Tenant.PrivacyPolicy))\n                {\n                    <li class=\"border-left ps-2 me-2\">\n                        <a asp-controller=\"Privacy\" asp-action=\"Index\">Privacy Policy</a>\n                    </li>\n                }\n\n                  @* uncomment if you want the registration agreement in the footer*@\n                    @*                    \n                    @if (Tenant != null && !string.IsNullOrWhiteSpace(Tenant.RegistrationAgreement))\n                    {\n                        <li class=\"border-left ps-2 me-2\">\n                            <a asp-controller=\"registrationagreement\" asp-action=\"Index\">Registration Agreement</a>\n                        </li>\n                    }\n                    *@\n\n                <li class=\"border-left ps-2 me-2\">\n                    @* you are free to remove the powered by cloudscribe link but we appreciate it if you choose to keep it! *@\n                    <a class=\"text-nowrap\" target=\"_blank\" href=\"https://www.cloudscribe.com/?utm_source=@Context.Request.Host.Value&amp;utm_medium=referral&amp;utm_campaign=poweredbycloudscribe\">Powered by cloudscribe</a>\n                </li>\n            </ul>\n        </div>\n        <div class=\"p-2 text-nowrap\">Copyright &copy; @DateTime.Now.Year - @(Tenant?.SiteName ?? \"Sample\")</div>\n        <partial name=\"_CookieConsentRevokePartial\" />\n    </footer>\n    @RenderSection(\"Toolbar\", required: false)\n    <environment names=\"Development\">\n        <script src=\"~/js/jquery.js\"></script>\n        <script src=\"~/js/bootstrap.bundle.js\"></script>\n        <script src=\"~/cr/js/bs4.smartmenus.min.js\"></script>\n    </environment>\n    <environment names=\"Staging,Production\">\n        <script src=\"~/js/jquery.min.js\"></script>\n        <script src=\"~/js/bootstrap.bundle.min.js\"></script>\n        <script src=\"~/cr/js/bs4.smartmenus.min.js\"></script>\n    </environment>\n    @RenderSection(\"Bottom\", required: false)\n    @RenderSection(\"Scripts\", required: false)     \n    @Html.RenderResources(\"js\") @*render any js resources declared via helpers in partial views etc*@\n    <add-this profile-id=\"@Tenant.AddThisDotComUsername\" async></add-this>\n</body>\n</html>\n"
  },
  {
    "path": "src/sourceDev.WebApp/Views/Shared/_ValidationScriptsPartial.cshtml",
    "content": "<environment include=\"Development\">\n    <script src=\"~/lib/jquery-validation/dist/jquery.validate.js\"></script>\n    <script src=\"~/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.js\"></script>\n</environment>\n<environment exclude=\"Development\">\n    <script src=\"https://ajax.aspnetcdn.com/ajax/jquery.validate/1.14.0/jquery.validate.min.js\"\n            asp-fallback-src=\"~/lib/jquery-validation/dist/jquery.validate.min.js\"\n            asp-fallback-test=\"window.jQuery && window.jQuery.validator\"\n            crossorigin=\"anonymous\"\n            integrity=\"sha384-Fnqn3nxp3506LP/7Y3j/25BlWeA3PXTyT1l78LjECcPaKCV12TsZP7yyMxOe/G/k\">\n    </script>\n    <script src=\"https://ajax.aspnetcdn.com/ajax/jquery.validation.unobtrusive/3.2.6/jquery.validate.unobtrusive.min.js\"\n            asp-fallback-src=\"~/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.min.js\"\n            asp-fallback-test=\"window.jQuery && window.jQuery.validator && window.jQuery.validator.unobtrusive\"\n            crossorigin=\"anonymous\"\n            integrity=\"sha384-JrXK+k53HACyavUKOsL+NkmSesD2P+73eDMrbTtTk0h4RmOF8hF8apPlkp26JlyH\">\n    </script>\n</environment>\n"
  },
  {
    "path": "src/sourceDev.WebApp/Views/_ViewImports.cshtml",
    "content": "@using sourceDev.WebApp\n@using System\n@using System.Collections.Generic\n@using System.Globalization\n@using System.Linq\n@using Microsoft.AspNetCore.Http\n@using Microsoft.AspNetCore.Authentication\n@using Microsoft.AspNetCore.Identity\n@using Microsoft.AspNetCore.Localization\n@using Microsoft.Extensions.Localization\n@using Microsoft.Extensions.Options\n@using cloudscribe.Core.Models\n@using cloudscribe.Core.Identity\n@using cloudscribe.Core.Web\n@using cloudscribe.Core.Web.Components\n@using cloudscribe.Core.Web.Design\n@using cloudscribe.Web.Navigation\n@using cloudscribe.Web.Pagination\n@using cloudscribe.Pagination.Models\n@using cloudscribe.Web.Common\n@using cloudscribe.Web.Common.Components\n@using cloudscribe.Web.Common.Helpers\n@using cloudscribe.Web.Common.Models\n@using cloudscribe.Web.Common.Extensions\n@addTagHelper \"*, Microsoft.AspNetCore.Mvc.TagHelpers\"\n@addTagHelper \"*, cloudscribe.Web.Common\"\n@addTagHelper \"*, cloudscribe.Core.Web\"\n@addTagHelper \"*, cloudscribe.Web.Navigation\"\n@addTagHelper \"*, cloudscribe.Web.Pagination\"\n"
  },
  {
    "path": "src/sourceDev.WebApp/Views/_ViewStart.cshtml",
    "content": "﻿@{\n    Layout = \"_Layout\";\n}\n"
  },
  {
    "path": "src/sourceDev.WebApp/app-scss/_bs5.scss",
    "content": "\n@import \"variables\"; // override the default variables in this file\n\n// Comment out below any parts of bootstrap not being used in the app to reduce size of output css\n\n\n@import \"node_modules/bootstrap/scss/functions\";\n@import \"node_modules/bootstrap/scss/variables\";\n@import \"node_modules/bootstrap/scss/mixins\";\n@import \"node_modules/bootstrap/scss/utilities\";\n\n/*@import \"node_modules/bootstrap/scss/mixins/lists\";\n@import \"node_modules/bootstrap/scss/mixins/breakpoints\";\n@import \"node_modules/bootstrap/scss/mixins/container\";\n@import \"node_modules/bootstrap/scss/mixins/grid\";\n@import \"node_modules/bootstrap/scss/mixins/utilities\";*/\n\n@import \"node_modules/bootstrap/scss/root\";\n@import \"node_modules/bootstrap/scss/reboot\";\n@import \"node_modules/bootstrap/scss/type\";\n@import \"node_modules/bootstrap/scss/images\";\n@import \"node_modules/bootstrap/scss/containers\";\n@import \"node_modules/bootstrap/scss/grid\";\n@import \"node_modules/bootstrap/scss/tables\";\n@import \"node_modules/bootstrap/scss/forms\";\n@import \"node_modules/bootstrap/scss/buttons\";\n@import \"node_modules/bootstrap/scss/transitions\";\n@import \"node_modules/bootstrap/scss/dropdown\";\n@import \"node_modules/bootstrap/scss/button-group\";\n@import \"node_modules/bootstrap/scss/nav\";\n@import \"node_modules/bootstrap/scss/navbar\";\n@import \"node_modules/bootstrap/scss/card\";\n@import \"node_modules/bootstrap/scss/accordion\";\n@import \"node_modules/bootstrap/scss/breadcrumb\";\n@import \"node_modules/bootstrap/scss/pagination\";\n@import \"node_modules/bootstrap/scss/badge\";\n@import \"node_modules/bootstrap/scss/alert\";\n@import \"node_modules/bootstrap/scss/progress\";\n@import \"node_modules/bootstrap/scss/list-group\";\n@import \"node_modules/bootstrap/scss/close\";\n@import \"node_modules/bootstrap/scss/toasts\";\n@import \"node_modules/bootstrap/scss/modal\";\n@import \"node_modules/bootstrap/scss/tooltip\";\n@import \"node_modules/bootstrap/scss/popover\";\n@import \"node_modules/bootstrap/scss/carousel\";\n@import \"node_modules/bootstrap/scss/spinners\";\n@import \"node_modules/bootstrap/scss/offcanvas\";\n@import \"node_modules/bootstrap/scss/placeholders\";\n\n@import \"node_modules/bootstrap/scss/helpers\";\n\n@import \"node_modules/bootstrap/scss/utilities/api\";\n\n\n"
  },
  {
    "path": "src/sourceDev.WebApp/app-scss/_font-awesome.scss",
    "content": "﻿/*!\n * Font Awesome Free 5.1.0-8 by @fontawesome - https://fontawesome.com\n * License - https://fontawesome.com/license (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)\n */\n\n$fa-font-path: \"/webfonts\";\n\n\n@import 'node_modules/@fortawesome/fontawesome-free/scss/variables';\n@import 'node_modules/@fortawesome/fontawesome-free/scss/mixins';\n@import 'node_modules/@fortawesome/fontawesome-free/scss/core';\n@import 'node_modules/@fortawesome/fontawesome-free/scss/larger';\n@import 'node_modules/@fortawesome/fontawesome-free/scss/fixed-width';\n@import 'node_modules/@fortawesome/fontawesome-free/scss/list';\n@import 'node_modules/@fortawesome/fontawesome-free/scss/bordered-pulled';\n@import 'node_modules/@fortawesome/fontawesome-free/scss/animated';\n@import 'node_modules/@fortawesome/fontawesome-free/scss/rotated-flipped';\n@import 'node_modules/@fortawesome/fontawesome-free/scss/stacked';\n//@import 'node_modules/@fortawesome/fontawesome-free/scss/icons';\n@import 'icons';\n@import 'node_modules/@fortawesome/fontawesome-free/scss/screen-reader';\n\n@import 'node_modules/@fortawesome/fontawesome-free/scss/solid';\n@import 'node_modules/@fortawesome/fontawesome-free/scss/regular';\n@import 'node_modules/@fortawesome/fontawesome-free/scss/brands';\n\n\n"
  },
  {
    "path": "src/sourceDev.WebApp/app-scss/_icons.scss",
    "content": "/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen\nreaders do not read off random characters that represent icons */\n/* you should comment out any of these that you are not using and don't expect to use in order to make the output css smaller */\n\n.#{$fa-css-prefix}-500px:before { content: fa-content($fa-var-500px); }\n.#{$fa-css-prefix}-accessible-icon:before { content: fa-content($fa-var-accessible-icon); }\n.#{$fa-css-prefix}-accusoft:before { content: fa-content($fa-var-accusoft); }\n.#{$fa-css-prefix}-acquisitions-incorporated:before { content: fa-content($fa-var-acquisitions-incorporated); }\n.#{$fa-css-prefix}-ad:before { content: fa-content($fa-var-ad); }\n.#{$fa-css-prefix}-address-book:before { content: fa-content($fa-var-address-book); }\n.#{$fa-css-prefix}-address-card:before { content: fa-content($fa-var-address-card); }\n.#{$fa-css-prefix}-adjust:before { content: fa-content($fa-var-adjust); }\n.#{$fa-css-prefix}-adn:before { content: fa-content($fa-var-adn); }\n/*.#{$fa-css-prefix}-adobe:before { content: fa-content($fa-var-adobe); }*/\n.#{$fa-css-prefix}-adversal:before { content: fa-content($fa-var-adversal); }\n.#{$fa-css-prefix}-affiliatetheme:before { content: fa-content($fa-var-affiliatetheme); }\n.#{$fa-css-prefix}-air-freshener:before { content: fa-content($fa-var-air-freshener); }\n.#{$fa-css-prefix}-algolia:before { content: fa-content($fa-var-algolia); }\n.#{$fa-css-prefix}-align-center:before { content: fa-content($fa-var-align-center); }\n.#{$fa-css-prefix}-align-justify:before { content: fa-content($fa-var-align-justify); }\n.#{$fa-css-prefix}-align-left:before { content: fa-content($fa-var-align-left); }\n.#{$fa-css-prefix}-align-right:before { content: fa-content($fa-var-align-right); }\n.#{$fa-css-prefix}-alipay:before { content: fa-content($fa-var-alipay); }\n.#{$fa-css-prefix}-allergies:before { content: fa-content($fa-var-allergies); }\n.#{$fa-css-prefix}-amazon:before { content: fa-content($fa-var-amazon); }\n.#{$fa-css-prefix}-amazon-pay:before { content: fa-content($fa-var-amazon-pay); }\n.#{$fa-css-prefix}-ambulance:before { content: fa-content($fa-var-ambulance); }\n.#{$fa-css-prefix}-american-sign-language-interpreting:before { content: fa-content($fa-var-american-sign-language-interpreting); }\n.#{$fa-css-prefix}-amilia:before { content: fa-content($fa-var-amilia); }\n.#{$fa-css-prefix}-anchor:before { content: fa-content($fa-var-anchor); }\n.#{$fa-css-prefix}-android:before { content: fa-content($fa-var-android); }\n.#{$fa-css-prefix}-angellist:before { content: fa-content($fa-var-angellist); }\n.#{$fa-css-prefix}-angle-double-down:before { content: fa-content($fa-var-angle-double-down); }\n.#{$fa-css-prefix}-angle-double-left:before { content: fa-content($fa-var-angle-double-left); }\n.#{$fa-css-prefix}-angle-double-right:before { content: fa-content($fa-var-angle-double-right); }\n.#{$fa-css-prefix}-angle-double-up:before { content: fa-content($fa-var-angle-double-up); }\n.#{$fa-css-prefix}-angle-down:before { content: fa-content($fa-var-angle-down); }\n.#{$fa-css-prefix}-angle-left:before { content: fa-content($fa-var-angle-left); }\n.#{$fa-css-prefix}-angle-right:before { content: fa-content($fa-var-angle-right); }\n.#{$fa-css-prefix}-angle-up:before { content: fa-content($fa-var-angle-up); }\n.#{$fa-css-prefix}-angry:before { content: fa-content($fa-var-angry); }\n.#{$fa-css-prefix}-angrycreative:before { content: fa-content($fa-var-angrycreative); }\n.#{$fa-css-prefix}-angular:before { content: fa-content($fa-var-angular); }\n.#{$fa-css-prefix}-ankh:before { content: fa-content($fa-var-ankh); }\n.#{$fa-css-prefix}-app-store:before { content: fa-content($fa-var-app-store); }\n.#{$fa-css-prefix}-app-store-ios:before { content: fa-content($fa-var-app-store-ios); }\n.#{$fa-css-prefix}-apper:before { content: fa-content($fa-var-apper); }\n.#{$fa-css-prefix}-apple:before { content: fa-content($fa-var-apple); }\n.#{$fa-css-prefix}-apple-alt:before { content: fa-content($fa-var-apple-alt); }\n.#{$fa-css-prefix}-apple-pay:before { content: fa-content($fa-var-apple-pay); }\n.#{$fa-css-prefix}-archive:before { content: fa-content($fa-var-archive); }\n.#{$fa-css-prefix}-archway:before { content: fa-content($fa-var-archway); }\n.#{$fa-css-prefix}-arrow-alt-circle-down:before { content: fa-content($fa-var-arrow-alt-circle-down); }\n.#{$fa-css-prefix}-arrow-alt-circle-left:before { content: fa-content($fa-var-arrow-alt-circle-left); }\n.#{$fa-css-prefix}-arrow-alt-circle-right:before { content: fa-content($fa-var-arrow-alt-circle-right); }\n.#{$fa-css-prefix}-arrow-alt-circle-up:before { content: fa-content($fa-var-arrow-alt-circle-up); }\n.#{$fa-css-prefix}-arrow-circle-down:before { content: fa-content($fa-var-arrow-circle-down); }\n.#{$fa-css-prefix}-arrow-circle-left:before { content: fa-content($fa-var-arrow-circle-left); }\n.#{$fa-css-prefix}-arrow-circle-right:before { content: fa-content($fa-var-arrow-circle-right); }\n.#{$fa-css-prefix}-arrow-circle-up:before { content: fa-content($fa-var-arrow-circle-up); }\n.#{$fa-css-prefix}-arrow-down:before { content: fa-content($fa-var-arrow-down); }\n.#{$fa-css-prefix}-arrow-left:before { content: fa-content($fa-var-arrow-left); }\n.#{$fa-css-prefix}-arrow-right:before { content: fa-content($fa-var-arrow-right); }\n.#{$fa-css-prefix}-arrow-up:before { content: fa-content($fa-var-arrow-up); }\n.#{$fa-css-prefix}-arrows-alt:before { content: fa-content($fa-var-arrows-alt); }\n.#{$fa-css-prefix}-arrows-alt-h:before { content: fa-content($fa-var-arrows-alt-h); }\n.#{$fa-css-prefix}-arrows-alt-v:before { content: fa-content($fa-var-arrows-alt-v); }\n.#{$fa-css-prefix}-artstation:before { content: fa-content($fa-var-artstation); }\n.#{$fa-css-prefix}-assistive-listening-systems:before { content: fa-content($fa-var-assistive-listening-systems); }\n.#{$fa-css-prefix}-asterisk:before { content: fa-content($fa-var-asterisk); }\n.#{$fa-css-prefix}-asymmetrik:before { content: fa-content($fa-var-asymmetrik); }\n.#{$fa-css-prefix}-at:before { content: fa-content($fa-var-at); }\n.#{$fa-css-prefix}-atlas:before { content: fa-content($fa-var-atlas); }\n.#{$fa-css-prefix}-atlassian:before { content: fa-content($fa-var-atlassian); }\n.#{$fa-css-prefix}-atom:before { content: fa-content($fa-var-atom); }\n.#{$fa-css-prefix}-audible:before { content: fa-content($fa-var-audible); }\n.#{$fa-css-prefix}-audio-description:before { content: fa-content($fa-var-audio-description); }\n.#{$fa-css-prefix}-autoprefixer:before { content: fa-content($fa-var-autoprefixer); }\n.#{$fa-css-prefix}-avianex:before { content: fa-content($fa-var-avianex); }\n.#{$fa-css-prefix}-aviato:before { content: fa-content($fa-var-aviato); }\n.#{$fa-css-prefix}-award:before { content: fa-content($fa-var-award); }\n.#{$fa-css-prefix}-aws:before { content: fa-content($fa-var-aws); }\n.#{$fa-css-prefix}-baby:before { content: fa-content($fa-var-baby); }\n.#{$fa-css-prefix}-baby-carriage:before { content: fa-content($fa-var-baby-carriage); }\n.#{$fa-css-prefix}-backspace:before { content: fa-content($fa-var-backspace); }\n.#{$fa-css-prefix}-backward:before { content: fa-content($fa-var-backward); }\n.#{$fa-css-prefix}-balance-scale:before { content: fa-content($fa-var-balance-scale); }\n.#{$fa-css-prefix}-ban:before { content: fa-content($fa-var-ban); }\n.#{$fa-css-prefix}-band-aid:before { content: fa-content($fa-var-band-aid); }\n.#{$fa-css-prefix}-bandcamp:before { content: fa-content($fa-var-bandcamp); }\n.#{$fa-css-prefix}-barcode:before { content: fa-content($fa-var-barcode); }\n.#{$fa-css-prefix}-bars:before { content: fa-content($fa-var-bars); }\n.#{$fa-css-prefix}-baseball-ball:before { content: fa-content($fa-var-baseball-ball); }\n.#{$fa-css-prefix}-basketball-ball:before { content: fa-content($fa-var-basketball-ball); }\n.#{$fa-css-prefix}-bath:before { content: fa-content($fa-var-bath); }\n.#{$fa-css-prefix}-battery-empty:before { content: fa-content($fa-var-battery-empty); }\n.#{$fa-css-prefix}-battery-full:before { content: fa-content($fa-var-battery-full); }\n.#{$fa-css-prefix}-battery-half:before { content: fa-content($fa-var-battery-half); }\n.#{$fa-css-prefix}-battery-quarter:before { content: fa-content($fa-var-battery-quarter); }\n.#{$fa-css-prefix}-battery-three-quarters:before { content: fa-content($fa-var-battery-three-quarters); }\n.#{$fa-css-prefix}-bed:before { content: fa-content($fa-var-bed); }\n.#{$fa-css-prefix}-beer:before { content: fa-content($fa-var-beer); }\n.#{$fa-css-prefix}-behance:before { content: fa-content($fa-var-behance); }\n.#{$fa-css-prefix}-behance-square:before { content: fa-content($fa-var-behance-square); }\n.#{$fa-css-prefix}-bell:before { content: fa-content($fa-var-bell); }\n.#{$fa-css-prefix}-bell-slash:before { content: fa-content($fa-var-bell-slash); }\n.#{$fa-css-prefix}-bezier-curve:before { content: fa-content($fa-var-bezier-curve); }\n.#{$fa-css-prefix}-bible:before { content: fa-content($fa-var-bible); }\n.#{$fa-css-prefix}-bicycle:before { content: fa-content($fa-var-bicycle); }\n.#{$fa-css-prefix}-bimobject:before { content: fa-content($fa-var-bimobject); }\n.#{$fa-css-prefix}-binoculars:before { content: fa-content($fa-var-binoculars); }\n.#{$fa-css-prefix}-biohazard:before { content: fa-content($fa-var-biohazard); }\n.#{$fa-css-prefix}-birthday-cake:before { content: fa-content($fa-var-birthday-cake); }\n.#{$fa-css-prefix}-bitbucket:before { content: fa-content($fa-var-bitbucket); }\n.#{$fa-css-prefix}-bitcoin:before { content: fa-content($fa-var-bitcoin); }\n.#{$fa-css-prefix}-bity:before { content: fa-content($fa-var-bity); }\n.#{$fa-css-prefix}-black-tie:before { content: fa-content($fa-var-black-tie); }\n.#{$fa-css-prefix}-blackberry:before { content: fa-content($fa-var-blackberry); }\n.#{$fa-css-prefix}-blender:before { content: fa-content($fa-var-blender); }\n.#{$fa-css-prefix}-blender-phone:before { content: fa-content($fa-var-blender-phone); }\n.#{$fa-css-prefix}-blind:before { content: fa-content($fa-var-blind); }\n.#{$fa-css-prefix}-blog:before { content: fa-content($fa-var-blog); }\n.#{$fa-css-prefix}-blogger:before { content: fa-content($fa-var-blogger); }\n.#{$fa-css-prefix}-blogger-b:before { content: fa-content($fa-var-blogger-b); }\n.#{$fa-css-prefix}-bluetooth:before { content: fa-content($fa-var-bluetooth); }\n.#{$fa-css-prefix}-bluetooth-b:before { content: fa-content($fa-var-bluetooth-b); }\n.#{$fa-css-prefix}-bold:before { content: fa-content($fa-var-bold); }\n.#{$fa-css-prefix}-bolt:before { content: fa-content($fa-var-bolt); }\n.#{$fa-css-prefix}-bomb:before { content: fa-content($fa-var-bomb); }\n.#{$fa-css-prefix}-bone:before { content: fa-content($fa-var-bone); }\n.#{$fa-css-prefix}-bong:before { content: fa-content($fa-var-bong); }\n.#{$fa-css-prefix}-book:before { content: fa-content($fa-var-book); }\n.#{$fa-css-prefix}-book-dead:before { content: fa-content($fa-var-book-dead); }\n.#{$fa-css-prefix}-book-open:before { content: fa-content($fa-var-book-open); }\n.#{$fa-css-prefix}-book-reader:before { content: fa-content($fa-var-book-reader); }\n.#{$fa-css-prefix}-bookmark:before { content: fa-content($fa-var-bookmark); }\n.#{$fa-css-prefix}-bowling-ball:before { content: fa-content($fa-var-bowling-ball); }\n.#{$fa-css-prefix}-box:before { content: fa-content($fa-var-box); }\n.#{$fa-css-prefix}-box-open:before { content: fa-content($fa-var-box-open); }\n.#{$fa-css-prefix}-boxes:before { content: fa-content($fa-var-boxes); }\n.#{$fa-css-prefix}-braille:before { content: fa-content($fa-var-braille); }\n.#{$fa-css-prefix}-brain:before { content: fa-content($fa-var-brain); }\n.#{$fa-css-prefix}-briefcase:before { content: fa-content($fa-var-briefcase); }\n.#{$fa-css-prefix}-briefcase-medical:before { content: fa-content($fa-var-briefcase-medical); }\n.#{$fa-css-prefix}-broadcast-tower:before { content: fa-content($fa-var-broadcast-tower); }\n.#{$fa-css-prefix}-broom:before { content: fa-content($fa-var-broom); }\n.#{$fa-css-prefix}-brush:before { content: fa-content($fa-var-brush); }\n.#{$fa-css-prefix}-btc:before { content: fa-content($fa-var-btc); }\n.#{$fa-css-prefix}-bug:before { content: fa-content($fa-var-bug); }\n.#{$fa-css-prefix}-building:before { content: fa-content($fa-var-building); }\n.#{$fa-css-prefix}-bullhorn:before { content: fa-content($fa-var-bullhorn); }\n.#{$fa-css-prefix}-bullseye:before { content: fa-content($fa-var-bullseye); }\n.#{$fa-css-prefix}-burn:before { content: fa-content($fa-var-burn); }\n.#{$fa-css-prefix}-buromobelexperte:before { content: fa-content($fa-var-buromobelexperte); }\n.#{$fa-css-prefix}-bus:before { content: fa-content($fa-var-bus); }\n.#{$fa-css-prefix}-bus-alt:before { content: fa-content($fa-var-bus-alt); }\n.#{$fa-css-prefix}-business-time:before { content: fa-content($fa-var-business-time); }\n.#{$fa-css-prefix}-buysellads:before { content: fa-content($fa-var-buysellads); }\n.#{$fa-css-prefix}-calculator:before { content: fa-content($fa-var-calculator); }\n.#{$fa-css-prefix}-calendar:before { content: fa-content($fa-var-calendar); }\n.#{$fa-css-prefix}-calendar-alt:before { content: fa-content($fa-var-calendar-alt); }\n.#{$fa-css-prefix}-calendar-check:before { content: fa-content($fa-var-calendar-check); }\n.#{$fa-css-prefix}-calendar-day:before { content: fa-content($fa-var-calendar-day); }\n.#{$fa-css-prefix}-calendar-minus:before { content: fa-content($fa-var-calendar-minus); }\n.#{$fa-css-prefix}-calendar-plus:before { content: fa-content($fa-var-calendar-plus); }\n.#{$fa-css-prefix}-calendar-times:before { content: fa-content($fa-var-calendar-times); }\n.#{$fa-css-prefix}-calendar-week:before { content: fa-content($fa-var-calendar-week); }\n.#{$fa-css-prefix}-camera:before { content: fa-content($fa-var-camera); }\n.#{$fa-css-prefix}-camera-retro:before { content: fa-content($fa-var-camera-retro); }\n.#{$fa-css-prefix}-campground:before { content: fa-content($fa-var-campground); }\n.#{$fa-css-prefix}-canadian-maple-leaf:before { content: fa-content($fa-var-canadian-maple-leaf); }\n.#{$fa-css-prefix}-candy-cane:before { content: fa-content($fa-var-candy-cane); }\n.#{$fa-css-prefix}-cannabis:before { content: fa-content($fa-var-cannabis); }\n.#{$fa-css-prefix}-capsules:before { content: fa-content($fa-var-capsules); }\n.#{$fa-css-prefix}-car:before { content: fa-content($fa-var-car); }\n.#{$fa-css-prefix}-car-alt:before { content: fa-content($fa-var-car-alt); }\n.#{$fa-css-prefix}-car-battery:before { content: fa-content($fa-var-car-battery); }\n.#{$fa-css-prefix}-car-crash:before { content: fa-content($fa-var-car-crash); }\n.#{$fa-css-prefix}-car-side:before { content: fa-content($fa-var-car-side); }\n.#{$fa-css-prefix}-caret-down:before { content: fa-content($fa-var-caret-down); }\n.#{$fa-css-prefix}-caret-left:before { content: fa-content($fa-var-caret-left); }\n.#{$fa-css-prefix}-caret-right:before { content: fa-content($fa-var-caret-right); }\n.#{$fa-css-prefix}-caret-square-down:before { content: fa-content($fa-var-caret-square-down); }\n.#{$fa-css-prefix}-caret-square-left:before { content: fa-content($fa-var-caret-square-left); }\n.#{$fa-css-prefix}-caret-square-right:before { content: fa-content($fa-var-caret-square-right); }\n.#{$fa-css-prefix}-caret-square-up:before { content: fa-content($fa-var-caret-square-up); }\n.#{$fa-css-prefix}-caret-up:before { content: fa-content($fa-var-caret-up); }\n.#{$fa-css-prefix}-carrot:before { content: fa-content($fa-var-carrot); }\n.#{$fa-css-prefix}-cart-arrow-down:before { content: fa-content($fa-var-cart-arrow-down); }\n.#{$fa-css-prefix}-cart-plus:before { content: fa-content($fa-var-cart-plus); }\n.#{$fa-css-prefix}-cash-register:before { content: fa-content($fa-var-cash-register); }\n.#{$fa-css-prefix}-cat:before { content: fa-content($fa-var-cat); }\n.#{$fa-css-prefix}-cc-amazon-pay:before { content: fa-content($fa-var-cc-amazon-pay); }\n.#{$fa-css-prefix}-cc-amex:before { content: fa-content($fa-var-cc-amex); }\n.#{$fa-css-prefix}-cc-apple-pay:before { content: fa-content($fa-var-cc-apple-pay); }\n.#{$fa-css-prefix}-cc-diners-club:before { content: fa-content($fa-var-cc-diners-club); }\n.#{$fa-css-prefix}-cc-discover:before { content: fa-content($fa-var-cc-discover); }\n.#{$fa-css-prefix}-cc-jcb:before { content: fa-content($fa-var-cc-jcb); }\n.#{$fa-css-prefix}-cc-mastercard:before { content: fa-content($fa-var-cc-mastercard); }\n.#{$fa-css-prefix}-cc-paypal:before { content: fa-content($fa-var-cc-paypal); }\n.#{$fa-css-prefix}-cc-stripe:before { content: fa-content($fa-var-cc-stripe); }\n.#{$fa-css-prefix}-cc-visa:before { content: fa-content($fa-var-cc-visa); }\n.#{$fa-css-prefix}-centercode:before { content: fa-content($fa-var-centercode); }\n.#{$fa-css-prefix}-centos:before { content: fa-content($fa-var-centos); }\n.#{$fa-css-prefix}-certificate:before { content: fa-content($fa-var-certificate); }\n.#{$fa-css-prefix}-chair:before { content: fa-content($fa-var-chair); }\n.#{$fa-css-prefix}-chalkboard:before { content: fa-content($fa-var-chalkboard); }\n.#{$fa-css-prefix}-chalkboard-teacher:before { content: fa-content($fa-var-chalkboard-teacher); }\n.#{$fa-css-prefix}-charging-station:before { content: fa-content($fa-var-charging-station); }\n.#{$fa-css-prefix}-chart-area:before { content: fa-content($fa-var-chart-area); }\n.#{$fa-css-prefix}-chart-bar:before { content: fa-content($fa-var-chart-bar); }\n.#{$fa-css-prefix}-chart-line:before { content: fa-content($fa-var-chart-line); }\n.#{$fa-css-prefix}-chart-pie:before { content: fa-content($fa-var-chart-pie); }\n.#{$fa-css-prefix}-check:before { content: fa-content($fa-var-check); }\n.#{$fa-css-prefix}-check-circle:before { content: fa-content($fa-var-check-circle); }\n.#{$fa-css-prefix}-check-double:before { content: fa-content($fa-var-check-double); }\n.#{$fa-css-prefix}-check-square:before { content: fa-content($fa-var-check-square); }\n.#{$fa-css-prefix}-chess:before { content: fa-content($fa-var-chess); }\n.#{$fa-css-prefix}-chess-bishop:before { content: fa-content($fa-var-chess-bishop); }\n.#{$fa-css-prefix}-chess-board:before { content: fa-content($fa-var-chess-board); }\n.#{$fa-css-prefix}-chess-king:before { content: fa-content($fa-var-chess-king); }\n.#{$fa-css-prefix}-chess-knight:before { content: fa-content($fa-var-chess-knight); }\n.#{$fa-css-prefix}-chess-pawn:before { content: fa-content($fa-var-chess-pawn); }\n.#{$fa-css-prefix}-chess-queen:before { content: fa-content($fa-var-chess-queen); }\n.#{$fa-css-prefix}-chess-rook:before { content: fa-content($fa-var-chess-rook); }\n.#{$fa-css-prefix}-chevron-circle-down:before { content: fa-content($fa-var-chevron-circle-down); }\n.#{$fa-css-prefix}-chevron-circle-left:before { content: fa-content($fa-var-chevron-circle-left); }\n.#{$fa-css-prefix}-chevron-circle-right:before { content: fa-content($fa-var-chevron-circle-right); }\n.#{$fa-css-prefix}-chevron-circle-up:before { content: fa-content($fa-var-chevron-circle-up); }\n.#{$fa-css-prefix}-chevron-down:before { content: fa-content($fa-var-chevron-down); }\n.#{$fa-css-prefix}-chevron-left:before { content: fa-content($fa-var-chevron-left); }\n.#{$fa-css-prefix}-chevron-right:before { content: fa-content($fa-var-chevron-right); }\n.#{$fa-css-prefix}-chevron-up:before { content: fa-content($fa-var-chevron-up); }\n.#{$fa-css-prefix}-child:before { content: fa-content($fa-var-child); }\n.#{$fa-css-prefix}-chrome:before { content: fa-content($fa-var-chrome); }\n.#{$fa-css-prefix}-church:before { content: fa-content($fa-var-church); }\n.#{$fa-css-prefix}-circle:before { content: fa-content($fa-var-circle); }\n.#{$fa-css-prefix}-circle-notch:before { content: fa-content($fa-var-circle-notch); }\n.#{$fa-css-prefix}-city:before { content: fa-content($fa-var-city); }\n.#{$fa-css-prefix}-clipboard:before { content: fa-content($fa-var-clipboard); }\n.#{$fa-css-prefix}-clipboard-check:before { content: fa-content($fa-var-clipboard-check); }\n.#{$fa-css-prefix}-clipboard-list:before { content: fa-content($fa-var-clipboard-list); }\n.#{$fa-css-prefix}-clock:before { content: fa-content($fa-var-clock); }\n.#{$fa-css-prefix}-clone:before { content: fa-content($fa-var-clone); }\n.#{$fa-css-prefix}-closed-captioning:before { content: fa-content($fa-var-closed-captioning); }\n.#{$fa-css-prefix}-cloud:before { content: fa-content($fa-var-cloud); }\n.#{$fa-css-prefix}-cloud-download-alt:before { content: fa-content($fa-var-cloud-download-alt); }\n.#{$fa-css-prefix}-cloud-meatball:before { content: fa-content($fa-var-cloud-meatball); }\n.#{$fa-css-prefix}-cloud-moon:before { content: fa-content($fa-var-cloud-moon); }\n.#{$fa-css-prefix}-cloud-moon-rain:before { content: fa-content($fa-var-cloud-moon-rain); }\n.#{$fa-css-prefix}-cloud-rain:before { content: fa-content($fa-var-cloud-rain); }\n.#{$fa-css-prefix}-cloud-showers-heavy:before { content: fa-content($fa-var-cloud-showers-heavy); }\n.#{$fa-css-prefix}-cloud-sun:before { content: fa-content($fa-var-cloud-sun); }\n.#{$fa-css-prefix}-cloud-sun-rain:before { content: fa-content($fa-var-cloud-sun-rain); }\n.#{$fa-css-prefix}-cloud-upload-alt:before { content: fa-content($fa-var-cloud-upload-alt); }\n.#{$fa-css-prefix}-cloudscale:before { content: fa-content($fa-var-cloudscale); }\n.#{$fa-css-prefix}-cloudsmith:before { content: fa-content($fa-var-cloudsmith); }\n.#{$fa-css-prefix}-cloudversify:before { content: fa-content($fa-var-cloudversify); }\n.#{$fa-css-prefix}-cocktail:before { content: fa-content($fa-var-cocktail); }\n.#{$fa-css-prefix}-code:before { content: fa-content($fa-var-code); }\n.#{$fa-css-prefix}-code-branch:before { content: fa-content($fa-var-code-branch); }\n.#{$fa-css-prefix}-codepen:before { content: fa-content($fa-var-codepen); }\n.#{$fa-css-prefix}-codiepie:before { content: fa-content($fa-var-codiepie); }\n.#{$fa-css-prefix}-coffee:before { content: fa-content($fa-var-coffee); }\n.#{$fa-css-prefix}-cog:before { content: fa-content($fa-var-cog); }\n.#{$fa-css-prefix}-cogs:before { content: fa-content($fa-var-cogs); }\n.#{$fa-css-prefix}-coins:before { content: fa-content($fa-var-coins); }\n.#{$fa-css-prefix}-columns:before { content: fa-content($fa-var-columns); }\n.#{$fa-css-prefix}-comment:before { content: fa-content($fa-var-comment); }\n.#{$fa-css-prefix}-comment-alt:before { content: fa-content($fa-var-comment-alt); }\n.#{$fa-css-prefix}-comment-dollar:before { content: fa-content($fa-var-comment-dollar); }\n.#{$fa-css-prefix}-comment-dots:before { content: fa-content($fa-var-comment-dots); }\n.#{$fa-css-prefix}-comment-slash:before { content: fa-content($fa-var-comment-slash); }\n.#{$fa-css-prefix}-comments:before { content: fa-content($fa-var-comments); }\n.#{$fa-css-prefix}-comments-dollar:before { content: fa-content($fa-var-comments-dollar); }\n.#{$fa-css-prefix}-compact-disc:before { content: fa-content($fa-var-compact-disc); }\n.#{$fa-css-prefix}-compass:before { content: fa-content($fa-var-compass); }\n.#{$fa-css-prefix}-compress:before { content: fa-content($fa-var-compress); }\n.#{$fa-css-prefix}-compress-arrows-alt:before { content: fa-content($fa-var-compress-arrows-alt); }\n.#{$fa-css-prefix}-concierge-bell:before { content: fa-content($fa-var-concierge-bell); }\n.#{$fa-css-prefix}-confluence:before { content: fa-content($fa-var-confluence); }\n.#{$fa-css-prefix}-connectdevelop:before { content: fa-content($fa-var-connectdevelop); }\n.#{$fa-css-prefix}-contao:before { content: fa-content($fa-var-contao); }\n.#{$fa-css-prefix}-cookie:before { content: fa-content($fa-var-cookie); }\n.#{$fa-css-prefix}-cookie-bite:before { content: fa-content($fa-var-cookie-bite); }\n.#{$fa-css-prefix}-copy:before { content: fa-content($fa-var-copy); }\n.#{$fa-css-prefix}-copyright:before { content: fa-content($fa-var-copyright); }\n.#{$fa-css-prefix}-couch:before { content: fa-content($fa-var-couch); }\n.#{$fa-css-prefix}-cpanel:before { content: fa-content($fa-var-cpanel); }\n.#{$fa-css-prefix}-creative-commons:before { content: fa-content($fa-var-creative-commons); }\n.#{$fa-css-prefix}-creative-commons-by:before { content: fa-content($fa-var-creative-commons-by); }\n.#{$fa-css-prefix}-creative-commons-nc:before { content: fa-content($fa-var-creative-commons-nc); }\n.#{$fa-css-prefix}-creative-commons-nc-eu:before { content: fa-content($fa-var-creative-commons-nc-eu); }\n.#{$fa-css-prefix}-creative-commons-nc-jp:before { content: fa-content($fa-var-creative-commons-nc-jp); }\n.#{$fa-css-prefix}-creative-commons-nd:before { content: fa-content($fa-var-creative-commons-nd); }\n.#{$fa-css-prefix}-creative-commons-pd:before { content: fa-content($fa-var-creative-commons-pd); }\n.#{$fa-css-prefix}-creative-commons-pd-alt:before { content: fa-content($fa-var-creative-commons-pd-alt); }\n.#{$fa-css-prefix}-creative-commons-remix:before { content: fa-content($fa-var-creative-commons-remix); }\n.#{$fa-css-prefix}-creative-commons-sa:before { content: fa-content($fa-var-creative-commons-sa); }\n.#{$fa-css-prefix}-creative-commons-sampling:before { content: fa-content($fa-var-creative-commons-sampling); }\n.#{$fa-css-prefix}-creative-commons-sampling-plus:before { content: fa-content($fa-var-creative-commons-sampling-plus); }\n.#{$fa-css-prefix}-creative-commons-share:before { content: fa-content($fa-var-creative-commons-share); }\n.#{$fa-css-prefix}-creative-commons-zero:before { content: fa-content($fa-var-creative-commons-zero); }\n.#{$fa-css-prefix}-credit-card:before { content: fa-content($fa-var-credit-card); }\n.#{$fa-css-prefix}-critical-role:before { content: fa-content($fa-var-critical-role); }\n.#{$fa-css-prefix}-crop:before { content: fa-content($fa-var-crop); }\n.#{$fa-css-prefix}-crop-alt:before { content: fa-content($fa-var-crop-alt); }\n.#{$fa-css-prefix}-cross:before { content: fa-content($fa-var-cross); }\n.#{$fa-css-prefix}-crosshairs:before { content: fa-content($fa-var-crosshairs); }\n.#{$fa-css-prefix}-crow:before { content: fa-content($fa-var-crow); }\n.#{$fa-css-prefix}-crown:before { content: fa-content($fa-var-crown); }\n.#{$fa-css-prefix}-css3:before { content: fa-content($fa-var-css3); }\n.#{$fa-css-prefix}-css3-alt:before { content: fa-content($fa-var-css3-alt); }\n.#{$fa-css-prefix}-cube:before { content: fa-content($fa-var-cube); }\n.#{$fa-css-prefix}-cubes:before { content: fa-content($fa-var-cubes); }\n.#{$fa-css-prefix}-cut:before { content: fa-content($fa-var-cut); }\n.#{$fa-css-prefix}-cuttlefish:before { content: fa-content($fa-var-cuttlefish); }\n.#{$fa-css-prefix}-d-and-d:before { content: fa-content($fa-var-d-and-d); }\n.#{$fa-css-prefix}-d-and-d-beyond:before { content: fa-content($fa-var-d-and-d-beyond); }\n.#{$fa-css-prefix}-dashcube:before { content: fa-content($fa-var-dashcube); }\n.#{$fa-css-prefix}-database:before { content: fa-content($fa-var-database); }\n.#{$fa-css-prefix}-deaf:before { content: fa-content($fa-var-deaf); }\n.#{$fa-css-prefix}-delicious:before { content: fa-content($fa-var-delicious); }\n.#{$fa-css-prefix}-democrat:before { content: fa-content($fa-var-democrat); }\n.#{$fa-css-prefix}-deploydog:before { content: fa-content($fa-var-deploydog); }\n.#{$fa-css-prefix}-deskpro:before { content: fa-content($fa-var-deskpro); }\n.#{$fa-css-prefix}-desktop:before { content: fa-content($fa-var-desktop); }\n.#{$fa-css-prefix}-dev:before { content: fa-content($fa-var-dev); }\n.#{$fa-css-prefix}-deviantart:before { content: fa-content($fa-var-deviantart); }\n.#{$fa-css-prefix}-dharmachakra:before { content: fa-content($fa-var-dharmachakra); }\n.#{$fa-css-prefix}-dhl:before { content: fa-content($fa-var-dhl); }\n.#{$fa-css-prefix}-diagnoses:before { content: fa-content($fa-var-diagnoses); }\n.#{$fa-css-prefix}-diaspora:before { content: fa-content($fa-var-diaspora); }\n.#{$fa-css-prefix}-dice:before { content: fa-content($fa-var-dice); }\n.#{$fa-css-prefix}-dice-d20:before { content: fa-content($fa-var-dice-d20); }\n.#{$fa-css-prefix}-dice-d6:before { content: fa-content($fa-var-dice-d6); }\n.#{$fa-css-prefix}-dice-five:before { content: fa-content($fa-var-dice-five); }\n.#{$fa-css-prefix}-dice-four:before { content: fa-content($fa-var-dice-four); }\n.#{$fa-css-prefix}-dice-one:before { content: fa-content($fa-var-dice-one); }\n.#{$fa-css-prefix}-dice-six:before { content: fa-content($fa-var-dice-six); }\n.#{$fa-css-prefix}-dice-three:before { content: fa-content($fa-var-dice-three); }\n.#{$fa-css-prefix}-dice-two:before { content: fa-content($fa-var-dice-two); }\n.#{$fa-css-prefix}-digg:before { content: fa-content($fa-var-digg); }\n.#{$fa-css-prefix}-digital-ocean:before { content: fa-content($fa-var-digital-ocean); }\n.#{$fa-css-prefix}-digital-tachograph:before { content: fa-content($fa-var-digital-tachograph); }\n.#{$fa-css-prefix}-directions:before { content: fa-content($fa-var-directions); }\n.#{$fa-css-prefix}-discord:before { content: fa-content($fa-var-discord); }\n.#{$fa-css-prefix}-discourse:before { content: fa-content($fa-var-discourse); }\n.#{$fa-css-prefix}-divide:before { content: fa-content($fa-var-divide); }\n.#{$fa-css-prefix}-dizzy:before { content: fa-content($fa-var-dizzy); }\n.#{$fa-css-prefix}-dna:before { content: fa-content($fa-var-dna); }\n.#{$fa-css-prefix}-dochub:before { content: fa-content($fa-var-dochub); }\n.#{$fa-css-prefix}-docker:before { content: fa-content($fa-var-docker); }\n.#{$fa-css-prefix}-dog:before { content: fa-content($fa-var-dog); }\n.#{$fa-css-prefix}-dollar-sign:before { content: fa-content($fa-var-dollar-sign); }\n.#{$fa-css-prefix}-dolly:before { content: fa-content($fa-var-dolly); }\n.#{$fa-css-prefix}-dolly-flatbed:before { content: fa-content($fa-var-dolly-flatbed); }\n.#{$fa-css-prefix}-donate:before { content: fa-content($fa-var-donate); }\n.#{$fa-css-prefix}-door-closed:before { content: fa-content($fa-var-door-closed); }\n.#{$fa-css-prefix}-door-open:before { content: fa-content($fa-var-door-open); }\n.#{$fa-css-prefix}-dot-circle:before { content: fa-content($fa-var-dot-circle); }\n.#{$fa-css-prefix}-dove:before { content: fa-content($fa-var-dove); }\n.#{$fa-css-prefix}-download:before { content: fa-content($fa-var-download); }\n.#{$fa-css-prefix}-draft2digital:before { content: fa-content($fa-var-draft2digital); }\n.#{$fa-css-prefix}-drafting-compass:before { content: fa-content($fa-var-drafting-compass); }\n.#{$fa-css-prefix}-dragon:before { content: fa-content($fa-var-dragon); }\n.#{$fa-css-prefix}-draw-polygon:before { content: fa-content($fa-var-draw-polygon); }\n.#{$fa-css-prefix}-dribbble:before { content: fa-content($fa-var-dribbble); }\n.#{$fa-css-prefix}-dribbble-square:before { content: fa-content($fa-var-dribbble-square); }\n.#{$fa-css-prefix}-dropbox:before { content: fa-content($fa-var-dropbox); }\n.#{$fa-css-prefix}-drum:before { content: fa-content($fa-var-drum); }\n.#{$fa-css-prefix}-drum-steelpan:before { content: fa-content($fa-var-drum-steelpan); }\n.#{$fa-css-prefix}-drumstick-bite:before { content: fa-content($fa-var-drumstick-bite); }\n.#{$fa-css-prefix}-drupal:before { content: fa-content($fa-var-drupal); }\n.#{$fa-css-prefix}-dumbbell:before { content: fa-content($fa-var-dumbbell); }\n.#{$fa-css-prefix}-dumpster:before { content: fa-content($fa-var-dumpster); }\n.#{$fa-css-prefix}-dumpster-fire:before { content: fa-content($fa-var-dumpster-fire); }\n.#{$fa-css-prefix}-dungeon:before { content: fa-content($fa-var-dungeon); }\n.#{$fa-css-prefix}-dyalog:before { content: fa-content($fa-var-dyalog); }\n.#{$fa-css-prefix}-earlybirds:before { content: fa-content($fa-var-earlybirds); }\n.#{$fa-css-prefix}-ebay:before { content: fa-content($fa-var-ebay); }\n.#{$fa-css-prefix}-edge:before { content: fa-content($fa-var-edge); }\n.#{$fa-css-prefix}-edit:before { content: fa-content($fa-var-edit); }\n.#{$fa-css-prefix}-eject:before { content: fa-content($fa-var-eject); }\n.#{$fa-css-prefix}-elementor:before { content: fa-content($fa-var-elementor); }\n.#{$fa-css-prefix}-ellipsis-h:before { content: fa-content($fa-var-ellipsis-h); }\n.#{$fa-css-prefix}-ellipsis-v:before { content: fa-content($fa-var-ellipsis-v); }\n.#{$fa-css-prefix}-ello:before { content: fa-content($fa-var-ello); }\n.#{$fa-css-prefix}-ember:before { content: fa-content($fa-var-ember); }\n.#{$fa-css-prefix}-empire:before { content: fa-content($fa-var-empire); }\n.#{$fa-css-prefix}-envelope:before { content: fa-content($fa-var-envelope); }\n.#{$fa-css-prefix}-envelope-open:before { content: fa-content($fa-var-envelope-open); }\n.#{$fa-css-prefix}-envelope-open-text:before { content: fa-content($fa-var-envelope-open-text); }\n.#{$fa-css-prefix}-envelope-square:before { content: fa-content($fa-var-envelope-square); }\n.#{$fa-css-prefix}-envira:before { content: fa-content($fa-var-envira); }\n.#{$fa-css-prefix}-equals:before { content: fa-content($fa-var-equals); }\n.#{$fa-css-prefix}-eraser:before { content: fa-content($fa-var-eraser); }\n.#{$fa-css-prefix}-erlang:before { content: fa-content($fa-var-erlang); }\n.#{$fa-css-prefix}-ethereum:before { content: fa-content($fa-var-ethereum); }\n.#{$fa-css-prefix}-ethernet:before { content: fa-content($fa-var-ethernet); }\n.#{$fa-css-prefix}-etsy:before { content: fa-content($fa-var-etsy); }\n.#{$fa-css-prefix}-euro-sign:before { content: fa-content($fa-var-euro-sign); }\n.#{$fa-css-prefix}-exchange-alt:before { content: fa-content($fa-var-exchange-alt); }\n.#{$fa-css-prefix}-exclamation:before { content: fa-content($fa-var-exclamation); }\n.#{$fa-css-prefix}-exclamation-circle:before { content: fa-content($fa-var-exclamation-circle); }\n.#{$fa-css-prefix}-exclamation-triangle:before { content: fa-content($fa-var-exclamation-triangle); }\n.#{$fa-css-prefix}-expand:before { content: fa-content($fa-var-expand); }\n.#{$fa-css-prefix}-expand-arrows-alt:before { content: fa-content($fa-var-expand-arrows-alt); }\n.#{$fa-css-prefix}-expeditedssl:before { content: fa-content($fa-var-expeditedssl); }\n.#{$fa-css-prefix}-external-link-alt:before { content: fa-content($fa-var-external-link-alt); }\n.#{$fa-css-prefix}-external-link-square-alt:before { content: fa-content($fa-var-external-link-square-alt); }\n.#{$fa-css-prefix}-eye:before { content: fa-content($fa-var-eye); }\n.#{$fa-css-prefix}-eye-dropper:before { content: fa-content($fa-var-eye-dropper); }\n.#{$fa-css-prefix}-eye-slash:before { content: fa-content($fa-var-eye-slash); }\n.#{$fa-css-prefix}-facebook:before { content: fa-content($fa-var-facebook); }\n.#{$fa-css-prefix}-facebook-f:before { content: fa-content($fa-var-facebook-f); }\n.#{$fa-css-prefix}-facebook-messenger:before { content: fa-content($fa-var-facebook-messenger); }\n.#{$fa-css-prefix}-facebook-square:before { content: fa-content($fa-var-facebook-square); }\n.#{$fa-css-prefix}-fantasy-flight-games:before { content: fa-content($fa-var-fantasy-flight-games); }\n.#{$fa-css-prefix}-fast-backward:before { content: fa-content($fa-var-fast-backward); }\n.#{$fa-css-prefix}-fast-forward:before { content: fa-content($fa-var-fast-forward); }\n.#{$fa-css-prefix}-fax:before { content: fa-content($fa-var-fax); }\n.#{$fa-css-prefix}-feather:before { content: fa-content($fa-var-feather); }\n.#{$fa-css-prefix}-feather-alt:before { content: fa-content($fa-var-feather-alt); }\n.#{$fa-css-prefix}-fedex:before { content: fa-content($fa-var-fedex); }\n.#{$fa-css-prefix}-fedora:before { content: fa-content($fa-var-fedora); }\n.#{$fa-css-prefix}-female:before { content: fa-content($fa-var-female); }\n.#{$fa-css-prefix}-fighter-jet:before { content: fa-content($fa-var-fighter-jet); }\n.#{$fa-css-prefix}-figma:before { content: fa-content($fa-var-figma); }\n.#{$fa-css-prefix}-file:before { content: fa-content($fa-var-file); }\n.#{$fa-css-prefix}-file-alt:before { content: fa-content($fa-var-file-alt); }\n.#{$fa-css-prefix}-file-archive:before { content: fa-content($fa-var-file-archive); }\n.#{$fa-css-prefix}-file-audio:before { content: fa-content($fa-var-file-audio); }\n.#{$fa-css-prefix}-file-code:before { content: fa-content($fa-var-file-code); }\n.#{$fa-css-prefix}-file-contract:before { content: fa-content($fa-var-file-contract); }\n.#{$fa-css-prefix}-file-csv:before { content: fa-content($fa-var-file-csv); }\n.#{$fa-css-prefix}-file-download:before { content: fa-content($fa-var-file-download); }\n.#{$fa-css-prefix}-file-excel:before { content: fa-content($fa-var-file-excel); }\n.#{$fa-css-prefix}-file-export:before { content: fa-content($fa-var-file-export); }\n.#{$fa-css-prefix}-file-image:before { content: fa-content($fa-var-file-image); }\n.#{$fa-css-prefix}-file-import:before { content: fa-content($fa-var-file-import); }\n.#{$fa-css-prefix}-file-invoice:before { content: fa-content($fa-var-file-invoice); }\n.#{$fa-css-prefix}-file-invoice-dollar:before { content: fa-content($fa-var-file-invoice-dollar); }\n.#{$fa-css-prefix}-file-medical:before { content: fa-content($fa-var-file-medical); }\n.#{$fa-css-prefix}-file-medical-alt:before { content: fa-content($fa-var-file-medical-alt); }\n.#{$fa-css-prefix}-file-pdf:before { content: fa-content($fa-var-file-pdf); }\n.#{$fa-css-prefix}-file-powerpoint:before { content: fa-content($fa-var-file-powerpoint); }\n.#{$fa-css-prefix}-file-prescription:before { content: fa-content($fa-var-file-prescription); }\n.#{$fa-css-prefix}-file-signature:before { content: fa-content($fa-var-file-signature); }\n.#{$fa-css-prefix}-file-upload:before { content: fa-content($fa-var-file-upload); }\n.#{$fa-css-prefix}-file-video:before { content: fa-content($fa-var-file-video); }\n.#{$fa-css-prefix}-file-word:before { content: fa-content($fa-var-file-word); }\n.#{$fa-css-prefix}-fill:before { content: fa-content($fa-var-fill); }\n.#{$fa-css-prefix}-fill-drip:before { content: fa-content($fa-var-fill-drip); }\n.#{$fa-css-prefix}-film:before { content: fa-content($fa-var-film); }\n.#{$fa-css-prefix}-filter:before { content: fa-content($fa-var-filter); }\n.#{$fa-css-prefix}-fingerprint:before { content: fa-content($fa-var-fingerprint); }\n.#{$fa-css-prefix}-fire:before { content: fa-content($fa-var-fire); }\n.#{$fa-css-prefix}-fire-alt:before { content: fa-content($fa-var-fire-alt); }\n.#{$fa-css-prefix}-fire-extinguisher:before { content: fa-content($fa-var-fire-extinguisher); }\n.#{$fa-css-prefix}-firefox:before { content: fa-content($fa-var-firefox); }\n.#{$fa-css-prefix}-first-aid:before { content: fa-content($fa-var-first-aid); }\n.#{$fa-css-prefix}-first-order:before { content: fa-content($fa-var-first-order); }\n.#{$fa-css-prefix}-first-order-alt:before { content: fa-content($fa-var-first-order-alt); }\n.#{$fa-css-prefix}-firstdraft:before { content: fa-content($fa-var-firstdraft); }\n.#{$fa-css-prefix}-fish:before { content: fa-content($fa-var-fish); }\n.#{$fa-css-prefix}-fist-raised:before { content: fa-content($fa-var-fist-raised); }\n.#{$fa-css-prefix}-flag:before { content: fa-content($fa-var-flag); }\n.#{$fa-css-prefix}-flag-checkered:before { content: fa-content($fa-var-flag-checkered); }\n.#{$fa-css-prefix}-flag-usa:before { content: fa-content($fa-var-flag-usa); }\n.#{$fa-css-prefix}-flask:before { content: fa-content($fa-var-flask); }\n.#{$fa-css-prefix}-flickr:before { content: fa-content($fa-var-flickr); }\n.#{$fa-css-prefix}-flipboard:before { content: fa-content($fa-var-flipboard); }\n.#{$fa-css-prefix}-flushed:before { content: fa-content($fa-var-flushed); }\n.#{$fa-css-prefix}-fly:before { content: fa-content($fa-var-fly); }\n.#{$fa-css-prefix}-folder:before { content: fa-content($fa-var-folder); }\n.#{$fa-css-prefix}-folder-minus:before { content: fa-content($fa-var-folder-minus); }\n.#{$fa-css-prefix}-folder-open:before { content: fa-content($fa-var-folder-open); }\n.#{$fa-css-prefix}-folder-plus:before { content: fa-content($fa-var-folder-plus); }\n.#{$fa-css-prefix}-font:before { content: fa-content($fa-var-font); }\n.#{$fa-css-prefix}-font-awesome:before { content: fa-content($fa-var-font-awesome); }\n.#{$fa-css-prefix}-font-awesome-alt:before { content: fa-content($fa-var-font-awesome-alt); }\n.#{$fa-css-prefix}-font-awesome-flag:before { content: fa-content($fa-var-font-awesome-flag); }\n.#{$fa-css-prefix}-font-awesome-logo-full:before { content: fa-content($fa-var-font-awesome-logo-full); }\n.#{$fa-css-prefix}-fonticons:before { content: fa-content($fa-var-fonticons); }\n.#{$fa-css-prefix}-fonticons-fi:before { content: fa-content($fa-var-fonticons-fi); }\n.#{$fa-css-prefix}-football-ball:before { content: fa-content($fa-var-football-ball); }\n.#{$fa-css-prefix}-fort-awesome:before { content: fa-content($fa-var-fort-awesome); }\n.#{$fa-css-prefix}-fort-awesome-alt:before { content: fa-content($fa-var-fort-awesome-alt); }\n.#{$fa-css-prefix}-forumbee:before { content: fa-content($fa-var-forumbee); }\n.#{$fa-css-prefix}-forward:before { content: fa-content($fa-var-forward); }\n.#{$fa-css-prefix}-foursquare:before { content: fa-content($fa-var-foursquare); }\n.#{$fa-css-prefix}-free-code-camp:before { content: fa-content($fa-var-free-code-camp); }\n.#{$fa-css-prefix}-freebsd:before { content: fa-content($fa-var-freebsd); }\n.#{$fa-css-prefix}-frog:before { content: fa-content($fa-var-frog); }\n.#{$fa-css-prefix}-frown:before { content: fa-content($fa-var-frown); }\n.#{$fa-css-prefix}-frown-open:before { content: fa-content($fa-var-frown-open); }\n.#{$fa-css-prefix}-fulcrum:before { content: fa-content($fa-var-fulcrum); }\n.#{$fa-css-prefix}-funnel-dollar:before { content: fa-content($fa-var-funnel-dollar); }\n.#{$fa-css-prefix}-futbol:before { content: fa-content($fa-var-futbol); }\n.#{$fa-css-prefix}-galactic-republic:before { content: fa-content($fa-var-galactic-republic); }\n.#{$fa-css-prefix}-galactic-senate:before { content: fa-content($fa-var-galactic-senate); }\n.#{$fa-css-prefix}-gamepad:before { content: fa-content($fa-var-gamepad); }\n.#{$fa-css-prefix}-gas-pump:before { content: fa-content($fa-var-gas-pump); }\n.#{$fa-css-prefix}-gavel:before { content: fa-content($fa-var-gavel); }\n.#{$fa-css-prefix}-gem:before { content: fa-content($fa-var-gem); }\n.#{$fa-css-prefix}-genderless:before { content: fa-content($fa-var-genderless); }\n.#{$fa-css-prefix}-get-pocket:before { content: fa-content($fa-var-get-pocket); }\n.#{$fa-css-prefix}-gg:before { content: fa-content($fa-var-gg); }\n.#{$fa-css-prefix}-gg-circle:before { content: fa-content($fa-var-gg-circle); }\n.#{$fa-css-prefix}-ghost:before { content: fa-content($fa-var-ghost); }\n.#{$fa-css-prefix}-gift:before { content: fa-content($fa-var-gift); }\n.#{$fa-css-prefix}-gifts:before { content: fa-content($fa-var-gifts); }\n.#{$fa-css-prefix}-git:before { content: fa-content($fa-var-git); }\n.#{$fa-css-prefix}-git-square:before { content: fa-content($fa-var-git-square); }\n.#{$fa-css-prefix}-github:before { content: fa-content($fa-var-github); }\n.#{$fa-css-prefix}-github-alt:before { content: fa-content($fa-var-github-alt); }\n.#{$fa-css-prefix}-github-square:before { content: fa-content($fa-var-github-square); }\n.#{$fa-css-prefix}-gitkraken:before { content: fa-content($fa-var-gitkraken); }\n.#{$fa-css-prefix}-gitlab:before { content: fa-content($fa-var-gitlab); }\n.#{$fa-css-prefix}-gitter:before { content: fa-content($fa-var-gitter); }\n.#{$fa-css-prefix}-glass-cheers:before { content: fa-content($fa-var-glass-cheers); }\n.#{$fa-css-prefix}-glass-martini:before { content: fa-content($fa-var-glass-martini); }\n.#{$fa-css-prefix}-glass-martini-alt:before { content: fa-content($fa-var-glass-martini-alt); }\n.#{$fa-css-prefix}-glass-whiskey:before { content: fa-content($fa-var-glass-whiskey); }\n.#{$fa-css-prefix}-glasses:before { content: fa-content($fa-var-glasses); }\n.#{$fa-css-prefix}-glide:before { content: fa-content($fa-var-glide); }\n.#{$fa-css-prefix}-glide-g:before { content: fa-content($fa-var-glide-g); }\n.#{$fa-css-prefix}-globe:before { content: fa-content($fa-var-globe); }\n.#{$fa-css-prefix}-globe-africa:before { content: fa-content($fa-var-globe-africa); }\n.#{$fa-css-prefix}-globe-americas:before { content: fa-content($fa-var-globe-americas); }\n.#{$fa-css-prefix}-globe-asia:before { content: fa-content($fa-var-globe-asia); }\n.#{$fa-css-prefix}-globe-europe:before { content: fa-content($fa-var-globe-europe); }\n.#{$fa-css-prefix}-gofore:before { content: fa-content($fa-var-gofore); }\n.#{$fa-css-prefix}-golf-ball:before { content: fa-content($fa-var-golf-ball); }\n.#{$fa-css-prefix}-goodreads:before { content: fa-content($fa-var-goodreads); }\n.#{$fa-css-prefix}-goodreads-g:before { content: fa-content($fa-var-goodreads-g); }\n.#{$fa-css-prefix}-google:before { content: fa-content($fa-var-google); }\n.#{$fa-css-prefix}-google-drive:before { content: fa-content($fa-var-google-drive); }\n.#{$fa-css-prefix}-google-play:before { content: fa-content($fa-var-google-play); }\n.#{$fa-css-prefix}-google-plus:before { content: fa-content($fa-var-google-plus); }\n.#{$fa-css-prefix}-google-plus-g:before { content: fa-content($fa-var-google-plus-g); }\n.#{$fa-css-prefix}-google-plus-square:before { content: fa-content($fa-var-google-plus-square); }\n.#{$fa-css-prefix}-google-wallet:before { content: fa-content($fa-var-google-wallet); }\n.#{$fa-css-prefix}-gopuram:before { content: fa-content($fa-var-gopuram); }\n.#{$fa-css-prefix}-graduation-cap:before { content: fa-content($fa-var-graduation-cap); }\n.#{$fa-css-prefix}-gratipay:before { content: fa-content($fa-var-gratipay); }\n.#{$fa-css-prefix}-grav:before { content: fa-content($fa-var-grav); }\n.#{$fa-css-prefix}-greater-than:before { content: fa-content($fa-var-greater-than); }\n.#{$fa-css-prefix}-greater-than-equal:before { content: fa-content($fa-var-greater-than-equal); }\n.#{$fa-css-prefix}-grimace:before { content: fa-content($fa-var-grimace); }\n.#{$fa-css-prefix}-grin:before { content: fa-content($fa-var-grin); }\n.#{$fa-css-prefix}-grin-alt:before { content: fa-content($fa-var-grin-alt); }\n.#{$fa-css-prefix}-grin-beam:before { content: fa-content($fa-var-grin-beam); }\n.#{$fa-css-prefix}-grin-beam-sweat:before { content: fa-content($fa-var-grin-beam-sweat); }\n.#{$fa-css-prefix}-grin-hearts:before { content: fa-content($fa-var-grin-hearts); }\n.#{$fa-css-prefix}-grin-squint:before { content: fa-content($fa-var-grin-squint); }\n.#{$fa-css-prefix}-grin-squint-tears:before { content: fa-content($fa-var-grin-squint-tears); }\n.#{$fa-css-prefix}-grin-stars:before { content: fa-content($fa-var-grin-stars); }\n.#{$fa-css-prefix}-grin-tears:before { content: fa-content($fa-var-grin-tears); }\n.#{$fa-css-prefix}-grin-tongue:before { content: fa-content($fa-var-grin-tongue); }\n.#{$fa-css-prefix}-grin-tongue-squint:before { content: fa-content($fa-var-grin-tongue-squint); }\n.#{$fa-css-prefix}-grin-tongue-wink:before { content: fa-content($fa-var-grin-tongue-wink); }\n.#{$fa-css-prefix}-grin-wink:before { content: fa-content($fa-var-grin-wink); }\n.#{$fa-css-prefix}-grip-horizontal:before { content: fa-content($fa-var-grip-horizontal); }\n.#{$fa-css-prefix}-grip-lines:before { content: fa-content($fa-var-grip-lines); }\n.#{$fa-css-prefix}-grip-lines-vertical:before { content: fa-content($fa-var-grip-lines-vertical); }\n.#{$fa-css-prefix}-grip-vertical:before { content: fa-content($fa-var-grip-vertical); }\n.#{$fa-css-prefix}-gripfire:before { content: fa-content($fa-var-gripfire); }\n.#{$fa-css-prefix}-grunt:before { content: fa-content($fa-var-grunt); }\n.#{$fa-css-prefix}-guitar:before { content: fa-content($fa-var-guitar); }\n.#{$fa-css-prefix}-gulp:before { content: fa-content($fa-var-gulp); }\n.#{$fa-css-prefix}-h-square:before { content: fa-content($fa-var-h-square); }\n.#{$fa-css-prefix}-hacker-news:before { content: fa-content($fa-var-hacker-news); }\n.#{$fa-css-prefix}-hacker-news-square:before { content: fa-content($fa-var-hacker-news-square); }\n.#{$fa-css-prefix}-hackerrank:before { content: fa-content($fa-var-hackerrank); }\n.#{$fa-css-prefix}-hammer:before { content: fa-content($fa-var-hammer); }\n.#{$fa-css-prefix}-hamsa:before { content: fa-content($fa-var-hamsa); }\n.#{$fa-css-prefix}-hand-holding:before { content: fa-content($fa-var-hand-holding); }\n.#{$fa-css-prefix}-hand-holding-heart:before { content: fa-content($fa-var-hand-holding-heart); }\n.#{$fa-css-prefix}-hand-holding-usd:before { content: fa-content($fa-var-hand-holding-usd); }\n.#{$fa-css-prefix}-hand-lizard:before { content: fa-content($fa-var-hand-lizard); }\n.#{$fa-css-prefix}-hand-paper:before { content: fa-content($fa-var-hand-paper); }\n.#{$fa-css-prefix}-hand-peace:before { content: fa-content($fa-var-hand-peace); }\n.#{$fa-css-prefix}-hand-point-down:before { content: fa-content($fa-var-hand-point-down); }\n.#{$fa-css-prefix}-hand-point-left:before { content: fa-content($fa-var-hand-point-left); }\n.#{$fa-css-prefix}-hand-point-right:before { content: fa-content($fa-var-hand-point-right); }\n.#{$fa-css-prefix}-hand-point-up:before { content: fa-content($fa-var-hand-point-up); }\n.#{$fa-css-prefix}-hand-pointer:before { content: fa-content($fa-var-hand-pointer); }\n.#{$fa-css-prefix}-hand-rock:before { content: fa-content($fa-var-hand-rock); }\n.#{$fa-css-prefix}-hand-scissors:before { content: fa-content($fa-var-hand-scissors); }\n.#{$fa-css-prefix}-hand-spock:before { content: fa-content($fa-var-hand-spock); }\n.#{$fa-css-prefix}-hands:before { content: fa-content($fa-var-hands); }\n.#{$fa-css-prefix}-hands-helping:before { content: fa-content($fa-var-hands-helping); }\n.#{$fa-css-prefix}-handshake:before { content: fa-content($fa-var-handshake); }\n.#{$fa-css-prefix}-hanukiah:before { content: fa-content($fa-var-hanukiah); }\n.#{$fa-css-prefix}-hashtag:before { content: fa-content($fa-var-hashtag); }\n.#{$fa-css-prefix}-hat-wizard:before { content: fa-content($fa-var-hat-wizard); }\n/*.#{$fa-css-prefix}-haykal:before { content: fa-content($fa-var-haykal); }*/\n.#{$fa-css-prefix}-hdd:before { content: fa-content($fa-var-hdd); }\n.#{$fa-css-prefix}-heading:before { content: fa-content($fa-var-heading); }\n.#{$fa-css-prefix}-headphones:before { content: fa-content($fa-var-headphones); }\n.#{$fa-css-prefix}-headphones-alt:before { content: fa-content($fa-var-headphones-alt); }\n.#{$fa-css-prefix}-headset:before { content: fa-content($fa-var-headset); }\n.#{$fa-css-prefix}-heart:before { content: fa-content($fa-var-heart); }\n.#{$fa-css-prefix}-heart-broken:before { content: fa-content($fa-var-heart-broken); }\n.#{$fa-css-prefix}-heartbeat:before { content: fa-content($fa-var-heartbeat); }\n.#{$fa-css-prefix}-helicopter:before { content: fa-content($fa-var-helicopter); }\n.#{$fa-css-prefix}-highlighter:before { content: fa-content($fa-var-highlighter); }\n.#{$fa-css-prefix}-hiking:before { content: fa-content($fa-var-hiking); }\n.#{$fa-css-prefix}-hippo:before { content: fa-content($fa-var-hippo); }\n.#{$fa-css-prefix}-hips:before { content: fa-content($fa-var-hips); }\n.#{$fa-css-prefix}-hire-a-helper:before { content: fa-content($fa-var-hire-a-helper); }\n.#{$fa-css-prefix}-history:before { content: fa-content($fa-var-history); }\n.#{$fa-css-prefix}-hockey-puck:before { content: fa-content($fa-var-hockey-puck); }\n.#{$fa-css-prefix}-holly-berry:before { content: fa-content($fa-var-holly-berry); }\n.#{$fa-css-prefix}-home:before { content: fa-content($fa-var-home); }\n.#{$fa-css-prefix}-hooli:before { content: fa-content($fa-var-hooli); }\n.#{$fa-css-prefix}-hornbill:before { content: fa-content($fa-var-hornbill); }\n.#{$fa-css-prefix}-horse:before { content: fa-content($fa-var-horse); }\n.#{$fa-css-prefix}-horse-head:before { content: fa-content($fa-var-horse-head); }\n.#{$fa-css-prefix}-hospital:before { content: fa-content($fa-var-hospital); }\n.#{$fa-css-prefix}-hospital-alt:before { content: fa-content($fa-var-hospital-alt); }\n.#{$fa-css-prefix}-hospital-symbol:before { content: fa-content($fa-var-hospital-symbol); }\n.#{$fa-css-prefix}-hot-tub:before { content: fa-content($fa-var-hot-tub); }\n.#{$fa-css-prefix}-hotel:before { content: fa-content($fa-var-hotel); }\n.#{$fa-css-prefix}-hotjar:before { content: fa-content($fa-var-hotjar); }\n.#{$fa-css-prefix}-hourglass:before { content: fa-content($fa-var-hourglass); }\n.#{$fa-css-prefix}-hourglass-end:before { content: fa-content($fa-var-hourglass-end); }\n.#{$fa-css-prefix}-hourglass-half:before { content: fa-content($fa-var-hourglass-half); }\n.#{$fa-css-prefix}-hourglass-start:before { content: fa-content($fa-var-hourglass-start); }\n.#{$fa-css-prefix}-house-damage:before { content: fa-content($fa-var-house-damage); }\n.#{$fa-css-prefix}-houzz:before { content: fa-content($fa-var-houzz); }\n.#{$fa-css-prefix}-hryvnia:before { content: fa-content($fa-var-hryvnia); }\n.#{$fa-css-prefix}-html5:before { content: fa-content($fa-var-html5); }\n.#{$fa-css-prefix}-hubspot:before { content: fa-content($fa-var-hubspot); }\n.#{$fa-css-prefix}-i-cursor:before { content: fa-content($fa-var-i-cursor); }\n.#{$fa-css-prefix}-icicles:before { content: fa-content($fa-var-icicles); }\n.#{$fa-css-prefix}-id-badge:before { content: fa-content($fa-var-id-badge); }\n.#{$fa-css-prefix}-id-card:before { content: fa-content($fa-var-id-card); }\n.#{$fa-css-prefix}-id-card-alt:before { content: fa-content($fa-var-id-card-alt); }\n.#{$fa-css-prefix}-igloo:before { content: fa-content($fa-var-igloo); }\n.#{$fa-css-prefix}-image:before { content: fa-content($fa-var-image); }\n.#{$fa-css-prefix}-images:before { content: fa-content($fa-var-images); }\n.#{$fa-css-prefix}-imdb:before { content: fa-content($fa-var-imdb); }\n.#{$fa-css-prefix}-inbox:before { content: fa-content($fa-var-inbox); }\n.#{$fa-css-prefix}-indent:before { content: fa-content($fa-var-indent); }\n.#{$fa-css-prefix}-industry:before { content: fa-content($fa-var-industry); }\n.#{$fa-css-prefix}-infinity:before { content: fa-content($fa-var-infinity); }\n.#{$fa-css-prefix}-info:before { content: fa-content($fa-var-info); }\n.#{$fa-css-prefix}-info-circle:before { content: fa-content($fa-var-info-circle); }\n.#{$fa-css-prefix}-instagram:before { content: fa-content($fa-var-instagram); }\n.#{$fa-css-prefix}-intercom:before { content: fa-content($fa-var-intercom); }\n.#{$fa-css-prefix}-internet-explorer:before { content: fa-content($fa-var-internet-explorer); }\n.#{$fa-css-prefix}-invision:before { content: fa-content($fa-var-invision); }\n.#{$fa-css-prefix}-ioxhost:before { content: fa-content($fa-var-ioxhost); }\n.#{$fa-css-prefix}-italic:before { content: fa-content($fa-var-italic); }\n.#{$fa-css-prefix}-itunes:before { content: fa-content($fa-var-itunes); }\n.#{$fa-css-prefix}-itunes-note:before { content: fa-content($fa-var-itunes-note); }\n.#{$fa-css-prefix}-java:before { content: fa-content($fa-var-java); }\n.#{$fa-css-prefix}-jedi:before { content: fa-content($fa-var-jedi); }\n.#{$fa-css-prefix}-jedi-order:before { content: fa-content($fa-var-jedi-order); }\n.#{$fa-css-prefix}-jenkins:before { content: fa-content($fa-var-jenkins); }\n.#{$fa-css-prefix}-jira:before { content: fa-content($fa-var-jira); }\n.#{$fa-css-prefix}-joget:before { content: fa-content($fa-var-joget); }\n.#{$fa-css-prefix}-joint:before { content: fa-content($fa-var-joint); }\n.#{$fa-css-prefix}-joomla:before { content: fa-content($fa-var-joomla); }\n.#{$fa-css-prefix}-journal-whills:before { content: fa-content($fa-var-journal-whills); }\n.#{$fa-css-prefix}-js:before { content: fa-content($fa-var-js); }\n.#{$fa-css-prefix}-js-square:before { content: fa-content($fa-var-js-square); }\n.#{$fa-css-prefix}-jsfiddle:before { content: fa-content($fa-var-jsfiddle); }\n.#{$fa-css-prefix}-kaaba:before { content: fa-content($fa-var-kaaba); }\n.#{$fa-css-prefix}-kaggle:before { content: fa-content($fa-var-kaggle); }\n.#{$fa-css-prefix}-key:before { content: fa-content($fa-var-key); }\n.#{$fa-css-prefix}-keybase:before { content: fa-content($fa-var-keybase); }\n.#{$fa-css-prefix}-keyboard:before { content: fa-content($fa-var-keyboard); }\n.#{$fa-css-prefix}-keycdn:before { content: fa-content($fa-var-keycdn); }\n.#{$fa-css-prefix}-khanda:before { content: fa-content($fa-var-khanda); }\n.#{$fa-css-prefix}-kickstarter:before { content: fa-content($fa-var-kickstarter); }\n.#{$fa-css-prefix}-kickstarter-k:before { content: fa-content($fa-var-kickstarter-k); }\n.#{$fa-css-prefix}-kiss:before { content: fa-content($fa-var-kiss); }\n.#{$fa-css-prefix}-kiss-beam:before { content: fa-content($fa-var-kiss-beam); }\n.#{$fa-css-prefix}-kiss-wink-heart:before { content: fa-content($fa-var-kiss-wink-heart); }\n.#{$fa-css-prefix}-kiwi-bird:before { content: fa-content($fa-var-kiwi-bird); }\n.#{$fa-css-prefix}-korvue:before { content: fa-content($fa-var-korvue); }\n.#{$fa-css-prefix}-landmark:before { content: fa-content($fa-var-landmark); }\n.#{$fa-css-prefix}-language:before { content: fa-content($fa-var-language); }\n.#{$fa-css-prefix}-laptop:before { content: fa-content($fa-var-laptop); }\n.#{$fa-css-prefix}-laptop-code:before { content: fa-content($fa-var-laptop-code); }\n.#{$fa-css-prefix}-laravel:before { content: fa-content($fa-var-laravel); }\n.#{$fa-css-prefix}-lastfm:before { content: fa-content($fa-var-lastfm); }\n.#{$fa-css-prefix}-lastfm-square:before { content: fa-content($fa-var-lastfm-square); }\n.#{$fa-css-prefix}-laugh:before { content: fa-content($fa-var-laugh); }\n.#{$fa-css-prefix}-laugh-beam:before { content: fa-content($fa-var-laugh-beam); }\n.#{$fa-css-prefix}-laugh-squint:before { content: fa-content($fa-var-laugh-squint); }\n.#{$fa-css-prefix}-laugh-wink:before { content: fa-content($fa-var-laugh-wink); }\n.#{$fa-css-prefix}-layer-group:before { content: fa-content($fa-var-layer-group); }\n.#{$fa-css-prefix}-leaf:before { content: fa-content($fa-var-leaf); }\n.#{$fa-css-prefix}-leanpub:before { content: fa-content($fa-var-leanpub); }\n.#{$fa-css-prefix}-lemon:before { content: fa-content($fa-var-lemon); }\n.#{$fa-css-prefix}-less:before { content: fa-content($fa-var-less); }\n.#{$fa-css-prefix}-less-than:before { content: fa-content($fa-var-less-than); }\n.#{$fa-css-prefix}-less-than-equal:before { content: fa-content($fa-var-less-than-equal); }\n.#{$fa-css-prefix}-level-down-alt:before { content: fa-content($fa-var-level-down-alt); }\n.#{$fa-css-prefix}-level-up-alt:before { content: fa-content($fa-var-level-up-alt); }\n.#{$fa-css-prefix}-life-ring:before { content: fa-content($fa-var-life-ring); }\n.#{$fa-css-prefix}-lightbulb:before { content: fa-content($fa-var-lightbulb); }\n.#{$fa-css-prefix}-line:before { content: fa-content($fa-var-line); }\n.#{$fa-css-prefix}-link:before { content: fa-content($fa-var-link); }\n.#{$fa-css-prefix}-linkedin:before { content: fa-content($fa-var-linkedin); }\n.#{$fa-css-prefix}-linkedin-in:before { content: fa-content($fa-var-linkedin-in); }\n.#{$fa-css-prefix}-linode:before { content: fa-content($fa-var-linode); }\n.#{$fa-css-prefix}-linux:before { content: fa-content($fa-var-linux); }\n.#{$fa-css-prefix}-lira-sign:before { content: fa-content($fa-var-lira-sign); }\n.#{$fa-css-prefix}-list:before { content: fa-content($fa-var-list); }\n.#{$fa-css-prefix}-list-alt:before { content: fa-content($fa-var-list-alt); }\n.#{$fa-css-prefix}-list-ol:before { content: fa-content($fa-var-list-ol); }\n.#{$fa-css-prefix}-list-ul:before { content: fa-content($fa-var-list-ul); }\n.#{$fa-css-prefix}-location-arrow:before { content: fa-content($fa-var-location-arrow); }\n.#{$fa-css-prefix}-lock:before { content: fa-content($fa-var-lock); }\n.#{$fa-css-prefix}-lock-open:before { content: fa-content($fa-var-lock-open); }\n.#{$fa-css-prefix}-long-arrow-alt-down:before { content: fa-content($fa-var-long-arrow-alt-down); }\n.#{$fa-css-prefix}-long-arrow-alt-left:before { content: fa-content($fa-var-long-arrow-alt-left); }\n.#{$fa-css-prefix}-long-arrow-alt-right:before { content: fa-content($fa-var-long-arrow-alt-right); }\n.#{$fa-css-prefix}-long-arrow-alt-up:before { content: fa-content($fa-var-long-arrow-alt-up); }\n.#{$fa-css-prefix}-low-vision:before { content: fa-content($fa-var-low-vision); }\n.#{$fa-css-prefix}-luggage-cart:before { content: fa-content($fa-var-luggage-cart); }\n.#{$fa-css-prefix}-lyft:before { content: fa-content($fa-var-lyft); }\n.#{$fa-css-prefix}-magento:before { content: fa-content($fa-var-magento); }\n.#{$fa-css-prefix}-magic:before { content: fa-content($fa-var-magic); }\n.#{$fa-css-prefix}-magnet:before { content: fa-content($fa-var-magnet); }\n.#{$fa-css-prefix}-mail-bulk:before { content: fa-content($fa-var-mail-bulk); }\n.#{$fa-css-prefix}-mailchimp:before { content: fa-content($fa-var-mailchimp); }\n.#{$fa-css-prefix}-male:before { content: fa-content($fa-var-male); }\n.#{$fa-css-prefix}-mandalorian:before { content: fa-content($fa-var-mandalorian); }\n.#{$fa-css-prefix}-map:before { content: fa-content($fa-var-map); }\n.#{$fa-css-prefix}-map-marked:before { content: fa-content($fa-var-map-marked); }\n.#{$fa-css-prefix}-map-marked-alt:before { content: fa-content($fa-var-map-marked-alt); }\n.#{$fa-css-prefix}-map-marker:before { content: fa-content($fa-var-map-marker); }\n.#{$fa-css-prefix}-map-marker-alt:before { content: fa-content($fa-var-map-marker-alt); }\n.#{$fa-css-prefix}-map-pin:before { content: fa-content($fa-var-map-pin); }\n.#{$fa-css-prefix}-map-signs:before { content: fa-content($fa-var-map-signs); }\n.#{$fa-css-prefix}-markdown:before { content: fa-content($fa-var-markdown); }\n.#{$fa-css-prefix}-marker:before { content: fa-content($fa-var-marker); }\n.#{$fa-css-prefix}-mars:before { content: fa-content($fa-var-mars); }\n.#{$fa-css-prefix}-mars-double:before { content: fa-content($fa-var-mars-double); }\n.#{$fa-css-prefix}-mars-stroke:before { content: fa-content($fa-var-mars-stroke); }\n.#{$fa-css-prefix}-mars-stroke-h:before { content: fa-content($fa-var-mars-stroke-h); }\n.#{$fa-css-prefix}-mars-stroke-v:before { content: fa-content($fa-var-mars-stroke-v); }\n.#{$fa-css-prefix}-mask:before { content: fa-content($fa-var-mask); }\n.#{$fa-css-prefix}-mastodon:before { content: fa-content($fa-var-mastodon); }\n.#{$fa-css-prefix}-maxcdn:before { content: fa-content($fa-var-maxcdn); }\n.#{$fa-css-prefix}-medal:before { content: fa-content($fa-var-medal); }\n.#{$fa-css-prefix}-medapps:before { content: fa-content($fa-var-medapps); }\n.#{$fa-css-prefix}-medium:before { content: fa-content($fa-var-medium); }\n.#{$fa-css-prefix}-medium-m:before { content: fa-content($fa-var-medium-m); }\n.#{$fa-css-prefix}-medkit:before { content: fa-content($fa-var-medkit); }\n.#{$fa-css-prefix}-medrt:before { content: fa-content($fa-var-medrt); }\n.#{$fa-css-prefix}-meetup:before { content: fa-content($fa-var-meetup); }\n.#{$fa-css-prefix}-megaport:before { content: fa-content($fa-var-megaport); }\n.#{$fa-css-prefix}-meh:before { content: fa-content($fa-var-meh); }\n.#{$fa-css-prefix}-meh-blank:before { content: fa-content($fa-var-meh-blank); }\n.#{$fa-css-prefix}-meh-rolling-eyes:before { content: fa-content($fa-var-meh-rolling-eyes); }\n.#{$fa-css-prefix}-memory:before { content: fa-content($fa-var-memory); }\n.#{$fa-css-prefix}-mendeley:before { content: fa-content($fa-var-mendeley); }\n.#{$fa-css-prefix}-menorah:before { content: fa-content($fa-var-menorah); }\n.#{$fa-css-prefix}-mercury:before { content: fa-content($fa-var-mercury); }\n.#{$fa-css-prefix}-meteor:before { content: fa-content($fa-var-meteor); }\n.#{$fa-css-prefix}-microchip:before { content: fa-content($fa-var-microchip); }\n.#{$fa-css-prefix}-microphone:before { content: fa-content($fa-var-microphone); }\n.#{$fa-css-prefix}-microphone-alt:before { content: fa-content($fa-var-microphone-alt); }\n.#{$fa-css-prefix}-microphone-alt-slash:before { content: fa-content($fa-var-microphone-alt-slash); }\n.#{$fa-css-prefix}-microphone-slash:before { content: fa-content($fa-var-microphone-slash); }\n.#{$fa-css-prefix}-microscope:before { content: fa-content($fa-var-microscope); }\n.#{$fa-css-prefix}-microsoft:before { content: fa-content($fa-var-microsoft); }\n.#{$fa-css-prefix}-minus:before { content: fa-content($fa-var-minus); }\n.#{$fa-css-prefix}-minus-circle:before { content: fa-content($fa-var-minus-circle); }\n.#{$fa-css-prefix}-minus-square:before { content: fa-content($fa-var-minus-square); }\n.#{$fa-css-prefix}-mitten:before { content: fa-content($fa-var-mitten); }\n.#{$fa-css-prefix}-mix:before { content: fa-content($fa-var-mix); }\n.#{$fa-css-prefix}-mixcloud:before { content: fa-content($fa-var-mixcloud); }\n.#{$fa-css-prefix}-mizuni:before { content: fa-content($fa-var-mizuni); }\n.#{$fa-css-prefix}-mobile:before { content: fa-content($fa-var-mobile); }\n.#{$fa-css-prefix}-mobile-alt:before { content: fa-content($fa-var-mobile-alt); }\n.#{$fa-css-prefix}-modx:before { content: fa-content($fa-var-modx); }\n.#{$fa-css-prefix}-monero:before { content: fa-content($fa-var-monero); }\n.#{$fa-css-prefix}-money-bill:before { content: fa-content($fa-var-money-bill); }\n.#{$fa-css-prefix}-money-bill-alt:before { content: fa-content($fa-var-money-bill-alt); }\n.#{$fa-css-prefix}-money-bill-wave:before { content: fa-content($fa-var-money-bill-wave); }\n.#{$fa-css-prefix}-money-bill-wave-alt:before { content: fa-content($fa-var-money-bill-wave-alt); }\n.#{$fa-css-prefix}-money-check:before { content: fa-content($fa-var-money-check); }\n.#{$fa-css-prefix}-money-check-alt:before { content: fa-content($fa-var-money-check-alt); }\n.#{$fa-css-prefix}-monument:before { content: fa-content($fa-var-monument); }\n.#{$fa-css-prefix}-moon:before { content: fa-content($fa-var-moon); }\n.#{$fa-css-prefix}-mortar-pestle:before { content: fa-content($fa-var-mortar-pestle); }\n.#{$fa-css-prefix}-mosque:before { content: fa-content($fa-var-mosque); }\n.#{$fa-css-prefix}-motorcycle:before { content: fa-content($fa-var-motorcycle); }\n.#{$fa-css-prefix}-mountain:before { content: fa-content($fa-var-mountain); }\n.#{$fa-css-prefix}-mouse-pointer:before { content: fa-content($fa-var-mouse-pointer); }\n.#{$fa-css-prefix}-mug-hot:before { content: fa-content($fa-var-mug-hot); }\n.#{$fa-css-prefix}-music:before { content: fa-content($fa-var-music); }\n.#{$fa-css-prefix}-napster:before { content: fa-content($fa-var-napster); }\n.#{$fa-css-prefix}-neos:before { content: fa-content($fa-var-neos); }\n.#{$fa-css-prefix}-network-wired:before { content: fa-content($fa-var-network-wired); }\n.#{$fa-css-prefix}-neuter:before { content: fa-content($fa-var-neuter); }\n.#{$fa-css-prefix}-newspaper:before { content: fa-content($fa-var-newspaper); }\n.#{$fa-css-prefix}-nimblr:before { content: fa-content($fa-var-nimblr); }\n/*.#{$fa-css-prefix}-nintendo-switch:before { content: fa-content($fa-var-nintendo-switch); }*/\n.#{$fa-css-prefix}-node:before { content: fa-content($fa-var-node); }\n.#{$fa-css-prefix}-node-js:before { content: fa-content($fa-var-node-js); }\n.#{$fa-css-prefix}-not-equal:before { content: fa-content($fa-var-not-equal); }\n.#{$fa-css-prefix}-notes-medical:before { content: fa-content($fa-var-notes-medical); }\n.#{$fa-css-prefix}-npm:before { content: fa-content($fa-var-npm); }\n.#{$fa-css-prefix}-ns8:before { content: fa-content($fa-var-ns8); }\n.#{$fa-css-prefix}-nutritionix:before { content: fa-content($fa-var-nutritionix); }\n.#{$fa-css-prefix}-object-group:before { content: fa-content($fa-var-object-group); }\n.#{$fa-css-prefix}-object-ungroup:before { content: fa-content($fa-var-object-ungroup); }\n.#{$fa-css-prefix}-odnoklassniki:before { content: fa-content($fa-var-odnoklassniki); }\n.#{$fa-css-prefix}-odnoklassniki-square:before { content: fa-content($fa-var-odnoklassniki-square); }\n.#{$fa-css-prefix}-oil-can:before { content: fa-content($fa-var-oil-can); }\n.#{$fa-css-prefix}-old-republic:before { content: fa-content($fa-var-old-republic); }\n.#{$fa-css-prefix}-om:before { content: fa-content($fa-var-om); }\n.#{$fa-css-prefix}-opencart:before { content: fa-content($fa-var-opencart); }\n.#{$fa-css-prefix}-openid:before { content: fa-content($fa-var-openid); }\n.#{$fa-css-prefix}-opera:before { content: fa-content($fa-var-opera); }\n.#{$fa-css-prefix}-optin-monster:before { content: fa-content($fa-var-optin-monster); }\n.#{$fa-css-prefix}-osi:before { content: fa-content($fa-var-osi); }\n.#{$fa-css-prefix}-otter:before { content: fa-content($fa-var-otter); }\n.#{$fa-css-prefix}-outdent:before { content: fa-content($fa-var-outdent); }\n.#{$fa-css-prefix}-page4:before { content: fa-content($fa-var-page4); }\n.#{$fa-css-prefix}-pagelines:before { content: fa-content($fa-var-pagelines); }\n.#{$fa-css-prefix}-paint-brush:before { content: fa-content($fa-var-paint-brush); }\n.#{$fa-css-prefix}-paint-roller:before { content: fa-content($fa-var-paint-roller); }\n.#{$fa-css-prefix}-palette:before { content: fa-content($fa-var-palette); }\n.#{$fa-css-prefix}-palfed:before { content: fa-content($fa-var-palfed); }\n.#{$fa-css-prefix}-pallet:before { content: fa-content($fa-var-pallet); }\n.#{$fa-css-prefix}-paper-plane:before { content: fa-content($fa-var-paper-plane); }\n.#{$fa-css-prefix}-paperclip:before { content: fa-content($fa-var-paperclip); }\n.#{$fa-css-prefix}-parachute-box:before { content: fa-content($fa-var-parachute-box); }\n.#{$fa-css-prefix}-paragraph:before { content: fa-content($fa-var-paragraph); }\n.#{$fa-css-prefix}-parking:before { content: fa-content($fa-var-parking); }\n.#{$fa-css-prefix}-passport:before { content: fa-content($fa-var-passport); }\n.#{$fa-css-prefix}-pastafarianism:before { content: fa-content($fa-var-pastafarianism); }\n.#{$fa-css-prefix}-paste:before { content: fa-content($fa-var-paste); }\n.#{$fa-css-prefix}-patreon:before { content: fa-content($fa-var-patreon); }\n.#{$fa-css-prefix}-pause:before { content: fa-content($fa-var-pause); }\n.#{$fa-css-prefix}-pause-circle:before { content: fa-content($fa-var-pause-circle); }\n.#{$fa-css-prefix}-paw:before { content: fa-content($fa-var-paw); }\n.#{$fa-css-prefix}-paypal:before { content: fa-content($fa-var-paypal); }\n.#{$fa-css-prefix}-peace:before { content: fa-content($fa-var-peace); }\n.#{$fa-css-prefix}-pen:before { content: fa-content($fa-var-pen); }\n.#{$fa-css-prefix}-pen-alt:before { content: fa-content($fa-var-pen-alt); }\n.#{$fa-css-prefix}-pen-fancy:before { content: fa-content($fa-var-pen-fancy); }\n.#{$fa-css-prefix}-pen-nib:before { content: fa-content($fa-var-pen-nib); }\n.#{$fa-css-prefix}-pen-square:before { content: fa-content($fa-var-pen-square); }\n.#{$fa-css-prefix}-pencil-alt:before { content: fa-content($fa-var-pencil-alt); }\n.#{$fa-css-prefix}-pencil-ruler:before { content: fa-content($fa-var-pencil-ruler); }\n.#{$fa-css-prefix}-penny-arcade:before { content: fa-content($fa-var-penny-arcade); }\n.#{$fa-css-prefix}-people-carry:before { content: fa-content($fa-var-people-carry); }\n.#{$fa-css-prefix}-percent:before { content: fa-content($fa-var-percent); }\n.#{$fa-css-prefix}-percentage:before { content: fa-content($fa-var-percentage); }\n.#{$fa-css-prefix}-periscope:before { content: fa-content($fa-var-periscope); }\n.#{$fa-css-prefix}-person-booth:before { content: fa-content($fa-var-person-booth); }\n.#{$fa-css-prefix}-phabricator:before { content: fa-content($fa-var-phabricator); }\n.#{$fa-css-prefix}-phoenix-framework:before { content: fa-content($fa-var-phoenix-framework); }\n.#{$fa-css-prefix}-phoenix-squadron:before { content: fa-content($fa-var-phoenix-squadron); }\n.#{$fa-css-prefix}-phone:before { content: fa-content($fa-var-phone); }\n.#{$fa-css-prefix}-phone-slash:before { content: fa-content($fa-var-phone-slash); }\n.#{$fa-css-prefix}-phone-square:before { content: fa-content($fa-var-phone-square); }\n.#{$fa-css-prefix}-phone-volume:before { content: fa-content($fa-var-phone-volume); }\n.#{$fa-css-prefix}-php:before { content: fa-content($fa-var-php); }\n.#{$fa-css-prefix}-pied-piper:before { content: fa-content($fa-var-pied-piper); }\n.#{$fa-css-prefix}-pied-piper-alt:before { content: fa-content($fa-var-pied-piper-alt); }\n.#{$fa-css-prefix}-pied-piper-hat:before { content: fa-content($fa-var-pied-piper-hat); }\n.#{$fa-css-prefix}-pied-piper-pp:before { content: fa-content($fa-var-pied-piper-pp); }\n.#{$fa-css-prefix}-piggy-bank:before { content: fa-content($fa-var-piggy-bank); }\n.#{$fa-css-prefix}-pills:before { content: fa-content($fa-var-pills); }\n.#{$fa-css-prefix}-pinterest:before { content: fa-content($fa-var-pinterest); }\n.#{$fa-css-prefix}-pinterest-p:before { content: fa-content($fa-var-pinterest-p); }\n.#{$fa-css-prefix}-pinterest-square:before { content: fa-content($fa-var-pinterest-square); }\n.#{$fa-css-prefix}-place-of-worship:before { content: fa-content($fa-var-place-of-worship); }\n.#{$fa-css-prefix}-plane:before { content: fa-content($fa-var-plane); }\n.#{$fa-css-prefix}-plane-arrival:before { content: fa-content($fa-var-plane-arrival); }\n.#{$fa-css-prefix}-plane-departure:before { content: fa-content($fa-var-plane-departure); }\n.#{$fa-css-prefix}-play:before { content: fa-content($fa-var-play); }\n.#{$fa-css-prefix}-play-circle:before { content: fa-content($fa-var-play-circle); }\n.#{$fa-css-prefix}-playstation:before { content: fa-content($fa-var-playstation); }\n.#{$fa-css-prefix}-plug:before { content: fa-content($fa-var-plug); }\n.#{$fa-css-prefix}-plus:before { content: fa-content($fa-var-plus); }\n.#{$fa-css-prefix}-plus-circle:before { content: fa-content($fa-var-plus-circle); }\n.#{$fa-css-prefix}-plus-square:before { content: fa-content($fa-var-plus-square); }\n.#{$fa-css-prefix}-podcast:before { content: fa-content($fa-var-podcast); }\n.#{$fa-css-prefix}-poll:before { content: fa-content($fa-var-poll); }\n.#{$fa-css-prefix}-poll-h:before { content: fa-content($fa-var-poll-h); }\n.#{$fa-css-prefix}-poo:before { content: fa-content($fa-var-poo); }\n.#{$fa-css-prefix}-poo-storm:before { content: fa-content($fa-var-poo-storm); }\n.#{$fa-css-prefix}-poop:before { content: fa-content($fa-var-poop); }\n.#{$fa-css-prefix}-portrait:before { content: fa-content($fa-var-portrait); }\n.#{$fa-css-prefix}-pound-sign:before { content: fa-content($fa-var-pound-sign); }\n.#{$fa-css-prefix}-power-off:before { content: fa-content($fa-var-power-off); }\n.#{$fa-css-prefix}-pray:before { content: fa-content($fa-var-pray); }\n.#{$fa-css-prefix}-praying-hands:before { content: fa-content($fa-var-praying-hands); }\n.#{$fa-css-prefix}-prescription:before { content: fa-content($fa-var-prescription); }\n.#{$fa-css-prefix}-prescription-bottle:before { content: fa-content($fa-var-prescription-bottle); }\n.#{$fa-css-prefix}-prescription-bottle-alt:before { content: fa-content($fa-var-prescription-bottle-alt); }\n.#{$fa-css-prefix}-print:before { content: fa-content($fa-var-print); }\n.#{$fa-css-prefix}-procedures:before { content: fa-content($fa-var-procedures); }\n.#{$fa-css-prefix}-product-hunt:before { content: fa-content($fa-var-product-hunt); }\n.#{$fa-css-prefix}-project-diagram:before { content: fa-content($fa-var-project-diagram); }\n.#{$fa-css-prefix}-pushed:before { content: fa-content($fa-var-pushed); }\n.#{$fa-css-prefix}-puzzle-piece:before { content: fa-content($fa-var-puzzle-piece); }\n.#{$fa-css-prefix}-python:before { content: fa-content($fa-var-python); }\n.#{$fa-css-prefix}-qq:before { content: fa-content($fa-var-qq); }\n.#{$fa-css-prefix}-qrcode:before { content: fa-content($fa-var-qrcode); }\n.#{$fa-css-prefix}-question:before { content: fa-content($fa-var-question); }\n.#{$fa-css-prefix}-question-circle:before { content: fa-content($fa-var-question-circle); }\n.#{$fa-css-prefix}-quidditch:before { content: fa-content($fa-var-quidditch); }\n.#{$fa-css-prefix}-quinscape:before { content: fa-content($fa-var-quinscape); }\n.#{$fa-css-prefix}-quora:before { content: fa-content($fa-var-quora); }\n.#{$fa-css-prefix}-quote-left:before { content: fa-content($fa-var-quote-left); }\n.#{$fa-css-prefix}-quote-right:before { content: fa-content($fa-var-quote-right); }\n.#{$fa-css-prefix}-quran:before { content: fa-content($fa-var-quran); }\n.#{$fa-css-prefix}-r-project:before { content: fa-content($fa-var-r-project); }\n.#{$fa-css-prefix}-radiation:before { content: fa-content($fa-var-radiation); }\n.#{$fa-css-prefix}-radiation-alt:before { content: fa-content($fa-var-radiation-alt); }\n.#{$fa-css-prefix}-rainbow:before { content: fa-content($fa-var-rainbow); }\n.#{$fa-css-prefix}-random:before { content: fa-content($fa-var-random); }\n.#{$fa-css-prefix}-raspberry-pi:before { content: fa-content($fa-var-raspberry-pi); }\n.#{$fa-css-prefix}-ravelry:before { content: fa-content($fa-var-ravelry); }\n.#{$fa-css-prefix}-react:before { content: fa-content($fa-var-react); }\n.#{$fa-css-prefix}-reacteurope:before { content: fa-content($fa-var-reacteurope); }\n.#{$fa-css-prefix}-readme:before { content: fa-content($fa-var-readme); }\n.#{$fa-css-prefix}-rebel:before { content: fa-content($fa-var-rebel); }\n.#{$fa-css-prefix}-receipt:before { content: fa-content($fa-var-receipt); }\n.#{$fa-css-prefix}-recycle:before { content: fa-content($fa-var-recycle); }\n.#{$fa-css-prefix}-red-river:before { content: fa-content($fa-var-red-river); }\n.#{$fa-css-prefix}-reddit:before { content: fa-content($fa-var-reddit); }\n.#{$fa-css-prefix}-reddit-alien:before { content: fa-content($fa-var-reddit-alien); }\n.#{$fa-css-prefix}-reddit-square:before { content: fa-content($fa-var-reddit-square); }\n.#{$fa-css-prefix}-redhat:before { content: fa-content($fa-var-redhat); }\n.#{$fa-css-prefix}-redo:before { content: fa-content($fa-var-redo); }\n.#{$fa-css-prefix}-redo-alt:before { content: fa-content($fa-var-redo-alt); }\n.#{$fa-css-prefix}-registered:before { content: fa-content($fa-var-registered); }\n.#{$fa-css-prefix}-renren:before { content: fa-content($fa-var-renren); }\n.#{$fa-css-prefix}-reply:before { content: fa-content($fa-var-reply); }\n.#{$fa-css-prefix}-reply-all:before { content: fa-content($fa-var-reply-all); }\n.#{$fa-css-prefix}-replyd:before { content: fa-content($fa-var-replyd); }\n.#{$fa-css-prefix}-republican:before { content: fa-content($fa-var-republican); }\n.#{$fa-css-prefix}-researchgate:before { content: fa-content($fa-var-researchgate); }\n.#{$fa-css-prefix}-resolving:before { content: fa-content($fa-var-resolving); }\n.#{$fa-css-prefix}-restroom:before { content: fa-content($fa-var-restroom); }\n.#{$fa-css-prefix}-retweet:before { content: fa-content($fa-var-retweet); }\n.#{$fa-css-prefix}-rev:before { content: fa-content($fa-var-rev); }\n.#{$fa-css-prefix}-ribbon:before { content: fa-content($fa-var-ribbon); }\n.#{$fa-css-prefix}-ring:before { content: fa-content($fa-var-ring); }\n.#{$fa-css-prefix}-road:before { content: fa-content($fa-var-road); }\n.#{$fa-css-prefix}-robot:before { content: fa-content($fa-var-robot); }\n.#{$fa-css-prefix}-rocket:before { content: fa-content($fa-var-rocket); }\n.#{$fa-css-prefix}-rocketchat:before { content: fa-content($fa-var-rocketchat); }\n.#{$fa-css-prefix}-rockrms:before { content: fa-content($fa-var-rockrms); }\n.#{$fa-css-prefix}-route:before { content: fa-content($fa-var-route); }\n.#{$fa-css-prefix}-rss:before { content: fa-content($fa-var-rss); }\n.#{$fa-css-prefix}-rss-square:before { content: fa-content($fa-var-rss-square); }\n.#{$fa-css-prefix}-ruble-sign:before { content: fa-content($fa-var-ruble-sign); }\n.#{$fa-css-prefix}-ruler:before { content: fa-content($fa-var-ruler); }\n.#{$fa-css-prefix}-ruler-combined:before { content: fa-content($fa-var-ruler-combined); }\n.#{$fa-css-prefix}-ruler-horizontal:before { content: fa-content($fa-var-ruler-horizontal); }\n.#{$fa-css-prefix}-ruler-vertical:before { content: fa-content($fa-var-ruler-vertical); }\n.#{$fa-css-prefix}-running:before { content: fa-content($fa-var-running); }\n.#{$fa-css-prefix}-rupee-sign:before { content: fa-content($fa-var-rupee-sign); }\n.#{$fa-css-prefix}-sad-cry:before { content: fa-content($fa-var-sad-cry); }\n.#{$fa-css-prefix}-sad-tear:before { content: fa-content($fa-var-sad-tear); }\n.#{$fa-css-prefix}-safari:before { content: fa-content($fa-var-safari); }\n.#{$fa-css-prefix}-sass:before { content: fa-content($fa-var-sass); }\n.#{$fa-css-prefix}-satellite:before { content: fa-content($fa-var-satellite); }\n.#{$fa-css-prefix}-satellite-dish:before { content: fa-content($fa-var-satellite-dish); }\n.#{$fa-css-prefix}-save:before { content: fa-content($fa-var-save); }\n.#{$fa-css-prefix}-schlix:before { content: fa-content($fa-var-schlix); }\n.#{$fa-css-prefix}-school:before { content: fa-content($fa-var-school); }\n.#{$fa-css-prefix}-screwdriver:before { content: fa-content($fa-var-screwdriver); }\n.#{$fa-css-prefix}-scribd:before { content: fa-content($fa-var-scribd); }\n.#{$fa-css-prefix}-scroll:before { content: fa-content($fa-var-scroll); }\n.#{$fa-css-prefix}-sd-card:before { content: fa-content($fa-var-sd-card); }\n.#{$fa-css-prefix}-search:before { content: fa-content($fa-var-search); }\n.#{$fa-css-prefix}-search-dollar:before { content: fa-content($fa-var-search-dollar); }\n.#{$fa-css-prefix}-search-location:before { content: fa-content($fa-var-search-location); }\n.#{$fa-css-prefix}-search-minus:before { content: fa-content($fa-var-search-minus); }\n.#{$fa-css-prefix}-search-plus:before { content: fa-content($fa-var-search-plus); }\n.#{$fa-css-prefix}-searchengin:before { content: fa-content($fa-var-searchengin); }\n.#{$fa-css-prefix}-seedling:before { content: fa-content($fa-var-seedling); }\n.#{$fa-css-prefix}-sellcast:before { content: fa-content($fa-var-sellcast); }\n.#{$fa-css-prefix}-sellsy:before { content: fa-content($fa-var-sellsy); }\n.#{$fa-css-prefix}-server:before { content: fa-content($fa-var-server); }\n.#{$fa-css-prefix}-servicestack:before { content: fa-content($fa-var-servicestack); }\n.#{$fa-css-prefix}-shapes:before { content: fa-content($fa-var-shapes); }\n.#{$fa-css-prefix}-share:before { content: fa-content($fa-var-share); }\n.#{$fa-css-prefix}-share-alt:before { content: fa-content($fa-var-share-alt); }\n.#{$fa-css-prefix}-share-alt-square:before { content: fa-content($fa-var-share-alt-square); }\n.#{$fa-css-prefix}-share-square:before { content: fa-content($fa-var-share-square); }\n.#{$fa-css-prefix}-shekel-sign:before { content: fa-content($fa-var-shekel-sign); }\n.#{$fa-css-prefix}-shield-alt:before { content: fa-content($fa-var-shield-alt); }\n.#{$fa-css-prefix}-ship:before { content: fa-content($fa-var-ship); }\n.#{$fa-css-prefix}-shipping-fast:before { content: fa-content($fa-var-shipping-fast); }\n.#{$fa-css-prefix}-shirtsinbulk:before { content: fa-content($fa-var-shirtsinbulk); }\n.#{$fa-css-prefix}-shoe-prints:before { content: fa-content($fa-var-shoe-prints); }\n.#{$fa-css-prefix}-shopping-bag:before { content: fa-content($fa-var-shopping-bag); }\n.#{$fa-css-prefix}-shopping-basket:before { content: fa-content($fa-var-shopping-basket); }\n.#{$fa-css-prefix}-shopping-cart:before { content: fa-content($fa-var-shopping-cart); }\n.#{$fa-css-prefix}-shopware:before { content: fa-content($fa-var-shopware); }\n.#{$fa-css-prefix}-shower:before { content: fa-content($fa-var-shower); }\n.#{$fa-css-prefix}-shuttle-van:before { content: fa-content($fa-var-shuttle-van); }\n.#{$fa-css-prefix}-sign:before { content: fa-content($fa-var-sign); }\n.#{$fa-css-prefix}-sign-in-alt:before { content: fa-content($fa-var-sign-in-alt); }\n.#{$fa-css-prefix}-sign-language:before { content: fa-content($fa-var-sign-language); }\n.#{$fa-css-prefix}-sign-out-alt:before { content: fa-content($fa-var-sign-out-alt); }\n.#{$fa-css-prefix}-signal:before { content: fa-content($fa-var-signal); }\n.#{$fa-css-prefix}-signature:before { content: fa-content($fa-var-signature); }\n.#{$fa-css-prefix}-sim-card:before { content: fa-content($fa-var-sim-card); }\n.#{$fa-css-prefix}-simplybuilt:before { content: fa-content($fa-var-simplybuilt); }\n.#{$fa-css-prefix}-sistrix:before { content: fa-content($fa-var-sistrix); }\n.#{$fa-css-prefix}-sitemap:before { content: fa-content($fa-var-sitemap); }\n.#{$fa-css-prefix}-sith:before { content: fa-content($fa-var-sith); }\n.#{$fa-css-prefix}-skating:before { content: fa-content($fa-var-skating); }\n.#{$fa-css-prefix}-sketch:before { content: fa-content($fa-var-sketch); }\n.#{$fa-css-prefix}-skiing:before { content: fa-content($fa-var-skiing); }\n.#{$fa-css-prefix}-skiing-nordic:before { content: fa-content($fa-var-skiing-nordic); }\n.#{$fa-css-prefix}-skull:before { content: fa-content($fa-var-skull); }\n.#{$fa-css-prefix}-skull-crossbones:before { content: fa-content($fa-var-skull-crossbones); }\n.#{$fa-css-prefix}-skyatlas:before { content: fa-content($fa-var-skyatlas); }\n.#{$fa-css-prefix}-skype:before { content: fa-content($fa-var-skype); }\n.#{$fa-css-prefix}-slack:before { content: fa-content($fa-var-slack); }\n.#{$fa-css-prefix}-slack-hash:before { content: fa-content($fa-var-slack-hash); }\n.#{$fa-css-prefix}-slash:before { content: fa-content($fa-var-slash); }\n.#{$fa-css-prefix}-sleigh:before { content: fa-content($fa-var-sleigh); }\n.#{$fa-css-prefix}-sliders-h:before { content: fa-content($fa-var-sliders-h); }\n.#{$fa-css-prefix}-slideshare:before { content: fa-content($fa-var-slideshare); }\n.#{$fa-css-prefix}-smile:before { content: fa-content($fa-var-smile); }\n.#{$fa-css-prefix}-smile-beam:before { content: fa-content($fa-var-smile-beam); }\n.#{$fa-css-prefix}-smile-wink:before { content: fa-content($fa-var-smile-wink); }\n.#{$fa-css-prefix}-smog:before { content: fa-content($fa-var-smog); }\n.#{$fa-css-prefix}-smoking:before { content: fa-content($fa-var-smoking); }\n.#{$fa-css-prefix}-smoking-ban:before { content: fa-content($fa-var-smoking-ban); }\n.#{$fa-css-prefix}-sms:before { content: fa-content($fa-var-sms); }\n.#{$fa-css-prefix}-snapchat:before { content: fa-content($fa-var-snapchat); }\n.#{$fa-css-prefix}-snapchat-ghost:before { content: fa-content($fa-var-snapchat-ghost); }\n.#{$fa-css-prefix}-snapchat-square:before { content: fa-content($fa-var-snapchat-square); }\n.#{$fa-css-prefix}-snowboarding:before { content: fa-content($fa-var-snowboarding); }\n.#{$fa-css-prefix}-snowflake:before { content: fa-content($fa-var-snowflake); }\n.#{$fa-css-prefix}-snowman:before { content: fa-content($fa-var-snowman); }\n.#{$fa-css-prefix}-snowplow:before { content: fa-content($fa-var-snowplow); }\n.#{$fa-css-prefix}-socks:before { content: fa-content($fa-var-socks); }\n.#{$fa-css-prefix}-solar-panel:before { content: fa-content($fa-var-solar-panel); }\n.#{$fa-css-prefix}-sort:before { content: fa-content($fa-var-sort); }\n.#{$fa-css-prefix}-sort-alpha-down:before { content: fa-content($fa-var-sort-alpha-down); }\n.#{$fa-css-prefix}-sort-alpha-up:before { content: fa-content($fa-var-sort-alpha-up); }\n.#{$fa-css-prefix}-sort-amount-down:before { content: fa-content($fa-var-sort-amount-down); }\n.#{$fa-css-prefix}-sort-amount-up:before { content: fa-content($fa-var-sort-amount-up); }\n.#{$fa-css-prefix}-sort-down:before { content: fa-content($fa-var-sort-down); }\n.#{$fa-css-prefix}-sort-numeric-down:before { content: fa-content($fa-var-sort-numeric-down); }\n.#{$fa-css-prefix}-sort-numeric-up:before { content: fa-content($fa-var-sort-numeric-up); }\n.#{$fa-css-prefix}-sort-up:before { content: fa-content($fa-var-sort-up); }\n.#{$fa-css-prefix}-soundcloud:before { content: fa-content($fa-var-soundcloud); }\n.#{$fa-css-prefix}-sourcetree:before { content: fa-content($fa-var-sourcetree); }\n.#{$fa-css-prefix}-spa:before { content: fa-content($fa-var-spa); }\n.#{$fa-css-prefix}-space-shuttle:before { content: fa-content($fa-var-space-shuttle); }\n.#{$fa-css-prefix}-speakap:before { content: fa-content($fa-var-speakap); }\n.#{$fa-css-prefix}-spider:before { content: fa-content($fa-var-spider); }\n.#{$fa-css-prefix}-spinner:before { content: fa-content($fa-var-spinner); }\n.#{$fa-css-prefix}-splotch:before { content: fa-content($fa-var-splotch); }\n.#{$fa-css-prefix}-spotify:before { content: fa-content($fa-var-spotify); }\n.#{$fa-css-prefix}-spray-can:before { content: fa-content($fa-var-spray-can); }\n.#{$fa-css-prefix}-square:before { content: fa-content($fa-var-square); }\n.#{$fa-css-prefix}-square-full:before { content: fa-content($fa-var-square-full); }\n.#{$fa-css-prefix}-square-root-alt:before { content: fa-content($fa-var-square-root-alt); }\n.#{$fa-css-prefix}-squarespace:before { content: fa-content($fa-var-squarespace); }\n.#{$fa-css-prefix}-stack-exchange:before { content: fa-content($fa-var-stack-exchange); }\n.#{$fa-css-prefix}-stack-overflow:before { content: fa-content($fa-var-stack-overflow); }\n.#{$fa-css-prefix}-stamp:before { content: fa-content($fa-var-stamp); }\n.#{$fa-css-prefix}-star:before { content: fa-content($fa-var-star); }\n.#{$fa-css-prefix}-star-and-crescent:before { content: fa-content($fa-var-star-and-crescent); }\n.#{$fa-css-prefix}-star-half:before { content: fa-content($fa-var-star-half); }\n.#{$fa-css-prefix}-star-half-alt:before { content: fa-content($fa-var-star-half-alt); }\n.#{$fa-css-prefix}-star-of-david:before { content: fa-content($fa-var-star-of-david); }\n.#{$fa-css-prefix}-star-of-life:before { content: fa-content($fa-var-star-of-life); }\n.#{$fa-css-prefix}-staylinked:before { content: fa-content($fa-var-staylinked); }\n.#{$fa-css-prefix}-steam:before { content: fa-content($fa-var-steam); }\n.#{$fa-css-prefix}-steam-square:before { content: fa-content($fa-var-steam-square); }\n.#{$fa-css-prefix}-steam-symbol:before { content: fa-content($fa-var-steam-symbol); }\n.#{$fa-css-prefix}-step-backward:before { content: fa-content($fa-var-step-backward); }\n.#{$fa-css-prefix}-step-forward:before { content: fa-content($fa-var-step-forward); }\n.#{$fa-css-prefix}-stethoscope:before { content: fa-content($fa-var-stethoscope); }\n.#{$fa-css-prefix}-sticker-mule:before { content: fa-content($fa-var-sticker-mule); }\n.#{$fa-css-prefix}-sticky-note:before { content: fa-content($fa-var-sticky-note); }\n.#{$fa-css-prefix}-stop:before { content: fa-content($fa-var-stop); }\n.#{$fa-css-prefix}-stop-circle:before { content: fa-content($fa-var-stop-circle); }\n.#{$fa-css-prefix}-stopwatch:before { content: fa-content($fa-var-stopwatch); }\n.#{$fa-css-prefix}-store:before { content: fa-content($fa-var-store); }\n.#{$fa-css-prefix}-store-alt:before { content: fa-content($fa-var-store-alt); }\n.#{$fa-css-prefix}-strava:before { content: fa-content($fa-var-strava); }\n.#{$fa-css-prefix}-stream:before { content: fa-content($fa-var-stream); }\n.#{$fa-css-prefix}-street-view:before { content: fa-content($fa-var-street-view); }\n.#{$fa-css-prefix}-strikethrough:before { content: fa-content($fa-var-strikethrough); }\n.#{$fa-css-prefix}-stripe:before { content: fa-content($fa-var-stripe); }\n.#{$fa-css-prefix}-stripe-s:before { content: fa-content($fa-var-stripe-s); }\n.#{$fa-css-prefix}-stroopwafel:before { content: fa-content($fa-var-stroopwafel); }\n.#{$fa-css-prefix}-studiovinari:before { content: fa-content($fa-var-studiovinari); }\n.#{$fa-css-prefix}-stumbleupon:before { content: fa-content($fa-var-stumbleupon); }\n.#{$fa-css-prefix}-stumbleupon-circle:before { content: fa-content($fa-var-stumbleupon-circle); }\n.#{$fa-css-prefix}-subscript:before { content: fa-content($fa-var-subscript); }\n.#{$fa-css-prefix}-subway:before { content: fa-content($fa-var-subway); }\n.#{$fa-css-prefix}-suitcase:before { content: fa-content($fa-var-suitcase); }\n.#{$fa-css-prefix}-suitcase-rolling:before { content: fa-content($fa-var-suitcase-rolling); }\n.#{$fa-css-prefix}-sun:before { content: fa-content($fa-var-sun); }\n.#{$fa-css-prefix}-superpowers:before { content: fa-content($fa-var-superpowers); }\n.#{$fa-css-prefix}-superscript:before { content: fa-content($fa-var-superscript); }\n.#{$fa-css-prefix}-supple:before { content: fa-content($fa-var-supple); }\n.#{$fa-css-prefix}-surprise:before { content: fa-content($fa-var-surprise); }\n.#{$fa-css-prefix}-suse:before { content: fa-content($fa-var-suse); }\n.#{$fa-css-prefix}-swatchbook:before { content: fa-content($fa-var-swatchbook); }\n.#{$fa-css-prefix}-swimmer:before { content: fa-content($fa-var-swimmer); }\n.#{$fa-css-prefix}-swimming-pool:before { content: fa-content($fa-var-swimming-pool); }\n.#{$fa-css-prefix}-synagogue:before { content: fa-content($fa-var-synagogue); }\n.#{$fa-css-prefix}-sync:before { content: fa-content($fa-var-sync); }\n.#{$fa-css-prefix}-sync-alt:before { content: fa-content($fa-var-sync-alt); }\n.#{$fa-css-prefix}-syringe:before { content: fa-content($fa-var-syringe); }\n.#{$fa-css-prefix}-table:before { content: fa-content($fa-var-table); }\n.#{$fa-css-prefix}-table-tennis:before { content: fa-content($fa-var-table-tennis); }\n.#{$fa-css-prefix}-tablet:before { content: fa-content($fa-var-tablet); }\n.#{$fa-css-prefix}-tablet-alt:before { content: fa-content($fa-var-tablet-alt); }\n.#{$fa-css-prefix}-tablets:before { content: fa-content($fa-var-tablets); }\n.#{$fa-css-prefix}-tachometer-alt:before { content: fa-content($fa-var-tachometer-alt); }\n.#{$fa-css-prefix}-tag:before { content: fa-content($fa-var-tag); }\n.#{$fa-css-prefix}-tags:before { content: fa-content($fa-var-tags); }\n.#{$fa-css-prefix}-tape:before { content: fa-content($fa-var-tape); }\n.#{$fa-css-prefix}-tasks:before { content: fa-content($fa-var-tasks); }\n.#{$fa-css-prefix}-taxi:before { content: fa-content($fa-var-taxi); }\n.#{$fa-css-prefix}-teamspeak:before { content: fa-content($fa-var-teamspeak); }\n.#{$fa-css-prefix}-teeth:before { content: fa-content($fa-var-teeth); }\n.#{$fa-css-prefix}-teeth-open:before { content: fa-content($fa-var-teeth-open); }\n.#{$fa-css-prefix}-telegram:before { content: fa-content($fa-var-telegram); }\n.#{$fa-css-prefix}-telegram-plane:before { content: fa-content($fa-var-telegram-plane); }\n.#{$fa-css-prefix}-temperature-high:before { content: fa-content($fa-var-temperature-high); }\n.#{$fa-css-prefix}-temperature-low:before { content: fa-content($fa-var-temperature-low); }\n.#{$fa-css-prefix}-tencent-weibo:before { content: fa-content($fa-var-tencent-weibo); }\n.#{$fa-css-prefix}-tenge:before { content: fa-content($fa-var-tenge); }\n.#{$fa-css-prefix}-terminal:before { content: fa-content($fa-var-terminal); }\n.#{$fa-css-prefix}-text-height:before { content: fa-content($fa-var-text-height); }\n.#{$fa-css-prefix}-text-width:before { content: fa-content($fa-var-text-width); }\n.#{$fa-css-prefix}-th:before { content: fa-content($fa-var-th); }\n.#{$fa-css-prefix}-th-large:before { content: fa-content($fa-var-th-large); }\n.#{$fa-css-prefix}-th-list:before { content: fa-content($fa-var-th-list); }\n.#{$fa-css-prefix}-the-red-yeti:before { content: fa-content($fa-var-the-red-yeti); }\n.#{$fa-css-prefix}-theater-masks:before { content: fa-content($fa-var-theater-masks); }\n.#{$fa-css-prefix}-themeco:before { content: fa-content($fa-var-themeco); }\n.#{$fa-css-prefix}-themeisle:before { content: fa-content($fa-var-themeisle); }\n.#{$fa-css-prefix}-thermometer:before { content: fa-content($fa-var-thermometer); }\n.#{$fa-css-prefix}-thermometer-empty:before { content: fa-content($fa-var-thermometer-empty); }\n.#{$fa-css-prefix}-thermometer-full:before { content: fa-content($fa-var-thermometer-full); }\n.#{$fa-css-prefix}-thermometer-half:before { content: fa-content($fa-var-thermometer-half); }\n.#{$fa-css-prefix}-thermometer-quarter:before { content: fa-content($fa-var-thermometer-quarter); }\n.#{$fa-css-prefix}-thermometer-three-quarters:before { content: fa-content($fa-var-thermometer-three-quarters); }\n.#{$fa-css-prefix}-think-peaks:before { content: fa-content($fa-var-think-peaks); }\n.#{$fa-css-prefix}-thumbs-down:before { content: fa-content($fa-var-thumbs-down); }\n.#{$fa-css-prefix}-thumbs-up:before { content: fa-content($fa-var-thumbs-up); }\n.#{$fa-css-prefix}-thumbtack:before { content: fa-content($fa-var-thumbtack); }\n.#{$fa-css-prefix}-ticket-alt:before { content: fa-content($fa-var-ticket-alt); }\n.#{$fa-css-prefix}-times:before { content: fa-content($fa-var-times); }\n.#{$fa-css-prefix}-times-circle:before { content: fa-content($fa-var-times-circle); }\n.#{$fa-css-prefix}-tint:before { content: fa-content($fa-var-tint); }\n.#{$fa-css-prefix}-tint-slash:before { content: fa-content($fa-var-tint-slash); }\n.#{$fa-css-prefix}-tired:before { content: fa-content($fa-var-tired); }\n.#{$fa-css-prefix}-toggle-off:before { content: fa-content($fa-var-toggle-off); }\n.#{$fa-css-prefix}-toggle-on:before { content: fa-content($fa-var-toggle-on); }\n.#{$fa-css-prefix}-toilet:before { content: fa-content($fa-var-toilet); }\n.#{$fa-css-prefix}-toilet-paper:before { content: fa-content($fa-var-toilet-paper); }\n.#{$fa-css-prefix}-toolbox:before { content: fa-content($fa-var-toolbox); }\n.#{$fa-css-prefix}-tools:before { content: fa-content($fa-var-tools); }\n.#{$fa-css-prefix}-tooth:before { content: fa-content($fa-var-tooth); }\n.#{$fa-css-prefix}-torah:before { content: fa-content($fa-var-torah); }\n.#{$fa-css-prefix}-torii-gate:before { content: fa-content($fa-var-torii-gate); }\n.#{$fa-css-prefix}-tractor:before { content: fa-content($fa-var-tractor); }\n.#{$fa-css-prefix}-trade-federation:before { content: fa-content($fa-var-trade-federation); }\n.#{$fa-css-prefix}-trademark:before { content: fa-content($fa-var-trademark); }\n.#{$fa-css-prefix}-traffic-light:before { content: fa-content($fa-var-traffic-light); }\n.#{$fa-css-prefix}-train:before { content: fa-content($fa-var-train); }\n.#{$fa-css-prefix}-tram:before { content: fa-content($fa-var-tram); }\n.#{$fa-css-prefix}-transgender:before { content: fa-content($fa-var-transgender); }\n.#{$fa-css-prefix}-transgender-alt:before { content: fa-content($fa-var-transgender-alt); }\n.#{$fa-css-prefix}-trash:before { content: fa-content($fa-var-trash); }\n.#{$fa-css-prefix}-trash-alt:before { content: fa-content($fa-var-trash-alt); }\n.#{$fa-css-prefix}-tree:before { content: fa-content($fa-var-tree); }\n.#{$fa-css-prefix}-trello:before { content: fa-content($fa-var-trello); }\n/*.#{$fa-css-prefix}-tripadvisor:before { content: fa-content($fa-var-tripadvisor); }*/\n.#{$fa-css-prefix}-trophy:before { content: fa-content($fa-var-trophy); }\n.#{$fa-css-prefix}-truck:before { content: fa-content($fa-var-truck); }\n.#{$fa-css-prefix}-truck-loading:before { content: fa-content($fa-var-truck-loading); }\n.#{$fa-css-prefix}-truck-monster:before { content: fa-content($fa-var-truck-monster); }\n.#{$fa-css-prefix}-truck-moving:before { content: fa-content($fa-var-truck-moving); }\n.#{$fa-css-prefix}-truck-pickup:before { content: fa-content($fa-var-truck-pickup); }\n.#{$fa-css-prefix}-tshirt:before { content: fa-content($fa-var-tshirt); }\n.#{$fa-css-prefix}-tty:before { content: fa-content($fa-var-tty); }\n.#{$fa-css-prefix}-tumblr:before { content: fa-content($fa-var-tumblr); }\n.#{$fa-css-prefix}-tumblr-square:before { content: fa-content($fa-var-tumblr-square); }\n.#{$fa-css-prefix}-tv:before { content: fa-content($fa-var-tv); }\n.#{$fa-css-prefix}-twitch:before { content: fa-content($fa-var-twitch); }\n.#{$fa-css-prefix}-twitter:before { content: fa-content($fa-var-twitter); }\n.#{$fa-css-prefix}-twitter-square:before { content: fa-content($fa-var-twitter-square); }\n.#{$fa-css-prefix}-typo3:before { content: fa-content($fa-var-typo3); }\n.#{$fa-css-prefix}-uber:before { content: fa-content($fa-var-uber); }\n.#{$fa-css-prefix}-ubuntu:before { content: fa-content($fa-var-ubuntu); }\n.#{$fa-css-prefix}-uikit:before { content: fa-content($fa-var-uikit); }\n.#{$fa-css-prefix}-umbrella:before { content: fa-content($fa-var-umbrella); }\n.#{$fa-css-prefix}-umbrella-beach:before { content: fa-content($fa-var-umbrella-beach); }\n.#{$fa-css-prefix}-underline:before { content: fa-content($fa-var-underline); }\n.#{$fa-css-prefix}-undo:before { content: fa-content($fa-var-undo); }\n.#{$fa-css-prefix}-undo-alt:before { content: fa-content($fa-var-undo-alt); }\n.#{$fa-css-prefix}-uniregistry:before { content: fa-content($fa-var-uniregistry); }\n.#{$fa-css-prefix}-universal-access:before { content: fa-content($fa-var-universal-access); }\n.#{$fa-css-prefix}-university:before { content: fa-content($fa-var-university); }\n.#{$fa-css-prefix}-unlink:before { content: fa-content($fa-var-unlink); }\n.#{$fa-css-prefix}-unlock:before { content: fa-content($fa-var-unlock); }\n.#{$fa-css-prefix}-unlock-alt:before { content: fa-content($fa-var-unlock-alt); }\n.#{$fa-css-prefix}-untappd:before { content: fa-content($fa-var-untappd); }\n.#{$fa-css-prefix}-upload:before { content: fa-content($fa-var-upload); }\n.#{$fa-css-prefix}-ups:before { content: fa-content($fa-var-ups); }\n.#{$fa-css-prefix}-usb:before { content: fa-content($fa-var-usb); }\n.#{$fa-css-prefix}-user:before { content: fa-content($fa-var-user); }\n.#{$fa-css-prefix}-user-alt:before { content: fa-content($fa-var-user-alt); }\n.#{$fa-css-prefix}-user-alt-slash:before { content: fa-content($fa-var-user-alt-slash); }\n.#{$fa-css-prefix}-user-astronaut:before { content: fa-content($fa-var-user-astronaut); }\n.#{$fa-css-prefix}-user-check:before { content: fa-content($fa-var-user-check); }\n.#{$fa-css-prefix}-user-circle:before { content: fa-content($fa-var-user-circle); }\n.#{$fa-css-prefix}-user-clock:before { content: fa-content($fa-var-user-clock); }\n.#{$fa-css-prefix}-user-cog:before { content: fa-content($fa-var-user-cog); }\n.#{$fa-css-prefix}-user-edit:before { content: fa-content($fa-var-user-edit); }\n.#{$fa-css-prefix}-user-friends:before { content: fa-content($fa-var-user-friends); }\n.#{$fa-css-prefix}-user-graduate:before { content: fa-content($fa-var-user-graduate); }\n.#{$fa-css-prefix}-user-injured:before { content: fa-content($fa-var-user-injured); }\n.#{$fa-css-prefix}-user-lock:before { content: fa-content($fa-var-user-lock); }\n.#{$fa-css-prefix}-user-md:before { content: fa-content($fa-var-user-md); }\n.#{$fa-css-prefix}-user-minus:before { content: fa-content($fa-var-user-minus); }\n.#{$fa-css-prefix}-user-ninja:before { content: fa-content($fa-var-user-ninja); }\n.#{$fa-css-prefix}-user-plus:before { content: fa-content($fa-var-user-plus); }\n.#{$fa-css-prefix}-user-secret:before { content: fa-content($fa-var-user-secret); }\n.#{$fa-css-prefix}-user-shield:before { content: fa-content($fa-var-user-shield); }\n.#{$fa-css-prefix}-user-slash:before { content: fa-content($fa-var-user-slash); }\n.#{$fa-css-prefix}-user-tag:before { content: fa-content($fa-var-user-tag); }\n.#{$fa-css-prefix}-user-tie:before { content: fa-content($fa-var-user-tie); }\n.#{$fa-css-prefix}-user-times:before { content: fa-content($fa-var-user-times); }\n.#{$fa-css-prefix}-users:before { content: fa-content($fa-var-users); }\n.#{$fa-css-prefix}-users-cog:before { content: fa-content($fa-var-users-cog); }\n.#{$fa-css-prefix}-usps:before { content: fa-content($fa-var-usps); }\n.#{$fa-css-prefix}-ussunnah:before { content: fa-content($fa-var-ussunnah); }\n.#{$fa-css-prefix}-utensil-spoon:before { content: fa-content($fa-var-utensil-spoon); }\n.#{$fa-css-prefix}-utensils:before { content: fa-content($fa-var-utensils); }\n.#{$fa-css-prefix}-vaadin:before { content: fa-content($fa-var-vaadin); }\n.#{$fa-css-prefix}-vector-square:before { content: fa-content($fa-var-vector-square); }\n.#{$fa-css-prefix}-venus:before { content: fa-content($fa-var-venus); }\n.#{$fa-css-prefix}-venus-double:before { content: fa-content($fa-var-venus-double); }\n.#{$fa-css-prefix}-venus-mars:before { content: fa-content($fa-var-venus-mars); }\n.#{$fa-css-prefix}-viacoin:before { content: fa-content($fa-var-viacoin); }\n.#{$fa-css-prefix}-viadeo:before { content: fa-content($fa-var-viadeo); }\n.#{$fa-css-prefix}-viadeo-square:before { content: fa-content($fa-var-viadeo-square); }\n.#{$fa-css-prefix}-vial:before { content: fa-content($fa-var-vial); }\n.#{$fa-css-prefix}-vials:before { content: fa-content($fa-var-vials); }\n.#{$fa-css-prefix}-viber:before { content: fa-content($fa-var-viber); }\n.#{$fa-css-prefix}-video:before { content: fa-content($fa-var-video); }\n.#{$fa-css-prefix}-video-slash:before { content: fa-content($fa-var-video-slash); }\n.#{$fa-css-prefix}-vihara:before { content: fa-content($fa-var-vihara); }\n.#{$fa-css-prefix}-vimeo:before { content: fa-content($fa-var-vimeo); }\n.#{$fa-css-prefix}-vimeo-square:before { content: fa-content($fa-var-vimeo-square); }\n.#{$fa-css-prefix}-vimeo-v:before { content: fa-content($fa-var-vimeo-v); }\n.#{$fa-css-prefix}-vine:before { content: fa-content($fa-var-vine); }\n.#{$fa-css-prefix}-vk:before { content: fa-content($fa-var-vk); }\n.#{$fa-css-prefix}-vnv:before { content: fa-content($fa-var-vnv); }\n.#{$fa-css-prefix}-volleyball-ball:before { content: fa-content($fa-var-volleyball-ball); }\n.#{$fa-css-prefix}-volume-down:before { content: fa-content($fa-var-volume-down); }\n.#{$fa-css-prefix}-volume-mute:before { content: fa-content($fa-var-volume-mute); }\n.#{$fa-css-prefix}-volume-off:before { content: fa-content($fa-var-volume-off); }\n.#{$fa-css-prefix}-volume-up:before { content: fa-content($fa-var-volume-up); }\n.#{$fa-css-prefix}-vote-yea:before { content: fa-content($fa-var-vote-yea); }\n.#{$fa-css-prefix}-vr-cardboard:before { content: fa-content($fa-var-vr-cardboard); }\n.#{$fa-css-prefix}-vuejs:before { content: fa-content($fa-var-vuejs); }\n.#{$fa-css-prefix}-walking:before { content: fa-content($fa-var-walking); }\n.#{$fa-css-prefix}-wallet:before { content: fa-content($fa-var-wallet); }\n.#{$fa-css-prefix}-warehouse:before { content: fa-content($fa-var-warehouse); }\n.#{$fa-css-prefix}-water:before { content: fa-content($fa-var-water); }\n.#{$fa-css-prefix}-weebly:before { content: fa-content($fa-var-weebly); }\n.#{$fa-css-prefix}-weibo:before { content: fa-content($fa-var-weibo); }\n.#{$fa-css-prefix}-weight:before { content: fa-content($fa-var-weight); }\n.#{$fa-css-prefix}-weight-hanging:before { content: fa-content($fa-var-weight-hanging); }\n.#{$fa-css-prefix}-weixin:before { content: fa-content($fa-var-weixin); }\n.#{$fa-css-prefix}-whatsapp:before { content: fa-content($fa-var-whatsapp); }\n.#{$fa-css-prefix}-whatsapp-square:before { content: fa-content($fa-var-whatsapp-square); }\n.#{$fa-css-prefix}-wheelchair:before { content: fa-content($fa-var-wheelchair); }\n.#{$fa-css-prefix}-whmcs:before { content: fa-content($fa-var-whmcs); }\n.#{$fa-css-prefix}-wifi:before { content: fa-content($fa-var-wifi); }\n.#{$fa-css-prefix}-wikipedia-w:before { content: fa-content($fa-var-wikipedia-w); }\n.#{$fa-css-prefix}-wind:before { content: fa-content($fa-var-wind); }\n.#{$fa-css-prefix}-window-close:before { content: fa-content($fa-var-window-close); }\n.#{$fa-css-prefix}-window-maximize:before { content: fa-content($fa-var-window-maximize); }\n.#{$fa-css-prefix}-window-minimize:before { content: fa-content($fa-var-window-minimize); }\n.#{$fa-css-prefix}-window-restore:before { content: fa-content($fa-var-window-restore); }\n.#{$fa-css-prefix}-windows:before { content: fa-content($fa-var-windows); }\n.#{$fa-css-prefix}-wine-bottle:before { content: fa-content($fa-var-wine-bottle); }\n.#{$fa-css-prefix}-wine-glass:before { content: fa-content($fa-var-wine-glass); }\n.#{$fa-css-prefix}-wine-glass-alt:before { content: fa-content($fa-var-wine-glass-alt); }\n.#{$fa-css-prefix}-wix:before { content: fa-content($fa-var-wix); }\n.#{$fa-css-prefix}-wizards-of-the-coast:before { content: fa-content($fa-var-wizards-of-the-coast); }\n.#{$fa-css-prefix}-wolf-pack-battalion:before { content: fa-content($fa-var-wolf-pack-battalion); }\n.#{$fa-css-prefix}-won-sign:before { content: fa-content($fa-var-won-sign); }\n.#{$fa-css-prefix}-wordpress:before { content: fa-content($fa-var-wordpress); }\n.#{$fa-css-prefix}-wordpress-simple:before { content: fa-content($fa-var-wordpress-simple); }\n.#{$fa-css-prefix}-wpbeginner:before { content: fa-content($fa-var-wpbeginner); }\n.#{$fa-css-prefix}-wpexplorer:before { content: fa-content($fa-var-wpexplorer); }\n.#{$fa-css-prefix}-wpforms:before { content: fa-content($fa-var-wpforms); }\n.#{$fa-css-prefix}-wpressr:before { content: fa-content($fa-var-wpressr); }\n.#{$fa-css-prefix}-wrench:before { content: fa-content($fa-var-wrench); }\n.#{$fa-css-prefix}-x-ray:before { content: fa-content($fa-var-x-ray); }\n.#{$fa-css-prefix}-xbox:before { content: fa-content($fa-var-xbox); }\n.#{$fa-css-prefix}-xing:before { content: fa-content($fa-var-xing); }\n.#{$fa-css-prefix}-xing-square:before { content: fa-content($fa-var-xing-square); }\n.#{$fa-css-prefix}-y-combinator:before { content: fa-content($fa-var-y-combinator); }\n.#{$fa-css-prefix}-yahoo:before { content: fa-content($fa-var-yahoo); }\n.#{$fa-css-prefix}-yandex:before { content: fa-content($fa-var-yandex); }\n.#{$fa-css-prefix}-yandex-international:before { content: fa-content($fa-var-yandex-international); }\n.#{$fa-css-prefix}-yarn:before { content: fa-content($fa-var-yarn); }\n.#{$fa-css-prefix}-yelp:before { content: fa-content($fa-var-yelp); }\n.#{$fa-css-prefix}-yen-sign:before { content: fa-content($fa-var-yen-sign); }\n.#{$fa-css-prefix}-yin-yang:before { content: fa-content($fa-var-yin-yang); }\n.#{$fa-css-prefix}-yoast:before { content: fa-content($fa-var-yoast); }\n.#{$fa-css-prefix}-youtube:before { content: fa-content($fa-var-youtube); }\n.#{$fa-css-prefix}-youtube-square:before { content: fa-content($fa-var-youtube-square); }\n.#{$fa-css-prefix}-zhihu:before { content: fa-content($fa-var-zhihu); }\n"
  },
  {
    "path": "src/sourceDev.WebApp/app-scss/_jquery-smartmenu-bootstrap.scss",
    "content": "﻿/******** jquery smartmenu bootstrap 4 ******/\n/* Carets in collapsible mode (make them look like +/- buttons) */\n.navbar-nav.sm-collapsible .sub-arrow {\n    position: absolute;\n    top: 50%;\n    right: 0;\n    margin: -0.7em 0.5em 0 0;\n    border: 1px solid rgba(0, 0, 0, .1);\n    border-radius: .25rem;\n    padding: 0;\n    width: 2em;\n    height: 1.4em;\n    font-size: 1.25rem;\n    line-height: 1.2em;\n    text-align: center;\n}\n\n.navbar-nav.sm-collapsible .sub-arrow::before {\n    content: '+';\n}\n\n.navbar-nav.sm-collapsible .show > a > .sub-arrow::before {\n    content: '-';\n}\n\n.navbar-dark .navbar-nav.sm-collapsible .nav-link .sub-arrow {\n    border-color: rgba(255, 255, 255, .1);\n}\n/* make sure there's room for the carets */\n.navbar-nav.sm-collapsible .has-submenu {\n    padding-right: 3em;\n}\n/* keep the carets properly positioned */\n.navbar-nav.sm-collapsible .nav-link,\n.navbar-nav.sm-collapsible .dropdown-item {\n    position: relative;\n}\n\n\n/* Nav carets in expanded mode */\n.navbar-nav:not(.sm-collapsible) .nav-link .sub-arrow {\n    display: inline-block;\n    width: 0;\n    height: 0;\n    margin-left: .255em;\n    vertical-align: .255em;\n    border-top: .3em solid;\n    border-right: .3em solid transparent;\n    border-left: .3em solid transparent;\n}\n/* point the arrows up for .fixed-bottom navbars */\n.fixed-bottom .navbar-nav:not(.sm-collapsible) .nav-link .sub-arrow,\n.fixed-bottom .navbar-nav:not(.sm-collapsible):not([data-sm-skip]) .dropdown-toggle::after {\n    border-top: 0;\n    border-bottom: .3em solid;\n}\n\n\n/* Dropdown carets in expanded mode */\n.navbar-nav:not(.sm-collapsible) .dropdown-item .sub-arrow,\n.navbar-nav:not(.sm-collapsible):not([data-sm-skip]) .dropdown-menu .dropdown-toggle::after {\n    position: absolute;\n    top: 50%;\n    right: 0;\n    width: 0;\n    height: 0;\n    margin-top: -.3em;\n    margin-right: 1em;\n    border-top: .3em solid transparent;\n    border-bottom: .3em solid transparent;\n    border-left: .3em solid;\n}\n/* make sure there's room for the carets */\n.navbar-nav:not(.sm-collapsible) .dropdown-item.has-submenu {\n    padding-right: 2em;\n}\n\n\n/* Scrolling arrows for tall menus */\n.navbar-nav .scroll-up,\n.navbar-nav .scroll-down {\n    position: absolute;\n    display: none;\n    visibility: hidden;\n    height: 20px;\n    overflow: hidden;\n    text-align: center;\n}\n\n.navbar-nav .scroll-up-arrow,\n.navbar-nav .scroll-down-arrow {\n    position: absolute;\n    top: -2px;\n    left: 50%;\n    margin-left: -8px;\n    width: 0;\n    height: 0;\n    overflow: hidden;\n    border-top: 7px solid transparent;\n    border-right: 7px solid transparent;\n    border-bottom: 7px solid;\n    border-left: 7px solid transparent;\n}\n\n.navbar-nav .scroll-down-arrow {\n    top: 6px;\n    border-top: 7px solid;\n    border-right: 7px solid transparent;\n    border-bottom: 7px solid transparent;\n    border-left: 7px solid transparent;\n}\n\n\n/* Add some spacing for 2+ level sub menus in collapsible mode */\n.navbar-nav.sm-collapsible .dropdown-menu .dropdown-menu {\n    margin: .5em;\n}\n\n\n/* Fix SmartMenus sub menus auto width (subMenusMinWidth/subMenusMaxWidth options) */\n.navbar-nav:not([data-sm-skip]) .dropdown-item {\n    white-space: normal;\n}\n\n.navbar-nav:not(.sm-collapsible) .sm-nowrap > li > .dropdown-item {\n    white-space: nowrap;\n}\n\n"
  },
  {
    "path": "src/sourceDev.WebApp/app-scss/_variables.scss",
    "content": "// Custom non-standard variables\n\n$mybrand: #03378d;\n\n\n// Bootstrap 4 Variables\n// Every Sass variable in Bootstrap 4 includes the !default flag allowing you to override the variables default value in your own Sass without modifying Bootstrap source code. \n// Uncomment variables as needed, modify their values in this file as needed but don't uncomment ones that you don't need to customize. \n// If a variable has already been assigned, then it wont be re-assigned by the default values in Bootstrap.\n\n//\n// Color system\n//\n\n// stylelint-disable\n$white: #fff ;\n$gray-100: #f8f9fa ;\n$gray-200: #e9ecef ;\n$gray-300: #dee2e6 ;\n$gray-400: #ced4da ;\n$gray-500: #adb5bd ;\n$gray-600: #6c757d ;\n$gray-700: #495057 ;\n$gray-800: #343a40 ;\n$gray-900: #212529 ;\n$black: #000 ;\n\n//$grays: () ;\n//$grays: map-merge(( \"100\": $gray-100, \"200\": $gray-200, \"300\": $gray-300, \"400\": $gray-400, \"500\": $gray-500, \"600\": $gray-600, \"700\": $gray-700, \"800\": $gray-800, \"900\": $gray-900 ), $grays);\n\n$blue: #007bff ;\n$indigo: #6610f2 ;\n$purple: #6f42c1 ;\n$pink: #e83e8c ;\n$red: #dc3545 ;\n$orange: #fd7e14 ;\n$yellow: #ffc107 ;\n$green: #28a745 ;\n$teal: #20c997 ;\n$cyan: #17a2b8 ;\n\n//$colors: () ;\n//$colors: map-merge(( \"blue\": $blue, \"indigo\": $indigo, \"purple\": $purple, \"pink\": $pink, \"red\": $red, \"orange\": $orange, \"yellow\": $yellow, \"green\": $green, \"teal\": $teal, \"cyan\": $cyan, \"white\": $white, \"gray\": $gray-600, \"gray-dark\": $gray-800 ), $colors);\n\n$primary: $mybrand;\n$secondary: $gray-600;\n$success: $green ;\n$info: $cyan;\n$warning: $yellow;\n$danger: $red;\n$light: $gray-100;\n$dark: $mybrand; //$gray-800;\n//$theme-colors: () ;\n//$theme-colors: map-merge(( \"primary\": $primary, \"secondary\": $secondary, \"success\": $success, \"info\": $info, \"warning\": $warning, \"danger\": $danger, \"light\": $light, \"dark\": $dark ), $theme-colors);\n// stylelint-enable\n// Set a specific jump point for requesting color jumps\n//$theme-color-interval: 8% ;\n// The yiq lightness value that determines when the lightness of color changes from \"dark\" to \"light\". Acceptable values are between 0 and 255.\n//$yiq-contrasted-threshold: 150 ;\n// Customize the light and dark text colors for use in our YIQ color contrast function.\n//$yiq-text-dark: $gray-900 ;\n//$yiq-text-light: $white ;\n// Options\n//\n// Quickly modify global styling by enabling or disabling optional features.\n//$enable-caret: true ;\n//$enable-rounded: true ;\n//$enable-shadows: false ;\n//$enable-gradients: false ;\n//$enable-transitions: true ;\n//$enable-hover-media-query: false ; // Deprecated, no longer affects any compiled CSS\n//$enable-grid-classes: true ;\n//$enable-print-styles: true ;\n// Spacing\n//\n// Control the default styling of most Bootstrap elements by modifying these\n// variables. Mostly focused on spacing.\n// You can add more entries to the $spacers map, should you need more variation.\n// stylelint-disable\n//$spacer: 1rem ;\n//$spacers: () ;\n//$spacers: map-merge(( 0: 0, 1: ($spacer * .25), 2: ($spacer * .5), 3: $spacer, 4: ($spacer * 1.5), 5: ($spacer * 3) ), $spacers);\n// This variable affects the `.h-*` and `.w-*` classes.\n//$sizes: () ;\n//$sizes: map-merge(( 25: 25%, 50: 50%, 75: 75%, 100: 100%, auto: auto ), $sizes);\n// stylelint-enable\n// Body\n//\n// Settings for the `<body>` element.\n//$body-bg: $white ;\n//$body-color: $gray-900 ;\n// Links\n//\n// Style anchor elements.\n//$link-color: theme-color(\"primary\") ;\n//$link-decoration: none ;\n//$link-hover-color: darken($link-color, 15%) ;\n//$link-hover-decoration: underline ;\n// Paragraphs\n//\n// Style p element.\n//$paragraph-margin-bottom: 1rem ;\n// Grid breakpoints\n//\n// Define the minimum dimensions at which your layout will change,\n// adapting to different screen sizes, for use in media queries.\n//$grid-breakpoints: ( xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px ) ;\n//@include _assert-ascending($grid-breakpoints, \"$grid-breakpoints\");\n//@include _assert-starts-at-zero($grid-breakpoints);\n// Grid containers\n//\n// Define the maximum width of `.container` for different screen sizes.\n//$container-max-widths: ( sm: 540px, md: 720px, lg: 960px, xl: 1140px ) ;\n//@include _assert-ascending($container-max-widths, \"$container-max-widths\");\n// Grid columns\n//\n// Set the number of columns and specify the width of the gutters.\n//$grid-columns: 12 ;\n//$grid-gutter-width: 30px ;\n// Components\n//\n// Define common padding and border radius sizes and more.\n//$line-height-lg: 1.5 ;\n//$line-height-sm: 1.5 ;\n//$border-width: 1px ;\n//$border-color: $gray-300 ;\n//$border-radius: .25rem ;\n//$border-radius-lg: .3rem ;\n//$border-radius-sm: .2rem ;\n//$box-shadow-sm: 0 .125rem .25rem rgba($black, .075) ;\n//$box-shadow: 0 .5rem 1rem rgba($black, .15) ;\n//$box-shadow-lg: 0 1rem 3rem rgba($black, .175) ;\n//$component-active-color: $white ;\n//$component-active-bg: theme-color(\"primary\") ;\n//$caret-width: .3em ;\n//$transition-base: all .2s ease-in-out ;\n//$transition-fade: opacity .15s linear ;\n//$transition-collapse: height .35s ease ;\n// Fonts\n//\n// Font, line-height, and color for body text, headings, and more.\n// stylelint-disable value-keyword-case\n//$font-family-sans-serif: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\" ;\n//$font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace ;\n//$font-family-base: $font-family-sans-serif ;\n// stylelint-enable value-keyword-case\n//$font-size-base: 1rem ; // Assumes the browser default, typically `16px`\n//$font-size-lg: ($font-size-base * 1.25) ;\n//$font-size-sm: ($font-size-base * .875) ;\n//$font-weight-light: 300 ;\n//$font-weight-normal: 400 ;\n//$font-weight-bold: 700 ;\n//$font-weight-base: $font-weight-normal ;\n//$line-height-base: 1.5 ;\n//$h1-font-size: $font-size-base * 2.5 ;\n//$h2-font-size: $font-size-base * 2 ;\n//$h3-font-size: $font-size-base * 1.75 ;\n//$h4-font-size: $font-size-base * 1.5 ;\n//$h5-font-size: $font-size-base * 1.25 ;\n//$h6-font-size: $font-size-base ;\n//$headings-margin-bottom: ($spacer / 2) ;\n//$headings-font-family: inherit ;\n//$headings-font-weight: 500 ;\n//$headings-line-height: 1.2 ;\n//$headings-color: inherit ;\n//$display1-size: 6rem ;\n//$display2-size: 5.5rem ;\n//$display3-size: 4.5rem ;\n//$display4-size: 3.5rem ;\n//$display1-weight: 300 ;\n//$display2-weight: 300 ;\n//$display3-weight: 300 ;\n//$display4-weight: 300 ;\n//$display-line-height: $headings-line-height ;\n//$lead-font-size: ($font-size-base * 1.25) ;\n//$lead-font-weight: 300 ;\n//$small-font-size: 80% ;\n//$text-muted: $gray-600 ;\n//$blockquote-small-color: $gray-600 ;\n//$blockquote-font-size: ($font-size-base * 1.25) ;\n//$hr-border-color: rgba($black, .1) ;\n//$hr-border-width: $border-width ;\n//$mark-padding: .2em ;\n//$dt-font-weight: $font-weight-bold ;\n//$kbd-box-shadow: inset 0 -.1rem 0 rgba($black, .25) ;\n//$nested-kbd-font-weight: $font-weight-bold ;\n//$list-inline-padding: .5rem ;\n//$mark-bg: #fcf8e3 ;\n//$hr-margin-y: $spacer ;\n// Tables\n//\n// Customizes the `.table` component with basic values, each used across all table variations.\n//$table-cell-padding: .75rem ;\n//$table-cell-padding-sm: .3rem ;\n//$table-bg: transparent ;\n//$table-accent-bg: rgba($black, .05) ;\n//$table-hover-bg: rgba($black, .075) ;\n//$table-active-bg: $table-hover-bg ;\n//$table-border-width: $border-width ;\n//$table-border-color: $gray-300 ;\n//$table-head-bg: $gray-200 ;\n//$table-head-color: $gray-700 ;\n//$table-dark-bg: $gray-900 ;\n//$table-dark-accent-bg: rgba($white, .05) ;\n//$table-dark-hover-bg: rgba($white, .075) ;\n//$table-dark-border-color: lighten($gray-900, 7.5%) ;\n//$table-dark-color: $body-bg ;\n//$table-striped-order: odd ;\n//$table-caption-color: $text-muted ;\n// Buttons + Forms\n//\n// Shared variables that are reassigned to `$input-` and `$btn-` specific variables.\n//$input-btn-padding-y: .375rem ;\n//$input-btn-padding-x: .75rem ;\n//$input-btn-line-height: $line-height-base ;\n//$input-btn-focus-width: .2rem ;\n//$input-btn-focus-color: rgba($component-active-bg, .25) ;\n//$input-btn-focus-box-shadow: 0 0 0 $input-btn-focus-width $input-btn-focus-color ;\n//$input-btn-padding-y-sm: .25rem ;\n//$input-btn-padding-x-sm: .5rem ;\n//$input-btn-line-height-sm: $line-height-sm ;\n//$input-btn-padding-y-lg: .5rem ;\n//$input-btn-padding-x-lg: 1rem ;\n//$input-btn-line-height-lg: $line-height-lg ;\n//$input-btn-border-width: $border-width ;\n// Buttons\n//\n// For each of Bootstrap's buttons, define text, background, and border color.\n//$btn-padding-y: $input-btn-padding-y ;\n//$btn-padding-x: $input-btn-padding-x ;\n//$btn-line-height: $input-btn-line-height ;\n//$btn-padding-y-sm: $input-btn-padding-y-sm ;\n//$btn-padding-x-sm: $input-btn-padding-x-sm ;\n//$btn-line-height-sm: $input-btn-line-height-sm ;\n//$btn-padding-y-lg: $input-btn-padding-y-lg ;\n//$btn-padding-x-lg: $input-btn-padding-x-lg ;\n//$btn-line-height-lg: $input-btn-line-height-lg ;\n//$btn-border-width: $input-btn-border-width ;\n//$btn-font-weight: $font-weight-normal ;\n//$btn-box-shadow: inset 0 1px 0 rgba($white, .15), 0 1px 1px rgba($black, .075) ;\n//$btn-focus-width: $input-btn-focus-width ;\n//$btn-focus-box-shadow: $input-btn-focus-box-shadow ;\n//$btn-disabled-opacity: .65 ;\n//$btn-active-box-shadow: inset 0 3px 5px rgba($black, .125) ;\n//$btn-link-disabled-color: $gray-600 ;\n//$btn-block-spacing-y: .5rem ;\n// Allows for customizing button radius independently from global border radius\n//$btn-border-radius: $border-radius ;\n//$btn-border-radius-lg: $border-radius-lg ;\n//$btn-border-radius-sm: $border-radius-sm ;\n//$btn-transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out ;\n// Forms\n//$label-margin-bottom: .5rem ;\n//$input-padding-y: $input-btn-padding-y ;\n//$input-padding-x: $input-btn-padding-x ;\n//$input-line-height: $input-btn-line-height ;\n//$input-padding-y-sm: $input-btn-padding-y-sm ;\n//$input-padding-x-sm: $input-btn-padding-x-sm ;\n//$input-line-height-sm: $input-btn-line-height-sm ;\n//$input-padding-y-lg: $input-btn-padding-y-lg ;\n//$input-padding-x-lg: $input-btn-padding-x-lg ;\n//$input-line-height-lg: $input-btn-line-height-lg ;\n//$input-bg: $white ;\n//$input-disabled-bg: $gray-200 ;\n//$input-color: $gray-700 ;\n//$input-border-color: $gray-400 ;\n//$input-border-width: $input-btn-border-width ;\n//$input-box-shadow: inset 0 1px 1px rgba($black, .075) ;\n//$input-border-radius: $border-radius ;\n//$input-border-radius-lg: $border-radius-lg ;\n//$input-border-radius-sm: $border-radius-sm ;\n//$input-focus-bg: $input-bg ;\n//$input-focus-border-color: lighten($component-active-bg, 25%) ;\n//$input-focus-color: $input-color ;\n//$input-focus-width: $input-btn-focus-width ;\n//$input-focus-box-shadow: $input-btn-focus-box-shadow ;\n//$input-placeholder-color: $gray-600 ;\n//$input-plaintext-color: $body-color ;\n//$input-height-border: $input-border-width * 2 ;\n//$input-height-inner: ($font-size-base * $input-btn-line-height) + ($input-btn-padding-y * 2) ;\n//$input-height: calc(#{$input-height-inner} + #{$input-height-border}) ;\n//$input-height-inner-sm: ($font-size-sm * $input-btn-line-height-sm) + ($input-btn-padding-y-sm * 2) ;\n//$input-height-sm: calc(#{$input-height-inner-sm} + #{$input-height-border}) ;\n//$input-height-inner-lg: ($font-size-lg * $input-btn-line-height-lg) + ($input-btn-padding-y-lg * 2) ;\n//$input-height-lg: calc(#{$input-height-inner-lg} + #{$input-height-border}) ;\n//$input-transition: border-color .15s ease-in-out, box-shadow .15s ease-in-out ;\n//$form-text-margin-top: .25rem ;\n//$form-check-input-gutter: 1.25rem ;\n//$form-check-input-margin-y: .3rem ;\n//$form-check-input-margin-x: .25rem ;\n//$form-check-inline-margin-x: .75rem ;\n//$form-check-inline-input-margin-x: .3125rem ;\n//$form-group-margin-bottom: 1rem ;\n//$input-group-addon-color: $input-color ;\n//$input-group-addon-bg: $gray-200 ;\n//$input-group-addon-border-color: $input-border-color ;\n//$custom-control-gutter: 1.5rem ;\n//$custom-control-spacer-x: 1rem ;\n//$custom-control-indicator-size: 1rem ;\n//$custom-control-indicator-bg: $gray-300 ;\n//$custom-control-indicator-bg-size: 50% 50% ;\n//$custom-control-indicator-box-shadow: inset 0 .25rem .25rem rgba($black, .1) ;\n//$custom-control-indicator-disabled-bg: $gray-200 ;\n//$custom-control-label-disabled-color: $gray-600 ;\n//$custom-control-indicator-checked-color: $component-active-color ;\n//$custom-control-indicator-checked-bg: $component-active-bg ;\n//$custom-control-indicator-checked-disabled-bg: rgba(theme-color(\"primary\"), .5) ;\n//$custom-control-indicator-checked-box-shadow: none ;\n//$custom-control-indicator-focus-box-shadow: 0 0 0 1px $body-bg, $input-btn-focus-box-shadow ;\n//$custom-control-indicator-active-color: $component-active-color ;\n//$custom-control-indicator-active-bg: lighten($component-active-bg, 35%) ;\n//$custom-control-indicator-active-box-shadow: none ;\n//$custom-checkbox-indicator-border-radius: $border-radius ;\n//$custom-checkbox-indicator-icon-checked: str-replace(url(\"data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='#{$custom-control-indicator-checked-color}' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26 2.974 7.25 8 2.193z'/%3E%3C/svg%3E\"), \"#\", \"%23\") ;\n//$custom-checkbox-indicator-indeterminate-bg: $component-active-bg ;\n//$custom-checkbox-indicator-indeterminate-color: $custom-control-indicator-checked-color ;\n//$custom-checkbox-indicator-icon-indeterminate: str-replace(url(\"data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 4'%3E%3Cpath stroke='#{$custom-checkbox-indicator-indeterminate-color}' d='M0 2h4'/%3E%3C/svg%3E\"), \"#\", \"%23\") ;\n//$custom-checkbox-indicator-indeterminate-box-shadow: none ;\n//$custom-radio-indicator-border-radius: 50% ;\n//$custom-radio-indicator-icon-checked: str-replace(url(\"data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3E%3Ccircle r='3' fill='#{$custom-control-indicator-checked-color}'/%3E%3C/svg%3E\"), \"#\", \"%23\") ;\n//$custom-select-padding-y: .375rem ;\n//$custom-select-padding-x: .75rem ;\n//$custom-select-height: $input-height ;\n//$custom-select-indicator-padding: 1rem ; // Extra padding to account for the presence of the background-image based indicator\n//$custom-select-line-height: $input-btn-line-height ;\n//$custom-select-color: $input-color ;\n//$custom-select-disabled-color: $gray-600 ;\n//$custom-select-bg: $input-bg ;\n//$custom-select-disabled-bg: $gray-200 ;\n//$custom-select-bg-size: 8px 10px ; // In pixels because image dimensions\n//$custom-select-indicator-color: $gray-800 ;\n//$custom-select-indicator: str-replace(url(\"data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3E%3Cpath fill='#{$custom-select-indicator-color}' d='M2 0L0 2h4zm0 5L0 3h4z'/%3E%3C/svg%3E\"), \"#\", \"%23\") ;\n//$custom-select-border-width: $input-btn-border-width ;\n//$custom-select-border-color: $input-border-color ;\n//$custom-select-border-radius: $border-radius ;\n//$custom-select-focus-border-color: $input-focus-border-color ;\n//$custom-select-focus-box-shadow: inset 0 1px 2px rgba($black, .075), 0 0 5px rgba($custom-select-focus-border-color, .5) ;\n//$custom-select-font-size-sm: 75% ;\n//$custom-select-height-sm: $input-height-sm ;\n//$custom-select-font-size-lg: 125% ;\n//$custom-select-height-lg: $input-height-lg ;\n//$custom-range-track-width: 100% ;\n//$custom-range-track-height: .5rem ;\n//$custom-range-track-cursor: pointer ;\n//$custom-range-track-bg: $gray-300 ;\n//$custom-range-track-border-radius: 1rem ;\n//$custom-range-track-box-shadow: inset 0 .25rem .25rem rgba($black, .1) ;\n//$custom-range-thumb-width: 1rem ;\n//$custom-range-thumb-height: $custom-range-thumb-width ;\n//$custom-range-thumb-bg: $component-active-bg ;\n//$custom-range-thumb-border: 0 ;\n//$custom-range-thumb-border-radius: 1rem ;\n//$custom-range-thumb-box-shadow: 0 .1rem .25rem rgba($black, .1) ;\n//$custom-range-thumb-focus-box-shadow: 0 0 0 1px $body-bg, $input-btn-focus-box-shadow ;\n//$custom-range-thumb-active-bg: lighten($component-active-bg, 35%) ;\n//$custom-file-height: $input-height ;\n//$custom-file-height-inner: $input-height-inner ;\n//$custom-file-focus-border-color: $input-focus-border-color ;\n//$custom-file-focus-box-shadow: $input-btn-focus-box-shadow ;\n//$custom-file-padding-y: $input-btn-padding-y ;\n//$custom-file-padding-x: $input-btn-padding-x ;\n//$custom-file-line-height: $input-btn-line-height ;\n//$custom-file-color: $input-color ;\n//$custom-file-bg: $input-bg ;\n//$custom-file-border-width: $input-btn-border-width ;\n//$custom-file-border-color: $input-border-color ;\n//$custom-file-border-radius: $input-border-radius ;\n//$custom-file-box-shadow: $input-box-shadow ;\n//$custom-file-button-color: $custom-file-color ;\n//$custom-file-button-bg: $input-group-addon-bg ;\n//$custom-file-text: ( en: \"Browse\" ) ;\n// Form validation\n//$form-feedback-margin-top: $form-text-margin-top ;\n//$form-feedback-font-size: $small-font-size ;\n//$form-feedback-valid-color: theme-color(\"success\") ;\n//$form-feedback-invalid-color: theme-color(\"danger\") ;\n// Dropdowns\n//\n// Dropdown menu container and contents.\n//$dropdown-min-width: 10rem ;\n//$dropdown-padding-y: .5rem ;\n//$dropdown-spacer: .125rem ;\n//$dropdown-bg: $white ;\n//$dropdown-border-color: rgba($black, .15) ;\n//$dropdown-border-radius: $border-radius ;\n//$dropdown-border-width: $border-width ;\n//$dropdown-divider-bg: $gray-200 ;\n//$dropdown-box-shadow: 0 .5rem 1rem rgba($black, .175) ;\n//$dropdown-link-color: $gray-900 ;\n//$dropdown-link-hover-color: darken($gray-900, 5%) ;\n//$dropdown-link-hover-bg: $gray-100 ;\n//$dropdown-link-active-color: $component-active-color ;\n//$dropdown-link-active-bg: $component-active-bg ;\n//$dropdown-link-disabled-color: $gray-600 ;\n//$dropdown-item-padding-y: .25rem ;\n//$dropdown-item-padding-x: 1.5rem ;\n//$dropdown-header-color: $gray-600 ;\n// Z-index master list\n//\n// Warning: Avoid customizing these values. They're used for a bird's eye view\n// of components dependent on the z-axis and are designed to all work together.\n//$zindex-dropdown: 1000 ;\n//$zindex-sticky: 1020 ;\n//$zindex-fixed: 1030 ;\n//$zindex-modal-backdrop: 1040 ;\n//$zindex-modal: 1050 ;\n//$zindex-popover: 1060 ;\n//$zindex-tooltip: 1070 ;\n// Navs\n//$nav-link-padding-y: .5rem ;\n//$nav-link-padding-x: 1rem ;\n//$nav-link-disabled-color: $gray-600 ;\n//$nav-tabs-border-color: $gray-300 ;\n//$nav-tabs-border-width: $border-width ;\n//$nav-tabs-border-radius: $border-radius ;\n//$nav-tabs-link-hover-border-color: $gray-200 $gray-200 $nav-tabs-border-color ;\n//$nav-tabs-link-active-color: $gray-700 ;\n//$nav-tabs-link-active-bg: $body-bg ;\n//$nav-tabs-link-active-border-color: $gray-300 $gray-300 $nav-tabs-link-active-bg ;\n//$nav-pills-border-radius: $border-radius ;\n//$nav-pills-link-active-color: $component-active-color ;\n//$nav-pills-link-active-bg: $component-active-bg ;\n//$nav-divider-color: $gray-200 ;\n//$nav-divider-margin-y: ($spacer / 2) ;\n// Navbar\n//$navbar-padding-y: ($spacer / 2) ;\n//$navbar-padding-x: $spacer ;\n//$navbar-nav-link-padding-x: .5rem ;\n//$navbar-brand-font-size: $font-size-lg ;\n// Compute the navbar-brand padding-y so the navbar-brand will have the same height as navbar-text and nav-link\n//$nav-link-height: ($font-size-base * $line-height-base + $nav-link-padding-y * 2) ;\n//$navbar-brand-height: $navbar-brand-font-size * $line-height-base ;\n//$navbar-brand-padding-y: ($nav-link-height - $navbar-brand-height) / 2 ;\n//$navbar-toggler-padding-y: .25rem ;\n//$navbar-toggler-padding-x: .75rem ;\n//$navbar-toggler-font-size: $font-size-lg ;\n//$navbar-toggler-border-radius: $btn-border-radius ;\n$navbar-dark-color: rgba($white, .5);\n$navbar-dark-hover-color: rgba($white, .75) ;\n$navbar-dark-active-color: $white ;\n$navbar-dark-disabled-color: rgba($white, .25) ;\n//$navbar-dark-toggler-icon-bg: str-replace(url(\"data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='#{$navbar-dark-color}' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E\"), \"#\", \"%23\") ;\n$navbar-dark-toggler-border-color: rgba($white, .1) ;\n\n$navbar-light-color: rgba($black, .5) ;\n$navbar-light-hover-color: rgba($black, .7) ;\n$navbar-light-active-color: rgba($black, .9) ;\n$navbar-light-disabled-color: rgba($black, .3) ;\n//$navbar-light-toggler-icon-bg: str-replace(url(\"data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='#{$navbar-light-color}' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E\"), \"#\", \"%23\") ;\n$navbar-light-toggler-border-color: rgba($black, .1) ;\n\n// Pagination\n\n//$pagination-padding-y: .5rem ;\n//$pagination-padding-x: .75rem ;\n//$pagination-padding-y-sm: .25rem ;\n//$pagination-padding-x-sm: .5rem ;\n//$pagination-padding-y-lg: .75rem ;\n//$pagination-padding-x-lg: 1.5rem ;\n//$pagination-line-height: 1.25 ;\n\n//$pagination-color: $link-color ;\n//$pagination-bg: $white ;\n//$pagination-border-width: $border-width ;\n//$pagination-border-color: $gray-300 ;\n\n//$pagination-focus-box-shadow: $input-btn-focus-box-shadow ;\n//$pagination-focus-outline: 0 ;\n\n//$pagination-hover-color: $link-hover-color ;\n//$pagination-hover-bg: $gray-200 ;\n//$pagination-hover-border-color: $gray-300 ;\n\n//$pagination-active-color: $component-active-color ;\n//$pagination-active-bg: $component-active-bg ;\n//$pagination-active-border-color: $pagination-active-bg ;\n\n//$pagination-disabled-color: $gray-600 ;\n//$pagination-disabled-bg: $white ;\n//$pagination-disabled-border-color: $gray-300 ;\n\n\n// Jumbotron\n\n//$jumbotron-padding: 2rem ;\n//$jumbotron-bg: $gray-200 ;\n\n\n// Cards\n\n//$card-spacer-y: .75rem ;\n//$card-spacer-x: 1.25rem ;\n//$card-border-width: $border-width ;\n//$card-border-radius: $border-radius ;\n//$card-border-color: rgba($black, .125) ;\n//$card-inner-border-radius: calc(#{$card-border-radius} - #{$card-border-width}) ;\n//$card-cap-bg: rgba($black, .03) ;\n//$card-bg: $white ;\n\n//$card-img-overlay-padding: 1.25rem ;\n\n//$card-group-margin: ($grid-gutter-width / 2) ;\n//$card-deck-margin: $card-group-margin ;\n\n//$card-columns-count: 3 ;\n//$card-columns-gap: 1.25rem ;\n//$card-columns-margin: $card-spacer-y ;\n\n\n// Tooltips\n\n//$tooltip-font-size: $font-size-sm ;\n//$tooltip-max-width: 200px ;\n//$tooltip-color: $white ;\n//$tooltip-bg: $black ;\n//$tooltip-border-radius: $border-radius ;\n//$tooltip-opacity: .9 ;\n//$tooltip-padding-y: .25rem ;\n//$tooltip-padding-x: .5rem ;\n//$tooltip-margin: 0 ;\n\n//$tooltip-arrow-width: .8rem ;\n//$tooltip-arrow-height: .4rem ;\n//$tooltip-arrow-color: $tooltip-bg ;\n\n\n// Popovers\n\n//$popover-font-size: $font-size-sm ;\n//$popover-bg: $white ;\n//$popover-max-width: 276px ;\n//$popover-border-width: $border-width ;\n//$popover-border-color: rgba($black, .2) ;\n//$popover-border-radius: $border-radius-lg ;\n//$popover-box-shadow: 0 .25rem .5rem rgba($black, .2) ;\n\n//$popover-header-bg: darken($popover-bg, 3%) ;\n//$popover-header-color: $headings-color ;\n//$popover-header-padding-y: .5rem ;\n//$popover-header-padding-x: .75rem ;\n\n//$popover-body-color: $body-color ;\n//$popover-body-padding-y: $popover-header-padding-y ;\n//$popover-body-padding-x: $popover-header-padding-x ;\n\n//$popover-arrow-width: 1rem ;\n//$popover-arrow-height: .5rem ;\n//$popover-arrow-color: $popover-bg ;\n\n//$popover-arrow-outer-color: fade-in($popover-border-color, .05) ;\n\n\n// Badges\n\n//$badge-font-size: 75% ;\n//$badge-font-weight: $font-weight-bold ;\n//$badge-padding-y: .25em ;\n//$badge-padding-x: .4em ;\n//$badge-border-radius: $border-radius ;\n\n//$badge-pill-padding-x: .6em ;\n// Use a higher than normal value to ensure completely rounded edges when\n// customizing padding or font-size on labels.\n//$badge-pill-border-radius: 10rem ;\n\n\n// Modals\n\n// Padding applied to the modal body\n//$modal-inner-padding: 1rem ;\n\n//$modal-dialog-margin: .5rem ;\n//$modal-dialog-margin-y-sm-up: 1.75rem ;\n\n//$modal-title-line-height: $line-height-base ;\n\n//$modal-content-bg: $white ;\n//$modal-content-border-color: rgba($black, .2) ;\n//$modal-content-border-width: $border-width ;\n//$modal-content-border-radius: $border-radius-lg ;\n//$modal-content-box-shadow-xs: 0 .25rem .5rem rgba($black, .5) ;\n//$modal-content-box-shadow-sm-up: 0 .5rem 1rem rgba($black, .5) ;\n\n//$modal-backdrop-bg: $black ;\n//$modal-backdrop-opacity: .5 ;\n//$modal-header-border-color: $gray-200 ;\n//$modal-footer-border-color: $modal-header-border-color ;\n//$modal-header-border-width: $modal-content-border-width ;\n//$modal-footer-border-width: $modal-header-border-width ;\n//$modal-header-padding: 1rem ;\n\n//$modal-lg: 800px ;\n//$modal-md: 500px ;\n//$modal-sm: 300px ;\n\n//$modal-transition: transform .3s ease-out ;\n\n\n// Alerts\n//\n// Define alert colors, border radius, and padding.\n\n//$alert-padding-y: .75rem ;\n//$alert-padding-x: 1.25rem ;\n//$alert-margin-bottom: 1rem ;\n//$alert-border-radius: $border-radius ;\n//$alert-link-font-weight: $font-weight-bold ;\n//$alert-border-width: $border-width ;\n\n//$alert-bg-level: -10 ;\n//$alert-border-level: -9 ;\n//$alert-color-level: 6 ;\n\n\n// Progress bars\n\n//$progress-height: 1rem ;\n//$progress-font-size: ($font-size-base * .75) ;\n//$progress-bg: $gray-200 ;\n//$progress-border-radius: $border-radius ;\n//$progress-box-shadow: inset 0 .1rem .1rem rgba($black, .1) ;\n//$progress-bar-color: $white ;\n//$progress-bar-bg: theme-color(\"primary\") ;\n//$progress-bar-animation-timing: 1s linear infinite ;\n//$progress-bar-transition: width .6s ease ;\n\n// List group\n\n//$list-group-bg: $white ;\n//$list-group-border-color: rgba($black, .125) ;\n//$list-group-border-width: $border-width ;\n//$list-group-border-radius: $border-radius ;\n\n//$list-group-item-padding-y: .75rem ;\n//$list-group-item-padding-x: 1.25rem ;\n\n//$list-group-hover-bg: $gray-100 ;\n//$list-group-active-color: $component-active-color ;\n//$list-group-active-bg: $component-active-bg ;\n//$list-group-active-border-color: $list-group-active-bg ;\n\n//$list-group-disabled-color: $gray-600 ;\n//$list-group-disabled-bg: $list-group-bg ;\n\n//$list-group-action-color: $gray-700 ;\n//$list-group-action-hover-color: $list-group-action-color ;\n\n//$list-group-action-active-color: $body-color ;\n//$list-group-action-active-bg: $gray-200 ;\n\n\n// Image thumbnails\n\n//$thumbnail-padding: .25rem ;\n//$thumbnail-bg: $body-bg ;\n//$thumbnail-border-width: $border-width ;\n//$thumbnail-border-color: $gray-300 ;\n//$thumbnail-border-radius: $border-radius ;\n//$thumbnail-box-shadow: 0 1px 2px rgba($black, .075) ;\n\n\n// Figures\n\n//$figure-caption-font-size: 90% ;\n//$figure-caption-color: $gray-600 ;\n\n\n// Breadcrumbs\n\n//$breadcrumb-padding-y: .75rem ;\n//$breadcrumb-padding-x: 1rem ;\n//$breadcrumb-item-padding: .5rem ;\n\n//$breadcrumb-margin-bottom: 1rem ;\n\n//$breadcrumb-bg: $gray-200 ;\n//$breadcrumb-divider-color: $gray-600 ;\n//$breadcrumb-active-color: $gray-600 ;\n//$breadcrumb-divider: quote(\"/\") ;\n\n//$breadcrumb-border-radius: $border-radius ;\n\n\n// Carousel\n\n//$carousel-control-color: $white ;\n//$carousel-control-width: 15% ;\n//$carousel-control-opacity: .5 ;\n\n//$carousel-indicator-width: 30px ;\n//$carousel-indicator-height: 3px ;\n//$carousel-indicator-spacer: 3px ;\n//$carousel-indicator-active-bg: $white ;\n\n//$carousel-caption-width: 70% ;\n//$carousel-caption-color: $white ;\n\n//$carousel-control-icon-width: 20px ;\n\n//$carousel-control-prev-icon-bg: str-replace(url(\"data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='#{$carousel-control-color}' viewBox='0 0 8 8'%3E%3Cpath d='M5.25 0l-4 4 4 4 1.5-1.5-2.5-2.5 2.5-2.5-1.5-1.5z'/%3E%3C/svg%3E\"), \"#\", \"%23\") ;\n//$carousel-control-next-icon-bg: str-replace(url(\"data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='#{$carousel-control-color}' viewBox='0 0 8 8'%3E%3Cpath d='M2.75 0l-1.5 1.5 2.5 2.5-2.5 2.5 1.5 1.5 4-4-4-4z'/%3E%3C/svg%3E\"), \"#\", \"%23\") ;\n\n//$carousel-transition: transform .6s ease ; // Define transform transition first if using multiple transitions (e.g., `transform 2s ease, opacity .5s ease-out`)\n\n\n// Close\n\n//$close-font-size: $font-size-base * 1.5 ;\n//$close-font-weight: $font-weight-bold ;\n//$close-color: $black ;\n//$close-text-shadow: 0 1px 0 $white ;\n\n// Code\n\n//$code-font-size: 87.5% ;\n//$code-color: $pink ;\n\n//$kbd-padding-y: .2rem ;\n//$kbd-padding-x: .4rem ;\n//$kbd-font-size: $code-font-size ;\n//$kbd-color: $white ;\n//$kbd-bg: $gray-900 ;\n\n//$pre-color: $gray-900 ;\n//$pre-scrollable-max-height: 340px ;\n\n\n// Printing\n//$print-page-size: a3 ;\n//$print-body-min-width: map-get($grid-breakpoints, \"lg\") ;\n"
  },
  {
    "path": "src/sourceDev.WebApp/app-scss/style.scss",
    "content": "﻿@charset \"UTF-8\";\n@import \"bs5\";\n@import \"jquery-smartmenu-bootstrap\";\n@import \"font-awesome\";\n\nhtml {\n    position: relative;\n    min-height: 100%;\n}\n\nbody {\n    min-height: 100vh;\n    padding-top: 142px;\n}\n\n#newPostLink {\n    position: absolute;\n    top: 170px;\n    right: 0px;\n}\n\n#editPostLink {\n    position: absolute;\n    top: 200px;\n    right: 0px;\n}\n\n#unpublishPostLink {\n    position: absolute;\n    top: 230px!important;\n    right: 0px!important;\n}\n\n#pageManagerLink {\n    position: absolute;\n    top: 170px;\n    right: 0px;\n}\n\n#newPageLink {\n    position: absolute;\n    top: 200px;\n    right: 0px;\n}\n\n#editPageLink {\n    position: absolute;\n    top: 230px;\n    right: 0px\n}\n\n#sidenavtoggle {\n    position: absolute;\n    top: 220px;\n    right: 5px;\n}\n\n@media screen and (max-width: 812px) {\n    #sidenavtoggle,\n    #sidenavmenu {\n        display: none;\n    }\n}\n\n.flex-fill {\n    flex: 1 1 auto !important;\n}\n\nimg, video, iframe {\n    max-width: 100%;\n}\n\ntd img, video, iframe {\n    max-width: none;\n}\n\n.table td, .table th {\n    vertical-align: inherit;\n}\n\n.brand-header {\n    height:100px;\n}\n\nheader .navbar {\n    top: 100px;\n}\n#toast-container {\n    position: sticky;\n    z-index: 1055;\n    top: 0\n}\n\n#toast-wrapper {\n    position: absolute;\n    top: 0;\n    right: 0;\n    margin: 5px\n}\n\n#toast-container > #toast-wrapper > .toast {\n    min-width: 150px;\n    background-color: rgb(255,255,255);\n    border-top: none;\n}\n\n#toast-container > #toast-wrapper > .toast > .toast-header strong {\n    padding-right: 20px\n}\n\ndiv.input-group-prepend > span.input-group-text > i {\n    line-height: 1.5em;\n}"
  },
  {
    "path": "src/sourceDev.WebApp/appsettings.json",
    "content": "﻿{\n    \"DevOptions\": {\n        \"DbPlatform\": \"NoDb\", //set to 'nodb' or 'efcore'\n        \"EFProvider\": \"sqlite\",\n        \"UseCustomRoutes\": false,\n        \"UseHomeIndexAsDefault\": false,\n        \"EnableWebpackMiddleware\": false,\n        \"EnableMiniProfiler\": false\n    },\n    \"ConnectionStrings\": {\n        //EFCore SQLite\n        \"SQLiteDbName\": \"appdata.db\",\n        //EFCore MSSQL\n        \"EntityFrameworkConnection\": \"Server=(localdb)\\\\mssqllocaldb;Database=sourceDev.WebApp-F5E38B5F-4119-48F5-B267-212BB6ECB957;Trusted_Connection=True;MultipleActiveResultSets=true\",\n        //EFCore MySql\n        \"MySqlEntityFrameworkConnection\": \"Server=localhost;Database=yourdbname;Uid=yourdbuser;Pwd=yourdbpassword;Charset=utf8;\",\n        //EFCore pgsql\n        \"PostgreSqlEntityFrameworkConnection\": \"Server=yourserver;Port=5432;User Id=youruser;Password=yourpassword;Database=yourdbname;Pooling=true;Minimum Pool Size=0;Maximim Pool Size=20;\",\n    },\n\n    \"AppSettings\": {\n        \"UseSsl\": false,\n        \"HttpsPort\": 443,\n\n        // auto-expire authentication:\n        // \"MaximumInactivityInMinutes\": \"20\",\n\n        \"UseAzureBlobForDataProtection\": false,\n        \"DataProtectionBlobStorageConnectionString\": \"\"\n    },\n    \"MultiTenantOptions\": {\n        \"Mode\": \"FolderName\",\n        \"UseRelatedSitesMode\": \"false\",\n        \"RelatedSiteId\": \"00000000-0000-0000-0000-000000000000\",\n        \"RelatedSiteAliasId\": \"\",\n        \"UserPerSiteWwwRoot\": \"true\",\n        \"UserPerSiteThemes\": \"true\",\n        \"UseSharedThemes\": \"true\",\n        \"SiteFilesFolderName\": \"sitefiles\",\n        \"SiteThemesFolderName\": \"themes\",\n        \"SiteContentFolderName\": \"wwwroot\",\n        \"SharedThemesFolderName\": \"SharedThemes\",\n        \"ThemeStaticFilesFolderName\": \"wwwroot\",\n        \"SiteUploadFilesRootFolderName\": \"siteuploadfiles\",\n        \"RootUserCanSignInToTenants\": \"false\",\n        \"RootSiteId\": \"00000000-0000-0000-0000-000000000000\"\n    },\n    \"ContentLocalizationOptions\": {\n        \"UseCultureRoutesAndProjects\": true\n    },\n    \"ContentTemplateConfig\": {\n        \"Templates\": [\n            {\n                \"ProjectId\": \"*\",\n                \"AvailableForFeature\": \"Page\",\n                \"Key\": \"StaffMemberTemplate\",\n                \"Title\": \"Staff Member\",\n                \"Description\": \"A template for creating a staff member page.\",\n                \"ModelType\": \"sourceDev.WebApp.ViewModels.StaffMemberViewModel, sourceDev.WebApp\",\n                \"EditView\": \"ContentTemplates/StaffMemberEdit\",\n                \"RenderView\": \"ContentTemplates/StaffMemberRender\",\n                \"FormParserName\": \"DefaultModelFormParser\",\n                \"ValidatorName\": \"DefaultTemplateModelValidator\",\n                \"SerializerName\": \"Json\",\n                \"Enabled\": \"true\",\n                \"EditScripts\": [\n                    {\n                    \"Url\": \"/cr/js/dropzone.min.js\",\n                    \"Environment\": \"any\",\n                    \"Sort\": \"1\"\n                    },\n                    {\n                    \"Url\": \"/cr/js/croppie.min.js\",\n                    \"Environment\": \"any\",\n                    \"Sort\": \"2\"\n                    },\n                    {\n                    \"Url\": \"/filemanager/js/cloudscribe-unobtrusive-file-drop.min.js\",\n                    \"Environment\": \"any\",\n                    \"Sort\": \"3\"\n                    }\n                ],\n                \"EditCss\": [\n                    {\n                    \"Url\": \"/cr/css/dropzone.min.css\",\n                    \"Environment\": \"any\",\n                    \"Sort\": \"1\"\n                    },\n                    {\n                    \"Url\": \"/cr/css/croppie.min.css\",\n                    \"Environment\": \"any\",\n                    \"Sort\": \"2\"\n                    },\n                    {\n                    \"Url\": \"/cr/css/croppie-cloudscribe.css\",\n                    \"Environment\": \"any\",\n                    \"Sort\": \"3\"\n                    }\n                ]\n\n                }\n            ]\n        },\n        \"ContentTemplateSettings\": {\n            \"GalleryOptions\": {\n                \"NewImagePath\": \"/media/gallery\",\n                \"ResizeMaxWidth\": 1500,\n                \"ResizeMaxHeight\": 1500,\n                \"KeepOriginalSizeImages\": false,\n                \"EnableBrowseServer\": true,\n                \"EnableCropping\": true,\n                \"CropAreaWidth\": 690,\n                \"CropAreaHeight\": 517,\n                \"PlaceholderImageUrl\": \"/cr/images/690x517-placeholder.png\"\n            },\n            \"LinkListOptions\": {\n                \"NewImagePath\": \"/media/linklists\",\n                \"ResizeMaxWidth\": 500,\n                \"ResizeMaxHeight\": 500,\n                \"ImageRenderMaxHeight\": 150,\n                \"KeepOriginalSizeImages\": false,\n                \"EnableBrowseServer\": true,\n                \"EnableCropping\": true,\n                \"CropAreaWidth\": 350,\n                \"CropAreaHeight\": 250,\n                \"PlaceholderImageUrl\": \"/cr/images/350x250-placeholder.png\"\n            },\n            \"ColumnTemplateOptions\": {\n                \"NewImagePath\": \"/media/images\",\n                \"ResizeMaxWidth\": 1500,\n                \"ResizeMaxHeight\": 1500,\n                \"KeepOriginalSizeImages\": false,\n                \"EnableBrowseServer\": true,\n                \"EnableCropping\": true,\n                \"CropAreaWidth\": 690,\n                \"CropAreaHeight\": 517,\n                \"PlaceholderImageUrl\": \"/cr/images/690x517-placeholder.png\"\n            },\n            \"ImageWithContentOptions\": {\n                \"NewImagePath\": \"/media/images\",\n                \"ResizeMaxWidth\": 1500,\n                \"ResizeMaxHeight\": 1500,\n                \"KeepOriginalSizeImages\": false,\n                \"EnableBrowseServer\": true,\n                \"EnableCropping\": true,\n                \"CropAreaWidth\": 690,\n                \"CropAreaHeight\": 517,\n                \"PlaceholderImageUrl\": \"/cr/images/690x517-placeholder.png\"\n            }\n\n        },\n\n        \"SimpleContentThemeConfig\": {\n            \"ThemeSettings\": [\n                {\n                \"ThemeName\": \"default\",\n                \"IconSetId\": \"fontawesome5x\",\n                \"NumberOfRecentPostsToShow\": 5,\n                \"NumberOfFeaturedPostsToShow\": 5\n                }\n\n            ]\n        },\n\n        \"SimpleContentIconConfig\": {\n        \"DefaultSetId\": \"fontawesome5x\",\n        \"IconSets\": [\n          {\n            \"SetId\": \"fontawesome4x\",\n            \"Previous\": \"fa fa-backward\",\n            \"Next\": \"fa fa-forward\",\n            \"Comments\": \"fa fa-comment\",\n            \"Tags\": \"fa fa-tags\",\n            \"Archives\": \"fa fa-calendar\",\n            \"About\": \"fa fa-star\",\n            \"BadRequest\": \"fa fa-ban\",\n            \"UnAuthorized\": \"fa fa-ban\",\n            \"Forbidden\": \"fa fa-exclamation-circle\",\n            \"PageNotFound\": \"fa fa-exclamation-circle\",\n            \"Error\": \"fa fa-exclamation-circle\",\n            \"Home\": \"fa fa-home\",\n            \"ShowEditToolbar\": \"fa fa-pencil\",\n            \"NewItem\": \"fa fa-plus\",\n            \"PageTree\": \"fa fa-tree\",\n            \"SortAlpha\": \"fa fa-sort-alpha-asc\",\n            \"Edit\": \"fa-pencil-square-o\",\n            \"View\": \"fa fa-eye\",\n            \"Delete\": \"fa fa-trash-o\",\n            \"OpenInNewWindow\": \"fa fa-external-link\"\n          },\n          {\n            \"SetId\": \"fontawesome5x\",\n            \"Previous\": \"fas fa-backward\",\n            \"Next\": \"fas fa-forward\",\n            \"Comments\": \"fas fa-comment\",\n            \"Tags\": \"fas fa-hashtag\",\n            \"Archives\": \"far fa-calendar-alt\",\n            \"About\": \"far fa-star\",\n            \"BadRequest\": \"fas fa-ban\",\n            \"UnAuthorized\": \"fas fa-ban\",\n            \"Forbidden\": \"fas fa-exclamation-circle\",\n            \"PageNotFound\": \"fas fa-exclamation-circle\",\n            \"Error\": \"fas fa-exclamation-circle\",\n            \"Home\": \"fas fa-home\",\n            \"ShowEditToolbar\": \"fas fa-pencil-alt\",\n            \"NewItem\": \"fas fa-plus\",\n            \"PageTree\": \"fas fa-tree\",\n            \"SortAlpha\": \"fas fa-sort-alpha-down\",\n            \"Edit\": \"fas fa-pencil-alt\",\n            \"View\": \"fas fa-eye\",\n            \"Delete\": \"far fa-trash-alt\",\n            \"Unpublish\": \"far fa-eye-slash\",\n            \"OpenInNewWindow\": \"fas fa-external-link-alt\"\n          },\n            {\n            \"SetId\": \"glyphicons\",\n            \"Previous\": \"glyphicon glyphicon-backward\",\n            \"Next\": \"glyphicon glyphicon-forward\",\n            \"Comments\": \"glyphicon glyphicon-comment\",\n            \"Tags\": \"glyphicon glyphicon-tags\",\n            \"Archives\": \"glyphicon glyphicon-calendar\",\n            \"About\": \"glyphicon glyphicon-star\",\n            \"BadRequest\": \"glyphicons glyphicons-ban-circle\",\n            \"UnAuthorized\": \"glyphicons glyphicons-ban-circle\",\n            \"Forbidden\": \"glyphicons glyphicons-exclamation-sign\",\n            \"PageNotFound\": \"glyphicons glyphicons-exclamation-sign\",\n            \"Error\": \"glyphicons glyphicons-exclamation-sign\",\n            \"Home\": \"glyphicons glyphicons-home\",\n            \"ShowEditToolbar\": \"glyphicon glyphicon-pencil\",\n            \"NewItem\": \"glyphicon glyphicon-plus\",\n            \"PageTree\": \"glyphicon glyphicon-tree-conifer\",\n            \"SortAlpha\": \"glyphicon glyphicon-sort-by-alphabet\",\n            \"Edit\": \"glyphicon glyphicon-edit\",\n            \"View\": \"glyphicon glyphicon-eye-open\",\n            \"Delete\": \"glyphicon glyphicon-trash\",\n            \"Unpublish\": \"glyphicon glyphicon-eye-close\",\n            \"OpenInNewWindow\": \"glyphicon glyphicon-square-new-window\"\n            }\n\n        ]\n        },\n\n        \"PageEditOptions\": {\n        \"AlwaysShowDeveloperLink\": false,\n        \"DeveloperAllowedRole\": \"Administrators\",\n        \"ShowDisableEditorOption\": true,\n        \"AllowDeleteDefaultPage\": false,\n        \"HideUnpublishButton\": false\n        },\n\n\n    \"SmtpOptions\": {\n        \"Server\": \"\",\n        \"Port\": \"25\",\n        \"User\": \"\",\n        \"Password\": \"\",\n        \"UseSsl\": \"false\",\n        \"RequiresAuthentication\": \"false\",\n        \"DefaultEmailFromAddress\": \"\",\n        \"DefaultEmailFromAlias\": \"\"\n    },\n    \"SendGridOptions\": {\n        \"ApiKey\": \"\",\n        \"DefaultEmailFromAddress\": \"\",\n        \"DefaultEmailFromAlias\": \"\"\n    },\n    \"MailgunOptions\": {\n        \"ApiKey\": \"\",\n        \"EndpointUrl\": \"\",\n        \"DefaultEmailFromAddress\": \"\",\n        \"DefaultEmailFromAlias\": \"\"\n    },\n    \"ElasticEmailOptions\": {\n        \"ApiKey\": \"\",\n        \"DefaultEmailFromAddress\": \"\",\n        \"DefaultEmailFromAlias\": \"\",\n        \"EndpointUrl\": \"https://api.elasticemail.com/v2/email/send\"\n    },\n\n\n    \"SiteConfigOptions\": {\n        \"DefaultTheme\": \"custom1\",\n        \"FirstSiteTheme\": \"custom1\",\n        \"RolesThatCannotBeDeleted\": \"\"\n    },\n    \"UIOptions\": {\n        \"AllowDeleteChildSites\": \"false\"\n    },\n    \"CoreThemeConfig\": {\n        \"DefaultTheme\": \"default\",\n        \"ThemeSettings\": [\n            {\n                \"ThemeName\": \"default\",\n                \"CoreIconSetId\": \"fontawesome5x\",\n                \"AdminSideNavExpanded\": true,\n                \"EnableHeaderFooterEditingInSiteSettings\": true\n            }\n        ]\n    },\n    \"CoreIconConfig\": {\n        \"DefaultSetId\": \"fontawesome5x\",\n        \"IconSets\": [\n            {\n                \"SetId\": \"fontawesome5x\",\n                \"Email\": \"fas fa-at\",\n                \"Username\": \"far fa-arrow-alt-circle-right\",\n                \"Password\": \"fas fa-lock\",\n                \"FirstName\": \"far fa-user\",\n                \"LastName\": \"far fa-user\",\n                \"DateOfBirth\": \"far fa-calendar-alt\",\n                \"Facebook\": \"fab fa-facebook-square\",\n                \"Google\": \"fab fa-google\",\n                \"Twitter\": \"fab fa-twitter-square\",\n                \"Microsoft\": \"fab fa-windows\",\n                \"OpenIDConnect\": \"fas fa-arrow-alt-circle-right\"\n            }\n        ]\n    },\n\n    \"AutomaticUploadOptions\": {\n        \"WebSizeImageMaxWidth\": 690,\n        \"WebSizeImageMaxHeight\": 690,\n        \"ThumbnailImageMaxWidth\": 300,\n        \"ThumbnailImageMaxHeight\": 300,\n        \"ResizeMaxAllowedWidth\": 2560,\n        \"ResizeMaxAllowedHeight\": 2560\n    },\n    \"GoogleAnalyticsOptions\": {\n        \"TrackUserId\": \"true\",\n        \"UserIdDimensionIndex\": \"1\",\n        \"RegisteredUserDimensionIndex\": \"2\",\n        \"LoginRegisterSourceDimenstionIndex\": \"3\",\n        \"RegisterSuccessMetricIndex\": \"1\",\n        \"RegisterFailMetricIndex\": \"2\",\n        \"RegisterSubmitMetricIndex\": \"3\",\n        \"LoginSuccessMetricIndex\": \"4\",\n        \"LoginFailMetricIndex\": \"5\",\n        \"LoginSubmitMetricIndex\": \"6\",\n        \"LoginRegisterEventCategory\": \"Login and Registration\",\n        \"LoginSuccessEventAction\": \"Login Success\",\n        \"LoginFailEventAction\": \"Login Fail\",\n        \"LoginSubmitEventAction\": \"Login Submit\",\n        \"RegisterSuccessEventAction\": \"Register Success\",\n        \"RegisterFailEventAction\": \"Register Fail\",\n        \"RegisterSubmitEventAction\": \"Register Submit\"\n    },\n\n    \"GoogleAnalyticsGA4Options\": {\n        \"TrackUserId\": \"true\",\n        \"EnableDebugMode\": \"false\",\n        \"LoginSuccessEventName\": \"login\",\n        \"LoginFailEventName\": \"login_fail\",\n        \"LoginSubmitEventName\": \"login_submit\",\n        \"LoginRequires2FaEventName\": \"login_2fa\",\n        \"LoginLockoutEventName\": \"login_lockout\",\n        \"RegisterSuccessEventName\": \"sign_up\",\n        \"RegisterFailEventName\": \"sign_up_fail\",\n        \"RegisterSubmitEventName\": \"sign_up_submit\",\n        \"LogoutEventName\": \"logout\",\n        \"SearchEventName\": \"search\"\n    },\n\n    \"DbLoggerConfig\": {\n        \"DevLogLevel\": \"Debug\",\n        \"ProductionLogLevel\": \"Warning\",\n        \"ExcludedNamesSpaces\": [\n            \"SaasKit.Multitenancy\"\n        ],\n        \"BelowWarningExcludedNamesSpaces\": [\n            \"Microsoft.AspNetCore.StaticFiles\",\n            \"Microsoft.AspNetCore.Hosting\",\n            \"Microsoft.AspNetCore.Authorization\",\n            \"Microsoft.AspNetCore.Mvc.Internal\"\n        ]\n    },\n\n    \"Logging\": {\n        \"IncludeScopes\": false,\n        \"Debug\": {\n            \"LogLevel\": {\n                \"Default\": \"Warning\"\n            }\n        },\n        \"Console\": {\n            \"LogLevel\": {\n                \"Default\": \"Warning\"\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "src/sourceDev.WebApp/gulpfile.js",
    "content": "﻿\"use strict\";\n\nvar gulp = require(\"gulp\"),\n    concat = require(\"gulp-concat\"),\n    cssmin = require(\"gulp-cssmin\"),\n    gp_rename = require('gulp-rename'),\n    uglify = require(\"gulp-uglify\"),\n    sass = require('gulp-sass')(require('sass')),\n    sourcemaps = require('gulp-sourcemaps'),\n    merge = require('merge-stream')\n;\n\nvar config = {\n    srcSassDir: './app-scss',\n    cssOutDir: './sitefiles/s1/themes/custom1/wwwroot/css',\n    srcFileWatchPattern: './app-scss/*.scss'\n};\n\ngulp.task('buildCustom1ThemeCss', function () {\n    return gulp.src(config.srcSassDir + '/style.scss')\n    .pipe(sourcemaps.init())\n    .pipe(sass({\n        //outputStyle: 'compressed',\n        includePaths: [\n            config.srcSassDir\n           \n        ],\n    }).on('error', sass.logError)\n        )\n    .pipe(sourcemaps.write())\n        .pipe(gulp.dest(config.cssOutDir))\n    .pipe(gp_rename('style.min.css'))\n    .pipe(cssmin())\n        .pipe(gulp.dest(config.cssOutDir))\n    ;\n});\n\n// if you run the default task it will watch for changes in files and then run the\n// array of tasks if any files changed. So for scss changes you can just refresh the page to see changes\ngulp.task('default', function () {\n    gulp.watch(config.srcFileWatchPattern, gulp.series('buildCustom1ThemeCss'));\n});\n"
  },
  {
    "path": "src/sourceDev.WebApp/navigation.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<NavNode key=\"Home\"\n         controller=\"Home\"\n          action=\"Index\"\n          text=\"Home\"\n          treeBuilderName=\"cloudscribe.SimpleContent.Services.PagesNavigationTreeBuilder\"\n         >\n  <Children>\n\n      <NavNode key=\"PrivacyPolicy\"\n              controller=\"Privacy\"\n              action=\"Index\"\n              text=\"Privacy Policy\"\n              componentVisibility=\"breadcrumbs,sitemap\"\n              >\n      <Children />\n    </NavNode>\n      <NavNode key=\"Manage\"\n                 controller=\"Manage\"\n                 action=\"Index\"\n                 text=\"My Account\"\n                 preservedRouteParameters=\"siteId\"\n                 componentVisibility=\"breadcrumbs\"\n                 excludeFromSearchSiteMap=\"true\"\n                 hideFromAnonymous=\"true\">\n          <Children>\n            <NavNode key=\"UserProfile\"\n                     controller=\"Manage\"\n                     action=\"UserInfo\"\n                     text=\"User Info\"\n                     componentVisibility=\"child-dropdown,breadcrumbs\"\n                     excludeFromSearchSiteMap=\"true\"\n                     hideFromAnonymous=\"true\">\n              <Children />\n            </NavNode>\n            <NavNode key=\"SetPassword\"\n              controller=\"Manage\"\n              action=\"SetPassword\"\n              text=\"Set Password\"\n              componentVisibility=\"breadcrumbs\"\n              excludeFromSearchSiteMap=\"true\"\n              hideFromAnonymous=\"true\">\n              <Children />\n            </NavNode>\n            <NavNode key=\"ChangePassword\"\n                controller=\"Manage\"\n                action=\"ChangePassword\"\n                text=\"Change Password\"\n                componentVisibility=\"child-dropdown,breadcrumbs\"\n                excludeFromSearchSiteMap=\"true\"\n                hideFromAnonymous=\"true\">\n                <Children />\n            </NavNode>\n            <NavNode key=\"ManageLogins\"\n              controller=\"Manage\"\n              action=\"ManageLogins\"\n              text=\"Manage Logins\"\n              componentVisibility=\"breadcrumbs\"\n              excludeFromSearchSiteMap=\"true\"\n              hideFromAnonymous=\"true\">\n              <Children />\n            </NavNode>\n            <NavNode key=\"TwoFactorAuthentication\"\n              controller=\"Manage\"\n              action=\"TwoFactorAuthentication\"\n              text=\"Two Factor Authentication\"\n              componentVisibility=\"child-dropdown,breadcrumbs\"\n              excludeFromSearchSiteMap=\"true\"\n              hideFromAnonymous=\"true\">\n              <Children>\n                <NavNode key=\"EnableAuthenticator\"\n                  controller=\"Manage\"\n                  action=\"EnableAuthenticator\"\n                  text=\"Enable Authenticator\"\n                  componentVisibility=\"breadcrumbs\"\n                  excludeFromSearchSiteMap=\"true\"\n                  hideFromAnonymous=\"true\">\n                  <Children />\n                </NavNode>\n                <NavNode key=\"GenerateRecoveryCodes\"\n                  controller=\"Manage\"\n                  action=\"GenerateRecoveryCodes\"\n                  text=\"Generate Recovery Codes\"\n                  componentVisibility=\"breadcrumbs\"\n                  excludeFromSearchSiteMap=\"true\"\n                  hideFromAnonymous=\"true\">\n                  <Children />\n                </NavNode>\n                <NavNode key=\"ResetAuthenticatorWarning\"\n                  controller=\"Manage\"\n                  action=\"ResetAuthenticatorWarning\"\n                  text=\"Reset Authenticator\"\n                  componentVisibility=\"breadcrumbs\"\n                  excludeFromSearchSiteMap=\"true\"\n                  hideFromAnonymous=\"true\">\n                  <Children />\n                </NavNode>\n                <NavNode key=\"Disable2faWarning\"\n                  controller=\"Manage\"\n                  action=\"Disable2faWarning\"\n                  text=\"Disable 2 Factor Authentication\"\n                  componentVisibility=\"breadcrumbs\"\n                  excludeFromSearchSiteMap=\"true\"\n                  hideFromAnonymous=\"true\">\n                  <Children />\n                </NavNode>\n\n              </Children>\n            </NavNode>\n            <NavNode key=\"UserTimeZone\"\n              controller=\"Manage\"\n              action=\"TimeZone\"\n              text=\"Time Zone\"\n              componentVisibility=\"breadcrumbs\"\n              excludeFromSearchSiteMap=\"true\"\n              hideFromAnonymous=\"true\">\n              <Children />\n            </NavNode>\n            <NavNode key=\"PersonalData\"\n                controller=\"Manage\"\n                action=\"PersonalData\"\n                text=\"Personal Data\"\n                componentVisibility=\"child-dropdown,breadcrumbs\"\n                excludeFromSearchSiteMap=\"true\"\n                hideFromAnonymous=\"true\">\n              <Children>\n              <NavNode key=\"DeletePersonalData\"\n                controller=\"Manage\"\n                action=\"DeletePersonalData\"\n                text=\"Delete Data\"\n                componentVisibility=\"breadcrumbs\"\n                excludeFromSearchSiteMap=\"true\"\n                hideFromAnonymous=\"true\">\n                <Children />\n                </NavNode>\n              </Children>\n            </NavNode>\n\n\n\n          </Children>\n        </NavNode>\n\n      <NavNode key=\"SiteAdmin\"\n               controller=\"SiteAdmin\"\n               action=\"Index\"\n               text=\"Administration\"\n               authorizationPolicy=\"AdminMenuPolicy\"\n               excludeFromSearchSiteMap=\"true\"\n               >\n          <Children>\n              <NavNode key=\"SiteList\"\n                       controller=\"SiteAdmin\"\n                       action=\"SiteList\"\n                       text=\"Site List\"\n                       iconCssClass=\"fas fa-list-ul fa-fw\"\n                       componentVisibility=\"breadcrumbs,childtree,parenttree\"\n                       authorizationPolicy=\"ServerAdminPolicy\"\n                       excludeFromSearchSiteMap=\"true\">\n                  <Children>\n                      <NavNode key=\"NewSite\"\n                               controller=\"SiteAdmin\"\n                               action=\"NewSite\"\n                               text=\"New Site\"\n                               iconCssClass=\"fas fa-bolt fa-fw\"\n                               componentVisibility=\"breadcrumbs\"\n                               authorizationPolicy=\"ServerAdminPolicy\"\n                               excludeFromSearchSiteMap=\"true\">\n                          <Children />\n                      </NavNode>\n                  </Children>\n              </NavNode>\n              <NavNode\n                key=\"BasicSettings\"\n                controller=\"SiteAdmin\"\n                action=\"SiteInfo\"\n                text=\"Site Settings\"\n                iconCssClass=\"fas fa-cogs fa-fw\"\n                preservedRouteParameters=\"siteId\"\n                componentVisibility=\"breadcrumbs,childtree,parenttree\"\n                authorizationPolicy=\"AdminPolicy\"\n                excludeFromSearchSiteMap=\"true\">\n                  <Children>\n                      <NavNode key=\"SiteHostMappings\"\n                               controller=\"SiteAdmin\"\n                               action=\"SiteHostMappings\"\n                               text=\"Domain Mappings\"\n                               preservedRouteParameters=\"siteId\"\n                               componentVisibility=\"breadcrumbs\"\n                               authorizationPolicy=\"ServerAdminPolicy\"\n                               excludeFromSearchSiteMap=\"true\">\n                          <Children />\n                      </NavNode>\n                  </Children>\n              </NavNode>\n              <NavNode key=\"CompanyInfo\"\n                       controller=\"SiteAdmin\"\n                       action=\"CompanyInfo\"\n                       text=\"Company Info\"\n                       iconCssClass=\"fas fa-address-card fa-fw\"\n                       preservedRouteParameters=\"siteId\"\n                       componentVisibility=\"breadcrumbs,childtree,parenttree\"\n                       authorizationPolicy=\"AdminPolicy\"\n                       excludeFromSearchSiteMap=\"true\">\n                  <Children>\n                  </Children>\n              </NavNode>\n              <NavNode key=\"MailSettings\"\n                       controller=\"SiteAdmin\"\n                       action=\"MailSettings\"\n                       text=\"Email Settings\"\n                       iconCssClass=\"fas fa-envelope fa-fw\"\n                       preservedRouteParameters=\"siteId\"\n                       componentVisibility=\"breadcrumbs,childtree,parenttree\"\n                       authorizationPolicy=\"AdminPolicy\"\n                       excludeFromSearchSiteMap=\"true\">\n                  <Children>\n                  </Children>\n              </NavNode>\n\n              <NavNode key=\"SecuritySettings\"\n                       controller=\"SiteAdmin\"\n                       action=\"SecuritySettings\"\n                       text=\"Security Settings\"\n                       iconCssClass=\"fas fa-lock fa-fw\"\n                       preservedRouteParameters=\"siteId\"\n                       componentVisibility=\"breadcrumbs,childtree,parenttree\"\n                       authorizationPolicy=\"AdminPolicy\"\n                       excludeFromSearchSiteMap=\"true\">\n                  <Children></Children>\n              </NavNode>\n\n        <NavNode key=\"ContentCloning\"\n                 controller=\"ContentCloning\"\n                 action=\"Index\"\n                 text=\"Content Cloning\"\n                 iconCssClass=\"fas fa-copy\"\n                 preservedRouteParameters=\"siteId\"\n                 componentVisibility=\"breadcrumbs,childtree,parenttree\"\n                 authorizationPolicy=\"AdminPolicy\">\n          <Children></Children>\n        </NavNode>\n\n\n        <NavNode key=\"ContentSettings\"\n                 controller=\"ContentSettings\"\n                 action=\"Index\"\n                 text=\"Content Settings\"\n                 iconCssClass=\"fas fa-book\"\n                 componentVisibility=\"breadcrumbs,childtree,parenttree\"\n                 authorizationPolicy=\"AdminPolicy\">\n          <Children></Children>\n        </NavNode>\n        <NavNode key=\"PageTree\"\n           controller=\"Page\"\n           action=\"Tree\"\n           text=\"Page Management\"\n           iconCssClass=\"fas fa-tree\"\n           preservedRouteParameters=\"\"\n           componentVisibility=\"breadcrumbs,childtree,parenttree\"\n           authorizationPolicy=\"AdminPolicy\">\n          <Children>\n          </Children>\n        </NavNode>\n        <NavNode key=\"ContentHistory\"\n           controller=\"ContentHistory\"\n           action=\"Index\"\n           text=\"Content History\"\n           iconCssClass=\"fas fa-history\"\n           preservedRouteParameters=\"\"\n           componentVisibility=\"breadcrumbs,childtree,parenttree\"\n           authorizationPolicy=\"ViewContentHistoryPolicy\">\n          <Children>\n          </Children>\n        </NavNode>\n\n               <NavNode key=\"RoleAdmin\"\n                       controller=\"RoleAdmin\"\n                       action=\"Index\"\n                       preservedRouteParameters=\"siteId\"\n                       text=\"Role Management\"\n                       iconCssClass=\"fas fa-key fa-fw\"\n                       componentVisibility=\"breadcrumbs,childtree,parenttree\"\n                       authorizationPolicy=\"RoleAdminPolicy\"\n                       excludeFromSearchSiteMap=\"true\">\n                  <Children>\n                      <NavNode key=\"RoleMembers\"\n                               controller=\"RoleAdmin\"\n                               action=\"RoleMembers\"\n                               text=\"Role Members\"\n                               preservedRouteParameters=\"siteId,roleId,pageNumber,pageSize\"\n                               componentVisibility=\"breadcrumbs\"\n                               authorizationPolicy=\"RoleAdminPolicy\"\n                               excludeFromSearchSiteMap=\"true\">\n                          <Children />\n                      </NavNode>\n                      <NavNode key=\"RoleEdit\"\n                               controller=\"RoleAdmin\"\n                               action=\"RoleEdit\" text=\"New Role\"\n                               preservedRouteParameters=\"siteId,roleId\"\n                               componentVisibility=\"breadcrumbs\"\n                               authorizationPolicy=\"RoleAdminPolicy\"\n                               excludeFromSearchSiteMap=\"true\">\n                          <Children />\n                      </NavNode>\n                  </Children>\n              </NavNode>\n\n\n               <NavNode key=\"UserAdmin\"\n                       controller=\"UserAdmin\"\n                       action=\"Index\"\n                       preservedRouteParameters=\"siteId\"\n                       text=\"User Management\"\n                       iconCssClass=\"fas fa-user fa-fw\"\n                       componentVisibility=\"breadcrumbs,childtree,parenttree\"\n                       authorizationPolicy=\"UserManagementPolicy\"\n                       excludeFromSearchSiteMap=\"true\">\n                  <Children>\n                      <NavNode key=\"UserEdit\"\n                               controller=\"UserAdmin\"\n                               action=\"UserEdit\"\n                               preservedRouteParameters=\"siteId\"\n                               text=\"New User\"\n                               componentVisibility=\"breadcrumbs\"\n                               authorizationPolicy=\"UserManagementPolicy\"\n                               excludeFromSearchSiteMap=\"true\">\n                          <Children>\n                            <NavNode key=\"ChangeUserPassword\"\n                                controller=\"UserAdmin\"\n                                action=\"ChangeUserPassword\"\n                                preservedRouteParameters=\"siteId\"\n                                text=\"Change User Password\"\n                                componentVisibility=\"breadcrumbs,childtree\"\n                                authorizationPolicy=\"UserManagementPolicy\"\n                                excludeFromSearchSiteMap=\"true\">\n                            <Children />\n                            </NavNode>\n                          </Children>\n                      </NavNode>\n                      <NavNode key=\"NewUser\"\n                             controller=\"UserAdmin\"\n                             action=\"NewUser\"\n                             preservedRouteParameters=\"siteId\"\n                             text=\"New User\"\n                             iconCssClass=\"fas fa-user-plus fa-fw\"\n                             componentVisibility=\"breadcrumbs\"\n                             authorizationPolicy=\"UserManagementPolicy\"\n                             excludeFromSearchSiteMap=\"true\">\n                          <Children />\n                      </NavNode>\n                      <NavNode key=\"UserActivity\"\n                                controller=\"UserAdmin\"\n                                action=\"UserActivity\"\n                                preservedRouteParameters=\"siteId,userId\"\n                                text=\"Activity\"\n                                componentVisibility=\"breadcrumbs\"\n                                authorizationPolicy=\"UserManagementPolicy\"\n                                excludeFromSearchSiteMap=\"true\">\n                            <Children />\n                        </NavNode>\n\n\n                      <NavNode key=\"UserSearch\"\n                               controller=\"UserAdmin\"\n                               action=\"Search\"\n                               preservedRouteParameters=\"siteId\"\n                               text=\"User Search\"\n                               componentVisibility=\"breadcrumbs\"\n                               authorizationPolicy=\"UserManagementPolicy\"\n                               excludeFromSearchSiteMap=\"true\">\n                          <Children />\n                      </NavNode>\n                      <NavNode key=\"IpSearch\"\n                               controller=\"UserAdmin\"\n                               action=\"IpSearch\"\n                               preservedRouteParameters=\"siteId\"\n                               text=\"IpSearch\"\n                               componentVisibility=\"breadcrumbs\"\n                               authorizationPolicy=\"UserManagementPolicy\"\n                               excludeFromSearchSiteMap=\"true\">\n                          <Children />\n                      </NavNode>\n                  </Children>\n              </NavNode>\n              <NavNode key=\"UnApprovedUsers\"\n                    controller=\"UserAdmin\"\n                    action=\"UnApprovedUsers\"\n                    preservedRouteParameters=\"siteId\"\n                    text=\"Un-Approved Users\"\n                    iconCssClass=\"fas fa-user-plus fa-fw\"\n                    componentVisibility=\"breadcrumbs,childtree,parenttree\"\n                    authorizationPolicy=\"UserManagementPolicy\"\n                    excludeFromSearchSiteMap=\"true\">\n                <Children />\n              </NavNode>\n              <NavNode key=\"LockedUsers\"\n                    controller=\"UserAdmin\"\n                    action=\"LockedUsers\"\n                    preservedRouteParameters=\"siteId\"\n                    text=\"Locked Users\"\n                    iconCssClass=\"fas fa-ban fa-fw\"\n                    componentVisibility=\"breadcrumbs,childtree,parenttree\"\n                    authorizationPolicy=\"UserManagementPolicy\"\n                    excludeFromSearchSiteMap=\"true\">\n                <Children />\n            </NavNode>\n\n              <NavNode key=\"CaptchaSettings\"\n                    controller=\"SiteAdmin\"\n                    action=\"Captcha\"\n                    text=\"Captcha Settings\"\n                    iconCssClass=\"fas fa-puzzle-piece fa-fw\"\n                    preservedRouteParameters=\"siteId\"\n                    componentVisibility=\"breadcrumbs,childtree,parenttree\"\n                    authorizationPolicy=\"AdminPolicy\"\n                    excludeFromSearchSiteMap=\"true\">\n                <Children />\n            </NavNode>\n            <NavNode key=\"SocialLogins\"\n                    controller=\"SiteAdmin\"\n                    action=\"SocialLogins\"\n                    text=\"Social Logins\"\n                    iconCssClass=\"fab fa-facebook-square fa-fw\"\n                    preservedRouteParameters=\"siteId\"\n                    componentVisibility=\"breadcrumbs,childtree,parenttree\"\n                    authorizationPolicy=\"AdminPolicy\"\n                    excludeFromSearchSiteMap=\"true\">\n                <Children />\n            </NavNode>\n\n\n            <NavNode key=\"PrivacySettings\"\n                 controller=\"SiteAdmin\"\n                 action=\"PrivacySettings\"\n                 text=\"Privacy Settings\"\n                 iconCssClass=\"fas fa-user-secret fa-fw\"\n                 preservedRouteParameters=\"siteId\"\n                 componentVisibility=\"breadcrumbs,childtree,parenttree\"\n                 authorizationPolicy=\"AdminPolicy\"\n                 excludeFromSearchSiteMap=\"true\">\n              <Children />\n            </NavNode>\n\n\n\n\n\n\n\n\n\n              <NavNode key=\"LoginPageInfo\"\n                       controller=\"SiteAdmin\"\n                       action=\"LoginPageInfo\"\n                       text=\"Login Page Info\"\n                       iconCssClass=\"fas fa-info-circle fa-fw\"\n                       preservedRouteParameters=\"siteId\"\n                       componentVisibility=\"breadcrumbs,childtree,parenttree\"\n                       authorizationPolicy=\"AdminPolicy\"\n                       excludeFromSearchSiteMap=\"true\">\n                  <Children>\n                  </Children>\n              </NavNode>\n              <NavNode key=\"RegisterPageInfo\"\n                       controller=\"SiteAdmin\"\n                       action=\"RegisterPageInfo\"\n                       text=\"Register Page Info\"\n                       iconCssClass=\"fas fa-info-circle fa-fw\"\n                       preservedRouteParameters=\"siteId\"\n                       componentVisibility=\"breadcrumbs,childtree,parenttree\"\n                       authorizationPolicy=\"AdminPolicy\"\n                       excludeFromSearchSiteMap=\"true\">\n                  <Children>\n                  </Children>\n              </NavNode>\n\n              <NavNode key=\"FileManager\"\n                 controller=\"FileManager\"\n                 action=\"Index\"\n                 text=\"File Manager\"\n                 iconCssClass=\"far fa-file-image fa-fw\"\n                 componentVisibility=\"breadcrumbs,childtree,parenttree\"\n                 authorizationPolicy=\"FileManagerPolicy\"\n                 excludeFromSearchSiteMap=\"true\">\n                    <Children> </Children>\n                </NavNode>\n\n\n\n            <NavNode key=\"CountryListPage\"\n                    controller=\"CoreData\"\n                    action=\"CountryListPage\"\n                    text=\"Country State Administration\"\n                    iconCssClass=\"fas fa-globe fa-fw\"\n                    componentVisibility=\"breadcrumbs,childtree,parenttree\"\n                    authorizationPolicy=\"CoreDataPolicy\"\n                    excludeFromSearchSiteMap=\"true\">\n                <Children>\n                    <NavNode key=\"CountryEdit\"\n                            controller=\"CoreData\"\n                            action=\"CountryEdit\"\n                            text=\"New Country\"\n                            iconCssClass=\"fas fa-plus-circle fa-fw\"\n                            preservedRouteParameters=\"id\"\n                            componentVisibility=\"breadcrumbs\"\n                            authorizationPolicy=\"CoreDataPolicy\"\n                            excludeFromSearchSiteMap=\"true\">\n                        <Children />\n                    </NavNode>\n                    <NavNode key=\"StateListPage\"\n                            controller=\"CoreData\"\n                            action=\"StateListPage\"\n                            text=\"States\"\n                            preservedRouteParameters=\"countryId\"\n                            componentVisibility=\"breadcrumbs\"\n                            authorizationPolicy=\"CoreDataPolicy\"\n                            excludeFromSearchSiteMap=\"true\">\n                        <Children>\n                            <NavNode key=\"StateEdit\"\n                                    controller=\"CoreData\"\n                                    action=\"StateEdit\" text=\"New State\"\n                                    preservedRouteParameters=\"countryId\"\n                                    componentVisibility=\"breadcrumbs\"\n                                    authorizationPolicy=\"CoreDataPolicy\"\n                                    excludeFromSearchSiteMap=\"true\">\n                                <Children />\n                            </NavNode>\n                        </Children>\n                    </NavNode>\n                </Children>\n            </NavNode>\n\n\n            <NavNode key=\"SystemInfo\"\n                       controller=\"SystemInfo\"\n                       action=\"Index\"\n                       text=\"System Information\"\n                       iconCssClass=\"fas fa-bolt fa-fw\"\n                       componentVisibility=\"breadcrumbs,childtree,parenttree\"\n                       authorizationPolicy=\"AdminPolicy\"\n                       excludeFromSearchSiteMap=\"true\">\n                  <Children>\n\n                  </Children>\n              </NavNode>\n            <NavNode key=\"SystemLog\"\n                    controller=\"SystemLog\"\n                    action=\"Index\"\n                    text=\"System Log\"\n                    iconCssClass=\"fas fa-bug fa-fw\"\n                    componentVisibility=\"breadcrumbs,childtree,parenttree\"\n                    authorizationPolicy=\"SystemLogPolicy\"\n                    excludeFromSearchSiteMap=\"true\" />\n\n          </Children>\n      </NavNode>\n\n  </Children>\n</NavNode>\n"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/5a6edd1f-6bb3-4e86-b434-4b33e309056a/page/466fd5c6-72bb-4ff4-844a-ffa57b301eeb.json",
    "content": "{\"Id\":\"466fd5c6-72bb-4ff4-844a-ffa57b301eeb\",\"ProjectId\":\"blog2\",\"ParentId\":\"0\",\"ParentTitle\":\"\",\"PageOrder\":3,\"Title\":\"About\",\"Author\":\"Joe Audette\",\"Slug\":\"about\",\"MetaDescription\":null,\"Content\":\"about Frodo Baggins\",\"PubDate\":\"2016-03-16T13:33:10.4778622Z\",\"LastModified\":\"2016-03-20T16:20:42.3564231Z\",\"IsPublished\":true,\"Categories\":[],\"Comments\":[],\"ShowHeading\":true,\"ShowPubDate\":false,\"ShowLastModified\":false,\"ShowCategories\":false,\"ShowComments\":false}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/5a6edd1f-6bb3-4e86-b434-4b33e309056a/page/9a102c56-ed87-464b-b1f6-2df43229f2be.json",
    "content": "{\"Id\":\"9a102c56-ed87-464b-b1f6-2df43229f2be\",\"ProjectId\":\"blog2\",\"ParentId\":\"0\",\"ParentSlug\":\"\",\"PageOrder\":1,\"Title\":\"Home\",\"Author\":\"Joe Audette\",\"Slug\":\"home\",\"ExternalUrl\":null,\"CorrelationKey\":null,\"MetaDescription\":null,\"Content\":\"<p>home page content<br />\\r\\n<img alt=\\\"\\\" src=\\\"/two/fruit1.jpg\\\" style=\\\"height:408px; width:543px\\\" /><br />\\r\\nmore</p>\\r\\n\",\"PubDate\":\"2016-03-05T18:08:00Z\",\"LastModified\":\"2017-05-15T12:08:43.7361416Z\",\"IsPublished\":true,\"MenuOnly\":false,\"ShowMenu\":false,\"ViewRoles\":null,\"Categories\":[],\"Comments\":[],\"ShowHeading\":true,\"ShowPubDate\":false,\"ShowLastModified\":false,\"ShowCategories\":false,\"ShowComments\":false,\"MenuFilters\":null,\"Resources\":[]}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/5a6edd1f-6bb3-4e86-b434-4b33e309056a/page/efff35fa-4198-49af-a30f-638a801cc66f.json",
    "content": "{\"Id\":\"efff35fa-4198-49af-a30f-638a801cc66f\",\"ProjectId\":\"5a6edd1f-6bb3-4e86-b434-4b33e309056a\",\"ParentId\":\"466fd5c6-72bb-4ff4-844a-ffa57b301eeb\",\"ParentTitle\":\"about\",\"PageOrder\":3,\"Title\":\"Documentation\",\"Author\":\"site2admin\",\"Slug\":\"documentation\",\"MetaDescription\":\"this is the meta, it is very meta meta\",\"Content\":\"Some content will go here\",\"PubDate\":\"2016-08-25T16:02:23.5648404Z\",\"LastModified\":\"2016-08-25T18:24:20.5972434Z\",\"IsPublished\":true,\"ViewRoles\":null,\"Categories\":[],\"Comments\":[],\"ShowHeading\":true,\"ShowPubDate\":false,\"ShowLastModified\":false,\"ShowCategories\":false,\"ShowComments\":false}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/5a6edd1f-6bb3-4e86-b434-4b33e309056a/post/2016/02/c94b5121-358f-4e76-853a-4249a3b56392.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-16\"?>\n<post>\n  <title>Frodo Lives</title>\n  <slug>frodo-lives</slug>\n  <correlationkey />\n  <author>Joe Audette</author>\n  <pubDate>2016-02-22T23:31:00.0000000Z</pubDate>\n  <lastModified>2017-05-15T12:01:35.3419771Z</lastModified>\n  <excerpt>where is my meta</excerpt>\n  <content>&lt;p&gt;where are you Frodo&lt;/p&gt;\n\n&lt;p&gt;&lt;img alt=\"dudes\" src=\"/two/dudes-550x412.jpeg\" style=\"height:412px; width:550px\" /&gt;&lt;/p&gt;\n\n&lt;p&gt;where is Gandalf&lt;/p&gt;\n</content>\n  <ispublished>true</ispublished>\n  <categories>\n    <category>wizards</category>\n  </categories>\n  <comments></comments>\n</post>"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/5a6edd1f-6bb3-4e86-b434-4b33e309056a/post/2017/09/b87bf10b-dc9f-434b-af79-f0a0ecb4579b.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-16\"?>\n<post>\n  <title>New Post</title>\n  <slug>new-post</slug>\n  <correlationkey />\n  <author>site2admin</author>\n  <pubDate>2017-09-24T10:30:00.0000000Z</pubDate>\n  <lastModified>2017-09-24T10:30:38.1599826Z</lastModified>\n  <excerpt />\n  <content>&lt;p&gt;posty&lt;/p&gt;\n</content>\n  <ispublished>true</ispublished>\n  <categories></categories>\n  <comments></comments>\n</post>"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/5a6edd1f-6bb3-4e86-b434-4b33e309056a/post/2018/06/its-been-a-long-time.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-16\"?>\n<post>\n  <id>its-been-a-long-time</id>\n  <title>Its been a long time</title>\n  <slug>its-been-a-long-time</slug>\n  <correlationkey />\n  <author>site2admin</author>\n  <pubDate>2018-06-19T17:57:00.0000000Z</pubDate>\n  <lastModified>2018-06-19T17:58:08.4684610Z</lastModified>\n  <excerpt />\n  <content>&lt;p&gt;It has been a long time since I posted here.&lt;/p&gt;\n\n&lt;p&gt;&lt;img alt=\"\" src=\"/two/arlo1-ws.jpg\" style=\"width: 550px; height: 309px;\" /&gt;&lt;/p&gt;\n</content>\n  <contentType>html</contentType>\n  <imageUrl />\n  <thumbnailUrl />\n  <ispublished>true</ispublished>\n  <isFeatured>false</isFeatured>\n  <teaserOverride />\n  <suppressTeaser>false</suppressTeaser>\n  <categories></categories>\n  <comments></comments>\n</post>"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/5a6edd1f-6bb3-4e86-b434-4b33e309056a/projectsettings/5a6edd1f-6bb3-4e86-b434-4b33e309056a.json",
    "content": "{\"Id\":\"5a6edd1f-6bb3-4e86-b434-4b33e309056a\",\"Title\":\"Blog\",\"Description\":null,\"CopyrightNotice\":\"\",\"Publisher\":null,\"PublisherLogoUrl\":null,\"PublisherLogoWidth\":\"500px\",\"PublisherLogoHeight\":\"500px\",\"PublisherEntityType\":\"Organization\",\"DisqusShortName\":null,\"PostsPerPage\":5,\"DaysToComment\":0,\"ModerateComments\":true,\"CommentNotificationEmail\":null,\"BlogMenuLinksToNewestPost\":false,\"LocalMediaVirtualPath\":\"/s2/media/images/\",\"CdnUrl\":\"\",\"PubDateFormat\":\"MMMM d. yyyy\",\"IncludePubDateInPostUrls\":true,\"TimeZoneId\":\"America/New_York\",\"RecaptchaPublicKey\":\"\",\"RecaptchaPrivateKey\":\"\",\"DefaultPageSlug\":\"home\",\"UseDefaultPageAsRootNode\":true,\"ShowTitle\":false,\"AddBlogToPagesTree\":true,\"BlogPagePosition\":2,\"BlogPageText\":\"Blog\",\"BlogPageNavComponentVisibility\":null,\"Image\":\"\",\"UseMetaDescriptionInFeed\":false,\"ChannelTimeToLive\":60,\"LanguageCode\":\"en-US\",\"ChannelCategoriesCsv\":null,\"ManagingEditorEmail\":null,\"ChannelRating\":\"\",\"WebmasterEmail\":null,\"RemoteFeedUrl\":null,\"RemoteFeedProcessorUseAgentFragment\":\"\",\"EmailFromAddress\":\"\",\"SmtpServer\":\"\",\"SmtpUser\":\"\",\"SmtpPassword\":\"\",\"SmtpPort\":25,\"SmtpPreferredEncoding\":null,\"SmtpRequiresAuth\":false,\"SmtpUseSsl\":false,\"ShowRecentPostsOnDefaultPage\":false}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/5a6edd1f-6bb3-4e86-b434-4b33e309056a/siterole/805da7c0-0506-474e-9038-bb0b594a1728.json",
    "content": "{\"Id\":\"805da7c0-0506-474e-9038-bb0b594a1728\",\"SiteId\":\"5a6edd1f-6bb3-4e86-b434-4b33e309056a\",\"NormalizedRoleName\":\"ADMINISTRATORS\",\"RoleName\":\"Administrators\",\"MemberCount\":-1}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/5a6edd1f-6bb3-4e86-b434-4b33e309056a/siterole/8ded2209-f22f-4436-8207-386e0141a197.json",
    "content": "{\"Id\":\"8ded2209-f22f-4436-8207-386e0141a197\",\"SiteId\":\"5a6edd1f-6bb3-4e86-b434-4b33e309056a\",\"NormalizedRoleName\":\"ROLE ADMINISTRATORS\",\"RoleName\":\"Role Administrators\",\"MemberCount\":-1}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/5a6edd1f-6bb3-4e86-b434-4b33e309056a/siterole/8ffb27e5-e7e0-4b4e-8a5d-8e23dfda689b.json",
    "content": "{\"Id\":\"8ffb27e5-e7e0-4b4e-8a5d-8e23dfda689b\",\"SiteId\":\"5a6edd1f-6bb3-4e86-b434-4b33e309056a\",\"NormalizedRoleName\":\"AUTHENTICATED USERS\",\"RoleName\":\"Authenticated Users\",\"MemberCount\":-1}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/5a6edd1f-6bb3-4e86-b434-4b33e309056a/siterole/abb5e05a-2cf8-4ffd-9244-f02d14a7acbe.json",
    "content": "{\"Id\":\"abb5e05a-2cf8-4ffd-9244-f02d14a7acbe\",\"SiteId\":\"5a6edd1f-6bb3-4e86-b434-4b33e309056a\",\"NormalizedRoleName\":\"CONTENT ADMINISTRATORS\",\"RoleName\":\"Content Administrators\",\"MemberCount\":-1}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/5a6edd1f-6bb3-4e86-b434-4b33e309056a/sitesettings/5a6edd1f-6bb3-4e86-b434-4b33e309056a.json",
    "content": "{\"RequireCookieConsent\":true,\"CookiePolicySummary\":\"To ensure you get the best experience, this website uses cookies.\",\"ConcurrencyStamp\":\"9ae082d9-0b92-4e9e-a7ee-faf5499166fb\",\"Theme\":\"slate\",\"AllowNewRegistration\":true,\"RequireConfirmedEmail\":false,\"RequireConfirmedPhone\":false,\"UseLdapAuth\":false,\"AllowDbFallbackWithLdap\":false,\"EmailLdapDbFallback\":false,\"AutoCreateLdapUserOnFirstLogin\":true,\"LdapServer\":\"\",\"LdapDomain\":\"\",\"LdapPort\":389,\"LdapRootDN\":\"\",\"LdapUserDNKey\":\"CN\",\"UseEmailForLogin\":true,\"DisableDbAuth\":false,\"RequiresQuestionAndAnswer\":false,\"RequireApprovalBeforeLogin\":false,\"AccountApprovalEmailCsv\":\"\",\"MaxInvalidPasswordAttempts\":5,\"MinRequiredPasswordLength\":7,\"PwdRequireNonAlpha\":true,\"PwdRequireLowercase\":true,\"PwdRequireUppercase\":true,\"PwdRequireDigit\":true,\"AllowPersistentLogin\":true,\"CaptchaOnRegistration\":false,\"CaptchaOnLogin\":false,\"RecaptchaPrivateKey\":\"\",\"RecaptchaPublicKey\":\"\",\"UseInvisibleRecaptcha\":false,\"FacebookAppId\":\"\",\"FacebookAppSecret\":\"\",\"MicrosoftClientId\":\"\",\"MicrosoftClientSecret\":\"\",\"GoogleClientId\":\"\",\"GoogleClientSecret\":\"\",\"TwitterConsumerKey\":\"\",\"TwitterConsumerSecret\":\"\",\"OidConnectAppId\":\"\",\"OidConnectAppSecret\":\"\",\"OidConnectAuthority\":null,\"OidConnectDisplayName\":null,\"AddThisDotComUsername\":null,\"TimeZoneId\":\"America/New_York\",\"CompanyName\":\"\",\"CompanyStreetAddress\":\"\",\"CompanyStreetAddress2\":\"\",\"CompanyLocality\":\"\",\"CompanyRegion\":\"\",\"CompanyPostalCode\":\"\",\"CompanyCountry\":\"\",\"CompanyPhone\":\"\",\"CompanyFax\":\"\",\"CompanyPublicEmail\":\"\",\"CompanyWebsite\":null,\"DefaultEmailFromAddress\":\"\",\"DefaultEmailFromAlias\":\"\",\"SmtpUser\":\"\",\"SmtpPassword\":\"\",\"SmtpPort\":25,\"SmtpPreferredEncoding\":\"\",\"SmtpServer\":\"\",\"SmtpRequiresAuth\":false,\"SmtpUseSsl\":false,\"DkimPublicKey\":\"\",\"DkimPrivateKey\":\"\",\"DkimDomain\":\"\",\"DkimSelector\":\"\",\"SignEmailWithDkim\":false,\"EmailSenderName\":\"SmtpMailSender\",\"EmailApiKey\":null,\"EmailApiEndpoint\":null,\"SmsClientId\":\"\",\"SmsSecureToken\":\"\",\"SmsFrom\":\"\",\"GoogleAnalyticsProfileId\":null,\"RegistrationAgreement\":\"\",\"RegistrationPreamble\":\"\",\"LoginInfoTop\":\"\",\"LoginInfoBottom\":\"\",\"SiteIsClosed\":false,\"SiteIsClosedMessage\":null,\"PrivacyPolicy\":\"\",\"IsDataProtected\":false,\"TermsUpdatedUtc\":\"2019-02-12T14:08:45.7866747Z\",\"ForcedCulture\":null,\"ForcedUICulture\":null,\"Id\":\"5a6edd1f-6bb3-4e86-b434-4b33e309056a\",\"AliasId\":\"s2\",\"SiteName\":\"Site 2\",\"SiteFolderName\":\"two\",\"PreferredHostName\":\"\",\"IsServerAdminSite\":false,\"CreatedUtc\":\"2016-08-04T12:57:09.7420984Z\",\"LastModifiedUtc\":\"2019-02-12T14:09:14.0616553Z\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/5a6edd1f-6bb3-4e86-b434-4b33e309056a/siteuser/006cf1b5-fa84-4a14-addc-7d0c24e84694.json",
    "content": "{\"AuthorBio\":\"\",\"Comment\":\"\",\"NormalizedEmail\":\"ADMIN@ADMIN.COM\",\"NormalizedUserName\":\"SITE2ADMIN\",\"EmailConfirmed\":true,\"EmailConfirmSentUtc\":null,\"AgreementAcceptedUtc\":null,\"LockoutEndDateUtc\":null,\"NewEmail\":\"\",\"NewEmailApproved\":false,\"LastPasswordChangeUtc\":\"2017-09-24T10:29:21.0482893Z\",\"MustChangePwd\":false,\"PasswordHash\":\"AQAAAAEAACcQAAAAEDABbA6b35Cj7KM+YIDWKZVktYKkiUKhS4l38+rLE5X2YaetSkCDaW+hrRYxCrtgyg==\",\"CanAutoLockout\":true,\"AccessFailedCount\":0,\"RolesChanged\":false,\"SecurityStamp\":\"5243d22a-edd1-4598-acd3-68e4bf811f50\",\"Signature\":\"\",\"TwoFactorEnabled\":false,\"Id\":\"006cf1b5-fa84-4a14-addc-7d0c24e84694\",\"SiteId\":\"5a6edd1f-6bb3-4e86-b434-4b33e309056a\",\"Email\":\"admin@admin.com\",\"UserName\":\"site2admin\",\"DisplayName\":\"site2admin\",\"FirstName\":\"\",\"LastName\":\"\",\"IsDeleted\":false,\"Trusted\":false,\"AvatarUrl\":\"\",\"DateOfBirth\":null,\"CreatedUtc\":\"2016-08-04T12:57:09.8600952Z\",\"LastModifiedUtc\":\"2016-08-04T12:57:09.8600952Z\",\"DisplayInMemberList\":true,\"Gender\":\"\",\"IsLockedOut\":false,\"LastLoginUtc\":null,\"PhoneNumber\":\"\",\"PhoneNumberConfirmed\":false,\"AccountApproved\":true,\"TimeZoneId\":\"\",\"WebSiteUrl\":\"\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/5a6edd1f-6bb3-4e86-b434-4b33e309056a/userrole/006cf1b5-fa84-4a14-addc-7d0c24e84694~805da7c0-0506-474e-9038-bb0b594a1728.json",
    "content": "{\"RoleId\":\"805da7c0-0506-474e-9038-bb0b594a1728\",\"UserId\":\"006cf1b5-fa84-4a14-addc-7d0c24e84694\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/000da5ad-296a-4698-a21b-7d9c23feea14.json",
    "content": "{\"Id\":\"000da5ad-296a-4698-a21b-7d9c23feea14\",\"Name\":\"Indonesia\",\"ISOCode2\":\"ID\",\"ISOCode3\":\"IDN\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/0055471a-7993-42a1-897c-e5daf92e7c0e.json",
    "content": "{\"Id\":\"0055471a-7993-42a1-897c-e5daf92e7c0e\",\"Name\":\"Maldives\",\"ISOCode2\":\"MV\",\"ISOCode3\":\"MDV\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/01261d1a-74d6-4e02-86c5-bed1a192f67d.json",
    "content": "{\"Id\":\"01261d1a-74d6-4e02-86c5-bed1a192f67d\",\"Name\":\"Zimbabwe\",\"ISOCode2\":\"ZW\",\"ISOCode3\":\"ZWE\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/01ca292d-86ca-4fa5-9205-2b0a37e7353b.json",
    "content": "{\"Id\":\"01ca292d-86ca-4fa5-9205-2b0a37e7353b\",\"Name\":\"Iceland\",\"ISOCode2\":\"IS\",\"ISOCode3\":\"ISL\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/0416e2fc-c902-4452-8de9-29a2b453e685.json",
    "content": "{\"Id\":\"0416e2fc-c902-4452-8de9-29a2b453e685\",\"Name\":\"Kyrgyzstan\",\"ISOCode2\":\"KG\",\"ISOCode3\":\"KGZ\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/045a6098-a4a5-457a-aef0-6cc57cc4a813.json",
    "content": "{\"Id\":\"045a6098-a4a5-457a-aef0-6cc57cc4a813\",\"Name\":\"Malawi\",\"ISOCode2\":\"MW\",\"ISOCode3\":\"MWI\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/04724868-0448-48ef-840b-7d5da12495ec.json",
    "content": "{\"Id\":\"04724868-0448-48ef-840b-7d5da12495ec\",\"Name\":\"Malaysia\",\"ISOCode2\":\"MY\",\"ISOCode3\":\"MYS\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/056f6ed6-8f6d-4366-a755-2d6b8fb2b7ad.json",
    "content": "{\"Id\":\"056f6ed6-8f6d-4366-a755-2d6b8fb2b7ad\",\"Name\":\"Marshall Islands\",\"ISOCode2\":\"MH\",\"ISOCode3\":\"MHL\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/0589489d-a413-47c6-a90a-600520a8c52d.json",
    "content": "{\"Id\":\"0589489d-a413-47c6-a90a-600520a8c52d\",\"Name\":\"St. Helena\",\"ISOCode2\":\"SH\",\"ISOCode3\":\"SHN\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/05b98ddc-f36b-4daf-9459-0717fde9b38e.json",
    "content": "{\"Id\":\"05b98ddc-f36b-4daf-9459-0717fde9b38e\",\"Name\":\"Equatorial Guinea\",\"ISOCode2\":\"GQ\",\"ISOCode3\":\"GNQ\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/061e11a1-33a2-42f0-8f8d-27e65fc47076.json",
    "content": "{\"Id\":\"061e11a1-33a2-42f0-8f8d-27e65fc47076\",\"Name\":\"Sudan\",\"ISOCode2\":\"SD\",\"ISOCode3\":\"SDN\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/06bb7816-9ad4-47dc-b1cd-6e206afdfcca.json",
    "content": "{\"Id\":\"06bb7816-9ad4-47dc-b1cd-6e206afdfcca\",\"Name\":\"Austria\",\"ISOCode2\":\"AT\",\"ISOCode3\":\"AUT\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/0758cf79-94eb-4fa3-bd2c-8213034fb66c.json",
    "content": "{\"Id\":\"0758cf79-94eb-4fa3-bd2c-8213034fb66c\",\"Name\":\"Virgin Islands (U.S.)\",\"ISOCode2\":\"VI\",\"ISOCode3\":\"VIR\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/0789d8a8-59d0-4d2f-8e26-5d917e55550c.json",
    "content": "{\"Id\":\"0789d8a8-59d0-4d2f-8e26-5d917e55550c\",\"Name\":\"To\",\"ISOCode2\":\"TG\",\"ISOCode3\":\"T  \"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/07e1de2f-b11e-4f3b-a342-964f72d24371.json",
    "content": "{\"Id\":\"07e1de2f-b11e-4f3b-a342-964f72d24371\",\"Name\":\"Netherlands\",\"ISOCode2\":\"NL\",\"ISOCode3\":\"NLD\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/085d9357-416b-48d6-8c9e-ec3e9e2582d0.json",
    "content": "{\"Id\":\"085d9357-416b-48d6-8c9e-ec3e9e2582d0\",\"Name\":\"Peru\",\"ISOCode2\":\"PE\",\"ISOCode3\":\"PER\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/0b182ee0-0cc0-4844-9cf0-ba15f47682e8.json",
    "content": "{\"Id\":\"0b182ee0-0cc0-4844-9cf0-ba15f47682e8\",\"Name\":\"Con\",\"ISOCode2\":\"CG\",\"ISOCode3\":\"COG\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/0bd0e1a0-ea93-4883-b0a0-9f3c8668c68c.json",
    "content": "{\"Id\":\"0bd0e1a0-ea93-4883-b0a0-9f3c8668c68c\",\"Name\":\"Singapore\",\"ISOCode2\":\"SG\",\"ISOCode3\":\"SGP\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/0c356c5a-ca44-4301-8212-1826ccdadc42.json",
    "content": "{\"Id\":\"0c356c5a-ca44-4301-8212-1826ccdadc42\",\"Name\":\"Canada\",\"ISOCode2\":\"CA\",\"ISOCode3\":\"CAN\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/0d074a4f-df7f-49f3-8375-d35bdc934ae0.json",
    "content": "{\"Id\":\"0d074a4f-df7f-49f3-8375-d35bdc934ae0\",\"Name\":\"Zaire\",\"ISOCode2\":\"ZR\",\"ISOCode3\":\"ZAR\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/10d4d58e-d0c2-4a4e-8fdd-b99d68c0bd22.json",
    "content": "{\"Id\":\"10d4d58e-d0c2-4a4e-8fdd-b99d68c0bd22\",\"Name\":\"Eritrea\",\"ISOCode2\":\"ER\",\"ISOCode3\":\"ERI\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/10fdc2bb-f3a6-4a9d-a6e9-f4c781e8dbff.json",
    "content": "{\"Id\":\"10fdc2bb-f3a6-4a9d-a6e9-f4c781e8dbff\",\"Name\":\"Mexico\",\"ISOCode2\":\"MX\",\"ISOCode3\":\"MEX\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/13faa99e-18f2-4e6f-b275-1e785b3383f3.json",
    "content": "{\"Id\":\"13faa99e-18f2-4e6f-b275-1e785b3383f3\",\"Name\":\"Brazil\",\"ISOCode2\":\"BR\",\"ISOCode3\":\"BRA\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/14962add-4536-4854-bea3-a5a904932e1c.json",
    "content": "{\"Id\":\"14962add-4536-4854-bea3-a5a904932e1c\",\"Name\":\"Moldova, Republic of\",\"ISOCode2\":\"MD\",\"ISOCode3\":\"MDA\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/1583045c-5a80-4850-ac32-f177956fbd6a.json",
    "content": "{\"Id\":\"1583045c-5a80-4850-ac32-f177956fbd6a\",\"Name\":\"Myanmar\",\"ISOCode2\":\"MM\",\"ISOCode3\":\"MMR\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/167838f1-3fdd-4fb6-9268-4beafeecea4b.json",
    "content": "{\"Id\":\"167838f1-3fdd-4fb6-9268-4beafeecea4b\",\"Name\":\"Estonia\",\"ISOCode2\":\"EE\",\"ISOCode3\":\"EST\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/171a3e3e-cc78-4d4a-93ee-ace870dcb4c4.json",
    "content": "{\"Id\":\"171a3e3e-cc78-4d4a-93ee-ace870dcb4c4\",\"Name\":\"Swaziland\",\"ISOCode2\":\"SZ\",\"ISOCode3\":\"SWZ\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/18160966-4eeb-4c6b-a526-5022042fe1e4.json",
    "content": "{\"Id\":\"18160966-4eeb-4c6b-a526-5022042fe1e4\",\"Name\":\"Montserrat\",\"ISOCode2\":\"MS\",\"ISOCode3\":\"MSR\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/19f2da98-fefd-4b45-a260-8d9392c35a24.json",
    "content": "{\"Id\":\"19f2da98-fefd-4b45-a260-8d9392c35a24\",\"Name\":\"Czech Republic\",\"ISOCode2\":\"CZ\",\"ISOCode3\":\"CZE\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/1a07c0b8-eb6d-4153-8cb1-be6e31feb566.json",
    "content": "{\"Id\":\"1a07c0b8-eb6d-4153-8cb1-be6e31feb566\",\"Name\":\"Bosnia and Herzewina\",\"ISOCode2\":\"BA\",\"ISOCode3\":\"BIH\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/1a6a2db1-d162-4fea-b660-b88fc25f558e.json",
    "content": "{\"Id\":\"1a6a2db1-d162-4fea-b660-b88fc25f558e\",\"Name\":\"Grenada\",\"ISOCode2\":\"GD\",\"ISOCode3\":\"GRD\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/1b8fbde0-e709-4f7b-838d-b09def73de8f.json",
    "content": "{\"Id\":\"1b8fbde0-e709-4f7b-838d-b09def73de8f\",\"Name\":\"Botswana\",\"ISOCode2\":\"BW\",\"ISOCode3\":\"BWA\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/1c7ff578-f079-4b5b-9993-2e0253b8cc14.json",
    "content": "{\"Id\":\"1c7ff578-f079-4b5b-9993-2e0253b8cc14\",\"Name\":\"Morocco\",\"ISOCode2\":\"MA\",\"ISOCode3\":\"MAR\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/1d0dae21-cd07-4022-b86a-7780c5ea0264.json",
    "content": "{\"Id\":\"1d0dae21-cd07-4022-b86a-7780c5ea0264\",\"Name\":\"Cayman Islands\",\"ISOCode2\":\"KY\",\"ISOCode3\":\"CYM\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/1d925a47-3902-462a-ba2e-c58e5cb24f2f.json",
    "content": "{\"Id\":\"1d925a47-3902-462a-ba2e-c58e5cb24f2f\",\"Name\":\"American Samoa\",\"ISOCode2\":\"AS\",\"ISOCode3\":\"ASM\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/1e64910a-bce3-402c-9035-9cb1f820b195.json",
    "content": "{\"Id\":\"1e64910a-bce3-402c-9035-9cb1f820b195\",\"Name\":\"Bolivia\",\"ISOCode2\":\"BO\",\"ISOCode3\":\"BOL\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/1fcc4a89-0e8f-4fa2-b8d0-4ff5ec2277df.json",
    "content": "{\"Id\":\"1fcc4a89-0e8f-4fa2-b8d0-4ff5ec2277df\",\"Name\":\"United Kingdom\",\"ISOCode2\":\"GB\",\"ISOCode3\":\"GBR\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/20a15881-215b-4c4c-9512-80e55abbb5ba.json",
    "content": "{\"Id\":\"20a15881-215b-4c4c-9512-80e55abbb5ba\",\"Name\":\"Saint Vincent and the Grenadines\",\"ISOCode2\":\"VC\",\"ISOCode3\":\"VCT\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/216d38d9-5eeb-42b7-8d2d-0757409dc5fb.json",
    "content": "{\"Id\":\"216d38d9-5eeb-42b7-8d2d-0757409dc5fb\",\"Name\":\"Pitcairn\",\"ISOCode2\":\"PN\",\"ISOCode3\":\"PCN\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/2391213f-fcbf-479a-9ab9-af1d6deb9e11.json",
    "content": "{\"Id\":\"2391213f-fcbf-479a-9ab9-af1d6deb9e11\",\"Name\":\"Benin\",\"ISOCode2\":\"BJ\",\"ISOCode3\":\"BEN\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/23ba8dce-c784-4712-a6a0-0271f175d4e5.json",
    "content": "{\"Id\":\"23ba8dce-c784-4712-a6a0-0271f175d4e5\",\"Name\":\"Central African Republic\",\"ISOCode2\":\"CF\",\"ISOCode3\":\"CAF\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/24045513-0cd8-4fb9-9cf6-78bf717f6a7e.json",
    "content": "{\"Id\":\"24045513-0cd8-4fb9-9cf6-78bf717f6a7e\",\"Name\":\"Samoa\",\"ISOCode2\":\"WS\",\"ISOCode3\":\"WSM\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/25ed463d-21f5-412c-9bdb-6d76073ea790.json",
    "content": "{\"Id\":\"25ed463d-21f5-412c-9bdb-6d76073ea790\",\"Name\":\"Jordan\",\"ISOCode2\":\"JO\",\"ISOCode3\":\"JOR\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/267865b1-e8da-432d-be45-63933f18a40f.json",
    "content": "{\"Id\":\"267865b1-e8da-432d-be45-63933f18a40f\",\"Name\":\"Korea, Republic of\",\"ISOCode2\":\"KR\",\"ISOCode3\":\"KOR\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/278ab63a-9c7e-4cad-9c99-984f8810d151.json",
    "content": "{\"Id\":\"278ab63a-9c7e-4cad-9c99-984f8810d151\",\"Name\":\"Sri Lanka\",\"ISOCode2\":\"LK\",\"ISOCode3\":\"LKA\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/27a6a985-3a89-4309-ac40-d1f0a94646ce.json",
    "content": "{\"Id\":\"27a6a985-3a89-4309-ac40-d1f0a94646ce\",\"Name\":\"Sierra Leone\",\"ISOCode2\":\"SL\",\"ISOCode3\":\"SLE\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/28218639-6094-4aa2-ae88-9206630bb930.json",
    "content": "{\"Id\":\"28218639-6094-4aa2-ae88-9206630bb930\",\"Name\":\"Libyan Arab Jamahiriya\",\"ISOCode2\":\"LY\",\"ISOCode3\":\"LBY\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/2afe5a06-2692-4b96-a385-f299e469d196.json",
    "content": "{\"Id\":\"2afe5a06-2692-4b96-a385-f299e469d196\",\"Name\":\"Panama\",\"ISOCode2\":\"PA\",\"ISOCode3\":\"PAN\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/2bad76b2-20f3-4568-96bb-d60c39cfec37.json",
    "content": "{\"Id\":\"2bad76b2-20f3-4568-96bb-d60c39cfec37\",\"Name\":\"Sweden\",\"ISOCode2\":\"SE\",\"ISOCode3\":\"SWE\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/2d5b53a8-8341-4da4-a296-e516fe5bb953.json",
    "content": "{\"Id\":\"2d5b53a8-8341-4da4-a296-e516fe5bb953\",\"Name\":\"Germany\",\"ISOCode2\":\"DE\",\"ISOCode3\":\"DEU\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/2dd32741-d7e9-49c9-b3d3-b58c4a913e60.json",
    "content": "{\"Id\":\"2dd32741-d7e9-49c9-b3d3-b58c4a913e60\",\"Name\":\"Chad\",\"ISOCode2\":\"TD\",\"ISOCode3\":\"TCD\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/2ebce3a9-660a-4c1d-ac8f-0e899b34a987.json",
    "content": "{\"Id\":\"2ebce3a9-660a-4c1d-ac8f-0e899b34a987\",\"Name\":\"Australia\",\"ISOCode2\":\"AU\",\"ISOCode3\":\"AUS\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/31f9b05e-e21d-41d5-8753-7cdd3bfa917b.json",
    "content": "{\"Id\":\"31f9b05e-e21d-41d5-8753-7cdd3bfa917b\",\"Name\":\"Yuslavia\",\"ISOCode2\":\"YU\",\"ISOCode3\":\"YUG\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/3220b426-8251-4f95-85c8-3f7821ecc932.json",
    "content": "{\"Id\":\"3220b426-8251-4f95-85c8-3f7821ecc932\",\"Name\":\"Burkina Faso\",\"ISOCode2\":\"BF\",\"ISOCode3\":\"BFA\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/32eb5d85-1283-4586-bb16-b2b978b6537f.json",
    "content": "{\"Id\":\"32eb5d85-1283-4586-bb16-b2b978b6537f\",\"Name\":\"Cameroon\",\"ISOCode2\":\"CM\",\"ISOCode3\":\"CMR\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/333ed823-0e19-4bcc-a74e-c6c66fe76834.json",
    "content": "{\"Id\":\"333ed823-0e19-4bcc-a74e-c6c66fe76834\",\"Name\":\"Cote D Ivoire\",\"ISOCode2\":\"CI\",\"ISOCode3\":\"CIV\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/356d4b6e-9ccb-4dc6-9c82-837433178275.json",
    "content": "{\"Id\":\"356d4b6e-9ccb-4dc6-9c82-837433178275\",\"Name\":\"Palau\",\"ISOCode2\":\"PW\",\"ISOCode3\":\"PLW\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/3664546f-14f2-4561-9b77-67e8be6a9b1f.json",
    "content": "{\"Id\":\"3664546f-14f2-4561-9b77-67e8be6a9b1f\",\"Name\":\"Barbados\",\"ISOCode2\":\"BB\",\"ISOCode3\":\"BRB\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/36f89c06-1509-42d2-aea6-7b4ce3bbc4f5.json",
    "content": "{\"Id\":\"36f89c06-1509-42d2-aea6-7b4ce3bbc4f5\",\"Name\":\"Seychelles\",\"ISOCode2\":\"SC\",\"ISOCode3\":\"SYC\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/386812d8-e983-4d3a-b7f0-1fa0bbe5919f.json",
    "content": "{\"Id\":\"386812d8-e983-4d3a-b7f0-1fa0bbe5919f\",\"Name\":\"Comoros\",\"ISOCode2\":\"KM\",\"ISOCode3\":\"COM\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/38dc01c3-48d8-4ff8-a78a-2c35d4fbfa7b.json",
    "content": "{\"Id\":\"38dc01c3-48d8-4ff8-a78a-2c35d4fbfa7b\",\"Name\":\"Spain\",\"ISOCode2\":\"ES\",\"ISOCode3\":\"ESP\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/391ebafd-7689-41e5-a785-df6a3280528d.json",
    "content": "{\"Id\":\"391ebafd-7689-41e5-a785-df6a3280528d\",\"Name\":\"Tokelau\",\"ISOCode2\":\"TK\",\"ISOCode3\":\"TKL\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/392616f8-1b24-489f-8600-bae22ef478cc.json",
    "content": "{\"Id\":\"392616f8-1b24-489f-8600-bae22ef478cc\",\"Name\":\"Armenia\",\"ISOCode2\":\"AM\",\"ISOCode3\":\"ARM\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/3a733002-9223-4bd7-b2a9-62fa359c4cbd.json",
    "content": "{\"Id\":\"3a733002-9223-4bd7-b2a9-62fa359c4cbd\",\"Name\":\"Gabon\",\"ISOCode2\":\"GA\",\"ISOCode3\":\"GAB\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/3c864692-824c-4593-a739-d1309d4cd75e.json",
    "content": "{\"Id\":\"3c864692-824c-4593-a739-d1309d4cd75e\",\"Name\":\"Macedonia, The Former Yuslav Republic of\",\"ISOCode2\":\"MK\",\"ISOCode3\":\"MKD\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/3d3a06a0-0853-4d01-b273-af7b7cd7002c.json",
    "content": "{\"Id\":\"3d3a06a0-0853-4d01-b273-af7b7cd7002c\",\"Name\":\"Saint Lucia\",\"ISOCode2\":\"LC\",\"ISOCode3\":\"LCA\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/3e57398a-0006-4e48-8cb4-f9f143dfcf22.json",
    "content": "{\"Id\":\"3e57398a-0006-4e48-8cb4-f9f143dfcf22\",\"Name\":\"British Indian Ocean Territory\",\"ISOCode2\":\"IO\",\"ISOCode3\":\"IOT\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/3e747b23-543f-4ad0-80a9-5e421651f3b4.json",
    "content": "{\"Id\":\"3e747b23-543f-4ad0-80a9-5e421651f3b4\",\"Name\":\"Western Sahara\",\"ISOCode2\":\"EH\",\"ISOCode3\":\"ESH\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/3f677556-1c9c-4315-9cfc-210a54f1f41d.json",
    "content": "{\"Id\":\"3f677556-1c9c-4315-9cfc-210a54f1f41d\",\"Name\":\"Cook Islands\",\"ISOCode2\":\"CK\",\"ISOCode3\":\"COK\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/3fbd7371-510a-45b4-813a-88373d19a5a4.json",
    "content": "{\"Id\":\"3fbd7371-510a-45b4-813a-88373d19a5a4\",\"Name\":\"Slovenia\",\"ISOCode2\":\"SI\",\"ISOCode3\":\"SVN\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/4448e7b7-4e4d-4f19-b64d-e649d0f76cc1.json",
    "content": "{\"Id\":\"4448e7b7-4e4d-4f19-b64d-e649d0f76cc1\",\"Name\":\"Guinea\",\"ISOCode2\":\"GN\",\"ISOCode3\":\"GIN\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/44577b6a-6918-4508-ade4-b6c2adb25000.json",
    "content": "{\"Id\":\"44577b6a-6918-4508-ade4-b6c2adb25000\",\"Name\":\"Guatemala\",\"ISOCode2\":\"GT\",\"ISOCode3\":\"GTM\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/468dca85-484a-4529-8753-b26dbc316a71.json",
    "content": "{\"Id\":\"468dca85-484a-4529-8753-b26dbc316a71\",\"Name\":\"East Timor\",\"ISOCode2\":\"TP\",\"ISOCode3\":\"TMP\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/48cd745a-4c47-4282-b60a-cb4b4639c6ee.json",
    "content": "{\"Id\":\"48cd745a-4c47-4282-b60a-cb4b4639c6ee\",\"Name\":\"Guam\",\"ISOCode2\":\"GU\",\"ISOCode3\":\"GUM\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/48e5e925-6d98-4039-af6e-36d676059b85.json",
    "content": "{\"Id\":\"48e5e925-6d98-4039-af6e-36d676059b85\",\"Name\":\"Korea, Democratic Peoples Republic of\",\"ISOCode2\":\"KP\",\"ISOCode3\":\"PRK\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/4cc52ce2-0a6c-4564-8fe6-2eeb347a9429.json",
    "content": "{\"Id\":\"4cc52ce2-0a6c-4564-8fe6-2eeb347a9429\",\"Name\":\"Ethiopia\",\"ISOCode2\":\"ET\",\"ISOCode3\":\"ETH\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/4ce3df16-4d00-4f4d-a5d6-675020fa117d.json",
    "content": "{\"Id\":\"4ce3df16-4d00-4f4d-a5d6-675020fa117d\",\"Name\":\"Cocos (Keeling) Islands\",\"ISOCode2\":\"CC\",\"ISOCode3\":\"CCK\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/4dbe5363-aad6-4019-b445-472d6e1e49bd.json",
    "content": "{\"Id\":\"4dbe5363-aad6-4019-b445-472d6e1e49bd\",\"Name\":\"Somalia\",\"ISOCode2\":\"SO\",\"ISOCode3\":\"SOM\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/4dcd6ecf-af6c-4c76-95db-a0efac63f3de.json",
    "content": "{\"Id\":\"4dcd6ecf-af6c-4c76-95db-a0efac63f3de\",\"Name\":\"Greenland\",\"ISOCode2\":\"GL\",\"ISOCode3\":\"GRL\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/4e6d9507-9fb0-4290-80af-e98aabaccedb.json",
    "content": "{\"Id\":\"4e6d9507-9fb0-4290-80af-e98aabaccedb\",\"Name\":\"Lao Peoples Democratic Republic\",\"ISOCode2\":\"LA\",\"ISOCode3\":\"LAO\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/4eb5bcbe-13aa-45f0-afdf-77b379347509.json",
    "content": "{\"Id\":\"4eb5bcbe-13aa-45f0-afdf-77b379347509\",\"Name\":\"Norfolk Island\",\"ISOCode2\":\"NF\",\"ISOCode3\":\"NFK\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/4f660961-0aff-4539-9c0b-3bb2662b7a99.json",
    "content": "{\"Id\":\"4f660961-0aff-4539-9c0b-3bb2662b7a99\",\"Name\":\"France\",\"ISOCode2\":\"FR\",\"ISOCode3\":\"FRA\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/52316192-6328-4e45-a39c-37fc96cad138.json",
    "content": "{\"Id\":\"52316192-6328-4e45-a39c-37fc96cad138\",\"Name\":\"Nigeria\",\"ISOCode2\":\"NG\",\"ISOCode3\":\"NGA\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/54d227b4-1f3e-4f20-b16c-6428b77f5252.json",
    "content": "{\"Id\":\"54d227b4-1f3e-4f20-b16c-6428b77f5252\",\"Name\":\"Poland\",\"ISOCode2\":\"PL\",\"ISOCode3\":\"POL\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/574e1b06-4332-4a1c-9b30-5daf2cce6b10.json",
    "content": "{\"Id\":\"574e1b06-4332-4a1c-9b30-5daf2cce6b10\",\"Name\":\"Andorra\",\"ISOCode2\":\"AD\",\"ISOCode3\":\"AND\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/579fbee3-0be0-4884-b7c5-658c23c4e7d3.json",
    "content": "{\"Id\":\"579fbee3-0be0-4884-b7c5-658c23c4e7d3\",\"Name\":\"Antarctica\",\"ISOCode2\":\"AQ\",\"ISOCode3\":\"ATA\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/58c5c312-85d2-47a3-87a7-1549ec0ccd44.json",
    "content": "{\"Id\":\"58c5c312-85d2-47a3-87a7-1549ec0ccd44\",\"Name\":\"Liberia\",\"ISOCode2\":\"LR\",\"ISOCode3\":\"LBR\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/5aac5aa6-8bc0-4be5-a4de-76a5917dd2b2.json",
    "content": "{\"Id\":\"5aac5aa6-8bc0-4be5-a4de-76a5917dd2b2\",\"Name\":\"Bangladesh\",\"ISOCode2\":\"BD\",\"ISOCode3\":\"BGD\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/5c3d7f0e-1900-4d73-acf6-69459d70d616.json",
    "content": "{\"Id\":\"5c3d7f0e-1900-4d73-acf6-69459d70d616\",\"Name\":\"Nicaragua\",\"ISOCode2\":\"NI\",\"ISOCode3\":\"NIC\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/5dc77e2b-df39-475b-99da-c9756cabb5b6.json",
    "content": "{\"Id\":\"5dc77e2b-df39-475b-99da-c9756cabb5b6\",\"Name\":\"Anla\",\"ISOCode2\":\"AO\",\"ISOCode3\":\"A  \"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/5edc9ddf-242c-4533-9c38-cbf41709ef60.json",
    "content": "{\"Id\":\"5edc9ddf-242c-4533-9c38-cbf41709ef60\",\"Name\":\"El Salvador\",\"ISOCode2\":\"SV\",\"ISOCode3\":\"SLV\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/5f6df4ff-ef4b-43d9-98f5-d66ef9d27c67.json",
    "content": "{\"Id\":\"5f6df4ff-ef4b-43d9-98f5-d66ef9d27c67\",\"Name\":\"Macau\",\"ISOCode2\":\"MO\",\"ISOCode3\":\"MAC\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/60ce9ab1-945d-4fef-aba8-a1bb640165be.json",
    "content": "{\"Id\":\"60ce9ab1-945d-4fef-aba8-a1bb640165be\",\"Name\":\"Switzerland\",\"ISOCode2\":\"CH\",\"ISOCode3\":\"CHE\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/612c5585-4e93-4f4f-9735-ec9ab7f2aab9.json",
    "content": "{\"Id\":\"612c5585-4e93-4f4f-9735-ec9ab7f2aab9\",\"Name\":\"Thailand\",\"ISOCode2\":\"TH\",\"ISOCode3\":\"THA\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/61ef876b-9508-48e9-afbf-2d4386c38127.json",
    "content": "{\"Id\":\"61ef876b-9508-48e9-afbf-2d4386c38127\",\"Name\":\"Hungary\",\"ISOCode2\":\"HU\",\"ISOCode3\":\"HUN\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/63404c30-266d-47b6-beda-fd252283e4e5.json",
    "content": "{\"Id\":\"63404c30-266d-47b6-beda-fd252283e4e5\",\"Name\":\"Nepal\",\"ISOCode2\":\"NP\",\"ISOCode3\":\"NPL\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/63aecd7a-9b3f-4732-bf8c-1702ad3a49dc.json",
    "content": "{\"Id\":\"63aecd7a-9b3f-4732-bf8c-1702ad3a49dc\",\"Name\":\"Falkland Islands (Malvinas)\",\"ISOCode2\":\"FK\",\"ISOCode3\":\"FLK\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/65223343-756c-4083-a20f-cf3cf98efbdc.json",
    "content": "{\"Id\":\"65223343-756c-4083-a20f-cf3cf98efbdc\",\"Name\":\"Mayotte\",\"ISOCode2\":\"YT\",\"ISOCode3\":\"MYT\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/6599493d-ead6-41ce-ae9c-2a47ea74c1a8.json",
    "content": "{\"Id\":\"6599493d-ead6-41ce-ae9c-2a47ea74c1a8\",\"Name\":\"Honduras\",\"ISOCode2\":\"HN\",\"ISOCode3\":\"HND\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/666699cd-7460-44b1-afa9-adc363778ff4.json",
    "content": "{\"Id\":\"666699cd-7460-44b1-afa9-adc363778ff4\",\"Name\":\"Romania\",\"ISOCode2\":\"RO\",\"ISOCode3\":\"ROM\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/66c2bfb0-11c9-4191-8e91-1a0314726cc6.json",
    "content": "{\"Id\":\"66c2bfb0-11c9-4191-8e91-1a0314726cc6\",\"Name\":\"Dominican Republic\",\"ISOCode2\":\"DO\",\"ISOCode3\":\"DOM\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/66d1d01b-a1a5-4634-9c15-4cd382a44147.json",
    "content": "{\"Id\":\"66d1d01b-a1a5-4634-9c15-4cd382a44147\",\"Name\":\"Egypt\",\"ISOCode2\":\"EG\",\"ISOCode3\":\"EGY\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/66d7e3d5-f89c-42c5-82d5-9e6869ab9775.json",
    "content": "{\"Id\":\"66d7e3d5-f89c-42c5-82d5-9e6869ab9775\",\"Name\":\"Mauritius\",\"ISOCode2\":\"MU\",\"ISOCode3\":\"MUS\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/66f06c44-26ff-4015-b0ce-d241a39def8b.json",
    "content": "{\"Id\":\"66f06c44-26ff-4015-b0ce-d241a39def8b\",\"Name\":\"Papua New Guinea\",\"ISOCode2\":\"PG\",\"ISOCode3\":\"PNG\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/6717be36-81c1-4df3-a6f8-0f5eef45cec9.json",
    "content": "{\"Id\":\"6717be36-81c1-4df3-a6f8-0f5eef45cec9\",\"Name\":\"Puerto Rico\",\"ISOCode2\":\"PR\",\"ISOCode3\":\"PRI\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/67497e93-c793-4134-915e-e04f5adae5d0.json",
    "content": "{\"Id\":\"67497e93-c793-4134-915e-e04f5adae5d0\",\"Name\":\"Antigua and Barbuda\",\"ISOCode2\":\"AG\",\"ISOCode3\":\"ATG\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/68abefdb-27f4-4cb8-840c-afee8510c249.json",
    "content": "{\"Id\":\"68abefdb-27f4-4cb8-840c-afee8510c249\",\"Name\":\"Tunisia\",\"ISOCode2\":\"TN\",\"ISOCode3\":\"TUN\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/6f101294-0433-492b-99f7-d59105a9970b.json",
    "content": "{\"Id\":\"6f101294-0433-492b-99f7-d59105a9970b\",\"Name\":\"Senegal\",\"ISOCode2\":\"SN\",\"ISOCode3\":\"SEN\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/70a106ca-3a82-4e37-aea3-4a0bf8d50afa.json",
    "content": "{\"Id\":\"70a106ca-3a82-4e37-aea3-4a0bf8d50afa\",\"Name\":\"Namibia\",\"ISOCode2\":\"NA\",\"ISOCode3\":\"NAM\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/70e9ef51-b838-461b-a1d8-2b32ee49855b.json",
    "content": "{\"Id\":\"70e9ef51-b838-461b-a1d8-2b32ee49855b\",\"Name\":\"Chile\",\"ISOCode2\":\"CL\",\"ISOCode3\":\"CHL\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/72bbbb80-ea6c-43c9-8ccd-99d26290f560.json",
    "content": "{\"Id\":\"72bbbb80-ea6c-43c9-8ccd-99d26290f560\",\"Name\":\"Belgium\",\"ISOCode2\":\"BE\",\"ISOCode3\":\"BEL\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/73355d89-317a-43a5-8ebb-fa60dd738c5b.json",
    "content": "{\"Id\":\"73355d89-317a-43a5-8ebb-fa60dd738c5b\",\"Name\":\"South Africa\",\"ISOCode2\":\"ZA\",\"ISOCode3\":\"ZAF\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/7376c282-b5a3-4898-a342-c45f1c18b609.json",
    "content": "{\"Id\":\"7376c282-b5a3-4898-a342-c45f1c18b609\",\"Name\":\"New Zealand\",\"ISOCode2\":\"NZ\",\"ISOCode3\":\"NZL\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/73fbc893-331d-4e67-9753-ab988ac005c7.json",
    "content": "{\"Id\":\"73fbc893-331d-4e67-9753-ab988ac005c7\",\"Name\":\"Svalbard and Jan Mayen Islands\",\"ISOCode2\":\"SJ\",\"ISOCode3\":\"SJM\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/74dfb95b-515d-4561-938d-169ac3782280.json",
    "content": "{\"Id\":\"74dfb95b-515d-4561-938d-169ac3782280\",\"Name\":\"New Caledonia\",\"ISOCode2\":\"NC\",\"ISOCode3\":\"NCL\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/75f88974-01ac-47d7-bcee-6ce1f0c0d0fc.json",
    "content": "{\"Id\":\"75f88974-01ac-47d7-bcee-6ce1f0c0d0fc\",\"Name\":\"Trinidad and Toba\",\"ISOCode2\":\"TT\",\"ISOCode3\":\"TTO\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/7756aa70-f22a-4f42-b8f4-e56ca9746064.json",
    "content": "{\"Id\":\"7756aa70-f22a-4f42-b8f4-e56ca9746064\",\"Name\":\"Qatar\",\"ISOCode2\":\"QA\",\"ISOCode3\":\"QAT\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/776102b6-3d75-4570-8215-484367ea2a80.json",
    "content": "{\"Id\":\"776102b6-3d75-4570-8215-484367ea2a80\",\"Name\":\"Lesotho\",\"ISOCode2\":\"LS\",\"ISOCode3\":\"LSO\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/77bbfb67-9d1d-41f9-8626-b327aa90a584.json",
    "content": "{\"Id\":\"77bbfb67-9d1d-41f9-8626-b327aa90a584\",\"Name\":\"French Polynesia\",\"ISOCode2\":\"PF\",\"ISOCode3\":\"PYF\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/77dce560-3d53-4483-963e-37d5f72e219e.json",
    "content": "{\"Id\":\"77dce560-3d53-4483-963e-37d5f72e219e\",\"Name\":\"Tajikistan\",\"ISOCode2\":\"TJ\",\"ISOCode3\":\"TJK\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/78a78abb-31d9-4e2a-aea5-6744f27a6519.json",
    "content": "{\"Id\":\"78a78abb-31d9-4e2a-aea5-6744f27a6519\",\"Name\":\"Azerbaijan\",\"ISOCode2\":\"AZ\",\"ISOCode3\":\"AZE\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/7b3b0b11-b3cf-4e69-b4c2-c414bb7bd78d.json",
    "content": "{\"Id\":\"7b3b0b11-b3cf-4e69-b4c2-c414bb7bd78d\",\"Name\":\"Ecuador\",\"ISOCode2\":\"EC\",\"ISOCode3\":\"ECU\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/7b534a1e-e06d-4a2c-8ea6-85c128201834.json",
    "content": "{\"Id\":\"7b534a1e-e06d-4a2c-8ea6-85c128201834\",\"Name\":\"Latvia\",\"ISOCode2\":\"LV\",\"ISOCode3\":\"LVA\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/7c0ba316-c6d9-48dc-919e-76e0ee0cf0fb.json",
    "content": "{\"Id\":\"7c0ba316-c6d9-48dc-919e-76e0ee0cf0fb\",\"Name\":\"Rwanda\",\"ISOCode2\":\"RW\",\"ISOCode3\":\"RWA\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/7c2c1e29-9e58-45eb-b512-5894496cd4dd.json",
    "content": "{\"Id\":\"7c2c1e29-9e58-45eb-b512-5894496cd4dd\",\"Name\":\"Paraguay\",\"ISOCode2\":\"PY\",\"ISOCode3\":\"PRY\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/7e11e0dc-0a4e-4db9-9673-84600c8035c4.json",
    "content": "{\"Id\":\"7e11e0dc-0a4e-4db9-9673-84600c8035c4\",\"Name\":\"Ireland\",\"ISOCode2\":\"IE\",\"ISOCode3\":\"IRL\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/7e83ba7d-1c8f-465c-87d3-9bd86256031a.json",
    "content": "{\"Id\":\"7e83ba7d-1c8f-465c-87d3-9bd86256031a\",\"Name\":\"Cape Verde\",\"ISOCode2\":\"CV\",\"ISOCode3\":\"CPV\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/7f2e9d46-f5db-48bf-8e07-d6d12e77d857.json",
    "content": "{\"Id\":\"7f2e9d46-f5db-48bf-8e07-d6d12e77d857\",\"Name\":\"Reunion\",\"ISOCode2\":\"RE\",\"ISOCode3\":\"REU\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/7fe147d0-fd91-4119-83ad-4e7ebccdfd89.json",
    "content": "{\"Id\":\"7fe147d0-fd91-4119-83ad-4e7ebccdfd89\",\"Name\":\"United Arab Emirates\",\"ISOCode2\":\"AE\",\"ISOCode3\":\"ARE\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/83c5561e-e4be-40b0-ae56-28a371680af8.json",
    "content": "{\"Id\":\"83c5561e-e4be-40b0-ae56-28a371680af8\",\"Name\":\"Denmark\",\"ISOCode2\":\"DK\",\"ISOCode3\":\"DNK\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/844686ba-57c3-4c91-8b33-c1e1889a44c0.json",
    "content": "{\"Id\":\"844686ba-57c3-4c91-8b33-c1e1889a44c0\",\"Name\":\"Albania\",\"ISOCode2\":\"AL\",\"ISOCode3\":\"ALB\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/880f29a2-e51c-4016-ab18-ca09275673c3.json",
    "content": "{\"Id\":\"880f29a2-e51c-4016-ab18-ca09275673c3\",\"Name\":\"Guinea-bissau\",\"ISOCode2\":\"GW\",\"ISOCode3\":\"GNB\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/88592f8b-1d15-4aa0-9115-4a28b67e1753.json",
    "content": "{\"Id\":\"88592f8b-1d15-4aa0-9115-4a28b67e1753\",\"Name\":\"Lebanon\",\"ISOCode2\":\"LB\",\"ISOCode3\":\"LBN\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/8af11a89-1487-4b21-aabf-6af57ead8474.json",
    "content": "{\"Id\":\"8af11a89-1487-4b21-aabf-6af57ead8474\",\"Name\":\"Solomon Islands\",\"ISOCode2\":\"SB\",\"ISOCode3\":\"SLB\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/8c982139-3609-48d3-b145-b5ceb484c414.json",
    "content": "{\"Id\":\"8c982139-3609-48d3-b145-b5ceb484c414\",\"Name\":\"United States Minor Outlying Islands\",\"ISOCode2\":\"UM\",\"ISOCode3\":\"UMI\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/8c9d27f2-fe77-4653-9696-b046d6536bfa.json",
    "content": "{\"Id\":\"8c9d27f2-fe77-4653-9696-b046d6536bfa\",\"Name\":\"Netherlands Antilles\",\"ISOCode2\":\"AN\",\"ISOCode3\":\"ANT\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/8f5124fa-cb2a-4cc9-87bb-bc155dc9791a.json",
    "content": "{\"Id\":\"8f5124fa-cb2a-4cc9-87bb-bc155dc9791a\",\"Name\":\"Gambia\",\"ISOCode2\":\"GM\",\"ISOCode3\":\"GMB\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/8fe152e5-b58c-4d3c-b143-358d5c54ba06.json",
    "content": "{\"Id\":\"8fe152e5-b58c-4d3c-b143-358d5c54ba06\",\"Name\":\"Ukraine\",\"ISOCode2\":\"UA\",\"ISOCode3\":\"UKR\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/90255d75-af44-4b5d-bcfd-77cd27dce782.json",
    "content": "{\"Id\":\"90255d75-af44-4b5d-bcfd-77cd27dce782\",\"Name\":\"Madagascar\",\"ISOCode2\":\"MG\",\"ISOCode3\":\"MDG\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/90684e6e-2b34-4f18-bbd1-f610f76179b7.json",
    "content": "{\"Id\":\"90684e6e-2b34-4f18-bbd1-f610f76179b7\",\"Name\":\"Malta\",\"ISOCode2\":\"MT\",\"ISOCode3\":\"MLT\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/9151aaf1-a75b-4a2c-bf2b-c823e2586db2.json",
    "content": "{\"Id\":\"9151aaf1-a75b-4a2c-bf2b-c823e2586db2\",\"Name\":\"Fiji\",\"ISOCode2\":\"FJ\",\"ISOCode3\":\"FJI\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/92a52065-32b0-42c6-a0aa-e8b8a341f79c.json",
    "content": "{\"Id\":\"92a52065-32b0-42c6-a0aa-e8b8a341f79c\",\"Name\":\"Guyana\",\"ISOCode2\":\"GY\",\"ISOCode3\":\"GUY\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/931ee133-2b60-4b82-8889-7c9855ca030a.json",
    "content": "{\"Id\":\"931ee133-2b60-4b82-8889-7c9855ca030a\",\"Name\":\"Kazakhstan\",\"ISOCode2\":\"KZ\",\"ISOCode3\":\"KAZ\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/96dbb697-3d7e-49bf-ac9b-0ea5cc014a6f.json",
    "content": "{\"Id\":\"96dbb697-3d7e-49bf-ac9b-0ea5cc014a6f\",\"Name\":\"Niue\",\"ISOCode2\":\"NU\",\"ISOCode3\":\"NIU\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/972b8208-c88d-47bb-9e79-1574fab34dfb.json",
    "content": "{\"Id\":\"972b8208-c88d-47bb-9e79-1574fab34dfb\",\"Name\":\"San Marino\",\"ISOCode2\":\"SM\",\"ISOCode3\":\"SMR\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/99c347f1-1427-4d41-bc12-945d38f92a94.json",
    "content": "{\"Id\":\"99c347f1-1427-4d41-bc12-945d38f92a94\",\"Name\":\"Lithuania\",\"ISOCode2\":\"LT\",\"ISOCode3\":\"LTU\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/99f791e7-7343-42e8-8c19-3c41068b5f8d.json",
    "content": "{\"Id\":\"99f791e7-7343-42e8-8c19-3c41068b5f8d\",\"Name\":\"Viet Nam\",\"ISOCode2\":\"VN\",\"ISOCode3\":\"VNM\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/9ab1ee28-b81f-4b89-ae6b-3c6e5322e269.json",
    "content": "{\"Id\":\"9ab1ee28-b81f-4b89-ae6b-3c6e5322e269\",\"Name\":\"Jamaica\",\"ISOCode2\":\"JM\",\"ISOCode3\":\"JAM\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/9b5a87f8-f024-4b76-b230-95913e474b57.json",
    "content": "{\"Id\":\"9b5a87f8-f024-4b76-b230-95913e474b57\",\"Name\":\"Yemen\",\"ISOCode2\":\"YE\",\"ISOCode3\":\"YEM\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/9c035e40-a5dc-406b-a83a-559f940eb355.json",
    "content": "{\"Id\":\"9c035e40-a5dc-406b-a83a-559f940eb355\",\"Name\":\"Cyprus\",\"ISOCode2\":\"CY\",\"ISOCode3\":\"CYP\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/9ca410f0-eb75-4105-90a1-09fc8d2873b8.json",
    "content": "{\"Id\":\"9ca410f0-eb75-4105-90a1-09fc8d2873b8\",\"Name\":\"France, Metropolitan\",\"ISOCode2\":\"FX\",\"ISOCode3\":\"FXX\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/9d2c4779-1608-4d2a-b157-f5c4bb334eed.json",
    "content": "{\"Id\":\"9d2c4779-1608-4d2a-b157-f5c4bb334eed\",\"Name\":\"French Guiana\",\"ISOCode2\":\"GF\",\"ISOCode3\":\"GUF\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/9dcf0a16-db7f-4b63-bad7-30f80bcd9901.json",
    "content": "{\"Id\":\"9dcf0a16-db7f-4b63-bad7-30f80bcd9901\",\"Name\":\"Philippines\",\"ISOCode2\":\"PH\",\"ISOCode3\":\"PHL\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/9f9ac0e3-f689-4e98-b1bb-0f5f01f20fad.json",
    "content": "{\"Id\":\"9f9ac0e3-f689-4e98-b1bb-0f5f01f20fad\",\"Name\":\"Russian Federation\",\"ISOCode2\":\"RU\",\"ISOCode3\":\"RUS\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/a141ab0d-7e2c-48b1-9963-ba8685bcdfe3.json",
    "content": "{\"Id\":\"a141ab0d-7e2c-48b1-9963-ba8685bcdfe3\",\"Name\":\"Slovakia (Slovak Republic)\",\"ISOCode2\":\"SK\",\"ISOCode3\":\"SVK\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/a4f1d01a-ebfc-4bd3-9521-be6d73f79fac.json",
    "content": "{\"Id\":\"a4f1d01a-ebfc-4bd3-9521-be6d73f79fac\",\"Name\":\"Luxembourg\",\"ISOCode2\":\"LU\",\"ISOCode3\":\"LUX\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/a566ac8d-4a81-4a11-9cfb-979517440ce2.json",
    "content": "{\"Id\":\"a566ac8d-4a81-4a11-9cfb-979517440ce2\",\"Name\":\"Iran (Islamic Republic of)\",\"ISOCode2\":\"IR\",\"ISOCode3\":\"IRN\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/a642097b-cc0a-430d-9425-9f8385fc6aa4.json",
    "content": "{\"Id\":\"a642097b-cc0a-430d-9425-9f8385fc6aa4\",\"Name\":\"Italy\",\"ISOCode2\":\"IT\",\"ISOCode3\":\"ITA\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/a71d6727-61e7-4282-9fcb-526d1e7bc24f.json",
    "content": "{\"Id\":\"a71d6727-61e7-4282-9fcb-526d1e7bc24f\",\"Name\":\"United States\",\"ISOCode2\":\"US\",\"ISOCode3\":\"USA\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/aa393972-1604-47d2-a533-81b41199ccf0.json",
    "content": "{\"Id\":\"aa393972-1604-47d2-a533-81b41199ccf0\",\"Name\":\"Djibouti\",\"ISOCode2\":\"DJ\",\"ISOCode3\":\"DJI\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/aae223c8-6330-4641-b12b-f231866de4c6.json",
    "content": "{\"Id\":\"aae223c8-6330-4641-b12b-f231866de4c6\",\"Name\":\"Anguilla\",\"ISOCode2\":\"AI\",\"ISOCode3\":\"AIA\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/ae094b3e-a8b8-4e29-9853-3bd464efd247.json",
    "content": "{\"Id\":\"ae094b3e-a8b8-4e29-9853-3bd464efd247\",\"Name\":\"Monaco\",\"ISOCode2\":\"MC\",\"ISOCode3\":\"MCO\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/aea2f438-77bc-43f5-84fc-c781141a1d47.json",
    "content": "{\"Id\":\"aea2f438-77bc-43f5-84fc-c781141a1d47\",\"Name\":\"Sao Tome and Principe\",\"ISOCode2\":\"ST\",\"ISOCode3\":\"STP\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/aebd8175-fffe-4ee2-b208-c0bbbd049664.json",
    "content": "{\"Id\":\"aebd8175-fffe-4ee2-b208-c0bbbd049664\",\"Name\":\"Uruguay\",\"ISOCode2\":\"UY\",\"ISOCode3\":\"URY\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/b0fc7899-9c6f-4b80-838f-692a7a0aa83b.json",
    "content": "{\"Id\":\"b0fc7899-9c6f-4b80-838f-692a7a0aa83b\",\"Name\":\"Oman\",\"ISOCode2\":\"OM\",\"ISOCode3\":\"OMN\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/b10c1efc-5341-4ec4-be12-a70dbb1c41cc.json",
    "content": "{\"Id\":\"b10c1efc-5341-4ec4-be12-a70dbb1c41cc\",\"Name\":\"Liechtenstein\",\"ISOCode2\":\"LI\",\"ISOCode3\":\"LIE\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/b14e1447-0bca-4dd5-87e1-60c0b5d2988b.json",
    "content": "{\"Id\":\"b14e1447-0bca-4dd5-87e1-60c0b5d2988b\",\"Name\":\"Saudi Arabia\",\"ISOCode2\":\"SA\",\"ISOCode3\":\"SAU\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/b225d445-6884-4232-97e4-b33499982104.json",
    "content": "{\"Id\":\"b225d445-6884-4232-97e4-b33499982104\",\"Name\":\"Northern Mariana Islands\",\"ISOCode2\":\"MP\",\"ISOCode3\":\"MNP\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/b32a6fe3-f534-4c42-bd2d-8e2307476ba2.json",
    "content": "{\"Id\":\"b32a6fe3-f534-4c42-bd2d-8e2307476ba2\",\"Name\":\"Mozambique\",\"ISOCode2\":\"MZ\",\"ISOCode3\":\"MOZ\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/b3732bd9-c3d6-4861-8dbe-eb2884557f34.json",
    "content": "{\"Id\":\"b3732bd9-c3d6-4861-8dbe-eb2884557f34\",\"Name\":\"Vanuatu\",\"ISOCode2\":\"VU\",\"ISOCode3\":\"VUT\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/b47e2eec-62a0-440c-9f20-af9c5c75d57b.json",
    "content": "{\"Id\":\"b47e2eec-62a0-440c-9f20-af9c5c75d57b\",\"Name\":\"Greece\",\"ISOCode2\":\"GR\",\"ISOCode3\":\"GRC\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/b4a3405b-1293-4e98-9b11-777f666b25d4.json",
    "content": "{\"Id\":\"b4a3405b-1293-4e98-9b11-777f666b25d4\",\"Name\":\"Bahamas\",\"ISOCode2\":\"BS\",\"ISOCode3\":\"BHS\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/b50f640f-0ae9-4d63-acb2-2abd94b6271b.json",
    "content": "{\"Id\":\"b50f640f-0ae9-4d63-acb2-2abd94b6271b\",\"Name\":\"Gibraltar\",\"ISOCode2\":\"GI\",\"ISOCode3\":\"GIB\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/b5133b5b-1687-447a-b88a-ef21f7599eda.json",
    "content": "{\"Id\":\"b5133b5b-1687-447a-b88a-ef21f7599eda\",\"Name\":\"Argentina\",\"ISOCode2\":\"AR\",\"ISOCode3\":\"ARG\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/b5946ea8-b8a8-45b9-827d-86fa13e034cd.json",
    "content": "{\"Id\":\"b5946ea8-b8a8-45b9-827d-86fa13e034cd\",\"Name\":\"Hong Kong\",\"ISOCode2\":\"HK\",\"ISOCode3\":\"HKG\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/b5ee8da7-5cc3-44f3-bd63-094cb93b4674.json",
    "content": "{\"Id\":\"b5ee8da7-5cc3-44f3-bd63-094cb93b4674\",\"Name\":\"Uzbekistan\",\"ISOCode2\":\"UZ\",\"ISOCode3\":\"UZB\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/b85aa3d6-d923-438c-aad7-2063f6bfbd3c.json",
    "content": "{\"Id\":\"b85aa3d6-d923-438c-aad7-2063f6bfbd3c\",\"Name\":\"Nauru\",\"ISOCode2\":\"NR\",\"ISOCode3\":\"NRU\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/baf7d87c-f09b-42cc-becd-49c2b3426226.json",
    "content": "{\"Id\":\"baf7d87c-f09b-42cc-becd-49c2b3426226\",\"Name\":\"Tanzania, United Republic of\",\"ISOCode2\":\"TZ\",\"ISOCode3\":\"TZA\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/bb176526-f5c6-4871-9e75-cfeef799ad48.json",
    "content": "{\"Id\":\"bb176526-f5c6-4871-9e75-cfeef799ad48\",\"Name\":\"Tuvalu\",\"ISOCode2\":\"TV\",\"ISOCode3\":\"TUV\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/bbaaa327-f8cc-43ae-8b0e-fc054eeda968.json",
    "content": "{\"Id\":\"bbaaa327-f8cc-43ae-8b0e-fc054eeda968\",\"Name\":\"Tonga\",\"ISOCode2\":\"TO\",\"ISOCode3\":\"TON\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/bd2c67c0-26a4-46d5-b58a-f26dcfa8f34b.json",
    "content": "{\"Id\":\"bd2c67c0-26a4-46d5-b58a-f26dcfa8f34b\",\"Name\":\"Taiwan\",\"ISOCode2\":\"TW\",\"ISOCode3\":\"TWN\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/bdb52e20-8f5c-4a6c-a8d5-2b4dc060cc13.json",
    "content": "{\"Id\":\"bdb52e20-8f5c-4a6c-a8d5-2b4dc060cc13\",\"Name\":\"Heard and Mc Donald Islands\",\"ISOCode2\":\"HM\",\"ISOCode3\":\"HMD\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/bec3af5b-d2d4-4dfb-aca5-cf87059469d4.json",
    "content": "{\"Id\":\"bec3af5b-d2d4-4dfb-aca5-cf87059469d4\",\"Name\":\"Algerian\",\"ISOCode2\":\"DZ\",\"ISOCode3\":\"DZA\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/bf3b8cd7-679e-4546-81fc-85652653fe8f.json",
    "content": "{\"Id\":\"bf3b8cd7-679e-4546-81fc-85652653fe8f\",\"Name\":\"Saint Kitts and Nevis\",\"ISOCode2\":\"KN\",\"ISOCode3\":\"KNA\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/c03527d6-1936-4fdb-ab72-93ae7cb571ed.json",
    "content": "{\"Id\":\"c03527d6-1936-4fdb-ab72-93ae7cb571ed\",\"Name\":\"Kuwait\",\"ISOCode2\":\"KW\",\"ISOCode3\":\"KWT\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/c046ca0b-6dd9-459c-bf76-bd024363aaac.json",
    "content": "{\"Id\":\"c046ca0b-6dd9-459c-bf76-bd024363aaac\",\"Name\":\"Pakistan\",\"ISOCode2\":\"PK\",\"ISOCode3\":\"PAK\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/c10d2e3a-af21-4bad-9b18-fbf3fb659eae.json",
    "content": "{\"Id\":\"c10d2e3a-af21-4bad-9b18-fbf3fb659eae\",\"Name\":\"Bahrain\",\"ISOCode2\":\"BH\",\"ISOCode3\":\"BHR\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/c1ec594f-4b56-436d-aa28-ce3004de2803.json",
    "content": "{\"Id\":\"c1ec594f-4b56-436d-aa28-ce3004de2803\",\"Name\":\"Bhutan\",\"ISOCode2\":\"BT\",\"ISOCode3\":\"BTN\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/c1f503a3-c6b4-4eee-9fea-1f656f3b0825.json",
    "content": "{\"Id\":\"c1f503a3-c6b4-4eee-9fea-1f656f3b0825\",\"Name\":\"Kiribati\",\"ISOCode2\":\"KI\",\"ISOCode3\":\"KIR\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/c23969d4-e195-4e53-bf7e-d3d041184325.json",
    "content": "{\"Id\":\"c23969d4-e195-4e53-bf7e-d3d041184325\",\"Name\":\"China\",\"ISOCode2\":\"CN\",\"ISOCode3\":\"CHN\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/c43b2a01-933b-4021-896f-fcd27f3820da.json",
    "content": "{\"Id\":\"c43b2a01-933b-4021-896f-fcd27f3820da\",\"Name\":\"India\",\"ISOCode2\":\"IN\",\"ISOCode3\":\"IND\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/c47bf5ea-dfe4-4c9f-8bbc-067bd15fa6d2.json",
    "content": "{\"Id\":\"c47bf5ea-dfe4-4c9f-8bbc-067bd15fa6d2\",\"Name\":\"Kenya\",\"ISOCode2\":\"KE\",\"ISOCode3\":\"KEN\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/c63d51d8-b319-4a48-a6f1-81671b28ef07.json",
    "content": "{\"Id\":\"c63d51d8-b319-4a48-a6f1-81671b28ef07\",\"Name\":\"Bouvet Island\",\"ISOCode2\":\"BV\",\"ISOCode3\":\"BVT\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/c7c9f73a-f4be-4c59-9278-524d6069d9dc.json",
    "content": "{\"Id\":\"c7c9f73a-f4be-4c59-9278-524d6069d9dc\",\"Name\":\"Colombia\",\"ISOCode2\":\"CO\",\"ISOCode3\":\"COL\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/c87d4cae-84ee-4336-bc57-69c4ea33a6bc.json",
    "content": "{\"Id\":\"c87d4cae-84ee-4336-bc57-69c4ea33a6bc\",\"Name\":\"Syrian Arab Republic\",\"ISOCode2\":\"SY\",\"ISOCode3\":\"SYR\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/cd85035d-3901-4d07-a254-90750cd57c90.json",
    "content": "{\"Id\":\"cd85035d-3901-4d07-a254-90750cd57c90\",\"Name\":\"Georgia\",\"ISOCode2\":\"GE\",\"ISOCode3\":\"GEO\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/cda35e7b-29b0-4d34-b925-bf753d16af7e.json",
    "content": "{\"Id\":\"cda35e7b-29b0-4d34-b925-bf753d16af7e\",\"Name\":\"South Georgia and the South Sandwich Islands\",\"ISOCode2\":\"GS\",\"ISOCode3\":\"SGS\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/ce737f29-05a4-4a9a-b5dc-f1876f409334.json",
    "content": "{\"Id\":\"ce737f29-05a4-4a9a-b5dc-f1876f409334\",\"Name\":\"Haiti\",\"ISOCode2\":\"HT\",\"ISOCode3\":\"HTI\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/d42bd5b7-9f7e-4cb2-a295-e37471cdb1c2.json",
    "content": "{\"Id\":\"d42bd5b7-9f7e-4cb2-a295-e37471cdb1c2\",\"Name\":\"Virgin Islands (British)\",\"ISOCode2\":\"VG\",\"ISOCode3\":\"VGB\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/d61f7a82-85c5-45e1-a23c-60edae497459.json",
    "content": "{\"Id\":\"d61f7a82-85c5-45e1-a23c-60edae497459\",\"Name\":\"Belarus\",\"ISOCode2\":\"BY\",\"ISOCode3\":\"BLR\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/d7a96dd1-66f4-49b4-9085-53a12facac98.json",
    "content": "{\"Id\":\"d7a96dd1-66f4-49b4-9085-53a12facac98\",\"Name\":\"Burundi\",\"ISOCode2\":\"BI\",\"ISOCode3\":\"BDI\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/d9510667-ae8b-4066-811c-08c6834efadf.json",
    "content": "{\"Id\":\"d9510667-ae8b-4066-811c-08c6834efadf\",\"Name\":\"Uganda\",\"ISOCode2\":\"UG\",\"ISOCode3\":\"UGA\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/da19b4e1-dfea-43c9-ad8b-19e7036f0da4.json",
    "content": "{\"Id\":\"da19b4e1-dfea-43c9-ad8b-19e7036f0da4\",\"Name\":\"Turks and Caicos Islands\",\"ISOCode2\":\"TC\",\"ISOCode3\":\"TCA\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/da8e07c2-7b3d-46af-bcc5-fef0a68b11d1.json",
    "content": "{\"Id\":\"da8e07c2-7b3d-46af-bcc5-fef0a68b11d1\",\"Name\":\"Turkey\",\"ISOCode2\":\"TR\",\"ISOCode3\":\"TUR\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/dac6366f-295f-4ddc-b08c-5a521c70774d.json",
    "content": "{\"Id\":\"dac6366f-295f-4ddc-b08c-5a521c70774d\",\"Name\":\"Martinique\",\"ISOCode2\":\"MQ\",\"ISOCode3\":\"MTQ\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/dd3d7458-318b-4c6b-891c-766a6d7ac265.json",
    "content": "{\"Id\":\"dd3d7458-318b-4c6b-891c-766a6d7ac265\",\"Name\":\"Dominica\",\"ISOCode2\":\"DM\",\"ISOCode3\":\"DMA\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/e0274040-ef54-4b6e-b572-af65a948d8c4.json",
    "content": "{\"Id\":\"e0274040-ef54-4b6e-b572-af65a948d8c4\",\"Name\":\"Wallis and Futuna Islands\",\"ISOCode2\":\"WF\",\"ISOCode3\":\"WLF\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/e04ed9c1-face-4ee6-bade-7e522c0d210e.json",
    "content": "{\"Id\":\"e04ed9c1-face-4ee6-bade-7e522c0d210e\",\"Name\":\"Brunei Darussalam\",\"ISOCode2\":\"BN\",\"ISOCode3\":\"BRN\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/e1aa65e1-d524-48ba-91ef-39570b9984d7.json",
    "content": "{\"Id\":\"e1aa65e1-d524-48ba-91ef-39570b9984d7\",\"Name\":\"Aruba\",\"ISOCode2\":\"AW\",\"ISOCode3\":\"ABW\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/e399424a-a86a-4c61-b92b-450106831b4c.json",
    "content": "{\"Id\":\"e399424a-a86a-4c61-b92b-450106831b4c\",\"Name\":\"French Southern Territories\",\"ISOCode2\":\"TF\",\"ISOCode3\":\"ATF\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/e55c6a3a-a5e9-4575-b24f-6da0fd4115cd.json",
    "content": "{\"Id\":\"e55c6a3a-a5e9-4575-b24f-6da0fd4115cd\",\"Name\":\"Norway\",\"ISOCode2\":\"NO\",\"ISOCode3\":\"NOR\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/e6471bf0-4692-4b7a-b104-94b12b30a284.json",
    "content": "{\"Id\":\"e6471bf0-4692-4b7a-b104-94b12b30a284\",\"Name\":\"Turkmenistan\",\"ISOCode2\":\"TM\",\"ISOCode3\":\"TKM\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/e691ac69-a14d-4cca-86ed-82978614283e.json",
    "content": "{\"Id\":\"e691ac69-a14d-4cca-86ed-82978614283e\",\"Name\":\"Costa Rica\",\"ISOCode2\":\"CR\",\"ISOCode3\":\"CRI\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/e82e9dc1-7d00-47c0-9476-10eaf259967d.json",
    "content": "{\"Id\":\"e82e9dc1-7d00-47c0-9476-10eaf259967d\",\"Name\":\"Bermuda\",\"ISOCode2\":\"BM\",\"ISOCode3\":\"BMU\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/e8f03eaa-ddd2-4ff2-8b66-da69ff074ccd.json",
    "content": "{\"Id\":\"e8f03eaa-ddd2-4ff2-8b66-da69ff074ccd\",\"Name\":\"Mauritania\",\"ISOCode2\":\"MR\",\"ISOCode3\":\"MRT\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/eadabf25-0fa0-4e8e-aa1e-26d02eb70653.json",
    "content": "{\"Id\":\"eadabf25-0fa0-4e8e-aa1e-26d02eb70653\",\"Name\":\"Faroe Islands\",\"ISOCode2\":\"FO\",\"ISOCode3\":\"FRO\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/eafeb25d-265a-4899-be24-bb0f4bf64480.json",
    "content": "{\"Id\":\"eafeb25d-265a-4899-be24-bb0f4bf64480\",\"Name\":\"Cambodia\",\"ISOCode2\":\"KH\",\"ISOCode3\":\"KHM\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/eb692475-f7af-402f-bb0d-cd420f670b88.json",
    "content": "{\"Id\":\"eb692475-f7af-402f-bb0d-cd420f670b88\",\"Name\":\"Niger\",\"ISOCode2\":\"NE\",\"ISOCode3\":\"NER\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/ec0d252b-7ba6-4ac4-ad41-6158a10e9ccf.json",
    "content": "{\"Id\":\"ec0d252b-7ba6-4ac4-ad41-6158a10e9ccf\",\"Name\":\"Finland\",\"ISOCode2\":\"FI\",\"ISOCode3\":\"FIN\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/ec4d278f-0d96-478f-b023-0fdc7520c56c.json",
    "content": "{\"Id\":\"ec4d278f-0d96-478f-b023-0fdc7520c56c\",\"Name\":\"Iraq\",\"ISOCode2\":\"IQ\",\"ISOCode3\":\"IRQ\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/f015e45e-d93a-4d3a-a010-648ca65b47be.json",
    "content": "{\"Id\":\"f015e45e-d93a-4d3a-a010-648ca65b47be\",\"Name\":\"Venezuela\",\"ISOCode2\":\"VE\",\"ISOCode3\":\"VEN\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/f2f258d7-b650-45f9-a0e1-58687c08f4e4.json",
    "content": "{\"Id\":\"f2f258d7-b650-45f9-a0e1-58687c08f4e4\",\"Name\":\"Suriname\",\"ISOCode2\":\"SR\",\"ISOCode3\":\"SUR\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/f321b513-8164-4882-bae0-f3657a1a98fb.json",
    "content": "{\"Id\":\"f321b513-8164-4882-bae0-f3657a1a98fb\",\"Name\":\"Micronesia, Federated States of\",\"ISOCode2\":\"FM\",\"ISOCode3\":\"FSM\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/f3418c04-e3a8-4826-a41f-dcdbb5e4613e.json",
    "content": "{\"Id\":\"f3418c04-e3a8-4826-a41f-dcdbb5e4613e\",\"Name\":\"Monlia\",\"ISOCode2\":\"MN\",\"ISOCode3\":\"MNG\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/f3b7f86f-3165-4430-b263-87e1222b5bb1.json",
    "content": "{\"Id\":\"f3b7f86f-3165-4430-b263-87e1222b5bb1\",\"Name\":\"Croatia\",\"ISOCode2\":\"HR\",\"ISOCode3\":\"HRV\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/f5548ac2-958f-4b3d-8669-38b58735c517.json",
    "content": "{\"Id\":\"f5548ac2-958f-4b3d-8669-38b58735c517\",\"Name\":\"Belize\",\"ISOCode2\":\"BZ\",\"ISOCode3\":\"BLZ\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/f63ce832-2c8d-4c43-a4d8-134fc4311098.json",
    "content": "{\"Id\":\"f63ce832-2c8d-4c43-a4d8-134fc4311098\",\"Name\":\"Guadeloupe\",\"ISOCode2\":\"GP\",\"ISOCode3\":\"GLP\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/f6e6e602-468a-4dd7-ace4-3da5fefc165a.json",
    "content": "{\"Id\":\"f6e6e602-468a-4dd7-ace4-3da5fefc165a\",\"Name\":\"St. Pierre and Miquelon\",\"ISOCode2\":\"PM\",\"ISOCode3\":\"SPM\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/f74a81fa-3d6a-415c-88fd-5458ed8c45c2.json",
    "content": "{\"Id\":\"f74a81fa-3d6a-415c-88fd-5458ed8c45c2\",\"Name\":\"Japan\",\"ISOCode2\":\"JP\",\"ISOCode3\":\"JPN\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/f909c4c1-5fa9-4188-b848-ecd37e3dbf64.json",
    "content": "{\"Id\":\"f909c4c1-5fa9-4188-b848-ecd37e3dbf64\",\"Name\":\"Cuba\",\"ISOCode2\":\"CU\",\"ISOCode3\":\"CUB\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/f95a5bb1-59a5-4125-b803-a278b13b3d3b.json",
    "content": "{\"Id\":\"f95a5bb1-59a5-4125-b803-a278b13b3d3b\",\"Name\":\"Zambia\",\"ISOCode2\":\"ZM\",\"ISOCode3\":\"ZMB\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/f9c72583-e1f8-4f13-bfb5-ddf68bcd656a.json",
    "content": "{\"Id\":\"f9c72583-e1f8-4f13-bfb5-ddf68bcd656a\",\"Name\":\"Christmas Island\",\"ISOCode2\":\"CX\",\"ISOCode3\":\"CXR\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/fa26ae74-5404-4aaf-bd54-9b78266ccf03.json",
    "content": "{\"Id\":\"fa26ae74-5404-4aaf-bd54-9b78266ccf03\",\"Name\":\"Portugal\",\"ISOCode2\":\"PT\",\"ISOCode3\":\"PRT\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/fbea6604-4e57-46b6-a3f2-e5de8514c7b0.json",
    "content": "{\"Id\":\"fbea6604-4e57-46b6-a3f2-e5de8514c7b0\",\"Name\":\"Vatican City State (Holy See)\",\"ISOCode2\":\"VA\",\"ISOCode3\":\"VAT\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/fbff9784-d58c-4c86-a7f2-2f8ce68d10e7.json",
    "content": "{\"Id\":\"fbff9784-d58c-4c86-a7f2-2f8ce68d10e7\",\"Name\":\"Mali\",\"ISOCode2\":\"ML\",\"ISOCode3\":\"MLI\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/fd70fe71-1429-4c6e-b399-90318ed9ddcb.json",
    "content": "{\"Id\":\"fd70fe71-1429-4c6e-b399-90318ed9ddcb\",\"Name\":\"Bulgaria\",\"ISOCode2\":\"BG\",\"ISOCode3\":\"BGR\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/fdc8539a-82a7-4d29-bd5c-67fb9769a5ac.json",
    "content": "{\"Id\":\"fdc8539a-82a7-4d29-bd5c-67fb9769a5ac\",\"Name\":\"Ghana\",\"ISOCode2\":\"GH\",\"ISOCode3\":\"GHA\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geocountry/fe0e585e-fc54-4fa2-80c0-6fbfe5397e8c.json",
    "content": "{\"Id\":\"fe0e585e-fc54-4fa2-80c0-6fbfe5397e8c\",\"Name\":\"Israel\",\"ISOCode2\":\"IL\",\"ISOCode3\":\"ISR\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/01ee03b8-3ea2-4de4-8656-ec10138f95ea.json",
    "content": "{\"Id\":\"01ee03b8-3ea2-4de4-8656-ec10138f95ea\",\"CountryId\":\"1fcc4a89-0e8f-4fa2-b8d0-4ff5ec2277df\",\"Name\":\"Nottinghamshire, England\",\"Code\":\"NTT\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/02be94a5-3c10-4f83-858b-812796e714ae.json",
    "content": "{\"Id\":\"02be94a5-3c10-4f83-858b-812796e714ae\",\"CountryId\":\"a71d6727-61e7-4282-9fcb-526d1e7bc24f\",\"Name\":\"Minnesota\",\"Code\":\"MN\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/02c10c0f-3f09-4d0a-a6ef-ad40ae0a007b.json",
    "content": "{\"Id\":\"02c10c0f-3f09-4d0a-a6ef-ad40ae0a007b\",\"CountryId\":\"2d5b53a8-8341-4da4-a296-e516fe5bb953\",\"Name\":\"Sachsen-Anhalt\",\"Code\":\"SAC\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/043a0d4a-f1f5-430d-906d-ebd3d219485f.json",
    "content": "{\"Id\":\"043a0d4a-f1f5-430d-906d-ebd3d219485f\",\"CountryId\":\"1fcc4a89-0e8f-4fa2-b8d0-4ff5ec2277df\",\"Name\":\"Humberside, England\",\"Code\":\"HUM\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/04e066be-2254-44c5-ab1f-41afe5267ce3.json",
    "content": "{\"Id\":\"04e066be-2254-44c5-ab1f-41afe5267ce3\",\"CountryId\":\"1fcc4a89-0e8f-4fa2-b8d0-4ff5ec2277df\",\"Name\":\"Flintshire, Wales\",\"Code\":\"FLN\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/053fab61-2eff-446b-a29b-e9be91e195c9.json",
    "content": "{\"Id\":\"053fab61-2eff-446b-a29b-e9be91e195c9\",\"CountryId\":\"60ce9ab1-945d-4fef-aba8-a1bb640165be\",\"Name\":\"Jura\",\"Code\":\"JU\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/05963d51-677f-4f3b-b210-5103a1036506.json",
    "content": "{\"Id\":\"05963d51-677f-4f3b-b210-5103a1036506\",\"CountryId\":\"1fcc4a89-0e8f-4fa2-b8d0-4ff5ec2277df\",\"Name\":\"Wiltshire, England\",\"Code\":\"WIL\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/05974280-a62d-4fc3-be15-f16ab9e0f2d1.json",
    "content": "{\"Id\":\"05974280-a62d-4fc3-be15-f16ab9e0f2d1\",\"CountryId\":\"2d5b53a8-8341-4da4-a296-e516fe5bb953\",\"Name\":\"Sachsen\",\"Code\":\"SAS\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/070dd166-bdc9-4732-8da0-48bd318d3d9e.json",
    "content": "{\"Id\":\"070dd166-bdc9-4732-8da0-48bd318d3d9e\",\"CountryId\":\"38dc01c3-48d8-4ff8-a78a-2c35d4fbfa7b\",\"Name\":\"Avila\",\"Code\":\"Avila\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/076814fc-7422-40d5-80e0-b6978589ccdc.json",
    "content": "{\"Id\":\"076814fc-7422-40d5-80e0-b6978589ccdc\",\"CountryId\":\"60ce9ab1-945d-4fef-aba8-a1bb640165be\",\"Name\":\"Schaffhausen\",\"Code\":\"SH\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/07c1030f-fa7e-4b1c-ba21-c6acd092b676.json",
    "content": "{\"Id\":\"07c1030f-fa7e-4b1c-ba21-c6acd092b676\",\"CountryId\":\"2d5b53a8-8341-4da4-a296-e516fe5bb953\",\"Name\":\"Rheinland-Pfalz\",\"Code\":\"RHE\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/0971f796-ed73-46d7-9acf-38cd54ef7f54.json",
    "content": "{\"Id\":\"0971f796-ed73-46d7-9acf-38cd54ef7f54\",\"CountryId\":\"1fcc4a89-0e8f-4fa2-b8d0-4ff5ec2277df\",\"Name\":\"West Midlands, England\",\"Code\":\"WMD\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/09d1a93d-64ba-4205-9b93-81ba8eb8feca.json",
    "content": "{\"Id\":\"09d1a93d-64ba-4205-9b93-81ba8eb8feca\",\"CountryId\":\"1fcc4a89-0e8f-4fa2-b8d0-4ff5ec2277df\",\"Name\":\"Co. Dublin, Ireland\",\"Code\":\"DUB\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/0b525a39-59ce-40f3-91ca-8676a5404e23.json",
    "content": "{\"Id\":\"0b525a39-59ce-40f3-91ca-8676a5404e23\",\"CountryId\":\"1fcc4a89-0e8f-4fa2-b8d0-4ff5ec2277df\",\"Name\":\"Rutland, England\",\"Code\":\"RUT\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/0b6e3041-4368-4476-a697-a8bafc77a9e0.json",
    "content": "{\"Id\":\"0b6e3041-4368-4476-a697-a8bafc77a9e0\",\"CountryId\":\"a71d6727-61e7-4282-9fcb-526d1e7bc24f\",\"Name\":\"Virginia\",\"Code\":\"VA\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/0db04a9e-352b-46d6-88bc-b5416b31756d.json",
    "content": "{\"Id\":\"0db04a9e-352b-46d6-88bc-b5416b31756d\",\"CountryId\":\"38dc01c3-48d8-4ff8-a78a-2c35d4fbfa7b\",\"Name\":\"Las Palmas\",\"Code\":\"Las Palmas\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/0df27c73-a612-491f-8b74-c4e384317fb8.json",
    "content": "{\"Id\":\"0df27c73-a612-491f-8b74-c4e384317fb8\",\"CountryId\":\"0c356c5a-ca44-4301-8212-1826ccdadc42\",\"Name\":\"Manitoba\",\"Code\":\"MB\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/0f115386-3220-49f1-b0f2-eaf6c78a2edd.json",
    "content": "{\"Id\":\"0f115386-3220-49f1-b0f2-eaf6c78a2edd\",\"CountryId\":\"38dc01c3-48d8-4ff8-a78a-2c35d4fbfa7b\",\"Name\":\"Albacete\",\"Code\":\"Albacete\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/10185a2b-6af7-4735-b1e3-8c46aac842fd.json",
    "content": "{\"Id\":\"10185a2b-6af7-4735-b1e3-8c46aac842fd\",\"CountryId\":\"1fcc4a89-0e8f-4fa2-b8d0-4ff5ec2277df\",\"Name\":\"Tyne and Wear, England\",\"Code\":\"TWR\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/1026b90d-61be-4434-ab6d-ebfd92082dfe.json",
    "content": "{\"Id\":\"1026b90d-61be-4434-ab6d-ebfd92082dfe\",\"CountryId\":\"a71d6727-61e7-4282-9fcb-526d1e7bc24f\",\"Name\":\"Iowa\",\"Code\":\"IA\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/10adee5d-3ec5-4c70-a0d0-9c399a785dd2.json",
    "content": "{\"Id\":\"10adee5d-3ec5-4c70-a0d0-9c399a785dd2\",\"CountryId\":\"1fcc4a89-0e8f-4fa2-b8d0-4ff5ec2277df\",\"Name\":\"Oxfordshire, England\",\"Code\":\"OXF\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/152f8dc5-5caa-44b7-89a8-6469042dc865.json",
    "content": "{\"Id\":\"152f8dc5-5caa-44b7-89a8-6469042dc865\",\"CountryId\":\"a71d6727-61e7-4282-9fcb-526d1e7bc24f\",\"Name\":\"Puerto Rico\",\"Code\":\"PR\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/155ddc67-1e74-4791-995d-2eddb0658293.json",
    "content": "{\"Id\":\"155ddc67-1e74-4791-995d-2eddb0658293\",\"CountryId\":\"06bb7816-9ad4-47dc-b1cd-6e206afdfcca\",\"Name\":\"Burgenland\",\"Code\":\"BL\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/15b3d139-d927-43eb-8705-84df9122999f.json",
    "content": "{\"Id\":\"15b3d139-d927-43eb-8705-84df9122999f\",\"CountryId\":\"38dc01c3-48d8-4ff8-a78a-2c35d4fbfa7b\",\"Name\":\"Barcelona\",\"Code\":\"Barcelona\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/15c350c0-058c-474d-a7c2-e3bd359b7895.json",
    "content": "{\"Id\":\"15c350c0-058c-474d-a7c2-e3bd359b7895\",\"CountryId\":\"a71d6727-61e7-4282-9fcb-526d1e7bc24f\",\"Name\":\"Rhode Island\",\"Code\":\"RI\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/19b7cd11-15b7-48c0-918d-73fe64eaae26.json",
    "content": "{\"Id\":\"19b7cd11-15b7-48c0-918d-73fe64eaae26\",\"CountryId\":\"13faa99e-18f2-4e6f-b275-1e785b3383f3\",\"Name\":\"Roraima\",\"Code\":\"RR\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/1aa7127a-8c53-4840-a2da-120f8c6607bd.json",
    "content": "{\"Id\":\"1aa7127a-8c53-4840-a2da-120f8c6607bd\",\"CountryId\":\"a71d6727-61e7-4282-9fcb-526d1e7bc24f\",\"Name\":\"Ohio\",\"Code\":\"OH\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/1ac6bd1b-6b0c-4857-8243-bca4ba6eeb5e.json",
    "content": "{\"Id\":\"1ac6bd1b-6b0c-4857-8243-bca4ba6eeb5e\",\"CountryId\":\"1fcc4a89-0e8f-4fa2-b8d0-4ff5ec2277df\",\"Name\":\"Sussex, England\",\"Code\":\"SSX\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/1b4bdc9d-5d38-43c4-97aa-bad370a18fb4.json",
    "content": "{\"Id\":\"1b4bdc9d-5d38-43c4-97aa-bad370a18fb4\",\"CountryId\":\"1fcc4a89-0e8f-4fa2-b8d0-4ff5ec2277df\",\"Name\":\"Breconshire, Wales\",\"Code\":\"BRE\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/1ba313de-0690-42db-97bb-ecba89aec4c7.json",
    "content": "{\"Id\":\"1ba313de-0690-42db-97bb-ecba89aec4c7\",\"CountryId\":\"38dc01c3-48d8-4ff8-a78a-2c35d4fbfa7b\",\"Name\":\"Lleida\",\"Code\":\"Lleida\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/1c5d3479-59fc-4c77-8d4e-cfc5c33422e7.json",
    "content": "{\"Id\":\"1c5d3479-59fc-4c77-8d4e-cfc5c33422e7\",\"CountryId\":\"38dc01c3-48d8-4ff8-a78a-2c35d4fbfa7b\",\"Name\":\"Vizcaya\",\"Code\":\"Vizcaya\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/1d049867-dc28-4ae1-b8a6-d44aecb4aa0b.json",
    "content": "{\"Id\":\"1d049867-dc28-4ae1-b8a6-d44aecb4aa0b\",\"CountryId\":\"13faa99e-18f2-4e6f-b275-1e785b3383f3\",\"Name\":\"Rio Grande Do Sul\",\"Code\":\"RS\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/1d4eabb2-d6f1-44ad-be62-52ef66e5b04b.json",
    "content": "{\"Id\":\"1d4eabb2-d6f1-44ad-be62-52ef66e5b04b\",\"CountryId\":\"1fcc4a89-0e8f-4fa2-b8d0-4ff5ec2277df\",\"Name\":\"Hereford and Worcester, England\",\"Code\":\"HWR\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/1d91f9f6-0d62-479a-91a7-62d04fe1fdef.json",
    "content": "{\"Id\":\"1d91f9f6-0d62-479a-91a7-62d04fe1fdef\",\"CountryId\":\"1fcc4a89-0e8f-4fa2-b8d0-4ff5ec2277df\",\"Name\":\"Somerset, England\",\"Code\":\"SOM\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/1d996ba4-1906-44c3-9c51-399fd382d278.json",
    "content": "{\"Id\":\"1d996ba4-1906-44c3-9c51-399fd382d278\",\"CountryId\":\"13faa99e-18f2-4e6f-b275-1e785b3383f3\",\"Name\":\"Tocantins\",\"Code\":\"TO\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/1da58a0a-d0f7-48b1-9d48-102f65819773.json",
    "content": "{\"Id\":\"1da58a0a-d0f7-48b1-9d48-102f65819773\",\"CountryId\":\"38dc01c3-48d8-4ff8-a78a-2c35d4fbfa7b\",\"Name\":\"Granada\",\"Code\":\"Granada\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/1ddfca11-3848-4945-848c-ae5cb67e0e8b.json",
    "content": "{\"Id\":\"1ddfca11-3848-4945-848c-ae5cb67e0e8b\",\"CountryId\":\"1fcc4a89-0e8f-4fa2-b8d0-4ff5ec2277df\",\"Name\":\"Cumberland, England\",\"Code\":\"CUL\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/1e1ba070-f44b-4dfb-8fc2-55c541f4943f.json",
    "content": "{\"Id\":\"1e1ba070-f44b-4dfb-8fc2-55c541f4943f\",\"CountryId\":\"13faa99e-18f2-4e6f-b275-1e785b3383f3\",\"Name\":\"Amapa\",\"Code\":\"AP\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/1f6d4673-67a2-4313-8837-569b6b671685.json",
    "content": "{\"Id\":\"1f6d4673-67a2-4313-8837-569b6b671685\",\"CountryId\":\"1fcc4a89-0e8f-4fa2-b8d0-4ff5ec2277df\",\"Name\":\"Northumberland, England\",\"Code\":\"NBL\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/2022f303-2481-4b44-ba3d-d261b002c9c1.json",
    "content": "{\"Id\":\"2022f303-2481-4b44-ba3d-d261b002c9c1\",\"CountryId\":\"2d5b53a8-8341-4da4-a296-e516fe5bb953\",\"Name\":\"Baden-Württemberg\",\"Code\":\"BAW\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/21287450-809e-4662-9742-9380159d3c90.json",
    "content": "{\"Id\":\"21287450-809e-4662-9742-9380159d3c90\",\"CountryId\":\"38dc01c3-48d8-4ff8-a78a-2c35d4fbfa7b\",\"Name\":\"Guipuzcoa\",\"Code\":\"Guipuzcoa\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/2135d11f-4b63-46a5-b4c0-c62e130ce021.json",
    "content": "{\"Id\":\"2135d11f-4b63-46a5-b4c0-c62e130ce021\",\"CountryId\":\"1fcc4a89-0e8f-4fa2-b8d0-4ff5ec2277df\",\"Name\":\"Surrey, England\",\"Code\":\"SRY\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/2189b5a8-167f-425d-949c-b3858179003e.json",
    "content": "{\"Id\":\"2189b5a8-167f-425d-949c-b3858179003e\",\"CountryId\":\"1fcc4a89-0e8f-4fa2-b8d0-4ff5ec2277df\",\"Name\":\"Co. Longford, Ireland\",\"Code\":\"LOG\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/2282df69-bcf5-49fe-a6eb-c8c9dec87a52.json",
    "content": "{\"Id\":\"2282df69-bcf5-49fe-a6eb-c8c9dec87a52\",\"CountryId\":\"a71d6727-61e7-4282-9fcb-526d1e7bc24f\",\"Name\":\"West Virginia\",\"Code\":\"WV\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/25459871-1694-4d08-9e7c-6d06f2edc7ae.json",
    "content": "{\"Id\":\"25459871-1694-4d08-9e7c-6d06f2edc7ae\",\"CountryId\":\"60ce9ab1-945d-4fef-aba8-a1bb640165be\",\"Name\":\"Basel-Landschaft\",\"Code\":\"BL\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/2546d1ab-d4f5-4087-9b78-ea3badfafa12.json",
    "content": "{\"Id\":\"2546d1ab-d4f5-4087-9b78-ea3badfafa12\",\"CountryId\":\"38dc01c3-48d8-4ff8-a78a-2c35d4fbfa7b\",\"Name\":\"Sevilla\",\"Code\":\"Sevilla\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/27129dc0-1dd2-497f-b724-65d93e0050be.json",
    "content": "{\"Id\":\"27129dc0-1dd2-497f-b724-65d93e0050be\",\"CountryId\":\"1fcc4a89-0e8f-4fa2-b8d0-4ff5ec2277df\",\"Name\":\"Co. Cavan, Ireland\",\"Code\":\"CAV\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/28061e80-5d1c-4d47-9e99-a72525b63f85.json",
    "content": "{\"Id\":\"28061e80-5d1c-4d47-9e99-a72525b63f85\",\"CountryId\":\"1fcc4a89-0e8f-4fa2-b8d0-4ff5ec2277df\",\"Name\":\"Angus, Scotland\",\"Code\":\"ANS\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/294f2e9c-49d1-4094-b558-dd2d4219b0e9.json",
    "content": "{\"Id\":\"294f2e9c-49d1-4094-b558-dd2d4219b0e9\",\"CountryId\":\"13faa99e-18f2-4e6f-b275-1e785b3383f3\",\"Name\":\"Espirito Santo\",\"Code\":\"ES\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/29f5ce90-8999-4a8e-91a5-fcf67b4fd8ab.json",
    "content": "{\"Id\":\"29f5ce90-8999-4a8e-91a5-fcf67b4fd8ab\",\"CountryId\":\"0c356c5a-ca44-4301-8212-1826ccdadc42\",\"Name\":\"Nova Scotia\",\"Code\":\"NS\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/2a20cf43-8d55-4732-b810-641886f2aed4.json",
    "content": "{\"Id\":\"2a20cf43-8d55-4732-b810-641886f2aed4\",\"CountryId\":\"0c356c5a-ca44-4301-8212-1826ccdadc42\",\"Name\":\"British Columbia\",\"Code\":\"BC\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/2a9b8ffe-91f5-4944-983d-37f52491dde6.json",
    "content": "{\"Id\":\"2a9b8ffe-91f5-4944-983d-37f52491dde6\",\"CountryId\":\"2d5b53a8-8341-4da4-a296-e516fe5bb953\",\"Name\":\"Berlin\",\"Code\":\"BER\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/2ab44c64-8419-45a1-a78f-83894d679ea9.json",
    "content": "{\"Id\":\"2ab44c64-8419-45a1-a78f-83894d679ea9\",\"CountryId\":\"1fcc4a89-0e8f-4fa2-b8d0-4ff5ec2277df\",\"Name\":\"Cleveland, England\",\"Code\":\"CLV\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/2b0707ff-ef1a-498f-af98-facb2bd9f9c1.json",
    "content": "{\"Id\":\"2b0707ff-ef1a-498f-af98-facb2bd9f9c1\",\"CountryId\":\"1fcc4a89-0e8f-4fa2-b8d0-4ff5ec2277df\",\"Name\":\"West Sussex, England\",\"Code\":\"SXW\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/2b350062-eaf4-4f05-ab04-a8ccec353eb5.json",
    "content": "{\"Id\":\"2b350062-eaf4-4f05-ab04-a8ccec353eb5\",\"CountryId\":\"1fcc4a89-0e8f-4fa2-b8d0-4ff5ec2277df\",\"Name\":\"Warwickshire, England\",\"Code\":\"WAR\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/2d04de9b-525d-4623-a368-b29dd82dbbd0.json",
    "content": "{\"Id\":\"2d04de9b-525d-4623-a368-b29dd82dbbd0\",\"CountryId\":\"1fcc4a89-0e8f-4fa2-b8d0-4ff5ec2277df\",\"Name\":\"Dumfries-shire, Scotland\",\"Code\":\"DFS\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/2df783c9-e527-4105-819e-181af57e7cec.json",
    "content": "{\"Id\":\"2df783c9-e527-4105-819e-181af57e7cec\",\"CountryId\":\"13faa99e-18f2-4e6f-b275-1e785b3383f3\",\"Name\":\"Mato Grosso Do Sul\",\"Code\":\"MS\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/2dfe6223-5a2b-4dbc-b77c-9af80e973a20.json",
    "content": "{\"Id\":\"2dfe6223-5a2b-4dbc-b77c-9af80e973a20\",\"CountryId\":\"1fcc4a89-0e8f-4fa2-b8d0-4ff5ec2277df\",\"Name\":\"Renfrewshire, Scotland\",\"Code\":\"RFW\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/2f20005e-7efc-4186-9144-6996b68ee6e3.json",
    "content": "{\"Id\":\"2f20005e-7efc-4186-9144-6996b68ee6e3\",\"CountryId\":\"38dc01c3-48d8-4ff8-a78a-2c35d4fbfa7b\",\"Name\":\"Tarragona\",\"Code\":\"Tarragona\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/3008a1b3-1188-4f4d-a2ef-b71b4f54233e.json",
    "content": "{\"Id\":\"3008a1b3-1188-4f4d-a2ef-b71b4f54233e\",\"CountryId\":\"06bb7816-9ad4-47dc-b1cd-6e206afdfcca\",\"Name\":\"Tirol\",\"Code\":\"TI\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/30a0e005-a523-4301-b924-8a4651f54e90.json",
    "content": "{\"Id\":\"30a0e005-a523-4301-b924-8a4651f54e90\",\"CountryId\":\"1fcc4a89-0e8f-4fa2-b8d0-4ff5ec2277df\",\"Name\":\"Montgomeryshire, Wales\",\"Code\":\"MGY\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/30fa3416-9fb1-43c1-999d-23a115218324.json",
    "content": "{\"Id\":\"30fa3416-9fb1-43c1-999d-23a115218324\",\"CountryId\":\"60ce9ab1-945d-4fef-aba8-a1bb640165be\",\"Name\":\"Aargau\",\"Code\":\"AG\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/31265516-54af-4551-af1b-a0900faa3028.json",
    "content": "{\"Id\":\"31265516-54af-4551-af1b-a0900faa3028\",\"CountryId\":\"a71d6727-61e7-4282-9fcb-526d1e7bc24f\",\"Name\":\"Nevada\",\"Code\":\"NV\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/3249c886-3b1e-426a-8cd7-efc3922a964a.json",
    "content": "{\"Id\":\"3249c886-3b1e-426a-8cd7-efc3922a964a\",\"CountryId\":\"38dc01c3-48d8-4ff8-a78a-2c35d4fbfa7b\",\"Name\":\"Salamanca\",\"Code\":\"Salamanca\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/335c6ba3-37e5-4cca-b466-6927658ee92e.json",
    "content": "{\"Id\":\"335c6ba3-37e5-4cca-b466-6927658ee92e\",\"CountryId\":\"a71d6727-61e7-4282-9fcb-526d1e7bc24f\",\"Name\":\"Maine\",\"Code\":\"ME\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/33cd3650-d80e-4157-b145-5d8d404628e4.json",
    "content": "{\"Id\":\"33cd3650-d80e-4157-b145-5d8d404628e4\",\"CountryId\":\"0c356c5a-ca44-4301-8212-1826ccdadc42\",\"Name\":\"Ontario\",\"Code\":\"ON\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/34141474-337e-4e28-9180-23620558ba1d.json",
    "content": "{\"Id\":\"34141474-337e-4e28-9180-23620558ba1d\",\"CountryId\":\"1fcc4a89-0e8f-4fa2-b8d0-4ff5ec2277df\",\"Name\":\"Dunbartonshire, Scotland\",\"Code\":\"DNB\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/347629b4-0c74-4e80-84c9-785fb45fb8d7.json",
    "content": "{\"Id\":\"347629b4-0c74-4e80-84c9-785fb45fb8d7\",\"CountryId\":\"38dc01c3-48d8-4ff8-a78a-2c35d4fbfa7b\",\"Name\":\"Almeria\",\"Code\":\"Almeria\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/356bd975-9775-40d4-9678-fc49098f0a02.json",
    "content": "{\"Id\":\"356bd975-9775-40d4-9678-fc49098f0a02\",\"CountryId\":\"1fcc4a89-0e8f-4fa2-b8d0-4ff5ec2277df\",\"Name\":\"London, England\",\"Code\":\"LND\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/36b807a9-f496-430d-91bc-e8b1ac738736.json",
    "content": "{\"Id\":\"36b807a9-f496-430d-91bc-e8b1ac738736\",\"CountryId\":\"1fcc4a89-0e8f-4fa2-b8d0-4ff5ec2277df\",\"Name\":\"Lancashire, England\",\"Code\":\"LAN\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/36f88c25-7a6a-41d4-abac-ce05cd5ecfa1.json",
    "content": "{\"Id\":\"36f88c25-7a6a-41d4-abac-ce05cd5ecfa1\",\"CountryId\":\"2d5b53a8-8341-4da4-a296-e516fe5bb953\",\"Name\":\"Hamburg\",\"Code\":\"HAM\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/37a4b316-853a-40b1-8203-b8c27d07917e.json",
    "content": "{\"Id\":\"37a4b316-853a-40b1-8203-b8c27d07917e\",\"CountryId\":\"1fcc4a89-0e8f-4fa2-b8d0-4ff5ec2277df\",\"Name\":\"Middlesex, England\",\"Code\":\"MDX\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/37cf9d44-030d-48be-97f0-5b3dab24f48f.json",
    "content": "{\"Id\":\"37cf9d44-030d-48be-97f0-5b3dab24f48f\",\"CountryId\":\"1fcc4a89-0e8f-4fa2-b8d0-4ff5ec2277df\",\"Name\":\"Anglesey, Wales\",\"Code\":\"AGY\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/38885962-564a-4686-9099-aa06570e00bd.json",
    "content": "{\"Id\":\"38885962-564a-4686-9099-aa06570e00bd\",\"CountryId\":\"1fcc4a89-0e8f-4fa2-b8d0-4ff5ec2277df\",\"Name\":\"West Lothian, Scotland\",\"Code\":\"WLN\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/388a4219-a89a-4bf0-960f-f58936288a0a.json",
    "content": "{\"Id\":\"388a4219-a89a-4bf0-960f-f58936288a0a\",\"CountryId\":\"60ce9ab1-945d-4fef-aba8-a1bb640165be\",\"Name\":\"Luzern\",\"Code\":\"LU\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/3933e77a-10f0-47e2-bb60-02de2ad724df.json",
    "content": "{\"Id\":\"3933e77a-10f0-47e2-bb60-02de2ad724df\",\"CountryId\":\"1fcc4a89-0e8f-4fa2-b8d0-4ff5ec2277df\",\"Name\":\"Roxburghshire, Scotland\",\"Code\":\"ROX\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/3c173b83-5149-4fec-b000-64a65832c455.json",
    "content": "{\"Id\":\"3c173b83-5149-4fec-b000-64a65832c455\",\"CountryId\":\"a71d6727-61e7-4282-9fcb-526d1e7bc24f\",\"Name\":\"Armed Forces Middle East\",\"Code\":\"AM\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/3cb3ef7b-b000-41fa-bfd2-405f29bd646f.json",
    "content": "{\"Id\":\"3cb3ef7b-b000-41fa-bfd2-405f29bd646f\",\"CountryId\":\"1fcc4a89-0e8f-4fa2-b8d0-4ff5ec2277df\",\"Name\":\"Co. Wexford, Ireland\",\"Code\":\"WEX\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/3d11ee42-f2d3-4c0d-81b9-44394a3a5409.json",
    "content": "{\"Id\":\"3d11ee42-f2d3-4c0d-81b9-44394a3a5409\",\"CountryId\":\"1fcc4a89-0e8f-4fa2-b8d0-4ff5ec2277df\",\"Name\":\"Worcestershire, England\",\"Code\":\"WOR\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/3dab4424-efa5-409a-b96c-40daf5ee4b6c.json",
    "content": "{\"Id\":\"3dab4424-efa5-409a-b96c-40daf5ee4b6c\",\"CountryId\":\"38dc01c3-48d8-4ff8-a78a-2c35d4fbfa7b\",\"Name\":\"La Rioja\",\"Code\":\"La Rioja\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/3deda5e5-10bb-41cd-87ff-f91688b5b7ed.json",
    "content": "{\"Id\":\"3deda5e5-10bb-41cd-87ff-f91688b5b7ed\",\"CountryId\":\"60ce9ab1-945d-4fef-aba8-a1bb640165be\",\"Name\":\"Thurgau\",\"Code\":\"TG\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/3e256c55-177f-459c-97cf-a77fb3729494.json",
    "content": "{\"Id\":\"3e256c55-177f-459c-97cf-a77fb3729494\",\"CountryId\":\"1fcc4a89-0e8f-4fa2-b8d0-4ff5ec2277df\",\"Name\":\"Jersey, Channel Islands\",\"Code\":\"JSY\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/3ebf7ceb-8e24-40af-801c-feccd6d780ee.json",
    "content": "{\"Id\":\"3ebf7ceb-8e24-40af-801c-feccd6d780ee\",\"CountryId\":\"38dc01c3-48d8-4ff8-a78a-2c35d4fbfa7b\",\"Name\":\"Castellon\",\"Code\":\"Castellon\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/3ee49ff8-a56a-451a-a999-067915c8dd75.json",
    "content": "{\"Id\":\"3ee49ff8-a56a-451a-a999-067915c8dd75\",\"CountryId\":\"1fcc4a89-0e8f-4fa2-b8d0-4ff5ec2277df\",\"Name\":\"Cambridgeshire, England\",\"Code\":\"CAM\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/3f030f3b-0a0a-464e-b86e-9cd9e7a97b8b.json",
    "content": "{\"Id\":\"3f030f3b-0a0a-464e-b86e-9cd9e7a97b8b\",\"CountryId\":\"1fcc4a89-0e8f-4fa2-b8d0-4ff5ec2277df\",\"Name\":\"Co. Louth, Ireland\",\"Code\":\"LOU\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/3f05459f-5453-4aa1-9565-56b05080181d.json",
    "content": "{\"Id\":\"3f05459f-5453-4aa1-9565-56b05080181d\",\"CountryId\":\"1fcc4a89-0e8f-4fa2-b8d0-4ff5ec2277df\",\"Name\":\"Dorset, England\",\"Code\":\"DOR\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/3fcf9ee7-66bc-4cf6-aef3-d8c70948ecde.json",
    "content": "{\"Id\":\"3fcf9ee7-66bc-4cf6-aef3-d8c70948ecde\",\"CountryId\":\"1fcc4a89-0e8f-4fa2-b8d0-4ff5ec2277df\",\"Name\":\"Co. Offaly, Ireland\",\"Code\":\"OFF\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/3ff66466-e523-492e-80c1-be19af171364.json",
    "content": "{\"Id\":\"3ff66466-e523-492e-80c1-be19af171364\",\"CountryId\":\"a71d6727-61e7-4282-9fcb-526d1e7bc24f\",\"Name\":\"Colorado\",\"Code\":\"CO\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/40f760f8-531f-4fea-9773-a513a7b58af8.json",
    "content": "{\"Id\":\"40f760f8-531f-4fea-9773-a513a7b58af8\",\"CountryId\":\"1fcc4a89-0e8f-4fa2-b8d0-4ff5ec2277df\",\"Name\":\"Isle of Wight, England\",\"Code\":\"IOW\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/4182cebc-5177-48ae-81f7-0c356139494b.json",
    "content": "{\"Id\":\"4182cebc-5177-48ae-81f7-0c356139494b\",\"CountryId\":\"1fcc4a89-0e8f-4fa2-b8d0-4ff5ec2277df\",\"Name\":\"Co. Down, Northern Ireland\",\"Code\":\"DOW\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/41898a0b-a26c-44ce-9568-cfb75f1a2856.json",
    "content": "{\"Id\":\"41898a0b-a26c-44ce-9568-cfb75f1a2856\",\"CountryId\":\"a71d6727-61e7-4282-9fcb-526d1e7bc24f\",\"Name\":\"Tennessee\",\"Code\":\"TN\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/42e55b19-e977-4e00-830c-a1655cf8a072.json",
    "content": "{\"Id\":\"42e55b19-e977-4e00-830c-a1655cf8a072\",\"CountryId\":\"1fcc4a89-0e8f-4fa2-b8d0-4ff5ec2277df\",\"Name\":\"Essex, England\",\"Code\":\"ESS\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/4308f7f6-1f1d-4248-8995-3af588c55976.json",
    "content": "{\"Id\":\"4308f7f6-1f1d-4248-8995-3af588c55976\",\"CountryId\":\"0c356c5a-ca44-4301-8212-1826ccdadc42\",\"Name\":\"Newfoundland\",\"Code\":\"NF\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/4344c1dd-e866-4683-9c90-22c9db369eae.json",
    "content": "{\"Id\":\"4344c1dd-e866-4683-9c90-22c9db369eae\",\"CountryId\":\"38dc01c3-48d8-4ff8-a78a-2c35d4fbfa7b\",\"Name\":\"Segovia\",\"Code\":\"Segovia\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/43830082-5772-47f2-8216-8a48c872e337.json",
    "content": "{\"Id\":\"43830082-5772-47f2-8216-8a48c872e337\",\"CountryId\":\"1fcc4a89-0e8f-4fa2-b8d0-4ff5ec2277df\",\"Name\":\"Co. Kildare, Ireland\",\"Code\":\"KID\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/440e892d-693c-493b-ba14-81919c3fb091.json",
    "content": "{\"Id\":\"440e892d-693c-493b-ba14-81919c3fb091\",\"CountryId\":\"60ce9ab1-945d-4fef-aba8-a1bb640165be\",\"Name\":\"Wallis\",\"Code\":\"VS\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/4445eb1e-0888-4b11-bf7b-0bb9a701936d.json",
    "content": "{\"Id\":\"4445eb1e-0888-4b11-bf7b-0bb9a701936d\",\"CountryId\":\"1fcc4a89-0e8f-4fa2-b8d0-4ff5ec2277df\",\"Name\":\"Ayrshire, Scotland\",\"Code\":\"AYR\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/446cb079-fc60-478a-b8cb-d8b7ece3383d.json",
    "content": "{\"Id\":\"446cb079-fc60-478a-b8cb-d8b7ece3383d\",\"CountryId\":\"1fcc4a89-0e8f-4fa2-b8d0-4ff5ec2277df\",\"Name\":\"Cheshire, England\",\"Code\":\"CHS\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/46d3633d-8db5-4cc8-b42e-76dd3d48458d.json",
    "content": "{\"Id\":\"46d3633d-8db5-4cc8-b42e-76dd3d48458d\",\"CountryId\":\"1fcc4a89-0e8f-4fa2-b8d0-4ff5ec2277df\",\"Name\":\"Ireland\",\"Code\":\"IRL\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/46f46bef-20b8-4315-8bf1-f816bcb06b8e.json",
    "content": "{\"Id\":\"46f46bef-20b8-4315-8bf1-f816bcb06b8e\",\"CountryId\":\"1fcc4a89-0e8f-4fa2-b8d0-4ff5ec2277df\",\"Name\":\"Co. Durham, England\",\"Code\":\"DUR\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/473bbc63-7d8c-4587-945c-32f943091ff4.json",
    "content": "{\"Id\":\"473bbc63-7d8c-4587-945c-32f943091ff4\",\"CountryId\":\"1fcc4a89-0e8f-4fa2-b8d0-4ff5ec2277df\",\"Name\":\"Channel Islands\",\"Code\":\"CHI\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/48184d25-0757-405d-934d-74d96f9745df.json",
    "content": "{\"Id\":\"48184d25-0757-405d-934d-74d96f9745df\",\"CountryId\":\"a71d6727-61e7-4282-9fcb-526d1e7bc24f\",\"Name\":\"New Mexico\",\"Code\":\"NM\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/481f03a2-a3fe-41d9-a938-920720c1f446.json",
    "content": "{\"Id\":\"481f03a2-a3fe-41d9-a938-920720c1f446\",\"CountryId\":\"1fcc4a89-0e8f-4fa2-b8d0-4ff5ec2277df\",\"Name\":\"Avon, England\",\"Code\":\"AVN\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/48d12a99-bf3c-4fc7-86c5-c266424973eb.json",
    "content": "{\"Id\":\"48d12a99-bf3c-4fc7-86c5-c266424973eb\",\"CountryId\":\"a71d6727-61e7-4282-9fcb-526d1e7bc24f\",\"Name\":\"California\",\"Code\":\"CA\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/49025d80-75ee-4367-a06c-88427507642b.json",
    "content": "{\"Id\":\"49025d80-75ee-4367-a06c-88427507642b\",\"CountryId\":\"1fcc4a89-0e8f-4fa2-b8d0-4ff5ec2277df\",\"Name\":\"Co. Tyrone, Northern Ireland\",\"Code\":\"TYR\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/49ec50be-2751-443e-acf8-4c497633267d.json",
    "content": "{\"Id\":\"49ec50be-2751-443e-acf8-4c497633267d\",\"CountryId\":\"1fcc4a89-0e8f-4fa2-b8d0-4ff5ec2277df\",\"Name\":\"Orkney, Scotland\",\"Code\":\"OKI\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/49fffe3b-61f4-433d-b9bc-4044398283cf.json",
    "content": "{\"Id\":\"49fffe3b-61f4-433d-b9bc-4044398283cf\",\"CountryId\":\"1fcc4a89-0e8f-4fa2-b8d0-4ff5ec2277df\",\"Name\":\"Kirkcudbrightshire, Scotland\",\"Code\":\"KKD\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/4ab74396-fb33-4276-a518-ad05f28375d0.json",
    "content": "{\"Id\":\"4ab74396-fb33-4276-a518-ad05f28375d0\",\"CountryId\":\"38dc01c3-48d8-4ff8-a78a-2c35d4fbfa7b\",\"Name\":\"Baleares\",\"Code\":\"Baleares\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/4bc9f931-f1ed-489f-99bc-59f42bd77eec.json",
    "content": "{\"Id\":\"4bc9f931-f1ed-489f-99bc-59f42bd77eec\",\"CountryId\":\"2d5b53a8-8341-4da4-a296-e516fe5bb953\",\"Name\":\"Nordrhein-Westfalen\",\"Code\":\"NRW\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/4bd4724c-2e5e-4df4-8b1c-3a679c30398f.json",
    "content": "{\"Id\":\"4bd4724c-2e5e-4df4-8b1c-3a679c30398f\",\"CountryId\":\"60ce9ab1-945d-4fef-aba8-a1bb640165be\",\"Name\":\"Zug\",\"Code\":\"ZG\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/4d238397-af29-4dbc-a349-7f650a5d8d67.json",
    "content": "{\"Id\":\"4d238397-af29-4dbc-a349-7f650a5d8d67\",\"CountryId\":\"a71d6727-61e7-4282-9fcb-526d1e7bc24f\",\"Name\":\"Oklahoma\",\"Code\":\"OK\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/4da1dac0-6c99-4a28-9d94-6a3df5507727.json",
    "content": "{\"Id\":\"4da1dac0-6c99-4a28-9d94-6a3df5507727\",\"CountryId\":\"1fcc4a89-0e8f-4fa2-b8d0-4ff5ec2277df\",\"Name\":\"Co. Limerick, Ireland\",\"Code\":\"LIM\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/4e0bc53a-62fe-4dfc-9d1d-8b928e40b22e.json",
    "content": "{\"Id\":\"4e0bc53a-62fe-4dfc-9d1d-8b928e40b22e\",\"CountryId\":\"13faa99e-18f2-4e6f-b275-1e785b3383f3\",\"Name\":\"Maranhao\",\"Code\":\"MA\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/4fa42d2c-b375-41d4-98ef-4d1442bccb1a.json",
    "content": "{\"Id\":\"4fa42d2c-b375-41d4-98ef-4d1442bccb1a\",\"CountryId\":\"1fcc4a89-0e8f-4fa2-b8d0-4ff5ec2277df\",\"Name\":\"Co. Kerry, Ireland\",\"Code\":\"KER\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/5006ff54-aa63-4e57-8414-30d51598be60.json",
    "content": "{\"Id\":\"5006ff54-aa63-4e57-8414-30d51598be60\",\"CountryId\":\"13faa99e-18f2-4e6f-b275-1e785b3383f3\",\"Name\":\"Bahia\",\"Code\":\"BA\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/504d426d-cd02-446d-910c-5e4e36518879.json",
    "content": "{\"Id\":\"504d426d-cd02-446d-910c-5e4e36518879\",\"CountryId\":\"1fcc4a89-0e8f-4fa2-b8d0-4ff5ec2277df\",\"Name\":\"Berwickshire, Scotland\",\"Code\":\"BEW\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/507e831c-8d74-44bf-a251-496b945faed9.json",
    "content": "{\"Id\":\"507e831c-8d74-44bf-a251-496b945faed9\",\"CountryId\":\"a71d6727-61e7-4282-9fcb-526d1e7bc24f\",\"Name\":\"Virgin Islands\",\"Code\":\"VI\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/510c1204-13c5-4f0e-a746-5d1c5f843dfb.json",
    "content": "{\"Id\":\"510c1204-13c5-4f0e-a746-5d1c5f843dfb\",\"CountryId\":\"1fcc4a89-0e8f-4fa2-b8d0-4ff5ec2277df\",\"Name\":\"Strathclyde, Scotland\",\"Code\":\"STD\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/517f1242-fe90-4322-969e-353c5dbfd061.json",
    "content": "{\"Id\":\"517f1242-fe90-4322-969e-353c5dbfd061\",\"CountryId\":\"38dc01c3-48d8-4ff8-a78a-2c35d4fbfa7b\",\"Name\":\"Alicante\",\"Code\":\"Alicante\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/5241e330-b255-4ffa-833c-4964f13a0f7b.json",
    "content": "{\"Id\":\"5241e330-b255-4ffa-833c-4964f13a0f7b\",\"CountryId\":\"1fcc4a89-0e8f-4fa2-b8d0-4ff5ec2277df\",\"Name\":\"East Riding of Yorkshire, England\",\"Code\":\"ERY\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/5399df4c-92d4-4c59-9bfb-7dc2a575a3d3.json",
    "content": "{\"Id\":\"5399df4c-92d4-4c59-9bfb-7dc2a575a3d3\",\"CountryId\":\"a71d6727-61e7-4282-9fcb-526d1e7bc24f\",\"Name\":\"North Dakota\",\"Code\":\"ND\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/540233b4-a7c9-4e61-b54d-186763a2c65d.json",
    "content": "{\"Id\":\"540233b4-a7c9-4e61-b54d-186763a2c65d\",\"CountryId\":\"1fcc4a89-0e8f-4fa2-b8d0-4ff5ec2277df\",\"Name\":\"Dumfries and Galloway, Scotland\",\"Code\":\"DGY\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/5469ca74-b57e-41c1-b3e6-5ab725e7f423.json",
    "content": "{\"Id\":\"5469ca74-b57e-41c1-b3e6-5ab725e7f423\",\"CountryId\":\"1fcc4a89-0e8f-4fa2-b8d0-4ff5ec2277df\",\"Name\":\"Cornwall, England\",\"Code\":\"CON\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/56259f37-af84-4215-ac73-259fa74c7c8d.json",
    "content": "{\"Id\":\"56259f37-af84-4215-ac73-259fa74c7c8d\",\"CountryId\":\"0c356c5a-ca44-4301-8212-1826ccdadc42\",\"Name\":\"Yukon Territory\",\"Code\":\"YT\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/56faba9f-b482-4421-87cc-1ee320da22cd.json",
    "content": "{\"Id\":\"56faba9f-b482-4421-87cc-1ee320da22cd\",\"CountryId\":\"1fcc4a89-0e8f-4fa2-b8d0-4ff5ec2277df\",\"Name\":\"Powys, Wales\",\"Code\":\"POW\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/570fe94c-f226-4701-8c10-13dab9e59625.json",
    "content": "{\"Id\":\"570fe94c-f226-4701-8c10-13dab9e59625\",\"CountryId\":\"a71d6727-61e7-4282-9fcb-526d1e7bc24f\",\"Name\":\"Texas\",\"Code\":\"TX\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/584cf595-c117-4d7e-9a0b-6dadd748eda8.json",
    "content": "{\"Id\":\"584cf595-c117-4d7e-9a0b-6dadd748eda8\",\"CountryId\":\"1fcc4a89-0e8f-4fa2-b8d0-4ff5ec2277df\",\"Name\":\"Argyllshire, Scotland\",\"Code\":\"ARL\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/58c1e282-cffa-4b49-b268-5356ba47aa19.json",
    "content": "{\"Id\":\"58c1e282-cffa-4b49-b268-5356ba47aa19\",\"CountryId\":\"60ce9ab1-945d-4fef-aba8-a1bb640165be\",\"Name\":\"Basel-Stadt\",\"Code\":\"BS\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/59997515-5699-4571-8c69-b91328b65a3f.json",
    "content": "{\"Id\":\"59997515-5699-4571-8c69-b91328b65a3f\",\"CountryId\":\"1fcc4a89-0e8f-4fa2-b8d0-4ff5ec2277df\",\"Name\":\"Lincolnshire, England\",\"Code\":\"LIN\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/5bbd88d1-5023-43df-91f0-0fdd4f3878eb.json",
    "content": "{\"Id\":\"5bbd88d1-5023-43df-91f0-0fdd4f3878eb\",\"CountryId\":\"38dc01c3-48d8-4ff8-a78a-2c35d4fbfa7b\",\"Name\":\"Cadiz\",\"Code\":\"Cadiz\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/5bd4a551-46ba-465a-b3f9-e15ed70a083f.json",
    "content": "{\"Id\":\"5bd4a551-46ba-465a-b3f9-e15ed70a083f\",\"CountryId\":\"a71d6727-61e7-4282-9fcb-526d1e7bc24f\",\"Name\":\"Arizona\",\"Code\":\"AZ\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/60d9d569-7d0d-448f-b567-b4bb6c518140.json",
    "content": "{\"Id\":\"60d9d569-7d0d-448f-b567-b4bb6c518140\",\"CountryId\":\"38dc01c3-48d8-4ff8-a78a-2c35d4fbfa7b\",\"Name\":\"Zamora\",\"Code\":\"Zamora\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/611023eb-d4f2-4831-812e-c3984a125310.json",
    "content": "{\"Id\":\"611023eb-d4f2-4831-812e-c3984a125310\",\"CountryId\":\"a71d6727-61e7-4282-9fcb-526d1e7bc24f\",\"Name\":\"Alaska\",\"Code\":\"AK\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/61952dad-6b28-4ba8-8580-5012a48accdc.json",
    "content": "{\"Id\":\"61952dad-6b28-4ba8-8580-5012a48accdc\",\"CountryId\":\"a71d6727-61e7-4282-9fcb-526d1e7bc24f\",\"Name\":\"Marshall Islands\",\"Code\":\"MH\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/61d891a3-e620-46d8-aada-6c9c1944340c.json",
    "content": "{\"Id\":\"61d891a3-e620-46d8-aada-6c9c1944340c\",\"CountryId\":\"60ce9ab1-945d-4fef-aba8-a1bb640165be\",\"Name\":\"Glarus\",\"Code\":\"GL\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/62202fa8-db98-40f9-9a26-446aee191cdd.json",
    "content": "{\"Id\":\"62202fa8-db98-40f9-9a26-446aee191cdd\",\"CountryId\":\"13faa99e-18f2-4e6f-b275-1e785b3383f3\",\"Name\":\"Acre\",\"Code\":\"AC\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/6243f71b-d89b-4fdc-bc01-fcf46aeb1f29.json",
    "content": "{\"Id\":\"6243f71b-d89b-4fdc-bc01-fcf46aeb1f29\",\"CountryId\":\"a71d6727-61e7-4282-9fcb-526d1e7bc24f\",\"Name\":\"Illinois\",\"Code\":\"IL\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/628f9f88-55ef-4eef-bcb6-b866ec05838d.json",
    "content": "{\"Id\":\"628f9f88-55ef-4eef-bcb6-b866ec05838d\",\"CountryId\":\"1fcc4a89-0e8f-4fa2-b8d0-4ff5ec2277df\",\"Name\":\"Co. Laois, Ireland\",\"Code\":\"LEX\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/6352d079-20ea-42da-9377-7a09e6b764ae.json",
    "content": "{\"Id\":\"6352d079-20ea-42da-9377-7a09e6b764ae\",\"CountryId\":\"a71d6727-61e7-4282-9fcb-526d1e7bc24f\",\"Name\":\"Federated States Of Micronesia\",\"Code\":\"FM\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/63c099a8-5537-4c80-8654-a6128ee1b203.json",
    "content": "{\"Id\":\"63c099a8-5537-4c80-8654-a6128ee1b203\",\"CountryId\":\"1fcc4a89-0e8f-4fa2-b8d0-4ff5ec2277df\",\"Name\":\"Aberdeenshire, Scotland\",\"Code\":\"ABD\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/640cef26-1b10-4eac-a4ae-2f3491c38376.json",
    "content": "{\"Id\":\"640cef26-1b10-4eac-a4ae-2f3491c38376\",\"CountryId\":\"38dc01c3-48d8-4ff8-a78a-2c35d4fbfa7b\",\"Name\":\"Ciudad Real\",\"Code\":\"Ciudad Real\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/64d687fc-1908-4323-ab47-991ea4371186.json",
    "content": "{\"Id\":\"64d687fc-1908-4323-ab47-991ea4371186\",\"CountryId\":\"1fcc4a89-0e8f-4fa2-b8d0-4ff5ec2277df\",\"Name\":\"Devon, England\",\"Code\":\"DEV\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/66cc8a10-4dfb-4e8a-b5f0-b935d22a18f9.json",
    "content": "{\"Id\":\"66cc8a10-4dfb-4e8a-b5f0-b935d22a18f9\",\"CountryId\":\"13faa99e-18f2-4e6f-b275-1e785b3383f3\",\"Name\":\"Ceara\",\"Code\":\"CE\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/6743c28c-580d-4705-9b01-aa4380d65ce9.json",
    "content": "{\"Id\":\"6743c28c-580d-4705-9b01-aa4380d65ce9\",\"CountryId\":\"a71d6727-61e7-4282-9fcb-526d1e7bc24f\",\"Name\":\"New Jersey\",\"Code\":\"NJ\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/67e1633f-7405-451d-a772-eb4119c13b2c.json",
    "content": "{\"Id\":\"67e1633f-7405-451d-a772-eb4119c13b2c\",\"CountryId\":\"60ce9ab1-945d-4fef-aba8-a1bb640165be\",\"Name\":\"Uri\",\"Code\":\"UR\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/67f56be1-88c8-474d-beb9-5e75cd3b6062.json",
    "content": "{\"Id\":\"67f56be1-88c8-474d-beb9-5e75cd3b6062\",\"CountryId\":\"1fcc4a89-0e8f-4fa2-b8d0-4ff5ec2277df\",\"Name\":\"Glamorgan, Wales\",\"Code\":\"GLA\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/69a0494d-f8c3-434b-b8d4-c18ca5af5a4e.json",
    "content": "{\"Id\":\"69a0494d-f8c3-434b-b8d4-c18ca5af5a4e\",\"CountryId\":\"2d5b53a8-8341-4da4-a296-e516fe5bb953\",\"Name\":\"Saarland\",\"Code\":\"SAR\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/6ac7bea2-d4ba-4c48-b0d0-f784af781587.json",
    "content": "{\"Id\":\"6ac7bea2-d4ba-4c48-b0d0-f784af781587\",\"CountryId\":\"1fcc4a89-0e8f-4fa2-b8d0-4ff5ec2277df\",\"Name\":\"Co. Carlow, Ireland\",\"Code\":\"CAR\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/6c342c68-690a-4967-97c6-e6408ca1ea59.json",
    "content": "{\"Id\":\"6c342c68-690a-4967-97c6-e6408ca1ea59\",\"CountryId\":\"60ce9ab1-945d-4fef-aba8-a1bb640165be\",\"Name\":\"Genf\",\"Code\":\"GE\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/6cc5cf7e-df8f-4c30-8b75-3c7d7750a4c0.json",
    "content": "{\"Id\":\"6cc5cf7e-df8f-4c30-8b75-3c7d7750a4c0\",\"CountryId\":\"13faa99e-18f2-4e6f-b275-1e785b3383f3\",\"Name\":\"Sergipe\",\"Code\":\"SE\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/6e0eb9ac-76a2-434d-ae13-18dbe56212bf.json",
    "content": "{\"Id\":\"6e0eb9ac-76a2-434d-ae13-18dbe56212bf\",\"CountryId\":\"38dc01c3-48d8-4ff8-a78a-2c35d4fbfa7b\",\"Name\":\"Ceuta\",\"Code\":\"Ceuta\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/6e54cc16-2a7d-4662-9f2b-1f7808318412.json",
    "content": "{\"Id\":\"6e54cc16-2a7d-4662-9f2b-1f7808318412\",\"CountryId\":\"1fcc4a89-0e8f-4fa2-b8d0-4ff5ec2277df\",\"Name\":\"Co. Monaghan, Ireland\",\"Code\":\"MOG\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/6e9d7937-3614-465e-8534-aa9a52f2c69b.json",
    "content": "{\"Id\":\"6e9d7937-3614-465e-8534-aa9a52f2c69b\",\"CountryId\":\"a71d6727-61e7-4282-9fcb-526d1e7bc24f\",\"Name\":\"Nebraska\",\"Code\":\"NE\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/71366f2a-e8b5-469f-a995-a0410dc33fd8.json",
    "content": "{\"Id\":\"71366f2a-e8b5-469f-a995-a0410dc33fd8\",\"CountryId\":\"1fcc4a89-0e8f-4fa2-b8d0-4ff5ec2277df\",\"Name\":\"Yorkshire, England\",\"Code\":\"YKS\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/71682c43-e9c4-4d96-89e7-b06d47caa053.json",
    "content": "{\"Id\":\"71682c43-e9c4-4d96-89e7-b06d47caa053\",\"CountryId\":\"a71d6727-61e7-4282-9fcb-526d1e7bc24f\",\"Name\":\"Montana\",\"Code\":\"MT\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/7190e292-34cf-49f3-8367-a5fafb749cd3.json",
    "content": "{\"Id\":\"7190e292-34cf-49f3-8367-a5fafb749cd3\",\"CountryId\":\"1fcc4a89-0e8f-4fa2-b8d0-4ff5ec2277df\",\"Name\":\"Bedfordshire, England\",\"Code\":\"BDF\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/72c87c62-5656-4811-84cd-0c5ce4b7d19f.json",
    "content": "{\"Id\":\"72c87c62-5656-4811-84cd-0c5ce4b7d19f\",\"CountryId\":\"1fcc4a89-0e8f-4fa2-b8d0-4ff5ec2277df\",\"Name\":\"Midlothian, Scotland\",\"Code\":\"MLN\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/730f58d1-9129-4f25-a94c-1a0f2f373bcd.json",
    "content": "{\"Id\":\"730f58d1-9129-4f25-a94c-1a0f2f373bcd\",\"CountryId\":\"1fcc4a89-0e8f-4fa2-b8d0-4ff5ec2277df\",\"Name\":\"Lanarkshire, Scotland\",\"Code\":\"LKS\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/74062d11-8784-40bc-a95d-43b785ef8196.json",
    "content": "{\"Id\":\"74062d11-8784-40bc-a95d-43b785ef8196\",\"CountryId\":\"a71d6727-61e7-4282-9fcb-526d1e7bc24f\",\"Name\":\"Maryland\",\"Code\":\"MD\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/74532861-c62d-49d2-a8ed-e99f401ea768.json",
    "content": "{\"Id\":\"74532861-c62d-49d2-a8ed-e99f401ea768\",\"CountryId\":\"0c356c5a-ca44-4301-8212-1826ccdadc42\",\"Name\":\"Northwest Territories\",\"Code\":\"NT\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/7566d0a5-7394-4947-b4d7-a76a94746a23.json",
    "content": "{\"Id\":\"7566d0a5-7394-4947-b4d7-a76a94746a23\",\"CountryId\":\"a71d6727-61e7-4282-9fcb-526d1e7bc24f\",\"Name\":\"American Samoa\",\"Code\":\"AS\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/7759c9e9-43bc-4570-a9bb-c578564a0951.json",
    "content": "{\"Id\":\"7759c9e9-43bc-4570-a9bb-c578564a0951\",\"CountryId\":\"1fcc4a89-0e8f-4fa2-b8d0-4ff5ec2277df\",\"Name\":\"West Riding of Yorkshire, England\",\"Code\":\"WRY\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/7783e2f6-ded1-4703-aa2b-9fc844f28018.json",
    "content": "{\"Id\":\"7783e2f6-ded1-4703-aa2b-9fc844f28018\",\"CountryId\":\"38dc01c3-48d8-4ff8-a78a-2c35d4fbfa7b\",\"Name\":\"Caceres\",\"Code\":\"Caceres\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/7786d5ce-a4f9-4cf0-82fd-25a7ebe39fc5.json",
    "content": "{\"Id\":\"7786d5ce-a4f9-4cf0-82fd-25a7ebe39fc5\",\"CountryId\":\"1fcc4a89-0e8f-4fa2-b8d0-4ff5ec2277df\",\"Name\":\"Caithness, Scotland\",\"Code\":\"CAI\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/780d9ddb-38a2-47c8-a162-1231bea2e54d.json",
    "content": "{\"Id\":\"780d9ddb-38a2-47c8-a162-1231bea2e54d\",\"CountryId\":\"60ce9ab1-945d-4fef-aba8-a1bb640165be\",\"Name\":\"Bern\",\"Code\":\"BE\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/79b41943-7a78-4cec-857d-1fb89d34d301.json",
    "content": "{\"Id\":\"79b41943-7a78-4cec-857d-1fb89d34d301\",\"CountryId\":\"13faa99e-18f2-4e6f-b275-1e785b3383f3\",\"Name\":\"Santa Catarina\",\"Code\":\"SC\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/7a2ade5f-8353-4326-a46d-a42d31370d2c.json",
    "content": "{\"Id\":\"7a2ade5f-8353-4326-a46d-a42d31370d2c\",\"CountryId\":\"1fcc4a89-0e8f-4fa2-b8d0-4ff5ec2277df\",\"Name\":\"Westmorland, England\",\"Code\":\"WES\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/7ace8e48-a0c5-48ee-b992-ae6eb7142408.json",
    "content": "{\"Id\":\"7ace8e48-a0c5-48ee-b992-ae6eb7142408\",\"CountryId\":\"2d5b53a8-8341-4da4-a296-e516fe5bb953\",\"Name\":\"Mecklenburg-Vorpommern\",\"Code\":\"MEC\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/7bf366d4-e9fc-4715-b7f9-1af37cc97386.json",
    "content": "{\"Id\":\"7bf366d4-e9fc-4715-b7f9-1af37cc97386\",\"CountryId\":\"a71d6727-61e7-4282-9fcb-526d1e7bc24f\",\"Name\":\"Arkansas\",\"Code\":\"AR\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/7c68c309-608d-4089-adbc-f5289d67aa57.json",
    "content": "{\"Id\":\"7c68c309-608d-4089-adbc-f5289d67aa57\",\"CountryId\":\"1fcc4a89-0e8f-4fa2-b8d0-4ff5ec2277df\",\"Name\":\"Co. Donegal, Ireland\",\"Code\":\"DON\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/7ce436e6-349d-4f41-9053-5d7666662bb8.json",
    "content": "{\"Id\":\"7ce436e6-349d-4f41-9053-5d7666662bb8\",\"CountryId\":\"38dc01c3-48d8-4ff8-a78a-2c35d4fbfa7b\",\"Name\":\"Leon\",\"Code\":\"Leon\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/7dc834f4-c490-4986-bfbc-10dfc94e235c.json",
    "content": "{\"Id\":\"7dc834f4-c490-4986-bfbc-10dfc94e235c\",\"CountryId\":\"38dc01c3-48d8-4ff8-a78a-2c35d4fbfa7b\",\"Name\":\"Teruel\",\"Code\":\"Teruel\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/7fcce82b-7828-40c9-a860-a21a787780c2.json",
    "content": "{\"Id\":\"7fcce82b-7828-40c9-a860-a21a787780c2\",\"CountryId\":\"2d5b53a8-8341-4da4-a296-e516fe5bb953\",\"Name\":\"Bremen\",\"Code\":\"BRE\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/80717ff0-5218-4119-9128-cef942826edc.json",
    "content": "{\"Id\":\"80717ff0-5218-4119-9128-cef942826edc\",\"CountryId\":\"1fcc4a89-0e8f-4fa2-b8d0-4ff5ec2277df\",\"Name\":\"Berkshire, England\",\"Code\":\"BRK\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/843c2659-d2bf-4af0-a0aa-ee8c268bede7.json",
    "content": "{\"Id\":\"843c2659-d2bf-4af0-a0aa-ee8c268bede7\",\"CountryId\":\"1fcc4a89-0e8f-4fa2-b8d0-4ff5ec2277df\",\"Name\":\"Buckinghamshire, England\",\"Code\":\"BKM\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/849c05f0-9448-4013-8566-88ff891d1f6e.json",
    "content": "{\"Id\":\"849c05f0-9448-4013-8566-88ff891d1f6e\",\"CountryId\":\"1fcc4a89-0e8f-4fa2-b8d0-4ff5ec2277df\",\"Name\":\"Northamptonshire, England\",\"Code\":\"NTH\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/84bf6b91-f9ff-4203-bad1-b5cf01239b77.json",
    "content": "{\"Id\":\"84bf6b91-f9ff-4203-bad1-b5cf01239b77\",\"CountryId\":\"a71d6727-61e7-4282-9fcb-526d1e7bc24f\",\"Name\":\"Kentucky\",\"Code\":\"KY\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/8587e33e-25fc-4c19-b504-0c93c027dd93.json",
    "content": "{\"Id\":\"8587e33e-25fc-4c19-b504-0c93c027dd93\",\"CountryId\":\"a71d6727-61e7-4282-9fcb-526d1e7bc24f\",\"Name\":\"New Hampshire\",\"Code\":\"NH\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/85f3b62e-d3e7-4dec-b13b-dd494ad7b2cc.json",
    "content": "{\"Id\":\"85f3b62e-d3e7-4dec-b13b-dd494ad7b2cc\",\"CountryId\":\"a71d6727-61e7-4282-9fcb-526d1e7bc24f\",\"Name\":\"Idaho\",\"Code\":\"ID\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/86bdbe5d-4085-4916-984c-94c191c48c67.json",
    "content": "{\"Id\":\"86bdbe5d-4085-4916-984c-94c191c48c67\",\"CountryId\":\"60ce9ab1-945d-4fef-aba8-a1bb640165be\",\"Name\":\"Schwyz\",\"Code\":\"SZ\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/87268168-cf40-442f-a526-06ddaeb1befd.json",
    "content": "{\"Id\":\"87268168-cf40-442f-a526-06ddaeb1befd\",\"CountryId\":\"a71d6727-61e7-4282-9fcb-526d1e7bc24f\",\"Name\":\"Michigan\",\"Code\":\"MI\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/87c1483d-e471-4166-87cb-44f9c4459aa8.json",
    "content": "{\"Id\":\"87c1483d-e471-4166-87cb-44f9c4459aa8\",\"CountryId\":\"2d5b53a8-8341-4da4-a296-e516fe5bb953\",\"Name\":\"Bayern\",\"Code\":\"BAY\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/87ceb5af-d6c0-4189-88f2-f0b38e2223a6.json",
    "content": "{\"Id\":\"87ceb5af-d6c0-4189-88f2-f0b38e2223a6\",\"CountryId\":\"1fcc4a89-0e8f-4fa2-b8d0-4ff5ec2277df\",\"Name\":\"Nairn, Scotland\",\"Code\":\"NAI\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/87e6c0a9-ac01-457a-b759-0c10fc63605d.json",
    "content": "{\"Id\":\"87e6c0a9-ac01-457a-b759-0c10fc63605d\",\"CountryId\":\"1fcc4a89-0e8f-4fa2-b8d0-4ff5ec2277df\",\"Name\":\"Monmouthshire, Wales\",\"Code\":\"MON\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/883b8625-3130-4aac-b239-e57cf79c020b.json",
    "content": "{\"Id\":\"883b8625-3130-4aac-b239-e57cf79c020b\",\"CountryId\":\"1fcc4a89-0e8f-4fa2-b8d0-4ff5ec2277df\",\"Name\":\"Wales\",\"Code\":\"WLS\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/8a4e0e4c-2727-42cd-86d6-ed27a6a6b74b.json",
    "content": "{\"Id\":\"8a4e0e4c-2727-42cd-86d6-ed27a6a6b74b\",\"CountryId\":\"38dc01c3-48d8-4ff8-a78a-2c35d4fbfa7b\",\"Name\":\"Cordoba\",\"Code\":\"Cordoba\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/8a6db145-7ff4-4dfa-ac88-ea161924ea03.json",
    "content": "{\"Id\":\"8a6db145-7ff4-4dfa-ac88-ea161924ea03\",\"CountryId\":\"60ce9ab1-945d-4fef-aba8-a1bb640165be\",\"Name\":\"Freiburg\",\"Code\":\"FR\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/8b1fe477-db16-4dcb-92f0-dcbf2f1de8cb.json",
    "content": "{\"Id\":\"8b1fe477-db16-4dcb-92f0-dcbf2f1de8cb\",\"CountryId\":\"a71d6727-61e7-4282-9fcb-526d1e7bc24f\",\"Name\":\"Vermont\",\"Code\":\"VT\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/8b3c48fd-9e7e-4653-a711-6dac6971cb32.json",
    "content": "{\"Id\":\"8b3c48fd-9e7e-4653-a711-6dac6971cb32\",\"CountryId\":\"60ce9ab1-945d-4fef-aba8-a1bb640165be\",\"Name\":\"Obwalden\",\"Code\":\"OW\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/8bc664a9-b12c-4f48-af34-a7f68384a76a.json",
    "content": "{\"Id\":\"8bc664a9-b12c-4f48-af34-a7f68384a76a\",\"CountryId\":\"38dc01c3-48d8-4ff8-a78a-2c35d4fbfa7b\",\"Name\":\"Badajoz\",\"Code\":\"Badajoz\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/8bd9d2b9-67db-4fd6-90c7-52d0426e2007.json",
    "content": "{\"Id\":\"8bd9d2b9-67db-4fd6-90c7-52d0426e2007\",\"CountryId\":\"a71d6727-61e7-4282-9fcb-526d1e7bc24f\",\"Name\":\"Guam\",\"Code\":\"GU\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/8ee2f892-4ee6-44f5-938a-b553e885161a.json",
    "content": "{\"Id\":\"8ee2f892-4ee6-44f5-938a-b553e885161a\",\"CountryId\":\"a71d6727-61e7-4282-9fcb-526d1e7bc24f\",\"Name\":\"Pennsylvania\",\"Code\":\"PA\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/8fab7d36-b885-46cd-9dc8-41e40c8683c4.json",
    "content": "{\"Id\":\"8fab7d36-b885-46cd-9dc8-41e40c8683c4\",\"CountryId\":\"13faa99e-18f2-4e6f-b275-1e785b3383f3\",\"Name\":\"Sao Paulo\",\"Code\":\"SP\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/8ff34a94-016c-4046-9c39-99f1887c4cb9.json",
    "content": "{\"Id\":\"8ff34a94-016c-4046-9c39-99f1887c4cb9\",\"CountryId\":\"1fcc4a89-0e8f-4fa2-b8d0-4ff5ec2277df\",\"Name\":\"Kent, England\",\"Code\":\"KEN\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/9013454d-1873-4be6-8fb1-b503ae1ed652.json",
    "content": "{\"Id\":\"9013454d-1873-4be6-8fb1-b503ae1ed652\",\"CountryId\":\"1fcc4a89-0e8f-4fa2-b8d0-4ff5ec2277df\",\"Name\":\"East Lothian, Scotland\",\"Code\":\"ELN\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/91bf4254-f418-404a-8cb2-5449d498991e.json",
    "content": "{\"Id\":\"91bf4254-f418-404a-8cb2-5449d498991e\",\"CountryId\":\"13faa99e-18f2-4e6f-b275-1e785b3383f3\",\"Name\":\"Amazonas\",\"Code\":\"AM\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/93215e73-4df8-4609-ac37-9da1b9bfe1c9.json",
    "content": "{\"Id\":\"93215e73-4df8-4609-ac37-9da1b9bfe1c9\",\"CountryId\":\"0c356c5a-ca44-4301-8212-1826ccdadc42\",\"Name\":\"Saskatchewan\",\"Code\":\"SK\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/933cd9ef-c021-48ed-8260-6c013685970f.json",
    "content": "{\"Id\":\"933cd9ef-c021-48ed-8260-6c013685970f\",\"CountryId\":\"a71d6727-61e7-4282-9fcb-526d1e7bc24f\",\"Name\":\"Florida\",\"Code\":\"FL\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/93cdd758-cc83-4f5a-94c0-9a3d13c7fa44.json",
    "content": "{\"Id\":\"93cdd758-cc83-4f5a-94c0-9a3d13c7fa44\",\"CountryId\":\"a71d6727-61e7-4282-9fcb-526d1e7bc24f\",\"Name\":\"Armed Forces Europe\",\"Code\":\"AE\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/9451f5b9-3dbc-4c17-83b9-8966350d26ca.json",
    "content": "{\"Id\":\"9451f5b9-3dbc-4c17-83b9-8966350d26ca\",\"CountryId\":\"1fcc4a89-0e8f-4fa2-b8d0-4ff5ec2277df\",\"Name\":\"Co. Roscommon, Ireland\",\"Code\":\"ROS\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/956b1071-d4c1-4676-be0c-e8834e47b674.json",
    "content": "{\"Id\":\"956b1071-d4c1-4676-be0c-e8834e47b674\",\"CountryId\":\"38dc01c3-48d8-4ff8-a78a-2c35d4fbfa7b\",\"Name\":\"Burgos\",\"Code\":\"Burgos\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/958cf4dd-04be-48e3-93e1-3bea8b80edcf.json",
    "content": "{\"Id\":\"958cf4dd-04be-48e3-93e1-3bea8b80edcf\",\"CountryId\":\"1fcc4a89-0e8f-4fa2-b8d0-4ff5ec2277df\",\"Name\":\"Grampian, Scotland\",\"Code\":\"GMP\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/95f80d75-23bc-4710-a106-bb98204059de.json",
    "content": "{\"Id\":\"95f80d75-23bc-4710-a106-bb98204059de\",\"CountryId\":\"1fcc4a89-0e8f-4fa2-b8d0-4ff5ec2277df\",\"Name\":\"Dyfed, Wales\",\"Code\":\"DFD\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/962d2729-cc0c-4052-abc9-c696307f3f26.json",
    "content": "{\"Id\":\"962d2729-cc0c-4052-abc9-c696307f3f26\",\"CountryId\":\"06bb7816-9ad4-47dc-b1cd-6e206afdfcca\",\"Name\":\"Voralberg\",\"Code\":\"VB\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/968a394f-7764-4dfc-adb3-bf881644eddf.json",
    "content": "{\"Id\":\"968a394f-7764-4dfc-adb3-bf881644eddf\",\"CountryId\":\"1fcc4a89-0e8f-4fa2-b8d0-4ff5ec2277df\",\"Name\":\"South Yorkshire, England\",\"Code\":\"SYK\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/978ecaab-c462-4d66-80b6-a65eb83b86a5.json",
    "content": "{\"Id\":\"978ecaab-c462-4d66-80b6-a65eb83b86a5\",\"CountryId\":\"a71d6727-61e7-4282-9fcb-526d1e7bc24f\",\"Name\":\"South Dakota\",\"Code\":\"SD\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/981b0264-12a2-43be-b0c6-54e81c960138.json",
    "content": "{\"Id\":\"981b0264-12a2-43be-b0c6-54e81c960138\",\"CountryId\":\"1fcc4a89-0e8f-4fa2-b8d0-4ff5ec2277df\",\"Name\":\"Co. Antrim, Northern Ireland\",\"Code\":\"ANT\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/98f9db63-a224-462b-8765-240953489cbb.json",
    "content": "{\"Id\":\"98f9db63-a224-462b-8765-240953489cbb\",\"CountryId\":\"1fcc4a89-0e8f-4fa2-b8d0-4ff5ec2277df\",\"Name\":\"Borders, Scotland\",\"Code\":\"BOR\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/993207ec-34a5-4896-88b0-3c43ccd11ab2.json",
    "content": "{\"Id\":\"993207ec-34a5-4896-88b0-3c43ccd11ab2\",\"CountryId\":\"a71d6727-61e7-4282-9fcb-526d1e7bc24f\",\"Name\":\"Armed Forces Canada\",\"Code\":\"AC\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/9958d966-7824-4dea-94a4-725fcf96f0d0.json",
    "content": "{\"Id\":\"9958d966-7824-4dea-94a4-725fcf96f0d0\",\"CountryId\":\"1fcc4a89-0e8f-4fa2-b8d0-4ff5ec2277df\",\"Name\":\"Scotland\",\"Code\":\"SCT\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/997fd24b-e5c6-474a-8c70-dbe6652b9267.json",
    "content": "{\"Id\":\"997fd24b-e5c6-474a-8c70-dbe6652b9267\",\"CountryId\":\"1fcc4a89-0e8f-4fa2-b8d0-4ff5ec2277df\",\"Name\":\"Co. Fermanagh, Northern Ireland\",\"Code\":\"FER\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/9bc8834b-01ce-40a2-8be1-8e20c24d1f11.json",
    "content": "{\"Id\":\"9bc8834b-01ce-40a2-8be1-8e20c24d1f11\",\"CountryId\":\"1fcc4a89-0e8f-4fa2-b8d0-4ff5ec2277df\",\"Name\":\"Gwynedd, Wales\",\"Code\":\"GWN\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/9c24162b-10de-47c1-b55f-0dcaaa24f86e.json",
    "content": "{\"Id\":\"9c24162b-10de-47c1-b55f-0dcaaa24f86e\",\"CountryId\":\"60ce9ab1-945d-4fef-aba8-a1bb640165be\",\"Name\":\"Nidwalden\",\"Code\":\"NW\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/9c9951d7-68d2-438a-a702-4289cbc1720e.json",
    "content": "{\"Id\":\"9c9951d7-68d2-438a-a702-4289cbc1720e\",\"CountryId\":\"38dc01c3-48d8-4ff8-a78a-2c35d4fbfa7b\",\"Name\":\"Valencia\",\"Code\":\"Valencia\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/9d10e877-aaec-4913-bc99-b9815af76bf2.json",
    "content": "{\"Id\":\"9d10e877-aaec-4913-bc99-b9815af76bf2\",\"CountryId\":\"1fcc4a89-0e8f-4fa2-b8d0-4ff5ec2277df\",\"Name\":\"Co. Kilkenny, Ireland\",\"Code\":\"KIK\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/9d62722c-7fcc-432c-8587-c7953e440e18.json",
    "content": "{\"Id\":\"9d62722c-7fcc-432c-8587-c7953e440e18\",\"CountryId\":\"1fcc4a89-0e8f-4fa2-b8d0-4ff5ec2277df\",\"Name\":\"Shetland, Scotland\",\"Code\":\"SHI\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/9fb374c6-b87c-4096-a43c-d3d9ff2fd04c.json",
    "content": "{\"Id\":\"9fb374c6-b87c-4096-a43c-d3d9ff2fd04c\",\"CountryId\":\"13faa99e-18f2-4e6f-b275-1e785b3383f3\",\"Name\":\"Distrito Federal\",\"Code\":\"DF\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/a0984f35-6af2-493d-be85-903d453193c2.json",
    "content": "{\"Id\":\"a0984f35-6af2-493d-be85-903d453193c2\",\"CountryId\":\"1fcc4a89-0e8f-4fa2-b8d0-4ff5ec2277df\",\"Name\":\"Carmarthenshire, Wales\",\"Code\":\"CMN\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/a1b99e38-1a7f-4b2f-927b-fcbdfccbc198.json",
    "content": "{\"Id\":\"a1b99e38-1a7f-4b2f-927b-fcbdfccbc198\",\"CountryId\":\"1fcc4a89-0e8f-4fa2-b8d0-4ff5ec2277df\",\"Name\":\"Co. Armagh, Northern Ireland\",\"Code\":\"ARM\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/a1eaba97-8f4f-4149-b1e3-25cb19b145b7.json",
    "content": "{\"Id\":\"a1eaba97-8f4f-4149-b1e3-25cb19b145b7\",\"CountryId\":\"1fcc4a89-0e8f-4fa2-b8d0-4ff5ec2277df\",\"Name\":\"Hampshire, England\",\"Code\":\"HAM\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/a2ee590a-0b2e-4688-8c87-83011d5d2d3b.json",
    "content": "{\"Id\":\"a2ee590a-0b2e-4688-8c87-83011d5d2d3b\",\"CountryId\":\"1fcc4a89-0e8f-4fa2-b8d0-4ff5ec2277df\",\"Name\":\"Norfolk, England\",\"Code\":\"NFK\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/a34df017-1334-4f1f-aab8-f650425f937d.json",
    "content": "{\"Id\":\"a34df017-1334-4f1f-aab8-f650425f937d\",\"CountryId\":\"06bb7816-9ad4-47dc-b1cd-6e206afdfcca\",\"Name\":\"Kärnten\",\"Code\":\"KN\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/a39f8a9a-6586-41fb-9d5f-f84bd5161333.json",
    "content": "{\"Id\":\"a39f8a9a-6586-41fb-9d5f-f84bd5161333\",\"CountryId\":\"a71d6727-61e7-4282-9fcb-526d1e7bc24f\",\"Name\":\"Kansas\",\"Code\":\"KS\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/a3a183ae-8117-46c0-93b7-3940c7e5694f.json",
    "content": "{\"Id\":\"a3a183ae-8117-46c0-93b7-3940c7e5694f\",\"CountryId\":\"a71d6727-61e7-4282-9fcb-526d1e7bc24f\",\"Name\":\"Armed Forces Americas\",\"Code\":\"AA\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/a3cb237b-a940-418f-8368-fa6e35263e22.json",
    "content": "{\"Id\":\"a3cb237b-a940-418f-8368-fa6e35263e22\",\"CountryId\":\"38dc01c3-48d8-4ff8-a78a-2c35d4fbfa7b\",\"Name\":\"Asturias\",\"Code\":\"Asturias\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/a540b300-1715-4677-aa6a-9ee79e6fef2e.json",
    "content": "{\"Id\":\"a540b300-1715-4677-aa6a-9ee79e6fef2e\",\"CountryId\":\"1fcc4a89-0e8f-4fa2-b8d0-4ff5ec2277df\",\"Name\":\"Wigtownshire, Scotland\",\"Code\":\"WIG\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/a63a1dff-8f61-4159-9bc5-f005f8bcc19f.json",
    "content": "{\"Id\":\"a63a1dff-8f61-4159-9bc5-f005f8bcc19f\",\"CountryId\":\"1fcc4a89-0e8f-4fa2-b8d0-4ff5ec2277df\",\"Name\":\"Inverness-shire, Scotland\",\"Code\":\"INV\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/a67bbf90-32f8-45d0-8c9a-1af135ea6225.json",
    "content": "{\"Id\":\"a67bbf90-32f8-45d0-8c9a-1af135ea6225\",\"CountryId\":\"1fcc4a89-0e8f-4fa2-b8d0-4ff5ec2277df\",\"Name\":\"Kinross-shire, Scotland\",\"Code\":\"KRS\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/a6ed9918-44c7-4975-b680-95b4abcfb7ac.json",
    "content": "{\"Id\":\"a6ed9918-44c7-4975-b680-95b4abcfb7ac\",\"CountryId\":\"06bb7816-9ad4-47dc-b1cd-6e206afdfcca\",\"Name\":\"Salzburg\",\"Code\":\"SB\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/a91bf8c6-0f2b-4ea8-8b98-3f70cd240bc2.json",
    "content": "{\"Id\":\"a91bf8c6-0f2b-4ea8-8b98-3f70cd240bc2\",\"CountryId\":\"1fcc4a89-0e8f-4fa2-b8d0-4ff5ec2277df\",\"Name\":\"Suffolk, England\",\"Code\":\"SFK\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/aa492ac6-e3b1-4408-b503-81480b57f008.json",
    "content": "{\"Id\":\"aa492ac6-e3b1-4408-b503-81480b57f008\",\"CountryId\":\"38dc01c3-48d8-4ff8-a78a-2c35d4fbfa7b\",\"Name\":\"Ourense\",\"Code\":\"Ourense\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/ab47df32-c57d-412b-b04d-67378c120ae7.json",
    "content": "{\"Id\":\"ab47df32-c57d-412b-b04d-67378c120ae7\",\"CountryId\":\"a71d6727-61e7-4282-9fcb-526d1e7bc24f\",\"Name\":\"Armed Forces Pacific\",\"Code\":\"AP\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/ac353aac-e2b7-4899-94f9-0bad7418ace9.json",
    "content": "{\"Id\":\"ac353aac-e2b7-4899-94f9-0bad7418ace9\",\"CountryId\":\"1fcc4a89-0e8f-4fa2-b8d0-4ff5ec2277df\",\"Name\":\"Kincardineshire, Scotland\",\"Code\":\"KCD\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/ad9e0130-b735-4be0-9338-99e20bb9410d.json",
    "content": "{\"Id\":\"ad9e0130-b735-4be0-9338-99e20bb9410d\",\"CountryId\":\"2d5b53a8-8341-4da4-a296-e516fe5bb953\",\"Name\":\"Thüringen\",\"Code\":\"THE\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/ae1faeaf-d3f8-484e-b5a8-4548441ae758.json",
    "content": "{\"Id\":\"ae1faeaf-d3f8-484e-b5a8-4548441ae758\",\"CountryId\":\"1fcc4a89-0e8f-4fa2-b8d0-4ff5ec2277df\",\"Name\":\"Co. Westmeath, Ireland\",\"Code\":\"WEM\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/afa207c7-e69d-46f0-8242-2a67a06c42e3.json",
    "content": "{\"Id\":\"afa207c7-e69d-46f0-8242-2a67a06c42e3\",\"CountryId\":\"60ce9ab1-945d-4fef-aba8-a1bb640165be\",\"Name\":\"Appenzell Innerrhoden\",\"Code\":\"AI\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/b009fd08-9cb2-4cd4-85cc-ed7c3e413f59.json",
    "content": "{\"Id\":\"b009fd08-9cb2-4cd4-85cc-ed7c3e413f59\",\"CountryId\":\"1fcc4a89-0e8f-4fa2-b8d0-4ff5ec2277df\",\"Name\":\"Co. Londonderry, Northern Ireland\",\"Code\":\"LDY\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/b00a500e-73d6-4229-93cc-99a255266c86.json",
    "content": "{\"Id\":\"b00a500e-73d6-4229-93cc-99a255266c86\",\"CountryId\":\"1fcc4a89-0e8f-4fa2-b8d0-4ff5ec2277df\",\"Name\":\"North Yorkshire, England\",\"Code\":\"NYK\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/b0720a71-450b-4912-810e-871c8ef518e2.json",
    "content": "{\"Id\":\"b0720a71-450b-4912-810e-871c8ef518e2\",\"CountryId\":\"1fcc4a89-0e8f-4fa2-b8d0-4ff5ec2277df\",\"Name\":\"Highland, Scotland\",\"Code\":\"HLD\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/b11a9785-c227-47ed-a14e-402a4b5360c7.json",
    "content": "{\"Id\":\"b11a9785-c227-47ed-a14e-402a4b5360c7\",\"CountryId\":\"1fcc4a89-0e8f-4fa2-b8d0-4ff5ec2277df\",\"Name\":\"West Yorkshire, England\",\"Code\":\"WYK\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/b299cad1-f84c-4aa7-b63a-2746b25baaaa.json",
    "content": "{\"Id\":\"b299cad1-f84c-4aa7-b63a-2746b25baaaa\",\"CountryId\":\"1fcc4a89-0e8f-4fa2-b8d0-4ff5ec2277df\",\"Name\":\"Lothian, Scotland\",\"Code\":\"LTN\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/b2b175a4-09ba-4e25-919c-9de52109bf4d.json",
    "content": "{\"Id\":\"b2b175a4-09ba-4e25-919c-9de52109bf4d\",\"CountryId\":\"2d5b53a8-8341-4da4-a296-e516fe5bb953\",\"Name\":\"Brandenburg\",\"Code\":\"BRG\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/b411f228-7677-4203-8696-df1a65e1651f.json",
    "content": "{\"Id\":\"b411f228-7677-4203-8696-df1a65e1651f\",\"CountryId\":\"1fcc4a89-0e8f-4fa2-b8d0-4ff5ec2277df\",\"Name\":\"East Sussex, England\",\"Code\":\"SXE\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/b519aaaf-7e2c-421f-88b8-bf7853a8de4f.json",
    "content": "{\"Id\":\"b519aaaf-7e2c-421f-88b8-bf7853a8de4f\",\"CountryId\":\"60ce9ab1-945d-4fef-aba8-a1bb640165be\",\"Name\":\"Tessin\",\"Code\":\"TI\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/b5812090-e7e1-492b-b9bc-04fec3ec9492.json",
    "content": "{\"Id\":\"b5812090-e7e1-492b-b9bc-04fec3ec9492\",\"CountryId\":\"a71d6727-61e7-4282-9fcb-526d1e7bc24f\",\"Name\":\"Hawaii\",\"Code\":\"HI\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/b588e3f6-0078-454c-809a-480c575e5200.json",
    "content": "{\"Id\":\"b588e3f6-0078-454c-809a-480c575e5200\",\"CountryId\":\"1fcc4a89-0e8f-4fa2-b8d0-4ff5ec2277df\",\"Name\":\"Perth, Scotland\",\"Code\":\"PER\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/b5ebabd8-7a23-4006-8044-5049fcf8a762.json",
    "content": "{\"Id\":\"b5ebabd8-7a23-4006-8044-5049fcf8a762\",\"CountryId\":\"1fcc4a89-0e8f-4fa2-b8d0-4ff5ec2277df\",\"Name\":\"Greater Manchester, England\",\"Code\":\"GTM\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/b5feb85c-2dc0-4776-ba5c-8c2d1b688e89.json",
    "content": "{\"Id\":\"b5feb85c-2dc0-4776-ba5c-8c2d1b688e89\",\"CountryId\":\"06bb7816-9ad4-47dc-b1cd-6e206afdfcca\",\"Name\":\"Wien\",\"Code\":\"WI\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/b716403c-6b15-488b-9cd0-f60b1aa1ba41.json",
    "content": "{\"Id\":\"b716403c-6b15-488b-9cd0-f60b1aa1ba41\",\"CountryId\":\"0c356c5a-ca44-4301-8212-1826ccdadc42\",\"Name\":\"New Brunswick\",\"Code\":\"NB\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/b7500c17-30c7-4d87-bb47-bb35d8b1d3a6.json",
    "content": "{\"Id\":\"b7500c17-30c7-4d87-bb47-bb35d8b1d3a6\",\"CountryId\":\"38dc01c3-48d8-4ff8-a78a-2c35d4fbfa7b\",\"Name\":\"Navarra\",\"Code\":\"Navarra\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/b7aed2ab-9e68-45d1-b535-fe6c1ec2d892.json",
    "content": "{\"Id\":\"b7aed2ab-9e68-45d1-b535-fe6c1ec2d892\",\"CountryId\":\"1fcc4a89-0e8f-4fa2-b8d0-4ff5ec2277df\",\"Name\":\"Merseyside, England\",\"Code\":\"MSY\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/b8029f8e-0a19-41a5-a2f0-cf8f0e1a69c6.json",
    "content": "{\"Id\":\"b8029f8e-0a19-41a5-a2f0-cf8f0e1a69c6\",\"CountryId\":\"1fcc4a89-0e8f-4fa2-b8d0-4ff5ec2277df\",\"Name\":\"Co. Meath, Ireland\",\"Code\":\"MEA\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/b8bf0b26-2f14-49e4-bfda-2d01eafa364b.json",
    "content": "{\"Id\":\"b8bf0b26-2f14-49e4-bfda-2d01eafa364b\",\"CountryId\":\"a71d6727-61e7-4282-9fcb-526d1e7bc24f\",\"Name\":\"Alabama\",\"Code\":\"AL\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/b9032648-36dc-4903-a5e6-30abd7519754.json",
    "content": "{\"Id\":\"b9032648-36dc-4903-a5e6-30abd7519754\",\"CountryId\":\"1fcc4a89-0e8f-4fa2-b8d0-4ff5ec2277df\",\"Name\":\"Caernarvonshire, Wales\",\"Code\":\"CAE\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/b9093677-f26a-4b47-ad98-12caed313044.json",
    "content": "{\"Id\":\"b9093677-f26a-4b47-ad98-12caed313044\",\"CountryId\":\"a71d6727-61e7-4282-9fcb-526d1e7bc24f\",\"Name\":\"Wisconsin\",\"Code\":\"WI\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/b9720a4e-9ca0-4120-a7cf-f81138b1db63.json",
    "content": "{\"Id\":\"b9720a4e-9ca0-4120-a7cf-f81138b1db63\",\"CountryId\":\"1fcc4a89-0e8f-4fa2-b8d0-4ff5ec2277df\",\"Name\":\"Co. Clare, Ireland\",\"Code\":\"CLA\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/b9f64887-ed6d-4ddc-a142-7eb8898ca47e.json",
    "content": "{\"Id\":\"b9f64887-ed6d-4ddc-a142-7eb8898ca47e\",\"CountryId\":\"13faa99e-18f2-4e6f-b275-1e785b3383f3\",\"Name\":\"Pernambuco\",\"Code\":\"PE\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/b9f911eb-f762-4da4-a81f-9bc967cd3c4b.json",
    "content": "{\"Id\":\"b9f911eb-f762-4da4-a81f-9bc967cd3c4b\",\"CountryId\":\"60ce9ab1-945d-4fef-aba8-a1bb640165be\",\"Name\":\"Waadt\",\"Code\":\"VD\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/ba3c2043-cc3e-4225-b28e-bdb18c1a79ef.json",
    "content": "{\"Id\":\"ba3c2043-cc3e-4225-b28e-bdb18c1a79ef\",\"CountryId\":\"2d5b53a8-8341-4da4-a296-e516fe5bb953\",\"Name\":\"Hessen\",\"Code\":\"HES\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/ba5a801b-11c6-4408-b097-08aac22e739e.json",
    "content": "{\"Id\":\"ba5a801b-11c6-4408-b097-08aac22e739e\",\"CountryId\":\"a71d6727-61e7-4282-9fcb-526d1e7bc24f\",\"Name\":\"South Carolina\",\"Code\":\"SC\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/baa695ab-a67a-409f-9f74-189ab212260c.json",
    "content": "{\"Id\":\"baa695ab-a67a-409f-9f74-189ab212260c\",\"CountryId\":\"1fcc4a89-0e8f-4fa2-b8d0-4ff5ec2277df\",\"Name\":\"Gwent, Wales\",\"Code\":\"GNT\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/baf9725f-0d57-4c84-b018-d6d55d00a647.json",
    "content": "{\"Id\":\"baf9725f-0d57-4c84-b018-d6d55d00a647\",\"CountryId\":\"1fcc4a89-0e8f-4fa2-b8d0-4ff5ec2277df\",\"Name\":\"Co. Wicklow, Ireland\",\"Code\":\"WIC\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/bb090ce7-e0ca-4d0d-96eb-1b8e044fbca8.json",
    "content": "{\"Id\":\"bb090ce7-e0ca-4d0d-96eb-1b8e044fbca8\",\"CountryId\":\"38dc01c3-48d8-4ff8-a78a-2c35d4fbfa7b\",\"Name\":\"Melilla\",\"Code\":\"Melilla\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/bb607ecb-df31-427b-88bb-4f53959b3e0c.json",
    "content": "{\"Id\":\"bb607ecb-df31-427b-88bb-4f53959b3e0c\",\"CountryId\":\"06bb7816-9ad4-47dc-b1cd-6e206afdfcca\",\"Name\":\"Niederösterreich\",\"Code\":\"NO\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/bbd4704a-100a-4533-9ac9-37c228711dae.json",
    "content": "{\"Id\":\"bbd4704a-100a-4533-9ac9-37c228711dae\",\"CountryId\":\"1fcc4a89-0e8f-4fa2-b8d0-4ff5ec2277df\",\"Name\":\"Co. Cork, Ireland\",\"Code\":\"COR\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/bcea3dbc-debb-483e-85b9-a3e47ff68dbf.json",
    "content": "{\"Id\":\"bcea3dbc-debb-483e-85b9-a3e47ff68dbf\",\"CountryId\":\"1fcc4a89-0e8f-4fa2-b8d0-4ff5ec2277df\",\"Name\":\"Cumbria, England\",\"Code\":\"CMA\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/bec44d04-ec8e-45a8-af09-21468ad9994f.json",
    "content": "{\"Id\":\"bec44d04-ec8e-45a8-af09-21468ad9994f\",\"CountryId\":\"1fcc4a89-0e8f-4fa2-b8d0-4ff5ec2277df\",\"Name\":\"South Glamorgan, Wales\",\"Code\":\"SGM\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/c1983f1d-353a-4042-b097-f0e8237f7fcd.json",
    "content": "{\"Id\":\"c1983f1d-353a-4042-b097-f0e8237f7fcd\",\"CountryId\":\"60ce9ab1-945d-4fef-aba8-a1bb640165be\",\"Name\":\"St. Gallen\",\"Code\":\"SG\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/c26cfb75-5e44-4156-b660-a18a2a487fec.json",
    "content": "{\"Id\":\"c26cfb75-5e44-4156-b660-a18a2a487fec\",\"CountryId\":\"38dc01c3-48d8-4ff8-a78a-2c35d4fbfa7b\",\"Name\":\"Murcia\",\"Code\":\"Murcia\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/c2ba8e9e-d370-4639-b168-c51057e2397e.json",
    "content": "{\"Id\":\"c2ba8e9e-d370-4639-b168-c51057e2397e\",\"CountryId\":\"38dc01c3-48d8-4ff8-a78a-2c35d4fbfa7b\",\"Name\":\"Guadalajara\",\"Code\":\"Guadalajara\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/c2c00caa-3c72-4b5e-a07f-6f605926ef8e.json",
    "content": "{\"Id\":\"c2c00caa-3c72-4b5e-a07f-6f605926ef8e\",\"CountryId\":\"1fcc4a89-0e8f-4fa2-b8d0-4ff5ec2277df\",\"Name\":\"Sutherland, Scotland\",\"Code\":\"SUT\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/c3e70597-e8dd-4277-b7fc-e9b4206da073.json",
    "content": "{\"Id\":\"c3e70597-e8dd-4277-b7fc-e9b4206da073\",\"CountryId\":\"a71d6727-61e7-4282-9fcb-526d1e7bc24f\",\"Name\":\"Connecticut\",\"Code\":\"CT\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/c427a41a-2fd0-4621-a7b1-090ee19f2eba.json",
    "content": "{\"Id\":\"c427a41a-2fd0-4621-a7b1-090ee19f2eba\",\"CountryId\":\"1fcc4a89-0e8f-4fa2-b8d0-4ff5ec2277df\",\"Name\":\"Morayshire, Scotland\",\"Code\":\"MOR\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/c4fa438d-7130-4ae0-9f5d-fb533afc3139.json",
    "content": "{\"Id\":\"c4fa438d-7130-4ae0-9f5d-fb533afc3139\",\"CountryId\":\"1fcc4a89-0e8f-4fa2-b8d0-4ff5ec2277df\",\"Name\":\"Cardiganshire, Wales\",\"Code\":\"CGN\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/c5b34c76-5bf8-423f-a56f-985cc545ade8.json",
    "content": "{\"Id\":\"c5b34c76-5bf8-423f-a56f-985cc545ade8\",\"CountryId\":\"1fcc4a89-0e8f-4fa2-b8d0-4ff5ec2277df\",\"Name\":\"Banffshire, Scotland\",\"Code\":\"BAN\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/c5d128d8-353a-43dc-ba0a-d0c35e33de17.json",
    "content": "{\"Id\":\"c5d128d8-353a-43dc-ba0a-d0c35e33de17\",\"CountryId\":\"13faa99e-18f2-4e6f-b275-1e785b3383f3\",\"Name\":\"Minas Gerais\",\"Code\":\"MG\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/c6cf9405-369e-41f4-a5e6-435469596c08.json",
    "content": "{\"Id\":\"c6cf9405-369e-41f4-a5e6-435469596c08\",\"CountryId\":\"1fcc4a89-0e8f-4fa2-b8d0-4ff5ec2277df\",\"Name\":\"Co. Leitrim, Ireland\",\"Code\":\"LET\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/c7330896-bd61-4282-b3bf-8713a28d3b50.json",
    "content": "{\"Id\":\"c7330896-bd61-4282-b3bf-8713a28d3b50\",\"CountryId\":\"a71d6727-61e7-4282-9fcb-526d1e7bc24f\",\"Name\":\"Indiana\",\"Code\":\"IN\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/c7547571-7cda-427a-a8f2-259e9c587e84.json",
    "content": "{\"Id\":\"c7547571-7cda-427a-a8f2-259e9c587e84\",\"CountryId\":\"1fcc4a89-0e8f-4fa2-b8d0-4ff5ec2277df\",\"Name\":\"Peebles-shire, Scotland\",\"Code\":\"PEE\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/c7a02c1c-3076-43b3-9538-b513bab8a243.json",
    "content": "{\"Id\":\"c7a02c1c-3076-43b3-9538-b513bab8a243\",\"CountryId\":\"38dc01c3-48d8-4ff8-a78a-2c35d4fbfa7b\",\"Name\":\"Soria\",\"Code\":\"Soria\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/ca553819-434a-408f-a2a4-92a7df9a2618.json",
    "content": "{\"Id\":\"ca553819-434a-408f-a2a4-92a7df9a2618\",\"CountryId\":\"38dc01c3-48d8-4ff8-a78a-2c35d4fbfa7b\",\"Name\":\"Cuenca\",\"Code\":\"Cuenca\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/ca5c0c52-e8ae-4ccd-9a45-565e352c4e2b.json",
    "content": "{\"Id\":\"ca5c0c52-e8ae-4ccd-9a45-565e352c4e2b\",\"CountryId\":\"06bb7816-9ad4-47dc-b1cd-6e206afdfcca\",\"Name\":\"Steiermark\",\"Code\":\"ST\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/ca7ce68d-465a-4c6e-ad75-6f9ade467f1e.json",
    "content": "{\"Id\":\"ca7ce68d-465a-4c6e-ad75-6f9ade467f1e\",\"CountryId\":\"1fcc4a89-0e8f-4fa2-b8d0-4ff5ec2277df\",\"Name\":\"Alderney, Channel Islands\",\"Code\":\"ALD\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/cb47cc62-5d26-4b17-b01f-25e5432f913c.json",
    "content": "{\"Id\":\"cb47cc62-5d26-4b17-b01f-25e5432f913c\",\"CountryId\":\"38dc01c3-48d8-4ff8-a78a-2c35d4fbfa7b\",\"Name\":\"Lugo\",\"Code\":\"Lugo\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/cb6d309d-ed20-48d0-8a5d-cd1d7fd1aad6.json",
    "content": "{\"Id\":\"cb6d309d-ed20-48d0-8a5d-cd1d7fd1aad6\",\"CountryId\":\"a71d6727-61e7-4282-9fcb-526d1e7bc24f\",\"Name\":\"Utah\",\"Code\":\"UT\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/cbc4121c-d62d-410c-b699-60b08b67711f.json",
    "content": "{\"Id\":\"cbc4121c-d62d-410c-b699-60b08b67711f\",\"CountryId\":\"13faa99e-18f2-4e6f-b275-1e785b3383f3\",\"Name\":\"Piaui\",\"Code\":\"PI\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/cbd2718f-dd60-4151-a24d-437ff37605c6.json",
    "content": "{\"Id\":\"cbd2718f-dd60-4151-a24d-437ff37605c6\",\"CountryId\":\"38dc01c3-48d8-4ff8-a78a-2c35d4fbfa7b\",\"Name\":\"Jaen\",\"Code\":\"Jaen\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/cc6b7a8e-4275-4e4e-8d62-34b5480f3995.json",
    "content": "{\"Id\":\"cc6b7a8e-4275-4e4e-8d62-34b5480f3995\",\"CountryId\":\"38dc01c3-48d8-4ff8-a78a-2c35d4fbfa7b\",\"Name\":\"Huesca\",\"Code\":\"Huesca\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/ccd7968c-7e80-4381-958b-ab72be0d6c35.json",
    "content": "{\"Id\":\"ccd7968c-7e80-4381-958b-ab72be0d6c35\",\"CountryId\":\"60ce9ab1-945d-4fef-aba8-a1bb640165be\",\"Name\":\"Solothurn\",\"Code\":\"SO\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/cd1579c0-c471-4095-867a-3e2af11e1f35.json",
    "content": "{\"Id\":\"cd1579c0-c471-4095-867a-3e2af11e1f35\",\"CountryId\":\"1fcc4a89-0e8f-4fa2-b8d0-4ff5ec2277df\",\"Name\":\"Central, Scotland\",\"Code\":\"CEN\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/cd98173e-507e-4a92-9eef-2de1d8e7a61f.json",
    "content": "{\"Id\":\"cd98173e-507e-4a92-9eef-2de1d8e7a61f\",\"CountryId\":\"1fcc4a89-0e8f-4fa2-b8d0-4ff5ec2277df\",\"Name\":\"Leicestershire, England\",\"Code\":\"LEI\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/cf6e4b72-5f4f-4cc4-add3-eb0964892f7b.json",
    "content": "{\"Id\":\"cf6e4b72-5f4f-4cc4-add3-eb0964892f7b\",\"CountryId\":\"38dc01c3-48d8-4ff8-a78a-2c35d4fbfa7b\",\"Name\":\"Huelva\",\"Code\":\"Huelva\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/cf75931a-d86f-43a0-8bd9-3942d5945ff7.json",
    "content": "{\"Id\":\"cf75931a-d86f-43a0-8bd9-3942d5945ff7\",\"CountryId\":\"a71d6727-61e7-4282-9fcb-526d1e7bc24f\",\"Name\":\"Mississippi\",\"Code\":\"MS\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/cfa0c0e5-b478-41bd-9029-49bd04c68871.json",
    "content": "{\"Id\":\"cfa0c0e5-b478-41bd-9029-49bd04c68871\",\"CountryId\":\"a71d6727-61e7-4282-9fcb-526d1e7bc24f\",\"Name\":\"Washington\",\"Code\":\"WA\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/d0c79bd1-3688-4ed3-9b65-0cb24a1e8b43.json",
    "content": "{\"Id\":\"d0c79bd1-3688-4ed3-9b65-0cb24a1e8b43\",\"CountryId\":\"1fcc4a89-0e8f-4fa2-b8d0-4ff5ec2277df\",\"Name\":\"England\",\"Code\":\"ENG\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/d1562c4d-3163-4e92-a361-05c2b9541772.json",
    "content": "{\"Id\":\"d1562c4d-3163-4e92-a361-05c2b9541772\",\"CountryId\":\"1fcc4a89-0e8f-4fa2-b8d0-4ff5ec2277df\",\"Name\":\"Staffordshire, England\",\"Code\":\"STS\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/d20875cc-8572-453c-b5e0-53b49742debb.json",
    "content": "{\"Id\":\"d20875cc-8572-453c-b5e0-53b49742debb\",\"CountryId\":\"0c356c5a-ca44-4301-8212-1826ccdadc42\",\"Name\":\"Nunavut\",\"Code\":\"NU\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/d21905c5-6ee9-4072-9618-8447d9c4390e.json",
    "content": "{\"Id\":\"d21905c5-6ee9-4072-9618-8447d9c4390e\",\"CountryId\":\"38dc01c3-48d8-4ff8-a78a-2c35d4fbfa7b\",\"Name\":\"Alava\",\"Code\":\"Alava\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/d21e2732-779d-406a-b1b9-cf44ff280dfe.json",
    "content": "{\"Id\":\"d21e2732-779d-406a-b1b9-cf44ff280dfe\",\"CountryId\":\"38dc01c3-48d8-4ff8-a78a-2c35d4fbfa7b\",\"Name\":\"Pontevedra\",\"Code\":\"Pontevedra\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/d226235d-0eb0-49c5-9e7a-55cc91c57100.json",
    "content": "{\"Id\":\"d226235d-0eb0-49c5-9e7a-55cc91c57100\",\"CountryId\":\"38dc01c3-48d8-4ff8-a78a-2c35d4fbfa7b\",\"Name\":\"Palencia\",\"Code\":\"Palencia\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/d256f9b7-8a33-4d04-9e19-95c12c967719.json",
    "content": "{\"Id\":\"d256f9b7-8a33-4d04-9e19-95c12c967719\",\"CountryId\":\"13faa99e-18f2-4e6f-b275-1e785b3383f3\",\"Name\":\"Rondonia\",\"Code\":\"RO\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/d284266a-559d-42f3-a881-0136ea080c12.json",
    "content": "{\"Id\":\"d284266a-559d-42f3-a881-0136ea080c12\",\"CountryId\":\"13faa99e-18f2-4e6f-b275-1e785b3383f3\",\"Name\":\"Rio De Janeiro\",\"Code\":\"RJ\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/d2880e75-e454-41a1-a73d-b2cff71197e2.json",
    "content": "{\"Id\":\"d2880e75-e454-41a1-a73d-b2cff71197e2\",\"CountryId\":\"a71d6727-61e7-4282-9fcb-526d1e7bc24f\",\"Name\":\"Massachusetts\",\"Code\":\"MA\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/d2c0e797-781a-4d5d-a87c-5c16de2063cb.json",
    "content": "{\"Id\":\"d2c0e797-781a-4d5d-a87c-5c16de2063cb\",\"CountryId\":\"1fcc4a89-0e8f-4fa2-b8d0-4ff5ec2277df\",\"Name\":\"Pembrokeshire, Wales\",\"Code\":\"PEM\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/d2e5ba25-d3d3-4113-b599-7456755da29e.json",
    "content": "{\"Id\":\"d2e5ba25-d3d3-4113-b599-7456755da29e\",\"CountryId\":\"1fcc4a89-0e8f-4fa2-b8d0-4ff5ec2277df\",\"Name\":\"Huntingdonshire, England\",\"Code\":\"HUN\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/d318e32e-41b6-4ca6-905d-23714709f38f.json",
    "content": "{\"Id\":\"d318e32e-41b6-4ca6-905d-23714709f38f\",\"CountryId\":\"a71d6727-61e7-4282-9fcb-526d1e7bc24f\",\"Name\":\"Armed Forces Africa\",\"Code\":\"AF\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/d46dc54c-28f5-4efe-a2bf-f5a814096736.json",
    "content": "{\"Id\":\"d46dc54c-28f5-4efe-a2bf-f5a814096736\",\"CountryId\":\"1fcc4a89-0e8f-4fa2-b8d0-4ff5ec2277df\",\"Name\":\"Northern Ireland\",\"Code\":\"NIR\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/d4f8133e-5580-4a66-94dd-096d295723a0.json",
    "content": "{\"Id\":\"d4f8133e-5580-4a66-94dd-096d295723a0\",\"CountryId\":\"0c356c5a-ca44-4301-8212-1826ccdadc42\",\"Name\":\"Prince Edward Island\",\"Code\":\"PE\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/d52cedac-fcc2-4b9c-8f9e-09dcda91974c.json",
    "content": "{\"Id\":\"d52cedac-fcc2-4b9c-8f9e-09dcda91974c\",\"CountryId\":\"38dc01c3-48d8-4ff8-a78a-2c35d4fbfa7b\",\"Name\":\"Santa Cruz de Tenerife\",\"Code\":\"Santa Cruz de Tenerife\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/d55b4820-1ccd-44ad-8fbe-60b750abc2dd.json",
    "content": "{\"Id\":\"d55b4820-1ccd-44ad-8fbe-60b750abc2dd\",\"CountryId\":\"2d5b53a8-8341-4da4-a296-e516fe5bb953\",\"Name\":\"Niedersachsen\",\"Code\":\"NDS\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/d698a1b6-68d7-480e-8137-421c684f251d.json",
    "content": "{\"Id\":\"d698a1b6-68d7-480e-8137-421c684f251d\",\"CountryId\":\"13faa99e-18f2-4e6f-b275-1e785b3383f3\",\"Name\":\"Alagoas\",\"Code\":\"AL\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/d6ebad0e-4c95-4ec8-8d0e-2543acc6ad11.json",
    "content": "{\"Id\":\"d6ebad0e-4c95-4ec8-8d0e-2543acc6ad11\",\"CountryId\":\"1fcc4a89-0e8f-4fa2-b8d0-4ff5ec2277df\",\"Name\":\"Western Isles, Scotland\",\"Code\":\"WIS\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/d799b8c1-cac7-4933-aa6d-29acf7fd9d91.json",
    "content": "{\"Id\":\"d799b8c1-cac7-4933-aa6d-29acf7fd9d91\",\"CountryId\":\"1fcc4a89-0e8f-4fa2-b8d0-4ff5ec2277df\",\"Name\":\"Mid Glamorgan, Wales\",\"Code\":\"MGM\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/d85b7129-d009-4747-9748-b116739ba660.json",
    "content": "{\"Id\":\"d85b7129-d009-4747-9748-b116739ba660\",\"CountryId\":\"0c356c5a-ca44-4301-8212-1826ccdadc42\",\"Name\":\"Alberta\",\"Code\":\"AB\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/d892ea50-fccf-477a-bbdf-418e32dc5b98.json",
    "content": "{\"Id\":\"d892ea50-fccf-477a-bbdf-418e32dc5b98\",\"CountryId\":\"60ce9ab1-945d-4fef-aba8-a1bb640165be\",\"Name\":\"Appenzell Ausserrhoden\",\"Code\":\"AR\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/d8de090a-d496-42ea-a1e0-f457dab41f14.json",
    "content": "{\"Id\":\"d8de090a-d496-42ea-a1e0-f457dab41f14\",\"CountryId\":\"1fcc4a89-0e8f-4fa2-b8d0-4ff5ec2277df\",\"Name\":\"Co. Galway, Ireland\",\"Code\":\"GAL\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/d907d2a6-4caa-4687-898a-58bd5f978d03.json",
    "content": "{\"Id\":\"d907d2a6-4caa-4687-898a-58bd5f978d03\",\"CountryId\":\"a71d6727-61e7-4282-9fcb-526d1e7bc24f\",\"Name\":\"Missouri\",\"Code\":\"MO\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/d96d5675-f3e2-42fe-b581-bd2367dc5012.json",
    "content": "{\"Id\":\"d96d5675-f3e2-42fe-b581-bd2367dc5012\",\"CountryId\":\"38dc01c3-48d8-4ff8-a78a-2c35d4fbfa7b\",\"Name\":\"Madrid\",\"Code\":\"Madrid\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/da7fc721-b375-4b51-afe1-1cb11328c7a8.json",
    "content": "{\"Id\":\"da7fc721-b375-4b51-afe1-1cb11328c7a8\",\"CountryId\":\"1fcc4a89-0e8f-4fa2-b8d0-4ff5ec2277df\",\"Name\":\"Selkirkshire, Scotland\",\"Code\":\"SEL\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/dad6586a-c504-4117-b116-4c80a0d1bf52.json",
    "content": "{\"Id\":\"dad6586a-c504-4117-b116-4c80a0d1bf52\",\"CountryId\":\"38dc01c3-48d8-4ff8-a78a-2c35d4fbfa7b\",\"Name\":\"Valladolid\",\"Code\":\"Valladolid\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/dada271d-2656-4c17-b570-72bb748eb7dc.json",
    "content": "{\"Id\":\"dada271d-2656-4c17-b570-72bb748eb7dc\",\"CountryId\":\"1fcc4a89-0e8f-4fa2-b8d0-4ff5ec2277df\",\"Name\":\"Sark, Channel Islands\",\"Code\":\"SRK\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/db9ccccf-9e20-4224-88a7-067e5238960d.json",
    "content": "{\"Id\":\"db9ccccf-9e20-4224-88a7-067e5238960d\",\"CountryId\":\"38dc01c3-48d8-4ff8-a78a-2c35d4fbfa7b\",\"Name\":\"Toledo\",\"Code\":\"Toledo\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/dcc28b9c-8d2f-4569-ad0a-ad5717da3bb7.json",
    "content": "{\"Id\":\"dcc28b9c-8d2f-4569-ad0a-ad5717da3bb7\",\"CountryId\":\"60ce9ab1-945d-4fef-aba8-a1bb640165be\",\"Name\":\"Graubünden\",\"Code\":\"JU\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/dcc2ab57-48e6-4c14-bf14-e8d72c389863.json",
    "content": "{\"Id\":\"dcc2ab57-48e6-4c14-bf14-e8d72c389863\",\"CountryId\":\"1fcc4a89-0e8f-4fa2-b8d0-4ff5ec2277df\",\"Name\":\"Guernsey, Channel Islands\",\"Code\":\"GSY\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/ddb0ca67-8635-4f40-a01d-06ccb266ef56.json",
    "content": "{\"Id\":\"ddb0ca67-8635-4f40-a01d-06ccb266ef56\",\"CountryId\":\"13faa99e-18f2-4e6f-b275-1e785b3383f3\",\"Name\":\"Parana\",\"Code\":\"PR\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/dec30815-883a-45a2-9318-bfb111b383d6.json",
    "content": "{\"Id\":\"dec30815-883a-45a2-9318-bfb111b383d6\",\"CountryId\":\"a71d6727-61e7-4282-9fcb-526d1e7bc24f\",\"Name\":\"Oregon\",\"Code\":\"OR\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/df964122-964e-4067-8386-45bcb548e39d.json",
    "content": "{\"Id\":\"df964122-964e-4067-8386-45bcb548e39d\",\"CountryId\":\"1fcc4a89-0e8f-4fa2-b8d0-4ff5ec2277df\",\"Name\":\"Clwyd, Wales\",\"Code\":\"CWD\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/e026bf9d-66a9-49bf-ba77-860b8c60871d.json",
    "content": "{\"Id\":\"e026bf9d-66a9-49bf-ba77-860b8c60871d\",\"CountryId\":\"38dc01c3-48d8-4ff8-a78a-2c35d4fbfa7b\",\"Name\":\"Zaragoza\",\"Code\":\"Zaragoza\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/e2a9ae21-97d6-4e4c-ac55-7fe75a298f6c.json",
    "content": "{\"Id\":\"e2a9ae21-97d6-4e4c-ac55-7fe75a298f6c\",\"CountryId\":\"1fcc4a89-0e8f-4fa2-b8d0-4ff5ec2277df\",\"Name\":\"Isle of Man\",\"Code\":\"IOM\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/e314e827-9b3a-4282-954f-b3f46ba92f07.json",
    "content": "{\"Id\":\"e314e827-9b3a-4282-954f-b3f46ba92f07\",\"CountryId\":\"844686ba-57c3-4c91-8b33-c1e1889a44c0\",\"Name\":\"Albywalbi Wacky Doo\",\"Code\":\"AW\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/e3835a5d-1eca-4b9c-8c76-f52f4fc17553.json",
    "content": "{\"Id\":\"e3835a5d-1eca-4b9c-8c76-f52f4fc17553\",\"CountryId\":\"1fcc4a89-0e8f-4fa2-b8d0-4ff5ec2277df\",\"Name\":\"Merionethshire, Wales\",\"Code\":\"MER\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/e4da2345-e459-4b6a-982a-337a8ae84e1b.json",
    "content": "{\"Id\":\"e4da2345-e459-4b6a-982a-337a8ae84e1b\",\"CountryId\":\"1fcc4a89-0e8f-4fa2-b8d0-4ff5ec2277df\",\"Name\":\"Radnorshire, Wales\",\"Code\":\"RAD\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/e5f56833-0ea5-40d8-acc0-0d0f48197a78.json",
    "content": "{\"Id\":\"e5f56833-0ea5-40d8-acc0-0d0f48197a78\",\"CountryId\":\"1fcc4a89-0e8f-4fa2-b8d0-4ff5ec2277df\",\"Name\":\"Shropshire, England\",\"Code\":\"SAL\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/e6322365-8cbc-4d69-9515-341c4b038781.json",
    "content": "{\"Id\":\"e6322365-8cbc-4d69-9515-341c4b038781\",\"CountryId\":\"1fcc4a89-0e8f-4fa2-b8d0-4ff5ec2277df\",\"Name\":\"Hertfordshire, England\",\"Code\":\"HRT\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/e663aef7-a697-4164-8ce4-141ac5cef6a9.json",
    "content": "{\"Id\":\"e663aef7-a697-4164-8ce4-141ac5cef6a9\",\"CountryId\":\"13faa99e-18f2-4e6f-b275-1e785b3383f3\",\"Name\":\"Para\",\"Code\":\"PA\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/e6c0d492-93fc-4798-b6fa-0180f08204f6.json",
    "content": "{\"Id\":\"e6c0d492-93fc-4798-b6fa-0180f08204f6\",\"CountryId\":\"1fcc4a89-0e8f-4fa2-b8d0-4ff5ec2277df\",\"Name\":\"West Glamorgan, Wales\",\"Code\":\"WGM\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/e7b4f7cb-cb36-4795-bfeb-dbd14bf2d520.json",
    "content": "{\"Id\":\"e7b4f7cb-cb36-4795-bfeb-dbd14bf2d520\",\"CountryId\":\"1fcc4a89-0e8f-4fa2-b8d0-4ff5ec2277df\",\"Name\":\"Co. Mayo, Ireland\",\"Code\":\"MAY\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/e83159f2-abe3-4f94-80de-a149bcf83428.json",
    "content": "{\"Id\":\"e83159f2-abe3-4f94-80de-a149bcf83428\",\"CountryId\":\"a71d6727-61e7-4282-9fcb-526d1e7bc24f\",\"Name\":\"District of Columbia\",\"Code\":\"DC\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/e8426499-9214-41c8-9717-44f2a4d6d14e.json",
    "content": "{\"Id\":\"e8426499-9214-41c8-9717-44f2a4d6d14e\",\"CountryId\":\"0c356c5a-ca44-4301-8212-1826ccdadc42\",\"Name\":\"Quebec\",\"Code\":\"QC\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/e885e0ce-a268-4db0-aff2-a0205353e7e4.json",
    "content": "{\"Id\":\"e885e0ce-a268-4db0-aff2-a0205353e7e4\",\"CountryId\":\"60ce9ab1-945d-4fef-aba8-a1bb640165be\",\"Name\":\"Neuenburg\",\"Code\":\"NE\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/ea553c01-9023-41ef-9068-849a054775f6.json",
    "content": "{\"Id\":\"ea553c01-9023-41ef-9068-849a054775f6\",\"CountryId\":\"1fcc4a89-0e8f-4fa2-b8d0-4ff5ec2277df\",\"Name\":\"Co. Sligo, Ireland\",\"Code\":\"SLI\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/ea73c8eb-cac2-4b28-bb9a-d923f32c17ef.json",
    "content": "{\"Id\":\"ea73c8eb-cac2-4b28-bb9a-d923f32c17ef\",\"CountryId\":\"a71d6727-61e7-4282-9fcb-526d1e7bc24f\",\"Name\":\"New York\",\"Code\":\"NY\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/eb8efd2d-b9fa-4f99-9c49-9def24ccc5b5.json",
    "content": "{\"Id\":\"eb8efd2d-b9fa-4f99-9c49-9def24ccc5b5\",\"CountryId\":\"a71d6727-61e7-4282-9fcb-526d1e7bc24f\",\"Name\":\"Wyoming\",\"Code\":\"WY\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/ebc9105f-1f6e-44be-b4f2-6d23908278d6.json",
    "content": "{\"Id\":\"ebc9105f-1f6e-44be-b4f2-6d23908278d6\",\"CountryId\":\"a71d6727-61e7-4282-9fcb-526d1e7bc24f\",\"Name\":\"Louisiana\",\"Code\":\"LA\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/ec2a6fed-19c2-4364-99cb-a59e8e0929fe.json",
    "content": "{\"Id\":\"ec2a6fed-19c2-4364-99cb-a59e8e0929fe\",\"CountryId\":\"60ce9ab1-945d-4fef-aba8-a1bb640165be\",\"Name\":\"Zürich\",\"Code\":\"ZH\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/edd15e05-a785-47d0-9936-8489858f1d89.json",
    "content": "{\"Id\":\"edd15e05-a785-47d0-9936-8489858f1d89\",\"CountryId\":\"1fcc4a89-0e8f-4fa2-b8d0-4ff5ec2277df\",\"Name\":\"Denbighshire, Wales\",\"Code\":\"DEN\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/edfb040f-bb1e-47d7-8a16-14ac9d2f2f2f.json",
    "content": "{\"Id\":\"edfb040f-bb1e-47d7-8a16-14ac9d2f2f2f\",\"CountryId\":\"1fcc4a89-0e8f-4fa2-b8d0-4ff5ec2277df\",\"Name\":\"Fife, Scotland\",\"Code\":\"FIF\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/ef661a83-6355-44d2-aea4-89f7a7c7bd21.json",
    "content": "{\"Id\":\"ef661a83-6355-44d2-aea4-89f7a7c7bd21\",\"CountryId\":\"1fcc4a89-0e8f-4fa2-b8d0-4ff5ec2277df\",\"Name\":\"Ross and Cromarty, Scotland\",\"Code\":\"ROC\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/f086728a-8077-4ced-8889-6d9a6e0ab147.json",
    "content": "{\"Id\":\"f086728a-8077-4ced-8889-6d9a6e0ab147\",\"CountryId\":\"1fcc4a89-0e8f-4fa2-b8d0-4ff5ec2277df\",\"Name\":\"Tayside, Scotland\",\"Code\":\"TAY\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/f1bbc9fc-4b0a-4065-843e-f428f1c20346.json",
    "content": "{\"Id\":\"f1bbc9fc-4b0a-4065-843e-f428f1c20346\",\"CountryId\":\"a71d6727-61e7-4282-9fcb-526d1e7bc24f\",\"Name\":\"Georgia\",\"Code\":\"GA\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/f1c315b6-8573-4641-85b1-e9bf76502968.json",
    "content": "{\"Id\":\"f1c315b6-8573-4641-85b1-e9bf76502968\",\"CountryId\":\"1fcc4a89-0e8f-4fa2-b8d0-4ff5ec2277df\",\"Name\":\"Derbyshire, England\",\"Code\":\"DBY\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/f23bab33-cad9-4d9c-9ced-a66b3ff4969f.json",
    "content": "{\"Id\":\"f23bab33-cad9-4d9c-9ced-a66b3ff4969f\",\"CountryId\":\"a71d6727-61e7-4282-9fcb-526d1e7bc24f\",\"Name\":\"Delaware\",\"Code\":\"DE\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/f2e5ffce-bf2a-4f21-9696-fd948c07d6ae.json",
    "content": "{\"Id\":\"f2e5ffce-bf2a-4f21-9696-fd948c07d6ae\",\"CountryId\":\"13faa99e-18f2-4e6f-b275-1e785b3383f3\",\"Name\":\"Rio Grande Do Norte\",\"Code\":\"RN\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/f44ac5b9-b998-46ef-b335-9fb42f97fe27.json",
    "content": "{\"Id\":\"f44ac5b9-b998-46ef-b335-9fb42f97fe27\",\"CountryId\":\"1fcc4a89-0e8f-4fa2-b8d0-4ff5ec2277df\",\"Name\":\"Gloucestershire, England\",\"Code\":\"GLS\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/f5315bf8-0dc2-49e7-abeb-0d7348492e6b.json",
    "content": "{\"Id\":\"f5315bf8-0dc2-49e7-abeb-0d7348492e6b\",\"CountryId\":\"38dc01c3-48d8-4ff8-a78a-2c35d4fbfa7b\",\"Name\":\"Cantabria\",\"Code\":\"Cantabria\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/f6a35c2c-ab10-4531-afea-2cdbdf40f5c1.json",
    "content": "{\"Id\":\"f6a35c2c-ab10-4531-afea-2cdbdf40f5c1\",\"CountryId\":\"1fcc4a89-0e8f-4fa2-b8d0-4ff5ec2277df\",\"Name\":\"Clackmannanshire, Scotland\",\"Code\":\"CLK\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/f6b97ed0-d090-4c68-a590-8fe743ee6d43.json",
    "content": "{\"Id\":\"f6b97ed0-d090-4c68-a590-8fe743ee6d43\",\"CountryId\":\"a71d6727-61e7-4282-9fcb-526d1e7bc24f\",\"Name\":\"Palau\",\"Code\":\"PW\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/f80a1747-3d1a-4758-b74a-ba2b54844b8b.json",
    "content": "{\"Id\":\"f80a1747-3d1a-4758-b74a-ba2b54844b8b\",\"CountryId\":\"1fcc4a89-0e8f-4fa2-b8d0-4ff5ec2277df\",\"Name\":\"Co. Tipperary, Ireland\",\"Code\":\"TIP\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/f894c6bf-2f76-4b42-85f4-b89581cee97f.json",
    "content": "{\"Id\":\"f894c6bf-2f76-4b42-85f4-b89581cee97f\",\"CountryId\":\"1fcc4a89-0e8f-4fa2-b8d0-4ff5ec2277df\",\"Name\":\"Bute, Scotland\",\"Code\":\"BUT\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/f92a3196-5c67-4fec-8877-78b28803b8d6.json",
    "content": "{\"Id\":\"f92a3196-5c67-4fec-8877-78b28803b8d6\",\"CountryId\":\"38dc01c3-48d8-4ff8-a78a-2c35d4fbfa7b\",\"Name\":\"A Coruña\",\"Code\":\"A Coru?a\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/f93295d1-7501-487d-93ad-6bd019e82cc2.json",
    "content": "{\"Id\":\"f93295d1-7501-487d-93ad-6bd019e82cc2\",\"CountryId\":\"06bb7816-9ad4-47dc-b1cd-6e206afdfcca\",\"Name\":\"Oberösterreich\",\"Code\":\"OO\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/fb63f22d-2a32-484e-a3e8-41bbae13891b.json",
    "content": "{\"Id\":\"fb63f22d-2a32-484e-a3e8-41bbae13891b\",\"CountryId\":\"2d5b53a8-8341-4da4-a296-e516fe5bb953\",\"Name\":\"Schleswig-Holstein\",\"Code\":\"SCN\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/fbe69225-8cad-4e54-b4e5-03d6e404bc3f.json",
    "content": "{\"Id\":\"fbe69225-8cad-4e54-b4e5-03d6e404bc3f\",\"CountryId\":\"13faa99e-18f2-4e6f-b275-1e785b3383f3\",\"Name\":\"Paraiba\",\"Code\":\"PB\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/fca86c53-d823-41f7-a28d-2146f23e93ef.json",
    "content": "{\"Id\":\"fca86c53-d823-41f7-a28d-2146f23e93ef\",\"CountryId\":\"1fcc4a89-0e8f-4fa2-b8d0-4ff5ec2277df\",\"Name\":\"North Riding of Yorkshire, England\",\"Code\":\"NRY\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/fcd4595b-4b67-4b73-84c6-29706a57af38.json",
    "content": "{\"Id\":\"fcd4595b-4b67-4b73-84c6-29706a57af38\",\"CountryId\":\"13faa99e-18f2-4e6f-b275-1e785b3383f3\",\"Name\":\"Mato Grosso\",\"Code\":\"MT\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/fd19f293-d0ca-43d2-8274-810eddf75d21.json",
    "content": "{\"Id\":\"fd19f293-d0ca-43d2-8274-810eddf75d21\",\"CountryId\":\"1fcc4a89-0e8f-4fa2-b8d0-4ff5ec2277df\",\"Name\":\"Herefordshire, England\",\"Code\":\"HEF\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/fd809ed1-732f-4886-9bbc-f96984329b60.json",
    "content": "{\"Id\":\"fd809ed1-732f-4886-9bbc-f96984329b60\",\"CountryId\":\"1fcc4a89-0e8f-4fa2-b8d0-4ff5ec2277df\",\"Name\":\"Co. Waterford, Ireland\",\"Code\":\"WAT\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/fe29ffdb-5e1c-44bd-bb9a-2e2e43c1b206.json",
    "content": "{\"Id\":\"fe29ffdb-5e1c-44bd-bb9a-2e2e43c1b206\",\"CountryId\":\"38dc01c3-48d8-4ff8-a78a-2c35d4fbfa7b\",\"Name\":\"Malaga\",\"Code\":\"Malaga\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/fea24d8c-ca6b-4643-8f8b-d5133ac40b18.json",
    "content": "{\"Id\":\"fea24d8c-ca6b-4643-8f8b-d5133ac40b18\",\"CountryId\":\"1fcc4a89-0e8f-4fa2-b8d0-4ff5ec2277df\",\"Name\":\"Stirlingshire, Scotland\",\"Code\":\"STI\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/fea759da-4280-46a8-af3f-ec2cc03b436a.json",
    "content": "{\"Id\":\"fea759da-4280-46a8-af3f-ec2cc03b436a\",\"CountryId\":\"38dc01c3-48d8-4ff8-a78a-2c35d4fbfa7b\",\"Name\":\"Girona\",\"Code\":\"Girona\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/default/geozone/fec3a4f7-e3b5-44d3-bbde-62628489b459.json",
    "content": "{\"Id\":\"fec3a4f7-e3b5-44d3-bbde-62628489b459\",\"CountryId\":\"a71d6727-61e7-4282-9fcb-526d1e7bc24f\",\"Name\":\"North Carolina\",\"Code\":\"NC\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/f83067b4-919d-4910-acd1-4b3b1c210ecf/page/078eb367-e0d1-41ae-921a-e9d76e6a3e3f.json",
    "content": "{\"Id\":\"078eb367-e0d1-41ae-921a-e9d76e6a3e3f\",\"ProjectId\":\"default\",\"ParentId\":\"0\",\"ParentSlug\":\"\",\"PageOrder\":6,\"Title\":\"Contact\",\"Author\":null,\"Slug\":\"contact\",\"ExternalUrl\":null,\"CorrelationKey\":null,\"MetaDescription\":null,\"MetaJson\":null,\"MetaHtml\":null,\"Content\":\"<p>You can send me a message on the beach yo</p>\\r\\n\\r\\n<p>oh yeah baby its going to be a good day, I can feel it!</p>\\r\\n\",\"PubDate\":\"2018-06-28T19:03:56.6160845Z\",\"LastModified\":\"2018-06-28T19:03:56.6220554Z\",\"IsPublished\":true,\"MenuOnly\":false,\"ShowMenu\":false,\"ViewRoles\":null,\"Categories\":[],\"Comments\":[],\"ShowHeading\":true,\"ShowPubDate\":false,\"ShowLastModified\":false,\"ShowCategories\":false,\"ShowComments\":false,\"MenuFilters\":null,\"DisableEditor\":false,\"Resources\":[],\"ContentType\":\"html\",\"CreatedUtc\":\"2018-06-28T19:03:56.603544Z\",\"CreatedByUser\":null,\"LastModifiedByUser\":\"admin\",\"DraftContent\":null,\"DraftAuthor\":null,\"DraftPubDate\":null,\"TemplateKey\":null,\"SerializedModel\":null,\"DraftSerializedModel\":null,\"Serializer\":null}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/f83067b4-919d-4910-acd1-4b3b1c210ecf/page/0d890ed8-cfd5-4dcd-9fb5-885582fbb473.json",
    "content": "{\"Id\":\"0d890ed8-cfd5-4dcd-9fb5-885582fbb473\",\"ProjectId\":\"f83067b4-919d-4910-acd1-4b3b1c210ecf\",\"ParentId\":\"ac4051c3-064a-4e7b-a2a3-c34f4c6ca7a6\",\"ParentSlug\":\"more-docs\",\"PageOrder\":3,\"Title\":\"Junk\",\"Author\":\"Admin\",\"Slug\":\"junk\",\"ExternalUrl\":null,\"CorrelationKey\":null,\"MetaDescription\":\"junk\",\"MetaJson\":null,\"MetaHtml\":null,\"Content\":\"<div id=\\\"react-app\\\">Loading...</div>\",\"PubDate\":\"2017-03-10T18:27:00Z\",\"LastModified\":\"2018-05-01T19:42:13.393479Z\",\"IsPublished\":true,\"MenuOnly\":false,\"ShowMenu\":false,\"ViewRoles\":null,\"Categories\":[],\"Comments\":[],\"ShowHeading\":true,\"ShowPubDate\":false,\"ShowLastModified\":false,\"ShowCategories\":false,\"ShowComments\":false,\"MenuFilters\":null,\"DisableEditor\":true,\"Resources\":[{\"Id\":\"720a4163-e9d3-4b65-a4a4-433c2b2d115c\",\"ContentId\":\"0d890ed8-cfd5-4dcd-9fb5-885582fbb473\",\"Sort\":0,\"Type\":\"js\",\"Environment\":\"any\",\"Url\":\"/dist/app-react.bundle.js\"}],\"ContentType\":\"html\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/f83067b4-919d-4910-acd1-4b3b1c210ecf/page/0fe39377-57a9-4d42-a9f1-22fc0c5ba18c.json",
    "content": "{\"Id\":\"0fe39377-57a9-4d42-a9f1-22fc0c5ba18c\",\"ProjectId\":\"f83067b4-919d-4910-acd1-4b3b1c210ecf\",\"ParentId\":\"ac4051c3-064a-4e7b-a2a3-c34f4c6ca7a6\",\"ParentSlug\":\"more-docs\",\"PageOrder\":5,\"Title\":\"Some Page\",\"Author\":\"Joe\",\"Slug\":\"nothome\",\"ExternalUrl\":null,\"CorrelationKey\":null,\"MetaDescription\":\"some page meta\",\"MetaJson\":null,\"MetaHtml\":null,\"Content\":\"<p>Welcome to my website yo, keep it clean boys and girls</p>\\r\\n\\r\\n<p></p>\\r\\n\",\"PubDate\":\"2016-02-24T18:35:00Z\",\"LastModified\":\"2023-10-04T14:40:46.1541738Z\",\"IsPublished\":true,\"MenuOnly\":false,\"ShowMenu\":false,\"ViewRoles\":null,\"Categories\":[],\"Comments\":[],\"ShowHeading\":true,\"ShowPubDate\":false,\"ShowLastModified\":false,\"ShowCategories\":false,\"ShowComments\":false,\"MenuFilters\":null,\"DisableEditor\":false,\"Resources\":[],\"ContentType\":\"html\",\"CreatedUtc\":\"2023-10-04T14:40:46.1179551Z\",\"CreatedByUser\":null,\"LastModifiedByUser\":\"admin\",\"DraftContent\":null,\"DraftAuthor\":null,\"DraftPubDate\":null,\"TemplateKey\":null,\"SerializedModel\":null,\"DraftSerializedModel\":null,\"Serializer\":null}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/f83067b4-919d-4910-acd1-4b3b1c210ecf/page/2a223bf8-9d41-4357-bf2c-673893b25d9f.json",
    "content": "{\"Id\":\"2a223bf8-9d41-4357-bf2c-673893b25d9f\",\"ProjectId\":\"f83067b4-919d-4910-acd1-4b3b1c210ecf\",\"ParentId\":\"ac4051c3-064a-4e7b-a2a3-c34f4c6ca7a6\",\"ParentSlug\":\"more-docs\",\"PageOrder\":1,\"Title\":\"foo\",\"Author\":\"Admin\",\"Slug\":\"foo\",\"ExternalUrl\":null,\"CorrelationKey\":null,\"MetaDescription\":\"foo\",\"MetaJson\":null,\"MetaHtml\":null,\"Content\":\"<p>foo was here today</p>\\n\\n<p><img alt=\\\"\\\" src=\\\"/media/images/img_2198-ws.jpg\\\"></p><p>so they say</p>\",\"PubDate\":\"2018-10-23T18:46:57.2711147Z\",\"LastModified\":\"2018-10-23T18:46:57.284584Z\",\"IsPublished\":true,\"MenuOnly\":false,\"ShowMenu\":false,\"ViewRoles\":null,\"Categories\":[],\"Comments\":[],\"ShowHeading\":true,\"ShowPubDate\":false,\"ShowLastModified\":false,\"ShowCategories\":false,\"ShowComments\":false,\"MenuFilters\":null,\"DisableEditor\":false,\"Resources\":[],\"ContentType\":\"html\",\"CreatedUtc\":\"2018-10-23T18:45:59.3355404Z\",\"CreatedByUser\":null,\"LastModifiedByUser\":\"admin\",\"DraftContent\":null,\"DraftAuthor\":null,\"DraftPubDate\":null,\"TemplateKey\":null,\"SerializedModel\":null,\"DraftSerializedModel\":null,\"Serializer\":null}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/f83067b4-919d-4910-acd1-4b3b1c210ecf/page/2c945759-1c3b-43ac-bf4b-241082ee6166.json",
    "content": "{\"Id\":\"2c945759-1c3b-43ac-bf4b-241082ee6166\",\"ProjectId\":\"f83067b4-919d-4910-acd1-4b3b1c210ecf\",\"ParentId\":\"0\",\"ParentSlug\":\"\",\"PageOrder\":3,\"Title\":\"About\",\"Author\":\"\",\"Slug\":\"about\",\"ExternalUrl\":null,\"CorrelationKey\":null,\"MetaDescription\":\"meta meta meta\",\"MetaJson\":null,\"MetaHtml\":null,\"Content\":\"<p>This could be an about page couldn't it so be true</p>\\r\\n\\r\\n<p><img alt=\\\"snow day\\\" src=\\\"/media/images/img_1378-ws.jpg\\\" style=\\\"height:412px; width:550px\\\" /></p>\\r\\n\\r\\n<p>can we edit here then can we go to the beach or something</p>\\r\\n\\r\\n<p>what about pix and stuff</p>\\r\\n\",\"PubDate\":\"2016-02-24T18:00:00Z\",\"LastModified\":\"2025-01-24T14:30:46.8912066Z\",\"IsPublished\":true,\"MenuOnly\":false,\"ShowMenu\":false,\"ViewRoles\":null,\"Categories\":[],\"Comments\":[],\"ShowHeading\":true,\"ShowPubDate\":false,\"ShowLastModified\":false,\"ShowCategories\":false,\"ShowComments\":false,\"MenuFilters\":null,\"DisableEditor\":false,\"Resources\":[],\"ContentType\":\"html\",\"CreatedUtc\":\"2025-01-24T10:28:53.2710158Z\",\"CreatedByUser\":null,\"LastModifiedByUser\":null,\"DraftContent\":null,\"DraftAuthor\":null,\"DraftPubDate\":null,\"TemplateKey\":null,\"SerializedModel\":null,\"DraftSerializedModel\":null,\"Serializer\":null,\"ShowCreatedBy\":null,\"ShowCreatedDate\":null,\"ShowLastModifiedBy\":null,\"ShowLastModifiedDate\":null,\"Script\":\"alert(\\\"hi\\\");\\r\\nalert(\\\"there\\\");\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/f83067b4-919d-4910-acd1-4b3b1c210ecf/page/65f4f88c-e9ea-4351-954a-f828b3f8229b.json",
    "content": "{\"Id\":\"65f4f88c-e9ea-4351-954a-f828b3f8229b\",\"ProjectId\":\"f83067b4-919d-4910-acd1-4b3b1c210ecf\",\"ParentId\":\"2c945759-1c3b-43ac-bf4b-241082ee6166\",\"ParentSlug\":\"about\",\"PageOrder\":3,\"Title\":\"Child Page\",\"Author\":\"Admin\",\"Slug\":\"child-page\",\"ExternalUrl\":null,\"CorrelationKey\":null,\"MetaDescription\":null,\"MetaJson\":null,\"MetaHtml\":null,\"Content\":\"<p>this is content isn't it? yes yes yes it is</p>\\r\\n\\r\\n<p>so cool! draft</p>\\r\\n\",\"PubDate\":\"2018-11-14T13:58:19.1919Z\",\"LastModified\":\"2018-12-16T15:57:32.6883459Z\",\"IsPublished\":true,\"MenuOnly\":false,\"ShowMenu\":false,\"ViewRoles\":null,\"Categories\":[],\"Comments\":[],\"ShowHeading\":true,\"ShowPubDate\":false,\"ShowCategories\":false,\"ShowComments\":false,\"MenuFilters\":null,\"DisableEditor\":false,\"Resources\":[],\"ContentType\":\"html\",\"CreatedUtc\":\"2018-11-13T13:58:25.4011049Z\",\"CreatedByUser\":null,\"LastModifiedByUser\":\"admin\",\"DraftContent\":null,\"DraftAuthor\":null,\"DraftPubDate\":null,\"TemplateKey\":null,\"SerializedModel\":null,\"DraftSerializedModel\":null,\"Serializer\":null}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/f83067b4-919d-4910-acd1-4b3b1c210ecf/page/796036f8-ee91-4c3c-8c5a-bb339a704ae0.json",
    "content": "{\"Id\":\"796036f8-ee91-4c3c-8c5a-bb339a704ae0\",\"ProjectId\":\"f83067b4-919d-4910-acd1-4b3b1c210ecf\",\"ParentId\":\"2c945759-1c3b-43ac-bf4b-241082ee6166\",\"ParentSlug\":\"about\",\"PageOrder\":3,\"Title\":\"our team\",\"Author\":\"Admin\",\"Slug\":\"our-team\",\"ExternalUrl\":null,\"CorrelationKey\":null,\"MetaDescription\":\"yah we have a team that teams uptime\",\"MetaJson\":null,\"MetaHtml\":null,\"Content\":\"<p>This is an article about our team, which is a good team indeed.</p>\\r\\n\",\"PubDate\":\"2017-01-10T16:52:00Z\",\"LastModified\":\"2017-10-15T14:46:43.6867843Z\",\"IsPublished\":true,\"MenuOnly\":false,\"ShowMenu\":false,\"ViewRoles\":null,\"Categories\":[],\"Comments\":[],\"ShowHeading\":true,\"ShowPubDate\":false,\"ShowLastModified\":false,\"ShowCategories\":false,\"ShowComments\":false,\"MenuFilters\":null,\"DisableEditor\":false,\"Resources\":[]}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/f83067b4-919d-4910-acd1-4b3b1c210ecf/page/869cf304-6409-4b4d-880a-a6aa00c37075.json",
    "content": "{\"Id\":\"869cf304-6409-4b4d-880a-a6aa00c37075\",\"ProjectId\":\"f83067b4-919d-4910-acd1-4b3b1c210ecf\",\"ParentId\":\"0\",\"ParentSlug\":\"\",\"PageOrder\":3,\"Title\":\"Home\",\"Author\":\"Admin\",\"Slug\":\"home\",\"ExternalUrl\":null,\"CorrelationKey\":null,\"MetaDescription\":null,\"MetaJson\":null,\"MetaHtml\":null,\"Content\":\"<p>Welcome Home!</p>\\r\\n\\r\\n<p>This is the home page!</p>\\r\\n\",\"PubDate\":\"2017-03-10T18:40:00Z\",\"LastModified\":\"2025-01-24T10:25:42.5017972Z\",\"IsPublished\":true,\"MenuOnly\":false,\"ShowMenu\":false,\"ViewRoles\":null,\"Categories\":[],\"Comments\":[],\"ShowHeading\":true,\"ShowPubDate\":false,\"ShowLastModified\":false,\"ShowCategories\":false,\"ShowComments\":false,\"MenuFilters\":null,\"DisableEditor\":false,\"Resources\":[{\"Id\":\"2adbc417-b75c-4a6f-a2f0-4f14e53958da\",\"ContentId\":null,\"Sort\":1,\"Type\":null,\"Environment\":null,\"Url\":null,\"Script\":\"alert(\\\"hello\\\");\"},{\"Id\":\"735a6240-aceb-4e58-a8d2-e3844126e468\",\"ContentId\":\"869cf304-6409-4b4d-880a-a6aa00c37075\",\"Sort\":1,\"Type\":null,\"Environment\":null,\"Url\":null,\"Script\":\"test\"}],\"ContentType\":\"html\",\"CreatedUtc\":\"2022-01-25T13:46:15.8644194Z\",\"CreatedByUser\":null,\"LastModifiedByUser\":\"admin\",\"DraftContent\":null,\"DraftAuthor\":null,\"DraftPubDate\":null,\"TemplateKey\":null,\"SerializedModel\":null,\"DraftSerializedModel\":null,\"Serializer\":null,\"ShowCreatedBy\":null,\"ShowCreatedDate\":null,\"ShowLastModifiedBy\":null,\"ShowLastModifiedDate\":null,\"Script\":null}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/f83067b4-919d-4910-acd1-4b3b1c210ecf/page/a490fed8-a889-4c1a-be5a-df0ca09e99c6.json",
    "content": "{\"Id\":\"a490fed8-a889-4c1a-be5a-df0ca09e99c6\",\"ProjectId\":\"f83067b4-919d-4910-acd1-4b3b1c210ecf\",\"ParentId\":\"0fe39377-57a9-4d42-a9f1-22fc0c5ba18c\",\"ParentSlug\":\"nothome\",\"PageOrder\":1,\"Title\":\"Some Child Page\",\"Author\":\"Joe Audette\",\"Slug\":\"some-child-page\",\"ExternalUrl\":null,\"CorrelationKey\":null,\"MetaDescription\":\"some child page meta\",\"MetaJson\":null,\"MetaHtml\":null,\"Content\":\"<p>this is some child page, and now I'm editing a draft</p>\\r\\n\",\"PubDate\":\"2018-06-26T15:43:18.1818\",\"LastModified\":\"2018-06-27T19:43:29.360947Z\",\"IsPublished\":true,\"MenuOnly\":false,\"ShowMenu\":false,\"ViewRoles\":null,\"Categories\":[],\"Comments\":[],\"ShowHeading\":true,\"ShowPubDate\":false,\"ShowLastModified\":false,\"ShowCategories\":false,\"ShowComments\":false,\"MenuFilters\":null,\"DisableEditor\":false,\"Resources\":[],\"ContentType\":\"html\",\"CreatedUtc\":\"2018-06-27T18:54:12.5122856Z\",\"CreatedByUser\":null,\"LastModifiedByUser\":\"admin\",\"DraftContent\":null,\"DraftAuthor\":null,\"DraftPubDate\":null,\"TemplateKey\":null,\"SerializedModel\":null,\"DraftSerializedModel\":null,\"Serializer\":null}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/f83067b4-919d-4910-acd1-4b3b1c210ecf/page/ac4051c3-064a-4e7b-a2a3-c34f4c6ca7a6.json",
    "content": "{\"Id\":\"ac4051c3-064a-4e7b-a2a3-c34f4c6ca7a6\",\"ProjectId\":\"f83067b4-919d-4910-acd1-4b3b1c210ecf\",\"ParentId\":\"0\",\"ParentSlug\":\"\",\"PageOrder\":3,\"Title\":\"docs\",\"Author\":\"Admin\",\"Slug\":\"more-docs\",\"ExternalUrl\":null,\"CorrelationKey\":null,\"MetaDescription\":\"docs and stuff\",\"MetaJson\":null,\"MetaHtml\":null,\"Content\":\"<p>stuff goes here</p>\\r\\n\",\"PubDate\":\"2018-06-30T13:16:47.6306541Z\",\"LastModified\":\"2018-06-30T13:16:47.6343468Z\",\"IsPublished\":true,\"MenuOnly\":false,\"ShowMenu\":false,\"ViewRoles\":null,\"Categories\":[],\"Comments\":[],\"ShowHeading\":true,\"ShowPubDate\":false,\"ShowLastModified\":false,\"ShowCategories\":false,\"ShowComments\":false,\"MenuFilters\":null,\"DisableEditor\":false,\"Resources\":[],\"ContentType\":\"html\",\"CreatedUtc\":\"2018-06-30T13:16:47.6292991Z\",\"CreatedByUser\":null,\"LastModifiedByUser\":\"admin\",\"DraftContent\":null,\"DraftAuthor\":null,\"DraftPubDate\":null,\"TemplateKey\":null,\"SerializedModel\":null,\"DraftSerializedModel\":null,\"Serializer\":null}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/f83067b4-919d-4910-acd1-4b3b1c210ecf/page/another-child.json",
    "content": "{\"Id\":\"another-child\",\"ProjectId\":\"f83067b4-919d-4910-acd1-4b3b1c210ecf\",\"ParentId\":\"0fe39377-57a9-4d42-a9f1-22fc0c5ba18c\",\"ParentSlug\":\"nothome\",\"PageOrder\":3,\"Title\":\"Another child\",\"Author\":\"Admin\",\"Slug\":\"another-child\",\"ExternalUrl\":null,\"CorrelationKey\":null,\"MetaDescription\":null,\"MetaJson\":null,\"MetaHtml\":null,\"Content\":\"<p>another child page</p>\\r\\n\",\"PubDate\":\"2018-03-25T16:19:32.4880509Z\",\"LastModified\":\"2018-04-05T20:08:44.7642494Z\",\"IsPublished\":true,\"MenuOnly\":false,\"ShowMenu\":false,\"ViewRoles\":null,\"Categories\":[],\"Comments\":[],\"ShowHeading\":true,\"ShowPubDate\":false,\"ShowLastModified\":false,\"ShowCategories\":false,\"ShowComments\":false,\"MenuFilters\":null,\"DisableEditor\":false,\"Resources\":[],\"ContentType\":\"html\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/f83067b4-919d-4910-acd1-4b3b1c210ecf/page/first-draft.json",
    "content": "{\"Id\":\"first-draft\",\"ProjectId\":\"f83067b4-919d-4910-acd1-4b3b1c210ecf\",\"ParentId\":\"ac4051c3-064a-4e7b-a2a3-c34f4c6ca7a6\",\"ParentSlug\":\"more-docs\",\"PageOrder\":11,\"Title\":\"First Draft\",\"Author\":\"Admin\",\"Slug\":\"first-draft\",\"ExternalUrl\":null,\"CorrelationKey\":null,\"MetaDescription\":\"drafty\",\"MetaJson\":null,\"MetaHtml\":null,\"Content\":\"<p>Its drafty in here. Yes quite drafty indeed.</p>\\r\\n\\r\\n<blockquote>\\r\\n<p>A big wind blows and so the tall grass bends, but for you don't push too hard my friend.</p>\\r\\n</blockquote>\\r\\n\\r\\n<p>-- Neil Young</p>\\r\\n\\r\\n<p>Edit 1 save draft</p>\\r\\n\\r\\n<p>Edit 2 publish later</p>\\r\\n\",\"PubDate\":\"2018-07-04T18:14:31.3131Z\",\"LastModified\":\"2018-07-04T18:45:43.4514831Z\",\"IsPublished\":true,\"MenuOnly\":false,\"ShowMenu\":false,\"ViewRoles\":null,\"Categories\":[],\"Comments\":[],\"ShowHeading\":true,\"ShowPubDate\":false,\"ShowLastModified\":false,\"ShowCategories\":false,\"ShowComments\":false,\"MenuFilters\":null,\"DisableEditor\":false,\"Resources\":[],\"ContentType\":\"html\",\"CreatedUtc\":\"2018-06-30T14:06:22.8742115Z\",\"CreatedByUser\":\"admin\",\"LastModifiedByUser\":\"admin\",\"DraftContent\":null,\"DraftAuthor\":null,\"DraftPubDate\":null,\"TemplateKey\":null,\"SerializedModel\":null,\"DraftSerializedModel\":null,\"Serializer\":null}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/f83067b4-919d-4910-acd1-4b3b1c210ecf/page/level-4.json",
    "content": "{\"Id\":\"level-4\",\"ProjectId\":\"f83067b4-919d-4910-acd1-4b3b1c210ecf\",\"ParentId\":\"another-child\",\"ParentSlug\":\"another-child\",\"PageOrder\":2,\"Title\":\"Level 4\",\"Author\":\"Admin\",\"Slug\":\"level-4\",\"ExternalUrl\":null,\"CorrelationKey\":null,\"MetaDescription\":null,\"MetaJson\":null,\"MetaHtml\":null,\"Content\":\"<p>level 4 page</p>\\r\\n\",\"PubDate\":\"2018-03-25T19:18:43.5702806Z\",\"LastModified\":\"2018-03-25T19:18:43.5702806Z\",\"IsPublished\":true,\"MenuOnly\":false,\"ShowMenu\":false,\"ViewRoles\":null,\"Categories\":[],\"Comments\":[],\"ShowHeading\":true,\"ShowPubDate\":false,\"ShowLastModified\":false,\"ShowCategories\":false,\"ShowComments\":false,\"MenuFilters\":null,\"DisableEditor\":false,\"Resources\":[],\"ContentType\":\"html\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/f83067b4-919d-4910-acd1-4b3b1c210ecf/page/level-5.json",
    "content": "{\"Id\":\"level-5\",\"ProjectId\":\"f83067b4-919d-4910-acd1-4b3b1c210ecf\",\"ParentId\":\"level-4\",\"ParentSlug\":\"level-4\",\"PageOrder\":2,\"Title\":\"Level 5\",\"Author\":\"Admin\",\"Slug\":\"level-5\",\"ExternalUrl\":null,\"CorrelationKey\":null,\"MetaDescription\":null,\"MetaJson\":null,\"MetaHtml\":null,\"Content\":\"<p>level 5</p>\\r\\n\",\"PubDate\":\"2018-03-25T19:19:13.2171362Z\",\"LastModified\":\"2018-03-25T19:19:13.2171362Z\",\"IsPublished\":true,\"MenuOnly\":false,\"ShowMenu\":false,\"ViewRoles\":null,\"Categories\":[],\"Comments\":[],\"ShowHeading\":true,\"ShowPubDate\":false,\"ShowLastModified\":false,\"ShowCategories\":false,\"ShowComments\":false,\"MenuFilters\":null,\"DisableEditor\":false,\"Resources\":[],\"ContentType\":\"html\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/f83067b4-919d-4910-acd1-4b3b1c210ecf/page/level-6.json",
    "content": "{\"Id\":\"level-6\",\"ProjectId\":\"f83067b4-919d-4910-acd1-4b3b1c210ecf\",\"ParentId\":\"level-5\",\"ParentSlug\":\"level-5\",\"PageOrder\":2,\"Title\":\"Level 6\",\"Author\":\"Admin\",\"Slug\":\"level-6\",\"ExternalUrl\":null,\"CorrelationKey\":null,\"MetaDescription\":null,\"MetaJson\":null,\"MetaHtml\":null,\"Content\":\"<p>level 6</p>\\r\\n\",\"PubDate\":\"2018-03-25T19:19:33.6708251Z\",\"LastModified\":\"2018-03-25T19:19:33.6708251Z\",\"IsPublished\":true,\"MenuOnly\":false,\"ShowMenu\":false,\"ViewRoles\":null,\"Categories\":[],\"Comments\":[],\"ShowHeading\":true,\"ShowPubDate\":false,\"ShowLastModified\":false,\"ShowCategories\":false,\"ShowComments\":false,\"MenuFilters\":null,\"DisableEditor\":false,\"Resources\":[],\"ContentType\":\"html\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/f83067b4-919d-4910-acd1-4b3b1c210ecf/page/links.json",
    "content": "{\"Id\":\"links\",\"ProjectId\":\"f83067b4-919d-4910-acd1-4b3b1c210ecf\",\"ParentId\":\"ac4051c3-064a-4e7b-a2a3-c34f4c6ca7a6\",\"ParentSlug\":\"more-docs\",\"PageOrder\":14,\"Title\":\"Links\",\"Author\":\"Admin\",\"Slug\":\"links\",\"ExternalUrl\":\"\",\"CorrelationKey\":null,\"MetaDescription\":null,\"MetaJson\":null,\"MetaHtml\":null,\"Content\":\"<div class=\\\"content-top\\\">\\r\\n    \\r\\n</div>\\r\\n<div class=\\\"links-wrap\\\">\\r\\n        <div class=\\\"clearfix linklist-item\\\">\\r\\n            <h2 class=\\\"h4\\\"><a href=\\\"/more-docs\\\">Docs</a></h2>\\r\\n            <a class=\\\"\\\" href=\\\"/more-docs\\\">\\r\\n            </a>\\r\\n            <p class=\\\"\\\"></p>\\r\\n        </div>\\r\\n        <div class=\\\"clearfix linklist-item\\\">\\r\\n            <h2 class=\\\"h4\\\"><a href=\\\"/blog\\\">Blog</a></h2>\\r\\n            <a class=\\\"\\\" href=\\\"/blog\\\">\\r\\n            </a>\\r\\n            <p class=\\\"\\\"></p>\\r\\n        </div>\\r\\n        <div class=\\\"clearfix linklist-item\\\">\\r\\n            <h2 class=\\\"h4\\\"><a href=\\\"/contact\\\">Contact</a></h2>\\r\\n            <a class=\\\"\\\" href=\\\"/contact\\\">\\r\\n            </a>\\r\\n            <p class=\\\"\\\"></p>\\r\\n        </div>\\r\\n        <div class=\\\"clearfix linklist-item\\\">\\r\\n            <h2 class=\\\"h4\\\"><a href=\\\"https://www.cloudscribe.com\\\" target=\\\"_blank\\\">cloudscribe</a></h2>\\r\\n            <a class=\\\"\\\" target=\\\"_blank\\\" href=\\\"https://www.cloudscribe.com\\\">\\r\\n            </a>\\r\\n            <p class=\\\"\\\"></p>\\r\\n        </div>\\r\\n</div>\\r\\n<div class=\\\"mt-3 content-bottom\\\">\\r\\n    \\r\\n</div>\\r\\n\\r\\n\",\"PubDate\":\"2019-01-08T16:14:51.303396Z\",\"LastModified\":\"2019-01-08T16:14:51.3363236Z\",\"IsPublished\":true,\"MenuOnly\":false,\"ShowMenu\":false,\"ViewRoles\":null,\"Categories\":[],\"Comments\":[],\"ShowHeading\":true,\"ShowPubDate\":false,\"ShowLastModified\":false,\"ShowCategories\":false,\"ShowComments\":false,\"MenuFilters\":null,\"DisableEditor\":false,\"Resources\":[],\"ContentType\":\"html\",\"CreatedUtc\":\"2019-01-04T11:11:17.5409433Z\",\"CreatedByUser\":\"admin\",\"LastModifiedByUser\":\"admin\",\"DraftContent\":null,\"DraftAuthor\":null,\"DraftPubDate\":null,\"TemplateKey\":\"sct-ListOfLinks\",\"SerializedModel\":\"{\\\"ContentAbove\\\":null,\\\"ContentBelow\\\":null,\\\"Items\\\":[{\\\"FullSizeUrl\\\":null,\\\"ResizedUrl\\\":null,\\\"ThumbnailUrl\\\":null,\\\"LinkUrl\\\":\\\"/more-docs\\\",\\\"Title\\\":\\\"Docs\\\",\\\"Description\\\":null,\\\"Sort\\\":1,\\\"OpensInNewWindow\\\":false},{\\\"FullSizeUrl\\\":null,\\\"ResizedUrl\\\":null,\\\"ThumbnailUrl\\\":null,\\\"LinkUrl\\\":\\\"/blog\\\",\\\"Title\\\":\\\"Blog\\\",\\\"Description\\\":null,\\\"Sort\\\":3,\\\"OpensInNewWindow\\\":false},{\\\"FullSizeUrl\\\":null,\\\"ResizedUrl\\\":null,\\\"ThumbnailUrl\\\":null,\\\"LinkUrl\\\":\\\"/contact\\\",\\\"Title\\\":\\\"Contact\\\",\\\"Description\\\":null,\\\"Sort\\\":5,\\\"OpensInNewWindow\\\":false},{\\\"FullSizeUrl\\\":null,\\\"ResizedUrl\\\":null,\\\"ThumbnailUrl\\\":null,\\\"LinkUrl\\\":\\\"https://www.cloudscribe.com\\\",\\\"Title\\\":\\\"cloudscribe\\\",\\\"Description\\\":null,\\\"Sort\\\":7,\\\"OpensInNewWindow\\\":true}]}\",\"DraftSerializedModel\":null,\"Serializer\":\"Json\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/f83067b4-919d-4910-acd1-4b3b1c210ecf/page/list-of-links.json",
    "content": "{\"Id\":\"list-of-links\",\"ProjectId\":\"f83067b4-919d-4910-acd1-4b3b1c210ecf\",\"ParentId\":\"0\",\"ParentSlug\":\"\",\"PageOrder\":3,\"Title\":\"list of links\",\"Author\":\"Admin\",\"Slug\":\"list-of-links\",\"ExternalUrl\":\"\",\"CorrelationKey\":null,\"MetaDescription\":null,\"MetaJson\":null,\"MetaHtml\":null,\"Content\":\"\\r\\n<div class=\\\"content-top\\\">\\r\\n    \\r\\n</div>\\r\\n<ul class=\\\"list-group\\\">\\r\\n    <li class=\\\"list-group-item d-flex justify-content-between align-items-start flex-column\\\">\\r\\n        <div class=\\\"ms-2\\\">\\r\\n            <h4 class=\\\"d-flex align-items-start\\\"><a href=\\\"https://www.google.com\\\" target=\\\"_blank\\\">link 1</a> \\r\\n                    <span class=\\\"fas fa-external-link-alt ms-2 fs-6\\\" aria-hidden=\\\"true\\\"></span>\\r\\n            </h4>\\r\\n        </div>\\r\\n        <div class=\\\"ms-2 d-flex me-auto\\\">\\r\\n                <a target=\\\"_blank\\\" href=\\\"https://www.google.com\\\">\\r\\n                    <img class=\\\"flex-start me-2\\\" src=\\\"/media/images/img_1150-ws.jpg\\\" style=\\\"height:150px;\\\" />\\r\\n                </a>\\r\\n            <p>google.com</p>\\r\\n        </div>\\r\\n    </li>\\r\\n    <li class=\\\"list-group-item d-flex justify-content-between align-items-start flex-column\\\">\\r\\n        <div class=\\\"ms-2\\\">\\r\\n            <h4 class=\\\"d-flex align-items-start\\\"><a href=\\\"https://www.bbc.co.cuk\\\">link 2</a> \\r\\n            </h4>\\r\\n        </div>\\r\\n        <div class=\\\"ms-2 d-flex me-auto\\\">\\r\\n            <p>bbc</p>\\r\\n        </div>\\r\\n    </li>\\r\\n</ul>\\r\\n<div class=\\\"mt-3 content-bottom\\\">\\r\\n    \\r\\n</div>\\r\\n\\r\\n\",\"PubDate\":\"2024-12-11T14:21:11.7769023Z\",\"LastModified\":\"2024-12-11T15:56:20.243055Z\",\"IsPublished\":true,\"MenuOnly\":false,\"ShowMenu\":false,\"ViewRoles\":null,\"Categories\":[],\"Comments\":[],\"ShowHeading\":true,\"ShowPubDate\":false,\"ShowLastModified\":false,\"ShowCategories\":false,\"ShowComments\":false,\"MenuFilters\":null,\"DisableEditor\":false,\"Resources\":[],\"ContentType\":\"html\",\"CreatedUtc\":\"2024-12-11T14:19:46.3814172Z\",\"CreatedByUser\":\"admin\",\"LastModifiedByUser\":\"admin\",\"DraftContent\":null,\"DraftAuthor\":null,\"DraftPubDate\":null,\"TemplateKey\":\"sct-ListOfLinks\",\"SerializedModel\":\"{\\\"ContentAbove\\\":null,\\\"ContentBelow\\\":null,\\\"Items\\\":[{\\\"FullSizeUrl\\\":null,\\\"ResizedUrl\\\":\\\"/media/images/img_1150-ws.jpg\\\",\\\"ThumbnailUrl\\\":null,\\\"LinkUrl\\\":\\\"https://www.google.com\\\",\\\"Title\\\":\\\"link 1\\\",\\\"Description\\\":\\\"google.com\\\",\\\"AltText\\\":null,\\\"Sort\\\":1,\\\"OpensInNewWindow\\\":true},{\\\"FullSizeUrl\\\":null,\\\"ResizedUrl\\\":null,\\\"ThumbnailUrl\\\":null,\\\"LinkUrl\\\":\\\"https://www.bbc.co.cuk\\\",\\\"Title\\\":\\\"link 2\\\",\\\"Description\\\":\\\"bbc\\\",\\\"AltText\\\":null,\\\"Sort\\\":3,\\\"OpensInNewWindow\\\":false}]}\",\"DraftSerializedModel\":null,\"Serializer\":\"Json\",\"ShowCreatedBy\":null,\"ShowCreatedDate\":null,\"ShowLastModifiedBy\":null,\"ShowLastModifiedDate\":null}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/f83067b4-919d-4910-acd1-4b3b1c210ecf/page/my-templated-page.json",
    "content": "{\"Id\":\"my-templated-page\",\"ProjectId\":\"f83067b4-919d-4910-acd1-4b3b1c210ecf\",\"ParentId\":\"our-staff\",\"ParentSlug\":\"our-staff\",\"PageOrder\":3,\"Title\":\"Mike Nolan\",\"Author\":\"Joe Audette\",\"Slug\":\"mike-nolan\",\"ExternalUrl\":\"\",\"CorrelationKey\":null,\"MetaDescription\":\"meta meta\",\"MetaJson\":null,\"MetaHtml\":null,\"Content\":\"<div>\\r\\n    <a href=\\\"/media/images/img_3862-crop.jpg\\\"><img src=\\\"/media/images/img_3862-crop.jpg\\\" alt=\\\"Mike\\\" /></a>\\r\\n    <dl class=\\\"row\\\">\\r\\n            <dt class=\\\"col-sm-2\\\">\\r\\n                Email\\r\\n            </dt>\\r\\n            <dd class=\\\"col-sm-10\\\">\\r\\n                mike@cloudscribe.com\\r\\n            </dd>\\r\\n                    <dt class=\\\"col-sm-2\\\">\\r\\n                Phone\\r\\n            </dt>\\r\\n            <dd class=\\\"col-sm-10\\\">\\r\\n                704-222-3333\\r\\n            </dd>\\r\\n                                    <dt class=\\\"col-sm-2\\\">\\r\\n                Department\\r\\n            </dt>\\r\\n            <dd class=\\\"col-sm-10\\\">\\r\\n                Marketing\\r\\n            </dd>\\r\\n                    <dt class=\\\"col-sm-2\\\">\\r\\n                Position\\r\\n            </dt>\\r\\n            <dd class=\\\"col-sm-10\\\">\\r\\n                Chief Jingo Writer\\r\\n            </dd>\\r\\n                    <dt class=\\\"col-sm-2\\\">\\r\\n                Biography\\r\\n            </dt>\\r\\n            <dd class=\\\"col-sm-10\\\">\\r\\n                Project manager, guitarist, and songwriter.&#xD;&#xA;\\r\\n            </dd>\\r\\n        \\r\\n    </dl>\\r\\n</div>\\r\\n\\r\\n\\r\\n\",\"PubDate\":\"2018-07-03T13:07:29.2929Z\",\"LastModified\":\"2018-08-20T12:47:35.3779178Z\",\"IsPublished\":true,\"MenuOnly\":false,\"ShowMenu\":false,\"ViewRoles\":null,\"Categories\":[],\"Comments\":[],\"ShowHeading\":true,\"ShowPubDate\":false,\"ShowLastModified\":false,\"ShowCategories\":false,\"ShowComments\":false,\"MenuFilters\":null,\"DisableEditor\":false,\"Resources\":[],\"ContentType\":\"html\",\"CreatedUtc\":\"2018-06-26T19:33:04.4201607Z\",\"CreatedByUser\":\"admin\",\"LastModifiedByUser\":\"admin\",\"DraftContent\":null,\"DraftAuthor\":null,\"DraftPubDate\":null,\"TemplateKey\":\"StaffMemberTemplate\",\"SerializedModel\":\"{\\\"FirstName\\\":\\\"Mike\\\",\\\"LastName\\\":\\\"Nolan\\\",\\\"Phone\\\":\\\"704-222-3333\\\",\\\"MobilePhone\\\":null,\\\"Email\\\":\\\"mike@cloudscribe.com\\\",\\\"ImageUrl\\\":\\\"/media/images/img_3862-crop.jpg\\\",\\\"ImageFullSizeUrl\\\":\\\"/media/images/img_3862-crop.jpg\\\",\\\"ImageThumbSizeUrl\\\":null,\\\"ProfileUrl\\\":null,\\\"Department\\\":\\\"Marketing\\\",\\\"Position\\\":\\\"Chief Jingo Writer\\\",\\\"Biography\\\":\\\"Project manager, guitarist, and songwriter.\\\\r\\\\n\\\",\\\"JoinDate\\\":null,\\\"YearsExperience\\\":0,\\\"Salary\\\":0.00,\\\"AnnualBonus\\\":null}\",\"DraftSerializedModel\":null,\"Serializer\":\"Json\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/f83067b4-919d-4910-acd1-4b3b1c210ecf/page/new-page-test.json",
    "content": "{\"Id\":\"new-page-test\",\"ProjectId\":\"f83067b4-919d-4910-acd1-4b3b1c210ecf\",\"ParentId\":\"0\",\"ParentSlug\":\"\",\"PageOrder\":20,\"Title\":\"New Page Test\",\"Author\":\"Admin\",\"Slug\":\"new-page-test\",\"ExternalUrl\":null,\"CorrelationKey\":null,\"MetaDescription\":null,\"MetaJson\":null,\"MetaHtml\":null,\"Content\":\"<p>Some text<img alt=\\\" \\\" src=\\\"/media/images/test_2023-10-04t15-08-30-2.png\\\" /></p>\\r\\n\",\"PubDate\":\"2023-10-04T15:08:33.2153344Z\",\"LastModified\":\"2023-10-04T15:08:33.2373168Z\",\"IsPublished\":true,\"MenuOnly\":false,\"ShowMenu\":false,\"ViewRoles\":null,\"Categories\":[],\"Comments\":[],\"ShowHeading\":true,\"ShowPubDate\":false,\"ShowLastModified\":false,\"ShowCategories\":false,\"ShowComments\":false,\"MenuFilters\":null,\"DisableEditor\":false,\"Resources\":[],\"ContentType\":\"html\",\"CreatedUtc\":\"2023-10-04T15:08:33.2137228Z\",\"CreatedByUser\":\"admin\",\"LastModifiedByUser\":\"admin\",\"DraftContent\":null,\"DraftAuthor\":null,\"DraftPubDate\":null,\"TemplateKey\":null,\"SerializedModel\":null,\"DraftSerializedModel\":null,\"Serializer\":null}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/f83067b4-919d-4910-acd1-4b3b1c210ecf/page/ol-import.json",
    "content": "{\"Id\":\"ol-import\",\"ProjectId\":\"f83067b4-919d-4910-acd1-4b3b1c210ecf\",\"ParentId\":\"0\",\"ParentSlug\":\"\",\"PageOrder\":17,\"Title\":\"Ol Import\",\"Author\":\"Admin\",\"Slug\":\"ol-import\",\"ExternalUrl\":null,\"CorrelationKey\":null,\"MetaDescription\":null,\"MetaJson\":null,\"MetaHtml\":null,\"Content\":\"<p>from the past</p>\\r\\n\",\"PubDate\":\"2019-03-14T20:19:21.2121Z\",\"LastModified\":\"2019-03-18T20:19:29.0793196Z\",\"IsPublished\":true,\"MenuOnly\":false,\"ShowMenu\":false,\"ViewRoles\":null,\"Categories\":[],\"Comments\":[],\"ShowHeading\":true,\"ShowPubDate\":false,\"ShowLastModified\":false,\"ShowCategories\":false,\"ShowComments\":false,\"MenuFilters\":null,\"DisableEditor\":false,\"Resources\":[],\"ContentType\":\"html\",\"CreatedUtc\":\"2019-03-18T20:19:28.9793015Z\",\"CreatedByUser\":\"admin\",\"LastModifiedByUser\":\"admin\",\"DraftContent\":null,\"DraftAuthor\":null,\"DraftPubDate\":null,\"TemplateKey\":null,\"SerializedModel\":null,\"DraftSerializedModel\":null,\"Serializer\":null}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/f83067b4-919d-4910-acd1-4b3b1c210ecf/page/our-staff.json",
    "content": "{\"Id\":\"our-staff\",\"ProjectId\":\"f83067b4-919d-4910-acd1-4b3b1c210ecf\",\"ParentId\":\"0\",\"ParentSlug\":\"\",\"PageOrder\":17,\"Title\":\"Our Staff\",\"Author\":\"Admin\",\"Slug\":\"our-staff\",\"ExternalUrl\":null,\"CorrelationKey\":null,\"MetaDescription\":\"About our team of professionals\",\"MetaJson\":null,\"MetaHtml\":null,\"Content\":\"<p>Staff index page</p>\\r\\n\",\"PubDate\":\"2018-07-02T11:49:38.0201227Z\",\"LastModified\":\"2018-07-02T11:49:38.0201227Z\",\"IsPublished\":true,\"MenuOnly\":false,\"ShowMenu\":false,\"ViewRoles\":null,\"Categories\":[],\"Comments\":[],\"ShowHeading\":true,\"ShowPubDate\":false,\"ShowLastModified\":false,\"ShowCategories\":false,\"ShowComments\":false,\"MenuFilters\":null,\"DisableEditor\":false,\"Resources\":[],\"ContentType\":\"html\",\"CreatedUtc\":\"2018-07-02T11:49:38.0135425Z\",\"CreatedByUser\":\"admin\",\"LastModifiedByUser\":\"admin\",\"DraftContent\":null,\"DraftAuthor\":null,\"DraftPubDate\":null,\"TemplateKey\":null,\"SerializedModel\":null,\"DraftSerializedModel\":null,\"Serializer\":null}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/f83067b4-919d-4910-acd1-4b3b1c210ecf/page/react-demo.json",
    "content": "{\"Id\":\"react-demo\",\"ProjectId\":\"f83067b4-919d-4910-acd1-4b3b1c210ecf\",\"ParentId\":\"ac4051c3-064a-4e7b-a2a3-c34f4c6ca7a6\",\"ParentSlug\":\"more-docs\",\"PageOrder\":17,\"Title\":\"React Demo\",\"Author\":\"Admin\",\"Slug\":\"react-demo\",\"ExternalUrl\":null,\"CorrelationKey\":null,\"MetaDescription\":null,\"MetaJson\":null,\"MetaHtml\":null,\"Content\":\"<div id=\\\"react-app\\\">Loading...</div>\",\"PubDate\":\"2019-01-09T13:53:54.8867419Z\",\"LastModified\":\"2019-01-09T13:53:54.9143317Z\",\"IsPublished\":true,\"MenuOnly\":false,\"ShowMenu\":false,\"ViewRoles\":null,\"Categories\":[],\"Comments\":[],\"ShowHeading\":true,\"ShowPubDate\":false,\"ShowLastModified\":false,\"ShowCategories\":false,\"ShowComments\":false,\"MenuFilters\":null,\"DisableEditor\":true,\"Resources\":[{\"Id\":\"9162643e-1719-4110-a467-e13d496f1551\",\"ContentId\":\"react-demo\",\"Sort\":1,\"Type\":\"js\",\"Environment\":\"dev\",\"Url\":\"/dist/app-react.bundle.js\"}],\"ContentType\":\"html\",\"CreatedUtc\":\"2019-01-09T13:34:11.8200183Z\",\"CreatedByUser\":\"admin\",\"LastModifiedByUser\":\"admin\",\"DraftContent\":null,\"DraftAuthor\":null,\"DraftPubDate\":null,\"TemplateKey\":null,\"SerializedModel\":null,\"DraftSerializedModel\":null,\"Serializer\":null}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/f83067b4-919d-4910-acd1-4b3b1c210ecf/page/template-page.json",
    "content": "{\"Id\":\"template-page\",\"ProjectId\":\"f83067b4-919d-4910-acd1-4b3b1c210ecf\",\"ParentId\":\"2c945759-1c3b-43ac-bf4b-241082ee6166\",\"ParentSlug\":\"about\",\"PageOrder\":8,\"Title\":\"Template page\",\"Author\":\"Admin\",\"Slug\":\"template-page\",\"ExternalUrl\":\"\",\"CorrelationKey\":null,\"MetaDescription\":null,\"MetaJson\":null,\"MetaHtml\":null,\"Content\":\"<div class=\\\"row\\\">\\r\\n        <div class=\\\"col\\\">\\r\\n            <p>this is a template page, groovy huh?</p>\\r\\n\\r\\n        </div>\\r\\n</div>\\r\\n\\r\\n\\r\\n\",\"PubDate\":\"2024-12-06T11:22:46.4584015Z\",\"LastModified\":\"2024-12-06T12:32:17.0341262Z\",\"IsPublished\":true,\"MenuOnly\":false,\"ShowMenu\":false,\"ViewRoles\":null,\"Categories\":[],\"Comments\":[],\"ShowHeading\":true,\"ShowPubDate\":false,\"ShowLastModified\":false,\"ShowCategories\":false,\"ShowComments\":false,\"MenuFilters\":null,\"DisableEditor\":false,\"Resources\":[],\"ContentType\":\"html\",\"CreatedUtc\":\"2019-08-14T13:01:12.810239Z\",\"CreatedByUser\":\"admin\",\"LastModifiedByUser\":\"admin\",\"DraftContent\":null,\"DraftAuthor\":null,\"DraftPubDate\":null,\"TemplateKey\":\"sct-ColumnsWithImages\",\"SerializedModel\":\"{\\\"Layout\\\":\\\"SectionsWithImageRenderColumnsPartial\\\",\\\"SectionOneHeading\\\":null,\\\"SectionOneContent\\\":\\\"<p>this is a template page, groovy huh?</p>\\\\r\\\\n\\\",\\\"SectionOneResizedUrl\\\":null,\\\"SectionOneFullSizeUrl\\\":null,\\\"SectionOneAltText\\\":null,\\\"SectionTwoHeading\\\":null,\\\"SectionTwoContent\\\":null,\\\"SectionTwoResizedUrl\\\":null,\\\"SectionTwoFullSizeUrl\\\":null,\\\"SectionTwoAltText\\\":null,\\\"SectionThreeHeading\\\":null,\\\"SectionThreeContent\\\":null,\\\"SectionThreeResizedUrl\\\":null,\\\"SectionThreeFullSizeUrl\\\":null,\\\"SectionThreeAltText\\\":null,\\\"SectionFourHeading\\\":null,\\\"SectionFourContent\\\":null,\\\"SectionFourResizedUrl\\\":null,\\\"SectionFourFullSizeUrl\\\":null,\\\"SectionFourAltText\\\":null}\",\"DraftSerializedModel\":null,\"Serializer\":\"Json\",\"ShowCreatedBy\":null,\"ShowCreatedDate\":null,\"ShowLastModifiedBy\":null,\"ShowLastModifiedDate\":null}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/f83067b4-919d-4910-acd1-4b3b1c210ecf/page/test-2.json",
    "content": "{\"Id\":\"test-2\",\"ProjectId\":\"f83067b4-919d-4910-acd1-4b3b1c210ecf\",\"ParentId\":\"0\",\"ParentSlug\":\"\",\"PageOrder\":23,\"Title\":\"test 123\",\"Author\":\"Admin\",\"Slug\":\"test-2\",\"ExternalUrl\":null,\"CorrelationKey\":null,\"MetaDescription\":null,\"MetaJson\":null,\"MetaHtml\":null,\"Content\":\"<p>testing, testing, 123</p>\\r\\n\",\"PubDate\":\"2024-12-13T08:56:01.33245Z\",\"LastModified\":\"2024-12-13T13:19:29.3497448Z\",\"IsPublished\":true,\"MenuOnly\":false,\"ShowMenu\":false,\"ViewRoles\":null,\"Categories\":[],\"Comments\":[],\"ShowHeading\":true,\"ShowPubDate\":false,\"ShowLastModified\":false,\"ShowCategories\":false,\"ShowComments\":false,\"MenuFilters\":null,\"DisableEditor\":false,\"Resources\":[{\"Id\":\"4e561963-aa91-4c28-908e-4e22ab89a1b3\",\"ContentId\":null,\"Sort\":1,\"Type\":null,\"Environment\":null,\"Url\":null,\"Script\":null}],\"ContentType\":\"html\",\"CreatedUtc\":\"2024-12-13T08:56:01.3305956Z\",\"CreatedByUser\":\"admin\",\"LastModifiedByUser\":\"admin\",\"DraftContent\":null,\"DraftAuthor\":null,\"DraftPubDate\":null,\"TemplateKey\":null,\"SerializedModel\":null,\"DraftSerializedModel\":null,\"Serializer\":null,\"ShowCreatedBy\":null,\"ShowCreatedDate\":null,\"ShowLastModifiedBy\":null,\"ShowLastModifiedDate\":null,\"Script\":null}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/f83067b4-919d-4910-acd1-4b3b1c210ecf/page/test-gallery.json",
    "content": "{\"Id\":\"test-gallery\",\"ProjectId\":\"f83067b4-919d-4910-acd1-4b3b1c210ecf\",\"ParentId\":\"test-2\",\"ParentSlug\":\"test-2\",\"PageOrder\":2,\"Title\":\"test gallery\",\"Author\":\"\",\"Slug\":\"test-gallery\",\"ExternalUrl\":\"\",\"CorrelationKey\":\"\",\"MetaDescription\":\"\",\"MetaJson\":null,\"MetaHtml\":null,\"Content\":\"<div class=\\\"content-top\\\">\\r\\n    \\r\\n</div>\\r\\n<div class=\\\"row gallery-block cards-gallery simple-gallery\\\">\\r\\n</div>\\r\\n<div class=\\\"content-bottom\\\">\\r\\n    \\r\\n</div>\\r\\n\\r\\n\\r\\n\\r\\n\",\"PubDate\":null,\"LastModified\":\"2024-12-13T08:56:36.7069859Z\",\"IsPublished\":false,\"MenuOnly\":false,\"ShowMenu\":false,\"ViewRoles\":\"\",\"Categories\":[],\"Comments\":[],\"ShowHeading\":true,\"ShowPubDate\":false,\"ShowLastModified\":false,\"ShowCategories\":false,\"ShowComments\":false,\"MenuFilters\":null,\"DisableEditor\":false,\"Resources\":[],\"ContentType\":\"html\",\"CreatedUtc\":\"2024-12-13T08:56:36.6412535Z\",\"CreatedByUser\":\"admin\",\"LastModifiedByUser\":\"admin\",\"DraftContent\":null,\"DraftAuthor\":\"Admin\",\"DraftPubDate\":null,\"TemplateKey\":\"sct-GalleryWithContent\",\"SerializedModel\":null,\"DraftSerializedModel\":\"{\\\"Layout\\\":\\\"GalleryWithContentRenderCardsPartial\\\",\\\"CarouselIntervalInMilliseconds\\\":5000,\\\"ContentAbove\\\":null,\\\"ContentBelow\\\":null,\\\"Items\\\":[]}\",\"Serializer\":\"Json\",\"ShowCreatedBy\":null,\"ShowCreatedDate\":null,\"ShowLastModifiedBy\":null,\"ShowLastModifiedDate\":null}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/f83067b4-919d-4910-acd1-4b3b1c210ecf/post/2016/02/19c2a553-1e89-4aec-83ac-aede1931009a.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-16\"?>\n<post>\n  <id>19c2a553-1e89-4aec-83ac-aede1931009a</id>\n  <title>Open Live Writer Rocks</title>\n  <slug>open-live-writer-rocks</slug>\n  <correlationkey />\n  <author>Joe Audette</author>\n  <pubDate>2016-02-22T16:58:00.0000000Z</pubDate>\n  <lastModified>2018-08-20T15:16:42</lastModified>\n  <excerpt>a post about nothing really</excerpt>\n  <content>&lt;p&gt;so they say so they say&lt;/p&gt;\n\n&lt;p&gt;more more more&lt;/p&gt;\n\n&lt;p&gt;&lt;img alt=\"raised bed garden\" src=\"/media/images/raisedbeds1.jpg\" style=\"height:456px; width:607px\" /&gt;&lt;/p&gt;\n\n&lt;p&gt;more more more&lt;/p&gt;\n\n&lt;p&gt;&lt;a href=\"/media/images/img_1150.jpg\"&gt;&lt;img alt=\" \" data-primary-image=\"true\" src=\"/media/images/img_1150-ws.jpg\" /&gt;&lt;/a&gt;&lt;/p&gt;\n</content>\n  <contentType />\n  <imageUrl />\n  <thumbnailUrl />\n  <createdUtc>2018-08-20T15:16:42</createdUtc>\n  <createdByUser></createdByUser>\n  <lastModifiedByUser>admin</lastModifiedByUser>\n  <draftAuthor />\n  <draftContent />\n  <draftPubDate />\n  <templateKey></templateKey>\n  <serializedModel></serializedModel>\n  <draftSerializedModel></draftSerializedModel>\n  <serializer></serializer>\n  <blogId></blogId>\n  <ispublished>true</ispublished>\n  <isFeatured>true</isFeatured>\n  <autoTeaser>&lt;p&gt;so they say so they say&lt;/p&gt;\n\n&lt;p&gt;more more more&lt;/p&gt;\n\n&lt;p&gt;&lt;img alt=\"raised bed garden\" src=\"/media/images/raisedbeds1.jpg\" style=\"height:456px; width:607px\"&gt;&lt;/p&gt;</autoTeaser>\n  <teaserOverride />\n  <suppressTeaser>false</suppressTeaser>\n  <categories>\n    <category>food</category>\n    <category>vegan</category>\n    <category>foo</category>\n  </categories>\n  <comments></comments>\n</post>"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/f83067b4-919d-4910-acd1-4b3b1c210ecf/post/2016/03/19a9ee38-3f62-4096-8250-c0eeb7b51e07.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-16\"?>\n<post>\n  <id>19a9ee38-3f62-4096-8250-c0eeb7b51e07</id>\n  <title>Starsky and Hutch</title>\n  <slug>starsky-and-hutch</slug>\n  <correlationkey />\n  <author />\n  <pubDate>2016-03-13T22:23:00.0000000Z</pubDate>\n  <lastModified>2018-08-20T15:11:16</lastModified>\n  <excerpt>Starsky and Hutch</excerpt>\n  <content>&lt;p&gt;Starsky and Hutcherson&lt;br /&gt;\n&lt;img alt=\"dudes\" src=\"/media/images/dudes1-550x412.jpeg\" style=\"height:412px; width:550px\" /&gt;&lt;br /&gt;\ncool dudes man!&lt;/p&gt;\n\n&lt;p&gt;ride on!&lt;/p&gt;\n</content>\n  <contentType />\n  <imageUrl />\n  <thumbnailUrl />\n  <createdUtc>2018-08-20T15:11:16</createdUtc>\n  <createdByUser></createdByUser>\n  <lastModifiedByUser>admin</lastModifiedByUser>\n  <draftAuthor />\n  <draftContent />\n  <draftPubDate />\n  <templateKey></templateKey>\n  <serializedModel></serializedModel>\n  <draftSerializedModel></draftSerializedModel>\n  <serializer></serializer>\n  <blogId></blogId>\n  <ispublished>true</ispublished>\n  <isFeatured>true</isFeatured>\n  <autoTeaser>&lt;p&gt;&lt;/p&gt;Starsky and Hutcherson&lt;br&gt;\n&lt;img alt=\"dudes\" src=\"/media/images/dudes1-550x412.jpeg\" style=\"height:412px; width:550px\"&gt;&lt;br&gt;</autoTeaser>\n  <teaserOverride />\n  <suppressTeaser>false</suppressTeaser>\n  <categories>\n    <category>foo</category>\n    <category>bar</category>\n  </categories>\n  <comments>\n    <comment isAdmin=\"false\" isApproved=\"true\" id=\"f739c4e2-0bb5-461e-a92a-91c75f9ac804\">\n      <author>foo</author>\n      <email>foo@foo.com</email>\n      <website></website>\n      <ip>127.0.0.1</ip>\n      <userAgent>Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36</userAgent>\n      <date>2016-09-08T11:52:04.4968035-04:00</date>\n      <content>foo was here</content>\n    </comment>\n    <comment isAdmin=\"false\" isApproved=\"true\" id=\"4a196ac8-60c5-4135-b860-c2bf39a2dac4\">\n      <author>foo</author>\n      <email>foo@foo.com</email>\n      <website></website>\n      <ip>127.0.0.1</ip>\n      <userAgent>Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.62 Safari/537.36</userAgent>\n      <date>2017-10-24T10:53:53.5406034-04:00</date>\n      <content>more foo for you</content>\n    </comment>\n  </comments>\n</post>"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/f83067b4-919d-4910-acd1-4b3b1c210ecf/post/2017/11/mark-diggety-down.md",
    "content": "---\nimageUrl: \nthumbnailUrl: \nid: mark-diggety-down\nblogId: f83067b4-919d-4910-acd1-4b3b1c210ecf\ncorrelationKey: \nslug: mark-diggety-down\ncontentType: markdown\ntitle: Mark Diggety Down!\nauthor: Admin\nmetaDescription: Developers love markdown\nmetaJson: \nmetaHtml: \nisPublished: true\npubDate: 2017-11-21T11:53:00.0000000+00:00\nlastModified: 2024-06-03T14:18:00.4904985Z\nisFeatured: true\nteaserOverride: \nsuppressTeaser: false\ncategories:\n- markdown\n- yaml\n- t-shirts\n- foo\ncomments: []\ncreatedUtc: 2018-06-28T17:10:21.9591410+01:00\ncreatedByUser: \nlastModifiedByUser: admin\ndraftContent: \ndraftAuthor: \ndraftPubDate: \ntemplateKey: \nserializedModel: \ndraftSerializedModel: \nserializer: \nautoTeaser: >-\n  <h2 id=\"markdown-rocks\">Markdown Rocks!</h2>\n\n  <p></p>develop\nshowComments: true\n---\n## Markdown Rocks!\n\ndevelopers love it!\n\n![dudes](/media/images/dudes1-550x412.jpeg)\n\nSay what? yeah"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/f83067b4-919d-4910-acd1-4b3b1c210ecf/post/2018/07/fresh-draft.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-16\"?>\n<post>\n  <id>fresh-draft</id>\n  <title>Fresh Draft</title>\n  <slug>fresh-draft</slug>\n  <correlationkey />\n  <author>Admin</author>\n  <pubDate>2018-07-02T12:14:46.4646000Z</pubDate>\n  <lastModified>2019-02-27T19:36:23</lastModified>\n  <excerpt>A fresh draft of a new post</excerpt>\n  <content>&lt;p&gt;This will be a post some day, once it gets all polished up.&lt;/p&gt;\n\n&lt;p&gt;It might be a bit drafty until then, but don't worry, we will review it and fix any problems.&lt;/p&gt;\n\n&lt;p&gt;Edit 1 save draft&lt;/p&gt;\n</content>\n  <contentType>html</contentType>\n  <imageUrl />\n  <thumbnailUrl />\n  <createdUtc>2018-07-01T13:34:47</createdUtc>\n  <createdByUser>admin</createdByUser>\n  <lastModifiedByUser>admin</lastModifiedByUser>\n  <draftAuthor />\n  <draftContent />\n  <draftPubDate />\n  <templateKey></templateKey>\n  <serializedModel></serializedModel>\n  <draftSerializedModel></draftSerializedModel>\n  <serializer></serializer>\n  <blogId></blogId>\n  <ispublished>true</ispublished>\n  <isFeatured>false</isFeatured>\n  <autoTeaser></autoTeaser>\n  <teaserOverride />\n  <suppressTeaser>false</suppressTeaser>\n  <categories>\n    <category>weather</category>\n    <category>sports</category>\n  </categories>\n  <comments></comments>\n</post>"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/f83067b4-919d-4910-acd1-4b3b1c210ecf/post/2018/07/second-draft.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-16\"?>\n<post>\n  <id>second-draft</id>\n  <title>Second Draft</title>\n  <slug>second-draft</slug>\n  <correlationkey></correlationkey>\n  <author>Admin</author>\n  <pubDate>2018-07-02T13:11:46.4646000Z</pubDate>\n  <lastModified>2018-08-20T12:47:59</lastModified>\n  <excerpt>another draft</excerpt>\n  <content>&lt;p&gt;This one is a winner! Edited to re-publish in July&lt;/p&gt;\n</content>\n  <contentType>html</contentType>\n  <imageUrl></imageUrl>\n  <thumbnailUrl></thumbnailUrl>\n  <createdUtc>2018-07-01T15:33:46</createdUtc>\n  <createdByUser>admin</createdByUser>\n  <lastModifiedByUser>admin</lastModifiedByUser>\n  <draftAuthor />\n  <draftContent />\n  <draftPubDate />\n  <templateKey></templateKey>\n  <serializedModel></serializedModel>\n  <draftSerializedModel />\n  <serializer></serializer>\n  <blogId></blogId>\n  <ispublished>true</ispublished>\n  <isFeatured>false</isFeatured>\n  <teaserOverride></teaserOverride>\n  <suppressTeaser>false</suppressTeaser>\n  <categories>\n    <category>weather</category>\n    <category>sports</category>\n  </categories>\n  <comments></comments>\n</post>"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/f83067b4-919d-4910-acd1-4b3b1c210ecf/post/2018/10/380c6e5c-f455-4c16-9b4b-c2e6bcdbc8ad.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-16\"?>\n<post>\n  <id>380c6e5c-f455-4c16-9b4b-c2e6bcdbc8ad</id>\n  <title>Futurama</title>\n  <slug>futurama</slug>\n  <correlationkey />\n  <author>admin</author>\n  <pubDate>2018-10-26T00:40:00.0000000Z</pubDate>\n  <lastModified>2019-02-17T20:07:39</lastModified>\n  <excerpt></excerpt>\n  <content>&lt;p&gt;a future post blah blah blah&lt;/p&gt;\n\n&lt;p&gt;blah blah blah blah&amp;nbsp;blah blah blah blah&amp;nbsp;blah blah blah blah&amp;nbsp;blah blah blah blah&amp;nbsp;blah blah blah blah&amp;nbsp;blah blah blah blah&lt;/p&gt;\n\n&lt;p&gt;blah blah blah blah&amp;nbsp;blah blah blah blah&amp;nbsp;blah blah blah blah&amp;nbsp;blah blah blah blah&amp;nbsp;blah blah blah blah&amp;nbsp;blah blah blah blah&amp;nbsp;blah blah blah blah&lt;/p&gt;\n\n&lt;p&gt;blah blah blah blah&amp;nbsp;blah blah blah blah&amp;nbsp;blah blah blah blah&amp;nbsp;blah blah blah blah&amp;nbsp;blah blah blah blah&amp;nbsp;blah blah blah blah&lt;/p&gt;\n</content>\n  <contentType>html</contentType>\n  <imageUrl />\n  <thumbnailUrl />\n  <createdUtc>2018-10-25T12:41:36</createdUtc>\n  <createdByUser>admin</createdByUser>\n  <lastModifiedByUser>admin</lastModifiedByUser>\n  <draftAuthor />\n  <draftContent />\n  <draftPubDate />\n  <templateKey></templateKey>\n  <serializedModel></serializedModel>\n  <draftSerializedModel></draftSerializedModel>\n  <serializer></serializer>\n  <blogId>f83067b4-919d-4910-acd1-4b3b1c210ecf</blogId>\n  <ispublished>true</ispublished>\n  <isFeatured>false</isFeatured>\n  <autoTeaser>&lt;p&gt;a future post blah blah blah&lt;/p&gt;\n\n&lt;p&gt;&lt;/p&gt;blah blah blah blah&amp;nbsp;blah blah blah blah&amp;nbsp;blah blah blah blah&amp;nbsp;blah blah blah blah&amp;nbsp;blah blah</autoTeaser>\n  <teaserOverride />\n  <suppressTeaser>false</suppressTeaser>\n  <categories></categories>\n  <comments></comments>\n</post>"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/f83067b4-919d-4910-acd1-4b3b1c210ecf/post/2018/10/95878177-d5a7-47ce-b8f9-a898bd252e0d.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-16\"?>\n<post>\n  <id>95878177-d5a7-47ce-b8f9-a898bd252e0d</id>\n  <title>Fresh Coffee</title>\n  <slug>fresh-coffee</slug>\n  <correlationkey></correlationkey>\n  <author>admin</author>\n  <pubDate>2018-10-25T10:58:00.0000000Z</pubDate>\n  <lastModified>2018-10-25T10:58:40</lastModified>\n  <excerpt></excerpt>\n  <content>&lt;p&gt;Just brewed&lt;/p&gt;</content>\n  <contentType>html</contentType>\n  <imageUrl />\n  <thumbnailUrl />\n  <createdUtc>2018-10-25T10:58:40</createdUtc>\n  <createdByUser>admin</createdByUser>\n  <lastModifiedByUser />\n  <draftAuthor />\n  <draftContent />\n  <draftPubDate />\n  <templateKey />\n  <serializedModel />\n  <draftSerializedModel />\n  <serializer />\n  <blogId>f83067b4-919d-4910-acd1-4b3b1c210ecf</blogId>\n  <ispublished>true</ispublished>\n  <isFeatured>false</isFeatured>\n  <autoTeaser />\n  <teaserOverride />\n  <suppressTeaser>false</suppressTeaser>\n  <categories></categories>\n  <comments></comments>\n</post>"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/f83067b4-919d-4910-acd1-4b3b1c210ecf/post/2019/02/futurama-.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-16\"?>\n<post>\n  <id>futurama-</id>\n  <title>Futurama</title>\n  <slug>futurama-</slug>\n  <correlationkey></correlationkey>\n  <author>Admin</author>\n  <pubDate>2019-02-27T20:18:58.5858000Z</pubDate>\n  <lastModified>2019-07-17T15:15:15</lastModified>\n  <excerpt></excerpt>\n  <content>&lt;p&gt;a dupe&lt;/p&gt;\n</content>\n  <contentType>html</contentType>\n  <imageUrl></imageUrl>\n  <thumbnailUrl></thumbnailUrl>\n  <createdUtc>2019-03-02T20:19:06</createdUtc>\n  <createdByUser>admin</createdByUser>\n  <lastModifiedByUser>admin</lastModifiedByUser>\n  <draftAuthor></draftAuthor>\n  <draftContent></draftContent>\n  <draftPubDate />\n  <templateKey></templateKey>\n  <serializedModel></serializedModel>\n  <draftSerializedModel></draftSerializedModel>\n  <serializer></serializer>\n  <blogId>f83067b4-919d-4910-acd1-4b3b1c210ecf</blogId>\n  <ispublished>true</ispublished>\n  <isFeatured>false</isFeatured>\n  <autoTeaser></autoTeaser>\n  <teaserOverride></teaserOverride>\n  <suppressTeaser>false</suppressTeaser>\n  <categories></categories>\n  <comments>\n    <comment isAdmin=\"false\" isApproved=\"true\" id=\"db8f6aa3-23cd-4a7e-aeb7-65a24a31cedd\">\n      <author>joe</author>\n      <email>joe@cloudscribe.com</email>\n      <website></website>\n      <ip>127.0.0.1</ip>\n      <userAgent>Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36</userAgent>\n      <date>2019-07-17T15:15:15.4564234Z</date>\n      <content>just testing the comments</content>\n    </comment>\n  </comments>\n</post>"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/f83067b4-919d-4910-acd1-4b3b1c210ecf/post/2019/08/beer-its-great.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-16\"?>\n<post>\n  <id>beer-its-great</id>\n  <title>Beer - its great!</title>\n  <slug>beer-its-great</slug>\n  <correlationkey />\n  <author>Admin</author>\n  <pubDate>2019-08-09T18:53:31.3308969Z</pubDate>\n  <lastModified>2019-08-09T18:53:31</lastModified>\n  <excerpt />\n  <content>&lt;p&gt;so it is&lt;/p&gt;\n</content>\n  <contentType>html</contentType>\n  <imageUrl />\n  <thumbnailUrl />\n  <createdUtc>2019-08-09T18:53:31</createdUtc>\n  <createdByUser>admin</createdByUser>\n  <lastModifiedByUser>admin</lastModifiedByUser>\n  <draftAuthor />\n  <draftContent />\n  <draftPubDate />\n  <templateKey />\n  <serializedModel />\n  <draftSerializedModel />\n  <serializer />\n  <blogId>f83067b4-919d-4910-acd1-4b3b1c210ecf</blogId>\n  <ispublished>true</ispublished>\n  <isFeatured>false</isFeatured>\n  <autoTeaser />\n  <teaserOverride />\n  <suppressTeaser>false</suppressTeaser>\n  <categories></categories>\n  <comments></comments>\n</post>"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/f83067b4-919d-4910-acd1-4b3b1c210ecf/post/2019/08/template-post.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-16\"?>\n<post>\n  <id>template-post</id>\n  <title>Template post</title>\n  <slug>template-post</slug>\n  <correlationkey></correlationkey>\n  <author />\n  <pubDate />\n  <lastModified>2019-08-14T13:00:43</lastModified>\n  <excerpt />\n  <content>&lt;div class=\"row\"&gt;\n            &lt;/div&gt;\n\n\n</content>\n  <contentType>html</contentType>\n  <imageUrl />\n  <thumbnailUrl />\n  <createdUtc>2019-08-14T13:00:43</createdUtc>\n  <createdByUser>admin</createdByUser>\n  <lastModifiedByUser>admin</lastModifiedByUser>\n  <draftAuthor>Admin</draftAuthor>\n  <draftContent />\n  <draftPubDate />\n  <templateKey>sct-ColumnsWithImages</templateKey>\n  <serializedModel />\n  <draftSerializedModel>{\"Layout\":\"SectionsWithImageRenderColumnsPartial\",\"SectionOneHeading\":null,\"SectionOneContent\":null,\"SectionOneResizedUrl\":null,\"SectionOneFullSizeUrl\":null,\"SectionOneAltText\":null,\"SectionTwoHeading\":null,\"SectionTwoContent\":null,\"SectionTwoResizedUrl\":null,\"SectionTwoFullSizeUrl\":null,\"SectionTwoAltText\":null,\"SectionThreeHeading\":null,\"SectionThreeContent\":null,\"SectionThreeResizedUrl\":null,\"SectionThreeFullSizeUrl\":null,\"SectionThreeAltText\":null,\"SectionFourHeading\":null,\"SectionFourContent\":null,\"SectionFourResizedUrl\":null,\"SectionFourFullSizeUrl\":null,\"SectionFourAltText\":null}</draftSerializedModel>\n  <serializer>Json</serializer>\n  <blogId>f83067b4-919d-4910-acd1-4b3b1c210ecf</blogId>\n  <ispublished>false</ispublished>\n  <isFeatured>false</isFeatured>\n  <autoTeaser />\n  <teaserOverride />\n  <suppressTeaser>false</suppressTeaser>\n  <categories></categories>\n  <comments></comments>\n</post>"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/f83067b4-919d-4910-acd1-4b3b1c210ecf/post/2020/01/3a700a91-0477-4edf-be76-06b5c43e5acf.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-16\"?>\n<post>\n  <id>3a700a91-0477-4edf-be76-06b5c43e5acf</id>\n  <title>OLW Rides Again</title>\n  <slug>olw-rides-again</slug>\n  <correlationkey></correlationkey>\n  <author>admin</author>\n  <pubDate>2020-01-05T14:57:58.9200025Z</pubDate>\n  <lastModified>2020-01-05T14:58:00</lastModified>\n  <excerpt></excerpt>\n  <content>&lt;p&gt;Here we go!&lt;/p&gt;</content>\n  <contentType>html</contentType>\n  <imageUrl />\n  <thumbnailUrl />\n  <createdUtc>2020-01-05T14:57:58</createdUtc>\n  <createdByUser>admin</createdByUser>\n  <lastModifiedByUser />\n  <draftAuthor />\n  <draftContent />\n  <draftPubDate />\n  <templateKey />\n  <serializedModel />\n  <draftSerializedModel />\n  <serializer />\n  <blogId>f83067b4-919d-4910-acd1-4b3b1c210ecf</blogId>\n  <ispublished>true</ispublished>\n  <isFeatured>false</isFeatured>\n  <autoTeaser />\n  <teaserOverride />\n  <suppressTeaser>false</suppressTeaser>\n  <categories></categories>\n  <comments></comments>\n</post>"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/f83067b4-919d-4910-acd1-4b3b1c210ecf/post/2020/01/5b01238e-9aa7-4f06-a2b5-6a769ecfbb8f.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-16\"?>\n<post>\n  <id>5b01238e-9aa7-4f06-a2b5-6a769ecfbb8f</id>\n  <title>Another One</title>\n  <slug>another-one</slug>\n  <correlationkey></correlationkey>\n  <author>admin</author>\n  <pubDate>2020-01-05T15:25:35.3389273Z</pubDate>\n  <lastModified>2020-01-05T15:25:35</lastModified>\n  <excerpt></excerpt>\n  <content>&lt;p&gt;From OLW&lt;/p&gt;</content>\n  <contentType>html</contentType>\n  <imageUrl />\n  <thumbnailUrl />\n  <createdUtc>2020-01-05T15:25:33</createdUtc>\n  <createdByUser>admin</createdByUser>\n  <lastModifiedByUser />\n  <draftAuthor />\n  <draftContent />\n  <draftPubDate />\n  <templateKey />\n  <serializedModel />\n  <draftSerializedModel />\n  <serializer />\n  <blogId>f83067b4-919d-4910-acd1-4b3b1c210ecf</blogId>\n  <ispublished>true</ispublished>\n  <isFeatured>false</isFeatured>\n  <autoTeaser />\n  <teaserOverride />\n  <suppressTeaser>false</suppressTeaser>\n  <categories></categories>\n  <comments></comments>\n</post>"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/f83067b4-919d-4910-acd1-4b3b1c210ecf/post/2020/07/mike-test.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-16\"?>\n<post>\n  <id>mike-test</id>\n  <title>Mike Test</title>\n  <slug>mike-test</slug>\n  <correlationkey />\n  <author>Admin</author>\n  <pubDate>2020-07-21T22:55:01.5259933Z</pubDate>\n  <lastModified>2020-07-21T22:55:01</lastModified>\n  <excerpt />\n  <content>&lt;p&gt;This is a Mike Test&lt;/p&gt;\n</content>\n  <contentType>html</contentType>\n  <imageUrl />\n  <thumbnailUrl />\n  <createdUtc>2020-07-21T22:55:01</createdUtc>\n  <createdByUser>admin</createdByUser>\n  <lastModifiedByUser>admin</lastModifiedByUser>\n  <draftAuthor />\n  <draftContent />\n  <draftPubDate />\n  <templateKey />\n  <serializedModel />\n  <draftSerializedModel />\n  <serializer />\n  <blogId>f83067b4-919d-4910-acd1-4b3b1c210ecf</blogId>\n  <ispublished>true</ispublished>\n  <isFeatured>false</isFeatured>\n  <autoTeaser />\n  <teaserOverride />\n  <suppressTeaser>false</suppressTeaser>\n  <categories></categories>\n  <comments></comments>\n</post>"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/f83067b4-919d-4910-acd1-4b3b1c210ecf/post/2023/10/new-post.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-16\"?>\n<post>\n  <id>new-post</id>\n  <title>New Post</title>\n  <slug>new-post</slug>\n  <correlationkey />\n  <author>Admin</author>\n  <pubDate>2023-10-04T14:39:38.8487243Z</pubDate>\n  <lastModified>2023-10-04T14:39:38</lastModified>\n  <excerpt />\n  <content>&lt;p&gt;dsgsdgsgsgds&lt;/p&gt;\n</content>\n  <contentType>html</contentType>\n  <imageUrl />\n  <thumbnailUrl />\n  <createdUtc>2023-10-04T14:39:38</createdUtc>\n  <createdByUser>admin</createdByUser>\n  <lastModifiedByUser>admin</lastModifiedByUser>\n  <draftAuthor />\n  <draftContent />\n  <draftPubDate />\n  <templateKey />\n  <serializedModel />\n  <draftSerializedModel />\n  <serializer />\n  <blogId>f83067b4-919d-4910-acd1-4b3b1c210ecf</blogId>\n  <ispublished>true</ispublished>\n  <isFeatured>false</isFeatured>\n  <autoTeaser />\n  <teaserOverride />\n  <suppressTeaser>false</suppressTeaser>\n  <categories></categories>\n  <comments></comments>\n  <showcomments>true</showcomments>\n</post>"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/f83067b4-919d-4910-acd1-4b3b1c210ecf/projectsettings/f83067b4-919d-4910-acd1-4b3b1c210ecf.json",
    "content": "{\"Id\":\"f83067b4-919d-4910-acd1-4b3b1c210ecf\",\"Title\":\"Blog\",\"Description\":null,\"CopyrightNotice\":\"\",\"Publisher\":\"cloudscribe\",\"PublisherLogoUrl\":\"http://www.vectortemplates.com/raster/batman-logo-big.gif\",\"PublisherLogoWidth\":\"500px\",\"PublisherLogoHeight\":\"500px\",\"PublisherEntityType\":\"Organization\",\"DisqusShortName\":null,\"PostsPerPage\":5,\"DaysToComment\":0,\"ModerateComments\":true,\"CommentNotificationEmail\":null,\"BlogMenuLinksToNewestPost\":false,\"LocalMediaVirtualPath\":\"/s1/media/images/\",\"CdnUrl\":null,\"PubDateFormat\":\"MMMM d. yyyy\",\"IncludePubDateInPostUrls\":true,\"TimeZoneId\":\"America/New_York\",\"RecaptchaPublicKey\":\"6LedcNUSAAAAAHnKfOI2U48m7pMU2Zi3lsLwVSlO\",\"RecaptchaPrivateKey\":\"6LedcNUSAAAAACf4VQ5sVkxsX4pn9wdLFW9Liiub\",\"DefaultPageSlug\":\"home\",\"UseDefaultPageAsRootNode\":true,\"ShowTitle\":false,\"AddBlogToPagesTree\":true,\"BlogPagePosition\":2,\"BlogPageText\":\"Blog\",\"BlogPageNavComponentVisibility\":null,\"Image\":\"\",\"ChannelTimeToLive\":60,\"LanguageCode\":\"en-US\",\"ChannelCategoriesCsv\":null,\"ManagingEditorEmail\":\"webby@web.com\",\"ChannelRating\":\"\",\"WebmasterEmail\":\"webby@web.com\",\"RemoteFeedUrl\":null,\"RemoteFeedProcessorUseAgentFragment\":\"\",\"ShowRecentPostsOnDefaultPage\":false,\"ShowFeaturedPostsOnDefaultPage\":true,\"FacebookAppId\":\"1070660436373766\",\"SiteName\":\"cloudscribe.com\",\"TwitterPublisher\":\"@cloudscribeWeb\",\"TwitterCreator\":\"@joeaudette\",\"DefaultContentType\":\"html\",\"TeaserMode\":0,\"TeaserTruncationMode\":0,\"TeaserTruncationLength\":20,\"DefaultFeedItems\":20,\"MaxFeedItems\":1000,\"ShowRelatedPosts\":true,\"ShowBlogCategories\":true,\"ShowArchivedPosts\":true,\"ShowAboutBox\":true,\"AboutHeading\":\"About\",\"AboutContent\":\"<p>About me!</p>\\r\\n\",\"ShowCreatedBy\":false,\"ShowCreatedDate\":false,\"ShowLastModifiedBy\":false,\"ShowLastModifiedDate\":false}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/f83067b4-919d-4910-acd1-4b3b1c210ecf/siterole/14a776fd-769e-4f56-a509-f343022dfd70.json",
    "content": "{\"Id\":\"14a776fd-769e-4f56-a509-f343022dfd70\",\"SiteId\":\"f83067b4-919d-4910-acd1-4b3b1c210ecf\",\"NormalizedRoleName\":\"CONTENT ADMINISTRATORS\",\"RoleName\":\"Content Administrators\",\"MemberCount\":-1}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/f83067b4-919d-4910-acd1-4b3b1c210ecf/siterole/42883d65-a3cc-4cb8-9f70-b55189c6c663.json",
    "content": "{\"Id\":\"42883d65-a3cc-4cb8-9f70-b55189c6c663\",\"SiteId\":\"f83067b4-919d-4910-acd1-4b3b1c210ecf\",\"NormalizedRoleName\":\"BLOG EDITORS\",\"RoleName\":\"Blog Editors\",\"MemberCount\":-1}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/f83067b4-919d-4910-acd1-4b3b1c210ecf/siterole/4e98344d-8ef0-4de3-986e-7b5011c29c04.json",
    "content": "{\"Id\":\"4e98344d-8ef0-4de3-986e-7b5011c29c04\",\"SiteId\":\"f83067b4-919d-4910-acd1-4b3b1c210ecf\",\"NormalizedRoleName\":\"AUTHENTICATED USERS\",\"RoleName\":\"Authenticated Users\",\"MemberCount\":-1}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/f83067b4-919d-4910-acd1-4b3b1c210ecf/siterole/991131e8-561c-4aa9-a8d7-154526e2f2ab.json",
    "content": "{\"Id\":\"991131e8-561c-4aa9-a8d7-154526e2f2ab\",\"SiteId\":\"f83067b4-919d-4910-acd1-4b3b1c210ecf\",\"NormalizedRoleName\":\"ADMINISTRATORS\",\"RoleName\":\"Administrators\",\"MemberCount\":-1}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/f83067b4-919d-4910-acd1-4b3b1c210ecf/siterole/e4967cee-7778-4c79-a1da-91b403045d7a.json",
    "content": "{\"Id\":\"e4967cee-7778-4c79-a1da-91b403045d7a\",\"SiteId\":\"f83067b4-919d-4910-acd1-4b3b1c210ecf\",\"NormalizedRoleName\":\"ROLE ADMINISTRATORS\",\"RoleName\":\"Role Administrators\",\"MemberCount\":-1}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/f83067b4-919d-4910-acd1-4b3b1c210ecf/sitesettings/f83067b4-919d-4910-acd1-4b3b1c210ecf.json",
    "content": "{\"RequireCookieConsent\":true,\"CookiePolicySummary\":\"To ensure you get the best experience, this website uses cookies.\",\"ConcurrencyStamp\":\"638b4aa9-b618-452f-8b8b-53d7a0a0e20e\",\"Theme\":\"custom1\",\"AllowNewRegistration\":true,\"RequireConfirmedEmail\":false,\"RequireConfirmedPhone\":false,\"UseLdapAuth\":false,\"AllowDbFallbackWithLdap\":false,\"EmailLdapDbFallback\":false,\"AutoCreateLdapUserOnFirstLogin\":true,\"LdapServer\":\"\",\"LdapDomain\":\"\",\"LdapPort\":389,\"LdapRootDN\":\"\",\"LdapUserDNKey\":\"CN\",\"UseEmailForLogin\":true,\"DisableDbAuth\":false,\"RequiresQuestionAndAnswer\":false,\"RequireApprovalBeforeLogin\":false,\"AccountApprovalEmailCsv\":\"\",\"MaxInvalidPasswordAttempts\":10,\"MinRequiredPasswordLength\":7,\"PwdRequireNonAlpha\":true,\"PwdRequireLowercase\":true,\"PwdRequireUppercase\":true,\"PwdRequireDigit\":true,\"AllowPersistentLogin\":true,\"CaptchaOnRegistration\":false,\"CaptchaOnLogin\":false,\"RecaptchaPrivateKey\":\"6LedcNUSAAAAACf4VQ5sVkxsX4pn9wdLFW9Liiub\",\"RecaptchaPublicKey\":\"6LedcNUSAAAAAHnKfOI2U48m7pMU2Zi3lsLwVSlO\",\"UseInvisibleRecaptcha\":false,\"FacebookAppId\":null,\"FacebookAppSecret\":null,\"MicrosoftClientId\":null,\"MicrosoftClientSecret\":null,\"GoogleClientId\":null,\"GoogleClientSecret\":null,\"TwitterConsumerKey\":null,\"TwitterConsumerSecret\":null,\"OidConnectAppId\":null,\"OidConnectAppSecret\":null,\"OidConnectAuthority\":null,\"OidConnectDisplayName\":null,\"AddThisDotComUsername\":null,\"TimeZoneId\":\"America/New_York\",\"CompanyName\":\"\",\"CompanyStreetAddress\":\"\",\"CompanyStreetAddress2\":\"\",\"CompanyLocality\":\"\",\"CompanyRegion\":\"\",\"CompanyPostalCode\":\"\",\"CompanyCountry\":\"\",\"CompanyPhone\":\"\",\"CompanyFax\":\"\",\"CompanyPublicEmail\":\"\",\"CompanyWebsite\":null,\"DefaultEmailFromAddress\":\"noreply@esdm.co.uk\",\"DefaultEmailFromAlias\":null,\"SmtpUser\":\"noreply@esdm.co.uk\",\"SmtpPassword\":\"CfDJ8LOaItPLAW5EiPMej1JqQNhNxqOcVx3y2zH5tM8CH4nI6yibGvRqktkh62oeznKBOiqMRBKrSk9RXE80MyYyrQK/zmVGVWSEMOutPLb3JtYeiiLUnN5lnAvPzQqckqkUrhTZbZ+VJHw64BLrNP6jV1FSup6xhKaBltxkz3Nwn1KIHmIu0olfXTsfQbQukMiGKXAVAE+jtJXLXunRCc3xS8aKl+Wr+HdVCET/ReDazkGXuTm6mi//MW6LMULHN8I38wO5cvMbGdgvUqH7avu+SwQPVZOluWDRZJb1ZzI0yT7i\",\"SmtpPort\":25,\"SmtpPreferredEncoding\":\"\",\"SmtpServer\":\"smtp.esdm.co.uk\",\"SmtpRequiresAuth\":true,\"SmtpUseSsl\":false,\"DkimPublicKey\":\"\",\"DkimPrivateKey\":\"\",\"DkimDomain\":\"\",\"DkimSelector\":\"\",\"SignEmailWithDkim\":false,\"EmailSenderName\":\"SmtpMailSender\",\"EmailApiKey\":null,\"EmailApiEndpoint\":null,\"SmsClientId\":\"\",\"SmsSecureToken\":\"\",\"SmsFrom\":\"\",\"GoogleAnalyticsProfileId\":null,\"RegistrationAgreement\":\"<p>This is the agreement</p>\\r\\n\",\"RegistrationPreamble\":\"<p>This is the preamble</p>\\r\\n\",\"LoginInfoTop\":\"<p>Top instructions</p>\\r\\n\",\"LoginInfoBottom\":\"<p>bottom instructions</p>\\r\\n\",\"SiteIsClosed\":false,\"SiteIsClosedMessage\":null,\"PrivacyPolicy\":\"\",\"IsDataProtected\":true,\"TermsUpdatedUtc\":\"2018-04-17T21:39:09.5156737Z\",\"ForcedCulture\":null,\"ForcedUICulture\":null,\"Id\":\"f83067b4-919d-4910-acd1-4b3b1c210ecf\",\"AliasId\":\"s1\",\"SiteName\":\"Sample Site\",\"SiteFolderName\":null,\"PreferredHostName\":\"\",\"IsServerAdminSite\":true,\"CreatedUtc\":\"2016-08-04T12:03:49.9065086Z\",\"LastModifiedUtc\":\"2018-10-18T12:22:44.1446123Z\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/f83067b4-919d-4910-acd1-4b3b1c210ecf/siteuser/17595de8-d27a-4304-bded-76b61a16ad19.json",
    "content": "{\"AuthorBio\":\"\",\"Comment\":\"\",\"NormalizedEmail\":\"ADMIN@ADMIN.COM\",\"NormalizedUserName\":\"ADMIN\",\"EmailConfirmed\":true,\"EmailConfirmSentUtc\":null,\"AgreementAcceptedUtc\":null,\"LockoutEndDateUtc\":null,\"NewEmail\":\"\",\"NewEmailApproved\":false,\"LastPasswordChangeUtc\":\"2024-06-03T14:17:55.2771124Z\",\"MustChangePwd\":false,\"PasswordHash\":\"AQAAAAIAAYagAAAAEGVnALS6pFN3EERYv0nYhCQ4jy0t3WB+uYVRUM40L55rqYdKv3yw1MmjWvEYd6x2Pw==\",\"CanAutoLockout\":true,\"AccessFailedCount\":0,\"RolesChanged\":false,\"SecurityStamp\":\"S7ZJ6RCVYLDHBWTECX2S2GQXJKWUXNSL\",\"Signature\":\"\",\"TwoFactorEnabled\":false,\"BrowserKey\":\"443ec848-e7da-49e2-9617-806793b4da1f\",\"Id\":\"17595de8-d27a-4304-bded-76b61a16ad19\",\"SiteId\":\"f83067b4-919d-4910-acd1-4b3b1c210ecf\",\"Email\":\"admin@admin.com\",\"UserName\":\"admin\",\"DisplayName\":\"Admin\",\"FirstName\":\"\",\"LastName\":\"\",\"AvatarUrl\":\"\",\"DateOfBirth\":null,\"CreatedUtc\":\"2016-08-04T12:03:50.2175089Z\",\"LastModifiedUtc\":\"2016-08-04T12:03:50.2175089Z\",\"DisplayInMemberList\":true,\"Gender\":\"\",\"IsLockedOut\":false,\"LastLoginUtc\":\"2025-05-07T10:40:36.453754Z\",\"PhoneNumber\":\"\",\"PhoneNumberConfirmed\":false,\"AccountApproved\":true,\"TimeZoneId\":\"\",\"WebSiteUrl\":\"\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/f83067b4-919d-4910-acd1-4b3b1c210ecf/siteuser/32e43f7a-be53-47d1-8442-457865587eba.json",
    "content": "{\"AuthorBio\":\"\",\"Comment\":\"\",\"NormalizedEmail\":\"FOO@FOO.COM\",\"NormalizedUserName\":\"FOO\",\"EmailConfirmed\":false,\"LockoutEndDateUtc\":null,\"NewEmail\":\"\",\"NewEmailApproved\":false,\"LastPasswordChangeUtc\":\"2016-08-11T20:00:11.3551126Z\",\"MustChangePwd\":false,\"PasswordHash\":\"AQAAAAEAACcQAAAAEO/S6uhRyqOExnxlyBRokwIa+/l4KkyyvXG8M2iY47zlmO6sW0TQ1qq36BxywsG8Rg==\",\"CanAutoLockout\":true,\"AccessFailedCount\":0,\"RolesChanged\":false,\"SecurityStamp\":\"6f4048a3-4aec-43dd-a9de-1f7b87d173d5\",\"Signature\":\"\",\"TwoFactorEnabled\":false,\"Id\":\"32e43f7a-be53-47d1-8442-457865587eba\",\"SiteId\":\"f83067b4-919d-4910-acd1-4b3b1c210ecf\",\"Email\":\"foo@foo.com\",\"UserName\":\"foo\",\"DisplayName\":\"foo\",\"FirstName\":\"Foo\",\"LastName\":\"Foo\",\"IsDeleted\":false,\"Trusted\":false,\"AvatarUrl\":\"\",\"DateOfBirth\":null,\"CreatedUtc\":\"2016-08-11T20:00:11.3271103Z\",\"LastModifiedUtc\":\"2016-08-11T20:00:11.3271103Z\",\"DisplayInMemberList\":true,\"Gender\":\"\",\"IsLockedOut\":false,\"LastLoginUtc\":null,\"PhoneNumber\":\"\",\"PhoneNumberConfirmed\":false,\"AccountApproved\":true,\"TimeZoneId\":\"\",\"WebSiteUrl\":\"\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/f83067b4-919d-4910-acd1-4b3b1c210ecf/userclaim/6221cb09-1c03-47c2-9cc0-92b03a1409a4.json",
    "content": "{\"Id\":\"6221cb09-1c03-47c2-9cc0-92b03a1409a4\",\"SiteId\":\"f83067b4-919d-4910-acd1-4b3b1c210ecf\",\"UserId\":\"32e43f7a-be53-47d1-8442-457865587eba\",\"ClaimType\":\"ContentEditor\",\"ClaimValue\":\"f83067b4-919d-4910-acd1-4b3b1c210ecf\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/f83067b4-919d-4910-acd1-4b3b1c210ecf/userrole/17595de8-d27a-4304-bded-76b61a16ad19~4e98344d-8ef0-4de3-986e-7b5011c29c04.json",
    "content": "{\"RoleId\":\"4e98344d-8ef0-4de3-986e-7b5011c29c04\",\"UserId\":\"17595de8-d27a-4304-bded-76b61a16ad19\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/f83067b4-919d-4910-acd1-4b3b1c210ecf/userrole/17595de8-d27a-4304-bded-76b61a16ad19~991131e8-561c-4aa9-a8d7-154526e2f2ab.json",
    "content": "{\"RoleId\":\"991131e8-561c-4aa9-a8d7-154526e2f2ab\",\"UserId\":\"17595de8-d27a-4304-bded-76b61a16ad19\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/f83067b4-919d-4910-acd1-4b3b1c210ecf/userrole/32e43f7a-be53-47d1-8442-457865587eba~4e98344d-8ef0-4de3-986e-7b5011c29c04.json",
    "content": "{\"RoleId\":\"4e98344d-8ef0-4de3-986e-7b5011c29c04\",\"UserId\":\"32e43f7a-be53-47d1-8442-457865587eba\"}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/f83067b4-919d-4910-acd1-4b3b1c210ecf~en-GB/projectsettings/f83067b4-919d-4910-acd1-4b3b1c210ecf~en-GB.json",
    "content": "{\"Id\":\"f83067b4-919d-4910-acd1-4b3b1c210ecf~en-GB\",\"Title\":\"Blog\",\"Description\":\"\",\"CopyrightNotice\":\"\",\"Publisher\":\"\",\"PublisherLogoUrl\":\"\",\"PublisherLogoWidth\":\"500px\",\"PublisherLogoHeight\":\"500px\",\"PublisherEntityType\":\"Organization\",\"DisqusShortName\":\"\",\"PostsPerPage\":5,\"DaysToComment\":-1,\"ModerateComments\":true,\"CommentNotificationEmail\":null,\"BlogMenuLinksToNewestPost\":false,\"LocalMediaVirtualPath\":\"/media/images/\",\"CdnUrl\":\"\",\"PubDateFormat\":\"MMMM d. yyyy\",\"IncludePubDateInPostUrls\":true,\"TimeZoneId\":\"America/New_York\",\"RecaptchaPublicKey\":null,\"RecaptchaPrivateKey\":null,\"DefaultPageSlug\":\"home\",\"UseDefaultPageAsRootNode\":true,\"ShowTitle\":false,\"AddBlogToPagesTree\":true,\"BlogPagePosition\":2,\"BlogPageText\":\"Blog\",\"BlogPageNavComponentVisibility\":null,\"Image\":\"\",\"ChannelTimeToLive\":60,\"LanguageCode\":\"en-US\",\"ChannelCategoriesCsv\":\"\",\"ManagingEditorEmail\":\"\",\"ChannelRating\":\"\",\"WebmasterEmail\":\"\",\"RemoteFeedUrl\":\"\",\"RemoteFeedProcessorUseAgentFragment\":\"\",\"ShowRecentPostsOnDefaultPage\":false,\"ShowFeaturedPostsOnDefaultPage\":false,\"FacebookAppId\":null,\"SiteName\":null,\"TwitterPublisher\":null,\"TwitterCreator\":null,\"DefaultContentType\":\"html\",\"TeaserMode\":0,\"TeaserTruncationMode\":0,\"TeaserTruncationLength\":20,\"DefaultFeedItems\":20,\"MaxFeedItems\":1000,\"ShowRelatedPosts\":true,\"ShowAboutBox\":true,\"AboutHeading\":\"About\",\"AboutContent\":null}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/f83067b4-919d-4910-acd1-4b3b1c210ecf~fr-FR/page/home.json",
    "content": "{\"Id\":\"home\",\"ProjectId\":\"f83067b4-919d-4910-acd1-4b3b1c210ecf~fr-FR\",\"ParentId\":\"0\",\"ParentSlug\":\"\",\"PageOrder\":2,\"Title\":\"Home\",\"Author\":\"Admin\",\"Slug\":\"home\",\"ExternalUrl\":null,\"CorrelationKey\":null,\"MetaDescription\":null,\"MetaJson\":null,\"MetaHtml\":null,\"Content\":\"<p>En francais si vous plait!</p>\\r\\n\",\"PubDate\":\"2019-03-04T20:12:16.6989033Z\",\"LastModified\":\"2019-03-04T20:12:16.7021265Z\",\"IsPublished\":true,\"MenuOnly\":false,\"ShowMenu\":false,\"ViewRoles\":null,\"Categories\":[],\"Comments\":[],\"ShowHeading\":true,\"ShowPubDate\":false,\"ShowLastModified\":false,\"ShowCategories\":false,\"ShowComments\":false,\"MenuFilters\":null,\"DisableEditor\":false,\"Resources\":[],\"ContentType\":\"html\",\"CreatedUtc\":\"2019-03-04T20:12:16.6965373Z\",\"CreatedByUser\":\"admin\",\"LastModifiedByUser\":\"admin\",\"DraftContent\":null,\"DraftAuthor\":null,\"DraftPubDate\":null,\"TemplateKey\":null,\"SerializedModel\":null,\"DraftSerializedModel\":null,\"Serializer\":null}"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/f83067b4-919d-4910-acd1-4b3b1c210ecf~fr-FR/post/2019/03/post-un.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-16\"?>\n<post>\n  <id>post-un</id>\n  <title>Post Un</title>\n  <slug>post-un</slug>\n  <correlationkey />\n  <author>Admin</author>\n  <pubDate>2019-03-04T20:13:34.1251299Z</pubDate>\n  <lastModified>2019-03-04T20:13:34</lastModified>\n  <excerpt />\n  <content>&lt;p&gt;Le first one&lt;/p&gt;\n</content>\n  <contentType>html</contentType>\n  <imageUrl />\n  <thumbnailUrl />\n  <createdUtc>2019-03-04T20:13:34</createdUtc>\n  <createdByUser>admin</createdByUser>\n  <lastModifiedByUser>admin</lastModifiedByUser>\n  <draftAuthor />\n  <draftContent />\n  <draftPubDate />\n  <templateKey />\n  <serializedModel />\n  <draftSerializedModel />\n  <serializer />\n  <blogId>f83067b4-919d-4910-acd1-4b3b1c210ecf~fr-FR</blogId>\n  <ispublished>true</ispublished>\n  <isFeatured>false</isFeatured>\n  <autoTeaser />\n  <teaserOverride />\n  <suppressTeaser>false</suppressTeaser>\n  <categories></categories>\n  <comments></comments>\n</post>"
  },
  {
    "path": "src/sourceDev.WebApp/nodb_storage/projects/f83067b4-919d-4910-acd1-4b3b1c210ecf~fr-FR/projectsettings/f83067b4-919d-4910-acd1-4b3b1c210ecf~fr-FR.json",
    "content": "{\"Id\":\"f83067b4-919d-4910-acd1-4b3b1c210ecf~fr-FR\",\"Title\":\"Blog\",\"Description\":\"a cool blog in french\",\"CopyrightNotice\":\"\",\"Publisher\":null,\"PublisherLogoUrl\":null,\"PublisherLogoWidth\":\"500px\",\"PublisherLogoHeight\":\"500px\",\"PublisherEntityType\":\"Organization\",\"DisqusShortName\":null,\"PostsPerPage\":5,\"DaysToComment\":-1,\"ModerateComments\":true,\"CommentNotificationEmail\":null,\"BlogMenuLinksToNewestPost\":false,\"LocalMediaVirtualPath\":\"/media/images/\",\"CdnUrl\":null,\"PubDateFormat\":\"MMMM d. yyyy\",\"IncludePubDateInPostUrls\":true,\"TimeZoneId\":\"America/New_York\",\"RecaptchaPublicKey\":\"6LedcNUSAAAAAHnKfOI2U48m7pMU2Zi3lsLwVSlO\",\"RecaptchaPrivateKey\":\"6LedcNUSAAAAACf4VQ5sVkxsX4pn9wdLFW9Liiub\",\"DefaultPageSlug\":\"home\",\"UseDefaultPageAsRootNode\":true,\"ShowTitle\":false,\"AddBlogToPagesTree\":true,\"BlogPagePosition\":2,\"BlogPageText\":\"Blog\",\"BlogPageNavComponentVisibility\":null,\"Image\":\"\",\"ChannelTimeToLive\":60,\"LanguageCode\":\"fr-FR\",\"ChannelCategoriesCsv\":null,\"ManagingEditorEmail\":null,\"ChannelRating\":\"\",\"WebmasterEmail\":null,\"RemoteFeedUrl\":null,\"RemoteFeedProcessorUseAgentFragment\":\"\",\"ShowRecentPostsOnDefaultPage\":false,\"ShowFeaturedPostsOnDefaultPage\":false,\"FacebookAppId\":null,\"SiteName\":null,\"TwitterPublisher\":null,\"TwitterCreator\":null,\"DefaultContentType\":\"html\",\"TeaserMode\":0,\"TeaserTruncationMode\":0,\"TeaserTruncationLength\":20,\"DefaultFeedItems\":20,\"MaxFeedItems\":1000,\"ShowRelatedPosts\":true,\"ShowAboutBox\":true,\"AboutHeading\":\"About\",\"AboutContent\":\"<p>Je ne say pax</p>\\r\\n\"}"
  },
  {
    "path": "src/sourceDev.WebApp/package.json",
    "content": "{\n    \"name\": \"app\",\n    \"version\": \"1.0.0\",\n    \"private\": true,\n    \"devDependencies\": {\n        \"@fortawesome/fontawesome-free\": \"^5.15.4\",\n        \"bootstrap\": \"5.1.3\",\n        \"clean-css\": \"^5.2.2\",\n        \"gulp\": \"^4.0.2\",\n        \"gulp-cli\": \"^2.3.0\",\n        \"gulp-concat\": \"^2.6.1\",\n        \"gulp-connect\": \"^5.7.0\",\n        \"gulp-cssmin\": \"^0.2.0\",\n        \"gulp-rename\": \"^2.0.0\",\n        \"gulp-sass\": \"^5.1.0\",\n        \"gulp-sourcemaps\": \"^3.0.0\",\n        \"gulp-uglify\": \"^3.0.2\",\n        \"merge-stream\": \"^2.0.0\",\n        \"smartmenus\": \"^1.1.1\",\n        \"smartmenus-bootstrap-4\": \"^0.1.0\",\n        \"sass\": \"^1.53.0\"\n    }\n}\n"
  },
  {
    "path": "src/sourceDev.WebApp/readme.html",
    "content": "<!DOCTYPE html>\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n    <title>cloudscribe New Project</title>\n    <link href=\"https://ajax.aspnetcdn.com/ajax/bootstrap/3.3.1/css/bootstrap.min.css\" rel=\"stylesheet\" />\n    <link href=\"https://maxcdn.bootstrapcdn.com/font-awesome/4.2.0/css/font-awesome.min.css\" rel=\"stylesheet\" />\n</head>\n<body>\n    <div id=\"main\" class=\"container body-content\" role=\"main\">\n\n        <a href=\"https://www.cloudscribe.com?utm_source=projecttemplate&amp;utm_medium=referral&amp;utm_campaign=newproject-allstorage\">\n            <img alt=\"cloudscribe\"\n                 class=\"img-responsive\"\n                 src=\"https://www.cloudscribe.com/campaignimages/projectreadmeheader.png?utm_source=projecttemplate&amp;c=Offsite-Interactions&amp;a=Project-Created&amp;m=7&amp;d=4&amp;dl=newproject-allstorage&amp;cb=91671AF7-32DD-44B9-BBF0-751A950EE9A0\">\n        </a>\n\n\n        <section>\n            <h2>Thanks for starting your project with cloudscribe!</h2>\n            <p>Here are some informative tips to help you get started.</p>\n            <h3>IMPORTANT: Update all the cloudscribe NuGet packages to the latest version before you do anything else.</h3>\n            <p>\n                Right click the solution node and choose \"Manage NuGet Packages for Solution\", then check for any available updates.\n            </p>\n\n            <p>\n                We would really appreciate it if you could <a target=\"_blank\" href=\"https://www.cloudscribe.com/account/register?utm_source=projecttemplate&amp;utm_medium=referral&amp;utm_campaign=newproject-allstorage\">register on cloudscribe.com</a>\n                if you haven't already, and be sure to checkout the <a target=\"_blank\" href=\"https://www.cloudscribe.com/docs?utm_source=projecttemplate&amp;utm_medium=referral&amp;utm_campaign=newproject-allstorage\">documentation</a>.\n                You can also ask questions in our <a target=\"_blank\" href=\"https://www.cloudscribe.com/forum?utm_source=projecttemplate&amp;utm_medium=referral&amp;utm_campaign=newproject-allstorage\">community forums</a>.\n            </p>\n            <p>Click the \"watch\" button in the <a href=\"https://github.com/cloudscribe/Announcements\" target=\"_blank\">cloudscribe Announcements Repository</a> to get notified about any major or breaking changes in future updates to our NuGet packages. </p>\n            <p>\n                If you like cloudscribe and our Visual Studio project template, please give us a good review in\n                <a target=\"_blank\" href=\"https://marketplace.visualstudio.com/items?itemName=joeaudette.cloudscribeProjectTemplate\">the Visual Studio Marketplace</a>\n            </p>\n            <p>Follow <a target=\"_blank\" href=\"https://twitter.com/cloudscribeweb\">@cloudscribeweb</a> on Twitter and <a target=\"_blank\" href=\"https://www.facebook.com/cloudscribeweb\">Facebook</a>!</p>\n\n            <article>\n                <h3><span aria-hidden=\"true\" class=\"fa fa-check\"></span> Next Steps</h3>\n                <ul class=\"list-group\">\n                    <li class=\"list-group-item\">\n                        <strong>Login Credentials</strong>\n                        When you first run the project application an administrative user account will be created automatically with the email admin@admin.com\n                        and the password admin. Once you login with administrative permissions a new Administration menu will appear, you should take a look around\n                        the various menu items to find the configurable settings that are of interest to you. One of the first things you should do is change the email\n                        address and password of the admin user account.  You can change the email under Administration > User Management > User List.\n                        You can change the password by clicking the welcome user message at the top of the page. Be careful not to forget your password at least until\n                        you have configured SMTP settings for email because password reset emails can't be sent until you do that.\n                        If you deploy the application to public facing web hosting be sure to change these credentials immediately after deployment.\n\n                    </li>\n                    <li class=\"list-group-item\">\n                        <strong>Data Protection</strong>\n                        Be sure to see the comments in Startup.cs about data protection and how to configure the storage location of data protection keys.\n                        Data protection keys are used to encrypt some settings that are persisted to data storage such as the password for SMTP, and the \"secrets\"\n                        for social authentication.\n                    </li>\n                    <li class=\"list-group-item\">\n                        <strong>Configure Email Settings for email notifications</strong>\n                        In order for certain features like password reset or requiring a confirmed email to work, your site needs to be able to send email notifications.\n                        You will find settings for this under Administration > Email Settings\n                    </li>\n                    <li class=\"list-group-item\">\n                        <strong>Build your own custom features</strong>\n                        Now that your project is created, you likely have plans to write some code for the custom features you need. cloudscribe doesn't impose\n                        any prescriptive requirements or patterns for how you build your own features, you can typically use any patterns and approaches\n                        that you would normally use in ASP.NET Core. But there is some guidance provided for getting the current user information and how to\n                        optionally implement multi-tenancy in your own features if you need that.\n                        See the <a href=\"https://www.cloudscribe.com/docs/building-custom-features-that-integrate-with-cloudscribe-core?utm_source=projecttemplate&amp;utm_medium=referral&amp;utm_campaign=newproject-allstorage\">Building Custom Features Documentation</a>\n                        for more information.\n                    </li>\n\n                    <li class=\"list-group-item\">\n                        <strong>Create a Custom theme</strong>\n                        There are a bunch of bootswatch themes included and you can choose the theme from a dropdown list under Administration > Site Settings after you login to your project.\n                        But more than likely you will want to create a custom theme.\n                        You will want to customize the sass files under app-scss, and\n                        the _Layout.cshtml file under sitefiles/s1/themes/custom1/Shared. For example look in the _variables.scss file for $navbar-inverse-bg:\n                        which controls the background color of the top navigation. Change the color and refresh the page and it should change right away because\n                        we have a gulp task for hot reloading.\n                        See the <a href=\"https://www.cloudscribe.com/docs/themes-and-web-design?utm_source=projecttemplate&amp;utm_medium=referral&amp;utm_campaign=newproject-allstorage\">Themes and Web Design</a>\n                        documentation for more information.\n                    </li>\n\n                    <li class=\"list-group-item\">\n                        <strong>Configuration Sources</strong>\n                        By default, the configuration system will let you override appsettings.json from appsettings.Development.json when the environment is Development.\n                        It's best to avoid putting any sensitive information directly in appsettings.json because you will likely want to include that file in source control.\n                        You can copy any settings from appsettings.json into appsettings.Development.json instead of putting anything sensitive in appsettings.json.\n                        We generally add appsettings.Development.json to the .gitignore file so that any connection strings or credentials won't go into source control.\n                        It also supports overriding appsettings.json with appsettings.Production.json if the environment is Production. We don't include an\n                        appsettings.Production.json file in the template, and would create that file manually on the production server as part of the first deployment.\n                        For Azure hosting you would generally use Environment Variables or Azure Key Vault as discussed in the\n                        <a href=\"https://docs.microsoft.com/en-us/aspnet/core/fundamentals/configuration?tabs=basicconfiguration\">official documentation</a>.\n                    </li>\n                    <li class=\"list-group-item\">\n                        <strong>Google Analytics</strong>\n                        cloudscribe has built in support for Google Analytics - just add your profile id under Administration > Site Settings.\n                        There is also tracking of account activities such as site registration and logins, including social login tracking.\n                        To get the most benefit from Google Analytics, see the <a href=\"https://www.cloudscribe.com/docs/google-analytics-integration?utm_source=projecttemplate&amp;utm_medium=referral&amp;utm_campaign=newproject-allstorage\">documentation</a>.\n                    </li>\n\n                </ul>\n            </article>\n            <div class=\"row\">\n                <div class=\"col-md-12\">\n                    <h2>Need any help?</h2>\n\n                    <p>If you find you don't have enough time to achieve what you want, we might be able to help. As the maintainers of cloudscribe open source libraries and products, we understand how to get things done, and we can offer assistance ranging from a couple of hours of consultancy, or troubleshooting your issues through a screenshare, through to full analysis and development of your solution.</p>\n                    <p>\n                        Why not get in touch through our <a href=\"https://www.cloudscribe.com/contact\">contact form</a>.\n                    </p>\n\n                </div>\n            </div>\n            <div class=\"row\">\n                <div class=\"col-md-12\">\n                    <h2>Support cloudscribe by Buying Swag at Our CafePress Shop!</h2>\n                    <p>\n                        We have invested a lot of unpaid time and effort to make cloudscribe available and to keep improving it.\n                        We really appreciate anything you can do to support this work, so please help spread the word and encourage others to try\n                        cloudscribe. If you can spare a few bucks for a t-shirt or a voluntary payment we would be grateful.\n                    </p>\n                    <p>\n                        See all the available merchandise on our <a href=\"http://www.cafepress.com/cloudscribe\">CafePress shop!</a>\n                        We make about $5 on each item and you can help us spread awareness of cloudscribe with our branded products.\n                        Only a few of our branded items are shown below.\n                    </p>\n\n                </div>\n            </div>\n            <div class=\"row\">\n                <div class=\"col-md-4\">\n                    <a href=\"http://www.cafepress.com/cloudscribe.81640156\"><img src=\"https://www.cloudscribe.com/img/cloudscribewww_tshirt.jpg\" /></a>\n                </div>\n                <div class=\"col-md-4\">\n                    <a href=\"http://www.cafepress.com/cloudscribe.81640151\"><img src=\"https://www.cloudscribe.com/img/cloudscribewww_sweatshirt.jpg\" /></a>\n                </div>\n                <div class=\"col-md-4\">\n                    <a href=\"http://www.cafepress.com/cloudscribe.81640150\"><img src=\"https://www.cloudscribe.com/img/cloudscribe-mug-cp.png\" /></a>\n                </div>\n            </div>\n            <div class=\"row\">\n                <div class=\"col-md-12\">\n                    <h2>Check out our commercial cloudscribe modules</h2>\n\n                    <p>cloudscribe commercial libraries are published as nuget packages just like <a href=\"/docs/complete-list-of-cloudscribe-libraries\">our open source libraries</a>. You can find <a href=\"https://www.nuget.org/profiles/cloudscribe\">all of our libraries on nuget.org</a>, the open source libraries have blue icons and the commercial libraries have green icons. The easiest way to get our products is by using our <a href=\"https://marketplace.visualstudio.com/items?itemName=joeaudette.cloudscribeProjectTemplate\">Project Template for Visual Studio</a>, which can create an application configured with our open source and commercial libraries in various configurations based on the options you choose. We also have reference sample applications on github that show how to wire up the nuget packages in case you want to integrate our products with existing web applications. You can find links to the reference applications in the list below and in the product details listed in <a href=\"/store\">our&nbsp;store</a>. All of our commercial products are released under our <a href=\"https://www.cloudscribe.com/CommercialProductLicense.md\" target=\"_blank\">commercial product license</a>.</p>\n\n                    <p>Some of our commercial libraries can be used with any ASP.NET Core MVC application and do not require cloudscribe Core, but all of our commercial libraries work optimally when used with our open source libraries.</p>\n\n                    <p>We put a lot of effort into all of our products both open source and commercial, but we depend on sales of our commercial products to support our continued work.</p>\n                    <p>\n                        Find out more about our <a href=\"https://www.cloudscribe.com/complete-list-of-cloudscribe-commercial-product-libraries\">cloudscribe commercial libraries.</a>\n                    </p>\n                </div>\n            </div>\n            <hr />\n            <!--\n    <div class=\"row\">\n        <div class=\"col-md-12\">\n            <h2>Make a Voluntary Payment to Say Thanks!</h2>\n            <div class=\"col-md-3 donate-button\">\n                <form action=\"https://www.paypal.com/cgi-bin/webscr\" method=\"post\" target=\"_top\">\n                    <input type=\"hidden\" name=\"cmd\" value=\"_s-xclick\">\n                    <input type=\"hidden\" name=\"hosted_button_id\" value=\"LRTXQVNQWWJWU\">\n                    <table>\n                        <tr><td><input type=\"hidden\" name=\"on0\" value=\"Support My Work\">Support My Work</td></tr>\n                        <tr>\n                            <td>\n                                <select name=\"os0\">\n                                    <option value=\"Good will contribution\">Good will contribution $25.00 USD</option>\n                                    <option value=\"I really benefited from your work\">I really benefited from your work $50.00 USD</option>\n                                    <option value=\"I&#x27;m really getting a lot of value from your work!\">I'm really getting a lot of value from your work! $100.00 USD</option>\n                                </select>\n                            </td>\n                        </tr>\n                    </table>\n                    <input type=\"hidden\" name=\"currency_code\" value=\"USD\">\n                    <input type=\"image\" src=\"https://www.paypalobjects.com/en_US/i/btn/btn_paynowCC_LG.gif\" border=\"0\" name=\"submit\" alt=\"PayPal - The safer, easier way to pay online!\">\n                    <img alt=\"\" border=\"0\" src=\"https://www.paypalobjects.com/en_US/i/scr/pixel.gif\" width=\"1\" height=\"1\">\n                </form>\n            </div>\n            <div class=\"col-md-3 donate-button\">\n                <form action=\"https://www.paypal.com/cgi-bin/webscr\" method=\"post\" target=\"_top\">\n                    <input type=\"hidden\" name=\"cmd\" value=\"_s-xclick\">\n                    <input type=\"hidden\" name=\"hosted_button_id\" value=\"DHASFB2BGS5UY\">\n                    <table>\n                        <tr><td><input type=\"hidden\" name=\"on0\" value=\"Beer Donation\">Beer Donation</td></tr>\n                        <tr>\n                            <td>\n                                <select name=\"os0\">\n                                    <option value=\"Buy Me a Pint of Beer!\">Buy Me a Pint of Beer! $5.00 USD</option>\n                                    <option value=\"Buy Me a 6 Pack!\">Buy Me a 6 Pack! $15.00 USD</option>\n                                    <option value=\"Buy Me a Case of Beer!\">Buy Me a Case of Beer! $25.00 USD</option>\n                                </select>\n                            </td>\n                        </tr>\n                    </table>\n                    <input type=\"hidden\" name=\"currency_code\" value=\"USD\">\n                    <input type=\"image\" src=\"https://www.paypalobjects.com/en_US/i/btn/btn_paynowCC_LG.gif\" border=\"0\" name=\"submit\" alt=\"PayPal - The safer, easier way to pay online!\">\n                    <img alt=\"\" border=\"0\" src=\"https://www.paypalobjects.com/en_US/i/scr/pixel.gif\" width=\"1\" height=\"1\">\n                </form>\n            </div>\n            <div class=\"col-md-3 donate-button\">\n                <form action=\"https://www.paypal.com/cgi-bin/webscr\" method=\"post\" target=\"_top\">\n                    <input type=\"hidden\" name=\"cmd\" value=\"_s-xclick\">\n                    <input type=\"hidden\" name=\"hosted_button_id\" value=\"AGPRQQBGPGKYN\">\n                    <table>\n                        <tr><td><input type=\"hidden\" name=\"on0\" value=\"Coffee Donation\">Coffee Donation</td></tr>\n                        <tr>\n                            <td>\n                                <select name=\"os0\">\n                                    <option value=\"Buy Me a Cup of Coffee!\">Buy Me a Cup of Coffee! $5.00 USD</option>\n                                    <option value=\"Buy Me Breakfast!\">Buy Me Breakfast! $15.00 USD</option>\n                                    <option value=\"Buy Me a Week of Coffee!\">Buy Me a Week of Coffee! $25.00 USD</option>\n                                </select>\n                            </td>\n                        </tr>\n                    </table>\n                    <input type=\"hidden\" name=\"currency_code\" value=\"USD\">\n                    <input type=\"image\" src=\"https://www.paypalobjects.com/en_US/i/btn/btn_paynowCC_LG.gif\" border=\"0\" name=\"submit\" alt=\"PayPal - The safer, easier way to pay online!\">\n                    <img alt=\"\" border=\"0\" src=\"https://www.paypalobjects.com/en_US/i/scr/pixel.gif\" width=\"1\" height=\"1\">\n                </form>\n            </div>\n        </div>\n    </div>\n    -->\n\n        </section>\n\n    </div>\n\n    <script src=\"https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js\"></script>\n    <script src=\"https://ajax.aspnetcdn.com/ajax/bootstrap/3.3.1/bootstrap.min.js\"></script>\n\n</body>\n</html>"
  },
  {
    "path": "src/sourceDev.WebApp/sitefiles/s1/themes/_ViewImports.cshtml",
    "content": "﻿@using sourceDev.WebApp\n@using System\n@using System.Collections.Generic\n@using System.Globalization\n@using System.Linq\n@using Microsoft.AspNetCore.Http\n@using Microsoft.AspNetCore.Authentication\n@using Microsoft.AspNetCore.Identity\n@using Microsoft.AspNetCore.Localization\n@using Microsoft.Extensions.Localization\n@using Microsoft.Extensions.Options\n@using cloudscribe.Core.Models\n@using cloudscribe.Core.Identity\n@using cloudscribe.Core.Web\n@using cloudscribe.Core.Web.Components\n@using cloudscribe.Core.Web.Design\n@using cloudscribe.Web.Navigation\n@using cloudscribe.Web.Pagination\n@using cloudscribe.Pagination.Models\n@using cloudscribe.Web.Common\n@using cloudscribe.Web.Common.Components\n@using cloudscribe.Web.Common.Helpers\n@using cloudscribe.Web.Common.Models\n@using cloudscribe.Web.Common.Extensions\n@addTagHelper \"*, Microsoft.AspNetCore.Mvc.TagHelpers\"\n@addTagHelper \"*, cloudscribe.Web.Common\"\n@addTagHelper \"*, cloudscribe.Core.Web\"\n@addTagHelper \"*, cloudscribe.Web.Navigation\"\n@addTagHelper \"*, cloudscribe.Web.Pagination\"\n"
  },
  {
    "path": "src/sourceDev.WebApp/sitefiles/s1/themes/_ViewStart.cshtml",
    "content": "﻿@{\n    Layout = \"_Layout\";\n}\n"
  },
  {
    "path": "src/sourceDev.WebApp/sitefiles/s1/themes/custom1/Shared/_Layout.cshtml",
    "content": "﻿@inject ISiteContextResolver siteResolver\n@inject ICoreThemeHelper themeHelper\n@{\n    var themeSettings = themeHelper.GetThemeSettings();\n    @*\n        These settings can be set by a main view to show additional columns.\n        Views that push content into the optional sections SideNav, AsidePrimary, and AsideSecondary\n        are obligated to set the needed viewtate property to true to show the section,\n        otherwise an error will occur.\n        The sideNav column also supports a toggle so it can be hidden and toggled visible even though it renders.\n    *@\n    bool sideNavVisible = true.Equals(ViewData[\"SideNavVisible\"]);\n    string sideNavToggleClass = ViewData[\"SideNavToggle\"]?.ToString() ?? \"collapse\";\n    bool asidePrimaryVisible = true.Equals(ViewData[\"AsidePrimaryVisible\"]);\n    bool asideSecondaryVisible = true.Equals(ViewData[\"AsideSecondaryVisible\"]);\n    var Tenant = await siteResolver.ResolveSite(Context.Request.Host.Host, Context.Request.Path);\n    var siteRoot = \"\";\n    if (!string.IsNullOrWhiteSpace(Tenant.SiteFolderName)) { siteRoot = \"/\" + Tenant.SiteFolderName; }\n    var isIE = Context.Request.Headers[\"User-Agent\"].ToString().Contains(\"Trident\");\n    var ieBodyClass = isIE ? \"IE\" : \"\";\n}\n<!DOCTYPE html>\n<html lang=\"@CultureInfo.CurrentUICulture.Name\">\n<head>\n    <meta charset=\"utf-8\" />\n    <title>@ViewData[\"Title\"] - @(Tenant?.SiteName ?? \"Sample\")</title>\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1, shrink-to-fit=no\">\n    @RenderSection(\"Meta\", required: false)\n    <environment names=\"Development\">\n        <link rel=\"stylesheet\" href=\"~/css/style.css\" cs-resolve-theme-resource=\"true\" cs-tenant=\"@Tenant\" asp-append-version=\"true\"  />\n    </environment>\n    <environment names=\"Staging,Production\">\n        <link rel=\"stylesheet\" href=\"~/css/style.min.css\" cs-resolve-theme-resource=\"true\" cs-tenant=\"@Tenant\" asp-append-version=\"true\"  />\n    </environment>\n    @if (isIE)\n    {\n        <link rel=\"stylesheet\" href=\"~/css/ie11.css\" />\n    }\n    @RenderSection(\"Styles\", required: false)    \n    \n    \n    <google-analytics profile-id=\"@Tenant.GoogleAnalyticsProfileId\" user-id=\"@User.GetUserId()\"></google-analytics>\n    <base href=\"@Context.Request.Path\" />\n</head>\n<body class=\"d-flex flex-column @ViewData[\"BodyClass\"] @ieBodyClass\">\n    <header>\n        <a id=\"skippy\" class=\"visually-hidden visually-hidden-focusable\" href=\"#content\">\n            <div class=\"container\">\n                <span class=\"skiplink-text\">Skip to main content</span>\n            </div>\n        </a>\n        <div class=\"fixed-top container-fluid brand-header bg-white\">\n            <div class=\"d-flex flex-wrap align-content-around \">\n                @if (!string.IsNullOrWhiteSpace(Tenant.LogoUrl))\n                {\n                    <div>\n                         <partial name=\"SiteLogoPartial\" model=\"@Tenant\" />\n                    </div>\n                }\n                @if (Tenant.ShowSiteNameLink)\n                {\n                    <div class=\"align-self-center pt-4 pt-sm-0\">\n                         <partial name=\"SiteTitlePartial\" model=\"@Tenant\" />\n                    </div>\n                }\n                @if (!string.IsNullOrWhiteSpace(Tenant.HeaderContent))\n                {\n                    <div class=\"flex-fill align-self-center pt-3 d-none d-sm-block\">\n                        <partial name=\"SiteHeaderPartial\" />\n                    </div>\n                }\n            </div>\n        </div>\n        <nav class=\"navbar navbar-expand-md navbar-dark fixed-top bg-dark pt-0 pb-0\">\n            <button class=\"navbar-toggler\" type=\"button\" data-bs-toggle=\"collapse\" data-bs-target=\"#navbarNavDropdown\" aria-controls=\"navbarNavDropdown\" aria-expanded=\"false\" aria-label=\"Toggle navigation\">\n                <span class=\"navbar-toggler-icon\"></span>\n            </button>\n\n            <div class=\"collapse navbar-collapse bg-dark ps-2\" id=\"navbarNavDropdown\">\n                @await Component.InvokeAsync(\"Navigation\", new { viewName = \"Bootstrap5TopNavWithDropdowns\", filterName = NamedNavigationFilters.TopNav, startingNodeKey = \"\" })\n                <partial name=\"_LoginPartialWithDropdowns\" />\n            </div>\n        </nav>\n    </header>\n    <div id=\"wrapper\" class=\"container-fluid cs-container flex-fill\">\n        @await Component.InvokeAsync(\"Navigation\", new { viewName = \"Bootstrap5Breadcrumbs\", filterName = NamedNavigationFilters.Breadcrumbs, startingNodeKey = \"\" })\n        <div class=\"row\">\n            <main id=\"content\" class=\"col order-3\">\n                <partial name=\"AlertsPartial\" />\n                <partial name=\"_CookieConsentPartial\" />\n                <partial name=\"_AutoLogoutWarningPartial\" />\n                @RenderBody()\n            </main>\n            @if (sideNavVisible)\n            {\n                <nav id=\"sidenavmenu\" class=\" col col-3 order-1 @sideNavToggleClass\">\n                    @RenderSection(\"SideNav\", required: false)\n                </nav>\n\n            }\n            @if (asideSecondaryVisible)\n            {\n                <aside id=\"asideSecondary\" class=\"col col-1 order-2\">\n                    @RenderSection(\"AsideSecondary\", required: false)\n                </aside>\n\n            }\n            @if (asidePrimaryVisible)\n            {\n                <aside id=\"asidePrimary\" class=\"col-12 col-md-3 col-sm-12  col-sm-12 order-4\">\n                    @RenderSection(\"AsidePrimary\", required: false)\n                </aside>\n\n            }\n        </div>\n    </div>\n    <footer class=\"sticky-bottom border pt-2 h-100\">\n        <div class=\"w-100 text-center\">\n            <partial name=\"SiteFooterPartial\" />\n        </div>\n        <div class=\"d-flex flex-wrap flex-grow justify-content-center\">\n            <div class=\"p-2\">\n            <ul class=\"list-unstyled d-flex flex-wrap\">\n                @if (Tenant != null && !string.IsNullOrWhiteSpace(Tenant.PrivacyPolicy))\n                {\n                    <li class=\"border-left ps-2 me-2\">\n                        <a asp-controller=\"Privacy\" asp-action=\"Index\">Privacy Policy</a>\n                    </li>\n                }\n\n                 @* uncomment if you want the registration agreement in the footer*@\n                    @*                    \n                    @if (Tenant != null && !string.IsNullOrWhiteSpace(Tenant.RegistrationAgreement))\n                    {\n                        <li class=\"border-left ps-2 me-2\">\n                            <a asp-controller=\"registrationagreement\" asp-action=\"Index\">Registration Agreement</a>\n                        </li>\n                    }\n                    *@\n\n\n                <li class=\"border-left ps-2 me-2\">\n                    @* you are free to remove the powered by cloudscribe link but we appreciate it if you choose to keep it! *@\n                    <a class=\"text-nowrap\" target=\"_blank\" href=\"https://www.cloudscribe.com/?utm_source=@Context.Request.Host.Value&amp;utm_medium=referral&amp;utm_campaign=poweredbycloudscribe\">Powered by cloudscribe</a>\n                </li>\n            </ul>\n        </div>\n        <div class=\"ps-sm-2  text-center w-100\"><span class=\"text-nowrap\">Copyright &copy; @DateTime.Now.Year</span><span class=\"d-none d-sm-inline\"> - </span><span> @(Tenant?.SiteName ?? \"Sample\")</span></div>\n        <partial name=\"_CookieConsentRevokePartial\" />\n\n        </div>\n        \n    </footer>\n    @RenderSection(\"Toolbar\", required: false)\n    <environment names=\"Development\">\n        <script src=\"~/js/jquery.min.js\" cs-resolve-theme-resource=\"true\" cs-tenant=\"@Tenant\"></script>\n        <script src=\"~/js/bootstrap.bundle.js\" cs-resolve-theme-resource=\"true\" cs-tenant=\"@Tenant\"></script>\n        <script src=\"~/cr/js/bs4.smartmenus.min.js\"></script>\n    </environment>\n    <environment names=\"Staging,Production\">\n        <script src=\"~/js/jquery.min.js\" cs-resolve-theme-resource=\"true\" cs-tenant=\"@Tenant\"></script>\n        <script src=\"~/js/bootstrap.bundle.min.js\" cs-resolve-theme-resource=\"true\" cs-tenant=\"@Tenant\"></script>\n        <script src=\"~/cr/js/bs4.smartmenus.min.js\"></script>\n    </environment>\n    @RenderSection(\"Bottom\", required: false)\n    @RenderSection(\"Scripts\", required: false)\n    @Html.RenderResources(\"js\") @*render any js resources declared via helpers in partial views etc*@\n    <add-this profile-id=\"@Tenant.AddThisDotComUsername\" async></add-this>\n</body>\n</html>\n"
  },
  {
    "path": "src/sourceDev.WebApp/sitefiles/s1/themes/custom1/wwwroot/css/style.css",
    "content": "@charset \"UTF-8\";\n/*@import \"node_modules/bootstrap/scss/mixins/lists\";\n@import \"node_modules/bootstrap/scss/mixins/breakpoints\";\n@import \"node_modules/bootstrap/scss/mixins/container\";\n@import \"node_modules/bootstrap/scss/mixins/grid\";\n@import \"node_modules/bootstrap/scss/mixins/utilities\";*/\n:root {\n  --bs-blue: #007bff;\n  --bs-indigo: #6610f2;\n  --bs-purple: #6f42c1;\n  --bs-pink: #e83e8c;\n  --bs-red: #dc3545;\n  --bs-orange: #fd7e14;\n  --bs-yellow: #ffc107;\n  --bs-green: #28a745;\n  --bs-teal: #20c997;\n  --bs-cyan: #17a2b8;\n  --bs-white: #fff;\n  --bs-gray: #6c757d;\n  --bs-gray-dark: #343a40;\n  --bs-gray-100: #f8f9fa;\n  --bs-gray-200: #e9ecef;\n  --bs-gray-300: #dee2e6;\n  --bs-gray-400: #ced4da;\n  --bs-gray-500: #adb5bd;\n  --bs-gray-600: #6c757d;\n  --bs-gray-700: #495057;\n  --bs-gray-800: #343a40;\n  --bs-gray-900: #212529;\n  --bs-primary: #03378d;\n  --bs-secondary: #6c757d;\n  --bs-success: #28a745;\n  --bs-info: #17a2b8;\n  --bs-warning: #ffc107;\n  --bs-danger: #dc3545;\n  --bs-light: #f8f9fa;\n  --bs-dark: #03378d;\n  --bs-primary-rgb: 3, 55, 141;\n  --bs-secondary-rgb: 108, 117, 125;\n  --bs-success-rgb: 40, 167, 69;\n  --bs-info-rgb: 23, 162, 184;\n  --bs-warning-rgb: 255, 193, 7;\n  --bs-danger-rgb: 220, 53, 69;\n  --bs-light-rgb: 248, 249, 250;\n  --bs-dark-rgb: 3, 55, 141;\n  --bs-white-rgb: 255, 255, 255;\n  --bs-black-rgb: 0, 0, 0;\n  --bs-body-color-rgb: 33, 37, 41;\n  --bs-body-bg-rgb: 255, 255, 255;\n  --bs-font-sans-serif: system-ui, -apple-system, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, \"Noto Sans\", \"Liberation Sans\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n  --bs-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n  --bs-gradient: linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));\n  --bs-body-font-family: var(--bs-font-sans-serif);\n  --bs-body-font-size: 1rem;\n  --bs-body-font-weight: 400;\n  --bs-body-line-height: 1.5;\n  --bs-body-color: #212529;\n  --bs-body-bg: #fff;\n}\n\n*,\n*::before,\n*::after {\n  box-sizing: border-box;\n}\n\n@media (prefers-reduced-motion: no-preference) {\n  :root {\n    scroll-behavior: smooth;\n  }\n}\n\nbody {\n  margin: 0;\n  font-family: var(--bs-body-font-family);\n  font-size: var(--bs-body-font-size);\n  font-weight: var(--bs-body-font-weight);\n  line-height: var(--bs-body-line-height);\n  color: var(--bs-body-color);\n  text-align: var(--bs-body-text-align);\n  background-color: var(--bs-body-bg);\n  -webkit-text-size-adjust: 100%;\n  -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\n\nhr {\n  margin: 1rem 0;\n  color: inherit;\n  background-color: currentColor;\n  border: 0;\n  opacity: 0.25;\n}\n\nhr:not([size]) {\n  height: 1px;\n}\n\nh6, .h6, h5, .h5, h4, .h4, h3, .h3, h2, .h2, h1, .h1 {\n  margin-top: 0;\n  margin-bottom: 0.5rem;\n  font-weight: 500;\n  line-height: 1.2;\n}\n\nh1, .h1 {\n  font-size: calc(1.375rem + 1.5vw);\n}\n@media (min-width: 1200px) {\n  h1, .h1 {\n    font-size: 2.5rem;\n  }\n}\n\nh2, .h2 {\n  font-size: calc(1.325rem + 0.9vw);\n}\n@media (min-width: 1200px) {\n  h2, .h2 {\n    font-size: 2rem;\n  }\n}\n\nh3, .h3 {\n  font-size: calc(1.3rem + 0.6vw);\n}\n@media (min-width: 1200px) {\n  h3, .h3 {\n    font-size: 1.75rem;\n  }\n}\n\nh4, .h4 {\n  font-size: calc(1.275rem + 0.3vw);\n}\n@media (min-width: 1200px) {\n  h4, .h4 {\n    font-size: 1.5rem;\n  }\n}\n\nh5, .h5 {\n  font-size: 1.25rem;\n}\n\nh6, .h6 {\n  font-size: 1rem;\n}\n\np {\n  margin-top: 0;\n  margin-bottom: 1rem;\n}\n\nabbr[title],\nabbr[data-bs-original-title] {\n  text-decoration: underline dotted;\n  cursor: help;\n  text-decoration-skip-ink: none;\n}\n\naddress {\n  margin-bottom: 1rem;\n  font-style: normal;\n  line-height: inherit;\n}\n\nol,\nul {\n  padding-left: 2rem;\n}\n\nol,\nul,\ndl {\n  margin-top: 0;\n  margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n  margin-bottom: 0;\n}\n\ndt {\n  font-weight: 700;\n}\n\ndd {\n  margin-bottom: 0.5rem;\n  margin-left: 0;\n}\n\nblockquote {\n  margin: 0 0 1rem;\n}\n\nb,\nstrong {\n  font-weight: bolder;\n}\n\nsmall, .small {\n  font-size: 0.875em;\n}\n\nmark, .mark {\n  padding: 0.2em;\n  background-color: #fcf8e3;\n}\n\nsub,\nsup {\n  position: relative;\n  font-size: 0.75em;\n  line-height: 0;\n  vertical-align: baseline;\n}\n\nsub {\n  bottom: -0.25em;\n}\n\nsup {\n  top: -0.5em;\n}\n\na {\n  color: #03378d;\n  text-decoration: underline;\n}\na:hover {\n  color: #022c71;\n}\n\na:not([href]):not([class]), a:not([href]):not([class]):hover {\n  color: inherit;\n  text-decoration: none;\n}\n\npre,\ncode,\nkbd,\nsamp {\n  font-family: var(--bs-font-monospace);\n  font-size: 1em;\n  direction: ltr /* rtl:ignore */;\n  unicode-bidi: bidi-override;\n}\n\npre {\n  display: block;\n  margin-top: 0;\n  margin-bottom: 1rem;\n  overflow: auto;\n  font-size: 0.875em;\n}\npre code {\n  font-size: inherit;\n  color: inherit;\n  word-break: normal;\n}\n\ncode {\n  font-size: 0.875em;\n  color: #e83e8c;\n  word-wrap: break-word;\n}\na > code {\n  color: inherit;\n}\n\nkbd {\n  padding: 0.2rem 0.4rem;\n  font-size: 0.875em;\n  color: #fff;\n  background-color: #212529;\n  border-radius: 0.2rem;\n}\nkbd kbd {\n  padding: 0;\n  font-size: 1em;\n  font-weight: 700;\n}\n\nfigure {\n  margin: 0 0 1rem;\n}\n\nimg,\nsvg {\n  vertical-align: middle;\n}\n\ntable {\n  caption-side: bottom;\n  border-collapse: collapse;\n}\n\ncaption {\n  padding-top: 0.5rem;\n  padding-bottom: 0.5rem;\n  color: #6c757d;\n  text-align: left;\n}\n\nth {\n  text-align: inherit;\n  text-align: -webkit-match-parent;\n}\n\nthead,\ntbody,\ntfoot,\ntr,\ntd,\nth {\n  border-color: inherit;\n  border-style: solid;\n  border-width: 0;\n}\n\nlabel {\n  display: inline-block;\n}\n\nbutton {\n  border-radius: 0;\n}\n\nbutton:focus:not(:focus-visible) {\n  outline: 0;\n}\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n  margin: 0;\n  font-family: inherit;\n  font-size: inherit;\n  line-height: inherit;\n}\n\nbutton,\nselect {\n  text-transform: none;\n}\n\n[role=button] {\n  cursor: pointer;\n}\n\nselect {\n  word-wrap: normal;\n}\nselect:disabled {\n  opacity: 1;\n}\n\n[list]::-webkit-calendar-picker-indicator {\n  display: none;\n}\n\nbutton,\n[type=button],\n[type=reset],\n[type=submit] {\n  -webkit-appearance: button;\n}\nbutton:not(:disabled),\n[type=button]:not(:disabled),\n[type=reset]:not(:disabled),\n[type=submit]:not(:disabled) {\n  cursor: pointer;\n}\n\n::-moz-focus-inner {\n  padding: 0;\n  border-style: none;\n}\n\ntextarea {\n  resize: vertical;\n}\n\nfieldset {\n  min-width: 0;\n  padding: 0;\n  margin: 0;\n  border: 0;\n}\n\nlegend {\n  float: left;\n  width: 100%;\n  padding: 0;\n  margin-bottom: 0.5rem;\n  font-size: calc(1.275rem + 0.3vw);\n  line-height: inherit;\n}\n@media (min-width: 1200px) {\n  legend {\n    font-size: 1.5rem;\n  }\n}\nlegend + * {\n  clear: left;\n}\n\n::-webkit-datetime-edit-fields-wrapper,\n::-webkit-datetime-edit-text,\n::-webkit-datetime-edit-minute,\n::-webkit-datetime-edit-hour-field,\n::-webkit-datetime-edit-day-field,\n::-webkit-datetime-edit-month-field,\n::-webkit-datetime-edit-year-field {\n  padding: 0;\n}\n\n::-webkit-inner-spin-button {\n  height: auto;\n}\n\n[type=search] {\n  outline-offset: -2px;\n  -webkit-appearance: textfield;\n}\n\n/* rtl:raw:\n[type=\"tel\"],\n[type=\"url\"],\n[type=\"email\"],\n[type=\"number\"] {\n  direction: ltr;\n}\n*/\n::-webkit-search-decoration {\n  -webkit-appearance: none;\n}\n\n::-webkit-color-swatch-wrapper {\n  padding: 0;\n}\n\n::file-selector-button {\n  font: inherit;\n}\n\n::-webkit-file-upload-button {\n  font: inherit;\n  -webkit-appearance: button;\n}\n\noutput {\n  display: inline-block;\n}\n\niframe {\n  border: 0;\n}\n\nsummary {\n  display: list-item;\n  cursor: pointer;\n}\n\nprogress {\n  vertical-align: baseline;\n}\n\n[hidden] {\n  display: none !important;\n}\n\n.lead {\n  font-size: 1.25rem;\n  font-weight: 300;\n}\n\n.display-1 {\n  font-size: calc(1.625rem + 4.5vw);\n  font-weight: 300;\n  line-height: 1.2;\n}\n@media (min-width: 1200px) {\n  .display-1 {\n    font-size: 5rem;\n  }\n}\n\n.display-2 {\n  font-size: calc(1.575rem + 3.9vw);\n  font-weight: 300;\n  line-height: 1.2;\n}\n@media (min-width: 1200px) {\n  .display-2 {\n    font-size: 4.5rem;\n  }\n}\n\n.display-3 {\n  font-size: calc(1.525rem + 3.3vw);\n  font-weight: 300;\n  line-height: 1.2;\n}\n@media (min-width: 1200px) {\n  .display-3 {\n    font-size: 4rem;\n  }\n}\n\n.display-4 {\n  font-size: calc(1.475rem + 2.7vw);\n  font-weight: 300;\n  line-height: 1.2;\n}\n@media (min-width: 1200px) {\n  .display-4 {\n    font-size: 3.5rem;\n  }\n}\n\n.display-5 {\n  font-size: calc(1.425rem + 2.1vw);\n  font-weight: 300;\n  line-height: 1.2;\n}\n@media (min-width: 1200px) {\n  .display-5 {\n    font-size: 3rem;\n  }\n}\n\n.display-6 {\n  font-size: calc(1.375rem + 1.5vw);\n  font-weight: 300;\n  line-height: 1.2;\n}\n@media (min-width: 1200px) {\n  .display-6 {\n    font-size: 2.5rem;\n  }\n}\n\n.list-unstyled {\n  padding-left: 0;\n  list-style: none;\n}\n\n.list-inline {\n  padding-left: 0;\n  list-style: none;\n}\n\n.list-inline-item {\n  display: inline-block;\n}\n.list-inline-item:not(:last-child) {\n  margin-right: 0.5rem;\n}\n\n.initialism {\n  font-size: 0.875em;\n  text-transform: uppercase;\n}\n\n.blockquote {\n  margin-bottom: 1rem;\n  font-size: 1.25rem;\n}\n.blockquote > :last-child {\n  margin-bottom: 0;\n}\n\n.blockquote-footer {\n  margin-top: -1rem;\n  margin-bottom: 1rem;\n  font-size: 0.875em;\n  color: #6c757d;\n}\n.blockquote-footer::before {\n  content: \"— \";\n}\n\n.img-fluid {\n  max-width: 100%;\n  height: auto;\n}\n\n.img-thumbnail {\n  padding: 0.25rem;\n  background-color: #fff;\n  border: 1px solid #dee2e6;\n  border-radius: 0.25rem;\n  max-width: 100%;\n  height: auto;\n}\n\n.figure {\n  display: inline-block;\n}\n\n.figure-img {\n  margin-bottom: 0.5rem;\n  line-height: 1;\n}\n\n.figure-caption {\n  font-size: 0.875em;\n  color: #6c757d;\n}\n\n.container,\n.container-fluid,\n.container-xxl,\n.container-xl,\n.container-lg,\n.container-md,\n.container-sm {\n  width: 100%;\n  padding-right: var(--bs-gutter-x, 0.75rem);\n  padding-left: var(--bs-gutter-x, 0.75rem);\n  margin-right: auto;\n  margin-left: auto;\n}\n\n@media (min-width: 576px) {\n  .container-sm, .container {\n    max-width: 540px;\n  }\n}\n@media (min-width: 768px) {\n  .container-md, .container-sm, .container {\n    max-width: 720px;\n  }\n}\n@media (min-width: 992px) {\n  .container-lg, .container-md, .container-sm, .container {\n    max-width: 960px;\n  }\n}\n@media (min-width: 1200px) {\n  .container-xl, .container-lg, .container-md, .container-sm, .container {\n    max-width: 1140px;\n  }\n}\n@media (min-width: 1400px) {\n  .container-xxl, .container-xl, .container-lg, .container-md, .container-sm, .container {\n    max-width: 1320px;\n  }\n}\n.row {\n  --bs-gutter-x: 1.5rem;\n  --bs-gutter-y: 0;\n  display: flex;\n  flex-wrap: wrap;\n  margin-top: calc(-1 * var(--bs-gutter-y));\n  margin-right: calc(-0.5 * var(--bs-gutter-x));\n  margin-left: calc(-0.5 * var(--bs-gutter-x));\n}\n.row > * {\n  flex-shrink: 0;\n  width: 100%;\n  max-width: 100%;\n  padding-right: calc(var(--bs-gutter-x) * 0.5);\n  padding-left: calc(var(--bs-gutter-x) * 0.5);\n  margin-top: var(--bs-gutter-y);\n}\n\n.col {\n  flex: 1 0 0%;\n}\n\n.row-cols-auto > * {\n  flex: 0 0 auto;\n  width: auto;\n}\n\n.row-cols-1 > * {\n  flex: 0 0 auto;\n  width: 100%;\n}\n\n.row-cols-2 > * {\n  flex: 0 0 auto;\n  width: 50%;\n}\n\n.row-cols-3 > * {\n  flex: 0 0 auto;\n  width: 33.3333333333%;\n}\n\n.row-cols-4 > * {\n  flex: 0 0 auto;\n  width: 25%;\n}\n\n.row-cols-5 > * {\n  flex: 0 0 auto;\n  width: 20%;\n}\n\n.row-cols-6 > * {\n  flex: 0 0 auto;\n  width: 16.6666666667%;\n}\n\n.col-auto {\n  flex: 0 0 auto;\n  width: auto;\n}\n\n.col-1 {\n  flex: 0 0 auto;\n  width: 8.33333333%;\n}\n\n.col-2 {\n  flex: 0 0 auto;\n  width: 16.66666667%;\n}\n\n.col-3 {\n  flex: 0 0 auto;\n  width: 25%;\n}\n\n.col-4 {\n  flex: 0 0 auto;\n  width: 33.33333333%;\n}\n\n.col-5 {\n  flex: 0 0 auto;\n  width: 41.66666667%;\n}\n\n.col-6 {\n  flex: 0 0 auto;\n  width: 50%;\n}\n\n.col-7 {\n  flex: 0 0 auto;\n  width: 58.33333333%;\n}\n\n.col-8 {\n  flex: 0 0 auto;\n  width: 66.66666667%;\n}\n\n.col-9 {\n  flex: 0 0 auto;\n  width: 75%;\n}\n\n.col-10 {\n  flex: 0 0 auto;\n  width: 83.33333333%;\n}\n\n.col-11 {\n  flex: 0 0 auto;\n  width: 91.66666667%;\n}\n\n.col-12 {\n  flex: 0 0 auto;\n  width: 100%;\n}\n\n.offset-1 {\n  margin-left: 8.33333333%;\n}\n\n.offset-2 {\n  margin-left: 16.66666667%;\n}\n\n.offset-3 {\n  margin-left: 25%;\n}\n\n.offset-4 {\n  margin-left: 33.33333333%;\n}\n\n.offset-5 {\n  margin-left: 41.66666667%;\n}\n\n.offset-6 {\n  margin-left: 50%;\n}\n\n.offset-7 {\n  margin-left: 58.33333333%;\n}\n\n.offset-8 {\n  margin-left: 66.66666667%;\n}\n\n.offset-9 {\n  margin-left: 75%;\n}\n\n.offset-10 {\n  margin-left: 83.33333333%;\n}\n\n.offset-11 {\n  margin-left: 91.66666667%;\n}\n\n.g-0,\n.gx-0 {\n  --bs-gutter-x: 0;\n}\n\n.g-0,\n.gy-0 {\n  --bs-gutter-y: 0;\n}\n\n.g-1,\n.gx-1 {\n  --bs-gutter-x: 0.25rem;\n}\n\n.g-1,\n.gy-1 {\n  --bs-gutter-y: 0.25rem;\n}\n\n.g-2,\n.gx-2 {\n  --bs-gutter-x: 0.5rem;\n}\n\n.g-2,\n.gy-2 {\n  --bs-gutter-y: 0.5rem;\n}\n\n.g-3,\n.gx-3 {\n  --bs-gutter-x: 1rem;\n}\n\n.g-3,\n.gy-3 {\n  --bs-gutter-y: 1rem;\n}\n\n.g-4,\n.gx-4 {\n  --bs-gutter-x: 1.5rem;\n}\n\n.g-4,\n.gy-4 {\n  --bs-gutter-y: 1.5rem;\n}\n\n.g-5,\n.gx-5 {\n  --bs-gutter-x: 3rem;\n}\n\n.g-5,\n.gy-5 {\n  --bs-gutter-y: 3rem;\n}\n\n@media (min-width: 576px) {\n  .col-sm {\n    flex: 1 0 0%;\n  }\n  .row-cols-sm-auto > * {\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .row-cols-sm-1 > * {\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .row-cols-sm-2 > * {\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .row-cols-sm-3 > * {\n    flex: 0 0 auto;\n    width: 33.3333333333%;\n  }\n  .row-cols-sm-4 > * {\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .row-cols-sm-5 > * {\n    flex: 0 0 auto;\n    width: 20%;\n  }\n  .row-cols-sm-6 > * {\n    flex: 0 0 auto;\n    width: 16.6666666667%;\n  }\n  .col-sm-auto {\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .col-sm-1 {\n    flex: 0 0 auto;\n    width: 8.33333333%;\n  }\n  .col-sm-2 {\n    flex: 0 0 auto;\n    width: 16.66666667%;\n  }\n  .col-sm-3 {\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .col-sm-4 {\n    flex: 0 0 auto;\n    width: 33.33333333%;\n  }\n  .col-sm-5 {\n    flex: 0 0 auto;\n    width: 41.66666667%;\n  }\n  .col-sm-6 {\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .col-sm-7 {\n    flex: 0 0 auto;\n    width: 58.33333333%;\n  }\n  .col-sm-8 {\n    flex: 0 0 auto;\n    width: 66.66666667%;\n  }\n  .col-sm-9 {\n    flex: 0 0 auto;\n    width: 75%;\n  }\n  .col-sm-10 {\n    flex: 0 0 auto;\n    width: 83.33333333%;\n  }\n  .col-sm-11 {\n    flex: 0 0 auto;\n    width: 91.66666667%;\n  }\n  .col-sm-12 {\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .offset-sm-0 {\n    margin-left: 0;\n  }\n  .offset-sm-1 {\n    margin-left: 8.33333333%;\n  }\n  .offset-sm-2 {\n    margin-left: 16.66666667%;\n  }\n  .offset-sm-3 {\n    margin-left: 25%;\n  }\n  .offset-sm-4 {\n    margin-left: 33.33333333%;\n  }\n  .offset-sm-5 {\n    margin-left: 41.66666667%;\n  }\n  .offset-sm-6 {\n    margin-left: 50%;\n  }\n  .offset-sm-7 {\n    margin-left: 58.33333333%;\n  }\n  .offset-sm-8 {\n    margin-left: 66.66666667%;\n  }\n  .offset-sm-9 {\n    margin-left: 75%;\n  }\n  .offset-sm-10 {\n    margin-left: 83.33333333%;\n  }\n  .offset-sm-11 {\n    margin-left: 91.66666667%;\n  }\n  .g-sm-0,\n  .gx-sm-0 {\n    --bs-gutter-x: 0;\n  }\n  .g-sm-0,\n  .gy-sm-0 {\n    --bs-gutter-y: 0;\n  }\n  .g-sm-1,\n  .gx-sm-1 {\n    --bs-gutter-x: 0.25rem;\n  }\n  .g-sm-1,\n  .gy-sm-1 {\n    --bs-gutter-y: 0.25rem;\n  }\n  .g-sm-2,\n  .gx-sm-2 {\n    --bs-gutter-x: 0.5rem;\n  }\n  .g-sm-2,\n  .gy-sm-2 {\n    --bs-gutter-y: 0.5rem;\n  }\n  .g-sm-3,\n  .gx-sm-3 {\n    --bs-gutter-x: 1rem;\n  }\n  .g-sm-3,\n  .gy-sm-3 {\n    --bs-gutter-y: 1rem;\n  }\n  .g-sm-4,\n  .gx-sm-4 {\n    --bs-gutter-x: 1.5rem;\n  }\n  .g-sm-4,\n  .gy-sm-4 {\n    --bs-gutter-y: 1.5rem;\n  }\n  .g-sm-5,\n  .gx-sm-5 {\n    --bs-gutter-x: 3rem;\n  }\n  .g-sm-5,\n  .gy-sm-5 {\n    --bs-gutter-y: 3rem;\n  }\n}\n@media (min-width: 768px) {\n  .col-md {\n    flex: 1 0 0%;\n  }\n  .row-cols-md-auto > * {\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .row-cols-md-1 > * {\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .row-cols-md-2 > * {\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .row-cols-md-3 > * {\n    flex: 0 0 auto;\n    width: 33.3333333333%;\n  }\n  .row-cols-md-4 > * {\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .row-cols-md-5 > * {\n    flex: 0 0 auto;\n    width: 20%;\n  }\n  .row-cols-md-6 > * {\n    flex: 0 0 auto;\n    width: 16.6666666667%;\n  }\n  .col-md-auto {\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .col-md-1 {\n    flex: 0 0 auto;\n    width: 8.33333333%;\n  }\n  .col-md-2 {\n    flex: 0 0 auto;\n    width: 16.66666667%;\n  }\n  .col-md-3 {\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .col-md-4 {\n    flex: 0 0 auto;\n    width: 33.33333333%;\n  }\n  .col-md-5 {\n    flex: 0 0 auto;\n    width: 41.66666667%;\n  }\n  .col-md-6 {\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .col-md-7 {\n    flex: 0 0 auto;\n    width: 58.33333333%;\n  }\n  .col-md-8 {\n    flex: 0 0 auto;\n    width: 66.66666667%;\n  }\n  .col-md-9 {\n    flex: 0 0 auto;\n    width: 75%;\n  }\n  .col-md-10 {\n    flex: 0 0 auto;\n    width: 83.33333333%;\n  }\n  .col-md-11 {\n    flex: 0 0 auto;\n    width: 91.66666667%;\n  }\n  .col-md-12 {\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .offset-md-0 {\n    margin-left: 0;\n  }\n  .offset-md-1 {\n    margin-left: 8.33333333%;\n  }\n  .offset-md-2 {\n    margin-left: 16.66666667%;\n  }\n  .offset-md-3 {\n    margin-left: 25%;\n  }\n  .offset-md-4 {\n    margin-left: 33.33333333%;\n  }\n  .offset-md-5 {\n    margin-left: 41.66666667%;\n  }\n  .offset-md-6 {\n    margin-left: 50%;\n  }\n  .offset-md-7 {\n    margin-left: 58.33333333%;\n  }\n  .offset-md-8 {\n    margin-left: 66.66666667%;\n  }\n  .offset-md-9 {\n    margin-left: 75%;\n  }\n  .offset-md-10 {\n    margin-left: 83.33333333%;\n  }\n  .offset-md-11 {\n    margin-left: 91.66666667%;\n  }\n  .g-md-0,\n  .gx-md-0 {\n    --bs-gutter-x: 0;\n  }\n  .g-md-0,\n  .gy-md-0 {\n    --bs-gutter-y: 0;\n  }\n  .g-md-1,\n  .gx-md-1 {\n    --bs-gutter-x: 0.25rem;\n  }\n  .g-md-1,\n  .gy-md-1 {\n    --bs-gutter-y: 0.25rem;\n  }\n  .g-md-2,\n  .gx-md-2 {\n    --bs-gutter-x: 0.5rem;\n  }\n  .g-md-2,\n  .gy-md-2 {\n    --bs-gutter-y: 0.5rem;\n  }\n  .g-md-3,\n  .gx-md-3 {\n    --bs-gutter-x: 1rem;\n  }\n  .g-md-3,\n  .gy-md-3 {\n    --bs-gutter-y: 1rem;\n  }\n  .g-md-4,\n  .gx-md-4 {\n    --bs-gutter-x: 1.5rem;\n  }\n  .g-md-4,\n  .gy-md-4 {\n    --bs-gutter-y: 1.5rem;\n  }\n  .g-md-5,\n  .gx-md-5 {\n    --bs-gutter-x: 3rem;\n  }\n  .g-md-5,\n  .gy-md-5 {\n    --bs-gutter-y: 3rem;\n  }\n}\n@media (min-width: 992px) {\n  .col-lg {\n    flex: 1 0 0%;\n  }\n  .row-cols-lg-auto > * {\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .row-cols-lg-1 > * {\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .row-cols-lg-2 > * {\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .row-cols-lg-3 > * {\n    flex: 0 0 auto;\n    width: 33.3333333333%;\n  }\n  .row-cols-lg-4 > * {\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .row-cols-lg-5 > * {\n    flex: 0 0 auto;\n    width: 20%;\n  }\n  .row-cols-lg-6 > * {\n    flex: 0 0 auto;\n    width: 16.6666666667%;\n  }\n  .col-lg-auto {\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .col-lg-1 {\n    flex: 0 0 auto;\n    width: 8.33333333%;\n  }\n  .col-lg-2 {\n    flex: 0 0 auto;\n    width: 16.66666667%;\n  }\n  .col-lg-3 {\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .col-lg-4 {\n    flex: 0 0 auto;\n    width: 33.33333333%;\n  }\n  .col-lg-5 {\n    flex: 0 0 auto;\n    width: 41.66666667%;\n  }\n  .col-lg-6 {\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .col-lg-7 {\n    flex: 0 0 auto;\n    width: 58.33333333%;\n  }\n  .col-lg-8 {\n    flex: 0 0 auto;\n    width: 66.66666667%;\n  }\n  .col-lg-9 {\n    flex: 0 0 auto;\n    width: 75%;\n  }\n  .col-lg-10 {\n    flex: 0 0 auto;\n    width: 83.33333333%;\n  }\n  .col-lg-11 {\n    flex: 0 0 auto;\n    width: 91.66666667%;\n  }\n  .col-lg-12 {\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .offset-lg-0 {\n    margin-left: 0;\n  }\n  .offset-lg-1 {\n    margin-left: 8.33333333%;\n  }\n  .offset-lg-2 {\n    margin-left: 16.66666667%;\n  }\n  .offset-lg-3 {\n    margin-left: 25%;\n  }\n  .offset-lg-4 {\n    margin-left: 33.33333333%;\n  }\n  .offset-lg-5 {\n    margin-left: 41.66666667%;\n  }\n  .offset-lg-6 {\n    margin-left: 50%;\n  }\n  .offset-lg-7 {\n    margin-left: 58.33333333%;\n  }\n  .offset-lg-8 {\n    margin-left: 66.66666667%;\n  }\n  .offset-lg-9 {\n    margin-left: 75%;\n  }\n  .offset-lg-10 {\n    margin-left: 83.33333333%;\n  }\n  .offset-lg-11 {\n    margin-left: 91.66666667%;\n  }\n  .g-lg-0,\n  .gx-lg-0 {\n    --bs-gutter-x: 0;\n  }\n  .g-lg-0,\n  .gy-lg-0 {\n    --bs-gutter-y: 0;\n  }\n  .g-lg-1,\n  .gx-lg-1 {\n    --bs-gutter-x: 0.25rem;\n  }\n  .g-lg-1,\n  .gy-lg-1 {\n    --bs-gutter-y: 0.25rem;\n  }\n  .g-lg-2,\n  .gx-lg-2 {\n    --bs-gutter-x: 0.5rem;\n  }\n  .g-lg-2,\n  .gy-lg-2 {\n    --bs-gutter-y: 0.5rem;\n  }\n  .g-lg-3,\n  .gx-lg-3 {\n    --bs-gutter-x: 1rem;\n  }\n  .g-lg-3,\n  .gy-lg-3 {\n    --bs-gutter-y: 1rem;\n  }\n  .g-lg-4,\n  .gx-lg-4 {\n    --bs-gutter-x: 1.5rem;\n  }\n  .g-lg-4,\n  .gy-lg-4 {\n    --bs-gutter-y: 1.5rem;\n  }\n  .g-lg-5,\n  .gx-lg-5 {\n    --bs-gutter-x: 3rem;\n  }\n  .g-lg-5,\n  .gy-lg-5 {\n    --bs-gutter-y: 3rem;\n  }\n}\n@media (min-width: 1200px) {\n  .col-xl {\n    flex: 1 0 0%;\n  }\n  .row-cols-xl-auto > * {\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .row-cols-xl-1 > * {\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .row-cols-xl-2 > * {\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .row-cols-xl-3 > * {\n    flex: 0 0 auto;\n    width: 33.3333333333%;\n  }\n  .row-cols-xl-4 > * {\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .row-cols-xl-5 > * {\n    flex: 0 0 auto;\n    width: 20%;\n  }\n  .row-cols-xl-6 > * {\n    flex: 0 0 auto;\n    width: 16.6666666667%;\n  }\n  .col-xl-auto {\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .col-xl-1 {\n    flex: 0 0 auto;\n    width: 8.33333333%;\n  }\n  .col-xl-2 {\n    flex: 0 0 auto;\n    width: 16.66666667%;\n  }\n  .col-xl-3 {\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .col-xl-4 {\n    flex: 0 0 auto;\n    width: 33.33333333%;\n  }\n  .col-xl-5 {\n    flex: 0 0 auto;\n    width: 41.66666667%;\n  }\n  .col-xl-6 {\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .col-xl-7 {\n    flex: 0 0 auto;\n    width: 58.33333333%;\n  }\n  .col-xl-8 {\n    flex: 0 0 auto;\n    width: 66.66666667%;\n  }\n  .col-xl-9 {\n    flex: 0 0 auto;\n    width: 75%;\n  }\n  .col-xl-10 {\n    flex: 0 0 auto;\n    width: 83.33333333%;\n  }\n  .col-xl-11 {\n    flex: 0 0 auto;\n    width: 91.66666667%;\n  }\n  .col-xl-12 {\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .offset-xl-0 {\n    margin-left: 0;\n  }\n  .offset-xl-1 {\n    margin-left: 8.33333333%;\n  }\n  .offset-xl-2 {\n    margin-left: 16.66666667%;\n  }\n  .offset-xl-3 {\n    margin-left: 25%;\n  }\n  .offset-xl-4 {\n    margin-left: 33.33333333%;\n  }\n  .offset-xl-5 {\n    margin-left: 41.66666667%;\n  }\n  .offset-xl-6 {\n    margin-left: 50%;\n  }\n  .offset-xl-7 {\n    margin-left: 58.33333333%;\n  }\n  .offset-xl-8 {\n    margin-left: 66.66666667%;\n  }\n  .offset-xl-9 {\n    margin-left: 75%;\n  }\n  .offset-xl-10 {\n    margin-left: 83.33333333%;\n  }\n  .offset-xl-11 {\n    margin-left: 91.66666667%;\n  }\n  .g-xl-0,\n  .gx-xl-0 {\n    --bs-gutter-x: 0;\n  }\n  .g-xl-0,\n  .gy-xl-0 {\n    --bs-gutter-y: 0;\n  }\n  .g-xl-1,\n  .gx-xl-1 {\n    --bs-gutter-x: 0.25rem;\n  }\n  .g-xl-1,\n  .gy-xl-1 {\n    --bs-gutter-y: 0.25rem;\n  }\n  .g-xl-2,\n  .gx-xl-2 {\n    --bs-gutter-x: 0.5rem;\n  }\n  .g-xl-2,\n  .gy-xl-2 {\n    --bs-gutter-y: 0.5rem;\n  }\n  .g-xl-3,\n  .gx-xl-3 {\n    --bs-gutter-x: 1rem;\n  }\n  .g-xl-3,\n  .gy-xl-3 {\n    --bs-gutter-y: 1rem;\n  }\n  .g-xl-4,\n  .gx-xl-4 {\n    --bs-gutter-x: 1.5rem;\n  }\n  .g-xl-4,\n  .gy-xl-4 {\n    --bs-gutter-y: 1.5rem;\n  }\n  .g-xl-5,\n  .gx-xl-5 {\n    --bs-gutter-x: 3rem;\n  }\n  .g-xl-5,\n  .gy-xl-5 {\n    --bs-gutter-y: 3rem;\n  }\n}\n@media (min-width: 1400px) {\n  .col-xxl {\n    flex: 1 0 0%;\n  }\n  .row-cols-xxl-auto > * {\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .row-cols-xxl-1 > * {\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .row-cols-xxl-2 > * {\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .row-cols-xxl-3 > * {\n    flex: 0 0 auto;\n    width: 33.3333333333%;\n  }\n  .row-cols-xxl-4 > * {\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .row-cols-xxl-5 > * {\n    flex: 0 0 auto;\n    width: 20%;\n  }\n  .row-cols-xxl-6 > * {\n    flex: 0 0 auto;\n    width: 16.6666666667%;\n  }\n  .col-xxl-auto {\n    flex: 0 0 auto;\n    width: auto;\n  }\n  .col-xxl-1 {\n    flex: 0 0 auto;\n    width: 8.33333333%;\n  }\n  .col-xxl-2 {\n    flex: 0 0 auto;\n    width: 16.66666667%;\n  }\n  .col-xxl-3 {\n    flex: 0 0 auto;\n    width: 25%;\n  }\n  .col-xxl-4 {\n    flex: 0 0 auto;\n    width: 33.33333333%;\n  }\n  .col-xxl-5 {\n    flex: 0 0 auto;\n    width: 41.66666667%;\n  }\n  .col-xxl-6 {\n    flex: 0 0 auto;\n    width: 50%;\n  }\n  .col-xxl-7 {\n    flex: 0 0 auto;\n    width: 58.33333333%;\n  }\n  .col-xxl-8 {\n    flex: 0 0 auto;\n    width: 66.66666667%;\n  }\n  .col-xxl-9 {\n    flex: 0 0 auto;\n    width: 75%;\n  }\n  .col-xxl-10 {\n    flex: 0 0 auto;\n    width: 83.33333333%;\n  }\n  .col-xxl-11 {\n    flex: 0 0 auto;\n    width: 91.66666667%;\n  }\n  .col-xxl-12 {\n    flex: 0 0 auto;\n    width: 100%;\n  }\n  .offset-xxl-0 {\n    margin-left: 0;\n  }\n  .offset-xxl-1 {\n    margin-left: 8.33333333%;\n  }\n  .offset-xxl-2 {\n    margin-left: 16.66666667%;\n  }\n  .offset-xxl-3 {\n    margin-left: 25%;\n  }\n  .offset-xxl-4 {\n    margin-left: 33.33333333%;\n  }\n  .offset-xxl-5 {\n    margin-left: 41.66666667%;\n  }\n  .offset-xxl-6 {\n    margin-left: 50%;\n  }\n  .offset-xxl-7 {\n    margin-left: 58.33333333%;\n  }\n  .offset-xxl-8 {\n    margin-left: 66.66666667%;\n  }\n  .offset-xxl-9 {\n    margin-left: 75%;\n  }\n  .offset-xxl-10 {\n    margin-left: 83.33333333%;\n  }\n  .offset-xxl-11 {\n    margin-left: 91.66666667%;\n  }\n  .g-xxl-0,\n  .gx-xxl-0 {\n    --bs-gutter-x: 0;\n  }\n  .g-xxl-0,\n  .gy-xxl-0 {\n    --bs-gutter-y: 0;\n  }\n  .g-xxl-1,\n  .gx-xxl-1 {\n    --bs-gutter-x: 0.25rem;\n  }\n  .g-xxl-1,\n  .gy-xxl-1 {\n    --bs-gutter-y: 0.25rem;\n  }\n  .g-xxl-2,\n  .gx-xxl-2 {\n    --bs-gutter-x: 0.5rem;\n  }\n  .g-xxl-2,\n  .gy-xxl-2 {\n    --bs-gutter-y: 0.5rem;\n  }\n  .g-xxl-3,\n  .gx-xxl-3 {\n    --bs-gutter-x: 1rem;\n  }\n  .g-xxl-3,\n  .gy-xxl-3 {\n    --bs-gutter-y: 1rem;\n  }\n  .g-xxl-4,\n  .gx-xxl-4 {\n    --bs-gutter-x: 1.5rem;\n  }\n  .g-xxl-4,\n  .gy-xxl-4 {\n    --bs-gutter-y: 1.5rem;\n  }\n  .g-xxl-5,\n  .gx-xxl-5 {\n    --bs-gutter-x: 3rem;\n  }\n  .g-xxl-5,\n  .gy-xxl-5 {\n    --bs-gutter-y: 3rem;\n  }\n}\n.table {\n  --bs-table-bg: transparent;\n  --bs-table-accent-bg: transparent;\n  --bs-table-striped-color: #212529;\n  --bs-table-striped-bg: rgba(0, 0, 0, 0.05);\n  --bs-table-active-color: #212529;\n  --bs-table-active-bg: rgba(0, 0, 0, 0.1);\n  --bs-table-hover-color: #212529;\n  --bs-table-hover-bg: rgba(0, 0, 0, 0.075);\n  width: 100%;\n  margin-bottom: 1rem;\n  color: #212529;\n  vertical-align: top;\n  border-color: #dee2e6;\n}\n.table > :not(caption) > * > * {\n  padding: 0.5rem 0.5rem;\n  background-color: var(--bs-table-bg);\n  border-bottom-width: 1px;\n  box-shadow: inset 0 0 0 9999px var(--bs-table-accent-bg);\n}\n.table > tbody {\n  vertical-align: inherit;\n}\n.table > thead {\n  vertical-align: bottom;\n}\n.table > :not(:first-child) {\n  border-top: 2px solid currentColor;\n}\n\n.caption-top {\n  caption-side: top;\n}\n\n.table-sm > :not(caption) > * > * {\n  padding: 0.25rem 0.25rem;\n}\n\n.table-bordered > :not(caption) > * {\n  border-width: 1px 0;\n}\n.table-bordered > :not(caption) > * > * {\n  border-width: 0 1px;\n}\n\n.table-borderless > :not(caption) > * > * {\n  border-bottom-width: 0;\n}\n.table-borderless > :not(:first-child) {\n  border-top-width: 0;\n}\n\n.table-striped > tbody > tr:nth-of-type(odd) > * {\n  --bs-table-accent-bg: var(--bs-table-striped-bg);\n  color: var(--bs-table-striped-color);\n}\n\n.table-active {\n  --bs-table-accent-bg: var(--bs-table-active-bg);\n  color: var(--bs-table-active-color);\n}\n\n.table-hover > tbody > tr:hover > * {\n  --bs-table-accent-bg: var(--bs-table-hover-bg);\n  color: var(--bs-table-hover-color);\n}\n\n.table-primary {\n  --bs-table-bg: #cdd7e8;\n  --bs-table-striped-bg: #c3ccdc;\n  --bs-table-striped-color: #000;\n  --bs-table-active-bg: #b9c2d1;\n  --bs-table-active-color: #000;\n  --bs-table-hover-bg: #bec7d7;\n  --bs-table-hover-color: #000;\n  color: #000;\n  border-color: #b9c2d1;\n}\n\n.table-secondary {\n  --bs-table-bg: #e2e3e5;\n  --bs-table-striped-bg: #d7d8da;\n  --bs-table-striped-color: #000;\n  --bs-table-active-bg: #cbccce;\n  --bs-table-active-color: #000;\n  --bs-table-hover-bg: #d1d2d4;\n  --bs-table-hover-color: #000;\n  color: #000;\n  border-color: #cbccce;\n}\n\n.table-success {\n  --bs-table-bg: #d4edda;\n  --bs-table-striped-bg: #c9e1cf;\n  --bs-table-striped-color: #000;\n  --bs-table-active-bg: #bfd5c4;\n  --bs-table-active-color: #000;\n  --bs-table-hover-bg: #c4dbca;\n  --bs-table-hover-color: #000;\n  color: #000;\n  border-color: #bfd5c4;\n}\n\n.table-info {\n  --bs-table-bg: #d1ecf1;\n  --bs-table-striped-bg: #c7e0e5;\n  --bs-table-striped-color: #000;\n  --bs-table-active-bg: #bcd4d9;\n  --bs-table-active-color: #000;\n  --bs-table-hover-bg: #c1dadf;\n  --bs-table-hover-color: #000;\n  color: #000;\n  border-color: #bcd4d9;\n}\n\n.table-warning {\n  --bs-table-bg: #fff3cd;\n  --bs-table-striped-bg: #f2e7c3;\n  --bs-table-striped-color: #000;\n  --bs-table-active-bg: #e6dbb9;\n  --bs-table-active-color: #000;\n  --bs-table-hover-bg: #ece1be;\n  --bs-table-hover-color: #000;\n  color: #000;\n  border-color: #e6dbb9;\n}\n\n.table-danger {\n  --bs-table-bg: #f8d7da;\n  --bs-table-striped-bg: #eccccf;\n  --bs-table-striped-color: #000;\n  --bs-table-active-bg: #dfc2c4;\n  --bs-table-active-color: #000;\n  --bs-table-hover-bg: #e5c7ca;\n  --bs-table-hover-color: #000;\n  color: #000;\n  border-color: #dfc2c4;\n}\n\n.table-light {\n  --bs-table-bg: #f8f9fa;\n  --bs-table-striped-bg: #ecedee;\n  --bs-table-striped-color: #000;\n  --bs-table-active-bg: #dfe0e1;\n  --bs-table-active-color: #000;\n  --bs-table-hover-bg: #e5e6e7;\n  --bs-table-hover-color: #000;\n  color: #000;\n  border-color: #dfe0e1;\n}\n\n.table-dark {\n  --bs-table-bg: #03378d;\n  --bs-table-striped-bg: #104193;\n  --bs-table-striped-color: #fff;\n  --bs-table-active-bg: #1c4b98;\n  --bs-table-active-color: #fff;\n  --bs-table-hover-bg: #164696;\n  --bs-table-hover-color: #fff;\n  color: #fff;\n  border-color: #1c4b98;\n}\n\n.table-responsive {\n  overflow-x: auto;\n  -webkit-overflow-scrolling: touch;\n}\n\n@media (max-width: 575.98px) {\n  .table-responsive-sm {\n    overflow-x: auto;\n    -webkit-overflow-scrolling: touch;\n  }\n}\n@media (max-width: 767.98px) {\n  .table-responsive-md {\n    overflow-x: auto;\n    -webkit-overflow-scrolling: touch;\n  }\n}\n@media (max-width: 991.98px) {\n  .table-responsive-lg {\n    overflow-x: auto;\n    -webkit-overflow-scrolling: touch;\n  }\n}\n@media (max-width: 1199.98px) {\n  .table-responsive-xl {\n    overflow-x: auto;\n    -webkit-overflow-scrolling: touch;\n  }\n}\n@media (max-width: 1399.98px) {\n  .table-responsive-xxl {\n    overflow-x: auto;\n    -webkit-overflow-scrolling: touch;\n  }\n}\n.form-label {\n  margin-bottom: 0.5rem;\n}\n\n.col-form-label {\n  padding-top: calc(0.375rem + 1px);\n  padding-bottom: calc(0.375rem + 1px);\n  margin-bottom: 0;\n  font-size: inherit;\n  line-height: 1.5;\n}\n\n.col-form-label-lg {\n  padding-top: calc(0.5rem + 1px);\n  padding-bottom: calc(0.5rem + 1px);\n  font-size: 1.25rem;\n}\n\n.col-form-label-sm {\n  padding-top: calc(0.25rem + 1px);\n  padding-bottom: calc(0.25rem + 1px);\n  font-size: 0.875rem;\n}\n\n.form-text {\n  margin-top: 0.25rem;\n  font-size: 0.875em;\n  color: #6c757d;\n}\n\n.form-control {\n  display: block;\n  width: 100%;\n  padding: 0.375rem 0.75rem;\n  font-size: 1rem;\n  font-weight: 400;\n  line-height: 1.5;\n  color: #212529;\n  background-color: #fff;\n  background-clip: padding-box;\n  border: 1px solid #ced4da;\n  appearance: none;\n  border-radius: 0.25rem;\n  transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n  .form-control {\n    transition: none;\n  }\n}\n.form-control[type=file] {\n  overflow: hidden;\n}\n.form-control[type=file]:not(:disabled):not([readonly]) {\n  cursor: pointer;\n}\n.form-control:focus {\n  color: #212529;\n  background-color: #fff;\n  border-color: #819bc6;\n  outline: 0;\n  box-shadow: 0 0 0 0.25rem rgba(3, 55, 141, 0.25);\n}\n.form-control::-webkit-date-and-time-value {\n  height: 1.5em;\n}\n.form-control::placeholder {\n  color: #6c757d;\n  opacity: 1;\n}\n.form-control:disabled, .form-control[readonly] {\n  background-color: #e9ecef;\n  opacity: 1;\n}\n.form-control::file-selector-button {\n  padding: 0.375rem 0.75rem;\n  margin: -0.375rem -0.75rem;\n  margin-inline-end: 0.75rem;\n  color: #212529;\n  background-color: #e9ecef;\n  pointer-events: none;\n  border-color: inherit;\n  border-style: solid;\n  border-width: 0;\n  border-inline-end-width: 1px;\n  border-radius: 0;\n  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n  .form-control::file-selector-button {\n    transition: none;\n  }\n}\n.form-control:hover:not(:disabled):not([readonly])::file-selector-button {\n  background-color: #dde0e3;\n}\n.form-control::-webkit-file-upload-button {\n  padding: 0.375rem 0.75rem;\n  margin: -0.375rem -0.75rem;\n  margin-inline-end: 0.75rem;\n  color: #212529;\n  background-color: #e9ecef;\n  pointer-events: none;\n  border-color: inherit;\n  border-style: solid;\n  border-width: 0;\n  border-inline-end-width: 1px;\n  border-radius: 0;\n  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n  .form-control::-webkit-file-upload-button {\n    transition: none;\n  }\n}\n.form-control:hover:not(:disabled):not([readonly])::-webkit-file-upload-button {\n  background-color: #dde0e3;\n}\n\n.form-control-plaintext {\n  display: block;\n  width: 100%;\n  padding: 0.375rem 0;\n  margin-bottom: 0;\n  line-height: 1.5;\n  color: #212529;\n  background-color: transparent;\n  border: solid transparent;\n  border-width: 1px 0;\n}\n.form-control-plaintext.form-control-sm, .form-control-plaintext.form-control-lg {\n  padding-right: 0;\n  padding-left: 0;\n}\n\n.form-control-sm {\n  min-height: calc(1.5em + 0.5rem + 2px);\n  padding: 0.25rem 0.5rem;\n  font-size: 0.875rem;\n  border-radius: 0.2rem;\n}\n.form-control-sm::file-selector-button {\n  padding: 0.25rem 0.5rem;\n  margin: -0.25rem -0.5rem;\n  margin-inline-end: 0.5rem;\n}\n.form-control-sm::-webkit-file-upload-button {\n  padding: 0.25rem 0.5rem;\n  margin: -0.25rem -0.5rem;\n  margin-inline-end: 0.5rem;\n}\n\n.form-control-lg {\n  min-height: calc(1.5em + 1rem + 2px);\n  padding: 0.5rem 1rem;\n  font-size: 1.25rem;\n  border-radius: 0.3rem;\n}\n.form-control-lg::file-selector-button {\n  padding: 0.5rem 1rem;\n  margin: -0.5rem -1rem;\n  margin-inline-end: 1rem;\n}\n.form-control-lg::-webkit-file-upload-button {\n  padding: 0.5rem 1rem;\n  margin: -0.5rem -1rem;\n  margin-inline-end: 1rem;\n}\n\ntextarea.form-control {\n  min-height: calc(1.5em + 0.75rem + 2px);\n}\ntextarea.form-control-sm {\n  min-height: calc(1.5em + 0.5rem + 2px);\n}\ntextarea.form-control-lg {\n  min-height: calc(1.5em + 1rem + 2px);\n}\n\n.form-control-color {\n  width: 3rem;\n  height: auto;\n  padding: 0.375rem;\n}\n.form-control-color:not(:disabled):not([readonly]) {\n  cursor: pointer;\n}\n.form-control-color::-moz-color-swatch {\n  height: 1.5em;\n  border-radius: 0.25rem;\n}\n.form-control-color::-webkit-color-swatch {\n  height: 1.5em;\n  border-radius: 0.25rem;\n}\n\n.form-select {\n  display: block;\n  width: 100%;\n  padding: 0.375rem 2.25rem 0.375rem 0.75rem;\n  -moz-padding-start: calc(0.75rem - 3px);\n  font-size: 1rem;\n  font-weight: 400;\n  line-height: 1.5;\n  color: #212529;\n  background-color: #fff;\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e\");\n  background-repeat: no-repeat;\n  background-position: right 0.75rem center;\n  background-size: 16px 12px;\n  border: 1px solid #ced4da;\n  border-radius: 0.25rem;\n  transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n  appearance: none;\n}\n@media (prefers-reduced-motion: reduce) {\n  .form-select {\n    transition: none;\n  }\n}\n.form-select:focus {\n  border-color: #819bc6;\n  outline: 0;\n  box-shadow: 0 0 0 0.25rem rgba(3, 55, 141, 0.25);\n}\n.form-select[multiple], .form-select[size]:not([size=\"1\"]) {\n  padding-right: 0.75rem;\n  background-image: none;\n}\n.form-select:disabled {\n  background-color: #e9ecef;\n}\n.form-select:-moz-focusring {\n  color: transparent;\n  text-shadow: 0 0 0 #212529;\n}\n\n.form-select-sm {\n  padding-top: 0.25rem;\n  padding-bottom: 0.25rem;\n  padding-left: 0.5rem;\n  font-size: 0.875rem;\n  border-radius: 0.2rem;\n}\n\n.form-select-lg {\n  padding-top: 0.5rem;\n  padding-bottom: 0.5rem;\n  padding-left: 1rem;\n  font-size: 1.25rem;\n  border-radius: 0.3rem;\n}\n\n.form-check {\n  display: block;\n  min-height: 1.5rem;\n  padding-left: 1.5em;\n  margin-bottom: 0.125rem;\n}\n.form-check .form-check-input {\n  float: left;\n  margin-left: -1.5em;\n}\n\n.form-check-input {\n  width: 1em;\n  height: 1em;\n  margin-top: 0.25em;\n  vertical-align: top;\n  background-color: #fff;\n  background-repeat: no-repeat;\n  background-position: center;\n  background-size: contain;\n  border: 1px solid rgba(0, 0, 0, 0.25);\n  appearance: none;\n  color-adjust: exact;\n}\n.form-check-input[type=checkbox] {\n  border-radius: 0.25em;\n}\n.form-check-input[type=radio] {\n  border-radius: 50%;\n}\n.form-check-input:active {\n  filter: brightness(90%);\n}\n.form-check-input:focus {\n  border-color: #819bc6;\n  outline: 0;\n  box-shadow: 0 0 0 0.25rem rgba(3, 55, 141, 0.25);\n}\n.form-check-input:checked {\n  background-color: #03378d;\n  border-color: #03378d;\n}\n.form-check-input:checked[type=checkbox] {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10l3 3l6-6'/%3e%3c/svg%3e\");\n}\n.form-check-input:checked[type=radio] {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='2' fill='%23fff'/%3e%3c/svg%3e\");\n}\n.form-check-input[type=checkbox]:indeterminate {\n  background-color: #03378d;\n  border-color: #03378d;\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10h8'/%3e%3c/svg%3e\");\n}\n.form-check-input:disabled {\n  pointer-events: none;\n  filter: none;\n  opacity: 0.5;\n}\n.form-check-input[disabled] ~ .form-check-label, .form-check-input:disabled ~ .form-check-label {\n  opacity: 0.5;\n}\n\n.form-switch {\n  padding-left: 2.5em;\n}\n.form-switch .form-check-input {\n  width: 2em;\n  margin-left: -2.5em;\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%280, 0, 0, 0.25%29'/%3e%3c/svg%3e\");\n  background-position: left center;\n  border-radius: 2em;\n  transition: background-position 0.15s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n  .form-switch .form-check-input {\n    transition: none;\n  }\n}\n.form-switch .form-check-input:focus {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23819bc6'/%3e%3c/svg%3e\");\n}\n.form-switch .form-check-input:checked {\n  background-position: right center;\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e\");\n}\n\n.form-check-inline {\n  display: inline-block;\n  margin-right: 1rem;\n}\n\n.btn-check {\n  position: absolute;\n  clip: rect(0, 0, 0, 0);\n  pointer-events: none;\n}\n.btn-check[disabled] + .btn, .btn-check:disabled + .btn {\n  pointer-events: none;\n  filter: none;\n  opacity: 0.65;\n}\n\n.form-range {\n  width: 100%;\n  height: 1.5rem;\n  padding: 0;\n  background-color: transparent;\n  appearance: none;\n}\n.form-range:focus {\n  outline: 0;\n}\n.form-range:focus::-webkit-slider-thumb {\n  box-shadow: 0 0 0 1px #fff, 0 0 0 0.25rem rgba(3, 55, 141, 0.25);\n}\n.form-range:focus::-moz-range-thumb {\n  box-shadow: 0 0 0 1px #fff, 0 0 0 0.25rem rgba(3, 55, 141, 0.25);\n}\n.form-range::-moz-focus-outer {\n  border: 0;\n}\n.form-range::-webkit-slider-thumb {\n  width: 1rem;\n  height: 1rem;\n  margin-top: -0.25rem;\n  background-color: #03378d;\n  border: 0;\n  border-radius: 1rem;\n  transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n  appearance: none;\n}\n@media (prefers-reduced-motion: reduce) {\n  .form-range::-webkit-slider-thumb {\n    transition: none;\n  }\n}\n.form-range::-webkit-slider-thumb:active {\n  background-color: #b3c3dd;\n}\n.form-range::-webkit-slider-runnable-track {\n  width: 100%;\n  height: 0.5rem;\n  color: transparent;\n  cursor: pointer;\n  background-color: #dee2e6;\n  border-color: transparent;\n  border-radius: 1rem;\n}\n.form-range::-moz-range-thumb {\n  width: 1rem;\n  height: 1rem;\n  background-color: #03378d;\n  border: 0;\n  border-radius: 1rem;\n  transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n  appearance: none;\n}\n@media (prefers-reduced-motion: reduce) {\n  .form-range::-moz-range-thumb {\n    transition: none;\n  }\n}\n.form-range::-moz-range-thumb:active {\n  background-color: #b3c3dd;\n}\n.form-range::-moz-range-track {\n  width: 100%;\n  height: 0.5rem;\n  color: transparent;\n  cursor: pointer;\n  background-color: #dee2e6;\n  border-color: transparent;\n  border-radius: 1rem;\n}\n.form-range:disabled {\n  pointer-events: none;\n}\n.form-range:disabled::-webkit-slider-thumb {\n  background-color: #adb5bd;\n}\n.form-range:disabled::-moz-range-thumb {\n  background-color: #adb5bd;\n}\n\n.form-floating {\n  position: relative;\n}\n.form-floating > .form-control,\n.form-floating > .form-select {\n  height: calc(3.5rem + 2px);\n  line-height: 1.25;\n}\n.form-floating > label {\n  position: absolute;\n  top: 0;\n  left: 0;\n  height: 100%;\n  padding: 1rem 0.75rem;\n  pointer-events: none;\n  border: 1px solid transparent;\n  transform-origin: 0 0;\n  transition: opacity 0.1s ease-in-out, transform 0.1s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n  .form-floating > label {\n    transition: none;\n  }\n}\n.form-floating > .form-control {\n  padding: 1rem 0.75rem;\n}\n.form-floating > .form-control::placeholder {\n  color: transparent;\n}\n.form-floating > .form-control:focus, .form-floating > .form-control:not(:placeholder-shown) {\n  padding-top: 1.625rem;\n  padding-bottom: 0.625rem;\n}\n.form-floating > .form-control:-webkit-autofill {\n  padding-top: 1.625rem;\n  padding-bottom: 0.625rem;\n}\n.form-floating > .form-select {\n  padding-top: 1.625rem;\n  padding-bottom: 0.625rem;\n}\n.form-floating > .form-control:focus ~ label,\n.form-floating > .form-control:not(:placeholder-shown) ~ label,\n.form-floating > .form-select ~ label {\n  opacity: 0.65;\n  transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);\n}\n.form-floating > .form-control:-webkit-autofill ~ label {\n  opacity: 0.65;\n  transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);\n}\n\n.input-group {\n  position: relative;\n  display: flex;\n  flex-wrap: wrap;\n  align-items: stretch;\n  width: 100%;\n}\n.input-group > .form-control,\n.input-group > .form-select {\n  position: relative;\n  flex: 1 1 auto;\n  width: 1%;\n  min-width: 0;\n}\n.input-group > .form-control:focus,\n.input-group > .form-select:focus {\n  z-index: 3;\n}\n.input-group .btn {\n  position: relative;\n  z-index: 2;\n}\n.input-group .btn:focus {\n  z-index: 3;\n}\n\n.input-group-text {\n  display: flex;\n  align-items: center;\n  padding: 0.375rem 0.75rem;\n  font-size: 1rem;\n  font-weight: 400;\n  line-height: 1.5;\n  color: #212529;\n  text-align: center;\n  white-space: nowrap;\n  background-color: #e9ecef;\n  border: 1px solid #ced4da;\n  border-radius: 0.25rem;\n}\n\n.input-group-lg > .form-control,\n.input-group-lg > .form-select,\n.input-group-lg > .input-group-text,\n.input-group-lg > .btn {\n  padding: 0.5rem 1rem;\n  font-size: 1.25rem;\n  border-radius: 0.3rem;\n}\n\n.input-group-sm > .form-control,\n.input-group-sm > .form-select,\n.input-group-sm > .input-group-text,\n.input-group-sm > .btn {\n  padding: 0.25rem 0.5rem;\n  font-size: 0.875rem;\n  border-radius: 0.2rem;\n}\n\n.input-group-lg > .form-select,\n.input-group-sm > .form-select {\n  padding-right: 3rem;\n}\n\n.input-group:not(.has-validation) > :not(:last-child):not(.dropdown-toggle):not(.dropdown-menu),\n.input-group:not(.has-validation) > .dropdown-toggle:nth-last-child(n+3) {\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n}\n.input-group.has-validation > :nth-last-child(n+3):not(.dropdown-toggle):not(.dropdown-menu),\n.input-group.has-validation > .dropdown-toggle:nth-last-child(n+4) {\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n}\n.input-group > :not(:first-child):not(.dropdown-menu):not(.valid-tooltip):not(.valid-feedback):not(.invalid-tooltip):not(.invalid-feedback) {\n  margin-left: -1px;\n  border-top-left-radius: 0;\n  border-bottom-left-radius: 0;\n}\n\n.valid-feedback {\n  display: none;\n  width: 100%;\n  margin-top: 0.25rem;\n  font-size: 0.875em;\n  color: #28a745;\n}\n\n.valid-tooltip {\n  position: absolute;\n  top: 100%;\n  z-index: 5;\n  display: none;\n  max-width: 100%;\n  padding: 0.25rem 0.5rem;\n  margin-top: 0.1rem;\n  font-size: 0.875rem;\n  color: #000;\n  background-color: rgba(40, 167, 69, 0.9);\n  border-radius: 0.25rem;\n}\n\n.was-validated :valid ~ .valid-feedback,\n.was-validated :valid ~ .valid-tooltip,\n.is-valid ~ .valid-feedback,\n.is-valid ~ .valid-tooltip {\n  display: block;\n}\n\n.was-validated .form-control:valid, .form-control.is-valid {\n  border-color: #28a745;\n  padding-right: calc(1.5em + 0.75rem);\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%2328a745' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e\");\n  background-repeat: no-repeat;\n  background-position: right calc(0.375em + 0.1875rem) center;\n  background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n.was-validated .form-control:valid:focus, .form-control.is-valid:focus {\n  border-color: #28a745;\n  box-shadow: 0 0 0 0.25rem rgba(40, 167, 69, 0.25);\n}\n\n.was-validated textarea.form-control:valid, textarea.form-control.is-valid {\n  padding-right: calc(1.5em + 0.75rem);\n  background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem);\n}\n\n.was-validated .form-select:valid, .form-select.is-valid {\n  border-color: #28a745;\n}\n.was-validated .form-select:valid:not([multiple]):not([size]), .was-validated .form-select:valid:not([multiple])[size=\"1\"], .form-select.is-valid:not([multiple]):not([size]), .form-select.is-valid:not([multiple])[size=\"1\"] {\n  padding-right: 4.125rem;\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e\"), url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%2328a745' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e\");\n  background-position: right 0.75rem center, center right 2.25rem;\n  background-size: 16px 12px, calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n.was-validated .form-select:valid:focus, .form-select.is-valid:focus {\n  border-color: #28a745;\n  box-shadow: 0 0 0 0.25rem rgba(40, 167, 69, 0.25);\n}\n\n.was-validated .form-check-input:valid, .form-check-input.is-valid {\n  border-color: #28a745;\n}\n.was-validated .form-check-input:valid:checked, .form-check-input.is-valid:checked {\n  background-color: #28a745;\n}\n.was-validated .form-check-input:valid:focus, .form-check-input.is-valid:focus {\n  box-shadow: 0 0 0 0.25rem rgba(40, 167, 69, 0.25);\n}\n.was-validated .form-check-input:valid ~ .form-check-label, .form-check-input.is-valid ~ .form-check-label {\n  color: #28a745;\n}\n\n.form-check-inline .form-check-input ~ .valid-feedback {\n  margin-left: 0.5em;\n}\n\n.was-validated .input-group .form-control:valid, .input-group .form-control.is-valid,\n.was-validated .input-group .form-select:valid,\n.input-group .form-select.is-valid {\n  z-index: 1;\n}\n.was-validated .input-group .form-control:valid:focus, .input-group .form-control.is-valid:focus,\n.was-validated .input-group .form-select:valid:focus,\n.input-group .form-select.is-valid:focus {\n  z-index: 3;\n}\n\n.invalid-feedback {\n  display: none;\n  width: 100%;\n  margin-top: 0.25rem;\n  font-size: 0.875em;\n  color: #dc3545;\n}\n\n.invalid-tooltip {\n  position: absolute;\n  top: 100%;\n  z-index: 5;\n  display: none;\n  max-width: 100%;\n  padding: 0.25rem 0.5rem;\n  margin-top: 0.1rem;\n  font-size: 0.875rem;\n  color: #fff;\n  background-color: rgba(220, 53, 69, 0.9);\n  border-radius: 0.25rem;\n}\n\n.was-validated :invalid ~ .invalid-feedback,\n.was-validated :invalid ~ .invalid-tooltip,\n.is-invalid ~ .invalid-feedback,\n.is-invalid ~ .invalid-tooltip {\n  display: block;\n}\n\n.was-validated .form-control:invalid, .form-control.is-invalid {\n  border-color: #dc3545;\n  padding-right: calc(1.5em + 0.75rem);\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e\");\n  background-repeat: no-repeat;\n  background-position: right calc(0.375em + 0.1875rem) center;\n  background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n.was-validated .form-control:invalid:focus, .form-control.is-invalid:focus {\n  border-color: #dc3545;\n  box-shadow: 0 0 0 0.25rem rgba(220, 53, 69, 0.25);\n}\n\n.was-validated textarea.form-control:invalid, textarea.form-control.is-invalid {\n  padding-right: calc(1.5em + 0.75rem);\n  background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem);\n}\n\n.was-validated .form-select:invalid, .form-select.is-invalid {\n  border-color: #dc3545;\n}\n.was-validated .form-select:invalid:not([multiple]):not([size]), .was-validated .form-select:invalid:not([multiple])[size=\"1\"], .form-select.is-invalid:not([multiple]):not([size]), .form-select.is-invalid:not([multiple])[size=\"1\"] {\n  padding-right: 4.125rem;\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e\"), url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e\");\n  background-position: right 0.75rem center, center right 2.25rem;\n  background-size: 16px 12px, calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n.was-validated .form-select:invalid:focus, .form-select.is-invalid:focus {\n  border-color: #dc3545;\n  box-shadow: 0 0 0 0.25rem rgba(220, 53, 69, 0.25);\n}\n\n.was-validated .form-check-input:invalid, .form-check-input.is-invalid {\n  border-color: #dc3545;\n}\n.was-validated .form-check-input:invalid:checked, .form-check-input.is-invalid:checked {\n  background-color: #dc3545;\n}\n.was-validated .form-check-input:invalid:focus, .form-check-input.is-invalid:focus {\n  box-shadow: 0 0 0 0.25rem rgba(220, 53, 69, 0.25);\n}\n.was-validated .form-check-input:invalid ~ .form-check-label, .form-check-input.is-invalid ~ .form-check-label {\n  color: #dc3545;\n}\n\n.form-check-inline .form-check-input ~ .invalid-feedback {\n  margin-left: 0.5em;\n}\n\n.was-validated .input-group .form-control:invalid, .input-group .form-control.is-invalid,\n.was-validated .input-group .form-select:invalid,\n.input-group .form-select.is-invalid {\n  z-index: 2;\n}\n.was-validated .input-group .form-control:invalid:focus, .input-group .form-control.is-invalid:focus,\n.was-validated .input-group .form-select:invalid:focus,\n.input-group .form-select.is-invalid:focus {\n  z-index: 3;\n}\n\n.btn {\n  display: inline-block;\n  font-weight: 400;\n  line-height: 1.5;\n  color: #212529;\n  text-align: center;\n  text-decoration: none;\n  vertical-align: middle;\n  cursor: pointer;\n  user-select: none;\n  background-color: transparent;\n  border: 1px solid transparent;\n  padding: 0.375rem 0.75rem;\n  font-size: 1rem;\n  border-radius: 0.25rem;\n  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n  .btn {\n    transition: none;\n  }\n}\n.btn:hover {\n  color: #212529;\n}\n.btn-check:focus + .btn, .btn:focus {\n  outline: 0;\n  box-shadow: 0 0 0 0.25rem rgba(3, 55, 141, 0.25);\n}\n.btn:disabled, .btn.disabled, fieldset:disabled .btn {\n  pointer-events: none;\n  opacity: 0.65;\n}\n\n.btn-primary {\n  color: #fff;\n  background-color: #03378d;\n  border-color: #03378d;\n}\n.btn-primary:hover {\n  color: #fff;\n  background-color: #032f78;\n  border-color: #022c71;\n}\n.btn-check:focus + .btn-primary, .btn-primary:focus {\n  color: #fff;\n  background-color: #032f78;\n  border-color: #022c71;\n  box-shadow: 0 0 0 0.25rem rgba(41, 85, 158, 0.5);\n}\n.btn-check:checked + .btn-primary, .btn-check:active + .btn-primary, .btn-primary:active, .btn-primary.active, .show > .btn-primary.dropdown-toggle {\n  color: #fff;\n  background-color: #022c71;\n  border-color: #02296a;\n}\n.btn-check:checked + .btn-primary:focus, .btn-check:active + .btn-primary:focus, .btn-primary:active:focus, .btn-primary.active:focus, .show > .btn-primary.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.25rem rgba(41, 85, 158, 0.5);\n}\n.btn-primary:disabled, .btn-primary.disabled {\n  color: #fff;\n  background-color: #03378d;\n  border-color: #03378d;\n}\n\n.btn-secondary {\n  color: #fff;\n  background-color: #6c757d;\n  border-color: #6c757d;\n}\n.btn-secondary:hover {\n  color: #fff;\n  background-color: #5c636a;\n  border-color: #565e64;\n}\n.btn-check:focus + .btn-secondary, .btn-secondary:focus {\n  color: #fff;\n  background-color: #5c636a;\n  border-color: #565e64;\n  box-shadow: 0 0 0 0.25rem rgba(130, 138, 145, 0.5);\n}\n.btn-check:checked + .btn-secondary, .btn-check:active + .btn-secondary, .btn-secondary:active, .btn-secondary.active, .show > .btn-secondary.dropdown-toggle {\n  color: #fff;\n  background-color: #565e64;\n  border-color: #51585e;\n}\n.btn-check:checked + .btn-secondary:focus, .btn-check:active + .btn-secondary:focus, .btn-secondary:active:focus, .btn-secondary.active:focus, .show > .btn-secondary.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.25rem rgba(130, 138, 145, 0.5);\n}\n.btn-secondary:disabled, .btn-secondary.disabled {\n  color: #fff;\n  background-color: #6c757d;\n  border-color: #6c757d;\n}\n\n.btn-success {\n  color: #000;\n  background-color: #28a745;\n  border-color: #28a745;\n}\n.btn-success:hover {\n  color: #000;\n  background-color: #48b461;\n  border-color: #3eb058;\n}\n.btn-check:focus + .btn-success, .btn-success:focus {\n  color: #000;\n  background-color: #48b461;\n  border-color: #3eb058;\n  box-shadow: 0 0 0 0.25rem rgba(34, 142, 59, 0.5);\n}\n.btn-check:checked + .btn-success, .btn-check:active + .btn-success, .btn-success:active, .btn-success.active, .show > .btn-success.dropdown-toggle {\n  color: #000;\n  background-color: #53b96a;\n  border-color: #3eb058;\n}\n.btn-check:checked + .btn-success:focus, .btn-check:active + .btn-success:focus, .btn-success:active:focus, .btn-success.active:focus, .show > .btn-success.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.25rem rgba(34, 142, 59, 0.5);\n}\n.btn-success:disabled, .btn-success.disabled {\n  color: #000;\n  background-color: #28a745;\n  border-color: #28a745;\n}\n\n.btn-info {\n  color: #000;\n  background-color: #17a2b8;\n  border-color: #17a2b8;\n}\n.btn-info:hover {\n  color: #000;\n  background-color: #3ab0c3;\n  border-color: #2eabbf;\n}\n.btn-check:focus + .btn-info, .btn-info:focus {\n  color: #000;\n  background-color: #3ab0c3;\n  border-color: #2eabbf;\n  box-shadow: 0 0 0 0.25rem rgba(20, 138, 156, 0.5);\n}\n.btn-check:checked + .btn-info, .btn-check:active + .btn-info, .btn-info:active, .btn-info.active, .show > .btn-info.dropdown-toggle {\n  color: #000;\n  background-color: #45b5c6;\n  border-color: #2eabbf;\n}\n.btn-check:checked + .btn-info:focus, .btn-check:active + .btn-info:focus, .btn-info:active:focus, .btn-info.active:focus, .show > .btn-info.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.25rem rgba(20, 138, 156, 0.5);\n}\n.btn-info:disabled, .btn-info.disabled {\n  color: #000;\n  background-color: #17a2b8;\n  border-color: #17a2b8;\n}\n\n.btn-warning {\n  color: #000;\n  background-color: #ffc107;\n  border-color: #ffc107;\n}\n.btn-warning:hover {\n  color: #000;\n  background-color: #ffca2c;\n  border-color: #ffc720;\n}\n.btn-check:focus + .btn-warning, .btn-warning:focus {\n  color: #000;\n  background-color: #ffca2c;\n  border-color: #ffc720;\n  box-shadow: 0 0 0 0.25rem rgba(217, 164, 6, 0.5);\n}\n.btn-check:checked + .btn-warning, .btn-check:active + .btn-warning, .btn-warning:active, .btn-warning.active, .show > .btn-warning.dropdown-toggle {\n  color: #000;\n  background-color: #ffcd39;\n  border-color: #ffc720;\n}\n.btn-check:checked + .btn-warning:focus, .btn-check:active + .btn-warning:focus, .btn-warning:active:focus, .btn-warning.active:focus, .show > .btn-warning.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.25rem rgba(217, 164, 6, 0.5);\n}\n.btn-warning:disabled, .btn-warning.disabled {\n  color: #000;\n  background-color: #ffc107;\n  border-color: #ffc107;\n}\n\n.btn-danger {\n  color: #fff;\n  background-color: #dc3545;\n  border-color: #dc3545;\n}\n.btn-danger:hover {\n  color: #fff;\n  background-color: #bb2d3b;\n  border-color: #b02a37;\n}\n.btn-check:focus + .btn-danger, .btn-danger:focus {\n  color: #fff;\n  background-color: #bb2d3b;\n  border-color: #b02a37;\n  box-shadow: 0 0 0 0.25rem rgba(225, 83, 97, 0.5);\n}\n.btn-check:checked + .btn-danger, .btn-check:active + .btn-danger, .btn-danger:active, .btn-danger.active, .show > .btn-danger.dropdown-toggle {\n  color: #fff;\n  background-color: #b02a37;\n  border-color: #a52834;\n}\n.btn-check:checked + .btn-danger:focus, .btn-check:active + .btn-danger:focus, .btn-danger:active:focus, .btn-danger.active:focus, .show > .btn-danger.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.25rem rgba(225, 83, 97, 0.5);\n}\n.btn-danger:disabled, .btn-danger.disabled {\n  color: #fff;\n  background-color: #dc3545;\n  border-color: #dc3545;\n}\n\n.btn-light {\n  color: #000;\n  background-color: #f8f9fa;\n  border-color: #f8f9fa;\n}\n.btn-light:hover {\n  color: #000;\n  background-color: #f9fafb;\n  border-color: #f9fafb;\n}\n.btn-check:focus + .btn-light, .btn-light:focus {\n  color: #000;\n  background-color: #f9fafb;\n  border-color: #f9fafb;\n  box-shadow: 0 0 0 0.25rem rgba(211, 212, 213, 0.5);\n}\n.btn-check:checked + .btn-light, .btn-check:active + .btn-light, .btn-light:active, .btn-light.active, .show > .btn-light.dropdown-toggle {\n  color: #000;\n  background-color: #f9fafb;\n  border-color: #f9fafb;\n}\n.btn-check:checked + .btn-light:focus, .btn-check:active + .btn-light:focus, .btn-light:active:focus, .btn-light.active:focus, .show > .btn-light.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.25rem rgba(211, 212, 213, 0.5);\n}\n.btn-light:disabled, .btn-light.disabled {\n  color: #000;\n  background-color: #f8f9fa;\n  border-color: #f8f9fa;\n}\n\n.btn-dark {\n  color: #fff;\n  background-color: #03378d;\n  border-color: #03378d;\n}\n.btn-dark:hover {\n  color: #fff;\n  background-color: #032f78;\n  border-color: #022c71;\n}\n.btn-check:focus + .btn-dark, .btn-dark:focus {\n  color: #fff;\n  background-color: #032f78;\n  border-color: #022c71;\n  box-shadow: 0 0 0 0.25rem rgba(41, 85, 158, 0.5);\n}\n.btn-check:checked + .btn-dark, .btn-check:active + .btn-dark, .btn-dark:active, .btn-dark.active, .show > .btn-dark.dropdown-toggle {\n  color: #fff;\n  background-color: #022c71;\n  border-color: #02296a;\n}\n.btn-check:checked + .btn-dark:focus, .btn-check:active + .btn-dark:focus, .btn-dark:active:focus, .btn-dark.active:focus, .show > .btn-dark.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.25rem rgba(41, 85, 158, 0.5);\n}\n.btn-dark:disabled, .btn-dark.disabled {\n  color: #fff;\n  background-color: #03378d;\n  border-color: #03378d;\n}\n\n.btn-outline-primary {\n  color: #03378d;\n  border-color: #03378d;\n}\n.btn-outline-primary:hover {\n  color: #fff;\n  background-color: #03378d;\n  border-color: #03378d;\n}\n.btn-check:focus + .btn-outline-primary, .btn-outline-primary:focus {\n  box-shadow: 0 0 0 0.25rem rgba(3, 55, 141, 0.5);\n}\n.btn-check:checked + .btn-outline-primary, .btn-check:active + .btn-outline-primary, .btn-outline-primary:active, .btn-outline-primary.active, .btn-outline-primary.dropdown-toggle.show {\n  color: #fff;\n  background-color: #03378d;\n  border-color: #03378d;\n}\n.btn-check:checked + .btn-outline-primary:focus, .btn-check:active + .btn-outline-primary:focus, .btn-outline-primary:active:focus, .btn-outline-primary.active:focus, .btn-outline-primary.dropdown-toggle.show:focus {\n  box-shadow: 0 0 0 0.25rem rgba(3, 55, 141, 0.5);\n}\n.btn-outline-primary:disabled, .btn-outline-primary.disabled {\n  color: #03378d;\n  background-color: transparent;\n}\n\n.btn-outline-secondary {\n  color: #6c757d;\n  border-color: #6c757d;\n}\n.btn-outline-secondary:hover {\n  color: #fff;\n  background-color: #6c757d;\n  border-color: #6c757d;\n}\n.btn-check:focus + .btn-outline-secondary, .btn-outline-secondary:focus {\n  box-shadow: 0 0 0 0.25rem rgba(108, 117, 125, 0.5);\n}\n.btn-check:checked + .btn-outline-secondary, .btn-check:active + .btn-outline-secondary, .btn-outline-secondary:active, .btn-outline-secondary.active, .btn-outline-secondary.dropdown-toggle.show {\n  color: #fff;\n  background-color: #6c757d;\n  border-color: #6c757d;\n}\n.btn-check:checked + .btn-outline-secondary:focus, .btn-check:active + .btn-outline-secondary:focus, .btn-outline-secondary:active:focus, .btn-outline-secondary.active:focus, .btn-outline-secondary.dropdown-toggle.show:focus {\n  box-shadow: 0 0 0 0.25rem rgba(108, 117, 125, 0.5);\n}\n.btn-outline-secondary:disabled, .btn-outline-secondary.disabled {\n  color: #6c757d;\n  background-color: transparent;\n}\n\n.btn-outline-success {\n  color: #28a745;\n  border-color: #28a745;\n}\n.btn-outline-success:hover {\n  color: #000;\n  background-color: #28a745;\n  border-color: #28a745;\n}\n.btn-check:focus + .btn-outline-success, .btn-outline-success:focus {\n  box-shadow: 0 0 0 0.25rem rgba(40, 167, 69, 0.5);\n}\n.btn-check:checked + .btn-outline-success, .btn-check:active + .btn-outline-success, .btn-outline-success:active, .btn-outline-success.active, .btn-outline-success.dropdown-toggle.show {\n  color: #000;\n  background-color: #28a745;\n  border-color: #28a745;\n}\n.btn-check:checked + .btn-outline-success:focus, .btn-check:active + .btn-outline-success:focus, .btn-outline-success:active:focus, .btn-outline-success.active:focus, .btn-outline-success.dropdown-toggle.show:focus {\n  box-shadow: 0 0 0 0.25rem rgba(40, 167, 69, 0.5);\n}\n.btn-outline-success:disabled, .btn-outline-success.disabled {\n  color: #28a745;\n  background-color: transparent;\n}\n\n.btn-outline-info {\n  color: #17a2b8;\n  border-color: #17a2b8;\n}\n.btn-outline-info:hover {\n  color: #000;\n  background-color: #17a2b8;\n  border-color: #17a2b8;\n}\n.btn-check:focus + .btn-outline-info, .btn-outline-info:focus {\n  box-shadow: 0 0 0 0.25rem rgba(23, 162, 184, 0.5);\n}\n.btn-check:checked + .btn-outline-info, .btn-check:active + .btn-outline-info, .btn-outline-info:active, .btn-outline-info.active, .btn-outline-info.dropdown-toggle.show {\n  color: #000;\n  background-color: #17a2b8;\n  border-color: #17a2b8;\n}\n.btn-check:checked + .btn-outline-info:focus, .btn-check:active + .btn-outline-info:focus, .btn-outline-info:active:focus, .btn-outline-info.active:focus, .btn-outline-info.dropdown-toggle.show:focus {\n  box-shadow: 0 0 0 0.25rem rgba(23, 162, 184, 0.5);\n}\n.btn-outline-info:disabled, .btn-outline-info.disabled {\n  color: #17a2b8;\n  background-color: transparent;\n}\n\n.btn-outline-warning {\n  color: #ffc107;\n  border-color: #ffc107;\n}\n.btn-outline-warning:hover {\n  color: #000;\n  background-color: #ffc107;\n  border-color: #ffc107;\n}\n.btn-check:focus + .btn-outline-warning, .btn-outline-warning:focus {\n  box-shadow: 0 0 0 0.25rem rgba(255, 193, 7, 0.5);\n}\n.btn-check:checked + .btn-outline-warning, .btn-check:active + .btn-outline-warning, .btn-outline-warning:active, .btn-outline-warning.active, .btn-outline-warning.dropdown-toggle.show {\n  color: #000;\n  background-color: #ffc107;\n  border-color: #ffc107;\n}\n.btn-check:checked + .btn-outline-warning:focus, .btn-check:active + .btn-outline-warning:focus, .btn-outline-warning:active:focus, .btn-outline-warning.active:focus, .btn-outline-warning.dropdown-toggle.show:focus {\n  box-shadow: 0 0 0 0.25rem rgba(255, 193, 7, 0.5);\n}\n.btn-outline-warning:disabled, .btn-outline-warning.disabled {\n  color: #ffc107;\n  background-color: transparent;\n}\n\n.btn-outline-danger {\n  color: #dc3545;\n  border-color: #dc3545;\n}\n.btn-outline-danger:hover {\n  color: #fff;\n  background-color: #dc3545;\n  border-color: #dc3545;\n}\n.btn-check:focus + .btn-outline-danger, .btn-outline-danger:focus {\n  box-shadow: 0 0 0 0.25rem rgba(220, 53, 69, 0.5);\n}\n.btn-check:checked + .btn-outline-danger, .btn-check:active + .btn-outline-danger, .btn-outline-danger:active, .btn-outline-danger.active, .btn-outline-danger.dropdown-toggle.show {\n  color: #fff;\n  background-color: #dc3545;\n  border-color: #dc3545;\n}\n.btn-check:checked + .btn-outline-danger:focus, .btn-check:active + .btn-outline-danger:focus, .btn-outline-danger:active:focus, .btn-outline-danger.active:focus, .btn-outline-danger.dropdown-toggle.show:focus {\n  box-shadow: 0 0 0 0.25rem rgba(220, 53, 69, 0.5);\n}\n.btn-outline-danger:disabled, .btn-outline-danger.disabled {\n  color: #dc3545;\n  background-color: transparent;\n}\n\n.btn-outline-light {\n  color: #f8f9fa;\n  border-color: #f8f9fa;\n}\n.btn-outline-light:hover {\n  color: #000;\n  background-color: #f8f9fa;\n  border-color: #f8f9fa;\n}\n.btn-check:focus + .btn-outline-light, .btn-outline-light:focus {\n  box-shadow: 0 0 0 0.25rem rgba(248, 249, 250, 0.5);\n}\n.btn-check:checked + .btn-outline-light, .btn-check:active + .btn-outline-light, .btn-outline-light:active, .btn-outline-light.active, .btn-outline-light.dropdown-toggle.show {\n  color: #000;\n  background-color: #f8f9fa;\n  border-color: #f8f9fa;\n}\n.btn-check:checked + .btn-outline-light:focus, .btn-check:active + .btn-outline-light:focus, .btn-outline-light:active:focus, .btn-outline-light.active:focus, .btn-outline-light.dropdown-toggle.show:focus {\n  box-shadow: 0 0 0 0.25rem rgba(248, 249, 250, 0.5);\n}\n.btn-outline-light:disabled, .btn-outline-light.disabled {\n  color: #f8f9fa;\n  background-color: transparent;\n}\n\n.btn-outline-dark {\n  color: #03378d;\n  border-color: #03378d;\n}\n.btn-outline-dark:hover {\n  color: #fff;\n  background-color: #03378d;\n  border-color: #03378d;\n}\n.btn-check:focus + .btn-outline-dark, .btn-outline-dark:focus {\n  box-shadow: 0 0 0 0.25rem rgba(3, 55, 141, 0.5);\n}\n.btn-check:checked + .btn-outline-dark, .btn-check:active + .btn-outline-dark, .btn-outline-dark:active, .btn-outline-dark.active, .btn-outline-dark.dropdown-toggle.show {\n  color: #fff;\n  background-color: #03378d;\n  border-color: #03378d;\n}\n.btn-check:checked + .btn-outline-dark:focus, .btn-check:active + .btn-outline-dark:focus, .btn-outline-dark:active:focus, .btn-outline-dark.active:focus, .btn-outline-dark.dropdown-toggle.show:focus {\n  box-shadow: 0 0 0 0.25rem rgba(3, 55, 141, 0.5);\n}\n.btn-outline-dark:disabled, .btn-outline-dark.disabled {\n  color: #03378d;\n  background-color: transparent;\n}\n\n.btn-link {\n  font-weight: 400;\n  color: #03378d;\n  text-decoration: underline;\n}\n.btn-link:hover {\n  color: #022c71;\n}\n.btn-link:disabled, .btn-link.disabled {\n  color: #6c757d;\n}\n\n.btn-lg, .btn-group-lg > .btn {\n  padding: 0.5rem 1rem;\n  font-size: 1.25rem;\n  border-radius: 0.3rem;\n}\n\n.btn-sm, .btn-group-sm > .btn {\n  padding: 0.25rem 0.5rem;\n  font-size: 0.875rem;\n  border-radius: 0.2rem;\n}\n\n.fade {\n  transition: opacity 0.15s linear;\n}\n@media (prefers-reduced-motion: reduce) {\n  .fade {\n    transition: none;\n  }\n}\n.fade:not(.show) {\n  opacity: 0;\n}\n\n.collapse:not(.show) {\n  display: none;\n}\n\n.collapsing {\n  height: 0;\n  overflow: hidden;\n  transition: height 0.35s ease;\n}\n@media (prefers-reduced-motion: reduce) {\n  .collapsing {\n    transition: none;\n  }\n}\n.collapsing.collapse-horizontal {\n  width: 0;\n  height: auto;\n  transition: width 0.35s ease;\n}\n@media (prefers-reduced-motion: reduce) {\n  .collapsing.collapse-horizontal {\n    transition: none;\n  }\n}\n\n.dropup,\n.dropend,\n.dropdown,\n.dropstart {\n  position: relative;\n}\n\n.dropdown-toggle {\n  white-space: nowrap;\n}\n.dropdown-toggle::after {\n  display: inline-block;\n  margin-left: 0.255em;\n  vertical-align: 0.255em;\n  content: \"\";\n  border-top: 0.3em solid;\n  border-right: 0.3em solid transparent;\n  border-bottom: 0;\n  border-left: 0.3em solid transparent;\n}\n.dropdown-toggle:empty::after {\n  margin-left: 0;\n}\n\n.dropdown-menu {\n  position: absolute;\n  z-index: 1000;\n  display: none;\n  min-width: 10rem;\n  padding: 0.5rem 0;\n  margin: 0;\n  font-size: 1rem;\n  color: #212529;\n  text-align: left;\n  list-style: none;\n  background-color: #fff;\n  background-clip: padding-box;\n  border: 1px solid rgba(0, 0, 0, 0.15);\n  border-radius: 0.25rem;\n}\n.dropdown-menu[data-bs-popper] {\n  top: 100%;\n  left: 0;\n  margin-top: 0.125rem;\n}\n\n.dropdown-menu-start {\n  --bs-position: start;\n}\n.dropdown-menu-start[data-bs-popper] {\n  right: auto;\n  left: 0;\n}\n\n.dropdown-menu-end {\n  --bs-position: end;\n}\n.dropdown-menu-end[data-bs-popper] {\n  right: 0;\n  left: auto;\n}\n\n@media (min-width: 576px) {\n  .dropdown-menu-sm-start {\n    --bs-position: start;\n  }\n  .dropdown-menu-sm-start[data-bs-popper] {\n    right: auto;\n    left: 0;\n  }\n  .dropdown-menu-sm-end {\n    --bs-position: end;\n  }\n  .dropdown-menu-sm-end[data-bs-popper] {\n    right: 0;\n    left: auto;\n  }\n}\n@media (min-width: 768px) {\n  .dropdown-menu-md-start {\n    --bs-position: start;\n  }\n  .dropdown-menu-md-start[data-bs-popper] {\n    right: auto;\n    left: 0;\n  }\n  .dropdown-menu-md-end {\n    --bs-position: end;\n  }\n  .dropdown-menu-md-end[data-bs-popper] {\n    right: 0;\n    left: auto;\n  }\n}\n@media (min-width: 992px) {\n  .dropdown-menu-lg-start {\n    --bs-position: start;\n  }\n  .dropdown-menu-lg-start[data-bs-popper] {\n    right: auto;\n    left: 0;\n  }\n  .dropdown-menu-lg-end {\n    --bs-position: end;\n  }\n  .dropdown-menu-lg-end[data-bs-popper] {\n    right: 0;\n    left: auto;\n  }\n}\n@media (min-width: 1200px) {\n  .dropdown-menu-xl-start {\n    --bs-position: start;\n  }\n  .dropdown-menu-xl-start[data-bs-popper] {\n    right: auto;\n    left: 0;\n  }\n  .dropdown-menu-xl-end {\n    --bs-position: end;\n  }\n  .dropdown-menu-xl-end[data-bs-popper] {\n    right: 0;\n    left: auto;\n  }\n}\n@media (min-width: 1400px) {\n  .dropdown-menu-xxl-start {\n    --bs-position: start;\n  }\n  .dropdown-menu-xxl-start[data-bs-popper] {\n    right: auto;\n    left: 0;\n  }\n  .dropdown-menu-xxl-end {\n    --bs-position: end;\n  }\n  .dropdown-menu-xxl-end[data-bs-popper] {\n    right: 0;\n    left: auto;\n  }\n}\n.dropup .dropdown-menu[data-bs-popper] {\n  top: auto;\n  bottom: 100%;\n  margin-top: 0;\n  margin-bottom: 0.125rem;\n}\n.dropup .dropdown-toggle::after {\n  display: inline-block;\n  margin-left: 0.255em;\n  vertical-align: 0.255em;\n  content: \"\";\n  border-top: 0;\n  border-right: 0.3em solid transparent;\n  border-bottom: 0.3em solid;\n  border-left: 0.3em solid transparent;\n}\n.dropup .dropdown-toggle:empty::after {\n  margin-left: 0;\n}\n\n.dropend .dropdown-menu[data-bs-popper] {\n  top: 0;\n  right: auto;\n  left: 100%;\n  margin-top: 0;\n  margin-left: 0.125rem;\n}\n.dropend .dropdown-toggle::after {\n  display: inline-block;\n  margin-left: 0.255em;\n  vertical-align: 0.255em;\n  content: \"\";\n  border-top: 0.3em solid transparent;\n  border-right: 0;\n  border-bottom: 0.3em solid transparent;\n  border-left: 0.3em solid;\n}\n.dropend .dropdown-toggle:empty::after {\n  margin-left: 0;\n}\n.dropend .dropdown-toggle::after {\n  vertical-align: 0;\n}\n\n.dropstart .dropdown-menu[data-bs-popper] {\n  top: 0;\n  right: 100%;\n  left: auto;\n  margin-top: 0;\n  margin-right: 0.125rem;\n}\n.dropstart .dropdown-toggle::after {\n  display: inline-block;\n  margin-left: 0.255em;\n  vertical-align: 0.255em;\n  content: \"\";\n}\n.dropstart .dropdown-toggle::after {\n  display: none;\n}\n.dropstart .dropdown-toggle::before {\n  display: inline-block;\n  margin-right: 0.255em;\n  vertical-align: 0.255em;\n  content: \"\";\n  border-top: 0.3em solid transparent;\n  border-right: 0.3em solid;\n  border-bottom: 0.3em solid transparent;\n}\n.dropstart .dropdown-toggle:empty::after {\n  margin-left: 0;\n}\n.dropstart .dropdown-toggle::before {\n  vertical-align: 0;\n}\n\n.dropdown-divider {\n  height: 0;\n  margin: 0.5rem 0;\n  overflow: hidden;\n  border-top: 1px solid rgba(0, 0, 0, 0.15);\n}\n\n.dropdown-item {\n  display: block;\n  width: 100%;\n  padding: 0.25rem 1rem;\n  clear: both;\n  font-weight: 400;\n  color: #212529;\n  text-align: inherit;\n  text-decoration: none;\n  white-space: nowrap;\n  background-color: transparent;\n  border: 0;\n}\n.dropdown-item:hover, .dropdown-item:focus {\n  color: #1e2125;\n  background-color: #e9ecef;\n}\n.dropdown-item.active, .dropdown-item:active {\n  color: #fff;\n  text-decoration: none;\n  background-color: #03378d;\n}\n.dropdown-item.disabled, .dropdown-item:disabled {\n  color: #adb5bd;\n  pointer-events: none;\n  background-color: transparent;\n}\n\n.dropdown-menu.show {\n  display: block;\n}\n\n.dropdown-header {\n  display: block;\n  padding: 0.5rem 1rem;\n  margin-bottom: 0;\n  font-size: 0.875rem;\n  color: #6c757d;\n  white-space: nowrap;\n}\n\n.dropdown-item-text {\n  display: block;\n  padding: 0.25rem 1rem;\n  color: #212529;\n}\n\n.dropdown-menu-dark {\n  color: #dee2e6;\n  background-color: #343a40;\n  border-color: rgba(0, 0, 0, 0.15);\n}\n.dropdown-menu-dark .dropdown-item {\n  color: #dee2e6;\n}\n.dropdown-menu-dark .dropdown-item:hover, .dropdown-menu-dark .dropdown-item:focus {\n  color: #fff;\n  background-color: rgba(255, 255, 255, 0.15);\n}\n.dropdown-menu-dark .dropdown-item.active, .dropdown-menu-dark .dropdown-item:active {\n  color: #fff;\n  background-color: #03378d;\n}\n.dropdown-menu-dark .dropdown-item.disabled, .dropdown-menu-dark .dropdown-item:disabled {\n  color: #adb5bd;\n}\n.dropdown-menu-dark .dropdown-divider {\n  border-color: rgba(0, 0, 0, 0.15);\n}\n.dropdown-menu-dark .dropdown-item-text {\n  color: #dee2e6;\n}\n.dropdown-menu-dark .dropdown-header {\n  color: #adb5bd;\n}\n\n.btn-group,\n.btn-group-vertical {\n  position: relative;\n  display: inline-flex;\n  vertical-align: middle;\n}\n.btn-group > .btn,\n.btn-group-vertical > .btn {\n  position: relative;\n  flex: 1 1 auto;\n}\n.btn-group > .btn-check:checked + .btn,\n.btn-group > .btn-check:focus + .btn,\n.btn-group > .btn:hover,\n.btn-group > .btn:focus,\n.btn-group > .btn:active,\n.btn-group > .btn.active,\n.btn-group-vertical > .btn-check:checked + .btn,\n.btn-group-vertical > .btn-check:focus + .btn,\n.btn-group-vertical > .btn:hover,\n.btn-group-vertical > .btn:focus,\n.btn-group-vertical > .btn:active,\n.btn-group-vertical > .btn.active {\n  z-index: 1;\n}\n\n.btn-toolbar {\n  display: flex;\n  flex-wrap: wrap;\n  justify-content: flex-start;\n}\n.btn-toolbar .input-group {\n  width: auto;\n}\n\n.btn-group > .btn:not(:first-child),\n.btn-group > .btn-group:not(:first-child) {\n  margin-left: -1px;\n}\n.btn-group > .btn:not(:last-child):not(.dropdown-toggle),\n.btn-group > .btn-group:not(:last-child) > .btn {\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n}\n.btn-group > .btn:nth-child(n+3),\n.btn-group > :not(.btn-check) + .btn,\n.btn-group > .btn-group:not(:first-child) > .btn {\n  border-top-left-radius: 0;\n  border-bottom-left-radius: 0;\n}\n\n.dropdown-toggle-split {\n  padding-right: 0.5625rem;\n  padding-left: 0.5625rem;\n}\n.dropdown-toggle-split::after, .dropup .dropdown-toggle-split::after, .dropend .dropdown-toggle-split::after {\n  margin-left: 0;\n}\n.dropstart .dropdown-toggle-split::before {\n  margin-right: 0;\n}\n\n.btn-sm + .dropdown-toggle-split, .btn-group-sm > .btn + .dropdown-toggle-split {\n  padding-right: 0.375rem;\n  padding-left: 0.375rem;\n}\n\n.btn-lg + .dropdown-toggle-split, .btn-group-lg > .btn + .dropdown-toggle-split {\n  padding-right: 0.75rem;\n  padding-left: 0.75rem;\n}\n\n.btn-group-vertical {\n  flex-direction: column;\n  align-items: flex-start;\n  justify-content: center;\n}\n.btn-group-vertical > .btn,\n.btn-group-vertical > .btn-group {\n  width: 100%;\n}\n.btn-group-vertical > .btn:not(:first-child),\n.btn-group-vertical > .btn-group:not(:first-child) {\n  margin-top: -1px;\n}\n.btn-group-vertical > .btn:not(:last-child):not(.dropdown-toggle),\n.btn-group-vertical > .btn-group:not(:last-child) > .btn {\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 0;\n}\n.btn-group-vertical > .btn ~ .btn,\n.btn-group-vertical > .btn-group:not(:first-child) > .btn {\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n}\n\n.nav {\n  display: flex;\n  flex-wrap: wrap;\n  padding-left: 0;\n  margin-bottom: 0;\n  list-style: none;\n}\n\n.nav-link {\n  display: block;\n  padding: 0.5rem 1rem;\n  color: #03378d;\n  text-decoration: none;\n  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n  .nav-link {\n    transition: none;\n  }\n}\n.nav-link:hover, .nav-link:focus {\n  color: #022c71;\n}\n.nav-link.disabled {\n  color: #6c757d;\n  pointer-events: none;\n  cursor: default;\n}\n\n.nav-tabs {\n  border-bottom: 1px solid #dee2e6;\n}\n.nav-tabs .nav-link {\n  margin-bottom: -1px;\n  background: none;\n  border: 1px solid transparent;\n  border-top-left-radius: 0.25rem;\n  border-top-right-radius: 0.25rem;\n}\n.nav-tabs .nav-link:hover, .nav-tabs .nav-link:focus {\n  border-color: #e9ecef #e9ecef #dee2e6;\n  isolation: isolate;\n}\n.nav-tabs .nav-link.disabled {\n  color: #6c757d;\n  background-color: transparent;\n  border-color: transparent;\n}\n.nav-tabs .nav-link.active,\n.nav-tabs .nav-item.show .nav-link {\n  color: #495057;\n  background-color: #fff;\n  border-color: #dee2e6 #dee2e6 #fff;\n}\n.nav-tabs .dropdown-menu {\n  margin-top: -1px;\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n}\n\n.nav-pills .nav-link {\n  background: none;\n  border: 0;\n  border-radius: 0.25rem;\n}\n.nav-pills .nav-link.active,\n.nav-pills .show > .nav-link {\n  color: #fff;\n  background-color: #03378d;\n}\n\n.nav-fill > .nav-link,\n.nav-fill .nav-item {\n  flex: 1 1 auto;\n  text-align: center;\n}\n\n.nav-justified > .nav-link,\n.nav-justified .nav-item {\n  flex-basis: 0;\n  flex-grow: 1;\n  text-align: center;\n}\n\n.nav-fill .nav-item .nav-link,\n.nav-justified .nav-item .nav-link {\n  width: 100%;\n}\n\n.tab-content > .tab-pane {\n  display: none;\n}\n.tab-content > .active {\n  display: block;\n}\n\n.navbar {\n  position: relative;\n  display: flex;\n  flex-wrap: wrap;\n  align-items: center;\n  justify-content: space-between;\n  padding-top: 0.5rem;\n  padding-bottom: 0.5rem;\n}\n.navbar > .container,\n.navbar > .container-fluid,\n.navbar > .container-sm,\n.navbar > .container-md,\n.navbar > .container-lg,\n.navbar > .container-xl,\n.navbar > .container-xxl {\n  display: flex;\n  flex-wrap: inherit;\n  align-items: center;\n  justify-content: space-between;\n}\n.navbar-brand {\n  padding-top: 0.3125rem;\n  padding-bottom: 0.3125rem;\n  margin-right: 1rem;\n  font-size: 1.25rem;\n  text-decoration: none;\n  white-space: nowrap;\n}\n.navbar-nav {\n  display: flex;\n  flex-direction: column;\n  padding-left: 0;\n  margin-bottom: 0;\n  list-style: none;\n}\n.navbar-nav .nav-link {\n  padding-right: 0;\n  padding-left: 0;\n}\n.navbar-nav .dropdown-menu {\n  position: static;\n}\n\n.navbar-text {\n  padding-top: 0.5rem;\n  padding-bottom: 0.5rem;\n}\n\n.navbar-collapse {\n  flex-basis: 100%;\n  flex-grow: 1;\n  align-items: center;\n}\n\n.navbar-toggler {\n  padding: 0.25rem 0.75rem;\n  font-size: 1.25rem;\n  line-height: 1;\n  background-color: transparent;\n  border: 1px solid transparent;\n  border-radius: 0.25rem;\n  transition: box-shadow 0.15s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n  .navbar-toggler {\n    transition: none;\n  }\n}\n.navbar-toggler:hover {\n  text-decoration: none;\n}\n.navbar-toggler:focus {\n  text-decoration: none;\n  outline: 0;\n  box-shadow: 0 0 0 0.25rem;\n}\n\n.navbar-toggler-icon {\n  display: inline-block;\n  width: 1.5em;\n  height: 1.5em;\n  vertical-align: middle;\n  background-repeat: no-repeat;\n  background-position: center;\n  background-size: 100%;\n}\n\n.navbar-nav-scroll {\n  max-height: var(--bs-scroll-height, 75vh);\n  overflow-y: auto;\n}\n\n@media (min-width: 576px) {\n  .navbar-expand-sm {\n    flex-wrap: nowrap;\n    justify-content: flex-start;\n  }\n  .navbar-expand-sm .navbar-nav {\n    flex-direction: row;\n  }\n  .navbar-expand-sm .navbar-nav .dropdown-menu {\n    position: absolute;\n  }\n  .navbar-expand-sm .navbar-nav .nav-link {\n    padding-right: 0.5rem;\n    padding-left: 0.5rem;\n  }\n  .navbar-expand-sm .navbar-nav-scroll {\n    overflow: visible;\n  }\n  .navbar-expand-sm .navbar-collapse {\n    display: flex !important;\n    flex-basis: auto;\n  }\n  .navbar-expand-sm .navbar-toggler {\n    display: none;\n  }\n  .navbar-expand-sm .offcanvas-header {\n    display: none;\n  }\n  .navbar-expand-sm .offcanvas {\n    position: inherit;\n    bottom: 0;\n    z-index: 1000;\n    flex-grow: 1;\n    visibility: visible !important;\n    background-color: transparent;\n    border-right: 0;\n    border-left: 0;\n    transition: none;\n    transform: none;\n  }\n  .navbar-expand-sm .offcanvas-top,\n  .navbar-expand-sm .offcanvas-bottom {\n    height: auto;\n    border-top: 0;\n    border-bottom: 0;\n  }\n  .navbar-expand-sm .offcanvas-body {\n    display: flex;\n    flex-grow: 0;\n    padding: 0;\n    overflow-y: visible;\n  }\n}\n@media (min-width: 768px) {\n  .navbar-expand-md {\n    flex-wrap: nowrap;\n    justify-content: flex-start;\n  }\n  .navbar-expand-md .navbar-nav {\n    flex-direction: row;\n  }\n  .navbar-expand-md .navbar-nav .dropdown-menu {\n    position: absolute;\n  }\n  .navbar-expand-md .navbar-nav .nav-link {\n    padding-right: 0.5rem;\n    padding-left: 0.5rem;\n  }\n  .navbar-expand-md .navbar-nav-scroll {\n    overflow: visible;\n  }\n  .navbar-expand-md .navbar-collapse {\n    display: flex !important;\n    flex-basis: auto;\n  }\n  .navbar-expand-md .navbar-toggler {\n    display: none;\n  }\n  .navbar-expand-md .offcanvas-header {\n    display: none;\n  }\n  .navbar-expand-md .offcanvas {\n    position: inherit;\n    bottom: 0;\n    z-index: 1000;\n    flex-grow: 1;\n    visibility: visible !important;\n    background-color: transparent;\n    border-right: 0;\n    border-left: 0;\n    transition: none;\n    transform: none;\n  }\n  .navbar-expand-md .offcanvas-top,\n  .navbar-expand-md .offcanvas-bottom {\n    height: auto;\n    border-top: 0;\n    border-bottom: 0;\n  }\n  .navbar-expand-md .offcanvas-body {\n    display: flex;\n    flex-grow: 0;\n    padding: 0;\n    overflow-y: visible;\n  }\n}\n@media (min-width: 992px) {\n  .navbar-expand-lg {\n    flex-wrap: nowrap;\n    justify-content: flex-start;\n  }\n  .navbar-expand-lg .navbar-nav {\n    flex-direction: row;\n  }\n  .navbar-expand-lg .navbar-nav .dropdown-menu {\n    position: absolute;\n  }\n  .navbar-expand-lg .navbar-nav .nav-link {\n    padding-right: 0.5rem;\n    padding-left: 0.5rem;\n  }\n  .navbar-expand-lg .navbar-nav-scroll {\n    overflow: visible;\n  }\n  .navbar-expand-lg .navbar-collapse {\n    display: flex !important;\n    flex-basis: auto;\n  }\n  .navbar-expand-lg .navbar-toggler {\n    display: none;\n  }\n  .navbar-expand-lg .offcanvas-header {\n    display: none;\n  }\n  .navbar-expand-lg .offcanvas {\n    position: inherit;\n    bottom: 0;\n    z-index: 1000;\n    flex-grow: 1;\n    visibility: visible !important;\n    background-color: transparent;\n    border-right: 0;\n    border-left: 0;\n    transition: none;\n    transform: none;\n  }\n  .navbar-expand-lg .offcanvas-top,\n  .navbar-expand-lg .offcanvas-bottom {\n    height: auto;\n    border-top: 0;\n    border-bottom: 0;\n  }\n  .navbar-expand-lg .offcanvas-body {\n    display: flex;\n    flex-grow: 0;\n    padding: 0;\n    overflow-y: visible;\n  }\n}\n@media (min-width: 1200px) {\n  .navbar-expand-xl {\n    flex-wrap: nowrap;\n    justify-content: flex-start;\n  }\n  .navbar-expand-xl .navbar-nav {\n    flex-direction: row;\n  }\n  .navbar-expand-xl .navbar-nav .dropdown-menu {\n    position: absolute;\n  }\n  .navbar-expand-xl .navbar-nav .nav-link {\n    padding-right: 0.5rem;\n    padding-left: 0.5rem;\n  }\n  .navbar-expand-xl .navbar-nav-scroll {\n    overflow: visible;\n  }\n  .navbar-expand-xl .navbar-collapse {\n    display: flex !important;\n    flex-basis: auto;\n  }\n  .navbar-expand-xl .navbar-toggler {\n    display: none;\n  }\n  .navbar-expand-xl .offcanvas-header {\n    display: none;\n  }\n  .navbar-expand-xl .offcanvas {\n    position: inherit;\n    bottom: 0;\n    z-index: 1000;\n    flex-grow: 1;\n    visibility: visible !important;\n    background-color: transparent;\n    border-right: 0;\n    border-left: 0;\n    transition: none;\n    transform: none;\n  }\n  .navbar-expand-xl .offcanvas-top,\n  .navbar-expand-xl .offcanvas-bottom {\n    height: auto;\n    border-top: 0;\n    border-bottom: 0;\n  }\n  .navbar-expand-xl .offcanvas-body {\n    display: flex;\n    flex-grow: 0;\n    padding: 0;\n    overflow-y: visible;\n  }\n}\n@media (min-width: 1400px) {\n  .navbar-expand-xxl {\n    flex-wrap: nowrap;\n    justify-content: flex-start;\n  }\n  .navbar-expand-xxl .navbar-nav {\n    flex-direction: row;\n  }\n  .navbar-expand-xxl .navbar-nav .dropdown-menu {\n    position: absolute;\n  }\n  .navbar-expand-xxl .navbar-nav .nav-link {\n    padding-right: 0.5rem;\n    padding-left: 0.5rem;\n  }\n  .navbar-expand-xxl .navbar-nav-scroll {\n    overflow: visible;\n  }\n  .navbar-expand-xxl .navbar-collapse {\n    display: flex !important;\n    flex-basis: auto;\n  }\n  .navbar-expand-xxl .navbar-toggler {\n    display: none;\n  }\n  .navbar-expand-xxl .offcanvas-header {\n    display: none;\n  }\n  .navbar-expand-xxl .offcanvas {\n    position: inherit;\n    bottom: 0;\n    z-index: 1000;\n    flex-grow: 1;\n    visibility: visible !important;\n    background-color: transparent;\n    border-right: 0;\n    border-left: 0;\n    transition: none;\n    transform: none;\n  }\n  .navbar-expand-xxl .offcanvas-top,\n  .navbar-expand-xxl .offcanvas-bottom {\n    height: auto;\n    border-top: 0;\n    border-bottom: 0;\n  }\n  .navbar-expand-xxl .offcanvas-body {\n    display: flex;\n    flex-grow: 0;\n    padding: 0;\n    overflow-y: visible;\n  }\n}\n.navbar-expand {\n  flex-wrap: nowrap;\n  justify-content: flex-start;\n}\n.navbar-expand .navbar-nav {\n  flex-direction: row;\n}\n.navbar-expand .navbar-nav .dropdown-menu {\n  position: absolute;\n}\n.navbar-expand .navbar-nav .nav-link {\n  padding-right: 0.5rem;\n  padding-left: 0.5rem;\n}\n.navbar-expand .navbar-nav-scroll {\n  overflow: visible;\n}\n.navbar-expand .navbar-collapse {\n  display: flex !important;\n  flex-basis: auto;\n}\n.navbar-expand .navbar-toggler {\n  display: none;\n}\n.navbar-expand .offcanvas-header {\n  display: none;\n}\n.navbar-expand .offcanvas {\n  position: inherit;\n  bottom: 0;\n  z-index: 1000;\n  flex-grow: 1;\n  visibility: visible !important;\n  background-color: transparent;\n  border-right: 0;\n  border-left: 0;\n  transition: none;\n  transform: none;\n}\n.navbar-expand .offcanvas-top,\n.navbar-expand .offcanvas-bottom {\n  height: auto;\n  border-top: 0;\n  border-bottom: 0;\n}\n.navbar-expand .offcanvas-body {\n  display: flex;\n  flex-grow: 0;\n  padding: 0;\n  overflow-y: visible;\n}\n\n.navbar-light .navbar-brand {\n  color: rgba(0, 0, 0, 0.9);\n}\n.navbar-light .navbar-brand:hover, .navbar-light .navbar-brand:focus {\n  color: rgba(0, 0, 0, 0.9);\n}\n.navbar-light .navbar-nav .nav-link {\n  color: rgba(0, 0, 0, 0.5);\n}\n.navbar-light .navbar-nav .nav-link:hover, .navbar-light .navbar-nav .nav-link:focus {\n  color: rgba(0, 0, 0, 0.7);\n}\n.navbar-light .navbar-nav .nav-link.disabled {\n  color: rgba(0, 0, 0, 0.3);\n}\n.navbar-light .navbar-nav .show > .nav-link,\n.navbar-light .navbar-nav .nav-link.active {\n  color: rgba(0, 0, 0, 0.9);\n}\n.navbar-light .navbar-toggler {\n  color: rgba(0, 0, 0, 0.5);\n  border-color: rgba(0, 0, 0, 0.1);\n}\n.navbar-light .navbar-toggler-icon {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%280, 0, 0, 0.5%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e\");\n}\n.navbar-light .navbar-text {\n  color: rgba(0, 0, 0, 0.5);\n}\n.navbar-light .navbar-text a,\n.navbar-light .navbar-text a:hover,\n.navbar-light .navbar-text a:focus {\n  color: rgba(0, 0, 0, 0.9);\n}\n\n.navbar-dark .navbar-brand {\n  color: #fff;\n}\n.navbar-dark .navbar-brand:hover, .navbar-dark .navbar-brand:focus {\n  color: #fff;\n}\n.navbar-dark .navbar-nav .nav-link {\n  color: rgba(255, 255, 255, 0.5);\n}\n.navbar-dark .navbar-nav .nav-link:hover, .navbar-dark .navbar-nav .nav-link:focus {\n  color: rgba(255, 255, 255, 0.75);\n}\n.navbar-dark .navbar-nav .nav-link.disabled {\n  color: rgba(255, 255, 255, 0.25);\n}\n.navbar-dark .navbar-nav .show > .nav-link,\n.navbar-dark .navbar-nav .nav-link.active {\n  color: #fff;\n}\n.navbar-dark .navbar-toggler {\n  color: rgba(255, 255, 255, 0.5);\n  border-color: rgba(255, 255, 255, 0.1);\n}\n.navbar-dark .navbar-toggler-icon {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.5%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e\");\n}\n.navbar-dark .navbar-text {\n  color: rgba(255, 255, 255, 0.5);\n}\n.navbar-dark .navbar-text a,\n.navbar-dark .navbar-text a:hover,\n.navbar-dark .navbar-text a:focus {\n  color: #fff;\n}\n\n.card {\n  position: relative;\n  display: flex;\n  flex-direction: column;\n  min-width: 0;\n  word-wrap: break-word;\n  background-color: #fff;\n  background-clip: border-box;\n  border: 1px solid rgba(0, 0, 0, 0.125);\n  border-radius: 0.25rem;\n}\n.card > hr {\n  margin-right: 0;\n  margin-left: 0;\n}\n.card > .list-group {\n  border-top: inherit;\n  border-bottom: inherit;\n}\n.card > .list-group:first-child {\n  border-top-width: 0;\n  border-top-left-radius: calc(0.25rem - 1px);\n  border-top-right-radius: calc(0.25rem - 1px);\n}\n.card > .list-group:last-child {\n  border-bottom-width: 0;\n  border-bottom-right-radius: calc(0.25rem - 1px);\n  border-bottom-left-radius: calc(0.25rem - 1px);\n}\n.card > .card-header + .list-group,\n.card > .list-group + .card-footer {\n  border-top: 0;\n}\n\n.card-body {\n  flex: 1 1 auto;\n  padding: 1rem 1rem;\n}\n\n.card-title {\n  margin-bottom: 0.5rem;\n}\n\n.card-subtitle {\n  margin-top: -0.25rem;\n  margin-bottom: 0;\n}\n\n.card-text:last-child {\n  margin-bottom: 0;\n}\n\n.card-link + .card-link {\n  margin-left: 1rem;\n}\n\n.card-header {\n  padding: 0.5rem 1rem;\n  margin-bottom: 0;\n  background-color: rgba(0, 0, 0, 0.03);\n  border-bottom: 1px solid rgba(0, 0, 0, 0.125);\n}\n.card-header:first-child {\n  border-radius: calc(0.25rem - 1px) calc(0.25rem - 1px) 0 0;\n}\n\n.card-footer {\n  padding: 0.5rem 1rem;\n  background-color: rgba(0, 0, 0, 0.03);\n  border-top: 1px solid rgba(0, 0, 0, 0.125);\n}\n.card-footer:last-child {\n  border-radius: 0 0 calc(0.25rem - 1px) calc(0.25rem - 1px);\n}\n\n.card-header-tabs {\n  margin-right: -0.5rem;\n  margin-bottom: -0.5rem;\n  margin-left: -0.5rem;\n  border-bottom: 0;\n}\n\n.card-header-pills {\n  margin-right: -0.5rem;\n  margin-left: -0.5rem;\n}\n\n.card-img-overlay {\n  position: absolute;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  padding: 1rem;\n  border-radius: calc(0.25rem - 1px);\n}\n\n.card-img,\n.card-img-top,\n.card-img-bottom {\n  width: 100%;\n}\n\n.card-img,\n.card-img-top {\n  border-top-left-radius: calc(0.25rem - 1px);\n  border-top-right-radius: calc(0.25rem - 1px);\n}\n\n.card-img,\n.card-img-bottom {\n  border-bottom-right-radius: calc(0.25rem - 1px);\n  border-bottom-left-radius: calc(0.25rem - 1px);\n}\n\n.card-group > .card {\n  margin-bottom: 0.75rem;\n}\n@media (min-width: 576px) {\n  .card-group {\n    display: flex;\n    flex-flow: row wrap;\n  }\n  .card-group > .card {\n    flex: 1 0 0%;\n    margin-bottom: 0;\n  }\n  .card-group > .card + .card {\n    margin-left: 0;\n    border-left: 0;\n  }\n  .card-group > .card:not(:last-child) {\n    border-top-right-radius: 0;\n    border-bottom-right-radius: 0;\n  }\n  .card-group > .card:not(:last-child) .card-img-top,\n  .card-group > .card:not(:last-child) .card-header {\n    border-top-right-radius: 0;\n  }\n  .card-group > .card:not(:last-child) .card-img-bottom,\n  .card-group > .card:not(:last-child) .card-footer {\n    border-bottom-right-radius: 0;\n  }\n  .card-group > .card:not(:first-child) {\n    border-top-left-radius: 0;\n    border-bottom-left-radius: 0;\n  }\n  .card-group > .card:not(:first-child) .card-img-top,\n  .card-group > .card:not(:first-child) .card-header {\n    border-top-left-radius: 0;\n  }\n  .card-group > .card:not(:first-child) .card-img-bottom,\n  .card-group > .card:not(:first-child) .card-footer {\n    border-bottom-left-radius: 0;\n  }\n}\n\n.accordion-button {\n  position: relative;\n  display: flex;\n  align-items: center;\n  width: 100%;\n  padding: 1rem 1.25rem;\n  font-size: 1rem;\n  color: #212529;\n  text-align: left;\n  background-color: #fff;\n  border: 0;\n  border-radius: 0;\n  overflow-anchor: none;\n  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, border-radius 0.15s ease;\n}\n@media (prefers-reduced-motion: reduce) {\n  .accordion-button {\n    transition: none;\n  }\n}\n.accordion-button:not(.collapsed) {\n  color: #03327f;\n  background-color: #e6ebf4;\n  box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.125);\n}\n.accordion-button:not(.collapsed)::after {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%2303327f'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e\");\n  transform: rotate(-180deg);\n}\n.accordion-button::after {\n  flex-shrink: 0;\n  width: 1.25rem;\n  height: 1.25rem;\n  margin-left: auto;\n  content: \"\";\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23212529'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e\");\n  background-repeat: no-repeat;\n  background-size: 1.25rem;\n  transition: transform 0.2s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n  .accordion-button::after {\n    transition: none;\n  }\n}\n.accordion-button:hover {\n  z-index: 2;\n}\n.accordion-button:focus {\n  z-index: 3;\n  border-color: #819bc6;\n  outline: 0;\n  box-shadow: 0 0 0 0.25rem rgba(3, 55, 141, 0.25);\n}\n\n.accordion-header {\n  margin-bottom: 0;\n}\n\n.accordion-item {\n  background-color: #fff;\n  border: 1px solid rgba(0, 0, 0, 0.125);\n}\n.accordion-item:first-of-type {\n  border-top-left-radius: 0.25rem;\n  border-top-right-radius: 0.25rem;\n}\n.accordion-item:first-of-type .accordion-button {\n  border-top-left-radius: calc(0.25rem - 1px);\n  border-top-right-radius: calc(0.25rem - 1px);\n}\n.accordion-item:not(:first-of-type) {\n  border-top: 0;\n}\n.accordion-item:last-of-type {\n  border-bottom-right-radius: 0.25rem;\n  border-bottom-left-radius: 0.25rem;\n}\n.accordion-item:last-of-type .accordion-button.collapsed {\n  border-bottom-right-radius: calc(0.25rem - 1px);\n  border-bottom-left-radius: calc(0.25rem - 1px);\n}\n.accordion-item:last-of-type .accordion-collapse {\n  border-bottom-right-radius: 0.25rem;\n  border-bottom-left-radius: 0.25rem;\n}\n\n.accordion-body {\n  padding: 1rem 1.25rem;\n}\n\n.accordion-flush .accordion-collapse {\n  border-width: 0;\n}\n.accordion-flush .accordion-item {\n  border-right: 0;\n  border-left: 0;\n  border-radius: 0;\n}\n.accordion-flush .accordion-item:first-child {\n  border-top: 0;\n}\n.accordion-flush .accordion-item:last-child {\n  border-bottom: 0;\n}\n.accordion-flush .accordion-item .accordion-button {\n  border-radius: 0;\n}\n\n.breadcrumb {\n  display: flex;\n  flex-wrap: wrap;\n  padding: 0 0;\n  margin-bottom: 1rem;\n  list-style: none;\n}\n\n.breadcrumb-item + .breadcrumb-item {\n  padding-left: 0.5rem;\n}\n.breadcrumb-item + .breadcrumb-item::before {\n  float: left;\n  padding-right: 0.5rem;\n  color: #6c757d;\n  content: var(--bs-breadcrumb-divider, \"/\") /* rtl: var(--bs-breadcrumb-divider, \"/\") */;\n}\n.breadcrumb-item.active {\n  color: #6c757d;\n}\n\n.pagination {\n  display: flex;\n  padding-left: 0;\n  list-style: none;\n}\n\n.page-link {\n  position: relative;\n  display: block;\n  color: #03378d;\n  text-decoration: none;\n  background-color: #fff;\n  border: 1px solid #dee2e6;\n  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n  .page-link {\n    transition: none;\n  }\n}\n.page-link:hover {\n  z-index: 2;\n  color: #022c71;\n  background-color: #e9ecef;\n  border-color: #dee2e6;\n}\n.page-link:focus {\n  z-index: 3;\n  color: #022c71;\n  background-color: #e9ecef;\n  outline: 0;\n  box-shadow: 0 0 0 0.25rem rgba(3, 55, 141, 0.25);\n}\n\n.page-item:not(:first-child) .page-link {\n  margin-left: -1px;\n}\n.page-item.active .page-link {\n  z-index: 3;\n  color: #fff;\n  background-color: #03378d;\n  border-color: #03378d;\n}\n.page-item.disabled .page-link {\n  color: #6c757d;\n  pointer-events: none;\n  background-color: #fff;\n  border-color: #dee2e6;\n}\n\n.page-link {\n  padding: 0.375rem 0.75rem;\n}\n\n.page-item:first-child .page-link {\n  border-top-left-radius: 0.25rem;\n  border-bottom-left-radius: 0.25rem;\n}\n.page-item:last-child .page-link {\n  border-top-right-radius: 0.25rem;\n  border-bottom-right-radius: 0.25rem;\n}\n\n.pagination-lg .page-link {\n  padding: 0.75rem 1.5rem;\n  font-size: 1.25rem;\n}\n.pagination-lg .page-item:first-child .page-link {\n  border-top-left-radius: 0.3rem;\n  border-bottom-left-radius: 0.3rem;\n}\n.pagination-lg .page-item:last-child .page-link {\n  border-top-right-radius: 0.3rem;\n  border-bottom-right-radius: 0.3rem;\n}\n\n.pagination-sm .page-link {\n  padding: 0.25rem 0.5rem;\n  font-size: 0.875rem;\n}\n.pagination-sm .page-item:first-child .page-link {\n  border-top-left-radius: 0.2rem;\n  border-bottom-left-radius: 0.2rem;\n}\n.pagination-sm .page-item:last-child .page-link {\n  border-top-right-radius: 0.2rem;\n  border-bottom-right-radius: 0.2rem;\n}\n\n.badge {\n  display: inline-block;\n  padding: 0.35em 0.65em;\n  font-size: 0.75em;\n  font-weight: 700;\n  line-height: 1;\n  color: #fff;\n  text-align: center;\n  white-space: nowrap;\n  vertical-align: baseline;\n  border-radius: 0.25rem;\n}\n.badge:empty {\n  display: none;\n}\n\n.btn .badge {\n  position: relative;\n  top: -1px;\n}\n\n.alert {\n  position: relative;\n  padding: 1rem 1rem;\n  margin-bottom: 1rem;\n  border: 1px solid transparent;\n  border-radius: 0.25rem;\n}\n\n.alert-heading {\n  color: inherit;\n}\n\n.alert-link {\n  font-weight: 700;\n}\n\n.alert-dismissible {\n  padding-right: 3rem;\n}\n.alert-dismissible .btn-close {\n  position: absolute;\n  top: 0;\n  right: 0;\n  z-index: 2;\n  padding: 1.25rem 1rem;\n}\n\n.alert-primary {\n  color: #022155;\n  background-color: #cdd7e8;\n  border-color: #b3c3dd;\n}\n.alert-primary .alert-link {\n  color: #021a44;\n}\n\n.alert-secondary {\n  color: #41464b;\n  background-color: #e2e3e5;\n  border-color: #d3d6d8;\n}\n.alert-secondary .alert-link {\n  color: #34383c;\n}\n\n.alert-success {\n  color: #186429;\n  background-color: #d4edda;\n  border-color: #bfe5c7;\n}\n.alert-success .alert-link {\n  color: #135021;\n}\n\n.alert-info {\n  color: #0e616e;\n  background-color: #d1ecf1;\n  border-color: #b9e3ea;\n}\n.alert-info .alert-link {\n  color: #0b4e58;\n}\n\n.alert-warning {\n  color: #664d03;\n  background-color: #fff3cd;\n  border-color: #ffecb5;\n}\n.alert-warning .alert-link {\n  color: #523e02;\n}\n\n.alert-danger {\n  color: #842029;\n  background-color: #f8d7da;\n  border-color: #f5c2c7;\n}\n.alert-danger .alert-link {\n  color: #6a1a21;\n}\n\n.alert-light {\n  color: #636464;\n  background-color: #fefefe;\n  border-color: #fdfdfe;\n}\n.alert-light .alert-link {\n  color: #4f5050;\n}\n\n.alert-dark {\n  color: #022155;\n  background-color: #cdd7e8;\n  border-color: #b3c3dd;\n}\n.alert-dark .alert-link {\n  color: #021a44;\n}\n\n@keyframes progress-bar-stripes {\n  0% {\n    background-position-x: 1rem;\n  }\n}\n.progress {\n  display: flex;\n  height: 1rem;\n  overflow: hidden;\n  font-size: 0.75rem;\n  background-color: #e9ecef;\n  border-radius: 0.25rem;\n}\n\n.progress-bar {\n  display: flex;\n  flex-direction: column;\n  justify-content: center;\n  overflow: hidden;\n  color: #fff;\n  text-align: center;\n  white-space: nowrap;\n  background-color: #03378d;\n  transition: width 0.6s ease;\n}\n@media (prefers-reduced-motion: reduce) {\n  .progress-bar {\n    transition: none;\n  }\n}\n\n.progress-bar-striped {\n  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-size: 1rem 1rem;\n}\n\n.progress-bar-animated {\n  animation: 1s linear infinite progress-bar-stripes;\n}\n@media (prefers-reduced-motion: reduce) {\n  .progress-bar-animated {\n    animation: none;\n  }\n}\n\n.list-group {\n  display: flex;\n  flex-direction: column;\n  padding-left: 0;\n  margin-bottom: 0;\n  border-radius: 0.25rem;\n}\n\n.list-group-numbered {\n  list-style-type: none;\n  counter-reset: section;\n}\n.list-group-numbered > li::before {\n  content: counters(section, \".\") \". \";\n  counter-increment: section;\n}\n\n.list-group-item-action {\n  width: 100%;\n  color: #495057;\n  text-align: inherit;\n}\n.list-group-item-action:hover, .list-group-item-action:focus {\n  z-index: 1;\n  color: #495057;\n  text-decoration: none;\n  background-color: #f8f9fa;\n}\n.list-group-item-action:active {\n  color: #212529;\n  background-color: #e9ecef;\n}\n\n.list-group-item {\n  position: relative;\n  display: block;\n  padding: 0.5rem 1rem;\n  color: #212529;\n  text-decoration: none;\n  background-color: #fff;\n  border: 1px solid rgba(0, 0, 0, 0.125);\n}\n.list-group-item:first-child {\n  border-top-left-radius: inherit;\n  border-top-right-radius: inherit;\n}\n.list-group-item:last-child {\n  border-bottom-right-radius: inherit;\n  border-bottom-left-radius: inherit;\n}\n.list-group-item.disabled, .list-group-item:disabled {\n  color: #6c757d;\n  pointer-events: none;\n  background-color: #fff;\n}\n.list-group-item.active {\n  z-index: 2;\n  color: #fff;\n  background-color: #03378d;\n  border-color: #03378d;\n}\n.list-group-item + .list-group-item {\n  border-top-width: 0;\n}\n.list-group-item + .list-group-item.active {\n  margin-top: -1px;\n  border-top-width: 1px;\n}\n\n.list-group-horizontal {\n  flex-direction: row;\n}\n.list-group-horizontal > .list-group-item:first-child {\n  border-bottom-left-radius: 0.25rem;\n  border-top-right-radius: 0;\n}\n.list-group-horizontal > .list-group-item:last-child {\n  border-top-right-radius: 0.25rem;\n  border-bottom-left-radius: 0;\n}\n.list-group-horizontal > .list-group-item.active {\n  margin-top: 0;\n}\n.list-group-horizontal > .list-group-item + .list-group-item {\n  border-top-width: 1px;\n  border-left-width: 0;\n}\n.list-group-horizontal > .list-group-item + .list-group-item.active {\n  margin-left: -1px;\n  border-left-width: 1px;\n}\n\n@media (min-width: 576px) {\n  .list-group-horizontal-sm {\n    flex-direction: row;\n  }\n  .list-group-horizontal-sm > .list-group-item:first-child {\n    border-bottom-left-radius: 0.25rem;\n    border-top-right-radius: 0;\n  }\n  .list-group-horizontal-sm > .list-group-item:last-child {\n    border-top-right-radius: 0.25rem;\n    border-bottom-left-radius: 0;\n  }\n  .list-group-horizontal-sm > .list-group-item.active {\n    margin-top: 0;\n  }\n  .list-group-horizontal-sm > .list-group-item + .list-group-item {\n    border-top-width: 1px;\n    border-left-width: 0;\n  }\n  .list-group-horizontal-sm > .list-group-item + .list-group-item.active {\n    margin-left: -1px;\n    border-left-width: 1px;\n  }\n}\n@media (min-width: 768px) {\n  .list-group-horizontal-md {\n    flex-direction: row;\n  }\n  .list-group-horizontal-md > .list-group-item:first-child {\n    border-bottom-left-radius: 0.25rem;\n    border-top-right-radius: 0;\n  }\n  .list-group-horizontal-md > .list-group-item:last-child {\n    border-top-right-radius: 0.25rem;\n    border-bottom-left-radius: 0;\n  }\n  .list-group-horizontal-md > .list-group-item.active {\n    margin-top: 0;\n  }\n  .list-group-horizontal-md > .list-group-item + .list-group-item {\n    border-top-width: 1px;\n    border-left-width: 0;\n  }\n  .list-group-horizontal-md > .list-group-item + .list-group-item.active {\n    margin-left: -1px;\n    border-left-width: 1px;\n  }\n}\n@media (min-width: 992px) {\n  .list-group-horizontal-lg {\n    flex-direction: row;\n  }\n  .list-group-horizontal-lg > .list-group-item:first-child {\n    border-bottom-left-radius: 0.25rem;\n    border-top-right-radius: 0;\n  }\n  .list-group-horizontal-lg > .list-group-item:last-child {\n    border-top-right-radius: 0.25rem;\n    border-bottom-left-radius: 0;\n  }\n  .list-group-horizontal-lg > .list-group-item.active {\n    margin-top: 0;\n  }\n  .list-group-horizontal-lg > .list-group-item + .list-group-item {\n    border-top-width: 1px;\n    border-left-width: 0;\n  }\n  .list-group-horizontal-lg > .list-group-item + .list-group-item.active {\n    margin-left: -1px;\n    border-left-width: 1px;\n  }\n}\n@media (min-width: 1200px) {\n  .list-group-horizontal-xl {\n    flex-direction: row;\n  }\n  .list-group-horizontal-xl > .list-group-item:first-child {\n    border-bottom-left-radius: 0.25rem;\n    border-top-right-radius: 0;\n  }\n  .list-group-horizontal-xl > .list-group-item:last-child {\n    border-top-right-radius: 0.25rem;\n    border-bottom-left-radius: 0;\n  }\n  .list-group-horizontal-xl > .list-group-item.active {\n    margin-top: 0;\n  }\n  .list-group-horizontal-xl > .list-group-item + .list-group-item {\n    border-top-width: 1px;\n    border-left-width: 0;\n  }\n  .list-group-horizontal-xl > .list-group-item + .list-group-item.active {\n    margin-left: -1px;\n    border-left-width: 1px;\n  }\n}\n@media (min-width: 1400px) {\n  .list-group-horizontal-xxl {\n    flex-direction: row;\n  }\n  .list-group-horizontal-xxl > .list-group-item:first-child {\n    border-bottom-left-radius: 0.25rem;\n    border-top-right-radius: 0;\n  }\n  .list-group-horizontal-xxl > .list-group-item:last-child {\n    border-top-right-radius: 0.25rem;\n    border-bottom-left-radius: 0;\n  }\n  .list-group-horizontal-xxl > .list-group-item.active {\n    margin-top: 0;\n  }\n  .list-group-horizontal-xxl > .list-group-item + .list-group-item {\n    border-top-width: 1px;\n    border-left-width: 0;\n  }\n  .list-group-horizontal-xxl > .list-group-item + .list-group-item.active {\n    margin-left: -1px;\n    border-left-width: 1px;\n  }\n}\n.list-group-flush {\n  border-radius: 0;\n}\n.list-group-flush > .list-group-item {\n  border-width: 0 0 1px;\n}\n.list-group-flush > .list-group-item:last-child {\n  border-bottom-width: 0;\n}\n\n.list-group-item-primary {\n  color: #022155;\n  background-color: #cdd7e8;\n}\n.list-group-item-primary.list-group-item-action:hover, .list-group-item-primary.list-group-item-action:focus {\n  color: #022155;\n  background-color: #b9c2d1;\n}\n.list-group-item-primary.list-group-item-action.active {\n  color: #fff;\n  background-color: #022155;\n  border-color: #022155;\n}\n\n.list-group-item-secondary {\n  color: #41464b;\n  background-color: #e2e3e5;\n}\n.list-group-item-secondary.list-group-item-action:hover, .list-group-item-secondary.list-group-item-action:focus {\n  color: #41464b;\n  background-color: #cbccce;\n}\n.list-group-item-secondary.list-group-item-action.active {\n  color: #fff;\n  background-color: #41464b;\n  border-color: #41464b;\n}\n\n.list-group-item-success {\n  color: #186429;\n  background-color: #d4edda;\n}\n.list-group-item-success.list-group-item-action:hover, .list-group-item-success.list-group-item-action:focus {\n  color: #186429;\n  background-color: #bfd5c4;\n}\n.list-group-item-success.list-group-item-action.active {\n  color: #fff;\n  background-color: #186429;\n  border-color: #186429;\n}\n\n.list-group-item-info {\n  color: #0e616e;\n  background-color: #d1ecf1;\n}\n.list-group-item-info.list-group-item-action:hover, .list-group-item-info.list-group-item-action:focus {\n  color: #0e616e;\n  background-color: #bcd4d9;\n}\n.list-group-item-info.list-group-item-action.active {\n  color: #fff;\n  background-color: #0e616e;\n  border-color: #0e616e;\n}\n\n.list-group-item-warning {\n  color: #664d03;\n  background-color: #fff3cd;\n}\n.list-group-item-warning.list-group-item-action:hover, .list-group-item-warning.list-group-item-action:focus {\n  color: #664d03;\n  background-color: #e6dbb9;\n}\n.list-group-item-warning.list-group-item-action.active {\n  color: #fff;\n  background-color: #664d03;\n  border-color: #664d03;\n}\n\n.list-group-item-danger {\n  color: #842029;\n  background-color: #f8d7da;\n}\n.list-group-item-danger.list-group-item-action:hover, .list-group-item-danger.list-group-item-action:focus {\n  color: #842029;\n  background-color: #dfc2c4;\n}\n.list-group-item-danger.list-group-item-action.active {\n  color: #fff;\n  background-color: #842029;\n  border-color: #842029;\n}\n\n.list-group-item-light {\n  color: #636464;\n  background-color: #fefefe;\n}\n.list-group-item-light.list-group-item-action:hover, .list-group-item-light.list-group-item-action:focus {\n  color: #636464;\n  background-color: #e5e5e5;\n}\n.list-group-item-light.list-group-item-action.active {\n  color: #fff;\n  background-color: #636464;\n  border-color: #636464;\n}\n\n.list-group-item-dark {\n  color: #022155;\n  background-color: #cdd7e8;\n}\n.list-group-item-dark.list-group-item-action:hover, .list-group-item-dark.list-group-item-action:focus {\n  color: #022155;\n  background-color: #b9c2d1;\n}\n.list-group-item-dark.list-group-item-action.active {\n  color: #fff;\n  background-color: #022155;\n  border-color: #022155;\n}\n\n.btn-close {\n  box-sizing: content-box;\n  width: 1em;\n  height: 1em;\n  padding: 0.25em 0.25em;\n  color: #000;\n  background: transparent url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23000'%3e%3cpath d='M.293.293a1 1 0 011.414 0L8 6.586 14.293.293a1 1 0 111.414 1.414L9.414 8l6.293 6.293a1 1 0 01-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 01-1.414-1.414L6.586 8 .293 1.707a1 1 0 010-1.414z'/%3e%3c/svg%3e\") center/1em auto no-repeat;\n  border: 0;\n  border-radius: 0.25rem;\n  opacity: 0.5;\n}\n.btn-close:hover {\n  color: #000;\n  text-decoration: none;\n  opacity: 0.75;\n}\n.btn-close:focus {\n  outline: 0;\n  box-shadow: 0 0 0 0.25rem rgba(3, 55, 141, 0.25);\n  opacity: 1;\n}\n.btn-close:disabled, .btn-close.disabled {\n  pointer-events: none;\n  user-select: none;\n  opacity: 0.25;\n}\n\n.btn-close-white {\n  filter: invert(1) grayscale(100%) brightness(200%);\n}\n\n.toast {\n  width: 350px;\n  max-width: 100%;\n  font-size: 0.875rem;\n  pointer-events: auto;\n  background-color: rgba(255, 255, 255, 0.85);\n  background-clip: padding-box;\n  border: 1px solid rgba(0, 0, 0, 0.1);\n  box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15);\n  border-radius: 0.25rem;\n}\n.toast.showing {\n  opacity: 0;\n}\n.toast:not(.show) {\n  display: none;\n}\n\n.toast-container {\n  width: max-content;\n  max-width: 100%;\n  pointer-events: none;\n}\n.toast-container > :not(:last-child) {\n  margin-bottom: 0.75rem;\n}\n\n.toast-header {\n  display: flex;\n  align-items: center;\n  padding: 0.5rem 0.75rem;\n  color: #6c757d;\n  background-color: rgba(255, 255, 255, 0.85);\n  background-clip: padding-box;\n  border-bottom: 1px solid rgba(0, 0, 0, 0.05);\n  border-top-left-radius: calc(0.25rem - 1px);\n  border-top-right-radius: calc(0.25rem - 1px);\n}\n.toast-header .btn-close {\n  margin-right: -0.375rem;\n  margin-left: 0.75rem;\n}\n\n.toast-body {\n  padding: 0.75rem;\n  word-wrap: break-word;\n}\n\n.modal {\n  position: fixed;\n  top: 0;\n  left: 0;\n  z-index: 1055;\n  display: none;\n  width: 100%;\n  height: 100%;\n  overflow-x: hidden;\n  overflow-y: auto;\n  outline: 0;\n}\n\n.modal-dialog {\n  position: relative;\n  width: auto;\n  margin: 0.5rem;\n  pointer-events: none;\n}\n.modal.fade .modal-dialog {\n  transition: transform 0.3s ease-out;\n  transform: translate(0, -50px);\n}\n@media (prefers-reduced-motion: reduce) {\n  .modal.fade .modal-dialog {\n    transition: none;\n  }\n}\n.modal.show .modal-dialog {\n  transform: none;\n}\n.modal.modal-static .modal-dialog {\n  transform: scale(1.02);\n}\n\n.modal-dialog-scrollable {\n  height: calc(100% - 1rem);\n}\n.modal-dialog-scrollable .modal-content {\n  max-height: 100%;\n  overflow: hidden;\n}\n.modal-dialog-scrollable .modal-body {\n  overflow-y: auto;\n}\n\n.modal-dialog-centered {\n  display: flex;\n  align-items: center;\n  min-height: calc(100% - 1rem);\n}\n\n.modal-content {\n  position: relative;\n  display: flex;\n  flex-direction: column;\n  width: 100%;\n  pointer-events: auto;\n  background-color: #fff;\n  background-clip: padding-box;\n  border: 1px solid rgba(0, 0, 0, 0.2);\n  border-radius: 0.3rem;\n  outline: 0;\n}\n\n.modal-backdrop {\n  position: fixed;\n  top: 0;\n  left: 0;\n  z-index: 1050;\n  width: 100vw;\n  height: 100vh;\n  background-color: #000;\n}\n.modal-backdrop.fade {\n  opacity: 0;\n}\n.modal-backdrop.show {\n  opacity: 0.5;\n}\n\n.modal-header {\n  display: flex;\n  flex-shrink: 0;\n  align-items: center;\n  justify-content: space-between;\n  padding: 1rem 1rem;\n  border-bottom: 1px solid #dee2e6;\n  border-top-left-radius: calc(0.3rem - 1px);\n  border-top-right-radius: calc(0.3rem - 1px);\n}\n.modal-header .btn-close {\n  padding: 0.5rem 0.5rem;\n  margin: -0.5rem -0.5rem -0.5rem auto;\n}\n\n.modal-title {\n  margin-bottom: 0;\n  line-height: 1.5;\n}\n\n.modal-body {\n  position: relative;\n  flex: 1 1 auto;\n  padding: 1rem;\n}\n\n.modal-footer {\n  display: flex;\n  flex-wrap: wrap;\n  flex-shrink: 0;\n  align-items: center;\n  justify-content: flex-end;\n  padding: 0.75rem;\n  border-top: 1px solid #dee2e6;\n  border-bottom-right-radius: calc(0.3rem - 1px);\n  border-bottom-left-radius: calc(0.3rem - 1px);\n}\n.modal-footer > * {\n  margin: 0.25rem;\n}\n\n@media (min-width: 576px) {\n  .modal-dialog {\n    max-width: 500px;\n    margin: 1.75rem auto;\n  }\n  .modal-dialog-scrollable {\n    height: calc(100% - 3.5rem);\n  }\n  .modal-dialog-centered {\n    min-height: calc(100% - 3.5rem);\n  }\n  .modal-sm {\n    max-width: 300px;\n  }\n}\n@media (min-width: 992px) {\n  .modal-lg,\n  .modal-xl {\n    max-width: 800px;\n  }\n}\n@media (min-width: 1200px) {\n  .modal-xl {\n    max-width: 1140px;\n  }\n}\n.modal-fullscreen {\n  width: 100vw;\n  max-width: none;\n  height: 100%;\n  margin: 0;\n}\n.modal-fullscreen .modal-content {\n  height: 100%;\n  border: 0;\n  border-radius: 0;\n}\n.modal-fullscreen .modal-header {\n  border-radius: 0;\n}\n.modal-fullscreen .modal-body {\n  overflow-y: auto;\n}\n.modal-fullscreen .modal-footer {\n  border-radius: 0;\n}\n\n@media (max-width: 575.98px) {\n  .modal-fullscreen-sm-down {\n    width: 100vw;\n    max-width: none;\n    height: 100%;\n    margin: 0;\n  }\n  .modal-fullscreen-sm-down .modal-content {\n    height: 100%;\n    border: 0;\n    border-radius: 0;\n  }\n  .modal-fullscreen-sm-down .modal-header {\n    border-radius: 0;\n  }\n  .modal-fullscreen-sm-down .modal-body {\n    overflow-y: auto;\n  }\n  .modal-fullscreen-sm-down .modal-footer {\n    border-radius: 0;\n  }\n}\n@media (max-width: 767.98px) {\n  .modal-fullscreen-md-down {\n    width: 100vw;\n    max-width: none;\n    height: 100%;\n    margin: 0;\n  }\n  .modal-fullscreen-md-down .modal-content {\n    height: 100%;\n    border: 0;\n    border-radius: 0;\n  }\n  .modal-fullscreen-md-down .modal-header {\n    border-radius: 0;\n  }\n  .modal-fullscreen-md-down .modal-body {\n    overflow-y: auto;\n  }\n  .modal-fullscreen-md-down .modal-footer {\n    border-radius: 0;\n  }\n}\n@media (max-width: 991.98px) {\n  .modal-fullscreen-lg-down {\n    width: 100vw;\n    max-width: none;\n    height: 100%;\n    margin: 0;\n  }\n  .modal-fullscreen-lg-down .modal-content {\n    height: 100%;\n    border: 0;\n    border-radius: 0;\n  }\n  .modal-fullscreen-lg-down .modal-header {\n    border-radius: 0;\n  }\n  .modal-fullscreen-lg-down .modal-body {\n    overflow-y: auto;\n  }\n  .modal-fullscreen-lg-down .modal-footer {\n    border-radius: 0;\n  }\n}\n@media (max-width: 1199.98px) {\n  .modal-fullscreen-xl-down {\n    width: 100vw;\n    max-width: none;\n    height: 100%;\n    margin: 0;\n  }\n  .modal-fullscreen-xl-down .modal-content {\n    height: 100%;\n    border: 0;\n    border-radius: 0;\n  }\n  .modal-fullscreen-xl-down .modal-header {\n    border-radius: 0;\n  }\n  .modal-fullscreen-xl-down .modal-body {\n    overflow-y: auto;\n  }\n  .modal-fullscreen-xl-down .modal-footer {\n    border-radius: 0;\n  }\n}\n@media (max-width: 1399.98px) {\n  .modal-fullscreen-xxl-down {\n    width: 100vw;\n    max-width: none;\n    height: 100%;\n    margin: 0;\n  }\n  .modal-fullscreen-xxl-down .modal-content {\n    height: 100%;\n    border: 0;\n    border-radius: 0;\n  }\n  .modal-fullscreen-xxl-down .modal-header {\n    border-radius: 0;\n  }\n  .modal-fullscreen-xxl-down .modal-body {\n    overflow-y: auto;\n  }\n  .modal-fullscreen-xxl-down .modal-footer {\n    border-radius: 0;\n  }\n}\n.tooltip {\n  position: absolute;\n  z-index: 1080;\n  display: block;\n  margin: 0;\n  font-family: var(--bs-font-sans-serif);\n  font-style: normal;\n  font-weight: 400;\n  line-height: 1.5;\n  text-align: left;\n  text-align: start;\n  text-decoration: none;\n  text-shadow: none;\n  text-transform: none;\n  letter-spacing: normal;\n  word-break: normal;\n  word-spacing: normal;\n  white-space: normal;\n  line-break: auto;\n  font-size: 0.875rem;\n  word-wrap: break-word;\n  opacity: 0;\n}\n.tooltip.show {\n  opacity: 0.9;\n}\n.tooltip .tooltip-arrow {\n  position: absolute;\n  display: block;\n  width: 0.8rem;\n  height: 0.4rem;\n}\n.tooltip .tooltip-arrow::before {\n  position: absolute;\n  content: \"\";\n  border-color: transparent;\n  border-style: solid;\n}\n\n.bs-tooltip-top, .bs-tooltip-auto[data-popper-placement^=top] {\n  padding: 0.4rem 0;\n}\n.bs-tooltip-top .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow {\n  bottom: 0;\n}\n.bs-tooltip-top .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow::before {\n  top: -1px;\n  border-width: 0.4rem 0.4rem 0;\n  border-top-color: #000;\n}\n\n.bs-tooltip-end, .bs-tooltip-auto[data-popper-placement^=right] {\n  padding: 0 0.4rem;\n}\n.bs-tooltip-end .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow {\n  left: 0;\n  width: 0.4rem;\n  height: 0.8rem;\n}\n.bs-tooltip-end .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow::before {\n  right: -1px;\n  border-width: 0.4rem 0.4rem 0.4rem 0;\n  border-right-color: #000;\n}\n\n.bs-tooltip-bottom, .bs-tooltip-auto[data-popper-placement^=bottom] {\n  padding: 0.4rem 0;\n}\n.bs-tooltip-bottom .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow {\n  top: 0;\n}\n.bs-tooltip-bottom .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow::before {\n  bottom: -1px;\n  border-width: 0 0.4rem 0.4rem;\n  border-bottom-color: #000;\n}\n\n.bs-tooltip-start, .bs-tooltip-auto[data-popper-placement^=left] {\n  padding: 0 0.4rem;\n}\n.bs-tooltip-start .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow {\n  right: 0;\n  width: 0.4rem;\n  height: 0.8rem;\n}\n.bs-tooltip-start .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow::before {\n  left: -1px;\n  border-width: 0.4rem 0 0.4rem 0.4rem;\n  border-left-color: #000;\n}\n\n.tooltip-inner {\n  max-width: 200px;\n  padding: 0.25rem 0.5rem;\n  color: #fff;\n  text-align: center;\n  background-color: #000;\n  border-radius: 0.25rem;\n}\n\n.popover {\n  position: absolute;\n  top: 0;\n  left: 0 /* rtl:ignore */;\n  z-index: 1070;\n  display: block;\n  max-width: 276px;\n  font-family: var(--bs-font-sans-serif);\n  font-style: normal;\n  font-weight: 400;\n  line-height: 1.5;\n  text-align: left;\n  text-align: start;\n  text-decoration: none;\n  text-shadow: none;\n  text-transform: none;\n  letter-spacing: normal;\n  word-break: normal;\n  word-spacing: normal;\n  white-space: normal;\n  line-break: auto;\n  font-size: 0.875rem;\n  word-wrap: break-word;\n  background-color: #fff;\n  background-clip: padding-box;\n  border: 1px solid rgba(0, 0, 0, 0.2);\n  border-radius: 0.3rem;\n}\n.popover .popover-arrow {\n  position: absolute;\n  display: block;\n  width: 1rem;\n  height: 0.5rem;\n}\n.popover .popover-arrow::before, .popover .popover-arrow::after {\n  position: absolute;\n  display: block;\n  content: \"\";\n  border-color: transparent;\n  border-style: solid;\n}\n\n.bs-popover-top > .popover-arrow, .bs-popover-auto[data-popper-placement^=top] > .popover-arrow {\n  bottom: calc(-0.5rem - 1px);\n}\n.bs-popover-top > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=top] > .popover-arrow::before {\n  bottom: 0;\n  border-width: 0.5rem 0.5rem 0;\n  border-top-color: rgba(0, 0, 0, 0.25);\n}\n.bs-popover-top > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=top] > .popover-arrow::after {\n  bottom: 1px;\n  border-width: 0.5rem 0.5rem 0;\n  border-top-color: #fff;\n}\n\n.bs-popover-end > .popover-arrow, .bs-popover-auto[data-popper-placement^=right] > .popover-arrow {\n  left: calc(-0.5rem - 1px);\n  width: 0.5rem;\n  height: 1rem;\n}\n.bs-popover-end > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=right] > .popover-arrow::before {\n  left: 0;\n  border-width: 0.5rem 0.5rem 0.5rem 0;\n  border-right-color: rgba(0, 0, 0, 0.25);\n}\n.bs-popover-end > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=right] > .popover-arrow::after {\n  left: 1px;\n  border-width: 0.5rem 0.5rem 0.5rem 0;\n  border-right-color: #fff;\n}\n\n.bs-popover-bottom > .popover-arrow, .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow {\n  top: calc(-0.5rem - 1px);\n}\n.bs-popover-bottom > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow::before {\n  top: 0;\n  border-width: 0 0.5rem 0.5rem 0.5rem;\n  border-bottom-color: rgba(0, 0, 0, 0.25);\n}\n.bs-popover-bottom > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow::after {\n  top: 1px;\n  border-width: 0 0.5rem 0.5rem 0.5rem;\n  border-bottom-color: #fff;\n}\n.bs-popover-bottom .popover-header::before, .bs-popover-auto[data-popper-placement^=bottom] .popover-header::before {\n  position: absolute;\n  top: 0;\n  left: 50%;\n  display: block;\n  width: 1rem;\n  margin-left: -0.5rem;\n  content: \"\";\n  border-bottom: 1px solid #f0f0f0;\n}\n\n.bs-popover-start > .popover-arrow, .bs-popover-auto[data-popper-placement^=left] > .popover-arrow {\n  right: calc(-0.5rem - 1px);\n  width: 0.5rem;\n  height: 1rem;\n}\n.bs-popover-start > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=left] > .popover-arrow::before {\n  right: 0;\n  border-width: 0.5rem 0 0.5rem 0.5rem;\n  border-left-color: rgba(0, 0, 0, 0.25);\n}\n.bs-popover-start > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=left] > .popover-arrow::after {\n  right: 1px;\n  border-width: 0.5rem 0 0.5rem 0.5rem;\n  border-left-color: #fff;\n}\n\n.popover-header {\n  padding: 0.5rem 1rem;\n  margin-bottom: 0;\n  font-size: 1rem;\n  background-color: #f0f0f0;\n  border-bottom: 1px solid rgba(0, 0, 0, 0.2);\n  border-top-left-radius: calc(0.3rem - 1px);\n  border-top-right-radius: calc(0.3rem - 1px);\n}\n.popover-header:empty {\n  display: none;\n}\n\n.popover-body {\n  padding: 1rem 1rem;\n  color: #212529;\n}\n\n.carousel {\n  position: relative;\n}\n\n.carousel.pointer-event {\n  touch-action: pan-y;\n}\n\n.carousel-inner {\n  position: relative;\n  width: 100%;\n  overflow: hidden;\n}\n.carousel-inner::after {\n  display: block;\n  clear: both;\n  content: \"\";\n}\n\n.carousel-item {\n  position: relative;\n  display: none;\n  float: left;\n  width: 100%;\n  margin-right: -100%;\n  backface-visibility: hidden;\n  transition: transform 0.6s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n  .carousel-item {\n    transition: none;\n  }\n}\n\n.carousel-item.active,\n.carousel-item-next,\n.carousel-item-prev {\n  display: block;\n}\n\n/* rtl:begin:ignore */\n.carousel-item-next:not(.carousel-item-start),\n.active.carousel-item-end {\n  transform: translateX(100%);\n}\n\n.carousel-item-prev:not(.carousel-item-end),\n.active.carousel-item-start {\n  transform: translateX(-100%);\n}\n\n/* rtl:end:ignore */\n.carousel-fade .carousel-item {\n  opacity: 0;\n  transition-property: opacity;\n  transform: none;\n}\n.carousel-fade .carousel-item.active,\n.carousel-fade .carousel-item-next.carousel-item-start,\n.carousel-fade .carousel-item-prev.carousel-item-end {\n  z-index: 1;\n  opacity: 1;\n}\n.carousel-fade .active.carousel-item-start,\n.carousel-fade .active.carousel-item-end {\n  z-index: 0;\n  opacity: 0;\n  transition: opacity 0s 0.6s;\n}\n@media (prefers-reduced-motion: reduce) {\n  .carousel-fade .active.carousel-item-start,\n  .carousel-fade .active.carousel-item-end {\n    transition: none;\n  }\n}\n\n.carousel-control-prev,\n.carousel-control-next {\n  position: absolute;\n  top: 0;\n  bottom: 0;\n  z-index: 1;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  width: 15%;\n  padding: 0;\n  color: #fff;\n  text-align: center;\n  background: none;\n  border: 0;\n  opacity: 0.5;\n  transition: opacity 0.15s ease;\n}\n@media (prefers-reduced-motion: reduce) {\n  .carousel-control-prev,\n  .carousel-control-next {\n    transition: none;\n  }\n}\n.carousel-control-prev:hover, .carousel-control-prev:focus,\n.carousel-control-next:hover,\n.carousel-control-next:focus {\n  color: #fff;\n  text-decoration: none;\n  outline: 0;\n  opacity: 0.9;\n}\n\n.carousel-control-prev {\n  left: 0;\n}\n\n.carousel-control-next {\n  right: 0;\n}\n\n.carousel-control-prev-icon,\n.carousel-control-next-icon {\n  display: inline-block;\n  width: 2rem;\n  height: 2rem;\n  background-repeat: no-repeat;\n  background-position: 50%;\n  background-size: 100% 100%;\n}\n\n/* rtl:options: {\n  \"autoRename\": true,\n  \"stringMap\":[ {\n    \"name\"    : \"prev-next\",\n    \"search\"  : \"prev\",\n    \"replace\" : \"next\"\n  } ]\n} */\n.carousel-control-prev-icon {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0z'/%3e%3c/svg%3e\");\n}\n\n.carousel-control-next-icon {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e\");\n}\n\n.carousel-indicators {\n  position: absolute;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 2;\n  display: flex;\n  justify-content: center;\n  padding: 0;\n  margin-right: 15%;\n  margin-bottom: 1rem;\n  margin-left: 15%;\n  list-style: none;\n}\n.carousel-indicators [data-bs-target] {\n  box-sizing: content-box;\n  flex: 0 1 auto;\n  width: 30px;\n  height: 3px;\n  padding: 0;\n  margin-right: 3px;\n  margin-left: 3px;\n  text-indent: -999px;\n  cursor: pointer;\n  background-color: #fff;\n  background-clip: padding-box;\n  border: 0;\n  border-top: 10px solid transparent;\n  border-bottom: 10px solid transparent;\n  opacity: 0.5;\n  transition: opacity 0.6s ease;\n}\n@media (prefers-reduced-motion: reduce) {\n  .carousel-indicators [data-bs-target] {\n    transition: none;\n  }\n}\n.carousel-indicators .active {\n  opacity: 1;\n}\n\n.carousel-caption {\n  position: absolute;\n  right: 15%;\n  bottom: 1.25rem;\n  left: 15%;\n  padding-top: 1.25rem;\n  padding-bottom: 1.25rem;\n  color: #fff;\n  text-align: center;\n}\n\n.carousel-dark .carousel-control-prev-icon,\n.carousel-dark .carousel-control-next-icon {\n  filter: invert(1) grayscale(100);\n}\n.carousel-dark .carousel-indicators [data-bs-target] {\n  background-color: #000;\n}\n.carousel-dark .carousel-caption {\n  color: #000;\n}\n\n@keyframes spinner-border {\n  to {\n    transform: rotate(360deg) /* rtl:ignore */;\n  }\n}\n.spinner-border {\n  display: inline-block;\n  width: 2rem;\n  height: 2rem;\n  vertical-align: -0.125em;\n  border: 0.25em solid currentColor;\n  border-right-color: transparent;\n  border-radius: 50%;\n  animation: 0.75s linear infinite spinner-border;\n}\n\n.spinner-border-sm {\n  width: 1rem;\n  height: 1rem;\n  border-width: 0.2em;\n}\n\n@keyframes spinner-grow {\n  0% {\n    transform: scale(0);\n  }\n  50% {\n    opacity: 1;\n    transform: none;\n  }\n}\n.spinner-grow {\n  display: inline-block;\n  width: 2rem;\n  height: 2rem;\n  vertical-align: -0.125em;\n  background-color: currentColor;\n  border-radius: 50%;\n  opacity: 0;\n  animation: 0.75s linear infinite spinner-grow;\n}\n\n.spinner-grow-sm {\n  width: 1rem;\n  height: 1rem;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .spinner-border,\n  .spinner-grow {\n    animation-duration: 1.5s;\n  }\n}\n.offcanvas {\n  position: fixed;\n  bottom: 0;\n  z-index: 1045;\n  display: flex;\n  flex-direction: column;\n  max-width: 100%;\n  visibility: hidden;\n  background-color: #fff;\n  background-clip: padding-box;\n  outline: 0;\n  transition: transform 0.3s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n  .offcanvas {\n    transition: none;\n  }\n}\n\n.offcanvas-backdrop {\n  position: fixed;\n  top: 0;\n  left: 0;\n  z-index: 1040;\n  width: 100vw;\n  height: 100vh;\n  background-color: #000;\n}\n.offcanvas-backdrop.fade {\n  opacity: 0;\n}\n.offcanvas-backdrop.show {\n  opacity: 0.5;\n}\n\n.offcanvas-header {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  padding: 1rem 1rem;\n}\n.offcanvas-header .btn-close {\n  padding: 0.5rem 0.5rem;\n  margin-top: -0.5rem;\n  margin-right: -0.5rem;\n  margin-bottom: -0.5rem;\n}\n\n.offcanvas-title {\n  margin-bottom: 0;\n  line-height: 1.5;\n}\n\n.offcanvas-body {\n  flex-grow: 1;\n  padding: 1rem 1rem;\n  overflow-y: auto;\n}\n\n.offcanvas-start {\n  top: 0;\n  left: 0;\n  width: 400px;\n  border-right: 1px solid rgba(0, 0, 0, 0.2);\n  transform: translateX(-100%);\n}\n\n.offcanvas-end {\n  top: 0;\n  right: 0;\n  width: 400px;\n  border-left: 1px solid rgba(0, 0, 0, 0.2);\n  transform: translateX(100%);\n}\n\n.offcanvas-top {\n  top: 0;\n  right: 0;\n  left: 0;\n  height: 30vh;\n  max-height: 100%;\n  border-bottom: 1px solid rgba(0, 0, 0, 0.2);\n  transform: translateY(-100%);\n}\n\n.offcanvas-bottom {\n  right: 0;\n  left: 0;\n  height: 30vh;\n  max-height: 100%;\n  border-top: 1px solid rgba(0, 0, 0, 0.2);\n  transform: translateY(100%);\n}\n\n.offcanvas.show {\n  transform: none;\n}\n\n.placeholder {\n  display: inline-block;\n  min-height: 1em;\n  vertical-align: middle;\n  cursor: wait;\n  background-color: currentColor;\n  opacity: 0.5;\n}\n.placeholder.btn::before {\n  display: inline-block;\n  content: \"\";\n}\n\n.placeholder-xs {\n  min-height: 0.6em;\n}\n\n.placeholder-sm {\n  min-height: 0.8em;\n}\n\n.placeholder-lg {\n  min-height: 1.2em;\n}\n\n.placeholder-glow .placeholder {\n  animation: placeholder-glow 2s ease-in-out infinite;\n}\n\n@keyframes placeholder-glow {\n  50% {\n    opacity: 0.2;\n  }\n}\n.placeholder-wave {\n  mask-image: linear-gradient(130deg, #000 55%, rgba(0, 0, 0, 0.8) 75%, #000 95%);\n  mask-size: 200% 100%;\n  animation: placeholder-wave 2s linear infinite;\n}\n\n@keyframes placeholder-wave {\n  100% {\n    mask-position: -200% 0%;\n  }\n}\n.clearfix::after {\n  display: block;\n  clear: both;\n  content: \"\";\n}\n\n.link-primary {\n  color: #03378d;\n}\n.link-primary:hover, .link-primary:focus {\n  color: #022c71;\n}\n\n.link-secondary {\n  color: #6c757d;\n}\n.link-secondary:hover, .link-secondary:focus {\n  color: #565e64;\n}\n\n.link-success {\n  color: #28a745;\n}\n.link-success:hover, .link-success:focus {\n  color: #53b96a;\n}\n\n.link-info {\n  color: #17a2b8;\n}\n.link-info:hover, .link-info:focus {\n  color: #45b5c6;\n}\n\n.link-warning {\n  color: #ffc107;\n}\n.link-warning:hover, .link-warning:focus {\n  color: #ffcd39;\n}\n\n.link-danger {\n  color: #dc3545;\n}\n.link-danger:hover, .link-danger:focus {\n  color: #b02a37;\n}\n\n.link-light {\n  color: #f8f9fa;\n}\n.link-light:hover, .link-light:focus {\n  color: #f9fafb;\n}\n\n.link-dark {\n  color: #03378d;\n}\n.link-dark:hover, .link-dark:focus {\n  color: #022c71;\n}\n\n.ratio {\n  position: relative;\n  width: 100%;\n}\n.ratio::before {\n  display: block;\n  padding-top: var(--bs-aspect-ratio);\n  content: \"\";\n}\n.ratio > * {\n  position: absolute;\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n}\n\n.ratio-1x1 {\n  --bs-aspect-ratio: 100%;\n}\n\n.ratio-4x3 {\n  --bs-aspect-ratio: 75%;\n}\n\n.ratio-16x9 {\n  --bs-aspect-ratio: 56.25%;\n}\n\n.ratio-21x9 {\n  --bs-aspect-ratio: 42.8571428571%;\n}\n\n.fixed-top {\n  position: fixed;\n  top: 0;\n  right: 0;\n  left: 0;\n  z-index: 1030;\n}\n\n.fixed-bottom {\n  position: fixed;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 1030;\n}\n\n.sticky-top {\n  position: sticky;\n  top: 0;\n  z-index: 1020;\n}\n\n@media (min-width: 576px) {\n  .sticky-sm-top {\n    position: sticky;\n    top: 0;\n    z-index: 1020;\n  }\n}\n@media (min-width: 768px) {\n  .sticky-md-top {\n    position: sticky;\n    top: 0;\n    z-index: 1020;\n  }\n}\n@media (min-width: 992px) {\n  .sticky-lg-top {\n    position: sticky;\n    top: 0;\n    z-index: 1020;\n  }\n}\n@media (min-width: 1200px) {\n  .sticky-xl-top {\n    position: sticky;\n    top: 0;\n    z-index: 1020;\n  }\n}\n@media (min-width: 1400px) {\n  .sticky-xxl-top {\n    position: sticky;\n    top: 0;\n    z-index: 1020;\n  }\n}\n.hstack {\n  display: flex;\n  flex-direction: row;\n  align-items: center;\n  align-self: stretch;\n}\n\n.vstack {\n  display: flex;\n  flex: 1 1 auto;\n  flex-direction: column;\n  align-self: stretch;\n}\n\n.visually-hidden,\n.visually-hidden-focusable:not(:focus):not(:focus-within) {\n  position: absolute !important;\n  width: 1px !important;\n  height: 1px !important;\n  padding: 0 !important;\n  margin: -1px !important;\n  overflow: hidden !important;\n  clip: rect(0, 0, 0, 0) !important;\n  white-space: nowrap !important;\n  border: 0 !important;\n}\n\n.stretched-link::after {\n  position: absolute;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 1;\n  content: \"\";\n}\n\n.text-truncate {\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n}\n\n.vr {\n  display: inline-block;\n  align-self: stretch;\n  width: 1px;\n  min-height: 1em;\n  background-color: currentColor;\n  opacity: 0.25;\n}\n\n.align-baseline {\n  vertical-align: baseline !important;\n}\n\n.align-top {\n  vertical-align: top !important;\n}\n\n.align-middle {\n  vertical-align: middle !important;\n}\n\n.align-bottom {\n  vertical-align: bottom !important;\n}\n\n.align-text-bottom {\n  vertical-align: text-bottom !important;\n}\n\n.align-text-top {\n  vertical-align: text-top !important;\n}\n\n.float-start {\n  float: left !important;\n}\n\n.float-end {\n  float: right !important;\n}\n\n.float-none {\n  float: none !important;\n}\n\n.opacity-0 {\n  opacity: 0 !important;\n}\n\n.opacity-25 {\n  opacity: 0.25 !important;\n}\n\n.opacity-50 {\n  opacity: 0.5 !important;\n}\n\n.opacity-75 {\n  opacity: 0.75 !important;\n}\n\n.opacity-100 {\n  opacity: 1 !important;\n}\n\n.overflow-auto {\n  overflow: auto !important;\n}\n\n.overflow-hidden {\n  overflow: hidden !important;\n}\n\n.overflow-visible {\n  overflow: visible !important;\n}\n\n.overflow-scroll {\n  overflow: scroll !important;\n}\n\n.d-inline {\n  display: inline !important;\n}\n\n.d-inline-block {\n  display: inline-block !important;\n}\n\n.d-block {\n  display: block !important;\n}\n\n.d-grid {\n  display: grid !important;\n}\n\n.d-table {\n  display: table !important;\n}\n\n.d-table-row {\n  display: table-row !important;\n}\n\n.d-table-cell {\n  display: table-cell !important;\n}\n\n.d-flex {\n  display: flex !important;\n}\n\n.d-inline-flex {\n  display: inline-flex !important;\n}\n\n.d-none {\n  display: none !important;\n}\n\n.shadow {\n  box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15) !important;\n}\n\n.shadow-sm {\n  box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075) !important;\n}\n\n.shadow-lg {\n  box-shadow: 0 1rem 3rem rgba(0, 0, 0, 0.175) !important;\n}\n\n.shadow-none {\n  box-shadow: none !important;\n}\n\n.position-static {\n  position: static !important;\n}\n\n.position-relative {\n  position: relative !important;\n}\n\n.position-absolute {\n  position: absolute !important;\n}\n\n.position-fixed {\n  position: fixed !important;\n}\n\n.position-sticky {\n  position: sticky !important;\n}\n\n.top-0 {\n  top: 0 !important;\n}\n\n.top-50 {\n  top: 50% !important;\n}\n\n.top-100 {\n  top: 100% !important;\n}\n\n.bottom-0 {\n  bottom: 0 !important;\n}\n\n.bottom-50 {\n  bottom: 50% !important;\n}\n\n.bottom-100 {\n  bottom: 100% !important;\n}\n\n.start-0 {\n  left: 0 !important;\n}\n\n.start-50 {\n  left: 50% !important;\n}\n\n.start-100 {\n  left: 100% !important;\n}\n\n.end-0 {\n  right: 0 !important;\n}\n\n.end-50 {\n  right: 50% !important;\n}\n\n.end-100 {\n  right: 100% !important;\n}\n\n.translate-middle {\n  transform: translate(-50%, -50%) !important;\n}\n\n.translate-middle-x {\n  transform: translateX(-50%) !important;\n}\n\n.translate-middle-y {\n  transform: translateY(-50%) !important;\n}\n\n.border {\n  border: 1px solid #dee2e6 !important;\n}\n\n.border-0 {\n  border: 0 !important;\n}\n\n.border-top {\n  border-top: 1px solid #dee2e6 !important;\n}\n\n.border-top-0 {\n  border-top: 0 !important;\n}\n\n.border-end {\n  border-right: 1px solid #dee2e6 !important;\n}\n\n.border-end-0 {\n  border-right: 0 !important;\n}\n\n.border-bottom {\n  border-bottom: 1px solid #dee2e6 !important;\n}\n\n.border-bottom-0 {\n  border-bottom: 0 !important;\n}\n\n.border-start {\n  border-left: 1px solid #dee2e6 !important;\n}\n\n.border-start-0 {\n  border-left: 0 !important;\n}\n\n.border-primary {\n  border-color: #03378d !important;\n}\n\n.border-secondary {\n  border-color: #6c757d !important;\n}\n\n.border-success {\n  border-color: #28a745 !important;\n}\n\n.border-info {\n  border-color: #17a2b8 !important;\n}\n\n.border-warning {\n  border-color: #ffc107 !important;\n}\n\n.border-danger {\n  border-color: #dc3545 !important;\n}\n\n.border-light {\n  border-color: #f8f9fa !important;\n}\n\n.border-dark {\n  border-color: #03378d !important;\n}\n\n.border-white {\n  border-color: #fff !important;\n}\n\n.border-1 {\n  border-width: 1px !important;\n}\n\n.border-2 {\n  border-width: 2px !important;\n}\n\n.border-3 {\n  border-width: 3px !important;\n}\n\n.border-4 {\n  border-width: 4px !important;\n}\n\n.border-5 {\n  border-width: 5px !important;\n}\n\n.w-25 {\n  width: 25% !important;\n}\n\n.w-50 {\n  width: 50% !important;\n}\n\n.w-75 {\n  width: 75% !important;\n}\n\n.w-100 {\n  width: 100% !important;\n}\n\n.w-auto {\n  width: auto !important;\n}\n\n.mw-100 {\n  max-width: 100% !important;\n}\n\n.vw-100 {\n  width: 100vw !important;\n}\n\n.min-vw-100 {\n  min-width: 100vw !important;\n}\n\n.h-25 {\n  height: 25% !important;\n}\n\n.h-50 {\n  height: 50% !important;\n}\n\n.h-75 {\n  height: 75% !important;\n}\n\n.h-100 {\n  height: 100% !important;\n}\n\n.h-auto {\n  height: auto !important;\n}\n\n.mh-100 {\n  max-height: 100% !important;\n}\n\n.vh-100 {\n  height: 100vh !important;\n}\n\n.min-vh-100 {\n  min-height: 100vh !important;\n}\n\n.flex-fill {\n  flex: 1 1 auto !important;\n}\n\n.flex-row {\n  flex-direction: row !important;\n}\n\n.flex-column {\n  flex-direction: column !important;\n}\n\n.flex-row-reverse {\n  flex-direction: row-reverse !important;\n}\n\n.flex-column-reverse {\n  flex-direction: column-reverse !important;\n}\n\n.flex-grow-0 {\n  flex-grow: 0 !important;\n}\n\n.flex-grow-1 {\n  flex-grow: 1 !important;\n}\n\n.flex-shrink-0 {\n  flex-shrink: 0 !important;\n}\n\n.flex-shrink-1 {\n  flex-shrink: 1 !important;\n}\n\n.flex-wrap {\n  flex-wrap: wrap !important;\n}\n\n.flex-nowrap {\n  flex-wrap: nowrap !important;\n}\n\n.flex-wrap-reverse {\n  flex-wrap: wrap-reverse !important;\n}\n\n.gap-0 {\n  gap: 0 !important;\n}\n\n.gap-1 {\n  gap: 0.25rem !important;\n}\n\n.gap-2 {\n  gap: 0.5rem !important;\n}\n\n.gap-3 {\n  gap: 1rem !important;\n}\n\n.gap-4 {\n  gap: 1.5rem !important;\n}\n\n.gap-5 {\n  gap: 3rem !important;\n}\n\n.justify-content-start {\n  justify-content: flex-start !important;\n}\n\n.justify-content-end {\n  justify-content: flex-end !important;\n}\n\n.justify-content-center {\n  justify-content: center !important;\n}\n\n.justify-content-between {\n  justify-content: space-between !important;\n}\n\n.justify-content-around {\n  justify-content: space-around !important;\n}\n\n.justify-content-evenly {\n  justify-content: space-evenly !important;\n}\n\n.align-items-start {\n  align-items: flex-start !important;\n}\n\n.align-items-end {\n  align-items: flex-end !important;\n}\n\n.align-items-center {\n  align-items: center !important;\n}\n\n.align-items-baseline {\n  align-items: baseline !important;\n}\n\n.align-items-stretch {\n  align-items: stretch !important;\n}\n\n.align-content-start {\n  align-content: flex-start !important;\n}\n\n.align-content-end {\n  align-content: flex-end !important;\n}\n\n.align-content-center {\n  align-content: center !important;\n}\n\n.align-content-between {\n  align-content: space-between !important;\n}\n\n.align-content-around {\n  align-content: space-around !important;\n}\n\n.align-content-stretch {\n  align-content: stretch !important;\n}\n\n.align-self-auto {\n  align-self: auto !important;\n}\n\n.align-self-start {\n  align-self: flex-start !important;\n}\n\n.align-self-end {\n  align-self: flex-end !important;\n}\n\n.align-self-center {\n  align-self: center !important;\n}\n\n.align-self-baseline {\n  align-self: baseline !important;\n}\n\n.align-self-stretch {\n  align-self: stretch !important;\n}\n\n.order-first {\n  order: -1 !important;\n}\n\n.order-0 {\n  order: 0 !important;\n}\n\n.order-1 {\n  order: 1 !important;\n}\n\n.order-2 {\n  order: 2 !important;\n}\n\n.order-3 {\n  order: 3 !important;\n}\n\n.order-4 {\n  order: 4 !important;\n}\n\n.order-5 {\n  order: 5 !important;\n}\n\n.order-last {\n  order: 6 !important;\n}\n\n.m-0 {\n  margin: 0 !important;\n}\n\n.m-1 {\n  margin: 0.25rem !important;\n}\n\n.m-2 {\n  margin: 0.5rem !important;\n}\n\n.m-3 {\n  margin: 1rem !important;\n}\n\n.m-4 {\n  margin: 1.5rem !important;\n}\n\n.m-5 {\n  margin: 3rem !important;\n}\n\n.m-auto {\n  margin: auto !important;\n}\n\n.mx-0 {\n  margin-right: 0 !important;\n  margin-left: 0 !important;\n}\n\n.mx-1 {\n  margin-right: 0.25rem !important;\n  margin-left: 0.25rem !important;\n}\n\n.mx-2 {\n  margin-right: 0.5rem !important;\n  margin-left: 0.5rem !important;\n}\n\n.mx-3 {\n  margin-right: 1rem !important;\n  margin-left: 1rem !important;\n}\n\n.mx-4 {\n  margin-right: 1.5rem !important;\n  margin-left: 1.5rem !important;\n}\n\n.mx-5 {\n  margin-right: 3rem !important;\n  margin-left: 3rem !important;\n}\n\n.mx-auto {\n  margin-right: auto !important;\n  margin-left: auto !important;\n}\n\n.my-0 {\n  margin-top: 0 !important;\n  margin-bottom: 0 !important;\n}\n\n.my-1 {\n  margin-top: 0.25rem !important;\n  margin-bottom: 0.25rem !important;\n}\n\n.my-2 {\n  margin-top: 0.5rem !important;\n  margin-bottom: 0.5rem !important;\n}\n\n.my-3 {\n  margin-top: 1rem !important;\n  margin-bottom: 1rem !important;\n}\n\n.my-4 {\n  margin-top: 1.5rem !important;\n  margin-bottom: 1.5rem !important;\n}\n\n.my-5 {\n  margin-top: 3rem !important;\n  margin-bottom: 3rem !important;\n}\n\n.my-auto {\n  margin-top: auto !important;\n  margin-bottom: auto !important;\n}\n\n.mt-0 {\n  margin-top: 0 !important;\n}\n\n.mt-1 {\n  margin-top: 0.25rem !important;\n}\n\n.mt-2 {\n  margin-top: 0.5rem !important;\n}\n\n.mt-3 {\n  margin-top: 1rem !important;\n}\n\n.mt-4 {\n  margin-top: 1.5rem !important;\n}\n\n.mt-5 {\n  margin-top: 3rem !important;\n}\n\n.mt-auto {\n  margin-top: auto !important;\n}\n\n.me-0 {\n  margin-right: 0 !important;\n}\n\n.me-1 {\n  margin-right: 0.25rem !important;\n}\n\n.me-2 {\n  margin-right: 0.5rem !important;\n}\n\n.me-3 {\n  margin-right: 1rem !important;\n}\n\n.me-4 {\n  margin-right: 1.5rem !important;\n}\n\n.me-5 {\n  margin-right: 3rem !important;\n}\n\n.me-auto {\n  margin-right: auto !important;\n}\n\n.mb-0 {\n  margin-bottom: 0 !important;\n}\n\n.mb-1 {\n  margin-bottom: 0.25rem !important;\n}\n\n.mb-2 {\n  margin-bottom: 0.5rem !important;\n}\n\n.mb-3 {\n  margin-bottom: 1rem !important;\n}\n\n.mb-4 {\n  margin-bottom: 1.5rem !important;\n}\n\n.mb-5 {\n  margin-bottom: 3rem !important;\n}\n\n.mb-auto {\n  margin-bottom: auto !important;\n}\n\n.ms-0 {\n  margin-left: 0 !important;\n}\n\n.ms-1 {\n  margin-left: 0.25rem !important;\n}\n\n.ms-2 {\n  margin-left: 0.5rem !important;\n}\n\n.ms-3 {\n  margin-left: 1rem !important;\n}\n\n.ms-4 {\n  margin-left: 1.5rem !important;\n}\n\n.ms-5 {\n  margin-left: 3rem !important;\n}\n\n.ms-auto {\n  margin-left: auto !important;\n}\n\n.p-0 {\n  padding: 0 !important;\n}\n\n.p-1 {\n  padding: 0.25rem !important;\n}\n\n.p-2 {\n  padding: 0.5rem !important;\n}\n\n.p-3 {\n  padding: 1rem !important;\n}\n\n.p-4 {\n  padding: 1.5rem !important;\n}\n\n.p-5 {\n  padding: 3rem !important;\n}\n\n.px-0 {\n  padding-right: 0 !important;\n  padding-left: 0 !important;\n}\n\n.px-1 {\n  padding-right: 0.25rem !important;\n  padding-left: 0.25rem !important;\n}\n\n.px-2 {\n  padding-right: 0.5rem !important;\n  padding-left: 0.5rem !important;\n}\n\n.px-3 {\n  padding-right: 1rem !important;\n  padding-left: 1rem !important;\n}\n\n.px-4 {\n  padding-right: 1.5rem !important;\n  padding-left: 1.5rem !important;\n}\n\n.px-5 {\n  padding-right: 3rem !important;\n  padding-left: 3rem !important;\n}\n\n.py-0 {\n  padding-top: 0 !important;\n  padding-bottom: 0 !important;\n}\n\n.py-1 {\n  padding-top: 0.25rem !important;\n  padding-bottom: 0.25rem !important;\n}\n\n.py-2 {\n  padding-top: 0.5rem !important;\n  padding-bottom: 0.5rem !important;\n}\n\n.py-3 {\n  padding-top: 1rem !important;\n  padding-bottom: 1rem !important;\n}\n\n.py-4 {\n  padding-top: 1.5rem !important;\n  padding-bottom: 1.5rem !important;\n}\n\n.py-5 {\n  padding-top: 3rem !important;\n  padding-bottom: 3rem !important;\n}\n\n.pt-0 {\n  padding-top: 0 !important;\n}\n\n.pt-1 {\n  padding-top: 0.25rem !important;\n}\n\n.pt-2 {\n  padding-top: 0.5rem !important;\n}\n\n.pt-3 {\n  padding-top: 1rem !important;\n}\n\n.pt-4 {\n  padding-top: 1.5rem !important;\n}\n\n.pt-5 {\n  padding-top: 3rem !important;\n}\n\n.pe-0 {\n  padding-right: 0 !important;\n}\n\n.pe-1 {\n  padding-right: 0.25rem !important;\n}\n\n.pe-2 {\n  padding-right: 0.5rem !important;\n}\n\n.pe-3 {\n  padding-right: 1rem !important;\n}\n\n.pe-4 {\n  padding-right: 1.5rem !important;\n}\n\n.pe-5 {\n  padding-right: 3rem !important;\n}\n\n.pb-0 {\n  padding-bottom: 0 !important;\n}\n\n.pb-1 {\n  padding-bottom: 0.25rem !important;\n}\n\n.pb-2 {\n  padding-bottom: 0.5rem !important;\n}\n\n.pb-3 {\n  padding-bottom: 1rem !important;\n}\n\n.pb-4 {\n  padding-bottom: 1.5rem !important;\n}\n\n.pb-5 {\n  padding-bottom: 3rem !important;\n}\n\n.ps-0 {\n  padding-left: 0 !important;\n}\n\n.ps-1 {\n  padding-left: 0.25rem !important;\n}\n\n.ps-2 {\n  padding-left: 0.5rem !important;\n}\n\n.ps-3 {\n  padding-left: 1rem !important;\n}\n\n.ps-4 {\n  padding-left: 1.5rem !important;\n}\n\n.ps-5 {\n  padding-left: 3rem !important;\n}\n\n.font-monospace {\n  font-family: var(--bs-font-monospace) !important;\n}\n\n.fs-1 {\n  font-size: calc(1.375rem + 1.5vw) !important;\n}\n\n.fs-2 {\n  font-size: calc(1.325rem + 0.9vw) !important;\n}\n\n.fs-3 {\n  font-size: calc(1.3rem + 0.6vw) !important;\n}\n\n.fs-4 {\n  font-size: calc(1.275rem + 0.3vw) !important;\n}\n\n.fs-5 {\n  font-size: 1.25rem !important;\n}\n\n.fs-6 {\n  font-size: 1rem !important;\n}\n\n.fst-italic {\n  font-style: italic !important;\n}\n\n.fst-normal {\n  font-style: normal !important;\n}\n\n.fw-light {\n  font-weight: 300 !important;\n}\n\n.fw-lighter {\n  font-weight: lighter !important;\n}\n\n.fw-normal {\n  font-weight: 400 !important;\n}\n\n.fw-bold {\n  font-weight: 700 !important;\n}\n\n.fw-bolder {\n  font-weight: bolder !important;\n}\n\n.lh-1 {\n  line-height: 1 !important;\n}\n\n.lh-sm {\n  line-height: 1.25 !important;\n}\n\n.lh-base {\n  line-height: 1.5 !important;\n}\n\n.lh-lg {\n  line-height: 2 !important;\n}\n\n.text-start {\n  text-align: left !important;\n}\n\n.text-end {\n  text-align: right !important;\n}\n\n.text-center {\n  text-align: center !important;\n}\n\n.text-decoration-none {\n  text-decoration: none !important;\n}\n\n.text-decoration-underline {\n  text-decoration: underline !important;\n}\n\n.text-decoration-line-through {\n  text-decoration: line-through !important;\n}\n\n.text-lowercase {\n  text-transform: lowercase !important;\n}\n\n.text-uppercase {\n  text-transform: uppercase !important;\n}\n\n.text-capitalize {\n  text-transform: capitalize !important;\n}\n\n.text-wrap {\n  white-space: normal !important;\n}\n\n.text-nowrap {\n  white-space: nowrap !important;\n}\n\n/* rtl:begin:remove */\n.text-break {\n  word-wrap: break-word !important;\n  word-break: break-word !important;\n}\n\n/* rtl:end:remove */\n.text-primary {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-primary-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-secondary {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-secondary-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-success {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-success-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-info {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-info-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-warning {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-warning-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-danger {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-danger-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-light {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-light-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-dark {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-dark-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-black {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-black-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-white {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-white-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-body {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-body-color-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-muted {\n  --bs-text-opacity: 1;\n  color: #6c757d !important;\n}\n\n.text-black-50 {\n  --bs-text-opacity: 1;\n  color: rgba(0, 0, 0, 0.5) !important;\n}\n\n.text-white-50 {\n  --bs-text-opacity: 1;\n  color: rgba(255, 255, 255, 0.5) !important;\n}\n\n.text-reset {\n  --bs-text-opacity: 1;\n  color: inherit !important;\n}\n\n.text-opacity-25 {\n  --bs-text-opacity: 0.25;\n}\n\n.text-opacity-50 {\n  --bs-text-opacity: 0.5;\n}\n\n.text-opacity-75 {\n  --bs-text-opacity: 0.75;\n}\n\n.text-opacity-100 {\n  --bs-text-opacity: 1;\n}\n\n.bg-primary {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-primary-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-secondary {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-secondary-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-success {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-success-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-info {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-info-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-warning {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-warning-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-danger {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-danger-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-light {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-light-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-dark {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-dark-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-black {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-black-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-white {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-white-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-body {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-body-bg-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-transparent {\n  --bs-bg-opacity: 1;\n  background-color: transparent !important;\n}\n\n.bg-opacity-10 {\n  --bs-bg-opacity: 0.1;\n}\n\n.bg-opacity-25 {\n  --bs-bg-opacity: 0.25;\n}\n\n.bg-opacity-50 {\n  --bs-bg-opacity: 0.5;\n}\n\n.bg-opacity-75 {\n  --bs-bg-opacity: 0.75;\n}\n\n.bg-opacity-100 {\n  --bs-bg-opacity: 1;\n}\n\n.bg-gradient {\n  background-image: var(--bs-gradient) !important;\n}\n\n.user-select-all {\n  user-select: all !important;\n}\n\n.user-select-auto {\n  user-select: auto !important;\n}\n\n.user-select-none {\n  user-select: none !important;\n}\n\n.pe-none {\n  pointer-events: none !important;\n}\n\n.pe-auto {\n  pointer-events: auto !important;\n}\n\n.rounded {\n  border-radius: 0.25rem !important;\n}\n\n.rounded-0 {\n  border-radius: 0 !important;\n}\n\n.rounded-1 {\n  border-radius: 0.2rem !important;\n}\n\n.rounded-2 {\n  border-radius: 0.25rem !important;\n}\n\n.rounded-3 {\n  border-radius: 0.3rem !important;\n}\n\n.rounded-circle {\n  border-radius: 50% !important;\n}\n\n.rounded-pill {\n  border-radius: 50rem !important;\n}\n\n.rounded-top {\n  border-top-left-radius: 0.25rem !important;\n  border-top-right-radius: 0.25rem !important;\n}\n\n.rounded-end {\n  border-top-right-radius: 0.25rem !important;\n  border-bottom-right-radius: 0.25rem !important;\n}\n\n.rounded-bottom {\n  border-bottom-right-radius: 0.25rem !important;\n  border-bottom-left-radius: 0.25rem !important;\n}\n\n.rounded-start {\n  border-bottom-left-radius: 0.25rem !important;\n  border-top-left-radius: 0.25rem !important;\n}\n\n.visible {\n  visibility: visible !important;\n}\n\n.invisible {\n  visibility: hidden !important;\n}\n\n@media (min-width: 576px) {\n  .float-sm-start {\n    float: left !important;\n  }\n  .float-sm-end {\n    float: right !important;\n  }\n  .float-sm-none {\n    float: none !important;\n  }\n  .d-sm-inline {\n    display: inline !important;\n  }\n  .d-sm-inline-block {\n    display: inline-block !important;\n  }\n  .d-sm-block {\n    display: block !important;\n  }\n  .d-sm-grid {\n    display: grid !important;\n  }\n  .d-sm-table {\n    display: table !important;\n  }\n  .d-sm-table-row {\n    display: table-row !important;\n  }\n  .d-sm-table-cell {\n    display: table-cell !important;\n  }\n  .d-sm-flex {\n    display: flex !important;\n  }\n  .d-sm-inline-flex {\n    display: inline-flex !important;\n  }\n  .d-sm-none {\n    display: none !important;\n  }\n  .flex-sm-fill {\n    flex: 1 1 auto !important;\n  }\n  .flex-sm-row {\n    flex-direction: row !important;\n  }\n  .flex-sm-column {\n    flex-direction: column !important;\n  }\n  .flex-sm-row-reverse {\n    flex-direction: row-reverse !important;\n  }\n  .flex-sm-column-reverse {\n    flex-direction: column-reverse !important;\n  }\n  .flex-sm-grow-0 {\n    flex-grow: 0 !important;\n  }\n  .flex-sm-grow-1 {\n    flex-grow: 1 !important;\n  }\n  .flex-sm-shrink-0 {\n    flex-shrink: 0 !important;\n  }\n  .flex-sm-shrink-1 {\n    flex-shrink: 1 !important;\n  }\n  .flex-sm-wrap {\n    flex-wrap: wrap !important;\n  }\n  .flex-sm-nowrap {\n    flex-wrap: nowrap !important;\n  }\n  .flex-sm-wrap-reverse {\n    flex-wrap: wrap-reverse !important;\n  }\n  .gap-sm-0 {\n    gap: 0 !important;\n  }\n  .gap-sm-1 {\n    gap: 0.25rem !important;\n  }\n  .gap-sm-2 {\n    gap: 0.5rem !important;\n  }\n  .gap-sm-3 {\n    gap: 1rem !important;\n  }\n  .gap-sm-4 {\n    gap: 1.5rem !important;\n  }\n  .gap-sm-5 {\n    gap: 3rem !important;\n  }\n  .justify-content-sm-start {\n    justify-content: flex-start !important;\n  }\n  .justify-content-sm-end {\n    justify-content: flex-end !important;\n  }\n  .justify-content-sm-center {\n    justify-content: center !important;\n  }\n  .justify-content-sm-between {\n    justify-content: space-between !important;\n  }\n  .justify-content-sm-around {\n    justify-content: space-around !important;\n  }\n  .justify-content-sm-evenly {\n    justify-content: space-evenly !important;\n  }\n  .align-items-sm-start {\n    align-items: flex-start !important;\n  }\n  .align-items-sm-end {\n    align-items: flex-end !important;\n  }\n  .align-items-sm-center {\n    align-items: center !important;\n  }\n  .align-items-sm-baseline {\n    align-items: baseline !important;\n  }\n  .align-items-sm-stretch {\n    align-items: stretch !important;\n  }\n  .align-content-sm-start {\n    align-content: flex-start !important;\n  }\n  .align-content-sm-end {\n    align-content: flex-end !important;\n  }\n  .align-content-sm-center {\n    align-content: center !important;\n  }\n  .align-content-sm-between {\n    align-content: space-between !important;\n  }\n  .align-content-sm-around {\n    align-content: space-around !important;\n  }\n  .align-content-sm-stretch {\n    align-content: stretch !important;\n  }\n  .align-self-sm-auto {\n    align-self: auto !important;\n  }\n  .align-self-sm-start {\n    align-self: flex-start !important;\n  }\n  .align-self-sm-end {\n    align-self: flex-end !important;\n  }\n  .align-self-sm-center {\n    align-self: center !important;\n  }\n  .align-self-sm-baseline {\n    align-self: baseline !important;\n  }\n  .align-self-sm-stretch {\n    align-self: stretch !important;\n  }\n  .order-sm-first {\n    order: -1 !important;\n  }\n  .order-sm-0 {\n    order: 0 !important;\n  }\n  .order-sm-1 {\n    order: 1 !important;\n  }\n  .order-sm-2 {\n    order: 2 !important;\n  }\n  .order-sm-3 {\n    order: 3 !important;\n  }\n  .order-sm-4 {\n    order: 4 !important;\n  }\n  .order-sm-5 {\n    order: 5 !important;\n  }\n  .order-sm-last {\n    order: 6 !important;\n  }\n  .m-sm-0 {\n    margin: 0 !important;\n  }\n  .m-sm-1 {\n    margin: 0.25rem !important;\n  }\n  .m-sm-2 {\n    margin: 0.5rem !important;\n  }\n  .m-sm-3 {\n    margin: 1rem !important;\n  }\n  .m-sm-4 {\n    margin: 1.5rem !important;\n  }\n  .m-sm-5 {\n    margin: 3rem !important;\n  }\n  .m-sm-auto {\n    margin: auto !important;\n  }\n  .mx-sm-0 {\n    margin-right: 0 !important;\n    margin-left: 0 !important;\n  }\n  .mx-sm-1 {\n    margin-right: 0.25rem !important;\n    margin-left: 0.25rem !important;\n  }\n  .mx-sm-2 {\n    margin-right: 0.5rem !important;\n    margin-left: 0.5rem !important;\n  }\n  .mx-sm-3 {\n    margin-right: 1rem !important;\n    margin-left: 1rem !important;\n  }\n  .mx-sm-4 {\n    margin-right: 1.5rem !important;\n    margin-left: 1.5rem !important;\n  }\n  .mx-sm-5 {\n    margin-right: 3rem !important;\n    margin-left: 3rem !important;\n  }\n  .mx-sm-auto {\n    margin-right: auto !important;\n    margin-left: auto !important;\n  }\n  .my-sm-0 {\n    margin-top: 0 !important;\n    margin-bottom: 0 !important;\n  }\n  .my-sm-1 {\n    margin-top: 0.25rem !important;\n    margin-bottom: 0.25rem !important;\n  }\n  .my-sm-2 {\n    margin-top: 0.5rem !important;\n    margin-bottom: 0.5rem !important;\n  }\n  .my-sm-3 {\n    margin-top: 1rem !important;\n    margin-bottom: 1rem !important;\n  }\n  .my-sm-4 {\n    margin-top: 1.5rem !important;\n    margin-bottom: 1.5rem !important;\n  }\n  .my-sm-5 {\n    margin-top: 3rem !important;\n    margin-bottom: 3rem !important;\n  }\n  .my-sm-auto {\n    margin-top: auto !important;\n    margin-bottom: auto !important;\n  }\n  .mt-sm-0 {\n    margin-top: 0 !important;\n  }\n  .mt-sm-1 {\n    margin-top: 0.25rem !important;\n  }\n  .mt-sm-2 {\n    margin-top: 0.5rem !important;\n  }\n  .mt-sm-3 {\n    margin-top: 1rem !important;\n  }\n  .mt-sm-4 {\n    margin-top: 1.5rem !important;\n  }\n  .mt-sm-5 {\n    margin-top: 3rem !important;\n  }\n  .mt-sm-auto {\n    margin-top: auto !important;\n  }\n  .me-sm-0 {\n    margin-right: 0 !important;\n  }\n  .me-sm-1 {\n    margin-right: 0.25rem !important;\n  }\n  .me-sm-2 {\n    margin-right: 0.5rem !important;\n  }\n  .me-sm-3 {\n    margin-right: 1rem !important;\n  }\n  .me-sm-4 {\n    margin-right: 1.5rem !important;\n  }\n  .me-sm-5 {\n    margin-right: 3rem !important;\n  }\n  .me-sm-auto {\n    margin-right: auto !important;\n  }\n  .mb-sm-0 {\n    margin-bottom: 0 !important;\n  }\n  .mb-sm-1 {\n    margin-bottom: 0.25rem !important;\n  }\n  .mb-sm-2 {\n    margin-bottom: 0.5rem !important;\n  }\n  .mb-sm-3 {\n    margin-bottom: 1rem !important;\n  }\n  .mb-sm-4 {\n    margin-bottom: 1.5rem !important;\n  }\n  .mb-sm-5 {\n    margin-bottom: 3rem !important;\n  }\n  .mb-sm-auto {\n    margin-bottom: auto !important;\n  }\n  .ms-sm-0 {\n    margin-left: 0 !important;\n  }\n  .ms-sm-1 {\n    margin-left: 0.25rem !important;\n  }\n  .ms-sm-2 {\n    margin-left: 0.5rem !important;\n  }\n  .ms-sm-3 {\n    margin-left: 1rem !important;\n  }\n  .ms-sm-4 {\n    margin-left: 1.5rem !important;\n  }\n  .ms-sm-5 {\n    margin-left: 3rem !important;\n  }\n  .ms-sm-auto {\n    margin-left: auto !important;\n  }\n  .p-sm-0 {\n    padding: 0 !important;\n  }\n  .p-sm-1 {\n    padding: 0.25rem !important;\n  }\n  .p-sm-2 {\n    padding: 0.5rem !important;\n  }\n  .p-sm-3 {\n    padding: 1rem !important;\n  }\n  .p-sm-4 {\n    padding: 1.5rem !important;\n  }\n  .p-sm-5 {\n    padding: 3rem !important;\n  }\n  .px-sm-0 {\n    padding-right: 0 !important;\n    padding-left: 0 !important;\n  }\n  .px-sm-1 {\n    padding-right: 0.25rem !important;\n    padding-left: 0.25rem !important;\n  }\n  .px-sm-2 {\n    padding-right: 0.5rem !important;\n    padding-left: 0.5rem !important;\n  }\n  .px-sm-3 {\n    padding-right: 1rem !important;\n    padding-left: 1rem !important;\n  }\n  .px-sm-4 {\n    padding-right: 1.5rem !important;\n    padding-left: 1.5rem !important;\n  }\n  .px-sm-5 {\n    padding-right: 3rem !important;\n    padding-left: 3rem !important;\n  }\n  .py-sm-0 {\n    padding-top: 0 !important;\n    padding-bottom: 0 !important;\n  }\n  .py-sm-1 {\n    padding-top: 0.25rem !important;\n    padding-bottom: 0.25rem !important;\n  }\n  .py-sm-2 {\n    padding-top: 0.5rem !important;\n    padding-bottom: 0.5rem !important;\n  }\n  .py-sm-3 {\n    padding-top: 1rem !important;\n    padding-bottom: 1rem !important;\n  }\n  .py-sm-4 {\n    padding-top: 1.5rem !important;\n    padding-bottom: 1.5rem !important;\n  }\n  .py-sm-5 {\n    padding-top: 3rem !important;\n    padding-bottom: 3rem !important;\n  }\n  .pt-sm-0 {\n    padding-top: 0 !important;\n  }\n  .pt-sm-1 {\n    padding-top: 0.25rem !important;\n  }\n  .pt-sm-2 {\n    padding-top: 0.5rem !important;\n  }\n  .pt-sm-3 {\n    padding-top: 1rem !important;\n  }\n  .pt-sm-4 {\n    padding-top: 1.5rem !important;\n  }\n  .pt-sm-5 {\n    padding-top: 3rem !important;\n  }\n  .pe-sm-0 {\n    padding-right: 0 !important;\n  }\n  .pe-sm-1 {\n    padding-right: 0.25rem !important;\n  }\n  .pe-sm-2 {\n    padding-right: 0.5rem !important;\n  }\n  .pe-sm-3 {\n    padding-right: 1rem !important;\n  }\n  .pe-sm-4 {\n    padding-right: 1.5rem !important;\n  }\n  .pe-sm-5 {\n    padding-right: 3rem !important;\n  }\n  .pb-sm-0 {\n    padding-bottom: 0 !important;\n  }\n  .pb-sm-1 {\n    padding-bottom: 0.25rem !important;\n  }\n  .pb-sm-2 {\n    padding-bottom: 0.5rem !important;\n  }\n  .pb-sm-3 {\n    padding-bottom: 1rem !important;\n  }\n  .pb-sm-4 {\n    padding-bottom: 1.5rem !important;\n  }\n  .pb-sm-5 {\n    padding-bottom: 3rem !important;\n  }\n  .ps-sm-0 {\n    padding-left: 0 !important;\n  }\n  .ps-sm-1 {\n    padding-left: 0.25rem !important;\n  }\n  .ps-sm-2 {\n    padding-left: 0.5rem !important;\n  }\n  .ps-sm-3 {\n    padding-left: 1rem !important;\n  }\n  .ps-sm-4 {\n    padding-left: 1.5rem !important;\n  }\n  .ps-sm-5 {\n    padding-left: 3rem !important;\n  }\n  .text-sm-start {\n    text-align: left !important;\n  }\n  .text-sm-end {\n    text-align: right !important;\n  }\n  .text-sm-center {\n    text-align: center !important;\n  }\n}\n@media (min-width: 768px) {\n  .float-md-start {\n    float: left !important;\n  }\n  .float-md-end {\n    float: right !important;\n  }\n  .float-md-none {\n    float: none !important;\n  }\n  .d-md-inline {\n    display: inline !important;\n  }\n  .d-md-inline-block {\n    display: inline-block !important;\n  }\n  .d-md-block {\n    display: block !important;\n  }\n  .d-md-grid {\n    display: grid !important;\n  }\n  .d-md-table {\n    display: table !important;\n  }\n  .d-md-table-row {\n    display: table-row !important;\n  }\n  .d-md-table-cell {\n    display: table-cell !important;\n  }\n  .d-md-flex {\n    display: flex !important;\n  }\n  .d-md-inline-flex {\n    display: inline-flex !important;\n  }\n  .d-md-none {\n    display: none !important;\n  }\n  .flex-md-fill {\n    flex: 1 1 auto !important;\n  }\n  .flex-md-row {\n    flex-direction: row !important;\n  }\n  .flex-md-column {\n    flex-direction: column !important;\n  }\n  .flex-md-row-reverse {\n    flex-direction: row-reverse !important;\n  }\n  .flex-md-column-reverse {\n    flex-direction: column-reverse !important;\n  }\n  .flex-md-grow-0 {\n    flex-grow: 0 !important;\n  }\n  .flex-md-grow-1 {\n    flex-grow: 1 !important;\n  }\n  .flex-md-shrink-0 {\n    flex-shrink: 0 !important;\n  }\n  .flex-md-shrink-1 {\n    flex-shrink: 1 !important;\n  }\n  .flex-md-wrap {\n    flex-wrap: wrap !important;\n  }\n  .flex-md-nowrap {\n    flex-wrap: nowrap !important;\n  }\n  .flex-md-wrap-reverse {\n    flex-wrap: wrap-reverse !important;\n  }\n  .gap-md-0 {\n    gap: 0 !important;\n  }\n  .gap-md-1 {\n    gap: 0.25rem !important;\n  }\n  .gap-md-2 {\n    gap: 0.5rem !important;\n  }\n  .gap-md-3 {\n    gap: 1rem !important;\n  }\n  .gap-md-4 {\n    gap: 1.5rem !important;\n  }\n  .gap-md-5 {\n    gap: 3rem !important;\n  }\n  .justify-content-md-start {\n    justify-content: flex-start !important;\n  }\n  .justify-content-md-end {\n    justify-content: flex-end !important;\n  }\n  .justify-content-md-center {\n    justify-content: center !important;\n  }\n  .justify-content-md-between {\n    justify-content: space-between !important;\n  }\n  .justify-content-md-around {\n    justify-content: space-around !important;\n  }\n  .justify-content-md-evenly {\n    justify-content: space-evenly !important;\n  }\n  .align-items-md-start {\n    align-items: flex-start !important;\n  }\n  .align-items-md-end {\n    align-items: flex-end !important;\n  }\n  .align-items-md-center {\n    align-items: center !important;\n  }\n  .align-items-md-baseline {\n    align-items: baseline !important;\n  }\n  .align-items-md-stretch {\n    align-items: stretch !important;\n  }\n  .align-content-md-start {\n    align-content: flex-start !important;\n  }\n  .align-content-md-end {\n    align-content: flex-end !important;\n  }\n  .align-content-md-center {\n    align-content: center !important;\n  }\n  .align-content-md-between {\n    align-content: space-between !important;\n  }\n  .align-content-md-around {\n    align-content: space-around !important;\n  }\n  .align-content-md-stretch {\n    align-content: stretch !important;\n  }\n  .align-self-md-auto {\n    align-self: auto !important;\n  }\n  .align-self-md-start {\n    align-self: flex-start !important;\n  }\n  .align-self-md-end {\n    align-self: flex-end !important;\n  }\n  .align-self-md-center {\n    align-self: center !important;\n  }\n  .align-self-md-baseline {\n    align-self: baseline !important;\n  }\n  .align-self-md-stretch {\n    align-self: stretch !important;\n  }\n  .order-md-first {\n    order: -1 !important;\n  }\n  .order-md-0 {\n    order: 0 !important;\n  }\n  .order-md-1 {\n    order: 1 !important;\n  }\n  .order-md-2 {\n    order: 2 !important;\n  }\n  .order-md-3 {\n    order: 3 !important;\n  }\n  .order-md-4 {\n    order: 4 !important;\n  }\n  .order-md-5 {\n    order: 5 !important;\n  }\n  .order-md-last {\n    order: 6 !important;\n  }\n  .m-md-0 {\n    margin: 0 !important;\n  }\n  .m-md-1 {\n    margin: 0.25rem !important;\n  }\n  .m-md-2 {\n    margin: 0.5rem !important;\n  }\n  .m-md-3 {\n    margin: 1rem !important;\n  }\n  .m-md-4 {\n    margin: 1.5rem !important;\n  }\n  .m-md-5 {\n    margin: 3rem !important;\n  }\n  .m-md-auto {\n    margin: auto !important;\n  }\n  .mx-md-0 {\n    margin-right: 0 !important;\n    margin-left: 0 !important;\n  }\n  .mx-md-1 {\n    margin-right: 0.25rem !important;\n    margin-left: 0.25rem !important;\n  }\n  .mx-md-2 {\n    margin-right: 0.5rem !important;\n    margin-left: 0.5rem !important;\n  }\n  .mx-md-3 {\n    margin-right: 1rem !important;\n    margin-left: 1rem !important;\n  }\n  .mx-md-4 {\n    margin-right: 1.5rem !important;\n    margin-left: 1.5rem !important;\n  }\n  .mx-md-5 {\n    margin-right: 3rem !important;\n    margin-left: 3rem !important;\n  }\n  .mx-md-auto {\n    margin-right: auto !important;\n    margin-left: auto !important;\n  }\n  .my-md-0 {\n    margin-top: 0 !important;\n    margin-bottom: 0 !important;\n  }\n  .my-md-1 {\n    margin-top: 0.25rem !important;\n    margin-bottom: 0.25rem !important;\n  }\n  .my-md-2 {\n    margin-top: 0.5rem !important;\n    margin-bottom: 0.5rem !important;\n  }\n  .my-md-3 {\n    margin-top: 1rem !important;\n    margin-bottom: 1rem !important;\n  }\n  .my-md-4 {\n    margin-top: 1.5rem !important;\n    margin-bottom: 1.5rem !important;\n  }\n  .my-md-5 {\n    margin-top: 3rem !important;\n    margin-bottom: 3rem !important;\n  }\n  .my-md-auto {\n    margin-top: auto !important;\n    margin-bottom: auto !important;\n  }\n  .mt-md-0 {\n    margin-top: 0 !important;\n  }\n  .mt-md-1 {\n    margin-top: 0.25rem !important;\n  }\n  .mt-md-2 {\n    margin-top: 0.5rem !important;\n  }\n  .mt-md-3 {\n    margin-top: 1rem !important;\n  }\n  .mt-md-4 {\n    margin-top: 1.5rem !important;\n  }\n  .mt-md-5 {\n    margin-top: 3rem !important;\n  }\n  .mt-md-auto {\n    margin-top: auto !important;\n  }\n  .me-md-0 {\n    margin-right: 0 !important;\n  }\n  .me-md-1 {\n    margin-right: 0.25rem !important;\n  }\n  .me-md-2 {\n    margin-right: 0.5rem !important;\n  }\n  .me-md-3 {\n    margin-right: 1rem !important;\n  }\n  .me-md-4 {\n    margin-right: 1.5rem !important;\n  }\n  .me-md-5 {\n    margin-right: 3rem !important;\n  }\n  .me-md-auto {\n    margin-right: auto !important;\n  }\n  .mb-md-0 {\n    margin-bottom: 0 !important;\n  }\n  .mb-md-1 {\n    margin-bottom: 0.25rem !important;\n  }\n  .mb-md-2 {\n    margin-bottom: 0.5rem !important;\n  }\n  .mb-md-3 {\n    margin-bottom: 1rem !important;\n  }\n  .mb-md-4 {\n    margin-bottom: 1.5rem !important;\n  }\n  .mb-md-5 {\n    margin-bottom: 3rem !important;\n  }\n  .mb-md-auto {\n    margin-bottom: auto !important;\n  }\n  .ms-md-0 {\n    margin-left: 0 !important;\n  }\n  .ms-md-1 {\n    margin-left: 0.25rem !important;\n  }\n  .ms-md-2 {\n    margin-left: 0.5rem !important;\n  }\n  .ms-md-3 {\n    margin-left: 1rem !important;\n  }\n  .ms-md-4 {\n    margin-left: 1.5rem !important;\n  }\n  .ms-md-5 {\n    margin-left: 3rem !important;\n  }\n  .ms-md-auto {\n    margin-left: auto !important;\n  }\n  .p-md-0 {\n    padding: 0 !important;\n  }\n  .p-md-1 {\n    padding: 0.25rem !important;\n  }\n  .p-md-2 {\n    padding: 0.5rem !important;\n  }\n  .p-md-3 {\n    padding: 1rem !important;\n  }\n  .p-md-4 {\n    padding: 1.5rem !important;\n  }\n  .p-md-5 {\n    padding: 3rem !important;\n  }\n  .px-md-0 {\n    padding-right: 0 !important;\n    padding-left: 0 !important;\n  }\n  .px-md-1 {\n    padding-right: 0.25rem !important;\n    padding-left: 0.25rem !important;\n  }\n  .px-md-2 {\n    padding-right: 0.5rem !important;\n    padding-left: 0.5rem !important;\n  }\n  .px-md-3 {\n    padding-right: 1rem !important;\n    padding-left: 1rem !important;\n  }\n  .px-md-4 {\n    padding-right: 1.5rem !important;\n    padding-left: 1.5rem !important;\n  }\n  .px-md-5 {\n    padding-right: 3rem !important;\n    padding-left: 3rem !important;\n  }\n  .py-md-0 {\n    padding-top: 0 !important;\n    padding-bottom: 0 !important;\n  }\n  .py-md-1 {\n    padding-top: 0.25rem !important;\n    padding-bottom: 0.25rem !important;\n  }\n  .py-md-2 {\n    padding-top: 0.5rem !important;\n    padding-bottom: 0.5rem !important;\n  }\n  .py-md-3 {\n    padding-top: 1rem !important;\n    padding-bottom: 1rem !important;\n  }\n  .py-md-4 {\n    padding-top: 1.5rem !important;\n    padding-bottom: 1.5rem !important;\n  }\n  .py-md-5 {\n    padding-top: 3rem !important;\n    padding-bottom: 3rem !important;\n  }\n  .pt-md-0 {\n    padding-top: 0 !important;\n  }\n  .pt-md-1 {\n    padding-top: 0.25rem !important;\n  }\n  .pt-md-2 {\n    padding-top: 0.5rem !important;\n  }\n  .pt-md-3 {\n    padding-top: 1rem !important;\n  }\n  .pt-md-4 {\n    padding-top: 1.5rem !important;\n  }\n  .pt-md-5 {\n    padding-top: 3rem !important;\n  }\n  .pe-md-0 {\n    padding-right: 0 !important;\n  }\n  .pe-md-1 {\n    padding-right: 0.25rem !important;\n  }\n  .pe-md-2 {\n    padding-right: 0.5rem !important;\n  }\n  .pe-md-3 {\n    padding-right: 1rem !important;\n  }\n  .pe-md-4 {\n    padding-right: 1.5rem !important;\n  }\n  .pe-md-5 {\n    padding-right: 3rem !important;\n  }\n  .pb-md-0 {\n    padding-bottom: 0 !important;\n  }\n  .pb-md-1 {\n    padding-bottom: 0.25rem !important;\n  }\n  .pb-md-2 {\n    padding-bottom: 0.5rem !important;\n  }\n  .pb-md-3 {\n    padding-bottom: 1rem !important;\n  }\n  .pb-md-4 {\n    padding-bottom: 1.5rem !important;\n  }\n  .pb-md-5 {\n    padding-bottom: 3rem !important;\n  }\n  .ps-md-0 {\n    padding-left: 0 !important;\n  }\n  .ps-md-1 {\n    padding-left: 0.25rem !important;\n  }\n  .ps-md-2 {\n    padding-left: 0.5rem !important;\n  }\n  .ps-md-3 {\n    padding-left: 1rem !important;\n  }\n  .ps-md-4 {\n    padding-left: 1.5rem !important;\n  }\n  .ps-md-5 {\n    padding-left: 3rem !important;\n  }\n  .text-md-start {\n    text-align: left !important;\n  }\n  .text-md-end {\n    text-align: right !important;\n  }\n  .text-md-center {\n    text-align: center !important;\n  }\n}\n@media (min-width: 992px) {\n  .float-lg-start {\n    float: left !important;\n  }\n  .float-lg-end {\n    float: right !important;\n  }\n  .float-lg-none {\n    float: none !important;\n  }\n  .d-lg-inline {\n    display: inline !important;\n  }\n  .d-lg-inline-block {\n    display: inline-block !important;\n  }\n  .d-lg-block {\n    display: block !important;\n  }\n  .d-lg-grid {\n    display: grid !important;\n  }\n  .d-lg-table {\n    display: table !important;\n  }\n  .d-lg-table-row {\n    display: table-row !important;\n  }\n  .d-lg-table-cell {\n    display: table-cell !important;\n  }\n  .d-lg-flex {\n    display: flex !important;\n  }\n  .d-lg-inline-flex {\n    display: inline-flex !important;\n  }\n  .d-lg-none {\n    display: none !important;\n  }\n  .flex-lg-fill {\n    flex: 1 1 auto !important;\n  }\n  .flex-lg-row {\n    flex-direction: row !important;\n  }\n  .flex-lg-column {\n    flex-direction: column !important;\n  }\n  .flex-lg-row-reverse {\n    flex-direction: row-reverse !important;\n  }\n  .flex-lg-column-reverse {\n    flex-direction: column-reverse !important;\n  }\n  .flex-lg-grow-0 {\n    flex-grow: 0 !important;\n  }\n  .flex-lg-grow-1 {\n    flex-grow: 1 !important;\n  }\n  .flex-lg-shrink-0 {\n    flex-shrink: 0 !important;\n  }\n  .flex-lg-shrink-1 {\n    flex-shrink: 1 !important;\n  }\n  .flex-lg-wrap {\n    flex-wrap: wrap !important;\n  }\n  .flex-lg-nowrap {\n    flex-wrap: nowrap !important;\n  }\n  .flex-lg-wrap-reverse {\n    flex-wrap: wrap-reverse !important;\n  }\n  .gap-lg-0 {\n    gap: 0 !important;\n  }\n  .gap-lg-1 {\n    gap: 0.25rem !important;\n  }\n  .gap-lg-2 {\n    gap: 0.5rem !important;\n  }\n  .gap-lg-3 {\n    gap: 1rem !important;\n  }\n  .gap-lg-4 {\n    gap: 1.5rem !important;\n  }\n  .gap-lg-5 {\n    gap: 3rem !important;\n  }\n  .justify-content-lg-start {\n    justify-content: flex-start !important;\n  }\n  .justify-content-lg-end {\n    justify-content: flex-end !important;\n  }\n  .justify-content-lg-center {\n    justify-content: center !important;\n  }\n  .justify-content-lg-between {\n    justify-content: space-between !important;\n  }\n  .justify-content-lg-around {\n    justify-content: space-around !important;\n  }\n  .justify-content-lg-evenly {\n    justify-content: space-evenly !important;\n  }\n  .align-items-lg-start {\n    align-items: flex-start !important;\n  }\n  .align-items-lg-end {\n    align-items: flex-end !important;\n  }\n  .align-items-lg-center {\n    align-items: center !important;\n  }\n  .align-items-lg-baseline {\n    align-items: baseline !important;\n  }\n  .align-items-lg-stretch {\n    align-items: stretch !important;\n  }\n  .align-content-lg-start {\n    align-content: flex-start !important;\n  }\n  .align-content-lg-end {\n    align-content: flex-end !important;\n  }\n  .align-content-lg-center {\n    align-content: center !important;\n  }\n  .align-content-lg-between {\n    align-content: space-between !important;\n  }\n  .align-content-lg-around {\n    align-content: space-around !important;\n  }\n  .align-content-lg-stretch {\n    align-content: stretch !important;\n  }\n  .align-self-lg-auto {\n    align-self: auto !important;\n  }\n  .align-self-lg-start {\n    align-self: flex-start !important;\n  }\n  .align-self-lg-end {\n    align-self: flex-end !important;\n  }\n  .align-self-lg-center {\n    align-self: center !important;\n  }\n  .align-self-lg-baseline {\n    align-self: baseline !important;\n  }\n  .align-self-lg-stretch {\n    align-self: stretch !important;\n  }\n  .order-lg-first {\n    order: -1 !important;\n  }\n  .order-lg-0 {\n    order: 0 !important;\n  }\n  .order-lg-1 {\n    order: 1 !important;\n  }\n  .order-lg-2 {\n    order: 2 !important;\n  }\n  .order-lg-3 {\n    order: 3 !important;\n  }\n  .order-lg-4 {\n    order: 4 !important;\n  }\n  .order-lg-5 {\n    order: 5 !important;\n  }\n  .order-lg-last {\n    order: 6 !important;\n  }\n  .m-lg-0 {\n    margin: 0 !important;\n  }\n  .m-lg-1 {\n    margin: 0.25rem !important;\n  }\n  .m-lg-2 {\n    margin: 0.5rem !important;\n  }\n  .m-lg-3 {\n    margin: 1rem !important;\n  }\n  .m-lg-4 {\n    margin: 1.5rem !important;\n  }\n  .m-lg-5 {\n    margin: 3rem !important;\n  }\n  .m-lg-auto {\n    margin: auto !important;\n  }\n  .mx-lg-0 {\n    margin-right: 0 !important;\n    margin-left: 0 !important;\n  }\n  .mx-lg-1 {\n    margin-right: 0.25rem !important;\n    margin-left: 0.25rem !important;\n  }\n  .mx-lg-2 {\n    margin-right: 0.5rem !important;\n    margin-left: 0.5rem !important;\n  }\n  .mx-lg-3 {\n    margin-right: 1rem !important;\n    margin-left: 1rem !important;\n  }\n  .mx-lg-4 {\n    margin-right: 1.5rem !important;\n    margin-left: 1.5rem !important;\n  }\n  .mx-lg-5 {\n    margin-right: 3rem !important;\n    margin-left: 3rem !important;\n  }\n  .mx-lg-auto {\n    margin-right: auto !important;\n    margin-left: auto !important;\n  }\n  .my-lg-0 {\n    margin-top: 0 !important;\n    margin-bottom: 0 !important;\n  }\n  .my-lg-1 {\n    margin-top: 0.25rem !important;\n    margin-bottom: 0.25rem !important;\n  }\n  .my-lg-2 {\n    margin-top: 0.5rem !important;\n    margin-bottom: 0.5rem !important;\n  }\n  .my-lg-3 {\n    margin-top: 1rem !important;\n    margin-bottom: 1rem !important;\n  }\n  .my-lg-4 {\n    margin-top: 1.5rem !important;\n    margin-bottom: 1.5rem !important;\n  }\n  .my-lg-5 {\n    margin-top: 3rem !important;\n    margin-bottom: 3rem !important;\n  }\n  .my-lg-auto {\n    margin-top: auto !important;\n    margin-bottom: auto !important;\n  }\n  .mt-lg-0 {\n    margin-top: 0 !important;\n  }\n  .mt-lg-1 {\n    margin-top: 0.25rem !important;\n  }\n  .mt-lg-2 {\n    margin-top: 0.5rem !important;\n  }\n  .mt-lg-3 {\n    margin-top: 1rem !important;\n  }\n  .mt-lg-4 {\n    margin-top: 1.5rem !important;\n  }\n  .mt-lg-5 {\n    margin-top: 3rem !important;\n  }\n  .mt-lg-auto {\n    margin-top: auto !important;\n  }\n  .me-lg-0 {\n    margin-right: 0 !important;\n  }\n  .me-lg-1 {\n    margin-right: 0.25rem !important;\n  }\n  .me-lg-2 {\n    margin-right: 0.5rem !important;\n  }\n  .me-lg-3 {\n    margin-right: 1rem !important;\n  }\n  .me-lg-4 {\n    margin-right: 1.5rem !important;\n  }\n  .me-lg-5 {\n    margin-right: 3rem !important;\n  }\n  .me-lg-auto {\n    margin-right: auto !important;\n  }\n  .mb-lg-0 {\n    margin-bottom: 0 !important;\n  }\n  .mb-lg-1 {\n    margin-bottom: 0.25rem !important;\n  }\n  .mb-lg-2 {\n    margin-bottom: 0.5rem !important;\n  }\n  .mb-lg-3 {\n    margin-bottom: 1rem !important;\n  }\n  .mb-lg-4 {\n    margin-bottom: 1.5rem !important;\n  }\n  .mb-lg-5 {\n    margin-bottom: 3rem !important;\n  }\n  .mb-lg-auto {\n    margin-bottom: auto !important;\n  }\n  .ms-lg-0 {\n    margin-left: 0 !important;\n  }\n  .ms-lg-1 {\n    margin-left: 0.25rem !important;\n  }\n  .ms-lg-2 {\n    margin-left: 0.5rem !important;\n  }\n  .ms-lg-3 {\n    margin-left: 1rem !important;\n  }\n  .ms-lg-4 {\n    margin-left: 1.5rem !important;\n  }\n  .ms-lg-5 {\n    margin-left: 3rem !important;\n  }\n  .ms-lg-auto {\n    margin-left: auto !important;\n  }\n  .p-lg-0 {\n    padding: 0 !important;\n  }\n  .p-lg-1 {\n    padding: 0.25rem !important;\n  }\n  .p-lg-2 {\n    padding: 0.5rem !important;\n  }\n  .p-lg-3 {\n    padding: 1rem !important;\n  }\n  .p-lg-4 {\n    padding: 1.5rem !important;\n  }\n  .p-lg-5 {\n    padding: 3rem !important;\n  }\n  .px-lg-0 {\n    padding-right: 0 !important;\n    padding-left: 0 !important;\n  }\n  .px-lg-1 {\n    padding-right: 0.25rem !important;\n    padding-left: 0.25rem !important;\n  }\n  .px-lg-2 {\n    padding-right: 0.5rem !important;\n    padding-left: 0.5rem !important;\n  }\n  .px-lg-3 {\n    padding-right: 1rem !important;\n    padding-left: 1rem !important;\n  }\n  .px-lg-4 {\n    padding-right: 1.5rem !important;\n    padding-left: 1.5rem !important;\n  }\n  .px-lg-5 {\n    padding-right: 3rem !important;\n    padding-left: 3rem !important;\n  }\n  .py-lg-0 {\n    padding-top: 0 !important;\n    padding-bottom: 0 !important;\n  }\n  .py-lg-1 {\n    padding-top: 0.25rem !important;\n    padding-bottom: 0.25rem !important;\n  }\n  .py-lg-2 {\n    padding-top: 0.5rem !important;\n    padding-bottom: 0.5rem !important;\n  }\n  .py-lg-3 {\n    padding-top: 1rem !important;\n    padding-bottom: 1rem !important;\n  }\n  .py-lg-4 {\n    padding-top: 1.5rem !important;\n    padding-bottom: 1.5rem !important;\n  }\n  .py-lg-5 {\n    padding-top: 3rem !important;\n    padding-bottom: 3rem !important;\n  }\n  .pt-lg-0 {\n    padding-top: 0 !important;\n  }\n  .pt-lg-1 {\n    padding-top: 0.25rem !important;\n  }\n  .pt-lg-2 {\n    padding-top: 0.5rem !important;\n  }\n  .pt-lg-3 {\n    padding-top: 1rem !important;\n  }\n  .pt-lg-4 {\n    padding-top: 1.5rem !important;\n  }\n  .pt-lg-5 {\n    padding-top: 3rem !important;\n  }\n  .pe-lg-0 {\n    padding-right: 0 !important;\n  }\n  .pe-lg-1 {\n    padding-right: 0.25rem !important;\n  }\n  .pe-lg-2 {\n    padding-right: 0.5rem !important;\n  }\n  .pe-lg-3 {\n    padding-right: 1rem !important;\n  }\n  .pe-lg-4 {\n    padding-right: 1.5rem !important;\n  }\n  .pe-lg-5 {\n    padding-right: 3rem !important;\n  }\n  .pb-lg-0 {\n    padding-bottom: 0 !important;\n  }\n  .pb-lg-1 {\n    padding-bottom: 0.25rem !important;\n  }\n  .pb-lg-2 {\n    padding-bottom: 0.5rem !important;\n  }\n  .pb-lg-3 {\n    padding-bottom: 1rem !important;\n  }\n  .pb-lg-4 {\n    padding-bottom: 1.5rem !important;\n  }\n  .pb-lg-5 {\n    padding-bottom: 3rem !important;\n  }\n  .ps-lg-0 {\n    padding-left: 0 !important;\n  }\n  .ps-lg-1 {\n    padding-left: 0.25rem !important;\n  }\n  .ps-lg-2 {\n    padding-left: 0.5rem !important;\n  }\n  .ps-lg-3 {\n    padding-left: 1rem !important;\n  }\n  .ps-lg-4 {\n    padding-left: 1.5rem !important;\n  }\n  .ps-lg-5 {\n    padding-left: 3rem !important;\n  }\n  .text-lg-start {\n    text-align: left !important;\n  }\n  .text-lg-end {\n    text-align: right !important;\n  }\n  .text-lg-center {\n    text-align: center !important;\n  }\n}\n@media (min-width: 1200px) {\n  .float-xl-start {\n    float: left !important;\n  }\n  .float-xl-end {\n    float: right !important;\n  }\n  .float-xl-none {\n    float: none !important;\n  }\n  .d-xl-inline {\n    display: inline !important;\n  }\n  .d-xl-inline-block {\n    display: inline-block !important;\n  }\n  .d-xl-block {\n    display: block !important;\n  }\n  .d-xl-grid {\n    display: grid !important;\n  }\n  .d-xl-table {\n    display: table !important;\n  }\n  .d-xl-table-row {\n    display: table-row !important;\n  }\n  .d-xl-table-cell {\n    display: table-cell !important;\n  }\n  .d-xl-flex {\n    display: flex !important;\n  }\n  .d-xl-inline-flex {\n    display: inline-flex !important;\n  }\n  .d-xl-none {\n    display: none !important;\n  }\n  .flex-xl-fill {\n    flex: 1 1 auto !important;\n  }\n  .flex-xl-row {\n    flex-direction: row !important;\n  }\n  .flex-xl-column {\n    flex-direction: column !important;\n  }\n  .flex-xl-row-reverse {\n    flex-direction: row-reverse !important;\n  }\n  .flex-xl-column-reverse {\n    flex-direction: column-reverse !important;\n  }\n  .flex-xl-grow-0 {\n    flex-grow: 0 !important;\n  }\n  .flex-xl-grow-1 {\n    flex-grow: 1 !important;\n  }\n  .flex-xl-shrink-0 {\n    flex-shrink: 0 !important;\n  }\n  .flex-xl-shrink-1 {\n    flex-shrink: 1 !important;\n  }\n  .flex-xl-wrap {\n    flex-wrap: wrap !important;\n  }\n  .flex-xl-nowrap {\n    flex-wrap: nowrap !important;\n  }\n  .flex-xl-wrap-reverse {\n    flex-wrap: wrap-reverse !important;\n  }\n  .gap-xl-0 {\n    gap: 0 !important;\n  }\n  .gap-xl-1 {\n    gap: 0.25rem !important;\n  }\n  .gap-xl-2 {\n    gap: 0.5rem !important;\n  }\n  .gap-xl-3 {\n    gap: 1rem !important;\n  }\n  .gap-xl-4 {\n    gap: 1.5rem !important;\n  }\n  .gap-xl-5 {\n    gap: 3rem !important;\n  }\n  .justify-content-xl-start {\n    justify-content: flex-start !important;\n  }\n  .justify-content-xl-end {\n    justify-content: flex-end !important;\n  }\n  .justify-content-xl-center {\n    justify-content: center !important;\n  }\n  .justify-content-xl-between {\n    justify-content: space-between !important;\n  }\n  .justify-content-xl-around {\n    justify-content: space-around !important;\n  }\n  .justify-content-xl-evenly {\n    justify-content: space-evenly !important;\n  }\n  .align-items-xl-start {\n    align-items: flex-start !important;\n  }\n  .align-items-xl-end {\n    align-items: flex-end !important;\n  }\n  .align-items-xl-center {\n    align-items: center !important;\n  }\n  .align-items-xl-baseline {\n    align-items: baseline !important;\n  }\n  .align-items-xl-stretch {\n    align-items: stretch !important;\n  }\n  .align-content-xl-start {\n    align-content: flex-start !important;\n  }\n  .align-content-xl-end {\n    align-content: flex-end !important;\n  }\n  .align-content-xl-center {\n    align-content: center !important;\n  }\n  .align-content-xl-between {\n    align-content: space-between !important;\n  }\n  .align-content-xl-around {\n    align-content: space-around !important;\n  }\n  .align-content-xl-stretch {\n    align-content: stretch !important;\n  }\n  .align-self-xl-auto {\n    align-self: auto !important;\n  }\n  .align-self-xl-start {\n    align-self: flex-start !important;\n  }\n  .align-self-xl-end {\n    align-self: flex-end !important;\n  }\n  .align-self-xl-center {\n    align-self: center !important;\n  }\n  .align-self-xl-baseline {\n    align-self: baseline !important;\n  }\n  .align-self-xl-stretch {\n    align-self: stretch !important;\n  }\n  .order-xl-first {\n    order: -1 !important;\n  }\n  .order-xl-0 {\n    order: 0 !important;\n  }\n  .order-xl-1 {\n    order: 1 !important;\n  }\n  .order-xl-2 {\n    order: 2 !important;\n  }\n  .order-xl-3 {\n    order: 3 !important;\n  }\n  .order-xl-4 {\n    order: 4 !important;\n  }\n  .order-xl-5 {\n    order: 5 !important;\n  }\n  .order-xl-last {\n    order: 6 !important;\n  }\n  .m-xl-0 {\n    margin: 0 !important;\n  }\n  .m-xl-1 {\n    margin: 0.25rem !important;\n  }\n  .m-xl-2 {\n    margin: 0.5rem !important;\n  }\n  .m-xl-3 {\n    margin: 1rem !important;\n  }\n  .m-xl-4 {\n    margin: 1.5rem !important;\n  }\n  .m-xl-5 {\n    margin: 3rem !important;\n  }\n  .m-xl-auto {\n    margin: auto !important;\n  }\n  .mx-xl-0 {\n    margin-right: 0 !important;\n    margin-left: 0 !important;\n  }\n  .mx-xl-1 {\n    margin-right: 0.25rem !important;\n    margin-left: 0.25rem !important;\n  }\n  .mx-xl-2 {\n    margin-right: 0.5rem !important;\n    margin-left: 0.5rem !important;\n  }\n  .mx-xl-3 {\n    margin-right: 1rem !important;\n    margin-left: 1rem !important;\n  }\n  .mx-xl-4 {\n    margin-right: 1.5rem !important;\n    margin-left: 1.5rem !important;\n  }\n  .mx-xl-5 {\n    margin-right: 3rem !important;\n    margin-left: 3rem !important;\n  }\n  .mx-xl-auto {\n    margin-right: auto !important;\n    margin-left: auto !important;\n  }\n  .my-xl-0 {\n    margin-top: 0 !important;\n    margin-bottom: 0 !important;\n  }\n  .my-xl-1 {\n    margin-top: 0.25rem !important;\n    margin-bottom: 0.25rem !important;\n  }\n  .my-xl-2 {\n    margin-top: 0.5rem !important;\n    margin-bottom: 0.5rem !important;\n  }\n  .my-xl-3 {\n    margin-top: 1rem !important;\n    margin-bottom: 1rem !important;\n  }\n  .my-xl-4 {\n    margin-top: 1.5rem !important;\n    margin-bottom: 1.5rem !important;\n  }\n  .my-xl-5 {\n    margin-top: 3rem !important;\n    margin-bottom: 3rem !important;\n  }\n  .my-xl-auto {\n    margin-top: auto !important;\n    margin-bottom: auto !important;\n  }\n  .mt-xl-0 {\n    margin-top: 0 !important;\n  }\n  .mt-xl-1 {\n    margin-top: 0.25rem !important;\n  }\n  .mt-xl-2 {\n    margin-top: 0.5rem !important;\n  }\n  .mt-xl-3 {\n    margin-top: 1rem !important;\n  }\n  .mt-xl-4 {\n    margin-top: 1.5rem !important;\n  }\n  .mt-xl-5 {\n    margin-top: 3rem !important;\n  }\n  .mt-xl-auto {\n    margin-top: auto !important;\n  }\n  .me-xl-0 {\n    margin-right: 0 !important;\n  }\n  .me-xl-1 {\n    margin-right: 0.25rem !important;\n  }\n  .me-xl-2 {\n    margin-right: 0.5rem !important;\n  }\n  .me-xl-3 {\n    margin-right: 1rem !important;\n  }\n  .me-xl-4 {\n    margin-right: 1.5rem !important;\n  }\n  .me-xl-5 {\n    margin-right: 3rem !important;\n  }\n  .me-xl-auto {\n    margin-right: auto !important;\n  }\n  .mb-xl-0 {\n    margin-bottom: 0 !important;\n  }\n  .mb-xl-1 {\n    margin-bottom: 0.25rem !important;\n  }\n  .mb-xl-2 {\n    margin-bottom: 0.5rem !important;\n  }\n  .mb-xl-3 {\n    margin-bottom: 1rem !important;\n  }\n  .mb-xl-4 {\n    margin-bottom: 1.5rem !important;\n  }\n  .mb-xl-5 {\n    margin-bottom: 3rem !important;\n  }\n  .mb-xl-auto {\n    margin-bottom: auto !important;\n  }\n  .ms-xl-0 {\n    margin-left: 0 !important;\n  }\n  .ms-xl-1 {\n    margin-left: 0.25rem !important;\n  }\n  .ms-xl-2 {\n    margin-left: 0.5rem !important;\n  }\n  .ms-xl-3 {\n    margin-left: 1rem !important;\n  }\n  .ms-xl-4 {\n    margin-left: 1.5rem !important;\n  }\n  .ms-xl-5 {\n    margin-left: 3rem !important;\n  }\n  .ms-xl-auto {\n    margin-left: auto !important;\n  }\n  .p-xl-0 {\n    padding: 0 !important;\n  }\n  .p-xl-1 {\n    padding: 0.25rem !important;\n  }\n  .p-xl-2 {\n    padding: 0.5rem !important;\n  }\n  .p-xl-3 {\n    padding: 1rem !important;\n  }\n  .p-xl-4 {\n    padding: 1.5rem !important;\n  }\n  .p-xl-5 {\n    padding: 3rem !important;\n  }\n  .px-xl-0 {\n    padding-right: 0 !important;\n    padding-left: 0 !important;\n  }\n  .px-xl-1 {\n    padding-right: 0.25rem !important;\n    padding-left: 0.25rem !important;\n  }\n  .px-xl-2 {\n    padding-right: 0.5rem !important;\n    padding-left: 0.5rem !important;\n  }\n  .px-xl-3 {\n    padding-right: 1rem !important;\n    padding-left: 1rem !important;\n  }\n  .px-xl-4 {\n    padding-right: 1.5rem !important;\n    padding-left: 1.5rem !important;\n  }\n  .px-xl-5 {\n    padding-right: 3rem !important;\n    padding-left: 3rem !important;\n  }\n  .py-xl-0 {\n    padding-top: 0 !important;\n    padding-bottom: 0 !important;\n  }\n  .py-xl-1 {\n    padding-top: 0.25rem !important;\n    padding-bottom: 0.25rem !important;\n  }\n  .py-xl-2 {\n    padding-top: 0.5rem !important;\n    padding-bottom: 0.5rem !important;\n  }\n  .py-xl-3 {\n    padding-top: 1rem !important;\n    padding-bottom: 1rem !important;\n  }\n  .py-xl-4 {\n    padding-top: 1.5rem !important;\n    padding-bottom: 1.5rem !important;\n  }\n  .py-xl-5 {\n    padding-top: 3rem !important;\n    padding-bottom: 3rem !important;\n  }\n  .pt-xl-0 {\n    padding-top: 0 !important;\n  }\n  .pt-xl-1 {\n    padding-top: 0.25rem !important;\n  }\n  .pt-xl-2 {\n    padding-top: 0.5rem !important;\n  }\n  .pt-xl-3 {\n    padding-top: 1rem !important;\n  }\n  .pt-xl-4 {\n    padding-top: 1.5rem !important;\n  }\n  .pt-xl-5 {\n    padding-top: 3rem !important;\n  }\n  .pe-xl-0 {\n    padding-right: 0 !important;\n  }\n  .pe-xl-1 {\n    padding-right: 0.25rem !important;\n  }\n  .pe-xl-2 {\n    padding-right: 0.5rem !important;\n  }\n  .pe-xl-3 {\n    padding-right: 1rem !important;\n  }\n  .pe-xl-4 {\n    padding-right: 1.5rem !important;\n  }\n  .pe-xl-5 {\n    padding-right: 3rem !important;\n  }\n  .pb-xl-0 {\n    padding-bottom: 0 !important;\n  }\n  .pb-xl-1 {\n    padding-bottom: 0.25rem !important;\n  }\n  .pb-xl-2 {\n    padding-bottom: 0.5rem !important;\n  }\n  .pb-xl-3 {\n    padding-bottom: 1rem !important;\n  }\n  .pb-xl-4 {\n    padding-bottom: 1.5rem !important;\n  }\n  .pb-xl-5 {\n    padding-bottom: 3rem !important;\n  }\n  .ps-xl-0 {\n    padding-left: 0 !important;\n  }\n  .ps-xl-1 {\n    padding-left: 0.25rem !important;\n  }\n  .ps-xl-2 {\n    padding-left: 0.5rem !important;\n  }\n  .ps-xl-3 {\n    padding-left: 1rem !important;\n  }\n  .ps-xl-4 {\n    padding-left: 1.5rem !important;\n  }\n  .ps-xl-5 {\n    padding-left: 3rem !important;\n  }\n  .text-xl-start {\n    text-align: left !important;\n  }\n  .text-xl-end {\n    text-align: right !important;\n  }\n  .text-xl-center {\n    text-align: center !important;\n  }\n}\n@media (min-width: 1400px) {\n  .float-xxl-start {\n    float: left !important;\n  }\n  .float-xxl-end {\n    float: right !important;\n  }\n  .float-xxl-none {\n    float: none !important;\n  }\n  .d-xxl-inline {\n    display: inline !important;\n  }\n  .d-xxl-inline-block {\n    display: inline-block !important;\n  }\n  .d-xxl-block {\n    display: block !important;\n  }\n  .d-xxl-grid {\n    display: grid !important;\n  }\n  .d-xxl-table {\n    display: table !important;\n  }\n  .d-xxl-table-row {\n    display: table-row !important;\n  }\n  .d-xxl-table-cell {\n    display: table-cell !important;\n  }\n  .d-xxl-flex {\n    display: flex !important;\n  }\n  .d-xxl-inline-flex {\n    display: inline-flex !important;\n  }\n  .d-xxl-none {\n    display: none !important;\n  }\n  .flex-xxl-fill {\n    flex: 1 1 auto !important;\n  }\n  .flex-xxl-row {\n    flex-direction: row !important;\n  }\n  .flex-xxl-column {\n    flex-direction: column !important;\n  }\n  .flex-xxl-row-reverse {\n    flex-direction: row-reverse !important;\n  }\n  .flex-xxl-column-reverse {\n    flex-direction: column-reverse !important;\n  }\n  .flex-xxl-grow-0 {\n    flex-grow: 0 !important;\n  }\n  .flex-xxl-grow-1 {\n    flex-grow: 1 !important;\n  }\n  .flex-xxl-shrink-0 {\n    flex-shrink: 0 !important;\n  }\n  .flex-xxl-shrink-1 {\n    flex-shrink: 1 !important;\n  }\n  .flex-xxl-wrap {\n    flex-wrap: wrap !important;\n  }\n  .flex-xxl-nowrap {\n    flex-wrap: nowrap !important;\n  }\n  .flex-xxl-wrap-reverse {\n    flex-wrap: wrap-reverse !important;\n  }\n  .gap-xxl-0 {\n    gap: 0 !important;\n  }\n  .gap-xxl-1 {\n    gap: 0.25rem !important;\n  }\n  .gap-xxl-2 {\n    gap: 0.5rem !important;\n  }\n  .gap-xxl-3 {\n    gap: 1rem !important;\n  }\n  .gap-xxl-4 {\n    gap: 1.5rem !important;\n  }\n  .gap-xxl-5 {\n    gap: 3rem !important;\n  }\n  .justify-content-xxl-start {\n    justify-content: flex-start !important;\n  }\n  .justify-content-xxl-end {\n    justify-content: flex-end !important;\n  }\n  .justify-content-xxl-center {\n    justify-content: center !important;\n  }\n  .justify-content-xxl-between {\n    justify-content: space-between !important;\n  }\n  .justify-content-xxl-around {\n    justify-content: space-around !important;\n  }\n  .justify-content-xxl-evenly {\n    justify-content: space-evenly !important;\n  }\n  .align-items-xxl-start {\n    align-items: flex-start !important;\n  }\n  .align-items-xxl-end {\n    align-items: flex-end !important;\n  }\n  .align-items-xxl-center {\n    align-items: center !important;\n  }\n  .align-items-xxl-baseline {\n    align-items: baseline !important;\n  }\n  .align-items-xxl-stretch {\n    align-items: stretch !important;\n  }\n  .align-content-xxl-start {\n    align-content: flex-start !important;\n  }\n  .align-content-xxl-end {\n    align-content: flex-end !important;\n  }\n  .align-content-xxl-center {\n    align-content: center !important;\n  }\n  .align-content-xxl-between {\n    align-content: space-between !important;\n  }\n  .align-content-xxl-around {\n    align-content: space-around !important;\n  }\n  .align-content-xxl-stretch {\n    align-content: stretch !important;\n  }\n  .align-self-xxl-auto {\n    align-self: auto !important;\n  }\n  .align-self-xxl-start {\n    align-self: flex-start !important;\n  }\n  .align-self-xxl-end {\n    align-self: flex-end !important;\n  }\n  .align-self-xxl-center {\n    align-self: center !important;\n  }\n  .align-self-xxl-baseline {\n    align-self: baseline !important;\n  }\n  .align-self-xxl-stretch {\n    align-self: stretch !important;\n  }\n  .order-xxl-first {\n    order: -1 !important;\n  }\n  .order-xxl-0 {\n    order: 0 !important;\n  }\n  .order-xxl-1 {\n    order: 1 !important;\n  }\n  .order-xxl-2 {\n    order: 2 !important;\n  }\n  .order-xxl-3 {\n    order: 3 !important;\n  }\n  .order-xxl-4 {\n    order: 4 !important;\n  }\n  .order-xxl-5 {\n    order: 5 !important;\n  }\n  .order-xxl-last {\n    order: 6 !important;\n  }\n  .m-xxl-0 {\n    margin: 0 !important;\n  }\n  .m-xxl-1 {\n    margin: 0.25rem !important;\n  }\n  .m-xxl-2 {\n    margin: 0.5rem !important;\n  }\n  .m-xxl-3 {\n    margin: 1rem !important;\n  }\n  .m-xxl-4 {\n    margin: 1.5rem !important;\n  }\n  .m-xxl-5 {\n    margin: 3rem !important;\n  }\n  .m-xxl-auto {\n    margin: auto !important;\n  }\n  .mx-xxl-0 {\n    margin-right: 0 !important;\n    margin-left: 0 !important;\n  }\n  .mx-xxl-1 {\n    margin-right: 0.25rem !important;\n    margin-left: 0.25rem !important;\n  }\n  .mx-xxl-2 {\n    margin-right: 0.5rem !important;\n    margin-left: 0.5rem !important;\n  }\n  .mx-xxl-3 {\n    margin-right: 1rem !important;\n    margin-left: 1rem !important;\n  }\n  .mx-xxl-4 {\n    margin-right: 1.5rem !important;\n    margin-left: 1.5rem !important;\n  }\n  .mx-xxl-5 {\n    margin-right: 3rem !important;\n    margin-left: 3rem !important;\n  }\n  .mx-xxl-auto {\n    margin-right: auto !important;\n    margin-left: auto !important;\n  }\n  .my-xxl-0 {\n    margin-top: 0 !important;\n    margin-bottom: 0 !important;\n  }\n  .my-xxl-1 {\n    margin-top: 0.25rem !important;\n    margin-bottom: 0.25rem !important;\n  }\n  .my-xxl-2 {\n    margin-top: 0.5rem !important;\n    margin-bottom: 0.5rem !important;\n  }\n  .my-xxl-3 {\n    margin-top: 1rem !important;\n    margin-bottom: 1rem !important;\n  }\n  .my-xxl-4 {\n    margin-top: 1.5rem !important;\n    margin-bottom: 1.5rem !important;\n  }\n  .my-xxl-5 {\n    margin-top: 3rem !important;\n    margin-bottom: 3rem !important;\n  }\n  .my-xxl-auto {\n    margin-top: auto !important;\n    margin-bottom: auto !important;\n  }\n  .mt-xxl-0 {\n    margin-top: 0 !important;\n  }\n  .mt-xxl-1 {\n    margin-top: 0.25rem !important;\n  }\n  .mt-xxl-2 {\n    margin-top: 0.5rem !important;\n  }\n  .mt-xxl-3 {\n    margin-top: 1rem !important;\n  }\n  .mt-xxl-4 {\n    margin-top: 1.5rem !important;\n  }\n  .mt-xxl-5 {\n    margin-top: 3rem !important;\n  }\n  .mt-xxl-auto {\n    margin-top: auto !important;\n  }\n  .me-xxl-0 {\n    margin-right: 0 !important;\n  }\n  .me-xxl-1 {\n    margin-right: 0.25rem !important;\n  }\n  .me-xxl-2 {\n    margin-right: 0.5rem !important;\n  }\n  .me-xxl-3 {\n    margin-right: 1rem !important;\n  }\n  .me-xxl-4 {\n    margin-right: 1.5rem !important;\n  }\n  .me-xxl-5 {\n    margin-right: 3rem !important;\n  }\n  .me-xxl-auto {\n    margin-right: auto !important;\n  }\n  .mb-xxl-0 {\n    margin-bottom: 0 !important;\n  }\n  .mb-xxl-1 {\n    margin-bottom: 0.25rem !important;\n  }\n  .mb-xxl-2 {\n    margin-bottom: 0.5rem !important;\n  }\n  .mb-xxl-3 {\n    margin-bottom: 1rem !important;\n  }\n  .mb-xxl-4 {\n    margin-bottom: 1.5rem !important;\n  }\n  .mb-xxl-5 {\n    margin-bottom: 3rem !important;\n  }\n  .mb-xxl-auto {\n    margin-bottom: auto !important;\n  }\n  .ms-xxl-0 {\n    margin-left: 0 !important;\n  }\n  .ms-xxl-1 {\n    margin-left: 0.25rem !important;\n  }\n  .ms-xxl-2 {\n    margin-left: 0.5rem !important;\n  }\n  .ms-xxl-3 {\n    margin-left: 1rem !important;\n  }\n  .ms-xxl-4 {\n    margin-left: 1.5rem !important;\n  }\n  .ms-xxl-5 {\n    margin-left: 3rem !important;\n  }\n  .ms-xxl-auto {\n    margin-left: auto !important;\n  }\n  .p-xxl-0 {\n    padding: 0 !important;\n  }\n  .p-xxl-1 {\n    padding: 0.25rem !important;\n  }\n  .p-xxl-2 {\n    padding: 0.5rem !important;\n  }\n  .p-xxl-3 {\n    padding: 1rem !important;\n  }\n  .p-xxl-4 {\n    padding: 1.5rem !important;\n  }\n  .p-xxl-5 {\n    padding: 3rem !important;\n  }\n  .px-xxl-0 {\n    padding-right: 0 !important;\n    padding-left: 0 !important;\n  }\n  .px-xxl-1 {\n    padding-right: 0.25rem !important;\n    padding-left: 0.25rem !important;\n  }\n  .px-xxl-2 {\n    padding-right: 0.5rem !important;\n    padding-left: 0.5rem !important;\n  }\n  .px-xxl-3 {\n    padding-right: 1rem !important;\n    padding-left: 1rem !important;\n  }\n  .px-xxl-4 {\n    padding-right: 1.5rem !important;\n    padding-left: 1.5rem !important;\n  }\n  .px-xxl-5 {\n    padding-right: 3rem !important;\n    padding-left: 3rem !important;\n  }\n  .py-xxl-0 {\n    padding-top: 0 !important;\n    padding-bottom: 0 !important;\n  }\n  .py-xxl-1 {\n    padding-top: 0.25rem !important;\n    padding-bottom: 0.25rem !important;\n  }\n  .py-xxl-2 {\n    padding-top: 0.5rem !important;\n    padding-bottom: 0.5rem !important;\n  }\n  .py-xxl-3 {\n    padding-top: 1rem !important;\n    padding-bottom: 1rem !important;\n  }\n  .py-xxl-4 {\n    padding-top: 1.5rem !important;\n    padding-bottom: 1.5rem !important;\n  }\n  .py-xxl-5 {\n    padding-top: 3rem !important;\n    padding-bottom: 3rem !important;\n  }\n  .pt-xxl-0 {\n    padding-top: 0 !important;\n  }\n  .pt-xxl-1 {\n    padding-top: 0.25rem !important;\n  }\n  .pt-xxl-2 {\n    padding-top: 0.5rem !important;\n  }\n  .pt-xxl-3 {\n    padding-top: 1rem !important;\n  }\n  .pt-xxl-4 {\n    padding-top: 1.5rem !important;\n  }\n  .pt-xxl-5 {\n    padding-top: 3rem !important;\n  }\n  .pe-xxl-0 {\n    padding-right: 0 !important;\n  }\n  .pe-xxl-1 {\n    padding-right: 0.25rem !important;\n  }\n  .pe-xxl-2 {\n    padding-right: 0.5rem !important;\n  }\n  .pe-xxl-3 {\n    padding-right: 1rem !important;\n  }\n  .pe-xxl-4 {\n    padding-right: 1.5rem !important;\n  }\n  .pe-xxl-5 {\n    padding-right: 3rem !important;\n  }\n  .pb-xxl-0 {\n    padding-bottom: 0 !important;\n  }\n  .pb-xxl-1 {\n    padding-bottom: 0.25rem !important;\n  }\n  .pb-xxl-2 {\n    padding-bottom: 0.5rem !important;\n  }\n  .pb-xxl-3 {\n    padding-bottom: 1rem !important;\n  }\n  .pb-xxl-4 {\n    padding-bottom: 1.5rem !important;\n  }\n  .pb-xxl-5 {\n    padding-bottom: 3rem !important;\n  }\n  .ps-xxl-0 {\n    padding-left: 0 !important;\n  }\n  .ps-xxl-1 {\n    padding-left: 0.25rem !important;\n  }\n  .ps-xxl-2 {\n    padding-left: 0.5rem !important;\n  }\n  .ps-xxl-3 {\n    padding-left: 1rem !important;\n  }\n  .ps-xxl-4 {\n    padding-left: 1.5rem !important;\n  }\n  .ps-xxl-5 {\n    padding-left: 3rem !important;\n  }\n  .text-xxl-start {\n    text-align: left !important;\n  }\n  .text-xxl-end {\n    text-align: right !important;\n  }\n  .text-xxl-center {\n    text-align: center !important;\n  }\n}\n@media (min-width: 1200px) {\n  .fs-1 {\n    font-size: 2.5rem !important;\n  }\n  .fs-2 {\n    font-size: 2rem !important;\n  }\n  .fs-3 {\n    font-size: 1.75rem !important;\n  }\n  .fs-4 {\n    font-size: 1.5rem !important;\n  }\n}\n@media print {\n  .d-print-inline {\n    display: inline !important;\n  }\n  .d-print-inline-block {\n    display: inline-block !important;\n  }\n  .d-print-block {\n    display: block !important;\n  }\n  .d-print-grid {\n    display: grid !important;\n  }\n  .d-print-table {\n    display: table !important;\n  }\n  .d-print-table-row {\n    display: table-row !important;\n  }\n  .d-print-table-cell {\n    display: table-cell !important;\n  }\n  .d-print-flex {\n    display: flex !important;\n  }\n  .d-print-inline-flex {\n    display: inline-flex !important;\n  }\n  .d-print-none {\n    display: none !important;\n  }\n}\n/******** jquery smartmenu bootstrap 4 ******/\n/* Carets in collapsible mode (make them look like +/- buttons) */\n.navbar-nav.sm-collapsible .sub-arrow {\n  position: absolute;\n  top: 50%;\n  right: 0;\n  margin: -0.7em 0.5em 0 0;\n  border: 1px solid rgba(0, 0, 0, 0.1);\n  border-radius: 0.25rem;\n  padding: 0;\n  width: 2em;\n  height: 1.4em;\n  font-size: 1.25rem;\n  line-height: 1.2em;\n  text-align: center;\n}\n\n.navbar-nav.sm-collapsible .sub-arrow::before {\n  content: \"+\";\n}\n\n.navbar-nav.sm-collapsible .show > a > .sub-arrow::before {\n  content: \"-\";\n}\n\n.navbar-dark .navbar-nav.sm-collapsible .nav-link .sub-arrow {\n  border-color: rgba(255, 255, 255, 0.1);\n}\n\n/* make sure there's room for the carets */\n.navbar-nav.sm-collapsible .has-submenu {\n  padding-right: 3em;\n}\n\n/* keep the carets properly positioned */\n.navbar-nav.sm-collapsible .nav-link,\n.navbar-nav.sm-collapsible .dropdown-item {\n  position: relative;\n}\n\n/* Nav carets in expanded mode */\n.navbar-nav:not(.sm-collapsible) .nav-link .sub-arrow {\n  display: inline-block;\n  width: 0;\n  height: 0;\n  margin-left: 0.255em;\n  vertical-align: 0.255em;\n  border-top: 0.3em solid;\n  border-right: 0.3em solid transparent;\n  border-left: 0.3em solid transparent;\n}\n\n/* point the arrows up for .fixed-bottom navbars */\n.fixed-bottom .navbar-nav:not(.sm-collapsible) .nav-link .sub-arrow,\n.fixed-bottom .navbar-nav:not(.sm-collapsible):not([data-sm-skip]) .dropdown-toggle::after {\n  border-top: 0;\n  border-bottom: 0.3em solid;\n}\n\n/* Dropdown carets in expanded mode */\n.navbar-nav:not(.sm-collapsible) .dropdown-item .sub-arrow,\n.navbar-nav:not(.sm-collapsible):not([data-sm-skip]) .dropdown-menu .dropdown-toggle::after {\n  position: absolute;\n  top: 50%;\n  right: 0;\n  width: 0;\n  height: 0;\n  margin-top: -0.3em;\n  margin-right: 1em;\n  border-top: 0.3em solid transparent;\n  border-bottom: 0.3em solid transparent;\n  border-left: 0.3em solid;\n}\n\n/* make sure there's room for the carets */\n.navbar-nav:not(.sm-collapsible) .dropdown-item.has-submenu {\n  padding-right: 2em;\n}\n\n/* Scrolling arrows for tall menus */\n.navbar-nav .scroll-up,\n.navbar-nav .scroll-down {\n  position: absolute;\n  display: none;\n  visibility: hidden;\n  height: 20px;\n  overflow: hidden;\n  text-align: center;\n}\n\n.navbar-nav .scroll-up-arrow,\n.navbar-nav .scroll-down-arrow {\n  position: absolute;\n  top: -2px;\n  left: 50%;\n  margin-left: -8px;\n  width: 0;\n  height: 0;\n  overflow: hidden;\n  border-top: 7px solid transparent;\n  border-right: 7px solid transparent;\n  border-bottom: 7px solid;\n  border-left: 7px solid transparent;\n}\n\n.navbar-nav .scroll-down-arrow {\n  top: 6px;\n  border-top: 7px solid;\n  border-right: 7px solid transparent;\n  border-bottom: 7px solid transparent;\n  border-left: 7px solid transparent;\n}\n\n/* Add some spacing for 2+ level sub menus in collapsible mode */\n.navbar-nav.sm-collapsible .dropdown-menu .dropdown-menu {\n  margin: 0.5em;\n}\n\n/* Fix SmartMenus sub menus auto width (subMenusMinWidth/subMenusMaxWidth options) */\n.navbar-nav:not([data-sm-skip]) .dropdown-item {\n  white-space: normal;\n}\n\n.navbar-nav:not(.sm-collapsible) .sm-nowrap > li > .dropdown-item {\n  white-space: nowrap;\n}\n\n/*!\n* Font Awesome Free 5.1.0-8 by @fontawesome - https://fontawesome.com\n* License - https://fontawesome.com/license (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)\n*/\n.fa,\n.fas,\n.far,\n.fal,\n.fad,\n.fab {\n  -moz-osx-font-smoothing: grayscale;\n  -webkit-font-smoothing: antialiased;\n  display: inline-block;\n  font-style: normal;\n  font-variant: normal;\n  text-rendering: auto;\n  line-height: 1;\n}\n\n.fa-lg {\n  font-size: 1.3333333333em;\n  line-height: 0.75em;\n  vertical-align: -0.0667em;\n}\n\n.fa-xs {\n  font-size: 0.75em;\n}\n\n.fa-sm {\n  font-size: 0.875em;\n}\n\n.fa-1x {\n  font-size: 1em;\n}\n\n.fa-2x {\n  font-size: 2em;\n}\n\n.fa-3x {\n  font-size: 3em;\n}\n\n.fa-4x {\n  font-size: 4em;\n}\n\n.fa-5x {\n  font-size: 5em;\n}\n\n.fa-6x {\n  font-size: 6em;\n}\n\n.fa-7x {\n  font-size: 7em;\n}\n\n.fa-8x {\n  font-size: 8em;\n}\n\n.fa-9x {\n  font-size: 9em;\n}\n\n.fa-10x {\n  font-size: 10em;\n}\n\n.fa-fw {\n  text-align: center;\n  width: 1.25em;\n}\n\n.fa-ul {\n  list-style-type: none;\n  margin-left: 2.5em;\n  padding-left: 0;\n}\n.fa-ul > li {\n  position: relative;\n}\n\n.fa-li {\n  left: -2em;\n  position: absolute;\n  text-align: center;\n  width: 2em;\n  line-height: inherit;\n}\n\n.fa-border {\n  border: solid 0.08em #eee;\n  border-radius: 0.1em;\n  padding: 0.2em 0.25em 0.15em;\n}\n\n.fa-pull-left {\n  float: left;\n}\n\n.fa-pull-right {\n  float: right;\n}\n\n.fa.fa-pull-left,\n.fas.fa-pull-left,\n.far.fa-pull-left,\n.fal.fa-pull-left,\n.fab.fa-pull-left {\n  margin-right: 0.3em;\n}\n.fa.fa-pull-right,\n.fas.fa-pull-right,\n.far.fa-pull-right,\n.fal.fa-pull-right,\n.fab.fa-pull-right {\n  margin-left: 0.3em;\n}\n\n.fa-spin {\n  animation: fa-spin 2s infinite linear;\n}\n\n.fa-pulse {\n  animation: fa-spin 1s infinite steps(8);\n}\n\n@keyframes fa-spin {\n  0% {\n    transform: rotate(0deg);\n  }\n  100% {\n    transform: rotate(360deg);\n  }\n}\n.fa-rotate-90 {\n  -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)\";\n  transform: rotate(90deg);\n}\n\n.fa-rotate-180 {\n  -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)\";\n  transform: rotate(180deg);\n}\n\n.fa-rotate-270 {\n  -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)\";\n  transform: rotate(270deg);\n}\n\n.fa-flip-horizontal {\n  -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)\";\n  transform: scale(-1, 1);\n}\n\n.fa-flip-vertical {\n  -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)\";\n  transform: scale(1, -1);\n}\n\n.fa-flip-both, .fa-flip-horizontal.fa-flip-vertical {\n  -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)\";\n  transform: scale(-1, -1);\n}\n\n:root .fa-rotate-90,\n:root .fa-rotate-180,\n:root .fa-rotate-270,\n:root .fa-flip-horizontal,\n:root .fa-flip-vertical,\n:root .fa-flip-both {\n  filter: none;\n}\n\n.fa-stack {\n  display: inline-block;\n  height: 2em;\n  line-height: 2em;\n  position: relative;\n  vertical-align: middle;\n  width: 2.5em;\n}\n\n.fa-stack-1x,\n.fa-stack-2x {\n  left: 0;\n  position: absolute;\n  text-align: center;\n  width: 100%;\n}\n\n.fa-stack-1x {\n  line-height: inherit;\n}\n\n.fa-stack-2x {\n  font-size: 2em;\n}\n\n.fa-inverse {\n  color: #fff;\n}\n\n/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen\nreaders do not read off random characters that represent icons */\n/* you should comment out any of these that you are not using and don't expect to use in order to make the output css smaller */\n.fa-500px:before {\n  content: \"\\f26e\";\n}\n\n.fa-accessible-icon:before {\n  content: \"\\f368\";\n}\n\n.fa-accusoft:before {\n  content: \"\\f369\";\n}\n\n.fa-acquisitions-incorporated:before {\n  content: \"\\f6af\";\n}\n\n.fa-ad:before {\n  content: \"\\f641\";\n}\n\n.fa-address-book:before {\n  content: \"\\f2b9\";\n}\n\n.fa-address-card:before {\n  content: \"\\f2bb\";\n}\n\n.fa-adjust:before {\n  content: \"\\f042\";\n}\n\n.fa-adn:before {\n  content: \"\\f170\";\n}\n\n/*.fa-adobe:before { content: fa-content($fa-var-adobe); }*/\n.fa-adversal:before {\n  content: \"\\f36a\";\n}\n\n.fa-affiliatetheme:before {\n  content: \"\\f36b\";\n}\n\n.fa-air-freshener:before {\n  content: \"\\f5d0\";\n}\n\n.fa-algolia:before {\n  content: \"\\f36c\";\n}\n\n.fa-align-center:before {\n  content: \"\\f037\";\n}\n\n.fa-align-justify:before {\n  content: \"\\f039\";\n}\n\n.fa-align-left:before {\n  content: \"\\f036\";\n}\n\n.fa-align-right:before {\n  content: \"\\f038\";\n}\n\n.fa-alipay:before {\n  content: \"\\f642\";\n}\n\n.fa-allergies:before {\n  content: \"\\f461\";\n}\n\n.fa-amazon:before {\n  content: \"\\f270\";\n}\n\n.fa-amazon-pay:before {\n  content: \"\\f42c\";\n}\n\n.fa-ambulance:before {\n  content: \"\\f0f9\";\n}\n\n.fa-american-sign-language-interpreting:before {\n  content: \"\\f2a3\";\n}\n\n.fa-amilia:before {\n  content: \"\\f36d\";\n}\n\n.fa-anchor:before {\n  content: \"\\f13d\";\n}\n\n.fa-android:before {\n  content: \"\\f17b\";\n}\n\n.fa-angellist:before {\n  content: \"\\f209\";\n}\n\n.fa-angle-double-down:before {\n  content: \"\\f103\";\n}\n\n.fa-angle-double-left:before {\n  content: \"\\f100\";\n}\n\n.fa-angle-double-right:before {\n  content: \"\\f101\";\n}\n\n.fa-angle-double-up:before {\n  content: \"\\f102\";\n}\n\n.fa-angle-down:before {\n  content: \"\\f107\";\n}\n\n.fa-angle-left:before {\n  content: \"\\f104\";\n}\n\n.fa-angle-right:before {\n  content: \"\\f105\";\n}\n\n.fa-angle-up:before {\n  content: \"\\f106\";\n}\n\n.fa-angry:before {\n  content: \"\\f556\";\n}\n\n.fa-angrycreative:before {\n  content: \"\\f36e\";\n}\n\n.fa-angular:before {\n  content: \"\\f420\";\n}\n\n.fa-ankh:before {\n  content: \"\\f644\";\n}\n\n.fa-app-store:before {\n  content: \"\\f36f\";\n}\n\n.fa-app-store-ios:before {\n  content: \"\\f370\";\n}\n\n.fa-apper:before {\n  content: \"\\f371\";\n}\n\n.fa-apple:before {\n  content: \"\\f179\";\n}\n\n.fa-apple-alt:before {\n  content: \"\\f5d1\";\n}\n\n.fa-apple-pay:before {\n  content: \"\\f415\";\n}\n\n.fa-archive:before {\n  content: \"\\f187\";\n}\n\n.fa-archway:before {\n  content: \"\\f557\";\n}\n\n.fa-arrow-alt-circle-down:before {\n  content: \"\\f358\";\n}\n\n.fa-arrow-alt-circle-left:before {\n  content: \"\\f359\";\n}\n\n.fa-arrow-alt-circle-right:before {\n  content: \"\\f35a\";\n}\n\n.fa-arrow-alt-circle-up:before {\n  content: \"\\f35b\";\n}\n\n.fa-arrow-circle-down:before {\n  content: \"\\f0ab\";\n}\n\n.fa-arrow-circle-left:before {\n  content: \"\\f0a8\";\n}\n\n.fa-arrow-circle-right:before {\n  content: \"\\f0a9\";\n}\n\n.fa-arrow-circle-up:before {\n  content: \"\\f0aa\";\n}\n\n.fa-arrow-down:before {\n  content: \"\\f063\";\n}\n\n.fa-arrow-left:before {\n  content: \"\\f060\";\n}\n\n.fa-arrow-right:before {\n  content: \"\\f061\";\n}\n\n.fa-arrow-up:before {\n  content: \"\\f062\";\n}\n\n.fa-arrows-alt:before {\n  content: \"\\f0b2\";\n}\n\n.fa-arrows-alt-h:before {\n  content: \"\\f337\";\n}\n\n.fa-arrows-alt-v:before {\n  content: \"\\f338\";\n}\n\n.fa-artstation:before {\n  content: \"\\f77a\";\n}\n\n.fa-assistive-listening-systems:before {\n  content: \"\\f2a2\";\n}\n\n.fa-asterisk:before {\n  content: \"\\f069\";\n}\n\n.fa-asymmetrik:before {\n  content: \"\\f372\";\n}\n\n.fa-at:before {\n  content: \"\\f1fa\";\n}\n\n.fa-atlas:before {\n  content: \"\\f558\";\n}\n\n.fa-atlassian:before {\n  content: \"\\f77b\";\n}\n\n.fa-atom:before {\n  content: \"\\f5d2\";\n}\n\n.fa-audible:before {\n  content: \"\\f373\";\n}\n\n.fa-audio-description:before {\n  content: \"\\f29e\";\n}\n\n.fa-autoprefixer:before {\n  content: \"\\f41c\";\n}\n\n.fa-avianex:before {\n  content: \"\\f374\";\n}\n\n.fa-aviato:before {\n  content: \"\\f421\";\n}\n\n.fa-award:before {\n  content: \"\\f559\";\n}\n\n.fa-aws:before {\n  content: \"\\f375\";\n}\n\n.fa-baby:before {\n  content: \"\\f77c\";\n}\n\n.fa-baby-carriage:before {\n  content: \"\\f77d\";\n}\n\n.fa-backspace:before {\n  content: \"\\f55a\";\n}\n\n.fa-backward:before {\n  content: \"\\f04a\";\n}\n\n.fa-balance-scale:before {\n  content: \"\\f24e\";\n}\n\n.fa-ban:before {\n  content: \"\\f05e\";\n}\n\n.fa-band-aid:before {\n  content: \"\\f462\";\n}\n\n.fa-bandcamp:before {\n  content: \"\\f2d5\";\n}\n\n.fa-barcode:before {\n  content: \"\\f02a\";\n}\n\n.fa-bars:before {\n  content: \"\\f0c9\";\n}\n\n.fa-baseball-ball:before {\n  content: \"\\f433\";\n}\n\n.fa-basketball-ball:before {\n  content: \"\\f434\";\n}\n\n.fa-bath:before {\n  content: \"\\f2cd\";\n}\n\n.fa-battery-empty:before {\n  content: \"\\f244\";\n}\n\n.fa-battery-full:before {\n  content: \"\\f240\";\n}\n\n.fa-battery-half:before {\n  content: \"\\f242\";\n}\n\n.fa-battery-quarter:before {\n  content: \"\\f243\";\n}\n\n.fa-battery-three-quarters:before {\n  content: \"\\f241\";\n}\n\n.fa-bed:before {\n  content: \"\\f236\";\n}\n\n.fa-beer:before {\n  content: \"\\f0fc\";\n}\n\n.fa-behance:before {\n  content: \"\\f1b4\";\n}\n\n.fa-behance-square:before {\n  content: \"\\f1b5\";\n}\n\n.fa-bell:before {\n  content: \"\\f0f3\";\n}\n\n.fa-bell-slash:before {\n  content: \"\\f1f6\";\n}\n\n.fa-bezier-curve:before {\n  content: \"\\f55b\";\n}\n\n.fa-bible:before {\n  content: \"\\f647\";\n}\n\n.fa-bicycle:before {\n  content: \"\\f206\";\n}\n\n.fa-bimobject:before {\n  content: \"\\f378\";\n}\n\n.fa-binoculars:before {\n  content: \"\\f1e5\";\n}\n\n.fa-biohazard:before {\n  content: \"\\f780\";\n}\n\n.fa-birthday-cake:before {\n  content: \"\\f1fd\";\n}\n\n.fa-bitbucket:before {\n  content: \"\\f171\";\n}\n\n.fa-bitcoin:before {\n  content: \"\\f379\";\n}\n\n.fa-bity:before {\n  content: \"\\f37a\";\n}\n\n.fa-black-tie:before {\n  content: \"\\f27e\";\n}\n\n.fa-blackberry:before {\n  content: \"\\f37b\";\n}\n\n.fa-blender:before {\n  content: \"\\f517\";\n}\n\n.fa-blender-phone:before {\n  content: \"\\f6b6\";\n}\n\n.fa-blind:before {\n  content: \"\\f29d\";\n}\n\n.fa-blog:before {\n  content: \"\\f781\";\n}\n\n.fa-blogger:before {\n  content: \"\\f37c\";\n}\n\n.fa-blogger-b:before {\n  content: \"\\f37d\";\n}\n\n.fa-bluetooth:before {\n  content: \"\\f293\";\n}\n\n.fa-bluetooth-b:before {\n  content: \"\\f294\";\n}\n\n.fa-bold:before {\n  content: \"\\f032\";\n}\n\n.fa-bolt:before {\n  content: \"\\f0e7\";\n}\n\n.fa-bomb:before {\n  content: \"\\f1e2\";\n}\n\n.fa-bone:before {\n  content: \"\\f5d7\";\n}\n\n.fa-bong:before {\n  content: \"\\f55c\";\n}\n\n.fa-book:before {\n  content: \"\\f02d\";\n}\n\n.fa-book-dead:before {\n  content: \"\\f6b7\";\n}\n\n.fa-book-open:before {\n  content: \"\\f518\";\n}\n\n.fa-book-reader:before {\n  content: \"\\f5da\";\n}\n\n.fa-bookmark:before {\n  content: \"\\f02e\";\n}\n\n.fa-bowling-ball:before {\n  content: \"\\f436\";\n}\n\n.fa-box:before {\n  content: \"\\f466\";\n}\n\n.fa-box-open:before {\n  content: \"\\f49e\";\n}\n\n.fa-boxes:before {\n  content: \"\\f468\";\n}\n\n.fa-braille:before {\n  content: \"\\f2a1\";\n}\n\n.fa-brain:before {\n  content: \"\\f5dc\";\n}\n\n.fa-briefcase:before {\n  content: \"\\f0b1\";\n}\n\n.fa-briefcase-medical:before {\n  content: \"\\f469\";\n}\n\n.fa-broadcast-tower:before {\n  content: \"\\f519\";\n}\n\n.fa-broom:before {\n  content: \"\\f51a\";\n}\n\n.fa-brush:before {\n  content: \"\\f55d\";\n}\n\n.fa-btc:before {\n  content: \"\\f15a\";\n}\n\n.fa-bug:before {\n  content: \"\\f188\";\n}\n\n.fa-building:before {\n  content: \"\\f1ad\";\n}\n\n.fa-bullhorn:before {\n  content: \"\\f0a1\";\n}\n\n.fa-bullseye:before {\n  content: \"\\f140\";\n}\n\n.fa-burn:before {\n  content: \"\\f46a\";\n}\n\n.fa-buromobelexperte:before {\n  content: \"\\f37f\";\n}\n\n.fa-bus:before {\n  content: \"\\f207\";\n}\n\n.fa-bus-alt:before {\n  content: \"\\f55e\";\n}\n\n.fa-business-time:before {\n  content: \"\\f64a\";\n}\n\n.fa-buysellads:before {\n  content: \"\\f20d\";\n}\n\n.fa-calculator:before {\n  content: \"\\f1ec\";\n}\n\n.fa-calendar:before {\n  content: \"\\f133\";\n}\n\n.fa-calendar-alt:before {\n  content: \"\\f073\";\n}\n\n.fa-calendar-check:before {\n  content: \"\\f274\";\n}\n\n.fa-calendar-day:before {\n  content: \"\\f783\";\n}\n\n.fa-calendar-minus:before {\n  content: \"\\f272\";\n}\n\n.fa-calendar-plus:before {\n  content: \"\\f271\";\n}\n\n.fa-calendar-times:before {\n  content: \"\\f273\";\n}\n\n.fa-calendar-week:before {\n  content: \"\\f784\";\n}\n\n.fa-camera:before {\n  content: \"\\f030\";\n}\n\n.fa-camera-retro:before {\n  content: \"\\f083\";\n}\n\n.fa-campground:before {\n  content: \"\\f6bb\";\n}\n\n.fa-canadian-maple-leaf:before {\n  content: \"\\f785\";\n}\n\n.fa-candy-cane:before {\n  content: \"\\f786\";\n}\n\n.fa-cannabis:before {\n  content: \"\\f55f\";\n}\n\n.fa-capsules:before {\n  content: \"\\f46b\";\n}\n\n.fa-car:before {\n  content: \"\\f1b9\";\n}\n\n.fa-car-alt:before {\n  content: \"\\f5de\";\n}\n\n.fa-car-battery:before {\n  content: \"\\f5df\";\n}\n\n.fa-car-crash:before {\n  content: \"\\f5e1\";\n}\n\n.fa-car-side:before {\n  content: \"\\f5e4\";\n}\n\n.fa-caret-down:before {\n  content: \"\\f0d7\";\n}\n\n.fa-caret-left:before {\n  content: \"\\f0d9\";\n}\n\n.fa-caret-right:before {\n  content: \"\\f0da\";\n}\n\n.fa-caret-square-down:before {\n  content: \"\\f150\";\n}\n\n.fa-caret-square-left:before {\n  content: \"\\f191\";\n}\n\n.fa-caret-square-right:before {\n  content: \"\\f152\";\n}\n\n.fa-caret-square-up:before {\n  content: \"\\f151\";\n}\n\n.fa-caret-up:before {\n  content: \"\\f0d8\";\n}\n\n.fa-carrot:before {\n  content: \"\\f787\";\n}\n\n.fa-cart-arrow-down:before {\n  content: \"\\f218\";\n}\n\n.fa-cart-plus:before {\n  content: \"\\f217\";\n}\n\n.fa-cash-register:before {\n  content: \"\\f788\";\n}\n\n.fa-cat:before {\n  content: \"\\f6be\";\n}\n\n.fa-cc-amazon-pay:before {\n  content: \"\\f42d\";\n}\n\n.fa-cc-amex:before {\n  content: \"\\f1f3\";\n}\n\n.fa-cc-apple-pay:before {\n  content: \"\\f416\";\n}\n\n.fa-cc-diners-club:before {\n  content: \"\\f24c\";\n}\n\n.fa-cc-discover:before {\n  content: \"\\f1f2\";\n}\n\n.fa-cc-jcb:before {\n  content: \"\\f24b\";\n}\n\n.fa-cc-mastercard:before {\n  content: \"\\f1f1\";\n}\n\n.fa-cc-paypal:before {\n  content: \"\\f1f4\";\n}\n\n.fa-cc-stripe:before {\n  content: \"\\f1f5\";\n}\n\n.fa-cc-visa:before {\n  content: \"\\f1f0\";\n}\n\n.fa-centercode:before {\n  content: \"\\f380\";\n}\n\n.fa-centos:before {\n  content: \"\\f789\";\n}\n\n.fa-certificate:before {\n  content: \"\\f0a3\";\n}\n\n.fa-chair:before {\n  content: \"\\f6c0\";\n}\n\n.fa-chalkboard:before {\n  content: \"\\f51b\";\n}\n\n.fa-chalkboard-teacher:before {\n  content: \"\\f51c\";\n}\n\n.fa-charging-station:before {\n  content: \"\\f5e7\";\n}\n\n.fa-chart-area:before {\n  content: \"\\f1fe\";\n}\n\n.fa-chart-bar:before {\n  content: \"\\f080\";\n}\n\n.fa-chart-line:before {\n  content: \"\\f201\";\n}\n\n.fa-chart-pie:before {\n  content: \"\\f200\";\n}\n\n.fa-check:before {\n  content: \"\\f00c\";\n}\n\n.fa-check-circle:before {\n  content: \"\\f058\";\n}\n\n.fa-check-double:before {\n  content: \"\\f560\";\n}\n\n.fa-check-square:before {\n  content: \"\\f14a\";\n}\n\n.fa-chess:before {\n  content: \"\\f439\";\n}\n\n.fa-chess-bishop:before {\n  content: \"\\f43a\";\n}\n\n.fa-chess-board:before {\n  content: \"\\f43c\";\n}\n\n.fa-chess-king:before {\n  content: \"\\f43f\";\n}\n\n.fa-chess-knight:before {\n  content: \"\\f441\";\n}\n\n.fa-chess-pawn:before {\n  content: \"\\f443\";\n}\n\n.fa-chess-queen:before {\n  content: \"\\f445\";\n}\n\n.fa-chess-rook:before {\n  content: \"\\f447\";\n}\n\n.fa-chevron-circle-down:before {\n  content: \"\\f13a\";\n}\n\n.fa-chevron-circle-left:before {\n  content: \"\\f137\";\n}\n\n.fa-chevron-circle-right:before {\n  content: \"\\f138\";\n}\n\n.fa-chevron-circle-up:before {\n  content: \"\\f139\";\n}\n\n.fa-chevron-down:before {\n  content: \"\\f078\";\n}\n\n.fa-chevron-left:before {\n  content: \"\\f053\";\n}\n\n.fa-chevron-right:before {\n  content: \"\\f054\";\n}\n\n.fa-chevron-up:before {\n  content: \"\\f077\";\n}\n\n.fa-child:before {\n  content: \"\\f1ae\";\n}\n\n.fa-chrome:before {\n  content: \"\\f268\";\n}\n\n.fa-church:before {\n  content: \"\\f51d\";\n}\n\n.fa-circle:before {\n  content: \"\\f111\";\n}\n\n.fa-circle-notch:before {\n  content: \"\\f1ce\";\n}\n\n.fa-city:before {\n  content: \"\\f64f\";\n}\n\n.fa-clipboard:before {\n  content: \"\\f328\";\n}\n\n.fa-clipboard-check:before {\n  content: \"\\f46c\";\n}\n\n.fa-clipboard-list:before {\n  content: \"\\f46d\";\n}\n\n.fa-clock:before {\n  content: \"\\f017\";\n}\n\n.fa-clone:before {\n  content: \"\\f24d\";\n}\n\n.fa-closed-captioning:before {\n  content: \"\\f20a\";\n}\n\n.fa-cloud:before {\n  content: \"\\f0c2\";\n}\n\n.fa-cloud-download-alt:before {\n  content: \"\\f381\";\n}\n\n.fa-cloud-meatball:before {\n  content: \"\\f73b\";\n}\n\n.fa-cloud-moon:before {\n  content: \"\\f6c3\";\n}\n\n.fa-cloud-moon-rain:before {\n  content: \"\\f73c\";\n}\n\n.fa-cloud-rain:before {\n  content: \"\\f73d\";\n}\n\n.fa-cloud-showers-heavy:before {\n  content: \"\\f740\";\n}\n\n.fa-cloud-sun:before {\n  content: \"\\f6c4\";\n}\n\n.fa-cloud-sun-rain:before {\n  content: \"\\f743\";\n}\n\n.fa-cloud-upload-alt:before {\n  content: \"\\f382\";\n}\n\n.fa-cloudscale:before {\n  content: \"\\f383\";\n}\n\n.fa-cloudsmith:before {\n  content: \"\\f384\";\n}\n\n.fa-cloudversify:before {\n  content: \"\\f385\";\n}\n\n.fa-cocktail:before {\n  content: \"\\f561\";\n}\n\n.fa-code:before {\n  content: \"\\f121\";\n}\n\n.fa-code-branch:before {\n  content: \"\\f126\";\n}\n\n.fa-codepen:before {\n  content: \"\\f1cb\";\n}\n\n.fa-codiepie:before {\n  content: \"\\f284\";\n}\n\n.fa-coffee:before {\n  content: \"\\f0f4\";\n}\n\n.fa-cog:before {\n  content: \"\\f013\";\n}\n\n.fa-cogs:before {\n  content: \"\\f085\";\n}\n\n.fa-coins:before {\n  content: \"\\f51e\";\n}\n\n.fa-columns:before {\n  content: \"\\f0db\";\n}\n\n.fa-comment:before {\n  content: \"\\f075\";\n}\n\n.fa-comment-alt:before {\n  content: \"\\f27a\";\n}\n\n.fa-comment-dollar:before {\n  content: \"\\f651\";\n}\n\n.fa-comment-dots:before {\n  content: \"\\f4ad\";\n}\n\n.fa-comment-slash:before {\n  content: \"\\f4b3\";\n}\n\n.fa-comments:before {\n  content: \"\\f086\";\n}\n\n.fa-comments-dollar:before {\n  content: \"\\f653\";\n}\n\n.fa-compact-disc:before {\n  content: \"\\f51f\";\n}\n\n.fa-compass:before {\n  content: \"\\f14e\";\n}\n\n.fa-compress:before {\n  content: \"\\f066\";\n}\n\n.fa-compress-arrows-alt:before {\n  content: \"\\f78c\";\n}\n\n.fa-concierge-bell:before {\n  content: \"\\f562\";\n}\n\n.fa-confluence:before {\n  content: \"\\f78d\";\n}\n\n.fa-connectdevelop:before {\n  content: \"\\f20e\";\n}\n\n.fa-contao:before {\n  content: \"\\f26d\";\n}\n\n.fa-cookie:before {\n  content: \"\\f563\";\n}\n\n.fa-cookie-bite:before {\n  content: \"\\f564\";\n}\n\n.fa-copy:before {\n  content: \"\\f0c5\";\n}\n\n.fa-copyright:before {\n  content: \"\\f1f9\";\n}\n\n.fa-couch:before {\n  content: \"\\f4b8\";\n}\n\n.fa-cpanel:before {\n  content: \"\\f388\";\n}\n\n.fa-creative-commons:before {\n  content: \"\\f25e\";\n}\n\n.fa-creative-commons-by:before {\n  content: \"\\f4e7\";\n}\n\n.fa-creative-commons-nc:before {\n  content: \"\\f4e8\";\n}\n\n.fa-creative-commons-nc-eu:before {\n  content: \"\\f4e9\";\n}\n\n.fa-creative-commons-nc-jp:before {\n  content: \"\\f4ea\";\n}\n\n.fa-creative-commons-nd:before {\n  content: \"\\f4eb\";\n}\n\n.fa-creative-commons-pd:before {\n  content: \"\\f4ec\";\n}\n\n.fa-creative-commons-pd-alt:before {\n  content: \"\\f4ed\";\n}\n\n.fa-creative-commons-remix:before {\n  content: \"\\f4ee\";\n}\n\n.fa-creative-commons-sa:before {\n  content: \"\\f4ef\";\n}\n\n.fa-creative-commons-sampling:before {\n  content: \"\\f4f0\";\n}\n\n.fa-creative-commons-sampling-plus:before {\n  content: \"\\f4f1\";\n}\n\n.fa-creative-commons-share:before {\n  content: \"\\f4f2\";\n}\n\n.fa-creative-commons-zero:before {\n  content: \"\\f4f3\";\n}\n\n.fa-credit-card:before {\n  content: \"\\f09d\";\n}\n\n.fa-critical-role:before {\n  content: \"\\f6c9\";\n}\n\n.fa-crop:before {\n  content: \"\\f125\";\n}\n\n.fa-crop-alt:before {\n  content: \"\\f565\";\n}\n\n.fa-cross:before {\n  content: \"\\f654\";\n}\n\n.fa-crosshairs:before {\n  content: \"\\f05b\";\n}\n\n.fa-crow:before {\n  content: \"\\f520\";\n}\n\n.fa-crown:before {\n  content: \"\\f521\";\n}\n\n.fa-css3:before {\n  content: \"\\f13c\";\n}\n\n.fa-css3-alt:before {\n  content: \"\\f38b\";\n}\n\n.fa-cube:before {\n  content: \"\\f1b2\";\n}\n\n.fa-cubes:before {\n  content: \"\\f1b3\";\n}\n\n.fa-cut:before {\n  content: \"\\f0c4\";\n}\n\n.fa-cuttlefish:before {\n  content: \"\\f38c\";\n}\n\n.fa-d-and-d:before {\n  content: \"\\f38d\";\n}\n\n.fa-d-and-d-beyond:before {\n  content: \"\\f6ca\";\n}\n\n.fa-dashcube:before {\n  content: \"\\f210\";\n}\n\n.fa-database:before {\n  content: \"\\f1c0\";\n}\n\n.fa-deaf:before {\n  content: \"\\f2a4\";\n}\n\n.fa-delicious:before {\n  content: \"\\f1a5\";\n}\n\n.fa-democrat:before {\n  content: \"\\f747\";\n}\n\n.fa-deploydog:before {\n  content: \"\\f38e\";\n}\n\n.fa-deskpro:before {\n  content: \"\\f38f\";\n}\n\n.fa-desktop:before {\n  content: \"\\f108\";\n}\n\n.fa-dev:before {\n  content: \"\\f6cc\";\n}\n\n.fa-deviantart:before {\n  content: \"\\f1bd\";\n}\n\n.fa-dharmachakra:before {\n  content: \"\\f655\";\n}\n\n.fa-dhl:before {\n  content: \"\\f790\";\n}\n\n.fa-diagnoses:before {\n  content: \"\\f470\";\n}\n\n.fa-diaspora:before {\n  content: \"\\f791\";\n}\n\n.fa-dice:before {\n  content: \"\\f522\";\n}\n\n.fa-dice-d20:before {\n  content: \"\\f6cf\";\n}\n\n.fa-dice-d6:before {\n  content: \"\\f6d1\";\n}\n\n.fa-dice-five:before {\n  content: \"\\f523\";\n}\n\n.fa-dice-four:before {\n  content: \"\\f524\";\n}\n\n.fa-dice-one:before {\n  content: \"\\f525\";\n}\n\n.fa-dice-six:before {\n  content: \"\\f526\";\n}\n\n.fa-dice-three:before {\n  content: \"\\f527\";\n}\n\n.fa-dice-two:before {\n  content: \"\\f528\";\n}\n\n.fa-digg:before {\n  content: \"\\f1a6\";\n}\n\n.fa-digital-ocean:before {\n  content: \"\\f391\";\n}\n\n.fa-digital-tachograph:before {\n  content: \"\\f566\";\n}\n\n.fa-directions:before {\n  content: \"\\f5eb\";\n}\n\n.fa-discord:before {\n  content: \"\\f392\";\n}\n\n.fa-discourse:before {\n  content: \"\\f393\";\n}\n\n.fa-divide:before {\n  content: \"\\f529\";\n}\n\n.fa-dizzy:before {\n  content: \"\\f567\";\n}\n\n.fa-dna:before {\n  content: \"\\f471\";\n}\n\n.fa-dochub:before {\n  content: \"\\f394\";\n}\n\n.fa-docker:before {\n  content: \"\\f395\";\n}\n\n.fa-dog:before {\n  content: \"\\f6d3\";\n}\n\n.fa-dollar-sign:before {\n  content: \"\\f155\";\n}\n\n.fa-dolly:before {\n  content: \"\\f472\";\n}\n\n.fa-dolly-flatbed:before {\n  content: \"\\f474\";\n}\n\n.fa-donate:before {\n  content: \"\\f4b9\";\n}\n\n.fa-door-closed:before {\n  content: \"\\f52a\";\n}\n\n.fa-door-open:before {\n  content: \"\\f52b\";\n}\n\n.fa-dot-circle:before {\n  content: \"\\f192\";\n}\n\n.fa-dove:before {\n  content: \"\\f4ba\";\n}\n\n.fa-download:before {\n  content: \"\\f019\";\n}\n\n.fa-draft2digital:before {\n  content: \"\\f396\";\n}\n\n.fa-drafting-compass:before {\n  content: \"\\f568\";\n}\n\n.fa-dragon:before {\n  content: \"\\f6d5\";\n}\n\n.fa-draw-polygon:before {\n  content: \"\\f5ee\";\n}\n\n.fa-dribbble:before {\n  content: \"\\f17d\";\n}\n\n.fa-dribbble-square:before {\n  content: \"\\f397\";\n}\n\n.fa-dropbox:before {\n  content: \"\\f16b\";\n}\n\n.fa-drum:before {\n  content: \"\\f569\";\n}\n\n.fa-drum-steelpan:before {\n  content: \"\\f56a\";\n}\n\n.fa-drumstick-bite:before {\n  content: \"\\f6d7\";\n}\n\n.fa-drupal:before {\n  content: \"\\f1a9\";\n}\n\n.fa-dumbbell:before {\n  content: \"\\f44b\";\n}\n\n.fa-dumpster:before {\n  content: \"\\f793\";\n}\n\n.fa-dumpster-fire:before {\n  content: \"\\f794\";\n}\n\n.fa-dungeon:before {\n  content: \"\\f6d9\";\n}\n\n.fa-dyalog:before {\n  content: \"\\f399\";\n}\n\n.fa-earlybirds:before {\n  content: \"\\f39a\";\n}\n\n.fa-ebay:before {\n  content: \"\\f4f4\";\n}\n\n.fa-edge:before {\n  content: \"\\f282\";\n}\n\n.fa-edit:before {\n  content: \"\\f044\";\n}\n\n.fa-eject:before {\n  content: \"\\f052\";\n}\n\n.fa-elementor:before {\n  content: \"\\f430\";\n}\n\n.fa-ellipsis-h:before {\n  content: \"\\f141\";\n}\n\n.fa-ellipsis-v:before {\n  content: \"\\f142\";\n}\n\n.fa-ello:before {\n  content: \"\\f5f1\";\n}\n\n.fa-ember:before {\n  content: \"\\f423\";\n}\n\n.fa-empire:before {\n  content: \"\\f1d1\";\n}\n\n.fa-envelope:before {\n  content: \"\\f0e0\";\n}\n\n.fa-envelope-open:before {\n  content: \"\\f2b6\";\n}\n\n.fa-envelope-open-text:before {\n  content: \"\\f658\";\n}\n\n.fa-envelope-square:before {\n  content: \"\\f199\";\n}\n\n.fa-envira:before {\n  content: \"\\f299\";\n}\n\n.fa-equals:before {\n  content: \"\\f52c\";\n}\n\n.fa-eraser:before {\n  content: \"\\f12d\";\n}\n\n.fa-erlang:before {\n  content: \"\\f39d\";\n}\n\n.fa-ethereum:before {\n  content: \"\\f42e\";\n}\n\n.fa-ethernet:before {\n  content: \"\\f796\";\n}\n\n.fa-etsy:before {\n  content: \"\\f2d7\";\n}\n\n.fa-euro-sign:before {\n  content: \"\\f153\";\n}\n\n.fa-exchange-alt:before {\n  content: \"\\f362\";\n}\n\n.fa-exclamation:before {\n  content: \"\\f12a\";\n}\n\n.fa-exclamation-circle:before {\n  content: \"\\f06a\";\n}\n\n.fa-exclamation-triangle:before {\n  content: \"\\f071\";\n}\n\n.fa-expand:before {\n  content: \"\\f065\";\n}\n\n.fa-expand-arrows-alt:before {\n  content: \"\\f31e\";\n}\n\n.fa-expeditedssl:before {\n  content: \"\\f23e\";\n}\n\n.fa-external-link-alt:before {\n  content: \"\\f35d\";\n}\n\n.fa-external-link-square-alt:before {\n  content: \"\\f360\";\n}\n\n.fa-eye:before {\n  content: \"\\f06e\";\n}\n\n.fa-eye-dropper:before {\n  content: \"\\f1fb\";\n}\n\n.fa-eye-slash:before {\n  content: \"\\f070\";\n}\n\n.fa-facebook:before {\n  content: \"\\f09a\";\n}\n\n.fa-facebook-f:before {\n  content: \"\\f39e\";\n}\n\n.fa-facebook-messenger:before {\n  content: \"\\f39f\";\n}\n\n.fa-facebook-square:before {\n  content: \"\\f082\";\n}\n\n.fa-fantasy-flight-games:before {\n  content: \"\\f6dc\";\n}\n\n.fa-fast-backward:before {\n  content: \"\\f049\";\n}\n\n.fa-fast-forward:before {\n  content: \"\\f050\";\n}\n\n.fa-fax:before {\n  content: \"\\f1ac\";\n}\n\n.fa-feather:before {\n  content: \"\\f52d\";\n}\n\n.fa-feather-alt:before {\n  content: \"\\f56b\";\n}\n\n.fa-fedex:before {\n  content: \"\\f797\";\n}\n\n.fa-fedora:before {\n  content: \"\\f798\";\n}\n\n.fa-female:before {\n  content: \"\\f182\";\n}\n\n.fa-fighter-jet:before {\n  content: \"\\f0fb\";\n}\n\n.fa-figma:before {\n  content: \"\\f799\";\n}\n\n.fa-file:before {\n  content: \"\\f15b\";\n}\n\n.fa-file-alt:before {\n  content: \"\\f15c\";\n}\n\n.fa-file-archive:before {\n  content: \"\\f1c6\";\n}\n\n.fa-file-audio:before {\n  content: \"\\f1c7\";\n}\n\n.fa-file-code:before {\n  content: \"\\f1c9\";\n}\n\n.fa-file-contract:before {\n  content: \"\\f56c\";\n}\n\n.fa-file-csv:before {\n  content: \"\\f6dd\";\n}\n\n.fa-file-download:before {\n  content: \"\\f56d\";\n}\n\n.fa-file-excel:before {\n  content: \"\\f1c3\";\n}\n\n.fa-file-export:before {\n  content: \"\\f56e\";\n}\n\n.fa-file-image:before {\n  content: \"\\f1c5\";\n}\n\n.fa-file-import:before {\n  content: \"\\f56f\";\n}\n\n.fa-file-invoice:before {\n  content: \"\\f570\";\n}\n\n.fa-file-invoice-dollar:before {\n  content: \"\\f571\";\n}\n\n.fa-file-medical:before {\n  content: \"\\f477\";\n}\n\n.fa-file-medical-alt:before {\n  content: \"\\f478\";\n}\n\n.fa-file-pdf:before {\n  content: \"\\f1c1\";\n}\n\n.fa-file-powerpoint:before {\n  content: \"\\f1c4\";\n}\n\n.fa-file-prescription:before {\n  content: \"\\f572\";\n}\n\n.fa-file-signature:before {\n  content: \"\\f573\";\n}\n\n.fa-file-upload:before {\n  content: \"\\f574\";\n}\n\n.fa-file-video:before {\n  content: \"\\f1c8\";\n}\n\n.fa-file-word:before {\n  content: \"\\f1c2\";\n}\n\n.fa-fill:before {\n  content: \"\\f575\";\n}\n\n.fa-fill-drip:before {\n  content: \"\\f576\";\n}\n\n.fa-film:before {\n  content: \"\\f008\";\n}\n\n.fa-filter:before {\n  content: \"\\f0b0\";\n}\n\n.fa-fingerprint:before {\n  content: \"\\f577\";\n}\n\n.fa-fire:before {\n  content: \"\\f06d\";\n}\n\n.fa-fire-alt:before {\n  content: \"\\f7e4\";\n}\n\n.fa-fire-extinguisher:before {\n  content: \"\\f134\";\n}\n\n.fa-firefox:before {\n  content: \"\\f269\";\n}\n\n.fa-first-aid:before {\n  content: \"\\f479\";\n}\n\n.fa-first-order:before {\n  content: \"\\f2b0\";\n}\n\n.fa-first-order-alt:before {\n  content: \"\\f50a\";\n}\n\n.fa-firstdraft:before {\n  content: \"\\f3a1\";\n}\n\n.fa-fish:before {\n  content: \"\\f578\";\n}\n\n.fa-fist-raised:before {\n  content: \"\\f6de\";\n}\n\n.fa-flag:before {\n  content: \"\\f024\";\n}\n\n.fa-flag-checkered:before {\n  content: \"\\f11e\";\n}\n\n.fa-flag-usa:before {\n  content: \"\\f74d\";\n}\n\n.fa-flask:before {\n  content: \"\\f0c3\";\n}\n\n.fa-flickr:before {\n  content: \"\\f16e\";\n}\n\n.fa-flipboard:before {\n  content: \"\\f44d\";\n}\n\n.fa-flushed:before {\n  content: \"\\f579\";\n}\n\n.fa-fly:before {\n  content: \"\\f417\";\n}\n\n.fa-folder:before {\n  content: \"\\f07b\";\n}\n\n.fa-folder-minus:before {\n  content: \"\\f65d\";\n}\n\n.fa-folder-open:before {\n  content: \"\\f07c\";\n}\n\n.fa-folder-plus:before {\n  content: \"\\f65e\";\n}\n\n.fa-font:before {\n  content: \"\\f031\";\n}\n\n.fa-font-awesome:before {\n  content: \"\\f2b4\";\n}\n\n.fa-font-awesome-alt:before {\n  content: \"\\f35c\";\n}\n\n.fa-font-awesome-flag:before {\n  content: \"\\f425\";\n}\n\n.fa-font-awesome-logo-full:before {\n  content: \"\\f4e6\";\n}\n\n.fa-fonticons:before {\n  content: \"\\f280\";\n}\n\n.fa-fonticons-fi:before {\n  content: \"\\f3a2\";\n}\n\n.fa-football-ball:before {\n  content: \"\\f44e\";\n}\n\n.fa-fort-awesome:before {\n  content: \"\\f286\";\n}\n\n.fa-fort-awesome-alt:before {\n  content: \"\\f3a3\";\n}\n\n.fa-forumbee:before {\n  content: \"\\f211\";\n}\n\n.fa-forward:before {\n  content: \"\\f04e\";\n}\n\n.fa-foursquare:before {\n  content: \"\\f180\";\n}\n\n.fa-free-code-camp:before {\n  content: \"\\f2c5\";\n}\n\n.fa-freebsd:before {\n  content: \"\\f3a4\";\n}\n\n.fa-frog:before {\n  content: \"\\f52e\";\n}\n\n.fa-frown:before {\n  content: \"\\f119\";\n}\n\n.fa-frown-open:before {\n  content: \"\\f57a\";\n}\n\n.fa-fulcrum:before {\n  content: \"\\f50b\";\n}\n\n.fa-funnel-dollar:before {\n  content: \"\\f662\";\n}\n\n.fa-futbol:before {\n  content: \"\\f1e3\";\n}\n\n.fa-galactic-republic:before {\n  content: \"\\f50c\";\n}\n\n.fa-galactic-senate:before {\n  content: \"\\f50d\";\n}\n\n.fa-gamepad:before {\n  content: \"\\f11b\";\n}\n\n.fa-gas-pump:before {\n  content: \"\\f52f\";\n}\n\n.fa-gavel:before {\n  content: \"\\f0e3\";\n}\n\n.fa-gem:before {\n  content: \"\\f3a5\";\n}\n\n.fa-genderless:before {\n  content: \"\\f22d\";\n}\n\n.fa-get-pocket:before {\n  content: \"\\f265\";\n}\n\n.fa-gg:before {\n  content: \"\\f260\";\n}\n\n.fa-gg-circle:before {\n  content: \"\\f261\";\n}\n\n.fa-ghost:before {\n  content: \"\\f6e2\";\n}\n\n.fa-gift:before {\n  content: \"\\f06b\";\n}\n\n.fa-gifts:before {\n  content: \"\\f79c\";\n}\n\n.fa-git:before {\n  content: \"\\f1d3\";\n}\n\n.fa-git-square:before {\n  content: \"\\f1d2\";\n}\n\n.fa-github:before {\n  content: \"\\f09b\";\n}\n\n.fa-github-alt:before {\n  content: \"\\f113\";\n}\n\n.fa-github-square:before {\n  content: \"\\f092\";\n}\n\n.fa-gitkraken:before {\n  content: \"\\f3a6\";\n}\n\n.fa-gitlab:before {\n  content: \"\\f296\";\n}\n\n.fa-gitter:before {\n  content: \"\\f426\";\n}\n\n.fa-glass-cheers:before {\n  content: \"\\f79f\";\n}\n\n.fa-glass-martini:before {\n  content: \"\\f000\";\n}\n\n.fa-glass-martini-alt:before {\n  content: \"\\f57b\";\n}\n\n.fa-glass-whiskey:before {\n  content: \"\\f7a0\";\n}\n\n.fa-glasses:before {\n  content: \"\\f530\";\n}\n\n.fa-glide:before {\n  content: \"\\f2a5\";\n}\n\n.fa-glide-g:before {\n  content: \"\\f2a6\";\n}\n\n.fa-globe:before {\n  content: \"\\f0ac\";\n}\n\n.fa-globe-africa:before {\n  content: \"\\f57c\";\n}\n\n.fa-globe-americas:before {\n  content: \"\\f57d\";\n}\n\n.fa-globe-asia:before {\n  content: \"\\f57e\";\n}\n\n.fa-globe-europe:before {\n  content: \"\\f7a2\";\n}\n\n.fa-gofore:before {\n  content: \"\\f3a7\";\n}\n\n.fa-golf-ball:before {\n  content: \"\\f450\";\n}\n\n.fa-goodreads:before {\n  content: \"\\f3a8\";\n}\n\n.fa-goodreads-g:before {\n  content: \"\\f3a9\";\n}\n\n.fa-google:before {\n  content: \"\\f1a0\";\n}\n\n.fa-google-drive:before {\n  content: \"\\f3aa\";\n}\n\n.fa-google-play:before {\n  content: \"\\f3ab\";\n}\n\n.fa-google-plus:before {\n  content: \"\\f2b3\";\n}\n\n.fa-google-plus-g:before {\n  content: \"\\f0d5\";\n}\n\n.fa-google-plus-square:before {\n  content: \"\\f0d4\";\n}\n\n.fa-google-wallet:before {\n  content: \"\\f1ee\";\n}\n\n.fa-gopuram:before {\n  content: \"\\f664\";\n}\n\n.fa-graduation-cap:before {\n  content: \"\\f19d\";\n}\n\n.fa-gratipay:before {\n  content: \"\\f184\";\n}\n\n.fa-grav:before {\n  content: \"\\f2d6\";\n}\n\n.fa-greater-than:before {\n  content: \"\\f531\";\n}\n\n.fa-greater-than-equal:before {\n  content: \"\\f532\";\n}\n\n.fa-grimace:before {\n  content: \"\\f57f\";\n}\n\n.fa-grin:before {\n  content: \"\\f580\";\n}\n\n.fa-grin-alt:before {\n  content: \"\\f581\";\n}\n\n.fa-grin-beam:before {\n  content: \"\\f582\";\n}\n\n.fa-grin-beam-sweat:before {\n  content: \"\\f583\";\n}\n\n.fa-grin-hearts:before {\n  content: \"\\f584\";\n}\n\n.fa-grin-squint:before {\n  content: \"\\f585\";\n}\n\n.fa-grin-squint-tears:before {\n  content: \"\\f586\";\n}\n\n.fa-grin-stars:before {\n  content: \"\\f587\";\n}\n\n.fa-grin-tears:before {\n  content: \"\\f588\";\n}\n\n.fa-grin-tongue:before {\n  content: \"\\f589\";\n}\n\n.fa-grin-tongue-squint:before {\n  content: \"\\f58a\";\n}\n\n.fa-grin-tongue-wink:before {\n  content: \"\\f58b\";\n}\n\n.fa-grin-wink:before {\n  content: \"\\f58c\";\n}\n\n.fa-grip-horizontal:before {\n  content: \"\\f58d\";\n}\n\n.fa-grip-lines:before {\n  content: \"\\f7a4\";\n}\n\n.fa-grip-lines-vertical:before {\n  content: \"\\f7a5\";\n}\n\n.fa-grip-vertical:before {\n  content: \"\\f58e\";\n}\n\n.fa-gripfire:before {\n  content: \"\\f3ac\";\n}\n\n.fa-grunt:before {\n  content: \"\\f3ad\";\n}\n\n.fa-guitar:before {\n  content: \"\\f7a6\";\n}\n\n.fa-gulp:before {\n  content: \"\\f3ae\";\n}\n\n.fa-h-square:before {\n  content: \"\\f0fd\";\n}\n\n.fa-hacker-news:before {\n  content: \"\\f1d4\";\n}\n\n.fa-hacker-news-square:before {\n  content: \"\\f3af\";\n}\n\n.fa-hackerrank:before {\n  content: \"\\f5f7\";\n}\n\n.fa-hammer:before {\n  content: \"\\f6e3\";\n}\n\n.fa-hamsa:before {\n  content: \"\\f665\";\n}\n\n.fa-hand-holding:before {\n  content: \"\\f4bd\";\n}\n\n.fa-hand-holding-heart:before {\n  content: \"\\f4be\";\n}\n\n.fa-hand-holding-usd:before {\n  content: \"\\f4c0\";\n}\n\n.fa-hand-lizard:before {\n  content: \"\\f258\";\n}\n\n.fa-hand-paper:before {\n  content: \"\\f256\";\n}\n\n.fa-hand-peace:before {\n  content: \"\\f25b\";\n}\n\n.fa-hand-point-down:before {\n  content: \"\\f0a7\";\n}\n\n.fa-hand-point-left:before {\n  content: \"\\f0a5\";\n}\n\n.fa-hand-point-right:before {\n  content: \"\\f0a4\";\n}\n\n.fa-hand-point-up:before {\n  content: \"\\f0a6\";\n}\n\n.fa-hand-pointer:before {\n  content: \"\\f25a\";\n}\n\n.fa-hand-rock:before {\n  content: \"\\f255\";\n}\n\n.fa-hand-scissors:before {\n  content: \"\\f257\";\n}\n\n.fa-hand-spock:before {\n  content: \"\\f259\";\n}\n\n.fa-hands:before {\n  content: \"\\f4c2\";\n}\n\n.fa-hands-helping:before {\n  content: \"\\f4c4\";\n}\n\n.fa-handshake:before {\n  content: \"\\f2b5\";\n}\n\n.fa-hanukiah:before {\n  content: \"\\f6e6\";\n}\n\n.fa-hashtag:before {\n  content: \"\\f292\";\n}\n\n.fa-hat-wizard:before {\n  content: \"\\f6e8\";\n}\n\n/*.fa-haykal:before { content: fa-content($fa-var-haykal); }*/\n.fa-hdd:before {\n  content: \"\\f0a0\";\n}\n\n.fa-heading:before {\n  content: \"\\f1dc\";\n}\n\n.fa-headphones:before {\n  content: \"\\f025\";\n}\n\n.fa-headphones-alt:before {\n  content: \"\\f58f\";\n}\n\n.fa-headset:before {\n  content: \"\\f590\";\n}\n\n.fa-heart:before {\n  content: \"\\f004\";\n}\n\n.fa-heart-broken:before {\n  content: \"\\f7a9\";\n}\n\n.fa-heartbeat:before {\n  content: \"\\f21e\";\n}\n\n.fa-helicopter:before {\n  content: \"\\f533\";\n}\n\n.fa-highlighter:before {\n  content: \"\\f591\";\n}\n\n.fa-hiking:before {\n  content: \"\\f6ec\";\n}\n\n.fa-hippo:before {\n  content: \"\\f6ed\";\n}\n\n.fa-hips:before {\n  content: \"\\f452\";\n}\n\n.fa-hire-a-helper:before {\n  content: \"\\f3b0\";\n}\n\n.fa-history:before {\n  content: \"\\f1da\";\n}\n\n.fa-hockey-puck:before {\n  content: \"\\f453\";\n}\n\n.fa-holly-berry:before {\n  content: \"\\f7aa\";\n}\n\n.fa-home:before {\n  content: \"\\f015\";\n}\n\n.fa-hooli:before {\n  content: \"\\f427\";\n}\n\n.fa-hornbill:before {\n  content: \"\\f592\";\n}\n\n.fa-horse:before {\n  content: \"\\f6f0\";\n}\n\n.fa-horse-head:before {\n  content: \"\\f7ab\";\n}\n\n.fa-hospital:before {\n  content: \"\\f0f8\";\n}\n\n.fa-hospital-alt:before {\n  content: \"\\f47d\";\n}\n\n.fa-hospital-symbol:before {\n  content: \"\\f47e\";\n}\n\n.fa-hot-tub:before {\n  content: \"\\f593\";\n}\n\n.fa-hotel:before {\n  content: \"\\f594\";\n}\n\n.fa-hotjar:before {\n  content: \"\\f3b1\";\n}\n\n.fa-hourglass:before {\n  content: \"\\f254\";\n}\n\n.fa-hourglass-end:before {\n  content: \"\\f253\";\n}\n\n.fa-hourglass-half:before {\n  content: \"\\f252\";\n}\n\n.fa-hourglass-start:before {\n  content: \"\\f251\";\n}\n\n.fa-house-damage:before {\n  content: \"\\f6f1\";\n}\n\n.fa-houzz:before {\n  content: \"\\f27c\";\n}\n\n.fa-hryvnia:before {\n  content: \"\\f6f2\";\n}\n\n.fa-html5:before {\n  content: \"\\f13b\";\n}\n\n.fa-hubspot:before {\n  content: \"\\f3b2\";\n}\n\n.fa-i-cursor:before {\n  content: \"\\f246\";\n}\n\n.fa-icicles:before {\n  content: \"\\f7ad\";\n}\n\n.fa-id-badge:before {\n  content: \"\\f2c1\";\n}\n\n.fa-id-card:before {\n  content: \"\\f2c2\";\n}\n\n.fa-id-card-alt:before {\n  content: \"\\f47f\";\n}\n\n.fa-igloo:before {\n  content: \"\\f7ae\";\n}\n\n.fa-image:before {\n  content: \"\\f03e\";\n}\n\n.fa-images:before {\n  content: \"\\f302\";\n}\n\n.fa-imdb:before {\n  content: \"\\f2d8\";\n}\n\n.fa-inbox:before {\n  content: \"\\f01c\";\n}\n\n.fa-indent:before {\n  content: \"\\f03c\";\n}\n\n.fa-industry:before {\n  content: \"\\f275\";\n}\n\n.fa-infinity:before {\n  content: \"\\f534\";\n}\n\n.fa-info:before {\n  content: \"\\f129\";\n}\n\n.fa-info-circle:before {\n  content: \"\\f05a\";\n}\n\n.fa-instagram:before {\n  content: \"\\f16d\";\n}\n\n.fa-intercom:before {\n  content: \"\\f7af\";\n}\n\n.fa-internet-explorer:before {\n  content: \"\\f26b\";\n}\n\n.fa-invision:before {\n  content: \"\\f7b0\";\n}\n\n.fa-ioxhost:before {\n  content: \"\\f208\";\n}\n\n.fa-italic:before {\n  content: \"\\f033\";\n}\n\n.fa-itunes:before {\n  content: \"\\f3b4\";\n}\n\n.fa-itunes-note:before {\n  content: \"\\f3b5\";\n}\n\n.fa-java:before {\n  content: \"\\f4e4\";\n}\n\n.fa-jedi:before {\n  content: \"\\f669\";\n}\n\n.fa-jedi-order:before {\n  content: \"\\f50e\";\n}\n\n.fa-jenkins:before {\n  content: \"\\f3b6\";\n}\n\n.fa-jira:before {\n  content: \"\\f7b1\";\n}\n\n.fa-joget:before {\n  content: \"\\f3b7\";\n}\n\n.fa-joint:before {\n  content: \"\\f595\";\n}\n\n.fa-joomla:before {\n  content: \"\\f1aa\";\n}\n\n.fa-journal-whills:before {\n  content: \"\\f66a\";\n}\n\n.fa-js:before {\n  content: \"\\f3b8\";\n}\n\n.fa-js-square:before {\n  content: \"\\f3b9\";\n}\n\n.fa-jsfiddle:before {\n  content: \"\\f1cc\";\n}\n\n.fa-kaaba:before {\n  content: \"\\f66b\";\n}\n\n.fa-kaggle:before {\n  content: \"\\f5fa\";\n}\n\n.fa-key:before {\n  content: \"\\f084\";\n}\n\n.fa-keybase:before {\n  content: \"\\f4f5\";\n}\n\n.fa-keyboard:before {\n  content: \"\\f11c\";\n}\n\n.fa-keycdn:before {\n  content: \"\\f3ba\";\n}\n\n.fa-khanda:before {\n  content: \"\\f66d\";\n}\n\n.fa-kickstarter:before {\n  content: \"\\f3bb\";\n}\n\n.fa-kickstarter-k:before {\n  content: \"\\f3bc\";\n}\n\n.fa-kiss:before {\n  content: \"\\f596\";\n}\n\n.fa-kiss-beam:before {\n  content: \"\\f597\";\n}\n\n.fa-kiss-wink-heart:before {\n  content: \"\\f598\";\n}\n\n.fa-kiwi-bird:before {\n  content: \"\\f535\";\n}\n\n.fa-korvue:before {\n  content: \"\\f42f\";\n}\n\n.fa-landmark:before {\n  content: \"\\f66f\";\n}\n\n.fa-language:before {\n  content: \"\\f1ab\";\n}\n\n.fa-laptop:before {\n  content: \"\\f109\";\n}\n\n.fa-laptop-code:before {\n  content: \"\\f5fc\";\n}\n\n.fa-laravel:before {\n  content: \"\\f3bd\";\n}\n\n.fa-lastfm:before {\n  content: \"\\f202\";\n}\n\n.fa-lastfm-square:before {\n  content: \"\\f203\";\n}\n\n.fa-laugh:before {\n  content: \"\\f599\";\n}\n\n.fa-laugh-beam:before {\n  content: \"\\f59a\";\n}\n\n.fa-laugh-squint:before {\n  content: \"\\f59b\";\n}\n\n.fa-laugh-wink:before {\n  content: \"\\f59c\";\n}\n\n.fa-layer-group:before {\n  content: \"\\f5fd\";\n}\n\n.fa-leaf:before {\n  content: \"\\f06c\";\n}\n\n.fa-leanpub:before {\n  content: \"\\f212\";\n}\n\n.fa-lemon:before {\n  content: \"\\f094\";\n}\n\n.fa-less:before {\n  content: \"\\f41d\";\n}\n\n.fa-less-than:before {\n  content: \"\\f536\";\n}\n\n.fa-less-than-equal:before {\n  content: \"\\f537\";\n}\n\n.fa-level-down-alt:before {\n  content: \"\\f3be\";\n}\n\n.fa-level-up-alt:before {\n  content: \"\\f3bf\";\n}\n\n.fa-life-ring:before {\n  content: \"\\f1cd\";\n}\n\n.fa-lightbulb:before {\n  content: \"\\f0eb\";\n}\n\n.fa-line:before {\n  content: \"\\f3c0\";\n}\n\n.fa-link:before {\n  content: \"\\f0c1\";\n}\n\n.fa-linkedin:before {\n  content: \"\\f08c\";\n}\n\n.fa-linkedin-in:before {\n  content: \"\\f0e1\";\n}\n\n.fa-linode:before {\n  content: \"\\f2b8\";\n}\n\n.fa-linux:before {\n  content: \"\\f17c\";\n}\n\n.fa-lira-sign:before {\n  content: \"\\f195\";\n}\n\n.fa-list:before {\n  content: \"\\f03a\";\n}\n\n.fa-list-alt:before {\n  content: \"\\f022\";\n}\n\n.fa-list-ol:before {\n  content: \"\\f0cb\";\n}\n\n.fa-list-ul:before {\n  content: \"\\f0ca\";\n}\n\n.fa-location-arrow:before {\n  content: \"\\f124\";\n}\n\n.fa-lock:before {\n  content: \"\\f023\";\n}\n\n.fa-lock-open:before {\n  content: \"\\f3c1\";\n}\n\n.fa-long-arrow-alt-down:before {\n  content: \"\\f309\";\n}\n\n.fa-long-arrow-alt-left:before {\n  content: \"\\f30a\";\n}\n\n.fa-long-arrow-alt-right:before {\n  content: \"\\f30b\";\n}\n\n.fa-long-arrow-alt-up:before {\n  content: \"\\f30c\";\n}\n\n.fa-low-vision:before {\n  content: \"\\f2a8\";\n}\n\n.fa-luggage-cart:before {\n  content: \"\\f59d\";\n}\n\n.fa-lyft:before {\n  content: \"\\f3c3\";\n}\n\n.fa-magento:before {\n  content: \"\\f3c4\";\n}\n\n.fa-magic:before {\n  content: \"\\f0d0\";\n}\n\n.fa-magnet:before {\n  content: \"\\f076\";\n}\n\n.fa-mail-bulk:before {\n  content: \"\\f674\";\n}\n\n.fa-mailchimp:before {\n  content: \"\\f59e\";\n}\n\n.fa-male:before {\n  content: \"\\f183\";\n}\n\n.fa-mandalorian:before {\n  content: \"\\f50f\";\n}\n\n.fa-map:before {\n  content: \"\\f279\";\n}\n\n.fa-map-marked:before {\n  content: \"\\f59f\";\n}\n\n.fa-map-marked-alt:before {\n  content: \"\\f5a0\";\n}\n\n.fa-map-marker:before {\n  content: \"\\f041\";\n}\n\n.fa-map-marker-alt:before {\n  content: \"\\f3c5\";\n}\n\n.fa-map-pin:before {\n  content: \"\\f276\";\n}\n\n.fa-map-signs:before {\n  content: \"\\f277\";\n}\n\n.fa-markdown:before {\n  content: \"\\f60f\";\n}\n\n.fa-marker:before {\n  content: \"\\f5a1\";\n}\n\n.fa-mars:before {\n  content: \"\\f222\";\n}\n\n.fa-mars-double:before {\n  content: \"\\f227\";\n}\n\n.fa-mars-stroke:before {\n  content: \"\\f229\";\n}\n\n.fa-mars-stroke-h:before {\n  content: \"\\f22b\";\n}\n\n.fa-mars-stroke-v:before {\n  content: \"\\f22a\";\n}\n\n.fa-mask:before {\n  content: \"\\f6fa\";\n}\n\n.fa-mastodon:before {\n  content: \"\\f4f6\";\n}\n\n.fa-maxcdn:before {\n  content: \"\\f136\";\n}\n\n.fa-medal:before {\n  content: \"\\f5a2\";\n}\n\n.fa-medapps:before {\n  content: \"\\f3c6\";\n}\n\n.fa-medium:before {\n  content: \"\\f23a\";\n}\n\n.fa-medium-m:before {\n  content: \"\\f3c7\";\n}\n\n.fa-medkit:before {\n  content: \"\\f0fa\";\n}\n\n.fa-medrt:before {\n  content: \"\\f3c8\";\n}\n\n.fa-meetup:before {\n  content: \"\\f2e0\";\n}\n\n.fa-megaport:before {\n  content: \"\\f5a3\";\n}\n\n.fa-meh:before {\n  content: \"\\f11a\";\n}\n\n.fa-meh-blank:before {\n  content: \"\\f5a4\";\n}\n\n.fa-meh-rolling-eyes:before {\n  content: \"\\f5a5\";\n}\n\n.fa-memory:before {\n  content: \"\\f538\";\n}\n\n.fa-mendeley:before {\n  content: \"\\f7b3\";\n}\n\n.fa-menorah:before {\n  content: \"\\f676\";\n}\n\n.fa-mercury:before {\n  content: \"\\f223\";\n}\n\n.fa-meteor:before {\n  content: \"\\f753\";\n}\n\n.fa-microchip:before {\n  content: \"\\f2db\";\n}\n\n.fa-microphone:before {\n  content: \"\\f130\";\n}\n\n.fa-microphone-alt:before {\n  content: \"\\f3c9\";\n}\n\n.fa-microphone-alt-slash:before {\n  content: \"\\f539\";\n}\n\n.fa-microphone-slash:before {\n  content: \"\\f131\";\n}\n\n.fa-microscope:before {\n  content: \"\\f610\";\n}\n\n.fa-microsoft:before {\n  content: \"\\f3ca\";\n}\n\n.fa-minus:before {\n  content: \"\\f068\";\n}\n\n.fa-minus-circle:before {\n  content: \"\\f056\";\n}\n\n.fa-minus-square:before {\n  content: \"\\f146\";\n}\n\n.fa-mitten:before {\n  content: \"\\f7b5\";\n}\n\n.fa-mix:before {\n  content: \"\\f3cb\";\n}\n\n.fa-mixcloud:before {\n  content: \"\\f289\";\n}\n\n.fa-mizuni:before {\n  content: \"\\f3cc\";\n}\n\n.fa-mobile:before {\n  content: \"\\f10b\";\n}\n\n.fa-mobile-alt:before {\n  content: \"\\f3cd\";\n}\n\n.fa-modx:before {\n  content: \"\\f285\";\n}\n\n.fa-monero:before {\n  content: \"\\f3d0\";\n}\n\n.fa-money-bill:before {\n  content: \"\\f0d6\";\n}\n\n.fa-money-bill-alt:before {\n  content: \"\\f3d1\";\n}\n\n.fa-money-bill-wave:before {\n  content: \"\\f53a\";\n}\n\n.fa-money-bill-wave-alt:before {\n  content: \"\\f53b\";\n}\n\n.fa-money-check:before {\n  content: \"\\f53c\";\n}\n\n.fa-money-check-alt:before {\n  content: \"\\f53d\";\n}\n\n.fa-monument:before {\n  content: \"\\f5a6\";\n}\n\n.fa-moon:before {\n  content: \"\\f186\";\n}\n\n.fa-mortar-pestle:before {\n  content: \"\\f5a7\";\n}\n\n.fa-mosque:before {\n  content: \"\\f678\";\n}\n\n.fa-motorcycle:before {\n  content: \"\\f21c\";\n}\n\n.fa-mountain:before {\n  content: \"\\f6fc\";\n}\n\n.fa-mouse-pointer:before {\n  content: \"\\f245\";\n}\n\n.fa-mug-hot:before {\n  content: \"\\f7b6\";\n}\n\n.fa-music:before {\n  content: \"\\f001\";\n}\n\n.fa-napster:before {\n  content: \"\\f3d2\";\n}\n\n.fa-neos:before {\n  content: \"\\f612\";\n}\n\n.fa-network-wired:before {\n  content: \"\\f6ff\";\n}\n\n.fa-neuter:before {\n  content: \"\\f22c\";\n}\n\n.fa-newspaper:before {\n  content: \"\\f1ea\";\n}\n\n.fa-nimblr:before {\n  content: \"\\f5a8\";\n}\n\n/*.fa-nintendo-switch:before { content: fa-content($fa-var-nintendo-switch); }*/\n.fa-node:before {\n  content: \"\\f419\";\n}\n\n.fa-node-js:before {\n  content: \"\\f3d3\";\n}\n\n.fa-not-equal:before {\n  content: \"\\f53e\";\n}\n\n.fa-notes-medical:before {\n  content: \"\\f481\";\n}\n\n.fa-npm:before {\n  content: \"\\f3d4\";\n}\n\n.fa-ns8:before {\n  content: \"\\f3d5\";\n}\n\n.fa-nutritionix:before {\n  content: \"\\f3d6\";\n}\n\n.fa-object-group:before {\n  content: \"\\f247\";\n}\n\n.fa-object-ungroup:before {\n  content: \"\\f248\";\n}\n\n.fa-odnoklassniki:before {\n  content: \"\\f263\";\n}\n\n.fa-odnoklassniki-square:before {\n  content: \"\\f264\";\n}\n\n.fa-oil-can:before {\n  content: \"\\f613\";\n}\n\n.fa-old-republic:before {\n  content: \"\\f510\";\n}\n\n.fa-om:before {\n  content: \"\\f679\";\n}\n\n.fa-opencart:before {\n  content: \"\\f23d\";\n}\n\n.fa-openid:before {\n  content: \"\\f19b\";\n}\n\n.fa-opera:before {\n  content: \"\\f26a\";\n}\n\n.fa-optin-monster:before {\n  content: \"\\f23c\";\n}\n\n.fa-osi:before {\n  content: \"\\f41a\";\n}\n\n.fa-otter:before {\n  content: \"\\f700\";\n}\n\n.fa-outdent:before {\n  content: \"\\f03b\";\n}\n\n.fa-page4:before {\n  content: \"\\f3d7\";\n}\n\n.fa-pagelines:before {\n  content: \"\\f18c\";\n}\n\n.fa-paint-brush:before {\n  content: \"\\f1fc\";\n}\n\n.fa-paint-roller:before {\n  content: \"\\f5aa\";\n}\n\n.fa-palette:before {\n  content: \"\\f53f\";\n}\n\n.fa-palfed:before {\n  content: \"\\f3d8\";\n}\n\n.fa-pallet:before {\n  content: \"\\f482\";\n}\n\n.fa-paper-plane:before {\n  content: \"\\f1d8\";\n}\n\n.fa-paperclip:before {\n  content: \"\\f0c6\";\n}\n\n.fa-parachute-box:before {\n  content: \"\\f4cd\";\n}\n\n.fa-paragraph:before {\n  content: \"\\f1dd\";\n}\n\n.fa-parking:before {\n  content: \"\\f540\";\n}\n\n.fa-passport:before {\n  content: \"\\f5ab\";\n}\n\n.fa-pastafarianism:before {\n  content: \"\\f67b\";\n}\n\n.fa-paste:before {\n  content: \"\\f0ea\";\n}\n\n.fa-patreon:before {\n  content: \"\\f3d9\";\n}\n\n.fa-pause:before {\n  content: \"\\f04c\";\n}\n\n.fa-pause-circle:before {\n  content: \"\\f28b\";\n}\n\n.fa-paw:before {\n  content: \"\\f1b0\";\n}\n\n.fa-paypal:before {\n  content: \"\\f1ed\";\n}\n\n.fa-peace:before {\n  content: \"\\f67c\";\n}\n\n.fa-pen:before {\n  content: \"\\f304\";\n}\n\n.fa-pen-alt:before {\n  content: \"\\f305\";\n}\n\n.fa-pen-fancy:before {\n  content: \"\\f5ac\";\n}\n\n.fa-pen-nib:before {\n  content: \"\\f5ad\";\n}\n\n.fa-pen-square:before {\n  content: \"\\f14b\";\n}\n\n.fa-pencil-alt:before {\n  content: \"\\f303\";\n}\n\n.fa-pencil-ruler:before {\n  content: \"\\f5ae\";\n}\n\n.fa-penny-arcade:before {\n  content: \"\\f704\";\n}\n\n.fa-people-carry:before {\n  content: \"\\f4ce\";\n}\n\n.fa-percent:before {\n  content: \"\\f295\";\n}\n\n.fa-percentage:before {\n  content: \"\\f541\";\n}\n\n.fa-periscope:before {\n  content: \"\\f3da\";\n}\n\n.fa-person-booth:before {\n  content: \"\\f756\";\n}\n\n.fa-phabricator:before {\n  content: \"\\f3db\";\n}\n\n.fa-phoenix-framework:before {\n  content: \"\\f3dc\";\n}\n\n.fa-phoenix-squadron:before {\n  content: \"\\f511\";\n}\n\n.fa-phone:before {\n  content: \"\\f095\";\n}\n\n.fa-phone-slash:before {\n  content: \"\\f3dd\";\n}\n\n.fa-phone-square:before {\n  content: \"\\f098\";\n}\n\n.fa-phone-volume:before {\n  content: \"\\f2a0\";\n}\n\n.fa-php:before {\n  content: \"\\f457\";\n}\n\n.fa-pied-piper:before {\n  content: \"\\f2ae\";\n}\n\n.fa-pied-piper-alt:before {\n  content: \"\\f1a8\";\n}\n\n.fa-pied-piper-hat:before {\n  content: \"\\f4e5\";\n}\n\n.fa-pied-piper-pp:before {\n  content: \"\\f1a7\";\n}\n\n.fa-piggy-bank:before {\n  content: \"\\f4d3\";\n}\n\n.fa-pills:before {\n  content: \"\\f484\";\n}\n\n.fa-pinterest:before {\n  content: \"\\f0d2\";\n}\n\n.fa-pinterest-p:before {\n  content: \"\\f231\";\n}\n\n.fa-pinterest-square:before {\n  content: \"\\f0d3\";\n}\n\n.fa-place-of-worship:before {\n  content: \"\\f67f\";\n}\n\n.fa-plane:before {\n  content: \"\\f072\";\n}\n\n.fa-plane-arrival:before {\n  content: \"\\f5af\";\n}\n\n.fa-plane-departure:before {\n  content: \"\\f5b0\";\n}\n\n.fa-play:before {\n  content: \"\\f04b\";\n}\n\n.fa-play-circle:before {\n  content: \"\\f144\";\n}\n\n.fa-playstation:before {\n  content: \"\\f3df\";\n}\n\n.fa-plug:before {\n  content: \"\\f1e6\";\n}\n\n.fa-plus:before {\n  content: \"\\f067\";\n}\n\n.fa-plus-circle:before {\n  content: \"\\f055\";\n}\n\n.fa-plus-square:before {\n  content: \"\\f0fe\";\n}\n\n.fa-podcast:before {\n  content: \"\\f2ce\";\n}\n\n.fa-poll:before {\n  content: \"\\f681\";\n}\n\n.fa-poll-h:before {\n  content: \"\\f682\";\n}\n\n.fa-poo:before {\n  content: \"\\f2fe\";\n}\n\n.fa-poo-storm:before {\n  content: \"\\f75a\";\n}\n\n.fa-poop:before {\n  content: \"\\f619\";\n}\n\n.fa-portrait:before {\n  content: \"\\f3e0\";\n}\n\n.fa-pound-sign:before {\n  content: \"\\f154\";\n}\n\n.fa-power-off:before {\n  content: \"\\f011\";\n}\n\n.fa-pray:before {\n  content: \"\\f683\";\n}\n\n.fa-praying-hands:before {\n  content: \"\\f684\";\n}\n\n.fa-prescription:before {\n  content: \"\\f5b1\";\n}\n\n.fa-prescription-bottle:before {\n  content: \"\\f485\";\n}\n\n.fa-prescription-bottle-alt:before {\n  content: \"\\f486\";\n}\n\n.fa-print:before {\n  content: \"\\f02f\";\n}\n\n.fa-procedures:before {\n  content: \"\\f487\";\n}\n\n.fa-product-hunt:before {\n  content: \"\\f288\";\n}\n\n.fa-project-diagram:before {\n  content: \"\\f542\";\n}\n\n.fa-pushed:before {\n  content: \"\\f3e1\";\n}\n\n.fa-puzzle-piece:before {\n  content: \"\\f12e\";\n}\n\n.fa-python:before {\n  content: \"\\f3e2\";\n}\n\n.fa-qq:before {\n  content: \"\\f1d6\";\n}\n\n.fa-qrcode:before {\n  content: \"\\f029\";\n}\n\n.fa-question:before {\n  content: \"\\f128\";\n}\n\n.fa-question-circle:before {\n  content: \"\\f059\";\n}\n\n.fa-quidditch:before {\n  content: \"\\f458\";\n}\n\n.fa-quinscape:before {\n  content: \"\\f459\";\n}\n\n.fa-quora:before {\n  content: \"\\f2c4\";\n}\n\n.fa-quote-left:before {\n  content: \"\\f10d\";\n}\n\n.fa-quote-right:before {\n  content: \"\\f10e\";\n}\n\n.fa-quran:before {\n  content: \"\\f687\";\n}\n\n.fa-r-project:before {\n  content: \"\\f4f7\";\n}\n\n.fa-radiation:before {\n  content: \"\\f7b9\";\n}\n\n.fa-radiation-alt:before {\n  content: \"\\f7ba\";\n}\n\n.fa-rainbow:before {\n  content: \"\\f75b\";\n}\n\n.fa-random:before {\n  content: \"\\f074\";\n}\n\n.fa-raspberry-pi:before {\n  content: \"\\f7bb\";\n}\n\n.fa-ravelry:before {\n  content: \"\\f2d9\";\n}\n\n.fa-react:before {\n  content: \"\\f41b\";\n}\n\n.fa-reacteurope:before {\n  content: \"\\f75d\";\n}\n\n.fa-readme:before {\n  content: \"\\f4d5\";\n}\n\n.fa-rebel:before {\n  content: \"\\f1d0\";\n}\n\n.fa-receipt:before {\n  content: \"\\f543\";\n}\n\n.fa-recycle:before {\n  content: \"\\f1b8\";\n}\n\n.fa-red-river:before {\n  content: \"\\f3e3\";\n}\n\n.fa-reddit:before {\n  content: \"\\f1a1\";\n}\n\n.fa-reddit-alien:before {\n  content: \"\\f281\";\n}\n\n.fa-reddit-square:before {\n  content: \"\\f1a2\";\n}\n\n.fa-redhat:before {\n  content: \"\\f7bc\";\n}\n\n.fa-redo:before {\n  content: \"\\f01e\";\n}\n\n.fa-redo-alt:before {\n  content: \"\\f2f9\";\n}\n\n.fa-registered:before {\n  content: \"\\f25d\";\n}\n\n.fa-renren:before {\n  content: \"\\f18b\";\n}\n\n.fa-reply:before {\n  content: \"\\f3e5\";\n}\n\n.fa-reply-all:before {\n  content: \"\\f122\";\n}\n\n.fa-replyd:before {\n  content: \"\\f3e6\";\n}\n\n.fa-republican:before {\n  content: \"\\f75e\";\n}\n\n.fa-researchgate:before {\n  content: \"\\f4f8\";\n}\n\n.fa-resolving:before {\n  content: \"\\f3e7\";\n}\n\n.fa-restroom:before {\n  content: \"\\f7bd\";\n}\n\n.fa-retweet:before {\n  content: \"\\f079\";\n}\n\n.fa-rev:before {\n  content: \"\\f5b2\";\n}\n\n.fa-ribbon:before {\n  content: \"\\f4d6\";\n}\n\n.fa-ring:before {\n  content: \"\\f70b\";\n}\n\n.fa-road:before {\n  content: \"\\f018\";\n}\n\n.fa-robot:before {\n  content: \"\\f544\";\n}\n\n.fa-rocket:before {\n  content: \"\\f135\";\n}\n\n.fa-rocketchat:before {\n  content: \"\\f3e8\";\n}\n\n.fa-rockrms:before {\n  content: \"\\f3e9\";\n}\n\n.fa-route:before {\n  content: \"\\f4d7\";\n}\n\n.fa-rss:before {\n  content: \"\\f09e\";\n}\n\n.fa-rss-square:before {\n  content: \"\\f143\";\n}\n\n.fa-ruble-sign:before {\n  content: \"\\f158\";\n}\n\n.fa-ruler:before {\n  content: \"\\f545\";\n}\n\n.fa-ruler-combined:before {\n  content: \"\\f546\";\n}\n\n.fa-ruler-horizontal:before {\n  content: \"\\f547\";\n}\n\n.fa-ruler-vertical:before {\n  content: \"\\f548\";\n}\n\n.fa-running:before {\n  content: \"\\f70c\";\n}\n\n.fa-rupee-sign:before {\n  content: \"\\f156\";\n}\n\n.fa-sad-cry:before {\n  content: \"\\f5b3\";\n}\n\n.fa-sad-tear:before {\n  content: \"\\f5b4\";\n}\n\n.fa-safari:before {\n  content: \"\\f267\";\n}\n\n.fa-sass:before {\n  content: \"\\f41e\";\n}\n\n.fa-satellite:before {\n  content: \"\\f7bf\";\n}\n\n.fa-satellite-dish:before {\n  content: \"\\f7c0\";\n}\n\n.fa-save:before {\n  content: \"\\f0c7\";\n}\n\n.fa-schlix:before {\n  content: \"\\f3ea\";\n}\n\n.fa-school:before {\n  content: \"\\f549\";\n}\n\n.fa-screwdriver:before {\n  content: \"\\f54a\";\n}\n\n.fa-scribd:before {\n  content: \"\\f28a\";\n}\n\n.fa-scroll:before {\n  content: \"\\f70e\";\n}\n\n.fa-sd-card:before {\n  content: \"\\f7c2\";\n}\n\n.fa-search:before {\n  content: \"\\f002\";\n}\n\n.fa-search-dollar:before {\n  content: \"\\f688\";\n}\n\n.fa-search-location:before {\n  content: \"\\f689\";\n}\n\n.fa-search-minus:before {\n  content: \"\\f010\";\n}\n\n.fa-search-plus:before {\n  content: \"\\f00e\";\n}\n\n.fa-searchengin:before {\n  content: \"\\f3eb\";\n}\n\n.fa-seedling:before {\n  content: \"\\f4d8\";\n}\n\n.fa-sellcast:before {\n  content: \"\\f2da\";\n}\n\n.fa-sellsy:before {\n  content: \"\\f213\";\n}\n\n.fa-server:before {\n  content: \"\\f233\";\n}\n\n.fa-servicestack:before {\n  content: \"\\f3ec\";\n}\n\n.fa-shapes:before {\n  content: \"\\f61f\";\n}\n\n.fa-share:before {\n  content: \"\\f064\";\n}\n\n.fa-share-alt:before {\n  content: \"\\f1e0\";\n}\n\n.fa-share-alt-square:before {\n  content: \"\\f1e1\";\n}\n\n.fa-share-square:before {\n  content: \"\\f14d\";\n}\n\n.fa-shekel-sign:before {\n  content: \"\\f20b\";\n}\n\n.fa-shield-alt:before {\n  content: \"\\f3ed\";\n}\n\n.fa-ship:before {\n  content: \"\\f21a\";\n}\n\n.fa-shipping-fast:before {\n  content: \"\\f48b\";\n}\n\n.fa-shirtsinbulk:before {\n  content: \"\\f214\";\n}\n\n.fa-shoe-prints:before {\n  content: \"\\f54b\";\n}\n\n.fa-shopping-bag:before {\n  content: \"\\f290\";\n}\n\n.fa-shopping-basket:before {\n  content: \"\\f291\";\n}\n\n.fa-shopping-cart:before {\n  content: \"\\f07a\";\n}\n\n.fa-shopware:before {\n  content: \"\\f5b5\";\n}\n\n.fa-shower:before {\n  content: \"\\f2cc\";\n}\n\n.fa-shuttle-van:before {\n  content: \"\\f5b6\";\n}\n\n.fa-sign:before {\n  content: \"\\f4d9\";\n}\n\n.fa-sign-in-alt:before {\n  content: \"\\f2f6\";\n}\n\n.fa-sign-language:before {\n  content: \"\\f2a7\";\n}\n\n.fa-sign-out-alt:before {\n  content: \"\\f2f5\";\n}\n\n.fa-signal:before {\n  content: \"\\f012\";\n}\n\n.fa-signature:before {\n  content: \"\\f5b7\";\n}\n\n.fa-sim-card:before {\n  content: \"\\f7c4\";\n}\n\n.fa-simplybuilt:before {\n  content: \"\\f215\";\n}\n\n.fa-sistrix:before {\n  content: \"\\f3ee\";\n}\n\n.fa-sitemap:before {\n  content: \"\\f0e8\";\n}\n\n.fa-sith:before {\n  content: \"\\f512\";\n}\n\n.fa-skating:before {\n  content: \"\\f7c5\";\n}\n\n.fa-sketch:before {\n  content: \"\\f7c6\";\n}\n\n.fa-skiing:before {\n  content: \"\\f7c9\";\n}\n\n.fa-skiing-nordic:before {\n  content: \"\\f7ca\";\n}\n\n.fa-skull:before {\n  content: \"\\f54c\";\n}\n\n.fa-skull-crossbones:before {\n  content: \"\\f714\";\n}\n\n.fa-skyatlas:before {\n  content: \"\\f216\";\n}\n\n.fa-skype:before {\n  content: \"\\f17e\";\n}\n\n.fa-slack:before {\n  content: \"\\f198\";\n}\n\n.fa-slack-hash:before {\n  content: \"\\f3ef\";\n}\n\n.fa-slash:before {\n  content: \"\\f715\";\n}\n\n.fa-sleigh:before {\n  content: \"\\f7cc\";\n}\n\n.fa-sliders-h:before {\n  content: \"\\f1de\";\n}\n\n.fa-slideshare:before {\n  content: \"\\f1e7\";\n}\n\n.fa-smile:before {\n  content: \"\\f118\";\n}\n\n.fa-smile-beam:before {\n  content: \"\\f5b8\";\n}\n\n.fa-smile-wink:before {\n  content: \"\\f4da\";\n}\n\n.fa-smog:before {\n  content: \"\\f75f\";\n}\n\n.fa-smoking:before {\n  content: \"\\f48d\";\n}\n\n.fa-smoking-ban:before {\n  content: \"\\f54d\";\n}\n\n.fa-sms:before {\n  content: \"\\f7cd\";\n}\n\n.fa-snapchat:before {\n  content: \"\\f2ab\";\n}\n\n.fa-snapchat-ghost:before {\n  content: \"\\f2ac\";\n}\n\n.fa-snapchat-square:before {\n  content: \"\\f2ad\";\n}\n\n.fa-snowboarding:before {\n  content: \"\\f7ce\";\n}\n\n.fa-snowflake:before {\n  content: \"\\f2dc\";\n}\n\n.fa-snowman:before {\n  content: \"\\f7d0\";\n}\n\n.fa-snowplow:before {\n  content: \"\\f7d2\";\n}\n\n.fa-socks:before {\n  content: \"\\f696\";\n}\n\n.fa-solar-panel:before {\n  content: \"\\f5ba\";\n}\n\n.fa-sort:before {\n  content: \"\\f0dc\";\n}\n\n.fa-sort-alpha-down:before {\n  content: \"\\f15d\";\n}\n\n.fa-sort-alpha-up:before {\n  content: \"\\f15e\";\n}\n\n.fa-sort-amount-down:before {\n  content: \"\\f160\";\n}\n\n.fa-sort-amount-up:before {\n  content: \"\\f161\";\n}\n\n.fa-sort-down:before {\n  content: \"\\f0dd\";\n}\n\n.fa-sort-numeric-down:before {\n  content: \"\\f162\";\n}\n\n.fa-sort-numeric-up:before {\n  content: \"\\f163\";\n}\n\n.fa-sort-up:before {\n  content: \"\\f0de\";\n}\n\n.fa-soundcloud:before {\n  content: \"\\f1be\";\n}\n\n.fa-sourcetree:before {\n  content: \"\\f7d3\";\n}\n\n.fa-spa:before {\n  content: \"\\f5bb\";\n}\n\n.fa-space-shuttle:before {\n  content: \"\\f197\";\n}\n\n.fa-speakap:before {\n  content: \"\\f3f3\";\n}\n\n.fa-spider:before {\n  content: \"\\f717\";\n}\n\n.fa-spinner:before {\n  content: \"\\f110\";\n}\n\n.fa-splotch:before {\n  content: \"\\f5bc\";\n}\n\n.fa-spotify:before {\n  content: \"\\f1bc\";\n}\n\n.fa-spray-can:before {\n  content: \"\\f5bd\";\n}\n\n.fa-square:before {\n  content: \"\\f0c8\";\n}\n\n.fa-square-full:before {\n  content: \"\\f45c\";\n}\n\n.fa-square-root-alt:before {\n  content: \"\\f698\";\n}\n\n.fa-squarespace:before {\n  content: \"\\f5be\";\n}\n\n.fa-stack-exchange:before {\n  content: \"\\f18d\";\n}\n\n.fa-stack-overflow:before {\n  content: \"\\f16c\";\n}\n\n.fa-stamp:before {\n  content: \"\\f5bf\";\n}\n\n.fa-star:before {\n  content: \"\\f005\";\n}\n\n.fa-star-and-crescent:before {\n  content: \"\\f699\";\n}\n\n.fa-star-half:before {\n  content: \"\\f089\";\n}\n\n.fa-star-half-alt:before {\n  content: \"\\f5c0\";\n}\n\n.fa-star-of-david:before {\n  content: \"\\f69a\";\n}\n\n.fa-star-of-life:before {\n  content: \"\\f621\";\n}\n\n.fa-staylinked:before {\n  content: \"\\f3f5\";\n}\n\n.fa-steam:before {\n  content: \"\\f1b6\";\n}\n\n.fa-steam-square:before {\n  content: \"\\f1b7\";\n}\n\n.fa-steam-symbol:before {\n  content: \"\\f3f6\";\n}\n\n.fa-step-backward:before {\n  content: \"\\f048\";\n}\n\n.fa-step-forward:before {\n  content: \"\\f051\";\n}\n\n.fa-stethoscope:before {\n  content: \"\\f0f1\";\n}\n\n.fa-sticker-mule:before {\n  content: \"\\f3f7\";\n}\n\n.fa-sticky-note:before {\n  content: \"\\f249\";\n}\n\n.fa-stop:before {\n  content: \"\\f04d\";\n}\n\n.fa-stop-circle:before {\n  content: \"\\f28d\";\n}\n\n.fa-stopwatch:before {\n  content: \"\\f2f2\";\n}\n\n.fa-store:before {\n  content: \"\\f54e\";\n}\n\n.fa-store-alt:before {\n  content: \"\\f54f\";\n}\n\n.fa-strava:before {\n  content: \"\\f428\";\n}\n\n.fa-stream:before {\n  content: \"\\f550\";\n}\n\n.fa-street-view:before {\n  content: \"\\f21d\";\n}\n\n.fa-strikethrough:before {\n  content: \"\\f0cc\";\n}\n\n.fa-stripe:before {\n  content: \"\\f429\";\n}\n\n.fa-stripe-s:before {\n  content: \"\\f42a\";\n}\n\n.fa-stroopwafel:before {\n  content: \"\\f551\";\n}\n\n.fa-studiovinari:before {\n  content: \"\\f3f8\";\n}\n\n.fa-stumbleupon:before {\n  content: \"\\f1a4\";\n}\n\n.fa-stumbleupon-circle:before {\n  content: \"\\f1a3\";\n}\n\n.fa-subscript:before {\n  content: \"\\f12c\";\n}\n\n.fa-subway:before {\n  content: \"\\f239\";\n}\n\n.fa-suitcase:before {\n  content: \"\\f0f2\";\n}\n\n.fa-suitcase-rolling:before {\n  content: \"\\f5c1\";\n}\n\n.fa-sun:before {\n  content: \"\\f185\";\n}\n\n.fa-superpowers:before {\n  content: \"\\f2dd\";\n}\n\n.fa-superscript:before {\n  content: \"\\f12b\";\n}\n\n.fa-supple:before {\n  content: \"\\f3f9\";\n}\n\n.fa-surprise:before {\n  content: \"\\f5c2\";\n}\n\n.fa-suse:before {\n  content: \"\\f7d6\";\n}\n\n.fa-swatchbook:before {\n  content: \"\\f5c3\";\n}\n\n.fa-swimmer:before {\n  content: \"\\f5c4\";\n}\n\n.fa-swimming-pool:before {\n  content: \"\\f5c5\";\n}\n\n.fa-synagogue:before {\n  content: \"\\f69b\";\n}\n\n.fa-sync:before {\n  content: \"\\f021\";\n}\n\n.fa-sync-alt:before {\n  content: \"\\f2f1\";\n}\n\n.fa-syringe:before {\n  content: \"\\f48e\";\n}\n\n.fa-table:before {\n  content: \"\\f0ce\";\n}\n\n.fa-table-tennis:before {\n  content: \"\\f45d\";\n}\n\n.fa-tablet:before {\n  content: \"\\f10a\";\n}\n\n.fa-tablet-alt:before {\n  content: \"\\f3fa\";\n}\n\n.fa-tablets:before {\n  content: \"\\f490\";\n}\n\n.fa-tachometer-alt:before {\n  content: \"\\f3fd\";\n}\n\n.fa-tag:before {\n  content: \"\\f02b\";\n}\n\n.fa-tags:before {\n  content: \"\\f02c\";\n}\n\n.fa-tape:before {\n  content: \"\\f4db\";\n}\n\n.fa-tasks:before {\n  content: \"\\f0ae\";\n}\n\n.fa-taxi:before {\n  content: \"\\f1ba\";\n}\n\n.fa-teamspeak:before {\n  content: \"\\f4f9\";\n}\n\n.fa-teeth:before {\n  content: \"\\f62e\";\n}\n\n.fa-teeth-open:before {\n  content: \"\\f62f\";\n}\n\n.fa-telegram:before {\n  content: \"\\f2c6\";\n}\n\n.fa-telegram-plane:before {\n  content: \"\\f3fe\";\n}\n\n.fa-temperature-high:before {\n  content: \"\\f769\";\n}\n\n.fa-temperature-low:before {\n  content: \"\\f76b\";\n}\n\n.fa-tencent-weibo:before {\n  content: \"\\f1d5\";\n}\n\n.fa-tenge:before {\n  content: \"\\f7d7\";\n}\n\n.fa-terminal:before {\n  content: \"\\f120\";\n}\n\n.fa-text-height:before {\n  content: \"\\f034\";\n}\n\n.fa-text-width:before {\n  content: \"\\f035\";\n}\n\n.fa-th:before {\n  content: \"\\f00a\";\n}\n\n.fa-th-large:before {\n  content: \"\\f009\";\n}\n\n.fa-th-list:before {\n  content: \"\\f00b\";\n}\n\n.fa-the-red-yeti:before {\n  content: \"\\f69d\";\n}\n\n.fa-theater-masks:before {\n  content: \"\\f630\";\n}\n\n.fa-themeco:before {\n  content: \"\\f5c6\";\n}\n\n.fa-themeisle:before {\n  content: \"\\f2b2\";\n}\n\n.fa-thermometer:before {\n  content: \"\\f491\";\n}\n\n.fa-thermometer-empty:before {\n  content: \"\\f2cb\";\n}\n\n.fa-thermometer-full:before {\n  content: \"\\f2c7\";\n}\n\n.fa-thermometer-half:before {\n  content: \"\\f2c9\";\n}\n\n.fa-thermometer-quarter:before {\n  content: \"\\f2ca\";\n}\n\n.fa-thermometer-three-quarters:before {\n  content: \"\\f2c8\";\n}\n\n.fa-think-peaks:before {\n  content: \"\\f731\";\n}\n\n.fa-thumbs-down:before {\n  content: \"\\f165\";\n}\n\n.fa-thumbs-up:before {\n  content: \"\\f164\";\n}\n\n.fa-thumbtack:before {\n  content: \"\\f08d\";\n}\n\n.fa-ticket-alt:before {\n  content: \"\\f3ff\";\n}\n\n.fa-times:before {\n  content: \"\\f00d\";\n}\n\n.fa-times-circle:before {\n  content: \"\\f057\";\n}\n\n.fa-tint:before {\n  content: \"\\f043\";\n}\n\n.fa-tint-slash:before {\n  content: \"\\f5c7\";\n}\n\n.fa-tired:before {\n  content: \"\\f5c8\";\n}\n\n.fa-toggle-off:before {\n  content: \"\\f204\";\n}\n\n.fa-toggle-on:before {\n  content: \"\\f205\";\n}\n\n.fa-toilet:before {\n  content: \"\\f7d8\";\n}\n\n.fa-toilet-paper:before {\n  content: \"\\f71e\";\n}\n\n.fa-toolbox:before {\n  content: \"\\f552\";\n}\n\n.fa-tools:before {\n  content: \"\\f7d9\";\n}\n\n.fa-tooth:before {\n  content: \"\\f5c9\";\n}\n\n.fa-torah:before {\n  content: \"\\f6a0\";\n}\n\n.fa-torii-gate:before {\n  content: \"\\f6a1\";\n}\n\n.fa-tractor:before {\n  content: \"\\f722\";\n}\n\n.fa-trade-federation:before {\n  content: \"\\f513\";\n}\n\n.fa-trademark:before {\n  content: \"\\f25c\";\n}\n\n.fa-traffic-light:before {\n  content: \"\\f637\";\n}\n\n.fa-train:before {\n  content: \"\\f238\";\n}\n\n.fa-tram:before {\n  content: \"\\f7da\";\n}\n\n.fa-transgender:before {\n  content: \"\\f224\";\n}\n\n.fa-transgender-alt:before {\n  content: \"\\f225\";\n}\n\n.fa-trash:before {\n  content: \"\\f1f8\";\n}\n\n.fa-trash-alt:before {\n  content: \"\\f2ed\";\n}\n\n.fa-tree:before {\n  content: \"\\f1bb\";\n}\n\n.fa-trello:before {\n  content: \"\\f181\";\n}\n\n/*.fa-tripadvisor:before { content: fa-content($fa-var-tripadvisor); }*/\n.fa-trophy:before {\n  content: \"\\f091\";\n}\n\n.fa-truck:before {\n  content: \"\\f0d1\";\n}\n\n.fa-truck-loading:before {\n  content: \"\\f4de\";\n}\n\n.fa-truck-monster:before {\n  content: \"\\f63b\";\n}\n\n.fa-truck-moving:before {\n  content: \"\\f4df\";\n}\n\n.fa-truck-pickup:before {\n  content: \"\\f63c\";\n}\n\n.fa-tshirt:before {\n  content: \"\\f553\";\n}\n\n.fa-tty:before {\n  content: \"\\f1e4\";\n}\n\n.fa-tumblr:before {\n  content: \"\\f173\";\n}\n\n.fa-tumblr-square:before {\n  content: \"\\f174\";\n}\n\n.fa-tv:before {\n  content: \"\\f26c\";\n}\n\n.fa-twitch:before {\n  content: \"\\f1e8\";\n}\n\n.fa-twitter:before {\n  content: \"\\f099\";\n}\n\n.fa-twitter-square:before {\n  content: \"\\f081\";\n}\n\n.fa-typo3:before {\n  content: \"\\f42b\";\n}\n\n.fa-uber:before {\n  content: \"\\f402\";\n}\n\n.fa-ubuntu:before {\n  content: \"\\f7df\";\n}\n\n.fa-uikit:before {\n  content: \"\\f403\";\n}\n\n.fa-umbrella:before {\n  content: \"\\f0e9\";\n}\n\n.fa-umbrella-beach:before {\n  content: \"\\f5ca\";\n}\n\n.fa-underline:before {\n  content: \"\\f0cd\";\n}\n\n.fa-undo:before {\n  content: \"\\f0e2\";\n}\n\n.fa-undo-alt:before {\n  content: \"\\f2ea\";\n}\n\n.fa-uniregistry:before {\n  content: \"\\f404\";\n}\n\n.fa-universal-access:before {\n  content: \"\\f29a\";\n}\n\n.fa-university:before {\n  content: \"\\f19c\";\n}\n\n.fa-unlink:before {\n  content: \"\\f127\";\n}\n\n.fa-unlock:before {\n  content: \"\\f09c\";\n}\n\n.fa-unlock-alt:before {\n  content: \"\\f13e\";\n}\n\n.fa-untappd:before {\n  content: \"\\f405\";\n}\n\n.fa-upload:before {\n  content: \"\\f093\";\n}\n\n.fa-ups:before {\n  content: \"\\f7e0\";\n}\n\n.fa-usb:before {\n  content: \"\\f287\";\n}\n\n.fa-user:before {\n  content: \"\\f007\";\n}\n\n.fa-user-alt:before {\n  content: \"\\f406\";\n}\n\n.fa-user-alt-slash:before {\n  content: \"\\f4fa\";\n}\n\n.fa-user-astronaut:before {\n  content: \"\\f4fb\";\n}\n\n.fa-user-check:before {\n  content: \"\\f4fc\";\n}\n\n.fa-user-circle:before {\n  content: \"\\f2bd\";\n}\n\n.fa-user-clock:before {\n  content: \"\\f4fd\";\n}\n\n.fa-user-cog:before {\n  content: \"\\f4fe\";\n}\n\n.fa-user-edit:before {\n  content: \"\\f4ff\";\n}\n\n.fa-user-friends:before {\n  content: \"\\f500\";\n}\n\n.fa-user-graduate:before {\n  content: \"\\f501\";\n}\n\n.fa-user-injured:before {\n  content: \"\\f728\";\n}\n\n.fa-user-lock:before {\n  content: \"\\f502\";\n}\n\n.fa-user-md:before {\n  content: \"\\f0f0\";\n}\n\n.fa-user-minus:before {\n  content: \"\\f503\";\n}\n\n.fa-user-ninja:before {\n  content: \"\\f504\";\n}\n\n.fa-user-plus:before {\n  content: \"\\f234\";\n}\n\n.fa-user-secret:before {\n  content: \"\\f21b\";\n}\n\n.fa-user-shield:before {\n  content: \"\\f505\";\n}\n\n.fa-user-slash:before {\n  content: \"\\f506\";\n}\n\n.fa-user-tag:before {\n  content: \"\\f507\";\n}\n\n.fa-user-tie:before {\n  content: \"\\f508\";\n}\n\n.fa-user-times:before {\n  content: \"\\f235\";\n}\n\n.fa-users:before {\n  content: \"\\f0c0\";\n}\n\n.fa-users-cog:before {\n  content: \"\\f509\";\n}\n\n.fa-usps:before {\n  content: \"\\f7e1\";\n}\n\n.fa-ussunnah:before {\n  content: \"\\f407\";\n}\n\n.fa-utensil-spoon:before {\n  content: \"\\f2e5\";\n}\n\n.fa-utensils:before {\n  content: \"\\f2e7\";\n}\n\n.fa-vaadin:before {\n  content: \"\\f408\";\n}\n\n.fa-vector-square:before {\n  content: \"\\f5cb\";\n}\n\n.fa-venus:before {\n  content: \"\\f221\";\n}\n\n.fa-venus-double:before {\n  content: \"\\f226\";\n}\n\n.fa-venus-mars:before {\n  content: \"\\f228\";\n}\n\n.fa-viacoin:before {\n  content: \"\\f237\";\n}\n\n.fa-viadeo:before {\n  content: \"\\f2a9\";\n}\n\n.fa-viadeo-square:before {\n  content: \"\\f2aa\";\n}\n\n.fa-vial:before {\n  content: \"\\f492\";\n}\n\n.fa-vials:before {\n  content: \"\\f493\";\n}\n\n.fa-viber:before {\n  content: \"\\f409\";\n}\n\n.fa-video:before {\n  content: \"\\f03d\";\n}\n\n.fa-video-slash:before {\n  content: \"\\f4e2\";\n}\n\n.fa-vihara:before {\n  content: \"\\f6a7\";\n}\n\n.fa-vimeo:before {\n  content: \"\\f40a\";\n}\n\n.fa-vimeo-square:before {\n  content: \"\\f194\";\n}\n\n.fa-vimeo-v:before {\n  content: \"\\f27d\";\n}\n\n.fa-vine:before {\n  content: \"\\f1ca\";\n}\n\n.fa-vk:before {\n  content: \"\\f189\";\n}\n\n.fa-vnv:before {\n  content: \"\\f40b\";\n}\n\n.fa-volleyball-ball:before {\n  content: \"\\f45f\";\n}\n\n.fa-volume-down:before {\n  content: \"\\f027\";\n}\n\n.fa-volume-mute:before {\n  content: \"\\f6a9\";\n}\n\n.fa-volume-off:before {\n  content: \"\\f026\";\n}\n\n.fa-volume-up:before {\n  content: \"\\f028\";\n}\n\n.fa-vote-yea:before {\n  content: \"\\f772\";\n}\n\n.fa-vr-cardboard:before {\n  content: \"\\f729\";\n}\n\n.fa-vuejs:before {\n  content: \"\\f41f\";\n}\n\n.fa-walking:before {\n  content: \"\\f554\";\n}\n\n.fa-wallet:before {\n  content: \"\\f555\";\n}\n\n.fa-warehouse:before {\n  content: \"\\f494\";\n}\n\n.fa-water:before {\n  content: \"\\f773\";\n}\n\n.fa-weebly:before {\n  content: \"\\f5cc\";\n}\n\n.fa-weibo:before {\n  content: \"\\f18a\";\n}\n\n.fa-weight:before {\n  content: \"\\f496\";\n}\n\n.fa-weight-hanging:before {\n  content: \"\\f5cd\";\n}\n\n.fa-weixin:before {\n  content: \"\\f1d7\";\n}\n\n.fa-whatsapp:before {\n  content: \"\\f232\";\n}\n\n.fa-whatsapp-square:before {\n  content: \"\\f40c\";\n}\n\n.fa-wheelchair:before {\n  content: \"\\f193\";\n}\n\n.fa-whmcs:before {\n  content: \"\\f40d\";\n}\n\n.fa-wifi:before {\n  content: \"\\f1eb\";\n}\n\n.fa-wikipedia-w:before {\n  content: \"\\f266\";\n}\n\n.fa-wind:before {\n  content: \"\\f72e\";\n}\n\n.fa-window-close:before {\n  content: \"\\f410\";\n}\n\n.fa-window-maximize:before {\n  content: \"\\f2d0\";\n}\n\n.fa-window-minimize:before {\n  content: \"\\f2d1\";\n}\n\n.fa-window-restore:before {\n  content: \"\\f2d2\";\n}\n\n.fa-windows:before {\n  content: \"\\f17a\";\n}\n\n.fa-wine-bottle:before {\n  content: \"\\f72f\";\n}\n\n.fa-wine-glass:before {\n  content: \"\\f4e3\";\n}\n\n.fa-wine-glass-alt:before {\n  content: \"\\f5ce\";\n}\n\n.fa-wix:before {\n  content: \"\\f5cf\";\n}\n\n.fa-wizards-of-the-coast:before {\n  content: \"\\f730\";\n}\n\n.fa-wolf-pack-battalion:before {\n  content: \"\\f514\";\n}\n\n.fa-won-sign:before {\n  content: \"\\f159\";\n}\n\n.fa-wordpress:before {\n  content: \"\\f19a\";\n}\n\n.fa-wordpress-simple:before {\n  content: \"\\f411\";\n}\n\n.fa-wpbeginner:before {\n  content: \"\\f297\";\n}\n\n.fa-wpexplorer:before {\n  content: \"\\f2de\";\n}\n\n.fa-wpforms:before {\n  content: \"\\f298\";\n}\n\n.fa-wpressr:before {\n  content: \"\\f3e4\";\n}\n\n.fa-wrench:before {\n  content: \"\\f0ad\";\n}\n\n.fa-x-ray:before {\n  content: \"\\f497\";\n}\n\n.fa-xbox:before {\n  content: \"\\f412\";\n}\n\n.fa-xing:before {\n  content: \"\\f168\";\n}\n\n.fa-xing-square:before {\n  content: \"\\f169\";\n}\n\n.fa-y-combinator:before {\n  content: \"\\f23b\";\n}\n\n.fa-yahoo:before {\n  content: \"\\f19e\";\n}\n\n.fa-yandex:before {\n  content: \"\\f413\";\n}\n\n.fa-yandex-international:before {\n  content: \"\\f414\";\n}\n\n.fa-yarn:before {\n  content: \"\\f7e3\";\n}\n\n.fa-yelp:before {\n  content: \"\\f1e9\";\n}\n\n.fa-yen-sign:before {\n  content: \"\\f157\";\n}\n\n.fa-yin-yang:before {\n  content: \"\\f6ad\";\n}\n\n.fa-yoast:before {\n  content: \"\\f2b1\";\n}\n\n.fa-youtube:before {\n  content: \"\\f167\";\n}\n\n.fa-youtube-square:before {\n  content: \"\\f431\";\n}\n\n.fa-zhihu:before {\n  content: \"\\f63f\";\n}\n\n.sr-only {\n  border: 0;\n  clip: rect(0, 0, 0, 0);\n  height: 1px;\n  margin: -1px;\n  overflow: hidden;\n  padding: 0;\n  position: absolute;\n  width: 1px;\n}\n\n.sr-only-focusable:active, .sr-only-focusable:focus {\n  clip: auto;\n  height: auto;\n  margin: 0;\n  overflow: visible;\n  position: static;\n  width: auto;\n}\n\n/*!\n * Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com\n * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)\n */\n@font-face {\n  font-family: \"Font Awesome 5 Free\";\n  font-style: normal;\n  font-weight: 900;\n  font-display: block;\n  src: url(\"/webfonts/fa-solid-900.eot\");\n  src: url(\"/webfonts/fa-solid-900.eot?#iefix\") format(\"embedded-opentype\"), url(\"/webfonts/fa-solid-900.woff2\") format(\"woff2\"), url(\"/webfonts/fa-solid-900.woff\") format(\"woff\"), url(\"/webfonts/fa-solid-900.ttf\") format(\"truetype\"), url(\"/webfonts/fa-solid-900.svg#fontawesome\") format(\"svg\");\n}\n.fa,\n.fas {\n  font-family: \"Font Awesome 5 Free\";\n  font-weight: 900;\n}\n\n/*!\n * Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com\n * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)\n */\n@font-face {\n  font-family: \"Font Awesome 5 Free\";\n  font-style: normal;\n  font-weight: 400;\n  font-display: block;\n  src: url(\"/webfonts/fa-regular-400.eot\");\n  src: url(\"/webfonts/fa-regular-400.eot?#iefix\") format(\"embedded-opentype\"), url(\"/webfonts/fa-regular-400.woff2\") format(\"woff2\"), url(\"/webfonts/fa-regular-400.woff\") format(\"woff\"), url(\"/webfonts/fa-regular-400.ttf\") format(\"truetype\"), url(\"/webfonts/fa-regular-400.svg#fontawesome\") format(\"svg\");\n}\n.far {\n  font-family: \"Font Awesome 5 Free\";\n  font-weight: 400;\n}\n\n/*!\n * Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com\n * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)\n */\n@font-face {\n  font-family: \"Font Awesome 5 Brands\";\n  font-style: normal;\n  font-weight: 400;\n  font-display: block;\n  src: url(\"/webfonts/fa-brands-400.eot\");\n  src: url(\"/webfonts/fa-brands-400.eot?#iefix\") format(\"embedded-opentype\"), url(\"/webfonts/fa-brands-400.woff2\") format(\"woff2\"), url(\"/webfonts/fa-brands-400.woff\") format(\"woff\"), url(\"/webfonts/fa-brands-400.ttf\") format(\"truetype\"), url(\"/webfonts/fa-brands-400.svg#fontawesome\") format(\"svg\");\n}\n.fab {\n  font-family: \"Font Awesome 5 Brands\";\n  font-weight: 400;\n}\n\nhtml {\n  position: relative;\n  min-height: 100%;\n}\n\nbody {\n  min-height: 100vh;\n  padding-top: 142px;\n}\n\n#newPostLink {\n  position: absolute;\n  top: 170px;\n  right: 0px;\n}\n\n#editPostLink {\n  position: absolute;\n  top: 200px;\n  right: 0px;\n}\n\n#unpublishPostLink {\n  position: absolute;\n  top: 230px !important;\n  right: 0px !important;\n}\n\n#pageManagerLink {\n  position: absolute;\n  top: 170px;\n  right: 0px;\n}\n\n#newPageLink {\n  position: absolute;\n  top: 200px;\n  right: 0px;\n}\n\n#editPageLink {\n  position: absolute;\n  top: 230px;\n  right: 0px;\n}\n\n#unpublishPageLink {\n  position: absolute;\n  top: 260px !important;\n  right: 0px !important;\n}\n\n#sidenavtoggle {\n  position: absolute;\n  top: 220px;\n  right: 5px;\n}\n\n@media screen and (max-width: 812px) {\n  #sidenavtoggle,\n  #sidenavmenu {\n    display: none;\n  }\n}\n.flex-fill {\n  flex: 1 1 auto !important;\n}\n\nimg, video, iframe {\n  max-width: 100%;\n}\n\ntd img, video, iframe {\n  max-width: none;\n}\n\n.table td, .table th {\n  vertical-align: inherit;\n}\n\n.brand-header {\n  height: 100px;\n}\n\nheader .navbar {\n  top: 100px;\n}\n\n#toast-container {\n  position: sticky;\n  z-index: 1055;\n  top: 0;\n}\n\n#toast-wrapper {\n  position: absolute;\n  top: 0;\n  right: 0;\n  margin: 5px;\n}\n\n#toast-container > #toast-wrapper > .toast {\n  min-width: 150px;\n  background-color: rgb(255, 255, 255);\n  border-top: none;\n}\n\n#toast-container > #toast-wrapper > .toast > .toast-header strong {\n  padding-right: 20px;\n}\n\ndiv.input-group-prepend > span.input-group-text > i {\n  line-height: 1.5em;\n}\n/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIl9iczUuc2NzcyIsIi4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9fcm9vdC5zY3NzIiwiLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL19yZWJvb3Quc2NzcyIsIi4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy92ZW5kb3IvX3Jmcy5zY3NzIiwiLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL192YXJpYWJsZXMuc2NzcyIsIl92YXJpYWJsZXMuc2NzcyIsIi4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9taXhpbnMvX2JvcmRlci1yYWRpdXMuc2NzcyIsIi4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9fdHlwZS5zY3NzIiwiLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL21peGlucy9fbGlzdHMuc2NzcyIsIi4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9faW1hZ2VzLnNjc3MiLCIuLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvbWl4aW5zL19pbWFnZS5zY3NzIiwiLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL19jb250YWluZXJzLnNjc3MiLCIuLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvbWl4aW5zL19jb250YWluZXIuc2NzcyIsIi4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9taXhpbnMvX2JyZWFrcG9pbnRzLnNjc3MiLCIuLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvX2dyaWQuc2NzcyIsIi4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9taXhpbnMvX2dyaWQuc2NzcyIsIi4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9fdGFibGVzLnNjc3MiLCIuLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvbWl4aW5zL190YWJsZS12YXJpYW50cy5zY3NzIiwiLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL2Zvcm1zL19sYWJlbHMuc2NzcyIsIi4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9mb3Jtcy9fZm9ybS10ZXh0LnNjc3MiLCIuLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvZm9ybXMvX2Zvcm0tY29udHJvbC5zY3NzIiwiLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL21peGlucy9fdHJhbnNpdGlvbi5zY3NzIiwiLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL21peGlucy9fZ3JhZGllbnRzLnNjc3MiLCIuLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvZm9ybXMvX2Zvcm0tc2VsZWN0LnNjc3MiLCIuLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvZm9ybXMvX2Zvcm0tY2hlY2suc2NzcyIsIi4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9mb3Jtcy9fZm9ybS1yYW5nZS5zY3NzIiwiLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL2Zvcm1zL19mbG9hdGluZy1sYWJlbHMuc2NzcyIsIi4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9mb3Jtcy9faW5wdXQtZ3JvdXAuc2NzcyIsIi4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9taXhpbnMvX2Zvcm1zLnNjc3MiLCIuLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvX2J1dHRvbnMuc2NzcyIsIi4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9taXhpbnMvX2J1dHRvbnMuc2NzcyIsIi4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9fdHJhbnNpdGlvbnMuc2NzcyIsIi4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9fZHJvcGRvd24uc2NzcyIsIi4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9taXhpbnMvX2NhcmV0LnNjc3MiLCIuLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvX2J1dHRvbi1ncm91cC5zY3NzIiwiLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL19uYXYuc2NzcyIsIi4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9fbmF2YmFyLnNjc3MiLCIuLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvX2NhcmQuc2NzcyIsIi4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9fYWNjb3JkaW9uLnNjc3MiLCIuLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvX2JyZWFkY3J1bWIuc2NzcyIsIi4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9fcGFnaW5hdGlvbi5zY3NzIiwiLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL21peGlucy9fcGFnaW5hdGlvbi5zY3NzIiwiLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL19iYWRnZS5zY3NzIiwiLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL19hbGVydC5zY3NzIiwiLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL21peGlucy9fYWxlcnQuc2NzcyIsIi4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9fcHJvZ3Jlc3Muc2NzcyIsIi4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9fbGlzdC1ncm91cC5zY3NzIiwiLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL21peGlucy9fbGlzdC1ncm91cC5zY3NzIiwiLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL19jbG9zZS5zY3NzIiwiLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL190b2FzdHMuc2NzcyIsIi4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9fbW9kYWwuc2NzcyIsIi4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9taXhpbnMvX2JhY2tkcm9wLnNjc3MiLCIuLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvX3Rvb2x0aXAuc2NzcyIsIi4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9taXhpbnMvX3Jlc2V0LXRleHQuc2NzcyIsIi4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9fcG9wb3Zlci5zY3NzIiwiLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL19jYXJvdXNlbC5zY3NzIiwiLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL21peGlucy9fY2xlYXJmaXguc2NzcyIsIi4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9fc3Bpbm5lcnMuc2NzcyIsIi4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9fb2ZmY2FudmFzLnNjc3MiLCIuLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvX3BsYWNlaG9sZGVycy5zY3NzIiwiLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL2hlbHBlcnMvX2NvbG9yZWQtbGlua3Muc2NzcyIsIi4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9oZWxwZXJzL19yYXRpby5zY3NzIiwiLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL2hlbHBlcnMvX3Bvc2l0aW9uLnNjc3MiLCIuLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvaGVscGVycy9fc3RhY2tzLnNjc3MiLCIuLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvaGVscGVycy9fdmlzdWFsbHktaGlkZGVuLnNjc3MiLCIuLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvbWl4aW5zL192aXN1YWxseS1oaWRkZW4uc2NzcyIsIi4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9oZWxwZXJzL19zdHJldGNoZWQtbGluay5zY3NzIiwiLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL2hlbHBlcnMvX3RleHQtdHJ1bmNhdGlvbi5zY3NzIiwiLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL21peGlucy9fdGV4dC10cnVuY2F0ZS5zY3NzIiwiLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL2hlbHBlcnMvX3ZyLnNjc3MiLCIuLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvbWl4aW5zL191dGlsaXRpZXMuc2NzcyIsIi4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy91dGlsaXRpZXMvX2FwaS5zY3NzIiwiX2pxdWVyeS1zbWFydG1lbnUtYm9vdHN0cmFwLnNjc3MiLCJfZm9udC1hd2Vzb21lLnNjc3MiLCIuLi9ub2RlX21vZHVsZXMvQGZvcnRhd2Vzb21lL2ZvbnRhd2Vzb21lLWZyZWUvc2Nzcy9fY29yZS5zY3NzIiwiLi4vbm9kZV9tb2R1bGVzL0Bmb3J0YXdlc29tZS9mb250YXdlc29tZS1mcmVlL3Njc3MvX2xhcmdlci5zY3NzIiwiLi4vbm9kZV9tb2R1bGVzL0Bmb3J0YXdlc29tZS9mb250YXdlc29tZS1mcmVlL3Njc3MvX2ZpeGVkLXdpZHRoLnNjc3MiLCIuLi9ub2RlX21vZHVsZXMvQGZvcnRhd2Vzb21lL2ZvbnRhd2Vzb21lLWZyZWUvc2Nzcy9fdmFyaWFibGVzLnNjc3MiLCIuLi9ub2RlX21vZHVsZXMvQGZvcnRhd2Vzb21lL2ZvbnRhd2Vzb21lLWZyZWUvc2Nzcy9fbGlzdC5zY3NzIiwiLi4vbm9kZV9tb2R1bGVzL0Bmb3J0YXdlc29tZS9mb250YXdlc29tZS1mcmVlL3Njc3MvX2JvcmRlcmVkLXB1bGxlZC5zY3NzIiwiLi4vbm9kZV9tb2R1bGVzL0Bmb3J0YXdlc29tZS9mb250YXdlc29tZS1mcmVlL3Njc3MvX2FuaW1hdGVkLnNjc3MiLCIuLi9ub2RlX21vZHVsZXMvQGZvcnRhd2Vzb21lL2ZvbnRhd2Vzb21lLWZyZWUvc2Nzcy9fcm90YXRlZC1mbGlwcGVkLnNjc3MiLCIuLi9ub2RlX21vZHVsZXMvQGZvcnRhd2Vzb21lL2ZvbnRhd2Vzb21lLWZyZWUvc2Nzcy9fbWl4aW5zLnNjc3MiLCIuLi9ub2RlX21vZHVsZXMvQGZvcnRhd2Vzb21lL2ZvbnRhd2Vzb21lLWZyZWUvc2Nzcy9fc3RhY2tlZC5zY3NzIiwiX2ljb25zLnNjc3MiLCIuLi9ub2RlX21vZHVsZXMvQGZvcnRhd2Vzb21lL2ZvbnRhd2Vzb21lLWZyZWUvc2Nzcy9fc2NyZWVuLXJlYWRlci5zY3NzIiwiLi4vbm9kZV9tb2R1bGVzL0Bmb3J0YXdlc29tZS9mb250YXdlc29tZS1mcmVlL3Njc3Mvc29saWQuc2NzcyIsIi4uL25vZGVfbW9kdWxlcy9AZm9ydGF3ZXNvbWUvZm9udGF3ZXNvbWUtZnJlZS9zY3NzL3JlZ3VsYXIuc2NzcyIsIi4uL25vZGVfbW9kdWxlcy9AZm9ydGF3ZXNvbWUvZm9udGF3ZXNvbWUtZnJlZS9zY3NzL2JyYW5kcy5zY3NzIiwic3R5bGUuc2NzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBV0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQ1hBO0VBUUk7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFJQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFJQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBSUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUdGO0VBQ0E7RUFDQTtFQUNBO0VBTUE7RUFDQTtFQUNBO0VBUUE7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUlBOzs7QUNuQ0Y7QUFBQTtBQUFBO0VBR0U7OztBQWVFO0VBTko7SUFPTTs7OztBQWNOO0VBQ0U7RUFDQTtFQ21QSSxXQUxJO0VENU9SO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBOzs7QUFVRjtFQUNFO0VBQ0EsT0Ura0I0QjtFRjlrQjVCO0VBQ0E7RUFDQSxTRThrQjRCOzs7QUYza0I5QjtFQUNFLFFFd2I0Qjs7O0FGOWE5QjtFQUNFO0VBQ0EsZUVvaEI0QjtFRmpoQjVCLGFFb2hCNEI7RUZuaEI1QixhRW9oQjRCOzs7QUZoaEI5QjtFQ3dNUTs7QUFsS0o7RUR0Q0o7SUMrTVE7Ozs7QUQxTVI7RUNtTVE7O0FBbEtKO0VEakNKO0lDME1ROzs7O0FEck1SO0VDOExROztBQWxLSjtFRDVCSjtJQ3FNUTs7OztBRGhNUjtFQ3lMUTs7QUFsS0o7RUR2Qko7SUNnTVE7Ozs7QUQzTFI7RUNnTE0sV0FMSTs7O0FEdEtWO0VDMktNLFdBTEk7OztBRDNKVjtFQUNFO0VBQ0EsZUVrVTBCOzs7QUZ2VDVCO0FBQUE7RUFFRTtFQUNBO0VBQ0E7OztBQU1GO0VBQ0U7RUFDQTtFQUNBOzs7QUFNRjtBQUFBO0VBRUU7OztBQUdGO0FBQUE7QUFBQTtFQUdFO0VBQ0E7OztBQUdGO0FBQUE7QUFBQTtBQUFBO0VBSUU7OztBQUdGO0VBQ0UsYUV1WjRCOzs7QUZsWjlCO0VBQ0U7RUFDQTs7O0FBTUY7RUFDRTs7O0FBUUY7QUFBQTtFQUVFLGFFZ1k0Qjs7O0FGeFg5QjtFQzRFTSxXQUxJOzs7QURoRVY7RUFDRSxTRTRiNEI7RUYzYjVCLGtCRW1jNEI7OztBRjFiOUI7QUFBQTtFQUVFO0VDd0RJLFdBTEk7RURqRFI7RUFDQTs7O0FBR0Y7RUFBTTs7O0FBQ047RUFBTTs7O0FBS047RUFDRSxPR3hQUTtFSHlQUixpQkVrTXdDOztBRmhNeEM7RUFDRSxPRWlNc0M7OztBRnRMeEM7RUFFRTtFQUNBOzs7QUFPSjtBQUFBO0FBQUE7QUFBQTtFQUlFLGFFNlM0QjtFRC9SeEIsV0FMSTtFRFBSO0VBQ0E7OztBQU9GO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7RUNBSSxXQUxJOztBRFVSO0VDTEksV0FMSTtFRFlOO0VBQ0E7OztBQUlKO0VDWk0sV0FMSTtFRG1CUixPR2xSSztFSG1STDs7QUFHQTtFQUNFOzs7QUFJSjtFQUNFO0VDeEJJLFdBTEk7RUQrQlIsT0doVE07RUhpVE4sa0JHeFNTO0VDTFA7O0FKZ1RGO0VBQ0U7RUMvQkUsV0FMSTtFRHNDTixhRTBRMEI7OztBRmpROUI7RUFDRTs7O0FBTUY7QUFBQTtFQUVFOzs7QUFRRjtFQUNFO0VBQ0E7OztBQUdGO0VBQ0UsYUV3VTRCO0VGdlU1QixnQkV1VTRCO0VGdFU1QixPR25WUztFSG9WVDs7O0FBT0Y7RUFFRTtFQUNBOzs7QUFHRjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7RUFNRTtFQUNBO0VBQ0E7OztBQVFGO0VBQ0U7OztBQU1GO0VBRUU7OztBQVFGO0VBQ0U7OztBQUtGO0FBQUE7QUFBQTtBQUFBO0FBQUE7RUFLRTtFQUNBO0VDOUhJLFdBTEk7RURxSVI7OztBQUlGO0FBQUE7RUFFRTs7O0FBS0Y7RUFDRTs7O0FBR0Y7RUFHRTs7QUFHQTtFQUNFOzs7QUFPSjtFQUNFOzs7QUFRRjtBQUFBO0FBQUE7QUFBQTtFQUlFOztBQUdFO0FBQUE7QUFBQTtBQUFBO0VBQ0U7OztBQU9OO0VBQ0U7RUFDQTs7O0FBS0Y7RUFDRTs7O0FBVUY7RUFDRTtFQUNBO0VBQ0E7RUFDQTs7O0FBUUY7RUFDRTtFQUNBO0VBQ0E7RUFDQSxlRTZKNEI7RURoWHRCO0VEc05OOztBQ3hYRTtFRGlYSjtJQ3hNUTs7O0FEaU5OO0VBQ0U7OztBQU9KO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0VBT0U7OztBQUdGO0VBQ0U7OztBQVNGO0VBQ0U7RUFDQTs7O0FBUUY7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQVdBO0VBQ0U7OztBQUtGO0VBQ0U7OztBQU1GO0VBQ0U7OztBQU1GO0VBQ0U7RUFDQTs7O0FBS0Y7RUFDRTs7O0FBS0Y7RUFDRTs7O0FBT0Y7RUFDRTtFQUNBOzs7QUFRRjtFQUNFOzs7QUFRRjtFQUNFOzs7QUtubEJGO0VKeVFNLFdBTEk7RUlsUVIsYUh1bUI0Qjs7O0FHbG1CNUI7RUpzUU07RUlwUUosYUgwbEJrQjtFR3psQmxCLGFIMmtCMEI7O0FEMWUxQjtFSXBHRjtJSjZRTTs7OztBSTdRTjtFSnNRTTtFSXBRSixhSDBsQmtCO0VHemxCbEIsYUgya0IwQjs7QUQxZTFCO0VJcEdGO0lKNlFNOzs7O0FJN1FOO0VKc1FNO0VJcFFKLGFIMGxCa0I7RUd6bEJsQixhSDJrQjBCOztBRDFlMUI7RUlwR0Y7SUo2UU07Ozs7QUk3UU47RUpzUU07RUlwUUosYUgwbEJrQjtFR3psQmxCLGFIMmtCMEI7O0FEMWUxQjtFSXBHRjtJSjZRTTs7OztBSTdRTjtFSnNRTTtFSXBRSixhSDBsQmtCO0VHemxCbEIsYUgya0IwQjs7QUQxZTFCO0VJcEdGO0lKNlFNOzs7O0FJN1FOO0VKc1FNO0VJcFFKLGFIMGxCa0I7RUd6bEJsQixhSDJrQjBCOztBRDFlMUI7RUlwR0Y7SUo2UU07Ozs7QUl2UFI7RUNyREU7RUFDQTs7O0FEeURGO0VDMURFO0VBQ0E7OztBRDRERjtFQUNFOztBQUVBO0VBQ0UsY0g4bEIwQjs7O0FHcGxCOUI7RUpzTk0sV0FMSTtFSS9NUjs7O0FBSUY7RUFDRSxlSGdTTztFRGpGSCxXQUxJOztBSXZNUjtFQUNFOzs7QUFJSjtFQUNFO0VBQ0EsZUhzUk87RURqRkgsV0FMSTtFSTlMUixPRjdFUzs7QUUrRVQ7RUFDRTs7O0FFOUZKO0VDSUU7RUFHQTs7O0FEREY7RUFDRSxTTHM5Q2tDO0VLcjlDbEM7RUFDQTtFSEdFO0VJUkY7RUFHQTs7O0FEY0Y7RUFFRTs7O0FBR0Y7RUFDRTtFQUNBOzs7QUFHRjtFTitQTSxXQUxJO0VNeFBSLE9KbkJTOzs7QU1mVDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtFQ0hBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7OztBQ3dERTtFRjVDRTtJQUNFLFdQaWRlOzs7QVN0YW5CO0VGNUNFO0lBQ0UsV1BpZGU7OztBU3RhbkI7RUY1Q0U7SUFDRSxXUGlkZTs7O0FTdGFuQjtFRjVDRTtJQUNFLFdQaWRlOzs7QVN0YW5CO0VGNUNFO0lBQ0UsV1BpZGU7OztBVWhlckI7RUNBQTtFQUNBO0VBQ0E7RUFDQTtFQUVBO0VBQ0E7RUFDQTs7QURKRTtFQ2FGO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTs7O0FBK0NJO0VBQ0U7OztBQUdGO0VBcENKO0VBQ0E7OztBQWNBO0VBQ0U7RUFDQTs7O0FBRkY7RUFDRTtFQUNBOzs7QUFGRjtFQUNFO0VBQ0E7OztBQUZGO0VBQ0U7RUFDQTs7O0FBRkY7RUFDRTtFQUNBOzs7QUFGRjtFQUNFO0VBQ0E7OztBQStCRTtFQWhESjtFQUNBOzs7QUFxRFE7RUFoRU47RUFDQTs7O0FBK0RNO0VBaEVOO0VBQ0E7OztBQStETTtFQWhFTjtFQUNBOzs7QUErRE07RUFoRU47RUFDQTs7O0FBK0RNO0VBaEVOO0VBQ0E7OztBQStETTtFQWhFTjtFQUNBOzs7QUErRE07RUFoRU47RUFDQTs7O0FBK0RNO0VBaEVOO0VBQ0E7OztBQStETTtFQWhFTjtFQUNBOzs7QUErRE07RUFoRU47RUFDQTs7O0FBK0RNO0VBaEVOO0VBQ0E7OztBQStETTtFQWhFTjtFQUNBOzs7QUF1RVE7RUF4RFY7OztBQXdEVTtFQXhEVjs7O0FBd0RVO0VBeERWOzs7QUF3RFU7RUF4RFY7OztBQXdEVTtFQXhEVjs7O0FBd0RVO0VBeERWOzs7QUF3RFU7RUF4RFY7OztBQXdEVTtFQXhEVjs7O0FBd0RVO0VBeERWOzs7QUF3RFU7RUF4RFY7OztBQXdEVTtFQXhEVjs7O0FBbUVNO0FBQUE7RUFFRTs7O0FBR0Y7QUFBQTtFQUVFOzs7QUFQRjtBQUFBO0VBRUU7OztBQUdGO0FBQUE7RUFFRTs7O0FBUEY7QUFBQTtFQUVFOzs7QUFHRjtBQUFBO0VBRUU7OztBQVBGO0FBQUE7RUFFRTs7O0FBR0Y7QUFBQTtFQUVFOzs7QUFQRjtBQUFBO0VBRUU7OztBQUdGO0FBQUE7RUFFRTs7O0FBUEY7QUFBQTtFQUVFOzs7QUFHRjtBQUFBO0VBRUU7OztBRjFETjtFRVVFO0lBQ0U7O0VBR0Y7SUFwQ0o7SUFDQTs7RUFjQTtJQUNFO0lBQ0E7O0VBRkY7SUFDRTtJQUNBOztFQUZGO0lBQ0U7SUFDQTs7RUFGRjtJQUNFO0lBQ0E7O0VBRkY7SUFDRTtJQUNBOztFQUZGO0lBQ0U7SUFDQTs7RUErQkU7SUFoREo7SUFDQTs7RUFxRFE7SUFoRU47SUFDQTs7RUErRE07SUFoRU47SUFDQTs7RUErRE07SUFoRU47SUFDQTs7RUErRE07SUFoRU47SUFDQTs7RUErRE07SUFoRU47SUFDQTs7RUErRE07SUFoRU47SUFDQTs7RUErRE07SUFoRU47SUFDQTs7RUErRE07SUFoRU47SUFDQTs7RUErRE07SUFoRU47SUFDQTs7RUErRE07SUFoRU47SUFDQTs7RUErRE07SUFoRU47SUFDQTs7RUErRE07SUFoRU47SUFDQTs7RUF1RVE7SUF4RFY7O0VBd0RVO0lBeERWOztFQXdEVTtJQXhEVjs7RUF3RFU7SUF4RFY7O0VBd0RVO0lBeERWOztFQXdEVTtJQXhEVjs7RUF3RFU7SUF4RFY7O0VBd0RVO0lBeERWOztFQXdEVTtJQXhEVjs7RUF3RFU7SUF4RFY7O0VBd0RVO0lBeERWOztFQXdEVTtJQXhEVjs7RUFtRU07QUFBQTtJQUVFOztFQUdGO0FBQUE7SUFFRTs7RUFQRjtBQUFBO0lBRUU7O0VBR0Y7QUFBQTtJQUVFOztFQVBGO0FBQUE7SUFFRTs7RUFHRjtBQUFBO0lBRUU7O0VBUEY7QUFBQTtJQUVFOztFQUdGO0FBQUE7SUFFRTs7RUFQRjtBQUFBO0lBRUU7O0VBR0Y7QUFBQTtJQUVFOztFQVBGO0FBQUE7SUFFRTs7RUFHRjtBQUFBO0lBRUU7OztBRjFETjtFRVVFO0lBQ0U7O0VBR0Y7SUFwQ0o7SUFDQTs7RUFjQTtJQUNFO0lBQ0E7O0VBRkY7SUFDRTtJQUNBOztFQUZGO0lBQ0U7SUFDQTs7RUFGRjtJQUNFO0lBQ0E7O0VBRkY7SUFDRTtJQUNBOztFQUZGO0lBQ0U7SUFDQTs7RUErQkU7SUFoREo7SUFDQTs7RUFxRFE7SUFoRU47SUFDQTs7RUErRE07SUFoRU47SUFDQTs7RUErRE07SUFoRU47SUFDQTs7RUErRE07SUFoRU47SUFDQTs7RUErRE07SUFoRU47SUFDQTs7RUErRE07SUFoRU47SUFDQTs7RUErRE07SUFoRU47SUFDQTs7RUErRE07SUFoRU47SUFDQTs7RUErRE07SUFoRU47SUFDQTs7RUErRE07SUFoRU47SUFDQTs7RUErRE07SUFoRU47SUFDQTs7RUErRE07SUFoRU47SUFDQTs7RUF1RVE7SUF4RFY7O0VBd0RVO0lBeERWOztFQXdEVTtJQXhEVjs7RUF3RFU7SUF4RFY7O0VBd0RVO0lBeERWOztFQXdEVTtJQXhEVjs7RUF3RFU7SUF4RFY7O0VBd0RVO0lBeERWOztFQXdEVTtJQXhEVjs7RUF3RFU7SUF4RFY7O0VBd0RVO0lBeERWOztFQXdEVTtJQXhEVjs7RUFtRU07QUFBQTtJQUVFOztFQUdGO0FBQUE7SUFFRTs7RUFQRjtBQUFBO0lBRUU7O0VBR0Y7QUFBQTtJQUVFOztFQVBGO0FBQUE7SUFFRTs7RUFHRjtBQUFBO0lBRUU7O0VBUEY7QUFBQTtJQUVFOztFQUdGO0FBQUE7SUFFRTs7RUFQRjtBQUFBO0lBRUU7O0VBR0Y7QUFBQTtJQUVFOztFQVBGO0FBQUE7SUFFRTs7RUFHRjtBQUFBO0lBRUU7OztBRjFETjtFRVVFO0lBQ0U7O0VBR0Y7SUFwQ0o7SUFDQTs7RUFjQTtJQUNFO0lBQ0E7O0VBRkY7SUFDRTtJQUNBOztFQUZGO0lBQ0U7SUFDQTs7RUFGRjtJQUNFO0lBQ0E7O0VBRkY7SUFDRTtJQUNBOztFQUZGO0lBQ0U7SUFDQTs7RUErQkU7SUFoREo7SUFDQTs7RUFxRFE7SUFoRU47SUFDQTs7RUErRE07SUFoRU47SUFDQTs7RUErRE07SUFoRU47SUFDQTs7RUErRE07SUFoRU47SUFDQTs7RUErRE07SUFoRU47SUFDQTs7RUErRE07SUFoRU47SUFDQTs7RUErRE07SUFoRU47SUFDQTs7RUErRE07SUFoRU47SUFDQTs7RUErRE07SUFoRU47SUFDQTs7RUErRE07SUFoRU47SUFDQTs7RUErRE07SUFoRU47SUFDQTs7RUErRE07SUFoRU47SUFDQTs7RUF1RVE7SUF4RFY7O0VBd0RVO0lBeERWOztFQXdEVTtJQXhEVjs7RUF3RFU7SUF4RFY7O0VBd0RVO0lBeERWOztFQXdEVTtJQXhEVjs7RUF3RFU7SUF4RFY7O0VBd0RVO0lBeERWOztFQXdEVTtJQXhEVjs7RUF3RFU7SUF4RFY7O0VBd0RVO0lBeERWOztFQXdEVTtJQXhEVjs7RUFtRU07QUFBQTtJQUVFOztFQUdGO0FBQUE7SUFFRTs7RUFQRjtBQUFBO0lBRUU7O0VBR0Y7QUFBQTtJQUVFOztFQVBGO0FBQUE7SUFFRTs7RUFHRjtBQUFBO0lBRUU7O0VBUEY7QUFBQTtJQUVFOztFQUdGO0FBQUE7SUFFRTs7RUFQRjtBQUFBO0lBRUU7O0VBR0Y7QUFBQTtJQUVFOztFQVBGO0FBQUE7SUFFRTs7RUFHRjtBQUFBO0lBRUU7OztBRjFETjtFRVVFO0lBQ0U7O0VBR0Y7SUFwQ0o7SUFDQTs7RUFjQTtJQUNFO0lBQ0E7O0VBRkY7SUFDRTtJQUNBOztFQUZGO0lBQ0U7SUFDQTs7RUFGRjtJQUNFO0lBQ0E7O0VBRkY7SUFDRTtJQUNBOztFQUZGO0lBQ0U7SUFDQTs7RUErQkU7SUFoREo7SUFDQTs7RUFxRFE7SUFoRU47SUFDQTs7RUErRE07SUFoRU47SUFDQTs7RUErRE07SUFoRU47SUFDQTs7RUErRE07SUFoRU47SUFDQTs7RUErRE07SUFoRU47SUFDQTs7RUErRE07SUFoRU47SUFDQTs7RUErRE07SUFoRU47SUFDQTs7RUErRE07SUFoRU47SUFDQTs7RUErRE07SUFoRU47SUFDQTs7RUErRE07SUFoRU47SUFDQTs7RUErRE07SUFoRU47SUFDQTs7RUErRE07SUFoRU47SUFDQTs7RUF1RVE7SUF4RFY7O0VBd0RVO0lBeERWOztFQXdEVTtJQXhEVjs7RUF3RFU7SUF4RFY7O0VBd0RVO0lBeERWOztFQXdEVTtJQXhEVjs7RUF3RFU7SUF4RFY7O0VBd0RVO0lBeERWOztFQXdEVTtJQXhEVjs7RUF3RFU7SUF4RFY7O0VBd0RVO0lBeERWOztFQXdEVTtJQXhEVjs7RUFtRU07QUFBQTtJQUVFOztFQUdGO0FBQUE7SUFFRTs7RUFQRjtBQUFBO0lBRUU7O0VBR0Y7QUFBQTtJQUVFOztFQVBGO0FBQUE7SUFFRTs7RUFHRjtBQUFBO0lBRUU7O0VBUEY7QUFBQTtJQUVFOztFQUdGO0FBQUE7SUFFRTs7RUFQRjtBQUFBO0lBRUU7O0VBR0Y7QUFBQTtJQUVFOztFQVBGO0FBQUE7SUFFRTs7RUFHRjtBQUFBO0lBRUU7OztBRjFETjtFRVVFO0lBQ0U7O0VBR0Y7SUFwQ0o7SUFDQTs7RUFjQTtJQUNFO0lBQ0E7O0VBRkY7SUFDRTtJQUNBOztFQUZGO0lBQ0U7SUFDQTs7RUFGRjtJQUNFO0lBQ0E7O0VBRkY7SUFDRTtJQUNBOztFQUZGO0lBQ0U7SUFDQTs7RUErQkU7SUFoREo7SUFDQTs7RUFxRFE7SUFoRU47SUFDQTs7RUErRE07SUFoRU47SUFDQTs7RUErRE07SUFoRU47SUFDQTs7RUErRE07SUFoRU47SUFDQTs7RUErRE07SUFoRU47SUFDQTs7RUErRE07SUFoRU47SUFDQTs7RUErRE07SUFoRU47SUFDQTs7RUErRE07SUFoRU47SUFDQTs7RUErRE07SUFoRU47SUFDQTs7RUErRE07SUFoRU47SUFDQTs7RUErRE07SUFoRU47SUFDQTs7RUErRE07SUFoRU47SUFDQTs7RUF1RVE7SUF4RFY7O0VBd0RVO0lBeERWOztFQXdEVTtJQXhEVjs7RUF3RFU7SUF4RFY7O0VBd0RVO0lBeERWOztFQXdEVTtJQXhEVjs7RUF3RFU7SUF4RFY7O0VBd0RVO0lBeERWOztFQXdEVTtJQXhEVjs7RUF3RFU7SUF4RFY7O0VBd0RVO0lBeERWOztFQXdEVTtJQXhEVjs7RUFtRU07QUFBQTtJQUVFOztFQUdGO0FBQUE7SUFFRTs7RUFQRjtBQUFBO0lBRUU7O0VBR0Y7QUFBQTtJQUVFOztFQVBGO0FBQUE7SUFFRTs7RUFHRjtBQUFBO0lBRUU7O0VBUEY7QUFBQTtJQUVFOztFQUdGO0FBQUE7SUFFRTs7RUFQRjtBQUFBO0lBRUU7O0VBR0Y7QUFBQTtJQUVFOztFQVBGO0FBQUE7SUFFRTs7RUFHRjtBQUFBO0lBRUU7OztBQ3JIVjtFQUNFO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFFQTtFQUNBLGVadVdPO0VZdFdQLE9YUVM7RVdQVCxnQlprcUI0QjtFWWpxQjVCOztBQU9BO0VBQ0U7RUFDQTtFQUNBLHFCWnllMEI7RVl4ZTFCOztBQUdGO0VBQ0U7O0FBR0Y7RUFDRTs7QUFJRjtFQUNFOzs7QUFTSjtFQUNFOzs7QUFVQTtFQUNFOzs7QUFlRjtFQUNFOztBQUdBO0VBQ0U7OztBQU9KO0VBQ0U7O0FBR0Y7RUFDRTs7O0FBU0Y7RUFDRTtFQUNBOzs7QUFRSjtFQUNFO0VBQ0E7OztBQVFBO0VBQ0U7RUFDQTs7O0FDNUhGO0VBTUU7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFFQSxPQWJRO0VBY1I7OztBQWZGO0VBTUU7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFFQSxPQWJRO0VBY1I7OztBQWZGO0VBTUU7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFFQSxPQWJRO0VBY1I7OztBQWZGO0VBTUU7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFFQSxPQWJRO0VBY1I7OztBQWZGO0VBTUU7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFFQSxPQWJRO0VBY1I7OztBQWZGO0VBTUU7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFFQSxPQWJRO0VBY1I7OztBQWZGO0VBTUU7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFFQSxPQWJRO0VBY1I7OztBQWZGO0VBTUU7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFFQSxPQWJRO0VBY1I7OztBRG9JQTtFQUNFO0VBQ0E7OztBSDNFRjtFR3lFQTtJQUNFO0lBQ0E7OztBSDNFRjtFR3lFQTtJQUNFO0lBQ0E7OztBSDNFRjtFR3lFQTtJQUNFO0lBQ0E7OztBSDNFRjtFR3lFQTtJQUNFO0lBQ0E7OztBSDNFRjtFR3lFQTtJQUNFO0lBQ0E7OztBRW5KTjtFQUNFLGVkd3pCc0M7OztBYy95QnhDO0VBQ0U7RUFDQTtFQUNBO0Vmb1JJLFdBTEk7RWUzUVIsYWRna0I0Qjs7O0FjNWpCOUI7RUFDRTtFQUNBO0VmMFFJLFdBTEk7OztBZWpRVjtFQUNFO0VBQ0E7RWZvUUksV0FMSTs7O0FnQjVSVjtFQUNFLFlmZ3pCc0M7RURoaEJsQyxXQUxJO0VnQnZSUixPZFlTOzs7QWVqQlg7RUFDRTtFQUNBO0VBQ0E7RWpCOFJJLFdBTEk7RWlCdFJSLGFoQnFrQjRCO0VnQnBrQjVCLGFoQjBrQjRCO0VnQnprQjVCLE9mWVM7RWVYVCxrQmZFTTtFZUROO0VBQ0E7RUFDQTtFZEdFO0VlSEUsWURNSjs7QUNGSTtFRGhCTjtJQ2lCUTs7O0FER047RUFDRTs7QUFFQTtFQUNFOztBQUtKO0VBQ0UsT2ZWTztFZVdQLGtCZnBCSTtFZXFCSixjaEI4ekJvQztFZ0I3ekJwQztFQUtFLFloQnVzQjBCOztBZ0Joc0I5QjtFQUVFOztBQUlGO0VBQ0UsT2ZuQ087RWVxQ1A7O0FBUUY7RUFFRSxrQmZuRE87RWVzRFA7O0FBSUY7RUFDRTtFQUNBO0VBQ0EsbUJoQjBwQjBCO0VnQnpwQjFCLE9mdkRPO0VpQnBCVCxrQmpCYVM7RWVnRVA7RUFDQTtFQUNBO0VBQ0E7RUFDQSx5QmhCZ2IwQjtFZ0IvYTFCO0VDdEVFLFlEdUVGOztBQ25FRTtFRHVESjtJQ3RETTs7O0FEcUVOO0VBQ0Usa0JoQis1QjhCOztBZ0I1NUJoQztFQUNFO0VBQ0E7RUFDQSxtQmhCdW9CMEI7RWdCdG9CMUIsT2YxRU87RWlCcEJULGtCakJhUztFZW1GUDtFQUNBO0VBQ0E7RUFDQTtFQUNBLHlCaEI2WjBCO0VnQjVaMUI7RUN6RkUsWUQwRkY7O0FDdEZFO0VEMEVKO0lDekVNOzs7QUR3Rk47RUFDRSxrQmhCNDRCOEI7OztBZ0JuNEJsQztFQUNFO0VBQ0E7RUFDQTtFQUNBO0VBQ0EsYWhCeWQ0QjtFZ0J4ZDVCLE9mckdTO0Vlc0dUO0VBQ0E7RUFDQTs7QUFFQTtFQUVFO0VBQ0E7OztBQVdKO0VBQ0UsWWhCZ3VCc0M7RWdCL3RCdEM7RWpCbUpJLFdBTEk7RUc3UU47O0FjbUlGO0VBQ0U7RUFDQTtFQUNBLG1CaEIybEIwQjs7QWdCeGxCNUI7RUFDRTtFQUNBO0VBQ0EsbUJoQnFsQjBCOzs7QWdCamxCOUI7RUFDRSxZaEI4c0JzQztFZ0I3c0J0QztFakJnSUksV0FMSTtFRzdRTjs7QWNzSkY7RUFDRTtFQUNBO0VBQ0EsbUJoQjRrQjBCOztBZ0J6a0I1QjtFQUNFO0VBQ0E7RUFDQSxtQmhCc2tCMEI7OztBZ0I5akI1QjtFQUNFLFloQnFyQm9DOztBZ0JsckJ0QztFQUNFLFloQmtyQm9DOztBZ0IvcUJ0QztFQUNFLFloQitxQm9DOzs7QWdCMXFCeEM7RUFDRSxPaEI2cUJzQztFZ0I1cUJ0QztFQUNBLFNoQjRoQjRCOztBZ0IxaEI1QjtFQUNFOztBQUdGO0VBQ0U7RWQvTEE7O0FjbU1GO0VBQ0U7RWRwTUE7OztBaUJkSjtFQUNFO0VBQ0E7RUFDQTtFQUVBO0VwQjJSSSxXQUxJO0VvQm5SUixhbkJra0I0QjtFbUJqa0I1QixhbkJ1a0I0QjtFbUJ0a0I1QixPbEJTUztFa0JSVCxrQmxCRE07RWtCRU47RUFDQTtFQUNBLHFCbkJnN0JrQztFbUIvNkJsQyxpQm5CZzdCa0M7RW1CLzZCbEM7RWpCRkU7RWVIRSxZRVFKO0VBQ0E7O0FGTEk7RUVmTjtJRmdCUTs7O0FFTU47RUFDRSxjbkJzMEJvQztFbUJyMEJwQztFQUtFLFluQmk3QjRCOztBbUI3NkJoQztFQUVFLGVuQmdzQjBCO0VtQi9yQjFCOztBQUdGO0VBRUUsa0JsQjdCTzs7QWtCa0NUO0VBQ0U7RUFDQTs7O0FBSUo7RUFDRSxhbkJ5ckI0QjtFbUJ4ckI1QixnQm5Cd3JCNEI7RW1CdnJCNUIsY25Cd3JCNEI7RUQvY3hCLFdBTEk7RUc3UU47OztBaUI4Q0o7RUFDRSxhbkJxckI0QjtFbUJwckI1QixnQm5Cb3JCNEI7RW1CbnJCNUIsY25Cb3JCNEI7RURuZHhCLFdBTEk7RUc3UU47OztBa0JmSjtFQUNFO0VBQ0EsWXBCcTNCd0M7RW9CcDNCeEMsY3BCcTNCd0M7RW9CcDNCeEMsZXBCcTNCd0M7O0FvQm4zQnhDO0VBQ0U7RUFDQTs7O0FBSUo7RUFDRSxPcEJ5MkJ3QztFb0J4MkJ4QyxRcEJ3MkJ3QztFb0J2MkJ4QztFQUNBO0VBQ0Esa0JuQk5NO0VtQk9OO0VBQ0E7RUFDQTtFQUNBLFFwQjQyQndDO0VvQjMyQnhDO0VBQ0E7O0FBR0E7RWxCWEU7O0FrQmVGO0VBRUUsZXBCbTJCc0M7O0FvQmgyQnhDO0VBQ0UsUXBCMDFCc0M7O0FvQnYxQnhDO0VBQ0UsY3BCc3pCb0M7RW9CcnpCcEM7RUFDQSxZcEJtc0I0Qjs7QW9CaHNCOUI7RUFDRSxrQm5CaERNO0VtQmlETixjbkJqRE07O0FtQm1ETjtFQUlJOztBQUlKO0VBSUk7O0FBS047RUFDRSxrQm5CckVNO0VtQnNFTixjbkJ0RU07RW1CMkVKOztBQUlKO0VBQ0U7RUFDQTtFQUNBLFNwQmswQnVDOztBb0IzekJ2QztFQUNFLFNwQjB6QnFDOzs7QW9CNXlCM0M7RUFDRSxjcEJxekJnQzs7QW9CbnpCaEM7RUFDRSxPcEJpekI4QjtFb0JoekI5QjtFQUNBO0VBQ0E7RWxCOUZBO0VlSEUsWUdtR0Y7O0FIL0ZFO0VHeUZKO0lIeEZNOzs7QUdnR0o7RUFDRTs7QUFHRjtFQUNFLHFCcEJnekI0QjtFb0IzeUIxQjs7O0FBTVI7RUFDRTtFQUNBLGNwQm14QmdDOzs7QW9CaHhCbEM7RUFDRTtFQUNBO0VBQ0E7O0FBSUU7RUFDRTtFQUNBO0VBQ0EsU3BCcW9Cd0I7OztBcUJueEI5QjtFQUNFO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7O0FBRUE7RUFDRTs7QUFJQTtFQUEwQixZckI4OUJhOztBcUI3OUJ2QztFQUEwQixZckI2OUJhOztBcUIxOUJ6QztFQUNFOztBQUdGO0VBQ0UsT3JCKzhCdUM7RXFCOThCdkMsUXJCODhCdUM7RXFCNzhCdkM7RUh6QkYsa0JqQkZRO0VvQjZCTixRckI4OEJ1QztFRTE5QnZDO0VlSEUsWUlrQkY7RUFDQTs7QUpmRTtFSU1KO0lKTE07OztBSWdCSjtFSGpDRixrQmxCOCtCeUM7O0FxQng4QnpDO0VBQ0UsT3JCdzdCOEI7RXFCdjdCOUIsUXJCdzdCOEI7RXFCdjdCOUI7RUFDQSxRckJ1N0I4QjtFcUJ0N0I5QixrQnBCN0JPO0VvQjhCUDtFbkI3QkE7O0FtQmtDRjtFQUNFLE9yQm83QnVDO0VxQm43QnZDLFFyQm03QnVDO0VrQnQrQnpDLGtCakJGUTtFb0J1RE4sUXJCbzdCdUM7RUUxOUJ2QztFZUhFLFlJNENGO0VBQ0E7O0FKekNFO0VJaUNKO0lKaENNOzs7QUkwQ0o7RUgzREYsa0JsQjgrQnlDOztBcUI5NkJ6QztFQUNFLE9yQjg1QjhCO0VxQjc1QjlCLFFyQjg1QjhCO0VxQjc1QjlCO0VBQ0EsUXJCNjVCOEI7RXFCNTVCOUIsa0JwQnZETztFb0J3RFA7RW5CdkRBOztBbUI0REY7RUFDRTs7QUFFQTtFQUNFLGtCcEIvREs7O0FvQmtFUDtFQUNFLGtCcEJuRUs7OztBcUJwQlg7RUFDRTs7QUFFQTtBQUFBO0VBRUUsUXRCeS9COEI7RXNCeC9COUIsYXRCeS9COEI7O0FzQnQvQmhDO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFTERFLFlLRUY7O0FMRUU7RUtYSjtJTFlNOzs7QUtDTjtFQUNFOztBQUVBO0VBQ0U7O0FBR0Y7RUFFRSxhdEJtK0I0QjtFc0JsK0I1QixnQnRCbStCNEI7O0FzQmgrQjlCO0VBQ0UsYXRCODlCNEI7RXNCNzlCNUIsZ0J0Qjg5QjRCOztBc0IxOUJoQztFQUNFLGF0Qnc5QjhCO0VzQnY5QjlCLGdCdEJ3OUI4Qjs7QXNCbDlCOUI7QUFBQTtBQUFBO0VBQ0UsU3RCazlCNEI7RXNCajlCNUIsV3RCazlCNEI7O0FzQjc4QjlCO0VBQ0UsU3RCMjhCNEI7RXNCMThCNUIsV3RCMjhCNEI7OztBdUJqZ0NsQztFQUNFO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7O0FBRUE7QUFBQTtFQUVFO0VBQ0E7RUFDQTtFQUNBOztBQUlGO0FBQUE7RUFFRTs7QUFNRjtFQUNFO0VBQ0E7O0FBRUE7RUFDRTs7O0FBV047RUFDRTtFQUNBO0VBQ0E7RXhCc1BJLFdBTEk7RXdCL09SLGF2QjhoQjRCO0V1QjdoQjVCLGF2Qm1pQjRCO0V1QmxpQjVCLE90QjNCUztFc0I0QlQ7RUFDQTtFQUNBLGtCdEJyQ1M7RXNCc0NUO0VyQnBDRTs7O0FxQjhDSjtBQUFBO0FBQUE7QUFBQTtFQUlFO0V4QmdPSSxXQUxJO0VHN1FOOzs7QXFCdURKO0FBQUE7QUFBQTtBQUFBO0VBSUU7RXhCdU5JLFdBTEk7RUc3UU47OztBcUJnRUo7QUFBQTtFQUVFOzs7QUFhRTtBQUFBO0VyQi9EQTtFQUNBOztBcUJxRUE7QUFBQTtFckJ0RUE7RUFDQTs7QXFCZ0ZGO0VBQ0U7RXJCcEVBO0VBQ0E7OztBc0J6QkY7RUFDRTtFQUNBO0VBQ0EsWXhCeXhCb0M7RURoaEJsQyxXQUxJO0V5QmpRTixPeEIwL0JxQjs7O0F3QnYvQnZCO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RXpCNFBFLFdBTEk7RXlCcFBOLE9BdkJjO0VBd0JkLGtCQXZCaUI7RXRCSGpCOzs7QXNCK0JBO0FBQUE7QUFBQTtBQUFBO0VBRUU7OztBQTlDRjtFQW9ERSxjeEIrOUJtQjtFd0I1OUJqQixleEIreUJnQztFd0I5eUJoQztFQUNBO0VBQ0E7RUFDQTs7QUFHRjtFQUNFLGN4Qm85QmlCO0V3Qm45QmpCLFlBL0NhOzs7QUFqQmpCO0VBeUVJLGV4QjZ4QmdDO0V3QjV4QmhDOzs7QUExRUo7RUFpRkUsY3hCazhCbUI7O0F3Qi83QmpCO0VBRUUsZXhCNDJCOEI7RXdCMzJCOUI7RUFDQTtFQUNBOztBQUlKO0VBQ0UsY3hCcTdCaUI7RXdCcDdCakIsWUE5RWE7OztBQWpCakI7RUFzR0UsY3hCNjZCbUI7O0F3QjM2Qm5CO0VBQ0Usa0J4QjA2QmlCOztBd0J2NkJuQjtFQUNFLFlBNUZhOztBQStGZjtFQUNFLE94Qms2QmlCOzs7QXdCNzVCckI7RUFDRTs7O0FBdkhGO0FBQUE7QUFBQTtFQStISTs7QUFJRjtBQUFBO0FBQUE7RUFDRTs7O0FBakhOO0VBQ0U7RUFDQTtFQUNBLFl4Qnl4Qm9DO0VEaGhCbEMsV0FMSTtFeUJqUU4sT3hCMC9CcUI7OztBd0J2L0J2QjtFQUNFO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0V6QjRQRSxXQUxJO0V5QnBQTixPQXZCYztFQXdCZCxrQkF2QmlCO0V0QkhqQjs7O0FzQitCQTtBQUFBO0FBQUE7QUFBQTtFQUVFOzs7QUE5Q0Y7RUFvREUsY3hCKzlCbUI7RXdCNTlCakIsZXhCK3lCZ0M7RXdCOXlCaEM7RUFDQTtFQUNBO0VBQ0E7O0FBR0Y7RUFDRSxjeEJvOUJpQjtFd0JuOUJqQixZQS9DYTs7O0FBakJqQjtFQXlFSSxleEI2eEJnQztFd0I1eEJoQzs7O0FBMUVKO0VBaUZFLGN4Qms4Qm1COztBd0IvN0JqQjtFQUVFLGV4QjQyQjhCO0V3QjMyQjlCO0VBQ0E7RUFDQTs7QUFJSjtFQUNFLGN4QnE3QmlCO0V3QnA3QmpCLFlBOUVhOzs7QUFqQmpCO0VBc0dFLGN4QjY2Qm1COztBd0IzNkJuQjtFQUNFLGtCeEIwNkJpQjs7QXdCdjZCbkI7RUFDRSxZQTVGYTs7QUErRmY7RUFDRSxPeEJrNkJpQjs7O0F3Qjc1QnJCO0VBQ0U7OztBQXZIRjtBQUFBO0FBQUE7RUFpSUk7O0FBRUY7QUFBQTtBQUFBO0VBQ0U7OztBQ3RJUjtFQUNFO0VBRUEsYXpCd2tCNEI7RXlCdmtCNUIsYXpCNmtCNEI7RXlCNWtCNUIsT3hCZVM7RXdCZFQ7RUFDQTtFQUVBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUM4R0E7RTNCc0tJLFdBTEk7RUc3UU47RWVIRSxZUUdKOztBUkNJO0VRaEJOO0lSaUJROzs7QVFBTjtFQUNFLE94QkVPOztBd0JFVDtFQUVFO0VBQ0EsWXpCb3RCNEI7O0F5QnRzQjlCO0VBR0U7RUFDQSxTekIwdUIwQjs7O0F5Qjl0QjVCO0VDdkNBLE9BWFE7RVJMUixrQmxCNEVhO0UwQjFEYixjMUIwRGE7O0EwQnZEYjtFQUNFLE9BZFk7RVJSZCxrQlFNbUI7RUFrQmpCLGNBakJhOztBQW9CZjtFQUVFLE9BckJZO0VSUmQsa0JRTW1CO0VBeUJqQixjQXhCYTtFQTZCWDs7QUFJSjtFQUtFLE9BbENhO0VBbUNiLGtCQXJDa0I7RUF3Q2xCLGNBdkNjOztBQXlDZDtFQUtJOztBQUtOO0VBRUUsT0FqRGU7RUFrRGYsa0IxQllXO0UwQlRYLGMxQlNXOzs7QXlCckJiO0VDdkNBLE9BWFE7RVJMUixrQmxCNEVhO0UwQjFEYixjMUIwRGE7O0EwQnZEYjtFQUNFLE9BZFk7RVJSZCxrQlFNbUI7RUFrQmpCLGNBakJhOztBQW9CZjtFQUVFLE9BckJZO0VSUmQsa0JRTW1CO0VBeUJqQixjQXhCYTtFQTZCWDs7QUFJSjtFQUtFLE9BbENhO0VBbUNiLGtCQXJDa0I7RUF3Q2xCLGNBdkNjOztBQXlDZDtFQUtJOztBQUtOO0VBRUUsT0FqRGU7RUFrRGYsa0IxQllXO0UwQlRYLGMxQlNXOzs7QXlCckJiO0VDdkNBLE9BWFE7RVJMUixrQmxCNEVhO0UwQjFEYixjMUIwRGE7O0EwQnZEYjtFQUNFLE9BZFk7RVJSZCxrQlFNbUI7RUFrQmpCLGNBakJhOztBQW9CZjtFQUVFLE9BckJZO0VSUmQsa0JRTW1CO0VBeUJqQixjQXhCYTtFQTZCWDs7QUFJSjtFQUtFLE9BbENhO0VBbUNiLGtCQXJDa0I7RUF3Q2xCLGNBdkNjOztBQXlDZDtFQUtJOztBQUtOO0VBRUUsT0FqRGU7RUFrRGYsa0IxQllXO0UwQlRYLGMxQlNXOzs7QXlCckJiO0VDdkNBLE9BWFE7RVJMUixrQmxCNEVhO0UwQjFEYixjMUIwRGE7O0EwQnZEYjtFQUNFLE9BZFk7RVJSZCxrQlFNbUI7RUFrQmpCLGNBakJhOztBQW9CZjtFQUVFLE9BckJZO0VSUmQsa0JRTW1CO0VBeUJqQixjQXhCYTtFQTZCWDs7QUFJSjtFQUtFLE9BbENhO0VBbUNiLGtCQXJDa0I7RUF3Q2xCLGNBdkNjOztBQXlDZDtFQUtJOztBQUtOO0VBRUUsT0FqRGU7RUFrRGYsa0IxQllXO0UwQlRYLGMxQlNXOzs7QXlCckJiO0VDdkNBLE9BWFE7RVJMUixrQmxCNEVhO0UwQjFEYixjMUIwRGE7O0EwQnZEYjtFQUNFLE9BZFk7RVJSZCxrQlFNbUI7RUFrQmpCLGNBakJhOztBQW9CZjtFQUVFLE9BckJZO0VSUmQsa0JRTW1CO0VBeUJqQixjQXhCYTtFQTZCWDs7QUFJSjtFQUtFLE9BbENhO0VBbUNiLGtCQXJDa0I7RUF3Q2xCLGNBdkNjOztBQXlDZDtFQUtJOztBQUtOO0VBRUUsT0FqRGU7RUFrRGYsa0IxQllXO0UwQlRYLGMxQlNXOzs7QXlCckJiO0VDdkNBLE9BWFE7RVJMUixrQmxCNEVhO0UwQjFEYixjMUIwRGE7O0EwQnZEYjtFQUNFLE9BZFk7RVJSZCxrQlFNbUI7RUFrQmpCLGNBakJhOztBQW9CZjtFQUVFLE9BckJZO0VSUmQsa0JRTW1CO0VBeUJqQixjQXhCYTtFQTZCWDs7QUFJSjtFQUtFLE9BbENhO0VBbUNiLGtCQXJDa0I7RUF3Q2xCLGNBdkNjOztBQXlDZDtFQUtJOztBQUtOO0VBRUUsT0FqRGU7RUFrRGYsa0IxQllXO0UwQlRYLGMxQlNXOzs7QXlCckJiO0VDdkNBLE9BWFE7RVJMUixrQmxCNEVhO0UwQjFEYixjMUIwRGE7O0EwQnZEYjtFQUNFLE9BZFk7RVJSZCxrQlFNbUI7RUFrQmpCLGNBakJhOztBQW9CZjtFQUVFLE9BckJZO0VSUmQsa0JRTW1CO0VBeUJqQixjQXhCYTtFQTZCWDs7QUFJSjtFQUtFLE9BbENhO0VBbUNiLGtCQXJDa0I7RUF3Q2xCLGNBdkNjOztBQXlDZDtFQUtJOztBQUtOO0VBRUUsT0FqRGU7RUFrRGYsa0IxQllXO0UwQlRYLGMxQlNXOzs7QXlCckJiO0VDdkNBLE9BWFE7RVJMUixrQmxCNEVhO0UwQjFEYixjMUIwRGE7O0EwQnZEYjtFQUNFLE9BZFk7RVJSZCxrQlFNbUI7RUFrQmpCLGNBakJhOztBQW9CZjtFQUVFLE9BckJZO0VSUmQsa0JRTW1CO0VBeUJqQixjQXhCYTtFQTZCWDs7QUFJSjtFQUtFLE9BbENhO0VBbUNiLGtCQXJDa0I7RUF3Q2xCLGNBdkNjOztBQXlDZDtFQUtJOztBQUtOO0VBRUUsT0FqRGU7RUFrRGYsa0IxQllXO0UwQlRYLGMxQlNXOzs7QXlCZmI7RUNtQkEsTzFCSmE7RTBCS2IsYzFCTGE7O0EwQk9iO0VBQ0UsT0FUWTtFQVVaLGtCMUJUVztFMEJVWCxjMUJWVzs7QTBCYWI7RUFFRTs7QUFHRjtFQUtFLE9BckJhO0VBc0JiLGtCMUJ4Qlc7RTBCeUJYLGMxQnpCVzs7QTBCMkJYO0VBS0k7O0FBS047RUFFRSxPMUJ2Q1c7RTBCd0NYOzs7QUR2REY7RUNtQkEsTzFCSmE7RTBCS2IsYzFCTGE7O0EwQk9iO0VBQ0UsT0FUWTtFQVVaLGtCMUJUVztFMEJVWCxjMUJWVzs7QTBCYWI7RUFFRTs7QUFHRjtFQUtFLE9BckJhO0VBc0JiLGtCMUJ4Qlc7RTBCeUJYLGMxQnpCVzs7QTBCMkJYO0VBS0k7O0FBS047RUFFRSxPMUJ2Q1c7RTBCd0NYOzs7QUR2REY7RUNtQkEsTzFCSmE7RTBCS2IsYzFCTGE7O0EwQk9iO0VBQ0UsT0FUWTtFQVVaLGtCMUJUVztFMEJVWCxjMUJWVzs7QTBCYWI7RUFFRTs7QUFHRjtFQUtFLE9BckJhO0VBc0JiLGtCMUJ4Qlc7RTBCeUJYLGMxQnpCVzs7QTBCMkJYO0VBS0k7O0FBS047RUFFRSxPMUJ2Q1c7RTBCd0NYOzs7QUR2REY7RUNtQkEsTzFCSmE7RTBCS2IsYzFCTGE7O0EwQk9iO0VBQ0UsT0FUWTtFQVVaLGtCMUJUVztFMEJVWCxjMUJWVzs7QTBCYWI7RUFFRTs7QUFHRjtFQUtFLE9BckJhO0VBc0JiLGtCMUJ4Qlc7RTBCeUJYLGMxQnpCVzs7QTBCMkJYO0VBS0k7O0FBS047RUFFRSxPMUJ2Q1c7RTBCd0NYOzs7QUR2REY7RUNtQkEsTzFCSmE7RTBCS2IsYzFCTGE7O0EwQk9iO0VBQ0UsT0FUWTtFQVVaLGtCMUJUVztFMEJVWCxjMUJWVzs7QTBCYWI7RUFFRTs7QUFHRjtFQUtFLE9BckJhO0VBc0JiLGtCMUJ4Qlc7RTBCeUJYLGMxQnpCVzs7QTBCMkJYO0VBS0k7O0FBS047RUFFRSxPMUJ2Q1c7RTBCd0NYOzs7QUR2REY7RUNtQkEsTzFCSmE7RTBCS2IsYzFCTGE7O0EwQk9iO0VBQ0UsT0FUWTtFQVVaLGtCMUJUVztFMEJVWCxjMUJWVzs7QTBCYWI7RUFFRTs7QUFHRjtFQUtFLE9BckJhO0VBc0JiLGtCMUJ4Qlc7RTBCeUJYLGMxQnpCVzs7QTBCMkJYO0VBS0k7O0FBS047RUFFRSxPMUJ2Q1c7RTBCd0NYOzs7QUR2REY7RUNtQkEsTzFCSmE7RTBCS2IsYzFCTGE7O0EwQk9iO0VBQ0UsT0FUWTtFQVVaLGtCMUJUVztFMEJVWCxjMUJWVzs7QTBCYWI7RUFFRTs7QUFHRjtFQUtFLE9BckJhO0VBc0JiLGtCMUJ4Qlc7RTBCeUJYLGMxQnpCVzs7QTBCMkJYO0VBS0k7O0FBS047RUFFRSxPMUJ2Q1c7RTBCd0NYOzs7QUR2REY7RUNtQkEsTzFCSmE7RTBCS2IsYzFCTGE7O0EwQk9iO0VBQ0UsT0FUWTtFQVVaLGtCMUJUVztFMEJVWCxjMUJWVzs7QTBCYWI7RUFFRTs7QUFHRjtFQUtFLE9BckJhO0VBc0JiLGtCMUJ4Qlc7RTBCeUJYLGMxQnpCVzs7QTBCMkJYO0VBS0k7O0FBS047RUFFRSxPMUJ2Q1c7RTBCd0NYOzs7QUQzQ0o7RUFDRSxhekJpZ0I0QjtFeUJoZ0I1QixPeEI3RVE7RXdCOEVSLGlCekI2V3dDOztBeUIzV3hDO0VBQ0UsT3pCNFdzQzs7QXlCcFd4QztFQUVFLE94QnhFTzs7O0F3Qm1GWDtFQ3VCRTtFM0JzS0ksV0FMSTtFRzdRTjs7O0F1QnlGSjtFQ21CRTtFM0JzS0ksV0FMSTtFRzdRTjs7O0F5Qm5CSjtFVmdCTSxZVWZKOztBVm1CSTtFVXBCTjtJVnFCUTs7O0FVbEJOO0VBQ0U7OztBQU1GO0VBQ0U7OztBQUlKO0VBQ0U7RUFDQTtFVkRJLFlVRUo7O0FWRUk7RVVMTjtJVk1ROzs7QVVETjtFQUNFO0VBQ0E7RVZORSxZVU9GOztBVkhFO0VVQUo7SVZDTTs7OztBV3BCUjtBQUFBO0FBQUE7QUFBQTtFQUlFOzs7QUFHRjtFQUNFOztBQ3FCRTtFQUNFO0VBQ0EsYTdCcWdCd0I7RTZCcGdCeEIsZ0I3Qm1nQndCO0U2QmxnQnhCO0VBaENKO0VBQ0E7RUFDQTtFQUNBOztBQXFERTtFQUNFOzs7QUQzQ047RUFDRTtFQUNBLFM1QnloQ2tDO0U0QnhoQ2xDO0VBQ0EsVzVCK21Da0M7RTRCOW1DbEM7RUFDQTtFN0IrUUksV0FMSTtFNkJ4UVI7RUFDQTtFQUNBO0VBQ0Esa0IzQlpNO0UyQmFOO0VBQ0E7RTFCVkU7O0EwQmNGO0VBQ0U7RUFDQTtFQUNBLFk1QmttQ2dDOzs7QTRCdGxDaEM7RUFDRTs7QUFFQTtFQUNFO0VBQ0E7OztBQUlKO0VBQ0U7O0FBRUE7RUFDRTtFQUNBOzs7QW5CQ0o7RW1CZkE7SUFDRTs7RUFFQTtJQUNFO0lBQ0E7O0VBSUo7SUFDRTs7RUFFQTtJQUNFO0lBQ0E7OztBbkJDSjtFbUJmQTtJQUNFOztFQUVBO0lBQ0U7SUFDQTs7RUFJSjtJQUNFOztFQUVBO0lBQ0U7SUFDQTs7O0FuQkNKO0VtQmZBO0lBQ0U7O0VBRUE7SUFDRTtJQUNBOztFQUlKO0lBQ0U7O0VBRUE7SUFDRTtJQUNBOzs7QW5CQ0o7RW1CZkE7SUFDRTs7RUFFQTtJQUNFO0lBQ0E7O0VBSUo7SUFDRTs7RUFFQTtJQUNFO0lBQ0E7OztBbkJDSjtFbUJmQTtJQUNFOztFQUVBO0lBQ0U7SUFDQTs7RUFJSjtJQUNFOztFQUVBO0lBQ0U7SUFDQTs7O0FBVU47RUFDRTtFQUNBO0VBQ0E7RUFDQSxlNUIwakNnQzs7QTZCeG1DaEM7RUFDRTtFQUNBLGE3QnFnQndCO0U2QnBnQnhCLGdCN0JtZ0J3QjtFNkJsZ0J4QjtFQXpCSjtFQUNBO0VBQ0E7RUFDQTs7QUE4Q0U7RUFDRTs7O0FEMEJKO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7RUFDQSxhNUI0aUNnQzs7QTZCeG1DaEM7RUFDRTtFQUNBLGE3QnFnQndCO0U2QnBnQnhCLGdCN0JtZ0J3QjtFNkJsZ0J4QjtFQWxCSjtFQUNBO0VBQ0E7RUFDQTs7QUF1Q0U7RUFDRTs7QURvQ0Y7RUFDRTs7O0FBTUo7RUFDRTtFQUNBO0VBQ0E7RUFDQTtFQUNBLGM1QjJoQ2dDOztBNkJ4bUNoQztFQUNFO0VBQ0EsYTdCcWdCd0I7RTZCcGdCeEIsZ0I3Qm1nQndCO0U2QmxnQnhCOztBQVdBO0VBQ0U7O0FBR0Y7RUFDRTtFQUNBLGM3Qmtmc0I7RTZCamZ0QixnQjdCZ2ZzQjtFNkIvZXRCO0VBOUJOO0VBQ0E7RUFDQTs7QUFpQ0U7RUFDRTs7QURxREY7RUFDRTs7O0FBT047RUFDRTtFQUNBO0VBQ0E7RUFDQTs7O0FBTUY7RUFDRTtFQUNBO0VBQ0E7RUFDQTtFQUNBLGE1QndjNEI7RTRCdmM1QixPM0JoSFM7RTJCaUhUO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7O0FBY0E7RUFFRSxPNUJzL0JnQztFa0Ivb0NsQyxrQmpCYVM7O0EyQmlKVDtFQUVFLE8zQnJKSTtFMkJzSko7RVZqS0Ysa0JqQkZROztBMkJ1S1I7RUFFRSxPM0J2Sk87RTJCd0pQO0VBQ0E7OztBQU1KO0VBQ0U7OztBQUlGO0VBQ0U7RUFDQSxTNUJxK0JrQztFNEJwK0JsQztFN0IwR0ksV0FMSTtFNkJuR1IsTzNCeEtTO0UyQnlLVDs7O0FBSUY7RUFDRTtFQUNBO0VBQ0EsTzNCN0tTOzs7QTJCaUxYO0VBQ0UsTzNCeExTO0UyQnlMVCxrQjNCcExTO0UyQnFMVCxjNUI4N0JrQzs7QTRCMzdCbEM7RUFDRSxPM0I5TE87O0EyQmdNUDtFQUVFLE8zQnJNRTtFaUJYTixrQmxCc3FDa0M7O0E0Qmw5QmhDO0VBRUUsTzNCM01FO0VpQlhOLGtCakJGUTs7QTJCNE5OO0VBRUUsTzNCNU1LOztBMkJnTlQ7RUFDRSxjNUJxNkJnQzs7QTRCbDZCbEM7RUFDRSxPM0J2Tk87O0EyQjBOVDtFQUNFLE8zQnpOTzs7O0E2Qm5CWDtBQUFBO0VBRUU7RUFDQTtFQUNBOztBQUVBO0FBQUE7RUFDRTtFQUNBOztBQUtGO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtFQU1FOzs7QUFLSjtFQUNFO0VBQ0E7RUFDQTs7QUFFQTtFQUNFOzs7QUFNRjtBQUFBO0VBRUU7O0FBSUY7QUFBQTtFNUJSRTtFQUNBOztBNEJnQkY7QUFBQTtBQUFBO0U1QkhFO0VBQ0E7OztBNEJxQko7RUFDRTtFQUNBOztBQUVBO0VBR0U7O0FBR0Y7RUFDRTs7O0FBSUo7RUFDRTtFQUNBOzs7QUFHRjtFQUNFO0VBQ0E7OztBQW9CRjtFQUNFO0VBQ0E7RUFDQTs7QUFFQTtBQUFBO0VBRUU7O0FBR0Y7QUFBQTtFQUVFOztBQUlGO0FBQUE7RTVCdkZFO0VBQ0E7O0E0QjJGRjtBQUFBO0U1QjFHRTtFQUNBOzs7QTZCeEJKO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7RUFDQTs7O0FBR0Y7RUFDRTtFQUNBO0VBR0EsTzlCaEJRO0U4QmlCUjtFZEhJLFljSUo7O0FkQUk7RWNQTjtJZFFROzs7QWNDTjtFQUVFLE8vQnVhc0M7O0ErQmxheEM7RUFDRSxPOUJUTztFOEJVUDtFQUNBOzs7QUFRSjtFQUNFOztBQUVBO0VBQ0U7RUFDQTtFQUNBO0U3QmxCQTtFQUNBOztBNkJvQkE7RUFFRSxjL0JtaEM4QjtFK0JqaEM5Qjs7QUFHRjtFQUNFLE85QnBDSztFOEJxQ0w7RUFDQTs7QUFJSjtBQUFBO0VBRUUsTzlCM0NPO0U4QjRDUCxrQjlCbkRJO0U4Qm9ESixjL0JzZ0NnQzs7QStCbmdDbEM7RUFFRTtFN0I1Q0E7RUFDQTs7O0E2QnVERjtFQUNFO0VBQ0E7RTdCbkVBOztBNkJ1RUY7QUFBQTtFQUVFLE85QjdFSTtFaUJYTixrQmpCRlE7OztBOEJxR1I7QUFBQTtFQUVFO0VBQ0E7OztBQUtGO0FBQUE7RUFFRTtFQUNBO0VBQ0E7OztBQU1GO0FBQUE7RUFDRTs7O0FBVUY7RUFDRTs7QUFFRjtFQUNFOzs7QUN4SEo7RUFDRTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0EsYWhDOGpDa0M7RWdDNWpDbEMsZ0JoQzRqQ2tDOztBZ0NyakNsQztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtFQUNFO0VBQ0E7RUFDQTtFQUNBOztBQW9CSjtFQUNFLGFoQ3FpQ2tDO0VnQ3BpQ2xDLGdCaENvaUNrQztFZ0NuaUNsQyxjaENvaUNrQztFRHp6QjlCLFdBTEk7RWlDcE9SO0VBQ0E7O0FBYUY7RUFDRTtFQUNBO0VBQ0E7RUFDQTtFQUNBOztBQUVBO0VBQ0U7RUFDQTs7QUFHRjtFQUNFOzs7QUFTSjtFQUNFLGFoQ3k5QmtDO0VnQ3g5QmxDLGdCaEN3OUJrQzs7O0FnQzU4QnBDO0VBQ0U7RUFDQTtFQUdBOzs7QUFJRjtFQUNFO0VqQzZLSSxXQUxJO0VpQ3RLUjtFQUNBO0VBQ0E7RTlCekdFO0VlSEUsWWU4R0o7O0FmMUdJO0VlbUdOO0lmbEdROzs7QWUyR047RUFDRTs7QUFHRjtFQUNFO0VBQ0E7RUFDQTs7O0FBTUo7RUFDRTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTs7O0FBR0Y7RUFDRTtFQUNBOzs7QXZCMUZFO0V1QnNHQTtJQUVJO0lBQ0E7O0VBRUE7SUFDRTs7RUFFQTtJQUNFOztFQUdGO0lBQ0UsZWhDcTZCd0I7SWdDcDZCeEIsY2hDbzZCd0I7O0VnQ2g2QjVCO0lBQ0U7O0VBR0Y7SUFDRTtJQUNBOztFQUdGO0lBQ0U7O0VBR0Y7SUFDRTs7RUFHRjtJQUNFO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SWZoTUosWWVpTUk7SUFDQTs7RUFFRjtBQUFBO0lBRUU7SUFDQTtJQUNBOztFQUdGO0lBQ0U7SUFDQTtJQUNBO0lBQ0E7OztBdkJoS047RXVCc0dBO0lBRUk7SUFDQTs7RUFFQTtJQUNFOztFQUVBO0lBQ0U7O0VBR0Y7SUFDRSxlaENxNkJ3QjtJZ0NwNkJ4QixjaENvNkJ3Qjs7RWdDaDZCNUI7SUFDRTs7RUFHRjtJQUNFO0lBQ0E7O0VBR0Y7SUFDRTs7RUFHRjtJQUNFOztFQUdGO0lBQ0U7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJZmhNSixZZWlNSTtJQUNBOztFQUVGO0FBQUE7SUFFRTtJQUNBO0lBQ0E7O0VBR0Y7SUFDRTtJQUNBO0lBQ0E7SUFDQTs7O0F2QmhLTjtFdUJzR0E7SUFFSTtJQUNBOztFQUVBO0lBQ0U7O0VBRUE7SUFDRTs7RUFHRjtJQUNFLGVoQ3E2QndCO0lnQ3A2QnhCLGNoQ282QndCOztFZ0NoNkI1QjtJQUNFOztFQUdGO0lBQ0U7SUFDQTs7RUFHRjtJQUNFOztFQUdGO0lBQ0U7O0VBR0Y7SUFDRTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lmaE1KLFllaU1JO0lBQ0E7O0VBRUY7QUFBQTtJQUVFO0lBQ0E7SUFDQTs7RUFHRjtJQUNFO0lBQ0E7SUFDQTtJQUNBOzs7QXZCaEtOO0V1QnNHQTtJQUVJO0lBQ0E7O0VBRUE7SUFDRTs7RUFFQTtJQUNFOztFQUdGO0lBQ0UsZWhDcTZCd0I7SWdDcDZCeEIsY2hDbzZCd0I7O0VnQ2g2QjVCO0lBQ0U7O0VBR0Y7SUFDRTtJQUNBOztFQUdGO0lBQ0U7O0VBR0Y7SUFDRTs7RUFHRjtJQUNFO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SWZoTUosWWVpTUk7SUFDQTs7RUFFRjtBQUFBO0lBRUU7SUFDQTtJQUNBOztFQUdGO0lBQ0U7SUFDQTtJQUNBO0lBQ0E7OztBdkJoS047RXVCc0dBO0lBRUk7SUFDQTs7RUFFQTtJQUNFOztFQUVBO0lBQ0U7O0VBR0Y7SUFDRSxlaENxNkJ3QjtJZ0NwNkJ4QixjaENvNkJ3Qjs7RWdDaDZCNUI7SUFDRTs7RUFHRjtJQUNFO0lBQ0E7O0VBR0Y7SUFDRTs7RUFHRjtJQUNFOztFQUdGO0lBQ0U7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJZmhNSixZZWlNSTtJQUNBOztFQUVGO0FBQUE7SUFFRTtJQUNBO0lBQ0E7O0VBR0Y7SUFDRTtJQUNBO0lBQ0E7SUFDQTs7O0FBMUROO0VBRUk7RUFDQTs7QUFFQTtFQUNFOztBQUVBO0VBQ0U7O0FBR0Y7RUFDRSxlaENxNkJ3QjtFZ0NwNkJ4QixjaENvNkJ3Qjs7QWdDaDZCNUI7RUFDRTs7QUFHRjtFQUNFO0VBQ0E7O0FBR0Y7RUFDRTs7QUFHRjtFQUNFOztBQUdGO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFZmhNSixZZWlNSTtFQUNBOztBQUVGO0FBQUE7RUFFRTtFQUNBO0VBQ0E7O0FBR0Y7RUFDRTtFQUNBO0VBQ0E7RUFDQTs7O0FBY1I7RUFDRSxPL0JnTndCOztBK0I5TXhCO0VBRUUsTy9CNE1zQjs7QStCdk14QjtFQUNFLE8vQm9NZTs7QStCbE1mO0VBRUUsTy9CaU1tQjs7QStCOUxyQjtFQUNFLE8vQitMc0I7O0ErQjNMMUI7QUFBQTtFQUVFLE8vQndMc0I7O0ErQnBMMUI7RUFDRSxPL0JpTGlCO0UrQmhMakIsYy9CcUxnQzs7QStCbExsQztFQUNFOztBQUdGO0VBQ0UsTy9Cd0tpQjs7QStCdEtqQjtBQUFBO0FBQUE7RUFHRSxPL0JxS3NCOzs7QStCOUoxQjtFQUNFLE8vQmxSSTs7QStCb1JKO0VBRUUsTy9CdFJFOztBK0IyUko7RUFDRSxPL0IwSWM7O0ErQnhJZDtFQUVFLE8vQnVJa0I7O0ErQnBJcEI7RUFDRSxPL0JxSXFCOztBK0JqSXpCO0FBQUE7RUFFRSxPL0IxU0U7O0ErQjhTTjtFQUNFLE8vQnVIZ0I7RStCdEhoQixjL0IySCtCOztBK0J4SGpDO0VBQ0U7O0FBR0Y7RUFDRSxPL0I4R2dCOztBK0I3R2hCO0FBQUE7QUFBQTtFQUdFLE8vQjVURTs7O0FnQ1hSO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7RUFFQTtFQUNBLGtCaENJTTtFZ0NITjtFQUNBO0UvQk1FOztBK0JGRjtFQUNFO0VBQ0E7O0FBR0Y7RUFDRTtFQUNBOztBQUVBO0VBQ0U7RS9CQ0Y7RUFDQTs7QStCRUE7RUFDRTtFL0JVRjtFQUNBOztBK0JKRjtBQUFBO0VBRUU7OztBQUlKO0VBR0U7RUFDQTs7O0FBSUY7RUFDRSxlakNpckNrQzs7O0FpQzlxQ3BDO0VBQ0U7RUFDQTs7O0FBR0Y7RUFDRTs7O0FBUUE7RUFDRSxhakM4U0s7OztBaUN0U1Q7RUFDRTtFQUNBO0VBRUEsa0JqQzJwQ2tDO0VpQzFwQ2xDOztBQUVBO0UvQnBFRTs7O0ErQnlFSjtFQUNFO0VBRUEsa0JqQ2dwQ2tDO0VpQy9vQ2xDOztBQUVBO0UvQi9FRTs7O0ErQnlGSjtFQUNFO0VBQ0E7RUFDQTtFQUNBOzs7QUFVRjtFQUNFO0VBQ0E7OztBQUlGO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBLFNqQ2dQTztFRW5XTDs7O0ErQnVISjtBQUFBO0FBQUE7RUFHRTs7O0FBR0Y7QUFBQTtFL0JwSEk7RUFDQTs7O0ErQndISjtBQUFBO0UvQjNHSTtFQUNBOzs7QStCdUhGO0VBQ0UsZWpDa2xDZ0M7O0FTdHJDaEM7RXdCZ0dKO0lBUUk7SUFDQTs7RUFHQTtJQUVFO0lBQ0E7O0VBRUE7SUFDRTtJQUNBOztFQUtBO0kvQnBKSjtJQUNBOztFK0JzSk07QUFBQTtJQUdFOztFQUVGO0FBQUE7SUFHRTs7RUFJSjtJL0JySko7SUFDQTs7RStCdUpNO0FBQUE7SUFHRTs7RUFFRjtBQUFBO0lBR0U7Ozs7QUM3TVo7RUFDRTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VuQzRSSSxXQUxJO0VtQ3JSUixPakNhUztFaUNaVDtFQUNBLGtCakNFTTtFaUNETjtFaENLRTtFZ0NIRjtFakJBSSxZaUJDSjs7QWpCR0k7RWlCaEJOO0lqQmlCUTs7O0FpQkZOO0VBQ0UsT2xDeXZDc0M7RWtDeHZDdEMsa0JsQ3V2Q3NDO0VrQ3R2Q3RDOztBQUVBO0VBQ0U7RUFDQSxXbEM0dkNvQzs7QWtDdnZDeEM7RUFDRTtFQUNBLE9sQ2l2Q3NDO0VrQ2h2Q3RDLFFsQ2d2Q3NDO0VrQy91Q3RDO0VBQ0E7RUFDQTtFQUNBO0VBQ0EsaUJsQzJ1Q3NDO0VpQmx3Q3BDLFlpQndCRjs7QWpCcEJFO0VpQldKO0lqQlZNOzs7QWlCc0JOO0VBQ0U7O0FBR0Y7RUFDRTtFQUNBLGNsQ2l6Qm9DO0VrQ2h6QnBDO0VBQ0EsWWxDOHJCNEI7OztBa0MxckJoQztFQUNFOzs7QUFHRjtFQUNFLGtCakM3Q007RWlDOENOOztBQUVBO0VoQ25DRTtFQUNBOztBZ0NxQ0E7RWhDdENBO0VBQ0E7O0FnQzBDRjtFQUNFOztBQUlGO0VoQ2xDRTtFQUNBOztBZ0NxQ0U7RWhDdENGO0VBQ0E7O0FnQzBDQTtFaEMzQ0E7RUFDQTs7O0FnQ2dESjtFQUNFOzs7QUFTQTtFQUNFOztBQUdGO0VBQ0U7RUFDQTtFaEN4RkE7O0FnQzJGQTtFQUFnQjs7QUFDaEI7RUFBZTs7QUFFZjtFaEM5RkE7OztBaUNuQko7RUFDRTtFQUNBO0VBQ0E7RUFDQSxlbkN3L0NrQztFbUN0L0NsQzs7O0FBT0E7RUFDRSxjbkM2K0NnQzs7QW1DMytDaEM7RUFDRTtFQUNBLGVuQ3krQzhCO0VtQ3grQzlCLE9sQ0VLO0VrQ0RMOztBQUlKO0VBQ0UsT2xDSk87OztBbUNyQlg7RUFDRTtFaENHQTtFQUNBOzs7QWdDQUY7RUFDRTtFQUNBO0VBQ0EsT25DTlE7RW1DT1I7RUFDQSxrQm5DS007RW1DSk47RW5CS0ksWW1CSko7O0FuQlFJO0VtQmZOO0luQmdCUTs7O0FtQlBOO0VBQ0U7RUFDQSxPcEMrYXNDO0VvQzdhdEMsa0JuQ0RPO0VtQ0VQLGNuQ0RPOztBbUNJVDtFQUNFO0VBQ0EsT3BDdWFzQztFb0N0YXRDLGtCbkNSTztFbUNTUCxTcEM0cUNnQztFb0MzcUNoQyxZcENzdEI0Qjs7O0FvQ2p0QjlCO0VBQ0UsYXBDK3BDZ0M7O0FvQzVwQ2xDO0VBQ0U7RUFDQSxPbkN2Qkk7RWlCWE4sa0JqQkZRO0VtQ3NDTixjbkN0Q007O0FtQ3lDUjtFQUNFLE9uQ3ZCTztFbUN3QlA7RUFDQSxrQm5DL0JJO0VtQ2dDSixjbkM3Qk87OztBb0NkVDtFQUNFOzs7QUFPSTtFbkNxQ0o7RUFDQTs7QW1DaENJO0VuQ2lCSjtFQUNBOzs7QW1DaENGO0VBQ0U7RXRDZ1NFLFdBTEk7O0FzQ3BSRjtFbkNxQ0o7RUFDQTs7QW1DaENJO0VuQ2lCSjtFQUNBOzs7QW1DaENGO0VBQ0U7RXRDZ1NFLFdBTEk7O0FzQ3BSRjtFbkNxQ0o7RUFDQTs7QW1DaENJO0VuQ2lCSjtFQUNBOzs7QW9DL0JKO0VBQ0U7RUFDQTtFdkM4UkksV0FMSTtFdUN2UlIsYXRDdWtCNEI7RXNDdGtCNUI7RUFDQSxPckNJTTtFcUNITjtFQUNBO0VBQ0E7RXBDS0U7O0FvQ0FGO0VBQ0U7OztBQUtKO0VBQ0U7RUFDQTs7O0FDdkJGO0VBQ0U7RUFDQTtFQUNBLGV2Q2s2QzhCO0V1Q2o2QzlCO0VyQ1dFOzs7QXFDTko7RUFFRTs7O0FBSUY7RUFDRSxhdkM0akI0Qjs7O0F1Q3BqQjlCO0VBQ0UsZXZDbTVDOEI7O0F1Q2g1QzlCO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7RUFDQTs7O0FBZUY7RUNsREEsT0Q4Q2M7RXJCNUNkLGtCcUIwQ21CO0VDMUNuQixjRDJDZTs7QUN6Q2Y7RUFDRTs7O0FENkNGO0VDbERBLE9EOENjO0VyQjVDZCxrQnFCMENtQjtFQzFDbkIsY0QyQ2U7O0FDekNmO0VBQ0U7OztBRDZDRjtFQ2xEQSxPRDhDYztFckI1Q2Qsa0JxQjBDbUI7RUMxQ25CLGNEMkNlOztBQ3pDZjtFQUNFOzs7QUQ2Q0Y7RUNsREEsT0Q4Q2M7RXJCNUNkLGtCcUIwQ21CO0VDMUNuQixjRDJDZTs7QUN6Q2Y7RUFDRTs7O0FENkNGO0VDbERBLE9EZ0RnQjtFckI5Q2hCLGtCcUIwQ21CO0VDMUNuQixjRDJDZTs7QUN6Q2Y7RUFDRTs7O0FENkNGO0VDbERBLE9EOENjO0VyQjVDZCxrQnFCMENtQjtFQzFDbkIsY0QyQ2U7O0FDekNmO0VBQ0U7OztBRDZDRjtFQ2xEQSxPRGdEZ0I7RXJCOUNoQixrQnFCMENtQjtFQzFDbkIsY0QyQ2U7O0FDekNmO0VBQ0U7OztBRDZDRjtFQ2xEQSxPRDhDYztFckI1Q2Qsa0JxQjBDbUI7RUMxQ25CLGNEMkNlOztBQ3pDZjtFQUNFOzs7QUNIRjtFQUNFO0lBQUssdUJ6Q2s3QzJCOzs7QXlDNzZDcEM7RUFDRTtFQUNBLFF6QzI2Q2tDO0V5QzE2Q2xDO0UxQ3dSSSxXQUxJO0UwQ2pSUixrQnhDRVM7RUNFUDs7O0F1Q0NKO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7RUFDQSxPeENWTTtFd0NXTjtFQUNBO0VBQ0Esa0J4QzFCUTtFZ0JjSixZd0JhSjs7QXhCVEk7RXdCQU47SXhCQ1E7Ozs7QXdCV1I7RXZCWUU7RXVCVkE7OztBQUlBO0VBQ0U7O0FBR0U7RUFKSjtJQUtNOzs7O0FDdkNSO0VBQ0U7RUFDQTtFQUdBO0VBQ0E7RXhDU0U7OztBd0NMSjtFQUNFO0VBQ0E7O0FBRUE7RUFFRTtFQUNBOzs7QUFVSjtFQUNFO0VBQ0EsT3pDWFM7RXlDWVQ7O0FBR0E7RUFFRTtFQUNBLE96Q2xCTztFeUNtQlA7RUFDQSxrQnpDMUJPOztBeUM2QlQ7RUFDRSxPekN0Qk87RXlDdUJQLGtCekM5Qk87OztBeUN1Q1g7RUFDRTtFQUNBO0VBQ0E7RUFDQSxPekNwQ1M7RXlDcUNUO0VBQ0Esa0J6Qy9DTTtFeUNnRE47O0FBRUE7RXhDckNFO0VBQ0E7O0F3Q3dDRjtFeEMzQkU7RUFDQTs7QXdDOEJGO0VBRUUsT3pDdERPO0V5Q3VEUDtFQUNBLGtCekM5REk7O0F5Q2tFTjtFQUNFO0VBQ0EsT3pDcEVJO0V5Q3FFSixrQnpDbEZNO0V5Q21GTixjekNuRk07O0F5Q3NGUjtFQUNFOztBQUVBO0VBQ0U7RUFDQSxrQjFDd2F3Qjs7O0EwQzFaMUI7RUFDRTs7QUFHRTtFeENyQ0o7RUFaQTs7QXdDc0RJO0V4Q3RESjtFQVlBOztBd0MrQ0k7RUFDRTs7QUFHRjtFQUNFLGtCMUN1WW9CO0UwQ3RZcEI7O0FBRUE7RUFDRTtFQUNBLG1CMUNrWWtCOzs7QVN0YzFCO0VpQzRDQTtJQUNFOztFQUdFO0l4Q3JDSjtJQVpBOztFd0NzREk7SXhDdERKO0lBWUE7O0V3QytDSTtJQUNFOztFQUdGO0lBQ0Usa0IxQ3VZb0I7STBDdFlwQjs7RUFFQTtJQUNFO0lBQ0EsbUIxQ2tZa0I7OztBU3RjMUI7RWlDNENBO0lBQ0U7O0VBR0U7SXhDckNKO0lBWkE7O0V3Q3NESTtJeEN0REo7SUFZQTs7RXdDK0NJO0lBQ0U7O0VBR0Y7SUFDRSxrQjFDdVlvQjtJMEN0WXBCOztFQUVBO0lBQ0U7SUFDQSxtQjFDa1lrQjs7O0FTdGMxQjtFaUM0Q0E7SUFDRTs7RUFHRTtJeENyQ0o7SUFaQTs7RXdDc0RJO0l4Q3RESjtJQVlBOztFd0MrQ0k7SUFDRTs7RUFHRjtJQUNFLGtCMUN1WW9CO0kwQ3RZcEI7O0VBRUE7SUFDRTtJQUNBLG1CMUNrWWtCOzs7QVN0YzFCO0VpQzRDQTtJQUNFOztFQUdFO0l4Q3JDSjtJQVpBOztFd0NzREk7SXhDdERKO0lBWUE7O0V3QytDSTtJQUNFOztFQUdGO0lBQ0Usa0IxQ3VZb0I7STBDdFlwQjs7RUFFQTtJQUNFO0lBQ0EsbUIxQ2tZa0I7OztBU3RjMUI7RWlDNENBO0lBQ0U7O0VBR0U7SXhDckNKO0lBWkE7O0V3Q3NESTtJeEN0REo7SUFZQTs7RXdDK0NJO0lBQ0U7O0VBR0Y7SUFDRSxrQjFDdVlvQjtJMEN0WXBCOztFQUVBO0lBQ0U7SUFDQSxtQjFDa1lrQjs7O0EwQ3BYOUI7RXhDOUhJOztBd0NpSUY7RUFDRTs7QUFFQTtFQUNFOzs7QUNwSko7RUFDRSxPRGlLeUI7RUNoS3pCLGtCRCtKc0I7O0FDNUpwQjtFQUVFLE9EMkpxQjtFQzFKckI7O0FBR0Y7RUFDRSxPMUNEQTtFMENFQSxrQkRxSnFCO0VDcEpyQixjRG9KcUI7OztBQ2xLM0I7RUFDRSxPRGlLeUI7RUNoS3pCLGtCRCtKc0I7O0FDNUpwQjtFQUVFLE9EMkpxQjtFQzFKckI7O0FBR0Y7RUFDRSxPMUNEQTtFMENFQSxrQkRxSnFCO0VDcEpyQixjRG9KcUI7OztBQ2xLM0I7RUFDRSxPRGlLeUI7RUNoS3pCLGtCRCtKc0I7O0FDNUpwQjtFQUVFLE9EMkpxQjtFQzFKckI7O0FBR0Y7RUFDRSxPMUNEQTtFMENFQSxrQkRxSnFCO0VDcEpyQixjRG9KcUI7OztBQ2xLM0I7RUFDRSxPRGlLeUI7RUNoS3pCLGtCRCtKc0I7O0FDNUpwQjtFQUVFLE9EMkpxQjtFQzFKckI7O0FBR0Y7RUFDRSxPMUNEQTtFMENFQSxrQkRxSnFCO0VDcEpyQixjRG9KcUI7OztBQ2xLM0I7RUFDRSxPRG1LMkI7RUNsSzNCLGtCRCtKc0I7O0FDNUpwQjtFQUVFLE9ENkp1QjtFQzVKdkI7O0FBR0Y7RUFDRSxPMUNEQTtFMENFQSxrQkR1SnVCO0VDdEp2QixjRHNKdUI7OztBQ3BLN0I7RUFDRSxPRGlLeUI7RUNoS3pCLGtCRCtKc0I7O0FDNUpwQjtFQUVFLE9EMkpxQjtFQzFKckI7O0FBR0Y7RUFDRSxPMUNEQTtFMENFQSxrQkRxSnFCO0VDcEpyQixjRG9KcUI7OztBQ2xLM0I7RUFDRSxPRG1LMkI7RUNsSzNCLGtCRCtKc0I7O0FDNUpwQjtFQUVFLE9ENkp1QjtFQzVKdkI7O0FBR0Y7RUFDRSxPMUNEQTtFMENFQSxrQkR1SnVCO0VDdEp2QixjRHNKdUI7OztBQ3BLN0I7RUFDRSxPRGlLeUI7RUNoS3pCLGtCRCtKc0I7O0FDNUpwQjtFQUVFLE9EMkpxQjtFQzFKckI7O0FBR0Y7RUFDRSxPMUNEQTtFMENFQSxrQkRxSnFCO0VDcEpyQixjRG9KcUI7OztBRWpLN0I7RUFDRTtFQUNBLE81Q3FqRDJCO0U0Q3BqRDNCLFE1Q29qRDJCO0U0Q25qRDNCO0VBQ0EsTzNDZU07RTJDZE47RUFDQTtFMUNPRTtFMENMRixTNUNxakQyQjs7QTRDbGpEM0I7RUFDRSxPM0NPSTtFMkNOSjtFQUNBLFM1Q2dqRHlCOztBNEM3aUQzQjtFQUNFO0VBQ0EsWTVDd3RCNEI7RTRDdnRCNUIsUzVDMmlEeUI7O0E0Q3hpRDNCO0VBRUU7RUFDQTtFQUNBLFM1Q3FpRHlCOzs7QTRDamlEN0I7RUFDRSxRNUNpaUQyQjs7O0E2Q3ZrRDdCO0VBQ0UsTzdDdzFDa0M7RTZDdjFDbEM7RTlDbVNJLFdBTEk7RThDM1JSO0VBQ0Esa0I3Q3cxQ2tDO0U2Q3YxQ2xDO0VBQ0E7RUFDQSxZN0NnaEI0QjtFRXRnQjFCOztBMkNQRjtFQUNFOztBQUdGO0VBQ0U7OztBQUlKO0VBQ0U7RUFDQTtFQUNBOztBQUVBO0VBQ0UsZTdDa2VrQjs7O0E2QzlkdEI7RUFDRTtFQUNBO0VBQ0E7RUFDQSxPNUNkUztFNENlVCxrQjdDazBDa0M7RTZDajBDbEM7RUFDQTtFM0NWRTtFQUNBOztBMkNZRjtFQUNFO0VBQ0EsYTdDK3lDZ0M7OztBNkMzeUNwQztFQUNFLFM3QzB5Q2tDO0U2Q3p5Q2xDOzs7QUMxQ0Y7RUFDRTtFQUNBO0VBQ0E7RUFDQSxTOUNzaUNrQztFOENyaUNsQztFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBR0E7OztBQU9GO0VBQ0U7RUFDQTtFQUNBLFE5Q2kyQ2tDO0U4Qy8xQ2xDOztBQUdBO0U3QmxCSSxZNkJtQkY7RUFDQSxXOUN1M0NnQzs7QWlCdjRDOUI7RTZCY0o7STdCYk07OztBNkJpQk47RUFDRSxXOUNxM0NnQzs7QThDajNDbEM7RUFDRSxXOUNrM0NnQzs7O0E4QzkyQ3BDO0VBQ0U7O0FBRUE7RUFDRTtFQUNBOztBQUdGO0VBQ0U7OztBQUlKO0VBQ0U7RUFDQTtFQUNBOzs7QUFJRjtFQUNFO0VBQ0E7RUFDQTtFQUNBO0VBR0E7RUFDQSxrQjdDN0RNO0U2QzhETjtFQUNBO0U1QzNERTtFNEMrREY7OztBQUlGO0VDcEZFO0VBQ0E7RUFDQTtFQUNBLFMvQzJpQ2tDO0UrQzFpQ2xDO0VBQ0E7RUFDQSxrQjlDaUJNOztBOENkTjtFQUFTOztBQUNUO0VBQVMsUy9DaTRDeUI7OztBOENqekNwQztFQUNFO0VBQ0E7RUFDQTtFQUNBO0VBQ0EsUzlDbXpDa0M7RThDbHpDbEM7RTVDdEVFO0VBQ0E7O0E0Q3dFRjtFQUNFO0VBQ0E7OztBQUtKO0VBQ0U7RUFDQSxhOUN1ZTRCOzs7QThDbGU5QjtFQUNFO0VBR0E7RUFDQSxTOUM4UE87OztBOEMxUFQ7RUFDRTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFNUN6RkU7RUFDQTs7QTRDOEZGO0VBQ0U7OztBckMzRUE7RXFDa0ZGO0lBQ0UsVzlDcXdDZ0M7SThDcHdDaEM7O0VBR0Y7SUFDRTs7RUFHRjtJQUNFOztFQU9GO0lBQVksVzlDb3ZDc0I7OztBU3YxQ2hDO0VxQ3VHRjtBQUFBO0lBRUUsVzlDZ3ZDZ0M7OztBU3oxQ2hDO0VxQzhHRjtJQUFZLFc5QzR1Q3NCOzs7QThDbnVDaEM7RUFDRTtFQUNBO0VBQ0E7RUFDQTs7QUFFQTtFQUNFO0VBQ0E7RTVDM0tKOztBNEMrS0U7RTVDL0tGOztBNENtTEU7RUFDRTs7QUFHRjtFNUN2TEY7OztBT3lEQTtFcUMwR0E7SUFDRTtJQUNBO0lBQ0E7SUFDQTs7RUFFQTtJQUNFO0lBQ0E7STVDM0tKOztFNEMrS0U7STVDL0tGOztFNENtTEU7SUFDRTs7RUFHRjtJNUN2TEY7OztBT3lEQTtFcUMwR0E7SUFDRTtJQUNBO0lBQ0E7SUFDQTs7RUFFQTtJQUNFO0lBQ0E7STVDM0tKOztFNEMrS0U7STVDL0tGOztFNENtTEU7SUFDRTs7RUFHRjtJNUN2TEY7OztBT3lEQTtFcUMwR0E7SUFDRTtJQUNBO0lBQ0E7SUFDQTs7RUFFQTtJQUNFO0lBQ0E7STVDM0tKOztFNEMrS0U7STVDL0tGOztFNENtTEU7SUFDRTs7RUFHRjtJNUN2TEY7OztBT3lEQTtFcUMwR0E7SUFDRTtJQUNBO0lBQ0E7SUFDQTs7RUFFQTtJQUNFO0lBQ0E7STVDM0tKOztFNEMrS0U7STVDL0tGOztFNENtTEU7SUFDRTs7RUFHRjtJNUN2TEY7OztBT3lEQTtFcUMwR0E7SUFDRTtJQUNBO0lBQ0E7SUFDQTs7RUFFQTtJQUNFO0lBQ0E7STVDM0tKOztFNEMrS0U7STVDL0tGOztFNENtTEU7SUFDRTs7RUFHRjtJNUN2TEY7OztBOENsQko7RUFDRTtFQUNBLFNoRGdqQ2tDO0VnRC9pQ2xDO0VBQ0EsUWhEa3lDa0M7RWlEdHlDbEMsYWpEa2tCNEI7RWlEaGtCNUI7RUFDQSxhakQya0I0QjtFaUQxa0I1QixhakRnbEI0QjtFaUQva0I1QjtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFbERzUkksV0FMSTtFaURyUlI7RUFDQTs7QUFFQTtFQUFTLFNoRHN4Q3lCOztBZ0RweENsQztFQUNFO0VBQ0E7RUFDQSxPaERzeENnQztFZ0RyeENoQyxRaERzeENnQzs7QWdEcHhDaEM7RUFDRTtFQUNBO0VBQ0E7RUFDQTs7O0FBS047RUFDRTs7QUFFQTtFQUNFOztBQUVBO0VBQ0U7RUFDQTtFQUNBLGtCL0NmRTs7O0ErQ29CUjtFQUNFOztBQUVBO0VBQ0U7RUFDQSxPaER3dkNnQztFZ0R2dkNoQyxRaERzdkNnQzs7QWdEcHZDaEM7RUFDRTtFQUNBO0VBQ0Esb0IvQy9CRTs7O0ErQ29DUjtFQUNFOztBQUVBO0VBQ0U7O0FBRUE7RUFDRTtFQUNBO0VBQ0EscUIvQzdDRTs7O0ErQ2tEUjtFQUNFOztBQUVBO0VBQ0U7RUFDQSxPaEQwdENnQztFZ0R6dENoQyxRaER3dENnQzs7QWdEdHRDaEM7RUFDRTtFQUNBO0VBQ0EsbUIvQzdERTs7O0ErQ2tGUjtFQUNFLFdoRG9yQ2tDO0VnRG5yQ2xDO0VBQ0EsTy9DL0ZNO0UrQ2dHTjtFQUNBLGtCL0N2Rk07RUNOSjs7O0FnRG5CSjtFQUNFO0VBQ0E7RUFDQTtFQUNBLFNsRDhpQ2tDO0VrRDdpQ2xDO0VBQ0EsV2xEd3pDa0M7RWlEN3pDbEMsYWpEa2tCNEI7RWlEaGtCNUI7RUFDQSxhakQya0I0QjtFaUQxa0I1QixhakRnbEI0QjtFaUQva0I1QjtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFbERzUkksV0FMSTtFbURwUlI7RUFDQSxrQmpERU07RWlERE47RUFDQTtFaERJRTs7QWdEQUY7RUFDRTtFQUNBO0VBQ0EsT2xEd3pDZ0M7RWtEdnpDaEMsUWxEd3pDZ0M7O0FrRHR6Q2hDO0VBRUU7RUFDQTtFQUNBO0VBQ0E7RUFDQTs7O0FBTUo7RUFDRTs7QUFFQTtFQUNFO0VBQ0E7RUFDQSxrQmxEdXlDOEI7O0FrRHB5Q2hDO0VBQ0UsUWxEc2R3QjtFa0RyZHhCO0VBQ0Esa0JqRGxDRTs7O0FpRHdDTjtFQUNFO0VBQ0EsT2xEc3hDZ0M7RWtEcnhDaEMsUWxEb3hDZ0M7O0FrRGx4Q2hDO0VBQ0U7RUFDQTtFQUNBLG9CbERteEM4Qjs7QWtEaHhDaEM7RUFDRSxNbERrY3dCO0VrRGpjeEI7RUFDQSxvQmpEdERFOzs7QWlENEROO0VBQ0U7O0FBRUE7RUFDRTtFQUNBO0VBQ0EscUJsRGl3QzhCOztBa0Q5dkNoQztFQUNFLEtsRGdid0I7RWtEL2F4QjtFQUNBLHFCakR4RUU7O0FpRDZFTjtFQUNFO0VBQ0E7RUFDQTtFQUNBO0VBQ0EsT2xENnVDZ0M7RWtENXVDaEM7RUFDQTtFQUNBOzs7QUFLRjtFQUNFO0VBQ0EsT2xEb3VDZ0M7RWtEbnVDaEMsUWxEa3VDZ0M7O0FrRGh1Q2hDO0VBQ0U7RUFDQTtFQUNBLG1CbERpdUM4Qjs7QWtEOXRDaEM7RUFDRSxPbERnWndCO0VrRC9ZeEI7RUFDQSxtQmpEeEdFOzs7QWlENkhSO0VBQ0U7RUFDQTtFbkR1SkksV0FMSTtFbUQvSVIsa0JsRG9yQ2tDO0VrRG5yQ2xDO0VoRHRIRTtFQUNBOztBZ0R3SEY7RUFDRTs7O0FBSUo7RUFDRTtFQUNBLE9qRHBJUzs7O0FrRFhYO0VBQ0U7OztBQUdGO0VBQ0U7OztBQUdGO0VBQ0U7RUFDQTtFQUNBOztBQ3RCQTtFQUNFO0VBQ0E7RUFDQTs7O0FEdUJKO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VsQ2xCSSxZa0NtQko7O0FsQ2ZJO0VrQ1FOO0lsQ1BROzs7O0FrQ2lCUjtBQUFBO0FBQUE7RUFHRTs7O0FBR0Y7QUFDQTtBQUFBO0VBRUU7OztBQUdGO0FBQUE7RUFFRTs7O0FBR0Y7QUFRRTtFQUNFO0VBQ0E7RUFDQTs7QUFHRjtBQUFBO0FBQUE7RUFHRTtFQUNBOztBQUdGO0FBQUE7RUFFRTtFQUNBO0VsQy9ERSxZa0NnRUY7O0FsQzVERTtFa0N3REo7QUFBQTtJbEN2RE07Ozs7QWtDb0VSO0FBQUE7RUFFRTtFQUNBO0VBQ0E7RUFDQTtFQUVBO0VBQ0E7RUFDQTtFQUNBLE9uRHM2Q21DO0VtRHI2Q25DO0VBQ0EsT2xEdEZNO0VrRHVGTjtFQUNBO0VBQ0E7RUFDQSxTbkRpNkNtQztFaUIxL0MvQixZa0MwRko7O0FsQ3RGSTtFa0NxRU47QUFBQTtJbENwRVE7OztBa0N3Rk47QUFBQTtBQUFBO0VBRUUsT2xEaEdJO0VrRGlHSjtFQUNBO0VBQ0EsU25EeTVDaUM7OztBbUR0NUNyQztFQUNFOzs7QUFHRjtFQUNFOzs7QUFLRjtBQUFBO0VBRUU7RUFDQSxPbkQwNUNtQztFbUR6NUNuQyxRbkR5NUNtQztFbUR4NUNuQztFQUNBO0VBQ0E7OztBQUdGO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFRQTtFQUNFOzs7QUFFRjtFQUNFOzs7QUFRRjtFQUNFO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFFQSxjbkRrMkNtQztFbURqMkNuQztFQUNBLGFuRGcyQ21DO0VtRC8xQ25DOztBQUVBO0VBQ0U7RUFDQTtFQUNBLE9uRCsxQ2lDO0VtRDkxQ2pDLFFuRCsxQ2lDO0VtRDkxQ2pDO0VBQ0EsY25EKzFDaUM7RW1EOTFDakMsYW5EODFDaUM7RW1ENzFDakM7RUFDQTtFQUNBLGtCbER2S0k7RWtEd0tKO0VBQ0E7RUFFQTtFQUNBO0VBQ0EsU25EczFDaUM7RWlCbGdEL0IsWWtDNktGOztBbEN6S0U7RWtDd0pKO0lsQ3ZKTTs7O0FrQzJLTjtFQUNFLFNuRG0xQ2lDOzs7QW1EMTBDckM7RUFDRTtFQUNBO0VBQ0EsUW5ENjBDbUM7RW1ENTBDbkM7RUFDQSxhbkQwMENtQztFbUR6MENuQyxnQm5EeTBDbUM7RW1EeDBDbkMsT2xEbE1NO0VrRG1NTjs7O0FBTUE7QUFBQTtFQUVFLFFuRDQwQ2lDOztBbUR6MENuQztFQUNFLGtCbERyTUk7O0FrRHdNTjtFQUNFLE9sRHpNSTs7O0FvRHBCUjtFQUNFO0lBQUs7OztBQUlQO0VBQ0U7RUFDQSxPckRpaUR3QjtFcURoaUR4QixRckRnaUR3QjtFcUQvaER4QixnQnJEaWlEd0I7RXFEaGlEeEI7RUFDQTtFQUVBO0VBQ0E7OztBQUdGO0VBQ0UsT3JENGhEd0I7RXFEM2hEeEIsUXJEMmhEd0I7RXFEMWhEeEIsY3JENGhEd0I7OztBcURwaEQxQjtFQUNFO0lBQ0U7O0VBRUY7SUFDRTtJQUNBOzs7QUFLSjtFQUNFO0VBQ0EsT3JEKy9Dd0I7RXFEOS9DeEIsUXJEOC9Dd0I7RXFENy9DeEIsZ0JyRCsvQ3dCO0VxRDkvQ3hCO0VBRUE7RUFDQTtFQUNBOzs7QUFHRjtFQUNFLE9yRDAvQ3dCO0VxRHovQ3hCLFFyRHkvQ3dCOzs7QXFEci9DeEI7RUFDRTtBQUFBO0lBRUU7OztBQ2pFTjtFQUNFO0VBQ0E7RUFDQSxTdEQ0aUNrQztFc0QzaUNsQztFQUNBO0VBQ0E7RUFFQTtFQUNBLGtCckRNTTtFcURMTjtFQUNBO0VyQ0tJLFlxQ0hKOztBckNPSTtFcUNwQk47SXJDcUJROzs7O0FxQ0xSO0VQZEU7RUFDQTtFQUNBO0VBQ0EsUy9DeWlDa0M7RStDeGlDbEM7RUFDQTtFQUNBLGtCOUNpQk07O0E4Q2ROO0VBQVM7O0FBQ1Q7RUFBUyxTL0NpNEN5Qjs7O0FzRHozQ3BDO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7O0FBRUE7RUFDRTtFQUNBO0VBQ0E7RUFDQTs7O0FBSUo7RUFDRTtFQUNBLGF0RGlqQjRCOzs7QXNEOWlCOUI7RUFDRTtFQUNBO0VBQ0E7OztBQUdGO0VBQ0U7RUFDQTtFQUNBLE90RGdpRGtDO0VzRC9oRGxDO0VBQ0E7OztBQUdGO0VBQ0U7RUFDQTtFQUNBLE90RHdoRGtDO0VzRHZoRGxDO0VBQ0E7OztBQUdGO0VBQ0U7RUFDQTtFQUNBO0VBQ0EsUXREZ2hEa0M7RXNEL2dEbEM7RUFDQTtFQUNBOzs7QUFHRjtFQUNFO0VBQ0E7RUFDQSxRdER1Z0RrQztFc0R0Z0RsQztFQUNBO0VBQ0E7OztBQUdGO0VBQ0U7OztBQ2pGRjtFQUNFO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQSxTdkR3dENrQzs7QXVEdHRDbEM7RUFDRTtFQUNBOzs7QUFLSjtFQUNFOzs7QUFHRjtFQUNFOzs7QUFHRjtFQUNFOzs7QUFLQTtFQUNFOzs7QUFJSjtFQUNFO0lBQ0UsU3ZEMnJDZ0M7OztBdUR2ckNwQztFQUNFO0VBQ0E7RUFDQTs7O0FBR0Y7RUFDRTtJQUNFOzs7QUg5Q0Y7RUFDRTtFQUNBO0VBQ0E7OztBSUpGO0VBQ0UsT3hEOEVXOztBd0QzRVQ7RUFFRTs7O0FBTk47RUFDRSxPeEQ4RVc7O0F3RDNFVDtFQUVFOzs7QUFOTjtFQUNFLE94RDhFVzs7QXdEM0VUO0VBRUU7OztBQU5OO0VBQ0UsT3hEOEVXOztBd0QzRVQ7RUFFRTs7O0FBTk47RUFDRSxPeEQ4RVc7O0F3RDNFVDtFQUVFOzs7QUFOTjtFQUNFLE94RDhFVzs7QXdEM0VUO0VBRUU7OztBQU5OO0VBQ0UsT3hEOEVXOztBd0QzRVQ7RUFFRTs7O0FBTk47RUFDRSxPeEQ4RVc7O0F3RDNFVDtFQUVFOzs7QUNMUjtFQUNFO0VBQ0E7O0FBRUE7RUFDRTtFQUNBO0VBQ0E7O0FBR0Y7RUFDRTtFQUNBO0VBQ0E7RUFDQTtFQUNBOzs7QUFLRjtFQUNFOzs7QUFERjtFQUNFOzs7QUFERjtFQUNFOzs7QUFERjtFQUNFOzs7QUNyQko7RUFDRTtFQUNBO0VBQ0E7RUFDQTtFQUNBLFMxRHNpQ2tDOzs7QTBEbmlDcEM7RUFDRTtFQUNBO0VBQ0E7RUFDQTtFQUNBLFMxRDhoQ2tDOzs7QTBEdGhDaEM7RUFDRTtFQUNBO0VBQ0EsUzFEa2hDOEI7OztBUzcrQmhDO0VpRHhDQTtJQUNFO0lBQ0E7SUFDQSxTMURraEM4Qjs7O0FTNytCaEM7RWlEeENBO0lBQ0U7SUFDQTtJQUNBLFMxRGtoQzhCOzs7QVM3K0JoQztFaUR4Q0E7SUFDRTtJQUNBO0lBQ0EsUzFEa2hDOEI7OztBUzcrQmhDO0VpRHhDQTtJQUNFO0lBQ0E7SUFDQSxTMURraEM4Qjs7O0FTNytCaEM7RWlEeENBO0lBQ0U7SUFDQTtJQUNBLFMxRGtoQzhCOzs7QTJEM2lDcEM7RUFDRTtFQUNBO0VBQ0E7RUFDQTs7O0FBR0Y7RUFDRTtFQUNBO0VBQ0E7RUFDQTs7O0FDUkY7QUFBQTtFQ0lFO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTs7O0FDWEE7RUFDRTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0EsUzlEd2JzQztFOER2YnRDOzs7QUNSSjtFQ0FFO0VBQ0E7RUFDQTs7O0FDTkY7RUFDRTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0EsU2pFaXBCNEI7OztBa0V4bEJ0QjtFQU9JOzs7QUFQSjtFQU9JOzs7QUFQSjtFQU9JOzs7QUFQSjtFQU9JOzs7QUFQSjtFQU9JOzs7QUFQSjtFQU9JOzs7QUFQSjtFQU9JOzs7QUFQSjtFQU9JOzs7QUFQSjtFQU9JOzs7QUFQSjtFQU9JOzs7QUFQSjtFQU9JOzs7QUFQSjtFQU9JOzs7QUFQSjtFQU9JOzs7QUFQSjtFQU9JOzs7QUFQSjtFQU9JOzs7QUFQSjtFQU9JOzs7QUFQSjtFQU9JOzs7QUFQSjtFQU9JOzs7QUFQSjtFQU9JOzs7QUFQSjtFQU9JOzs7QUFQSjtFQU9JOzs7QUFQSjtFQU9JOzs7QUFQSjtFQU9JOzs7QUFQSjtFQU9JOzs7QUFQSjtFQU9JOzs7QUFQSjtFQU9JOzs7QUFQSjtFQU9JOzs7QUFQSjtFQU9JOzs7QUFQSjtFQU9JOzs7QUFQSjtFQU9JOzs7QUFQSjtFQU9JOzs7QUFQSjtFQU9JOzs7QUFQSjtFQU9JOzs7QUFQSjtFQU9JOzs7QUFQSjtFQU9JOzs7QUFQSjtFQU9JOzs7QUFQSjtFQU9JOzs7QUFQSjtFQU9JOzs7QUFQSjtFQU9JOzs7QUFQSjtFQU9JOzs7QUFQSjtFQU9JOzs7QUFQSjtFQU9JOzs7QUFQSjtFQU9JOzs7QUFQSjtFQU9JOzs7QUFQSjtFQU9JOzs7QUFQSjtFQU9JOzs7QUFQSjtFQU9JOzs7QUFQSjtFQU9JOzs7QUFQSjtFQU9JOzs7QUFQSjtFQU9JOzs7QUFQSjtFQU9JOzs7QUFQSjtFQU9JOzs7QUFQSjtFQU9JOzs7QUFQSjtFQU9JOzs7QUFQSjtFQU9JOzs7QUFQSjtFQU9JOzs7QUFQSjtFQU9JOzs7QUFQSjtFQU9JOzs7QUFQSjtFQU9JOzs7QUFQSjtFQU9JOzs7QUFQSjtFQU9JOzs7QUFQSjtFQU9JOzs7QUFQSjtFQU9JOzs7QUFQSjtFQU9JOzs7QUFQSjtFQU9JOzs7QUFQSjtFQU9JOzs7QUFQSjtFQU9JOzs7QUFQSjtFQU9JOzs7QUFQSjtFQU9JOzs7QUFQSjtFQU9JOzs7QUFQSjtFQU9JOzs7QUFQSjtFQU9JOzs7QUFQSjtFQU9JOzs7QUFQSjtFQU9JOzs7QUFQSjtFQU9JOzs7QUFQSjtFQU9JOzs7QUFQSjtFQU9JOzs7QUFQSjtFQU9JOzs7QUFQSjtFQU9JOzs7QUFQSjtFQU9JOzs7QUFQSjtFQU9JOzs7QUFQSjtFQU9JOzs7QUFQSjtFQU9JOzs7QUFQSjtFQU9JOzs7QUFQSjtFQU9JOzs7QUFQSjtFQU9JOzs7QUFQSjtFQU9JOzs7QUFQSjtFQU9JOzs7QUFQSjtFQU9JOzs7QUFQSjtFQU9JOzs7QUFQSjtFQU9JOzs7QUFQSjtFQU9JOzs7QUFQSjtFQU9JOzs7QUFQSjtFQU9JOzs7QUFQSjtFQU9JOzs7QUFQSjtFQU9JOzs7QUFQSjtFQU9JOzs7QUFQSjtFQU9JOzs7QUFQSjtFQU9JOzs7QUFQSjtFQU9JOzs7QUFQSjtFQU9JOzs7QUFQSjtFQU9JOzs7QUFQSjtFQU9JOzs7QUFQSjtFQU9JOzs7QUFQSjtFQU9JOzs7QUFQSjtFQU9JOzs7QUFQSjtFQU9JOzs7QUFQSjtFQU9JOzs7QUFQSjtFQU9JOzs7QUFQSjtFQU9JOzs7QUFQSjtFQU9JOzs7QUFQSjtFQU9JOzs7QUFQSjtFQU9JOzs7QUFQSjtFQU9JOzs7QUFQSjtFQU9JOzs7QUFQSjtFQU9JOzs7QUFQSjtFQU9JOzs7QUFQSjtFQU9JOzs7QUFQSjtFQU9JOzs7QUFQSjtFQU9JOzs7QUFQSjtFQU9JOzs7QUFQSjtFQU9JOzs7QUFQSjtFQU9JOzs7QUFQSjtFQU9JOzs7QUFQSjtFQU9JOzs7QUFQSjtFQU9JOzs7QUFQSjtFQU9JOzs7QUFQSjtFQU9JOzs7QUFQSjtFQU9JOzs7QUFQSjtFQU9JOzs7QUFQSjtFQU9JOzs7QUFQSjtFQU9JOzs7QUFQSjtFQU9JOzs7QUFQSjtFQU9JOzs7QUFQSjtFQU9JOzs7QUFQSjtFQU9JOzs7QUFQSjtFQU9JOzs7QUFQSjtFQU9JOzs7QUFQSjtFQU9JOzs7QUFQSjtFQU9JOzs7QUFQSjtFQU9JOzs7QUFQSjtFQU9JOzs7QUFQSjtFQU9JOzs7QUFQSjtFQU9JOzs7QUFQSjtFQU9JOzs7QUFQSjtFQU9JOzs7QUFQSjtFQU9JOzs7QUFQSjtFQU9JOzs7QUFQSjtFQU9JO0VBQUE7OztBQVBKO0VBT0k7RUFBQTs7O0FBUEo7RUFPSTtFQUFBOzs7QUFQSjtFQU9JO0VBQUE7OztBQVBKO0VBT0k7RUFBQTs7O0FBUEo7RUFPSTtFQUFBOzs7QUFQSjtFQU9JO0VBQUE7OztBQVBKO0VBT0k7RUFBQTs7O0FBUEo7RUFPSTtFQUFBOzs7QUFQSjtFQU9JO0VBQUE7OztBQVBKO0VBT0k7RUFBQTs7O0FBUEo7RUFPSTtFQUFBOzs7QUFQSjtFQU9JO0VBQUE7OztBQVBKO0VBT0k7RUFBQTs7O0FBUEo7RUFPSTs7O0FBUEo7RUFPSTs7O0FBUEo7RUFPSTs7O0FBUEo7RUFPSTs7O0FBUEo7RUFPSTs7O0FBUEo7RUFPSTs7O0FBUEo7RUFPSTs7O0FBUEo7RUFPSTs7O0FBUEo7RUFPSTs7O0FBUEo7RUFPSTs7O0FBUEo7RUFPSTs7O0FBUEo7RUFPSTs7O0FBUEo7RUFPSTs7O0FBUEo7RUFPSTs7O0FBUEo7RUFPSTs7O0FBUEo7RUFPSTs7O0FBUEo7RUFPSTs7O0FBUEo7RUFPSTs7O0FBUEo7RUFPSTs7O0FBUEo7RUFPSTs7O0FBUEo7RUFPSTs7O0FBUEo7RUFPSTs7O0FBUEo7RUFPSTs7O0FBUEo7RUFPSTs7O0FBUEo7RUFPSTs7O0FBUEo7RUFPSTs7O0FBUEo7RUFPSTs7O0FBUEo7RUFPSTs7O0FBUEo7RUFPSTs7O0FBUEo7RUFPSTs7O0FBUEo7RUFPSTs7O0FBUEo7RUFPSTs7O0FBUEo7RUFPSTs7O0FBUEo7RUFPSTs7O0FBUEo7RUFPSTtFQUFBOzs7QUFQSjtFQU9JO0VBQUE7OztBQVBKO0VBT0k7RUFBQTs7O0FBUEo7RUFPSTtFQUFBOzs7QUFQSjtFQU9JO0VBQUE7OztBQVBKO0VBT0k7RUFBQTs7O0FBUEo7RUFPSTtFQUFBOzs7QUFQSjtFQU9JO0VBQUE7OztBQVBKO0VBT0k7RUFBQTs7O0FBUEo7RUFPSTtFQUFBOzs7QUFQSjtFQU9JO0VBQUE7OztBQVBKO0VBT0k7RUFBQTs7O0FBUEo7RUFPSTs7O0FBUEo7RUFPSTs7O0FBUEo7RUFPSTs7O0FBUEo7RUFPSTs7O0FBUEo7RUFPSTs7O0FBUEo7RUFPSTs7O0FBUEo7RUFPSTs7O0FBUEo7RUFPSTs7O0FBUEo7RUFPSTs7O0FBUEo7RUFPSTs7O0FBUEo7RUFPSTs7O0FBUEo7RUFPSTs7O0FBUEo7RUFPSTs7O0FBUEo7RUFPSTs7O0FBUEo7RUFPSTs7O0FBUEo7RUFPSTs7O0FBUEo7RUFPSTs7O0FBUEo7RUFPSTs7O0FBUEo7RUFPSTs7O0FBUEo7RUFPSTs7O0FBUEo7RUFPSTs7O0FBUEo7RUFPSTs7O0FBUEo7RUFPSTs7O0FBUEo7RUFPSTs7O0FBUEo7RUFPSTs7O0FBUEo7RUFPSTs7O0FBUEo7RUFPSTs7O0FBUEo7RUFPSTs7O0FBUEo7RUFPSTs7O0FBUEo7RUFPSTs7O0FBUEo7RUFPSTs7O0FBUEo7RUFPSTs7O0FBUEo7RUFPSTs7O0FBUEo7RUFPSTs7O0FBUEo7RUFPSTs7O0FBUEo7RUFPSTs7O0FBUEo7RUFPSTs7O0FBUEo7RUFPSTs7O0FBUEo7RUFPSTs7O0FBUEo7RUFPSTs7O0FBUEo7RUFPSTs7O0FBUEo7RUFPSTs7O0FBUEo7RUFPSTs7O0FBUEo7RUFPSTs7O0FBUEo7RUFPSTs7O0FBUEo7RUFPSTs7O0FBUEo7RUFPSTs7O0FBUEo7RUFPSTs7O0FBUEo7RUFPSTs7O0FBUEo7RUFPSTs7O0FBUEo7RUFPSTs7O0FBUEo7RUFPSTs7O0FBUEo7RUFPSTs7O0FBckJKO0FBY0E7RUFPSTtFQUFBOzs7QUFjSjtBQXJCQTtFQUlRO0VBR0o7OztBQVBKO0VBSVE7RUFHSjs7O0FBUEo7RUFJUTtFQUdKOzs7QUFQSjtFQUlRO0VBR0o7OztBQVBKO0VBSVE7RUFHSjs7O0FBUEo7RUFJUTtFQUdKOzs7QUFQSjtFQUlRO0VBR0o7OztBQVBKO0VBSVE7RUFHSjs7O0FBUEo7RUFJUTtFQUdKOzs7QUFQSjtFQUlRO0VBR0o7OztBQVBKO0VBSVE7RUFHSjs7O0FBUEo7RUFJUTtFQUdKOzs7QUFQSjtFQUlRO0VBR0o7OztBQVBKO0VBSVE7RUFHSjs7O0FBUEo7RUFJUTtFQUdKOzs7QUFqQko7RUFDRTs7O0FBREY7RUFDRTs7O0FBREY7RUFDRTs7O0FBREY7RUFDRTs7O0FBU0Y7RUFJUTtFQUdKOzs7QUFQSjtFQUlRO0VBR0o7OztBQVBKO0VBSVE7RUFHSjs7O0FBUEo7RUFJUTtFQUdKOzs7QUFQSjtFQUlRO0VBR0o7OztBQVBKO0VBSVE7RUFHSjs7O0FBUEo7RUFJUTtFQUdKOzs7QUFQSjtFQUlRO0VBR0o7OztBQVBKO0VBSVE7RUFHSjs7O0FBUEo7RUFJUTtFQUdKOzs7QUFQSjtFQUlRO0VBR0o7OztBQVBKO0VBSVE7RUFHSjs7O0FBakJKO0VBQ0U7OztBQURGO0VBQ0U7OztBQURGO0VBQ0U7OztBQURGO0VBQ0U7OztBQURGO0VBQ0U7OztBQVNGO0VBT0k7OztBQVBKO0VBT0k7OztBQVBKO0VBT0k7OztBQVBKO0VBT0k7OztBQVBKO0VBT0k7OztBQVBKO0VBT0k7OztBQVBKO0VBT0k7OztBQVBKO0VBT0k7OztBQVBKO0VBT0k7OztBQVBKO0VBT0k7OztBQVBKO0VBT0k7OztBQVBKO0VBT0k7OztBQVBKO0VBT0k7OztBQVBKO0VBT0k7RUFBQTs7O0FBUEo7RUFPSTtFQUFBOzs7QUFQSjtFQU9JO0VBQUE7OztBQVBKO0VBT0k7RUFBQTs7O0FBUEo7RUFPSTs7O0FBUEo7RUFPSTs7O0F6RFBSO0V5REFJO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7SUFBQTs7RUFQSjtJQU9JO0lBQUE7O0VBUEo7SUFPSTtJQUFBOztFQVBKO0lBT0k7SUFBQTs7RUFQSjtJQU9JO0lBQUE7O0VBUEo7SUFPSTtJQUFBOztFQVBKO0lBT0k7SUFBQTs7RUFQSjtJQU9JO0lBQUE7O0VBUEo7SUFPSTtJQUFBOztFQVBKO0lBT0k7SUFBQTs7RUFQSjtJQU9JO0lBQUE7O0VBUEo7SUFPSTtJQUFBOztFQVBKO0lBT0k7SUFBQTs7RUFQSjtJQU9JO0lBQUE7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JO0lBQUE7O0VBUEo7SUFPSTtJQUFBOztFQVBKO0lBT0k7SUFBQTs7RUFQSjtJQU9JO0lBQUE7O0VBUEo7SUFPSTtJQUFBOztFQVBKO0lBT0k7SUFBQTs7RUFQSjtJQU9JO0lBQUE7O0VBUEo7SUFPSTtJQUFBOztFQVBKO0lBT0k7SUFBQTs7RUFQSjtJQU9JO0lBQUE7O0VBUEo7SUFPSTtJQUFBOztFQVBKO0lBT0k7SUFBQTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7O0F6RFBSO0V5REFJO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7SUFBQTs7RUFQSjtJQU9JO0lBQUE7O0VBUEo7SUFPSTtJQUFBOztFQVBKO0lBT0k7SUFBQTs7RUFQSjtJQU9JO0lBQUE7O0VBUEo7SUFPSTtJQUFBOztFQVBKO0lBT0k7SUFBQTs7RUFQSjtJQU9JO0lBQUE7O0VBUEo7SUFPSTtJQUFBOztFQVBKO0lBT0k7SUFBQTs7RUFQSjtJQU9JO0lBQUE7O0VBUEo7SUFPSTtJQUFBOztFQVBKO0lBT0k7SUFBQTs7RUFQSjtJQU9JO0lBQUE7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JO0lBQUE7O0VBUEo7SUFPSTtJQUFBOztFQVBKO0lBT0k7SUFBQTs7RUFQSjtJQU9JO0lBQUE7O0VBUEo7SUFPSTtJQUFBOztFQVBKO0lBT0k7SUFBQTs7RUFQSjtJQU9JO0lBQUE7O0VBUEo7SUFPSTtJQUFBOztFQVBKO0lBT0k7SUFBQTs7RUFQSjtJQU9JO0lBQUE7O0VBUEo7SUFPSTtJQUFBOztFQVBKO0lBT0k7SUFBQTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7O0F6RFBSO0V5REFJO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7SUFBQTs7RUFQSjtJQU9JO0lBQUE7O0VBUEo7SUFPSTtJQUFBOztFQVBKO0lBT0k7SUFBQTs7RUFQSjtJQU9JO0lBQUE7O0VBUEo7SUFPSTtJQUFBOztFQVBKO0lBT0k7SUFBQTs7RUFQSjtJQU9JO0lBQUE7O0VBUEo7SUFPSTtJQUFBOztFQVBKO0lBT0k7SUFBQTs7RUFQSjtJQU9JO0lBQUE7O0VBUEo7SUFPSTtJQUFBOztFQVBKO0lBT0k7SUFBQTs7RUFQSjtJQU9JO0lBQUE7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JO0lBQUE7O0VBUEo7SUFPSTtJQUFBOztFQVBKO0lBT0k7SUFBQTs7RUFQSjtJQU9JO0lBQUE7O0VBUEo7SUFPSTtJQUFBOztFQVBKO0lBT0k7SUFBQTs7RUFQSjtJQU9JO0lBQUE7O0VBUEo7SUFPSTtJQUFBOztFQVBKO0lBT0k7SUFBQTs7RUFQSjtJQU9JO0lBQUE7O0VBUEo7SUFPSTtJQUFBOztFQVBKO0lBT0k7SUFBQTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7O0F6RFBSO0V5REFJO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7SUFBQTs7RUFQSjtJQU9JO0lBQUE7O0VBUEo7SUFPSTtJQUFBOztFQVBKO0lBT0k7SUFBQTs7RUFQSjtJQU9JO0lBQUE7O0VBUEo7SUFPSTtJQUFBOztFQVBKO0lBT0k7SUFBQTs7RUFQSjtJQU9JO0lBQUE7O0VBUEo7SUFPSTtJQUFBOztFQVBKO0lBT0k7SUFBQTs7RUFQSjtJQU9JO0lBQUE7O0VBUEo7SUFPSTtJQUFBOztFQVBKO0lBT0k7SUFBQTs7RUFQSjtJQU9JO0lBQUE7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JO0lBQUE7O0VBUEo7SUFPSTtJQUFBOztFQVBKO0lBT0k7SUFBQTs7RUFQSjtJQU9JO0lBQUE7O0VBUEo7SUFPSTtJQUFBOztFQVBKO0lBT0k7SUFBQTs7RUFQSjtJQU9JO0lBQUE7O0VBUEo7SUFPSTtJQUFBOztFQVBKO0lBT0k7SUFBQTs7RUFQSjtJQU9JO0lBQUE7O0VBUEo7SUFPSTtJQUFBOztFQVBKO0lBT0k7SUFBQTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7O0F6RFBSO0V5REFJO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7SUFBQTs7RUFQSjtJQU9JO0lBQUE7O0VBUEo7SUFPSTtJQUFBOztFQVBKO0lBT0k7SUFBQTs7RUFQSjtJQU9JO0lBQUE7O0VBUEo7SUFPSTtJQUFBOztFQVBKO0lBT0k7SUFBQTs7RUFQSjtJQU9JO0lBQUE7O0VBUEo7SUFPSTtJQUFBOztFQVBKO0lBT0k7SUFBQTs7RUFQSjtJQU9JO0lBQUE7O0VBUEo7SUFPSTtJQUFBOztFQVBKO0lBT0k7SUFBQTs7RUFQSjtJQU9JO0lBQUE7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JO0lBQUE7O0VBUEo7SUFPSTtJQUFBOztFQVBKO0lBT0k7SUFBQTs7RUFQSjtJQU9JO0lBQUE7O0VBUEo7SUFPSTtJQUFBOztFQVBKO0lBT0k7SUFBQTs7RUFQSjtJQU9JO0lBQUE7O0VBUEo7SUFPSTtJQUFBOztFQVBKO0lBT0k7SUFBQTs7RUFQSjtJQU9JO0lBQUE7O0VBUEo7SUFPSTtJQUFBOztFQVBKO0lBT0k7SUFBQTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7O0FDbkRaO0VENENRO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7OztBQ2hDWjtFRHlCUTtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOztFQVBKO0lBT0k7O0VBUEo7SUFPSTs7RUFQSjtJQU9JOzs7QUV0RVg7QUFDRDtBQUNBO0VBQ0k7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBOzs7QUFHSjtFQUNJOzs7QUFHSjtFQUNJOzs7QUFHSjtFQUNJOzs7QUFFSjtBQUNBO0VBQ0k7OztBQUVKO0FBQ0E7QUFBQTtFQUVJOzs7QUFJSjtBQUNBO0VBQ0k7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTs7O0FBRUo7QUFDQTtBQUFBO0VBRUk7RUFDQTs7O0FBSUo7QUFDQTtBQUFBO0VBRUk7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7OztBQUVKO0FBQ0E7RUFDSTs7O0FBSUo7QUFDQTtBQUFBO0VBRUk7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBOzs7QUFHSjtBQUFBO0VBRUk7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTs7O0FBR0o7RUFDSTtFQUNBO0VBQ0E7RUFDQTtFQUNBOzs7QUFJSjtBQUNBO0VBQ0k7OztBQUlKO0FBQ0E7RUFDSTs7O0FBR0o7RUFDSTs7O0FDN0hIO0FBQUE7QUFBQTtBQUFBO0FDR0Q7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0VBTUU7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7OztBQ1hGO0VBQ0U7RUFDQTtFQUNBOzs7QUFHRjtFQUNFOzs7QUFHRjtFQUNFOzs7QUFJQTtFQUNFOzs7QUFERjtFQUNFOzs7QUFERjtFQUNFOzs7QUFERjtFQUNFOzs7QUFERjtFQUNFOzs7QUFERjtFQUNFOzs7QUFERjtFQUNFOzs7QUFERjtFQUNFOzs7QUFERjtFQUNFOzs7QUFERjtFQUNFOzs7QUNsQko7RUFDRTtFQUNBLE9DT3FCOzs7QUNSdkI7RUFDRTtFQUNBO0VBQ0E7O0FBRUE7RUFBTzs7O0FBR1Q7RUFDRTtFQUNBO0VBQ0E7RUFDQSxPRExxQjtFQ01yQjs7O0FDYkY7RUFDRTtFQUNBO0VBQ0E7OztBQUdGO0VBQStCOzs7QUFDL0I7RUFBZ0M7OztBQU85QjtBQUFBO0FBQUE7QUFBQTtBQUFBO0VBQWdDOztBQUNoQztBQUFBO0FBQUE7QUFBQTtBQUFBO0VBQWlDOzs7QUNmbkM7RUFDRTs7O0FBR0Y7RUFDRTs7O0FBR0Y7RUFDRTtJQUNFOztFQUdGO0lBQ0U7OztBQ2RKO0VDV0U7RUFDQTs7O0FEWEY7RUNVRTtFQUNBOzs7QURWRjtFQ1NFO0VBQ0E7OztBRFJGO0VDWUU7RUFDQTs7O0FEWkY7RUNXRTtFQUNBOzs7QURYRjtFQ1VFO0VBQ0E7OztBRExBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtFQU1FOzs7QUVsQko7RUFDRTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7OztBQUdGO0FBQUE7RUFFRTtFQUNBO0VBQ0E7RUFDQTs7O0FBR0Y7RUFDRTs7O0FBR0Y7RUFDRTs7O0FBR0Y7RUFDRSxPTnBCcUI7OztBT1R2QjtBQUFBO0FBRUE7QUFFQTtFQUFrQzs7O0FBQ2xDO0VBQTRDOzs7QUFDNUM7RUFBcUM7OztBQUNyQztFQUFzRDs7O0FBQ3REO0VBQStCOzs7QUFDL0I7RUFBeUM7OztBQUN6QztFQUF5Qzs7O0FBQ3pDO0VBQW1DOzs7QUFDbkM7RUFBZ0M7OztBQUNoQztBQUNBO0VBQXFDOzs7QUFDckM7RUFBMkM7OztBQUMzQztFQUEwQzs7O0FBQzFDO0VBQW9DOzs7QUFDcEM7RUFBeUM7OztBQUN6QztFQUEwQzs7O0FBQzFDO0VBQXVDOzs7QUFDdkM7RUFBd0M7OztBQUN4QztFQUFtQzs7O0FBQ25DO0VBQXNDOzs7QUFDdEM7RUFBbUM7OztBQUNuQztFQUF1Qzs7O0FBQ3ZDO0VBQXNDOzs7QUFDdEM7RUFBZ0U7OztBQUNoRTtFQUFtQzs7O0FBQ25DO0VBQW1DOzs7QUFDbkM7RUFBb0M7OztBQUNwQztFQUFzQzs7O0FBQ3RDO0VBQThDOzs7QUFDOUM7RUFBOEM7OztBQUM5QztFQUErQzs7O0FBQy9DO0VBQTRDOzs7QUFDNUM7RUFBdUM7OztBQUN2QztFQUF1Qzs7O0FBQ3ZDO0VBQXdDOzs7QUFDeEM7RUFBcUM7OztBQUNyQztFQUFrQzs7O0FBQ2xDO0VBQTBDOzs7QUFDMUM7RUFBb0M7OztBQUNwQztFQUFpQzs7O0FBQ2pDO0VBQXNDOzs7QUFDdEM7RUFBMEM7OztBQUMxQztFQUFrQzs7O0FBQ2xDO0VBQWtDOzs7QUFDbEM7RUFBc0M7OztBQUN0QztFQUFzQzs7O0FBQ3RDO0VBQW9DOzs7QUFDcEM7RUFBb0M7OztBQUNwQztFQUFrRDs7O0FBQ2xEO0VBQWtEOzs7QUFDbEQ7RUFBbUQ7OztBQUNuRDtFQUFnRDs7O0FBQ2hEO0VBQThDOzs7QUFDOUM7RUFBOEM7OztBQUM5QztFQUErQzs7O0FBQy9DO0VBQTRDOzs7QUFDNUM7RUFBdUM7OztBQUN2QztFQUF1Qzs7O0FBQ3ZDO0VBQXdDOzs7QUFDeEM7RUFBcUM7OztBQUNyQztFQUF1Qzs7O0FBQ3ZDO0VBQXlDOzs7QUFDekM7RUFBeUM7OztBQUN6QztFQUF1Qzs7O0FBQ3ZDO0VBQXdEOzs7QUFDeEQ7RUFBcUM7OztBQUNyQztFQUF1Qzs7O0FBQ3ZDO0VBQStCOzs7QUFDL0I7RUFBa0M7OztBQUNsQztFQUFzQzs7O0FBQ3RDO0VBQWlDOzs7QUFDakM7RUFBb0M7OztBQUNwQztFQUE4Qzs7O0FBQzlDO0VBQXlDOzs7QUFDekM7RUFBb0M7OztBQUNwQztFQUFtQzs7O0FBQ25DO0VBQWtDOzs7QUFDbEM7RUFBZ0M7OztBQUNoQztFQUFpQzs7O0FBQ2pDO0VBQTBDOzs7QUFDMUM7RUFBc0M7OztBQUN0QztFQUFxQzs7O0FBQ3JDO0VBQTBDOzs7QUFDMUM7RUFBZ0M7OztBQUNoQztFQUFxQzs7O0FBQ3JDO0VBQXFDOzs7QUFDckM7RUFBb0M7OztBQUNwQztFQUFpQzs7O0FBQ2pDO0VBQTBDOzs7QUFDMUM7RUFBNEM7OztBQUM1QztFQUFpQzs7O0FBQ2pDO0VBQTBDOzs7QUFDMUM7RUFBeUM7OztBQUN6QztFQUF5Qzs7O0FBQ3pDO0VBQTRDOzs7QUFDNUM7RUFBbUQ7OztBQUNuRDtFQUFnQzs7O0FBQ2hDO0VBQWlDOzs7QUFDakM7RUFBb0M7OztBQUNwQztFQUEyQzs7O0FBQzNDO0VBQWlDOzs7QUFDakM7RUFBdUM7OztBQUN2QztFQUF5Qzs7O0FBQ3pDO0VBQWtDOzs7QUFDbEM7RUFBb0M7OztBQUNwQztFQUFzQzs7O0FBQ3RDO0VBQXVDOzs7QUFDdkM7RUFBc0M7OztBQUN0QztFQUEwQzs7O0FBQzFDO0VBQXNDOzs7QUFDdEM7RUFBb0M7OztBQUNwQztFQUFpQzs7O0FBQ2pDO0VBQXNDOzs7QUFDdEM7RUFBdUM7OztBQUN2QztFQUFvQzs7O0FBQ3BDO0VBQTBDOzs7QUFDMUM7RUFBa0M7OztBQUNsQztFQUFpQzs7O0FBQ2pDO0VBQW9DOzs7QUFDcEM7RUFBc0M7OztBQUN0QztFQUFzQzs7O0FBQ3RDO0VBQXdDOzs7QUFDeEM7RUFBaUM7OztBQUNqQztFQUFpQzs7O0FBQ2pDO0VBQWlDOzs7QUFDakM7RUFBaUM7OztBQUNqQztFQUFpQzs7O0FBQ2pDO0VBQWlDOzs7QUFDakM7RUFBc0M7OztBQUN0QztFQUFzQzs7O0FBQ3RDO0VBQXdDOzs7QUFDeEM7RUFBcUM7OztBQUNyQztFQUF5Qzs7O0FBQ3pDO0VBQWdDOzs7QUFDaEM7RUFBcUM7OztBQUNyQztFQUFrQzs7O0FBQ2xDO0VBQW9DOzs7QUFDcEM7RUFBa0M7OztBQUNsQztFQUFzQzs7O0FBQ3RDO0VBQThDOzs7QUFDOUM7RUFBNEM7OztBQUM1QztFQUFrQzs7O0FBQ2xDO0VBQWtDOzs7QUFDbEM7RUFBZ0M7OztBQUNoQztFQUFnQzs7O0FBQ2hDO0VBQXFDOzs7QUFDckM7RUFBcUM7OztBQUNyQztFQUFxQzs7O0FBQ3JDO0VBQWlDOzs7QUFDakM7RUFBNkM7OztBQUM3QztFQUFnQzs7O0FBQ2hDO0VBQW9DOzs7QUFDcEM7RUFBMEM7OztBQUMxQztFQUF1Qzs7O0FBQ3ZDO0VBQXVDOzs7QUFDdkM7RUFBcUM7OztBQUNyQztFQUF5Qzs7O0FBQ3pDO0VBQTJDOzs7QUFDM0M7RUFBeUM7OztBQUN6QztFQUEyQzs7O0FBQzNDO0VBQTBDOzs7QUFDMUM7RUFBMkM7OztBQUMzQztFQUEwQzs7O0FBQzFDO0VBQW1DOzs7QUFDbkM7RUFBeUM7OztBQUN6QztFQUF1Qzs7O0FBQ3ZDO0VBQWdEOzs7QUFDaEQ7RUFBdUM7OztBQUN2QztFQUFxQzs7O0FBQ3JDO0VBQXFDOzs7QUFDckM7RUFBZ0M7OztBQUNoQztFQUFvQzs7O0FBQ3BDO0VBQXdDOzs7QUFDeEM7RUFBc0M7OztBQUN0QztFQUFxQzs7O0FBQ3JDO0VBQXVDOzs7QUFDdkM7RUFBdUM7OztBQUN2QztFQUF3Qzs7O0FBQ3hDO0VBQThDOzs7QUFDOUM7RUFBOEM7OztBQUM5QztFQUErQzs7O0FBQy9DO0VBQTRDOzs7QUFDNUM7RUFBcUM7OztBQUNyQztFQUFtQzs7O0FBQ25DO0VBQTRDOzs7QUFDNUM7RUFBc0M7OztBQUN0QztFQUEwQzs7O0FBQzFDO0VBQWdDOzs7QUFDaEM7RUFBMEM7OztBQUMxQztFQUFvQzs7O0FBQ3BDO0VBQXlDOzs7QUFDekM7RUFBMkM7OztBQUMzQztFQUF3Qzs7O0FBQ3hDO0VBQW1DOzs7QUFDbkM7RUFBMEM7OztBQUMxQztFQUFzQzs7O0FBQ3RDO0VBQXNDOzs7QUFDdEM7RUFBb0M7OztBQUNwQztFQUF1Qzs7O0FBQ3ZDO0VBQW1DOzs7QUFDbkM7RUFBd0M7OztBQUN4QztFQUFrQzs7O0FBQ2xDO0VBQXVDOzs7QUFDdkM7RUFBK0M7OztBQUMvQztFQUE2Qzs7O0FBQzdDO0VBQXVDOzs7QUFDdkM7RUFBc0M7OztBQUN0QztFQUF1Qzs7O0FBQ3ZDO0VBQXNDOzs7QUFDdEM7RUFBa0M7OztBQUNsQztFQUF5Qzs7O0FBQ3pDO0VBQXlDOzs7QUFDekM7RUFBeUM7OztBQUN6QztFQUFrQzs7O0FBQ2xDO0VBQXlDOzs7QUFDekM7RUFBd0M7OztBQUN4QztFQUF1Qzs7O0FBQ3ZDO0VBQXlDOzs7QUFDekM7RUFBdUM7OztBQUN2QztFQUF3Qzs7O0FBQ3hDO0VBQXVDOzs7QUFDdkM7RUFBZ0Q7OztBQUNoRDtFQUFnRDs7O0FBQ2hEO0VBQWlEOzs7QUFDakQ7RUFBOEM7OztBQUM5QztFQUF5Qzs7O0FBQ3pDO0VBQXlDOzs7QUFDekM7RUFBMEM7OztBQUMxQztFQUF1Qzs7O0FBQ3ZDO0VBQWtDOzs7QUFDbEM7RUFBbUM7OztBQUNuQztFQUFtQzs7O0FBQ25DO0VBQW1DOzs7QUFDbkM7RUFBeUM7OztBQUN6QztFQUFpQzs7O0FBQ2pDO0VBQXNDOzs7QUFDdEM7RUFBNEM7OztBQUM1QztFQUEyQzs7O0FBQzNDO0VBQWtDOzs7QUFDbEM7RUFBa0M7OztBQUNsQztFQUE4Qzs7O0FBQzlDO0VBQWtDOzs7QUFDbEM7RUFBK0M7OztBQUMvQztFQUEyQzs7O0FBQzNDO0VBQXVDOzs7QUFDdkM7RUFBNEM7OztBQUM1QztFQUF1Qzs7O0FBQ3ZDO0VBQWdEOzs7QUFDaEQ7RUFBc0M7OztBQUN0QztFQUEyQzs7O0FBQzNDO0VBQTZDOzs7QUFDN0M7RUFBdUM7OztBQUN2QztFQUF1Qzs7O0FBQ3ZDO0VBQXlDOzs7QUFDekM7RUFBcUM7OztBQUNyQztFQUFpQzs7O0FBQ2pDO0VBQXdDOzs7QUFDeEM7RUFBb0M7OztBQUNwQztFQUFxQzs7O0FBQ3JDO0VBQW1DOzs7QUFDbkM7RUFBZ0M7OztBQUNoQztFQUFpQzs7O0FBQ2pDO0VBQWtDOzs7QUFDbEM7RUFBb0M7OztBQUNwQztFQUFvQzs7O0FBQ3BDO0VBQXdDOzs7QUFDeEM7RUFBMkM7OztBQUMzQztFQUF5Qzs7O0FBQ3pDO0VBQTBDOzs7QUFDMUM7RUFBcUM7OztBQUNyQztFQUE0Qzs7O0FBQzVDO0VBQXlDOzs7QUFDekM7RUFBb0M7OztBQUNwQztFQUFxQzs7O0FBQ3JDO0VBQWdEOzs7QUFDaEQ7RUFBMkM7OztBQUMzQztFQUF1Qzs7O0FBQ3ZDO0VBQTJDOzs7QUFDM0M7RUFBbUM7OztBQUNuQztFQUFtQzs7O0FBQ25DO0VBQXdDOzs7QUFDeEM7RUFBaUM7OztBQUNqQztFQUFzQzs7O0FBQ3RDO0VBQWtDOzs7QUFDbEM7RUFBbUM7OztBQUNuQztFQUE2Qzs7O0FBQzdDO0VBQWdEOzs7QUFDaEQ7RUFBZ0Q7OztBQUNoRDtFQUFtRDs7O0FBQ25EO0VBQW1EOzs7QUFDbkQ7RUFBZ0Q7OztBQUNoRDtFQUFnRDs7O0FBQ2hEO0VBQW9EOzs7QUFDcEQ7RUFBbUQ7OztBQUNuRDtFQUFnRDs7O0FBQ2hEO0VBQXNEOzs7QUFDdEQ7RUFBMkQ7OztBQUMzRDtFQUFtRDs7O0FBQ25EO0VBQWtEOzs7QUFDbEQ7RUFBd0M7OztBQUN4QztFQUEwQzs7O0FBQzFDO0VBQWlDOzs7QUFDakM7RUFBcUM7OztBQUNyQztFQUFrQzs7O0FBQ2xDO0VBQXVDOzs7QUFDdkM7RUFBaUM7OztBQUNqQztFQUFrQzs7O0FBQ2xDO0VBQWlDOzs7QUFDakM7RUFBcUM7OztBQUNyQztFQUFpQzs7O0FBQ2pDO0VBQWtDOzs7QUFDbEM7RUFBZ0M7OztBQUNoQztFQUF1Qzs7O0FBQ3ZDO0VBQW9DOzs7QUFDcEM7RUFBMkM7OztBQUMzQztFQUFxQzs7O0FBQ3JDO0VBQXFDOzs7QUFDckM7RUFBaUM7OztBQUNqQztFQUFzQzs7O0FBQ3RDO0VBQXFDOzs7QUFDckM7RUFBc0M7OztBQUN0QztFQUFvQzs7O0FBQ3BDO0VBQW9DOzs7QUFDcEM7RUFBZ0M7OztBQUNoQztFQUF1Qzs7O0FBQ3ZDO0VBQXlDOzs7QUFDekM7RUFBZ0M7OztBQUNoQztFQUFzQzs7O0FBQ3RDO0VBQXFDOzs7QUFDckM7RUFBaUM7OztBQUNqQztFQUFxQzs7O0FBQ3JDO0VBQW9DOzs7QUFDcEM7RUFBc0M7OztBQUN0QztFQUFzQzs7O0FBQ3RDO0VBQXFDOzs7QUFDckM7RUFBcUM7OztBQUNyQztFQUF1Qzs7O0FBQ3ZDO0VBQXFDOzs7QUFDckM7RUFBaUM7OztBQUNqQztFQUEwQzs7O0FBQzFDO0VBQStDOzs7QUFDL0M7RUFBdUM7OztBQUN2QztFQUFvQzs7O0FBQ3BDO0VBQXNDOzs7QUFDdEM7RUFBbUM7OztBQUNuQztFQUFrQzs7O0FBQ2xDO0VBQWdDOzs7QUFDaEM7RUFBbUM7OztBQUNuQztFQUFtQzs7O0FBQ25DO0VBQWdDOzs7QUFDaEM7RUFBd0M7OztBQUN4QztFQUFrQzs7O0FBQ2xDO0VBQTBDOzs7QUFDMUM7RUFBbUM7OztBQUNuQztFQUF3Qzs7O0FBQ3hDO0VBQXNDOzs7QUFDdEM7RUFBdUM7OztBQUN2QztFQUFpQzs7O0FBQ2pDO0VBQXFDOzs7QUFDckM7RUFBMEM7OztBQUMxQztFQUE2Qzs7O0FBQzdDO0VBQW1DOzs7QUFDbkM7RUFBeUM7OztBQUN6QztFQUFxQzs7O0FBQ3JDO0VBQTRDOzs7QUFDNUM7RUFBb0M7OztBQUNwQztFQUFpQzs7O0FBQ2pDO0VBQTBDOzs7QUFDMUM7RUFBMkM7OztBQUMzQztFQUFtQzs7O0FBQ25DO0VBQXFDOzs7QUFDckM7RUFBcUM7OztBQUNyQztFQUEwQzs7O0FBQzFDO0VBQW9DOzs7QUFDcEM7RUFBbUM7OztBQUNuQztFQUF1Qzs7O0FBQ3ZDO0VBQWlDOzs7QUFDakM7RUFBaUM7OztBQUNqQztFQUFpQzs7O0FBQ2pDO0VBQWtDOzs7QUFDbEM7RUFBc0M7OztBQUN0QztFQUF1Qzs7O0FBQ3ZDO0VBQXVDOzs7QUFDdkM7RUFBaUM7OztBQUNqQztFQUFrQzs7O0FBQ2xDO0VBQW1DOzs7QUFDbkM7RUFBcUM7OztBQUNyQztFQUEwQzs7O0FBQzFDO0VBQStDOzs7QUFDL0M7RUFBNEM7OztBQUM1QztFQUFtQzs7O0FBQ25DO0VBQW1DOzs7QUFDbkM7RUFBbUM7OztBQUNuQztFQUFtQzs7O0FBQ25DO0VBQXFDOzs7QUFDckM7RUFBcUM7OztBQUNyQztFQUFpQzs7O0FBQ2pDO0VBQXNDOzs7QUFDdEM7RUFBeUM7OztBQUN6QztFQUF3Qzs7O0FBQ3hDO0VBQStDOzs7QUFDL0M7RUFBaUQ7OztBQUNqRDtFQUFtQzs7O0FBQ25DO0VBQThDOzs7QUFDOUM7RUFBeUM7OztBQUN6QztFQUE4Qzs7O0FBQzlDO0VBQXFEOzs7QUFDckQ7RUFBZ0M7OztBQUNoQztFQUF3Qzs7O0FBQ3hDO0VBQXNDOzs7QUFDdEM7RUFBcUM7OztBQUNyQztFQUF1Qzs7O0FBQ3ZDO0VBQStDOzs7QUFDL0M7RUFBNEM7OztBQUM1QztFQUFpRDs7O0FBQ2pEO0VBQTBDOzs7QUFDMUM7RUFBeUM7OztBQUN6QztFQUFnQzs7O0FBQ2hDO0VBQW9DOzs7QUFDcEM7RUFBd0M7OztBQUN4QztFQUFrQzs7O0FBQ2xDO0VBQW1DOzs7QUFDbkM7RUFBbUM7OztBQUNuQztFQUF3Qzs7O0FBQ3hDO0VBQWtDOzs7QUFDbEM7RUFBaUM7OztBQUNqQztFQUFxQzs7O0FBQ3JDO0VBQXlDOzs7QUFDekM7RUFBdUM7OztBQUN2QztFQUFzQzs7O0FBQ3RDO0VBQTBDOzs7QUFDMUM7RUFBcUM7OztBQUNyQztFQUEwQzs7O0FBQzFDO0VBQXVDOzs7QUFDdkM7RUFBd0M7OztBQUN4QztFQUF1Qzs7O0FBQ3ZDO0VBQXdDOzs7QUFDeEM7RUFBeUM7OztBQUN6QztFQUFnRDs7O0FBQ2hEO0VBQXlDOzs7QUFDekM7RUFBNkM7OztBQUM3QztFQUFxQzs7O0FBQ3JDO0VBQTRDOzs7QUFDNUM7RUFBOEM7OztBQUM5QztFQUEyQzs7O0FBQzNDO0VBQXdDOzs7QUFDeEM7RUFBdUM7OztBQUN2QztFQUFzQzs7O0FBQ3RDO0VBQWlDOzs7QUFDakM7RUFBc0M7OztBQUN0QztFQUFpQzs7O0FBQ2pDO0VBQW1DOzs7QUFDbkM7RUFBd0M7OztBQUN4QztFQUFpQzs7O0FBQ2pDO0VBQXFDOzs7QUFDckM7RUFBOEM7OztBQUM5QztFQUFvQzs7O0FBQ3BDO0VBQXNDOzs7QUFDdEM7RUFBd0M7OztBQUN4QztFQUE0Qzs7O0FBQzVDO0VBQXVDOzs7QUFDdkM7RUFBaUM7OztBQUNqQztFQUF3Qzs7O0FBQ3hDO0VBQWlDOzs7QUFDakM7RUFBMkM7OztBQUMzQztFQUFxQzs7O0FBQ3JDO0VBQWtDOzs7QUFDbEM7RUFBbUM7OztBQUNuQztFQUFzQzs7O0FBQ3RDO0VBQW9DOzs7QUFDcEM7RUFBZ0M7OztBQUNoQztFQUFtQzs7O0FBQ25DO0VBQXlDOzs7QUFDekM7RUFBd0M7OztBQUN4QztFQUF3Qzs7O0FBQ3hDO0VBQWlDOzs7QUFDakM7RUFBeUM7OztBQUN6QztFQUE2Qzs7O0FBQzdDO0VBQThDOzs7QUFDOUM7RUFBbUQ7OztBQUNuRDtFQUFzQzs7O0FBQ3RDO0VBQXlDOzs7QUFDekM7RUFBMEM7OztBQUMxQztFQUF5Qzs7O0FBQ3pDO0VBQTZDOzs7QUFDN0M7RUFBcUM7OztBQUNyQztFQUFvQzs7O0FBQ3BDO0VBQXVDOzs7QUFDdkM7RUFBMkM7OztBQUMzQztFQUFvQzs7O0FBQ3BDO0VBQWlDOzs7QUFDakM7RUFBa0M7OztBQUNsQztFQUF1Qzs7O0FBQ3ZDO0VBQW9DOzs7QUFDcEM7RUFBMEM7OztBQUMxQztFQUFtQzs7O0FBQ25DO0VBQThDOzs7QUFDOUM7RUFBNEM7OztBQUM1QztFQUFvQzs7O0FBQ3BDO0VBQXFDOzs7QUFDckM7RUFBa0M7OztBQUNsQztFQUFnQzs7O0FBQ2hDO0VBQXVDOzs7QUFDdkM7RUFBdUM7OztBQUN2QztFQUErQjs7O0FBQy9CO0VBQXNDOzs7QUFDdEM7RUFBa0M7OztBQUNsQztFQUFpQzs7O0FBQ2pDO0VBQWtDOzs7QUFDbEM7RUFBZ0M7OztBQUNoQztFQUF1Qzs7O0FBQ3ZDO0VBQW1DOzs7QUFDbkM7RUFBdUM7OztBQUN2QztFQUEwQzs7O0FBQzFDO0VBQXNDOzs7QUFDdEM7RUFBbUM7OztBQUNuQztFQUFtQzs7O0FBQ25DO0VBQXlDOzs7QUFDekM7RUFBMEM7OztBQUMxQztFQUE4Qzs7O0FBQzlDO0VBQTBDOzs7QUFDMUM7RUFBb0M7OztBQUNwQztFQUFrQzs7O0FBQ2xDO0VBQW9DOzs7QUFDcEM7RUFBa0M7OztBQUNsQztFQUF5Qzs7O0FBQ3pDO0VBQTJDOzs7QUFDM0M7RUFBdUM7OztBQUN2QztFQUF5Qzs7O0FBQ3pDO0VBQW1DOzs7QUFDbkM7RUFBc0M7OztBQUN0QztFQUFzQzs7O0FBQ3RDO0VBQXdDOzs7QUFDeEM7RUFBbUM7OztBQUNuQztFQUF5Qzs7O0FBQ3pDO0VBQXdDOzs7QUFDeEM7RUFBd0M7OztBQUN4QztFQUEwQzs7O0FBQzFDO0VBQStDOzs7QUFDL0M7RUFBMEM7OztBQUMxQztFQUFvQzs7O0FBQ3BDO0VBQTJDOzs7QUFDM0M7RUFBcUM7OztBQUNyQztFQUFpQzs7O0FBQ2pDO0VBQXlDOzs7QUFDekM7RUFBK0M7OztBQUMvQztFQUFvQzs7O0FBQ3BDO0VBQWlDOzs7QUFDakM7RUFBcUM7OztBQUNyQztFQUFzQzs7O0FBQ3RDO0VBQTRDOzs7QUFDNUM7RUFBd0M7OztBQUN4QztFQUF3Qzs7O0FBQ3hDO0VBQThDOzs7QUFDOUM7RUFBdUM7OztBQUN2QztFQUF1Qzs7O0FBQ3ZDO0VBQXdDOzs7QUFDeEM7RUFBK0M7OztBQUMvQztFQUE2Qzs7O0FBQzdDO0VBQXNDOzs7QUFDdEM7RUFBNEM7OztBQUM1QztFQUF1Qzs7O0FBQ3ZDO0VBQWdEOzs7QUFDaEQ7RUFBMEM7OztBQUMxQztFQUFxQzs7O0FBQ3JDO0VBQWtDOzs7QUFDbEM7RUFBbUM7OztBQUNuQztFQUFpQzs7O0FBQ2pDO0VBQXFDOzs7QUFDckM7RUFBd0M7OztBQUN4QztFQUErQzs7O0FBQy9DO0VBQXVDOzs7QUFDdkM7RUFBbUM7OztBQUNuQztFQUFrQzs7O0FBQ2xDO0VBQXlDOzs7QUFDekM7RUFBK0M7OztBQUMvQztFQUE2Qzs7O0FBQzdDO0VBQXdDOzs7QUFDeEM7RUFBdUM7OztBQUN2QztFQUF1Qzs7O0FBQ3ZDO0VBQTRDOzs7QUFDNUM7RUFBNEM7OztBQUM1QztFQUE2Qzs7O0FBQzdDO0VBQTBDOzs7QUFDMUM7RUFBeUM7OztBQUN6QztFQUFzQzs7O0FBQ3RDO0VBQTBDOzs7QUFDMUM7RUFBdUM7OztBQUN2QztFQUFrQzs7O0FBQ2xDO0VBQTBDOzs7QUFDMUM7RUFBc0M7OztBQUN0QztFQUFxQzs7O0FBQ3JDO0VBQW9DOzs7QUFDcEM7RUFBdUM7OztBQUN2QztBQUNBO0VBQWdDOzs7QUFDaEM7RUFBb0M7OztBQUNwQztFQUF1Qzs7O0FBQ3ZDO0VBQTJDOzs7QUFDM0M7RUFBb0M7OztBQUNwQztFQUFrQzs7O0FBQ2xDO0VBQXlDOzs7QUFDekM7RUFBc0M7OztBQUN0QztFQUF1Qzs7O0FBQ3ZDO0VBQXdDOzs7QUFDeEM7RUFBbUM7OztBQUNuQztFQUFrQzs7O0FBQ2xDO0VBQWlDOzs7QUFDakM7RUFBMEM7OztBQUMxQztFQUFvQzs7O0FBQ3BDO0VBQXdDOzs7QUFDeEM7RUFBd0M7OztBQUN4QztFQUFpQzs7O0FBQ2pDO0VBQWtDOzs7QUFDbEM7RUFBcUM7OztBQUNyQztFQUFrQzs7O0FBQ2xDO0VBQXVDOzs7QUFDdkM7RUFBcUM7OztBQUNyQztFQUF5Qzs7O0FBQ3pDO0VBQTRDOzs7QUFDNUM7RUFBb0M7OztBQUNwQztFQUFrQzs7O0FBQ2xDO0VBQW1DOzs7QUFDbkM7RUFBc0M7OztBQUN0QztFQUEwQzs7O0FBQzFDO0VBQTJDOzs7QUFDM0M7RUFBNEM7OztBQUM1QztFQUF5Qzs7O0FBQ3pDO0VBQWtDOzs7QUFDbEM7RUFBb0M7OztBQUNwQztFQUFrQzs7O0FBQ2xDO0VBQW9DOzs7QUFDcEM7RUFBcUM7OztBQUNyQztFQUFvQzs7O0FBQ3BDO0VBQXFDOzs7QUFDckM7RUFBb0M7OztBQUNwQztFQUF3Qzs7O0FBQ3hDO0VBQWtDOzs7QUFDbEM7RUFBa0M7OztBQUNsQztFQUFtQzs7O0FBQ25DO0VBQWlDOzs7QUFDakM7RUFBa0M7OztBQUNsQztFQUFtQzs7O0FBQ25DO0VBQXFDOzs7QUFDckM7RUFBcUM7OztBQUNyQztFQUFpQzs7O0FBQ2pDO0VBQXdDOzs7QUFDeEM7RUFBc0M7OztBQUN0QztFQUFxQzs7O0FBQ3JDO0VBQThDOzs7QUFDOUM7RUFBcUM7OztBQUNyQztFQUFvQzs7O0FBQ3BDO0VBQW1DOzs7QUFDbkM7RUFBbUM7OztBQUNuQztFQUF3Qzs7O0FBQ3hDO0VBQWlDOzs7QUFDakM7RUFBaUM7OztBQUNqQztFQUF1Qzs7O0FBQ3ZDO0VBQW9DOzs7QUFDcEM7RUFBaUM7OztBQUNqQztFQUFrQzs7O0FBQ2xDO0VBQWtDOzs7QUFDbEM7RUFBbUM7OztBQUNuQztFQUEyQzs7O0FBQzNDO0VBQStCOzs7QUFDL0I7RUFBc0M7OztBQUN0QztFQUFxQzs7O0FBQ3JDO0VBQWtDOzs7QUFDbEM7RUFBbUM7OztBQUNuQztFQUFnQzs7O0FBQ2hDO0VBQW9DOzs7QUFDcEM7RUFBcUM7OztBQUNyQztFQUFtQzs7O0FBQ25DO0VBQW1DOzs7QUFDbkM7RUFBd0M7OztBQUN4QztFQUEwQzs7O0FBQzFDO0VBQWlDOzs7QUFDakM7RUFBc0M7OztBQUN0QztFQUE0Qzs7O0FBQzVDO0VBQXNDOzs7QUFDdEM7RUFBbUM7OztBQUNuQztFQUFxQzs7O0FBQ3JDO0VBQXFDOzs7QUFDckM7RUFBbUM7OztBQUNuQztFQUF3Qzs7O0FBQ3hDO0VBQW9DOzs7QUFDcEM7RUFBbUM7OztBQUNuQztFQUEwQzs7O0FBQzFDO0VBQWtDOzs7QUFDbEM7RUFBdUM7OztBQUN2QztFQUF5Qzs7O0FBQ3pDO0VBQXVDOzs7QUFDdkM7RUFBd0M7OztBQUN4QztFQUFpQzs7O0FBQ2pDO0VBQW9DOzs7QUFDcEM7RUFBa0M7OztBQUNsQztFQUFpQzs7O0FBQ2pDO0VBQXNDOzs7QUFDdEM7RUFBNEM7OztBQUM1QztFQUEyQzs7O0FBQzNDO0VBQXlDOzs7QUFDekM7RUFBc0M7OztBQUN0QztFQUFzQzs7O0FBQ3RDO0VBQWlDOzs7QUFDakM7RUFBaUM7OztBQUNqQztFQUFxQzs7O0FBQ3JDO0VBQXdDOzs7QUFDeEM7RUFBbUM7OztBQUNuQztFQUFrQzs7O0FBQ2xDO0VBQXNDOzs7QUFDdEM7RUFBaUM7OztBQUNqQztFQUFxQzs7O0FBQ3JDO0VBQW9DOzs7QUFDcEM7RUFBb0M7OztBQUNwQztFQUEyQzs7O0FBQzNDO0VBQWlDOzs7QUFDakM7RUFBc0M7OztBQUN0QztFQUFnRDs7O0FBQ2hEO0VBQWdEOzs7QUFDaEQ7RUFBaUQ7OztBQUNqRDtFQUE4Qzs7O0FBQzlDO0VBQXVDOzs7QUFDdkM7RUFBeUM7OztBQUN6QztFQUFpQzs7O0FBQ2pDO0VBQW9DOzs7QUFDcEM7RUFBa0M7OztBQUNsQztFQUFtQzs7O0FBQ25DO0VBQXNDOzs7QUFDdEM7RUFBc0M7OztBQUN0QztFQUFpQzs7O0FBQ2pDO0VBQXdDOzs7QUFDeEM7RUFBZ0M7OztBQUNoQztFQUF1Qzs7O0FBQ3ZDO0VBQTJDOzs7QUFDM0M7RUFBdUM7OztBQUN2QztFQUEyQzs7O0FBQzNDO0VBQW9DOzs7QUFDcEM7RUFBc0M7OztBQUN0QztFQUFxQzs7O0FBQ3JDO0VBQW1DOzs7QUFDbkM7RUFBaUM7OztBQUNqQztFQUF3Qzs7O0FBQ3hDO0VBQXdDOzs7QUFDeEM7RUFBMEM7OztBQUMxQztFQUEwQzs7O0FBQzFDO0VBQWlDOzs7QUFDakM7RUFBcUM7OztBQUNyQztFQUFtQzs7O0FBQ25DO0VBQWtDOzs7QUFDbEM7RUFBb0M7OztBQUNwQztFQUFtQzs7O0FBQ25DO0VBQXFDOzs7QUFDckM7RUFBbUM7OztBQUNuQztFQUFrQzs7O0FBQ2xDO0VBQW1DOzs7QUFDbkM7RUFBcUM7OztBQUNyQztFQUFnQzs7O0FBQ2hDO0VBQXNDOzs7QUFDdEM7RUFBNkM7OztBQUM3QztFQUFtQzs7O0FBQ25DO0VBQXFDOzs7QUFDckM7RUFBb0M7OztBQUNwQztFQUFvQzs7O0FBQ3BDO0VBQW1DOzs7QUFDbkM7RUFBc0M7OztBQUN0QztFQUF1Qzs7O0FBQ3ZDO0VBQTJDOzs7QUFDM0M7RUFBaUQ7OztBQUNqRDtFQUE2Qzs7O0FBQzdDO0VBQXVDOzs7QUFDdkM7RUFBc0M7OztBQUN0QztFQUFrQzs7O0FBQ2xDO0VBQXlDOzs7QUFDekM7RUFBeUM7OztBQUN6QztFQUFtQzs7O0FBQ25DO0VBQWdDOzs7QUFDaEM7RUFBcUM7OztBQUNyQztFQUFtQzs7O0FBQ25DO0VBQW1DOzs7QUFDbkM7RUFBdUM7OztBQUN2QztFQUFpQzs7O0FBQ2pDO0VBQW1DOzs7QUFDbkM7RUFBdUM7OztBQUN2QztFQUEyQzs7O0FBQzNDO0VBQTRDOzs7QUFDNUM7RUFBZ0Q7OztBQUNoRDtFQUF3Qzs7O0FBQ3hDO0VBQTRDOzs7QUFDNUM7RUFBcUM7OztBQUNyQztFQUFpQzs7O0FBQ2pDO0VBQTBDOzs7QUFDMUM7RUFBbUM7OztBQUNuQztFQUF1Qzs7O0FBQ3ZDO0VBQXFDOzs7QUFDckM7RUFBMEM7OztBQUMxQztFQUFvQzs7O0FBQ3BDO0VBQWtDOzs7QUFDbEM7RUFBb0M7OztBQUNwQztFQUFpQzs7O0FBQ2pDO0VBQTBDOzs7QUFDMUM7RUFBbUM7OztBQUNuQztFQUFzQzs7O0FBQ3RDO0VBQW1DOzs7QUFDbkM7QUFDQTtFQUFpQzs7O0FBQ2pDO0VBQW9DOzs7QUFDcEM7RUFBc0M7OztBQUN0QztFQUEwQzs7O0FBQzFDO0VBQWdDOzs7QUFDaEM7RUFBZ0M7OztBQUNoQztFQUF3Qzs7O0FBQ3hDO0VBQXlDOzs7QUFDekM7RUFBMkM7OztBQUMzQztFQUEwQzs7O0FBQzFDO0VBQWlEOzs7QUFDakQ7RUFBb0M7OztBQUNwQztFQUF5Qzs7O0FBQ3pDO0VBQStCOzs7QUFDL0I7RUFBcUM7OztBQUNyQztFQUFtQzs7O0FBQ25DO0VBQWtDOzs7QUFDbEM7RUFBMEM7OztBQUMxQztFQUFnQzs7O0FBQ2hDO0VBQWtDOzs7QUFDbEM7RUFBb0M7OztBQUNwQztFQUFrQzs7O0FBQ2xDO0VBQXNDOzs7QUFDdEM7RUFBd0M7OztBQUN4QztFQUF5Qzs7O0FBQ3pDO0VBQW9DOzs7QUFDcEM7RUFBbUM7OztBQUNuQztFQUFtQzs7O0FBQ25DO0VBQXdDOzs7QUFDeEM7RUFBc0M7OztBQUN0QztFQUEwQzs7O0FBQzFDO0VBQXNDOzs7QUFDdEM7RUFBb0M7OztBQUNwQztFQUFxQzs7O0FBQ3JDO0VBQTJDOzs7QUFDM0M7RUFBa0M7OztBQUNsQztFQUFvQzs7O0FBQ3BDO0VBQWtDOzs7QUFDbEM7RUFBeUM7OztBQUN6QztFQUFnQzs7O0FBQ2hDO0VBQW1DOzs7QUFDbkM7RUFBa0M7OztBQUNsQztFQUFnQzs7O0FBQ2hDO0VBQW9DOzs7QUFDcEM7RUFBc0M7OztBQUN0QztFQUFvQzs7O0FBQ3BDO0VBQXVDOzs7QUFDdkM7RUFBdUM7OztBQUN2QztFQUF5Qzs7O0FBQ3pDO0VBQXlDOzs7QUFDekM7RUFBeUM7OztBQUN6QztFQUFvQzs7O0FBQ3BDO0VBQXVDOzs7QUFDdkM7RUFBc0M7OztBQUN0QztFQUF5Qzs7O0FBQ3pDO0VBQXdDOzs7QUFDeEM7RUFBOEM7OztBQUM5QztFQUE2Qzs7O0FBQzdDO0VBQWtDOzs7QUFDbEM7RUFBd0M7OztBQUN4QztFQUF5Qzs7O0FBQ3pDO0VBQXlDOzs7QUFDekM7RUFBZ0M7OztBQUNoQztFQUF1Qzs7O0FBQ3ZDO0VBQTJDOzs7QUFDM0M7RUFBMkM7OztBQUMzQztFQUEwQzs7O0FBQzFDO0VBQXVDOzs7QUFDdkM7RUFBa0M7OztBQUNsQztFQUFzQzs7O0FBQ3RDO0VBQXdDOzs7QUFDeEM7RUFBNkM7OztBQUM3QztFQUE2Qzs7O0FBQzdDO0VBQWtDOzs7QUFDbEM7RUFBMEM7OztBQUMxQztFQUE0Qzs7O0FBQzVDO0VBQWlDOzs7QUFDakM7RUFBd0M7OztBQUN4QztFQUF3Qzs7O0FBQ3hDO0VBQWlDOzs7QUFDakM7RUFBaUM7OztBQUNqQztFQUF3Qzs7O0FBQ3hDO0VBQXdDOzs7QUFDeEM7RUFBb0M7OztBQUNwQztFQUFpQzs7O0FBQ2pDO0VBQW1DOzs7QUFDbkM7RUFBZ0M7OztBQUNoQztFQUFzQzs7O0FBQ3RDO0VBQWlDOzs7QUFDakM7RUFBcUM7OztBQUNyQztFQUF1Qzs7O0FBQ3ZDO0VBQXNDOzs7QUFDdEM7RUFBaUM7OztBQUNqQztFQUEwQzs7O0FBQzFDO0VBQXlDOzs7QUFDekM7RUFBZ0Q7OztBQUNoRDtFQUFvRDs7O0FBQ3BEO0VBQWtDOzs7QUFDbEM7RUFBdUM7OztBQUN2QztFQUF5Qzs7O0FBQ3pDO0VBQTRDOzs7QUFDNUM7RUFBbUM7OztBQUNuQztFQUF5Qzs7O0FBQ3pDO0VBQW1DOzs7QUFDbkM7RUFBK0I7OztBQUMvQjtFQUFtQzs7O0FBQ25DO0VBQXFDOzs7QUFDckM7RUFBNEM7OztBQUM1QztFQUFzQzs7O0FBQ3RDO0VBQXNDOzs7QUFDdEM7RUFBa0M7OztBQUNsQztFQUF1Qzs7O0FBQ3ZDO0VBQXdDOzs7QUFDeEM7RUFBa0M7OztBQUNsQztFQUFzQzs7O0FBQ3RDO0VBQXNDOzs7QUFDdEM7RUFBMEM7OztBQUMxQztFQUFvQzs7O0FBQ3BDO0VBQW1DOzs7QUFDbkM7RUFBeUM7OztBQUN6QztFQUFvQzs7O0FBQ3BDO0VBQWtDOzs7QUFDbEM7RUFBd0M7OztBQUN4QztFQUFtQzs7O0FBQ25DO0VBQWtDOzs7QUFDbEM7RUFBb0M7OztBQUNwQztFQUFvQzs7O0FBQ3BDO0VBQXNDOzs7QUFDdEM7RUFBbUM7OztBQUNuQztFQUF5Qzs7O0FBQ3pDO0VBQTBDOzs7QUFDMUM7RUFBbUM7OztBQUNuQztFQUFpQzs7O0FBQ2pDO0VBQXFDOzs7QUFDckM7RUFBdUM7OztBQUN2QztFQUFtQzs7O0FBQ25DO0VBQWtDOzs7QUFDbEM7RUFBc0M7OztBQUN0QztFQUFtQzs7O0FBQ25DO0VBQXVDOzs7QUFDdkM7RUFBeUM7OztBQUN6QztFQUFzQzs7O0FBQ3RDO0VBQXFDOzs7QUFDckM7RUFBb0M7OztBQUNwQztFQUFnQzs7O0FBQ2hDO0VBQW1DOzs7QUFDbkM7RUFBaUM7OztBQUNqQztFQUFpQzs7O0FBQ2pDO0VBQWtDOzs7QUFDbEM7RUFBbUM7OztBQUNuQztFQUF1Qzs7O0FBQ3ZDO0VBQW9DOzs7QUFDcEM7RUFBa0M7OztBQUNsQztFQUFnQzs7O0FBQ2hDO0VBQXVDOzs7QUFDdkM7RUFBdUM7OztBQUN2QztFQUFrQzs7O0FBQ2xDO0VBQTJDOzs7QUFDM0M7RUFBNkM7OztBQUM3QztFQUEyQzs7O0FBQzNDO0VBQW9DOzs7QUFDcEM7RUFBdUM7OztBQUN2QztFQUFvQzs7O0FBQ3BDO0VBQXFDOzs7QUFDckM7RUFBbUM7OztBQUNuQztFQUFpQzs7O0FBQ2pDO0VBQXNDOzs7QUFDdEM7RUFBMkM7OztBQUMzQztFQUFpQzs7O0FBQ2pDO0VBQW1DOzs7QUFDbkM7RUFBbUM7OztBQUNuQztFQUF3Qzs7O0FBQ3hDO0VBQW1DOzs7QUFDbkM7RUFBbUM7OztBQUNuQztFQUFvQzs7O0FBQ3BDO0VBQW1DOzs7QUFDbkM7RUFBMEM7OztBQUMxQztFQUE0Qzs7O0FBQzVDO0VBQXlDOzs7QUFDekM7RUFBd0M7OztBQUN4QztFQUF3Qzs7O0FBQ3hDO0VBQXFDOzs7QUFDckM7RUFBcUM7OztBQUNyQztFQUFtQzs7O0FBQ25DO0VBQW1DOzs7QUFDbkM7RUFBeUM7OztBQUN6QztFQUFtQzs7O0FBQ25DO0VBQWtDOzs7QUFDbEM7RUFBc0M7OztBQUN0QztFQUE2Qzs7O0FBQzdDO0VBQXlDOzs7QUFDekM7RUFBd0M7OztBQUN4QztFQUF1Qzs7O0FBQ3ZDO0VBQWlDOzs7QUFDakM7RUFBMEM7OztBQUMxQztFQUF5Qzs7O0FBQ3pDO0VBQXdDOzs7QUFDeEM7RUFBeUM7OztBQUN6QztFQUE0Qzs7O0FBQzVDO0VBQTBDOzs7QUFDMUM7RUFBcUM7OztBQUNyQztFQUFtQzs7O0FBQ25DO0VBQXdDOzs7QUFDeEM7RUFBaUM7OztBQUNqQztFQUF3Qzs7O0FBQ3hDO0VBQTBDOzs7QUFDMUM7RUFBeUM7OztBQUN6QztFQUFtQzs7O0FBQ25DO0VBQXNDOzs7QUFDdEM7RUFBcUM7OztBQUNyQztFQUF3Qzs7O0FBQ3hDO0VBQW9DOzs7QUFDcEM7RUFBb0M7OztBQUNwQztFQUFpQzs7O0FBQ2pDO0VBQW9DOzs7QUFDcEM7RUFBbUM7OztBQUNuQztFQUFtQzs7O0FBQ25DO0VBQTBDOzs7QUFDMUM7RUFBa0M7OztBQUNsQztFQUE2Qzs7O0FBQzdDO0VBQXFDOzs7QUFDckM7RUFBa0M7OztBQUNsQztFQUFrQzs7O0FBQ2xDO0VBQXVDOzs7QUFDdkM7RUFBa0M7OztBQUNsQztFQUFtQzs7O0FBQ25DO0VBQXNDOzs7QUFDdEM7RUFBdUM7OztBQUN2QztFQUFrQzs7O0FBQ2xDO0VBQXVDOzs7QUFDdkM7RUFBdUM7OztBQUN2QztFQUFpQzs7O0FBQ2pDO0VBQW9DOzs7QUFDcEM7RUFBd0M7OztBQUN4QztFQUFnQzs7O0FBQ2hDO0VBQXFDOzs7QUFDckM7RUFBMkM7OztBQUMzQztFQUE0Qzs7O0FBQzVDO0VBQXlDOzs7QUFDekM7RUFBc0M7OztBQUN0QztFQUFvQzs7O0FBQ3BDO0VBQXFDOzs7QUFDckM7RUFBa0M7OztBQUNsQztFQUF3Qzs7O0FBQ3hDO0VBQWlDOzs7QUFDakM7RUFBNEM7OztBQUM1QztFQUEwQzs7O0FBQzFDO0VBQTZDOzs7QUFDN0M7RUFBMkM7OztBQUMzQztFQUFzQzs7O0FBQ3RDO0VBQThDOzs7QUFDOUM7RUFBNEM7OztBQUM1QztFQUFvQzs7O0FBQ3BDO0VBQXVDOzs7QUFDdkM7RUFBdUM7OztBQUN2QztFQUFnQzs7O0FBQ2hDO0VBQTBDOzs7QUFDMUM7RUFBb0M7OztBQUNwQztFQUFtQzs7O0FBQ25DO0VBQW9DOzs7QUFDcEM7RUFBb0M7OztBQUNwQztFQUFvQzs7O0FBQ3BDO0VBQXNDOzs7QUFDdEM7RUFBbUM7OztBQUNuQztFQUF3Qzs7O0FBQ3hDO0VBQTRDOzs7QUFDNUM7RUFBd0M7OztBQUN4QztFQUEyQzs7O0FBQzNDO0VBQTJDOzs7QUFDM0M7RUFBa0M7OztBQUNsQztFQUFpQzs7O0FBQ2pDO0VBQThDOzs7QUFDOUM7RUFBc0M7OztBQUN0QztFQUEwQzs7O0FBQzFDO0VBQTBDOzs7QUFDMUM7RUFBeUM7OztBQUN6QztFQUF1Qzs7O0FBQ3ZDO0VBQWtDOzs7QUFDbEM7RUFBeUM7OztBQUN6QztFQUF5Qzs7O0FBQ3pDO0VBQTBDOzs7QUFDMUM7RUFBeUM7OztBQUN6QztFQUF3Qzs7O0FBQ3hDO0VBQXlDOzs7QUFDekM7RUFBd0M7OztBQUN4QztFQUFpQzs7O0FBQ2pDO0VBQXdDOzs7QUFDeEM7RUFBc0M7OztBQUN0QztFQUFrQzs7O0FBQ2xDO0VBQXNDOzs7QUFDdEM7RUFBbUM7OztBQUNuQztFQUFtQzs7O0FBQ25DO0VBQXdDOzs7QUFDeEM7RUFBMEM7OztBQUMxQztFQUFtQzs7O0FBQ25DO0VBQXFDOzs7QUFDckM7RUFBd0M7OztBQUN4QztFQUF5Qzs7O0FBQ3pDO0VBQXdDOzs7QUFDeEM7RUFBK0M7OztBQUMvQztFQUFzQzs7O0FBQ3RDO0VBQW1DOzs7QUFDbkM7RUFBcUM7OztBQUNyQztFQUE2Qzs7O0FBQzdDO0VBQWdDOzs7QUFDaEM7RUFBd0M7OztBQUN4QztFQUF3Qzs7O0FBQ3hDO0VBQW1DOzs7QUFDbkM7RUFBcUM7OztBQUNyQztFQUFpQzs7O0FBQ2pDO0VBQXVDOzs7QUFDdkM7RUFBb0M7OztBQUNwQztFQUEwQzs7O0FBQzFDO0VBQXNDOzs7QUFDdEM7RUFBaUM7OztBQUNqQztFQUFxQzs7O0FBQ3JDO0VBQW9DOzs7QUFDcEM7RUFBa0M7OztBQUNsQztFQUF5Qzs7O0FBQ3pDO0VBQW1DOzs7QUFDbkM7RUFBdUM7OztBQUN2QztFQUFvQzs7O0FBQ3BDO0VBQTJDOzs7QUFDM0M7RUFBZ0M7OztBQUNoQztFQUFpQzs7O0FBQ2pDO0VBQWlDOzs7QUFDakM7RUFBa0M7OztBQUNsQztFQUFpQzs7O0FBQ2pDO0VBQXNDOzs7QUFDdEM7RUFBa0M7OztBQUNsQztFQUF1Qzs7O0FBQ3ZDO0VBQXFDOzs7QUFDckM7RUFBMkM7OztBQUMzQztFQUE2Qzs7O0FBQzdDO0VBQTRDOzs7QUFDNUM7RUFBMEM7OztBQUMxQztFQUFrQzs7O0FBQ2xDO0VBQXFDOzs7QUFDckM7RUFBd0M7OztBQUN4QztFQUF1Qzs7O0FBQ3ZDO0VBQStCOzs7QUFDL0I7RUFBcUM7OztBQUNyQztFQUFvQzs7O0FBQ3BDO0VBQXlDOzs7QUFDekM7RUFBMEM7OztBQUMxQztFQUFvQzs7O0FBQ3BDO0VBQXNDOzs7QUFDdEM7RUFBd0M7OztBQUN4QztFQUE4Qzs7O0FBQzlDO0VBQTZDOzs7QUFDN0M7RUFBNkM7OztBQUM3QztFQUFnRDs7O0FBQ2hEO0VBQXVEOzs7QUFDdkQ7RUFBd0M7OztBQUN4QztFQUF3Qzs7O0FBQ3hDO0VBQXNDOzs7QUFDdEM7RUFBc0M7OztBQUN0QztFQUF1Qzs7O0FBQ3ZDO0VBQWtDOzs7QUFDbEM7RUFBeUM7OztBQUN6QztFQUFpQzs7O0FBQ2pDO0VBQXVDOzs7QUFDdkM7RUFBa0M7OztBQUNsQztFQUF1Qzs7O0FBQ3ZDO0VBQXNDOzs7QUFDdEM7RUFBbUM7OztBQUNuQztFQUF5Qzs7O0FBQ3pDO0VBQW9DOzs7QUFDcEM7RUFBa0M7OztBQUNsQztFQUFrQzs7O0FBQ2xDO0VBQWtDOzs7QUFDbEM7RUFBdUM7OztBQUN2QztFQUFvQzs7O0FBQ3BDO0VBQTZDOzs7QUFDN0M7RUFBc0M7OztBQUN0QztFQUEwQzs7O0FBQzFDO0VBQWtDOzs7QUFDbEM7RUFBaUM7OztBQUNqQztFQUF3Qzs7O0FBQ3hDO0VBQTRDOzs7QUFDNUM7RUFBa0M7OztBQUNsQztFQUFzQzs7O0FBQ3RDO0VBQWlDOzs7QUFDakM7RUFBbUM7OztBQUNuQztBQUNBO0VBQW1DOzs7QUFDbkM7RUFBa0M7OztBQUNsQztFQUEwQzs7O0FBQzFDO0VBQTBDOzs7QUFDMUM7RUFBeUM7OztBQUN6QztFQUF5Qzs7O0FBQ3pDO0VBQW1DOzs7QUFDbkM7RUFBZ0M7OztBQUNoQztFQUFtQzs7O0FBQ25DO0VBQTBDOzs7QUFDMUM7RUFBK0I7OztBQUMvQjtFQUFtQzs7O0FBQ25DO0VBQW9DOzs7QUFDcEM7RUFBMkM7OztBQUMzQztFQUFrQzs7O0FBQ2xDO0VBQWlDOzs7QUFDakM7RUFBbUM7OztBQUNuQztFQUFrQzs7O0FBQ2xDO0VBQXFDOzs7QUFDckM7RUFBMkM7OztBQUMzQztFQUFzQzs7O0FBQ3RDO0VBQWlDOzs7QUFDakM7RUFBcUM7OztBQUNyQztFQUF3Qzs7O0FBQ3hDO0VBQTZDOzs7QUFDN0M7RUFBdUM7OztBQUN2QztFQUFtQzs7O0FBQ25DO0VBQW1DOzs7QUFDbkM7RUFBdUM7OztBQUN2QztFQUFvQzs7O0FBQ3BDO0VBQW1DOzs7QUFDbkM7RUFBZ0M7OztBQUNoQztFQUFnQzs7O0FBQ2hDO0VBQWlDOzs7QUFDakM7RUFBcUM7OztBQUNyQztFQUEyQzs7O0FBQzNDO0VBQTJDOzs7QUFDM0M7RUFBdUM7OztBQUN2QztFQUF3Qzs7O0FBQ3hDO0VBQXVDOzs7QUFDdkM7RUFBcUM7OztBQUNyQztFQUFzQzs7O0FBQ3RDO0VBQXlDOzs7QUFDekM7RUFBMEM7OztBQUMxQztFQUF5Qzs7O0FBQ3pDO0VBQXNDOzs7QUFDdEM7RUFBb0M7OztBQUNwQztFQUF1Qzs7O0FBQ3ZDO0VBQXVDOzs7QUFDdkM7RUFBc0M7OztBQUN0QztFQUF3Qzs7O0FBQ3hDO0VBQXdDOzs7QUFDeEM7RUFBdUM7OztBQUN2QztFQUFxQzs7O0FBQ3JDO0VBQXFDOzs7QUFDckM7RUFBdUM7OztBQUN2QztFQUFrQzs7O0FBQ2xDO0VBQXNDOzs7QUFDdEM7RUFBaUM7OztBQUNqQztFQUFxQzs7O0FBQ3JDO0VBQTBDOzs7QUFDMUM7RUFBcUM7OztBQUNyQztFQUFtQzs7O0FBQ25DO0VBQTBDOzs7QUFDMUM7RUFBa0M7OztBQUNsQztFQUF5Qzs7O0FBQ3pDO0VBQXVDOzs7QUFDdkM7RUFBb0M7OztBQUNwQztFQUFtQzs7O0FBQ25DO0VBQTBDOzs7QUFDMUM7RUFBaUM7OztBQUNqQztFQUFrQzs7O0FBQ2xDO0VBQWtDOzs7QUFDbEM7RUFBa0M7OztBQUNsQztFQUF3Qzs7O0FBQ3hDO0VBQW1DOzs7QUFDbkM7RUFBa0M7OztBQUNsQztFQUF5Qzs7O0FBQ3pDO0VBQW9DOzs7QUFDcEM7RUFBaUM7OztBQUNqQztFQUErQjs7O0FBQy9CO0VBQWdDOzs7QUFDaEM7RUFBNEM7OztBQUM1QztFQUF3Qzs7O0FBQ3hDO0VBQXdDOzs7QUFDeEM7RUFBdUM7OztBQUN2QztFQUFzQzs7O0FBQ3RDO0VBQXFDOzs7QUFDckM7RUFBeUM7OztBQUN6QztFQUFrQzs7O0FBQ2xDO0VBQW9DOzs7QUFDcEM7RUFBbUM7OztBQUNuQztFQUFzQzs7O0FBQ3RDO0VBQWtDOzs7QUFDbEM7RUFBbUM7OztBQUNuQztFQUFrQzs7O0FBQ2xDO0VBQW1DOzs7QUFDbkM7RUFBMkM7OztBQUMzQztFQUFtQzs7O0FBQ25DO0VBQXFDOzs7QUFDckM7RUFBNEM7OztBQUM1QztFQUF1Qzs7O0FBQ3ZDO0VBQWtDOzs7QUFDbEM7RUFBaUM7OztBQUNqQztFQUF3Qzs7O0FBQ3hDO0VBQWlDOzs7QUFDakM7RUFBeUM7OztBQUN6QztFQUE0Qzs7O0FBQzVDO0VBQTRDOzs7QUFDNUM7RUFBMkM7OztBQUMzQztFQUFvQzs7O0FBQ3BDO0VBQXdDOzs7QUFDeEM7RUFBdUM7OztBQUN2QztFQUEyQzs7O0FBQzNDO0VBQWdDOzs7QUFDaEM7RUFBaUQ7OztBQUNqRDtFQUFnRDs7O0FBQ2hEO0VBQXFDOzs7QUFDckM7RUFBc0M7OztBQUN0QztFQUE2Qzs7O0FBQzdDO0VBQXVDOzs7QUFDdkM7RUFBdUM7OztBQUN2QztFQUFvQzs7O0FBQ3BDO0VBQW9DOzs7QUFDcEM7RUFBbUM7OztBQUNuQztFQUFrQzs7O0FBQ2xDO0VBQWlDOzs7QUFDakM7RUFBaUM7OztBQUNqQztFQUF3Qzs7O0FBQ3hDO0VBQXlDOzs7QUFDekM7RUFBa0M7OztBQUNsQztFQUFtQzs7O0FBQ25DO0VBQWlEOzs7QUFDakQ7RUFBaUM7OztBQUNqQztFQUFpQzs7O0FBQ2pDO0VBQXFDOzs7QUFDckM7RUFBcUM7OztBQUNyQztFQUFrQzs7O0FBQ2xDO0VBQW9DOzs7QUFDcEM7RUFBMkM7OztBQUMzQztFQUFrQzs7O0FDbHpDbEM7RUgwQkU7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTs7O0FBVUE7RUFFRTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7OztBSXJESjtBQUFBO0FBQUE7QUFBQTtBQU1BO0VBQ0U7RUFDQTtFQUNBO0VBQ0EsY1RMcUI7RVNNckI7RUFDQTs7QUFPRjtBQUFBO0VBRUU7RUFDQTs7O0FDdEJGO0FBQUE7QUFBQTtBQUFBO0FBTUE7RUFDRTtFQUNBO0VBQ0E7RUFDQSxjVkxxQjtFVU1yQjtFQUNBOztBQU9GO0VBQ0U7RUFDQTs7O0FDckJGO0FBQUE7QUFBQTtBQUFBO0FBTUE7RUFDRTtFQUNBO0VBQ0E7RUFDQSxjWExxQjtFV01yQjtFQUNBOztBQU9GO0VBQ0U7RUFDQTs7O0FDaEJGO0VBQ0k7RUFDQTs7O0FBR0o7RUFDSTtFQUNBOzs7QUFHSjtFQUNJO0VBQ0E7RUFDQTs7O0FBR0o7RUFDSTtFQUNBO0VBQ0E7OztBQUdKO0VBQ0k7RUFDQTtFQUNBOzs7QUFHSjtFQUNJO0VBQ0E7RUFDQTs7O0FBR0o7RUFDSTtFQUNBO0VBQ0E7OztBQUdKO0VBQ0k7RUFDQTtFQUNBOzs7QUFHSjtFQUNJO0VBQ0E7RUFDQTs7O0FBR0o7RUFDSTtFQUNBO0VBQ0E7OztBQUdKO0VBQ0k7QUFBQTtJQUVJOzs7QUFJUjtFQUNJOzs7QUFHSjtFQUNJOzs7QUFHSjtFQUNJOzs7QUFHSjtFQUNJOzs7QUFHSjtFQUNJOzs7QUFHSjtFQUNJOzs7QUFFSjtFQUNJO0VBQ0E7RUFDQTs7O0FBR0o7RUFDSTtFQUNBO0VBQ0E7RUFDQTs7O0FBR0o7RUFDSTtFQUNBO0VBQ0E7OztBQUdKO0VBQ0k7OztBQUdKO0VBQ0kiLCJmaWxlIjoic3R5bGUuY3NzIiwic291cmNlc0NvbnRlbnQiOlsiXHJcbkBpbXBvcnQgXCJ2YXJpYWJsZXNcIjsgLy8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgdmFyaWFibGVzIGluIHRoaXMgZmlsZVxyXG5cclxuLy8gQ29tbWVudCBvdXQgYmVsb3cgYW55IHBhcnRzIG9mIGJvb3RzdHJhcCBub3QgYmVpbmcgdXNlZCBpbiB0aGUgYXBwIHRvIHJlZHVjZSBzaXplIG9mIG91dHB1dCBjc3NcclxuXHJcblxyXG5AaW1wb3J0IFwibm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL2Z1bmN0aW9uc1wiO1xyXG5AaW1wb3J0IFwibm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL3ZhcmlhYmxlc1wiO1xyXG5AaW1wb3J0IFwibm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL21peGluc1wiO1xyXG5AaW1wb3J0IFwibm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL3V0aWxpdGllc1wiO1xyXG5cclxuLypAaW1wb3J0IFwibm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL21peGlucy9saXN0c1wiO1xyXG5AaW1wb3J0IFwibm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL21peGlucy9icmVha3BvaW50c1wiO1xyXG5AaW1wb3J0IFwibm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL21peGlucy9jb250YWluZXJcIjtcclxuQGltcG9ydCBcIm5vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9taXhpbnMvZ3JpZFwiO1xyXG5AaW1wb3J0IFwibm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL21peGlucy91dGlsaXRpZXNcIjsqL1xyXG5cclxuQGltcG9ydCBcIm5vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9yb290XCI7XHJcbkBpbXBvcnQgXCJub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvcmVib290XCI7XHJcbkBpbXBvcnQgXCJub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvdHlwZVwiO1xyXG5AaW1wb3J0IFwibm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL2ltYWdlc1wiO1xyXG5AaW1wb3J0IFwibm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL2NvbnRhaW5lcnNcIjtcclxuQGltcG9ydCBcIm5vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9ncmlkXCI7XHJcbkBpbXBvcnQgXCJub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvdGFibGVzXCI7XHJcbkBpbXBvcnQgXCJub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvZm9ybXNcIjtcclxuQGltcG9ydCBcIm5vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9idXR0b25zXCI7XHJcbkBpbXBvcnQgXCJub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvdHJhbnNpdGlvbnNcIjtcclxuQGltcG9ydCBcIm5vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9kcm9wZG93blwiO1xyXG5AaW1wb3J0IFwibm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL2J1dHRvbi1ncm91cFwiO1xyXG5AaW1wb3J0IFwibm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL25hdlwiO1xyXG5AaW1wb3J0IFwibm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL25hdmJhclwiO1xyXG5AaW1wb3J0IFwibm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL2NhcmRcIjtcclxuQGltcG9ydCBcIm5vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9hY2NvcmRpb25cIjtcclxuQGltcG9ydCBcIm5vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9icmVhZGNydW1iXCI7XHJcbkBpbXBvcnQgXCJub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvcGFnaW5hdGlvblwiO1xyXG5AaW1wb3J0IFwibm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL2JhZGdlXCI7XHJcbkBpbXBvcnQgXCJub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvYWxlcnRcIjtcclxuQGltcG9ydCBcIm5vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9wcm9ncmVzc1wiO1xyXG5AaW1wb3J0IFwibm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL2xpc3QtZ3JvdXBcIjtcclxuQGltcG9ydCBcIm5vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9jbG9zZVwiO1xyXG5AaW1wb3J0IFwibm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL3RvYXN0c1wiO1xyXG5AaW1wb3J0IFwibm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL21vZGFsXCI7XHJcbkBpbXBvcnQgXCJub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvdG9vbHRpcFwiO1xyXG5AaW1wb3J0IFwibm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL3BvcG92ZXJcIjtcclxuQGltcG9ydCBcIm5vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9jYXJvdXNlbFwiO1xyXG5AaW1wb3J0IFwibm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL3NwaW5uZXJzXCI7XHJcbkBpbXBvcnQgXCJub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3Mvb2ZmY2FudmFzXCI7XHJcbkBpbXBvcnQgXCJub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvcGxhY2Vob2xkZXJzXCI7XHJcblxyXG5AaW1wb3J0IFwibm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL2hlbHBlcnNcIjtcclxuXHJcbkBpbXBvcnQgXCJub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvdXRpbGl0aWVzL2FwaVwiO1xyXG5cclxuXHJcbiIsIjpyb290IHtcbiAgLy8gTm90ZTogQ3VzdG9tIHZhcmlhYmxlIHZhbHVlcyBvbmx5IHN1cHBvcnQgU2Fzc1NjcmlwdCBpbnNpZGUgYCN7fWAuXG5cbiAgLy8gQ29sb3JzXG4gIC8vXG4gIC8vIEdlbmVyYXRlIHBhbGV0dGVzIGZvciBmdWxsIGNvbG9ycywgZ3JheXMsIGFuZCB0aGVtZSBjb2xvcnMuXG5cbiAgQGVhY2ggJGNvbG9yLCAkdmFsdWUgaW4gJGNvbG9ycyB7XG4gICAgLS0jeyR2YXJpYWJsZS1wcmVmaXh9I3skY29sb3J9OiAjeyR2YWx1ZX07XG4gIH1cblxuICBAZWFjaCAkY29sb3IsICR2YWx1ZSBpbiAkZ3JheXMge1xuICAgIC0tI3skdmFyaWFibGUtcHJlZml4fWdyYXktI3skY29sb3J9OiAjeyR2YWx1ZX07XG4gIH1cblxuICBAZWFjaCAkY29sb3IsICR2YWx1ZSBpbiAkdGhlbWUtY29sb3JzIHtcbiAgICAtLSN7JHZhcmlhYmxlLXByZWZpeH0jeyRjb2xvcn06ICN7JHZhbHVlfTtcbiAgfVxuXG4gIEBlYWNoICRjb2xvciwgJHZhbHVlIGluICR0aGVtZS1jb2xvcnMtcmdiIHtcbiAgICAtLSN7JHZhcmlhYmxlLXByZWZpeH0jeyRjb2xvcn0tcmdiOiAjeyR2YWx1ZX07XG4gIH1cblxuICAtLSN7JHZhcmlhYmxlLXByZWZpeH13aGl0ZS1yZ2I6ICN7dG8tcmdiKCR3aGl0ZSl9O1xuICAtLSN7JHZhcmlhYmxlLXByZWZpeH1ibGFjay1yZ2I6ICN7dG8tcmdiKCRibGFjayl9O1xuICAtLSN7JHZhcmlhYmxlLXByZWZpeH1ib2R5LWNvbG9yLXJnYjogI3t0by1yZ2IoJGJvZHktY29sb3IpfTtcbiAgLS0jeyR2YXJpYWJsZS1wcmVmaXh9Ym9keS1iZy1yZ2I6ICN7dG8tcmdiKCRib2R5LWJnKX07XG5cbiAgLy8gRm9udHNcblxuICAvLyBOb3RlOiBVc2UgYGluc3BlY3RgIGZvciBsaXN0cyBzbyB0aGF0IHF1b3RlZCBpdGVtcyBrZWVwIHRoZSBxdW90ZXMuXG4gIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vc2Fzcy9zYXNzL2lzc3Vlcy8yMzgzI2lzc3VlY29tbWVudC0zMzYzNDkxNzJcbiAgLS0jeyR2YXJpYWJsZS1wcmVmaXh9Zm9udC1zYW5zLXNlcmlmOiAje2luc3BlY3QoJGZvbnQtZmFtaWx5LXNhbnMtc2VyaWYpfTtcbiAgLS0jeyR2YXJpYWJsZS1wcmVmaXh9Zm9udC1tb25vc3BhY2U6ICN7aW5zcGVjdCgkZm9udC1mYW1pbHktbW9ub3NwYWNlKX07XG4gIC0tI3skdmFyaWFibGUtcHJlZml4fWdyYWRpZW50OiAjeyRncmFkaWVudH07XG5cbiAgLy8gUm9vdCBhbmQgYm9keVxuICAvLyBzdHlsZWxpbnQtZGlzYWJsZSBjdXN0b20tcHJvcGVydHktZW1wdHktbGluZS1iZWZvcmVcbiAgLy8gc2Nzcy1kb2NzLXN0YXJ0IHJvb3QtYm9keS12YXJpYWJsZXNcbiAgQGlmICRmb250LXNpemUtcm9vdCAhPSBudWxsIHtcbiAgICAtLSN7JHZhcmlhYmxlLXByZWZpeH1yb290LWZvbnQtc2l6ZTogI3skZm9udC1zaXplLXJvb3R9O1xuICB9XG4gIC0tI3skdmFyaWFibGUtcHJlZml4fWJvZHktZm9udC1mYW1pbHk6ICN7JGZvbnQtZmFtaWx5LWJhc2V9O1xuICAtLSN7JHZhcmlhYmxlLXByZWZpeH1ib2R5LWZvbnQtc2l6ZTogI3skZm9udC1zaXplLWJhc2V9O1xuICAtLSN7JHZhcmlhYmxlLXByZWZpeH1ib2R5LWZvbnQtd2VpZ2h0OiAjeyRmb250LXdlaWdodC1iYXNlfTtcbiAgLS0jeyR2YXJpYWJsZS1wcmVmaXh9Ym9keS1saW5lLWhlaWdodDogI3skbGluZS1oZWlnaHQtYmFzZX07XG4gIC0tI3skdmFyaWFibGUtcHJlZml4fWJvZHktY29sb3I6ICN7JGJvZHktY29sb3J9O1xuICBAaWYgJGJvZHktdGV4dC1hbGlnbiAhPSBudWxsIHtcbiAgICAtLSN7JHZhcmlhYmxlLXByZWZpeH1ib2R5LXRleHQtYWxpZ246ICN7JGJvZHktdGV4dC1hbGlnbn07XG4gIH1cbiAgLS0jeyR2YXJpYWJsZS1wcmVmaXh9Ym9keS1iZzogI3skYm9keS1iZ307XG4gIC8vIHNjc3MtZG9jcy1lbmQgcm9vdC1ib2R5LXZhcmlhYmxlc1xuICAvLyBzdHlsZWxpbnQtZW5hYmxlIGN1c3RvbS1wcm9wZXJ0eS1lbXB0eS1saW5lLWJlZm9yZVxufVxuIiwiLy8gc3R5bGVsaW50LWRpc2FibGUgZGVjbGFyYXRpb24tbm8taW1wb3J0YW50LCBzZWxlY3Rvci1uby1xdWFsaWZ5aW5nLXR5cGUsIHByb3BlcnR5LW5vLXZlbmRvci1wcmVmaXhcblxuXG4vLyBSZWJvb3Rcbi8vXG4vLyBOb3JtYWxpemF0aW9uIG9mIEhUTUwgZWxlbWVudHMsIG1hbnVhbGx5IGZvcmtlZCBmcm9tIE5vcm1hbGl6ZS5jc3MgdG8gcmVtb3ZlXG4vLyBzdHlsZXMgdGFyZ2V0aW5nIGlycmVsZXZhbnQgYnJvd3NlcnMgd2hpbGUgYXBwbHlpbmcgbmV3IHN0eWxlcy5cbi8vXG4vLyBOb3JtYWxpemUgaXMgbGljZW5zZWQgTUlULiBodHRwczovL2dpdGh1Yi5jb20vbmVjb2xhcy9ub3JtYWxpemUuY3NzXG5cblxuLy8gRG9jdW1lbnRcbi8vXG4vLyBDaGFuZ2UgZnJvbSBgYm94LXNpemluZzogY29udGVudC1ib3hgIHNvIHRoYXQgYHdpZHRoYCBpcyBub3QgYWZmZWN0ZWQgYnkgYHBhZGRpbmdgIG9yIGBib3JkZXJgLlxuXG4qLFxuKjo6YmVmb3JlLFxuKjo6YWZ0ZXIge1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xufVxuXG5cbi8vIFJvb3Rcbi8vXG4vLyBBYmlsaXR5IHRvIHRoZSB2YWx1ZSBvZiB0aGUgcm9vdCBmb250IHNpemVzLCBhZmZlY3RpbmcgdGhlIHZhbHVlIG9mIGByZW1gLlxuLy8gbnVsbCBieSBkZWZhdWx0LCB0aHVzIG5vdGhpbmcgaXMgZ2VuZXJhdGVkLlxuXG46cm9vdCB7XG4gIEBpZiAkZm9udC1zaXplLXJvb3QgIT0gbnVsbCB7XG4gICAgZm9udC1zaXplOiB2YXIoLS0jeyR2YXJpYWJsZS1wcmVmaXh9cm9vdC1mb250LXNpemUpO1xuICB9XG5cbiAgQGlmICRlbmFibGUtc21vb3RoLXNjcm9sbCB7XG4gICAgQG1lZGlhIChwcmVmZXJzLXJlZHVjZWQtbW90aW9uOiBuby1wcmVmZXJlbmNlKSB7XG4gICAgICBzY3JvbGwtYmVoYXZpb3I6IHNtb290aDtcbiAgICB9XG4gIH1cbn1cblxuXG4vLyBCb2R5XG4vL1xuLy8gMS4gUmVtb3ZlIHRoZSBtYXJnaW4gaW4gYWxsIGJyb3dzZXJzLlxuLy8gMi4gQXMgYSBiZXN0IHByYWN0aWNlLCBhcHBseSBhIGRlZmF1bHQgYGJhY2tncm91bmQtY29sb3JgLlxuLy8gMy4gUHJldmVudCBhZGp1c3RtZW50cyBvZiBmb250IHNpemUgYWZ0ZXIgb3JpZW50YXRpb24gY2hhbmdlcyBpbiBpT1MuXG4vLyA0LiBDaGFuZ2UgdGhlIGRlZmF1bHQgdGFwIGhpZ2hsaWdodCB0byBiZSBjb21wbGV0ZWx5IHRyYW5zcGFyZW50IGluIGlPUy5cblxuLy8gc2Nzcy1kb2NzLXN0YXJ0IHJlYm9vdC1ib2R5LXJ1bGVzXG5ib2R5IHtcbiAgbWFyZ2luOiAwOyAvLyAxXG4gIGZvbnQtZmFtaWx5OiB2YXIoLS0jeyR2YXJpYWJsZS1wcmVmaXh9Ym9keS1mb250LWZhbWlseSk7XG4gIEBpbmNsdWRlIGZvbnQtc2l6ZSh2YXIoLS0jeyR2YXJpYWJsZS1wcmVmaXh9Ym9keS1mb250LXNpemUpKTtcbiAgZm9udC13ZWlnaHQ6IHZhcigtLSN7JHZhcmlhYmxlLXByZWZpeH1ib2R5LWZvbnQtd2VpZ2h0KTtcbiAgbGluZS1oZWlnaHQ6IHZhcigtLSN7JHZhcmlhYmxlLXByZWZpeH1ib2R5LWxpbmUtaGVpZ2h0KTtcbiAgY29sb3I6IHZhcigtLSN7JHZhcmlhYmxlLXByZWZpeH1ib2R5LWNvbG9yKTtcbiAgdGV4dC1hbGlnbjogdmFyKC0tI3skdmFyaWFibGUtcHJlZml4fWJvZHktdGV4dC1hbGlnbik7XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLSN7JHZhcmlhYmxlLXByZWZpeH1ib2R5LWJnKTsgLy8gMlxuICAtd2Via2l0LXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IC8vIDNcbiAgLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOiByZ2JhKCRibGFjaywgMCk7IC8vIDRcbn1cbi8vIHNjc3MtZG9jcy1lbmQgcmVib290LWJvZHktcnVsZXNcblxuXG4vLyBDb250ZW50IGdyb3VwaW5nXG4vL1xuLy8gMS4gUmVzZXQgRmlyZWZveCdzIGdyYXkgY29sb3Jcbi8vIDIuIFNldCBjb3JyZWN0IGhlaWdodCBhbmQgcHJldmVudCB0aGUgYHNpemVgIGF0dHJpYnV0ZSB0byBtYWtlIHRoZSBgaHJgIGxvb2sgbGlrZSBhbiBpbnB1dCBmaWVsZFxuXG5ociB7XG4gIG1hcmdpbjogJGhyLW1hcmdpbi15IDA7XG4gIGNvbG9yOiAkaHItY29sb3I7IC8vIDFcbiAgYmFja2dyb3VuZC1jb2xvcjogY3VycmVudENvbG9yO1xuICBib3JkZXI6IDA7XG4gIG9wYWNpdHk6ICRoci1vcGFjaXR5O1xufVxuXG5ocjpub3QoW3NpemVdKSB7XG4gIGhlaWdodDogJGhyLWhlaWdodDsgLy8gMlxufVxuXG5cbi8vIFR5cG9ncmFwaHlcbi8vXG4vLyAxLiBSZW1vdmUgdG9wIG1hcmdpbnMgZnJvbSBoZWFkaW5nc1xuLy8gICAgQnkgZGVmYXVsdCwgYDxoMT5gLWA8aDY+YCBhbGwgcmVjZWl2ZSB0b3AgYW5kIGJvdHRvbSBtYXJnaW5zLiBXZSBudWtlIHRoZSB0b3Bcbi8vICAgIG1hcmdpbiBmb3IgZWFzaWVyIGNvbnRyb2wgd2l0aGluIHR5cGUgc2NhbGVzIGFzIGl0IGF2b2lkcyBtYXJnaW4gY29sbGFwc2luZy5cblxuJWhlYWRpbmcge1xuICBtYXJnaW4tdG9wOiAwOyAvLyAxXG4gIG1hcmdpbi1ib3R0b206ICRoZWFkaW5ncy1tYXJnaW4tYm90dG9tO1xuICBmb250LWZhbWlseTogJGhlYWRpbmdzLWZvbnQtZmFtaWx5O1xuICBmb250LXN0eWxlOiAkaGVhZGluZ3MtZm9udC1zdHlsZTtcbiAgZm9udC13ZWlnaHQ6ICRoZWFkaW5ncy1mb250LXdlaWdodDtcbiAgbGluZS1oZWlnaHQ6ICRoZWFkaW5ncy1saW5lLWhlaWdodDtcbiAgY29sb3I6ICRoZWFkaW5ncy1jb2xvcjtcbn1cblxuaDEge1xuICBAZXh0ZW5kICVoZWFkaW5nO1xuICBAaW5jbHVkZSBmb250LXNpemUoJGgxLWZvbnQtc2l6ZSk7XG59XG5cbmgyIHtcbiAgQGV4dGVuZCAlaGVhZGluZztcbiAgQGluY2x1ZGUgZm9udC1zaXplKCRoMi1mb250LXNpemUpO1xufVxuXG5oMyB7XG4gIEBleHRlbmQgJWhlYWRpbmc7XG4gIEBpbmNsdWRlIGZvbnQtc2l6ZSgkaDMtZm9udC1zaXplKTtcbn1cblxuaDQge1xuICBAZXh0ZW5kICVoZWFkaW5nO1xuICBAaW5jbHVkZSBmb250LXNpemUoJGg0LWZvbnQtc2l6ZSk7XG59XG5cbmg1IHtcbiAgQGV4dGVuZCAlaGVhZGluZztcbiAgQGluY2x1ZGUgZm9udC1zaXplKCRoNS1mb250LXNpemUpO1xufVxuXG5oNiB7XG4gIEBleHRlbmQgJWhlYWRpbmc7XG4gIEBpbmNsdWRlIGZvbnQtc2l6ZSgkaDYtZm9udC1zaXplKTtcbn1cblxuXG4vLyBSZXNldCBtYXJnaW5zIG9uIHBhcmFncmFwaHNcbi8vXG4vLyBTaW1pbGFybHksIHRoZSB0b3AgbWFyZ2luIG9uIGA8cD5gcyBnZXQgcmVzZXQuIEhvd2V2ZXIsIHdlIGFsc28gcmVzZXQgdGhlXG4vLyBib3R0b20gbWFyZ2luIHRvIHVzZSBgcmVtYCB1bml0cyBpbnN0ZWFkIG9mIGBlbWAuXG5cbnAge1xuICBtYXJnaW4tdG9wOiAwO1xuICBtYXJnaW4tYm90dG9tOiAkcGFyYWdyYXBoLW1hcmdpbi1ib3R0b207XG59XG5cblxuLy8gQWJicmV2aWF0aW9uc1xuLy9cbi8vIDEuIER1cGxpY2F0ZSBiZWhhdmlvciB0byB0aGUgZGF0YS1icy0qIGF0dHJpYnV0ZSBmb3Igb3VyIHRvb2x0aXAgcGx1Z2luXG4vLyAyLiBBZGQgdGhlIGNvcnJlY3QgdGV4dCBkZWNvcmF0aW9uIGluIENocm9tZSwgRWRnZSwgT3BlcmEsIGFuZCBTYWZhcmkuXG4vLyAzLiBBZGQgZXhwbGljaXQgY3Vyc29yIHRvIGluZGljYXRlIGNoYW5nZWQgYmVoYXZpb3IuXG4vLyA0LiBQcmV2ZW50IHRoZSB0ZXh0LWRlY29yYXRpb24gdG8gYmUgc2tpcHBlZC5cblxuYWJiclt0aXRsZV0sXG5hYmJyW2RhdGEtYnMtb3JpZ2luYWwtdGl0bGVdIHsgLy8gMVxuICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZSBkb3R0ZWQ7IC8vIDJcbiAgY3Vyc29yOiBoZWxwOyAvLyAzXG4gIHRleHQtZGVjb3JhdGlvbi1za2lwLWluazogbm9uZTsgLy8gNFxufVxuXG5cbi8vIEFkZHJlc3NcblxuYWRkcmVzcyB7XG4gIG1hcmdpbi1ib3R0b206IDFyZW07XG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgbGluZS1oZWlnaHQ6IGluaGVyaXQ7XG59XG5cblxuLy8gTGlzdHNcblxub2wsXG51bCB7XG4gIHBhZGRpbmctbGVmdDogMnJlbTtcbn1cblxub2wsXG51bCxcbmRsIHtcbiAgbWFyZ2luLXRvcDogMDtcbiAgbWFyZ2luLWJvdHRvbTogMXJlbTtcbn1cblxub2wgb2wsXG51bCB1bCxcbm9sIHVsLFxudWwgb2wge1xuICBtYXJnaW4tYm90dG9tOiAwO1xufVxuXG5kdCB7XG4gIGZvbnQtd2VpZ2h0OiAkZHQtZm9udC13ZWlnaHQ7XG59XG5cbi8vIDEuIFVuZG8gYnJvd3NlciBkZWZhdWx0XG5cbmRkIHtcbiAgbWFyZ2luLWJvdHRvbTogLjVyZW07XG4gIG1hcmdpbi1sZWZ0OiAwOyAvLyAxXG59XG5cblxuLy8gQmxvY2txdW90ZVxuXG5ibG9ja3F1b3RlIHtcbiAgbWFyZ2luOiAwIDAgMXJlbTtcbn1cblxuXG4vLyBTdHJvbmdcbi8vXG4vLyBBZGQgdGhlIGNvcnJlY3QgZm9udCB3ZWlnaHQgaW4gQ2hyb21lLCBFZGdlLCBhbmQgU2FmYXJpXG5cbmIsXG5zdHJvbmcge1xuICBmb250LXdlaWdodDogJGZvbnQtd2VpZ2h0LWJvbGRlcjtcbn1cblxuXG4vLyBTbWFsbFxuLy9cbi8vIEFkZCB0aGUgY29ycmVjdCBmb250IHNpemUgaW4gYWxsIGJyb3dzZXJzXG5cbnNtYWxsIHtcbiAgQGluY2x1ZGUgZm9udC1zaXplKCRzbWFsbC1mb250LXNpemUpO1xufVxuXG5cbi8vIE1hcmtcblxubWFyayB7XG4gIHBhZGRpbmc6ICRtYXJrLXBhZGRpbmc7XG4gIGJhY2tncm91bmQtY29sb3I6ICRtYXJrLWJnO1xufVxuXG5cbi8vIFN1YiBhbmQgU3VwXG4vL1xuLy8gUHJldmVudCBgc3ViYCBhbmQgYHN1cGAgZWxlbWVudHMgZnJvbSBhZmZlY3RpbmcgdGhlIGxpbmUgaGVpZ2h0IGluXG4vLyBhbGwgYnJvd3NlcnMuXG5cbnN1YixcbnN1cCB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgQGluY2x1ZGUgZm9udC1zaXplKCRzdWItc3VwLWZvbnQtc2l6ZSk7XG4gIGxpbmUtaGVpZ2h0OiAwO1xuICB2ZXJ0aWNhbC1hbGlnbjogYmFzZWxpbmU7XG59XG5cbnN1YiB7IGJvdHRvbTogLS4yNWVtOyB9XG5zdXAgeyB0b3A6IC0uNWVtOyB9XG5cblxuLy8gTGlua3NcblxuYSB7XG4gIGNvbG9yOiAkbGluay1jb2xvcjtcbiAgdGV4dC1kZWNvcmF0aW9uOiAkbGluay1kZWNvcmF0aW9uO1xuXG4gICY6aG92ZXIge1xuICAgIGNvbG9yOiAkbGluay1ob3Zlci1jb2xvcjtcbiAgICB0ZXh0LWRlY29yYXRpb246ICRsaW5rLWhvdmVyLWRlY29yYXRpb247XG4gIH1cbn1cblxuLy8gQW5kIHVuZG8gdGhlc2Ugc3R5bGVzIGZvciBwbGFjZWhvbGRlciBsaW5rcy9uYW1lZCBhbmNob3JzICh3aXRob3V0IGhyZWYpLlxuLy8gSXQgd291bGQgYmUgbW9yZSBzdHJhaWdodGZvcndhcmQgdG8ganVzdCB1c2UgYVtocmVmXSBpbiBwcmV2aW91cyBibG9jaywgYnV0IHRoYXRcbi8vIGNhdXNlcyBzcGVjaWZpY2l0eSBpc3N1ZXMgaW4gbWFueSBvdGhlciBzdHlsZXMgdGhhdCBhcmUgdG9vIGNvbXBsZXggdG8gZml4LlxuLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9pc3N1ZXMvMTk0MDJcblxuYTpub3QoW2hyZWZdKTpub3QoW2NsYXNzXSkge1xuICAmLFxuICAmOmhvdmVyIHtcbiAgICBjb2xvcjogaW5oZXJpdDtcbiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gIH1cbn1cblxuXG4vLyBDb2RlXG5cbnByZSxcbmNvZGUsXG5rYmQsXG5zYW1wIHtcbiAgZm9udC1mYW1pbHk6ICRmb250LWZhbWlseS1jb2RlO1xuICBAaW5jbHVkZSBmb250LXNpemUoMWVtKTsgLy8gQ29ycmVjdCB0aGUgb2RkIGBlbWAgZm9udCBzaXppbmcgaW4gYWxsIGJyb3dzZXJzLlxuICBkaXJlY3Rpb246IGx0ciAje1wiLyogcnRsOmlnbm9yZSAqL1wifTtcbiAgdW5pY29kZS1iaWRpOiBiaWRpLW92ZXJyaWRlO1xufVxuXG4vLyAxLiBSZW1vdmUgYnJvd3NlciBkZWZhdWx0IHRvcCBtYXJnaW5cbi8vIDIuIFJlc2V0IGJyb3dzZXIgZGVmYXVsdCBvZiBgMWVtYCB0byB1c2UgYHJlbWBzXG4vLyAzLiBEb24ndCBhbGxvdyBjb250ZW50IHRvIGJyZWFrIG91dHNpZGVcblxucHJlIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIG1hcmdpbi10b3A6IDA7IC8vIDFcbiAgbWFyZ2luLWJvdHRvbTogMXJlbTsgLy8gMlxuICBvdmVyZmxvdzogYXV0bzsgLy8gM1xuICBAaW5jbHVkZSBmb250LXNpemUoJGNvZGUtZm9udC1zaXplKTtcbiAgY29sb3I6ICRwcmUtY29sb3I7XG5cbiAgLy8gQWNjb3VudCBmb3Igc29tZSBjb2RlIG91dHB1dHMgdGhhdCBwbGFjZSBjb2RlIHRhZ3MgaW4gcHJlIHRhZ3NcbiAgY29kZSB7XG4gICAgQGluY2x1ZGUgZm9udC1zaXplKGluaGVyaXQpO1xuICAgIGNvbG9yOiBpbmhlcml0O1xuICAgIHdvcmQtYnJlYWs6IG5vcm1hbDtcbiAgfVxufVxuXG5jb2RlIHtcbiAgQGluY2x1ZGUgZm9udC1zaXplKCRjb2RlLWZvbnQtc2l6ZSk7XG4gIGNvbG9yOiAkY29kZS1jb2xvcjtcbiAgd29yZC13cmFwOiBicmVhay13b3JkO1xuXG4gIC8vIFN0cmVhbWxpbmUgdGhlIHN0eWxlIHdoZW4gaW5zaWRlIGFuY2hvcnMgdG8gYXZvaWQgYnJva2VuIHVuZGVybGluZSBhbmQgbW9yZVxuICBhID4gJiB7XG4gICAgY29sb3I6IGluaGVyaXQ7XG4gIH1cbn1cblxua2JkIHtcbiAgcGFkZGluZzogJGtiZC1wYWRkaW5nLXkgJGtiZC1wYWRkaW5nLXg7XG4gIEBpbmNsdWRlIGZvbnQtc2l6ZSgka2JkLWZvbnQtc2l6ZSk7XG4gIGNvbG9yOiAka2JkLWNvbG9yO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAka2JkLWJnO1xuICBAaW5jbHVkZSBib3JkZXItcmFkaXVzKCRib3JkZXItcmFkaXVzLXNtKTtcblxuICBrYmQge1xuICAgIHBhZGRpbmc6IDA7XG4gICAgQGluY2x1ZGUgZm9udC1zaXplKDFlbSk7XG4gICAgZm9udC13ZWlnaHQ6ICRuZXN0ZWQta2JkLWZvbnQtd2VpZ2h0O1xuICB9XG59XG5cblxuLy8gRmlndXJlc1xuLy9cbi8vIEFwcGx5IGEgY29uc2lzdGVudCBtYXJnaW4gc3RyYXRlZ3kgKG1hdGNoZXMgb3VyIHR5cGUgc3R5bGVzKS5cblxuZmlndXJlIHtcbiAgbWFyZ2luOiAwIDAgMXJlbTtcbn1cblxuXG4vLyBJbWFnZXMgYW5kIGNvbnRlbnRcblxuaW1nLFxuc3ZnIHtcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbn1cblxuXG4vLyBUYWJsZXNcbi8vXG4vLyBQcmV2ZW50IGRvdWJsZSBib3JkZXJzXG5cbnRhYmxlIHtcbiAgY2FwdGlvbi1zaWRlOiBib3R0b207XG4gIGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7XG59XG5cbmNhcHRpb24ge1xuICBwYWRkaW5nLXRvcDogJHRhYmxlLWNlbGwtcGFkZGluZy15O1xuICBwYWRkaW5nLWJvdHRvbTogJHRhYmxlLWNlbGwtcGFkZGluZy15O1xuICBjb2xvcjogJHRhYmxlLWNhcHRpb24tY29sb3I7XG4gIHRleHQtYWxpZ246IGxlZnQ7XG59XG5cbi8vIDEuIFJlbW92ZXMgZm9udC13ZWlnaHQgYm9sZCBieSBpbmhlcml0aW5nXG4vLyAyLiBNYXRjaGVzIGRlZmF1bHQgYDx0ZD5gIGFsaWdubWVudCBieSBpbmhlcml0aW5nIGB0ZXh0LWFsaWduYC5cbi8vIDMuIEZpeCBhbGlnbm1lbnQgZm9yIFNhZmFyaVxuXG50aCB7XG4gIGZvbnQtd2VpZ2h0OiAkdGFibGUtdGgtZm9udC13ZWlnaHQ7IC8vIDFcbiAgdGV4dC1hbGlnbjogaW5oZXJpdDsgLy8gMlxuICB0ZXh0LWFsaWduOiAtd2Via2l0LW1hdGNoLXBhcmVudDsgLy8gM1xufVxuXG50aGVhZCxcbnRib2R5LFxudGZvb3QsXG50cixcbnRkLFxudGgge1xuICBib3JkZXItY29sb3I6IGluaGVyaXQ7XG4gIGJvcmRlci1zdHlsZTogc29saWQ7XG4gIGJvcmRlci13aWR0aDogMDtcbn1cblxuXG4vLyBGb3Jtc1xuLy9cbi8vIDEuIEFsbG93IGxhYmVscyB0byB1c2UgYG1hcmdpbmAgZm9yIHNwYWNpbmcuXG5cbmxhYmVsIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrOyAvLyAxXG59XG5cbi8vIFJlbW92ZSB0aGUgZGVmYXVsdCBgYm9yZGVyLXJhZGl1c2AgdGhhdCBtYWNPUyBDaHJvbWUgYWRkcy5cbi8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvaXNzdWVzLzI0MDkzXG5cbmJ1dHRvbiB7XG4gIC8vIHN0eWxlbGludC1kaXNhYmxlLW5leHQtbGluZSBwcm9wZXJ0eS1kaXNhbGxvd2VkLWxpc3RcbiAgYm9yZGVyLXJhZGl1czogMDtcbn1cblxuLy8gRXhwbGljaXRseSByZW1vdmUgZm9jdXMgb3V0bGluZSBpbiBDaHJvbWl1bSB3aGVuIGl0IHNob3VsZG4ndCBiZVxuLy8gdmlzaWJsZSAoZS5nLiBhcyByZXN1bHQgb2YgbW91c2UgY2xpY2sgb3IgdG91Y2ggdGFwKS4gSXQgYWxyZWFkeVxuLy8gc2hvdWxkIGJlIGRvaW5nIHRoaXMgYXV0b21hdGljYWxseSwgYnV0IHNlZW1zIHRvIGN1cnJlbnRseSBiZVxuLy8gY29uZnVzZWQgYW5kIGFwcGxpZXMgaXRzIHZlcnkgdmlzaWJsZSB0d28tdG9uZSBvdXRsaW5lIGFueXdheS5cblxuYnV0dG9uOmZvY3VzOm5vdCg6Zm9jdXMtdmlzaWJsZSkge1xuICBvdXRsaW5lOiAwO1xufVxuXG4vLyAxLiBSZW1vdmUgdGhlIG1hcmdpbiBpbiBGaXJlZm94IGFuZCBTYWZhcmlcblxuaW5wdXQsXG5idXR0b24sXG5zZWxlY3QsXG5vcHRncm91cCxcbnRleHRhcmVhIHtcbiAgbWFyZ2luOiAwOyAvLyAxXG4gIGZvbnQtZmFtaWx5OiBpbmhlcml0O1xuICBAaW5jbHVkZSBmb250LXNpemUoaW5oZXJpdCk7XG4gIGxpbmUtaGVpZ2h0OiBpbmhlcml0O1xufVxuXG4vLyBSZW1vdmUgdGhlIGluaGVyaXRhbmNlIG9mIHRleHQgdHJhbnNmb3JtIGluIEZpcmVmb3hcbmJ1dHRvbixcbnNlbGVjdCB7XG4gIHRleHQtdHJhbnNmb3JtOiBub25lO1xufVxuLy8gU2V0IHRoZSBjdXJzb3IgZm9yIG5vbi1gPGJ1dHRvbj5gIGJ1dHRvbnNcbi8vXG4vLyBEZXRhaWxzIGF0IGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9wdWxsLzMwNTYyXG5bcm9sZT1cImJ1dHRvblwiXSB7XG4gIGN1cnNvcjogcG9pbnRlcjtcbn1cblxuc2VsZWN0IHtcbiAgLy8gUmVtb3ZlIHRoZSBpbmhlcml0YW5jZSBvZiB3b3JkLXdyYXAgaW4gU2FmYXJpLlxuICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2lzc3Vlcy8yNDk5MFxuICB3b3JkLXdyYXA6IG5vcm1hbDtcblxuICAvLyBVbmRvIHRoZSBvcGFjaXR5IGNoYW5nZSBmcm9tIENocm9tZVxuICAmOmRpc2FibGVkIHtcbiAgICBvcGFjaXR5OiAxO1xuICB9XG59XG5cbi8vIFJlbW92ZSB0aGUgZHJvcGRvd24gYXJyb3cgaW4gQ2hyb21lIGZyb20gaW5wdXRzIGJ1aWx0IHdpdGggZGF0YWxpc3RzLlxuLy8gU2VlIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS81NDk5NzExOFxuXG5bbGlzdF06Oi13ZWJraXQtY2FsZW5kYXItcGlja2VyLWluZGljYXRvciB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5cbi8vIDEuIFByZXZlbnQgYSBXZWJLaXQgYnVnIHdoZXJlICgyKSBkZXN0cm95cyBuYXRpdmUgYGF1ZGlvYCBhbmQgYHZpZGVvYFxuLy8gICAgY29udHJvbHMgaW4gQW5kcm9pZCA0LlxuLy8gMi4gQ29ycmVjdCB0aGUgaW5hYmlsaXR5IHRvIHN0eWxlIGNsaWNrYWJsZSB0eXBlcyBpbiBpT1MgYW5kIFNhZmFyaS5cbi8vIDMuIE9waW5pb25hdGVkOiBhZGQgXCJoYW5kXCIgY3Vyc29yIHRvIG5vbi1kaXNhYmxlZCBidXR0b24gZWxlbWVudHMuXG5cbmJ1dHRvbixcblt0eXBlPVwiYnV0dG9uXCJdLCAvLyAxXG5bdHlwZT1cInJlc2V0XCJdLFxuW3R5cGU9XCJzdWJtaXRcIl0ge1xuICAtd2Via2l0LWFwcGVhcmFuY2U6IGJ1dHRvbjsgLy8gMlxuXG4gIEBpZiAkZW5hYmxlLWJ1dHRvbi1wb2ludGVycyB7XG4gICAgJjpub3QoOmRpc2FibGVkKSB7XG4gICAgICBjdXJzb3I6IHBvaW50ZXI7IC8vIDNcbiAgICB9XG4gIH1cbn1cblxuLy8gUmVtb3ZlIGlubmVyIGJvcmRlciBhbmQgcGFkZGluZyBmcm9tIEZpcmVmb3gsIGJ1dCBkb24ndCByZXN0b3JlIHRoZSBvdXRsaW5lIGxpa2UgTm9ybWFsaXplLlxuXG46Oi1tb3otZm9jdXMtaW5uZXIge1xuICBwYWRkaW5nOiAwO1xuICBib3JkZXItc3R5bGU6IG5vbmU7XG59XG5cbi8vIDEuIFRleHRhcmVhcyBzaG91bGQgcmVhbGx5IG9ubHkgcmVzaXplIHZlcnRpY2FsbHkgc28gdGhleSBkb24ndCBicmVhayB0aGVpciAoaG9yaXpvbnRhbCkgY29udGFpbmVycy5cblxudGV4dGFyZWEge1xuICByZXNpemU6IHZlcnRpY2FsOyAvLyAxXG59XG5cbi8vIDEuIEJyb3dzZXJzIHNldCBhIGRlZmF1bHQgYG1pbi13aWR0aDogbWluLWNvbnRlbnQ7YCBvbiBmaWVsZHNldHMsXG4vLyAgICB1bmxpa2UgZS5nLiBgPGRpdj5gcywgd2hpY2ggaGF2ZSBgbWluLXdpZHRoOiAwO2AgYnkgZGVmYXVsdC5cbi8vICAgIFNvIHdlIHJlc2V0IHRoYXQgdG8gZW5zdXJlIGZpZWxkc2V0cyBiZWhhdmUgbW9yZSBsaWtlIGEgc3RhbmRhcmQgYmxvY2sgZWxlbWVudC5cbi8vICAgIFNlZSBodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvaXNzdWVzLzEyMzU5XG4vLyAgICBhbmQgaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvI3RoZS1maWVsZHNldC1hbmQtbGVnZW5kLWVsZW1lbnRzXG4vLyAyLiBSZXNldCB0aGUgZGVmYXVsdCBvdXRsaW5lIGJlaGF2aW9yIG9mIGZpZWxkc2V0cyBzbyB0aGV5IGRvbid0IGFmZmVjdCBwYWdlIGxheW91dC5cblxuZmllbGRzZXQge1xuICBtaW4td2lkdGg6IDA7IC8vIDFcbiAgcGFkZGluZzogMDsgLy8gMlxuICBtYXJnaW46IDA7IC8vIDJcbiAgYm9yZGVyOiAwOyAvLyAyXG59XG5cbi8vIDEuIEJ5IHVzaW5nIGBmbG9hdDogbGVmdGAsIHRoZSBsZWdlbmQgd2lsbCBiZWhhdmUgbGlrZSBhIGJsb2NrIGVsZW1lbnQuXG4vLyAgICBUaGlzIHdheSB0aGUgYm9yZGVyIG9mIGEgZmllbGRzZXQgd3JhcHMgYXJvdW5kIHRoZSBsZWdlbmQgaWYgcHJlc2VudC5cbi8vIDIuIEZpeCB3cmFwcGluZyBidWcuXG4vLyAgICBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2lzc3Vlcy8yOTcxMlxuXG5sZWdlbmQge1xuICBmbG9hdDogbGVmdDsgLy8gMVxuICB3aWR0aDogMTAwJTtcbiAgcGFkZGluZzogMDtcbiAgbWFyZ2luLWJvdHRvbTogJGxlZ2VuZC1tYXJnaW4tYm90dG9tO1xuICBAaW5jbHVkZSBmb250LXNpemUoJGxlZ2VuZC1mb250LXNpemUpO1xuICBmb250LXdlaWdodDogJGxlZ2VuZC1mb250LXdlaWdodDtcbiAgbGluZS1oZWlnaHQ6IGluaGVyaXQ7XG5cbiAgKyAqIHtcbiAgICBjbGVhcjogbGVmdDsgLy8gMlxuICB9XG59XG5cbi8vIEZpeCBoZWlnaHQgb2YgaW5wdXRzIHdpdGggYSB0eXBlIG9mIGRhdGV0aW1lLWxvY2FsLCBkYXRlLCBtb250aCwgd2Vlaywgb3IgdGltZVxuLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9pc3N1ZXMvMTg4NDJcblxuOjotd2Via2l0LWRhdGV0aW1lLWVkaXQtZmllbGRzLXdyYXBwZXIsXG46Oi13ZWJraXQtZGF0ZXRpbWUtZWRpdC10ZXh0LFxuOjotd2Via2l0LWRhdGV0aW1lLWVkaXQtbWludXRlLFxuOjotd2Via2l0LWRhdGV0aW1lLWVkaXQtaG91ci1maWVsZCxcbjo6LXdlYmtpdC1kYXRldGltZS1lZGl0LWRheS1maWVsZCxcbjo6LXdlYmtpdC1kYXRldGltZS1lZGl0LW1vbnRoLWZpZWxkLFxuOjotd2Via2l0LWRhdGV0aW1lLWVkaXQteWVhci1maWVsZCB7XG4gIHBhZGRpbmc6IDA7XG59XG5cbjo6LXdlYmtpdC1pbm5lci1zcGluLWJ1dHRvbiB7XG4gIGhlaWdodDogYXV0bztcbn1cblxuLy8gMS4gQ29ycmVjdCB0aGUgb3V0bGluZSBzdHlsZSBpbiBTYWZhcmkuXG4vLyAyLiBUaGlzIG92ZXJyaWRlcyB0aGUgZXh0cmEgcm91bmRlZCBjb3JuZXJzIG9uIHNlYXJjaCBpbnB1dHMgaW4gaU9TIHNvIHRoYXQgb3VyXG4vLyAgICBgLmZvcm0tY29udHJvbGAgY2xhc3MgY2FuIHByb3Blcmx5IHN0eWxlIHRoZW0uIE5vdGUgdGhhdCB0aGlzIGNhbm5vdCBzaW1wbHlcbi8vICAgIGJlIGFkZGVkIHRvIGAuZm9ybS1jb250cm9sYCBhcyBpdCdzIG5vdCBzcGVjaWZpYyBlbm91Z2guIEZvciBkZXRhaWxzLCBzZWVcbi8vICAgIGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9pc3N1ZXMvMTE1ODYuXG5cblt0eXBlPVwic2VhcmNoXCJdIHtcbiAgb3V0bGluZS1vZmZzZXQ6IC0ycHg7IC8vIDFcbiAgLXdlYmtpdC1hcHBlYXJhbmNlOiB0ZXh0ZmllbGQ7IC8vIDJcbn1cblxuLy8gMS4gQSBmZXcgaW5wdXQgdHlwZXMgc2hvdWxkIHN0YXkgTFRSXG4vLyBTZWUgaHR0cHM6Ly9ydGxzdHlsaW5nLmNvbS9wb3N0cy9ydGwtc3R5bGluZyNmb3JtLWlucHV0c1xuLy8gMi4gUlRMIG9ubHkgb3V0cHV0XG4vLyBTZWUgaHR0cHM6Ly9ydGxjc3MuY29tL2xlYXJuL3VzYWdlLWd1aWRlL2NvbnRyb2wtZGlyZWN0aXZlcy8jcmF3XG5cbi8qIHJ0bDpyYXc6XG5bdHlwZT1cInRlbFwiXSxcblt0eXBlPVwidXJsXCJdLFxuW3R5cGU9XCJlbWFpbFwiXSxcblt0eXBlPVwibnVtYmVyXCJdIHtcbiAgZGlyZWN0aW9uOiBsdHI7XG59XG4qL1xuXG4vLyBSZW1vdmUgdGhlIGlubmVyIHBhZGRpbmcgaW4gQ2hyb21lIGFuZCBTYWZhcmkgb24gbWFjT1MuXG5cbjo6LXdlYmtpdC1zZWFyY2gtZGVjb3JhdGlvbiB7XG4gIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTtcbn1cblxuLy8gUmVtb3ZlIHBhZGRpbmcgYXJvdW5kIGNvbG9yIHBpY2tlcnMgaW4gd2Via2l0IGJyb3dzZXJzXG5cbjo6LXdlYmtpdC1jb2xvci1zd2F0Y2gtd3JhcHBlciB7XG4gIHBhZGRpbmc6IDA7XG59XG5cblxuLy8gSW5oZXJpdCBmb250IGZhbWlseSBhbmQgbGluZSBoZWlnaHQgZm9yIGZpbGUgaW5wdXQgYnV0dG9uc1xuXG46OmZpbGUtc2VsZWN0b3ItYnV0dG9uIHtcbiAgZm9udDogaW5oZXJpdDtcbn1cblxuLy8gMS4gQ2hhbmdlIGZvbnQgcHJvcGVydGllcyB0byBgaW5oZXJpdGBcbi8vIDIuIENvcnJlY3QgdGhlIGluYWJpbGl0eSB0byBzdHlsZSBjbGlja2FibGUgdHlwZXMgaW4gaU9TIGFuZCBTYWZhcmkuXG5cbjo6LXdlYmtpdC1maWxlLXVwbG9hZC1idXR0b24ge1xuICBmb250OiBpbmhlcml0OyAvLyAxXG4gIC13ZWJraXQtYXBwZWFyYW5jZTogYnV0dG9uOyAvLyAyXG59XG5cbi8vIENvcnJlY3QgZWxlbWVudCBkaXNwbGF5c1xuXG5vdXRwdXQge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG59XG5cbi8vIFJlbW92ZSBib3JkZXIgZnJvbSBpZnJhbWVcblxuaWZyYW1lIHtcbiAgYm9yZGVyOiAwO1xufVxuXG4vLyBTdW1tYXJ5XG4vL1xuLy8gMS4gQWRkIHRoZSBjb3JyZWN0IGRpc3BsYXkgaW4gYWxsIGJyb3dzZXJzXG5cbnN1bW1hcnkge1xuICBkaXNwbGF5OiBsaXN0LWl0ZW07IC8vIDFcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuXG5cbi8vIFByb2dyZXNzXG4vL1xuLy8gQWRkIHRoZSBjb3JyZWN0IHZlcnRpY2FsIGFsaWdubWVudCBpbiBDaHJvbWUsIEZpcmVmb3gsIGFuZCBPcGVyYS5cblxucHJvZ3Jlc3Mge1xuICB2ZXJ0aWNhbC1hbGlnbjogYmFzZWxpbmU7XG59XG5cblxuLy8gSGlkZGVuIGF0dHJpYnV0ZVxuLy9cbi8vIEFsd2F5cyBoaWRlIGFuIGVsZW1lbnQgd2l0aCB0aGUgYGhpZGRlbmAgSFRNTCBhdHRyaWJ1dGUuXG5cbltoaWRkZW5dIHtcbiAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xufVxuIiwiLy8gc3R5bGVsaW50LWRpc2FibGUgcHJvcGVydHktYmxhY2tsaXN0LCBzY3NzL2RvbGxhci12YXJpYWJsZS1kZWZhdWx0XG5cbi8vIFNDU1MgUkZTIG1peGluXG4vL1xuLy8gQXV0b21hdGVkIHJlc3BvbnNpdmUgdmFsdWVzIGZvciBmb250IHNpemVzLCBwYWRkaW5ncywgbWFyZ2lucyBhbmQgbXVjaCBtb3JlXG4vL1xuLy8gTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9yZnMvYmxvYi9tYWluL0xJQ0VOU0UpXG5cbi8vIENvbmZpZ3VyYXRpb25cblxuLy8gQmFzZSB2YWx1ZVxuJHJmcy1iYXNlLXZhbHVlOiAxLjI1cmVtICFkZWZhdWx0O1xuJHJmcy11bml0OiByZW0gIWRlZmF1bHQ7XG5cbkBpZiAkcmZzLXVuaXQgIT0gcmVtIGFuZCAkcmZzLXVuaXQgIT0gcHgge1xuICBAZXJyb3IgXCJgI3skcmZzLXVuaXR9YCBpcyBub3QgYSB2YWxpZCB1bml0IGZvciAkcmZzLXVuaXQuIFVzZSBgcHhgIG9yIGByZW1gLlwiO1xufVxuXG4vLyBCcmVha3BvaW50IGF0IHdoZXJlIHZhbHVlcyBzdGFydCBkZWNyZWFzaW5nIGlmIHNjcmVlbiB3aWR0aCBpcyBzbWFsbGVyXG4kcmZzLWJyZWFrcG9pbnQ6IDEyMDBweCAhZGVmYXVsdDtcbiRyZnMtYnJlYWtwb2ludC11bml0OiBweCAhZGVmYXVsdDtcblxuQGlmICRyZnMtYnJlYWtwb2ludC11bml0ICE9IHB4IGFuZCAkcmZzLWJyZWFrcG9pbnQtdW5pdCAhPSBlbSBhbmQgJHJmcy1icmVha3BvaW50LXVuaXQgIT0gcmVtIHtcbiAgQGVycm9yIFwiYCN7JHJmcy1icmVha3BvaW50LXVuaXR9YCBpcyBub3QgYSB2YWxpZCB1bml0IGZvciAkcmZzLWJyZWFrcG9pbnQtdW5pdC4gVXNlIGBweGAsIGBlbWAgb3IgYHJlbWAuXCI7XG59XG5cbi8vIFJlc2l6ZSB2YWx1ZXMgYmFzZWQgb24gc2NyZWVuIGhlaWdodCBhbmQgd2lkdGhcbiRyZnMtdHdvLWRpbWVuc2lvbmFsOiBmYWxzZSAhZGVmYXVsdDtcblxuLy8gRmFjdG9yIG9mIGRlY3JlYXNlXG4kcmZzLWZhY3RvcjogMTAgIWRlZmF1bHQ7XG5cbkBpZiB0eXBlLW9mKCRyZnMtZmFjdG9yKSAhPSBudW1iZXIgb3IgJHJmcy1mYWN0b3IgPD0gMSB7XG4gIEBlcnJvciBcImAjeyRyZnMtZmFjdG9yfWAgaXMgbm90IGEgdmFsaWQgICRyZnMtZmFjdG9yLCBpdCBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAxLlwiO1xufVxuXG4vLyBNb2RlLiBQb3NzaWJpbGl0aWVzOiBcIm1pbi1tZWRpYS1xdWVyeVwiLCBcIm1heC1tZWRpYS1xdWVyeVwiXG4kcmZzLW1vZGU6IG1pbi1tZWRpYS1xdWVyeSAhZGVmYXVsdDtcblxuLy8gR2VuZXJhdGUgZW5hYmxlIG9yIGRpc2FibGUgY2xhc3Nlcy4gUG9zc2liaWxpdGllczogZmFsc2UsIFwiZW5hYmxlXCIgb3IgXCJkaXNhYmxlXCJcbiRyZnMtY2xhc3M6IGZhbHNlICFkZWZhdWx0O1xuXG4vLyAxIHJlbSA9ICRyZnMtcmVtLXZhbHVlIHB4XG4kcmZzLXJlbS12YWx1ZTogMTYgIWRlZmF1bHQ7XG5cbi8vIFNhZmFyaSBpZnJhbWUgcmVzaXplIGJ1ZzogaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvcmZzL2lzc3Vlcy8xNFxuJHJmcy1zYWZhcmktaWZyYW1lLXJlc2l6ZS1idWctZml4OiBmYWxzZSAhZGVmYXVsdDtcblxuLy8gRGlzYWJsZSBSRlMgYnkgc2V0dGluZyAkZW5hYmxlLXJmcyB0byBmYWxzZVxuJGVuYWJsZS1yZnM6IHRydWUgIWRlZmF1bHQ7XG5cbi8vIENhY2hlICRyZnMtYmFzZS12YWx1ZSB1bml0XG4kcmZzLWJhc2UtdmFsdWUtdW5pdDogdW5pdCgkcmZzLWJhc2UtdmFsdWUpO1xuXG5AZnVuY3Rpb24gZGl2aWRlKCRkaXZpZGVuZCwgJGRpdmlzb3IsICRwcmVjaXNpb246IDEwKSB7XG4gICRzaWduOiBpZigkZGl2aWRlbmQgPiAwIGFuZCAkZGl2aXNvciA+IDAgb3IgJGRpdmlkZW5kIDwgMCBhbmQgJGRpdmlzb3IgPCAwLCAxLCAtMSk7XG4gICRkaXZpZGVuZDogYWJzKCRkaXZpZGVuZCk7XG4gICRkaXZpc29yOiBhYnMoJGRpdmlzb3IpO1xuICBAaWYgJGRpdmlkZW5kID09IDAge1xuICAgIEByZXR1cm4gMDtcbiAgfVxuICBAaWYgJGRpdmlzb3IgPT0gMCB7XG4gICAgQGVycm9yIFwiQ2Fubm90IGRpdmlkZSBieSAwXCI7XG4gIH1cbiAgJHJlbWFpbmRlcjogJGRpdmlkZW5kO1xuICAkcmVzdWx0OiAwO1xuICAkZmFjdG9yOiAxMDtcbiAgQHdoaWxlICgkcmVtYWluZGVyID4gMCBhbmQgJHByZWNpc2lvbiA+PSAwKSB7XG4gICAgJHF1b3RpZW50OiAwO1xuICAgIEB3aGlsZSAoJHJlbWFpbmRlciA+PSAkZGl2aXNvcikge1xuICAgICAgJHJlbWFpbmRlcjogJHJlbWFpbmRlciAtICRkaXZpc29yO1xuICAgICAgJHF1b3RpZW50OiAkcXVvdGllbnQgKyAxO1xuICAgIH1cbiAgICAkcmVzdWx0OiAkcmVzdWx0ICogMTAgKyAkcXVvdGllbnQ7XG4gICAgJGZhY3RvcjogJGZhY3RvciAqIC4xO1xuICAgICRyZW1haW5kZXI6ICRyZW1haW5kZXIgKiAxMDtcbiAgICAkcHJlY2lzaW9uOiAkcHJlY2lzaW9uIC0gMTtcbiAgICBAaWYgKCRwcmVjaXNpb24gPCAwIGFuZCAkcmVtYWluZGVyID49ICRkaXZpc29yICogNSkge1xuICAgICAgJHJlc3VsdDogJHJlc3VsdCArIDE7XG4gICAgfVxuICB9XG4gICRyZXN1bHQ6ICRyZXN1bHQgKiAkZmFjdG9yICogJHNpZ247XG4gICRkaXZpZGVuZC11bml0OiB1bml0KCRkaXZpZGVuZCk7XG4gICRkaXZpc29yLXVuaXQ6IHVuaXQoJGRpdmlzb3IpO1xuICAkdW5pdC1tYXA6IChcbiAgICBcInB4XCI6IDFweCxcbiAgICBcInJlbVwiOiAxcmVtLFxuICAgIFwiZW1cIjogMWVtLFxuICAgIFwiJVwiOiAxJVxuICApO1xuICBAaWYgKCRkaXZpZGVuZC11bml0ICE9ICRkaXZpc29yLXVuaXQgYW5kIG1hcC1oYXMta2V5KCR1bml0LW1hcCwgJGRpdmlkZW5kLXVuaXQpKSB7XG4gICAgJHJlc3VsdDogJHJlc3VsdCAqIG1hcC1nZXQoJHVuaXQtbWFwLCAkZGl2aWRlbmQtdW5pdCk7XG4gIH1cbiAgQHJldHVybiAkcmVzdWx0O1xufVxuXG4vLyBSZW1vdmUgcHgtdW5pdCBmcm9tICRyZnMtYmFzZS12YWx1ZSBmb3IgY2FsY3VsYXRpb25zXG5AaWYgJHJmcy1iYXNlLXZhbHVlLXVuaXQgPT0gcHgge1xuICAkcmZzLWJhc2UtdmFsdWU6IGRpdmlkZSgkcmZzLWJhc2UtdmFsdWUsICRyZnMtYmFzZS12YWx1ZSAqIDAgKyAxKTtcbn1cbkBlbHNlIGlmICRyZnMtYmFzZS12YWx1ZS11bml0ID09IHJlbSB7XG4gICRyZnMtYmFzZS12YWx1ZTogZGl2aWRlKCRyZnMtYmFzZS12YWx1ZSwgZGl2aWRlKCRyZnMtYmFzZS12YWx1ZSAqIDAgKyAxLCAkcmZzLXJlbS12YWx1ZSkpO1xufVxuXG4vLyBDYWNoZSAkcmZzLWJyZWFrcG9pbnQgdW5pdCB0byBwcmV2ZW50IG11bHRpcGxlIGNhbGxzXG4kcmZzLWJyZWFrcG9pbnQtdW5pdC1jYWNoZTogdW5pdCgkcmZzLWJyZWFrcG9pbnQpO1xuXG4vLyBSZW1vdmUgdW5pdCBmcm9tICRyZnMtYnJlYWtwb2ludCBmb3IgY2FsY3VsYXRpb25zXG5AaWYgJHJmcy1icmVha3BvaW50LXVuaXQtY2FjaGUgPT0gcHgge1xuICAkcmZzLWJyZWFrcG9pbnQ6IGRpdmlkZSgkcmZzLWJyZWFrcG9pbnQsICRyZnMtYnJlYWtwb2ludCAqIDAgKyAxKTtcbn1cbkBlbHNlIGlmICRyZnMtYnJlYWtwb2ludC11bml0LWNhY2hlID09IHJlbSBvciAkcmZzLWJyZWFrcG9pbnQtdW5pdC1jYWNoZSA9PSBcImVtXCIge1xuICAkcmZzLWJyZWFrcG9pbnQ6IGRpdmlkZSgkcmZzLWJyZWFrcG9pbnQsIGRpdmlkZSgkcmZzLWJyZWFrcG9pbnQgKiAwICsgMSwgJHJmcy1yZW0tdmFsdWUpKTtcbn1cblxuLy8gQ2FsY3VsYXRlIHRoZSBtZWRpYSBxdWVyeSB2YWx1ZVxuJHJmcy1tcS12YWx1ZTogaWYoJHJmcy1icmVha3BvaW50LXVuaXQgPT0gcHgsICN7JHJmcy1icmVha3BvaW50fXB4LCAje2RpdmlkZSgkcmZzLWJyZWFrcG9pbnQsICRyZnMtcmVtLXZhbHVlKX0jeyRyZnMtYnJlYWtwb2ludC11bml0fSk7XG4kcmZzLW1xLXByb3BlcnR5LXdpZHRoOiBpZigkcmZzLW1vZGUgPT0gbWF4LW1lZGlhLXF1ZXJ5LCBtYXgtd2lkdGgsIG1pbi13aWR0aCk7XG4kcmZzLW1xLXByb3BlcnR5LWhlaWdodDogaWYoJHJmcy1tb2RlID09IG1heC1tZWRpYS1xdWVyeSwgbWF4LWhlaWdodCwgbWluLWhlaWdodCk7XG5cbi8vIEludGVybmFsIG1peGluIHVzZWQgdG8gZGV0ZXJtaW5lIHdoaWNoIG1lZGlhIHF1ZXJ5IG5lZWRzIHRvIGJlIHVzZWRcbkBtaXhpbiBfcmZzLW1lZGlhLXF1ZXJ5IHtcbiAgQGlmICRyZnMtdHdvLWRpbWVuc2lvbmFsIHtcbiAgICBAaWYgJHJmcy1tb2RlID09IG1heC1tZWRpYS1xdWVyeSB7XG4gICAgICBAbWVkaWEgKCN7JHJmcy1tcS1wcm9wZXJ0eS13aWR0aH06ICN7JHJmcy1tcS12YWx1ZX0pLCAoI3skcmZzLW1xLXByb3BlcnR5LWhlaWdodH06ICN7JHJmcy1tcS12YWx1ZX0pIHtcbiAgICAgICAgQGNvbnRlbnQ7XG4gICAgICB9XG4gICAgfVxuICAgIEBlbHNlIHtcbiAgICAgIEBtZWRpYSAoI3skcmZzLW1xLXByb3BlcnR5LXdpZHRofTogI3skcmZzLW1xLXZhbHVlfSkgYW5kICgjeyRyZnMtbXEtcHJvcGVydHktaGVpZ2h0fTogI3skcmZzLW1xLXZhbHVlfSkge1xuICAgICAgICBAY29udGVudDtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgQGVsc2Uge1xuICAgIEBtZWRpYSAoI3skcmZzLW1xLXByb3BlcnR5LXdpZHRofTogI3skcmZzLW1xLXZhbHVlfSkge1xuICAgICAgQGNvbnRlbnQ7XG4gICAgfVxuICB9XG59XG5cbi8vIEludGVybmFsIG1peGluIHRoYXQgYWRkcyBkaXNhYmxlIGNsYXNzZXMgdG8gdGhlIHNlbGVjdG9yIGlmIG5lZWRlZC5cbkBtaXhpbiBfcmZzLXJ1bGUge1xuICBAaWYgJHJmcy1jbGFzcyA9PSBkaXNhYmxlIGFuZCAkcmZzLW1vZGUgPT0gbWF4LW1lZGlhLXF1ZXJ5IHtcbiAgICAvLyBBZGRpbmcgYW4gZXh0cmEgY2xhc3MgaW5jcmVhc2VzIHNwZWNpZmljaXR5LCB3aGljaCBwcmV2ZW50cyB0aGUgbWVkaWEgcXVlcnkgdG8gb3ZlcnJpZGUgdGhlIHByb3BlcnR5XG4gICAgJixcbiAgICAuZGlzYWJsZS1yZnMgJixcbiAgICAmLmRpc2FibGUtcmZzIHtcbiAgICAgIEBjb250ZW50O1xuICAgIH1cbiAgfVxuICBAZWxzZSBpZiAkcmZzLWNsYXNzID09IGVuYWJsZSBhbmQgJHJmcy1tb2RlID09IG1pbi1tZWRpYS1xdWVyeSB7XG4gICAgLmVuYWJsZS1yZnMgJixcbiAgICAmLmVuYWJsZS1yZnMge1xuICAgICAgQGNvbnRlbnQ7XG4gICAgfVxuICB9XG4gIEBlbHNlIHtcbiAgICBAY29udGVudDtcbiAgfVxufVxuXG4vLyBJbnRlcm5hbCBtaXhpbiB0aGF0IGFkZHMgZW5hYmxlIGNsYXNzZXMgdG8gdGhlIHNlbGVjdG9yIGlmIG5lZWRlZC5cbkBtaXhpbiBfcmZzLW1lZGlhLXF1ZXJ5LXJ1bGUge1xuXG4gIEBpZiAkcmZzLWNsYXNzID09IGVuYWJsZSB7XG4gICAgQGlmICRyZnMtbW9kZSA9PSBtaW4tbWVkaWEtcXVlcnkge1xuICAgICAgQGNvbnRlbnQ7XG4gICAgfVxuXG4gICAgQGluY2x1ZGUgX3Jmcy1tZWRpYS1xdWVyeSB7XG4gICAgICAuZW5hYmxlLXJmcyAmLFxuICAgICAgJi5lbmFibGUtcmZzIHtcbiAgICAgICAgQGNvbnRlbnQ7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIEBlbHNlIHtcbiAgICBAaWYgJHJmcy1jbGFzcyA9PSBkaXNhYmxlIGFuZCAkcmZzLW1vZGUgPT0gbWluLW1lZGlhLXF1ZXJ5IHtcbiAgICAgIC5kaXNhYmxlLXJmcyAmLFxuICAgICAgJi5kaXNhYmxlLXJmcyB7XG4gICAgICAgIEBjb250ZW50O1xuICAgICAgfVxuICAgIH1cbiAgICBAaW5jbHVkZSBfcmZzLW1lZGlhLXF1ZXJ5IHtcbiAgICAgIEBjb250ZW50O1xuICAgIH1cbiAgfVxufVxuXG4vLyBIZWxwZXIgZnVuY3Rpb24gdG8gZ2V0IHRoZSBmb3JtYXR0ZWQgbm9uLXJlc3BvbnNpdmUgdmFsdWVcbkBmdW5jdGlvbiByZnMtdmFsdWUoJHZhbHVlcykge1xuICAvLyBDb252ZXJ0IHRvIGxpc3RcbiAgJHZhbHVlczogaWYodHlwZS1vZigkdmFsdWVzKSAhPSBsaXN0LCAoJHZhbHVlcywpLCAkdmFsdWVzKTtcblxuICAkdmFsOiAnJztcblxuICAvLyBMb29wIG92ZXIgZWFjaCB2YWx1ZSBhbmQgY2FsY3VsYXRlIHZhbHVlXG4gIEBlYWNoICR2YWx1ZSBpbiAkdmFsdWVzIHtcbiAgICBAaWYgJHZhbHVlID09IDAge1xuICAgICAgJHZhbDogJHZhbCArICcgMCc7XG4gICAgfVxuICAgIEBlbHNlIHtcbiAgICAgIC8vIENhY2hlICR2YWx1ZSB1bml0XG4gICAgICAkdW5pdDogaWYodHlwZS1vZigkdmFsdWUpID09IFwibnVtYmVyXCIsIHVuaXQoJHZhbHVlKSwgZmFsc2UpO1xuXG4gICAgICBAaWYgJHVuaXQgPT0gcHgge1xuICAgICAgICAvLyBDb252ZXJ0IHRvIHJlbSBpZiBuZWVkZWRcbiAgICAgICAgJHZhbDogJHZhbCArICcgJyArIGlmKCRyZnMtdW5pdCA9PSByZW0sICN7ZGl2aWRlKCR2YWx1ZSwgJHZhbHVlICogMCArICRyZnMtcmVtLXZhbHVlKX1yZW0sICR2YWx1ZSk7XG4gICAgICB9XG4gICAgICBAZWxzZSBpZiAkdW5pdCA9PSByZW0ge1xuICAgICAgICAvLyBDb252ZXJ0IHRvIHB4IGlmIG5lZWRlZFxuICAgICAgICAkdmFsOiAkdmFsICsgJyAnICsgaWYoJHJmcy11bml0ID09IHB4LCAje2RpdmlkZSgkdmFsdWUsICR2YWx1ZSAqIDAgKyAxKSAqICRyZnMtcmVtLXZhbHVlfXB4LCAkdmFsdWUpO1xuICAgICAgfVxuICAgICAgQGVsc2Uge1xuICAgICAgICAvLyBJZiAkdmFsdWUgaXNuJ3QgYSBudW1iZXIgKGxpa2UgaW5oZXJpdCkgb3IgJHZhbHVlIGhhcyBhIHVuaXQgKG5vdCBweCBvciByZW0sIGxpa2UgMS41ZW0pIG9yICQgaXMgMCwganVzdCBwcmludCB0aGUgdmFsdWVcbiAgICAgICAgJHZhbDogJHZhbCArICcgJyArICR2YWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBSZW1vdmUgZmlyc3Qgc3BhY2VcbiAgQHJldHVybiB1bnF1b3RlKHN0ci1zbGljZSgkdmFsLCAyKSk7XG59XG5cbi8vIEhlbHBlciBmdW5jdGlvbiB0byBnZXQgdGhlIHJlc3BvbnNpdmUgdmFsdWUgY2FsY3VsYXRlZCBieSBSRlNcbkBmdW5jdGlvbiByZnMtZmx1aWQtdmFsdWUoJHZhbHVlcykge1xuICAvLyBDb252ZXJ0IHRvIGxpc3RcbiAgJHZhbHVlczogaWYodHlwZS1vZigkdmFsdWVzKSAhPSBsaXN0LCAoJHZhbHVlcywpLCAkdmFsdWVzKTtcblxuICAkdmFsOiAnJztcblxuICAvLyBMb29wIG92ZXIgZWFjaCB2YWx1ZSBhbmQgY2FsY3VsYXRlIHZhbHVlXG4gIEBlYWNoICR2YWx1ZSBpbiAkdmFsdWVzIHtcbiAgICBAaWYgJHZhbHVlID09IDAge1xuICAgICAgJHZhbDogJHZhbCArICcgMCc7XG4gICAgfVxuXG4gICAgQGVsc2Uge1xuICAgICAgLy8gQ2FjaGUgJHZhbHVlIHVuaXRcbiAgICAgICR1bml0OiBpZih0eXBlLW9mKCR2YWx1ZSkgPT0gXCJudW1iZXJcIiwgdW5pdCgkdmFsdWUpLCBmYWxzZSk7XG5cbiAgICAgIC8vIElmICR2YWx1ZSBpc24ndCBhIG51bWJlciAobGlrZSBpbmhlcml0KSBvciAkdmFsdWUgaGFzIGEgdW5pdCAobm90IHB4IG9yIHJlbSwgbGlrZSAxLjVlbSkgb3IgJCBpcyAwLCBqdXN0IHByaW50IHRoZSB2YWx1ZVxuICAgICAgQGlmIG5vdCAkdW5pdCBvciAkdW5pdCAhPSBweCBhbmQgJHVuaXQgIT0gcmVtIHtcbiAgICAgICAgJHZhbDogJHZhbCArICcgJyArICR2YWx1ZTtcbiAgICAgIH1cblxuICAgICAgQGVsc2Uge1xuICAgICAgICAvLyBSZW1vdmUgdW5pdCBmcm9tICR2YWx1ZSBmb3IgY2FsY3VsYXRpb25zXG4gICAgICAgICR2YWx1ZTogZGl2aWRlKCR2YWx1ZSwgJHZhbHVlICogMCArIGlmKCR1bml0ID09IHB4LCAxLCBkaXZpZGUoMSwgJHJmcy1yZW0tdmFsdWUpKSk7XG5cbiAgICAgICAgLy8gT25seSBhZGQgdGhlIG1lZGlhIHF1ZXJ5IGlmIHRoZSB2YWx1ZSBpcyBncmVhdGVyIHRoYW4gdGhlIG1pbmltdW0gdmFsdWVcbiAgICAgICAgQGlmIGFicygkdmFsdWUpIDw9ICRyZnMtYmFzZS12YWx1ZSBvciBub3QgJGVuYWJsZS1yZnMge1xuICAgICAgICAgICR2YWw6ICR2YWwgKyAnICcgKyAgaWYoJHJmcy11bml0ID09IHJlbSwgI3tkaXZpZGUoJHZhbHVlLCAkcmZzLXJlbS12YWx1ZSl9cmVtLCAjeyR2YWx1ZX1weCk7XG4gICAgICAgIH1cbiAgICAgICAgQGVsc2Uge1xuICAgICAgICAgIC8vIENhbGN1bGF0ZSB0aGUgbWluaW11bSB2YWx1ZVxuICAgICAgICAgICR2YWx1ZS1taW46ICRyZnMtYmFzZS12YWx1ZSArIGRpdmlkZShhYnMoJHZhbHVlKSAtICRyZnMtYmFzZS12YWx1ZSwgJHJmcy1mYWN0b3IpO1xuXG4gICAgICAgICAgLy8gQ2FsY3VsYXRlIGRpZmZlcmVuY2UgYmV0d2VlbiAkdmFsdWUgYW5kIHRoZSBtaW5pbXVtIHZhbHVlXG4gICAgICAgICAgJHZhbHVlLWRpZmY6IGFicygkdmFsdWUpIC0gJHZhbHVlLW1pbjtcblxuICAgICAgICAgIC8vIEJhc2UgdmFsdWUgZm9ybWF0dGluZ1xuICAgICAgICAgICRtaW4td2lkdGg6IGlmKCRyZnMtdW5pdCA9PSByZW0sICN7ZGl2aWRlKCR2YWx1ZS1taW4sICRyZnMtcmVtLXZhbHVlKX1yZW0sICN7JHZhbHVlLW1pbn1weCk7XG5cbiAgICAgICAgICAvLyBVc2UgbmVnYXRpdmUgdmFsdWUgaWYgbmVlZGVkXG4gICAgICAgICAgJG1pbi13aWR0aDogaWYoJHZhbHVlIDwgMCwgLSRtaW4td2lkdGgsICRtaW4td2lkdGgpO1xuXG4gICAgICAgICAgLy8gVXNlIGB2bWluYCBpZiB0d28tZGltZW5zaW9uYWwgaXMgZW5hYmxlZFxuICAgICAgICAgICR2YXJpYWJsZS11bml0OiBpZigkcmZzLXR3by1kaW1lbnNpb25hbCwgdm1pbiwgdncpO1xuXG4gICAgICAgICAgLy8gQ2FsY3VsYXRlIHRoZSB2YXJpYWJsZSB3aWR0aCBiZXR3ZWVuIDAgYW5kICRyZnMtYnJlYWtwb2ludFxuICAgICAgICAgICR2YXJpYWJsZS13aWR0aDogI3tkaXZpZGUoJHZhbHVlLWRpZmYgKiAxMDAsICRyZnMtYnJlYWtwb2ludCl9I3skdmFyaWFibGUtdW5pdH07XG5cbiAgICAgICAgICAvLyBSZXR1cm4gdGhlIGNhbGN1bGF0ZWQgdmFsdWVcbiAgICAgICAgICAkdmFsOiAkdmFsICsgJyBjYWxjKCcgKyAkbWluLXdpZHRoICsgaWYoJHZhbHVlIDwgMCwgJyAtICcsICcgKyAnKSArICR2YXJpYWJsZS13aWR0aCArICcpJztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIFJlbW92ZSBmaXJzdCBzcGFjZVxuICBAcmV0dXJuIHVucXVvdGUoc3RyLXNsaWNlKCR2YWwsIDIpKTtcbn1cblxuLy8gUkZTIG1peGluXG5AbWl4aW4gcmZzKCR2YWx1ZXMsICRwcm9wZXJ0eTogZm9udC1zaXplKSB7XG4gIEBpZiAkdmFsdWVzICE9IG51bGwge1xuICAgICR2YWw6IHJmcy12YWx1ZSgkdmFsdWVzKTtcbiAgICAkZmx1aWRWYWw6IHJmcy1mbHVpZC12YWx1ZSgkdmFsdWVzKTtcblxuICAgIC8vIERvIG5vdCBwcmludCB0aGUgbWVkaWEgcXVlcnkgaWYgcmVzcG9uc2l2ZSAmIG5vbi1yZXNwb25zaXZlIHZhbHVlcyBhcmUgdGhlIHNhbWVcbiAgICBAaWYgJHZhbCA9PSAkZmx1aWRWYWwge1xuICAgICAgI3skcHJvcGVydHl9OiAkdmFsO1xuICAgIH1cbiAgICBAZWxzZSB7XG4gICAgICBAaW5jbHVkZSBfcmZzLXJ1bGUge1xuICAgICAgICAjeyRwcm9wZXJ0eX06IGlmKCRyZnMtbW9kZSA9PSBtYXgtbWVkaWEtcXVlcnksICR2YWwsICRmbHVpZFZhbCk7XG5cbiAgICAgICAgLy8gSW5jbHVkZSBzYWZhcmkgaWZyYW1lIHJlc2l6ZSBmaXggaWYgbmVlZGVkXG4gICAgICAgIG1pbi13aWR0aDogaWYoJHJmcy1zYWZhcmktaWZyYW1lLXJlc2l6ZS1idWctZml4LCAoMCAqIDF2dyksIG51bGwpO1xuICAgICAgfVxuXG4gICAgICBAaW5jbHVkZSBfcmZzLW1lZGlhLXF1ZXJ5LXJ1bGUge1xuICAgICAgICAjeyRwcm9wZXJ0eX06IGlmKCRyZnMtbW9kZSA9PSBtYXgtbWVkaWEtcXVlcnksICRmbHVpZFZhbCwgJHZhbCk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8vIFNob3J0aGFuZCBoZWxwZXIgbWl4aW5zXG5AbWl4aW4gZm9udC1zaXplKCR2YWx1ZSkge1xuICBAaW5jbHVkZSByZnMoJHZhbHVlKTtcbn1cblxuQG1peGluIHBhZGRpbmcoJHZhbHVlKSB7XG4gIEBpbmNsdWRlIHJmcygkdmFsdWUsIHBhZGRpbmcpO1xufVxuXG5AbWl4aW4gcGFkZGluZy10b3AoJHZhbHVlKSB7XG4gIEBpbmNsdWRlIHJmcygkdmFsdWUsIHBhZGRpbmctdG9wKTtcbn1cblxuQG1peGluIHBhZGRpbmctcmlnaHQoJHZhbHVlKSB7XG4gIEBpbmNsdWRlIHJmcygkdmFsdWUsIHBhZGRpbmctcmlnaHQpO1xufVxuXG5AbWl4aW4gcGFkZGluZy1ib3R0b20oJHZhbHVlKSB7XG4gIEBpbmNsdWRlIHJmcygkdmFsdWUsIHBhZGRpbmctYm90dG9tKTtcbn1cblxuQG1peGluIHBhZGRpbmctbGVmdCgkdmFsdWUpIHtcbiAgQGluY2x1ZGUgcmZzKCR2YWx1ZSwgcGFkZGluZy1sZWZ0KTtcbn1cblxuQG1peGluIG1hcmdpbigkdmFsdWUpIHtcbiAgQGluY2x1ZGUgcmZzKCR2YWx1ZSwgbWFyZ2luKTtcbn1cblxuQG1peGluIG1hcmdpbi10b3AoJHZhbHVlKSB7XG4gIEBpbmNsdWRlIHJmcygkdmFsdWUsIG1hcmdpbi10b3ApO1xufVxuXG5AbWl4aW4gbWFyZ2luLXJpZ2h0KCR2YWx1ZSkge1xuICBAaW5jbHVkZSByZnMoJHZhbHVlLCBtYXJnaW4tcmlnaHQpO1xufVxuXG5AbWl4aW4gbWFyZ2luLWJvdHRvbSgkdmFsdWUpIHtcbiAgQGluY2x1ZGUgcmZzKCR2YWx1ZSwgbWFyZ2luLWJvdHRvbSk7XG59XG5cbkBtaXhpbiBtYXJnaW4tbGVmdCgkdmFsdWUpIHtcbiAgQGluY2x1ZGUgcmZzKCR2YWx1ZSwgbWFyZ2luLWxlZnQpO1xufVxuIiwiLy8gVmFyaWFibGVzXG4vL1xuLy8gVmFyaWFibGVzIHNob3VsZCBmb2xsb3cgdGhlIGAkY29tcG9uZW50LXN0YXRlLXByb3BlcnR5LXNpemVgIGZvcm11bGEgZm9yXG4vLyBjb25zaXN0ZW50IG5hbWluZy4gRXg6ICRuYXYtbGluay1kaXNhYmxlZC1jb2xvciBhbmQgJG1vZGFsLWNvbnRlbnQtYm94LXNoYWRvdy14cy5cblxuLy8gQ29sb3Igc3lzdGVtXG5cbi8vIHNjc3MtZG9jcy1zdGFydCBncmF5LWNvbG9yLXZhcmlhYmxlc1xuJHdoaXRlOiAgICAjZmZmICFkZWZhdWx0O1xuJGdyYXktMTAwOiAjZjhmOWZhICFkZWZhdWx0O1xuJGdyYXktMjAwOiAjZTllY2VmICFkZWZhdWx0O1xuJGdyYXktMzAwOiAjZGVlMmU2ICFkZWZhdWx0O1xuJGdyYXktNDAwOiAjY2VkNGRhICFkZWZhdWx0O1xuJGdyYXktNTAwOiAjYWRiNWJkICFkZWZhdWx0O1xuJGdyYXktNjAwOiAjNmM3NTdkICFkZWZhdWx0O1xuJGdyYXktNzAwOiAjNDk1MDU3ICFkZWZhdWx0O1xuJGdyYXktODAwOiAjMzQzYTQwICFkZWZhdWx0O1xuJGdyYXktOTAwOiAjMjEyNTI5ICFkZWZhdWx0O1xuJGJsYWNrOiAgICAjMDAwICFkZWZhdWx0O1xuLy8gc2Nzcy1kb2NzLWVuZCBncmF5LWNvbG9yLXZhcmlhYmxlc1xuXG4vLyBmdXN2LWRpc2FibGVcbi8vIHNjc3MtZG9jcy1zdGFydCBncmF5LWNvbG9ycy1tYXBcbiRncmF5czogKFxuICBcIjEwMFwiOiAkZ3JheS0xMDAsXG4gIFwiMjAwXCI6ICRncmF5LTIwMCxcbiAgXCIzMDBcIjogJGdyYXktMzAwLFxuICBcIjQwMFwiOiAkZ3JheS00MDAsXG4gIFwiNTAwXCI6ICRncmF5LTUwMCxcbiAgXCI2MDBcIjogJGdyYXktNjAwLFxuICBcIjcwMFwiOiAkZ3JheS03MDAsXG4gIFwiODAwXCI6ICRncmF5LTgwMCxcbiAgXCI5MDBcIjogJGdyYXktOTAwXG4pICFkZWZhdWx0O1xuLy8gc2Nzcy1kb2NzLWVuZCBncmF5LWNvbG9ycy1tYXBcbi8vIGZ1c3YtZW5hYmxlXG5cbi8vIHNjc3MtZG9jcy1zdGFydCBjb2xvci12YXJpYWJsZXNcbiRibHVlOiAgICAjMGQ2ZWZkICFkZWZhdWx0O1xuJGluZGlnbzogICM2NjEwZjIgIWRlZmF1bHQ7XG4kcHVycGxlOiAgIzZmNDJjMSAhZGVmYXVsdDtcbiRwaW5rOiAgICAjZDYzMzg0ICFkZWZhdWx0O1xuJHJlZDogICAgICNkYzM1NDUgIWRlZmF1bHQ7XG4kb3JhbmdlOiAgI2ZkN2UxNCAhZGVmYXVsdDtcbiR5ZWxsb3c6ICAjZmZjMTA3ICFkZWZhdWx0O1xuJGdyZWVuOiAgICMxOTg3NTQgIWRlZmF1bHQ7XG4kdGVhbDogICAgIzIwYzk5NyAhZGVmYXVsdDtcbiRjeWFuOiAgICAjMGRjYWYwICFkZWZhdWx0O1xuLy8gc2Nzcy1kb2NzLWVuZCBjb2xvci12YXJpYWJsZXNcblxuLy8gc2Nzcy1kb2NzLXN0YXJ0IGNvbG9ycy1tYXBcbiRjb2xvcnM6IChcbiAgXCJibHVlXCI6ICAgICAgICRibHVlLFxuICBcImluZGlnb1wiOiAgICAgJGluZGlnbyxcbiAgXCJwdXJwbGVcIjogICAgICRwdXJwbGUsXG4gIFwicGlua1wiOiAgICAgICAkcGluayxcbiAgXCJyZWRcIjogICAgICAgICRyZWQsXG4gIFwib3JhbmdlXCI6ICAgICAkb3JhbmdlLFxuICBcInllbGxvd1wiOiAgICAgJHllbGxvdyxcbiAgXCJncmVlblwiOiAgICAgICRncmVlbixcbiAgXCJ0ZWFsXCI6ICAgICAgICR0ZWFsLFxuICBcImN5YW5cIjogICAgICAgJGN5YW4sXG4gIFwid2hpdGVcIjogICAgICAkd2hpdGUsXG4gIFwiZ3JheVwiOiAgICAgICAkZ3JheS02MDAsXG4gIFwiZ3JheS1kYXJrXCI6ICAkZ3JheS04MDBcbikgIWRlZmF1bHQ7XG4vLyBzY3NzLWRvY3MtZW5kIGNvbG9ycy1tYXBcblxuLy8gc2Nzcy1kb2NzLXN0YXJ0IHRoZW1lLWNvbG9yLXZhcmlhYmxlc1xuJHByaW1hcnk6ICAgICAgICRibHVlICFkZWZhdWx0O1xuJHNlY29uZGFyeTogICAgICRncmF5LTYwMCAhZGVmYXVsdDtcbiRzdWNjZXNzOiAgICAgICAkZ3JlZW4gIWRlZmF1bHQ7XG4kaW5mbzogICAgICAgICAgJGN5YW4gIWRlZmF1bHQ7XG4kd2FybmluZzogICAgICAgJHllbGxvdyAhZGVmYXVsdDtcbiRkYW5nZXI6ICAgICAgICAkcmVkICFkZWZhdWx0O1xuJGxpZ2h0OiAgICAgICAgICRncmF5LTEwMCAhZGVmYXVsdDtcbiRkYXJrOiAgICAgICAgICAkZ3JheS05MDAgIWRlZmF1bHQ7XG4vLyBzY3NzLWRvY3MtZW5kIHRoZW1lLWNvbG9yLXZhcmlhYmxlc1xuXG4vLyBzY3NzLWRvY3Mtc3RhcnQgdGhlbWUtY29sb3JzLW1hcFxuJHRoZW1lLWNvbG9yczogKFxuICBcInByaW1hcnlcIjogICAgJHByaW1hcnksXG4gIFwic2Vjb25kYXJ5XCI6ICAkc2Vjb25kYXJ5LFxuICBcInN1Y2Nlc3NcIjogICAgJHN1Y2Nlc3MsXG4gIFwiaW5mb1wiOiAgICAgICAkaW5mbyxcbiAgXCJ3YXJuaW5nXCI6ICAgICR3YXJuaW5nLFxuICBcImRhbmdlclwiOiAgICAgJGRhbmdlcixcbiAgXCJsaWdodFwiOiAgICAgICRsaWdodCxcbiAgXCJkYXJrXCI6ICAgICAgICRkYXJrXG4pICFkZWZhdWx0O1xuLy8gc2Nzcy1kb2NzLWVuZCB0aGVtZS1jb2xvcnMtbWFwXG5cbi8vIHNjc3MtZG9jcy1zdGFydCB0aGVtZS1jb2xvcnMtcmdiXG4kdGhlbWUtY29sb3JzLXJnYjogbWFwLWxvb3AoJHRoZW1lLWNvbG9ycywgdG8tcmdiLCBcIiR2YWx1ZVwiKSAhZGVmYXVsdDtcbi8vIHNjc3MtZG9jcy1lbmQgdGhlbWUtY29sb3JzLXJnYlxuXG4vLyBUaGUgY29udHJhc3QgcmF0aW8gdG8gcmVhY2ggYWdhaW5zdCB3aGl0ZSwgdG8gZGV0ZXJtaW5lIGlmIGNvbG9yIGNoYW5nZXMgZnJvbSBcImxpZ2h0XCIgdG8gXCJkYXJrXCIuIEFjY2VwdGFibGUgdmFsdWVzIGZvciBXQ0FHIDIuMCBhcmUgMywgNC41IGFuZCA3LlxuLy8gU2VlIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9XQ0FHMjAvI3Zpc3VhbC1hdWRpby1jb250cmFzdC1jb250cmFzdFxuJG1pbi1jb250cmFzdC1yYXRpbzogICA0LjUgIWRlZmF1bHQ7XG5cbi8vIEN1c3RvbWl6ZSB0aGUgbGlnaHQgYW5kIGRhcmsgdGV4dCBjb2xvcnMgZm9yIHVzZSBpbiBvdXIgY29sb3IgY29udHJhc3QgZnVuY3Rpb24uXG4kY29sb3ItY29udHJhc3QtZGFyazogICAgICAkYmxhY2sgIWRlZmF1bHQ7XG4kY29sb3ItY29udHJhc3QtbGlnaHQ6ICAgICAkd2hpdGUgIWRlZmF1bHQ7XG5cbi8vIGZ1c3YtZGlzYWJsZVxuJGJsdWUtMTAwOiB0aW50LWNvbG9yKCRibHVlLCA4MCUpICFkZWZhdWx0O1xuJGJsdWUtMjAwOiB0aW50LWNvbG9yKCRibHVlLCA2MCUpICFkZWZhdWx0O1xuJGJsdWUtMzAwOiB0aW50LWNvbG9yKCRibHVlLCA0MCUpICFkZWZhdWx0O1xuJGJsdWUtNDAwOiB0aW50LWNvbG9yKCRibHVlLCAyMCUpICFkZWZhdWx0O1xuJGJsdWUtNTAwOiAkYmx1ZSAhZGVmYXVsdDtcbiRibHVlLTYwMDogc2hhZGUtY29sb3IoJGJsdWUsIDIwJSkgIWRlZmF1bHQ7XG4kYmx1ZS03MDA6IHNoYWRlLWNvbG9yKCRibHVlLCA0MCUpICFkZWZhdWx0O1xuJGJsdWUtODAwOiBzaGFkZS1jb2xvcigkYmx1ZSwgNjAlKSAhZGVmYXVsdDtcbiRibHVlLTkwMDogc2hhZGUtY29sb3IoJGJsdWUsIDgwJSkgIWRlZmF1bHQ7XG5cbiRpbmRpZ28tMTAwOiB0aW50LWNvbG9yKCRpbmRpZ28sIDgwJSkgIWRlZmF1bHQ7XG4kaW5kaWdvLTIwMDogdGludC1jb2xvcigkaW5kaWdvLCA2MCUpICFkZWZhdWx0O1xuJGluZGlnby0zMDA6IHRpbnQtY29sb3IoJGluZGlnbywgNDAlKSAhZGVmYXVsdDtcbiRpbmRpZ28tNDAwOiB0aW50LWNvbG9yKCRpbmRpZ28sIDIwJSkgIWRlZmF1bHQ7XG4kaW5kaWdvLTUwMDogJGluZGlnbyAhZGVmYXVsdDtcbiRpbmRpZ28tNjAwOiBzaGFkZS1jb2xvcigkaW5kaWdvLCAyMCUpICFkZWZhdWx0O1xuJGluZGlnby03MDA6IHNoYWRlLWNvbG9yKCRpbmRpZ28sIDQwJSkgIWRlZmF1bHQ7XG4kaW5kaWdvLTgwMDogc2hhZGUtY29sb3IoJGluZGlnbywgNjAlKSAhZGVmYXVsdDtcbiRpbmRpZ28tOTAwOiBzaGFkZS1jb2xvcigkaW5kaWdvLCA4MCUpICFkZWZhdWx0O1xuXG4kcHVycGxlLTEwMDogdGludC1jb2xvcigkcHVycGxlLCA4MCUpICFkZWZhdWx0O1xuJHB1cnBsZS0yMDA6IHRpbnQtY29sb3IoJHB1cnBsZSwgNjAlKSAhZGVmYXVsdDtcbiRwdXJwbGUtMzAwOiB0aW50LWNvbG9yKCRwdXJwbGUsIDQwJSkgIWRlZmF1bHQ7XG4kcHVycGxlLTQwMDogdGludC1jb2xvcigkcHVycGxlLCAyMCUpICFkZWZhdWx0O1xuJHB1cnBsZS01MDA6ICRwdXJwbGUgIWRlZmF1bHQ7XG4kcHVycGxlLTYwMDogc2hhZGUtY29sb3IoJHB1cnBsZSwgMjAlKSAhZGVmYXVsdDtcbiRwdXJwbGUtNzAwOiBzaGFkZS1jb2xvcigkcHVycGxlLCA0MCUpICFkZWZhdWx0O1xuJHB1cnBsZS04MDA6IHNoYWRlLWNvbG9yKCRwdXJwbGUsIDYwJSkgIWRlZmF1bHQ7XG4kcHVycGxlLTkwMDogc2hhZGUtY29sb3IoJHB1cnBsZSwgODAlKSAhZGVmYXVsdDtcblxuJHBpbmstMTAwOiB0aW50LWNvbG9yKCRwaW5rLCA4MCUpICFkZWZhdWx0O1xuJHBpbmstMjAwOiB0aW50LWNvbG9yKCRwaW5rLCA2MCUpICFkZWZhdWx0O1xuJHBpbmstMzAwOiB0aW50LWNvbG9yKCRwaW5rLCA0MCUpICFkZWZhdWx0O1xuJHBpbmstNDAwOiB0aW50LWNvbG9yKCRwaW5rLCAyMCUpICFkZWZhdWx0O1xuJHBpbmstNTAwOiAkcGluayAhZGVmYXVsdDtcbiRwaW5rLTYwMDogc2hhZGUtY29sb3IoJHBpbmssIDIwJSkgIWRlZmF1bHQ7XG4kcGluay03MDA6IHNoYWRlLWNvbG9yKCRwaW5rLCA0MCUpICFkZWZhdWx0O1xuJHBpbmstODAwOiBzaGFkZS1jb2xvcigkcGluaywgNjAlKSAhZGVmYXVsdDtcbiRwaW5rLTkwMDogc2hhZGUtY29sb3IoJHBpbmssIDgwJSkgIWRlZmF1bHQ7XG5cbiRyZWQtMTAwOiB0aW50LWNvbG9yKCRyZWQsIDgwJSkgIWRlZmF1bHQ7XG4kcmVkLTIwMDogdGludC1jb2xvcigkcmVkLCA2MCUpICFkZWZhdWx0O1xuJHJlZC0zMDA6IHRpbnQtY29sb3IoJHJlZCwgNDAlKSAhZGVmYXVsdDtcbiRyZWQtNDAwOiB0aW50LWNvbG9yKCRyZWQsIDIwJSkgIWRlZmF1bHQ7XG4kcmVkLTUwMDogJHJlZCAhZGVmYXVsdDtcbiRyZWQtNjAwOiBzaGFkZS1jb2xvcigkcmVkLCAyMCUpICFkZWZhdWx0O1xuJHJlZC03MDA6IHNoYWRlLWNvbG9yKCRyZWQsIDQwJSkgIWRlZmF1bHQ7XG4kcmVkLTgwMDogc2hhZGUtY29sb3IoJHJlZCwgNjAlKSAhZGVmYXVsdDtcbiRyZWQtOTAwOiBzaGFkZS1jb2xvcigkcmVkLCA4MCUpICFkZWZhdWx0O1xuXG4kb3JhbmdlLTEwMDogdGludC1jb2xvcigkb3JhbmdlLCA4MCUpICFkZWZhdWx0O1xuJG9yYW5nZS0yMDA6IHRpbnQtY29sb3IoJG9yYW5nZSwgNjAlKSAhZGVmYXVsdDtcbiRvcmFuZ2UtMzAwOiB0aW50LWNvbG9yKCRvcmFuZ2UsIDQwJSkgIWRlZmF1bHQ7XG4kb3JhbmdlLTQwMDogdGludC1jb2xvcigkb3JhbmdlLCAyMCUpICFkZWZhdWx0O1xuJG9yYW5nZS01MDA6ICRvcmFuZ2UgIWRlZmF1bHQ7XG4kb3JhbmdlLTYwMDogc2hhZGUtY29sb3IoJG9yYW5nZSwgMjAlKSAhZGVmYXVsdDtcbiRvcmFuZ2UtNzAwOiBzaGFkZS1jb2xvcigkb3JhbmdlLCA0MCUpICFkZWZhdWx0O1xuJG9yYW5nZS04MDA6IHNoYWRlLWNvbG9yKCRvcmFuZ2UsIDYwJSkgIWRlZmF1bHQ7XG4kb3JhbmdlLTkwMDogc2hhZGUtY29sb3IoJG9yYW5nZSwgODAlKSAhZGVmYXVsdDtcblxuJHllbGxvdy0xMDA6IHRpbnQtY29sb3IoJHllbGxvdywgODAlKSAhZGVmYXVsdDtcbiR5ZWxsb3ctMjAwOiB0aW50LWNvbG9yKCR5ZWxsb3csIDYwJSkgIWRlZmF1bHQ7XG4keWVsbG93LTMwMDogdGludC1jb2xvcigkeWVsbG93LCA0MCUpICFkZWZhdWx0O1xuJHllbGxvdy00MDA6IHRpbnQtY29sb3IoJHllbGxvdywgMjAlKSAhZGVmYXVsdDtcbiR5ZWxsb3ctNTAwOiAkeWVsbG93ICFkZWZhdWx0O1xuJHllbGxvdy02MDA6IHNoYWRlLWNvbG9yKCR5ZWxsb3csIDIwJSkgIWRlZmF1bHQ7XG4keWVsbG93LTcwMDogc2hhZGUtY29sb3IoJHllbGxvdywgNDAlKSAhZGVmYXVsdDtcbiR5ZWxsb3ctODAwOiBzaGFkZS1jb2xvcigkeWVsbG93LCA2MCUpICFkZWZhdWx0O1xuJHllbGxvdy05MDA6IHNoYWRlLWNvbG9yKCR5ZWxsb3csIDgwJSkgIWRlZmF1bHQ7XG5cbiRncmVlbi0xMDA6IHRpbnQtY29sb3IoJGdyZWVuLCA4MCUpICFkZWZhdWx0O1xuJGdyZWVuLTIwMDogdGludC1jb2xvcigkZ3JlZW4sIDYwJSkgIWRlZmF1bHQ7XG4kZ3JlZW4tMzAwOiB0aW50LWNvbG9yKCRncmVlbiwgNDAlKSAhZGVmYXVsdDtcbiRncmVlbi00MDA6IHRpbnQtY29sb3IoJGdyZWVuLCAyMCUpICFkZWZhdWx0O1xuJGdyZWVuLTUwMDogJGdyZWVuICFkZWZhdWx0O1xuJGdyZWVuLTYwMDogc2hhZGUtY29sb3IoJGdyZWVuLCAyMCUpICFkZWZhdWx0O1xuJGdyZWVuLTcwMDogc2hhZGUtY29sb3IoJGdyZWVuLCA0MCUpICFkZWZhdWx0O1xuJGdyZWVuLTgwMDogc2hhZGUtY29sb3IoJGdyZWVuLCA2MCUpICFkZWZhdWx0O1xuJGdyZWVuLTkwMDogc2hhZGUtY29sb3IoJGdyZWVuLCA4MCUpICFkZWZhdWx0O1xuXG4kdGVhbC0xMDA6IHRpbnQtY29sb3IoJHRlYWwsIDgwJSkgIWRlZmF1bHQ7XG4kdGVhbC0yMDA6IHRpbnQtY29sb3IoJHRlYWwsIDYwJSkgIWRlZmF1bHQ7XG4kdGVhbC0zMDA6IHRpbnQtY29sb3IoJHRlYWwsIDQwJSkgIWRlZmF1bHQ7XG4kdGVhbC00MDA6IHRpbnQtY29sb3IoJHRlYWwsIDIwJSkgIWRlZmF1bHQ7XG4kdGVhbC01MDA6ICR0ZWFsICFkZWZhdWx0O1xuJHRlYWwtNjAwOiBzaGFkZS1jb2xvcigkdGVhbCwgMjAlKSAhZGVmYXVsdDtcbiR0ZWFsLTcwMDogc2hhZGUtY29sb3IoJHRlYWwsIDQwJSkgIWRlZmF1bHQ7XG4kdGVhbC04MDA6IHNoYWRlLWNvbG9yKCR0ZWFsLCA2MCUpICFkZWZhdWx0O1xuJHRlYWwtOTAwOiBzaGFkZS1jb2xvcigkdGVhbCwgODAlKSAhZGVmYXVsdDtcblxuJGN5YW4tMTAwOiB0aW50LWNvbG9yKCRjeWFuLCA4MCUpICFkZWZhdWx0O1xuJGN5YW4tMjAwOiB0aW50LWNvbG9yKCRjeWFuLCA2MCUpICFkZWZhdWx0O1xuJGN5YW4tMzAwOiB0aW50LWNvbG9yKCRjeWFuLCA0MCUpICFkZWZhdWx0O1xuJGN5YW4tNDAwOiB0aW50LWNvbG9yKCRjeWFuLCAyMCUpICFkZWZhdWx0O1xuJGN5YW4tNTAwOiAkY3lhbiAhZGVmYXVsdDtcbiRjeWFuLTYwMDogc2hhZGUtY29sb3IoJGN5YW4sIDIwJSkgIWRlZmF1bHQ7XG4kY3lhbi03MDA6IHNoYWRlLWNvbG9yKCRjeWFuLCA0MCUpICFkZWZhdWx0O1xuJGN5YW4tODAwOiBzaGFkZS1jb2xvcigkY3lhbiwgNjAlKSAhZGVmYXVsdDtcbiRjeWFuLTkwMDogc2hhZGUtY29sb3IoJGN5YW4sIDgwJSkgIWRlZmF1bHQ7XG5cbiRibHVlczogKFxuICBcImJsdWUtMTAwXCI6ICRibHVlLTEwMCxcbiAgXCJibHVlLTIwMFwiOiAkYmx1ZS0yMDAsXG4gIFwiYmx1ZS0zMDBcIjogJGJsdWUtMzAwLFxuICBcImJsdWUtNDAwXCI6ICRibHVlLTQwMCxcbiAgXCJibHVlLTUwMFwiOiAkYmx1ZS01MDAsXG4gIFwiYmx1ZS02MDBcIjogJGJsdWUtNjAwLFxuICBcImJsdWUtNzAwXCI6ICRibHVlLTcwMCxcbiAgXCJibHVlLTgwMFwiOiAkYmx1ZS04MDAsXG4gIFwiYmx1ZS05MDBcIjogJGJsdWUtOTAwXG4pICFkZWZhdWx0O1xuXG4kaW5kaWdvczogKFxuICBcImluZGlnby0xMDBcIjogJGluZGlnby0xMDAsXG4gIFwiaW5kaWdvLTIwMFwiOiAkaW5kaWdvLTIwMCxcbiAgXCJpbmRpZ28tMzAwXCI6ICRpbmRpZ28tMzAwLFxuICBcImluZGlnby00MDBcIjogJGluZGlnby00MDAsXG4gIFwiaW5kaWdvLTUwMFwiOiAkaW5kaWdvLTUwMCxcbiAgXCJpbmRpZ28tNjAwXCI6ICRpbmRpZ28tNjAwLFxuICBcImluZGlnby03MDBcIjogJGluZGlnby03MDAsXG4gIFwiaW5kaWdvLTgwMFwiOiAkaW5kaWdvLTgwMCxcbiAgXCJpbmRpZ28tOTAwXCI6ICRpbmRpZ28tOTAwXG4pICFkZWZhdWx0O1xuXG4kcHVycGxlczogKFxuICBcInB1cnBsZS0xMDBcIjogJHB1cnBsZS0yMDAsXG4gIFwicHVycGxlLTIwMFwiOiAkcHVycGxlLTEwMCxcbiAgXCJwdXJwbGUtMzAwXCI6ICRwdXJwbGUtMzAwLFxuICBcInB1cnBsZS00MDBcIjogJHB1cnBsZS00MDAsXG4gIFwicHVycGxlLTUwMFwiOiAkcHVycGxlLTUwMCxcbiAgXCJwdXJwbGUtNjAwXCI6ICRwdXJwbGUtNjAwLFxuICBcInB1cnBsZS03MDBcIjogJHB1cnBsZS03MDAsXG4gIFwicHVycGxlLTgwMFwiOiAkcHVycGxlLTgwMCxcbiAgXCJwdXJwbGUtOTAwXCI6ICRwdXJwbGUtOTAwXG4pICFkZWZhdWx0O1xuXG4kcGlua3M6IChcbiAgXCJwaW5rLTEwMFwiOiAkcGluay0xMDAsXG4gIFwicGluay0yMDBcIjogJHBpbmstMjAwLFxuICBcInBpbmstMzAwXCI6ICRwaW5rLTMwMCxcbiAgXCJwaW5rLTQwMFwiOiAkcGluay00MDAsXG4gIFwicGluay01MDBcIjogJHBpbmstNTAwLFxuICBcInBpbmstNjAwXCI6ICRwaW5rLTYwMCxcbiAgXCJwaW5rLTcwMFwiOiAkcGluay03MDAsXG4gIFwicGluay04MDBcIjogJHBpbmstODAwLFxuICBcInBpbmstOTAwXCI6ICRwaW5rLTkwMFxuKSAhZGVmYXVsdDtcblxuJHJlZHM6IChcbiAgXCJyZWQtMTAwXCI6ICRyZWQtMTAwLFxuICBcInJlZC0yMDBcIjogJHJlZC0yMDAsXG4gIFwicmVkLTMwMFwiOiAkcmVkLTMwMCxcbiAgXCJyZWQtNDAwXCI6ICRyZWQtNDAwLFxuICBcInJlZC01MDBcIjogJHJlZC01MDAsXG4gIFwicmVkLTYwMFwiOiAkcmVkLTYwMCxcbiAgXCJyZWQtNzAwXCI6ICRyZWQtNzAwLFxuICBcInJlZC04MDBcIjogJHJlZC04MDAsXG4gIFwicmVkLTkwMFwiOiAkcmVkLTkwMFxuKSAhZGVmYXVsdDtcblxuJG9yYW5nZXM6IChcbiAgXCJvcmFuZ2UtMTAwXCI6ICRvcmFuZ2UtMTAwLFxuICBcIm9yYW5nZS0yMDBcIjogJG9yYW5nZS0yMDAsXG4gIFwib3JhbmdlLTMwMFwiOiAkb3JhbmdlLTMwMCxcbiAgXCJvcmFuZ2UtNDAwXCI6ICRvcmFuZ2UtNDAwLFxuICBcIm9yYW5nZS01MDBcIjogJG9yYW5nZS01MDAsXG4gIFwib3JhbmdlLTYwMFwiOiAkb3JhbmdlLTYwMCxcbiAgXCJvcmFuZ2UtNzAwXCI6ICRvcmFuZ2UtNzAwLFxuICBcIm9yYW5nZS04MDBcIjogJG9yYW5nZS04MDAsXG4gIFwib3JhbmdlLTkwMFwiOiAkb3JhbmdlLTkwMFxuKSAhZGVmYXVsdDtcblxuJHllbGxvd3M6IChcbiAgXCJ5ZWxsb3ctMTAwXCI6ICR5ZWxsb3ctMTAwLFxuICBcInllbGxvdy0yMDBcIjogJHllbGxvdy0yMDAsXG4gIFwieWVsbG93LTMwMFwiOiAkeWVsbG93LTMwMCxcbiAgXCJ5ZWxsb3ctNDAwXCI6ICR5ZWxsb3ctNDAwLFxuICBcInllbGxvdy01MDBcIjogJHllbGxvdy01MDAsXG4gIFwieWVsbG93LTYwMFwiOiAkeWVsbG93LTYwMCxcbiAgXCJ5ZWxsb3ctNzAwXCI6ICR5ZWxsb3ctNzAwLFxuICBcInllbGxvdy04MDBcIjogJHllbGxvdy04MDAsXG4gIFwieWVsbG93LTkwMFwiOiAkeWVsbG93LTkwMFxuKSAhZGVmYXVsdDtcblxuJGdyZWVuczogKFxuICBcImdyZWVuLTEwMFwiOiAkZ3JlZW4tMTAwLFxuICBcImdyZWVuLTIwMFwiOiAkZ3JlZW4tMjAwLFxuICBcImdyZWVuLTMwMFwiOiAkZ3JlZW4tMzAwLFxuICBcImdyZWVuLTQwMFwiOiAkZ3JlZW4tNDAwLFxuICBcImdyZWVuLTUwMFwiOiAkZ3JlZW4tNTAwLFxuICBcImdyZWVuLTYwMFwiOiAkZ3JlZW4tNjAwLFxuICBcImdyZWVuLTcwMFwiOiAkZ3JlZW4tNzAwLFxuICBcImdyZWVuLTgwMFwiOiAkZ3JlZW4tODAwLFxuICBcImdyZWVuLTkwMFwiOiAkZ3JlZW4tOTAwXG4pICFkZWZhdWx0O1xuXG4kdGVhbHM6IChcbiAgXCJ0ZWFsLTEwMFwiOiAkdGVhbC0xMDAsXG4gIFwidGVhbC0yMDBcIjogJHRlYWwtMjAwLFxuICBcInRlYWwtMzAwXCI6ICR0ZWFsLTMwMCxcbiAgXCJ0ZWFsLTQwMFwiOiAkdGVhbC00MDAsXG4gIFwidGVhbC01MDBcIjogJHRlYWwtNTAwLFxuICBcInRlYWwtNjAwXCI6ICR0ZWFsLTYwMCxcbiAgXCJ0ZWFsLTcwMFwiOiAkdGVhbC03MDAsXG4gIFwidGVhbC04MDBcIjogJHRlYWwtODAwLFxuICBcInRlYWwtOTAwXCI6ICR0ZWFsLTkwMFxuKSAhZGVmYXVsdDtcblxuJGN5YW5zOiAoXG4gIFwiY3lhbi0xMDBcIjogJGN5YW4tMTAwLFxuICBcImN5YW4tMjAwXCI6ICRjeWFuLTIwMCxcbiAgXCJjeWFuLTMwMFwiOiAkY3lhbi0zMDAsXG4gIFwiY3lhbi00MDBcIjogJGN5YW4tNDAwLFxuICBcImN5YW4tNTAwXCI6ICRjeWFuLTUwMCxcbiAgXCJjeWFuLTYwMFwiOiAkY3lhbi02MDAsXG4gIFwiY3lhbi03MDBcIjogJGN5YW4tNzAwLFxuICBcImN5YW4tODAwXCI6ICRjeWFuLTgwMCxcbiAgXCJjeWFuLTkwMFwiOiAkY3lhbi05MDBcbikgIWRlZmF1bHQ7XG4vLyBmdXN2LWVuYWJsZVxuXG4vLyBDaGFyYWN0ZXJzIHdoaWNoIGFyZSBlc2NhcGVkIGJ5IHRoZSBlc2NhcGUtc3ZnIGZ1bmN0aW9uXG4kZXNjYXBlZC1jaGFyYWN0ZXJzOiAoXG4gIChcIjxcIiwgXCIlM2NcIiksXG4gIChcIj5cIiwgXCIlM2VcIiksXG4gIChcIiNcIiwgXCIlMjNcIiksXG4gIChcIihcIiwgXCIlMjhcIiksXG4gIChcIilcIiwgXCIlMjlcIiksXG4pICFkZWZhdWx0O1xuXG4vLyBPcHRpb25zXG4vL1xuLy8gUXVpY2tseSBtb2RpZnkgZ2xvYmFsIHN0eWxpbmcgYnkgZW5hYmxpbmcgb3IgZGlzYWJsaW5nIG9wdGlvbmFsIGZlYXR1cmVzLlxuXG4kZW5hYmxlLWNhcmV0OiAgICAgICAgICAgICAgICB0cnVlICFkZWZhdWx0O1xuJGVuYWJsZS1yb3VuZGVkOiAgICAgICAgICAgICAgdHJ1ZSAhZGVmYXVsdDtcbiRlbmFibGUtc2hhZG93czogICAgICAgICAgICAgIGZhbHNlICFkZWZhdWx0O1xuJGVuYWJsZS1ncmFkaWVudHM6ICAgICAgICAgICAgZmFsc2UgIWRlZmF1bHQ7XG4kZW5hYmxlLXRyYW5zaXRpb25zOiAgICAgICAgICB0cnVlICFkZWZhdWx0O1xuJGVuYWJsZS1yZWR1Y2VkLW1vdGlvbjogICAgICAgdHJ1ZSAhZGVmYXVsdDtcbiRlbmFibGUtc21vb3RoLXNjcm9sbDogICAgICAgIHRydWUgIWRlZmF1bHQ7XG4kZW5hYmxlLWdyaWQtY2xhc3NlczogICAgICAgICB0cnVlICFkZWZhdWx0O1xuJGVuYWJsZS1jc3NncmlkOiAgICAgICAgICAgICAgZmFsc2UgIWRlZmF1bHQ7XG4kZW5hYmxlLWJ1dHRvbi1wb2ludGVyczogICAgICB0cnVlICFkZWZhdWx0O1xuJGVuYWJsZS1yZnM6ICAgICAgICAgICAgICAgICAgdHJ1ZSAhZGVmYXVsdDtcbiRlbmFibGUtdmFsaWRhdGlvbi1pY29uczogICAgIHRydWUgIWRlZmF1bHQ7XG4kZW5hYmxlLW5lZ2F0aXZlLW1hcmdpbnM6ICAgICBmYWxzZSAhZGVmYXVsdDtcbiRlbmFibGUtZGVwcmVjYXRpb24tbWVzc2FnZXM6IHRydWUgIWRlZmF1bHQ7XG4kZW5hYmxlLWltcG9ydGFudC11dGlsaXRpZXM6ICB0cnVlICFkZWZhdWx0O1xuXG4vLyBQcmVmaXggZm9yIDpyb290IENTUyB2YXJpYWJsZXNcblxuJHZhcmlhYmxlLXByZWZpeDogICAgICAgICAgICAgYnMtICFkZWZhdWx0O1xuXG4vLyBHcmFkaWVudFxuLy9cbi8vIFRoZSBncmFkaWVudCB3aGljaCBpcyBhZGRlZCB0byBjb21wb25lbnRzIGlmIGAkZW5hYmxlLWdyYWRpZW50c2AgaXMgYHRydWVgXG4vLyBUaGlzIGdyYWRpZW50IGlzIGFsc28gYWRkZWQgdG8gZWxlbWVudHMgd2l0aCBgLmJnLWdyYWRpZW50YFxuLy8gc2Nzcy1kb2NzLXN0YXJ0IHZhcmlhYmxlLWdyYWRpZW50XG4kZ3JhZGllbnQ6IGxpbmVhci1ncmFkaWVudCgxODBkZWcsIHJnYmEoJHdoaXRlLCAuMTUpLCByZ2JhKCR3aGl0ZSwgMCkpICFkZWZhdWx0O1xuLy8gc2Nzcy1kb2NzLWVuZCB2YXJpYWJsZS1ncmFkaWVudFxuXG4vLyBTcGFjaW5nXG4vL1xuLy8gQ29udHJvbCB0aGUgZGVmYXVsdCBzdHlsaW5nIG9mIG1vc3QgQm9vdHN0cmFwIGVsZW1lbnRzIGJ5IG1vZGlmeWluZyB0aGVzZVxuLy8gdmFyaWFibGVzLiBNb3N0bHkgZm9jdXNlZCBvbiBzcGFjaW5nLlxuLy8gWW91IGNhbiBhZGQgbW9yZSBlbnRyaWVzIHRvIHRoZSAkc3BhY2VycyBtYXAsIHNob3VsZCB5b3UgbmVlZCBtb3JlIHZhcmlhdGlvbi5cblxuLy8gc2Nzcy1kb2NzLXN0YXJ0IHNwYWNlci12YXJpYWJsZXMtbWFwc1xuJHNwYWNlcjogMXJlbSAhZGVmYXVsdDtcbiRzcGFjZXJzOiAoXG4gIDA6IDAsXG4gIDE6ICRzcGFjZXIgKiAuMjUsXG4gIDI6ICRzcGFjZXIgKiAuNSxcbiAgMzogJHNwYWNlcixcbiAgNDogJHNwYWNlciAqIDEuNSxcbiAgNTogJHNwYWNlciAqIDMsXG4pICFkZWZhdWx0O1xuXG4kbmVnYXRpdmUtc3BhY2VyczogaWYoJGVuYWJsZS1uZWdhdGl2ZS1tYXJnaW5zLCBuZWdhdGl2aWZ5LW1hcCgkc3BhY2VycyksIG51bGwpICFkZWZhdWx0O1xuLy8gc2Nzcy1kb2NzLWVuZCBzcGFjZXItdmFyaWFibGVzLW1hcHNcblxuLy8gUG9zaXRpb25cbi8vXG4vLyBEZWZpbmUgdGhlIGVkZ2UgcG9zaXRpb25pbmcgYW5jaG9ycyBvZiB0aGUgcG9zaXRpb24gdXRpbGl0aWVzLlxuXG4vLyBzY3NzLWRvY3Mtc3RhcnQgcG9zaXRpb24tbWFwXG4kcG9zaXRpb24tdmFsdWVzOiAoXG4gIDA6IDAsXG4gIDUwOiA1MCUsXG4gIDEwMDogMTAwJVxuKSAhZGVmYXVsdDtcbi8vIHNjc3MtZG9jcy1lbmQgcG9zaXRpb24tbWFwXG5cbi8vIEJvZHlcbi8vXG4vLyBTZXR0aW5ncyBmb3IgdGhlIGA8Ym9keT5gIGVsZW1lbnQuXG5cbiRib2R5LWJnOiAgICAgICAgICAgICAgICAgICAkd2hpdGUgIWRlZmF1bHQ7XG4kYm9keS1jb2xvcjogICAgICAgICAgICAgICAgJGdyYXktOTAwICFkZWZhdWx0O1xuJGJvZHktdGV4dC1hbGlnbjogICAgICAgICAgIG51bGwgIWRlZmF1bHQ7XG5cbi8vIFV0aWxpdGllcyBtYXBzXG4vL1xuLy8gRXh0ZW5kcyB0aGUgZGVmYXVsdCBgJHRoZW1lLWNvbG9yc2AgbWFwcyB0byBoZWxwIGNyZWF0ZSBvdXIgdXRpbGl0aWVzLlxuXG4vLyBDb21lIHY2LCB3ZSdsbCBkZS1kdXBlIHRoZXNlIHZhcmlhYmxlcy4gVW50aWwgdGhlbiwgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHksIHdlIGtlZXAgdGhlbSB0byByZWFzc2lnbi5cbi8vIHNjc3MtZG9jcy1zdGFydCB1dGlsaXRpZXMtY29sb3JzXG4kdXRpbGl0aWVzLWNvbG9yczogJHRoZW1lLWNvbG9ycy1yZ2IgIWRlZmF1bHQ7XG4vLyBzY3NzLWRvY3MtZW5kIHV0aWxpdGllcy1jb2xvcnNcblxuLy8gc2Nzcy1kb2NzLXN0YXJ0IHV0aWxpdGllcy10ZXh0LWNvbG9yc1xuJHV0aWxpdGllcy10ZXh0OiBtYXAtbWVyZ2UoXG4gICR1dGlsaXRpZXMtY29sb3JzLFxuICAoXG4gICAgXCJibGFja1wiOiB0by1yZ2IoJGJsYWNrKSxcbiAgICBcIndoaXRlXCI6IHRvLXJnYigkd2hpdGUpLFxuICAgIFwiYm9keVwiOiB0by1yZ2IoJGJvZHktY29sb3IpXG4gIClcbikgIWRlZmF1bHQ7XG4kdXRpbGl0aWVzLXRleHQtY29sb3JzOiBtYXAtbG9vcCgkdXRpbGl0aWVzLXRleHQsIHJnYmEtY3NzLXZhciwgXCIka2V5XCIsIFwidGV4dFwiKSAhZGVmYXVsdDtcbi8vIHNjc3MtZG9jcy1lbmQgdXRpbGl0aWVzLXRleHQtY29sb3JzXG5cbi8vIHNjc3MtZG9jcy1zdGFydCB1dGlsaXRpZXMtYmctY29sb3JzXG4kdXRpbGl0aWVzLWJnOiBtYXAtbWVyZ2UoXG4gICR1dGlsaXRpZXMtY29sb3JzLFxuICAoXG4gICAgXCJibGFja1wiOiB0by1yZ2IoJGJsYWNrKSxcbiAgICBcIndoaXRlXCI6IHRvLXJnYigkd2hpdGUpLFxuICAgIFwiYm9keVwiOiB0by1yZ2IoJGJvZHktYmcpXG4gIClcbikgIWRlZmF1bHQ7XG4kdXRpbGl0aWVzLWJnLWNvbG9yczogbWFwLWxvb3AoJHV0aWxpdGllcy1iZywgcmdiYS1jc3MtdmFyLCBcIiRrZXlcIiwgXCJiZ1wiKSAhZGVmYXVsdDtcbi8vIHNjc3MtZG9jcy1lbmQgdXRpbGl0aWVzLWJnLWNvbG9yc1xuXG4vLyBMaW5rc1xuLy9cbi8vIFN0eWxlIGFuY2hvciBlbGVtZW50cy5cblxuJGxpbmstY29sb3I6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHByaW1hcnkgIWRlZmF1bHQ7XG4kbGluay1kZWNvcmF0aW9uOiAgICAgICAgICAgICAgICAgICAgICAgICB1bmRlcmxpbmUgIWRlZmF1bHQ7XG4kbGluay1zaGFkZS1wZXJjZW50YWdlOiAgICAgICAgICAgICAgICAgICAyMCUgIWRlZmF1bHQ7XG4kbGluay1ob3Zlci1jb2xvcjogICAgICAgICAgICAgICAgICAgICAgICBzaGlmdC1jb2xvcigkbGluay1jb2xvciwgJGxpbmstc2hhZGUtcGVyY2VudGFnZSkgIWRlZmF1bHQ7XG4kbGluay1ob3Zlci1kZWNvcmF0aW9uOiAgICAgICAgICAgICAgICAgICBudWxsICFkZWZhdWx0O1xuXG4kc3RyZXRjaGVkLWxpbmstcHNldWRvLWVsZW1lbnQ6ICAgICAgICAgICBhZnRlciAhZGVmYXVsdDtcbiRzdHJldGNoZWQtbGluay16LWluZGV4OiAgICAgICAgICAgICAgICAgIDEgIWRlZmF1bHQ7XG5cbi8vIFBhcmFncmFwaHNcbi8vXG4vLyBTdHlsZSBwIGVsZW1lbnQuXG5cbiRwYXJhZ3JhcGgtbWFyZ2luLWJvdHRvbTogICAxcmVtICFkZWZhdWx0O1xuXG5cbi8vIEdyaWQgYnJlYWtwb2ludHNcbi8vXG4vLyBEZWZpbmUgdGhlIG1pbmltdW0gZGltZW5zaW9ucyBhdCB3aGljaCB5b3VyIGxheW91dCB3aWxsIGNoYW5nZSxcbi8vIGFkYXB0aW5nIHRvIGRpZmZlcmVudCBzY3JlZW4gc2l6ZXMsIGZvciB1c2UgaW4gbWVkaWEgcXVlcmllcy5cblxuLy8gc2Nzcy1kb2NzLXN0YXJ0IGdyaWQtYnJlYWtwb2ludHNcbiRncmlkLWJyZWFrcG9pbnRzOiAoXG4gIHhzOiAwLFxuICBzbTogNTc2cHgsXG4gIG1kOiA3NjhweCxcbiAgbGc6IDk5MnB4LFxuICB4bDogMTIwMHB4LFxuICB4eGw6IDE0MDBweFxuKSAhZGVmYXVsdDtcbi8vIHNjc3MtZG9jcy1lbmQgZ3JpZC1icmVha3BvaW50c1xuXG5AaW5jbHVkZSBfYXNzZXJ0LWFzY2VuZGluZygkZ3JpZC1icmVha3BvaW50cywgXCIkZ3JpZC1icmVha3BvaW50c1wiKTtcbkBpbmNsdWRlIF9hc3NlcnQtc3RhcnRzLWF0LXplcm8oJGdyaWQtYnJlYWtwb2ludHMsIFwiJGdyaWQtYnJlYWtwb2ludHNcIik7XG5cblxuLy8gR3JpZCBjb250YWluZXJzXG4vL1xuLy8gRGVmaW5lIHRoZSBtYXhpbXVtIHdpZHRoIG9mIGAuY29udGFpbmVyYCBmb3IgZGlmZmVyZW50IHNjcmVlbiBzaXplcy5cblxuLy8gc2Nzcy1kb2NzLXN0YXJ0IGNvbnRhaW5lci1tYXgtd2lkdGhzXG4kY29udGFpbmVyLW1heC13aWR0aHM6IChcbiAgc206IDU0MHB4LFxuICBtZDogNzIwcHgsXG4gIGxnOiA5NjBweCxcbiAgeGw6IDExNDBweCxcbiAgeHhsOiAxMzIwcHhcbikgIWRlZmF1bHQ7XG4vLyBzY3NzLWRvY3MtZW5kIGNvbnRhaW5lci1tYXgtd2lkdGhzXG5cbkBpbmNsdWRlIF9hc3NlcnQtYXNjZW5kaW5nKCRjb250YWluZXItbWF4LXdpZHRocywgXCIkY29udGFpbmVyLW1heC13aWR0aHNcIik7XG5cblxuLy8gR3JpZCBjb2x1bW5zXG4vL1xuLy8gU2V0IHRoZSBudW1iZXIgb2YgY29sdW1ucyBhbmQgc3BlY2lmeSB0aGUgd2lkdGggb2YgdGhlIGd1dHRlcnMuXG5cbiRncmlkLWNvbHVtbnM6ICAgICAgICAgICAgICAgIDEyICFkZWZhdWx0O1xuJGdyaWQtZ3V0dGVyLXdpZHRoOiAgICAgICAgICAgMS41cmVtICFkZWZhdWx0O1xuJGdyaWQtcm93LWNvbHVtbnM6ICAgICAgICAgICAgNiAhZGVmYXVsdDtcblxuJGd1dHRlcnM6ICRzcGFjZXJzICFkZWZhdWx0O1xuXG4vLyBDb250YWluZXIgcGFkZGluZ1xuXG4kY29udGFpbmVyLXBhZGRpbmcteDogJGdyaWQtZ3V0dGVyLXdpZHRoICogLjUgIWRlZmF1bHQ7XG5cblxuLy8gQ29tcG9uZW50c1xuLy9cbi8vIERlZmluZSBjb21tb24gcGFkZGluZyBhbmQgYm9yZGVyIHJhZGl1cyBzaXplcyBhbmQgbW9yZS5cblxuLy8gc2Nzcy1kb2NzLXN0YXJ0IGJvcmRlci12YXJpYWJsZXNcbiRib3JkZXItd2lkdGg6ICAgICAgICAgICAgICAgIDFweCAhZGVmYXVsdDtcbiRib3JkZXItd2lkdGhzOiAoXG4gIDE6IDFweCxcbiAgMjogMnB4LFxuICAzOiAzcHgsXG4gIDQ6IDRweCxcbiAgNTogNXB4XG4pICFkZWZhdWx0O1xuXG4kYm9yZGVyLWNvbG9yOiAgICAgICAgICAgICAgICAkZ3JheS0zMDAgIWRlZmF1bHQ7XG4vLyBzY3NzLWRvY3MtZW5kIGJvcmRlci12YXJpYWJsZXNcblxuLy8gc2Nzcy1kb2NzLXN0YXJ0IGJvcmRlci1yYWRpdXMtdmFyaWFibGVzXG4kYm9yZGVyLXJhZGl1czogICAgICAgICAgICAgICAuMjVyZW0gIWRlZmF1bHQ7XG4kYm9yZGVyLXJhZGl1cy1zbTogICAgICAgICAgICAuMnJlbSAhZGVmYXVsdDtcbiRib3JkZXItcmFkaXVzLWxnOiAgICAgICAgICAgIC4zcmVtICFkZWZhdWx0O1xuJGJvcmRlci1yYWRpdXMtcGlsbDogICAgICAgICAgNTByZW0gIWRlZmF1bHQ7XG4vLyBzY3NzLWRvY3MtZW5kIGJvcmRlci1yYWRpdXMtdmFyaWFibGVzXG5cbi8vIHNjc3MtZG9jcy1zdGFydCBib3gtc2hhZG93LXZhcmlhYmxlc1xuJGJveC1zaGFkb3c6ICAgICAgICAgICAgICAgICAgMCAuNXJlbSAxcmVtIHJnYmEoJGJsYWNrLCAuMTUpICFkZWZhdWx0O1xuJGJveC1zaGFkb3ctc206ICAgICAgICAgICAgICAgMCAuMTI1cmVtIC4yNXJlbSByZ2JhKCRibGFjaywgLjA3NSkgIWRlZmF1bHQ7XG4kYm94LXNoYWRvdy1sZzogICAgICAgICAgICAgICAwIDFyZW0gM3JlbSByZ2JhKCRibGFjaywgLjE3NSkgIWRlZmF1bHQ7XG4kYm94LXNoYWRvdy1pbnNldDogICAgICAgICAgICBpbnNldCAwIDFweCAycHggcmdiYSgkYmxhY2ssIC4wNzUpICFkZWZhdWx0O1xuLy8gc2Nzcy1kb2NzLWVuZCBib3gtc2hhZG93LXZhcmlhYmxlc1xuXG4kY29tcG9uZW50LWFjdGl2ZS1jb2xvcjogICAgICAkd2hpdGUgIWRlZmF1bHQ7XG4kY29tcG9uZW50LWFjdGl2ZS1iZzogICAgICAgICAkcHJpbWFyeSAhZGVmYXVsdDtcblxuLy8gc2Nzcy1kb2NzLXN0YXJ0IGNhcmV0LXZhcmlhYmxlc1xuJGNhcmV0LXdpZHRoOiAgICAgICAgICAgICAgICAgLjNlbSAhZGVmYXVsdDtcbiRjYXJldC12ZXJ0aWNhbC1hbGlnbjogICAgICAgICRjYXJldC13aWR0aCAqIC44NSAhZGVmYXVsdDtcbiRjYXJldC1zcGFjaW5nOiAgICAgICAgICAgICAgICRjYXJldC13aWR0aCAqIC44NSAhZGVmYXVsdDtcbi8vIHNjc3MtZG9jcy1lbmQgY2FyZXQtdmFyaWFibGVzXG5cbiR0cmFuc2l0aW9uLWJhc2U6ICAgICAgICAgICAgIGFsbCAuMnMgZWFzZS1pbi1vdXQgIWRlZmF1bHQ7XG4kdHJhbnNpdGlvbi1mYWRlOiAgICAgICAgICAgICBvcGFjaXR5IC4xNXMgbGluZWFyICFkZWZhdWx0O1xuLy8gc2Nzcy1kb2NzLXN0YXJ0IGNvbGxhcHNlLXRyYW5zaXRpb25cbiR0cmFuc2l0aW9uLWNvbGxhcHNlOiAgICAgICAgIGhlaWdodCAuMzVzIGVhc2UgIWRlZmF1bHQ7XG4kdHJhbnNpdGlvbi1jb2xsYXBzZS13aWR0aDogICB3aWR0aCAuMzVzIGVhc2UgIWRlZmF1bHQ7XG4vLyBzY3NzLWRvY3MtZW5kIGNvbGxhcHNlLXRyYW5zaXRpb25cblxuLy8gc3R5bGVsaW50LWRpc2FibGUgZnVuY3Rpb24tZGlzYWxsb3dlZC1saXN0XG4vLyBzY3NzLWRvY3Mtc3RhcnQgYXNwZWN0LXJhdGlvc1xuJGFzcGVjdC1yYXRpb3M6IChcbiAgXCIxeDFcIjogMTAwJSxcbiAgXCI0eDNcIjogY2FsYygzIC8gNCAqIDEwMCUpLFxuICBcIjE2eDlcIjogY2FsYyg5IC8gMTYgKiAxMDAlKSxcbiAgXCIyMXg5XCI6IGNhbGMoOSAvIDIxICogMTAwJSlcbikgIWRlZmF1bHQ7XG4vLyBzY3NzLWRvY3MtZW5kIGFzcGVjdC1yYXRpb3Ncbi8vIHN0eWxlbGludC1lbmFibGUgZnVuY3Rpb24tZGlzYWxsb3dlZC1saXN0XG5cbi8vIFR5cG9ncmFwaHlcbi8vXG4vLyBGb250LCBsaW5lLWhlaWdodCwgYW5kIGNvbG9yIGZvciBib2R5IHRleHQsIGhlYWRpbmdzLCBhbmQgbW9yZS5cblxuLy8gc2Nzcy1kb2NzLXN0YXJ0IGZvbnQtdmFyaWFibGVzXG4vLyBzdHlsZWxpbnQtZGlzYWJsZSB2YWx1ZS1rZXl3b3JkLWNhc2VcbiRmb250LWZhbWlseS1zYW5zLXNlcmlmOiAgICAgIHN5c3RlbS11aSwgLWFwcGxlLXN5c3RlbSwgXCJTZWdvZSBVSVwiLCBSb2JvdG8sIFwiSGVsdmV0aWNhIE5ldWVcIiwgQXJpYWwsIFwiTm90byBTYW5zXCIsIFwiTGliZXJhdGlvbiBTYW5zXCIsIHNhbnMtc2VyaWYsIFwiQXBwbGUgQ29sb3IgRW1vamlcIiwgXCJTZWdvZSBVSSBFbW9qaVwiLCBcIlNlZ29lIFVJIFN5bWJvbFwiLCBcIk5vdG8gQ29sb3IgRW1vamlcIiAhZGVmYXVsdDtcbiRmb250LWZhbWlseS1tb25vc3BhY2U6ICAgICAgIFNGTW9uby1SZWd1bGFyLCBNZW5sbywgTW9uYWNvLCBDb25zb2xhcywgXCJMaWJlcmF0aW9uIE1vbm9cIiwgXCJDb3VyaWVyIE5ld1wiLCBtb25vc3BhY2UgIWRlZmF1bHQ7XG4vLyBzdHlsZWxpbnQtZW5hYmxlIHZhbHVlLWtleXdvcmQtY2FzZVxuJGZvbnQtZmFtaWx5LWJhc2U6ICAgICAgICAgICAgdmFyKC0tI3skdmFyaWFibGUtcHJlZml4fWZvbnQtc2Fucy1zZXJpZikgIWRlZmF1bHQ7XG4kZm9udC1mYW1pbHktY29kZTogICAgICAgICAgICB2YXIoLS0jeyR2YXJpYWJsZS1wcmVmaXh9Zm9udC1tb25vc3BhY2UpICFkZWZhdWx0O1xuXG4vLyAkZm9udC1zaXplLXJvb3QgYWZmZWN0cyB0aGUgdmFsdWUgb2YgYHJlbWAsIHdoaWNoIGlzIHVzZWQgZm9yIGFzIHdlbGwgZm9udCBzaXplcywgcGFkZGluZ3MsIGFuZCBtYXJnaW5zXG4vLyAkZm9udC1zaXplLWJhc2UgYWZmZWN0cyB0aGUgZm9udCBzaXplIG9mIHRoZSBib2R5IHRleHRcbiRmb250LXNpemUtcm9vdDogICAgICAgICAgICAgIG51bGwgIWRlZmF1bHQ7XG4kZm9udC1zaXplLWJhc2U6ICAgICAgICAgICAgICAxcmVtICFkZWZhdWx0OyAvLyBBc3N1bWVzIHRoZSBicm93c2VyIGRlZmF1bHQsIHR5cGljYWxseSBgMTZweGBcbiRmb250LXNpemUtc206ICAgICAgICAgICAgICAgICRmb250LXNpemUtYmFzZSAqIC44NzUgIWRlZmF1bHQ7XG4kZm9udC1zaXplLWxnOiAgICAgICAgICAgICAgICAkZm9udC1zaXplLWJhc2UgKiAxLjI1ICFkZWZhdWx0O1xuXG4kZm9udC13ZWlnaHQtbGlnaHRlcjogICAgICAgICBsaWdodGVyICFkZWZhdWx0O1xuJGZvbnQtd2VpZ2h0LWxpZ2h0OiAgICAgICAgICAgMzAwICFkZWZhdWx0O1xuJGZvbnQtd2VpZ2h0LW5vcm1hbDogICAgICAgICAgNDAwICFkZWZhdWx0O1xuJGZvbnQtd2VpZ2h0LWJvbGQ6ICAgICAgICAgICAgNzAwICFkZWZhdWx0O1xuJGZvbnQtd2VpZ2h0LWJvbGRlcjogICAgICAgICAgYm9sZGVyICFkZWZhdWx0O1xuXG4kZm9udC13ZWlnaHQtYmFzZTogICAgICAgICAgICAkZm9udC13ZWlnaHQtbm9ybWFsICFkZWZhdWx0O1xuXG4kbGluZS1oZWlnaHQtYmFzZTogICAgICAgICAgICAxLjUgIWRlZmF1bHQ7XG4kbGluZS1oZWlnaHQtc206ICAgICAgICAgICAgICAxLjI1ICFkZWZhdWx0O1xuJGxpbmUtaGVpZ2h0LWxnOiAgICAgICAgICAgICAgMiAhZGVmYXVsdDtcblxuJGgxLWZvbnQtc2l6ZTogICAgICAgICAgICAgICAgJGZvbnQtc2l6ZS1iYXNlICogMi41ICFkZWZhdWx0O1xuJGgyLWZvbnQtc2l6ZTogICAgICAgICAgICAgICAgJGZvbnQtc2l6ZS1iYXNlICogMiAhZGVmYXVsdDtcbiRoMy1mb250LXNpemU6ICAgICAgICAgICAgICAgICRmb250LXNpemUtYmFzZSAqIDEuNzUgIWRlZmF1bHQ7XG4kaDQtZm9udC1zaXplOiAgICAgICAgICAgICAgICAkZm9udC1zaXplLWJhc2UgKiAxLjUgIWRlZmF1bHQ7XG4kaDUtZm9udC1zaXplOiAgICAgICAgICAgICAgICAkZm9udC1zaXplLWJhc2UgKiAxLjI1ICFkZWZhdWx0O1xuJGg2LWZvbnQtc2l6ZTogICAgICAgICAgICAgICAgJGZvbnQtc2l6ZS1iYXNlICFkZWZhdWx0O1xuLy8gc2Nzcy1kb2NzLWVuZCBmb250LXZhcmlhYmxlc1xuXG4vLyBzY3NzLWRvY3Mtc3RhcnQgZm9udC1zaXplc1xuJGZvbnQtc2l6ZXM6IChcbiAgMTogJGgxLWZvbnQtc2l6ZSxcbiAgMjogJGgyLWZvbnQtc2l6ZSxcbiAgMzogJGgzLWZvbnQtc2l6ZSxcbiAgNDogJGg0LWZvbnQtc2l6ZSxcbiAgNTogJGg1LWZvbnQtc2l6ZSxcbiAgNjogJGg2LWZvbnQtc2l6ZVxuKSAhZGVmYXVsdDtcbi8vIHNjc3MtZG9jcy1lbmQgZm9udC1zaXplc1xuXG4vLyBzY3NzLWRvY3Mtc3RhcnQgaGVhZGluZ3MtdmFyaWFibGVzXG4kaGVhZGluZ3MtbWFyZ2luLWJvdHRvbTogICAgICAkc3BhY2VyICogLjUgIWRlZmF1bHQ7XG4kaGVhZGluZ3MtZm9udC1mYW1pbHk6ICAgICAgICBudWxsICFkZWZhdWx0O1xuJGhlYWRpbmdzLWZvbnQtc3R5bGU6ICAgICAgICAgbnVsbCAhZGVmYXVsdDtcbiRoZWFkaW5ncy1mb250LXdlaWdodDogICAgICAgIDUwMCAhZGVmYXVsdDtcbiRoZWFkaW5ncy1saW5lLWhlaWdodDogICAgICAgIDEuMiAhZGVmYXVsdDtcbiRoZWFkaW5ncy1jb2xvcjogICAgICAgICAgICAgIG51bGwgIWRlZmF1bHQ7XG4vLyBzY3NzLWRvY3MtZW5kIGhlYWRpbmdzLXZhcmlhYmxlc1xuXG4vLyBzY3NzLWRvY3Mtc3RhcnQgZGlzcGxheS1oZWFkaW5nc1xuJGRpc3BsYXktZm9udC1zaXplczogKFxuICAxOiA1cmVtLFxuICAyOiA0LjVyZW0sXG4gIDM6IDRyZW0sXG4gIDQ6IDMuNXJlbSxcbiAgNTogM3JlbSxcbiAgNjogMi41cmVtXG4pICFkZWZhdWx0O1xuXG4kZGlzcGxheS1mb250LXdlaWdodDogMzAwICFkZWZhdWx0O1xuJGRpc3BsYXktbGluZS1oZWlnaHQ6ICRoZWFkaW5ncy1saW5lLWhlaWdodCAhZGVmYXVsdDtcbi8vIHNjc3MtZG9jcy1lbmQgZGlzcGxheS1oZWFkaW5nc1xuXG4vLyBzY3NzLWRvY3Mtc3RhcnQgdHlwZS12YXJpYWJsZXNcbiRsZWFkLWZvbnQtc2l6ZTogICAgICAgICAgICAgICRmb250LXNpemUtYmFzZSAqIDEuMjUgIWRlZmF1bHQ7XG4kbGVhZC1mb250LXdlaWdodDogICAgICAgICAgICAzMDAgIWRlZmF1bHQ7XG5cbiRzbWFsbC1mb250LXNpemU6ICAgICAgICAgICAgIC44NzVlbSAhZGVmYXVsdDtcblxuJHN1Yi1zdXAtZm9udC1zaXplOiAgICAgICAgICAgLjc1ZW0gIWRlZmF1bHQ7XG5cbiR0ZXh0LW11dGVkOiAgICAgICAgICAgICAgICAgICRncmF5LTYwMCAhZGVmYXVsdDtcblxuJGluaXRpYWxpc20tZm9udC1zaXplOiAgICAgICAgJHNtYWxsLWZvbnQtc2l6ZSAhZGVmYXVsdDtcblxuJGJsb2NrcXVvdGUtbWFyZ2luLXk6ICAgICAgICAgJHNwYWNlciAhZGVmYXVsdDtcbiRibG9ja3F1b3RlLWZvbnQtc2l6ZTogICAgICAgICRmb250LXNpemUtYmFzZSAqIDEuMjUgIWRlZmF1bHQ7XG4kYmxvY2txdW90ZS1mb290ZXItY29sb3I6ICAgICAkZ3JheS02MDAgIWRlZmF1bHQ7XG4kYmxvY2txdW90ZS1mb290ZXItZm9udC1zaXplOiAkc21hbGwtZm9udC1zaXplICFkZWZhdWx0O1xuXG4kaHItbWFyZ2luLXk6ICAgICAgICAgICAgICAgICAkc3BhY2VyICFkZWZhdWx0O1xuJGhyLWNvbG9yOiAgICAgICAgICAgICAgICAgICAgaW5oZXJpdCAhZGVmYXVsdDtcbiRoci1oZWlnaHQ6ICAgICAgICAgICAgICAgICAgICRib3JkZXItd2lkdGggIWRlZmF1bHQ7XG4kaHItb3BhY2l0eTogICAgICAgICAgICAgICAgICAuMjUgIWRlZmF1bHQ7XG5cbiRsZWdlbmQtbWFyZ2luLWJvdHRvbTogICAgICAgIC41cmVtICFkZWZhdWx0O1xuJGxlZ2VuZC1mb250LXNpemU6ICAgICAgICAgICAgMS41cmVtICFkZWZhdWx0O1xuJGxlZ2VuZC1mb250LXdlaWdodDogICAgICAgICAgbnVsbCAhZGVmYXVsdDtcblxuJG1hcmstcGFkZGluZzogICAgICAgICAgICAgICAgLjJlbSAhZGVmYXVsdDtcblxuJGR0LWZvbnQtd2VpZ2h0OiAgICAgICAgICAgICAgJGZvbnQtd2VpZ2h0LWJvbGQgIWRlZmF1bHQ7XG5cbiRuZXN0ZWQta2JkLWZvbnQtd2VpZ2h0OiAgICAgICRmb250LXdlaWdodC1ib2xkICFkZWZhdWx0O1xuXG4kbGlzdC1pbmxpbmUtcGFkZGluZzogICAgICAgICAuNXJlbSAhZGVmYXVsdDtcblxuJG1hcmstYmc6ICAgICAgICAgICAgICAgICAgICAgI2ZjZjhlMyAhZGVmYXVsdDtcbi8vIHNjc3MtZG9jcy1lbmQgdHlwZS12YXJpYWJsZXNcblxuXG4vLyBUYWJsZXNcbi8vXG4vLyBDdXN0b21pemVzIHRoZSBgLnRhYmxlYCBjb21wb25lbnQgd2l0aCBiYXNpYyB2YWx1ZXMsIGVhY2ggdXNlZCBhY3Jvc3MgYWxsIHRhYmxlIHZhcmlhdGlvbnMuXG5cbi8vIHNjc3MtZG9jcy1zdGFydCB0YWJsZS12YXJpYWJsZXNcbiR0YWJsZS1jZWxsLXBhZGRpbmcteTogICAgICAgIC41cmVtICFkZWZhdWx0O1xuJHRhYmxlLWNlbGwtcGFkZGluZy14OiAgICAgICAgLjVyZW0gIWRlZmF1bHQ7XG4kdGFibGUtY2VsbC1wYWRkaW5nLXktc206ICAgICAuMjVyZW0gIWRlZmF1bHQ7XG4kdGFibGUtY2VsbC1wYWRkaW5nLXgtc206ICAgICAuMjVyZW0gIWRlZmF1bHQ7XG5cbiR0YWJsZS1jZWxsLXZlcnRpY2FsLWFsaWduOiAgIHRvcCAhZGVmYXVsdDtcblxuJHRhYmxlLWNvbG9yOiAgICAgICAgICAgICAgICAgJGJvZHktY29sb3IgIWRlZmF1bHQ7XG4kdGFibGUtYmc6ICAgICAgICAgICAgICAgICAgICB0cmFuc3BhcmVudCAhZGVmYXVsdDtcbiR0YWJsZS1hY2NlbnQtYmc6ICAgICAgICAgICAgIHRyYW5zcGFyZW50ICFkZWZhdWx0O1xuXG4kdGFibGUtdGgtZm9udC13ZWlnaHQ6ICAgICAgICBudWxsICFkZWZhdWx0O1xuXG4kdGFibGUtc3RyaXBlZC1jb2xvcjogICAgICAgICAkdGFibGUtY29sb3IgIWRlZmF1bHQ7XG4kdGFibGUtc3RyaXBlZC1iZy1mYWN0b3I6ICAgICAuMDUgIWRlZmF1bHQ7XG4kdGFibGUtc3RyaXBlZC1iZzogICAgICAgICAgICByZ2JhKCRibGFjaywgJHRhYmxlLXN0cmlwZWQtYmctZmFjdG9yKSAhZGVmYXVsdDtcblxuJHRhYmxlLWFjdGl2ZS1jb2xvcjogICAgICAgICAgJHRhYmxlLWNvbG9yICFkZWZhdWx0O1xuJHRhYmxlLWFjdGl2ZS1iZy1mYWN0b3I6ICAgICAgLjEgIWRlZmF1bHQ7XG4kdGFibGUtYWN0aXZlLWJnOiAgICAgICAgICAgICByZ2JhKCRibGFjaywgJHRhYmxlLWFjdGl2ZS1iZy1mYWN0b3IpICFkZWZhdWx0O1xuXG4kdGFibGUtaG92ZXItY29sb3I6ICAgICAgICAgICAkdGFibGUtY29sb3IgIWRlZmF1bHQ7XG4kdGFibGUtaG92ZXItYmctZmFjdG9yOiAgICAgICAuMDc1ICFkZWZhdWx0O1xuJHRhYmxlLWhvdmVyLWJnOiAgICAgICAgICAgICAgcmdiYSgkYmxhY2ssICR0YWJsZS1ob3Zlci1iZy1mYWN0b3IpICFkZWZhdWx0O1xuXG4kdGFibGUtYm9yZGVyLWZhY3RvcjogICAgICAgICAuMSAhZGVmYXVsdDtcbiR0YWJsZS1ib3JkZXItd2lkdGg6ICAgICAgICAgICRib3JkZXItd2lkdGggIWRlZmF1bHQ7XG4kdGFibGUtYm9yZGVyLWNvbG9yOiAgICAgICAgICAkYm9yZGVyLWNvbG9yICFkZWZhdWx0O1xuXG4kdGFibGUtc3RyaXBlZC1vcmRlcjogICAgICAgICBvZGQgIWRlZmF1bHQ7XG5cbiR0YWJsZS1ncm91cC1zZXBhcmF0b3ItY29sb3I6IGN1cnJlbnRDb2xvciAhZGVmYXVsdDtcblxuJHRhYmxlLWNhcHRpb24tY29sb3I6ICAgICAgICAgJHRleHQtbXV0ZWQgIWRlZmF1bHQ7XG5cbiR0YWJsZS1iZy1zY2FsZTogICAgICAgICAgICAgIC04MCUgIWRlZmF1bHQ7XG4vLyBzY3NzLWRvY3MtZW5kIHRhYmxlLXZhcmlhYmxlc1xuXG4vLyBzY3NzLWRvY3Mtc3RhcnQgdGFibGUtbG9vcFxuJHRhYmxlLXZhcmlhbnRzOiAoXG4gIFwicHJpbWFyeVwiOiAgICBzaGlmdC1jb2xvcigkcHJpbWFyeSwgJHRhYmxlLWJnLXNjYWxlKSxcbiAgXCJzZWNvbmRhcnlcIjogIHNoaWZ0LWNvbG9yKCRzZWNvbmRhcnksICR0YWJsZS1iZy1zY2FsZSksXG4gIFwic3VjY2Vzc1wiOiAgICBzaGlmdC1jb2xvcigkc3VjY2VzcywgJHRhYmxlLWJnLXNjYWxlKSxcbiAgXCJpbmZvXCI6ICAgICAgIHNoaWZ0LWNvbG9yKCRpbmZvLCAkdGFibGUtYmctc2NhbGUpLFxuICBcIndhcm5pbmdcIjogICAgc2hpZnQtY29sb3IoJHdhcm5pbmcsICR0YWJsZS1iZy1zY2FsZSksXG4gIFwiZGFuZ2VyXCI6ICAgICBzaGlmdC1jb2xvcigkZGFuZ2VyLCAkdGFibGUtYmctc2NhbGUpLFxuICBcImxpZ2h0XCI6ICAgICAgJGxpZ2h0LFxuICBcImRhcmtcIjogICAgICAgJGRhcmssXG4pICFkZWZhdWx0O1xuLy8gc2Nzcy1kb2NzLWVuZCB0YWJsZS1sb29wXG5cblxuLy8gQnV0dG9ucyArIEZvcm1zXG4vL1xuLy8gU2hhcmVkIHZhcmlhYmxlcyB0aGF0IGFyZSByZWFzc2lnbmVkIHRvIGAkaW5wdXQtYCBhbmQgYCRidG4tYCBzcGVjaWZpYyB2YXJpYWJsZXMuXG5cbi8vIHNjc3MtZG9jcy1zdGFydCBpbnB1dC1idG4tdmFyaWFibGVzXG4kaW5wdXQtYnRuLXBhZGRpbmcteTogICAgICAgICAuMzc1cmVtICFkZWZhdWx0O1xuJGlucHV0LWJ0bi1wYWRkaW5nLXg6ICAgICAgICAgLjc1cmVtICFkZWZhdWx0O1xuJGlucHV0LWJ0bi1mb250LWZhbWlseTogICAgICAgbnVsbCAhZGVmYXVsdDtcbiRpbnB1dC1idG4tZm9udC1zaXplOiAgICAgICAgICRmb250LXNpemUtYmFzZSAhZGVmYXVsdDtcbiRpbnB1dC1idG4tbGluZS1oZWlnaHQ6ICAgICAgICRsaW5lLWhlaWdodC1iYXNlICFkZWZhdWx0O1xuXG4kaW5wdXQtYnRuLWZvY3VzLXdpZHRoOiAgICAgICAgIC4yNXJlbSAhZGVmYXVsdDtcbiRpbnB1dC1idG4tZm9jdXMtY29sb3Itb3BhY2l0eTogLjI1ICFkZWZhdWx0O1xuJGlucHV0LWJ0bi1mb2N1cy1jb2xvcjogICAgICAgICByZ2JhKCRjb21wb25lbnQtYWN0aXZlLWJnLCAkaW5wdXQtYnRuLWZvY3VzLWNvbG9yLW9wYWNpdHkpICFkZWZhdWx0O1xuJGlucHV0LWJ0bi1mb2N1cy1ibHVyOiAgICAgICAgICAwICFkZWZhdWx0O1xuJGlucHV0LWJ0bi1mb2N1cy1ib3gtc2hhZG93OiAgICAwIDAgJGlucHV0LWJ0bi1mb2N1cy1ibHVyICRpbnB1dC1idG4tZm9jdXMtd2lkdGggJGlucHV0LWJ0bi1mb2N1cy1jb2xvciAhZGVmYXVsdDtcblxuJGlucHV0LWJ0bi1wYWRkaW5nLXktc206ICAgICAgLjI1cmVtICFkZWZhdWx0O1xuJGlucHV0LWJ0bi1wYWRkaW5nLXgtc206ICAgICAgLjVyZW0gIWRlZmF1bHQ7XG4kaW5wdXQtYnRuLWZvbnQtc2l6ZS1zbTogICAgICAkZm9udC1zaXplLXNtICFkZWZhdWx0O1xuXG4kaW5wdXQtYnRuLXBhZGRpbmcteS1sZzogICAgICAuNXJlbSAhZGVmYXVsdDtcbiRpbnB1dC1idG4tcGFkZGluZy14LWxnOiAgICAgIDFyZW0gIWRlZmF1bHQ7XG4kaW5wdXQtYnRuLWZvbnQtc2l6ZS1sZzogICAgICAkZm9udC1zaXplLWxnICFkZWZhdWx0O1xuXG4kaW5wdXQtYnRuLWJvcmRlci13aWR0aDogICAgICAkYm9yZGVyLXdpZHRoICFkZWZhdWx0O1xuLy8gc2Nzcy1kb2NzLWVuZCBpbnB1dC1idG4tdmFyaWFibGVzXG5cblxuLy8gQnV0dG9uc1xuLy9cbi8vIEZvciBlYWNoIG9mIEJvb3RzdHJhcCdzIGJ1dHRvbnMsIGRlZmluZSB0ZXh0LCBiYWNrZ3JvdW5kLCBhbmQgYm9yZGVyIGNvbG9yLlxuXG4vLyBzY3NzLWRvY3Mtc3RhcnQgYnRuLXZhcmlhYmxlc1xuJGJ0bi1wYWRkaW5nLXk6ICAgICAgICAgICAgICAgJGlucHV0LWJ0bi1wYWRkaW5nLXkgIWRlZmF1bHQ7XG4kYnRuLXBhZGRpbmcteDogICAgICAgICAgICAgICAkaW5wdXQtYnRuLXBhZGRpbmcteCAhZGVmYXVsdDtcbiRidG4tZm9udC1mYW1pbHk6ICAgICAgICAgICAgICRpbnB1dC1idG4tZm9udC1mYW1pbHkgIWRlZmF1bHQ7XG4kYnRuLWZvbnQtc2l6ZTogICAgICAgICAgICAgICAkaW5wdXQtYnRuLWZvbnQtc2l6ZSAhZGVmYXVsdDtcbiRidG4tbGluZS1oZWlnaHQ6ICAgICAgICAgICAgICRpbnB1dC1idG4tbGluZS1oZWlnaHQgIWRlZmF1bHQ7XG4kYnRuLXdoaXRlLXNwYWNlOiAgICAgICAgICAgICBudWxsICFkZWZhdWx0OyAvLyBTZXQgdG8gYG5vd3JhcGAgdG8gcHJldmVudCB0ZXh0IHdyYXBwaW5nXG5cbiRidG4tcGFkZGluZy15LXNtOiAgICAgICAgICAgICRpbnB1dC1idG4tcGFkZGluZy15LXNtICFkZWZhdWx0O1xuJGJ0bi1wYWRkaW5nLXgtc206ICAgICAgICAgICAgJGlucHV0LWJ0bi1wYWRkaW5nLXgtc20gIWRlZmF1bHQ7XG4kYnRuLWZvbnQtc2l6ZS1zbTogICAgICAgICAgICAkaW5wdXQtYnRuLWZvbnQtc2l6ZS1zbSAhZGVmYXVsdDtcblxuJGJ0bi1wYWRkaW5nLXktbGc6ICAgICAgICAgICAgJGlucHV0LWJ0bi1wYWRkaW5nLXktbGcgIWRlZmF1bHQ7XG4kYnRuLXBhZGRpbmcteC1sZzogICAgICAgICAgICAkaW5wdXQtYnRuLXBhZGRpbmcteC1sZyAhZGVmYXVsdDtcbiRidG4tZm9udC1zaXplLWxnOiAgICAgICAgICAgICRpbnB1dC1idG4tZm9udC1zaXplLWxnICFkZWZhdWx0O1xuXG4kYnRuLWJvcmRlci13aWR0aDogICAgICAgICAgICAkaW5wdXQtYnRuLWJvcmRlci13aWR0aCAhZGVmYXVsdDtcblxuJGJ0bi1mb250LXdlaWdodDogICAgICAgICAgICAgJGZvbnQtd2VpZ2h0LW5vcm1hbCAhZGVmYXVsdDtcbiRidG4tYm94LXNoYWRvdzogICAgICAgICAgICAgIGluc2V0IDAgMXB4IDAgcmdiYSgkd2hpdGUsIC4xNSksIDAgMXB4IDFweCByZ2JhKCRibGFjaywgLjA3NSkgIWRlZmF1bHQ7XG4kYnRuLWZvY3VzLXdpZHRoOiAgICAgICAgICAgICAkaW5wdXQtYnRuLWZvY3VzLXdpZHRoICFkZWZhdWx0O1xuJGJ0bi1mb2N1cy1ib3gtc2hhZG93OiAgICAgICAgJGlucHV0LWJ0bi1mb2N1cy1ib3gtc2hhZG93ICFkZWZhdWx0O1xuJGJ0bi1kaXNhYmxlZC1vcGFjaXR5OiAgICAgICAgLjY1ICFkZWZhdWx0O1xuJGJ0bi1hY3RpdmUtYm94LXNoYWRvdzogICAgICAgaW5zZXQgMCAzcHggNXB4IHJnYmEoJGJsYWNrLCAuMTI1KSAhZGVmYXVsdDtcblxuJGJ0bi1saW5rLWNvbG9yOiAgICAgICAgICAgICAgJGxpbmstY29sb3IgIWRlZmF1bHQ7XG4kYnRuLWxpbmstaG92ZXItY29sb3I6ICAgICAgICAkbGluay1ob3Zlci1jb2xvciAhZGVmYXVsdDtcbiRidG4tbGluay1kaXNhYmxlZC1jb2xvcjogICAgICRncmF5LTYwMCAhZGVmYXVsdDtcblxuLy8gQWxsb3dzIGZvciBjdXN0b21pemluZyBidXR0b24gcmFkaXVzIGluZGVwZW5kZW50bHkgZnJvbSBnbG9iYWwgYm9yZGVyIHJhZGl1c1xuJGJ0bi1ib3JkZXItcmFkaXVzOiAgICAgICAgICAgJGJvcmRlci1yYWRpdXMgIWRlZmF1bHQ7XG4kYnRuLWJvcmRlci1yYWRpdXMtc206ICAgICAgICAkYm9yZGVyLXJhZGl1cy1zbSAhZGVmYXVsdDtcbiRidG4tYm9yZGVyLXJhZGl1cy1sZzogICAgICAgICRib3JkZXItcmFkaXVzLWxnICFkZWZhdWx0O1xuXG4kYnRuLXRyYW5zaXRpb246ICAgICAgICAgICAgICBjb2xvciAuMTVzIGVhc2UtaW4tb3V0LCBiYWNrZ3JvdW5kLWNvbG9yIC4xNXMgZWFzZS1pbi1vdXQsIGJvcmRlci1jb2xvciAuMTVzIGVhc2UtaW4tb3V0LCBib3gtc2hhZG93IC4xNXMgZWFzZS1pbi1vdXQgIWRlZmF1bHQ7XG5cbiRidG4taG92ZXItYmctc2hhZGUtYW1vdW50OiAgICAgICAxNSUgIWRlZmF1bHQ7XG4kYnRuLWhvdmVyLWJnLXRpbnQtYW1vdW50OiAgICAgICAgMTUlICFkZWZhdWx0O1xuJGJ0bi1ob3Zlci1ib3JkZXItc2hhZGUtYW1vdW50OiAgIDIwJSAhZGVmYXVsdDtcbiRidG4taG92ZXItYm9yZGVyLXRpbnQtYW1vdW50OiAgICAxMCUgIWRlZmF1bHQ7XG4kYnRuLWFjdGl2ZS1iZy1zaGFkZS1hbW91bnQ6ICAgICAgMjAlICFkZWZhdWx0O1xuJGJ0bi1hY3RpdmUtYmctdGludC1hbW91bnQ6ICAgICAgIDIwJSAhZGVmYXVsdDtcbiRidG4tYWN0aXZlLWJvcmRlci1zaGFkZS1hbW91bnQ6ICAyNSUgIWRlZmF1bHQ7XG4kYnRuLWFjdGl2ZS1ib3JkZXItdGludC1hbW91bnQ6ICAgMTAlICFkZWZhdWx0O1xuLy8gc2Nzcy1kb2NzLWVuZCBidG4tdmFyaWFibGVzXG5cblxuLy8gRm9ybXNcblxuLy8gc2Nzcy1kb2NzLXN0YXJ0IGZvcm0tdGV4dC12YXJpYWJsZXNcbiRmb3JtLXRleHQtbWFyZ2luLXRvcDogICAgICAgICAgICAgICAgICAuMjVyZW0gIWRlZmF1bHQ7XG4kZm9ybS10ZXh0LWZvbnQtc2l6ZTogICAgICAgICAgICAgICAgICAgJHNtYWxsLWZvbnQtc2l6ZSAhZGVmYXVsdDtcbiRmb3JtLXRleHQtZm9udC1zdHlsZTogICAgICAgICAgICAgICAgICBudWxsICFkZWZhdWx0O1xuJGZvcm0tdGV4dC1mb250LXdlaWdodDogICAgICAgICAgICAgICAgIG51bGwgIWRlZmF1bHQ7XG4kZm9ybS10ZXh0LWNvbG9yOiAgICAgICAgICAgICAgICAgICAgICAgJHRleHQtbXV0ZWQgIWRlZmF1bHQ7XG4vLyBzY3NzLWRvY3MtZW5kIGZvcm0tdGV4dC12YXJpYWJsZXNcblxuLy8gc2Nzcy1kb2NzLXN0YXJ0IGZvcm0tbGFiZWwtdmFyaWFibGVzXG4kZm9ybS1sYWJlbC1tYXJnaW4tYm90dG9tOiAgICAgICAgICAgICAgLjVyZW0gIWRlZmF1bHQ7XG4kZm9ybS1sYWJlbC1mb250LXNpemU6ICAgICAgICAgICAgICAgICAgbnVsbCAhZGVmYXVsdDtcbiRmb3JtLWxhYmVsLWZvbnQtc3R5bGU6ICAgICAgICAgICAgICAgICBudWxsICFkZWZhdWx0O1xuJGZvcm0tbGFiZWwtZm9udC13ZWlnaHQ6ICAgICAgICAgICAgICAgIG51bGwgIWRlZmF1bHQ7XG4kZm9ybS1sYWJlbC1jb2xvcjogICAgICAgICAgICAgICAgICAgICAgbnVsbCAhZGVmYXVsdDtcbi8vIHNjc3MtZG9jcy1lbmQgZm9ybS1sYWJlbC12YXJpYWJsZXNcblxuLy8gc2Nzcy1kb2NzLXN0YXJ0IGZvcm0taW5wdXQtdmFyaWFibGVzXG4kaW5wdXQtcGFkZGluZy15OiAgICAgICAgICAgICAgICAgICAgICAgJGlucHV0LWJ0bi1wYWRkaW5nLXkgIWRlZmF1bHQ7XG4kaW5wdXQtcGFkZGluZy14OiAgICAgICAgICAgICAgICAgICAgICAgJGlucHV0LWJ0bi1wYWRkaW5nLXggIWRlZmF1bHQ7XG4kaW5wdXQtZm9udC1mYW1pbHk6ICAgICAgICAgICAgICAgICAgICAgJGlucHV0LWJ0bi1mb250LWZhbWlseSAhZGVmYXVsdDtcbiRpbnB1dC1mb250LXNpemU6ICAgICAgICAgICAgICAgICAgICAgICAkaW5wdXQtYnRuLWZvbnQtc2l6ZSAhZGVmYXVsdDtcbiRpbnB1dC1mb250LXdlaWdodDogICAgICAgICAgICAgICAgICAgICAkZm9udC13ZWlnaHQtYmFzZSAhZGVmYXVsdDtcbiRpbnB1dC1saW5lLWhlaWdodDogICAgICAgICAgICAgICAgICAgICAkaW5wdXQtYnRuLWxpbmUtaGVpZ2h0ICFkZWZhdWx0O1xuXG4kaW5wdXQtcGFkZGluZy15LXNtOiAgICAgICAgICAgICAgICAgICAgJGlucHV0LWJ0bi1wYWRkaW5nLXktc20gIWRlZmF1bHQ7XG4kaW5wdXQtcGFkZGluZy14LXNtOiAgICAgICAgICAgICAgICAgICAgJGlucHV0LWJ0bi1wYWRkaW5nLXgtc20gIWRlZmF1bHQ7XG4kaW5wdXQtZm9udC1zaXplLXNtOiAgICAgICAgICAgICAgICAgICAgJGlucHV0LWJ0bi1mb250LXNpemUtc20gIWRlZmF1bHQ7XG5cbiRpbnB1dC1wYWRkaW5nLXktbGc6ICAgICAgICAgICAgICAgICAgICAkaW5wdXQtYnRuLXBhZGRpbmcteS1sZyAhZGVmYXVsdDtcbiRpbnB1dC1wYWRkaW5nLXgtbGc6ICAgICAgICAgICAgICAgICAgICAkaW5wdXQtYnRuLXBhZGRpbmcteC1sZyAhZGVmYXVsdDtcbiRpbnB1dC1mb250LXNpemUtbGc6ICAgICAgICAgICAgICAgICAgICAkaW5wdXQtYnRuLWZvbnQtc2l6ZS1sZyAhZGVmYXVsdDtcblxuJGlucHV0LWJnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRib2R5LWJnICFkZWZhdWx0O1xuJGlucHV0LWRpc2FibGVkLWJnOiAgICAgICAgICAgICAgICAgICAgICRncmF5LTIwMCAhZGVmYXVsdDtcbiRpbnB1dC1kaXNhYmxlZC1ib3JkZXItY29sb3I6ICAgICAgICAgICBudWxsICFkZWZhdWx0O1xuXG4kaW5wdXQtY29sb3I6ICAgICAgICAgICAgICAgICAgICAgICAgICAgJGJvZHktY29sb3IgIWRlZmF1bHQ7XG4kaW5wdXQtYm9yZGVyLWNvbG9yOiAgICAgICAgICAgICAgICAgICAgJGdyYXktNDAwICFkZWZhdWx0O1xuJGlucHV0LWJvcmRlci13aWR0aDogICAgICAgICAgICAgICAgICAgICRpbnB1dC1idG4tYm9yZGVyLXdpZHRoICFkZWZhdWx0O1xuJGlucHV0LWJveC1zaGFkb3c6ICAgICAgICAgICAgICAgICAgICAgICRib3gtc2hhZG93LWluc2V0ICFkZWZhdWx0O1xuXG4kaW5wdXQtYm9yZGVyLXJhZGl1czogICAgICAgICAgICAgICAgICAgJGJvcmRlci1yYWRpdXMgIWRlZmF1bHQ7XG4kaW5wdXQtYm9yZGVyLXJhZGl1cy1zbTogICAgICAgICAgICAgICAgJGJvcmRlci1yYWRpdXMtc20gIWRlZmF1bHQ7XG4kaW5wdXQtYm9yZGVyLXJhZGl1cy1sZzogICAgICAgICAgICAgICAgJGJvcmRlci1yYWRpdXMtbGcgIWRlZmF1bHQ7XG5cbiRpbnB1dC1mb2N1cy1iZzogICAgICAgICAgICAgICAgICAgICAgICAkaW5wdXQtYmcgIWRlZmF1bHQ7XG4kaW5wdXQtZm9jdXMtYm9yZGVyLWNvbG9yOiAgICAgICAgICAgICAgdGludC1jb2xvcigkY29tcG9uZW50LWFjdGl2ZS1iZywgNTAlKSAhZGVmYXVsdDtcbiRpbnB1dC1mb2N1cy1jb2xvcjogICAgICAgICAgICAgICAgICAgICAkaW5wdXQtY29sb3IgIWRlZmF1bHQ7XG4kaW5wdXQtZm9jdXMtd2lkdGg6ICAgICAgICAgICAgICAgICAgICAgJGlucHV0LWJ0bi1mb2N1cy13aWR0aCAhZGVmYXVsdDtcbiRpbnB1dC1mb2N1cy1ib3gtc2hhZG93OiAgICAgICAgICAgICAgICAkaW5wdXQtYnRuLWZvY3VzLWJveC1zaGFkb3cgIWRlZmF1bHQ7XG5cbiRpbnB1dC1wbGFjZWhvbGRlci1jb2xvcjogICAgICAgICAgICAgICAkZ3JheS02MDAgIWRlZmF1bHQ7XG4kaW5wdXQtcGxhaW50ZXh0LWNvbG9yOiAgICAgICAgICAgICAgICAgJGJvZHktY29sb3IgIWRlZmF1bHQ7XG5cbiRpbnB1dC1oZWlnaHQtYm9yZGVyOiAgICAgICAgICAgICAgICAgICAkaW5wdXQtYm9yZGVyLXdpZHRoICogMiAhZGVmYXVsdDtcblxuJGlucHV0LWhlaWdodC1pbm5lcjogICAgICAgICAgICAgICAgICAgIGFkZCgkaW5wdXQtbGluZS1oZWlnaHQgKiAxZW0sICRpbnB1dC1wYWRkaW5nLXkgKiAyKSAhZGVmYXVsdDtcbiRpbnB1dC1oZWlnaHQtaW5uZXItaGFsZjogICAgICAgICAgICAgICBhZGQoJGlucHV0LWxpbmUtaGVpZ2h0ICogLjVlbSwgJGlucHV0LXBhZGRpbmcteSkgIWRlZmF1bHQ7XG4kaW5wdXQtaGVpZ2h0LWlubmVyLXF1YXJ0ZXI6ICAgICAgICAgICAgYWRkKCRpbnB1dC1saW5lLWhlaWdodCAqIC4yNWVtLCAkaW5wdXQtcGFkZGluZy15ICogLjUpICFkZWZhdWx0O1xuXG4kaW5wdXQtaGVpZ2h0OiAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkKCRpbnB1dC1saW5lLWhlaWdodCAqIDFlbSwgYWRkKCRpbnB1dC1wYWRkaW5nLXkgKiAyLCAkaW5wdXQtaGVpZ2h0LWJvcmRlciwgZmFsc2UpKSAhZGVmYXVsdDtcbiRpbnB1dC1oZWlnaHQtc206ICAgICAgICAgICAgICAgICAgICAgICBhZGQoJGlucHV0LWxpbmUtaGVpZ2h0ICogMWVtLCBhZGQoJGlucHV0LXBhZGRpbmcteS1zbSAqIDIsICRpbnB1dC1oZWlnaHQtYm9yZGVyLCBmYWxzZSkpICFkZWZhdWx0O1xuJGlucHV0LWhlaWdodC1sZzogICAgICAgICAgICAgICAgICAgICAgIGFkZCgkaW5wdXQtbGluZS1oZWlnaHQgKiAxZW0sIGFkZCgkaW5wdXQtcGFkZGluZy15LWxnICogMiwgJGlucHV0LWhlaWdodC1ib3JkZXIsIGZhbHNlKSkgIWRlZmF1bHQ7XG5cbiRpbnB1dC10cmFuc2l0aW9uOiAgICAgICAgICAgICAgICAgICAgICBib3JkZXItY29sb3IgLjE1cyBlYXNlLWluLW91dCwgYm94LXNoYWRvdyAuMTVzIGVhc2UtaW4tb3V0ICFkZWZhdWx0O1xuXG4kZm9ybS1jb2xvci13aWR0aDogICAgICAgICAgICAgICAgICAgICAgM3JlbSAhZGVmYXVsdDtcbi8vIHNjc3MtZG9jcy1lbmQgZm9ybS1pbnB1dC12YXJpYWJsZXNcblxuLy8gc2Nzcy1kb2NzLXN0YXJ0IGZvcm0tY2hlY2stdmFyaWFibGVzXG4kZm9ybS1jaGVjay1pbnB1dC13aWR0aDogICAgICAgICAgICAgICAgICAxZW0gIWRlZmF1bHQ7XG4kZm9ybS1jaGVjay1taW4taGVpZ2h0OiAgICAgICAgICAgICAgICAgICAkZm9udC1zaXplLWJhc2UgKiAkbGluZS1oZWlnaHQtYmFzZSAhZGVmYXVsdDtcbiRmb3JtLWNoZWNrLXBhZGRpbmctc3RhcnQ6ICAgICAgICAgICAgICAgICRmb3JtLWNoZWNrLWlucHV0LXdpZHRoICsgLjVlbSAhZGVmYXVsdDtcbiRmb3JtLWNoZWNrLW1hcmdpbi1ib3R0b206ICAgICAgICAgICAgICAgIC4xMjVyZW0gIWRlZmF1bHQ7XG4kZm9ybS1jaGVjay1sYWJlbC1jb2xvcjogICAgICAgICAgICAgICAgICBudWxsICFkZWZhdWx0O1xuJGZvcm0tY2hlY2stbGFiZWwtY3Vyc29yOiAgICAgICAgICAgICAgICAgbnVsbCAhZGVmYXVsdDtcbiRmb3JtLWNoZWNrLXRyYW5zaXRpb246ICAgICAgICAgICAgICAgICAgIG51bGwgIWRlZmF1bHQ7XG5cbiRmb3JtLWNoZWNrLWlucHV0LWFjdGl2ZS1maWx0ZXI6ICAgICAgICAgIGJyaWdodG5lc3MoOTAlKSAhZGVmYXVsdDtcblxuJGZvcm0tY2hlY2staW5wdXQtYmc6ICAgICAgICAgICAgICAgICAgICAgJGlucHV0LWJnICFkZWZhdWx0O1xuJGZvcm0tY2hlY2staW5wdXQtYm9yZGVyOiAgICAgICAgICAgICAgICAgMXB4IHNvbGlkIHJnYmEoJGJsYWNrLCAuMjUpICFkZWZhdWx0O1xuJGZvcm0tY2hlY2staW5wdXQtYm9yZGVyLXJhZGl1czogICAgICAgICAgLjI1ZW0gIWRlZmF1bHQ7XG4kZm9ybS1jaGVjay1yYWRpby1ib3JkZXItcmFkaXVzOiAgICAgICAgICA1MCUgIWRlZmF1bHQ7XG4kZm9ybS1jaGVjay1pbnB1dC1mb2N1cy1ib3JkZXI6ICAgICAgICAgICAkaW5wdXQtZm9jdXMtYm9yZGVyLWNvbG9yICFkZWZhdWx0O1xuJGZvcm0tY2hlY2staW5wdXQtZm9jdXMtYm94LXNoYWRvdzogICAgICAgJGlucHV0LWJ0bi1mb2N1cy1ib3gtc2hhZG93ICFkZWZhdWx0O1xuXG4kZm9ybS1jaGVjay1pbnB1dC1jaGVja2VkLWNvbG9yOiAgICAgICAgICAkY29tcG9uZW50LWFjdGl2ZS1jb2xvciAhZGVmYXVsdDtcbiRmb3JtLWNoZWNrLWlucHV0LWNoZWNrZWQtYmctY29sb3I6ICAgICAgICRjb21wb25lbnQtYWN0aXZlLWJnICFkZWZhdWx0O1xuJGZvcm0tY2hlY2staW5wdXQtY2hlY2tlZC1ib3JkZXItY29sb3I6ICAgJGZvcm0tY2hlY2staW5wdXQtY2hlY2tlZC1iZy1jb2xvciAhZGVmYXVsdDtcbiRmb3JtLWNoZWNrLWlucHV0LWNoZWNrZWQtYmctaW1hZ2U6ICAgICAgIHVybChcImRhdGE6aW1hZ2Uvc3ZnK3htbCw8c3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgdmlld0JveD0nMCAwIDIwIDIwJz48cGF0aCBmaWxsPSdub25lJyBzdHJva2U9JyN7JGZvcm0tY2hlY2staW5wdXQtY2hlY2tlZC1jb2xvcn0nIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcgc3Ryb2tlLWxpbmVqb2luPSdyb3VuZCcgc3Ryb2tlLXdpZHRoPSczJyBkPSdNNiAxMGwzIDNsNi02Jy8+PC9zdmc+XCIpICFkZWZhdWx0O1xuJGZvcm0tY2hlY2stcmFkaW8tY2hlY2tlZC1iZy1pbWFnZTogICAgICAgdXJsKFwiZGF0YTppbWFnZS9zdmcreG1sLDxzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB2aWV3Qm94PSctNCAtNCA4IDgnPjxjaXJjbGUgcj0nMicgZmlsbD0nI3skZm9ybS1jaGVjay1pbnB1dC1jaGVja2VkLWNvbG9yfScvPjwvc3ZnPlwiKSAhZGVmYXVsdDtcblxuJGZvcm0tY2hlY2staW5wdXQtaW5kZXRlcm1pbmF0ZS1jb2xvcjogICAgICAgICAgJGNvbXBvbmVudC1hY3RpdmUtY29sb3IgIWRlZmF1bHQ7XG4kZm9ybS1jaGVjay1pbnB1dC1pbmRldGVybWluYXRlLWJnLWNvbG9yOiAgICAgICAkY29tcG9uZW50LWFjdGl2ZS1iZyAhZGVmYXVsdDtcbiRmb3JtLWNoZWNrLWlucHV0LWluZGV0ZXJtaW5hdGUtYm9yZGVyLWNvbG9yOiAgICRmb3JtLWNoZWNrLWlucHV0LWluZGV0ZXJtaW5hdGUtYmctY29sb3IgIWRlZmF1bHQ7XG4kZm9ybS1jaGVjay1pbnB1dC1pbmRldGVybWluYXRlLWJnLWltYWdlOiAgICAgICB1cmwoXCJkYXRhOmltYWdlL3N2Zyt4bWwsPHN2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHZpZXdCb3g9JzAgMCAyMCAyMCc+PHBhdGggZmlsbD0nbm9uZScgc3Ryb2tlPScjeyRmb3JtLWNoZWNrLWlucHV0LWluZGV0ZXJtaW5hdGUtY29sb3J9JyBzdHJva2UtbGluZWNhcD0ncm91bmQnIHN0cm9rZS1saW5lam9pbj0ncm91bmQnIHN0cm9rZS13aWR0aD0nMycgZD0nTTYgMTBoOCcvPjwvc3ZnPlwiKSAhZGVmYXVsdDtcblxuJGZvcm0tY2hlY2staW5wdXQtZGlzYWJsZWQtb3BhY2l0eTogICAgICAgIC41ICFkZWZhdWx0O1xuJGZvcm0tY2hlY2stbGFiZWwtZGlzYWJsZWQtb3BhY2l0eTogICAgICAgICRmb3JtLWNoZWNrLWlucHV0LWRpc2FibGVkLW9wYWNpdHkgIWRlZmF1bHQ7XG4kZm9ybS1jaGVjay1idG4tY2hlY2stZGlzYWJsZWQtb3BhY2l0eTogICAgJGJ0bi1kaXNhYmxlZC1vcGFjaXR5ICFkZWZhdWx0O1xuXG4kZm9ybS1jaGVjay1pbmxpbmUtbWFyZ2luLWVuZDogICAgMXJlbSAhZGVmYXVsdDtcbi8vIHNjc3MtZG9jcy1lbmQgZm9ybS1jaGVjay12YXJpYWJsZXNcblxuLy8gc2Nzcy1kb2NzLXN0YXJ0IGZvcm0tc3dpdGNoLXZhcmlhYmxlc1xuJGZvcm0tc3dpdGNoLWNvbG9yOiAgICAgICAgICAgICAgIHJnYmEoJGJsYWNrLCAuMjUpICFkZWZhdWx0O1xuJGZvcm0tc3dpdGNoLXdpZHRoOiAgICAgICAgICAgICAgIDJlbSAhZGVmYXVsdDtcbiRmb3JtLXN3aXRjaC1wYWRkaW5nLXN0YXJ0OiAgICAgICAkZm9ybS1zd2l0Y2gtd2lkdGggKyAuNWVtICFkZWZhdWx0O1xuJGZvcm0tc3dpdGNoLWJnLWltYWdlOiAgICAgICAgICAgIHVybChcImRhdGE6aW1hZ2Uvc3ZnK3htbCw8c3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgdmlld0JveD0nLTQgLTQgOCA4Jz48Y2lyY2xlIHI9JzMnIGZpbGw9JyN7JGZvcm0tc3dpdGNoLWNvbG9yfScvPjwvc3ZnPlwiKSAhZGVmYXVsdDtcbiRmb3JtLXN3aXRjaC1ib3JkZXItcmFkaXVzOiAgICAgICAkZm9ybS1zd2l0Y2gtd2lkdGggIWRlZmF1bHQ7XG4kZm9ybS1zd2l0Y2gtdHJhbnNpdGlvbjogICAgICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbiAuMTVzIGVhc2UtaW4tb3V0ICFkZWZhdWx0O1xuXG4kZm9ybS1zd2l0Y2gtZm9jdXMtY29sb3I6ICAgICAgICAgJGlucHV0LWZvY3VzLWJvcmRlci1jb2xvciAhZGVmYXVsdDtcbiRmb3JtLXN3aXRjaC1mb2N1cy1iZy1pbWFnZTogICAgICB1cmwoXCJkYXRhOmltYWdlL3N2Zyt4bWwsPHN2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHZpZXdCb3g9Jy00IC00IDggOCc+PGNpcmNsZSByPSczJyBmaWxsPScjeyRmb3JtLXN3aXRjaC1mb2N1cy1jb2xvcn0nLz48L3N2Zz5cIikgIWRlZmF1bHQ7XG5cbiRmb3JtLXN3aXRjaC1jaGVja2VkLWNvbG9yOiAgICAgICAkY29tcG9uZW50LWFjdGl2ZS1jb2xvciAhZGVmYXVsdDtcbiRmb3JtLXN3aXRjaC1jaGVja2VkLWJnLWltYWdlOiAgICB1cmwoXCJkYXRhOmltYWdlL3N2Zyt4bWwsPHN2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHZpZXdCb3g9Jy00IC00IDggOCc+PGNpcmNsZSByPSczJyBmaWxsPScjeyRmb3JtLXN3aXRjaC1jaGVja2VkLWNvbG9yfScvPjwvc3ZnPlwiKSAhZGVmYXVsdDtcbiRmb3JtLXN3aXRjaC1jaGVja2VkLWJnLXBvc2l0aW9uOiByaWdodCBjZW50ZXIgIWRlZmF1bHQ7XG4vLyBzY3NzLWRvY3MtZW5kIGZvcm0tc3dpdGNoLXZhcmlhYmxlc1xuXG4vLyBzY3NzLWRvY3Mtc3RhcnQgaW5wdXQtZ3JvdXAtdmFyaWFibGVzXG4kaW5wdXQtZ3JvdXAtYWRkb24tcGFkZGluZy15OiAgICAgICAgICAgJGlucHV0LXBhZGRpbmcteSAhZGVmYXVsdDtcbiRpbnB1dC1ncm91cC1hZGRvbi1wYWRkaW5nLXg6ICAgICAgICAgICAkaW5wdXQtcGFkZGluZy14ICFkZWZhdWx0O1xuJGlucHV0LWdyb3VwLWFkZG9uLWZvbnQtd2VpZ2h0OiAgICAgICAgICRpbnB1dC1mb250LXdlaWdodCAhZGVmYXVsdDtcbiRpbnB1dC1ncm91cC1hZGRvbi1jb2xvcjogICAgICAgICAgICAgICAkaW5wdXQtY29sb3IgIWRlZmF1bHQ7XG4kaW5wdXQtZ3JvdXAtYWRkb24tYmc6ICAgICAgICAgICAgICAgICAgJGdyYXktMjAwICFkZWZhdWx0O1xuJGlucHV0LWdyb3VwLWFkZG9uLWJvcmRlci1jb2xvcjogICAgICAgICRpbnB1dC1ib3JkZXItY29sb3IgIWRlZmF1bHQ7XG4vLyBzY3NzLWRvY3MtZW5kIGlucHV0LWdyb3VwLXZhcmlhYmxlc1xuXG4vLyBzY3NzLWRvY3Mtc3RhcnQgZm9ybS1zZWxlY3QtdmFyaWFibGVzXG4kZm9ybS1zZWxlY3QtcGFkZGluZy15OiAgICAgICAgICAgICAkaW5wdXQtcGFkZGluZy15ICFkZWZhdWx0O1xuJGZvcm0tc2VsZWN0LXBhZGRpbmcteDogICAgICAgICAgICAgJGlucHV0LXBhZGRpbmcteCAhZGVmYXVsdDtcbiRmb3JtLXNlbGVjdC1mb250LWZhbWlseTogICAgICAgICAgICRpbnB1dC1mb250LWZhbWlseSAhZGVmYXVsdDtcbiRmb3JtLXNlbGVjdC1mb250LXNpemU6ICAgICAgICAgICAgICRpbnB1dC1mb250LXNpemUgIWRlZmF1bHQ7XG4kZm9ybS1zZWxlY3QtaW5kaWNhdG9yLXBhZGRpbmc6ICAgICAkZm9ybS1zZWxlY3QtcGFkZGluZy14ICogMyAhZGVmYXVsdDsgLy8gRXh0cmEgcGFkZGluZyBmb3IgYmFja2dyb3VuZC1pbWFnZVxuJGZvcm0tc2VsZWN0LWZvbnQtd2VpZ2h0OiAgICAgICAgICAgJGlucHV0LWZvbnQtd2VpZ2h0ICFkZWZhdWx0O1xuJGZvcm0tc2VsZWN0LWxpbmUtaGVpZ2h0OiAgICAgICAgICAgJGlucHV0LWxpbmUtaGVpZ2h0ICFkZWZhdWx0O1xuJGZvcm0tc2VsZWN0LWNvbG9yOiAgICAgICAgICAgICAgICAgJGlucHV0LWNvbG9yICFkZWZhdWx0O1xuJGZvcm0tc2VsZWN0LWJnOiAgICAgICAgICAgICAgICAgICAgJGlucHV0LWJnICFkZWZhdWx0O1xuJGZvcm0tc2VsZWN0LWRpc2FibGVkLWNvbG9yOiAgICAgICAgbnVsbCAhZGVmYXVsdDtcbiRmb3JtLXNlbGVjdC1kaXNhYmxlZC1iZzogICAgICAgICAgICRncmF5LTIwMCAhZGVmYXVsdDtcbiRmb3JtLXNlbGVjdC1kaXNhYmxlZC1ib3JkZXItY29sb3I6ICRpbnB1dC1kaXNhYmxlZC1ib3JkZXItY29sb3IgIWRlZmF1bHQ7XG4kZm9ybS1zZWxlY3QtYmctcG9zaXRpb246ICAgICAgICAgICByaWdodCAkZm9ybS1zZWxlY3QtcGFkZGluZy14IGNlbnRlciAhZGVmYXVsdDtcbiRmb3JtLXNlbGVjdC1iZy1zaXplOiAgICAgICAgICAgICAgIDE2cHggMTJweCAhZGVmYXVsdDsgLy8gSW4gcGl4ZWxzIGJlY2F1c2UgaW1hZ2UgZGltZW5zaW9uc1xuJGZvcm0tc2VsZWN0LWluZGljYXRvci1jb2xvcjogICAgICAgJGdyYXktODAwICFkZWZhdWx0O1xuJGZvcm0tc2VsZWN0LWluZGljYXRvcjogICAgICAgICAgICAgdXJsKFwiZGF0YTppbWFnZS9zdmcreG1sLDxzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB2aWV3Qm94PScwIDAgMTYgMTYnPjxwYXRoIGZpbGw9J25vbmUnIHN0cm9rZT0nI3skZm9ybS1zZWxlY3QtaW5kaWNhdG9yLWNvbG9yfScgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBzdHJva2UtbGluZWpvaW49J3JvdW5kJyBzdHJva2Utd2lkdGg9JzInIGQ9J00yIDVsNiA2IDYtNicvPjwvc3ZnPlwiKSAhZGVmYXVsdDtcblxuJGZvcm0tc2VsZWN0LWZlZWRiYWNrLWljb24tcGFkZGluZy1lbmQ6ICRmb3JtLXNlbGVjdC1wYWRkaW5nLXggKiAyLjUgKyAkZm9ybS1zZWxlY3QtaW5kaWNhdG9yLXBhZGRpbmcgIWRlZmF1bHQ7XG4kZm9ybS1zZWxlY3QtZmVlZGJhY2staWNvbi1wb3NpdGlvbjogICAgY2VudGVyIHJpZ2h0ICRmb3JtLXNlbGVjdC1pbmRpY2F0b3ItcGFkZGluZyAhZGVmYXVsdDtcbiRmb3JtLXNlbGVjdC1mZWVkYmFjay1pY29uLXNpemU6ICAgICAgICAkaW5wdXQtaGVpZ2h0LWlubmVyLWhhbGYgJGlucHV0LWhlaWdodC1pbm5lci1oYWxmICFkZWZhdWx0O1xuXG4kZm9ybS1zZWxlY3QtYm9yZGVyLXdpZHRoOiAgICAgICAgJGlucHV0LWJvcmRlci13aWR0aCAhZGVmYXVsdDtcbiRmb3JtLXNlbGVjdC1ib3JkZXItY29sb3I6ICAgICAgICAkaW5wdXQtYm9yZGVyLWNvbG9yICFkZWZhdWx0O1xuJGZvcm0tc2VsZWN0LWJvcmRlci1yYWRpdXM6ICAgICAgICRpbnB1dC1ib3JkZXItcmFkaXVzICFkZWZhdWx0O1xuJGZvcm0tc2VsZWN0LWJveC1zaGFkb3c6ICAgICAgICAgICRib3gtc2hhZG93LWluc2V0ICFkZWZhdWx0O1xuXG4kZm9ybS1zZWxlY3QtZm9jdXMtYm9yZGVyLWNvbG9yOiAgJGlucHV0LWZvY3VzLWJvcmRlci1jb2xvciAhZGVmYXVsdDtcbiRmb3JtLXNlbGVjdC1mb2N1cy13aWR0aDogICAgICAgICAkaW5wdXQtZm9jdXMtd2lkdGggIWRlZmF1bHQ7XG4kZm9ybS1zZWxlY3QtZm9jdXMtYm94LXNoYWRvdzogICAgMCAwIDAgJGZvcm0tc2VsZWN0LWZvY3VzLXdpZHRoICRpbnB1dC1idG4tZm9jdXMtY29sb3IgIWRlZmF1bHQ7XG5cbiRmb3JtLXNlbGVjdC1wYWRkaW5nLXktc206ICAgICAgICAkaW5wdXQtcGFkZGluZy15LXNtICFkZWZhdWx0O1xuJGZvcm0tc2VsZWN0LXBhZGRpbmcteC1zbTogICAgICAgICRpbnB1dC1wYWRkaW5nLXgtc20gIWRlZmF1bHQ7XG4kZm9ybS1zZWxlY3QtZm9udC1zaXplLXNtOiAgICAgICAgJGlucHV0LWZvbnQtc2l6ZS1zbSAhZGVmYXVsdDtcbiRmb3JtLXNlbGVjdC1ib3JkZXItcmFkaXVzLXNtOiAgICAkaW5wdXQtYm9yZGVyLXJhZGl1cy1zbSAhZGVmYXVsdDtcblxuJGZvcm0tc2VsZWN0LXBhZGRpbmcteS1sZzogICAgICAgICRpbnB1dC1wYWRkaW5nLXktbGcgIWRlZmF1bHQ7XG4kZm9ybS1zZWxlY3QtcGFkZGluZy14LWxnOiAgICAgICAgJGlucHV0LXBhZGRpbmcteC1sZyAhZGVmYXVsdDtcbiRmb3JtLXNlbGVjdC1mb250LXNpemUtbGc6ICAgICAgICAkaW5wdXQtZm9udC1zaXplLWxnICFkZWZhdWx0O1xuJGZvcm0tc2VsZWN0LWJvcmRlci1yYWRpdXMtbGc6ICAgICRpbnB1dC1ib3JkZXItcmFkaXVzLWxnICFkZWZhdWx0O1xuXG4kZm9ybS1zZWxlY3QtdHJhbnNpdGlvbjogICAgICAgICAgJGlucHV0LXRyYW5zaXRpb24gIWRlZmF1bHQ7XG4vLyBzY3NzLWRvY3MtZW5kIGZvcm0tc2VsZWN0LXZhcmlhYmxlc1xuXG4vLyBzY3NzLWRvY3Mtc3RhcnQgZm9ybS1yYW5nZS12YXJpYWJsZXNcbiRmb3JtLXJhbmdlLXRyYWNrLXdpZHRoOiAgICAgICAgICAxMDAlICFkZWZhdWx0O1xuJGZvcm0tcmFuZ2UtdHJhY2staGVpZ2h0OiAgICAgICAgIC41cmVtICFkZWZhdWx0O1xuJGZvcm0tcmFuZ2UtdHJhY2stY3Vyc29yOiAgICAgICAgIHBvaW50ZXIgIWRlZmF1bHQ7XG4kZm9ybS1yYW5nZS10cmFjay1iZzogICAgICAgICAgICAgJGdyYXktMzAwICFkZWZhdWx0O1xuJGZvcm0tcmFuZ2UtdHJhY2stYm9yZGVyLXJhZGl1czogIDFyZW0gIWRlZmF1bHQ7XG4kZm9ybS1yYW5nZS10cmFjay1ib3gtc2hhZG93OiAgICAgJGJveC1zaGFkb3ctaW5zZXQgIWRlZmF1bHQ7XG5cbiRmb3JtLXJhbmdlLXRodW1iLXdpZHRoOiAgICAgICAgICAgICAgICAgICAxcmVtICFkZWZhdWx0O1xuJGZvcm0tcmFuZ2UtdGh1bWItaGVpZ2h0OiAgICAgICAgICAgICAgICAgICRmb3JtLXJhbmdlLXRodW1iLXdpZHRoICFkZWZhdWx0O1xuJGZvcm0tcmFuZ2UtdGh1bWItYmc6ICAgICAgICAgICAgICAgICAgICAgICRjb21wb25lbnQtYWN0aXZlLWJnICFkZWZhdWx0O1xuJGZvcm0tcmFuZ2UtdGh1bWItYm9yZGVyOiAgICAgICAgICAgICAgICAgIDAgIWRlZmF1bHQ7XG4kZm9ybS1yYW5nZS10aHVtYi1ib3JkZXItcmFkaXVzOiAgICAgICAgICAgMXJlbSAhZGVmYXVsdDtcbiRmb3JtLXJhbmdlLXRodW1iLWJveC1zaGFkb3c6ICAgICAgICAgICAgICAwIC4xcmVtIC4yNXJlbSByZ2JhKCRibGFjaywgLjEpICFkZWZhdWx0O1xuJGZvcm0tcmFuZ2UtdGh1bWItZm9jdXMtYm94LXNoYWRvdzogICAgICAgIDAgMCAwIDFweCAkYm9keS1iZywgJGlucHV0LWZvY3VzLWJveC1zaGFkb3cgIWRlZmF1bHQ7XG4kZm9ybS1yYW5nZS10aHVtYi1mb2N1cy1ib3gtc2hhZG93LXdpZHRoOiAgJGlucHV0LWZvY3VzLXdpZHRoICFkZWZhdWx0OyAvLyBGb3IgZm9jdXMgYm94IHNoYWRvdyBpc3N1ZSBpbiBFZGdlXG4kZm9ybS1yYW5nZS10aHVtYi1hY3RpdmUtYmc6ICAgICAgICAgICAgICAgdGludC1jb2xvcigkY29tcG9uZW50LWFjdGl2ZS1iZywgNzAlKSAhZGVmYXVsdDtcbiRmb3JtLXJhbmdlLXRodW1iLWRpc2FibGVkLWJnOiAgICAgICAgICAgICAkZ3JheS01MDAgIWRlZmF1bHQ7XG4kZm9ybS1yYW5nZS10aHVtYi10cmFuc2l0aW9uOiAgICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvciAuMTVzIGVhc2UtaW4tb3V0LCBib3JkZXItY29sb3IgLjE1cyBlYXNlLWluLW91dCwgYm94LXNoYWRvdyAuMTVzIGVhc2UtaW4tb3V0ICFkZWZhdWx0O1xuLy8gc2Nzcy1kb2NzLWVuZCBmb3JtLXJhbmdlLXZhcmlhYmxlc1xuXG4vLyBzY3NzLWRvY3Mtc3RhcnQgZm9ybS1maWxlLXZhcmlhYmxlc1xuJGZvcm0tZmlsZS1idXR0b24tY29sb3I6ICAgICAgICAgICRpbnB1dC1jb2xvciAhZGVmYXVsdDtcbiRmb3JtLWZpbGUtYnV0dG9uLWJnOiAgICAgICAgICAgICAkaW5wdXQtZ3JvdXAtYWRkb24tYmcgIWRlZmF1bHQ7XG4kZm9ybS1maWxlLWJ1dHRvbi1ob3Zlci1iZzogICAgICAgc2hhZGUtY29sb3IoJGZvcm0tZmlsZS1idXR0b24tYmcsIDUlKSAhZGVmYXVsdDtcbi8vIHNjc3MtZG9jcy1lbmQgZm9ybS1maWxlLXZhcmlhYmxlc1xuXG4vLyBzY3NzLWRvY3Mtc3RhcnQgZm9ybS1mbG9hdGluZy12YXJpYWJsZXNcbiRmb3JtLWZsb2F0aW5nLWhlaWdodDogICAgICAgICAgICBhZGQoMy41cmVtLCAkaW5wdXQtaGVpZ2h0LWJvcmRlcikgIWRlZmF1bHQ7XG4kZm9ybS1mbG9hdGluZy1saW5lLWhlaWdodDogICAgICAgMS4yNSAhZGVmYXVsdDtcbiRmb3JtLWZsb2F0aW5nLXBhZGRpbmcteDogICAgICAgICAkaW5wdXQtcGFkZGluZy14ICFkZWZhdWx0O1xuJGZvcm0tZmxvYXRpbmctcGFkZGluZy15OiAgICAgICAgIDFyZW0gIWRlZmF1bHQ7XG4kZm9ybS1mbG9hdGluZy1pbnB1dC1wYWRkaW5nLXQ6ICAgMS42MjVyZW0gIWRlZmF1bHQ7XG4kZm9ybS1mbG9hdGluZy1pbnB1dC1wYWRkaW5nLWI6ICAgLjYyNXJlbSAhZGVmYXVsdDtcbiRmb3JtLWZsb2F0aW5nLWxhYmVsLW9wYWNpdHk6ICAgICAuNjUgIWRlZmF1bHQ7XG4kZm9ybS1mbG9hdGluZy1sYWJlbC10cmFuc2Zvcm06ICAgc2NhbGUoLjg1KSB0cmFuc2xhdGVZKC0uNXJlbSkgdHJhbnNsYXRlWCguMTVyZW0pICFkZWZhdWx0O1xuJGZvcm0tZmxvYXRpbmctdHJhbnNpdGlvbjogICAgICAgIG9wYWNpdHkgLjFzIGVhc2UtaW4tb3V0LCB0cmFuc2Zvcm0gLjFzIGVhc2UtaW4tb3V0ICFkZWZhdWx0O1xuLy8gc2Nzcy1kb2NzLWVuZCBmb3JtLWZsb2F0aW5nLXZhcmlhYmxlc1xuXG4vLyBGb3JtIHZhbGlkYXRpb25cblxuLy8gc2Nzcy1kb2NzLXN0YXJ0IGZvcm0tZmVlZGJhY2stdmFyaWFibGVzXG4kZm9ybS1mZWVkYmFjay1tYXJnaW4tdG9wOiAgICAgICAgICAkZm9ybS10ZXh0LW1hcmdpbi10b3AgIWRlZmF1bHQ7XG4kZm9ybS1mZWVkYmFjay1mb250LXNpemU6ICAgICAgICAgICAkZm9ybS10ZXh0LWZvbnQtc2l6ZSAhZGVmYXVsdDtcbiRmb3JtLWZlZWRiYWNrLWZvbnQtc3R5bGU6ICAgICAgICAgICRmb3JtLXRleHQtZm9udC1zdHlsZSAhZGVmYXVsdDtcbiRmb3JtLWZlZWRiYWNrLXZhbGlkLWNvbG9yOiAgICAgICAgICRzdWNjZXNzICFkZWZhdWx0O1xuJGZvcm0tZmVlZGJhY2staW52YWxpZC1jb2xvcjogICAgICAgJGRhbmdlciAhZGVmYXVsdDtcblxuJGZvcm0tZmVlZGJhY2staWNvbi12YWxpZC1jb2xvcjogICAgJGZvcm0tZmVlZGJhY2stdmFsaWQtY29sb3IgIWRlZmF1bHQ7XG4kZm9ybS1mZWVkYmFjay1pY29uLXZhbGlkOiAgICAgICAgICB1cmwoXCJkYXRhOmltYWdlL3N2Zyt4bWwsPHN2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHZpZXdCb3g9JzAgMCA4IDgnPjxwYXRoIGZpbGw9JyN7JGZvcm0tZmVlZGJhY2staWNvbi12YWxpZC1jb2xvcn0nIGQ9J00yLjMgNi43M0wuNiA0LjUzYy0uNC0xLjA0LjQ2LTEuNCAxLjEtLjhsMS4xIDEuNCAzLjQtMy44Yy42LS42MyAxLjYtLjI3IDEuMi43bC00IDQuNmMtLjQzLjUtLjguNC0xLjEuMXonLz48L3N2Zz5cIikgIWRlZmF1bHQ7XG4kZm9ybS1mZWVkYmFjay1pY29uLWludmFsaWQtY29sb3I6ICAkZm9ybS1mZWVkYmFjay1pbnZhbGlkLWNvbG9yICFkZWZhdWx0O1xuJGZvcm0tZmVlZGJhY2staWNvbi1pbnZhbGlkOiAgICAgICAgdXJsKFwiZGF0YTppbWFnZS9zdmcreG1sLDxzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB2aWV3Qm94PScwIDAgMTIgMTInIHdpZHRoPScxMicgaGVpZ2h0PScxMicgZmlsbD0nbm9uZScgc3Ryb2tlPScjeyRmb3JtLWZlZWRiYWNrLWljb24taW52YWxpZC1jb2xvcn0nPjxjaXJjbGUgY3g9JzYnIGN5PSc2JyByPSc0LjUnLz48cGF0aCBzdHJva2UtbGluZWpvaW49J3JvdW5kJyBkPSdNNS44IDMuNmguNEw2IDYuNXonLz48Y2lyY2xlIGN4PSc2JyBjeT0nOC4yJyByPScuNicgZmlsbD0nI3skZm9ybS1mZWVkYmFjay1pY29uLWludmFsaWQtY29sb3J9JyBzdHJva2U9J25vbmUnLz48L3N2Zz5cIikgIWRlZmF1bHQ7XG4vLyBzY3NzLWRvY3MtZW5kIGZvcm0tZmVlZGJhY2stdmFyaWFibGVzXG5cbi8vIHNjc3MtZG9jcy1zdGFydCBmb3JtLXZhbGlkYXRpb24tc3RhdGVzXG4kZm9ybS12YWxpZGF0aW9uLXN0YXRlczogKFxuICBcInZhbGlkXCI6IChcbiAgICBcImNvbG9yXCI6ICRmb3JtLWZlZWRiYWNrLXZhbGlkLWNvbG9yLFxuICAgIFwiaWNvblwiOiAkZm9ybS1mZWVkYmFjay1pY29uLXZhbGlkXG4gICksXG4gIFwiaW52YWxpZFwiOiAoXG4gICAgXCJjb2xvclwiOiAkZm9ybS1mZWVkYmFjay1pbnZhbGlkLWNvbG9yLFxuICAgIFwiaWNvblwiOiAkZm9ybS1mZWVkYmFjay1pY29uLWludmFsaWRcbiAgKVxuKSAhZGVmYXVsdDtcbi8vIHNjc3MtZG9jcy1lbmQgZm9ybS12YWxpZGF0aW9uLXN0YXRlc1xuXG4vLyBaLWluZGV4IG1hc3RlciBsaXN0XG4vL1xuLy8gV2FybmluZzogQXZvaWQgY3VzdG9taXppbmcgdGhlc2UgdmFsdWVzLiBUaGV5J3JlIHVzZWQgZm9yIGEgYmlyZCdzIGV5ZSB2aWV3XG4vLyBvZiBjb21wb25lbnRzIGRlcGVuZGVudCBvbiB0aGUgei1heGlzIGFuZCBhcmUgZGVzaWduZWQgdG8gYWxsIHdvcmsgdG9nZXRoZXIuXG5cbi8vIHNjc3MtZG9jcy1zdGFydCB6aW5kZXgtc3RhY2tcbiR6aW5kZXgtZHJvcGRvd246ICAgICAgICAgICAgICAgICAgIDEwMDAgIWRlZmF1bHQ7XG4kemluZGV4LXN0aWNreTogICAgICAgICAgICAgICAgICAgICAxMDIwICFkZWZhdWx0O1xuJHppbmRleC1maXhlZDogICAgICAgICAgICAgICAgICAgICAgMTAzMCAhZGVmYXVsdDtcbiR6aW5kZXgtb2ZmY2FudmFzLWJhY2tkcm9wOiAgICAgICAgIDEwNDAgIWRlZmF1bHQ7XG4kemluZGV4LW9mZmNhbnZhczogICAgICAgICAgICAgICAgICAxMDQ1ICFkZWZhdWx0O1xuJHppbmRleC1tb2RhbC1iYWNrZHJvcDogICAgICAgICAgICAgMTA1MCAhZGVmYXVsdDtcbiR6aW5kZXgtbW9kYWw6ICAgICAgICAgICAgICAgICAgICAgIDEwNTUgIWRlZmF1bHQ7XG4kemluZGV4LXBvcG92ZXI6ICAgICAgICAgICAgICAgICAgICAxMDcwICFkZWZhdWx0O1xuJHppbmRleC10b29sdGlwOiAgICAgICAgICAgICAgICAgICAgMTA4MCAhZGVmYXVsdDtcbi8vIHNjc3MtZG9jcy1lbmQgemluZGV4LXN0YWNrXG5cblxuLy8gTmF2c1xuXG4vLyBzY3NzLWRvY3Mtc3RhcnQgbmF2LXZhcmlhYmxlc1xuJG5hdi1saW5rLXBhZGRpbmcteTogICAgICAgICAgICAgICAgLjVyZW0gIWRlZmF1bHQ7XG4kbmF2LWxpbmstcGFkZGluZy14OiAgICAgICAgICAgICAgICAxcmVtICFkZWZhdWx0O1xuJG5hdi1saW5rLWZvbnQtc2l6ZTogICAgICAgICAgICAgICAgbnVsbCAhZGVmYXVsdDtcbiRuYXYtbGluay1mb250LXdlaWdodDogICAgICAgICAgICAgIG51bGwgIWRlZmF1bHQ7XG4kbmF2LWxpbmstY29sb3I6ICAgICAgICAgICAgICAgICAgICAkbGluay1jb2xvciAhZGVmYXVsdDtcbiRuYXYtbGluay1ob3Zlci1jb2xvcjogICAgICAgICAgICAgICRsaW5rLWhvdmVyLWNvbG9yICFkZWZhdWx0O1xuJG5hdi1saW5rLXRyYW5zaXRpb246ICAgICAgICAgICAgICAgY29sb3IgLjE1cyBlYXNlLWluLW91dCwgYmFja2dyb3VuZC1jb2xvciAuMTVzIGVhc2UtaW4tb3V0LCBib3JkZXItY29sb3IgLjE1cyBlYXNlLWluLW91dCAhZGVmYXVsdDtcbiRuYXYtbGluay1kaXNhYmxlZC1jb2xvcjogICAgICAgICAgICRncmF5LTYwMCAhZGVmYXVsdDtcblxuJG5hdi10YWJzLWJvcmRlci1jb2xvcjogICAgICAgICAgICAgJGdyYXktMzAwICFkZWZhdWx0O1xuJG5hdi10YWJzLWJvcmRlci13aWR0aDogICAgICAgICAgICAgJGJvcmRlci13aWR0aCAhZGVmYXVsdDtcbiRuYXYtdGFicy1ib3JkZXItcmFkaXVzOiAgICAgICAgICAgICRib3JkZXItcmFkaXVzICFkZWZhdWx0O1xuJG5hdi10YWJzLWxpbmstaG92ZXItYm9yZGVyLWNvbG9yOiAgJGdyYXktMjAwICRncmF5LTIwMCAkbmF2LXRhYnMtYm9yZGVyLWNvbG9yICFkZWZhdWx0O1xuJG5hdi10YWJzLWxpbmstYWN0aXZlLWNvbG9yOiAgICAgICAgJGdyYXktNzAwICFkZWZhdWx0O1xuJG5hdi10YWJzLWxpbmstYWN0aXZlLWJnOiAgICAgICAgICAgJGJvZHktYmcgIWRlZmF1bHQ7XG4kbmF2LXRhYnMtbGluay1hY3RpdmUtYm9yZGVyLWNvbG9yOiAkZ3JheS0zMDAgJGdyYXktMzAwICRuYXYtdGFicy1saW5rLWFjdGl2ZS1iZyAhZGVmYXVsdDtcblxuJG5hdi1waWxscy1ib3JkZXItcmFkaXVzOiAgICAgICAgICAgJGJvcmRlci1yYWRpdXMgIWRlZmF1bHQ7XG4kbmF2LXBpbGxzLWxpbmstYWN0aXZlLWNvbG9yOiAgICAgICAkY29tcG9uZW50LWFjdGl2ZS1jb2xvciAhZGVmYXVsdDtcbiRuYXYtcGlsbHMtbGluay1hY3RpdmUtYmc6ICAgICAgICAgICRjb21wb25lbnQtYWN0aXZlLWJnICFkZWZhdWx0O1xuLy8gc2Nzcy1kb2NzLWVuZCBuYXYtdmFyaWFibGVzXG5cblxuLy8gTmF2YmFyXG5cbi8vIHNjc3MtZG9jcy1zdGFydCBuYXZiYXItdmFyaWFibGVzXG4kbmF2YmFyLXBhZGRpbmcteTogICAgICAgICAgICAgICAgICAkc3BhY2VyICogLjUgIWRlZmF1bHQ7XG4kbmF2YmFyLXBhZGRpbmcteDogICAgICAgICAgICAgICAgICBudWxsICFkZWZhdWx0O1xuXG4kbmF2YmFyLW5hdi1saW5rLXBhZGRpbmcteDogICAgICAgICAuNXJlbSAhZGVmYXVsdDtcblxuJG5hdmJhci1icmFuZC1mb250LXNpemU6ICAgICAgICAgICAgJGZvbnQtc2l6ZS1sZyAhZGVmYXVsdDtcbi8vIENvbXB1dGUgdGhlIG5hdmJhci1icmFuZCBwYWRkaW5nLXkgc28gdGhlIG5hdmJhci1icmFuZCB3aWxsIGhhdmUgdGhlIHNhbWUgaGVpZ2h0IGFzIG5hdmJhci10ZXh0IGFuZCBuYXYtbGlua1xuJG5hdi1saW5rLWhlaWdodDogICAgICAgICAgICAgICAgICAgJGZvbnQtc2l6ZS1iYXNlICogJGxpbmUtaGVpZ2h0LWJhc2UgKyAkbmF2LWxpbmstcGFkZGluZy15ICogMiAhZGVmYXVsdDtcbiRuYXZiYXItYnJhbmQtaGVpZ2h0OiAgICAgICAgICAgICAgICRuYXZiYXItYnJhbmQtZm9udC1zaXplICogJGxpbmUtaGVpZ2h0LWJhc2UgIWRlZmF1bHQ7XG4kbmF2YmFyLWJyYW5kLXBhZGRpbmcteTogICAgICAgICAgICAoJG5hdi1saW5rLWhlaWdodCAtICRuYXZiYXItYnJhbmQtaGVpZ2h0KSAqIC41ICFkZWZhdWx0O1xuJG5hdmJhci1icmFuZC1tYXJnaW4tZW5kOiAgICAgICAgICAgMXJlbSAhZGVmYXVsdDtcblxuJG5hdmJhci10b2dnbGVyLXBhZGRpbmcteTogICAgICAgICAgLjI1cmVtICFkZWZhdWx0O1xuJG5hdmJhci10b2dnbGVyLXBhZGRpbmcteDogICAgICAgICAgLjc1cmVtICFkZWZhdWx0O1xuJG5hdmJhci10b2dnbGVyLWZvbnQtc2l6ZTogICAgICAgICAgJGZvbnQtc2l6ZS1sZyAhZGVmYXVsdDtcbiRuYXZiYXItdG9nZ2xlci1ib3JkZXItcmFkaXVzOiAgICAgICRidG4tYm9yZGVyLXJhZGl1cyAhZGVmYXVsdDtcbiRuYXZiYXItdG9nZ2xlci1mb2N1cy13aWR0aDogICAgICAgICRidG4tZm9jdXMtd2lkdGggIWRlZmF1bHQ7XG4kbmF2YmFyLXRvZ2dsZXItdHJhbnNpdGlvbjogICAgICAgICBib3gtc2hhZG93IC4xNXMgZWFzZS1pbi1vdXQgIWRlZmF1bHQ7XG4vLyBzY3NzLWRvY3MtZW5kIG5hdmJhci12YXJpYWJsZXNcblxuLy8gc2Nzcy1kb2NzLXN0YXJ0IG5hdmJhci10aGVtZS12YXJpYWJsZXNcbiRuYXZiYXItZGFyay1jb2xvcjogICAgICAgICAgICAgICAgIHJnYmEoJHdoaXRlLCAuNTUpICFkZWZhdWx0O1xuJG5hdmJhci1kYXJrLWhvdmVyLWNvbG9yOiAgICAgICAgICAgcmdiYSgkd2hpdGUsIC43NSkgIWRlZmF1bHQ7XG4kbmF2YmFyLWRhcmstYWN0aXZlLWNvbG9yOiAgICAgICAgICAkd2hpdGUgIWRlZmF1bHQ7XG4kbmF2YmFyLWRhcmstZGlzYWJsZWQtY29sb3I6ICAgICAgICByZ2JhKCR3aGl0ZSwgLjI1KSAhZGVmYXVsdDtcbiRuYXZiYXItZGFyay10b2dnbGVyLWljb24tYmc6ICAgICAgIHVybChcImRhdGE6aW1hZ2Uvc3ZnK3htbCw8c3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgdmlld0JveD0nMCAwIDMwIDMwJz48cGF0aCBzdHJva2U9JyN7JG5hdmJhci1kYXJrLWNvbG9yfScgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBzdHJva2UtbWl0ZXJsaW1pdD0nMTAnIHN0cm9rZS13aWR0aD0nMicgZD0nTTQgN2gyMk00IDE1aDIyTTQgMjNoMjInLz48L3N2Zz5cIikgIWRlZmF1bHQ7XG4kbmF2YmFyLWRhcmstdG9nZ2xlci1ib3JkZXItY29sb3I6ICByZ2JhKCR3aGl0ZSwgLjEpICFkZWZhdWx0O1xuXG4kbmF2YmFyLWxpZ2h0LWNvbG9yOiAgICAgICAgICAgICAgICByZ2JhKCRibGFjaywgLjU1KSAhZGVmYXVsdDtcbiRuYXZiYXItbGlnaHQtaG92ZXItY29sb3I6ICAgICAgICAgIHJnYmEoJGJsYWNrLCAuNykgIWRlZmF1bHQ7XG4kbmF2YmFyLWxpZ2h0LWFjdGl2ZS1jb2xvcjogICAgICAgICByZ2JhKCRibGFjaywgLjkpICFkZWZhdWx0O1xuJG5hdmJhci1saWdodC1kaXNhYmxlZC1jb2xvcjogICAgICAgcmdiYSgkYmxhY2ssIC4zKSAhZGVmYXVsdDtcbiRuYXZiYXItbGlnaHQtdG9nZ2xlci1pY29uLWJnOiAgICAgIHVybChcImRhdGE6aW1hZ2Uvc3ZnK3htbCw8c3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgdmlld0JveD0nMCAwIDMwIDMwJz48cGF0aCBzdHJva2U9JyN7JG5hdmJhci1saWdodC1jb2xvcn0nIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcgc3Ryb2tlLW1pdGVybGltaXQ9JzEwJyBzdHJva2Utd2lkdGg9JzInIGQ9J000IDdoMjJNNCAxNWgyMk00IDIzaDIyJy8+PC9zdmc+XCIpICFkZWZhdWx0O1xuJG5hdmJhci1saWdodC10b2dnbGVyLWJvcmRlci1jb2xvcjogcmdiYSgkYmxhY2ssIC4xKSAhZGVmYXVsdDtcblxuJG5hdmJhci1saWdodC1icmFuZC1jb2xvcjogICAgICAgICAgICAgICAgJG5hdmJhci1saWdodC1hY3RpdmUtY29sb3IgIWRlZmF1bHQ7XG4kbmF2YmFyLWxpZ2h0LWJyYW5kLWhvdmVyLWNvbG9yOiAgICAgICAgICAkbmF2YmFyLWxpZ2h0LWFjdGl2ZS1jb2xvciAhZGVmYXVsdDtcbiRuYXZiYXItZGFyay1icmFuZC1jb2xvcjogICAgICAgICAgICAgICAgICRuYXZiYXItZGFyay1hY3RpdmUtY29sb3IgIWRlZmF1bHQ7XG4kbmF2YmFyLWRhcmstYnJhbmQtaG92ZXItY29sb3I6ICAgICAgICAgICAkbmF2YmFyLWRhcmstYWN0aXZlLWNvbG9yICFkZWZhdWx0O1xuLy8gc2Nzcy1kb2NzLWVuZCBuYXZiYXItdGhlbWUtdmFyaWFibGVzXG5cblxuLy8gRHJvcGRvd25zXG4vL1xuLy8gRHJvcGRvd24gbWVudSBjb250YWluZXIgYW5kIGNvbnRlbnRzLlxuXG4vLyBzY3NzLWRvY3Mtc3RhcnQgZHJvcGRvd24tdmFyaWFibGVzXG4kZHJvcGRvd24tbWluLXdpZHRoOiAgICAgICAgICAgICAgICAxMHJlbSAhZGVmYXVsdDtcbiRkcm9wZG93bi1wYWRkaW5nLXg6ICAgICAgICAgICAgICAgIDAgIWRlZmF1bHQ7XG4kZHJvcGRvd24tcGFkZGluZy15OiAgICAgICAgICAgICAgICAuNXJlbSAhZGVmYXVsdDtcbiRkcm9wZG93bi1zcGFjZXI6ICAgICAgICAgICAgICAgICAgIC4xMjVyZW0gIWRlZmF1bHQ7XG4kZHJvcGRvd24tZm9udC1zaXplOiAgICAgICAgICAgICAgICAkZm9udC1zaXplLWJhc2UgIWRlZmF1bHQ7XG4kZHJvcGRvd24tY29sb3I6ICAgICAgICAgICAgICAgICAgICAkYm9keS1jb2xvciAhZGVmYXVsdDtcbiRkcm9wZG93bi1iZzogICAgICAgICAgICAgICAgICAgICAgICR3aGl0ZSAhZGVmYXVsdDtcbiRkcm9wZG93bi1ib3JkZXItY29sb3I6ICAgICAgICAgICAgIHJnYmEoJGJsYWNrLCAuMTUpICFkZWZhdWx0O1xuJGRyb3Bkb3duLWJvcmRlci1yYWRpdXM6ICAgICAgICAgICAgJGJvcmRlci1yYWRpdXMgIWRlZmF1bHQ7XG4kZHJvcGRvd24tYm9yZGVyLXdpZHRoOiAgICAgICAgICAgICAkYm9yZGVyLXdpZHRoICFkZWZhdWx0O1xuJGRyb3Bkb3duLWlubmVyLWJvcmRlci1yYWRpdXM6ICAgICAgc3VidHJhY3QoJGRyb3Bkb3duLWJvcmRlci1yYWRpdXMsICRkcm9wZG93bi1ib3JkZXItd2lkdGgpICFkZWZhdWx0O1xuJGRyb3Bkb3duLWRpdmlkZXItYmc6ICAgICAgICAgICAgICAgJGRyb3Bkb3duLWJvcmRlci1jb2xvciAhZGVmYXVsdDtcbiRkcm9wZG93bi1kaXZpZGVyLW1hcmdpbi15OiAgICAgICAgICRzcGFjZXIgKiAuNSAhZGVmYXVsdDtcbiRkcm9wZG93bi1ib3gtc2hhZG93OiAgICAgICAgICAgICAgICRib3gtc2hhZG93ICFkZWZhdWx0O1xuXG4kZHJvcGRvd24tbGluay1jb2xvcjogICAgICAgICAgICAgICAkZ3JheS05MDAgIWRlZmF1bHQ7XG4kZHJvcGRvd24tbGluay1ob3Zlci1jb2xvcjogICAgICAgICBzaGFkZS1jb2xvcigkZHJvcGRvd24tbGluay1jb2xvciwgMTAlKSAhZGVmYXVsdDtcbiRkcm9wZG93bi1saW5rLWhvdmVyLWJnOiAgICAgICAgICAgICRncmF5LTIwMCAhZGVmYXVsdDtcblxuJGRyb3Bkb3duLWxpbmstYWN0aXZlLWNvbG9yOiAgICAgICAgJGNvbXBvbmVudC1hY3RpdmUtY29sb3IgIWRlZmF1bHQ7XG4kZHJvcGRvd24tbGluay1hY3RpdmUtYmc6ICAgICAgICAgICAkY29tcG9uZW50LWFjdGl2ZS1iZyAhZGVmYXVsdDtcblxuJGRyb3Bkb3duLWxpbmstZGlzYWJsZWQtY29sb3I6ICAgICAgJGdyYXktNTAwICFkZWZhdWx0O1xuXG4kZHJvcGRvd24taXRlbS1wYWRkaW5nLXk6ICAgICAgICAgICAkc3BhY2VyICogLjI1ICFkZWZhdWx0O1xuJGRyb3Bkb3duLWl0ZW0tcGFkZGluZy14OiAgICAgICAgICAgJHNwYWNlciAhZGVmYXVsdDtcblxuJGRyb3Bkb3duLWhlYWRlci1jb2xvcjogICAgICAgICAgICAgJGdyYXktNjAwICFkZWZhdWx0O1xuJGRyb3Bkb3duLWhlYWRlci1wYWRkaW5nOiAgICAgICAgICAgJGRyb3Bkb3duLXBhZGRpbmcteSAkZHJvcGRvd24taXRlbS1wYWRkaW5nLXggIWRlZmF1bHQ7XG4vLyBzY3NzLWRvY3MtZW5kIGRyb3Bkb3duLXZhcmlhYmxlc1xuXG4vLyBzY3NzLWRvY3Mtc3RhcnQgZHJvcGRvd24tZGFyay12YXJpYWJsZXNcbiRkcm9wZG93bi1kYXJrLWNvbG9yOiAgICAgICAgICAgICAgICRncmF5LTMwMCAhZGVmYXVsdDtcbiRkcm9wZG93bi1kYXJrLWJnOiAgICAgICAgICAgICAgICAgICRncmF5LTgwMCAhZGVmYXVsdDtcbiRkcm9wZG93bi1kYXJrLWJvcmRlci1jb2xvcjogICAgICAgICRkcm9wZG93bi1ib3JkZXItY29sb3IgIWRlZmF1bHQ7XG4kZHJvcGRvd24tZGFyay1kaXZpZGVyLWJnOiAgICAgICAgICAkZHJvcGRvd24tZGl2aWRlci1iZyAhZGVmYXVsdDtcbiRkcm9wZG93bi1kYXJrLWJveC1zaGFkb3c6ICAgICAgICAgIG51bGwgIWRlZmF1bHQ7XG4kZHJvcGRvd24tZGFyay1saW5rLWNvbG9yOiAgICAgICAgICAkZHJvcGRvd24tZGFyay1jb2xvciAhZGVmYXVsdDtcbiRkcm9wZG93bi1kYXJrLWxpbmstaG92ZXItY29sb3I6ICAgICR3aGl0ZSAhZGVmYXVsdDtcbiRkcm9wZG93bi1kYXJrLWxpbmstaG92ZXItYmc6ICAgICAgIHJnYmEoJHdoaXRlLCAuMTUpICFkZWZhdWx0O1xuJGRyb3Bkb3duLWRhcmstbGluay1hY3RpdmUtY29sb3I6ICAgJGRyb3Bkb3duLWxpbmstYWN0aXZlLWNvbG9yICFkZWZhdWx0O1xuJGRyb3Bkb3duLWRhcmstbGluay1hY3RpdmUtYmc6ICAgICAgJGRyb3Bkb3duLWxpbmstYWN0aXZlLWJnICFkZWZhdWx0O1xuJGRyb3Bkb3duLWRhcmstbGluay1kaXNhYmxlZC1jb2xvcjogJGdyYXktNTAwICFkZWZhdWx0O1xuJGRyb3Bkb3duLWRhcmstaGVhZGVyLWNvbG9yOiAgICAgICAgJGdyYXktNTAwICFkZWZhdWx0O1xuLy8gc2Nzcy1kb2NzLWVuZCBkcm9wZG93bi1kYXJrLXZhcmlhYmxlc1xuXG5cbi8vIFBhZ2luYXRpb25cblxuLy8gc2Nzcy1kb2NzLXN0YXJ0IHBhZ2luYXRpb24tdmFyaWFibGVzXG4kcGFnaW5hdGlvbi1wYWRkaW5nLXk6ICAgICAgICAgICAgICAuMzc1cmVtICFkZWZhdWx0O1xuJHBhZ2luYXRpb24tcGFkZGluZy14OiAgICAgICAgICAgICAgLjc1cmVtICFkZWZhdWx0O1xuJHBhZ2luYXRpb24tcGFkZGluZy15LXNtOiAgICAgICAgICAgLjI1cmVtICFkZWZhdWx0O1xuJHBhZ2luYXRpb24tcGFkZGluZy14LXNtOiAgICAgICAgICAgLjVyZW0gIWRlZmF1bHQ7XG4kcGFnaW5hdGlvbi1wYWRkaW5nLXktbGc6ICAgICAgICAgICAuNzVyZW0gIWRlZmF1bHQ7XG4kcGFnaW5hdGlvbi1wYWRkaW5nLXgtbGc6ICAgICAgICAgICAxLjVyZW0gIWRlZmF1bHQ7XG5cbiRwYWdpbmF0aW9uLWNvbG9yOiAgICAgICAgICAgICAgICAgICRsaW5rLWNvbG9yICFkZWZhdWx0O1xuJHBhZ2luYXRpb24tYmc6ICAgICAgICAgICAgICAgICAgICAgJHdoaXRlICFkZWZhdWx0O1xuJHBhZ2luYXRpb24tYm9yZGVyLXdpZHRoOiAgICAgICAgICAgJGJvcmRlci13aWR0aCAhZGVmYXVsdDtcbiRwYWdpbmF0aW9uLWJvcmRlci1yYWRpdXM6ICAgICAgICAgICRib3JkZXItcmFkaXVzICFkZWZhdWx0O1xuJHBhZ2luYXRpb24tbWFyZ2luLXN0YXJ0OiAgICAgICAgICAgLSRwYWdpbmF0aW9uLWJvcmRlci13aWR0aCAhZGVmYXVsdDtcbiRwYWdpbmF0aW9uLWJvcmRlci1jb2xvcjogICAgICAgICAgICRncmF5LTMwMCAhZGVmYXVsdDtcblxuJHBhZ2luYXRpb24tZm9jdXMtY29sb3I6ICAgICAgICAgICAgJGxpbmstaG92ZXItY29sb3IgIWRlZmF1bHQ7XG4kcGFnaW5hdGlvbi1mb2N1cy1iZzogICAgICAgICAgICAgICAkZ3JheS0yMDAgIWRlZmF1bHQ7XG4kcGFnaW5hdGlvbi1mb2N1cy1ib3gtc2hhZG93OiAgICAgICAkaW5wdXQtYnRuLWZvY3VzLWJveC1zaGFkb3cgIWRlZmF1bHQ7XG4kcGFnaW5hdGlvbi1mb2N1cy1vdXRsaW5lOiAgICAgICAgICAwICFkZWZhdWx0O1xuXG4kcGFnaW5hdGlvbi1ob3Zlci1jb2xvcjogICAgICAgICAgICAkbGluay1ob3Zlci1jb2xvciAhZGVmYXVsdDtcbiRwYWdpbmF0aW9uLWhvdmVyLWJnOiAgICAgICAgICAgICAgICRncmF5LTIwMCAhZGVmYXVsdDtcbiRwYWdpbmF0aW9uLWhvdmVyLWJvcmRlci1jb2xvcjogICAgICRncmF5LTMwMCAhZGVmYXVsdDtcblxuJHBhZ2luYXRpb24tYWN0aXZlLWNvbG9yOiAgICAgICAgICAgJGNvbXBvbmVudC1hY3RpdmUtY29sb3IgIWRlZmF1bHQ7XG4kcGFnaW5hdGlvbi1hY3RpdmUtYmc6ICAgICAgICAgICAgICAkY29tcG9uZW50LWFjdGl2ZS1iZyAhZGVmYXVsdDtcbiRwYWdpbmF0aW9uLWFjdGl2ZS1ib3JkZXItY29sb3I6ICAgICRwYWdpbmF0aW9uLWFjdGl2ZS1iZyAhZGVmYXVsdDtcblxuJHBhZ2luYXRpb24tZGlzYWJsZWQtY29sb3I6ICAgICAgICAgJGdyYXktNjAwICFkZWZhdWx0O1xuJHBhZ2luYXRpb24tZGlzYWJsZWQtYmc6ICAgICAgICAgICAgJHdoaXRlICFkZWZhdWx0O1xuJHBhZ2luYXRpb24tZGlzYWJsZWQtYm9yZGVyLWNvbG9yOiAgJGdyYXktMzAwICFkZWZhdWx0O1xuXG4kcGFnaW5hdGlvbi10cmFuc2l0aW9uOiAgICAgICAgICAgICAgY29sb3IgLjE1cyBlYXNlLWluLW91dCwgYmFja2dyb3VuZC1jb2xvciAuMTVzIGVhc2UtaW4tb3V0LCBib3JkZXItY29sb3IgLjE1cyBlYXNlLWluLW91dCwgYm94LXNoYWRvdyAuMTVzIGVhc2UtaW4tb3V0ICFkZWZhdWx0O1xuXG4kcGFnaW5hdGlvbi1ib3JkZXItcmFkaXVzLXNtOiAgICAgICAkYm9yZGVyLXJhZGl1cy1zbSAhZGVmYXVsdDtcbiRwYWdpbmF0aW9uLWJvcmRlci1yYWRpdXMtbGc6ICAgICAgICRib3JkZXItcmFkaXVzLWxnICFkZWZhdWx0O1xuLy8gc2Nzcy1kb2NzLWVuZCBwYWdpbmF0aW9uLXZhcmlhYmxlc1xuXG5cbi8vIFBsYWNlaG9sZGVyc1xuXG4vLyBzY3NzLWRvY3Mtc3RhcnQgcGxhY2Vob2xkZXJzXG4kcGxhY2Vob2xkZXItb3BhY2l0eS1tYXg6ICAgICAgICAgICAuNSAhZGVmYXVsdDtcbiRwbGFjZWhvbGRlci1vcGFjaXR5LW1pbjogICAgICAgICAgIC4yICFkZWZhdWx0O1xuLy8gc2Nzcy1kb2NzLWVuZCBwbGFjZWhvbGRlcnNcblxuLy8gQ2FyZHNcblxuLy8gc2Nzcy1kb2NzLXN0YXJ0IGNhcmQtdmFyaWFibGVzXG4kY2FyZC1zcGFjZXIteTogICAgICAgICAgICAgICAgICAgICAkc3BhY2VyICFkZWZhdWx0O1xuJGNhcmQtc3BhY2VyLXg6ICAgICAgICAgICAgICAgICAgICAgJHNwYWNlciAhZGVmYXVsdDtcbiRjYXJkLXRpdGxlLXNwYWNlci15OiAgICAgICAgICAgICAgICRzcGFjZXIgKiAuNSAhZGVmYXVsdDtcbiRjYXJkLWJvcmRlci13aWR0aDogICAgICAgICAgICAgICAgICRib3JkZXItd2lkdGggIWRlZmF1bHQ7XG4kY2FyZC1ib3JkZXItY29sb3I6ICAgICAgICAgICAgICAgICByZ2JhKCRibGFjaywgLjEyNSkgIWRlZmF1bHQ7XG4kY2FyZC1ib3JkZXItcmFkaXVzOiAgICAgICAgICAgICAgICAkYm9yZGVyLXJhZGl1cyAhZGVmYXVsdDtcbiRjYXJkLWJveC1zaGFkb3c6ICAgICAgICAgICAgICAgICAgIG51bGwgIWRlZmF1bHQ7XG4kY2FyZC1pbm5lci1ib3JkZXItcmFkaXVzOiAgICAgICAgICBzdWJ0cmFjdCgkY2FyZC1ib3JkZXItcmFkaXVzLCAkY2FyZC1ib3JkZXItd2lkdGgpICFkZWZhdWx0O1xuJGNhcmQtY2FwLXBhZGRpbmcteTogICAgICAgICAgICAgICAgJGNhcmQtc3BhY2VyLXkgKiAuNSAhZGVmYXVsdDtcbiRjYXJkLWNhcC1wYWRkaW5nLXg6ICAgICAgICAgICAgICAgICRjYXJkLXNwYWNlci14ICFkZWZhdWx0O1xuJGNhcmQtY2FwLWJnOiAgICAgICAgICAgICAgICAgICAgICAgcmdiYSgkYmxhY2ssIC4wMykgIWRlZmF1bHQ7XG4kY2FyZC1jYXAtY29sb3I6ICAgICAgICAgICAgICAgICAgICBudWxsICFkZWZhdWx0O1xuJGNhcmQtaGVpZ2h0OiAgICAgICAgICAgICAgICAgICAgICAgbnVsbCAhZGVmYXVsdDtcbiRjYXJkLWNvbG9yOiAgICAgICAgICAgICAgICAgICAgICAgIG51bGwgIWRlZmF1bHQ7XG4kY2FyZC1iZzogICAgICAgICAgICAgICAgICAgICAgICAgICAkd2hpdGUgIWRlZmF1bHQ7XG4kY2FyZC1pbWctb3ZlcmxheS1wYWRkaW5nOiAgICAgICAgICAkc3BhY2VyICFkZWZhdWx0O1xuJGNhcmQtZ3JvdXAtbWFyZ2luOiAgICAgICAgICAgICAgICAgJGdyaWQtZ3V0dGVyLXdpZHRoICogLjUgIWRlZmF1bHQ7XG4vLyBzY3NzLWRvY3MtZW5kIGNhcmQtdmFyaWFibGVzXG5cbi8vIEFjY29yZGlvblxuXG4vLyBzY3NzLWRvY3Mtc3RhcnQgYWNjb3JkaW9uLXZhcmlhYmxlc1xuJGFjY29yZGlvbi1wYWRkaW5nLXk6ICAgICAgICAgICAgICAgICAgICAgMXJlbSAhZGVmYXVsdDtcbiRhY2NvcmRpb24tcGFkZGluZy14OiAgICAgICAgICAgICAgICAgICAgIDEuMjVyZW0gIWRlZmF1bHQ7XG4kYWNjb3JkaW9uLWNvbG9yOiAgICAgICAgICAgICAgICAgICAgICAgICAkYm9keS1jb2xvciAhZGVmYXVsdDtcbiRhY2NvcmRpb24tYmc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICRib2R5LWJnICFkZWZhdWx0O1xuJGFjY29yZGlvbi1ib3JkZXItd2lkdGg6ICAgICAgICAgICAgICAgICAgJGJvcmRlci13aWR0aCAhZGVmYXVsdDtcbiRhY2NvcmRpb24tYm9yZGVyLWNvbG9yOiAgICAgICAgICAgICAgICAgIHJnYmEoJGJsYWNrLCAuMTI1KSAhZGVmYXVsdDtcbiRhY2NvcmRpb24tYm9yZGVyLXJhZGl1czogICAgICAgICAgICAgICAgICRib3JkZXItcmFkaXVzICFkZWZhdWx0O1xuJGFjY29yZGlvbi1pbm5lci1ib3JkZXItcmFkaXVzOiAgICAgICAgICAgc3VidHJhY3QoJGFjY29yZGlvbi1ib3JkZXItcmFkaXVzLCAkYWNjb3JkaW9uLWJvcmRlci13aWR0aCkgIWRlZmF1bHQ7XG5cbiRhY2NvcmRpb24tYm9keS1wYWRkaW5nLXk6ICAgICAgICAgICAgICAgICRhY2NvcmRpb24tcGFkZGluZy15ICFkZWZhdWx0O1xuJGFjY29yZGlvbi1ib2R5LXBhZGRpbmcteDogICAgICAgICAgICAgICAgJGFjY29yZGlvbi1wYWRkaW5nLXggIWRlZmF1bHQ7XG5cbiRhY2NvcmRpb24tYnV0dG9uLXBhZGRpbmcteTogICAgICAgICAgICAgICRhY2NvcmRpb24tcGFkZGluZy15ICFkZWZhdWx0O1xuJGFjY29yZGlvbi1idXR0b24tcGFkZGluZy14OiAgICAgICAgICAgICAgJGFjY29yZGlvbi1wYWRkaW5nLXggIWRlZmF1bHQ7XG4kYWNjb3JkaW9uLWJ1dHRvbi1jb2xvcjogICAgICAgICAgICAgICAgICAkYWNjb3JkaW9uLWNvbG9yICFkZWZhdWx0O1xuJGFjY29yZGlvbi1idXR0b24tYmc6ICAgICAgICAgICAgICAgICAgICAgJGFjY29yZGlvbi1iZyAhZGVmYXVsdDtcbiRhY2NvcmRpb24tdHJhbnNpdGlvbjogICAgICAgICAgICAgICAgICAgICRidG4tdHJhbnNpdGlvbiwgYm9yZGVyLXJhZGl1cyAuMTVzIGVhc2UgIWRlZmF1bHQ7XG4kYWNjb3JkaW9uLWJ1dHRvbi1hY3RpdmUtYmc6ICAgICAgICAgICAgICB0aW50LWNvbG9yKCRjb21wb25lbnQtYWN0aXZlLWJnLCA5MCUpICFkZWZhdWx0O1xuJGFjY29yZGlvbi1idXR0b24tYWN0aXZlLWNvbG9yOiAgICAgICAgICAgc2hhZGUtY29sb3IoJHByaW1hcnksIDEwJSkgIWRlZmF1bHQ7XG5cbiRhY2NvcmRpb24tYnV0dG9uLWZvY3VzLWJvcmRlci1jb2xvcjogICAgICRpbnB1dC1mb2N1cy1ib3JkZXItY29sb3IgIWRlZmF1bHQ7XG4kYWNjb3JkaW9uLWJ1dHRvbi1mb2N1cy1ib3gtc2hhZG93OiAgICAgICAkYnRuLWZvY3VzLWJveC1zaGFkb3cgIWRlZmF1bHQ7XG5cbiRhY2NvcmRpb24taWNvbi13aWR0aDogICAgICAgICAgICAgICAgICAgIDEuMjVyZW0gIWRlZmF1bHQ7XG4kYWNjb3JkaW9uLWljb24tY29sb3I6ICAgICAgICAgICAgICAgICAgICAkYWNjb3JkaW9uLWJ1dHRvbi1jb2xvciAhZGVmYXVsdDtcbiRhY2NvcmRpb24taWNvbi1hY3RpdmUtY29sb3I6ICAgICAgICAgICAgICRhY2NvcmRpb24tYnV0dG9uLWFjdGl2ZS1jb2xvciAhZGVmYXVsdDtcbiRhY2NvcmRpb24taWNvbi10cmFuc2l0aW9uOiAgICAgICAgICAgICAgIHRyYW5zZm9ybSAuMnMgZWFzZS1pbi1vdXQgIWRlZmF1bHQ7XG4kYWNjb3JkaW9uLWljb24tdHJhbnNmb3JtOiAgICAgICAgICAgICAgICByb3RhdGUoLTE4MGRlZykgIWRlZmF1bHQ7XG5cbiRhY2NvcmRpb24tYnV0dG9uLWljb246ICAgICAgICAgdXJsKFwiZGF0YTppbWFnZS9zdmcreG1sLDxzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB2aWV3Qm94PScwIDAgMTYgMTYnIGZpbGw9JyN7JGFjY29yZGlvbi1pY29uLWNvbG9yfSc+PHBhdGggZmlsbC1ydWxlPSdldmVub2RkJyBkPSdNMS42NDYgNC42NDZhLjUuNSAwIDAgMSAuNzA4IDBMOCAxMC4yOTNsNS42NDYtNS42NDdhLjUuNSAwIDAgMSAuNzA4LjcwOGwtNiA2YS41LjUgMCAwIDEtLjcwOCAwbC02LTZhLjUuNSAwIDAgMSAwLS43MDh6Jy8+PC9zdmc+XCIpICFkZWZhdWx0O1xuJGFjY29yZGlvbi1idXR0b24tYWN0aXZlLWljb246ICB1cmwoXCJkYXRhOmltYWdlL3N2Zyt4bWwsPHN2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHZpZXdCb3g9JzAgMCAxNiAxNicgZmlsbD0nI3skYWNjb3JkaW9uLWljb24tYWN0aXZlLWNvbG9yfSc+PHBhdGggZmlsbC1ydWxlPSdldmVub2RkJyBkPSdNMS42NDYgNC42NDZhLjUuNSAwIDAgMSAuNzA4IDBMOCAxMC4yOTNsNS42NDYtNS42NDdhLjUuNSAwIDAgMSAuNzA4LjcwOGwtNiA2YS41LjUgMCAwIDEtLjcwOCAwbC02LTZhLjUuNSAwIDAgMSAwLS43MDh6Jy8+PC9zdmc+XCIpICFkZWZhdWx0O1xuLy8gc2Nzcy1kb2NzLWVuZCBhY2NvcmRpb24tdmFyaWFibGVzXG5cbi8vIFRvb2x0aXBzXG5cbi8vIHNjc3MtZG9jcy1zdGFydCB0b29sdGlwLXZhcmlhYmxlc1xuJHRvb2x0aXAtZm9udC1zaXplOiAgICAgICAgICAgICAgICAgJGZvbnQtc2l6ZS1zbSAhZGVmYXVsdDtcbiR0b29sdGlwLW1heC13aWR0aDogICAgICAgICAgICAgICAgIDIwMHB4ICFkZWZhdWx0O1xuJHRvb2x0aXAtY29sb3I6ICAgICAgICAgICAgICAgICAgICAgJHdoaXRlICFkZWZhdWx0O1xuJHRvb2x0aXAtYmc6ICAgICAgICAgICAgICAgICAgICAgICAgJGJsYWNrICFkZWZhdWx0O1xuJHRvb2x0aXAtYm9yZGVyLXJhZGl1czogICAgICAgICAgICAgJGJvcmRlci1yYWRpdXMgIWRlZmF1bHQ7XG4kdG9vbHRpcC1vcGFjaXR5OiAgICAgICAgICAgICAgICAgICAuOSAhZGVmYXVsdDtcbiR0b29sdGlwLXBhZGRpbmcteTogICAgICAgICAgICAgICAgICRzcGFjZXIgKiAuMjUgIWRlZmF1bHQ7XG4kdG9vbHRpcC1wYWRkaW5nLXg6ICAgICAgICAgICAgICAgICAkc3BhY2VyICogLjUgIWRlZmF1bHQ7XG4kdG9vbHRpcC1tYXJnaW46ICAgICAgICAgICAgICAgICAgICAwICFkZWZhdWx0O1xuXG4kdG9vbHRpcC1hcnJvdy13aWR0aDogICAgICAgICAgICAgICAuOHJlbSAhZGVmYXVsdDtcbiR0b29sdGlwLWFycm93LWhlaWdodDogICAgICAgICAgICAgIC40cmVtICFkZWZhdWx0O1xuJHRvb2x0aXAtYXJyb3ctY29sb3I6ICAgICAgICAgICAgICAgJHRvb2x0aXAtYmcgIWRlZmF1bHQ7XG4vLyBzY3NzLWRvY3MtZW5kIHRvb2x0aXAtdmFyaWFibGVzXG5cbi8vIEZvcm0gdG9vbHRpcHMgbXVzdCBjb21lIGFmdGVyIHJlZ3VsYXIgdG9vbHRpcHNcbi8vIHNjc3MtZG9jcy1zdGFydCB0b29sdGlwLWZlZWRiYWNrLXZhcmlhYmxlc1xuJGZvcm0tZmVlZGJhY2stdG9vbHRpcC1wYWRkaW5nLXk6ICAgICAkdG9vbHRpcC1wYWRkaW5nLXkgIWRlZmF1bHQ7XG4kZm9ybS1mZWVkYmFjay10b29sdGlwLXBhZGRpbmcteDogICAgICR0b29sdGlwLXBhZGRpbmcteCAhZGVmYXVsdDtcbiRmb3JtLWZlZWRiYWNrLXRvb2x0aXAtZm9udC1zaXplOiAgICAgJHRvb2x0aXAtZm9udC1zaXplICFkZWZhdWx0O1xuJGZvcm0tZmVlZGJhY2stdG9vbHRpcC1saW5lLWhlaWdodDogICBudWxsICFkZWZhdWx0O1xuJGZvcm0tZmVlZGJhY2stdG9vbHRpcC1vcGFjaXR5OiAgICAgICAkdG9vbHRpcC1vcGFjaXR5ICFkZWZhdWx0O1xuJGZvcm0tZmVlZGJhY2stdG9vbHRpcC1ib3JkZXItcmFkaXVzOiAkdG9vbHRpcC1ib3JkZXItcmFkaXVzICFkZWZhdWx0O1xuLy8gc2Nzcy1kb2NzLWVuZCB0b29sdGlwLWZlZWRiYWNrLXZhcmlhYmxlc1xuXG5cbi8vIFBvcG92ZXJzXG5cbi8vIHNjc3MtZG9jcy1zdGFydCBwb3BvdmVyLXZhcmlhYmxlc1xuJHBvcG92ZXItZm9udC1zaXplOiAgICAgICAgICAgICAgICAgJGZvbnQtc2l6ZS1zbSAhZGVmYXVsdDtcbiRwb3BvdmVyLWJnOiAgICAgICAgICAgICAgICAgICAgICAgICR3aGl0ZSAhZGVmYXVsdDtcbiRwb3BvdmVyLW1heC13aWR0aDogICAgICAgICAgICAgICAgIDI3NnB4ICFkZWZhdWx0O1xuJHBvcG92ZXItYm9yZGVyLXdpZHRoOiAgICAgICAgICAgICAgJGJvcmRlci13aWR0aCAhZGVmYXVsdDtcbiRwb3BvdmVyLWJvcmRlci1jb2xvcjogICAgICAgICAgICAgIHJnYmEoJGJsYWNrLCAuMikgIWRlZmF1bHQ7XG4kcG9wb3Zlci1ib3JkZXItcmFkaXVzOiAgICAgICAgICAgICAkYm9yZGVyLXJhZGl1cy1sZyAhZGVmYXVsdDtcbiRwb3BvdmVyLWlubmVyLWJvcmRlci1yYWRpdXM6ICAgICAgIHN1YnRyYWN0KCRwb3BvdmVyLWJvcmRlci1yYWRpdXMsICRwb3BvdmVyLWJvcmRlci13aWR0aCkgIWRlZmF1bHQ7XG4kcG9wb3Zlci1ib3gtc2hhZG93OiAgICAgICAgICAgICAgICAkYm94LXNoYWRvdyAhZGVmYXVsdDtcblxuJHBvcG92ZXItaGVhZGVyLWJnOiAgICAgICAgICAgICAgICAgc2hhZGUtY29sb3IoJHBvcG92ZXItYmcsIDYlKSAhZGVmYXVsdDtcbiRwb3BvdmVyLWhlYWRlci1jb2xvcjogICAgICAgICAgICAgICRoZWFkaW5ncy1jb2xvciAhZGVmYXVsdDtcbiRwb3BvdmVyLWhlYWRlci1wYWRkaW5nLXk6ICAgICAgICAgIC41cmVtICFkZWZhdWx0O1xuJHBvcG92ZXItaGVhZGVyLXBhZGRpbmcteDogICAgICAgICAgJHNwYWNlciAhZGVmYXVsdDtcblxuJHBvcG92ZXItYm9keS1jb2xvcjogICAgICAgICAgICAgICAgJGJvZHktY29sb3IgIWRlZmF1bHQ7XG4kcG9wb3Zlci1ib2R5LXBhZGRpbmcteTogICAgICAgICAgICAkc3BhY2VyICFkZWZhdWx0O1xuJHBvcG92ZXItYm9keS1wYWRkaW5nLXg6ICAgICAgICAgICAgJHNwYWNlciAhZGVmYXVsdDtcblxuJHBvcG92ZXItYXJyb3ctd2lkdGg6ICAgICAgICAgICAgICAgMXJlbSAhZGVmYXVsdDtcbiRwb3BvdmVyLWFycm93LWhlaWdodDogICAgICAgICAgICAgIC41cmVtICFkZWZhdWx0O1xuJHBvcG92ZXItYXJyb3ctY29sb3I6ICAgICAgICAgICAgICAgJHBvcG92ZXItYmcgIWRlZmF1bHQ7XG5cbiRwb3BvdmVyLWFycm93LW91dGVyLWNvbG9yOiAgICAgICAgIGZhZGUtaW4oJHBvcG92ZXItYm9yZGVyLWNvbG9yLCAuMDUpICFkZWZhdWx0O1xuLy8gc2Nzcy1kb2NzLWVuZCBwb3BvdmVyLXZhcmlhYmxlc1xuXG5cbi8vIFRvYXN0c1xuXG4vLyBzY3NzLWRvY3Mtc3RhcnQgdG9hc3QtdmFyaWFibGVzXG4kdG9hc3QtbWF4LXdpZHRoOiAgICAgICAgICAgICAgICAgICAzNTBweCAhZGVmYXVsdDtcbiR0b2FzdC1wYWRkaW5nLXg6ICAgICAgICAgICAgICAgICAgIC43NXJlbSAhZGVmYXVsdDtcbiR0b2FzdC1wYWRkaW5nLXk6ICAgICAgICAgICAgICAgICAgIC41cmVtICFkZWZhdWx0O1xuJHRvYXN0LWZvbnQtc2l6ZTogICAgICAgICAgICAgICAgICAgLjg3NXJlbSAhZGVmYXVsdDtcbiR0b2FzdC1jb2xvcjogICAgICAgICAgICAgICAgICAgICAgIG51bGwgIWRlZmF1bHQ7XG4kdG9hc3QtYmFja2dyb3VuZC1jb2xvcjogICAgICAgICAgICByZ2JhKCR3aGl0ZSwgLjg1KSAhZGVmYXVsdDtcbiR0b2FzdC1ib3JkZXItd2lkdGg6ICAgICAgICAgICAgICAgIDFweCAhZGVmYXVsdDtcbiR0b2FzdC1ib3JkZXItY29sb3I6ICAgICAgICAgICAgICAgIHJnYmEoJGJsYWNrLCAuMSkgIWRlZmF1bHQ7XG4kdG9hc3QtYm9yZGVyLXJhZGl1czogICAgICAgICAgICAgICAkYm9yZGVyLXJhZGl1cyAhZGVmYXVsdDtcbiR0b2FzdC1ib3gtc2hhZG93OiAgICAgICAgICAgICAgICAgICRib3gtc2hhZG93ICFkZWZhdWx0O1xuJHRvYXN0LXNwYWNpbmc6ICAgICAgICAgICAgICAgICAgICAgJGNvbnRhaW5lci1wYWRkaW5nLXggIWRlZmF1bHQ7XG5cbiR0b2FzdC1oZWFkZXItY29sb3I6ICAgICAgICAgICAgICAgICRncmF5LTYwMCAhZGVmYXVsdDtcbiR0b2FzdC1oZWFkZXItYmFja2dyb3VuZC1jb2xvcjogICAgIHJnYmEoJHdoaXRlLCAuODUpICFkZWZhdWx0O1xuJHRvYXN0LWhlYWRlci1ib3JkZXItY29sb3I6ICAgICAgICAgcmdiYSgkYmxhY2ssIC4wNSkgIWRlZmF1bHQ7XG4vLyBzY3NzLWRvY3MtZW5kIHRvYXN0LXZhcmlhYmxlc1xuXG5cbi8vIEJhZGdlc1xuXG4vLyBzY3NzLWRvY3Mtc3RhcnQgYmFkZ2UtdmFyaWFibGVzXG4kYmFkZ2UtZm9udC1zaXplOiAgICAgICAgICAgICAgICAgICAuNzVlbSAhZGVmYXVsdDtcbiRiYWRnZS1mb250LXdlaWdodDogICAgICAgICAgICAgICAgICRmb250LXdlaWdodC1ib2xkICFkZWZhdWx0O1xuJGJhZGdlLWNvbG9yOiAgICAgICAgICAgICAgICAgICAgICAgJHdoaXRlICFkZWZhdWx0O1xuJGJhZGdlLXBhZGRpbmcteTogICAgICAgICAgICAgICAgICAgLjM1ZW0gIWRlZmF1bHQ7XG4kYmFkZ2UtcGFkZGluZy14OiAgICAgICAgICAgICAgICAgICAuNjVlbSAhZGVmYXVsdDtcbiRiYWRnZS1ib3JkZXItcmFkaXVzOiAgICAgICAgICAgICAgICRib3JkZXItcmFkaXVzICFkZWZhdWx0O1xuLy8gc2Nzcy1kb2NzLWVuZCBiYWRnZS12YXJpYWJsZXNcblxuXG4vLyBNb2RhbHNcblxuLy8gc2Nzcy1kb2NzLXN0YXJ0IG1vZGFsLXZhcmlhYmxlc1xuJG1vZGFsLWlubmVyLXBhZGRpbmc6ICAgICAgICAgICAgICAgJHNwYWNlciAhZGVmYXVsdDtcblxuJG1vZGFsLWZvb3Rlci1tYXJnaW4tYmV0d2VlbjogICAgICAgLjVyZW0gIWRlZmF1bHQ7XG5cbiRtb2RhbC1kaWFsb2ctbWFyZ2luOiAgICAgICAgICAgICAgIC41cmVtICFkZWZhdWx0O1xuJG1vZGFsLWRpYWxvZy1tYXJnaW4teS1zbS11cDogICAgICAgMS43NXJlbSAhZGVmYXVsdDtcblxuJG1vZGFsLXRpdGxlLWxpbmUtaGVpZ2h0OiAgICAgICAgICAgJGxpbmUtaGVpZ2h0LWJhc2UgIWRlZmF1bHQ7XG5cbiRtb2RhbC1jb250ZW50LWNvbG9yOiAgICAgICAgICAgICAgIG51bGwgIWRlZmF1bHQ7XG4kbW9kYWwtY29udGVudC1iZzogICAgICAgICAgICAgICAgICAkd2hpdGUgIWRlZmF1bHQ7XG4kbW9kYWwtY29udGVudC1ib3JkZXItY29sb3I6ICAgICAgICByZ2JhKCRibGFjaywgLjIpICFkZWZhdWx0O1xuJG1vZGFsLWNvbnRlbnQtYm9yZGVyLXdpZHRoOiAgICAgICAgJGJvcmRlci13aWR0aCAhZGVmYXVsdDtcbiRtb2RhbC1jb250ZW50LWJvcmRlci1yYWRpdXM6ICAgICAgICRib3JkZXItcmFkaXVzLWxnICFkZWZhdWx0O1xuJG1vZGFsLWNvbnRlbnQtaW5uZXItYm9yZGVyLXJhZGl1czogc3VidHJhY3QoJG1vZGFsLWNvbnRlbnQtYm9yZGVyLXJhZGl1cywgJG1vZGFsLWNvbnRlbnQtYm9yZGVyLXdpZHRoKSAhZGVmYXVsdDtcbiRtb2RhbC1jb250ZW50LWJveC1zaGFkb3cteHM6ICAgICAgICRib3gtc2hhZG93LXNtICFkZWZhdWx0O1xuJG1vZGFsLWNvbnRlbnQtYm94LXNoYWRvdy1zbS11cDogICAgJGJveC1zaGFkb3cgIWRlZmF1bHQ7XG5cbiRtb2RhbC1iYWNrZHJvcC1iZzogICAgICAgICAgICAgICAgICRibGFjayAhZGVmYXVsdDtcbiRtb2RhbC1iYWNrZHJvcC1vcGFjaXR5OiAgICAgICAgICAgIC41ICFkZWZhdWx0O1xuJG1vZGFsLWhlYWRlci1ib3JkZXItY29sb3I6ICAgICAgICAgJGJvcmRlci1jb2xvciAhZGVmYXVsdDtcbiRtb2RhbC1mb290ZXItYm9yZGVyLWNvbG9yOiAgICAgICAgICRtb2RhbC1oZWFkZXItYm9yZGVyLWNvbG9yICFkZWZhdWx0O1xuJG1vZGFsLWhlYWRlci1ib3JkZXItd2lkdGg6ICAgICAgICAgJG1vZGFsLWNvbnRlbnQtYm9yZGVyLXdpZHRoICFkZWZhdWx0O1xuJG1vZGFsLWZvb3Rlci1ib3JkZXItd2lkdGg6ICAgICAgICAgJG1vZGFsLWhlYWRlci1ib3JkZXItd2lkdGggIWRlZmF1bHQ7XG4kbW9kYWwtaGVhZGVyLXBhZGRpbmcteTogICAgICAgICAgICAkbW9kYWwtaW5uZXItcGFkZGluZyAhZGVmYXVsdDtcbiRtb2RhbC1oZWFkZXItcGFkZGluZy14OiAgICAgICAgICAgICRtb2RhbC1pbm5lci1wYWRkaW5nICFkZWZhdWx0O1xuJG1vZGFsLWhlYWRlci1wYWRkaW5nOiAgICAgICAgICAgICAgJG1vZGFsLWhlYWRlci1wYWRkaW5nLXkgJG1vZGFsLWhlYWRlci1wYWRkaW5nLXggIWRlZmF1bHQ7IC8vIEtlZXAgdGhpcyBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHlcblxuJG1vZGFsLXNtOiAgICAgICAgICAgICAgICAgICAgICAgICAgMzAwcHggIWRlZmF1bHQ7XG4kbW9kYWwtbWQ6ICAgICAgICAgICAgICAgICAgICAgICAgICA1MDBweCAhZGVmYXVsdDtcbiRtb2RhbC1sZzogICAgICAgICAgICAgICAgICAgICAgICAgIDgwMHB4ICFkZWZhdWx0O1xuJG1vZGFsLXhsOiAgICAgICAgICAgICAgICAgICAgICAgICAgMTE0MHB4ICFkZWZhdWx0O1xuXG4kbW9kYWwtZmFkZS10cmFuc2Zvcm06ICAgICAgICAgICAgICB0cmFuc2xhdGUoMCwgLTUwcHgpICFkZWZhdWx0O1xuJG1vZGFsLXNob3ctdHJhbnNmb3JtOiAgICAgICAgICAgICAgbm9uZSAhZGVmYXVsdDtcbiRtb2RhbC10cmFuc2l0aW9uOiAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybSAuM3MgZWFzZS1vdXQgIWRlZmF1bHQ7XG4kbW9kYWwtc2NhbGUtdHJhbnNmb3JtOiAgICAgICAgICAgICBzY2FsZSgxLjAyKSAhZGVmYXVsdDtcbi8vIHNjc3MtZG9jcy1lbmQgbW9kYWwtdmFyaWFibGVzXG5cblxuLy8gQWxlcnRzXG4vL1xuLy8gRGVmaW5lIGFsZXJ0IGNvbG9ycywgYm9yZGVyIHJhZGl1cywgYW5kIHBhZGRpbmcuXG5cbi8vIHNjc3MtZG9jcy1zdGFydCBhbGVydC12YXJpYWJsZXNcbiRhbGVydC1wYWRkaW5nLXk6ICAgICAgICAgICAgICAgJHNwYWNlciAhZGVmYXVsdDtcbiRhbGVydC1wYWRkaW5nLXg6ICAgICAgICAgICAgICAgJHNwYWNlciAhZGVmYXVsdDtcbiRhbGVydC1tYXJnaW4tYm90dG9tOiAgICAgICAgICAgMXJlbSAhZGVmYXVsdDtcbiRhbGVydC1ib3JkZXItcmFkaXVzOiAgICAgICAgICAgJGJvcmRlci1yYWRpdXMgIWRlZmF1bHQ7XG4kYWxlcnQtbGluay1mb250LXdlaWdodDogICAgICAgICRmb250LXdlaWdodC1ib2xkICFkZWZhdWx0O1xuJGFsZXJ0LWJvcmRlci13aWR0aDogICAgICAgICAgICAkYm9yZGVyLXdpZHRoICFkZWZhdWx0O1xuJGFsZXJ0LWJnLXNjYWxlOiAgICAgICAgICAgICAgICAtODAlICFkZWZhdWx0O1xuJGFsZXJ0LWJvcmRlci1zY2FsZTogICAgICAgICAgICAtNzAlICFkZWZhdWx0O1xuJGFsZXJ0LWNvbG9yLXNjYWxlOiAgICAgICAgICAgICA0MCUgIWRlZmF1bHQ7XG4kYWxlcnQtZGlzbWlzc2libGUtcGFkZGluZy1yOiAgICRhbGVydC1wYWRkaW5nLXggKiAzICFkZWZhdWx0OyAvLyAzeCBjb3ZlcnMgd2lkdGggb2YgeCBwbHVzIGRlZmF1bHQgcGFkZGluZyBvbiBlaXRoZXIgc2lkZVxuLy8gc2Nzcy1kb2NzLWVuZCBhbGVydC12YXJpYWJsZXNcblxuXG4vLyBQcm9ncmVzcyBiYXJzXG5cbi8vIHNjc3MtZG9jcy1zdGFydCBwcm9ncmVzcy12YXJpYWJsZXNcbiRwcm9ncmVzcy1oZWlnaHQ6ICAgICAgICAgICAgICAgICAgIDFyZW0gIWRlZmF1bHQ7XG4kcHJvZ3Jlc3MtZm9udC1zaXplOiAgICAgICAgICAgICAgICAkZm9udC1zaXplLWJhc2UgKiAuNzUgIWRlZmF1bHQ7XG4kcHJvZ3Jlc3MtYmc6ICAgICAgICAgICAgICAgICAgICAgICAkZ3JheS0yMDAgIWRlZmF1bHQ7XG4kcHJvZ3Jlc3MtYm9yZGVyLXJhZGl1czogICAgICAgICAgICAkYm9yZGVyLXJhZGl1cyAhZGVmYXVsdDtcbiRwcm9ncmVzcy1ib3gtc2hhZG93OiAgICAgICAgICAgICAgICRib3gtc2hhZG93LWluc2V0ICFkZWZhdWx0O1xuJHByb2dyZXNzLWJhci1jb2xvcjogICAgICAgICAgICAgICAgJHdoaXRlICFkZWZhdWx0O1xuJHByb2dyZXNzLWJhci1iZzogICAgICAgICAgICAgICAgICAgJHByaW1hcnkgIWRlZmF1bHQ7XG4kcHJvZ3Jlc3MtYmFyLWFuaW1hdGlvbi10aW1pbmc6ICAgICAxcyBsaW5lYXIgaW5maW5pdGUgIWRlZmF1bHQ7XG4kcHJvZ3Jlc3MtYmFyLXRyYW5zaXRpb246ICAgICAgICAgICB3aWR0aCAuNnMgZWFzZSAhZGVmYXVsdDtcbi8vIHNjc3MtZG9jcy1lbmQgcHJvZ3Jlc3MtdmFyaWFibGVzXG5cblxuLy8gTGlzdCBncm91cFxuXG4vLyBzY3NzLWRvY3Mtc3RhcnQgbGlzdC1ncm91cC12YXJpYWJsZXNcbiRsaXN0LWdyb3VwLWNvbG9yOiAgICAgICAgICAgICAgICAgICRncmF5LTkwMCAhZGVmYXVsdDtcbiRsaXN0LWdyb3VwLWJnOiAgICAgICAgICAgICAgICAgICAgICR3aGl0ZSAhZGVmYXVsdDtcbiRsaXN0LWdyb3VwLWJvcmRlci1jb2xvcjogICAgICAgICAgIHJnYmEoJGJsYWNrLCAuMTI1KSAhZGVmYXVsdDtcbiRsaXN0LWdyb3VwLWJvcmRlci13aWR0aDogICAgICAgICAgICRib3JkZXItd2lkdGggIWRlZmF1bHQ7XG4kbGlzdC1ncm91cC1ib3JkZXItcmFkaXVzOiAgICAgICAgICAkYm9yZGVyLXJhZGl1cyAhZGVmYXVsdDtcblxuJGxpc3QtZ3JvdXAtaXRlbS1wYWRkaW5nLXk6ICAgICAgICAgJHNwYWNlciAqIC41ICFkZWZhdWx0O1xuJGxpc3QtZ3JvdXAtaXRlbS1wYWRkaW5nLXg6ICAgICAgICAgJHNwYWNlciAhZGVmYXVsdDtcbiRsaXN0LWdyb3VwLWl0ZW0tYmctc2NhbGU6ICAgICAgICAgIC04MCUgIWRlZmF1bHQ7XG4kbGlzdC1ncm91cC1pdGVtLWNvbG9yLXNjYWxlOiAgICAgICA0MCUgIWRlZmF1bHQ7XG5cbiRsaXN0LWdyb3VwLWhvdmVyLWJnOiAgICAgICAgICAgICAgICRncmF5LTEwMCAhZGVmYXVsdDtcbiRsaXN0LWdyb3VwLWFjdGl2ZS1jb2xvcjogICAgICAgICAgICRjb21wb25lbnQtYWN0aXZlLWNvbG9yICFkZWZhdWx0O1xuJGxpc3QtZ3JvdXAtYWN0aXZlLWJnOiAgICAgICAgICAgICAgJGNvbXBvbmVudC1hY3RpdmUtYmcgIWRlZmF1bHQ7XG4kbGlzdC1ncm91cC1hY3RpdmUtYm9yZGVyLWNvbG9yOiAgICAkbGlzdC1ncm91cC1hY3RpdmUtYmcgIWRlZmF1bHQ7XG5cbiRsaXN0LWdyb3VwLWRpc2FibGVkLWNvbG9yOiAgICAgICAgICRncmF5LTYwMCAhZGVmYXVsdDtcbiRsaXN0LWdyb3VwLWRpc2FibGVkLWJnOiAgICAgICAgICAgICRsaXN0LWdyb3VwLWJnICFkZWZhdWx0O1xuXG4kbGlzdC1ncm91cC1hY3Rpb24tY29sb3I6ICAgICAgICAgICAkZ3JheS03MDAgIWRlZmF1bHQ7XG4kbGlzdC1ncm91cC1hY3Rpb24taG92ZXItY29sb3I6ICAgICAkbGlzdC1ncm91cC1hY3Rpb24tY29sb3IgIWRlZmF1bHQ7XG5cbiRsaXN0LWdyb3VwLWFjdGlvbi1hY3RpdmUtY29sb3I6ICAgICRib2R5LWNvbG9yICFkZWZhdWx0O1xuJGxpc3QtZ3JvdXAtYWN0aW9uLWFjdGl2ZS1iZzogICAgICAgJGdyYXktMjAwICFkZWZhdWx0O1xuLy8gc2Nzcy1kb2NzLWVuZCBsaXN0LWdyb3VwLXZhcmlhYmxlc1xuXG5cbi8vIEltYWdlIHRodW1ibmFpbHNcblxuLy8gc2Nzcy1kb2NzLXN0YXJ0IHRodW1ibmFpbC12YXJpYWJsZXNcbiR0aHVtYm5haWwtcGFkZGluZzogICAgICAgICAgICAgICAgIC4yNXJlbSAhZGVmYXVsdDtcbiR0aHVtYm5haWwtYmc6ICAgICAgICAgICAgICAgICAgICAgICRib2R5LWJnICFkZWZhdWx0O1xuJHRodW1ibmFpbC1ib3JkZXItd2lkdGg6ICAgICAgICAgICAgJGJvcmRlci13aWR0aCAhZGVmYXVsdDtcbiR0aHVtYm5haWwtYm9yZGVyLWNvbG9yOiAgICAgICAgICAgICRncmF5LTMwMCAhZGVmYXVsdDtcbiR0aHVtYm5haWwtYm9yZGVyLXJhZGl1czogICAgICAgICAgICRib3JkZXItcmFkaXVzICFkZWZhdWx0O1xuJHRodW1ibmFpbC1ib3gtc2hhZG93OiAgICAgICAgICAgICAgJGJveC1zaGFkb3ctc20gIWRlZmF1bHQ7XG4vLyBzY3NzLWRvY3MtZW5kIHRodW1ibmFpbC12YXJpYWJsZXNcblxuXG4vLyBGaWd1cmVzXG5cbi8vIHNjc3MtZG9jcy1zdGFydCBmaWd1cmUtdmFyaWFibGVzXG4kZmlndXJlLWNhcHRpb24tZm9udC1zaXplOiAgICAgICAgICAkc21hbGwtZm9udC1zaXplICFkZWZhdWx0O1xuJGZpZ3VyZS1jYXB0aW9uLWNvbG9yOiAgICAgICAgICAgICAgJGdyYXktNjAwICFkZWZhdWx0O1xuLy8gc2Nzcy1kb2NzLWVuZCBmaWd1cmUtdmFyaWFibGVzXG5cblxuLy8gQnJlYWRjcnVtYnNcblxuLy8gc2Nzcy1kb2NzLXN0YXJ0IGJyZWFkY3J1bWItdmFyaWFibGVzXG4kYnJlYWRjcnVtYi1mb250LXNpemU6ICAgICAgICAgICAgICBudWxsICFkZWZhdWx0O1xuJGJyZWFkY3J1bWItcGFkZGluZy15OiAgICAgICAgICAgICAgMCAhZGVmYXVsdDtcbiRicmVhZGNydW1iLXBhZGRpbmcteDogICAgICAgICAgICAgIDAgIWRlZmF1bHQ7XG4kYnJlYWRjcnVtYi1pdGVtLXBhZGRpbmcteDogICAgICAgICAuNXJlbSAhZGVmYXVsdDtcbiRicmVhZGNydW1iLW1hcmdpbi1ib3R0b206ICAgICAgICAgIDFyZW0gIWRlZmF1bHQ7XG4kYnJlYWRjcnVtYi1iZzogICAgICAgICAgICAgICAgICAgICBudWxsICFkZWZhdWx0O1xuJGJyZWFkY3J1bWItZGl2aWRlci1jb2xvcjogICAgICAgICAgJGdyYXktNjAwICFkZWZhdWx0O1xuJGJyZWFkY3J1bWItYWN0aXZlLWNvbG9yOiAgICAgICAgICAgJGdyYXktNjAwICFkZWZhdWx0O1xuJGJyZWFkY3J1bWItZGl2aWRlcjogICAgICAgICAgICAgICAgcXVvdGUoXCIvXCIpICFkZWZhdWx0O1xuJGJyZWFkY3J1bWItZGl2aWRlci1mbGlwcGVkOiAgICAgICAgJGJyZWFkY3J1bWItZGl2aWRlciAhZGVmYXVsdDtcbiRicmVhZGNydW1iLWJvcmRlci1yYWRpdXM6ICAgICAgICAgIG51bGwgIWRlZmF1bHQ7XG4vLyBzY3NzLWRvY3MtZW5kIGJyZWFkY3J1bWItdmFyaWFibGVzXG5cbi8vIENhcm91c2VsXG5cbi8vIHNjc3MtZG9jcy1zdGFydCBjYXJvdXNlbC12YXJpYWJsZXNcbiRjYXJvdXNlbC1jb250cm9sLWNvbG9yOiAgICAgICAgICAgICAkd2hpdGUgIWRlZmF1bHQ7XG4kY2Fyb3VzZWwtY29udHJvbC13aWR0aDogICAgICAgICAgICAgMTUlICFkZWZhdWx0O1xuJGNhcm91c2VsLWNvbnRyb2wtb3BhY2l0eTogICAgICAgICAgIC41ICFkZWZhdWx0O1xuJGNhcm91c2VsLWNvbnRyb2wtaG92ZXItb3BhY2l0eTogICAgIC45ICFkZWZhdWx0O1xuJGNhcm91c2VsLWNvbnRyb2wtdHJhbnNpdGlvbjogICAgICAgIG9wYWNpdHkgLjE1cyBlYXNlICFkZWZhdWx0O1xuXG4kY2Fyb3VzZWwtaW5kaWNhdG9yLXdpZHRoOiAgICAgICAgICAgMzBweCAhZGVmYXVsdDtcbiRjYXJvdXNlbC1pbmRpY2F0b3ItaGVpZ2h0OiAgICAgICAgICAzcHggIWRlZmF1bHQ7XG4kY2Fyb3VzZWwtaW5kaWNhdG9yLWhpdC1hcmVhLWhlaWdodDogMTBweCAhZGVmYXVsdDtcbiRjYXJvdXNlbC1pbmRpY2F0b3Itc3BhY2VyOiAgICAgICAgICAzcHggIWRlZmF1bHQ7XG4kY2Fyb3VzZWwtaW5kaWNhdG9yLW9wYWNpdHk6ICAgICAgICAgLjUgIWRlZmF1bHQ7XG4kY2Fyb3VzZWwtaW5kaWNhdG9yLWFjdGl2ZS1iZzogICAgICAgJHdoaXRlICFkZWZhdWx0O1xuJGNhcm91c2VsLWluZGljYXRvci1hY3RpdmUtb3BhY2l0eTogIDEgIWRlZmF1bHQ7XG4kY2Fyb3VzZWwtaW5kaWNhdG9yLXRyYW5zaXRpb246ICAgICAgb3BhY2l0eSAuNnMgZWFzZSAhZGVmYXVsdDtcblxuJGNhcm91c2VsLWNhcHRpb24td2lkdGg6ICAgICAgICAgICAgIDcwJSAhZGVmYXVsdDtcbiRjYXJvdXNlbC1jYXB0aW9uLWNvbG9yOiAgICAgICAgICAgICAkd2hpdGUgIWRlZmF1bHQ7XG4kY2Fyb3VzZWwtY2FwdGlvbi1wYWRkaW5nLXk6ICAgICAgICAgMS4yNXJlbSAhZGVmYXVsdDtcbiRjYXJvdXNlbC1jYXB0aW9uLXNwYWNlcjogICAgICAgICAgICAxLjI1cmVtICFkZWZhdWx0O1xuXG4kY2Fyb3VzZWwtY29udHJvbC1pY29uLXdpZHRoOiAgICAgICAgMnJlbSAhZGVmYXVsdDtcblxuJGNhcm91c2VsLWNvbnRyb2wtcHJldi1pY29uLWJnOiAgICAgIHVybChcImRhdGE6aW1hZ2Uvc3ZnK3htbCw8c3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgdmlld0JveD0nMCAwIDE2IDE2JyBmaWxsPScjeyRjYXJvdXNlbC1jb250cm9sLWNvbG9yfSc+PHBhdGggZD0nTTExLjM1NCAxLjY0NmEuNS41IDAgMCAxIDAgLjcwOEw1LjcwNyA4bDUuNjQ3IDUuNjQ2YS41LjUgMCAwIDEtLjcwOC43MDhsLTYtNmEuNS41IDAgMCAxIDAtLjcwOGw2LTZhLjUuNSAwIDAgMSAuNzA4IDB6Jy8+PC9zdmc+XCIpICFkZWZhdWx0O1xuJGNhcm91c2VsLWNvbnRyb2wtbmV4dC1pY29uLWJnOiAgICAgIHVybChcImRhdGE6aW1hZ2Uvc3ZnK3htbCw8c3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgdmlld0JveD0nMCAwIDE2IDE2JyBmaWxsPScjeyRjYXJvdXNlbC1jb250cm9sLWNvbG9yfSc+PHBhdGggZD0nTTQuNjQ2IDEuNjQ2YS41LjUgMCAwIDEgLjcwOCAwbDYgNmEuNS41IDAgMCAxIDAgLjcwOGwtNiA2YS41LjUgMCAwIDEtLjcwOC0uNzA4TDEwLjI5MyA4IDQuNjQ2IDIuMzU0YS41LjUgMCAwIDEgMC0uNzA4eicvPjwvc3ZnPlwiKSAhZGVmYXVsdDtcblxuJGNhcm91c2VsLXRyYW5zaXRpb24tZHVyYXRpb246ICAgICAgIC42cyAhZGVmYXVsdDtcbiRjYXJvdXNlbC10cmFuc2l0aW9uOiAgICAgICAgICAgICAgICB0cmFuc2Zvcm0gJGNhcm91c2VsLXRyYW5zaXRpb24tZHVyYXRpb24gZWFzZS1pbi1vdXQgIWRlZmF1bHQ7IC8vIERlZmluZSB0cmFuc2Zvcm0gdHJhbnNpdGlvbiBmaXJzdCBpZiB1c2luZyBtdWx0aXBsZSB0cmFuc2l0aW9ucyAoZS5nLiwgYHRyYW5zZm9ybSAycyBlYXNlLCBvcGFjaXR5IC41cyBlYXNlLW91dGApXG5cbiRjYXJvdXNlbC1kYXJrLWluZGljYXRvci1hY3RpdmUtYmc6ICAkYmxhY2sgIWRlZmF1bHQ7XG4kY2Fyb3VzZWwtZGFyay1jYXB0aW9uLWNvbG9yOiAgICAgICAgJGJsYWNrICFkZWZhdWx0O1xuJGNhcm91c2VsLWRhcmstY29udHJvbC1pY29uLWZpbHRlcjogIGludmVydCgxKSBncmF5c2NhbGUoMTAwKSAhZGVmYXVsdDtcbi8vIHNjc3MtZG9jcy1lbmQgY2Fyb3VzZWwtdmFyaWFibGVzXG5cblxuLy8gU3Bpbm5lcnNcblxuLy8gc2Nzcy1kb2NzLXN0YXJ0IHNwaW5uZXItdmFyaWFibGVzXG4kc3Bpbm5lci13aWR0aDogICAgICAgICAgIDJyZW0gIWRlZmF1bHQ7XG4kc3Bpbm5lci1oZWlnaHQ6ICAgICAgICAgICRzcGlubmVyLXdpZHRoICFkZWZhdWx0O1xuJHNwaW5uZXItdmVydGljYWwtYWxpZ246ICAtLjEyNWVtICFkZWZhdWx0O1xuJHNwaW5uZXItYm9yZGVyLXdpZHRoOiAgICAuMjVlbSAhZGVmYXVsdDtcbiRzcGlubmVyLWFuaW1hdGlvbi1zcGVlZDogLjc1cyAhZGVmYXVsdDtcblxuJHNwaW5uZXItd2lkdGgtc206ICAgICAgICAxcmVtICFkZWZhdWx0O1xuJHNwaW5uZXItaGVpZ2h0LXNtOiAgICAgICAkc3Bpbm5lci13aWR0aC1zbSAhZGVmYXVsdDtcbiRzcGlubmVyLWJvcmRlci13aWR0aC1zbTogLjJlbSAhZGVmYXVsdDtcbi8vIHNjc3MtZG9jcy1lbmQgc3Bpbm5lci12YXJpYWJsZXNcblxuXG4vLyBDbG9zZVxuXG4vLyBzY3NzLWRvY3Mtc3RhcnQgY2xvc2UtdmFyaWFibGVzXG4kYnRuLWNsb3NlLXdpZHRoOiAgICAgICAgICAgIDFlbSAhZGVmYXVsdDtcbiRidG4tY2xvc2UtaGVpZ2h0OiAgICAgICAgICAgJGJ0bi1jbG9zZS13aWR0aCAhZGVmYXVsdDtcbiRidG4tY2xvc2UtcGFkZGluZy14OiAgICAgICAgLjI1ZW0gIWRlZmF1bHQ7XG4kYnRuLWNsb3NlLXBhZGRpbmcteTogICAgICAgICRidG4tY2xvc2UtcGFkZGluZy14ICFkZWZhdWx0O1xuJGJ0bi1jbG9zZS1jb2xvcjogICAgICAgICAgICAkYmxhY2sgIWRlZmF1bHQ7XG4kYnRuLWNsb3NlLWJnOiAgICAgICAgICAgICAgIHVybChcImRhdGE6aW1hZ2Uvc3ZnK3htbCw8c3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgdmlld0JveD0nMCAwIDE2IDE2JyBmaWxsPScjeyRidG4tY2xvc2UtY29sb3J9Jz48cGF0aCBkPSdNLjI5My4yOTNhMSAxIDAgMDExLjQxNCAwTDggNi41ODYgMTQuMjkzLjI5M2ExIDEgMCAxMTEuNDE0IDEuNDE0TDkuNDE0IDhsNi4yOTMgNi4yOTNhMSAxIDAgMDEtMS40MTQgMS40MTRMOCA5LjQxNGwtNi4yOTMgNi4yOTNhMSAxIDAgMDEtMS40MTQtMS40MTRMNi41ODYgOCAuMjkzIDEuNzA3YTEgMSAwIDAxMC0xLjQxNHonLz48L3N2Zz5cIikgIWRlZmF1bHQ7XG4kYnRuLWNsb3NlLWZvY3VzLXNoYWRvdzogICAgICRpbnB1dC1idG4tZm9jdXMtYm94LXNoYWRvdyAhZGVmYXVsdDtcbiRidG4tY2xvc2Utb3BhY2l0eTogICAgICAgICAgLjUgIWRlZmF1bHQ7XG4kYnRuLWNsb3NlLWhvdmVyLW9wYWNpdHk6ICAgIC43NSAhZGVmYXVsdDtcbiRidG4tY2xvc2UtZm9jdXMtb3BhY2l0eTogICAgMSAhZGVmYXVsdDtcbiRidG4tY2xvc2UtZGlzYWJsZWQtb3BhY2l0eTogLjI1ICFkZWZhdWx0O1xuJGJ0bi1jbG9zZS13aGl0ZS1maWx0ZXI6ICAgICBpbnZlcnQoMSkgZ3JheXNjYWxlKDEwMCUpIGJyaWdodG5lc3MoMjAwJSkgIWRlZmF1bHQ7XG4vLyBzY3NzLWRvY3MtZW5kIGNsb3NlLXZhcmlhYmxlc1xuXG5cbi8vIE9mZmNhbnZhc1xuXG4vLyBzY3NzLWRvY3Mtc3RhcnQgb2ZmY2FudmFzLXZhcmlhYmxlc1xuJG9mZmNhbnZhcy1wYWRkaW5nLXk6ICAgICAgICAgICAgICAgJG1vZGFsLWlubmVyLXBhZGRpbmcgIWRlZmF1bHQ7XG4kb2ZmY2FudmFzLXBhZGRpbmcteDogICAgICAgICAgICAgICAkbW9kYWwtaW5uZXItcGFkZGluZyAhZGVmYXVsdDtcbiRvZmZjYW52YXMtaG9yaXpvbnRhbC13aWR0aDogICAgICAgIDQwMHB4ICFkZWZhdWx0O1xuJG9mZmNhbnZhcy12ZXJ0aWNhbC1oZWlnaHQ6ICAgICAgICAgMzB2aCAhZGVmYXVsdDtcbiRvZmZjYW52YXMtdHJhbnNpdGlvbi1kdXJhdGlvbjogICAgIC4zcyAhZGVmYXVsdDtcbiRvZmZjYW52YXMtYm9yZGVyLWNvbG9yOiAgICAgICAgICAgICRtb2RhbC1jb250ZW50LWJvcmRlci1jb2xvciAhZGVmYXVsdDtcbiRvZmZjYW52YXMtYm9yZGVyLXdpZHRoOiAgICAgICAgICAgICRtb2RhbC1jb250ZW50LWJvcmRlci13aWR0aCAhZGVmYXVsdDtcbiRvZmZjYW52YXMtdGl0bGUtbGluZS1oZWlnaHQ6ICAgICAgICRtb2RhbC10aXRsZS1saW5lLWhlaWdodCAhZGVmYXVsdDtcbiRvZmZjYW52YXMtYmctY29sb3I6ICAgICAgICAgICAgICAgICRtb2RhbC1jb250ZW50LWJnICFkZWZhdWx0O1xuJG9mZmNhbnZhcy1jb2xvcjogICAgICAgICAgICAgICAgICAgJG1vZGFsLWNvbnRlbnQtY29sb3IgIWRlZmF1bHQ7XG4kb2ZmY2FudmFzLWJveC1zaGFkb3c6ICAgICAgICAgICAgICAkbW9kYWwtY29udGVudC1ib3gtc2hhZG93LXhzICFkZWZhdWx0O1xuJG9mZmNhbnZhcy1iYWNrZHJvcC1iZzogICAgICAgICAgICAgJG1vZGFsLWJhY2tkcm9wLWJnICFkZWZhdWx0O1xuJG9mZmNhbnZhcy1iYWNrZHJvcC1vcGFjaXR5OiAgICAgICAgJG1vZGFsLWJhY2tkcm9wLW9wYWNpdHkgIWRlZmF1bHQ7XG4vLyBzY3NzLWRvY3MtZW5kIG9mZmNhbnZhcy12YXJpYWJsZXNcblxuLy8gQ29kZVxuXG4kY29kZS1mb250LXNpemU6ICAgICAgICAgICAgICAgICAgICAkc21hbGwtZm9udC1zaXplICFkZWZhdWx0O1xuJGNvZGUtY29sb3I6ICAgICAgICAgICAgICAgICAgICAgICAgJHBpbmsgIWRlZmF1bHQ7XG5cbiRrYmQtcGFkZGluZy15OiAgICAgICAgICAgICAgICAgICAgIC4ycmVtICFkZWZhdWx0O1xuJGtiZC1wYWRkaW5nLXg6ICAgICAgICAgICAgICAgICAgICAgLjRyZW0gIWRlZmF1bHQ7XG4ka2JkLWZvbnQtc2l6ZTogICAgICAgICAgICAgICAgICAgICAkY29kZS1mb250LXNpemUgIWRlZmF1bHQ7XG4ka2JkLWNvbG9yOiAgICAgICAgICAgICAgICAgICAgICAgICAkd2hpdGUgIWRlZmF1bHQ7XG4ka2JkLWJnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZ3JheS05MDAgIWRlZmF1bHQ7XG5cbiRwcmUtY29sb3I6ICAgICAgICAgICAgICAgICAgICAgICAgIG51bGwgIWRlZmF1bHQ7XG4iLCIvLyBDdXN0b20gbm9uLXN0YW5kYXJkIHZhcmlhYmxlc1xyXG5cclxuJG15YnJhbmQ6ICMwMzM3OGQ7XHJcblxyXG5cclxuLy8gQm9vdHN0cmFwIDQgVmFyaWFibGVzXHJcbi8vIEV2ZXJ5IFNhc3MgdmFyaWFibGUgaW4gQm9vdHN0cmFwIDQgaW5jbHVkZXMgdGhlICFkZWZhdWx0IGZsYWcgYWxsb3dpbmcgeW91IHRvIG92ZXJyaWRlIHRoZSB2YXJpYWJsZXMgZGVmYXVsdCB2YWx1ZSBpbiB5b3VyIG93biBTYXNzIHdpdGhvdXQgbW9kaWZ5aW5nIEJvb3RzdHJhcCBzb3VyY2UgY29kZS4gXHJcbi8vIFVuY29tbWVudCB2YXJpYWJsZXMgYXMgbmVlZGVkLCBtb2RpZnkgdGhlaXIgdmFsdWVzIGluIHRoaXMgZmlsZSBhcyBuZWVkZWQgYnV0IGRvbid0IHVuY29tbWVudCBvbmVzIHRoYXQgeW91IGRvbid0IG5lZWQgdG8gY3VzdG9taXplLiBcclxuLy8gSWYgYSB2YXJpYWJsZSBoYXMgYWxyZWFkeSBiZWVuIGFzc2lnbmVkLCB0aGVuIGl0IHdvbnQgYmUgcmUtYXNzaWduZWQgYnkgdGhlIGRlZmF1bHQgdmFsdWVzIGluIEJvb3RzdHJhcC5cclxuXHJcbi8vXHJcbi8vIENvbG9yIHN5c3RlbVxyXG4vL1xyXG5cclxuLy8gc3R5bGVsaW50LWRpc2FibGVcclxuJHdoaXRlOiAjZmZmIDtcclxuJGdyYXktMTAwOiAjZjhmOWZhIDtcclxuJGdyYXktMjAwOiAjZTllY2VmIDtcclxuJGdyYXktMzAwOiAjZGVlMmU2IDtcclxuJGdyYXktNDAwOiAjY2VkNGRhIDtcclxuJGdyYXktNTAwOiAjYWRiNWJkIDtcclxuJGdyYXktNjAwOiAjNmM3NTdkIDtcclxuJGdyYXktNzAwOiAjNDk1MDU3IDtcclxuJGdyYXktODAwOiAjMzQzYTQwIDtcclxuJGdyYXktOTAwOiAjMjEyNTI5IDtcclxuJGJsYWNrOiAjMDAwIDtcclxuXHJcbi8vJGdyYXlzOiAoKSA7XHJcbi8vJGdyYXlzOiBtYXAtbWVyZ2UoKCBcIjEwMFwiOiAkZ3JheS0xMDAsIFwiMjAwXCI6ICRncmF5LTIwMCwgXCIzMDBcIjogJGdyYXktMzAwLCBcIjQwMFwiOiAkZ3JheS00MDAsIFwiNTAwXCI6ICRncmF5LTUwMCwgXCI2MDBcIjogJGdyYXktNjAwLCBcIjcwMFwiOiAkZ3JheS03MDAsIFwiODAwXCI6ICRncmF5LTgwMCwgXCI5MDBcIjogJGdyYXktOTAwICksICRncmF5cyk7XHJcblxyXG4kYmx1ZTogIzAwN2JmZiA7XHJcbiRpbmRpZ286ICM2NjEwZjIgO1xyXG4kcHVycGxlOiAjNmY0MmMxIDtcclxuJHBpbms6ICNlODNlOGMgO1xyXG4kcmVkOiAjZGMzNTQ1IDtcclxuJG9yYW5nZTogI2ZkN2UxNCA7XHJcbiR5ZWxsb3c6ICNmZmMxMDcgO1xyXG4kZ3JlZW46ICMyOGE3NDUgO1xyXG4kdGVhbDogIzIwYzk5NyA7XHJcbiRjeWFuOiAjMTdhMmI4IDtcclxuXHJcbi8vJGNvbG9yczogKCkgO1xyXG4vLyRjb2xvcnM6IG1hcC1tZXJnZSgoIFwiYmx1ZVwiOiAkYmx1ZSwgXCJpbmRpZ29cIjogJGluZGlnbywgXCJwdXJwbGVcIjogJHB1cnBsZSwgXCJwaW5rXCI6ICRwaW5rLCBcInJlZFwiOiAkcmVkLCBcIm9yYW5nZVwiOiAkb3JhbmdlLCBcInllbGxvd1wiOiAkeWVsbG93LCBcImdyZWVuXCI6ICRncmVlbiwgXCJ0ZWFsXCI6ICR0ZWFsLCBcImN5YW5cIjogJGN5YW4sIFwid2hpdGVcIjogJHdoaXRlLCBcImdyYXlcIjogJGdyYXktNjAwLCBcImdyYXktZGFya1wiOiAkZ3JheS04MDAgKSwgJGNvbG9ycyk7XHJcblxyXG4kcHJpbWFyeTogJG15YnJhbmQ7XHJcbiRzZWNvbmRhcnk6ICRncmF5LTYwMDtcclxuJHN1Y2Nlc3M6ICRncmVlbiA7XHJcbiRpbmZvOiAkY3lhbjtcclxuJHdhcm5pbmc6ICR5ZWxsb3c7XHJcbiRkYW5nZXI6ICRyZWQ7XHJcbiRsaWdodDogJGdyYXktMTAwO1xyXG4kZGFyazogJG15YnJhbmQ7IC8vJGdyYXktODAwO1xyXG4vLyR0aGVtZS1jb2xvcnM6ICgpIDtcclxuLy8kdGhlbWUtY29sb3JzOiBtYXAtbWVyZ2UoKCBcInByaW1hcnlcIjogJHByaW1hcnksIFwic2Vjb25kYXJ5XCI6ICRzZWNvbmRhcnksIFwic3VjY2Vzc1wiOiAkc3VjY2VzcywgXCJpbmZvXCI6ICRpbmZvLCBcIndhcm5pbmdcIjogJHdhcm5pbmcsIFwiZGFuZ2VyXCI6ICRkYW5nZXIsIFwibGlnaHRcIjogJGxpZ2h0LCBcImRhcmtcIjogJGRhcmsgKSwgJHRoZW1lLWNvbG9ycyk7XHJcbi8vIHN0eWxlbGludC1lbmFibGVcclxuLy8gU2V0IGEgc3BlY2lmaWMganVtcCBwb2ludCBmb3IgcmVxdWVzdGluZyBjb2xvciBqdW1wc1xyXG4vLyR0aGVtZS1jb2xvci1pbnRlcnZhbDogOCUgO1xyXG4vLyBUaGUgeWlxIGxpZ2h0bmVzcyB2YWx1ZSB0aGF0IGRldGVybWluZXMgd2hlbiB0aGUgbGlnaHRuZXNzIG9mIGNvbG9yIGNoYW5nZXMgZnJvbSBcImRhcmtcIiB0byBcImxpZ2h0XCIuIEFjY2VwdGFibGUgdmFsdWVzIGFyZSBiZXR3ZWVuIDAgYW5kIDI1NS5cclxuLy8keWlxLWNvbnRyYXN0ZWQtdGhyZXNob2xkOiAxNTAgO1xyXG4vLyBDdXN0b21pemUgdGhlIGxpZ2h0IGFuZCBkYXJrIHRleHQgY29sb3JzIGZvciB1c2UgaW4gb3VyIFlJUSBjb2xvciBjb250cmFzdCBmdW5jdGlvbi5cclxuLy8keWlxLXRleHQtZGFyazogJGdyYXktOTAwIDtcclxuLy8keWlxLXRleHQtbGlnaHQ6ICR3aGl0ZSA7XHJcbi8vIE9wdGlvbnNcclxuLy9cclxuLy8gUXVpY2tseSBtb2RpZnkgZ2xvYmFsIHN0eWxpbmcgYnkgZW5hYmxpbmcgb3IgZGlzYWJsaW5nIG9wdGlvbmFsIGZlYXR1cmVzLlxyXG4vLyRlbmFibGUtY2FyZXQ6IHRydWUgO1xyXG4vLyRlbmFibGUtcm91bmRlZDogdHJ1ZSA7XHJcbi8vJGVuYWJsZS1zaGFkb3dzOiBmYWxzZSA7XHJcbi8vJGVuYWJsZS1ncmFkaWVudHM6IGZhbHNlIDtcclxuLy8kZW5hYmxlLXRyYW5zaXRpb25zOiB0cnVlIDtcclxuLy8kZW5hYmxlLWhvdmVyLW1lZGlhLXF1ZXJ5OiBmYWxzZSA7IC8vIERlcHJlY2F0ZWQsIG5vIGxvbmdlciBhZmZlY3RzIGFueSBjb21waWxlZCBDU1NcclxuLy8kZW5hYmxlLWdyaWQtY2xhc3NlczogdHJ1ZSA7XHJcbi8vJGVuYWJsZS1wcmludC1zdHlsZXM6IHRydWUgO1xyXG4vLyBTcGFjaW5nXHJcbi8vXHJcbi8vIENvbnRyb2wgdGhlIGRlZmF1bHQgc3R5bGluZyBvZiBtb3N0IEJvb3RzdHJhcCBlbGVtZW50cyBieSBtb2RpZnlpbmcgdGhlc2VcclxuLy8gdmFyaWFibGVzLiBNb3N0bHkgZm9jdXNlZCBvbiBzcGFjaW5nLlxyXG4vLyBZb3UgY2FuIGFkZCBtb3JlIGVudHJpZXMgdG8gdGhlICRzcGFjZXJzIG1hcCwgc2hvdWxkIHlvdSBuZWVkIG1vcmUgdmFyaWF0aW9uLlxyXG4vLyBzdHlsZWxpbnQtZGlzYWJsZVxyXG4vLyRzcGFjZXI6IDFyZW0gO1xyXG4vLyRzcGFjZXJzOiAoKSA7XHJcbi8vJHNwYWNlcnM6IG1hcC1tZXJnZSgoIDA6IDAsIDE6ICgkc3BhY2VyICogLjI1KSwgMjogKCRzcGFjZXIgKiAuNSksIDM6ICRzcGFjZXIsIDQ6ICgkc3BhY2VyICogMS41KSwgNTogKCRzcGFjZXIgKiAzKSApLCAkc3BhY2Vycyk7XHJcbi8vIFRoaXMgdmFyaWFibGUgYWZmZWN0cyB0aGUgYC5oLSpgIGFuZCBgLnctKmAgY2xhc3Nlcy5cclxuLy8kc2l6ZXM6ICgpIDtcclxuLy8kc2l6ZXM6IG1hcC1tZXJnZSgoIDI1OiAyNSUsIDUwOiA1MCUsIDc1OiA3NSUsIDEwMDogMTAwJSwgYXV0bzogYXV0byApLCAkc2l6ZXMpO1xyXG4vLyBzdHlsZWxpbnQtZW5hYmxlXHJcbi8vIEJvZHlcclxuLy9cclxuLy8gU2V0dGluZ3MgZm9yIHRoZSBgPGJvZHk+YCBlbGVtZW50LlxyXG4vLyRib2R5LWJnOiAkd2hpdGUgO1xyXG4vLyRib2R5LWNvbG9yOiAkZ3JheS05MDAgO1xyXG4vLyBMaW5rc1xyXG4vL1xyXG4vLyBTdHlsZSBhbmNob3IgZWxlbWVudHMuXHJcbi8vJGxpbmstY29sb3I6IHRoZW1lLWNvbG9yKFwicHJpbWFyeVwiKSA7XHJcbi8vJGxpbmstZGVjb3JhdGlvbjogbm9uZSA7XHJcbi8vJGxpbmstaG92ZXItY29sb3I6IGRhcmtlbigkbGluay1jb2xvciwgMTUlKSA7XHJcbi8vJGxpbmstaG92ZXItZGVjb3JhdGlvbjogdW5kZXJsaW5lIDtcclxuLy8gUGFyYWdyYXBoc1xyXG4vL1xyXG4vLyBTdHlsZSBwIGVsZW1lbnQuXHJcbi8vJHBhcmFncmFwaC1tYXJnaW4tYm90dG9tOiAxcmVtIDtcclxuLy8gR3JpZCBicmVha3BvaW50c1xyXG4vL1xyXG4vLyBEZWZpbmUgdGhlIG1pbmltdW0gZGltZW5zaW9ucyBhdCB3aGljaCB5b3VyIGxheW91dCB3aWxsIGNoYW5nZSxcclxuLy8gYWRhcHRpbmcgdG8gZGlmZmVyZW50IHNjcmVlbiBzaXplcywgZm9yIHVzZSBpbiBtZWRpYSBxdWVyaWVzLlxyXG4vLyRncmlkLWJyZWFrcG9pbnRzOiAoIHhzOiAwLCBzbTogNTc2cHgsIG1kOiA3NjhweCwgbGc6IDk5MnB4LCB4bDogMTIwMHB4ICkgO1xyXG4vL0BpbmNsdWRlIF9hc3NlcnQtYXNjZW5kaW5nKCRncmlkLWJyZWFrcG9pbnRzLCBcIiRncmlkLWJyZWFrcG9pbnRzXCIpO1xyXG4vL0BpbmNsdWRlIF9hc3NlcnQtc3RhcnRzLWF0LXplcm8oJGdyaWQtYnJlYWtwb2ludHMpO1xyXG4vLyBHcmlkIGNvbnRhaW5lcnNcclxuLy9cclxuLy8gRGVmaW5lIHRoZSBtYXhpbXVtIHdpZHRoIG9mIGAuY29udGFpbmVyYCBmb3IgZGlmZmVyZW50IHNjcmVlbiBzaXplcy5cclxuLy8kY29udGFpbmVyLW1heC13aWR0aHM6ICggc206IDU0MHB4LCBtZDogNzIwcHgsIGxnOiA5NjBweCwgeGw6IDExNDBweCApIDtcclxuLy9AaW5jbHVkZSBfYXNzZXJ0LWFzY2VuZGluZygkY29udGFpbmVyLW1heC13aWR0aHMsIFwiJGNvbnRhaW5lci1tYXgtd2lkdGhzXCIpO1xyXG4vLyBHcmlkIGNvbHVtbnNcclxuLy9cclxuLy8gU2V0IHRoZSBudW1iZXIgb2YgY29sdW1ucyBhbmQgc3BlY2lmeSB0aGUgd2lkdGggb2YgdGhlIGd1dHRlcnMuXHJcbi8vJGdyaWQtY29sdW1uczogMTIgO1xyXG4vLyRncmlkLWd1dHRlci13aWR0aDogMzBweCA7XHJcbi8vIENvbXBvbmVudHNcclxuLy9cclxuLy8gRGVmaW5lIGNvbW1vbiBwYWRkaW5nIGFuZCBib3JkZXIgcmFkaXVzIHNpemVzIGFuZCBtb3JlLlxyXG4vLyRsaW5lLWhlaWdodC1sZzogMS41IDtcclxuLy8kbGluZS1oZWlnaHQtc206IDEuNSA7XHJcbi8vJGJvcmRlci13aWR0aDogMXB4IDtcclxuLy8kYm9yZGVyLWNvbG9yOiAkZ3JheS0zMDAgO1xyXG4vLyRib3JkZXItcmFkaXVzOiAuMjVyZW0gO1xyXG4vLyRib3JkZXItcmFkaXVzLWxnOiAuM3JlbSA7XHJcbi8vJGJvcmRlci1yYWRpdXMtc206IC4ycmVtIDtcclxuLy8kYm94LXNoYWRvdy1zbTogMCAuMTI1cmVtIC4yNXJlbSByZ2JhKCRibGFjaywgLjA3NSkgO1xyXG4vLyRib3gtc2hhZG93OiAwIC41cmVtIDFyZW0gcmdiYSgkYmxhY2ssIC4xNSkgO1xyXG4vLyRib3gtc2hhZG93LWxnOiAwIDFyZW0gM3JlbSByZ2JhKCRibGFjaywgLjE3NSkgO1xyXG4vLyRjb21wb25lbnQtYWN0aXZlLWNvbG9yOiAkd2hpdGUgO1xyXG4vLyRjb21wb25lbnQtYWN0aXZlLWJnOiB0aGVtZS1jb2xvcihcInByaW1hcnlcIikgO1xyXG4vLyRjYXJldC13aWR0aDogLjNlbSA7XHJcbi8vJHRyYW5zaXRpb24tYmFzZTogYWxsIC4ycyBlYXNlLWluLW91dCA7XHJcbi8vJHRyYW5zaXRpb24tZmFkZTogb3BhY2l0eSAuMTVzIGxpbmVhciA7XHJcbi8vJHRyYW5zaXRpb24tY29sbGFwc2U6IGhlaWdodCAuMzVzIGVhc2UgO1xyXG4vLyBGb250c1xyXG4vL1xyXG4vLyBGb250LCBsaW5lLWhlaWdodCwgYW5kIGNvbG9yIGZvciBib2R5IHRleHQsIGhlYWRpbmdzLCBhbmQgbW9yZS5cclxuLy8gc3R5bGVsaW50LWRpc2FibGUgdmFsdWUta2V5d29yZC1jYXNlXHJcbi8vJGZvbnQtZmFtaWx5LXNhbnMtc2VyaWY6IC1hcHBsZS1zeXN0ZW0sIEJsaW5rTWFjU3lzdGVtRm9udCwgXCJTZWdvZSBVSVwiLCBSb2JvdG8sIFwiSGVsdmV0aWNhIE5ldWVcIiwgQXJpYWwsIHNhbnMtc2VyaWYsIFwiQXBwbGUgQ29sb3IgRW1vamlcIiwgXCJTZWdvZSBVSSBFbW9qaVwiLCBcIlNlZ29lIFVJIFN5bWJvbFwiIDtcclxuLy8kZm9udC1mYW1pbHktbW9ub3NwYWNlOiBTRk1vbm8tUmVndWxhciwgTWVubG8sIE1vbmFjbywgQ29uc29sYXMsIFwiTGliZXJhdGlvbiBNb25vXCIsIFwiQ291cmllciBOZXdcIiwgbW9ub3NwYWNlIDtcclxuLy8kZm9udC1mYW1pbHktYmFzZTogJGZvbnQtZmFtaWx5LXNhbnMtc2VyaWYgO1xyXG4vLyBzdHlsZWxpbnQtZW5hYmxlIHZhbHVlLWtleXdvcmQtY2FzZVxyXG4vLyRmb250LXNpemUtYmFzZTogMXJlbSA7IC8vIEFzc3VtZXMgdGhlIGJyb3dzZXIgZGVmYXVsdCwgdHlwaWNhbGx5IGAxNnB4YFxyXG4vLyRmb250LXNpemUtbGc6ICgkZm9udC1zaXplLWJhc2UgKiAxLjI1KSA7XHJcbi8vJGZvbnQtc2l6ZS1zbTogKCRmb250LXNpemUtYmFzZSAqIC44NzUpIDtcclxuLy8kZm9udC13ZWlnaHQtbGlnaHQ6IDMwMCA7XHJcbi8vJGZvbnQtd2VpZ2h0LW5vcm1hbDogNDAwIDtcclxuLy8kZm9udC13ZWlnaHQtYm9sZDogNzAwIDtcclxuLy8kZm9udC13ZWlnaHQtYmFzZTogJGZvbnQtd2VpZ2h0LW5vcm1hbCA7XHJcbi8vJGxpbmUtaGVpZ2h0LWJhc2U6IDEuNSA7XHJcbi8vJGgxLWZvbnQtc2l6ZTogJGZvbnQtc2l6ZS1iYXNlICogMi41IDtcclxuLy8kaDItZm9udC1zaXplOiAkZm9udC1zaXplLWJhc2UgKiAyIDtcclxuLy8kaDMtZm9udC1zaXplOiAkZm9udC1zaXplLWJhc2UgKiAxLjc1IDtcclxuLy8kaDQtZm9udC1zaXplOiAkZm9udC1zaXplLWJhc2UgKiAxLjUgO1xyXG4vLyRoNS1mb250LXNpemU6ICRmb250LXNpemUtYmFzZSAqIDEuMjUgO1xyXG4vLyRoNi1mb250LXNpemU6ICRmb250LXNpemUtYmFzZSA7XHJcbi8vJGhlYWRpbmdzLW1hcmdpbi1ib3R0b206ICgkc3BhY2VyIC8gMikgO1xyXG4vLyRoZWFkaW5ncy1mb250LWZhbWlseTogaW5oZXJpdCA7XHJcbi8vJGhlYWRpbmdzLWZvbnQtd2VpZ2h0OiA1MDAgO1xyXG4vLyRoZWFkaW5ncy1saW5lLWhlaWdodDogMS4yIDtcclxuLy8kaGVhZGluZ3MtY29sb3I6IGluaGVyaXQgO1xyXG4vLyRkaXNwbGF5MS1zaXplOiA2cmVtIDtcclxuLy8kZGlzcGxheTItc2l6ZTogNS41cmVtIDtcclxuLy8kZGlzcGxheTMtc2l6ZTogNC41cmVtIDtcclxuLy8kZGlzcGxheTQtc2l6ZTogMy41cmVtIDtcclxuLy8kZGlzcGxheTEtd2VpZ2h0OiAzMDAgO1xyXG4vLyRkaXNwbGF5Mi13ZWlnaHQ6IDMwMCA7XHJcbi8vJGRpc3BsYXkzLXdlaWdodDogMzAwIDtcclxuLy8kZGlzcGxheTQtd2VpZ2h0OiAzMDAgO1xyXG4vLyRkaXNwbGF5LWxpbmUtaGVpZ2h0OiAkaGVhZGluZ3MtbGluZS1oZWlnaHQgO1xyXG4vLyRsZWFkLWZvbnQtc2l6ZTogKCRmb250LXNpemUtYmFzZSAqIDEuMjUpIDtcclxuLy8kbGVhZC1mb250LXdlaWdodDogMzAwIDtcclxuLy8kc21hbGwtZm9udC1zaXplOiA4MCUgO1xyXG4vLyR0ZXh0LW11dGVkOiAkZ3JheS02MDAgO1xyXG4vLyRibG9ja3F1b3RlLXNtYWxsLWNvbG9yOiAkZ3JheS02MDAgO1xyXG4vLyRibG9ja3F1b3RlLWZvbnQtc2l6ZTogKCRmb250LXNpemUtYmFzZSAqIDEuMjUpIDtcclxuLy8kaHItYm9yZGVyLWNvbG9yOiByZ2JhKCRibGFjaywgLjEpIDtcclxuLy8kaHItYm9yZGVyLXdpZHRoOiAkYm9yZGVyLXdpZHRoIDtcclxuLy8kbWFyay1wYWRkaW5nOiAuMmVtIDtcclxuLy8kZHQtZm9udC13ZWlnaHQ6ICRmb250LXdlaWdodC1ib2xkIDtcclxuLy8ka2JkLWJveC1zaGFkb3c6IGluc2V0IDAgLS4xcmVtIDAgcmdiYSgkYmxhY2ssIC4yNSkgO1xyXG4vLyRuZXN0ZWQta2JkLWZvbnQtd2VpZ2h0OiAkZm9udC13ZWlnaHQtYm9sZCA7XHJcbi8vJGxpc3QtaW5saW5lLXBhZGRpbmc6IC41cmVtIDtcclxuLy8kbWFyay1iZzogI2ZjZjhlMyA7XHJcbi8vJGhyLW1hcmdpbi15OiAkc3BhY2VyIDtcclxuLy8gVGFibGVzXHJcbi8vXHJcbi8vIEN1c3RvbWl6ZXMgdGhlIGAudGFibGVgIGNvbXBvbmVudCB3aXRoIGJhc2ljIHZhbHVlcywgZWFjaCB1c2VkIGFjcm9zcyBhbGwgdGFibGUgdmFyaWF0aW9ucy5cclxuLy8kdGFibGUtY2VsbC1wYWRkaW5nOiAuNzVyZW0gO1xyXG4vLyR0YWJsZS1jZWxsLXBhZGRpbmctc206IC4zcmVtIDtcclxuLy8kdGFibGUtYmc6IHRyYW5zcGFyZW50IDtcclxuLy8kdGFibGUtYWNjZW50LWJnOiByZ2JhKCRibGFjaywgLjA1KSA7XHJcbi8vJHRhYmxlLWhvdmVyLWJnOiByZ2JhKCRibGFjaywgLjA3NSkgO1xyXG4vLyR0YWJsZS1hY3RpdmUtYmc6ICR0YWJsZS1ob3Zlci1iZyA7XHJcbi8vJHRhYmxlLWJvcmRlci13aWR0aDogJGJvcmRlci13aWR0aCA7XHJcbi8vJHRhYmxlLWJvcmRlci1jb2xvcjogJGdyYXktMzAwIDtcclxuLy8kdGFibGUtaGVhZC1iZzogJGdyYXktMjAwIDtcclxuLy8kdGFibGUtaGVhZC1jb2xvcjogJGdyYXktNzAwIDtcclxuLy8kdGFibGUtZGFyay1iZzogJGdyYXktOTAwIDtcclxuLy8kdGFibGUtZGFyay1hY2NlbnQtYmc6IHJnYmEoJHdoaXRlLCAuMDUpIDtcclxuLy8kdGFibGUtZGFyay1ob3Zlci1iZzogcmdiYSgkd2hpdGUsIC4wNzUpIDtcclxuLy8kdGFibGUtZGFyay1ib3JkZXItY29sb3I6IGxpZ2h0ZW4oJGdyYXktOTAwLCA3LjUlKSA7XHJcbi8vJHRhYmxlLWRhcmstY29sb3I6ICRib2R5LWJnIDtcclxuLy8kdGFibGUtc3RyaXBlZC1vcmRlcjogb2RkIDtcclxuLy8kdGFibGUtY2FwdGlvbi1jb2xvcjogJHRleHQtbXV0ZWQgO1xyXG4vLyBCdXR0b25zICsgRm9ybXNcclxuLy9cclxuLy8gU2hhcmVkIHZhcmlhYmxlcyB0aGF0IGFyZSByZWFzc2lnbmVkIHRvIGAkaW5wdXQtYCBhbmQgYCRidG4tYCBzcGVjaWZpYyB2YXJpYWJsZXMuXHJcbi8vJGlucHV0LWJ0bi1wYWRkaW5nLXk6IC4zNzVyZW0gO1xyXG4vLyRpbnB1dC1idG4tcGFkZGluZy14OiAuNzVyZW0gO1xyXG4vLyRpbnB1dC1idG4tbGluZS1oZWlnaHQ6ICRsaW5lLWhlaWdodC1iYXNlIDtcclxuLy8kaW5wdXQtYnRuLWZvY3VzLXdpZHRoOiAuMnJlbSA7XHJcbi8vJGlucHV0LWJ0bi1mb2N1cy1jb2xvcjogcmdiYSgkY29tcG9uZW50LWFjdGl2ZS1iZywgLjI1KSA7XHJcbi8vJGlucHV0LWJ0bi1mb2N1cy1ib3gtc2hhZG93OiAwIDAgMCAkaW5wdXQtYnRuLWZvY3VzLXdpZHRoICRpbnB1dC1idG4tZm9jdXMtY29sb3IgO1xyXG4vLyRpbnB1dC1idG4tcGFkZGluZy15LXNtOiAuMjVyZW0gO1xyXG4vLyRpbnB1dC1idG4tcGFkZGluZy14LXNtOiAuNXJlbSA7XHJcbi8vJGlucHV0LWJ0bi1saW5lLWhlaWdodC1zbTogJGxpbmUtaGVpZ2h0LXNtIDtcclxuLy8kaW5wdXQtYnRuLXBhZGRpbmcteS1sZzogLjVyZW0gO1xyXG4vLyRpbnB1dC1idG4tcGFkZGluZy14LWxnOiAxcmVtIDtcclxuLy8kaW5wdXQtYnRuLWxpbmUtaGVpZ2h0LWxnOiAkbGluZS1oZWlnaHQtbGcgO1xyXG4vLyRpbnB1dC1idG4tYm9yZGVyLXdpZHRoOiAkYm9yZGVyLXdpZHRoIDtcclxuLy8gQnV0dG9uc1xyXG4vL1xyXG4vLyBGb3IgZWFjaCBvZiBCb290c3RyYXAncyBidXR0b25zLCBkZWZpbmUgdGV4dCwgYmFja2dyb3VuZCwgYW5kIGJvcmRlciBjb2xvci5cclxuLy8kYnRuLXBhZGRpbmcteTogJGlucHV0LWJ0bi1wYWRkaW5nLXkgO1xyXG4vLyRidG4tcGFkZGluZy14OiAkaW5wdXQtYnRuLXBhZGRpbmcteCA7XHJcbi8vJGJ0bi1saW5lLWhlaWdodDogJGlucHV0LWJ0bi1saW5lLWhlaWdodCA7XHJcbi8vJGJ0bi1wYWRkaW5nLXktc206ICRpbnB1dC1idG4tcGFkZGluZy15LXNtIDtcclxuLy8kYnRuLXBhZGRpbmcteC1zbTogJGlucHV0LWJ0bi1wYWRkaW5nLXgtc20gO1xyXG4vLyRidG4tbGluZS1oZWlnaHQtc206ICRpbnB1dC1idG4tbGluZS1oZWlnaHQtc20gO1xyXG4vLyRidG4tcGFkZGluZy15LWxnOiAkaW5wdXQtYnRuLXBhZGRpbmcteS1sZyA7XHJcbi8vJGJ0bi1wYWRkaW5nLXgtbGc6ICRpbnB1dC1idG4tcGFkZGluZy14LWxnIDtcclxuLy8kYnRuLWxpbmUtaGVpZ2h0LWxnOiAkaW5wdXQtYnRuLWxpbmUtaGVpZ2h0LWxnIDtcclxuLy8kYnRuLWJvcmRlci13aWR0aDogJGlucHV0LWJ0bi1ib3JkZXItd2lkdGggO1xyXG4vLyRidG4tZm9udC13ZWlnaHQ6ICRmb250LXdlaWdodC1ub3JtYWwgO1xyXG4vLyRidG4tYm94LXNoYWRvdzogaW5zZXQgMCAxcHggMCByZ2JhKCR3aGl0ZSwgLjE1KSwgMCAxcHggMXB4IHJnYmEoJGJsYWNrLCAuMDc1KSA7XHJcbi8vJGJ0bi1mb2N1cy13aWR0aDogJGlucHV0LWJ0bi1mb2N1cy13aWR0aCA7XHJcbi8vJGJ0bi1mb2N1cy1ib3gtc2hhZG93OiAkaW5wdXQtYnRuLWZvY3VzLWJveC1zaGFkb3cgO1xyXG4vLyRidG4tZGlzYWJsZWQtb3BhY2l0eTogLjY1IDtcclxuLy8kYnRuLWFjdGl2ZS1ib3gtc2hhZG93OiBpbnNldCAwIDNweCA1cHggcmdiYSgkYmxhY2ssIC4xMjUpIDtcclxuLy8kYnRuLWxpbmstZGlzYWJsZWQtY29sb3I6ICRncmF5LTYwMCA7XHJcbi8vJGJ0bi1ibG9jay1zcGFjaW5nLXk6IC41cmVtIDtcclxuLy8gQWxsb3dzIGZvciBjdXN0b21pemluZyBidXR0b24gcmFkaXVzIGluZGVwZW5kZW50bHkgZnJvbSBnbG9iYWwgYm9yZGVyIHJhZGl1c1xyXG4vLyRidG4tYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXMgO1xyXG4vLyRidG4tYm9yZGVyLXJhZGl1cy1sZzogJGJvcmRlci1yYWRpdXMtbGcgO1xyXG4vLyRidG4tYm9yZGVyLXJhZGl1cy1zbTogJGJvcmRlci1yYWRpdXMtc20gO1xyXG4vLyRidG4tdHJhbnNpdGlvbjogY29sb3IgLjE1cyBlYXNlLWluLW91dCwgYmFja2dyb3VuZC1jb2xvciAuMTVzIGVhc2UtaW4tb3V0LCBib3JkZXItY29sb3IgLjE1cyBlYXNlLWluLW91dCwgYm94LXNoYWRvdyAuMTVzIGVhc2UtaW4tb3V0IDtcclxuLy8gRm9ybXNcclxuLy8kbGFiZWwtbWFyZ2luLWJvdHRvbTogLjVyZW0gO1xyXG4vLyRpbnB1dC1wYWRkaW5nLXk6ICRpbnB1dC1idG4tcGFkZGluZy15IDtcclxuLy8kaW5wdXQtcGFkZGluZy14OiAkaW5wdXQtYnRuLXBhZGRpbmcteCA7XHJcbi8vJGlucHV0LWxpbmUtaGVpZ2h0OiAkaW5wdXQtYnRuLWxpbmUtaGVpZ2h0IDtcclxuLy8kaW5wdXQtcGFkZGluZy15LXNtOiAkaW5wdXQtYnRuLXBhZGRpbmcteS1zbSA7XHJcbi8vJGlucHV0LXBhZGRpbmcteC1zbTogJGlucHV0LWJ0bi1wYWRkaW5nLXgtc20gO1xyXG4vLyRpbnB1dC1saW5lLWhlaWdodC1zbTogJGlucHV0LWJ0bi1saW5lLWhlaWdodC1zbSA7XHJcbi8vJGlucHV0LXBhZGRpbmcteS1sZzogJGlucHV0LWJ0bi1wYWRkaW5nLXktbGcgO1xyXG4vLyRpbnB1dC1wYWRkaW5nLXgtbGc6ICRpbnB1dC1idG4tcGFkZGluZy14LWxnIDtcclxuLy8kaW5wdXQtbGluZS1oZWlnaHQtbGc6ICRpbnB1dC1idG4tbGluZS1oZWlnaHQtbGcgO1xyXG4vLyRpbnB1dC1iZzogJHdoaXRlIDtcclxuLy8kaW5wdXQtZGlzYWJsZWQtYmc6ICRncmF5LTIwMCA7XHJcbi8vJGlucHV0LWNvbG9yOiAkZ3JheS03MDAgO1xyXG4vLyRpbnB1dC1ib3JkZXItY29sb3I6ICRncmF5LTQwMCA7XHJcbi8vJGlucHV0LWJvcmRlci13aWR0aDogJGlucHV0LWJ0bi1ib3JkZXItd2lkdGggO1xyXG4vLyRpbnB1dC1ib3gtc2hhZG93OiBpbnNldCAwIDFweCAxcHggcmdiYSgkYmxhY2ssIC4wNzUpIDtcclxuLy8kaW5wdXQtYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXMgO1xyXG4vLyRpbnB1dC1ib3JkZXItcmFkaXVzLWxnOiAkYm9yZGVyLXJhZGl1cy1sZyA7XHJcbi8vJGlucHV0LWJvcmRlci1yYWRpdXMtc206ICRib3JkZXItcmFkaXVzLXNtIDtcclxuLy8kaW5wdXQtZm9jdXMtYmc6ICRpbnB1dC1iZyA7XHJcbi8vJGlucHV0LWZvY3VzLWJvcmRlci1jb2xvcjogbGlnaHRlbigkY29tcG9uZW50LWFjdGl2ZS1iZywgMjUlKSA7XHJcbi8vJGlucHV0LWZvY3VzLWNvbG9yOiAkaW5wdXQtY29sb3IgO1xyXG4vLyRpbnB1dC1mb2N1cy13aWR0aDogJGlucHV0LWJ0bi1mb2N1cy13aWR0aCA7XHJcbi8vJGlucHV0LWZvY3VzLWJveC1zaGFkb3c6ICRpbnB1dC1idG4tZm9jdXMtYm94LXNoYWRvdyA7XHJcbi8vJGlucHV0LXBsYWNlaG9sZGVyLWNvbG9yOiAkZ3JheS02MDAgO1xyXG4vLyRpbnB1dC1wbGFpbnRleHQtY29sb3I6ICRib2R5LWNvbG9yIDtcclxuLy8kaW5wdXQtaGVpZ2h0LWJvcmRlcjogJGlucHV0LWJvcmRlci13aWR0aCAqIDIgO1xyXG4vLyRpbnB1dC1oZWlnaHQtaW5uZXI6ICgkZm9udC1zaXplLWJhc2UgKiAkaW5wdXQtYnRuLWxpbmUtaGVpZ2h0KSArICgkaW5wdXQtYnRuLXBhZGRpbmcteSAqIDIpIDtcclxuLy8kaW5wdXQtaGVpZ2h0OiBjYWxjKCN7JGlucHV0LWhlaWdodC1pbm5lcn0gKyAjeyRpbnB1dC1oZWlnaHQtYm9yZGVyfSkgO1xyXG4vLyRpbnB1dC1oZWlnaHQtaW5uZXItc206ICgkZm9udC1zaXplLXNtICogJGlucHV0LWJ0bi1saW5lLWhlaWdodC1zbSkgKyAoJGlucHV0LWJ0bi1wYWRkaW5nLXktc20gKiAyKSA7XHJcbi8vJGlucHV0LWhlaWdodC1zbTogY2FsYygjeyRpbnB1dC1oZWlnaHQtaW5uZXItc219ICsgI3skaW5wdXQtaGVpZ2h0LWJvcmRlcn0pIDtcclxuLy8kaW5wdXQtaGVpZ2h0LWlubmVyLWxnOiAoJGZvbnQtc2l6ZS1sZyAqICRpbnB1dC1idG4tbGluZS1oZWlnaHQtbGcpICsgKCRpbnB1dC1idG4tcGFkZGluZy15LWxnICogMikgO1xyXG4vLyRpbnB1dC1oZWlnaHQtbGc6IGNhbGMoI3skaW5wdXQtaGVpZ2h0LWlubmVyLWxnfSArICN7JGlucHV0LWhlaWdodC1ib3JkZXJ9KSA7XHJcbi8vJGlucHV0LXRyYW5zaXRpb246IGJvcmRlci1jb2xvciAuMTVzIGVhc2UtaW4tb3V0LCBib3gtc2hhZG93IC4xNXMgZWFzZS1pbi1vdXQgO1xyXG4vLyRmb3JtLXRleHQtbWFyZ2luLXRvcDogLjI1cmVtIDtcclxuLy8kZm9ybS1jaGVjay1pbnB1dC1ndXR0ZXI6IDEuMjVyZW0gO1xyXG4vLyRmb3JtLWNoZWNrLWlucHV0LW1hcmdpbi15OiAuM3JlbSA7XHJcbi8vJGZvcm0tY2hlY2staW5wdXQtbWFyZ2luLXg6IC4yNXJlbSA7XHJcbi8vJGZvcm0tY2hlY2staW5saW5lLW1hcmdpbi14OiAuNzVyZW0gO1xyXG4vLyRmb3JtLWNoZWNrLWlubGluZS1pbnB1dC1tYXJnaW4teDogLjMxMjVyZW0gO1xyXG4vLyRmb3JtLWdyb3VwLW1hcmdpbi1ib3R0b206IDFyZW0gO1xyXG4vLyRpbnB1dC1ncm91cC1hZGRvbi1jb2xvcjogJGlucHV0LWNvbG9yIDtcclxuLy8kaW5wdXQtZ3JvdXAtYWRkb24tYmc6ICRncmF5LTIwMCA7XHJcbi8vJGlucHV0LWdyb3VwLWFkZG9uLWJvcmRlci1jb2xvcjogJGlucHV0LWJvcmRlci1jb2xvciA7XHJcbi8vJGN1c3RvbS1jb250cm9sLWd1dHRlcjogMS41cmVtIDtcclxuLy8kY3VzdG9tLWNvbnRyb2wtc3BhY2VyLXg6IDFyZW0gO1xyXG4vLyRjdXN0b20tY29udHJvbC1pbmRpY2F0b3Itc2l6ZTogMXJlbSA7XHJcbi8vJGN1c3RvbS1jb250cm9sLWluZGljYXRvci1iZzogJGdyYXktMzAwIDtcclxuLy8kY3VzdG9tLWNvbnRyb2wtaW5kaWNhdG9yLWJnLXNpemU6IDUwJSA1MCUgO1xyXG4vLyRjdXN0b20tY29udHJvbC1pbmRpY2F0b3ItYm94LXNoYWRvdzogaW5zZXQgMCAuMjVyZW0gLjI1cmVtIHJnYmEoJGJsYWNrLCAuMSkgO1xyXG4vLyRjdXN0b20tY29udHJvbC1pbmRpY2F0b3ItZGlzYWJsZWQtYmc6ICRncmF5LTIwMCA7XHJcbi8vJGN1c3RvbS1jb250cm9sLWxhYmVsLWRpc2FibGVkLWNvbG9yOiAkZ3JheS02MDAgO1xyXG4vLyRjdXN0b20tY29udHJvbC1pbmRpY2F0b3ItY2hlY2tlZC1jb2xvcjogJGNvbXBvbmVudC1hY3RpdmUtY29sb3IgO1xyXG4vLyRjdXN0b20tY29udHJvbC1pbmRpY2F0b3ItY2hlY2tlZC1iZzogJGNvbXBvbmVudC1hY3RpdmUtYmcgO1xyXG4vLyRjdXN0b20tY29udHJvbC1pbmRpY2F0b3ItY2hlY2tlZC1kaXNhYmxlZC1iZzogcmdiYSh0aGVtZS1jb2xvcihcInByaW1hcnlcIiksIC41KSA7XHJcbi8vJGN1c3RvbS1jb250cm9sLWluZGljYXRvci1jaGVja2VkLWJveC1zaGFkb3c6IG5vbmUgO1xyXG4vLyRjdXN0b20tY29udHJvbC1pbmRpY2F0b3ItZm9jdXMtYm94LXNoYWRvdzogMCAwIDAgMXB4ICRib2R5LWJnLCAkaW5wdXQtYnRuLWZvY3VzLWJveC1zaGFkb3cgO1xyXG4vLyRjdXN0b20tY29udHJvbC1pbmRpY2F0b3ItYWN0aXZlLWNvbG9yOiAkY29tcG9uZW50LWFjdGl2ZS1jb2xvciA7XHJcbi8vJGN1c3RvbS1jb250cm9sLWluZGljYXRvci1hY3RpdmUtYmc6IGxpZ2h0ZW4oJGNvbXBvbmVudC1hY3RpdmUtYmcsIDM1JSkgO1xyXG4vLyRjdXN0b20tY29udHJvbC1pbmRpY2F0b3ItYWN0aXZlLWJveC1zaGFkb3c6IG5vbmUgO1xyXG4vLyRjdXN0b20tY2hlY2tib3gtaW5kaWNhdG9yLWJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzIDtcclxuLy8kY3VzdG9tLWNoZWNrYm94LWluZGljYXRvci1pY29uLWNoZWNrZWQ6IHN0ci1yZXBsYWNlKHVybChcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgdmlld0JveD0nMCAwIDggOCclM0UlM0NwYXRoIGZpbGw9JyN7JGN1c3RvbS1jb250cm9sLWluZGljYXRvci1jaGVja2VkLWNvbG9yfScgZD0nTTYuNTY0Ljc1bC0zLjU5IDMuNjEyLTEuNTM4LTEuNTVMMCA0LjI2IDIuOTc0IDcuMjUgOCAyLjE5M3onLyUzRSUzQy9zdmclM0VcIiksIFwiI1wiLCBcIiUyM1wiKSA7XHJcbi8vJGN1c3RvbS1jaGVja2JveC1pbmRpY2F0b3ItaW5kZXRlcm1pbmF0ZS1iZzogJGNvbXBvbmVudC1hY3RpdmUtYmcgO1xyXG4vLyRjdXN0b20tY2hlY2tib3gtaW5kaWNhdG9yLWluZGV0ZXJtaW5hdGUtY29sb3I6ICRjdXN0b20tY29udHJvbC1pbmRpY2F0b3ItY2hlY2tlZC1jb2xvciA7XHJcbi8vJGN1c3RvbS1jaGVja2JveC1pbmRpY2F0b3ItaWNvbi1pbmRldGVybWluYXRlOiBzdHItcmVwbGFjZSh1cmwoXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHZpZXdCb3g9JzAgMCA0IDQnJTNFJTNDcGF0aCBzdHJva2U9JyN7JGN1c3RvbS1jaGVja2JveC1pbmRpY2F0b3ItaW5kZXRlcm1pbmF0ZS1jb2xvcn0nIGQ9J00wIDJoNCcvJTNFJTNDL3N2ZyUzRVwiKSwgXCIjXCIsIFwiJTIzXCIpIDtcclxuLy8kY3VzdG9tLWNoZWNrYm94LWluZGljYXRvci1pbmRldGVybWluYXRlLWJveC1zaGFkb3c6IG5vbmUgO1xyXG4vLyRjdXN0b20tcmFkaW8taW5kaWNhdG9yLWJvcmRlci1yYWRpdXM6IDUwJSA7XHJcbi8vJGN1c3RvbS1yYWRpby1pbmRpY2F0b3ItaWNvbi1jaGVja2VkOiBzdHItcmVwbGFjZSh1cmwoXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHZpZXdCb3g9Jy00IC00IDggOCclM0UlM0NjaXJjbGUgcj0nMycgZmlsbD0nI3skY3VzdG9tLWNvbnRyb2wtaW5kaWNhdG9yLWNoZWNrZWQtY29sb3J9Jy8lM0UlM0Mvc3ZnJTNFXCIpLCBcIiNcIiwgXCIlMjNcIikgO1xyXG4vLyRjdXN0b20tc2VsZWN0LXBhZGRpbmcteTogLjM3NXJlbSA7XHJcbi8vJGN1c3RvbS1zZWxlY3QtcGFkZGluZy14OiAuNzVyZW0gO1xyXG4vLyRjdXN0b20tc2VsZWN0LWhlaWdodDogJGlucHV0LWhlaWdodCA7XHJcbi8vJGN1c3RvbS1zZWxlY3QtaW5kaWNhdG9yLXBhZGRpbmc6IDFyZW0gOyAvLyBFeHRyYSBwYWRkaW5nIHRvIGFjY291bnQgZm9yIHRoZSBwcmVzZW5jZSBvZiB0aGUgYmFja2dyb3VuZC1pbWFnZSBiYXNlZCBpbmRpY2F0b3JcclxuLy8kY3VzdG9tLXNlbGVjdC1saW5lLWhlaWdodDogJGlucHV0LWJ0bi1saW5lLWhlaWdodCA7XHJcbi8vJGN1c3RvbS1zZWxlY3QtY29sb3I6ICRpbnB1dC1jb2xvciA7XHJcbi8vJGN1c3RvbS1zZWxlY3QtZGlzYWJsZWQtY29sb3I6ICRncmF5LTYwMCA7XHJcbi8vJGN1c3RvbS1zZWxlY3QtYmc6ICRpbnB1dC1iZyA7XHJcbi8vJGN1c3RvbS1zZWxlY3QtZGlzYWJsZWQtYmc6ICRncmF5LTIwMCA7XHJcbi8vJGN1c3RvbS1zZWxlY3QtYmctc2l6ZTogOHB4IDEwcHggOyAvLyBJbiBwaXhlbHMgYmVjYXVzZSBpbWFnZSBkaW1lbnNpb25zXHJcbi8vJGN1c3RvbS1zZWxlY3QtaW5kaWNhdG9yLWNvbG9yOiAkZ3JheS04MDAgO1xyXG4vLyRjdXN0b20tc2VsZWN0LWluZGljYXRvcjogc3RyLXJlcGxhY2UodXJsKFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB2aWV3Qm94PScwIDAgNCA1JyUzRSUzQ3BhdGggZmlsbD0nI3skY3VzdG9tLXNlbGVjdC1pbmRpY2F0b3ItY29sb3J9JyBkPSdNMiAwTDAgMmg0em0wIDVMMCAzaDR6Jy8lM0UlM0Mvc3ZnJTNFXCIpLCBcIiNcIiwgXCIlMjNcIikgO1xyXG4vLyRjdXN0b20tc2VsZWN0LWJvcmRlci13aWR0aDogJGlucHV0LWJ0bi1ib3JkZXItd2lkdGggO1xyXG4vLyRjdXN0b20tc2VsZWN0LWJvcmRlci1jb2xvcjogJGlucHV0LWJvcmRlci1jb2xvciA7XHJcbi8vJGN1c3RvbS1zZWxlY3QtYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXMgO1xyXG4vLyRjdXN0b20tc2VsZWN0LWZvY3VzLWJvcmRlci1jb2xvcjogJGlucHV0LWZvY3VzLWJvcmRlci1jb2xvciA7XHJcbi8vJGN1c3RvbS1zZWxlY3QtZm9jdXMtYm94LXNoYWRvdzogaW5zZXQgMCAxcHggMnB4IHJnYmEoJGJsYWNrLCAuMDc1KSwgMCAwIDVweCByZ2JhKCRjdXN0b20tc2VsZWN0LWZvY3VzLWJvcmRlci1jb2xvciwgLjUpIDtcclxuLy8kY3VzdG9tLXNlbGVjdC1mb250LXNpemUtc206IDc1JSA7XHJcbi8vJGN1c3RvbS1zZWxlY3QtaGVpZ2h0LXNtOiAkaW5wdXQtaGVpZ2h0LXNtIDtcclxuLy8kY3VzdG9tLXNlbGVjdC1mb250LXNpemUtbGc6IDEyNSUgO1xyXG4vLyRjdXN0b20tc2VsZWN0LWhlaWdodC1sZzogJGlucHV0LWhlaWdodC1sZyA7XHJcbi8vJGN1c3RvbS1yYW5nZS10cmFjay13aWR0aDogMTAwJSA7XHJcbi8vJGN1c3RvbS1yYW5nZS10cmFjay1oZWlnaHQ6IC41cmVtIDtcclxuLy8kY3VzdG9tLXJhbmdlLXRyYWNrLWN1cnNvcjogcG9pbnRlciA7XHJcbi8vJGN1c3RvbS1yYW5nZS10cmFjay1iZzogJGdyYXktMzAwIDtcclxuLy8kY3VzdG9tLXJhbmdlLXRyYWNrLWJvcmRlci1yYWRpdXM6IDFyZW0gO1xyXG4vLyRjdXN0b20tcmFuZ2UtdHJhY2stYm94LXNoYWRvdzogaW5zZXQgMCAuMjVyZW0gLjI1cmVtIHJnYmEoJGJsYWNrLCAuMSkgO1xyXG4vLyRjdXN0b20tcmFuZ2UtdGh1bWItd2lkdGg6IDFyZW0gO1xyXG4vLyRjdXN0b20tcmFuZ2UtdGh1bWItaGVpZ2h0OiAkY3VzdG9tLXJhbmdlLXRodW1iLXdpZHRoIDtcclxuLy8kY3VzdG9tLXJhbmdlLXRodW1iLWJnOiAkY29tcG9uZW50LWFjdGl2ZS1iZyA7XHJcbi8vJGN1c3RvbS1yYW5nZS10aHVtYi1ib3JkZXI6IDAgO1xyXG4vLyRjdXN0b20tcmFuZ2UtdGh1bWItYm9yZGVyLXJhZGl1czogMXJlbSA7XHJcbi8vJGN1c3RvbS1yYW5nZS10aHVtYi1ib3gtc2hhZG93OiAwIC4xcmVtIC4yNXJlbSByZ2JhKCRibGFjaywgLjEpIDtcclxuLy8kY3VzdG9tLXJhbmdlLXRodW1iLWZvY3VzLWJveC1zaGFkb3c6IDAgMCAwIDFweCAkYm9keS1iZywgJGlucHV0LWJ0bi1mb2N1cy1ib3gtc2hhZG93IDtcclxuLy8kY3VzdG9tLXJhbmdlLXRodW1iLWFjdGl2ZS1iZzogbGlnaHRlbigkY29tcG9uZW50LWFjdGl2ZS1iZywgMzUlKSA7XHJcbi8vJGN1c3RvbS1maWxlLWhlaWdodDogJGlucHV0LWhlaWdodCA7XHJcbi8vJGN1c3RvbS1maWxlLWhlaWdodC1pbm5lcjogJGlucHV0LWhlaWdodC1pbm5lciA7XHJcbi8vJGN1c3RvbS1maWxlLWZvY3VzLWJvcmRlci1jb2xvcjogJGlucHV0LWZvY3VzLWJvcmRlci1jb2xvciA7XHJcbi8vJGN1c3RvbS1maWxlLWZvY3VzLWJveC1zaGFkb3c6ICRpbnB1dC1idG4tZm9jdXMtYm94LXNoYWRvdyA7XHJcbi8vJGN1c3RvbS1maWxlLXBhZGRpbmcteTogJGlucHV0LWJ0bi1wYWRkaW5nLXkgO1xyXG4vLyRjdXN0b20tZmlsZS1wYWRkaW5nLXg6ICRpbnB1dC1idG4tcGFkZGluZy14IDtcclxuLy8kY3VzdG9tLWZpbGUtbGluZS1oZWlnaHQ6ICRpbnB1dC1idG4tbGluZS1oZWlnaHQgO1xyXG4vLyRjdXN0b20tZmlsZS1jb2xvcjogJGlucHV0LWNvbG9yIDtcclxuLy8kY3VzdG9tLWZpbGUtYmc6ICRpbnB1dC1iZyA7XHJcbi8vJGN1c3RvbS1maWxlLWJvcmRlci13aWR0aDogJGlucHV0LWJ0bi1ib3JkZXItd2lkdGggO1xyXG4vLyRjdXN0b20tZmlsZS1ib3JkZXItY29sb3I6ICRpbnB1dC1ib3JkZXItY29sb3IgO1xyXG4vLyRjdXN0b20tZmlsZS1ib3JkZXItcmFkaXVzOiAkaW5wdXQtYm9yZGVyLXJhZGl1cyA7XHJcbi8vJGN1c3RvbS1maWxlLWJveC1zaGFkb3c6ICRpbnB1dC1ib3gtc2hhZG93IDtcclxuLy8kY3VzdG9tLWZpbGUtYnV0dG9uLWNvbG9yOiAkY3VzdG9tLWZpbGUtY29sb3IgO1xyXG4vLyRjdXN0b20tZmlsZS1idXR0b24tYmc6ICRpbnB1dC1ncm91cC1hZGRvbi1iZyA7XHJcbi8vJGN1c3RvbS1maWxlLXRleHQ6ICggZW46IFwiQnJvd3NlXCIgKSA7XHJcbi8vIEZvcm0gdmFsaWRhdGlvblxyXG4vLyRmb3JtLWZlZWRiYWNrLW1hcmdpbi10b3A6ICRmb3JtLXRleHQtbWFyZ2luLXRvcCA7XHJcbi8vJGZvcm0tZmVlZGJhY2stZm9udC1zaXplOiAkc21hbGwtZm9udC1zaXplIDtcclxuLy8kZm9ybS1mZWVkYmFjay12YWxpZC1jb2xvcjogdGhlbWUtY29sb3IoXCJzdWNjZXNzXCIpIDtcclxuLy8kZm9ybS1mZWVkYmFjay1pbnZhbGlkLWNvbG9yOiB0aGVtZS1jb2xvcihcImRhbmdlclwiKSA7XHJcbi8vIERyb3Bkb3duc1xyXG4vL1xyXG4vLyBEcm9wZG93biBtZW51IGNvbnRhaW5lciBhbmQgY29udGVudHMuXHJcbi8vJGRyb3Bkb3duLW1pbi13aWR0aDogMTByZW0gO1xyXG4vLyRkcm9wZG93bi1wYWRkaW5nLXk6IC41cmVtIDtcclxuLy8kZHJvcGRvd24tc3BhY2VyOiAuMTI1cmVtIDtcclxuLy8kZHJvcGRvd24tYmc6ICR3aGl0ZSA7XHJcbi8vJGRyb3Bkb3duLWJvcmRlci1jb2xvcjogcmdiYSgkYmxhY2ssIC4xNSkgO1xyXG4vLyRkcm9wZG93bi1ib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1cyA7XHJcbi8vJGRyb3Bkb3duLWJvcmRlci13aWR0aDogJGJvcmRlci13aWR0aCA7XHJcbi8vJGRyb3Bkb3duLWRpdmlkZXItYmc6ICRncmF5LTIwMCA7XHJcbi8vJGRyb3Bkb3duLWJveC1zaGFkb3c6IDAgLjVyZW0gMXJlbSByZ2JhKCRibGFjaywgLjE3NSkgO1xyXG4vLyRkcm9wZG93bi1saW5rLWNvbG9yOiAkZ3JheS05MDAgO1xyXG4vLyRkcm9wZG93bi1saW5rLWhvdmVyLWNvbG9yOiBkYXJrZW4oJGdyYXktOTAwLCA1JSkgO1xyXG4vLyRkcm9wZG93bi1saW5rLWhvdmVyLWJnOiAkZ3JheS0xMDAgO1xyXG4vLyRkcm9wZG93bi1saW5rLWFjdGl2ZS1jb2xvcjogJGNvbXBvbmVudC1hY3RpdmUtY29sb3IgO1xyXG4vLyRkcm9wZG93bi1saW5rLWFjdGl2ZS1iZzogJGNvbXBvbmVudC1hY3RpdmUtYmcgO1xyXG4vLyRkcm9wZG93bi1saW5rLWRpc2FibGVkLWNvbG9yOiAkZ3JheS02MDAgO1xyXG4vLyRkcm9wZG93bi1pdGVtLXBhZGRpbmcteTogLjI1cmVtIDtcclxuLy8kZHJvcGRvd24taXRlbS1wYWRkaW5nLXg6IDEuNXJlbSA7XHJcbi8vJGRyb3Bkb3duLWhlYWRlci1jb2xvcjogJGdyYXktNjAwIDtcclxuLy8gWi1pbmRleCBtYXN0ZXIgbGlzdFxyXG4vL1xyXG4vLyBXYXJuaW5nOiBBdm9pZCBjdXN0b21pemluZyB0aGVzZSB2YWx1ZXMuIFRoZXkncmUgdXNlZCBmb3IgYSBiaXJkJ3MgZXllIHZpZXdcclxuLy8gb2YgY29tcG9uZW50cyBkZXBlbmRlbnQgb24gdGhlIHotYXhpcyBhbmQgYXJlIGRlc2lnbmVkIHRvIGFsbCB3b3JrIHRvZ2V0aGVyLlxyXG4vLyR6aW5kZXgtZHJvcGRvd246IDEwMDAgO1xyXG4vLyR6aW5kZXgtc3RpY2t5OiAxMDIwIDtcclxuLy8kemluZGV4LWZpeGVkOiAxMDMwIDtcclxuLy8kemluZGV4LW1vZGFsLWJhY2tkcm9wOiAxMDQwIDtcclxuLy8kemluZGV4LW1vZGFsOiAxMDUwIDtcclxuLy8kemluZGV4LXBvcG92ZXI6IDEwNjAgO1xyXG4vLyR6aW5kZXgtdG9vbHRpcDogMTA3MCA7XHJcbi8vIE5hdnNcclxuLy8kbmF2LWxpbmstcGFkZGluZy15OiAuNXJlbSA7XHJcbi8vJG5hdi1saW5rLXBhZGRpbmcteDogMXJlbSA7XHJcbi8vJG5hdi1saW5rLWRpc2FibGVkLWNvbG9yOiAkZ3JheS02MDAgO1xyXG4vLyRuYXYtdGFicy1ib3JkZXItY29sb3I6ICRncmF5LTMwMCA7XHJcbi8vJG5hdi10YWJzLWJvcmRlci13aWR0aDogJGJvcmRlci13aWR0aCA7XHJcbi8vJG5hdi10YWJzLWJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzIDtcclxuLy8kbmF2LXRhYnMtbGluay1ob3Zlci1ib3JkZXItY29sb3I6ICRncmF5LTIwMCAkZ3JheS0yMDAgJG5hdi10YWJzLWJvcmRlci1jb2xvciA7XHJcbi8vJG5hdi10YWJzLWxpbmstYWN0aXZlLWNvbG9yOiAkZ3JheS03MDAgO1xyXG4vLyRuYXYtdGFicy1saW5rLWFjdGl2ZS1iZzogJGJvZHktYmcgO1xyXG4vLyRuYXYtdGFicy1saW5rLWFjdGl2ZS1ib3JkZXItY29sb3I6ICRncmF5LTMwMCAkZ3JheS0zMDAgJG5hdi10YWJzLWxpbmstYWN0aXZlLWJnIDtcclxuLy8kbmF2LXBpbGxzLWJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzIDtcclxuLy8kbmF2LXBpbGxzLWxpbmstYWN0aXZlLWNvbG9yOiAkY29tcG9uZW50LWFjdGl2ZS1jb2xvciA7XHJcbi8vJG5hdi1waWxscy1saW5rLWFjdGl2ZS1iZzogJGNvbXBvbmVudC1hY3RpdmUtYmcgO1xyXG4vLyRuYXYtZGl2aWRlci1jb2xvcjogJGdyYXktMjAwIDtcclxuLy8kbmF2LWRpdmlkZXItbWFyZ2luLXk6ICgkc3BhY2VyIC8gMikgO1xyXG4vLyBOYXZiYXJcclxuLy8kbmF2YmFyLXBhZGRpbmcteTogKCRzcGFjZXIgLyAyKSA7XHJcbi8vJG5hdmJhci1wYWRkaW5nLXg6ICRzcGFjZXIgO1xyXG4vLyRuYXZiYXItbmF2LWxpbmstcGFkZGluZy14OiAuNXJlbSA7XHJcbi8vJG5hdmJhci1icmFuZC1mb250LXNpemU6ICRmb250LXNpemUtbGcgO1xyXG4vLyBDb21wdXRlIHRoZSBuYXZiYXItYnJhbmQgcGFkZGluZy15IHNvIHRoZSBuYXZiYXItYnJhbmQgd2lsbCBoYXZlIHRoZSBzYW1lIGhlaWdodCBhcyBuYXZiYXItdGV4dCBhbmQgbmF2LWxpbmtcclxuLy8kbmF2LWxpbmstaGVpZ2h0OiAoJGZvbnQtc2l6ZS1iYXNlICogJGxpbmUtaGVpZ2h0LWJhc2UgKyAkbmF2LWxpbmstcGFkZGluZy15ICogMikgO1xyXG4vLyRuYXZiYXItYnJhbmQtaGVpZ2h0OiAkbmF2YmFyLWJyYW5kLWZvbnQtc2l6ZSAqICRsaW5lLWhlaWdodC1iYXNlIDtcclxuLy8kbmF2YmFyLWJyYW5kLXBhZGRpbmcteTogKCRuYXYtbGluay1oZWlnaHQgLSAkbmF2YmFyLWJyYW5kLWhlaWdodCkgLyAyIDtcclxuLy8kbmF2YmFyLXRvZ2dsZXItcGFkZGluZy15OiAuMjVyZW0gO1xyXG4vLyRuYXZiYXItdG9nZ2xlci1wYWRkaW5nLXg6IC43NXJlbSA7XHJcbi8vJG5hdmJhci10b2dnbGVyLWZvbnQtc2l6ZTogJGZvbnQtc2l6ZS1sZyA7XHJcbi8vJG5hdmJhci10b2dnbGVyLWJvcmRlci1yYWRpdXM6ICRidG4tYm9yZGVyLXJhZGl1cyA7XHJcbiRuYXZiYXItZGFyay1jb2xvcjogcmdiYSgkd2hpdGUsIC41KTtcclxuJG5hdmJhci1kYXJrLWhvdmVyLWNvbG9yOiByZ2JhKCR3aGl0ZSwgLjc1KSA7XHJcbiRuYXZiYXItZGFyay1hY3RpdmUtY29sb3I6ICR3aGl0ZSA7XHJcbiRuYXZiYXItZGFyay1kaXNhYmxlZC1jb2xvcjogcmdiYSgkd2hpdGUsIC4yNSkgO1xyXG4vLyRuYXZiYXItZGFyay10b2dnbGVyLWljb24tYmc6IHN0ci1yZXBsYWNlKHVybChcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIHZpZXdCb3g9JzAgMCAzMCAzMCcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggc3Ryb2tlPScjeyRuYXZiYXItZGFyay1jb2xvcn0nIHN0cm9rZS13aWR0aD0nMicgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBzdHJva2UtbWl0ZXJsaW1pdD0nMTAnIGQ9J000IDdoMjJNNCAxNWgyMk00IDIzaDIyJy8lM0UlM0Mvc3ZnJTNFXCIpLCBcIiNcIiwgXCIlMjNcIikgO1xyXG4kbmF2YmFyLWRhcmstdG9nZ2xlci1ib3JkZXItY29sb3I6IHJnYmEoJHdoaXRlLCAuMSkgO1xyXG5cclxuJG5hdmJhci1saWdodC1jb2xvcjogcmdiYSgkYmxhY2ssIC41KSA7XHJcbiRuYXZiYXItbGlnaHQtaG92ZXItY29sb3I6IHJnYmEoJGJsYWNrLCAuNykgO1xyXG4kbmF2YmFyLWxpZ2h0LWFjdGl2ZS1jb2xvcjogcmdiYSgkYmxhY2ssIC45KSA7XHJcbiRuYXZiYXItbGlnaHQtZGlzYWJsZWQtY29sb3I6IHJnYmEoJGJsYWNrLCAuMykgO1xyXG4vLyRuYXZiYXItbGlnaHQtdG9nZ2xlci1pY29uLWJnOiBzdHItcmVwbGFjZSh1cmwoXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyB2aWV3Qm94PScwIDAgMzAgMzAnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NwYXRoIHN0cm9rZT0nI3skbmF2YmFyLWxpZ2h0LWNvbG9yfScgc3Ryb2tlLXdpZHRoPScyJyBzdHJva2UtbGluZWNhcD0ncm91bmQnIHN0cm9rZS1taXRlcmxpbWl0PScxMCcgZD0nTTQgN2gyMk00IDE1aDIyTTQgMjNoMjInLyUzRSUzQy9zdmclM0VcIiksIFwiI1wiLCBcIiUyM1wiKSA7XHJcbiRuYXZiYXItbGlnaHQtdG9nZ2xlci1ib3JkZXItY29sb3I6IHJnYmEoJGJsYWNrLCAuMSkgO1xyXG5cclxuLy8gUGFnaW5hdGlvblxyXG5cclxuLy8kcGFnaW5hdGlvbi1wYWRkaW5nLXk6IC41cmVtIDtcclxuLy8kcGFnaW5hdGlvbi1wYWRkaW5nLXg6IC43NXJlbSA7XHJcbi8vJHBhZ2luYXRpb24tcGFkZGluZy15LXNtOiAuMjVyZW0gO1xyXG4vLyRwYWdpbmF0aW9uLXBhZGRpbmcteC1zbTogLjVyZW0gO1xyXG4vLyRwYWdpbmF0aW9uLXBhZGRpbmcteS1sZzogLjc1cmVtIDtcclxuLy8kcGFnaW5hdGlvbi1wYWRkaW5nLXgtbGc6IDEuNXJlbSA7XHJcbi8vJHBhZ2luYXRpb24tbGluZS1oZWlnaHQ6IDEuMjUgO1xyXG5cclxuLy8kcGFnaW5hdGlvbi1jb2xvcjogJGxpbmstY29sb3IgO1xyXG4vLyRwYWdpbmF0aW9uLWJnOiAkd2hpdGUgO1xyXG4vLyRwYWdpbmF0aW9uLWJvcmRlci13aWR0aDogJGJvcmRlci13aWR0aCA7XHJcbi8vJHBhZ2luYXRpb24tYm9yZGVyLWNvbG9yOiAkZ3JheS0zMDAgO1xyXG5cclxuLy8kcGFnaW5hdGlvbi1mb2N1cy1ib3gtc2hhZG93OiAkaW5wdXQtYnRuLWZvY3VzLWJveC1zaGFkb3cgO1xyXG4vLyRwYWdpbmF0aW9uLWZvY3VzLW91dGxpbmU6IDAgO1xyXG5cclxuLy8kcGFnaW5hdGlvbi1ob3Zlci1jb2xvcjogJGxpbmstaG92ZXItY29sb3IgO1xyXG4vLyRwYWdpbmF0aW9uLWhvdmVyLWJnOiAkZ3JheS0yMDAgO1xyXG4vLyRwYWdpbmF0aW9uLWhvdmVyLWJvcmRlci1jb2xvcjogJGdyYXktMzAwIDtcclxuXHJcbi8vJHBhZ2luYXRpb24tYWN0aXZlLWNvbG9yOiAkY29tcG9uZW50LWFjdGl2ZS1jb2xvciA7XHJcbi8vJHBhZ2luYXRpb24tYWN0aXZlLWJnOiAkY29tcG9uZW50LWFjdGl2ZS1iZyA7XHJcbi8vJHBhZ2luYXRpb24tYWN0aXZlLWJvcmRlci1jb2xvcjogJHBhZ2luYXRpb24tYWN0aXZlLWJnIDtcclxuXHJcbi8vJHBhZ2luYXRpb24tZGlzYWJsZWQtY29sb3I6ICRncmF5LTYwMCA7XHJcbi8vJHBhZ2luYXRpb24tZGlzYWJsZWQtYmc6ICR3aGl0ZSA7XHJcbi8vJHBhZ2luYXRpb24tZGlzYWJsZWQtYm9yZGVyLWNvbG9yOiAkZ3JheS0zMDAgO1xyXG5cclxuXHJcbi8vIEp1bWJvdHJvblxyXG5cclxuLy8kanVtYm90cm9uLXBhZGRpbmc6IDJyZW0gO1xyXG4vLyRqdW1ib3Ryb24tYmc6ICRncmF5LTIwMCA7XHJcblxyXG5cclxuLy8gQ2FyZHNcclxuXHJcbi8vJGNhcmQtc3BhY2VyLXk6IC43NXJlbSA7XHJcbi8vJGNhcmQtc3BhY2VyLXg6IDEuMjVyZW0gO1xyXG4vLyRjYXJkLWJvcmRlci13aWR0aDogJGJvcmRlci13aWR0aCA7XHJcbi8vJGNhcmQtYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXMgO1xyXG4vLyRjYXJkLWJvcmRlci1jb2xvcjogcmdiYSgkYmxhY2ssIC4xMjUpIDtcclxuLy8kY2FyZC1pbm5lci1ib3JkZXItcmFkaXVzOiBjYWxjKCN7JGNhcmQtYm9yZGVyLXJhZGl1c30gLSAjeyRjYXJkLWJvcmRlci13aWR0aH0pIDtcclxuLy8kY2FyZC1jYXAtYmc6IHJnYmEoJGJsYWNrLCAuMDMpIDtcclxuLy8kY2FyZC1iZzogJHdoaXRlIDtcclxuXHJcbi8vJGNhcmQtaW1nLW92ZXJsYXktcGFkZGluZzogMS4yNXJlbSA7XHJcblxyXG4vLyRjYXJkLWdyb3VwLW1hcmdpbjogKCRncmlkLWd1dHRlci13aWR0aCAvIDIpIDtcclxuLy8kY2FyZC1kZWNrLW1hcmdpbjogJGNhcmQtZ3JvdXAtbWFyZ2luIDtcclxuXHJcbi8vJGNhcmQtY29sdW1ucy1jb3VudDogMyA7XHJcbi8vJGNhcmQtY29sdW1ucy1nYXA6IDEuMjVyZW0gO1xyXG4vLyRjYXJkLWNvbHVtbnMtbWFyZ2luOiAkY2FyZC1zcGFjZXIteSA7XHJcblxyXG5cclxuLy8gVG9vbHRpcHNcclxuXHJcbi8vJHRvb2x0aXAtZm9udC1zaXplOiAkZm9udC1zaXplLXNtIDtcclxuLy8kdG9vbHRpcC1tYXgtd2lkdGg6IDIwMHB4IDtcclxuLy8kdG9vbHRpcC1jb2xvcjogJHdoaXRlIDtcclxuLy8kdG9vbHRpcC1iZzogJGJsYWNrIDtcclxuLy8kdG9vbHRpcC1ib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1cyA7XHJcbi8vJHRvb2x0aXAtb3BhY2l0eTogLjkgO1xyXG4vLyR0b29sdGlwLXBhZGRpbmcteTogLjI1cmVtIDtcclxuLy8kdG9vbHRpcC1wYWRkaW5nLXg6IC41cmVtIDtcclxuLy8kdG9vbHRpcC1tYXJnaW46IDAgO1xyXG5cclxuLy8kdG9vbHRpcC1hcnJvdy13aWR0aDogLjhyZW0gO1xyXG4vLyR0b29sdGlwLWFycm93LWhlaWdodDogLjRyZW0gO1xyXG4vLyR0b29sdGlwLWFycm93LWNvbG9yOiAkdG9vbHRpcC1iZyA7XHJcblxyXG5cclxuLy8gUG9wb3ZlcnNcclxuXHJcbi8vJHBvcG92ZXItZm9udC1zaXplOiAkZm9udC1zaXplLXNtIDtcclxuLy8kcG9wb3Zlci1iZzogJHdoaXRlIDtcclxuLy8kcG9wb3Zlci1tYXgtd2lkdGg6IDI3NnB4IDtcclxuLy8kcG9wb3Zlci1ib3JkZXItd2lkdGg6ICRib3JkZXItd2lkdGggO1xyXG4vLyRwb3BvdmVyLWJvcmRlci1jb2xvcjogcmdiYSgkYmxhY2ssIC4yKSA7XHJcbi8vJHBvcG92ZXItYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXMtbGcgO1xyXG4vLyRwb3BvdmVyLWJveC1zaGFkb3c6IDAgLjI1cmVtIC41cmVtIHJnYmEoJGJsYWNrLCAuMikgO1xyXG5cclxuLy8kcG9wb3Zlci1oZWFkZXItYmc6IGRhcmtlbigkcG9wb3Zlci1iZywgMyUpIDtcclxuLy8kcG9wb3Zlci1oZWFkZXItY29sb3I6ICRoZWFkaW5ncy1jb2xvciA7XHJcbi8vJHBvcG92ZXItaGVhZGVyLXBhZGRpbmcteTogLjVyZW0gO1xyXG4vLyRwb3BvdmVyLWhlYWRlci1wYWRkaW5nLXg6IC43NXJlbSA7XHJcblxyXG4vLyRwb3BvdmVyLWJvZHktY29sb3I6ICRib2R5LWNvbG9yIDtcclxuLy8kcG9wb3Zlci1ib2R5LXBhZGRpbmcteTogJHBvcG92ZXItaGVhZGVyLXBhZGRpbmcteSA7XHJcbi8vJHBvcG92ZXItYm9keS1wYWRkaW5nLXg6ICRwb3BvdmVyLWhlYWRlci1wYWRkaW5nLXggO1xyXG5cclxuLy8kcG9wb3Zlci1hcnJvdy13aWR0aDogMXJlbSA7XHJcbi8vJHBvcG92ZXItYXJyb3ctaGVpZ2h0OiAuNXJlbSA7XHJcbi8vJHBvcG92ZXItYXJyb3ctY29sb3I6ICRwb3BvdmVyLWJnIDtcclxuXHJcbi8vJHBvcG92ZXItYXJyb3ctb3V0ZXItY29sb3I6IGZhZGUtaW4oJHBvcG92ZXItYm9yZGVyLWNvbG9yLCAuMDUpIDtcclxuXHJcblxyXG4vLyBCYWRnZXNcclxuXHJcbi8vJGJhZGdlLWZvbnQtc2l6ZTogNzUlIDtcclxuLy8kYmFkZ2UtZm9udC13ZWlnaHQ6ICRmb250LXdlaWdodC1ib2xkIDtcclxuLy8kYmFkZ2UtcGFkZGluZy15OiAuMjVlbSA7XHJcbi8vJGJhZGdlLXBhZGRpbmcteDogLjRlbSA7XHJcbi8vJGJhZGdlLWJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzIDtcclxuXHJcbi8vJGJhZGdlLXBpbGwtcGFkZGluZy14OiAuNmVtIDtcclxuLy8gVXNlIGEgaGlnaGVyIHRoYW4gbm9ybWFsIHZhbHVlIHRvIGVuc3VyZSBjb21wbGV0ZWx5IHJvdW5kZWQgZWRnZXMgd2hlblxyXG4vLyBjdXN0b21pemluZyBwYWRkaW5nIG9yIGZvbnQtc2l6ZSBvbiBsYWJlbHMuXHJcbi8vJGJhZGdlLXBpbGwtYm9yZGVyLXJhZGl1czogMTByZW0gO1xyXG5cclxuXHJcbi8vIE1vZGFsc1xyXG5cclxuLy8gUGFkZGluZyBhcHBsaWVkIHRvIHRoZSBtb2RhbCBib2R5XHJcbi8vJG1vZGFsLWlubmVyLXBhZGRpbmc6IDFyZW0gO1xyXG5cclxuLy8kbW9kYWwtZGlhbG9nLW1hcmdpbjogLjVyZW0gO1xyXG4vLyRtb2RhbC1kaWFsb2ctbWFyZ2luLXktc20tdXA6IDEuNzVyZW0gO1xyXG5cclxuLy8kbW9kYWwtdGl0bGUtbGluZS1oZWlnaHQ6ICRsaW5lLWhlaWdodC1iYXNlIDtcclxuXHJcbi8vJG1vZGFsLWNvbnRlbnQtYmc6ICR3aGl0ZSA7XHJcbi8vJG1vZGFsLWNvbnRlbnQtYm9yZGVyLWNvbG9yOiByZ2JhKCRibGFjaywgLjIpIDtcclxuLy8kbW9kYWwtY29udGVudC1ib3JkZXItd2lkdGg6ICRib3JkZXItd2lkdGggO1xyXG4vLyRtb2RhbC1jb250ZW50LWJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzLWxnIDtcclxuLy8kbW9kYWwtY29udGVudC1ib3gtc2hhZG93LXhzOiAwIC4yNXJlbSAuNXJlbSByZ2JhKCRibGFjaywgLjUpIDtcclxuLy8kbW9kYWwtY29udGVudC1ib3gtc2hhZG93LXNtLXVwOiAwIC41cmVtIDFyZW0gcmdiYSgkYmxhY2ssIC41KSA7XHJcblxyXG4vLyRtb2RhbC1iYWNrZHJvcC1iZzogJGJsYWNrIDtcclxuLy8kbW9kYWwtYmFja2Ryb3Atb3BhY2l0eTogLjUgO1xyXG4vLyRtb2RhbC1oZWFkZXItYm9yZGVyLWNvbG9yOiAkZ3JheS0yMDAgO1xyXG4vLyRtb2RhbC1mb290ZXItYm9yZGVyLWNvbG9yOiAkbW9kYWwtaGVhZGVyLWJvcmRlci1jb2xvciA7XHJcbi8vJG1vZGFsLWhlYWRlci1ib3JkZXItd2lkdGg6ICRtb2RhbC1jb250ZW50LWJvcmRlci13aWR0aCA7XHJcbi8vJG1vZGFsLWZvb3Rlci1ib3JkZXItd2lkdGg6ICRtb2RhbC1oZWFkZXItYm9yZGVyLXdpZHRoIDtcclxuLy8kbW9kYWwtaGVhZGVyLXBhZGRpbmc6IDFyZW0gO1xyXG5cclxuLy8kbW9kYWwtbGc6IDgwMHB4IDtcclxuLy8kbW9kYWwtbWQ6IDUwMHB4IDtcclxuLy8kbW9kYWwtc206IDMwMHB4IDtcclxuXHJcbi8vJG1vZGFsLXRyYW5zaXRpb246IHRyYW5zZm9ybSAuM3MgZWFzZS1vdXQgO1xyXG5cclxuXHJcbi8vIEFsZXJ0c1xyXG4vL1xyXG4vLyBEZWZpbmUgYWxlcnQgY29sb3JzLCBib3JkZXIgcmFkaXVzLCBhbmQgcGFkZGluZy5cclxuXHJcbi8vJGFsZXJ0LXBhZGRpbmcteTogLjc1cmVtIDtcclxuLy8kYWxlcnQtcGFkZGluZy14OiAxLjI1cmVtIDtcclxuLy8kYWxlcnQtbWFyZ2luLWJvdHRvbTogMXJlbSA7XHJcbi8vJGFsZXJ0LWJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzIDtcclxuLy8kYWxlcnQtbGluay1mb250LXdlaWdodDogJGZvbnQtd2VpZ2h0LWJvbGQgO1xyXG4vLyRhbGVydC1ib3JkZXItd2lkdGg6ICRib3JkZXItd2lkdGggO1xyXG5cclxuLy8kYWxlcnQtYmctbGV2ZWw6IC0xMCA7XHJcbi8vJGFsZXJ0LWJvcmRlci1sZXZlbDogLTkgO1xyXG4vLyRhbGVydC1jb2xvci1sZXZlbDogNiA7XHJcblxyXG5cclxuLy8gUHJvZ3Jlc3MgYmFyc1xyXG5cclxuLy8kcHJvZ3Jlc3MtaGVpZ2h0OiAxcmVtIDtcclxuLy8kcHJvZ3Jlc3MtZm9udC1zaXplOiAoJGZvbnQtc2l6ZS1iYXNlICogLjc1KSA7XHJcbi8vJHByb2dyZXNzLWJnOiAkZ3JheS0yMDAgO1xyXG4vLyRwcm9ncmVzcy1ib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1cyA7XHJcbi8vJHByb2dyZXNzLWJveC1zaGFkb3c6IGluc2V0IDAgLjFyZW0gLjFyZW0gcmdiYSgkYmxhY2ssIC4xKSA7XHJcbi8vJHByb2dyZXNzLWJhci1jb2xvcjogJHdoaXRlIDtcclxuLy8kcHJvZ3Jlc3MtYmFyLWJnOiB0aGVtZS1jb2xvcihcInByaW1hcnlcIikgO1xyXG4vLyRwcm9ncmVzcy1iYXItYW5pbWF0aW9uLXRpbWluZzogMXMgbGluZWFyIGluZmluaXRlIDtcclxuLy8kcHJvZ3Jlc3MtYmFyLXRyYW5zaXRpb246IHdpZHRoIC42cyBlYXNlIDtcclxuXHJcbi8vIExpc3QgZ3JvdXBcclxuXHJcbi8vJGxpc3QtZ3JvdXAtYmc6ICR3aGl0ZSA7XHJcbi8vJGxpc3QtZ3JvdXAtYm9yZGVyLWNvbG9yOiByZ2JhKCRibGFjaywgLjEyNSkgO1xyXG4vLyRsaXN0LWdyb3VwLWJvcmRlci13aWR0aDogJGJvcmRlci13aWR0aCA7XHJcbi8vJGxpc3QtZ3JvdXAtYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXMgO1xyXG5cclxuLy8kbGlzdC1ncm91cC1pdGVtLXBhZGRpbmcteTogLjc1cmVtIDtcclxuLy8kbGlzdC1ncm91cC1pdGVtLXBhZGRpbmcteDogMS4yNXJlbSA7XHJcblxyXG4vLyRsaXN0LWdyb3VwLWhvdmVyLWJnOiAkZ3JheS0xMDAgO1xyXG4vLyRsaXN0LWdyb3VwLWFjdGl2ZS1jb2xvcjogJGNvbXBvbmVudC1hY3RpdmUtY29sb3IgO1xyXG4vLyRsaXN0LWdyb3VwLWFjdGl2ZS1iZzogJGNvbXBvbmVudC1hY3RpdmUtYmcgO1xyXG4vLyRsaXN0LWdyb3VwLWFjdGl2ZS1ib3JkZXItY29sb3I6ICRsaXN0LWdyb3VwLWFjdGl2ZS1iZyA7XHJcblxyXG4vLyRsaXN0LWdyb3VwLWRpc2FibGVkLWNvbG9yOiAkZ3JheS02MDAgO1xyXG4vLyRsaXN0LWdyb3VwLWRpc2FibGVkLWJnOiAkbGlzdC1ncm91cC1iZyA7XHJcblxyXG4vLyRsaXN0LWdyb3VwLWFjdGlvbi1jb2xvcjogJGdyYXktNzAwIDtcclxuLy8kbGlzdC1ncm91cC1hY3Rpb24taG92ZXItY29sb3I6ICRsaXN0LWdyb3VwLWFjdGlvbi1jb2xvciA7XHJcblxyXG4vLyRsaXN0LWdyb3VwLWFjdGlvbi1hY3RpdmUtY29sb3I6ICRib2R5LWNvbG9yIDtcclxuLy8kbGlzdC1ncm91cC1hY3Rpb24tYWN0aXZlLWJnOiAkZ3JheS0yMDAgO1xyXG5cclxuXHJcbi8vIEltYWdlIHRodW1ibmFpbHNcclxuXHJcbi8vJHRodW1ibmFpbC1wYWRkaW5nOiAuMjVyZW0gO1xyXG4vLyR0aHVtYm5haWwtYmc6ICRib2R5LWJnIDtcclxuLy8kdGh1bWJuYWlsLWJvcmRlci13aWR0aDogJGJvcmRlci13aWR0aCA7XHJcbi8vJHRodW1ibmFpbC1ib3JkZXItY29sb3I6ICRncmF5LTMwMCA7XHJcbi8vJHRodW1ibmFpbC1ib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1cyA7XHJcbi8vJHRodW1ibmFpbC1ib3gtc2hhZG93OiAwIDFweCAycHggcmdiYSgkYmxhY2ssIC4wNzUpIDtcclxuXHJcblxyXG4vLyBGaWd1cmVzXHJcblxyXG4vLyRmaWd1cmUtY2FwdGlvbi1mb250LXNpemU6IDkwJSA7XHJcbi8vJGZpZ3VyZS1jYXB0aW9uLWNvbG9yOiAkZ3JheS02MDAgO1xyXG5cclxuXHJcbi8vIEJyZWFkY3J1bWJzXHJcblxyXG4vLyRicmVhZGNydW1iLXBhZGRpbmcteTogLjc1cmVtIDtcclxuLy8kYnJlYWRjcnVtYi1wYWRkaW5nLXg6IDFyZW0gO1xyXG4vLyRicmVhZGNydW1iLWl0ZW0tcGFkZGluZzogLjVyZW0gO1xyXG5cclxuLy8kYnJlYWRjcnVtYi1tYXJnaW4tYm90dG9tOiAxcmVtIDtcclxuXHJcbi8vJGJyZWFkY3J1bWItYmc6ICRncmF5LTIwMCA7XHJcbi8vJGJyZWFkY3J1bWItZGl2aWRlci1jb2xvcjogJGdyYXktNjAwIDtcclxuLy8kYnJlYWRjcnVtYi1hY3RpdmUtY29sb3I6ICRncmF5LTYwMCA7XHJcbi8vJGJyZWFkY3J1bWItZGl2aWRlcjogcXVvdGUoXCIvXCIpIDtcclxuXHJcbi8vJGJyZWFkY3J1bWItYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXMgO1xyXG5cclxuXHJcbi8vIENhcm91c2VsXHJcblxyXG4vLyRjYXJvdXNlbC1jb250cm9sLWNvbG9yOiAkd2hpdGUgO1xyXG4vLyRjYXJvdXNlbC1jb250cm9sLXdpZHRoOiAxNSUgO1xyXG4vLyRjYXJvdXNlbC1jb250cm9sLW9wYWNpdHk6IC41IDtcclxuXHJcbi8vJGNhcm91c2VsLWluZGljYXRvci13aWR0aDogMzBweCA7XHJcbi8vJGNhcm91c2VsLWluZGljYXRvci1oZWlnaHQ6IDNweCA7XHJcbi8vJGNhcm91c2VsLWluZGljYXRvci1zcGFjZXI6IDNweCA7XHJcbi8vJGNhcm91c2VsLWluZGljYXRvci1hY3RpdmUtYmc6ICR3aGl0ZSA7XHJcblxyXG4vLyRjYXJvdXNlbC1jYXB0aW9uLXdpZHRoOiA3MCUgO1xyXG4vLyRjYXJvdXNlbC1jYXB0aW9uLWNvbG9yOiAkd2hpdGUgO1xyXG5cclxuLy8kY2Fyb3VzZWwtY29udHJvbC1pY29uLXdpZHRoOiAyMHB4IDtcclxuXHJcbi8vJGNhcm91c2VsLWNvbnRyb2wtcHJldi1pY29uLWJnOiBzdHItcmVwbGFjZSh1cmwoXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIGZpbGw9JyN7JGNhcm91c2VsLWNvbnRyb2wtY29sb3J9JyB2aWV3Qm94PScwIDAgOCA4JyUzRSUzQ3BhdGggZD0nTTUuMjUgMGwtNCA0IDQgNCAxLjUtMS41LTIuNS0yLjUgMi41LTIuNS0xLjUtMS41eicvJTNFJTNDL3N2ZyUzRVwiKSwgXCIjXCIsIFwiJTIzXCIpIDtcclxuLy8kY2Fyb3VzZWwtY29udHJvbC1uZXh0LWljb24tYmc6IHN0ci1yZXBsYWNlKHVybChcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZycgZmlsbD0nI3skY2Fyb3VzZWwtY29udHJvbC1jb2xvcn0nIHZpZXdCb3g9JzAgMCA4IDgnJTNFJTNDcGF0aCBkPSdNMi43NSAwbC0xLjUgMS41IDIuNSAyLjUtMi41IDIuNSAxLjUgMS41IDQtNC00LTR6Jy8lM0UlM0Mvc3ZnJTNFXCIpLCBcIiNcIiwgXCIlMjNcIikgO1xyXG5cclxuLy8kY2Fyb3VzZWwtdHJhbnNpdGlvbjogdHJhbnNmb3JtIC42cyBlYXNlIDsgLy8gRGVmaW5lIHRyYW5zZm9ybSB0cmFuc2l0aW9uIGZpcnN0IGlmIHVzaW5nIG11bHRpcGxlIHRyYW5zaXRpb25zIChlLmcuLCBgdHJhbnNmb3JtIDJzIGVhc2UsIG9wYWNpdHkgLjVzIGVhc2Utb3V0YClcclxuXHJcblxyXG4vLyBDbG9zZVxyXG5cclxuLy8kY2xvc2UtZm9udC1zaXplOiAkZm9udC1zaXplLWJhc2UgKiAxLjUgO1xyXG4vLyRjbG9zZS1mb250LXdlaWdodDogJGZvbnQtd2VpZ2h0LWJvbGQgO1xyXG4vLyRjbG9zZS1jb2xvcjogJGJsYWNrIDtcclxuLy8kY2xvc2UtdGV4dC1zaGFkb3c6IDAgMXB4IDAgJHdoaXRlIDtcclxuXHJcbi8vIENvZGVcclxuXHJcbi8vJGNvZGUtZm9udC1zaXplOiA4Ny41JSA7XHJcbi8vJGNvZGUtY29sb3I6ICRwaW5rIDtcclxuXHJcbi8vJGtiZC1wYWRkaW5nLXk6IC4ycmVtIDtcclxuLy8ka2JkLXBhZGRpbmcteDogLjRyZW0gO1xyXG4vLyRrYmQtZm9udC1zaXplOiAkY29kZS1mb250LXNpemUgO1xyXG4vLyRrYmQtY29sb3I6ICR3aGl0ZSA7XHJcbi8vJGtiZC1iZzogJGdyYXktOTAwIDtcclxuXHJcbi8vJHByZS1jb2xvcjogJGdyYXktOTAwIDtcclxuLy8kcHJlLXNjcm9sbGFibGUtbWF4LWhlaWdodDogMzQwcHggO1xyXG5cclxuXHJcbi8vIFByaW50aW5nXHJcbi8vJHByaW50LXBhZ2Utc2l6ZTogYTMgO1xyXG4vLyRwcmludC1ib2R5LW1pbi13aWR0aDogbWFwLWdldCgkZ3JpZC1icmVha3BvaW50cywgXCJsZ1wiKSA7XHJcbiIsIi8vIHN0eWxlbGludC1kaXNhYmxlIHByb3BlcnR5LWRpc2FsbG93ZWQtbGlzdFxuLy8gU2luZ2xlIHNpZGUgYm9yZGVyLXJhZGl1c1xuXG4vLyBIZWxwZXIgZnVuY3Rpb24gdG8gcmVwbGFjZSBuZWdhdGl2ZSB2YWx1ZXMgd2l0aCAwXG5AZnVuY3Rpb24gdmFsaWQtcmFkaXVzKCRyYWRpdXMpIHtcbiAgJHJldHVybjogKCk7XG4gIEBlYWNoICR2YWx1ZSBpbiAkcmFkaXVzIHtcbiAgICBAaWYgdHlwZS1vZigkdmFsdWUpID09IG51bWJlciB7XG4gICAgICAkcmV0dXJuOiBhcHBlbmQoJHJldHVybiwgbWF4KCR2YWx1ZSwgMCkpO1xuICAgIH0gQGVsc2Uge1xuICAgICAgJHJldHVybjogYXBwZW5kKCRyZXR1cm4sICR2YWx1ZSk7XG4gICAgfVxuICB9XG4gIEByZXR1cm4gJHJldHVybjtcbn1cblxuLy8gc2Nzcy1kb2NzLXN0YXJ0IGJvcmRlci1yYWRpdXMtbWl4aW5zXG5AbWl4aW4gYm9yZGVyLXJhZGl1cygkcmFkaXVzOiAkYm9yZGVyLXJhZGl1cywgJGZhbGxiYWNrLWJvcmRlci1yYWRpdXM6IGZhbHNlKSB7XG4gIEBpZiAkZW5hYmxlLXJvdW5kZWQge1xuICAgIGJvcmRlci1yYWRpdXM6IHZhbGlkLXJhZGl1cygkcmFkaXVzKTtcbiAgfVxuICBAZWxzZSBpZiAkZmFsbGJhY2stYm9yZGVyLXJhZGl1cyAhPSBmYWxzZSB7XG4gICAgYm9yZGVyLXJhZGl1czogJGZhbGxiYWNrLWJvcmRlci1yYWRpdXM7XG4gIH1cbn1cblxuQG1peGluIGJvcmRlci10b3AtcmFkaXVzKCRyYWRpdXM6ICRib3JkZXItcmFkaXVzKSB7XG4gIEBpZiAkZW5hYmxlLXJvdW5kZWQge1xuICAgIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IHZhbGlkLXJhZGl1cygkcmFkaXVzKTtcbiAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogdmFsaWQtcmFkaXVzKCRyYWRpdXMpO1xuICB9XG59XG5cbkBtaXhpbiBib3JkZXItZW5kLXJhZGl1cygkcmFkaXVzOiAkYm9yZGVyLXJhZGl1cykge1xuICBAaWYgJGVuYWJsZS1yb3VuZGVkIHtcbiAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogdmFsaWQtcmFkaXVzKCRyYWRpdXMpO1xuICAgIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiB2YWxpZC1yYWRpdXMoJHJhZGl1cyk7XG4gIH1cbn1cblxuQG1peGluIGJvcmRlci1ib3R0b20tcmFkaXVzKCRyYWRpdXM6ICRib3JkZXItcmFkaXVzKSB7XG4gIEBpZiAkZW5hYmxlLXJvdW5kZWQge1xuICAgIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiB2YWxpZC1yYWRpdXMoJHJhZGl1cyk7XG4gICAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogdmFsaWQtcmFkaXVzKCRyYWRpdXMpO1xuICB9XG59XG5cbkBtaXhpbiBib3JkZXItc3RhcnQtcmFkaXVzKCRyYWRpdXM6ICRib3JkZXItcmFkaXVzKSB7XG4gIEBpZiAkZW5hYmxlLXJvdW5kZWQge1xuICAgIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IHZhbGlkLXJhZGl1cygkcmFkaXVzKTtcbiAgICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiB2YWxpZC1yYWRpdXMoJHJhZGl1cyk7XG4gIH1cbn1cblxuQG1peGluIGJvcmRlci10b3Atc3RhcnQtcmFkaXVzKCRyYWRpdXM6ICRib3JkZXItcmFkaXVzKSB7XG4gIEBpZiAkZW5hYmxlLXJvdW5kZWQge1xuICAgIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IHZhbGlkLXJhZGl1cygkcmFkaXVzKTtcbiAgfVxufVxuXG5AbWl4aW4gYm9yZGVyLXRvcC1lbmQtcmFkaXVzKCRyYWRpdXM6ICRib3JkZXItcmFkaXVzKSB7XG4gIEBpZiAkZW5hYmxlLXJvdW5kZWQge1xuICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiB2YWxpZC1yYWRpdXMoJHJhZGl1cyk7XG4gIH1cbn1cblxuQG1peGluIGJvcmRlci1ib3R0b20tZW5kLXJhZGl1cygkcmFkaXVzOiAkYm9yZGVyLXJhZGl1cykge1xuICBAaWYgJGVuYWJsZS1yb3VuZGVkIHtcbiAgICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogdmFsaWQtcmFkaXVzKCRyYWRpdXMpO1xuICB9XG59XG5cbkBtaXhpbiBib3JkZXItYm90dG9tLXN0YXJ0LXJhZGl1cygkcmFkaXVzOiAkYm9yZGVyLXJhZGl1cykge1xuICBAaWYgJGVuYWJsZS1yb3VuZGVkIHtcbiAgICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiB2YWxpZC1yYWRpdXMoJHJhZGl1cyk7XG4gIH1cbn1cbi8vIHNjc3MtZG9jcy1lbmQgYm9yZGVyLXJhZGl1cy1taXhpbnNcbiIsIi8vXG4vLyBIZWFkaW5nc1xuLy9cbi5oMSB7XG4gIEBleHRlbmQgaDE7XG59XG5cbi5oMiB7XG4gIEBleHRlbmQgaDI7XG59XG5cbi5oMyB7XG4gIEBleHRlbmQgaDM7XG59XG5cbi5oNCB7XG4gIEBleHRlbmQgaDQ7XG59XG5cbi5oNSB7XG4gIEBleHRlbmQgaDU7XG59XG5cbi5oNiB7XG4gIEBleHRlbmQgaDY7XG59XG5cblxuLmxlYWQge1xuICBAaW5jbHVkZSBmb250LXNpemUoJGxlYWQtZm9udC1zaXplKTtcbiAgZm9udC13ZWlnaHQ6ICRsZWFkLWZvbnQtd2VpZ2h0O1xufVxuXG4vLyBUeXBlIGRpc3BsYXkgY2xhc3Nlc1xuQGVhY2ggJGRpc3BsYXksICRmb250LXNpemUgaW4gJGRpc3BsYXktZm9udC1zaXplcyB7XG4gIC5kaXNwbGF5LSN7JGRpc3BsYXl9IHtcbiAgICBAaW5jbHVkZSBmb250LXNpemUoJGZvbnQtc2l6ZSk7XG4gICAgZm9udC13ZWlnaHQ6ICRkaXNwbGF5LWZvbnQtd2VpZ2h0O1xuICAgIGxpbmUtaGVpZ2h0OiAkZGlzcGxheS1saW5lLWhlaWdodDtcbiAgfVxufVxuXG4vL1xuLy8gRW1waGFzaXNcbi8vXG4uc21hbGwge1xuICBAZXh0ZW5kIHNtYWxsO1xufVxuXG4ubWFyayB7XG4gIEBleHRlbmQgbWFyaztcbn1cblxuLy9cbi8vIExpc3RzXG4vL1xuXG4ubGlzdC11bnN0eWxlZCB7XG4gIEBpbmNsdWRlIGxpc3QtdW5zdHlsZWQoKTtcbn1cblxuLy8gSW5saW5lIHR1cm5zIGxpc3QgaXRlbXMgaW50byBpbmxpbmUtYmxvY2tcbi5saXN0LWlubGluZSB7XG4gIEBpbmNsdWRlIGxpc3QtdW5zdHlsZWQoKTtcbn1cbi5saXN0LWlubGluZS1pdGVtIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuXG4gICY6bm90KDpsYXN0LWNoaWxkKSB7XG4gICAgbWFyZ2luLXJpZ2h0OiAkbGlzdC1pbmxpbmUtcGFkZGluZztcbiAgfVxufVxuXG5cbi8vXG4vLyBNaXNjXG4vL1xuXG4vLyBCdWlsZHMgb24gYGFiYnJgXG4uaW5pdGlhbGlzbSB7XG4gIEBpbmNsdWRlIGZvbnQtc2l6ZSgkaW5pdGlhbGlzbS1mb250LXNpemUpO1xuICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xufVxuXG4vLyBCbG9ja3F1b3Rlc1xuLmJsb2NrcXVvdGUge1xuICBtYXJnaW4tYm90dG9tOiAkYmxvY2txdW90ZS1tYXJnaW4teTtcbiAgQGluY2x1ZGUgZm9udC1zaXplKCRibG9ja3F1b3RlLWZvbnQtc2l6ZSk7XG5cbiAgPiA6bGFzdC1jaGlsZCB7XG4gICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgfVxufVxuXG4uYmxvY2txdW90ZS1mb290ZXIge1xuICBtYXJnaW4tdG9wOiAtJGJsb2NrcXVvdGUtbWFyZ2luLXk7XG4gIG1hcmdpbi1ib3R0b206ICRibG9ja3F1b3RlLW1hcmdpbi15O1xuICBAaW5jbHVkZSBmb250LXNpemUoJGJsb2NrcXVvdGUtZm9vdGVyLWZvbnQtc2l6ZSk7XG4gIGNvbG9yOiAkYmxvY2txdW90ZS1mb290ZXItY29sb3I7XG5cbiAgJjo6YmVmb3JlIHtcbiAgICBjb250ZW50OiBcIlxcMjAxNFxcMDBBMFwiOyAvLyBlbSBkYXNoLCBuYnNwXG4gIH1cbn1cbiIsIi8vIExpc3RzXG5cbi8vIFVuc3R5bGVkIGtlZXBzIGxpc3QgaXRlbXMgYmxvY2sgbGV2ZWwsIGp1c3QgcmVtb3ZlcyBkZWZhdWx0IGJyb3dzZXIgcGFkZGluZyBhbmQgbGlzdC1zdHlsZVxuQG1peGluIGxpc3QtdW5zdHlsZWQge1xuICBwYWRkaW5nLWxlZnQ6IDA7XG4gIGxpc3Qtc3R5bGU6IG5vbmU7XG59XG4iLCIvLyBSZXNwb25zaXZlIGltYWdlcyAoZW5zdXJlIGltYWdlcyBkb24ndCBzY2FsZSBiZXlvbmQgdGhlaXIgcGFyZW50cylcbi8vXG4vLyBUaGlzIGlzIHB1cnBvc2VmdWxseSBvcHQtaW4gdmlhIGFuIGV4cGxpY2l0IGNsYXNzIHJhdGhlciB0aGFuIGJlaW5nIHRoZSBkZWZhdWx0IGZvciBhbGwgYDxpbWc+YHMuXG4vLyBXZSBwcmV2aW91c2x5IHRyaWVkIHRoZSBcImltYWdlcyBhcmUgcmVzcG9uc2l2ZSBieSBkZWZhdWx0XCIgYXBwcm9hY2ggaW4gQm9vdHN0cmFwIHYyLFxuLy8gYW5kIGFiYW5kb25lZCBpdCBpbiBCb290c3RyYXAgdjMgYmVjYXVzZSBpdCBicmVha3MgbG90cyBvZiB0aGlyZC1wYXJ0eSB3aWRnZXRzIChpbmNsdWRpbmcgR29vZ2xlIE1hcHMpXG4vLyB3aGljaCB3ZXJlbid0IGV4cGVjdGluZyB0aGUgaW1hZ2VzIHdpdGhpbiB0aGVtc2VsdmVzIHRvIGJlIGludm9sdW50YXJpbHkgcmVzaXplZC5cbi8vIFNlZSBhbHNvIGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9pc3N1ZXMvMTgxNzhcbi5pbWctZmx1aWQge1xuICBAaW5jbHVkZSBpbWctZmx1aWQoKTtcbn1cblxuXG4vLyBJbWFnZSB0aHVtYm5haWxzXG4uaW1nLXRodW1ibmFpbCB7XG4gIHBhZGRpbmc6ICR0aHVtYm5haWwtcGFkZGluZztcbiAgYmFja2dyb3VuZC1jb2xvcjogJHRodW1ibmFpbC1iZztcbiAgYm9yZGVyOiAkdGh1bWJuYWlsLWJvcmRlci13aWR0aCBzb2xpZCAkdGh1bWJuYWlsLWJvcmRlci1jb2xvcjtcbiAgQGluY2x1ZGUgYm9yZGVyLXJhZGl1cygkdGh1bWJuYWlsLWJvcmRlci1yYWRpdXMpO1xuICBAaW5jbHVkZSBib3gtc2hhZG93KCR0aHVtYm5haWwtYm94LXNoYWRvdyk7XG5cbiAgLy8gS2VlcCB0aGVtIGF0IG1vc3QgMTAwJSB3aWRlXG4gIEBpbmNsdWRlIGltZy1mbHVpZCgpO1xufVxuXG4vL1xuLy8gRmlndXJlc1xuLy9cblxuLmZpZ3VyZSB7XG4gIC8vIEVuc3VyZXMgdGhlIGNhcHRpb24ncyB0ZXh0IGFsaWducyB3aXRoIHRoZSBpbWFnZS5cbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xufVxuXG4uZmlndXJlLWltZyB7XG4gIG1hcmdpbi1ib3R0b206ICRzcGFjZXIgKiAuNTtcbiAgbGluZS1oZWlnaHQ6IDE7XG59XG5cbi5maWd1cmUtY2FwdGlvbiB7XG4gIEBpbmNsdWRlIGZvbnQtc2l6ZSgkZmlndXJlLWNhcHRpb24tZm9udC1zaXplKTtcbiAgY29sb3I6ICRmaWd1cmUtY2FwdGlvbi1jb2xvcjtcbn1cbiIsIi8vIEltYWdlIE1peGluc1xuLy8gLSBSZXNwb25zaXZlIGltYWdlXG4vLyAtIFJldGluYSBpbWFnZVxuXG5cbi8vIFJlc3BvbnNpdmUgaW1hZ2Vcbi8vXG4vLyBLZWVwIGltYWdlcyBmcm9tIHNjYWxpbmcgYmV5b25kIHRoZSB3aWR0aCBvZiB0aGVpciBwYXJlbnRzLlxuXG5AbWl4aW4gaW1nLWZsdWlkIHtcbiAgLy8gUGFydCAxOiBTZXQgYSBtYXhpbXVtIHJlbGF0aXZlIHRvIHRoZSBwYXJlbnRcbiAgbWF4LXdpZHRoOiAxMDAlO1xuICAvLyBQYXJ0IDI6IE92ZXJyaWRlIHRoZSBoZWlnaHQgdG8gYXV0bywgb3RoZXJ3aXNlIGltYWdlcyB3aWxsIGJlIHN0cmV0Y2hlZFxuICAvLyB3aGVuIHNldHRpbmcgYSB3aWR0aCBhbmQgaGVpZ2h0IGF0dHJpYnV0ZSBvbiB0aGUgaW1nIGVsZW1lbnQuXG4gIGhlaWdodDogYXV0bztcbn1cbiIsIi8vIENvbnRhaW5lciB3aWR0aHNcbi8vXG4vLyBTZXQgdGhlIGNvbnRhaW5lciB3aWR0aCwgYW5kIG92ZXJyaWRlIGl0IGZvciBmaXhlZCBuYXZiYXJzIGluIG1lZGlhIHF1ZXJpZXMuXG5cbkBpZiAkZW5hYmxlLWdyaWQtY2xhc3NlcyB7XG4gIC8vIFNpbmdsZSBjb250YWluZXIgY2xhc3Mgd2l0aCBicmVha3BvaW50IG1heC13aWR0aHNcbiAgLmNvbnRhaW5lcixcbiAgLy8gMTAwJSB3aWRlIGNvbnRhaW5lciBhdCBhbGwgYnJlYWtwb2ludHNcbiAgLmNvbnRhaW5lci1mbHVpZCB7XG4gICAgQGluY2x1ZGUgbWFrZS1jb250YWluZXIoKTtcbiAgfVxuXG4gIC8vIFJlc3BvbnNpdmUgY29udGFpbmVycyB0aGF0IGFyZSAxMDAlIHdpZGUgdW50aWwgYSBicmVha3BvaW50XG4gIEBlYWNoICRicmVha3BvaW50LCAkY29udGFpbmVyLW1heC13aWR0aCBpbiAkY29udGFpbmVyLW1heC13aWR0aHMge1xuICAgIC5jb250YWluZXItI3skYnJlYWtwb2ludH0ge1xuICAgICAgQGV4dGVuZCAuY29udGFpbmVyLWZsdWlkO1xuICAgIH1cblxuICAgIEBpbmNsdWRlIG1lZGlhLWJyZWFrcG9pbnQtdXAoJGJyZWFrcG9pbnQsICRncmlkLWJyZWFrcG9pbnRzKSB7XG4gICAgICAlcmVzcG9uc2l2ZS1jb250YWluZXItI3skYnJlYWtwb2ludH0ge1xuICAgICAgICBtYXgtd2lkdGg6ICRjb250YWluZXItbWF4LXdpZHRoO1xuICAgICAgfVxuXG4gICAgICAvLyBFeHRlbmQgZWFjaCBicmVha3BvaW50IHdoaWNoIGlzIHNtYWxsZXIgb3IgZXF1YWwgdG8gdGhlIGN1cnJlbnQgYnJlYWtwb2ludFxuICAgICAgJGV4dGVuZC1icmVha3BvaW50OiB0cnVlO1xuXG4gICAgICBAZWFjaCAkbmFtZSwgJHdpZHRoIGluICRncmlkLWJyZWFrcG9pbnRzIHtcbiAgICAgICAgQGlmICgkZXh0ZW5kLWJyZWFrcG9pbnQpIHtcbiAgICAgICAgICAuY29udGFpbmVyI3ticmVha3BvaW50LWluZml4KCRuYW1lLCAkZ3JpZC1icmVha3BvaW50cyl9IHtcbiAgICAgICAgICAgIEBleHRlbmQgJXJlc3BvbnNpdmUtY29udGFpbmVyLSN7JGJyZWFrcG9pbnR9O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIE9uY2UgdGhlIGN1cnJlbnQgYnJlYWtwb2ludCBpcyByZWFjaGVkLCBzdG9wIGV4dGVuZGluZ1xuICAgICAgICAgIEBpZiAoJGJyZWFrcG9pbnQgPT0gJG5hbWUpIHtcbiAgICAgICAgICAgICRleHRlbmQtYnJlYWtwb2ludDogZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iLCIvLyBDb250YWluZXIgbWl4aW5zXG5cbkBtaXhpbiBtYWtlLWNvbnRhaW5lcigkZ3V0dGVyOiAkY29udGFpbmVyLXBhZGRpbmcteCkge1xuICB3aWR0aDogMTAwJTtcbiAgcGFkZGluZy1yaWdodDogdmFyKC0tI3skdmFyaWFibGUtcHJlZml4fWd1dHRlci14LCAjeyRndXR0ZXJ9KTtcbiAgcGFkZGluZy1sZWZ0OiB2YXIoLS0jeyR2YXJpYWJsZS1wcmVmaXh9Z3V0dGVyLXgsICN7JGd1dHRlcn0pO1xuICBtYXJnaW4tcmlnaHQ6IGF1dG87XG4gIG1hcmdpbi1sZWZ0OiBhdXRvO1xufVxuIiwiLy8gQnJlYWtwb2ludCB2aWV3cG9ydCBzaXplcyBhbmQgbWVkaWEgcXVlcmllcy5cbi8vXG4vLyBCcmVha3BvaW50cyBhcmUgZGVmaW5lZCBhcyBhIG1hcCBvZiAobmFtZTogbWluaW11bSB3aWR0aCksIG9yZGVyIGZyb20gc21hbGwgdG8gbGFyZ2U6XG4vL1xuLy8gICAgKHhzOiAwLCBzbTogNTc2cHgsIG1kOiA3NjhweCwgbGc6IDk5MnB4LCB4bDogMTIwMHB4KVxuLy9cbi8vIFRoZSBtYXAgZGVmaW5lZCBpbiB0aGUgYCRncmlkLWJyZWFrcG9pbnRzYCBnbG9iYWwgdmFyaWFibGUgaXMgdXNlZCBhcyB0aGUgYCRicmVha3BvaW50c2AgYXJndW1lbnQgYnkgZGVmYXVsdC5cblxuLy8gTmFtZSBvZiB0aGUgbmV4dCBicmVha3BvaW50LCBvciBudWxsIGZvciB0aGUgbGFzdCBicmVha3BvaW50LlxuLy9cbi8vICAgID4+IGJyZWFrcG9pbnQtbmV4dChzbSlcbi8vICAgIG1kXG4vLyAgICA+PiBicmVha3BvaW50LW5leHQoc20sICh4czogMCwgc206IDU3NnB4LCBtZDogNzY4cHgsIGxnOiA5OTJweCwgeGw6IDEyMDBweCkpXG4vLyAgICBtZFxuLy8gICAgPj4gYnJlYWtwb2ludC1uZXh0KHNtLCAkYnJlYWtwb2ludC1uYW1lczogKHhzIHNtIG1kIGxnIHhsKSlcbi8vICAgIG1kXG5AZnVuY3Rpb24gYnJlYWtwb2ludC1uZXh0KCRuYW1lLCAkYnJlYWtwb2ludHM6ICRncmlkLWJyZWFrcG9pbnRzLCAkYnJlYWtwb2ludC1uYW1lczogbWFwLWtleXMoJGJyZWFrcG9pbnRzKSkge1xuICAkbjogaW5kZXgoJGJyZWFrcG9pbnQtbmFtZXMsICRuYW1lKTtcbiAgQGlmIG5vdCAkbiB7XG4gICAgQGVycm9yIFwiYnJlYWtwb2ludCBgI3skbmFtZX1gIG5vdCBmb3VuZCBpbiBgI3skYnJlYWtwb2ludHN9YFwiO1xuICB9XG4gIEByZXR1cm4gaWYoJG4gPCBsZW5ndGgoJGJyZWFrcG9pbnQtbmFtZXMpLCBudGgoJGJyZWFrcG9pbnQtbmFtZXMsICRuICsgMSksIG51bGwpO1xufVxuXG4vLyBNaW5pbXVtIGJyZWFrcG9pbnQgd2lkdGguIE51bGwgZm9yIHRoZSBzbWFsbGVzdCAoZmlyc3QpIGJyZWFrcG9pbnQuXG4vL1xuLy8gICAgPj4gYnJlYWtwb2ludC1taW4oc20sICh4czogMCwgc206IDU3NnB4LCBtZDogNzY4cHgsIGxnOiA5OTJweCwgeGw6IDEyMDBweCkpXG4vLyAgICA1NzZweFxuQGZ1bmN0aW9uIGJyZWFrcG9pbnQtbWluKCRuYW1lLCAkYnJlYWtwb2ludHM6ICRncmlkLWJyZWFrcG9pbnRzKSB7XG4gICRtaW46IG1hcC1nZXQoJGJyZWFrcG9pbnRzLCAkbmFtZSk7XG4gIEByZXR1cm4gaWYoJG1pbiAhPSAwLCAkbWluLCBudWxsKTtcbn1cblxuLy8gTWF4aW11bSBicmVha3BvaW50IHdpZHRoLlxuLy8gVGhlIG1heGltdW0gdmFsdWUgaXMgcmVkdWNlZCBieSAwLjAycHggdG8gd29yayBhcm91bmQgdGhlIGxpbWl0YXRpb25zIG9mXG4vLyBgbWluLWAgYW5kIGBtYXgtYCBwcmVmaXhlcyBhbmQgdmlld3BvcnRzIHdpdGggZnJhY3Rpb25hbCB3aWR0aHMuXG4vLyBTZWUgaHR0cHM6Ly93d3cudzMub3JnL1RSL21lZGlhcXVlcmllcy00LyNtcS1taW4tbWF4XG4vLyBVc2VzIDAuMDJweCByYXRoZXIgdGhhbiAwLjAxcHggdG8gd29yayBhcm91bmQgYSBjdXJyZW50IHJvdW5kaW5nIGJ1ZyBpbiBTYWZhcmkuXG4vLyBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3ODI2MVxuLy9cbi8vICAgID4+IGJyZWFrcG9pbnQtbWF4KG1kLCAoeHM6IDAsIHNtOiA1NzZweCwgbWQ6IDc2OHB4LCBsZzogOTkycHgsIHhsOiAxMjAwcHgpKVxuLy8gICAgNzY3Ljk4cHhcbkBmdW5jdGlvbiBicmVha3BvaW50LW1heCgkbmFtZSwgJGJyZWFrcG9pbnRzOiAkZ3JpZC1icmVha3BvaW50cykge1xuICAkbWF4OiBtYXAtZ2V0KCRicmVha3BvaW50cywgJG5hbWUpO1xuICBAcmV0dXJuIGlmKCRtYXggYW5kICRtYXggPiAwLCAkbWF4IC0gLjAyLCBudWxsKTtcbn1cblxuLy8gUmV0dXJucyBhIGJsYW5rIHN0cmluZyBpZiBzbWFsbGVzdCBicmVha3BvaW50LCBvdGhlcndpc2UgcmV0dXJucyB0aGUgbmFtZSB3aXRoIGEgZGFzaCBpbiBmcm9udC5cbi8vIFVzZWZ1bCBmb3IgbWFraW5nIHJlc3BvbnNpdmUgdXRpbGl0aWVzLlxuLy9cbi8vICAgID4+IGJyZWFrcG9pbnQtaW5maXgoeHMsICh4czogMCwgc206IDU3NnB4LCBtZDogNzY4cHgsIGxnOiA5OTJweCwgeGw6IDEyMDBweCkpXG4vLyAgICBcIlwiICAoUmV0dXJucyBhIGJsYW5rIHN0cmluZylcbi8vICAgID4+IGJyZWFrcG9pbnQtaW5maXgoc20sICh4czogMCwgc206IDU3NnB4LCBtZDogNzY4cHgsIGxnOiA5OTJweCwgeGw6IDEyMDBweCkpXG4vLyAgICBcIi1zbVwiXG5AZnVuY3Rpb24gYnJlYWtwb2ludC1pbmZpeCgkbmFtZSwgJGJyZWFrcG9pbnRzOiAkZ3JpZC1icmVha3BvaW50cykge1xuICBAcmV0dXJuIGlmKGJyZWFrcG9pbnQtbWluKCRuYW1lLCAkYnJlYWtwb2ludHMpID09IG51bGwsIFwiXCIsIFwiLSN7JG5hbWV9XCIpO1xufVxuXG4vLyBNZWRpYSBvZiBhdCBsZWFzdCB0aGUgbWluaW11bSBicmVha3BvaW50IHdpZHRoLiBObyBxdWVyeSBmb3IgdGhlIHNtYWxsZXN0IGJyZWFrcG9pbnQuXG4vLyBNYWtlcyB0aGUgQGNvbnRlbnQgYXBwbHkgdG8gdGhlIGdpdmVuIGJyZWFrcG9pbnQgYW5kIHdpZGVyLlxuQG1peGluIG1lZGlhLWJyZWFrcG9pbnQtdXAoJG5hbWUsICRicmVha3BvaW50czogJGdyaWQtYnJlYWtwb2ludHMpIHtcbiAgJG1pbjogYnJlYWtwb2ludC1taW4oJG5hbWUsICRicmVha3BvaW50cyk7XG4gIEBpZiAkbWluIHtcbiAgICBAbWVkaWEgKG1pbi13aWR0aDogJG1pbikge1xuICAgICAgQGNvbnRlbnQ7XG4gICAgfVxuICB9IEBlbHNlIHtcbiAgICBAY29udGVudDtcbiAgfVxufVxuXG4vLyBNZWRpYSBvZiBhdCBtb3N0IHRoZSBtYXhpbXVtIGJyZWFrcG9pbnQgd2lkdGguIE5vIHF1ZXJ5IGZvciB0aGUgbGFyZ2VzdCBicmVha3BvaW50LlxuLy8gTWFrZXMgdGhlIEBjb250ZW50IGFwcGx5IHRvIHRoZSBnaXZlbiBicmVha3BvaW50IGFuZCBuYXJyb3dlci5cbkBtaXhpbiBtZWRpYS1icmVha3BvaW50LWRvd24oJG5hbWUsICRicmVha3BvaW50czogJGdyaWQtYnJlYWtwb2ludHMpIHtcbiAgJG1heDogYnJlYWtwb2ludC1tYXgoJG5hbWUsICRicmVha3BvaW50cyk7XG4gIEBpZiAkbWF4IHtcbiAgICBAbWVkaWEgKG1heC13aWR0aDogJG1heCkge1xuICAgICAgQGNvbnRlbnQ7XG4gICAgfVxuICB9IEBlbHNlIHtcbiAgICBAY29udGVudDtcbiAgfVxufVxuXG4vLyBNZWRpYSB0aGF0IHNwYW5zIG11bHRpcGxlIGJyZWFrcG9pbnQgd2lkdGhzLlxuLy8gTWFrZXMgdGhlIEBjb250ZW50IGFwcGx5IGJldHdlZW4gdGhlIG1pbiBhbmQgbWF4IGJyZWFrcG9pbnRzXG5AbWl4aW4gbWVkaWEtYnJlYWtwb2ludC1iZXR3ZWVuKCRsb3dlciwgJHVwcGVyLCAkYnJlYWtwb2ludHM6ICRncmlkLWJyZWFrcG9pbnRzKSB7XG4gICRtaW46IGJyZWFrcG9pbnQtbWluKCRsb3dlciwgJGJyZWFrcG9pbnRzKTtcbiAgJG1heDogYnJlYWtwb2ludC1tYXgoJHVwcGVyLCAkYnJlYWtwb2ludHMpO1xuXG4gIEBpZiAkbWluICE9IG51bGwgYW5kICRtYXggIT0gbnVsbCB7XG4gICAgQG1lZGlhIChtaW4td2lkdGg6ICRtaW4pIGFuZCAobWF4LXdpZHRoOiAkbWF4KSB7XG4gICAgICBAY29udGVudDtcbiAgICB9XG4gIH0gQGVsc2UgaWYgJG1heCA9PSBudWxsIHtcbiAgICBAaW5jbHVkZSBtZWRpYS1icmVha3BvaW50LXVwKCRsb3dlciwgJGJyZWFrcG9pbnRzKSB7XG4gICAgICBAY29udGVudDtcbiAgICB9XG4gIH0gQGVsc2UgaWYgJG1pbiA9PSBudWxsIHtcbiAgICBAaW5jbHVkZSBtZWRpYS1icmVha3BvaW50LWRvd24oJHVwcGVyLCAkYnJlYWtwb2ludHMpIHtcbiAgICAgIEBjb250ZW50O1xuICAgIH1cbiAgfVxufVxuXG4vLyBNZWRpYSBiZXR3ZWVuIHRoZSBicmVha3BvaW50J3MgbWluaW11bSBhbmQgbWF4aW11bSB3aWR0aHMuXG4vLyBObyBtaW5pbXVtIGZvciB0aGUgc21hbGxlc3QgYnJlYWtwb2ludCwgYW5kIG5vIG1heGltdW0gZm9yIHRoZSBsYXJnZXN0IG9uZS5cbi8vIE1ha2VzIHRoZSBAY29udGVudCBhcHBseSBvbmx5IHRvIHRoZSBnaXZlbiBicmVha3BvaW50LCBub3Qgdmlld3BvcnRzIGFueSB3aWRlciBvciBuYXJyb3dlci5cbkBtaXhpbiBtZWRpYS1icmVha3BvaW50LW9ubHkoJG5hbWUsICRicmVha3BvaW50czogJGdyaWQtYnJlYWtwb2ludHMpIHtcbiAgJG1pbjogIGJyZWFrcG9pbnQtbWluKCRuYW1lLCAkYnJlYWtwb2ludHMpO1xuICAkbmV4dDogYnJlYWtwb2ludC1uZXh0KCRuYW1lLCAkYnJlYWtwb2ludHMpO1xuICAkbWF4OiAgYnJlYWtwb2ludC1tYXgoJG5leHQpO1xuXG4gIEBpZiAkbWluICE9IG51bGwgYW5kICRtYXggIT0gbnVsbCB7XG4gICAgQG1lZGlhIChtaW4td2lkdGg6ICRtaW4pIGFuZCAobWF4LXdpZHRoOiAkbWF4KSB7XG4gICAgICBAY29udGVudDtcbiAgICB9XG4gIH0gQGVsc2UgaWYgJG1heCA9PSBudWxsIHtcbiAgICBAaW5jbHVkZSBtZWRpYS1icmVha3BvaW50LXVwKCRuYW1lLCAkYnJlYWtwb2ludHMpIHtcbiAgICAgIEBjb250ZW50O1xuICAgIH1cbiAgfSBAZWxzZSBpZiAkbWluID09IG51bGwge1xuICAgIEBpbmNsdWRlIG1lZGlhLWJyZWFrcG9pbnQtZG93bigkbmV4dCwgJGJyZWFrcG9pbnRzKSB7XG4gICAgICBAY29udGVudDtcbiAgICB9XG4gIH1cbn1cbiIsIi8vIFJvd1xuLy9cbi8vIFJvd3MgY29udGFpbiB5b3VyIGNvbHVtbnMuXG5cbkBpZiAkZW5hYmxlLWdyaWQtY2xhc3NlcyB7XG4gIC5yb3cge1xuICAgIEBpbmNsdWRlIG1ha2Utcm93KCk7XG5cbiAgICA+ICoge1xuICAgICAgQGluY2x1ZGUgbWFrZS1jb2wtcmVhZHkoKTtcbiAgICB9XG4gIH1cbn1cblxuQGlmICRlbmFibGUtY3NzZ3JpZCB7XG4gIC5ncmlkIHtcbiAgICBkaXNwbGF5OiBncmlkO1xuICAgIGdyaWQtdGVtcGxhdGUtcm93czogcmVwZWF0KHZhcigtLSN7JHZhcmlhYmxlLXByZWZpeH1yb3dzLCAxKSwgMWZyKTtcbiAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdCh2YXIoLS0jeyR2YXJpYWJsZS1wcmVmaXh9Y29sdW1ucywgI3skZ3JpZC1jb2x1bW5zfSksIDFmcik7XG4gICAgZ2FwOiB2YXIoLS0jeyR2YXJpYWJsZS1wcmVmaXh9Z2FwLCAjeyRncmlkLWd1dHRlci13aWR0aH0pO1xuXG4gICAgQGluY2x1ZGUgbWFrZS1jc3NncmlkKCk7XG4gIH1cbn1cblxuXG4vLyBDb2x1bW5zXG4vL1xuLy8gQ29tbW9uIHN0eWxlcyBmb3Igc21hbGwgYW5kIGxhcmdlIGdyaWQgY29sdW1uc1xuXG5AaWYgJGVuYWJsZS1ncmlkLWNsYXNzZXMge1xuICBAaW5jbHVkZSBtYWtlLWdyaWQtY29sdW1ucygpO1xufVxuIiwiLy8gR3JpZCBzeXN0ZW1cbi8vXG4vLyBHZW5lcmF0ZSBzZW1hbnRpYyBncmlkIGNvbHVtbnMgd2l0aCB0aGVzZSBtaXhpbnMuXG5cbkBtaXhpbiBtYWtlLXJvdygkZ3V0dGVyOiAkZ3JpZC1ndXR0ZXItd2lkdGgpIHtcbiAgLS0jeyR2YXJpYWJsZS1wcmVmaXh9Z3V0dGVyLXg6ICN7JGd1dHRlcn07XG4gIC0tI3skdmFyaWFibGUtcHJlZml4fWd1dHRlci15OiAwO1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LXdyYXA6IHdyYXA7XG4gIC8vIFRPRE86IFJldmlzaXQgY2FsYyBvcmRlciBhZnRlciBodHRwczovL2dpdGh1Yi5jb20vcmVhY3QtYm9vdHN0cmFwL3JlYWN0LWJvb3RzdHJhcC9pc3N1ZXMvNjAzOSBpcyBmaXhlZFxuICBtYXJnaW4tdG9wOiBjYWxjKC0xICogdmFyKC0tI3skdmFyaWFibGUtcHJlZml4fWd1dHRlci15KSk7IC8vIHN0eWxlbGludC1kaXNhYmxlLWxpbmUgZnVuY3Rpb24tZGlzYWxsb3dlZC1saXN0XG4gIG1hcmdpbi1yaWdodDogY2FsYygtLjUgKiB2YXIoLS0jeyR2YXJpYWJsZS1wcmVmaXh9Z3V0dGVyLXgpKTsgLy8gc3R5bGVsaW50LWRpc2FibGUtbGluZSBmdW5jdGlvbi1kaXNhbGxvd2VkLWxpc3RcbiAgbWFyZ2luLWxlZnQ6IGNhbGMoLS41ICogdmFyKC0tI3skdmFyaWFibGUtcHJlZml4fWd1dHRlci14KSk7IC8vIHN0eWxlbGludC1kaXNhYmxlLWxpbmUgZnVuY3Rpb24tZGlzYWxsb3dlZC1saXN0XG59XG5cbkBtaXhpbiBtYWtlLWNvbC1yZWFkeSgkZ3V0dGVyOiAkZ3JpZC1ndXR0ZXItd2lkdGgpIHtcbiAgLy8gQWRkIGJveCBzaXppbmcgaWYgb25seSB0aGUgZ3JpZCBpcyBsb2FkZWRcbiAgYm94LXNpemluZzogaWYodmFyaWFibGUtZXhpc3RzKGluY2x1ZGUtY29sdW1uLWJveC1zaXppbmcpIGFuZCAkaW5jbHVkZS1jb2x1bW4tYm94LXNpemluZywgYm9yZGVyLWJveCwgbnVsbCk7XG4gIC8vIFByZXZlbnQgY29sdW1ucyBmcm9tIGJlY29taW5nIHRvbyBuYXJyb3cgd2hlbiBhdCBzbWFsbGVyIGdyaWQgdGllcnMgYnlcbiAgLy8gYWx3YXlzIHNldHRpbmcgYHdpZHRoOiAxMDAlO2AuIFRoaXMgd29ya3MgYmVjYXVzZSB3ZSBzZXQgdGhlIHdpZHRoXG4gIC8vIGxhdGVyIG9uIHRvIG92ZXJyaWRlIHRoaXMgaW5pdGlhbCB3aWR0aC5cbiAgZmxleC1zaHJpbms6IDA7XG4gIHdpZHRoOiAxMDAlO1xuICBtYXgtd2lkdGg6IDEwMCU7IC8vIFByZXZlbnQgYC5jb2wtYXV0b2AsIGAuY29sYCAoJiByZXNwb25zaXZlIHZhcmlhbnRzKSBmcm9tIGJyZWFraW5nIG91dCB0aGUgZ3JpZFxuICBwYWRkaW5nLXJpZ2h0OiBjYWxjKHZhcigtLSN7JHZhcmlhYmxlLXByZWZpeH1ndXR0ZXIteCkgKiAuNSk7IC8vIHN0eWxlbGludC1kaXNhYmxlLWxpbmUgZnVuY3Rpb24tZGlzYWxsb3dlZC1saXN0XG4gIHBhZGRpbmctbGVmdDogY2FsYyh2YXIoLS0jeyR2YXJpYWJsZS1wcmVmaXh9Z3V0dGVyLXgpICogLjUpOyAvLyBzdHlsZWxpbnQtZGlzYWJsZS1saW5lIGZ1bmN0aW9uLWRpc2FsbG93ZWQtbGlzdFxuICBtYXJnaW4tdG9wOiB2YXIoLS0jeyR2YXJpYWJsZS1wcmVmaXh9Z3V0dGVyLXkpO1xufVxuXG5AbWl4aW4gbWFrZS1jb2woJHNpemU6IGZhbHNlLCAkY29sdW1uczogJGdyaWQtY29sdW1ucykge1xuICBAaWYgJHNpemUge1xuICAgIGZsZXg6IDAgMCBhdXRvO1xuICAgIHdpZHRoOiBwZXJjZW50YWdlKGRpdmlkZSgkc2l6ZSwgJGNvbHVtbnMpKTtcblxuICB9IEBlbHNlIHtcbiAgICBmbGV4OiAxIDEgMDtcbiAgICBtYXgtd2lkdGg6IDEwMCU7XG4gIH1cbn1cblxuQG1peGluIG1ha2UtY29sLWF1dG8oKSB7XG4gIGZsZXg6IDAgMCBhdXRvO1xuICB3aWR0aDogYXV0bztcbn1cblxuQG1peGluIG1ha2UtY29sLW9mZnNldCgkc2l6ZSwgJGNvbHVtbnM6ICRncmlkLWNvbHVtbnMpIHtcbiAgJG51bTogZGl2aWRlKCRzaXplLCAkY29sdW1ucyk7XG4gIG1hcmdpbi1sZWZ0OiBpZigkbnVtID09IDAsIDAsIHBlcmNlbnRhZ2UoJG51bSkpO1xufVxuXG4vLyBSb3cgY29sdW1uc1xuLy9cbi8vIFNwZWNpZnkgb24gYSBwYXJlbnQgZWxlbWVudChlLmcuLCAucm93KSB0byBmb3JjZSBpbW1lZGlhdGUgY2hpbGRyZW4gaW50byBOTlxuLy8gbnVtYmVyb2YgY29sdW1ucy4gU3VwcG9ydHMgd3JhcHBpbmcgdG8gbmV3IGxpbmVzLCBidXQgZG9lcyBub3QgZG8gYSBNYXNvbnJ5XG4vLyBzdHlsZSBncmlkLlxuQG1peGluIHJvdy1jb2xzKCRjb3VudCkge1xuICA+ICoge1xuICAgIGZsZXg6IDAgMCBhdXRvO1xuICAgIHdpZHRoOiBkaXZpZGUoMTAwJSwgJGNvdW50KTtcbiAgfVxufVxuXG4vLyBGcmFtZXdvcmsgZ3JpZCBnZW5lcmF0aW9uXG4vL1xuLy8gVXNlZCBvbmx5IGJ5IEJvb3RzdHJhcCB0byBnZW5lcmF0ZSB0aGUgY29ycmVjdCBudW1iZXIgb2YgZ3JpZCBjbGFzc2VzIGdpdmVuXG4vLyBhbnkgdmFsdWUgb2YgYCRncmlkLWNvbHVtbnNgLlxuXG5AbWl4aW4gbWFrZS1ncmlkLWNvbHVtbnMoJGNvbHVtbnM6ICRncmlkLWNvbHVtbnMsICRndXR0ZXI6ICRncmlkLWd1dHRlci13aWR0aCwgJGJyZWFrcG9pbnRzOiAkZ3JpZC1icmVha3BvaW50cykge1xuICBAZWFjaCAkYnJlYWtwb2ludCBpbiBtYXAta2V5cygkYnJlYWtwb2ludHMpIHtcbiAgICAkaW5maXg6IGJyZWFrcG9pbnQtaW5maXgoJGJyZWFrcG9pbnQsICRicmVha3BvaW50cyk7XG5cbiAgICBAaW5jbHVkZSBtZWRpYS1icmVha3BvaW50LXVwKCRicmVha3BvaW50LCAkYnJlYWtwb2ludHMpIHtcbiAgICAgIC8vIFByb3ZpZGUgYmFzaWMgYC5jb2wte2JwfWAgY2xhc3NlcyBmb3IgZXF1YWwtd2lkdGggZmxleGJveCBjb2x1bW5zXG4gICAgICAuY29sI3skaW5maXh9IHtcbiAgICAgICAgZmxleDogMSAwIDAlOyAvLyBGbGV4YnVncyAjNDogaHR0cHM6Ly9naXRodWIuY29tL3BoaWxpcHdhbHRvbi9mbGV4YnVncyNmbGV4YnVnLTRcbiAgICAgIH1cblxuICAgICAgLnJvdy1jb2xzI3skaW5maXh9LWF1dG8gPiAqIHtcbiAgICAgICAgQGluY2x1ZGUgbWFrZS1jb2wtYXV0bygpO1xuICAgICAgfVxuXG4gICAgICBAaWYgJGdyaWQtcm93LWNvbHVtbnMgPiAwIHtcbiAgICAgICAgQGZvciAkaSBmcm9tIDEgdGhyb3VnaCAkZ3JpZC1yb3ctY29sdW1ucyB7XG4gICAgICAgICAgLnJvdy1jb2xzI3skaW5maXh9LSN7JGl9IHtcbiAgICAgICAgICAgIEBpbmNsdWRlIHJvdy1jb2xzKCRpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLmNvbCN7JGluZml4fS1hdXRvIHtcbiAgICAgICAgQGluY2x1ZGUgbWFrZS1jb2wtYXV0bygpO1xuICAgICAgfVxuXG4gICAgICBAaWYgJGNvbHVtbnMgPiAwIHtcbiAgICAgICAgQGZvciAkaSBmcm9tIDEgdGhyb3VnaCAkY29sdW1ucyB7XG4gICAgICAgICAgLmNvbCN7JGluZml4fS0jeyRpfSB7XG4gICAgICAgICAgICBAaW5jbHVkZSBtYWtlLWNvbCgkaSwgJGNvbHVtbnMpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGAkY29sdW1ucyAtIDFgIGJlY2F1c2Ugb2Zmc2V0dGluZyBieSB0aGUgd2lkdGggb2YgYW4gZW50aXJlIHJvdyBpc24ndCBwb3NzaWJsZVxuICAgICAgICBAZm9yICRpIGZyb20gMCB0aHJvdWdoICgkY29sdW1ucyAtIDEpIHtcbiAgICAgICAgICBAaWYgbm90ICgkaW5maXggPT0gXCJcIiBhbmQgJGkgPT0gMCkgeyAvLyBBdm9pZCBlbWl0dGluZyB1c2VsZXNzIC5vZmZzZXQtMFxuICAgICAgICAgICAgLm9mZnNldCN7JGluZml4fS0jeyRpfSB7XG4gICAgICAgICAgICAgIEBpbmNsdWRlIG1ha2UtY29sLW9mZnNldCgkaSwgJGNvbHVtbnMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBHdXR0ZXJzXG4gICAgICAvL1xuICAgICAgLy8gTWFrZSB1c2Ugb2YgYC5nLSpgLCBgLmd4LSpgIG9yIGAuZ3ktKmAgdXRpbGl0aWVzIHRvIGNoYW5nZSBzcGFjaW5nIGJldHdlZW4gdGhlIGNvbHVtbnMuXG4gICAgICBAZWFjaCAka2V5LCAkdmFsdWUgaW4gJGd1dHRlcnMge1xuICAgICAgICAuZyN7JGluZml4fS0jeyRrZXl9LFxuICAgICAgICAuZ3gjeyRpbmZpeH0tI3ska2V5fSB7XG4gICAgICAgICAgLS0jeyR2YXJpYWJsZS1wcmVmaXh9Z3V0dGVyLXg6ICN7JHZhbHVlfTtcbiAgICAgICAgfVxuXG4gICAgICAgIC5nI3skaW5maXh9LSN7JGtleX0sXG4gICAgICAgIC5neSN7JGluZml4fS0jeyRrZXl9IHtcbiAgICAgICAgICAtLSN7JHZhcmlhYmxlLXByZWZpeH1ndXR0ZXIteTogI3skdmFsdWV9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbkBtaXhpbiBtYWtlLWNzc2dyaWQoJGNvbHVtbnM6ICRncmlkLWNvbHVtbnMsICRicmVha3BvaW50czogJGdyaWQtYnJlYWtwb2ludHMpIHtcbiAgQGVhY2ggJGJyZWFrcG9pbnQgaW4gbWFwLWtleXMoJGJyZWFrcG9pbnRzKSB7XG4gICAgJGluZml4OiBicmVha3BvaW50LWluZml4KCRicmVha3BvaW50LCAkYnJlYWtwb2ludHMpO1xuXG4gICAgQGluY2x1ZGUgbWVkaWEtYnJlYWtwb2ludC11cCgkYnJlYWtwb2ludCwgJGJyZWFrcG9pbnRzKSB7XG4gICAgICBAaWYgJGNvbHVtbnMgPiAwIHtcbiAgICAgICAgQGZvciAkaSBmcm9tIDEgdGhyb3VnaCAkY29sdW1ucyB7XG4gICAgICAgICAgLmctY29sI3skaW5maXh9LSN7JGl9IHtcbiAgICAgICAgICAgIGdyaWQtY29sdW1uOiBhdXRvIC8gc3BhbiAkaTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTdGFydCB3aXRoIGAxYCBiZWNhdXNlIGAwYCBpcyBhbmQgaW52YWxpZCB2YWx1ZS5cbiAgICAgICAgLy8gRW5kcyB3aXRoIGAkY29sdW1ucyAtIDFgIGJlY2F1c2Ugb2Zmc2V0dGluZyBieSB0aGUgd2lkdGggb2YgYW4gZW50aXJlIHJvdyBpc24ndCBwb3NzaWJsZS5cbiAgICAgICAgQGZvciAkaSBmcm9tIDEgdGhyb3VnaCAoJGNvbHVtbnMgLSAxKSB7XG4gICAgICAgICAgLmctc3RhcnQjeyRpbmZpeH0tI3skaX0ge1xuICAgICAgICAgICAgZ3JpZC1jb2x1bW4tc3RhcnQ6ICRpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIiwiLy9cbi8vIEJhc2ljIEJvb3RzdHJhcCB0YWJsZVxuLy9cblxuLnRhYmxlIHtcbiAgLS0jeyR2YXJpYWJsZS1wcmVmaXh9dGFibGUtYmc6ICN7JHRhYmxlLWJnfTtcbiAgLS0jeyR2YXJpYWJsZS1wcmVmaXh9dGFibGUtYWNjZW50LWJnOiAjeyR0YWJsZS1hY2NlbnQtYmd9O1xuICAtLSN7JHZhcmlhYmxlLXByZWZpeH10YWJsZS1zdHJpcGVkLWNvbG9yOiAjeyR0YWJsZS1zdHJpcGVkLWNvbG9yfTtcbiAgLS0jeyR2YXJpYWJsZS1wcmVmaXh9dGFibGUtc3RyaXBlZC1iZzogI3skdGFibGUtc3RyaXBlZC1iZ307XG4gIC0tI3skdmFyaWFibGUtcHJlZml4fXRhYmxlLWFjdGl2ZS1jb2xvcjogI3skdGFibGUtYWN0aXZlLWNvbG9yfTtcbiAgLS0jeyR2YXJpYWJsZS1wcmVmaXh9dGFibGUtYWN0aXZlLWJnOiAjeyR0YWJsZS1hY3RpdmUtYmd9O1xuICAtLSN7JHZhcmlhYmxlLXByZWZpeH10YWJsZS1ob3Zlci1jb2xvcjogI3skdGFibGUtaG92ZXItY29sb3J9O1xuICAtLSN7JHZhcmlhYmxlLXByZWZpeH10YWJsZS1ob3Zlci1iZzogI3skdGFibGUtaG92ZXItYmd9O1xuXG4gIHdpZHRoOiAxMDAlO1xuICBtYXJnaW4tYm90dG9tOiAkc3BhY2VyO1xuICBjb2xvcjogJHRhYmxlLWNvbG9yO1xuICB2ZXJ0aWNhbC1hbGlnbjogJHRhYmxlLWNlbGwtdmVydGljYWwtYWxpZ247XG4gIGJvcmRlci1jb2xvcjogJHRhYmxlLWJvcmRlci1jb2xvcjtcblxuICAvLyBUYXJnZXQgdGggJiB0ZFxuICAvLyBXZSBuZWVkIHRoZSBjaGlsZCBjb21iaW5hdG9yIHRvIHByZXZlbnQgc3R5bGVzIGxlYWtpbmcgdG8gbmVzdGVkIHRhYmxlcyB3aGljaCBkb2Vzbid0IGhhdmUgYSBgLnRhYmxlYCBjbGFzcy5cbiAgLy8gV2UgdXNlIHRoZSB1bml2ZXJzYWwgc2VsZWN0b3JzIGhlcmUgdG8gc2ltcGxpZnkgdGhlIHNlbGVjdG9yIChlbHNlIHdlIHdvdWxkIG5lZWQgNiBkaWZmZXJlbnQgc2VsZWN0b3JzKS5cbiAgLy8gQW5vdGhlciBhZHZhbnRhZ2UgaXMgdGhhdCB0aGlzIGdlbmVyYXRlcyBsZXNzIGNvZGUgYW5kIG1ha2VzIHRoZSBzZWxlY3RvciBsZXNzIHNwZWNpZmljIG1ha2luZyBpdCBlYXNpZXIgdG8gb3ZlcnJpZGUuXG4gIC8vIHN0eWxlbGludC1kaXNhYmxlLW5leHQtbGluZSBzZWxlY3Rvci1tYXgtdW5pdmVyc2FsXG4gID4gOm5vdChjYXB0aW9uKSA+ICogPiAqIHtcbiAgICBwYWRkaW5nOiAkdGFibGUtY2VsbC1wYWRkaW5nLXkgJHRhYmxlLWNlbGwtcGFkZGluZy14O1xuICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLSN7JHZhcmlhYmxlLXByZWZpeH10YWJsZS1iZyk7XG4gICAgYm9yZGVyLWJvdHRvbS13aWR0aDogJHRhYmxlLWJvcmRlci13aWR0aDtcbiAgICBib3gtc2hhZG93OiBpbnNldCAwIDAgMCA5OTk5cHggdmFyKC0tI3skdmFyaWFibGUtcHJlZml4fXRhYmxlLWFjY2VudC1iZyk7XG4gIH1cblxuICA+IHRib2R5IHtcbiAgICB2ZXJ0aWNhbC1hbGlnbjogaW5oZXJpdDtcbiAgfVxuXG4gID4gdGhlYWQge1xuICAgIHZlcnRpY2FsLWFsaWduOiBib3R0b207XG4gIH1cblxuICAvLyBIaWdobGlnaHQgYm9yZGVyIGNvbG9yIGJldHdlZW4gdGhlYWQsIHRib2R5IGFuZCB0Zm9vdC5cbiAgPiA6bm90KDpmaXJzdC1jaGlsZCkge1xuICAgIGJvcmRlci10b3A6ICgyICogJHRhYmxlLWJvcmRlci13aWR0aCkgc29saWQgJHRhYmxlLWdyb3VwLXNlcGFyYXRvci1jb2xvcjtcbiAgfVxufVxuXG5cbi8vXG4vLyBDaGFuZ2UgcGxhY2VtZW50IG9mIGNhcHRpb25zIHdpdGggYSBjbGFzc1xuLy9cblxuLmNhcHRpb24tdG9wIHtcbiAgY2FwdGlvbi1zaWRlOiB0b3A7XG59XG5cblxuLy9cbi8vIENvbmRlbnNlZCB0YWJsZSB3LyBoYWxmIHBhZGRpbmdcbi8vXG5cbi50YWJsZS1zbSB7XG4gIC8vIHN0eWxlbGludC1kaXNhYmxlLW5leHQtbGluZSBzZWxlY3Rvci1tYXgtdW5pdmVyc2FsXG4gID4gOm5vdChjYXB0aW9uKSA+ICogPiAqIHtcbiAgICBwYWRkaW5nOiAkdGFibGUtY2VsbC1wYWRkaW5nLXktc20gJHRhYmxlLWNlbGwtcGFkZGluZy14LXNtO1xuICB9XG59XG5cblxuLy8gQm9yZGVyIHZlcnNpb25zXG4vL1xuLy8gQWRkIG9yIHJlbW92ZSBib3JkZXJzIGFsbCBhcm91bmQgdGhlIHRhYmxlIGFuZCBiZXR3ZWVuIGFsbCB0aGUgY29sdW1ucy5cbi8vXG4vLyBXaGVuIGJvcmRlcnMgYXJlIGFkZGVkIG9uIGFsbCBzaWRlcyBvZiB0aGUgY2VsbHMsIHRoZSBjb3JuZXJzIGNhbiByZW5kZXIgb2RkIHdoZW5cbi8vIHRoZXNlIGJvcmRlcnMgZG8gbm90IGhhdmUgdGhlIHNhbWUgY29sb3Igb3IgaWYgdGhleSBhcmUgc2VtaS10cmFuc3BhcmVudC5cbi8vIFRoZXJlZm9yIHdlIGFkZCB0b3AgYW5kIGJvcmRlciBib3R0b21zIHRvIHRoZSBgdHJgcyBhbmQgbGVmdCBhbmQgcmlnaHQgYm9yZGVyc1xuLy8gdG8gdGhlIGB0ZGBzIG9yIGB0aGBzXG5cbi50YWJsZS1ib3JkZXJlZCB7XG4gID4gOm5vdChjYXB0aW9uKSA+ICoge1xuICAgIGJvcmRlci13aWR0aDogJHRhYmxlLWJvcmRlci13aWR0aCAwO1xuXG4gICAgLy8gc3R5bGVsaW50LWRpc2FibGUtbmV4dC1saW5lIHNlbGVjdG9yLW1heC11bml2ZXJzYWxcbiAgICA+ICoge1xuICAgICAgYm9yZGVyLXdpZHRoOiAwICR0YWJsZS1ib3JkZXItd2lkdGg7XG4gICAgfVxuICB9XG59XG5cbi50YWJsZS1ib3JkZXJsZXNzIHtcbiAgLy8gc3R5bGVsaW50LWRpc2FibGUtbmV4dC1saW5lIHNlbGVjdG9yLW1heC11bml2ZXJzYWxcbiAgPiA6bm90KGNhcHRpb24pID4gKiA+ICoge1xuICAgIGJvcmRlci1ib3R0b20td2lkdGg6IDA7XG4gIH1cblxuICA+IDpub3QoOmZpcnN0LWNoaWxkKSB7XG4gICAgYm9yZGVyLXRvcC13aWR0aDogMDtcbiAgfVxufVxuXG4vLyBaZWJyYS1zdHJpcGluZ1xuLy9cbi8vIERlZmF1bHQgemVicmEtc3RyaXBlIHN0eWxlcyAoYWx0ZXJuYXRpbmcgZ3JheSBhbmQgdHJhbnNwYXJlbnQgYmFja2dyb3VuZHMpXG5cbi50YWJsZS1zdHJpcGVkIHtcbiAgPiB0Ym9keSA+IHRyOm50aC1vZi10eXBlKCN7JHRhYmxlLXN0cmlwZWQtb3JkZXJ9KSA+ICoge1xuICAgIC0tI3skdmFyaWFibGUtcHJlZml4fXRhYmxlLWFjY2VudC1iZzogdmFyKC0tI3skdmFyaWFibGUtcHJlZml4fXRhYmxlLXN0cmlwZWQtYmcpO1xuICAgIGNvbG9yOiB2YXIoLS0jeyR2YXJpYWJsZS1wcmVmaXh9dGFibGUtc3RyaXBlZC1jb2xvcik7XG4gIH1cbn1cblxuLy8gQWN0aXZlIHRhYmxlXG4vL1xuLy8gVGhlIGAudGFibGUtYWN0aXZlYCBjbGFzcyBjYW4gYmUgYWRkZWQgdG8gaGlnaGxpZ2h0IHJvd3Mgb3IgY2VsbHNcblxuLnRhYmxlLWFjdGl2ZSB7XG4gIC0tI3skdmFyaWFibGUtcHJlZml4fXRhYmxlLWFjY2VudC1iZzogdmFyKC0tI3skdmFyaWFibGUtcHJlZml4fXRhYmxlLWFjdGl2ZS1iZyk7XG4gIGNvbG9yOiB2YXIoLS0jeyR2YXJpYWJsZS1wcmVmaXh9dGFibGUtYWN0aXZlLWNvbG9yKTtcbn1cblxuLy8gSG92ZXIgZWZmZWN0XG4vL1xuLy8gUGxhY2VkIGhlcmUgc2luY2UgaXQgaGFzIHRvIGNvbWUgYWZ0ZXIgdGhlIHBvdGVudGlhbCB6ZWJyYSBzdHJpcGluZ1xuXG4udGFibGUtaG92ZXIge1xuICA+IHRib2R5ID4gdHI6aG92ZXIgPiAqIHtcbiAgICAtLSN7JHZhcmlhYmxlLXByZWZpeH10YWJsZS1hY2NlbnQtYmc6IHZhcigtLSN7JHZhcmlhYmxlLXByZWZpeH10YWJsZS1ob3Zlci1iZyk7XG4gICAgY29sb3I6IHZhcigtLSN7JHZhcmlhYmxlLXByZWZpeH10YWJsZS1ob3Zlci1jb2xvcik7XG4gIH1cbn1cblxuXG4vLyBUYWJsZSB2YXJpYW50c1xuLy9cbi8vIFRhYmxlIHZhcmlhbnRzIHNldCB0aGUgdGFibGUgY2VsbCBiYWNrZ3JvdW5kcywgYm9yZGVyIGNvbG9yc1xuLy8gYW5kIHRoZSBjb2xvcnMgb2YgdGhlIHN0cmlwZWQsIGhvdmVyZWQgJiBhY3RpdmUgdGFibGVzXG5cbkBlYWNoICRjb2xvciwgJHZhbHVlIGluICR0YWJsZS12YXJpYW50cyB7XG4gIEBpbmNsdWRlIHRhYmxlLXZhcmlhbnQoJGNvbG9yLCAkdmFsdWUpO1xufVxuXG4vLyBSZXNwb25zaXZlIHRhYmxlc1xuLy9cbi8vIEdlbmVyYXRlIHNlcmllcyBvZiBgLnRhYmxlLXJlc3BvbnNpdmUtKmAgY2xhc3NlcyBmb3IgY29uZmlndXJpbmcgdGhlIHNjcmVlblxuLy8gc2l6ZSBvZiB3aGVyZSB5b3VyIHRhYmxlIHdpbGwgb3ZlcmZsb3cuXG5cbkBlYWNoICRicmVha3BvaW50IGluIG1hcC1rZXlzKCRncmlkLWJyZWFrcG9pbnRzKSB7XG4gICRpbmZpeDogYnJlYWtwb2ludC1pbmZpeCgkYnJlYWtwb2ludCwgJGdyaWQtYnJlYWtwb2ludHMpO1xuXG4gIEBpbmNsdWRlIG1lZGlhLWJyZWFrcG9pbnQtZG93bigkYnJlYWtwb2ludCkge1xuICAgIC50YWJsZS1yZXNwb25zaXZlI3skaW5maXh9IHtcbiAgICAgIG92ZXJmbG93LXg6IGF1dG87XG4gICAgICAtd2Via2l0LW92ZXJmbG93LXNjcm9sbGluZzogdG91Y2g7XG4gICAgfVxuICB9XG59XG4iLCIvLyBzY3NzLWRvY3Mtc3RhcnQgdGFibGUtdmFyaWFudFxuQG1peGluIHRhYmxlLXZhcmlhbnQoJHN0YXRlLCAkYmFja2dyb3VuZCkge1xuICAudGFibGUtI3skc3RhdGV9IHtcbiAgICAkY29sb3I6IGNvbG9yLWNvbnRyYXN0KG9wYXF1ZSgkYm9keS1iZywgJGJhY2tncm91bmQpKTtcbiAgICAkaG92ZXItYmc6IG1peCgkY29sb3IsICRiYWNrZ3JvdW5kLCBwZXJjZW50YWdlKCR0YWJsZS1ob3Zlci1iZy1mYWN0b3IpKTtcbiAgICAkc3RyaXBlZC1iZzogbWl4KCRjb2xvciwgJGJhY2tncm91bmQsIHBlcmNlbnRhZ2UoJHRhYmxlLXN0cmlwZWQtYmctZmFjdG9yKSk7XG4gICAgJGFjdGl2ZS1iZzogbWl4KCRjb2xvciwgJGJhY2tncm91bmQsIHBlcmNlbnRhZ2UoJHRhYmxlLWFjdGl2ZS1iZy1mYWN0b3IpKTtcblxuICAgIC0tI3skdmFyaWFibGUtcHJlZml4fXRhYmxlLWJnOiAjeyRiYWNrZ3JvdW5kfTtcbiAgICAtLSN7JHZhcmlhYmxlLXByZWZpeH10YWJsZS1zdHJpcGVkLWJnOiAjeyRzdHJpcGVkLWJnfTtcbiAgICAtLSN7JHZhcmlhYmxlLXByZWZpeH10YWJsZS1zdHJpcGVkLWNvbG9yOiAje2NvbG9yLWNvbnRyYXN0KCRzdHJpcGVkLWJnKX07XG4gICAgLS0jeyR2YXJpYWJsZS1wcmVmaXh9dGFibGUtYWN0aXZlLWJnOiAjeyRhY3RpdmUtYmd9O1xuICAgIC0tI3skdmFyaWFibGUtcHJlZml4fXRhYmxlLWFjdGl2ZS1jb2xvcjogI3tjb2xvci1jb250cmFzdCgkYWN0aXZlLWJnKX07XG4gICAgLS0jeyR2YXJpYWJsZS1wcmVmaXh9dGFibGUtaG92ZXItYmc6ICN7JGhvdmVyLWJnfTtcbiAgICAtLSN7JHZhcmlhYmxlLXByZWZpeH10YWJsZS1ob3Zlci1jb2xvcjogI3tjb2xvci1jb250cmFzdCgkaG92ZXItYmcpfTtcblxuICAgIGNvbG9yOiAkY29sb3I7XG4gICAgYm9yZGVyLWNvbG9yOiBtaXgoJGNvbG9yLCAkYmFja2dyb3VuZCwgcGVyY2VudGFnZSgkdGFibGUtYm9yZGVyLWZhY3RvcikpO1xuICB9XG59XG4vLyBzY3NzLWRvY3MtZW5kIHRhYmxlLXZhcmlhbnRcbiIsIi8vXG4vLyBMYWJlbHNcbi8vXG5cbi5mb3JtLWxhYmVsIHtcbiAgbWFyZ2luLWJvdHRvbTogJGZvcm0tbGFiZWwtbWFyZ2luLWJvdHRvbTtcbiAgQGluY2x1ZGUgZm9udC1zaXplKCRmb3JtLWxhYmVsLWZvbnQtc2l6ZSk7XG4gIGZvbnQtc3R5bGU6ICRmb3JtLWxhYmVsLWZvbnQtc3R5bGU7XG4gIGZvbnQtd2VpZ2h0OiAkZm9ybS1sYWJlbC1mb250LXdlaWdodDtcbiAgY29sb3I6ICRmb3JtLWxhYmVsLWNvbG9yO1xufVxuXG4vLyBGb3IgdXNlIHdpdGggaG9yaXpvbnRhbCBhbmQgaW5saW5lIGZvcm1zLCB3aGVuIHlvdSBuZWVkIHRoZSBsYWJlbCAob3IgbGVnZW5kKVxuLy8gdGV4dCB0byBhbGlnbiB3aXRoIHRoZSBmb3JtIGNvbnRyb2xzLlxuLmNvbC1mb3JtLWxhYmVsIHtcbiAgcGFkZGluZy10b3A6IGFkZCgkaW5wdXQtcGFkZGluZy15LCAkaW5wdXQtYm9yZGVyLXdpZHRoKTtcbiAgcGFkZGluZy1ib3R0b206IGFkZCgkaW5wdXQtcGFkZGluZy15LCAkaW5wdXQtYm9yZGVyLXdpZHRoKTtcbiAgbWFyZ2luLWJvdHRvbTogMDsgLy8gT3ZlcnJpZGUgdGhlIGA8bGVnZW5kPmAgZGVmYXVsdFxuICBAaW5jbHVkZSBmb250LXNpemUoaW5oZXJpdCk7IC8vIE92ZXJyaWRlIHRoZSBgPGxlZ2VuZD5gIGRlZmF1bHRcbiAgZm9udC1zdHlsZTogJGZvcm0tbGFiZWwtZm9udC1zdHlsZTtcbiAgZm9udC13ZWlnaHQ6ICRmb3JtLWxhYmVsLWZvbnQtd2VpZ2h0O1xuICBsaW5lLWhlaWdodDogJGlucHV0LWxpbmUtaGVpZ2h0O1xuICBjb2xvcjogJGZvcm0tbGFiZWwtY29sb3I7XG59XG5cbi5jb2wtZm9ybS1sYWJlbC1sZyB7XG4gIHBhZGRpbmctdG9wOiBhZGQoJGlucHV0LXBhZGRpbmcteS1sZywgJGlucHV0LWJvcmRlci13aWR0aCk7XG4gIHBhZGRpbmctYm90dG9tOiBhZGQoJGlucHV0LXBhZGRpbmcteS1sZywgJGlucHV0LWJvcmRlci13aWR0aCk7XG4gIEBpbmNsdWRlIGZvbnQtc2l6ZSgkaW5wdXQtZm9udC1zaXplLWxnKTtcbn1cblxuLmNvbC1mb3JtLWxhYmVsLXNtIHtcbiAgcGFkZGluZy10b3A6IGFkZCgkaW5wdXQtcGFkZGluZy15LXNtLCAkaW5wdXQtYm9yZGVyLXdpZHRoKTtcbiAgcGFkZGluZy1ib3R0b206IGFkZCgkaW5wdXQtcGFkZGluZy15LXNtLCAkaW5wdXQtYm9yZGVyLXdpZHRoKTtcbiAgQGluY2x1ZGUgZm9udC1zaXplKCRpbnB1dC1mb250LXNpemUtc20pO1xufVxuIiwiLy9cbi8vIEZvcm0gdGV4dFxuLy9cblxuLmZvcm0tdGV4dCB7XG4gIG1hcmdpbi10b3A6ICRmb3JtLXRleHQtbWFyZ2luLXRvcDtcbiAgQGluY2x1ZGUgZm9udC1zaXplKCRmb3JtLXRleHQtZm9udC1zaXplKTtcbiAgZm9udC1zdHlsZTogJGZvcm0tdGV4dC1mb250LXN0eWxlO1xuICBmb250LXdlaWdodDogJGZvcm0tdGV4dC1mb250LXdlaWdodDtcbiAgY29sb3I6ICRmb3JtLXRleHQtY29sb3I7XG59XG4iLCIvL1xuLy8gR2VuZXJhbCBmb3JtIGNvbnRyb2xzIChwbHVzIGEgZmV3IHNwZWNpZmljIGhpZ2gtbGV2ZWwgaW50ZXJ2ZW50aW9ucylcbi8vXG5cbi5mb3JtLWNvbnRyb2wge1xuICBkaXNwbGF5OiBibG9jaztcbiAgd2lkdGg6IDEwMCU7XG4gIHBhZGRpbmc6ICRpbnB1dC1wYWRkaW5nLXkgJGlucHV0LXBhZGRpbmcteDtcbiAgZm9udC1mYW1pbHk6ICRpbnB1dC1mb250LWZhbWlseTtcbiAgQGluY2x1ZGUgZm9udC1zaXplKCRpbnB1dC1mb250LXNpemUpO1xuICBmb250LXdlaWdodDogJGlucHV0LWZvbnQtd2VpZ2h0O1xuICBsaW5lLWhlaWdodDogJGlucHV0LWxpbmUtaGVpZ2h0O1xuICBjb2xvcjogJGlucHV0LWNvbG9yO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAkaW5wdXQtYmc7XG4gIGJhY2tncm91bmQtY2xpcDogcGFkZGluZy1ib3g7XG4gIGJvcmRlcjogJGlucHV0LWJvcmRlci13aWR0aCBzb2xpZCAkaW5wdXQtYm9yZGVyLWNvbG9yO1xuICBhcHBlYXJhbmNlOiBub25lOyAvLyBGaXggYXBwZWFyYW5jZSBmb3IgZGF0ZSBpbnB1dHMgaW4gU2FmYXJpXG5cbiAgLy8gTm90ZTogVGhpcyBoYXMgbm8gZWZmZWN0IG9uIDxzZWxlY3Q+cyBpbiBzb21lIGJyb3dzZXJzLCBkdWUgdG8gdGhlIGxpbWl0ZWQgc3R5bGFiaWxpdHkgb2YgYDxzZWxlY3Q+YHMgaW4gQ1NTLlxuICBAaW5jbHVkZSBib3JkZXItcmFkaXVzKCRpbnB1dC1ib3JkZXItcmFkaXVzLCAwKTtcblxuICBAaW5jbHVkZSBib3gtc2hhZG93KCRpbnB1dC1ib3gtc2hhZG93KTtcbiAgQGluY2x1ZGUgdHJhbnNpdGlvbigkaW5wdXQtdHJhbnNpdGlvbik7XG5cbiAgJlt0eXBlPVwiZmlsZVwiXSB7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjsgLy8gcHJldmVudCBwc2V1ZG8gZWxlbWVudCBidXR0b24gb3ZlcmxhcFxuXG4gICAgJjpub3QoOmRpc2FibGVkKTpub3QoW3JlYWRvbmx5XSkge1xuICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIH1cbiAgfVxuXG4gIC8vIEN1c3RvbWl6ZSB0aGUgYDpmb2N1c2Agc3RhdGUgdG8gaW1pdGF0ZSBuYXRpdmUgV2ViS2l0IHN0eWxlcy5cbiAgJjpmb2N1cyB7XG4gICAgY29sb3I6ICRpbnB1dC1mb2N1cy1jb2xvcjtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkaW5wdXQtZm9jdXMtYmc7XG4gICAgYm9yZGVyLWNvbG9yOiAkaW5wdXQtZm9jdXMtYm9yZGVyLWNvbG9yO1xuICAgIG91dGxpbmU6IDA7XG4gICAgQGlmICRlbmFibGUtc2hhZG93cyB7XG4gICAgICBAaW5jbHVkZSBib3gtc2hhZG93KCRpbnB1dC1ib3gtc2hhZG93LCAkaW5wdXQtZm9jdXMtYm94LXNoYWRvdyk7XG4gICAgfSBAZWxzZSB7XG4gICAgICAvLyBBdm9pZCB1c2luZyBtaXhpbiBzbyB3ZSBjYW4gcGFzcyBjdXN0b20gZm9jdXMgc2hhZG93IHByb3Blcmx5XG4gICAgICBib3gtc2hhZG93OiAkaW5wdXQtZm9jdXMtYm94LXNoYWRvdztcbiAgICB9XG4gIH1cblxuICAvLyBBZGQgc29tZSBoZWlnaHQgdG8gZGF0ZSBpbnB1dHMgb24gaU9TXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9pc3N1ZXMvMjMzMDdcbiAgLy8gVE9ETzogd2UgY2FuIHJlbW92ZSB0aGlzIHdvcmthcm91bmQgb25jZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk4OTU5IGlzIHJlc29sdmVkXG4gICY6Oi13ZWJraXQtZGF0ZS1hbmQtdGltZS12YWx1ZSB7XG4gICAgLy8gTXVsdGlwbHkgbGluZS1oZWlnaHQgYnkgMWVtIGlmIGl0IGhhcyBubyB1bml0XG4gICAgaGVpZ2h0OiBpZih1bml0KCRpbnB1dC1saW5lLWhlaWdodCkgPT0gXCJcIiwgJGlucHV0LWxpbmUtaGVpZ2h0ICogMWVtLCAkaW5wdXQtbGluZS1oZWlnaHQpO1xuICB9XG5cbiAgLy8gUGxhY2Vob2xkZXJcbiAgJjo6cGxhY2Vob2xkZXIge1xuICAgIGNvbG9yOiAkaW5wdXQtcGxhY2Vob2xkZXItY29sb3I7XG4gICAgLy8gT3ZlcnJpZGUgRmlyZWZveCdzIHVudXN1YWwgZGVmYXVsdCBvcGFjaXR5OyBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL3B1bGwvMTE1MjYuXG4gICAgb3BhY2l0eTogMTtcbiAgfVxuXG4gIC8vIERpc2FibGVkIGFuZCByZWFkLW9ubHkgaW5wdXRzXG4gIC8vXG4gIC8vIEhUTUw1IHNheXMgdGhhdCBjb250cm9scyB1bmRlciBhIGZpZWxkc2V0ID4gbGVnZW5kOmZpcnN0LWNoaWxkIHdvbid0IGJlXG4gIC8vIGRpc2FibGVkIGlmIHRoZSBmaWVsZHNldCBpcyBkaXNhYmxlZC4gRHVlIHRvIGltcGxlbWVudGF0aW9uIGRpZmZpY3VsdHksIHdlXG4gIC8vIGRvbid0IGhvbm9yIHRoYXQgZWRnZSBjYXNlOyB3ZSBzdHlsZSB0aGVtIGFzIGRpc2FibGVkIGFueXdheS5cbiAgJjpkaXNhYmxlZCxcbiAgJltyZWFkb25seV0ge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICRpbnB1dC1kaXNhYmxlZC1iZztcbiAgICBib3JkZXItY29sb3I6ICRpbnB1dC1kaXNhYmxlZC1ib3JkZXItY29sb3I7XG4gICAgLy8gaU9TIGZpeCBmb3IgdW5yZWFkYWJsZSBkaXNhYmxlZCBjb250ZW50OyBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2lzc3Vlcy8xMTY1NS5cbiAgICBvcGFjaXR5OiAxO1xuICB9XG5cbiAgLy8gRmlsZSBpbnB1dCBidXR0b25zIHRoZW1pbmdcbiAgJjo6ZmlsZS1zZWxlY3Rvci1idXR0b24ge1xuICAgIHBhZGRpbmc6ICRpbnB1dC1wYWRkaW5nLXkgJGlucHV0LXBhZGRpbmcteDtcbiAgICBtYXJnaW46ICgtJGlucHV0LXBhZGRpbmcteSkgKC0kaW5wdXQtcGFkZGluZy14KTtcbiAgICBtYXJnaW4taW5saW5lLWVuZDogJGlucHV0LXBhZGRpbmcteDtcbiAgICBjb2xvcjogJGZvcm0tZmlsZS1idXR0b24tY29sb3I7XG4gICAgQGluY2x1ZGUgZ3JhZGllbnQtYmcoJGZvcm0tZmlsZS1idXR0b24tYmcpO1xuICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICAgIGJvcmRlci1jb2xvcjogaW5oZXJpdDtcbiAgICBib3JkZXItc3R5bGU6IHNvbGlkO1xuICAgIGJvcmRlci13aWR0aDogMDtcbiAgICBib3JkZXItaW5saW5lLWVuZC13aWR0aDogJGlucHV0LWJvcmRlci13aWR0aDtcbiAgICBib3JkZXItcmFkaXVzOiAwOyAvLyBzdHlsZWxpbnQtZGlzYWJsZS1saW5lIHByb3BlcnR5LWRpc2FsbG93ZWQtbGlzdFxuICAgIEBpbmNsdWRlIHRyYW5zaXRpb24oJGJ0bi10cmFuc2l0aW9uKTtcbiAgfVxuXG4gICY6aG92ZXI6bm90KDpkaXNhYmxlZCk6bm90KFtyZWFkb25seV0pOjpmaWxlLXNlbGVjdG9yLWJ1dHRvbiB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJGZvcm0tZmlsZS1idXR0b24taG92ZXItYmc7XG4gIH1cblxuICAmOjotd2Via2l0LWZpbGUtdXBsb2FkLWJ1dHRvbiB7XG4gICAgcGFkZGluZzogJGlucHV0LXBhZGRpbmcteSAkaW5wdXQtcGFkZGluZy14O1xuICAgIG1hcmdpbjogKC0kaW5wdXQtcGFkZGluZy15KSAoLSRpbnB1dC1wYWRkaW5nLXgpO1xuICAgIG1hcmdpbi1pbmxpbmUtZW5kOiAkaW5wdXQtcGFkZGluZy14O1xuICAgIGNvbG9yOiAkZm9ybS1maWxlLWJ1dHRvbi1jb2xvcjtcbiAgICBAaW5jbHVkZSBncmFkaWVudC1iZygkZm9ybS1maWxlLWJ1dHRvbi1iZyk7XG4gICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gICAgYm9yZGVyLWNvbG9yOiBpbmhlcml0O1xuICAgIGJvcmRlci1zdHlsZTogc29saWQ7XG4gICAgYm9yZGVyLXdpZHRoOiAwO1xuICAgIGJvcmRlci1pbmxpbmUtZW5kLXdpZHRoOiAkaW5wdXQtYm9yZGVyLXdpZHRoO1xuICAgIGJvcmRlci1yYWRpdXM6IDA7IC8vIHN0eWxlbGludC1kaXNhYmxlLWxpbmUgcHJvcGVydHktZGlzYWxsb3dlZC1saXN0XG4gICAgQGluY2x1ZGUgdHJhbnNpdGlvbigkYnRuLXRyYW5zaXRpb24pO1xuICB9XG5cbiAgJjpob3Zlcjpub3QoOmRpc2FibGVkKTpub3QoW3JlYWRvbmx5XSk6Oi13ZWJraXQtZmlsZS11cGxvYWQtYnV0dG9uIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkZm9ybS1maWxlLWJ1dHRvbi1ob3Zlci1iZztcbiAgfVxufVxuXG4vLyBSZWFkb25seSBjb250cm9scyBhcyBwbGFpbiB0ZXh0XG4vL1xuLy8gQXBwbHkgY2xhc3MgdG8gYSByZWFkb25seSBpbnB1dCB0byBtYWtlIGl0IGFwcGVhciBsaWtlIHJlZ3VsYXIgcGxhaW5cbi8vIHRleHQgKHdpdGhvdXQgYW55IGJvcmRlciwgYmFja2dyb3VuZCBjb2xvciwgZm9jdXMgaW5kaWNhdG9yKVxuXG4uZm9ybS1jb250cm9sLXBsYWludGV4dCB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICB3aWR0aDogMTAwJTtcbiAgcGFkZGluZzogJGlucHV0LXBhZGRpbmcteSAwO1xuICBtYXJnaW4tYm90dG9tOiAwOyAvLyBtYXRjaCBpbnB1dHMgaWYgdGhpcyBjbGFzcyBjb21lcyBvbiBpbnB1dHMgd2l0aCBkZWZhdWx0IG1hcmdpbnNcbiAgbGluZS1oZWlnaHQ6ICRpbnB1dC1saW5lLWhlaWdodDtcbiAgY29sb3I6ICRpbnB1dC1wbGFpbnRleHQtY29sb3I7XG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xuICBib3JkZXI6IHNvbGlkIHRyYW5zcGFyZW50O1xuICBib3JkZXItd2lkdGg6ICRpbnB1dC1ib3JkZXItd2lkdGggMDtcblxuICAmLmZvcm0tY29udHJvbC1zbSxcbiAgJi5mb3JtLWNvbnRyb2wtbGcge1xuICAgIHBhZGRpbmctcmlnaHQ6IDA7XG4gICAgcGFkZGluZy1sZWZ0OiAwO1xuICB9XG59XG5cbi8vIEZvcm0gY29udHJvbCBzaXppbmdcbi8vXG4vLyBCdWlsZCBvbiBgLmZvcm0tY29udHJvbGAgd2l0aCBtb2RpZmllciBjbGFzc2VzIHRvIGRlY3JlYXNlIG9yIGluY3JlYXNlIHRoZVxuLy8gaGVpZ2h0IGFuZCBmb250LXNpemUgb2YgZm9ybSBjb250cm9scy5cbi8vXG4vLyBSZXBlYXRlZCBpbiBgX2lucHV0X2dyb3VwLnNjc3NgIHRvIGF2b2lkIFNhc3MgZXh0ZW5kIGlzc3Vlcy5cblxuLmZvcm0tY29udHJvbC1zbSB7XG4gIG1pbi1oZWlnaHQ6ICRpbnB1dC1oZWlnaHQtc207XG4gIHBhZGRpbmc6ICRpbnB1dC1wYWRkaW5nLXktc20gJGlucHV0LXBhZGRpbmcteC1zbTtcbiAgQGluY2x1ZGUgZm9udC1zaXplKCRpbnB1dC1mb250LXNpemUtc20pO1xuICBAaW5jbHVkZSBib3JkZXItcmFkaXVzKCRpbnB1dC1ib3JkZXItcmFkaXVzLXNtKTtcblxuICAmOjpmaWxlLXNlbGVjdG9yLWJ1dHRvbiB7XG4gICAgcGFkZGluZzogJGlucHV0LXBhZGRpbmcteS1zbSAkaW5wdXQtcGFkZGluZy14LXNtO1xuICAgIG1hcmdpbjogKC0kaW5wdXQtcGFkZGluZy15LXNtKSAoLSRpbnB1dC1wYWRkaW5nLXgtc20pO1xuICAgIG1hcmdpbi1pbmxpbmUtZW5kOiAkaW5wdXQtcGFkZGluZy14LXNtO1xuICB9XG5cbiAgJjo6LXdlYmtpdC1maWxlLXVwbG9hZC1idXR0b24ge1xuICAgIHBhZGRpbmc6ICRpbnB1dC1wYWRkaW5nLXktc20gJGlucHV0LXBhZGRpbmcteC1zbTtcbiAgICBtYXJnaW46ICgtJGlucHV0LXBhZGRpbmcteS1zbSkgKC0kaW5wdXQtcGFkZGluZy14LXNtKTtcbiAgICBtYXJnaW4taW5saW5lLWVuZDogJGlucHV0LXBhZGRpbmcteC1zbTtcbiAgfVxufVxuXG4uZm9ybS1jb250cm9sLWxnIHtcbiAgbWluLWhlaWdodDogJGlucHV0LWhlaWdodC1sZztcbiAgcGFkZGluZzogJGlucHV0LXBhZGRpbmcteS1sZyAkaW5wdXQtcGFkZGluZy14LWxnO1xuICBAaW5jbHVkZSBmb250LXNpemUoJGlucHV0LWZvbnQtc2l6ZS1sZyk7XG4gIEBpbmNsdWRlIGJvcmRlci1yYWRpdXMoJGlucHV0LWJvcmRlci1yYWRpdXMtbGcpO1xuXG4gICY6OmZpbGUtc2VsZWN0b3ItYnV0dG9uIHtcbiAgICBwYWRkaW5nOiAkaW5wdXQtcGFkZGluZy15LWxnICRpbnB1dC1wYWRkaW5nLXgtbGc7XG4gICAgbWFyZ2luOiAoLSRpbnB1dC1wYWRkaW5nLXktbGcpICgtJGlucHV0LXBhZGRpbmcteC1sZyk7XG4gICAgbWFyZ2luLWlubGluZS1lbmQ6ICRpbnB1dC1wYWRkaW5nLXgtbGc7XG4gIH1cblxuICAmOjotd2Via2l0LWZpbGUtdXBsb2FkLWJ1dHRvbiB7XG4gICAgcGFkZGluZzogJGlucHV0LXBhZGRpbmcteS1sZyAkaW5wdXQtcGFkZGluZy14LWxnO1xuICAgIG1hcmdpbjogKC0kaW5wdXQtcGFkZGluZy15LWxnKSAoLSRpbnB1dC1wYWRkaW5nLXgtbGcpO1xuICAgIG1hcmdpbi1pbmxpbmUtZW5kOiAkaW5wdXQtcGFkZGluZy14LWxnO1xuICB9XG59XG5cbi8vIE1ha2Ugc3VyZSB0ZXh0YXJlYXMgZG9uJ3Qgc2hyaW5rIHRvbyBtdWNoIHdoZW4gcmVzaXplZFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL3B1bGwvMjkxMjRcbi8vIHN0eWxlbGludC1kaXNhYmxlIHNlbGVjdG9yLW5vLXF1YWxpZnlpbmctdHlwZVxudGV4dGFyZWEge1xuICAmLmZvcm0tY29udHJvbCB7XG4gICAgbWluLWhlaWdodDogJGlucHV0LWhlaWdodDtcbiAgfVxuXG4gICYuZm9ybS1jb250cm9sLXNtIHtcbiAgICBtaW4taGVpZ2h0OiAkaW5wdXQtaGVpZ2h0LXNtO1xuICB9XG5cbiAgJi5mb3JtLWNvbnRyb2wtbGcge1xuICAgIG1pbi1oZWlnaHQ6ICRpbnB1dC1oZWlnaHQtbGc7XG4gIH1cbn1cbi8vIHN0eWxlbGludC1lbmFibGUgc2VsZWN0b3Itbm8tcXVhbGlmeWluZy10eXBlXG5cbi5mb3JtLWNvbnRyb2wtY29sb3Ige1xuICB3aWR0aDogJGZvcm0tY29sb3Itd2lkdGg7XG4gIGhlaWdodDogYXV0bzsgLy8gT3ZlcnJpZGUgZml4ZWQgYnJvd3NlciBoZWlnaHRcbiAgcGFkZGluZzogJGlucHV0LXBhZGRpbmcteTtcblxuICAmOm5vdCg6ZGlzYWJsZWQpOm5vdChbcmVhZG9ubHldKSB7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICB9XG5cbiAgJjo6LW1vei1jb2xvci1zd2F0Y2gge1xuICAgIGhlaWdodDogaWYodW5pdCgkaW5wdXQtbGluZS1oZWlnaHQpID09IFwiXCIsICRpbnB1dC1saW5lLWhlaWdodCAqIDFlbSwgJGlucHV0LWxpbmUtaGVpZ2h0KTtcbiAgICBAaW5jbHVkZSBib3JkZXItcmFkaXVzKCRpbnB1dC1ib3JkZXItcmFkaXVzKTtcbiAgfVxuXG4gICY6Oi13ZWJraXQtY29sb3Itc3dhdGNoIHtcbiAgICBoZWlnaHQ6IGlmKHVuaXQoJGlucHV0LWxpbmUtaGVpZ2h0KSA9PSBcIlwiLCAkaW5wdXQtbGluZS1oZWlnaHQgKiAxZW0sICRpbnB1dC1saW5lLWhlaWdodCk7XG4gICAgQGluY2x1ZGUgYm9yZGVyLXJhZGl1cygkaW5wdXQtYm9yZGVyLXJhZGl1cyk7XG4gIH1cbn1cbiIsIi8vIHN0eWxlbGludC1kaXNhYmxlIHByb3BlcnR5LWRpc2FsbG93ZWQtbGlzdFxuQG1peGluIHRyYW5zaXRpb24oJHRyYW5zaXRpb24uLi4pIHtcbiAgQGlmIGxlbmd0aCgkdHJhbnNpdGlvbikgPT0gMCB7XG4gICAgJHRyYW5zaXRpb246ICR0cmFuc2l0aW9uLWJhc2U7XG4gIH1cblxuICBAaWYgbGVuZ3RoKCR0cmFuc2l0aW9uKSA+IDEge1xuICAgIEBlYWNoICR2YWx1ZSBpbiAkdHJhbnNpdGlvbiB7XG4gICAgICBAaWYgJHZhbHVlID09IG51bGwgb3IgJHZhbHVlID09IG5vbmUge1xuICAgICAgICBAd2FybiBcIlRoZSBrZXl3b3JkICdub25lJyBvciAnbnVsbCcgbXVzdCBiZSB1c2VkIGFzIGEgc2luZ2xlIGFyZ3VtZW50LlwiO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIEBpZiAkZW5hYmxlLXRyYW5zaXRpb25zIHtcbiAgICBAaWYgbnRoKCR0cmFuc2l0aW9uLCAxKSAhPSBudWxsIHtcbiAgICAgIHRyYW5zaXRpb246ICR0cmFuc2l0aW9uO1xuICAgIH1cblxuICAgIEBpZiAkZW5hYmxlLXJlZHVjZWQtbW90aW9uIGFuZCBudGgoJHRyYW5zaXRpb24sIDEpICE9IG51bGwgYW5kIG50aCgkdHJhbnNpdGlvbiwgMSkgIT0gbm9uZSB7XG4gICAgICBAbWVkaWEgKHByZWZlcnMtcmVkdWNlZC1tb3Rpb246IHJlZHVjZSkge1xuICAgICAgICB0cmFuc2l0aW9uOiBub25lO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIiwiLy8gR3JhZGllbnRzXG5cbi8vIHNjc3MtZG9jcy1zdGFydCBncmFkaWVudC1iZy1taXhpblxuQG1peGluIGdyYWRpZW50LWJnKCRjb2xvcjogbnVsbCkge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAkY29sb3I7XG5cbiAgQGlmICRlbmFibGUtZ3JhZGllbnRzIHtcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiB2YXIoLS0jeyR2YXJpYWJsZS1wcmVmaXh9Z3JhZGllbnQpO1xuICB9XG59XG4vLyBzY3NzLWRvY3MtZW5kIGdyYWRpZW50LWJnLW1peGluXG5cbi8vIHNjc3MtZG9jcy1zdGFydCBncmFkaWVudC1taXhpbnNcbi8vIEhvcml6b250YWwgZ3JhZGllbnQsIGZyb20gbGVmdCB0byByaWdodFxuLy9cbi8vIENyZWF0ZXMgdHdvIGNvbG9yIHN0b3BzLCBzdGFydCBhbmQgZW5kLCBieSBzcGVjaWZ5aW5nIGEgY29sb3IgYW5kIHBvc2l0aW9uIGZvciBlYWNoIGNvbG9yIHN0b3AuXG5AbWl4aW4gZ3JhZGllbnQteCgkc3RhcnQtY29sb3I6ICRncmF5LTcwMCwgJGVuZC1jb2xvcjogJGdyYXktODAwLCAkc3RhcnQtcGVyY2VudDogMCUsICRlbmQtcGVyY2VudDogMTAwJSkge1xuICBiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsICRzdGFydC1jb2xvciAkc3RhcnQtcGVyY2VudCwgJGVuZC1jb2xvciAkZW5kLXBlcmNlbnQpO1xufVxuXG4vLyBWZXJ0aWNhbCBncmFkaWVudCwgZnJvbSB0b3AgdG8gYm90dG9tXG4vL1xuLy8gQ3JlYXRlcyB0d28gY29sb3Igc3RvcHMsIHN0YXJ0IGFuZCBlbmQsIGJ5IHNwZWNpZnlpbmcgYSBjb2xvciBhbmQgcG9zaXRpb24gZm9yIGVhY2ggY29sb3Igc3RvcC5cbkBtaXhpbiBncmFkaWVudC15KCRzdGFydC1jb2xvcjogJGdyYXktNzAwLCAkZW5kLWNvbG9yOiAkZ3JheS04MDAsICRzdGFydC1wZXJjZW50OiBudWxsLCAkZW5kLXBlcmNlbnQ6IG51bGwpIHtcbiAgYmFja2dyb3VuZC1pbWFnZTogbGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwgJHN0YXJ0LWNvbG9yICRzdGFydC1wZXJjZW50LCAkZW5kLWNvbG9yICRlbmQtcGVyY2VudCk7XG59XG5cbkBtaXhpbiBncmFkaWVudC1kaXJlY3Rpb25hbCgkc3RhcnQtY29sb3I6ICRncmF5LTcwMCwgJGVuZC1jb2xvcjogJGdyYXktODAwLCAkZGVnOiA0NWRlZykge1xuICBiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQoJGRlZywgJHN0YXJ0LWNvbG9yLCAkZW5kLWNvbG9yKTtcbn1cblxuQG1peGluIGdyYWRpZW50LXgtdGhyZWUtY29sb3JzKCRzdGFydC1jb2xvcjogJGJsdWUsICRtaWQtY29sb3I6ICRwdXJwbGUsICRjb2xvci1zdG9wOiA1MCUsICRlbmQtY29sb3I6ICRyZWQpIHtcbiAgYmFja2dyb3VuZC1pbWFnZTogbGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCAkc3RhcnQtY29sb3IsICRtaWQtY29sb3IgJGNvbG9yLXN0b3AsICRlbmQtY29sb3IpO1xufVxuXG5AbWl4aW4gZ3JhZGllbnQteS10aHJlZS1jb2xvcnMoJHN0YXJ0LWNvbG9yOiAkYmx1ZSwgJG1pZC1jb2xvcjogJHB1cnBsZSwgJGNvbG9yLXN0b3A6IDUwJSwgJGVuZC1jb2xvcjogJHJlZCkge1xuICBiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQoJHN0YXJ0LWNvbG9yLCAkbWlkLWNvbG9yICRjb2xvci1zdG9wLCAkZW5kLWNvbG9yKTtcbn1cblxuQG1peGluIGdyYWRpZW50LXJhZGlhbCgkaW5uZXItY29sb3I6ICRncmF5LTcwMCwgJG91dGVyLWNvbG9yOiAkZ3JheS04MDApIHtcbiAgYmFja2dyb3VuZC1pbWFnZTogcmFkaWFsLWdyYWRpZW50KGNpcmNsZSwgJGlubmVyLWNvbG9yLCAkb3V0ZXItY29sb3IpO1xufVxuXG5AbWl4aW4gZ3JhZGllbnQtc3RyaXBlZCgkY29sb3I6IHJnYmEoJHdoaXRlLCAuMTUpLCAkYW5nbGU6IDQ1ZGVnKSB7XG4gIGJhY2tncm91bmQtaW1hZ2U6IGxpbmVhci1ncmFkaWVudCgkYW5nbGUsICRjb2xvciAyNSUsIHRyYW5zcGFyZW50IDI1JSwgdHJhbnNwYXJlbnQgNTAlLCAkY29sb3IgNTAlLCAkY29sb3IgNzUlLCB0cmFuc3BhcmVudCA3NSUsIHRyYW5zcGFyZW50KTtcbn1cbi8vIHNjc3MtZG9jcy1lbmQgZ3JhZGllbnQtbWl4aW5zXG4iLCIvLyBTZWxlY3Rcbi8vXG4vLyBSZXBsYWNlcyB0aGUgYnJvd3NlciBkZWZhdWx0IHNlbGVjdCB3aXRoIGEgY3VzdG9tIG9uZSwgbW9zdGx5IHB1bGxlZCBmcm9tXG4vLyBodHRwczovL3ByaW1lci5naXRodWIuaW8vLlxuXG4uZm9ybS1zZWxlY3Qge1xuICBkaXNwbGF5OiBibG9jaztcbiAgd2lkdGg6IDEwMCU7XG4gIHBhZGRpbmc6ICRmb3JtLXNlbGVjdC1wYWRkaW5nLXkgJGZvcm0tc2VsZWN0LWluZGljYXRvci1wYWRkaW5nICRmb3JtLXNlbGVjdC1wYWRkaW5nLXkgJGZvcm0tc2VsZWN0LXBhZGRpbmcteDtcbiAgLy8gc3R5bGVsaW50LWRpc2FibGUtbmV4dC1saW5lIHByb3BlcnR5LW5vLXZlbmRvci1wcmVmaXhcbiAgLW1vei1wYWRkaW5nLXN0YXJ0OiBzdWJ0cmFjdCgkZm9ybS1zZWxlY3QtcGFkZGluZy14LCAzcHgpOyAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2lzc3Vlcy8zMjYzNlxuICBmb250LWZhbWlseTogJGZvcm0tc2VsZWN0LWZvbnQtZmFtaWx5O1xuICBAaW5jbHVkZSBmb250LXNpemUoJGZvcm0tc2VsZWN0LWZvbnQtc2l6ZSk7XG4gIGZvbnQtd2VpZ2h0OiAkZm9ybS1zZWxlY3QtZm9udC13ZWlnaHQ7XG4gIGxpbmUtaGVpZ2h0OiAkZm9ybS1zZWxlY3QtbGluZS1oZWlnaHQ7XG4gIGNvbG9yOiAkZm9ybS1zZWxlY3QtY29sb3I7XG4gIGJhY2tncm91bmQtY29sb3I6ICRmb3JtLXNlbGVjdC1iZztcbiAgYmFja2dyb3VuZC1pbWFnZTogZXNjYXBlLXN2ZygkZm9ybS1zZWxlY3QtaW5kaWNhdG9yKTtcbiAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogJGZvcm0tc2VsZWN0LWJnLXBvc2l0aW9uO1xuICBiYWNrZ3JvdW5kLXNpemU6ICRmb3JtLXNlbGVjdC1iZy1zaXplO1xuICBib3JkZXI6ICRmb3JtLXNlbGVjdC1ib3JkZXItd2lkdGggc29saWQgJGZvcm0tc2VsZWN0LWJvcmRlci1jb2xvcjtcbiAgQGluY2x1ZGUgYm9yZGVyLXJhZGl1cygkZm9ybS1zZWxlY3QtYm9yZGVyLXJhZGl1cywgMCk7XG4gIEBpbmNsdWRlIGJveC1zaGFkb3coJGZvcm0tc2VsZWN0LWJveC1zaGFkb3cpO1xuICBAaW5jbHVkZSB0cmFuc2l0aW9uKCRmb3JtLXNlbGVjdC10cmFuc2l0aW9uKTtcbiAgYXBwZWFyYW5jZTogbm9uZTtcblxuICAmOmZvY3VzIHtcbiAgICBib3JkZXItY29sb3I6ICRmb3JtLXNlbGVjdC1mb2N1cy1ib3JkZXItY29sb3I7XG4gICAgb3V0bGluZTogMDtcbiAgICBAaWYgJGVuYWJsZS1zaGFkb3dzIHtcbiAgICAgIEBpbmNsdWRlIGJveC1zaGFkb3coJGZvcm0tc2VsZWN0LWJveC1zaGFkb3csICRmb3JtLXNlbGVjdC1mb2N1cy1ib3gtc2hhZG93KTtcbiAgICB9IEBlbHNlIHtcbiAgICAgIC8vIEF2b2lkIHVzaW5nIG1peGluIHNvIHdlIGNhbiBwYXNzIGN1c3RvbSBmb2N1cyBzaGFkb3cgcHJvcGVybHlcbiAgICAgIGJveC1zaGFkb3c6ICRmb3JtLXNlbGVjdC1mb2N1cy1ib3gtc2hhZG93O1xuICAgIH1cbiAgfVxuXG4gICZbbXVsdGlwbGVdLFxuICAmW3NpemVdOm5vdChbc2l6ZT1cIjFcIl0pIHtcbiAgICBwYWRkaW5nLXJpZ2h0OiAkZm9ybS1zZWxlY3QtcGFkZGluZy14O1xuICAgIGJhY2tncm91bmQtaW1hZ2U6IG5vbmU7XG4gIH1cblxuICAmOmRpc2FibGVkIHtcbiAgICBjb2xvcjogJGZvcm0tc2VsZWN0LWRpc2FibGVkLWNvbG9yO1xuICAgIGJhY2tncm91bmQtY29sb3I6ICRmb3JtLXNlbGVjdC1kaXNhYmxlZC1iZztcbiAgICBib3JkZXItY29sb3I6ICRmb3JtLXNlbGVjdC1kaXNhYmxlZC1ib3JkZXItY29sb3I7XG4gIH1cblxuICAvLyBSZW1vdmUgb3V0bGluZSBmcm9tIHNlbGVjdCBib3ggaW4gRkZcbiAgJjotbW96LWZvY3VzcmluZyB7XG4gICAgY29sb3I6IHRyYW5zcGFyZW50O1xuICAgIHRleHQtc2hhZG93OiAwIDAgMCAkZm9ybS1zZWxlY3QtY29sb3I7XG4gIH1cbn1cblxuLmZvcm0tc2VsZWN0LXNtIHtcbiAgcGFkZGluZy10b3A6ICRmb3JtLXNlbGVjdC1wYWRkaW5nLXktc207XG4gIHBhZGRpbmctYm90dG9tOiAkZm9ybS1zZWxlY3QtcGFkZGluZy15LXNtO1xuICBwYWRkaW5nLWxlZnQ6ICRmb3JtLXNlbGVjdC1wYWRkaW5nLXgtc207XG4gIEBpbmNsdWRlIGZvbnQtc2l6ZSgkZm9ybS1zZWxlY3QtZm9udC1zaXplLXNtKTtcbiAgQGluY2x1ZGUgYm9yZGVyLXJhZGl1cygkZm9ybS1zZWxlY3QtYm9yZGVyLXJhZGl1cy1zbSk7XG59XG5cbi5mb3JtLXNlbGVjdC1sZyB7XG4gIHBhZGRpbmctdG9wOiAkZm9ybS1zZWxlY3QtcGFkZGluZy15LWxnO1xuICBwYWRkaW5nLWJvdHRvbTogJGZvcm0tc2VsZWN0LXBhZGRpbmcteS1sZztcbiAgcGFkZGluZy1sZWZ0OiAkZm9ybS1zZWxlY3QtcGFkZGluZy14LWxnO1xuICBAaW5jbHVkZSBmb250LXNpemUoJGZvcm0tc2VsZWN0LWZvbnQtc2l6ZS1sZyk7XG4gIEBpbmNsdWRlIGJvcmRlci1yYWRpdXMoJGZvcm0tc2VsZWN0LWJvcmRlci1yYWRpdXMtbGcpO1xufVxuIiwiLy9cbi8vIENoZWNrL3JhZGlvXG4vL1xuXG4uZm9ybS1jaGVjayB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBtaW4taGVpZ2h0OiAkZm9ybS1jaGVjay1taW4taGVpZ2h0O1xuICBwYWRkaW5nLWxlZnQ6ICRmb3JtLWNoZWNrLXBhZGRpbmctc3RhcnQ7XG4gIG1hcmdpbi1ib3R0b206ICRmb3JtLWNoZWNrLW1hcmdpbi1ib3R0b207XG5cbiAgLmZvcm0tY2hlY2staW5wdXQge1xuICAgIGZsb2F0OiBsZWZ0O1xuICAgIG1hcmdpbi1sZWZ0OiAkZm9ybS1jaGVjay1wYWRkaW5nLXN0YXJ0ICogLTE7XG4gIH1cbn1cblxuLmZvcm0tY2hlY2staW5wdXQge1xuICB3aWR0aDogJGZvcm0tY2hlY2staW5wdXQtd2lkdGg7XG4gIGhlaWdodDogJGZvcm0tY2hlY2staW5wdXQtd2lkdGg7XG4gIG1hcmdpbi10b3A6ICgkbGluZS1oZWlnaHQtYmFzZSAtICRmb3JtLWNoZWNrLWlucHV0LXdpZHRoKSAqIC41OyAvLyBsaW5lLWhlaWdodCBtaW51cyBjaGVjayBoZWlnaHRcbiAgdmVydGljYWwtYWxpZ246IHRvcDtcbiAgYmFja2dyb3VuZC1jb2xvcjogJGZvcm0tY2hlY2staW5wdXQtYmc7XG4gIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IGNlbnRlcjtcbiAgYmFja2dyb3VuZC1zaXplOiBjb250YWluO1xuICBib3JkZXI6ICRmb3JtLWNoZWNrLWlucHV0LWJvcmRlcjtcbiAgYXBwZWFyYW5jZTogbm9uZTtcbiAgY29sb3ItYWRqdXN0OiBleGFjdDsgLy8gS2VlcCB0aGVtZWQgYXBwZWFyYW5jZSBmb3IgcHJpbnRcbiAgQGluY2x1ZGUgdHJhbnNpdGlvbigkZm9ybS1jaGVjay10cmFuc2l0aW9uKTtcblxuICAmW3R5cGU9XCJjaGVja2JveFwiXSB7XG4gICAgQGluY2x1ZGUgYm9yZGVyLXJhZGl1cygkZm9ybS1jaGVjay1pbnB1dC1ib3JkZXItcmFkaXVzKTtcbiAgfVxuXG4gICZbdHlwZT1cInJhZGlvXCJdIHtcbiAgICAvLyBzdHlsZWxpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJvcGVydHktZGlzYWxsb3dlZC1saXN0XG4gICAgYm9yZGVyLXJhZGl1czogJGZvcm0tY2hlY2stcmFkaW8tYm9yZGVyLXJhZGl1cztcbiAgfVxuXG4gICY6YWN0aXZlIHtcbiAgICBmaWx0ZXI6ICRmb3JtLWNoZWNrLWlucHV0LWFjdGl2ZS1maWx0ZXI7XG4gIH1cblxuICAmOmZvY3VzIHtcbiAgICBib3JkZXItY29sb3I6ICRmb3JtLWNoZWNrLWlucHV0LWZvY3VzLWJvcmRlcjtcbiAgICBvdXRsaW5lOiAwO1xuICAgIGJveC1zaGFkb3c6ICRmb3JtLWNoZWNrLWlucHV0LWZvY3VzLWJveC1zaGFkb3c7XG4gIH1cblxuICAmOmNoZWNrZWQge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICRmb3JtLWNoZWNrLWlucHV0LWNoZWNrZWQtYmctY29sb3I7XG4gICAgYm9yZGVyLWNvbG9yOiAkZm9ybS1jaGVjay1pbnB1dC1jaGVja2VkLWJvcmRlci1jb2xvcjtcblxuICAgICZbdHlwZT1cImNoZWNrYm94XCJdIHtcbiAgICAgIEBpZiAkZW5hYmxlLWdyYWRpZW50cyB7XG4gICAgICAgIGJhY2tncm91bmQtaW1hZ2U6IGVzY2FwZS1zdmcoJGZvcm0tY2hlY2staW5wdXQtY2hlY2tlZC1iZy1pbWFnZSksIHZhcigtLSN7JHZhcmlhYmxlLXByZWZpeH1ncmFkaWVudCk7XG4gICAgICB9IEBlbHNlIHtcbiAgICAgICAgYmFja2dyb3VuZC1pbWFnZTogZXNjYXBlLXN2ZygkZm9ybS1jaGVjay1pbnB1dC1jaGVja2VkLWJnLWltYWdlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAmW3R5cGU9XCJyYWRpb1wiXSB7XG4gICAgICBAaWYgJGVuYWJsZS1ncmFkaWVudHMge1xuICAgICAgICBiYWNrZ3JvdW5kLWltYWdlOiBlc2NhcGUtc3ZnKCRmb3JtLWNoZWNrLXJhZGlvLWNoZWNrZWQtYmctaW1hZ2UpLCB2YXIoLS0jeyR2YXJpYWJsZS1wcmVmaXh9Z3JhZGllbnQpO1xuICAgICAgfSBAZWxzZSB7XG4gICAgICAgIGJhY2tncm91bmQtaW1hZ2U6IGVzY2FwZS1zdmcoJGZvcm0tY2hlY2stcmFkaW8tY2hlY2tlZC1iZy1pbWFnZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgJlt0eXBlPVwiY2hlY2tib3hcIl06aW5kZXRlcm1pbmF0ZSB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJGZvcm0tY2hlY2staW5wdXQtaW5kZXRlcm1pbmF0ZS1iZy1jb2xvcjtcbiAgICBib3JkZXItY29sb3I6ICRmb3JtLWNoZWNrLWlucHV0LWluZGV0ZXJtaW5hdGUtYm9yZGVyLWNvbG9yO1xuXG4gICAgQGlmICRlbmFibGUtZ3JhZGllbnRzIHtcbiAgICAgIGJhY2tncm91bmQtaW1hZ2U6IGVzY2FwZS1zdmcoJGZvcm0tY2hlY2staW5wdXQtaW5kZXRlcm1pbmF0ZS1iZy1pbWFnZSksIHZhcigtLSN7JHZhcmlhYmxlLXByZWZpeH1ncmFkaWVudCk7XG4gICAgfSBAZWxzZSB7XG4gICAgICBiYWNrZ3JvdW5kLWltYWdlOiBlc2NhcGUtc3ZnKCRmb3JtLWNoZWNrLWlucHV0LWluZGV0ZXJtaW5hdGUtYmctaW1hZ2UpO1xuICAgIH1cbiAgfVxuXG4gICY6ZGlzYWJsZWQge1xuICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICAgIGZpbHRlcjogbm9uZTtcbiAgICBvcGFjaXR5OiAkZm9ybS1jaGVjay1pbnB1dC1kaXNhYmxlZC1vcGFjaXR5O1xuICB9XG5cbiAgLy8gVXNlIGRpc2FibGVkIGF0dHJpYnV0ZSBpbiBhZGRpdGlvbiBvZiA6ZGlzYWJsZWQgcHNldWRvLWNsYXNzXG4gIC8vIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2lzc3Vlcy8yODI0N1xuICAmW2Rpc2FibGVkXSxcbiAgJjpkaXNhYmxlZCB7XG4gICAgfiAuZm9ybS1jaGVjay1sYWJlbCB7XG4gICAgICBvcGFjaXR5OiAkZm9ybS1jaGVjay1sYWJlbC1kaXNhYmxlZC1vcGFjaXR5O1xuICAgIH1cbiAgfVxufVxuXG4uZm9ybS1jaGVjay1sYWJlbCB7XG4gIGNvbG9yOiAkZm9ybS1jaGVjay1sYWJlbC1jb2xvcjtcbiAgY3Vyc29yOiAkZm9ybS1jaGVjay1sYWJlbC1jdXJzb3I7XG59XG5cbi8vXG4vLyBTd2l0Y2hcbi8vXG5cbi5mb3JtLXN3aXRjaCB7XG4gIHBhZGRpbmctbGVmdDogJGZvcm0tc3dpdGNoLXBhZGRpbmctc3RhcnQ7XG5cbiAgLmZvcm0tY2hlY2staW5wdXQge1xuICAgIHdpZHRoOiAkZm9ybS1zd2l0Y2gtd2lkdGg7XG4gICAgbWFyZ2luLWxlZnQ6ICRmb3JtLXN3aXRjaC1wYWRkaW5nLXN0YXJ0ICogLTE7XG4gICAgYmFja2dyb3VuZC1pbWFnZTogZXNjYXBlLXN2ZygkZm9ybS1zd2l0Y2gtYmctaW1hZ2UpO1xuICAgIGJhY2tncm91bmQtcG9zaXRpb246IGxlZnQgY2VudGVyO1xuICAgIEBpbmNsdWRlIGJvcmRlci1yYWRpdXMoJGZvcm0tc3dpdGNoLWJvcmRlci1yYWRpdXMpO1xuICAgIEBpbmNsdWRlIHRyYW5zaXRpb24oJGZvcm0tc3dpdGNoLXRyYW5zaXRpb24pO1xuXG4gICAgJjpmb2N1cyB7XG4gICAgICBiYWNrZ3JvdW5kLWltYWdlOiBlc2NhcGUtc3ZnKCRmb3JtLXN3aXRjaC1mb2N1cy1iZy1pbWFnZSk7XG4gICAgfVxuXG4gICAgJjpjaGVja2VkIHtcbiAgICAgIGJhY2tncm91bmQtcG9zaXRpb246ICRmb3JtLXN3aXRjaC1jaGVja2VkLWJnLXBvc2l0aW9uO1xuXG4gICAgICBAaWYgJGVuYWJsZS1ncmFkaWVudHMge1xuICAgICAgICBiYWNrZ3JvdW5kLWltYWdlOiBlc2NhcGUtc3ZnKCRmb3JtLXN3aXRjaC1jaGVja2VkLWJnLWltYWdlKSwgdmFyKC0tI3skdmFyaWFibGUtcHJlZml4fWdyYWRpZW50KTtcbiAgICAgIH0gQGVsc2Uge1xuICAgICAgICBiYWNrZ3JvdW5kLWltYWdlOiBlc2NhcGUtc3ZnKCRmb3JtLXN3aXRjaC1jaGVja2VkLWJnLWltYWdlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuLmZvcm0tY2hlY2staW5saW5lIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBtYXJnaW4tcmlnaHQ6ICRmb3JtLWNoZWNrLWlubGluZS1tYXJnaW4tZW5kO1xufVxuXG4uYnRuLWNoZWNrIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBjbGlwOiByZWN0KDAsIDAsIDAsIDApO1xuICBwb2ludGVyLWV2ZW50czogbm9uZTtcblxuICAmW2Rpc2FibGVkXSxcbiAgJjpkaXNhYmxlZCB7XG4gICAgKyAuYnRuIHtcbiAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICAgICAgZmlsdGVyOiBub25lO1xuICAgICAgb3BhY2l0eTogJGZvcm0tY2hlY2stYnRuLWNoZWNrLWRpc2FibGVkLW9wYWNpdHk7XG4gICAgfVxuICB9XG59XG4iLCIvLyBSYW5nZVxuLy9cbi8vIFN0eWxlIHJhbmdlIGlucHV0cyB0aGUgc2FtZSBhY3Jvc3MgYnJvd3NlcnMuIFZlbmRvci1zcGVjaWZpYyBydWxlcyBmb3IgcHNldWRvXG4vLyBlbGVtZW50cyBjYW5ub3QgYmUgbWl4ZWQuIEFzIHN1Y2gsIHRoZXJlIGFyZSBubyBzaGFyZWQgc3R5bGVzIGZvciBmb2N1cyBvclxuLy8gYWN0aXZlIHN0YXRlcyBvbiBwcmVmaXhlZCBzZWxlY3RvcnMuXG5cbi5mb3JtLXJhbmdlIHtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogYWRkKCRmb3JtLXJhbmdlLXRodW1iLWhlaWdodCwgJGZvcm0tcmFuZ2UtdGh1bWItZm9jdXMtYm94LXNoYWRvdy13aWR0aCAqIDIpO1xuICBwYWRkaW5nOiAwOyAvLyBOZWVkIHRvIHJlc2V0IHBhZGRpbmdcbiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gIGFwcGVhcmFuY2U6IG5vbmU7XG5cbiAgJjpmb2N1cyB7XG4gICAgb3V0bGluZTogMDtcblxuICAgIC8vIFBzZXVkby1lbGVtZW50cyBtdXN0IGJlIHNwbGl0IGFjcm9zcyBtdWx0aXBsZSBydWxlc2V0cyB0byBoYXZlIGFuIGVmZmVjdC5cbiAgICAvLyBObyBib3gtc2hhZG93KCkgbWl4aW4gZm9yIGZvY3VzIGFjY2Vzc2liaWxpdHkuXG4gICAgJjo6LXdlYmtpdC1zbGlkZXItdGh1bWIgeyBib3gtc2hhZG93OiAkZm9ybS1yYW5nZS10aHVtYi1mb2N1cy1ib3gtc2hhZG93OyB9XG4gICAgJjo6LW1vei1yYW5nZS10aHVtYiAgICAgeyBib3gtc2hhZG93OiAkZm9ybS1yYW5nZS10aHVtYi1mb2N1cy1ib3gtc2hhZG93OyB9XG4gIH1cblxuICAmOjotbW96LWZvY3VzLW91dGVyIHtcbiAgICBib3JkZXI6IDA7XG4gIH1cblxuICAmOjotd2Via2l0LXNsaWRlci10aHVtYiB7XG4gICAgd2lkdGg6ICRmb3JtLXJhbmdlLXRodW1iLXdpZHRoO1xuICAgIGhlaWdodDogJGZvcm0tcmFuZ2UtdGh1bWItaGVpZ2h0O1xuICAgIG1hcmdpbi10b3A6ICgkZm9ybS1yYW5nZS10cmFjay1oZWlnaHQgLSAkZm9ybS1yYW5nZS10aHVtYi1oZWlnaHQpICogLjU7IC8vIFdlYmtpdCBzcGVjaWZpY1xuICAgIEBpbmNsdWRlIGdyYWRpZW50LWJnKCRmb3JtLXJhbmdlLXRodW1iLWJnKTtcbiAgICBib3JkZXI6ICRmb3JtLXJhbmdlLXRodW1iLWJvcmRlcjtcbiAgICBAaW5jbHVkZSBib3JkZXItcmFkaXVzKCRmb3JtLXJhbmdlLXRodW1iLWJvcmRlci1yYWRpdXMpO1xuICAgIEBpbmNsdWRlIGJveC1zaGFkb3coJGZvcm0tcmFuZ2UtdGh1bWItYm94LXNoYWRvdyk7XG4gICAgQGluY2x1ZGUgdHJhbnNpdGlvbigkZm9ybS1yYW5nZS10aHVtYi10cmFuc2l0aW9uKTtcbiAgICBhcHBlYXJhbmNlOiBub25lO1xuXG4gICAgJjphY3RpdmUge1xuICAgICAgQGluY2x1ZGUgZ3JhZGllbnQtYmcoJGZvcm0tcmFuZ2UtdGh1bWItYWN0aXZlLWJnKTtcbiAgICB9XG4gIH1cblxuICAmOjotd2Via2l0LXNsaWRlci1ydW5uYWJsZS10cmFjayB7XG4gICAgd2lkdGg6ICRmb3JtLXJhbmdlLXRyYWNrLXdpZHRoO1xuICAgIGhlaWdodDogJGZvcm0tcmFuZ2UtdHJhY2staGVpZ2h0O1xuICAgIGNvbG9yOiB0cmFuc3BhcmVudDsgLy8gV2h5P1xuICAgIGN1cnNvcjogJGZvcm0tcmFuZ2UtdHJhY2stY3Vyc29yO1xuICAgIGJhY2tncm91bmQtY29sb3I6ICRmb3JtLXJhbmdlLXRyYWNrLWJnO1xuICAgIGJvcmRlci1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gICAgQGluY2x1ZGUgYm9yZGVyLXJhZGl1cygkZm9ybS1yYW5nZS10cmFjay1ib3JkZXItcmFkaXVzKTtcbiAgICBAaW5jbHVkZSBib3gtc2hhZG93KCRmb3JtLXJhbmdlLXRyYWNrLWJveC1zaGFkb3cpO1xuICB9XG5cbiAgJjo6LW1vei1yYW5nZS10aHVtYiB7XG4gICAgd2lkdGg6ICRmb3JtLXJhbmdlLXRodW1iLXdpZHRoO1xuICAgIGhlaWdodDogJGZvcm0tcmFuZ2UtdGh1bWItaGVpZ2h0O1xuICAgIEBpbmNsdWRlIGdyYWRpZW50LWJnKCRmb3JtLXJhbmdlLXRodW1iLWJnKTtcbiAgICBib3JkZXI6ICRmb3JtLXJhbmdlLXRodW1iLWJvcmRlcjtcbiAgICBAaW5jbHVkZSBib3JkZXItcmFkaXVzKCRmb3JtLXJhbmdlLXRodW1iLWJvcmRlci1yYWRpdXMpO1xuICAgIEBpbmNsdWRlIGJveC1zaGFkb3coJGZvcm0tcmFuZ2UtdGh1bWItYm94LXNoYWRvdyk7XG4gICAgQGluY2x1ZGUgdHJhbnNpdGlvbigkZm9ybS1yYW5nZS10aHVtYi10cmFuc2l0aW9uKTtcbiAgICBhcHBlYXJhbmNlOiBub25lO1xuXG4gICAgJjphY3RpdmUge1xuICAgICAgQGluY2x1ZGUgZ3JhZGllbnQtYmcoJGZvcm0tcmFuZ2UtdGh1bWItYWN0aXZlLWJnKTtcbiAgICB9XG4gIH1cblxuICAmOjotbW96LXJhbmdlLXRyYWNrIHtcbiAgICB3aWR0aDogJGZvcm0tcmFuZ2UtdHJhY2std2lkdGg7XG4gICAgaGVpZ2h0OiAkZm9ybS1yYW5nZS10cmFjay1oZWlnaHQ7XG4gICAgY29sb3I6IHRyYW5zcGFyZW50O1xuICAgIGN1cnNvcjogJGZvcm0tcmFuZ2UtdHJhY2stY3Vyc29yO1xuICAgIGJhY2tncm91bmQtY29sb3I6ICRmb3JtLXJhbmdlLXRyYWNrLWJnO1xuICAgIGJvcmRlci1jb2xvcjogdHJhbnNwYXJlbnQ7IC8vIEZpcmVmb3ggc3BlY2lmaWM/XG4gICAgQGluY2x1ZGUgYm9yZGVyLXJhZGl1cygkZm9ybS1yYW5nZS10cmFjay1ib3JkZXItcmFkaXVzKTtcbiAgICBAaW5jbHVkZSBib3gtc2hhZG93KCRmb3JtLXJhbmdlLXRyYWNrLWJveC1zaGFkb3cpO1xuICB9XG5cbiAgJjpkaXNhYmxlZCB7XG4gICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG5cbiAgICAmOjotd2Via2l0LXNsaWRlci10aHVtYiB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkZm9ybS1yYW5nZS10aHVtYi1kaXNhYmxlZC1iZztcbiAgICB9XG5cbiAgICAmOjotbW96LXJhbmdlLXRodW1iIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICRmb3JtLXJhbmdlLXRodW1iLWRpc2FibGVkLWJnO1xuICAgIH1cbiAgfVxufVxuIiwiLmZvcm0tZmxvYXRpbmcge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG5cbiAgPiAuZm9ybS1jb250cm9sLFxuICA+IC5mb3JtLXNlbGVjdCB7XG4gICAgaGVpZ2h0OiAkZm9ybS1mbG9hdGluZy1oZWlnaHQ7XG4gICAgbGluZS1oZWlnaHQ6ICRmb3JtLWZsb2F0aW5nLWxpbmUtaGVpZ2h0O1xuICB9XG5cbiAgPiBsYWJlbCB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRvcDogMDtcbiAgICBsZWZ0OiAwO1xuICAgIGhlaWdodDogMTAwJTsgLy8gYWxsb3cgdGV4dGFyZWFzXG4gICAgcGFkZGluZzogJGZvcm0tZmxvYXRpbmctcGFkZGluZy15ICRmb3JtLWZsb2F0aW5nLXBhZGRpbmcteDtcbiAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgICBib3JkZXI6ICRpbnB1dC1ib3JkZXItd2lkdGggc29saWQgdHJhbnNwYXJlbnQ7IC8vIFJlcXVpcmVkIGZvciBhbGlnbmluZyBsYWJlbCdzIHRleHQgd2l0aCB0aGUgaW5wdXQgYXMgaXQgYWZmZWN0cyBpbm5lciBib3ggbW9kZWxcbiAgICB0cmFuc2Zvcm0tb3JpZ2luOiAwIDA7XG4gICAgQGluY2x1ZGUgdHJhbnNpdGlvbigkZm9ybS1mbG9hdGluZy10cmFuc2l0aW9uKTtcbiAgfVxuXG4gIC8vIHN0eWxlbGludC1kaXNhYmxlIG5vLWR1cGxpY2F0ZS1zZWxlY3RvcnNcbiAgPiAuZm9ybS1jb250cm9sIHtcbiAgICBwYWRkaW5nOiAkZm9ybS1mbG9hdGluZy1wYWRkaW5nLXkgJGZvcm0tZmxvYXRpbmctcGFkZGluZy14O1xuXG4gICAgJjo6cGxhY2Vob2xkZXIge1xuICAgICAgY29sb3I6IHRyYW5zcGFyZW50O1xuICAgIH1cblxuICAgICY6Zm9jdXMsXG4gICAgJjpub3QoOnBsYWNlaG9sZGVyLXNob3duKSB7XG4gICAgICBwYWRkaW5nLXRvcDogJGZvcm0tZmxvYXRpbmctaW5wdXQtcGFkZGluZy10O1xuICAgICAgcGFkZGluZy1ib3R0b206ICRmb3JtLWZsb2F0aW5nLWlucHV0LXBhZGRpbmctYjtcbiAgICB9XG4gICAgLy8gRHVwbGljYXRlZCBiZWNhdXNlIGA6LXdlYmtpdC1hdXRvZmlsbGAgaW52YWxpZGF0ZXMgb3RoZXIgc2VsZWN0b3JzIHdoZW4gZ3JvdXBlZFxuICAgICY6LXdlYmtpdC1hdXRvZmlsbCB7XG4gICAgICBwYWRkaW5nLXRvcDogJGZvcm0tZmxvYXRpbmctaW5wdXQtcGFkZGluZy10O1xuICAgICAgcGFkZGluZy1ib3R0b206ICRmb3JtLWZsb2F0aW5nLWlucHV0LXBhZGRpbmctYjtcbiAgICB9XG4gIH1cblxuICA+IC5mb3JtLXNlbGVjdCB7XG4gICAgcGFkZGluZy10b3A6ICRmb3JtLWZsb2F0aW5nLWlucHV0LXBhZGRpbmctdDtcbiAgICBwYWRkaW5nLWJvdHRvbTogJGZvcm0tZmxvYXRpbmctaW5wdXQtcGFkZGluZy1iO1xuICB9XG5cbiAgPiAuZm9ybS1jb250cm9sOmZvY3VzLFxuICA+IC5mb3JtLWNvbnRyb2w6bm90KDpwbGFjZWhvbGRlci1zaG93biksXG4gID4gLmZvcm0tc2VsZWN0IHtcbiAgICB+IGxhYmVsIHtcbiAgICAgIG9wYWNpdHk6ICRmb3JtLWZsb2F0aW5nLWxhYmVsLW9wYWNpdHk7XG4gICAgICB0cmFuc2Zvcm06ICRmb3JtLWZsb2F0aW5nLWxhYmVsLXRyYW5zZm9ybTtcbiAgICB9XG4gIH1cbiAgLy8gRHVwbGljYXRlZCBiZWNhdXNlIGA6LXdlYmtpdC1hdXRvZmlsbGAgaW52YWxpZGF0ZXMgb3RoZXIgc2VsZWN0b3JzIHdoZW4gZ3JvdXBlZFxuICA+IC5mb3JtLWNvbnRyb2w6LXdlYmtpdC1hdXRvZmlsbCB7XG4gICAgfiBsYWJlbCB7XG4gICAgICBvcGFjaXR5OiAkZm9ybS1mbG9hdGluZy1sYWJlbC1vcGFjaXR5O1xuICAgICAgdHJhbnNmb3JtOiAkZm9ybS1mbG9hdGluZy1sYWJlbC10cmFuc2Zvcm07XG4gICAgfVxuICB9XG4gIC8vIHN0eWxlbGludC1lbmFibGUgbm8tZHVwbGljYXRlLXNlbGVjdG9yc1xufVxuIiwiLy9cbi8vIEJhc2Ugc3R5bGVzXG4vL1xuXG4uaW5wdXQtZ3JvdXAge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtd3JhcDogd3JhcDsgLy8gRm9yIGZvcm0gdmFsaWRhdGlvbiBmZWVkYmFja1xuICBhbGlnbi1pdGVtczogc3RyZXRjaDtcbiAgd2lkdGg6IDEwMCU7XG5cbiAgPiAuZm9ybS1jb250cm9sLFxuICA+IC5mb3JtLXNlbGVjdCB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlOyAvLyBGb3IgZm9jdXMgc3RhdGUncyB6LWluZGV4XG4gICAgZmxleDogMSAxIGF1dG87XG4gICAgd2lkdGg6IDElO1xuICAgIG1pbi13aWR0aDogMDsgLy8gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMzYyNDcxNDAvd2h5LWRvbnQtZmxleC1pdGVtcy1zaHJpbmstcGFzdC1jb250ZW50LXNpemVcbiAgfVxuXG4gIC8vIEJyaW5nIHRoZSBcImFjdGl2ZVwiIGZvcm0gY29udHJvbCB0byB0aGUgdG9wIG9mIHN1cnJvdW5kaW5nIGVsZW1lbnRzXG4gID4gLmZvcm0tY29udHJvbDpmb2N1cyxcbiAgPiAuZm9ybS1zZWxlY3Q6Zm9jdXMge1xuICAgIHotaW5kZXg6IDM7XG4gIH1cblxuICAvLyBFbnN1cmUgYnV0dG9ucyBhcmUgYWx3YXlzIGFib3ZlIGlucHV0cyBmb3IgbW9yZSB2aXN1YWxseSBwbGVhc2luZyBib3JkZXJzLlxuICAvLyBUaGlzIGlzbid0IG5lZWRlZCBmb3IgYC5pbnB1dC1ncm91cC10ZXh0YCBzaW5jZSBpdCBzaGFyZXMgdGhlIHNhbWUgYm9yZGVyLWNvbG9yXG4gIC8vIGFzIG91ciBpbnB1dHMuXG4gIC5idG4ge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICB6LWluZGV4OiAyO1xuXG4gICAgJjpmb2N1cyB7XG4gICAgICB6LWluZGV4OiAzO1xuICAgIH1cbiAgfVxufVxuXG5cbi8vIFRleHR1YWwgYWRkb25zXG4vL1xuLy8gU2VydmVzIGFzIGEgY2F0Y2gtYWxsIGVsZW1lbnQgZm9yIGFueSB0ZXh0IG9yIHJhZGlvL2NoZWNrYm94IGlucHV0IHlvdSB3aXNoXG4vLyB0byBwcmVwZW5kIG9yIGFwcGVuZCB0byBhbiBpbnB1dC5cblxuLmlucHV0LWdyb3VwLXRleHQge1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBwYWRkaW5nOiAkaW5wdXQtZ3JvdXAtYWRkb24tcGFkZGluZy15ICRpbnB1dC1ncm91cC1hZGRvbi1wYWRkaW5nLXg7XG4gIEBpbmNsdWRlIGZvbnQtc2l6ZSgkaW5wdXQtZm9udC1zaXplKTsgLy8gTWF0Y2ggaW5wdXRzXG4gIGZvbnQtd2VpZ2h0OiAkaW5wdXQtZ3JvdXAtYWRkb24tZm9udC13ZWlnaHQ7XG4gIGxpbmUtaGVpZ2h0OiAkaW5wdXQtbGluZS1oZWlnaHQ7XG4gIGNvbG9yOiAkaW5wdXQtZ3JvdXAtYWRkb24tY29sb3I7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgYmFja2dyb3VuZC1jb2xvcjogJGlucHV0LWdyb3VwLWFkZG9uLWJnO1xuICBib3JkZXI6ICRpbnB1dC1ib3JkZXItd2lkdGggc29saWQgJGlucHV0LWdyb3VwLWFkZG9uLWJvcmRlci1jb2xvcjtcbiAgQGluY2x1ZGUgYm9yZGVyLXJhZGl1cygkaW5wdXQtYm9yZGVyLXJhZGl1cyk7XG59XG5cblxuLy8gU2l6aW5nXG4vL1xuLy8gUmVtaXggdGhlIGRlZmF1bHQgZm9ybSBjb250cm9sIHNpemluZyBjbGFzc2VzIGludG8gbmV3IG9uZXMgZm9yIGVhc2llclxuLy8gbWFuaXB1bGF0aW9uLlxuXG4uaW5wdXQtZ3JvdXAtbGcgPiAuZm9ybS1jb250cm9sLFxuLmlucHV0LWdyb3VwLWxnID4gLmZvcm0tc2VsZWN0LFxuLmlucHV0LWdyb3VwLWxnID4gLmlucHV0LWdyb3VwLXRleHQsXG4uaW5wdXQtZ3JvdXAtbGcgPiAuYnRuIHtcbiAgcGFkZGluZzogJGlucHV0LXBhZGRpbmcteS1sZyAkaW5wdXQtcGFkZGluZy14LWxnO1xuICBAaW5jbHVkZSBmb250LXNpemUoJGlucHV0LWZvbnQtc2l6ZS1sZyk7XG4gIEBpbmNsdWRlIGJvcmRlci1yYWRpdXMoJGlucHV0LWJvcmRlci1yYWRpdXMtbGcpO1xufVxuXG4uaW5wdXQtZ3JvdXAtc20gPiAuZm9ybS1jb250cm9sLFxuLmlucHV0LWdyb3VwLXNtID4gLmZvcm0tc2VsZWN0LFxuLmlucHV0LWdyb3VwLXNtID4gLmlucHV0LWdyb3VwLXRleHQsXG4uaW5wdXQtZ3JvdXAtc20gPiAuYnRuIHtcbiAgcGFkZGluZzogJGlucHV0LXBhZGRpbmcteS1zbSAkaW5wdXQtcGFkZGluZy14LXNtO1xuICBAaW5jbHVkZSBmb250LXNpemUoJGlucHV0LWZvbnQtc2l6ZS1zbSk7XG4gIEBpbmNsdWRlIGJvcmRlci1yYWRpdXMoJGlucHV0LWJvcmRlci1yYWRpdXMtc20pO1xufVxuXG4uaW5wdXQtZ3JvdXAtbGcgPiAuZm9ybS1zZWxlY3QsXG4uaW5wdXQtZ3JvdXAtc20gPiAuZm9ybS1zZWxlY3Qge1xuICBwYWRkaW5nLXJpZ2h0OiAkZm9ybS1zZWxlY3QtcGFkZGluZy14ICsgJGZvcm0tc2VsZWN0LWluZGljYXRvci1wYWRkaW5nO1xufVxuXG5cbi8vIFJvdW5kZWQgY29ybmVyc1xuLy9cbi8vIFRoZXNlIHJ1bGVzZXRzIG11c3QgY29tZSBhZnRlciB0aGUgc2l6aW5nIG9uZXMgdG8gcHJvcGVybHkgb3ZlcnJpZGUgc20gYW5kIGxnXG4vLyBib3JkZXItcmFkaXVzIHZhbHVlcyB3aGVuIGV4dGVuZGluZy4gVGhleSdyZSBtb3JlIHNwZWNpZmljIHRoYW4gd2UnZCBsaWtlXG4vLyB3aXRoIHRoZSBgLmlucHV0LWdyb3VwID5gIHBhcnQsIGJ1dCB3aXRob3V0IGl0LCB3ZSBjYW5ub3Qgb3ZlcnJpZGUgdGhlIHNpemluZy5cblxuLy8gc3R5bGVsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWR1cGxpY2F0ZS1zZWxlY3RvcnNcbi5pbnB1dC1ncm91cCB7XG4gICY6bm90KC5oYXMtdmFsaWRhdGlvbikge1xuICAgID4gOm5vdCg6bGFzdC1jaGlsZCk6bm90KC5kcm9wZG93bi10b2dnbGUpOm5vdCguZHJvcGRvd24tbWVudSksXG4gICAgPiAuZHJvcGRvd24tdG9nZ2xlOm50aC1sYXN0LWNoaWxkKG4gKyAzKSB7XG4gICAgICBAaW5jbHVkZSBib3JkZXItZW5kLXJhZGl1cygwKTtcbiAgICB9XG4gIH1cblxuICAmLmhhcy12YWxpZGF0aW9uIHtcbiAgICA+IDpudGgtbGFzdC1jaGlsZChuICsgMyk6bm90KC5kcm9wZG93bi10b2dnbGUpOm5vdCguZHJvcGRvd24tbWVudSksXG4gICAgPiAuZHJvcGRvd24tdG9nZ2xlOm50aC1sYXN0LWNoaWxkKG4gKyA0KSB7XG4gICAgICBAaW5jbHVkZSBib3JkZXItZW5kLXJhZGl1cygwKTtcbiAgICB9XG4gIH1cblxuICAkdmFsaWRhdGlvbi1tZXNzYWdlczogXCJcIjtcbiAgQGVhY2ggJHN0YXRlIGluIG1hcC1rZXlzKCRmb3JtLXZhbGlkYXRpb24tc3RhdGVzKSB7XG4gICAgJHZhbGlkYXRpb24tbWVzc2FnZXM6ICR2YWxpZGF0aW9uLW1lc3NhZ2VzICsgXCI6bm90KC5cIiArIHVucXVvdGUoJHN0YXRlKSArIFwiLXRvb2x0aXApXCIgKyBcIjpub3QoLlwiICsgdW5xdW90ZSgkc3RhdGUpICsgXCItZmVlZGJhY2spXCI7XG4gIH1cblxuICA+IDpub3QoOmZpcnN0LWNoaWxkKTpub3QoLmRyb3Bkb3duLW1lbnUpI3skdmFsaWRhdGlvbi1tZXNzYWdlc30ge1xuICAgIG1hcmdpbi1sZWZ0OiAtJGlucHV0LWJvcmRlci13aWR0aDtcbiAgICBAaW5jbHVkZSBib3JkZXItc3RhcnQtcmFkaXVzKDApO1xuICB9XG59XG4iLCIvLyBUaGlzIG1peGluIHVzZXMgYW4gYGlmKClgIHRlY2huaXF1ZSB0byBiZSBjb21wYXRpYmxlIHdpdGggRGFydCBTYXNzXG4vLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3Nhc3Mvc2Fzcy9pc3N1ZXMvMTg3MyNpc3N1ZWNvbW1lbnQtMTUyMjkzNzI1IGZvciBtb3JlIGRldGFpbHNcblxuLy8gc2Nzcy1kb2NzLXN0YXJ0IGZvcm0tdmFsaWRhdGlvbi1taXhpbnNcbkBtaXhpbiBmb3JtLXZhbGlkYXRpb24tc3RhdGUtc2VsZWN0b3IoJHN0YXRlKSB7XG4gIEBpZiAoJHN0YXRlID09IFwidmFsaWRcIiBvciAkc3RhdGUgPT0gXCJpbnZhbGlkXCIpIHtcbiAgICAud2FzLXZhbGlkYXRlZCAje2lmKCYsIFwiJlwiLCBcIlwiKX06I3skc3RhdGV9LFxuICAgICN7aWYoJiwgXCImXCIsIFwiXCIpfS5pcy0jeyRzdGF0ZX0ge1xuICAgICAgQGNvbnRlbnQ7XG4gICAgfVxuICB9IEBlbHNlIHtcbiAgICAje2lmKCYsIFwiJlwiLCBcIlwiKX0uaXMtI3skc3RhdGV9IHtcbiAgICAgIEBjb250ZW50O1xuICAgIH1cbiAgfVxufVxuXG5AbWl4aW4gZm9ybS12YWxpZGF0aW9uLXN0YXRlKFxuICAkc3RhdGUsXG4gICRjb2xvcixcbiAgJGljb24sXG4gICR0b29sdGlwLWNvbG9yOiBjb2xvci1jb250cmFzdCgkY29sb3IpLFxuICAkdG9vbHRpcC1iZy1jb2xvcjogcmdiYSgkY29sb3IsICRmb3JtLWZlZWRiYWNrLXRvb2x0aXAtb3BhY2l0eSksXG4gICRmb2N1cy1ib3gtc2hhZG93OiAwIDAgJGlucHV0LWJ0bi1mb2N1cy1ibHVyICRpbnB1dC1mb2N1cy13aWR0aCByZ2JhKCRjb2xvciwgJGlucHV0LWJ0bi1mb2N1cy1jb2xvci1vcGFjaXR5KVxuKSB7XG4gIC4jeyRzdGF0ZX0tZmVlZGJhY2sge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgbWFyZ2luLXRvcDogJGZvcm0tZmVlZGJhY2stbWFyZ2luLXRvcDtcbiAgICBAaW5jbHVkZSBmb250LXNpemUoJGZvcm0tZmVlZGJhY2stZm9udC1zaXplKTtcbiAgICBmb250LXN0eWxlOiAkZm9ybS1mZWVkYmFjay1mb250LXN0eWxlO1xuICAgIGNvbG9yOiAkY29sb3I7XG4gIH1cblxuICAuI3skc3RhdGV9LXRvb2x0aXAge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB0b3A6IDEwMCU7XG4gICAgei1pbmRleDogNTtcbiAgICBkaXNwbGF5OiBub25lO1xuICAgIG1heC13aWR0aDogMTAwJTsgLy8gQ29udGFpbiB0byBwYXJlbnQgd2hlbiBwb3NzaWJsZVxuICAgIHBhZGRpbmc6ICRmb3JtLWZlZWRiYWNrLXRvb2x0aXAtcGFkZGluZy15ICRmb3JtLWZlZWRiYWNrLXRvb2x0aXAtcGFkZGluZy14O1xuICAgIG1hcmdpbi10b3A6IC4xcmVtO1xuICAgIEBpbmNsdWRlIGZvbnQtc2l6ZSgkZm9ybS1mZWVkYmFjay10b29sdGlwLWZvbnQtc2l6ZSk7XG4gICAgbGluZS1oZWlnaHQ6ICRmb3JtLWZlZWRiYWNrLXRvb2x0aXAtbGluZS1oZWlnaHQ7XG4gICAgY29sb3I6ICR0b29sdGlwLWNvbG9yO1xuICAgIGJhY2tncm91bmQtY29sb3I6ICR0b29sdGlwLWJnLWNvbG9yO1xuICAgIEBpbmNsdWRlIGJvcmRlci1yYWRpdXMoJGZvcm0tZmVlZGJhY2stdG9vbHRpcC1ib3JkZXItcmFkaXVzKTtcbiAgfVxuXG4gIEBpbmNsdWRlIGZvcm0tdmFsaWRhdGlvbi1zdGF0ZS1zZWxlY3Rvcigkc3RhdGUpIHtcbiAgICB+IC4jeyRzdGF0ZX0tZmVlZGJhY2ssXG4gICAgfiAuI3skc3RhdGV9LXRvb2x0aXAge1xuICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgfVxuICB9XG5cbiAgLmZvcm0tY29udHJvbCB7XG4gICAgQGluY2x1ZGUgZm9ybS12YWxpZGF0aW9uLXN0YXRlLXNlbGVjdG9yKCRzdGF0ZSkge1xuICAgICAgYm9yZGVyLWNvbG9yOiAkY29sb3I7XG5cbiAgICAgIEBpZiAkZW5hYmxlLXZhbGlkYXRpb24taWNvbnMge1xuICAgICAgICBwYWRkaW5nLXJpZ2h0OiAkaW5wdXQtaGVpZ2h0LWlubmVyO1xuICAgICAgICBiYWNrZ3JvdW5kLWltYWdlOiBlc2NhcGUtc3ZnKCRpY29uKTtcbiAgICAgICAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDtcbiAgICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogcmlnaHQgJGlucHV0LWhlaWdodC1pbm5lci1xdWFydGVyIGNlbnRlcjtcbiAgICAgICAgYmFja2dyb3VuZC1zaXplOiAkaW5wdXQtaGVpZ2h0LWlubmVyLWhhbGYgJGlucHV0LWhlaWdodC1pbm5lci1oYWxmO1xuICAgICAgfVxuXG4gICAgICAmOmZvY3VzIHtcbiAgICAgICAgYm9yZGVyLWNvbG9yOiAkY29sb3I7XG4gICAgICAgIGJveC1zaGFkb3c6ICRmb2N1cy1ib3gtc2hhZG93O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIHN0eWxlbGludC1kaXNhYmxlLW5leHQtbGluZSBzZWxlY3Rvci1uby1xdWFsaWZ5aW5nLXR5cGVcbiAgdGV4dGFyZWEuZm9ybS1jb250cm9sIHtcbiAgICBAaW5jbHVkZSBmb3JtLXZhbGlkYXRpb24tc3RhdGUtc2VsZWN0b3IoJHN0YXRlKSB7XG4gICAgICBAaWYgJGVuYWJsZS12YWxpZGF0aW9uLWljb25zIHtcbiAgICAgICAgcGFkZGluZy1yaWdodDogJGlucHV0LWhlaWdodC1pbm5lcjtcbiAgICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogdG9wICRpbnB1dC1oZWlnaHQtaW5uZXItcXVhcnRlciByaWdodCAkaW5wdXQtaGVpZ2h0LWlubmVyLXF1YXJ0ZXI7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLmZvcm0tc2VsZWN0IHtcbiAgICBAaW5jbHVkZSBmb3JtLXZhbGlkYXRpb24tc3RhdGUtc2VsZWN0b3IoJHN0YXRlKSB7XG4gICAgICBib3JkZXItY29sb3I6ICRjb2xvcjtcblxuICAgICAgQGlmICRlbmFibGUtdmFsaWRhdGlvbi1pY29ucyB7XG4gICAgICAgICY6bm90KFttdWx0aXBsZV0pOm5vdChbc2l6ZV0pLFxuICAgICAgICAmOm5vdChbbXVsdGlwbGVdKVtzaXplPVwiMVwiXSB7XG4gICAgICAgICAgcGFkZGluZy1yaWdodDogJGZvcm0tc2VsZWN0LWZlZWRiYWNrLWljb24tcGFkZGluZy1lbmQ7XG4gICAgICAgICAgYmFja2dyb3VuZC1pbWFnZTogZXNjYXBlLXN2ZygkZm9ybS1zZWxlY3QtaW5kaWNhdG9yKSwgZXNjYXBlLXN2ZygkaWNvbik7XG4gICAgICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogJGZvcm0tc2VsZWN0LWJnLXBvc2l0aW9uLCAkZm9ybS1zZWxlY3QtZmVlZGJhY2staWNvbi1wb3NpdGlvbjtcbiAgICAgICAgICBiYWNrZ3JvdW5kLXNpemU6ICRmb3JtLXNlbGVjdC1iZy1zaXplLCAkZm9ybS1zZWxlY3QtZmVlZGJhY2staWNvbi1zaXplO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgICY6Zm9jdXMge1xuICAgICAgICBib3JkZXItY29sb3I6ICRjb2xvcjtcbiAgICAgICAgYm94LXNoYWRvdzogJGZvY3VzLWJveC1zaGFkb3c7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLmZvcm0tY2hlY2staW5wdXQge1xuICAgIEBpbmNsdWRlIGZvcm0tdmFsaWRhdGlvbi1zdGF0ZS1zZWxlY3Rvcigkc3RhdGUpIHtcbiAgICAgIGJvcmRlci1jb2xvcjogJGNvbG9yO1xuXG4gICAgICAmOmNoZWNrZWQge1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkY29sb3I7XG4gICAgICB9XG5cbiAgICAgICY6Zm9jdXMge1xuICAgICAgICBib3gtc2hhZG93OiAkZm9jdXMtYm94LXNoYWRvdztcbiAgICAgIH1cblxuICAgICAgfiAuZm9ybS1jaGVjay1sYWJlbCB7XG4gICAgICAgIGNvbG9yOiAkY29sb3I7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIC5mb3JtLWNoZWNrLWlubGluZSAuZm9ybS1jaGVjay1pbnB1dCB7XG4gICAgfiAuI3skc3RhdGV9LWZlZWRiYWNrIHtcbiAgICAgIG1hcmdpbi1sZWZ0OiAuNWVtO1xuICAgIH1cbiAgfVxuXG4gIC5pbnB1dC1ncm91cCAuZm9ybS1jb250cm9sLFxuICAuaW5wdXQtZ3JvdXAgLmZvcm0tc2VsZWN0IHtcbiAgICBAaW5jbHVkZSBmb3JtLXZhbGlkYXRpb24tc3RhdGUtc2VsZWN0b3IoJHN0YXRlKSB7XG4gICAgICBAaWYgJHN0YXRlID09IFwidmFsaWRcIiB7XG4gICAgICAgIHotaW5kZXg6IDE7XG4gICAgICB9IEBlbHNlIGlmICRzdGF0ZSA9PSBcImludmFsaWRcIiB7XG4gICAgICAgIHotaW5kZXg6IDI7XG4gICAgICB9XG4gICAgICAmOmZvY3VzIHtcbiAgICAgICAgei1pbmRleDogMztcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbi8vIHNjc3MtZG9jcy1lbmQgZm9ybS12YWxpZGF0aW9uLW1peGluc1xuIiwiLy9cbi8vIEJhc2Ugc3R5bGVzXG4vL1xuXG4uYnRuIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBmb250LWZhbWlseTogJGJ0bi1mb250LWZhbWlseTtcbiAgZm9udC13ZWlnaHQ6ICRidG4tZm9udC13ZWlnaHQ7XG4gIGxpbmUtaGVpZ2h0OiAkYnRuLWxpbmUtaGVpZ2h0O1xuICBjb2xvcjogJGJvZHktY29sb3I7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgdGV4dC1kZWNvcmF0aW9uOiBpZigkbGluay1kZWNvcmF0aW9uID09IG5vbmUsIG51bGwsIG5vbmUpO1xuICB3aGl0ZS1zcGFjZTogJGJ0bi13aGl0ZS1zcGFjZTtcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgY3Vyc29yOiBpZigkZW5hYmxlLWJ1dHRvbi1wb2ludGVycywgcG9pbnRlciwgbnVsbCk7XG4gIHVzZXItc2VsZWN0OiBub25lO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgYm9yZGVyOiAkYnRuLWJvcmRlci13aWR0aCBzb2xpZCB0cmFuc3BhcmVudDtcbiAgQGluY2x1ZGUgYnV0dG9uLXNpemUoJGJ0bi1wYWRkaW5nLXksICRidG4tcGFkZGluZy14LCAkYnRuLWZvbnQtc2l6ZSwgJGJ0bi1ib3JkZXItcmFkaXVzKTtcbiAgQGluY2x1ZGUgdHJhbnNpdGlvbigkYnRuLXRyYW5zaXRpb24pO1xuXG4gICY6aG92ZXIge1xuICAgIGNvbG9yOiAkYm9keS1jb2xvcjtcbiAgICB0ZXh0LWRlY29yYXRpb246IGlmKCRsaW5rLWhvdmVyLWRlY29yYXRpb24gPT0gdW5kZXJsaW5lLCBub25lLCBudWxsKTtcbiAgfVxuXG4gIC5idG4tY2hlY2s6Zm9jdXMgKyAmLFxuICAmOmZvY3VzIHtcbiAgICBvdXRsaW5lOiAwO1xuICAgIGJveC1zaGFkb3c6ICRidG4tZm9jdXMtYm94LXNoYWRvdztcbiAgfVxuXG4gIC5idG4tY2hlY2s6Y2hlY2tlZCArICYsXG4gIC5idG4tY2hlY2s6YWN0aXZlICsgJixcbiAgJjphY3RpdmUsXG4gICYuYWN0aXZlIHtcbiAgICBAaW5jbHVkZSBib3gtc2hhZG93KCRidG4tYWN0aXZlLWJveC1zaGFkb3cpO1xuXG4gICAgJjpmb2N1cyB7XG4gICAgICBAaW5jbHVkZSBib3gtc2hhZG93KCRidG4tZm9jdXMtYm94LXNoYWRvdywgJGJ0bi1hY3RpdmUtYm94LXNoYWRvdyk7XG4gICAgfVxuICB9XG5cbiAgJjpkaXNhYmxlZCxcbiAgJi5kaXNhYmxlZCxcbiAgZmllbGRzZXQ6ZGlzYWJsZWQgJiB7XG4gICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gICAgb3BhY2l0eTogJGJ0bi1kaXNhYmxlZC1vcGFjaXR5O1xuICAgIEBpbmNsdWRlIGJveC1zaGFkb3cobm9uZSk7XG4gIH1cbn1cblxuXG4vL1xuLy8gQWx0ZXJuYXRlIGJ1dHRvbnNcbi8vXG5cbi8vIHNjc3MtZG9jcy1zdGFydCBidG4tdmFyaWFudC1sb29wc1xuQGVhY2ggJGNvbG9yLCAkdmFsdWUgaW4gJHRoZW1lLWNvbG9ycyB7XG4gIC5idG4tI3skY29sb3J9IHtcbiAgICBAaW5jbHVkZSBidXR0b24tdmFyaWFudCgkdmFsdWUsICR2YWx1ZSk7XG4gIH1cbn1cblxuQGVhY2ggJGNvbG9yLCAkdmFsdWUgaW4gJHRoZW1lLWNvbG9ycyB7XG4gIC5idG4tb3V0bGluZS0jeyRjb2xvcn0ge1xuICAgIEBpbmNsdWRlIGJ1dHRvbi1vdXRsaW5lLXZhcmlhbnQoJHZhbHVlKTtcbiAgfVxufVxuLy8gc2Nzcy1kb2NzLWVuZCBidG4tdmFyaWFudC1sb29wc1xuXG5cbi8vXG4vLyBMaW5rIGJ1dHRvbnNcbi8vXG5cbi8vIE1ha2UgYSBidXR0b24gbG9vayBhbmQgYmVoYXZlIGxpa2UgYSBsaW5rXG4uYnRuLWxpbmsge1xuICBmb250LXdlaWdodDogJGZvbnQtd2VpZ2h0LW5vcm1hbDtcbiAgY29sb3I6ICRidG4tbGluay1jb2xvcjtcbiAgdGV4dC1kZWNvcmF0aW9uOiAkbGluay1kZWNvcmF0aW9uO1xuXG4gICY6aG92ZXIge1xuICAgIGNvbG9yOiAkYnRuLWxpbmstaG92ZXItY29sb3I7XG4gICAgdGV4dC1kZWNvcmF0aW9uOiAkbGluay1ob3Zlci1kZWNvcmF0aW9uO1xuICB9XG5cbiAgJjpmb2N1cyB7XG4gICAgdGV4dC1kZWNvcmF0aW9uOiAkbGluay1ob3Zlci1kZWNvcmF0aW9uO1xuICB9XG5cbiAgJjpkaXNhYmxlZCxcbiAgJi5kaXNhYmxlZCB7XG4gICAgY29sb3I6ICRidG4tbGluay1kaXNhYmxlZC1jb2xvcjtcbiAgfVxuXG4gIC8vIE5vIG5lZWQgZm9yIGFuIGFjdGl2ZSBzdGF0ZSBoZXJlXG59XG5cblxuLy9cbi8vIEJ1dHRvbiBTaXplc1xuLy9cblxuLmJ0bi1sZyB7XG4gIEBpbmNsdWRlIGJ1dHRvbi1zaXplKCRidG4tcGFkZGluZy15LWxnLCAkYnRuLXBhZGRpbmcteC1sZywgJGJ0bi1mb250LXNpemUtbGcsICRidG4tYm9yZGVyLXJhZGl1cy1sZyk7XG59XG5cbi5idG4tc20ge1xuICBAaW5jbHVkZSBidXR0b24tc2l6ZSgkYnRuLXBhZGRpbmcteS1zbSwgJGJ0bi1wYWRkaW5nLXgtc20sICRidG4tZm9udC1zaXplLXNtLCAkYnRuLWJvcmRlci1yYWRpdXMtc20pO1xufVxuIiwiLy8gQnV0dG9uIHZhcmlhbnRzXG4vL1xuLy8gRWFzaWx5IHB1bXAgb3V0IGRlZmF1bHQgc3R5bGVzLCBhcyB3ZWxsIGFzIDpob3ZlciwgOmZvY3VzLCA6YWN0aXZlLFxuLy8gYW5kIGRpc2FibGVkIG9wdGlvbnMgZm9yIGFsbCBidXR0b25zXG5cbi8vIHNjc3MtZG9jcy1zdGFydCBidG4tdmFyaWFudC1taXhpblxuQG1peGluIGJ1dHRvbi12YXJpYW50KFxuICAkYmFja2dyb3VuZCxcbiAgJGJvcmRlcixcbiAgJGNvbG9yOiBjb2xvci1jb250cmFzdCgkYmFja2dyb3VuZCksXG4gICRob3Zlci1iYWNrZ3JvdW5kOiBpZigkY29sb3IgPT0gJGNvbG9yLWNvbnRyYXN0LWxpZ2h0LCBzaGFkZS1jb2xvcigkYmFja2dyb3VuZCwgJGJ0bi1ob3Zlci1iZy1zaGFkZS1hbW91bnQpLCB0aW50LWNvbG9yKCRiYWNrZ3JvdW5kLCAkYnRuLWhvdmVyLWJnLXRpbnQtYW1vdW50KSksXG4gICRob3Zlci1ib3JkZXI6IGlmKCRjb2xvciA9PSAkY29sb3ItY29udHJhc3QtbGlnaHQsIHNoYWRlLWNvbG9yKCRib3JkZXIsICRidG4taG92ZXItYm9yZGVyLXNoYWRlLWFtb3VudCksIHRpbnQtY29sb3IoJGJvcmRlciwgJGJ0bi1ob3Zlci1ib3JkZXItdGludC1hbW91bnQpKSxcbiAgJGhvdmVyLWNvbG9yOiBjb2xvci1jb250cmFzdCgkaG92ZXItYmFja2dyb3VuZCksXG4gICRhY3RpdmUtYmFja2dyb3VuZDogaWYoJGNvbG9yID09ICRjb2xvci1jb250cmFzdC1saWdodCwgc2hhZGUtY29sb3IoJGJhY2tncm91bmQsICRidG4tYWN0aXZlLWJnLXNoYWRlLWFtb3VudCksIHRpbnQtY29sb3IoJGJhY2tncm91bmQsICRidG4tYWN0aXZlLWJnLXRpbnQtYW1vdW50KSksXG4gICRhY3RpdmUtYm9yZGVyOiBpZigkY29sb3IgPT0gJGNvbG9yLWNvbnRyYXN0LWxpZ2h0LCBzaGFkZS1jb2xvcigkYm9yZGVyLCAkYnRuLWFjdGl2ZS1ib3JkZXItc2hhZGUtYW1vdW50KSwgdGludC1jb2xvcigkYm9yZGVyLCAkYnRuLWFjdGl2ZS1ib3JkZXItdGludC1hbW91bnQpKSxcbiAgJGFjdGl2ZS1jb2xvcjogY29sb3ItY29udHJhc3QoJGFjdGl2ZS1iYWNrZ3JvdW5kKSxcbiAgJGRpc2FibGVkLWJhY2tncm91bmQ6ICRiYWNrZ3JvdW5kLFxuICAkZGlzYWJsZWQtYm9yZGVyOiAkYm9yZGVyLFxuICAkZGlzYWJsZWQtY29sb3I6IGNvbG9yLWNvbnRyYXN0KCRkaXNhYmxlZC1iYWNrZ3JvdW5kKVxuKSB7XG4gIGNvbG9yOiAkY29sb3I7XG4gIEBpbmNsdWRlIGdyYWRpZW50LWJnKCRiYWNrZ3JvdW5kKTtcbiAgYm9yZGVyLWNvbG9yOiAkYm9yZGVyO1xuICBAaW5jbHVkZSBib3gtc2hhZG93KCRidG4tYm94LXNoYWRvdyk7XG5cbiAgJjpob3ZlciB7XG4gICAgY29sb3I6ICRob3Zlci1jb2xvcjtcbiAgICBAaW5jbHVkZSBncmFkaWVudC1iZygkaG92ZXItYmFja2dyb3VuZCk7XG4gICAgYm9yZGVyLWNvbG9yOiAkaG92ZXItYm9yZGVyO1xuICB9XG5cbiAgLmJ0bi1jaGVjazpmb2N1cyArICYsXG4gICY6Zm9jdXMge1xuICAgIGNvbG9yOiAkaG92ZXItY29sb3I7XG4gICAgQGluY2x1ZGUgZ3JhZGllbnQtYmcoJGhvdmVyLWJhY2tncm91bmQpO1xuICAgIGJvcmRlci1jb2xvcjogJGhvdmVyLWJvcmRlcjtcbiAgICBAaWYgJGVuYWJsZS1zaGFkb3dzIHtcbiAgICAgIEBpbmNsdWRlIGJveC1zaGFkb3coJGJ0bi1ib3gtc2hhZG93LCAwIDAgMCAkYnRuLWZvY3VzLXdpZHRoIHJnYmEobWl4KCRjb2xvciwgJGJvcmRlciwgMTUlKSwgLjUpKTtcbiAgICB9IEBlbHNlIHtcbiAgICAgIC8vIEF2b2lkIHVzaW5nIG1peGluIHNvIHdlIGNhbiBwYXNzIGN1c3RvbSBmb2N1cyBzaGFkb3cgcHJvcGVybHlcbiAgICAgIGJveC1zaGFkb3c6IDAgMCAwICRidG4tZm9jdXMtd2lkdGggcmdiYShtaXgoJGNvbG9yLCAkYm9yZGVyLCAxNSUpLCAuNSk7XG4gICAgfVxuICB9XG5cbiAgLmJ0bi1jaGVjazpjaGVja2VkICsgJixcbiAgLmJ0bi1jaGVjazphY3RpdmUgKyAmLFxuICAmOmFjdGl2ZSxcbiAgJi5hY3RpdmUsXG4gIC5zaG93ID4gJi5kcm9wZG93bi10b2dnbGUge1xuICAgIGNvbG9yOiAkYWN0aXZlLWNvbG9yO1xuICAgIGJhY2tncm91bmQtY29sb3I6ICRhY3RpdmUtYmFja2dyb3VuZDtcbiAgICAvLyBSZW1vdmUgQ1NTIGdyYWRpZW50cyBpZiB0aGV5J3JlIGVuYWJsZWRcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiBpZigkZW5hYmxlLWdyYWRpZW50cywgbm9uZSwgbnVsbCk7XG4gICAgYm9yZGVyLWNvbG9yOiAkYWN0aXZlLWJvcmRlcjtcblxuICAgICY6Zm9jdXMge1xuICAgICAgQGlmICRlbmFibGUtc2hhZG93cyB7XG4gICAgICAgIEBpbmNsdWRlIGJveC1zaGFkb3coJGJ0bi1hY3RpdmUtYm94LXNoYWRvdywgMCAwIDAgJGJ0bi1mb2N1cy13aWR0aCByZ2JhKG1peCgkY29sb3IsICRib3JkZXIsIDE1JSksIC41KSk7XG4gICAgICB9IEBlbHNlIHtcbiAgICAgICAgLy8gQXZvaWQgdXNpbmcgbWl4aW4gc28gd2UgY2FuIHBhc3MgY3VzdG9tIGZvY3VzIHNoYWRvdyBwcm9wZXJseVxuICAgICAgICBib3gtc2hhZG93OiAwIDAgMCAkYnRuLWZvY3VzLXdpZHRoIHJnYmEobWl4KCRjb2xvciwgJGJvcmRlciwgMTUlKSwgLjUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gICY6ZGlzYWJsZWQsXG4gICYuZGlzYWJsZWQge1xuICAgIGNvbG9yOiAkZGlzYWJsZWQtY29sb3I7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJGRpc2FibGVkLWJhY2tncm91bmQ7XG4gICAgLy8gUmVtb3ZlIENTUyBncmFkaWVudHMgaWYgdGhleSdyZSBlbmFibGVkXG4gICAgYmFja2dyb3VuZC1pbWFnZTogaWYoJGVuYWJsZS1ncmFkaWVudHMsIG5vbmUsIG51bGwpO1xuICAgIGJvcmRlci1jb2xvcjogJGRpc2FibGVkLWJvcmRlcjtcbiAgfVxufVxuLy8gc2Nzcy1kb2NzLWVuZCBidG4tdmFyaWFudC1taXhpblxuXG4vLyBzY3NzLWRvY3Mtc3RhcnQgYnRuLW91dGxpbmUtdmFyaWFudC1taXhpblxuQG1peGluIGJ1dHRvbi1vdXRsaW5lLXZhcmlhbnQoXG4gICRjb2xvcixcbiAgJGNvbG9yLWhvdmVyOiBjb2xvci1jb250cmFzdCgkY29sb3IpLFxuICAkYWN0aXZlLWJhY2tncm91bmQ6ICRjb2xvcixcbiAgJGFjdGl2ZS1ib3JkZXI6ICRjb2xvcixcbiAgJGFjdGl2ZS1jb2xvcjogY29sb3ItY29udHJhc3QoJGFjdGl2ZS1iYWNrZ3JvdW5kKVxuKSB7XG4gIGNvbG9yOiAkY29sb3I7XG4gIGJvcmRlci1jb2xvcjogJGNvbG9yO1xuXG4gICY6aG92ZXIge1xuICAgIGNvbG9yOiAkY29sb3ItaG92ZXI7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJGFjdGl2ZS1iYWNrZ3JvdW5kO1xuICAgIGJvcmRlci1jb2xvcjogJGFjdGl2ZS1ib3JkZXI7XG4gIH1cblxuICAuYnRuLWNoZWNrOmZvY3VzICsgJixcbiAgJjpmb2N1cyB7XG4gICAgYm94LXNoYWRvdzogMCAwIDAgJGJ0bi1mb2N1cy13aWR0aCByZ2JhKCRjb2xvciwgLjUpO1xuICB9XG5cbiAgLmJ0bi1jaGVjazpjaGVja2VkICsgJixcbiAgLmJ0bi1jaGVjazphY3RpdmUgKyAmLFxuICAmOmFjdGl2ZSxcbiAgJi5hY3RpdmUsXG4gICYuZHJvcGRvd24tdG9nZ2xlLnNob3cge1xuICAgIGNvbG9yOiAkYWN0aXZlLWNvbG9yO1xuICAgIGJhY2tncm91bmQtY29sb3I6ICRhY3RpdmUtYmFja2dyb3VuZDtcbiAgICBib3JkZXItY29sb3I6ICRhY3RpdmUtYm9yZGVyO1xuXG4gICAgJjpmb2N1cyB7XG4gICAgICBAaWYgJGVuYWJsZS1zaGFkb3dzIHtcbiAgICAgICAgQGluY2x1ZGUgYm94LXNoYWRvdygkYnRuLWFjdGl2ZS1ib3gtc2hhZG93LCAwIDAgMCAkYnRuLWZvY3VzLXdpZHRoIHJnYmEoJGNvbG9yLCAuNSkpO1xuICAgICAgfSBAZWxzZSB7XG4gICAgICAgIC8vIEF2b2lkIHVzaW5nIG1peGluIHNvIHdlIGNhbiBwYXNzIGN1c3RvbSBmb2N1cyBzaGFkb3cgcHJvcGVybHlcbiAgICAgICAgYm94LXNoYWRvdzogMCAwIDAgJGJ0bi1mb2N1cy13aWR0aCByZ2JhKCRjb2xvciwgLjUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gICY6ZGlzYWJsZWQsXG4gICYuZGlzYWJsZWQge1xuICAgIGNvbG9yOiAkY29sb3I7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gIH1cbn1cbi8vIHNjc3MtZG9jcy1lbmQgYnRuLW91dGxpbmUtdmFyaWFudC1taXhpblxuXG4vLyBzY3NzLWRvY3Mtc3RhcnQgYnRuLXNpemUtbWl4aW5cbkBtaXhpbiBidXR0b24tc2l6ZSgkcGFkZGluZy15LCAkcGFkZGluZy14LCAkZm9udC1zaXplLCAkYm9yZGVyLXJhZGl1cykge1xuICBwYWRkaW5nOiAkcGFkZGluZy15ICRwYWRkaW5nLXg7XG4gIEBpbmNsdWRlIGZvbnQtc2l6ZSgkZm9udC1zaXplKTtcbiAgLy8gTWFudWFsbHkgZGVjbGFyZSB0byBwcm92aWRlIGFuIG92ZXJyaWRlIHRvIHRoZSBicm93c2VyIGRlZmF1bHRcbiAgQGluY2x1ZGUgYm9yZGVyLXJhZGl1cygkYm9yZGVyLXJhZGl1cywgMCk7XG59XG4vLyBzY3NzLWRvY3MtZW5kIGJ0bi1zaXplLW1peGluXG4iLCIuZmFkZSB7XG4gIEBpbmNsdWRlIHRyYW5zaXRpb24oJHRyYW5zaXRpb24tZmFkZSk7XG5cbiAgJjpub3QoLnNob3cpIHtcbiAgICBvcGFjaXR5OiAwO1xuICB9XG59XG5cbi8vIHNjc3MtZG9jcy1zdGFydCBjb2xsYXBzZS1jbGFzc2VzXG4uY29sbGFwc2Uge1xuICAmOm5vdCguc2hvdykge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cbn1cblxuLmNvbGxhcHNpbmcge1xuICBoZWlnaHQ6IDA7XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIEBpbmNsdWRlIHRyYW5zaXRpb24oJHRyYW5zaXRpb24tY29sbGFwc2UpO1xuXG4gICYuY29sbGFwc2UtaG9yaXpvbnRhbCB7XG4gICAgd2lkdGg6IDA7XG4gICAgaGVpZ2h0OiBhdXRvO1xuICAgIEBpbmNsdWRlIHRyYW5zaXRpb24oJHRyYW5zaXRpb24tY29sbGFwc2Utd2lkdGgpO1xuICB9XG59XG4vLyBzY3NzLWRvY3MtZW5kIGNvbGxhcHNlLWNsYXNzZXNcbiIsIi8vIFRoZSBkcm9wZG93biB3cmFwcGVyIChgPGRpdj5gKVxuLmRyb3B1cCxcbi5kcm9wZW5kLFxuLmRyb3Bkb3duLFxuLmRyb3BzdGFydCB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbn1cblxuLmRyb3Bkb3duLXRvZ2dsZSB7XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG5cbiAgLy8gR2VuZXJhdGUgdGhlIGNhcmV0IGF1dG9tYXRpY2FsbHlcbiAgQGluY2x1ZGUgY2FyZXQoKTtcbn1cblxuLy8gVGhlIGRyb3Bkb3duIG1lbnVcbi5kcm9wZG93bi1tZW51IHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB6LWluZGV4OiAkemluZGV4LWRyb3Bkb3duO1xuICBkaXNwbGF5OiBub25lOyAvLyBub25lIGJ5IGRlZmF1bHQsIGJ1dCBibG9jayBvbiBcIm9wZW5cIiBvZiB0aGUgbWVudVxuICBtaW4td2lkdGg6ICRkcm9wZG93bi1taW4td2lkdGg7XG4gIHBhZGRpbmc6ICRkcm9wZG93bi1wYWRkaW5nLXkgJGRyb3Bkb3duLXBhZGRpbmcteDtcbiAgbWFyZ2luOiAwOyAvLyBPdmVycmlkZSBkZWZhdWx0IG1hcmdpbiBvZiB1bFxuICBAaW5jbHVkZSBmb250LXNpemUoJGRyb3Bkb3duLWZvbnQtc2l6ZSk7XG4gIGNvbG9yOiAkZHJvcGRvd24tY29sb3I7XG4gIHRleHQtYWxpZ246IGxlZnQ7IC8vIEVuc3VyZXMgcHJvcGVyIGFsaWdubWVudCBpZiBwYXJlbnQgaGFzIGl0IGNoYW5nZWQgKGUuZy4sIG1vZGFsIGZvb3RlcilcbiAgbGlzdC1zdHlsZTogbm9uZTtcbiAgYmFja2dyb3VuZC1jb2xvcjogJGRyb3Bkb3duLWJnO1xuICBiYWNrZ3JvdW5kLWNsaXA6IHBhZGRpbmctYm94O1xuICBib3JkZXI6ICRkcm9wZG93bi1ib3JkZXItd2lkdGggc29saWQgJGRyb3Bkb3duLWJvcmRlci1jb2xvcjtcbiAgQGluY2x1ZGUgYm9yZGVyLXJhZGl1cygkZHJvcGRvd24tYm9yZGVyLXJhZGl1cyk7XG4gIEBpbmNsdWRlIGJveC1zaGFkb3coJGRyb3Bkb3duLWJveC1zaGFkb3cpO1xuXG4gICZbZGF0YS1icy1wb3BwZXJdIHtcbiAgICB0b3A6IDEwMCU7XG4gICAgbGVmdDogMDtcbiAgICBtYXJnaW4tdG9wOiAkZHJvcGRvd24tc3BhY2VyO1xuICB9XG59XG5cbi8vIHNjc3MtZG9jcy1zdGFydCByZXNwb25zaXZlLWJyZWFrcG9pbnRzXG4vLyBXZSBkZWxpYmVyYXRlbHkgaGFyZGNvZGUgdGhlIGBicy1gIHByZWZpeCBiZWNhdXNlIHdlIGNoZWNrXG4vLyB0aGlzIGN1c3RvbSBwcm9wZXJ0eSBpbiBKUyB0byBkZXRlcm1pbmUgUG9wcGVyJ3MgcG9zaXRpb25pbmdcblxuQGVhY2ggJGJyZWFrcG9pbnQgaW4gbWFwLWtleXMoJGdyaWQtYnJlYWtwb2ludHMpIHtcbiAgQGluY2x1ZGUgbWVkaWEtYnJlYWtwb2ludC11cCgkYnJlYWtwb2ludCkge1xuICAgICRpbmZpeDogYnJlYWtwb2ludC1pbmZpeCgkYnJlYWtwb2ludCwgJGdyaWQtYnJlYWtwb2ludHMpO1xuXG4gICAgLmRyb3Bkb3duLW1lbnUjeyRpbmZpeH0tc3RhcnQge1xuICAgICAgLS1icy1wb3NpdGlvbjogc3RhcnQ7XG5cbiAgICAgICZbZGF0YS1icy1wb3BwZXJdIHtcbiAgICAgICAgcmlnaHQ6IGF1dG87XG4gICAgICAgIGxlZnQ6IDA7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLmRyb3Bkb3duLW1lbnUjeyRpbmZpeH0tZW5kIHtcbiAgICAgIC0tYnMtcG9zaXRpb246IGVuZDtcblxuICAgICAgJltkYXRhLWJzLXBvcHBlcl0ge1xuICAgICAgICByaWdodDogMDtcbiAgICAgICAgbGVmdDogYXV0bztcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbi8vIHNjc3MtZG9jcy1lbmQgcmVzcG9uc2l2ZS1icmVha3BvaW50c1xuXG4vLyBBbGxvdyBmb3IgZHJvcGRvd25zIHRvIGdvIGJvdHRvbSB1cCAoYWthLCBkcm9wdXAtbWVudSlcbi8vIEp1c3QgYWRkIC5kcm9wdXAgYWZ0ZXIgdGhlIHN0YW5kYXJkIC5kcm9wZG93biBjbGFzcyBhbmQgeW91J3JlIHNldC5cbi5kcm9wdXAge1xuICAuZHJvcGRvd24tbWVudVtkYXRhLWJzLXBvcHBlcl0ge1xuICAgIHRvcDogYXV0bztcbiAgICBib3R0b206IDEwMCU7XG4gICAgbWFyZ2luLXRvcDogMDtcbiAgICBtYXJnaW4tYm90dG9tOiAkZHJvcGRvd24tc3BhY2VyO1xuICB9XG5cbiAgLmRyb3Bkb3duLXRvZ2dsZSB7XG4gICAgQGluY2x1ZGUgY2FyZXQodXApO1xuICB9XG59XG5cbi5kcm9wZW5kIHtcbiAgLmRyb3Bkb3duLW1lbnVbZGF0YS1icy1wb3BwZXJdIHtcbiAgICB0b3A6IDA7XG4gICAgcmlnaHQ6IGF1dG87XG4gICAgbGVmdDogMTAwJTtcbiAgICBtYXJnaW4tdG9wOiAwO1xuICAgIG1hcmdpbi1sZWZ0OiAkZHJvcGRvd24tc3BhY2VyO1xuICB9XG5cbiAgLmRyb3Bkb3duLXRvZ2dsZSB7XG4gICAgQGluY2x1ZGUgY2FyZXQoZW5kKTtcbiAgICAmOjphZnRlciB7XG4gICAgICB2ZXJ0aWNhbC1hbGlnbjogMDtcbiAgICB9XG4gIH1cbn1cblxuLmRyb3BzdGFydCB7XG4gIC5kcm9wZG93bi1tZW51W2RhdGEtYnMtcG9wcGVyXSB7XG4gICAgdG9wOiAwO1xuICAgIHJpZ2h0OiAxMDAlO1xuICAgIGxlZnQ6IGF1dG87XG4gICAgbWFyZ2luLXRvcDogMDtcbiAgICBtYXJnaW4tcmlnaHQ6ICRkcm9wZG93bi1zcGFjZXI7XG4gIH1cblxuICAuZHJvcGRvd24tdG9nZ2xlIHtcbiAgICBAaW5jbHVkZSBjYXJldChzdGFydCk7XG4gICAgJjo6YmVmb3JlIHtcbiAgICAgIHZlcnRpY2FsLWFsaWduOiAwO1xuICAgIH1cbiAgfVxufVxuXG5cbi8vIERpdmlkZXJzIChiYXNpY2FsbHkgYW4gYDxocj5gKSB3aXRoaW4gdGhlIGRyb3Bkb3duXG4uZHJvcGRvd24tZGl2aWRlciB7XG4gIGhlaWdodDogMDtcbiAgbWFyZ2luOiAkZHJvcGRvd24tZGl2aWRlci1tYXJnaW4teSAwO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICBib3JkZXItdG9wOiAxcHggc29saWQgJGRyb3Bkb3duLWRpdmlkZXItYmc7XG59XG5cbi8vIExpbmtzLCBidXR0b25zLCBhbmQgbW9yZSB3aXRoaW4gdGhlIGRyb3Bkb3duIG1lbnVcbi8vXG4vLyBgPGJ1dHRvbj5gLXNwZWNpZmljIHN0eWxlcyBhcmUgZGVub3RlZCB3aXRoIGAvLyBGb3IgPGJ1dHRvbj5zYFxuLmRyb3Bkb3duLWl0ZW0ge1xuICBkaXNwbGF5OiBibG9jaztcbiAgd2lkdGg6IDEwMCU7IC8vIEZvciBgPGJ1dHRvbj5gc1xuICBwYWRkaW5nOiAkZHJvcGRvd24taXRlbS1wYWRkaW5nLXkgJGRyb3Bkb3duLWl0ZW0tcGFkZGluZy14O1xuICBjbGVhcjogYm90aDtcbiAgZm9udC13ZWlnaHQ6ICRmb250LXdlaWdodC1ub3JtYWw7XG4gIGNvbG9yOiAkZHJvcGRvd24tbGluay1jb2xvcjtcbiAgdGV4dC1hbGlnbjogaW5oZXJpdDsgLy8gRm9yIGA8YnV0dG9uPmBzXG4gIHRleHQtZGVjb3JhdGlvbjogaWYoJGxpbmstZGVjb3JhdGlvbiA9PSBub25lLCBudWxsLCBub25lKTtcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDsgLy8gcHJldmVudCBsaW5rcyBmcm9tIHJhbmRvbWx5IGJyZWFraW5nIG9udG8gbmV3IGxpbmVzXG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50OyAvLyBGb3IgYDxidXR0b24+YHNcbiAgYm9yZGVyOiAwOyAvLyBGb3IgYDxidXR0b24+YHNcblxuICAvLyBQcmV2ZW50IGRyb3Bkb3duIG92ZXJmbG93IGlmIHRoZXJlJ3Mgbm8gcGFkZGluZ1xuICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL3B1bGwvMjc3MDNcbiAgQGlmICRkcm9wZG93bi1wYWRkaW5nLXkgPT0gMCB7XG4gICAgJjpmaXJzdC1jaGlsZCB7XG4gICAgICBAaW5jbHVkZSBib3JkZXItdG9wLXJhZGl1cygkZHJvcGRvd24taW5uZXItYm9yZGVyLXJhZGl1cyk7XG4gICAgfVxuXG4gICAgJjpsYXN0LWNoaWxkIHtcbiAgICAgIEBpbmNsdWRlIGJvcmRlci1ib3R0b20tcmFkaXVzKCRkcm9wZG93bi1pbm5lci1ib3JkZXItcmFkaXVzKTtcbiAgICB9XG4gIH1cblxuICAmOmhvdmVyLFxuICAmOmZvY3VzIHtcbiAgICBjb2xvcjogJGRyb3Bkb3duLWxpbmstaG92ZXItY29sb3I7XG4gICAgdGV4dC1kZWNvcmF0aW9uOiBpZigkbGluay1ob3Zlci1kZWNvcmF0aW9uID09IHVuZGVybGluZSwgbm9uZSwgbnVsbCk7XG4gICAgQGluY2x1ZGUgZ3JhZGllbnQtYmcoJGRyb3Bkb3duLWxpbmstaG92ZXItYmcpO1xuICB9XG5cbiAgJi5hY3RpdmUsXG4gICY6YWN0aXZlIHtcbiAgICBjb2xvcjogJGRyb3Bkb3duLWxpbmstYWN0aXZlLWNvbG9yO1xuICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgICBAaW5jbHVkZSBncmFkaWVudC1iZygkZHJvcGRvd24tbGluay1hY3RpdmUtYmcpO1xuICB9XG5cbiAgJi5kaXNhYmxlZCxcbiAgJjpkaXNhYmxlZCB7XG4gICAgY29sb3I6ICRkcm9wZG93bi1saW5rLWRpc2FibGVkLWNvbG9yO1xuICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xuICAgIC8vIFJlbW92ZSBDU1MgZ3JhZGllbnRzIGlmIHRoZXkncmUgZW5hYmxlZFxuICAgIGJhY2tncm91bmQtaW1hZ2U6IGlmKCRlbmFibGUtZ3JhZGllbnRzLCBub25lLCBudWxsKTtcbiAgfVxufVxuXG4uZHJvcGRvd24tbWVudS5zaG93IHtcbiAgZGlzcGxheTogYmxvY2s7XG59XG5cbi8vIERyb3Bkb3duIHNlY3Rpb24gaGVhZGVyc1xuLmRyb3Bkb3duLWhlYWRlciB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBwYWRkaW5nOiAkZHJvcGRvd24taGVhZGVyLXBhZGRpbmc7XG4gIG1hcmdpbi1ib3R0b206IDA7IC8vIGZvciB1c2Ugd2l0aCBoZWFkaW5nIGVsZW1lbnRzXG4gIEBpbmNsdWRlIGZvbnQtc2l6ZSgkZm9udC1zaXplLXNtKTtcbiAgY29sb3I6ICRkcm9wZG93bi1oZWFkZXItY29sb3I7XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7IC8vIGFzIHdpdGggPiBsaSA+IGFcbn1cblxuLy8gRHJvcGRvd24gdGV4dFxuLmRyb3Bkb3duLWl0ZW0tdGV4dCB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBwYWRkaW5nOiAkZHJvcGRvd24taXRlbS1wYWRkaW5nLXkgJGRyb3Bkb3duLWl0ZW0tcGFkZGluZy14O1xuICBjb2xvcjogJGRyb3Bkb3duLWxpbmstY29sb3I7XG59XG5cbi8vIERhcmsgZHJvcGRvd25zXG4uZHJvcGRvd24tbWVudS1kYXJrIHtcbiAgY29sb3I6ICRkcm9wZG93bi1kYXJrLWNvbG9yO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAkZHJvcGRvd24tZGFyay1iZztcbiAgYm9yZGVyLWNvbG9yOiAkZHJvcGRvd24tZGFyay1ib3JkZXItY29sb3I7XG4gIEBpbmNsdWRlIGJveC1zaGFkb3coJGRyb3Bkb3duLWRhcmstYm94LXNoYWRvdyk7XG5cbiAgLmRyb3Bkb3duLWl0ZW0ge1xuICAgIGNvbG9yOiAkZHJvcGRvd24tZGFyay1saW5rLWNvbG9yO1xuXG4gICAgJjpob3ZlcixcbiAgICAmOmZvY3VzIHtcbiAgICAgIGNvbG9yOiAkZHJvcGRvd24tZGFyay1saW5rLWhvdmVyLWNvbG9yO1xuICAgICAgQGluY2x1ZGUgZ3JhZGllbnQtYmcoJGRyb3Bkb3duLWRhcmstbGluay1ob3Zlci1iZyk7XG4gICAgfVxuXG4gICAgJi5hY3RpdmUsXG4gICAgJjphY3RpdmUge1xuICAgICAgY29sb3I6ICRkcm9wZG93bi1kYXJrLWxpbmstYWN0aXZlLWNvbG9yO1xuICAgICAgQGluY2x1ZGUgZ3JhZGllbnQtYmcoJGRyb3Bkb3duLWRhcmstbGluay1hY3RpdmUtYmcpO1xuICAgIH1cblxuICAgICYuZGlzYWJsZWQsXG4gICAgJjpkaXNhYmxlZCB7XG4gICAgICBjb2xvcjogJGRyb3Bkb3duLWRhcmstbGluay1kaXNhYmxlZC1jb2xvcjtcbiAgICB9XG4gIH1cblxuICAuZHJvcGRvd24tZGl2aWRlciB7XG4gICAgYm9yZGVyLWNvbG9yOiAkZHJvcGRvd24tZGFyay1kaXZpZGVyLWJnO1xuICB9XG5cbiAgLmRyb3Bkb3duLWl0ZW0tdGV4dCB7XG4gICAgY29sb3I6ICRkcm9wZG93bi1kYXJrLWxpbmstY29sb3I7XG4gIH1cblxuICAuZHJvcGRvd24taGVhZGVyIHtcbiAgICBjb2xvcjogJGRyb3Bkb3duLWRhcmstaGVhZGVyLWNvbG9yO1xuICB9XG59XG4iLCIvLyBzY3NzLWRvY3Mtc3RhcnQgY2FyZXQtbWl4aW5zXG5AbWl4aW4gY2FyZXQtZG93biB7XG4gIGJvcmRlci10b3A6ICRjYXJldC13aWR0aCBzb2xpZDtcbiAgYm9yZGVyLXJpZ2h0OiAkY2FyZXQtd2lkdGggc29saWQgdHJhbnNwYXJlbnQ7XG4gIGJvcmRlci1ib3R0b206IDA7XG4gIGJvcmRlci1sZWZ0OiAkY2FyZXQtd2lkdGggc29saWQgdHJhbnNwYXJlbnQ7XG59XG5cbkBtaXhpbiBjYXJldC11cCB7XG4gIGJvcmRlci10b3A6IDA7XG4gIGJvcmRlci1yaWdodDogJGNhcmV0LXdpZHRoIHNvbGlkIHRyYW5zcGFyZW50O1xuICBib3JkZXItYm90dG9tOiAkY2FyZXQtd2lkdGggc29saWQ7XG4gIGJvcmRlci1sZWZ0OiAkY2FyZXQtd2lkdGggc29saWQgdHJhbnNwYXJlbnQ7XG59XG5cbkBtaXhpbiBjYXJldC1lbmQge1xuICBib3JkZXItdG9wOiAkY2FyZXQtd2lkdGggc29saWQgdHJhbnNwYXJlbnQ7XG4gIGJvcmRlci1yaWdodDogMDtcbiAgYm9yZGVyLWJvdHRvbTogJGNhcmV0LXdpZHRoIHNvbGlkIHRyYW5zcGFyZW50O1xuICBib3JkZXItbGVmdDogJGNhcmV0LXdpZHRoIHNvbGlkO1xufVxuXG5AbWl4aW4gY2FyZXQtc3RhcnQge1xuICBib3JkZXItdG9wOiAkY2FyZXQtd2lkdGggc29saWQgdHJhbnNwYXJlbnQ7XG4gIGJvcmRlci1yaWdodDogJGNhcmV0LXdpZHRoIHNvbGlkO1xuICBib3JkZXItYm90dG9tOiAkY2FyZXQtd2lkdGggc29saWQgdHJhbnNwYXJlbnQ7XG59XG5cbkBtaXhpbiBjYXJldCgkZGlyZWN0aW9uOiBkb3duKSB7XG4gIEBpZiAkZW5hYmxlLWNhcmV0IHtcbiAgICAmOjphZnRlciB7XG4gICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICBtYXJnaW4tbGVmdDogJGNhcmV0LXNwYWNpbmc7XG4gICAgICB2ZXJ0aWNhbC1hbGlnbjogJGNhcmV0LXZlcnRpY2FsLWFsaWduO1xuICAgICAgY29udGVudDogXCJcIjtcbiAgICAgIEBpZiAkZGlyZWN0aW9uID09IGRvd24ge1xuICAgICAgICBAaW5jbHVkZSBjYXJldC1kb3duKCk7XG4gICAgICB9IEBlbHNlIGlmICRkaXJlY3Rpb24gPT0gdXAge1xuICAgICAgICBAaW5jbHVkZSBjYXJldC11cCgpO1xuICAgICAgfSBAZWxzZSBpZiAkZGlyZWN0aW9uID09IGVuZCB7XG4gICAgICAgIEBpbmNsdWRlIGNhcmV0LWVuZCgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIEBpZiAkZGlyZWN0aW9uID09IHN0YXJ0IHtcbiAgICAgICY6OmFmdGVyIHtcbiAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICAgIH1cblxuICAgICAgJjo6YmVmb3JlIHtcbiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgICBtYXJnaW4tcmlnaHQ6ICRjYXJldC1zcGFjaW5nO1xuICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogJGNhcmV0LXZlcnRpY2FsLWFsaWduO1xuICAgICAgICBjb250ZW50OiBcIlwiO1xuICAgICAgICBAaW5jbHVkZSBjYXJldC1zdGFydCgpO1xuICAgICAgfVxuICAgIH1cblxuICAgICY6ZW1wdHk6OmFmdGVyIHtcbiAgICAgIG1hcmdpbi1sZWZ0OiAwO1xuICAgIH1cbiAgfVxufVxuLy8gc2Nzcy1kb2NzLWVuZCBjYXJldC1taXhpbnNcbiIsIi8vIE1ha2UgdGhlIGRpdiBiZWhhdmUgbGlrZSBhIGJ1dHRvblxuLmJ0bi1ncm91cCxcbi5idG4tZ3JvdXAtdmVydGljYWwge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOyAvLyBtYXRjaCAuYnRuIGFsaWdubWVudCBnaXZlbiBmb250LXNpemUgaGFjayBhYm92ZVxuXG4gID4gLmJ0biB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIGZsZXg6IDEgMSBhdXRvO1xuICB9XG5cbiAgLy8gQnJpbmcgdGhlIGhvdmVyLCBmb2N1c2VkLCBhbmQgXCJhY3RpdmVcIiBidXR0b25zIHRvIHRoZSBmcm9udCB0byBvdmVybGF5XG4gIC8vIHRoZSBib3JkZXJzIHByb3Blcmx5XG4gID4gLmJ0bi1jaGVjazpjaGVja2VkICsgLmJ0bixcbiAgPiAuYnRuLWNoZWNrOmZvY3VzICsgLmJ0bixcbiAgPiAuYnRuOmhvdmVyLFxuICA+IC5idG46Zm9jdXMsXG4gID4gLmJ0bjphY3RpdmUsXG4gID4gLmJ0bi5hY3RpdmUge1xuICAgIHotaW5kZXg6IDE7XG4gIH1cbn1cblxuLy8gT3B0aW9uYWw6IEdyb3VwIG11bHRpcGxlIGJ1dHRvbiBncm91cHMgdG9nZXRoZXIgZm9yIGEgdG9vbGJhclxuLmJ0bi10b29sYmFyIHtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC13cmFwOiB3cmFwO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7XG5cbiAgLmlucHV0LWdyb3VwIHtcbiAgICB3aWR0aDogYXV0bztcbiAgfVxufVxuXG4uYnRuLWdyb3VwIHtcbiAgLy8gUHJldmVudCBkb3VibGUgYm9yZGVycyB3aGVuIGJ1dHRvbnMgYXJlIG5leHQgdG8gZWFjaCBvdGhlclxuICA+IC5idG46bm90KDpmaXJzdC1jaGlsZCksXG4gID4gLmJ0bi1ncm91cDpub3QoOmZpcnN0LWNoaWxkKSB7XG4gICAgbWFyZ2luLWxlZnQ6IC0kYnRuLWJvcmRlci13aWR0aDtcbiAgfVxuXG4gIC8vIFJlc2V0IHJvdW5kZWQgY29ybmVyc1xuICA+IC5idG46bm90KDpsYXN0LWNoaWxkKTpub3QoLmRyb3Bkb3duLXRvZ2dsZSksXG4gID4gLmJ0bi1ncm91cDpub3QoOmxhc3QtY2hpbGQpID4gLmJ0biB7XG4gICAgQGluY2x1ZGUgYm9yZGVyLWVuZC1yYWRpdXMoMCk7XG4gIH1cblxuICAvLyBUaGUgbGVmdCByYWRpdXMgc2hvdWxkIGJlIDAgaWYgdGhlIGJ1dHRvbiBpczpcbiAgLy8gLSB0aGUgXCJ0aGlyZCBvciBtb3JlXCIgY2hpbGRcbiAgLy8gLSB0aGUgc2Vjb25kIGNoaWxkIGFuZCB0aGUgcHJldmlvdXMgZWxlbWVudCBpc24ndCBgLmJ0bi1jaGVja2AgKG1ha2luZyBpdCB0aGUgZmlyc3QgY2hpbGQgdmlzdWFsbHkpXG4gIC8vIC0gcGFydCBvZiBhIGJ0bi1ncm91cCB3aGljaCBpc24ndCB0aGUgZmlyc3QgY2hpbGRcbiAgPiAuYnRuOm50aC1jaGlsZChuICsgMyksXG4gID4gOm5vdCguYnRuLWNoZWNrKSArIC5idG4sXG4gID4gLmJ0bi1ncm91cDpub3QoOmZpcnN0LWNoaWxkKSA+IC5idG4ge1xuICAgIEBpbmNsdWRlIGJvcmRlci1zdGFydC1yYWRpdXMoMCk7XG4gIH1cbn1cblxuLy8gU2l6aW5nXG4vL1xuLy8gUmVtaXggdGhlIGRlZmF1bHQgYnV0dG9uIHNpemluZyBjbGFzc2VzIGludG8gbmV3IG9uZXMgZm9yIGVhc2llciBtYW5pcHVsYXRpb24uXG5cbi5idG4tZ3JvdXAtc20gPiAuYnRuIHsgQGV4dGVuZCAuYnRuLXNtOyB9XG4uYnRuLWdyb3VwLWxnID4gLmJ0biB7IEBleHRlbmQgLmJ0bi1sZzsgfVxuXG5cbi8vXG4vLyBTcGxpdCBidXR0b24gZHJvcGRvd25zXG4vL1xuXG4uZHJvcGRvd24tdG9nZ2xlLXNwbGl0IHtcbiAgcGFkZGluZy1yaWdodDogJGJ0bi1wYWRkaW5nLXggKiAuNzU7XG4gIHBhZGRpbmctbGVmdDogJGJ0bi1wYWRkaW5nLXggKiAuNzU7XG5cbiAgJjo6YWZ0ZXIsXG4gIC5kcm9wdXAgJjo6YWZ0ZXIsXG4gIC5kcm9wZW5kICY6OmFmdGVyIHtcbiAgICBtYXJnaW4tbGVmdDogMDtcbiAgfVxuXG4gIC5kcm9wc3RhcnQgJjo6YmVmb3JlIHtcbiAgICBtYXJnaW4tcmlnaHQ6IDA7XG4gIH1cbn1cblxuLmJ0bi1zbSArIC5kcm9wZG93bi10b2dnbGUtc3BsaXQge1xuICBwYWRkaW5nLXJpZ2h0OiAkYnRuLXBhZGRpbmcteC1zbSAqIC43NTtcbiAgcGFkZGluZy1sZWZ0OiAkYnRuLXBhZGRpbmcteC1zbSAqIC43NTtcbn1cblxuLmJ0bi1sZyArIC5kcm9wZG93bi10b2dnbGUtc3BsaXQge1xuICBwYWRkaW5nLXJpZ2h0OiAkYnRuLXBhZGRpbmcteC1sZyAqIC43NTtcbiAgcGFkZGluZy1sZWZ0OiAkYnRuLXBhZGRpbmcteC1sZyAqIC43NTtcbn1cblxuXG4vLyBUaGUgY2xpY2thYmxlIGJ1dHRvbiBmb3IgdG9nZ2xpbmcgdGhlIG1lbnVcbi8vIFNldCB0aGUgc2FtZSBpbnNldCBzaGFkb3cgYXMgdGhlIDphY3RpdmUgc3RhdGVcbi5idG4tZ3JvdXAuc2hvdyAuZHJvcGRvd24tdG9nZ2xlIHtcbiAgQGluY2x1ZGUgYm94LXNoYWRvdygkYnRuLWFjdGl2ZS1ib3gtc2hhZG93KTtcblxuICAvLyBTaG93IG5vIHNoYWRvdyBmb3IgYC5idG4tbGlua2Agc2luY2UgaXQgaGFzIG5vIG90aGVyIGJ1dHRvbiBzdHlsZXMuXG4gICYuYnRuLWxpbmsge1xuICAgIEBpbmNsdWRlIGJveC1zaGFkb3cobm9uZSk7XG4gIH1cbn1cblxuXG4vL1xuLy8gVmVydGljYWwgYnV0dG9uIGdyb3Vwc1xuLy9cblxuLmJ0bi1ncm91cC12ZXJ0aWNhbCB7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0O1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcblxuICA+IC5idG4sXG4gID4gLmJ0bi1ncm91cCB7XG4gICAgd2lkdGg6IDEwMCU7XG4gIH1cblxuICA+IC5idG46bm90KDpmaXJzdC1jaGlsZCksXG4gID4gLmJ0bi1ncm91cDpub3QoOmZpcnN0LWNoaWxkKSB7XG4gICAgbWFyZ2luLXRvcDogLSRidG4tYm9yZGVyLXdpZHRoO1xuICB9XG5cbiAgLy8gUmVzZXQgcm91bmRlZCBjb3JuZXJzXG4gID4gLmJ0bjpub3QoOmxhc3QtY2hpbGQpOm5vdCguZHJvcGRvd24tdG9nZ2xlKSxcbiAgPiAuYnRuLWdyb3VwOm5vdCg6bGFzdC1jaGlsZCkgPiAuYnRuIHtcbiAgICBAaW5jbHVkZSBib3JkZXItYm90dG9tLXJhZGl1cygwKTtcbiAgfVxuXG4gID4gLmJ0biB+IC5idG4sXG4gID4gLmJ0bi1ncm91cDpub3QoOmZpcnN0LWNoaWxkKSA+IC5idG4ge1xuICAgIEBpbmNsdWRlIGJvcmRlci10b3AtcmFkaXVzKDApO1xuICB9XG59XG4iLCIvLyBCYXNlIGNsYXNzXG4vL1xuLy8gS2lja3N0YXJ0IGFueSBuYXZpZ2F0aW9uIGNvbXBvbmVudCB3aXRoIGEgc2V0IG9mIHN0eWxlIHJlc2V0cy4gV29ya3Mgd2l0aFxuLy8gYDxuYXY+YHMsIGA8dWw+YHMgb3IgYDxvbD5gcy5cblxuLm5hdiB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtd3JhcDogd3JhcDtcbiAgcGFkZGluZy1sZWZ0OiAwO1xuICBtYXJnaW4tYm90dG9tOiAwO1xuICBsaXN0LXN0eWxlOiBub25lO1xufVxuXG4ubmF2LWxpbmsge1xuICBkaXNwbGF5OiBibG9jaztcbiAgcGFkZGluZzogJG5hdi1saW5rLXBhZGRpbmcteSAkbmF2LWxpbmstcGFkZGluZy14O1xuICBAaW5jbHVkZSBmb250LXNpemUoJG5hdi1saW5rLWZvbnQtc2l6ZSk7XG4gIGZvbnQtd2VpZ2h0OiAkbmF2LWxpbmstZm9udC13ZWlnaHQ7XG4gIGNvbG9yOiAkbmF2LWxpbmstY29sb3I7XG4gIHRleHQtZGVjb3JhdGlvbjogaWYoJGxpbmstZGVjb3JhdGlvbiA9PSBub25lLCBudWxsLCBub25lKTtcbiAgQGluY2x1ZGUgdHJhbnNpdGlvbigkbmF2LWxpbmstdHJhbnNpdGlvbik7XG5cbiAgJjpob3ZlcixcbiAgJjpmb2N1cyB7XG4gICAgY29sb3I6ICRuYXYtbGluay1ob3Zlci1jb2xvcjtcbiAgICB0ZXh0LWRlY29yYXRpb246IGlmKCRsaW5rLWhvdmVyLWRlY29yYXRpb24gPT0gdW5kZXJsaW5lLCBub25lLCBudWxsKTtcbiAgfVxuXG4gIC8vIERpc2FibGVkIHN0YXRlIGxpZ2h0ZW5zIHRleHRcbiAgJi5kaXNhYmxlZCB7XG4gICAgY29sb3I6ICRuYXYtbGluay1kaXNhYmxlZC1jb2xvcjtcbiAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgICBjdXJzb3I6IGRlZmF1bHQ7XG4gIH1cbn1cblxuLy9cbi8vIFRhYnNcbi8vXG5cbi5uYXYtdGFicyB7XG4gIGJvcmRlci1ib3R0b206ICRuYXYtdGFicy1ib3JkZXItd2lkdGggc29saWQgJG5hdi10YWJzLWJvcmRlci1jb2xvcjtcblxuICAubmF2LWxpbmsge1xuICAgIG1hcmdpbi1ib3R0b206IC0kbmF2LXRhYnMtYm9yZGVyLXdpZHRoO1xuICAgIGJhY2tncm91bmQ6IG5vbmU7XG4gICAgYm9yZGVyOiAkbmF2LXRhYnMtYm9yZGVyLXdpZHRoIHNvbGlkIHRyYW5zcGFyZW50O1xuICAgIEBpbmNsdWRlIGJvcmRlci10b3AtcmFkaXVzKCRuYXYtdGFicy1ib3JkZXItcmFkaXVzKTtcblxuICAgICY6aG92ZXIsXG4gICAgJjpmb2N1cyB7XG4gICAgICBib3JkZXItY29sb3I6ICRuYXYtdGFicy1saW5rLWhvdmVyLWJvcmRlci1jb2xvcjtcbiAgICAgIC8vIFByZXZlbnRzIGFjdGl2ZSAubmF2LWxpbmsgdGFiIG92ZXJsYXBwaW5nIGZvY3VzIG91dGxpbmUgb2YgcHJldmlvdXMvbmV4dCAubmF2LWxpbmtcbiAgICAgIGlzb2xhdGlvbjogaXNvbGF0ZTtcbiAgICB9XG5cbiAgICAmLmRpc2FibGVkIHtcbiAgICAgIGNvbG9yOiAkbmF2LWxpbmstZGlzYWJsZWQtY29sb3I7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgICAgIGJvcmRlci1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gICAgfVxuICB9XG5cbiAgLm5hdi1saW5rLmFjdGl2ZSxcbiAgLm5hdi1pdGVtLnNob3cgLm5hdi1saW5rIHtcbiAgICBjb2xvcjogJG5hdi10YWJzLWxpbmstYWN0aXZlLWNvbG9yO1xuICAgIGJhY2tncm91bmQtY29sb3I6ICRuYXYtdGFicy1saW5rLWFjdGl2ZS1iZztcbiAgICBib3JkZXItY29sb3I6ICRuYXYtdGFicy1saW5rLWFjdGl2ZS1ib3JkZXItY29sb3I7XG4gIH1cblxuICAuZHJvcGRvd24tbWVudSB7XG4gICAgLy8gTWFrZSBkcm9wZG93biBib3JkZXIgb3ZlcmxhcCB0YWIgYm9yZGVyXG4gICAgbWFyZ2luLXRvcDogLSRuYXYtdGFicy1ib3JkZXItd2lkdGg7XG4gICAgLy8gUmVtb3ZlIHRoZSB0b3Agcm91bmRlZCBjb3JuZXJzIGhlcmUgc2luY2UgdGhlcmUgaXMgYSBoYXJkIGVkZ2UgYWJvdmUgdGhlIG1lbnVcbiAgICBAaW5jbHVkZSBib3JkZXItdG9wLXJhZGl1cygwKTtcbiAgfVxufVxuXG5cbi8vXG4vLyBQaWxsc1xuLy9cblxuLm5hdi1waWxscyB7XG4gIC5uYXYtbGluayB7XG4gICAgYmFja2dyb3VuZDogbm9uZTtcbiAgICBib3JkZXI6IDA7XG4gICAgQGluY2x1ZGUgYm9yZGVyLXJhZGl1cygkbmF2LXBpbGxzLWJvcmRlci1yYWRpdXMpO1xuICB9XG5cbiAgLm5hdi1saW5rLmFjdGl2ZSxcbiAgLnNob3cgPiAubmF2LWxpbmsge1xuICAgIGNvbG9yOiAkbmF2LXBpbGxzLWxpbmstYWN0aXZlLWNvbG9yO1xuICAgIEBpbmNsdWRlIGdyYWRpZW50LWJnKCRuYXYtcGlsbHMtbGluay1hY3RpdmUtYmcpO1xuICB9XG59XG5cblxuLy9cbi8vIEp1c3RpZmllZCB2YXJpYW50c1xuLy9cblxuLm5hdi1maWxsIHtcbiAgPiAubmF2LWxpbmssXG4gIC5uYXYtaXRlbSB7XG4gICAgZmxleDogMSAxIGF1dG87XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICB9XG59XG5cbi5uYXYtanVzdGlmaWVkIHtcbiAgPiAubmF2LWxpbmssXG4gIC5uYXYtaXRlbSB7XG4gICAgZmxleC1iYXNpczogMDtcbiAgICBmbGV4LWdyb3c6IDE7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICB9XG59XG5cbi5uYXYtZmlsbCxcbi5uYXYtanVzdGlmaWVkIHtcbiAgLm5hdi1pdGVtIC5uYXYtbGluayB7XG4gICAgd2lkdGg6IDEwMCU7IC8vIE1ha2Ugc3VyZSBidXR0b24gd2lsbCBncm93XG4gIH1cbn1cblxuXG4vLyBUYWJiYWJsZSB0YWJzXG4vL1xuLy8gSGlkZSB0YWJiYWJsZSBwYW5lcyB0byBzdGFydCwgc2hvdyB0aGVtIHdoZW4gYC5hY3RpdmVgXG5cbi50YWItY29udGVudCB7XG4gID4gLnRhYi1wYW5lIHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG4gID4gLmFjdGl2ZSB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gIH1cbn1cbiIsIi8vIENvbnRlbnRzXG4vL1xuLy8gTmF2YmFyXG4vLyBOYXZiYXIgYnJhbmRcbi8vIE5hdmJhciBuYXZcbi8vIE5hdmJhciB0ZXh0XG4vLyBSZXNwb25zaXZlIG5hdmJhclxuLy8gTmF2YmFyIHBvc2l0aW9uXG4vLyBOYXZiYXIgdGhlbWVzXG5cblxuLy8gTmF2YmFyXG4vL1xuLy8gUHJvdmlkZSBhIHN0YXRpYyBuYXZiYXIgZnJvbSB3aGljaCB3ZSBleHBhbmQgdG8gY3JlYXRlIGZ1bGwtd2lkdGgsIGZpeGVkLCBhbmRcbi8vIG90aGVyIG5hdmJhciB2YXJpYXRpb25zLlxuXG4ubmF2YmFyIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LXdyYXA6IHdyYXA7IC8vIGFsbG93IHVzIHRvIGRvIHRoZSBsaW5lIGJyZWFrIGZvciBjb2xsYXBzaW5nIGNvbnRlbnRcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOyAvLyBzcGFjZSBvdXQgYnJhbmQgZnJvbSBsb2dvXG4gIHBhZGRpbmctdG9wOiAkbmF2YmFyLXBhZGRpbmcteTtcbiAgcGFkZGluZy1yaWdodDogJG5hdmJhci1wYWRkaW5nLXg7IC8vIGRlZmF1bHQ6IG51bGxcbiAgcGFkZGluZy1ib3R0b206ICRuYXZiYXItcGFkZGluZy15O1xuICBwYWRkaW5nLWxlZnQ6ICRuYXZiYXItcGFkZGluZy14OyAvLyBkZWZhdWx0OiBudWxsXG4gIEBpbmNsdWRlIGdyYWRpZW50LWJnKCk7XG5cbiAgLy8gQmVjYXVzZSBmbGV4IHByb3BlcnRpZXMgYXJlbid0IGluaGVyaXRlZCwgd2UgbmVlZCB0byByZWRlY2xhcmUgdGhlc2UgZmlyc3RcbiAgLy8gZmV3IHByb3BlcnRpZXMgc28gdGhhdCBjb250ZW50IG5lc3RlZCB3aXRoaW4gYmVoYXZlIHByb3Blcmx5LlxuICAvLyBUaGUgYGZsZXgtd3JhcGAgcHJvcGVydHkgaXMgaW5oZXJpdGVkIHRvIHNpbXBsaWZ5IHRoZSBleHBhbmRlZCBuYXZiYXJzXG4gICVjb250YWluZXItZmxleC1wcm9wZXJ0aWVzIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtd3JhcDogaW5oZXJpdDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgfVxuXG4gID4gLmNvbnRhaW5lcixcbiAgPiAuY29udGFpbmVyLWZsdWlkIHtcbiAgICBAZXh0ZW5kICVjb250YWluZXItZmxleC1wcm9wZXJ0aWVzO1xuICB9XG5cbiAgQGVhY2ggJGJyZWFrcG9pbnQsICRjb250YWluZXItbWF4LXdpZHRoIGluICRjb250YWluZXItbWF4LXdpZHRocyB7XG4gICAgPiAuY29udGFpbmVyI3ticmVha3BvaW50LWluZml4KCRicmVha3BvaW50LCAkY29udGFpbmVyLW1heC13aWR0aHMpfSB7XG4gICAgICBAZXh0ZW5kICVjb250YWluZXItZmxleC1wcm9wZXJ0aWVzO1xuICAgIH1cbiAgfVxufVxuXG5cbi8vIE5hdmJhciBicmFuZFxuLy9cbi8vIFVzZWQgZm9yIGJyYW5kLCBwcm9qZWN0LCBvciBzaXRlIG5hbWVzLlxuXG4ubmF2YmFyLWJyYW5kIHtcbiAgcGFkZGluZy10b3A6ICRuYXZiYXItYnJhbmQtcGFkZGluZy15O1xuICBwYWRkaW5nLWJvdHRvbTogJG5hdmJhci1icmFuZC1wYWRkaW5nLXk7XG4gIG1hcmdpbi1yaWdodDogJG5hdmJhci1icmFuZC1tYXJnaW4tZW5kO1xuICBAaW5jbHVkZSBmb250LXNpemUoJG5hdmJhci1icmFuZC1mb250LXNpemUpO1xuICB0ZXh0LWRlY29yYXRpb246IGlmKCRsaW5rLWRlY29yYXRpb24gPT0gbm9uZSwgbnVsbCwgbm9uZSk7XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG5cbiAgJjpob3ZlcixcbiAgJjpmb2N1cyB7XG4gICAgdGV4dC1kZWNvcmF0aW9uOiBpZigkbGluay1ob3Zlci1kZWNvcmF0aW9uID09IHVuZGVybGluZSwgbm9uZSwgbnVsbCk7XG4gIH1cbn1cblxuXG4vLyBOYXZiYXIgbmF2XG4vL1xuLy8gQ3VzdG9tIG5hdmJhciBuYXZpZ2F0aW9uIChkb2Vzbid0IHJlcXVpcmUgYC5uYXZgLCBidXQgZG9lcyBtYWtlIHVzZSBvZiBgLm5hdi1saW5rYCkuXG5cbi5uYXZiYXItbmF2IHtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsgLy8gY2Fubm90IHVzZSBgaW5oZXJpdGAgdG8gZ2V0IHRoZSBgLm5hdmJhcmBzIHZhbHVlXG4gIHBhZGRpbmctbGVmdDogMDtcbiAgbWFyZ2luLWJvdHRvbTogMDtcbiAgbGlzdC1zdHlsZTogbm9uZTtcblxuICAubmF2LWxpbmsge1xuICAgIHBhZGRpbmctcmlnaHQ6IDA7XG4gICAgcGFkZGluZy1sZWZ0OiAwO1xuICB9XG5cbiAgLmRyb3Bkb3duLW1lbnUge1xuICAgIHBvc2l0aW9uOiBzdGF0aWM7XG4gIH1cbn1cblxuXG4vLyBOYXZiYXIgdGV4dFxuLy9cbi8vXG5cbi5uYXZiYXItdGV4dCB7XG4gIHBhZGRpbmctdG9wOiAkbmF2LWxpbmstcGFkZGluZy15O1xuICBwYWRkaW5nLWJvdHRvbTogJG5hdi1saW5rLXBhZGRpbmcteTtcbn1cblxuXG4vLyBSZXNwb25zaXZlIG5hdmJhclxuLy9cbi8vIEN1c3RvbSBzdHlsZXMgZm9yIHJlc3BvbnNpdmUgY29sbGFwc2luZyBhbmQgdG9nZ2xpbmcgb2YgbmF2YmFyIGNvbnRlbnRzLlxuLy8gUG93ZXJlZCBieSB0aGUgY29sbGFwc2UgQm9vdHN0cmFwIEphdmFTY3JpcHQgcGx1Z2luLlxuXG4vLyBXaGVuIGNvbGxhcHNlZCwgcHJldmVudCB0aGUgdG9nZ2xlYWJsZSBuYXZiYXIgY29udGVudHMgZnJvbSBhcHBlYXJpbmcgaW5cbi8vIHRoZSBkZWZhdWx0IGZsZXhib3ggcm93IG9yaWVudGF0aW9uLiBSZXF1aXJlcyB0aGUgdXNlIG9mIGBmbGV4LXdyYXA6IHdyYXBgXG4vLyBvbiB0aGUgYC5uYXZiYXJgIHBhcmVudC5cbi5uYXZiYXItY29sbGFwc2Uge1xuICBmbGV4LWJhc2lzOiAxMDAlO1xuICBmbGV4LWdyb3c6IDE7XG4gIC8vIEZvciBhbHdheXMgZXhwYW5kZWQgb3IgZXh0cmEgZnVsbCBuYXZiYXJzLCBlbnN1cmUgY29udGVudCBhbGlnbnMgaXRzZWxmXG4gIC8vIHByb3Blcmx5IHZlcnRpY2FsbHkuIENhbiBiZSBlYXNpbHkgb3ZlcnJpZGRlbiB3aXRoIGZsZXggdXRpbGl0aWVzLlxuICBhbGlnbi1pdGVtczogY2VudGVyO1xufVxuXG4vLyBCdXR0b24gZm9yIHRvZ2dsaW5nIHRoZSBuYXZiYXIgd2hlbiBpbiBpdHMgY29sbGFwc2VkIHN0YXRlXG4ubmF2YmFyLXRvZ2dsZXIge1xuICBwYWRkaW5nOiAkbmF2YmFyLXRvZ2dsZXItcGFkZGluZy15ICRuYXZiYXItdG9nZ2xlci1wYWRkaW5nLXg7XG4gIEBpbmNsdWRlIGZvbnQtc2l6ZSgkbmF2YmFyLXRvZ2dsZXItZm9udC1zaXplKTtcbiAgbGluZS1oZWlnaHQ6IDE7XG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50OyAvLyByZW1vdmUgZGVmYXVsdCBidXR0b24gc3R5bGVcbiAgYm9yZGVyOiAkYm9yZGVyLXdpZHRoIHNvbGlkIHRyYW5zcGFyZW50OyAvLyByZW1vdmUgZGVmYXVsdCBidXR0b24gc3R5bGVcbiAgQGluY2x1ZGUgYm9yZGVyLXJhZGl1cygkbmF2YmFyLXRvZ2dsZXItYm9yZGVyLXJhZGl1cyk7XG4gIEBpbmNsdWRlIHRyYW5zaXRpb24oJG5hdmJhci10b2dnbGVyLXRyYW5zaXRpb24pO1xuXG4gICY6aG92ZXIge1xuICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgfVxuXG4gICY6Zm9jdXMge1xuICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgICBvdXRsaW5lOiAwO1xuICAgIGJveC1zaGFkb3c6IDAgMCAwICRuYXZiYXItdG9nZ2xlci1mb2N1cy13aWR0aDtcbiAgfVxufVxuXG4vLyBLZWVwIGFzIGEgc2VwYXJhdGUgZWxlbWVudCBzbyBmb2xrcyBjYW4gZWFzaWx5IG92ZXJyaWRlIGl0IHdpdGggYW5vdGhlciBpY29uXG4vLyBvciBpbWFnZSBmaWxlIGFzIG5lZWRlZC5cbi5uYXZiYXItdG9nZ2xlci1pY29uIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICB3aWR0aDogMS41ZW07XG4gIGhlaWdodDogMS41ZW07XG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IGNlbnRlcjtcbiAgYmFja2dyb3VuZC1zaXplOiAxMDAlO1xufVxuXG4ubmF2YmFyLW5hdi1zY3JvbGwge1xuICBtYXgtaGVpZ2h0OiB2YXIoLS0jeyR2YXJpYWJsZS1wcmVmaXh9c2Nyb2xsLWhlaWdodCwgNzV2aCk7XG4gIG92ZXJmbG93LXk6IGF1dG87XG59XG5cbi8vIHNjc3MtZG9jcy1zdGFydCBuYXZiYXItZXhwYW5kLWxvb3Bcbi8vIEdlbmVyYXRlIHNlcmllcyBvZiBgLm5hdmJhci1leHBhbmQtKmAgcmVzcG9uc2l2ZSBjbGFzc2VzIGZvciBjb25maWd1cmluZ1xuLy8gd2hlcmUgeW91ciBuYXZiYXIgY29sbGFwc2VzLlxuLm5hdmJhci1leHBhbmQge1xuICBAZWFjaCAkYnJlYWtwb2ludCBpbiBtYXAta2V5cygkZ3JpZC1icmVha3BvaW50cykge1xuICAgICRuZXh0OiBicmVha3BvaW50LW5leHQoJGJyZWFrcG9pbnQsICRncmlkLWJyZWFrcG9pbnRzKTtcbiAgICAkaW5maXg6IGJyZWFrcG9pbnQtaW5maXgoJG5leHQsICRncmlkLWJyZWFrcG9pbnRzKTtcblxuICAgIC8vIHN0eWxlbGludC1kaXNhYmxlLW5leHQtbGluZSBzY3NzL3NlbGVjdG9yLW5vLXVuaW9uLWNsYXNzLW5hbWVcbiAgICAmI3skaW5maXh9IHtcbiAgICAgIEBpbmNsdWRlIG1lZGlhLWJyZWFrcG9pbnQtdXAoJG5leHQpIHtcbiAgICAgICAgZmxleC13cmFwOiBub3dyYXA7XG4gICAgICAgIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDtcblxuICAgICAgICAubmF2YmFyLW5hdiB7XG4gICAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdztcblxuICAgICAgICAgIC5kcm9wZG93bi1tZW51IHtcbiAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAubmF2LWxpbmsge1xuICAgICAgICAgICAgcGFkZGluZy1yaWdodDogJG5hdmJhci1uYXYtbGluay1wYWRkaW5nLXg7XG4gICAgICAgICAgICBwYWRkaW5nLWxlZnQ6ICRuYXZiYXItbmF2LWxpbmstcGFkZGluZy14O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC5uYXZiYXItbmF2LXNjcm9sbCB7XG4gICAgICAgICAgb3ZlcmZsb3c6IHZpc2libGU7XG4gICAgICAgIH1cblxuICAgICAgICAubmF2YmFyLWNvbGxhcHNlIHtcbiAgICAgICAgICBkaXNwbGF5OiBmbGV4ICFpbXBvcnRhbnQ7IC8vIHN0eWxlbGludC1kaXNhYmxlLWxpbmUgZGVjbGFyYXRpb24tbm8taW1wb3J0YW50XG4gICAgICAgICAgZmxleC1iYXNpczogYXV0bztcbiAgICAgICAgfVxuXG4gICAgICAgIC5uYXZiYXItdG9nZ2xlciB7XG4gICAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC5vZmZjYW52YXMtaGVhZGVyIHtcbiAgICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgICB9XG5cbiAgICAgICAgLm9mZmNhbnZhcyB7XG4gICAgICAgICAgcG9zaXRpb246IGluaGVyaXQ7XG4gICAgICAgICAgYm90dG9tOiAwO1xuICAgICAgICAgIHotaW5kZXg6IDEwMDA7XG4gICAgICAgICAgZmxleC1ncm93OiAxO1xuICAgICAgICAgIHZpc2liaWxpdHk6IHZpc2libGUgIWltcG9ydGFudDsgLy8gc3R5bGVsaW50LWRpc2FibGUtbGluZSBkZWNsYXJhdGlvbi1uby1pbXBvcnRhbnRcbiAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgICAgICAgICBib3JkZXItcmlnaHQ6IDA7XG4gICAgICAgICAgYm9yZGVyLWxlZnQ6IDA7XG4gICAgICAgICAgQGluY2x1ZGUgdHJhbnNpdGlvbihub25lKTtcbiAgICAgICAgICB0cmFuc2Zvcm06IG5vbmU7XG4gICAgICAgIH1cbiAgICAgICAgLm9mZmNhbnZhcy10b3AsXG4gICAgICAgIC5vZmZjYW52YXMtYm90dG9tIHtcbiAgICAgICAgICBoZWlnaHQ6IGF1dG87XG4gICAgICAgICAgYm9yZGVyLXRvcDogMDtcbiAgICAgICAgICBib3JkZXItYm90dG9tOiAwO1xuICAgICAgICB9XG5cbiAgICAgICAgLm9mZmNhbnZhcy1ib2R5IHtcbiAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICAgIGZsZXgtZ3JvdzogMDtcbiAgICAgICAgICBwYWRkaW5nOiAwO1xuICAgICAgICAgIG92ZXJmbG93LXk6IHZpc2libGU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbi8vIHNjc3MtZG9jcy1lbmQgbmF2YmFyLWV4cGFuZC1sb29wXG5cbi8vIE5hdmJhciB0aGVtZXNcbi8vXG4vLyBTdHlsZXMgZm9yIHN3aXRjaGluZyBiZXR3ZWVuIG5hdmJhcnMgd2l0aCBsaWdodCBvciBkYXJrIGJhY2tncm91bmQuXG5cbi8vIERhcmsgbGlua3MgYWdhaW5zdCBhIGxpZ2h0IGJhY2tncm91bmRcbi5uYXZiYXItbGlnaHQge1xuICAubmF2YmFyLWJyYW5kIHtcbiAgICBjb2xvcjogJG5hdmJhci1saWdodC1icmFuZC1jb2xvcjtcblxuICAgICY6aG92ZXIsXG4gICAgJjpmb2N1cyB7XG4gICAgICBjb2xvcjogJG5hdmJhci1saWdodC1icmFuZC1ob3Zlci1jb2xvcjtcbiAgICB9XG4gIH1cblxuICAubmF2YmFyLW5hdiB7XG4gICAgLm5hdi1saW5rIHtcbiAgICAgIGNvbG9yOiAkbmF2YmFyLWxpZ2h0LWNvbG9yO1xuXG4gICAgICAmOmhvdmVyLFxuICAgICAgJjpmb2N1cyB7XG4gICAgICAgIGNvbG9yOiAkbmF2YmFyLWxpZ2h0LWhvdmVyLWNvbG9yO1xuICAgICAgfVxuXG4gICAgICAmLmRpc2FibGVkIHtcbiAgICAgICAgY29sb3I6ICRuYXZiYXItbGlnaHQtZGlzYWJsZWQtY29sb3I7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLnNob3cgPiAubmF2LWxpbmssXG4gICAgLm5hdi1saW5rLmFjdGl2ZSB7XG4gICAgICBjb2xvcjogJG5hdmJhci1saWdodC1hY3RpdmUtY29sb3I7XG4gICAgfVxuICB9XG5cbiAgLm5hdmJhci10b2dnbGVyIHtcbiAgICBjb2xvcjogJG5hdmJhci1saWdodC1jb2xvcjtcbiAgICBib3JkZXItY29sb3I6ICRuYXZiYXItbGlnaHQtdG9nZ2xlci1ib3JkZXItY29sb3I7XG4gIH1cblxuICAubmF2YmFyLXRvZ2dsZXItaWNvbiB7XG4gICAgYmFja2dyb3VuZC1pbWFnZTogZXNjYXBlLXN2ZygkbmF2YmFyLWxpZ2h0LXRvZ2dsZXItaWNvbi1iZyk7XG4gIH1cblxuICAubmF2YmFyLXRleHQge1xuICAgIGNvbG9yOiAkbmF2YmFyLWxpZ2h0LWNvbG9yO1xuXG4gICAgYSxcbiAgICBhOmhvdmVyLFxuICAgIGE6Zm9jdXMgIHtcbiAgICAgIGNvbG9yOiAkbmF2YmFyLWxpZ2h0LWFjdGl2ZS1jb2xvcjtcbiAgICB9XG4gIH1cbn1cblxuLy8gV2hpdGUgbGlua3MgYWdhaW5zdCBhIGRhcmsgYmFja2dyb3VuZFxuLm5hdmJhci1kYXJrIHtcbiAgLm5hdmJhci1icmFuZCB7XG4gICAgY29sb3I6ICRuYXZiYXItZGFyay1icmFuZC1jb2xvcjtcblxuICAgICY6aG92ZXIsXG4gICAgJjpmb2N1cyB7XG4gICAgICBjb2xvcjogJG5hdmJhci1kYXJrLWJyYW5kLWhvdmVyLWNvbG9yO1xuICAgIH1cbiAgfVxuXG4gIC5uYXZiYXItbmF2IHtcbiAgICAubmF2LWxpbmsge1xuICAgICAgY29sb3I6ICRuYXZiYXItZGFyay1jb2xvcjtcblxuICAgICAgJjpob3ZlcixcbiAgICAgICY6Zm9jdXMge1xuICAgICAgICBjb2xvcjogJG5hdmJhci1kYXJrLWhvdmVyLWNvbG9yO1xuICAgICAgfVxuXG4gICAgICAmLmRpc2FibGVkIHtcbiAgICAgICAgY29sb3I6ICRuYXZiYXItZGFyay1kaXNhYmxlZC1jb2xvcjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAuc2hvdyA+IC5uYXYtbGluayxcbiAgICAubmF2LWxpbmsuYWN0aXZlIHtcbiAgICAgIGNvbG9yOiAkbmF2YmFyLWRhcmstYWN0aXZlLWNvbG9yO1xuICAgIH1cbiAgfVxuXG4gIC5uYXZiYXItdG9nZ2xlciB7XG4gICAgY29sb3I6ICRuYXZiYXItZGFyay1jb2xvcjtcbiAgICBib3JkZXItY29sb3I6ICRuYXZiYXItZGFyay10b2dnbGVyLWJvcmRlci1jb2xvcjtcbiAgfVxuXG4gIC5uYXZiYXItdG9nZ2xlci1pY29uIHtcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiBlc2NhcGUtc3ZnKCRuYXZiYXItZGFyay10b2dnbGVyLWljb24tYmcpO1xuICB9XG5cbiAgLm5hdmJhci10ZXh0IHtcbiAgICBjb2xvcjogJG5hdmJhci1kYXJrLWNvbG9yO1xuICAgIGEsXG4gICAgYTpob3ZlcixcbiAgICBhOmZvY3VzIHtcbiAgICAgIGNvbG9yOiAkbmF2YmFyLWRhcmstYWN0aXZlLWNvbG9yO1xuICAgIH1cbiAgfVxufVxuIiwiLy9cbi8vIEJhc2Ugc3R5bGVzXG4vL1xuXG4uY2FyZCB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgbWluLXdpZHRoOiAwOyAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL3B1bGwvMjI3NDAjaXNzdWVjb21tZW50LTMwNTg2ODEwNlxuICBoZWlnaHQ6ICRjYXJkLWhlaWdodDtcbiAgd29yZC13cmFwOiBicmVhay13b3JkO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAkY2FyZC1iZztcbiAgYmFja2dyb3VuZC1jbGlwOiBib3JkZXItYm94O1xuICBib3JkZXI6ICRjYXJkLWJvcmRlci13aWR0aCBzb2xpZCAkY2FyZC1ib3JkZXItY29sb3I7XG4gIEBpbmNsdWRlIGJvcmRlci1yYWRpdXMoJGNhcmQtYm9yZGVyLXJhZGl1cyk7XG4gIEBpbmNsdWRlIGJveC1zaGFkb3coJGNhcmQtYm94LXNoYWRvdyk7XG5cbiAgPiBociB7XG4gICAgbWFyZ2luLXJpZ2h0OiAwO1xuICAgIG1hcmdpbi1sZWZ0OiAwO1xuICB9XG5cbiAgPiAubGlzdC1ncm91cCB7XG4gICAgYm9yZGVyLXRvcDogaW5oZXJpdDtcbiAgICBib3JkZXItYm90dG9tOiBpbmhlcml0O1xuXG4gICAgJjpmaXJzdC1jaGlsZCB7XG4gICAgICBib3JkZXItdG9wLXdpZHRoOiAwO1xuICAgICAgQGluY2x1ZGUgYm9yZGVyLXRvcC1yYWRpdXMoJGNhcmQtaW5uZXItYm9yZGVyLXJhZGl1cyk7XG4gICAgfVxuXG4gICAgJjpsYXN0LWNoaWxkICB7XG4gICAgICBib3JkZXItYm90dG9tLXdpZHRoOiAwO1xuICAgICAgQGluY2x1ZGUgYm9yZGVyLWJvdHRvbS1yYWRpdXMoJGNhcmQtaW5uZXItYm9yZGVyLXJhZGl1cyk7XG4gICAgfVxuICB9XG5cbiAgLy8gRHVlIHRvIHNwZWNpZmljaXR5IG9mIHRoZSBhYm92ZSBzZWxlY3RvciAoYC5jYXJkID4gLmxpc3QtZ3JvdXBgKSwgd2UgbXVzdFxuICAvLyB1c2UgYSBjaGlsZCBzZWxlY3RvciBoZXJlIHRvIHByZXZlbnQgZG91YmxlIGJvcmRlcnMuXG4gID4gLmNhcmQtaGVhZGVyICsgLmxpc3QtZ3JvdXAsXG4gID4gLmxpc3QtZ3JvdXAgKyAuY2FyZC1mb290ZXIge1xuICAgIGJvcmRlci10b3A6IDA7XG4gIH1cbn1cblxuLmNhcmQtYm9keSB7XG4gIC8vIEVuYWJsZSBgZmxleC1ncm93OiAxYCBmb3IgZGVja3MgYW5kIGdyb3VwcyBzbyB0aGF0IGNhcmQgYmxvY2tzIHRha2UgdXBcbiAgLy8gYXMgbXVjaCBzcGFjZSBhcyBwb3NzaWJsZSwgZW5zdXJpbmcgZm9vdGVycyBhcmUgYWxpZ25lZCB0byB0aGUgYm90dG9tLlxuICBmbGV4OiAxIDEgYXV0bztcbiAgcGFkZGluZzogJGNhcmQtc3BhY2VyLXkgJGNhcmQtc3BhY2VyLXg7XG4gIGNvbG9yOiAkY2FyZC1jb2xvcjtcbn1cblxuLmNhcmQtdGl0bGUge1xuICBtYXJnaW4tYm90dG9tOiAkY2FyZC10aXRsZS1zcGFjZXIteTtcbn1cblxuLmNhcmQtc3VidGl0bGUge1xuICBtYXJnaW4tdG9wOiAtJGNhcmQtdGl0bGUtc3BhY2VyLXkgKiAuNTtcbiAgbWFyZ2luLWJvdHRvbTogMDtcbn1cblxuLmNhcmQtdGV4dDpsYXN0LWNoaWxkIHtcbiAgbWFyZ2luLWJvdHRvbTogMDtcbn1cblxuLmNhcmQtbGluayB7XG4gICY6aG92ZXIge1xuICAgIHRleHQtZGVjb3JhdGlvbjogaWYoJGxpbmstaG92ZXItZGVjb3JhdGlvbiA9PSB1bmRlcmxpbmUsIG5vbmUsIG51bGwpO1xuICB9XG5cbiAgKyAuY2FyZC1saW5rIHtcbiAgICBtYXJnaW4tbGVmdDogJGNhcmQtc3BhY2VyLXg7XG4gIH1cbn1cblxuLy9cbi8vIE9wdGlvbmFsIHRleHR1YWwgY2Fwc1xuLy9cblxuLmNhcmQtaGVhZGVyIHtcbiAgcGFkZGluZzogJGNhcmQtY2FwLXBhZGRpbmcteSAkY2FyZC1jYXAtcGFkZGluZy14O1xuICBtYXJnaW4tYm90dG9tOiAwOyAvLyBSZW1vdmVzIHRoZSBkZWZhdWx0IG1hcmdpbi1ib3R0b20gb2YgPGhOPlxuICBjb2xvcjogJGNhcmQtY2FwLWNvbG9yO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAkY2FyZC1jYXAtYmc7XG4gIGJvcmRlci1ib3R0b206ICRjYXJkLWJvcmRlci13aWR0aCBzb2xpZCAkY2FyZC1ib3JkZXItY29sb3I7XG5cbiAgJjpmaXJzdC1jaGlsZCB7XG4gICAgQGluY2x1ZGUgYm9yZGVyLXJhZGl1cygkY2FyZC1pbm5lci1ib3JkZXItcmFkaXVzICRjYXJkLWlubmVyLWJvcmRlci1yYWRpdXMgMCAwKTtcbiAgfVxufVxuXG4uY2FyZC1mb290ZXIge1xuICBwYWRkaW5nOiAkY2FyZC1jYXAtcGFkZGluZy15ICRjYXJkLWNhcC1wYWRkaW5nLXg7XG4gIGNvbG9yOiAkY2FyZC1jYXAtY29sb3I7XG4gIGJhY2tncm91bmQtY29sb3I6ICRjYXJkLWNhcC1iZztcbiAgYm9yZGVyLXRvcDogJGNhcmQtYm9yZGVyLXdpZHRoIHNvbGlkICRjYXJkLWJvcmRlci1jb2xvcjtcblxuICAmOmxhc3QtY2hpbGQge1xuICAgIEBpbmNsdWRlIGJvcmRlci1yYWRpdXMoMCAwICRjYXJkLWlubmVyLWJvcmRlci1yYWRpdXMgJGNhcmQtaW5uZXItYm9yZGVyLXJhZGl1cyk7XG4gIH1cbn1cblxuXG4vL1xuLy8gSGVhZGVyIG5hdnNcbi8vXG5cbi5jYXJkLWhlYWRlci10YWJzIHtcbiAgbWFyZ2luLXJpZ2h0OiAtJGNhcmQtY2FwLXBhZGRpbmcteCAqIC41O1xuICBtYXJnaW4tYm90dG9tOiAtJGNhcmQtY2FwLXBhZGRpbmcteTtcbiAgbWFyZ2luLWxlZnQ6IC0kY2FyZC1jYXAtcGFkZGluZy14ICogLjU7XG4gIGJvcmRlci1ib3R0b206IDA7XG5cbiAgQGlmICRuYXYtdGFicy1saW5rLWFjdGl2ZS1iZyAhPSAkY2FyZC1iZyB7XG4gICAgLm5hdi1saW5rLmFjdGl2ZSB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkY2FyZC1iZztcbiAgICAgIGJvcmRlci1ib3R0b20tY29sb3I6ICRjYXJkLWJnO1xuICAgIH1cbiAgfVxufVxuXG4uY2FyZC1oZWFkZXItcGlsbHMge1xuICBtYXJnaW4tcmlnaHQ6IC0kY2FyZC1jYXAtcGFkZGluZy14ICogLjU7XG4gIG1hcmdpbi1sZWZ0OiAtJGNhcmQtY2FwLXBhZGRpbmcteCAqIC41O1xufVxuXG4vLyBDYXJkIGltYWdlXG4uY2FyZC1pbWctb3ZlcmxheSB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdG9wOiAwO1xuICByaWdodDogMDtcbiAgYm90dG9tOiAwO1xuICBsZWZ0OiAwO1xuICBwYWRkaW5nOiAkY2FyZC1pbWctb3ZlcmxheS1wYWRkaW5nO1xuICBAaW5jbHVkZSBib3JkZXItcmFkaXVzKCRjYXJkLWlubmVyLWJvcmRlci1yYWRpdXMpO1xufVxuXG4uY2FyZC1pbWcsXG4uY2FyZC1pbWctdG9wLFxuLmNhcmQtaW1nLWJvdHRvbSB7XG4gIHdpZHRoOiAxMDAlOyAvLyBSZXF1aXJlZCBiZWNhdXNlIHdlIHVzZSBmbGV4Ym94IGFuZCB0aGlzIGluaGVyZW50bHkgYXBwbGllcyBhbGlnbi1zZWxmOiBzdHJldGNoXG59XG5cbi5jYXJkLWltZyxcbi5jYXJkLWltZy10b3Age1xuICBAaW5jbHVkZSBib3JkZXItdG9wLXJhZGl1cygkY2FyZC1pbm5lci1ib3JkZXItcmFkaXVzKTtcbn1cblxuLmNhcmQtaW1nLFxuLmNhcmQtaW1nLWJvdHRvbSB7XG4gIEBpbmNsdWRlIGJvcmRlci1ib3R0b20tcmFkaXVzKCRjYXJkLWlubmVyLWJvcmRlci1yYWRpdXMpO1xufVxuXG5cbi8vXG4vLyBDYXJkIGdyb3Vwc1xuLy9cblxuLmNhcmQtZ3JvdXAge1xuICAvLyBUaGUgY2hpbGQgc2VsZWN0b3IgYWxsb3dzIG5lc3RlZCBgLmNhcmRgIHdpdGhpbiBgLmNhcmQtZ3JvdXBgXG4gIC8vIHRvIGRpc3BsYXkgcHJvcGVybHkuXG4gID4gLmNhcmQge1xuICAgIG1hcmdpbi1ib3R0b206ICRjYXJkLWdyb3VwLW1hcmdpbjtcbiAgfVxuXG4gIEBpbmNsdWRlIG1lZGlhLWJyZWFrcG9pbnQtdXAoc20pIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtZmxvdzogcm93IHdyYXA7XG4gICAgLy8gVGhlIGNoaWxkIHNlbGVjdG9yIGFsbG93cyBuZXN0ZWQgYC5jYXJkYCB3aXRoaW4gYC5jYXJkLWdyb3VwYFxuICAgIC8vIHRvIGRpc3BsYXkgcHJvcGVybHkuXG4gICAgPiAuY2FyZCB7XG4gICAgICAvLyBGbGV4YnVncyAjNDogaHR0cHM6Ly9naXRodWIuY29tL3BoaWxpcHdhbHRvbi9mbGV4YnVncyNmbGV4YnVnLTRcbiAgICAgIGZsZXg6IDEgMCAwJTtcbiAgICAgIG1hcmdpbi1ib3R0b206IDA7XG5cbiAgICAgICsgLmNhcmQge1xuICAgICAgICBtYXJnaW4tbGVmdDogMDtcbiAgICAgICAgYm9yZGVyLWxlZnQ6IDA7XG4gICAgICB9XG5cbiAgICAgIC8vIEhhbmRsZSByb3VuZGVkIGNvcm5lcnNcbiAgICAgIEBpZiAkZW5hYmxlLXJvdW5kZWQge1xuICAgICAgICAmOm5vdCg6bGFzdC1jaGlsZCkge1xuICAgICAgICAgIEBpbmNsdWRlIGJvcmRlci1lbmQtcmFkaXVzKDApO1xuXG4gICAgICAgICAgLmNhcmQtaW1nLXRvcCxcbiAgICAgICAgICAuY2FyZC1oZWFkZXIge1xuICAgICAgICAgICAgLy8gc3R5bGVsaW50LWRpc2FibGUtbmV4dC1saW5lIHByb3BlcnR5LWRpc2FsbG93ZWQtbGlzdFxuICAgICAgICAgICAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDA7XG4gICAgICAgICAgfVxuICAgICAgICAgIC5jYXJkLWltZy1ib3R0b20sXG4gICAgICAgICAgLmNhcmQtZm9vdGVyIHtcbiAgICAgICAgICAgIC8vIHN0eWxlbGludC1kaXNhYmxlLW5leHQtbGluZSBwcm9wZXJ0eS1kaXNhbGxvd2VkLWxpc3RcbiAgICAgICAgICAgIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAwO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgICY6bm90KDpmaXJzdC1jaGlsZCkge1xuICAgICAgICAgIEBpbmNsdWRlIGJvcmRlci1zdGFydC1yYWRpdXMoMCk7XG5cbiAgICAgICAgICAuY2FyZC1pbWctdG9wLFxuICAgICAgICAgIC5jYXJkLWhlYWRlciB7XG4gICAgICAgICAgICAvLyBzdHlsZWxpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJvcGVydHktZGlzYWxsb3dlZC1saXN0XG4gICAgICAgICAgICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAwO1xuICAgICAgICAgIH1cbiAgICAgICAgICAuY2FyZC1pbWctYm90dG9tLFxuICAgICAgICAgIC5jYXJkLWZvb3RlciB7XG4gICAgICAgICAgICAvLyBzdHlsZWxpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJvcGVydHktZGlzYWxsb3dlZC1saXN0XG4gICAgICAgICAgICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAwO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIiwiLy9cbi8vIEJhc2Ugc3R5bGVzXG4vL1xuXG4uYWNjb3JkaW9uLWJ1dHRvbiB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgd2lkdGg6IDEwMCU7XG4gIHBhZGRpbmc6ICRhY2NvcmRpb24tYnV0dG9uLXBhZGRpbmcteSAkYWNjb3JkaW9uLWJ1dHRvbi1wYWRkaW5nLXg7XG4gIEBpbmNsdWRlIGZvbnQtc2l6ZSgkZm9udC1zaXplLWJhc2UpO1xuICBjb2xvcjogJGFjY29yZGlvbi1idXR0b24tY29sb3I7XG4gIHRleHQtYWxpZ246IGxlZnQ7IC8vIFJlc2V0IGJ1dHRvbiBzdHlsZVxuICBiYWNrZ3JvdW5kLWNvbG9yOiAkYWNjb3JkaW9uLWJ1dHRvbi1iZztcbiAgYm9yZGVyOiAwO1xuICBAaW5jbHVkZSBib3JkZXItcmFkaXVzKDApO1xuICBvdmVyZmxvdy1hbmNob3I6IG5vbmU7XG4gIEBpbmNsdWRlIHRyYW5zaXRpb24oJGFjY29yZGlvbi10cmFuc2l0aW9uKTtcblxuICAmOm5vdCguY29sbGFwc2VkKSB7XG4gICAgY29sb3I6ICRhY2NvcmRpb24tYnV0dG9uLWFjdGl2ZS1jb2xvcjtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkYWNjb3JkaW9uLWJ1dHRvbi1hY3RpdmUtYmc7XG4gICAgYm94LXNoYWRvdzogaW5zZXQgMCAoJGFjY29yZGlvbi1ib3JkZXItd2lkdGggKiAtMSkgMCAkYWNjb3JkaW9uLWJvcmRlci1jb2xvcjtcblxuICAgICY6OmFmdGVyIHtcbiAgICAgIGJhY2tncm91bmQtaW1hZ2U6IGVzY2FwZS1zdmcoJGFjY29yZGlvbi1idXR0b24tYWN0aXZlLWljb24pO1xuICAgICAgdHJhbnNmb3JtOiAkYWNjb3JkaW9uLWljb24tdHJhbnNmb3JtO1xuICAgIH1cbiAgfVxuXG4gIC8vIEFjY29yZGlvbiBpY29uXG4gICY6OmFmdGVyIHtcbiAgICBmbGV4LXNocmluazogMDtcbiAgICB3aWR0aDogJGFjY29yZGlvbi1pY29uLXdpZHRoO1xuICAgIGhlaWdodDogJGFjY29yZGlvbi1pY29uLXdpZHRoO1xuICAgIG1hcmdpbi1sZWZ0OiBhdXRvO1xuICAgIGNvbnRlbnQ6IFwiXCI7XG4gICAgYmFja2dyb3VuZC1pbWFnZTogZXNjYXBlLXN2ZygkYWNjb3JkaW9uLWJ1dHRvbi1pY29uKTtcbiAgICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0O1xuICAgIGJhY2tncm91bmQtc2l6ZTogJGFjY29yZGlvbi1pY29uLXdpZHRoO1xuICAgIEBpbmNsdWRlIHRyYW5zaXRpb24oJGFjY29yZGlvbi1pY29uLXRyYW5zaXRpb24pO1xuICB9XG5cbiAgJjpob3ZlciB7XG4gICAgei1pbmRleDogMjtcbiAgfVxuXG4gICY6Zm9jdXMge1xuICAgIHotaW5kZXg6IDM7XG4gICAgYm9yZGVyLWNvbG9yOiAkYWNjb3JkaW9uLWJ1dHRvbi1mb2N1cy1ib3JkZXItY29sb3I7XG4gICAgb3V0bGluZTogMDtcbiAgICBib3gtc2hhZG93OiAkYWNjb3JkaW9uLWJ1dHRvbi1mb2N1cy1ib3gtc2hhZG93O1xuICB9XG59XG5cbi5hY2NvcmRpb24taGVhZGVyIHtcbiAgbWFyZ2luLWJvdHRvbTogMDtcbn1cblxuLmFjY29yZGlvbi1pdGVtIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogJGFjY29yZGlvbi1iZztcbiAgYm9yZGVyOiAkYWNjb3JkaW9uLWJvcmRlci13aWR0aCBzb2xpZCAkYWNjb3JkaW9uLWJvcmRlci1jb2xvcjtcblxuICAmOmZpcnN0LW9mLXR5cGUge1xuICAgIEBpbmNsdWRlIGJvcmRlci10b3AtcmFkaXVzKCRhY2NvcmRpb24tYm9yZGVyLXJhZGl1cyk7XG5cbiAgICAuYWNjb3JkaW9uLWJ1dHRvbiB7XG4gICAgICBAaW5jbHVkZSBib3JkZXItdG9wLXJhZGl1cygkYWNjb3JkaW9uLWlubmVyLWJvcmRlci1yYWRpdXMpO1xuICAgIH1cbiAgfVxuXG4gICY6bm90KDpmaXJzdC1vZi10eXBlKSB7XG4gICAgYm9yZGVyLXRvcDogMDtcbiAgfVxuXG4gIC8vIE9ubHkgc2V0IGEgYm9yZGVyLXJhZGl1cyBvbiB0aGUgbGFzdCBpdGVtIGlmIHRoZSBhY2NvcmRpb24gaXMgY29sbGFwc2VkXG4gICY6bGFzdC1vZi10eXBlIHtcbiAgICBAaW5jbHVkZSBib3JkZXItYm90dG9tLXJhZGl1cygkYWNjb3JkaW9uLWJvcmRlci1yYWRpdXMpO1xuXG4gICAgLmFjY29yZGlvbi1idXR0b24ge1xuICAgICAgJi5jb2xsYXBzZWQge1xuICAgICAgICBAaW5jbHVkZSBib3JkZXItYm90dG9tLXJhZGl1cygkYWNjb3JkaW9uLWlubmVyLWJvcmRlci1yYWRpdXMpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC5hY2NvcmRpb24tY29sbGFwc2Uge1xuICAgICAgQGluY2x1ZGUgYm9yZGVyLWJvdHRvbS1yYWRpdXMoJGFjY29yZGlvbi1ib3JkZXItcmFkaXVzKTtcbiAgICB9XG4gIH1cbn1cblxuLmFjY29yZGlvbi1ib2R5IHtcbiAgcGFkZGluZzogJGFjY29yZGlvbi1ib2R5LXBhZGRpbmcteSAkYWNjb3JkaW9uLWJvZHktcGFkZGluZy14O1xufVxuXG5cbi8vIEZsdXNoIGFjY29yZGlvbiBpdGVtc1xuLy9cbi8vIFJlbW92ZSBib3JkZXJzIGFuZCBib3JkZXItcmFkaXVzIHRvIGtlZXAgYWNjb3JkaW9uIGl0ZW1zIGVkZ2UtdG8tZWRnZS5cblxuLmFjY29yZGlvbi1mbHVzaCB7XG4gIC5hY2NvcmRpb24tY29sbGFwc2Uge1xuICAgIGJvcmRlci13aWR0aDogMDtcbiAgfVxuXG4gIC5hY2NvcmRpb24taXRlbSB7XG4gICAgYm9yZGVyLXJpZ2h0OiAwO1xuICAgIGJvcmRlci1sZWZ0OiAwO1xuICAgIEBpbmNsdWRlIGJvcmRlci1yYWRpdXMoMCk7XG5cbiAgICAmOmZpcnN0LWNoaWxkIHsgYm9yZGVyLXRvcDogMDsgfVxuICAgICY6bGFzdC1jaGlsZCB7IGJvcmRlci1ib3R0b206IDA7IH1cblxuICAgIC5hY2NvcmRpb24tYnV0dG9uIHtcbiAgICAgIEBpbmNsdWRlIGJvcmRlci1yYWRpdXMoMCk7XG4gICAgfVxuICB9XG59XG4iLCIuYnJlYWRjcnVtYiB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtd3JhcDogd3JhcDtcbiAgcGFkZGluZzogJGJyZWFkY3J1bWItcGFkZGluZy15ICRicmVhZGNydW1iLXBhZGRpbmcteDtcbiAgbWFyZ2luLWJvdHRvbTogJGJyZWFkY3J1bWItbWFyZ2luLWJvdHRvbTtcbiAgQGluY2x1ZGUgZm9udC1zaXplKCRicmVhZGNydW1iLWZvbnQtc2l6ZSk7XG4gIGxpc3Qtc3R5bGU6IG5vbmU7XG4gIGJhY2tncm91bmQtY29sb3I6ICRicmVhZGNydW1iLWJnO1xuICBAaW5jbHVkZSBib3JkZXItcmFkaXVzKCRicmVhZGNydW1iLWJvcmRlci1yYWRpdXMpO1xufVxuXG4uYnJlYWRjcnVtYi1pdGVtIHtcbiAgLy8gVGhlIHNlcGFyYXRvciBiZXR3ZWVuIGJyZWFkY3J1bWJzIChieSBkZWZhdWx0LCBhIGZvcndhcmQtc2xhc2g6IFwiL1wiKVxuICArIC5icmVhZGNydW1iLWl0ZW0ge1xuICAgIHBhZGRpbmctbGVmdDogJGJyZWFkY3J1bWItaXRlbS1wYWRkaW5nLXg7XG5cbiAgICAmOjpiZWZvcmUge1xuICAgICAgZmxvYXQ6IGxlZnQ7IC8vIFN1cHByZXNzIGlubGluZSBzcGFjaW5ncyBhbmQgdW5kZXJsaW5pbmcgb2YgdGhlIHNlcGFyYXRvclxuICAgICAgcGFkZGluZy1yaWdodDogJGJyZWFkY3J1bWItaXRlbS1wYWRkaW5nLXg7XG4gICAgICBjb2xvcjogJGJyZWFkY3J1bWItZGl2aWRlci1jb2xvcjtcbiAgICAgIGNvbnRlbnQ6IHZhcigtLSN7JHZhcmlhYmxlLXByZWZpeH1icmVhZGNydW1iLWRpdmlkZXIsIGVzY2FwZS1zdmcoJGJyZWFkY3J1bWItZGl2aWRlcikpICN7XCIvKiBydGw6XCJ9IHZhcigtLSN7JHZhcmlhYmxlLXByZWZpeH1icmVhZGNydW1iLWRpdmlkZXIsIGVzY2FwZS1zdmcoJGJyZWFkY3J1bWItZGl2aWRlci1mbGlwcGVkKSkgI3tcIiovXCJ9O1xuICAgIH1cbiAgfVxuXG4gICYuYWN0aXZlIHtcbiAgICBjb2xvcjogJGJyZWFkY3J1bWItYWN0aXZlLWNvbG9yO1xuICB9XG59XG4iLCIucGFnaW5hdGlvbiB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIEBpbmNsdWRlIGxpc3QtdW5zdHlsZWQoKTtcbn1cblxuLnBhZ2UtbGluayB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgZGlzcGxheTogYmxvY2s7XG4gIGNvbG9yOiAkcGFnaW5hdGlvbi1jb2xvcjtcbiAgdGV4dC1kZWNvcmF0aW9uOiBpZigkbGluay1kZWNvcmF0aW9uID09IG5vbmUsIG51bGwsIG5vbmUpO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAkcGFnaW5hdGlvbi1iZztcbiAgYm9yZGVyOiAkcGFnaW5hdGlvbi1ib3JkZXItd2lkdGggc29saWQgJHBhZ2luYXRpb24tYm9yZGVyLWNvbG9yO1xuICBAaW5jbHVkZSB0cmFuc2l0aW9uKCRwYWdpbmF0aW9uLXRyYW5zaXRpb24pO1xuXG4gICY6aG92ZXIge1xuICAgIHotaW5kZXg6IDI7XG4gICAgY29sb3I6ICRwYWdpbmF0aW9uLWhvdmVyLWNvbG9yO1xuICAgIHRleHQtZGVjb3JhdGlvbjogaWYoJGxpbmstaG92ZXItZGVjb3JhdGlvbiA9PSB1bmRlcmxpbmUsIG5vbmUsIG51bGwpO1xuICAgIGJhY2tncm91bmQtY29sb3I6ICRwYWdpbmF0aW9uLWhvdmVyLWJnO1xuICAgIGJvcmRlci1jb2xvcjogJHBhZ2luYXRpb24taG92ZXItYm9yZGVyLWNvbG9yO1xuICB9XG5cbiAgJjpmb2N1cyB7XG4gICAgei1pbmRleDogMztcbiAgICBjb2xvcjogJHBhZ2luYXRpb24tZm9jdXMtY29sb3I7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJHBhZ2luYXRpb24tZm9jdXMtYmc7XG4gICAgb3V0bGluZTogJHBhZ2luYXRpb24tZm9jdXMtb3V0bGluZTtcbiAgICBib3gtc2hhZG93OiAkcGFnaW5hdGlvbi1mb2N1cy1ib3gtc2hhZG93O1xuICB9XG59XG5cbi5wYWdlLWl0ZW0ge1xuICAmOm5vdCg6Zmlyc3QtY2hpbGQpIC5wYWdlLWxpbmsge1xuICAgIG1hcmdpbi1sZWZ0OiAkcGFnaW5hdGlvbi1tYXJnaW4tc3RhcnQ7XG4gIH1cblxuICAmLmFjdGl2ZSAucGFnZS1saW5rIHtcbiAgICB6LWluZGV4OiAzO1xuICAgIGNvbG9yOiAkcGFnaW5hdGlvbi1hY3RpdmUtY29sb3I7XG4gICAgQGluY2x1ZGUgZ3JhZGllbnQtYmcoJHBhZ2luYXRpb24tYWN0aXZlLWJnKTtcbiAgICBib3JkZXItY29sb3I6ICRwYWdpbmF0aW9uLWFjdGl2ZS1ib3JkZXItY29sb3I7XG4gIH1cblxuICAmLmRpc2FibGVkIC5wYWdlLWxpbmsge1xuICAgIGNvbG9yOiAkcGFnaW5hdGlvbi1kaXNhYmxlZC1jb2xvcjtcbiAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkcGFnaW5hdGlvbi1kaXNhYmxlZC1iZztcbiAgICBib3JkZXItY29sb3I6ICRwYWdpbmF0aW9uLWRpc2FibGVkLWJvcmRlci1jb2xvcjtcbiAgfVxufVxuXG5cbi8vXG4vLyBTaXppbmdcbi8vXG5AaW5jbHVkZSBwYWdpbmF0aW9uLXNpemUoJHBhZ2luYXRpb24tcGFkZGluZy15LCAkcGFnaW5hdGlvbi1wYWRkaW5nLXgsIG51bGwsICRwYWdpbmF0aW9uLWJvcmRlci1yYWRpdXMpO1xuXG4ucGFnaW5hdGlvbi1sZyB7XG4gIEBpbmNsdWRlIHBhZ2luYXRpb24tc2l6ZSgkcGFnaW5hdGlvbi1wYWRkaW5nLXktbGcsICRwYWdpbmF0aW9uLXBhZGRpbmcteC1sZywgJGZvbnQtc2l6ZS1sZywgJHBhZ2luYXRpb24tYm9yZGVyLXJhZGl1cy1sZyk7XG59XG5cbi5wYWdpbmF0aW9uLXNtIHtcbiAgQGluY2x1ZGUgcGFnaW5hdGlvbi1zaXplKCRwYWdpbmF0aW9uLXBhZGRpbmcteS1zbSwgJHBhZ2luYXRpb24tcGFkZGluZy14LXNtLCAkZm9udC1zaXplLXNtLCAkcGFnaW5hdGlvbi1ib3JkZXItcmFkaXVzLXNtKTtcbn1cbiIsIi8vIFBhZ2luYXRpb25cblxuLy8gc2Nzcy1kb2NzLXN0YXJ0IHBhZ2luYXRpb24tbWl4aW5cbkBtaXhpbiBwYWdpbmF0aW9uLXNpemUoJHBhZGRpbmcteSwgJHBhZGRpbmcteCwgJGZvbnQtc2l6ZSwgJGJvcmRlci1yYWRpdXMpIHtcbiAgLnBhZ2UtbGluayB7XG4gICAgcGFkZGluZzogJHBhZGRpbmcteSAkcGFkZGluZy14O1xuICAgIEBpbmNsdWRlIGZvbnQtc2l6ZSgkZm9udC1zaXplKTtcbiAgfVxuXG4gIC5wYWdlLWl0ZW0ge1xuICAgIEBpZiAkcGFnaW5hdGlvbi1tYXJnaW4tc3RhcnQgPT0gKC0kcGFnaW5hdGlvbi1ib3JkZXItd2lkdGgpIHtcbiAgICAgICY6Zmlyc3QtY2hpbGQge1xuICAgICAgICAucGFnZS1saW5rIHtcbiAgICAgICAgICBAaW5jbHVkZSBib3JkZXItc3RhcnQtcmFkaXVzKCRib3JkZXItcmFkaXVzKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAmOmxhc3QtY2hpbGQge1xuICAgICAgICAucGFnZS1saW5rIHtcbiAgICAgICAgICBAaW5jbHVkZSBib3JkZXItZW5kLXJhZGl1cygkYm9yZGVyLXJhZGl1cyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IEBlbHNlIHtcbiAgICAgIC8vQWRkIGJvcmRlci1yYWRpdXMgdG8gYWxsIHBhZ2VMaW5rcyBpbiBjYXNlIHRoZXkgaGF2ZSBsZWZ0IG1hcmdpblxuICAgICAgLnBhZ2UtbGluayB7XG4gICAgICAgIEBpbmNsdWRlIGJvcmRlci1yYWRpdXMoJGJvcmRlci1yYWRpdXMpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuLy8gc2Nzcy1kb2NzLWVuZCBwYWdpbmF0aW9uLW1peGluXG4iLCIvLyBCYXNlIGNsYXNzXG4vL1xuLy8gUmVxdWlyZXMgb25lIG9mIHRoZSBjb250ZXh0dWFsLCBjb2xvciBtb2RpZmllciBjbGFzc2VzIGZvciBgY29sb3JgIGFuZFxuLy8gYGJhY2tncm91bmQtY29sb3JgLlxuXG4uYmFkZ2Uge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIHBhZGRpbmc6ICRiYWRnZS1wYWRkaW5nLXkgJGJhZGdlLXBhZGRpbmcteDtcbiAgQGluY2x1ZGUgZm9udC1zaXplKCRiYWRnZS1mb250LXNpemUpO1xuICBmb250LXdlaWdodDogJGJhZGdlLWZvbnQtd2VpZ2h0O1xuICBsaW5lLWhlaWdodDogMTtcbiAgY29sb3I6ICRiYWRnZS1jb2xvcjtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICB2ZXJ0aWNhbC1hbGlnbjogYmFzZWxpbmU7XG4gIEBpbmNsdWRlIGJvcmRlci1yYWRpdXMoJGJhZGdlLWJvcmRlci1yYWRpdXMpO1xuICBAaW5jbHVkZSBncmFkaWVudC1iZygpO1xuXG4gIC8vIEVtcHR5IGJhZGdlcyBjb2xsYXBzZSBhdXRvbWF0aWNhbGx5XG4gICY6ZW1wdHkge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cbn1cblxuLy8gUXVpY2sgZml4IGZvciBiYWRnZXMgaW4gYnV0dG9uc1xuLmJ0biAuYmFkZ2Uge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHRvcDogLTFweDtcbn1cbiIsIi8vXG4vLyBCYXNlIHN0eWxlc1xuLy9cblxuLmFsZXJ0IHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBwYWRkaW5nOiAkYWxlcnQtcGFkZGluZy15ICRhbGVydC1wYWRkaW5nLXg7XG4gIG1hcmdpbi1ib3R0b206ICRhbGVydC1tYXJnaW4tYm90dG9tO1xuICBib3JkZXI6ICRhbGVydC1ib3JkZXItd2lkdGggc29saWQgdHJhbnNwYXJlbnQ7XG4gIEBpbmNsdWRlIGJvcmRlci1yYWRpdXMoJGFsZXJ0LWJvcmRlci1yYWRpdXMpO1xufVxuXG4vLyBIZWFkaW5ncyBmb3IgbGFyZ2VyIGFsZXJ0c1xuLmFsZXJ0LWhlYWRpbmcge1xuICAvLyBTcGVjaWZpZWQgdG8gcHJldmVudCBjb25mbGljdHMgb2YgY2hhbmdpbmcgJGhlYWRpbmdzLWNvbG9yXG4gIGNvbG9yOiBpbmhlcml0O1xufVxuXG4vLyBQcm92aWRlIGNsYXNzIGZvciBsaW5rcyB0aGF0IG1hdGNoIGFsZXJ0c1xuLmFsZXJ0LWxpbmsge1xuICBmb250LXdlaWdodDogJGFsZXJ0LWxpbmstZm9udC13ZWlnaHQ7XG59XG5cblxuLy8gRGlzbWlzc2libGUgYWxlcnRzXG4vL1xuLy8gRXhwYW5kIHRoZSByaWdodCBwYWRkaW5nIGFuZCBhY2NvdW50IGZvciB0aGUgY2xvc2UgYnV0dG9uJ3MgcG9zaXRpb25pbmcuXG5cbi5hbGVydC1kaXNtaXNzaWJsZSB7XG4gIHBhZGRpbmctcmlnaHQ6ICRhbGVydC1kaXNtaXNzaWJsZS1wYWRkaW5nLXI7XG5cbiAgLy8gQWRqdXN0IGNsb3NlIGxpbmsgcG9zaXRpb25cbiAgLmJ0bi1jbG9zZSB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRvcDogMDtcbiAgICByaWdodDogMDtcbiAgICB6LWluZGV4OiAkc3RyZXRjaGVkLWxpbmstei1pbmRleCArIDE7XG4gICAgcGFkZGluZzogJGFsZXJ0LXBhZGRpbmcteSAqIDEuMjUgJGFsZXJ0LXBhZGRpbmcteDtcbiAgfVxufVxuXG5cbi8vIHNjc3MtZG9jcy1zdGFydCBhbGVydC1tb2RpZmllcnNcbi8vIEdlbmVyYXRlIGNvbnRleHR1YWwgbW9kaWZpZXIgY2xhc3NlcyBmb3IgY29sb3JpemluZyB0aGUgYWxlcnQuXG5cbkBlYWNoICRzdGF0ZSwgJHZhbHVlIGluICR0aGVtZS1jb2xvcnMge1xuICAkYWxlcnQtYmFja2dyb3VuZDogc2hpZnQtY29sb3IoJHZhbHVlLCAkYWxlcnQtYmctc2NhbGUpO1xuICAkYWxlcnQtYm9yZGVyOiBzaGlmdC1jb2xvcigkdmFsdWUsICRhbGVydC1ib3JkZXItc2NhbGUpO1xuICAkYWxlcnQtY29sb3I6IHNoaWZ0LWNvbG9yKCR2YWx1ZSwgJGFsZXJ0LWNvbG9yLXNjYWxlKTtcbiAgQGlmIChjb250cmFzdC1yYXRpbygkYWxlcnQtYmFja2dyb3VuZCwgJGFsZXJ0LWNvbG9yKSA8ICRtaW4tY29udHJhc3QtcmF0aW8pIHtcbiAgICAkYWxlcnQtY29sb3I6IG1peCgkdmFsdWUsIGNvbG9yLWNvbnRyYXN0KCRhbGVydC1iYWNrZ3JvdW5kKSwgYWJzKCRhbGVydC1jb2xvci1zY2FsZSkpO1xuICB9XG4gIC5hbGVydC0jeyRzdGF0ZX0ge1xuICAgIEBpbmNsdWRlIGFsZXJ0LXZhcmlhbnQoJGFsZXJ0LWJhY2tncm91bmQsICRhbGVydC1ib3JkZXIsICRhbGVydC1jb2xvcik7XG4gIH1cbn1cbi8vIHNjc3MtZG9jcy1lbmQgYWxlcnQtbW9kaWZpZXJzXG4iLCIvLyBzY3NzLWRvY3Mtc3RhcnQgYWxlcnQtdmFyaWFudC1taXhpblxuQG1peGluIGFsZXJ0LXZhcmlhbnQoJGJhY2tncm91bmQsICRib3JkZXIsICRjb2xvcikge1xuICBjb2xvcjogJGNvbG9yO1xuICBAaW5jbHVkZSBncmFkaWVudC1iZygkYmFja2dyb3VuZCk7XG4gIGJvcmRlci1jb2xvcjogJGJvcmRlcjtcblxuICAuYWxlcnQtbGluayB7XG4gICAgY29sb3I6IHNoYWRlLWNvbG9yKCRjb2xvciwgMjAlKTtcbiAgfVxufVxuLy8gc2Nzcy1kb2NzLWVuZCBhbGVydC12YXJpYW50LW1peGluXG4iLCIvLyBEaXNhYmxlIGFuaW1hdGlvbiBpZiB0cmFuc2l0aW9ucyBhcmUgZGlzYWJsZWRcblxuLy8gc2Nzcy1kb2NzLXN0YXJ0IHByb2dyZXNzLWtleWZyYW1lc1xuQGlmICRlbmFibGUtdHJhbnNpdGlvbnMge1xuICBAa2V5ZnJhbWVzIHByb2dyZXNzLWJhci1zdHJpcGVzIHtcbiAgICAwJSB7IGJhY2tncm91bmQtcG9zaXRpb24teDogJHByb2dyZXNzLWhlaWdodDsgfVxuICB9XG59XG4vLyBzY3NzLWRvY3MtZW5kIHByb2dyZXNzLWtleWZyYW1lc1xuXG4ucHJvZ3Jlc3Mge1xuICBkaXNwbGF5OiBmbGV4O1xuICBoZWlnaHQ6ICRwcm9ncmVzcy1oZWlnaHQ7XG4gIG92ZXJmbG93OiBoaWRkZW47IC8vIGZvcmNlIHJvdW5kZWQgY29ybmVycyBieSBjcm9wcGluZyBpdFxuICBAaW5jbHVkZSBmb250LXNpemUoJHByb2dyZXNzLWZvbnQtc2l6ZSk7XG4gIGJhY2tncm91bmQtY29sb3I6ICRwcm9ncmVzcy1iZztcbiAgQGluY2x1ZGUgYm9yZGVyLXJhZGl1cygkcHJvZ3Jlc3MtYm9yZGVyLXJhZGl1cyk7XG4gIEBpbmNsdWRlIGJveC1zaGFkb3coJHByb2dyZXNzLWJveC1zaGFkb3cpO1xufVxuXG4ucHJvZ3Jlc3MtYmFyIHtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIGNvbG9yOiAkcHJvZ3Jlc3MtYmFyLWNvbG9yO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gIGJhY2tncm91bmQtY29sb3I6ICRwcm9ncmVzcy1iYXItYmc7XG4gIEBpbmNsdWRlIHRyYW5zaXRpb24oJHByb2dyZXNzLWJhci10cmFuc2l0aW9uKTtcbn1cblxuLnByb2dyZXNzLWJhci1zdHJpcGVkIHtcbiAgQGluY2x1ZGUgZ3JhZGllbnQtc3RyaXBlZCgpO1xuICBiYWNrZ3JvdW5kLXNpemU6ICRwcm9ncmVzcy1oZWlnaHQgJHByb2dyZXNzLWhlaWdodDtcbn1cblxuQGlmICRlbmFibGUtdHJhbnNpdGlvbnMge1xuICAucHJvZ3Jlc3MtYmFyLWFuaW1hdGVkIHtcbiAgICBhbmltYXRpb246ICRwcm9ncmVzcy1iYXItYW5pbWF0aW9uLXRpbWluZyBwcm9ncmVzcy1iYXItc3RyaXBlcztcblxuICAgIEBpZiAkZW5hYmxlLXJlZHVjZWQtbW90aW9uIHtcbiAgICAgIEBtZWRpYSAocHJlZmVycy1yZWR1Y2VkLW1vdGlvbjogcmVkdWNlKSB7XG4gICAgICAgIGFuaW1hdGlvbjogbm9uZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsIi8vIEJhc2UgY2xhc3Ncbi8vXG4vLyBFYXNpbHkgdXNhYmxlIG9uIDx1bD4sIDxvbD4sIG9yIDxkaXY+LlxuXG4ubGlzdC1ncm91cCB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cbiAgLy8gTm8gbmVlZCB0byBzZXQgbGlzdC1zdHlsZTogbm9uZTsgc2luY2UgLmxpc3QtZ3JvdXAtaXRlbSBpcyBibG9jayBsZXZlbFxuICBwYWRkaW5nLWxlZnQ6IDA7IC8vIHJlc2V0IHBhZGRpbmcgYmVjYXVzZSB1bCBhbmQgb2xcbiAgbWFyZ2luLWJvdHRvbTogMDtcbiAgQGluY2x1ZGUgYm9yZGVyLXJhZGl1cygkbGlzdC1ncm91cC1ib3JkZXItcmFkaXVzKTtcbn1cblxuLmxpc3QtZ3JvdXAtbnVtYmVyZWQge1xuICBsaXN0LXN0eWxlLXR5cGU6IG5vbmU7XG4gIGNvdW50ZXItcmVzZXQ6IHNlY3Rpb247XG5cbiAgPiBsaTo6YmVmb3JlIHtcbiAgICAvLyBJbmNyZW1lbnRzIG9ubHkgdGhpcyBpbnN0YW5jZSBvZiB0aGUgc2VjdGlvbiBjb3VudGVyXG4gICAgY29udGVudDogY291bnRlcnMoc2VjdGlvbiwgXCIuXCIpIFwiLiBcIjtcbiAgICBjb3VudGVyLWluY3JlbWVudDogc2VjdGlvbjtcbiAgfVxufVxuXG5cbi8vIEludGVyYWN0aXZlIGxpc3QgaXRlbXNcbi8vXG4vLyBVc2UgYW5jaG9yIG9yIGJ1dHRvbiBlbGVtZW50cyBpbnN0ZWFkIG9mIGBsaWBzIG9yIGBkaXZgcyB0byBjcmVhdGUgaW50ZXJhY3RpdmVcbi8vIGxpc3QgaXRlbXMuIEluY2x1ZGVzIGFuIGV4dHJhIGAuYWN0aXZlYCBtb2RpZmllciBjbGFzcyBmb3Igc2VsZWN0ZWQgaXRlbXMuXG5cbi5saXN0LWdyb3VwLWl0ZW0tYWN0aW9uIHtcbiAgd2lkdGg6IDEwMCU7IC8vIEZvciBgPGJ1dHRvbj5gcyAoYW5jaG9ycyBiZWNvbWUgMTAwJSBieSBkZWZhdWx0IHRob3VnaClcbiAgY29sb3I6ICRsaXN0LWdyb3VwLWFjdGlvbi1jb2xvcjtcbiAgdGV4dC1hbGlnbjogaW5oZXJpdDsgLy8gRm9yIGA8YnV0dG9uPmBzIChhbmNob3JzIGluaGVyaXQpXG5cbiAgLy8gSG92ZXIgc3RhdGVcbiAgJjpob3ZlcixcbiAgJjpmb2N1cyB7XG4gICAgei1pbmRleDogMTsgLy8gUGxhY2UgaG92ZXIvZm9jdXMgaXRlbXMgYWJvdmUgdGhlaXIgc2libGluZ3MgZm9yIHByb3BlciBib3JkZXIgc3R5bGluZ1xuICAgIGNvbG9yOiAkbGlzdC1ncm91cC1hY3Rpb24taG92ZXItY29sb3I7XG4gICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICAgIGJhY2tncm91bmQtY29sb3I6ICRsaXN0LWdyb3VwLWhvdmVyLWJnO1xuICB9XG5cbiAgJjphY3RpdmUge1xuICAgIGNvbG9yOiAkbGlzdC1ncm91cC1hY3Rpb24tYWN0aXZlLWNvbG9yO1xuICAgIGJhY2tncm91bmQtY29sb3I6ICRsaXN0LWdyb3VwLWFjdGlvbi1hY3RpdmUtYmc7XG4gIH1cbn1cblxuXG4vLyBJbmRpdmlkdWFsIGxpc3QgaXRlbXNcbi8vXG4vLyBVc2Ugb24gYGxpYHMgb3IgYGRpdmBzIHdpdGhpbiB0aGUgYC5saXN0LWdyb3VwYCBwYXJlbnQuXG5cbi5saXN0LWdyb3VwLWl0ZW0ge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBwYWRkaW5nOiAkbGlzdC1ncm91cC1pdGVtLXBhZGRpbmcteSAkbGlzdC1ncm91cC1pdGVtLXBhZGRpbmcteDtcbiAgY29sb3I6ICRsaXN0LWdyb3VwLWNvbG9yO1xuICB0ZXh0LWRlY29yYXRpb246IGlmKCRsaW5rLWRlY29yYXRpb24gPT0gbm9uZSwgbnVsbCwgbm9uZSk7XG4gIGJhY2tncm91bmQtY29sb3I6ICRsaXN0LWdyb3VwLWJnO1xuICBib3JkZXI6ICRsaXN0LWdyb3VwLWJvcmRlci13aWR0aCBzb2xpZCAkbGlzdC1ncm91cC1ib3JkZXItY29sb3I7XG5cbiAgJjpmaXJzdC1jaGlsZCB7XG4gICAgQGluY2x1ZGUgYm9yZGVyLXRvcC1yYWRpdXMoaW5oZXJpdCk7XG4gIH1cblxuICAmOmxhc3QtY2hpbGQge1xuICAgIEBpbmNsdWRlIGJvcmRlci1ib3R0b20tcmFkaXVzKGluaGVyaXQpO1xuICB9XG5cbiAgJi5kaXNhYmxlZCxcbiAgJjpkaXNhYmxlZCB7XG4gICAgY29sb3I6ICRsaXN0LWdyb3VwLWRpc2FibGVkLWNvbG9yO1xuICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICAgIGJhY2tncm91bmQtY29sb3I6ICRsaXN0LWdyb3VwLWRpc2FibGVkLWJnO1xuICB9XG5cbiAgLy8gSW5jbHVkZSBib3RoIGhlcmUgZm9yIGA8YT5gcyBhbmQgYDxidXR0b24+YHNcbiAgJi5hY3RpdmUge1xuICAgIHotaW5kZXg6IDI7IC8vIFBsYWNlIGFjdGl2ZSBpdGVtcyBhYm92ZSB0aGVpciBzaWJsaW5ncyBmb3IgcHJvcGVyIGJvcmRlciBzdHlsaW5nXG4gICAgY29sb3I6ICRsaXN0LWdyb3VwLWFjdGl2ZS1jb2xvcjtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkbGlzdC1ncm91cC1hY3RpdmUtYmc7XG4gICAgYm9yZGVyLWNvbG9yOiAkbGlzdC1ncm91cC1hY3RpdmUtYm9yZGVyLWNvbG9yO1xuICB9XG5cbiAgJiArICYge1xuICAgIGJvcmRlci10b3Atd2lkdGg6IDA7XG5cbiAgICAmLmFjdGl2ZSB7XG4gICAgICBtYXJnaW4tdG9wOiAtJGxpc3QtZ3JvdXAtYm9yZGVyLXdpZHRoO1xuICAgICAgYm9yZGVyLXRvcC13aWR0aDogJGxpc3QtZ3JvdXAtYm9yZGVyLXdpZHRoO1xuICAgIH1cbiAgfVxufVxuXG5cbi8vIEhvcml6b250YWxcbi8vXG4vLyBDaGFuZ2UgdGhlIGxheW91dCBvZiBsaXN0IGdyb3VwIGl0ZW1zIGZyb20gdmVydGljYWwgKGRlZmF1bHQpIHRvIGhvcml6b250YWwuXG5cbkBlYWNoICRicmVha3BvaW50IGluIG1hcC1rZXlzKCRncmlkLWJyZWFrcG9pbnRzKSB7XG4gIEBpbmNsdWRlIG1lZGlhLWJyZWFrcG9pbnQtdXAoJGJyZWFrcG9pbnQpIHtcbiAgICAkaW5maXg6IGJyZWFrcG9pbnQtaW5maXgoJGJyZWFrcG9pbnQsICRncmlkLWJyZWFrcG9pbnRzKTtcblxuICAgIC5saXN0LWdyb3VwLWhvcml6b250YWwjeyRpbmZpeH0ge1xuICAgICAgZmxleC1kaXJlY3Rpb246IHJvdztcblxuICAgICAgPiAubGlzdC1ncm91cC1pdGVtIHtcbiAgICAgICAgJjpmaXJzdC1jaGlsZCB7XG4gICAgICAgICAgQGluY2x1ZGUgYm9yZGVyLWJvdHRvbS1zdGFydC1yYWRpdXMoJGxpc3QtZ3JvdXAtYm9yZGVyLXJhZGl1cyk7XG4gICAgICAgICAgQGluY2x1ZGUgYm9yZGVyLXRvcC1lbmQtcmFkaXVzKDApO1xuICAgICAgICB9XG5cbiAgICAgICAgJjpsYXN0LWNoaWxkIHtcbiAgICAgICAgICBAaW5jbHVkZSBib3JkZXItdG9wLWVuZC1yYWRpdXMoJGxpc3QtZ3JvdXAtYm9yZGVyLXJhZGl1cyk7XG4gICAgICAgICAgQGluY2x1ZGUgYm9yZGVyLWJvdHRvbS1zdGFydC1yYWRpdXMoMCk7XG4gICAgICAgIH1cblxuICAgICAgICAmLmFjdGl2ZSB7XG4gICAgICAgICAgbWFyZ2luLXRvcDogMDtcbiAgICAgICAgfVxuXG4gICAgICAgICsgLmxpc3QtZ3JvdXAtaXRlbSB7XG4gICAgICAgICAgYm9yZGVyLXRvcC13aWR0aDogJGxpc3QtZ3JvdXAtYm9yZGVyLXdpZHRoO1xuICAgICAgICAgIGJvcmRlci1sZWZ0LXdpZHRoOiAwO1xuXG4gICAgICAgICAgJi5hY3RpdmUge1xuICAgICAgICAgICAgbWFyZ2luLWxlZnQ6IC0kbGlzdC1ncm91cC1ib3JkZXItd2lkdGg7XG4gICAgICAgICAgICBib3JkZXItbGVmdC13aWR0aDogJGxpc3QtZ3JvdXAtYm9yZGVyLXdpZHRoO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5cbi8vIEZsdXNoIGxpc3QgaXRlbXNcbi8vXG4vLyBSZW1vdmUgYm9yZGVycyBhbmQgYm9yZGVyLXJhZGl1cyB0byBrZWVwIGxpc3QgZ3JvdXAgaXRlbXMgZWRnZS10by1lZGdlLiBNb3N0XG4vLyB1c2VmdWwgd2l0aGluIG90aGVyIGNvbXBvbmVudHMgKGUuZy4sIGNhcmRzKS5cblxuLmxpc3QtZ3JvdXAtZmx1c2gge1xuICBAaW5jbHVkZSBib3JkZXItcmFkaXVzKDApO1xuXG4gID4gLmxpc3QtZ3JvdXAtaXRlbSB7XG4gICAgYm9yZGVyLXdpZHRoOiAwIDAgJGxpc3QtZ3JvdXAtYm9yZGVyLXdpZHRoO1xuXG4gICAgJjpsYXN0LWNoaWxkIHtcbiAgICAgIGJvcmRlci1ib3R0b20td2lkdGg6IDA7XG4gICAgfVxuICB9XG59XG5cblxuLy8gc2Nzcy1kb2NzLXN0YXJ0IGxpc3QtZ3JvdXAtbW9kaWZpZXJzXG4vLyBMaXN0IGdyb3VwIGNvbnRleHR1YWwgdmFyaWFudHNcbi8vXG4vLyBBZGQgbW9kaWZpZXIgY2xhc3NlcyB0byBjaGFuZ2UgdGV4dCBhbmQgYmFja2dyb3VuZCBjb2xvciBvbiBpbmRpdmlkdWFsIGl0ZW1zLlxuLy8gT3JnYW5pemF0aW9uYWxseSwgdGhpcyBtdXN0IGNvbWUgYWZ0ZXIgdGhlIGA6aG92ZXJgIHN0YXRlcy5cblxuQGVhY2ggJHN0YXRlLCAkdmFsdWUgaW4gJHRoZW1lLWNvbG9ycyB7XG4gICRsaXN0LWdyb3VwLXZhcmlhbnQtYmc6IHNoaWZ0LWNvbG9yKCR2YWx1ZSwgJGxpc3QtZ3JvdXAtaXRlbS1iZy1zY2FsZSk7XG4gICRsaXN0LWdyb3VwLXZhcmlhbnQtY29sb3I6IHNoaWZ0LWNvbG9yKCR2YWx1ZSwgJGxpc3QtZ3JvdXAtaXRlbS1jb2xvci1zY2FsZSk7XG4gIEBpZiAoY29udHJhc3QtcmF0aW8oJGxpc3QtZ3JvdXAtdmFyaWFudC1iZywgJGxpc3QtZ3JvdXAtdmFyaWFudC1jb2xvcikgPCAkbWluLWNvbnRyYXN0LXJhdGlvKSB7XG4gICAgJGxpc3QtZ3JvdXAtdmFyaWFudC1jb2xvcjogbWl4KCR2YWx1ZSwgY29sb3ItY29udHJhc3QoJGxpc3QtZ3JvdXAtdmFyaWFudC1iZyksIGFicygkbGlzdC1ncm91cC1pdGVtLWNvbG9yLXNjYWxlKSk7XG4gIH1cblxuICBAaW5jbHVkZSBsaXN0LWdyb3VwLWl0ZW0tdmFyaWFudCgkc3RhdGUsICRsaXN0LWdyb3VwLXZhcmlhbnQtYmcsICRsaXN0LWdyb3VwLXZhcmlhbnQtY29sb3IpO1xufVxuLy8gc2Nzcy1kb2NzLWVuZCBsaXN0LWdyb3VwLW1vZGlmaWVyc1xuIiwiLy8gTGlzdCBHcm91cHNcblxuLy8gc2Nzcy1kb2NzLXN0YXJ0IGxpc3QtZ3JvdXAtbWl4aW5cbkBtaXhpbiBsaXN0LWdyb3VwLWl0ZW0tdmFyaWFudCgkc3RhdGUsICRiYWNrZ3JvdW5kLCAkY29sb3IpIHtcbiAgLmxpc3QtZ3JvdXAtaXRlbS0jeyRzdGF0ZX0ge1xuICAgIGNvbG9yOiAkY29sb3I7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJGJhY2tncm91bmQ7XG5cbiAgICAmLmxpc3QtZ3JvdXAtaXRlbS1hY3Rpb24ge1xuICAgICAgJjpob3ZlcixcbiAgICAgICY6Zm9jdXMge1xuICAgICAgICBjb2xvcjogJGNvbG9yO1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBzaGFkZS1jb2xvcigkYmFja2dyb3VuZCwgMTAlKTtcbiAgICAgIH1cblxuICAgICAgJi5hY3RpdmUge1xuICAgICAgICBjb2xvcjogJHdoaXRlO1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkY29sb3I7XG4gICAgICAgIGJvcmRlci1jb2xvcjogJGNvbG9yO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuLy8gc2Nzcy1kb2NzLWVuZCBsaXN0LWdyb3VwLW1peGluXG4iLCIvLyB0cmFuc3BhcmVudCBiYWNrZ3JvdW5kIGFuZCBib3JkZXIgcHJvcGVydGllcyBpbmNsdWRlZCBmb3IgYnV0dG9uIHZlcnNpb24uXG4vLyBpT1MgcmVxdWlyZXMgdGhlIGJ1dHRvbiBlbGVtZW50IGluc3RlYWQgb2YgYW4gYW5jaG9yIHRhZy5cbi8vIElmIHlvdSB3YW50IHRoZSBhbmNob3IgdmVyc2lvbiwgaXQgcmVxdWlyZXMgYGhyZWY9XCIjXCJgLlxuLy8gU2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0V2ZW50cy9jbGljayNTYWZhcmlfTW9iaWxlXG5cbi5idG4tY2xvc2Uge1xuICBib3gtc2l6aW5nOiBjb250ZW50LWJveDtcbiAgd2lkdGg6ICRidG4tY2xvc2Utd2lkdGg7XG4gIGhlaWdodDogJGJ0bi1jbG9zZS1oZWlnaHQ7XG4gIHBhZGRpbmc6ICRidG4tY2xvc2UtcGFkZGluZy15ICRidG4tY2xvc2UtcGFkZGluZy14O1xuICBjb2xvcjogJGJ0bi1jbG9zZS1jb2xvcjtcbiAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQgZXNjYXBlLXN2ZygkYnRuLWNsb3NlLWJnKSBjZW50ZXIgLyAkYnRuLWNsb3NlLXdpZHRoIGF1dG8gbm8tcmVwZWF0OyAvLyBpbmNsdWRlIHRyYW5zcGFyZW50IGZvciBidXR0b24gZWxlbWVudHNcbiAgYm9yZGVyOiAwOyAvLyBmb3IgYnV0dG9uIGVsZW1lbnRzXG4gIEBpbmNsdWRlIGJvcmRlci1yYWRpdXMoKTtcbiAgb3BhY2l0eTogJGJ0bi1jbG9zZS1vcGFjaXR5O1xuXG4gIC8vIE92ZXJyaWRlIDxhPidzIGhvdmVyIHN0eWxlXG4gICY6aG92ZXIge1xuICAgIGNvbG9yOiAkYnRuLWNsb3NlLWNvbG9yO1xuICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgICBvcGFjaXR5OiAkYnRuLWNsb3NlLWhvdmVyLW9wYWNpdHk7XG4gIH1cblxuICAmOmZvY3VzIHtcbiAgICBvdXRsaW5lOiAwO1xuICAgIGJveC1zaGFkb3c6ICRidG4tY2xvc2UtZm9jdXMtc2hhZG93O1xuICAgIG9wYWNpdHk6ICRidG4tY2xvc2UtZm9jdXMtb3BhY2l0eTtcbiAgfVxuXG4gICY6ZGlzYWJsZWQsXG4gICYuZGlzYWJsZWQge1xuICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICAgIHVzZXItc2VsZWN0OiBub25lO1xuICAgIG9wYWNpdHk6ICRidG4tY2xvc2UtZGlzYWJsZWQtb3BhY2l0eTtcbiAgfVxufVxuXG4uYnRuLWNsb3NlLXdoaXRlIHtcbiAgZmlsdGVyOiAkYnRuLWNsb3NlLXdoaXRlLWZpbHRlcjtcbn1cbiIsIi50b2FzdCB7XG4gIHdpZHRoOiAkdG9hc3QtbWF4LXdpZHRoO1xuICBtYXgtd2lkdGg6IDEwMCU7XG4gIEBpbmNsdWRlIGZvbnQtc2l6ZSgkdG9hc3QtZm9udC1zaXplKTtcbiAgY29sb3I6ICR0b2FzdC1jb2xvcjtcbiAgcG9pbnRlci1ldmVudHM6IGF1dG87XG4gIGJhY2tncm91bmQtY29sb3I6ICR0b2FzdC1iYWNrZ3JvdW5kLWNvbG9yO1xuICBiYWNrZ3JvdW5kLWNsaXA6IHBhZGRpbmctYm94O1xuICBib3JkZXI6ICR0b2FzdC1ib3JkZXItd2lkdGggc29saWQgJHRvYXN0LWJvcmRlci1jb2xvcjtcbiAgYm94LXNoYWRvdzogJHRvYXN0LWJveC1zaGFkb3c7XG4gIEBpbmNsdWRlIGJvcmRlci1yYWRpdXMoJHRvYXN0LWJvcmRlci1yYWRpdXMpO1xuXG4gICYuc2hvd2luZyB7XG4gICAgb3BhY2l0eTogMDtcbiAgfVxuXG4gICY6bm90KC5zaG93KSB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgfVxufVxuXG4udG9hc3QtY29udGFpbmVyIHtcbiAgd2lkdGg6IG1heC1jb250ZW50O1xuICBtYXgtd2lkdGg6IDEwMCU7XG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xuXG4gID4gOm5vdCg6bGFzdC1jaGlsZCkge1xuICAgIG1hcmdpbi1ib3R0b206ICR0b2FzdC1zcGFjaW5nO1xuICB9XG59XG5cbi50b2FzdC1oZWFkZXIge1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBwYWRkaW5nOiAkdG9hc3QtcGFkZGluZy15ICR0b2FzdC1wYWRkaW5nLXg7XG4gIGNvbG9yOiAkdG9hc3QtaGVhZGVyLWNvbG9yO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAkdG9hc3QtaGVhZGVyLWJhY2tncm91bmQtY29sb3I7XG4gIGJhY2tncm91bmQtY2xpcDogcGFkZGluZy1ib3g7XG4gIGJvcmRlci1ib3R0b206ICR0b2FzdC1ib3JkZXItd2lkdGggc29saWQgJHRvYXN0LWhlYWRlci1ib3JkZXItY29sb3I7XG4gIEBpbmNsdWRlIGJvcmRlci10b3AtcmFkaXVzKHN1YnRyYWN0KCR0b2FzdC1ib3JkZXItcmFkaXVzLCAkdG9hc3QtYm9yZGVyLXdpZHRoKSk7XG5cbiAgLmJ0bi1jbG9zZSB7XG4gICAgbWFyZ2luLXJpZ2h0OiAkdG9hc3QtcGFkZGluZy14ICogLS41O1xuICAgIG1hcmdpbi1sZWZ0OiAkdG9hc3QtcGFkZGluZy14O1xuICB9XG59XG5cbi50b2FzdC1ib2R5IHtcbiAgcGFkZGluZzogJHRvYXN0LXBhZGRpbmcteDsgLy8gYXBwbHkgdG8gYm90aCB2ZXJ0aWNhbCBhbmQgaG9yaXpvbnRhbFxuICB3b3JkLXdyYXA6IGJyZWFrLXdvcmQ7XG59XG4iLCIvLyAubW9kYWwtb3BlbiAgICAgIC0gYm9keSBjbGFzcyBmb3Iga2lsbGluZyB0aGUgc2Nyb2xsXG4vLyAubW9kYWwgICAgICAgICAgIC0gY29udGFpbmVyIHRvIHNjcm9sbCB3aXRoaW5cbi8vIC5tb2RhbC1kaWFsb2cgICAgLSBwb3NpdGlvbmluZyBzaGVsbCBmb3IgdGhlIGFjdHVhbCBtb2RhbFxuLy8gLm1vZGFsLWNvbnRlbnQgICAtIGFjdHVhbCBtb2RhbCB3LyBiZyBhbmQgY29ybmVycyBhbmQgc3R1ZmZcblxuXG4vLyBDb250YWluZXIgdGhhdCB0aGUgbW9kYWwgc2Nyb2xscyB3aXRoaW5cbi5tb2RhbCB7XG4gIHBvc2l0aW9uOiBmaXhlZDtcbiAgdG9wOiAwO1xuICBsZWZ0OiAwO1xuICB6LWluZGV4OiAkemluZGV4LW1vZGFsO1xuICBkaXNwbGF5OiBub25lO1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAxMDAlO1xuICBvdmVyZmxvdy14OiBoaWRkZW47XG4gIG92ZXJmbG93LXk6IGF1dG87XG4gIC8vIFByZXZlbnQgQ2hyb21lIG9uIFdpbmRvd3MgZnJvbSBhZGRpbmcgYSBmb2N1cyBvdXRsaW5lLiBGb3IgZGV0YWlscywgc2VlXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9wdWxsLzEwOTUxLlxuICBvdXRsaW5lOiAwO1xuICAvLyBXZSBkZWxpYmVyYXRlbHkgZG9uJ3QgdXNlIGAtd2Via2l0LW92ZXJmbG93LXNjcm9sbGluZzogdG91Y2g7YCBkdWUgdG8gYVxuICAvLyBnbmFybHkgaU9TIFNhZmFyaSBidWc6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTgzNDJcbiAgLy8gU2VlIGFsc28gaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2lzc3Vlcy8xNzY5NVxufVxuXG4vLyBTaGVsbCBkaXYgdG8gcG9zaXRpb24gdGhlIG1vZGFsIHdpdGggYm90dG9tIHBhZGRpbmdcbi5tb2RhbC1kaWFsb2cge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHdpZHRoOiBhdXRvO1xuICBtYXJnaW46ICRtb2RhbC1kaWFsb2ctbWFyZ2luO1xuICAvLyBhbGxvdyBjbGlja3MgdG8gcGFzcyB0aHJvdWdoIGZvciBjdXN0b20gY2xpY2sgaGFuZGxpbmcgdG8gY2xvc2UgbW9kYWxcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG5cbiAgLy8gV2hlbiBmYWRpbmcgaW4gdGhlIG1vZGFsLCBhbmltYXRlIGl0IHRvIHNsaWRlIGRvd25cbiAgLm1vZGFsLmZhZGUgJiB7XG4gICAgQGluY2x1ZGUgdHJhbnNpdGlvbigkbW9kYWwtdHJhbnNpdGlvbik7XG4gICAgdHJhbnNmb3JtOiAkbW9kYWwtZmFkZS10cmFuc2Zvcm07XG4gIH1cbiAgLm1vZGFsLnNob3cgJiB7XG4gICAgdHJhbnNmb3JtOiAkbW9kYWwtc2hvdy10cmFuc2Zvcm07XG4gIH1cblxuICAvLyBXaGVuIHRyeWluZyB0byBjbG9zZSwgYW5pbWF0ZSBmb2N1cyB0byBzY2FsZVxuICAubW9kYWwubW9kYWwtc3RhdGljICYge1xuICAgIHRyYW5zZm9ybTogJG1vZGFsLXNjYWxlLXRyYW5zZm9ybTtcbiAgfVxufVxuXG4ubW9kYWwtZGlhbG9nLXNjcm9sbGFibGUge1xuICBoZWlnaHQ6IHN1YnRyYWN0KDEwMCUsICRtb2RhbC1kaWFsb2ctbWFyZ2luICogMik7XG5cbiAgLm1vZGFsLWNvbnRlbnQge1xuICAgIG1heC1oZWlnaHQ6IDEwMCU7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgfVxuXG4gIC5tb2RhbC1ib2R5IHtcbiAgICBvdmVyZmxvdy15OiBhdXRvO1xuICB9XG59XG5cbi5tb2RhbC1kaWFsb2ctY2VudGVyZWQge1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBtaW4taGVpZ2h0OiBzdWJ0cmFjdCgxMDAlLCAkbW9kYWwtZGlhbG9nLW1hcmdpbiAqIDIpO1xufVxuXG4vLyBBY3R1YWwgbW9kYWxcbi5tb2RhbC1jb250ZW50IHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICB3aWR0aDogMTAwJTsgLy8gRW5zdXJlIGAubW9kYWwtY29udGVudGAgZXh0ZW5kcyB0aGUgZnVsbCB3aWR0aCBvZiB0aGUgcGFyZW50IGAubW9kYWwtZGlhbG9nYFxuICAvLyBjb3VudGVyYWN0IHRoZSBwb2ludGVyLWV2ZW50czogbm9uZTsgaW4gdGhlIC5tb2RhbC1kaWFsb2dcbiAgY29sb3I6ICRtb2RhbC1jb250ZW50LWNvbG9yO1xuICBwb2ludGVyLWV2ZW50czogYXV0bztcbiAgYmFja2dyb3VuZC1jb2xvcjogJG1vZGFsLWNvbnRlbnQtYmc7XG4gIGJhY2tncm91bmQtY2xpcDogcGFkZGluZy1ib3g7XG4gIGJvcmRlcjogJG1vZGFsLWNvbnRlbnQtYm9yZGVyLXdpZHRoIHNvbGlkICRtb2RhbC1jb250ZW50LWJvcmRlci1jb2xvcjtcbiAgQGluY2x1ZGUgYm9yZGVyLXJhZGl1cygkbW9kYWwtY29udGVudC1ib3JkZXItcmFkaXVzKTtcbiAgQGluY2x1ZGUgYm94LXNoYWRvdygkbW9kYWwtY29udGVudC1ib3gtc2hhZG93LXhzKTtcbiAgLy8gUmVtb3ZlIGZvY3VzIG91dGxpbmUgZnJvbSBvcGVuZWQgbW9kYWxcbiAgb3V0bGluZTogMDtcbn1cblxuLy8gTW9kYWwgYmFja2dyb3VuZFxuLm1vZGFsLWJhY2tkcm9wIHtcbiAgQGluY2x1ZGUgb3ZlcmxheS1iYWNrZHJvcCgkemluZGV4LW1vZGFsLWJhY2tkcm9wLCAkbW9kYWwtYmFja2Ryb3AtYmcsICRtb2RhbC1iYWNrZHJvcC1vcGFjaXR5KTtcbn1cblxuLy8gTW9kYWwgaGVhZGVyXG4vLyBUb3Agc2VjdGlvbiBvZiB0aGUgbW9kYWwgdy8gdGl0bGUgYW5kIGRpc21pc3Ncbi5tb2RhbC1oZWFkZXIge1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LXNocmluazogMDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOyAvLyBQdXQgbW9kYWwgaGVhZGVyIGVsZW1lbnRzICh0aXRsZSBhbmQgZGlzbWlzcykgb24gb3Bwb3NpdGUgZW5kc1xuICBwYWRkaW5nOiAkbW9kYWwtaGVhZGVyLXBhZGRpbmc7XG4gIGJvcmRlci1ib3R0b206ICRtb2RhbC1oZWFkZXItYm9yZGVyLXdpZHRoIHNvbGlkICRtb2RhbC1oZWFkZXItYm9yZGVyLWNvbG9yO1xuICBAaW5jbHVkZSBib3JkZXItdG9wLXJhZGl1cygkbW9kYWwtY29udGVudC1pbm5lci1ib3JkZXItcmFkaXVzKTtcblxuICAuYnRuLWNsb3NlIHtcbiAgICBwYWRkaW5nOiAoJG1vZGFsLWhlYWRlci1wYWRkaW5nLXkgKiAuNSkgKCRtb2RhbC1oZWFkZXItcGFkZGluZy14ICogLjUpO1xuICAgIG1hcmdpbjogKCRtb2RhbC1oZWFkZXItcGFkZGluZy15ICogLS41KSAoJG1vZGFsLWhlYWRlci1wYWRkaW5nLXggKiAtLjUpICgkbW9kYWwtaGVhZGVyLXBhZGRpbmcteSAqIC0uNSkgYXV0bztcbiAgfVxufVxuXG4vLyBUaXRsZSB0ZXh0IHdpdGhpbiBoZWFkZXJcbi5tb2RhbC10aXRsZSB7XG4gIG1hcmdpbi1ib3R0b206IDA7XG4gIGxpbmUtaGVpZ2h0OiAkbW9kYWwtdGl0bGUtbGluZS1oZWlnaHQ7XG59XG5cbi8vIE1vZGFsIGJvZHlcbi8vIFdoZXJlIGFsbCBtb2RhbCBjb250ZW50IHJlc2lkZXMgKHNpYmxpbmcgb2YgLm1vZGFsLWhlYWRlciBhbmQgLm1vZGFsLWZvb3Rlcilcbi5tb2RhbC1ib2R5IHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAvLyBFbmFibGUgYGZsZXgtZ3JvdzogMWAgc28gdGhhdCB0aGUgYm9keSB0YWtlIHVwIGFzIG11Y2ggc3BhY2UgYXMgcG9zc2libGVcbiAgLy8gd2hlbiB0aGVyZSBzaG91bGQgYmUgYSBmaXhlZCBoZWlnaHQgb24gYC5tb2RhbC1kaWFsb2dgLlxuICBmbGV4OiAxIDEgYXV0bztcbiAgcGFkZGluZzogJG1vZGFsLWlubmVyLXBhZGRpbmc7XG59XG5cbi8vIEZvb3RlciAoZm9yIGFjdGlvbnMpXG4ubW9kYWwtZm9vdGVyIHtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC13cmFwOiB3cmFwO1xuICBmbGV4LXNocmluazogMDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjsgLy8gdmVydGljYWxseSBjZW50ZXJcbiAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDsgLy8gUmlnaHQgYWxpZ24gYnV0dG9ucyB3aXRoIGZsZXggcHJvcGVydHkgYmVjYXVzZSB0ZXh0LWFsaWduIGRvZXNuJ3Qgd29yayBvbiBmbGV4IGl0ZW1zXG4gIHBhZGRpbmc6ICRtb2RhbC1pbm5lci1wYWRkaW5nIC0gJG1vZGFsLWZvb3Rlci1tYXJnaW4tYmV0d2VlbiAqIC41O1xuICBib3JkZXItdG9wOiAkbW9kYWwtZm9vdGVyLWJvcmRlci13aWR0aCBzb2xpZCAkbW9kYWwtZm9vdGVyLWJvcmRlci1jb2xvcjtcbiAgQGluY2x1ZGUgYm9yZGVyLWJvdHRvbS1yYWRpdXMoJG1vZGFsLWNvbnRlbnQtaW5uZXItYm9yZGVyLXJhZGl1cyk7XG5cbiAgLy8gUGxhY2UgbWFyZ2luIGJldHdlZW4gZm9vdGVyIGVsZW1lbnRzXG4gIC8vIFRoaXMgc29sdXRpb24gaXMgZmFyIGZyb20gaWRlYWwgYmVjYXVzZSBvZiB0aGUgdW5pdmVyc2FsIHNlbGVjdG9yIHVzYWdlLFxuICAvLyBidXQgaXMgbmVlZGVkIHRvIGZpeCBodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvaXNzdWVzLzI0ODAwXG4gID4gKiB7XG4gICAgbWFyZ2luOiAkbW9kYWwtZm9vdGVyLW1hcmdpbi1iZXR3ZWVuICogLjU7XG4gIH1cbn1cblxuLy8gU2NhbGUgdXAgdGhlIG1vZGFsXG5AaW5jbHVkZSBtZWRpYS1icmVha3BvaW50LXVwKHNtKSB7XG4gIC8vIEF1dG9tYXRpY2FsbHkgc2V0IG1vZGFsJ3Mgd2lkdGggZm9yIGxhcmdlciB2aWV3cG9ydHNcbiAgLm1vZGFsLWRpYWxvZyB7XG4gICAgbWF4LXdpZHRoOiAkbW9kYWwtbWQ7XG4gICAgbWFyZ2luOiAkbW9kYWwtZGlhbG9nLW1hcmdpbi15LXNtLXVwIGF1dG87XG4gIH1cblxuICAubW9kYWwtZGlhbG9nLXNjcm9sbGFibGUge1xuICAgIGhlaWdodDogc3VidHJhY3QoMTAwJSwgJG1vZGFsLWRpYWxvZy1tYXJnaW4teS1zbS11cCAqIDIpO1xuICB9XG5cbiAgLm1vZGFsLWRpYWxvZy1jZW50ZXJlZCB7XG4gICAgbWluLWhlaWdodDogc3VidHJhY3QoMTAwJSwgJG1vZGFsLWRpYWxvZy1tYXJnaW4teS1zbS11cCAqIDIpO1xuICB9XG5cbiAgLm1vZGFsLWNvbnRlbnQge1xuICAgIEBpbmNsdWRlIGJveC1zaGFkb3coJG1vZGFsLWNvbnRlbnQtYm94LXNoYWRvdy1zbS11cCk7XG4gIH1cblxuICAubW9kYWwtc20geyBtYXgtd2lkdGg6ICRtb2RhbC1zbTsgfVxufVxuXG5AaW5jbHVkZSBtZWRpYS1icmVha3BvaW50LXVwKGxnKSB7XG4gIC5tb2RhbC1sZyxcbiAgLm1vZGFsLXhsIHtcbiAgICBtYXgtd2lkdGg6ICRtb2RhbC1sZztcbiAgfVxufVxuXG5AaW5jbHVkZSBtZWRpYS1icmVha3BvaW50LXVwKHhsKSB7XG4gIC5tb2RhbC14bCB7IG1heC13aWR0aDogJG1vZGFsLXhsOyB9XG59XG5cbi8vIHNjc3MtZG9jcy1zdGFydCBtb2RhbC1mdWxsc2NyZWVuLWxvb3BcbkBlYWNoICRicmVha3BvaW50IGluIG1hcC1rZXlzKCRncmlkLWJyZWFrcG9pbnRzKSB7XG4gICRpbmZpeDogYnJlYWtwb2ludC1pbmZpeCgkYnJlYWtwb2ludCwgJGdyaWQtYnJlYWtwb2ludHMpO1xuICAkcG9zdGZpeDogaWYoJGluZml4ICE9IFwiXCIsICRpbmZpeCArIFwiLWRvd25cIiwgXCJcIik7XG5cbiAgQGluY2x1ZGUgbWVkaWEtYnJlYWtwb2ludC1kb3duKCRicmVha3BvaW50KSB7XG4gICAgLm1vZGFsLWZ1bGxzY3JlZW4jeyRwb3N0Zml4fSB7XG4gICAgICB3aWR0aDogMTAwdnc7XG4gICAgICBtYXgtd2lkdGg6IG5vbmU7XG4gICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICBtYXJnaW46IDA7XG5cbiAgICAgIC5tb2RhbC1jb250ZW50IHtcbiAgICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgICBib3JkZXI6IDA7XG4gICAgICAgIEBpbmNsdWRlIGJvcmRlci1yYWRpdXMoMCk7XG4gICAgICB9XG5cbiAgICAgIC5tb2RhbC1oZWFkZXIge1xuICAgICAgICBAaW5jbHVkZSBib3JkZXItcmFkaXVzKDApO1xuICAgICAgfVxuXG4gICAgICAubW9kYWwtYm9keSB7XG4gICAgICAgIG92ZXJmbG93LXk6IGF1dG87XG4gICAgICB9XG5cbiAgICAgIC5tb2RhbC1mb290ZXIge1xuICAgICAgICBAaW5jbHVkZSBib3JkZXItcmFkaXVzKDApO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuLy8gc2Nzcy1kb2NzLWVuZCBtb2RhbC1mdWxsc2NyZWVuLWxvb3BcbiIsIi8vIFNoYXJlZCBiZXR3ZWVuIG1vZGFscyBhbmQgb2ZmY2FudmFzZXNcbkBtaXhpbiBvdmVybGF5LWJhY2tkcm9wKCR6aW5kZXgsICRiYWNrZHJvcC1iZywgJGJhY2tkcm9wLW9wYWNpdHkpIHtcbiAgcG9zaXRpb246IGZpeGVkO1xuICB0b3A6IDA7XG4gIGxlZnQ6IDA7XG4gIHotaW5kZXg6ICR6aW5kZXg7XG4gIHdpZHRoOiAxMDB2dztcbiAgaGVpZ2h0OiAxMDB2aDtcbiAgYmFja2dyb3VuZC1jb2xvcjogJGJhY2tkcm9wLWJnO1xuXG4gIC8vIEZhZGUgZm9yIGJhY2tkcm9wXG4gICYuZmFkZSB7IG9wYWNpdHk6IDA7IH1cbiAgJi5zaG93IHsgb3BhY2l0eTogJGJhY2tkcm9wLW9wYWNpdHk7IH1cbn1cbiIsIi8vIEJhc2UgY2xhc3Ncbi50b29sdGlwIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB6LWluZGV4OiAkemluZGV4LXRvb2x0aXA7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBtYXJnaW46ICR0b29sdGlwLW1hcmdpbjtcbiAgLy8gT3VyIHBhcmVudCBlbGVtZW50IGNhbiBiZSBhcmJpdHJhcnkgc2luY2UgdG9vbHRpcHMgYXJlIGJ5IGRlZmF1bHQgaW5zZXJ0ZWQgYXMgYSBzaWJsaW5nIG9mIHRoZWlyIHRhcmdldCBlbGVtZW50LlxuICAvLyBTbyByZXNldCBvdXIgZm9udCBhbmQgdGV4dCBwcm9wZXJ0aWVzIHRvIGF2b2lkIGluaGVyaXRpbmcgd2VpcmQgdmFsdWVzLlxuICBAaW5jbHVkZSByZXNldC10ZXh0KCk7XG4gIEBpbmNsdWRlIGZvbnQtc2l6ZSgkdG9vbHRpcC1mb250LXNpemUpO1xuICAvLyBBbGxvdyBicmVha2luZyB2ZXJ5IGxvbmcgd29yZHMgc28gdGhleSBkb24ndCBvdmVyZmxvdyB0aGUgdG9vbHRpcCdzIGJvdW5kc1xuICB3b3JkLXdyYXA6IGJyZWFrLXdvcmQ7XG4gIG9wYWNpdHk6IDA7XG5cbiAgJi5zaG93IHsgb3BhY2l0eTogJHRvb2x0aXAtb3BhY2l0eTsgfVxuXG4gIC50b29sdGlwLWFycm93IHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgd2lkdGg6ICR0b29sdGlwLWFycm93LXdpZHRoO1xuICAgIGhlaWdodDogJHRvb2x0aXAtYXJyb3ctaGVpZ2h0O1xuXG4gICAgJjo6YmVmb3JlIHtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIGNvbnRlbnQ6IFwiXCI7XG4gICAgICBib3JkZXItY29sb3I6IHRyYW5zcGFyZW50O1xuICAgICAgYm9yZGVyLXN0eWxlOiBzb2xpZDtcbiAgICB9XG4gIH1cbn1cblxuLmJzLXRvb2x0aXAtdG9wIHtcbiAgcGFkZGluZzogJHRvb2x0aXAtYXJyb3ctaGVpZ2h0IDA7XG5cbiAgLnRvb2x0aXAtYXJyb3cge1xuICAgIGJvdHRvbTogMDtcblxuICAgICY6OmJlZm9yZSB7XG4gICAgICB0b3A6IC0xcHg7XG4gICAgICBib3JkZXItd2lkdGg6ICR0b29sdGlwLWFycm93LWhlaWdodCAoJHRvb2x0aXAtYXJyb3ctd2lkdGggKiAuNSkgMDtcbiAgICAgIGJvcmRlci10b3AtY29sb3I6ICR0b29sdGlwLWFycm93LWNvbG9yO1xuICAgIH1cbiAgfVxufVxuXG4uYnMtdG9vbHRpcC1lbmQge1xuICBwYWRkaW5nOiAwICR0b29sdGlwLWFycm93LWhlaWdodDtcblxuICAudG9vbHRpcC1hcnJvdyB7XG4gICAgbGVmdDogMDtcbiAgICB3aWR0aDogJHRvb2x0aXAtYXJyb3ctaGVpZ2h0O1xuICAgIGhlaWdodDogJHRvb2x0aXAtYXJyb3ctd2lkdGg7XG5cbiAgICAmOjpiZWZvcmUge1xuICAgICAgcmlnaHQ6IC0xcHg7XG4gICAgICBib3JkZXItd2lkdGg6ICgkdG9vbHRpcC1hcnJvdy13aWR0aCAqIC41KSAkdG9vbHRpcC1hcnJvdy1oZWlnaHQgKCR0b29sdGlwLWFycm93LXdpZHRoICogLjUpIDA7XG4gICAgICBib3JkZXItcmlnaHQtY29sb3I6ICR0b29sdGlwLWFycm93LWNvbG9yO1xuICAgIH1cbiAgfVxufVxuXG4uYnMtdG9vbHRpcC1ib3R0b20ge1xuICBwYWRkaW5nOiAkdG9vbHRpcC1hcnJvdy1oZWlnaHQgMDtcblxuICAudG9vbHRpcC1hcnJvdyB7XG4gICAgdG9wOiAwO1xuXG4gICAgJjo6YmVmb3JlIHtcbiAgICAgIGJvdHRvbTogLTFweDtcbiAgICAgIGJvcmRlci13aWR0aDogMCAoJHRvb2x0aXAtYXJyb3ctd2lkdGggKiAuNSkgJHRvb2x0aXAtYXJyb3ctaGVpZ2h0O1xuICAgICAgYm9yZGVyLWJvdHRvbS1jb2xvcjogJHRvb2x0aXAtYXJyb3ctY29sb3I7XG4gICAgfVxuICB9XG59XG5cbi5icy10b29sdGlwLXN0YXJ0IHtcbiAgcGFkZGluZzogMCAkdG9vbHRpcC1hcnJvdy1oZWlnaHQ7XG5cbiAgLnRvb2x0aXAtYXJyb3cge1xuICAgIHJpZ2h0OiAwO1xuICAgIHdpZHRoOiAkdG9vbHRpcC1hcnJvdy1oZWlnaHQ7XG4gICAgaGVpZ2h0OiAkdG9vbHRpcC1hcnJvdy13aWR0aDtcblxuICAgICY6OmJlZm9yZSB7XG4gICAgICBsZWZ0OiAtMXB4O1xuICAgICAgYm9yZGVyLXdpZHRoOiAoJHRvb2x0aXAtYXJyb3ctd2lkdGggKiAuNSkgMCAoJHRvb2x0aXAtYXJyb3ctd2lkdGggKiAuNSkgJHRvb2x0aXAtYXJyb3ctaGVpZ2h0O1xuICAgICAgYm9yZGVyLWxlZnQtY29sb3I6ICR0b29sdGlwLWFycm93LWNvbG9yO1xuICAgIH1cbiAgfVxufVxuXG4uYnMtdG9vbHRpcC1hdXRvIHtcbiAgJltkYXRhLXBvcHBlci1wbGFjZW1lbnRePVwidG9wXCJdIHtcbiAgICBAZXh0ZW5kIC5icy10b29sdGlwLXRvcDtcbiAgfVxuICAmW2RhdGEtcG9wcGVyLXBsYWNlbWVudF49XCJyaWdodFwiXSB7XG4gICAgQGV4dGVuZCAuYnMtdG9vbHRpcC1lbmQ7XG4gIH1cbiAgJltkYXRhLXBvcHBlci1wbGFjZW1lbnRePVwiYm90dG9tXCJdIHtcbiAgICBAZXh0ZW5kIC5icy10b29sdGlwLWJvdHRvbTtcbiAgfVxuICAmW2RhdGEtcG9wcGVyLXBsYWNlbWVudF49XCJsZWZ0XCJdIHtcbiAgICBAZXh0ZW5kIC5icy10b29sdGlwLXN0YXJ0O1xuICB9XG59XG5cbi8vIFdyYXBwZXIgZm9yIHRoZSB0b29sdGlwIGNvbnRlbnRcbi50b29sdGlwLWlubmVyIHtcbiAgbWF4LXdpZHRoOiAkdG9vbHRpcC1tYXgtd2lkdGg7XG4gIHBhZGRpbmc6ICR0b29sdGlwLXBhZGRpbmcteSAkdG9vbHRpcC1wYWRkaW5nLXg7XG4gIGNvbG9yOiAkdG9vbHRpcC1jb2xvcjtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAkdG9vbHRpcC1iZztcbiAgQGluY2x1ZGUgYm9yZGVyLXJhZGl1cygkdG9vbHRpcC1ib3JkZXItcmFkaXVzKTtcbn1cbiIsIkBtaXhpbiByZXNldC10ZXh0IHtcbiAgZm9udC1mYW1pbHk6ICRmb250LWZhbWlseS1iYXNlO1xuICAvLyBXZSBkZWxpYmVyYXRlbHkgZG8gTk9UIHJlc2V0IGZvbnQtc2l6ZSBvciBvdmVyZmxvdy13cmFwIC8gd29yZC13cmFwLlxuICBmb250LXN0eWxlOiBub3JtYWw7XG4gIGZvbnQtd2VpZ2h0OiAkZm9udC13ZWlnaHQtbm9ybWFsO1xuICBsaW5lLWhlaWdodDogJGxpbmUtaGVpZ2h0LWJhc2U7XG4gIHRleHQtYWxpZ246IGxlZnQ7IC8vIEZhbGxiYWNrIGZvciB3aGVyZSBgc3RhcnRgIGlzIG5vdCBzdXBwb3J0ZWRcbiAgdGV4dC1hbGlnbjogc3RhcnQ7XG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgdGV4dC1zaGFkb3c6IG5vbmU7XG4gIHRleHQtdHJhbnNmb3JtOiBub25lO1xuICBsZXR0ZXItc3BhY2luZzogbm9ybWFsO1xuICB3b3JkLWJyZWFrOiBub3JtYWw7XG4gIHdvcmQtc3BhY2luZzogbm9ybWFsO1xuICB3aGl0ZS1zcGFjZTogbm9ybWFsO1xuICBsaW5lLWJyZWFrOiBhdXRvO1xufVxuIiwiLnBvcG92ZXIge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogMDtcbiAgbGVmdDogMCAje1wiLyogcnRsOmlnbm9yZSAqL1wifTtcbiAgei1pbmRleDogJHppbmRleC1wb3BvdmVyO1xuICBkaXNwbGF5OiBibG9jaztcbiAgbWF4LXdpZHRoOiAkcG9wb3Zlci1tYXgtd2lkdGg7XG4gIC8vIE91ciBwYXJlbnQgZWxlbWVudCBjYW4gYmUgYXJiaXRyYXJ5IHNpbmNlIHRvb2x0aXBzIGFyZSBieSBkZWZhdWx0IGluc2VydGVkIGFzIGEgc2libGluZyBvZiB0aGVpciB0YXJnZXQgZWxlbWVudC5cbiAgLy8gU28gcmVzZXQgb3VyIGZvbnQgYW5kIHRleHQgcHJvcGVydGllcyB0byBhdm9pZCBpbmhlcml0aW5nIHdlaXJkIHZhbHVlcy5cbiAgQGluY2x1ZGUgcmVzZXQtdGV4dCgpO1xuICBAaW5jbHVkZSBmb250LXNpemUoJHBvcG92ZXItZm9udC1zaXplKTtcbiAgLy8gQWxsb3cgYnJlYWtpbmcgdmVyeSBsb25nIHdvcmRzIHNvIHRoZXkgZG9uJ3Qgb3ZlcmZsb3cgdGhlIHBvcG92ZXIncyBib3VuZHNcbiAgd29yZC13cmFwOiBicmVhay13b3JkO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAkcG9wb3Zlci1iZztcbiAgYmFja2dyb3VuZC1jbGlwOiBwYWRkaW5nLWJveDtcbiAgYm9yZGVyOiAkcG9wb3Zlci1ib3JkZXItd2lkdGggc29saWQgJHBvcG92ZXItYm9yZGVyLWNvbG9yO1xuICBAaW5jbHVkZSBib3JkZXItcmFkaXVzKCRwb3BvdmVyLWJvcmRlci1yYWRpdXMpO1xuICBAaW5jbHVkZSBib3gtc2hhZG93KCRwb3BvdmVyLWJveC1zaGFkb3cpO1xuXG4gIC5wb3BvdmVyLWFycm93IHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgd2lkdGg6ICRwb3BvdmVyLWFycm93LXdpZHRoO1xuICAgIGhlaWdodDogJHBvcG92ZXItYXJyb3ctaGVpZ2h0O1xuXG4gICAgJjo6YmVmb3JlLFxuICAgICY6OmFmdGVyIHtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgY29udGVudDogXCJcIjtcbiAgICAgIGJvcmRlci1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gICAgICBib3JkZXItc3R5bGU6IHNvbGlkO1xuICAgIH1cbiAgfVxufVxuXG4uYnMtcG9wb3Zlci10b3Age1xuICA+IC5wb3BvdmVyLWFycm93IHtcbiAgICBib3R0b206IHN1YnRyYWN0KC0kcG9wb3Zlci1hcnJvdy1oZWlnaHQsICRwb3BvdmVyLWJvcmRlci13aWR0aCk7XG5cbiAgICAmOjpiZWZvcmUge1xuICAgICAgYm90dG9tOiAwO1xuICAgICAgYm9yZGVyLXdpZHRoOiAkcG9wb3Zlci1hcnJvdy1oZWlnaHQgKCRwb3BvdmVyLWFycm93LXdpZHRoICogLjUpIDA7XG4gICAgICBib3JkZXItdG9wLWNvbG9yOiAkcG9wb3Zlci1hcnJvdy1vdXRlci1jb2xvcjtcbiAgICB9XG5cbiAgICAmOjphZnRlciB7XG4gICAgICBib3R0b206ICRwb3BvdmVyLWJvcmRlci13aWR0aDtcbiAgICAgIGJvcmRlci13aWR0aDogJHBvcG92ZXItYXJyb3ctaGVpZ2h0ICgkcG9wb3Zlci1hcnJvdy13aWR0aCAqIC41KSAwO1xuICAgICAgYm9yZGVyLXRvcC1jb2xvcjogJHBvcG92ZXItYXJyb3ctY29sb3I7XG4gICAgfVxuICB9XG59XG5cbi5icy1wb3BvdmVyLWVuZCB7XG4gID4gLnBvcG92ZXItYXJyb3cge1xuICAgIGxlZnQ6IHN1YnRyYWN0KC0kcG9wb3Zlci1hcnJvdy1oZWlnaHQsICRwb3BvdmVyLWJvcmRlci13aWR0aCk7XG4gICAgd2lkdGg6ICRwb3BvdmVyLWFycm93LWhlaWdodDtcbiAgICBoZWlnaHQ6ICRwb3BvdmVyLWFycm93LXdpZHRoO1xuXG4gICAgJjo6YmVmb3JlIHtcbiAgICAgIGxlZnQ6IDA7XG4gICAgICBib3JkZXItd2lkdGg6ICgkcG9wb3Zlci1hcnJvdy13aWR0aCAqIC41KSAkcG9wb3Zlci1hcnJvdy1oZWlnaHQgKCRwb3BvdmVyLWFycm93LXdpZHRoICogLjUpIDA7XG4gICAgICBib3JkZXItcmlnaHQtY29sb3I6ICRwb3BvdmVyLWFycm93LW91dGVyLWNvbG9yO1xuICAgIH1cblxuICAgICY6OmFmdGVyIHtcbiAgICAgIGxlZnQ6ICRwb3BvdmVyLWJvcmRlci13aWR0aDtcbiAgICAgIGJvcmRlci13aWR0aDogKCRwb3BvdmVyLWFycm93LXdpZHRoICogLjUpICRwb3BvdmVyLWFycm93LWhlaWdodCAoJHBvcG92ZXItYXJyb3ctd2lkdGggKiAuNSkgMDtcbiAgICAgIGJvcmRlci1yaWdodC1jb2xvcjogJHBvcG92ZXItYXJyb3ctY29sb3I7XG4gICAgfVxuICB9XG59XG5cbi5icy1wb3BvdmVyLWJvdHRvbSB7XG4gID4gLnBvcG92ZXItYXJyb3cge1xuICAgIHRvcDogc3VidHJhY3QoLSRwb3BvdmVyLWFycm93LWhlaWdodCwgJHBvcG92ZXItYm9yZGVyLXdpZHRoKTtcblxuICAgICY6OmJlZm9yZSB7XG4gICAgICB0b3A6IDA7XG4gICAgICBib3JkZXItd2lkdGg6IDAgKCRwb3BvdmVyLWFycm93LXdpZHRoICogLjUpICRwb3BvdmVyLWFycm93LWhlaWdodCAoJHBvcG92ZXItYXJyb3ctd2lkdGggKiAuNSk7XG4gICAgICBib3JkZXItYm90dG9tLWNvbG9yOiAkcG9wb3Zlci1hcnJvdy1vdXRlci1jb2xvcjtcbiAgICB9XG5cbiAgICAmOjphZnRlciB7XG4gICAgICB0b3A6ICRwb3BvdmVyLWJvcmRlci13aWR0aDtcbiAgICAgIGJvcmRlci13aWR0aDogMCAoJHBvcG92ZXItYXJyb3ctd2lkdGggKiAuNSkgJHBvcG92ZXItYXJyb3ctaGVpZ2h0ICgkcG9wb3Zlci1hcnJvdy13aWR0aCAqIC41KTtcbiAgICAgIGJvcmRlci1ib3R0b20tY29sb3I6ICRwb3BvdmVyLWFycm93LWNvbG9yO1xuICAgIH1cbiAgfVxuXG4gIC8vIFRoaXMgd2lsbCByZW1vdmUgdGhlIHBvcG92ZXItaGVhZGVyJ3MgYm9yZGVyIGp1c3QgYmVsb3cgdGhlIGFycm93XG4gIC5wb3BvdmVyLWhlYWRlcjo6YmVmb3JlIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgdG9wOiAwO1xuICAgIGxlZnQ6IDUwJTtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICB3aWR0aDogJHBvcG92ZXItYXJyb3ctd2lkdGg7XG4gICAgbWFyZ2luLWxlZnQ6IC0kcG9wb3Zlci1hcnJvdy13aWR0aCAqIC41O1xuICAgIGNvbnRlbnQ6IFwiXCI7XG4gICAgYm9yZGVyLWJvdHRvbTogJHBvcG92ZXItYm9yZGVyLXdpZHRoIHNvbGlkICRwb3BvdmVyLWhlYWRlci1iZztcbiAgfVxufVxuXG4uYnMtcG9wb3Zlci1zdGFydCB7XG4gID4gLnBvcG92ZXItYXJyb3cge1xuICAgIHJpZ2h0OiBzdWJ0cmFjdCgtJHBvcG92ZXItYXJyb3ctaGVpZ2h0LCAkcG9wb3Zlci1ib3JkZXItd2lkdGgpO1xuICAgIHdpZHRoOiAkcG9wb3Zlci1hcnJvdy1oZWlnaHQ7XG4gICAgaGVpZ2h0OiAkcG9wb3Zlci1hcnJvdy13aWR0aDtcblxuICAgICY6OmJlZm9yZSB7XG4gICAgICByaWdodDogMDtcbiAgICAgIGJvcmRlci13aWR0aDogKCRwb3BvdmVyLWFycm93LXdpZHRoICogLjUpIDAgKCRwb3BvdmVyLWFycm93LXdpZHRoICogLjUpICRwb3BvdmVyLWFycm93LWhlaWdodDtcbiAgICAgIGJvcmRlci1sZWZ0LWNvbG9yOiAkcG9wb3Zlci1hcnJvdy1vdXRlci1jb2xvcjtcbiAgICB9XG5cbiAgICAmOjphZnRlciB7XG4gICAgICByaWdodDogJHBvcG92ZXItYm9yZGVyLXdpZHRoO1xuICAgICAgYm9yZGVyLXdpZHRoOiAoJHBvcG92ZXItYXJyb3ctd2lkdGggKiAuNSkgMCAoJHBvcG92ZXItYXJyb3ctd2lkdGggKiAuNSkgJHBvcG92ZXItYXJyb3ctaGVpZ2h0O1xuICAgICAgYm9yZGVyLWxlZnQtY29sb3I6ICRwb3BvdmVyLWFycm93LWNvbG9yO1xuICAgIH1cbiAgfVxufVxuXG4uYnMtcG9wb3Zlci1hdXRvIHtcbiAgJltkYXRhLXBvcHBlci1wbGFjZW1lbnRePVwidG9wXCJdIHtcbiAgICBAZXh0ZW5kIC5icy1wb3BvdmVyLXRvcDtcbiAgfVxuICAmW2RhdGEtcG9wcGVyLXBsYWNlbWVudF49XCJyaWdodFwiXSB7XG4gICAgQGV4dGVuZCAuYnMtcG9wb3Zlci1lbmQ7XG4gIH1cbiAgJltkYXRhLXBvcHBlci1wbGFjZW1lbnRePVwiYm90dG9tXCJdIHtcbiAgICBAZXh0ZW5kIC5icy1wb3BvdmVyLWJvdHRvbTtcbiAgfVxuICAmW2RhdGEtcG9wcGVyLXBsYWNlbWVudF49XCJsZWZ0XCJdIHtcbiAgICBAZXh0ZW5kIC5icy1wb3BvdmVyLXN0YXJ0O1xuICB9XG59XG5cbi8vIE9mZnNldCB0aGUgcG9wb3ZlciB0byBhY2NvdW50IGZvciB0aGUgcG9wb3ZlciBhcnJvd1xuLnBvcG92ZXItaGVhZGVyIHtcbiAgcGFkZGluZzogJHBvcG92ZXItaGVhZGVyLXBhZGRpbmcteSAkcG9wb3Zlci1oZWFkZXItcGFkZGluZy14O1xuICBtYXJnaW4tYm90dG9tOiAwOyAvLyBSZXNldCB0aGUgZGVmYXVsdCBmcm9tIFJlYm9vdFxuICBAaW5jbHVkZSBmb250LXNpemUoJGZvbnQtc2l6ZS1iYXNlKTtcbiAgY29sb3I6ICRwb3BvdmVyLWhlYWRlci1jb2xvcjtcbiAgYmFja2dyb3VuZC1jb2xvcjogJHBvcG92ZXItaGVhZGVyLWJnO1xuICBib3JkZXItYm90dG9tOiAkcG9wb3Zlci1ib3JkZXItd2lkdGggc29saWQgJHBvcG92ZXItYm9yZGVyLWNvbG9yO1xuICBAaW5jbHVkZSBib3JkZXItdG9wLXJhZGl1cygkcG9wb3Zlci1pbm5lci1ib3JkZXItcmFkaXVzKTtcblxuICAmOmVtcHR5IHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG59XG5cbi5wb3BvdmVyLWJvZHkge1xuICBwYWRkaW5nOiAkcG9wb3Zlci1ib2R5LXBhZGRpbmcteSAkcG9wb3Zlci1ib2R5LXBhZGRpbmcteDtcbiAgY29sb3I6ICRwb3BvdmVyLWJvZHktY29sb3I7XG59XG4iLCIvLyBOb3RlcyBvbiB0aGUgY2xhc3Nlczpcbi8vXG4vLyAxLiAuY2Fyb3VzZWwucG9pbnRlci1ldmVudCBzaG91bGQgaWRlYWxseSBiZSBwYW4teSAodG8gYWxsb3cgZm9yIHVzZXJzIHRvIHNjcm9sbCB2ZXJ0aWNhbGx5KVxuLy8gICAgZXZlbiB3aGVuIHRoZWlyIHNjcm9sbCBhY3Rpb24gc3RhcnRlZCBvbiBhIGNhcm91c2VsLCBidXQgZm9yIGNvbXBhdGliaWxpdHkgKHdpdGggRmlyZWZveClcbi8vICAgIHdlJ3JlIHByZXZlbnRpbmcgYWxsIGFjdGlvbnMgaW5zdGVhZFxuLy8gMi4gVGhlIC5jYXJvdXNlbC1pdGVtLXN0YXJ0IGFuZCAuY2Fyb3VzZWwtaXRlbS1lbmQgaXMgdXNlZCB0byBpbmRpY2F0ZSB3aGVyZVxuLy8gICAgdGhlIGFjdGl2ZSBzbGlkZSBpcyBoZWFkaW5nLlxuLy8gMy4gLmFjdGl2ZS5jYXJvdXNlbC1pdGVtIGlzIHRoZSBjdXJyZW50IHNsaWRlLlxuLy8gNC4gLmFjdGl2ZS5jYXJvdXNlbC1pdGVtLXN0YXJ0IGFuZCAuYWN0aXZlLmNhcm91c2VsLWl0ZW0tZW5kIGlzIHRoZSBjdXJyZW50XG4vLyAgICBzbGlkZSBpbiBpdHMgaW4tdHJhbnNpdGlvbiBzdGF0ZS4gT25seSBvbmUgb2YgdGhlc2Ugb2NjdXJzIGF0IGEgdGltZS5cbi8vIDUuIC5jYXJvdXNlbC1pdGVtLW5leHQuY2Fyb3VzZWwtaXRlbS1zdGFydCBhbmQgLmNhcm91c2VsLWl0ZW0tcHJldi5jYXJvdXNlbC1pdGVtLWVuZFxuLy8gICAgaXMgdGhlIHVwY29taW5nIHNsaWRlIGluIHRyYW5zaXRpb24uXG5cbi5jYXJvdXNlbCB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbn1cblxuLmNhcm91c2VsLnBvaW50ZXItZXZlbnQge1xuICB0b3VjaC1hY3Rpb246IHBhbi15O1xufVxuXG4uY2Fyb3VzZWwtaW5uZXIge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHdpZHRoOiAxMDAlO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICBAaW5jbHVkZSBjbGVhcmZpeCgpO1xufVxuXG4uY2Fyb3VzZWwtaXRlbSB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgZGlzcGxheTogbm9uZTtcbiAgZmxvYXQ6IGxlZnQ7XG4gIHdpZHRoOiAxMDAlO1xuICBtYXJnaW4tcmlnaHQ6IC0xMDAlO1xuICBiYWNrZmFjZS12aXNpYmlsaXR5OiBoaWRkZW47XG4gIEBpbmNsdWRlIHRyYW5zaXRpb24oJGNhcm91c2VsLXRyYW5zaXRpb24pO1xufVxuXG4uY2Fyb3VzZWwtaXRlbS5hY3RpdmUsXG4uY2Fyb3VzZWwtaXRlbS1uZXh0LFxuLmNhcm91c2VsLWl0ZW0tcHJldiB7XG4gIGRpc3BsYXk6IGJsb2NrO1xufVxuXG4vKiBydGw6YmVnaW46aWdub3JlICovXG4uY2Fyb3VzZWwtaXRlbS1uZXh0Om5vdCguY2Fyb3VzZWwtaXRlbS1zdGFydCksXG4uYWN0aXZlLmNhcm91c2VsLWl0ZW0tZW5kIHtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDEwMCUpO1xufVxuXG4uY2Fyb3VzZWwtaXRlbS1wcmV2Om5vdCguY2Fyb3VzZWwtaXRlbS1lbmQpLFxuLmFjdGl2ZS5jYXJvdXNlbC1pdGVtLXN0YXJ0IHtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC0xMDAlKTtcbn1cblxuLyogcnRsOmVuZDppZ25vcmUgKi9cblxuXG4vL1xuLy8gQWx0ZXJuYXRlIHRyYW5zaXRpb25zXG4vL1xuXG4uY2Fyb3VzZWwtZmFkZSB7XG4gIC5jYXJvdXNlbC1pdGVtIHtcbiAgICBvcGFjaXR5OiAwO1xuICAgIHRyYW5zaXRpb24tcHJvcGVydHk6IG9wYWNpdHk7XG4gICAgdHJhbnNmb3JtOiBub25lO1xuICB9XG5cbiAgLmNhcm91c2VsLWl0ZW0uYWN0aXZlLFxuICAuY2Fyb3VzZWwtaXRlbS1uZXh0LmNhcm91c2VsLWl0ZW0tc3RhcnQsXG4gIC5jYXJvdXNlbC1pdGVtLXByZXYuY2Fyb3VzZWwtaXRlbS1lbmQge1xuICAgIHotaW5kZXg6IDE7XG4gICAgb3BhY2l0eTogMTtcbiAgfVxuXG4gIC5hY3RpdmUuY2Fyb3VzZWwtaXRlbS1zdGFydCxcbiAgLmFjdGl2ZS5jYXJvdXNlbC1pdGVtLWVuZCB7XG4gICAgei1pbmRleDogMDtcbiAgICBvcGFjaXR5OiAwO1xuICAgIEBpbmNsdWRlIHRyYW5zaXRpb24ob3BhY2l0eSAwcyAkY2Fyb3VzZWwtdHJhbnNpdGlvbi1kdXJhdGlvbik7XG4gIH1cbn1cblxuXG4vL1xuLy8gTGVmdC9yaWdodCBjb250cm9scyBmb3IgbmF2XG4vL1xuXG4uY2Fyb3VzZWwtY29udHJvbC1wcmV2LFxuLmNhcm91c2VsLWNvbnRyb2wtbmV4dCB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdG9wOiAwO1xuICBib3R0b206IDA7XG4gIHotaW5kZXg6IDE7XG4gIC8vIFVzZSBmbGV4IGZvciBhbGlnbm1lbnQgKDEtMylcbiAgZGlzcGxheTogZmxleDsgLy8gMS4gYWxsb3cgZmxleCBzdHlsZXNcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjsgLy8gMi4gdmVydGljYWxseSBjZW50ZXIgY29udGVudHNcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7IC8vIDMuIGhvcml6b250YWxseSBjZW50ZXIgY29udGVudHNcbiAgd2lkdGg6ICRjYXJvdXNlbC1jb250cm9sLXdpZHRoO1xuICBwYWRkaW5nOiAwO1xuICBjb2xvcjogJGNhcm91c2VsLWNvbnRyb2wtY29sb3I7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgYmFja2dyb3VuZDogbm9uZTtcbiAgYm9yZGVyOiAwO1xuICBvcGFjaXR5OiAkY2Fyb3VzZWwtY29udHJvbC1vcGFjaXR5O1xuICBAaW5jbHVkZSB0cmFuc2l0aW9uKCRjYXJvdXNlbC1jb250cm9sLXRyYW5zaXRpb24pO1xuXG4gIC8vIEhvdmVyL2ZvY3VzIHN0YXRlXG4gICY6aG92ZXIsXG4gICY6Zm9jdXMge1xuICAgIGNvbG9yOiAkY2Fyb3VzZWwtY29udHJvbC1jb2xvcjtcbiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gICAgb3V0bGluZTogMDtcbiAgICBvcGFjaXR5OiAkY2Fyb3VzZWwtY29udHJvbC1ob3Zlci1vcGFjaXR5O1xuICB9XG59XG4uY2Fyb3VzZWwtY29udHJvbC1wcmV2IHtcbiAgbGVmdDogMDtcbiAgYmFja2dyb3VuZC1pbWFnZTogaWYoJGVuYWJsZS1ncmFkaWVudHMsIGxpbmVhci1ncmFkaWVudCg5MGRlZywgcmdiYSgkYmxhY2ssIC4yNSksIHJnYmEoJGJsYWNrLCAuMDAxKSksIG51bGwpO1xufVxuLmNhcm91c2VsLWNvbnRyb2wtbmV4dCB7XG4gIHJpZ2h0OiAwO1xuICBiYWNrZ3JvdW5kLWltYWdlOiBpZigkZW5hYmxlLWdyYWRpZW50cywgbGluZWFyLWdyYWRpZW50KDI3MGRlZywgcmdiYSgkYmxhY2ssIC4yNSksIHJnYmEoJGJsYWNrLCAuMDAxKSksIG51bGwpO1xufVxuXG4vLyBJY29ucyBmb3Igd2l0aGluXG4uY2Fyb3VzZWwtY29udHJvbC1wcmV2LWljb24sXG4uY2Fyb3VzZWwtY29udHJvbC1uZXh0LWljb24ge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIHdpZHRoOiAkY2Fyb3VzZWwtY29udHJvbC1pY29uLXdpZHRoO1xuICBoZWlnaHQ6ICRjYXJvdXNlbC1jb250cm9sLWljb24td2lkdGg7XG4gIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IDUwJTtcbiAgYmFja2dyb3VuZC1zaXplOiAxMDAlIDEwMCU7XG59XG5cbi8qIHJ0bDpvcHRpb25zOiB7XG4gIFwiYXV0b1JlbmFtZVwiOiB0cnVlLFxuICBcInN0cmluZ01hcFwiOlsge1xuICAgIFwibmFtZVwiICAgIDogXCJwcmV2LW5leHRcIixcbiAgICBcInNlYXJjaFwiICA6IFwicHJldlwiLFxuICAgIFwicmVwbGFjZVwiIDogXCJuZXh0XCJcbiAgfSBdXG59ICovXG4uY2Fyb3VzZWwtY29udHJvbC1wcmV2LWljb24ge1xuICBiYWNrZ3JvdW5kLWltYWdlOiBlc2NhcGUtc3ZnKCRjYXJvdXNlbC1jb250cm9sLXByZXYtaWNvbi1iZyk7XG59XG4uY2Fyb3VzZWwtY29udHJvbC1uZXh0LWljb24ge1xuICBiYWNrZ3JvdW5kLWltYWdlOiBlc2NhcGUtc3ZnKCRjYXJvdXNlbC1jb250cm9sLW5leHQtaWNvbi1iZyk7XG59XG5cbi8vIE9wdGlvbmFsIGluZGljYXRvciBwaXBzL2NvbnRyb2xzXG4vL1xuLy8gQWRkIGEgY29udGFpbmVyIChzdWNoIGFzIGEgbGlzdCkgd2l0aCB0aGUgZm9sbG93aW5nIGNsYXNzIGFuZCBhZGQgYW4gaXRlbSAoaWRlYWxseSBhIGZvY3VzYWJsZSBjb250cm9sLFxuLy8gbGlrZSBhIGJ1dHRvbikgd2l0aCBkYXRhLWJzLXRhcmdldCBmb3IgZWFjaCBzbGlkZSB5b3VyIGNhcm91c2VsIGhvbGRzLlxuXG4uY2Fyb3VzZWwtaW5kaWNhdG9ycyB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgcmlnaHQ6IDA7XG4gIGJvdHRvbTogMDtcbiAgbGVmdDogMDtcbiAgei1pbmRleDogMjtcbiAgZGlzcGxheTogZmxleDtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIHBhZGRpbmc6IDA7XG4gIC8vIFVzZSB0aGUgLmNhcm91c2VsLWNvbnRyb2wncyB3aWR0aCBhcyBtYXJnaW4gc28gd2UgZG9uJ3Qgb3ZlcmxheSB0aG9zZVxuICBtYXJnaW4tcmlnaHQ6ICRjYXJvdXNlbC1jb250cm9sLXdpZHRoO1xuICBtYXJnaW4tYm90dG9tOiAxcmVtO1xuICBtYXJnaW4tbGVmdDogJGNhcm91c2VsLWNvbnRyb2wtd2lkdGg7XG4gIGxpc3Qtc3R5bGU6IG5vbmU7XG5cbiAgW2RhdGEtYnMtdGFyZ2V0XSB7XG4gICAgYm94LXNpemluZzogY29udGVudC1ib3g7XG4gICAgZmxleDogMCAxIGF1dG87XG4gICAgd2lkdGg6ICRjYXJvdXNlbC1pbmRpY2F0b3Itd2lkdGg7XG4gICAgaGVpZ2h0OiAkY2Fyb3VzZWwtaW5kaWNhdG9yLWhlaWdodDtcbiAgICBwYWRkaW5nOiAwO1xuICAgIG1hcmdpbi1yaWdodDogJGNhcm91c2VsLWluZGljYXRvci1zcGFjZXI7XG4gICAgbWFyZ2luLWxlZnQ6ICRjYXJvdXNlbC1pbmRpY2F0b3Itc3BhY2VyO1xuICAgIHRleHQtaW5kZW50OiAtOTk5cHg7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIGJhY2tncm91bmQtY29sb3I6ICRjYXJvdXNlbC1pbmRpY2F0b3ItYWN0aXZlLWJnO1xuICAgIGJhY2tncm91bmQtY2xpcDogcGFkZGluZy1ib3g7XG4gICAgYm9yZGVyOiAwO1xuICAgIC8vIFVzZSB0cmFuc3BhcmVudCBib3JkZXJzIHRvIGluY3JlYXNlIHRoZSBoaXQgYXJlYSBieSAxMHB4IG9uIHRvcCBhbmQgYm90dG9tLlxuICAgIGJvcmRlci10b3A6ICRjYXJvdXNlbC1pbmRpY2F0b3ItaGl0LWFyZWEtaGVpZ2h0IHNvbGlkIHRyYW5zcGFyZW50O1xuICAgIGJvcmRlci1ib3R0b206ICRjYXJvdXNlbC1pbmRpY2F0b3ItaGl0LWFyZWEtaGVpZ2h0IHNvbGlkIHRyYW5zcGFyZW50O1xuICAgIG9wYWNpdHk6ICRjYXJvdXNlbC1pbmRpY2F0b3Itb3BhY2l0eTtcbiAgICBAaW5jbHVkZSB0cmFuc2l0aW9uKCRjYXJvdXNlbC1pbmRpY2F0b3ItdHJhbnNpdGlvbik7XG4gIH1cblxuICAuYWN0aXZlIHtcbiAgICBvcGFjaXR5OiAkY2Fyb3VzZWwtaW5kaWNhdG9yLWFjdGl2ZS1vcGFjaXR5O1xuICB9XG59XG5cblxuLy8gT3B0aW9uYWwgY2FwdGlvbnNcbi8vXG4vL1xuXG4uY2Fyb3VzZWwtY2FwdGlvbiB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgcmlnaHQ6ICgxMDAlIC0gJGNhcm91c2VsLWNhcHRpb24td2lkdGgpICogLjU7XG4gIGJvdHRvbTogJGNhcm91c2VsLWNhcHRpb24tc3BhY2VyO1xuICBsZWZ0OiAoMTAwJSAtICRjYXJvdXNlbC1jYXB0aW9uLXdpZHRoKSAqIC41O1xuICBwYWRkaW5nLXRvcDogJGNhcm91c2VsLWNhcHRpb24tcGFkZGluZy15O1xuICBwYWRkaW5nLWJvdHRvbTogJGNhcm91c2VsLWNhcHRpb24tcGFkZGluZy15O1xuICBjb2xvcjogJGNhcm91c2VsLWNhcHRpb24tY29sb3I7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbn1cblxuLy8gRGFyayBtb2RlIGNhcm91c2VsXG5cbi5jYXJvdXNlbC1kYXJrIHtcbiAgLmNhcm91c2VsLWNvbnRyb2wtcHJldi1pY29uLFxuICAuY2Fyb3VzZWwtY29udHJvbC1uZXh0LWljb24ge1xuICAgIGZpbHRlcjogJGNhcm91c2VsLWRhcmstY29udHJvbC1pY29uLWZpbHRlcjtcbiAgfVxuXG4gIC5jYXJvdXNlbC1pbmRpY2F0b3JzIFtkYXRhLWJzLXRhcmdldF0ge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICRjYXJvdXNlbC1kYXJrLWluZGljYXRvci1hY3RpdmUtYmc7XG4gIH1cblxuICAuY2Fyb3VzZWwtY2FwdGlvbiB7XG4gICAgY29sb3I6ICRjYXJvdXNlbC1kYXJrLWNhcHRpb24tY29sb3I7XG4gIH1cbn1cbiIsIi8vIHNjc3MtZG9jcy1zdGFydCBjbGVhcmZpeFxuQG1peGluIGNsZWFyZml4KCkge1xuICAmOjphZnRlciB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgY2xlYXI6IGJvdGg7XG4gICAgY29udGVudDogXCJcIjtcbiAgfVxufVxuLy8gc2Nzcy1kb2NzLWVuZCBjbGVhcmZpeFxuIiwiLy9cbi8vIFJvdGF0aW5nIGJvcmRlclxuLy9cblxuLy8gc2Nzcy1kb2NzLXN0YXJ0IHNwaW5uZXItYm9yZGVyLWtleWZyYW1lc1xuQGtleWZyYW1lcyBzcGlubmVyLWJvcmRlciB7XG4gIHRvIHsgdHJhbnNmb3JtOiByb3RhdGUoMzYwZGVnKSAje1wiLyogcnRsOmlnbm9yZSAqL1wifTsgfVxufVxuLy8gc2Nzcy1kb2NzLWVuZCBzcGlubmVyLWJvcmRlci1rZXlmcmFtZXNcblxuLnNwaW5uZXItYm9yZGVyIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICB3aWR0aDogJHNwaW5uZXItd2lkdGg7XG4gIGhlaWdodDogJHNwaW5uZXItaGVpZ2h0O1xuICB2ZXJ0aWNhbC1hbGlnbjogJHNwaW5uZXItdmVydGljYWwtYWxpZ247XG4gIGJvcmRlcjogJHNwaW5uZXItYm9yZGVyLXdpZHRoIHNvbGlkIGN1cnJlbnRDb2xvcjtcbiAgYm9yZGVyLXJpZ2h0LWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgLy8gc3R5bGVsaW50LWRpc2FibGUtbmV4dC1saW5lIHByb3BlcnR5LWRpc2FsbG93ZWQtbGlzdFxuICBib3JkZXItcmFkaXVzOiA1MCU7XG4gIGFuaW1hdGlvbjogJHNwaW5uZXItYW5pbWF0aW9uLXNwZWVkIGxpbmVhciBpbmZpbml0ZSBzcGlubmVyLWJvcmRlcjtcbn1cblxuLnNwaW5uZXItYm9yZGVyLXNtIHtcbiAgd2lkdGg6ICRzcGlubmVyLXdpZHRoLXNtO1xuICBoZWlnaHQ6ICRzcGlubmVyLWhlaWdodC1zbTtcbiAgYm9yZGVyLXdpZHRoOiAkc3Bpbm5lci1ib3JkZXItd2lkdGgtc207XG59XG5cbi8vXG4vLyBHcm93aW5nIGNpcmNsZVxuLy9cblxuLy8gc2Nzcy1kb2NzLXN0YXJ0IHNwaW5uZXItZ3Jvdy1rZXlmcmFtZXNcbkBrZXlmcmFtZXMgc3Bpbm5lci1ncm93IHtcbiAgMCUge1xuICAgIHRyYW5zZm9ybTogc2NhbGUoMCk7XG4gIH1cbiAgNTAlIHtcbiAgICBvcGFjaXR5OiAxO1xuICAgIHRyYW5zZm9ybTogbm9uZTtcbiAgfVxufVxuLy8gc2Nzcy1kb2NzLWVuZCBzcGlubmVyLWdyb3cta2V5ZnJhbWVzXG5cbi5zcGlubmVyLWdyb3cge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIHdpZHRoOiAkc3Bpbm5lci13aWR0aDtcbiAgaGVpZ2h0OiAkc3Bpbm5lci1oZWlnaHQ7XG4gIHZlcnRpY2FsLWFsaWduOiAkc3Bpbm5lci12ZXJ0aWNhbC1hbGlnbjtcbiAgYmFja2dyb3VuZC1jb2xvcjogY3VycmVudENvbG9yO1xuICAvLyBzdHlsZWxpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJvcGVydHktZGlzYWxsb3dlZC1saXN0XG4gIGJvcmRlci1yYWRpdXM6IDUwJTtcbiAgb3BhY2l0eTogMDtcbiAgYW5pbWF0aW9uOiAkc3Bpbm5lci1hbmltYXRpb24tc3BlZWQgbGluZWFyIGluZmluaXRlIHNwaW5uZXItZ3Jvdztcbn1cblxuLnNwaW5uZXItZ3Jvdy1zbSB7XG4gIHdpZHRoOiAkc3Bpbm5lci13aWR0aC1zbTtcbiAgaGVpZ2h0OiAkc3Bpbm5lci1oZWlnaHQtc207XG59XG5cbkBpZiAkZW5hYmxlLXJlZHVjZWQtbW90aW9uIHtcbiAgQG1lZGlhIChwcmVmZXJzLXJlZHVjZWQtbW90aW9uOiByZWR1Y2UpIHtcbiAgICAuc3Bpbm5lci1ib3JkZXIsXG4gICAgLnNwaW5uZXItZ3JvdyB7XG4gICAgICBhbmltYXRpb24tZHVyYXRpb246ICRzcGlubmVyLWFuaW1hdGlvbi1zcGVlZCAqIDI7XG4gICAgfVxuICB9XG59XG4iLCIub2ZmY2FudmFzIHtcbiAgcG9zaXRpb246IGZpeGVkO1xuICBib3R0b206IDA7XG4gIHotaW5kZXg6ICR6aW5kZXgtb2ZmY2FudmFzO1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBtYXgtd2lkdGg6IDEwMCU7XG4gIGNvbG9yOiAkb2ZmY2FudmFzLWNvbG9yO1xuICB2aXNpYmlsaXR5OiBoaWRkZW47XG4gIGJhY2tncm91bmQtY29sb3I6ICRvZmZjYW52YXMtYmctY29sb3I7XG4gIGJhY2tncm91bmQtY2xpcDogcGFkZGluZy1ib3g7XG4gIG91dGxpbmU6IDA7XG4gIEBpbmNsdWRlIGJveC1zaGFkb3coJG9mZmNhbnZhcy1ib3gtc2hhZG93KTtcbiAgQGluY2x1ZGUgdHJhbnNpdGlvbih0cmFuc2Zvcm0gJG9mZmNhbnZhcy10cmFuc2l0aW9uLWR1cmF0aW9uIGVhc2UtaW4tb3V0KTtcbn1cblxuLm9mZmNhbnZhcy1iYWNrZHJvcCB7XG4gIEBpbmNsdWRlIG92ZXJsYXktYmFja2Ryb3AoJHppbmRleC1vZmZjYW52YXMtYmFja2Ryb3AsICRvZmZjYW52YXMtYmFja2Ryb3AtYmcsICRvZmZjYW52YXMtYmFja2Ryb3Atb3BhY2l0eSk7XG59XG5cbi5vZmZjYW52YXMtaGVhZGVyIHtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICBwYWRkaW5nOiAkb2ZmY2FudmFzLXBhZGRpbmcteSAkb2ZmY2FudmFzLXBhZGRpbmcteDtcblxuICAuYnRuLWNsb3NlIHtcbiAgICBwYWRkaW5nOiAoJG9mZmNhbnZhcy1wYWRkaW5nLXkgKiAuNSkgKCRvZmZjYW52YXMtcGFkZGluZy14ICogLjUpO1xuICAgIG1hcmdpbi10b3A6ICRvZmZjYW52YXMtcGFkZGluZy15ICogLS41O1xuICAgIG1hcmdpbi1yaWdodDogJG9mZmNhbnZhcy1wYWRkaW5nLXggKiAtLjU7XG4gICAgbWFyZ2luLWJvdHRvbTogJG9mZmNhbnZhcy1wYWRkaW5nLXkgKiAtLjU7XG4gIH1cbn1cblxuLm9mZmNhbnZhcy10aXRsZSB7XG4gIG1hcmdpbi1ib3R0b206IDA7XG4gIGxpbmUtaGVpZ2h0OiAkb2ZmY2FudmFzLXRpdGxlLWxpbmUtaGVpZ2h0O1xufVxuXG4ub2ZmY2FudmFzLWJvZHkge1xuICBmbGV4LWdyb3c6IDE7XG4gIHBhZGRpbmc6ICRvZmZjYW52YXMtcGFkZGluZy15ICRvZmZjYW52YXMtcGFkZGluZy14O1xuICBvdmVyZmxvdy15OiBhdXRvO1xufVxuXG4ub2ZmY2FudmFzLXN0YXJ0IHtcbiAgdG9wOiAwO1xuICBsZWZ0OiAwO1xuICB3aWR0aDogJG9mZmNhbnZhcy1ob3Jpem9udGFsLXdpZHRoO1xuICBib3JkZXItcmlnaHQ6ICRvZmZjYW52YXMtYm9yZGVyLXdpZHRoIHNvbGlkICRvZmZjYW52YXMtYm9yZGVyLWNvbG9yO1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTEwMCUpO1xufVxuXG4ub2ZmY2FudmFzLWVuZCB7XG4gIHRvcDogMDtcbiAgcmlnaHQ6IDA7XG4gIHdpZHRoOiAkb2ZmY2FudmFzLWhvcml6b250YWwtd2lkdGg7XG4gIGJvcmRlci1sZWZ0OiAkb2ZmY2FudmFzLWJvcmRlci13aWR0aCBzb2xpZCAkb2ZmY2FudmFzLWJvcmRlci1jb2xvcjtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDEwMCUpO1xufVxuXG4ub2ZmY2FudmFzLXRvcCB7XG4gIHRvcDogMDtcbiAgcmlnaHQ6IDA7XG4gIGxlZnQ6IDA7XG4gIGhlaWdodDogJG9mZmNhbnZhcy12ZXJ0aWNhbC1oZWlnaHQ7XG4gIG1heC1oZWlnaHQ6IDEwMCU7XG4gIGJvcmRlci1ib3R0b206ICRvZmZjYW52YXMtYm9yZGVyLXdpZHRoIHNvbGlkICRvZmZjYW52YXMtYm9yZGVyLWNvbG9yO1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTEwMCUpO1xufVxuXG4ub2ZmY2FudmFzLWJvdHRvbSB7XG4gIHJpZ2h0OiAwO1xuICBsZWZ0OiAwO1xuICBoZWlnaHQ6ICRvZmZjYW52YXMtdmVydGljYWwtaGVpZ2h0O1xuICBtYXgtaGVpZ2h0OiAxMDAlO1xuICBib3JkZXItdG9wOiAkb2ZmY2FudmFzLWJvcmRlci13aWR0aCBzb2xpZCAkb2ZmY2FudmFzLWJvcmRlci1jb2xvcjtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDEwMCUpO1xufVxuXG4ub2ZmY2FudmFzLnNob3cge1xuICB0cmFuc2Zvcm06IG5vbmU7XG59XG4iLCIucGxhY2Vob2xkZXIge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIG1pbi1oZWlnaHQ6IDFlbTtcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgY3Vyc29yOiB3YWl0O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiBjdXJyZW50Q29sb3I7XG4gIG9wYWNpdHk6ICRwbGFjZWhvbGRlci1vcGFjaXR5LW1heDtcblxuICAmLmJ0bjo6YmVmb3JlIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgY29udGVudDogXCJcIjtcbiAgfVxufVxuXG4vLyBTaXppbmdcbi5wbGFjZWhvbGRlci14cyB7XG4gIG1pbi1oZWlnaHQ6IC42ZW07XG59XG5cbi5wbGFjZWhvbGRlci1zbSB7XG4gIG1pbi1oZWlnaHQ6IC44ZW07XG59XG5cbi5wbGFjZWhvbGRlci1sZyB7XG4gIG1pbi1oZWlnaHQ6IDEuMmVtO1xufVxuXG4vLyBBbmltYXRpb25cbi5wbGFjZWhvbGRlci1nbG93IHtcbiAgLnBsYWNlaG9sZGVyIHtcbiAgICBhbmltYXRpb246IHBsYWNlaG9sZGVyLWdsb3cgMnMgZWFzZS1pbi1vdXQgaW5maW5pdGU7XG4gIH1cbn1cblxuQGtleWZyYW1lcyBwbGFjZWhvbGRlci1nbG93IHtcbiAgNTAlIHtcbiAgICBvcGFjaXR5OiAkcGxhY2Vob2xkZXItb3BhY2l0eS1taW47XG4gIH1cbn1cblxuLnBsYWNlaG9sZGVyLXdhdmUge1xuICBtYXNrLWltYWdlOiBsaW5lYXItZ3JhZGllbnQoMTMwZGVnLCAkYmxhY2sgNTUlLCByZ2JhKDAsIDAsIDAsICgxIC0gJHBsYWNlaG9sZGVyLW9wYWNpdHktbWluKSkgNzUlLCAkYmxhY2sgOTUlKTtcbiAgbWFzay1zaXplOiAyMDAlIDEwMCU7XG4gIGFuaW1hdGlvbjogcGxhY2Vob2xkZXItd2F2ZSAycyBsaW5lYXIgaW5maW5pdGU7XG59XG5cbkBrZXlmcmFtZXMgcGxhY2Vob2xkZXItd2F2ZSB7XG4gIDEwMCUge1xuICAgIG1hc2stcG9zaXRpb246IC0yMDAlIDAlO1xuICB9XG59XG4iLCJAZWFjaCAkY29sb3IsICR2YWx1ZSBpbiAkdGhlbWUtY29sb3JzIHtcbiAgLmxpbmstI3skY29sb3J9IHtcbiAgICBjb2xvcjogJHZhbHVlO1xuXG4gICAgQGlmICRsaW5rLXNoYWRlLXBlcmNlbnRhZ2UgIT0gMCB7XG4gICAgICAmOmhvdmVyLFxuICAgICAgJjpmb2N1cyB7XG4gICAgICAgIGNvbG9yOiBpZihjb2xvci1jb250cmFzdCgkdmFsdWUpID09ICRjb2xvci1jb250cmFzdC1saWdodCwgc2hhZGUtY29sb3IoJHZhbHVlLCAkbGluay1zaGFkZS1wZXJjZW50YWdlKSwgdGludC1jb2xvcigkdmFsdWUsICRsaW5rLXNoYWRlLXBlcmNlbnRhZ2UpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsIi8vIENyZWRpdDogTmljb2xhcyBHYWxsYWdoZXIgYW5kIFNVSVQgQ1NTLlxuXG4ucmF0aW8ge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHdpZHRoOiAxMDAlO1xuXG4gICY6OmJlZm9yZSB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgcGFkZGluZy10b3A6IHZhcigtLSN7JHZhcmlhYmxlLXByZWZpeH1hc3BlY3QtcmF0aW8pO1xuICAgIGNvbnRlbnQ6IFwiXCI7XG4gIH1cblxuICA+ICoge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB0b3A6IDA7XG4gICAgbGVmdDogMDtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBoZWlnaHQ6IDEwMCU7XG4gIH1cbn1cblxuQGVhY2ggJGtleSwgJHJhdGlvIGluICRhc3BlY3QtcmF0aW9zIHtcbiAgLnJhdGlvLSN7JGtleX0ge1xuICAgIC0tI3skdmFyaWFibGUtcHJlZml4fWFzcGVjdC1yYXRpbzogI3skcmF0aW99O1xuICB9XG59XG4iLCIvLyBTaG9ydGhhbmRcblxuLmZpeGVkLXRvcCB7XG4gIHBvc2l0aW9uOiBmaXhlZDtcbiAgdG9wOiAwO1xuICByaWdodDogMDtcbiAgbGVmdDogMDtcbiAgei1pbmRleDogJHppbmRleC1maXhlZDtcbn1cblxuLmZpeGVkLWJvdHRvbSB7XG4gIHBvc2l0aW9uOiBmaXhlZDtcbiAgcmlnaHQ6IDA7XG4gIGJvdHRvbTogMDtcbiAgbGVmdDogMDtcbiAgei1pbmRleDogJHppbmRleC1maXhlZDtcbn1cblxuLy8gUmVzcG9uc2l2ZSBzdGlja3kgdG9wXG5AZWFjaCAkYnJlYWtwb2ludCBpbiBtYXAta2V5cygkZ3JpZC1icmVha3BvaW50cykge1xuICBAaW5jbHVkZSBtZWRpYS1icmVha3BvaW50LXVwKCRicmVha3BvaW50KSB7XG4gICAgJGluZml4OiBicmVha3BvaW50LWluZml4KCRicmVha3BvaW50LCAkZ3JpZC1icmVha3BvaW50cyk7XG5cbiAgICAuc3RpY2t5I3skaW5maXh9LXRvcCB7XG4gICAgICBwb3NpdGlvbjogc3RpY2t5O1xuICAgICAgdG9wOiAwO1xuICAgICAgei1pbmRleDogJHppbmRleC1zdGlja3k7XG4gICAgfVxuICB9XG59XG4iLCIvLyBzY3NzLWRvY3Mtc3RhcnQgc3RhY2tzXG4uaHN0YWNrIHtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IHJvdztcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgYWxpZ24tc2VsZjogc3RyZXRjaDtcbn1cblxuLnZzdGFjayB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXg6IDEgMSBhdXRvO1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBhbGlnbi1zZWxmOiBzdHJldGNoO1xufVxuLy8gc2Nzcy1kb2NzLWVuZCBzdGFja3NcbiIsIi8vXG4vLyBWaXN1YWxseSBoaWRkZW5cbi8vXG5cbi52aXN1YWxseS1oaWRkZW4sXG4udmlzdWFsbHktaGlkZGVuLWZvY3VzYWJsZTpub3QoOmZvY3VzKTpub3QoOmZvY3VzLXdpdGhpbikge1xuICBAaW5jbHVkZSB2aXN1YWxseS1oaWRkZW4oKTtcbn1cbiIsIi8vIHN0eWxlbGludC1kaXNhYmxlIGRlY2xhcmF0aW9uLW5vLWltcG9ydGFudFxuXG4vLyBIaWRlIGNvbnRlbnQgdmlzdWFsbHkgd2hpbGUga2VlcGluZyBpdCBhY2Nlc3NpYmxlIHRvIGFzc2lzdGl2ZSB0ZWNobm9sb2dpZXNcbi8vXG4vLyBTZWU6IGh0dHBzOi8vd3d3LmExMXlwcm9qZWN0LmNvbS9wb3N0cy8yMDEzLTAxLTExLWhvdy10by1oaWRlLWNvbnRlbnQvXG4vLyBTZWU6IGh0dHBzOi8va2l0dHlnaXJhdWRlbC5jb20vMjAxNi8xMC8xMy9jc3MtaGlkZS1hbmQtc2Vlay9cblxuQG1peGluIHZpc3VhbGx5LWhpZGRlbigpIHtcbiAgcG9zaXRpb246IGFic29sdXRlICFpbXBvcnRhbnQ7XG4gIHdpZHRoOiAxcHggIWltcG9ydGFudDtcbiAgaGVpZ2h0OiAxcHggIWltcG9ydGFudDtcbiAgcGFkZGluZzogMCAhaW1wb3J0YW50O1xuICBtYXJnaW46IC0xcHggIWltcG9ydGFudDsgLy8gRml4IGZvciBodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvaXNzdWVzLzI1Njg2XG4gIG92ZXJmbG93OiBoaWRkZW4gIWltcG9ydGFudDtcbiAgY2xpcDogcmVjdCgwLCAwLCAwLCAwKSAhaW1wb3J0YW50O1xuICB3aGl0ZS1zcGFjZTogbm93cmFwICFpbXBvcnRhbnQ7XG4gIGJvcmRlcjogMCAhaW1wb3J0YW50O1xufVxuXG4vLyBVc2UgdG8gb25seSBkaXNwbGF5IGNvbnRlbnQgd2hlbiBpdCdzIGZvY3VzZWQsIG9yIG9uZSBvZiBpdHMgY2hpbGQgZWxlbWVudHMgaXMgZm9jdXNlZFxuLy8gKGkuZS4gd2hlbiBmb2N1cyBpcyB3aXRoaW4gdGhlIGVsZW1lbnQvY29udGFpbmVyIHRoYXQgdGhlIGNsYXNzIHdhcyBhcHBsaWVkIHRvKVxuLy9cbi8vIFVzZWZ1bCBmb3IgXCJTa2lwIHRvIG1haW4gY29udGVudFwiIGxpbmtzOyBzZWUgaHR0cHM6Ly93d3cudzMub3JnL1RSLzIwMTMvTk9URS1XQ0FHMjAtVEVDSFMtMjAxMzA5MDUvRzFcblxuQG1peGluIHZpc3VhbGx5LWhpZGRlbi1mb2N1c2FibGUoKSB7XG4gICY6bm90KDpmb2N1cyk6bm90KDpmb2N1cy13aXRoaW4pIHtcbiAgICBAaW5jbHVkZSB2aXN1YWxseS1oaWRkZW4oKTtcbiAgfVxufVxuIiwiLy9cbi8vIFN0cmV0Y2hlZCBsaW5rXG4vL1xuXG4uc3RyZXRjaGVkLWxpbmsge1xuICAmOjojeyRzdHJldGNoZWQtbGluay1wc2V1ZG8tZWxlbWVudH0ge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB0b3A6IDA7XG4gICAgcmlnaHQ6IDA7XG4gICAgYm90dG9tOiAwO1xuICAgIGxlZnQ6IDA7XG4gICAgei1pbmRleDogJHN0cmV0Y2hlZC1saW5rLXotaW5kZXg7XG4gICAgY29udGVudDogXCJcIjtcbiAgfVxufVxuIiwiLy9cbi8vIFRleHQgdHJ1bmNhdGlvblxuLy9cblxuLnRleHQtdHJ1bmNhdGUge1xuICBAaW5jbHVkZSB0ZXh0LXRydW5jYXRlKCk7XG59XG4iLCIvLyBUZXh0IHRydW5jYXRlXG4vLyBSZXF1aXJlcyBpbmxpbmUtYmxvY2sgb3IgYmxvY2sgZm9yIHByb3BlciBzdHlsaW5nXG5cbkBtaXhpbiB0ZXh0LXRydW5jYXRlKCkge1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbn1cbiIsIi52ciB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgYWxpZ24tc2VsZjogc3RyZXRjaDtcbiAgd2lkdGg6IDFweDtcbiAgbWluLWhlaWdodDogMWVtO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiBjdXJyZW50Q29sb3I7XG4gIG9wYWNpdHk6ICRoci1vcGFjaXR5O1xufVxuIiwiLy8gVXRpbGl0eSBnZW5lcmF0b3Jcbi8vIFVzZWQgdG8gZ2VuZXJhdGUgdXRpbGl0aWVzICYgcHJpbnQgdXRpbGl0aWVzXG5AbWl4aW4gZ2VuZXJhdGUtdXRpbGl0eSgkdXRpbGl0eSwgJGluZml4LCAkaXMtcmZzLW1lZGlhLXF1ZXJ5OiBmYWxzZSkge1xuICAkdmFsdWVzOiBtYXAtZ2V0KCR1dGlsaXR5LCB2YWx1ZXMpO1xuXG4gIC8vIElmIHRoZSB2YWx1ZXMgYXJlIGEgbGlzdCBvciBzdHJpbmcsIGNvbnZlcnQgaXQgaW50byBhIG1hcFxuICBAaWYgdHlwZS1vZigkdmFsdWVzKSA9PSBcInN0cmluZ1wiIG9yIHR5cGUtb2YobnRoKCR2YWx1ZXMsIDEpKSAhPSBcImxpc3RcIiB7XG4gICAgJHZhbHVlczogemlwKCR2YWx1ZXMsICR2YWx1ZXMpO1xuICB9XG5cbiAgQGVhY2ggJGtleSwgJHZhbHVlIGluICR2YWx1ZXMge1xuICAgICRwcm9wZXJ0aWVzOiBtYXAtZ2V0KCR1dGlsaXR5LCBwcm9wZXJ0eSk7XG5cbiAgICAvLyBNdWx0aXBsZSBwcm9wZXJ0aWVzIGFyZSBwb3NzaWJsZSwgZm9yIGV4YW1wbGUgd2l0aCB2ZXJ0aWNhbCBvciBob3Jpem9udGFsIG1hcmdpbnMgb3IgcGFkZGluZ3NcbiAgICBAaWYgdHlwZS1vZigkcHJvcGVydGllcykgPT0gXCJzdHJpbmdcIiB7XG4gICAgICAkcHJvcGVydGllczogYXBwZW5kKCgpLCAkcHJvcGVydGllcyk7XG4gICAgfVxuXG4gICAgLy8gVXNlIGN1c3RvbSBjbGFzcyBpZiBwcmVzZW50XG4gICAgJHByb3BlcnR5LWNsYXNzOiBpZihtYXAtaGFzLWtleSgkdXRpbGl0eSwgY2xhc3MpLCBtYXAtZ2V0KCR1dGlsaXR5LCBjbGFzcyksIG50aCgkcHJvcGVydGllcywgMSkpO1xuICAgICRwcm9wZXJ0eS1jbGFzczogaWYoJHByb3BlcnR5LWNsYXNzID09IG51bGwsIFwiXCIsICRwcm9wZXJ0eS1jbGFzcyk7XG5cbiAgICAvLyBTdGF0ZSBwYXJhbXMgdG8gZ2VuZXJhdGUgcHNldWRvLWNsYXNzZXNcbiAgICAkc3RhdGU6IGlmKG1hcC1oYXMta2V5KCR1dGlsaXR5LCBzdGF0ZSksIG1hcC1nZXQoJHV0aWxpdHksIHN0YXRlKSwgKCkpO1xuXG4gICAgJGluZml4OiBpZigkcHJvcGVydHktY2xhc3MgPT0gXCJcIiBhbmQgc3RyLXNsaWNlKCRpbmZpeCwgMSwgMSkgPT0gXCItXCIsIHN0ci1zbGljZSgkaW5maXgsIDIpLCAkaW5maXgpO1xuXG4gICAgLy8gRG9uJ3QgcHJlZml4IGlmIHZhbHVlIGtleSBpcyBudWxsIChlZy4gd2l0aCBzaGFkb3cgY2xhc3MpXG4gICAgJHByb3BlcnR5LWNsYXNzLW1vZGlmaWVyOiBpZigka2V5LCBpZigkcHJvcGVydHktY2xhc3MgPT0gXCJcIiBhbmQgJGluZml4ID09IFwiXCIsIFwiXCIsIFwiLVwiKSArICRrZXksIFwiXCIpO1xuXG4gICAgQGlmIG1hcC1nZXQoJHV0aWxpdHksIHJmcykge1xuICAgICAgLy8gSW5zaWRlIHRoZSBtZWRpYSBxdWVyeVxuICAgICAgQGlmICRpcy1yZnMtbWVkaWEtcXVlcnkge1xuICAgICAgICAkdmFsOiByZnMtdmFsdWUoJHZhbHVlKTtcblxuICAgICAgICAvLyBEbyBub3QgcmVuZGVyIGFueXRoaW5nIGlmIGZsdWlkIGFuZCBub24gZmx1aWQgdmFsdWVzIGFyZSB0aGUgc2FtZVxuICAgICAgICAkdmFsdWU6IGlmKCR2YWwgPT0gcmZzLWZsdWlkLXZhbHVlKCR2YWx1ZSksIG51bGwsICR2YWwpO1xuICAgICAgfVxuICAgICAgQGVsc2Uge1xuICAgICAgICAkdmFsdWU6IHJmcy1mbHVpZC12YWx1ZSgkdmFsdWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgICRpcy1jc3MtdmFyOiBtYXAtZ2V0KCR1dGlsaXR5LCBjc3MtdmFyKTtcbiAgICAkaXMtbG9jYWwtdmFyczogbWFwLWdldCgkdXRpbGl0eSwgbG9jYWwtdmFycyk7XG4gICAgJGlzLXJ0bDogbWFwLWdldCgkdXRpbGl0eSwgcnRsKTtcblxuICAgIEBpZiAkdmFsdWUgIT0gbnVsbCB7XG4gICAgICBAaWYgJGlzLXJ0bCA9PSBmYWxzZSB7XG4gICAgICAgIC8qIHJ0bDpiZWdpbjpyZW1vdmUgKi9cbiAgICAgIH1cblxuICAgICAgQGlmICRpcy1jc3MtdmFyIHtcbiAgICAgICAgLiN7JHByb3BlcnR5LWNsYXNzICsgJGluZml4ICsgJHByb3BlcnR5LWNsYXNzLW1vZGlmaWVyfSB7XG4gICAgICAgICAgLS0jeyR2YXJpYWJsZS1wcmVmaXh9I3skcHJvcGVydHktY2xhc3N9OiAjeyR2YWx1ZX07XG4gICAgICAgIH1cblxuICAgICAgICBAZWFjaCAkcHNldWRvIGluICRzdGF0ZSB7XG4gICAgICAgICAgLiN7JHByb3BlcnR5LWNsYXNzICsgJGluZml4ICsgJHByb3BlcnR5LWNsYXNzLW1vZGlmaWVyfS0jeyRwc2V1ZG99OiN7JHBzZXVkb30ge1xuICAgICAgICAgICAgLS0jeyR2YXJpYWJsZS1wcmVmaXh9I3skcHJvcGVydHktY2xhc3N9OiAjeyR2YWx1ZX07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IEBlbHNlIHtcbiAgICAgICAgLiN7JHByb3BlcnR5LWNsYXNzICsgJGluZml4ICsgJHByb3BlcnR5LWNsYXNzLW1vZGlmaWVyfSB7XG4gICAgICAgICAgQGVhY2ggJHByb3BlcnR5IGluICRwcm9wZXJ0aWVzIHtcbiAgICAgICAgICAgIEBpZiAkaXMtbG9jYWwtdmFycyB7XG4gICAgICAgICAgICAgIEBlYWNoICRsb2NhbC12YXIsICR2YWx1ZSBpbiAkaXMtbG9jYWwtdmFycyB7XG4gICAgICAgICAgICAgICAgLS0jeyR2YXJpYWJsZS1wcmVmaXh9I3skbG9jYWwtdmFyfTogI3skdmFsdWV9O1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAjeyRwcm9wZXJ0eX06ICR2YWx1ZSBpZigkZW5hYmxlLWltcG9ydGFudC11dGlsaXRpZXMsICFpbXBvcnRhbnQsIG51bGwpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIEBlYWNoICRwc2V1ZG8gaW4gJHN0YXRlIHtcbiAgICAgICAgICAuI3skcHJvcGVydHktY2xhc3MgKyAkaW5maXggKyAkcHJvcGVydHktY2xhc3MtbW9kaWZpZXJ9LSN7JHBzZXVkb306I3skcHNldWRvfSB7XG4gICAgICAgICAgICBAZWFjaCAkcHJvcGVydHkgaW4gJHByb3BlcnRpZXMge1xuICAgICAgICAgICAgICAjeyRwcm9wZXJ0eX06ICR2YWx1ZSBpZigkZW5hYmxlLWltcG9ydGFudC11dGlsaXRpZXMsICFpbXBvcnRhbnQsIG51bGwpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBAaWYgJGlzLXJ0bCA9PSBmYWxzZSB7XG4gICAgICAgIC8qIHJ0bDplbmQ6cmVtb3ZlICovXG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iLCIvLyBMb29wIG92ZXIgZWFjaCBicmVha3BvaW50XG5AZWFjaCAkYnJlYWtwb2ludCBpbiBtYXAta2V5cygkZ3JpZC1icmVha3BvaW50cykge1xuXG4gIC8vIEdlbmVyYXRlIG1lZGlhIHF1ZXJ5IGlmIG5lZWRlZFxuICBAaW5jbHVkZSBtZWRpYS1icmVha3BvaW50LXVwKCRicmVha3BvaW50KSB7XG4gICAgJGluZml4OiBicmVha3BvaW50LWluZml4KCRicmVha3BvaW50LCAkZ3JpZC1icmVha3BvaW50cyk7XG5cbiAgICAvLyBMb29wIG92ZXIgZWFjaCB1dGlsaXR5IHByb3BlcnR5XG4gICAgQGVhY2ggJGtleSwgJHV0aWxpdHkgaW4gJHV0aWxpdGllcyB7XG4gICAgICAvLyBUaGUgdXRpbGl0eSBjYW4gYmUgZGlzYWJsZWQgd2l0aCBgZmFsc2VgLCB0aHVzIGNoZWNrIGlmIHRoZSB1dGlsaXR5IGlzIGEgbWFwIGZpcnN0XG4gICAgICAvLyBPbmx5IHByb2NlZWQgaWYgcmVzcG9uc2l2ZSBtZWRpYSBxdWVyaWVzIGFyZSBlbmFibGVkIG9yIGlmIGl0J3MgdGhlIGJhc2UgbWVkaWEgcXVlcnlcbiAgICAgIEBpZiB0eXBlLW9mKCR1dGlsaXR5KSA9PSBcIm1hcFwiIGFuZCAobWFwLWdldCgkdXRpbGl0eSwgcmVzcG9uc2l2ZSkgb3IgJGluZml4ID09IFwiXCIpIHtcbiAgICAgICAgQGluY2x1ZGUgZ2VuZXJhdGUtdXRpbGl0eSgkdXRpbGl0eSwgJGluZml4KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuLy8gUkZTIHJlc2NhbGluZ1xuQG1lZGlhIChtaW4td2lkdGg6ICRyZnMtbXEtdmFsdWUpIHtcbiAgQGVhY2ggJGJyZWFrcG9pbnQgaW4gbWFwLWtleXMoJGdyaWQtYnJlYWtwb2ludHMpIHtcbiAgICAkaW5maXg6IGJyZWFrcG9pbnQtaW5maXgoJGJyZWFrcG9pbnQsICRncmlkLWJyZWFrcG9pbnRzKTtcblxuICAgIEBpZiAobWFwLWdldCgkZ3JpZC1icmVha3BvaW50cywgJGJyZWFrcG9pbnQpIDwgJHJmcy1icmVha3BvaW50KSB7XG4gICAgICAvLyBMb29wIG92ZXIgZWFjaCB1dGlsaXR5IHByb3BlcnR5XG4gICAgICBAZWFjaCAka2V5LCAkdXRpbGl0eSBpbiAkdXRpbGl0aWVzIHtcbiAgICAgICAgLy8gVGhlIHV0aWxpdHkgY2FuIGJlIGRpc2FibGVkIHdpdGggYGZhbHNlYCwgdGh1cyBjaGVjayBpZiB0aGUgdXRpbGl0eSBpcyBhIG1hcCBmaXJzdFxuICAgICAgICAvLyBPbmx5IHByb2NlZWQgaWYgcmVzcG9uc2l2ZSBtZWRpYSBxdWVyaWVzIGFyZSBlbmFibGVkIG9yIGlmIGl0J3MgdGhlIGJhc2UgbWVkaWEgcXVlcnlcbiAgICAgICAgQGlmIHR5cGUtb2YoJHV0aWxpdHkpID09IFwibWFwXCIgYW5kIG1hcC1nZXQoJHV0aWxpdHksIHJmcykgYW5kIChtYXAtZ2V0KCR1dGlsaXR5LCByZXNwb25zaXZlKSBvciAkaW5maXggPT0gXCJcIikge1xuICAgICAgICAgIEBpbmNsdWRlIGdlbmVyYXRlLXV0aWxpdHkoJHV0aWxpdHksICRpbmZpeCwgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuXG4vLyBQcmludCB1dGlsaXRpZXNcbkBtZWRpYSBwcmludCB7XG4gIEBlYWNoICRrZXksICR1dGlsaXR5IGluICR1dGlsaXRpZXMge1xuICAgIC8vIFRoZSB1dGlsaXR5IGNhbiBiZSBkaXNhYmxlZCB3aXRoIGBmYWxzZWAsIHRodXMgY2hlY2sgaWYgdGhlIHV0aWxpdHkgaXMgYSBtYXAgZmlyc3RcbiAgICAvLyBUaGVuIGNoZWNrIGlmIHRoZSB1dGlsaXR5IG5lZWRzIHByaW50IHN0eWxlc1xuICAgIEBpZiB0eXBlLW9mKCR1dGlsaXR5KSA9PSBcIm1hcFwiIGFuZCBtYXAtZ2V0KCR1dGlsaXR5LCBwcmludCkgPT0gdHJ1ZSB7XG4gICAgICBAaW5jbHVkZSBnZW5lcmF0ZS11dGlsaXR5KCR1dGlsaXR5LCBcIi1wcmludFwiKTtcbiAgICB9XG4gIH1cbn1cbiIsIu+7vy8qKioqKioqKiBqcXVlcnkgc21hcnRtZW51IGJvb3RzdHJhcCA0ICoqKioqKi9cclxuLyogQ2FyZXRzIGluIGNvbGxhcHNpYmxlIG1vZGUgKG1ha2UgdGhlbSBsb29rIGxpa2UgKy8tIGJ1dHRvbnMpICovXHJcbi5uYXZiYXItbmF2LnNtLWNvbGxhcHNpYmxlIC5zdWItYXJyb3cge1xyXG4gICAgcG9zaXRpb246IGFic29sdXRlO1xyXG4gICAgdG9wOiA1MCU7XHJcbiAgICByaWdodDogMDtcclxuICAgIG1hcmdpbjogLTAuN2VtIDAuNWVtIDAgMDtcclxuICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMCwgMCwgMCwgLjEpO1xyXG4gICAgYm9yZGVyLXJhZGl1czogLjI1cmVtO1xyXG4gICAgcGFkZGluZzogMDtcclxuICAgIHdpZHRoOiAyZW07XHJcbiAgICBoZWlnaHQ6IDEuNGVtO1xyXG4gICAgZm9udC1zaXplOiAxLjI1cmVtO1xyXG4gICAgbGluZS1oZWlnaHQ6IDEuMmVtO1xyXG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xyXG59XHJcblxyXG4ubmF2YmFyLW5hdi5zbS1jb2xsYXBzaWJsZSAuc3ViLWFycm93OjpiZWZvcmUge1xyXG4gICAgY29udGVudDogJysnO1xyXG59XHJcblxyXG4ubmF2YmFyLW5hdi5zbS1jb2xsYXBzaWJsZSAuc2hvdyA+IGEgPiAuc3ViLWFycm93OjpiZWZvcmUge1xyXG4gICAgY29udGVudDogJy0nO1xyXG59XHJcblxyXG4ubmF2YmFyLWRhcmsgLm5hdmJhci1uYXYuc20tY29sbGFwc2libGUgLm5hdi1saW5rIC5zdWItYXJyb3cge1xyXG4gICAgYm9yZGVyLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIC4xKTtcclxufVxyXG4vKiBtYWtlIHN1cmUgdGhlcmUncyByb29tIGZvciB0aGUgY2FyZXRzICovXHJcbi5uYXZiYXItbmF2LnNtLWNvbGxhcHNpYmxlIC5oYXMtc3VibWVudSB7XHJcbiAgICBwYWRkaW5nLXJpZ2h0OiAzZW07XHJcbn1cclxuLyoga2VlcCB0aGUgY2FyZXRzIHByb3Blcmx5IHBvc2l0aW9uZWQgKi9cclxuLm5hdmJhci1uYXYuc20tY29sbGFwc2libGUgLm5hdi1saW5rLFxyXG4ubmF2YmFyLW5hdi5zbS1jb2xsYXBzaWJsZSAuZHJvcGRvd24taXRlbSB7XHJcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XHJcbn1cclxuXHJcblxyXG4vKiBOYXYgY2FyZXRzIGluIGV4cGFuZGVkIG1vZGUgKi9cclxuLm5hdmJhci1uYXY6bm90KC5zbS1jb2xsYXBzaWJsZSkgLm5hdi1saW5rIC5zdWItYXJyb3cge1xyXG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xyXG4gICAgd2lkdGg6IDA7XHJcbiAgICBoZWlnaHQ6IDA7XHJcbiAgICBtYXJnaW4tbGVmdDogLjI1NWVtO1xyXG4gICAgdmVydGljYWwtYWxpZ246IC4yNTVlbTtcclxuICAgIGJvcmRlci10b3A6IC4zZW0gc29saWQ7XHJcbiAgICBib3JkZXItcmlnaHQ6IC4zZW0gc29saWQgdHJhbnNwYXJlbnQ7XHJcbiAgICBib3JkZXItbGVmdDogLjNlbSBzb2xpZCB0cmFuc3BhcmVudDtcclxufVxyXG4vKiBwb2ludCB0aGUgYXJyb3dzIHVwIGZvciAuZml4ZWQtYm90dG9tIG5hdmJhcnMgKi9cclxuLmZpeGVkLWJvdHRvbSAubmF2YmFyLW5hdjpub3QoLnNtLWNvbGxhcHNpYmxlKSAubmF2LWxpbmsgLnN1Yi1hcnJvdyxcclxuLmZpeGVkLWJvdHRvbSAubmF2YmFyLW5hdjpub3QoLnNtLWNvbGxhcHNpYmxlKTpub3QoW2RhdGEtc20tc2tpcF0pIC5kcm9wZG93bi10b2dnbGU6OmFmdGVyIHtcclxuICAgIGJvcmRlci10b3A6IDA7XHJcbiAgICBib3JkZXItYm90dG9tOiAuM2VtIHNvbGlkO1xyXG59XHJcblxyXG5cclxuLyogRHJvcGRvd24gY2FyZXRzIGluIGV4cGFuZGVkIG1vZGUgKi9cclxuLm5hdmJhci1uYXY6bm90KC5zbS1jb2xsYXBzaWJsZSkgLmRyb3Bkb3duLWl0ZW0gLnN1Yi1hcnJvdyxcclxuLm5hdmJhci1uYXY6bm90KC5zbS1jb2xsYXBzaWJsZSk6bm90KFtkYXRhLXNtLXNraXBdKSAuZHJvcGRvd24tbWVudSAuZHJvcGRvd24tdG9nZ2xlOjphZnRlciB7XHJcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XHJcbiAgICB0b3A6IDUwJTtcclxuICAgIHJpZ2h0OiAwO1xyXG4gICAgd2lkdGg6IDA7XHJcbiAgICBoZWlnaHQ6IDA7XHJcbiAgICBtYXJnaW4tdG9wOiAtLjNlbTtcclxuICAgIG1hcmdpbi1yaWdodDogMWVtO1xyXG4gICAgYm9yZGVyLXRvcDogLjNlbSBzb2xpZCB0cmFuc3BhcmVudDtcclxuICAgIGJvcmRlci1ib3R0b206IC4zZW0gc29saWQgdHJhbnNwYXJlbnQ7XHJcbiAgICBib3JkZXItbGVmdDogLjNlbSBzb2xpZDtcclxufVxyXG4vKiBtYWtlIHN1cmUgdGhlcmUncyByb29tIGZvciB0aGUgY2FyZXRzICovXHJcbi5uYXZiYXItbmF2Om5vdCguc20tY29sbGFwc2libGUpIC5kcm9wZG93bi1pdGVtLmhhcy1zdWJtZW51IHtcclxuICAgIHBhZGRpbmctcmlnaHQ6IDJlbTtcclxufVxyXG5cclxuXHJcbi8qIFNjcm9sbGluZyBhcnJvd3MgZm9yIHRhbGwgbWVudXMgKi9cclxuLm5hdmJhci1uYXYgLnNjcm9sbC11cCxcclxuLm5hdmJhci1uYXYgLnNjcm9sbC1kb3duIHtcclxuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICAgIGRpc3BsYXk6IG5vbmU7XHJcbiAgICB2aXNpYmlsaXR5OiBoaWRkZW47XHJcbiAgICBoZWlnaHQ6IDIwcHg7XHJcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xyXG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xyXG59XHJcblxyXG4ubmF2YmFyLW5hdiAuc2Nyb2xsLXVwLWFycm93LFxyXG4ubmF2YmFyLW5hdiAuc2Nyb2xsLWRvd24tYXJyb3cge1xyXG4gICAgcG9zaXRpb246IGFic29sdXRlO1xyXG4gICAgdG9wOiAtMnB4O1xyXG4gICAgbGVmdDogNTAlO1xyXG4gICAgbWFyZ2luLWxlZnQ6IC04cHg7XHJcbiAgICB3aWR0aDogMDtcclxuICAgIGhlaWdodDogMDtcclxuICAgIG92ZXJmbG93OiBoaWRkZW47XHJcbiAgICBib3JkZXItdG9wOiA3cHggc29saWQgdHJhbnNwYXJlbnQ7XHJcbiAgICBib3JkZXItcmlnaHQ6IDdweCBzb2xpZCB0cmFuc3BhcmVudDtcclxuICAgIGJvcmRlci1ib3R0b206IDdweCBzb2xpZDtcclxuICAgIGJvcmRlci1sZWZ0OiA3cHggc29saWQgdHJhbnNwYXJlbnQ7XHJcbn1cclxuXHJcbi5uYXZiYXItbmF2IC5zY3JvbGwtZG93bi1hcnJvdyB7XHJcbiAgICB0b3A6IDZweDtcclxuICAgIGJvcmRlci10b3A6IDdweCBzb2xpZDtcclxuICAgIGJvcmRlci1yaWdodDogN3B4IHNvbGlkIHRyYW5zcGFyZW50O1xyXG4gICAgYm9yZGVyLWJvdHRvbTogN3B4IHNvbGlkIHRyYW5zcGFyZW50O1xyXG4gICAgYm9yZGVyLWxlZnQ6IDdweCBzb2xpZCB0cmFuc3BhcmVudDtcclxufVxyXG5cclxuXHJcbi8qIEFkZCBzb21lIHNwYWNpbmcgZm9yIDIrIGxldmVsIHN1YiBtZW51cyBpbiBjb2xsYXBzaWJsZSBtb2RlICovXHJcbi5uYXZiYXItbmF2LnNtLWNvbGxhcHNpYmxlIC5kcm9wZG93bi1tZW51IC5kcm9wZG93bi1tZW51IHtcclxuICAgIG1hcmdpbjogLjVlbTtcclxufVxyXG5cclxuXHJcbi8qIEZpeCBTbWFydE1lbnVzIHN1YiBtZW51cyBhdXRvIHdpZHRoIChzdWJNZW51c01pbldpZHRoL3N1Yk1lbnVzTWF4V2lkdGggb3B0aW9ucykgKi9cclxuLm5hdmJhci1uYXY6bm90KFtkYXRhLXNtLXNraXBdKSAuZHJvcGRvd24taXRlbSB7XHJcbiAgICB3aGl0ZS1zcGFjZTogbm9ybWFsO1xyXG59XHJcblxyXG4ubmF2YmFyLW5hdjpub3QoLnNtLWNvbGxhcHNpYmxlKSAuc20tbm93cmFwID4gbGkgPiAuZHJvcGRvd24taXRlbSB7XHJcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xyXG59XHJcblxyXG4iLCLvu78vKiFcclxuICogRm9udCBBd2Vzb21lIEZyZWUgNS4xLjAtOCBieSBAZm9udGF3ZXNvbWUgLSBodHRwczovL2ZvbnRhd2Vzb21lLmNvbVxyXG4gKiBMaWNlbnNlIC0gaHR0cHM6Ly9mb250YXdlc29tZS5jb20vbGljZW5zZSAoSWNvbnM6IENDIEJZIDQuMCwgRm9udHM6IFNJTCBPRkwgMS4xLCBDb2RlOiBNSVQgTGljZW5zZSlcclxuICovXHJcblxyXG4kZmEtZm9udC1wYXRoOiBcIi93ZWJmb250c1wiO1xyXG5cclxuXHJcbkBpbXBvcnQgJ25vZGVfbW9kdWxlcy9AZm9ydGF3ZXNvbWUvZm9udGF3ZXNvbWUtZnJlZS9zY3NzL3ZhcmlhYmxlcyc7XHJcbkBpbXBvcnQgJ25vZGVfbW9kdWxlcy9AZm9ydGF3ZXNvbWUvZm9udGF3ZXNvbWUtZnJlZS9zY3NzL21peGlucyc7XHJcbkBpbXBvcnQgJ25vZGVfbW9kdWxlcy9AZm9ydGF3ZXNvbWUvZm9udGF3ZXNvbWUtZnJlZS9zY3NzL2NvcmUnO1xyXG5AaW1wb3J0ICdub2RlX21vZHVsZXMvQGZvcnRhd2Vzb21lL2ZvbnRhd2Vzb21lLWZyZWUvc2Nzcy9sYXJnZXInO1xyXG5AaW1wb3J0ICdub2RlX21vZHVsZXMvQGZvcnRhd2Vzb21lL2ZvbnRhd2Vzb21lLWZyZWUvc2Nzcy9maXhlZC13aWR0aCc7XHJcbkBpbXBvcnQgJ25vZGVfbW9kdWxlcy9AZm9ydGF3ZXNvbWUvZm9udGF3ZXNvbWUtZnJlZS9zY3NzL2xpc3QnO1xyXG5AaW1wb3J0ICdub2RlX21vZHVsZXMvQGZvcnRhd2Vzb21lL2ZvbnRhd2Vzb21lLWZyZWUvc2Nzcy9ib3JkZXJlZC1wdWxsZWQnO1xyXG5AaW1wb3J0ICdub2RlX21vZHVsZXMvQGZvcnRhd2Vzb21lL2ZvbnRhd2Vzb21lLWZyZWUvc2Nzcy9hbmltYXRlZCc7XHJcbkBpbXBvcnQgJ25vZGVfbW9kdWxlcy9AZm9ydGF3ZXNvbWUvZm9udGF3ZXNvbWUtZnJlZS9zY3NzL3JvdGF0ZWQtZmxpcHBlZCc7XHJcbkBpbXBvcnQgJ25vZGVfbW9kdWxlcy9AZm9ydGF3ZXNvbWUvZm9udGF3ZXNvbWUtZnJlZS9zY3NzL3N0YWNrZWQnO1xyXG4vL0BpbXBvcnQgJ25vZGVfbW9kdWxlcy9AZm9ydGF3ZXNvbWUvZm9udGF3ZXNvbWUtZnJlZS9zY3NzL2ljb25zJztcclxuQGltcG9ydCAnaWNvbnMnO1xyXG5AaW1wb3J0ICdub2RlX21vZHVsZXMvQGZvcnRhd2Vzb21lL2ZvbnRhd2Vzb21lLWZyZWUvc2Nzcy9zY3JlZW4tcmVhZGVyJztcclxuXHJcbkBpbXBvcnQgJ25vZGVfbW9kdWxlcy9AZm9ydGF3ZXNvbWUvZm9udGF3ZXNvbWUtZnJlZS9zY3NzL3NvbGlkJztcclxuQGltcG9ydCAnbm9kZV9tb2R1bGVzL0Bmb3J0YXdlc29tZS9mb250YXdlc29tZS1mcmVlL3Njc3MvcmVndWxhcic7XHJcbkBpbXBvcnQgJ25vZGVfbW9kdWxlcy9AZm9ydGF3ZXNvbWUvZm9udGF3ZXNvbWUtZnJlZS9zY3NzL2JyYW5kcyc7XHJcblxyXG5cclxuIiwiLy8gQmFzZSBDbGFzcyBEZWZpbml0aW9uXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi4jeyRmYS1jc3MtcHJlZml4fSxcbi5mYXMsXG4uZmFyLFxuLmZhbCxcbi5mYWQsXG4uZmFiIHtcbiAgLW1vei1vc3gtZm9udC1zbW9vdGhpbmc6IGdyYXlzY2FsZTtcbiAgLXdlYmtpdC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgZm9udC1zdHlsZTogbm9ybWFsO1xuICBmb250LXZhcmlhbnQ6IG5vcm1hbDtcbiAgdGV4dC1yZW5kZXJpbmc6IGF1dG87XG4gIGxpbmUtaGVpZ2h0OiAxO1xufVxuXG4lZmEtaWNvbiB7XG4gIEBpbmNsdWRlIGZhLWljb247XG59XG4iLCIvLyBJY29uIFNpemVzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8vIG1ha2VzIHRoZSBmb250IDMzJSBsYXJnZXIgcmVsYXRpdmUgdG8gdGhlIGljb24gY29udGFpbmVyXG4uI3skZmEtY3NzLXByZWZpeH0tbGcge1xuICBmb250LXNpemU6ICg0ZW0gLyAzKTtcbiAgbGluZS1oZWlnaHQ6ICgzZW0gLyA0KTtcbiAgdmVydGljYWwtYWxpZ246IC0uMDY2N2VtO1xufVxuXG4uI3skZmEtY3NzLXByZWZpeH0teHMge1xuICBmb250LXNpemU6IC43NWVtO1xufVxuXG4uI3skZmEtY3NzLXByZWZpeH0tc20ge1xuICBmb250LXNpemU6IC44NzVlbTtcbn1cblxuQGZvciAkaSBmcm9tIDEgdGhyb3VnaCAxMCB7XG4gIC4jeyRmYS1jc3MtcHJlZml4fS0jeyRpfXgge1xuICAgIGZvbnQtc2l6ZTogJGkgKiAxZW07XG4gIH1cbn1cbiIsIi8vIEZpeGVkIFdpZHRoIEljb25zXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4uI3skZmEtY3NzLXByZWZpeH0tZncge1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIHdpZHRoOiAkZmEtZnctd2lkdGg7XG59XG4iLCIvLyBWYXJpYWJsZXNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiRmYS1mb250LXBhdGg6ICAgICAgICAgXCIuLi93ZWJmb250c1wiICFkZWZhdWx0O1xuJGZhLWZvbnQtc2l6ZS1iYXNlOiAgICAxNnB4ICFkZWZhdWx0O1xuJGZhLWZvbnQtZGlzcGxheTogICAgICBibG9jayAhZGVmYXVsdDtcbiRmYS1jc3MtcHJlZml4OiAgICAgICAgZmEgIWRlZmF1bHQ7XG4kZmEtdmVyc2lvbjogICAgICAgICAgIFwiNS4xNS40XCIgIWRlZmF1bHQ7XG4kZmEtYm9yZGVyLWNvbG9yOiAgICAgICNlZWUgIWRlZmF1bHQ7XG4kZmEtaW52ZXJzZTogICAgICAgICAgICNmZmYgIWRlZmF1bHQ7XG4kZmEtbGktd2lkdGg6ICAgICAgICAgIDJlbSAhZGVmYXVsdDtcbiRmYS1mdy13aWR0aDogICAgICAgICAgKDIwZW0gLyAxNik7XG4kZmEtcHJpbWFyeS1vcGFjaXR5OiAgIDEgIWRlZmF1bHQ7XG4kZmEtc2Vjb25kYXJ5LW9wYWNpdHk6IC40ICFkZWZhdWx0O1xuXG4vLyBDb252ZW5pZW5jZSBmdW5jdGlvbiB1c2VkIHRvIHNldCBjb250ZW50IHByb3BlcnR5XG5AZnVuY3Rpb24gZmEtY29udGVudCgkZmEtdmFyKSB7XG4gIEByZXR1cm4gdW5xdW90ZShcIlxcXCIjeyAkZmEtdmFyIH1cXFwiXCIpO1xufVxuXG4kZmEtdmFyLTUwMHB4OiBcXGYyNmU7XG4kZmEtdmFyLWFjY2Vzc2libGUtaWNvbjogXFxmMzY4O1xuJGZhLXZhci1hY2N1c29mdDogXFxmMzY5O1xuJGZhLXZhci1hY3F1aXNpdGlvbnMtaW5jb3Jwb3JhdGVkOiBcXGY2YWY7XG4kZmEtdmFyLWFkOiBcXGY2NDE7XG4kZmEtdmFyLWFkZHJlc3MtYm9vazogXFxmMmI5O1xuJGZhLXZhci1hZGRyZXNzLWNhcmQ6IFxcZjJiYjtcbiRmYS12YXItYWRqdXN0OiBcXGYwNDI7XG4kZmEtdmFyLWFkbjogXFxmMTcwO1xuJGZhLXZhci1hZHZlcnNhbDogXFxmMzZhO1xuJGZhLXZhci1hZmZpbGlhdGV0aGVtZTogXFxmMzZiO1xuJGZhLXZhci1haXItZnJlc2hlbmVyOiBcXGY1ZDA7XG4kZmEtdmFyLWFpcmJuYjogXFxmODM0O1xuJGZhLXZhci1hbGdvbGlhOiBcXGYzNmM7XG4kZmEtdmFyLWFsaWduLWNlbnRlcjogXFxmMDM3O1xuJGZhLXZhci1hbGlnbi1qdXN0aWZ5OiBcXGYwMzk7XG4kZmEtdmFyLWFsaWduLWxlZnQ6IFxcZjAzNjtcbiRmYS12YXItYWxpZ24tcmlnaHQ6IFxcZjAzODtcbiRmYS12YXItYWxpcGF5OiBcXGY2NDI7XG4kZmEtdmFyLWFsbGVyZ2llczogXFxmNDYxO1xuJGZhLXZhci1hbWF6b246IFxcZjI3MDtcbiRmYS12YXItYW1hem9uLXBheTogXFxmNDJjO1xuJGZhLXZhci1hbWJ1bGFuY2U6IFxcZjBmOTtcbiRmYS12YXItYW1lcmljYW4tc2lnbi1sYW5ndWFnZS1pbnRlcnByZXRpbmc6IFxcZjJhMztcbiRmYS12YXItYW1pbGlhOiBcXGYzNmQ7XG4kZmEtdmFyLWFuY2hvcjogXFxmMTNkO1xuJGZhLXZhci1hbmRyb2lkOiBcXGYxN2I7XG4kZmEtdmFyLWFuZ2VsbGlzdDogXFxmMjA5O1xuJGZhLXZhci1hbmdsZS1kb3VibGUtZG93bjogXFxmMTAzO1xuJGZhLXZhci1hbmdsZS1kb3VibGUtbGVmdDogXFxmMTAwO1xuJGZhLXZhci1hbmdsZS1kb3VibGUtcmlnaHQ6IFxcZjEwMTtcbiRmYS12YXItYW5nbGUtZG91YmxlLXVwOiBcXGYxMDI7XG4kZmEtdmFyLWFuZ2xlLWRvd246IFxcZjEwNztcbiRmYS12YXItYW5nbGUtbGVmdDogXFxmMTA0O1xuJGZhLXZhci1hbmdsZS1yaWdodDogXFxmMTA1O1xuJGZhLXZhci1hbmdsZS11cDogXFxmMTA2O1xuJGZhLXZhci1hbmdyeTogXFxmNTU2O1xuJGZhLXZhci1hbmdyeWNyZWF0aXZlOiBcXGYzNmU7XG4kZmEtdmFyLWFuZ3VsYXI6IFxcZjQyMDtcbiRmYS12YXItYW5raDogXFxmNjQ0O1xuJGZhLXZhci1hcHAtc3RvcmU6IFxcZjM2ZjtcbiRmYS12YXItYXBwLXN0b3JlLWlvczogXFxmMzcwO1xuJGZhLXZhci1hcHBlcjogXFxmMzcxO1xuJGZhLXZhci1hcHBsZTogXFxmMTc5O1xuJGZhLXZhci1hcHBsZS1hbHQ6IFxcZjVkMTtcbiRmYS12YXItYXBwbGUtcGF5OiBcXGY0MTU7XG4kZmEtdmFyLWFyY2hpdmU6IFxcZjE4NztcbiRmYS12YXItYXJjaHdheTogXFxmNTU3O1xuJGZhLXZhci1hcnJvdy1hbHQtY2lyY2xlLWRvd246IFxcZjM1ODtcbiRmYS12YXItYXJyb3ctYWx0LWNpcmNsZS1sZWZ0OiBcXGYzNTk7XG4kZmEtdmFyLWFycm93LWFsdC1jaXJjbGUtcmlnaHQ6IFxcZjM1YTtcbiRmYS12YXItYXJyb3ctYWx0LWNpcmNsZS11cDogXFxmMzViO1xuJGZhLXZhci1hcnJvdy1jaXJjbGUtZG93bjogXFxmMGFiO1xuJGZhLXZhci1hcnJvdy1jaXJjbGUtbGVmdDogXFxmMGE4O1xuJGZhLXZhci1hcnJvdy1jaXJjbGUtcmlnaHQ6IFxcZjBhOTtcbiRmYS12YXItYXJyb3ctY2lyY2xlLXVwOiBcXGYwYWE7XG4kZmEtdmFyLWFycm93LWRvd246IFxcZjA2MztcbiRmYS12YXItYXJyb3ctbGVmdDogXFxmMDYwO1xuJGZhLXZhci1hcnJvdy1yaWdodDogXFxmMDYxO1xuJGZhLXZhci1hcnJvdy11cDogXFxmMDYyO1xuJGZhLXZhci1hcnJvd3MtYWx0OiBcXGYwYjI7XG4kZmEtdmFyLWFycm93cy1hbHQtaDogXFxmMzM3O1xuJGZhLXZhci1hcnJvd3MtYWx0LXY6IFxcZjMzODtcbiRmYS12YXItYXJ0c3RhdGlvbjogXFxmNzdhO1xuJGZhLXZhci1hc3Npc3RpdmUtbGlzdGVuaW5nLXN5c3RlbXM6IFxcZjJhMjtcbiRmYS12YXItYXN0ZXJpc2s6IFxcZjA2OTtcbiRmYS12YXItYXN5bW1ldHJpazogXFxmMzcyO1xuJGZhLXZhci1hdDogXFxmMWZhO1xuJGZhLXZhci1hdGxhczogXFxmNTU4O1xuJGZhLXZhci1hdGxhc3NpYW46IFxcZjc3YjtcbiRmYS12YXItYXRvbTogXFxmNWQyO1xuJGZhLXZhci1hdWRpYmxlOiBcXGYzNzM7XG4kZmEtdmFyLWF1ZGlvLWRlc2NyaXB0aW9uOiBcXGYyOWU7XG4kZmEtdmFyLWF1dG9wcmVmaXhlcjogXFxmNDFjO1xuJGZhLXZhci1hdmlhbmV4OiBcXGYzNzQ7XG4kZmEtdmFyLWF2aWF0bzogXFxmNDIxO1xuJGZhLXZhci1hd2FyZDogXFxmNTU5O1xuJGZhLXZhci1hd3M6IFxcZjM3NTtcbiRmYS12YXItYmFieTogXFxmNzdjO1xuJGZhLXZhci1iYWJ5LWNhcnJpYWdlOiBcXGY3N2Q7XG4kZmEtdmFyLWJhY2tzcGFjZTogXFxmNTVhO1xuJGZhLXZhci1iYWNrd2FyZDogXFxmMDRhO1xuJGZhLXZhci1iYWNvbjogXFxmN2U1O1xuJGZhLXZhci1iYWN0ZXJpYTogXFxlMDU5O1xuJGZhLXZhci1iYWN0ZXJpdW06IFxcZTA1YTtcbiRmYS12YXItYmFoYWk6IFxcZjY2NjtcbiRmYS12YXItYmFsYW5jZS1zY2FsZTogXFxmMjRlO1xuJGZhLXZhci1iYWxhbmNlLXNjYWxlLWxlZnQ6IFxcZjUxNTtcbiRmYS12YXItYmFsYW5jZS1zY2FsZS1yaWdodDogXFxmNTE2O1xuJGZhLXZhci1iYW46IFxcZjA1ZTtcbiRmYS12YXItYmFuZC1haWQ6IFxcZjQ2MjtcbiRmYS12YXItYmFuZGNhbXA6IFxcZjJkNTtcbiRmYS12YXItYmFyY29kZTogXFxmMDJhO1xuJGZhLXZhci1iYXJzOiBcXGYwYzk7XG4kZmEtdmFyLWJhc2ViYWxsLWJhbGw6IFxcZjQzMztcbiRmYS12YXItYmFza2V0YmFsbC1iYWxsOiBcXGY0MzQ7XG4kZmEtdmFyLWJhdGg6IFxcZjJjZDtcbiRmYS12YXItYmF0dGVyeS1lbXB0eTogXFxmMjQ0O1xuJGZhLXZhci1iYXR0ZXJ5LWZ1bGw6IFxcZjI0MDtcbiRmYS12YXItYmF0dGVyeS1oYWxmOiBcXGYyNDI7XG4kZmEtdmFyLWJhdHRlcnktcXVhcnRlcjogXFxmMjQzO1xuJGZhLXZhci1iYXR0ZXJ5LXRocmVlLXF1YXJ0ZXJzOiBcXGYyNDE7XG4kZmEtdmFyLWJhdHRsZS1uZXQ6IFxcZjgzNTtcbiRmYS12YXItYmVkOiBcXGYyMzY7XG4kZmEtdmFyLWJlZXI6IFxcZjBmYztcbiRmYS12YXItYmVoYW5jZTogXFxmMWI0O1xuJGZhLXZhci1iZWhhbmNlLXNxdWFyZTogXFxmMWI1O1xuJGZhLXZhci1iZWxsOiBcXGYwZjM7XG4kZmEtdmFyLWJlbGwtc2xhc2g6IFxcZjFmNjtcbiRmYS12YXItYmV6aWVyLWN1cnZlOiBcXGY1NWI7XG4kZmEtdmFyLWJpYmxlOiBcXGY2NDc7XG4kZmEtdmFyLWJpY3ljbGU6IFxcZjIwNjtcbiRmYS12YXItYmlraW5nOiBcXGY4NGE7XG4kZmEtdmFyLWJpbW9iamVjdDogXFxmMzc4O1xuJGZhLXZhci1iaW5vY3VsYXJzOiBcXGYxZTU7XG4kZmEtdmFyLWJpb2hhemFyZDogXFxmNzgwO1xuJGZhLXZhci1iaXJ0aGRheS1jYWtlOiBcXGYxZmQ7XG4kZmEtdmFyLWJpdGJ1Y2tldDogXFxmMTcxO1xuJGZhLXZhci1iaXRjb2luOiBcXGYzNzk7XG4kZmEtdmFyLWJpdHk6IFxcZjM3YTtcbiRmYS12YXItYmxhY2stdGllOiBcXGYyN2U7XG4kZmEtdmFyLWJsYWNrYmVycnk6IFxcZjM3YjtcbiRmYS12YXItYmxlbmRlcjogXFxmNTE3O1xuJGZhLXZhci1ibGVuZGVyLXBob25lOiBcXGY2YjY7XG4kZmEtdmFyLWJsaW5kOiBcXGYyOWQ7XG4kZmEtdmFyLWJsb2c6IFxcZjc4MTtcbiRmYS12YXItYmxvZ2dlcjogXFxmMzdjO1xuJGZhLXZhci1ibG9nZ2VyLWI6IFxcZjM3ZDtcbiRmYS12YXItYmx1ZXRvb3RoOiBcXGYyOTM7XG4kZmEtdmFyLWJsdWV0b290aC1iOiBcXGYyOTQ7XG4kZmEtdmFyLWJvbGQ6IFxcZjAzMjtcbiRmYS12YXItYm9sdDogXFxmMGU3O1xuJGZhLXZhci1ib21iOiBcXGYxZTI7XG4kZmEtdmFyLWJvbmU6IFxcZjVkNztcbiRmYS12YXItYm9uZzogXFxmNTVjO1xuJGZhLXZhci1ib29rOiBcXGYwMmQ7XG4kZmEtdmFyLWJvb2stZGVhZDogXFxmNmI3O1xuJGZhLXZhci1ib29rLW1lZGljYWw6IFxcZjdlNjtcbiRmYS12YXItYm9vay1vcGVuOiBcXGY1MTg7XG4kZmEtdmFyLWJvb2stcmVhZGVyOiBcXGY1ZGE7XG4kZmEtdmFyLWJvb2ttYXJrOiBcXGYwMmU7XG4kZmEtdmFyLWJvb3RzdHJhcDogXFxmODM2O1xuJGZhLXZhci1ib3JkZXItYWxsOiBcXGY4NGM7XG4kZmEtdmFyLWJvcmRlci1ub25lOiBcXGY4NTA7XG4kZmEtdmFyLWJvcmRlci1zdHlsZTogXFxmODUzO1xuJGZhLXZhci1ib3dsaW5nLWJhbGw6IFxcZjQzNjtcbiRmYS12YXItYm94OiBcXGY0NjY7XG4kZmEtdmFyLWJveC1vcGVuOiBcXGY0OWU7XG4kZmEtdmFyLWJveC10aXNzdWU6IFxcZTA1YjtcbiRmYS12YXItYm94ZXM6IFxcZjQ2ODtcbiRmYS12YXItYnJhaWxsZTogXFxmMmExO1xuJGZhLXZhci1icmFpbjogXFxmNWRjO1xuJGZhLXZhci1icmVhZC1zbGljZTogXFxmN2VjO1xuJGZhLXZhci1icmllZmNhc2U6IFxcZjBiMTtcbiRmYS12YXItYnJpZWZjYXNlLW1lZGljYWw6IFxcZjQ2OTtcbiRmYS12YXItYnJvYWRjYXN0LXRvd2VyOiBcXGY1MTk7XG4kZmEtdmFyLWJyb29tOiBcXGY1MWE7XG4kZmEtdmFyLWJydXNoOiBcXGY1NWQ7XG4kZmEtdmFyLWJ0YzogXFxmMTVhO1xuJGZhLXZhci1idWZmZXI6IFxcZjgzNztcbiRmYS12YXItYnVnOiBcXGYxODg7XG4kZmEtdmFyLWJ1aWxkaW5nOiBcXGYxYWQ7XG4kZmEtdmFyLWJ1bGxob3JuOiBcXGYwYTE7XG4kZmEtdmFyLWJ1bGxzZXllOiBcXGYxNDA7XG4kZmEtdmFyLWJ1cm46IFxcZjQ2YTtcbiRmYS12YXItYnVyb21vYmVsZXhwZXJ0ZTogXFxmMzdmO1xuJGZhLXZhci1idXM6IFxcZjIwNztcbiRmYS12YXItYnVzLWFsdDogXFxmNTVlO1xuJGZhLXZhci1idXNpbmVzcy10aW1lOiBcXGY2NGE7XG4kZmEtdmFyLWJ1eS1uLWxhcmdlOiBcXGY4YTY7XG4kZmEtdmFyLWJ1eXNlbGxhZHM6IFxcZjIwZDtcbiRmYS12YXItY2FsY3VsYXRvcjogXFxmMWVjO1xuJGZhLXZhci1jYWxlbmRhcjogXFxmMTMzO1xuJGZhLXZhci1jYWxlbmRhci1hbHQ6IFxcZjA3MztcbiRmYS12YXItY2FsZW5kYXItY2hlY2s6IFxcZjI3NDtcbiRmYS12YXItY2FsZW5kYXItZGF5OiBcXGY3ODM7XG4kZmEtdmFyLWNhbGVuZGFyLW1pbnVzOiBcXGYyNzI7XG4kZmEtdmFyLWNhbGVuZGFyLXBsdXM6IFxcZjI3MTtcbiRmYS12YXItY2FsZW5kYXItdGltZXM6IFxcZjI3MztcbiRmYS12YXItY2FsZW5kYXItd2VlazogXFxmNzg0O1xuJGZhLXZhci1jYW1lcmE6IFxcZjAzMDtcbiRmYS12YXItY2FtZXJhLXJldHJvOiBcXGYwODM7XG4kZmEtdmFyLWNhbXBncm91bmQ6IFxcZjZiYjtcbiRmYS12YXItY2FuYWRpYW4tbWFwbGUtbGVhZjogXFxmNzg1O1xuJGZhLXZhci1jYW5keS1jYW5lOiBcXGY3ODY7XG4kZmEtdmFyLWNhbm5hYmlzOiBcXGY1NWY7XG4kZmEtdmFyLWNhcHN1bGVzOiBcXGY0NmI7XG4kZmEtdmFyLWNhcjogXFxmMWI5O1xuJGZhLXZhci1jYXItYWx0OiBcXGY1ZGU7XG4kZmEtdmFyLWNhci1iYXR0ZXJ5OiBcXGY1ZGY7XG4kZmEtdmFyLWNhci1jcmFzaDogXFxmNWUxO1xuJGZhLXZhci1jYXItc2lkZTogXFxmNWU0O1xuJGZhLXZhci1jYXJhdmFuOiBcXGY4ZmY7XG4kZmEtdmFyLWNhcmV0LWRvd246IFxcZjBkNztcbiRmYS12YXItY2FyZXQtbGVmdDogXFxmMGQ5O1xuJGZhLXZhci1jYXJldC1yaWdodDogXFxmMGRhO1xuJGZhLXZhci1jYXJldC1zcXVhcmUtZG93bjogXFxmMTUwO1xuJGZhLXZhci1jYXJldC1zcXVhcmUtbGVmdDogXFxmMTkxO1xuJGZhLXZhci1jYXJldC1zcXVhcmUtcmlnaHQ6IFxcZjE1MjtcbiRmYS12YXItY2FyZXQtc3F1YXJlLXVwOiBcXGYxNTE7XG4kZmEtdmFyLWNhcmV0LXVwOiBcXGYwZDg7XG4kZmEtdmFyLWNhcnJvdDogXFxmNzg3O1xuJGZhLXZhci1jYXJ0LWFycm93LWRvd246IFxcZjIxODtcbiRmYS12YXItY2FydC1wbHVzOiBcXGYyMTc7XG4kZmEtdmFyLWNhc2gtcmVnaXN0ZXI6IFxcZjc4ODtcbiRmYS12YXItY2F0OiBcXGY2YmU7XG4kZmEtdmFyLWNjLWFtYXpvbi1wYXk6IFxcZjQyZDtcbiRmYS12YXItY2MtYW1leDogXFxmMWYzO1xuJGZhLXZhci1jYy1hcHBsZS1wYXk6IFxcZjQxNjtcbiRmYS12YXItY2MtZGluZXJzLWNsdWI6IFxcZjI0YztcbiRmYS12YXItY2MtZGlzY292ZXI6IFxcZjFmMjtcbiRmYS12YXItY2MtamNiOiBcXGYyNGI7XG4kZmEtdmFyLWNjLW1hc3RlcmNhcmQ6IFxcZjFmMTtcbiRmYS12YXItY2MtcGF5cGFsOiBcXGYxZjQ7XG4kZmEtdmFyLWNjLXN0cmlwZTogXFxmMWY1O1xuJGZhLXZhci1jYy12aXNhOiBcXGYxZjA7XG4kZmEtdmFyLWNlbnRlcmNvZGU6IFxcZjM4MDtcbiRmYS12YXItY2VudG9zOiBcXGY3ODk7XG4kZmEtdmFyLWNlcnRpZmljYXRlOiBcXGYwYTM7XG4kZmEtdmFyLWNoYWlyOiBcXGY2YzA7XG4kZmEtdmFyLWNoYWxrYm9hcmQ6IFxcZjUxYjtcbiRmYS12YXItY2hhbGtib2FyZC10ZWFjaGVyOiBcXGY1MWM7XG4kZmEtdmFyLWNoYXJnaW5nLXN0YXRpb246IFxcZjVlNztcbiRmYS12YXItY2hhcnQtYXJlYTogXFxmMWZlO1xuJGZhLXZhci1jaGFydC1iYXI6IFxcZjA4MDtcbiRmYS12YXItY2hhcnQtbGluZTogXFxmMjAxO1xuJGZhLXZhci1jaGFydC1waWU6IFxcZjIwMDtcbiRmYS12YXItY2hlY2s6IFxcZjAwYztcbiRmYS12YXItY2hlY2stY2lyY2xlOiBcXGYwNTg7XG4kZmEtdmFyLWNoZWNrLWRvdWJsZTogXFxmNTYwO1xuJGZhLXZhci1jaGVjay1zcXVhcmU6IFxcZjE0YTtcbiRmYS12YXItY2hlZXNlOiBcXGY3ZWY7XG4kZmEtdmFyLWNoZXNzOiBcXGY0Mzk7XG4kZmEtdmFyLWNoZXNzLWJpc2hvcDogXFxmNDNhO1xuJGZhLXZhci1jaGVzcy1ib2FyZDogXFxmNDNjO1xuJGZhLXZhci1jaGVzcy1raW5nOiBcXGY0M2Y7XG4kZmEtdmFyLWNoZXNzLWtuaWdodDogXFxmNDQxO1xuJGZhLXZhci1jaGVzcy1wYXduOiBcXGY0NDM7XG4kZmEtdmFyLWNoZXNzLXF1ZWVuOiBcXGY0NDU7XG4kZmEtdmFyLWNoZXNzLXJvb2s6IFxcZjQ0NztcbiRmYS12YXItY2hldnJvbi1jaXJjbGUtZG93bjogXFxmMTNhO1xuJGZhLXZhci1jaGV2cm9uLWNpcmNsZS1sZWZ0OiBcXGYxMzc7XG4kZmEtdmFyLWNoZXZyb24tY2lyY2xlLXJpZ2h0OiBcXGYxMzg7XG4kZmEtdmFyLWNoZXZyb24tY2lyY2xlLXVwOiBcXGYxMzk7XG4kZmEtdmFyLWNoZXZyb24tZG93bjogXFxmMDc4O1xuJGZhLXZhci1jaGV2cm9uLWxlZnQ6IFxcZjA1MztcbiRmYS12YXItY2hldnJvbi1yaWdodDogXFxmMDU0O1xuJGZhLXZhci1jaGV2cm9uLXVwOiBcXGYwNzc7XG4kZmEtdmFyLWNoaWxkOiBcXGYxYWU7XG4kZmEtdmFyLWNocm9tZTogXFxmMjY4O1xuJGZhLXZhci1jaHJvbWVjYXN0OiBcXGY4Mzg7XG4kZmEtdmFyLWNodXJjaDogXFxmNTFkO1xuJGZhLXZhci1jaXJjbGU6IFxcZjExMTtcbiRmYS12YXItY2lyY2xlLW5vdGNoOiBcXGYxY2U7XG4kZmEtdmFyLWNpdHk6IFxcZjY0ZjtcbiRmYS12YXItY2xpbmljLW1lZGljYWw6IFxcZjdmMjtcbiRmYS12YXItY2xpcGJvYXJkOiBcXGYzMjg7XG4kZmEtdmFyLWNsaXBib2FyZC1jaGVjazogXFxmNDZjO1xuJGZhLXZhci1jbGlwYm9hcmQtbGlzdDogXFxmNDZkO1xuJGZhLXZhci1jbG9jazogXFxmMDE3O1xuJGZhLXZhci1jbG9uZTogXFxmMjRkO1xuJGZhLXZhci1jbG9zZWQtY2FwdGlvbmluZzogXFxmMjBhO1xuJGZhLXZhci1jbG91ZDogXFxmMGMyO1xuJGZhLXZhci1jbG91ZC1kb3dubG9hZC1hbHQ6IFxcZjM4MTtcbiRmYS12YXItY2xvdWQtbWVhdGJhbGw6IFxcZjczYjtcbiRmYS12YXItY2xvdWQtbW9vbjogXFxmNmMzO1xuJGZhLXZhci1jbG91ZC1tb29uLXJhaW46IFxcZjczYztcbiRmYS12YXItY2xvdWQtcmFpbjogXFxmNzNkO1xuJGZhLXZhci1jbG91ZC1zaG93ZXJzLWhlYXZ5OiBcXGY3NDA7XG4kZmEtdmFyLWNsb3VkLXN1bjogXFxmNmM0O1xuJGZhLXZhci1jbG91ZC1zdW4tcmFpbjogXFxmNzQzO1xuJGZhLXZhci1jbG91ZC11cGxvYWQtYWx0OiBcXGYzODI7XG4kZmEtdmFyLWNsb3VkZmxhcmU6IFxcZTA3ZDtcbiRmYS12YXItY2xvdWRzY2FsZTogXFxmMzgzO1xuJGZhLXZhci1jbG91ZHNtaXRoOiBcXGYzODQ7XG4kZmEtdmFyLWNsb3VkdmVyc2lmeTogXFxmMzg1O1xuJGZhLXZhci1jb2NrdGFpbDogXFxmNTYxO1xuJGZhLXZhci1jb2RlOiBcXGYxMjE7XG4kZmEtdmFyLWNvZGUtYnJhbmNoOiBcXGYxMjY7XG4kZmEtdmFyLWNvZGVwZW46IFxcZjFjYjtcbiRmYS12YXItY29kaWVwaWU6IFxcZjI4NDtcbiRmYS12YXItY29mZmVlOiBcXGYwZjQ7XG4kZmEtdmFyLWNvZzogXFxmMDEzO1xuJGZhLXZhci1jb2dzOiBcXGYwODU7XG4kZmEtdmFyLWNvaW5zOiBcXGY1MWU7XG4kZmEtdmFyLWNvbHVtbnM6IFxcZjBkYjtcbiRmYS12YXItY29tbWVudDogXFxmMDc1O1xuJGZhLXZhci1jb21tZW50LWFsdDogXFxmMjdhO1xuJGZhLXZhci1jb21tZW50LWRvbGxhcjogXFxmNjUxO1xuJGZhLXZhci1jb21tZW50LWRvdHM6IFxcZjRhZDtcbiRmYS12YXItY29tbWVudC1tZWRpY2FsOiBcXGY3ZjU7XG4kZmEtdmFyLWNvbW1lbnQtc2xhc2g6IFxcZjRiMztcbiRmYS12YXItY29tbWVudHM6IFxcZjA4NjtcbiRmYS12YXItY29tbWVudHMtZG9sbGFyOiBcXGY2NTM7XG4kZmEtdmFyLWNvbXBhY3QtZGlzYzogXFxmNTFmO1xuJGZhLXZhci1jb21wYXNzOiBcXGYxNGU7XG4kZmEtdmFyLWNvbXByZXNzOiBcXGYwNjY7XG4kZmEtdmFyLWNvbXByZXNzLWFsdDogXFxmNDIyO1xuJGZhLXZhci1jb21wcmVzcy1hcnJvd3MtYWx0OiBcXGY3OGM7XG4kZmEtdmFyLWNvbmNpZXJnZS1iZWxsOiBcXGY1NjI7XG4kZmEtdmFyLWNvbmZsdWVuY2U6IFxcZjc4ZDtcbiRmYS12YXItY29ubmVjdGRldmVsb3A6IFxcZjIwZTtcbiRmYS12YXItY29udGFvOiBcXGYyNmQ7XG4kZmEtdmFyLWNvb2tpZTogXFxmNTYzO1xuJGZhLXZhci1jb29raWUtYml0ZTogXFxmNTY0O1xuJGZhLXZhci1jb3B5OiBcXGYwYzU7XG4kZmEtdmFyLWNvcHlyaWdodDogXFxmMWY5O1xuJGZhLXZhci1jb3R0b24tYnVyZWF1OiBcXGY4OWU7XG4kZmEtdmFyLWNvdWNoOiBcXGY0Yjg7XG4kZmEtdmFyLWNwYW5lbDogXFxmMzg4O1xuJGZhLXZhci1jcmVhdGl2ZS1jb21tb25zOiBcXGYyNWU7XG4kZmEtdmFyLWNyZWF0aXZlLWNvbW1vbnMtYnk6IFxcZjRlNztcbiRmYS12YXItY3JlYXRpdmUtY29tbW9ucy1uYzogXFxmNGU4O1xuJGZhLXZhci1jcmVhdGl2ZS1jb21tb25zLW5jLWV1OiBcXGY0ZTk7XG4kZmEtdmFyLWNyZWF0aXZlLWNvbW1vbnMtbmMtanA6IFxcZjRlYTtcbiRmYS12YXItY3JlYXRpdmUtY29tbW9ucy1uZDogXFxmNGViO1xuJGZhLXZhci1jcmVhdGl2ZS1jb21tb25zLXBkOiBcXGY0ZWM7XG4kZmEtdmFyLWNyZWF0aXZlLWNvbW1vbnMtcGQtYWx0OiBcXGY0ZWQ7XG4kZmEtdmFyLWNyZWF0aXZlLWNvbW1vbnMtcmVtaXg6IFxcZjRlZTtcbiRmYS12YXItY3JlYXRpdmUtY29tbW9ucy1zYTogXFxmNGVmO1xuJGZhLXZhci1jcmVhdGl2ZS1jb21tb25zLXNhbXBsaW5nOiBcXGY0ZjA7XG4kZmEtdmFyLWNyZWF0aXZlLWNvbW1vbnMtc2FtcGxpbmctcGx1czogXFxmNGYxO1xuJGZhLXZhci1jcmVhdGl2ZS1jb21tb25zLXNoYXJlOiBcXGY0ZjI7XG4kZmEtdmFyLWNyZWF0aXZlLWNvbW1vbnMtemVybzogXFxmNGYzO1xuJGZhLXZhci1jcmVkaXQtY2FyZDogXFxmMDlkO1xuJGZhLXZhci1jcml0aWNhbC1yb2xlOiBcXGY2Yzk7XG4kZmEtdmFyLWNyb3A6IFxcZjEyNTtcbiRmYS12YXItY3JvcC1hbHQ6IFxcZjU2NTtcbiRmYS12YXItY3Jvc3M6IFxcZjY1NDtcbiRmYS12YXItY3Jvc3NoYWlyczogXFxmMDViO1xuJGZhLXZhci1jcm93OiBcXGY1MjA7XG4kZmEtdmFyLWNyb3duOiBcXGY1MjE7XG4kZmEtdmFyLWNydXRjaDogXFxmN2Y3O1xuJGZhLXZhci1jc3MzOiBcXGYxM2M7XG4kZmEtdmFyLWNzczMtYWx0OiBcXGYzOGI7XG4kZmEtdmFyLWN1YmU6IFxcZjFiMjtcbiRmYS12YXItY3ViZXM6IFxcZjFiMztcbiRmYS12YXItY3V0OiBcXGYwYzQ7XG4kZmEtdmFyLWN1dHRsZWZpc2g6IFxcZjM4YztcbiRmYS12YXItZC1hbmQtZDogXFxmMzhkO1xuJGZhLXZhci1kLWFuZC1kLWJleW9uZDogXFxmNmNhO1xuJGZhLXZhci1kYWlseW1vdGlvbjogXFxlMDUyO1xuJGZhLXZhci1kYXNoY3ViZTogXFxmMjEwO1xuJGZhLXZhci1kYXRhYmFzZTogXFxmMWMwO1xuJGZhLXZhci1kZWFmOiBcXGYyYTQ7XG4kZmEtdmFyLWRlZXplcjogXFxlMDc3O1xuJGZhLXZhci1kZWxpY2lvdXM6IFxcZjFhNTtcbiRmYS12YXItZGVtb2NyYXQ6IFxcZjc0NztcbiRmYS12YXItZGVwbG95ZG9nOiBcXGYzOGU7XG4kZmEtdmFyLWRlc2twcm86IFxcZjM4ZjtcbiRmYS12YXItZGVza3RvcDogXFxmMTA4O1xuJGZhLXZhci1kZXY6IFxcZjZjYztcbiRmYS12YXItZGV2aWFudGFydDogXFxmMWJkO1xuJGZhLXZhci1kaGFybWFjaGFrcmE6IFxcZjY1NTtcbiRmYS12YXItZGhsOiBcXGY3OTA7XG4kZmEtdmFyLWRpYWdub3NlczogXFxmNDcwO1xuJGZhLXZhci1kaWFzcG9yYTogXFxmNzkxO1xuJGZhLXZhci1kaWNlOiBcXGY1MjI7XG4kZmEtdmFyLWRpY2UtZDIwOiBcXGY2Y2Y7XG4kZmEtdmFyLWRpY2UtZDY6IFxcZjZkMTtcbiRmYS12YXItZGljZS1maXZlOiBcXGY1MjM7XG4kZmEtdmFyLWRpY2UtZm91cjogXFxmNTI0O1xuJGZhLXZhci1kaWNlLW9uZTogXFxmNTI1O1xuJGZhLXZhci1kaWNlLXNpeDogXFxmNTI2O1xuJGZhLXZhci1kaWNlLXRocmVlOiBcXGY1Mjc7XG4kZmEtdmFyLWRpY2UtdHdvOiBcXGY1Mjg7XG4kZmEtdmFyLWRpZ2c6IFxcZjFhNjtcbiRmYS12YXItZGlnaXRhbC1vY2VhbjogXFxmMzkxO1xuJGZhLXZhci1kaWdpdGFsLXRhY2hvZ3JhcGg6IFxcZjU2NjtcbiRmYS12YXItZGlyZWN0aW9uczogXFxmNWViO1xuJGZhLXZhci1kaXNjb3JkOiBcXGYzOTI7XG4kZmEtdmFyLWRpc2NvdXJzZTogXFxmMzkzO1xuJGZhLXZhci1kaXNlYXNlOiBcXGY3ZmE7XG4kZmEtdmFyLWRpdmlkZTogXFxmNTI5O1xuJGZhLXZhci1kaXp6eTogXFxmNTY3O1xuJGZhLXZhci1kbmE6IFxcZjQ3MTtcbiRmYS12YXItZG9jaHViOiBcXGYzOTQ7XG4kZmEtdmFyLWRvY2tlcjogXFxmMzk1O1xuJGZhLXZhci1kb2c6IFxcZjZkMztcbiRmYS12YXItZG9sbGFyLXNpZ246IFxcZjE1NTtcbiRmYS12YXItZG9sbHk6IFxcZjQ3MjtcbiRmYS12YXItZG9sbHktZmxhdGJlZDogXFxmNDc0O1xuJGZhLXZhci1kb25hdGU6IFxcZjRiOTtcbiRmYS12YXItZG9vci1jbG9zZWQ6IFxcZjUyYTtcbiRmYS12YXItZG9vci1vcGVuOiBcXGY1MmI7XG4kZmEtdmFyLWRvdC1jaXJjbGU6IFxcZjE5MjtcbiRmYS12YXItZG92ZTogXFxmNGJhO1xuJGZhLXZhci1kb3dubG9hZDogXFxmMDE5O1xuJGZhLXZhci1kcmFmdDJkaWdpdGFsOiBcXGYzOTY7XG4kZmEtdmFyLWRyYWZ0aW5nLWNvbXBhc3M6IFxcZjU2ODtcbiRmYS12YXItZHJhZ29uOiBcXGY2ZDU7XG4kZmEtdmFyLWRyYXctcG9seWdvbjogXFxmNWVlO1xuJGZhLXZhci1kcmliYmJsZTogXFxmMTdkO1xuJGZhLXZhci1kcmliYmJsZS1zcXVhcmU6IFxcZjM5NztcbiRmYS12YXItZHJvcGJveDogXFxmMTZiO1xuJGZhLXZhci1kcnVtOiBcXGY1Njk7XG4kZmEtdmFyLWRydW0tc3RlZWxwYW46IFxcZjU2YTtcbiRmYS12YXItZHJ1bXN0aWNrLWJpdGU6IFxcZjZkNztcbiRmYS12YXItZHJ1cGFsOiBcXGYxYTk7XG4kZmEtdmFyLWR1bWJiZWxsOiBcXGY0NGI7XG4kZmEtdmFyLWR1bXBzdGVyOiBcXGY3OTM7XG4kZmEtdmFyLWR1bXBzdGVyLWZpcmU6IFxcZjc5NDtcbiRmYS12YXItZHVuZ2VvbjogXFxmNmQ5O1xuJGZhLXZhci1keWFsb2c6IFxcZjM5OTtcbiRmYS12YXItZWFybHliaXJkczogXFxmMzlhO1xuJGZhLXZhci1lYmF5OiBcXGY0ZjQ7XG4kZmEtdmFyLWVkZ2U6IFxcZjI4MjtcbiRmYS12YXItZWRnZS1sZWdhY3k6IFxcZTA3ODtcbiRmYS12YXItZWRpdDogXFxmMDQ0O1xuJGZhLXZhci1lZ2c6IFxcZjdmYjtcbiRmYS12YXItZWplY3Q6IFxcZjA1MjtcbiRmYS12YXItZWxlbWVudG9yOiBcXGY0MzA7XG4kZmEtdmFyLWVsbGlwc2lzLWg6IFxcZjE0MTtcbiRmYS12YXItZWxsaXBzaXMtdjogXFxmMTQyO1xuJGZhLXZhci1lbGxvOiBcXGY1ZjE7XG4kZmEtdmFyLWVtYmVyOiBcXGY0MjM7XG4kZmEtdmFyLWVtcGlyZTogXFxmMWQxO1xuJGZhLXZhci1lbnZlbG9wZTogXFxmMGUwO1xuJGZhLXZhci1lbnZlbG9wZS1vcGVuOiBcXGYyYjY7XG4kZmEtdmFyLWVudmVsb3BlLW9wZW4tdGV4dDogXFxmNjU4O1xuJGZhLXZhci1lbnZlbG9wZS1zcXVhcmU6IFxcZjE5OTtcbiRmYS12YXItZW52aXJhOiBcXGYyOTk7XG4kZmEtdmFyLWVxdWFsczogXFxmNTJjO1xuJGZhLXZhci1lcmFzZXI6IFxcZjEyZDtcbiRmYS12YXItZXJsYW5nOiBcXGYzOWQ7XG4kZmEtdmFyLWV0aGVyZXVtOiBcXGY0MmU7XG4kZmEtdmFyLWV0aGVybmV0OiBcXGY3OTY7XG4kZmEtdmFyLWV0c3k6IFxcZjJkNztcbiRmYS12YXItZXVyby1zaWduOiBcXGYxNTM7XG4kZmEtdmFyLWV2ZXJub3RlOiBcXGY4Mzk7XG4kZmEtdmFyLWV4Y2hhbmdlLWFsdDogXFxmMzYyO1xuJGZhLXZhci1leGNsYW1hdGlvbjogXFxmMTJhO1xuJGZhLXZhci1leGNsYW1hdGlvbi1jaXJjbGU6IFxcZjA2YTtcbiRmYS12YXItZXhjbGFtYXRpb24tdHJpYW5nbGU6IFxcZjA3MTtcbiRmYS12YXItZXhwYW5kOiBcXGYwNjU7XG4kZmEtdmFyLWV4cGFuZC1hbHQ6IFxcZjQyNDtcbiRmYS12YXItZXhwYW5kLWFycm93cy1hbHQ6IFxcZjMxZTtcbiRmYS12YXItZXhwZWRpdGVkc3NsOiBcXGYyM2U7XG4kZmEtdmFyLWV4dGVybmFsLWxpbmstYWx0OiBcXGYzNWQ7XG4kZmEtdmFyLWV4dGVybmFsLWxpbmstc3F1YXJlLWFsdDogXFxmMzYwO1xuJGZhLXZhci1leWU6IFxcZjA2ZTtcbiRmYS12YXItZXllLWRyb3BwZXI6IFxcZjFmYjtcbiRmYS12YXItZXllLXNsYXNoOiBcXGYwNzA7XG4kZmEtdmFyLWZhY2Vib29rOiBcXGYwOWE7XG4kZmEtdmFyLWZhY2Vib29rLWY6IFxcZjM5ZTtcbiRmYS12YXItZmFjZWJvb2stbWVzc2VuZ2VyOiBcXGYzOWY7XG4kZmEtdmFyLWZhY2Vib29rLXNxdWFyZTogXFxmMDgyO1xuJGZhLXZhci1mYW46IFxcZjg2MztcbiRmYS12YXItZmFudGFzeS1mbGlnaHQtZ2FtZXM6IFxcZjZkYztcbiRmYS12YXItZmFzdC1iYWNrd2FyZDogXFxmMDQ5O1xuJGZhLXZhci1mYXN0LWZvcndhcmQ6IFxcZjA1MDtcbiRmYS12YXItZmF1Y2V0OiBcXGUwMDU7XG4kZmEtdmFyLWZheDogXFxmMWFjO1xuJGZhLXZhci1mZWF0aGVyOiBcXGY1MmQ7XG4kZmEtdmFyLWZlYXRoZXItYWx0OiBcXGY1NmI7XG4kZmEtdmFyLWZlZGV4OiBcXGY3OTc7XG4kZmEtdmFyLWZlZG9yYTogXFxmNzk4O1xuJGZhLXZhci1mZW1hbGU6IFxcZjE4MjtcbiRmYS12YXItZmlnaHRlci1qZXQ6IFxcZjBmYjtcbiRmYS12YXItZmlnbWE6IFxcZjc5OTtcbiRmYS12YXItZmlsZTogXFxmMTViO1xuJGZhLXZhci1maWxlLWFsdDogXFxmMTVjO1xuJGZhLXZhci1maWxlLWFyY2hpdmU6IFxcZjFjNjtcbiRmYS12YXItZmlsZS1hdWRpbzogXFxmMWM3O1xuJGZhLXZhci1maWxlLWNvZGU6IFxcZjFjOTtcbiRmYS12YXItZmlsZS1jb250cmFjdDogXFxmNTZjO1xuJGZhLXZhci1maWxlLWNzdjogXFxmNmRkO1xuJGZhLXZhci1maWxlLWRvd25sb2FkOiBcXGY1NmQ7XG4kZmEtdmFyLWZpbGUtZXhjZWw6IFxcZjFjMztcbiRmYS12YXItZmlsZS1leHBvcnQ6IFxcZjU2ZTtcbiRmYS12YXItZmlsZS1pbWFnZTogXFxmMWM1O1xuJGZhLXZhci1maWxlLWltcG9ydDogXFxmNTZmO1xuJGZhLXZhci1maWxlLWludm9pY2U6IFxcZjU3MDtcbiRmYS12YXItZmlsZS1pbnZvaWNlLWRvbGxhcjogXFxmNTcxO1xuJGZhLXZhci1maWxlLW1lZGljYWw6IFxcZjQ3NztcbiRmYS12YXItZmlsZS1tZWRpY2FsLWFsdDogXFxmNDc4O1xuJGZhLXZhci1maWxlLXBkZjogXFxmMWMxO1xuJGZhLXZhci1maWxlLXBvd2VycG9pbnQ6IFxcZjFjNDtcbiRmYS12YXItZmlsZS1wcmVzY3JpcHRpb246IFxcZjU3MjtcbiRmYS12YXItZmlsZS1zaWduYXR1cmU6IFxcZjU3MztcbiRmYS12YXItZmlsZS11cGxvYWQ6IFxcZjU3NDtcbiRmYS12YXItZmlsZS12aWRlbzogXFxmMWM4O1xuJGZhLXZhci1maWxlLXdvcmQ6IFxcZjFjMjtcbiRmYS12YXItZmlsbDogXFxmNTc1O1xuJGZhLXZhci1maWxsLWRyaXA6IFxcZjU3NjtcbiRmYS12YXItZmlsbTogXFxmMDA4O1xuJGZhLXZhci1maWx0ZXI6IFxcZjBiMDtcbiRmYS12YXItZmluZ2VycHJpbnQ6IFxcZjU3NztcbiRmYS12YXItZmlyZTogXFxmMDZkO1xuJGZhLXZhci1maXJlLWFsdDogXFxmN2U0O1xuJGZhLXZhci1maXJlLWV4dGluZ3Vpc2hlcjogXFxmMTM0O1xuJGZhLXZhci1maXJlZm94OiBcXGYyNjk7XG4kZmEtdmFyLWZpcmVmb3gtYnJvd3NlcjogXFxlMDA3O1xuJGZhLXZhci1maXJzdC1haWQ6IFxcZjQ3OTtcbiRmYS12YXItZmlyc3Qtb3JkZXI6IFxcZjJiMDtcbiRmYS12YXItZmlyc3Qtb3JkZXItYWx0OiBcXGY1MGE7XG4kZmEtdmFyLWZpcnN0ZHJhZnQ6IFxcZjNhMTtcbiRmYS12YXItZmlzaDogXFxmNTc4O1xuJGZhLXZhci1maXN0LXJhaXNlZDogXFxmNmRlO1xuJGZhLXZhci1mbGFnOiBcXGYwMjQ7XG4kZmEtdmFyLWZsYWctY2hlY2tlcmVkOiBcXGYxMWU7XG4kZmEtdmFyLWZsYWctdXNhOiBcXGY3NGQ7XG4kZmEtdmFyLWZsYXNrOiBcXGYwYzM7XG4kZmEtdmFyLWZsaWNrcjogXFxmMTZlO1xuJGZhLXZhci1mbGlwYm9hcmQ6IFxcZjQ0ZDtcbiRmYS12YXItZmx1c2hlZDogXFxmNTc5O1xuJGZhLXZhci1mbHk6IFxcZjQxNztcbiRmYS12YXItZm9sZGVyOiBcXGYwN2I7XG4kZmEtdmFyLWZvbGRlci1taW51czogXFxmNjVkO1xuJGZhLXZhci1mb2xkZXItb3BlbjogXFxmMDdjO1xuJGZhLXZhci1mb2xkZXItcGx1czogXFxmNjVlO1xuJGZhLXZhci1mb250OiBcXGYwMzE7XG4kZmEtdmFyLWZvbnQtYXdlc29tZTogXFxmMmI0O1xuJGZhLXZhci1mb250LWF3ZXNvbWUtYWx0OiBcXGYzNWM7XG4kZmEtdmFyLWZvbnQtYXdlc29tZS1mbGFnOiBcXGY0MjU7XG4kZmEtdmFyLWZvbnQtYXdlc29tZS1sb2dvLWZ1bGw6IFxcZjRlNjtcbiRmYS12YXItZm9udGljb25zOiBcXGYyODA7XG4kZmEtdmFyLWZvbnRpY29ucy1maTogXFxmM2EyO1xuJGZhLXZhci1mb290YmFsbC1iYWxsOiBcXGY0NGU7XG4kZmEtdmFyLWZvcnQtYXdlc29tZTogXFxmMjg2O1xuJGZhLXZhci1mb3J0LWF3ZXNvbWUtYWx0OiBcXGYzYTM7XG4kZmEtdmFyLWZvcnVtYmVlOiBcXGYyMTE7XG4kZmEtdmFyLWZvcndhcmQ6IFxcZjA0ZTtcbiRmYS12YXItZm91cnNxdWFyZTogXFxmMTgwO1xuJGZhLXZhci1mcmVlLWNvZGUtY2FtcDogXFxmMmM1O1xuJGZhLXZhci1mcmVlYnNkOiBcXGYzYTQ7XG4kZmEtdmFyLWZyb2c6IFxcZjUyZTtcbiRmYS12YXItZnJvd246IFxcZjExOTtcbiRmYS12YXItZnJvd24tb3BlbjogXFxmNTdhO1xuJGZhLXZhci1mdWxjcnVtOiBcXGY1MGI7XG4kZmEtdmFyLWZ1bm5lbC1kb2xsYXI6IFxcZjY2MjtcbiRmYS12YXItZnV0Ym9sOiBcXGYxZTM7XG4kZmEtdmFyLWdhbGFjdGljLXJlcHVibGljOiBcXGY1MGM7XG4kZmEtdmFyLWdhbGFjdGljLXNlbmF0ZTogXFxmNTBkO1xuJGZhLXZhci1nYW1lcGFkOiBcXGYxMWI7XG4kZmEtdmFyLWdhcy1wdW1wOiBcXGY1MmY7XG4kZmEtdmFyLWdhdmVsOiBcXGYwZTM7XG4kZmEtdmFyLWdlbTogXFxmM2E1O1xuJGZhLXZhci1nZW5kZXJsZXNzOiBcXGYyMmQ7XG4kZmEtdmFyLWdldC1wb2NrZXQ6IFxcZjI2NTtcbiRmYS12YXItZ2c6IFxcZjI2MDtcbiRmYS12YXItZ2ctY2lyY2xlOiBcXGYyNjE7XG4kZmEtdmFyLWdob3N0OiBcXGY2ZTI7XG4kZmEtdmFyLWdpZnQ6IFxcZjA2YjtcbiRmYS12YXItZ2lmdHM6IFxcZjc5YztcbiRmYS12YXItZ2l0OiBcXGYxZDM7XG4kZmEtdmFyLWdpdC1hbHQ6IFxcZjg0MTtcbiRmYS12YXItZ2l0LXNxdWFyZTogXFxmMWQyO1xuJGZhLXZhci1naXRodWI6IFxcZjA5YjtcbiRmYS12YXItZ2l0aHViLWFsdDogXFxmMTEzO1xuJGZhLXZhci1naXRodWItc3F1YXJlOiBcXGYwOTI7XG4kZmEtdmFyLWdpdGtyYWtlbjogXFxmM2E2O1xuJGZhLXZhci1naXRsYWI6IFxcZjI5NjtcbiRmYS12YXItZ2l0dGVyOiBcXGY0MjY7XG4kZmEtdmFyLWdsYXNzLWNoZWVyczogXFxmNzlmO1xuJGZhLXZhci1nbGFzcy1tYXJ0aW5pOiBcXGYwMDA7XG4kZmEtdmFyLWdsYXNzLW1hcnRpbmktYWx0OiBcXGY1N2I7XG4kZmEtdmFyLWdsYXNzLXdoaXNrZXk6IFxcZjdhMDtcbiRmYS12YXItZ2xhc3NlczogXFxmNTMwO1xuJGZhLXZhci1nbGlkZTogXFxmMmE1O1xuJGZhLXZhci1nbGlkZS1nOiBcXGYyYTY7XG4kZmEtdmFyLWdsb2JlOiBcXGYwYWM7XG4kZmEtdmFyLWdsb2JlLWFmcmljYTogXFxmNTdjO1xuJGZhLXZhci1nbG9iZS1hbWVyaWNhczogXFxmNTdkO1xuJGZhLXZhci1nbG9iZS1hc2lhOiBcXGY1N2U7XG4kZmEtdmFyLWdsb2JlLWV1cm9wZTogXFxmN2EyO1xuJGZhLXZhci1nb2ZvcmU6IFxcZjNhNztcbiRmYS12YXItZ29sZi1iYWxsOiBcXGY0NTA7XG4kZmEtdmFyLWdvb2RyZWFkczogXFxmM2E4O1xuJGZhLXZhci1nb29kcmVhZHMtZzogXFxmM2E5O1xuJGZhLXZhci1nb29nbGU6IFxcZjFhMDtcbiRmYS12YXItZ29vZ2xlLWRyaXZlOiBcXGYzYWE7XG4kZmEtdmFyLWdvb2dsZS1wYXk6IFxcZTA3OTtcbiRmYS12YXItZ29vZ2xlLXBsYXk6IFxcZjNhYjtcbiRmYS12YXItZ29vZ2xlLXBsdXM6IFxcZjJiMztcbiRmYS12YXItZ29vZ2xlLXBsdXMtZzogXFxmMGQ1O1xuJGZhLXZhci1nb29nbGUtcGx1cy1zcXVhcmU6IFxcZjBkNDtcbiRmYS12YXItZ29vZ2xlLXdhbGxldDogXFxmMWVlO1xuJGZhLXZhci1nb3B1cmFtOiBcXGY2NjQ7XG4kZmEtdmFyLWdyYWR1YXRpb24tY2FwOiBcXGYxOWQ7XG4kZmEtdmFyLWdyYXRpcGF5OiBcXGYxODQ7XG4kZmEtdmFyLWdyYXY6IFxcZjJkNjtcbiRmYS12YXItZ3JlYXRlci10aGFuOiBcXGY1MzE7XG4kZmEtdmFyLWdyZWF0ZXItdGhhbi1lcXVhbDogXFxmNTMyO1xuJGZhLXZhci1ncmltYWNlOiBcXGY1N2Y7XG4kZmEtdmFyLWdyaW46IFxcZjU4MDtcbiRmYS12YXItZ3Jpbi1hbHQ6IFxcZjU4MTtcbiRmYS12YXItZ3Jpbi1iZWFtOiBcXGY1ODI7XG4kZmEtdmFyLWdyaW4tYmVhbS1zd2VhdDogXFxmNTgzO1xuJGZhLXZhci1ncmluLWhlYXJ0czogXFxmNTg0O1xuJGZhLXZhci1ncmluLXNxdWludDogXFxmNTg1O1xuJGZhLXZhci1ncmluLXNxdWludC10ZWFyczogXFxmNTg2O1xuJGZhLXZhci1ncmluLXN0YXJzOiBcXGY1ODc7XG4kZmEtdmFyLWdyaW4tdGVhcnM6IFxcZjU4ODtcbiRmYS12YXItZ3Jpbi10b25ndWU6IFxcZjU4OTtcbiRmYS12YXItZ3Jpbi10b25ndWUtc3F1aW50OiBcXGY1OGE7XG4kZmEtdmFyLWdyaW4tdG9uZ3VlLXdpbms6IFxcZjU4YjtcbiRmYS12YXItZ3Jpbi13aW5rOiBcXGY1OGM7XG4kZmEtdmFyLWdyaXAtaG9yaXpvbnRhbDogXFxmNThkO1xuJGZhLXZhci1ncmlwLWxpbmVzOiBcXGY3YTQ7XG4kZmEtdmFyLWdyaXAtbGluZXMtdmVydGljYWw6IFxcZjdhNTtcbiRmYS12YXItZ3JpcC12ZXJ0aWNhbDogXFxmNThlO1xuJGZhLXZhci1ncmlwZmlyZTogXFxmM2FjO1xuJGZhLXZhci1ncnVudDogXFxmM2FkO1xuJGZhLXZhci1ndWlsZGVkOiBcXGUwN2U7XG4kZmEtdmFyLWd1aXRhcjogXFxmN2E2O1xuJGZhLXZhci1ndWxwOiBcXGYzYWU7XG4kZmEtdmFyLWgtc3F1YXJlOiBcXGYwZmQ7XG4kZmEtdmFyLWhhY2tlci1uZXdzOiBcXGYxZDQ7XG4kZmEtdmFyLWhhY2tlci1uZXdzLXNxdWFyZTogXFxmM2FmO1xuJGZhLXZhci1oYWNrZXJyYW5rOiBcXGY1Zjc7XG4kZmEtdmFyLWhhbWJ1cmdlcjogXFxmODA1O1xuJGZhLXZhci1oYW1tZXI6IFxcZjZlMztcbiRmYS12YXItaGFtc2E6IFxcZjY2NTtcbiRmYS12YXItaGFuZC1ob2xkaW5nOiBcXGY0YmQ7XG4kZmEtdmFyLWhhbmQtaG9sZGluZy1oZWFydDogXFxmNGJlO1xuJGZhLXZhci1oYW5kLWhvbGRpbmctbWVkaWNhbDogXFxlMDVjO1xuJGZhLXZhci1oYW5kLWhvbGRpbmctdXNkOiBcXGY0YzA7XG4kZmEtdmFyLWhhbmQtaG9sZGluZy13YXRlcjogXFxmNGMxO1xuJGZhLXZhci1oYW5kLWxpemFyZDogXFxmMjU4O1xuJGZhLXZhci1oYW5kLW1pZGRsZS1maW5nZXI6IFxcZjgwNjtcbiRmYS12YXItaGFuZC1wYXBlcjogXFxmMjU2O1xuJGZhLXZhci1oYW5kLXBlYWNlOiBcXGYyNWI7XG4kZmEtdmFyLWhhbmQtcG9pbnQtZG93bjogXFxmMGE3O1xuJGZhLXZhci1oYW5kLXBvaW50LWxlZnQ6IFxcZjBhNTtcbiRmYS12YXItaGFuZC1wb2ludC1yaWdodDogXFxmMGE0O1xuJGZhLXZhci1oYW5kLXBvaW50LXVwOiBcXGYwYTY7XG4kZmEtdmFyLWhhbmQtcG9pbnRlcjogXFxmMjVhO1xuJGZhLXZhci1oYW5kLXJvY2s6IFxcZjI1NTtcbiRmYS12YXItaGFuZC1zY2lzc29yczogXFxmMjU3O1xuJGZhLXZhci1oYW5kLXNwYXJrbGVzOiBcXGUwNWQ7XG4kZmEtdmFyLWhhbmQtc3BvY2s6IFxcZjI1OTtcbiRmYS12YXItaGFuZHM6IFxcZjRjMjtcbiRmYS12YXItaGFuZHMtaGVscGluZzogXFxmNGM0O1xuJGZhLXZhci1oYW5kcy13YXNoOiBcXGUwNWU7XG4kZmEtdmFyLWhhbmRzaGFrZTogXFxmMmI1O1xuJGZhLXZhci1oYW5kc2hha2UtYWx0LXNsYXNoOiBcXGUwNWY7XG4kZmEtdmFyLWhhbmRzaGFrZS1zbGFzaDogXFxlMDYwO1xuJGZhLXZhci1oYW51a2lhaDogXFxmNmU2O1xuJGZhLXZhci1oYXJkLWhhdDogXFxmODA3O1xuJGZhLXZhci1oYXNodGFnOiBcXGYyOTI7XG4kZmEtdmFyLWhhdC1jb3dib3k6IFxcZjhjMDtcbiRmYS12YXItaGF0LWNvd2JveS1zaWRlOiBcXGY4YzE7XG4kZmEtdmFyLWhhdC13aXphcmQ6IFxcZjZlODtcbiRmYS12YXItaGRkOiBcXGYwYTA7XG4kZmEtdmFyLWhlYWQtc2lkZS1jb3VnaDogXFxlMDYxO1xuJGZhLXZhci1oZWFkLXNpZGUtY291Z2gtc2xhc2g6IFxcZTA2MjtcbiRmYS12YXItaGVhZC1zaWRlLW1hc2s6IFxcZTA2MztcbiRmYS12YXItaGVhZC1zaWRlLXZpcnVzOiBcXGUwNjQ7XG4kZmEtdmFyLWhlYWRpbmc6IFxcZjFkYztcbiRmYS12YXItaGVhZHBob25lczogXFxmMDI1O1xuJGZhLXZhci1oZWFkcGhvbmVzLWFsdDogXFxmNThmO1xuJGZhLXZhci1oZWFkc2V0OiBcXGY1OTA7XG4kZmEtdmFyLWhlYXJ0OiBcXGYwMDQ7XG4kZmEtdmFyLWhlYXJ0LWJyb2tlbjogXFxmN2E5O1xuJGZhLXZhci1oZWFydGJlYXQ6IFxcZjIxZTtcbiRmYS12YXItaGVsaWNvcHRlcjogXFxmNTMzO1xuJGZhLXZhci1oaWdobGlnaHRlcjogXFxmNTkxO1xuJGZhLXZhci1oaWtpbmc6IFxcZjZlYztcbiRmYS12YXItaGlwcG86IFxcZjZlZDtcbiRmYS12YXItaGlwczogXFxmNDUyO1xuJGZhLXZhci1oaXJlLWEtaGVscGVyOiBcXGYzYjA7XG4kZmEtdmFyLWhpc3Rvcnk6IFxcZjFkYTtcbiRmYS12YXItaGl2ZTogXFxlMDdmO1xuJGZhLXZhci1ob2NrZXktcHVjazogXFxmNDUzO1xuJGZhLXZhci1ob2xseS1iZXJyeTogXFxmN2FhO1xuJGZhLXZhci1ob21lOiBcXGYwMTU7XG4kZmEtdmFyLWhvb2xpOiBcXGY0Mjc7XG4kZmEtdmFyLWhvcm5iaWxsOiBcXGY1OTI7XG4kZmEtdmFyLWhvcnNlOiBcXGY2ZjA7XG4kZmEtdmFyLWhvcnNlLWhlYWQ6IFxcZjdhYjtcbiRmYS12YXItaG9zcGl0YWw6IFxcZjBmODtcbiRmYS12YXItaG9zcGl0YWwtYWx0OiBcXGY0N2Q7XG4kZmEtdmFyLWhvc3BpdGFsLXN5bWJvbDogXFxmNDdlO1xuJGZhLXZhci1ob3NwaXRhbC11c2VyOiBcXGY4MGQ7XG4kZmEtdmFyLWhvdC10dWI6IFxcZjU5MztcbiRmYS12YXItaG90ZG9nOiBcXGY4MGY7XG4kZmEtdmFyLWhvdGVsOiBcXGY1OTQ7XG4kZmEtdmFyLWhvdGphcjogXFxmM2IxO1xuJGZhLXZhci1ob3VyZ2xhc3M6IFxcZjI1NDtcbiRmYS12YXItaG91cmdsYXNzLWVuZDogXFxmMjUzO1xuJGZhLXZhci1ob3VyZ2xhc3MtaGFsZjogXFxmMjUyO1xuJGZhLXZhci1ob3VyZ2xhc3Mtc3RhcnQ6IFxcZjI1MTtcbiRmYS12YXItaG91c2UtZGFtYWdlOiBcXGY2ZjE7XG4kZmEtdmFyLWhvdXNlLXVzZXI6IFxcZTA2NTtcbiRmYS12YXItaG91eno6IFxcZjI3YztcbiRmYS12YXItaHJ5dm5pYTogXFxmNmYyO1xuJGZhLXZhci1odG1sNTogXFxmMTNiO1xuJGZhLXZhci1odWJzcG90OiBcXGYzYjI7XG4kZmEtdmFyLWktY3Vyc29yOiBcXGYyNDY7XG4kZmEtdmFyLWljZS1jcmVhbTogXFxmODEwO1xuJGZhLXZhci1pY2ljbGVzOiBcXGY3YWQ7XG4kZmEtdmFyLWljb25zOiBcXGY4NmQ7XG4kZmEtdmFyLWlkLWJhZGdlOiBcXGYyYzE7XG4kZmEtdmFyLWlkLWNhcmQ6IFxcZjJjMjtcbiRmYS12YXItaWQtY2FyZC1hbHQ6IFxcZjQ3ZjtcbiRmYS12YXItaWRlYWw6IFxcZTAxMztcbiRmYS12YXItaWdsb286IFxcZjdhZTtcbiRmYS12YXItaW1hZ2U6IFxcZjAzZTtcbiRmYS12YXItaW1hZ2VzOiBcXGYzMDI7XG4kZmEtdmFyLWltZGI6IFxcZjJkODtcbiRmYS12YXItaW5ib3g6IFxcZjAxYztcbiRmYS12YXItaW5kZW50OiBcXGYwM2M7XG4kZmEtdmFyLWluZHVzdHJ5OiBcXGYyNzU7XG4kZmEtdmFyLWluZmluaXR5OiBcXGY1MzQ7XG4kZmEtdmFyLWluZm86IFxcZjEyOTtcbiRmYS12YXItaW5mby1jaXJjbGU6IFxcZjA1YTtcbiRmYS12YXItaW5ub3NvZnQ6IFxcZTA4MDtcbiRmYS12YXItaW5zdGFncmFtOiBcXGYxNmQ7XG4kZmEtdmFyLWluc3RhZ3JhbS1zcXVhcmU6IFxcZTA1NTtcbiRmYS12YXItaW5zdGFsb2Q6IFxcZTA4MTtcbiRmYS12YXItaW50ZXJjb206IFxcZjdhZjtcbiRmYS12YXItaW50ZXJuZXQtZXhwbG9yZXI6IFxcZjI2YjtcbiRmYS12YXItaW52aXNpb246IFxcZjdiMDtcbiRmYS12YXItaW94aG9zdDogXFxmMjA4O1xuJGZhLXZhci1pdGFsaWM6IFxcZjAzMztcbiRmYS12YXItaXRjaC1pbzogXFxmODNhO1xuJGZhLXZhci1pdHVuZXM6IFxcZjNiNDtcbiRmYS12YXItaXR1bmVzLW5vdGU6IFxcZjNiNTtcbiRmYS12YXItamF2YTogXFxmNGU0O1xuJGZhLXZhci1qZWRpOiBcXGY2Njk7XG4kZmEtdmFyLWplZGktb3JkZXI6IFxcZjUwZTtcbiRmYS12YXItamVua2luczogXFxmM2I2O1xuJGZhLXZhci1qaXJhOiBcXGY3YjE7XG4kZmEtdmFyLWpvZ2V0OiBcXGYzYjc7XG4kZmEtdmFyLWpvaW50OiBcXGY1OTU7XG4kZmEtdmFyLWpvb21sYTogXFxmMWFhO1xuJGZhLXZhci1qb3VybmFsLXdoaWxsczogXFxmNjZhO1xuJGZhLXZhci1qczogXFxmM2I4O1xuJGZhLXZhci1qcy1zcXVhcmU6IFxcZjNiOTtcbiRmYS12YXItanNmaWRkbGU6IFxcZjFjYztcbiRmYS12YXIta2FhYmE6IFxcZjY2YjtcbiRmYS12YXIta2FnZ2xlOiBcXGY1ZmE7XG4kZmEtdmFyLWtleTogXFxmMDg0O1xuJGZhLXZhci1rZXliYXNlOiBcXGY0ZjU7XG4kZmEtdmFyLWtleWJvYXJkOiBcXGYxMWM7XG4kZmEtdmFyLWtleWNkbjogXFxmM2JhO1xuJGZhLXZhci1raGFuZGE6IFxcZjY2ZDtcbiRmYS12YXIta2lja3N0YXJ0ZXI6IFxcZjNiYjtcbiRmYS12YXIta2lja3N0YXJ0ZXItazogXFxmM2JjO1xuJGZhLXZhci1raXNzOiBcXGY1OTY7XG4kZmEtdmFyLWtpc3MtYmVhbTogXFxmNTk3O1xuJGZhLXZhci1raXNzLXdpbmstaGVhcnQ6IFxcZjU5ODtcbiRmYS12YXIta2l3aS1iaXJkOiBcXGY1MzU7XG4kZmEtdmFyLWtvcnZ1ZTogXFxmNDJmO1xuJGZhLXZhci1sYW5kbWFyazogXFxmNjZmO1xuJGZhLXZhci1sYW5ndWFnZTogXFxmMWFiO1xuJGZhLXZhci1sYXB0b3A6IFxcZjEwOTtcbiRmYS12YXItbGFwdG9wLWNvZGU6IFxcZjVmYztcbiRmYS12YXItbGFwdG9wLWhvdXNlOiBcXGUwNjY7XG4kZmEtdmFyLWxhcHRvcC1tZWRpY2FsOiBcXGY4MTI7XG4kZmEtdmFyLWxhcmF2ZWw6IFxcZjNiZDtcbiRmYS12YXItbGFzdGZtOiBcXGYyMDI7XG4kZmEtdmFyLWxhc3RmbS1zcXVhcmU6IFxcZjIwMztcbiRmYS12YXItbGF1Z2g6IFxcZjU5OTtcbiRmYS12YXItbGF1Z2gtYmVhbTogXFxmNTlhO1xuJGZhLXZhci1sYXVnaC1zcXVpbnQ6IFxcZjU5YjtcbiRmYS12YXItbGF1Z2gtd2luazogXFxmNTljO1xuJGZhLXZhci1sYXllci1ncm91cDogXFxmNWZkO1xuJGZhLXZhci1sZWFmOiBcXGYwNmM7XG4kZmEtdmFyLWxlYW5wdWI6IFxcZjIxMjtcbiRmYS12YXItbGVtb246IFxcZjA5NDtcbiRmYS12YXItbGVzczogXFxmNDFkO1xuJGZhLXZhci1sZXNzLXRoYW46IFxcZjUzNjtcbiRmYS12YXItbGVzcy10aGFuLWVxdWFsOiBcXGY1Mzc7XG4kZmEtdmFyLWxldmVsLWRvd24tYWx0OiBcXGYzYmU7XG4kZmEtdmFyLWxldmVsLXVwLWFsdDogXFxmM2JmO1xuJGZhLXZhci1saWZlLXJpbmc6IFxcZjFjZDtcbiRmYS12YXItbGlnaHRidWxiOiBcXGYwZWI7XG4kZmEtdmFyLWxpbmU6IFxcZjNjMDtcbiRmYS12YXItbGluazogXFxmMGMxO1xuJGZhLXZhci1saW5rZWRpbjogXFxmMDhjO1xuJGZhLXZhci1saW5rZWRpbi1pbjogXFxmMGUxO1xuJGZhLXZhci1saW5vZGU6IFxcZjJiODtcbiRmYS12YXItbGludXg6IFxcZjE3YztcbiRmYS12YXItbGlyYS1zaWduOiBcXGYxOTU7XG4kZmEtdmFyLWxpc3Q6IFxcZjAzYTtcbiRmYS12YXItbGlzdC1hbHQ6IFxcZjAyMjtcbiRmYS12YXItbGlzdC1vbDogXFxmMGNiO1xuJGZhLXZhci1saXN0LXVsOiBcXGYwY2E7XG4kZmEtdmFyLWxvY2F0aW9uLWFycm93OiBcXGYxMjQ7XG4kZmEtdmFyLWxvY2s6IFxcZjAyMztcbiRmYS12YXItbG9jay1vcGVuOiBcXGYzYzE7XG4kZmEtdmFyLWxvbmctYXJyb3ctYWx0LWRvd246IFxcZjMwOTtcbiRmYS12YXItbG9uZy1hcnJvdy1hbHQtbGVmdDogXFxmMzBhO1xuJGZhLXZhci1sb25nLWFycm93LWFsdC1yaWdodDogXFxmMzBiO1xuJGZhLXZhci1sb25nLWFycm93LWFsdC11cDogXFxmMzBjO1xuJGZhLXZhci1sb3ctdmlzaW9uOiBcXGYyYTg7XG4kZmEtdmFyLWx1Z2dhZ2UtY2FydDogXFxmNTlkO1xuJGZhLXZhci1sdW5nczogXFxmNjA0O1xuJGZhLXZhci1sdW5ncy12aXJ1czogXFxlMDY3O1xuJGZhLXZhci1seWZ0OiBcXGYzYzM7XG4kZmEtdmFyLW1hZ2VudG86IFxcZjNjNDtcbiRmYS12YXItbWFnaWM6IFxcZjBkMDtcbiRmYS12YXItbWFnbmV0OiBcXGYwNzY7XG4kZmEtdmFyLW1haWwtYnVsazogXFxmNjc0O1xuJGZhLXZhci1tYWlsY2hpbXA6IFxcZjU5ZTtcbiRmYS12YXItbWFsZTogXFxmMTgzO1xuJGZhLXZhci1tYW5kYWxvcmlhbjogXFxmNTBmO1xuJGZhLXZhci1tYXA6IFxcZjI3OTtcbiRmYS12YXItbWFwLW1hcmtlZDogXFxmNTlmO1xuJGZhLXZhci1tYXAtbWFya2VkLWFsdDogXFxmNWEwO1xuJGZhLXZhci1tYXAtbWFya2VyOiBcXGYwNDE7XG4kZmEtdmFyLW1hcC1tYXJrZXItYWx0OiBcXGYzYzU7XG4kZmEtdmFyLW1hcC1waW46IFxcZjI3NjtcbiRmYS12YXItbWFwLXNpZ25zOiBcXGYyNzc7XG4kZmEtdmFyLW1hcmtkb3duOiBcXGY2MGY7XG4kZmEtdmFyLW1hcmtlcjogXFxmNWExO1xuJGZhLXZhci1tYXJzOiBcXGYyMjI7XG4kZmEtdmFyLW1hcnMtZG91YmxlOiBcXGYyMjc7XG4kZmEtdmFyLW1hcnMtc3Ryb2tlOiBcXGYyMjk7XG4kZmEtdmFyLW1hcnMtc3Ryb2tlLWg6IFxcZjIyYjtcbiRmYS12YXItbWFycy1zdHJva2UtdjogXFxmMjJhO1xuJGZhLXZhci1tYXNrOiBcXGY2ZmE7XG4kZmEtdmFyLW1hc3RvZG9uOiBcXGY0ZjY7XG4kZmEtdmFyLW1heGNkbjogXFxmMTM2O1xuJGZhLXZhci1tZGI6IFxcZjhjYTtcbiRmYS12YXItbWVkYWw6IFxcZjVhMjtcbiRmYS12YXItbWVkYXBwczogXFxmM2M2O1xuJGZhLXZhci1tZWRpdW06IFxcZjIzYTtcbiRmYS12YXItbWVkaXVtLW06IFxcZjNjNztcbiRmYS12YXItbWVka2l0OiBcXGYwZmE7XG4kZmEtdmFyLW1lZHJ0OiBcXGYzYzg7XG4kZmEtdmFyLW1lZXR1cDogXFxmMmUwO1xuJGZhLXZhci1tZWdhcG9ydDogXFxmNWEzO1xuJGZhLXZhci1tZWg6IFxcZjExYTtcbiRmYS12YXItbWVoLWJsYW5rOiBcXGY1YTQ7XG4kZmEtdmFyLW1laC1yb2xsaW5nLWV5ZXM6IFxcZjVhNTtcbiRmYS12YXItbWVtb3J5OiBcXGY1Mzg7XG4kZmEtdmFyLW1lbmRlbGV5OiBcXGY3YjM7XG4kZmEtdmFyLW1lbm9yYWg6IFxcZjY3NjtcbiRmYS12YXItbWVyY3VyeTogXFxmMjIzO1xuJGZhLXZhci1tZXRlb3I6IFxcZjc1MztcbiRmYS12YXItbWljcm9ibG9nOiBcXGUwMWE7XG4kZmEtdmFyLW1pY3JvY2hpcDogXFxmMmRiO1xuJGZhLXZhci1taWNyb3Bob25lOiBcXGYxMzA7XG4kZmEtdmFyLW1pY3JvcGhvbmUtYWx0OiBcXGYzYzk7XG4kZmEtdmFyLW1pY3JvcGhvbmUtYWx0LXNsYXNoOiBcXGY1Mzk7XG4kZmEtdmFyLW1pY3JvcGhvbmUtc2xhc2g6IFxcZjEzMTtcbiRmYS12YXItbWljcm9zY29wZTogXFxmNjEwO1xuJGZhLXZhci1taWNyb3NvZnQ6IFxcZjNjYTtcbiRmYS12YXItbWludXM6IFxcZjA2ODtcbiRmYS12YXItbWludXMtY2lyY2xlOiBcXGYwNTY7XG4kZmEtdmFyLW1pbnVzLXNxdWFyZTogXFxmMTQ2O1xuJGZhLXZhci1taXR0ZW46IFxcZjdiNTtcbiRmYS12YXItbWl4OiBcXGYzY2I7XG4kZmEtdmFyLW1peGNsb3VkOiBcXGYyODk7XG4kZmEtdmFyLW1peGVyOiBcXGUwNTY7XG4kZmEtdmFyLW1penVuaTogXFxmM2NjO1xuJGZhLXZhci1tb2JpbGU6IFxcZjEwYjtcbiRmYS12YXItbW9iaWxlLWFsdDogXFxmM2NkO1xuJGZhLXZhci1tb2R4OiBcXGYyODU7XG4kZmEtdmFyLW1vbmVybzogXFxmM2QwO1xuJGZhLXZhci1tb25leS1iaWxsOiBcXGYwZDY7XG4kZmEtdmFyLW1vbmV5LWJpbGwtYWx0OiBcXGYzZDE7XG4kZmEtdmFyLW1vbmV5LWJpbGwtd2F2ZTogXFxmNTNhO1xuJGZhLXZhci1tb25leS1iaWxsLXdhdmUtYWx0OiBcXGY1M2I7XG4kZmEtdmFyLW1vbmV5LWNoZWNrOiBcXGY1M2M7XG4kZmEtdmFyLW1vbmV5LWNoZWNrLWFsdDogXFxmNTNkO1xuJGZhLXZhci1tb251bWVudDogXFxmNWE2O1xuJGZhLXZhci1tb29uOiBcXGYxODY7XG4kZmEtdmFyLW1vcnRhci1wZXN0bGU6IFxcZjVhNztcbiRmYS12YXItbW9zcXVlOiBcXGY2Nzg7XG4kZmEtdmFyLW1vdG9yY3ljbGU6IFxcZjIxYztcbiRmYS12YXItbW91bnRhaW46IFxcZjZmYztcbiRmYS12YXItbW91c2U6IFxcZjhjYztcbiRmYS12YXItbW91c2UtcG9pbnRlcjogXFxmMjQ1O1xuJGZhLXZhci1tdWctaG90OiBcXGY3YjY7XG4kZmEtdmFyLW11c2ljOiBcXGYwMDE7XG4kZmEtdmFyLW5hcHN0ZXI6IFxcZjNkMjtcbiRmYS12YXItbmVvczogXFxmNjEyO1xuJGZhLXZhci1uZXR3b3JrLXdpcmVkOiBcXGY2ZmY7XG4kZmEtdmFyLW5ldXRlcjogXFxmMjJjO1xuJGZhLXZhci1uZXdzcGFwZXI6IFxcZjFlYTtcbiRmYS12YXItbmltYmxyOiBcXGY1YTg7XG4kZmEtdmFyLW5vZGU6IFxcZjQxOTtcbiRmYS12YXItbm9kZS1qczogXFxmM2QzO1xuJGZhLXZhci1ub3QtZXF1YWw6IFxcZjUzZTtcbiRmYS12YXItbm90ZXMtbWVkaWNhbDogXFxmNDgxO1xuJGZhLXZhci1ucG06IFxcZjNkNDtcbiRmYS12YXItbnM4OiBcXGYzZDU7XG4kZmEtdmFyLW51dHJpdGlvbml4OiBcXGYzZDY7XG4kZmEtdmFyLW9iamVjdC1ncm91cDogXFxmMjQ3O1xuJGZhLXZhci1vYmplY3QtdW5ncm91cDogXFxmMjQ4O1xuJGZhLXZhci1vY3RvcHVzLWRlcGxveTogXFxlMDgyO1xuJGZhLXZhci1vZG5va2xhc3NuaWtpOiBcXGYyNjM7XG4kZmEtdmFyLW9kbm9rbGFzc25pa2ktc3F1YXJlOiBcXGYyNjQ7XG4kZmEtdmFyLW9pbC1jYW46IFxcZjYxMztcbiRmYS12YXItb2xkLXJlcHVibGljOiBcXGY1MTA7XG4kZmEtdmFyLW9tOiBcXGY2Nzk7XG4kZmEtdmFyLW9wZW5jYXJ0OiBcXGYyM2Q7XG4kZmEtdmFyLW9wZW5pZDogXFxmMTliO1xuJGZhLXZhci1vcGVyYTogXFxmMjZhO1xuJGZhLXZhci1vcHRpbi1tb25zdGVyOiBcXGYyM2M7XG4kZmEtdmFyLW9yY2lkOiBcXGY4ZDI7XG4kZmEtdmFyLW9zaTogXFxmNDFhO1xuJGZhLXZhci1vdHRlcjogXFxmNzAwO1xuJGZhLXZhci1vdXRkZW50OiBcXGYwM2I7XG4kZmEtdmFyLXBhZ2U0OiBcXGYzZDc7XG4kZmEtdmFyLXBhZ2VsaW5lczogXFxmMThjO1xuJGZhLXZhci1wYWdlcjogXFxmODE1O1xuJGZhLXZhci1wYWludC1icnVzaDogXFxmMWZjO1xuJGZhLXZhci1wYWludC1yb2xsZXI6IFxcZjVhYTtcbiRmYS12YXItcGFsZXR0ZTogXFxmNTNmO1xuJGZhLXZhci1wYWxmZWQ6IFxcZjNkODtcbiRmYS12YXItcGFsbGV0OiBcXGY0ODI7XG4kZmEtdmFyLXBhcGVyLXBsYW5lOiBcXGYxZDg7XG4kZmEtdmFyLXBhcGVyY2xpcDogXFxmMGM2O1xuJGZhLXZhci1wYXJhY2h1dGUtYm94OiBcXGY0Y2Q7XG4kZmEtdmFyLXBhcmFncmFwaDogXFxmMWRkO1xuJGZhLXZhci1wYXJraW5nOiBcXGY1NDA7XG4kZmEtdmFyLXBhc3Nwb3J0OiBcXGY1YWI7XG4kZmEtdmFyLXBhc3RhZmFyaWFuaXNtOiBcXGY2N2I7XG4kZmEtdmFyLXBhc3RlOiBcXGYwZWE7XG4kZmEtdmFyLXBhdHJlb246IFxcZjNkOTtcbiRmYS12YXItcGF1c2U6IFxcZjA0YztcbiRmYS12YXItcGF1c2UtY2lyY2xlOiBcXGYyOGI7XG4kZmEtdmFyLXBhdzogXFxmMWIwO1xuJGZhLXZhci1wYXlwYWw6IFxcZjFlZDtcbiRmYS12YXItcGVhY2U6IFxcZjY3YztcbiRmYS12YXItcGVuOiBcXGYzMDQ7XG4kZmEtdmFyLXBlbi1hbHQ6IFxcZjMwNTtcbiRmYS12YXItcGVuLWZhbmN5OiBcXGY1YWM7XG4kZmEtdmFyLXBlbi1uaWI6IFxcZjVhZDtcbiRmYS12YXItcGVuLXNxdWFyZTogXFxmMTRiO1xuJGZhLXZhci1wZW5jaWwtYWx0OiBcXGYzMDM7XG4kZmEtdmFyLXBlbmNpbC1ydWxlcjogXFxmNWFlO1xuJGZhLXZhci1wZW5ueS1hcmNhZGU6IFxcZjcwNDtcbiRmYS12YXItcGVvcGxlLWFycm93czogXFxlMDY4O1xuJGZhLXZhci1wZW9wbGUtY2Fycnk6IFxcZjRjZTtcbiRmYS12YXItcGVwcGVyLWhvdDogXFxmODE2O1xuJGZhLXZhci1wZXJieXRlOiBcXGUwODM7XG4kZmEtdmFyLXBlcmNlbnQ6IFxcZjI5NTtcbiRmYS12YXItcGVyY2VudGFnZTogXFxmNTQxO1xuJGZhLXZhci1wZXJpc2NvcGU6IFxcZjNkYTtcbiRmYS12YXItcGVyc29uLWJvb3RoOiBcXGY3NTY7XG4kZmEtdmFyLXBoYWJyaWNhdG9yOiBcXGYzZGI7XG4kZmEtdmFyLXBob2VuaXgtZnJhbWV3b3JrOiBcXGYzZGM7XG4kZmEtdmFyLXBob2VuaXgtc3F1YWRyb246IFxcZjUxMTtcbiRmYS12YXItcGhvbmU6IFxcZjA5NTtcbiRmYS12YXItcGhvbmUtYWx0OiBcXGY4Nzk7XG4kZmEtdmFyLXBob25lLXNsYXNoOiBcXGYzZGQ7XG4kZmEtdmFyLXBob25lLXNxdWFyZTogXFxmMDk4O1xuJGZhLXZhci1waG9uZS1zcXVhcmUtYWx0OiBcXGY4N2I7XG4kZmEtdmFyLXBob25lLXZvbHVtZTogXFxmMmEwO1xuJGZhLXZhci1waG90by12aWRlbzogXFxmODdjO1xuJGZhLXZhci1waHA6IFxcZjQ1NztcbiRmYS12YXItcGllZC1waXBlcjogXFxmMmFlO1xuJGZhLXZhci1waWVkLXBpcGVyLWFsdDogXFxmMWE4O1xuJGZhLXZhci1waWVkLXBpcGVyLWhhdDogXFxmNGU1O1xuJGZhLXZhci1waWVkLXBpcGVyLXBwOiBcXGYxYTc7XG4kZmEtdmFyLXBpZWQtcGlwZXItc3F1YXJlOiBcXGUwMWU7XG4kZmEtdmFyLXBpZ2d5LWJhbms6IFxcZjRkMztcbiRmYS12YXItcGlsbHM6IFxcZjQ4NDtcbiRmYS12YXItcGludGVyZXN0OiBcXGYwZDI7XG4kZmEtdmFyLXBpbnRlcmVzdC1wOiBcXGYyMzE7XG4kZmEtdmFyLXBpbnRlcmVzdC1zcXVhcmU6IFxcZjBkMztcbiRmYS12YXItcGl6emEtc2xpY2U6IFxcZjgxODtcbiRmYS12YXItcGxhY2Utb2Ytd29yc2hpcDogXFxmNjdmO1xuJGZhLXZhci1wbGFuZTogXFxmMDcyO1xuJGZhLXZhci1wbGFuZS1hcnJpdmFsOiBcXGY1YWY7XG4kZmEtdmFyLXBsYW5lLWRlcGFydHVyZTogXFxmNWIwO1xuJGZhLXZhci1wbGFuZS1zbGFzaDogXFxlMDY5O1xuJGZhLXZhci1wbGF5OiBcXGYwNGI7XG4kZmEtdmFyLXBsYXktY2lyY2xlOiBcXGYxNDQ7XG4kZmEtdmFyLXBsYXlzdGF0aW9uOiBcXGYzZGY7XG4kZmEtdmFyLXBsdWc6IFxcZjFlNjtcbiRmYS12YXItcGx1czogXFxmMDY3O1xuJGZhLXZhci1wbHVzLWNpcmNsZTogXFxmMDU1O1xuJGZhLXZhci1wbHVzLXNxdWFyZTogXFxmMGZlO1xuJGZhLXZhci1wb2RjYXN0OiBcXGYyY2U7XG4kZmEtdmFyLXBvbGw6IFxcZjY4MTtcbiRmYS12YXItcG9sbC1oOiBcXGY2ODI7XG4kZmEtdmFyLXBvbzogXFxmMmZlO1xuJGZhLXZhci1wb28tc3Rvcm06IFxcZjc1YTtcbiRmYS12YXItcG9vcDogXFxmNjE5O1xuJGZhLXZhci1wb3J0cmFpdDogXFxmM2UwO1xuJGZhLXZhci1wb3VuZC1zaWduOiBcXGYxNTQ7XG4kZmEtdmFyLXBvd2VyLW9mZjogXFxmMDExO1xuJGZhLXZhci1wcmF5OiBcXGY2ODM7XG4kZmEtdmFyLXByYXlpbmctaGFuZHM6IFxcZjY4NDtcbiRmYS12YXItcHJlc2NyaXB0aW9uOiBcXGY1YjE7XG4kZmEtdmFyLXByZXNjcmlwdGlvbi1ib3R0bGU6IFxcZjQ4NTtcbiRmYS12YXItcHJlc2NyaXB0aW9uLWJvdHRsZS1hbHQ6IFxcZjQ4NjtcbiRmYS12YXItcHJpbnQ6IFxcZjAyZjtcbiRmYS12YXItcHJvY2VkdXJlczogXFxmNDg3O1xuJGZhLXZhci1wcm9kdWN0LWh1bnQ6IFxcZjI4ODtcbiRmYS12YXItcHJvamVjdC1kaWFncmFtOiBcXGY1NDI7XG4kZmEtdmFyLXB1bXAtbWVkaWNhbDogXFxlMDZhO1xuJGZhLXZhci1wdW1wLXNvYXA6IFxcZTA2YjtcbiRmYS12YXItcHVzaGVkOiBcXGYzZTE7XG4kZmEtdmFyLXB1enpsZS1waWVjZTogXFxmMTJlO1xuJGZhLXZhci1weXRob246IFxcZjNlMjtcbiRmYS12YXItcXE6IFxcZjFkNjtcbiRmYS12YXItcXJjb2RlOiBcXGYwMjk7XG4kZmEtdmFyLXF1ZXN0aW9uOiBcXGYxMjg7XG4kZmEtdmFyLXF1ZXN0aW9uLWNpcmNsZTogXFxmMDU5O1xuJGZhLXZhci1xdWlkZGl0Y2g6IFxcZjQ1ODtcbiRmYS12YXItcXVpbnNjYXBlOiBcXGY0NTk7XG4kZmEtdmFyLXF1b3JhOiBcXGYyYzQ7XG4kZmEtdmFyLXF1b3RlLWxlZnQ6IFxcZjEwZDtcbiRmYS12YXItcXVvdGUtcmlnaHQ6IFxcZjEwZTtcbiRmYS12YXItcXVyYW46IFxcZjY4NztcbiRmYS12YXItci1wcm9qZWN0OiBcXGY0Zjc7XG4kZmEtdmFyLXJhZGlhdGlvbjogXFxmN2I5O1xuJGZhLXZhci1yYWRpYXRpb24tYWx0OiBcXGY3YmE7XG4kZmEtdmFyLXJhaW5ib3c6IFxcZjc1YjtcbiRmYS12YXItcmFuZG9tOiBcXGYwNzQ7XG4kZmEtdmFyLXJhc3BiZXJyeS1waTogXFxmN2JiO1xuJGZhLXZhci1yYXZlbHJ5OiBcXGYyZDk7XG4kZmEtdmFyLXJlYWN0OiBcXGY0MWI7XG4kZmEtdmFyLXJlYWN0ZXVyb3BlOiBcXGY3NWQ7XG4kZmEtdmFyLXJlYWRtZTogXFxmNGQ1O1xuJGZhLXZhci1yZWJlbDogXFxmMWQwO1xuJGZhLXZhci1yZWNlaXB0OiBcXGY1NDM7XG4kZmEtdmFyLXJlY29yZC12aW55bDogXFxmOGQ5O1xuJGZhLXZhci1yZWN5Y2xlOiBcXGYxYjg7XG4kZmEtdmFyLXJlZC1yaXZlcjogXFxmM2UzO1xuJGZhLXZhci1yZWRkaXQ6IFxcZjFhMTtcbiRmYS12YXItcmVkZGl0LWFsaWVuOiBcXGYyODE7XG4kZmEtdmFyLXJlZGRpdC1zcXVhcmU6IFxcZjFhMjtcbiRmYS12YXItcmVkaGF0OiBcXGY3YmM7XG4kZmEtdmFyLXJlZG86IFxcZjAxZTtcbiRmYS12YXItcmVkby1hbHQ6IFxcZjJmOTtcbiRmYS12YXItcmVnaXN0ZXJlZDogXFxmMjVkO1xuJGZhLXZhci1yZW1vdmUtZm9ybWF0OiBcXGY4N2Q7XG4kZmEtdmFyLXJlbnJlbjogXFxmMThiO1xuJGZhLXZhci1yZXBseTogXFxmM2U1O1xuJGZhLXZhci1yZXBseS1hbGw6IFxcZjEyMjtcbiRmYS12YXItcmVwbHlkOiBcXGYzZTY7XG4kZmEtdmFyLXJlcHVibGljYW46IFxcZjc1ZTtcbiRmYS12YXItcmVzZWFyY2hnYXRlOiBcXGY0Zjg7XG4kZmEtdmFyLXJlc29sdmluZzogXFxmM2U3O1xuJGZhLXZhci1yZXN0cm9vbTogXFxmN2JkO1xuJGZhLXZhci1yZXR3ZWV0OiBcXGYwNzk7XG4kZmEtdmFyLXJldjogXFxmNWIyO1xuJGZhLXZhci1yaWJib246IFxcZjRkNjtcbiRmYS12YXItcmluZzogXFxmNzBiO1xuJGZhLXZhci1yb2FkOiBcXGYwMTg7XG4kZmEtdmFyLXJvYm90OiBcXGY1NDQ7XG4kZmEtdmFyLXJvY2tldDogXFxmMTM1O1xuJGZhLXZhci1yb2NrZXRjaGF0OiBcXGYzZTg7XG4kZmEtdmFyLXJvY2tybXM6IFxcZjNlOTtcbiRmYS12YXItcm91dGU6IFxcZjRkNztcbiRmYS12YXItcnNzOiBcXGYwOWU7XG4kZmEtdmFyLXJzcy1zcXVhcmU6IFxcZjE0MztcbiRmYS12YXItcnVibGUtc2lnbjogXFxmMTU4O1xuJGZhLXZhci1ydWxlcjogXFxmNTQ1O1xuJGZhLXZhci1ydWxlci1jb21iaW5lZDogXFxmNTQ2O1xuJGZhLXZhci1ydWxlci1ob3Jpem9udGFsOiBcXGY1NDc7XG4kZmEtdmFyLXJ1bGVyLXZlcnRpY2FsOiBcXGY1NDg7XG4kZmEtdmFyLXJ1bm5pbmc6IFxcZjcwYztcbiRmYS12YXItcnVwZWUtc2lnbjogXFxmMTU2O1xuJGZhLXZhci1ydXN0OiBcXGUwN2E7XG4kZmEtdmFyLXNhZC1jcnk6IFxcZjViMztcbiRmYS12YXItc2FkLXRlYXI6IFxcZjViNDtcbiRmYS12YXItc2FmYXJpOiBcXGYyNjc7XG4kZmEtdmFyLXNhbGVzZm9yY2U6IFxcZjgzYjtcbiRmYS12YXItc2FzczogXFxmNDFlO1xuJGZhLXZhci1zYXRlbGxpdGU6IFxcZjdiZjtcbiRmYS12YXItc2F0ZWxsaXRlLWRpc2g6IFxcZjdjMDtcbiRmYS12YXItc2F2ZTogXFxmMGM3O1xuJGZhLXZhci1zY2hsaXg6IFxcZjNlYTtcbiRmYS12YXItc2Nob29sOiBcXGY1NDk7XG4kZmEtdmFyLXNjcmV3ZHJpdmVyOiBcXGY1NGE7XG4kZmEtdmFyLXNjcmliZDogXFxmMjhhO1xuJGZhLXZhci1zY3JvbGw6IFxcZjcwZTtcbiRmYS12YXItc2QtY2FyZDogXFxmN2MyO1xuJGZhLXZhci1zZWFyY2g6IFxcZjAwMjtcbiRmYS12YXItc2VhcmNoLWRvbGxhcjogXFxmNjg4O1xuJGZhLXZhci1zZWFyY2gtbG9jYXRpb246IFxcZjY4OTtcbiRmYS12YXItc2VhcmNoLW1pbnVzOiBcXGYwMTA7XG4kZmEtdmFyLXNlYXJjaC1wbHVzOiBcXGYwMGU7XG4kZmEtdmFyLXNlYXJjaGVuZ2luOiBcXGYzZWI7XG4kZmEtdmFyLXNlZWRsaW5nOiBcXGY0ZDg7XG4kZmEtdmFyLXNlbGxjYXN0OiBcXGYyZGE7XG4kZmEtdmFyLXNlbGxzeTogXFxmMjEzO1xuJGZhLXZhci1zZXJ2ZXI6IFxcZjIzMztcbiRmYS12YXItc2VydmljZXN0YWNrOiBcXGYzZWM7XG4kZmEtdmFyLXNoYXBlczogXFxmNjFmO1xuJGZhLXZhci1zaGFyZTogXFxmMDY0O1xuJGZhLXZhci1zaGFyZS1hbHQ6IFxcZjFlMDtcbiRmYS12YXItc2hhcmUtYWx0LXNxdWFyZTogXFxmMWUxO1xuJGZhLXZhci1zaGFyZS1zcXVhcmU6IFxcZjE0ZDtcbiRmYS12YXItc2hla2VsLXNpZ246IFxcZjIwYjtcbiRmYS12YXItc2hpZWxkLWFsdDogXFxmM2VkO1xuJGZhLXZhci1zaGllbGQtdmlydXM6IFxcZTA2YztcbiRmYS12YXItc2hpcDogXFxmMjFhO1xuJGZhLXZhci1zaGlwcGluZy1mYXN0OiBcXGY0OGI7XG4kZmEtdmFyLXNoaXJ0c2luYnVsazogXFxmMjE0O1xuJGZhLXZhci1zaG9lLXByaW50czogXFxmNTRiO1xuJGZhLXZhci1zaG9waWZ5OiBcXGUwNTc7XG4kZmEtdmFyLXNob3BwaW5nLWJhZzogXFxmMjkwO1xuJGZhLXZhci1zaG9wcGluZy1iYXNrZXQ6IFxcZjI5MTtcbiRmYS12YXItc2hvcHBpbmctY2FydDogXFxmMDdhO1xuJGZhLXZhci1zaG9wd2FyZTogXFxmNWI1O1xuJGZhLXZhci1zaG93ZXI6IFxcZjJjYztcbiRmYS12YXItc2h1dHRsZS12YW46IFxcZjViNjtcbiRmYS12YXItc2lnbjogXFxmNGQ5O1xuJGZhLXZhci1zaWduLWluLWFsdDogXFxmMmY2O1xuJGZhLXZhci1zaWduLWxhbmd1YWdlOiBcXGYyYTc7XG4kZmEtdmFyLXNpZ24tb3V0LWFsdDogXFxmMmY1O1xuJGZhLXZhci1zaWduYWw6IFxcZjAxMjtcbiRmYS12YXItc2lnbmF0dXJlOiBcXGY1Yjc7XG4kZmEtdmFyLXNpbS1jYXJkOiBcXGY3YzQ7XG4kZmEtdmFyLXNpbXBseWJ1aWx0OiBcXGYyMTU7XG4kZmEtdmFyLXNpbms6IFxcZTA2ZDtcbiRmYS12YXItc2lzdHJpeDogXFxmM2VlO1xuJGZhLXZhci1zaXRlbWFwOiBcXGYwZTg7XG4kZmEtdmFyLXNpdGg6IFxcZjUxMjtcbiRmYS12YXItc2thdGluZzogXFxmN2M1O1xuJGZhLXZhci1za2V0Y2g6IFxcZjdjNjtcbiRmYS12YXItc2tpaW5nOiBcXGY3Yzk7XG4kZmEtdmFyLXNraWluZy1ub3JkaWM6IFxcZjdjYTtcbiRmYS12YXItc2t1bGw6IFxcZjU0YztcbiRmYS12YXItc2t1bGwtY3Jvc3Nib25lczogXFxmNzE0O1xuJGZhLXZhci1za3lhdGxhczogXFxmMjE2O1xuJGZhLXZhci1za3lwZTogXFxmMTdlO1xuJGZhLXZhci1zbGFjazogXFxmMTk4O1xuJGZhLXZhci1zbGFjay1oYXNoOiBcXGYzZWY7XG4kZmEtdmFyLXNsYXNoOiBcXGY3MTU7XG4kZmEtdmFyLXNsZWlnaDogXFxmN2NjO1xuJGZhLXZhci1zbGlkZXJzLWg6IFxcZjFkZTtcbiRmYS12YXItc2xpZGVzaGFyZTogXFxmMWU3O1xuJGZhLXZhci1zbWlsZTogXFxmMTE4O1xuJGZhLXZhci1zbWlsZS1iZWFtOiBcXGY1Yjg7XG4kZmEtdmFyLXNtaWxlLXdpbms6IFxcZjRkYTtcbiRmYS12YXItc21vZzogXFxmNzVmO1xuJGZhLXZhci1zbW9raW5nOiBcXGY0OGQ7XG4kZmEtdmFyLXNtb2tpbmctYmFuOiBcXGY1NGQ7XG4kZmEtdmFyLXNtczogXFxmN2NkO1xuJGZhLXZhci1zbmFwY2hhdDogXFxmMmFiO1xuJGZhLXZhci1zbmFwY2hhdC1naG9zdDogXFxmMmFjO1xuJGZhLXZhci1zbmFwY2hhdC1zcXVhcmU6IFxcZjJhZDtcbiRmYS12YXItc25vd2JvYXJkaW5nOiBcXGY3Y2U7XG4kZmEtdmFyLXNub3dmbGFrZTogXFxmMmRjO1xuJGZhLXZhci1zbm93bWFuOiBcXGY3ZDA7XG4kZmEtdmFyLXNub3dwbG93OiBcXGY3ZDI7XG4kZmEtdmFyLXNvYXA6IFxcZTA2ZTtcbiRmYS12YXItc29ja3M6IFxcZjY5NjtcbiRmYS12YXItc29sYXItcGFuZWw6IFxcZjViYTtcbiRmYS12YXItc29ydDogXFxmMGRjO1xuJGZhLXZhci1zb3J0LWFscGhhLWRvd246IFxcZjE1ZDtcbiRmYS12YXItc29ydC1hbHBoYS1kb3duLWFsdDogXFxmODgxO1xuJGZhLXZhci1zb3J0LWFscGhhLXVwOiBcXGYxNWU7XG4kZmEtdmFyLXNvcnQtYWxwaGEtdXAtYWx0OiBcXGY4ODI7XG4kZmEtdmFyLXNvcnQtYW1vdW50LWRvd246IFxcZjE2MDtcbiRmYS12YXItc29ydC1hbW91bnQtZG93bi1hbHQ6IFxcZjg4NDtcbiRmYS12YXItc29ydC1hbW91bnQtdXA6IFxcZjE2MTtcbiRmYS12YXItc29ydC1hbW91bnQtdXAtYWx0OiBcXGY4ODU7XG4kZmEtdmFyLXNvcnQtZG93bjogXFxmMGRkO1xuJGZhLXZhci1zb3J0LW51bWVyaWMtZG93bjogXFxmMTYyO1xuJGZhLXZhci1zb3J0LW51bWVyaWMtZG93bi1hbHQ6IFxcZjg4NjtcbiRmYS12YXItc29ydC1udW1lcmljLXVwOiBcXGYxNjM7XG4kZmEtdmFyLXNvcnQtbnVtZXJpYy11cC1hbHQ6IFxcZjg4NztcbiRmYS12YXItc29ydC11cDogXFxmMGRlO1xuJGZhLXZhci1zb3VuZGNsb3VkOiBcXGYxYmU7XG4kZmEtdmFyLXNvdXJjZXRyZWU6IFxcZjdkMztcbiRmYS12YXItc3BhOiBcXGY1YmI7XG4kZmEtdmFyLXNwYWNlLXNodXR0bGU6IFxcZjE5NztcbiRmYS12YXItc3BlYWthcDogXFxmM2YzO1xuJGZhLXZhci1zcGVha2VyLWRlY2s6IFxcZjgzYztcbiRmYS12YXItc3BlbGwtY2hlY2s6IFxcZjg5MTtcbiRmYS12YXItc3BpZGVyOiBcXGY3MTc7XG4kZmEtdmFyLXNwaW5uZXI6IFxcZjExMDtcbiRmYS12YXItc3Bsb3RjaDogXFxmNWJjO1xuJGZhLXZhci1zcG90aWZ5OiBcXGYxYmM7XG4kZmEtdmFyLXNwcmF5LWNhbjogXFxmNWJkO1xuJGZhLXZhci1zcXVhcmU6IFxcZjBjODtcbiRmYS12YXItc3F1YXJlLWZ1bGw6IFxcZjQ1YztcbiRmYS12YXItc3F1YXJlLXJvb3QtYWx0OiBcXGY2OTg7XG4kZmEtdmFyLXNxdWFyZXNwYWNlOiBcXGY1YmU7XG4kZmEtdmFyLXN0YWNrLWV4Y2hhbmdlOiBcXGYxOGQ7XG4kZmEtdmFyLXN0YWNrLW92ZXJmbG93OiBcXGYxNmM7XG4kZmEtdmFyLXN0YWNrcGF0aDogXFxmODQyO1xuJGZhLXZhci1zdGFtcDogXFxmNWJmO1xuJGZhLXZhci1zdGFyOiBcXGYwMDU7XG4kZmEtdmFyLXN0YXItYW5kLWNyZXNjZW50OiBcXGY2OTk7XG4kZmEtdmFyLXN0YXItaGFsZjogXFxmMDg5O1xuJGZhLXZhci1zdGFyLWhhbGYtYWx0OiBcXGY1YzA7XG4kZmEtdmFyLXN0YXItb2YtZGF2aWQ6IFxcZjY5YTtcbiRmYS12YXItc3Rhci1vZi1saWZlOiBcXGY2MjE7XG4kZmEtdmFyLXN0YXlsaW5rZWQ6IFxcZjNmNTtcbiRmYS12YXItc3RlYW06IFxcZjFiNjtcbiRmYS12YXItc3RlYW0tc3F1YXJlOiBcXGYxYjc7XG4kZmEtdmFyLXN0ZWFtLXN5bWJvbDogXFxmM2Y2O1xuJGZhLXZhci1zdGVwLWJhY2t3YXJkOiBcXGYwNDg7XG4kZmEtdmFyLXN0ZXAtZm9yd2FyZDogXFxmMDUxO1xuJGZhLXZhci1zdGV0aG9zY29wZTogXFxmMGYxO1xuJGZhLXZhci1zdGlja2VyLW11bGU6IFxcZjNmNztcbiRmYS12YXItc3RpY2t5LW5vdGU6IFxcZjI0OTtcbiRmYS12YXItc3RvcDogXFxmMDRkO1xuJGZhLXZhci1zdG9wLWNpcmNsZTogXFxmMjhkO1xuJGZhLXZhci1zdG9wd2F0Y2g6IFxcZjJmMjtcbiRmYS12YXItc3RvcHdhdGNoLTIwOiBcXGUwNmY7XG4kZmEtdmFyLXN0b3JlOiBcXGY1NGU7XG4kZmEtdmFyLXN0b3JlLWFsdDogXFxmNTRmO1xuJGZhLXZhci1zdG9yZS1hbHQtc2xhc2g6IFxcZTA3MDtcbiRmYS12YXItc3RvcmUtc2xhc2g6IFxcZTA3MTtcbiRmYS12YXItc3RyYXZhOiBcXGY0Mjg7XG4kZmEtdmFyLXN0cmVhbTogXFxmNTUwO1xuJGZhLXZhci1zdHJlZXQtdmlldzogXFxmMjFkO1xuJGZhLXZhci1zdHJpa2V0aHJvdWdoOiBcXGYwY2M7XG4kZmEtdmFyLXN0cmlwZTogXFxmNDI5O1xuJGZhLXZhci1zdHJpcGUtczogXFxmNDJhO1xuJGZhLXZhci1zdHJvb3B3YWZlbDogXFxmNTUxO1xuJGZhLXZhci1zdHVkaW92aW5hcmk6IFxcZjNmODtcbiRmYS12YXItc3R1bWJsZXVwb246IFxcZjFhNDtcbiRmYS12YXItc3R1bWJsZXVwb24tY2lyY2xlOiBcXGYxYTM7XG4kZmEtdmFyLXN1YnNjcmlwdDogXFxmMTJjO1xuJGZhLXZhci1zdWJ3YXk6IFxcZjIzOTtcbiRmYS12YXItc3VpdGNhc2U6IFxcZjBmMjtcbiRmYS12YXItc3VpdGNhc2Utcm9sbGluZzogXFxmNWMxO1xuJGZhLXZhci1zdW46IFxcZjE4NTtcbiRmYS12YXItc3VwZXJwb3dlcnM6IFxcZjJkZDtcbiRmYS12YXItc3VwZXJzY3JpcHQ6IFxcZjEyYjtcbiRmYS12YXItc3VwcGxlOiBcXGYzZjk7XG4kZmEtdmFyLXN1cnByaXNlOiBcXGY1YzI7XG4kZmEtdmFyLXN1c2U6IFxcZjdkNjtcbiRmYS12YXItc3dhdGNoYm9vazogXFxmNWMzO1xuJGZhLXZhci1zd2lmdDogXFxmOGUxO1xuJGZhLXZhci1zd2ltbWVyOiBcXGY1YzQ7XG4kZmEtdmFyLXN3aW1taW5nLXBvb2w6IFxcZjVjNTtcbiRmYS12YXItc3ltZm9ueTogXFxmODNkO1xuJGZhLXZhci1zeW5hZ29ndWU6IFxcZjY5YjtcbiRmYS12YXItc3luYzogXFxmMDIxO1xuJGZhLXZhci1zeW5jLWFsdDogXFxmMmYxO1xuJGZhLXZhci1zeXJpbmdlOiBcXGY0OGU7XG4kZmEtdmFyLXRhYmxlOiBcXGYwY2U7XG4kZmEtdmFyLXRhYmxlLXRlbm5pczogXFxmNDVkO1xuJGZhLXZhci10YWJsZXQ6IFxcZjEwYTtcbiRmYS12YXItdGFibGV0LWFsdDogXFxmM2ZhO1xuJGZhLXZhci10YWJsZXRzOiBcXGY0OTA7XG4kZmEtdmFyLXRhY2hvbWV0ZXItYWx0OiBcXGYzZmQ7XG4kZmEtdmFyLXRhZzogXFxmMDJiO1xuJGZhLXZhci10YWdzOiBcXGYwMmM7XG4kZmEtdmFyLXRhcGU6IFxcZjRkYjtcbiRmYS12YXItdGFza3M6IFxcZjBhZTtcbiRmYS12YXItdGF4aTogXFxmMWJhO1xuJGZhLXZhci10ZWFtc3BlYWs6IFxcZjRmOTtcbiRmYS12YXItdGVldGg6IFxcZjYyZTtcbiRmYS12YXItdGVldGgtb3BlbjogXFxmNjJmO1xuJGZhLXZhci10ZWxlZ3JhbTogXFxmMmM2O1xuJGZhLXZhci10ZWxlZ3JhbS1wbGFuZTogXFxmM2ZlO1xuJGZhLXZhci10ZW1wZXJhdHVyZS1oaWdoOiBcXGY3Njk7XG4kZmEtdmFyLXRlbXBlcmF0dXJlLWxvdzogXFxmNzZiO1xuJGZhLXZhci10ZW5jZW50LXdlaWJvOiBcXGYxZDU7XG4kZmEtdmFyLXRlbmdlOiBcXGY3ZDc7XG4kZmEtdmFyLXRlcm1pbmFsOiBcXGYxMjA7XG4kZmEtdmFyLXRleHQtaGVpZ2h0OiBcXGYwMzQ7XG4kZmEtdmFyLXRleHQtd2lkdGg6IFxcZjAzNTtcbiRmYS12YXItdGg6IFxcZjAwYTtcbiRmYS12YXItdGgtbGFyZ2U6IFxcZjAwOTtcbiRmYS12YXItdGgtbGlzdDogXFxmMDBiO1xuJGZhLXZhci10aGUtcmVkLXlldGk6IFxcZjY5ZDtcbiRmYS12YXItdGhlYXRlci1tYXNrczogXFxmNjMwO1xuJGZhLXZhci10aGVtZWNvOiBcXGY1YzY7XG4kZmEtdmFyLXRoZW1laXNsZTogXFxmMmIyO1xuJGZhLXZhci10aGVybW9tZXRlcjogXFxmNDkxO1xuJGZhLXZhci10aGVybW9tZXRlci1lbXB0eTogXFxmMmNiO1xuJGZhLXZhci10aGVybW9tZXRlci1mdWxsOiBcXGYyYzc7XG4kZmEtdmFyLXRoZXJtb21ldGVyLWhhbGY6IFxcZjJjOTtcbiRmYS12YXItdGhlcm1vbWV0ZXItcXVhcnRlcjogXFxmMmNhO1xuJGZhLXZhci10aGVybW9tZXRlci10aHJlZS1xdWFydGVyczogXFxmMmM4O1xuJGZhLXZhci10aGluay1wZWFrczogXFxmNzMxO1xuJGZhLXZhci10aHVtYnMtZG93bjogXFxmMTY1O1xuJGZhLXZhci10aHVtYnMtdXA6IFxcZjE2NDtcbiRmYS12YXItdGh1bWJ0YWNrOiBcXGYwOGQ7XG4kZmEtdmFyLXRpY2tldC1hbHQ6IFxcZjNmZjtcbiRmYS12YXItdGlrdG9rOiBcXGUwN2I7XG4kZmEtdmFyLXRpbWVzOiBcXGYwMGQ7XG4kZmEtdmFyLXRpbWVzLWNpcmNsZTogXFxmMDU3O1xuJGZhLXZhci10aW50OiBcXGYwNDM7XG4kZmEtdmFyLXRpbnQtc2xhc2g6IFxcZjVjNztcbiRmYS12YXItdGlyZWQ6IFxcZjVjODtcbiRmYS12YXItdG9nZ2xlLW9mZjogXFxmMjA0O1xuJGZhLXZhci10b2dnbGUtb246IFxcZjIwNTtcbiRmYS12YXItdG9pbGV0OiBcXGY3ZDg7XG4kZmEtdmFyLXRvaWxldC1wYXBlcjogXFxmNzFlO1xuJGZhLXZhci10b2lsZXQtcGFwZXItc2xhc2g6IFxcZTA3MjtcbiRmYS12YXItdG9vbGJveDogXFxmNTUyO1xuJGZhLXZhci10b29sczogXFxmN2Q5O1xuJGZhLXZhci10b290aDogXFxmNWM5O1xuJGZhLXZhci10b3JhaDogXFxmNmEwO1xuJGZhLXZhci10b3JpaS1nYXRlOiBcXGY2YTE7XG4kZmEtdmFyLXRyYWN0b3I6IFxcZjcyMjtcbiRmYS12YXItdHJhZGUtZmVkZXJhdGlvbjogXFxmNTEzO1xuJGZhLXZhci10cmFkZW1hcms6IFxcZjI1YztcbiRmYS12YXItdHJhZmZpYy1saWdodDogXFxmNjM3O1xuJGZhLXZhci10cmFpbGVyOiBcXGUwNDE7XG4kZmEtdmFyLXRyYWluOiBcXGYyMzg7XG4kZmEtdmFyLXRyYW06IFxcZjdkYTtcbiRmYS12YXItdHJhbnNnZW5kZXI6IFxcZjIyNDtcbiRmYS12YXItdHJhbnNnZW5kZXItYWx0OiBcXGYyMjU7XG4kZmEtdmFyLXRyYXNoOiBcXGYxZjg7XG4kZmEtdmFyLXRyYXNoLWFsdDogXFxmMmVkO1xuJGZhLXZhci10cmFzaC1yZXN0b3JlOiBcXGY4Mjk7XG4kZmEtdmFyLXRyYXNoLXJlc3RvcmUtYWx0OiBcXGY4MmE7XG4kZmEtdmFyLXRyZWU6IFxcZjFiYjtcbiRmYS12YXItdHJlbGxvOiBcXGYxODE7XG4kZmEtdmFyLXRyb3BoeTogXFxmMDkxO1xuJGZhLXZhci10cnVjazogXFxmMGQxO1xuJGZhLXZhci10cnVjay1sb2FkaW5nOiBcXGY0ZGU7XG4kZmEtdmFyLXRydWNrLW1vbnN0ZXI6IFxcZjYzYjtcbiRmYS12YXItdHJ1Y2stbW92aW5nOiBcXGY0ZGY7XG4kZmEtdmFyLXRydWNrLXBpY2t1cDogXFxmNjNjO1xuJGZhLXZhci10c2hpcnQ6IFxcZjU1MztcbiRmYS12YXItdHR5OiBcXGYxZTQ7XG4kZmEtdmFyLXR1bWJscjogXFxmMTczO1xuJGZhLXZhci10dW1ibHItc3F1YXJlOiBcXGYxNzQ7XG4kZmEtdmFyLXR2OiBcXGYyNmM7XG4kZmEtdmFyLXR3aXRjaDogXFxmMWU4O1xuJGZhLXZhci10d2l0dGVyOiBcXGYwOTk7XG4kZmEtdmFyLXR3aXR0ZXItc3F1YXJlOiBcXGYwODE7XG4kZmEtdmFyLXR5cG8zOiBcXGY0MmI7XG4kZmEtdmFyLXViZXI6IFxcZjQwMjtcbiRmYS12YXItdWJ1bnR1OiBcXGY3ZGY7XG4kZmEtdmFyLXVpa2l0OiBcXGY0MDM7XG4kZmEtdmFyLXVtYnJhY286IFxcZjhlODtcbiRmYS12YXItdW1icmVsbGE6IFxcZjBlOTtcbiRmYS12YXItdW1icmVsbGEtYmVhY2g6IFxcZjVjYTtcbiRmYS12YXItdW5jaGFydGVkOiBcXGUwODQ7XG4kZmEtdmFyLXVuZGVybGluZTogXFxmMGNkO1xuJGZhLXZhci11bmRvOiBcXGYwZTI7XG4kZmEtdmFyLXVuZG8tYWx0OiBcXGYyZWE7XG4kZmEtdmFyLXVuaXJlZ2lzdHJ5OiBcXGY0MDQ7XG4kZmEtdmFyLXVuaXR5OiBcXGUwNDk7XG4kZmEtdmFyLXVuaXZlcnNhbC1hY2Nlc3M6IFxcZjI5YTtcbiRmYS12YXItdW5pdmVyc2l0eTogXFxmMTljO1xuJGZhLXZhci11bmxpbms6IFxcZjEyNztcbiRmYS12YXItdW5sb2NrOiBcXGYwOWM7XG4kZmEtdmFyLXVubG9jay1hbHQ6IFxcZjEzZTtcbiRmYS12YXItdW5zcGxhc2g6IFxcZTA3YztcbiRmYS12YXItdW50YXBwZDogXFxmNDA1O1xuJGZhLXZhci11cGxvYWQ6IFxcZjA5MztcbiRmYS12YXItdXBzOiBcXGY3ZTA7XG4kZmEtdmFyLXVzYjogXFxmMjg3O1xuJGZhLXZhci11c2VyOiBcXGYwMDc7XG4kZmEtdmFyLXVzZXItYWx0OiBcXGY0MDY7XG4kZmEtdmFyLXVzZXItYWx0LXNsYXNoOiBcXGY0ZmE7XG4kZmEtdmFyLXVzZXItYXN0cm9uYXV0OiBcXGY0ZmI7XG4kZmEtdmFyLXVzZXItY2hlY2s6IFxcZjRmYztcbiRmYS12YXItdXNlci1jaXJjbGU6IFxcZjJiZDtcbiRmYS12YXItdXNlci1jbG9jazogXFxmNGZkO1xuJGZhLXZhci11c2VyLWNvZzogXFxmNGZlO1xuJGZhLXZhci11c2VyLWVkaXQ6IFxcZjRmZjtcbiRmYS12YXItdXNlci1mcmllbmRzOiBcXGY1MDA7XG4kZmEtdmFyLXVzZXItZ3JhZHVhdGU6IFxcZjUwMTtcbiRmYS12YXItdXNlci1pbmp1cmVkOiBcXGY3Mjg7XG4kZmEtdmFyLXVzZXItbG9jazogXFxmNTAyO1xuJGZhLXZhci11c2VyLW1kOiBcXGYwZjA7XG4kZmEtdmFyLXVzZXItbWludXM6IFxcZjUwMztcbiRmYS12YXItdXNlci1uaW5qYTogXFxmNTA0O1xuJGZhLXZhci11c2VyLW51cnNlOiBcXGY4MmY7XG4kZmEtdmFyLXVzZXItcGx1czogXFxmMjM0O1xuJGZhLXZhci11c2VyLXNlY3JldDogXFxmMjFiO1xuJGZhLXZhci11c2VyLXNoaWVsZDogXFxmNTA1O1xuJGZhLXZhci11c2VyLXNsYXNoOiBcXGY1MDY7XG4kZmEtdmFyLXVzZXItdGFnOiBcXGY1MDc7XG4kZmEtdmFyLXVzZXItdGllOiBcXGY1MDg7XG4kZmEtdmFyLXVzZXItdGltZXM6IFxcZjIzNTtcbiRmYS12YXItdXNlcnM6IFxcZjBjMDtcbiRmYS12YXItdXNlcnMtY29nOiBcXGY1MDk7XG4kZmEtdmFyLXVzZXJzLXNsYXNoOiBcXGUwNzM7XG4kZmEtdmFyLXVzcHM6IFxcZjdlMTtcbiRmYS12YXItdXNzdW5uYWg6IFxcZjQwNztcbiRmYS12YXItdXRlbnNpbC1zcG9vbjogXFxmMmU1O1xuJGZhLXZhci11dGVuc2lsczogXFxmMmU3O1xuJGZhLXZhci12YWFkaW46IFxcZjQwODtcbiRmYS12YXItdmVjdG9yLXNxdWFyZTogXFxmNWNiO1xuJGZhLXZhci12ZW51czogXFxmMjIxO1xuJGZhLXZhci12ZW51cy1kb3VibGU6IFxcZjIyNjtcbiRmYS12YXItdmVudXMtbWFyczogXFxmMjI4O1xuJGZhLXZhci12ZXN0OiBcXGUwODU7XG4kZmEtdmFyLXZlc3QtcGF0Y2hlczogXFxlMDg2O1xuJGZhLXZhci12aWFjb2luOiBcXGYyMzc7XG4kZmEtdmFyLXZpYWRlbzogXFxmMmE5O1xuJGZhLXZhci12aWFkZW8tc3F1YXJlOiBcXGYyYWE7XG4kZmEtdmFyLXZpYWw6IFxcZjQ5MjtcbiRmYS12YXItdmlhbHM6IFxcZjQ5MztcbiRmYS12YXItdmliZXI6IFxcZjQwOTtcbiRmYS12YXItdmlkZW86IFxcZjAzZDtcbiRmYS12YXItdmlkZW8tc2xhc2g6IFxcZjRlMjtcbiRmYS12YXItdmloYXJhOiBcXGY2YTc7XG4kZmEtdmFyLXZpbWVvOiBcXGY0MGE7XG4kZmEtdmFyLXZpbWVvLXNxdWFyZTogXFxmMTk0O1xuJGZhLXZhci12aW1lby12OiBcXGYyN2Q7XG4kZmEtdmFyLXZpbmU6IFxcZjFjYTtcbiRmYS12YXItdmlydXM6IFxcZTA3NDtcbiRmYS12YXItdmlydXMtc2xhc2g6IFxcZTA3NTtcbiRmYS12YXItdmlydXNlczogXFxlMDc2O1xuJGZhLXZhci12azogXFxmMTg5O1xuJGZhLXZhci12bnY6IFxcZjQwYjtcbiRmYS12YXItdm9pY2VtYWlsOiBcXGY4OTc7XG4kZmEtdmFyLXZvbGxleWJhbGwtYmFsbDogXFxmNDVmO1xuJGZhLXZhci12b2x1bWUtZG93bjogXFxmMDI3O1xuJGZhLXZhci12b2x1bWUtbXV0ZTogXFxmNmE5O1xuJGZhLXZhci12b2x1bWUtb2ZmOiBcXGYwMjY7XG4kZmEtdmFyLXZvbHVtZS11cDogXFxmMDI4O1xuJGZhLXZhci12b3RlLXllYTogXFxmNzcyO1xuJGZhLXZhci12ci1jYXJkYm9hcmQ6IFxcZjcyOTtcbiRmYS12YXItdnVlanM6IFxcZjQxZjtcbiRmYS12YXItd2Fsa2luZzogXFxmNTU0O1xuJGZhLXZhci13YWxsZXQ6IFxcZjU1NTtcbiRmYS12YXItd2FyZWhvdXNlOiBcXGY0OTQ7XG4kZmEtdmFyLXdhdGNobWFuLW1vbml0b3Jpbmc6IFxcZTA4NztcbiRmYS12YXItd2F0ZXI6IFxcZjc3MztcbiRmYS12YXItd2F2ZS1zcXVhcmU6IFxcZjgzZTtcbiRmYS12YXItd2F6ZTogXFxmODNmO1xuJGZhLXZhci13ZWVibHk6IFxcZjVjYztcbiRmYS12YXItd2VpYm86IFxcZjE4YTtcbiRmYS12YXItd2VpZ2h0OiBcXGY0OTY7XG4kZmEtdmFyLXdlaWdodC1oYW5naW5nOiBcXGY1Y2Q7XG4kZmEtdmFyLXdlaXhpbjogXFxmMWQ3O1xuJGZhLXZhci13aGF0c2FwcDogXFxmMjMyO1xuJGZhLXZhci13aGF0c2FwcC1zcXVhcmU6IFxcZjQwYztcbiRmYS12YXItd2hlZWxjaGFpcjogXFxmMTkzO1xuJGZhLXZhci13aG1jczogXFxmNDBkO1xuJGZhLXZhci13aWZpOiBcXGYxZWI7XG4kZmEtdmFyLXdpa2lwZWRpYS13OiBcXGYyNjY7XG4kZmEtdmFyLXdpbmQ6IFxcZjcyZTtcbiRmYS12YXItd2luZG93LWNsb3NlOiBcXGY0MTA7XG4kZmEtdmFyLXdpbmRvdy1tYXhpbWl6ZTogXFxmMmQwO1xuJGZhLXZhci13aW5kb3ctbWluaW1pemU6IFxcZjJkMTtcbiRmYS12YXItd2luZG93LXJlc3RvcmU6IFxcZjJkMjtcbiRmYS12YXItd2luZG93czogXFxmMTdhO1xuJGZhLXZhci13aW5lLWJvdHRsZTogXFxmNzJmO1xuJGZhLXZhci13aW5lLWdsYXNzOiBcXGY0ZTM7XG4kZmEtdmFyLXdpbmUtZ2xhc3MtYWx0OiBcXGY1Y2U7XG4kZmEtdmFyLXdpeDogXFxmNWNmO1xuJGZhLXZhci13aXphcmRzLW9mLXRoZS1jb2FzdDogXFxmNzMwO1xuJGZhLXZhci13b2R1OiBcXGUwODg7XG4kZmEtdmFyLXdvbGYtcGFjay1iYXR0YWxpb246IFxcZjUxNDtcbiRmYS12YXItd29uLXNpZ246IFxcZjE1OTtcbiRmYS12YXItd29yZHByZXNzOiBcXGYxOWE7XG4kZmEtdmFyLXdvcmRwcmVzcy1zaW1wbGU6IFxcZjQxMTtcbiRmYS12YXItd3BiZWdpbm5lcjogXFxmMjk3O1xuJGZhLXZhci13cGV4cGxvcmVyOiBcXGYyZGU7XG4kZmEtdmFyLXdwZm9ybXM6IFxcZjI5ODtcbiRmYS12YXItd3ByZXNzcjogXFxmM2U0O1xuJGZhLXZhci13cmVuY2g6IFxcZjBhZDtcbiRmYS12YXIteC1yYXk6IFxcZjQ5NztcbiRmYS12YXIteGJveDogXFxmNDEyO1xuJGZhLXZhci14aW5nOiBcXGYxNjg7XG4kZmEtdmFyLXhpbmctc3F1YXJlOiBcXGYxNjk7XG4kZmEtdmFyLXktY29tYmluYXRvcjogXFxmMjNiO1xuJGZhLXZhci15YWhvbzogXFxmMTllO1xuJGZhLXZhci15YW1tZXI6IFxcZjg0MDtcbiRmYS12YXIteWFuZGV4OiBcXGY0MTM7XG4kZmEtdmFyLXlhbmRleC1pbnRlcm5hdGlvbmFsOiBcXGY0MTQ7XG4kZmEtdmFyLXlhcm46IFxcZjdlMztcbiRmYS12YXIteWVscDogXFxmMWU5O1xuJGZhLXZhci15ZW4tc2lnbjogXFxmMTU3O1xuJGZhLXZhci15aW4teWFuZzogXFxmNmFkO1xuJGZhLXZhci15b2FzdDogXFxmMmIxO1xuJGZhLXZhci15b3V0dWJlOiBcXGYxNjc7XG4kZmEtdmFyLXlvdXR1YmUtc3F1YXJlOiBcXGY0MzE7XG4kZmEtdmFyLXpoaWh1OiBcXGY2M2Y7XG4iLCIvLyBMaXN0IEljb25zXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi4jeyRmYS1jc3MtcHJlZml4fS11bCB7XG4gIGxpc3Qtc3R5bGUtdHlwZTogbm9uZTtcbiAgbWFyZ2luLWxlZnQ6ICRmYS1saS13aWR0aCAqIDUvNDtcbiAgcGFkZGluZy1sZWZ0OiAwO1xuXG4gID4gbGkgeyBwb3NpdGlvbjogcmVsYXRpdmU7IH1cbn1cblxuLiN7JGZhLWNzcy1wcmVmaXh9LWxpIHtcbiAgbGVmdDogLSRmYS1saS13aWR0aDtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIHdpZHRoOiAkZmEtbGktd2lkdGg7XG4gIGxpbmUtaGVpZ2h0OiBpbmhlcml0O1xufVxuIiwiLy8gQm9yZGVyZWQgJiBQdWxsZWRcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLiN7JGZhLWNzcy1wcmVmaXh9LWJvcmRlciB7XG4gIGJvcmRlcjogc29saWQgLjA4ZW0gJGZhLWJvcmRlci1jb2xvcjtcbiAgYm9yZGVyLXJhZGl1czogLjFlbTtcbiAgcGFkZGluZzogLjJlbSAuMjVlbSAuMTVlbTtcbn1cblxuLiN7JGZhLWNzcy1wcmVmaXh9LXB1bGwtbGVmdCB7IGZsb2F0OiBsZWZ0OyB9XG4uI3skZmEtY3NzLXByZWZpeH0tcHVsbC1yaWdodCB7IGZsb2F0OiByaWdodDsgfVxuXG4uI3skZmEtY3NzLXByZWZpeH0sXG4uZmFzLFxuLmZhcixcbi5mYWwsXG4uZmFiIHtcbiAgJi4jeyRmYS1jc3MtcHJlZml4fS1wdWxsLWxlZnQgeyBtYXJnaW4tcmlnaHQ6IC4zZW07IH1cbiAgJi4jeyRmYS1jc3MtcHJlZml4fS1wdWxsLXJpZ2h0IHsgbWFyZ2luLWxlZnQ6IC4zZW07IH1cbn1cbiIsIi8vIEFuaW1hdGVkIEljb25zXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4uI3skZmEtY3NzLXByZWZpeH0tc3BpbiB7XG4gIGFuaW1hdGlvbjogZmEtc3BpbiAycyBpbmZpbml0ZSBsaW5lYXI7XG59XG5cbi4jeyRmYS1jc3MtcHJlZml4fS1wdWxzZSB7XG4gIGFuaW1hdGlvbjogZmEtc3BpbiAxcyBpbmZpbml0ZSBzdGVwcyg4KTtcbn1cblxuQGtleWZyYW1lcyBmYS1zcGluIHtcbiAgMCUge1xuICAgIHRyYW5zZm9ybTogcm90YXRlKDBkZWcpO1xuICB9XG5cbiAgMTAwJSB7XG4gICAgdHJhbnNmb3JtOiByb3RhdGUoMzYwZGVnKTtcbiAgfVxufVxuIiwiLy8gUm90YXRlZCAmIEZsaXBwZWQgSWNvbnNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLiN7JGZhLWNzcy1wcmVmaXh9LXJvdGF0ZS05MCAgeyBAaW5jbHVkZSBmYS1pY29uLXJvdGF0ZSg5MGRlZywgMSk7ICB9XG4uI3skZmEtY3NzLXByZWZpeH0tcm90YXRlLTE4MCB7IEBpbmNsdWRlIGZhLWljb24tcm90YXRlKDE4MGRlZywgMik7IH1cbi4jeyRmYS1jc3MtcHJlZml4fS1yb3RhdGUtMjcwIHsgQGluY2x1ZGUgZmEtaWNvbi1yb3RhdGUoMjcwZGVnLCAzKTsgfVxuXG4uI3skZmEtY3NzLXByZWZpeH0tZmxpcC1ob3Jpem9udGFsIHsgQGluY2x1ZGUgZmEtaWNvbi1mbGlwKC0xLCAxLCAwKTsgfVxuLiN7JGZhLWNzcy1wcmVmaXh9LWZsaXAtdmVydGljYWwgICB7IEBpbmNsdWRlIGZhLWljb24tZmxpcCgxLCAtMSwgMik7IH1cbi4jeyRmYS1jc3MtcHJlZml4fS1mbGlwLWJvdGgsIC4jeyRmYS1jc3MtcHJlZml4fS1mbGlwLWhvcml6b250YWwuI3skZmEtY3NzLXByZWZpeH0tZmxpcC12ZXJ0aWNhbCB7IEBpbmNsdWRlIGZhLWljb24tZmxpcCgtMSwgLTEsIDIpOyB9XG5cbi8vIEhvb2sgZm9yIElFOC05XG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbjpyb290IHtcbiAgLiN7JGZhLWNzcy1wcmVmaXh9LXJvdGF0ZS05MCxcbiAgLiN7JGZhLWNzcy1wcmVmaXh9LXJvdGF0ZS0xODAsXG4gIC4jeyRmYS1jc3MtcHJlZml4fS1yb3RhdGUtMjcwLFxuICAuI3skZmEtY3NzLXByZWZpeH0tZmxpcC1ob3Jpem9udGFsLFxuICAuI3skZmEtY3NzLXByZWZpeH0tZmxpcC12ZXJ0aWNhbCxcbiAgLiN7JGZhLWNzcy1wcmVmaXh9LWZsaXAtYm90aCB7XG4gICAgZmlsdGVyOiBub25lO1xuICB9XG59XG4iLCIvLyBNaXhpbnNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbkBtaXhpbiBmYS1pY29uIHtcbiAgLXdlYmtpdC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7XG4gIC1tb3otb3N4LWZvbnQtc21vb3RoaW5nOiBncmF5c2NhbGU7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgZm9udC1zdHlsZTogbm9ybWFsO1xuICBmb250LXZhcmlhbnQ6IG5vcm1hbDtcbiAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgbGluZS1oZWlnaHQ6IDE7XG59XG5cbkBtaXhpbiBmYS1pY29uLXJvdGF0ZSgkZGVncmVlcywgJHJvdGF0aW9uKSB7XG4gIC1tcy1maWx0ZXI6IFwicHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LkJhc2ljSW1hZ2Uocm90YXRpb249I3skcm90YXRpb259KVwiO1xuICB0cmFuc2Zvcm06IHJvdGF0ZSgkZGVncmVlcyk7XG59XG5cbkBtaXhpbiBmYS1pY29uLWZsaXAoJGhvcml6LCAkdmVydCwgJHJvdGF0aW9uKSB7XG4gIC1tcy1maWx0ZXI6IFwicHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LkJhc2ljSW1hZ2Uocm90YXRpb249I3skcm90YXRpb259LCBtaXJyb3I9MSlcIjtcbiAgdHJhbnNmb3JtOiBzY2FsZSgkaG9yaXosICR2ZXJ0KTtcbn1cblxuXG4vLyBPbmx5IGRpc3BsYXkgY29udGVudCB0byBzY3JlZW4gcmVhZGVycy4gQSBsYSBCb290c3RyYXAgNC5cbi8vXG4vLyBTZWU6IGh0dHA6Ly9hMTF5cHJvamVjdC5jb20vcG9zdHMvaG93LXRvLWhpZGUtY29udGVudC9cblxuQG1peGluIHNyLW9ubHkge1xuICBib3JkZXI6IDA7XG4gIGNsaXA6IHJlY3QoMCwgMCwgMCwgMCk7XG4gIGhlaWdodDogMXB4O1xuICBtYXJnaW46IC0xcHg7XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIHBhZGRpbmc6IDA7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgd2lkdGg6IDFweDtcbn1cblxuLy8gVXNlIGluIGNvbmp1bmN0aW9uIHdpdGggLnNyLW9ubHkgdG8gb25seSBkaXNwbGF5IGNvbnRlbnQgd2hlbiBpdCdzIGZvY3VzZWQuXG4vL1xuLy8gVXNlZnVsIGZvciBcIlNraXAgdG8gbWFpbiBjb250ZW50XCIgbGlua3M7IHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDEzL05PVEUtV0NBRzIwLVRFQ0hTLTIwMTMwOTA1L0cxXG4vL1xuLy8gQ3JlZGl0OiBIVE1MNSBCb2lsZXJwbGF0ZVxuXG5AbWl4aW4gc3Itb25seS1mb2N1c2FibGUge1xuICAmOmFjdGl2ZSxcbiAgJjpmb2N1cyB7XG4gICAgY2xpcDogYXV0bztcbiAgICBoZWlnaHQ6IGF1dG87XG4gICAgbWFyZ2luOiAwO1xuICAgIG92ZXJmbG93OiB2aXNpYmxlO1xuICAgIHBvc2l0aW9uOiBzdGF0aWM7XG4gICAgd2lkdGg6IGF1dG87XG4gIH1cbn1cbiIsIi8vIFN0YWNrZWQgSWNvbnNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLiN7JGZhLWNzcy1wcmVmaXh9LXN0YWNrIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBoZWlnaHQ6IDJlbTtcbiAgbGluZS1oZWlnaHQ6IDJlbTtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICB3aWR0aDogKCRmYS1mdy13aWR0aCoyKTtcbn1cblxuLiN7JGZhLWNzcy1wcmVmaXh9LXN0YWNrLTF4LFxuLiN7JGZhLWNzcy1wcmVmaXh9LXN0YWNrLTJ4IHtcbiAgbGVmdDogMDtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIHdpZHRoOiAxMDAlO1xufVxuXG4uI3skZmEtY3NzLXByZWZpeH0tc3RhY2stMXgge1xuICBsaW5lLWhlaWdodDogaW5oZXJpdDtcbn1cblxuLiN7JGZhLWNzcy1wcmVmaXh9LXN0YWNrLTJ4IHtcbiAgZm9udC1zaXplOiAyZW07XG59XG5cbi4jeyRmYS1jc3MtcHJlZml4fS1pbnZlcnNlIHtcbiAgY29sb3I6ICRmYS1pbnZlcnNlO1xufVxuIiwiLyogRm9udCBBd2Vzb21lIHVzZXMgdGhlIFVuaWNvZGUgUHJpdmF0ZSBVc2UgQXJlYSAoUFVBKSB0byBlbnN1cmUgc2NyZWVuXHJcbnJlYWRlcnMgZG8gbm90IHJlYWQgb2ZmIHJhbmRvbSBjaGFyYWN0ZXJzIHRoYXQgcmVwcmVzZW50IGljb25zICovXHJcbi8qIHlvdSBzaG91bGQgY29tbWVudCBvdXQgYW55IG9mIHRoZXNlIHRoYXQgeW91IGFyZSBub3QgdXNpbmcgYW5kIGRvbid0IGV4cGVjdCB0byB1c2UgaW4gb3JkZXIgdG8gbWFrZSB0aGUgb3V0cHV0IGNzcyBzbWFsbGVyICovXHJcblxyXG4uI3skZmEtY3NzLXByZWZpeH0tNTAwcHg6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLTUwMHB4KTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tYWNjZXNzaWJsZS1pY29uOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1hY2Nlc3NpYmxlLWljb24pOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1hY2N1c29mdDpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItYWNjdXNvZnQpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1hY3F1aXNpdGlvbnMtaW5jb3Jwb3JhdGVkOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1hY3F1aXNpdGlvbnMtaW5jb3Jwb3JhdGVkKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tYWQ6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWFkKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tYWRkcmVzcy1ib29rOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1hZGRyZXNzLWJvb2spOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1hZGRyZXNzLWNhcmQ6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWFkZHJlc3MtY2FyZCk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWFkanVzdDpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItYWRqdXN0KTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tYWRuOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1hZG4pOyB9XHJcbi8qLiN7JGZhLWNzcy1wcmVmaXh9LWFkb2JlOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1hZG9iZSk7IH0qL1xyXG4uI3skZmEtY3NzLXByZWZpeH0tYWR2ZXJzYWw6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWFkdmVyc2FsKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tYWZmaWxpYXRldGhlbWU6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWFmZmlsaWF0ZXRoZW1lKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tYWlyLWZyZXNoZW5lcjpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItYWlyLWZyZXNoZW5lcik7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWFsZ29saWE6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWFsZ29saWEpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1hbGlnbi1jZW50ZXI6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWFsaWduLWNlbnRlcik7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWFsaWduLWp1c3RpZnk6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWFsaWduLWp1c3RpZnkpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1hbGlnbi1sZWZ0OmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1hbGlnbi1sZWZ0KTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tYWxpZ24tcmlnaHQ6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWFsaWduLXJpZ2h0KTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tYWxpcGF5OmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1hbGlwYXkpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1hbGxlcmdpZXM6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWFsbGVyZ2llcyk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWFtYXpvbjpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItYW1hem9uKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tYW1hem9uLXBheTpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItYW1hem9uLXBheSk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWFtYnVsYW5jZTpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItYW1idWxhbmNlKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tYW1lcmljYW4tc2lnbi1sYW5ndWFnZS1pbnRlcnByZXRpbmc6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWFtZXJpY2FuLXNpZ24tbGFuZ3VhZ2UtaW50ZXJwcmV0aW5nKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tYW1pbGlhOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1hbWlsaWEpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1hbmNob3I6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWFuY2hvcik7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWFuZHJvaWQ6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWFuZHJvaWQpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1hbmdlbGxpc3Q6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWFuZ2VsbGlzdCk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWFuZ2xlLWRvdWJsZS1kb3duOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1hbmdsZS1kb3VibGUtZG93bik7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWFuZ2xlLWRvdWJsZS1sZWZ0OmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1hbmdsZS1kb3VibGUtbGVmdCk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWFuZ2xlLWRvdWJsZS1yaWdodDpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItYW5nbGUtZG91YmxlLXJpZ2h0KTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tYW5nbGUtZG91YmxlLXVwOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1hbmdsZS1kb3VibGUtdXApOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1hbmdsZS1kb3duOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1hbmdsZS1kb3duKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tYW5nbGUtbGVmdDpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItYW5nbGUtbGVmdCk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWFuZ2xlLXJpZ2h0OmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1hbmdsZS1yaWdodCk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWFuZ2xlLXVwOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1hbmdsZS11cCk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWFuZ3J5OmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1hbmdyeSk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWFuZ3J5Y3JlYXRpdmU6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWFuZ3J5Y3JlYXRpdmUpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1hbmd1bGFyOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1hbmd1bGFyKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tYW5raDpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItYW5raCk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWFwcC1zdG9yZTpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItYXBwLXN0b3JlKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tYXBwLXN0b3JlLWlvczpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItYXBwLXN0b3JlLWlvcyk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWFwcGVyOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1hcHBlcik7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWFwcGxlOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1hcHBsZSk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWFwcGxlLWFsdDpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItYXBwbGUtYWx0KTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tYXBwbGUtcGF5OmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1hcHBsZS1wYXkpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1hcmNoaXZlOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1hcmNoaXZlKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tYXJjaHdheTpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItYXJjaHdheSk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWFycm93LWFsdC1jaXJjbGUtZG93bjpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItYXJyb3ctYWx0LWNpcmNsZS1kb3duKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tYXJyb3ctYWx0LWNpcmNsZS1sZWZ0OmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1hcnJvdy1hbHQtY2lyY2xlLWxlZnQpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1hcnJvdy1hbHQtY2lyY2xlLXJpZ2h0OmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1hcnJvdy1hbHQtY2lyY2xlLXJpZ2h0KTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tYXJyb3ctYWx0LWNpcmNsZS11cDpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItYXJyb3ctYWx0LWNpcmNsZS11cCk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWFycm93LWNpcmNsZS1kb3duOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1hcnJvdy1jaXJjbGUtZG93bik7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWFycm93LWNpcmNsZS1sZWZ0OmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1hcnJvdy1jaXJjbGUtbGVmdCk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWFycm93LWNpcmNsZS1yaWdodDpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItYXJyb3ctY2lyY2xlLXJpZ2h0KTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tYXJyb3ctY2lyY2xlLXVwOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1hcnJvdy1jaXJjbGUtdXApOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1hcnJvdy1kb3duOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1hcnJvdy1kb3duKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tYXJyb3ctbGVmdDpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItYXJyb3ctbGVmdCk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWFycm93LXJpZ2h0OmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1hcnJvdy1yaWdodCk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWFycm93LXVwOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1hcnJvdy11cCk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWFycm93cy1hbHQ6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWFycm93cy1hbHQpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1hcnJvd3MtYWx0LWg6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWFycm93cy1hbHQtaCk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWFycm93cy1hbHQtdjpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItYXJyb3dzLWFsdC12KTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tYXJ0c3RhdGlvbjpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItYXJ0c3RhdGlvbik7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWFzc2lzdGl2ZS1saXN0ZW5pbmctc3lzdGVtczpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItYXNzaXN0aXZlLWxpc3RlbmluZy1zeXN0ZW1zKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tYXN0ZXJpc2s6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWFzdGVyaXNrKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tYXN5bW1ldHJpazpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItYXN5bW1ldHJpayk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWF0OmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1hdCk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWF0bGFzOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1hdGxhcyk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWF0bGFzc2lhbjpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItYXRsYXNzaWFuKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tYXRvbTpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItYXRvbSk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWF1ZGlibGU6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWF1ZGlibGUpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1hdWRpby1kZXNjcmlwdGlvbjpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItYXVkaW8tZGVzY3JpcHRpb24pOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1hdXRvcHJlZml4ZXI6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWF1dG9wcmVmaXhlcik7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWF2aWFuZXg6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWF2aWFuZXgpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1hdmlhdG86YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWF2aWF0byk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWF3YXJkOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1hd2FyZCk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWF3czpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItYXdzKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tYmFieTpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItYmFieSk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWJhYnktY2FycmlhZ2U6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWJhYnktY2FycmlhZ2UpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1iYWNrc3BhY2U6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWJhY2tzcGFjZSk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWJhY2t3YXJkOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1iYWNrd2FyZCk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWJhbGFuY2Utc2NhbGU6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWJhbGFuY2Utc2NhbGUpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1iYW46YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWJhbik7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWJhbmQtYWlkOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1iYW5kLWFpZCk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWJhbmRjYW1wOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1iYW5kY2FtcCk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWJhcmNvZGU6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWJhcmNvZGUpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1iYXJzOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1iYXJzKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tYmFzZWJhbGwtYmFsbDpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItYmFzZWJhbGwtYmFsbCk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWJhc2tldGJhbGwtYmFsbDpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItYmFza2V0YmFsbC1iYWxsKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tYmF0aDpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItYmF0aCk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWJhdHRlcnktZW1wdHk6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWJhdHRlcnktZW1wdHkpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1iYXR0ZXJ5LWZ1bGw6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWJhdHRlcnktZnVsbCk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWJhdHRlcnktaGFsZjpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItYmF0dGVyeS1oYWxmKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tYmF0dGVyeS1xdWFydGVyOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1iYXR0ZXJ5LXF1YXJ0ZXIpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1iYXR0ZXJ5LXRocmVlLXF1YXJ0ZXJzOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1iYXR0ZXJ5LXRocmVlLXF1YXJ0ZXJzKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tYmVkOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1iZWQpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1iZWVyOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1iZWVyKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tYmVoYW5jZTpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItYmVoYW5jZSk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWJlaGFuY2Utc3F1YXJlOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1iZWhhbmNlLXNxdWFyZSk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWJlbGw6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWJlbGwpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1iZWxsLXNsYXNoOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1iZWxsLXNsYXNoKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tYmV6aWVyLWN1cnZlOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1iZXppZXItY3VydmUpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1iaWJsZTpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItYmlibGUpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1iaWN5Y2xlOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1iaWN5Y2xlKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tYmltb2JqZWN0OmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1iaW1vYmplY3QpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1iaW5vY3VsYXJzOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1iaW5vY3VsYXJzKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tYmlvaGF6YXJkOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1iaW9oYXphcmQpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1iaXJ0aGRheS1jYWtlOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1iaXJ0aGRheS1jYWtlKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tYml0YnVja2V0OmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1iaXRidWNrZXQpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1iaXRjb2luOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1iaXRjb2luKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tYml0eTpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItYml0eSk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWJsYWNrLXRpZTpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItYmxhY2stdGllKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tYmxhY2tiZXJyeTpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItYmxhY2tiZXJyeSk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWJsZW5kZXI6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWJsZW5kZXIpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1ibGVuZGVyLXBob25lOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1ibGVuZGVyLXBob25lKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tYmxpbmQ6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWJsaW5kKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tYmxvZzpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItYmxvZyk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWJsb2dnZXI6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWJsb2dnZXIpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1ibG9nZ2VyLWI6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWJsb2dnZXItYik7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWJsdWV0b290aDpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItYmx1ZXRvb3RoKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tYmx1ZXRvb3RoLWI6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWJsdWV0b290aC1iKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tYm9sZDpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItYm9sZCk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWJvbHQ6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWJvbHQpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1ib21iOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1ib21iKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tYm9uZTpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItYm9uZSk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWJvbmc6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWJvbmcpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1ib29rOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1ib29rKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tYm9vay1kZWFkOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1ib29rLWRlYWQpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1ib29rLW9wZW46YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWJvb2stb3Blbik7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWJvb2stcmVhZGVyOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1ib29rLXJlYWRlcik7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWJvb2ttYXJrOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1ib29rbWFyayk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWJvd2xpbmctYmFsbDpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItYm93bGluZy1iYWxsKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tYm94OmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1ib3gpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1ib3gtb3BlbjpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItYm94LW9wZW4pOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1ib3hlczpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItYm94ZXMpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1icmFpbGxlOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1icmFpbGxlKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tYnJhaW46YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWJyYWluKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tYnJpZWZjYXNlOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1icmllZmNhc2UpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1icmllZmNhc2UtbWVkaWNhbDpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItYnJpZWZjYXNlLW1lZGljYWwpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1icm9hZGNhc3QtdG93ZXI6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWJyb2FkY2FzdC10b3dlcik7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWJyb29tOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1icm9vbSk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWJydXNoOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1icnVzaCk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWJ0YzpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItYnRjKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tYnVnOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1idWcpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1idWlsZGluZzpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItYnVpbGRpbmcpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1idWxsaG9ybjpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItYnVsbGhvcm4pOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1idWxsc2V5ZTpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItYnVsbHNleWUpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1idXJuOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1idXJuKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tYnVyb21vYmVsZXhwZXJ0ZTpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItYnVyb21vYmVsZXhwZXJ0ZSk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWJ1czpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItYnVzKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tYnVzLWFsdDpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItYnVzLWFsdCk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWJ1c2luZXNzLXRpbWU6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWJ1c2luZXNzLXRpbWUpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1idXlzZWxsYWRzOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1idXlzZWxsYWRzKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tY2FsY3VsYXRvcjpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItY2FsY3VsYXRvcik7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWNhbGVuZGFyOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1jYWxlbmRhcik7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWNhbGVuZGFyLWFsdDpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItY2FsZW5kYXItYWx0KTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tY2FsZW5kYXItY2hlY2s6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWNhbGVuZGFyLWNoZWNrKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tY2FsZW5kYXItZGF5OmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1jYWxlbmRhci1kYXkpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1jYWxlbmRhci1taW51czpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItY2FsZW5kYXItbWludXMpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1jYWxlbmRhci1wbHVzOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1jYWxlbmRhci1wbHVzKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tY2FsZW5kYXItdGltZXM6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWNhbGVuZGFyLXRpbWVzKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tY2FsZW5kYXItd2VlazpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItY2FsZW5kYXItd2Vlayk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWNhbWVyYTpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItY2FtZXJhKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tY2FtZXJhLXJldHJvOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1jYW1lcmEtcmV0cm8pOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1jYW1wZ3JvdW5kOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1jYW1wZ3JvdW5kKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tY2FuYWRpYW4tbWFwbGUtbGVhZjpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItY2FuYWRpYW4tbWFwbGUtbGVhZik7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWNhbmR5LWNhbmU6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWNhbmR5LWNhbmUpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1jYW5uYWJpczpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItY2FubmFiaXMpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1jYXBzdWxlczpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItY2Fwc3VsZXMpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1jYXI6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWNhcik7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWNhci1hbHQ6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWNhci1hbHQpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1jYXItYmF0dGVyeTpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItY2FyLWJhdHRlcnkpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1jYXItY3Jhc2g6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWNhci1jcmFzaCk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWNhci1zaWRlOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1jYXItc2lkZSk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWNhcmV0LWRvd246YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWNhcmV0LWRvd24pOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1jYXJldC1sZWZ0OmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1jYXJldC1sZWZ0KTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tY2FyZXQtcmlnaHQ6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWNhcmV0LXJpZ2h0KTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tY2FyZXQtc3F1YXJlLWRvd246YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWNhcmV0LXNxdWFyZS1kb3duKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tY2FyZXQtc3F1YXJlLWxlZnQ6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWNhcmV0LXNxdWFyZS1sZWZ0KTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tY2FyZXQtc3F1YXJlLXJpZ2h0OmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1jYXJldC1zcXVhcmUtcmlnaHQpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1jYXJldC1zcXVhcmUtdXA6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWNhcmV0LXNxdWFyZS11cCk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWNhcmV0LXVwOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1jYXJldC11cCk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWNhcnJvdDpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItY2Fycm90KTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tY2FydC1hcnJvdy1kb3duOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1jYXJ0LWFycm93LWRvd24pOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1jYXJ0LXBsdXM6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWNhcnQtcGx1cyk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWNhc2gtcmVnaXN0ZXI6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWNhc2gtcmVnaXN0ZXIpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1jYXQ6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWNhdCk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWNjLWFtYXpvbi1wYXk6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWNjLWFtYXpvbi1wYXkpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1jYy1hbWV4OmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1jYy1hbWV4KTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tY2MtYXBwbGUtcGF5OmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1jYy1hcHBsZS1wYXkpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1jYy1kaW5lcnMtY2x1YjpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItY2MtZGluZXJzLWNsdWIpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1jYy1kaXNjb3ZlcjpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItY2MtZGlzY292ZXIpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1jYy1qY2I6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWNjLWpjYik7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWNjLW1hc3RlcmNhcmQ6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWNjLW1hc3RlcmNhcmQpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1jYy1wYXlwYWw6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWNjLXBheXBhbCk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWNjLXN0cmlwZTpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItY2Mtc3RyaXBlKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tY2MtdmlzYTpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItY2MtdmlzYSk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWNlbnRlcmNvZGU6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWNlbnRlcmNvZGUpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1jZW50b3M6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWNlbnRvcyk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWNlcnRpZmljYXRlOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1jZXJ0aWZpY2F0ZSk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWNoYWlyOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1jaGFpcik7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWNoYWxrYm9hcmQ6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWNoYWxrYm9hcmQpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1jaGFsa2JvYXJkLXRlYWNoZXI6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWNoYWxrYm9hcmQtdGVhY2hlcik7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWNoYXJnaW5nLXN0YXRpb246YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWNoYXJnaW5nLXN0YXRpb24pOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1jaGFydC1hcmVhOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1jaGFydC1hcmVhKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tY2hhcnQtYmFyOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1jaGFydC1iYXIpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1jaGFydC1saW5lOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1jaGFydC1saW5lKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tY2hhcnQtcGllOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1jaGFydC1waWUpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1jaGVjazpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItY2hlY2spOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1jaGVjay1jaXJjbGU6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWNoZWNrLWNpcmNsZSk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWNoZWNrLWRvdWJsZTpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItY2hlY2stZG91YmxlKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tY2hlY2stc3F1YXJlOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1jaGVjay1zcXVhcmUpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1jaGVzczpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItY2hlc3MpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1jaGVzcy1iaXNob3A6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWNoZXNzLWJpc2hvcCk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWNoZXNzLWJvYXJkOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1jaGVzcy1ib2FyZCk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWNoZXNzLWtpbmc6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWNoZXNzLWtpbmcpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1jaGVzcy1rbmlnaHQ6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWNoZXNzLWtuaWdodCk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWNoZXNzLXBhd246YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWNoZXNzLXBhd24pOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1jaGVzcy1xdWVlbjpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItY2hlc3MtcXVlZW4pOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1jaGVzcy1yb29rOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1jaGVzcy1yb29rKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tY2hldnJvbi1jaXJjbGUtZG93bjpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItY2hldnJvbi1jaXJjbGUtZG93bik7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWNoZXZyb24tY2lyY2xlLWxlZnQ6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWNoZXZyb24tY2lyY2xlLWxlZnQpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1jaGV2cm9uLWNpcmNsZS1yaWdodDpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItY2hldnJvbi1jaXJjbGUtcmlnaHQpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1jaGV2cm9uLWNpcmNsZS11cDpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItY2hldnJvbi1jaXJjbGUtdXApOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1jaGV2cm9uLWRvd246YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWNoZXZyb24tZG93bik7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWNoZXZyb24tbGVmdDpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItY2hldnJvbi1sZWZ0KTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tY2hldnJvbi1yaWdodDpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItY2hldnJvbi1yaWdodCk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWNoZXZyb24tdXA6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWNoZXZyb24tdXApOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1jaGlsZDpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItY2hpbGQpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1jaHJvbWU6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWNocm9tZSk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWNodXJjaDpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItY2h1cmNoKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tY2lyY2xlOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1jaXJjbGUpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1jaXJjbGUtbm90Y2g6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWNpcmNsZS1ub3RjaCk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWNpdHk6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWNpdHkpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1jbGlwYm9hcmQ6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWNsaXBib2FyZCk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWNsaXBib2FyZC1jaGVjazpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItY2xpcGJvYXJkLWNoZWNrKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tY2xpcGJvYXJkLWxpc3Q6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWNsaXBib2FyZC1saXN0KTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tY2xvY2s6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWNsb2NrKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tY2xvbmU6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWNsb25lKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tY2xvc2VkLWNhcHRpb25pbmc6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWNsb3NlZC1jYXB0aW9uaW5nKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tY2xvdWQ6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWNsb3VkKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tY2xvdWQtZG93bmxvYWQtYWx0OmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1jbG91ZC1kb3dubG9hZC1hbHQpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1jbG91ZC1tZWF0YmFsbDpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItY2xvdWQtbWVhdGJhbGwpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1jbG91ZC1tb29uOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1jbG91ZC1tb29uKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tY2xvdWQtbW9vbi1yYWluOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1jbG91ZC1tb29uLXJhaW4pOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1jbG91ZC1yYWluOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1jbG91ZC1yYWluKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tY2xvdWQtc2hvd2Vycy1oZWF2eTpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItY2xvdWQtc2hvd2Vycy1oZWF2eSk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWNsb3VkLXN1bjpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItY2xvdWQtc3VuKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tY2xvdWQtc3VuLXJhaW46YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWNsb3VkLXN1bi1yYWluKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tY2xvdWQtdXBsb2FkLWFsdDpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItY2xvdWQtdXBsb2FkLWFsdCk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWNsb3Vkc2NhbGU6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWNsb3Vkc2NhbGUpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1jbG91ZHNtaXRoOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1jbG91ZHNtaXRoKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tY2xvdWR2ZXJzaWZ5OmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1jbG91ZHZlcnNpZnkpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1jb2NrdGFpbDpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItY29ja3RhaWwpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1jb2RlOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1jb2RlKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tY29kZS1icmFuY2g6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWNvZGUtYnJhbmNoKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tY29kZXBlbjpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItY29kZXBlbik7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWNvZGllcGllOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1jb2RpZXBpZSk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWNvZmZlZTpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItY29mZmVlKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tY29nOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1jb2cpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1jb2dzOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1jb2dzKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tY29pbnM6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWNvaW5zKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tY29sdW1uczpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItY29sdW1ucyk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWNvbW1lbnQ6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWNvbW1lbnQpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1jb21tZW50LWFsdDpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItY29tbWVudC1hbHQpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1jb21tZW50LWRvbGxhcjpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItY29tbWVudC1kb2xsYXIpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1jb21tZW50LWRvdHM6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWNvbW1lbnQtZG90cyk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWNvbW1lbnQtc2xhc2g6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWNvbW1lbnQtc2xhc2gpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1jb21tZW50czpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItY29tbWVudHMpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1jb21tZW50cy1kb2xsYXI6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWNvbW1lbnRzLWRvbGxhcik7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWNvbXBhY3QtZGlzYzpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItY29tcGFjdC1kaXNjKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tY29tcGFzczpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItY29tcGFzcyk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWNvbXByZXNzOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1jb21wcmVzcyk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWNvbXByZXNzLWFycm93cy1hbHQ6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWNvbXByZXNzLWFycm93cy1hbHQpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1jb25jaWVyZ2UtYmVsbDpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItY29uY2llcmdlLWJlbGwpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1jb25mbHVlbmNlOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1jb25mbHVlbmNlKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tY29ubmVjdGRldmVsb3A6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWNvbm5lY3RkZXZlbG9wKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tY29udGFvOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1jb250YW8pOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1jb29raWU6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWNvb2tpZSk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWNvb2tpZS1iaXRlOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1jb29raWUtYml0ZSk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWNvcHk6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWNvcHkpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1jb3B5cmlnaHQ6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWNvcHlyaWdodCk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWNvdWNoOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1jb3VjaCk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWNwYW5lbDpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItY3BhbmVsKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tY3JlYXRpdmUtY29tbW9uczpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItY3JlYXRpdmUtY29tbW9ucyk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWNyZWF0aXZlLWNvbW1vbnMtYnk6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWNyZWF0aXZlLWNvbW1vbnMtYnkpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1jcmVhdGl2ZS1jb21tb25zLW5jOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1jcmVhdGl2ZS1jb21tb25zLW5jKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tY3JlYXRpdmUtY29tbW9ucy1uYy1ldTpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItY3JlYXRpdmUtY29tbW9ucy1uYy1ldSk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWNyZWF0aXZlLWNvbW1vbnMtbmMtanA6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWNyZWF0aXZlLWNvbW1vbnMtbmMtanApOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1jcmVhdGl2ZS1jb21tb25zLW5kOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1jcmVhdGl2ZS1jb21tb25zLW5kKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tY3JlYXRpdmUtY29tbW9ucy1wZDpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItY3JlYXRpdmUtY29tbW9ucy1wZCk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWNyZWF0aXZlLWNvbW1vbnMtcGQtYWx0OmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1jcmVhdGl2ZS1jb21tb25zLXBkLWFsdCk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWNyZWF0aXZlLWNvbW1vbnMtcmVtaXg6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWNyZWF0aXZlLWNvbW1vbnMtcmVtaXgpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1jcmVhdGl2ZS1jb21tb25zLXNhOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1jcmVhdGl2ZS1jb21tb25zLXNhKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tY3JlYXRpdmUtY29tbW9ucy1zYW1wbGluZzpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItY3JlYXRpdmUtY29tbW9ucy1zYW1wbGluZyk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWNyZWF0aXZlLWNvbW1vbnMtc2FtcGxpbmctcGx1czpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItY3JlYXRpdmUtY29tbW9ucy1zYW1wbGluZy1wbHVzKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tY3JlYXRpdmUtY29tbW9ucy1zaGFyZTpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItY3JlYXRpdmUtY29tbW9ucy1zaGFyZSk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWNyZWF0aXZlLWNvbW1vbnMtemVybzpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItY3JlYXRpdmUtY29tbW9ucy16ZXJvKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tY3JlZGl0LWNhcmQ6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWNyZWRpdC1jYXJkKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tY3JpdGljYWwtcm9sZTpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItY3JpdGljYWwtcm9sZSk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWNyb3A6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWNyb3ApOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1jcm9wLWFsdDpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItY3JvcC1hbHQpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1jcm9zczpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItY3Jvc3MpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1jcm9zc2hhaXJzOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1jcm9zc2hhaXJzKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tY3JvdzpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItY3Jvdyk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWNyb3duOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1jcm93bik7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWNzczM6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWNzczMpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1jc3MzLWFsdDpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItY3NzMy1hbHQpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1jdWJlOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1jdWJlKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tY3ViZXM6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWN1YmVzKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tY3V0OmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1jdXQpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1jdXR0bGVmaXNoOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1jdXR0bGVmaXNoKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tZC1hbmQtZDpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItZC1hbmQtZCk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWQtYW5kLWQtYmV5b25kOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1kLWFuZC1kLWJleW9uZCk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWRhc2hjdWJlOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1kYXNoY3ViZSk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWRhdGFiYXNlOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1kYXRhYmFzZSk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWRlYWY6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWRlYWYpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1kZWxpY2lvdXM6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWRlbGljaW91cyk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWRlbW9jcmF0OmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1kZW1vY3JhdCk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWRlcGxveWRvZzpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItZGVwbG95ZG9nKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tZGVza3BybzpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItZGVza3Bybyk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWRlc2t0b3A6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWRlc2t0b3ApOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1kZXY6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWRldik7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWRldmlhbnRhcnQ6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWRldmlhbnRhcnQpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1kaGFybWFjaGFrcmE6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWRoYXJtYWNoYWtyYSk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWRobDpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItZGhsKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tZGlhZ25vc2VzOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1kaWFnbm9zZXMpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1kaWFzcG9yYTpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItZGlhc3BvcmEpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1kaWNlOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1kaWNlKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tZGljZS1kMjA6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWRpY2UtZDIwKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tZGljZS1kNjpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItZGljZS1kNik7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWRpY2UtZml2ZTpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItZGljZS1maXZlKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tZGljZS1mb3VyOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1kaWNlLWZvdXIpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1kaWNlLW9uZTpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItZGljZS1vbmUpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1kaWNlLXNpeDpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItZGljZS1zaXgpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1kaWNlLXRocmVlOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1kaWNlLXRocmVlKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tZGljZS10d286YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWRpY2UtdHdvKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tZGlnZzpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItZGlnZyk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWRpZ2l0YWwtb2NlYW46YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWRpZ2l0YWwtb2NlYW4pOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1kaWdpdGFsLXRhY2hvZ3JhcGg6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWRpZ2l0YWwtdGFjaG9ncmFwaCk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWRpcmVjdGlvbnM6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWRpcmVjdGlvbnMpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1kaXNjb3JkOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1kaXNjb3JkKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tZGlzY291cnNlOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1kaXNjb3Vyc2UpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1kaXZpZGU6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWRpdmlkZSk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWRpenp5OmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1kaXp6eSk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWRuYTpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItZG5hKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tZG9jaHViOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1kb2NodWIpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1kb2NrZXI6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWRvY2tlcik7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWRvZzpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItZG9nKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tZG9sbGFyLXNpZ246YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWRvbGxhci1zaWduKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tZG9sbHk6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWRvbGx5KTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tZG9sbHktZmxhdGJlZDpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItZG9sbHktZmxhdGJlZCk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWRvbmF0ZTpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItZG9uYXRlKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tZG9vci1jbG9zZWQ6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWRvb3ItY2xvc2VkKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tZG9vci1vcGVuOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1kb29yLW9wZW4pOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1kb3QtY2lyY2xlOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1kb3QtY2lyY2xlKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tZG92ZTpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItZG92ZSk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWRvd25sb2FkOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1kb3dubG9hZCk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWRyYWZ0MmRpZ2l0YWw6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWRyYWZ0MmRpZ2l0YWwpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1kcmFmdGluZy1jb21wYXNzOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1kcmFmdGluZy1jb21wYXNzKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tZHJhZ29uOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1kcmFnb24pOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1kcmF3LXBvbHlnb246YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWRyYXctcG9seWdvbik7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWRyaWJiYmxlOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1kcmliYmJsZSk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWRyaWJiYmxlLXNxdWFyZTpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItZHJpYmJibGUtc3F1YXJlKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tZHJvcGJveDpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItZHJvcGJveCk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWRydW06YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWRydW0pOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1kcnVtLXN0ZWVscGFuOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1kcnVtLXN0ZWVscGFuKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tZHJ1bXN0aWNrLWJpdGU6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWRydW1zdGljay1iaXRlKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tZHJ1cGFsOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1kcnVwYWwpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1kdW1iYmVsbDpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItZHVtYmJlbGwpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1kdW1wc3RlcjpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItZHVtcHN0ZXIpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1kdW1wc3Rlci1maXJlOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1kdW1wc3Rlci1maXJlKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tZHVuZ2VvbjpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItZHVuZ2Vvbik7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWR5YWxvZzpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItZHlhbG9nKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tZWFybHliaXJkczpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItZWFybHliaXJkcyk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWViYXk6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWViYXkpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1lZGdlOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1lZGdlKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tZWRpdDpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItZWRpdCk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWVqZWN0OmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1lamVjdCk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWVsZW1lbnRvcjpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItZWxlbWVudG9yKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tZWxsaXBzaXMtaDpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItZWxsaXBzaXMtaCk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWVsbGlwc2lzLXY6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWVsbGlwc2lzLXYpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1lbGxvOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1lbGxvKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tZW1iZXI6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWVtYmVyKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tZW1waXJlOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1lbXBpcmUpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1lbnZlbG9wZTpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItZW52ZWxvcGUpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1lbnZlbG9wZS1vcGVuOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1lbnZlbG9wZS1vcGVuKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tZW52ZWxvcGUtb3Blbi10ZXh0OmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1lbnZlbG9wZS1vcGVuLXRleHQpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1lbnZlbG9wZS1zcXVhcmU6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWVudmVsb3BlLXNxdWFyZSk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWVudmlyYTpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItZW52aXJhKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tZXF1YWxzOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1lcXVhbHMpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1lcmFzZXI6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWVyYXNlcik7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWVybGFuZzpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItZXJsYW5nKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tZXRoZXJldW06YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWV0aGVyZXVtKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tZXRoZXJuZXQ6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWV0aGVybmV0KTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tZXRzeTpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItZXRzeSk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWV1cm8tc2lnbjpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItZXVyby1zaWduKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tZXhjaGFuZ2UtYWx0OmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1leGNoYW5nZS1hbHQpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1leGNsYW1hdGlvbjpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItZXhjbGFtYXRpb24pOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1leGNsYW1hdGlvbi1jaXJjbGU6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWV4Y2xhbWF0aW9uLWNpcmNsZSk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWV4Y2xhbWF0aW9uLXRyaWFuZ2xlOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1leGNsYW1hdGlvbi10cmlhbmdsZSk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWV4cGFuZDpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItZXhwYW5kKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tZXhwYW5kLWFycm93cy1hbHQ6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWV4cGFuZC1hcnJvd3MtYWx0KTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tZXhwZWRpdGVkc3NsOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1leHBlZGl0ZWRzc2wpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1leHRlcm5hbC1saW5rLWFsdDpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItZXh0ZXJuYWwtbGluay1hbHQpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1leHRlcm5hbC1saW5rLXNxdWFyZS1hbHQ6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWV4dGVybmFsLWxpbmstc3F1YXJlLWFsdCk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWV5ZTpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItZXllKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tZXllLWRyb3BwZXI6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWV5ZS1kcm9wcGVyKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tZXllLXNsYXNoOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1leWUtc2xhc2gpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1mYWNlYm9vazpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItZmFjZWJvb2spOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1mYWNlYm9vay1mOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1mYWNlYm9vay1mKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tZmFjZWJvb2stbWVzc2VuZ2VyOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1mYWNlYm9vay1tZXNzZW5nZXIpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1mYWNlYm9vay1zcXVhcmU6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWZhY2Vib29rLXNxdWFyZSk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWZhbnRhc3ktZmxpZ2h0LWdhbWVzOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1mYW50YXN5LWZsaWdodC1nYW1lcyk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWZhc3QtYmFja3dhcmQ6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWZhc3QtYmFja3dhcmQpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1mYXN0LWZvcndhcmQ6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWZhc3QtZm9yd2FyZCk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWZheDpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItZmF4KTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tZmVhdGhlcjpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItZmVhdGhlcik7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWZlYXRoZXItYWx0OmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1mZWF0aGVyLWFsdCk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWZlZGV4OmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1mZWRleCk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWZlZG9yYTpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItZmVkb3JhKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tZmVtYWxlOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1mZW1hbGUpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1maWdodGVyLWpldDpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItZmlnaHRlci1qZXQpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1maWdtYTpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItZmlnbWEpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1maWxlOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1maWxlKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tZmlsZS1hbHQ6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWZpbGUtYWx0KTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tZmlsZS1hcmNoaXZlOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1maWxlLWFyY2hpdmUpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1maWxlLWF1ZGlvOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1maWxlLWF1ZGlvKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tZmlsZS1jb2RlOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1maWxlLWNvZGUpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1maWxlLWNvbnRyYWN0OmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1maWxlLWNvbnRyYWN0KTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tZmlsZS1jc3Y6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWZpbGUtY3N2KTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tZmlsZS1kb3dubG9hZDpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItZmlsZS1kb3dubG9hZCk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWZpbGUtZXhjZWw6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWZpbGUtZXhjZWwpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1maWxlLWV4cG9ydDpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItZmlsZS1leHBvcnQpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1maWxlLWltYWdlOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1maWxlLWltYWdlKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tZmlsZS1pbXBvcnQ6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWZpbGUtaW1wb3J0KTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tZmlsZS1pbnZvaWNlOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1maWxlLWludm9pY2UpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1maWxlLWludm9pY2UtZG9sbGFyOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1maWxlLWludm9pY2UtZG9sbGFyKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tZmlsZS1tZWRpY2FsOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1maWxlLW1lZGljYWwpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1maWxlLW1lZGljYWwtYWx0OmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1maWxlLW1lZGljYWwtYWx0KTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tZmlsZS1wZGY6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWZpbGUtcGRmKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tZmlsZS1wb3dlcnBvaW50OmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1maWxlLXBvd2VycG9pbnQpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1maWxlLXByZXNjcmlwdGlvbjpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItZmlsZS1wcmVzY3JpcHRpb24pOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1maWxlLXNpZ25hdHVyZTpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItZmlsZS1zaWduYXR1cmUpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1maWxlLXVwbG9hZDpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItZmlsZS11cGxvYWQpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1maWxlLXZpZGVvOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1maWxlLXZpZGVvKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tZmlsZS13b3JkOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1maWxlLXdvcmQpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1maWxsOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1maWxsKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tZmlsbC1kcmlwOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1maWxsLWRyaXApOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1maWxtOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1maWxtKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tZmlsdGVyOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1maWx0ZXIpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1maW5nZXJwcmludDpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItZmluZ2VycHJpbnQpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1maXJlOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1maXJlKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tZmlyZS1hbHQ6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWZpcmUtYWx0KTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tZmlyZS1leHRpbmd1aXNoZXI6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWZpcmUtZXh0aW5ndWlzaGVyKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tZmlyZWZveDpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItZmlyZWZveCk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWZpcnN0LWFpZDpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItZmlyc3QtYWlkKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tZmlyc3Qtb3JkZXI6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWZpcnN0LW9yZGVyKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tZmlyc3Qtb3JkZXItYWx0OmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1maXJzdC1vcmRlci1hbHQpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1maXJzdGRyYWZ0OmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1maXJzdGRyYWZ0KTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tZmlzaDpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItZmlzaCk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWZpc3QtcmFpc2VkOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1maXN0LXJhaXNlZCk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWZsYWc6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWZsYWcpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1mbGFnLWNoZWNrZXJlZDpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItZmxhZy1jaGVja2VyZWQpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1mbGFnLXVzYTpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItZmxhZy11c2EpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1mbGFzazpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItZmxhc2spOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1mbGlja3I6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWZsaWNrcik7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWZsaXBib2FyZDpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItZmxpcGJvYXJkKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tZmx1c2hlZDpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItZmx1c2hlZCk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWZseTpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItZmx5KTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tZm9sZGVyOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1mb2xkZXIpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1mb2xkZXItbWludXM6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWZvbGRlci1taW51cyk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWZvbGRlci1vcGVuOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1mb2xkZXItb3Blbik7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWZvbGRlci1wbHVzOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1mb2xkZXItcGx1cyk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWZvbnQ6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWZvbnQpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1mb250LWF3ZXNvbWU6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWZvbnQtYXdlc29tZSk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWZvbnQtYXdlc29tZS1hbHQ6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWZvbnQtYXdlc29tZS1hbHQpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1mb250LWF3ZXNvbWUtZmxhZzpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItZm9udC1hd2Vzb21lLWZsYWcpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1mb250LWF3ZXNvbWUtbG9nby1mdWxsOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1mb250LWF3ZXNvbWUtbG9nby1mdWxsKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tZm9udGljb25zOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1mb250aWNvbnMpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1mb250aWNvbnMtZmk6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWZvbnRpY29ucy1maSk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWZvb3RiYWxsLWJhbGw6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWZvb3RiYWxsLWJhbGwpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1mb3J0LWF3ZXNvbWU6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWZvcnQtYXdlc29tZSk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWZvcnQtYXdlc29tZS1hbHQ6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWZvcnQtYXdlc29tZS1hbHQpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1mb3J1bWJlZTpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItZm9ydW1iZWUpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1mb3J3YXJkOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1mb3J3YXJkKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tZm91cnNxdWFyZTpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItZm91cnNxdWFyZSk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWZyZWUtY29kZS1jYW1wOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1mcmVlLWNvZGUtY2FtcCk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWZyZWVic2Q6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWZyZWVic2QpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1mcm9nOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1mcm9nKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tZnJvd246YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWZyb3duKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tZnJvd24tb3BlbjpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItZnJvd24tb3Blbik7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWZ1bGNydW06YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWZ1bGNydW0pOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1mdW5uZWwtZG9sbGFyOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1mdW5uZWwtZG9sbGFyKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tZnV0Ym9sOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1mdXRib2wpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1nYWxhY3RpYy1yZXB1YmxpYzpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItZ2FsYWN0aWMtcmVwdWJsaWMpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1nYWxhY3RpYy1zZW5hdGU6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWdhbGFjdGljLXNlbmF0ZSk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWdhbWVwYWQ6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWdhbWVwYWQpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1nYXMtcHVtcDpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItZ2FzLXB1bXApOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1nYXZlbDpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItZ2F2ZWwpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1nZW06YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWdlbSk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWdlbmRlcmxlc3M6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWdlbmRlcmxlc3MpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1nZXQtcG9ja2V0OmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1nZXQtcG9ja2V0KTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tZ2c6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWdnKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tZ2ctY2lyY2xlOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1nZy1jaXJjbGUpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1naG9zdDpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItZ2hvc3QpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1naWZ0OmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1naWZ0KTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tZ2lmdHM6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWdpZnRzKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tZ2l0OmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1naXQpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1naXQtc3F1YXJlOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1naXQtc3F1YXJlKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tZ2l0aHViOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1naXRodWIpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1naXRodWItYWx0OmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1naXRodWItYWx0KTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tZ2l0aHViLXNxdWFyZTpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItZ2l0aHViLXNxdWFyZSk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWdpdGtyYWtlbjpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItZ2l0a3Jha2VuKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tZ2l0bGFiOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1naXRsYWIpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1naXR0ZXI6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWdpdHRlcik7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWdsYXNzLWNoZWVyczpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItZ2xhc3MtY2hlZXJzKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tZ2xhc3MtbWFydGluaTpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItZ2xhc3MtbWFydGluaSk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWdsYXNzLW1hcnRpbmktYWx0OmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1nbGFzcy1tYXJ0aW5pLWFsdCk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWdsYXNzLXdoaXNrZXk6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWdsYXNzLXdoaXNrZXkpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1nbGFzc2VzOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1nbGFzc2VzKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tZ2xpZGU6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWdsaWRlKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tZ2xpZGUtZzpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItZ2xpZGUtZyk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWdsb2JlOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1nbG9iZSk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWdsb2JlLWFmcmljYTpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItZ2xvYmUtYWZyaWNhKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tZ2xvYmUtYW1lcmljYXM6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWdsb2JlLWFtZXJpY2FzKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tZ2xvYmUtYXNpYTpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItZ2xvYmUtYXNpYSk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWdsb2JlLWV1cm9wZTpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItZ2xvYmUtZXVyb3BlKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tZ29mb3JlOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1nb2ZvcmUpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1nb2xmLWJhbGw6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWdvbGYtYmFsbCk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWdvb2RyZWFkczpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItZ29vZHJlYWRzKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tZ29vZHJlYWRzLWc6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWdvb2RyZWFkcy1nKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tZ29vZ2xlOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1nb29nbGUpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1nb29nbGUtZHJpdmU6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWdvb2dsZS1kcml2ZSk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWdvb2dsZS1wbGF5OmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1nb29nbGUtcGxheSk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWdvb2dsZS1wbHVzOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1nb29nbGUtcGx1cyk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWdvb2dsZS1wbHVzLWc6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWdvb2dsZS1wbHVzLWcpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1nb29nbGUtcGx1cy1zcXVhcmU6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWdvb2dsZS1wbHVzLXNxdWFyZSk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWdvb2dsZS13YWxsZXQ6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWdvb2dsZS13YWxsZXQpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1nb3B1cmFtOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1nb3B1cmFtKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tZ3JhZHVhdGlvbi1jYXA6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWdyYWR1YXRpb24tY2FwKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tZ3JhdGlwYXk6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWdyYXRpcGF5KTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tZ3JhdjpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItZ3Jhdik7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWdyZWF0ZXItdGhhbjpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItZ3JlYXRlci10aGFuKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tZ3JlYXRlci10aGFuLWVxdWFsOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1ncmVhdGVyLXRoYW4tZXF1YWwpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1ncmltYWNlOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1ncmltYWNlKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tZ3JpbjpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItZ3Jpbik7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWdyaW4tYWx0OmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1ncmluLWFsdCk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWdyaW4tYmVhbTpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItZ3Jpbi1iZWFtKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tZ3Jpbi1iZWFtLXN3ZWF0OmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1ncmluLWJlYW0tc3dlYXQpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1ncmluLWhlYXJ0czpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItZ3Jpbi1oZWFydHMpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1ncmluLXNxdWludDpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItZ3Jpbi1zcXVpbnQpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1ncmluLXNxdWludC10ZWFyczpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItZ3Jpbi1zcXVpbnQtdGVhcnMpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1ncmluLXN0YXJzOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1ncmluLXN0YXJzKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tZ3Jpbi10ZWFyczpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItZ3Jpbi10ZWFycyk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWdyaW4tdG9uZ3VlOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1ncmluLXRvbmd1ZSk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWdyaW4tdG9uZ3VlLXNxdWludDpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItZ3Jpbi10b25ndWUtc3F1aW50KTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tZ3Jpbi10b25ndWUtd2luazpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItZ3Jpbi10b25ndWUtd2luayk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWdyaW4td2luazpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItZ3Jpbi13aW5rKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tZ3JpcC1ob3Jpem9udGFsOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1ncmlwLWhvcml6b250YWwpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1ncmlwLWxpbmVzOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1ncmlwLWxpbmVzKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tZ3JpcC1saW5lcy12ZXJ0aWNhbDpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItZ3JpcC1saW5lcy12ZXJ0aWNhbCk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWdyaXAtdmVydGljYWw6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWdyaXAtdmVydGljYWwpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1ncmlwZmlyZTpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItZ3JpcGZpcmUpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1ncnVudDpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItZ3J1bnQpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1ndWl0YXI6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWd1aXRhcik7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWd1bHA6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWd1bHApOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1oLXNxdWFyZTpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItaC1zcXVhcmUpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1oYWNrZXItbmV3czpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItaGFja2VyLW5ld3MpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1oYWNrZXItbmV3cy1zcXVhcmU6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWhhY2tlci1uZXdzLXNxdWFyZSk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWhhY2tlcnJhbms6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWhhY2tlcnJhbmspOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1oYW1tZXI6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWhhbW1lcik7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWhhbXNhOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1oYW1zYSk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWhhbmQtaG9sZGluZzpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItaGFuZC1ob2xkaW5nKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0taGFuZC1ob2xkaW5nLWhlYXJ0OmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1oYW5kLWhvbGRpbmctaGVhcnQpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1oYW5kLWhvbGRpbmctdXNkOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1oYW5kLWhvbGRpbmctdXNkKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0taGFuZC1saXphcmQ6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWhhbmQtbGl6YXJkKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0taGFuZC1wYXBlcjpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItaGFuZC1wYXBlcik7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWhhbmQtcGVhY2U6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWhhbmQtcGVhY2UpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1oYW5kLXBvaW50LWRvd246YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWhhbmQtcG9pbnQtZG93bik7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWhhbmQtcG9pbnQtbGVmdDpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItaGFuZC1wb2ludC1sZWZ0KTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0taGFuZC1wb2ludC1yaWdodDpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItaGFuZC1wb2ludC1yaWdodCk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWhhbmQtcG9pbnQtdXA6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWhhbmQtcG9pbnQtdXApOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1oYW5kLXBvaW50ZXI6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWhhbmQtcG9pbnRlcik7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWhhbmQtcm9jazpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItaGFuZC1yb2NrKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0taGFuZC1zY2lzc29yczpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItaGFuZC1zY2lzc29ycyk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWhhbmQtc3BvY2s6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWhhbmQtc3BvY2spOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1oYW5kczpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItaGFuZHMpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1oYW5kcy1oZWxwaW5nOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1oYW5kcy1oZWxwaW5nKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0taGFuZHNoYWtlOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1oYW5kc2hha2UpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1oYW51a2lhaDpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItaGFudWtpYWgpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1oYXNodGFnOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1oYXNodGFnKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0taGF0LXdpemFyZDpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItaGF0LXdpemFyZCk7IH1cclxuLyouI3skZmEtY3NzLXByZWZpeH0taGF5a2FsOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1oYXlrYWwpOyB9Ki9cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWhkZDpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItaGRkKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0taGVhZGluZzpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItaGVhZGluZyk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWhlYWRwaG9uZXM6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWhlYWRwaG9uZXMpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1oZWFkcGhvbmVzLWFsdDpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItaGVhZHBob25lcy1hbHQpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1oZWFkc2V0OmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1oZWFkc2V0KTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0taGVhcnQ6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWhlYXJ0KTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0taGVhcnQtYnJva2VuOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1oZWFydC1icm9rZW4pOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1oZWFydGJlYXQ6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWhlYXJ0YmVhdCk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWhlbGljb3B0ZXI6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWhlbGljb3B0ZXIpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1oaWdobGlnaHRlcjpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItaGlnaGxpZ2h0ZXIpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1oaWtpbmc6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWhpa2luZyk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWhpcHBvOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1oaXBwbyk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWhpcHM6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWhpcHMpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1oaXJlLWEtaGVscGVyOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1oaXJlLWEtaGVscGVyKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0taGlzdG9yeTpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItaGlzdG9yeSk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWhvY2tleS1wdWNrOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1ob2NrZXktcHVjayk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWhvbGx5LWJlcnJ5OmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1ob2xseS1iZXJyeSk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWhvbWU6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWhvbWUpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1ob29saTpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItaG9vbGkpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1ob3JuYmlsbDpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItaG9ybmJpbGwpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1ob3JzZTpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItaG9yc2UpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1ob3JzZS1oZWFkOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1ob3JzZS1oZWFkKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0taG9zcGl0YWw6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWhvc3BpdGFsKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0taG9zcGl0YWwtYWx0OmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1ob3NwaXRhbC1hbHQpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1ob3NwaXRhbC1zeW1ib2w6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWhvc3BpdGFsLXN5bWJvbCk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWhvdC10dWI6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWhvdC10dWIpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1ob3RlbDpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItaG90ZWwpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1ob3RqYXI6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWhvdGphcik7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWhvdXJnbGFzczpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItaG91cmdsYXNzKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0taG91cmdsYXNzLWVuZDpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItaG91cmdsYXNzLWVuZCk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWhvdXJnbGFzcy1oYWxmOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1ob3VyZ2xhc3MtaGFsZik7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWhvdXJnbGFzcy1zdGFydDpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItaG91cmdsYXNzLXN0YXJ0KTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0taG91c2UtZGFtYWdlOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1ob3VzZS1kYW1hZ2UpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1ob3V6ejpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItaG91enopOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1ocnl2bmlhOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1ocnl2bmlhKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0taHRtbDU6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWh0bWw1KTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0taHVic3BvdDpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItaHVic3BvdCk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWktY3Vyc29yOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1pLWN1cnNvcik7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWljaWNsZXM6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWljaWNsZXMpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1pZC1iYWRnZTpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItaWQtYmFkZ2UpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1pZC1jYXJkOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1pZC1jYXJkKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0taWQtY2FyZC1hbHQ6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWlkLWNhcmQtYWx0KTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0taWdsb286YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWlnbG9vKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0taW1hZ2U6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWltYWdlKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0taW1hZ2VzOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1pbWFnZXMpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1pbWRiOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1pbWRiKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0taW5ib3g6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWluYm94KTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0taW5kZW50OmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1pbmRlbnQpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1pbmR1c3RyeTpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItaW5kdXN0cnkpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1pbmZpbml0eTpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItaW5maW5pdHkpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1pbmZvOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1pbmZvKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0taW5mby1jaXJjbGU6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWluZm8tY2lyY2xlKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0taW5zdGFncmFtOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1pbnN0YWdyYW0pOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1pbnRlcmNvbTpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItaW50ZXJjb20pOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1pbnRlcm5ldC1leHBsb3JlcjpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItaW50ZXJuZXQtZXhwbG9yZXIpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1pbnZpc2lvbjpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItaW52aXNpb24pOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1pb3hob3N0OmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1pb3hob3N0KTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0taXRhbGljOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1pdGFsaWMpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1pdHVuZXM6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWl0dW5lcyk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWl0dW5lcy1ub3RlOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1pdHVuZXMtbm90ZSk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWphdmE6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWphdmEpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1qZWRpOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1qZWRpKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tamVkaS1vcmRlcjpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItamVkaS1vcmRlcik7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWplbmtpbnM6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWplbmtpbnMpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1qaXJhOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1qaXJhKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tam9nZXQ6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWpvZ2V0KTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tam9pbnQ6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWpvaW50KTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tam9vbWxhOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1qb29tbGEpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1qb3VybmFsLXdoaWxsczpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItam91cm5hbC13aGlsbHMpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1qczpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItanMpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1qcy1zcXVhcmU6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWpzLXNxdWFyZSk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWpzZmlkZGxlOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1qc2ZpZGRsZSk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWthYWJhOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1rYWFiYSk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWthZ2dsZTpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXIta2FnZ2xlKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0ta2V5OmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1rZXkpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1rZXliYXNlOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1rZXliYXNlKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0ta2V5Ym9hcmQ6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWtleWJvYXJkKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0ta2V5Y2RuOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1rZXljZG4pOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1raGFuZGE6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWtoYW5kYSk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWtpY2tzdGFydGVyOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1raWNrc3RhcnRlcik7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWtpY2tzdGFydGVyLWs6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWtpY2tzdGFydGVyLWspOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1raXNzOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1raXNzKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0ta2lzcy1iZWFtOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1raXNzLWJlYW0pOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1raXNzLXdpbmstaGVhcnQ6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWtpc3Mtd2luay1oZWFydCk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWtpd2ktYmlyZDpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXIta2l3aS1iaXJkKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0ta29ydnVlOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1rb3J2dWUpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1sYW5kbWFyazpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItbGFuZG1hcmspOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1sYW5ndWFnZTpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItbGFuZ3VhZ2UpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1sYXB0b3A6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWxhcHRvcCk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWxhcHRvcC1jb2RlOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1sYXB0b3AtY29kZSk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWxhcmF2ZWw6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWxhcmF2ZWwpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1sYXN0Zm06YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWxhc3RmbSk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWxhc3RmbS1zcXVhcmU6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWxhc3RmbS1zcXVhcmUpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1sYXVnaDpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItbGF1Z2gpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1sYXVnaC1iZWFtOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1sYXVnaC1iZWFtKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tbGF1Z2gtc3F1aW50OmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1sYXVnaC1zcXVpbnQpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1sYXVnaC13aW5rOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1sYXVnaC13aW5rKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tbGF5ZXItZ3JvdXA6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWxheWVyLWdyb3VwKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tbGVhZjpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItbGVhZik7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWxlYW5wdWI6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWxlYW5wdWIpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1sZW1vbjpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItbGVtb24pOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1sZXNzOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1sZXNzKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tbGVzcy10aGFuOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1sZXNzLXRoYW4pOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1sZXNzLXRoYW4tZXF1YWw6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWxlc3MtdGhhbi1lcXVhbCk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWxldmVsLWRvd24tYWx0OmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1sZXZlbC1kb3duLWFsdCk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWxldmVsLXVwLWFsdDpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItbGV2ZWwtdXAtYWx0KTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tbGlmZS1yaW5nOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1saWZlLXJpbmcpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1saWdodGJ1bGI6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWxpZ2h0YnVsYik7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWxpbmU6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWxpbmUpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1saW5rOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1saW5rKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tbGlua2VkaW46YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWxpbmtlZGluKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tbGlua2VkaW4taW46YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWxpbmtlZGluLWluKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tbGlub2RlOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1saW5vZGUpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1saW51eDpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItbGludXgpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1saXJhLXNpZ246YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWxpcmEtc2lnbik7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWxpc3Q6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWxpc3QpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1saXN0LWFsdDpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItbGlzdC1hbHQpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1saXN0LW9sOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1saXN0LW9sKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tbGlzdC11bDpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItbGlzdC11bCk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWxvY2F0aW9uLWFycm93OmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1sb2NhdGlvbi1hcnJvdyk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWxvY2s6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWxvY2spOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1sb2NrLW9wZW46YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWxvY2stb3Blbik7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWxvbmctYXJyb3ctYWx0LWRvd246YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWxvbmctYXJyb3ctYWx0LWRvd24pOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1sb25nLWFycm93LWFsdC1sZWZ0OmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1sb25nLWFycm93LWFsdC1sZWZ0KTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tbG9uZy1hcnJvdy1hbHQtcmlnaHQ6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWxvbmctYXJyb3ctYWx0LXJpZ2h0KTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tbG9uZy1hcnJvdy1hbHQtdXA6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLWxvbmctYXJyb3ctYWx0LXVwKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tbG93LXZpc2lvbjpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItbG93LXZpc2lvbik7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LWx1Z2dhZ2UtY2FydDpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItbHVnZ2FnZS1jYXJ0KTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tbHlmdDpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItbHlmdCk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LW1hZ2VudG86YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLW1hZ2VudG8pOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1tYWdpYzpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItbWFnaWMpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1tYWduZXQ6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLW1hZ25ldCk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LW1haWwtYnVsazpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItbWFpbC1idWxrKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tbWFpbGNoaW1wOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1tYWlsY2hpbXApOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1tYWxlOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1tYWxlKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tbWFuZGFsb3JpYW46YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLW1hbmRhbG9yaWFuKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tbWFwOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1tYXApOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1tYXAtbWFya2VkOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1tYXAtbWFya2VkKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tbWFwLW1hcmtlZC1hbHQ6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLW1hcC1tYXJrZWQtYWx0KTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tbWFwLW1hcmtlcjpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItbWFwLW1hcmtlcik7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LW1hcC1tYXJrZXItYWx0OmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1tYXAtbWFya2VyLWFsdCk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LW1hcC1waW46YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLW1hcC1waW4pOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1tYXAtc2lnbnM6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLW1hcC1zaWducyk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LW1hcmtkb3duOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1tYXJrZG93bik7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LW1hcmtlcjpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItbWFya2VyKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tbWFyczpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItbWFycyk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LW1hcnMtZG91YmxlOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1tYXJzLWRvdWJsZSk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LW1hcnMtc3Ryb2tlOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1tYXJzLXN0cm9rZSk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LW1hcnMtc3Ryb2tlLWg6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLW1hcnMtc3Ryb2tlLWgpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1tYXJzLXN0cm9rZS12OmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1tYXJzLXN0cm9rZS12KTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tbWFzazpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItbWFzayk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LW1hc3RvZG9uOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1tYXN0b2Rvbik7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LW1heGNkbjpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItbWF4Y2RuKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tbWVkYWw6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLW1lZGFsKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tbWVkYXBwczpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItbWVkYXBwcyk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LW1lZGl1bTpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItbWVkaXVtKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tbWVkaXVtLW06YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLW1lZGl1bS1tKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tbWVka2l0OmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1tZWRraXQpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1tZWRydDpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItbWVkcnQpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1tZWV0dXA6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLW1lZXR1cCk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LW1lZ2Fwb3J0OmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1tZWdhcG9ydCk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LW1laDpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItbWVoKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tbWVoLWJsYW5rOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1tZWgtYmxhbmspOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1tZWgtcm9sbGluZy1leWVzOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1tZWgtcm9sbGluZy1leWVzKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tbWVtb3J5OmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1tZW1vcnkpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1tZW5kZWxleTpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItbWVuZGVsZXkpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1tZW5vcmFoOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1tZW5vcmFoKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tbWVyY3VyeTpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItbWVyY3VyeSk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LW1ldGVvcjpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItbWV0ZW9yKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tbWljcm9jaGlwOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1taWNyb2NoaXApOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1taWNyb3Bob25lOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1taWNyb3Bob25lKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tbWljcm9waG9uZS1hbHQ6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLW1pY3JvcGhvbmUtYWx0KTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tbWljcm9waG9uZS1hbHQtc2xhc2g6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLW1pY3JvcGhvbmUtYWx0LXNsYXNoKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tbWljcm9waG9uZS1zbGFzaDpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItbWljcm9waG9uZS1zbGFzaCk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LW1pY3Jvc2NvcGU6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLW1pY3Jvc2NvcGUpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1taWNyb3NvZnQ6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLW1pY3Jvc29mdCk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LW1pbnVzOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1taW51cyk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LW1pbnVzLWNpcmNsZTpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItbWludXMtY2lyY2xlKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tbWludXMtc3F1YXJlOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1taW51cy1zcXVhcmUpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1taXR0ZW46YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLW1pdHRlbik7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LW1peDpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItbWl4KTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tbWl4Y2xvdWQ6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLW1peGNsb3VkKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tbWl6dW5pOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1taXp1bmkpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1tb2JpbGU6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLW1vYmlsZSk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LW1vYmlsZS1hbHQ6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLW1vYmlsZS1hbHQpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1tb2R4OmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1tb2R4KTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tbW9uZXJvOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1tb25lcm8pOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1tb25leS1iaWxsOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1tb25leS1iaWxsKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tbW9uZXktYmlsbC1hbHQ6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLW1vbmV5LWJpbGwtYWx0KTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tbW9uZXktYmlsbC13YXZlOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1tb25leS1iaWxsLXdhdmUpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1tb25leS1iaWxsLXdhdmUtYWx0OmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1tb25leS1iaWxsLXdhdmUtYWx0KTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tbW9uZXktY2hlY2s6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLW1vbmV5LWNoZWNrKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tbW9uZXktY2hlY2stYWx0OmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1tb25leS1jaGVjay1hbHQpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1tb251bWVudDpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItbW9udW1lbnQpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1tb29uOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1tb29uKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tbW9ydGFyLXBlc3RsZTpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItbW9ydGFyLXBlc3RsZSk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LW1vc3F1ZTpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItbW9zcXVlKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tbW90b3JjeWNsZTpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItbW90b3JjeWNsZSk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LW1vdW50YWluOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1tb3VudGFpbik7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LW1vdXNlLXBvaW50ZXI6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLW1vdXNlLXBvaW50ZXIpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1tdWctaG90OmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1tdWctaG90KTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tbXVzaWM6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLW11c2ljKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tbmFwc3RlcjpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItbmFwc3Rlcik7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LW5lb3M6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLW5lb3MpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1uZXR3b3JrLXdpcmVkOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1uZXR3b3JrLXdpcmVkKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tbmV1dGVyOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1uZXV0ZXIpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1uZXdzcGFwZXI6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLW5ld3NwYXBlcik7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LW5pbWJscjpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItbmltYmxyKTsgfVxyXG4vKi4jeyRmYS1jc3MtcHJlZml4fS1uaW50ZW5kby1zd2l0Y2g6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLW5pbnRlbmRvLXN3aXRjaCk7IH0qL1xyXG4uI3skZmEtY3NzLXByZWZpeH0tbm9kZTpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItbm9kZSk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LW5vZGUtanM6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLW5vZGUtanMpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1ub3QtZXF1YWw6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLW5vdC1lcXVhbCk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LW5vdGVzLW1lZGljYWw6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLW5vdGVzLW1lZGljYWwpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1ucG06YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLW5wbSk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LW5zODpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItbnM4KTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tbnV0cml0aW9uaXg6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLW51dHJpdGlvbml4KTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tb2JqZWN0LWdyb3VwOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1vYmplY3QtZ3JvdXApOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1vYmplY3QtdW5ncm91cDpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItb2JqZWN0LXVuZ3JvdXApOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1vZG5va2xhc3NuaWtpOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1vZG5va2xhc3NuaWtpKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tb2Rub2tsYXNzbmlraS1zcXVhcmU6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLW9kbm9rbGFzc25pa2ktc3F1YXJlKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tb2lsLWNhbjpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItb2lsLWNhbik7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LW9sZC1yZXB1YmxpYzpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItb2xkLXJlcHVibGljKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tb206YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLW9tKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tb3BlbmNhcnQ6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLW9wZW5jYXJ0KTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tb3BlbmlkOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1vcGVuaWQpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1vcGVyYTpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItb3BlcmEpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1vcHRpbi1tb25zdGVyOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1vcHRpbi1tb25zdGVyKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tb3NpOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1vc2kpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1vdHRlcjpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItb3R0ZXIpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1vdXRkZW50OmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1vdXRkZW50KTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tcGFnZTQ6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLXBhZ2U0KTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tcGFnZWxpbmVzOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1wYWdlbGluZXMpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1wYWludC1icnVzaDpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItcGFpbnQtYnJ1c2gpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1wYWludC1yb2xsZXI6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLXBhaW50LXJvbGxlcik7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LXBhbGV0dGU6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLXBhbGV0dGUpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1wYWxmZWQ6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLXBhbGZlZCk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LXBhbGxldDpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItcGFsbGV0KTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tcGFwZXItcGxhbmU6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLXBhcGVyLXBsYW5lKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tcGFwZXJjbGlwOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1wYXBlcmNsaXApOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1wYXJhY2h1dGUtYm94OmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1wYXJhY2h1dGUtYm94KTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tcGFyYWdyYXBoOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1wYXJhZ3JhcGgpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1wYXJraW5nOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1wYXJraW5nKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tcGFzc3BvcnQ6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLXBhc3Nwb3J0KTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tcGFzdGFmYXJpYW5pc206YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLXBhc3RhZmFyaWFuaXNtKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tcGFzdGU6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLXBhc3RlKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tcGF0cmVvbjpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItcGF0cmVvbik7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LXBhdXNlOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1wYXVzZSk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LXBhdXNlLWNpcmNsZTpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItcGF1c2UtY2lyY2xlKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tcGF3OmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1wYXcpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1wYXlwYWw6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLXBheXBhbCk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LXBlYWNlOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1wZWFjZSk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LXBlbjpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItcGVuKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tcGVuLWFsdDpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItcGVuLWFsdCk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LXBlbi1mYW5jeTpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItcGVuLWZhbmN5KTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tcGVuLW5pYjpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItcGVuLW5pYik7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LXBlbi1zcXVhcmU6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLXBlbi1zcXVhcmUpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1wZW5jaWwtYWx0OmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1wZW5jaWwtYWx0KTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tcGVuY2lsLXJ1bGVyOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1wZW5jaWwtcnVsZXIpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1wZW5ueS1hcmNhZGU6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLXBlbm55LWFyY2FkZSk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LXBlb3BsZS1jYXJyeTpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItcGVvcGxlLWNhcnJ5KTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tcGVyY2VudDpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItcGVyY2VudCk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LXBlcmNlbnRhZ2U6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLXBlcmNlbnRhZ2UpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1wZXJpc2NvcGU6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLXBlcmlzY29wZSk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LXBlcnNvbi1ib290aDpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItcGVyc29uLWJvb3RoKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tcGhhYnJpY2F0b3I6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLXBoYWJyaWNhdG9yKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tcGhvZW5peC1mcmFtZXdvcms6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLXBob2VuaXgtZnJhbWV3b3JrKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tcGhvZW5peC1zcXVhZHJvbjpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItcGhvZW5peC1zcXVhZHJvbik7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LXBob25lOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1waG9uZSk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LXBob25lLXNsYXNoOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1waG9uZS1zbGFzaCk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LXBob25lLXNxdWFyZTpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItcGhvbmUtc3F1YXJlKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tcGhvbmUtdm9sdW1lOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1waG9uZS12b2x1bWUpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1waHA6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLXBocCk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LXBpZWQtcGlwZXI6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLXBpZWQtcGlwZXIpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1waWVkLXBpcGVyLWFsdDpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItcGllZC1waXBlci1hbHQpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1waWVkLXBpcGVyLWhhdDpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItcGllZC1waXBlci1oYXQpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1waWVkLXBpcGVyLXBwOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1waWVkLXBpcGVyLXBwKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tcGlnZ3ktYmFuazpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItcGlnZ3ktYmFuayk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LXBpbGxzOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1waWxscyk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LXBpbnRlcmVzdDpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItcGludGVyZXN0KTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tcGludGVyZXN0LXA6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLXBpbnRlcmVzdC1wKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tcGludGVyZXN0LXNxdWFyZTpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItcGludGVyZXN0LXNxdWFyZSk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LXBsYWNlLW9mLXdvcnNoaXA6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLXBsYWNlLW9mLXdvcnNoaXApOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1wbGFuZTpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItcGxhbmUpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1wbGFuZS1hcnJpdmFsOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1wbGFuZS1hcnJpdmFsKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tcGxhbmUtZGVwYXJ0dXJlOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1wbGFuZS1kZXBhcnR1cmUpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1wbGF5OmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1wbGF5KTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tcGxheS1jaXJjbGU6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLXBsYXktY2lyY2xlKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tcGxheXN0YXRpb246YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLXBsYXlzdGF0aW9uKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tcGx1ZzpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItcGx1Zyk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LXBsdXM6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLXBsdXMpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1wbHVzLWNpcmNsZTpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItcGx1cy1jaXJjbGUpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1wbHVzLXNxdWFyZTpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItcGx1cy1zcXVhcmUpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1wb2RjYXN0OmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1wb2RjYXN0KTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tcG9sbDpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItcG9sbCk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LXBvbGwtaDpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItcG9sbC1oKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tcG9vOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1wb28pOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1wb28tc3Rvcm06YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLXBvby1zdG9ybSk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LXBvb3A6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLXBvb3ApOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1wb3J0cmFpdDpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItcG9ydHJhaXQpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1wb3VuZC1zaWduOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1wb3VuZC1zaWduKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tcG93ZXItb2ZmOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1wb3dlci1vZmYpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1wcmF5OmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1wcmF5KTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tcHJheWluZy1oYW5kczpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItcHJheWluZy1oYW5kcyk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LXByZXNjcmlwdGlvbjpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItcHJlc2NyaXB0aW9uKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tcHJlc2NyaXB0aW9uLWJvdHRsZTpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItcHJlc2NyaXB0aW9uLWJvdHRsZSk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LXByZXNjcmlwdGlvbi1ib3R0bGUtYWx0OmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1wcmVzY3JpcHRpb24tYm90dGxlLWFsdCk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LXByaW50OmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1wcmludCk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LXByb2NlZHVyZXM6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLXByb2NlZHVyZXMpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1wcm9kdWN0LWh1bnQ6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLXByb2R1Y3QtaHVudCk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LXByb2plY3QtZGlhZ3JhbTpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItcHJvamVjdC1kaWFncmFtKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tcHVzaGVkOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1wdXNoZWQpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1wdXp6bGUtcGllY2U6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLXB1enpsZS1waWVjZSk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LXB5dGhvbjpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItcHl0aG9uKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tcXE6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLXFxKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tcXJjb2RlOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1xcmNvZGUpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1xdWVzdGlvbjpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItcXVlc3Rpb24pOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1xdWVzdGlvbi1jaXJjbGU6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLXF1ZXN0aW9uLWNpcmNsZSk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LXF1aWRkaXRjaDpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItcXVpZGRpdGNoKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tcXVpbnNjYXBlOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1xdWluc2NhcGUpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1xdW9yYTpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItcXVvcmEpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1xdW90ZS1sZWZ0OmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1xdW90ZS1sZWZ0KTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tcXVvdGUtcmlnaHQ6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLXF1b3RlLXJpZ2h0KTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tcXVyYW46YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLXF1cmFuKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tci1wcm9qZWN0OmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1yLXByb2plY3QpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1yYWRpYXRpb246YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLXJhZGlhdGlvbik7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LXJhZGlhdGlvbi1hbHQ6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLXJhZGlhdGlvbi1hbHQpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1yYWluYm93OmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1yYWluYm93KTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tcmFuZG9tOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1yYW5kb20pOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1yYXNwYmVycnktcGk6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLXJhc3BiZXJyeS1waSk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LXJhdmVscnk6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLXJhdmVscnkpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1yZWFjdDpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItcmVhY3QpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1yZWFjdGV1cm9wZTpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItcmVhY3RldXJvcGUpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1yZWFkbWU6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLXJlYWRtZSk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LXJlYmVsOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1yZWJlbCk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LXJlY2VpcHQ6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLXJlY2VpcHQpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1yZWN5Y2xlOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1yZWN5Y2xlKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tcmVkLXJpdmVyOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1yZWQtcml2ZXIpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1yZWRkaXQ6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLXJlZGRpdCk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LXJlZGRpdC1hbGllbjpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItcmVkZGl0LWFsaWVuKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tcmVkZGl0LXNxdWFyZTpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItcmVkZGl0LXNxdWFyZSk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LXJlZGhhdDpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItcmVkaGF0KTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tcmVkbzpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItcmVkbyk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LXJlZG8tYWx0OmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1yZWRvLWFsdCk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LXJlZ2lzdGVyZWQ6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLXJlZ2lzdGVyZWQpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1yZW5yZW46YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLXJlbnJlbik7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LXJlcGx5OmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1yZXBseSk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LXJlcGx5LWFsbDpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItcmVwbHktYWxsKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tcmVwbHlkOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1yZXBseWQpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1yZXB1YmxpY2FuOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1yZXB1YmxpY2FuKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tcmVzZWFyY2hnYXRlOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1yZXNlYXJjaGdhdGUpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1yZXNvbHZpbmc6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLXJlc29sdmluZyk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LXJlc3Ryb29tOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1yZXN0cm9vbSk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LXJldHdlZXQ6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLXJldHdlZXQpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1yZXY6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLXJldik7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LXJpYmJvbjpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItcmliYm9uKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tcmluZzpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItcmluZyk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LXJvYWQ6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLXJvYWQpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1yb2JvdDpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItcm9ib3QpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1yb2NrZXQ6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLXJvY2tldCk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LXJvY2tldGNoYXQ6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLXJvY2tldGNoYXQpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1yb2Nrcm1zOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1yb2Nrcm1zKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tcm91dGU6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLXJvdXRlKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tcnNzOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1yc3MpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1yc3Mtc3F1YXJlOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1yc3Mtc3F1YXJlKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tcnVibGUtc2lnbjpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItcnVibGUtc2lnbik7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LXJ1bGVyOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1ydWxlcik7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LXJ1bGVyLWNvbWJpbmVkOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1ydWxlci1jb21iaW5lZCk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LXJ1bGVyLWhvcml6b250YWw6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLXJ1bGVyLWhvcml6b250YWwpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1ydWxlci12ZXJ0aWNhbDpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItcnVsZXItdmVydGljYWwpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1ydW5uaW5nOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1ydW5uaW5nKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tcnVwZWUtc2lnbjpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItcnVwZWUtc2lnbik7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LXNhZC1jcnk6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLXNhZC1jcnkpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1zYWQtdGVhcjpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItc2FkLXRlYXIpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1zYWZhcmk6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLXNhZmFyaSk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LXNhc3M6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLXNhc3MpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1zYXRlbGxpdGU6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLXNhdGVsbGl0ZSk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LXNhdGVsbGl0ZS1kaXNoOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1zYXRlbGxpdGUtZGlzaCk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LXNhdmU6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLXNhdmUpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1zY2hsaXg6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLXNjaGxpeCk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LXNjaG9vbDpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItc2Nob29sKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tc2NyZXdkcml2ZXI6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLXNjcmV3ZHJpdmVyKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tc2NyaWJkOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1zY3JpYmQpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1zY3JvbGw6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLXNjcm9sbCk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LXNkLWNhcmQ6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLXNkLWNhcmQpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1zZWFyY2g6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLXNlYXJjaCk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LXNlYXJjaC1kb2xsYXI6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLXNlYXJjaC1kb2xsYXIpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1zZWFyY2gtbG9jYXRpb246YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLXNlYXJjaC1sb2NhdGlvbik7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LXNlYXJjaC1taW51czpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItc2VhcmNoLW1pbnVzKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tc2VhcmNoLXBsdXM6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLXNlYXJjaC1wbHVzKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tc2VhcmNoZW5naW46YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLXNlYXJjaGVuZ2luKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tc2VlZGxpbmc6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLXNlZWRsaW5nKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tc2VsbGNhc3Q6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLXNlbGxjYXN0KTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tc2VsbHN5OmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1zZWxsc3kpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1zZXJ2ZXI6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLXNlcnZlcik7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LXNlcnZpY2VzdGFjazpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItc2VydmljZXN0YWNrKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tc2hhcGVzOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1zaGFwZXMpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1zaGFyZTpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItc2hhcmUpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1zaGFyZS1hbHQ6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLXNoYXJlLWFsdCk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LXNoYXJlLWFsdC1zcXVhcmU6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLXNoYXJlLWFsdC1zcXVhcmUpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1zaGFyZS1zcXVhcmU6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLXNoYXJlLXNxdWFyZSk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LXNoZWtlbC1zaWduOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1zaGVrZWwtc2lnbik7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LXNoaWVsZC1hbHQ6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLXNoaWVsZC1hbHQpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1zaGlwOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1zaGlwKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tc2hpcHBpbmctZmFzdDpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItc2hpcHBpbmctZmFzdCk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LXNoaXJ0c2luYnVsazpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItc2hpcnRzaW5idWxrKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tc2hvZS1wcmludHM6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLXNob2UtcHJpbnRzKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tc2hvcHBpbmctYmFnOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1zaG9wcGluZy1iYWcpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1zaG9wcGluZy1iYXNrZXQ6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLXNob3BwaW5nLWJhc2tldCk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LXNob3BwaW5nLWNhcnQ6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLXNob3BwaW5nLWNhcnQpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1zaG9wd2FyZTpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItc2hvcHdhcmUpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1zaG93ZXI6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLXNob3dlcik7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LXNodXR0bGUtdmFuOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1zaHV0dGxlLXZhbik7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LXNpZ246YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLXNpZ24pOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1zaWduLWluLWFsdDpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItc2lnbi1pbi1hbHQpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1zaWduLWxhbmd1YWdlOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1zaWduLWxhbmd1YWdlKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tc2lnbi1vdXQtYWx0OmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1zaWduLW91dC1hbHQpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1zaWduYWw6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLXNpZ25hbCk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LXNpZ25hdHVyZTpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItc2lnbmF0dXJlKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tc2ltLWNhcmQ6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLXNpbS1jYXJkKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tc2ltcGx5YnVpbHQ6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLXNpbXBseWJ1aWx0KTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tc2lzdHJpeDpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItc2lzdHJpeCk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LXNpdGVtYXA6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLXNpdGVtYXApOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1zaXRoOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1zaXRoKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tc2thdGluZzpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItc2thdGluZyk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LXNrZXRjaDpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItc2tldGNoKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tc2tpaW5nOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1za2lpbmcpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1za2lpbmctbm9yZGljOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1za2lpbmctbm9yZGljKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tc2t1bGw6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLXNrdWxsKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tc2t1bGwtY3Jvc3Nib25lczpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItc2t1bGwtY3Jvc3Nib25lcyk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LXNreWF0bGFzOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1za3lhdGxhcyk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LXNreXBlOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1za3lwZSk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LXNsYWNrOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1zbGFjayk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LXNsYWNrLWhhc2g6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLXNsYWNrLWhhc2gpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1zbGFzaDpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItc2xhc2gpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1zbGVpZ2g6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLXNsZWlnaCk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LXNsaWRlcnMtaDpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItc2xpZGVycy1oKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tc2xpZGVzaGFyZTpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItc2xpZGVzaGFyZSk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LXNtaWxlOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1zbWlsZSk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LXNtaWxlLWJlYW06YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLXNtaWxlLWJlYW0pOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1zbWlsZS13aW5rOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1zbWlsZS13aW5rKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tc21vZzpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItc21vZyk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LXNtb2tpbmc6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLXNtb2tpbmcpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1zbW9raW5nLWJhbjpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItc21va2luZy1iYW4pOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1zbXM6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLXNtcyk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LXNuYXBjaGF0OmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1zbmFwY2hhdCk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LXNuYXBjaGF0LWdob3N0OmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1zbmFwY2hhdC1naG9zdCk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LXNuYXBjaGF0LXNxdWFyZTpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItc25hcGNoYXQtc3F1YXJlKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tc25vd2JvYXJkaW5nOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1zbm93Ym9hcmRpbmcpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1zbm93Zmxha2U6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLXNub3dmbGFrZSk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LXNub3dtYW46YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLXNub3dtYW4pOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1zbm93cGxvdzpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItc25vd3Bsb3cpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1zb2NrczpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItc29ja3MpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1zb2xhci1wYW5lbDpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItc29sYXItcGFuZWwpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1zb3J0OmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1zb3J0KTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tc29ydC1hbHBoYS1kb3duOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1zb3J0LWFscGhhLWRvd24pOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1zb3J0LWFscGhhLXVwOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1zb3J0LWFscGhhLXVwKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tc29ydC1hbW91bnQtZG93bjpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItc29ydC1hbW91bnQtZG93bik7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LXNvcnQtYW1vdW50LXVwOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1zb3J0LWFtb3VudC11cCk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LXNvcnQtZG93bjpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItc29ydC1kb3duKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tc29ydC1udW1lcmljLWRvd246YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLXNvcnQtbnVtZXJpYy1kb3duKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tc29ydC1udW1lcmljLXVwOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1zb3J0LW51bWVyaWMtdXApOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1zb3J0LXVwOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1zb3J0LXVwKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tc291bmRjbG91ZDpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItc291bmRjbG91ZCk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LXNvdXJjZXRyZWU6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLXNvdXJjZXRyZWUpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1zcGE6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLXNwYSk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LXNwYWNlLXNodXR0bGU6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLXNwYWNlLXNodXR0bGUpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1zcGVha2FwOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1zcGVha2FwKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tc3BpZGVyOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1zcGlkZXIpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1zcGlubmVyOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1zcGlubmVyKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tc3Bsb3RjaDpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItc3Bsb3RjaCk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LXNwb3RpZnk6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLXNwb3RpZnkpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1zcHJheS1jYW46YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLXNwcmF5LWNhbik7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LXNxdWFyZTpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItc3F1YXJlKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tc3F1YXJlLWZ1bGw6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLXNxdWFyZS1mdWxsKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tc3F1YXJlLXJvb3QtYWx0OmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1zcXVhcmUtcm9vdC1hbHQpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1zcXVhcmVzcGFjZTpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItc3F1YXJlc3BhY2UpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1zdGFjay1leGNoYW5nZTpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItc3RhY2stZXhjaGFuZ2UpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1zdGFjay1vdmVyZmxvdzpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItc3RhY2stb3ZlcmZsb3cpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1zdGFtcDpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItc3RhbXApOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1zdGFyOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1zdGFyKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tc3Rhci1hbmQtY3Jlc2NlbnQ6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLXN0YXItYW5kLWNyZXNjZW50KTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tc3Rhci1oYWxmOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1zdGFyLWhhbGYpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1zdGFyLWhhbGYtYWx0OmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1zdGFyLWhhbGYtYWx0KTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tc3Rhci1vZi1kYXZpZDpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItc3Rhci1vZi1kYXZpZCk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LXN0YXItb2YtbGlmZTpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItc3Rhci1vZi1saWZlKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tc3RheWxpbmtlZDpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItc3RheWxpbmtlZCk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LXN0ZWFtOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1zdGVhbSk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LXN0ZWFtLXNxdWFyZTpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItc3RlYW0tc3F1YXJlKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tc3RlYW0tc3ltYm9sOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1zdGVhbS1zeW1ib2wpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1zdGVwLWJhY2t3YXJkOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1zdGVwLWJhY2t3YXJkKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tc3RlcC1mb3J3YXJkOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1zdGVwLWZvcndhcmQpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1zdGV0aG9zY29wZTpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItc3RldGhvc2NvcGUpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1zdGlja2VyLW11bGU6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLXN0aWNrZXItbXVsZSk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LXN0aWNreS1ub3RlOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1zdGlja3ktbm90ZSk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LXN0b3A6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLXN0b3ApOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1zdG9wLWNpcmNsZTpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItc3RvcC1jaXJjbGUpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1zdG9wd2F0Y2g6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLXN0b3B3YXRjaCk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LXN0b3JlOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1zdG9yZSk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LXN0b3JlLWFsdDpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItc3RvcmUtYWx0KTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tc3RyYXZhOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1zdHJhdmEpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1zdHJlYW06YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLXN0cmVhbSk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LXN0cmVldC12aWV3OmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1zdHJlZXQtdmlldyk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LXN0cmlrZXRocm91Z2g6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLXN0cmlrZXRocm91Z2gpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1zdHJpcGU6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLXN0cmlwZSk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LXN0cmlwZS1zOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1zdHJpcGUtcyk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LXN0cm9vcHdhZmVsOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1zdHJvb3B3YWZlbCk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LXN0dWRpb3ZpbmFyaTpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItc3R1ZGlvdmluYXJpKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tc3R1bWJsZXVwb246YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLXN0dW1ibGV1cG9uKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tc3R1bWJsZXVwb24tY2lyY2xlOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1zdHVtYmxldXBvbi1jaXJjbGUpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1zdWJzY3JpcHQ6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLXN1YnNjcmlwdCk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LXN1YndheTpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItc3Vid2F5KTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tc3VpdGNhc2U6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLXN1aXRjYXNlKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tc3VpdGNhc2Utcm9sbGluZzpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItc3VpdGNhc2Utcm9sbGluZyk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LXN1bjpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItc3VuKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tc3VwZXJwb3dlcnM6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLXN1cGVycG93ZXJzKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tc3VwZXJzY3JpcHQ6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLXN1cGVyc2NyaXB0KTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tc3VwcGxlOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1zdXBwbGUpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1zdXJwcmlzZTpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItc3VycHJpc2UpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1zdXNlOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1zdXNlKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tc3dhdGNoYm9vazpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItc3dhdGNoYm9vayk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LXN3aW1tZXI6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLXN3aW1tZXIpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1zd2ltbWluZy1wb29sOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1zd2ltbWluZy1wb29sKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tc3luYWdvZ3VlOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1zeW5hZ29ndWUpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS1zeW5jOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci1zeW5jKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tc3luYy1hbHQ6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLXN5bmMtYWx0KTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tc3lyaW5nZTpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItc3lyaW5nZSk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LXRhYmxlOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci10YWJsZSk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LXRhYmxlLXRlbm5pczpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItdGFibGUtdGVubmlzKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tdGFibGV0OmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci10YWJsZXQpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS10YWJsZXQtYWx0OmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci10YWJsZXQtYWx0KTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tdGFibGV0czpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItdGFibGV0cyk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LXRhY2hvbWV0ZXItYWx0OmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci10YWNob21ldGVyLWFsdCk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LXRhZzpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItdGFnKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tdGFnczpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItdGFncyk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LXRhcGU6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLXRhcGUpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS10YXNrczpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItdGFza3MpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS10YXhpOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci10YXhpKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tdGVhbXNwZWFrOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci10ZWFtc3BlYWspOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS10ZWV0aDpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItdGVldGgpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS10ZWV0aC1vcGVuOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci10ZWV0aC1vcGVuKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tdGVsZWdyYW06YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLXRlbGVncmFtKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tdGVsZWdyYW0tcGxhbmU6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLXRlbGVncmFtLXBsYW5lKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tdGVtcGVyYXR1cmUtaGlnaDpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItdGVtcGVyYXR1cmUtaGlnaCk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LXRlbXBlcmF0dXJlLWxvdzpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItdGVtcGVyYXR1cmUtbG93KTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tdGVuY2VudC13ZWlibzpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItdGVuY2VudC13ZWlibyk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LXRlbmdlOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci10ZW5nZSk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LXRlcm1pbmFsOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci10ZXJtaW5hbCk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LXRleHQtaGVpZ2h0OmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci10ZXh0LWhlaWdodCk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LXRleHQtd2lkdGg6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLXRleHQtd2lkdGgpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS10aDpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItdGgpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS10aC1sYXJnZTpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItdGgtbGFyZ2UpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS10aC1saXN0OmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci10aC1saXN0KTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tdGhlLXJlZC15ZXRpOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci10aGUtcmVkLXlldGkpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS10aGVhdGVyLW1hc2tzOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci10aGVhdGVyLW1hc2tzKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tdGhlbWVjbzpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItdGhlbWVjbyk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LXRoZW1laXNsZTpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItdGhlbWVpc2xlKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tdGhlcm1vbWV0ZXI6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLXRoZXJtb21ldGVyKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tdGhlcm1vbWV0ZXItZW1wdHk6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLXRoZXJtb21ldGVyLWVtcHR5KTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tdGhlcm1vbWV0ZXItZnVsbDpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItdGhlcm1vbWV0ZXItZnVsbCk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LXRoZXJtb21ldGVyLWhhbGY6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLXRoZXJtb21ldGVyLWhhbGYpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS10aGVybW9tZXRlci1xdWFydGVyOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci10aGVybW9tZXRlci1xdWFydGVyKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tdGhlcm1vbWV0ZXItdGhyZWUtcXVhcnRlcnM6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLXRoZXJtb21ldGVyLXRocmVlLXF1YXJ0ZXJzKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tdGhpbmstcGVha3M6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLXRoaW5rLXBlYWtzKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tdGh1bWJzLWRvd246YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLXRodW1icy1kb3duKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tdGh1bWJzLXVwOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci10aHVtYnMtdXApOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS10aHVtYnRhY2s6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLXRodW1idGFjayk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LXRpY2tldC1hbHQ6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLXRpY2tldC1hbHQpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS10aW1lczpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItdGltZXMpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS10aW1lcy1jaXJjbGU6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLXRpbWVzLWNpcmNsZSk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LXRpbnQ6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLXRpbnQpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS10aW50LXNsYXNoOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci10aW50LXNsYXNoKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tdGlyZWQ6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLXRpcmVkKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tdG9nZ2xlLW9mZjpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItdG9nZ2xlLW9mZik7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LXRvZ2dsZS1vbjpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItdG9nZ2xlLW9uKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tdG9pbGV0OmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci10b2lsZXQpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS10b2lsZXQtcGFwZXI6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLXRvaWxldC1wYXBlcik7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LXRvb2xib3g6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLXRvb2xib3gpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS10b29sczpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItdG9vbHMpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS10b290aDpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItdG9vdGgpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS10b3JhaDpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItdG9yYWgpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS10b3JpaS1nYXRlOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci10b3JpaS1nYXRlKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tdHJhY3RvcjpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItdHJhY3Rvcik7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LXRyYWRlLWZlZGVyYXRpb246YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLXRyYWRlLWZlZGVyYXRpb24pOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS10cmFkZW1hcms6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLXRyYWRlbWFyayk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LXRyYWZmaWMtbGlnaHQ6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLXRyYWZmaWMtbGlnaHQpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS10cmFpbjpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItdHJhaW4pOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS10cmFtOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci10cmFtKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tdHJhbnNnZW5kZXI6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLXRyYW5zZ2VuZGVyKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tdHJhbnNnZW5kZXItYWx0OmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci10cmFuc2dlbmRlci1hbHQpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS10cmFzaDpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItdHJhc2gpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS10cmFzaC1hbHQ6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLXRyYXNoLWFsdCk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LXRyZWU6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLXRyZWUpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS10cmVsbG86YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLXRyZWxsbyk7IH1cclxuLyouI3skZmEtY3NzLXByZWZpeH0tdHJpcGFkdmlzb3I6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLXRyaXBhZHZpc29yKTsgfSovXHJcbi4jeyRmYS1jc3MtcHJlZml4fS10cm9waHk6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLXRyb3BoeSk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LXRydWNrOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci10cnVjayk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LXRydWNrLWxvYWRpbmc6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLXRydWNrLWxvYWRpbmcpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS10cnVjay1tb25zdGVyOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci10cnVjay1tb25zdGVyKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tdHJ1Y2stbW92aW5nOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci10cnVjay1tb3ZpbmcpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS10cnVjay1waWNrdXA6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLXRydWNrLXBpY2t1cCk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LXRzaGlydDpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItdHNoaXJ0KTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tdHR5OmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci10dHkpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS10dW1ibHI6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLXR1bWJscik7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LXR1bWJsci1zcXVhcmU6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLXR1bWJsci1zcXVhcmUpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS10djpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItdHYpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS10d2l0Y2g6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLXR3aXRjaCk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LXR3aXR0ZXI6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLXR3aXR0ZXIpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS10d2l0dGVyLXNxdWFyZTpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItdHdpdHRlci1zcXVhcmUpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS10eXBvMzpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItdHlwbzMpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS11YmVyOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci11YmVyKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tdWJ1bnR1OmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci11YnVudHUpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS11aWtpdDpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItdWlraXQpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS11bWJyZWxsYTpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItdW1icmVsbGEpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS11bWJyZWxsYS1iZWFjaDpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItdW1icmVsbGEtYmVhY2gpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS11bmRlcmxpbmU6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLXVuZGVybGluZSk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LXVuZG86YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLXVuZG8pOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS11bmRvLWFsdDpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItdW5kby1hbHQpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS11bmlyZWdpc3RyeTpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItdW5pcmVnaXN0cnkpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS11bml2ZXJzYWwtYWNjZXNzOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci11bml2ZXJzYWwtYWNjZXNzKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tdW5pdmVyc2l0eTpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItdW5pdmVyc2l0eSk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LXVubGluazpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItdW5saW5rKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tdW5sb2NrOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci11bmxvY2spOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS11bmxvY2stYWx0OmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci11bmxvY2stYWx0KTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tdW50YXBwZDpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItdW50YXBwZCk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LXVwbG9hZDpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItdXBsb2FkKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tdXBzOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci11cHMpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS11c2I6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLXVzYik7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LXVzZXI6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLXVzZXIpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS11c2VyLWFsdDpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItdXNlci1hbHQpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS11c2VyLWFsdC1zbGFzaDpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItdXNlci1hbHQtc2xhc2gpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS11c2VyLWFzdHJvbmF1dDpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItdXNlci1hc3Ryb25hdXQpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS11c2VyLWNoZWNrOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci11c2VyLWNoZWNrKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tdXNlci1jaXJjbGU6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLXVzZXItY2lyY2xlKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tdXNlci1jbG9jazpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItdXNlci1jbG9jayk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LXVzZXItY29nOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci11c2VyLWNvZyk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LXVzZXItZWRpdDpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItdXNlci1lZGl0KTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tdXNlci1mcmllbmRzOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci11c2VyLWZyaWVuZHMpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS11c2VyLWdyYWR1YXRlOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci11c2VyLWdyYWR1YXRlKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tdXNlci1pbmp1cmVkOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci11c2VyLWluanVyZWQpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS11c2VyLWxvY2s6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLXVzZXItbG9jayk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LXVzZXItbWQ6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLXVzZXItbWQpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS11c2VyLW1pbnVzOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci11c2VyLW1pbnVzKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tdXNlci1uaW5qYTpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItdXNlci1uaW5qYSk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LXVzZXItcGx1czpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItdXNlci1wbHVzKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tdXNlci1zZWNyZXQ6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLXVzZXItc2VjcmV0KTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tdXNlci1zaGllbGQ6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLXVzZXItc2hpZWxkKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tdXNlci1zbGFzaDpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItdXNlci1zbGFzaCk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LXVzZXItdGFnOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci11c2VyLXRhZyk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LXVzZXItdGllOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci11c2VyLXRpZSk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LXVzZXItdGltZXM6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLXVzZXItdGltZXMpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS11c2VyczpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItdXNlcnMpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS11c2Vycy1jb2c6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLXVzZXJzLWNvZyk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LXVzcHM6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLXVzcHMpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS11c3N1bm5haDpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItdXNzdW5uYWgpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS11dGVuc2lsLXNwb29uOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci11dGVuc2lsLXNwb29uKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tdXRlbnNpbHM6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLXV0ZW5zaWxzKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tdmFhZGluOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci12YWFkaW4pOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS12ZWN0b3Itc3F1YXJlOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci12ZWN0b3Itc3F1YXJlKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tdmVudXM6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLXZlbnVzKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tdmVudXMtZG91YmxlOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci12ZW51cy1kb3VibGUpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS12ZW51cy1tYXJzOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci12ZW51cy1tYXJzKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tdmlhY29pbjpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItdmlhY29pbik7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LXZpYWRlbzpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItdmlhZGVvKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tdmlhZGVvLXNxdWFyZTpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItdmlhZGVvLXNxdWFyZSk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LXZpYWw6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLXZpYWwpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS12aWFsczpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItdmlhbHMpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS12aWJlcjpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItdmliZXIpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS12aWRlbzpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItdmlkZW8pOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS12aWRlby1zbGFzaDpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItdmlkZW8tc2xhc2gpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS12aWhhcmE6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLXZpaGFyYSk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LXZpbWVvOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci12aW1lbyk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LXZpbWVvLXNxdWFyZTpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItdmltZW8tc3F1YXJlKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tdmltZW8tdjpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItdmltZW8tdik7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LXZpbmU6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLXZpbmUpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS12azpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItdmspOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS12bnY6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLXZudik7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LXZvbGxleWJhbGwtYmFsbDpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItdm9sbGV5YmFsbC1iYWxsKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tdm9sdW1lLWRvd246YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLXZvbHVtZS1kb3duKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tdm9sdW1lLW11dGU6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLXZvbHVtZS1tdXRlKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tdm9sdW1lLW9mZjpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItdm9sdW1lLW9mZik7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LXZvbHVtZS11cDpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItdm9sdW1lLXVwKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tdm90ZS15ZWE6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLXZvdGUteWVhKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0tdnItY2FyZGJvYXJkOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci12ci1jYXJkYm9hcmQpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS12dWVqczpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItdnVlanMpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS13YWxraW5nOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci13YWxraW5nKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0td2FsbGV0OmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci13YWxsZXQpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS13YXJlaG91c2U6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLXdhcmVob3VzZSk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LXdhdGVyOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci13YXRlcik7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LXdlZWJseTpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItd2VlYmx5KTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0td2VpYm86YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLXdlaWJvKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0td2VpZ2h0OmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci13ZWlnaHQpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS13ZWlnaHQtaGFuZ2luZzpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItd2VpZ2h0LWhhbmdpbmcpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS13ZWl4aW46YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLXdlaXhpbik7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LXdoYXRzYXBwOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci13aGF0c2FwcCk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LXdoYXRzYXBwLXNxdWFyZTpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItd2hhdHNhcHAtc3F1YXJlKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0td2hlZWxjaGFpcjpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItd2hlZWxjaGFpcik7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LXdobWNzOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci13aG1jcyk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LXdpZmk6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLXdpZmkpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS13aWtpcGVkaWEtdzpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItd2lraXBlZGlhLXcpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS13aW5kOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci13aW5kKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0td2luZG93LWNsb3NlOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci13aW5kb3ctY2xvc2UpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS13aW5kb3ctbWF4aW1pemU6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLXdpbmRvdy1tYXhpbWl6ZSk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LXdpbmRvdy1taW5pbWl6ZTpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItd2luZG93LW1pbmltaXplKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0td2luZG93LXJlc3RvcmU6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLXdpbmRvdy1yZXN0b3JlKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0td2luZG93czpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItd2luZG93cyk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LXdpbmUtYm90dGxlOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci13aW5lLWJvdHRsZSk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LXdpbmUtZ2xhc3M6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLXdpbmUtZ2xhc3MpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS13aW5lLWdsYXNzLWFsdDpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItd2luZS1nbGFzcy1hbHQpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS13aXg6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLXdpeCk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LXdpemFyZHMtb2YtdGhlLWNvYXN0OmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci13aXphcmRzLW9mLXRoZS1jb2FzdCk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LXdvbGYtcGFjay1iYXR0YWxpb246YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLXdvbGYtcGFjay1iYXR0YWxpb24pOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS13b24tc2lnbjpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItd29uLXNpZ24pOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS13b3JkcHJlc3M6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLXdvcmRwcmVzcyk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LXdvcmRwcmVzcy1zaW1wbGU6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLXdvcmRwcmVzcy1zaW1wbGUpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS13cGJlZ2lubmVyOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci13cGJlZ2lubmVyKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0td3BleHBsb3JlcjpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItd3BleHBsb3Jlcik7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LXdwZm9ybXM6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLXdwZm9ybXMpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS13cHJlc3NyOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci13cHJlc3NyKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0td3JlbmNoOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci13cmVuY2gpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS14LXJheTpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXIteC1yYXkpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS14Ym94OmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci14Ym94KTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0teGluZzpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXIteGluZyk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LXhpbmctc3F1YXJlOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci14aW5nLXNxdWFyZSk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LXktY29tYmluYXRvcjpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXIteS1jb21iaW5hdG9yKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0teWFob286YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLXlhaG9vKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0teWFuZGV4OmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci15YW5kZXgpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS15YW5kZXgtaW50ZXJuYXRpb25hbDpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXIteWFuZGV4LWludGVybmF0aW9uYWwpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS15YXJuOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci15YXJuKTsgfVxyXG4uI3skZmEtY3NzLXByZWZpeH0teWVscDpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXIteWVscCk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LXllbi1zaWduOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci15ZW4tc2lnbik7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LXlpbi15YW5nOmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci15aW4teWFuZyk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LXlvYXN0OmJlZm9yZSB7IGNvbnRlbnQ6IGZhLWNvbnRlbnQoJGZhLXZhci15b2FzdCk7IH1cclxuLiN7JGZhLWNzcy1wcmVmaXh9LXlvdXR1YmU6YmVmb3JlIHsgY29udGVudDogZmEtY29udGVudCgkZmEtdmFyLXlvdXR1YmUpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS15b3V0dWJlLXNxdWFyZTpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXIteW91dHViZS1zcXVhcmUpOyB9XHJcbi4jeyRmYS1jc3MtcHJlZml4fS16aGlodTpiZWZvcmUgeyBjb250ZW50OiBmYS1jb250ZW50KCRmYS12YXItemhpaHUpOyB9XHJcbiIsIi8vIFNjcmVlbiBSZWFkZXJzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi5zci1vbmx5IHsgQGluY2x1ZGUgc3Itb25seTsgfVxuLnNyLW9ubHktZm9jdXNhYmxlIHsgQGluY2x1ZGUgc3Itb25seS1mb2N1c2FibGU7IH1cbiIsIi8qIVxuICogRm9udCBBd2Vzb21lIEZyZWUgNS4xNS40IGJ5IEBmb250YXdlc29tZSAtIGh0dHBzOi8vZm9udGF3ZXNvbWUuY29tXG4gKiBMaWNlbnNlIC0gaHR0cHM6Ly9mb250YXdlc29tZS5jb20vbGljZW5zZS9mcmVlIChJY29uczogQ0MgQlkgNC4wLCBGb250czogU0lMIE9GTCAxLjEsIENvZGU6IE1JVCBMaWNlbnNlKVxuICovXG5AaW1wb3J0ICd2YXJpYWJsZXMnO1xuXG5AZm9udC1mYWNlIHtcbiAgZm9udC1mYW1pbHk6ICdGb250IEF3ZXNvbWUgNSBGcmVlJztcbiAgZm9udC1zdHlsZTogbm9ybWFsO1xuICBmb250LXdlaWdodDogOTAwO1xuICBmb250LWRpc3BsYXk6ICRmYS1mb250LWRpc3BsYXk7XG4gIHNyYzogdXJsKCcjeyRmYS1mb250LXBhdGh9L2ZhLXNvbGlkLTkwMC5lb3QnKTtcbiAgc3JjOiB1cmwoJyN7JGZhLWZvbnQtcGF0aH0vZmEtc29saWQtOTAwLmVvdD8jaWVmaXgnKSBmb3JtYXQoJ2VtYmVkZGVkLW9wZW50eXBlJyksXG4gIHVybCgnI3skZmEtZm9udC1wYXRofS9mYS1zb2xpZC05MDAud29mZjInKSBmb3JtYXQoJ3dvZmYyJyksXG4gIHVybCgnI3skZmEtZm9udC1wYXRofS9mYS1zb2xpZC05MDAud29mZicpIGZvcm1hdCgnd29mZicpLFxuICB1cmwoJyN7JGZhLWZvbnQtcGF0aH0vZmEtc29saWQtOTAwLnR0ZicpIGZvcm1hdCgndHJ1ZXR5cGUnKSxcbiAgdXJsKCcjeyRmYS1mb250LXBhdGh9L2ZhLXNvbGlkLTkwMC5zdmcjZm9udGF3ZXNvbWUnKSBmb3JtYXQoJ3N2ZycpO1xufVxuXG4uZmEsXG4uZmFzIHtcbiAgZm9udC1mYW1pbHk6ICdGb250IEF3ZXNvbWUgNSBGcmVlJztcbiAgZm9udC13ZWlnaHQ6IDkwMDtcbn1cbiIsIi8qIVxuICogRm9udCBBd2Vzb21lIEZyZWUgNS4xNS40IGJ5IEBmb250YXdlc29tZSAtIGh0dHBzOi8vZm9udGF3ZXNvbWUuY29tXG4gKiBMaWNlbnNlIC0gaHR0cHM6Ly9mb250YXdlc29tZS5jb20vbGljZW5zZS9mcmVlIChJY29uczogQ0MgQlkgNC4wLCBGb250czogU0lMIE9GTCAxLjEsIENvZGU6IE1JVCBMaWNlbnNlKVxuICovXG5AaW1wb3J0ICd2YXJpYWJsZXMnO1xuXG5AZm9udC1mYWNlIHtcbiAgZm9udC1mYW1pbHk6ICdGb250IEF3ZXNvbWUgNSBGcmVlJztcbiAgZm9udC1zdHlsZTogbm9ybWFsO1xuICBmb250LXdlaWdodDogNDAwO1xuICBmb250LWRpc3BsYXk6ICRmYS1mb250LWRpc3BsYXk7XG4gIHNyYzogdXJsKCcjeyRmYS1mb250LXBhdGh9L2ZhLXJlZ3VsYXItNDAwLmVvdCcpO1xuICBzcmM6IHVybCgnI3skZmEtZm9udC1wYXRofS9mYS1yZWd1bGFyLTQwMC5lb3Q/I2llZml4JykgZm9ybWF0KCdlbWJlZGRlZC1vcGVudHlwZScpLFxuICB1cmwoJyN7JGZhLWZvbnQtcGF0aH0vZmEtcmVndWxhci00MDAud29mZjInKSBmb3JtYXQoJ3dvZmYyJyksXG4gIHVybCgnI3skZmEtZm9udC1wYXRofS9mYS1yZWd1bGFyLTQwMC53b2ZmJykgZm9ybWF0KCd3b2ZmJyksXG4gIHVybCgnI3skZmEtZm9udC1wYXRofS9mYS1yZWd1bGFyLTQwMC50dGYnKSBmb3JtYXQoJ3RydWV0eXBlJyksXG4gIHVybCgnI3skZmEtZm9udC1wYXRofS9mYS1yZWd1bGFyLTQwMC5zdmcjZm9udGF3ZXNvbWUnKSBmb3JtYXQoJ3N2ZycpO1xufVxuXG4uZmFyIHtcbiAgZm9udC1mYW1pbHk6ICdGb250IEF3ZXNvbWUgNSBGcmVlJztcbiAgZm9udC13ZWlnaHQ6IDQwMDtcbn1cbiIsIi8qIVxuICogRm9udCBBd2Vzb21lIEZyZWUgNS4xNS40IGJ5IEBmb250YXdlc29tZSAtIGh0dHBzOi8vZm9udGF3ZXNvbWUuY29tXG4gKiBMaWNlbnNlIC0gaHR0cHM6Ly9mb250YXdlc29tZS5jb20vbGljZW5zZS9mcmVlIChJY29uczogQ0MgQlkgNC4wLCBGb250czogU0lMIE9GTCAxLjEsIENvZGU6IE1JVCBMaWNlbnNlKVxuICovXG5AaW1wb3J0ICd2YXJpYWJsZXMnO1xuXG5AZm9udC1mYWNlIHtcbiAgZm9udC1mYW1pbHk6ICdGb250IEF3ZXNvbWUgNSBCcmFuZHMnO1xuICBmb250LXN0eWxlOiBub3JtYWw7XG4gIGZvbnQtd2VpZ2h0OiA0MDA7XG4gIGZvbnQtZGlzcGxheTogJGZhLWZvbnQtZGlzcGxheTtcbiAgc3JjOiB1cmwoJyN7JGZhLWZvbnQtcGF0aH0vZmEtYnJhbmRzLTQwMC5lb3QnKTtcbiAgc3JjOiB1cmwoJyN7JGZhLWZvbnQtcGF0aH0vZmEtYnJhbmRzLTQwMC5lb3Q/I2llZml4JykgZm9ybWF0KCdlbWJlZGRlZC1vcGVudHlwZScpLFxuICB1cmwoJyN7JGZhLWZvbnQtcGF0aH0vZmEtYnJhbmRzLTQwMC53b2ZmMicpIGZvcm1hdCgnd29mZjInKSxcbiAgdXJsKCcjeyRmYS1mb250LXBhdGh9L2ZhLWJyYW5kcy00MDAud29mZicpIGZvcm1hdCgnd29mZicpLFxuICB1cmwoJyN7JGZhLWZvbnQtcGF0aH0vZmEtYnJhbmRzLTQwMC50dGYnKSBmb3JtYXQoJ3RydWV0eXBlJyksXG4gIHVybCgnI3skZmEtZm9udC1wYXRofS9mYS1icmFuZHMtNDAwLnN2ZyNmb250YXdlc29tZScpIGZvcm1hdCgnc3ZnJyk7XG59XG5cbi5mYWIge1xuICBmb250LWZhbWlseTogJ0ZvbnQgQXdlc29tZSA1IEJyYW5kcyc7XG4gIGZvbnQtd2VpZ2h0OiA0MDA7XG59XG4iLCJAY2hhcnNldCBcIlVURi04XCI7XHJcbkBpbXBvcnQgXCJiczVcIjtcclxuQGltcG9ydCBcImpxdWVyeS1zbWFydG1lbnUtYm9vdHN0cmFwXCI7XHJcbkBpbXBvcnQgXCJmb250LWF3ZXNvbWVcIjtcclxuXHJcbmh0bWwge1xyXG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xyXG4gICAgbWluLWhlaWdodDogMTAwJTtcclxufVxyXG5cclxuYm9keSB7XHJcbiAgICBtaW4taGVpZ2h0OiAxMDB2aDtcclxuICAgIHBhZGRpbmctdG9wOiAxNDJweDtcclxufVxyXG5cclxuI25ld1Bvc3RMaW5rIHtcclxuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICAgIHRvcDogMTcwcHg7XHJcbiAgICByaWdodDogMHB4O1xyXG59XHJcblxyXG4jZWRpdFBvc3RMaW5rIHtcclxuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICAgIHRvcDogMjAwcHg7XHJcbiAgICByaWdodDogMHB4O1xyXG59XHJcblxyXG4jdW5wdWJsaXNoUG9zdExpbmsge1xyXG4gICAgcG9zaXRpb246IGFic29sdXRlO1xyXG4gICAgdG9wOiAyMzBweCFpbXBvcnRhbnQ7XHJcbiAgICByaWdodDogMHB4IWltcG9ydGFudDtcclxufVxyXG5cclxuI3BhZ2VNYW5hZ2VyTGluayB7XHJcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XHJcbiAgICB0b3A6IDE3MHB4O1xyXG4gICAgcmlnaHQ6IDBweDtcclxufVxyXG5cclxuI25ld1BhZ2VMaW5rIHtcclxuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICAgIHRvcDogMjAwcHg7XHJcbiAgICByaWdodDogMHB4O1xyXG59XHJcblxyXG4jZWRpdFBhZ2VMaW5rIHtcclxuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICAgIHRvcDogMjMwcHg7XHJcbiAgICByaWdodDogMHB4XHJcbn1cclxuXHJcbiN1bnB1Ymxpc2hQYWdlTGluayB7XHJcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XHJcbiAgICB0b3A6IDI2MHB4IWltcG9ydGFudDtcclxuICAgIHJpZ2h0OiAwcHghaW1wb3J0YW50XHJcbn1cclxuXHJcbiNzaWRlbmF2dG9nZ2xlIHtcclxuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICAgIHRvcDogMjIwcHg7XHJcbiAgICByaWdodDogNXB4O1xyXG59XHJcblxyXG5AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA4MTJweCkge1xyXG4gICAgI3NpZGVuYXZ0b2dnbGUsXHJcbiAgICAjc2lkZW5hdm1lbnUge1xyXG4gICAgICAgIGRpc3BsYXk6IG5vbmU7XHJcbiAgICB9XHJcbn1cclxuXHJcbi5mbGV4LWZpbGwge1xyXG4gICAgZmxleDogMSAxIGF1dG8gIWltcG9ydGFudDtcclxufVxyXG5cclxuaW1nLCB2aWRlbywgaWZyYW1lIHtcclxuICAgIG1heC13aWR0aDogMTAwJTtcclxufVxyXG5cclxudGQgaW1nLCB2aWRlbywgaWZyYW1lIHtcclxuICAgIG1heC13aWR0aDogbm9uZTtcclxufVxyXG5cclxuLnRhYmxlIHRkLCAudGFibGUgdGgge1xyXG4gICAgdmVydGljYWwtYWxpZ246IGluaGVyaXQ7XHJcbn1cclxuXHJcbi5icmFuZC1oZWFkZXIge1xyXG4gICAgaGVpZ2h0OjEwMHB4O1xyXG59XHJcblxyXG5oZWFkZXIgLm5hdmJhciB7XHJcbiAgICB0b3A6IDEwMHB4O1xyXG59XHJcbiN0b2FzdC1jb250YWluZXIge1xyXG4gICAgcG9zaXRpb246IHN0aWNreTtcclxuICAgIHotaW5kZXg6IDEwNTU7XHJcbiAgICB0b3A6IDBcclxufVxyXG5cclxuI3RvYXN0LXdyYXBwZXIge1xyXG4gICAgcG9zaXRpb246IGFic29sdXRlO1xyXG4gICAgdG9wOiAwO1xyXG4gICAgcmlnaHQ6IDA7XHJcbiAgICBtYXJnaW46IDVweFxyXG59XHJcblxyXG4jdG9hc3QtY29udGFpbmVyID4gI3RvYXN0LXdyYXBwZXIgPiAudG9hc3Qge1xyXG4gICAgbWluLXdpZHRoOiAxNTBweDtcclxuICAgIGJhY2tncm91bmQtY29sb3I6IHJnYigyNTUsMjU1LDI1NSk7XHJcbiAgICBib3JkZXItdG9wOiBub25lO1xyXG59XHJcblxyXG4jdG9hc3QtY29udGFpbmVyID4gI3RvYXN0LXdyYXBwZXIgPiAudG9hc3QgPiAudG9hc3QtaGVhZGVyIHN0cm9uZyB7XHJcbiAgICBwYWRkaW5nLXJpZ2h0OiAyMHB4XHJcbn1cclxuXHJcbmRpdi5pbnB1dC1ncm91cC1wcmVwZW5kID4gc3Bhbi5pbnB1dC1ncm91cC10ZXh0ID4gaSB7XHJcbiAgICBsaW5lLWhlaWdodDogMS41ZW07XHJcbn0iXX0= */\n"
  },
  {
    "path": "src/sourceDev.WebApp/sitefiles/s1/themes/custom1/wwwroot/js/bootstrap.bundle.js",
    "content": "/*!\n  * Bootstrap v5.0.2 (https://getbootstrap.com/)\n  * Copyright 2011-2021 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)\n  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n  */\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n  typeof define === 'function' && define.amd ? define(factory) :\n  (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.bootstrap = factory());\n}(this, (function () { 'use strict';\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): dom/selector-engine.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n  const NODE_TEXT = 3;\n  const SelectorEngine = {\n    find(selector, element = document.documentElement) {\n      return [].concat(...Element.prototype.querySelectorAll.call(element, selector));\n    },\n\n    findOne(selector, element = document.documentElement) {\n      return Element.prototype.querySelector.call(element, selector);\n    },\n\n    children(element, selector) {\n      return [].concat(...element.children).filter(child => child.matches(selector));\n    },\n\n    parents(element, selector) {\n      const parents = [];\n      let ancestor = element.parentNode;\n\n      while (ancestor && ancestor.nodeType === Node.ELEMENT_NODE && ancestor.nodeType !== NODE_TEXT) {\n        if (ancestor.matches(selector)) {\n          parents.push(ancestor);\n        }\n\n        ancestor = ancestor.parentNode;\n      }\n\n      return parents;\n    },\n\n    prev(element, selector) {\n      let previous = element.previousElementSibling;\n\n      while (previous) {\n        if (previous.matches(selector)) {\n          return [previous];\n        }\n\n        previous = previous.previousElementSibling;\n      }\n\n      return [];\n    },\n\n    next(element, selector) {\n      let next = element.nextElementSibling;\n\n      while (next) {\n        if (next.matches(selector)) {\n          return [next];\n        }\n\n        next = next.nextElementSibling;\n      }\n\n      return [];\n    }\n\n  };\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): util/index.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n\n  const MAX_UID = 1000000;\n  const MILLISECONDS_MULTIPLIER = 1000;\n  const TRANSITION_END = 'transitionend'; // Shoutout AngusCroll (https://goo.gl/pxwQGp)\n\n  const toType = obj => {\n    if (obj === null || obj === undefined) {\n      return `${obj}`;\n    }\n\n    return {}.toString.call(obj).match(/\\s([a-z]+)/i)[1].toLowerCase();\n  };\n  /**\n   * --------------------------------------------------------------------------\n   * Public Util Api\n   * --------------------------------------------------------------------------\n   */\n\n\n  const getUID = prefix => {\n    do {\n      prefix += Math.floor(Math.random() * MAX_UID);\n    } while (document.getElementById(prefix));\n\n    return prefix;\n  };\n\n  const getSelector = element => {\n    let selector = element.getAttribute('data-bs-target');\n\n    if (!selector || selector === '#') {\n      let hrefAttr = element.getAttribute('href'); // The only valid content that could double as a selector are IDs or classes,\n      // so everything starting with `#` or `.`. If a \"real\" URL is used as the selector,\n      // `document.querySelector` will rightfully complain it is invalid.\n      // See https://github.com/twbs/bootstrap/issues/32273\n\n      if (!hrefAttr || !hrefAttr.includes('#') && !hrefAttr.startsWith('.')) {\n        return null;\n      } // Just in case some CMS puts out a full URL with the anchor appended\n\n\n      if (hrefAttr.includes('#') && !hrefAttr.startsWith('#')) {\n        hrefAttr = `#${hrefAttr.split('#')[1]}`;\n      }\n\n      selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : null;\n    }\n\n    return selector;\n  };\n\n  const getSelectorFromElement = element => {\n    const selector = getSelector(element);\n\n    if (selector) {\n      return document.querySelector(selector) ? selector : null;\n    }\n\n    return null;\n  };\n\n  const getElementFromSelector = element => {\n    const selector = getSelector(element);\n    return selector ? document.querySelector(selector) : null;\n  };\n\n  const getTransitionDurationFromElement = element => {\n    if (!element) {\n      return 0;\n    } // Get transition-duration of the element\n\n\n    let {\n      transitionDuration,\n      transitionDelay\n    } = window.getComputedStyle(element);\n    const floatTransitionDuration = Number.parseFloat(transitionDuration);\n    const floatTransitionDelay = Number.parseFloat(transitionDelay); // Return 0 if element or transition duration is not found\n\n    if (!floatTransitionDuration && !floatTransitionDelay) {\n      return 0;\n    } // If multiple durations are defined, take the first\n\n\n    transitionDuration = transitionDuration.split(',')[0];\n    transitionDelay = transitionDelay.split(',')[0];\n    return (Number.parseFloat(transitionDuration) + Number.parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER;\n  };\n\n  const triggerTransitionEnd = element => {\n    element.dispatchEvent(new Event(TRANSITION_END));\n  };\n\n  const isElement$1 = obj => {\n    if (!obj || typeof obj !== 'object') {\n      return false;\n    }\n\n    if (typeof obj.jquery !== 'undefined') {\n      obj = obj[0];\n    }\n\n    return typeof obj.nodeType !== 'undefined';\n  };\n\n  const getElement = obj => {\n    if (isElement$1(obj)) {\n      // it's a jQuery object or a node element\n      return obj.jquery ? obj[0] : obj;\n    }\n\n    if (typeof obj === 'string' && obj.length > 0) {\n      return SelectorEngine.findOne(obj);\n    }\n\n    return null;\n  };\n\n  const typeCheckConfig = (componentName, config, configTypes) => {\n    Object.keys(configTypes).forEach(property => {\n      const expectedTypes = configTypes[property];\n      const value = config[property];\n      const valueType = value && isElement$1(value) ? 'element' : toType(value);\n\n      if (!new RegExp(expectedTypes).test(valueType)) {\n        throw new TypeError(`${componentName.toUpperCase()}: Option \"${property}\" provided type \"${valueType}\" but expected type \"${expectedTypes}\".`);\n      }\n    });\n  };\n\n  const isVisible = element => {\n    if (!isElement$1(element) || element.getClientRects().length === 0) {\n      return false;\n    }\n\n    return getComputedStyle(element).getPropertyValue('visibility') === 'visible';\n  };\n\n  const isDisabled = element => {\n    if (!element || element.nodeType !== Node.ELEMENT_NODE) {\n      return true;\n    }\n\n    if (element.classList.contains('disabled')) {\n      return true;\n    }\n\n    if (typeof element.disabled !== 'undefined') {\n      return element.disabled;\n    }\n\n    return element.hasAttribute('disabled') && element.getAttribute('disabled') !== 'false';\n  };\n\n  const findShadowRoot = element => {\n    if (!document.documentElement.attachShadow) {\n      return null;\n    } // Can find the shadow root otherwise it'll return the document\n\n\n    if (typeof element.getRootNode === 'function') {\n      const root = element.getRootNode();\n      return root instanceof ShadowRoot ? root : null;\n    }\n\n    if (element instanceof ShadowRoot) {\n      return element;\n    } // when we don't find a shadow root\n\n\n    if (!element.parentNode) {\n      return null;\n    }\n\n    return findShadowRoot(element.parentNode);\n  };\n\n  const noop = () => {};\n\n  const reflow = element => element.offsetHeight;\n\n  const getjQuery = () => {\n    const {\n      jQuery\n    } = window;\n\n    if (jQuery && !document.body.hasAttribute('data-bs-no-jquery')) {\n      return jQuery;\n    }\n\n    return null;\n  };\n\n  const DOMContentLoadedCallbacks = [];\n\n  const onDOMContentLoaded = callback => {\n    if (document.readyState === 'loading') {\n      // add listener on the first call when the document is in loading state\n      if (!DOMContentLoadedCallbacks.length) {\n        document.addEventListener('DOMContentLoaded', () => {\n          DOMContentLoadedCallbacks.forEach(callback => callback());\n        });\n      }\n\n      DOMContentLoadedCallbacks.push(callback);\n    } else {\n      callback();\n    }\n  };\n\n  const isRTL = () => document.documentElement.dir === 'rtl';\n\n  const defineJQueryPlugin = plugin => {\n    onDOMContentLoaded(() => {\n      const $ = getjQuery();\n      /* istanbul ignore if */\n\n      if ($) {\n        const name = plugin.NAME;\n        const JQUERY_NO_CONFLICT = $.fn[name];\n        $.fn[name] = plugin.jQueryInterface;\n        $.fn[name].Constructor = plugin;\n\n        $.fn[name].noConflict = () => {\n          $.fn[name] = JQUERY_NO_CONFLICT;\n          return plugin.jQueryInterface;\n        };\n      }\n    });\n  };\n\n  const execute = callback => {\n    if (typeof callback === 'function') {\n      callback();\n    }\n  };\n\n  const executeAfterTransition = (callback, transitionElement, waitForTransition = true) => {\n    if (!waitForTransition) {\n      execute(callback);\n      return;\n    }\n\n    const durationPadding = 5;\n    const emulatedDuration = getTransitionDurationFromElement(transitionElement) + durationPadding;\n    let called = false;\n\n    const handler = ({\n      target\n    }) => {\n      if (target !== transitionElement) {\n        return;\n      }\n\n      called = true;\n      transitionElement.removeEventListener(TRANSITION_END, handler);\n      execute(callback);\n    };\n\n    transitionElement.addEventListener(TRANSITION_END, handler);\n    setTimeout(() => {\n      if (!called) {\n        triggerTransitionEnd(transitionElement);\n      }\n    }, emulatedDuration);\n  };\n  /**\n   * Return the previous/next element of a list.\n   *\n   * @param {array} list    The list of elements\n   * @param activeElement   The active element\n   * @param shouldGetNext   Choose to get next or previous element\n   * @param isCycleAllowed\n   * @return {Element|elem} The proper element\n   */\n\n\n  const getNextActiveElement = (list, activeElement, shouldGetNext, isCycleAllowed) => {\n    let index = list.indexOf(activeElement); // if the element does not exist in the list return an element depending on the direction and if cycle is allowed\n\n    if (index === -1) {\n      return list[!shouldGetNext && isCycleAllowed ? list.length - 1 : 0];\n    }\n\n    const listLength = list.length;\n    index += shouldGetNext ? 1 : -1;\n\n    if (isCycleAllowed) {\n      index = (index + listLength) % listLength;\n    }\n\n    return list[Math.max(0, Math.min(index, listLength - 1))];\n  };\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): dom/event-handler.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const namespaceRegex = /[^.]*(?=\\..*)\\.|.*/;\n  const stripNameRegex = /\\..*/;\n  const stripUidRegex = /::\\d+$/;\n  const eventRegistry = {}; // Events storage\n\n  let uidEvent = 1;\n  const customEvents = {\n    mouseenter: 'mouseover',\n    mouseleave: 'mouseout'\n  };\n  const customEventsRegex = /^(mouseenter|mouseleave)/i;\n  const nativeEvents = new Set(['click', 'dblclick', 'mouseup', 'mousedown', 'contextmenu', 'mousewheel', 'DOMMouseScroll', 'mouseover', 'mouseout', 'mousemove', 'selectstart', 'selectend', 'keydown', 'keypress', 'keyup', 'orientationchange', 'touchstart', 'touchmove', 'touchend', 'touchcancel', 'pointerdown', 'pointermove', 'pointerup', 'pointerleave', 'pointercancel', 'gesturestart', 'gesturechange', 'gestureend', 'focus', 'blur', 'change', 'reset', 'select', 'submit', 'focusin', 'focusout', 'load', 'unload', 'beforeunload', 'resize', 'move', 'DOMContentLoaded', 'readystatechange', 'error', 'abort', 'scroll']);\n  /**\n   * ------------------------------------------------------------------------\n   * Private methods\n   * ------------------------------------------------------------------------\n   */\n\n  function getUidEvent(element, uid) {\n    return uid && `${uid}::${uidEvent++}` || element.uidEvent || uidEvent++;\n  }\n\n  function getEvent(element) {\n    const uid = getUidEvent(element);\n    element.uidEvent = uid;\n    eventRegistry[uid] = eventRegistry[uid] || {};\n    return eventRegistry[uid];\n  }\n\n  function bootstrapHandler(element, fn) {\n    return function handler(event) {\n      event.delegateTarget = element;\n\n      if (handler.oneOff) {\n        EventHandler.off(element, event.type, fn);\n      }\n\n      return fn.apply(element, [event]);\n    };\n  }\n\n  function bootstrapDelegationHandler(element, selector, fn) {\n    return function handler(event) {\n      const domElements = element.querySelectorAll(selector);\n\n      for (let {\n        target\n      } = event; target && target !== this; target = target.parentNode) {\n        for (let i = domElements.length; i--;) {\n          if (domElements[i] === target) {\n            event.delegateTarget = target;\n\n            if (handler.oneOff) {\n              // eslint-disable-next-line unicorn/consistent-destructuring\n              EventHandler.off(element, event.type, selector, fn);\n            }\n\n            return fn.apply(target, [event]);\n          }\n        }\n      } // To please ESLint\n\n\n      return null;\n    };\n  }\n\n  function findHandler(events, handler, delegationSelector = null) {\n    const uidEventList = Object.keys(events);\n\n    for (let i = 0, len = uidEventList.length; i < len; i++) {\n      const event = events[uidEventList[i]];\n\n      if (event.originalHandler === handler && event.delegationSelector === delegationSelector) {\n        return event;\n      }\n    }\n\n    return null;\n  }\n\n  function normalizeParams(originalTypeEvent, handler, delegationFn) {\n    const delegation = typeof handler === 'string';\n    const originalHandler = delegation ? delegationFn : handler;\n    let typeEvent = getTypeEvent(originalTypeEvent);\n    const isNative = nativeEvents.has(typeEvent);\n\n    if (!isNative) {\n      typeEvent = originalTypeEvent;\n    }\n\n    return [delegation, originalHandler, typeEvent];\n  }\n\n  function addHandler(element, originalTypeEvent, handler, delegationFn, oneOff) {\n    if (typeof originalTypeEvent !== 'string' || !element) {\n      return;\n    }\n\n    if (!handler) {\n      handler = delegationFn;\n      delegationFn = null;\n    } // in case of mouseenter or mouseleave wrap the handler within a function that checks for its DOM position\n    // this prevents the handler from being dispatched the same way as mouseover or mouseout does\n\n\n    if (customEventsRegex.test(originalTypeEvent)) {\n      const wrapFn = fn => {\n        return function (event) {\n          if (!event.relatedTarget || event.relatedTarget !== event.delegateTarget && !event.delegateTarget.contains(event.relatedTarget)) {\n            return fn.call(this, event);\n          }\n        };\n      };\n\n      if (delegationFn) {\n        delegationFn = wrapFn(delegationFn);\n      } else {\n        handler = wrapFn(handler);\n      }\n    }\n\n    const [delegation, originalHandler, typeEvent] = normalizeParams(originalTypeEvent, handler, delegationFn);\n    const events = getEvent(element);\n    const handlers = events[typeEvent] || (events[typeEvent] = {});\n    const previousFn = findHandler(handlers, originalHandler, delegation ? handler : null);\n\n    if (previousFn) {\n      previousFn.oneOff = previousFn.oneOff && oneOff;\n      return;\n    }\n\n    const uid = getUidEvent(originalHandler, originalTypeEvent.replace(namespaceRegex, ''));\n    const fn = delegation ? bootstrapDelegationHandler(element, handler, delegationFn) : bootstrapHandler(element, handler);\n    fn.delegationSelector = delegation ? handler : null;\n    fn.originalHandler = originalHandler;\n    fn.oneOff = oneOff;\n    fn.uidEvent = uid;\n    handlers[uid] = fn;\n    element.addEventListener(typeEvent, fn, delegation);\n  }\n\n  function removeHandler(element, events, typeEvent, handler, delegationSelector) {\n    const fn = findHandler(events[typeEvent], handler, delegationSelector);\n\n    if (!fn) {\n      return;\n    }\n\n    element.removeEventListener(typeEvent, fn, Boolean(delegationSelector));\n    delete events[typeEvent][fn.uidEvent];\n  }\n\n  function removeNamespacedHandlers(element, events, typeEvent, namespace) {\n    const storeElementEvent = events[typeEvent] || {};\n    Object.keys(storeElementEvent).forEach(handlerKey => {\n      if (handlerKey.includes(namespace)) {\n        const event = storeElementEvent[handlerKey];\n        removeHandler(element, events, typeEvent, event.originalHandler, event.delegationSelector);\n      }\n    });\n  }\n\n  function getTypeEvent(event) {\n    // allow to get the native events from namespaced events ('click.bs.button' --> 'click')\n    event = event.replace(stripNameRegex, '');\n    return customEvents[event] || event;\n  }\n\n  const EventHandler = {\n    on(element, event, handler, delegationFn) {\n      addHandler(element, event, handler, delegationFn, false);\n    },\n\n    one(element, event, handler, delegationFn) {\n      addHandler(element, event, handler, delegationFn, true);\n    },\n\n    off(element, originalTypeEvent, handler, delegationFn) {\n      if (typeof originalTypeEvent !== 'string' || !element) {\n        return;\n      }\n\n      const [delegation, originalHandler, typeEvent] = normalizeParams(originalTypeEvent, handler, delegationFn);\n      const inNamespace = typeEvent !== originalTypeEvent;\n      const events = getEvent(element);\n      const isNamespace = originalTypeEvent.startsWith('.');\n\n      if (typeof originalHandler !== 'undefined') {\n        // Simplest case: handler is passed, remove that listener ONLY.\n        if (!events || !events[typeEvent]) {\n          return;\n        }\n\n        removeHandler(element, events, typeEvent, originalHandler, delegation ? handler : null);\n        return;\n      }\n\n      if (isNamespace) {\n        Object.keys(events).forEach(elementEvent => {\n          removeNamespacedHandlers(element, events, elementEvent, originalTypeEvent.slice(1));\n        });\n      }\n\n      const storeElementEvent = events[typeEvent] || {};\n      Object.keys(storeElementEvent).forEach(keyHandlers => {\n        const handlerKey = keyHandlers.replace(stripUidRegex, '');\n\n        if (!inNamespace || originalTypeEvent.includes(handlerKey)) {\n          const event = storeElementEvent[keyHandlers];\n          removeHandler(element, events, typeEvent, event.originalHandler, event.delegationSelector);\n        }\n      });\n    },\n\n    trigger(element, event, args) {\n      if (typeof event !== 'string' || !element) {\n        return null;\n      }\n\n      const $ = getjQuery();\n      const typeEvent = getTypeEvent(event);\n      const inNamespace = event !== typeEvent;\n      const isNative = nativeEvents.has(typeEvent);\n      let jQueryEvent;\n      let bubbles = true;\n      let nativeDispatch = true;\n      let defaultPrevented = false;\n      let evt = null;\n\n      if (inNamespace && $) {\n        jQueryEvent = $.Event(event, args);\n        $(element).trigger(jQueryEvent);\n        bubbles = !jQueryEvent.isPropagationStopped();\n        nativeDispatch = !jQueryEvent.isImmediatePropagationStopped();\n        defaultPrevented = jQueryEvent.isDefaultPrevented();\n      }\n\n      if (isNative) {\n        evt = document.createEvent('HTMLEvents');\n        evt.initEvent(typeEvent, bubbles, true);\n      } else {\n        evt = new CustomEvent(event, {\n          bubbles,\n          cancelable: true\n        });\n      } // merge custom information in our event\n\n\n      if (typeof args !== 'undefined') {\n        Object.keys(args).forEach(key => {\n          Object.defineProperty(evt, key, {\n            get() {\n              return args[key];\n            }\n\n          });\n        });\n      }\n\n      if (defaultPrevented) {\n        evt.preventDefault();\n      }\n\n      if (nativeDispatch) {\n        element.dispatchEvent(evt);\n      }\n\n      if (evt.defaultPrevented && typeof jQueryEvent !== 'undefined') {\n        jQueryEvent.preventDefault();\n      }\n\n      return evt;\n    }\n\n  };\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): dom/data.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n  const elementMap = new Map();\n  var Data = {\n    set(element, key, instance) {\n      if (!elementMap.has(element)) {\n        elementMap.set(element, new Map());\n      }\n\n      const instanceMap = elementMap.get(element); // make it clear we only want one instance per element\n      // can be removed later when multiple key/instances are fine to be used\n\n      if (!instanceMap.has(key) && instanceMap.size !== 0) {\n        // eslint-disable-next-line no-console\n        console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(instanceMap.keys())[0]}.`);\n        return;\n      }\n\n      instanceMap.set(key, instance);\n    },\n\n    get(element, key) {\n      if (elementMap.has(element)) {\n        return elementMap.get(element).get(key) || null;\n      }\n\n      return null;\n    },\n\n    remove(element, key) {\n      if (!elementMap.has(element)) {\n        return;\n      }\n\n      const instanceMap = elementMap.get(element);\n      instanceMap.delete(key); // free up element references if there are no instances left for an element\n\n      if (instanceMap.size === 0) {\n        elementMap.delete(element);\n      }\n    }\n\n  };\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): base-component.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const VERSION = '5.0.2';\n\n  class BaseComponent {\n    constructor(element) {\n      element = getElement(element);\n\n      if (!element) {\n        return;\n      }\n\n      this._element = element;\n      Data.set(this._element, this.constructor.DATA_KEY, this);\n    }\n\n    dispose() {\n      Data.remove(this._element, this.constructor.DATA_KEY);\n      EventHandler.off(this._element, this.constructor.EVENT_KEY);\n      Object.getOwnPropertyNames(this).forEach(propertyName => {\n        this[propertyName] = null;\n      });\n    }\n\n    _queueCallback(callback, element, isAnimated = true) {\n      executeAfterTransition(callback, element, isAnimated);\n    }\n    /** Static */\n\n\n    static getInstance(element) {\n      return Data.get(element, this.DATA_KEY);\n    }\n\n    static getOrCreateInstance(element, config = {}) {\n      return this.getInstance(element) || new this(element, typeof config === 'object' ? config : null);\n    }\n\n    static get VERSION() {\n      return VERSION;\n    }\n\n    static get NAME() {\n      throw new Error('You have to implement the static method \"NAME\", for each component!');\n    }\n\n    static get DATA_KEY() {\n      return `bs.${this.NAME}`;\n    }\n\n    static get EVENT_KEY() {\n      return `.${this.DATA_KEY}`;\n    }\n\n  }\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): alert.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$c = 'alert';\n  const DATA_KEY$b = 'bs.alert';\n  const EVENT_KEY$b = `.${DATA_KEY$b}`;\n  const DATA_API_KEY$8 = '.data-api';\n  const SELECTOR_DISMISS = '[data-bs-dismiss=\"alert\"]';\n  const EVENT_CLOSE = `close${EVENT_KEY$b}`;\n  const EVENT_CLOSED = `closed${EVENT_KEY$b}`;\n  const EVENT_CLICK_DATA_API$7 = `click${EVENT_KEY$b}${DATA_API_KEY$8}`;\n  const CLASS_NAME_ALERT = 'alert';\n  const CLASS_NAME_FADE$6 = 'fade';\n  const CLASS_NAME_SHOW$9 = 'show';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Alert extends BaseComponent {\n    // Getters\n    static get NAME() {\n      return NAME$c;\n    } // Public\n\n\n    close(element) {\n      const rootElement = element ? this._getRootElement(element) : this._element;\n\n      const customEvent = this._triggerCloseEvent(rootElement);\n\n      if (customEvent === null || customEvent.defaultPrevented) {\n        return;\n      }\n\n      this._removeElement(rootElement);\n    } // Private\n\n\n    _getRootElement(element) {\n      return getElementFromSelector(element) || element.closest(`.${CLASS_NAME_ALERT}`);\n    }\n\n    _triggerCloseEvent(element) {\n      return EventHandler.trigger(element, EVENT_CLOSE);\n    }\n\n    _removeElement(element) {\n      element.classList.remove(CLASS_NAME_SHOW$9);\n      const isAnimated = element.classList.contains(CLASS_NAME_FADE$6);\n\n      this._queueCallback(() => this._destroyElement(element), element, isAnimated);\n    }\n\n    _destroyElement(element) {\n      element.remove();\n      EventHandler.trigger(element, EVENT_CLOSED);\n    } // Static\n\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = Alert.getOrCreateInstance(this);\n\n        if (config === 'close') {\n          data[config](this);\n        }\n      });\n    }\n\n    static handleDismiss(alertInstance) {\n      return function (event) {\n        if (event) {\n          event.preventDefault();\n        }\n\n        alertInstance.close(this);\n      };\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(document, EVENT_CLICK_DATA_API$7, SELECTOR_DISMISS, Alert.handleDismiss(new Alert()));\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Alert to jQuery only if jQuery is present\n   */\n\n  defineJQueryPlugin(Alert);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): button.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$b = 'button';\n  const DATA_KEY$a = 'bs.button';\n  const EVENT_KEY$a = `.${DATA_KEY$a}`;\n  const DATA_API_KEY$7 = '.data-api';\n  const CLASS_NAME_ACTIVE$3 = 'active';\n  const SELECTOR_DATA_TOGGLE$5 = '[data-bs-toggle=\"button\"]';\n  const EVENT_CLICK_DATA_API$6 = `click${EVENT_KEY$a}${DATA_API_KEY$7}`;\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Button extends BaseComponent {\n    // Getters\n    static get NAME() {\n      return NAME$b;\n    } // Public\n\n\n    toggle() {\n      // Toggle class and sync the `aria-pressed` attribute with the return value of the `.toggle()` method\n      this._element.setAttribute('aria-pressed', this._element.classList.toggle(CLASS_NAME_ACTIVE$3));\n    } // Static\n\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = Button.getOrCreateInstance(this);\n\n        if (config === 'toggle') {\n          data[config]();\n        }\n      });\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(document, EVENT_CLICK_DATA_API$6, SELECTOR_DATA_TOGGLE$5, event => {\n    event.preventDefault();\n    const button = event.target.closest(SELECTOR_DATA_TOGGLE$5);\n    const data = Button.getOrCreateInstance(button);\n    data.toggle();\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Button to jQuery only if jQuery is present\n   */\n\n  defineJQueryPlugin(Button);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): dom/manipulator.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  function normalizeData(val) {\n    if (val === 'true') {\n      return true;\n    }\n\n    if (val === 'false') {\n      return false;\n    }\n\n    if (val === Number(val).toString()) {\n      return Number(val);\n    }\n\n    if (val === '' || val === 'null') {\n      return null;\n    }\n\n    return val;\n  }\n\n  function normalizeDataKey(key) {\n    return key.replace(/[A-Z]/g, chr => `-${chr.toLowerCase()}`);\n  }\n\n  const Manipulator = {\n    setDataAttribute(element, key, value) {\n      element.setAttribute(`data-bs-${normalizeDataKey(key)}`, value);\n    },\n\n    removeDataAttribute(element, key) {\n      element.removeAttribute(`data-bs-${normalizeDataKey(key)}`);\n    },\n\n    getDataAttributes(element) {\n      if (!element) {\n        return {};\n      }\n\n      const attributes = {};\n      Object.keys(element.dataset).filter(key => key.startsWith('bs')).forEach(key => {\n        let pureKey = key.replace(/^bs/, '');\n        pureKey = pureKey.charAt(0).toLowerCase() + pureKey.slice(1, pureKey.length);\n        attributes[pureKey] = normalizeData(element.dataset[key]);\n      });\n      return attributes;\n    },\n\n    getDataAttribute(element, key) {\n      return normalizeData(element.getAttribute(`data-bs-${normalizeDataKey(key)}`));\n    },\n\n    offset(element) {\n      const rect = element.getBoundingClientRect();\n      return {\n        top: rect.top + document.body.scrollTop,\n        left: rect.left + document.body.scrollLeft\n      };\n    },\n\n    position(element) {\n      return {\n        top: element.offsetTop,\n        left: element.offsetLeft\n      };\n    }\n\n  };\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): carousel.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$a = 'carousel';\n  const DATA_KEY$9 = 'bs.carousel';\n  const EVENT_KEY$9 = `.${DATA_KEY$9}`;\n  const DATA_API_KEY$6 = '.data-api';\n  const ARROW_LEFT_KEY = 'ArrowLeft';\n  const ARROW_RIGHT_KEY = 'ArrowRight';\n  const TOUCHEVENT_COMPAT_WAIT = 500; // Time for mouse compat events to fire after touch\n\n  const SWIPE_THRESHOLD = 40;\n  const Default$9 = {\n    interval: 5000,\n    keyboard: true,\n    slide: false,\n    pause: 'hover',\n    wrap: true,\n    touch: true\n  };\n  const DefaultType$9 = {\n    interval: '(number|boolean)',\n    keyboard: 'boolean',\n    slide: '(boolean|string)',\n    pause: '(string|boolean)',\n    wrap: 'boolean',\n    touch: 'boolean'\n  };\n  const ORDER_NEXT = 'next';\n  const ORDER_PREV = 'prev';\n  const DIRECTION_LEFT = 'left';\n  const DIRECTION_RIGHT = 'right';\n  const KEY_TO_DIRECTION = {\n    [ARROW_LEFT_KEY]: DIRECTION_RIGHT,\n    [ARROW_RIGHT_KEY]: DIRECTION_LEFT\n  };\n  const EVENT_SLIDE = `slide${EVENT_KEY$9}`;\n  const EVENT_SLID = `slid${EVENT_KEY$9}`;\n  const EVENT_KEYDOWN = `keydown${EVENT_KEY$9}`;\n  const EVENT_MOUSEENTER = `mouseenter${EVENT_KEY$9}`;\n  const EVENT_MOUSELEAVE = `mouseleave${EVENT_KEY$9}`;\n  const EVENT_TOUCHSTART = `touchstart${EVENT_KEY$9}`;\n  const EVENT_TOUCHMOVE = `touchmove${EVENT_KEY$9}`;\n  const EVENT_TOUCHEND = `touchend${EVENT_KEY$9}`;\n  const EVENT_POINTERDOWN = `pointerdown${EVENT_KEY$9}`;\n  const EVENT_POINTERUP = `pointerup${EVENT_KEY$9}`;\n  const EVENT_DRAG_START = `dragstart${EVENT_KEY$9}`;\n  const EVENT_LOAD_DATA_API$2 = `load${EVENT_KEY$9}${DATA_API_KEY$6}`;\n  const EVENT_CLICK_DATA_API$5 = `click${EVENT_KEY$9}${DATA_API_KEY$6}`;\n  const CLASS_NAME_CAROUSEL = 'carousel';\n  const CLASS_NAME_ACTIVE$2 = 'active';\n  const CLASS_NAME_SLIDE = 'slide';\n  const CLASS_NAME_END = 'carousel-item-end';\n  const CLASS_NAME_START = 'carousel-item-start';\n  const CLASS_NAME_NEXT = 'carousel-item-next';\n  const CLASS_NAME_PREV = 'carousel-item-prev';\n  const CLASS_NAME_POINTER_EVENT = 'pointer-event';\n  const SELECTOR_ACTIVE$1 = '.active';\n  const SELECTOR_ACTIVE_ITEM = '.active.carousel-item';\n  const SELECTOR_ITEM = '.carousel-item';\n  const SELECTOR_ITEM_IMG = '.carousel-item img';\n  const SELECTOR_NEXT_PREV = '.carousel-item-next, .carousel-item-prev';\n  const SELECTOR_INDICATORS = '.carousel-indicators';\n  const SELECTOR_INDICATOR = '[data-bs-target]';\n  const SELECTOR_DATA_SLIDE = '[data-bs-slide], [data-bs-slide-to]';\n  const SELECTOR_DATA_RIDE = '[data-bs-ride=\"carousel\"]';\n  const POINTER_TYPE_TOUCH = 'touch';\n  const POINTER_TYPE_PEN = 'pen';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Carousel extends BaseComponent {\n    constructor(element, config) {\n      super(element);\n      this._items = null;\n      this._interval = null;\n      this._activeElement = null;\n      this._isPaused = false;\n      this._isSliding = false;\n      this.touchTimeout = null;\n      this.touchStartX = 0;\n      this.touchDeltaX = 0;\n      this._config = this._getConfig(config);\n      this._indicatorsElement = SelectorEngine.findOne(SELECTOR_INDICATORS, this._element);\n      this._touchSupported = 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0;\n      this._pointerEvent = Boolean(window.PointerEvent);\n\n      this._addEventListeners();\n    } // Getters\n\n\n    static get Default() {\n      return Default$9;\n    }\n\n    static get NAME() {\n      return NAME$a;\n    } // Public\n\n\n    next() {\n      this._slide(ORDER_NEXT);\n    }\n\n    nextWhenVisible() {\n      // Don't call next when the page isn't visible\n      // or the carousel or its parent isn't visible\n      if (!document.hidden && isVisible(this._element)) {\n        this.next();\n      }\n    }\n\n    prev() {\n      this._slide(ORDER_PREV);\n    }\n\n    pause(event) {\n      if (!event) {\n        this._isPaused = true;\n      }\n\n      if (SelectorEngine.findOne(SELECTOR_NEXT_PREV, this._element)) {\n        triggerTransitionEnd(this._element);\n        this.cycle(true);\n      }\n\n      clearInterval(this._interval);\n      this._interval = null;\n    }\n\n    cycle(event) {\n      if (!event) {\n        this._isPaused = false;\n      }\n\n      if (this._interval) {\n        clearInterval(this._interval);\n        this._interval = null;\n      }\n\n      if (this._config && this._config.interval && !this._isPaused) {\n        this._updateInterval();\n\n        this._interval = setInterval((document.visibilityState ? this.nextWhenVisible : this.next).bind(this), this._config.interval);\n      }\n    }\n\n    to(index) {\n      this._activeElement = SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element);\n\n      const activeIndex = this._getItemIndex(this._activeElement);\n\n      if (index > this._items.length - 1 || index < 0) {\n        return;\n      }\n\n      if (this._isSliding) {\n        EventHandler.one(this._element, EVENT_SLID, () => this.to(index));\n        return;\n      }\n\n      if (activeIndex === index) {\n        this.pause();\n        this.cycle();\n        return;\n      }\n\n      const order = index > activeIndex ? ORDER_NEXT : ORDER_PREV;\n\n      this._slide(order, this._items[index]);\n    } // Private\n\n\n    _getConfig(config) {\n      config = { ...Default$9,\n        ...Manipulator.getDataAttributes(this._element),\n        ...(typeof config === 'object' ? config : {})\n      };\n      typeCheckConfig(NAME$a, config, DefaultType$9);\n      return config;\n    }\n\n    _handleSwipe() {\n      const absDeltax = Math.abs(this.touchDeltaX);\n\n      if (absDeltax <= SWIPE_THRESHOLD) {\n        return;\n      }\n\n      const direction = absDeltax / this.touchDeltaX;\n      this.touchDeltaX = 0;\n\n      if (!direction) {\n        return;\n      }\n\n      this._slide(direction > 0 ? DIRECTION_RIGHT : DIRECTION_LEFT);\n    }\n\n    _addEventListeners() {\n      if (this._config.keyboard) {\n        EventHandler.on(this._element, EVENT_KEYDOWN, event => this._keydown(event));\n      }\n\n      if (this._config.pause === 'hover') {\n        EventHandler.on(this._element, EVENT_MOUSEENTER, event => this.pause(event));\n        EventHandler.on(this._element, EVENT_MOUSELEAVE, event => this.cycle(event));\n      }\n\n      if (this._config.touch && this._touchSupported) {\n        this._addTouchEventListeners();\n      }\n    }\n\n    _addTouchEventListeners() {\n      const start = event => {\n        if (this._pointerEvent && (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH)) {\n          this.touchStartX = event.clientX;\n        } else if (!this._pointerEvent) {\n          this.touchStartX = event.touches[0].clientX;\n        }\n      };\n\n      const move = event => {\n        // ensure swiping with one touch and not pinching\n        this.touchDeltaX = event.touches && event.touches.length > 1 ? 0 : event.touches[0].clientX - this.touchStartX;\n      };\n\n      const end = event => {\n        if (this._pointerEvent && (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH)) {\n          this.touchDeltaX = event.clientX - this.touchStartX;\n        }\n\n        this._handleSwipe();\n\n        if (this._config.pause === 'hover') {\n          // If it's a touch-enabled device, mouseenter/leave are fired as\n          // part of the mouse compatibility events on first tap - the carousel\n          // would stop cycling until user tapped out of it;\n          // here, we listen for touchend, explicitly pause the carousel\n          // (as if it's the second time we tap on it, mouseenter compat event\n          // is NOT fired) and after a timeout (to allow for mouse compatibility\n          // events to fire) we explicitly restart cycling\n          this.pause();\n\n          if (this.touchTimeout) {\n            clearTimeout(this.touchTimeout);\n          }\n\n          this.touchTimeout = setTimeout(event => this.cycle(event), TOUCHEVENT_COMPAT_WAIT + this._config.interval);\n        }\n      };\n\n      SelectorEngine.find(SELECTOR_ITEM_IMG, this._element).forEach(itemImg => {\n        EventHandler.on(itemImg, EVENT_DRAG_START, e => e.preventDefault());\n      });\n\n      if (this._pointerEvent) {\n        EventHandler.on(this._element, EVENT_POINTERDOWN, event => start(event));\n        EventHandler.on(this._element, EVENT_POINTERUP, event => end(event));\n\n        this._element.classList.add(CLASS_NAME_POINTER_EVENT);\n      } else {\n        EventHandler.on(this._element, EVENT_TOUCHSTART, event => start(event));\n        EventHandler.on(this._element, EVENT_TOUCHMOVE, event => move(event));\n        EventHandler.on(this._element, EVENT_TOUCHEND, event => end(event));\n      }\n    }\n\n    _keydown(event) {\n      if (/input|textarea/i.test(event.target.tagName)) {\n        return;\n      }\n\n      const direction = KEY_TO_DIRECTION[event.key];\n\n      if (direction) {\n        event.preventDefault();\n\n        this._slide(direction);\n      }\n    }\n\n    _getItemIndex(element) {\n      this._items = element && element.parentNode ? SelectorEngine.find(SELECTOR_ITEM, element.parentNode) : [];\n      return this._items.indexOf(element);\n    }\n\n    _getItemByOrder(order, activeElement) {\n      const isNext = order === ORDER_NEXT;\n      return getNextActiveElement(this._items, activeElement, isNext, this._config.wrap);\n    }\n\n    _triggerSlideEvent(relatedTarget, eventDirectionName) {\n      const targetIndex = this._getItemIndex(relatedTarget);\n\n      const fromIndex = this._getItemIndex(SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element));\n\n      return EventHandler.trigger(this._element, EVENT_SLIDE, {\n        relatedTarget,\n        direction: eventDirectionName,\n        from: fromIndex,\n        to: targetIndex\n      });\n    }\n\n    _setActiveIndicatorElement(element) {\n      if (this._indicatorsElement) {\n        const activeIndicator = SelectorEngine.findOne(SELECTOR_ACTIVE$1, this._indicatorsElement);\n        activeIndicator.classList.remove(CLASS_NAME_ACTIVE$2);\n        activeIndicator.removeAttribute('aria-current');\n        const indicators = SelectorEngine.find(SELECTOR_INDICATOR, this._indicatorsElement);\n\n        for (let i = 0; i < indicators.length; i++) {\n          if (Number.parseInt(indicators[i].getAttribute('data-bs-slide-to'), 10) === this._getItemIndex(element)) {\n            indicators[i].classList.add(CLASS_NAME_ACTIVE$2);\n            indicators[i].setAttribute('aria-current', 'true');\n            break;\n          }\n        }\n      }\n    }\n\n    _updateInterval() {\n      const element = this._activeElement || SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element);\n\n      if (!element) {\n        return;\n      }\n\n      const elementInterval = Number.parseInt(element.getAttribute('data-bs-interval'), 10);\n\n      if (elementInterval) {\n        this._config.defaultInterval = this._config.defaultInterval || this._config.interval;\n        this._config.interval = elementInterval;\n      } else {\n        this._config.interval = this._config.defaultInterval || this._config.interval;\n      }\n    }\n\n    _slide(directionOrOrder, element) {\n      const order = this._directionToOrder(directionOrOrder);\n\n      const activeElement = SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element);\n\n      const activeElementIndex = this._getItemIndex(activeElement);\n\n      const nextElement = element || this._getItemByOrder(order, activeElement);\n\n      const nextElementIndex = this._getItemIndex(nextElement);\n\n      const isCycling = Boolean(this._interval);\n      const isNext = order === ORDER_NEXT;\n      const directionalClassName = isNext ? CLASS_NAME_START : CLASS_NAME_END;\n      const orderClassName = isNext ? CLASS_NAME_NEXT : CLASS_NAME_PREV;\n\n      const eventDirectionName = this._orderToDirection(order);\n\n      if (nextElement && nextElement.classList.contains(CLASS_NAME_ACTIVE$2)) {\n        this._isSliding = false;\n        return;\n      }\n\n      if (this._isSliding) {\n        return;\n      }\n\n      const slideEvent = this._triggerSlideEvent(nextElement, eventDirectionName);\n\n      if (slideEvent.defaultPrevented) {\n        return;\n      }\n\n      if (!activeElement || !nextElement) {\n        // Some weirdness is happening, so we bail\n        return;\n      }\n\n      this._isSliding = true;\n\n      if (isCycling) {\n        this.pause();\n      }\n\n      this._setActiveIndicatorElement(nextElement);\n\n      this._activeElement = nextElement;\n\n      const triggerSlidEvent = () => {\n        EventHandler.trigger(this._element, EVENT_SLID, {\n          relatedTarget: nextElement,\n          direction: eventDirectionName,\n          from: activeElementIndex,\n          to: nextElementIndex\n        });\n      };\n\n      if (this._element.classList.contains(CLASS_NAME_SLIDE)) {\n        nextElement.classList.add(orderClassName);\n        reflow(nextElement);\n        activeElement.classList.add(directionalClassName);\n        nextElement.classList.add(directionalClassName);\n\n        const completeCallBack = () => {\n          nextElement.classList.remove(directionalClassName, orderClassName);\n          nextElement.classList.add(CLASS_NAME_ACTIVE$2);\n          activeElement.classList.remove(CLASS_NAME_ACTIVE$2, orderClassName, directionalClassName);\n          this._isSliding = false;\n          setTimeout(triggerSlidEvent, 0);\n        };\n\n        this._queueCallback(completeCallBack, activeElement, true);\n      } else {\n        activeElement.classList.remove(CLASS_NAME_ACTIVE$2);\n        nextElement.classList.add(CLASS_NAME_ACTIVE$2);\n        this._isSliding = false;\n        triggerSlidEvent();\n      }\n\n      if (isCycling) {\n        this.cycle();\n      }\n    }\n\n    _directionToOrder(direction) {\n      if (![DIRECTION_RIGHT, DIRECTION_LEFT].includes(direction)) {\n        return direction;\n      }\n\n      if (isRTL()) {\n        return direction === DIRECTION_LEFT ? ORDER_PREV : ORDER_NEXT;\n      }\n\n      return direction === DIRECTION_LEFT ? ORDER_NEXT : ORDER_PREV;\n    }\n\n    _orderToDirection(order) {\n      if (![ORDER_NEXT, ORDER_PREV].includes(order)) {\n        return order;\n      }\n\n      if (isRTL()) {\n        return order === ORDER_PREV ? DIRECTION_LEFT : DIRECTION_RIGHT;\n      }\n\n      return order === ORDER_PREV ? DIRECTION_RIGHT : DIRECTION_LEFT;\n    } // Static\n\n\n    static carouselInterface(element, config) {\n      const data = Carousel.getOrCreateInstance(element, config);\n      let {\n        _config\n      } = data;\n\n      if (typeof config === 'object') {\n        _config = { ..._config,\n          ...config\n        };\n      }\n\n      const action = typeof config === 'string' ? config : _config.slide;\n\n      if (typeof config === 'number') {\n        data.to(config);\n      } else if (typeof action === 'string') {\n        if (typeof data[action] === 'undefined') {\n          throw new TypeError(`No method named \"${action}\"`);\n        }\n\n        data[action]();\n      } else if (_config.interval && _config.ride) {\n        data.pause();\n        data.cycle();\n      }\n    }\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        Carousel.carouselInterface(this, config);\n      });\n    }\n\n    static dataApiClickHandler(event) {\n      const target = getElementFromSelector(this);\n\n      if (!target || !target.classList.contains(CLASS_NAME_CAROUSEL)) {\n        return;\n      }\n\n      const config = { ...Manipulator.getDataAttributes(target),\n        ...Manipulator.getDataAttributes(this)\n      };\n      const slideIndex = this.getAttribute('data-bs-slide-to');\n\n      if (slideIndex) {\n        config.interval = false;\n      }\n\n      Carousel.carouselInterface(target, config);\n\n      if (slideIndex) {\n        Carousel.getInstance(target).to(slideIndex);\n      }\n\n      event.preventDefault();\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(document, EVENT_CLICK_DATA_API$5, SELECTOR_DATA_SLIDE, Carousel.dataApiClickHandler);\n  EventHandler.on(window, EVENT_LOAD_DATA_API$2, () => {\n    const carousels = SelectorEngine.find(SELECTOR_DATA_RIDE);\n\n    for (let i = 0, len = carousels.length; i < len; i++) {\n      Carousel.carouselInterface(carousels[i], Carousel.getInstance(carousels[i]));\n    }\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Carousel to jQuery only if jQuery is present\n   */\n\n  defineJQueryPlugin(Carousel);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): collapse.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$9 = 'collapse';\n  const DATA_KEY$8 = 'bs.collapse';\n  const EVENT_KEY$8 = `.${DATA_KEY$8}`;\n  const DATA_API_KEY$5 = '.data-api';\n  const Default$8 = {\n    toggle: true,\n    parent: ''\n  };\n  const DefaultType$8 = {\n    toggle: 'boolean',\n    parent: '(string|element)'\n  };\n  const EVENT_SHOW$5 = `show${EVENT_KEY$8}`;\n  const EVENT_SHOWN$5 = `shown${EVENT_KEY$8}`;\n  const EVENT_HIDE$5 = `hide${EVENT_KEY$8}`;\n  const EVENT_HIDDEN$5 = `hidden${EVENT_KEY$8}`;\n  const EVENT_CLICK_DATA_API$4 = `click${EVENT_KEY$8}${DATA_API_KEY$5}`;\n  const CLASS_NAME_SHOW$8 = 'show';\n  const CLASS_NAME_COLLAPSE = 'collapse';\n  const CLASS_NAME_COLLAPSING = 'collapsing';\n  const CLASS_NAME_COLLAPSED = 'collapsed';\n  const WIDTH = 'width';\n  const HEIGHT = 'height';\n  const SELECTOR_ACTIVES = '.show, .collapsing';\n  const SELECTOR_DATA_TOGGLE$4 = '[data-bs-toggle=\"collapse\"]';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Collapse extends BaseComponent {\n    constructor(element, config) {\n      super(element);\n      this._isTransitioning = false;\n      this._config = this._getConfig(config);\n      this._triggerArray = SelectorEngine.find(`${SELECTOR_DATA_TOGGLE$4}[href=\"#${this._element.id}\"],` + `${SELECTOR_DATA_TOGGLE$4}[data-bs-target=\"#${this._element.id}\"]`);\n      const toggleList = SelectorEngine.find(SELECTOR_DATA_TOGGLE$4);\n\n      for (let i = 0, len = toggleList.length; i < len; i++) {\n        const elem = toggleList[i];\n        const selector = getSelectorFromElement(elem);\n        const filterElement = SelectorEngine.find(selector).filter(foundElem => foundElem === this._element);\n\n        if (selector !== null && filterElement.length) {\n          this._selector = selector;\n\n          this._triggerArray.push(elem);\n        }\n      }\n\n      this._parent = this._config.parent ? this._getParent() : null;\n\n      if (!this._config.parent) {\n        this._addAriaAndCollapsedClass(this._element, this._triggerArray);\n      }\n\n      if (this._config.toggle) {\n        this.toggle();\n      }\n    } // Getters\n\n\n    static get Default() {\n      return Default$8;\n    }\n\n    static get NAME() {\n      return NAME$9;\n    } // Public\n\n\n    toggle() {\n      if (this._element.classList.contains(CLASS_NAME_SHOW$8)) {\n        this.hide();\n      } else {\n        this.show();\n      }\n    }\n\n    show() {\n      if (this._isTransitioning || this._element.classList.contains(CLASS_NAME_SHOW$8)) {\n        return;\n      }\n\n      let actives;\n      let activesData;\n\n      if (this._parent) {\n        actives = SelectorEngine.find(SELECTOR_ACTIVES, this._parent).filter(elem => {\n          if (typeof this._config.parent === 'string') {\n            return elem.getAttribute('data-bs-parent') === this._config.parent;\n          }\n\n          return elem.classList.contains(CLASS_NAME_COLLAPSE);\n        });\n\n        if (actives.length === 0) {\n          actives = null;\n        }\n      }\n\n      const container = SelectorEngine.findOne(this._selector);\n\n      if (actives) {\n        const tempActiveData = actives.find(elem => container !== elem);\n        activesData = tempActiveData ? Collapse.getInstance(tempActiveData) : null;\n\n        if (activesData && activesData._isTransitioning) {\n          return;\n        }\n      }\n\n      const startEvent = EventHandler.trigger(this._element, EVENT_SHOW$5);\n\n      if (startEvent.defaultPrevented) {\n        return;\n      }\n\n      if (actives) {\n        actives.forEach(elemActive => {\n          if (container !== elemActive) {\n            Collapse.collapseInterface(elemActive, 'hide');\n          }\n\n          if (!activesData) {\n            Data.set(elemActive, DATA_KEY$8, null);\n          }\n        });\n      }\n\n      const dimension = this._getDimension();\n\n      this._element.classList.remove(CLASS_NAME_COLLAPSE);\n\n      this._element.classList.add(CLASS_NAME_COLLAPSING);\n\n      this._element.style[dimension] = 0;\n\n      if (this._triggerArray.length) {\n        this._triggerArray.forEach(element => {\n          element.classList.remove(CLASS_NAME_COLLAPSED);\n          element.setAttribute('aria-expanded', true);\n        });\n      }\n\n      this.setTransitioning(true);\n\n      const complete = () => {\n        this._element.classList.remove(CLASS_NAME_COLLAPSING);\n\n        this._element.classList.add(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$8);\n\n        this._element.style[dimension] = '';\n        this.setTransitioning(false);\n        EventHandler.trigger(this._element, EVENT_SHOWN$5);\n      };\n\n      const capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1);\n      const scrollSize = `scroll${capitalizedDimension}`;\n\n      this._queueCallback(complete, this._element, true);\n\n      this._element.style[dimension] = `${this._element[scrollSize]}px`;\n    }\n\n    hide() {\n      if (this._isTransitioning || !this._element.classList.contains(CLASS_NAME_SHOW$8)) {\n        return;\n      }\n\n      const startEvent = EventHandler.trigger(this._element, EVENT_HIDE$5);\n\n      if (startEvent.defaultPrevented) {\n        return;\n      }\n\n      const dimension = this._getDimension();\n\n      this._element.style[dimension] = `${this._element.getBoundingClientRect()[dimension]}px`;\n      reflow(this._element);\n\n      this._element.classList.add(CLASS_NAME_COLLAPSING);\n\n      this._element.classList.remove(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$8);\n\n      const triggerArrayLength = this._triggerArray.length;\n\n      if (triggerArrayLength > 0) {\n        for (let i = 0; i < triggerArrayLength; i++) {\n          const trigger = this._triggerArray[i];\n          const elem = getElementFromSelector(trigger);\n\n          if (elem && !elem.classList.contains(CLASS_NAME_SHOW$8)) {\n            trigger.classList.add(CLASS_NAME_COLLAPSED);\n            trigger.setAttribute('aria-expanded', false);\n          }\n        }\n      }\n\n      this.setTransitioning(true);\n\n      const complete = () => {\n        this.setTransitioning(false);\n\n        this._element.classList.remove(CLASS_NAME_COLLAPSING);\n\n        this._element.classList.add(CLASS_NAME_COLLAPSE);\n\n        EventHandler.trigger(this._element, EVENT_HIDDEN$5);\n      };\n\n      this._element.style[dimension] = '';\n\n      this._queueCallback(complete, this._element, true);\n    }\n\n    setTransitioning(isTransitioning) {\n      this._isTransitioning = isTransitioning;\n    } // Private\n\n\n    _getConfig(config) {\n      config = { ...Default$8,\n        ...config\n      };\n      config.toggle = Boolean(config.toggle); // Coerce string values\n\n      typeCheckConfig(NAME$9, config, DefaultType$8);\n      return config;\n    }\n\n    _getDimension() {\n      return this._element.classList.contains(WIDTH) ? WIDTH : HEIGHT;\n    }\n\n    _getParent() {\n      let {\n        parent\n      } = this._config;\n      parent = getElement(parent);\n      const selector = `${SELECTOR_DATA_TOGGLE$4}[data-bs-parent=\"${parent}\"]`;\n      SelectorEngine.find(selector, parent).forEach(element => {\n        const selected = getElementFromSelector(element);\n\n        this._addAriaAndCollapsedClass(selected, [element]);\n      });\n      return parent;\n    }\n\n    _addAriaAndCollapsedClass(element, triggerArray) {\n      if (!element || !triggerArray.length) {\n        return;\n      }\n\n      const isOpen = element.classList.contains(CLASS_NAME_SHOW$8);\n      triggerArray.forEach(elem => {\n        if (isOpen) {\n          elem.classList.remove(CLASS_NAME_COLLAPSED);\n        } else {\n          elem.classList.add(CLASS_NAME_COLLAPSED);\n        }\n\n        elem.setAttribute('aria-expanded', isOpen);\n      });\n    } // Static\n\n\n    static collapseInterface(element, config) {\n      let data = Collapse.getInstance(element);\n      const _config = { ...Default$8,\n        ...Manipulator.getDataAttributes(element),\n        ...(typeof config === 'object' && config ? config : {})\n      };\n\n      if (!data && _config.toggle && typeof config === 'string' && /show|hide/.test(config)) {\n        _config.toggle = false;\n      }\n\n      if (!data) {\n        data = new Collapse(element, _config);\n      }\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config]();\n      }\n    }\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        Collapse.collapseInterface(this, config);\n      });\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(document, EVENT_CLICK_DATA_API$4, SELECTOR_DATA_TOGGLE$4, function (event) {\n    // preventDefault only for <a> elements (which change the URL) not inside the collapsible element\n    if (event.target.tagName === 'A' || event.delegateTarget && event.delegateTarget.tagName === 'A') {\n      event.preventDefault();\n    }\n\n    const triggerData = Manipulator.getDataAttributes(this);\n    const selector = getSelectorFromElement(this);\n    const selectorElements = SelectorEngine.find(selector);\n    selectorElements.forEach(element => {\n      const data = Collapse.getInstance(element);\n      let config;\n\n      if (data) {\n        // update parent attribute\n        if (data._parent === null && typeof triggerData.parent === 'string') {\n          data._config.parent = triggerData.parent;\n          data._parent = data._getParent();\n        }\n\n        config = 'toggle';\n      } else {\n        config = triggerData;\n      }\n\n      Collapse.collapseInterface(element, config);\n    });\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Collapse to jQuery only if jQuery is present\n   */\n\n  defineJQueryPlugin(Collapse);\n\n  var top = 'top';\n  var bottom = 'bottom';\n  var right = 'right';\n  var left = 'left';\n  var auto = 'auto';\n  var basePlacements = [top, bottom, right, left];\n  var start = 'start';\n  var end = 'end';\n  var clippingParents = 'clippingParents';\n  var viewport = 'viewport';\n  var popper = 'popper';\n  var reference = 'reference';\n  var variationPlacements = /*#__PURE__*/basePlacements.reduce(function (acc, placement) {\n    return acc.concat([placement + \"-\" + start, placement + \"-\" + end]);\n  }, []);\n  var placements = /*#__PURE__*/[].concat(basePlacements, [auto]).reduce(function (acc, placement) {\n    return acc.concat([placement, placement + \"-\" + start, placement + \"-\" + end]);\n  }, []); // modifiers that need to read the DOM\n\n  var beforeRead = 'beforeRead';\n  var read = 'read';\n  var afterRead = 'afterRead'; // pure-logic modifiers\n\n  var beforeMain = 'beforeMain';\n  var main = 'main';\n  var afterMain = 'afterMain'; // modifier with the purpose to write to the DOM (or write into a framework state)\n\n  var beforeWrite = 'beforeWrite';\n  var write = 'write';\n  var afterWrite = 'afterWrite';\n  var modifierPhases = [beforeRead, read, afterRead, beforeMain, main, afterMain, beforeWrite, write, afterWrite];\n\n  function getNodeName(element) {\n    return element ? (element.nodeName || '').toLowerCase() : null;\n  }\n\n  function getWindow(node) {\n    if (node == null) {\n      return window;\n    }\n\n    if (node.toString() !== '[object Window]') {\n      var ownerDocument = node.ownerDocument;\n      return ownerDocument ? ownerDocument.defaultView || window : window;\n    }\n\n    return node;\n  }\n\n  function isElement(node) {\n    var OwnElement = getWindow(node).Element;\n    return node instanceof OwnElement || node instanceof Element;\n  }\n\n  function isHTMLElement(node) {\n    var OwnElement = getWindow(node).HTMLElement;\n    return node instanceof OwnElement || node instanceof HTMLElement;\n  }\n\n  function isShadowRoot(node) {\n    // IE 11 has no ShadowRoot\n    if (typeof ShadowRoot === 'undefined') {\n      return false;\n    }\n\n    var OwnElement = getWindow(node).ShadowRoot;\n    return node instanceof OwnElement || node instanceof ShadowRoot;\n  }\n\n  // and applies them to the HTMLElements such as popper and arrow\n\n  function applyStyles(_ref) {\n    var state = _ref.state;\n    Object.keys(state.elements).forEach(function (name) {\n      var style = state.styles[name] || {};\n      var attributes = state.attributes[name] || {};\n      var element = state.elements[name]; // arrow is optional + virtual elements\n\n      if (!isHTMLElement(element) || !getNodeName(element)) {\n        return;\n      } // Flow doesn't support to extend this property, but it's the most\n      // effective way to apply styles to an HTMLElement\n      // $FlowFixMe[cannot-write]\n\n\n      Object.assign(element.style, style);\n      Object.keys(attributes).forEach(function (name) {\n        var value = attributes[name];\n\n        if (value === false) {\n          element.removeAttribute(name);\n        } else {\n          element.setAttribute(name, value === true ? '' : value);\n        }\n      });\n    });\n  }\n\n  function effect$2(_ref2) {\n    var state = _ref2.state;\n    var initialStyles = {\n      popper: {\n        position: state.options.strategy,\n        left: '0',\n        top: '0',\n        margin: '0'\n      },\n      arrow: {\n        position: 'absolute'\n      },\n      reference: {}\n    };\n    Object.assign(state.elements.popper.style, initialStyles.popper);\n    state.styles = initialStyles;\n\n    if (state.elements.arrow) {\n      Object.assign(state.elements.arrow.style, initialStyles.arrow);\n    }\n\n    return function () {\n      Object.keys(state.elements).forEach(function (name) {\n        var element = state.elements[name];\n        var attributes = state.attributes[name] || {};\n        var styleProperties = Object.keys(state.styles.hasOwnProperty(name) ? state.styles[name] : initialStyles[name]); // Set all values to an empty string to unset them\n\n        var style = styleProperties.reduce(function (style, property) {\n          style[property] = '';\n          return style;\n        }, {}); // arrow is optional + virtual elements\n\n        if (!isHTMLElement(element) || !getNodeName(element)) {\n          return;\n        }\n\n        Object.assign(element.style, style);\n        Object.keys(attributes).forEach(function (attribute) {\n          element.removeAttribute(attribute);\n        });\n      });\n    };\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  var applyStyles$1 = {\n    name: 'applyStyles',\n    enabled: true,\n    phase: 'write',\n    fn: applyStyles,\n    effect: effect$2,\n    requires: ['computeStyles']\n  };\n\n  function getBasePlacement(placement) {\n    return placement.split('-')[0];\n  }\n\n  function getBoundingClientRect(element) {\n    var rect = element.getBoundingClientRect();\n    return {\n      width: rect.width,\n      height: rect.height,\n      top: rect.top,\n      right: rect.right,\n      bottom: rect.bottom,\n      left: rect.left,\n      x: rect.left,\n      y: rect.top\n    };\n  }\n\n  // means it doesn't take into account transforms.\n\n  function getLayoutRect(element) {\n    var clientRect = getBoundingClientRect(element); // Use the clientRect sizes if it's not been transformed.\n    // Fixes https://github.com/popperjs/popper-core/issues/1223\n\n    var width = element.offsetWidth;\n    var height = element.offsetHeight;\n\n    if (Math.abs(clientRect.width - width) <= 1) {\n      width = clientRect.width;\n    }\n\n    if (Math.abs(clientRect.height - height) <= 1) {\n      height = clientRect.height;\n    }\n\n    return {\n      x: element.offsetLeft,\n      y: element.offsetTop,\n      width: width,\n      height: height\n    };\n  }\n\n  function contains(parent, child) {\n    var rootNode = child.getRootNode && child.getRootNode(); // First, attempt with faster native method\n\n    if (parent.contains(child)) {\n      return true;\n    } // then fallback to custom implementation with Shadow DOM support\n    else if (rootNode && isShadowRoot(rootNode)) {\n        var next = child;\n\n        do {\n          if (next && parent.isSameNode(next)) {\n            return true;\n          } // $FlowFixMe[prop-missing]: need a better way to handle this...\n\n\n          next = next.parentNode || next.host;\n        } while (next);\n      } // Give up, the result is false\n\n\n    return false;\n  }\n\n  function getComputedStyle$1(element) {\n    return getWindow(element).getComputedStyle(element);\n  }\n\n  function isTableElement(element) {\n    return ['table', 'td', 'th'].indexOf(getNodeName(element)) >= 0;\n  }\n\n  function getDocumentElement(element) {\n    // $FlowFixMe[incompatible-return]: assume body is always available\n    return ((isElement(element) ? element.ownerDocument : // $FlowFixMe[prop-missing]\n    element.document) || window.document).documentElement;\n  }\n\n  function getParentNode(element) {\n    if (getNodeName(element) === 'html') {\n      return element;\n    }\n\n    return (// this is a quicker (but less type safe) way to save quite some bytes from the bundle\n      // $FlowFixMe[incompatible-return]\n      // $FlowFixMe[prop-missing]\n      element.assignedSlot || // step into the shadow DOM of the parent of a slotted node\n      element.parentNode || ( // DOM Element detected\n      isShadowRoot(element) ? element.host : null) || // ShadowRoot detected\n      // $FlowFixMe[incompatible-call]: HTMLElement is a Node\n      getDocumentElement(element) // fallback\n\n    );\n  }\n\n  function getTrueOffsetParent(element) {\n    if (!isHTMLElement(element) || // https://github.com/popperjs/popper-core/issues/837\n    getComputedStyle$1(element).position === 'fixed') {\n      return null;\n    }\n\n    return element.offsetParent;\n  } // `.offsetParent` reports `null` for fixed elements, while absolute elements\n  // return the containing block\n\n\n  function getContainingBlock(element) {\n    var isFirefox = navigator.userAgent.toLowerCase().indexOf('firefox') !== -1;\n    var isIE = navigator.userAgent.indexOf('Trident') !== -1;\n\n    if (isIE && isHTMLElement(element)) {\n      // In IE 9, 10 and 11 fixed elements containing block is always established by the viewport\n      var elementCss = getComputedStyle$1(element);\n\n      if (elementCss.position === 'fixed') {\n        return null;\n      }\n    }\n\n    var currentNode = getParentNode(element);\n\n    while (isHTMLElement(currentNode) && ['html', 'body'].indexOf(getNodeName(currentNode)) < 0) {\n      var css = getComputedStyle$1(currentNode); // This is non-exhaustive but covers the most common CSS properties that\n      // create a containing block.\n      // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n\n      if (css.transform !== 'none' || css.perspective !== 'none' || css.contain === 'paint' || ['transform', 'perspective'].indexOf(css.willChange) !== -1 || isFirefox && css.willChange === 'filter' || isFirefox && css.filter && css.filter !== 'none') {\n        return currentNode;\n      } else {\n        currentNode = currentNode.parentNode;\n      }\n    }\n\n    return null;\n  } // Gets the closest ancestor positioned element. Handles some edge cases,\n  // such as table ancestors and cross browser bugs.\n\n\n  function getOffsetParent(element) {\n    var window = getWindow(element);\n    var offsetParent = getTrueOffsetParent(element);\n\n    while (offsetParent && isTableElement(offsetParent) && getComputedStyle$1(offsetParent).position === 'static') {\n      offsetParent = getTrueOffsetParent(offsetParent);\n    }\n\n    if (offsetParent && (getNodeName(offsetParent) === 'html' || getNodeName(offsetParent) === 'body' && getComputedStyle$1(offsetParent).position === 'static')) {\n      return window;\n    }\n\n    return offsetParent || getContainingBlock(element) || window;\n  }\n\n  function getMainAxisFromPlacement(placement) {\n    return ['top', 'bottom'].indexOf(placement) >= 0 ? 'x' : 'y';\n  }\n\n  var max = Math.max;\n  var min = Math.min;\n  var round = Math.round;\n\n  function within(min$1, value, max$1) {\n    return max(min$1, min(value, max$1));\n  }\n\n  function getFreshSideObject() {\n    return {\n      top: 0,\n      right: 0,\n      bottom: 0,\n      left: 0\n    };\n  }\n\n  function mergePaddingObject(paddingObject) {\n    return Object.assign({}, getFreshSideObject(), paddingObject);\n  }\n\n  function expandToHashMap(value, keys) {\n    return keys.reduce(function (hashMap, key) {\n      hashMap[key] = value;\n      return hashMap;\n    }, {});\n  }\n\n  var toPaddingObject = function toPaddingObject(padding, state) {\n    padding = typeof padding === 'function' ? padding(Object.assign({}, state.rects, {\n      placement: state.placement\n    })) : padding;\n    return mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));\n  };\n\n  function arrow(_ref) {\n    var _state$modifiersData$;\n\n    var state = _ref.state,\n        name = _ref.name,\n        options = _ref.options;\n    var arrowElement = state.elements.arrow;\n    var popperOffsets = state.modifiersData.popperOffsets;\n    var basePlacement = getBasePlacement(state.placement);\n    var axis = getMainAxisFromPlacement(basePlacement);\n    var isVertical = [left, right].indexOf(basePlacement) >= 0;\n    var len = isVertical ? 'height' : 'width';\n\n    if (!arrowElement || !popperOffsets) {\n      return;\n    }\n\n    var paddingObject = toPaddingObject(options.padding, state);\n    var arrowRect = getLayoutRect(arrowElement);\n    var minProp = axis === 'y' ? top : left;\n    var maxProp = axis === 'y' ? bottom : right;\n    var endDiff = state.rects.reference[len] + state.rects.reference[axis] - popperOffsets[axis] - state.rects.popper[len];\n    var startDiff = popperOffsets[axis] - state.rects.reference[axis];\n    var arrowOffsetParent = getOffsetParent(arrowElement);\n    var clientSize = arrowOffsetParent ? axis === 'y' ? arrowOffsetParent.clientHeight || 0 : arrowOffsetParent.clientWidth || 0 : 0;\n    var centerToReference = endDiff / 2 - startDiff / 2; // Make sure the arrow doesn't overflow the popper if the center point is\n    // outside of the popper bounds\n\n    var min = paddingObject[minProp];\n    var max = clientSize - arrowRect[len] - paddingObject[maxProp];\n    var center = clientSize / 2 - arrowRect[len] / 2 + centerToReference;\n    var offset = within(min, center, max); // Prevents breaking syntax highlighting...\n\n    var axisProp = axis;\n    state.modifiersData[name] = (_state$modifiersData$ = {}, _state$modifiersData$[axisProp] = offset, _state$modifiersData$.centerOffset = offset - center, _state$modifiersData$);\n  }\n\n  function effect$1(_ref2) {\n    var state = _ref2.state,\n        options = _ref2.options;\n    var _options$element = options.element,\n        arrowElement = _options$element === void 0 ? '[data-popper-arrow]' : _options$element;\n\n    if (arrowElement == null) {\n      return;\n    } // CSS selector\n\n\n    if (typeof arrowElement === 'string') {\n      arrowElement = state.elements.popper.querySelector(arrowElement);\n\n      if (!arrowElement) {\n        return;\n      }\n    }\n\n    if (!contains(state.elements.popper, arrowElement)) {\n\n      return;\n    }\n\n    state.elements.arrow = arrowElement;\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  var arrow$1 = {\n    name: 'arrow',\n    enabled: true,\n    phase: 'main',\n    fn: arrow,\n    effect: effect$1,\n    requires: ['popperOffsets'],\n    requiresIfExists: ['preventOverflow']\n  };\n\n  var unsetSides = {\n    top: 'auto',\n    right: 'auto',\n    bottom: 'auto',\n    left: 'auto'\n  }; // Round the offsets to the nearest suitable subpixel based on the DPR.\n  // Zooming can change the DPR, but it seems to report a value that will\n  // cleanly divide the values into the appropriate subpixels.\n\n  function roundOffsetsByDPR(_ref) {\n    var x = _ref.x,\n        y = _ref.y;\n    var win = window;\n    var dpr = win.devicePixelRatio || 1;\n    return {\n      x: round(round(x * dpr) / dpr) || 0,\n      y: round(round(y * dpr) / dpr) || 0\n    };\n  }\n\n  function mapToStyles(_ref2) {\n    var _Object$assign2;\n\n    var popper = _ref2.popper,\n        popperRect = _ref2.popperRect,\n        placement = _ref2.placement,\n        offsets = _ref2.offsets,\n        position = _ref2.position,\n        gpuAcceleration = _ref2.gpuAcceleration,\n        adaptive = _ref2.adaptive,\n        roundOffsets = _ref2.roundOffsets;\n\n    var _ref3 = roundOffsets === true ? roundOffsetsByDPR(offsets) : typeof roundOffsets === 'function' ? roundOffsets(offsets) : offsets,\n        _ref3$x = _ref3.x,\n        x = _ref3$x === void 0 ? 0 : _ref3$x,\n        _ref3$y = _ref3.y,\n        y = _ref3$y === void 0 ? 0 : _ref3$y;\n\n    var hasX = offsets.hasOwnProperty('x');\n    var hasY = offsets.hasOwnProperty('y');\n    var sideX = left;\n    var sideY = top;\n    var win = window;\n\n    if (adaptive) {\n      var offsetParent = getOffsetParent(popper);\n      var heightProp = 'clientHeight';\n      var widthProp = 'clientWidth';\n\n      if (offsetParent === getWindow(popper)) {\n        offsetParent = getDocumentElement(popper);\n\n        if (getComputedStyle$1(offsetParent).position !== 'static') {\n          heightProp = 'scrollHeight';\n          widthProp = 'scrollWidth';\n        }\n      } // $FlowFixMe[incompatible-cast]: force type refinement, we compare offsetParent with window above, but Flow doesn't detect it\n\n\n      offsetParent = offsetParent;\n\n      if (placement === top) {\n        sideY = bottom; // $FlowFixMe[prop-missing]\n\n        y -= offsetParent[heightProp] - popperRect.height;\n        y *= gpuAcceleration ? 1 : -1;\n      }\n\n      if (placement === left) {\n        sideX = right; // $FlowFixMe[prop-missing]\n\n        x -= offsetParent[widthProp] - popperRect.width;\n        x *= gpuAcceleration ? 1 : -1;\n      }\n    }\n\n    var commonStyles = Object.assign({\n      position: position\n    }, adaptive && unsetSides);\n\n    if (gpuAcceleration) {\n      var _Object$assign;\n\n      return Object.assign({}, commonStyles, (_Object$assign = {}, _Object$assign[sideY] = hasY ? '0' : '', _Object$assign[sideX] = hasX ? '0' : '', _Object$assign.transform = (win.devicePixelRatio || 1) < 2 ? \"translate(\" + x + \"px, \" + y + \"px)\" : \"translate3d(\" + x + \"px, \" + y + \"px, 0)\", _Object$assign));\n    }\n\n    return Object.assign({}, commonStyles, (_Object$assign2 = {}, _Object$assign2[sideY] = hasY ? y + \"px\" : '', _Object$assign2[sideX] = hasX ? x + \"px\" : '', _Object$assign2.transform = '', _Object$assign2));\n  }\n\n  function computeStyles(_ref4) {\n    var state = _ref4.state,\n        options = _ref4.options;\n    var _options$gpuAccelerat = options.gpuAcceleration,\n        gpuAcceleration = _options$gpuAccelerat === void 0 ? true : _options$gpuAccelerat,\n        _options$adaptive = options.adaptive,\n        adaptive = _options$adaptive === void 0 ? true : _options$adaptive,\n        _options$roundOffsets = options.roundOffsets,\n        roundOffsets = _options$roundOffsets === void 0 ? true : _options$roundOffsets;\n\n    var commonStyles = {\n      placement: getBasePlacement(state.placement),\n      popper: state.elements.popper,\n      popperRect: state.rects.popper,\n      gpuAcceleration: gpuAcceleration\n    };\n\n    if (state.modifiersData.popperOffsets != null) {\n      state.styles.popper = Object.assign({}, state.styles.popper, mapToStyles(Object.assign({}, commonStyles, {\n        offsets: state.modifiersData.popperOffsets,\n        position: state.options.strategy,\n        adaptive: adaptive,\n        roundOffsets: roundOffsets\n      })));\n    }\n\n    if (state.modifiersData.arrow != null) {\n      state.styles.arrow = Object.assign({}, state.styles.arrow, mapToStyles(Object.assign({}, commonStyles, {\n        offsets: state.modifiersData.arrow,\n        position: 'absolute',\n        adaptive: false,\n        roundOffsets: roundOffsets\n      })));\n    }\n\n    state.attributes.popper = Object.assign({}, state.attributes.popper, {\n      'data-popper-placement': state.placement\n    });\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  var computeStyles$1 = {\n    name: 'computeStyles',\n    enabled: true,\n    phase: 'beforeWrite',\n    fn: computeStyles,\n    data: {}\n  };\n\n  var passive = {\n    passive: true\n  };\n\n  function effect(_ref) {\n    var state = _ref.state,\n        instance = _ref.instance,\n        options = _ref.options;\n    var _options$scroll = options.scroll,\n        scroll = _options$scroll === void 0 ? true : _options$scroll,\n        _options$resize = options.resize,\n        resize = _options$resize === void 0 ? true : _options$resize;\n    var window = getWindow(state.elements.popper);\n    var scrollParents = [].concat(state.scrollParents.reference, state.scrollParents.popper);\n\n    if (scroll) {\n      scrollParents.forEach(function (scrollParent) {\n        scrollParent.addEventListener('scroll', instance.update, passive);\n      });\n    }\n\n    if (resize) {\n      window.addEventListener('resize', instance.update, passive);\n    }\n\n    return function () {\n      if (scroll) {\n        scrollParents.forEach(function (scrollParent) {\n          scrollParent.removeEventListener('scroll', instance.update, passive);\n        });\n      }\n\n      if (resize) {\n        window.removeEventListener('resize', instance.update, passive);\n      }\n    };\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  var eventListeners = {\n    name: 'eventListeners',\n    enabled: true,\n    phase: 'write',\n    fn: function fn() {},\n    effect: effect,\n    data: {}\n  };\n\n  var hash$1 = {\n    left: 'right',\n    right: 'left',\n    bottom: 'top',\n    top: 'bottom'\n  };\n  function getOppositePlacement(placement) {\n    return placement.replace(/left|right|bottom|top/g, function (matched) {\n      return hash$1[matched];\n    });\n  }\n\n  var hash = {\n    start: 'end',\n    end: 'start'\n  };\n  function getOppositeVariationPlacement(placement) {\n    return placement.replace(/start|end/g, function (matched) {\n      return hash[matched];\n    });\n  }\n\n  function getWindowScroll(node) {\n    var win = getWindow(node);\n    var scrollLeft = win.pageXOffset;\n    var scrollTop = win.pageYOffset;\n    return {\n      scrollLeft: scrollLeft,\n      scrollTop: scrollTop\n    };\n  }\n\n  function getWindowScrollBarX(element) {\n    // If <html> has a CSS width greater than the viewport, then this will be\n    // incorrect for RTL.\n    // Popper 1 is broken in this case and never had a bug report so let's assume\n    // it's not an issue. I don't think anyone ever specifies width on <html>\n    // anyway.\n    // Browsers where the left scrollbar doesn't cause an issue report `0` for\n    // this (e.g. Edge 2019, IE11, Safari)\n    return getBoundingClientRect(getDocumentElement(element)).left + getWindowScroll(element).scrollLeft;\n  }\n\n  function getViewportRect(element) {\n    var win = getWindow(element);\n    var html = getDocumentElement(element);\n    var visualViewport = win.visualViewport;\n    var width = html.clientWidth;\n    var height = html.clientHeight;\n    var x = 0;\n    var y = 0; // NB: This isn't supported on iOS <= 12. If the keyboard is open, the popper\n    // can be obscured underneath it.\n    // Also, `html.clientHeight` adds the bottom bar height in Safari iOS, even\n    // if it isn't open, so if this isn't available, the popper will be detected\n    // to overflow the bottom of the screen too early.\n\n    if (visualViewport) {\n      width = visualViewport.width;\n      height = visualViewport.height; // Uses Layout Viewport (like Chrome; Safari does not currently)\n      // In Chrome, it returns a value very close to 0 (+/-) but contains rounding\n      // errors due to floating point numbers, so we need to check precision.\n      // Safari returns a number <= 0, usually < -1 when pinch-zoomed\n      // Feature detection fails in mobile emulation mode in Chrome.\n      // Math.abs(win.innerWidth / visualViewport.scale - visualViewport.width) <\n      // 0.001\n      // Fallback here: \"Not Safari\" userAgent\n\n      if (!/^((?!chrome|android).)*safari/i.test(navigator.userAgent)) {\n        x = visualViewport.offsetLeft;\n        y = visualViewport.offsetTop;\n      }\n    }\n\n    return {\n      width: width,\n      height: height,\n      x: x + getWindowScrollBarX(element),\n      y: y\n    };\n  }\n\n  // of the `<html>` and `<body>` rect bounds if horizontally scrollable\n\n  function getDocumentRect(element) {\n    var _element$ownerDocumen;\n\n    var html = getDocumentElement(element);\n    var winScroll = getWindowScroll(element);\n    var body = (_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body;\n    var width = max(html.scrollWidth, html.clientWidth, body ? body.scrollWidth : 0, body ? body.clientWidth : 0);\n    var height = max(html.scrollHeight, html.clientHeight, body ? body.scrollHeight : 0, body ? body.clientHeight : 0);\n    var x = -winScroll.scrollLeft + getWindowScrollBarX(element);\n    var y = -winScroll.scrollTop;\n\n    if (getComputedStyle$1(body || html).direction === 'rtl') {\n      x += max(html.clientWidth, body ? body.clientWidth : 0) - width;\n    }\n\n    return {\n      width: width,\n      height: height,\n      x: x,\n      y: y\n    };\n  }\n\n  function isScrollParent(element) {\n    // Firefox wants us to check `-x` and `-y` variations as well\n    var _getComputedStyle = getComputedStyle$1(element),\n        overflow = _getComputedStyle.overflow,\n        overflowX = _getComputedStyle.overflowX,\n        overflowY = _getComputedStyle.overflowY;\n\n    return /auto|scroll|overlay|hidden/.test(overflow + overflowY + overflowX);\n  }\n\n  function getScrollParent(node) {\n    if (['html', 'body', '#document'].indexOf(getNodeName(node)) >= 0) {\n      // $FlowFixMe[incompatible-return]: assume body is always available\n      return node.ownerDocument.body;\n    }\n\n    if (isHTMLElement(node) && isScrollParent(node)) {\n      return node;\n    }\n\n    return getScrollParent(getParentNode(node));\n  }\n\n  /*\n  given a DOM element, return the list of all scroll parents, up the list of ancesors\n  until we get to the top window object. This list is what we attach scroll listeners\n  to, because if any of these parent elements scroll, we'll need to re-calculate the\n  reference element's position.\n  */\n\n  function listScrollParents(element, list) {\n    var _element$ownerDocumen;\n\n    if (list === void 0) {\n      list = [];\n    }\n\n    var scrollParent = getScrollParent(element);\n    var isBody = scrollParent === ((_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body);\n    var win = getWindow(scrollParent);\n    var target = isBody ? [win].concat(win.visualViewport || [], isScrollParent(scrollParent) ? scrollParent : []) : scrollParent;\n    var updatedList = list.concat(target);\n    return isBody ? updatedList : // $FlowFixMe[incompatible-call]: isBody tells us target will be an HTMLElement here\n    updatedList.concat(listScrollParents(getParentNode(target)));\n  }\n\n  function rectToClientRect(rect) {\n    return Object.assign({}, rect, {\n      left: rect.x,\n      top: rect.y,\n      right: rect.x + rect.width,\n      bottom: rect.y + rect.height\n    });\n  }\n\n  function getInnerBoundingClientRect(element) {\n    var rect = getBoundingClientRect(element);\n    rect.top = rect.top + element.clientTop;\n    rect.left = rect.left + element.clientLeft;\n    rect.bottom = rect.top + element.clientHeight;\n    rect.right = rect.left + element.clientWidth;\n    rect.width = element.clientWidth;\n    rect.height = element.clientHeight;\n    rect.x = rect.left;\n    rect.y = rect.top;\n    return rect;\n  }\n\n  function getClientRectFromMixedType(element, clippingParent) {\n    return clippingParent === viewport ? rectToClientRect(getViewportRect(element)) : isHTMLElement(clippingParent) ? getInnerBoundingClientRect(clippingParent) : rectToClientRect(getDocumentRect(getDocumentElement(element)));\n  } // A \"clipping parent\" is an overflowable container with the characteristic of\n  // clipping (or hiding) overflowing elements with a position different from\n  // `initial`\n\n\n  function getClippingParents(element) {\n    var clippingParents = listScrollParents(getParentNode(element));\n    var canEscapeClipping = ['absolute', 'fixed'].indexOf(getComputedStyle$1(element).position) >= 0;\n    var clipperElement = canEscapeClipping && isHTMLElement(element) ? getOffsetParent(element) : element;\n\n    if (!isElement(clipperElement)) {\n      return [];\n    } // $FlowFixMe[incompatible-return]: https://github.com/facebook/flow/issues/1414\n\n\n    return clippingParents.filter(function (clippingParent) {\n      return isElement(clippingParent) && contains(clippingParent, clipperElement) && getNodeName(clippingParent) !== 'body';\n    });\n  } // Gets the maximum area that the element is visible in due to any number of\n  // clipping parents\n\n\n  function getClippingRect(element, boundary, rootBoundary) {\n    var mainClippingParents = boundary === 'clippingParents' ? getClippingParents(element) : [].concat(boundary);\n    var clippingParents = [].concat(mainClippingParents, [rootBoundary]);\n    var firstClippingParent = clippingParents[0];\n    var clippingRect = clippingParents.reduce(function (accRect, clippingParent) {\n      var rect = getClientRectFromMixedType(element, clippingParent);\n      accRect.top = max(rect.top, accRect.top);\n      accRect.right = min(rect.right, accRect.right);\n      accRect.bottom = min(rect.bottom, accRect.bottom);\n      accRect.left = max(rect.left, accRect.left);\n      return accRect;\n    }, getClientRectFromMixedType(element, firstClippingParent));\n    clippingRect.width = clippingRect.right - clippingRect.left;\n    clippingRect.height = clippingRect.bottom - clippingRect.top;\n    clippingRect.x = clippingRect.left;\n    clippingRect.y = clippingRect.top;\n    return clippingRect;\n  }\n\n  function getVariation(placement) {\n    return placement.split('-')[1];\n  }\n\n  function computeOffsets(_ref) {\n    var reference = _ref.reference,\n        element = _ref.element,\n        placement = _ref.placement;\n    var basePlacement = placement ? getBasePlacement(placement) : null;\n    var variation = placement ? getVariation(placement) : null;\n    var commonX = reference.x + reference.width / 2 - element.width / 2;\n    var commonY = reference.y + reference.height / 2 - element.height / 2;\n    var offsets;\n\n    switch (basePlacement) {\n      case top:\n        offsets = {\n          x: commonX,\n          y: reference.y - element.height\n        };\n        break;\n\n      case bottom:\n        offsets = {\n          x: commonX,\n          y: reference.y + reference.height\n        };\n        break;\n\n      case right:\n        offsets = {\n          x: reference.x + reference.width,\n          y: commonY\n        };\n        break;\n\n      case left:\n        offsets = {\n          x: reference.x - element.width,\n          y: commonY\n        };\n        break;\n\n      default:\n        offsets = {\n          x: reference.x,\n          y: reference.y\n        };\n    }\n\n    var mainAxis = basePlacement ? getMainAxisFromPlacement(basePlacement) : null;\n\n    if (mainAxis != null) {\n      var len = mainAxis === 'y' ? 'height' : 'width';\n\n      switch (variation) {\n        case start:\n          offsets[mainAxis] = offsets[mainAxis] - (reference[len] / 2 - element[len] / 2);\n          break;\n\n        case end:\n          offsets[mainAxis] = offsets[mainAxis] + (reference[len] / 2 - element[len] / 2);\n          break;\n      }\n    }\n\n    return offsets;\n  }\n\n  function detectOverflow(state, options) {\n    if (options === void 0) {\n      options = {};\n    }\n\n    var _options = options,\n        _options$placement = _options.placement,\n        placement = _options$placement === void 0 ? state.placement : _options$placement,\n        _options$boundary = _options.boundary,\n        boundary = _options$boundary === void 0 ? clippingParents : _options$boundary,\n        _options$rootBoundary = _options.rootBoundary,\n        rootBoundary = _options$rootBoundary === void 0 ? viewport : _options$rootBoundary,\n        _options$elementConte = _options.elementContext,\n        elementContext = _options$elementConte === void 0 ? popper : _options$elementConte,\n        _options$altBoundary = _options.altBoundary,\n        altBoundary = _options$altBoundary === void 0 ? false : _options$altBoundary,\n        _options$padding = _options.padding,\n        padding = _options$padding === void 0 ? 0 : _options$padding;\n    var paddingObject = mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));\n    var altContext = elementContext === popper ? reference : popper;\n    var referenceElement = state.elements.reference;\n    var popperRect = state.rects.popper;\n    var element = state.elements[altBoundary ? altContext : elementContext];\n    var clippingClientRect = getClippingRect(isElement(element) ? element : element.contextElement || getDocumentElement(state.elements.popper), boundary, rootBoundary);\n    var referenceClientRect = getBoundingClientRect(referenceElement);\n    var popperOffsets = computeOffsets({\n      reference: referenceClientRect,\n      element: popperRect,\n      strategy: 'absolute',\n      placement: placement\n    });\n    var popperClientRect = rectToClientRect(Object.assign({}, popperRect, popperOffsets));\n    var elementClientRect = elementContext === popper ? popperClientRect : referenceClientRect; // positive = overflowing the clipping rect\n    // 0 or negative = within the clipping rect\n\n    var overflowOffsets = {\n      top: clippingClientRect.top - elementClientRect.top + paddingObject.top,\n      bottom: elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom,\n      left: clippingClientRect.left - elementClientRect.left + paddingObject.left,\n      right: elementClientRect.right - clippingClientRect.right + paddingObject.right\n    };\n    var offsetData = state.modifiersData.offset; // Offsets can be applied only to the popper element\n\n    if (elementContext === popper && offsetData) {\n      var offset = offsetData[placement];\n      Object.keys(overflowOffsets).forEach(function (key) {\n        var multiply = [right, bottom].indexOf(key) >= 0 ? 1 : -1;\n        var axis = [top, bottom].indexOf(key) >= 0 ? 'y' : 'x';\n        overflowOffsets[key] += offset[axis] * multiply;\n      });\n    }\n\n    return overflowOffsets;\n  }\n\n  function computeAutoPlacement(state, options) {\n    if (options === void 0) {\n      options = {};\n    }\n\n    var _options = options,\n        placement = _options.placement,\n        boundary = _options.boundary,\n        rootBoundary = _options.rootBoundary,\n        padding = _options.padding,\n        flipVariations = _options.flipVariations,\n        _options$allowedAutoP = _options.allowedAutoPlacements,\n        allowedAutoPlacements = _options$allowedAutoP === void 0 ? placements : _options$allowedAutoP;\n    var variation = getVariation(placement);\n    var placements$1 = variation ? flipVariations ? variationPlacements : variationPlacements.filter(function (placement) {\n      return getVariation(placement) === variation;\n    }) : basePlacements;\n    var allowedPlacements = placements$1.filter(function (placement) {\n      return allowedAutoPlacements.indexOf(placement) >= 0;\n    });\n\n    if (allowedPlacements.length === 0) {\n      allowedPlacements = placements$1;\n    } // $FlowFixMe[incompatible-type]: Flow seems to have problems with two array unions...\n\n\n    var overflows = allowedPlacements.reduce(function (acc, placement) {\n      acc[placement] = detectOverflow(state, {\n        placement: placement,\n        boundary: boundary,\n        rootBoundary: rootBoundary,\n        padding: padding\n      })[getBasePlacement(placement)];\n      return acc;\n    }, {});\n    return Object.keys(overflows).sort(function (a, b) {\n      return overflows[a] - overflows[b];\n    });\n  }\n\n  function getExpandedFallbackPlacements(placement) {\n    if (getBasePlacement(placement) === auto) {\n      return [];\n    }\n\n    var oppositePlacement = getOppositePlacement(placement);\n    return [getOppositeVariationPlacement(placement), oppositePlacement, getOppositeVariationPlacement(oppositePlacement)];\n  }\n\n  function flip(_ref) {\n    var state = _ref.state,\n        options = _ref.options,\n        name = _ref.name;\n\n    if (state.modifiersData[name]._skip) {\n      return;\n    }\n\n    var _options$mainAxis = options.mainAxis,\n        checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\n        _options$altAxis = options.altAxis,\n        checkAltAxis = _options$altAxis === void 0 ? true : _options$altAxis,\n        specifiedFallbackPlacements = options.fallbackPlacements,\n        padding = options.padding,\n        boundary = options.boundary,\n        rootBoundary = options.rootBoundary,\n        altBoundary = options.altBoundary,\n        _options$flipVariatio = options.flipVariations,\n        flipVariations = _options$flipVariatio === void 0 ? true : _options$flipVariatio,\n        allowedAutoPlacements = options.allowedAutoPlacements;\n    var preferredPlacement = state.options.placement;\n    var basePlacement = getBasePlacement(preferredPlacement);\n    var isBasePlacement = basePlacement === preferredPlacement;\n    var fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipVariations ? [getOppositePlacement(preferredPlacement)] : getExpandedFallbackPlacements(preferredPlacement));\n    var placements = [preferredPlacement].concat(fallbackPlacements).reduce(function (acc, placement) {\n      return acc.concat(getBasePlacement(placement) === auto ? computeAutoPlacement(state, {\n        placement: placement,\n        boundary: boundary,\n        rootBoundary: rootBoundary,\n        padding: padding,\n        flipVariations: flipVariations,\n        allowedAutoPlacements: allowedAutoPlacements\n      }) : placement);\n    }, []);\n    var referenceRect = state.rects.reference;\n    var popperRect = state.rects.popper;\n    var checksMap = new Map();\n    var makeFallbackChecks = true;\n    var firstFittingPlacement = placements[0];\n\n    for (var i = 0; i < placements.length; i++) {\n      var placement = placements[i];\n\n      var _basePlacement = getBasePlacement(placement);\n\n      var isStartVariation = getVariation(placement) === start;\n      var isVertical = [top, bottom].indexOf(_basePlacement) >= 0;\n      var len = isVertical ? 'width' : 'height';\n      var overflow = detectOverflow(state, {\n        placement: placement,\n        boundary: boundary,\n        rootBoundary: rootBoundary,\n        altBoundary: altBoundary,\n        padding: padding\n      });\n      var mainVariationSide = isVertical ? isStartVariation ? right : left : isStartVariation ? bottom : top;\n\n      if (referenceRect[len] > popperRect[len]) {\n        mainVariationSide = getOppositePlacement(mainVariationSide);\n      }\n\n      var altVariationSide = getOppositePlacement(mainVariationSide);\n      var checks = [];\n\n      if (checkMainAxis) {\n        checks.push(overflow[_basePlacement] <= 0);\n      }\n\n      if (checkAltAxis) {\n        checks.push(overflow[mainVariationSide] <= 0, overflow[altVariationSide] <= 0);\n      }\n\n      if (checks.every(function (check) {\n        return check;\n      })) {\n        firstFittingPlacement = placement;\n        makeFallbackChecks = false;\n        break;\n      }\n\n      checksMap.set(placement, checks);\n    }\n\n    if (makeFallbackChecks) {\n      // `2` may be desired in some cases – research later\n      var numberOfChecks = flipVariations ? 3 : 1;\n\n      var _loop = function _loop(_i) {\n        var fittingPlacement = placements.find(function (placement) {\n          var checks = checksMap.get(placement);\n\n          if (checks) {\n            return checks.slice(0, _i).every(function (check) {\n              return check;\n            });\n          }\n        });\n\n        if (fittingPlacement) {\n          firstFittingPlacement = fittingPlacement;\n          return \"break\";\n        }\n      };\n\n      for (var _i = numberOfChecks; _i > 0; _i--) {\n        var _ret = _loop(_i);\n\n        if (_ret === \"break\") break;\n      }\n    }\n\n    if (state.placement !== firstFittingPlacement) {\n      state.modifiersData[name]._skip = true;\n      state.placement = firstFittingPlacement;\n      state.reset = true;\n    }\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  var flip$1 = {\n    name: 'flip',\n    enabled: true,\n    phase: 'main',\n    fn: flip,\n    requiresIfExists: ['offset'],\n    data: {\n      _skip: false\n    }\n  };\n\n  function getSideOffsets(overflow, rect, preventedOffsets) {\n    if (preventedOffsets === void 0) {\n      preventedOffsets = {\n        x: 0,\n        y: 0\n      };\n    }\n\n    return {\n      top: overflow.top - rect.height - preventedOffsets.y,\n      right: overflow.right - rect.width + preventedOffsets.x,\n      bottom: overflow.bottom - rect.height + preventedOffsets.y,\n      left: overflow.left - rect.width - preventedOffsets.x\n    };\n  }\n\n  function isAnySideFullyClipped(overflow) {\n    return [top, right, bottom, left].some(function (side) {\n      return overflow[side] >= 0;\n    });\n  }\n\n  function hide(_ref) {\n    var state = _ref.state,\n        name = _ref.name;\n    var referenceRect = state.rects.reference;\n    var popperRect = state.rects.popper;\n    var preventedOffsets = state.modifiersData.preventOverflow;\n    var referenceOverflow = detectOverflow(state, {\n      elementContext: 'reference'\n    });\n    var popperAltOverflow = detectOverflow(state, {\n      altBoundary: true\n    });\n    var referenceClippingOffsets = getSideOffsets(referenceOverflow, referenceRect);\n    var popperEscapeOffsets = getSideOffsets(popperAltOverflow, popperRect, preventedOffsets);\n    var isReferenceHidden = isAnySideFullyClipped(referenceClippingOffsets);\n    var hasPopperEscaped = isAnySideFullyClipped(popperEscapeOffsets);\n    state.modifiersData[name] = {\n      referenceClippingOffsets: referenceClippingOffsets,\n      popperEscapeOffsets: popperEscapeOffsets,\n      isReferenceHidden: isReferenceHidden,\n      hasPopperEscaped: hasPopperEscaped\n    };\n    state.attributes.popper = Object.assign({}, state.attributes.popper, {\n      'data-popper-reference-hidden': isReferenceHidden,\n      'data-popper-escaped': hasPopperEscaped\n    });\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  var hide$1 = {\n    name: 'hide',\n    enabled: true,\n    phase: 'main',\n    requiresIfExists: ['preventOverflow'],\n    fn: hide\n  };\n\n  function distanceAndSkiddingToXY(placement, rects, offset) {\n    var basePlacement = getBasePlacement(placement);\n    var invertDistance = [left, top].indexOf(basePlacement) >= 0 ? -1 : 1;\n\n    var _ref = typeof offset === 'function' ? offset(Object.assign({}, rects, {\n      placement: placement\n    })) : offset,\n        skidding = _ref[0],\n        distance = _ref[1];\n\n    skidding = skidding || 0;\n    distance = (distance || 0) * invertDistance;\n    return [left, right].indexOf(basePlacement) >= 0 ? {\n      x: distance,\n      y: skidding\n    } : {\n      x: skidding,\n      y: distance\n    };\n  }\n\n  function offset(_ref2) {\n    var state = _ref2.state,\n        options = _ref2.options,\n        name = _ref2.name;\n    var _options$offset = options.offset,\n        offset = _options$offset === void 0 ? [0, 0] : _options$offset;\n    var data = placements.reduce(function (acc, placement) {\n      acc[placement] = distanceAndSkiddingToXY(placement, state.rects, offset);\n      return acc;\n    }, {});\n    var _data$state$placement = data[state.placement],\n        x = _data$state$placement.x,\n        y = _data$state$placement.y;\n\n    if (state.modifiersData.popperOffsets != null) {\n      state.modifiersData.popperOffsets.x += x;\n      state.modifiersData.popperOffsets.y += y;\n    }\n\n    state.modifiersData[name] = data;\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  var offset$1 = {\n    name: 'offset',\n    enabled: true,\n    phase: 'main',\n    requires: ['popperOffsets'],\n    fn: offset\n  };\n\n  function popperOffsets(_ref) {\n    var state = _ref.state,\n        name = _ref.name;\n    // Offsets are the actual position the popper needs to have to be\n    // properly positioned near its reference element\n    // This is the most basic placement, and will be adjusted by\n    // the modifiers in the next step\n    state.modifiersData[name] = computeOffsets({\n      reference: state.rects.reference,\n      element: state.rects.popper,\n      strategy: 'absolute',\n      placement: state.placement\n    });\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  var popperOffsets$1 = {\n    name: 'popperOffsets',\n    enabled: true,\n    phase: 'read',\n    fn: popperOffsets,\n    data: {}\n  };\n\n  function getAltAxis(axis) {\n    return axis === 'x' ? 'y' : 'x';\n  }\n\n  function preventOverflow(_ref) {\n    var state = _ref.state,\n        options = _ref.options,\n        name = _ref.name;\n    var _options$mainAxis = options.mainAxis,\n        checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\n        _options$altAxis = options.altAxis,\n        checkAltAxis = _options$altAxis === void 0 ? false : _options$altAxis,\n        boundary = options.boundary,\n        rootBoundary = options.rootBoundary,\n        altBoundary = options.altBoundary,\n        padding = options.padding,\n        _options$tether = options.tether,\n        tether = _options$tether === void 0 ? true : _options$tether,\n        _options$tetherOffset = options.tetherOffset,\n        tetherOffset = _options$tetherOffset === void 0 ? 0 : _options$tetherOffset;\n    var overflow = detectOverflow(state, {\n      boundary: boundary,\n      rootBoundary: rootBoundary,\n      padding: padding,\n      altBoundary: altBoundary\n    });\n    var basePlacement = getBasePlacement(state.placement);\n    var variation = getVariation(state.placement);\n    var isBasePlacement = !variation;\n    var mainAxis = getMainAxisFromPlacement(basePlacement);\n    var altAxis = getAltAxis(mainAxis);\n    var popperOffsets = state.modifiersData.popperOffsets;\n    var referenceRect = state.rects.reference;\n    var popperRect = state.rects.popper;\n    var tetherOffsetValue = typeof tetherOffset === 'function' ? tetherOffset(Object.assign({}, state.rects, {\n      placement: state.placement\n    })) : tetherOffset;\n    var data = {\n      x: 0,\n      y: 0\n    };\n\n    if (!popperOffsets) {\n      return;\n    }\n\n    if (checkMainAxis || checkAltAxis) {\n      var mainSide = mainAxis === 'y' ? top : left;\n      var altSide = mainAxis === 'y' ? bottom : right;\n      var len = mainAxis === 'y' ? 'height' : 'width';\n      var offset = popperOffsets[mainAxis];\n      var min$1 = popperOffsets[mainAxis] + overflow[mainSide];\n      var max$1 = popperOffsets[mainAxis] - overflow[altSide];\n      var additive = tether ? -popperRect[len] / 2 : 0;\n      var minLen = variation === start ? referenceRect[len] : popperRect[len];\n      var maxLen = variation === start ? -popperRect[len] : -referenceRect[len]; // We need to include the arrow in the calculation so the arrow doesn't go\n      // outside the reference bounds\n\n      var arrowElement = state.elements.arrow;\n      var arrowRect = tether && arrowElement ? getLayoutRect(arrowElement) : {\n        width: 0,\n        height: 0\n      };\n      var arrowPaddingObject = state.modifiersData['arrow#persistent'] ? state.modifiersData['arrow#persistent'].padding : getFreshSideObject();\n      var arrowPaddingMin = arrowPaddingObject[mainSide];\n      var arrowPaddingMax = arrowPaddingObject[altSide]; // If the reference length is smaller than the arrow length, we don't want\n      // to include its full size in the calculation. If the reference is small\n      // and near the edge of a boundary, the popper can overflow even if the\n      // reference is not overflowing as well (e.g. virtual elements with no\n      // width or height)\n\n      var arrowLen = within(0, referenceRect[len], arrowRect[len]);\n      var minOffset = isBasePlacement ? referenceRect[len] / 2 - additive - arrowLen - arrowPaddingMin - tetherOffsetValue : minLen - arrowLen - arrowPaddingMin - tetherOffsetValue;\n      var maxOffset = isBasePlacement ? -referenceRect[len] / 2 + additive + arrowLen + arrowPaddingMax + tetherOffsetValue : maxLen + arrowLen + arrowPaddingMax + tetherOffsetValue;\n      var arrowOffsetParent = state.elements.arrow && getOffsetParent(state.elements.arrow);\n      var clientOffset = arrowOffsetParent ? mainAxis === 'y' ? arrowOffsetParent.clientTop || 0 : arrowOffsetParent.clientLeft || 0 : 0;\n      var offsetModifierValue = state.modifiersData.offset ? state.modifiersData.offset[state.placement][mainAxis] : 0;\n      var tetherMin = popperOffsets[mainAxis] + minOffset - offsetModifierValue - clientOffset;\n      var tetherMax = popperOffsets[mainAxis] + maxOffset - offsetModifierValue;\n\n      if (checkMainAxis) {\n        var preventedOffset = within(tether ? min(min$1, tetherMin) : min$1, offset, tether ? max(max$1, tetherMax) : max$1);\n        popperOffsets[mainAxis] = preventedOffset;\n        data[mainAxis] = preventedOffset - offset;\n      }\n\n      if (checkAltAxis) {\n        var _mainSide = mainAxis === 'x' ? top : left;\n\n        var _altSide = mainAxis === 'x' ? bottom : right;\n\n        var _offset = popperOffsets[altAxis];\n\n        var _min = _offset + overflow[_mainSide];\n\n        var _max = _offset - overflow[_altSide];\n\n        var _preventedOffset = within(tether ? min(_min, tetherMin) : _min, _offset, tether ? max(_max, tetherMax) : _max);\n\n        popperOffsets[altAxis] = _preventedOffset;\n        data[altAxis] = _preventedOffset - _offset;\n      }\n    }\n\n    state.modifiersData[name] = data;\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  var preventOverflow$1 = {\n    name: 'preventOverflow',\n    enabled: true,\n    phase: 'main',\n    fn: preventOverflow,\n    requiresIfExists: ['offset']\n  };\n\n  function getHTMLElementScroll(element) {\n    return {\n      scrollLeft: element.scrollLeft,\n      scrollTop: element.scrollTop\n    };\n  }\n\n  function getNodeScroll(node) {\n    if (node === getWindow(node) || !isHTMLElement(node)) {\n      return getWindowScroll(node);\n    } else {\n      return getHTMLElementScroll(node);\n    }\n  }\n\n  // Composite means it takes into account transforms as well as layout.\n\n  function getCompositeRect(elementOrVirtualElement, offsetParent, isFixed) {\n    if (isFixed === void 0) {\n      isFixed = false;\n    }\n\n    var documentElement = getDocumentElement(offsetParent);\n    var rect = getBoundingClientRect(elementOrVirtualElement);\n    var isOffsetParentAnElement = isHTMLElement(offsetParent);\n    var scroll = {\n      scrollLeft: 0,\n      scrollTop: 0\n    };\n    var offsets = {\n      x: 0,\n      y: 0\n    };\n\n    if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {\n      if (getNodeName(offsetParent) !== 'body' || // https://github.com/popperjs/popper-core/issues/1078\n      isScrollParent(documentElement)) {\n        scroll = getNodeScroll(offsetParent);\n      }\n\n      if (isHTMLElement(offsetParent)) {\n        offsets = getBoundingClientRect(offsetParent);\n        offsets.x += offsetParent.clientLeft;\n        offsets.y += offsetParent.clientTop;\n      } else if (documentElement) {\n        offsets.x = getWindowScrollBarX(documentElement);\n      }\n    }\n\n    return {\n      x: rect.left + scroll.scrollLeft - offsets.x,\n      y: rect.top + scroll.scrollTop - offsets.y,\n      width: rect.width,\n      height: rect.height\n    };\n  }\n\n  function order(modifiers) {\n    var map = new Map();\n    var visited = new Set();\n    var result = [];\n    modifiers.forEach(function (modifier) {\n      map.set(modifier.name, modifier);\n    }); // On visiting object, check for its dependencies and visit them recursively\n\n    function sort(modifier) {\n      visited.add(modifier.name);\n      var requires = [].concat(modifier.requires || [], modifier.requiresIfExists || []);\n      requires.forEach(function (dep) {\n        if (!visited.has(dep)) {\n          var depModifier = map.get(dep);\n\n          if (depModifier) {\n            sort(depModifier);\n          }\n        }\n      });\n      result.push(modifier);\n    }\n\n    modifiers.forEach(function (modifier) {\n      if (!visited.has(modifier.name)) {\n        // check for visited object\n        sort(modifier);\n      }\n    });\n    return result;\n  }\n\n  function orderModifiers(modifiers) {\n    // order based on dependencies\n    var orderedModifiers = order(modifiers); // order based on phase\n\n    return modifierPhases.reduce(function (acc, phase) {\n      return acc.concat(orderedModifiers.filter(function (modifier) {\n        return modifier.phase === phase;\n      }));\n    }, []);\n  }\n\n  function debounce(fn) {\n    var pending;\n    return function () {\n      if (!pending) {\n        pending = new Promise(function (resolve) {\n          Promise.resolve().then(function () {\n            pending = undefined;\n            resolve(fn());\n          });\n        });\n      }\n\n      return pending;\n    };\n  }\n\n  function mergeByName(modifiers) {\n    var merged = modifiers.reduce(function (merged, current) {\n      var existing = merged[current.name];\n      merged[current.name] = existing ? Object.assign({}, existing, current, {\n        options: Object.assign({}, existing.options, current.options),\n        data: Object.assign({}, existing.data, current.data)\n      }) : current;\n      return merged;\n    }, {}); // IE11 does not support Object.values\n\n    return Object.keys(merged).map(function (key) {\n      return merged[key];\n    });\n  }\n\n  var DEFAULT_OPTIONS = {\n    placement: 'bottom',\n    modifiers: [],\n    strategy: 'absolute'\n  };\n\n  function areValidElements() {\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    return !args.some(function (element) {\n      return !(element && typeof element.getBoundingClientRect === 'function');\n    });\n  }\n\n  function popperGenerator(generatorOptions) {\n    if (generatorOptions === void 0) {\n      generatorOptions = {};\n    }\n\n    var _generatorOptions = generatorOptions,\n        _generatorOptions$def = _generatorOptions.defaultModifiers,\n        defaultModifiers = _generatorOptions$def === void 0 ? [] : _generatorOptions$def,\n        _generatorOptions$def2 = _generatorOptions.defaultOptions,\n        defaultOptions = _generatorOptions$def2 === void 0 ? DEFAULT_OPTIONS : _generatorOptions$def2;\n    return function createPopper(reference, popper, options) {\n      if (options === void 0) {\n        options = defaultOptions;\n      }\n\n      var state = {\n        placement: 'bottom',\n        orderedModifiers: [],\n        options: Object.assign({}, DEFAULT_OPTIONS, defaultOptions),\n        modifiersData: {},\n        elements: {\n          reference: reference,\n          popper: popper\n        },\n        attributes: {},\n        styles: {}\n      };\n      var effectCleanupFns = [];\n      var isDestroyed = false;\n      var instance = {\n        state: state,\n        setOptions: function setOptions(options) {\n          cleanupModifierEffects();\n          state.options = Object.assign({}, defaultOptions, state.options, options);\n          state.scrollParents = {\n            reference: isElement(reference) ? listScrollParents(reference) : reference.contextElement ? listScrollParents(reference.contextElement) : [],\n            popper: listScrollParents(popper)\n          }; // Orders the modifiers based on their dependencies and `phase`\n          // properties\n\n          var orderedModifiers = orderModifiers(mergeByName([].concat(defaultModifiers, state.options.modifiers))); // Strip out disabled modifiers\n\n          state.orderedModifiers = orderedModifiers.filter(function (m) {\n            return m.enabled;\n          }); // Validate the provided modifiers so that the consumer will get warned\n\n          runModifierEffects();\n          return instance.update();\n        },\n        // Sync update – it will always be executed, even if not necessary. This\n        // is useful for low frequency updates where sync behavior simplifies the\n        // logic.\n        // For high frequency updates (e.g. `resize` and `scroll` events), always\n        // prefer the async Popper#update method\n        forceUpdate: function forceUpdate() {\n          if (isDestroyed) {\n            return;\n          }\n\n          var _state$elements = state.elements,\n              reference = _state$elements.reference,\n              popper = _state$elements.popper; // Don't proceed if `reference` or `popper` are not valid elements\n          // anymore\n\n          if (!areValidElements(reference, popper)) {\n\n            return;\n          } // Store the reference and popper rects to be read by modifiers\n\n\n          state.rects = {\n            reference: getCompositeRect(reference, getOffsetParent(popper), state.options.strategy === 'fixed'),\n            popper: getLayoutRect(popper)\n          }; // Modifiers have the ability to reset the current update cycle. The\n          // most common use case for this is the `flip` modifier changing the\n          // placement, which then needs to re-run all the modifiers, because the\n          // logic was previously ran for the previous placement and is therefore\n          // stale/incorrect\n\n          state.reset = false;\n          state.placement = state.options.placement; // On each update cycle, the `modifiersData` property for each modifier\n          // is filled with the initial data specified by the modifier. This means\n          // it doesn't persist and is fresh on each update.\n          // To ensure persistent data, use `${name}#persistent`\n\n          state.orderedModifiers.forEach(function (modifier) {\n            return state.modifiersData[modifier.name] = Object.assign({}, modifier.data);\n          });\n\n          for (var index = 0; index < state.orderedModifiers.length; index++) {\n\n            if (state.reset === true) {\n              state.reset = false;\n              index = -1;\n              continue;\n            }\n\n            var _state$orderedModifie = state.orderedModifiers[index],\n                fn = _state$orderedModifie.fn,\n                _state$orderedModifie2 = _state$orderedModifie.options,\n                _options = _state$orderedModifie2 === void 0 ? {} : _state$orderedModifie2,\n                name = _state$orderedModifie.name;\n\n            if (typeof fn === 'function') {\n              state = fn({\n                state: state,\n                options: _options,\n                name: name,\n                instance: instance\n              }) || state;\n            }\n          }\n        },\n        // Async and optimistically optimized update – it will not be executed if\n        // not necessary (debounced to run at most once-per-tick)\n        update: debounce(function () {\n          return new Promise(function (resolve) {\n            instance.forceUpdate();\n            resolve(state);\n          });\n        }),\n        destroy: function destroy() {\n          cleanupModifierEffects();\n          isDestroyed = true;\n        }\n      };\n\n      if (!areValidElements(reference, popper)) {\n\n        return instance;\n      }\n\n      instance.setOptions(options).then(function (state) {\n        if (!isDestroyed && options.onFirstUpdate) {\n          options.onFirstUpdate(state);\n        }\n      }); // Modifiers have the ability to execute arbitrary code before the first\n      // update cycle runs. They will be executed in the same order as the update\n      // cycle. This is useful when a modifier adds some persistent data that\n      // other modifiers need to use, but the modifier is run after the dependent\n      // one.\n\n      function runModifierEffects() {\n        state.orderedModifiers.forEach(function (_ref3) {\n          var name = _ref3.name,\n              _ref3$options = _ref3.options,\n              options = _ref3$options === void 0 ? {} : _ref3$options,\n              effect = _ref3.effect;\n\n          if (typeof effect === 'function') {\n            var cleanupFn = effect({\n              state: state,\n              name: name,\n              instance: instance,\n              options: options\n            });\n\n            var noopFn = function noopFn() {};\n\n            effectCleanupFns.push(cleanupFn || noopFn);\n          }\n        });\n      }\n\n      function cleanupModifierEffects() {\n        effectCleanupFns.forEach(function (fn) {\n          return fn();\n        });\n        effectCleanupFns = [];\n      }\n\n      return instance;\n    };\n  }\n  var createPopper$2 = /*#__PURE__*/popperGenerator(); // eslint-disable-next-line import/no-unused-modules\n\n  var defaultModifiers$1 = [eventListeners, popperOffsets$1, computeStyles$1, applyStyles$1];\n  var createPopper$1 = /*#__PURE__*/popperGenerator({\n    defaultModifiers: defaultModifiers$1\n  }); // eslint-disable-next-line import/no-unused-modules\n\n  var defaultModifiers = [eventListeners, popperOffsets$1, computeStyles$1, applyStyles$1, offset$1, flip$1, preventOverflow$1, arrow$1, hide$1];\n  var createPopper = /*#__PURE__*/popperGenerator({\n    defaultModifiers: defaultModifiers\n  }); // eslint-disable-next-line import/no-unused-modules\n\n  var Popper = /*#__PURE__*/Object.freeze({\n    __proto__: null,\n    popperGenerator: popperGenerator,\n    detectOverflow: detectOverflow,\n    createPopperBase: createPopper$2,\n    createPopper: createPopper,\n    createPopperLite: createPopper$1,\n    top: top,\n    bottom: bottom,\n    right: right,\n    left: left,\n    auto: auto,\n    basePlacements: basePlacements,\n    start: start,\n    end: end,\n    clippingParents: clippingParents,\n    viewport: viewport,\n    popper: popper,\n    reference: reference,\n    variationPlacements: variationPlacements,\n    placements: placements,\n    beforeRead: beforeRead,\n    read: read,\n    afterRead: afterRead,\n    beforeMain: beforeMain,\n    main: main,\n    afterMain: afterMain,\n    beforeWrite: beforeWrite,\n    write: write,\n    afterWrite: afterWrite,\n    modifierPhases: modifierPhases,\n    applyStyles: applyStyles$1,\n    arrow: arrow$1,\n    computeStyles: computeStyles$1,\n    eventListeners: eventListeners,\n    flip: flip$1,\n    hide: hide$1,\n    offset: offset$1,\n    popperOffsets: popperOffsets$1,\n    preventOverflow: preventOverflow$1\n  });\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): dropdown.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$8 = 'dropdown';\n  const DATA_KEY$7 = 'bs.dropdown';\n  const EVENT_KEY$7 = `.${DATA_KEY$7}`;\n  const DATA_API_KEY$4 = '.data-api';\n  const ESCAPE_KEY$2 = 'Escape';\n  const SPACE_KEY = 'Space';\n  const TAB_KEY = 'Tab';\n  const ARROW_UP_KEY = 'ArrowUp';\n  const ARROW_DOWN_KEY = 'ArrowDown';\n  const RIGHT_MOUSE_BUTTON = 2; // MouseEvent.button value for the secondary button, usually the right button\n\n  const REGEXP_KEYDOWN = new RegExp(`${ARROW_UP_KEY}|${ARROW_DOWN_KEY}|${ESCAPE_KEY$2}`);\n  const EVENT_HIDE$4 = `hide${EVENT_KEY$7}`;\n  const EVENT_HIDDEN$4 = `hidden${EVENT_KEY$7}`;\n  const EVENT_SHOW$4 = `show${EVENT_KEY$7}`;\n  const EVENT_SHOWN$4 = `shown${EVENT_KEY$7}`;\n  const EVENT_CLICK = `click${EVENT_KEY$7}`;\n  const EVENT_CLICK_DATA_API$3 = `click${EVENT_KEY$7}${DATA_API_KEY$4}`;\n  const EVENT_KEYDOWN_DATA_API = `keydown${EVENT_KEY$7}${DATA_API_KEY$4}`;\n  const EVENT_KEYUP_DATA_API = `keyup${EVENT_KEY$7}${DATA_API_KEY$4}`;\n  const CLASS_NAME_SHOW$7 = 'show';\n  const CLASS_NAME_DROPUP = 'dropup';\n  const CLASS_NAME_DROPEND = 'dropend';\n  const CLASS_NAME_DROPSTART = 'dropstart';\n  const CLASS_NAME_NAVBAR = 'navbar';\n  const SELECTOR_DATA_TOGGLE$3 = '[data-bs-toggle=\"dropdown\"]';\n  const SELECTOR_MENU = '.dropdown-menu';\n  const SELECTOR_NAVBAR_NAV = '.navbar-nav';\n  const SELECTOR_VISIBLE_ITEMS = '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)';\n  const PLACEMENT_TOP = isRTL() ? 'top-end' : 'top-start';\n  const PLACEMENT_TOPEND = isRTL() ? 'top-start' : 'top-end';\n  const PLACEMENT_BOTTOM = isRTL() ? 'bottom-end' : 'bottom-start';\n  const PLACEMENT_BOTTOMEND = isRTL() ? 'bottom-start' : 'bottom-end';\n  const PLACEMENT_RIGHT = isRTL() ? 'left-start' : 'right-start';\n  const PLACEMENT_LEFT = isRTL() ? 'right-start' : 'left-start';\n  const Default$7 = {\n    offset: [0, 2],\n    boundary: 'clippingParents',\n    reference: 'toggle',\n    display: 'dynamic',\n    popperConfig: null,\n    autoClose: true\n  };\n  const DefaultType$7 = {\n    offset: '(array|string|function)',\n    boundary: '(string|element)',\n    reference: '(string|element|object)',\n    display: 'string',\n    popperConfig: '(null|object|function)',\n    autoClose: '(boolean|string)'\n  };\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Dropdown extends BaseComponent {\n    constructor(element, config) {\n      super(element);\n      this._popper = null;\n      this._config = this._getConfig(config);\n      this._menu = this._getMenuElement();\n      this._inNavbar = this._detectNavbar();\n\n      this._addEventListeners();\n    } // Getters\n\n\n    static get Default() {\n      return Default$7;\n    }\n\n    static get DefaultType() {\n      return DefaultType$7;\n    }\n\n    static get NAME() {\n      return NAME$8;\n    } // Public\n\n\n    toggle() {\n      if (isDisabled(this._element)) {\n        return;\n      }\n\n      const isActive = this._element.classList.contains(CLASS_NAME_SHOW$7);\n\n      if (isActive) {\n        this.hide();\n        return;\n      }\n\n      this.show();\n    }\n\n    show() {\n      if (isDisabled(this._element) || this._menu.classList.contains(CLASS_NAME_SHOW$7)) {\n        return;\n      }\n\n      const parent = Dropdown.getParentFromElement(this._element);\n      const relatedTarget = {\n        relatedTarget: this._element\n      };\n      const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$4, relatedTarget);\n\n      if (showEvent.defaultPrevented) {\n        return;\n      } // Totally disable Popper for Dropdowns in Navbar\n\n\n      if (this._inNavbar) {\n        Manipulator.setDataAttribute(this._menu, 'popper', 'none');\n      } else {\n        if (typeof Popper === 'undefined') {\n          throw new TypeError('Bootstrap\\'s dropdowns require Popper (https://popper.js.org)');\n        }\n\n        let referenceElement = this._element;\n\n        if (this._config.reference === 'parent') {\n          referenceElement = parent;\n        } else if (isElement$1(this._config.reference)) {\n          referenceElement = getElement(this._config.reference);\n        } else if (typeof this._config.reference === 'object') {\n          referenceElement = this._config.reference;\n        }\n\n        const popperConfig = this._getPopperConfig();\n\n        const isDisplayStatic = popperConfig.modifiers.find(modifier => modifier.name === 'applyStyles' && modifier.enabled === false);\n        this._popper = createPopper(referenceElement, this._menu, popperConfig);\n\n        if (isDisplayStatic) {\n          Manipulator.setDataAttribute(this._menu, 'popper', 'static');\n        }\n      } // If this is a touch-enabled device we add extra\n      // empty mouseover listeners to the body's immediate children;\n      // only needed because of broken event delegation on iOS\n      // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n\n\n      if ('ontouchstart' in document.documentElement && !parent.closest(SELECTOR_NAVBAR_NAV)) {\n        [].concat(...document.body.children).forEach(elem => EventHandler.on(elem, 'mouseover', noop));\n      }\n\n      this._element.focus();\n\n      this._element.setAttribute('aria-expanded', true);\n\n      this._menu.classList.toggle(CLASS_NAME_SHOW$7);\n\n      this._element.classList.toggle(CLASS_NAME_SHOW$7);\n\n      EventHandler.trigger(this._element, EVENT_SHOWN$4, relatedTarget);\n    }\n\n    hide() {\n      if (isDisabled(this._element) || !this._menu.classList.contains(CLASS_NAME_SHOW$7)) {\n        return;\n      }\n\n      const relatedTarget = {\n        relatedTarget: this._element\n      };\n\n      this._completeHide(relatedTarget);\n    }\n\n    dispose() {\n      if (this._popper) {\n        this._popper.destroy();\n      }\n\n      super.dispose();\n    }\n\n    update() {\n      this._inNavbar = this._detectNavbar();\n\n      if (this._popper) {\n        this._popper.update();\n      }\n    } // Private\n\n\n    _addEventListeners() {\n      EventHandler.on(this._element, EVENT_CLICK, event => {\n        event.preventDefault();\n        this.toggle();\n      });\n    }\n\n    _completeHide(relatedTarget) {\n      const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$4, relatedTarget);\n\n      if (hideEvent.defaultPrevented) {\n        return;\n      } // If this is a touch-enabled device we remove the extra\n      // empty mouseover listeners we added for iOS support\n\n\n      if ('ontouchstart' in document.documentElement) {\n        [].concat(...document.body.children).forEach(elem => EventHandler.off(elem, 'mouseover', noop));\n      }\n\n      if (this._popper) {\n        this._popper.destroy();\n      }\n\n      this._menu.classList.remove(CLASS_NAME_SHOW$7);\n\n      this._element.classList.remove(CLASS_NAME_SHOW$7);\n\n      this._element.setAttribute('aria-expanded', 'false');\n\n      Manipulator.removeDataAttribute(this._menu, 'popper');\n      EventHandler.trigger(this._element, EVENT_HIDDEN$4, relatedTarget);\n    }\n\n    _getConfig(config) {\n      config = { ...this.constructor.Default,\n        ...Manipulator.getDataAttributes(this._element),\n        ...config\n      };\n      typeCheckConfig(NAME$8, config, this.constructor.DefaultType);\n\n      if (typeof config.reference === 'object' && !isElement$1(config.reference) && typeof config.reference.getBoundingClientRect !== 'function') {\n        // Popper virtual elements require a getBoundingClientRect method\n        throw new TypeError(`${NAME$8.toUpperCase()}: Option \"reference\" provided type \"object\" without a required \"getBoundingClientRect\" method.`);\n      }\n\n      return config;\n    }\n\n    _getMenuElement() {\n      return SelectorEngine.next(this._element, SELECTOR_MENU)[0];\n    }\n\n    _getPlacement() {\n      const parentDropdown = this._element.parentNode;\n\n      if (parentDropdown.classList.contains(CLASS_NAME_DROPEND)) {\n        return PLACEMENT_RIGHT;\n      }\n\n      if (parentDropdown.classList.contains(CLASS_NAME_DROPSTART)) {\n        return PLACEMENT_LEFT;\n      } // We need to trim the value because custom properties can also include spaces\n\n\n      const isEnd = getComputedStyle(this._menu).getPropertyValue('--bs-position').trim() === 'end';\n\n      if (parentDropdown.classList.contains(CLASS_NAME_DROPUP)) {\n        return isEnd ? PLACEMENT_TOPEND : PLACEMENT_TOP;\n      }\n\n      return isEnd ? PLACEMENT_BOTTOMEND : PLACEMENT_BOTTOM;\n    }\n\n    _detectNavbar() {\n      return this._element.closest(`.${CLASS_NAME_NAVBAR}`) !== null;\n    }\n\n    _getOffset() {\n      const {\n        offset\n      } = this._config;\n\n      if (typeof offset === 'string') {\n        return offset.split(',').map(val => Number.parseInt(val, 10));\n      }\n\n      if (typeof offset === 'function') {\n        return popperData => offset(popperData, this._element);\n      }\n\n      return offset;\n    }\n\n    _getPopperConfig() {\n      const defaultBsPopperConfig = {\n        placement: this._getPlacement(),\n        modifiers: [{\n          name: 'preventOverflow',\n          options: {\n            boundary: this._config.boundary\n          }\n        }, {\n          name: 'offset',\n          options: {\n            offset: this._getOffset()\n          }\n        }]\n      }; // Disable Popper if we have a static display\n\n      if (this._config.display === 'static') {\n        defaultBsPopperConfig.modifiers = [{\n          name: 'applyStyles',\n          enabled: false\n        }];\n      }\n\n      return { ...defaultBsPopperConfig,\n        ...(typeof this._config.popperConfig === 'function' ? this._config.popperConfig(defaultBsPopperConfig) : this._config.popperConfig)\n      };\n    }\n\n    _selectMenuItem({\n      key,\n      target\n    }) {\n      const items = SelectorEngine.find(SELECTOR_VISIBLE_ITEMS, this._menu).filter(isVisible);\n\n      if (!items.length) {\n        return;\n      } // if target isn't included in items (e.g. when expanding the dropdown)\n      // allow cycling to get the last item in case key equals ARROW_UP_KEY\n\n\n      getNextActiveElement(items, target, key === ARROW_DOWN_KEY, !items.includes(target)).focus();\n    } // Static\n\n\n    static dropdownInterface(element, config) {\n      const data = Dropdown.getOrCreateInstance(element, config);\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config]();\n      }\n    }\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        Dropdown.dropdownInterface(this, config);\n      });\n    }\n\n    static clearMenus(event) {\n      if (event && (event.button === RIGHT_MOUSE_BUTTON || event.type === 'keyup' && event.key !== TAB_KEY)) {\n        return;\n      }\n\n      const toggles = SelectorEngine.find(SELECTOR_DATA_TOGGLE$3);\n\n      for (let i = 0, len = toggles.length; i < len; i++) {\n        const context = Dropdown.getInstance(toggles[i]);\n\n        if (!context || context._config.autoClose === false) {\n          continue;\n        }\n\n        if (!context._element.classList.contains(CLASS_NAME_SHOW$7)) {\n          continue;\n        }\n\n        const relatedTarget = {\n          relatedTarget: context._element\n        };\n\n        if (event) {\n          const composedPath = event.composedPath();\n          const isMenuTarget = composedPath.includes(context._menu);\n\n          if (composedPath.includes(context._element) || context._config.autoClose === 'inside' && !isMenuTarget || context._config.autoClose === 'outside' && isMenuTarget) {\n            continue;\n          } // Tab navigation through the dropdown menu or events from contained inputs shouldn't close the menu\n\n\n          if (context._menu.contains(event.target) && (event.type === 'keyup' && event.key === TAB_KEY || /input|select|option|textarea|form/i.test(event.target.tagName))) {\n            continue;\n          }\n\n          if (event.type === 'click') {\n            relatedTarget.clickEvent = event;\n          }\n        }\n\n        context._completeHide(relatedTarget);\n      }\n    }\n\n    static getParentFromElement(element) {\n      return getElementFromSelector(element) || element.parentNode;\n    }\n\n    static dataApiKeydownHandler(event) {\n      // If not input/textarea:\n      //  - And not a key in REGEXP_KEYDOWN => not a dropdown command\n      // If input/textarea:\n      //  - If space key => not a dropdown command\n      //  - If key is other than escape\n      //    - If key is not up or down => not a dropdown command\n      //    - If trigger inside the menu => not a dropdown command\n      if (/input|textarea/i.test(event.target.tagName) ? event.key === SPACE_KEY || event.key !== ESCAPE_KEY$2 && (event.key !== ARROW_DOWN_KEY && event.key !== ARROW_UP_KEY || event.target.closest(SELECTOR_MENU)) : !REGEXP_KEYDOWN.test(event.key)) {\n        return;\n      }\n\n      const isActive = this.classList.contains(CLASS_NAME_SHOW$7);\n\n      if (!isActive && event.key === ESCAPE_KEY$2) {\n        return;\n      }\n\n      event.preventDefault();\n      event.stopPropagation();\n\n      if (isDisabled(this)) {\n        return;\n      }\n\n      const getToggleButton = () => this.matches(SELECTOR_DATA_TOGGLE$3) ? this : SelectorEngine.prev(this, SELECTOR_DATA_TOGGLE$3)[0];\n\n      if (event.key === ESCAPE_KEY$2) {\n        getToggleButton().focus();\n        Dropdown.clearMenus();\n        return;\n      }\n\n      if (event.key === ARROW_UP_KEY || event.key === ARROW_DOWN_KEY) {\n        if (!isActive) {\n          getToggleButton().click();\n        }\n\n        Dropdown.getInstance(getToggleButton())._selectMenuItem(event);\n\n        return;\n      }\n\n      if (!isActive || event.key === SPACE_KEY) {\n        Dropdown.clearMenus();\n      }\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_DATA_TOGGLE$3, Dropdown.dataApiKeydownHandler);\n  EventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown.dataApiKeydownHandler);\n  EventHandler.on(document, EVENT_CLICK_DATA_API$3, Dropdown.clearMenus);\n  EventHandler.on(document, EVENT_KEYUP_DATA_API, Dropdown.clearMenus);\n  EventHandler.on(document, EVENT_CLICK_DATA_API$3, SELECTOR_DATA_TOGGLE$3, function (event) {\n    event.preventDefault();\n    Dropdown.dropdownInterface(this);\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Dropdown to jQuery only if jQuery is present\n   */\n\n  defineJQueryPlugin(Dropdown);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): util/scrollBar.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  const SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top';\n  const SELECTOR_STICKY_CONTENT = '.sticky-top';\n\n  class ScrollBarHelper {\n    constructor() {\n      this._element = document.body;\n    }\n\n    getWidth() {\n      // https://developer.mozilla.org/en-US/docs/Web/API/Window/innerWidth#usage_notes\n      const documentWidth = document.documentElement.clientWidth;\n      return Math.abs(window.innerWidth - documentWidth);\n    }\n\n    hide() {\n      const width = this.getWidth();\n\n      this._disableOverFlow(); // give padding to element to balance the hidden scrollbar width\n\n\n      this._setElementAttributes(this._element, 'paddingRight', calculatedValue => calculatedValue + width); // trick: We adjust positive paddingRight and negative marginRight to sticky-top elements to keep showing fullwidth\n\n\n      this._setElementAttributes(SELECTOR_FIXED_CONTENT, 'paddingRight', calculatedValue => calculatedValue + width);\n\n      this._setElementAttributes(SELECTOR_STICKY_CONTENT, 'marginRight', calculatedValue => calculatedValue - width);\n    }\n\n    _disableOverFlow() {\n      this._saveInitialAttribute(this._element, 'overflow');\n\n      this._element.style.overflow = 'hidden';\n    }\n\n    _setElementAttributes(selector, styleProp, callback) {\n      const scrollbarWidth = this.getWidth();\n\n      const manipulationCallBack = element => {\n        if (element !== this._element && window.innerWidth > element.clientWidth + scrollbarWidth) {\n          return;\n        }\n\n        this._saveInitialAttribute(element, styleProp);\n\n        const calculatedValue = window.getComputedStyle(element)[styleProp];\n        element.style[styleProp] = `${callback(Number.parseFloat(calculatedValue))}px`;\n      };\n\n      this._applyManipulationCallback(selector, manipulationCallBack);\n    }\n\n    reset() {\n      this._resetElementAttributes(this._element, 'overflow');\n\n      this._resetElementAttributes(this._element, 'paddingRight');\n\n      this._resetElementAttributes(SELECTOR_FIXED_CONTENT, 'paddingRight');\n\n      this._resetElementAttributes(SELECTOR_STICKY_CONTENT, 'marginRight');\n    }\n\n    _saveInitialAttribute(element, styleProp) {\n      const actualValue = element.style[styleProp];\n\n      if (actualValue) {\n        Manipulator.setDataAttribute(element, styleProp, actualValue);\n      }\n    }\n\n    _resetElementAttributes(selector, styleProp) {\n      const manipulationCallBack = element => {\n        const value = Manipulator.getDataAttribute(element, styleProp);\n\n        if (typeof value === 'undefined') {\n          element.style.removeProperty(styleProp);\n        } else {\n          Manipulator.removeDataAttribute(element, styleProp);\n          element.style[styleProp] = value;\n        }\n      };\n\n      this._applyManipulationCallback(selector, manipulationCallBack);\n    }\n\n    _applyManipulationCallback(selector, callBack) {\n      if (isElement$1(selector)) {\n        callBack(selector);\n      } else {\n        SelectorEngine.find(selector, this._element).forEach(callBack);\n      }\n    }\n\n    isOverflowing() {\n      return this.getWidth() > 0;\n    }\n\n  }\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): util/backdrop.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  const Default$6 = {\n    isVisible: true,\n    // if false, we use the backdrop helper without adding any element to the dom\n    isAnimated: false,\n    rootElement: 'body',\n    // give the choice to place backdrop under different elements\n    clickCallback: null\n  };\n  const DefaultType$6 = {\n    isVisible: 'boolean',\n    isAnimated: 'boolean',\n    rootElement: '(element|string)',\n    clickCallback: '(function|null)'\n  };\n  const NAME$7 = 'backdrop';\n  const CLASS_NAME_BACKDROP = 'modal-backdrop';\n  const CLASS_NAME_FADE$5 = 'fade';\n  const CLASS_NAME_SHOW$6 = 'show';\n  const EVENT_MOUSEDOWN = `mousedown.bs.${NAME$7}`;\n\n  class Backdrop {\n    constructor(config) {\n      this._config = this._getConfig(config);\n      this._isAppended = false;\n      this._element = null;\n    }\n\n    show(callback) {\n      if (!this._config.isVisible) {\n        execute(callback);\n        return;\n      }\n\n      this._append();\n\n      if (this._config.isAnimated) {\n        reflow(this._getElement());\n      }\n\n      this._getElement().classList.add(CLASS_NAME_SHOW$6);\n\n      this._emulateAnimation(() => {\n        execute(callback);\n      });\n    }\n\n    hide(callback) {\n      if (!this._config.isVisible) {\n        execute(callback);\n        return;\n      }\n\n      this._getElement().classList.remove(CLASS_NAME_SHOW$6);\n\n      this._emulateAnimation(() => {\n        this.dispose();\n        execute(callback);\n      });\n    } // Private\n\n\n    _getElement() {\n      if (!this._element) {\n        const backdrop = document.createElement('div');\n        backdrop.className = CLASS_NAME_BACKDROP;\n\n        if (this._config.isAnimated) {\n          backdrop.classList.add(CLASS_NAME_FADE$5);\n        }\n\n        this._element = backdrop;\n      }\n\n      return this._element;\n    }\n\n    _getConfig(config) {\n      config = { ...Default$6,\n        ...(typeof config === 'object' ? config : {})\n      }; // use getElement() with the default \"body\" to get a fresh Element on each instantiation\n\n      config.rootElement = getElement(config.rootElement);\n      typeCheckConfig(NAME$7, config, DefaultType$6);\n      return config;\n    }\n\n    _append() {\n      if (this._isAppended) {\n        return;\n      }\n\n      this._config.rootElement.appendChild(this._getElement());\n\n      EventHandler.on(this._getElement(), EVENT_MOUSEDOWN, () => {\n        execute(this._config.clickCallback);\n      });\n      this._isAppended = true;\n    }\n\n    dispose() {\n      if (!this._isAppended) {\n        return;\n      }\n\n      EventHandler.off(this._element, EVENT_MOUSEDOWN);\n\n      this._element.remove();\n\n      this._isAppended = false;\n    }\n\n    _emulateAnimation(callback) {\n      executeAfterTransition(callback, this._getElement(), this._config.isAnimated);\n    }\n\n  }\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): modal.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$6 = 'modal';\n  const DATA_KEY$6 = 'bs.modal';\n  const EVENT_KEY$6 = `.${DATA_KEY$6}`;\n  const DATA_API_KEY$3 = '.data-api';\n  const ESCAPE_KEY$1 = 'Escape';\n  const Default$5 = {\n    backdrop: true,\n    keyboard: true,\n    focus: true\n  };\n  const DefaultType$5 = {\n    backdrop: '(boolean|string)',\n    keyboard: 'boolean',\n    focus: 'boolean'\n  };\n  const EVENT_HIDE$3 = `hide${EVENT_KEY$6}`;\n  const EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY$6}`;\n  const EVENT_HIDDEN$3 = `hidden${EVENT_KEY$6}`;\n  const EVENT_SHOW$3 = `show${EVENT_KEY$6}`;\n  const EVENT_SHOWN$3 = `shown${EVENT_KEY$6}`;\n  const EVENT_FOCUSIN$2 = `focusin${EVENT_KEY$6}`;\n  const EVENT_RESIZE = `resize${EVENT_KEY$6}`;\n  const EVENT_CLICK_DISMISS$2 = `click.dismiss${EVENT_KEY$6}`;\n  const EVENT_KEYDOWN_DISMISS$1 = `keydown.dismiss${EVENT_KEY$6}`;\n  const EVENT_MOUSEUP_DISMISS = `mouseup.dismiss${EVENT_KEY$6}`;\n  const EVENT_MOUSEDOWN_DISMISS = `mousedown.dismiss${EVENT_KEY$6}`;\n  const EVENT_CLICK_DATA_API$2 = `click${EVENT_KEY$6}${DATA_API_KEY$3}`;\n  const CLASS_NAME_OPEN = 'modal-open';\n  const CLASS_NAME_FADE$4 = 'fade';\n  const CLASS_NAME_SHOW$5 = 'show';\n  const CLASS_NAME_STATIC = 'modal-static';\n  const SELECTOR_DIALOG = '.modal-dialog';\n  const SELECTOR_MODAL_BODY = '.modal-body';\n  const SELECTOR_DATA_TOGGLE$2 = '[data-bs-toggle=\"modal\"]';\n  const SELECTOR_DATA_DISMISS$2 = '[data-bs-dismiss=\"modal\"]';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Modal extends BaseComponent {\n    constructor(element, config) {\n      super(element);\n      this._config = this._getConfig(config);\n      this._dialog = SelectorEngine.findOne(SELECTOR_DIALOG, this._element);\n      this._backdrop = this._initializeBackDrop();\n      this._isShown = false;\n      this._ignoreBackdropClick = false;\n      this._isTransitioning = false;\n      this._scrollBar = new ScrollBarHelper();\n    } // Getters\n\n\n    static get Default() {\n      return Default$5;\n    }\n\n    static get NAME() {\n      return NAME$6;\n    } // Public\n\n\n    toggle(relatedTarget) {\n      return this._isShown ? this.hide() : this.show(relatedTarget);\n    }\n\n    show(relatedTarget) {\n      if (this._isShown || this._isTransitioning) {\n        return;\n      }\n\n      const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$3, {\n        relatedTarget\n      });\n\n      if (showEvent.defaultPrevented) {\n        return;\n      }\n\n      this._isShown = true;\n\n      if (this._isAnimated()) {\n        this._isTransitioning = true;\n      }\n\n      this._scrollBar.hide();\n\n      document.body.classList.add(CLASS_NAME_OPEN);\n\n      this._adjustDialog();\n\n      this._setEscapeEvent();\n\n      this._setResizeEvent();\n\n      EventHandler.on(this._element, EVENT_CLICK_DISMISS$2, SELECTOR_DATA_DISMISS$2, event => this.hide(event));\n      EventHandler.on(this._dialog, EVENT_MOUSEDOWN_DISMISS, () => {\n        EventHandler.one(this._element, EVENT_MOUSEUP_DISMISS, event => {\n          if (event.target === this._element) {\n            this._ignoreBackdropClick = true;\n          }\n        });\n      });\n\n      this._showBackdrop(() => this._showElement(relatedTarget));\n    }\n\n    hide(event) {\n      if (event && ['A', 'AREA'].includes(event.target.tagName)) {\n        event.preventDefault();\n      }\n\n      if (!this._isShown || this._isTransitioning) {\n        return;\n      }\n\n      const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$3);\n\n      if (hideEvent.defaultPrevented) {\n        return;\n      }\n\n      this._isShown = false;\n\n      const isAnimated = this._isAnimated();\n\n      if (isAnimated) {\n        this._isTransitioning = true;\n      }\n\n      this._setEscapeEvent();\n\n      this._setResizeEvent();\n\n      EventHandler.off(document, EVENT_FOCUSIN$2);\n\n      this._element.classList.remove(CLASS_NAME_SHOW$5);\n\n      EventHandler.off(this._element, EVENT_CLICK_DISMISS$2);\n      EventHandler.off(this._dialog, EVENT_MOUSEDOWN_DISMISS);\n\n      this._queueCallback(() => this._hideModal(), this._element, isAnimated);\n    }\n\n    dispose() {\n      [window, this._dialog].forEach(htmlElement => EventHandler.off(htmlElement, EVENT_KEY$6));\n\n      this._backdrop.dispose();\n\n      super.dispose();\n      /**\n       * `document` has 2 events `EVENT_FOCUSIN` and `EVENT_CLICK_DATA_API`\n       * Do not move `document` in `htmlElements` array\n       * It will remove `EVENT_CLICK_DATA_API` event that should remain\n       */\n\n      EventHandler.off(document, EVENT_FOCUSIN$2);\n    }\n\n    handleUpdate() {\n      this._adjustDialog();\n    } // Private\n\n\n    _initializeBackDrop() {\n      return new Backdrop({\n        isVisible: Boolean(this._config.backdrop),\n        // 'static' option will be translated to true, and booleans will keep their value\n        isAnimated: this._isAnimated()\n      });\n    }\n\n    _getConfig(config) {\n      config = { ...Default$5,\n        ...Manipulator.getDataAttributes(this._element),\n        ...(typeof config === 'object' ? config : {})\n      };\n      typeCheckConfig(NAME$6, config, DefaultType$5);\n      return config;\n    }\n\n    _showElement(relatedTarget) {\n      const isAnimated = this._isAnimated();\n\n      const modalBody = SelectorEngine.findOne(SELECTOR_MODAL_BODY, this._dialog);\n\n      if (!this._element.parentNode || this._element.parentNode.nodeType !== Node.ELEMENT_NODE) {\n        // Don't move modal's DOM position\n        document.body.appendChild(this._element);\n      }\n\n      this._element.style.display = 'block';\n\n      this._element.removeAttribute('aria-hidden');\n\n      this._element.setAttribute('aria-modal', true);\n\n      this._element.setAttribute('role', 'dialog');\n\n      this._element.scrollTop = 0;\n\n      if (modalBody) {\n        modalBody.scrollTop = 0;\n      }\n\n      if (isAnimated) {\n        reflow(this._element);\n      }\n\n      this._element.classList.add(CLASS_NAME_SHOW$5);\n\n      if (this._config.focus) {\n        this._enforceFocus();\n      }\n\n      const transitionComplete = () => {\n        if (this._config.focus) {\n          this._element.focus();\n        }\n\n        this._isTransitioning = false;\n        EventHandler.trigger(this._element, EVENT_SHOWN$3, {\n          relatedTarget\n        });\n      };\n\n      this._queueCallback(transitionComplete, this._dialog, isAnimated);\n    }\n\n    _enforceFocus() {\n      EventHandler.off(document, EVENT_FOCUSIN$2); // guard against infinite focus loop\n\n      EventHandler.on(document, EVENT_FOCUSIN$2, event => {\n        if (document !== event.target && this._element !== event.target && !this._element.contains(event.target)) {\n          this._element.focus();\n        }\n      });\n    }\n\n    _setEscapeEvent() {\n      if (this._isShown) {\n        EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS$1, event => {\n          if (this._config.keyboard && event.key === ESCAPE_KEY$1) {\n            event.preventDefault();\n            this.hide();\n          } else if (!this._config.keyboard && event.key === ESCAPE_KEY$1) {\n            this._triggerBackdropTransition();\n          }\n        });\n      } else {\n        EventHandler.off(this._element, EVENT_KEYDOWN_DISMISS$1);\n      }\n    }\n\n    _setResizeEvent() {\n      if (this._isShown) {\n        EventHandler.on(window, EVENT_RESIZE, () => this._adjustDialog());\n      } else {\n        EventHandler.off(window, EVENT_RESIZE);\n      }\n    }\n\n    _hideModal() {\n      this._element.style.display = 'none';\n\n      this._element.setAttribute('aria-hidden', true);\n\n      this._element.removeAttribute('aria-modal');\n\n      this._element.removeAttribute('role');\n\n      this._isTransitioning = false;\n\n      this._backdrop.hide(() => {\n        document.body.classList.remove(CLASS_NAME_OPEN);\n\n        this._resetAdjustments();\n\n        this._scrollBar.reset();\n\n        EventHandler.trigger(this._element, EVENT_HIDDEN$3);\n      });\n    }\n\n    _showBackdrop(callback) {\n      EventHandler.on(this._element, EVENT_CLICK_DISMISS$2, event => {\n        if (this._ignoreBackdropClick) {\n          this._ignoreBackdropClick = false;\n          return;\n        }\n\n        if (event.target !== event.currentTarget) {\n          return;\n        }\n\n        if (this._config.backdrop === true) {\n          this.hide();\n        } else if (this._config.backdrop === 'static') {\n          this._triggerBackdropTransition();\n        }\n      });\n\n      this._backdrop.show(callback);\n    }\n\n    _isAnimated() {\n      return this._element.classList.contains(CLASS_NAME_FADE$4);\n    }\n\n    _triggerBackdropTransition() {\n      const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED);\n\n      if (hideEvent.defaultPrevented) {\n        return;\n      }\n\n      const {\n        classList,\n        scrollHeight,\n        style\n      } = this._element;\n      const isModalOverflowing = scrollHeight > document.documentElement.clientHeight; // return if the following background transition hasn't yet completed\n\n      if (!isModalOverflowing && style.overflowY === 'hidden' || classList.contains(CLASS_NAME_STATIC)) {\n        return;\n      }\n\n      if (!isModalOverflowing) {\n        style.overflowY = 'hidden';\n      }\n\n      classList.add(CLASS_NAME_STATIC);\n\n      this._queueCallback(() => {\n        classList.remove(CLASS_NAME_STATIC);\n\n        if (!isModalOverflowing) {\n          this._queueCallback(() => {\n            style.overflowY = '';\n          }, this._dialog);\n        }\n      }, this._dialog);\n\n      this._element.focus();\n    } // ----------------------------------------------------------------------\n    // the following methods are used to handle overflowing modals\n    // ----------------------------------------------------------------------\n\n\n    _adjustDialog() {\n      const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;\n\n      const scrollbarWidth = this._scrollBar.getWidth();\n\n      const isBodyOverflowing = scrollbarWidth > 0;\n\n      if (!isBodyOverflowing && isModalOverflowing && !isRTL() || isBodyOverflowing && !isModalOverflowing && isRTL()) {\n        this._element.style.paddingLeft = `${scrollbarWidth}px`;\n      }\n\n      if (isBodyOverflowing && !isModalOverflowing && !isRTL() || !isBodyOverflowing && isModalOverflowing && isRTL()) {\n        this._element.style.paddingRight = `${scrollbarWidth}px`;\n      }\n    }\n\n    _resetAdjustments() {\n      this._element.style.paddingLeft = '';\n      this._element.style.paddingRight = '';\n    } // Static\n\n\n    static jQueryInterface(config, relatedTarget) {\n      return this.each(function () {\n        const data = Modal.getOrCreateInstance(this, config);\n\n        if (typeof config !== 'string') {\n          return;\n        }\n\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config](relatedTarget);\n      });\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(document, EVENT_CLICK_DATA_API$2, SELECTOR_DATA_TOGGLE$2, function (event) {\n    const target = getElementFromSelector(this);\n\n    if (['A', 'AREA'].includes(this.tagName)) {\n      event.preventDefault();\n    }\n\n    EventHandler.one(target, EVENT_SHOW$3, showEvent => {\n      if (showEvent.defaultPrevented) {\n        // only register focus restorer if modal will actually get shown\n        return;\n      }\n\n      EventHandler.one(target, EVENT_HIDDEN$3, () => {\n        if (isVisible(this)) {\n          this.focus();\n        }\n      });\n    });\n    const data = Modal.getOrCreateInstance(target);\n    data.toggle(this);\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Modal to jQuery only if jQuery is present\n   */\n\n  defineJQueryPlugin(Modal);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): offcanvas.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$5 = 'offcanvas';\n  const DATA_KEY$5 = 'bs.offcanvas';\n  const EVENT_KEY$5 = `.${DATA_KEY$5}`;\n  const DATA_API_KEY$2 = '.data-api';\n  const EVENT_LOAD_DATA_API$1 = `load${EVENT_KEY$5}${DATA_API_KEY$2}`;\n  const ESCAPE_KEY = 'Escape';\n  const Default$4 = {\n    backdrop: true,\n    keyboard: true,\n    scroll: false\n  };\n  const DefaultType$4 = {\n    backdrop: 'boolean',\n    keyboard: 'boolean',\n    scroll: 'boolean'\n  };\n  const CLASS_NAME_SHOW$4 = 'show';\n  const OPEN_SELECTOR = '.offcanvas.show';\n  const EVENT_SHOW$2 = `show${EVENT_KEY$5}`;\n  const EVENT_SHOWN$2 = `shown${EVENT_KEY$5}`;\n  const EVENT_HIDE$2 = `hide${EVENT_KEY$5}`;\n  const EVENT_HIDDEN$2 = `hidden${EVENT_KEY$5}`;\n  const EVENT_FOCUSIN$1 = `focusin${EVENT_KEY$5}`;\n  const EVENT_CLICK_DATA_API$1 = `click${EVENT_KEY$5}${DATA_API_KEY$2}`;\n  const EVENT_CLICK_DISMISS$1 = `click.dismiss${EVENT_KEY$5}`;\n  const EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY$5}`;\n  const SELECTOR_DATA_DISMISS$1 = '[data-bs-dismiss=\"offcanvas\"]';\n  const SELECTOR_DATA_TOGGLE$1 = '[data-bs-toggle=\"offcanvas\"]';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Offcanvas extends BaseComponent {\n    constructor(element, config) {\n      super(element);\n      this._config = this._getConfig(config);\n      this._isShown = false;\n      this._backdrop = this._initializeBackDrop();\n\n      this._addEventListeners();\n    } // Getters\n\n\n    static get NAME() {\n      return NAME$5;\n    }\n\n    static get Default() {\n      return Default$4;\n    } // Public\n\n\n    toggle(relatedTarget) {\n      return this._isShown ? this.hide() : this.show(relatedTarget);\n    }\n\n    show(relatedTarget) {\n      if (this._isShown) {\n        return;\n      }\n\n      const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$2, {\n        relatedTarget\n      });\n\n      if (showEvent.defaultPrevented) {\n        return;\n      }\n\n      this._isShown = true;\n      this._element.style.visibility = 'visible';\n\n      this._backdrop.show();\n\n      if (!this._config.scroll) {\n        new ScrollBarHelper().hide();\n\n        this._enforceFocusOnElement(this._element);\n      }\n\n      this._element.removeAttribute('aria-hidden');\n\n      this._element.setAttribute('aria-modal', true);\n\n      this._element.setAttribute('role', 'dialog');\n\n      this._element.classList.add(CLASS_NAME_SHOW$4);\n\n      const completeCallBack = () => {\n        EventHandler.trigger(this._element, EVENT_SHOWN$2, {\n          relatedTarget\n        });\n      };\n\n      this._queueCallback(completeCallBack, this._element, true);\n    }\n\n    hide() {\n      if (!this._isShown) {\n        return;\n      }\n\n      const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$2);\n\n      if (hideEvent.defaultPrevented) {\n        return;\n      }\n\n      EventHandler.off(document, EVENT_FOCUSIN$1);\n\n      this._element.blur();\n\n      this._isShown = false;\n\n      this._element.classList.remove(CLASS_NAME_SHOW$4);\n\n      this._backdrop.hide();\n\n      const completeCallback = () => {\n        this._element.setAttribute('aria-hidden', true);\n\n        this._element.removeAttribute('aria-modal');\n\n        this._element.removeAttribute('role');\n\n        this._element.style.visibility = 'hidden';\n\n        if (!this._config.scroll) {\n          new ScrollBarHelper().reset();\n        }\n\n        EventHandler.trigger(this._element, EVENT_HIDDEN$2);\n      };\n\n      this._queueCallback(completeCallback, this._element, true);\n    }\n\n    dispose() {\n      this._backdrop.dispose();\n\n      super.dispose();\n      EventHandler.off(document, EVENT_FOCUSIN$1);\n    } // Private\n\n\n    _getConfig(config) {\n      config = { ...Default$4,\n        ...Manipulator.getDataAttributes(this._element),\n        ...(typeof config === 'object' ? config : {})\n      };\n      typeCheckConfig(NAME$5, config, DefaultType$4);\n      return config;\n    }\n\n    _initializeBackDrop() {\n      return new Backdrop({\n        isVisible: this._config.backdrop,\n        isAnimated: true,\n        rootElement: this._element.parentNode,\n        clickCallback: () => this.hide()\n      });\n    }\n\n    _enforceFocusOnElement(element) {\n      EventHandler.off(document, EVENT_FOCUSIN$1); // guard against infinite focus loop\n\n      EventHandler.on(document, EVENT_FOCUSIN$1, event => {\n        if (document !== event.target && element !== event.target && !element.contains(event.target)) {\n          element.focus();\n        }\n      });\n      element.focus();\n    }\n\n    _addEventListeners() {\n      EventHandler.on(this._element, EVENT_CLICK_DISMISS$1, SELECTOR_DATA_DISMISS$1, () => this.hide());\n      EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS, event => {\n        if (this._config.keyboard && event.key === ESCAPE_KEY) {\n          this.hide();\n        }\n      });\n    } // Static\n\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = Offcanvas.getOrCreateInstance(this, config);\n\n        if (typeof config !== 'string') {\n          return;\n        }\n\n        if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config](this);\n      });\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(document, EVENT_CLICK_DATA_API$1, SELECTOR_DATA_TOGGLE$1, function (event) {\n    const target = getElementFromSelector(this);\n\n    if (['A', 'AREA'].includes(this.tagName)) {\n      event.preventDefault();\n    }\n\n    if (isDisabled(this)) {\n      return;\n    }\n\n    EventHandler.one(target, EVENT_HIDDEN$2, () => {\n      // focus on trigger when it is closed\n      if (isVisible(this)) {\n        this.focus();\n      }\n    }); // avoid conflict when clicking a toggler of an offcanvas, while another is open\n\n    const allReadyOpen = SelectorEngine.findOne(OPEN_SELECTOR);\n\n    if (allReadyOpen && allReadyOpen !== target) {\n      Offcanvas.getInstance(allReadyOpen).hide();\n    }\n\n    const data = Offcanvas.getOrCreateInstance(target);\n    data.toggle(this);\n  });\n  EventHandler.on(window, EVENT_LOAD_DATA_API$1, () => SelectorEngine.find(OPEN_SELECTOR).forEach(el => Offcanvas.getOrCreateInstance(el).show()));\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   */\n\n  defineJQueryPlugin(Offcanvas);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): util/sanitizer.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  const uriAttrs = new Set(['background', 'cite', 'href', 'itemtype', 'longdesc', 'poster', 'src', 'xlink:href']);\n  const ARIA_ATTRIBUTE_PATTERN = /^aria-[\\w-]*$/i;\n  /**\n   * A pattern that recognizes a commonly useful subset of URLs that are safe.\n   *\n   * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts\n   */\n\n  const SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file):|[^#&/:?]*(?:[#/?]|$))/i;\n  /**\n   * A pattern that matches safe data URLs. Only matches image, video and audio types.\n   *\n   * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts\n   */\n\n  const DATA_URL_PATTERN = /^data:(?:image\\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\\/(?:mpeg|mp4|ogg|webm)|audio\\/(?:mp3|oga|ogg|opus));base64,[\\d+/a-z]+=*$/i;\n\n  const allowedAttribute = (attr, allowedAttributeList) => {\n    const attrName = attr.nodeName.toLowerCase();\n\n    if (allowedAttributeList.includes(attrName)) {\n      if (uriAttrs.has(attrName)) {\n        return Boolean(SAFE_URL_PATTERN.test(attr.nodeValue) || DATA_URL_PATTERN.test(attr.nodeValue));\n      }\n\n      return true;\n    }\n\n    const regExp = allowedAttributeList.filter(attrRegex => attrRegex instanceof RegExp); // Check if a regular expression validates the attribute.\n\n    for (let i = 0, len = regExp.length; i < len; i++) {\n      if (regExp[i].test(attrName)) {\n        return true;\n      }\n    }\n\n    return false;\n  };\n\n  const DefaultAllowlist = {\n    // Global attributes allowed on any supplied element below.\n    '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],\n    a: ['target', 'href', 'title', 'rel'],\n    area: [],\n    b: [],\n    br: [],\n    col: [],\n    code: [],\n    div: [],\n    em: [],\n    hr: [],\n    h1: [],\n    h2: [],\n    h3: [],\n    h4: [],\n    h5: [],\n    h6: [],\n    i: [],\n    img: ['src', 'srcset', 'alt', 'title', 'width', 'height'],\n    li: [],\n    ol: [],\n    p: [],\n    pre: [],\n    s: [],\n    small: [],\n    span: [],\n    sub: [],\n    sup: [],\n    strong: [],\n    u: [],\n    ul: []\n  };\n  function sanitizeHtml(unsafeHtml, allowList, sanitizeFn) {\n    if (!unsafeHtml.length) {\n      return unsafeHtml;\n    }\n\n    if (sanitizeFn && typeof sanitizeFn === 'function') {\n      return sanitizeFn(unsafeHtml);\n    }\n\n    const domParser = new window.DOMParser();\n    const createdDocument = domParser.parseFromString(unsafeHtml, 'text/html');\n    const allowlistKeys = Object.keys(allowList);\n    const elements = [].concat(...createdDocument.body.querySelectorAll('*'));\n\n    for (let i = 0, len = elements.length; i < len; i++) {\n      const el = elements[i];\n      const elName = el.nodeName.toLowerCase();\n\n      if (!allowlistKeys.includes(elName)) {\n        el.remove();\n        continue;\n      }\n\n      const attributeList = [].concat(...el.attributes);\n      const allowedAttributes = [].concat(allowList['*'] || [], allowList[elName] || []);\n      attributeList.forEach(attr => {\n        if (!allowedAttribute(attr, allowedAttributes)) {\n          el.removeAttribute(attr.nodeName);\n        }\n      });\n    }\n\n    return createdDocument.body.innerHTML;\n  }\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): tooltip.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$4 = 'tooltip';\n  const DATA_KEY$4 = 'bs.tooltip';\n  const EVENT_KEY$4 = `.${DATA_KEY$4}`;\n  const CLASS_PREFIX$1 = 'bs-tooltip';\n  const BSCLS_PREFIX_REGEX$1 = new RegExp(`(^|\\\\s)${CLASS_PREFIX$1}\\\\S+`, 'g');\n  const DISALLOWED_ATTRIBUTES = new Set(['sanitize', 'allowList', 'sanitizeFn']);\n  const DefaultType$3 = {\n    animation: 'boolean',\n    template: 'string',\n    title: '(string|element|function)',\n    trigger: 'string',\n    delay: '(number|object)',\n    html: 'boolean',\n    selector: '(string|boolean)',\n    placement: '(string|function)',\n    offset: '(array|string|function)',\n    container: '(string|element|boolean)',\n    fallbackPlacements: 'array',\n    boundary: '(string|element)',\n    customClass: '(string|function)',\n    sanitize: 'boolean',\n    sanitizeFn: '(null|function)',\n    allowList: 'object',\n    popperConfig: '(null|object|function)'\n  };\n  const AttachmentMap = {\n    AUTO: 'auto',\n    TOP: 'top',\n    RIGHT: isRTL() ? 'left' : 'right',\n    BOTTOM: 'bottom',\n    LEFT: isRTL() ? 'right' : 'left'\n  };\n  const Default$3 = {\n    animation: true,\n    template: '<div class=\"tooltip\" role=\"tooltip\">' + '<div class=\"tooltip-arrow\"></div>' + '<div class=\"tooltip-inner\"></div>' + '</div>',\n    trigger: 'hover focus',\n    title: '',\n    delay: 0,\n    html: false,\n    selector: false,\n    placement: 'top',\n    offset: [0, 0],\n    container: false,\n    fallbackPlacements: ['top', 'right', 'bottom', 'left'],\n    boundary: 'clippingParents',\n    customClass: '',\n    sanitize: true,\n    sanitizeFn: null,\n    allowList: DefaultAllowlist,\n    popperConfig: null\n  };\n  const Event$2 = {\n    HIDE: `hide${EVENT_KEY$4}`,\n    HIDDEN: `hidden${EVENT_KEY$4}`,\n    SHOW: `show${EVENT_KEY$4}`,\n    SHOWN: `shown${EVENT_KEY$4}`,\n    INSERTED: `inserted${EVENT_KEY$4}`,\n    CLICK: `click${EVENT_KEY$4}`,\n    FOCUSIN: `focusin${EVENT_KEY$4}`,\n    FOCUSOUT: `focusout${EVENT_KEY$4}`,\n    MOUSEENTER: `mouseenter${EVENT_KEY$4}`,\n    MOUSELEAVE: `mouseleave${EVENT_KEY$4}`\n  };\n  const CLASS_NAME_FADE$3 = 'fade';\n  const CLASS_NAME_MODAL = 'modal';\n  const CLASS_NAME_SHOW$3 = 'show';\n  const HOVER_STATE_SHOW = 'show';\n  const HOVER_STATE_OUT = 'out';\n  const SELECTOR_TOOLTIP_INNER = '.tooltip-inner';\n  const TRIGGER_HOVER = 'hover';\n  const TRIGGER_FOCUS = 'focus';\n  const TRIGGER_CLICK = 'click';\n  const TRIGGER_MANUAL = 'manual';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Tooltip extends BaseComponent {\n    constructor(element, config) {\n      if (typeof Popper === 'undefined') {\n        throw new TypeError('Bootstrap\\'s tooltips require Popper (https://popper.js.org)');\n      }\n\n      super(element); // private\n\n      this._isEnabled = true;\n      this._timeout = 0;\n      this._hoverState = '';\n      this._activeTrigger = {};\n      this._popper = null; // Protected\n\n      this._config = this._getConfig(config);\n      this.tip = null;\n\n      this._setListeners();\n    } // Getters\n\n\n    static get Default() {\n      return Default$3;\n    }\n\n    static get NAME() {\n      return NAME$4;\n    }\n\n    static get Event() {\n      return Event$2;\n    }\n\n    static get DefaultType() {\n      return DefaultType$3;\n    } // Public\n\n\n    enable() {\n      this._isEnabled = true;\n    }\n\n    disable() {\n      this._isEnabled = false;\n    }\n\n    toggleEnabled() {\n      this._isEnabled = !this._isEnabled;\n    }\n\n    toggle(event) {\n      if (!this._isEnabled) {\n        return;\n      }\n\n      if (event) {\n        const context = this._initializeOnDelegatedTarget(event);\n\n        context._activeTrigger.click = !context._activeTrigger.click;\n\n        if (context._isWithActiveTrigger()) {\n          context._enter(null, context);\n        } else {\n          context._leave(null, context);\n        }\n      } else {\n        if (this.getTipElement().classList.contains(CLASS_NAME_SHOW$3)) {\n          this._leave(null, this);\n\n          return;\n        }\n\n        this._enter(null, this);\n      }\n    }\n\n    dispose() {\n      clearTimeout(this._timeout);\n      EventHandler.off(this._element.closest(`.${CLASS_NAME_MODAL}`), 'hide.bs.modal', this._hideModalHandler);\n\n      if (this.tip) {\n        this.tip.remove();\n      }\n\n      if (this._popper) {\n        this._popper.destroy();\n      }\n\n      super.dispose();\n    }\n\n    show() {\n      if (this._element.style.display === 'none') {\n        throw new Error('Please use show on visible elements');\n      }\n\n      if (!(this.isWithContent() && this._isEnabled)) {\n        return;\n      }\n\n      const showEvent = EventHandler.trigger(this._element, this.constructor.Event.SHOW);\n      const shadowRoot = findShadowRoot(this._element);\n      const isInTheDom = shadowRoot === null ? this._element.ownerDocument.documentElement.contains(this._element) : shadowRoot.contains(this._element);\n\n      if (showEvent.defaultPrevented || !isInTheDom) {\n        return;\n      }\n\n      const tip = this.getTipElement();\n      const tipId = getUID(this.constructor.NAME);\n      tip.setAttribute('id', tipId);\n\n      this._element.setAttribute('aria-describedby', tipId);\n\n      this.setContent();\n\n      if (this._config.animation) {\n        tip.classList.add(CLASS_NAME_FADE$3);\n      }\n\n      const placement = typeof this._config.placement === 'function' ? this._config.placement.call(this, tip, this._element) : this._config.placement;\n\n      const attachment = this._getAttachment(placement);\n\n      this._addAttachmentClass(attachment);\n\n      const {\n        container\n      } = this._config;\n      Data.set(tip, this.constructor.DATA_KEY, this);\n\n      if (!this._element.ownerDocument.documentElement.contains(this.tip)) {\n        container.appendChild(tip);\n        EventHandler.trigger(this._element, this.constructor.Event.INSERTED);\n      }\n\n      if (this._popper) {\n        this._popper.update();\n      } else {\n        this._popper = createPopper(this._element, tip, this._getPopperConfig(attachment));\n      }\n\n      tip.classList.add(CLASS_NAME_SHOW$3);\n      const customClass = typeof this._config.customClass === 'function' ? this._config.customClass() : this._config.customClass;\n\n      if (customClass) {\n        tip.classList.add(...customClass.split(' '));\n      } // If this is a touch-enabled device we add extra\n      // empty mouseover listeners to the body's immediate children;\n      // only needed because of broken event delegation on iOS\n      // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n\n\n      if ('ontouchstart' in document.documentElement) {\n        [].concat(...document.body.children).forEach(element => {\n          EventHandler.on(element, 'mouseover', noop);\n        });\n      }\n\n      const complete = () => {\n        const prevHoverState = this._hoverState;\n        this._hoverState = null;\n        EventHandler.trigger(this._element, this.constructor.Event.SHOWN);\n\n        if (prevHoverState === HOVER_STATE_OUT) {\n          this._leave(null, this);\n        }\n      };\n\n      const isAnimated = this.tip.classList.contains(CLASS_NAME_FADE$3);\n\n      this._queueCallback(complete, this.tip, isAnimated);\n    }\n\n    hide() {\n      if (!this._popper) {\n        return;\n      }\n\n      const tip = this.getTipElement();\n\n      const complete = () => {\n        if (this._isWithActiveTrigger()) {\n          return;\n        }\n\n        if (this._hoverState !== HOVER_STATE_SHOW) {\n          tip.remove();\n        }\n\n        this._cleanTipClass();\n\n        this._element.removeAttribute('aria-describedby');\n\n        EventHandler.trigger(this._element, this.constructor.Event.HIDDEN);\n\n        if (this._popper) {\n          this._popper.destroy();\n\n          this._popper = null;\n        }\n      };\n\n      const hideEvent = EventHandler.trigger(this._element, this.constructor.Event.HIDE);\n\n      if (hideEvent.defaultPrevented) {\n        return;\n      }\n\n      tip.classList.remove(CLASS_NAME_SHOW$3); // If this is a touch-enabled device we remove the extra\n      // empty mouseover listeners we added for iOS support\n\n      if ('ontouchstart' in document.documentElement) {\n        [].concat(...document.body.children).forEach(element => EventHandler.off(element, 'mouseover', noop));\n      }\n\n      this._activeTrigger[TRIGGER_CLICK] = false;\n      this._activeTrigger[TRIGGER_FOCUS] = false;\n      this._activeTrigger[TRIGGER_HOVER] = false;\n      const isAnimated = this.tip.classList.contains(CLASS_NAME_FADE$3);\n\n      this._queueCallback(complete, this.tip, isAnimated);\n\n      this._hoverState = '';\n    }\n\n    update() {\n      if (this._popper !== null) {\n        this._popper.update();\n      }\n    } // Protected\n\n\n    isWithContent() {\n      return Boolean(this.getTitle());\n    }\n\n    getTipElement() {\n      if (this.tip) {\n        return this.tip;\n      }\n\n      const element = document.createElement('div');\n      element.innerHTML = this._config.template;\n      this.tip = element.children[0];\n      return this.tip;\n    }\n\n    setContent() {\n      const tip = this.getTipElement();\n      this.setElementContent(SelectorEngine.findOne(SELECTOR_TOOLTIP_INNER, tip), this.getTitle());\n      tip.classList.remove(CLASS_NAME_FADE$3, CLASS_NAME_SHOW$3);\n    }\n\n    setElementContent(element, content) {\n      if (element === null) {\n        return;\n      }\n\n      if (isElement$1(content)) {\n        content = getElement(content); // content is a DOM node or a jQuery\n\n        if (this._config.html) {\n          if (content.parentNode !== element) {\n            element.innerHTML = '';\n            element.appendChild(content);\n          }\n        } else {\n          element.textContent = content.textContent;\n        }\n\n        return;\n      }\n\n      if (this._config.html) {\n        if (this._config.sanitize) {\n          content = sanitizeHtml(content, this._config.allowList, this._config.sanitizeFn);\n        }\n\n        element.innerHTML = content;\n      } else {\n        element.textContent = content;\n      }\n    }\n\n    getTitle() {\n      let title = this._element.getAttribute('data-bs-original-title');\n\n      if (!title) {\n        title = typeof this._config.title === 'function' ? this._config.title.call(this._element) : this._config.title;\n      }\n\n      return title;\n    }\n\n    updateAttachment(attachment) {\n      if (attachment === 'right') {\n        return 'end';\n      }\n\n      if (attachment === 'left') {\n        return 'start';\n      }\n\n      return attachment;\n    } // Private\n\n\n    _initializeOnDelegatedTarget(event, context) {\n      const dataKey = this.constructor.DATA_KEY;\n      context = context || Data.get(event.delegateTarget, dataKey);\n\n      if (!context) {\n        context = new this.constructor(event.delegateTarget, this._getDelegateConfig());\n        Data.set(event.delegateTarget, dataKey, context);\n      }\n\n      return context;\n    }\n\n    _getOffset() {\n      const {\n        offset\n      } = this._config;\n\n      if (typeof offset === 'string') {\n        return offset.split(',').map(val => Number.parseInt(val, 10));\n      }\n\n      if (typeof offset === 'function') {\n        return popperData => offset(popperData, this._element);\n      }\n\n      return offset;\n    }\n\n    _getPopperConfig(attachment) {\n      const defaultBsPopperConfig = {\n        placement: attachment,\n        modifiers: [{\n          name: 'flip',\n          options: {\n            fallbackPlacements: this._config.fallbackPlacements\n          }\n        }, {\n          name: 'offset',\n          options: {\n            offset: this._getOffset()\n          }\n        }, {\n          name: 'preventOverflow',\n          options: {\n            boundary: this._config.boundary\n          }\n        }, {\n          name: 'arrow',\n          options: {\n            element: `.${this.constructor.NAME}-arrow`\n          }\n        }, {\n          name: 'onChange',\n          enabled: true,\n          phase: 'afterWrite',\n          fn: data => this._handlePopperPlacementChange(data)\n        }],\n        onFirstUpdate: data => {\n          if (data.options.placement !== data.placement) {\n            this._handlePopperPlacementChange(data);\n          }\n        }\n      };\n      return { ...defaultBsPopperConfig,\n        ...(typeof this._config.popperConfig === 'function' ? this._config.popperConfig(defaultBsPopperConfig) : this._config.popperConfig)\n      };\n    }\n\n    _addAttachmentClass(attachment) {\n      this.getTipElement().classList.add(`${CLASS_PREFIX$1}-${this.updateAttachment(attachment)}`);\n    }\n\n    _getAttachment(placement) {\n      return AttachmentMap[placement.toUpperCase()];\n    }\n\n    _setListeners() {\n      const triggers = this._config.trigger.split(' ');\n\n      triggers.forEach(trigger => {\n        if (trigger === 'click') {\n          EventHandler.on(this._element, this.constructor.Event.CLICK, this._config.selector, event => this.toggle(event));\n        } else if (trigger !== TRIGGER_MANUAL) {\n          const eventIn = trigger === TRIGGER_HOVER ? this.constructor.Event.MOUSEENTER : this.constructor.Event.FOCUSIN;\n          const eventOut = trigger === TRIGGER_HOVER ? this.constructor.Event.MOUSELEAVE : this.constructor.Event.FOCUSOUT;\n          EventHandler.on(this._element, eventIn, this._config.selector, event => this._enter(event));\n          EventHandler.on(this._element, eventOut, this._config.selector, event => this._leave(event));\n        }\n      });\n\n      this._hideModalHandler = () => {\n        if (this._element) {\n          this.hide();\n        }\n      };\n\n      EventHandler.on(this._element.closest(`.${CLASS_NAME_MODAL}`), 'hide.bs.modal', this._hideModalHandler);\n\n      if (this._config.selector) {\n        this._config = { ...this._config,\n          trigger: 'manual',\n          selector: ''\n        };\n      } else {\n        this._fixTitle();\n      }\n    }\n\n    _fixTitle() {\n      const title = this._element.getAttribute('title');\n\n      const originalTitleType = typeof this._element.getAttribute('data-bs-original-title');\n\n      if (title || originalTitleType !== 'string') {\n        this._element.setAttribute('data-bs-original-title', title || '');\n\n        if (title && !this._element.getAttribute('aria-label') && !this._element.textContent) {\n          this._element.setAttribute('aria-label', title);\n        }\n\n        this._element.setAttribute('title', '');\n      }\n    }\n\n    _enter(event, context) {\n      context = this._initializeOnDelegatedTarget(event, context);\n\n      if (event) {\n        context._activeTrigger[event.type === 'focusin' ? TRIGGER_FOCUS : TRIGGER_HOVER] = true;\n      }\n\n      if (context.getTipElement().classList.contains(CLASS_NAME_SHOW$3) || context._hoverState === HOVER_STATE_SHOW) {\n        context._hoverState = HOVER_STATE_SHOW;\n        return;\n      }\n\n      clearTimeout(context._timeout);\n      context._hoverState = HOVER_STATE_SHOW;\n\n      if (!context._config.delay || !context._config.delay.show) {\n        context.show();\n        return;\n      }\n\n      context._timeout = setTimeout(() => {\n        if (context._hoverState === HOVER_STATE_SHOW) {\n          context.show();\n        }\n      }, context._config.delay.show);\n    }\n\n    _leave(event, context) {\n      context = this._initializeOnDelegatedTarget(event, context);\n\n      if (event) {\n        context._activeTrigger[event.type === 'focusout' ? TRIGGER_FOCUS : TRIGGER_HOVER] = context._element.contains(event.relatedTarget);\n      }\n\n      if (context._isWithActiveTrigger()) {\n        return;\n      }\n\n      clearTimeout(context._timeout);\n      context._hoverState = HOVER_STATE_OUT;\n\n      if (!context._config.delay || !context._config.delay.hide) {\n        context.hide();\n        return;\n      }\n\n      context._timeout = setTimeout(() => {\n        if (context._hoverState === HOVER_STATE_OUT) {\n          context.hide();\n        }\n      }, context._config.delay.hide);\n    }\n\n    _isWithActiveTrigger() {\n      for (const trigger in this._activeTrigger) {\n        if (this._activeTrigger[trigger]) {\n          return true;\n        }\n      }\n\n      return false;\n    }\n\n    _getConfig(config) {\n      const dataAttributes = Manipulator.getDataAttributes(this._element);\n      Object.keys(dataAttributes).forEach(dataAttr => {\n        if (DISALLOWED_ATTRIBUTES.has(dataAttr)) {\n          delete dataAttributes[dataAttr];\n        }\n      });\n      config = { ...this.constructor.Default,\n        ...dataAttributes,\n        ...(typeof config === 'object' && config ? config : {})\n      };\n      config.container = config.container === false ? document.body : getElement(config.container);\n\n      if (typeof config.delay === 'number') {\n        config.delay = {\n          show: config.delay,\n          hide: config.delay\n        };\n      }\n\n      if (typeof config.title === 'number') {\n        config.title = config.title.toString();\n      }\n\n      if (typeof config.content === 'number') {\n        config.content = config.content.toString();\n      }\n\n      typeCheckConfig(NAME$4, config, this.constructor.DefaultType);\n\n      if (config.sanitize) {\n        config.template = sanitizeHtml(config.template, config.allowList, config.sanitizeFn);\n      }\n\n      return config;\n    }\n\n    _getDelegateConfig() {\n      const config = {};\n\n      if (this._config) {\n        for (const key in this._config) {\n          if (this.constructor.Default[key] !== this._config[key]) {\n            config[key] = this._config[key];\n          }\n        }\n      }\n\n      return config;\n    }\n\n    _cleanTipClass() {\n      const tip = this.getTipElement();\n      const tabClass = tip.getAttribute('class').match(BSCLS_PREFIX_REGEX$1);\n\n      if (tabClass !== null && tabClass.length > 0) {\n        tabClass.map(token => token.trim()).forEach(tClass => tip.classList.remove(tClass));\n      }\n    }\n\n    _handlePopperPlacementChange(popperData) {\n      const {\n        state\n      } = popperData;\n\n      if (!state) {\n        return;\n      }\n\n      this.tip = state.elements.popper;\n\n      this._cleanTipClass();\n\n      this._addAttachmentClass(this._getAttachment(state.placement));\n    } // Static\n\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = Tooltip.getOrCreateInstance(this, config);\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(`No method named \"${config}\"`);\n          }\n\n          data[config]();\n        }\n      });\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Tooltip to jQuery only if jQuery is present\n   */\n\n\n  defineJQueryPlugin(Tooltip);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): popover.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$3 = 'popover';\n  const DATA_KEY$3 = 'bs.popover';\n  const EVENT_KEY$3 = `.${DATA_KEY$3}`;\n  const CLASS_PREFIX = 'bs-popover';\n  const BSCLS_PREFIX_REGEX = new RegExp(`(^|\\\\s)${CLASS_PREFIX}\\\\S+`, 'g');\n  const Default$2 = { ...Tooltip.Default,\n    placement: 'right',\n    offset: [0, 8],\n    trigger: 'click',\n    content: '',\n    template: '<div class=\"popover\" role=\"tooltip\">' + '<div class=\"popover-arrow\"></div>' + '<h3 class=\"popover-header\"></h3>' + '<div class=\"popover-body\"></div>' + '</div>'\n  };\n  const DefaultType$2 = { ...Tooltip.DefaultType,\n    content: '(string|element|function)'\n  };\n  const Event$1 = {\n    HIDE: `hide${EVENT_KEY$3}`,\n    HIDDEN: `hidden${EVENT_KEY$3}`,\n    SHOW: `show${EVENT_KEY$3}`,\n    SHOWN: `shown${EVENT_KEY$3}`,\n    INSERTED: `inserted${EVENT_KEY$3}`,\n    CLICK: `click${EVENT_KEY$3}`,\n    FOCUSIN: `focusin${EVENT_KEY$3}`,\n    FOCUSOUT: `focusout${EVENT_KEY$3}`,\n    MOUSEENTER: `mouseenter${EVENT_KEY$3}`,\n    MOUSELEAVE: `mouseleave${EVENT_KEY$3}`\n  };\n  const CLASS_NAME_FADE$2 = 'fade';\n  const CLASS_NAME_SHOW$2 = 'show';\n  const SELECTOR_TITLE = '.popover-header';\n  const SELECTOR_CONTENT = '.popover-body';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Popover extends Tooltip {\n    // Getters\n    static get Default() {\n      return Default$2;\n    }\n\n    static get NAME() {\n      return NAME$3;\n    }\n\n    static get Event() {\n      return Event$1;\n    }\n\n    static get DefaultType() {\n      return DefaultType$2;\n    } // Overrides\n\n\n    isWithContent() {\n      return this.getTitle() || this._getContent();\n    }\n\n    getTipElement() {\n      if (this.tip) {\n        return this.tip;\n      }\n\n      this.tip = super.getTipElement();\n\n      if (!this.getTitle()) {\n        SelectorEngine.findOne(SELECTOR_TITLE, this.tip).remove();\n      }\n\n      if (!this._getContent()) {\n        SelectorEngine.findOne(SELECTOR_CONTENT, this.tip).remove();\n      }\n\n      return this.tip;\n    }\n\n    setContent() {\n      const tip = this.getTipElement(); // we use append for html objects to maintain js events\n\n      this.setElementContent(SelectorEngine.findOne(SELECTOR_TITLE, tip), this.getTitle());\n\n      let content = this._getContent();\n\n      if (typeof content === 'function') {\n        content = content.call(this._element);\n      }\n\n      this.setElementContent(SelectorEngine.findOne(SELECTOR_CONTENT, tip), content);\n      tip.classList.remove(CLASS_NAME_FADE$2, CLASS_NAME_SHOW$2);\n    } // Private\n\n\n    _addAttachmentClass(attachment) {\n      this.getTipElement().classList.add(`${CLASS_PREFIX}-${this.updateAttachment(attachment)}`);\n    }\n\n    _getContent() {\n      return this._element.getAttribute('data-bs-content') || this._config.content;\n    }\n\n    _cleanTipClass() {\n      const tip = this.getTipElement();\n      const tabClass = tip.getAttribute('class').match(BSCLS_PREFIX_REGEX);\n\n      if (tabClass !== null && tabClass.length > 0) {\n        tabClass.map(token => token.trim()).forEach(tClass => tip.classList.remove(tClass));\n      }\n    } // Static\n\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = Popover.getOrCreateInstance(this, config);\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(`No method named \"${config}\"`);\n          }\n\n          data[config]();\n        }\n      });\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Popover to jQuery only if jQuery is present\n   */\n\n\n  defineJQueryPlugin(Popover);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): scrollspy.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$2 = 'scrollspy';\n  const DATA_KEY$2 = 'bs.scrollspy';\n  const EVENT_KEY$2 = `.${DATA_KEY$2}`;\n  const DATA_API_KEY$1 = '.data-api';\n  const Default$1 = {\n    offset: 10,\n    method: 'auto',\n    target: ''\n  };\n  const DefaultType$1 = {\n    offset: 'number',\n    method: 'string',\n    target: '(string|element)'\n  };\n  const EVENT_ACTIVATE = `activate${EVENT_KEY$2}`;\n  const EVENT_SCROLL = `scroll${EVENT_KEY$2}`;\n  const EVENT_LOAD_DATA_API = `load${EVENT_KEY$2}${DATA_API_KEY$1}`;\n  const CLASS_NAME_DROPDOWN_ITEM = 'dropdown-item';\n  const CLASS_NAME_ACTIVE$1 = 'active';\n  const SELECTOR_DATA_SPY = '[data-bs-spy=\"scroll\"]';\n  const SELECTOR_NAV_LIST_GROUP$1 = '.nav, .list-group';\n  const SELECTOR_NAV_LINKS = '.nav-link';\n  const SELECTOR_NAV_ITEMS = '.nav-item';\n  const SELECTOR_LIST_ITEMS = '.list-group-item';\n  const SELECTOR_DROPDOWN$1 = '.dropdown';\n  const SELECTOR_DROPDOWN_TOGGLE$1 = '.dropdown-toggle';\n  const METHOD_OFFSET = 'offset';\n  const METHOD_POSITION = 'position';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class ScrollSpy extends BaseComponent {\n    constructor(element, config) {\n      super(element);\n      this._scrollElement = this._element.tagName === 'BODY' ? window : this._element;\n      this._config = this._getConfig(config);\n      this._selector = `${this._config.target} ${SELECTOR_NAV_LINKS}, ${this._config.target} ${SELECTOR_LIST_ITEMS}, ${this._config.target} .${CLASS_NAME_DROPDOWN_ITEM}`;\n      this._offsets = [];\n      this._targets = [];\n      this._activeTarget = null;\n      this._scrollHeight = 0;\n      EventHandler.on(this._scrollElement, EVENT_SCROLL, () => this._process());\n      this.refresh();\n\n      this._process();\n    } // Getters\n\n\n    static get Default() {\n      return Default$1;\n    }\n\n    static get NAME() {\n      return NAME$2;\n    } // Public\n\n\n    refresh() {\n      const autoMethod = this._scrollElement === this._scrollElement.window ? METHOD_OFFSET : METHOD_POSITION;\n      const offsetMethod = this._config.method === 'auto' ? autoMethod : this._config.method;\n      const offsetBase = offsetMethod === METHOD_POSITION ? this._getScrollTop() : 0;\n      this._offsets = [];\n      this._targets = [];\n      this._scrollHeight = this._getScrollHeight();\n      const targets = SelectorEngine.find(this._selector);\n      targets.map(element => {\n        const targetSelector = getSelectorFromElement(element);\n        const target = targetSelector ? SelectorEngine.findOne(targetSelector) : null;\n\n        if (target) {\n          const targetBCR = target.getBoundingClientRect();\n\n          if (targetBCR.width || targetBCR.height) {\n            return [Manipulator[offsetMethod](target).top + offsetBase, targetSelector];\n          }\n        }\n\n        return null;\n      }).filter(item => item).sort((a, b) => a[0] - b[0]).forEach(item => {\n        this._offsets.push(item[0]);\n\n        this._targets.push(item[1]);\n      });\n    }\n\n    dispose() {\n      EventHandler.off(this._scrollElement, EVENT_KEY$2);\n      super.dispose();\n    } // Private\n\n\n    _getConfig(config) {\n      config = { ...Default$1,\n        ...Manipulator.getDataAttributes(this._element),\n        ...(typeof config === 'object' && config ? config : {})\n      };\n\n      if (typeof config.target !== 'string' && isElement$1(config.target)) {\n        let {\n          id\n        } = config.target;\n\n        if (!id) {\n          id = getUID(NAME$2);\n          config.target.id = id;\n        }\n\n        config.target = `#${id}`;\n      }\n\n      typeCheckConfig(NAME$2, config, DefaultType$1);\n      return config;\n    }\n\n    _getScrollTop() {\n      return this._scrollElement === window ? this._scrollElement.pageYOffset : this._scrollElement.scrollTop;\n    }\n\n    _getScrollHeight() {\n      return this._scrollElement.scrollHeight || Math.max(document.body.scrollHeight, document.documentElement.scrollHeight);\n    }\n\n    _getOffsetHeight() {\n      return this._scrollElement === window ? window.innerHeight : this._scrollElement.getBoundingClientRect().height;\n    }\n\n    _process() {\n      const scrollTop = this._getScrollTop() + this._config.offset;\n\n      const scrollHeight = this._getScrollHeight();\n\n      const maxScroll = this._config.offset + scrollHeight - this._getOffsetHeight();\n\n      if (this._scrollHeight !== scrollHeight) {\n        this.refresh();\n      }\n\n      if (scrollTop >= maxScroll) {\n        const target = this._targets[this._targets.length - 1];\n\n        if (this._activeTarget !== target) {\n          this._activate(target);\n        }\n\n        return;\n      }\n\n      if (this._activeTarget && scrollTop < this._offsets[0] && this._offsets[0] > 0) {\n        this._activeTarget = null;\n\n        this._clear();\n\n        return;\n      }\n\n      for (let i = this._offsets.length; i--;) {\n        const isActiveTarget = this._activeTarget !== this._targets[i] && scrollTop >= this._offsets[i] && (typeof this._offsets[i + 1] === 'undefined' || scrollTop < this._offsets[i + 1]);\n\n        if (isActiveTarget) {\n          this._activate(this._targets[i]);\n        }\n      }\n    }\n\n    _activate(target) {\n      this._activeTarget = target;\n\n      this._clear();\n\n      const queries = this._selector.split(',').map(selector => `${selector}[data-bs-target=\"${target}\"],${selector}[href=\"${target}\"]`);\n\n      const link = SelectorEngine.findOne(queries.join(','));\n\n      if (link.classList.contains(CLASS_NAME_DROPDOWN_ITEM)) {\n        SelectorEngine.findOne(SELECTOR_DROPDOWN_TOGGLE$1, link.closest(SELECTOR_DROPDOWN$1)).classList.add(CLASS_NAME_ACTIVE$1);\n        link.classList.add(CLASS_NAME_ACTIVE$1);\n      } else {\n        // Set triggered link as active\n        link.classList.add(CLASS_NAME_ACTIVE$1);\n        SelectorEngine.parents(link, SELECTOR_NAV_LIST_GROUP$1).forEach(listGroup => {\n          // Set triggered links parents as active\n          // With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor\n          SelectorEngine.prev(listGroup, `${SELECTOR_NAV_LINKS}, ${SELECTOR_LIST_ITEMS}`).forEach(item => item.classList.add(CLASS_NAME_ACTIVE$1)); // Handle special case when .nav-link is inside .nav-item\n\n          SelectorEngine.prev(listGroup, SELECTOR_NAV_ITEMS).forEach(navItem => {\n            SelectorEngine.children(navItem, SELECTOR_NAV_LINKS).forEach(item => item.classList.add(CLASS_NAME_ACTIVE$1));\n          });\n        });\n      }\n\n      EventHandler.trigger(this._scrollElement, EVENT_ACTIVATE, {\n        relatedTarget: target\n      });\n    }\n\n    _clear() {\n      SelectorEngine.find(this._selector).filter(node => node.classList.contains(CLASS_NAME_ACTIVE$1)).forEach(node => node.classList.remove(CLASS_NAME_ACTIVE$1));\n    } // Static\n\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = ScrollSpy.getOrCreateInstance(this, config);\n\n        if (typeof config !== 'string') {\n          return;\n        }\n\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config]();\n      });\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n    SelectorEngine.find(SELECTOR_DATA_SPY).forEach(spy => new ScrollSpy(spy));\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .ScrollSpy to jQuery only if jQuery is present\n   */\n\n  defineJQueryPlugin(ScrollSpy);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): tab.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$1 = 'tab';\n  const DATA_KEY$1 = 'bs.tab';\n  const EVENT_KEY$1 = `.${DATA_KEY$1}`;\n  const DATA_API_KEY = '.data-api';\n  const EVENT_HIDE$1 = `hide${EVENT_KEY$1}`;\n  const EVENT_HIDDEN$1 = `hidden${EVENT_KEY$1}`;\n  const EVENT_SHOW$1 = `show${EVENT_KEY$1}`;\n  const EVENT_SHOWN$1 = `shown${EVENT_KEY$1}`;\n  const EVENT_CLICK_DATA_API = `click${EVENT_KEY$1}${DATA_API_KEY}`;\n  const CLASS_NAME_DROPDOWN_MENU = 'dropdown-menu';\n  const CLASS_NAME_ACTIVE = 'active';\n  const CLASS_NAME_FADE$1 = 'fade';\n  const CLASS_NAME_SHOW$1 = 'show';\n  const SELECTOR_DROPDOWN = '.dropdown';\n  const SELECTOR_NAV_LIST_GROUP = '.nav, .list-group';\n  const SELECTOR_ACTIVE = '.active';\n  const SELECTOR_ACTIVE_UL = ':scope > li > .active';\n  const SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"tab\"], [data-bs-toggle=\"pill\"], [data-bs-toggle=\"list\"]';\n  const SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle';\n  const SELECTOR_DROPDOWN_ACTIVE_CHILD = ':scope > .dropdown-menu .active';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Tab extends BaseComponent {\n    // Getters\n    static get NAME() {\n      return NAME$1;\n    } // Public\n\n\n    show() {\n      if (this._element.parentNode && this._element.parentNode.nodeType === Node.ELEMENT_NODE && this._element.classList.contains(CLASS_NAME_ACTIVE)) {\n        return;\n      }\n\n      let previous;\n      const target = getElementFromSelector(this._element);\n\n      const listElement = this._element.closest(SELECTOR_NAV_LIST_GROUP);\n\n      if (listElement) {\n        const itemSelector = listElement.nodeName === 'UL' || listElement.nodeName === 'OL' ? SELECTOR_ACTIVE_UL : SELECTOR_ACTIVE;\n        previous = SelectorEngine.find(itemSelector, listElement);\n        previous = previous[previous.length - 1];\n      }\n\n      const hideEvent = previous ? EventHandler.trigger(previous, EVENT_HIDE$1, {\n        relatedTarget: this._element\n      }) : null;\n      const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$1, {\n        relatedTarget: previous\n      });\n\n      if (showEvent.defaultPrevented || hideEvent !== null && hideEvent.defaultPrevented) {\n        return;\n      }\n\n      this._activate(this._element, listElement);\n\n      const complete = () => {\n        EventHandler.trigger(previous, EVENT_HIDDEN$1, {\n          relatedTarget: this._element\n        });\n        EventHandler.trigger(this._element, EVENT_SHOWN$1, {\n          relatedTarget: previous\n        });\n      };\n\n      if (target) {\n        this._activate(target, target.parentNode, complete);\n      } else {\n        complete();\n      }\n    } // Private\n\n\n    _activate(element, container, callback) {\n      const activeElements = container && (container.nodeName === 'UL' || container.nodeName === 'OL') ? SelectorEngine.find(SELECTOR_ACTIVE_UL, container) : SelectorEngine.children(container, SELECTOR_ACTIVE);\n      const active = activeElements[0];\n      const isTransitioning = callback && active && active.classList.contains(CLASS_NAME_FADE$1);\n\n      const complete = () => this._transitionComplete(element, active, callback);\n\n      if (active && isTransitioning) {\n        active.classList.remove(CLASS_NAME_SHOW$1);\n\n        this._queueCallback(complete, element, true);\n      } else {\n        complete();\n      }\n    }\n\n    _transitionComplete(element, active, callback) {\n      if (active) {\n        active.classList.remove(CLASS_NAME_ACTIVE);\n        const dropdownChild = SelectorEngine.findOne(SELECTOR_DROPDOWN_ACTIVE_CHILD, active.parentNode);\n\n        if (dropdownChild) {\n          dropdownChild.classList.remove(CLASS_NAME_ACTIVE);\n        }\n\n        if (active.getAttribute('role') === 'tab') {\n          active.setAttribute('aria-selected', false);\n        }\n      }\n\n      element.classList.add(CLASS_NAME_ACTIVE);\n\n      if (element.getAttribute('role') === 'tab') {\n        element.setAttribute('aria-selected', true);\n      }\n\n      reflow(element);\n\n      if (element.classList.contains(CLASS_NAME_FADE$1)) {\n        element.classList.add(CLASS_NAME_SHOW$1);\n      }\n\n      let parent = element.parentNode;\n\n      if (parent && parent.nodeName === 'LI') {\n        parent = parent.parentNode;\n      }\n\n      if (parent && parent.classList.contains(CLASS_NAME_DROPDOWN_MENU)) {\n        const dropdownElement = element.closest(SELECTOR_DROPDOWN);\n\n        if (dropdownElement) {\n          SelectorEngine.find(SELECTOR_DROPDOWN_TOGGLE, dropdownElement).forEach(dropdown => dropdown.classList.add(CLASS_NAME_ACTIVE));\n        }\n\n        element.setAttribute('aria-expanded', true);\n      }\n\n      if (callback) {\n        callback();\n      }\n    } // Static\n\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = Tab.getOrCreateInstance(this);\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(`No method named \"${config}\"`);\n          }\n\n          data[config]();\n        }\n      });\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n    if (['A', 'AREA'].includes(this.tagName)) {\n      event.preventDefault();\n    }\n\n    if (isDisabled(this)) {\n      return;\n    }\n\n    const data = Tab.getOrCreateInstance(this);\n    data.show();\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Tab to jQuery only if jQuery is present\n   */\n\n  defineJQueryPlugin(Tab);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): toast.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME = 'toast';\n  const DATA_KEY = 'bs.toast';\n  const EVENT_KEY = `.${DATA_KEY}`;\n  const EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY}`;\n  const EVENT_MOUSEOVER = `mouseover${EVENT_KEY}`;\n  const EVENT_MOUSEOUT = `mouseout${EVENT_KEY}`;\n  const EVENT_FOCUSIN = `focusin${EVENT_KEY}`;\n  const EVENT_FOCUSOUT = `focusout${EVENT_KEY}`;\n  const EVENT_HIDE = `hide${EVENT_KEY}`;\n  const EVENT_HIDDEN = `hidden${EVENT_KEY}`;\n  const EVENT_SHOW = `show${EVENT_KEY}`;\n  const EVENT_SHOWN = `shown${EVENT_KEY}`;\n  const CLASS_NAME_FADE = 'fade';\n  const CLASS_NAME_HIDE = 'hide';\n  const CLASS_NAME_SHOW = 'show';\n  const CLASS_NAME_SHOWING = 'showing';\n  const DefaultType = {\n    animation: 'boolean',\n    autohide: 'boolean',\n    delay: 'number'\n  };\n  const Default = {\n    animation: true,\n    autohide: true,\n    delay: 5000\n  };\n  const SELECTOR_DATA_DISMISS = '[data-bs-dismiss=\"toast\"]';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Toast extends BaseComponent {\n    constructor(element, config) {\n      super(element);\n      this._config = this._getConfig(config);\n      this._timeout = null;\n      this._hasMouseInteraction = false;\n      this._hasKeyboardInteraction = false;\n\n      this._setListeners();\n    } // Getters\n\n\n    static get DefaultType() {\n      return DefaultType;\n    }\n\n    static get Default() {\n      return Default;\n    }\n\n    static get NAME() {\n      return NAME;\n    } // Public\n\n\n    show() {\n      const showEvent = EventHandler.trigger(this._element, EVENT_SHOW);\n\n      if (showEvent.defaultPrevented) {\n        return;\n      }\n\n      this._clearTimeout();\n\n      if (this._config.animation) {\n        this._element.classList.add(CLASS_NAME_FADE);\n      }\n\n      const complete = () => {\n        this._element.classList.remove(CLASS_NAME_SHOWING);\n\n        this._element.classList.add(CLASS_NAME_SHOW);\n\n        EventHandler.trigger(this._element, EVENT_SHOWN);\n\n        this._maybeScheduleHide();\n      };\n\n      this._element.classList.remove(CLASS_NAME_HIDE);\n\n      reflow(this._element);\n\n      this._element.classList.add(CLASS_NAME_SHOWING);\n\n      this._queueCallback(complete, this._element, this._config.animation);\n    }\n\n    hide() {\n      if (!this._element.classList.contains(CLASS_NAME_SHOW)) {\n        return;\n      }\n\n      const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE);\n\n      if (hideEvent.defaultPrevented) {\n        return;\n      }\n\n      const complete = () => {\n        this._element.classList.add(CLASS_NAME_HIDE);\n\n        EventHandler.trigger(this._element, EVENT_HIDDEN);\n      };\n\n      this._element.classList.remove(CLASS_NAME_SHOW);\n\n      this._queueCallback(complete, this._element, this._config.animation);\n    }\n\n    dispose() {\n      this._clearTimeout();\n\n      if (this._element.classList.contains(CLASS_NAME_SHOW)) {\n        this._element.classList.remove(CLASS_NAME_SHOW);\n      }\n\n      super.dispose();\n    } // Private\n\n\n    _getConfig(config) {\n      config = { ...Default,\n        ...Manipulator.getDataAttributes(this._element),\n        ...(typeof config === 'object' && config ? config : {})\n      };\n      typeCheckConfig(NAME, config, this.constructor.DefaultType);\n      return config;\n    }\n\n    _maybeScheduleHide() {\n      if (!this._config.autohide) {\n        return;\n      }\n\n      if (this._hasMouseInteraction || this._hasKeyboardInteraction) {\n        return;\n      }\n\n      this._timeout = setTimeout(() => {\n        this.hide();\n      }, this._config.delay);\n    }\n\n    _onInteraction(event, isInteracting) {\n      switch (event.type) {\n        case 'mouseover':\n        case 'mouseout':\n          this._hasMouseInteraction = isInteracting;\n          break;\n\n        case 'focusin':\n        case 'focusout':\n          this._hasKeyboardInteraction = isInteracting;\n          break;\n      }\n\n      if (isInteracting) {\n        this._clearTimeout();\n\n        return;\n      }\n\n      const nextElement = event.relatedTarget;\n\n      if (this._element === nextElement || this._element.contains(nextElement)) {\n        return;\n      }\n\n      this._maybeScheduleHide();\n    }\n\n    _setListeners() {\n      EventHandler.on(this._element, EVENT_CLICK_DISMISS, SELECTOR_DATA_DISMISS, () => this.hide());\n      EventHandler.on(this._element, EVENT_MOUSEOVER, event => this._onInteraction(event, true));\n      EventHandler.on(this._element, EVENT_MOUSEOUT, event => this._onInteraction(event, false));\n      EventHandler.on(this._element, EVENT_FOCUSIN, event => this._onInteraction(event, true));\n      EventHandler.on(this._element, EVENT_FOCUSOUT, event => this._onInteraction(event, false));\n    }\n\n    _clearTimeout() {\n      clearTimeout(this._timeout);\n      this._timeout = null;\n    } // Static\n\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = Toast.getOrCreateInstance(this, config);\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(`No method named \"${config}\"`);\n          }\n\n          data[config](this);\n        }\n      });\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Toast to jQuery only if jQuery is present\n   */\n\n\n  defineJQueryPlugin(Toast);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): index.umd.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  var index_umd = {\n    Alert,\n    Button,\n    Carousel,\n    Collapse,\n    Dropdown,\n    Modal,\n    Offcanvas,\n    Popover,\n    ScrollSpy,\n    Tab,\n    Toast,\n    Tooltip\n  };\n\n  return index_umd;\n\n})));\n//# sourceMappingURL=bootstrap.bundle.js.map\n"
  },
  {
    "path": "src/sourceDev.WebApp/sitefiles/s1/themes/custom1/wwwroot/js/bootstrap.esm.js",
    "content": "/*!\n  * Bootstrap v5.0.2 (https://getbootstrap.com/)\n  * Copyright 2011-2021 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)\n  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n  */\nimport * as Popper from '@popperjs/core';\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): dom/selector-engine.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\nconst NODE_TEXT = 3;\nconst SelectorEngine = {\n  find(selector, element = document.documentElement) {\n    return [].concat(...Element.prototype.querySelectorAll.call(element, selector));\n  },\n\n  findOne(selector, element = document.documentElement) {\n    return Element.prototype.querySelector.call(element, selector);\n  },\n\n  children(element, selector) {\n    return [].concat(...element.children).filter(child => child.matches(selector));\n  },\n\n  parents(element, selector) {\n    const parents = [];\n    let ancestor = element.parentNode;\n\n    while (ancestor && ancestor.nodeType === Node.ELEMENT_NODE && ancestor.nodeType !== NODE_TEXT) {\n      if (ancestor.matches(selector)) {\n        parents.push(ancestor);\n      }\n\n      ancestor = ancestor.parentNode;\n    }\n\n    return parents;\n  },\n\n  prev(element, selector) {\n    let previous = element.previousElementSibling;\n\n    while (previous) {\n      if (previous.matches(selector)) {\n        return [previous];\n      }\n\n      previous = previous.previousElementSibling;\n    }\n\n    return [];\n  },\n\n  next(element, selector) {\n    let next = element.nextElementSibling;\n\n    while (next) {\n      if (next.matches(selector)) {\n        return [next];\n      }\n\n      next = next.nextElementSibling;\n    }\n\n    return [];\n  }\n\n};\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): util/index.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst MAX_UID = 1000000;\nconst MILLISECONDS_MULTIPLIER = 1000;\nconst TRANSITION_END = 'transitionend'; // Shoutout AngusCroll (https://goo.gl/pxwQGp)\n\nconst toType = obj => {\n  if (obj === null || obj === undefined) {\n    return `${obj}`;\n  }\n\n  return {}.toString.call(obj).match(/\\s([a-z]+)/i)[1].toLowerCase();\n};\n/**\n * --------------------------------------------------------------------------\n * Public Util Api\n * --------------------------------------------------------------------------\n */\n\n\nconst getUID = prefix => {\n  do {\n    prefix += Math.floor(Math.random() * MAX_UID);\n  } while (document.getElementById(prefix));\n\n  return prefix;\n};\n\nconst getSelector = element => {\n  let selector = element.getAttribute('data-bs-target');\n\n  if (!selector || selector === '#') {\n    let hrefAttr = element.getAttribute('href'); // The only valid content that could double as a selector are IDs or classes,\n    // so everything starting with `#` or `.`. If a \"real\" URL is used as the selector,\n    // `document.querySelector` will rightfully complain it is invalid.\n    // See https://github.com/twbs/bootstrap/issues/32273\n\n    if (!hrefAttr || !hrefAttr.includes('#') && !hrefAttr.startsWith('.')) {\n      return null;\n    } // Just in case some CMS puts out a full URL with the anchor appended\n\n\n    if (hrefAttr.includes('#') && !hrefAttr.startsWith('#')) {\n      hrefAttr = `#${hrefAttr.split('#')[1]}`;\n    }\n\n    selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : null;\n  }\n\n  return selector;\n};\n\nconst getSelectorFromElement = element => {\n  const selector = getSelector(element);\n\n  if (selector) {\n    return document.querySelector(selector) ? selector : null;\n  }\n\n  return null;\n};\n\nconst getElementFromSelector = element => {\n  const selector = getSelector(element);\n  return selector ? document.querySelector(selector) : null;\n};\n\nconst getTransitionDurationFromElement = element => {\n  if (!element) {\n    return 0;\n  } // Get transition-duration of the element\n\n\n  let {\n    transitionDuration,\n    transitionDelay\n  } = window.getComputedStyle(element);\n  const floatTransitionDuration = Number.parseFloat(transitionDuration);\n  const floatTransitionDelay = Number.parseFloat(transitionDelay); // Return 0 if element or transition duration is not found\n\n  if (!floatTransitionDuration && !floatTransitionDelay) {\n    return 0;\n  } // If multiple durations are defined, take the first\n\n\n  transitionDuration = transitionDuration.split(',')[0];\n  transitionDelay = transitionDelay.split(',')[0];\n  return (Number.parseFloat(transitionDuration) + Number.parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER;\n};\n\nconst triggerTransitionEnd = element => {\n  element.dispatchEvent(new Event(TRANSITION_END));\n};\n\nconst isElement = obj => {\n  if (!obj || typeof obj !== 'object') {\n    return false;\n  }\n\n  if (typeof obj.jquery !== 'undefined') {\n    obj = obj[0];\n  }\n\n  return typeof obj.nodeType !== 'undefined';\n};\n\nconst getElement = obj => {\n  if (isElement(obj)) {\n    // it's a jQuery object or a node element\n    return obj.jquery ? obj[0] : obj;\n  }\n\n  if (typeof obj === 'string' && obj.length > 0) {\n    return SelectorEngine.findOne(obj);\n  }\n\n  return null;\n};\n\nconst typeCheckConfig = (componentName, config, configTypes) => {\n  Object.keys(configTypes).forEach(property => {\n    const expectedTypes = configTypes[property];\n    const value = config[property];\n    const valueType = value && isElement(value) ? 'element' : toType(value);\n\n    if (!new RegExp(expectedTypes).test(valueType)) {\n      throw new TypeError(`${componentName.toUpperCase()}: Option \"${property}\" provided type \"${valueType}\" but expected type \"${expectedTypes}\".`);\n    }\n  });\n};\n\nconst isVisible = element => {\n  if (!isElement(element) || element.getClientRects().length === 0) {\n    return false;\n  }\n\n  return getComputedStyle(element).getPropertyValue('visibility') === 'visible';\n};\n\nconst isDisabled = element => {\n  if (!element || element.nodeType !== Node.ELEMENT_NODE) {\n    return true;\n  }\n\n  if (element.classList.contains('disabled')) {\n    return true;\n  }\n\n  if (typeof element.disabled !== 'undefined') {\n    return element.disabled;\n  }\n\n  return element.hasAttribute('disabled') && element.getAttribute('disabled') !== 'false';\n};\n\nconst findShadowRoot = element => {\n  if (!document.documentElement.attachShadow) {\n    return null;\n  } // Can find the shadow root otherwise it'll return the document\n\n\n  if (typeof element.getRootNode === 'function') {\n    const root = element.getRootNode();\n    return root instanceof ShadowRoot ? root : null;\n  }\n\n  if (element instanceof ShadowRoot) {\n    return element;\n  } // when we don't find a shadow root\n\n\n  if (!element.parentNode) {\n    return null;\n  }\n\n  return findShadowRoot(element.parentNode);\n};\n\nconst noop = () => {};\n\nconst reflow = element => element.offsetHeight;\n\nconst getjQuery = () => {\n  const {\n    jQuery\n  } = window;\n\n  if (jQuery && !document.body.hasAttribute('data-bs-no-jquery')) {\n    return jQuery;\n  }\n\n  return null;\n};\n\nconst DOMContentLoadedCallbacks = [];\n\nconst onDOMContentLoaded = callback => {\n  if (document.readyState === 'loading') {\n    // add listener on the first call when the document is in loading state\n    if (!DOMContentLoadedCallbacks.length) {\n      document.addEventListener('DOMContentLoaded', () => {\n        DOMContentLoadedCallbacks.forEach(callback => callback());\n      });\n    }\n\n    DOMContentLoadedCallbacks.push(callback);\n  } else {\n    callback();\n  }\n};\n\nconst isRTL = () => document.documentElement.dir === 'rtl';\n\nconst defineJQueryPlugin = plugin => {\n  onDOMContentLoaded(() => {\n    const $ = getjQuery();\n    /* istanbul ignore if */\n\n    if ($) {\n      const name = plugin.NAME;\n      const JQUERY_NO_CONFLICT = $.fn[name];\n      $.fn[name] = plugin.jQueryInterface;\n      $.fn[name].Constructor = plugin;\n\n      $.fn[name].noConflict = () => {\n        $.fn[name] = JQUERY_NO_CONFLICT;\n        return plugin.jQueryInterface;\n      };\n    }\n  });\n};\n\nconst execute = callback => {\n  if (typeof callback === 'function') {\n    callback();\n  }\n};\n\nconst executeAfterTransition = (callback, transitionElement, waitForTransition = true) => {\n  if (!waitForTransition) {\n    execute(callback);\n    return;\n  }\n\n  const durationPadding = 5;\n  const emulatedDuration = getTransitionDurationFromElement(transitionElement) + durationPadding;\n  let called = false;\n\n  const handler = ({\n    target\n  }) => {\n    if (target !== transitionElement) {\n      return;\n    }\n\n    called = true;\n    transitionElement.removeEventListener(TRANSITION_END, handler);\n    execute(callback);\n  };\n\n  transitionElement.addEventListener(TRANSITION_END, handler);\n  setTimeout(() => {\n    if (!called) {\n      triggerTransitionEnd(transitionElement);\n    }\n  }, emulatedDuration);\n};\n/**\n * Return the previous/next element of a list.\n *\n * @param {array} list    The list of elements\n * @param activeElement   The active element\n * @param shouldGetNext   Choose to get next or previous element\n * @param isCycleAllowed\n * @return {Element|elem} The proper element\n */\n\n\nconst getNextActiveElement = (list, activeElement, shouldGetNext, isCycleAllowed) => {\n  let index = list.indexOf(activeElement); // if the element does not exist in the list return an element depending on the direction and if cycle is allowed\n\n  if (index === -1) {\n    return list[!shouldGetNext && isCycleAllowed ? list.length - 1 : 0];\n  }\n\n  const listLength = list.length;\n  index += shouldGetNext ? 1 : -1;\n\n  if (isCycleAllowed) {\n    index = (index + listLength) % listLength;\n  }\n\n  return list[Math.max(0, Math.min(index, listLength - 1))];\n};\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): dom/event-handler.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst namespaceRegex = /[^.]*(?=\\..*)\\.|.*/;\nconst stripNameRegex = /\\..*/;\nconst stripUidRegex = /::\\d+$/;\nconst eventRegistry = {}; // Events storage\n\nlet uidEvent = 1;\nconst customEvents = {\n  mouseenter: 'mouseover',\n  mouseleave: 'mouseout'\n};\nconst customEventsRegex = /^(mouseenter|mouseleave)/i;\nconst nativeEvents = new Set(['click', 'dblclick', 'mouseup', 'mousedown', 'contextmenu', 'mousewheel', 'DOMMouseScroll', 'mouseover', 'mouseout', 'mousemove', 'selectstart', 'selectend', 'keydown', 'keypress', 'keyup', 'orientationchange', 'touchstart', 'touchmove', 'touchend', 'touchcancel', 'pointerdown', 'pointermove', 'pointerup', 'pointerleave', 'pointercancel', 'gesturestart', 'gesturechange', 'gestureend', 'focus', 'blur', 'change', 'reset', 'select', 'submit', 'focusin', 'focusout', 'load', 'unload', 'beforeunload', 'resize', 'move', 'DOMContentLoaded', 'readystatechange', 'error', 'abort', 'scroll']);\n/**\n * ------------------------------------------------------------------------\n * Private methods\n * ------------------------------------------------------------------------\n */\n\nfunction getUidEvent(element, uid) {\n  return uid && `${uid}::${uidEvent++}` || element.uidEvent || uidEvent++;\n}\n\nfunction getEvent(element) {\n  const uid = getUidEvent(element);\n  element.uidEvent = uid;\n  eventRegistry[uid] = eventRegistry[uid] || {};\n  return eventRegistry[uid];\n}\n\nfunction bootstrapHandler(element, fn) {\n  return function handler(event) {\n    event.delegateTarget = element;\n\n    if (handler.oneOff) {\n      EventHandler.off(element, event.type, fn);\n    }\n\n    return fn.apply(element, [event]);\n  };\n}\n\nfunction bootstrapDelegationHandler(element, selector, fn) {\n  return function handler(event) {\n    const domElements = element.querySelectorAll(selector);\n\n    for (let {\n      target\n    } = event; target && target !== this; target = target.parentNode) {\n      for (let i = domElements.length; i--;) {\n        if (domElements[i] === target) {\n          event.delegateTarget = target;\n\n          if (handler.oneOff) {\n            // eslint-disable-next-line unicorn/consistent-destructuring\n            EventHandler.off(element, event.type, selector, fn);\n          }\n\n          return fn.apply(target, [event]);\n        }\n      }\n    } // To please ESLint\n\n\n    return null;\n  };\n}\n\nfunction findHandler(events, handler, delegationSelector = null) {\n  const uidEventList = Object.keys(events);\n\n  for (let i = 0, len = uidEventList.length; i < len; i++) {\n    const event = events[uidEventList[i]];\n\n    if (event.originalHandler === handler && event.delegationSelector === delegationSelector) {\n      return event;\n    }\n  }\n\n  return null;\n}\n\nfunction normalizeParams(originalTypeEvent, handler, delegationFn) {\n  const delegation = typeof handler === 'string';\n  const originalHandler = delegation ? delegationFn : handler;\n  let typeEvent = getTypeEvent(originalTypeEvent);\n  const isNative = nativeEvents.has(typeEvent);\n\n  if (!isNative) {\n    typeEvent = originalTypeEvent;\n  }\n\n  return [delegation, originalHandler, typeEvent];\n}\n\nfunction addHandler(element, originalTypeEvent, handler, delegationFn, oneOff) {\n  if (typeof originalTypeEvent !== 'string' || !element) {\n    return;\n  }\n\n  if (!handler) {\n    handler = delegationFn;\n    delegationFn = null;\n  } // in case of mouseenter or mouseleave wrap the handler within a function that checks for its DOM position\n  // this prevents the handler from being dispatched the same way as mouseover or mouseout does\n\n\n  if (customEventsRegex.test(originalTypeEvent)) {\n    const wrapFn = fn => {\n      return function (event) {\n        if (!event.relatedTarget || event.relatedTarget !== event.delegateTarget && !event.delegateTarget.contains(event.relatedTarget)) {\n          return fn.call(this, event);\n        }\n      };\n    };\n\n    if (delegationFn) {\n      delegationFn = wrapFn(delegationFn);\n    } else {\n      handler = wrapFn(handler);\n    }\n  }\n\n  const [delegation, originalHandler, typeEvent] = normalizeParams(originalTypeEvent, handler, delegationFn);\n  const events = getEvent(element);\n  const handlers = events[typeEvent] || (events[typeEvent] = {});\n  const previousFn = findHandler(handlers, originalHandler, delegation ? handler : null);\n\n  if (previousFn) {\n    previousFn.oneOff = previousFn.oneOff && oneOff;\n    return;\n  }\n\n  const uid = getUidEvent(originalHandler, originalTypeEvent.replace(namespaceRegex, ''));\n  const fn = delegation ? bootstrapDelegationHandler(element, handler, delegationFn) : bootstrapHandler(element, handler);\n  fn.delegationSelector = delegation ? handler : null;\n  fn.originalHandler = originalHandler;\n  fn.oneOff = oneOff;\n  fn.uidEvent = uid;\n  handlers[uid] = fn;\n  element.addEventListener(typeEvent, fn, delegation);\n}\n\nfunction removeHandler(element, events, typeEvent, handler, delegationSelector) {\n  const fn = findHandler(events[typeEvent], handler, delegationSelector);\n\n  if (!fn) {\n    return;\n  }\n\n  element.removeEventListener(typeEvent, fn, Boolean(delegationSelector));\n  delete events[typeEvent][fn.uidEvent];\n}\n\nfunction removeNamespacedHandlers(element, events, typeEvent, namespace) {\n  const storeElementEvent = events[typeEvent] || {};\n  Object.keys(storeElementEvent).forEach(handlerKey => {\n    if (handlerKey.includes(namespace)) {\n      const event = storeElementEvent[handlerKey];\n      removeHandler(element, events, typeEvent, event.originalHandler, event.delegationSelector);\n    }\n  });\n}\n\nfunction getTypeEvent(event) {\n  // allow to get the native events from namespaced events ('click.bs.button' --> 'click')\n  event = event.replace(stripNameRegex, '');\n  return customEvents[event] || event;\n}\n\nconst EventHandler = {\n  on(element, event, handler, delegationFn) {\n    addHandler(element, event, handler, delegationFn, false);\n  },\n\n  one(element, event, handler, delegationFn) {\n    addHandler(element, event, handler, delegationFn, true);\n  },\n\n  off(element, originalTypeEvent, handler, delegationFn) {\n    if (typeof originalTypeEvent !== 'string' || !element) {\n      return;\n    }\n\n    const [delegation, originalHandler, typeEvent] = normalizeParams(originalTypeEvent, handler, delegationFn);\n    const inNamespace = typeEvent !== originalTypeEvent;\n    const events = getEvent(element);\n    const isNamespace = originalTypeEvent.startsWith('.');\n\n    if (typeof originalHandler !== 'undefined') {\n      // Simplest case: handler is passed, remove that listener ONLY.\n      if (!events || !events[typeEvent]) {\n        return;\n      }\n\n      removeHandler(element, events, typeEvent, originalHandler, delegation ? handler : null);\n      return;\n    }\n\n    if (isNamespace) {\n      Object.keys(events).forEach(elementEvent => {\n        removeNamespacedHandlers(element, events, elementEvent, originalTypeEvent.slice(1));\n      });\n    }\n\n    const storeElementEvent = events[typeEvent] || {};\n    Object.keys(storeElementEvent).forEach(keyHandlers => {\n      const handlerKey = keyHandlers.replace(stripUidRegex, '');\n\n      if (!inNamespace || originalTypeEvent.includes(handlerKey)) {\n        const event = storeElementEvent[keyHandlers];\n        removeHandler(element, events, typeEvent, event.originalHandler, event.delegationSelector);\n      }\n    });\n  },\n\n  trigger(element, event, args) {\n    if (typeof event !== 'string' || !element) {\n      return null;\n    }\n\n    const $ = getjQuery();\n    const typeEvent = getTypeEvent(event);\n    const inNamespace = event !== typeEvent;\n    const isNative = nativeEvents.has(typeEvent);\n    let jQueryEvent;\n    let bubbles = true;\n    let nativeDispatch = true;\n    let defaultPrevented = false;\n    let evt = null;\n\n    if (inNamespace && $) {\n      jQueryEvent = $.Event(event, args);\n      $(element).trigger(jQueryEvent);\n      bubbles = !jQueryEvent.isPropagationStopped();\n      nativeDispatch = !jQueryEvent.isImmediatePropagationStopped();\n      defaultPrevented = jQueryEvent.isDefaultPrevented();\n    }\n\n    if (isNative) {\n      evt = document.createEvent('HTMLEvents');\n      evt.initEvent(typeEvent, bubbles, true);\n    } else {\n      evt = new CustomEvent(event, {\n        bubbles,\n        cancelable: true\n      });\n    } // merge custom information in our event\n\n\n    if (typeof args !== 'undefined') {\n      Object.keys(args).forEach(key => {\n        Object.defineProperty(evt, key, {\n          get() {\n            return args[key];\n          }\n\n        });\n      });\n    }\n\n    if (defaultPrevented) {\n      evt.preventDefault();\n    }\n\n    if (nativeDispatch) {\n      element.dispatchEvent(evt);\n    }\n\n    if (evt.defaultPrevented && typeof jQueryEvent !== 'undefined') {\n      jQueryEvent.preventDefault();\n    }\n\n    return evt;\n  }\n\n};\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): dom/data.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\nconst elementMap = new Map();\nvar Data = {\n  set(element, key, instance) {\n    if (!elementMap.has(element)) {\n      elementMap.set(element, new Map());\n    }\n\n    const instanceMap = elementMap.get(element); // make it clear we only want one instance per element\n    // can be removed later when multiple key/instances are fine to be used\n\n    if (!instanceMap.has(key) && instanceMap.size !== 0) {\n      // eslint-disable-next-line no-console\n      console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(instanceMap.keys())[0]}.`);\n      return;\n    }\n\n    instanceMap.set(key, instance);\n  },\n\n  get(element, key) {\n    if (elementMap.has(element)) {\n      return elementMap.get(element).get(key) || null;\n    }\n\n    return null;\n  },\n\n  remove(element, key) {\n    if (!elementMap.has(element)) {\n      return;\n    }\n\n    const instanceMap = elementMap.get(element);\n    instanceMap.delete(key); // free up element references if there are no instances left for an element\n\n    if (instanceMap.size === 0) {\n      elementMap.delete(element);\n    }\n  }\n\n};\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): base-component.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst VERSION = '5.0.2';\n\nclass BaseComponent {\n  constructor(element) {\n    element = getElement(element);\n\n    if (!element) {\n      return;\n    }\n\n    this._element = element;\n    Data.set(this._element, this.constructor.DATA_KEY, this);\n  }\n\n  dispose() {\n    Data.remove(this._element, this.constructor.DATA_KEY);\n    EventHandler.off(this._element, this.constructor.EVENT_KEY);\n    Object.getOwnPropertyNames(this).forEach(propertyName => {\n      this[propertyName] = null;\n    });\n  }\n\n  _queueCallback(callback, element, isAnimated = true) {\n    executeAfterTransition(callback, element, isAnimated);\n  }\n  /** Static */\n\n\n  static getInstance(element) {\n    return Data.get(element, this.DATA_KEY);\n  }\n\n  static getOrCreateInstance(element, config = {}) {\n    return this.getInstance(element) || new this(element, typeof config === 'object' ? config : null);\n  }\n\n  static get VERSION() {\n    return VERSION;\n  }\n\n  static get NAME() {\n    throw new Error('You have to implement the static method \"NAME\", for each component!');\n  }\n\n  static get DATA_KEY() {\n    return `bs.${this.NAME}`;\n  }\n\n  static get EVENT_KEY() {\n    return `.${this.DATA_KEY}`;\n  }\n\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): alert.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$c = 'alert';\nconst DATA_KEY$b = 'bs.alert';\nconst EVENT_KEY$b = `.${DATA_KEY$b}`;\nconst DATA_API_KEY$8 = '.data-api';\nconst SELECTOR_DISMISS = '[data-bs-dismiss=\"alert\"]';\nconst EVENT_CLOSE = `close${EVENT_KEY$b}`;\nconst EVENT_CLOSED = `closed${EVENT_KEY$b}`;\nconst EVENT_CLICK_DATA_API$7 = `click${EVENT_KEY$b}${DATA_API_KEY$8}`;\nconst CLASS_NAME_ALERT = 'alert';\nconst CLASS_NAME_FADE$6 = 'fade';\nconst CLASS_NAME_SHOW$9 = 'show';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Alert extends BaseComponent {\n  // Getters\n  static get NAME() {\n    return NAME$c;\n  } // Public\n\n\n  close(element) {\n    const rootElement = element ? this._getRootElement(element) : this._element;\n\n    const customEvent = this._triggerCloseEvent(rootElement);\n\n    if (customEvent === null || customEvent.defaultPrevented) {\n      return;\n    }\n\n    this._removeElement(rootElement);\n  } // Private\n\n\n  _getRootElement(element) {\n    return getElementFromSelector(element) || element.closest(`.${CLASS_NAME_ALERT}`);\n  }\n\n  _triggerCloseEvent(element) {\n    return EventHandler.trigger(element, EVENT_CLOSE);\n  }\n\n  _removeElement(element) {\n    element.classList.remove(CLASS_NAME_SHOW$9);\n    const isAnimated = element.classList.contains(CLASS_NAME_FADE$6);\n\n    this._queueCallback(() => this._destroyElement(element), element, isAnimated);\n  }\n\n  _destroyElement(element) {\n    element.remove();\n    EventHandler.trigger(element, EVENT_CLOSED);\n  } // Static\n\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Alert.getOrCreateInstance(this);\n\n      if (config === 'close') {\n        data[config](this);\n      }\n    });\n  }\n\n  static handleDismiss(alertInstance) {\n    return function (event) {\n      if (event) {\n        event.preventDefault();\n      }\n\n      alertInstance.close(this);\n    };\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$7, SELECTOR_DISMISS, Alert.handleDismiss(new Alert()));\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Alert to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Alert);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): button.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$b = 'button';\nconst DATA_KEY$a = 'bs.button';\nconst EVENT_KEY$a = `.${DATA_KEY$a}`;\nconst DATA_API_KEY$7 = '.data-api';\nconst CLASS_NAME_ACTIVE$3 = 'active';\nconst SELECTOR_DATA_TOGGLE$5 = '[data-bs-toggle=\"button\"]';\nconst EVENT_CLICK_DATA_API$6 = `click${EVENT_KEY$a}${DATA_API_KEY$7}`;\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Button extends BaseComponent {\n  // Getters\n  static get NAME() {\n    return NAME$b;\n  } // Public\n\n\n  toggle() {\n    // Toggle class and sync the `aria-pressed` attribute with the return value of the `.toggle()` method\n    this._element.setAttribute('aria-pressed', this._element.classList.toggle(CLASS_NAME_ACTIVE$3));\n  } // Static\n\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Button.getOrCreateInstance(this);\n\n      if (config === 'toggle') {\n        data[config]();\n      }\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$6, SELECTOR_DATA_TOGGLE$5, event => {\n  event.preventDefault();\n  const button = event.target.closest(SELECTOR_DATA_TOGGLE$5);\n  const data = Button.getOrCreateInstance(button);\n  data.toggle();\n});\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Button to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Button);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): dom/manipulator.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\nfunction normalizeData(val) {\n  if (val === 'true') {\n    return true;\n  }\n\n  if (val === 'false') {\n    return false;\n  }\n\n  if (val === Number(val).toString()) {\n    return Number(val);\n  }\n\n  if (val === '' || val === 'null') {\n    return null;\n  }\n\n  return val;\n}\n\nfunction normalizeDataKey(key) {\n  return key.replace(/[A-Z]/g, chr => `-${chr.toLowerCase()}`);\n}\n\nconst Manipulator = {\n  setDataAttribute(element, key, value) {\n    element.setAttribute(`data-bs-${normalizeDataKey(key)}`, value);\n  },\n\n  removeDataAttribute(element, key) {\n    element.removeAttribute(`data-bs-${normalizeDataKey(key)}`);\n  },\n\n  getDataAttributes(element) {\n    if (!element) {\n      return {};\n    }\n\n    const attributes = {};\n    Object.keys(element.dataset).filter(key => key.startsWith('bs')).forEach(key => {\n      let pureKey = key.replace(/^bs/, '');\n      pureKey = pureKey.charAt(0).toLowerCase() + pureKey.slice(1, pureKey.length);\n      attributes[pureKey] = normalizeData(element.dataset[key]);\n    });\n    return attributes;\n  },\n\n  getDataAttribute(element, key) {\n    return normalizeData(element.getAttribute(`data-bs-${normalizeDataKey(key)}`));\n  },\n\n  offset(element) {\n    const rect = element.getBoundingClientRect();\n    return {\n      top: rect.top + document.body.scrollTop,\n      left: rect.left + document.body.scrollLeft\n    };\n  },\n\n  position(element) {\n    return {\n      top: element.offsetTop,\n      left: element.offsetLeft\n    };\n  }\n\n};\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): carousel.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$a = 'carousel';\nconst DATA_KEY$9 = 'bs.carousel';\nconst EVENT_KEY$9 = `.${DATA_KEY$9}`;\nconst DATA_API_KEY$6 = '.data-api';\nconst ARROW_LEFT_KEY = 'ArrowLeft';\nconst ARROW_RIGHT_KEY = 'ArrowRight';\nconst TOUCHEVENT_COMPAT_WAIT = 500; // Time for mouse compat events to fire after touch\n\nconst SWIPE_THRESHOLD = 40;\nconst Default$9 = {\n  interval: 5000,\n  keyboard: true,\n  slide: false,\n  pause: 'hover',\n  wrap: true,\n  touch: true\n};\nconst DefaultType$9 = {\n  interval: '(number|boolean)',\n  keyboard: 'boolean',\n  slide: '(boolean|string)',\n  pause: '(string|boolean)',\n  wrap: 'boolean',\n  touch: 'boolean'\n};\nconst ORDER_NEXT = 'next';\nconst ORDER_PREV = 'prev';\nconst DIRECTION_LEFT = 'left';\nconst DIRECTION_RIGHT = 'right';\nconst KEY_TO_DIRECTION = {\n  [ARROW_LEFT_KEY]: DIRECTION_RIGHT,\n  [ARROW_RIGHT_KEY]: DIRECTION_LEFT\n};\nconst EVENT_SLIDE = `slide${EVENT_KEY$9}`;\nconst EVENT_SLID = `slid${EVENT_KEY$9}`;\nconst EVENT_KEYDOWN = `keydown${EVENT_KEY$9}`;\nconst EVENT_MOUSEENTER = `mouseenter${EVENT_KEY$9}`;\nconst EVENT_MOUSELEAVE = `mouseleave${EVENT_KEY$9}`;\nconst EVENT_TOUCHSTART = `touchstart${EVENT_KEY$9}`;\nconst EVENT_TOUCHMOVE = `touchmove${EVENT_KEY$9}`;\nconst EVENT_TOUCHEND = `touchend${EVENT_KEY$9}`;\nconst EVENT_POINTERDOWN = `pointerdown${EVENT_KEY$9}`;\nconst EVENT_POINTERUP = `pointerup${EVENT_KEY$9}`;\nconst EVENT_DRAG_START = `dragstart${EVENT_KEY$9}`;\nconst EVENT_LOAD_DATA_API$2 = `load${EVENT_KEY$9}${DATA_API_KEY$6}`;\nconst EVENT_CLICK_DATA_API$5 = `click${EVENT_KEY$9}${DATA_API_KEY$6}`;\nconst CLASS_NAME_CAROUSEL = 'carousel';\nconst CLASS_NAME_ACTIVE$2 = 'active';\nconst CLASS_NAME_SLIDE = 'slide';\nconst CLASS_NAME_END = 'carousel-item-end';\nconst CLASS_NAME_START = 'carousel-item-start';\nconst CLASS_NAME_NEXT = 'carousel-item-next';\nconst CLASS_NAME_PREV = 'carousel-item-prev';\nconst CLASS_NAME_POINTER_EVENT = 'pointer-event';\nconst SELECTOR_ACTIVE$1 = '.active';\nconst SELECTOR_ACTIVE_ITEM = '.active.carousel-item';\nconst SELECTOR_ITEM = '.carousel-item';\nconst SELECTOR_ITEM_IMG = '.carousel-item img';\nconst SELECTOR_NEXT_PREV = '.carousel-item-next, .carousel-item-prev';\nconst SELECTOR_INDICATORS = '.carousel-indicators';\nconst SELECTOR_INDICATOR = '[data-bs-target]';\nconst SELECTOR_DATA_SLIDE = '[data-bs-slide], [data-bs-slide-to]';\nconst SELECTOR_DATA_RIDE = '[data-bs-ride=\"carousel\"]';\nconst POINTER_TYPE_TOUCH = 'touch';\nconst POINTER_TYPE_PEN = 'pen';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Carousel extends BaseComponent {\n  constructor(element, config) {\n    super(element);\n    this._items = null;\n    this._interval = null;\n    this._activeElement = null;\n    this._isPaused = false;\n    this._isSliding = false;\n    this.touchTimeout = null;\n    this.touchStartX = 0;\n    this.touchDeltaX = 0;\n    this._config = this._getConfig(config);\n    this._indicatorsElement = SelectorEngine.findOne(SELECTOR_INDICATORS, this._element);\n    this._touchSupported = 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0;\n    this._pointerEvent = Boolean(window.PointerEvent);\n\n    this._addEventListeners();\n  } // Getters\n\n\n  static get Default() {\n    return Default$9;\n  }\n\n  static get NAME() {\n    return NAME$a;\n  } // Public\n\n\n  next() {\n    this._slide(ORDER_NEXT);\n  }\n\n  nextWhenVisible() {\n    // Don't call next when the page isn't visible\n    // or the carousel or its parent isn't visible\n    if (!document.hidden && isVisible(this._element)) {\n      this.next();\n    }\n  }\n\n  prev() {\n    this._slide(ORDER_PREV);\n  }\n\n  pause(event) {\n    if (!event) {\n      this._isPaused = true;\n    }\n\n    if (SelectorEngine.findOne(SELECTOR_NEXT_PREV, this._element)) {\n      triggerTransitionEnd(this._element);\n      this.cycle(true);\n    }\n\n    clearInterval(this._interval);\n    this._interval = null;\n  }\n\n  cycle(event) {\n    if (!event) {\n      this._isPaused = false;\n    }\n\n    if (this._interval) {\n      clearInterval(this._interval);\n      this._interval = null;\n    }\n\n    if (this._config && this._config.interval && !this._isPaused) {\n      this._updateInterval();\n\n      this._interval = setInterval((document.visibilityState ? this.nextWhenVisible : this.next).bind(this), this._config.interval);\n    }\n  }\n\n  to(index) {\n    this._activeElement = SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element);\n\n    const activeIndex = this._getItemIndex(this._activeElement);\n\n    if (index > this._items.length - 1 || index < 0) {\n      return;\n    }\n\n    if (this._isSliding) {\n      EventHandler.one(this._element, EVENT_SLID, () => this.to(index));\n      return;\n    }\n\n    if (activeIndex === index) {\n      this.pause();\n      this.cycle();\n      return;\n    }\n\n    const order = index > activeIndex ? ORDER_NEXT : ORDER_PREV;\n\n    this._slide(order, this._items[index]);\n  } // Private\n\n\n  _getConfig(config) {\n    config = { ...Default$9,\n      ...Manipulator.getDataAttributes(this._element),\n      ...(typeof config === 'object' ? config : {})\n    };\n    typeCheckConfig(NAME$a, config, DefaultType$9);\n    return config;\n  }\n\n  _handleSwipe() {\n    const absDeltax = Math.abs(this.touchDeltaX);\n\n    if (absDeltax <= SWIPE_THRESHOLD) {\n      return;\n    }\n\n    const direction = absDeltax / this.touchDeltaX;\n    this.touchDeltaX = 0;\n\n    if (!direction) {\n      return;\n    }\n\n    this._slide(direction > 0 ? DIRECTION_RIGHT : DIRECTION_LEFT);\n  }\n\n  _addEventListeners() {\n    if (this._config.keyboard) {\n      EventHandler.on(this._element, EVENT_KEYDOWN, event => this._keydown(event));\n    }\n\n    if (this._config.pause === 'hover') {\n      EventHandler.on(this._element, EVENT_MOUSEENTER, event => this.pause(event));\n      EventHandler.on(this._element, EVENT_MOUSELEAVE, event => this.cycle(event));\n    }\n\n    if (this._config.touch && this._touchSupported) {\n      this._addTouchEventListeners();\n    }\n  }\n\n  _addTouchEventListeners() {\n    const start = event => {\n      if (this._pointerEvent && (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH)) {\n        this.touchStartX = event.clientX;\n      } else if (!this._pointerEvent) {\n        this.touchStartX = event.touches[0].clientX;\n      }\n    };\n\n    const move = event => {\n      // ensure swiping with one touch and not pinching\n      this.touchDeltaX = event.touches && event.touches.length > 1 ? 0 : event.touches[0].clientX - this.touchStartX;\n    };\n\n    const end = event => {\n      if (this._pointerEvent && (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH)) {\n        this.touchDeltaX = event.clientX - this.touchStartX;\n      }\n\n      this._handleSwipe();\n\n      if (this._config.pause === 'hover') {\n        // If it's a touch-enabled device, mouseenter/leave are fired as\n        // part of the mouse compatibility events on first tap - the carousel\n        // would stop cycling until user tapped out of it;\n        // here, we listen for touchend, explicitly pause the carousel\n        // (as if it's the second time we tap on it, mouseenter compat event\n        // is NOT fired) and after a timeout (to allow for mouse compatibility\n        // events to fire) we explicitly restart cycling\n        this.pause();\n\n        if (this.touchTimeout) {\n          clearTimeout(this.touchTimeout);\n        }\n\n        this.touchTimeout = setTimeout(event => this.cycle(event), TOUCHEVENT_COMPAT_WAIT + this._config.interval);\n      }\n    };\n\n    SelectorEngine.find(SELECTOR_ITEM_IMG, this._element).forEach(itemImg => {\n      EventHandler.on(itemImg, EVENT_DRAG_START, e => e.preventDefault());\n    });\n\n    if (this._pointerEvent) {\n      EventHandler.on(this._element, EVENT_POINTERDOWN, event => start(event));\n      EventHandler.on(this._element, EVENT_POINTERUP, event => end(event));\n\n      this._element.classList.add(CLASS_NAME_POINTER_EVENT);\n    } else {\n      EventHandler.on(this._element, EVENT_TOUCHSTART, event => start(event));\n      EventHandler.on(this._element, EVENT_TOUCHMOVE, event => move(event));\n      EventHandler.on(this._element, EVENT_TOUCHEND, event => end(event));\n    }\n  }\n\n  _keydown(event) {\n    if (/input|textarea/i.test(event.target.tagName)) {\n      return;\n    }\n\n    const direction = KEY_TO_DIRECTION[event.key];\n\n    if (direction) {\n      event.preventDefault();\n\n      this._slide(direction);\n    }\n  }\n\n  _getItemIndex(element) {\n    this._items = element && element.parentNode ? SelectorEngine.find(SELECTOR_ITEM, element.parentNode) : [];\n    return this._items.indexOf(element);\n  }\n\n  _getItemByOrder(order, activeElement) {\n    const isNext = order === ORDER_NEXT;\n    return getNextActiveElement(this._items, activeElement, isNext, this._config.wrap);\n  }\n\n  _triggerSlideEvent(relatedTarget, eventDirectionName) {\n    const targetIndex = this._getItemIndex(relatedTarget);\n\n    const fromIndex = this._getItemIndex(SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element));\n\n    return EventHandler.trigger(this._element, EVENT_SLIDE, {\n      relatedTarget,\n      direction: eventDirectionName,\n      from: fromIndex,\n      to: targetIndex\n    });\n  }\n\n  _setActiveIndicatorElement(element) {\n    if (this._indicatorsElement) {\n      const activeIndicator = SelectorEngine.findOne(SELECTOR_ACTIVE$1, this._indicatorsElement);\n      activeIndicator.classList.remove(CLASS_NAME_ACTIVE$2);\n      activeIndicator.removeAttribute('aria-current');\n      const indicators = SelectorEngine.find(SELECTOR_INDICATOR, this._indicatorsElement);\n\n      for (let i = 0; i < indicators.length; i++) {\n        if (Number.parseInt(indicators[i].getAttribute('data-bs-slide-to'), 10) === this._getItemIndex(element)) {\n          indicators[i].classList.add(CLASS_NAME_ACTIVE$2);\n          indicators[i].setAttribute('aria-current', 'true');\n          break;\n        }\n      }\n    }\n  }\n\n  _updateInterval() {\n    const element = this._activeElement || SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element);\n\n    if (!element) {\n      return;\n    }\n\n    const elementInterval = Number.parseInt(element.getAttribute('data-bs-interval'), 10);\n\n    if (elementInterval) {\n      this._config.defaultInterval = this._config.defaultInterval || this._config.interval;\n      this._config.interval = elementInterval;\n    } else {\n      this._config.interval = this._config.defaultInterval || this._config.interval;\n    }\n  }\n\n  _slide(directionOrOrder, element) {\n    const order = this._directionToOrder(directionOrOrder);\n\n    const activeElement = SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element);\n\n    const activeElementIndex = this._getItemIndex(activeElement);\n\n    const nextElement = element || this._getItemByOrder(order, activeElement);\n\n    const nextElementIndex = this._getItemIndex(nextElement);\n\n    const isCycling = Boolean(this._interval);\n    const isNext = order === ORDER_NEXT;\n    const directionalClassName = isNext ? CLASS_NAME_START : CLASS_NAME_END;\n    const orderClassName = isNext ? CLASS_NAME_NEXT : CLASS_NAME_PREV;\n\n    const eventDirectionName = this._orderToDirection(order);\n\n    if (nextElement && nextElement.classList.contains(CLASS_NAME_ACTIVE$2)) {\n      this._isSliding = false;\n      return;\n    }\n\n    if (this._isSliding) {\n      return;\n    }\n\n    const slideEvent = this._triggerSlideEvent(nextElement, eventDirectionName);\n\n    if (slideEvent.defaultPrevented) {\n      return;\n    }\n\n    if (!activeElement || !nextElement) {\n      // Some weirdness is happening, so we bail\n      return;\n    }\n\n    this._isSliding = true;\n\n    if (isCycling) {\n      this.pause();\n    }\n\n    this._setActiveIndicatorElement(nextElement);\n\n    this._activeElement = nextElement;\n\n    const triggerSlidEvent = () => {\n      EventHandler.trigger(this._element, EVENT_SLID, {\n        relatedTarget: nextElement,\n        direction: eventDirectionName,\n        from: activeElementIndex,\n        to: nextElementIndex\n      });\n    };\n\n    if (this._element.classList.contains(CLASS_NAME_SLIDE)) {\n      nextElement.classList.add(orderClassName);\n      reflow(nextElement);\n      activeElement.classList.add(directionalClassName);\n      nextElement.classList.add(directionalClassName);\n\n      const completeCallBack = () => {\n        nextElement.classList.remove(directionalClassName, orderClassName);\n        nextElement.classList.add(CLASS_NAME_ACTIVE$2);\n        activeElement.classList.remove(CLASS_NAME_ACTIVE$2, orderClassName, directionalClassName);\n        this._isSliding = false;\n        setTimeout(triggerSlidEvent, 0);\n      };\n\n      this._queueCallback(completeCallBack, activeElement, true);\n    } else {\n      activeElement.classList.remove(CLASS_NAME_ACTIVE$2);\n      nextElement.classList.add(CLASS_NAME_ACTIVE$2);\n      this._isSliding = false;\n      triggerSlidEvent();\n    }\n\n    if (isCycling) {\n      this.cycle();\n    }\n  }\n\n  _directionToOrder(direction) {\n    if (![DIRECTION_RIGHT, DIRECTION_LEFT].includes(direction)) {\n      return direction;\n    }\n\n    if (isRTL()) {\n      return direction === DIRECTION_LEFT ? ORDER_PREV : ORDER_NEXT;\n    }\n\n    return direction === DIRECTION_LEFT ? ORDER_NEXT : ORDER_PREV;\n  }\n\n  _orderToDirection(order) {\n    if (![ORDER_NEXT, ORDER_PREV].includes(order)) {\n      return order;\n    }\n\n    if (isRTL()) {\n      return order === ORDER_PREV ? DIRECTION_LEFT : DIRECTION_RIGHT;\n    }\n\n    return order === ORDER_PREV ? DIRECTION_RIGHT : DIRECTION_LEFT;\n  } // Static\n\n\n  static carouselInterface(element, config) {\n    const data = Carousel.getOrCreateInstance(element, config);\n    let {\n      _config\n    } = data;\n\n    if (typeof config === 'object') {\n      _config = { ..._config,\n        ...config\n      };\n    }\n\n    const action = typeof config === 'string' ? config : _config.slide;\n\n    if (typeof config === 'number') {\n      data.to(config);\n    } else if (typeof action === 'string') {\n      if (typeof data[action] === 'undefined') {\n        throw new TypeError(`No method named \"${action}\"`);\n      }\n\n      data[action]();\n    } else if (_config.interval && _config.ride) {\n      data.pause();\n      data.cycle();\n    }\n  }\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      Carousel.carouselInterface(this, config);\n    });\n  }\n\n  static dataApiClickHandler(event) {\n    const target = getElementFromSelector(this);\n\n    if (!target || !target.classList.contains(CLASS_NAME_CAROUSEL)) {\n      return;\n    }\n\n    const config = { ...Manipulator.getDataAttributes(target),\n      ...Manipulator.getDataAttributes(this)\n    };\n    const slideIndex = this.getAttribute('data-bs-slide-to');\n\n    if (slideIndex) {\n      config.interval = false;\n    }\n\n    Carousel.carouselInterface(target, config);\n\n    if (slideIndex) {\n      Carousel.getInstance(target).to(slideIndex);\n    }\n\n    event.preventDefault();\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$5, SELECTOR_DATA_SLIDE, Carousel.dataApiClickHandler);\nEventHandler.on(window, EVENT_LOAD_DATA_API$2, () => {\n  const carousels = SelectorEngine.find(SELECTOR_DATA_RIDE);\n\n  for (let i = 0, len = carousels.length; i < len; i++) {\n    Carousel.carouselInterface(carousels[i], Carousel.getInstance(carousels[i]));\n  }\n});\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Carousel to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Carousel);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): collapse.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$9 = 'collapse';\nconst DATA_KEY$8 = 'bs.collapse';\nconst EVENT_KEY$8 = `.${DATA_KEY$8}`;\nconst DATA_API_KEY$5 = '.data-api';\nconst Default$8 = {\n  toggle: true,\n  parent: ''\n};\nconst DefaultType$8 = {\n  toggle: 'boolean',\n  parent: '(string|element)'\n};\nconst EVENT_SHOW$5 = `show${EVENT_KEY$8}`;\nconst EVENT_SHOWN$5 = `shown${EVENT_KEY$8}`;\nconst EVENT_HIDE$5 = `hide${EVENT_KEY$8}`;\nconst EVENT_HIDDEN$5 = `hidden${EVENT_KEY$8}`;\nconst EVENT_CLICK_DATA_API$4 = `click${EVENT_KEY$8}${DATA_API_KEY$5}`;\nconst CLASS_NAME_SHOW$8 = 'show';\nconst CLASS_NAME_COLLAPSE = 'collapse';\nconst CLASS_NAME_COLLAPSING = 'collapsing';\nconst CLASS_NAME_COLLAPSED = 'collapsed';\nconst WIDTH = 'width';\nconst HEIGHT = 'height';\nconst SELECTOR_ACTIVES = '.show, .collapsing';\nconst SELECTOR_DATA_TOGGLE$4 = '[data-bs-toggle=\"collapse\"]';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Collapse extends BaseComponent {\n  constructor(element, config) {\n    super(element);\n    this._isTransitioning = false;\n    this._config = this._getConfig(config);\n    this._triggerArray = SelectorEngine.find(`${SELECTOR_DATA_TOGGLE$4}[href=\"#${this._element.id}\"],` + `${SELECTOR_DATA_TOGGLE$4}[data-bs-target=\"#${this._element.id}\"]`);\n    const toggleList = SelectorEngine.find(SELECTOR_DATA_TOGGLE$4);\n\n    for (let i = 0, len = toggleList.length; i < len; i++) {\n      const elem = toggleList[i];\n      const selector = getSelectorFromElement(elem);\n      const filterElement = SelectorEngine.find(selector).filter(foundElem => foundElem === this._element);\n\n      if (selector !== null && filterElement.length) {\n        this._selector = selector;\n\n        this._triggerArray.push(elem);\n      }\n    }\n\n    this._parent = this._config.parent ? this._getParent() : null;\n\n    if (!this._config.parent) {\n      this._addAriaAndCollapsedClass(this._element, this._triggerArray);\n    }\n\n    if (this._config.toggle) {\n      this.toggle();\n    }\n  } // Getters\n\n\n  static get Default() {\n    return Default$8;\n  }\n\n  static get NAME() {\n    return NAME$9;\n  } // Public\n\n\n  toggle() {\n    if (this._element.classList.contains(CLASS_NAME_SHOW$8)) {\n      this.hide();\n    } else {\n      this.show();\n    }\n  }\n\n  show() {\n    if (this._isTransitioning || this._element.classList.contains(CLASS_NAME_SHOW$8)) {\n      return;\n    }\n\n    let actives;\n    let activesData;\n\n    if (this._parent) {\n      actives = SelectorEngine.find(SELECTOR_ACTIVES, this._parent).filter(elem => {\n        if (typeof this._config.parent === 'string') {\n          return elem.getAttribute('data-bs-parent') === this._config.parent;\n        }\n\n        return elem.classList.contains(CLASS_NAME_COLLAPSE);\n      });\n\n      if (actives.length === 0) {\n        actives = null;\n      }\n    }\n\n    const container = SelectorEngine.findOne(this._selector);\n\n    if (actives) {\n      const tempActiveData = actives.find(elem => container !== elem);\n      activesData = tempActiveData ? Collapse.getInstance(tempActiveData) : null;\n\n      if (activesData && activesData._isTransitioning) {\n        return;\n      }\n    }\n\n    const startEvent = EventHandler.trigger(this._element, EVENT_SHOW$5);\n\n    if (startEvent.defaultPrevented) {\n      return;\n    }\n\n    if (actives) {\n      actives.forEach(elemActive => {\n        if (container !== elemActive) {\n          Collapse.collapseInterface(elemActive, 'hide');\n        }\n\n        if (!activesData) {\n          Data.set(elemActive, DATA_KEY$8, null);\n        }\n      });\n    }\n\n    const dimension = this._getDimension();\n\n    this._element.classList.remove(CLASS_NAME_COLLAPSE);\n\n    this._element.classList.add(CLASS_NAME_COLLAPSING);\n\n    this._element.style[dimension] = 0;\n\n    if (this._triggerArray.length) {\n      this._triggerArray.forEach(element => {\n        element.classList.remove(CLASS_NAME_COLLAPSED);\n        element.setAttribute('aria-expanded', true);\n      });\n    }\n\n    this.setTransitioning(true);\n\n    const complete = () => {\n      this._element.classList.remove(CLASS_NAME_COLLAPSING);\n\n      this._element.classList.add(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$8);\n\n      this._element.style[dimension] = '';\n      this.setTransitioning(false);\n      EventHandler.trigger(this._element, EVENT_SHOWN$5);\n    };\n\n    const capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1);\n    const scrollSize = `scroll${capitalizedDimension}`;\n\n    this._queueCallback(complete, this._element, true);\n\n    this._element.style[dimension] = `${this._element[scrollSize]}px`;\n  }\n\n  hide() {\n    if (this._isTransitioning || !this._element.classList.contains(CLASS_NAME_SHOW$8)) {\n      return;\n    }\n\n    const startEvent = EventHandler.trigger(this._element, EVENT_HIDE$5);\n\n    if (startEvent.defaultPrevented) {\n      return;\n    }\n\n    const dimension = this._getDimension();\n\n    this._element.style[dimension] = `${this._element.getBoundingClientRect()[dimension]}px`;\n    reflow(this._element);\n\n    this._element.classList.add(CLASS_NAME_COLLAPSING);\n\n    this._element.classList.remove(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$8);\n\n    const triggerArrayLength = this._triggerArray.length;\n\n    if (triggerArrayLength > 0) {\n      for (let i = 0; i < triggerArrayLength; i++) {\n        const trigger = this._triggerArray[i];\n        const elem = getElementFromSelector(trigger);\n\n        if (elem && !elem.classList.contains(CLASS_NAME_SHOW$8)) {\n          trigger.classList.add(CLASS_NAME_COLLAPSED);\n          trigger.setAttribute('aria-expanded', false);\n        }\n      }\n    }\n\n    this.setTransitioning(true);\n\n    const complete = () => {\n      this.setTransitioning(false);\n\n      this._element.classList.remove(CLASS_NAME_COLLAPSING);\n\n      this._element.classList.add(CLASS_NAME_COLLAPSE);\n\n      EventHandler.trigger(this._element, EVENT_HIDDEN$5);\n    };\n\n    this._element.style[dimension] = '';\n\n    this._queueCallback(complete, this._element, true);\n  }\n\n  setTransitioning(isTransitioning) {\n    this._isTransitioning = isTransitioning;\n  } // Private\n\n\n  _getConfig(config) {\n    config = { ...Default$8,\n      ...config\n    };\n    config.toggle = Boolean(config.toggle); // Coerce string values\n\n    typeCheckConfig(NAME$9, config, DefaultType$8);\n    return config;\n  }\n\n  _getDimension() {\n    return this._element.classList.contains(WIDTH) ? WIDTH : HEIGHT;\n  }\n\n  _getParent() {\n    let {\n      parent\n    } = this._config;\n    parent = getElement(parent);\n    const selector = `${SELECTOR_DATA_TOGGLE$4}[data-bs-parent=\"${parent}\"]`;\n    SelectorEngine.find(selector, parent).forEach(element => {\n      const selected = getElementFromSelector(element);\n\n      this._addAriaAndCollapsedClass(selected, [element]);\n    });\n    return parent;\n  }\n\n  _addAriaAndCollapsedClass(element, triggerArray) {\n    if (!element || !triggerArray.length) {\n      return;\n    }\n\n    const isOpen = element.classList.contains(CLASS_NAME_SHOW$8);\n    triggerArray.forEach(elem => {\n      if (isOpen) {\n        elem.classList.remove(CLASS_NAME_COLLAPSED);\n      } else {\n        elem.classList.add(CLASS_NAME_COLLAPSED);\n      }\n\n      elem.setAttribute('aria-expanded', isOpen);\n    });\n  } // Static\n\n\n  static collapseInterface(element, config) {\n    let data = Collapse.getInstance(element);\n    const _config = { ...Default$8,\n      ...Manipulator.getDataAttributes(element),\n      ...(typeof config === 'object' && config ? config : {})\n    };\n\n    if (!data && _config.toggle && typeof config === 'string' && /show|hide/.test(config)) {\n      _config.toggle = false;\n    }\n\n    if (!data) {\n      data = new Collapse(element, _config);\n    }\n\n    if (typeof config === 'string') {\n      if (typeof data[config] === 'undefined') {\n        throw new TypeError(`No method named \"${config}\"`);\n      }\n\n      data[config]();\n    }\n  }\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      Collapse.collapseInterface(this, config);\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$4, SELECTOR_DATA_TOGGLE$4, function (event) {\n  // preventDefault only for <a> elements (which change the URL) not inside the collapsible element\n  if (event.target.tagName === 'A' || event.delegateTarget && event.delegateTarget.tagName === 'A') {\n    event.preventDefault();\n  }\n\n  const triggerData = Manipulator.getDataAttributes(this);\n  const selector = getSelectorFromElement(this);\n  const selectorElements = SelectorEngine.find(selector);\n  selectorElements.forEach(element => {\n    const data = Collapse.getInstance(element);\n    let config;\n\n    if (data) {\n      // update parent attribute\n      if (data._parent === null && typeof triggerData.parent === 'string') {\n        data._config.parent = triggerData.parent;\n        data._parent = data._getParent();\n      }\n\n      config = 'toggle';\n    } else {\n      config = triggerData;\n    }\n\n    Collapse.collapseInterface(element, config);\n  });\n});\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Collapse to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Collapse);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): dropdown.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$8 = 'dropdown';\nconst DATA_KEY$7 = 'bs.dropdown';\nconst EVENT_KEY$7 = `.${DATA_KEY$7}`;\nconst DATA_API_KEY$4 = '.data-api';\nconst ESCAPE_KEY$2 = 'Escape';\nconst SPACE_KEY = 'Space';\nconst TAB_KEY = 'Tab';\nconst ARROW_UP_KEY = 'ArrowUp';\nconst ARROW_DOWN_KEY = 'ArrowDown';\nconst RIGHT_MOUSE_BUTTON = 2; // MouseEvent.button value for the secondary button, usually the right button\n\nconst REGEXP_KEYDOWN = new RegExp(`${ARROW_UP_KEY}|${ARROW_DOWN_KEY}|${ESCAPE_KEY$2}`);\nconst EVENT_HIDE$4 = `hide${EVENT_KEY$7}`;\nconst EVENT_HIDDEN$4 = `hidden${EVENT_KEY$7}`;\nconst EVENT_SHOW$4 = `show${EVENT_KEY$7}`;\nconst EVENT_SHOWN$4 = `shown${EVENT_KEY$7}`;\nconst EVENT_CLICK = `click${EVENT_KEY$7}`;\nconst EVENT_CLICK_DATA_API$3 = `click${EVENT_KEY$7}${DATA_API_KEY$4}`;\nconst EVENT_KEYDOWN_DATA_API = `keydown${EVENT_KEY$7}${DATA_API_KEY$4}`;\nconst EVENT_KEYUP_DATA_API = `keyup${EVENT_KEY$7}${DATA_API_KEY$4}`;\nconst CLASS_NAME_SHOW$7 = 'show';\nconst CLASS_NAME_DROPUP = 'dropup';\nconst CLASS_NAME_DROPEND = 'dropend';\nconst CLASS_NAME_DROPSTART = 'dropstart';\nconst CLASS_NAME_NAVBAR = 'navbar';\nconst SELECTOR_DATA_TOGGLE$3 = '[data-bs-toggle=\"dropdown\"]';\nconst SELECTOR_MENU = '.dropdown-menu';\nconst SELECTOR_NAVBAR_NAV = '.navbar-nav';\nconst SELECTOR_VISIBLE_ITEMS = '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)';\nconst PLACEMENT_TOP = isRTL() ? 'top-end' : 'top-start';\nconst PLACEMENT_TOPEND = isRTL() ? 'top-start' : 'top-end';\nconst PLACEMENT_BOTTOM = isRTL() ? 'bottom-end' : 'bottom-start';\nconst PLACEMENT_BOTTOMEND = isRTL() ? 'bottom-start' : 'bottom-end';\nconst PLACEMENT_RIGHT = isRTL() ? 'left-start' : 'right-start';\nconst PLACEMENT_LEFT = isRTL() ? 'right-start' : 'left-start';\nconst Default$7 = {\n  offset: [0, 2],\n  boundary: 'clippingParents',\n  reference: 'toggle',\n  display: 'dynamic',\n  popperConfig: null,\n  autoClose: true\n};\nconst DefaultType$7 = {\n  offset: '(array|string|function)',\n  boundary: '(string|element)',\n  reference: '(string|element|object)',\n  display: 'string',\n  popperConfig: '(null|object|function)',\n  autoClose: '(boolean|string)'\n};\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Dropdown extends BaseComponent {\n  constructor(element, config) {\n    super(element);\n    this._popper = null;\n    this._config = this._getConfig(config);\n    this._menu = this._getMenuElement();\n    this._inNavbar = this._detectNavbar();\n\n    this._addEventListeners();\n  } // Getters\n\n\n  static get Default() {\n    return Default$7;\n  }\n\n  static get DefaultType() {\n    return DefaultType$7;\n  }\n\n  static get NAME() {\n    return NAME$8;\n  } // Public\n\n\n  toggle() {\n    if (isDisabled(this._element)) {\n      return;\n    }\n\n    const isActive = this._element.classList.contains(CLASS_NAME_SHOW$7);\n\n    if (isActive) {\n      this.hide();\n      return;\n    }\n\n    this.show();\n  }\n\n  show() {\n    if (isDisabled(this._element) || this._menu.classList.contains(CLASS_NAME_SHOW$7)) {\n      return;\n    }\n\n    const parent = Dropdown.getParentFromElement(this._element);\n    const relatedTarget = {\n      relatedTarget: this._element\n    };\n    const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$4, relatedTarget);\n\n    if (showEvent.defaultPrevented) {\n      return;\n    } // Totally disable Popper for Dropdowns in Navbar\n\n\n    if (this._inNavbar) {\n      Manipulator.setDataAttribute(this._menu, 'popper', 'none');\n    } else {\n      if (typeof Popper === 'undefined') {\n        throw new TypeError('Bootstrap\\'s dropdowns require Popper (https://popper.js.org)');\n      }\n\n      let referenceElement = this._element;\n\n      if (this._config.reference === 'parent') {\n        referenceElement = parent;\n      } else if (isElement(this._config.reference)) {\n        referenceElement = getElement(this._config.reference);\n      } else if (typeof this._config.reference === 'object') {\n        referenceElement = this._config.reference;\n      }\n\n      const popperConfig = this._getPopperConfig();\n\n      const isDisplayStatic = popperConfig.modifiers.find(modifier => modifier.name === 'applyStyles' && modifier.enabled === false);\n      this._popper = Popper.createPopper(referenceElement, this._menu, popperConfig);\n\n      if (isDisplayStatic) {\n        Manipulator.setDataAttribute(this._menu, 'popper', 'static');\n      }\n    } // If this is a touch-enabled device we add extra\n    // empty mouseover listeners to the body's immediate children;\n    // only needed because of broken event delegation on iOS\n    // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n\n\n    if ('ontouchstart' in document.documentElement && !parent.closest(SELECTOR_NAVBAR_NAV)) {\n      [].concat(...document.body.children).forEach(elem => EventHandler.on(elem, 'mouseover', noop));\n    }\n\n    this._element.focus();\n\n    this._element.setAttribute('aria-expanded', true);\n\n    this._menu.classList.toggle(CLASS_NAME_SHOW$7);\n\n    this._element.classList.toggle(CLASS_NAME_SHOW$7);\n\n    EventHandler.trigger(this._element, EVENT_SHOWN$4, relatedTarget);\n  }\n\n  hide() {\n    if (isDisabled(this._element) || !this._menu.classList.contains(CLASS_NAME_SHOW$7)) {\n      return;\n    }\n\n    const relatedTarget = {\n      relatedTarget: this._element\n    };\n\n    this._completeHide(relatedTarget);\n  }\n\n  dispose() {\n    if (this._popper) {\n      this._popper.destroy();\n    }\n\n    super.dispose();\n  }\n\n  update() {\n    this._inNavbar = this._detectNavbar();\n\n    if (this._popper) {\n      this._popper.update();\n    }\n  } // Private\n\n\n  _addEventListeners() {\n    EventHandler.on(this._element, EVENT_CLICK, event => {\n      event.preventDefault();\n      this.toggle();\n    });\n  }\n\n  _completeHide(relatedTarget) {\n    const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$4, relatedTarget);\n\n    if (hideEvent.defaultPrevented) {\n      return;\n    } // If this is a touch-enabled device we remove the extra\n    // empty mouseover listeners we added for iOS support\n\n\n    if ('ontouchstart' in document.documentElement) {\n      [].concat(...document.body.children).forEach(elem => EventHandler.off(elem, 'mouseover', noop));\n    }\n\n    if (this._popper) {\n      this._popper.destroy();\n    }\n\n    this._menu.classList.remove(CLASS_NAME_SHOW$7);\n\n    this._element.classList.remove(CLASS_NAME_SHOW$7);\n\n    this._element.setAttribute('aria-expanded', 'false');\n\n    Manipulator.removeDataAttribute(this._menu, 'popper');\n    EventHandler.trigger(this._element, EVENT_HIDDEN$4, relatedTarget);\n  }\n\n  _getConfig(config) {\n    config = { ...this.constructor.Default,\n      ...Manipulator.getDataAttributes(this._element),\n      ...config\n    };\n    typeCheckConfig(NAME$8, config, this.constructor.DefaultType);\n\n    if (typeof config.reference === 'object' && !isElement(config.reference) && typeof config.reference.getBoundingClientRect !== 'function') {\n      // Popper virtual elements require a getBoundingClientRect method\n      throw new TypeError(`${NAME$8.toUpperCase()}: Option \"reference\" provided type \"object\" without a required \"getBoundingClientRect\" method.`);\n    }\n\n    return config;\n  }\n\n  _getMenuElement() {\n    return SelectorEngine.next(this._element, SELECTOR_MENU)[0];\n  }\n\n  _getPlacement() {\n    const parentDropdown = this._element.parentNode;\n\n    if (parentDropdown.classList.contains(CLASS_NAME_DROPEND)) {\n      return PLACEMENT_RIGHT;\n    }\n\n    if (parentDropdown.classList.contains(CLASS_NAME_DROPSTART)) {\n      return PLACEMENT_LEFT;\n    } // We need to trim the value because custom properties can also include spaces\n\n\n    const isEnd = getComputedStyle(this._menu).getPropertyValue('--bs-position').trim() === 'end';\n\n    if (parentDropdown.classList.contains(CLASS_NAME_DROPUP)) {\n      return isEnd ? PLACEMENT_TOPEND : PLACEMENT_TOP;\n    }\n\n    return isEnd ? PLACEMENT_BOTTOMEND : PLACEMENT_BOTTOM;\n  }\n\n  _detectNavbar() {\n    return this._element.closest(`.${CLASS_NAME_NAVBAR}`) !== null;\n  }\n\n  _getOffset() {\n    const {\n      offset\n    } = this._config;\n\n    if (typeof offset === 'string') {\n      return offset.split(',').map(val => Number.parseInt(val, 10));\n    }\n\n    if (typeof offset === 'function') {\n      return popperData => offset(popperData, this._element);\n    }\n\n    return offset;\n  }\n\n  _getPopperConfig() {\n    const defaultBsPopperConfig = {\n      placement: this._getPlacement(),\n      modifiers: [{\n        name: 'preventOverflow',\n        options: {\n          boundary: this._config.boundary\n        }\n      }, {\n        name: 'offset',\n        options: {\n          offset: this._getOffset()\n        }\n      }]\n    }; // Disable Popper if we have a static display\n\n    if (this._config.display === 'static') {\n      defaultBsPopperConfig.modifiers = [{\n        name: 'applyStyles',\n        enabled: false\n      }];\n    }\n\n    return { ...defaultBsPopperConfig,\n      ...(typeof this._config.popperConfig === 'function' ? this._config.popperConfig(defaultBsPopperConfig) : this._config.popperConfig)\n    };\n  }\n\n  _selectMenuItem({\n    key,\n    target\n  }) {\n    const items = SelectorEngine.find(SELECTOR_VISIBLE_ITEMS, this._menu).filter(isVisible);\n\n    if (!items.length) {\n      return;\n    } // if target isn't included in items (e.g. when expanding the dropdown)\n    // allow cycling to get the last item in case key equals ARROW_UP_KEY\n\n\n    getNextActiveElement(items, target, key === ARROW_DOWN_KEY, !items.includes(target)).focus();\n  } // Static\n\n\n  static dropdownInterface(element, config) {\n    const data = Dropdown.getOrCreateInstance(element, config);\n\n    if (typeof config === 'string') {\n      if (typeof data[config] === 'undefined') {\n        throw new TypeError(`No method named \"${config}\"`);\n      }\n\n      data[config]();\n    }\n  }\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      Dropdown.dropdownInterface(this, config);\n    });\n  }\n\n  static clearMenus(event) {\n    if (event && (event.button === RIGHT_MOUSE_BUTTON || event.type === 'keyup' && event.key !== TAB_KEY)) {\n      return;\n    }\n\n    const toggles = SelectorEngine.find(SELECTOR_DATA_TOGGLE$3);\n\n    for (let i = 0, len = toggles.length; i < len; i++) {\n      const context = Dropdown.getInstance(toggles[i]);\n\n      if (!context || context._config.autoClose === false) {\n        continue;\n      }\n\n      if (!context._element.classList.contains(CLASS_NAME_SHOW$7)) {\n        continue;\n      }\n\n      const relatedTarget = {\n        relatedTarget: context._element\n      };\n\n      if (event) {\n        const composedPath = event.composedPath();\n        const isMenuTarget = composedPath.includes(context._menu);\n\n        if (composedPath.includes(context._element) || context._config.autoClose === 'inside' && !isMenuTarget || context._config.autoClose === 'outside' && isMenuTarget) {\n          continue;\n        } // Tab navigation through the dropdown menu or events from contained inputs shouldn't close the menu\n\n\n        if (context._menu.contains(event.target) && (event.type === 'keyup' && event.key === TAB_KEY || /input|select|option|textarea|form/i.test(event.target.tagName))) {\n          continue;\n        }\n\n        if (event.type === 'click') {\n          relatedTarget.clickEvent = event;\n        }\n      }\n\n      context._completeHide(relatedTarget);\n    }\n  }\n\n  static getParentFromElement(element) {\n    return getElementFromSelector(element) || element.parentNode;\n  }\n\n  static dataApiKeydownHandler(event) {\n    // If not input/textarea:\n    //  - And not a key in REGEXP_KEYDOWN => not a dropdown command\n    // If input/textarea:\n    //  - If space key => not a dropdown command\n    //  - If key is other than escape\n    //    - If key is not up or down => not a dropdown command\n    //    - If trigger inside the menu => not a dropdown command\n    if (/input|textarea/i.test(event.target.tagName) ? event.key === SPACE_KEY || event.key !== ESCAPE_KEY$2 && (event.key !== ARROW_DOWN_KEY && event.key !== ARROW_UP_KEY || event.target.closest(SELECTOR_MENU)) : !REGEXP_KEYDOWN.test(event.key)) {\n      return;\n    }\n\n    const isActive = this.classList.contains(CLASS_NAME_SHOW$7);\n\n    if (!isActive && event.key === ESCAPE_KEY$2) {\n      return;\n    }\n\n    event.preventDefault();\n    event.stopPropagation();\n\n    if (isDisabled(this)) {\n      return;\n    }\n\n    const getToggleButton = () => this.matches(SELECTOR_DATA_TOGGLE$3) ? this : SelectorEngine.prev(this, SELECTOR_DATA_TOGGLE$3)[0];\n\n    if (event.key === ESCAPE_KEY$2) {\n      getToggleButton().focus();\n      Dropdown.clearMenus();\n      return;\n    }\n\n    if (event.key === ARROW_UP_KEY || event.key === ARROW_DOWN_KEY) {\n      if (!isActive) {\n        getToggleButton().click();\n      }\n\n      Dropdown.getInstance(getToggleButton())._selectMenuItem(event);\n\n      return;\n    }\n\n    if (!isActive || event.key === SPACE_KEY) {\n      Dropdown.clearMenus();\n    }\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_DATA_TOGGLE$3, Dropdown.dataApiKeydownHandler);\nEventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown.dataApiKeydownHandler);\nEventHandler.on(document, EVENT_CLICK_DATA_API$3, Dropdown.clearMenus);\nEventHandler.on(document, EVENT_KEYUP_DATA_API, Dropdown.clearMenus);\nEventHandler.on(document, EVENT_CLICK_DATA_API$3, SELECTOR_DATA_TOGGLE$3, function (event) {\n  event.preventDefault();\n  Dropdown.dropdownInterface(this);\n});\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Dropdown to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Dropdown);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): util/scrollBar.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\nconst SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top';\nconst SELECTOR_STICKY_CONTENT = '.sticky-top';\n\nclass ScrollBarHelper {\n  constructor() {\n    this._element = document.body;\n  }\n\n  getWidth() {\n    // https://developer.mozilla.org/en-US/docs/Web/API/Window/innerWidth#usage_notes\n    const documentWidth = document.documentElement.clientWidth;\n    return Math.abs(window.innerWidth - documentWidth);\n  }\n\n  hide() {\n    const width = this.getWidth();\n\n    this._disableOverFlow(); // give padding to element to balance the hidden scrollbar width\n\n\n    this._setElementAttributes(this._element, 'paddingRight', calculatedValue => calculatedValue + width); // trick: We adjust positive paddingRight and negative marginRight to sticky-top elements to keep showing fullwidth\n\n\n    this._setElementAttributes(SELECTOR_FIXED_CONTENT, 'paddingRight', calculatedValue => calculatedValue + width);\n\n    this._setElementAttributes(SELECTOR_STICKY_CONTENT, 'marginRight', calculatedValue => calculatedValue - width);\n  }\n\n  _disableOverFlow() {\n    this._saveInitialAttribute(this._element, 'overflow');\n\n    this._element.style.overflow = 'hidden';\n  }\n\n  _setElementAttributes(selector, styleProp, callback) {\n    const scrollbarWidth = this.getWidth();\n\n    const manipulationCallBack = element => {\n      if (element !== this._element && window.innerWidth > element.clientWidth + scrollbarWidth) {\n        return;\n      }\n\n      this._saveInitialAttribute(element, styleProp);\n\n      const calculatedValue = window.getComputedStyle(element)[styleProp];\n      element.style[styleProp] = `${callback(Number.parseFloat(calculatedValue))}px`;\n    };\n\n    this._applyManipulationCallback(selector, manipulationCallBack);\n  }\n\n  reset() {\n    this._resetElementAttributes(this._element, 'overflow');\n\n    this._resetElementAttributes(this._element, 'paddingRight');\n\n    this._resetElementAttributes(SELECTOR_FIXED_CONTENT, 'paddingRight');\n\n    this._resetElementAttributes(SELECTOR_STICKY_CONTENT, 'marginRight');\n  }\n\n  _saveInitialAttribute(element, styleProp) {\n    const actualValue = element.style[styleProp];\n\n    if (actualValue) {\n      Manipulator.setDataAttribute(element, styleProp, actualValue);\n    }\n  }\n\n  _resetElementAttributes(selector, styleProp) {\n    const manipulationCallBack = element => {\n      const value = Manipulator.getDataAttribute(element, styleProp);\n\n      if (typeof value === 'undefined') {\n        element.style.removeProperty(styleProp);\n      } else {\n        Manipulator.removeDataAttribute(element, styleProp);\n        element.style[styleProp] = value;\n      }\n    };\n\n    this._applyManipulationCallback(selector, manipulationCallBack);\n  }\n\n  _applyManipulationCallback(selector, callBack) {\n    if (isElement(selector)) {\n      callBack(selector);\n    } else {\n      SelectorEngine.find(selector, this._element).forEach(callBack);\n    }\n  }\n\n  isOverflowing() {\n    return this.getWidth() > 0;\n  }\n\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): util/backdrop.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\nconst Default$6 = {\n  isVisible: true,\n  // if false, we use the backdrop helper without adding any element to the dom\n  isAnimated: false,\n  rootElement: 'body',\n  // give the choice to place backdrop under different elements\n  clickCallback: null\n};\nconst DefaultType$6 = {\n  isVisible: 'boolean',\n  isAnimated: 'boolean',\n  rootElement: '(element|string)',\n  clickCallback: '(function|null)'\n};\nconst NAME$7 = 'backdrop';\nconst CLASS_NAME_BACKDROP = 'modal-backdrop';\nconst CLASS_NAME_FADE$5 = 'fade';\nconst CLASS_NAME_SHOW$6 = 'show';\nconst EVENT_MOUSEDOWN = `mousedown.bs.${NAME$7}`;\n\nclass Backdrop {\n  constructor(config) {\n    this._config = this._getConfig(config);\n    this._isAppended = false;\n    this._element = null;\n  }\n\n  show(callback) {\n    if (!this._config.isVisible) {\n      execute(callback);\n      return;\n    }\n\n    this._append();\n\n    if (this._config.isAnimated) {\n      reflow(this._getElement());\n    }\n\n    this._getElement().classList.add(CLASS_NAME_SHOW$6);\n\n    this._emulateAnimation(() => {\n      execute(callback);\n    });\n  }\n\n  hide(callback) {\n    if (!this._config.isVisible) {\n      execute(callback);\n      return;\n    }\n\n    this._getElement().classList.remove(CLASS_NAME_SHOW$6);\n\n    this._emulateAnimation(() => {\n      this.dispose();\n      execute(callback);\n    });\n  } // Private\n\n\n  _getElement() {\n    if (!this._element) {\n      const backdrop = document.createElement('div');\n      backdrop.className = CLASS_NAME_BACKDROP;\n\n      if (this._config.isAnimated) {\n        backdrop.classList.add(CLASS_NAME_FADE$5);\n      }\n\n      this._element = backdrop;\n    }\n\n    return this._element;\n  }\n\n  _getConfig(config) {\n    config = { ...Default$6,\n      ...(typeof config === 'object' ? config : {})\n    }; // use getElement() with the default \"body\" to get a fresh Element on each instantiation\n\n    config.rootElement = getElement(config.rootElement);\n    typeCheckConfig(NAME$7, config, DefaultType$6);\n    return config;\n  }\n\n  _append() {\n    if (this._isAppended) {\n      return;\n    }\n\n    this._config.rootElement.appendChild(this._getElement());\n\n    EventHandler.on(this._getElement(), EVENT_MOUSEDOWN, () => {\n      execute(this._config.clickCallback);\n    });\n    this._isAppended = true;\n  }\n\n  dispose() {\n    if (!this._isAppended) {\n      return;\n    }\n\n    EventHandler.off(this._element, EVENT_MOUSEDOWN);\n\n    this._element.remove();\n\n    this._isAppended = false;\n  }\n\n  _emulateAnimation(callback) {\n    executeAfterTransition(callback, this._getElement(), this._config.isAnimated);\n  }\n\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): modal.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$6 = 'modal';\nconst DATA_KEY$6 = 'bs.modal';\nconst EVENT_KEY$6 = `.${DATA_KEY$6}`;\nconst DATA_API_KEY$3 = '.data-api';\nconst ESCAPE_KEY$1 = 'Escape';\nconst Default$5 = {\n  backdrop: true,\n  keyboard: true,\n  focus: true\n};\nconst DefaultType$5 = {\n  backdrop: '(boolean|string)',\n  keyboard: 'boolean',\n  focus: 'boolean'\n};\nconst EVENT_HIDE$3 = `hide${EVENT_KEY$6}`;\nconst EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY$6}`;\nconst EVENT_HIDDEN$3 = `hidden${EVENT_KEY$6}`;\nconst EVENT_SHOW$3 = `show${EVENT_KEY$6}`;\nconst EVENT_SHOWN$3 = `shown${EVENT_KEY$6}`;\nconst EVENT_FOCUSIN$2 = `focusin${EVENT_KEY$6}`;\nconst EVENT_RESIZE = `resize${EVENT_KEY$6}`;\nconst EVENT_CLICK_DISMISS$2 = `click.dismiss${EVENT_KEY$6}`;\nconst EVENT_KEYDOWN_DISMISS$1 = `keydown.dismiss${EVENT_KEY$6}`;\nconst EVENT_MOUSEUP_DISMISS = `mouseup.dismiss${EVENT_KEY$6}`;\nconst EVENT_MOUSEDOWN_DISMISS = `mousedown.dismiss${EVENT_KEY$6}`;\nconst EVENT_CLICK_DATA_API$2 = `click${EVENT_KEY$6}${DATA_API_KEY$3}`;\nconst CLASS_NAME_OPEN = 'modal-open';\nconst CLASS_NAME_FADE$4 = 'fade';\nconst CLASS_NAME_SHOW$5 = 'show';\nconst CLASS_NAME_STATIC = 'modal-static';\nconst SELECTOR_DIALOG = '.modal-dialog';\nconst SELECTOR_MODAL_BODY = '.modal-body';\nconst SELECTOR_DATA_TOGGLE$2 = '[data-bs-toggle=\"modal\"]';\nconst SELECTOR_DATA_DISMISS$2 = '[data-bs-dismiss=\"modal\"]';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Modal extends BaseComponent {\n  constructor(element, config) {\n    super(element);\n    this._config = this._getConfig(config);\n    this._dialog = SelectorEngine.findOne(SELECTOR_DIALOG, this._element);\n    this._backdrop = this._initializeBackDrop();\n    this._isShown = false;\n    this._ignoreBackdropClick = false;\n    this._isTransitioning = false;\n    this._scrollBar = new ScrollBarHelper();\n  } // Getters\n\n\n  static get Default() {\n    return Default$5;\n  }\n\n  static get NAME() {\n    return NAME$6;\n  } // Public\n\n\n  toggle(relatedTarget) {\n    return this._isShown ? this.hide() : this.show(relatedTarget);\n  }\n\n  show(relatedTarget) {\n    if (this._isShown || this._isTransitioning) {\n      return;\n    }\n\n    const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$3, {\n      relatedTarget\n    });\n\n    if (showEvent.defaultPrevented) {\n      return;\n    }\n\n    this._isShown = true;\n\n    if (this._isAnimated()) {\n      this._isTransitioning = true;\n    }\n\n    this._scrollBar.hide();\n\n    document.body.classList.add(CLASS_NAME_OPEN);\n\n    this._adjustDialog();\n\n    this._setEscapeEvent();\n\n    this._setResizeEvent();\n\n    EventHandler.on(this._element, EVENT_CLICK_DISMISS$2, SELECTOR_DATA_DISMISS$2, event => this.hide(event));\n    EventHandler.on(this._dialog, EVENT_MOUSEDOWN_DISMISS, () => {\n      EventHandler.one(this._element, EVENT_MOUSEUP_DISMISS, event => {\n        if (event.target === this._element) {\n          this._ignoreBackdropClick = true;\n        }\n      });\n    });\n\n    this._showBackdrop(() => this._showElement(relatedTarget));\n  }\n\n  hide(event) {\n    if (event && ['A', 'AREA'].includes(event.target.tagName)) {\n      event.preventDefault();\n    }\n\n    if (!this._isShown || this._isTransitioning) {\n      return;\n    }\n\n    const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$3);\n\n    if (hideEvent.defaultPrevented) {\n      return;\n    }\n\n    this._isShown = false;\n\n    const isAnimated = this._isAnimated();\n\n    if (isAnimated) {\n      this._isTransitioning = true;\n    }\n\n    this._setEscapeEvent();\n\n    this._setResizeEvent();\n\n    EventHandler.off(document, EVENT_FOCUSIN$2);\n\n    this._element.classList.remove(CLASS_NAME_SHOW$5);\n\n    EventHandler.off(this._element, EVENT_CLICK_DISMISS$2);\n    EventHandler.off(this._dialog, EVENT_MOUSEDOWN_DISMISS);\n\n    this._queueCallback(() => this._hideModal(), this._element, isAnimated);\n  }\n\n  dispose() {\n    [window, this._dialog].forEach(htmlElement => EventHandler.off(htmlElement, EVENT_KEY$6));\n\n    this._backdrop.dispose();\n\n    super.dispose();\n    /**\n     * `document` has 2 events `EVENT_FOCUSIN` and `EVENT_CLICK_DATA_API`\n     * Do not move `document` in `htmlElements` array\n     * It will remove `EVENT_CLICK_DATA_API` event that should remain\n     */\n\n    EventHandler.off(document, EVENT_FOCUSIN$2);\n  }\n\n  handleUpdate() {\n    this._adjustDialog();\n  } // Private\n\n\n  _initializeBackDrop() {\n    return new Backdrop({\n      isVisible: Boolean(this._config.backdrop),\n      // 'static' option will be translated to true, and booleans will keep their value\n      isAnimated: this._isAnimated()\n    });\n  }\n\n  _getConfig(config) {\n    config = { ...Default$5,\n      ...Manipulator.getDataAttributes(this._element),\n      ...(typeof config === 'object' ? config : {})\n    };\n    typeCheckConfig(NAME$6, config, DefaultType$5);\n    return config;\n  }\n\n  _showElement(relatedTarget) {\n    const isAnimated = this._isAnimated();\n\n    const modalBody = SelectorEngine.findOne(SELECTOR_MODAL_BODY, this._dialog);\n\n    if (!this._element.parentNode || this._element.parentNode.nodeType !== Node.ELEMENT_NODE) {\n      // Don't move modal's DOM position\n      document.body.appendChild(this._element);\n    }\n\n    this._element.style.display = 'block';\n\n    this._element.removeAttribute('aria-hidden');\n\n    this._element.setAttribute('aria-modal', true);\n\n    this._element.setAttribute('role', 'dialog');\n\n    this._element.scrollTop = 0;\n\n    if (modalBody) {\n      modalBody.scrollTop = 0;\n    }\n\n    if (isAnimated) {\n      reflow(this._element);\n    }\n\n    this._element.classList.add(CLASS_NAME_SHOW$5);\n\n    if (this._config.focus) {\n      this._enforceFocus();\n    }\n\n    const transitionComplete = () => {\n      if (this._config.focus) {\n        this._element.focus();\n      }\n\n      this._isTransitioning = false;\n      EventHandler.trigger(this._element, EVENT_SHOWN$3, {\n        relatedTarget\n      });\n    };\n\n    this._queueCallback(transitionComplete, this._dialog, isAnimated);\n  }\n\n  _enforceFocus() {\n    EventHandler.off(document, EVENT_FOCUSIN$2); // guard against infinite focus loop\n\n    EventHandler.on(document, EVENT_FOCUSIN$2, event => {\n      if (document !== event.target && this._element !== event.target && !this._element.contains(event.target)) {\n        this._element.focus();\n      }\n    });\n  }\n\n  _setEscapeEvent() {\n    if (this._isShown) {\n      EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS$1, event => {\n        if (this._config.keyboard && event.key === ESCAPE_KEY$1) {\n          event.preventDefault();\n          this.hide();\n        } else if (!this._config.keyboard && event.key === ESCAPE_KEY$1) {\n          this._triggerBackdropTransition();\n        }\n      });\n    } else {\n      EventHandler.off(this._element, EVENT_KEYDOWN_DISMISS$1);\n    }\n  }\n\n  _setResizeEvent() {\n    if (this._isShown) {\n      EventHandler.on(window, EVENT_RESIZE, () => this._adjustDialog());\n    } else {\n      EventHandler.off(window, EVENT_RESIZE);\n    }\n  }\n\n  _hideModal() {\n    this._element.style.display = 'none';\n\n    this._element.setAttribute('aria-hidden', true);\n\n    this._element.removeAttribute('aria-modal');\n\n    this._element.removeAttribute('role');\n\n    this._isTransitioning = false;\n\n    this._backdrop.hide(() => {\n      document.body.classList.remove(CLASS_NAME_OPEN);\n\n      this._resetAdjustments();\n\n      this._scrollBar.reset();\n\n      EventHandler.trigger(this._element, EVENT_HIDDEN$3);\n    });\n  }\n\n  _showBackdrop(callback) {\n    EventHandler.on(this._element, EVENT_CLICK_DISMISS$2, event => {\n      if (this._ignoreBackdropClick) {\n        this._ignoreBackdropClick = false;\n        return;\n      }\n\n      if (event.target !== event.currentTarget) {\n        return;\n      }\n\n      if (this._config.backdrop === true) {\n        this.hide();\n      } else if (this._config.backdrop === 'static') {\n        this._triggerBackdropTransition();\n      }\n    });\n\n    this._backdrop.show(callback);\n  }\n\n  _isAnimated() {\n    return this._element.classList.contains(CLASS_NAME_FADE$4);\n  }\n\n  _triggerBackdropTransition() {\n    const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED);\n\n    if (hideEvent.defaultPrevented) {\n      return;\n    }\n\n    const {\n      classList,\n      scrollHeight,\n      style\n    } = this._element;\n    const isModalOverflowing = scrollHeight > document.documentElement.clientHeight; // return if the following background transition hasn't yet completed\n\n    if (!isModalOverflowing && style.overflowY === 'hidden' || classList.contains(CLASS_NAME_STATIC)) {\n      return;\n    }\n\n    if (!isModalOverflowing) {\n      style.overflowY = 'hidden';\n    }\n\n    classList.add(CLASS_NAME_STATIC);\n\n    this._queueCallback(() => {\n      classList.remove(CLASS_NAME_STATIC);\n\n      if (!isModalOverflowing) {\n        this._queueCallback(() => {\n          style.overflowY = '';\n        }, this._dialog);\n      }\n    }, this._dialog);\n\n    this._element.focus();\n  } // ----------------------------------------------------------------------\n  // the following methods are used to handle overflowing modals\n  // ----------------------------------------------------------------------\n\n\n  _adjustDialog() {\n    const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;\n\n    const scrollbarWidth = this._scrollBar.getWidth();\n\n    const isBodyOverflowing = scrollbarWidth > 0;\n\n    if (!isBodyOverflowing && isModalOverflowing && !isRTL() || isBodyOverflowing && !isModalOverflowing && isRTL()) {\n      this._element.style.paddingLeft = `${scrollbarWidth}px`;\n    }\n\n    if (isBodyOverflowing && !isModalOverflowing && !isRTL() || !isBodyOverflowing && isModalOverflowing && isRTL()) {\n      this._element.style.paddingRight = `${scrollbarWidth}px`;\n    }\n  }\n\n  _resetAdjustments() {\n    this._element.style.paddingLeft = '';\n    this._element.style.paddingRight = '';\n  } // Static\n\n\n  static jQueryInterface(config, relatedTarget) {\n    return this.each(function () {\n      const data = Modal.getOrCreateInstance(this, config);\n\n      if (typeof config !== 'string') {\n        return;\n      }\n\n      if (typeof data[config] === 'undefined') {\n        throw new TypeError(`No method named \"${config}\"`);\n      }\n\n      data[config](relatedTarget);\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$2, SELECTOR_DATA_TOGGLE$2, function (event) {\n  const target = getElementFromSelector(this);\n\n  if (['A', 'AREA'].includes(this.tagName)) {\n    event.preventDefault();\n  }\n\n  EventHandler.one(target, EVENT_SHOW$3, showEvent => {\n    if (showEvent.defaultPrevented) {\n      // only register focus restorer if modal will actually get shown\n      return;\n    }\n\n    EventHandler.one(target, EVENT_HIDDEN$3, () => {\n      if (isVisible(this)) {\n        this.focus();\n      }\n    });\n  });\n  const data = Modal.getOrCreateInstance(target);\n  data.toggle(this);\n});\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Modal to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Modal);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): offcanvas.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$5 = 'offcanvas';\nconst DATA_KEY$5 = 'bs.offcanvas';\nconst EVENT_KEY$5 = `.${DATA_KEY$5}`;\nconst DATA_API_KEY$2 = '.data-api';\nconst EVENT_LOAD_DATA_API$1 = `load${EVENT_KEY$5}${DATA_API_KEY$2}`;\nconst ESCAPE_KEY = 'Escape';\nconst Default$4 = {\n  backdrop: true,\n  keyboard: true,\n  scroll: false\n};\nconst DefaultType$4 = {\n  backdrop: 'boolean',\n  keyboard: 'boolean',\n  scroll: 'boolean'\n};\nconst CLASS_NAME_SHOW$4 = 'show';\nconst OPEN_SELECTOR = '.offcanvas.show';\nconst EVENT_SHOW$2 = `show${EVENT_KEY$5}`;\nconst EVENT_SHOWN$2 = `shown${EVENT_KEY$5}`;\nconst EVENT_HIDE$2 = `hide${EVENT_KEY$5}`;\nconst EVENT_HIDDEN$2 = `hidden${EVENT_KEY$5}`;\nconst EVENT_FOCUSIN$1 = `focusin${EVENT_KEY$5}`;\nconst EVENT_CLICK_DATA_API$1 = `click${EVENT_KEY$5}${DATA_API_KEY$2}`;\nconst EVENT_CLICK_DISMISS$1 = `click.dismiss${EVENT_KEY$5}`;\nconst EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY$5}`;\nconst SELECTOR_DATA_DISMISS$1 = '[data-bs-dismiss=\"offcanvas\"]';\nconst SELECTOR_DATA_TOGGLE$1 = '[data-bs-toggle=\"offcanvas\"]';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Offcanvas extends BaseComponent {\n  constructor(element, config) {\n    super(element);\n    this._config = this._getConfig(config);\n    this._isShown = false;\n    this._backdrop = this._initializeBackDrop();\n\n    this._addEventListeners();\n  } // Getters\n\n\n  static get NAME() {\n    return NAME$5;\n  }\n\n  static get Default() {\n    return Default$4;\n  } // Public\n\n\n  toggle(relatedTarget) {\n    return this._isShown ? this.hide() : this.show(relatedTarget);\n  }\n\n  show(relatedTarget) {\n    if (this._isShown) {\n      return;\n    }\n\n    const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$2, {\n      relatedTarget\n    });\n\n    if (showEvent.defaultPrevented) {\n      return;\n    }\n\n    this._isShown = true;\n    this._element.style.visibility = 'visible';\n\n    this._backdrop.show();\n\n    if (!this._config.scroll) {\n      new ScrollBarHelper().hide();\n\n      this._enforceFocusOnElement(this._element);\n    }\n\n    this._element.removeAttribute('aria-hidden');\n\n    this._element.setAttribute('aria-modal', true);\n\n    this._element.setAttribute('role', 'dialog');\n\n    this._element.classList.add(CLASS_NAME_SHOW$4);\n\n    const completeCallBack = () => {\n      EventHandler.trigger(this._element, EVENT_SHOWN$2, {\n        relatedTarget\n      });\n    };\n\n    this._queueCallback(completeCallBack, this._element, true);\n  }\n\n  hide() {\n    if (!this._isShown) {\n      return;\n    }\n\n    const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$2);\n\n    if (hideEvent.defaultPrevented) {\n      return;\n    }\n\n    EventHandler.off(document, EVENT_FOCUSIN$1);\n\n    this._element.blur();\n\n    this._isShown = false;\n\n    this._element.classList.remove(CLASS_NAME_SHOW$4);\n\n    this._backdrop.hide();\n\n    const completeCallback = () => {\n      this._element.setAttribute('aria-hidden', true);\n\n      this._element.removeAttribute('aria-modal');\n\n      this._element.removeAttribute('role');\n\n      this._element.style.visibility = 'hidden';\n\n      if (!this._config.scroll) {\n        new ScrollBarHelper().reset();\n      }\n\n      EventHandler.trigger(this._element, EVENT_HIDDEN$2);\n    };\n\n    this._queueCallback(completeCallback, this._element, true);\n  }\n\n  dispose() {\n    this._backdrop.dispose();\n\n    super.dispose();\n    EventHandler.off(document, EVENT_FOCUSIN$1);\n  } // Private\n\n\n  _getConfig(config) {\n    config = { ...Default$4,\n      ...Manipulator.getDataAttributes(this._element),\n      ...(typeof config === 'object' ? config : {})\n    };\n    typeCheckConfig(NAME$5, config, DefaultType$4);\n    return config;\n  }\n\n  _initializeBackDrop() {\n    return new Backdrop({\n      isVisible: this._config.backdrop,\n      isAnimated: true,\n      rootElement: this._element.parentNode,\n      clickCallback: () => this.hide()\n    });\n  }\n\n  _enforceFocusOnElement(element) {\n    EventHandler.off(document, EVENT_FOCUSIN$1); // guard against infinite focus loop\n\n    EventHandler.on(document, EVENT_FOCUSIN$1, event => {\n      if (document !== event.target && element !== event.target && !element.contains(event.target)) {\n        element.focus();\n      }\n    });\n    element.focus();\n  }\n\n  _addEventListeners() {\n    EventHandler.on(this._element, EVENT_CLICK_DISMISS$1, SELECTOR_DATA_DISMISS$1, () => this.hide());\n    EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS, event => {\n      if (this._config.keyboard && event.key === ESCAPE_KEY) {\n        this.hide();\n      }\n    });\n  } // Static\n\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Offcanvas.getOrCreateInstance(this, config);\n\n      if (typeof config !== 'string') {\n        return;\n      }\n\n      if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n        throw new TypeError(`No method named \"${config}\"`);\n      }\n\n      data[config](this);\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$1, SELECTOR_DATA_TOGGLE$1, function (event) {\n  const target = getElementFromSelector(this);\n\n  if (['A', 'AREA'].includes(this.tagName)) {\n    event.preventDefault();\n  }\n\n  if (isDisabled(this)) {\n    return;\n  }\n\n  EventHandler.one(target, EVENT_HIDDEN$2, () => {\n    // focus on trigger when it is closed\n    if (isVisible(this)) {\n      this.focus();\n    }\n  }); // avoid conflict when clicking a toggler of an offcanvas, while another is open\n\n  const allReadyOpen = SelectorEngine.findOne(OPEN_SELECTOR);\n\n  if (allReadyOpen && allReadyOpen !== target) {\n    Offcanvas.getInstance(allReadyOpen).hide();\n  }\n\n  const data = Offcanvas.getOrCreateInstance(target);\n  data.toggle(this);\n});\nEventHandler.on(window, EVENT_LOAD_DATA_API$1, () => SelectorEngine.find(OPEN_SELECTOR).forEach(el => Offcanvas.getOrCreateInstance(el).show()));\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\ndefineJQueryPlugin(Offcanvas);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): util/sanitizer.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\nconst uriAttrs = new Set(['background', 'cite', 'href', 'itemtype', 'longdesc', 'poster', 'src', 'xlink:href']);\nconst ARIA_ATTRIBUTE_PATTERN = /^aria-[\\w-]*$/i;\n/**\n * A pattern that recognizes a commonly useful subset of URLs that are safe.\n *\n * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts\n */\n\nconst SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file):|[^#&/:?]*(?:[#/?]|$))/i;\n/**\n * A pattern that matches safe data URLs. Only matches image, video and audio types.\n *\n * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts\n */\n\nconst DATA_URL_PATTERN = /^data:(?:image\\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\\/(?:mpeg|mp4|ogg|webm)|audio\\/(?:mp3|oga|ogg|opus));base64,[\\d+/a-z]+=*$/i;\n\nconst allowedAttribute = (attr, allowedAttributeList) => {\n  const attrName = attr.nodeName.toLowerCase();\n\n  if (allowedAttributeList.includes(attrName)) {\n    if (uriAttrs.has(attrName)) {\n      return Boolean(SAFE_URL_PATTERN.test(attr.nodeValue) || DATA_URL_PATTERN.test(attr.nodeValue));\n    }\n\n    return true;\n  }\n\n  const regExp = allowedAttributeList.filter(attrRegex => attrRegex instanceof RegExp); // Check if a regular expression validates the attribute.\n\n  for (let i = 0, len = regExp.length; i < len; i++) {\n    if (regExp[i].test(attrName)) {\n      return true;\n    }\n  }\n\n  return false;\n};\n\nconst DefaultAllowlist = {\n  // Global attributes allowed on any supplied element below.\n  '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],\n  a: ['target', 'href', 'title', 'rel'],\n  area: [],\n  b: [],\n  br: [],\n  col: [],\n  code: [],\n  div: [],\n  em: [],\n  hr: [],\n  h1: [],\n  h2: [],\n  h3: [],\n  h4: [],\n  h5: [],\n  h6: [],\n  i: [],\n  img: ['src', 'srcset', 'alt', 'title', 'width', 'height'],\n  li: [],\n  ol: [],\n  p: [],\n  pre: [],\n  s: [],\n  small: [],\n  span: [],\n  sub: [],\n  sup: [],\n  strong: [],\n  u: [],\n  ul: []\n};\nfunction sanitizeHtml(unsafeHtml, allowList, sanitizeFn) {\n  if (!unsafeHtml.length) {\n    return unsafeHtml;\n  }\n\n  if (sanitizeFn && typeof sanitizeFn === 'function') {\n    return sanitizeFn(unsafeHtml);\n  }\n\n  const domParser = new window.DOMParser();\n  const createdDocument = domParser.parseFromString(unsafeHtml, 'text/html');\n  const allowlistKeys = Object.keys(allowList);\n  const elements = [].concat(...createdDocument.body.querySelectorAll('*'));\n\n  for (let i = 0, len = elements.length; i < len; i++) {\n    const el = elements[i];\n    const elName = el.nodeName.toLowerCase();\n\n    if (!allowlistKeys.includes(elName)) {\n      el.remove();\n      continue;\n    }\n\n    const attributeList = [].concat(...el.attributes);\n    const allowedAttributes = [].concat(allowList['*'] || [], allowList[elName] || []);\n    attributeList.forEach(attr => {\n      if (!allowedAttribute(attr, allowedAttributes)) {\n        el.removeAttribute(attr.nodeName);\n      }\n    });\n  }\n\n  return createdDocument.body.innerHTML;\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): tooltip.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$4 = 'tooltip';\nconst DATA_KEY$4 = 'bs.tooltip';\nconst EVENT_KEY$4 = `.${DATA_KEY$4}`;\nconst CLASS_PREFIX$1 = 'bs-tooltip';\nconst BSCLS_PREFIX_REGEX$1 = new RegExp(`(^|\\\\s)${CLASS_PREFIX$1}\\\\S+`, 'g');\nconst DISALLOWED_ATTRIBUTES = new Set(['sanitize', 'allowList', 'sanitizeFn']);\nconst DefaultType$3 = {\n  animation: 'boolean',\n  template: 'string',\n  title: '(string|element|function)',\n  trigger: 'string',\n  delay: '(number|object)',\n  html: 'boolean',\n  selector: '(string|boolean)',\n  placement: '(string|function)',\n  offset: '(array|string|function)',\n  container: '(string|element|boolean)',\n  fallbackPlacements: 'array',\n  boundary: '(string|element)',\n  customClass: '(string|function)',\n  sanitize: 'boolean',\n  sanitizeFn: '(null|function)',\n  allowList: 'object',\n  popperConfig: '(null|object|function)'\n};\nconst AttachmentMap = {\n  AUTO: 'auto',\n  TOP: 'top',\n  RIGHT: isRTL() ? 'left' : 'right',\n  BOTTOM: 'bottom',\n  LEFT: isRTL() ? 'right' : 'left'\n};\nconst Default$3 = {\n  animation: true,\n  template: '<div class=\"tooltip\" role=\"tooltip\">' + '<div class=\"tooltip-arrow\"></div>' + '<div class=\"tooltip-inner\"></div>' + '</div>',\n  trigger: 'hover focus',\n  title: '',\n  delay: 0,\n  html: false,\n  selector: false,\n  placement: 'top',\n  offset: [0, 0],\n  container: false,\n  fallbackPlacements: ['top', 'right', 'bottom', 'left'],\n  boundary: 'clippingParents',\n  customClass: '',\n  sanitize: true,\n  sanitizeFn: null,\n  allowList: DefaultAllowlist,\n  popperConfig: null\n};\nconst Event$2 = {\n  HIDE: `hide${EVENT_KEY$4}`,\n  HIDDEN: `hidden${EVENT_KEY$4}`,\n  SHOW: `show${EVENT_KEY$4}`,\n  SHOWN: `shown${EVENT_KEY$4}`,\n  INSERTED: `inserted${EVENT_KEY$4}`,\n  CLICK: `click${EVENT_KEY$4}`,\n  FOCUSIN: `focusin${EVENT_KEY$4}`,\n  FOCUSOUT: `focusout${EVENT_KEY$4}`,\n  MOUSEENTER: `mouseenter${EVENT_KEY$4}`,\n  MOUSELEAVE: `mouseleave${EVENT_KEY$4}`\n};\nconst CLASS_NAME_FADE$3 = 'fade';\nconst CLASS_NAME_MODAL = 'modal';\nconst CLASS_NAME_SHOW$3 = 'show';\nconst HOVER_STATE_SHOW = 'show';\nconst HOVER_STATE_OUT = 'out';\nconst SELECTOR_TOOLTIP_INNER = '.tooltip-inner';\nconst TRIGGER_HOVER = 'hover';\nconst TRIGGER_FOCUS = 'focus';\nconst TRIGGER_CLICK = 'click';\nconst TRIGGER_MANUAL = 'manual';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Tooltip extends BaseComponent {\n  constructor(element, config) {\n    if (typeof Popper === 'undefined') {\n      throw new TypeError('Bootstrap\\'s tooltips require Popper (https://popper.js.org)');\n    }\n\n    super(element); // private\n\n    this._isEnabled = true;\n    this._timeout = 0;\n    this._hoverState = '';\n    this._activeTrigger = {};\n    this._popper = null; // Protected\n\n    this._config = this._getConfig(config);\n    this.tip = null;\n\n    this._setListeners();\n  } // Getters\n\n\n  static get Default() {\n    return Default$3;\n  }\n\n  static get NAME() {\n    return NAME$4;\n  }\n\n  static get Event() {\n    return Event$2;\n  }\n\n  static get DefaultType() {\n    return DefaultType$3;\n  } // Public\n\n\n  enable() {\n    this._isEnabled = true;\n  }\n\n  disable() {\n    this._isEnabled = false;\n  }\n\n  toggleEnabled() {\n    this._isEnabled = !this._isEnabled;\n  }\n\n  toggle(event) {\n    if (!this._isEnabled) {\n      return;\n    }\n\n    if (event) {\n      const context = this._initializeOnDelegatedTarget(event);\n\n      context._activeTrigger.click = !context._activeTrigger.click;\n\n      if (context._isWithActiveTrigger()) {\n        context._enter(null, context);\n      } else {\n        context._leave(null, context);\n      }\n    } else {\n      if (this.getTipElement().classList.contains(CLASS_NAME_SHOW$3)) {\n        this._leave(null, this);\n\n        return;\n      }\n\n      this._enter(null, this);\n    }\n  }\n\n  dispose() {\n    clearTimeout(this._timeout);\n    EventHandler.off(this._element.closest(`.${CLASS_NAME_MODAL}`), 'hide.bs.modal', this._hideModalHandler);\n\n    if (this.tip) {\n      this.tip.remove();\n    }\n\n    if (this._popper) {\n      this._popper.destroy();\n    }\n\n    super.dispose();\n  }\n\n  show() {\n    if (this._element.style.display === 'none') {\n      throw new Error('Please use show on visible elements');\n    }\n\n    if (!(this.isWithContent() && this._isEnabled)) {\n      return;\n    }\n\n    const showEvent = EventHandler.trigger(this._element, this.constructor.Event.SHOW);\n    const shadowRoot = findShadowRoot(this._element);\n    const isInTheDom = shadowRoot === null ? this._element.ownerDocument.documentElement.contains(this._element) : shadowRoot.contains(this._element);\n\n    if (showEvent.defaultPrevented || !isInTheDom) {\n      return;\n    }\n\n    const tip = this.getTipElement();\n    const tipId = getUID(this.constructor.NAME);\n    tip.setAttribute('id', tipId);\n\n    this._element.setAttribute('aria-describedby', tipId);\n\n    this.setContent();\n\n    if (this._config.animation) {\n      tip.classList.add(CLASS_NAME_FADE$3);\n    }\n\n    const placement = typeof this._config.placement === 'function' ? this._config.placement.call(this, tip, this._element) : this._config.placement;\n\n    const attachment = this._getAttachment(placement);\n\n    this._addAttachmentClass(attachment);\n\n    const {\n      container\n    } = this._config;\n    Data.set(tip, this.constructor.DATA_KEY, this);\n\n    if (!this._element.ownerDocument.documentElement.contains(this.tip)) {\n      container.appendChild(tip);\n      EventHandler.trigger(this._element, this.constructor.Event.INSERTED);\n    }\n\n    if (this._popper) {\n      this._popper.update();\n    } else {\n      this._popper = Popper.createPopper(this._element, tip, this._getPopperConfig(attachment));\n    }\n\n    tip.classList.add(CLASS_NAME_SHOW$3);\n    const customClass = typeof this._config.customClass === 'function' ? this._config.customClass() : this._config.customClass;\n\n    if (customClass) {\n      tip.classList.add(...customClass.split(' '));\n    } // If this is a touch-enabled device we add extra\n    // empty mouseover listeners to the body's immediate children;\n    // only needed because of broken event delegation on iOS\n    // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n\n\n    if ('ontouchstart' in document.documentElement) {\n      [].concat(...document.body.children).forEach(element => {\n        EventHandler.on(element, 'mouseover', noop);\n      });\n    }\n\n    const complete = () => {\n      const prevHoverState = this._hoverState;\n      this._hoverState = null;\n      EventHandler.trigger(this._element, this.constructor.Event.SHOWN);\n\n      if (prevHoverState === HOVER_STATE_OUT) {\n        this._leave(null, this);\n      }\n    };\n\n    const isAnimated = this.tip.classList.contains(CLASS_NAME_FADE$3);\n\n    this._queueCallback(complete, this.tip, isAnimated);\n  }\n\n  hide() {\n    if (!this._popper) {\n      return;\n    }\n\n    const tip = this.getTipElement();\n\n    const complete = () => {\n      if (this._isWithActiveTrigger()) {\n        return;\n      }\n\n      if (this._hoverState !== HOVER_STATE_SHOW) {\n        tip.remove();\n      }\n\n      this._cleanTipClass();\n\n      this._element.removeAttribute('aria-describedby');\n\n      EventHandler.trigger(this._element, this.constructor.Event.HIDDEN);\n\n      if (this._popper) {\n        this._popper.destroy();\n\n        this._popper = null;\n      }\n    };\n\n    const hideEvent = EventHandler.trigger(this._element, this.constructor.Event.HIDE);\n\n    if (hideEvent.defaultPrevented) {\n      return;\n    }\n\n    tip.classList.remove(CLASS_NAME_SHOW$3); // If this is a touch-enabled device we remove the extra\n    // empty mouseover listeners we added for iOS support\n\n    if ('ontouchstart' in document.documentElement) {\n      [].concat(...document.body.children).forEach(element => EventHandler.off(element, 'mouseover', noop));\n    }\n\n    this._activeTrigger[TRIGGER_CLICK] = false;\n    this._activeTrigger[TRIGGER_FOCUS] = false;\n    this._activeTrigger[TRIGGER_HOVER] = false;\n    const isAnimated = this.tip.classList.contains(CLASS_NAME_FADE$3);\n\n    this._queueCallback(complete, this.tip, isAnimated);\n\n    this._hoverState = '';\n  }\n\n  update() {\n    if (this._popper !== null) {\n      this._popper.update();\n    }\n  } // Protected\n\n\n  isWithContent() {\n    return Boolean(this.getTitle());\n  }\n\n  getTipElement() {\n    if (this.tip) {\n      return this.tip;\n    }\n\n    const element = document.createElement('div');\n    element.innerHTML = this._config.template;\n    this.tip = element.children[0];\n    return this.tip;\n  }\n\n  setContent() {\n    const tip = this.getTipElement();\n    this.setElementContent(SelectorEngine.findOne(SELECTOR_TOOLTIP_INNER, tip), this.getTitle());\n    tip.classList.remove(CLASS_NAME_FADE$3, CLASS_NAME_SHOW$3);\n  }\n\n  setElementContent(element, content) {\n    if (element === null) {\n      return;\n    }\n\n    if (isElement(content)) {\n      content = getElement(content); // content is a DOM node or a jQuery\n\n      if (this._config.html) {\n        if (content.parentNode !== element) {\n          element.innerHTML = '';\n          element.appendChild(content);\n        }\n      } else {\n        element.textContent = content.textContent;\n      }\n\n      return;\n    }\n\n    if (this._config.html) {\n      if (this._config.sanitize) {\n        content = sanitizeHtml(content, this._config.allowList, this._config.sanitizeFn);\n      }\n\n      element.innerHTML = content;\n    } else {\n      element.textContent = content;\n    }\n  }\n\n  getTitle() {\n    let title = this._element.getAttribute('data-bs-original-title');\n\n    if (!title) {\n      title = typeof this._config.title === 'function' ? this._config.title.call(this._element) : this._config.title;\n    }\n\n    return title;\n  }\n\n  updateAttachment(attachment) {\n    if (attachment === 'right') {\n      return 'end';\n    }\n\n    if (attachment === 'left') {\n      return 'start';\n    }\n\n    return attachment;\n  } // Private\n\n\n  _initializeOnDelegatedTarget(event, context) {\n    const dataKey = this.constructor.DATA_KEY;\n    context = context || Data.get(event.delegateTarget, dataKey);\n\n    if (!context) {\n      context = new this.constructor(event.delegateTarget, this._getDelegateConfig());\n      Data.set(event.delegateTarget, dataKey, context);\n    }\n\n    return context;\n  }\n\n  _getOffset() {\n    const {\n      offset\n    } = this._config;\n\n    if (typeof offset === 'string') {\n      return offset.split(',').map(val => Number.parseInt(val, 10));\n    }\n\n    if (typeof offset === 'function') {\n      return popperData => offset(popperData, this._element);\n    }\n\n    return offset;\n  }\n\n  _getPopperConfig(attachment) {\n    const defaultBsPopperConfig = {\n      placement: attachment,\n      modifiers: [{\n        name: 'flip',\n        options: {\n          fallbackPlacements: this._config.fallbackPlacements\n        }\n      }, {\n        name: 'offset',\n        options: {\n          offset: this._getOffset()\n        }\n      }, {\n        name: 'preventOverflow',\n        options: {\n          boundary: this._config.boundary\n        }\n      }, {\n        name: 'arrow',\n        options: {\n          element: `.${this.constructor.NAME}-arrow`\n        }\n      }, {\n        name: 'onChange',\n        enabled: true,\n        phase: 'afterWrite',\n        fn: data => this._handlePopperPlacementChange(data)\n      }],\n      onFirstUpdate: data => {\n        if (data.options.placement !== data.placement) {\n          this._handlePopperPlacementChange(data);\n        }\n      }\n    };\n    return { ...defaultBsPopperConfig,\n      ...(typeof this._config.popperConfig === 'function' ? this._config.popperConfig(defaultBsPopperConfig) : this._config.popperConfig)\n    };\n  }\n\n  _addAttachmentClass(attachment) {\n    this.getTipElement().classList.add(`${CLASS_PREFIX$1}-${this.updateAttachment(attachment)}`);\n  }\n\n  _getAttachment(placement) {\n    return AttachmentMap[placement.toUpperCase()];\n  }\n\n  _setListeners() {\n    const triggers = this._config.trigger.split(' ');\n\n    triggers.forEach(trigger => {\n      if (trigger === 'click') {\n        EventHandler.on(this._element, this.constructor.Event.CLICK, this._config.selector, event => this.toggle(event));\n      } else if (trigger !== TRIGGER_MANUAL) {\n        const eventIn = trigger === TRIGGER_HOVER ? this.constructor.Event.MOUSEENTER : this.constructor.Event.FOCUSIN;\n        const eventOut = trigger === TRIGGER_HOVER ? this.constructor.Event.MOUSELEAVE : this.constructor.Event.FOCUSOUT;\n        EventHandler.on(this._element, eventIn, this._config.selector, event => this._enter(event));\n        EventHandler.on(this._element, eventOut, this._config.selector, event => this._leave(event));\n      }\n    });\n\n    this._hideModalHandler = () => {\n      if (this._element) {\n        this.hide();\n      }\n    };\n\n    EventHandler.on(this._element.closest(`.${CLASS_NAME_MODAL}`), 'hide.bs.modal', this._hideModalHandler);\n\n    if (this._config.selector) {\n      this._config = { ...this._config,\n        trigger: 'manual',\n        selector: ''\n      };\n    } else {\n      this._fixTitle();\n    }\n  }\n\n  _fixTitle() {\n    const title = this._element.getAttribute('title');\n\n    const originalTitleType = typeof this._element.getAttribute('data-bs-original-title');\n\n    if (title || originalTitleType !== 'string') {\n      this._element.setAttribute('data-bs-original-title', title || '');\n\n      if (title && !this._element.getAttribute('aria-label') && !this._element.textContent) {\n        this._element.setAttribute('aria-label', title);\n      }\n\n      this._element.setAttribute('title', '');\n    }\n  }\n\n  _enter(event, context) {\n    context = this._initializeOnDelegatedTarget(event, context);\n\n    if (event) {\n      context._activeTrigger[event.type === 'focusin' ? TRIGGER_FOCUS : TRIGGER_HOVER] = true;\n    }\n\n    if (context.getTipElement().classList.contains(CLASS_NAME_SHOW$3) || context._hoverState === HOVER_STATE_SHOW) {\n      context._hoverState = HOVER_STATE_SHOW;\n      return;\n    }\n\n    clearTimeout(context._timeout);\n    context._hoverState = HOVER_STATE_SHOW;\n\n    if (!context._config.delay || !context._config.delay.show) {\n      context.show();\n      return;\n    }\n\n    context._timeout = setTimeout(() => {\n      if (context._hoverState === HOVER_STATE_SHOW) {\n        context.show();\n      }\n    }, context._config.delay.show);\n  }\n\n  _leave(event, context) {\n    context = this._initializeOnDelegatedTarget(event, context);\n\n    if (event) {\n      context._activeTrigger[event.type === 'focusout' ? TRIGGER_FOCUS : TRIGGER_HOVER] = context._element.contains(event.relatedTarget);\n    }\n\n    if (context._isWithActiveTrigger()) {\n      return;\n    }\n\n    clearTimeout(context._timeout);\n    context._hoverState = HOVER_STATE_OUT;\n\n    if (!context._config.delay || !context._config.delay.hide) {\n      context.hide();\n      return;\n    }\n\n    context._timeout = setTimeout(() => {\n      if (context._hoverState === HOVER_STATE_OUT) {\n        context.hide();\n      }\n    }, context._config.delay.hide);\n  }\n\n  _isWithActiveTrigger() {\n    for (const trigger in this._activeTrigger) {\n      if (this._activeTrigger[trigger]) {\n        return true;\n      }\n    }\n\n    return false;\n  }\n\n  _getConfig(config) {\n    const dataAttributes = Manipulator.getDataAttributes(this._element);\n    Object.keys(dataAttributes).forEach(dataAttr => {\n      if (DISALLOWED_ATTRIBUTES.has(dataAttr)) {\n        delete dataAttributes[dataAttr];\n      }\n    });\n    config = { ...this.constructor.Default,\n      ...dataAttributes,\n      ...(typeof config === 'object' && config ? config : {})\n    };\n    config.container = config.container === false ? document.body : getElement(config.container);\n\n    if (typeof config.delay === 'number') {\n      config.delay = {\n        show: config.delay,\n        hide: config.delay\n      };\n    }\n\n    if (typeof config.title === 'number') {\n      config.title = config.title.toString();\n    }\n\n    if (typeof config.content === 'number') {\n      config.content = config.content.toString();\n    }\n\n    typeCheckConfig(NAME$4, config, this.constructor.DefaultType);\n\n    if (config.sanitize) {\n      config.template = sanitizeHtml(config.template, config.allowList, config.sanitizeFn);\n    }\n\n    return config;\n  }\n\n  _getDelegateConfig() {\n    const config = {};\n\n    if (this._config) {\n      for (const key in this._config) {\n        if (this.constructor.Default[key] !== this._config[key]) {\n          config[key] = this._config[key];\n        }\n      }\n    }\n\n    return config;\n  }\n\n  _cleanTipClass() {\n    const tip = this.getTipElement();\n    const tabClass = tip.getAttribute('class').match(BSCLS_PREFIX_REGEX$1);\n\n    if (tabClass !== null && tabClass.length > 0) {\n      tabClass.map(token => token.trim()).forEach(tClass => tip.classList.remove(tClass));\n    }\n  }\n\n  _handlePopperPlacementChange(popperData) {\n    const {\n      state\n    } = popperData;\n\n    if (!state) {\n      return;\n    }\n\n    this.tip = state.elements.popper;\n\n    this._cleanTipClass();\n\n    this._addAttachmentClass(this._getAttachment(state.placement));\n  } // Static\n\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Tooltip.getOrCreateInstance(this, config);\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config]();\n      }\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Tooltip to jQuery only if jQuery is present\n */\n\n\ndefineJQueryPlugin(Tooltip);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): popover.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$3 = 'popover';\nconst DATA_KEY$3 = 'bs.popover';\nconst EVENT_KEY$3 = `.${DATA_KEY$3}`;\nconst CLASS_PREFIX = 'bs-popover';\nconst BSCLS_PREFIX_REGEX = new RegExp(`(^|\\\\s)${CLASS_PREFIX}\\\\S+`, 'g');\nconst Default$2 = { ...Tooltip.Default,\n  placement: 'right',\n  offset: [0, 8],\n  trigger: 'click',\n  content: '',\n  template: '<div class=\"popover\" role=\"tooltip\">' + '<div class=\"popover-arrow\"></div>' + '<h3 class=\"popover-header\"></h3>' + '<div class=\"popover-body\"></div>' + '</div>'\n};\nconst DefaultType$2 = { ...Tooltip.DefaultType,\n  content: '(string|element|function)'\n};\nconst Event$1 = {\n  HIDE: `hide${EVENT_KEY$3}`,\n  HIDDEN: `hidden${EVENT_KEY$3}`,\n  SHOW: `show${EVENT_KEY$3}`,\n  SHOWN: `shown${EVENT_KEY$3}`,\n  INSERTED: `inserted${EVENT_KEY$3}`,\n  CLICK: `click${EVENT_KEY$3}`,\n  FOCUSIN: `focusin${EVENT_KEY$3}`,\n  FOCUSOUT: `focusout${EVENT_KEY$3}`,\n  MOUSEENTER: `mouseenter${EVENT_KEY$3}`,\n  MOUSELEAVE: `mouseleave${EVENT_KEY$3}`\n};\nconst CLASS_NAME_FADE$2 = 'fade';\nconst CLASS_NAME_SHOW$2 = 'show';\nconst SELECTOR_TITLE = '.popover-header';\nconst SELECTOR_CONTENT = '.popover-body';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Popover extends Tooltip {\n  // Getters\n  static get Default() {\n    return Default$2;\n  }\n\n  static get NAME() {\n    return NAME$3;\n  }\n\n  static get Event() {\n    return Event$1;\n  }\n\n  static get DefaultType() {\n    return DefaultType$2;\n  } // Overrides\n\n\n  isWithContent() {\n    return this.getTitle() || this._getContent();\n  }\n\n  getTipElement() {\n    if (this.tip) {\n      return this.tip;\n    }\n\n    this.tip = super.getTipElement();\n\n    if (!this.getTitle()) {\n      SelectorEngine.findOne(SELECTOR_TITLE, this.tip).remove();\n    }\n\n    if (!this._getContent()) {\n      SelectorEngine.findOne(SELECTOR_CONTENT, this.tip).remove();\n    }\n\n    return this.tip;\n  }\n\n  setContent() {\n    const tip = this.getTipElement(); // we use append for html objects to maintain js events\n\n    this.setElementContent(SelectorEngine.findOne(SELECTOR_TITLE, tip), this.getTitle());\n\n    let content = this._getContent();\n\n    if (typeof content === 'function') {\n      content = content.call(this._element);\n    }\n\n    this.setElementContent(SelectorEngine.findOne(SELECTOR_CONTENT, tip), content);\n    tip.classList.remove(CLASS_NAME_FADE$2, CLASS_NAME_SHOW$2);\n  } // Private\n\n\n  _addAttachmentClass(attachment) {\n    this.getTipElement().classList.add(`${CLASS_PREFIX}-${this.updateAttachment(attachment)}`);\n  }\n\n  _getContent() {\n    return this._element.getAttribute('data-bs-content') || this._config.content;\n  }\n\n  _cleanTipClass() {\n    const tip = this.getTipElement();\n    const tabClass = tip.getAttribute('class').match(BSCLS_PREFIX_REGEX);\n\n    if (tabClass !== null && tabClass.length > 0) {\n      tabClass.map(token => token.trim()).forEach(tClass => tip.classList.remove(tClass));\n    }\n  } // Static\n\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Popover.getOrCreateInstance(this, config);\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config]();\n      }\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Popover to jQuery only if jQuery is present\n */\n\n\ndefineJQueryPlugin(Popover);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): scrollspy.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$2 = 'scrollspy';\nconst DATA_KEY$2 = 'bs.scrollspy';\nconst EVENT_KEY$2 = `.${DATA_KEY$2}`;\nconst DATA_API_KEY$1 = '.data-api';\nconst Default$1 = {\n  offset: 10,\n  method: 'auto',\n  target: ''\n};\nconst DefaultType$1 = {\n  offset: 'number',\n  method: 'string',\n  target: '(string|element)'\n};\nconst EVENT_ACTIVATE = `activate${EVENT_KEY$2}`;\nconst EVENT_SCROLL = `scroll${EVENT_KEY$2}`;\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY$2}${DATA_API_KEY$1}`;\nconst CLASS_NAME_DROPDOWN_ITEM = 'dropdown-item';\nconst CLASS_NAME_ACTIVE$1 = 'active';\nconst SELECTOR_DATA_SPY = '[data-bs-spy=\"scroll\"]';\nconst SELECTOR_NAV_LIST_GROUP$1 = '.nav, .list-group';\nconst SELECTOR_NAV_LINKS = '.nav-link';\nconst SELECTOR_NAV_ITEMS = '.nav-item';\nconst SELECTOR_LIST_ITEMS = '.list-group-item';\nconst SELECTOR_DROPDOWN$1 = '.dropdown';\nconst SELECTOR_DROPDOWN_TOGGLE$1 = '.dropdown-toggle';\nconst METHOD_OFFSET = 'offset';\nconst METHOD_POSITION = 'position';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass ScrollSpy extends BaseComponent {\n  constructor(element, config) {\n    super(element);\n    this._scrollElement = this._element.tagName === 'BODY' ? window : this._element;\n    this._config = this._getConfig(config);\n    this._selector = `${this._config.target} ${SELECTOR_NAV_LINKS}, ${this._config.target} ${SELECTOR_LIST_ITEMS}, ${this._config.target} .${CLASS_NAME_DROPDOWN_ITEM}`;\n    this._offsets = [];\n    this._targets = [];\n    this._activeTarget = null;\n    this._scrollHeight = 0;\n    EventHandler.on(this._scrollElement, EVENT_SCROLL, () => this._process());\n    this.refresh();\n\n    this._process();\n  } // Getters\n\n\n  static get Default() {\n    return Default$1;\n  }\n\n  static get NAME() {\n    return NAME$2;\n  } // Public\n\n\n  refresh() {\n    const autoMethod = this._scrollElement === this._scrollElement.window ? METHOD_OFFSET : METHOD_POSITION;\n    const offsetMethod = this._config.method === 'auto' ? autoMethod : this._config.method;\n    const offsetBase = offsetMethod === METHOD_POSITION ? this._getScrollTop() : 0;\n    this._offsets = [];\n    this._targets = [];\n    this._scrollHeight = this._getScrollHeight();\n    const targets = SelectorEngine.find(this._selector);\n    targets.map(element => {\n      const targetSelector = getSelectorFromElement(element);\n      const target = targetSelector ? SelectorEngine.findOne(targetSelector) : null;\n\n      if (target) {\n        const targetBCR = target.getBoundingClientRect();\n\n        if (targetBCR.width || targetBCR.height) {\n          return [Manipulator[offsetMethod](target).top + offsetBase, targetSelector];\n        }\n      }\n\n      return null;\n    }).filter(item => item).sort((a, b) => a[0] - b[0]).forEach(item => {\n      this._offsets.push(item[0]);\n\n      this._targets.push(item[1]);\n    });\n  }\n\n  dispose() {\n    EventHandler.off(this._scrollElement, EVENT_KEY$2);\n    super.dispose();\n  } // Private\n\n\n  _getConfig(config) {\n    config = { ...Default$1,\n      ...Manipulator.getDataAttributes(this._element),\n      ...(typeof config === 'object' && config ? config : {})\n    };\n\n    if (typeof config.target !== 'string' && isElement(config.target)) {\n      let {\n        id\n      } = config.target;\n\n      if (!id) {\n        id = getUID(NAME$2);\n        config.target.id = id;\n      }\n\n      config.target = `#${id}`;\n    }\n\n    typeCheckConfig(NAME$2, config, DefaultType$1);\n    return config;\n  }\n\n  _getScrollTop() {\n    return this._scrollElement === window ? this._scrollElement.pageYOffset : this._scrollElement.scrollTop;\n  }\n\n  _getScrollHeight() {\n    return this._scrollElement.scrollHeight || Math.max(document.body.scrollHeight, document.documentElement.scrollHeight);\n  }\n\n  _getOffsetHeight() {\n    return this._scrollElement === window ? window.innerHeight : this._scrollElement.getBoundingClientRect().height;\n  }\n\n  _process() {\n    const scrollTop = this._getScrollTop() + this._config.offset;\n\n    const scrollHeight = this._getScrollHeight();\n\n    const maxScroll = this._config.offset + scrollHeight - this._getOffsetHeight();\n\n    if (this._scrollHeight !== scrollHeight) {\n      this.refresh();\n    }\n\n    if (scrollTop >= maxScroll) {\n      const target = this._targets[this._targets.length - 1];\n\n      if (this._activeTarget !== target) {\n        this._activate(target);\n      }\n\n      return;\n    }\n\n    if (this._activeTarget && scrollTop < this._offsets[0] && this._offsets[0] > 0) {\n      this._activeTarget = null;\n\n      this._clear();\n\n      return;\n    }\n\n    for (let i = this._offsets.length; i--;) {\n      const isActiveTarget = this._activeTarget !== this._targets[i] && scrollTop >= this._offsets[i] && (typeof this._offsets[i + 1] === 'undefined' || scrollTop < this._offsets[i + 1]);\n\n      if (isActiveTarget) {\n        this._activate(this._targets[i]);\n      }\n    }\n  }\n\n  _activate(target) {\n    this._activeTarget = target;\n\n    this._clear();\n\n    const queries = this._selector.split(',').map(selector => `${selector}[data-bs-target=\"${target}\"],${selector}[href=\"${target}\"]`);\n\n    const link = SelectorEngine.findOne(queries.join(','));\n\n    if (link.classList.contains(CLASS_NAME_DROPDOWN_ITEM)) {\n      SelectorEngine.findOne(SELECTOR_DROPDOWN_TOGGLE$1, link.closest(SELECTOR_DROPDOWN$1)).classList.add(CLASS_NAME_ACTIVE$1);\n      link.classList.add(CLASS_NAME_ACTIVE$1);\n    } else {\n      // Set triggered link as active\n      link.classList.add(CLASS_NAME_ACTIVE$1);\n      SelectorEngine.parents(link, SELECTOR_NAV_LIST_GROUP$1).forEach(listGroup => {\n        // Set triggered links parents as active\n        // With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor\n        SelectorEngine.prev(listGroup, `${SELECTOR_NAV_LINKS}, ${SELECTOR_LIST_ITEMS}`).forEach(item => item.classList.add(CLASS_NAME_ACTIVE$1)); // Handle special case when .nav-link is inside .nav-item\n\n        SelectorEngine.prev(listGroup, SELECTOR_NAV_ITEMS).forEach(navItem => {\n          SelectorEngine.children(navItem, SELECTOR_NAV_LINKS).forEach(item => item.classList.add(CLASS_NAME_ACTIVE$1));\n        });\n      });\n    }\n\n    EventHandler.trigger(this._scrollElement, EVENT_ACTIVATE, {\n      relatedTarget: target\n    });\n  }\n\n  _clear() {\n    SelectorEngine.find(this._selector).filter(node => node.classList.contains(CLASS_NAME_ACTIVE$1)).forEach(node => node.classList.remove(CLASS_NAME_ACTIVE$1));\n  } // Static\n\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = ScrollSpy.getOrCreateInstance(this, config);\n\n      if (typeof config !== 'string') {\n        return;\n      }\n\n      if (typeof data[config] === 'undefined') {\n        throw new TypeError(`No method named \"${config}\"`);\n      }\n\n      data[config]();\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n  SelectorEngine.find(SELECTOR_DATA_SPY).forEach(spy => new ScrollSpy(spy));\n});\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .ScrollSpy to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(ScrollSpy);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): tab.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$1 = 'tab';\nconst DATA_KEY$1 = 'bs.tab';\nconst EVENT_KEY$1 = `.${DATA_KEY$1}`;\nconst DATA_API_KEY = '.data-api';\nconst EVENT_HIDE$1 = `hide${EVENT_KEY$1}`;\nconst EVENT_HIDDEN$1 = `hidden${EVENT_KEY$1}`;\nconst EVENT_SHOW$1 = `show${EVENT_KEY$1}`;\nconst EVENT_SHOWN$1 = `shown${EVENT_KEY$1}`;\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY$1}${DATA_API_KEY}`;\nconst CLASS_NAME_DROPDOWN_MENU = 'dropdown-menu';\nconst CLASS_NAME_ACTIVE = 'active';\nconst CLASS_NAME_FADE$1 = 'fade';\nconst CLASS_NAME_SHOW$1 = 'show';\nconst SELECTOR_DROPDOWN = '.dropdown';\nconst SELECTOR_NAV_LIST_GROUP = '.nav, .list-group';\nconst SELECTOR_ACTIVE = '.active';\nconst SELECTOR_ACTIVE_UL = ':scope > li > .active';\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"tab\"], [data-bs-toggle=\"pill\"], [data-bs-toggle=\"list\"]';\nconst SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle';\nconst SELECTOR_DROPDOWN_ACTIVE_CHILD = ':scope > .dropdown-menu .active';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Tab extends BaseComponent {\n  // Getters\n  static get NAME() {\n    return NAME$1;\n  } // Public\n\n\n  show() {\n    if (this._element.parentNode && this._element.parentNode.nodeType === Node.ELEMENT_NODE && this._element.classList.contains(CLASS_NAME_ACTIVE)) {\n      return;\n    }\n\n    let previous;\n    const target = getElementFromSelector(this._element);\n\n    const listElement = this._element.closest(SELECTOR_NAV_LIST_GROUP);\n\n    if (listElement) {\n      const itemSelector = listElement.nodeName === 'UL' || listElement.nodeName === 'OL' ? SELECTOR_ACTIVE_UL : SELECTOR_ACTIVE;\n      previous = SelectorEngine.find(itemSelector, listElement);\n      previous = previous[previous.length - 1];\n    }\n\n    const hideEvent = previous ? EventHandler.trigger(previous, EVENT_HIDE$1, {\n      relatedTarget: this._element\n    }) : null;\n    const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$1, {\n      relatedTarget: previous\n    });\n\n    if (showEvent.defaultPrevented || hideEvent !== null && hideEvent.defaultPrevented) {\n      return;\n    }\n\n    this._activate(this._element, listElement);\n\n    const complete = () => {\n      EventHandler.trigger(previous, EVENT_HIDDEN$1, {\n        relatedTarget: this._element\n      });\n      EventHandler.trigger(this._element, EVENT_SHOWN$1, {\n        relatedTarget: previous\n      });\n    };\n\n    if (target) {\n      this._activate(target, target.parentNode, complete);\n    } else {\n      complete();\n    }\n  } // Private\n\n\n  _activate(element, container, callback) {\n    const activeElements = container && (container.nodeName === 'UL' || container.nodeName === 'OL') ? SelectorEngine.find(SELECTOR_ACTIVE_UL, container) : SelectorEngine.children(container, SELECTOR_ACTIVE);\n    const active = activeElements[0];\n    const isTransitioning = callback && active && active.classList.contains(CLASS_NAME_FADE$1);\n\n    const complete = () => this._transitionComplete(element, active, callback);\n\n    if (active && isTransitioning) {\n      active.classList.remove(CLASS_NAME_SHOW$1);\n\n      this._queueCallback(complete, element, true);\n    } else {\n      complete();\n    }\n  }\n\n  _transitionComplete(element, active, callback) {\n    if (active) {\n      active.classList.remove(CLASS_NAME_ACTIVE);\n      const dropdownChild = SelectorEngine.findOne(SELECTOR_DROPDOWN_ACTIVE_CHILD, active.parentNode);\n\n      if (dropdownChild) {\n        dropdownChild.classList.remove(CLASS_NAME_ACTIVE);\n      }\n\n      if (active.getAttribute('role') === 'tab') {\n        active.setAttribute('aria-selected', false);\n      }\n    }\n\n    element.classList.add(CLASS_NAME_ACTIVE);\n\n    if (element.getAttribute('role') === 'tab') {\n      element.setAttribute('aria-selected', true);\n    }\n\n    reflow(element);\n\n    if (element.classList.contains(CLASS_NAME_FADE$1)) {\n      element.classList.add(CLASS_NAME_SHOW$1);\n    }\n\n    let parent = element.parentNode;\n\n    if (parent && parent.nodeName === 'LI') {\n      parent = parent.parentNode;\n    }\n\n    if (parent && parent.classList.contains(CLASS_NAME_DROPDOWN_MENU)) {\n      const dropdownElement = element.closest(SELECTOR_DROPDOWN);\n\n      if (dropdownElement) {\n        SelectorEngine.find(SELECTOR_DROPDOWN_TOGGLE, dropdownElement).forEach(dropdown => dropdown.classList.add(CLASS_NAME_ACTIVE));\n      }\n\n      element.setAttribute('aria-expanded', true);\n    }\n\n    if (callback) {\n      callback();\n    }\n  } // Static\n\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Tab.getOrCreateInstance(this);\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config]();\n      }\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n  if (['A', 'AREA'].includes(this.tagName)) {\n    event.preventDefault();\n  }\n\n  if (isDisabled(this)) {\n    return;\n  }\n\n  const data = Tab.getOrCreateInstance(this);\n  data.show();\n});\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Tab to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Tab);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): toast.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'toast';\nconst DATA_KEY = 'bs.toast';\nconst EVENT_KEY = `.${DATA_KEY}`;\nconst EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY}`;\nconst EVENT_MOUSEOVER = `mouseover${EVENT_KEY}`;\nconst EVENT_MOUSEOUT = `mouseout${EVENT_KEY}`;\nconst EVENT_FOCUSIN = `focusin${EVENT_KEY}`;\nconst EVENT_FOCUSOUT = `focusout${EVENT_KEY}`;\nconst EVENT_HIDE = `hide${EVENT_KEY}`;\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`;\nconst EVENT_SHOW = `show${EVENT_KEY}`;\nconst EVENT_SHOWN = `shown${EVENT_KEY}`;\nconst CLASS_NAME_FADE = 'fade';\nconst CLASS_NAME_HIDE = 'hide';\nconst CLASS_NAME_SHOW = 'show';\nconst CLASS_NAME_SHOWING = 'showing';\nconst DefaultType = {\n  animation: 'boolean',\n  autohide: 'boolean',\n  delay: 'number'\n};\nconst Default = {\n  animation: true,\n  autohide: true,\n  delay: 5000\n};\nconst SELECTOR_DATA_DISMISS = '[data-bs-dismiss=\"toast\"]';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Toast extends BaseComponent {\n  constructor(element, config) {\n    super(element);\n    this._config = this._getConfig(config);\n    this._timeout = null;\n    this._hasMouseInteraction = false;\n    this._hasKeyboardInteraction = false;\n\n    this._setListeners();\n  } // Getters\n\n\n  static get DefaultType() {\n    return DefaultType;\n  }\n\n  static get Default() {\n    return Default;\n  }\n\n  static get NAME() {\n    return NAME;\n  } // Public\n\n\n  show() {\n    const showEvent = EventHandler.trigger(this._element, EVENT_SHOW);\n\n    if (showEvent.defaultPrevented) {\n      return;\n    }\n\n    this._clearTimeout();\n\n    if (this._config.animation) {\n      this._element.classList.add(CLASS_NAME_FADE);\n    }\n\n    const complete = () => {\n      this._element.classList.remove(CLASS_NAME_SHOWING);\n\n      this._element.classList.add(CLASS_NAME_SHOW);\n\n      EventHandler.trigger(this._element, EVENT_SHOWN);\n\n      this._maybeScheduleHide();\n    };\n\n    this._element.classList.remove(CLASS_NAME_HIDE);\n\n    reflow(this._element);\n\n    this._element.classList.add(CLASS_NAME_SHOWING);\n\n    this._queueCallback(complete, this._element, this._config.animation);\n  }\n\n  hide() {\n    if (!this._element.classList.contains(CLASS_NAME_SHOW)) {\n      return;\n    }\n\n    const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE);\n\n    if (hideEvent.defaultPrevented) {\n      return;\n    }\n\n    const complete = () => {\n      this._element.classList.add(CLASS_NAME_HIDE);\n\n      EventHandler.trigger(this._element, EVENT_HIDDEN);\n    };\n\n    this._element.classList.remove(CLASS_NAME_SHOW);\n\n    this._queueCallback(complete, this._element, this._config.animation);\n  }\n\n  dispose() {\n    this._clearTimeout();\n\n    if (this._element.classList.contains(CLASS_NAME_SHOW)) {\n      this._element.classList.remove(CLASS_NAME_SHOW);\n    }\n\n    super.dispose();\n  } // Private\n\n\n  _getConfig(config) {\n    config = { ...Default,\n      ...Manipulator.getDataAttributes(this._element),\n      ...(typeof config === 'object' && config ? config : {})\n    };\n    typeCheckConfig(NAME, config, this.constructor.DefaultType);\n    return config;\n  }\n\n  _maybeScheduleHide() {\n    if (!this._config.autohide) {\n      return;\n    }\n\n    if (this._hasMouseInteraction || this._hasKeyboardInteraction) {\n      return;\n    }\n\n    this._timeout = setTimeout(() => {\n      this.hide();\n    }, this._config.delay);\n  }\n\n  _onInteraction(event, isInteracting) {\n    switch (event.type) {\n      case 'mouseover':\n      case 'mouseout':\n        this._hasMouseInteraction = isInteracting;\n        break;\n\n      case 'focusin':\n      case 'focusout':\n        this._hasKeyboardInteraction = isInteracting;\n        break;\n    }\n\n    if (isInteracting) {\n      this._clearTimeout();\n\n      return;\n    }\n\n    const nextElement = event.relatedTarget;\n\n    if (this._element === nextElement || this._element.contains(nextElement)) {\n      return;\n    }\n\n    this._maybeScheduleHide();\n  }\n\n  _setListeners() {\n    EventHandler.on(this._element, EVENT_CLICK_DISMISS, SELECTOR_DATA_DISMISS, () => this.hide());\n    EventHandler.on(this._element, EVENT_MOUSEOVER, event => this._onInteraction(event, true));\n    EventHandler.on(this._element, EVENT_MOUSEOUT, event => this._onInteraction(event, false));\n    EventHandler.on(this._element, EVENT_FOCUSIN, event => this._onInteraction(event, true));\n    EventHandler.on(this._element, EVENT_FOCUSOUT, event => this._onInteraction(event, false));\n  }\n\n  _clearTimeout() {\n    clearTimeout(this._timeout);\n    this._timeout = null;\n  } // Static\n\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Toast.getOrCreateInstance(this, config);\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config](this);\n      }\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Toast to jQuery only if jQuery is present\n */\n\n\ndefineJQueryPlugin(Toast);\n\nexport { Alert, Button, Carousel, Collapse, Dropdown, Modal, Offcanvas, Popover, ScrollSpy, Tab, Toast, Tooltip };\n//# sourceMappingURL=bootstrap.esm.js.map\n"
  },
  {
    "path": "src/sourceDev.WebApp/sitefiles/s1/wwwroot/manifest.json",
    "content": "{\n  \"name\": \"cloudscribe Pwa Demo\",\n  \"short_name\": \"Pwa Demo\",\n  \"description\": \"The most awesome application in the world\",\n  \"icons\": [\n    {\n      \"src\": \"/manifest/apple-touch-icon-60x60.png\",\n      \"sizes\": \"60x60\",\n      \"type\": \"image/png\"\n    },\n    {\n      \"src\": \"/manifest/apple-touch-icon-76x76.png\",\n      \"sizes\": \"76x76\",\n      \"type\": \"image/png\"\n    },\n    {\n      \"src\": \"/manifest/apple-touch-icon-120x120.png\",\n      \"sizes\": \"120x120\",\n      \"type\": \"image/png\"\n    },\n    {\n      \"src\": \"/manifest/apple-touch-icon-152x152.png\",\n      \"sizes\": \"152x152\",\n      \"type\": \"image/png\"\n    },\n    {\n      \"src\": \"/manifest/apple-touch-icon-167x167.png\",\n      \"sizes\": \"167x167\",\n      \"type\": \"image/png\"\n    },\n    {\n      \"src\": \"/manifest/apple-touch-icon-180x180.png\",\n      \"sizes\": \"180x180\",\n      \"type\": \"image/png\"\n    },\n    {\n      \"src\": \"/manifest/pwa-192x192.png\",\n      \"sizes\": \"192x192\",\n      \"type\": \"image/png\"\n    },\n    {\n      \"src\": \"/manifest/pwa-512x512.png\",\n      \"sizes\": \"512x512\",\n      \"type\": \"image/png\"\n    }\n    \n  ],\n  \"display\": \"minimal-ui\",\n  \"start_url\": \"/\"\n}"
  },
  {
    "path": "src/sourceDev.WebApp/sourceDev.WebApp.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\n\n  <PropertyGroup>\n    <TargetFramework>net10.0</TargetFramework>\n  </PropertyGroup>\n\n  <!--\n  <PropertyGroup>\n    <AspNetCoreHostingModel>InProcess</AspNetCoreHostingModel>\n  </PropertyGroup>\n  -->\n\n   <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|AnyCPU'\">\n    <NoWarn>1701;1702;0436</NoWarn>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|AnyCPU'\">\n    <NoWarn>1701;1702;0436</NoWarn>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <None Update=\"wwwroot\\**\\*;Views\\**\\*;Areas\\**\\Views;navigation.xml\">\n      <CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory>\n    </None>\n\n    <Content Remove=\"appsettings.Development.json\" CopyToPublishDirectory=\"Never\" />\n    <Content Remove=\"hosting.json\" CopyToPublishDirectory=\"Never\" />\n    <Content Remove=\"bundleconfig.json\" CopyToPublishDirectory=\"Never\" />\n    <Content Remove=\"wwwroot\\lib\\**\\*\" CopyToPublishDirectory=\"Never\" />\n<!--\n    <Content Include=\"sitefiles\\**\\wwwroot\\**\" CopyToPublishDirectory=\"PreserveNewest\" />\n    <Content Include=\"SharedThemes\\**\\wwwroot\\**\" CopyToPublishDirectory=\"PreserveNewest\" /> -->\n\n  </ItemGroup>\n\n  <ItemGroup>\n    <ProjectReference Include=\"..\\cloudscribe.Core.SimpleContent.CompiledViews.Bootstrap5\\cloudscribe.Core.SimpleContent.CompiledViews.Bootstrap5.csproj\" />\n    <ProjectReference Include=\"..\\cloudscribe.SimpleContent.CompiledViews.Bootstrap5\\cloudscribe.SimpleContent.CompiledViews.Bootstrap5.csproj\" />\n    <ProjectReference Include=\"..\\cloudscribe.SimpleContent.ContentTemplates.Bootstrap5\\cloudscribe.SimpleContent.ContentTemplates.Bootstrap5.csproj\" />\n    <ProjectReference Include=\"..\\cloudscribe.SimpleContent.Storage.EFCore.MySQL\\cloudscribe.SimpleContent.Storage.EFCore.MySQL.csproj\" />\n    <ProjectReference Include=\"..\\cloudscribe.SimpleContent.Storage.EFCore.PostgreSql\\cloudscribe.SimpleContent.Storage.EFCore.PostgreSql.csproj\" />\n    <ProjectReference Include=\"..\\cloudscribe.SimpleContent.Storage.EFCore.SQLite\\cloudscribe.SimpleContent.Storage.EFCore.SQLite.csproj\" />\n    <ProjectReference Include=\"..\\cloudscribe.SimpleContent.Storage.NoDb\\cloudscribe.SimpleContent.Storage.NoDb.csproj\" />\n    <ProjectReference Include=\"..\\cloudscribe.SimpleContent.Storage.EFCore.Common\\cloudscribe.SimpleContent.Storage.EFCore.Common.csproj\" />\n    <ProjectReference Include=\"..\\cloudscribe.SimpleContent.Storage.EFCore.MSSQL\\cloudscribe.SimpleContent.Storage.EFCore.MSSQL.csproj\" />\n    <ProjectReference Include=\"..\\cloudscribe.SimpleContent.MetaWeblog\\cloudscribe.SimpleContent.MetaWeblog.csproj\" />\n    <ProjectReference Include=\"..\\cloudscribe.SimpleContent.Syndication\\cloudscribe.SimpleContent.Syndication.csproj\" />\n  </ItemGroup>\n\n  <ItemGroup Label=\"Package References\">\n    <PackageReference Include=\"Microsoft.AspNetCore.Mvc.NewtonsoftJson\" Version=\"10.0.0\" />\n\n    <PackageReference Include=\"cloudscribe.Core.Web\" Version=\"10.1.0\" />\n    <PackageReference Include=\"cloudscribe.Core.CompiledViews.Bootstrap5\" Version=\"10.1.0\" />\n    <PackageReference Include=\"cloudscribe.Web.StaticFiles\" Version=\"10.1.0\" />\n\n    <!--<PackageReference Include=\"cloudscribe.Core.Models\" Version=\"5.0.*\" />  --><!-- to resolve downgrade warnings only: remove at v6 -->\n\n    <PackageReference Include=\"cloudscribe.Core.Storage.NoDb\" Version=\"10.1.0\" />\n    <PackageReference Include=\"cloudscribe.Core.Storage.EFCore.SQLite\" Version=\"10.1.0\" />\n    <PackageReference Include=\"cloudscribe.Core.Storage.EFCore.MSSQL\" Version=\"10.1.0\" />\n    <PackageReference Include=\"cloudscribe.Core.Storage.EFCore.MySql\" Version=\"10.1.0\" />\n    <PackageReference Include=\"cloudscribe.Core.Storage.EFCore.PostgreSql\" Version=\"10.1.0\" />\n\n    <PackageReference Include=\"cloudscribe.Logging.Web\" Version=\"10.1.0\" />\n    <PackageReference Include=\"cloudscribe.Logging.NoDb\" Version=\"10.1.0\" />\n    <PackageReference Include=\"cloudscribe.Logging.EFCore.SQLite\" Version=\"10.1.0\" />\n    <PackageReference Include=\"cloudscribe.Logging.EFCore.MSSQL\" Version=\"10.1.0\" />\n    <PackageReference Include=\"cloudscribe.Logging.EFCore.MySql\" Version=\"10.1.0\" />\n    <PackageReference Include=\"cloudscribe.Logging.EFCore.PostgreSql\" Version=\"10.1.0\" />\n    <PackageReference Include=\"cloudscribe.Web.Localization\" Version=\"10.1.0\" />\n  </ItemGroup>\n\n</Project>\n"
  },
  {
    "path": "src/sourceDev.WebApp/wwwroot/css/bootstrap.css",
    "content": "@charset \"UTF-8\";\n/*!\n * Bootstrap v5.1.3 (https://getbootstrap.com/)\n * Copyright 2011-2021 The Bootstrap Authors\n * Copyright 2011-2021 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n:root {\n  --bs-blue: #0d6efd;\n  --bs-indigo: #6610f2;\n  --bs-purple: #6f42c1;\n  --bs-pink: #d63384;\n  --bs-red: #dc3545;\n  --bs-orange: #fd7e14;\n  --bs-yellow: #ffc107;\n  --bs-green: #198754;\n  --bs-teal: #20c997;\n  --bs-cyan: #0dcaf0;\n  --bs-white: #fff;\n  --bs-gray: #6c757d;\n  --bs-gray-dark: #343a40;\n  --bs-gray-100: #f8f9fa;\n  --bs-gray-200: #e9ecef;\n  --bs-gray-300: #dee2e6;\n  --bs-gray-400: #ced4da;\n  --bs-gray-500: #adb5bd;\n  --bs-gray-600: #6c757d;\n  --bs-gray-700: #495057;\n  --bs-gray-800: #343a40;\n  --bs-gray-900: #212529;\n  --bs-primary: #0d6efd;\n  --bs-secondary: #6c757d;\n  --bs-success: #198754;\n  --bs-info: #0dcaf0;\n  --bs-warning: #ffc107;\n  --bs-danger: #dc3545;\n  --bs-light: #f8f9fa;\n  --bs-dark: #212529;\n  --bs-primary-rgb: 13, 110, 253;\n  --bs-secondary-rgb: 108, 117, 125;\n  --bs-success-rgb: 25, 135, 84;\n  --bs-info-rgb: 13, 202, 240;\n  --bs-warning-rgb: 255, 193, 7;\n  --bs-danger-rgb: 220, 53, 69;\n  --bs-light-rgb: 248, 249, 250;\n  --bs-dark-rgb: 33, 37, 41;\n  --bs-white-rgb: 255, 255, 255;\n  --bs-black-rgb: 0, 0, 0;\n  --bs-body-color-rgb: 33, 37, 41;\n  --bs-body-bg-rgb: 255, 255, 255;\n  --bs-font-sans-serif: system-ui, -apple-system, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, \"Noto Sans\", \"Liberation Sans\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n  --bs-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n  --bs-gradient: linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));\n  --bs-body-font-family: var(--bs-font-sans-serif);\n  --bs-body-font-size: 1rem;\n  --bs-body-font-weight: 400;\n  --bs-body-line-height: 1.5;\n  --bs-body-color: #212529;\n  --bs-body-bg: #fff;\n}\n\n*,\n*::before,\n*::after {\n  box-sizing: border-box;\n}\n\n@media (prefers-reduced-motion: no-preference) {\n  :root {\n    scroll-behavior: smooth;\n  }\n}\n\nbody {\n  margin: 0;\n  font-family: var(--bs-body-font-family);\n  font-size: var(--bs-body-font-size);\n  font-weight: var(--bs-body-font-weight);\n  line-height: var(--bs-body-line-height);\n  color: var(--bs-body-color);\n  text-align: var(--bs-body-text-align);\n  background-color: var(--bs-body-bg);\n  -webkit-text-size-adjust: 100%;\n  -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\n\nhr {\n  margin: 1rem 0;\n  color: inherit;\n  background-color: currentColor;\n  border: 0;\n  opacity: 0.25;\n}\n\nhr:not([size]) {\n  height: 1px;\n}\n\nh6, .h6, h5, .h5, h4, .h4, h3, .h3, h2, .h2, h1, .h1 {\n  margin-top: 0;\n  margin-bottom: 0.5rem;\n  font-weight: 500;\n  line-height: 1.2;\n}\n\nh1, .h1 {\n  font-size: calc(1.375rem + 1.5vw);\n}\n@media (min-width: 1200px) {\n  h1, .h1 {\n    font-size: 2.5rem;\n  }\n}\n\nh2, .h2 {\n  font-size: calc(1.325rem + 0.9vw);\n}\n@media (min-width: 1200px) {\n  h2, .h2 {\n    font-size: 2rem;\n  }\n}\n\nh3, .h3 {\n  font-size: calc(1.3rem + 0.6vw);\n}\n@media (min-width: 1200px) {\n  h3, .h3 {\n    font-size: 1.75rem;\n  }\n}\n\nh4, .h4 {\n  font-size: calc(1.275rem + 0.3vw);\n}\n@media (min-width: 1200px) {\n  h4, .h4 {\n    font-size: 1.5rem;\n  }\n}\n\nh5, .h5 {\n  font-size: 1.25rem;\n}\n\nh6, .h6 {\n  font-size: 1rem;\n}\n\np {\n  margin-top: 0;\n  margin-bottom: 1rem;\n}\n\nabbr[title],\nabbr[data-bs-original-title] {\n  -webkit-text-decoration: underline dotted;\n  text-decoration: underline dotted;\n  cursor: help;\n  -webkit-text-decoration-skip-ink: none;\n  text-decoration-skip-ink: none;\n}\n\naddress {\n  margin-bottom: 1rem;\n  font-style: normal;\n  line-height: inherit;\n}\n\nol,\nul {\n  padding-left: 2rem;\n}\n\nol,\nul,\ndl {\n  margin-top: 0;\n  margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n  margin-bottom: 0;\n}\n\ndt {\n  font-weight: 700;\n}\n\ndd {\n  margin-bottom: 0.5rem;\n  margin-left: 0;\n}\n\nblockquote {\n  margin: 0 0 1rem;\n}\n\nb,\nstrong {\n  font-weight: bolder;\n}\n\nsmall, .small {\n  font-size: 0.875em;\n}\n\nmark, .mark {\n  padding: 0.2em;\n  background-color: #fcf8e3;\n}\n\nsub,\nsup {\n  position: relative;\n  font-size: 0.75em;\n  line-height: 0;\n  vertical-align: baseline;\n}\n\nsub {\n  bottom: -0.25em;\n}\n\nsup {\n  top: -0.5em;\n}\n\na {\n  color: #0d6efd;\n  text-decoration: underline;\n}\na:hover {\n  color: #0a58ca;\n}\n\na:not([href]):not([class]), a:not([href]):not([class]):hover {\n  color: inherit;\n  text-decoration: none;\n}\n\npre,\ncode,\nkbd,\nsamp {\n  font-family: var(--bs-font-monospace);\n  font-size: 1em;\n  direction: ltr /* rtl:ignore */;\n  unicode-bidi: bidi-override;\n}\n\npre {\n  display: block;\n  margin-top: 0;\n  margin-bottom: 1rem;\n  overflow: auto;\n  font-size: 0.875em;\n}\npre code {\n  font-size: inherit;\n  color: inherit;\n  word-break: normal;\n}\n\ncode {\n  font-size: 0.875em;\n  color: #d63384;\n  word-wrap: break-word;\n}\na > code {\n  color: inherit;\n}\n\nkbd {\n  padding: 0.2rem 0.4rem;\n  font-size: 0.875em;\n  color: #fff;\n  background-color: #212529;\n  border-radius: 0.2rem;\n}\nkbd kbd {\n  padding: 0;\n  font-size: 1em;\n  font-weight: 700;\n}\n\nfigure {\n  margin: 0 0 1rem;\n}\n\nimg,\nsvg {\n  vertical-align: middle;\n}\n\ntable {\n  caption-side: bottom;\n  border-collapse: collapse;\n}\n\ncaption {\n  padding-top: 0.5rem;\n  padding-bottom: 0.5rem;\n  color: #6c757d;\n  text-align: left;\n}\n\nth {\n  text-align: inherit;\n  text-align: -webkit-match-parent;\n}\n\nthead,\ntbody,\ntfoot,\ntr,\ntd,\nth {\n  border-color: inherit;\n  border-style: solid;\n  border-width: 0;\n}\n\nlabel {\n  display: inline-block;\n}\n\nbutton {\n  border-radius: 0;\n}\n\nbutton:focus:not(:focus-visible) {\n  outline: 0;\n}\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n  margin: 0;\n  font-family: inherit;\n  font-size: inherit;\n  line-height: inherit;\n}\n\nbutton,\nselect {\n  text-transform: none;\n}\n\n[role=button] {\n  cursor: pointer;\n}\n\nselect {\n  word-wrap: normal;\n}\nselect:disabled {\n  opacity: 1;\n}\n\n[list]::-webkit-calendar-picker-indicator {\n  display: none;\n}\n\nbutton,\n[type=button],\n[type=reset],\n[type=submit] {\n  -webkit-appearance: button;\n}\nbutton:not(:disabled),\n[type=button]:not(:disabled),\n[type=reset]:not(:disabled),\n[type=submit]:not(:disabled) {\n  cursor: pointer;\n}\n\n::-moz-focus-inner {\n  padding: 0;\n  border-style: none;\n}\n\ntextarea {\n  resize: vertical;\n}\n\nfieldset {\n  min-width: 0;\n  padding: 0;\n  margin: 0;\n  border: 0;\n}\n\nlegend {\n  float: left;\n  width: 100%;\n  padding: 0;\n  margin-bottom: 0.5rem;\n  font-size: calc(1.275rem + 0.3vw);\n  line-height: inherit;\n}\n@media (min-width: 1200px) {\n  legend {\n    font-size: 1.5rem;\n  }\n}\nlegend + * {\n  clear: left;\n}\n\n::-webkit-datetime-edit-fields-wrapper,\n::-webkit-datetime-edit-text,\n::-webkit-datetime-edit-minute,\n::-webkit-datetime-edit-hour-field,\n::-webkit-datetime-edit-day-field,\n::-webkit-datetime-edit-month-field,\n::-webkit-datetime-edit-year-field {\n  padding: 0;\n}\n\n::-webkit-inner-spin-button {\n  height: auto;\n}\n\n[type=search] {\n  outline-offset: -2px;\n  -webkit-appearance: textfield;\n}\n\n/* rtl:raw:\n[type=\"tel\"],\n[type=\"url\"],\n[type=\"email\"],\n[type=\"number\"] {\n  direction: ltr;\n}\n*/\n::-webkit-search-decoration {\n  -webkit-appearance: none;\n}\n\n::-webkit-color-swatch-wrapper {\n  padding: 0;\n}\n\n::-webkit-file-upload-button {\n  font: inherit;\n}\n\n::file-selector-button {\n  font: inherit;\n}\n\n::-webkit-file-upload-button {\n  font: inherit;\n  -webkit-appearance: button;\n}\n\noutput {\n  display: inline-block;\n}\n\niframe {\n  border: 0;\n}\n\nsummary {\n  display: list-item;\n  cursor: pointer;\n}\n\nprogress {\n  vertical-align: baseline;\n}\n\n[hidden] {\n  display: none !important;\n}\n\n.lead {\n  font-size: 1.25rem;\n  font-weight: 300;\n}\n\n.display-1 {\n  font-size: calc(1.625rem + 4.5vw);\n  font-weight: 300;\n  line-height: 1.2;\n}\n@media (min-width: 1200px) {\n  .display-1 {\n    font-size: 5rem;\n  }\n}\n\n.display-2 {\n  font-size: calc(1.575rem + 3.9vw);\n  font-weight: 300;\n  line-height: 1.2;\n}\n@media (min-width: 1200px) {\n  .display-2 {\n    font-size: 4.5rem;\n  }\n}\n\n.display-3 {\n  font-size: calc(1.525rem + 3.3vw);\n  font-weight: 300;\n  line-height: 1.2;\n}\n@media (min-width: 1200px) {\n  .display-3 {\n    font-size: 4rem;\n  }\n}\n\n.display-4 {\n  font-size: calc(1.475rem + 2.7vw);\n  font-weight: 300;\n  line-height: 1.2;\n}\n@media (min-width: 1200px) {\n  .display-4 {\n    font-size: 3.5rem;\n  }\n}\n\n.display-5 {\n  font-size: calc(1.425rem + 2.1vw);\n  font-weight: 300;\n  line-height: 1.2;\n}\n@media (min-width: 1200px) {\n  .display-5 {\n    font-size: 3rem;\n  }\n}\n\n.display-6 {\n  font-size: calc(1.375rem + 1.5vw);\n  font-weight: 300;\n  line-height: 1.2;\n}\n@media (min-width: 1200px) {\n  .display-6 {\n    font-size: 2.5rem;\n  }\n}\n\n.list-unstyled {\n  padding-left: 0;\n  list-style: none;\n}\n\n.list-inline {\n  padding-left: 0;\n  list-style: none;\n}\n\n.list-inline-item {\n  display: inline-block;\n}\n.list-inline-item:not(:last-child) {\n  margin-right: 0.5rem;\n}\n\n.initialism {\n  font-size: 0.875em;\n  text-transform: uppercase;\n}\n\n.blockquote {\n  margin-bottom: 1rem;\n  font-size: 1.25rem;\n}\n.blockquote > :last-child {\n  margin-bottom: 0;\n}\n\n.blockquote-footer {\n  margin-top: -1rem;\n  margin-bottom: 1rem;\n  font-size: 0.875em;\n  color: #6c757d;\n}\n.blockquote-footer::before {\n  content: \"— \";\n}\n\n.img-fluid {\n  max-width: 100%;\n  height: auto;\n}\n\n.img-thumbnail {\n  padding: 0.25rem;\n  background-color: #fff;\n  border: 1px solid #dee2e6;\n  border-radius: 0.25rem;\n  max-width: 100%;\n  height: auto;\n}\n\n.figure {\n  display: inline-block;\n}\n\n.figure-img {\n  margin-bottom: 0.5rem;\n  line-height: 1;\n}\n\n.figure-caption {\n  font-size: 0.875em;\n  color: #6c757d;\n}\n\n.container,\n.container-fluid,\n.container-xxl,\n.container-xl,\n.container-lg,\n.container-md,\n.container-sm {\n  width: 100%;\n  padding-right: var(--bs-gutter-x, 0.75rem);\n  padding-left: var(--bs-gutter-x, 0.75rem);\n  margin-right: auto;\n  margin-left: auto;\n}\n\n@media (min-width: 576px) {\n  .container-sm, .container {\n    max-width: 540px;\n  }\n}\n@media (min-width: 768px) {\n  .container-md, .container-sm, .container {\n    max-width: 720px;\n  }\n}\n@media (min-width: 992px) {\n  .container-lg, .container-md, .container-sm, .container {\n    max-width: 960px;\n  }\n}\n@media (min-width: 1200px) {\n  .container-xl, .container-lg, .container-md, .container-sm, .container {\n    max-width: 1140px;\n  }\n}\n@media (min-width: 1400px) {\n  .container-xxl, .container-xl, .container-lg, .container-md, .container-sm, .container {\n    max-width: 1320px;\n  }\n}\n.row {\n  --bs-gutter-x: 1.5rem;\n  --bs-gutter-y: 0;\n  display: flex;\n  flex-wrap: wrap;\n  margin-top: calc(-1 * var(--bs-gutter-y));\n  margin-right: calc(-0.5 * var(--bs-gutter-x));\n  margin-left: calc(-0.5 * var(--bs-gutter-x));\n}\n.row > * {\n  flex-shrink: 0;\n  width: 100%;\n  max-width: 100%;\n  padding-right: calc(var(--bs-gutter-x) * 0.5);\n  padding-left: calc(var(--bs-gutter-x) * 0.5);\n  margin-top: var(--bs-gutter-y);\n}\n\n.col {\n  flex: 1 0 0%;\n}\n\n.row-cols-auto > * {\n  flex: 0 0 auto;\n  width: auto;\n}\n\n.row-cols-1 > * {\n  flex: 0 0 auto;\n  width: 100%;\n}\n\n.row-cols-2 > * {\n  flex: 0 0 auto;\n  width: 50%;\n}\n\n.row-cols-3 > * {\n  flex: 0 0 auto;\n  width: 33.3333333333%;\n}\n\n.row-cols-4 > * {\n  flex: 0 0 auto;\n  width: 25%;\n}\n\n.row-cols-5 > * {\n  flex: 0 0 auto;\n  width: 20%;\n}\n\n.row-cols-6 > * {\n  flex: 0 0 auto;\n  width: 16.6666666667%;\n}\n\n.col-auto {\n  flex: 0 0 auto;\n  width: auto;\n}\n\n.col-1 {\n  flex: 0 0 auto;\n  width: 8.33333333%;\n}\n\n.col-2 {\n  flex: 0 0 auto;\n  width: 16.66666667%;\n}\n\n.col-3 {\n  flex: 0 0 auto;\n  width: 25%;\n}\n\n.col-4 {\n  flex: 0 0 auto;\n  width: 33.33333333%;\n}\n\n.col-5 {\n  flex: 0 0 auto;\n  width: 41.66666667%;\n}\n\n.col-6 {\n  flex: 0 0 auto;\n  width: 50%;\n}\n\n.col-7 {\n  flex: 0 0 auto;\n  width: 58.33333333%;\n}\n\n.col-8 {\n  flex: 0 0 auto;\n  width: 66.66666667%;\n}\n\n.col-9 {\n  flex: 0 0 auto;\n  width: 75%;\n}\n\n.col-10 {\n  flex: 0 0 auto;\n  width: 83.33333333%;\n}\n\n.col-11 {\n  flex: 0 0 auto;\n  width: 91.66666667%;\n}\n\n.col-12 {\n  flex: 0 0 auto;\n  width: 100%;\n}\n\n.offset-1 {\n  margin-left: 8.33333333%;\n}\n\n.offset-2 {\n  margin-left: 16.66666667%;\n}\n\n.offset-3 {\n  margin-left: 25%;\n}\n\n.offset-4 {\n  margin-left: 33.33333333%;\n}\n\n.offset-5 {\n  margin-left: 41.66666667%;\n}\n\n.offset-6 {\n  margin-left: 50%;\n}\n\n.offset-7 {\n  margin-left: 58.33333333%;\n}\n\n.offset-8 {\n  margin-left: 66.66666667%;\n}\n\n.offset-9 {\n  margin-left: 75%;\n}\n\n.offset-10 {\n  margin-left: 83.33333333%;\n}\n\n.offset-11 {\n  margin-left: 91.66666667%;\n}\n\n.g-0,\n.gx-0 {\n  --bs-gutter-x: 0;\n}\n\n.g-0,\n.gy-0 {\n  --bs-gutter-y: 0;\n}\n\n.g-1,\n.gx-1 {\n  --bs-gutter-x: 0.25rem;\n}\n\n.g-1,\n.gy-1 {\n  --bs-gutter-y: 0.25rem;\n}\n\n.g-2,\n.gx-2 {\n  --bs-gutter-x: 0.5rem;\n}\n\n.g-2,\n.gy-2 {\n  --bs-gutter-y: 0.5rem;\n}\n\n.g-3,\n.gx-3 {\n  --bs-gutter-x: 1rem;\n}\n\n.g-3,\n.gy-3 {\n  --bs-gutter-y: 1rem;\n}\n\n.g-4,\n.gx-4 {\n  --bs-gutter-x: 1.5rem;\n}\n\n.g-4,\n.gy-4 {\n  --bs-gutter-y: 1.5rem;\n}\n\n.g-5,\n.gx-5 {\n  --bs-gutter-x: 3rem;\n}\n\n.g-5,\n.gy-5 {\n  --bs-gutter-y: 3rem;\n}\n\n@media (min-width: 576px) {\n  .col-sm {\n    flex: 1 0 0%;\n  }\n\n  .row-cols-sm-auto > * {\n    flex: 0 0 auto;\n    width: auto;\n  }\n\n  .row-cols-sm-1 > * {\n    flex: 0 0 auto;\n    width: 100%;\n  }\n\n  .row-cols-sm-2 > * {\n    flex: 0 0 auto;\n    width: 50%;\n  }\n\n  .row-cols-sm-3 > * {\n    flex: 0 0 auto;\n    width: 33.3333333333%;\n  }\n\n  .row-cols-sm-4 > * {\n    flex: 0 0 auto;\n    width: 25%;\n  }\n\n  .row-cols-sm-5 > * {\n    flex: 0 0 auto;\n    width: 20%;\n  }\n\n  .row-cols-sm-6 > * {\n    flex: 0 0 auto;\n    width: 16.6666666667%;\n  }\n\n  .col-sm-auto {\n    flex: 0 0 auto;\n    width: auto;\n  }\n\n  .col-sm-1 {\n    flex: 0 0 auto;\n    width: 8.33333333%;\n  }\n\n  .col-sm-2 {\n    flex: 0 0 auto;\n    width: 16.66666667%;\n  }\n\n  .col-sm-3 {\n    flex: 0 0 auto;\n    width: 25%;\n  }\n\n  .col-sm-4 {\n    flex: 0 0 auto;\n    width: 33.33333333%;\n  }\n\n  .col-sm-5 {\n    flex: 0 0 auto;\n    width: 41.66666667%;\n  }\n\n  .col-sm-6 {\n    flex: 0 0 auto;\n    width: 50%;\n  }\n\n  .col-sm-7 {\n    flex: 0 0 auto;\n    width: 58.33333333%;\n  }\n\n  .col-sm-8 {\n    flex: 0 0 auto;\n    width: 66.66666667%;\n  }\n\n  .col-sm-9 {\n    flex: 0 0 auto;\n    width: 75%;\n  }\n\n  .col-sm-10 {\n    flex: 0 0 auto;\n    width: 83.33333333%;\n  }\n\n  .col-sm-11 {\n    flex: 0 0 auto;\n    width: 91.66666667%;\n  }\n\n  .col-sm-12 {\n    flex: 0 0 auto;\n    width: 100%;\n  }\n\n  .offset-sm-0 {\n    margin-left: 0;\n  }\n\n  .offset-sm-1 {\n    margin-left: 8.33333333%;\n  }\n\n  .offset-sm-2 {\n    margin-left: 16.66666667%;\n  }\n\n  .offset-sm-3 {\n    margin-left: 25%;\n  }\n\n  .offset-sm-4 {\n    margin-left: 33.33333333%;\n  }\n\n  .offset-sm-5 {\n    margin-left: 41.66666667%;\n  }\n\n  .offset-sm-6 {\n    margin-left: 50%;\n  }\n\n  .offset-sm-7 {\n    margin-left: 58.33333333%;\n  }\n\n  .offset-sm-8 {\n    margin-left: 66.66666667%;\n  }\n\n  .offset-sm-9 {\n    margin-left: 75%;\n  }\n\n  .offset-sm-10 {\n    margin-left: 83.33333333%;\n  }\n\n  .offset-sm-11 {\n    margin-left: 91.66666667%;\n  }\n\n  .g-sm-0,\n.gx-sm-0 {\n    --bs-gutter-x: 0;\n  }\n\n  .g-sm-0,\n.gy-sm-0 {\n    --bs-gutter-y: 0;\n  }\n\n  .g-sm-1,\n.gx-sm-1 {\n    --bs-gutter-x: 0.25rem;\n  }\n\n  .g-sm-1,\n.gy-sm-1 {\n    --bs-gutter-y: 0.25rem;\n  }\n\n  .g-sm-2,\n.gx-sm-2 {\n    --bs-gutter-x: 0.5rem;\n  }\n\n  .g-sm-2,\n.gy-sm-2 {\n    --bs-gutter-y: 0.5rem;\n  }\n\n  .g-sm-3,\n.gx-sm-3 {\n    --bs-gutter-x: 1rem;\n  }\n\n  .g-sm-3,\n.gy-sm-3 {\n    --bs-gutter-y: 1rem;\n  }\n\n  .g-sm-4,\n.gx-sm-4 {\n    --bs-gutter-x: 1.5rem;\n  }\n\n  .g-sm-4,\n.gy-sm-4 {\n    --bs-gutter-y: 1.5rem;\n  }\n\n  .g-sm-5,\n.gx-sm-5 {\n    --bs-gutter-x: 3rem;\n  }\n\n  .g-sm-5,\n.gy-sm-5 {\n    --bs-gutter-y: 3rem;\n  }\n}\n@media (min-width: 768px) {\n  .col-md {\n    flex: 1 0 0%;\n  }\n\n  .row-cols-md-auto > * {\n    flex: 0 0 auto;\n    width: auto;\n  }\n\n  .row-cols-md-1 > * {\n    flex: 0 0 auto;\n    width: 100%;\n  }\n\n  .row-cols-md-2 > * {\n    flex: 0 0 auto;\n    width: 50%;\n  }\n\n  .row-cols-md-3 > * {\n    flex: 0 0 auto;\n    width: 33.3333333333%;\n  }\n\n  .row-cols-md-4 > * {\n    flex: 0 0 auto;\n    width: 25%;\n  }\n\n  .row-cols-md-5 > * {\n    flex: 0 0 auto;\n    width: 20%;\n  }\n\n  .row-cols-md-6 > * {\n    flex: 0 0 auto;\n    width: 16.6666666667%;\n  }\n\n  .col-md-auto {\n    flex: 0 0 auto;\n    width: auto;\n  }\n\n  .col-md-1 {\n    flex: 0 0 auto;\n    width: 8.33333333%;\n  }\n\n  .col-md-2 {\n    flex: 0 0 auto;\n    width: 16.66666667%;\n  }\n\n  .col-md-3 {\n    flex: 0 0 auto;\n    width: 25%;\n  }\n\n  .col-md-4 {\n    flex: 0 0 auto;\n    width: 33.33333333%;\n  }\n\n  .col-md-5 {\n    flex: 0 0 auto;\n    width: 41.66666667%;\n  }\n\n  .col-md-6 {\n    flex: 0 0 auto;\n    width: 50%;\n  }\n\n  .col-md-7 {\n    flex: 0 0 auto;\n    width: 58.33333333%;\n  }\n\n  .col-md-8 {\n    flex: 0 0 auto;\n    width: 66.66666667%;\n  }\n\n  .col-md-9 {\n    flex: 0 0 auto;\n    width: 75%;\n  }\n\n  .col-md-10 {\n    flex: 0 0 auto;\n    width: 83.33333333%;\n  }\n\n  .col-md-11 {\n    flex: 0 0 auto;\n    width: 91.66666667%;\n  }\n\n  .col-md-12 {\n    flex: 0 0 auto;\n    width: 100%;\n  }\n\n  .offset-md-0 {\n    margin-left: 0;\n  }\n\n  .offset-md-1 {\n    margin-left: 8.33333333%;\n  }\n\n  .offset-md-2 {\n    margin-left: 16.66666667%;\n  }\n\n  .offset-md-3 {\n    margin-left: 25%;\n  }\n\n  .offset-md-4 {\n    margin-left: 33.33333333%;\n  }\n\n  .offset-md-5 {\n    margin-left: 41.66666667%;\n  }\n\n  .offset-md-6 {\n    margin-left: 50%;\n  }\n\n  .offset-md-7 {\n    margin-left: 58.33333333%;\n  }\n\n  .offset-md-8 {\n    margin-left: 66.66666667%;\n  }\n\n  .offset-md-9 {\n    margin-left: 75%;\n  }\n\n  .offset-md-10 {\n    margin-left: 83.33333333%;\n  }\n\n  .offset-md-11 {\n    margin-left: 91.66666667%;\n  }\n\n  .g-md-0,\n.gx-md-0 {\n    --bs-gutter-x: 0;\n  }\n\n  .g-md-0,\n.gy-md-0 {\n    --bs-gutter-y: 0;\n  }\n\n  .g-md-1,\n.gx-md-1 {\n    --bs-gutter-x: 0.25rem;\n  }\n\n  .g-md-1,\n.gy-md-1 {\n    --bs-gutter-y: 0.25rem;\n  }\n\n  .g-md-2,\n.gx-md-2 {\n    --bs-gutter-x: 0.5rem;\n  }\n\n  .g-md-2,\n.gy-md-2 {\n    --bs-gutter-y: 0.5rem;\n  }\n\n  .g-md-3,\n.gx-md-3 {\n    --bs-gutter-x: 1rem;\n  }\n\n  .g-md-3,\n.gy-md-3 {\n    --bs-gutter-y: 1rem;\n  }\n\n  .g-md-4,\n.gx-md-4 {\n    --bs-gutter-x: 1.5rem;\n  }\n\n  .g-md-4,\n.gy-md-4 {\n    --bs-gutter-y: 1.5rem;\n  }\n\n  .g-md-5,\n.gx-md-5 {\n    --bs-gutter-x: 3rem;\n  }\n\n  .g-md-5,\n.gy-md-5 {\n    --bs-gutter-y: 3rem;\n  }\n}\n@media (min-width: 992px) {\n  .col-lg {\n    flex: 1 0 0%;\n  }\n\n  .row-cols-lg-auto > * {\n    flex: 0 0 auto;\n    width: auto;\n  }\n\n  .row-cols-lg-1 > * {\n    flex: 0 0 auto;\n    width: 100%;\n  }\n\n  .row-cols-lg-2 > * {\n    flex: 0 0 auto;\n    width: 50%;\n  }\n\n  .row-cols-lg-3 > * {\n    flex: 0 0 auto;\n    width: 33.3333333333%;\n  }\n\n  .row-cols-lg-4 > * {\n    flex: 0 0 auto;\n    width: 25%;\n  }\n\n  .row-cols-lg-5 > * {\n    flex: 0 0 auto;\n    width: 20%;\n  }\n\n  .row-cols-lg-6 > * {\n    flex: 0 0 auto;\n    width: 16.6666666667%;\n  }\n\n  .col-lg-auto {\n    flex: 0 0 auto;\n    width: auto;\n  }\n\n  .col-lg-1 {\n    flex: 0 0 auto;\n    width: 8.33333333%;\n  }\n\n  .col-lg-2 {\n    flex: 0 0 auto;\n    width: 16.66666667%;\n  }\n\n  .col-lg-3 {\n    flex: 0 0 auto;\n    width: 25%;\n  }\n\n  .col-lg-4 {\n    flex: 0 0 auto;\n    width: 33.33333333%;\n  }\n\n  .col-lg-5 {\n    flex: 0 0 auto;\n    width: 41.66666667%;\n  }\n\n  .col-lg-6 {\n    flex: 0 0 auto;\n    width: 50%;\n  }\n\n  .col-lg-7 {\n    flex: 0 0 auto;\n    width: 58.33333333%;\n  }\n\n  .col-lg-8 {\n    flex: 0 0 auto;\n    width: 66.66666667%;\n  }\n\n  .col-lg-9 {\n    flex: 0 0 auto;\n    width: 75%;\n  }\n\n  .col-lg-10 {\n    flex: 0 0 auto;\n    width: 83.33333333%;\n  }\n\n  .col-lg-11 {\n    flex: 0 0 auto;\n    width: 91.66666667%;\n  }\n\n  .col-lg-12 {\n    flex: 0 0 auto;\n    width: 100%;\n  }\n\n  .offset-lg-0 {\n    margin-left: 0;\n  }\n\n  .offset-lg-1 {\n    margin-left: 8.33333333%;\n  }\n\n  .offset-lg-2 {\n    margin-left: 16.66666667%;\n  }\n\n  .offset-lg-3 {\n    margin-left: 25%;\n  }\n\n  .offset-lg-4 {\n    margin-left: 33.33333333%;\n  }\n\n  .offset-lg-5 {\n    margin-left: 41.66666667%;\n  }\n\n  .offset-lg-6 {\n    margin-left: 50%;\n  }\n\n  .offset-lg-7 {\n    margin-left: 58.33333333%;\n  }\n\n  .offset-lg-8 {\n    margin-left: 66.66666667%;\n  }\n\n  .offset-lg-9 {\n    margin-left: 75%;\n  }\n\n  .offset-lg-10 {\n    margin-left: 83.33333333%;\n  }\n\n  .offset-lg-11 {\n    margin-left: 91.66666667%;\n  }\n\n  .g-lg-0,\n.gx-lg-0 {\n    --bs-gutter-x: 0;\n  }\n\n  .g-lg-0,\n.gy-lg-0 {\n    --bs-gutter-y: 0;\n  }\n\n  .g-lg-1,\n.gx-lg-1 {\n    --bs-gutter-x: 0.25rem;\n  }\n\n  .g-lg-1,\n.gy-lg-1 {\n    --bs-gutter-y: 0.25rem;\n  }\n\n  .g-lg-2,\n.gx-lg-2 {\n    --bs-gutter-x: 0.5rem;\n  }\n\n  .g-lg-2,\n.gy-lg-2 {\n    --bs-gutter-y: 0.5rem;\n  }\n\n  .g-lg-3,\n.gx-lg-3 {\n    --bs-gutter-x: 1rem;\n  }\n\n  .g-lg-3,\n.gy-lg-3 {\n    --bs-gutter-y: 1rem;\n  }\n\n  .g-lg-4,\n.gx-lg-4 {\n    --bs-gutter-x: 1.5rem;\n  }\n\n  .g-lg-4,\n.gy-lg-4 {\n    --bs-gutter-y: 1.5rem;\n  }\n\n  .g-lg-5,\n.gx-lg-5 {\n    --bs-gutter-x: 3rem;\n  }\n\n  .g-lg-5,\n.gy-lg-5 {\n    --bs-gutter-y: 3rem;\n  }\n}\n@media (min-width: 1200px) {\n  .col-xl {\n    flex: 1 0 0%;\n  }\n\n  .row-cols-xl-auto > * {\n    flex: 0 0 auto;\n    width: auto;\n  }\n\n  .row-cols-xl-1 > * {\n    flex: 0 0 auto;\n    width: 100%;\n  }\n\n  .row-cols-xl-2 > * {\n    flex: 0 0 auto;\n    width: 50%;\n  }\n\n  .row-cols-xl-3 > * {\n    flex: 0 0 auto;\n    width: 33.3333333333%;\n  }\n\n  .row-cols-xl-4 > * {\n    flex: 0 0 auto;\n    width: 25%;\n  }\n\n  .row-cols-xl-5 > * {\n    flex: 0 0 auto;\n    width: 20%;\n  }\n\n  .row-cols-xl-6 > * {\n    flex: 0 0 auto;\n    width: 16.6666666667%;\n  }\n\n  .col-xl-auto {\n    flex: 0 0 auto;\n    width: auto;\n  }\n\n  .col-xl-1 {\n    flex: 0 0 auto;\n    width: 8.33333333%;\n  }\n\n  .col-xl-2 {\n    flex: 0 0 auto;\n    width: 16.66666667%;\n  }\n\n  .col-xl-3 {\n    flex: 0 0 auto;\n    width: 25%;\n  }\n\n  .col-xl-4 {\n    flex: 0 0 auto;\n    width: 33.33333333%;\n  }\n\n  .col-xl-5 {\n    flex: 0 0 auto;\n    width: 41.66666667%;\n  }\n\n  .col-xl-6 {\n    flex: 0 0 auto;\n    width: 50%;\n  }\n\n  .col-xl-7 {\n    flex: 0 0 auto;\n    width: 58.33333333%;\n  }\n\n  .col-xl-8 {\n    flex: 0 0 auto;\n    width: 66.66666667%;\n  }\n\n  .col-xl-9 {\n    flex: 0 0 auto;\n    width: 75%;\n  }\n\n  .col-xl-10 {\n    flex: 0 0 auto;\n    width: 83.33333333%;\n  }\n\n  .col-xl-11 {\n    flex: 0 0 auto;\n    width: 91.66666667%;\n  }\n\n  .col-xl-12 {\n    flex: 0 0 auto;\n    width: 100%;\n  }\n\n  .offset-xl-0 {\n    margin-left: 0;\n  }\n\n  .offset-xl-1 {\n    margin-left: 8.33333333%;\n  }\n\n  .offset-xl-2 {\n    margin-left: 16.66666667%;\n  }\n\n  .offset-xl-3 {\n    margin-left: 25%;\n  }\n\n  .offset-xl-4 {\n    margin-left: 33.33333333%;\n  }\n\n  .offset-xl-5 {\n    margin-left: 41.66666667%;\n  }\n\n  .offset-xl-6 {\n    margin-left: 50%;\n  }\n\n  .offset-xl-7 {\n    margin-left: 58.33333333%;\n  }\n\n  .offset-xl-8 {\n    margin-left: 66.66666667%;\n  }\n\n  .offset-xl-9 {\n    margin-left: 75%;\n  }\n\n  .offset-xl-10 {\n    margin-left: 83.33333333%;\n  }\n\n  .offset-xl-11 {\n    margin-left: 91.66666667%;\n  }\n\n  .g-xl-0,\n.gx-xl-0 {\n    --bs-gutter-x: 0;\n  }\n\n  .g-xl-0,\n.gy-xl-0 {\n    --bs-gutter-y: 0;\n  }\n\n  .g-xl-1,\n.gx-xl-1 {\n    --bs-gutter-x: 0.25rem;\n  }\n\n  .g-xl-1,\n.gy-xl-1 {\n    --bs-gutter-y: 0.25rem;\n  }\n\n  .g-xl-2,\n.gx-xl-2 {\n    --bs-gutter-x: 0.5rem;\n  }\n\n  .g-xl-2,\n.gy-xl-2 {\n    --bs-gutter-y: 0.5rem;\n  }\n\n  .g-xl-3,\n.gx-xl-3 {\n    --bs-gutter-x: 1rem;\n  }\n\n  .g-xl-3,\n.gy-xl-3 {\n    --bs-gutter-y: 1rem;\n  }\n\n  .g-xl-4,\n.gx-xl-4 {\n    --bs-gutter-x: 1.5rem;\n  }\n\n  .g-xl-4,\n.gy-xl-4 {\n    --bs-gutter-y: 1.5rem;\n  }\n\n  .g-xl-5,\n.gx-xl-5 {\n    --bs-gutter-x: 3rem;\n  }\n\n  .g-xl-5,\n.gy-xl-5 {\n    --bs-gutter-y: 3rem;\n  }\n}\n@media (min-width: 1400px) {\n  .col-xxl {\n    flex: 1 0 0%;\n  }\n\n  .row-cols-xxl-auto > * {\n    flex: 0 0 auto;\n    width: auto;\n  }\n\n  .row-cols-xxl-1 > * {\n    flex: 0 0 auto;\n    width: 100%;\n  }\n\n  .row-cols-xxl-2 > * {\n    flex: 0 0 auto;\n    width: 50%;\n  }\n\n  .row-cols-xxl-3 > * {\n    flex: 0 0 auto;\n    width: 33.3333333333%;\n  }\n\n  .row-cols-xxl-4 > * {\n    flex: 0 0 auto;\n    width: 25%;\n  }\n\n  .row-cols-xxl-5 > * {\n    flex: 0 0 auto;\n    width: 20%;\n  }\n\n  .row-cols-xxl-6 > * {\n    flex: 0 0 auto;\n    width: 16.6666666667%;\n  }\n\n  .col-xxl-auto {\n    flex: 0 0 auto;\n    width: auto;\n  }\n\n  .col-xxl-1 {\n    flex: 0 0 auto;\n    width: 8.33333333%;\n  }\n\n  .col-xxl-2 {\n    flex: 0 0 auto;\n    width: 16.66666667%;\n  }\n\n  .col-xxl-3 {\n    flex: 0 0 auto;\n    width: 25%;\n  }\n\n  .col-xxl-4 {\n    flex: 0 0 auto;\n    width: 33.33333333%;\n  }\n\n  .col-xxl-5 {\n    flex: 0 0 auto;\n    width: 41.66666667%;\n  }\n\n  .col-xxl-6 {\n    flex: 0 0 auto;\n    width: 50%;\n  }\n\n  .col-xxl-7 {\n    flex: 0 0 auto;\n    width: 58.33333333%;\n  }\n\n  .col-xxl-8 {\n    flex: 0 0 auto;\n    width: 66.66666667%;\n  }\n\n  .col-xxl-9 {\n    flex: 0 0 auto;\n    width: 75%;\n  }\n\n  .col-xxl-10 {\n    flex: 0 0 auto;\n    width: 83.33333333%;\n  }\n\n  .col-xxl-11 {\n    flex: 0 0 auto;\n    width: 91.66666667%;\n  }\n\n  .col-xxl-12 {\n    flex: 0 0 auto;\n    width: 100%;\n  }\n\n  .offset-xxl-0 {\n    margin-left: 0;\n  }\n\n  .offset-xxl-1 {\n    margin-left: 8.33333333%;\n  }\n\n  .offset-xxl-2 {\n    margin-left: 16.66666667%;\n  }\n\n  .offset-xxl-3 {\n    margin-left: 25%;\n  }\n\n  .offset-xxl-4 {\n    margin-left: 33.33333333%;\n  }\n\n  .offset-xxl-5 {\n    margin-left: 41.66666667%;\n  }\n\n  .offset-xxl-6 {\n    margin-left: 50%;\n  }\n\n  .offset-xxl-7 {\n    margin-left: 58.33333333%;\n  }\n\n  .offset-xxl-8 {\n    margin-left: 66.66666667%;\n  }\n\n  .offset-xxl-9 {\n    margin-left: 75%;\n  }\n\n  .offset-xxl-10 {\n    margin-left: 83.33333333%;\n  }\n\n  .offset-xxl-11 {\n    margin-left: 91.66666667%;\n  }\n\n  .g-xxl-0,\n.gx-xxl-0 {\n    --bs-gutter-x: 0;\n  }\n\n  .g-xxl-0,\n.gy-xxl-0 {\n    --bs-gutter-y: 0;\n  }\n\n  .g-xxl-1,\n.gx-xxl-1 {\n    --bs-gutter-x: 0.25rem;\n  }\n\n  .g-xxl-1,\n.gy-xxl-1 {\n    --bs-gutter-y: 0.25rem;\n  }\n\n  .g-xxl-2,\n.gx-xxl-2 {\n    --bs-gutter-x: 0.5rem;\n  }\n\n  .g-xxl-2,\n.gy-xxl-2 {\n    --bs-gutter-y: 0.5rem;\n  }\n\n  .g-xxl-3,\n.gx-xxl-3 {\n    --bs-gutter-x: 1rem;\n  }\n\n  .g-xxl-3,\n.gy-xxl-3 {\n    --bs-gutter-y: 1rem;\n  }\n\n  .g-xxl-4,\n.gx-xxl-4 {\n    --bs-gutter-x: 1.5rem;\n  }\n\n  .g-xxl-4,\n.gy-xxl-4 {\n    --bs-gutter-y: 1.5rem;\n  }\n\n  .g-xxl-5,\n.gx-xxl-5 {\n    --bs-gutter-x: 3rem;\n  }\n\n  .g-xxl-5,\n.gy-xxl-5 {\n    --bs-gutter-y: 3rem;\n  }\n}\n.table {\n  --bs-table-bg: transparent;\n  --bs-table-accent-bg: transparent;\n  --bs-table-striped-color: #212529;\n  --bs-table-striped-bg: rgba(0, 0, 0, 0.05);\n  --bs-table-active-color: #212529;\n  --bs-table-active-bg: rgba(0, 0, 0, 0.1);\n  --bs-table-hover-color: #212529;\n  --bs-table-hover-bg: rgba(0, 0, 0, 0.075);\n  width: 100%;\n  margin-bottom: 1rem;\n  color: #212529;\n  vertical-align: top;\n  border-color: #dee2e6;\n}\n.table > :not(caption) > * > * {\n  padding: 0.5rem 0.5rem;\n  background-color: var(--bs-table-bg);\n  border-bottom-width: 1px;\n  box-shadow: inset 0 0 0 9999px var(--bs-table-accent-bg);\n}\n.table > tbody {\n  vertical-align: inherit;\n}\n.table > thead {\n  vertical-align: bottom;\n}\n.table > :not(:first-child) {\n  border-top: 2px solid currentColor;\n}\n\n.caption-top {\n  caption-side: top;\n}\n\n.table-sm > :not(caption) > * > * {\n  padding: 0.25rem 0.25rem;\n}\n\n.table-bordered > :not(caption) > * {\n  border-width: 1px 0;\n}\n.table-bordered > :not(caption) > * > * {\n  border-width: 0 1px;\n}\n\n.table-borderless > :not(caption) > * > * {\n  border-bottom-width: 0;\n}\n.table-borderless > :not(:first-child) {\n  border-top-width: 0;\n}\n\n.table-striped > tbody > tr:nth-of-type(odd) > * {\n  --bs-table-accent-bg: var(--bs-table-striped-bg);\n  color: var(--bs-table-striped-color);\n}\n\n.table-active {\n  --bs-table-accent-bg: var(--bs-table-active-bg);\n  color: var(--bs-table-active-color);\n}\n\n.table-hover > tbody > tr:hover > * {\n  --bs-table-accent-bg: var(--bs-table-hover-bg);\n  color: var(--bs-table-hover-color);\n}\n\n.table-primary {\n  --bs-table-bg: #cfe2ff;\n  --bs-table-striped-bg: #c5d7f2;\n  --bs-table-striped-color: #000;\n  --bs-table-active-bg: #bacbe6;\n  --bs-table-active-color: #000;\n  --bs-table-hover-bg: #bfd1ec;\n  --bs-table-hover-color: #000;\n  color: #000;\n  border-color: #bacbe6;\n}\n\n.table-secondary {\n  --bs-table-bg: #e2e3e5;\n  --bs-table-striped-bg: #d7d8da;\n  --bs-table-striped-color: #000;\n  --bs-table-active-bg: #cbccce;\n  --bs-table-active-color: #000;\n  --bs-table-hover-bg: #d1d2d4;\n  --bs-table-hover-color: #000;\n  color: #000;\n  border-color: #cbccce;\n}\n\n.table-success {\n  --bs-table-bg: #d1e7dd;\n  --bs-table-striped-bg: #c7dbd2;\n  --bs-table-striped-color: #000;\n  --bs-table-active-bg: #bcd0c7;\n  --bs-table-active-color: #000;\n  --bs-table-hover-bg: #c1d6cc;\n  --bs-table-hover-color: #000;\n  color: #000;\n  border-color: #bcd0c7;\n}\n\n.table-info {\n  --bs-table-bg: #cff4fc;\n  --bs-table-striped-bg: #c5e8ef;\n  --bs-table-striped-color: #000;\n  --bs-table-active-bg: #badce3;\n  --bs-table-active-color: #000;\n  --bs-table-hover-bg: #bfe2e9;\n  --bs-table-hover-color: #000;\n  color: #000;\n  border-color: #badce3;\n}\n\n.table-warning {\n  --bs-table-bg: #fff3cd;\n  --bs-table-striped-bg: #f2e7c3;\n  --bs-table-striped-color: #000;\n  --bs-table-active-bg: #e6dbb9;\n  --bs-table-active-color: #000;\n  --bs-table-hover-bg: #ece1be;\n  --bs-table-hover-color: #000;\n  color: #000;\n  border-color: #e6dbb9;\n}\n\n.table-danger {\n  --bs-table-bg: #f8d7da;\n  --bs-table-striped-bg: #eccccf;\n  --bs-table-striped-color: #000;\n  --bs-table-active-bg: #dfc2c4;\n  --bs-table-active-color: #000;\n  --bs-table-hover-bg: #e5c7ca;\n  --bs-table-hover-color: #000;\n  color: #000;\n  border-color: #dfc2c4;\n}\n\n.table-light {\n  --bs-table-bg: #f8f9fa;\n  --bs-table-striped-bg: #ecedee;\n  --bs-table-striped-color: #000;\n  --bs-table-active-bg: #dfe0e1;\n  --bs-table-active-color: #000;\n  --bs-table-hover-bg: #e5e6e7;\n  --bs-table-hover-color: #000;\n  color: #000;\n  border-color: #dfe0e1;\n}\n\n.table-dark {\n  --bs-table-bg: #212529;\n  --bs-table-striped-bg: #2c3034;\n  --bs-table-striped-color: #fff;\n  --bs-table-active-bg: #373b3e;\n  --bs-table-active-color: #fff;\n  --bs-table-hover-bg: #323539;\n  --bs-table-hover-color: #fff;\n  color: #fff;\n  border-color: #373b3e;\n}\n\n.table-responsive {\n  overflow-x: auto;\n  -webkit-overflow-scrolling: touch;\n}\n\n@media (max-width: 575.98px) {\n  .table-responsive-sm {\n    overflow-x: auto;\n    -webkit-overflow-scrolling: touch;\n  }\n}\n@media (max-width: 767.98px) {\n  .table-responsive-md {\n    overflow-x: auto;\n    -webkit-overflow-scrolling: touch;\n  }\n}\n@media (max-width: 991.98px) {\n  .table-responsive-lg {\n    overflow-x: auto;\n    -webkit-overflow-scrolling: touch;\n  }\n}\n@media (max-width: 1199.98px) {\n  .table-responsive-xl {\n    overflow-x: auto;\n    -webkit-overflow-scrolling: touch;\n  }\n}\n@media (max-width: 1399.98px) {\n  .table-responsive-xxl {\n    overflow-x: auto;\n    -webkit-overflow-scrolling: touch;\n  }\n}\n.form-label {\n  margin-bottom: 0.5rem;\n}\n\n.col-form-label {\n  padding-top: calc(0.375rem + 1px);\n  padding-bottom: calc(0.375rem + 1px);\n  margin-bottom: 0;\n  font-size: inherit;\n  line-height: 1.5;\n}\n\n.col-form-label-lg {\n  padding-top: calc(0.5rem + 1px);\n  padding-bottom: calc(0.5rem + 1px);\n  font-size: 1.25rem;\n}\n\n.col-form-label-sm {\n  padding-top: calc(0.25rem + 1px);\n  padding-bottom: calc(0.25rem + 1px);\n  font-size: 0.875rem;\n}\n\n.form-text {\n  margin-top: 0.25rem;\n  font-size: 0.875em;\n  color: #6c757d;\n}\n\n.form-control {\n  display: block;\n  width: 100%;\n  padding: 0.375rem 0.75rem;\n  font-size: 1rem;\n  font-weight: 400;\n  line-height: 1.5;\n  color: #212529;\n  background-color: #fff;\n  background-clip: padding-box;\n  border: 1px solid #ced4da;\n  -webkit-appearance: none;\n  -moz-appearance: none;\n  appearance: none;\n  border-radius: 0.25rem;\n  transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n  .form-control {\n    transition: none;\n  }\n}\n.form-control[type=file] {\n  overflow: hidden;\n}\n.form-control[type=file]:not(:disabled):not([readonly]) {\n  cursor: pointer;\n}\n.form-control:focus {\n  color: #212529;\n  background-color: #fff;\n  border-color: #86b7fe;\n  outline: 0;\n  box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);\n}\n.form-control::-webkit-date-and-time-value {\n  height: 1.5em;\n}\n.form-control::-moz-placeholder {\n  color: #6c757d;\n  opacity: 1;\n}\n.form-control::placeholder {\n  color: #6c757d;\n  opacity: 1;\n}\n.form-control:disabled, .form-control[readonly] {\n  background-color: #e9ecef;\n  opacity: 1;\n}\n.form-control::-webkit-file-upload-button {\n  padding: 0.375rem 0.75rem;\n  margin: -0.375rem -0.75rem;\n  -webkit-margin-end: 0.75rem;\n  margin-inline-end: 0.75rem;\n  color: #212529;\n  background-color: #e9ecef;\n  pointer-events: none;\n  border-color: inherit;\n  border-style: solid;\n  border-width: 0;\n  border-inline-end-width: 1px;\n  border-radius: 0;\n  -webkit-transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n.form-control::file-selector-button {\n  padding: 0.375rem 0.75rem;\n  margin: -0.375rem -0.75rem;\n  -webkit-margin-end: 0.75rem;\n  margin-inline-end: 0.75rem;\n  color: #212529;\n  background-color: #e9ecef;\n  pointer-events: none;\n  border-color: inherit;\n  border-style: solid;\n  border-width: 0;\n  border-inline-end-width: 1px;\n  border-radius: 0;\n  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n  .form-control::-webkit-file-upload-button {\n    -webkit-transition: none;\n    transition: none;\n  }\n  .form-control::file-selector-button {\n    transition: none;\n  }\n}\n.form-control:hover:not(:disabled):not([readonly])::-webkit-file-upload-button {\n  background-color: #dde0e3;\n}\n.form-control:hover:not(:disabled):not([readonly])::file-selector-button {\n  background-color: #dde0e3;\n}\n.form-control::-webkit-file-upload-button {\n  padding: 0.375rem 0.75rem;\n  margin: -0.375rem -0.75rem;\n  -webkit-margin-end: 0.75rem;\n  margin-inline-end: 0.75rem;\n  color: #212529;\n  background-color: #e9ecef;\n  pointer-events: none;\n  border-color: inherit;\n  border-style: solid;\n  border-width: 0;\n  border-inline-end-width: 1px;\n  border-radius: 0;\n  -webkit-transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n  .form-control::-webkit-file-upload-button {\n    -webkit-transition: none;\n    transition: none;\n  }\n}\n.form-control:hover:not(:disabled):not([readonly])::-webkit-file-upload-button {\n  background-color: #dde0e3;\n}\n\n.form-control-plaintext {\n  display: block;\n  width: 100%;\n  padding: 0.375rem 0;\n  margin-bottom: 0;\n  line-height: 1.5;\n  color: #212529;\n  background-color: transparent;\n  border: solid transparent;\n  border-width: 1px 0;\n}\n.form-control-plaintext.form-control-sm, .form-control-plaintext.form-control-lg {\n  padding-right: 0;\n  padding-left: 0;\n}\n\n.form-control-sm {\n  min-height: calc(1.5em + 0.5rem + 2px);\n  padding: 0.25rem 0.5rem;\n  font-size: 0.875rem;\n  border-radius: 0.2rem;\n}\n.form-control-sm::-webkit-file-upload-button {\n  padding: 0.25rem 0.5rem;\n  margin: -0.25rem -0.5rem;\n  -webkit-margin-end: 0.5rem;\n  margin-inline-end: 0.5rem;\n}\n.form-control-sm::file-selector-button {\n  padding: 0.25rem 0.5rem;\n  margin: -0.25rem -0.5rem;\n  -webkit-margin-end: 0.5rem;\n  margin-inline-end: 0.5rem;\n}\n.form-control-sm::-webkit-file-upload-button {\n  padding: 0.25rem 0.5rem;\n  margin: -0.25rem -0.5rem;\n  -webkit-margin-end: 0.5rem;\n  margin-inline-end: 0.5rem;\n}\n\n.form-control-lg {\n  min-height: calc(1.5em + 1rem + 2px);\n  padding: 0.5rem 1rem;\n  font-size: 1.25rem;\n  border-radius: 0.3rem;\n}\n.form-control-lg::-webkit-file-upload-button {\n  padding: 0.5rem 1rem;\n  margin: -0.5rem -1rem;\n  -webkit-margin-end: 1rem;\n  margin-inline-end: 1rem;\n}\n.form-control-lg::file-selector-button {\n  padding: 0.5rem 1rem;\n  margin: -0.5rem -1rem;\n  -webkit-margin-end: 1rem;\n  margin-inline-end: 1rem;\n}\n.form-control-lg::-webkit-file-upload-button {\n  padding: 0.5rem 1rem;\n  margin: -0.5rem -1rem;\n  -webkit-margin-end: 1rem;\n  margin-inline-end: 1rem;\n}\n\ntextarea.form-control {\n  min-height: calc(1.5em + 0.75rem + 2px);\n}\ntextarea.form-control-sm {\n  min-height: calc(1.5em + 0.5rem + 2px);\n}\ntextarea.form-control-lg {\n  min-height: calc(1.5em + 1rem + 2px);\n}\n\n.form-control-color {\n  width: 3rem;\n  height: auto;\n  padding: 0.375rem;\n}\n.form-control-color:not(:disabled):not([readonly]) {\n  cursor: pointer;\n}\n.form-control-color::-moz-color-swatch {\n  height: 1.5em;\n  border-radius: 0.25rem;\n}\n.form-control-color::-webkit-color-swatch {\n  height: 1.5em;\n  border-radius: 0.25rem;\n}\n\n.form-select {\n  display: block;\n  width: 100%;\n  padding: 0.375rem 2.25rem 0.375rem 0.75rem;\n  -moz-padding-start: calc(0.75rem - 3px);\n  font-size: 1rem;\n  font-weight: 400;\n  line-height: 1.5;\n  color: #212529;\n  background-color: #fff;\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e\");\n  background-repeat: no-repeat;\n  background-position: right 0.75rem center;\n  background-size: 16px 12px;\n  border: 1px solid #ced4da;\n  border-radius: 0.25rem;\n  transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n  -webkit-appearance: none;\n  -moz-appearance: none;\n  appearance: none;\n}\n@media (prefers-reduced-motion: reduce) {\n  .form-select {\n    transition: none;\n  }\n}\n.form-select:focus {\n  border-color: #86b7fe;\n  outline: 0;\n  box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);\n}\n.form-select[multiple], .form-select[size]:not([size=\"1\"]) {\n  padding-right: 0.75rem;\n  background-image: none;\n}\n.form-select:disabled {\n  background-color: #e9ecef;\n}\n.form-select:-moz-focusring {\n  color: transparent;\n  text-shadow: 0 0 0 #212529;\n}\n\n.form-select-sm {\n  padding-top: 0.25rem;\n  padding-bottom: 0.25rem;\n  padding-left: 0.5rem;\n  font-size: 0.875rem;\n  border-radius: 0.2rem;\n}\n\n.form-select-lg {\n  padding-top: 0.5rem;\n  padding-bottom: 0.5rem;\n  padding-left: 1rem;\n  font-size: 1.25rem;\n  border-radius: 0.3rem;\n}\n\n.form-check {\n  display: block;\n  min-height: 1.5rem;\n  padding-left: 1.5em;\n  margin-bottom: 0.125rem;\n}\n.form-check .form-check-input {\n  float: left;\n  margin-left: -1.5em;\n}\n\n.form-check-input {\n  width: 1em;\n  height: 1em;\n  margin-top: 0.25em;\n  vertical-align: top;\n  background-color: #fff;\n  background-repeat: no-repeat;\n  background-position: center;\n  background-size: contain;\n  border: 1px solid rgba(0, 0, 0, 0.25);\n  -webkit-appearance: none;\n  -moz-appearance: none;\n  appearance: none;\n  -webkit-print-color-adjust: exact;\n  color-adjust: exact;\n}\n.form-check-input[type=checkbox] {\n  border-radius: 0.25em;\n}\n.form-check-input[type=radio] {\n  border-radius: 50%;\n}\n.form-check-input:active {\n  filter: brightness(90%);\n}\n.form-check-input:focus {\n  border-color: #86b7fe;\n  outline: 0;\n  box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);\n}\n.form-check-input:checked {\n  background-color: #0d6efd;\n  border-color: #0d6efd;\n}\n.form-check-input:checked[type=checkbox] {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10l3 3l6-6'/%3e%3c/svg%3e\");\n}\n.form-check-input:checked[type=radio] {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='2' fill='%23fff'/%3e%3c/svg%3e\");\n}\n.form-check-input[type=checkbox]:indeterminate {\n  background-color: #0d6efd;\n  border-color: #0d6efd;\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10h8'/%3e%3c/svg%3e\");\n}\n.form-check-input:disabled {\n  pointer-events: none;\n  filter: none;\n  opacity: 0.5;\n}\n.form-check-input[disabled] ~ .form-check-label, .form-check-input:disabled ~ .form-check-label {\n  opacity: 0.5;\n}\n\n.form-switch {\n  padding-left: 2.5em;\n}\n.form-switch .form-check-input {\n  width: 2em;\n  margin-left: -2.5em;\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%280, 0, 0, 0.25%29'/%3e%3c/svg%3e\");\n  background-position: left center;\n  border-radius: 2em;\n  transition: background-position 0.15s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n  .form-switch .form-check-input {\n    transition: none;\n  }\n}\n.form-switch .form-check-input:focus {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%2386b7fe'/%3e%3c/svg%3e\");\n}\n.form-switch .form-check-input:checked {\n  background-position: right center;\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e\");\n}\n\n.form-check-inline {\n  display: inline-block;\n  margin-right: 1rem;\n}\n\n.btn-check {\n  position: absolute;\n  clip: rect(0, 0, 0, 0);\n  pointer-events: none;\n}\n.btn-check[disabled] + .btn, .btn-check:disabled + .btn {\n  pointer-events: none;\n  filter: none;\n  opacity: 0.65;\n}\n\n.form-range {\n  width: 100%;\n  height: 1.5rem;\n  padding: 0;\n  background-color: transparent;\n  -webkit-appearance: none;\n  -moz-appearance: none;\n  appearance: none;\n}\n.form-range:focus {\n  outline: 0;\n}\n.form-range:focus::-webkit-slider-thumb {\n  box-shadow: 0 0 0 1px #fff, 0 0 0 0.25rem rgba(13, 110, 253, 0.25);\n}\n.form-range:focus::-moz-range-thumb {\n  box-shadow: 0 0 0 1px #fff, 0 0 0 0.25rem rgba(13, 110, 253, 0.25);\n}\n.form-range::-moz-focus-outer {\n  border: 0;\n}\n.form-range::-webkit-slider-thumb {\n  width: 1rem;\n  height: 1rem;\n  margin-top: -0.25rem;\n  background-color: #0d6efd;\n  border: 0;\n  border-radius: 1rem;\n  -webkit-transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n  transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n  -webkit-appearance: none;\n  appearance: none;\n}\n@media (prefers-reduced-motion: reduce) {\n  .form-range::-webkit-slider-thumb {\n    -webkit-transition: none;\n    transition: none;\n  }\n}\n.form-range::-webkit-slider-thumb:active {\n  background-color: #b6d4fe;\n}\n.form-range::-webkit-slider-runnable-track {\n  width: 100%;\n  height: 0.5rem;\n  color: transparent;\n  cursor: pointer;\n  background-color: #dee2e6;\n  border-color: transparent;\n  border-radius: 1rem;\n}\n.form-range::-moz-range-thumb {\n  width: 1rem;\n  height: 1rem;\n  background-color: #0d6efd;\n  border: 0;\n  border-radius: 1rem;\n  -moz-transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n  transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n  -moz-appearance: none;\n  appearance: none;\n}\n@media (prefers-reduced-motion: reduce) {\n  .form-range::-moz-range-thumb {\n    -moz-transition: none;\n    transition: none;\n  }\n}\n.form-range::-moz-range-thumb:active {\n  background-color: #b6d4fe;\n}\n.form-range::-moz-range-track {\n  width: 100%;\n  height: 0.5rem;\n  color: transparent;\n  cursor: pointer;\n  background-color: #dee2e6;\n  border-color: transparent;\n  border-radius: 1rem;\n}\n.form-range:disabled {\n  pointer-events: none;\n}\n.form-range:disabled::-webkit-slider-thumb {\n  background-color: #adb5bd;\n}\n.form-range:disabled::-moz-range-thumb {\n  background-color: #adb5bd;\n}\n\n.form-floating {\n  position: relative;\n}\n.form-floating > .form-control,\n.form-floating > .form-select {\n  height: calc(3.5rem + 2px);\n  line-height: 1.25;\n}\n.form-floating > label {\n  position: absolute;\n  top: 0;\n  left: 0;\n  height: 100%;\n  padding: 1rem 0.75rem;\n  pointer-events: none;\n  border: 1px solid transparent;\n  transform-origin: 0 0;\n  transition: opacity 0.1s ease-in-out, transform 0.1s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n  .form-floating > label {\n    transition: none;\n  }\n}\n.form-floating > .form-control {\n  padding: 1rem 0.75rem;\n}\n.form-floating > .form-control::-moz-placeholder {\n  color: transparent;\n}\n.form-floating > .form-control::placeholder {\n  color: transparent;\n}\n.form-floating > .form-control:not(:-moz-placeholder-shown) {\n  padding-top: 1.625rem;\n  padding-bottom: 0.625rem;\n}\n.form-floating > .form-control:focus, .form-floating > .form-control:not(:placeholder-shown) {\n  padding-top: 1.625rem;\n  padding-bottom: 0.625rem;\n}\n.form-floating > .form-control:-webkit-autofill {\n  padding-top: 1.625rem;\n  padding-bottom: 0.625rem;\n}\n.form-floating > .form-select {\n  padding-top: 1.625rem;\n  padding-bottom: 0.625rem;\n}\n.form-floating > .form-control:not(:-moz-placeholder-shown) ~ label {\n  opacity: 0.65;\n  transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);\n}\n.form-floating > .form-control:focus ~ label,\n.form-floating > .form-control:not(:placeholder-shown) ~ label,\n.form-floating > .form-select ~ label {\n  opacity: 0.65;\n  transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);\n}\n.form-floating > .form-control:-webkit-autofill ~ label {\n  opacity: 0.65;\n  transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);\n}\n\n.input-group {\n  position: relative;\n  display: flex;\n  flex-wrap: wrap;\n  align-items: stretch;\n  width: 100%;\n}\n.input-group > .form-control,\n.input-group > .form-select {\n  position: relative;\n  flex: 1 1 auto;\n  width: 1%;\n  min-width: 0;\n}\n.input-group > .form-control:focus,\n.input-group > .form-select:focus {\n  z-index: 3;\n}\n.input-group .btn {\n  position: relative;\n  z-index: 2;\n}\n.input-group .btn:focus {\n  z-index: 3;\n}\n\n.input-group-text {\n  display: flex;\n  align-items: center;\n  padding: 0.375rem 0.75rem;\n  font-size: 1rem;\n  font-weight: 400;\n  line-height: 1.5;\n  color: #212529;\n  text-align: center;\n  white-space: nowrap;\n  background-color: #e9ecef;\n  border: 1px solid #ced4da;\n  border-radius: 0.25rem;\n}\n\n.input-group-lg > .form-control,\n.input-group-lg > .form-select,\n.input-group-lg > .input-group-text,\n.input-group-lg > .btn {\n  padding: 0.5rem 1rem;\n  font-size: 1.25rem;\n  border-radius: 0.3rem;\n}\n\n.input-group-sm > .form-control,\n.input-group-sm > .form-select,\n.input-group-sm > .input-group-text,\n.input-group-sm > .btn {\n  padding: 0.25rem 0.5rem;\n  font-size: 0.875rem;\n  border-radius: 0.2rem;\n}\n\n.input-group-lg > .form-select,\n.input-group-sm > .form-select {\n  padding-right: 3rem;\n}\n\n.input-group:not(.has-validation) > :not(:last-child):not(.dropdown-toggle):not(.dropdown-menu),\n.input-group:not(.has-validation) > .dropdown-toggle:nth-last-child(n+3) {\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n}\n.input-group.has-validation > :nth-last-child(n+3):not(.dropdown-toggle):not(.dropdown-menu),\n.input-group.has-validation > .dropdown-toggle:nth-last-child(n+4) {\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n}\n.input-group > :not(:first-child):not(.dropdown-menu):not(.valid-tooltip):not(.valid-feedback):not(.invalid-tooltip):not(.invalid-feedback) {\n  margin-left: -1px;\n  border-top-left-radius: 0;\n  border-bottom-left-radius: 0;\n}\n\n.valid-feedback {\n  display: none;\n  width: 100%;\n  margin-top: 0.25rem;\n  font-size: 0.875em;\n  color: #198754;\n}\n\n.valid-tooltip {\n  position: absolute;\n  top: 100%;\n  z-index: 5;\n  display: none;\n  max-width: 100%;\n  padding: 0.25rem 0.5rem;\n  margin-top: 0.1rem;\n  font-size: 0.875rem;\n  color: #fff;\n  background-color: rgba(25, 135, 84, 0.9);\n  border-radius: 0.25rem;\n}\n\n.was-validated :valid ~ .valid-feedback,\n.was-validated :valid ~ .valid-tooltip,\n.is-valid ~ .valid-feedback,\n.is-valid ~ .valid-tooltip {\n  display: block;\n}\n\n.was-validated .form-control:valid, .form-control.is-valid {\n  border-color: #198754;\n  padding-right: calc(1.5em + 0.75rem);\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e\");\n  background-repeat: no-repeat;\n  background-position: right calc(0.375em + 0.1875rem) center;\n  background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n.was-validated .form-control:valid:focus, .form-control.is-valid:focus {\n  border-color: #198754;\n  box-shadow: 0 0 0 0.25rem rgba(25, 135, 84, 0.25);\n}\n\n.was-validated textarea.form-control:valid, textarea.form-control.is-valid {\n  padding-right: calc(1.5em + 0.75rem);\n  background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem);\n}\n\n.was-validated .form-select:valid, .form-select.is-valid {\n  border-color: #198754;\n}\n.was-validated .form-select:valid:not([multiple]):not([size]), .was-validated .form-select:valid:not([multiple])[size=\"1\"], .form-select.is-valid:not([multiple]):not([size]), .form-select.is-valid:not([multiple])[size=\"1\"] {\n  padding-right: 4.125rem;\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e\"), url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e\");\n  background-position: right 0.75rem center, center right 2.25rem;\n  background-size: 16px 12px, calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n.was-validated .form-select:valid:focus, .form-select.is-valid:focus {\n  border-color: #198754;\n  box-shadow: 0 0 0 0.25rem rgba(25, 135, 84, 0.25);\n}\n\n.was-validated .form-check-input:valid, .form-check-input.is-valid {\n  border-color: #198754;\n}\n.was-validated .form-check-input:valid:checked, .form-check-input.is-valid:checked {\n  background-color: #198754;\n}\n.was-validated .form-check-input:valid:focus, .form-check-input.is-valid:focus {\n  box-shadow: 0 0 0 0.25rem rgba(25, 135, 84, 0.25);\n}\n.was-validated .form-check-input:valid ~ .form-check-label, .form-check-input.is-valid ~ .form-check-label {\n  color: #198754;\n}\n\n.form-check-inline .form-check-input ~ .valid-feedback {\n  margin-left: 0.5em;\n}\n\n.was-validated .input-group .form-control:valid, .input-group .form-control.is-valid,\n.was-validated .input-group .form-select:valid,\n.input-group .form-select.is-valid {\n  z-index: 1;\n}\n.was-validated .input-group .form-control:valid:focus, .input-group .form-control.is-valid:focus,\n.was-validated .input-group .form-select:valid:focus,\n.input-group .form-select.is-valid:focus {\n  z-index: 3;\n}\n\n.invalid-feedback {\n  display: none;\n  width: 100%;\n  margin-top: 0.25rem;\n  font-size: 0.875em;\n  color: #dc3545;\n}\n\n.invalid-tooltip {\n  position: absolute;\n  top: 100%;\n  z-index: 5;\n  display: none;\n  max-width: 100%;\n  padding: 0.25rem 0.5rem;\n  margin-top: 0.1rem;\n  font-size: 0.875rem;\n  color: #fff;\n  background-color: rgba(220, 53, 69, 0.9);\n  border-radius: 0.25rem;\n}\n\n.was-validated :invalid ~ .invalid-feedback,\n.was-validated :invalid ~ .invalid-tooltip,\n.is-invalid ~ .invalid-feedback,\n.is-invalid ~ .invalid-tooltip {\n  display: block;\n}\n\n.was-validated .form-control:invalid, .form-control.is-invalid {\n  border-color: #dc3545;\n  padding-right: calc(1.5em + 0.75rem);\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e\");\n  background-repeat: no-repeat;\n  background-position: right calc(0.375em + 0.1875rem) center;\n  background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n.was-validated .form-control:invalid:focus, .form-control.is-invalid:focus {\n  border-color: #dc3545;\n  box-shadow: 0 0 0 0.25rem rgba(220, 53, 69, 0.25);\n}\n\n.was-validated textarea.form-control:invalid, textarea.form-control.is-invalid {\n  padding-right: calc(1.5em + 0.75rem);\n  background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem);\n}\n\n.was-validated .form-select:invalid, .form-select.is-invalid {\n  border-color: #dc3545;\n}\n.was-validated .form-select:invalid:not([multiple]):not([size]), .was-validated .form-select:invalid:not([multiple])[size=\"1\"], .form-select.is-invalid:not([multiple]):not([size]), .form-select.is-invalid:not([multiple])[size=\"1\"] {\n  padding-right: 4.125rem;\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e\"), url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e\");\n  background-position: right 0.75rem center, center right 2.25rem;\n  background-size: 16px 12px, calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n.was-validated .form-select:invalid:focus, .form-select.is-invalid:focus {\n  border-color: #dc3545;\n  box-shadow: 0 0 0 0.25rem rgba(220, 53, 69, 0.25);\n}\n\n.was-validated .form-check-input:invalid, .form-check-input.is-invalid {\n  border-color: #dc3545;\n}\n.was-validated .form-check-input:invalid:checked, .form-check-input.is-invalid:checked {\n  background-color: #dc3545;\n}\n.was-validated .form-check-input:invalid:focus, .form-check-input.is-invalid:focus {\n  box-shadow: 0 0 0 0.25rem rgba(220, 53, 69, 0.25);\n}\n.was-validated .form-check-input:invalid ~ .form-check-label, .form-check-input.is-invalid ~ .form-check-label {\n  color: #dc3545;\n}\n\n.form-check-inline .form-check-input ~ .invalid-feedback {\n  margin-left: 0.5em;\n}\n\n.was-validated .input-group .form-control:invalid, .input-group .form-control.is-invalid,\n.was-validated .input-group .form-select:invalid,\n.input-group .form-select.is-invalid {\n  z-index: 2;\n}\n.was-validated .input-group .form-control:invalid:focus, .input-group .form-control.is-invalid:focus,\n.was-validated .input-group .form-select:invalid:focus,\n.input-group .form-select.is-invalid:focus {\n  z-index: 3;\n}\n\n.btn {\n  display: inline-block;\n  font-weight: 400;\n  line-height: 1.5;\n  color: #212529;\n  text-align: center;\n  text-decoration: none;\n  vertical-align: middle;\n  cursor: pointer;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  user-select: none;\n  background-color: transparent;\n  border: 1px solid transparent;\n  padding: 0.375rem 0.75rem;\n  font-size: 1rem;\n  border-radius: 0.25rem;\n  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n  .btn {\n    transition: none;\n  }\n}\n.btn:hover {\n  color: #212529;\n}\n.btn-check:focus + .btn, .btn:focus {\n  outline: 0;\n  box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);\n}\n.btn:disabled, .btn.disabled, fieldset:disabled .btn {\n  pointer-events: none;\n  opacity: 0.65;\n}\n\n.btn-primary {\n  color: #fff;\n  background-color: #0d6efd;\n  border-color: #0d6efd;\n}\n.btn-primary:hover {\n  color: #fff;\n  background-color: #0b5ed7;\n  border-color: #0a58ca;\n}\n.btn-check:focus + .btn-primary, .btn-primary:focus {\n  color: #fff;\n  background-color: #0b5ed7;\n  border-color: #0a58ca;\n  box-shadow: 0 0 0 0.25rem rgba(49, 132, 253, 0.5);\n}\n.btn-check:checked + .btn-primary, .btn-check:active + .btn-primary, .btn-primary:active, .btn-primary.active, .show > .btn-primary.dropdown-toggle {\n  color: #fff;\n  background-color: #0a58ca;\n  border-color: #0a53be;\n}\n.btn-check:checked + .btn-primary:focus, .btn-check:active + .btn-primary:focus, .btn-primary:active:focus, .btn-primary.active:focus, .show > .btn-primary.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.25rem rgba(49, 132, 253, 0.5);\n}\n.btn-primary:disabled, .btn-primary.disabled {\n  color: #fff;\n  background-color: #0d6efd;\n  border-color: #0d6efd;\n}\n\n.btn-secondary {\n  color: #fff;\n  background-color: #6c757d;\n  border-color: #6c757d;\n}\n.btn-secondary:hover {\n  color: #fff;\n  background-color: #5c636a;\n  border-color: #565e64;\n}\n.btn-check:focus + .btn-secondary, .btn-secondary:focus {\n  color: #fff;\n  background-color: #5c636a;\n  border-color: #565e64;\n  box-shadow: 0 0 0 0.25rem rgba(130, 138, 145, 0.5);\n}\n.btn-check:checked + .btn-secondary, .btn-check:active + .btn-secondary, .btn-secondary:active, .btn-secondary.active, .show > .btn-secondary.dropdown-toggle {\n  color: #fff;\n  background-color: #565e64;\n  border-color: #51585e;\n}\n.btn-check:checked + .btn-secondary:focus, .btn-check:active + .btn-secondary:focus, .btn-secondary:active:focus, .btn-secondary.active:focus, .show > .btn-secondary.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.25rem rgba(130, 138, 145, 0.5);\n}\n.btn-secondary:disabled, .btn-secondary.disabled {\n  color: #fff;\n  background-color: #6c757d;\n  border-color: #6c757d;\n}\n\n.btn-success {\n  color: #fff;\n  background-color: #198754;\n  border-color: #198754;\n}\n.btn-success:hover {\n  color: #fff;\n  background-color: #157347;\n  border-color: #146c43;\n}\n.btn-check:focus + .btn-success, .btn-success:focus {\n  color: #fff;\n  background-color: #157347;\n  border-color: #146c43;\n  box-shadow: 0 0 0 0.25rem rgba(60, 153, 110, 0.5);\n}\n.btn-check:checked + .btn-success, .btn-check:active + .btn-success, .btn-success:active, .btn-success.active, .show > .btn-success.dropdown-toggle {\n  color: #fff;\n  background-color: #146c43;\n  border-color: #13653f;\n}\n.btn-check:checked + .btn-success:focus, .btn-check:active + .btn-success:focus, .btn-success:active:focus, .btn-success.active:focus, .show > .btn-success.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.25rem rgba(60, 153, 110, 0.5);\n}\n.btn-success:disabled, .btn-success.disabled {\n  color: #fff;\n  background-color: #198754;\n  border-color: #198754;\n}\n\n.btn-info {\n  color: #000;\n  background-color: #0dcaf0;\n  border-color: #0dcaf0;\n}\n.btn-info:hover {\n  color: #000;\n  background-color: #31d2f2;\n  border-color: #25cff2;\n}\n.btn-check:focus + .btn-info, .btn-info:focus {\n  color: #000;\n  background-color: #31d2f2;\n  border-color: #25cff2;\n  box-shadow: 0 0 0 0.25rem rgba(11, 172, 204, 0.5);\n}\n.btn-check:checked + .btn-info, .btn-check:active + .btn-info, .btn-info:active, .btn-info.active, .show > .btn-info.dropdown-toggle {\n  color: #000;\n  background-color: #3dd5f3;\n  border-color: #25cff2;\n}\n.btn-check:checked + .btn-info:focus, .btn-check:active + .btn-info:focus, .btn-info:active:focus, .btn-info.active:focus, .show > .btn-info.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.25rem rgba(11, 172, 204, 0.5);\n}\n.btn-info:disabled, .btn-info.disabled {\n  color: #000;\n  background-color: #0dcaf0;\n  border-color: #0dcaf0;\n}\n\n.btn-warning {\n  color: #000;\n  background-color: #ffc107;\n  border-color: #ffc107;\n}\n.btn-warning:hover {\n  color: #000;\n  background-color: #ffca2c;\n  border-color: #ffc720;\n}\n.btn-check:focus + .btn-warning, .btn-warning:focus {\n  color: #000;\n  background-color: #ffca2c;\n  border-color: #ffc720;\n  box-shadow: 0 0 0 0.25rem rgba(217, 164, 6, 0.5);\n}\n.btn-check:checked + .btn-warning, .btn-check:active + .btn-warning, .btn-warning:active, .btn-warning.active, .show > .btn-warning.dropdown-toggle {\n  color: #000;\n  background-color: #ffcd39;\n  border-color: #ffc720;\n}\n.btn-check:checked + .btn-warning:focus, .btn-check:active + .btn-warning:focus, .btn-warning:active:focus, .btn-warning.active:focus, .show > .btn-warning.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.25rem rgba(217, 164, 6, 0.5);\n}\n.btn-warning:disabled, .btn-warning.disabled {\n  color: #000;\n  background-color: #ffc107;\n  border-color: #ffc107;\n}\n\n.btn-danger {\n  color: #fff;\n  background-color: #dc3545;\n  border-color: #dc3545;\n}\n.btn-danger:hover {\n  color: #fff;\n  background-color: #bb2d3b;\n  border-color: #b02a37;\n}\n.btn-check:focus + .btn-danger, .btn-danger:focus {\n  color: #fff;\n  background-color: #bb2d3b;\n  border-color: #b02a37;\n  box-shadow: 0 0 0 0.25rem rgba(225, 83, 97, 0.5);\n}\n.btn-check:checked + .btn-danger, .btn-check:active + .btn-danger, .btn-danger:active, .btn-danger.active, .show > .btn-danger.dropdown-toggle {\n  color: #fff;\n  background-color: #b02a37;\n  border-color: #a52834;\n}\n.btn-check:checked + .btn-danger:focus, .btn-check:active + .btn-danger:focus, .btn-danger:active:focus, .btn-danger.active:focus, .show > .btn-danger.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.25rem rgba(225, 83, 97, 0.5);\n}\n.btn-danger:disabled, .btn-danger.disabled {\n  color: #fff;\n  background-color: #dc3545;\n  border-color: #dc3545;\n}\n\n.btn-light {\n  color: #000;\n  background-color: #f8f9fa;\n  border-color: #f8f9fa;\n}\n.btn-light:hover {\n  color: #000;\n  background-color: #f9fafb;\n  border-color: #f9fafb;\n}\n.btn-check:focus + .btn-light, .btn-light:focus {\n  color: #000;\n  background-color: #f9fafb;\n  border-color: #f9fafb;\n  box-shadow: 0 0 0 0.25rem rgba(211, 212, 213, 0.5);\n}\n.btn-check:checked + .btn-light, .btn-check:active + .btn-light, .btn-light:active, .btn-light.active, .show > .btn-light.dropdown-toggle {\n  color: #000;\n  background-color: #f9fafb;\n  border-color: #f9fafb;\n}\n.btn-check:checked + .btn-light:focus, .btn-check:active + .btn-light:focus, .btn-light:active:focus, .btn-light.active:focus, .show > .btn-light.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.25rem rgba(211, 212, 213, 0.5);\n}\n.btn-light:disabled, .btn-light.disabled {\n  color: #000;\n  background-color: #f8f9fa;\n  border-color: #f8f9fa;\n}\n\n.btn-dark {\n  color: #fff;\n  background-color: #212529;\n  border-color: #212529;\n}\n.btn-dark:hover {\n  color: #fff;\n  background-color: #1c1f23;\n  border-color: #1a1e21;\n}\n.btn-check:focus + .btn-dark, .btn-dark:focus {\n  color: #fff;\n  background-color: #1c1f23;\n  border-color: #1a1e21;\n  box-shadow: 0 0 0 0.25rem rgba(66, 70, 73, 0.5);\n}\n.btn-check:checked + .btn-dark, .btn-check:active + .btn-dark, .btn-dark:active, .btn-dark.active, .show > .btn-dark.dropdown-toggle {\n  color: #fff;\n  background-color: #1a1e21;\n  border-color: #191c1f;\n}\n.btn-check:checked + .btn-dark:focus, .btn-check:active + .btn-dark:focus, .btn-dark:active:focus, .btn-dark.active:focus, .show > .btn-dark.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.25rem rgba(66, 70, 73, 0.5);\n}\n.btn-dark:disabled, .btn-dark.disabled {\n  color: #fff;\n  background-color: #212529;\n  border-color: #212529;\n}\n\n.btn-outline-primary {\n  color: #0d6efd;\n  border-color: #0d6efd;\n}\n.btn-outline-primary:hover {\n  color: #fff;\n  background-color: #0d6efd;\n  border-color: #0d6efd;\n}\n.btn-check:focus + .btn-outline-primary, .btn-outline-primary:focus {\n  box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.5);\n}\n.btn-check:checked + .btn-outline-primary, .btn-check:active + .btn-outline-primary, .btn-outline-primary:active, .btn-outline-primary.active, .btn-outline-primary.dropdown-toggle.show {\n  color: #fff;\n  background-color: #0d6efd;\n  border-color: #0d6efd;\n}\n.btn-check:checked + .btn-outline-primary:focus, .btn-check:active + .btn-outline-primary:focus, .btn-outline-primary:active:focus, .btn-outline-primary.active:focus, .btn-outline-primary.dropdown-toggle.show:focus {\n  box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.5);\n}\n.btn-outline-primary:disabled, .btn-outline-primary.disabled {\n  color: #0d6efd;\n  background-color: transparent;\n}\n\n.btn-outline-secondary {\n  color: #6c757d;\n  border-color: #6c757d;\n}\n.btn-outline-secondary:hover {\n  color: #fff;\n  background-color: #6c757d;\n  border-color: #6c757d;\n}\n.btn-check:focus + .btn-outline-secondary, .btn-outline-secondary:focus {\n  box-shadow: 0 0 0 0.25rem rgba(108, 117, 125, 0.5);\n}\n.btn-check:checked + .btn-outline-secondary, .btn-check:active + .btn-outline-secondary, .btn-outline-secondary:active, .btn-outline-secondary.active, .btn-outline-secondary.dropdown-toggle.show {\n  color: #fff;\n  background-color: #6c757d;\n  border-color: #6c757d;\n}\n.btn-check:checked + .btn-outline-secondary:focus, .btn-check:active + .btn-outline-secondary:focus, .btn-outline-secondary:active:focus, .btn-outline-secondary.active:focus, .btn-outline-secondary.dropdown-toggle.show:focus {\n  box-shadow: 0 0 0 0.25rem rgba(108, 117, 125, 0.5);\n}\n.btn-outline-secondary:disabled, .btn-outline-secondary.disabled {\n  color: #6c757d;\n  background-color: transparent;\n}\n\n.btn-outline-success {\n  color: #198754;\n  border-color: #198754;\n}\n.btn-outline-success:hover {\n  color: #fff;\n  background-color: #198754;\n  border-color: #198754;\n}\n.btn-check:focus + .btn-outline-success, .btn-outline-success:focus {\n  box-shadow: 0 0 0 0.25rem rgba(25, 135, 84, 0.5);\n}\n.btn-check:checked + .btn-outline-success, .btn-check:active + .btn-outline-success, .btn-outline-success:active, .btn-outline-success.active, .btn-outline-success.dropdown-toggle.show {\n  color: #fff;\n  background-color: #198754;\n  border-color: #198754;\n}\n.btn-check:checked + .btn-outline-success:focus, .btn-check:active + .btn-outline-success:focus, .btn-outline-success:active:focus, .btn-outline-success.active:focus, .btn-outline-success.dropdown-toggle.show:focus {\n  box-shadow: 0 0 0 0.25rem rgba(25, 135, 84, 0.5);\n}\n.btn-outline-success:disabled, .btn-outline-success.disabled {\n  color: #198754;\n  background-color: transparent;\n}\n\n.btn-outline-info {\n  color: #0dcaf0;\n  border-color: #0dcaf0;\n}\n.btn-outline-info:hover {\n  color: #000;\n  background-color: #0dcaf0;\n  border-color: #0dcaf0;\n}\n.btn-check:focus + .btn-outline-info, .btn-outline-info:focus {\n  box-shadow: 0 0 0 0.25rem rgba(13, 202, 240, 0.5);\n}\n.btn-check:checked + .btn-outline-info, .btn-check:active + .btn-outline-info, .btn-outline-info:active, .btn-outline-info.active, .btn-outline-info.dropdown-toggle.show {\n  color: #000;\n  background-color: #0dcaf0;\n  border-color: #0dcaf0;\n}\n.btn-check:checked + .btn-outline-info:focus, .btn-check:active + .btn-outline-info:focus, .btn-outline-info:active:focus, .btn-outline-info.active:focus, .btn-outline-info.dropdown-toggle.show:focus {\n  box-shadow: 0 0 0 0.25rem rgba(13, 202, 240, 0.5);\n}\n.btn-outline-info:disabled, .btn-outline-info.disabled {\n  color: #0dcaf0;\n  background-color: transparent;\n}\n\n.btn-outline-warning {\n  color: #ffc107;\n  border-color: #ffc107;\n}\n.btn-outline-warning:hover {\n  color: #000;\n  background-color: #ffc107;\n  border-color: #ffc107;\n}\n.btn-check:focus + .btn-outline-warning, .btn-outline-warning:focus {\n  box-shadow: 0 0 0 0.25rem rgba(255, 193, 7, 0.5);\n}\n.btn-check:checked + .btn-outline-warning, .btn-check:active + .btn-outline-warning, .btn-outline-warning:active, .btn-outline-warning.active, .btn-outline-warning.dropdown-toggle.show {\n  color: #000;\n  background-color: #ffc107;\n  border-color: #ffc107;\n}\n.btn-check:checked + .btn-outline-warning:focus, .btn-check:active + .btn-outline-warning:focus, .btn-outline-warning:active:focus, .btn-outline-warning.active:focus, .btn-outline-warning.dropdown-toggle.show:focus {\n  box-shadow: 0 0 0 0.25rem rgba(255, 193, 7, 0.5);\n}\n.btn-outline-warning:disabled, .btn-outline-warning.disabled {\n  color: #ffc107;\n  background-color: transparent;\n}\n\n.btn-outline-danger {\n  color: #dc3545;\n  border-color: #dc3545;\n}\n.btn-outline-danger:hover {\n  color: #fff;\n  background-color: #dc3545;\n  border-color: #dc3545;\n}\n.btn-check:focus + .btn-outline-danger, .btn-outline-danger:focus {\n  box-shadow: 0 0 0 0.25rem rgba(220, 53, 69, 0.5);\n}\n.btn-check:checked + .btn-outline-danger, .btn-check:active + .btn-outline-danger, .btn-outline-danger:active, .btn-outline-danger.active, .btn-outline-danger.dropdown-toggle.show {\n  color: #fff;\n  background-color: #dc3545;\n  border-color: #dc3545;\n}\n.btn-check:checked + .btn-outline-danger:focus, .btn-check:active + .btn-outline-danger:focus, .btn-outline-danger:active:focus, .btn-outline-danger.active:focus, .btn-outline-danger.dropdown-toggle.show:focus {\n  box-shadow: 0 0 0 0.25rem rgba(220, 53, 69, 0.5);\n}\n.btn-outline-danger:disabled, .btn-outline-danger.disabled {\n  color: #dc3545;\n  background-color: transparent;\n}\n\n.btn-outline-light {\n  color: #f8f9fa;\n  border-color: #f8f9fa;\n}\n.btn-outline-light:hover {\n  color: #000;\n  background-color: #f8f9fa;\n  border-color: #f8f9fa;\n}\n.btn-check:focus + .btn-outline-light, .btn-outline-light:focus {\n  box-shadow: 0 0 0 0.25rem rgba(248, 249, 250, 0.5);\n}\n.btn-check:checked + .btn-outline-light, .btn-check:active + .btn-outline-light, .btn-outline-light:active, .btn-outline-light.active, .btn-outline-light.dropdown-toggle.show {\n  color: #000;\n  background-color: #f8f9fa;\n  border-color: #f8f9fa;\n}\n.btn-check:checked + .btn-outline-light:focus, .btn-check:active + .btn-outline-light:focus, .btn-outline-light:active:focus, .btn-outline-light.active:focus, .btn-outline-light.dropdown-toggle.show:focus {\n  box-shadow: 0 0 0 0.25rem rgba(248, 249, 250, 0.5);\n}\n.btn-outline-light:disabled, .btn-outline-light.disabled {\n  color: #f8f9fa;\n  background-color: transparent;\n}\n\n.btn-outline-dark {\n  color: #212529;\n  border-color: #212529;\n}\n.btn-outline-dark:hover {\n  color: #fff;\n  background-color: #212529;\n  border-color: #212529;\n}\n.btn-check:focus + .btn-outline-dark, .btn-outline-dark:focus {\n  box-shadow: 0 0 0 0.25rem rgba(33, 37, 41, 0.5);\n}\n.btn-check:checked + .btn-outline-dark, .btn-check:active + .btn-outline-dark, .btn-outline-dark:active, .btn-outline-dark.active, .btn-outline-dark.dropdown-toggle.show {\n  color: #fff;\n  background-color: #212529;\n  border-color: #212529;\n}\n.btn-check:checked + .btn-outline-dark:focus, .btn-check:active + .btn-outline-dark:focus, .btn-outline-dark:active:focus, .btn-outline-dark.active:focus, .btn-outline-dark.dropdown-toggle.show:focus {\n  box-shadow: 0 0 0 0.25rem rgba(33, 37, 41, 0.5);\n}\n.btn-outline-dark:disabled, .btn-outline-dark.disabled {\n  color: #212529;\n  background-color: transparent;\n}\n\n.btn-link {\n  font-weight: 400;\n  color: #0d6efd;\n  text-decoration: underline;\n}\n.btn-link:hover {\n  color: #0a58ca;\n}\n.btn-link:disabled, .btn-link.disabled {\n  color: #6c757d;\n}\n\n.btn-lg, .btn-group-lg > .btn {\n  padding: 0.5rem 1rem;\n  font-size: 1.25rem;\n  border-radius: 0.3rem;\n}\n\n.btn-sm, .btn-group-sm > .btn {\n  padding: 0.25rem 0.5rem;\n  font-size: 0.875rem;\n  border-radius: 0.2rem;\n}\n\n.fade {\n  transition: opacity 0.15s linear;\n}\n@media (prefers-reduced-motion: reduce) {\n  .fade {\n    transition: none;\n  }\n}\n.fade:not(.show) {\n  opacity: 0;\n}\n\n.collapse:not(.show) {\n  display: none;\n}\n\n.collapsing {\n  height: 0;\n  overflow: hidden;\n  transition: height 0.35s ease;\n}\n@media (prefers-reduced-motion: reduce) {\n  .collapsing {\n    transition: none;\n  }\n}\n.collapsing.collapse-horizontal {\n  width: 0;\n  height: auto;\n  transition: width 0.35s ease;\n}\n@media (prefers-reduced-motion: reduce) {\n  .collapsing.collapse-horizontal {\n    transition: none;\n  }\n}\n\n.dropup,\n.dropend,\n.dropdown,\n.dropstart {\n  position: relative;\n}\n\n.dropdown-toggle {\n  white-space: nowrap;\n}\n.dropdown-toggle::after {\n  display: inline-block;\n  margin-left: 0.255em;\n  vertical-align: 0.255em;\n  content: \"\";\n  border-top: 0.3em solid;\n  border-right: 0.3em solid transparent;\n  border-bottom: 0;\n  border-left: 0.3em solid transparent;\n}\n.dropdown-toggle:empty::after {\n  margin-left: 0;\n}\n\n.dropdown-menu {\n  position: absolute;\n  z-index: 1000;\n  display: none;\n  min-width: 10rem;\n  padding: 0.5rem 0;\n  margin: 0;\n  font-size: 1rem;\n  color: #212529;\n  text-align: left;\n  list-style: none;\n  background-color: #fff;\n  background-clip: padding-box;\n  border: 1px solid rgba(0, 0, 0, 0.15);\n  border-radius: 0.25rem;\n}\n.dropdown-menu[data-bs-popper] {\n  top: 100%;\n  left: 0;\n  margin-top: 0.125rem;\n}\n\n.dropdown-menu-start {\n  --bs-position: start;\n}\n.dropdown-menu-start[data-bs-popper] {\n  right: auto;\n  left: 0;\n}\n\n.dropdown-menu-end {\n  --bs-position: end;\n}\n.dropdown-menu-end[data-bs-popper] {\n  right: 0;\n  left: auto;\n}\n\n@media (min-width: 576px) {\n  .dropdown-menu-sm-start {\n    --bs-position: start;\n  }\n  .dropdown-menu-sm-start[data-bs-popper] {\n    right: auto;\n    left: 0;\n  }\n\n  .dropdown-menu-sm-end {\n    --bs-position: end;\n  }\n  .dropdown-menu-sm-end[data-bs-popper] {\n    right: 0;\n    left: auto;\n  }\n}\n@media (min-width: 768px) {\n  .dropdown-menu-md-start {\n    --bs-position: start;\n  }\n  .dropdown-menu-md-start[data-bs-popper] {\n    right: auto;\n    left: 0;\n  }\n\n  .dropdown-menu-md-end {\n    --bs-position: end;\n  }\n  .dropdown-menu-md-end[data-bs-popper] {\n    right: 0;\n    left: auto;\n  }\n}\n@media (min-width: 992px) {\n  .dropdown-menu-lg-start {\n    --bs-position: start;\n  }\n  .dropdown-menu-lg-start[data-bs-popper] {\n    right: auto;\n    left: 0;\n  }\n\n  .dropdown-menu-lg-end {\n    --bs-position: end;\n  }\n  .dropdown-menu-lg-end[data-bs-popper] {\n    right: 0;\n    left: auto;\n  }\n}\n@media (min-width: 1200px) {\n  .dropdown-menu-xl-start {\n    --bs-position: start;\n  }\n  .dropdown-menu-xl-start[data-bs-popper] {\n    right: auto;\n    left: 0;\n  }\n\n  .dropdown-menu-xl-end {\n    --bs-position: end;\n  }\n  .dropdown-menu-xl-end[data-bs-popper] {\n    right: 0;\n    left: auto;\n  }\n}\n@media (min-width: 1400px) {\n  .dropdown-menu-xxl-start {\n    --bs-position: start;\n  }\n  .dropdown-menu-xxl-start[data-bs-popper] {\n    right: auto;\n    left: 0;\n  }\n\n  .dropdown-menu-xxl-end {\n    --bs-position: end;\n  }\n  .dropdown-menu-xxl-end[data-bs-popper] {\n    right: 0;\n    left: auto;\n  }\n}\n.dropup .dropdown-menu[data-bs-popper] {\n  top: auto;\n  bottom: 100%;\n  margin-top: 0;\n  margin-bottom: 0.125rem;\n}\n.dropup .dropdown-toggle::after {\n  display: inline-block;\n  margin-left: 0.255em;\n  vertical-align: 0.255em;\n  content: \"\";\n  border-top: 0;\n  border-right: 0.3em solid transparent;\n  border-bottom: 0.3em solid;\n  border-left: 0.3em solid transparent;\n}\n.dropup .dropdown-toggle:empty::after {\n  margin-left: 0;\n}\n\n.dropend .dropdown-menu[data-bs-popper] {\n  top: 0;\n  right: auto;\n  left: 100%;\n  margin-top: 0;\n  margin-left: 0.125rem;\n}\n.dropend .dropdown-toggle::after {\n  display: inline-block;\n  margin-left: 0.255em;\n  vertical-align: 0.255em;\n  content: \"\";\n  border-top: 0.3em solid transparent;\n  border-right: 0;\n  border-bottom: 0.3em solid transparent;\n  border-left: 0.3em solid;\n}\n.dropend .dropdown-toggle:empty::after {\n  margin-left: 0;\n}\n.dropend .dropdown-toggle::after {\n  vertical-align: 0;\n}\n\n.dropstart .dropdown-menu[data-bs-popper] {\n  top: 0;\n  right: 100%;\n  left: auto;\n  margin-top: 0;\n  margin-right: 0.125rem;\n}\n.dropstart .dropdown-toggle::after {\n  display: inline-block;\n  margin-left: 0.255em;\n  vertical-align: 0.255em;\n  content: \"\";\n}\n.dropstart .dropdown-toggle::after {\n  display: none;\n}\n.dropstart .dropdown-toggle::before {\n  display: inline-block;\n  margin-right: 0.255em;\n  vertical-align: 0.255em;\n  content: \"\";\n  border-top: 0.3em solid transparent;\n  border-right: 0.3em solid;\n  border-bottom: 0.3em solid transparent;\n}\n.dropstart .dropdown-toggle:empty::after {\n  margin-left: 0;\n}\n.dropstart .dropdown-toggle::before {\n  vertical-align: 0;\n}\n\n.dropdown-divider {\n  height: 0;\n  margin: 0.5rem 0;\n  overflow: hidden;\n  border-top: 1px solid rgba(0, 0, 0, 0.15);\n}\n\n.dropdown-item {\n  display: block;\n  width: 100%;\n  padding: 0.25rem 1rem;\n  clear: both;\n  font-weight: 400;\n  color: #212529;\n  text-align: inherit;\n  text-decoration: none;\n  white-space: nowrap;\n  background-color: transparent;\n  border: 0;\n}\n.dropdown-item:hover, .dropdown-item:focus {\n  color: #1e2125;\n  background-color: #e9ecef;\n}\n.dropdown-item.active, .dropdown-item:active {\n  color: #fff;\n  text-decoration: none;\n  background-color: #0d6efd;\n}\n.dropdown-item.disabled, .dropdown-item:disabled {\n  color: #adb5bd;\n  pointer-events: none;\n  background-color: transparent;\n}\n\n.dropdown-menu.show {\n  display: block;\n}\n\n.dropdown-header {\n  display: block;\n  padding: 0.5rem 1rem;\n  margin-bottom: 0;\n  font-size: 0.875rem;\n  color: #6c757d;\n  white-space: nowrap;\n}\n\n.dropdown-item-text {\n  display: block;\n  padding: 0.25rem 1rem;\n  color: #212529;\n}\n\n.dropdown-menu-dark {\n  color: #dee2e6;\n  background-color: #343a40;\n  border-color: rgba(0, 0, 0, 0.15);\n}\n.dropdown-menu-dark .dropdown-item {\n  color: #dee2e6;\n}\n.dropdown-menu-dark .dropdown-item:hover, .dropdown-menu-dark .dropdown-item:focus {\n  color: #fff;\n  background-color: rgba(255, 255, 255, 0.15);\n}\n.dropdown-menu-dark .dropdown-item.active, .dropdown-menu-dark .dropdown-item:active {\n  color: #fff;\n  background-color: #0d6efd;\n}\n.dropdown-menu-dark .dropdown-item.disabled, .dropdown-menu-dark .dropdown-item:disabled {\n  color: #adb5bd;\n}\n.dropdown-menu-dark .dropdown-divider {\n  border-color: rgba(0, 0, 0, 0.15);\n}\n.dropdown-menu-dark .dropdown-item-text {\n  color: #dee2e6;\n}\n.dropdown-menu-dark .dropdown-header {\n  color: #adb5bd;\n}\n\n.btn-group,\n.btn-group-vertical {\n  position: relative;\n  display: inline-flex;\n  vertical-align: middle;\n}\n.btn-group > .btn,\n.btn-group-vertical > .btn {\n  position: relative;\n  flex: 1 1 auto;\n}\n.btn-group > .btn-check:checked + .btn,\n.btn-group > .btn-check:focus + .btn,\n.btn-group > .btn:hover,\n.btn-group > .btn:focus,\n.btn-group > .btn:active,\n.btn-group > .btn.active,\n.btn-group-vertical > .btn-check:checked + .btn,\n.btn-group-vertical > .btn-check:focus + .btn,\n.btn-group-vertical > .btn:hover,\n.btn-group-vertical > .btn:focus,\n.btn-group-vertical > .btn:active,\n.btn-group-vertical > .btn.active {\n  z-index: 1;\n}\n\n.btn-toolbar {\n  display: flex;\n  flex-wrap: wrap;\n  justify-content: flex-start;\n}\n.btn-toolbar .input-group {\n  width: auto;\n}\n\n.btn-group > .btn:not(:first-child),\n.btn-group > .btn-group:not(:first-child) {\n  margin-left: -1px;\n}\n.btn-group > .btn:not(:last-child):not(.dropdown-toggle),\n.btn-group > .btn-group:not(:last-child) > .btn {\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n}\n.btn-group > .btn:nth-child(n+3),\n.btn-group > :not(.btn-check) + .btn,\n.btn-group > .btn-group:not(:first-child) > .btn {\n  border-top-left-radius: 0;\n  border-bottom-left-radius: 0;\n}\n\n.dropdown-toggle-split {\n  padding-right: 0.5625rem;\n  padding-left: 0.5625rem;\n}\n.dropdown-toggle-split::after, .dropup .dropdown-toggle-split::after, .dropend .dropdown-toggle-split::after {\n  margin-left: 0;\n}\n.dropstart .dropdown-toggle-split::before {\n  margin-right: 0;\n}\n\n.btn-sm + .dropdown-toggle-split, .btn-group-sm > .btn + .dropdown-toggle-split {\n  padding-right: 0.375rem;\n  padding-left: 0.375rem;\n}\n\n.btn-lg + .dropdown-toggle-split, .btn-group-lg > .btn + .dropdown-toggle-split {\n  padding-right: 0.75rem;\n  padding-left: 0.75rem;\n}\n\n.btn-group-vertical {\n  flex-direction: column;\n  align-items: flex-start;\n  justify-content: center;\n}\n.btn-group-vertical > .btn,\n.btn-group-vertical > .btn-group {\n  width: 100%;\n}\n.btn-group-vertical > .btn:not(:first-child),\n.btn-group-vertical > .btn-group:not(:first-child) {\n  margin-top: -1px;\n}\n.btn-group-vertical > .btn:not(:last-child):not(.dropdown-toggle),\n.btn-group-vertical > .btn-group:not(:last-child) > .btn {\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 0;\n}\n.btn-group-vertical > .btn ~ .btn,\n.btn-group-vertical > .btn-group:not(:first-child) > .btn {\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n}\n\n.nav {\n  display: flex;\n  flex-wrap: wrap;\n  padding-left: 0;\n  margin-bottom: 0;\n  list-style: none;\n}\n\n.nav-link {\n  display: block;\n  padding: 0.5rem 1rem;\n  color: #0d6efd;\n  text-decoration: none;\n  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n  .nav-link {\n    transition: none;\n  }\n}\n.nav-link:hover, .nav-link:focus {\n  color: #0a58ca;\n}\n.nav-link.disabled {\n  color: #6c757d;\n  pointer-events: none;\n  cursor: default;\n}\n\n.nav-tabs {\n  border-bottom: 1px solid #dee2e6;\n}\n.nav-tabs .nav-link {\n  margin-bottom: -1px;\n  background: none;\n  border: 1px solid transparent;\n  border-top-left-radius: 0.25rem;\n  border-top-right-radius: 0.25rem;\n}\n.nav-tabs .nav-link:hover, .nav-tabs .nav-link:focus {\n  border-color: #e9ecef #e9ecef #dee2e6;\n  isolation: isolate;\n}\n.nav-tabs .nav-link.disabled {\n  color: #6c757d;\n  background-color: transparent;\n  border-color: transparent;\n}\n.nav-tabs .nav-link.active,\n.nav-tabs .nav-item.show .nav-link {\n  color: #495057;\n  background-color: #fff;\n  border-color: #dee2e6 #dee2e6 #fff;\n}\n.nav-tabs .dropdown-menu {\n  margin-top: -1px;\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n}\n\n.nav-pills .nav-link {\n  background: none;\n  border: 0;\n  border-radius: 0.25rem;\n}\n.nav-pills .nav-link.active,\n.nav-pills .show > .nav-link {\n  color: #fff;\n  background-color: #0d6efd;\n}\n\n.nav-fill > .nav-link,\n.nav-fill .nav-item {\n  flex: 1 1 auto;\n  text-align: center;\n}\n\n.nav-justified > .nav-link,\n.nav-justified .nav-item {\n  flex-basis: 0;\n  flex-grow: 1;\n  text-align: center;\n}\n\n.nav-fill .nav-item .nav-link,\n.nav-justified .nav-item .nav-link {\n  width: 100%;\n}\n\n.tab-content > .tab-pane {\n  display: none;\n}\n.tab-content > .active {\n  display: block;\n}\n\n.navbar {\n  position: relative;\n  display: flex;\n  flex-wrap: wrap;\n  align-items: center;\n  justify-content: space-between;\n  padding-top: 0.5rem;\n  padding-bottom: 0.5rem;\n}\n.navbar > .container,\n.navbar > .container-fluid,\n.navbar > .container-sm,\n.navbar > .container-md,\n.navbar > .container-lg,\n.navbar > .container-xl,\n.navbar > .container-xxl {\n  display: flex;\n  flex-wrap: inherit;\n  align-items: center;\n  justify-content: space-between;\n}\n.navbar-brand {\n  padding-top: 0.3125rem;\n  padding-bottom: 0.3125rem;\n  margin-right: 1rem;\n  font-size: 1.25rem;\n  text-decoration: none;\n  white-space: nowrap;\n}\n.navbar-nav {\n  display: flex;\n  flex-direction: column;\n  padding-left: 0;\n  margin-bottom: 0;\n  list-style: none;\n}\n.navbar-nav .nav-link {\n  padding-right: 0;\n  padding-left: 0;\n}\n.navbar-nav .dropdown-menu {\n  position: static;\n}\n\n.navbar-text {\n  padding-top: 0.5rem;\n  padding-bottom: 0.5rem;\n}\n\n.navbar-collapse {\n  flex-basis: 100%;\n  flex-grow: 1;\n  align-items: center;\n}\n\n.navbar-toggler {\n  padding: 0.25rem 0.75rem;\n  font-size: 1.25rem;\n  line-height: 1;\n  background-color: transparent;\n  border: 1px solid transparent;\n  border-radius: 0.25rem;\n  transition: box-shadow 0.15s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n  .navbar-toggler {\n    transition: none;\n  }\n}\n.navbar-toggler:hover {\n  text-decoration: none;\n}\n.navbar-toggler:focus {\n  text-decoration: none;\n  outline: 0;\n  box-shadow: 0 0 0 0.25rem;\n}\n\n.navbar-toggler-icon {\n  display: inline-block;\n  width: 1.5em;\n  height: 1.5em;\n  vertical-align: middle;\n  background-repeat: no-repeat;\n  background-position: center;\n  background-size: 100%;\n}\n\n.navbar-nav-scroll {\n  max-height: var(--bs-scroll-height, 75vh);\n  overflow-y: auto;\n}\n\n@media (min-width: 576px) {\n  .navbar-expand-sm {\n    flex-wrap: nowrap;\n    justify-content: flex-start;\n  }\n  .navbar-expand-sm .navbar-nav {\n    flex-direction: row;\n  }\n  .navbar-expand-sm .navbar-nav .dropdown-menu {\n    position: absolute;\n  }\n  .navbar-expand-sm .navbar-nav .nav-link {\n    padding-right: 0.5rem;\n    padding-left: 0.5rem;\n  }\n  .navbar-expand-sm .navbar-nav-scroll {\n    overflow: visible;\n  }\n  .navbar-expand-sm .navbar-collapse {\n    display: flex !important;\n    flex-basis: auto;\n  }\n  .navbar-expand-sm .navbar-toggler {\n    display: none;\n  }\n  .navbar-expand-sm .offcanvas-header {\n    display: none;\n  }\n  .navbar-expand-sm .offcanvas {\n    position: inherit;\n    bottom: 0;\n    z-index: 1000;\n    flex-grow: 1;\n    visibility: visible !important;\n    background-color: transparent;\n    border-right: 0;\n    border-left: 0;\n    transition: none;\n    transform: none;\n  }\n  .navbar-expand-sm .offcanvas-top,\n.navbar-expand-sm .offcanvas-bottom {\n    height: auto;\n    border-top: 0;\n    border-bottom: 0;\n  }\n  .navbar-expand-sm .offcanvas-body {\n    display: flex;\n    flex-grow: 0;\n    padding: 0;\n    overflow-y: visible;\n  }\n}\n@media (min-width: 768px) {\n  .navbar-expand-md {\n    flex-wrap: nowrap;\n    justify-content: flex-start;\n  }\n  .navbar-expand-md .navbar-nav {\n    flex-direction: row;\n  }\n  .navbar-expand-md .navbar-nav .dropdown-menu {\n    position: absolute;\n  }\n  .navbar-expand-md .navbar-nav .nav-link {\n    padding-right: 0.5rem;\n    padding-left: 0.5rem;\n  }\n  .navbar-expand-md .navbar-nav-scroll {\n    overflow: visible;\n  }\n  .navbar-expand-md .navbar-collapse {\n    display: flex !important;\n    flex-basis: auto;\n  }\n  .navbar-expand-md .navbar-toggler {\n    display: none;\n  }\n  .navbar-expand-md .offcanvas-header {\n    display: none;\n  }\n  .navbar-expand-md .offcanvas {\n    position: inherit;\n    bottom: 0;\n    z-index: 1000;\n    flex-grow: 1;\n    visibility: visible !important;\n    background-color: transparent;\n    border-right: 0;\n    border-left: 0;\n    transition: none;\n    transform: none;\n  }\n  .navbar-expand-md .offcanvas-top,\n.navbar-expand-md .offcanvas-bottom {\n    height: auto;\n    border-top: 0;\n    border-bottom: 0;\n  }\n  .navbar-expand-md .offcanvas-body {\n    display: flex;\n    flex-grow: 0;\n    padding: 0;\n    overflow-y: visible;\n  }\n}\n@media (min-width: 992px) {\n  .navbar-expand-lg {\n    flex-wrap: nowrap;\n    justify-content: flex-start;\n  }\n  .navbar-expand-lg .navbar-nav {\n    flex-direction: row;\n  }\n  .navbar-expand-lg .navbar-nav .dropdown-menu {\n    position: absolute;\n  }\n  .navbar-expand-lg .navbar-nav .nav-link {\n    padding-right: 0.5rem;\n    padding-left: 0.5rem;\n  }\n  .navbar-expand-lg .navbar-nav-scroll {\n    overflow: visible;\n  }\n  .navbar-expand-lg .navbar-collapse {\n    display: flex !important;\n    flex-basis: auto;\n  }\n  .navbar-expand-lg .navbar-toggler {\n    display: none;\n  }\n  .navbar-expand-lg .offcanvas-header {\n    display: none;\n  }\n  .navbar-expand-lg .offcanvas {\n    position: inherit;\n    bottom: 0;\n    z-index: 1000;\n    flex-grow: 1;\n    visibility: visible !important;\n    background-color: transparent;\n    border-right: 0;\n    border-left: 0;\n    transition: none;\n    transform: none;\n  }\n  .navbar-expand-lg .offcanvas-top,\n.navbar-expand-lg .offcanvas-bottom {\n    height: auto;\n    border-top: 0;\n    border-bottom: 0;\n  }\n  .navbar-expand-lg .offcanvas-body {\n    display: flex;\n    flex-grow: 0;\n    padding: 0;\n    overflow-y: visible;\n  }\n}\n@media (min-width: 1200px) {\n  .navbar-expand-xl {\n    flex-wrap: nowrap;\n    justify-content: flex-start;\n  }\n  .navbar-expand-xl .navbar-nav {\n    flex-direction: row;\n  }\n  .navbar-expand-xl .navbar-nav .dropdown-menu {\n    position: absolute;\n  }\n  .navbar-expand-xl .navbar-nav .nav-link {\n    padding-right: 0.5rem;\n    padding-left: 0.5rem;\n  }\n  .navbar-expand-xl .navbar-nav-scroll {\n    overflow: visible;\n  }\n  .navbar-expand-xl .navbar-collapse {\n    display: flex !important;\n    flex-basis: auto;\n  }\n  .navbar-expand-xl .navbar-toggler {\n    display: none;\n  }\n  .navbar-expand-xl .offcanvas-header {\n    display: none;\n  }\n  .navbar-expand-xl .offcanvas {\n    position: inherit;\n    bottom: 0;\n    z-index: 1000;\n    flex-grow: 1;\n    visibility: visible !important;\n    background-color: transparent;\n    border-right: 0;\n    border-left: 0;\n    transition: none;\n    transform: none;\n  }\n  .navbar-expand-xl .offcanvas-top,\n.navbar-expand-xl .offcanvas-bottom {\n    height: auto;\n    border-top: 0;\n    border-bottom: 0;\n  }\n  .navbar-expand-xl .offcanvas-body {\n    display: flex;\n    flex-grow: 0;\n    padding: 0;\n    overflow-y: visible;\n  }\n}\n@media (min-width: 1400px) {\n  .navbar-expand-xxl {\n    flex-wrap: nowrap;\n    justify-content: flex-start;\n  }\n  .navbar-expand-xxl .navbar-nav {\n    flex-direction: row;\n  }\n  .navbar-expand-xxl .navbar-nav .dropdown-menu {\n    position: absolute;\n  }\n  .navbar-expand-xxl .navbar-nav .nav-link {\n    padding-right: 0.5rem;\n    padding-left: 0.5rem;\n  }\n  .navbar-expand-xxl .navbar-nav-scroll {\n    overflow: visible;\n  }\n  .navbar-expand-xxl .navbar-collapse {\n    display: flex !important;\n    flex-basis: auto;\n  }\n  .navbar-expand-xxl .navbar-toggler {\n    display: none;\n  }\n  .navbar-expand-xxl .offcanvas-header {\n    display: none;\n  }\n  .navbar-expand-xxl .offcanvas {\n    position: inherit;\n    bottom: 0;\n    z-index: 1000;\n    flex-grow: 1;\n    visibility: visible !important;\n    background-color: transparent;\n    border-right: 0;\n    border-left: 0;\n    transition: none;\n    transform: none;\n  }\n  .navbar-expand-xxl .offcanvas-top,\n.navbar-expand-xxl .offcanvas-bottom {\n    height: auto;\n    border-top: 0;\n    border-bottom: 0;\n  }\n  .navbar-expand-xxl .offcanvas-body {\n    display: flex;\n    flex-grow: 0;\n    padding: 0;\n    overflow-y: visible;\n  }\n}\n.navbar-expand {\n  flex-wrap: nowrap;\n  justify-content: flex-start;\n}\n.navbar-expand .navbar-nav {\n  flex-direction: row;\n}\n.navbar-expand .navbar-nav .dropdown-menu {\n  position: absolute;\n}\n.navbar-expand .navbar-nav .nav-link {\n  padding-right: 0.5rem;\n  padding-left: 0.5rem;\n}\n.navbar-expand .navbar-nav-scroll {\n  overflow: visible;\n}\n.navbar-expand .navbar-collapse {\n  display: flex !important;\n  flex-basis: auto;\n}\n.navbar-expand .navbar-toggler {\n  display: none;\n}\n.navbar-expand .offcanvas-header {\n  display: none;\n}\n.navbar-expand .offcanvas {\n  position: inherit;\n  bottom: 0;\n  z-index: 1000;\n  flex-grow: 1;\n  visibility: visible !important;\n  background-color: transparent;\n  border-right: 0;\n  border-left: 0;\n  transition: none;\n  transform: none;\n}\n.navbar-expand .offcanvas-top,\n.navbar-expand .offcanvas-bottom {\n  height: auto;\n  border-top: 0;\n  border-bottom: 0;\n}\n.navbar-expand .offcanvas-body {\n  display: flex;\n  flex-grow: 0;\n  padding: 0;\n  overflow-y: visible;\n}\n\n.navbar-light .navbar-brand {\n  color: rgba(0, 0, 0, 0.9);\n}\n.navbar-light .navbar-brand:hover, .navbar-light .navbar-brand:focus {\n  color: rgba(0, 0, 0, 0.9);\n}\n.navbar-light .navbar-nav .nav-link {\n  color: rgba(0, 0, 0, 0.55);\n}\n.navbar-light .navbar-nav .nav-link:hover, .navbar-light .navbar-nav .nav-link:focus {\n  color: rgba(0, 0, 0, 0.7);\n}\n.navbar-light .navbar-nav .nav-link.disabled {\n  color: rgba(0, 0, 0, 0.3);\n}\n.navbar-light .navbar-nav .show > .nav-link,\n.navbar-light .navbar-nav .nav-link.active {\n  color: rgba(0, 0, 0, 0.9);\n}\n.navbar-light .navbar-toggler {\n  color: rgba(0, 0, 0, 0.55);\n  border-color: rgba(0, 0, 0, 0.1);\n}\n.navbar-light .navbar-toggler-icon {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%280, 0, 0, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e\");\n}\n.navbar-light .navbar-text {\n  color: rgba(0, 0, 0, 0.55);\n}\n.navbar-light .navbar-text a,\n.navbar-light .navbar-text a:hover,\n.navbar-light .navbar-text a:focus {\n  color: rgba(0, 0, 0, 0.9);\n}\n\n.navbar-dark .navbar-brand {\n  color: #fff;\n}\n.navbar-dark .navbar-brand:hover, .navbar-dark .navbar-brand:focus {\n  color: #fff;\n}\n.navbar-dark .navbar-nav .nav-link {\n  color: rgba(255, 255, 255, 0.55);\n}\n.navbar-dark .navbar-nav .nav-link:hover, .navbar-dark .navbar-nav .nav-link:focus {\n  color: rgba(255, 255, 255, 0.75);\n}\n.navbar-dark .navbar-nav .nav-link.disabled {\n  color: rgba(255, 255, 255, 0.25);\n}\n.navbar-dark .navbar-nav .show > .nav-link,\n.navbar-dark .navbar-nav .nav-link.active {\n  color: #fff;\n}\n.navbar-dark .navbar-toggler {\n  color: rgba(255, 255, 255, 0.55);\n  border-color: rgba(255, 255, 255, 0.1);\n}\n.navbar-dark .navbar-toggler-icon {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e\");\n}\n.navbar-dark .navbar-text {\n  color: rgba(255, 255, 255, 0.55);\n}\n.navbar-dark .navbar-text a,\n.navbar-dark .navbar-text a:hover,\n.navbar-dark .navbar-text a:focus {\n  color: #fff;\n}\n\n.card {\n  position: relative;\n  display: flex;\n  flex-direction: column;\n  min-width: 0;\n  word-wrap: break-word;\n  background-color: #fff;\n  background-clip: border-box;\n  border: 1px solid rgba(0, 0, 0, 0.125);\n  border-radius: 0.25rem;\n}\n.card > hr {\n  margin-right: 0;\n  margin-left: 0;\n}\n.card > .list-group {\n  border-top: inherit;\n  border-bottom: inherit;\n}\n.card > .list-group:first-child {\n  border-top-width: 0;\n  border-top-left-radius: calc(0.25rem - 1px);\n  border-top-right-radius: calc(0.25rem - 1px);\n}\n.card > .list-group:last-child {\n  border-bottom-width: 0;\n  border-bottom-right-radius: calc(0.25rem - 1px);\n  border-bottom-left-radius: calc(0.25rem - 1px);\n}\n.card > .card-header + .list-group,\n.card > .list-group + .card-footer {\n  border-top: 0;\n}\n\n.card-body {\n  flex: 1 1 auto;\n  padding: 1rem 1rem;\n}\n\n.card-title {\n  margin-bottom: 0.5rem;\n}\n\n.card-subtitle {\n  margin-top: -0.25rem;\n  margin-bottom: 0;\n}\n\n.card-text:last-child {\n  margin-bottom: 0;\n}\n\n.card-link + .card-link {\n  margin-left: 1rem;\n}\n\n.card-header {\n  padding: 0.5rem 1rem;\n  margin-bottom: 0;\n  background-color: rgba(0, 0, 0, 0.03);\n  border-bottom: 1px solid rgba(0, 0, 0, 0.125);\n}\n.card-header:first-child {\n  border-radius: calc(0.25rem - 1px) calc(0.25rem - 1px) 0 0;\n}\n\n.card-footer {\n  padding: 0.5rem 1rem;\n  background-color: rgba(0, 0, 0, 0.03);\n  border-top: 1px solid rgba(0, 0, 0, 0.125);\n}\n.card-footer:last-child {\n  border-radius: 0 0 calc(0.25rem - 1px) calc(0.25rem - 1px);\n}\n\n.card-header-tabs {\n  margin-right: -0.5rem;\n  margin-bottom: -0.5rem;\n  margin-left: -0.5rem;\n  border-bottom: 0;\n}\n\n.card-header-pills {\n  margin-right: -0.5rem;\n  margin-left: -0.5rem;\n}\n\n.card-img-overlay {\n  position: absolute;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  padding: 1rem;\n  border-radius: calc(0.25rem - 1px);\n}\n\n.card-img,\n.card-img-top,\n.card-img-bottom {\n  width: 100%;\n}\n\n.card-img,\n.card-img-top {\n  border-top-left-radius: calc(0.25rem - 1px);\n  border-top-right-radius: calc(0.25rem - 1px);\n}\n\n.card-img,\n.card-img-bottom {\n  border-bottom-right-radius: calc(0.25rem - 1px);\n  border-bottom-left-radius: calc(0.25rem - 1px);\n}\n\n.card-group > .card {\n  margin-bottom: 0.75rem;\n}\n@media (min-width: 576px) {\n  .card-group {\n    display: flex;\n    flex-flow: row wrap;\n  }\n  .card-group > .card {\n    flex: 1 0 0%;\n    margin-bottom: 0;\n  }\n  .card-group > .card + .card {\n    margin-left: 0;\n    border-left: 0;\n  }\n  .card-group > .card:not(:last-child) {\n    border-top-right-radius: 0;\n    border-bottom-right-radius: 0;\n  }\n  .card-group > .card:not(:last-child) .card-img-top,\n.card-group > .card:not(:last-child) .card-header {\n    border-top-right-radius: 0;\n  }\n  .card-group > .card:not(:last-child) .card-img-bottom,\n.card-group > .card:not(:last-child) .card-footer {\n    border-bottom-right-radius: 0;\n  }\n  .card-group > .card:not(:first-child) {\n    border-top-left-radius: 0;\n    border-bottom-left-radius: 0;\n  }\n  .card-group > .card:not(:first-child) .card-img-top,\n.card-group > .card:not(:first-child) .card-header {\n    border-top-left-radius: 0;\n  }\n  .card-group > .card:not(:first-child) .card-img-bottom,\n.card-group > .card:not(:first-child) .card-footer {\n    border-bottom-left-radius: 0;\n  }\n}\n\n.accordion-button {\n  position: relative;\n  display: flex;\n  align-items: center;\n  width: 100%;\n  padding: 1rem 1.25rem;\n  font-size: 1rem;\n  color: #212529;\n  text-align: left;\n  background-color: #fff;\n  border: 0;\n  border-radius: 0;\n  overflow-anchor: none;\n  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, border-radius 0.15s ease;\n}\n@media (prefers-reduced-motion: reduce) {\n  .accordion-button {\n    transition: none;\n  }\n}\n.accordion-button:not(.collapsed) {\n  color: #0c63e4;\n  background-color: #e7f1ff;\n  box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.125);\n}\n.accordion-button:not(.collapsed)::after {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%230c63e4'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e\");\n  transform: rotate(-180deg);\n}\n.accordion-button::after {\n  flex-shrink: 0;\n  width: 1.25rem;\n  height: 1.25rem;\n  margin-left: auto;\n  content: \"\";\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23212529'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e\");\n  background-repeat: no-repeat;\n  background-size: 1.25rem;\n  transition: transform 0.2s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n  .accordion-button::after {\n    transition: none;\n  }\n}\n.accordion-button:hover {\n  z-index: 2;\n}\n.accordion-button:focus {\n  z-index: 3;\n  border-color: #86b7fe;\n  outline: 0;\n  box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);\n}\n\n.accordion-header {\n  margin-bottom: 0;\n}\n\n.accordion-item {\n  background-color: #fff;\n  border: 1px solid rgba(0, 0, 0, 0.125);\n}\n.accordion-item:first-of-type {\n  border-top-left-radius: 0.25rem;\n  border-top-right-radius: 0.25rem;\n}\n.accordion-item:first-of-type .accordion-button {\n  border-top-left-radius: calc(0.25rem - 1px);\n  border-top-right-radius: calc(0.25rem - 1px);\n}\n.accordion-item:not(:first-of-type) {\n  border-top: 0;\n}\n.accordion-item:last-of-type {\n  border-bottom-right-radius: 0.25rem;\n  border-bottom-left-radius: 0.25rem;\n}\n.accordion-item:last-of-type .accordion-button.collapsed {\n  border-bottom-right-radius: calc(0.25rem - 1px);\n  border-bottom-left-radius: calc(0.25rem - 1px);\n}\n.accordion-item:last-of-type .accordion-collapse {\n  border-bottom-right-radius: 0.25rem;\n  border-bottom-left-radius: 0.25rem;\n}\n\n.accordion-body {\n  padding: 1rem 1.25rem;\n}\n\n.accordion-flush .accordion-collapse {\n  border-width: 0;\n}\n.accordion-flush .accordion-item {\n  border-right: 0;\n  border-left: 0;\n  border-radius: 0;\n}\n.accordion-flush .accordion-item:first-child {\n  border-top: 0;\n}\n.accordion-flush .accordion-item:last-child {\n  border-bottom: 0;\n}\n.accordion-flush .accordion-item .accordion-button {\n  border-radius: 0;\n}\n\n.breadcrumb {\n  display: flex;\n  flex-wrap: wrap;\n  padding: 0 0;\n  margin-bottom: 1rem;\n  list-style: none;\n}\n\n.breadcrumb-item + .breadcrumb-item {\n  padding-left: 0.5rem;\n}\n.breadcrumb-item + .breadcrumb-item::before {\n  float: left;\n  padding-right: 0.5rem;\n  color: #6c757d;\n  content: var(--bs-breadcrumb-divider, \"/\") /* rtl: var(--bs-breadcrumb-divider, \"/\") */;\n}\n.breadcrumb-item.active {\n  color: #6c757d;\n}\n\n.pagination {\n  display: flex;\n  padding-left: 0;\n  list-style: none;\n}\n\n.page-link {\n  position: relative;\n  display: block;\n  color: #0d6efd;\n  text-decoration: none;\n  background-color: #fff;\n  border: 1px solid #dee2e6;\n  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n  .page-link {\n    transition: none;\n  }\n}\n.page-link:hover {\n  z-index: 2;\n  color: #0a58ca;\n  background-color: #e9ecef;\n  border-color: #dee2e6;\n}\n.page-link:focus {\n  z-index: 3;\n  color: #0a58ca;\n  background-color: #e9ecef;\n  outline: 0;\n  box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);\n}\n\n.page-item:not(:first-child) .page-link {\n  margin-left: -1px;\n}\n.page-item.active .page-link {\n  z-index: 3;\n  color: #fff;\n  background-color: #0d6efd;\n  border-color: #0d6efd;\n}\n.page-item.disabled .page-link {\n  color: #6c757d;\n  pointer-events: none;\n  background-color: #fff;\n  border-color: #dee2e6;\n}\n\n.page-link {\n  padding: 0.375rem 0.75rem;\n}\n\n.page-item:first-child .page-link {\n  border-top-left-radius: 0.25rem;\n  border-bottom-left-radius: 0.25rem;\n}\n.page-item:last-child .page-link {\n  border-top-right-radius: 0.25rem;\n  border-bottom-right-radius: 0.25rem;\n}\n\n.pagination-lg .page-link {\n  padding: 0.75rem 1.5rem;\n  font-size: 1.25rem;\n}\n.pagination-lg .page-item:first-child .page-link {\n  border-top-left-radius: 0.3rem;\n  border-bottom-left-radius: 0.3rem;\n}\n.pagination-lg .page-item:last-child .page-link {\n  border-top-right-radius: 0.3rem;\n  border-bottom-right-radius: 0.3rem;\n}\n\n.pagination-sm .page-link {\n  padding: 0.25rem 0.5rem;\n  font-size: 0.875rem;\n}\n.pagination-sm .page-item:first-child .page-link {\n  border-top-left-radius: 0.2rem;\n  border-bottom-left-radius: 0.2rem;\n}\n.pagination-sm .page-item:last-child .page-link {\n  border-top-right-radius: 0.2rem;\n  border-bottom-right-radius: 0.2rem;\n}\n\n.badge {\n  display: inline-block;\n  padding: 0.35em 0.65em;\n  font-size: 0.75em;\n  font-weight: 700;\n  line-height: 1;\n  color: #fff;\n  text-align: center;\n  white-space: nowrap;\n  vertical-align: baseline;\n  border-radius: 0.25rem;\n}\n.badge:empty {\n  display: none;\n}\n\n.btn .badge {\n  position: relative;\n  top: -1px;\n}\n\n.alert {\n  position: relative;\n  padding: 1rem 1rem;\n  margin-bottom: 1rem;\n  border: 1px solid transparent;\n  border-radius: 0.25rem;\n}\n\n.alert-heading {\n  color: inherit;\n}\n\n.alert-link {\n  font-weight: 700;\n}\n\n.alert-dismissible {\n  padding-right: 3rem;\n}\n.alert-dismissible .btn-close {\n  position: absolute;\n  top: 0;\n  right: 0;\n  z-index: 2;\n  padding: 1.25rem 1rem;\n}\n\n.alert-primary {\n  color: #084298;\n  background-color: #cfe2ff;\n  border-color: #b6d4fe;\n}\n.alert-primary .alert-link {\n  color: #06357a;\n}\n\n.alert-secondary {\n  color: #41464b;\n  background-color: #e2e3e5;\n  border-color: #d3d6d8;\n}\n.alert-secondary .alert-link {\n  color: #34383c;\n}\n\n.alert-success {\n  color: #0f5132;\n  background-color: #d1e7dd;\n  border-color: #badbcc;\n}\n.alert-success .alert-link {\n  color: #0c4128;\n}\n\n.alert-info {\n  color: #055160;\n  background-color: #cff4fc;\n  border-color: #b6effb;\n}\n.alert-info .alert-link {\n  color: #04414d;\n}\n\n.alert-warning {\n  color: #664d03;\n  background-color: #fff3cd;\n  border-color: #ffecb5;\n}\n.alert-warning .alert-link {\n  color: #523e02;\n}\n\n.alert-danger {\n  color: #842029;\n  background-color: #f8d7da;\n  border-color: #f5c2c7;\n}\n.alert-danger .alert-link {\n  color: #6a1a21;\n}\n\n.alert-light {\n  color: #636464;\n  background-color: #fefefe;\n  border-color: #fdfdfe;\n}\n.alert-light .alert-link {\n  color: #4f5050;\n}\n\n.alert-dark {\n  color: #141619;\n  background-color: #d3d3d4;\n  border-color: #bcbebf;\n}\n.alert-dark .alert-link {\n  color: #101214;\n}\n\n@-webkit-keyframes progress-bar-stripes {\n  0% {\n    background-position-x: 1rem;\n  }\n}\n\n@keyframes progress-bar-stripes {\n  0% {\n    background-position-x: 1rem;\n  }\n}\n.progress {\n  display: flex;\n  height: 1rem;\n  overflow: hidden;\n  font-size: 0.75rem;\n  background-color: #e9ecef;\n  border-radius: 0.25rem;\n}\n\n.progress-bar {\n  display: flex;\n  flex-direction: column;\n  justify-content: center;\n  overflow: hidden;\n  color: #fff;\n  text-align: center;\n  white-space: nowrap;\n  background-color: #0d6efd;\n  transition: width 0.6s ease;\n}\n@media (prefers-reduced-motion: reduce) {\n  .progress-bar {\n    transition: none;\n  }\n}\n\n.progress-bar-striped {\n  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-size: 1rem 1rem;\n}\n\n.progress-bar-animated {\n  -webkit-animation: 1s linear infinite progress-bar-stripes;\n  animation: 1s linear infinite progress-bar-stripes;\n}\n@media (prefers-reduced-motion: reduce) {\n  .progress-bar-animated {\n    -webkit-animation: none;\n    animation: none;\n  }\n}\n\n.list-group {\n  display: flex;\n  flex-direction: column;\n  padding-left: 0;\n  margin-bottom: 0;\n  border-radius: 0.25rem;\n}\n\n.list-group-numbered {\n  list-style-type: none;\n  counter-reset: section;\n}\n.list-group-numbered > li::before {\n  content: counters(section, \".\") \". \";\n  counter-increment: section;\n}\n\n.list-group-item-action {\n  width: 100%;\n  color: #495057;\n  text-align: inherit;\n}\n.list-group-item-action:hover, .list-group-item-action:focus {\n  z-index: 1;\n  color: #495057;\n  text-decoration: none;\n  background-color: #f8f9fa;\n}\n.list-group-item-action:active {\n  color: #212529;\n  background-color: #e9ecef;\n}\n\n.list-group-item {\n  position: relative;\n  display: block;\n  padding: 0.5rem 1rem;\n  color: #212529;\n  text-decoration: none;\n  background-color: #fff;\n  border: 1px solid rgba(0, 0, 0, 0.125);\n}\n.list-group-item:first-child {\n  border-top-left-radius: inherit;\n  border-top-right-radius: inherit;\n}\n.list-group-item:last-child {\n  border-bottom-right-radius: inherit;\n  border-bottom-left-radius: inherit;\n}\n.list-group-item.disabled, .list-group-item:disabled {\n  color: #6c757d;\n  pointer-events: none;\n  background-color: #fff;\n}\n.list-group-item.active {\n  z-index: 2;\n  color: #fff;\n  background-color: #0d6efd;\n  border-color: #0d6efd;\n}\n.list-group-item + .list-group-item {\n  border-top-width: 0;\n}\n.list-group-item + .list-group-item.active {\n  margin-top: -1px;\n  border-top-width: 1px;\n}\n\n.list-group-horizontal {\n  flex-direction: row;\n}\n.list-group-horizontal > .list-group-item:first-child {\n  border-bottom-left-radius: 0.25rem;\n  border-top-right-radius: 0;\n}\n.list-group-horizontal > .list-group-item:last-child {\n  border-top-right-radius: 0.25rem;\n  border-bottom-left-radius: 0;\n}\n.list-group-horizontal > .list-group-item.active {\n  margin-top: 0;\n}\n.list-group-horizontal > .list-group-item + .list-group-item {\n  border-top-width: 1px;\n  border-left-width: 0;\n}\n.list-group-horizontal > .list-group-item + .list-group-item.active {\n  margin-left: -1px;\n  border-left-width: 1px;\n}\n\n@media (min-width: 576px) {\n  .list-group-horizontal-sm {\n    flex-direction: row;\n  }\n  .list-group-horizontal-sm > .list-group-item:first-child {\n    border-bottom-left-radius: 0.25rem;\n    border-top-right-radius: 0;\n  }\n  .list-group-horizontal-sm > .list-group-item:last-child {\n    border-top-right-radius: 0.25rem;\n    border-bottom-left-radius: 0;\n  }\n  .list-group-horizontal-sm > .list-group-item.active {\n    margin-top: 0;\n  }\n  .list-group-horizontal-sm > .list-group-item + .list-group-item {\n    border-top-width: 1px;\n    border-left-width: 0;\n  }\n  .list-group-horizontal-sm > .list-group-item + .list-group-item.active {\n    margin-left: -1px;\n    border-left-width: 1px;\n  }\n}\n@media (min-width: 768px) {\n  .list-group-horizontal-md {\n    flex-direction: row;\n  }\n  .list-group-horizontal-md > .list-group-item:first-child {\n    border-bottom-left-radius: 0.25rem;\n    border-top-right-radius: 0;\n  }\n  .list-group-horizontal-md > .list-group-item:last-child {\n    border-top-right-radius: 0.25rem;\n    border-bottom-left-radius: 0;\n  }\n  .list-group-horizontal-md > .list-group-item.active {\n    margin-top: 0;\n  }\n  .list-group-horizontal-md > .list-group-item + .list-group-item {\n    border-top-width: 1px;\n    border-left-width: 0;\n  }\n  .list-group-horizontal-md > .list-group-item + .list-group-item.active {\n    margin-left: -1px;\n    border-left-width: 1px;\n  }\n}\n@media (min-width: 992px) {\n  .list-group-horizontal-lg {\n    flex-direction: row;\n  }\n  .list-group-horizontal-lg > .list-group-item:first-child {\n    border-bottom-left-radius: 0.25rem;\n    border-top-right-radius: 0;\n  }\n  .list-group-horizontal-lg > .list-group-item:last-child {\n    border-top-right-radius: 0.25rem;\n    border-bottom-left-radius: 0;\n  }\n  .list-group-horizontal-lg > .list-group-item.active {\n    margin-top: 0;\n  }\n  .list-group-horizontal-lg > .list-group-item + .list-group-item {\n    border-top-width: 1px;\n    border-left-width: 0;\n  }\n  .list-group-horizontal-lg > .list-group-item + .list-group-item.active {\n    margin-left: -1px;\n    border-left-width: 1px;\n  }\n}\n@media (min-width: 1200px) {\n  .list-group-horizontal-xl {\n    flex-direction: row;\n  }\n  .list-group-horizontal-xl > .list-group-item:first-child {\n    border-bottom-left-radius: 0.25rem;\n    border-top-right-radius: 0;\n  }\n  .list-group-horizontal-xl > .list-group-item:last-child {\n    border-top-right-radius: 0.25rem;\n    border-bottom-left-radius: 0;\n  }\n  .list-group-horizontal-xl > .list-group-item.active {\n    margin-top: 0;\n  }\n  .list-group-horizontal-xl > .list-group-item + .list-group-item {\n    border-top-width: 1px;\n    border-left-width: 0;\n  }\n  .list-group-horizontal-xl > .list-group-item + .list-group-item.active {\n    margin-left: -1px;\n    border-left-width: 1px;\n  }\n}\n@media (min-width: 1400px) {\n  .list-group-horizontal-xxl {\n    flex-direction: row;\n  }\n  .list-group-horizontal-xxl > .list-group-item:first-child {\n    border-bottom-left-radius: 0.25rem;\n    border-top-right-radius: 0;\n  }\n  .list-group-horizontal-xxl > .list-group-item:last-child {\n    border-top-right-radius: 0.25rem;\n    border-bottom-left-radius: 0;\n  }\n  .list-group-horizontal-xxl > .list-group-item.active {\n    margin-top: 0;\n  }\n  .list-group-horizontal-xxl > .list-group-item + .list-group-item {\n    border-top-width: 1px;\n    border-left-width: 0;\n  }\n  .list-group-horizontal-xxl > .list-group-item + .list-group-item.active {\n    margin-left: -1px;\n    border-left-width: 1px;\n  }\n}\n.list-group-flush {\n  border-radius: 0;\n}\n.list-group-flush > .list-group-item {\n  border-width: 0 0 1px;\n}\n.list-group-flush > .list-group-item:last-child {\n  border-bottom-width: 0;\n}\n\n.list-group-item-primary {\n  color: #084298;\n  background-color: #cfe2ff;\n}\n.list-group-item-primary.list-group-item-action:hover, .list-group-item-primary.list-group-item-action:focus {\n  color: #084298;\n  background-color: #bacbe6;\n}\n.list-group-item-primary.list-group-item-action.active {\n  color: #fff;\n  background-color: #084298;\n  border-color: #084298;\n}\n\n.list-group-item-secondary {\n  color: #41464b;\n  background-color: #e2e3e5;\n}\n.list-group-item-secondary.list-group-item-action:hover, .list-group-item-secondary.list-group-item-action:focus {\n  color: #41464b;\n  background-color: #cbccce;\n}\n.list-group-item-secondary.list-group-item-action.active {\n  color: #fff;\n  background-color: #41464b;\n  border-color: #41464b;\n}\n\n.list-group-item-success {\n  color: #0f5132;\n  background-color: #d1e7dd;\n}\n.list-group-item-success.list-group-item-action:hover, .list-group-item-success.list-group-item-action:focus {\n  color: #0f5132;\n  background-color: #bcd0c7;\n}\n.list-group-item-success.list-group-item-action.active {\n  color: #fff;\n  background-color: #0f5132;\n  border-color: #0f5132;\n}\n\n.list-group-item-info {\n  color: #055160;\n  background-color: #cff4fc;\n}\n.list-group-item-info.list-group-item-action:hover, .list-group-item-info.list-group-item-action:focus {\n  color: #055160;\n  background-color: #badce3;\n}\n.list-group-item-info.list-group-item-action.active {\n  color: #fff;\n  background-color: #055160;\n  border-color: #055160;\n}\n\n.list-group-item-warning {\n  color: #664d03;\n  background-color: #fff3cd;\n}\n.list-group-item-warning.list-group-item-action:hover, .list-group-item-warning.list-group-item-action:focus {\n  color: #664d03;\n  background-color: #e6dbb9;\n}\n.list-group-item-warning.list-group-item-action.active {\n  color: #fff;\n  background-color: #664d03;\n  border-color: #664d03;\n}\n\n.list-group-item-danger {\n  color: #842029;\n  background-color: #f8d7da;\n}\n.list-group-item-danger.list-group-item-action:hover, .list-group-item-danger.list-group-item-action:focus {\n  color: #842029;\n  background-color: #dfc2c4;\n}\n.list-group-item-danger.list-group-item-action.active {\n  color: #fff;\n  background-color: #842029;\n  border-color: #842029;\n}\n\n.list-group-item-light {\n  color: #636464;\n  background-color: #fefefe;\n}\n.list-group-item-light.list-group-item-action:hover, .list-group-item-light.list-group-item-action:focus {\n  color: #636464;\n  background-color: #e5e5e5;\n}\n.list-group-item-light.list-group-item-action.active {\n  color: #fff;\n  background-color: #636464;\n  border-color: #636464;\n}\n\n.list-group-item-dark {\n  color: #141619;\n  background-color: #d3d3d4;\n}\n.list-group-item-dark.list-group-item-action:hover, .list-group-item-dark.list-group-item-action:focus {\n  color: #141619;\n  background-color: #bebebf;\n}\n.list-group-item-dark.list-group-item-action.active {\n  color: #fff;\n  background-color: #141619;\n  border-color: #141619;\n}\n\n.btn-close {\n  box-sizing: content-box;\n  width: 1em;\n  height: 1em;\n  padding: 0.25em 0.25em;\n  color: #000;\n  background: transparent url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23000'%3e%3cpath d='M.293.293a1 1 0 011.414 0L8 6.586 14.293.293a1 1 0 111.414 1.414L9.414 8l6.293 6.293a1 1 0 01-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 01-1.414-1.414L6.586 8 .293 1.707a1 1 0 010-1.414z'/%3e%3c/svg%3e\") center/1em auto no-repeat;\n  border: 0;\n  border-radius: 0.25rem;\n  opacity: 0.5;\n}\n.btn-close:hover {\n  color: #000;\n  text-decoration: none;\n  opacity: 0.75;\n}\n.btn-close:focus {\n  outline: 0;\n  box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);\n  opacity: 1;\n}\n.btn-close:disabled, .btn-close.disabled {\n  pointer-events: none;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  user-select: none;\n  opacity: 0.25;\n}\n\n.btn-close-white {\n  filter: invert(1) grayscale(100%) brightness(200%);\n}\n\n.toast {\n  width: 350px;\n  max-width: 100%;\n  font-size: 0.875rem;\n  pointer-events: auto;\n  background-color: rgba(255, 255, 255, 0.85);\n  background-clip: padding-box;\n  border: 1px solid rgba(0, 0, 0, 0.1);\n  box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15);\n  border-radius: 0.25rem;\n}\n.toast.showing {\n  opacity: 0;\n}\n.toast:not(.show) {\n  display: none;\n}\n\n.toast-container {\n  width: -webkit-max-content;\n  width: -moz-max-content;\n  width: max-content;\n  max-width: 100%;\n  pointer-events: none;\n}\n.toast-container > :not(:last-child) {\n  margin-bottom: 0.75rem;\n}\n\n.toast-header {\n  display: flex;\n  align-items: center;\n  padding: 0.5rem 0.75rem;\n  color: #6c757d;\n  background-color: rgba(255, 255, 255, 0.85);\n  background-clip: padding-box;\n  border-bottom: 1px solid rgba(0, 0, 0, 0.05);\n  border-top-left-radius: calc(0.25rem - 1px);\n  border-top-right-radius: calc(0.25rem - 1px);\n}\n.toast-header .btn-close {\n  margin-right: -0.375rem;\n  margin-left: 0.75rem;\n}\n\n.toast-body {\n  padding: 0.75rem;\n  word-wrap: break-word;\n}\n\n.modal {\n  position: fixed;\n  top: 0;\n  left: 0;\n  z-index: 1055;\n  display: none;\n  width: 100%;\n  height: 100%;\n  overflow-x: hidden;\n  overflow-y: auto;\n  outline: 0;\n}\n\n.modal-dialog {\n  position: relative;\n  width: auto;\n  margin: 0.5rem;\n  pointer-events: none;\n}\n.modal.fade .modal-dialog {\n  transition: transform 0.3s ease-out;\n  transform: translate(0, -50px);\n}\n@media (prefers-reduced-motion: reduce) {\n  .modal.fade .modal-dialog {\n    transition: none;\n  }\n}\n.modal.show .modal-dialog {\n  transform: none;\n}\n.modal.modal-static .modal-dialog {\n  transform: scale(1.02);\n}\n\n.modal-dialog-scrollable {\n  height: calc(100% - 1rem);\n}\n.modal-dialog-scrollable .modal-content {\n  max-height: 100%;\n  overflow: hidden;\n}\n.modal-dialog-scrollable .modal-body {\n  overflow-y: auto;\n}\n\n.modal-dialog-centered {\n  display: flex;\n  align-items: center;\n  min-height: calc(100% - 1rem);\n}\n\n.modal-content {\n  position: relative;\n  display: flex;\n  flex-direction: column;\n  width: 100%;\n  pointer-events: auto;\n  background-color: #fff;\n  background-clip: padding-box;\n  border: 1px solid rgba(0, 0, 0, 0.2);\n  border-radius: 0.3rem;\n  outline: 0;\n}\n\n.modal-backdrop {\n  position: fixed;\n  top: 0;\n  left: 0;\n  z-index: 1050;\n  width: 100vw;\n  height: 100vh;\n  background-color: #000;\n}\n.modal-backdrop.fade {\n  opacity: 0;\n}\n.modal-backdrop.show {\n  opacity: 0.5;\n}\n\n.modal-header {\n  display: flex;\n  flex-shrink: 0;\n  align-items: center;\n  justify-content: space-between;\n  padding: 1rem 1rem;\n  border-bottom: 1px solid #dee2e6;\n  border-top-left-radius: calc(0.3rem - 1px);\n  border-top-right-radius: calc(0.3rem - 1px);\n}\n.modal-header .btn-close {\n  padding: 0.5rem 0.5rem;\n  margin: -0.5rem -0.5rem -0.5rem auto;\n}\n\n.modal-title {\n  margin-bottom: 0;\n  line-height: 1.5;\n}\n\n.modal-body {\n  position: relative;\n  flex: 1 1 auto;\n  padding: 1rem;\n}\n\n.modal-footer {\n  display: flex;\n  flex-wrap: wrap;\n  flex-shrink: 0;\n  align-items: center;\n  justify-content: flex-end;\n  padding: 0.75rem;\n  border-top: 1px solid #dee2e6;\n  border-bottom-right-radius: calc(0.3rem - 1px);\n  border-bottom-left-radius: calc(0.3rem - 1px);\n}\n.modal-footer > * {\n  margin: 0.25rem;\n}\n\n@media (min-width: 576px) {\n  .modal-dialog {\n    max-width: 500px;\n    margin: 1.75rem auto;\n  }\n\n  .modal-dialog-scrollable {\n    height: calc(100% - 3.5rem);\n  }\n\n  .modal-dialog-centered {\n    min-height: calc(100% - 3.5rem);\n  }\n\n  .modal-sm {\n    max-width: 300px;\n  }\n}\n@media (min-width: 992px) {\n  .modal-lg,\n.modal-xl {\n    max-width: 800px;\n  }\n}\n@media (min-width: 1200px) {\n  .modal-xl {\n    max-width: 1140px;\n  }\n}\n.modal-fullscreen {\n  width: 100vw;\n  max-width: none;\n  height: 100%;\n  margin: 0;\n}\n.modal-fullscreen .modal-content {\n  height: 100%;\n  border: 0;\n  border-radius: 0;\n}\n.modal-fullscreen .modal-header {\n  border-radius: 0;\n}\n.modal-fullscreen .modal-body {\n  overflow-y: auto;\n}\n.modal-fullscreen .modal-footer {\n  border-radius: 0;\n}\n\n@media (max-width: 575.98px) {\n  .modal-fullscreen-sm-down {\n    width: 100vw;\n    max-width: none;\n    height: 100%;\n    margin: 0;\n  }\n  .modal-fullscreen-sm-down .modal-content {\n    height: 100%;\n    border: 0;\n    border-radius: 0;\n  }\n  .modal-fullscreen-sm-down .modal-header {\n    border-radius: 0;\n  }\n  .modal-fullscreen-sm-down .modal-body {\n    overflow-y: auto;\n  }\n  .modal-fullscreen-sm-down .modal-footer {\n    border-radius: 0;\n  }\n}\n@media (max-width: 767.98px) {\n  .modal-fullscreen-md-down {\n    width: 100vw;\n    max-width: none;\n    height: 100%;\n    margin: 0;\n  }\n  .modal-fullscreen-md-down .modal-content {\n    height: 100%;\n    border: 0;\n    border-radius: 0;\n  }\n  .modal-fullscreen-md-down .modal-header {\n    border-radius: 0;\n  }\n  .modal-fullscreen-md-down .modal-body {\n    overflow-y: auto;\n  }\n  .modal-fullscreen-md-down .modal-footer {\n    border-radius: 0;\n  }\n}\n@media (max-width: 991.98px) {\n  .modal-fullscreen-lg-down {\n    width: 100vw;\n    max-width: none;\n    height: 100%;\n    margin: 0;\n  }\n  .modal-fullscreen-lg-down .modal-content {\n    height: 100%;\n    border: 0;\n    border-radius: 0;\n  }\n  .modal-fullscreen-lg-down .modal-header {\n    border-radius: 0;\n  }\n  .modal-fullscreen-lg-down .modal-body {\n    overflow-y: auto;\n  }\n  .modal-fullscreen-lg-down .modal-footer {\n    border-radius: 0;\n  }\n}\n@media (max-width: 1199.98px) {\n  .modal-fullscreen-xl-down {\n    width: 100vw;\n    max-width: none;\n    height: 100%;\n    margin: 0;\n  }\n  .modal-fullscreen-xl-down .modal-content {\n    height: 100%;\n    border: 0;\n    border-radius: 0;\n  }\n  .modal-fullscreen-xl-down .modal-header {\n    border-radius: 0;\n  }\n  .modal-fullscreen-xl-down .modal-body {\n    overflow-y: auto;\n  }\n  .modal-fullscreen-xl-down .modal-footer {\n    border-radius: 0;\n  }\n}\n@media (max-width: 1399.98px) {\n  .modal-fullscreen-xxl-down {\n    width: 100vw;\n    max-width: none;\n    height: 100%;\n    margin: 0;\n  }\n  .modal-fullscreen-xxl-down .modal-content {\n    height: 100%;\n    border: 0;\n    border-radius: 0;\n  }\n  .modal-fullscreen-xxl-down .modal-header {\n    border-radius: 0;\n  }\n  .modal-fullscreen-xxl-down .modal-body {\n    overflow-y: auto;\n  }\n  .modal-fullscreen-xxl-down .modal-footer {\n    border-radius: 0;\n  }\n}\n.tooltip {\n  position: absolute;\n  z-index: 1080;\n  display: block;\n  margin: 0;\n  font-family: var(--bs-font-sans-serif);\n  font-style: normal;\n  font-weight: 400;\n  line-height: 1.5;\n  text-align: left;\n  text-align: start;\n  text-decoration: none;\n  text-shadow: none;\n  text-transform: none;\n  letter-spacing: normal;\n  word-break: normal;\n  word-spacing: normal;\n  white-space: normal;\n  line-break: auto;\n  font-size: 0.875rem;\n  word-wrap: break-word;\n  opacity: 0;\n}\n.tooltip.show {\n  opacity: 0.9;\n}\n.tooltip .tooltip-arrow {\n  position: absolute;\n  display: block;\n  width: 0.8rem;\n  height: 0.4rem;\n}\n.tooltip .tooltip-arrow::before {\n  position: absolute;\n  content: \"\";\n  border-color: transparent;\n  border-style: solid;\n}\n\n.bs-tooltip-top, .bs-tooltip-auto[data-popper-placement^=top] {\n  padding: 0.4rem 0;\n}\n.bs-tooltip-top .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow {\n  bottom: 0;\n}\n.bs-tooltip-top .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow::before {\n  top: -1px;\n  border-width: 0.4rem 0.4rem 0;\n  border-top-color: #000;\n}\n\n.bs-tooltip-end, .bs-tooltip-auto[data-popper-placement^=right] {\n  padding: 0 0.4rem;\n}\n.bs-tooltip-end .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow {\n  left: 0;\n  width: 0.4rem;\n  height: 0.8rem;\n}\n.bs-tooltip-end .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow::before {\n  right: -1px;\n  border-width: 0.4rem 0.4rem 0.4rem 0;\n  border-right-color: #000;\n}\n\n.bs-tooltip-bottom, .bs-tooltip-auto[data-popper-placement^=bottom] {\n  padding: 0.4rem 0;\n}\n.bs-tooltip-bottom .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow {\n  top: 0;\n}\n.bs-tooltip-bottom .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow::before {\n  bottom: -1px;\n  border-width: 0 0.4rem 0.4rem;\n  border-bottom-color: #000;\n}\n\n.bs-tooltip-start, .bs-tooltip-auto[data-popper-placement^=left] {\n  padding: 0 0.4rem;\n}\n.bs-tooltip-start .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow {\n  right: 0;\n  width: 0.4rem;\n  height: 0.8rem;\n}\n.bs-tooltip-start .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow::before {\n  left: -1px;\n  border-width: 0.4rem 0 0.4rem 0.4rem;\n  border-left-color: #000;\n}\n\n.tooltip-inner {\n  max-width: 200px;\n  padding: 0.25rem 0.5rem;\n  color: #fff;\n  text-align: center;\n  background-color: #000;\n  border-radius: 0.25rem;\n}\n\n.popover {\n  position: absolute;\n  top: 0;\n  left: 0 /* rtl:ignore */;\n  z-index: 1070;\n  display: block;\n  max-width: 276px;\n  font-family: var(--bs-font-sans-serif);\n  font-style: normal;\n  font-weight: 400;\n  line-height: 1.5;\n  text-align: left;\n  text-align: start;\n  text-decoration: none;\n  text-shadow: none;\n  text-transform: none;\n  letter-spacing: normal;\n  word-break: normal;\n  word-spacing: normal;\n  white-space: normal;\n  line-break: auto;\n  font-size: 0.875rem;\n  word-wrap: break-word;\n  background-color: #fff;\n  background-clip: padding-box;\n  border: 1px solid rgba(0, 0, 0, 0.2);\n  border-radius: 0.3rem;\n}\n.popover .popover-arrow {\n  position: absolute;\n  display: block;\n  width: 1rem;\n  height: 0.5rem;\n}\n.popover .popover-arrow::before, .popover .popover-arrow::after {\n  position: absolute;\n  display: block;\n  content: \"\";\n  border-color: transparent;\n  border-style: solid;\n}\n\n.bs-popover-top > .popover-arrow, .bs-popover-auto[data-popper-placement^=top] > .popover-arrow {\n  bottom: calc(-0.5rem - 1px);\n}\n.bs-popover-top > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=top] > .popover-arrow::before {\n  bottom: 0;\n  border-width: 0.5rem 0.5rem 0;\n  border-top-color: rgba(0, 0, 0, 0.25);\n}\n.bs-popover-top > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=top] > .popover-arrow::after {\n  bottom: 1px;\n  border-width: 0.5rem 0.5rem 0;\n  border-top-color: #fff;\n}\n\n.bs-popover-end > .popover-arrow, .bs-popover-auto[data-popper-placement^=right] > .popover-arrow {\n  left: calc(-0.5rem - 1px);\n  width: 0.5rem;\n  height: 1rem;\n}\n.bs-popover-end > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=right] > .popover-arrow::before {\n  left: 0;\n  border-width: 0.5rem 0.5rem 0.5rem 0;\n  border-right-color: rgba(0, 0, 0, 0.25);\n}\n.bs-popover-end > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=right] > .popover-arrow::after {\n  left: 1px;\n  border-width: 0.5rem 0.5rem 0.5rem 0;\n  border-right-color: #fff;\n}\n\n.bs-popover-bottom > .popover-arrow, .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow {\n  top: calc(-0.5rem - 1px);\n}\n.bs-popover-bottom > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow::before {\n  top: 0;\n  border-width: 0 0.5rem 0.5rem 0.5rem;\n  border-bottom-color: rgba(0, 0, 0, 0.25);\n}\n.bs-popover-bottom > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow::after {\n  top: 1px;\n  border-width: 0 0.5rem 0.5rem 0.5rem;\n  border-bottom-color: #fff;\n}\n.bs-popover-bottom .popover-header::before, .bs-popover-auto[data-popper-placement^=bottom] .popover-header::before {\n  position: absolute;\n  top: 0;\n  left: 50%;\n  display: block;\n  width: 1rem;\n  margin-left: -0.5rem;\n  content: \"\";\n  border-bottom: 1px solid #f0f0f0;\n}\n\n.bs-popover-start > .popover-arrow, .bs-popover-auto[data-popper-placement^=left] > .popover-arrow {\n  right: calc(-0.5rem - 1px);\n  width: 0.5rem;\n  height: 1rem;\n}\n.bs-popover-start > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=left] > .popover-arrow::before {\n  right: 0;\n  border-width: 0.5rem 0 0.5rem 0.5rem;\n  border-left-color: rgba(0, 0, 0, 0.25);\n}\n.bs-popover-start > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=left] > .popover-arrow::after {\n  right: 1px;\n  border-width: 0.5rem 0 0.5rem 0.5rem;\n  border-left-color: #fff;\n}\n\n.popover-header {\n  padding: 0.5rem 1rem;\n  margin-bottom: 0;\n  font-size: 1rem;\n  background-color: #f0f0f0;\n  border-bottom: 1px solid rgba(0, 0, 0, 0.2);\n  border-top-left-radius: calc(0.3rem - 1px);\n  border-top-right-radius: calc(0.3rem - 1px);\n}\n.popover-header:empty {\n  display: none;\n}\n\n.popover-body {\n  padding: 1rem 1rem;\n  color: #212529;\n}\n\n.carousel {\n  position: relative;\n}\n\n.carousel.pointer-event {\n  touch-action: pan-y;\n}\n\n.carousel-inner {\n  position: relative;\n  width: 100%;\n  overflow: hidden;\n}\n.carousel-inner::after {\n  display: block;\n  clear: both;\n  content: \"\";\n}\n\n.carousel-item {\n  position: relative;\n  display: none;\n  float: left;\n  width: 100%;\n  margin-right: -100%;\n  -webkit-backface-visibility: hidden;\n  backface-visibility: hidden;\n  transition: transform 0.6s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n  .carousel-item {\n    transition: none;\n  }\n}\n\n.carousel-item.active,\n.carousel-item-next,\n.carousel-item-prev {\n  display: block;\n}\n\n/* rtl:begin:ignore */\n.carousel-item-next:not(.carousel-item-start),\n.active.carousel-item-end {\n  transform: translateX(100%);\n}\n\n.carousel-item-prev:not(.carousel-item-end),\n.active.carousel-item-start {\n  transform: translateX(-100%);\n}\n\n/* rtl:end:ignore */\n.carousel-fade .carousel-item {\n  opacity: 0;\n  transition-property: opacity;\n  transform: none;\n}\n.carousel-fade .carousel-item.active,\n.carousel-fade .carousel-item-next.carousel-item-start,\n.carousel-fade .carousel-item-prev.carousel-item-end {\n  z-index: 1;\n  opacity: 1;\n}\n.carousel-fade .active.carousel-item-start,\n.carousel-fade .active.carousel-item-end {\n  z-index: 0;\n  opacity: 0;\n  transition: opacity 0s 0.6s;\n}\n@media (prefers-reduced-motion: reduce) {\n  .carousel-fade .active.carousel-item-start,\n.carousel-fade .active.carousel-item-end {\n    transition: none;\n  }\n}\n\n.carousel-control-prev,\n.carousel-control-next {\n  position: absolute;\n  top: 0;\n  bottom: 0;\n  z-index: 1;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  width: 15%;\n  padding: 0;\n  color: #fff;\n  text-align: center;\n  background: none;\n  border: 0;\n  opacity: 0.5;\n  transition: opacity 0.15s ease;\n}\n@media (prefers-reduced-motion: reduce) {\n  .carousel-control-prev,\n.carousel-control-next {\n    transition: none;\n  }\n}\n.carousel-control-prev:hover, .carousel-control-prev:focus,\n.carousel-control-next:hover,\n.carousel-control-next:focus {\n  color: #fff;\n  text-decoration: none;\n  outline: 0;\n  opacity: 0.9;\n}\n\n.carousel-control-prev {\n  left: 0;\n}\n\n.carousel-control-next {\n  right: 0;\n}\n\n.carousel-control-prev-icon,\n.carousel-control-next-icon {\n  display: inline-block;\n  width: 2rem;\n  height: 2rem;\n  background-repeat: no-repeat;\n  background-position: 50%;\n  background-size: 100% 100%;\n}\n\n/* rtl:options: {\n  \"autoRename\": true,\n  \"stringMap\":[ {\n    \"name\"    : \"prev-next\",\n    \"search\"  : \"prev\",\n    \"replace\" : \"next\"\n  } ]\n} */\n.carousel-control-prev-icon {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0z'/%3e%3c/svg%3e\");\n}\n\n.carousel-control-next-icon {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e\");\n}\n\n.carousel-indicators {\n  position: absolute;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 2;\n  display: flex;\n  justify-content: center;\n  padding: 0;\n  margin-right: 15%;\n  margin-bottom: 1rem;\n  margin-left: 15%;\n  list-style: none;\n}\n.carousel-indicators [data-bs-target] {\n  box-sizing: content-box;\n  flex: 0 1 auto;\n  width: 30px;\n  height: 3px;\n  padding: 0;\n  margin-right: 3px;\n  margin-left: 3px;\n  text-indent: -999px;\n  cursor: pointer;\n  background-color: #fff;\n  background-clip: padding-box;\n  border: 0;\n  border-top: 10px solid transparent;\n  border-bottom: 10px solid transparent;\n  opacity: 0.5;\n  transition: opacity 0.6s ease;\n}\n@media (prefers-reduced-motion: reduce) {\n  .carousel-indicators [data-bs-target] {\n    transition: none;\n  }\n}\n.carousel-indicators .active {\n  opacity: 1;\n}\n\n.carousel-caption {\n  position: absolute;\n  right: 15%;\n  bottom: 1.25rem;\n  left: 15%;\n  padding-top: 1.25rem;\n  padding-bottom: 1.25rem;\n  color: #fff;\n  text-align: center;\n}\n\n.carousel-dark .carousel-control-prev-icon,\n.carousel-dark .carousel-control-next-icon {\n  filter: invert(1) grayscale(100);\n}\n.carousel-dark .carousel-indicators [data-bs-target] {\n  background-color: #000;\n}\n.carousel-dark .carousel-caption {\n  color: #000;\n}\n\n@-webkit-keyframes spinner-border {\n  to {\n    transform: rotate(360deg) /* rtl:ignore */;\n  }\n}\n\n@keyframes spinner-border {\n  to {\n    transform: rotate(360deg) /* rtl:ignore */;\n  }\n}\n.spinner-border {\n  display: inline-block;\n  width: 2rem;\n  height: 2rem;\n  vertical-align: -0.125em;\n  border: 0.25em solid currentColor;\n  border-right-color: transparent;\n  border-radius: 50%;\n  -webkit-animation: 0.75s linear infinite spinner-border;\n  animation: 0.75s linear infinite spinner-border;\n}\n\n.spinner-border-sm {\n  width: 1rem;\n  height: 1rem;\n  border-width: 0.2em;\n}\n\n@-webkit-keyframes spinner-grow {\n  0% {\n    transform: scale(0);\n  }\n  50% {\n    opacity: 1;\n    transform: none;\n  }\n}\n\n@keyframes spinner-grow {\n  0% {\n    transform: scale(0);\n  }\n  50% {\n    opacity: 1;\n    transform: none;\n  }\n}\n.spinner-grow {\n  display: inline-block;\n  width: 2rem;\n  height: 2rem;\n  vertical-align: -0.125em;\n  background-color: currentColor;\n  border-radius: 50%;\n  opacity: 0;\n  -webkit-animation: 0.75s linear infinite spinner-grow;\n  animation: 0.75s linear infinite spinner-grow;\n}\n\n.spinner-grow-sm {\n  width: 1rem;\n  height: 1rem;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .spinner-border,\n.spinner-grow {\n    -webkit-animation-duration: 1.5s;\n    animation-duration: 1.5s;\n  }\n}\n.offcanvas {\n  position: fixed;\n  bottom: 0;\n  z-index: 1045;\n  display: flex;\n  flex-direction: column;\n  max-width: 100%;\n  visibility: hidden;\n  background-color: #fff;\n  background-clip: padding-box;\n  outline: 0;\n  transition: transform 0.3s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n  .offcanvas {\n    transition: none;\n  }\n}\n\n.offcanvas-backdrop {\n  position: fixed;\n  top: 0;\n  left: 0;\n  z-index: 1040;\n  width: 100vw;\n  height: 100vh;\n  background-color: #000;\n}\n.offcanvas-backdrop.fade {\n  opacity: 0;\n}\n.offcanvas-backdrop.show {\n  opacity: 0.5;\n}\n\n.offcanvas-header {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  padding: 1rem 1rem;\n}\n.offcanvas-header .btn-close {\n  padding: 0.5rem 0.5rem;\n  margin-top: -0.5rem;\n  margin-right: -0.5rem;\n  margin-bottom: -0.5rem;\n}\n\n.offcanvas-title {\n  margin-bottom: 0;\n  line-height: 1.5;\n}\n\n.offcanvas-body {\n  flex-grow: 1;\n  padding: 1rem 1rem;\n  overflow-y: auto;\n}\n\n.offcanvas-start {\n  top: 0;\n  left: 0;\n  width: 400px;\n  border-right: 1px solid rgba(0, 0, 0, 0.2);\n  transform: translateX(-100%);\n}\n\n.offcanvas-end {\n  top: 0;\n  right: 0;\n  width: 400px;\n  border-left: 1px solid rgba(0, 0, 0, 0.2);\n  transform: translateX(100%);\n}\n\n.offcanvas-top {\n  top: 0;\n  right: 0;\n  left: 0;\n  height: 30vh;\n  max-height: 100%;\n  border-bottom: 1px solid rgba(0, 0, 0, 0.2);\n  transform: translateY(-100%);\n}\n\n.offcanvas-bottom {\n  right: 0;\n  left: 0;\n  height: 30vh;\n  max-height: 100%;\n  border-top: 1px solid rgba(0, 0, 0, 0.2);\n  transform: translateY(100%);\n}\n\n.offcanvas.show {\n  transform: none;\n}\n\n.placeholder {\n  display: inline-block;\n  min-height: 1em;\n  vertical-align: middle;\n  cursor: wait;\n  background-color: currentColor;\n  opacity: 0.5;\n}\n.placeholder.btn::before {\n  display: inline-block;\n  content: \"\";\n}\n\n.placeholder-xs {\n  min-height: 0.6em;\n}\n\n.placeholder-sm {\n  min-height: 0.8em;\n}\n\n.placeholder-lg {\n  min-height: 1.2em;\n}\n\n.placeholder-glow .placeholder {\n  -webkit-animation: placeholder-glow 2s ease-in-out infinite;\n  animation: placeholder-glow 2s ease-in-out infinite;\n}\n\n@-webkit-keyframes placeholder-glow {\n  50% {\n    opacity: 0.2;\n  }\n}\n\n@keyframes placeholder-glow {\n  50% {\n    opacity: 0.2;\n  }\n}\n.placeholder-wave {\n  -webkit-mask-image: linear-gradient(130deg, #000 55%, rgba(0, 0, 0, 0.8) 75%, #000 95%);\n  mask-image: linear-gradient(130deg, #000 55%, rgba(0, 0, 0, 0.8) 75%, #000 95%);\n  -webkit-mask-size: 200% 100%;\n  mask-size: 200% 100%;\n  -webkit-animation: placeholder-wave 2s linear infinite;\n  animation: placeholder-wave 2s linear infinite;\n}\n\n@-webkit-keyframes placeholder-wave {\n  100% {\n    -webkit-mask-position: -200% 0%;\n    mask-position: -200% 0%;\n  }\n}\n\n@keyframes placeholder-wave {\n  100% {\n    -webkit-mask-position: -200% 0%;\n    mask-position: -200% 0%;\n  }\n}\n.clearfix::after {\n  display: block;\n  clear: both;\n  content: \"\";\n}\n\n.link-primary {\n  color: #0d6efd;\n}\n.link-primary:hover, .link-primary:focus {\n  color: #0a58ca;\n}\n\n.link-secondary {\n  color: #6c757d;\n}\n.link-secondary:hover, .link-secondary:focus {\n  color: #565e64;\n}\n\n.link-success {\n  color: #198754;\n}\n.link-success:hover, .link-success:focus {\n  color: #146c43;\n}\n\n.link-info {\n  color: #0dcaf0;\n}\n.link-info:hover, .link-info:focus {\n  color: #3dd5f3;\n}\n\n.link-warning {\n  color: #ffc107;\n}\n.link-warning:hover, .link-warning:focus {\n  color: #ffcd39;\n}\n\n.link-danger {\n  color: #dc3545;\n}\n.link-danger:hover, .link-danger:focus {\n  color: #b02a37;\n}\n\n.link-light {\n  color: #f8f9fa;\n}\n.link-light:hover, .link-light:focus {\n  color: #f9fafb;\n}\n\n.link-dark {\n  color: #212529;\n}\n.link-dark:hover, .link-dark:focus {\n  color: #1a1e21;\n}\n\n.ratio {\n  position: relative;\n  width: 100%;\n}\n.ratio::before {\n  display: block;\n  padding-top: var(--bs-aspect-ratio);\n  content: \"\";\n}\n.ratio > * {\n  position: absolute;\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n}\n\n.ratio-1x1 {\n  --bs-aspect-ratio: 100%;\n}\n\n.ratio-4x3 {\n  --bs-aspect-ratio: 75%;\n}\n\n.ratio-16x9 {\n  --bs-aspect-ratio: 56.25%;\n}\n\n.ratio-21x9 {\n  --bs-aspect-ratio: 42.8571428571%;\n}\n\n.fixed-top {\n  position: fixed;\n  top: 0;\n  right: 0;\n  left: 0;\n  z-index: 1030;\n}\n\n.fixed-bottom {\n  position: fixed;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 1030;\n}\n\n.sticky-top {\n  position: -webkit-sticky;\n  position: sticky;\n  top: 0;\n  z-index: 1020;\n}\n\n@media (min-width: 576px) {\n  .sticky-sm-top {\n    position: -webkit-sticky;\n    position: sticky;\n    top: 0;\n    z-index: 1020;\n  }\n}\n@media (min-width: 768px) {\n  .sticky-md-top {\n    position: -webkit-sticky;\n    position: sticky;\n    top: 0;\n    z-index: 1020;\n  }\n}\n@media (min-width: 992px) {\n  .sticky-lg-top {\n    position: -webkit-sticky;\n    position: sticky;\n    top: 0;\n    z-index: 1020;\n  }\n}\n@media (min-width: 1200px) {\n  .sticky-xl-top {\n    position: -webkit-sticky;\n    position: sticky;\n    top: 0;\n    z-index: 1020;\n  }\n}\n@media (min-width: 1400px) {\n  .sticky-xxl-top {\n    position: -webkit-sticky;\n    position: sticky;\n    top: 0;\n    z-index: 1020;\n  }\n}\n.hstack {\n  display: flex;\n  flex-direction: row;\n  align-items: center;\n  align-self: stretch;\n}\n\n.vstack {\n  display: flex;\n  flex: 1 1 auto;\n  flex-direction: column;\n  align-self: stretch;\n}\n\n.visually-hidden,\n.visually-hidden-focusable:not(:focus):not(:focus-within) {\n  position: absolute !important;\n  width: 1px !important;\n  height: 1px !important;\n  padding: 0 !important;\n  margin: -1px !important;\n  overflow: hidden !important;\n  clip: rect(0, 0, 0, 0) !important;\n  white-space: nowrap !important;\n  border: 0 !important;\n}\n\n.stretched-link::after {\n  position: absolute;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 1;\n  content: \"\";\n}\n\n.text-truncate {\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n}\n\n.vr {\n  display: inline-block;\n  align-self: stretch;\n  width: 1px;\n  min-height: 1em;\n  background-color: currentColor;\n  opacity: 0.25;\n}\n\n.align-baseline {\n  vertical-align: baseline !important;\n}\n\n.align-top {\n  vertical-align: top !important;\n}\n\n.align-middle {\n  vertical-align: middle !important;\n}\n\n.align-bottom {\n  vertical-align: bottom !important;\n}\n\n.align-text-bottom {\n  vertical-align: text-bottom !important;\n}\n\n.align-text-top {\n  vertical-align: text-top !important;\n}\n\n.float-start {\n  float: left !important;\n}\n\n.float-end {\n  float: right !important;\n}\n\n.float-none {\n  float: none !important;\n}\n\n.opacity-0 {\n  opacity: 0 !important;\n}\n\n.opacity-25 {\n  opacity: 0.25 !important;\n}\n\n.opacity-50 {\n  opacity: 0.5 !important;\n}\n\n.opacity-75 {\n  opacity: 0.75 !important;\n}\n\n.opacity-100 {\n  opacity: 1 !important;\n}\n\n.overflow-auto {\n  overflow: auto !important;\n}\n\n.overflow-hidden {\n  overflow: hidden !important;\n}\n\n.overflow-visible {\n  overflow: visible !important;\n}\n\n.overflow-scroll {\n  overflow: scroll !important;\n}\n\n.d-inline {\n  display: inline !important;\n}\n\n.d-inline-block {\n  display: inline-block !important;\n}\n\n.d-block {\n  display: block !important;\n}\n\n.d-grid {\n  display: grid !important;\n}\n\n.d-table {\n  display: table !important;\n}\n\n.d-table-row {\n  display: table-row !important;\n}\n\n.d-table-cell {\n  display: table-cell !important;\n}\n\n.d-flex {\n  display: flex !important;\n}\n\n.d-inline-flex {\n  display: inline-flex !important;\n}\n\n.d-none {\n  display: none !important;\n}\n\n.shadow {\n  box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15) !important;\n}\n\n.shadow-sm {\n  box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075) !important;\n}\n\n.shadow-lg {\n  box-shadow: 0 1rem 3rem rgba(0, 0, 0, 0.175) !important;\n}\n\n.shadow-none {\n  box-shadow: none !important;\n}\n\n.position-static {\n  position: static !important;\n}\n\n.position-relative {\n  position: relative !important;\n}\n\n.position-absolute {\n  position: absolute !important;\n}\n\n.position-fixed {\n  position: fixed !important;\n}\n\n.position-sticky {\n  position: -webkit-sticky !important;\n  position: sticky !important;\n}\n\n.top-0 {\n  top: 0 !important;\n}\n\n.top-50 {\n  top: 50% !important;\n}\n\n.top-100 {\n  top: 100% !important;\n}\n\n.bottom-0 {\n  bottom: 0 !important;\n}\n\n.bottom-50 {\n  bottom: 50% !important;\n}\n\n.bottom-100 {\n  bottom: 100% !important;\n}\n\n.start-0 {\n  left: 0 !important;\n}\n\n.start-50 {\n  left: 50% !important;\n}\n\n.start-100 {\n  left: 100% !important;\n}\n\n.end-0 {\n  right: 0 !important;\n}\n\n.end-50 {\n  right: 50% !important;\n}\n\n.end-100 {\n  right: 100% !important;\n}\n\n.translate-middle {\n  transform: translate(-50%, -50%) !important;\n}\n\n.translate-middle-x {\n  transform: translateX(-50%) !important;\n}\n\n.translate-middle-y {\n  transform: translateY(-50%) !important;\n}\n\n.border {\n  border: 1px solid #dee2e6 !important;\n}\n\n.border-0 {\n  border: 0 !important;\n}\n\n.border-top {\n  border-top: 1px solid #dee2e6 !important;\n}\n\n.border-top-0 {\n  border-top: 0 !important;\n}\n\n.border-end {\n  border-right: 1px solid #dee2e6 !important;\n}\n\n.border-end-0 {\n  border-right: 0 !important;\n}\n\n.border-bottom {\n  border-bottom: 1px solid #dee2e6 !important;\n}\n\n.border-bottom-0 {\n  border-bottom: 0 !important;\n}\n\n.border-start {\n  border-left: 1px solid #dee2e6 !important;\n}\n\n.border-start-0 {\n  border-left: 0 !important;\n}\n\n.border-primary {\n  border-color: #0d6efd !important;\n}\n\n.border-secondary {\n  border-color: #6c757d !important;\n}\n\n.border-success {\n  border-color: #198754 !important;\n}\n\n.border-info {\n  border-color: #0dcaf0 !important;\n}\n\n.border-warning {\n  border-color: #ffc107 !important;\n}\n\n.border-danger {\n  border-color: #dc3545 !important;\n}\n\n.border-light {\n  border-color: #f8f9fa !important;\n}\n\n.border-dark {\n  border-color: #212529 !important;\n}\n\n.border-white {\n  border-color: #fff !important;\n}\n\n.border-1 {\n  border-width: 1px !important;\n}\n\n.border-2 {\n  border-width: 2px !important;\n}\n\n.border-3 {\n  border-width: 3px !important;\n}\n\n.border-4 {\n  border-width: 4px !important;\n}\n\n.border-5 {\n  border-width: 5px !important;\n}\n\n.w-25 {\n  width: 25% !important;\n}\n\n.w-50 {\n  width: 50% !important;\n}\n\n.w-75 {\n  width: 75% !important;\n}\n\n.w-100 {\n  width: 100% !important;\n}\n\n.w-auto {\n  width: auto !important;\n}\n\n.mw-100 {\n  max-width: 100% !important;\n}\n\n.vw-100 {\n  width: 100vw !important;\n}\n\n.min-vw-100 {\n  min-width: 100vw !important;\n}\n\n.h-25 {\n  height: 25% !important;\n}\n\n.h-50 {\n  height: 50% !important;\n}\n\n.h-75 {\n  height: 75% !important;\n}\n\n.h-100 {\n  height: 100% !important;\n}\n\n.h-auto {\n  height: auto !important;\n}\n\n.mh-100 {\n  max-height: 100% !important;\n}\n\n.vh-100 {\n  height: 100vh !important;\n}\n\n.min-vh-100 {\n  min-height: 100vh !important;\n}\n\n.flex-fill {\n  flex: 1 1 auto !important;\n}\n\n.flex-row {\n  flex-direction: row !important;\n}\n\n.flex-column {\n  flex-direction: column !important;\n}\n\n.flex-row-reverse {\n  flex-direction: row-reverse !important;\n}\n\n.flex-column-reverse {\n  flex-direction: column-reverse !important;\n}\n\n.flex-grow-0 {\n  flex-grow: 0 !important;\n}\n\n.flex-grow-1 {\n  flex-grow: 1 !important;\n}\n\n.flex-shrink-0 {\n  flex-shrink: 0 !important;\n}\n\n.flex-shrink-1 {\n  flex-shrink: 1 !important;\n}\n\n.flex-wrap {\n  flex-wrap: wrap !important;\n}\n\n.flex-nowrap {\n  flex-wrap: nowrap !important;\n}\n\n.flex-wrap-reverse {\n  flex-wrap: wrap-reverse !important;\n}\n\n.gap-0 {\n  gap: 0 !important;\n}\n\n.gap-1 {\n  gap: 0.25rem !important;\n}\n\n.gap-2 {\n  gap: 0.5rem !important;\n}\n\n.gap-3 {\n  gap: 1rem !important;\n}\n\n.gap-4 {\n  gap: 1.5rem !important;\n}\n\n.gap-5 {\n  gap: 3rem !important;\n}\n\n.justify-content-start {\n  justify-content: flex-start !important;\n}\n\n.justify-content-end {\n  justify-content: flex-end !important;\n}\n\n.justify-content-center {\n  justify-content: center !important;\n}\n\n.justify-content-between {\n  justify-content: space-between !important;\n}\n\n.justify-content-around {\n  justify-content: space-around !important;\n}\n\n.justify-content-evenly {\n  justify-content: space-evenly !important;\n}\n\n.align-items-start {\n  align-items: flex-start !important;\n}\n\n.align-items-end {\n  align-items: flex-end !important;\n}\n\n.align-items-center {\n  align-items: center !important;\n}\n\n.align-items-baseline {\n  align-items: baseline !important;\n}\n\n.align-items-stretch {\n  align-items: stretch !important;\n}\n\n.align-content-start {\n  align-content: flex-start !important;\n}\n\n.align-content-end {\n  align-content: flex-end !important;\n}\n\n.align-content-center {\n  align-content: center !important;\n}\n\n.align-content-between {\n  align-content: space-between !important;\n}\n\n.align-content-around {\n  align-content: space-around !important;\n}\n\n.align-content-stretch {\n  align-content: stretch !important;\n}\n\n.align-self-auto {\n  align-self: auto !important;\n}\n\n.align-self-start {\n  align-self: flex-start !important;\n}\n\n.align-self-end {\n  align-self: flex-end !important;\n}\n\n.align-self-center {\n  align-self: center !important;\n}\n\n.align-self-baseline {\n  align-self: baseline !important;\n}\n\n.align-self-stretch {\n  align-self: stretch !important;\n}\n\n.order-first {\n  order: -1 !important;\n}\n\n.order-0 {\n  order: 0 !important;\n}\n\n.order-1 {\n  order: 1 !important;\n}\n\n.order-2 {\n  order: 2 !important;\n}\n\n.order-3 {\n  order: 3 !important;\n}\n\n.order-4 {\n  order: 4 !important;\n}\n\n.order-5 {\n  order: 5 !important;\n}\n\n.order-last {\n  order: 6 !important;\n}\n\n.m-0 {\n  margin: 0 !important;\n}\n\n.m-1 {\n  margin: 0.25rem !important;\n}\n\n.m-2 {\n  margin: 0.5rem !important;\n}\n\n.m-3 {\n  margin: 1rem !important;\n}\n\n.m-4 {\n  margin: 1.5rem !important;\n}\n\n.m-5 {\n  margin: 3rem !important;\n}\n\n.m-auto {\n  margin: auto !important;\n}\n\n.mx-0 {\n  margin-right: 0 !important;\n  margin-left: 0 !important;\n}\n\n.mx-1 {\n  margin-right: 0.25rem !important;\n  margin-left: 0.25rem !important;\n}\n\n.mx-2 {\n  margin-right: 0.5rem !important;\n  margin-left: 0.5rem !important;\n}\n\n.mx-3 {\n  margin-right: 1rem !important;\n  margin-left: 1rem !important;\n}\n\n.mx-4 {\n  margin-right: 1.5rem !important;\n  margin-left: 1.5rem !important;\n}\n\n.mx-5 {\n  margin-right: 3rem !important;\n  margin-left: 3rem !important;\n}\n\n.mx-auto {\n  margin-right: auto !important;\n  margin-left: auto !important;\n}\n\n.my-0 {\n  margin-top: 0 !important;\n  margin-bottom: 0 !important;\n}\n\n.my-1 {\n  margin-top: 0.25rem !important;\n  margin-bottom: 0.25rem !important;\n}\n\n.my-2 {\n  margin-top: 0.5rem !important;\n  margin-bottom: 0.5rem !important;\n}\n\n.my-3 {\n  margin-top: 1rem !important;\n  margin-bottom: 1rem !important;\n}\n\n.my-4 {\n  margin-top: 1.5rem !important;\n  margin-bottom: 1.5rem !important;\n}\n\n.my-5 {\n  margin-top: 3rem !important;\n  margin-bottom: 3rem !important;\n}\n\n.my-auto {\n  margin-top: auto !important;\n  margin-bottom: auto !important;\n}\n\n.mt-0 {\n  margin-top: 0 !important;\n}\n\n.mt-1 {\n  margin-top: 0.25rem !important;\n}\n\n.mt-2 {\n  margin-top: 0.5rem !important;\n}\n\n.mt-3 {\n  margin-top: 1rem !important;\n}\n\n.mt-4 {\n  margin-top: 1.5rem !important;\n}\n\n.mt-5 {\n  margin-top: 3rem !important;\n}\n\n.mt-auto {\n  margin-top: auto !important;\n}\n\n.me-0 {\n  margin-right: 0 !important;\n}\n\n.me-1 {\n  margin-right: 0.25rem !important;\n}\n\n.me-2 {\n  margin-right: 0.5rem !important;\n}\n\n.me-3 {\n  margin-right: 1rem !important;\n}\n\n.me-4 {\n  margin-right: 1.5rem !important;\n}\n\n.me-5 {\n  margin-right: 3rem !important;\n}\n\n.me-auto {\n  margin-right: auto !important;\n}\n\n.mb-0 {\n  margin-bottom: 0 !important;\n}\n\n.mb-1 {\n  margin-bottom: 0.25rem !important;\n}\n\n.mb-2 {\n  margin-bottom: 0.5rem !important;\n}\n\n.mb-3 {\n  margin-bottom: 1rem !important;\n}\n\n.mb-4 {\n  margin-bottom: 1.5rem !important;\n}\n\n.mb-5 {\n  margin-bottom: 3rem !important;\n}\n\n.mb-auto {\n  margin-bottom: auto !important;\n}\n\n.ms-0 {\n  margin-left: 0 !important;\n}\n\n.ms-1 {\n  margin-left: 0.25rem !important;\n}\n\n.ms-2 {\n  margin-left: 0.5rem !important;\n}\n\n.ms-3 {\n  margin-left: 1rem !important;\n}\n\n.ms-4 {\n  margin-left: 1.5rem !important;\n}\n\n.ms-5 {\n  margin-left: 3rem !important;\n}\n\n.ms-auto {\n  margin-left: auto !important;\n}\n\n.p-0 {\n  padding: 0 !important;\n}\n\n.p-1 {\n  padding: 0.25rem !important;\n}\n\n.p-2 {\n  padding: 0.5rem !important;\n}\n\n.p-3 {\n  padding: 1rem !important;\n}\n\n.p-4 {\n  padding: 1.5rem !important;\n}\n\n.p-5 {\n  padding: 3rem !important;\n}\n\n.px-0 {\n  padding-right: 0 !important;\n  padding-left: 0 !important;\n}\n\n.px-1 {\n  padding-right: 0.25rem !important;\n  padding-left: 0.25rem !important;\n}\n\n.px-2 {\n  padding-right: 0.5rem !important;\n  padding-left: 0.5rem !important;\n}\n\n.px-3 {\n  padding-right: 1rem !important;\n  padding-left: 1rem !important;\n}\n\n.px-4 {\n  padding-right: 1.5rem !important;\n  padding-left: 1.5rem !important;\n}\n\n.px-5 {\n  padding-right: 3rem !important;\n  padding-left: 3rem !important;\n}\n\n.py-0 {\n  padding-top: 0 !important;\n  padding-bottom: 0 !important;\n}\n\n.py-1 {\n  padding-top: 0.25rem !important;\n  padding-bottom: 0.25rem !important;\n}\n\n.py-2 {\n  padding-top: 0.5rem !important;\n  padding-bottom: 0.5rem !important;\n}\n\n.py-3 {\n  padding-top: 1rem !important;\n  padding-bottom: 1rem !important;\n}\n\n.py-4 {\n  padding-top: 1.5rem !important;\n  padding-bottom: 1.5rem !important;\n}\n\n.py-5 {\n  padding-top: 3rem !important;\n  padding-bottom: 3rem !important;\n}\n\n.pt-0 {\n  padding-top: 0 !important;\n}\n\n.pt-1 {\n  padding-top: 0.25rem !important;\n}\n\n.pt-2 {\n  padding-top: 0.5rem !important;\n}\n\n.pt-3 {\n  padding-top: 1rem !important;\n}\n\n.pt-4 {\n  padding-top: 1.5rem !important;\n}\n\n.pt-5 {\n  padding-top: 3rem !important;\n}\n\n.pe-0 {\n  padding-right: 0 !important;\n}\n\n.pe-1 {\n  padding-right: 0.25rem !important;\n}\n\n.pe-2 {\n  padding-right: 0.5rem !important;\n}\n\n.pe-3 {\n  padding-right: 1rem !important;\n}\n\n.pe-4 {\n  padding-right: 1.5rem !important;\n}\n\n.pe-5 {\n  padding-right: 3rem !important;\n}\n\n.pb-0 {\n  padding-bottom: 0 !important;\n}\n\n.pb-1 {\n  padding-bottom: 0.25rem !important;\n}\n\n.pb-2 {\n  padding-bottom: 0.5rem !important;\n}\n\n.pb-3 {\n  padding-bottom: 1rem !important;\n}\n\n.pb-4 {\n  padding-bottom: 1.5rem !important;\n}\n\n.pb-5 {\n  padding-bottom: 3rem !important;\n}\n\n.ps-0 {\n  padding-left: 0 !important;\n}\n\n.ps-1 {\n  padding-left: 0.25rem !important;\n}\n\n.ps-2 {\n  padding-left: 0.5rem !important;\n}\n\n.ps-3 {\n  padding-left: 1rem !important;\n}\n\n.ps-4 {\n  padding-left: 1.5rem !important;\n}\n\n.ps-5 {\n  padding-left: 3rem !important;\n}\n\n.font-monospace {\n  font-family: var(--bs-font-monospace) !important;\n}\n\n.fs-1 {\n  font-size: calc(1.375rem + 1.5vw) !important;\n}\n\n.fs-2 {\n  font-size: calc(1.325rem + 0.9vw) !important;\n}\n\n.fs-3 {\n  font-size: calc(1.3rem + 0.6vw) !important;\n}\n\n.fs-4 {\n  font-size: calc(1.275rem + 0.3vw) !important;\n}\n\n.fs-5 {\n  font-size: 1.25rem !important;\n}\n\n.fs-6 {\n  font-size: 1rem !important;\n}\n\n.fst-italic {\n  font-style: italic !important;\n}\n\n.fst-normal {\n  font-style: normal !important;\n}\n\n.fw-light {\n  font-weight: 300 !important;\n}\n\n.fw-lighter {\n  font-weight: lighter !important;\n}\n\n.fw-normal {\n  font-weight: 400 !important;\n}\n\n.fw-bold {\n  font-weight: 700 !important;\n}\n\n.fw-bolder {\n  font-weight: bolder !important;\n}\n\n.lh-1 {\n  line-height: 1 !important;\n}\n\n.lh-sm {\n  line-height: 1.25 !important;\n}\n\n.lh-base {\n  line-height: 1.5 !important;\n}\n\n.lh-lg {\n  line-height: 2 !important;\n}\n\n.text-start {\n  text-align: left !important;\n}\n\n.text-end {\n  text-align: right !important;\n}\n\n.text-center {\n  text-align: center !important;\n}\n\n.text-decoration-none {\n  text-decoration: none !important;\n}\n\n.text-decoration-underline {\n  text-decoration: underline !important;\n}\n\n.text-decoration-line-through {\n  text-decoration: line-through !important;\n}\n\n.text-lowercase {\n  text-transform: lowercase !important;\n}\n\n.text-uppercase {\n  text-transform: uppercase !important;\n}\n\n.text-capitalize {\n  text-transform: capitalize !important;\n}\n\n.text-wrap {\n  white-space: normal !important;\n}\n\n.text-nowrap {\n  white-space: nowrap !important;\n}\n\n/* rtl:begin:remove */\n.text-break {\n  word-wrap: break-word !important;\n  word-break: break-word !important;\n}\n\n/* rtl:end:remove */\n.text-primary {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-primary-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-secondary {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-secondary-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-success {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-success-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-info {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-info-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-warning {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-warning-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-danger {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-danger-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-light {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-light-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-dark {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-dark-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-black {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-black-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-white {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-white-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-body {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-body-color-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-muted {\n  --bs-text-opacity: 1;\n  color: #6c757d !important;\n}\n\n.text-black-50 {\n  --bs-text-opacity: 1;\n  color: rgba(0, 0, 0, 0.5) !important;\n}\n\n.text-white-50 {\n  --bs-text-opacity: 1;\n  color: rgba(255, 255, 255, 0.5) !important;\n}\n\n.text-reset {\n  --bs-text-opacity: 1;\n  color: inherit !important;\n}\n\n.text-opacity-25 {\n  --bs-text-opacity: 0.25;\n}\n\n.text-opacity-50 {\n  --bs-text-opacity: 0.5;\n}\n\n.text-opacity-75 {\n  --bs-text-opacity: 0.75;\n}\n\n.text-opacity-100 {\n  --bs-text-opacity: 1;\n}\n\n.bg-primary {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-primary-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-secondary {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-secondary-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-success {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-success-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-info {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-info-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-warning {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-warning-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-danger {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-danger-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-light {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-light-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-dark {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-dark-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-black {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-black-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-white {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-white-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-body {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-body-bg-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-transparent {\n  --bs-bg-opacity: 1;\n  background-color: transparent !important;\n}\n\n.bg-opacity-10 {\n  --bs-bg-opacity: 0.1;\n}\n\n.bg-opacity-25 {\n  --bs-bg-opacity: 0.25;\n}\n\n.bg-opacity-50 {\n  --bs-bg-opacity: 0.5;\n}\n\n.bg-opacity-75 {\n  --bs-bg-opacity: 0.75;\n}\n\n.bg-opacity-100 {\n  --bs-bg-opacity: 1;\n}\n\n.bg-gradient {\n  background-image: var(--bs-gradient) !important;\n}\n\n.user-select-all {\n  -webkit-user-select: all !important;\n  -moz-user-select: all !important;\n  user-select: all !important;\n}\n\n.user-select-auto {\n  -webkit-user-select: auto !important;\n  -moz-user-select: auto !important;\n  user-select: auto !important;\n}\n\n.user-select-none {\n  -webkit-user-select: none !important;\n  -moz-user-select: none !important;\n  user-select: none !important;\n}\n\n.pe-none {\n  pointer-events: none !important;\n}\n\n.pe-auto {\n  pointer-events: auto !important;\n}\n\n.rounded {\n  border-radius: 0.25rem !important;\n}\n\n.rounded-0 {\n  border-radius: 0 !important;\n}\n\n.rounded-1 {\n  border-radius: 0.2rem !important;\n}\n\n.rounded-2 {\n  border-radius: 0.25rem !important;\n}\n\n.rounded-3 {\n  border-radius: 0.3rem !important;\n}\n\n.rounded-circle {\n  border-radius: 50% !important;\n}\n\n.rounded-pill {\n  border-radius: 50rem !important;\n}\n\n.rounded-top {\n  border-top-left-radius: 0.25rem !important;\n  border-top-right-radius: 0.25rem !important;\n}\n\n.rounded-end {\n  border-top-right-radius: 0.25rem !important;\n  border-bottom-right-radius: 0.25rem !important;\n}\n\n.rounded-bottom {\n  border-bottom-right-radius: 0.25rem !important;\n  border-bottom-left-radius: 0.25rem !important;\n}\n\n.rounded-start {\n  border-bottom-left-radius: 0.25rem !important;\n  border-top-left-radius: 0.25rem !important;\n}\n\n.visible {\n  visibility: visible !important;\n}\n\n.invisible {\n  visibility: hidden !important;\n}\n\n@media (min-width: 576px) {\n  .float-sm-start {\n    float: left !important;\n  }\n\n  .float-sm-end {\n    float: right !important;\n  }\n\n  .float-sm-none {\n    float: none !important;\n  }\n\n  .d-sm-inline {\n    display: inline !important;\n  }\n\n  .d-sm-inline-block {\n    display: inline-block !important;\n  }\n\n  .d-sm-block {\n    display: block !important;\n  }\n\n  .d-sm-grid {\n    display: grid !important;\n  }\n\n  .d-sm-table {\n    display: table !important;\n  }\n\n  .d-sm-table-row {\n    display: table-row !important;\n  }\n\n  .d-sm-table-cell {\n    display: table-cell !important;\n  }\n\n  .d-sm-flex {\n    display: flex !important;\n  }\n\n  .d-sm-inline-flex {\n    display: inline-flex !important;\n  }\n\n  .d-sm-none {\n    display: none !important;\n  }\n\n  .flex-sm-fill {\n    flex: 1 1 auto !important;\n  }\n\n  .flex-sm-row {\n    flex-direction: row !important;\n  }\n\n  .flex-sm-column {\n    flex-direction: column !important;\n  }\n\n  .flex-sm-row-reverse {\n    flex-direction: row-reverse !important;\n  }\n\n  .flex-sm-column-reverse {\n    flex-direction: column-reverse !important;\n  }\n\n  .flex-sm-grow-0 {\n    flex-grow: 0 !important;\n  }\n\n  .flex-sm-grow-1 {\n    flex-grow: 1 !important;\n  }\n\n  .flex-sm-shrink-0 {\n    flex-shrink: 0 !important;\n  }\n\n  .flex-sm-shrink-1 {\n    flex-shrink: 1 !important;\n  }\n\n  .flex-sm-wrap {\n    flex-wrap: wrap !important;\n  }\n\n  .flex-sm-nowrap {\n    flex-wrap: nowrap !important;\n  }\n\n  .flex-sm-wrap-reverse {\n    flex-wrap: wrap-reverse !important;\n  }\n\n  .gap-sm-0 {\n    gap: 0 !important;\n  }\n\n  .gap-sm-1 {\n    gap: 0.25rem !important;\n  }\n\n  .gap-sm-2 {\n    gap: 0.5rem !important;\n  }\n\n  .gap-sm-3 {\n    gap: 1rem !important;\n  }\n\n  .gap-sm-4 {\n    gap: 1.5rem !important;\n  }\n\n  .gap-sm-5 {\n    gap: 3rem !important;\n  }\n\n  .justify-content-sm-start {\n    justify-content: flex-start !important;\n  }\n\n  .justify-content-sm-end {\n    justify-content: flex-end !important;\n  }\n\n  .justify-content-sm-center {\n    justify-content: center !important;\n  }\n\n  .justify-content-sm-between {\n    justify-content: space-between !important;\n  }\n\n  .justify-content-sm-around {\n    justify-content: space-around !important;\n  }\n\n  .justify-content-sm-evenly {\n    justify-content: space-evenly !important;\n  }\n\n  .align-items-sm-start {\n    align-items: flex-start !important;\n  }\n\n  .align-items-sm-end {\n    align-items: flex-end !important;\n  }\n\n  .align-items-sm-center {\n    align-items: center !important;\n  }\n\n  .align-items-sm-baseline {\n    align-items: baseline !important;\n  }\n\n  .align-items-sm-stretch {\n    align-items: stretch !important;\n  }\n\n  .align-content-sm-start {\n    align-content: flex-start !important;\n  }\n\n  .align-content-sm-end {\n    align-content: flex-end !important;\n  }\n\n  .align-content-sm-center {\n    align-content: center !important;\n  }\n\n  .align-content-sm-between {\n    align-content: space-between !important;\n  }\n\n  .align-content-sm-around {\n    align-content: space-around !important;\n  }\n\n  .align-content-sm-stretch {\n    align-content: stretch !important;\n  }\n\n  .align-self-sm-auto {\n    align-self: auto !important;\n  }\n\n  .align-self-sm-start {\n    align-self: flex-start !important;\n  }\n\n  .align-self-sm-end {\n    align-self: flex-end !important;\n  }\n\n  .align-self-sm-center {\n    align-self: center !important;\n  }\n\n  .align-self-sm-baseline {\n    align-self: baseline !important;\n  }\n\n  .align-self-sm-stretch {\n    align-self: stretch !important;\n  }\n\n  .order-sm-first {\n    order: -1 !important;\n  }\n\n  .order-sm-0 {\n    order: 0 !important;\n  }\n\n  .order-sm-1 {\n    order: 1 !important;\n  }\n\n  .order-sm-2 {\n    order: 2 !important;\n  }\n\n  .order-sm-3 {\n    order: 3 !important;\n  }\n\n  .order-sm-4 {\n    order: 4 !important;\n  }\n\n  .order-sm-5 {\n    order: 5 !important;\n  }\n\n  .order-sm-last {\n    order: 6 !important;\n  }\n\n  .m-sm-0 {\n    margin: 0 !important;\n  }\n\n  .m-sm-1 {\n    margin: 0.25rem !important;\n  }\n\n  .m-sm-2 {\n    margin: 0.5rem !important;\n  }\n\n  .m-sm-3 {\n    margin: 1rem !important;\n  }\n\n  .m-sm-4 {\n    margin: 1.5rem !important;\n  }\n\n  .m-sm-5 {\n    margin: 3rem !important;\n  }\n\n  .m-sm-auto {\n    margin: auto !important;\n  }\n\n  .mx-sm-0 {\n    margin-right: 0 !important;\n    margin-left: 0 !important;\n  }\n\n  .mx-sm-1 {\n    margin-right: 0.25rem !important;\n    margin-left: 0.25rem !important;\n  }\n\n  .mx-sm-2 {\n    margin-right: 0.5rem !important;\n    margin-left: 0.5rem !important;\n  }\n\n  .mx-sm-3 {\n    margin-right: 1rem !important;\n    margin-left: 1rem !important;\n  }\n\n  .mx-sm-4 {\n    margin-right: 1.5rem !important;\n    margin-left: 1.5rem !important;\n  }\n\n  .mx-sm-5 {\n    margin-right: 3rem !important;\n    margin-left: 3rem !important;\n  }\n\n  .mx-sm-auto {\n    margin-right: auto !important;\n    margin-left: auto !important;\n  }\n\n  .my-sm-0 {\n    margin-top: 0 !important;\n    margin-bottom: 0 !important;\n  }\n\n  .my-sm-1 {\n    margin-top: 0.25rem !important;\n    margin-bottom: 0.25rem !important;\n  }\n\n  .my-sm-2 {\n    margin-top: 0.5rem !important;\n    margin-bottom: 0.5rem !important;\n  }\n\n  .my-sm-3 {\n    margin-top: 1rem !important;\n    margin-bottom: 1rem !important;\n  }\n\n  .my-sm-4 {\n    margin-top: 1.5rem !important;\n    margin-bottom: 1.5rem !important;\n  }\n\n  .my-sm-5 {\n    margin-top: 3rem !important;\n    margin-bottom: 3rem !important;\n  }\n\n  .my-sm-auto {\n    margin-top: auto !important;\n    margin-bottom: auto !important;\n  }\n\n  .mt-sm-0 {\n    margin-top: 0 !important;\n  }\n\n  .mt-sm-1 {\n    margin-top: 0.25rem !important;\n  }\n\n  .mt-sm-2 {\n    margin-top: 0.5rem !important;\n  }\n\n  .mt-sm-3 {\n    margin-top: 1rem !important;\n  }\n\n  .mt-sm-4 {\n    margin-top: 1.5rem !important;\n  }\n\n  .mt-sm-5 {\n    margin-top: 3rem !important;\n  }\n\n  .mt-sm-auto {\n    margin-top: auto !important;\n  }\n\n  .me-sm-0 {\n    margin-right: 0 !important;\n  }\n\n  .me-sm-1 {\n    margin-right: 0.25rem !important;\n  }\n\n  .me-sm-2 {\n    margin-right: 0.5rem !important;\n  }\n\n  .me-sm-3 {\n    margin-right: 1rem !important;\n  }\n\n  .me-sm-4 {\n    margin-right: 1.5rem !important;\n  }\n\n  .me-sm-5 {\n    margin-right: 3rem !important;\n  }\n\n  .me-sm-auto {\n    margin-right: auto !important;\n  }\n\n  .mb-sm-0 {\n    margin-bottom: 0 !important;\n  }\n\n  .mb-sm-1 {\n    margin-bottom: 0.25rem !important;\n  }\n\n  .mb-sm-2 {\n    margin-bottom: 0.5rem !important;\n  }\n\n  .mb-sm-3 {\n    margin-bottom: 1rem !important;\n  }\n\n  .mb-sm-4 {\n    margin-bottom: 1.5rem !important;\n  }\n\n  .mb-sm-5 {\n    margin-bottom: 3rem !important;\n  }\n\n  .mb-sm-auto {\n    margin-bottom: auto !important;\n  }\n\n  .ms-sm-0 {\n    margin-left: 0 !important;\n  }\n\n  .ms-sm-1 {\n    margin-left: 0.25rem !important;\n  }\n\n  .ms-sm-2 {\n    margin-left: 0.5rem !important;\n  }\n\n  .ms-sm-3 {\n    margin-left: 1rem !important;\n  }\n\n  .ms-sm-4 {\n    margin-left: 1.5rem !important;\n  }\n\n  .ms-sm-5 {\n    margin-left: 3rem !important;\n  }\n\n  .ms-sm-auto {\n    margin-left: auto !important;\n  }\n\n  .p-sm-0 {\n    padding: 0 !important;\n  }\n\n  .p-sm-1 {\n    padding: 0.25rem !important;\n  }\n\n  .p-sm-2 {\n    padding: 0.5rem !important;\n  }\n\n  .p-sm-3 {\n    padding: 1rem !important;\n  }\n\n  .p-sm-4 {\n    padding: 1.5rem !important;\n  }\n\n  .p-sm-5 {\n    padding: 3rem !important;\n  }\n\n  .px-sm-0 {\n    padding-right: 0 !important;\n    padding-left: 0 !important;\n  }\n\n  .px-sm-1 {\n    padding-right: 0.25rem !important;\n    padding-left: 0.25rem !important;\n  }\n\n  .px-sm-2 {\n    padding-right: 0.5rem !important;\n    padding-left: 0.5rem !important;\n  }\n\n  .px-sm-3 {\n    padding-right: 1rem !important;\n    padding-left: 1rem !important;\n  }\n\n  .px-sm-4 {\n    padding-right: 1.5rem !important;\n    padding-left: 1.5rem !important;\n  }\n\n  .px-sm-5 {\n    padding-right: 3rem !important;\n    padding-left: 3rem !important;\n  }\n\n  .py-sm-0 {\n    padding-top: 0 !important;\n    padding-bottom: 0 !important;\n  }\n\n  .py-sm-1 {\n    padding-top: 0.25rem !important;\n    padding-bottom: 0.25rem !important;\n  }\n\n  .py-sm-2 {\n    padding-top: 0.5rem !important;\n    padding-bottom: 0.5rem !important;\n  }\n\n  .py-sm-3 {\n    padding-top: 1rem !important;\n    padding-bottom: 1rem !important;\n  }\n\n  .py-sm-4 {\n    padding-top: 1.5rem !important;\n    padding-bottom: 1.5rem !important;\n  }\n\n  .py-sm-5 {\n    padding-top: 3rem !important;\n    padding-bottom: 3rem !important;\n  }\n\n  .pt-sm-0 {\n    padding-top: 0 !important;\n  }\n\n  .pt-sm-1 {\n    padding-top: 0.25rem !important;\n  }\n\n  .pt-sm-2 {\n    padding-top: 0.5rem !important;\n  }\n\n  .pt-sm-3 {\n    padding-top: 1rem !important;\n  }\n\n  .pt-sm-4 {\n    padding-top: 1.5rem !important;\n  }\n\n  .pt-sm-5 {\n    padding-top: 3rem !important;\n  }\n\n  .pe-sm-0 {\n    padding-right: 0 !important;\n  }\n\n  .pe-sm-1 {\n    padding-right: 0.25rem !important;\n  }\n\n  .pe-sm-2 {\n    padding-right: 0.5rem !important;\n  }\n\n  .pe-sm-3 {\n    padding-right: 1rem !important;\n  }\n\n  .pe-sm-4 {\n    padding-right: 1.5rem !important;\n  }\n\n  .pe-sm-5 {\n    padding-right: 3rem !important;\n  }\n\n  .pb-sm-0 {\n    padding-bottom: 0 !important;\n  }\n\n  .pb-sm-1 {\n    padding-bottom: 0.25rem !important;\n  }\n\n  .pb-sm-2 {\n    padding-bottom: 0.5rem !important;\n  }\n\n  .pb-sm-3 {\n    padding-bottom: 1rem !important;\n  }\n\n  .pb-sm-4 {\n    padding-bottom: 1.5rem !important;\n  }\n\n  .pb-sm-5 {\n    padding-bottom: 3rem !important;\n  }\n\n  .ps-sm-0 {\n    padding-left: 0 !important;\n  }\n\n  .ps-sm-1 {\n    padding-left: 0.25rem !important;\n  }\n\n  .ps-sm-2 {\n    padding-left: 0.5rem !important;\n  }\n\n  .ps-sm-3 {\n    padding-left: 1rem !important;\n  }\n\n  .ps-sm-4 {\n    padding-left: 1.5rem !important;\n  }\n\n  .ps-sm-5 {\n    padding-left: 3rem !important;\n  }\n\n  .text-sm-start {\n    text-align: left !important;\n  }\n\n  .text-sm-end {\n    text-align: right !important;\n  }\n\n  .text-sm-center {\n    text-align: center !important;\n  }\n}\n@media (min-width: 768px) {\n  .float-md-start {\n    float: left !important;\n  }\n\n  .float-md-end {\n    float: right !important;\n  }\n\n  .float-md-none {\n    float: none !important;\n  }\n\n  .d-md-inline {\n    display: inline !important;\n  }\n\n  .d-md-inline-block {\n    display: inline-block !important;\n  }\n\n  .d-md-block {\n    display: block !important;\n  }\n\n  .d-md-grid {\n    display: grid !important;\n  }\n\n  .d-md-table {\n    display: table !important;\n  }\n\n  .d-md-table-row {\n    display: table-row !important;\n  }\n\n  .d-md-table-cell {\n    display: table-cell !important;\n  }\n\n  .d-md-flex {\n    display: flex !important;\n  }\n\n  .d-md-inline-flex {\n    display: inline-flex !important;\n  }\n\n  .d-md-none {\n    display: none !important;\n  }\n\n  .flex-md-fill {\n    flex: 1 1 auto !important;\n  }\n\n  .flex-md-row {\n    flex-direction: row !important;\n  }\n\n  .flex-md-column {\n    flex-direction: column !important;\n  }\n\n  .flex-md-row-reverse {\n    flex-direction: row-reverse !important;\n  }\n\n  .flex-md-column-reverse {\n    flex-direction: column-reverse !important;\n  }\n\n  .flex-md-grow-0 {\n    flex-grow: 0 !important;\n  }\n\n  .flex-md-grow-1 {\n    flex-grow: 1 !important;\n  }\n\n  .flex-md-shrink-0 {\n    flex-shrink: 0 !important;\n  }\n\n  .flex-md-shrink-1 {\n    flex-shrink: 1 !important;\n  }\n\n  .flex-md-wrap {\n    flex-wrap: wrap !important;\n  }\n\n  .flex-md-nowrap {\n    flex-wrap: nowrap !important;\n  }\n\n  .flex-md-wrap-reverse {\n    flex-wrap: wrap-reverse !important;\n  }\n\n  .gap-md-0 {\n    gap: 0 !important;\n  }\n\n  .gap-md-1 {\n    gap: 0.25rem !important;\n  }\n\n  .gap-md-2 {\n    gap: 0.5rem !important;\n  }\n\n  .gap-md-3 {\n    gap: 1rem !important;\n  }\n\n  .gap-md-4 {\n    gap: 1.5rem !important;\n  }\n\n  .gap-md-5 {\n    gap: 3rem !important;\n  }\n\n  .justify-content-md-start {\n    justify-content: flex-start !important;\n  }\n\n  .justify-content-md-end {\n    justify-content: flex-end !important;\n  }\n\n  .justify-content-md-center {\n    justify-content: center !important;\n  }\n\n  .justify-content-md-between {\n    justify-content: space-between !important;\n  }\n\n  .justify-content-md-around {\n    justify-content: space-around !important;\n  }\n\n  .justify-content-md-evenly {\n    justify-content: space-evenly !important;\n  }\n\n  .align-items-md-start {\n    align-items: flex-start !important;\n  }\n\n  .align-items-md-end {\n    align-items: flex-end !important;\n  }\n\n  .align-items-md-center {\n    align-items: center !important;\n  }\n\n  .align-items-md-baseline {\n    align-items: baseline !important;\n  }\n\n  .align-items-md-stretch {\n    align-items: stretch !important;\n  }\n\n  .align-content-md-start {\n    align-content: flex-start !important;\n  }\n\n  .align-content-md-end {\n    align-content: flex-end !important;\n  }\n\n  .align-content-md-center {\n    align-content: center !important;\n  }\n\n  .align-content-md-between {\n    align-content: space-between !important;\n  }\n\n  .align-content-md-around {\n    align-content: space-around !important;\n  }\n\n  .align-content-md-stretch {\n    align-content: stretch !important;\n  }\n\n  .align-self-md-auto {\n    align-self: auto !important;\n  }\n\n  .align-self-md-start {\n    align-self: flex-start !important;\n  }\n\n  .align-self-md-end {\n    align-self: flex-end !important;\n  }\n\n  .align-self-md-center {\n    align-self: center !important;\n  }\n\n  .align-self-md-baseline {\n    align-self: baseline !important;\n  }\n\n  .align-self-md-stretch {\n    align-self: stretch !important;\n  }\n\n  .order-md-first {\n    order: -1 !important;\n  }\n\n  .order-md-0 {\n    order: 0 !important;\n  }\n\n  .order-md-1 {\n    order: 1 !important;\n  }\n\n  .order-md-2 {\n    order: 2 !important;\n  }\n\n  .order-md-3 {\n    order: 3 !important;\n  }\n\n  .order-md-4 {\n    order: 4 !important;\n  }\n\n  .order-md-5 {\n    order: 5 !important;\n  }\n\n  .order-md-last {\n    order: 6 !important;\n  }\n\n  .m-md-0 {\n    margin: 0 !important;\n  }\n\n  .m-md-1 {\n    margin: 0.25rem !important;\n  }\n\n  .m-md-2 {\n    margin: 0.5rem !important;\n  }\n\n  .m-md-3 {\n    margin: 1rem !important;\n  }\n\n  .m-md-4 {\n    margin: 1.5rem !important;\n  }\n\n  .m-md-5 {\n    margin: 3rem !important;\n  }\n\n  .m-md-auto {\n    margin: auto !important;\n  }\n\n  .mx-md-0 {\n    margin-right: 0 !important;\n    margin-left: 0 !important;\n  }\n\n  .mx-md-1 {\n    margin-right: 0.25rem !important;\n    margin-left: 0.25rem !important;\n  }\n\n  .mx-md-2 {\n    margin-right: 0.5rem !important;\n    margin-left: 0.5rem !important;\n  }\n\n  .mx-md-3 {\n    margin-right: 1rem !important;\n    margin-left: 1rem !important;\n  }\n\n  .mx-md-4 {\n    margin-right: 1.5rem !important;\n    margin-left: 1.5rem !important;\n  }\n\n  .mx-md-5 {\n    margin-right: 3rem !important;\n    margin-left: 3rem !important;\n  }\n\n  .mx-md-auto {\n    margin-right: auto !important;\n    margin-left: auto !important;\n  }\n\n  .my-md-0 {\n    margin-top: 0 !important;\n    margin-bottom: 0 !important;\n  }\n\n  .my-md-1 {\n    margin-top: 0.25rem !important;\n    margin-bottom: 0.25rem !important;\n  }\n\n  .my-md-2 {\n    margin-top: 0.5rem !important;\n    margin-bottom: 0.5rem !important;\n  }\n\n  .my-md-3 {\n    margin-top: 1rem !important;\n    margin-bottom: 1rem !important;\n  }\n\n  .my-md-4 {\n    margin-top: 1.5rem !important;\n    margin-bottom: 1.5rem !important;\n  }\n\n  .my-md-5 {\n    margin-top: 3rem !important;\n    margin-bottom: 3rem !important;\n  }\n\n  .my-md-auto {\n    margin-top: auto !important;\n    margin-bottom: auto !important;\n  }\n\n  .mt-md-0 {\n    margin-top: 0 !important;\n  }\n\n  .mt-md-1 {\n    margin-top: 0.25rem !important;\n  }\n\n  .mt-md-2 {\n    margin-top: 0.5rem !important;\n  }\n\n  .mt-md-3 {\n    margin-top: 1rem !important;\n  }\n\n  .mt-md-4 {\n    margin-top: 1.5rem !important;\n  }\n\n  .mt-md-5 {\n    margin-top: 3rem !important;\n  }\n\n  .mt-md-auto {\n    margin-top: auto !important;\n  }\n\n  .me-md-0 {\n    margin-right: 0 !important;\n  }\n\n  .me-md-1 {\n    margin-right: 0.25rem !important;\n  }\n\n  .me-md-2 {\n    margin-right: 0.5rem !important;\n  }\n\n  .me-md-3 {\n    margin-right: 1rem !important;\n  }\n\n  .me-md-4 {\n    margin-right: 1.5rem !important;\n  }\n\n  .me-md-5 {\n    margin-right: 3rem !important;\n  }\n\n  .me-md-auto {\n    margin-right: auto !important;\n  }\n\n  .mb-md-0 {\n    margin-bottom: 0 !important;\n  }\n\n  .mb-md-1 {\n    margin-bottom: 0.25rem !important;\n  }\n\n  .mb-md-2 {\n    margin-bottom: 0.5rem !important;\n  }\n\n  .mb-md-3 {\n    margin-bottom: 1rem !important;\n  }\n\n  .mb-md-4 {\n    margin-bottom: 1.5rem !important;\n  }\n\n  .mb-md-5 {\n    margin-bottom: 3rem !important;\n  }\n\n  .mb-md-auto {\n    margin-bottom: auto !important;\n  }\n\n  .ms-md-0 {\n    margin-left: 0 !important;\n  }\n\n  .ms-md-1 {\n    margin-left: 0.25rem !important;\n  }\n\n  .ms-md-2 {\n    margin-left: 0.5rem !important;\n  }\n\n  .ms-md-3 {\n    margin-left: 1rem !important;\n  }\n\n  .ms-md-4 {\n    margin-left: 1.5rem !important;\n  }\n\n  .ms-md-5 {\n    margin-left: 3rem !important;\n  }\n\n  .ms-md-auto {\n    margin-left: auto !important;\n  }\n\n  .p-md-0 {\n    padding: 0 !important;\n  }\n\n  .p-md-1 {\n    padding: 0.25rem !important;\n  }\n\n  .p-md-2 {\n    padding: 0.5rem !important;\n  }\n\n  .p-md-3 {\n    padding: 1rem !important;\n  }\n\n  .p-md-4 {\n    padding: 1.5rem !important;\n  }\n\n  .p-md-5 {\n    padding: 3rem !important;\n  }\n\n  .px-md-0 {\n    padding-right: 0 !important;\n    padding-left: 0 !important;\n  }\n\n  .px-md-1 {\n    padding-right: 0.25rem !important;\n    padding-left: 0.25rem !important;\n  }\n\n  .px-md-2 {\n    padding-right: 0.5rem !important;\n    padding-left: 0.5rem !important;\n  }\n\n  .px-md-3 {\n    padding-right: 1rem !important;\n    padding-left: 1rem !important;\n  }\n\n  .px-md-4 {\n    padding-right: 1.5rem !important;\n    padding-left: 1.5rem !important;\n  }\n\n  .px-md-5 {\n    padding-right: 3rem !important;\n    padding-left: 3rem !important;\n  }\n\n  .py-md-0 {\n    padding-top: 0 !important;\n    padding-bottom: 0 !important;\n  }\n\n  .py-md-1 {\n    padding-top: 0.25rem !important;\n    padding-bottom: 0.25rem !important;\n  }\n\n  .py-md-2 {\n    padding-top: 0.5rem !important;\n    padding-bottom: 0.5rem !important;\n  }\n\n  .py-md-3 {\n    padding-top: 1rem !important;\n    padding-bottom: 1rem !important;\n  }\n\n  .py-md-4 {\n    padding-top: 1.5rem !important;\n    padding-bottom: 1.5rem !important;\n  }\n\n  .py-md-5 {\n    padding-top: 3rem !important;\n    padding-bottom: 3rem !important;\n  }\n\n  .pt-md-0 {\n    padding-top: 0 !important;\n  }\n\n  .pt-md-1 {\n    padding-top: 0.25rem !important;\n  }\n\n  .pt-md-2 {\n    padding-top: 0.5rem !important;\n  }\n\n  .pt-md-3 {\n    padding-top: 1rem !important;\n  }\n\n  .pt-md-4 {\n    padding-top: 1.5rem !important;\n  }\n\n  .pt-md-5 {\n    padding-top: 3rem !important;\n  }\n\n  .pe-md-0 {\n    padding-right: 0 !important;\n  }\n\n  .pe-md-1 {\n    padding-right: 0.25rem !important;\n  }\n\n  .pe-md-2 {\n    padding-right: 0.5rem !important;\n  }\n\n  .pe-md-3 {\n    padding-right: 1rem !important;\n  }\n\n  .pe-md-4 {\n    padding-right: 1.5rem !important;\n  }\n\n  .pe-md-5 {\n    padding-right: 3rem !important;\n  }\n\n  .pb-md-0 {\n    padding-bottom: 0 !important;\n  }\n\n  .pb-md-1 {\n    padding-bottom: 0.25rem !important;\n  }\n\n  .pb-md-2 {\n    padding-bottom: 0.5rem !important;\n  }\n\n  .pb-md-3 {\n    padding-bottom: 1rem !important;\n  }\n\n  .pb-md-4 {\n    padding-bottom: 1.5rem !important;\n  }\n\n  .pb-md-5 {\n    padding-bottom: 3rem !important;\n  }\n\n  .ps-md-0 {\n    padding-left: 0 !important;\n  }\n\n  .ps-md-1 {\n    padding-left: 0.25rem !important;\n  }\n\n  .ps-md-2 {\n    padding-left: 0.5rem !important;\n  }\n\n  .ps-md-3 {\n    padding-left: 1rem !important;\n  }\n\n  .ps-md-4 {\n    padding-left: 1.5rem !important;\n  }\n\n  .ps-md-5 {\n    padding-left: 3rem !important;\n  }\n\n  .text-md-start {\n    text-align: left !important;\n  }\n\n  .text-md-end {\n    text-align: right !important;\n  }\n\n  .text-md-center {\n    text-align: center !important;\n  }\n}\n@media (min-width: 992px) {\n  .float-lg-start {\n    float: left !important;\n  }\n\n  .float-lg-end {\n    float: right !important;\n  }\n\n  .float-lg-none {\n    float: none !important;\n  }\n\n  .d-lg-inline {\n    display: inline !important;\n  }\n\n  .d-lg-inline-block {\n    display: inline-block !important;\n  }\n\n  .d-lg-block {\n    display: block !important;\n  }\n\n  .d-lg-grid {\n    display: grid !important;\n  }\n\n  .d-lg-table {\n    display: table !important;\n  }\n\n  .d-lg-table-row {\n    display: table-row !important;\n  }\n\n  .d-lg-table-cell {\n    display: table-cell !important;\n  }\n\n  .d-lg-flex {\n    display: flex !important;\n  }\n\n  .d-lg-inline-flex {\n    display: inline-flex !important;\n  }\n\n  .d-lg-none {\n    display: none !important;\n  }\n\n  .flex-lg-fill {\n    flex: 1 1 auto !important;\n  }\n\n  .flex-lg-row {\n    flex-direction: row !important;\n  }\n\n  .flex-lg-column {\n    flex-direction: column !important;\n  }\n\n  .flex-lg-row-reverse {\n    flex-direction: row-reverse !important;\n  }\n\n  .flex-lg-column-reverse {\n    flex-direction: column-reverse !important;\n  }\n\n  .flex-lg-grow-0 {\n    flex-grow: 0 !important;\n  }\n\n  .flex-lg-grow-1 {\n    flex-grow: 1 !important;\n  }\n\n  .flex-lg-shrink-0 {\n    flex-shrink: 0 !important;\n  }\n\n  .flex-lg-shrink-1 {\n    flex-shrink: 1 !important;\n  }\n\n  .flex-lg-wrap {\n    flex-wrap: wrap !important;\n  }\n\n  .flex-lg-nowrap {\n    flex-wrap: nowrap !important;\n  }\n\n  .flex-lg-wrap-reverse {\n    flex-wrap: wrap-reverse !important;\n  }\n\n  .gap-lg-0 {\n    gap: 0 !important;\n  }\n\n  .gap-lg-1 {\n    gap: 0.25rem !important;\n  }\n\n  .gap-lg-2 {\n    gap: 0.5rem !important;\n  }\n\n  .gap-lg-3 {\n    gap: 1rem !important;\n  }\n\n  .gap-lg-4 {\n    gap: 1.5rem !important;\n  }\n\n  .gap-lg-5 {\n    gap: 3rem !important;\n  }\n\n  .justify-content-lg-start {\n    justify-content: flex-start !important;\n  }\n\n  .justify-content-lg-end {\n    justify-content: flex-end !important;\n  }\n\n  .justify-content-lg-center {\n    justify-content: center !important;\n  }\n\n  .justify-content-lg-between {\n    justify-content: space-between !important;\n  }\n\n  .justify-content-lg-around {\n    justify-content: space-around !important;\n  }\n\n  .justify-content-lg-evenly {\n    justify-content: space-evenly !important;\n  }\n\n  .align-items-lg-start {\n    align-items: flex-start !important;\n  }\n\n  .align-items-lg-end {\n    align-items: flex-end !important;\n  }\n\n  .align-items-lg-center {\n    align-items: center !important;\n  }\n\n  .align-items-lg-baseline {\n    align-items: baseline !important;\n  }\n\n  .align-items-lg-stretch {\n    align-items: stretch !important;\n  }\n\n  .align-content-lg-start {\n    align-content: flex-start !important;\n  }\n\n  .align-content-lg-end {\n    align-content: flex-end !important;\n  }\n\n  .align-content-lg-center {\n    align-content: center !important;\n  }\n\n  .align-content-lg-between {\n    align-content: space-between !important;\n  }\n\n  .align-content-lg-around {\n    align-content: space-around !important;\n  }\n\n  .align-content-lg-stretch {\n    align-content: stretch !important;\n  }\n\n  .align-self-lg-auto {\n    align-self: auto !important;\n  }\n\n  .align-self-lg-start {\n    align-self: flex-start !important;\n  }\n\n  .align-self-lg-end {\n    align-self: flex-end !important;\n  }\n\n  .align-self-lg-center {\n    align-self: center !important;\n  }\n\n  .align-self-lg-baseline {\n    align-self: baseline !important;\n  }\n\n  .align-self-lg-stretch {\n    align-self: stretch !important;\n  }\n\n  .order-lg-first {\n    order: -1 !important;\n  }\n\n  .order-lg-0 {\n    order: 0 !important;\n  }\n\n  .order-lg-1 {\n    order: 1 !important;\n  }\n\n  .order-lg-2 {\n    order: 2 !important;\n  }\n\n  .order-lg-3 {\n    order: 3 !important;\n  }\n\n  .order-lg-4 {\n    order: 4 !important;\n  }\n\n  .order-lg-5 {\n    order: 5 !important;\n  }\n\n  .order-lg-last {\n    order: 6 !important;\n  }\n\n  .m-lg-0 {\n    margin: 0 !important;\n  }\n\n  .m-lg-1 {\n    margin: 0.25rem !important;\n  }\n\n  .m-lg-2 {\n    margin: 0.5rem !important;\n  }\n\n  .m-lg-3 {\n    margin: 1rem !important;\n  }\n\n  .m-lg-4 {\n    margin: 1.5rem !important;\n  }\n\n  .m-lg-5 {\n    margin: 3rem !important;\n  }\n\n  .m-lg-auto {\n    margin: auto !important;\n  }\n\n  .mx-lg-0 {\n    margin-right: 0 !important;\n    margin-left: 0 !important;\n  }\n\n  .mx-lg-1 {\n    margin-right: 0.25rem !important;\n    margin-left: 0.25rem !important;\n  }\n\n  .mx-lg-2 {\n    margin-right: 0.5rem !important;\n    margin-left: 0.5rem !important;\n  }\n\n  .mx-lg-3 {\n    margin-right: 1rem !important;\n    margin-left: 1rem !important;\n  }\n\n  .mx-lg-4 {\n    margin-right: 1.5rem !important;\n    margin-left: 1.5rem !important;\n  }\n\n  .mx-lg-5 {\n    margin-right: 3rem !important;\n    margin-left: 3rem !important;\n  }\n\n  .mx-lg-auto {\n    margin-right: auto !important;\n    margin-left: auto !important;\n  }\n\n  .my-lg-0 {\n    margin-top: 0 !important;\n    margin-bottom: 0 !important;\n  }\n\n  .my-lg-1 {\n    margin-top: 0.25rem !important;\n    margin-bottom: 0.25rem !important;\n  }\n\n  .my-lg-2 {\n    margin-top: 0.5rem !important;\n    margin-bottom: 0.5rem !important;\n  }\n\n  .my-lg-3 {\n    margin-top: 1rem !important;\n    margin-bottom: 1rem !important;\n  }\n\n  .my-lg-4 {\n    margin-top: 1.5rem !important;\n    margin-bottom: 1.5rem !important;\n  }\n\n  .my-lg-5 {\n    margin-top: 3rem !important;\n    margin-bottom: 3rem !important;\n  }\n\n  .my-lg-auto {\n    margin-top: auto !important;\n    margin-bottom: auto !important;\n  }\n\n  .mt-lg-0 {\n    margin-top: 0 !important;\n  }\n\n  .mt-lg-1 {\n    margin-top: 0.25rem !important;\n  }\n\n  .mt-lg-2 {\n    margin-top: 0.5rem !important;\n  }\n\n  .mt-lg-3 {\n    margin-top: 1rem !important;\n  }\n\n  .mt-lg-4 {\n    margin-top: 1.5rem !important;\n  }\n\n  .mt-lg-5 {\n    margin-top: 3rem !important;\n  }\n\n  .mt-lg-auto {\n    margin-top: auto !important;\n  }\n\n  .me-lg-0 {\n    margin-right: 0 !important;\n  }\n\n  .me-lg-1 {\n    margin-right: 0.25rem !important;\n  }\n\n  .me-lg-2 {\n    margin-right: 0.5rem !important;\n  }\n\n  .me-lg-3 {\n    margin-right: 1rem !important;\n  }\n\n  .me-lg-4 {\n    margin-right: 1.5rem !important;\n  }\n\n  .me-lg-5 {\n    margin-right: 3rem !important;\n  }\n\n  .me-lg-auto {\n    margin-right: auto !important;\n  }\n\n  .mb-lg-0 {\n    margin-bottom: 0 !important;\n  }\n\n  .mb-lg-1 {\n    margin-bottom: 0.25rem !important;\n  }\n\n  .mb-lg-2 {\n    margin-bottom: 0.5rem !important;\n  }\n\n  .mb-lg-3 {\n    margin-bottom: 1rem !important;\n  }\n\n  .mb-lg-4 {\n    margin-bottom: 1.5rem !important;\n  }\n\n  .mb-lg-5 {\n    margin-bottom: 3rem !important;\n  }\n\n  .mb-lg-auto {\n    margin-bottom: auto !important;\n  }\n\n  .ms-lg-0 {\n    margin-left: 0 !important;\n  }\n\n  .ms-lg-1 {\n    margin-left: 0.25rem !important;\n  }\n\n  .ms-lg-2 {\n    margin-left: 0.5rem !important;\n  }\n\n  .ms-lg-3 {\n    margin-left: 1rem !important;\n  }\n\n  .ms-lg-4 {\n    margin-left: 1.5rem !important;\n  }\n\n  .ms-lg-5 {\n    margin-left: 3rem !important;\n  }\n\n  .ms-lg-auto {\n    margin-left: auto !important;\n  }\n\n  .p-lg-0 {\n    padding: 0 !important;\n  }\n\n  .p-lg-1 {\n    padding: 0.25rem !important;\n  }\n\n  .p-lg-2 {\n    padding: 0.5rem !important;\n  }\n\n  .p-lg-3 {\n    padding: 1rem !important;\n  }\n\n  .p-lg-4 {\n    padding: 1.5rem !important;\n  }\n\n  .p-lg-5 {\n    padding: 3rem !important;\n  }\n\n  .px-lg-0 {\n    padding-right: 0 !important;\n    padding-left: 0 !important;\n  }\n\n  .px-lg-1 {\n    padding-right: 0.25rem !important;\n    padding-left: 0.25rem !important;\n  }\n\n  .px-lg-2 {\n    padding-right: 0.5rem !important;\n    padding-left: 0.5rem !important;\n  }\n\n  .px-lg-3 {\n    padding-right: 1rem !important;\n    padding-left: 1rem !important;\n  }\n\n  .px-lg-4 {\n    padding-right: 1.5rem !important;\n    padding-left: 1.5rem !important;\n  }\n\n  .px-lg-5 {\n    padding-right: 3rem !important;\n    padding-left: 3rem !important;\n  }\n\n  .py-lg-0 {\n    padding-top: 0 !important;\n    padding-bottom: 0 !important;\n  }\n\n  .py-lg-1 {\n    padding-top: 0.25rem !important;\n    padding-bottom: 0.25rem !important;\n  }\n\n  .py-lg-2 {\n    padding-top: 0.5rem !important;\n    padding-bottom: 0.5rem !important;\n  }\n\n  .py-lg-3 {\n    padding-top: 1rem !important;\n    padding-bottom: 1rem !important;\n  }\n\n  .py-lg-4 {\n    padding-top: 1.5rem !important;\n    padding-bottom: 1.5rem !important;\n  }\n\n  .py-lg-5 {\n    padding-top: 3rem !important;\n    padding-bottom: 3rem !important;\n  }\n\n  .pt-lg-0 {\n    padding-top: 0 !important;\n  }\n\n  .pt-lg-1 {\n    padding-top: 0.25rem !important;\n  }\n\n  .pt-lg-2 {\n    padding-top: 0.5rem !important;\n  }\n\n  .pt-lg-3 {\n    padding-top: 1rem !important;\n  }\n\n  .pt-lg-4 {\n    padding-top: 1.5rem !important;\n  }\n\n  .pt-lg-5 {\n    padding-top: 3rem !important;\n  }\n\n  .pe-lg-0 {\n    padding-right: 0 !important;\n  }\n\n  .pe-lg-1 {\n    padding-right: 0.25rem !important;\n  }\n\n  .pe-lg-2 {\n    padding-right: 0.5rem !important;\n  }\n\n  .pe-lg-3 {\n    padding-right: 1rem !important;\n  }\n\n  .pe-lg-4 {\n    padding-right: 1.5rem !important;\n  }\n\n  .pe-lg-5 {\n    padding-right: 3rem !important;\n  }\n\n  .pb-lg-0 {\n    padding-bottom: 0 !important;\n  }\n\n  .pb-lg-1 {\n    padding-bottom: 0.25rem !important;\n  }\n\n  .pb-lg-2 {\n    padding-bottom: 0.5rem !important;\n  }\n\n  .pb-lg-3 {\n    padding-bottom: 1rem !important;\n  }\n\n  .pb-lg-4 {\n    padding-bottom: 1.5rem !important;\n  }\n\n  .pb-lg-5 {\n    padding-bottom: 3rem !important;\n  }\n\n  .ps-lg-0 {\n    padding-left: 0 !important;\n  }\n\n  .ps-lg-1 {\n    padding-left: 0.25rem !important;\n  }\n\n  .ps-lg-2 {\n    padding-left: 0.5rem !important;\n  }\n\n  .ps-lg-3 {\n    padding-left: 1rem !important;\n  }\n\n  .ps-lg-4 {\n    padding-left: 1.5rem !important;\n  }\n\n  .ps-lg-5 {\n    padding-left: 3rem !important;\n  }\n\n  .text-lg-start {\n    text-align: left !important;\n  }\n\n  .text-lg-end {\n    text-align: right !important;\n  }\n\n  .text-lg-center {\n    text-align: center !important;\n  }\n}\n@media (min-width: 1200px) {\n  .float-xl-start {\n    float: left !important;\n  }\n\n  .float-xl-end {\n    float: right !important;\n  }\n\n  .float-xl-none {\n    float: none !important;\n  }\n\n  .d-xl-inline {\n    display: inline !important;\n  }\n\n  .d-xl-inline-block {\n    display: inline-block !important;\n  }\n\n  .d-xl-block {\n    display: block !important;\n  }\n\n  .d-xl-grid {\n    display: grid !important;\n  }\n\n  .d-xl-table {\n    display: table !important;\n  }\n\n  .d-xl-table-row {\n    display: table-row !important;\n  }\n\n  .d-xl-table-cell {\n    display: table-cell !important;\n  }\n\n  .d-xl-flex {\n    display: flex !important;\n  }\n\n  .d-xl-inline-flex {\n    display: inline-flex !important;\n  }\n\n  .d-xl-none {\n    display: none !important;\n  }\n\n  .flex-xl-fill {\n    flex: 1 1 auto !important;\n  }\n\n  .flex-xl-row {\n    flex-direction: row !important;\n  }\n\n  .flex-xl-column {\n    flex-direction: column !important;\n  }\n\n  .flex-xl-row-reverse {\n    flex-direction: row-reverse !important;\n  }\n\n  .flex-xl-column-reverse {\n    flex-direction: column-reverse !important;\n  }\n\n  .flex-xl-grow-0 {\n    flex-grow: 0 !important;\n  }\n\n  .flex-xl-grow-1 {\n    flex-grow: 1 !important;\n  }\n\n  .flex-xl-shrink-0 {\n    flex-shrink: 0 !important;\n  }\n\n  .flex-xl-shrink-1 {\n    flex-shrink: 1 !important;\n  }\n\n  .flex-xl-wrap {\n    flex-wrap: wrap !important;\n  }\n\n  .flex-xl-nowrap {\n    flex-wrap: nowrap !important;\n  }\n\n  .flex-xl-wrap-reverse {\n    flex-wrap: wrap-reverse !important;\n  }\n\n  .gap-xl-0 {\n    gap: 0 !important;\n  }\n\n  .gap-xl-1 {\n    gap: 0.25rem !important;\n  }\n\n  .gap-xl-2 {\n    gap: 0.5rem !important;\n  }\n\n  .gap-xl-3 {\n    gap: 1rem !important;\n  }\n\n  .gap-xl-4 {\n    gap: 1.5rem !important;\n  }\n\n  .gap-xl-5 {\n    gap: 3rem !important;\n  }\n\n  .justify-content-xl-start {\n    justify-content: flex-start !important;\n  }\n\n  .justify-content-xl-end {\n    justify-content: flex-end !important;\n  }\n\n  .justify-content-xl-center {\n    justify-content: center !important;\n  }\n\n  .justify-content-xl-between {\n    justify-content: space-between !important;\n  }\n\n  .justify-content-xl-around {\n    justify-content: space-around !important;\n  }\n\n  .justify-content-xl-evenly {\n    justify-content: space-evenly !important;\n  }\n\n  .align-items-xl-start {\n    align-items: flex-start !important;\n  }\n\n  .align-items-xl-end {\n    align-items: flex-end !important;\n  }\n\n  .align-items-xl-center {\n    align-items: center !important;\n  }\n\n  .align-items-xl-baseline {\n    align-items: baseline !important;\n  }\n\n  .align-items-xl-stretch {\n    align-items: stretch !important;\n  }\n\n  .align-content-xl-start {\n    align-content: flex-start !important;\n  }\n\n  .align-content-xl-end {\n    align-content: flex-end !important;\n  }\n\n  .align-content-xl-center {\n    align-content: center !important;\n  }\n\n  .align-content-xl-between {\n    align-content: space-between !important;\n  }\n\n  .align-content-xl-around {\n    align-content: space-around !important;\n  }\n\n  .align-content-xl-stretch {\n    align-content: stretch !important;\n  }\n\n  .align-self-xl-auto {\n    align-self: auto !important;\n  }\n\n  .align-self-xl-start {\n    align-self: flex-start !important;\n  }\n\n  .align-self-xl-end {\n    align-self: flex-end !important;\n  }\n\n  .align-self-xl-center {\n    align-self: center !important;\n  }\n\n  .align-self-xl-baseline {\n    align-self: baseline !important;\n  }\n\n  .align-self-xl-stretch {\n    align-self: stretch !important;\n  }\n\n  .order-xl-first {\n    order: -1 !important;\n  }\n\n  .order-xl-0 {\n    order: 0 !important;\n  }\n\n  .order-xl-1 {\n    order: 1 !important;\n  }\n\n  .order-xl-2 {\n    order: 2 !important;\n  }\n\n  .order-xl-3 {\n    order: 3 !important;\n  }\n\n  .order-xl-4 {\n    order: 4 !important;\n  }\n\n  .order-xl-5 {\n    order: 5 !important;\n  }\n\n  .order-xl-last {\n    order: 6 !important;\n  }\n\n  .m-xl-0 {\n    margin: 0 !important;\n  }\n\n  .m-xl-1 {\n    margin: 0.25rem !important;\n  }\n\n  .m-xl-2 {\n    margin: 0.5rem !important;\n  }\n\n  .m-xl-3 {\n    margin: 1rem !important;\n  }\n\n  .m-xl-4 {\n    margin: 1.5rem !important;\n  }\n\n  .m-xl-5 {\n    margin: 3rem !important;\n  }\n\n  .m-xl-auto {\n    margin: auto !important;\n  }\n\n  .mx-xl-0 {\n    margin-right: 0 !important;\n    margin-left: 0 !important;\n  }\n\n  .mx-xl-1 {\n    margin-right: 0.25rem !important;\n    margin-left: 0.25rem !important;\n  }\n\n  .mx-xl-2 {\n    margin-right: 0.5rem !important;\n    margin-left: 0.5rem !important;\n  }\n\n  .mx-xl-3 {\n    margin-right: 1rem !important;\n    margin-left: 1rem !important;\n  }\n\n  .mx-xl-4 {\n    margin-right: 1.5rem !important;\n    margin-left: 1.5rem !important;\n  }\n\n  .mx-xl-5 {\n    margin-right: 3rem !important;\n    margin-left: 3rem !important;\n  }\n\n  .mx-xl-auto {\n    margin-right: auto !important;\n    margin-left: auto !important;\n  }\n\n  .my-xl-0 {\n    margin-top: 0 !important;\n    margin-bottom: 0 !important;\n  }\n\n  .my-xl-1 {\n    margin-top: 0.25rem !important;\n    margin-bottom: 0.25rem !important;\n  }\n\n  .my-xl-2 {\n    margin-top: 0.5rem !important;\n    margin-bottom: 0.5rem !important;\n  }\n\n  .my-xl-3 {\n    margin-top: 1rem !important;\n    margin-bottom: 1rem !important;\n  }\n\n  .my-xl-4 {\n    margin-top: 1.5rem !important;\n    margin-bottom: 1.5rem !important;\n  }\n\n  .my-xl-5 {\n    margin-top: 3rem !important;\n    margin-bottom: 3rem !important;\n  }\n\n  .my-xl-auto {\n    margin-top: auto !important;\n    margin-bottom: auto !important;\n  }\n\n  .mt-xl-0 {\n    margin-top: 0 !important;\n  }\n\n  .mt-xl-1 {\n    margin-top: 0.25rem !important;\n  }\n\n  .mt-xl-2 {\n    margin-top: 0.5rem !important;\n  }\n\n  .mt-xl-3 {\n    margin-top: 1rem !important;\n  }\n\n  .mt-xl-4 {\n    margin-top: 1.5rem !important;\n  }\n\n  .mt-xl-5 {\n    margin-top: 3rem !important;\n  }\n\n  .mt-xl-auto {\n    margin-top: auto !important;\n  }\n\n  .me-xl-0 {\n    margin-right: 0 !important;\n  }\n\n  .me-xl-1 {\n    margin-right: 0.25rem !important;\n  }\n\n  .me-xl-2 {\n    margin-right: 0.5rem !important;\n  }\n\n  .me-xl-3 {\n    margin-right: 1rem !important;\n  }\n\n  .me-xl-4 {\n    margin-right: 1.5rem !important;\n  }\n\n  .me-xl-5 {\n    margin-right: 3rem !important;\n  }\n\n  .me-xl-auto {\n    margin-right: auto !important;\n  }\n\n  .mb-xl-0 {\n    margin-bottom: 0 !important;\n  }\n\n  .mb-xl-1 {\n    margin-bottom: 0.25rem !important;\n  }\n\n  .mb-xl-2 {\n    margin-bottom: 0.5rem !important;\n  }\n\n  .mb-xl-3 {\n    margin-bottom: 1rem !important;\n  }\n\n  .mb-xl-4 {\n    margin-bottom: 1.5rem !important;\n  }\n\n  .mb-xl-5 {\n    margin-bottom: 3rem !important;\n  }\n\n  .mb-xl-auto {\n    margin-bottom: auto !important;\n  }\n\n  .ms-xl-0 {\n    margin-left: 0 !important;\n  }\n\n  .ms-xl-1 {\n    margin-left: 0.25rem !important;\n  }\n\n  .ms-xl-2 {\n    margin-left: 0.5rem !important;\n  }\n\n  .ms-xl-3 {\n    margin-left: 1rem !important;\n  }\n\n  .ms-xl-4 {\n    margin-left: 1.5rem !important;\n  }\n\n  .ms-xl-5 {\n    margin-left: 3rem !important;\n  }\n\n  .ms-xl-auto {\n    margin-left: auto !important;\n  }\n\n  .p-xl-0 {\n    padding: 0 !important;\n  }\n\n  .p-xl-1 {\n    padding: 0.25rem !important;\n  }\n\n  .p-xl-2 {\n    padding: 0.5rem !important;\n  }\n\n  .p-xl-3 {\n    padding: 1rem !important;\n  }\n\n  .p-xl-4 {\n    padding: 1.5rem !important;\n  }\n\n  .p-xl-5 {\n    padding: 3rem !important;\n  }\n\n  .px-xl-0 {\n    padding-right: 0 !important;\n    padding-left: 0 !important;\n  }\n\n  .px-xl-1 {\n    padding-right: 0.25rem !important;\n    padding-left: 0.25rem !important;\n  }\n\n  .px-xl-2 {\n    padding-right: 0.5rem !important;\n    padding-left: 0.5rem !important;\n  }\n\n  .px-xl-3 {\n    padding-right: 1rem !important;\n    padding-left: 1rem !important;\n  }\n\n  .px-xl-4 {\n    padding-right: 1.5rem !important;\n    padding-left: 1.5rem !important;\n  }\n\n  .px-xl-5 {\n    padding-right: 3rem !important;\n    padding-left: 3rem !important;\n  }\n\n  .py-xl-0 {\n    padding-top: 0 !important;\n    padding-bottom: 0 !important;\n  }\n\n  .py-xl-1 {\n    padding-top: 0.25rem !important;\n    padding-bottom: 0.25rem !important;\n  }\n\n  .py-xl-2 {\n    padding-top: 0.5rem !important;\n    padding-bottom: 0.5rem !important;\n  }\n\n  .py-xl-3 {\n    padding-top: 1rem !important;\n    padding-bottom: 1rem !important;\n  }\n\n  .py-xl-4 {\n    padding-top: 1.5rem !important;\n    padding-bottom: 1.5rem !important;\n  }\n\n  .py-xl-5 {\n    padding-top: 3rem !important;\n    padding-bottom: 3rem !important;\n  }\n\n  .pt-xl-0 {\n    padding-top: 0 !important;\n  }\n\n  .pt-xl-1 {\n    padding-top: 0.25rem !important;\n  }\n\n  .pt-xl-2 {\n    padding-top: 0.5rem !important;\n  }\n\n  .pt-xl-3 {\n    padding-top: 1rem !important;\n  }\n\n  .pt-xl-4 {\n    padding-top: 1.5rem !important;\n  }\n\n  .pt-xl-5 {\n    padding-top: 3rem !important;\n  }\n\n  .pe-xl-0 {\n    padding-right: 0 !important;\n  }\n\n  .pe-xl-1 {\n    padding-right: 0.25rem !important;\n  }\n\n  .pe-xl-2 {\n    padding-right: 0.5rem !important;\n  }\n\n  .pe-xl-3 {\n    padding-right: 1rem !important;\n  }\n\n  .pe-xl-4 {\n    padding-right: 1.5rem !important;\n  }\n\n  .pe-xl-5 {\n    padding-right: 3rem !important;\n  }\n\n  .pb-xl-0 {\n    padding-bottom: 0 !important;\n  }\n\n  .pb-xl-1 {\n    padding-bottom: 0.25rem !important;\n  }\n\n  .pb-xl-2 {\n    padding-bottom: 0.5rem !important;\n  }\n\n  .pb-xl-3 {\n    padding-bottom: 1rem !important;\n  }\n\n  .pb-xl-4 {\n    padding-bottom: 1.5rem !important;\n  }\n\n  .pb-xl-5 {\n    padding-bottom: 3rem !important;\n  }\n\n  .ps-xl-0 {\n    padding-left: 0 !important;\n  }\n\n  .ps-xl-1 {\n    padding-left: 0.25rem !important;\n  }\n\n  .ps-xl-2 {\n    padding-left: 0.5rem !important;\n  }\n\n  .ps-xl-3 {\n    padding-left: 1rem !important;\n  }\n\n  .ps-xl-4 {\n    padding-left: 1.5rem !important;\n  }\n\n  .ps-xl-5 {\n    padding-left: 3rem !important;\n  }\n\n  .text-xl-start {\n    text-align: left !important;\n  }\n\n  .text-xl-end {\n    text-align: right !important;\n  }\n\n  .text-xl-center {\n    text-align: center !important;\n  }\n}\n@media (min-width: 1400px) {\n  .float-xxl-start {\n    float: left !important;\n  }\n\n  .float-xxl-end {\n    float: right !important;\n  }\n\n  .float-xxl-none {\n    float: none !important;\n  }\n\n  .d-xxl-inline {\n    display: inline !important;\n  }\n\n  .d-xxl-inline-block {\n    display: inline-block !important;\n  }\n\n  .d-xxl-block {\n    display: block !important;\n  }\n\n  .d-xxl-grid {\n    display: grid !important;\n  }\n\n  .d-xxl-table {\n    display: table !important;\n  }\n\n  .d-xxl-table-row {\n    display: table-row !important;\n  }\n\n  .d-xxl-table-cell {\n    display: table-cell !important;\n  }\n\n  .d-xxl-flex {\n    display: flex !important;\n  }\n\n  .d-xxl-inline-flex {\n    display: inline-flex !important;\n  }\n\n  .d-xxl-none {\n    display: none !important;\n  }\n\n  .flex-xxl-fill {\n    flex: 1 1 auto !important;\n  }\n\n  .flex-xxl-row {\n    flex-direction: row !important;\n  }\n\n  .flex-xxl-column {\n    flex-direction: column !important;\n  }\n\n  .flex-xxl-row-reverse {\n    flex-direction: row-reverse !important;\n  }\n\n  .flex-xxl-column-reverse {\n    flex-direction: column-reverse !important;\n  }\n\n  .flex-xxl-grow-0 {\n    flex-grow: 0 !important;\n  }\n\n  .flex-xxl-grow-1 {\n    flex-grow: 1 !important;\n  }\n\n  .flex-xxl-shrink-0 {\n    flex-shrink: 0 !important;\n  }\n\n  .flex-xxl-shrink-1 {\n    flex-shrink: 1 !important;\n  }\n\n  .flex-xxl-wrap {\n    flex-wrap: wrap !important;\n  }\n\n  .flex-xxl-nowrap {\n    flex-wrap: nowrap !important;\n  }\n\n  .flex-xxl-wrap-reverse {\n    flex-wrap: wrap-reverse !important;\n  }\n\n  .gap-xxl-0 {\n    gap: 0 !important;\n  }\n\n  .gap-xxl-1 {\n    gap: 0.25rem !important;\n  }\n\n  .gap-xxl-2 {\n    gap: 0.5rem !important;\n  }\n\n  .gap-xxl-3 {\n    gap: 1rem !important;\n  }\n\n  .gap-xxl-4 {\n    gap: 1.5rem !important;\n  }\n\n  .gap-xxl-5 {\n    gap: 3rem !important;\n  }\n\n  .justify-content-xxl-start {\n    justify-content: flex-start !important;\n  }\n\n  .justify-content-xxl-end {\n    justify-content: flex-end !important;\n  }\n\n  .justify-content-xxl-center {\n    justify-content: center !important;\n  }\n\n  .justify-content-xxl-between {\n    justify-content: space-between !important;\n  }\n\n  .justify-content-xxl-around {\n    justify-content: space-around !important;\n  }\n\n  .justify-content-xxl-evenly {\n    justify-content: space-evenly !important;\n  }\n\n  .align-items-xxl-start {\n    align-items: flex-start !important;\n  }\n\n  .align-items-xxl-end {\n    align-items: flex-end !important;\n  }\n\n  .align-items-xxl-center {\n    align-items: center !important;\n  }\n\n  .align-items-xxl-baseline {\n    align-items: baseline !important;\n  }\n\n  .align-items-xxl-stretch {\n    align-items: stretch !important;\n  }\n\n  .align-content-xxl-start {\n    align-content: flex-start !important;\n  }\n\n  .align-content-xxl-end {\n    align-content: flex-end !important;\n  }\n\n  .align-content-xxl-center {\n    align-content: center !important;\n  }\n\n  .align-content-xxl-between {\n    align-content: space-between !important;\n  }\n\n  .align-content-xxl-around {\n    align-content: space-around !important;\n  }\n\n  .align-content-xxl-stretch {\n    align-content: stretch !important;\n  }\n\n  .align-self-xxl-auto {\n    align-self: auto !important;\n  }\n\n  .align-self-xxl-start {\n    align-self: flex-start !important;\n  }\n\n  .align-self-xxl-end {\n    align-self: flex-end !important;\n  }\n\n  .align-self-xxl-center {\n    align-self: center !important;\n  }\n\n  .align-self-xxl-baseline {\n    align-self: baseline !important;\n  }\n\n  .align-self-xxl-stretch {\n    align-self: stretch !important;\n  }\n\n  .order-xxl-first {\n    order: -1 !important;\n  }\n\n  .order-xxl-0 {\n    order: 0 !important;\n  }\n\n  .order-xxl-1 {\n    order: 1 !important;\n  }\n\n  .order-xxl-2 {\n    order: 2 !important;\n  }\n\n  .order-xxl-3 {\n    order: 3 !important;\n  }\n\n  .order-xxl-4 {\n    order: 4 !important;\n  }\n\n  .order-xxl-5 {\n    order: 5 !important;\n  }\n\n  .order-xxl-last {\n    order: 6 !important;\n  }\n\n  .m-xxl-0 {\n    margin: 0 !important;\n  }\n\n  .m-xxl-1 {\n    margin: 0.25rem !important;\n  }\n\n  .m-xxl-2 {\n    margin: 0.5rem !important;\n  }\n\n  .m-xxl-3 {\n    margin: 1rem !important;\n  }\n\n  .m-xxl-4 {\n    margin: 1.5rem !important;\n  }\n\n  .m-xxl-5 {\n    margin: 3rem !important;\n  }\n\n  .m-xxl-auto {\n    margin: auto !important;\n  }\n\n  .mx-xxl-0 {\n    margin-right: 0 !important;\n    margin-left: 0 !important;\n  }\n\n  .mx-xxl-1 {\n    margin-right: 0.25rem !important;\n    margin-left: 0.25rem !important;\n  }\n\n  .mx-xxl-2 {\n    margin-right: 0.5rem !important;\n    margin-left: 0.5rem !important;\n  }\n\n  .mx-xxl-3 {\n    margin-right: 1rem !important;\n    margin-left: 1rem !important;\n  }\n\n  .mx-xxl-4 {\n    margin-right: 1.5rem !important;\n    margin-left: 1.5rem !important;\n  }\n\n  .mx-xxl-5 {\n    margin-right: 3rem !important;\n    margin-left: 3rem !important;\n  }\n\n  .mx-xxl-auto {\n    margin-right: auto !important;\n    margin-left: auto !important;\n  }\n\n  .my-xxl-0 {\n    margin-top: 0 !important;\n    margin-bottom: 0 !important;\n  }\n\n  .my-xxl-1 {\n    margin-top: 0.25rem !important;\n    margin-bottom: 0.25rem !important;\n  }\n\n  .my-xxl-2 {\n    margin-top: 0.5rem !important;\n    margin-bottom: 0.5rem !important;\n  }\n\n  .my-xxl-3 {\n    margin-top: 1rem !important;\n    margin-bottom: 1rem !important;\n  }\n\n  .my-xxl-4 {\n    margin-top: 1.5rem !important;\n    margin-bottom: 1.5rem !important;\n  }\n\n  .my-xxl-5 {\n    margin-top: 3rem !important;\n    margin-bottom: 3rem !important;\n  }\n\n  .my-xxl-auto {\n    margin-top: auto !important;\n    margin-bottom: auto !important;\n  }\n\n  .mt-xxl-0 {\n    margin-top: 0 !important;\n  }\n\n  .mt-xxl-1 {\n    margin-top: 0.25rem !important;\n  }\n\n  .mt-xxl-2 {\n    margin-top: 0.5rem !important;\n  }\n\n  .mt-xxl-3 {\n    margin-top: 1rem !important;\n  }\n\n  .mt-xxl-4 {\n    margin-top: 1.5rem !important;\n  }\n\n  .mt-xxl-5 {\n    margin-top: 3rem !important;\n  }\n\n  .mt-xxl-auto {\n    margin-top: auto !important;\n  }\n\n  .me-xxl-0 {\n    margin-right: 0 !important;\n  }\n\n  .me-xxl-1 {\n    margin-right: 0.25rem !important;\n  }\n\n  .me-xxl-2 {\n    margin-right: 0.5rem !important;\n  }\n\n  .me-xxl-3 {\n    margin-right: 1rem !important;\n  }\n\n  .me-xxl-4 {\n    margin-right: 1.5rem !important;\n  }\n\n  .me-xxl-5 {\n    margin-right: 3rem !important;\n  }\n\n  .me-xxl-auto {\n    margin-right: auto !important;\n  }\n\n  .mb-xxl-0 {\n    margin-bottom: 0 !important;\n  }\n\n  .mb-xxl-1 {\n    margin-bottom: 0.25rem !important;\n  }\n\n  .mb-xxl-2 {\n    margin-bottom: 0.5rem !important;\n  }\n\n  .mb-xxl-3 {\n    margin-bottom: 1rem !important;\n  }\n\n  .mb-xxl-4 {\n    margin-bottom: 1.5rem !important;\n  }\n\n  .mb-xxl-5 {\n    margin-bottom: 3rem !important;\n  }\n\n  .mb-xxl-auto {\n    margin-bottom: auto !important;\n  }\n\n  .ms-xxl-0 {\n    margin-left: 0 !important;\n  }\n\n  .ms-xxl-1 {\n    margin-left: 0.25rem !important;\n  }\n\n  .ms-xxl-2 {\n    margin-left: 0.5rem !important;\n  }\n\n  .ms-xxl-3 {\n    margin-left: 1rem !important;\n  }\n\n  .ms-xxl-4 {\n    margin-left: 1.5rem !important;\n  }\n\n  .ms-xxl-5 {\n    margin-left: 3rem !important;\n  }\n\n  .ms-xxl-auto {\n    margin-left: auto !important;\n  }\n\n  .p-xxl-0 {\n    padding: 0 !important;\n  }\n\n  .p-xxl-1 {\n    padding: 0.25rem !important;\n  }\n\n  .p-xxl-2 {\n    padding: 0.5rem !important;\n  }\n\n  .p-xxl-3 {\n    padding: 1rem !important;\n  }\n\n  .p-xxl-4 {\n    padding: 1.5rem !important;\n  }\n\n  .p-xxl-5 {\n    padding: 3rem !important;\n  }\n\n  .px-xxl-0 {\n    padding-right: 0 !important;\n    padding-left: 0 !important;\n  }\n\n  .px-xxl-1 {\n    padding-right: 0.25rem !important;\n    padding-left: 0.25rem !important;\n  }\n\n  .px-xxl-2 {\n    padding-right: 0.5rem !important;\n    padding-left: 0.5rem !important;\n  }\n\n  .px-xxl-3 {\n    padding-right: 1rem !important;\n    padding-left: 1rem !important;\n  }\n\n  .px-xxl-4 {\n    padding-right: 1.5rem !important;\n    padding-left: 1.5rem !important;\n  }\n\n  .px-xxl-5 {\n    padding-right: 3rem !important;\n    padding-left: 3rem !important;\n  }\n\n  .py-xxl-0 {\n    padding-top: 0 !important;\n    padding-bottom: 0 !important;\n  }\n\n  .py-xxl-1 {\n    padding-top: 0.25rem !important;\n    padding-bottom: 0.25rem !important;\n  }\n\n  .py-xxl-2 {\n    padding-top: 0.5rem !important;\n    padding-bottom: 0.5rem !important;\n  }\n\n  .py-xxl-3 {\n    padding-top: 1rem !important;\n    padding-bottom: 1rem !important;\n  }\n\n  .py-xxl-4 {\n    padding-top: 1.5rem !important;\n    padding-bottom: 1.5rem !important;\n  }\n\n  .py-xxl-5 {\n    padding-top: 3rem !important;\n    padding-bottom: 3rem !important;\n  }\n\n  .pt-xxl-0 {\n    padding-top: 0 !important;\n  }\n\n  .pt-xxl-1 {\n    padding-top: 0.25rem !important;\n  }\n\n  .pt-xxl-2 {\n    padding-top: 0.5rem !important;\n  }\n\n  .pt-xxl-3 {\n    padding-top: 1rem !important;\n  }\n\n  .pt-xxl-4 {\n    padding-top: 1.5rem !important;\n  }\n\n  .pt-xxl-5 {\n    padding-top: 3rem !important;\n  }\n\n  .pe-xxl-0 {\n    padding-right: 0 !important;\n  }\n\n  .pe-xxl-1 {\n    padding-right: 0.25rem !important;\n  }\n\n  .pe-xxl-2 {\n    padding-right: 0.5rem !important;\n  }\n\n  .pe-xxl-3 {\n    padding-right: 1rem !important;\n  }\n\n  .pe-xxl-4 {\n    padding-right: 1.5rem !important;\n  }\n\n  .pe-xxl-5 {\n    padding-right: 3rem !important;\n  }\n\n  .pb-xxl-0 {\n    padding-bottom: 0 !important;\n  }\n\n  .pb-xxl-1 {\n    padding-bottom: 0.25rem !important;\n  }\n\n  .pb-xxl-2 {\n    padding-bottom: 0.5rem !important;\n  }\n\n  .pb-xxl-3 {\n    padding-bottom: 1rem !important;\n  }\n\n  .pb-xxl-4 {\n    padding-bottom: 1.5rem !important;\n  }\n\n  .pb-xxl-5 {\n    padding-bottom: 3rem !important;\n  }\n\n  .ps-xxl-0 {\n    padding-left: 0 !important;\n  }\n\n  .ps-xxl-1 {\n    padding-left: 0.25rem !important;\n  }\n\n  .ps-xxl-2 {\n    padding-left: 0.5rem !important;\n  }\n\n  .ps-xxl-3 {\n    padding-left: 1rem !important;\n  }\n\n  .ps-xxl-4 {\n    padding-left: 1.5rem !important;\n  }\n\n  .ps-xxl-5 {\n    padding-left: 3rem !important;\n  }\n\n  .text-xxl-start {\n    text-align: left !important;\n  }\n\n  .text-xxl-end {\n    text-align: right !important;\n  }\n\n  .text-xxl-center {\n    text-align: center !important;\n  }\n}\n@media (min-width: 1200px) {\n  .fs-1 {\n    font-size: 2.5rem !important;\n  }\n\n  .fs-2 {\n    font-size: 2rem !important;\n  }\n\n  .fs-3 {\n    font-size: 1.75rem !important;\n  }\n\n  .fs-4 {\n    font-size: 1.5rem !important;\n  }\n}\n@media print {\n  .d-print-inline {\n    display: inline !important;\n  }\n\n  .d-print-inline-block {\n    display: inline-block !important;\n  }\n\n  .d-print-block {\n    display: block !important;\n  }\n\n  .d-print-grid {\n    display: grid !important;\n  }\n\n  .d-print-table {\n    display: table !important;\n  }\n\n  .d-print-table-row {\n    display: table-row !important;\n  }\n\n  .d-print-table-cell {\n    display: table-cell !important;\n  }\n\n  .d-print-flex {\n    display: flex !important;\n  }\n\n  .d-print-inline-flex {\n    display: inline-flex !important;\n  }\n\n  .d-print-none {\n    display: none !important;\n  }\n}\n\n/*# sourceMappingURL=bootstrap.css.map */"
  },
  {
    "path": "src/sourceDev.WebApp/wwwroot/css/fontawesome-all.css",
    "content": ".fa,\n.fas,\n.far,\n.fal,\n.fab {\n    -moz-osx-font-smoothing: grayscale;\n    -webkit-font-smoothing: antialiased;\n    display: inline-block;\n    font-style: normal;\n    font-variant: normal;\n    text-rendering: auto;\n    line-height: 1;\n}\n\n.fa-lg {\n    font-size: 1.33333em;\n    line-height: 0.75em;\n    vertical-align: -.0667em;\n}\n\n.fa-xs {\n    font-size: .75em;\n}\n\n.fa-sm {\n    font-size: .875em;\n}\n\n.fa-1x {\n    font-size: 1em;\n}\n\n.fa-2x {\n    font-size: 2em;\n}\n\n.fa-3x {\n    font-size: 3em;\n}\n\n.fa-4x {\n    font-size: 4em;\n}\n\n.fa-5x {\n    font-size: 5em;\n}\n\n.fa-6x {\n    font-size: 6em;\n}\n\n.fa-7x {\n    font-size: 7em;\n}\n\n.fa-8x {\n    font-size: 8em;\n}\n\n.fa-9x {\n    font-size: 9em;\n}\n\n.fa-10x {\n    font-size: 10em;\n}\n\n.fa-fw {\n    text-align: center;\n    width: 1.25em;\n}\n\n.fa-ul {\n    list-style-type: none;\n    margin-left: 2.5em;\n    padding-left: 0;\n}\n\n    .fa-ul > li {\n        position: relative;\n    }\n\n.fa-li {\n    left: -2em;\n    position: absolute;\n    text-align: center;\n    width: 2em;\n    line-height: inherit;\n}\n\n.fa-border {\n    border: solid 0.08em #eee;\n    border-radius: .1em;\n    padding: .2em .25em .15em;\n}\n\n.fa-pull-left {\n    float: left;\n}\n\n.fa-pull-right {\n    float: right;\n}\n\n.fa.fa-pull-left,\n.fas.fa-pull-left,\n.far.fa-pull-left,\n.fal.fa-pull-left,\n.fab.fa-pull-left {\n    margin-right: .3em;\n}\n\n.fa.fa-pull-right,\n.fas.fa-pull-right,\n.far.fa-pull-right,\n.fal.fa-pull-right,\n.fab.fa-pull-right {\n    margin-left: .3em;\n}\n\n.fa-spin {\n    -webkit-animation: fa-spin 2s infinite linear;\n    animation: fa-spin 2s infinite linear;\n}\n\n.fa-pulse {\n    -webkit-animation: fa-spin 1s infinite steps(8);\n    animation: fa-spin 1s infinite steps(8);\n}\n\n@-webkit-keyframes fa-spin {\n    0% {\n        -webkit-transform: rotate(0deg);\n        transform: rotate(0deg);\n    }\n\n    100% {\n        -webkit-transform: rotate(360deg);\n        transform: rotate(360deg);\n    }\n}\n\n@keyframes fa-spin {\n    0% {\n        -webkit-transform: rotate(0deg);\n        transform: rotate(0deg);\n    }\n\n    100% {\n        -webkit-transform: rotate(360deg);\n        transform: rotate(360deg);\n    }\n}\n\n.fa-rotate-90 {\n    -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)\";\n    -webkit-transform: rotate(90deg);\n    transform: rotate(90deg);\n}\n\n.fa-rotate-180 {\n    -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)\";\n    -webkit-transform: rotate(180deg);\n    transform: rotate(180deg);\n}\n\n.fa-rotate-270 {\n    -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)\";\n    -webkit-transform: rotate(270deg);\n    transform: rotate(270deg);\n}\n\n.fa-flip-horizontal {\n    -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)\";\n    -webkit-transform: scale(-1, 1);\n    transform: scale(-1, 1);\n}\n\n.fa-flip-vertical {\n    -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)\";\n    -webkit-transform: scale(1, -1);\n    transform: scale(1, -1);\n}\n\n.fa-flip-horizontal.fa-flip-vertical {\n    -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)\";\n    -webkit-transform: scale(-1, -1);\n    transform: scale(-1, -1);\n}\n\n:root .fa-rotate-90,\n:root .fa-rotate-180,\n:root .fa-rotate-270,\n:root .fa-flip-horizontal,\n:root .fa-flip-vertical {\n    -webkit-filter: none;\n    filter: none;\n}\n\n.fa-stack {\n    display: inline-block;\n    height: 2em;\n    line-height: 2em;\n    position: relative;\n    vertical-align: middle;\n    width: 2.5em;\n}\n\n.fa-stack-1x,\n.fa-stack-2x {\n    left: 0;\n    position: absolute;\n    text-align: center;\n    width: 100%;\n}\n\n.fa-stack-1x {\n    line-height: inherit;\n}\n\n.fa-stack-2x {\n    font-size: 2em;\n}\n\n.fa-inverse {\n    color: #fff;\n}\n\n/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen\nreaders do not read off random characters that represent icons */\n.fa-500px:before {\n    content: \"\\f26e\";\n}\n\n.fa-accessible-icon:before {\n    content: \"\\f368\";\n}\n\n.fa-accusoft:before {\n    content: \"\\f369\";\n}\n\n.fa-acquisitions-incorporated:before {\n    content: \"\\f6af\";\n}\n\n.fa-ad:before {\n    content: \"\\f641\";\n}\n\n.fa-address-book:before {\n    content: \"\\f2b9\";\n}\n\n.fa-address-card:before {\n    content: \"\\f2bb\";\n}\n\n.fa-adjust:before {\n    content: \"\\f042\";\n}\n\n.fa-adn:before {\n    content: \"\\f170\";\n}\n\n.fa-adobe:before {\n    content: \"\\f778\";\n}\n\n.fa-adversal:before {\n    content: \"\\f36a\";\n}\n\n.fa-affiliatetheme:before {\n    content: \"\\f36b\";\n}\n\n.fa-air-freshener:before {\n    content: \"\\f5d0\";\n}\n\n.fa-algolia:before {\n    content: \"\\f36c\";\n}\n\n.fa-align-center:before {\n    content: \"\\f037\";\n}\n\n.fa-align-justify:before {\n    content: \"\\f039\";\n}\n\n.fa-align-left:before {\n    content: \"\\f036\";\n}\n\n.fa-align-right:before {\n    content: \"\\f038\";\n}\n\n.fa-alipay:before {\n    content: \"\\f642\";\n}\n\n.fa-allergies:before {\n    content: \"\\f461\";\n}\n\n.fa-amazon:before {\n    content: \"\\f270\";\n}\n\n.fa-amazon-pay:before {\n    content: \"\\f42c\";\n}\n\n.fa-ambulance:before {\n    content: \"\\f0f9\";\n}\n\n.fa-american-sign-language-interpreting:before {\n    content: \"\\f2a3\";\n}\n\n.fa-amilia:before {\n    content: \"\\f36d\";\n}\n\n.fa-anchor:before {\n    content: \"\\f13d\";\n}\n\n.fa-android:before {\n    content: \"\\f17b\";\n}\n\n.fa-angellist:before {\n    content: \"\\f209\";\n}\n\n.fa-angle-double-down:before {\n    content: \"\\f103\";\n}\n\n.fa-angle-double-left:before {\n    content: \"\\f100\";\n}\n\n.fa-angle-double-right:before {\n    content: \"\\f101\";\n}\n\n.fa-angle-double-up:before {\n    content: \"\\f102\";\n}\n\n.fa-angle-down:before {\n    content: \"\\f107\";\n}\n\n.fa-angle-left:before {\n    content: \"\\f104\";\n}\n\n.fa-angle-right:before {\n    content: \"\\f105\";\n}\n\n.fa-angle-up:before {\n    content: \"\\f106\";\n}\n\n.fa-angry:before {\n    content: \"\\f556\";\n}\n\n.fa-angrycreative:before {\n    content: \"\\f36e\";\n}\n\n.fa-angular:before {\n    content: \"\\f420\";\n}\n\n.fa-ankh:before {\n    content: \"\\f644\";\n}\n\n.fa-app-store:before {\n    content: \"\\f36f\";\n}\n\n.fa-app-store-ios:before {\n    content: \"\\f370\";\n}\n\n.fa-apper:before {\n    content: \"\\f371\";\n}\n\n.fa-apple:before {\n    content: \"\\f179\";\n}\n\n.fa-apple-alt:before {\n    content: \"\\f5d1\";\n}\n\n.fa-apple-pay:before {\n    content: \"\\f415\";\n}\n\n.fa-archive:before {\n    content: \"\\f187\";\n}\n\n.fa-archway:before {\n    content: \"\\f557\";\n}\n\n.fa-arrow-alt-circle-down:before {\n    content: \"\\f358\";\n}\n\n.fa-arrow-alt-circle-left:before {\n    content: \"\\f359\";\n}\n\n.fa-arrow-alt-circle-right:before {\n    content: \"\\f35a\";\n}\n\n.fa-arrow-alt-circle-up:before {\n    content: \"\\f35b\";\n}\n\n.fa-arrow-circle-down:before {\n    content: \"\\f0ab\";\n}\n\n.fa-arrow-circle-left:before {\n    content: \"\\f0a8\";\n}\n\n.fa-arrow-circle-right:before {\n    content: \"\\f0a9\";\n}\n\n.fa-arrow-circle-up:before {\n    content: \"\\f0aa\";\n}\n\n.fa-arrow-down:before {\n    content: \"\\f063\";\n}\n\n.fa-arrow-left:before {\n    content: \"\\f060\";\n}\n\n.fa-arrow-right:before {\n    content: \"\\f061\";\n}\n\n.fa-arrow-up:before {\n    content: \"\\f062\";\n}\n\n.fa-arrows-alt:before {\n    content: \"\\f0b2\";\n}\n\n.fa-arrows-alt-h:before {\n    content: \"\\f337\";\n}\n\n.fa-arrows-alt-v:before {\n    content: \"\\f338\";\n}\n\n.fa-artstation:before {\n    content: \"\\f77a\";\n}\n\n.fa-assistive-listening-systems:before {\n    content: \"\\f2a2\";\n}\n\n.fa-asterisk:before {\n    content: \"\\f069\";\n}\n\n.fa-asymmetrik:before {\n    content: \"\\f372\";\n}\n\n.fa-at:before {\n    content: \"\\f1fa\";\n}\n\n.fa-atlas:before {\n    content: \"\\f558\";\n}\n\n.fa-atlassian:before {\n    content: \"\\f77b\";\n}\n\n.fa-atom:before {\n    content: \"\\f5d2\";\n}\n\n.fa-audible:before {\n    content: \"\\f373\";\n}\n\n.fa-audio-description:before {\n    content: \"\\f29e\";\n}\n\n.fa-autoprefixer:before {\n    content: \"\\f41c\";\n}\n\n.fa-avianex:before {\n    content: \"\\f374\";\n}\n\n.fa-aviato:before {\n    content: \"\\f421\";\n}\n\n.fa-award:before {\n    content: \"\\f559\";\n}\n\n.fa-aws:before {\n    content: \"\\f375\";\n}\n\n.fa-baby:before {\n    content: \"\\f77c\";\n}\n\n.fa-baby-carriage:before {\n    content: \"\\f77d\";\n}\n\n.fa-backspace:before {\n    content: \"\\f55a\";\n}\n\n.fa-backward:before {\n    content: \"\\f04a\";\n}\n\n.fa-balance-scale:before {\n    content: \"\\f24e\";\n}\n\n.fa-ban:before {\n    content: \"\\f05e\";\n}\n\n.fa-band-aid:before {\n    content: \"\\f462\";\n}\n\n.fa-bandcamp:before {\n    content: \"\\f2d5\";\n}\n\n.fa-barcode:before {\n    content: \"\\f02a\";\n}\n\n.fa-bars:before {\n    content: \"\\f0c9\";\n}\n\n.fa-baseball-ball:before {\n    content: \"\\f433\";\n}\n\n.fa-basketball-ball:before {\n    content: \"\\f434\";\n}\n\n.fa-bath:before {\n    content: \"\\f2cd\";\n}\n\n.fa-battery-empty:before {\n    content: \"\\f244\";\n}\n\n.fa-battery-full:before {\n    content: \"\\f240\";\n}\n\n.fa-battery-half:before {\n    content: \"\\f242\";\n}\n\n.fa-battery-quarter:before {\n    content: \"\\f243\";\n}\n\n.fa-battery-three-quarters:before {\n    content: \"\\f241\";\n}\n\n.fa-bed:before {\n    content: \"\\f236\";\n}\n\n.fa-beer:before {\n    content: \"\\f0fc\";\n}\n\n.fa-behance:before {\n    content: \"\\f1b4\";\n}\n\n.fa-behance-square:before {\n    content: \"\\f1b5\";\n}\n\n.fa-bell:before {\n    content: \"\\f0f3\";\n}\n\n.fa-bell-slash:before {\n    content: \"\\f1f6\";\n}\n\n.fa-bezier-curve:before {\n    content: \"\\f55b\";\n}\n\n.fa-bible:before {\n    content: \"\\f647\";\n}\n\n.fa-bicycle:before {\n    content: \"\\f206\";\n}\n\n.fa-bimobject:before {\n    content: \"\\f378\";\n}\n\n.fa-binoculars:before {\n    content: \"\\f1e5\";\n}\n\n.fa-biohazard:before {\n    content: \"\\f780\";\n}\n\n.fa-birthday-cake:before {\n    content: \"\\f1fd\";\n}\n\n.fa-bitbucket:before {\n    content: \"\\f171\";\n}\n\n.fa-bitcoin:before {\n    content: \"\\f379\";\n}\n\n.fa-bity:before {\n    content: \"\\f37a\";\n}\n\n.fa-black-tie:before {\n    content: \"\\f27e\";\n}\n\n.fa-blackberry:before {\n    content: \"\\f37b\";\n}\n\n.fa-blender:before {\n    content: \"\\f517\";\n}\n\n.fa-blender-phone:before {\n    content: \"\\f6b6\";\n}\n\n.fa-blind:before {\n    content: \"\\f29d\";\n}\n\n.fa-blog:before {\n    content: \"\\f781\";\n}\n\n.fa-blogger:before {\n    content: \"\\f37c\";\n}\n\n.fa-blogger-b:before {\n    content: \"\\f37d\";\n}\n\n.fa-bluetooth:before {\n    content: \"\\f293\";\n}\n\n.fa-bluetooth-b:before {\n    content: \"\\f294\";\n}\n\n.fa-bold:before {\n    content: \"\\f032\";\n}\n\n.fa-bolt:before {\n    content: \"\\f0e7\";\n}\n\n.fa-bomb:before {\n    content: \"\\f1e2\";\n}\n\n.fa-bone:before {\n    content: \"\\f5d7\";\n}\n\n.fa-bong:before {\n    content: \"\\f55c\";\n}\n\n.fa-book:before {\n    content: \"\\f02d\";\n}\n\n.fa-book-dead:before {\n    content: \"\\f6b7\";\n}\n\n.fa-book-open:before {\n    content: \"\\f518\";\n}\n\n.fa-book-reader:before {\n    content: \"\\f5da\";\n}\n\n.fa-bookmark:before {\n    content: \"\\f02e\";\n}\n\n.fa-bowling-ball:before {\n    content: \"\\f436\";\n}\n\n.fa-box:before {\n    content: \"\\f466\";\n}\n\n.fa-box-open:before {\n    content: \"\\f49e\";\n}\n\n.fa-boxes:before {\n    content: \"\\f468\";\n}\n\n.fa-braille:before {\n    content: \"\\f2a1\";\n}\n\n.fa-brain:before {\n    content: \"\\f5dc\";\n}\n\n.fa-briefcase:before {\n    content: \"\\f0b1\";\n}\n\n.fa-briefcase-medical:before {\n    content: \"\\f469\";\n}\n\n.fa-broadcast-tower:before {\n    content: \"\\f519\";\n}\n\n.fa-broom:before {\n    content: \"\\f51a\";\n}\n\n.fa-brush:before {\n    content: \"\\f55d\";\n}\n\n.fa-btc:before {\n    content: \"\\f15a\";\n}\n\n.fa-bug:before {\n    content: \"\\f188\";\n}\n\n.fa-building:before {\n    content: \"\\f1ad\";\n}\n\n.fa-bullhorn:before {\n    content: \"\\f0a1\";\n}\n\n.fa-bullseye:before {\n    content: \"\\f140\";\n}\n\n.fa-burn:before {\n    content: \"\\f46a\";\n}\n\n.fa-buromobelexperte:before {\n    content: \"\\f37f\";\n}\n\n.fa-bus:before {\n    content: \"\\f207\";\n}\n\n.fa-bus-alt:before {\n    content: \"\\f55e\";\n}\n\n.fa-business-time:before {\n    content: \"\\f64a\";\n}\n\n.fa-buysellads:before {\n    content: \"\\f20d\";\n}\n\n.fa-calculator:before {\n    content: \"\\f1ec\";\n}\n\n.fa-calendar:before {\n    content: \"\\f133\";\n}\n\n.fa-calendar-alt:before {\n    content: \"\\f073\";\n}\n\n.fa-calendar-check:before {\n    content: \"\\f274\";\n}\n\n.fa-calendar-day:before {\n    content: \"\\f783\";\n}\n\n.fa-calendar-minus:before {\n    content: \"\\f272\";\n}\n\n.fa-calendar-plus:before {\n    content: \"\\f271\";\n}\n\n.fa-calendar-times:before {\n    content: \"\\f273\";\n}\n\n.fa-calendar-week:before {\n    content: \"\\f784\";\n}\n\n.fa-camera:before {\n    content: \"\\f030\";\n}\n\n.fa-camera-retro:before {\n    content: \"\\f083\";\n}\n\n.fa-campground:before {\n    content: \"\\f6bb\";\n}\n\n.fa-canadian-maple-leaf:before {\n    content: \"\\f785\";\n}\n\n.fa-candy-cane:before {\n    content: \"\\f786\";\n}\n\n.fa-cannabis:before {\n    content: \"\\f55f\";\n}\n\n.fa-capsules:before {\n    content: \"\\f46b\";\n}\n\n.fa-car:before {\n    content: \"\\f1b9\";\n}\n\n.fa-car-alt:before {\n    content: \"\\f5de\";\n}\n\n.fa-car-battery:before {\n    content: \"\\f5df\";\n}\n\n.fa-car-crash:before {\n    content: \"\\f5e1\";\n}\n\n.fa-car-side:before {\n    content: \"\\f5e4\";\n}\n\n.fa-caret-down:before {\n    content: \"\\f0d7\";\n}\n\n.fa-caret-left:before {\n    content: \"\\f0d9\";\n}\n\n.fa-caret-right:before {\n    content: \"\\f0da\";\n}\n\n.fa-caret-square-down:before {\n    content: \"\\f150\";\n}\n\n.fa-caret-square-left:before {\n    content: \"\\f191\";\n}\n\n.fa-caret-square-right:before {\n    content: \"\\f152\";\n}\n\n.fa-caret-square-up:before {\n    content: \"\\f151\";\n}\n\n.fa-caret-up:before {\n    content: \"\\f0d8\";\n}\n\n.fa-carrot:before {\n    content: \"\\f787\";\n}\n\n.fa-cart-arrow-down:before {\n    content: \"\\f218\";\n}\n\n.fa-cart-plus:before {\n    content: \"\\f217\";\n}\n\n.fa-cash-register:before {\n    content: \"\\f788\";\n}\n\n.fa-cat:before {\n    content: \"\\f6be\";\n}\n\n.fa-cc-amazon-pay:before {\n    content: \"\\f42d\";\n}\n\n.fa-cc-amex:before {\n    content: \"\\f1f3\";\n}\n\n.fa-cc-apple-pay:before {\n    content: \"\\f416\";\n}\n\n.fa-cc-diners-club:before {\n    content: \"\\f24c\";\n}\n\n.fa-cc-discover:before {\n    content: \"\\f1f2\";\n}\n\n.fa-cc-jcb:before {\n    content: \"\\f24b\";\n}\n\n.fa-cc-mastercard:before {\n    content: \"\\f1f1\";\n}\n\n.fa-cc-paypal:before {\n    content: \"\\f1f4\";\n}\n\n.fa-cc-stripe:before {\n    content: \"\\f1f5\";\n}\n\n.fa-cc-visa:before {\n    content: \"\\f1f0\";\n}\n\n.fa-centercode:before {\n    content: \"\\f380\";\n}\n\n.fa-centos:before {\n    content: \"\\f789\";\n}\n\n.fa-certificate:before {\n    content: \"\\f0a3\";\n}\n\n.fa-chair:before {\n    content: \"\\f6c0\";\n}\n\n.fa-chalkboard:before {\n    content: \"\\f51b\";\n}\n\n.fa-chalkboard-teacher:before {\n    content: \"\\f51c\";\n}\n\n.fa-charging-station:before {\n    content: \"\\f5e7\";\n}\n\n.fa-chart-area:before {\n    content: \"\\f1fe\";\n}\n\n.fa-chart-bar:before {\n    content: \"\\f080\";\n}\n\n.fa-chart-line:before {\n    content: \"\\f201\";\n}\n\n.fa-chart-pie:before {\n    content: \"\\f200\";\n}\n\n.fa-check:before {\n    content: \"\\f00c\";\n}\n\n.fa-check-circle:before {\n    content: \"\\f058\";\n}\n\n.fa-check-double:before {\n    content: \"\\f560\";\n}\n\n.fa-check-square:before {\n    content: \"\\f14a\";\n}\n\n.fa-chess:before {\n    content: \"\\f439\";\n}\n\n.fa-chess-bishop:before {\n    content: \"\\f43a\";\n}\n\n.fa-chess-board:before {\n    content: \"\\f43c\";\n}\n\n.fa-chess-king:before {\n    content: \"\\f43f\";\n}\n\n.fa-chess-knight:before {\n    content: \"\\f441\";\n}\n\n.fa-chess-pawn:before {\n    content: \"\\f443\";\n}\n\n.fa-chess-queen:before {\n    content: \"\\f445\";\n}\n\n.fa-chess-rook:before {\n    content: \"\\f447\";\n}\n\n.fa-chevron-circle-down:before {\n    content: \"\\f13a\";\n}\n\n.fa-chevron-circle-left:before {\n    content: \"\\f137\";\n}\n\n.fa-chevron-circle-right:before {\n    content: \"\\f138\";\n}\n\n.fa-chevron-circle-up:before {\n    content: \"\\f139\";\n}\n\n.fa-chevron-down:before {\n    content: \"\\f078\";\n}\n\n.fa-chevron-left:before {\n    content: \"\\f053\";\n}\n\n.fa-chevron-right:before {\n    content: \"\\f054\";\n}\n\n.fa-chevron-up:before {\n    content: \"\\f077\";\n}\n\n.fa-child:before {\n    content: \"\\f1ae\";\n}\n\n.fa-chrome:before {\n    content: \"\\f268\";\n}\n\n.fa-church:before {\n    content: \"\\f51d\";\n}\n\n.fa-circle:before {\n    content: \"\\f111\";\n}\n\n.fa-circle-notch:before {\n    content: \"\\f1ce\";\n}\n\n.fa-city:before {\n    content: \"\\f64f\";\n}\n\n.fa-clipboard:before {\n    content: \"\\f328\";\n}\n\n.fa-clipboard-check:before {\n    content: \"\\f46c\";\n}\n\n.fa-clipboard-list:before {\n    content: \"\\f46d\";\n}\n\n.fa-clock:before {\n    content: \"\\f017\";\n}\n\n.fa-clone:before {\n    content: \"\\f24d\";\n}\n\n.fa-closed-captioning:before {\n    content: \"\\f20a\";\n}\n\n.fa-cloud:before {\n    content: \"\\f0c2\";\n}\n\n.fa-cloud-download-alt:before {\n    content: \"\\f381\";\n}\n\n.fa-cloud-meatball:before {\n    content: \"\\f73b\";\n}\n\n.fa-cloud-moon:before {\n    content: \"\\f6c3\";\n}\n\n.fa-cloud-moon-rain:before {\n    content: \"\\f73c\";\n}\n\n.fa-cloud-rain:before {\n    content: \"\\f73d\";\n}\n\n.fa-cloud-showers-heavy:before {\n    content: \"\\f740\";\n}\n\n.fa-cloud-sun:before {\n    content: \"\\f6c4\";\n}\n\n.fa-cloud-sun-rain:before {\n    content: \"\\f743\";\n}\n\n.fa-cloud-upload-alt:before {\n    content: \"\\f382\";\n}\n\n.fa-cloudscale:before {\n    content: \"\\f383\";\n}\n\n.fa-cloudsmith:before {\n    content: \"\\f384\";\n}\n\n.fa-cloudversify:before {\n    content: \"\\f385\";\n}\n\n.fa-cocktail:before {\n    content: \"\\f561\";\n}\n\n.fa-code:before {\n    content: \"\\f121\";\n}\n\n.fa-code-branch:before {\n    content: \"\\f126\";\n}\n\n.fa-codepen:before {\n    content: \"\\f1cb\";\n}\n\n.fa-codiepie:before {\n    content: \"\\f284\";\n}\n\n.fa-coffee:before {\n    content: \"\\f0f4\";\n}\n\n.fa-cog:before {\n    content: \"\\f013\";\n}\n\n.fa-cogs:before {\n    content: \"\\f085\";\n}\n\n.fa-coins:before {\n    content: \"\\f51e\";\n}\n\n.fa-columns:before {\n    content: \"\\f0db\";\n}\n\n.fa-comment:before {\n    content: \"\\f075\";\n}\n\n.fa-comment-alt:before {\n    content: \"\\f27a\";\n}\n\n.fa-comment-dollar:before {\n    content: \"\\f651\";\n}\n\n.fa-comment-dots:before {\n    content: \"\\f4ad\";\n}\n\n.fa-comment-slash:before {\n    content: \"\\f4b3\";\n}\n\n.fa-comments:before {\n    content: \"\\f086\";\n}\n\n.fa-comments-dollar:before {\n    content: \"\\f653\";\n}\n\n.fa-compact-disc:before {\n    content: \"\\f51f\";\n}\n\n.fa-compass:before {\n    content: \"\\f14e\";\n}\n\n.fa-compress:before {\n    content: \"\\f066\";\n}\n\n.fa-compress-arrows-alt:before {\n    content: \"\\f78c\";\n}\n\n.fa-concierge-bell:before {\n    content: \"\\f562\";\n}\n\n.fa-confluence:before {\n    content: \"\\f78d\";\n}\n\n.fa-connectdevelop:before {\n    content: \"\\f20e\";\n}\n\n.fa-contao:before {\n    content: \"\\f26d\";\n}\n\n.fa-cookie:before {\n    content: \"\\f563\";\n}\n\n.fa-cookie-bite:before {\n    content: \"\\f564\";\n}\n\n.fa-copy:before {\n    content: \"\\f0c5\";\n}\n\n.fa-copyright:before {\n    content: \"\\f1f9\";\n}\n\n.fa-couch:before {\n    content: \"\\f4b8\";\n}\n\n.fa-cpanel:before {\n    content: \"\\f388\";\n}\n\n.fa-creative-commons:before {\n    content: \"\\f25e\";\n}\n\n.fa-creative-commons-by:before {\n    content: \"\\f4e7\";\n}\n\n.fa-creative-commons-nc:before {\n    content: \"\\f4e8\";\n}\n\n.fa-creative-commons-nc-eu:before {\n    content: \"\\f4e9\";\n}\n\n.fa-creative-commons-nc-jp:before {\n    content: \"\\f4ea\";\n}\n\n.fa-creative-commons-nd:before {\n    content: \"\\f4eb\";\n}\n\n.fa-creative-commons-pd:before {\n    content: \"\\f4ec\";\n}\n\n.fa-creative-commons-pd-alt:before {\n    content: \"\\f4ed\";\n}\n\n.fa-creative-commons-remix:before {\n    content: \"\\f4ee\";\n}\n\n.fa-creative-commons-sa:before {\n    content: \"\\f4ef\";\n}\n\n.fa-creative-commons-sampling:before {\n    content: \"\\f4f0\";\n}\n\n.fa-creative-commons-sampling-plus:before {\n    content: \"\\f4f1\";\n}\n\n.fa-creative-commons-share:before {\n    content: \"\\f4f2\";\n}\n\n.fa-creative-commons-zero:before {\n    content: \"\\f4f3\";\n}\n\n.fa-credit-card:before {\n    content: \"\\f09d\";\n}\n\n.fa-critical-role:before {\n    content: \"\\f6c9\";\n}\n\n.fa-crop:before {\n    content: \"\\f125\";\n}\n\n.fa-crop-alt:before {\n    content: \"\\f565\";\n}\n\n.fa-cross:before {\n    content: \"\\f654\";\n}\n\n.fa-crosshairs:before {\n    content: \"\\f05b\";\n}\n\n.fa-crow:before {\n    content: \"\\f520\";\n}\n\n.fa-crown:before {\n    content: \"\\f521\";\n}\n\n.fa-css3:before {\n    content: \"\\f13c\";\n}\n\n.fa-css3-alt:before {\n    content: \"\\f38b\";\n}\n\n.fa-cube:before {\n    content: \"\\f1b2\";\n}\n\n.fa-cubes:before {\n    content: \"\\f1b3\";\n}\n\n.fa-cut:before {\n    content: \"\\f0c4\";\n}\n\n.fa-cuttlefish:before {\n    content: \"\\f38c\";\n}\n\n.fa-d-and-d:before {\n    content: \"\\f38d\";\n}\n\n.fa-d-and-d-beyond:before {\n    content: \"\\f6ca\";\n}\n\n.fa-dashcube:before {\n    content: \"\\f210\";\n}\n\n.fa-database:before {\n    content: \"\\f1c0\";\n}\n\n.fa-deaf:before {\n    content: \"\\f2a4\";\n}\n\n.fa-delicious:before {\n    content: \"\\f1a5\";\n}\n\n.fa-democrat:before {\n    content: \"\\f747\";\n}\n\n.fa-deploydog:before {\n    content: \"\\f38e\";\n}\n\n.fa-deskpro:before {\n    content: \"\\f38f\";\n}\n\n.fa-desktop:before {\n    content: \"\\f108\";\n}\n\n.fa-dev:before {\n    content: \"\\f6cc\";\n}\n\n.fa-deviantart:before {\n    content: \"\\f1bd\";\n}\n\n.fa-dharmachakra:before {\n    content: \"\\f655\";\n}\n\n.fa-dhl:before {\n    content: \"\\f790\";\n}\n\n.fa-diagnoses:before {\n    content: \"\\f470\";\n}\n\n.fa-diaspora:before {\n    content: \"\\f791\";\n}\n\n.fa-dice:before {\n    content: \"\\f522\";\n}\n\n.fa-dice-d20:before {\n    content: \"\\f6cf\";\n}\n\n.fa-dice-d6:before {\n    content: \"\\f6d1\";\n}\n\n.fa-dice-five:before {\n    content: \"\\f523\";\n}\n\n.fa-dice-four:before {\n    content: \"\\f524\";\n}\n\n.fa-dice-one:before {\n    content: \"\\f525\";\n}\n\n.fa-dice-six:before {\n    content: \"\\f526\";\n}\n\n.fa-dice-three:before {\n    content: \"\\f527\";\n}\n\n.fa-dice-two:before {\n    content: \"\\f528\";\n}\n\n.fa-digg:before {\n    content: \"\\f1a6\";\n}\n\n.fa-digital-ocean:before {\n    content: \"\\f391\";\n}\n\n.fa-digital-tachograph:before {\n    content: \"\\f566\";\n}\n\n.fa-directions:before {\n    content: \"\\f5eb\";\n}\n\n.fa-discord:before {\n    content: \"\\f392\";\n}\n\n.fa-discourse:before {\n    content: \"\\f393\";\n}\n\n.fa-divide:before {\n    content: \"\\f529\";\n}\n\n.fa-dizzy:before {\n    content: \"\\f567\";\n}\n\n.fa-dna:before {\n    content: \"\\f471\";\n}\n\n.fa-dochub:before {\n    content: \"\\f394\";\n}\n\n.fa-docker:before {\n    content: \"\\f395\";\n}\n\n.fa-dog:before {\n    content: \"\\f6d3\";\n}\n\n.fa-dollar-sign:before {\n    content: \"\\f155\";\n}\n\n.fa-dolly:before {\n    content: \"\\f472\";\n}\n\n.fa-dolly-flatbed:before {\n    content: \"\\f474\";\n}\n\n.fa-donate:before {\n    content: \"\\f4b9\";\n}\n\n.fa-door-closed:before {\n    content: \"\\f52a\";\n}\n\n.fa-door-open:before {\n    content: \"\\f52b\";\n}\n\n.fa-dot-circle:before {\n    content: \"\\f192\";\n}\n\n.fa-dove:before {\n    content: \"\\f4ba\";\n}\n\n.fa-download:before {\n    content: \"\\f019\";\n}\n\n.fa-draft2digital:before {\n    content: \"\\f396\";\n}\n\n.fa-drafting-compass:before {\n    content: \"\\f568\";\n}\n\n.fa-dragon:before {\n    content: \"\\f6d5\";\n}\n\n.fa-draw-polygon:before {\n    content: \"\\f5ee\";\n}\n\n.fa-dribbble:before {\n    content: \"\\f17d\";\n}\n\n.fa-dribbble-square:before {\n    content: \"\\f397\";\n}\n\n.fa-dropbox:before {\n    content: \"\\f16b\";\n}\n\n.fa-drum:before {\n    content: \"\\f569\";\n}\n\n.fa-drum-steelpan:before {\n    content: \"\\f56a\";\n}\n\n.fa-drumstick-bite:before {\n    content: \"\\f6d7\";\n}\n\n.fa-drupal:before {\n    content: \"\\f1a9\";\n}\n\n.fa-dumbbell:before {\n    content: \"\\f44b\";\n}\n\n.fa-dumpster:before {\n    content: \"\\f793\";\n}\n\n.fa-dumpster-fire:before {\n    content: \"\\f794\";\n}\n\n.fa-dungeon:before {\n    content: \"\\f6d9\";\n}\n\n.fa-dyalog:before {\n    content: \"\\f399\";\n}\n\n.fa-earlybirds:before {\n    content: \"\\f39a\";\n}\n\n.fa-ebay:before {\n    content: \"\\f4f4\";\n}\n\n.fa-edge:before {\n    content: \"\\f282\";\n}\n\n.fa-edit:before {\n    content: \"\\f044\";\n}\n\n.fa-eject:before {\n    content: \"\\f052\";\n}\n\n.fa-elementor:before {\n    content: \"\\f430\";\n}\n\n.fa-ellipsis-h:before {\n    content: \"\\f141\";\n}\n\n.fa-ellipsis-v:before {\n    content: \"\\f142\";\n}\n\n.fa-ello:before {\n    content: \"\\f5f1\";\n}\n\n.fa-ember:before {\n    content: \"\\f423\";\n}\n\n.fa-empire:before {\n    content: \"\\f1d1\";\n}\n\n.fa-envelope:before {\n    content: \"\\f0e0\";\n}\n\n.fa-envelope-open:before {\n    content: \"\\f2b6\";\n}\n\n.fa-envelope-open-text:before {\n    content: \"\\f658\";\n}\n\n.fa-envelope-square:before {\n    content: \"\\f199\";\n}\n\n.fa-envira:before {\n    content: \"\\f299\";\n}\n\n.fa-equals:before {\n    content: \"\\f52c\";\n}\n\n.fa-eraser:before {\n    content: \"\\f12d\";\n}\n\n.fa-erlang:before {\n    content: \"\\f39d\";\n}\n\n.fa-ethereum:before {\n    content: \"\\f42e\";\n}\n\n.fa-ethernet:before {\n    content: \"\\f796\";\n}\n\n.fa-etsy:before {\n    content: \"\\f2d7\";\n}\n\n.fa-euro-sign:before {\n    content: \"\\f153\";\n}\n\n.fa-exchange-alt:before {\n    content: \"\\f362\";\n}\n\n.fa-exclamation:before {\n    content: \"\\f12a\";\n}\n\n.fa-exclamation-circle:before {\n    content: \"\\f06a\";\n}\n\n.fa-exclamation-triangle:before {\n    content: \"\\f071\";\n}\n\n.fa-expand:before {\n    content: \"\\f065\";\n}\n\n.fa-expand-arrows-alt:before {\n    content: \"\\f31e\";\n}\n\n.fa-expeditedssl:before {\n    content: \"\\f23e\";\n}\n\n.fa-external-link-alt:before {\n    content: \"\\f35d\";\n}\n\n.fa-external-link-square-alt:before {\n    content: \"\\f360\";\n}\n\n.fa-eye:before {\n    content: \"\\f06e\";\n}\n\n.fa-eye-dropper:before {\n    content: \"\\f1fb\";\n}\n\n.fa-eye-slash:before {\n    content: \"\\f070\";\n}\n\n.fa-facebook:before {\n    content: \"\\f09a\";\n}\n\n.fa-facebook-f:before {\n    content: \"\\f39e\";\n}\n\n.fa-facebook-messenger:before {\n    content: \"\\f39f\";\n}\n\n.fa-facebook-square:before {\n    content: \"\\f082\";\n}\n\n.fa-fantasy-flight-games:before {\n    content: \"\\f6dc\";\n}\n\n.fa-fast-backward:before {\n    content: \"\\f049\";\n}\n\n.fa-fast-forward:before {\n    content: \"\\f050\";\n}\n\n.fa-fax:before {\n    content: \"\\f1ac\";\n}\n\n.fa-feather:before {\n    content: \"\\f52d\";\n}\n\n.fa-feather-alt:before {\n    content: \"\\f56b\";\n}\n\n.fa-fedex:before {\n    content: \"\\f797\";\n}\n\n.fa-fedora:before {\n    content: \"\\f798\";\n}\n\n.fa-female:before {\n    content: \"\\f182\";\n}\n\n.fa-fighter-jet:before {\n    content: \"\\f0fb\";\n}\n\n.fa-figma:before {\n    content: \"\\f799\";\n}\n\n.fa-file:before {\n    content: \"\\f15b\";\n}\n\n.fa-file-alt:before {\n    content: \"\\f15c\";\n}\n\n.fa-file-archive:before {\n    content: \"\\f1c6\";\n}\n\n.fa-file-audio:before {\n    content: \"\\f1c7\";\n}\n\n.fa-file-code:before {\n    content: \"\\f1c9\";\n}\n\n.fa-file-contract:before {\n    content: \"\\f56c\";\n}\n\n.fa-file-csv:before {\n    content: \"\\f6dd\";\n}\n\n.fa-file-download:before {\n    content: \"\\f56d\";\n}\n\n.fa-file-excel:before {\n    content: \"\\f1c3\";\n}\n\n.fa-file-export:before {\n    content: \"\\f56e\";\n}\n\n.fa-file-image:before {\n    content: \"\\f1c5\";\n}\n\n.fa-file-import:before {\n    content: \"\\f56f\";\n}\n\n.fa-file-invoice:before {\n    content: \"\\f570\";\n}\n\n.fa-file-invoice-dollar:before {\n    content: \"\\f571\";\n}\n\n.fa-file-medical:before {\n    content: \"\\f477\";\n}\n\n.fa-file-medical-alt:before {\n    content: \"\\f478\";\n}\n\n.fa-file-pdf:before {\n    content: \"\\f1c1\";\n}\n\n.fa-file-powerpoint:before {\n    content: \"\\f1c4\";\n}\n\n.fa-file-prescription:before {\n    content: \"\\f572\";\n}\n\n.fa-file-signature:before {\n    content: \"\\f573\";\n}\n\n.fa-file-upload:before {\n    content: \"\\f574\";\n}\n\n.fa-file-video:before {\n    content: \"\\f1c8\";\n}\n\n.fa-file-word:before {\n    content: \"\\f1c2\";\n}\n\n.fa-fill:before {\n    content: \"\\f575\";\n}\n\n.fa-fill-drip:before {\n    content: \"\\f576\";\n}\n\n.fa-film:before {\n    content: \"\\f008\";\n}\n\n.fa-filter:before {\n    content: \"\\f0b0\";\n}\n\n.fa-fingerprint:before {\n    content: \"\\f577\";\n}\n\n.fa-fire:before {\n    content: \"\\f06d\";\n}\n\n.fa-fire-alt:before {\n    content: \"\\f7e4\";\n}\n\n.fa-fire-extinguisher:before {\n    content: \"\\f134\";\n}\n\n.fa-firefox:before {\n    content: \"\\f269\";\n}\n\n.fa-first-aid:before {\n    content: \"\\f479\";\n}\n\n.fa-first-order:before {\n    content: \"\\f2b0\";\n}\n\n.fa-first-order-alt:before {\n    content: \"\\f50a\";\n}\n\n.fa-firstdraft:before {\n    content: \"\\f3a1\";\n}\n\n.fa-fish:before {\n    content: \"\\f578\";\n}\n\n.fa-fist-raised:before {\n    content: \"\\f6de\";\n}\n\n.fa-flag:before {\n    content: \"\\f024\";\n}\n\n.fa-flag-checkered:before {\n    content: \"\\f11e\";\n}\n\n.fa-flag-usa:before {\n    content: \"\\f74d\";\n}\n\n.fa-flask:before {\n    content: \"\\f0c3\";\n}\n\n.fa-flickr:before {\n    content: \"\\f16e\";\n}\n\n.fa-flipboard:before {\n    content: \"\\f44d\";\n}\n\n.fa-flushed:before {\n    content: \"\\f579\";\n}\n\n.fa-fly:before {\n    content: \"\\f417\";\n}\n\n.fa-folder:before {\n    content: \"\\f07b\";\n}\n\n.fa-folder-minus:before {\n    content: \"\\f65d\";\n}\n\n.fa-folder-open:before {\n    content: \"\\f07c\";\n}\n\n.fa-folder-plus:before {\n    content: \"\\f65e\";\n}\n\n.fa-font:before {\n    content: \"\\f031\";\n}\n\n.fa-font-awesome:before {\n    content: \"\\f2b4\";\n}\n\n.fa-font-awesome-alt:before {\n    content: \"\\f35c\";\n}\n\n.fa-font-awesome-flag:before {\n    content: \"\\f425\";\n}\n\n.fa-font-awesome-logo-full:before {\n    content: \"\\f4e6\";\n}\n\n.fa-fonticons:before {\n    content: \"\\f280\";\n}\n\n.fa-fonticons-fi:before {\n    content: \"\\f3a2\";\n}\n\n.fa-football-ball:before {\n    content: \"\\f44e\";\n}\n\n.fa-fort-awesome:before {\n    content: \"\\f286\";\n}\n\n.fa-fort-awesome-alt:before {\n    content: \"\\f3a3\";\n}\n\n.fa-forumbee:before {\n    content: \"\\f211\";\n}\n\n.fa-forward:before {\n    content: \"\\f04e\";\n}\n\n.fa-foursquare:before {\n    content: \"\\f180\";\n}\n\n.fa-free-code-camp:before {\n    content: \"\\f2c5\";\n}\n\n.fa-freebsd:before {\n    content: \"\\f3a4\";\n}\n\n.fa-frog:before {\n    content: \"\\f52e\";\n}\n\n.fa-frown:before {\n    content: \"\\f119\";\n}\n\n.fa-frown-open:before {\n    content: \"\\f57a\";\n}\n\n.fa-fulcrum:before {\n    content: \"\\f50b\";\n}\n\n.fa-funnel-dollar:before {\n    content: \"\\f662\";\n}\n\n.fa-futbol:before {\n    content: \"\\f1e3\";\n}\n\n.fa-galactic-republic:before {\n    content: \"\\f50c\";\n}\n\n.fa-galactic-senate:before {\n    content: \"\\f50d\";\n}\n\n.fa-gamepad:before {\n    content: \"\\f11b\";\n}\n\n.fa-gas-pump:before {\n    content: \"\\f52f\";\n}\n\n.fa-gavel:before {\n    content: \"\\f0e3\";\n}\n\n.fa-gem:before {\n    content: \"\\f3a5\";\n}\n\n.fa-genderless:before {\n    content: \"\\f22d\";\n}\n\n.fa-get-pocket:before {\n    content: \"\\f265\";\n}\n\n.fa-gg:before {\n    content: \"\\f260\";\n}\n\n.fa-gg-circle:before {\n    content: \"\\f261\";\n}\n\n.fa-ghost:before {\n    content: \"\\f6e2\";\n}\n\n.fa-gift:before {\n    content: \"\\f06b\";\n}\n\n.fa-gifts:before {\n    content: \"\\f79c\";\n}\n\n.fa-git:before {\n    content: \"\\f1d3\";\n}\n\n.fa-git-square:before {\n    content: \"\\f1d2\";\n}\n\n.fa-github:before {\n    content: \"\\f09b\";\n}\n\n.fa-github-alt:before {\n    content: \"\\f113\";\n}\n\n.fa-github-square:before {\n    content: \"\\f092\";\n}\n\n.fa-gitkraken:before {\n    content: \"\\f3a6\";\n}\n\n.fa-gitlab:before {\n    content: \"\\f296\";\n}\n\n.fa-gitter:before {\n    content: \"\\f426\";\n}\n\n.fa-glass-cheers:before {\n    content: \"\\f79f\";\n}\n\n.fa-glass-martini:before {\n    content: \"\\f000\";\n}\n\n.fa-glass-martini-alt:before {\n    content: \"\\f57b\";\n}\n\n.fa-glass-whiskey:before {\n    content: \"\\f7a0\";\n}\n\n.fa-glasses:before {\n    content: \"\\f530\";\n}\n\n.fa-glide:before {\n    content: \"\\f2a5\";\n}\n\n.fa-glide-g:before {\n    content: \"\\f2a6\";\n}\n\n.fa-globe:before {\n    content: \"\\f0ac\";\n}\n\n.fa-globe-africa:before {\n    content: \"\\f57c\";\n}\n\n.fa-globe-americas:before {\n    content: \"\\f57d\";\n}\n\n.fa-globe-asia:before {\n    content: \"\\f57e\";\n}\n\n.fa-globe-europe:before {\n    content: \"\\f7a2\";\n}\n\n.fa-gofore:before {\n    content: \"\\f3a7\";\n}\n\n.fa-golf-ball:before {\n    content: \"\\f450\";\n}\n\n.fa-goodreads:before {\n    content: \"\\f3a8\";\n}\n\n.fa-goodreads-g:before {\n    content: \"\\f3a9\";\n}\n\n.fa-google:before {\n    content: \"\\f1a0\";\n}\n\n.fa-google-drive:before {\n    content: \"\\f3aa\";\n}\n\n.fa-google-play:before {\n    content: \"\\f3ab\";\n}\n\n.fa-google-plus:before {\n    content: \"\\f2b3\";\n}\n\n.fa-google-plus-g:before {\n    content: \"\\f0d5\";\n}\n\n.fa-google-plus-square:before {\n    content: \"\\f0d4\";\n}\n\n.fa-google-wallet:before {\n    content: \"\\f1ee\";\n}\n\n.fa-gopuram:before {\n    content: \"\\f664\";\n}\n\n.fa-graduation-cap:before {\n    content: \"\\f19d\";\n}\n\n.fa-gratipay:before {\n    content: \"\\f184\";\n}\n\n.fa-grav:before {\n    content: \"\\f2d6\";\n}\n\n.fa-greater-than:before {\n    content: \"\\f531\";\n}\n\n.fa-greater-than-equal:before {\n    content: \"\\f532\";\n}\n\n.fa-grimace:before {\n    content: \"\\f57f\";\n}\n\n.fa-grin:before {\n    content: \"\\f580\";\n}\n\n.fa-grin-alt:before {\n    content: \"\\f581\";\n}\n\n.fa-grin-beam:before {\n    content: \"\\f582\";\n}\n\n.fa-grin-beam-sweat:before {\n    content: \"\\f583\";\n}\n\n.fa-grin-hearts:before {\n    content: \"\\f584\";\n}\n\n.fa-grin-squint:before {\n    content: \"\\f585\";\n}\n\n.fa-grin-squint-tears:before {\n    content: \"\\f586\";\n}\n\n.fa-grin-stars:before {\n    content: \"\\f587\";\n}\n\n.fa-grin-tears:before {\n    content: \"\\f588\";\n}\n\n.fa-grin-tongue:before {\n    content: \"\\f589\";\n}\n\n.fa-grin-tongue-squint:before {\n    content: \"\\f58a\";\n}\n\n.fa-grin-tongue-wink:before {\n    content: \"\\f58b\";\n}\n\n.fa-grin-wink:before {\n    content: \"\\f58c\";\n}\n\n.fa-grip-horizontal:before {\n    content: \"\\f58d\";\n}\n\n.fa-grip-lines:before {\n    content: \"\\f7a4\";\n}\n\n.fa-grip-lines-vertical:before {\n    content: \"\\f7a5\";\n}\n\n.fa-grip-vertical:before {\n    content: \"\\f58e\";\n}\n\n.fa-gripfire:before {\n    content: \"\\f3ac\";\n}\n\n.fa-grunt:before {\n    content: \"\\f3ad\";\n}\n\n.fa-guitar:before {\n    content: \"\\f7a6\";\n}\n\n.fa-gulp:before {\n    content: \"\\f3ae\";\n}\n\n.fa-h-square:before {\n    content: \"\\f0fd\";\n}\n\n.fa-hacker-news:before {\n    content: \"\\f1d4\";\n}\n\n.fa-hacker-news-square:before {\n    content: \"\\f3af\";\n}\n\n.fa-hackerrank:before {\n    content: \"\\f5f7\";\n}\n\n.fa-hammer:before {\n    content: \"\\f6e3\";\n}\n\n.fa-hamsa:before {\n    content: \"\\f665\";\n}\n\n.fa-hand-holding:before {\n    content: \"\\f4bd\";\n}\n\n.fa-hand-holding-heart:before {\n    content: \"\\f4be\";\n}\n\n.fa-hand-holding-usd:before {\n    content: \"\\f4c0\";\n}\n\n.fa-hand-lizard:before {\n    content: \"\\f258\";\n}\n\n.fa-hand-paper:before {\n    content: \"\\f256\";\n}\n\n.fa-hand-peace:before {\n    content: \"\\f25b\";\n}\n\n.fa-hand-point-down:before {\n    content: \"\\f0a7\";\n}\n\n.fa-hand-point-left:before {\n    content: \"\\f0a5\";\n}\n\n.fa-hand-point-right:before {\n    content: \"\\f0a4\";\n}\n\n.fa-hand-point-up:before {\n    content: \"\\f0a6\";\n}\n\n.fa-hand-pointer:before {\n    content: \"\\f25a\";\n}\n\n.fa-hand-rock:before {\n    content: \"\\f255\";\n}\n\n.fa-hand-scissors:before {\n    content: \"\\f257\";\n}\n\n.fa-hand-spock:before {\n    content: \"\\f259\";\n}\n\n.fa-hands:before {\n    content: \"\\f4c2\";\n}\n\n.fa-hands-helping:before {\n    content: \"\\f4c4\";\n}\n\n.fa-handshake:before {\n    content: \"\\f2b5\";\n}\n\n.fa-hanukiah:before {\n    content: \"\\f6e6\";\n}\n\n.fa-hashtag:before {\n    content: \"\\f292\";\n}\n\n.fa-hat-wizard:before {\n    content: \"\\f6e8\";\n}\n\n.fa-haykal:before {\n    content: \"\\f666\";\n}\n\n.fa-hdd:before {\n    content: \"\\f0a0\";\n}\n\n.fa-heading:before {\n    content: \"\\f1dc\";\n}\n\n.fa-headphones:before {\n    content: \"\\f025\";\n}\n\n.fa-headphones-alt:before {\n    content: \"\\f58f\";\n}\n\n.fa-headset:before {\n    content: \"\\f590\";\n}\n\n.fa-heart:before {\n    content: \"\\f004\";\n}\n\n.fa-heart-broken:before {\n    content: \"\\f7a9\";\n}\n\n.fa-heartbeat:before {\n    content: \"\\f21e\";\n}\n\n.fa-helicopter:before {\n    content: \"\\f533\";\n}\n\n.fa-highlighter:before {\n    content: \"\\f591\";\n}\n\n.fa-hiking:before {\n    content: \"\\f6ec\";\n}\n\n.fa-hippo:before {\n    content: \"\\f6ed\";\n}\n\n.fa-hips:before {\n    content: \"\\f452\";\n}\n\n.fa-hire-a-helper:before {\n    content: \"\\f3b0\";\n}\n\n.fa-history:before {\n    content: \"\\f1da\";\n}\n\n.fa-hockey-puck:before {\n    content: \"\\f453\";\n}\n\n.fa-holly-berry:before {\n    content: \"\\f7aa\";\n}\n\n.fa-home:before {\n    content: \"\\f015\";\n}\n\n.fa-hooli:before {\n    content: \"\\f427\";\n}\n\n.fa-hornbill:before {\n    content: \"\\f592\";\n}\n\n.fa-horse:before {\n    content: \"\\f6f0\";\n}\n\n.fa-horse-head:before {\n    content: \"\\f7ab\";\n}\n\n.fa-hospital:before {\n    content: \"\\f0f8\";\n}\n\n.fa-hospital-alt:before {\n    content: \"\\f47d\";\n}\n\n.fa-hospital-symbol:before {\n    content: \"\\f47e\";\n}\n\n.fa-hot-tub:before {\n    content: \"\\f593\";\n}\n\n.fa-hotel:before {\n    content: \"\\f594\";\n}\n\n.fa-hotjar:before {\n    content: \"\\f3b1\";\n}\n\n.fa-hourglass:before {\n    content: \"\\f254\";\n}\n\n.fa-hourglass-end:before {\n    content: \"\\f253\";\n}\n\n.fa-hourglass-half:before {\n    content: \"\\f252\";\n}\n\n.fa-hourglass-start:before {\n    content: \"\\f251\";\n}\n\n.fa-house-damage:before {\n    content: \"\\f6f1\";\n}\n\n.fa-houzz:before {\n    content: \"\\f27c\";\n}\n\n.fa-hryvnia:before {\n    content: \"\\f6f2\";\n}\n\n.fa-html5:before {\n    content: \"\\f13b\";\n}\n\n.fa-hubspot:before {\n    content: \"\\f3b2\";\n}\n\n.fa-i-cursor:before {\n    content: \"\\f246\";\n}\n\n.fa-icicles:before {\n    content: \"\\f7ad\";\n}\n\n.fa-id-badge:before {\n    content: \"\\f2c1\";\n}\n\n.fa-id-card:before {\n    content: \"\\f2c2\";\n}\n\n.fa-id-card-alt:before {\n    content: \"\\f47f\";\n}\n\n.fa-igloo:before {\n    content: \"\\f7ae\";\n}\n\n.fa-image:before {\n    content: \"\\f03e\";\n}\n\n.fa-images:before {\n    content: \"\\f302\";\n}\n\n.fa-imdb:before {\n    content: \"\\f2d8\";\n}\n\n.fa-inbox:before {\n    content: \"\\f01c\";\n}\n\n.fa-indent:before {\n    content: \"\\f03c\";\n}\n\n.fa-industry:before {\n    content: \"\\f275\";\n}\n\n.fa-infinity:before {\n    content: \"\\f534\";\n}\n\n.fa-info:before {\n    content: \"\\f129\";\n}\n\n.fa-info-circle:before {\n    content: \"\\f05a\";\n}\n\n.fa-instagram:before {\n    content: \"\\f16d\";\n}\n\n.fa-intercom:before {\n    content: \"\\f7af\";\n}\n\n.fa-internet-explorer:before {\n    content: \"\\f26b\";\n}\n\n.fa-invision:before {\n    content: \"\\f7b0\";\n}\n\n.fa-ioxhost:before {\n    content: \"\\f208\";\n}\n\n.fa-italic:before {\n    content: \"\\f033\";\n}\n\n.fa-itunes:before {\n    content: \"\\f3b4\";\n}\n\n.fa-itunes-note:before {\n    content: \"\\f3b5\";\n}\n\n.fa-java:before {\n    content: \"\\f4e4\";\n}\n\n.fa-jedi:before {\n    content: \"\\f669\";\n}\n\n.fa-jedi-order:before {\n    content: \"\\f50e\";\n}\n\n.fa-jenkins:before {\n    content: \"\\f3b6\";\n}\n\n.fa-jira:before {\n    content: \"\\f7b1\";\n}\n\n.fa-joget:before {\n    content: \"\\f3b7\";\n}\n\n.fa-joint:before {\n    content: \"\\f595\";\n}\n\n.fa-joomla:before {\n    content: \"\\f1aa\";\n}\n\n.fa-journal-whills:before {\n    content: \"\\f66a\";\n}\n\n.fa-js:before {\n    content: \"\\f3b8\";\n}\n\n.fa-js-square:before {\n    content: \"\\f3b9\";\n}\n\n.fa-jsfiddle:before {\n    content: \"\\f1cc\";\n}\n\n.fa-kaaba:before {\n    content: \"\\f66b\";\n}\n\n.fa-kaggle:before {\n    content: \"\\f5fa\";\n}\n\n.fa-key:before {\n    content: \"\\f084\";\n}\n\n.fa-keybase:before {\n    content: \"\\f4f5\";\n}\n\n.fa-keyboard:before {\n    content: \"\\f11c\";\n}\n\n.fa-keycdn:before {\n    content: \"\\f3ba\";\n}\n\n.fa-khanda:before {\n    content: \"\\f66d\";\n}\n\n.fa-kickstarter:before {\n    content: \"\\f3bb\";\n}\n\n.fa-kickstarter-k:before {\n    content: \"\\f3bc\";\n}\n\n.fa-kiss:before {\n    content: \"\\f596\";\n}\n\n.fa-kiss-beam:before {\n    content: \"\\f597\";\n}\n\n.fa-kiss-wink-heart:before {\n    content: \"\\f598\";\n}\n\n.fa-kiwi-bird:before {\n    content: \"\\f535\";\n}\n\n.fa-korvue:before {\n    content: \"\\f42f\";\n}\n\n.fa-landmark:before {\n    content: \"\\f66f\";\n}\n\n.fa-language:before {\n    content: \"\\f1ab\";\n}\n\n.fa-laptop:before {\n    content: \"\\f109\";\n}\n\n.fa-laptop-code:before {\n    content: \"\\f5fc\";\n}\n\n.fa-laravel:before {\n    content: \"\\f3bd\";\n}\n\n.fa-lastfm:before {\n    content: \"\\f202\";\n}\n\n.fa-lastfm-square:before {\n    content: \"\\f203\";\n}\n\n.fa-laugh:before {\n    content: \"\\f599\";\n}\n\n.fa-laugh-beam:before {\n    content: \"\\f59a\";\n}\n\n.fa-laugh-squint:before {\n    content: \"\\f59b\";\n}\n\n.fa-laugh-wink:before {\n    content: \"\\f59c\";\n}\n\n.fa-layer-group:before {\n    content: \"\\f5fd\";\n}\n\n.fa-leaf:before {\n    content: \"\\f06c\";\n}\n\n.fa-leanpub:before {\n    content: \"\\f212\";\n}\n\n.fa-lemon:before {\n    content: \"\\f094\";\n}\n\n.fa-less:before {\n    content: \"\\f41d\";\n}\n\n.fa-less-than:before {\n    content: \"\\f536\";\n}\n\n.fa-less-than-equal:before {\n    content: \"\\f537\";\n}\n\n.fa-level-down-alt:before {\n    content: \"\\f3be\";\n}\n\n.fa-level-up-alt:before {\n    content: \"\\f3bf\";\n}\n\n.fa-life-ring:before {\n    content: \"\\f1cd\";\n}\n\n.fa-lightbulb:before {\n    content: \"\\f0eb\";\n}\n\n.fa-line:before {\n    content: \"\\f3c0\";\n}\n\n.fa-link:before {\n    content: \"\\f0c1\";\n}\n\n.fa-linkedin:before {\n    content: \"\\f08c\";\n}\n\n.fa-linkedin-in:before {\n    content: \"\\f0e1\";\n}\n\n.fa-linode:before {\n    content: \"\\f2b8\";\n}\n\n.fa-linux:before {\n    content: \"\\f17c\";\n}\n\n.fa-lira-sign:before {\n    content: \"\\f195\";\n}\n\n.fa-list:before {\n    content: \"\\f03a\";\n}\n\n.fa-list-alt:before {\n    content: \"\\f022\";\n}\n\n.fa-list-ol:before {\n    content: \"\\f0cb\";\n}\n\n.fa-list-ul:before {\n    content: \"\\f0ca\";\n}\n\n.fa-location-arrow:before {\n    content: \"\\f124\";\n}\n\n.fa-lock:before {\n    content: \"\\f023\";\n}\n\n.fa-lock-open:before {\n    content: \"\\f3c1\";\n}\n\n.fa-long-arrow-alt-down:before {\n    content: \"\\f309\";\n}\n\n.fa-long-arrow-alt-left:before {\n    content: \"\\f30a\";\n}\n\n.fa-long-arrow-alt-right:before {\n    content: \"\\f30b\";\n}\n\n.fa-long-arrow-alt-up:before {\n    content: \"\\f30c\";\n}\n\n.fa-low-vision:before {\n    content: \"\\f2a8\";\n}\n\n.fa-luggage-cart:before {\n    content: \"\\f59d\";\n}\n\n.fa-lyft:before {\n    content: \"\\f3c3\";\n}\n\n.fa-magento:before {\n    content: \"\\f3c4\";\n}\n\n.fa-magic:before {\n    content: \"\\f0d0\";\n}\n\n.fa-magnet:before {\n    content: \"\\f076\";\n}\n\n.fa-mail-bulk:before {\n    content: \"\\f674\";\n}\n\n.fa-mailchimp:before {\n    content: \"\\f59e\";\n}\n\n.fa-male:before {\n    content: \"\\f183\";\n}\n\n.fa-mandalorian:before {\n    content: \"\\f50f\";\n}\n\n.fa-map:before {\n    content: \"\\f279\";\n}\n\n.fa-map-marked:before {\n    content: \"\\f59f\";\n}\n\n.fa-map-marked-alt:before {\n    content: \"\\f5a0\";\n}\n\n.fa-map-marker:before {\n    content: \"\\f041\";\n}\n\n.fa-map-marker-alt:before {\n    content: \"\\f3c5\";\n}\n\n.fa-map-pin:before {\n    content: \"\\f276\";\n}\n\n.fa-map-signs:before {\n    content: \"\\f277\";\n}\n\n.fa-markdown:before {\n    content: \"\\f60f\";\n}\n\n.fa-marker:before {\n    content: \"\\f5a1\";\n}\n\n.fa-mars:before {\n    content: \"\\f222\";\n}\n\n.fa-mars-double:before {\n    content: \"\\f227\";\n}\n\n.fa-mars-stroke:before {\n    content: \"\\f229\";\n}\n\n.fa-mars-stroke-h:before {\n    content: \"\\f22b\";\n}\n\n.fa-mars-stroke-v:before {\n    content: \"\\f22a\";\n}\n\n.fa-mask:before {\n    content: \"\\f6fa\";\n}\n\n.fa-mastodon:before {\n    content: \"\\f4f6\";\n}\n\n.fa-maxcdn:before {\n    content: \"\\f136\";\n}\n\n.fa-medal:before {\n    content: \"\\f5a2\";\n}\n\n.fa-medapps:before {\n    content: \"\\f3c6\";\n}\n\n.fa-medium:before {\n    content: \"\\f23a\";\n}\n\n.fa-medium-m:before {\n    content: \"\\f3c7\";\n}\n\n.fa-medkit:before {\n    content: \"\\f0fa\";\n}\n\n.fa-medrt:before {\n    content: \"\\f3c8\";\n}\n\n.fa-meetup:before {\n    content: \"\\f2e0\";\n}\n\n.fa-megaport:before {\n    content: \"\\f5a3\";\n}\n\n.fa-meh:before {\n    content: \"\\f11a\";\n}\n\n.fa-meh-blank:before {\n    content: \"\\f5a4\";\n}\n\n.fa-meh-rolling-eyes:before {\n    content: \"\\f5a5\";\n}\n\n.fa-memory:before {\n    content: \"\\f538\";\n}\n\n.fa-mendeley:before {\n    content: \"\\f7b3\";\n}\n\n.fa-menorah:before {\n    content: \"\\f676\";\n}\n\n.fa-mercury:before {\n    content: \"\\f223\";\n}\n\n.fa-meteor:before {\n    content: \"\\f753\";\n}\n\n.fa-microchip:before {\n    content: \"\\f2db\";\n}\n\n.fa-microphone:before {\n    content: \"\\f130\";\n}\n\n.fa-microphone-alt:before {\n    content: \"\\f3c9\";\n}\n\n.fa-microphone-alt-slash:before {\n    content: \"\\f539\";\n}\n\n.fa-microphone-slash:before {\n    content: \"\\f131\";\n}\n\n.fa-microscope:before {\n    content: \"\\f610\";\n}\n\n.fa-microsoft:before {\n    content: \"\\f3ca\";\n}\n\n.fa-minus:before {\n    content: \"\\f068\";\n}\n\n.fa-minus-circle:before {\n    content: \"\\f056\";\n}\n\n.fa-minus-square:before {\n    content: \"\\f146\";\n}\n\n.fa-mitten:before {\n    content: \"\\f7b5\";\n}\n\n.fa-mix:before {\n    content: \"\\f3cb\";\n}\n\n.fa-mixcloud:before {\n    content: \"\\f289\";\n}\n\n.fa-mizuni:before {\n    content: \"\\f3cc\";\n}\n\n.fa-mobile:before {\n    content: \"\\f10b\";\n}\n\n.fa-mobile-alt:before {\n    content: \"\\f3cd\";\n}\n\n.fa-modx:before {\n    content: \"\\f285\";\n}\n\n.fa-monero:before {\n    content: \"\\f3d0\";\n}\n\n.fa-money-bill:before {\n    content: \"\\f0d6\";\n}\n\n.fa-money-bill-alt:before {\n    content: \"\\f3d1\";\n}\n\n.fa-money-bill-wave:before {\n    content: \"\\f53a\";\n}\n\n.fa-money-bill-wave-alt:before {\n    content: \"\\f53b\";\n}\n\n.fa-money-check:before {\n    content: \"\\f53c\";\n}\n\n.fa-money-check-alt:before {\n    content: \"\\f53d\";\n}\n\n.fa-monument:before {\n    content: \"\\f5a6\";\n}\n\n.fa-moon:before {\n    content: \"\\f186\";\n}\n\n.fa-mortar-pestle:before {\n    content: \"\\f5a7\";\n}\n\n.fa-mosque:before {\n    content: \"\\f678\";\n}\n\n.fa-motorcycle:before {\n    content: \"\\f21c\";\n}\n\n.fa-mountain:before {\n    content: \"\\f6fc\";\n}\n\n.fa-mouse-pointer:before {\n    content: \"\\f245\";\n}\n\n.fa-mug-hot:before {\n    content: \"\\f7b6\";\n}\n\n.fa-music:before {\n    content: \"\\f001\";\n}\n\n.fa-napster:before {\n    content: \"\\f3d2\";\n}\n\n.fa-neos:before {\n    content: \"\\f612\";\n}\n\n.fa-network-wired:before {\n    content: \"\\f6ff\";\n}\n\n.fa-neuter:before {\n    content: \"\\f22c\";\n}\n\n.fa-newspaper:before {\n    content: \"\\f1ea\";\n}\n\n.fa-nimblr:before {\n    content: \"\\f5a8\";\n}\n\n.fa-nintendo-switch:before {\n    content: \"\\f418\";\n}\n\n.fa-node:before {\n    content: \"\\f419\";\n}\n\n.fa-node-js:before {\n    content: \"\\f3d3\";\n}\n\n.fa-not-equal:before {\n    content: \"\\f53e\";\n}\n\n.fa-notes-medical:before {\n    content: \"\\f481\";\n}\n\n.fa-npm:before {\n    content: \"\\f3d4\";\n}\n\n.fa-ns8:before {\n    content: \"\\f3d5\";\n}\n\n.fa-nutritionix:before {\n    content: \"\\f3d6\";\n}\n\n.fa-object-group:before {\n    content: \"\\f247\";\n}\n\n.fa-object-ungroup:before {\n    content: \"\\f248\";\n}\n\n.fa-odnoklassniki:before {\n    content: \"\\f263\";\n}\n\n.fa-odnoklassniki-square:before {\n    content: \"\\f264\";\n}\n\n.fa-oil-can:before {\n    content: \"\\f613\";\n}\n\n.fa-old-republic:before {\n    content: \"\\f510\";\n}\n\n.fa-om:before {\n    content: \"\\f679\";\n}\n\n.fa-opencart:before {\n    content: \"\\f23d\";\n}\n\n.fa-openid:before {\n    content: \"\\f19b\";\n}\n\n.fa-opera:before {\n    content: \"\\f26a\";\n}\n\n.fa-optin-monster:before {\n    content: \"\\f23c\";\n}\n\n.fa-osi:before {\n    content: \"\\f41a\";\n}\n\n.fa-otter:before {\n    content: \"\\f700\";\n}\n\n.fa-outdent:before {\n    content: \"\\f03b\";\n}\n\n.fa-page4:before {\n    content: \"\\f3d7\";\n}\n\n.fa-pagelines:before {\n    content: \"\\f18c\";\n}\n\n.fa-paint-brush:before {\n    content: \"\\f1fc\";\n}\n\n.fa-paint-roller:before {\n    content: \"\\f5aa\";\n}\n\n.fa-palette:before {\n    content: \"\\f53f\";\n}\n\n.fa-palfed:before {\n    content: \"\\f3d8\";\n}\n\n.fa-pallet:before {\n    content: \"\\f482\";\n}\n\n.fa-paper-plane:before {\n    content: \"\\f1d8\";\n}\n\n.fa-paperclip:before {\n    content: \"\\f0c6\";\n}\n\n.fa-parachute-box:before {\n    content: \"\\f4cd\";\n}\n\n.fa-paragraph:before {\n    content: \"\\f1dd\";\n}\n\n.fa-parking:before {\n    content: \"\\f540\";\n}\n\n.fa-passport:before {\n    content: \"\\f5ab\";\n}\n\n.fa-pastafarianism:before {\n    content: \"\\f67b\";\n}\n\n.fa-paste:before {\n    content: \"\\f0ea\";\n}\n\n.fa-patreon:before {\n    content: \"\\f3d9\";\n}\n\n.fa-pause:before {\n    content: \"\\f04c\";\n}\n\n.fa-pause-circle:before {\n    content: \"\\f28b\";\n}\n\n.fa-paw:before {\n    content: \"\\f1b0\";\n}\n\n.fa-paypal:before {\n    content: \"\\f1ed\";\n}\n\n.fa-peace:before {\n    content: \"\\f67c\";\n}\n\n.fa-pen:before {\n    content: \"\\f304\";\n}\n\n.fa-pen-alt:before {\n    content: \"\\f305\";\n}\n\n.fa-pen-fancy:before {\n    content: \"\\f5ac\";\n}\n\n.fa-pen-nib:before {\n    content: \"\\f5ad\";\n}\n\n.fa-pen-square:before {\n    content: \"\\f14b\";\n}\n\n.fa-pencil-alt:before {\n    content: \"\\f303\";\n}\n\n.fa-pencil-ruler:before {\n    content: \"\\f5ae\";\n}\n\n.fa-penny-arcade:before {\n    content: \"\\f704\";\n}\n\n.fa-people-carry:before {\n    content: \"\\f4ce\";\n}\n\n.fa-percent:before {\n    content: \"\\f295\";\n}\n\n.fa-percentage:before {\n    content: \"\\f541\";\n}\n\n.fa-periscope:before {\n    content: \"\\f3da\";\n}\n\n.fa-person-booth:before {\n    content: \"\\f756\";\n}\n\n.fa-phabricator:before {\n    content: \"\\f3db\";\n}\n\n.fa-phoenix-framework:before {\n    content: \"\\f3dc\";\n}\n\n.fa-phoenix-squadron:before {\n    content: \"\\f511\";\n}\n\n.fa-phone:before {\n    content: \"\\f095\";\n}\n\n.fa-phone-slash:before {\n    content: \"\\f3dd\";\n}\n\n.fa-phone-square:before {\n    content: \"\\f098\";\n}\n\n.fa-phone-volume:before {\n    content: \"\\f2a0\";\n}\n\n.fa-php:before {\n    content: \"\\f457\";\n}\n\n.fa-pied-piper:before {\n    content: \"\\f2ae\";\n}\n\n.fa-pied-piper-alt:before {\n    content: \"\\f1a8\";\n}\n\n.fa-pied-piper-hat:before {\n    content: \"\\f4e5\";\n}\n\n.fa-pied-piper-pp:before {\n    content: \"\\f1a7\";\n}\n\n.fa-piggy-bank:before {\n    content: \"\\f4d3\";\n}\n\n.fa-pills:before {\n    content: \"\\f484\";\n}\n\n.fa-pinterest:before {\n    content: \"\\f0d2\";\n}\n\n.fa-pinterest-p:before {\n    content: \"\\f231\";\n}\n\n.fa-pinterest-square:before {\n    content: \"\\f0d3\";\n}\n\n.fa-place-of-worship:before {\n    content: \"\\f67f\";\n}\n\n.fa-plane:before {\n    content: \"\\f072\";\n}\n\n.fa-plane-arrival:before {\n    content: \"\\f5af\";\n}\n\n.fa-plane-departure:before {\n    content: \"\\f5b0\";\n}\n\n.fa-play:before {\n    content: \"\\f04b\";\n}\n\n.fa-play-circle:before {\n    content: \"\\f144\";\n}\n\n.fa-playstation:before {\n    content: \"\\f3df\";\n}\n\n.fa-plug:before {\n    content: \"\\f1e6\";\n}\n\n.fa-plus:before {\n    content: \"\\f067\";\n}\n\n.fa-plus-circle:before {\n    content: \"\\f055\";\n}\n\n.fa-plus-square:before {\n    content: \"\\f0fe\";\n}\n\n.fa-podcast:before {\n    content: \"\\f2ce\";\n}\n\n.fa-poll:before {\n    content: \"\\f681\";\n}\n\n.fa-poll-h:before {\n    content: \"\\f682\";\n}\n\n.fa-poo:before {\n    content: \"\\f2fe\";\n}\n\n.fa-poo-storm:before {\n    content: \"\\f75a\";\n}\n\n.fa-poop:before {\n    content: \"\\f619\";\n}\n\n.fa-portrait:before {\n    content: \"\\f3e0\";\n}\n\n.fa-pound-sign:before {\n    content: \"\\f154\";\n}\n\n.fa-power-off:before {\n    content: \"\\f011\";\n}\n\n.fa-pray:before {\n    content: \"\\f683\";\n}\n\n.fa-praying-hands:before {\n    content: \"\\f684\";\n}\n\n.fa-prescription:before {\n    content: \"\\f5b1\";\n}\n\n.fa-prescription-bottle:before {\n    content: \"\\f485\";\n}\n\n.fa-prescription-bottle-alt:before {\n    content: \"\\f486\";\n}\n\n.fa-print:before {\n    content: \"\\f02f\";\n}\n\n.fa-procedures:before {\n    content: \"\\f487\";\n}\n\n.fa-product-hunt:before {\n    content: \"\\f288\";\n}\n\n.fa-project-diagram:before {\n    content: \"\\f542\";\n}\n\n.fa-pushed:before {\n    content: \"\\f3e1\";\n}\n\n.fa-puzzle-piece:before {\n    content: \"\\f12e\";\n}\n\n.fa-python:before {\n    content: \"\\f3e2\";\n}\n\n.fa-qq:before {\n    content: \"\\f1d6\";\n}\n\n.fa-qrcode:before {\n    content: \"\\f029\";\n}\n\n.fa-question:before {\n    content: \"\\f128\";\n}\n\n.fa-question-circle:before {\n    content: \"\\f059\";\n}\n\n.fa-quidditch:before {\n    content: \"\\f458\";\n}\n\n.fa-quinscape:before {\n    content: \"\\f459\";\n}\n\n.fa-quora:before {\n    content: \"\\f2c4\";\n}\n\n.fa-quote-left:before {\n    content: \"\\f10d\";\n}\n\n.fa-quote-right:before {\n    content: \"\\f10e\";\n}\n\n.fa-quran:before {\n    content: \"\\f687\";\n}\n\n.fa-r-project:before {\n    content: \"\\f4f7\";\n}\n\n.fa-radiation:before {\n    content: \"\\f7b9\";\n}\n\n.fa-radiation-alt:before {\n    content: \"\\f7ba\";\n}\n\n.fa-rainbow:before {\n    content: \"\\f75b\";\n}\n\n.fa-random:before {\n    content: \"\\f074\";\n}\n\n.fa-raspberry-pi:before {\n    content: \"\\f7bb\";\n}\n\n.fa-ravelry:before {\n    content: \"\\f2d9\";\n}\n\n.fa-react:before {\n    content: \"\\f41b\";\n}\n\n.fa-reacteurope:before {\n    content: \"\\f75d\";\n}\n\n.fa-readme:before {\n    content: \"\\f4d5\";\n}\n\n.fa-rebel:before {\n    content: \"\\f1d0\";\n}\n\n.fa-receipt:before {\n    content: \"\\f543\";\n}\n\n.fa-recycle:before {\n    content: \"\\f1b8\";\n}\n\n.fa-red-river:before {\n    content: \"\\f3e3\";\n}\n\n.fa-reddit:before {\n    content: \"\\f1a1\";\n}\n\n.fa-reddit-alien:before {\n    content: \"\\f281\";\n}\n\n.fa-reddit-square:before {\n    content: \"\\f1a2\";\n}\n\n.fa-redhat:before {\n    content: \"\\f7bc\";\n}\n\n.fa-redo:before {\n    content: \"\\f01e\";\n}\n\n.fa-redo-alt:before {\n    content: \"\\f2f9\";\n}\n\n.fa-registered:before {\n    content: \"\\f25d\";\n}\n\n.fa-renren:before {\n    content: \"\\f18b\";\n}\n\n.fa-reply:before {\n    content: \"\\f3e5\";\n}\n\n.fa-reply-all:before {\n    content: \"\\f122\";\n}\n\n.fa-replyd:before {\n    content: \"\\f3e6\";\n}\n\n.fa-republican:before {\n    content: \"\\f75e\";\n}\n\n.fa-researchgate:before {\n    content: \"\\f4f8\";\n}\n\n.fa-resolving:before {\n    content: \"\\f3e7\";\n}\n\n.fa-restroom:before {\n    content: \"\\f7bd\";\n}\n\n.fa-retweet:before {\n    content: \"\\f079\";\n}\n\n.fa-rev:before {\n    content: \"\\f5b2\";\n}\n\n.fa-ribbon:before {\n    content: \"\\f4d6\";\n}\n\n.fa-ring:before {\n    content: \"\\f70b\";\n}\n\n.fa-road:before {\n    content: \"\\f018\";\n}\n\n.fa-robot:before {\n    content: \"\\f544\";\n}\n\n.fa-rocket:before {\n    content: \"\\f135\";\n}\n\n.fa-rocketchat:before {\n    content: \"\\f3e8\";\n}\n\n.fa-rockrms:before {\n    content: \"\\f3e9\";\n}\n\n.fa-route:before {\n    content: \"\\f4d7\";\n}\n\n.fa-rss:before {\n    content: \"\\f09e\";\n}\n\n.fa-rss-square:before {\n    content: \"\\f143\";\n}\n\n.fa-ruble-sign:before {\n    content: \"\\f158\";\n}\n\n.fa-ruler:before {\n    content: \"\\f545\";\n}\n\n.fa-ruler-combined:before {\n    content: \"\\f546\";\n}\n\n.fa-ruler-horizontal:before {\n    content: \"\\f547\";\n}\n\n.fa-ruler-vertical:before {\n    content: \"\\f548\";\n}\n\n.fa-running:before {\n    content: \"\\f70c\";\n}\n\n.fa-rupee-sign:before {\n    content: \"\\f156\";\n}\n\n.fa-sad-cry:before {\n    content: \"\\f5b3\";\n}\n\n.fa-sad-tear:before {\n    content: \"\\f5b4\";\n}\n\n.fa-safari:before {\n    content: \"\\f267\";\n}\n\n.fa-sass:before {\n    content: \"\\f41e\";\n}\n\n.fa-satellite:before {\n    content: \"\\f7bf\";\n}\n\n.fa-satellite-dish:before {\n    content: \"\\f7c0\";\n}\n\n.fa-save:before {\n    content: \"\\f0c7\";\n}\n\n.fa-schlix:before {\n    content: \"\\f3ea\";\n}\n\n.fa-school:before {\n    content: \"\\f549\";\n}\n\n.fa-screwdriver:before {\n    content: \"\\f54a\";\n}\n\n.fa-scribd:before {\n    content: \"\\f28a\";\n}\n\n.fa-scroll:before {\n    content: \"\\f70e\";\n}\n\n.fa-sd-card:before {\n    content: \"\\f7c2\";\n}\n\n.fa-search:before {\n    content: \"\\f002\";\n}\n\n.fa-search-dollar:before {\n    content: \"\\f688\";\n}\n\n.fa-search-location:before {\n    content: \"\\f689\";\n}\n\n.fa-search-minus:before {\n    content: \"\\f010\";\n}\n\n.fa-search-plus:before {\n    content: \"\\f00e\";\n}\n\n.fa-searchengin:before {\n    content: \"\\f3eb\";\n}\n\n.fa-seedling:before {\n    content: \"\\f4d8\";\n}\n\n.fa-sellcast:before {\n    content: \"\\f2da\";\n}\n\n.fa-sellsy:before {\n    content: \"\\f213\";\n}\n\n.fa-server:before {\n    content: \"\\f233\";\n}\n\n.fa-servicestack:before {\n    content: \"\\f3ec\";\n}\n\n.fa-shapes:before {\n    content: \"\\f61f\";\n}\n\n.fa-share:before {\n    content: \"\\f064\";\n}\n\n.fa-share-alt:before {\n    content: \"\\f1e0\";\n}\n\n.fa-share-alt-square:before {\n    content: \"\\f1e1\";\n}\n\n.fa-share-square:before {\n    content: \"\\f14d\";\n}\n\n.fa-shekel-sign:before {\n    content: \"\\f20b\";\n}\n\n.fa-shield-alt:before {\n    content: \"\\f3ed\";\n}\n\n.fa-ship:before {\n    content: \"\\f21a\";\n}\n\n.fa-shipping-fast:before {\n    content: \"\\f48b\";\n}\n\n.fa-shirtsinbulk:before {\n    content: \"\\f214\";\n}\n\n.fa-shoe-prints:before {\n    content: \"\\f54b\";\n}\n\n.fa-shopping-bag:before {\n    content: \"\\f290\";\n}\n\n.fa-shopping-basket:before {\n    content: \"\\f291\";\n}\n\n.fa-shopping-cart:before {\n    content: \"\\f07a\";\n}\n\n.fa-shopware:before {\n    content: \"\\f5b5\";\n}\n\n.fa-shower:before {\n    content: \"\\f2cc\";\n}\n\n.fa-shuttle-van:before {\n    content: \"\\f5b6\";\n}\n\n.fa-sign:before {\n    content: \"\\f4d9\";\n}\n\n.fa-sign-in-alt:before {\n    content: \"\\f2f6\";\n}\n\n.fa-sign-language:before {\n    content: \"\\f2a7\";\n}\n\n.fa-sign-out-alt:before {\n    content: \"\\f2f5\";\n}\n\n.fa-signal:before {\n    content: \"\\f012\";\n}\n\n.fa-signature:before {\n    content: \"\\f5b7\";\n}\n\n.fa-sim-card:before {\n    content: \"\\f7c4\";\n}\n\n.fa-simplybuilt:before {\n    content: \"\\f215\";\n}\n\n.fa-sistrix:before {\n    content: \"\\f3ee\";\n}\n\n.fa-sitemap:before {\n    content: \"\\f0e8\";\n}\n\n.fa-sith:before {\n    content: \"\\f512\";\n}\n\n.fa-skating:before {\n    content: \"\\f7c5\";\n}\n\n.fa-sketch:before {\n    content: \"\\f7c6\";\n}\n\n.fa-skiing:before {\n    content: \"\\f7c9\";\n}\n\n.fa-skiing-nordic:before {\n    content: \"\\f7ca\";\n}\n\n.fa-skull:before {\n    content: \"\\f54c\";\n}\n\n.fa-skull-crossbones:before {\n    content: \"\\f714\";\n}\n\n.fa-skyatlas:before {\n    content: \"\\f216\";\n}\n\n.fa-skype:before {\n    content: \"\\f17e\";\n}\n\n.fa-slack:before {\n    content: \"\\f198\";\n}\n\n.fa-slack-hash:before {\n    content: \"\\f3ef\";\n}\n\n.fa-slash:before {\n    content: \"\\f715\";\n}\n\n.fa-sleigh:before {\n    content: \"\\f7cc\";\n}\n\n.fa-sliders-h:before {\n    content: \"\\f1de\";\n}\n\n.fa-slideshare:before {\n    content: \"\\f1e7\";\n}\n\n.fa-smile:before {\n    content: \"\\f118\";\n}\n\n.fa-smile-beam:before {\n    content: \"\\f5b8\";\n}\n\n.fa-smile-wink:before {\n    content: \"\\f4da\";\n}\n\n.fa-smog:before {\n    content: \"\\f75f\";\n}\n\n.fa-smoking:before {\n    content: \"\\f48d\";\n}\n\n.fa-smoking-ban:before {\n    content: \"\\f54d\";\n}\n\n.fa-sms:before {\n    content: \"\\f7cd\";\n}\n\n.fa-snapchat:before {\n    content: \"\\f2ab\";\n}\n\n.fa-snapchat-ghost:before {\n    content: \"\\f2ac\";\n}\n\n.fa-snapchat-square:before {\n    content: \"\\f2ad\";\n}\n\n.fa-snowboarding:before {\n    content: \"\\f7ce\";\n}\n\n.fa-snowflake:before {\n    content: \"\\f2dc\";\n}\n\n.fa-snowman:before {\n    content: \"\\f7d0\";\n}\n\n.fa-snowplow:before {\n    content: \"\\f7d2\";\n}\n\n.fa-socks:before {\n    content: \"\\f696\";\n}\n\n.fa-solar-panel:before {\n    content: \"\\f5ba\";\n}\n\n.fa-sort:before {\n    content: \"\\f0dc\";\n}\n\n.fa-sort-alpha-down:before {\n    content: \"\\f15d\";\n}\n\n.fa-sort-alpha-up:before {\n    content: \"\\f15e\";\n}\n\n.fa-sort-amount-down:before {\n    content: \"\\f160\";\n}\n\n.fa-sort-amount-up:before {\n    content: \"\\f161\";\n}\n\n.fa-sort-down:before {\n    content: \"\\f0dd\";\n}\n\n.fa-sort-numeric-down:before {\n    content: \"\\f162\";\n}\n\n.fa-sort-numeric-up:before {\n    content: \"\\f163\";\n}\n\n.fa-sort-up:before {\n    content: \"\\f0de\";\n}\n\n.fa-soundcloud:before {\n    content: \"\\f1be\";\n}\n\n.fa-sourcetree:before {\n    content: \"\\f7d3\";\n}\n\n.fa-spa:before {\n    content: \"\\f5bb\";\n}\n\n.fa-space-shuttle:before {\n    content: \"\\f197\";\n}\n\n.fa-speakap:before {\n    content: \"\\f3f3\";\n}\n\n.fa-spider:before {\n    content: \"\\f717\";\n}\n\n.fa-spinner:before {\n    content: \"\\f110\";\n}\n\n.fa-splotch:before {\n    content: \"\\f5bc\";\n}\n\n.fa-spotify:before {\n    content: \"\\f1bc\";\n}\n\n.fa-spray-can:before {\n    content: \"\\f5bd\";\n}\n\n.fa-square:before {\n    content: \"\\f0c8\";\n}\n\n.fa-square-full:before {\n    content: \"\\f45c\";\n}\n\n.fa-square-root-alt:before {\n    content: \"\\f698\";\n}\n\n.fa-squarespace:before {\n    content: \"\\f5be\";\n}\n\n.fa-stack-exchange:before {\n    content: \"\\f18d\";\n}\n\n.fa-stack-overflow:before {\n    content: \"\\f16c\";\n}\n\n.fa-stamp:before {\n    content: \"\\f5bf\";\n}\n\n.fa-star:before {\n    content: \"\\f005\";\n}\n\n.fa-star-and-crescent:before {\n    content: \"\\f699\";\n}\n\n.fa-star-half:before {\n    content: \"\\f089\";\n}\n\n.fa-star-half-alt:before {\n    content: \"\\f5c0\";\n}\n\n.fa-star-of-david:before {\n    content: \"\\f69a\";\n}\n\n.fa-star-of-life:before {\n    content: \"\\f621\";\n}\n\n.fa-staylinked:before {\n    content: \"\\f3f5\";\n}\n\n.fa-steam:before {\n    content: \"\\f1b6\";\n}\n\n.fa-steam-square:before {\n    content: \"\\f1b7\";\n}\n\n.fa-steam-symbol:before {\n    content: \"\\f3f6\";\n}\n\n.fa-step-backward:before {\n    content: \"\\f048\";\n}\n\n.fa-step-forward:before {\n    content: \"\\f051\";\n}\n\n.fa-stethoscope:before {\n    content: \"\\f0f1\";\n}\n\n.fa-sticker-mule:before {\n    content: \"\\f3f7\";\n}\n\n.fa-sticky-note:before {\n    content: \"\\f249\";\n}\n\n.fa-stop:before {\n    content: \"\\f04d\";\n}\n\n.fa-stop-circle:before {\n    content: \"\\f28d\";\n}\n\n.fa-stopwatch:before {\n    content: \"\\f2f2\";\n}\n\n.fa-store:before {\n    content: \"\\f54e\";\n}\n\n.fa-store-alt:before {\n    content: \"\\f54f\";\n}\n\n.fa-strava:before {\n    content: \"\\f428\";\n}\n\n.fa-stream:before {\n    content: \"\\f550\";\n}\n\n.fa-street-view:before {\n    content: \"\\f21d\";\n}\n\n.fa-strikethrough:before {\n    content: \"\\f0cc\";\n}\n\n.fa-stripe:before {\n    content: \"\\f429\";\n}\n\n.fa-stripe-s:before {\n    content: \"\\f42a\";\n}\n\n.fa-stroopwafel:before {\n    content: \"\\f551\";\n}\n\n.fa-studiovinari:before {\n    content: \"\\f3f8\";\n}\n\n.fa-stumbleupon:before {\n    content: \"\\f1a4\";\n}\n\n.fa-stumbleupon-circle:before {\n    content: \"\\f1a3\";\n}\n\n.fa-subscript:before {\n    content: \"\\f12c\";\n}\n\n.fa-subway:before {\n    content: \"\\f239\";\n}\n\n.fa-suitcase:before {\n    content: \"\\f0f2\";\n}\n\n.fa-suitcase-rolling:before {\n    content: \"\\f5c1\";\n}\n\n.fa-sun:before {\n    content: \"\\f185\";\n}\n\n.fa-superpowers:before {\n    content: \"\\f2dd\";\n}\n\n.fa-superscript:before {\n    content: \"\\f12b\";\n}\n\n.fa-supple:before {\n    content: \"\\f3f9\";\n}\n\n.fa-surprise:before {\n    content: \"\\f5c2\";\n}\n\n.fa-suse:before {\n    content: \"\\f7d6\";\n}\n\n.fa-swatchbook:before {\n    content: \"\\f5c3\";\n}\n\n.fa-swimmer:before {\n    content: \"\\f5c4\";\n}\n\n.fa-swimming-pool:before {\n    content: \"\\f5c5\";\n}\n\n.fa-synagogue:before {\n    content: \"\\f69b\";\n}\n\n.fa-sync:before {\n    content: \"\\f021\";\n}\n\n.fa-sync-alt:before {\n    content: \"\\f2f1\";\n}\n\n.fa-syringe:before {\n    content: \"\\f48e\";\n}\n\n.fa-table:before {\n    content: \"\\f0ce\";\n}\n\n.fa-table-tennis:before {\n    content: \"\\f45d\";\n}\n\n.fa-tablet:before {\n    content: \"\\f10a\";\n}\n\n.fa-tablet-alt:before {\n    content: \"\\f3fa\";\n}\n\n.fa-tablets:before {\n    content: \"\\f490\";\n}\n\n.fa-tachometer-alt:before {\n    content: \"\\f3fd\";\n}\n\n.fa-tag:before {\n    content: \"\\f02b\";\n}\n\n.fa-tags:before {\n    content: \"\\f02c\";\n}\n\n.fa-tape:before {\n    content: \"\\f4db\";\n}\n\n.fa-tasks:before {\n    content: \"\\f0ae\";\n}\n\n.fa-taxi:before {\n    content: \"\\f1ba\";\n}\n\n.fa-teamspeak:before {\n    content: \"\\f4f9\";\n}\n\n.fa-teeth:before {\n    content: \"\\f62e\";\n}\n\n.fa-teeth-open:before {\n    content: \"\\f62f\";\n}\n\n.fa-telegram:before {\n    content: \"\\f2c6\";\n}\n\n.fa-telegram-plane:before {\n    content: \"\\f3fe\";\n}\n\n.fa-temperature-high:before {\n    content: \"\\f769\";\n}\n\n.fa-temperature-low:before {\n    content: \"\\f76b\";\n}\n\n.fa-tencent-weibo:before {\n    content: \"\\f1d5\";\n}\n\n.fa-tenge:before {\n    content: \"\\f7d7\";\n}\n\n.fa-terminal:before {\n    content: \"\\f120\";\n}\n\n.fa-text-height:before {\n    content: \"\\f034\";\n}\n\n.fa-text-width:before {\n    content: \"\\f035\";\n}\n\n.fa-th:before {\n    content: \"\\f00a\";\n}\n\n.fa-th-large:before {\n    content: \"\\f009\";\n}\n\n.fa-th-list:before {\n    content: \"\\f00b\";\n}\n\n.fa-the-red-yeti:before {\n    content: \"\\f69d\";\n}\n\n.fa-theater-masks:before {\n    content: \"\\f630\";\n}\n\n.fa-themeco:before {\n    content: \"\\f5c6\";\n}\n\n.fa-themeisle:before {\n    content: \"\\f2b2\";\n}\n\n.fa-thermometer:before {\n    content: \"\\f491\";\n}\n\n.fa-thermometer-empty:before {\n    content: \"\\f2cb\";\n}\n\n.fa-thermometer-full:before {\n    content: \"\\f2c7\";\n}\n\n.fa-thermometer-half:before {\n    content: \"\\f2c9\";\n}\n\n.fa-thermometer-quarter:before {\n    content: \"\\f2ca\";\n}\n\n.fa-thermometer-three-quarters:before {\n    content: \"\\f2c8\";\n}\n\n.fa-think-peaks:before {\n    content: \"\\f731\";\n}\n\n.fa-thumbs-down:before {\n    content: \"\\f165\";\n}\n\n.fa-thumbs-up:before {\n    content: \"\\f164\";\n}\n\n.fa-thumbtack:before {\n    content: \"\\f08d\";\n}\n\n.fa-ticket-alt:before {\n    content: \"\\f3ff\";\n}\n\n.fa-times:before {\n    content: \"\\f00d\";\n}\n\n.fa-times-circle:before {\n    content: \"\\f057\";\n}\n\n.fa-tint:before {\n    content: \"\\f043\";\n}\n\n.fa-tint-slash:before {\n    content: \"\\f5c7\";\n}\n\n.fa-tired:before {\n    content: \"\\f5c8\";\n}\n\n.fa-toggle-off:before {\n    content: \"\\f204\";\n}\n\n.fa-toggle-on:before {\n    content: \"\\f205\";\n}\n\n.fa-toilet:before {\n    content: \"\\f7d8\";\n}\n\n.fa-toilet-paper:before {\n    content: \"\\f71e\";\n}\n\n.fa-toolbox:before {\n    content: \"\\f552\";\n}\n\n.fa-tools:before {\n    content: \"\\f7d9\";\n}\n\n.fa-tooth:before {\n    content: \"\\f5c9\";\n}\n\n.fa-torah:before {\n    content: \"\\f6a0\";\n}\n\n.fa-torii-gate:before {\n    content: \"\\f6a1\";\n}\n\n.fa-tractor:before {\n    content: \"\\f722\";\n}\n\n.fa-trade-federation:before {\n    content: \"\\f513\";\n}\n\n.fa-trademark:before {\n    content: \"\\f25c\";\n}\n\n.fa-traffic-light:before {\n    content: \"\\f637\";\n}\n\n.fa-train:before {\n    content: \"\\f238\";\n}\n\n.fa-tram:before {\n    content: \"\\f7da\";\n}\n\n.fa-transgender:before {\n    content: \"\\f224\";\n}\n\n.fa-transgender-alt:before {\n    content: \"\\f225\";\n}\n\n.fa-trash:before {\n    content: \"\\f1f8\";\n}\n\n.fa-trash-alt:before {\n    content: \"\\f2ed\";\n}\n\n.fa-tree:before {\n    content: \"\\f1bb\";\n}\n\n.fa-trello:before {\n    content: \"\\f181\";\n}\n\n.fa-tripadvisor:before {\n    content: \"\\f262\";\n}\n\n.fa-trophy:before {\n    content: \"\\f091\";\n}\n\n.fa-truck:before {\n    content: \"\\f0d1\";\n}\n\n.fa-truck-loading:before {\n    content: \"\\f4de\";\n}\n\n.fa-truck-monster:before {\n    content: \"\\f63b\";\n}\n\n.fa-truck-moving:before {\n    content: \"\\f4df\";\n}\n\n.fa-truck-pickup:before {\n    content: \"\\f63c\";\n}\n\n.fa-tshirt:before {\n    content: \"\\f553\";\n}\n\n.fa-tty:before {\n    content: \"\\f1e4\";\n}\n\n.fa-tumblr:before {\n    content: \"\\f173\";\n}\n\n.fa-tumblr-square:before {\n    content: \"\\f174\";\n}\n\n.fa-tv:before {\n    content: \"\\f26c\";\n}\n\n.fa-twitch:before {\n    content: \"\\f1e8\";\n}\n\n.fa-twitter:before {\n    content: \"\\f099\";\n}\n\n.fa-twitter-square:before {\n    content: \"\\f081\";\n}\n\n.fa-typo3:before {\n    content: \"\\f42b\";\n}\n\n.fa-uber:before {\n    content: \"\\f402\";\n}\n\n.fa-ubuntu:before {\n    content: \"\\f7df\";\n}\n\n.fa-uikit:before {\n    content: \"\\f403\";\n}\n\n.fa-umbrella:before {\n    content: \"\\f0e9\";\n}\n\n.fa-umbrella-beach:before {\n    content: \"\\f5ca\";\n}\n\n.fa-underline:before {\n    content: \"\\f0cd\";\n}\n\n.fa-undo:before {\n    content: \"\\f0e2\";\n}\n\n.fa-undo-alt:before {\n    content: \"\\f2ea\";\n}\n\n.fa-uniregistry:before {\n    content: \"\\f404\";\n}\n\n.fa-universal-access:before {\n    content: \"\\f29a\";\n}\n\n.fa-university:before {\n    content: \"\\f19c\";\n}\n\n.fa-unlink:before {\n    content: \"\\f127\";\n}\n\n.fa-unlock:before {\n    content: \"\\f09c\";\n}\n\n.fa-unlock-alt:before {\n    content: \"\\f13e\";\n}\n\n.fa-untappd:before {\n    content: \"\\f405\";\n}\n\n.fa-upload:before {\n    content: \"\\f093\";\n}\n\n.fa-ups:before {\n    content: \"\\f7e0\";\n}\n\n.fa-usb:before {\n    content: \"\\f287\";\n}\n\n.fa-user:before {\n    content: \"\\f007\";\n}\n\n.fa-user-alt:before {\n    content: \"\\f406\";\n}\n\n.fa-user-alt-slash:before {\n    content: \"\\f4fa\";\n}\n\n.fa-user-astronaut:before {\n    content: \"\\f4fb\";\n}\n\n.fa-user-check:before {\n    content: \"\\f4fc\";\n}\n\n.fa-user-circle:before {\n    content: \"\\f2bd\";\n}\n\n.fa-user-clock:before {\n    content: \"\\f4fd\";\n}\n\n.fa-user-cog:before {\n    content: \"\\f4fe\";\n}\n\n.fa-user-edit:before {\n    content: \"\\f4ff\";\n}\n\n.fa-user-friends:before {\n    content: \"\\f500\";\n}\n\n.fa-user-graduate:before {\n    content: \"\\f501\";\n}\n\n.fa-user-injured:before {\n    content: \"\\f728\";\n}\n\n.fa-user-lock:before {\n    content: \"\\f502\";\n}\n\n.fa-user-md:before {\n    content: \"\\f0f0\";\n}\n\n.fa-user-minus:before {\n    content: \"\\f503\";\n}\n\n.fa-user-ninja:before {\n    content: \"\\f504\";\n}\n\n.fa-user-plus:before {\n    content: \"\\f234\";\n}\n\n.fa-user-secret:before {\n    content: \"\\f21b\";\n}\n\n.fa-user-shield:before {\n    content: \"\\f505\";\n}\n\n.fa-user-slash:before {\n    content: \"\\f506\";\n}\n\n.fa-user-tag:before {\n    content: \"\\f507\";\n}\n\n.fa-user-tie:before {\n    content: \"\\f508\";\n}\n\n.fa-user-times:before {\n    content: \"\\f235\";\n}\n\n.fa-users:before {\n    content: \"\\f0c0\";\n}\n\n.fa-users-cog:before {\n    content: \"\\f509\";\n}\n\n.fa-usps:before {\n    content: \"\\f7e1\";\n}\n\n.fa-ussunnah:before {\n    content: \"\\f407\";\n}\n\n.fa-utensil-spoon:before {\n    content: \"\\f2e5\";\n}\n\n.fa-utensils:before {\n    content: \"\\f2e7\";\n}\n\n.fa-vaadin:before {\n    content: \"\\f408\";\n}\n\n.fa-vector-square:before {\n    content: \"\\f5cb\";\n}\n\n.fa-venus:before {\n    content: \"\\f221\";\n}\n\n.fa-venus-double:before {\n    content: \"\\f226\";\n}\n\n.fa-venus-mars:before {\n    content: \"\\f228\";\n}\n\n.fa-viacoin:before {\n    content: \"\\f237\";\n}\n\n.fa-viadeo:before {\n    content: \"\\f2a9\";\n}\n\n.fa-viadeo-square:before {\n    content: \"\\f2aa\";\n}\n\n.fa-vial:before {\n    content: \"\\f492\";\n}\n\n.fa-vials:before {\n    content: \"\\f493\";\n}\n\n.fa-viber:before {\n    content: \"\\f409\";\n}\n\n.fa-video:before {\n    content: \"\\f03d\";\n}\n\n.fa-video-slash:before {\n    content: \"\\f4e2\";\n}\n\n.fa-vihara:before {\n    content: \"\\f6a7\";\n}\n\n.fa-vimeo:before {\n    content: \"\\f40a\";\n}\n\n.fa-vimeo-square:before {\n    content: \"\\f194\";\n}\n\n.fa-vimeo-v:before {\n    content: \"\\f27d\";\n}\n\n.fa-vine:before {\n    content: \"\\f1ca\";\n}\n\n.fa-vk:before {\n    content: \"\\f189\";\n}\n\n.fa-vnv:before {\n    content: \"\\f40b\";\n}\n\n.fa-volleyball-ball:before {\n    content: \"\\f45f\";\n}\n\n.fa-volume-down:before {\n    content: \"\\f027\";\n}\n\n.fa-volume-mute:before {\n    content: \"\\f6a9\";\n}\n\n.fa-volume-off:before {\n    content: \"\\f026\";\n}\n\n.fa-volume-up:before {\n    content: \"\\f028\";\n}\n\n.fa-vote-yea:before {\n    content: \"\\f772\";\n}\n\n.fa-vr-cardboard:before {\n    content: \"\\f729\";\n}\n\n.fa-vuejs:before {\n    content: \"\\f41f\";\n}\n\n.fa-walking:before {\n    content: \"\\f554\";\n}\n\n.fa-wallet:before {\n    content: \"\\f555\";\n}\n\n.fa-warehouse:before {\n    content: \"\\f494\";\n}\n\n.fa-water:before {\n    content: \"\\f773\";\n}\n\n.fa-weebly:before {\n    content: \"\\f5cc\";\n}\n\n.fa-weibo:before {\n    content: \"\\f18a\";\n}\n\n.fa-weight:before {\n    content: \"\\f496\";\n}\n\n.fa-weight-hanging:before {\n    content: \"\\f5cd\";\n}\n\n.fa-weixin:before {\n    content: \"\\f1d7\";\n}\n\n.fa-whatsapp:before {\n    content: \"\\f232\";\n}\n\n.fa-whatsapp-square:before {\n    content: \"\\f40c\";\n}\n\n.fa-wheelchair:before {\n    content: \"\\f193\";\n}\n\n.fa-whmcs:before {\n    content: \"\\f40d\";\n}\n\n.fa-wifi:before {\n    content: \"\\f1eb\";\n}\n\n.fa-wikipedia-w:before {\n    content: \"\\f266\";\n}\n\n.fa-wind:before {\n    content: \"\\f72e\";\n}\n\n.fa-window-close:before {\n    content: \"\\f410\";\n}\n\n.fa-window-maximize:before {\n    content: \"\\f2d0\";\n}\n\n.fa-window-minimize:before {\n    content: \"\\f2d1\";\n}\n\n.fa-window-restore:before {\n    content: \"\\f2d2\";\n}\n\n.fa-windows:before {\n    content: \"\\f17a\";\n}\n\n.fa-wine-bottle:before {\n    content: \"\\f72f\";\n}\n\n.fa-wine-glass:before {\n    content: \"\\f4e3\";\n}\n\n.fa-wine-glass-alt:before {\n    content: \"\\f5ce\";\n}\n\n.fa-wix:before {\n    content: \"\\f5cf\";\n}\n\n.fa-wizards-of-the-coast:before {\n    content: \"\\f730\";\n}\n\n.fa-wolf-pack-battalion:before {\n    content: \"\\f514\";\n}\n\n.fa-won-sign:before {\n    content: \"\\f159\";\n}\n\n.fa-wordpress:before {\n    content: \"\\f19a\";\n}\n\n.fa-wordpress-simple:before {\n    content: \"\\f411\";\n}\n\n.fa-wpbeginner:before {\n    content: \"\\f297\";\n}\n\n.fa-wpexplorer:before {\n    content: \"\\f2de\";\n}\n\n.fa-wpforms:before {\n    content: \"\\f298\";\n}\n\n.fa-wpressr:before {\n    content: \"\\f3e4\";\n}\n\n.fa-wrench:before {\n    content: \"\\f0ad\";\n}\n\n.fa-x-ray:before {\n    content: \"\\f497\";\n}\n\n.fa-xbox:before {\n    content: \"\\f412\";\n}\n\n.fa-xing:before {\n    content: \"\\f168\";\n}\n\n.fa-xing-square:before {\n    content: \"\\f169\";\n}\n\n.fa-y-combinator:before {\n    content: \"\\f23b\";\n}\n\n.fa-yahoo:before {\n    content: \"\\f19e\";\n}\n\n.fa-yandex:before {\n    content: \"\\f413\";\n}\n\n.fa-yandex-international:before {\n    content: \"\\f414\";\n}\n\n.fa-yarn:before {\n    content: \"\\f7e3\";\n}\n\n.fa-yelp:before {\n    content: \"\\f1e9\";\n}\n\n.fa-yen-sign:before {\n    content: \"\\f157\";\n}\n\n.fa-yin-yang:before {\n    content: \"\\f6ad\";\n}\n\n.fa-yoast:before {\n    content: \"\\f2b1\";\n}\n\n.fa-youtube:before {\n    content: \"\\f167\";\n}\n\n.fa-youtube-square:before {\n    content: \"\\f431\";\n}\n\n.fa-zhihu:before {\n    content: \"\\f63f\";\n}\n\n.sr-only {\n    border: 0;\n    clip: rect(0, 0, 0, 0);\n    height: 1px;\n    margin: -1px;\n    overflow: hidden;\n    padding: 0;\n    position: absolute;\n    width: 1px;\n}\n\n.sr-only-focusable:active, .sr-only-focusable:focus {\n    clip: auto;\n    height: auto;\n    margin: 0;\n    overflow: visible;\n    position: static;\n    width: auto;\n}\n\n@font-face {\n    font-family: 'Font Awesome 5 Brands';\n    font-style: normal;\n    font-weight: normal;\n    src: url(\"../webfonts/fa-brands-400.eot\");\n    src: url(\"../webfonts/fa-brands-400.eot?#iefix\") format(\"embedded-opentype\"), url(\"../webfonts/fa-brands-400.woff2\") format(\"woff2\"), url(\"../webfonts/fa-brands-400.woff\") format(\"woff\"), url(\"../webfonts/fa-brands-400.ttf\") format(\"truetype\"), url(\"../webfonts/fa-brands-400.svg#fontawesome\") format(\"svg\");\n}\n\n.fab {\n    font-family: 'Font Awesome 5 Brands';\n}\n\n@font-face {\n    font-family: 'Font Awesome 5 Free';\n    font-style: normal;\n    font-weight: 400;\n    src: url(\"../webfonts/fa-regular-400.eot\");\n    src: url(\"../webfonts/fa-regular-400.eot?#iefix\") format(\"embedded-opentype\"), url(\"../webfonts/fa-regular-400.woff2\") format(\"woff2\"), url(\"../webfonts/fa-regular-400.woff\") format(\"woff\"), url(\"../webfonts/fa-regular-400.ttf\") format(\"truetype\"), url(\"../webfonts/fa-regular-400.svg#fontawesome\") format(\"svg\");\n}\n\n.far {\n    font-family: 'Font Awesome 5 Free';\n    font-weight: 400;\n}\n\n@font-face {\n    font-family: 'Font Awesome 5 Free';\n    font-style: normal;\n    font-weight: 900;\n    src: url(\"../webfonts/fa-solid-900.eot\");\n    src: url(\"../webfonts/fa-solid-900.eot?#iefix\") format(\"embedded-opentype\"), url(\"../webfonts/fa-solid-900.woff2\") format(\"woff2\"), url(\"../webfonts/fa-solid-900.woff\") format(\"woff\"), url(\"../webfonts/fa-solid-900.ttf\") format(\"truetype\"), url(\"../webfonts/fa-solid-900.svg#fontawesome\") format(\"svg\");\n}\n\n.fa,\n.fas {\n    font-family: 'Font Awesome 5 Free';\n    font-weight: 900;\n}\n"
  },
  {
    "path": "src/sourceDev.WebApp/wwwroot/css/ie11.css",
    "content": "﻿body.IE .cards-gallery .lightbox {\n    flex: 0 0 auto;\n}\n"
  },
  {
    "path": "src/sourceDev.WebApp/wwwroot/css/site.css",
    "content": "﻿html {\n    position: relative;\n    min-height: 100%;\n}\n\nbody {\n    min-height: 100vh;\n    padding-top: 3.5rem;\n    /*margin-bottom: 60px;*/\n}\n\n   \n#newPostLink {\n    position: absolute;\n    top: 110px;\n    right: 0px;\n}\n\n#editPostLink {\n    position: absolute;\n    top: 145px;\n    right: 0px;\n}\n\n#unpublishPostLink {\n    position: absolute;\n    top: 180px !important;\n    right: 0px !important;\n}\n\n#pageManagerLink {\n    position: absolute;\n    top: 110px;\n    right: 0px;\n}\n\n#newPageLink {\n    position: absolute;\n    top: 145px;\n    right: 0px;\n}\n\n#editPageLink {\n    position: absolute;\n    top: 180px;\n    right: 0px\n}\n\n#unpublishPageLink {\n    position: absolute;\n    top: 215px !important;\n    right: 0px !important\n}\n\n#sidenavtoggle {\n    position: absolute;\n    top: 120px;\n    right: 5px;\n}\n\n\n@media screen and (max-width: 812px) {\n    #sidenavtoggle,\n    #sidenavmenu {\n        display: none;\n    }\n}\n\n.flex-fill {\n    flex: 1 1 auto !important;\n}\n\n\n.carousel-caption p {\n    font-size: 20px;\n    line-height: 1.4;\n}\n\n@media screen and (max-width: 768px) {\n    .carousel-caption {\n        display: none\n    }\n}\n\n\n\n\nimg, video, iframe {\n    max-width: 100%;\n}\n\ntd img, video, iframe {\n    max-width: none;\n}\n\n\n\n.table td, .table th {\n    vertical-align: inherit;\n}\n\n/******** jquery smartmenu bootstrap 4 ******/\n/* Carets in collapsible mode (make them look like +/- buttons) */\n.navbar-nav.sm-collapsible .sub-arrow {\n    position: absolute;\n    top: 50%;\n    right: 0;\n    margin: -0.7em 0.5em 0 0;\n    border: 1px solid rgba(0, 0, 0, .1);\n    border-radius: .25rem;\n    padding: 0;\n    width: 2em;\n    height: 1.4em;\n    font-size: 1.25rem;\n    line-height: 1.2em;\n    text-align: center;\n}\n\n    .navbar-nav.sm-collapsible .sub-arrow::before {\n        content: '+';\n    }\n\n.navbar-nav.sm-collapsible .show > a > .sub-arrow::before {\n    content: '-';\n}\n\n.navbar-dark .navbar-nav.sm-collapsible .nav-link .sub-arrow {\n    border-color: rgba(255, 255, 255, .1);\n}\n/* make sure there's room for the carets */\n.navbar-nav.sm-collapsible .has-submenu {\n    padding-right: 3em;\n}\n/* keep the carets properly positioned */\n.navbar-nav.sm-collapsible .nav-link,\n.navbar-nav.sm-collapsible .dropdown-item {\n    position: relative;\n}\n\n\n/* Nav carets in expanded mode */\n.navbar-nav:not(.sm-collapsible) .nav-link .sub-arrow {\n    display: inline-block;\n    width: 0;\n    height: 0;\n    margin-left: .255em;\n    vertical-align: .255em;\n    border-top: .3em solid;\n    border-right: .3em solid transparent;\n    border-left: .3em solid transparent;\n}\n/* point the arrows up for .fixed-bottom navbars */\n.fixed-bottom .navbar-nav:not(.sm-collapsible) .nav-link .sub-arrow,\n.fixed-bottom .navbar-nav:not(.sm-collapsible):not([data-sm-skip]) .dropdown-toggle::after {\n    border-top: 0;\n    border-bottom: .3em solid;\n}\n\n\n/* Dropdown carets in expanded mode */\n.navbar-nav:not(.sm-collapsible) .dropdown-item .sub-arrow,\n.navbar-nav:not(.sm-collapsible):not([data-sm-skip]) .dropdown-menu .dropdown-toggle::after {\n    position: absolute;\n    top: 50%;\n    right: 0;\n    width: 0;\n    height: 0;\n    margin-top: -.3em;\n    margin-right: 1em;\n    border-top: .3em solid transparent;\n    border-bottom: .3em solid transparent;\n    border-left: .3em solid;\n}\n/* make sure there's room for the carets */\n.navbar-nav:not(.sm-collapsible) .dropdown-item.has-submenu {\n    padding-right: 2em;\n}\n\n\n/* Scrolling arrows for tall menus */\n.navbar-nav .scroll-up,\n.navbar-nav .scroll-down {\n    position: absolute;\n    display: none;\n    visibility: hidden;\n    height: 20px;\n    overflow: hidden;\n    text-align: center;\n}\n\n.navbar-nav .scroll-up-arrow,\n.navbar-nav .scroll-down-arrow {\n    position: absolute;\n    top: -2px;\n    left: 50%;\n    margin-left: -8px;\n    width: 0;\n    height: 0;\n    overflow: hidden;\n    border-top: 7px solid transparent;\n    border-right: 7px solid transparent;\n    border-bottom: 7px solid;\n    border-left: 7px solid transparent;\n}\n\n.navbar-nav .scroll-down-arrow {\n    top: 6px;\n    border-top: 7px solid;\n    border-right: 7px solid transparent;\n    border-bottom: 7px solid transparent;\n    border-left: 7px solid transparent;\n}\n\n\n/* Add some spacing for 2+ level sub menus in collapsible mode */\n.navbar-nav.sm-collapsible .dropdown-menu .dropdown-menu {\n    margin: .5em;\n}\n\n\n/* Fix SmartMenus sub menus auto width (subMenusMinWidth/subMenusMaxWidth options) */\n.navbar-nav:not([data-sm-skip]) .dropdown-item {\n    white-space: normal;\n}\n\n.navbar-nav:not(.sm-collapsible) .sm-nowrap > li > .dropdown-item {\n    white-space: nowrap;\n}\n/******** end jquery smart menu bootstrap-4 *****************/\n"
  },
  {
    "path": "src/sourceDev.WebApp/wwwroot/js/bootstrap.bundle.js",
    "content": "/*!\n  * Bootstrap v5.0.2 (https://getbootstrap.com/)\n  * Copyright 2011-2021 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)\n  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n  */\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n  typeof define === 'function' && define.amd ? define(factory) :\n  (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.bootstrap = factory());\n}(this, (function () { 'use strict';\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): dom/selector-engine.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n  const NODE_TEXT = 3;\n  const SelectorEngine = {\n    find(selector, element = document.documentElement) {\n      return [].concat(...Element.prototype.querySelectorAll.call(element, selector));\n    },\n\n    findOne(selector, element = document.documentElement) {\n      return Element.prototype.querySelector.call(element, selector);\n    },\n\n    children(element, selector) {\n      return [].concat(...element.children).filter(child => child.matches(selector));\n    },\n\n    parents(element, selector) {\n      const parents = [];\n      let ancestor = element.parentNode;\n\n      while (ancestor && ancestor.nodeType === Node.ELEMENT_NODE && ancestor.nodeType !== NODE_TEXT) {\n        if (ancestor.matches(selector)) {\n          parents.push(ancestor);\n        }\n\n        ancestor = ancestor.parentNode;\n      }\n\n      return parents;\n    },\n\n    prev(element, selector) {\n      let previous = element.previousElementSibling;\n\n      while (previous) {\n        if (previous.matches(selector)) {\n          return [previous];\n        }\n\n        previous = previous.previousElementSibling;\n      }\n\n      return [];\n    },\n\n    next(element, selector) {\n      let next = element.nextElementSibling;\n\n      while (next) {\n        if (next.matches(selector)) {\n          return [next];\n        }\n\n        next = next.nextElementSibling;\n      }\n\n      return [];\n    }\n\n  };\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): util/index.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n\n  const MAX_UID = 1000000;\n  const MILLISECONDS_MULTIPLIER = 1000;\n  const TRANSITION_END = 'transitionend'; // Shoutout AngusCroll (https://goo.gl/pxwQGp)\n\n  const toType = obj => {\n    if (obj === null || obj === undefined) {\n      return `${obj}`;\n    }\n\n    return {}.toString.call(obj).match(/\\s([a-z]+)/i)[1].toLowerCase();\n  };\n  /**\n   * --------------------------------------------------------------------------\n   * Public Util Api\n   * --------------------------------------------------------------------------\n   */\n\n\n  const getUID = prefix => {\n    do {\n      prefix += Math.floor(Math.random() * MAX_UID);\n    } while (document.getElementById(prefix));\n\n    return prefix;\n  };\n\n  const getSelector = element => {\n    let selector = element.getAttribute('data-bs-target');\n\n    if (!selector || selector === '#') {\n      let hrefAttr = element.getAttribute('href'); // The only valid content that could double as a selector are IDs or classes,\n      // so everything starting with `#` or `.`. If a \"real\" URL is used as the selector,\n      // `document.querySelector` will rightfully complain it is invalid.\n      // See https://github.com/twbs/bootstrap/issues/32273\n\n      if (!hrefAttr || !hrefAttr.includes('#') && !hrefAttr.startsWith('.')) {\n        return null;\n      } // Just in case some CMS puts out a full URL with the anchor appended\n\n\n      if (hrefAttr.includes('#') && !hrefAttr.startsWith('#')) {\n        hrefAttr = `#${hrefAttr.split('#')[1]}`;\n      }\n\n      selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : null;\n    }\n\n    return selector;\n  };\n\n  const getSelectorFromElement = element => {\n    const selector = getSelector(element);\n\n    if (selector) {\n      return document.querySelector(selector) ? selector : null;\n    }\n\n    return null;\n  };\n\n  const getElementFromSelector = element => {\n    const selector = getSelector(element);\n    return selector ? document.querySelector(selector) : null;\n  };\n\n  const getTransitionDurationFromElement = element => {\n    if (!element) {\n      return 0;\n    } // Get transition-duration of the element\n\n\n    let {\n      transitionDuration,\n      transitionDelay\n    } = window.getComputedStyle(element);\n    const floatTransitionDuration = Number.parseFloat(transitionDuration);\n    const floatTransitionDelay = Number.parseFloat(transitionDelay); // Return 0 if element or transition duration is not found\n\n    if (!floatTransitionDuration && !floatTransitionDelay) {\n      return 0;\n    } // If multiple durations are defined, take the first\n\n\n    transitionDuration = transitionDuration.split(',')[0];\n    transitionDelay = transitionDelay.split(',')[0];\n    return (Number.parseFloat(transitionDuration) + Number.parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER;\n  };\n\n  const triggerTransitionEnd = element => {\n    element.dispatchEvent(new Event(TRANSITION_END));\n  };\n\n  const isElement$1 = obj => {\n    if (!obj || typeof obj !== 'object') {\n      return false;\n    }\n\n    if (typeof obj.jquery !== 'undefined') {\n      obj = obj[0];\n    }\n\n    return typeof obj.nodeType !== 'undefined';\n  };\n\n  const getElement = obj => {\n    if (isElement$1(obj)) {\n      // it's a jQuery object or a node element\n      return obj.jquery ? obj[0] : obj;\n    }\n\n    if (typeof obj === 'string' && obj.length > 0) {\n      return SelectorEngine.findOne(obj);\n    }\n\n    return null;\n  };\n\n  const typeCheckConfig = (componentName, config, configTypes) => {\n    Object.keys(configTypes).forEach(property => {\n      const expectedTypes = configTypes[property];\n      const value = config[property];\n      const valueType = value && isElement$1(value) ? 'element' : toType(value);\n\n      if (!new RegExp(expectedTypes).test(valueType)) {\n        throw new TypeError(`${componentName.toUpperCase()}: Option \"${property}\" provided type \"${valueType}\" but expected type \"${expectedTypes}\".`);\n      }\n    });\n  };\n\n  const isVisible = element => {\n    if (!isElement$1(element) || element.getClientRects().length === 0) {\n      return false;\n    }\n\n    return getComputedStyle(element).getPropertyValue('visibility') === 'visible';\n  };\n\n  const isDisabled = element => {\n    if (!element || element.nodeType !== Node.ELEMENT_NODE) {\n      return true;\n    }\n\n    if (element.classList.contains('disabled')) {\n      return true;\n    }\n\n    if (typeof element.disabled !== 'undefined') {\n      return element.disabled;\n    }\n\n    return element.hasAttribute('disabled') && element.getAttribute('disabled') !== 'false';\n  };\n\n  const findShadowRoot = element => {\n    if (!document.documentElement.attachShadow) {\n      return null;\n    } // Can find the shadow root otherwise it'll return the document\n\n\n    if (typeof element.getRootNode === 'function') {\n      const root = element.getRootNode();\n      return root instanceof ShadowRoot ? root : null;\n    }\n\n    if (element instanceof ShadowRoot) {\n      return element;\n    } // when we don't find a shadow root\n\n\n    if (!element.parentNode) {\n      return null;\n    }\n\n    return findShadowRoot(element.parentNode);\n  };\n\n  const noop = () => {};\n\n  const reflow = element => element.offsetHeight;\n\n  const getjQuery = () => {\n    const {\n      jQuery\n    } = window;\n\n    if (jQuery && !document.body.hasAttribute('data-bs-no-jquery')) {\n      return jQuery;\n    }\n\n    return null;\n  };\n\n  const DOMContentLoadedCallbacks = [];\n\n  const onDOMContentLoaded = callback => {\n    if (document.readyState === 'loading') {\n      // add listener on the first call when the document is in loading state\n      if (!DOMContentLoadedCallbacks.length) {\n        document.addEventListener('DOMContentLoaded', () => {\n          DOMContentLoadedCallbacks.forEach(callback => callback());\n        });\n      }\n\n      DOMContentLoadedCallbacks.push(callback);\n    } else {\n      callback();\n    }\n  };\n\n  const isRTL = () => document.documentElement.dir === 'rtl';\n\n  const defineJQueryPlugin = plugin => {\n    onDOMContentLoaded(() => {\n      const $ = getjQuery();\n      /* istanbul ignore if */\n\n      if ($) {\n        const name = plugin.NAME;\n        const JQUERY_NO_CONFLICT = $.fn[name];\n        $.fn[name] = plugin.jQueryInterface;\n        $.fn[name].Constructor = plugin;\n\n        $.fn[name].noConflict = () => {\n          $.fn[name] = JQUERY_NO_CONFLICT;\n          return plugin.jQueryInterface;\n        };\n      }\n    });\n  };\n\n  const execute = callback => {\n    if (typeof callback === 'function') {\n      callback();\n    }\n  };\n\n  const executeAfterTransition = (callback, transitionElement, waitForTransition = true) => {\n    if (!waitForTransition) {\n      execute(callback);\n      return;\n    }\n\n    const durationPadding = 5;\n    const emulatedDuration = getTransitionDurationFromElement(transitionElement) + durationPadding;\n    let called = false;\n\n    const handler = ({\n      target\n    }) => {\n      if (target !== transitionElement) {\n        return;\n      }\n\n      called = true;\n      transitionElement.removeEventListener(TRANSITION_END, handler);\n      execute(callback);\n    };\n\n    transitionElement.addEventListener(TRANSITION_END, handler);\n    setTimeout(() => {\n      if (!called) {\n        triggerTransitionEnd(transitionElement);\n      }\n    }, emulatedDuration);\n  };\n  /**\n   * Return the previous/next element of a list.\n   *\n   * @param {array} list    The list of elements\n   * @param activeElement   The active element\n   * @param shouldGetNext   Choose to get next or previous element\n   * @param isCycleAllowed\n   * @return {Element|elem} The proper element\n   */\n\n\n  const getNextActiveElement = (list, activeElement, shouldGetNext, isCycleAllowed) => {\n    let index = list.indexOf(activeElement); // if the element does not exist in the list return an element depending on the direction and if cycle is allowed\n\n    if (index === -1) {\n      return list[!shouldGetNext && isCycleAllowed ? list.length - 1 : 0];\n    }\n\n    const listLength = list.length;\n    index += shouldGetNext ? 1 : -1;\n\n    if (isCycleAllowed) {\n      index = (index + listLength) % listLength;\n    }\n\n    return list[Math.max(0, Math.min(index, listLength - 1))];\n  };\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): dom/event-handler.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const namespaceRegex = /[^.]*(?=\\..*)\\.|.*/;\n  const stripNameRegex = /\\..*/;\n  const stripUidRegex = /::\\d+$/;\n  const eventRegistry = {}; // Events storage\n\n  let uidEvent = 1;\n  const customEvents = {\n    mouseenter: 'mouseover',\n    mouseleave: 'mouseout'\n  };\n  const customEventsRegex = /^(mouseenter|mouseleave)/i;\n  const nativeEvents = new Set(['click', 'dblclick', 'mouseup', 'mousedown', 'contextmenu', 'mousewheel', 'DOMMouseScroll', 'mouseover', 'mouseout', 'mousemove', 'selectstart', 'selectend', 'keydown', 'keypress', 'keyup', 'orientationchange', 'touchstart', 'touchmove', 'touchend', 'touchcancel', 'pointerdown', 'pointermove', 'pointerup', 'pointerleave', 'pointercancel', 'gesturestart', 'gesturechange', 'gestureend', 'focus', 'blur', 'change', 'reset', 'select', 'submit', 'focusin', 'focusout', 'load', 'unload', 'beforeunload', 'resize', 'move', 'DOMContentLoaded', 'readystatechange', 'error', 'abort', 'scroll']);\n  /**\n   * ------------------------------------------------------------------------\n   * Private methods\n   * ------------------------------------------------------------------------\n   */\n\n  function getUidEvent(element, uid) {\n    return uid && `${uid}::${uidEvent++}` || element.uidEvent || uidEvent++;\n  }\n\n  function getEvent(element) {\n    const uid = getUidEvent(element);\n    element.uidEvent = uid;\n    eventRegistry[uid] = eventRegistry[uid] || {};\n    return eventRegistry[uid];\n  }\n\n  function bootstrapHandler(element, fn) {\n    return function handler(event) {\n      event.delegateTarget = element;\n\n      if (handler.oneOff) {\n        EventHandler.off(element, event.type, fn);\n      }\n\n      return fn.apply(element, [event]);\n    };\n  }\n\n  function bootstrapDelegationHandler(element, selector, fn) {\n    return function handler(event) {\n      const domElements = element.querySelectorAll(selector);\n\n      for (let {\n        target\n      } = event; target && target !== this; target = target.parentNode) {\n        for (let i = domElements.length; i--;) {\n          if (domElements[i] === target) {\n            event.delegateTarget = target;\n\n            if (handler.oneOff) {\n              // eslint-disable-next-line unicorn/consistent-destructuring\n              EventHandler.off(element, event.type, selector, fn);\n            }\n\n            return fn.apply(target, [event]);\n          }\n        }\n      } // To please ESLint\n\n\n      return null;\n    };\n  }\n\n  function findHandler(events, handler, delegationSelector = null) {\n    const uidEventList = Object.keys(events);\n\n    for (let i = 0, len = uidEventList.length; i < len; i++) {\n      const event = events[uidEventList[i]];\n\n      if (event.originalHandler === handler && event.delegationSelector === delegationSelector) {\n        return event;\n      }\n    }\n\n    return null;\n  }\n\n  function normalizeParams(originalTypeEvent, handler, delegationFn) {\n    const delegation = typeof handler === 'string';\n    const originalHandler = delegation ? delegationFn : handler;\n    let typeEvent = getTypeEvent(originalTypeEvent);\n    const isNative = nativeEvents.has(typeEvent);\n\n    if (!isNative) {\n      typeEvent = originalTypeEvent;\n    }\n\n    return [delegation, originalHandler, typeEvent];\n  }\n\n  function addHandler(element, originalTypeEvent, handler, delegationFn, oneOff) {\n    if (typeof originalTypeEvent !== 'string' || !element) {\n      return;\n    }\n\n    if (!handler) {\n      handler = delegationFn;\n      delegationFn = null;\n    } // in case of mouseenter or mouseleave wrap the handler within a function that checks for its DOM position\n    // this prevents the handler from being dispatched the same way as mouseover or mouseout does\n\n\n    if (customEventsRegex.test(originalTypeEvent)) {\n      const wrapFn = fn => {\n        return function (event) {\n          if (!event.relatedTarget || event.relatedTarget !== event.delegateTarget && !event.delegateTarget.contains(event.relatedTarget)) {\n            return fn.call(this, event);\n          }\n        };\n      };\n\n      if (delegationFn) {\n        delegationFn = wrapFn(delegationFn);\n      } else {\n        handler = wrapFn(handler);\n      }\n    }\n\n    const [delegation, originalHandler, typeEvent] = normalizeParams(originalTypeEvent, handler, delegationFn);\n    const events = getEvent(element);\n    const handlers = events[typeEvent] || (events[typeEvent] = {});\n    const previousFn = findHandler(handlers, originalHandler, delegation ? handler : null);\n\n    if (previousFn) {\n      previousFn.oneOff = previousFn.oneOff && oneOff;\n      return;\n    }\n\n    const uid = getUidEvent(originalHandler, originalTypeEvent.replace(namespaceRegex, ''));\n    const fn = delegation ? bootstrapDelegationHandler(element, handler, delegationFn) : bootstrapHandler(element, handler);\n    fn.delegationSelector = delegation ? handler : null;\n    fn.originalHandler = originalHandler;\n    fn.oneOff = oneOff;\n    fn.uidEvent = uid;\n    handlers[uid] = fn;\n    element.addEventListener(typeEvent, fn, delegation);\n  }\n\n  function removeHandler(element, events, typeEvent, handler, delegationSelector) {\n    const fn = findHandler(events[typeEvent], handler, delegationSelector);\n\n    if (!fn) {\n      return;\n    }\n\n    element.removeEventListener(typeEvent, fn, Boolean(delegationSelector));\n    delete events[typeEvent][fn.uidEvent];\n  }\n\n  function removeNamespacedHandlers(element, events, typeEvent, namespace) {\n    const storeElementEvent = events[typeEvent] || {};\n    Object.keys(storeElementEvent).forEach(handlerKey => {\n      if (handlerKey.includes(namespace)) {\n        const event = storeElementEvent[handlerKey];\n        removeHandler(element, events, typeEvent, event.originalHandler, event.delegationSelector);\n      }\n    });\n  }\n\n  function getTypeEvent(event) {\n    // allow to get the native events from namespaced events ('click.bs.button' --> 'click')\n    event = event.replace(stripNameRegex, '');\n    return customEvents[event] || event;\n  }\n\n  const EventHandler = {\n    on(element, event, handler, delegationFn) {\n      addHandler(element, event, handler, delegationFn, false);\n    },\n\n    one(element, event, handler, delegationFn) {\n      addHandler(element, event, handler, delegationFn, true);\n    },\n\n    off(element, originalTypeEvent, handler, delegationFn) {\n      if (typeof originalTypeEvent !== 'string' || !element) {\n        return;\n      }\n\n      const [delegation, originalHandler, typeEvent] = normalizeParams(originalTypeEvent, handler, delegationFn);\n      const inNamespace = typeEvent !== originalTypeEvent;\n      const events = getEvent(element);\n      const isNamespace = originalTypeEvent.startsWith('.');\n\n      if (typeof originalHandler !== 'undefined') {\n        // Simplest case: handler is passed, remove that listener ONLY.\n        if (!events || !events[typeEvent]) {\n          return;\n        }\n\n        removeHandler(element, events, typeEvent, originalHandler, delegation ? handler : null);\n        return;\n      }\n\n      if (isNamespace) {\n        Object.keys(events).forEach(elementEvent => {\n          removeNamespacedHandlers(element, events, elementEvent, originalTypeEvent.slice(1));\n        });\n      }\n\n      const storeElementEvent = events[typeEvent] || {};\n      Object.keys(storeElementEvent).forEach(keyHandlers => {\n        const handlerKey = keyHandlers.replace(stripUidRegex, '');\n\n        if (!inNamespace || originalTypeEvent.includes(handlerKey)) {\n          const event = storeElementEvent[keyHandlers];\n          removeHandler(element, events, typeEvent, event.originalHandler, event.delegationSelector);\n        }\n      });\n    },\n\n    trigger(element, event, args) {\n      if (typeof event !== 'string' || !element) {\n        return null;\n      }\n\n      const $ = getjQuery();\n      const typeEvent = getTypeEvent(event);\n      const inNamespace = event !== typeEvent;\n      const isNative = nativeEvents.has(typeEvent);\n      let jQueryEvent;\n      let bubbles = true;\n      let nativeDispatch = true;\n      let defaultPrevented = false;\n      let evt = null;\n\n      if (inNamespace && $) {\n        jQueryEvent = $.Event(event, args);\n        $(element).trigger(jQueryEvent);\n        bubbles = !jQueryEvent.isPropagationStopped();\n        nativeDispatch = !jQueryEvent.isImmediatePropagationStopped();\n        defaultPrevented = jQueryEvent.isDefaultPrevented();\n      }\n\n      if (isNative) {\n        evt = document.createEvent('HTMLEvents');\n        evt.initEvent(typeEvent, bubbles, true);\n      } else {\n        evt = new CustomEvent(event, {\n          bubbles,\n          cancelable: true\n        });\n      } // merge custom information in our event\n\n\n      if (typeof args !== 'undefined') {\n        Object.keys(args).forEach(key => {\n          Object.defineProperty(evt, key, {\n            get() {\n              return args[key];\n            }\n\n          });\n        });\n      }\n\n      if (defaultPrevented) {\n        evt.preventDefault();\n      }\n\n      if (nativeDispatch) {\n        element.dispatchEvent(evt);\n      }\n\n      if (evt.defaultPrevented && typeof jQueryEvent !== 'undefined') {\n        jQueryEvent.preventDefault();\n      }\n\n      return evt;\n    }\n\n  };\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): dom/data.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n  const elementMap = new Map();\n  var Data = {\n    set(element, key, instance) {\n      if (!elementMap.has(element)) {\n        elementMap.set(element, new Map());\n      }\n\n      const instanceMap = elementMap.get(element); // make it clear we only want one instance per element\n      // can be removed later when multiple key/instances are fine to be used\n\n      if (!instanceMap.has(key) && instanceMap.size !== 0) {\n        // eslint-disable-next-line no-console\n        console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(instanceMap.keys())[0]}.`);\n        return;\n      }\n\n      instanceMap.set(key, instance);\n    },\n\n    get(element, key) {\n      if (elementMap.has(element)) {\n        return elementMap.get(element).get(key) || null;\n      }\n\n      return null;\n    },\n\n    remove(element, key) {\n      if (!elementMap.has(element)) {\n        return;\n      }\n\n      const instanceMap = elementMap.get(element);\n      instanceMap.delete(key); // free up element references if there are no instances left for an element\n\n      if (instanceMap.size === 0) {\n        elementMap.delete(element);\n      }\n    }\n\n  };\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): base-component.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const VERSION = '5.0.2';\n\n  class BaseComponent {\n    constructor(element) {\n      element = getElement(element);\n\n      if (!element) {\n        return;\n      }\n\n      this._element = element;\n      Data.set(this._element, this.constructor.DATA_KEY, this);\n    }\n\n    dispose() {\n      Data.remove(this._element, this.constructor.DATA_KEY);\n      EventHandler.off(this._element, this.constructor.EVENT_KEY);\n      Object.getOwnPropertyNames(this).forEach(propertyName => {\n        this[propertyName] = null;\n      });\n    }\n\n    _queueCallback(callback, element, isAnimated = true) {\n      executeAfterTransition(callback, element, isAnimated);\n    }\n    /** Static */\n\n\n    static getInstance(element) {\n      return Data.get(element, this.DATA_KEY);\n    }\n\n    static getOrCreateInstance(element, config = {}) {\n      return this.getInstance(element) || new this(element, typeof config === 'object' ? config : null);\n    }\n\n    static get VERSION() {\n      return VERSION;\n    }\n\n    static get NAME() {\n      throw new Error('You have to implement the static method \"NAME\", for each component!');\n    }\n\n    static get DATA_KEY() {\n      return `bs.${this.NAME}`;\n    }\n\n    static get EVENT_KEY() {\n      return `.${this.DATA_KEY}`;\n    }\n\n  }\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): alert.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$c = 'alert';\n  const DATA_KEY$b = 'bs.alert';\n  const EVENT_KEY$b = `.${DATA_KEY$b}`;\n  const DATA_API_KEY$8 = '.data-api';\n  const SELECTOR_DISMISS = '[data-bs-dismiss=\"alert\"]';\n  const EVENT_CLOSE = `close${EVENT_KEY$b}`;\n  const EVENT_CLOSED = `closed${EVENT_KEY$b}`;\n  const EVENT_CLICK_DATA_API$7 = `click${EVENT_KEY$b}${DATA_API_KEY$8}`;\n  const CLASS_NAME_ALERT = 'alert';\n  const CLASS_NAME_FADE$6 = 'fade';\n  const CLASS_NAME_SHOW$9 = 'show';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Alert extends BaseComponent {\n    // Getters\n    static get NAME() {\n      return NAME$c;\n    } // Public\n\n\n    close(element) {\n      const rootElement = element ? this._getRootElement(element) : this._element;\n\n      const customEvent = this._triggerCloseEvent(rootElement);\n\n      if (customEvent === null || customEvent.defaultPrevented) {\n        return;\n      }\n\n      this._removeElement(rootElement);\n    } // Private\n\n\n    _getRootElement(element) {\n      return getElementFromSelector(element) || element.closest(`.${CLASS_NAME_ALERT}`);\n    }\n\n    _triggerCloseEvent(element) {\n      return EventHandler.trigger(element, EVENT_CLOSE);\n    }\n\n    _removeElement(element) {\n      element.classList.remove(CLASS_NAME_SHOW$9);\n      const isAnimated = element.classList.contains(CLASS_NAME_FADE$6);\n\n      this._queueCallback(() => this._destroyElement(element), element, isAnimated);\n    }\n\n    _destroyElement(element) {\n      element.remove();\n      EventHandler.trigger(element, EVENT_CLOSED);\n    } // Static\n\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = Alert.getOrCreateInstance(this);\n\n        if (config === 'close') {\n          data[config](this);\n        }\n      });\n    }\n\n    static handleDismiss(alertInstance) {\n      return function (event) {\n        if (event) {\n          event.preventDefault();\n        }\n\n        alertInstance.close(this);\n      };\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(document, EVENT_CLICK_DATA_API$7, SELECTOR_DISMISS, Alert.handleDismiss(new Alert()));\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Alert to jQuery only if jQuery is present\n   */\n\n  defineJQueryPlugin(Alert);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): button.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$b = 'button';\n  const DATA_KEY$a = 'bs.button';\n  const EVENT_KEY$a = `.${DATA_KEY$a}`;\n  const DATA_API_KEY$7 = '.data-api';\n  const CLASS_NAME_ACTIVE$3 = 'active';\n  const SELECTOR_DATA_TOGGLE$5 = '[data-bs-toggle=\"button\"]';\n  const EVENT_CLICK_DATA_API$6 = `click${EVENT_KEY$a}${DATA_API_KEY$7}`;\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Button extends BaseComponent {\n    // Getters\n    static get NAME() {\n      return NAME$b;\n    } // Public\n\n\n    toggle() {\n      // Toggle class and sync the `aria-pressed` attribute with the return value of the `.toggle()` method\n      this._element.setAttribute('aria-pressed', this._element.classList.toggle(CLASS_NAME_ACTIVE$3));\n    } // Static\n\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = Button.getOrCreateInstance(this);\n\n        if (config === 'toggle') {\n          data[config]();\n        }\n      });\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(document, EVENT_CLICK_DATA_API$6, SELECTOR_DATA_TOGGLE$5, event => {\n    event.preventDefault();\n    const button = event.target.closest(SELECTOR_DATA_TOGGLE$5);\n    const data = Button.getOrCreateInstance(button);\n    data.toggle();\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Button to jQuery only if jQuery is present\n   */\n\n  defineJQueryPlugin(Button);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): dom/manipulator.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  function normalizeData(val) {\n    if (val === 'true') {\n      return true;\n    }\n\n    if (val === 'false') {\n      return false;\n    }\n\n    if (val === Number(val).toString()) {\n      return Number(val);\n    }\n\n    if (val === '' || val === 'null') {\n      return null;\n    }\n\n    return val;\n  }\n\n  function normalizeDataKey(key) {\n    return key.replace(/[A-Z]/g, chr => `-${chr.toLowerCase()}`);\n  }\n\n  const Manipulator = {\n    setDataAttribute(element, key, value) {\n      element.setAttribute(`data-bs-${normalizeDataKey(key)}`, value);\n    },\n\n    removeDataAttribute(element, key) {\n      element.removeAttribute(`data-bs-${normalizeDataKey(key)}`);\n    },\n\n    getDataAttributes(element) {\n      if (!element) {\n        return {};\n      }\n\n      const attributes = {};\n      Object.keys(element.dataset).filter(key => key.startsWith('bs')).forEach(key => {\n        let pureKey = key.replace(/^bs/, '');\n        pureKey = pureKey.charAt(0).toLowerCase() + pureKey.slice(1, pureKey.length);\n        attributes[pureKey] = normalizeData(element.dataset[key]);\n      });\n      return attributes;\n    },\n\n    getDataAttribute(element, key) {\n      return normalizeData(element.getAttribute(`data-bs-${normalizeDataKey(key)}`));\n    },\n\n    offset(element) {\n      const rect = element.getBoundingClientRect();\n      return {\n        top: rect.top + document.body.scrollTop,\n        left: rect.left + document.body.scrollLeft\n      };\n    },\n\n    position(element) {\n      return {\n        top: element.offsetTop,\n        left: element.offsetLeft\n      };\n    }\n\n  };\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): carousel.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$a = 'carousel';\n  const DATA_KEY$9 = 'bs.carousel';\n  const EVENT_KEY$9 = `.${DATA_KEY$9}`;\n  const DATA_API_KEY$6 = '.data-api';\n  const ARROW_LEFT_KEY = 'ArrowLeft';\n  const ARROW_RIGHT_KEY = 'ArrowRight';\n  const TOUCHEVENT_COMPAT_WAIT = 500; // Time for mouse compat events to fire after touch\n\n  const SWIPE_THRESHOLD = 40;\n  const Default$9 = {\n    interval: 5000,\n    keyboard: true,\n    slide: false,\n    pause: 'hover',\n    wrap: true,\n    touch: true\n  };\n  const DefaultType$9 = {\n    interval: '(number|boolean)',\n    keyboard: 'boolean',\n    slide: '(boolean|string)',\n    pause: '(string|boolean)',\n    wrap: 'boolean',\n    touch: 'boolean'\n  };\n  const ORDER_NEXT = 'next';\n  const ORDER_PREV = 'prev';\n  const DIRECTION_LEFT = 'left';\n  const DIRECTION_RIGHT = 'right';\n  const KEY_TO_DIRECTION = {\n    [ARROW_LEFT_KEY]: DIRECTION_RIGHT,\n    [ARROW_RIGHT_KEY]: DIRECTION_LEFT\n  };\n  const EVENT_SLIDE = `slide${EVENT_KEY$9}`;\n  const EVENT_SLID = `slid${EVENT_KEY$9}`;\n  const EVENT_KEYDOWN = `keydown${EVENT_KEY$9}`;\n  const EVENT_MOUSEENTER = `mouseenter${EVENT_KEY$9}`;\n  const EVENT_MOUSELEAVE = `mouseleave${EVENT_KEY$9}`;\n  const EVENT_TOUCHSTART = `touchstart${EVENT_KEY$9}`;\n  const EVENT_TOUCHMOVE = `touchmove${EVENT_KEY$9}`;\n  const EVENT_TOUCHEND = `touchend${EVENT_KEY$9}`;\n  const EVENT_POINTERDOWN = `pointerdown${EVENT_KEY$9}`;\n  const EVENT_POINTERUP = `pointerup${EVENT_KEY$9}`;\n  const EVENT_DRAG_START = `dragstart${EVENT_KEY$9}`;\n  const EVENT_LOAD_DATA_API$2 = `load${EVENT_KEY$9}${DATA_API_KEY$6}`;\n  const EVENT_CLICK_DATA_API$5 = `click${EVENT_KEY$9}${DATA_API_KEY$6}`;\n  const CLASS_NAME_CAROUSEL = 'carousel';\n  const CLASS_NAME_ACTIVE$2 = 'active';\n  const CLASS_NAME_SLIDE = 'slide';\n  const CLASS_NAME_END = 'carousel-item-end';\n  const CLASS_NAME_START = 'carousel-item-start';\n  const CLASS_NAME_NEXT = 'carousel-item-next';\n  const CLASS_NAME_PREV = 'carousel-item-prev';\n  const CLASS_NAME_POINTER_EVENT = 'pointer-event';\n  const SELECTOR_ACTIVE$1 = '.active';\n  const SELECTOR_ACTIVE_ITEM = '.active.carousel-item';\n  const SELECTOR_ITEM = '.carousel-item';\n  const SELECTOR_ITEM_IMG = '.carousel-item img';\n  const SELECTOR_NEXT_PREV = '.carousel-item-next, .carousel-item-prev';\n  const SELECTOR_INDICATORS = '.carousel-indicators';\n  const SELECTOR_INDICATOR = '[data-bs-target]';\n  const SELECTOR_DATA_SLIDE = '[data-bs-slide], [data-bs-slide-to]';\n  const SELECTOR_DATA_RIDE = '[data-bs-ride=\"carousel\"]';\n  const POINTER_TYPE_TOUCH = 'touch';\n  const POINTER_TYPE_PEN = 'pen';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Carousel extends BaseComponent {\n    constructor(element, config) {\n      super(element);\n      this._items = null;\n      this._interval = null;\n      this._activeElement = null;\n      this._isPaused = false;\n      this._isSliding = false;\n      this.touchTimeout = null;\n      this.touchStartX = 0;\n      this.touchDeltaX = 0;\n      this._config = this._getConfig(config);\n      this._indicatorsElement = SelectorEngine.findOne(SELECTOR_INDICATORS, this._element);\n      this._touchSupported = 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0;\n      this._pointerEvent = Boolean(window.PointerEvent);\n\n      this._addEventListeners();\n    } // Getters\n\n\n    static get Default() {\n      return Default$9;\n    }\n\n    static get NAME() {\n      return NAME$a;\n    } // Public\n\n\n    next() {\n      this._slide(ORDER_NEXT);\n    }\n\n    nextWhenVisible() {\n      // Don't call next when the page isn't visible\n      // or the carousel or its parent isn't visible\n      if (!document.hidden && isVisible(this._element)) {\n        this.next();\n      }\n    }\n\n    prev() {\n      this._slide(ORDER_PREV);\n    }\n\n    pause(event) {\n      if (!event) {\n        this._isPaused = true;\n      }\n\n      if (SelectorEngine.findOne(SELECTOR_NEXT_PREV, this._element)) {\n        triggerTransitionEnd(this._element);\n        this.cycle(true);\n      }\n\n      clearInterval(this._interval);\n      this._interval = null;\n    }\n\n    cycle(event) {\n      if (!event) {\n        this._isPaused = false;\n      }\n\n      if (this._interval) {\n        clearInterval(this._interval);\n        this._interval = null;\n      }\n\n      if (this._config && this._config.interval && !this._isPaused) {\n        this._updateInterval();\n\n        this._interval = setInterval((document.visibilityState ? this.nextWhenVisible : this.next).bind(this), this._config.interval);\n      }\n    }\n\n    to(index) {\n      this._activeElement = SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element);\n\n      const activeIndex = this._getItemIndex(this._activeElement);\n\n      if (index > this._items.length - 1 || index < 0) {\n        return;\n      }\n\n      if (this._isSliding) {\n        EventHandler.one(this._element, EVENT_SLID, () => this.to(index));\n        return;\n      }\n\n      if (activeIndex === index) {\n        this.pause();\n        this.cycle();\n        return;\n      }\n\n      const order = index > activeIndex ? ORDER_NEXT : ORDER_PREV;\n\n      this._slide(order, this._items[index]);\n    } // Private\n\n\n    _getConfig(config) {\n      config = { ...Default$9,\n        ...Manipulator.getDataAttributes(this._element),\n        ...(typeof config === 'object' ? config : {})\n      };\n      typeCheckConfig(NAME$a, config, DefaultType$9);\n      return config;\n    }\n\n    _handleSwipe() {\n      const absDeltax = Math.abs(this.touchDeltaX);\n\n      if (absDeltax <= SWIPE_THRESHOLD) {\n        return;\n      }\n\n      const direction = absDeltax / this.touchDeltaX;\n      this.touchDeltaX = 0;\n\n      if (!direction) {\n        return;\n      }\n\n      this._slide(direction > 0 ? DIRECTION_RIGHT : DIRECTION_LEFT);\n    }\n\n    _addEventListeners() {\n      if (this._config.keyboard) {\n        EventHandler.on(this._element, EVENT_KEYDOWN, event => this._keydown(event));\n      }\n\n      if (this._config.pause === 'hover') {\n        EventHandler.on(this._element, EVENT_MOUSEENTER, event => this.pause(event));\n        EventHandler.on(this._element, EVENT_MOUSELEAVE, event => this.cycle(event));\n      }\n\n      if (this._config.touch && this._touchSupported) {\n        this._addTouchEventListeners();\n      }\n    }\n\n    _addTouchEventListeners() {\n      const start = event => {\n        if (this._pointerEvent && (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH)) {\n          this.touchStartX = event.clientX;\n        } else if (!this._pointerEvent) {\n          this.touchStartX = event.touches[0].clientX;\n        }\n      };\n\n      const move = event => {\n        // ensure swiping with one touch and not pinching\n        this.touchDeltaX = event.touches && event.touches.length > 1 ? 0 : event.touches[0].clientX - this.touchStartX;\n      };\n\n      const end = event => {\n        if (this._pointerEvent && (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH)) {\n          this.touchDeltaX = event.clientX - this.touchStartX;\n        }\n\n        this._handleSwipe();\n\n        if (this._config.pause === 'hover') {\n          // If it's a touch-enabled device, mouseenter/leave are fired as\n          // part of the mouse compatibility events on first tap - the carousel\n          // would stop cycling until user tapped out of it;\n          // here, we listen for touchend, explicitly pause the carousel\n          // (as if it's the second time we tap on it, mouseenter compat event\n          // is NOT fired) and after a timeout (to allow for mouse compatibility\n          // events to fire) we explicitly restart cycling\n          this.pause();\n\n          if (this.touchTimeout) {\n            clearTimeout(this.touchTimeout);\n          }\n\n          this.touchTimeout = setTimeout(event => this.cycle(event), TOUCHEVENT_COMPAT_WAIT + this._config.interval);\n        }\n      };\n\n      SelectorEngine.find(SELECTOR_ITEM_IMG, this._element).forEach(itemImg => {\n        EventHandler.on(itemImg, EVENT_DRAG_START, e => e.preventDefault());\n      });\n\n      if (this._pointerEvent) {\n        EventHandler.on(this._element, EVENT_POINTERDOWN, event => start(event));\n        EventHandler.on(this._element, EVENT_POINTERUP, event => end(event));\n\n        this._element.classList.add(CLASS_NAME_POINTER_EVENT);\n      } else {\n        EventHandler.on(this._element, EVENT_TOUCHSTART, event => start(event));\n        EventHandler.on(this._element, EVENT_TOUCHMOVE, event => move(event));\n        EventHandler.on(this._element, EVENT_TOUCHEND, event => end(event));\n      }\n    }\n\n    _keydown(event) {\n      if (/input|textarea/i.test(event.target.tagName)) {\n        return;\n      }\n\n      const direction = KEY_TO_DIRECTION[event.key];\n\n      if (direction) {\n        event.preventDefault();\n\n        this._slide(direction);\n      }\n    }\n\n    _getItemIndex(element) {\n      this._items = element && element.parentNode ? SelectorEngine.find(SELECTOR_ITEM, element.parentNode) : [];\n      return this._items.indexOf(element);\n    }\n\n    _getItemByOrder(order, activeElement) {\n      const isNext = order === ORDER_NEXT;\n      return getNextActiveElement(this._items, activeElement, isNext, this._config.wrap);\n    }\n\n    _triggerSlideEvent(relatedTarget, eventDirectionName) {\n      const targetIndex = this._getItemIndex(relatedTarget);\n\n      const fromIndex = this._getItemIndex(SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element));\n\n      return EventHandler.trigger(this._element, EVENT_SLIDE, {\n        relatedTarget,\n        direction: eventDirectionName,\n        from: fromIndex,\n        to: targetIndex\n      });\n    }\n\n    _setActiveIndicatorElement(element) {\n      if (this._indicatorsElement) {\n        const activeIndicator = SelectorEngine.findOne(SELECTOR_ACTIVE$1, this._indicatorsElement);\n        activeIndicator.classList.remove(CLASS_NAME_ACTIVE$2);\n        activeIndicator.removeAttribute('aria-current');\n        const indicators = SelectorEngine.find(SELECTOR_INDICATOR, this._indicatorsElement);\n\n        for (let i = 0; i < indicators.length; i++) {\n          if (Number.parseInt(indicators[i].getAttribute('data-bs-slide-to'), 10) === this._getItemIndex(element)) {\n            indicators[i].classList.add(CLASS_NAME_ACTIVE$2);\n            indicators[i].setAttribute('aria-current', 'true');\n            break;\n          }\n        }\n      }\n    }\n\n    _updateInterval() {\n      const element = this._activeElement || SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element);\n\n      if (!element) {\n        return;\n      }\n\n      const elementInterval = Number.parseInt(element.getAttribute('data-bs-interval'), 10);\n\n      if (elementInterval) {\n        this._config.defaultInterval = this._config.defaultInterval || this._config.interval;\n        this._config.interval = elementInterval;\n      } else {\n        this._config.interval = this._config.defaultInterval || this._config.interval;\n      }\n    }\n\n    _slide(directionOrOrder, element) {\n      const order = this._directionToOrder(directionOrOrder);\n\n      const activeElement = SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element);\n\n      const activeElementIndex = this._getItemIndex(activeElement);\n\n      const nextElement = element || this._getItemByOrder(order, activeElement);\n\n      const nextElementIndex = this._getItemIndex(nextElement);\n\n      const isCycling = Boolean(this._interval);\n      const isNext = order === ORDER_NEXT;\n      const directionalClassName = isNext ? CLASS_NAME_START : CLASS_NAME_END;\n      const orderClassName = isNext ? CLASS_NAME_NEXT : CLASS_NAME_PREV;\n\n      const eventDirectionName = this._orderToDirection(order);\n\n      if (nextElement && nextElement.classList.contains(CLASS_NAME_ACTIVE$2)) {\n        this._isSliding = false;\n        return;\n      }\n\n      if (this._isSliding) {\n        return;\n      }\n\n      const slideEvent = this._triggerSlideEvent(nextElement, eventDirectionName);\n\n      if (slideEvent.defaultPrevented) {\n        return;\n      }\n\n      if (!activeElement || !nextElement) {\n        // Some weirdness is happening, so we bail\n        return;\n      }\n\n      this._isSliding = true;\n\n      if (isCycling) {\n        this.pause();\n      }\n\n      this._setActiveIndicatorElement(nextElement);\n\n      this._activeElement = nextElement;\n\n      const triggerSlidEvent = () => {\n        EventHandler.trigger(this._element, EVENT_SLID, {\n          relatedTarget: nextElement,\n          direction: eventDirectionName,\n          from: activeElementIndex,\n          to: nextElementIndex\n        });\n      };\n\n      if (this._element.classList.contains(CLASS_NAME_SLIDE)) {\n        nextElement.classList.add(orderClassName);\n        reflow(nextElement);\n        activeElement.classList.add(directionalClassName);\n        nextElement.classList.add(directionalClassName);\n\n        const completeCallBack = () => {\n          nextElement.classList.remove(directionalClassName, orderClassName);\n          nextElement.classList.add(CLASS_NAME_ACTIVE$2);\n          activeElement.classList.remove(CLASS_NAME_ACTIVE$2, orderClassName, directionalClassName);\n          this._isSliding = false;\n          setTimeout(triggerSlidEvent, 0);\n        };\n\n        this._queueCallback(completeCallBack, activeElement, true);\n      } else {\n        activeElement.classList.remove(CLASS_NAME_ACTIVE$2);\n        nextElement.classList.add(CLASS_NAME_ACTIVE$2);\n        this._isSliding = false;\n        triggerSlidEvent();\n      }\n\n      if (isCycling) {\n        this.cycle();\n      }\n    }\n\n    _directionToOrder(direction) {\n      if (![DIRECTION_RIGHT, DIRECTION_LEFT].includes(direction)) {\n        return direction;\n      }\n\n      if (isRTL()) {\n        return direction === DIRECTION_LEFT ? ORDER_PREV : ORDER_NEXT;\n      }\n\n      return direction === DIRECTION_LEFT ? ORDER_NEXT : ORDER_PREV;\n    }\n\n    _orderToDirection(order) {\n      if (![ORDER_NEXT, ORDER_PREV].includes(order)) {\n        return order;\n      }\n\n      if (isRTL()) {\n        return order === ORDER_PREV ? DIRECTION_LEFT : DIRECTION_RIGHT;\n      }\n\n      return order === ORDER_PREV ? DIRECTION_RIGHT : DIRECTION_LEFT;\n    } // Static\n\n\n    static carouselInterface(element, config) {\n      const data = Carousel.getOrCreateInstance(element, config);\n      let {\n        _config\n      } = data;\n\n      if (typeof config === 'object') {\n        _config = { ..._config,\n          ...config\n        };\n      }\n\n      const action = typeof config === 'string' ? config : _config.slide;\n\n      if (typeof config === 'number') {\n        data.to(config);\n      } else if (typeof action === 'string') {\n        if (typeof data[action] === 'undefined') {\n          throw new TypeError(`No method named \"${action}\"`);\n        }\n\n        data[action]();\n      } else if (_config.interval && _config.ride) {\n        data.pause();\n        data.cycle();\n      }\n    }\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        Carousel.carouselInterface(this, config);\n      });\n    }\n\n    static dataApiClickHandler(event) {\n      const target = getElementFromSelector(this);\n\n      if (!target || !target.classList.contains(CLASS_NAME_CAROUSEL)) {\n        return;\n      }\n\n      const config = { ...Manipulator.getDataAttributes(target),\n        ...Manipulator.getDataAttributes(this)\n      };\n      const slideIndex = this.getAttribute('data-bs-slide-to');\n\n      if (slideIndex) {\n        config.interval = false;\n      }\n\n      Carousel.carouselInterface(target, config);\n\n      if (slideIndex) {\n        Carousel.getInstance(target).to(slideIndex);\n      }\n\n      event.preventDefault();\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(document, EVENT_CLICK_DATA_API$5, SELECTOR_DATA_SLIDE, Carousel.dataApiClickHandler);\n  EventHandler.on(window, EVENT_LOAD_DATA_API$2, () => {\n    const carousels = SelectorEngine.find(SELECTOR_DATA_RIDE);\n\n    for (let i = 0, len = carousels.length; i < len; i++) {\n      Carousel.carouselInterface(carousels[i], Carousel.getInstance(carousels[i]));\n    }\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Carousel to jQuery only if jQuery is present\n   */\n\n  defineJQueryPlugin(Carousel);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): collapse.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$9 = 'collapse';\n  const DATA_KEY$8 = 'bs.collapse';\n  const EVENT_KEY$8 = `.${DATA_KEY$8}`;\n  const DATA_API_KEY$5 = '.data-api';\n  const Default$8 = {\n    toggle: true,\n    parent: ''\n  };\n  const DefaultType$8 = {\n    toggle: 'boolean',\n    parent: '(string|element)'\n  };\n  const EVENT_SHOW$5 = `show${EVENT_KEY$8}`;\n  const EVENT_SHOWN$5 = `shown${EVENT_KEY$8}`;\n  const EVENT_HIDE$5 = `hide${EVENT_KEY$8}`;\n  const EVENT_HIDDEN$5 = `hidden${EVENT_KEY$8}`;\n  const EVENT_CLICK_DATA_API$4 = `click${EVENT_KEY$8}${DATA_API_KEY$5}`;\n  const CLASS_NAME_SHOW$8 = 'show';\n  const CLASS_NAME_COLLAPSE = 'collapse';\n  const CLASS_NAME_COLLAPSING = 'collapsing';\n  const CLASS_NAME_COLLAPSED = 'collapsed';\n  const WIDTH = 'width';\n  const HEIGHT = 'height';\n  const SELECTOR_ACTIVES = '.show, .collapsing';\n  const SELECTOR_DATA_TOGGLE$4 = '[data-bs-toggle=\"collapse\"]';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Collapse extends BaseComponent {\n    constructor(element, config) {\n      super(element);\n      this._isTransitioning = false;\n      this._config = this._getConfig(config);\n      this._triggerArray = SelectorEngine.find(`${SELECTOR_DATA_TOGGLE$4}[href=\"#${this._element.id}\"],` + `${SELECTOR_DATA_TOGGLE$4}[data-bs-target=\"#${this._element.id}\"]`);\n      const toggleList = SelectorEngine.find(SELECTOR_DATA_TOGGLE$4);\n\n      for (let i = 0, len = toggleList.length; i < len; i++) {\n        const elem = toggleList[i];\n        const selector = getSelectorFromElement(elem);\n        const filterElement = SelectorEngine.find(selector).filter(foundElem => foundElem === this._element);\n\n        if (selector !== null && filterElement.length) {\n          this._selector = selector;\n\n          this._triggerArray.push(elem);\n        }\n      }\n\n      this._parent = this._config.parent ? this._getParent() : null;\n\n      if (!this._config.parent) {\n        this._addAriaAndCollapsedClass(this._element, this._triggerArray);\n      }\n\n      if (this._config.toggle) {\n        this.toggle();\n      }\n    } // Getters\n\n\n    static get Default() {\n      return Default$8;\n    }\n\n    static get NAME() {\n      return NAME$9;\n    } // Public\n\n\n    toggle() {\n      if (this._element.classList.contains(CLASS_NAME_SHOW$8)) {\n        this.hide();\n      } else {\n        this.show();\n      }\n    }\n\n    show() {\n      if (this._isTransitioning || this._element.classList.contains(CLASS_NAME_SHOW$8)) {\n        return;\n      }\n\n      let actives;\n      let activesData;\n\n      if (this._parent) {\n        actives = SelectorEngine.find(SELECTOR_ACTIVES, this._parent).filter(elem => {\n          if (typeof this._config.parent === 'string') {\n            return elem.getAttribute('data-bs-parent') === this._config.parent;\n          }\n\n          return elem.classList.contains(CLASS_NAME_COLLAPSE);\n        });\n\n        if (actives.length === 0) {\n          actives = null;\n        }\n      }\n\n      const container = SelectorEngine.findOne(this._selector);\n\n      if (actives) {\n        const tempActiveData = actives.find(elem => container !== elem);\n        activesData = tempActiveData ? Collapse.getInstance(tempActiveData) : null;\n\n        if (activesData && activesData._isTransitioning) {\n          return;\n        }\n      }\n\n      const startEvent = EventHandler.trigger(this._element, EVENT_SHOW$5);\n\n      if (startEvent.defaultPrevented) {\n        return;\n      }\n\n      if (actives) {\n        actives.forEach(elemActive => {\n          if (container !== elemActive) {\n            Collapse.collapseInterface(elemActive, 'hide');\n          }\n\n          if (!activesData) {\n            Data.set(elemActive, DATA_KEY$8, null);\n          }\n        });\n      }\n\n      const dimension = this._getDimension();\n\n      this._element.classList.remove(CLASS_NAME_COLLAPSE);\n\n      this._element.classList.add(CLASS_NAME_COLLAPSING);\n\n      this._element.style[dimension] = 0;\n\n      if (this._triggerArray.length) {\n        this._triggerArray.forEach(element => {\n          element.classList.remove(CLASS_NAME_COLLAPSED);\n          element.setAttribute('aria-expanded', true);\n        });\n      }\n\n      this.setTransitioning(true);\n\n      const complete = () => {\n        this._element.classList.remove(CLASS_NAME_COLLAPSING);\n\n        this._element.classList.add(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$8);\n\n        this._element.style[dimension] = '';\n        this.setTransitioning(false);\n        EventHandler.trigger(this._element, EVENT_SHOWN$5);\n      };\n\n      const capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1);\n      const scrollSize = `scroll${capitalizedDimension}`;\n\n      this._queueCallback(complete, this._element, true);\n\n      this._element.style[dimension] = `${this._element[scrollSize]}px`;\n    }\n\n    hide() {\n      if (this._isTransitioning || !this._element.classList.contains(CLASS_NAME_SHOW$8)) {\n        return;\n      }\n\n      const startEvent = EventHandler.trigger(this._element, EVENT_HIDE$5);\n\n      if (startEvent.defaultPrevented) {\n        return;\n      }\n\n      const dimension = this._getDimension();\n\n      this._element.style[dimension] = `${this._element.getBoundingClientRect()[dimension]}px`;\n      reflow(this._element);\n\n      this._element.classList.add(CLASS_NAME_COLLAPSING);\n\n      this._element.classList.remove(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$8);\n\n      const triggerArrayLength = this._triggerArray.length;\n\n      if (triggerArrayLength > 0) {\n        for (let i = 0; i < triggerArrayLength; i++) {\n          const trigger = this._triggerArray[i];\n          const elem = getElementFromSelector(trigger);\n\n          if (elem && !elem.classList.contains(CLASS_NAME_SHOW$8)) {\n            trigger.classList.add(CLASS_NAME_COLLAPSED);\n            trigger.setAttribute('aria-expanded', false);\n          }\n        }\n      }\n\n      this.setTransitioning(true);\n\n      const complete = () => {\n        this.setTransitioning(false);\n\n        this._element.classList.remove(CLASS_NAME_COLLAPSING);\n\n        this._element.classList.add(CLASS_NAME_COLLAPSE);\n\n        EventHandler.trigger(this._element, EVENT_HIDDEN$5);\n      };\n\n      this._element.style[dimension] = '';\n\n      this._queueCallback(complete, this._element, true);\n    }\n\n    setTransitioning(isTransitioning) {\n      this._isTransitioning = isTransitioning;\n    } // Private\n\n\n    _getConfig(config) {\n      config = { ...Default$8,\n        ...config\n      };\n      config.toggle = Boolean(config.toggle); // Coerce string values\n\n      typeCheckConfig(NAME$9, config, DefaultType$8);\n      return config;\n    }\n\n    _getDimension() {\n      return this._element.classList.contains(WIDTH) ? WIDTH : HEIGHT;\n    }\n\n    _getParent() {\n      let {\n        parent\n      } = this._config;\n      parent = getElement(parent);\n      const selector = `${SELECTOR_DATA_TOGGLE$4}[data-bs-parent=\"${parent}\"]`;\n      SelectorEngine.find(selector, parent).forEach(element => {\n        const selected = getElementFromSelector(element);\n\n        this._addAriaAndCollapsedClass(selected, [element]);\n      });\n      return parent;\n    }\n\n    _addAriaAndCollapsedClass(element, triggerArray) {\n      if (!element || !triggerArray.length) {\n        return;\n      }\n\n      const isOpen = element.classList.contains(CLASS_NAME_SHOW$8);\n      triggerArray.forEach(elem => {\n        if (isOpen) {\n          elem.classList.remove(CLASS_NAME_COLLAPSED);\n        } else {\n          elem.classList.add(CLASS_NAME_COLLAPSED);\n        }\n\n        elem.setAttribute('aria-expanded', isOpen);\n      });\n    } // Static\n\n\n    static collapseInterface(element, config) {\n      let data = Collapse.getInstance(element);\n      const _config = { ...Default$8,\n        ...Manipulator.getDataAttributes(element),\n        ...(typeof config === 'object' && config ? config : {})\n      };\n\n      if (!data && _config.toggle && typeof config === 'string' && /show|hide/.test(config)) {\n        _config.toggle = false;\n      }\n\n      if (!data) {\n        data = new Collapse(element, _config);\n      }\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config]();\n      }\n    }\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        Collapse.collapseInterface(this, config);\n      });\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(document, EVENT_CLICK_DATA_API$4, SELECTOR_DATA_TOGGLE$4, function (event) {\n    // preventDefault only for <a> elements (which change the URL) not inside the collapsible element\n    if (event.target.tagName === 'A' || event.delegateTarget && event.delegateTarget.tagName === 'A') {\n      event.preventDefault();\n    }\n\n    const triggerData = Manipulator.getDataAttributes(this);\n    const selector = getSelectorFromElement(this);\n    const selectorElements = SelectorEngine.find(selector);\n    selectorElements.forEach(element => {\n      const data = Collapse.getInstance(element);\n      let config;\n\n      if (data) {\n        // update parent attribute\n        if (data._parent === null && typeof triggerData.parent === 'string') {\n          data._config.parent = triggerData.parent;\n          data._parent = data._getParent();\n        }\n\n        config = 'toggle';\n      } else {\n        config = triggerData;\n      }\n\n      Collapse.collapseInterface(element, config);\n    });\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Collapse to jQuery only if jQuery is present\n   */\n\n  defineJQueryPlugin(Collapse);\n\n  var top = 'top';\n  var bottom = 'bottom';\n  var right = 'right';\n  var left = 'left';\n  var auto = 'auto';\n  var basePlacements = [top, bottom, right, left];\n  var start = 'start';\n  var end = 'end';\n  var clippingParents = 'clippingParents';\n  var viewport = 'viewport';\n  var popper = 'popper';\n  var reference = 'reference';\n  var variationPlacements = /*#__PURE__*/basePlacements.reduce(function (acc, placement) {\n    return acc.concat([placement + \"-\" + start, placement + \"-\" + end]);\n  }, []);\n  var placements = /*#__PURE__*/[].concat(basePlacements, [auto]).reduce(function (acc, placement) {\n    return acc.concat([placement, placement + \"-\" + start, placement + \"-\" + end]);\n  }, []); // modifiers that need to read the DOM\n\n  var beforeRead = 'beforeRead';\n  var read = 'read';\n  var afterRead = 'afterRead'; // pure-logic modifiers\n\n  var beforeMain = 'beforeMain';\n  var main = 'main';\n  var afterMain = 'afterMain'; // modifier with the purpose to write to the DOM (or write into a framework state)\n\n  var beforeWrite = 'beforeWrite';\n  var write = 'write';\n  var afterWrite = 'afterWrite';\n  var modifierPhases = [beforeRead, read, afterRead, beforeMain, main, afterMain, beforeWrite, write, afterWrite];\n\n  function getNodeName(element) {\n    return element ? (element.nodeName || '').toLowerCase() : null;\n  }\n\n  function getWindow(node) {\n    if (node == null) {\n      return window;\n    }\n\n    if (node.toString() !== '[object Window]') {\n      var ownerDocument = node.ownerDocument;\n      return ownerDocument ? ownerDocument.defaultView || window : window;\n    }\n\n    return node;\n  }\n\n  function isElement(node) {\n    var OwnElement = getWindow(node).Element;\n    return node instanceof OwnElement || node instanceof Element;\n  }\n\n  function isHTMLElement(node) {\n    var OwnElement = getWindow(node).HTMLElement;\n    return node instanceof OwnElement || node instanceof HTMLElement;\n  }\n\n  function isShadowRoot(node) {\n    // IE 11 has no ShadowRoot\n    if (typeof ShadowRoot === 'undefined') {\n      return false;\n    }\n\n    var OwnElement = getWindow(node).ShadowRoot;\n    return node instanceof OwnElement || node instanceof ShadowRoot;\n  }\n\n  // and applies them to the HTMLElements such as popper and arrow\n\n  function applyStyles(_ref) {\n    var state = _ref.state;\n    Object.keys(state.elements).forEach(function (name) {\n      var style = state.styles[name] || {};\n      var attributes = state.attributes[name] || {};\n      var element = state.elements[name]; // arrow is optional + virtual elements\n\n      if (!isHTMLElement(element) || !getNodeName(element)) {\n        return;\n      } // Flow doesn't support to extend this property, but it's the most\n      // effective way to apply styles to an HTMLElement\n      // $FlowFixMe[cannot-write]\n\n\n      Object.assign(element.style, style);\n      Object.keys(attributes).forEach(function (name) {\n        var value = attributes[name];\n\n        if (value === false) {\n          element.removeAttribute(name);\n        } else {\n          element.setAttribute(name, value === true ? '' : value);\n        }\n      });\n    });\n  }\n\n  function effect$2(_ref2) {\n    var state = _ref2.state;\n    var initialStyles = {\n      popper: {\n        position: state.options.strategy,\n        left: '0',\n        top: '0',\n        margin: '0'\n      },\n      arrow: {\n        position: 'absolute'\n      },\n      reference: {}\n    };\n    Object.assign(state.elements.popper.style, initialStyles.popper);\n    state.styles = initialStyles;\n\n    if (state.elements.arrow) {\n      Object.assign(state.elements.arrow.style, initialStyles.arrow);\n    }\n\n    return function () {\n      Object.keys(state.elements).forEach(function (name) {\n        var element = state.elements[name];\n        var attributes = state.attributes[name] || {};\n        var styleProperties = Object.keys(state.styles.hasOwnProperty(name) ? state.styles[name] : initialStyles[name]); // Set all values to an empty string to unset them\n\n        var style = styleProperties.reduce(function (style, property) {\n          style[property] = '';\n          return style;\n        }, {}); // arrow is optional + virtual elements\n\n        if (!isHTMLElement(element) || !getNodeName(element)) {\n          return;\n        }\n\n        Object.assign(element.style, style);\n        Object.keys(attributes).forEach(function (attribute) {\n          element.removeAttribute(attribute);\n        });\n      });\n    };\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  var applyStyles$1 = {\n    name: 'applyStyles',\n    enabled: true,\n    phase: 'write',\n    fn: applyStyles,\n    effect: effect$2,\n    requires: ['computeStyles']\n  };\n\n  function getBasePlacement(placement) {\n    return placement.split('-')[0];\n  }\n\n  function getBoundingClientRect(element) {\n    var rect = element.getBoundingClientRect();\n    return {\n      width: rect.width,\n      height: rect.height,\n      top: rect.top,\n      right: rect.right,\n      bottom: rect.bottom,\n      left: rect.left,\n      x: rect.left,\n      y: rect.top\n    };\n  }\n\n  // means it doesn't take into account transforms.\n\n  function getLayoutRect(element) {\n    var clientRect = getBoundingClientRect(element); // Use the clientRect sizes if it's not been transformed.\n    // Fixes https://github.com/popperjs/popper-core/issues/1223\n\n    var width = element.offsetWidth;\n    var height = element.offsetHeight;\n\n    if (Math.abs(clientRect.width - width) <= 1) {\n      width = clientRect.width;\n    }\n\n    if (Math.abs(clientRect.height - height) <= 1) {\n      height = clientRect.height;\n    }\n\n    return {\n      x: element.offsetLeft,\n      y: element.offsetTop,\n      width: width,\n      height: height\n    };\n  }\n\n  function contains(parent, child) {\n    var rootNode = child.getRootNode && child.getRootNode(); // First, attempt with faster native method\n\n    if (parent.contains(child)) {\n      return true;\n    } // then fallback to custom implementation with Shadow DOM support\n    else if (rootNode && isShadowRoot(rootNode)) {\n        var next = child;\n\n        do {\n          if (next && parent.isSameNode(next)) {\n            return true;\n          } // $FlowFixMe[prop-missing]: need a better way to handle this...\n\n\n          next = next.parentNode || next.host;\n        } while (next);\n      } // Give up, the result is false\n\n\n    return false;\n  }\n\n  function getComputedStyle$1(element) {\n    return getWindow(element).getComputedStyle(element);\n  }\n\n  function isTableElement(element) {\n    return ['table', 'td', 'th'].indexOf(getNodeName(element)) >= 0;\n  }\n\n  function getDocumentElement(element) {\n    // $FlowFixMe[incompatible-return]: assume body is always available\n    return ((isElement(element) ? element.ownerDocument : // $FlowFixMe[prop-missing]\n    element.document) || window.document).documentElement;\n  }\n\n  function getParentNode(element) {\n    if (getNodeName(element) === 'html') {\n      return element;\n    }\n\n    return (// this is a quicker (but less type safe) way to save quite some bytes from the bundle\n      // $FlowFixMe[incompatible-return]\n      // $FlowFixMe[prop-missing]\n      element.assignedSlot || // step into the shadow DOM of the parent of a slotted node\n      element.parentNode || ( // DOM Element detected\n      isShadowRoot(element) ? element.host : null) || // ShadowRoot detected\n      // $FlowFixMe[incompatible-call]: HTMLElement is a Node\n      getDocumentElement(element) // fallback\n\n    );\n  }\n\n  function getTrueOffsetParent(element) {\n    if (!isHTMLElement(element) || // https://github.com/popperjs/popper-core/issues/837\n    getComputedStyle$1(element).position === 'fixed') {\n      return null;\n    }\n\n    return element.offsetParent;\n  } // `.offsetParent` reports `null` for fixed elements, while absolute elements\n  // return the containing block\n\n\n  function getContainingBlock(element) {\n    var isFirefox = navigator.userAgent.toLowerCase().indexOf('firefox') !== -1;\n    var isIE = navigator.userAgent.indexOf('Trident') !== -1;\n\n    if (isIE && isHTMLElement(element)) {\n      // In IE 9, 10 and 11 fixed elements containing block is always established by the viewport\n      var elementCss = getComputedStyle$1(element);\n\n      if (elementCss.position === 'fixed') {\n        return null;\n      }\n    }\n\n    var currentNode = getParentNode(element);\n\n    while (isHTMLElement(currentNode) && ['html', 'body'].indexOf(getNodeName(currentNode)) < 0) {\n      var css = getComputedStyle$1(currentNode); // This is non-exhaustive but covers the most common CSS properties that\n      // create a containing block.\n      // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n\n      if (css.transform !== 'none' || css.perspective !== 'none' || css.contain === 'paint' || ['transform', 'perspective'].indexOf(css.willChange) !== -1 || isFirefox && css.willChange === 'filter' || isFirefox && css.filter && css.filter !== 'none') {\n        return currentNode;\n      } else {\n        currentNode = currentNode.parentNode;\n      }\n    }\n\n    return null;\n  } // Gets the closest ancestor positioned element. Handles some edge cases,\n  // such as table ancestors and cross browser bugs.\n\n\n  function getOffsetParent(element) {\n    var window = getWindow(element);\n    var offsetParent = getTrueOffsetParent(element);\n\n    while (offsetParent && isTableElement(offsetParent) && getComputedStyle$1(offsetParent).position === 'static') {\n      offsetParent = getTrueOffsetParent(offsetParent);\n    }\n\n    if (offsetParent && (getNodeName(offsetParent) === 'html' || getNodeName(offsetParent) === 'body' && getComputedStyle$1(offsetParent).position === 'static')) {\n      return window;\n    }\n\n    return offsetParent || getContainingBlock(element) || window;\n  }\n\n  function getMainAxisFromPlacement(placement) {\n    return ['top', 'bottom'].indexOf(placement) >= 0 ? 'x' : 'y';\n  }\n\n  var max = Math.max;\n  var min = Math.min;\n  var round = Math.round;\n\n  function within(min$1, value, max$1) {\n    return max(min$1, min(value, max$1));\n  }\n\n  function getFreshSideObject() {\n    return {\n      top: 0,\n      right: 0,\n      bottom: 0,\n      left: 0\n    };\n  }\n\n  function mergePaddingObject(paddingObject) {\n    return Object.assign({}, getFreshSideObject(), paddingObject);\n  }\n\n  function expandToHashMap(value, keys) {\n    return keys.reduce(function (hashMap, key) {\n      hashMap[key] = value;\n      return hashMap;\n    }, {});\n  }\n\n  var toPaddingObject = function toPaddingObject(padding, state) {\n    padding = typeof padding === 'function' ? padding(Object.assign({}, state.rects, {\n      placement: state.placement\n    })) : padding;\n    return mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));\n  };\n\n  function arrow(_ref) {\n    var _state$modifiersData$;\n\n    var state = _ref.state,\n        name = _ref.name,\n        options = _ref.options;\n    var arrowElement = state.elements.arrow;\n    var popperOffsets = state.modifiersData.popperOffsets;\n    var basePlacement = getBasePlacement(state.placement);\n    var axis = getMainAxisFromPlacement(basePlacement);\n    var isVertical = [left, right].indexOf(basePlacement) >= 0;\n    var len = isVertical ? 'height' : 'width';\n\n    if (!arrowElement || !popperOffsets) {\n      return;\n    }\n\n    var paddingObject = toPaddingObject(options.padding, state);\n    var arrowRect = getLayoutRect(arrowElement);\n    var minProp = axis === 'y' ? top : left;\n    var maxProp = axis === 'y' ? bottom : right;\n    var endDiff = state.rects.reference[len] + state.rects.reference[axis] - popperOffsets[axis] - state.rects.popper[len];\n    var startDiff = popperOffsets[axis] - state.rects.reference[axis];\n    var arrowOffsetParent = getOffsetParent(arrowElement);\n    var clientSize = arrowOffsetParent ? axis === 'y' ? arrowOffsetParent.clientHeight || 0 : arrowOffsetParent.clientWidth || 0 : 0;\n    var centerToReference = endDiff / 2 - startDiff / 2; // Make sure the arrow doesn't overflow the popper if the center point is\n    // outside of the popper bounds\n\n    var min = paddingObject[minProp];\n    var max = clientSize - arrowRect[len] - paddingObject[maxProp];\n    var center = clientSize / 2 - arrowRect[len] / 2 + centerToReference;\n    var offset = within(min, center, max); // Prevents breaking syntax highlighting...\n\n    var axisProp = axis;\n    state.modifiersData[name] = (_state$modifiersData$ = {}, _state$modifiersData$[axisProp] = offset, _state$modifiersData$.centerOffset = offset - center, _state$modifiersData$);\n  }\n\n  function effect$1(_ref2) {\n    var state = _ref2.state,\n        options = _ref2.options;\n    var _options$element = options.element,\n        arrowElement = _options$element === void 0 ? '[data-popper-arrow]' : _options$element;\n\n    if (arrowElement == null) {\n      return;\n    } // CSS selector\n\n\n    if (typeof arrowElement === 'string') {\n      arrowElement = state.elements.popper.querySelector(arrowElement);\n\n      if (!arrowElement) {\n        return;\n      }\n    }\n\n    if (!contains(state.elements.popper, arrowElement)) {\n\n      return;\n    }\n\n    state.elements.arrow = arrowElement;\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  var arrow$1 = {\n    name: 'arrow',\n    enabled: true,\n    phase: 'main',\n    fn: arrow,\n    effect: effect$1,\n    requires: ['popperOffsets'],\n    requiresIfExists: ['preventOverflow']\n  };\n\n  var unsetSides = {\n    top: 'auto',\n    right: 'auto',\n    bottom: 'auto',\n    left: 'auto'\n  }; // Round the offsets to the nearest suitable subpixel based on the DPR.\n  // Zooming can change the DPR, but it seems to report a value that will\n  // cleanly divide the values into the appropriate subpixels.\n\n  function roundOffsetsByDPR(_ref) {\n    var x = _ref.x,\n        y = _ref.y;\n    var win = window;\n    var dpr = win.devicePixelRatio || 1;\n    return {\n      x: round(round(x * dpr) / dpr) || 0,\n      y: round(round(y * dpr) / dpr) || 0\n    };\n  }\n\n  function mapToStyles(_ref2) {\n    var _Object$assign2;\n\n    var popper = _ref2.popper,\n        popperRect = _ref2.popperRect,\n        placement = _ref2.placement,\n        offsets = _ref2.offsets,\n        position = _ref2.position,\n        gpuAcceleration = _ref2.gpuAcceleration,\n        adaptive = _ref2.adaptive,\n        roundOffsets = _ref2.roundOffsets;\n\n    var _ref3 = roundOffsets === true ? roundOffsetsByDPR(offsets) : typeof roundOffsets === 'function' ? roundOffsets(offsets) : offsets,\n        _ref3$x = _ref3.x,\n        x = _ref3$x === void 0 ? 0 : _ref3$x,\n        _ref3$y = _ref3.y,\n        y = _ref3$y === void 0 ? 0 : _ref3$y;\n\n    var hasX = offsets.hasOwnProperty('x');\n    var hasY = offsets.hasOwnProperty('y');\n    var sideX = left;\n    var sideY = top;\n    var win = window;\n\n    if (adaptive) {\n      var offsetParent = getOffsetParent(popper);\n      var heightProp = 'clientHeight';\n      var widthProp = 'clientWidth';\n\n      if (offsetParent === getWindow(popper)) {\n        offsetParent = getDocumentElement(popper);\n\n        if (getComputedStyle$1(offsetParent).position !== 'static') {\n          heightProp = 'scrollHeight';\n          widthProp = 'scrollWidth';\n        }\n      } // $FlowFixMe[incompatible-cast]: force type refinement, we compare offsetParent with window above, but Flow doesn't detect it\n\n\n      offsetParent = offsetParent;\n\n      if (placement === top) {\n        sideY = bottom; // $FlowFixMe[prop-missing]\n\n        y -= offsetParent[heightProp] - popperRect.height;\n        y *= gpuAcceleration ? 1 : -1;\n      }\n\n      if (placement === left) {\n        sideX = right; // $FlowFixMe[prop-missing]\n\n        x -= offsetParent[widthProp] - popperRect.width;\n        x *= gpuAcceleration ? 1 : -1;\n      }\n    }\n\n    var commonStyles = Object.assign({\n      position: position\n    }, adaptive && unsetSides);\n\n    if (gpuAcceleration) {\n      var _Object$assign;\n\n      return Object.assign({}, commonStyles, (_Object$assign = {}, _Object$assign[sideY] = hasY ? '0' : '', _Object$assign[sideX] = hasX ? '0' : '', _Object$assign.transform = (win.devicePixelRatio || 1) < 2 ? \"translate(\" + x + \"px, \" + y + \"px)\" : \"translate3d(\" + x + \"px, \" + y + \"px, 0)\", _Object$assign));\n    }\n\n    return Object.assign({}, commonStyles, (_Object$assign2 = {}, _Object$assign2[sideY] = hasY ? y + \"px\" : '', _Object$assign2[sideX] = hasX ? x + \"px\" : '', _Object$assign2.transform = '', _Object$assign2));\n  }\n\n  function computeStyles(_ref4) {\n    var state = _ref4.state,\n        options = _ref4.options;\n    var _options$gpuAccelerat = options.gpuAcceleration,\n        gpuAcceleration = _options$gpuAccelerat === void 0 ? true : _options$gpuAccelerat,\n        _options$adaptive = options.adaptive,\n        adaptive = _options$adaptive === void 0 ? true : _options$adaptive,\n        _options$roundOffsets = options.roundOffsets,\n        roundOffsets = _options$roundOffsets === void 0 ? true : _options$roundOffsets;\n\n    var commonStyles = {\n      placement: getBasePlacement(state.placement),\n      popper: state.elements.popper,\n      popperRect: state.rects.popper,\n      gpuAcceleration: gpuAcceleration\n    };\n\n    if (state.modifiersData.popperOffsets != null) {\n      state.styles.popper = Object.assign({}, state.styles.popper, mapToStyles(Object.assign({}, commonStyles, {\n        offsets: state.modifiersData.popperOffsets,\n        position: state.options.strategy,\n        adaptive: adaptive,\n        roundOffsets: roundOffsets\n      })));\n    }\n\n    if (state.modifiersData.arrow != null) {\n      state.styles.arrow = Object.assign({}, state.styles.arrow, mapToStyles(Object.assign({}, commonStyles, {\n        offsets: state.modifiersData.arrow,\n        position: 'absolute',\n        adaptive: false,\n        roundOffsets: roundOffsets\n      })));\n    }\n\n    state.attributes.popper = Object.assign({}, state.attributes.popper, {\n      'data-popper-placement': state.placement\n    });\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  var computeStyles$1 = {\n    name: 'computeStyles',\n    enabled: true,\n    phase: 'beforeWrite',\n    fn: computeStyles,\n    data: {}\n  };\n\n  var passive = {\n    passive: true\n  };\n\n  function effect(_ref) {\n    var state = _ref.state,\n        instance = _ref.instance,\n        options = _ref.options;\n    var _options$scroll = options.scroll,\n        scroll = _options$scroll === void 0 ? true : _options$scroll,\n        _options$resize = options.resize,\n        resize = _options$resize === void 0 ? true : _options$resize;\n    var window = getWindow(state.elements.popper);\n    var scrollParents = [].concat(state.scrollParents.reference, state.scrollParents.popper);\n\n    if (scroll) {\n      scrollParents.forEach(function (scrollParent) {\n        scrollParent.addEventListener('scroll', instance.update, passive);\n      });\n    }\n\n    if (resize) {\n      window.addEventListener('resize', instance.update, passive);\n    }\n\n    return function () {\n      if (scroll) {\n        scrollParents.forEach(function (scrollParent) {\n          scrollParent.removeEventListener('scroll', instance.update, passive);\n        });\n      }\n\n      if (resize) {\n        window.removeEventListener('resize', instance.update, passive);\n      }\n    };\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  var eventListeners = {\n    name: 'eventListeners',\n    enabled: true,\n    phase: 'write',\n    fn: function fn() {},\n    effect: effect,\n    data: {}\n  };\n\n  var hash$1 = {\n    left: 'right',\n    right: 'left',\n    bottom: 'top',\n    top: 'bottom'\n  };\n  function getOppositePlacement(placement) {\n    return placement.replace(/left|right|bottom|top/g, function (matched) {\n      return hash$1[matched];\n    });\n  }\n\n  var hash = {\n    start: 'end',\n    end: 'start'\n  };\n  function getOppositeVariationPlacement(placement) {\n    return placement.replace(/start|end/g, function (matched) {\n      return hash[matched];\n    });\n  }\n\n  function getWindowScroll(node) {\n    var win = getWindow(node);\n    var scrollLeft = win.pageXOffset;\n    var scrollTop = win.pageYOffset;\n    return {\n      scrollLeft: scrollLeft,\n      scrollTop: scrollTop\n    };\n  }\n\n  function getWindowScrollBarX(element) {\n    // If <html> has a CSS width greater than the viewport, then this will be\n    // incorrect for RTL.\n    // Popper 1 is broken in this case and never had a bug report so let's assume\n    // it's not an issue. I don't think anyone ever specifies width on <html>\n    // anyway.\n    // Browsers where the left scrollbar doesn't cause an issue report `0` for\n    // this (e.g. Edge 2019, IE11, Safari)\n    return getBoundingClientRect(getDocumentElement(element)).left + getWindowScroll(element).scrollLeft;\n  }\n\n  function getViewportRect(element) {\n    var win = getWindow(element);\n    var html = getDocumentElement(element);\n    var visualViewport = win.visualViewport;\n    var width = html.clientWidth;\n    var height = html.clientHeight;\n    var x = 0;\n    var y = 0; // NB: This isn't supported on iOS <= 12. If the keyboard is open, the popper\n    // can be obscured underneath it.\n    // Also, `html.clientHeight` adds the bottom bar height in Safari iOS, even\n    // if it isn't open, so if this isn't available, the popper will be detected\n    // to overflow the bottom of the screen too early.\n\n    if (visualViewport) {\n      width = visualViewport.width;\n      height = visualViewport.height; // Uses Layout Viewport (like Chrome; Safari does not currently)\n      // In Chrome, it returns a value very close to 0 (+/-) but contains rounding\n      // errors due to floating point numbers, so we need to check precision.\n      // Safari returns a number <= 0, usually < -1 when pinch-zoomed\n      // Feature detection fails in mobile emulation mode in Chrome.\n      // Math.abs(win.innerWidth / visualViewport.scale - visualViewport.width) <\n      // 0.001\n      // Fallback here: \"Not Safari\" userAgent\n\n      if (!/^((?!chrome|android).)*safari/i.test(navigator.userAgent)) {\n        x = visualViewport.offsetLeft;\n        y = visualViewport.offsetTop;\n      }\n    }\n\n    return {\n      width: width,\n      height: height,\n      x: x + getWindowScrollBarX(element),\n      y: y\n    };\n  }\n\n  // of the `<html>` and `<body>` rect bounds if horizontally scrollable\n\n  function getDocumentRect(element) {\n    var _element$ownerDocumen;\n\n    var html = getDocumentElement(element);\n    var winScroll = getWindowScroll(element);\n    var body = (_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body;\n    var width = max(html.scrollWidth, html.clientWidth, body ? body.scrollWidth : 0, body ? body.clientWidth : 0);\n    var height = max(html.scrollHeight, html.clientHeight, body ? body.scrollHeight : 0, body ? body.clientHeight : 0);\n    var x = -winScroll.scrollLeft + getWindowScrollBarX(element);\n    var y = -winScroll.scrollTop;\n\n    if (getComputedStyle$1(body || html).direction === 'rtl') {\n      x += max(html.clientWidth, body ? body.clientWidth : 0) - width;\n    }\n\n    return {\n      width: width,\n      height: height,\n      x: x,\n      y: y\n    };\n  }\n\n  function isScrollParent(element) {\n    // Firefox wants us to check `-x` and `-y` variations as well\n    var _getComputedStyle = getComputedStyle$1(element),\n        overflow = _getComputedStyle.overflow,\n        overflowX = _getComputedStyle.overflowX,\n        overflowY = _getComputedStyle.overflowY;\n\n    return /auto|scroll|overlay|hidden/.test(overflow + overflowY + overflowX);\n  }\n\n  function getScrollParent(node) {\n    if (['html', 'body', '#document'].indexOf(getNodeName(node)) >= 0) {\n      // $FlowFixMe[incompatible-return]: assume body is always available\n      return node.ownerDocument.body;\n    }\n\n    if (isHTMLElement(node) && isScrollParent(node)) {\n      return node;\n    }\n\n    return getScrollParent(getParentNode(node));\n  }\n\n  /*\n  given a DOM element, return the list of all scroll parents, up the list of ancesors\n  until we get to the top window object. This list is what we attach scroll listeners\n  to, because if any of these parent elements scroll, we'll need to re-calculate the\n  reference element's position.\n  */\n\n  function listScrollParents(element, list) {\n    var _element$ownerDocumen;\n\n    if (list === void 0) {\n      list = [];\n    }\n\n    var scrollParent = getScrollParent(element);\n    var isBody = scrollParent === ((_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body);\n    var win = getWindow(scrollParent);\n    var target = isBody ? [win].concat(win.visualViewport || [], isScrollParent(scrollParent) ? scrollParent : []) : scrollParent;\n    var updatedList = list.concat(target);\n    return isBody ? updatedList : // $FlowFixMe[incompatible-call]: isBody tells us target will be an HTMLElement here\n    updatedList.concat(listScrollParents(getParentNode(target)));\n  }\n\n  function rectToClientRect(rect) {\n    return Object.assign({}, rect, {\n      left: rect.x,\n      top: rect.y,\n      right: rect.x + rect.width,\n      bottom: rect.y + rect.height\n    });\n  }\n\n  function getInnerBoundingClientRect(element) {\n    var rect = getBoundingClientRect(element);\n    rect.top = rect.top + element.clientTop;\n    rect.left = rect.left + element.clientLeft;\n    rect.bottom = rect.top + element.clientHeight;\n    rect.right = rect.left + element.clientWidth;\n    rect.width = element.clientWidth;\n    rect.height = element.clientHeight;\n    rect.x = rect.left;\n    rect.y = rect.top;\n    return rect;\n  }\n\n  function getClientRectFromMixedType(element, clippingParent) {\n    return clippingParent === viewport ? rectToClientRect(getViewportRect(element)) : isHTMLElement(clippingParent) ? getInnerBoundingClientRect(clippingParent) : rectToClientRect(getDocumentRect(getDocumentElement(element)));\n  } // A \"clipping parent\" is an overflowable container with the characteristic of\n  // clipping (or hiding) overflowing elements with a position different from\n  // `initial`\n\n\n  function getClippingParents(element) {\n    var clippingParents = listScrollParents(getParentNode(element));\n    var canEscapeClipping = ['absolute', 'fixed'].indexOf(getComputedStyle$1(element).position) >= 0;\n    var clipperElement = canEscapeClipping && isHTMLElement(element) ? getOffsetParent(element) : element;\n\n    if (!isElement(clipperElement)) {\n      return [];\n    } // $FlowFixMe[incompatible-return]: https://github.com/facebook/flow/issues/1414\n\n\n    return clippingParents.filter(function (clippingParent) {\n      return isElement(clippingParent) && contains(clippingParent, clipperElement) && getNodeName(clippingParent) !== 'body';\n    });\n  } // Gets the maximum area that the element is visible in due to any number of\n  // clipping parents\n\n\n  function getClippingRect(element, boundary, rootBoundary) {\n    var mainClippingParents = boundary === 'clippingParents' ? getClippingParents(element) : [].concat(boundary);\n    var clippingParents = [].concat(mainClippingParents, [rootBoundary]);\n    var firstClippingParent = clippingParents[0];\n    var clippingRect = clippingParents.reduce(function (accRect, clippingParent) {\n      var rect = getClientRectFromMixedType(element, clippingParent);\n      accRect.top = max(rect.top, accRect.top);\n      accRect.right = min(rect.right, accRect.right);\n      accRect.bottom = min(rect.bottom, accRect.bottom);\n      accRect.left = max(rect.left, accRect.left);\n      return accRect;\n    }, getClientRectFromMixedType(element, firstClippingParent));\n    clippingRect.width = clippingRect.right - clippingRect.left;\n    clippingRect.height = clippingRect.bottom - clippingRect.top;\n    clippingRect.x = clippingRect.left;\n    clippingRect.y = clippingRect.top;\n    return clippingRect;\n  }\n\n  function getVariation(placement) {\n    return placement.split('-')[1];\n  }\n\n  function computeOffsets(_ref) {\n    var reference = _ref.reference,\n        element = _ref.element,\n        placement = _ref.placement;\n    var basePlacement = placement ? getBasePlacement(placement) : null;\n    var variation = placement ? getVariation(placement) : null;\n    var commonX = reference.x + reference.width / 2 - element.width / 2;\n    var commonY = reference.y + reference.height / 2 - element.height / 2;\n    var offsets;\n\n    switch (basePlacement) {\n      case top:\n        offsets = {\n          x: commonX,\n          y: reference.y - element.height\n        };\n        break;\n\n      case bottom:\n        offsets = {\n          x: commonX,\n          y: reference.y + reference.height\n        };\n        break;\n\n      case right:\n        offsets = {\n          x: reference.x + reference.width,\n          y: commonY\n        };\n        break;\n\n      case left:\n        offsets = {\n          x: reference.x - element.width,\n          y: commonY\n        };\n        break;\n\n      default:\n        offsets = {\n          x: reference.x,\n          y: reference.y\n        };\n    }\n\n    var mainAxis = basePlacement ? getMainAxisFromPlacement(basePlacement) : null;\n\n    if (mainAxis != null) {\n      var len = mainAxis === 'y' ? 'height' : 'width';\n\n      switch (variation) {\n        case start:\n          offsets[mainAxis] = offsets[mainAxis] - (reference[len] / 2 - element[len] / 2);\n          break;\n\n        case end:\n          offsets[mainAxis] = offsets[mainAxis] + (reference[len] / 2 - element[len] / 2);\n          break;\n      }\n    }\n\n    return offsets;\n  }\n\n  function detectOverflow(state, options) {\n    if (options === void 0) {\n      options = {};\n    }\n\n    var _options = options,\n        _options$placement = _options.placement,\n        placement = _options$placement === void 0 ? state.placement : _options$placement,\n        _options$boundary = _options.boundary,\n        boundary = _options$boundary === void 0 ? clippingParents : _options$boundary,\n        _options$rootBoundary = _options.rootBoundary,\n        rootBoundary = _options$rootBoundary === void 0 ? viewport : _options$rootBoundary,\n        _options$elementConte = _options.elementContext,\n        elementContext = _options$elementConte === void 0 ? popper : _options$elementConte,\n        _options$altBoundary = _options.altBoundary,\n        altBoundary = _options$altBoundary === void 0 ? false : _options$altBoundary,\n        _options$padding = _options.padding,\n        padding = _options$padding === void 0 ? 0 : _options$padding;\n    var paddingObject = mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));\n    var altContext = elementContext === popper ? reference : popper;\n    var referenceElement = state.elements.reference;\n    var popperRect = state.rects.popper;\n    var element = state.elements[altBoundary ? altContext : elementContext];\n    var clippingClientRect = getClippingRect(isElement(element) ? element : element.contextElement || getDocumentElement(state.elements.popper), boundary, rootBoundary);\n    var referenceClientRect = getBoundingClientRect(referenceElement);\n    var popperOffsets = computeOffsets({\n      reference: referenceClientRect,\n      element: popperRect,\n      strategy: 'absolute',\n      placement: placement\n    });\n    var popperClientRect = rectToClientRect(Object.assign({}, popperRect, popperOffsets));\n    var elementClientRect = elementContext === popper ? popperClientRect : referenceClientRect; // positive = overflowing the clipping rect\n    // 0 or negative = within the clipping rect\n\n    var overflowOffsets = {\n      top: clippingClientRect.top - elementClientRect.top + paddingObject.top,\n      bottom: elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom,\n      left: clippingClientRect.left - elementClientRect.left + paddingObject.left,\n      right: elementClientRect.right - clippingClientRect.right + paddingObject.right\n    };\n    var offsetData = state.modifiersData.offset; // Offsets can be applied only to the popper element\n\n    if (elementContext === popper && offsetData) {\n      var offset = offsetData[placement];\n      Object.keys(overflowOffsets).forEach(function (key) {\n        var multiply = [right, bottom].indexOf(key) >= 0 ? 1 : -1;\n        var axis = [top, bottom].indexOf(key) >= 0 ? 'y' : 'x';\n        overflowOffsets[key] += offset[axis] * multiply;\n      });\n    }\n\n    return overflowOffsets;\n  }\n\n  function computeAutoPlacement(state, options) {\n    if (options === void 0) {\n      options = {};\n    }\n\n    var _options = options,\n        placement = _options.placement,\n        boundary = _options.boundary,\n        rootBoundary = _options.rootBoundary,\n        padding = _options.padding,\n        flipVariations = _options.flipVariations,\n        _options$allowedAutoP = _options.allowedAutoPlacements,\n        allowedAutoPlacements = _options$allowedAutoP === void 0 ? placements : _options$allowedAutoP;\n    var variation = getVariation(placement);\n    var placements$1 = variation ? flipVariations ? variationPlacements : variationPlacements.filter(function (placement) {\n      return getVariation(placement) === variation;\n    }) : basePlacements;\n    var allowedPlacements = placements$1.filter(function (placement) {\n      return allowedAutoPlacements.indexOf(placement) >= 0;\n    });\n\n    if (allowedPlacements.length === 0) {\n      allowedPlacements = placements$1;\n    } // $FlowFixMe[incompatible-type]: Flow seems to have problems with two array unions...\n\n\n    var overflows = allowedPlacements.reduce(function (acc, placement) {\n      acc[placement] = detectOverflow(state, {\n        placement: placement,\n        boundary: boundary,\n        rootBoundary: rootBoundary,\n        padding: padding\n      })[getBasePlacement(placement)];\n      return acc;\n    }, {});\n    return Object.keys(overflows).sort(function (a, b) {\n      return overflows[a] - overflows[b];\n    });\n  }\n\n  function getExpandedFallbackPlacements(placement) {\n    if (getBasePlacement(placement) === auto) {\n      return [];\n    }\n\n    var oppositePlacement = getOppositePlacement(placement);\n    return [getOppositeVariationPlacement(placement), oppositePlacement, getOppositeVariationPlacement(oppositePlacement)];\n  }\n\n  function flip(_ref) {\n    var state = _ref.state,\n        options = _ref.options,\n        name = _ref.name;\n\n    if (state.modifiersData[name]._skip) {\n      return;\n    }\n\n    var _options$mainAxis = options.mainAxis,\n        checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\n        _options$altAxis = options.altAxis,\n        checkAltAxis = _options$altAxis === void 0 ? true : _options$altAxis,\n        specifiedFallbackPlacements = options.fallbackPlacements,\n        padding = options.padding,\n        boundary = options.boundary,\n        rootBoundary = options.rootBoundary,\n        altBoundary = options.altBoundary,\n        _options$flipVariatio = options.flipVariations,\n        flipVariations = _options$flipVariatio === void 0 ? true : _options$flipVariatio,\n        allowedAutoPlacements = options.allowedAutoPlacements;\n    var preferredPlacement = state.options.placement;\n    var basePlacement = getBasePlacement(preferredPlacement);\n    var isBasePlacement = basePlacement === preferredPlacement;\n    var fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipVariations ? [getOppositePlacement(preferredPlacement)] : getExpandedFallbackPlacements(preferredPlacement));\n    var placements = [preferredPlacement].concat(fallbackPlacements).reduce(function (acc, placement) {\n      return acc.concat(getBasePlacement(placement) === auto ? computeAutoPlacement(state, {\n        placement: placement,\n        boundary: boundary,\n        rootBoundary: rootBoundary,\n        padding: padding,\n        flipVariations: flipVariations,\n        allowedAutoPlacements: allowedAutoPlacements\n      }) : placement);\n    }, []);\n    var referenceRect = state.rects.reference;\n    var popperRect = state.rects.popper;\n    var checksMap = new Map();\n    var makeFallbackChecks = true;\n    var firstFittingPlacement = placements[0];\n\n    for (var i = 0; i < placements.length; i++) {\n      var placement = placements[i];\n\n      var _basePlacement = getBasePlacement(placement);\n\n      var isStartVariation = getVariation(placement) === start;\n      var isVertical = [top, bottom].indexOf(_basePlacement) >= 0;\n      var len = isVertical ? 'width' : 'height';\n      var overflow = detectOverflow(state, {\n        placement: placement,\n        boundary: boundary,\n        rootBoundary: rootBoundary,\n        altBoundary: altBoundary,\n        padding: padding\n      });\n      var mainVariationSide = isVertical ? isStartVariation ? right : left : isStartVariation ? bottom : top;\n\n      if (referenceRect[len] > popperRect[len]) {\n        mainVariationSide = getOppositePlacement(mainVariationSide);\n      }\n\n      var altVariationSide = getOppositePlacement(mainVariationSide);\n      var checks = [];\n\n      if (checkMainAxis) {\n        checks.push(overflow[_basePlacement] <= 0);\n      }\n\n      if (checkAltAxis) {\n        checks.push(overflow[mainVariationSide] <= 0, overflow[altVariationSide] <= 0);\n      }\n\n      if (checks.every(function (check) {\n        return check;\n      })) {\n        firstFittingPlacement = placement;\n        makeFallbackChecks = false;\n        break;\n      }\n\n      checksMap.set(placement, checks);\n    }\n\n    if (makeFallbackChecks) {\n      // `2` may be desired in some cases – research later\n      var numberOfChecks = flipVariations ? 3 : 1;\n\n      var _loop = function _loop(_i) {\n        var fittingPlacement = placements.find(function (placement) {\n          var checks = checksMap.get(placement);\n\n          if (checks) {\n            return checks.slice(0, _i).every(function (check) {\n              return check;\n            });\n          }\n        });\n\n        if (fittingPlacement) {\n          firstFittingPlacement = fittingPlacement;\n          return \"break\";\n        }\n      };\n\n      for (var _i = numberOfChecks; _i > 0; _i--) {\n        var _ret = _loop(_i);\n\n        if (_ret === \"break\") break;\n      }\n    }\n\n    if (state.placement !== firstFittingPlacement) {\n      state.modifiersData[name]._skip = true;\n      state.placement = firstFittingPlacement;\n      state.reset = true;\n    }\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  var flip$1 = {\n    name: 'flip',\n    enabled: true,\n    phase: 'main',\n    fn: flip,\n    requiresIfExists: ['offset'],\n    data: {\n      _skip: false\n    }\n  };\n\n  function getSideOffsets(overflow, rect, preventedOffsets) {\n    if (preventedOffsets === void 0) {\n      preventedOffsets = {\n        x: 0,\n        y: 0\n      };\n    }\n\n    return {\n      top: overflow.top - rect.height - preventedOffsets.y,\n      right: overflow.right - rect.width + preventedOffsets.x,\n      bottom: overflow.bottom - rect.height + preventedOffsets.y,\n      left: overflow.left - rect.width - preventedOffsets.x\n    };\n  }\n\n  function isAnySideFullyClipped(overflow) {\n    return [top, right, bottom, left].some(function (side) {\n      return overflow[side] >= 0;\n    });\n  }\n\n  function hide(_ref) {\n    var state = _ref.state,\n        name = _ref.name;\n    var referenceRect = state.rects.reference;\n    var popperRect = state.rects.popper;\n    var preventedOffsets = state.modifiersData.preventOverflow;\n    var referenceOverflow = detectOverflow(state, {\n      elementContext: 'reference'\n    });\n    var popperAltOverflow = detectOverflow(state, {\n      altBoundary: true\n    });\n    var referenceClippingOffsets = getSideOffsets(referenceOverflow, referenceRect);\n    var popperEscapeOffsets = getSideOffsets(popperAltOverflow, popperRect, preventedOffsets);\n    var isReferenceHidden = isAnySideFullyClipped(referenceClippingOffsets);\n    var hasPopperEscaped = isAnySideFullyClipped(popperEscapeOffsets);\n    state.modifiersData[name] = {\n      referenceClippingOffsets: referenceClippingOffsets,\n      popperEscapeOffsets: popperEscapeOffsets,\n      isReferenceHidden: isReferenceHidden,\n      hasPopperEscaped: hasPopperEscaped\n    };\n    state.attributes.popper = Object.assign({}, state.attributes.popper, {\n      'data-popper-reference-hidden': isReferenceHidden,\n      'data-popper-escaped': hasPopperEscaped\n    });\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  var hide$1 = {\n    name: 'hide',\n    enabled: true,\n    phase: 'main',\n    requiresIfExists: ['preventOverflow'],\n    fn: hide\n  };\n\n  function distanceAndSkiddingToXY(placement, rects, offset) {\n    var basePlacement = getBasePlacement(placement);\n    var invertDistance = [left, top].indexOf(basePlacement) >= 0 ? -1 : 1;\n\n    var _ref = typeof offset === 'function' ? offset(Object.assign({}, rects, {\n      placement: placement\n    })) : offset,\n        skidding = _ref[0],\n        distance = _ref[1];\n\n    skidding = skidding || 0;\n    distance = (distance || 0) * invertDistance;\n    return [left, right].indexOf(basePlacement) >= 0 ? {\n      x: distance,\n      y: skidding\n    } : {\n      x: skidding,\n      y: distance\n    };\n  }\n\n  function offset(_ref2) {\n    var state = _ref2.state,\n        options = _ref2.options,\n        name = _ref2.name;\n    var _options$offset = options.offset,\n        offset = _options$offset === void 0 ? [0, 0] : _options$offset;\n    var data = placements.reduce(function (acc, placement) {\n      acc[placement] = distanceAndSkiddingToXY(placement, state.rects, offset);\n      return acc;\n    }, {});\n    var _data$state$placement = data[state.placement],\n        x = _data$state$placement.x,\n        y = _data$state$placement.y;\n\n    if (state.modifiersData.popperOffsets != null) {\n      state.modifiersData.popperOffsets.x += x;\n      state.modifiersData.popperOffsets.y += y;\n    }\n\n    state.modifiersData[name] = data;\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  var offset$1 = {\n    name: 'offset',\n    enabled: true,\n    phase: 'main',\n    requires: ['popperOffsets'],\n    fn: offset\n  };\n\n  function popperOffsets(_ref) {\n    var state = _ref.state,\n        name = _ref.name;\n    // Offsets are the actual position the popper needs to have to be\n    // properly positioned near its reference element\n    // This is the most basic placement, and will be adjusted by\n    // the modifiers in the next step\n    state.modifiersData[name] = computeOffsets({\n      reference: state.rects.reference,\n      element: state.rects.popper,\n      strategy: 'absolute',\n      placement: state.placement\n    });\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  var popperOffsets$1 = {\n    name: 'popperOffsets',\n    enabled: true,\n    phase: 'read',\n    fn: popperOffsets,\n    data: {}\n  };\n\n  function getAltAxis(axis) {\n    return axis === 'x' ? 'y' : 'x';\n  }\n\n  function preventOverflow(_ref) {\n    var state = _ref.state,\n        options = _ref.options,\n        name = _ref.name;\n    var _options$mainAxis = options.mainAxis,\n        checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\n        _options$altAxis = options.altAxis,\n        checkAltAxis = _options$altAxis === void 0 ? false : _options$altAxis,\n        boundary = options.boundary,\n        rootBoundary = options.rootBoundary,\n        altBoundary = options.altBoundary,\n        padding = options.padding,\n        _options$tether = options.tether,\n        tether = _options$tether === void 0 ? true : _options$tether,\n        _options$tetherOffset = options.tetherOffset,\n        tetherOffset = _options$tetherOffset === void 0 ? 0 : _options$tetherOffset;\n    var overflow = detectOverflow(state, {\n      boundary: boundary,\n      rootBoundary: rootBoundary,\n      padding: padding,\n      altBoundary: altBoundary\n    });\n    var basePlacement = getBasePlacement(state.placement);\n    var variation = getVariation(state.placement);\n    var isBasePlacement = !variation;\n    var mainAxis = getMainAxisFromPlacement(basePlacement);\n    var altAxis = getAltAxis(mainAxis);\n    var popperOffsets = state.modifiersData.popperOffsets;\n    var referenceRect = state.rects.reference;\n    var popperRect = state.rects.popper;\n    var tetherOffsetValue = typeof tetherOffset === 'function' ? tetherOffset(Object.assign({}, state.rects, {\n      placement: state.placement\n    })) : tetherOffset;\n    var data = {\n      x: 0,\n      y: 0\n    };\n\n    if (!popperOffsets) {\n      return;\n    }\n\n    if (checkMainAxis || checkAltAxis) {\n      var mainSide = mainAxis === 'y' ? top : left;\n      var altSide = mainAxis === 'y' ? bottom : right;\n      var len = mainAxis === 'y' ? 'height' : 'width';\n      var offset = popperOffsets[mainAxis];\n      var min$1 = popperOffsets[mainAxis] + overflow[mainSide];\n      var max$1 = popperOffsets[mainAxis] - overflow[altSide];\n      var additive = tether ? -popperRect[len] / 2 : 0;\n      var minLen = variation === start ? referenceRect[len] : popperRect[len];\n      var maxLen = variation === start ? -popperRect[len] : -referenceRect[len]; // We need to include the arrow in the calculation so the arrow doesn't go\n      // outside the reference bounds\n\n      var arrowElement = state.elements.arrow;\n      var arrowRect = tether && arrowElement ? getLayoutRect(arrowElement) : {\n        width: 0,\n        height: 0\n      };\n      var arrowPaddingObject = state.modifiersData['arrow#persistent'] ? state.modifiersData['arrow#persistent'].padding : getFreshSideObject();\n      var arrowPaddingMin = arrowPaddingObject[mainSide];\n      var arrowPaddingMax = arrowPaddingObject[altSide]; // If the reference length is smaller than the arrow length, we don't want\n      // to include its full size in the calculation. If the reference is small\n      // and near the edge of a boundary, the popper can overflow even if the\n      // reference is not overflowing as well (e.g. virtual elements with no\n      // width or height)\n\n      var arrowLen = within(0, referenceRect[len], arrowRect[len]);\n      var minOffset = isBasePlacement ? referenceRect[len] / 2 - additive - arrowLen - arrowPaddingMin - tetherOffsetValue : minLen - arrowLen - arrowPaddingMin - tetherOffsetValue;\n      var maxOffset = isBasePlacement ? -referenceRect[len] / 2 + additive + arrowLen + arrowPaddingMax + tetherOffsetValue : maxLen + arrowLen + arrowPaddingMax + tetherOffsetValue;\n      var arrowOffsetParent = state.elements.arrow && getOffsetParent(state.elements.arrow);\n      var clientOffset = arrowOffsetParent ? mainAxis === 'y' ? arrowOffsetParent.clientTop || 0 : arrowOffsetParent.clientLeft || 0 : 0;\n      var offsetModifierValue = state.modifiersData.offset ? state.modifiersData.offset[state.placement][mainAxis] : 0;\n      var tetherMin = popperOffsets[mainAxis] + minOffset - offsetModifierValue - clientOffset;\n      var tetherMax = popperOffsets[mainAxis] + maxOffset - offsetModifierValue;\n\n      if (checkMainAxis) {\n        var preventedOffset = within(tether ? min(min$1, tetherMin) : min$1, offset, tether ? max(max$1, tetherMax) : max$1);\n        popperOffsets[mainAxis] = preventedOffset;\n        data[mainAxis] = preventedOffset - offset;\n      }\n\n      if (checkAltAxis) {\n        var _mainSide = mainAxis === 'x' ? top : left;\n\n        var _altSide = mainAxis === 'x' ? bottom : right;\n\n        var _offset = popperOffsets[altAxis];\n\n        var _min = _offset + overflow[_mainSide];\n\n        var _max = _offset - overflow[_altSide];\n\n        var _preventedOffset = within(tether ? min(_min, tetherMin) : _min, _offset, tether ? max(_max, tetherMax) : _max);\n\n        popperOffsets[altAxis] = _preventedOffset;\n        data[altAxis] = _preventedOffset - _offset;\n      }\n    }\n\n    state.modifiersData[name] = data;\n  } // eslint-disable-next-line import/no-unused-modules\n\n\n  var preventOverflow$1 = {\n    name: 'preventOverflow',\n    enabled: true,\n    phase: 'main',\n    fn: preventOverflow,\n    requiresIfExists: ['offset']\n  };\n\n  function getHTMLElementScroll(element) {\n    return {\n      scrollLeft: element.scrollLeft,\n      scrollTop: element.scrollTop\n    };\n  }\n\n  function getNodeScroll(node) {\n    if (node === getWindow(node) || !isHTMLElement(node)) {\n      return getWindowScroll(node);\n    } else {\n      return getHTMLElementScroll(node);\n    }\n  }\n\n  // Composite means it takes into account transforms as well as layout.\n\n  function getCompositeRect(elementOrVirtualElement, offsetParent, isFixed) {\n    if (isFixed === void 0) {\n      isFixed = false;\n    }\n\n    var documentElement = getDocumentElement(offsetParent);\n    var rect = getBoundingClientRect(elementOrVirtualElement);\n    var isOffsetParentAnElement = isHTMLElement(offsetParent);\n    var scroll = {\n      scrollLeft: 0,\n      scrollTop: 0\n    };\n    var offsets = {\n      x: 0,\n      y: 0\n    };\n\n    if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {\n      if (getNodeName(offsetParent) !== 'body' || // https://github.com/popperjs/popper-core/issues/1078\n      isScrollParent(documentElement)) {\n        scroll = getNodeScroll(offsetParent);\n      }\n\n      if (isHTMLElement(offsetParent)) {\n        offsets = getBoundingClientRect(offsetParent);\n        offsets.x += offsetParent.clientLeft;\n        offsets.y += offsetParent.clientTop;\n      } else if (documentElement) {\n        offsets.x = getWindowScrollBarX(documentElement);\n      }\n    }\n\n    return {\n      x: rect.left + scroll.scrollLeft - offsets.x,\n      y: rect.top + scroll.scrollTop - offsets.y,\n      width: rect.width,\n      height: rect.height\n    };\n  }\n\n  function order(modifiers) {\n    var map = new Map();\n    var visited = new Set();\n    var result = [];\n    modifiers.forEach(function (modifier) {\n      map.set(modifier.name, modifier);\n    }); // On visiting object, check for its dependencies and visit them recursively\n\n    function sort(modifier) {\n      visited.add(modifier.name);\n      var requires = [].concat(modifier.requires || [], modifier.requiresIfExists || []);\n      requires.forEach(function (dep) {\n        if (!visited.has(dep)) {\n          var depModifier = map.get(dep);\n\n          if (depModifier) {\n            sort(depModifier);\n          }\n        }\n      });\n      result.push(modifier);\n    }\n\n    modifiers.forEach(function (modifier) {\n      if (!visited.has(modifier.name)) {\n        // check for visited object\n        sort(modifier);\n      }\n    });\n    return result;\n  }\n\n  function orderModifiers(modifiers) {\n    // order based on dependencies\n    var orderedModifiers = order(modifiers); // order based on phase\n\n    return modifierPhases.reduce(function (acc, phase) {\n      return acc.concat(orderedModifiers.filter(function (modifier) {\n        return modifier.phase === phase;\n      }));\n    }, []);\n  }\n\n  function debounce(fn) {\n    var pending;\n    return function () {\n      if (!pending) {\n        pending = new Promise(function (resolve) {\n          Promise.resolve().then(function () {\n            pending = undefined;\n            resolve(fn());\n          });\n        });\n      }\n\n      return pending;\n    };\n  }\n\n  function mergeByName(modifiers) {\n    var merged = modifiers.reduce(function (merged, current) {\n      var existing = merged[current.name];\n      merged[current.name] = existing ? Object.assign({}, existing, current, {\n        options: Object.assign({}, existing.options, current.options),\n        data: Object.assign({}, existing.data, current.data)\n      }) : current;\n      return merged;\n    }, {}); // IE11 does not support Object.values\n\n    return Object.keys(merged).map(function (key) {\n      return merged[key];\n    });\n  }\n\n  var DEFAULT_OPTIONS = {\n    placement: 'bottom',\n    modifiers: [],\n    strategy: 'absolute'\n  };\n\n  function areValidElements() {\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    return !args.some(function (element) {\n      return !(element && typeof element.getBoundingClientRect === 'function');\n    });\n  }\n\n  function popperGenerator(generatorOptions) {\n    if (generatorOptions === void 0) {\n      generatorOptions = {};\n    }\n\n    var _generatorOptions = generatorOptions,\n        _generatorOptions$def = _generatorOptions.defaultModifiers,\n        defaultModifiers = _generatorOptions$def === void 0 ? [] : _generatorOptions$def,\n        _generatorOptions$def2 = _generatorOptions.defaultOptions,\n        defaultOptions = _generatorOptions$def2 === void 0 ? DEFAULT_OPTIONS : _generatorOptions$def2;\n    return function createPopper(reference, popper, options) {\n      if (options === void 0) {\n        options = defaultOptions;\n      }\n\n      var state = {\n        placement: 'bottom',\n        orderedModifiers: [],\n        options: Object.assign({}, DEFAULT_OPTIONS, defaultOptions),\n        modifiersData: {},\n        elements: {\n          reference: reference,\n          popper: popper\n        },\n        attributes: {},\n        styles: {}\n      };\n      var effectCleanupFns = [];\n      var isDestroyed = false;\n      var instance = {\n        state: state,\n        setOptions: function setOptions(options) {\n          cleanupModifierEffects();\n          state.options = Object.assign({}, defaultOptions, state.options, options);\n          state.scrollParents = {\n            reference: isElement(reference) ? listScrollParents(reference) : reference.contextElement ? listScrollParents(reference.contextElement) : [],\n            popper: listScrollParents(popper)\n          }; // Orders the modifiers based on their dependencies and `phase`\n          // properties\n\n          var orderedModifiers = orderModifiers(mergeByName([].concat(defaultModifiers, state.options.modifiers))); // Strip out disabled modifiers\n\n          state.orderedModifiers = orderedModifiers.filter(function (m) {\n            return m.enabled;\n          }); // Validate the provided modifiers so that the consumer will get warned\n\n          runModifierEffects();\n          return instance.update();\n        },\n        // Sync update – it will always be executed, even if not necessary. This\n        // is useful for low frequency updates where sync behavior simplifies the\n        // logic.\n        // For high frequency updates (e.g. `resize` and `scroll` events), always\n        // prefer the async Popper#update method\n        forceUpdate: function forceUpdate() {\n          if (isDestroyed) {\n            return;\n          }\n\n          var _state$elements = state.elements,\n              reference = _state$elements.reference,\n              popper = _state$elements.popper; // Don't proceed if `reference` or `popper` are not valid elements\n          // anymore\n\n          if (!areValidElements(reference, popper)) {\n\n            return;\n          } // Store the reference and popper rects to be read by modifiers\n\n\n          state.rects = {\n            reference: getCompositeRect(reference, getOffsetParent(popper), state.options.strategy === 'fixed'),\n            popper: getLayoutRect(popper)\n          }; // Modifiers have the ability to reset the current update cycle. The\n          // most common use case for this is the `flip` modifier changing the\n          // placement, which then needs to re-run all the modifiers, because the\n          // logic was previously ran for the previous placement and is therefore\n          // stale/incorrect\n\n          state.reset = false;\n          state.placement = state.options.placement; // On each update cycle, the `modifiersData` property for each modifier\n          // is filled with the initial data specified by the modifier. This means\n          // it doesn't persist and is fresh on each update.\n          // To ensure persistent data, use `${name}#persistent`\n\n          state.orderedModifiers.forEach(function (modifier) {\n            return state.modifiersData[modifier.name] = Object.assign({}, modifier.data);\n          });\n\n          for (var index = 0; index < state.orderedModifiers.length; index++) {\n\n            if (state.reset === true) {\n              state.reset = false;\n              index = -1;\n              continue;\n            }\n\n            var _state$orderedModifie = state.orderedModifiers[index],\n                fn = _state$orderedModifie.fn,\n                _state$orderedModifie2 = _state$orderedModifie.options,\n                _options = _state$orderedModifie2 === void 0 ? {} : _state$orderedModifie2,\n                name = _state$orderedModifie.name;\n\n            if (typeof fn === 'function') {\n              state = fn({\n                state: state,\n                options: _options,\n                name: name,\n                instance: instance\n              }) || state;\n            }\n          }\n        },\n        // Async and optimistically optimized update – it will not be executed if\n        // not necessary (debounced to run at most once-per-tick)\n        update: debounce(function () {\n          return new Promise(function (resolve) {\n            instance.forceUpdate();\n            resolve(state);\n          });\n        }),\n        destroy: function destroy() {\n          cleanupModifierEffects();\n          isDestroyed = true;\n        }\n      };\n\n      if (!areValidElements(reference, popper)) {\n\n        return instance;\n      }\n\n      instance.setOptions(options).then(function (state) {\n        if (!isDestroyed && options.onFirstUpdate) {\n          options.onFirstUpdate(state);\n        }\n      }); // Modifiers have the ability to execute arbitrary code before the first\n      // update cycle runs. They will be executed in the same order as the update\n      // cycle. This is useful when a modifier adds some persistent data that\n      // other modifiers need to use, but the modifier is run after the dependent\n      // one.\n\n      function runModifierEffects() {\n        state.orderedModifiers.forEach(function (_ref3) {\n          var name = _ref3.name,\n              _ref3$options = _ref3.options,\n              options = _ref3$options === void 0 ? {} : _ref3$options,\n              effect = _ref3.effect;\n\n          if (typeof effect === 'function') {\n            var cleanupFn = effect({\n              state: state,\n              name: name,\n              instance: instance,\n              options: options\n            });\n\n            var noopFn = function noopFn() {};\n\n            effectCleanupFns.push(cleanupFn || noopFn);\n          }\n        });\n      }\n\n      function cleanupModifierEffects() {\n        effectCleanupFns.forEach(function (fn) {\n          return fn();\n        });\n        effectCleanupFns = [];\n      }\n\n      return instance;\n    };\n  }\n  var createPopper$2 = /*#__PURE__*/popperGenerator(); // eslint-disable-next-line import/no-unused-modules\n\n  var defaultModifiers$1 = [eventListeners, popperOffsets$1, computeStyles$1, applyStyles$1];\n  var createPopper$1 = /*#__PURE__*/popperGenerator({\n    defaultModifiers: defaultModifiers$1\n  }); // eslint-disable-next-line import/no-unused-modules\n\n  var defaultModifiers = [eventListeners, popperOffsets$1, computeStyles$1, applyStyles$1, offset$1, flip$1, preventOverflow$1, arrow$1, hide$1];\n  var createPopper = /*#__PURE__*/popperGenerator({\n    defaultModifiers: defaultModifiers\n  }); // eslint-disable-next-line import/no-unused-modules\n\n  var Popper = /*#__PURE__*/Object.freeze({\n    __proto__: null,\n    popperGenerator: popperGenerator,\n    detectOverflow: detectOverflow,\n    createPopperBase: createPopper$2,\n    createPopper: createPopper,\n    createPopperLite: createPopper$1,\n    top: top,\n    bottom: bottom,\n    right: right,\n    left: left,\n    auto: auto,\n    basePlacements: basePlacements,\n    start: start,\n    end: end,\n    clippingParents: clippingParents,\n    viewport: viewport,\n    popper: popper,\n    reference: reference,\n    variationPlacements: variationPlacements,\n    placements: placements,\n    beforeRead: beforeRead,\n    read: read,\n    afterRead: afterRead,\n    beforeMain: beforeMain,\n    main: main,\n    afterMain: afterMain,\n    beforeWrite: beforeWrite,\n    write: write,\n    afterWrite: afterWrite,\n    modifierPhases: modifierPhases,\n    applyStyles: applyStyles$1,\n    arrow: arrow$1,\n    computeStyles: computeStyles$1,\n    eventListeners: eventListeners,\n    flip: flip$1,\n    hide: hide$1,\n    offset: offset$1,\n    popperOffsets: popperOffsets$1,\n    preventOverflow: preventOverflow$1\n  });\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): dropdown.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$8 = 'dropdown';\n  const DATA_KEY$7 = 'bs.dropdown';\n  const EVENT_KEY$7 = `.${DATA_KEY$7}`;\n  const DATA_API_KEY$4 = '.data-api';\n  const ESCAPE_KEY$2 = 'Escape';\n  const SPACE_KEY = 'Space';\n  const TAB_KEY = 'Tab';\n  const ARROW_UP_KEY = 'ArrowUp';\n  const ARROW_DOWN_KEY = 'ArrowDown';\n  const RIGHT_MOUSE_BUTTON = 2; // MouseEvent.button value for the secondary button, usually the right button\n\n  const REGEXP_KEYDOWN = new RegExp(`${ARROW_UP_KEY}|${ARROW_DOWN_KEY}|${ESCAPE_KEY$2}`);\n  const EVENT_HIDE$4 = `hide${EVENT_KEY$7}`;\n  const EVENT_HIDDEN$4 = `hidden${EVENT_KEY$7}`;\n  const EVENT_SHOW$4 = `show${EVENT_KEY$7}`;\n  const EVENT_SHOWN$4 = `shown${EVENT_KEY$7}`;\n  const EVENT_CLICK = `click${EVENT_KEY$7}`;\n  const EVENT_CLICK_DATA_API$3 = `click${EVENT_KEY$7}${DATA_API_KEY$4}`;\n  const EVENT_KEYDOWN_DATA_API = `keydown${EVENT_KEY$7}${DATA_API_KEY$4}`;\n  const EVENT_KEYUP_DATA_API = `keyup${EVENT_KEY$7}${DATA_API_KEY$4}`;\n  const CLASS_NAME_SHOW$7 = 'show';\n  const CLASS_NAME_DROPUP = 'dropup';\n  const CLASS_NAME_DROPEND = 'dropend';\n  const CLASS_NAME_DROPSTART = 'dropstart';\n  const CLASS_NAME_NAVBAR = 'navbar';\n  const SELECTOR_DATA_TOGGLE$3 = '[data-bs-toggle=\"dropdown\"]';\n  const SELECTOR_MENU = '.dropdown-menu';\n  const SELECTOR_NAVBAR_NAV = '.navbar-nav';\n  const SELECTOR_VISIBLE_ITEMS = '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)';\n  const PLACEMENT_TOP = isRTL() ? 'top-end' : 'top-start';\n  const PLACEMENT_TOPEND = isRTL() ? 'top-start' : 'top-end';\n  const PLACEMENT_BOTTOM = isRTL() ? 'bottom-end' : 'bottom-start';\n  const PLACEMENT_BOTTOMEND = isRTL() ? 'bottom-start' : 'bottom-end';\n  const PLACEMENT_RIGHT = isRTL() ? 'left-start' : 'right-start';\n  const PLACEMENT_LEFT = isRTL() ? 'right-start' : 'left-start';\n  const Default$7 = {\n    offset: [0, 2],\n    boundary: 'clippingParents',\n    reference: 'toggle',\n    display: 'dynamic',\n    popperConfig: null,\n    autoClose: true\n  };\n  const DefaultType$7 = {\n    offset: '(array|string|function)',\n    boundary: '(string|element)',\n    reference: '(string|element|object)',\n    display: 'string',\n    popperConfig: '(null|object|function)',\n    autoClose: '(boolean|string)'\n  };\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Dropdown extends BaseComponent {\n    constructor(element, config) {\n      super(element);\n      this._popper = null;\n      this._config = this._getConfig(config);\n      this._menu = this._getMenuElement();\n      this._inNavbar = this._detectNavbar();\n\n      this._addEventListeners();\n    } // Getters\n\n\n    static get Default() {\n      return Default$7;\n    }\n\n    static get DefaultType() {\n      return DefaultType$7;\n    }\n\n    static get NAME() {\n      return NAME$8;\n    } // Public\n\n\n    toggle() {\n      if (isDisabled(this._element)) {\n        return;\n      }\n\n      const isActive = this._element.classList.contains(CLASS_NAME_SHOW$7);\n\n      if (isActive) {\n        this.hide();\n        return;\n      }\n\n      this.show();\n    }\n\n    show() {\n      if (isDisabled(this._element) || this._menu.classList.contains(CLASS_NAME_SHOW$7)) {\n        return;\n      }\n\n      const parent = Dropdown.getParentFromElement(this._element);\n      const relatedTarget = {\n        relatedTarget: this._element\n      };\n      const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$4, relatedTarget);\n\n      if (showEvent.defaultPrevented) {\n        return;\n      } // Totally disable Popper for Dropdowns in Navbar\n\n\n      if (this._inNavbar) {\n        Manipulator.setDataAttribute(this._menu, 'popper', 'none');\n      } else {\n        if (typeof Popper === 'undefined') {\n          throw new TypeError('Bootstrap\\'s dropdowns require Popper (https://popper.js.org)');\n        }\n\n        let referenceElement = this._element;\n\n        if (this._config.reference === 'parent') {\n          referenceElement = parent;\n        } else if (isElement$1(this._config.reference)) {\n          referenceElement = getElement(this._config.reference);\n        } else if (typeof this._config.reference === 'object') {\n          referenceElement = this._config.reference;\n        }\n\n        const popperConfig = this._getPopperConfig();\n\n        const isDisplayStatic = popperConfig.modifiers.find(modifier => modifier.name === 'applyStyles' && modifier.enabled === false);\n        this._popper = createPopper(referenceElement, this._menu, popperConfig);\n\n        if (isDisplayStatic) {\n          Manipulator.setDataAttribute(this._menu, 'popper', 'static');\n        }\n      } // If this is a touch-enabled device we add extra\n      // empty mouseover listeners to the body's immediate children;\n      // only needed because of broken event delegation on iOS\n      // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n\n\n      if ('ontouchstart' in document.documentElement && !parent.closest(SELECTOR_NAVBAR_NAV)) {\n        [].concat(...document.body.children).forEach(elem => EventHandler.on(elem, 'mouseover', noop));\n      }\n\n      this._element.focus();\n\n      this._element.setAttribute('aria-expanded', true);\n\n      this._menu.classList.toggle(CLASS_NAME_SHOW$7);\n\n      this._element.classList.toggle(CLASS_NAME_SHOW$7);\n\n      EventHandler.trigger(this._element, EVENT_SHOWN$4, relatedTarget);\n    }\n\n    hide() {\n      if (isDisabled(this._element) || !this._menu.classList.contains(CLASS_NAME_SHOW$7)) {\n        return;\n      }\n\n      const relatedTarget = {\n        relatedTarget: this._element\n      };\n\n      this._completeHide(relatedTarget);\n    }\n\n    dispose() {\n      if (this._popper) {\n        this._popper.destroy();\n      }\n\n      super.dispose();\n    }\n\n    update() {\n      this._inNavbar = this._detectNavbar();\n\n      if (this._popper) {\n        this._popper.update();\n      }\n    } // Private\n\n\n    _addEventListeners() {\n      EventHandler.on(this._element, EVENT_CLICK, event => {\n        event.preventDefault();\n        this.toggle();\n      });\n    }\n\n    _completeHide(relatedTarget) {\n      const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$4, relatedTarget);\n\n      if (hideEvent.defaultPrevented) {\n        return;\n      } // If this is a touch-enabled device we remove the extra\n      // empty mouseover listeners we added for iOS support\n\n\n      if ('ontouchstart' in document.documentElement) {\n        [].concat(...document.body.children).forEach(elem => EventHandler.off(elem, 'mouseover', noop));\n      }\n\n      if (this._popper) {\n        this._popper.destroy();\n      }\n\n      this._menu.classList.remove(CLASS_NAME_SHOW$7);\n\n      this._element.classList.remove(CLASS_NAME_SHOW$7);\n\n      this._element.setAttribute('aria-expanded', 'false');\n\n      Manipulator.removeDataAttribute(this._menu, 'popper');\n      EventHandler.trigger(this._element, EVENT_HIDDEN$4, relatedTarget);\n    }\n\n    _getConfig(config) {\n      config = { ...this.constructor.Default,\n        ...Manipulator.getDataAttributes(this._element),\n        ...config\n      };\n      typeCheckConfig(NAME$8, config, this.constructor.DefaultType);\n\n      if (typeof config.reference === 'object' && !isElement$1(config.reference) && typeof config.reference.getBoundingClientRect !== 'function') {\n        // Popper virtual elements require a getBoundingClientRect method\n        throw new TypeError(`${NAME$8.toUpperCase()}: Option \"reference\" provided type \"object\" without a required \"getBoundingClientRect\" method.`);\n      }\n\n      return config;\n    }\n\n    _getMenuElement() {\n      return SelectorEngine.next(this._element, SELECTOR_MENU)[0];\n    }\n\n    _getPlacement() {\n      const parentDropdown = this._element.parentNode;\n\n      if (parentDropdown.classList.contains(CLASS_NAME_DROPEND)) {\n        return PLACEMENT_RIGHT;\n      }\n\n      if (parentDropdown.classList.contains(CLASS_NAME_DROPSTART)) {\n        return PLACEMENT_LEFT;\n      } // We need to trim the value because custom properties can also include spaces\n\n\n      const isEnd = getComputedStyle(this._menu).getPropertyValue('--bs-position').trim() === 'end';\n\n      if (parentDropdown.classList.contains(CLASS_NAME_DROPUP)) {\n        return isEnd ? PLACEMENT_TOPEND : PLACEMENT_TOP;\n      }\n\n      return isEnd ? PLACEMENT_BOTTOMEND : PLACEMENT_BOTTOM;\n    }\n\n    _detectNavbar() {\n      return this._element.closest(`.${CLASS_NAME_NAVBAR}`) !== null;\n    }\n\n    _getOffset() {\n      const {\n        offset\n      } = this._config;\n\n      if (typeof offset === 'string') {\n        return offset.split(',').map(val => Number.parseInt(val, 10));\n      }\n\n      if (typeof offset === 'function') {\n        return popperData => offset(popperData, this._element);\n      }\n\n      return offset;\n    }\n\n    _getPopperConfig() {\n      const defaultBsPopperConfig = {\n        placement: this._getPlacement(),\n        modifiers: [{\n          name: 'preventOverflow',\n          options: {\n            boundary: this._config.boundary\n          }\n        }, {\n          name: 'offset',\n          options: {\n            offset: this._getOffset()\n          }\n        }]\n      }; // Disable Popper if we have a static display\n\n      if (this._config.display === 'static') {\n        defaultBsPopperConfig.modifiers = [{\n          name: 'applyStyles',\n          enabled: false\n        }];\n      }\n\n      return { ...defaultBsPopperConfig,\n        ...(typeof this._config.popperConfig === 'function' ? this._config.popperConfig(defaultBsPopperConfig) : this._config.popperConfig)\n      };\n    }\n\n    _selectMenuItem({\n      key,\n      target\n    }) {\n      const items = SelectorEngine.find(SELECTOR_VISIBLE_ITEMS, this._menu).filter(isVisible);\n\n      if (!items.length) {\n        return;\n      } // if target isn't included in items (e.g. when expanding the dropdown)\n      // allow cycling to get the last item in case key equals ARROW_UP_KEY\n\n\n      getNextActiveElement(items, target, key === ARROW_DOWN_KEY, !items.includes(target)).focus();\n    } // Static\n\n\n    static dropdownInterface(element, config) {\n      const data = Dropdown.getOrCreateInstance(element, config);\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config]();\n      }\n    }\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        Dropdown.dropdownInterface(this, config);\n      });\n    }\n\n    static clearMenus(event) {\n      if (event && (event.button === RIGHT_MOUSE_BUTTON || event.type === 'keyup' && event.key !== TAB_KEY)) {\n        return;\n      }\n\n      const toggles = SelectorEngine.find(SELECTOR_DATA_TOGGLE$3);\n\n      for (let i = 0, len = toggles.length; i < len; i++) {\n        const context = Dropdown.getInstance(toggles[i]);\n\n        if (!context || context._config.autoClose === false) {\n          continue;\n        }\n\n        if (!context._element.classList.contains(CLASS_NAME_SHOW$7)) {\n          continue;\n        }\n\n        const relatedTarget = {\n          relatedTarget: context._element\n        };\n\n        if (event) {\n          const composedPath = event.composedPath();\n          const isMenuTarget = composedPath.includes(context._menu);\n\n          if (composedPath.includes(context._element) || context._config.autoClose === 'inside' && !isMenuTarget || context._config.autoClose === 'outside' && isMenuTarget) {\n            continue;\n          } // Tab navigation through the dropdown menu or events from contained inputs shouldn't close the menu\n\n\n          if (context._menu.contains(event.target) && (event.type === 'keyup' && event.key === TAB_KEY || /input|select|option|textarea|form/i.test(event.target.tagName))) {\n            continue;\n          }\n\n          if (event.type === 'click') {\n            relatedTarget.clickEvent = event;\n          }\n        }\n\n        context._completeHide(relatedTarget);\n      }\n    }\n\n    static getParentFromElement(element) {\n      return getElementFromSelector(element) || element.parentNode;\n    }\n\n    static dataApiKeydownHandler(event) {\n      // If not input/textarea:\n      //  - And not a key in REGEXP_KEYDOWN => not a dropdown command\n      // If input/textarea:\n      //  - If space key => not a dropdown command\n      //  - If key is other than escape\n      //    - If key is not up or down => not a dropdown command\n      //    - If trigger inside the menu => not a dropdown command\n      if (/input|textarea/i.test(event.target.tagName) ? event.key === SPACE_KEY || event.key !== ESCAPE_KEY$2 && (event.key !== ARROW_DOWN_KEY && event.key !== ARROW_UP_KEY || event.target.closest(SELECTOR_MENU)) : !REGEXP_KEYDOWN.test(event.key)) {\n        return;\n      }\n\n      const isActive = this.classList.contains(CLASS_NAME_SHOW$7);\n\n      if (!isActive && event.key === ESCAPE_KEY$2) {\n        return;\n      }\n\n      event.preventDefault();\n      event.stopPropagation();\n\n      if (isDisabled(this)) {\n        return;\n      }\n\n      const getToggleButton = () => this.matches(SELECTOR_DATA_TOGGLE$3) ? this : SelectorEngine.prev(this, SELECTOR_DATA_TOGGLE$3)[0];\n\n      if (event.key === ESCAPE_KEY$2) {\n        getToggleButton().focus();\n        Dropdown.clearMenus();\n        return;\n      }\n\n      if (event.key === ARROW_UP_KEY || event.key === ARROW_DOWN_KEY) {\n        if (!isActive) {\n          getToggleButton().click();\n        }\n\n        Dropdown.getInstance(getToggleButton())._selectMenuItem(event);\n\n        return;\n      }\n\n      if (!isActive || event.key === SPACE_KEY) {\n        Dropdown.clearMenus();\n      }\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_DATA_TOGGLE$3, Dropdown.dataApiKeydownHandler);\n  EventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown.dataApiKeydownHandler);\n  EventHandler.on(document, EVENT_CLICK_DATA_API$3, Dropdown.clearMenus);\n  EventHandler.on(document, EVENT_KEYUP_DATA_API, Dropdown.clearMenus);\n  EventHandler.on(document, EVENT_CLICK_DATA_API$3, SELECTOR_DATA_TOGGLE$3, function (event) {\n    event.preventDefault();\n    Dropdown.dropdownInterface(this);\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Dropdown to jQuery only if jQuery is present\n   */\n\n  defineJQueryPlugin(Dropdown);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): util/scrollBar.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  const SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top';\n  const SELECTOR_STICKY_CONTENT = '.sticky-top';\n\n  class ScrollBarHelper {\n    constructor() {\n      this._element = document.body;\n    }\n\n    getWidth() {\n      // https://developer.mozilla.org/en-US/docs/Web/API/Window/innerWidth#usage_notes\n      const documentWidth = document.documentElement.clientWidth;\n      return Math.abs(window.innerWidth - documentWidth);\n    }\n\n    hide() {\n      const width = this.getWidth();\n\n      this._disableOverFlow(); // give padding to element to balance the hidden scrollbar width\n\n\n      this._setElementAttributes(this._element, 'paddingRight', calculatedValue => calculatedValue + width); // trick: We adjust positive paddingRight and negative marginRight to sticky-top elements to keep showing fullwidth\n\n\n      this._setElementAttributes(SELECTOR_FIXED_CONTENT, 'paddingRight', calculatedValue => calculatedValue + width);\n\n      this._setElementAttributes(SELECTOR_STICKY_CONTENT, 'marginRight', calculatedValue => calculatedValue - width);\n    }\n\n    _disableOverFlow() {\n      this._saveInitialAttribute(this._element, 'overflow');\n\n      this._element.style.overflow = 'hidden';\n    }\n\n    _setElementAttributes(selector, styleProp, callback) {\n      const scrollbarWidth = this.getWidth();\n\n      const manipulationCallBack = element => {\n        if (element !== this._element && window.innerWidth > element.clientWidth + scrollbarWidth) {\n          return;\n        }\n\n        this._saveInitialAttribute(element, styleProp);\n\n        const calculatedValue = window.getComputedStyle(element)[styleProp];\n        element.style[styleProp] = `${callback(Number.parseFloat(calculatedValue))}px`;\n      };\n\n      this._applyManipulationCallback(selector, manipulationCallBack);\n    }\n\n    reset() {\n      this._resetElementAttributes(this._element, 'overflow');\n\n      this._resetElementAttributes(this._element, 'paddingRight');\n\n      this._resetElementAttributes(SELECTOR_FIXED_CONTENT, 'paddingRight');\n\n      this._resetElementAttributes(SELECTOR_STICKY_CONTENT, 'marginRight');\n    }\n\n    _saveInitialAttribute(element, styleProp) {\n      const actualValue = element.style[styleProp];\n\n      if (actualValue) {\n        Manipulator.setDataAttribute(element, styleProp, actualValue);\n      }\n    }\n\n    _resetElementAttributes(selector, styleProp) {\n      const manipulationCallBack = element => {\n        const value = Manipulator.getDataAttribute(element, styleProp);\n\n        if (typeof value === 'undefined') {\n          element.style.removeProperty(styleProp);\n        } else {\n          Manipulator.removeDataAttribute(element, styleProp);\n          element.style[styleProp] = value;\n        }\n      };\n\n      this._applyManipulationCallback(selector, manipulationCallBack);\n    }\n\n    _applyManipulationCallback(selector, callBack) {\n      if (isElement$1(selector)) {\n        callBack(selector);\n      } else {\n        SelectorEngine.find(selector, this._element).forEach(callBack);\n      }\n    }\n\n    isOverflowing() {\n      return this.getWidth() > 0;\n    }\n\n  }\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): util/backdrop.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  const Default$6 = {\n    isVisible: true,\n    // if false, we use the backdrop helper without adding any element to the dom\n    isAnimated: false,\n    rootElement: 'body',\n    // give the choice to place backdrop under different elements\n    clickCallback: null\n  };\n  const DefaultType$6 = {\n    isVisible: 'boolean',\n    isAnimated: 'boolean',\n    rootElement: '(element|string)',\n    clickCallback: '(function|null)'\n  };\n  const NAME$7 = 'backdrop';\n  const CLASS_NAME_BACKDROP = 'modal-backdrop';\n  const CLASS_NAME_FADE$5 = 'fade';\n  const CLASS_NAME_SHOW$6 = 'show';\n  const EVENT_MOUSEDOWN = `mousedown.bs.${NAME$7}`;\n\n  class Backdrop {\n    constructor(config) {\n      this._config = this._getConfig(config);\n      this._isAppended = false;\n      this._element = null;\n    }\n\n    show(callback) {\n      if (!this._config.isVisible) {\n        execute(callback);\n        return;\n      }\n\n      this._append();\n\n      if (this._config.isAnimated) {\n        reflow(this._getElement());\n      }\n\n      this._getElement().classList.add(CLASS_NAME_SHOW$6);\n\n      this._emulateAnimation(() => {\n        execute(callback);\n      });\n    }\n\n    hide(callback) {\n      if (!this._config.isVisible) {\n        execute(callback);\n        return;\n      }\n\n      this._getElement().classList.remove(CLASS_NAME_SHOW$6);\n\n      this._emulateAnimation(() => {\n        this.dispose();\n        execute(callback);\n      });\n    } // Private\n\n\n    _getElement() {\n      if (!this._element) {\n        const backdrop = document.createElement('div');\n        backdrop.className = CLASS_NAME_BACKDROP;\n\n        if (this._config.isAnimated) {\n          backdrop.classList.add(CLASS_NAME_FADE$5);\n        }\n\n        this._element = backdrop;\n      }\n\n      return this._element;\n    }\n\n    _getConfig(config) {\n      config = { ...Default$6,\n        ...(typeof config === 'object' ? config : {})\n      }; // use getElement() with the default \"body\" to get a fresh Element on each instantiation\n\n      config.rootElement = getElement(config.rootElement);\n      typeCheckConfig(NAME$7, config, DefaultType$6);\n      return config;\n    }\n\n    _append() {\n      if (this._isAppended) {\n        return;\n      }\n\n      this._config.rootElement.appendChild(this._getElement());\n\n      EventHandler.on(this._getElement(), EVENT_MOUSEDOWN, () => {\n        execute(this._config.clickCallback);\n      });\n      this._isAppended = true;\n    }\n\n    dispose() {\n      if (!this._isAppended) {\n        return;\n      }\n\n      EventHandler.off(this._element, EVENT_MOUSEDOWN);\n\n      this._element.remove();\n\n      this._isAppended = false;\n    }\n\n    _emulateAnimation(callback) {\n      executeAfterTransition(callback, this._getElement(), this._config.isAnimated);\n    }\n\n  }\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): modal.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$6 = 'modal';\n  const DATA_KEY$6 = 'bs.modal';\n  const EVENT_KEY$6 = `.${DATA_KEY$6}`;\n  const DATA_API_KEY$3 = '.data-api';\n  const ESCAPE_KEY$1 = 'Escape';\n  const Default$5 = {\n    backdrop: true,\n    keyboard: true,\n    focus: true\n  };\n  const DefaultType$5 = {\n    backdrop: '(boolean|string)',\n    keyboard: 'boolean',\n    focus: 'boolean'\n  };\n  const EVENT_HIDE$3 = `hide${EVENT_KEY$6}`;\n  const EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY$6}`;\n  const EVENT_HIDDEN$3 = `hidden${EVENT_KEY$6}`;\n  const EVENT_SHOW$3 = `show${EVENT_KEY$6}`;\n  const EVENT_SHOWN$3 = `shown${EVENT_KEY$6}`;\n  const EVENT_FOCUSIN$2 = `focusin${EVENT_KEY$6}`;\n  const EVENT_RESIZE = `resize${EVENT_KEY$6}`;\n  const EVENT_CLICK_DISMISS$2 = `click.dismiss${EVENT_KEY$6}`;\n  const EVENT_KEYDOWN_DISMISS$1 = `keydown.dismiss${EVENT_KEY$6}`;\n  const EVENT_MOUSEUP_DISMISS = `mouseup.dismiss${EVENT_KEY$6}`;\n  const EVENT_MOUSEDOWN_DISMISS = `mousedown.dismiss${EVENT_KEY$6}`;\n  const EVENT_CLICK_DATA_API$2 = `click${EVENT_KEY$6}${DATA_API_KEY$3}`;\n  const CLASS_NAME_OPEN = 'modal-open';\n  const CLASS_NAME_FADE$4 = 'fade';\n  const CLASS_NAME_SHOW$5 = 'show';\n  const CLASS_NAME_STATIC = 'modal-static';\n  const SELECTOR_DIALOG = '.modal-dialog';\n  const SELECTOR_MODAL_BODY = '.modal-body';\n  const SELECTOR_DATA_TOGGLE$2 = '[data-bs-toggle=\"modal\"]';\n  const SELECTOR_DATA_DISMISS$2 = '[data-bs-dismiss=\"modal\"]';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Modal extends BaseComponent {\n    constructor(element, config) {\n      super(element);\n      this._config = this._getConfig(config);\n      this._dialog = SelectorEngine.findOne(SELECTOR_DIALOG, this._element);\n      this._backdrop = this._initializeBackDrop();\n      this._isShown = false;\n      this._ignoreBackdropClick = false;\n      this._isTransitioning = false;\n      this._scrollBar = new ScrollBarHelper();\n    } // Getters\n\n\n    static get Default() {\n      return Default$5;\n    }\n\n    static get NAME() {\n      return NAME$6;\n    } // Public\n\n\n    toggle(relatedTarget) {\n      return this._isShown ? this.hide() : this.show(relatedTarget);\n    }\n\n    show(relatedTarget) {\n      if (this._isShown || this._isTransitioning) {\n        return;\n      }\n\n      const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$3, {\n        relatedTarget\n      });\n\n      if (showEvent.defaultPrevented) {\n        return;\n      }\n\n      this._isShown = true;\n\n      if (this._isAnimated()) {\n        this._isTransitioning = true;\n      }\n\n      this._scrollBar.hide();\n\n      document.body.classList.add(CLASS_NAME_OPEN);\n\n      this._adjustDialog();\n\n      this._setEscapeEvent();\n\n      this._setResizeEvent();\n\n      EventHandler.on(this._element, EVENT_CLICK_DISMISS$2, SELECTOR_DATA_DISMISS$2, event => this.hide(event));\n      EventHandler.on(this._dialog, EVENT_MOUSEDOWN_DISMISS, () => {\n        EventHandler.one(this._element, EVENT_MOUSEUP_DISMISS, event => {\n          if (event.target === this._element) {\n            this._ignoreBackdropClick = true;\n          }\n        });\n      });\n\n      this._showBackdrop(() => this._showElement(relatedTarget));\n    }\n\n    hide(event) {\n      if (event && ['A', 'AREA'].includes(event.target.tagName)) {\n        event.preventDefault();\n      }\n\n      if (!this._isShown || this._isTransitioning) {\n        return;\n      }\n\n      const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$3);\n\n      if (hideEvent.defaultPrevented) {\n        return;\n      }\n\n      this._isShown = false;\n\n      const isAnimated = this._isAnimated();\n\n      if (isAnimated) {\n        this._isTransitioning = true;\n      }\n\n      this._setEscapeEvent();\n\n      this._setResizeEvent();\n\n      EventHandler.off(document, EVENT_FOCUSIN$2);\n\n      this._element.classList.remove(CLASS_NAME_SHOW$5);\n\n      EventHandler.off(this._element, EVENT_CLICK_DISMISS$2);\n      EventHandler.off(this._dialog, EVENT_MOUSEDOWN_DISMISS);\n\n      this._queueCallback(() => this._hideModal(), this._element, isAnimated);\n    }\n\n    dispose() {\n      [window, this._dialog].forEach(htmlElement => EventHandler.off(htmlElement, EVENT_KEY$6));\n\n      this._backdrop.dispose();\n\n      super.dispose();\n      /**\n       * `document` has 2 events `EVENT_FOCUSIN` and `EVENT_CLICK_DATA_API`\n       * Do not move `document` in `htmlElements` array\n       * It will remove `EVENT_CLICK_DATA_API` event that should remain\n       */\n\n      EventHandler.off(document, EVENT_FOCUSIN$2);\n    }\n\n    handleUpdate() {\n      this._adjustDialog();\n    } // Private\n\n\n    _initializeBackDrop() {\n      return new Backdrop({\n        isVisible: Boolean(this._config.backdrop),\n        // 'static' option will be translated to true, and booleans will keep their value\n        isAnimated: this._isAnimated()\n      });\n    }\n\n    _getConfig(config) {\n      config = { ...Default$5,\n        ...Manipulator.getDataAttributes(this._element),\n        ...(typeof config === 'object' ? config : {})\n      };\n      typeCheckConfig(NAME$6, config, DefaultType$5);\n      return config;\n    }\n\n    _showElement(relatedTarget) {\n      const isAnimated = this._isAnimated();\n\n      const modalBody = SelectorEngine.findOne(SELECTOR_MODAL_BODY, this._dialog);\n\n      if (!this._element.parentNode || this._element.parentNode.nodeType !== Node.ELEMENT_NODE) {\n        // Don't move modal's DOM position\n        document.body.appendChild(this._element);\n      }\n\n      this._element.style.display = 'block';\n\n      this._element.removeAttribute('aria-hidden');\n\n      this._element.setAttribute('aria-modal', true);\n\n      this._element.setAttribute('role', 'dialog');\n\n      this._element.scrollTop = 0;\n\n      if (modalBody) {\n        modalBody.scrollTop = 0;\n      }\n\n      if (isAnimated) {\n        reflow(this._element);\n      }\n\n      this._element.classList.add(CLASS_NAME_SHOW$5);\n\n      if (this._config.focus) {\n        this._enforceFocus();\n      }\n\n      const transitionComplete = () => {\n        if (this._config.focus) {\n          this._element.focus();\n        }\n\n        this._isTransitioning = false;\n        EventHandler.trigger(this._element, EVENT_SHOWN$3, {\n          relatedTarget\n        });\n      };\n\n      this._queueCallback(transitionComplete, this._dialog, isAnimated);\n    }\n\n    _enforceFocus() {\n      EventHandler.off(document, EVENT_FOCUSIN$2); // guard against infinite focus loop\n\n      EventHandler.on(document, EVENT_FOCUSIN$2, event => {\n        if (document !== event.target && this._element !== event.target && !this._element.contains(event.target)) {\n          this._element.focus();\n        }\n      });\n    }\n\n    _setEscapeEvent() {\n      if (this._isShown) {\n        EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS$1, event => {\n          if (this._config.keyboard && event.key === ESCAPE_KEY$1) {\n            event.preventDefault();\n            this.hide();\n          } else if (!this._config.keyboard && event.key === ESCAPE_KEY$1) {\n            this._triggerBackdropTransition();\n          }\n        });\n      } else {\n        EventHandler.off(this._element, EVENT_KEYDOWN_DISMISS$1);\n      }\n    }\n\n    _setResizeEvent() {\n      if (this._isShown) {\n        EventHandler.on(window, EVENT_RESIZE, () => this._adjustDialog());\n      } else {\n        EventHandler.off(window, EVENT_RESIZE);\n      }\n    }\n\n    _hideModal() {\n      this._element.style.display = 'none';\n\n      this._element.setAttribute('aria-hidden', true);\n\n      this._element.removeAttribute('aria-modal');\n\n      this._element.removeAttribute('role');\n\n      this._isTransitioning = false;\n\n      this._backdrop.hide(() => {\n        document.body.classList.remove(CLASS_NAME_OPEN);\n\n        this._resetAdjustments();\n\n        this._scrollBar.reset();\n\n        EventHandler.trigger(this._element, EVENT_HIDDEN$3);\n      });\n    }\n\n    _showBackdrop(callback) {\n      EventHandler.on(this._element, EVENT_CLICK_DISMISS$2, event => {\n        if (this._ignoreBackdropClick) {\n          this._ignoreBackdropClick = false;\n          return;\n        }\n\n        if (event.target !== event.currentTarget) {\n          return;\n        }\n\n        if (this._config.backdrop === true) {\n          this.hide();\n        } else if (this._config.backdrop === 'static') {\n          this._triggerBackdropTransition();\n        }\n      });\n\n      this._backdrop.show(callback);\n    }\n\n    _isAnimated() {\n      return this._element.classList.contains(CLASS_NAME_FADE$4);\n    }\n\n    _triggerBackdropTransition() {\n      const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED);\n\n      if (hideEvent.defaultPrevented) {\n        return;\n      }\n\n      const {\n        classList,\n        scrollHeight,\n        style\n      } = this._element;\n      const isModalOverflowing = scrollHeight > document.documentElement.clientHeight; // return if the following background transition hasn't yet completed\n\n      if (!isModalOverflowing && style.overflowY === 'hidden' || classList.contains(CLASS_NAME_STATIC)) {\n        return;\n      }\n\n      if (!isModalOverflowing) {\n        style.overflowY = 'hidden';\n      }\n\n      classList.add(CLASS_NAME_STATIC);\n\n      this._queueCallback(() => {\n        classList.remove(CLASS_NAME_STATIC);\n\n        if (!isModalOverflowing) {\n          this._queueCallback(() => {\n            style.overflowY = '';\n          }, this._dialog);\n        }\n      }, this._dialog);\n\n      this._element.focus();\n    } // ----------------------------------------------------------------------\n    // the following methods are used to handle overflowing modals\n    // ----------------------------------------------------------------------\n\n\n    _adjustDialog() {\n      const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;\n\n      const scrollbarWidth = this._scrollBar.getWidth();\n\n      const isBodyOverflowing = scrollbarWidth > 0;\n\n      if (!isBodyOverflowing && isModalOverflowing && !isRTL() || isBodyOverflowing && !isModalOverflowing && isRTL()) {\n        this._element.style.paddingLeft = `${scrollbarWidth}px`;\n      }\n\n      if (isBodyOverflowing && !isModalOverflowing && !isRTL() || !isBodyOverflowing && isModalOverflowing && isRTL()) {\n        this._element.style.paddingRight = `${scrollbarWidth}px`;\n      }\n    }\n\n    _resetAdjustments() {\n      this._element.style.paddingLeft = '';\n      this._element.style.paddingRight = '';\n    } // Static\n\n\n    static jQueryInterface(config, relatedTarget) {\n      return this.each(function () {\n        const data = Modal.getOrCreateInstance(this, config);\n\n        if (typeof config !== 'string') {\n          return;\n        }\n\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config](relatedTarget);\n      });\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(document, EVENT_CLICK_DATA_API$2, SELECTOR_DATA_TOGGLE$2, function (event) {\n    const target = getElementFromSelector(this);\n\n    if (['A', 'AREA'].includes(this.tagName)) {\n      event.preventDefault();\n    }\n\n    EventHandler.one(target, EVENT_SHOW$3, showEvent => {\n      if (showEvent.defaultPrevented) {\n        // only register focus restorer if modal will actually get shown\n        return;\n      }\n\n      EventHandler.one(target, EVENT_HIDDEN$3, () => {\n        if (isVisible(this)) {\n          this.focus();\n        }\n      });\n    });\n    const data = Modal.getOrCreateInstance(target);\n    data.toggle(this);\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Modal to jQuery only if jQuery is present\n   */\n\n  defineJQueryPlugin(Modal);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): offcanvas.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$5 = 'offcanvas';\n  const DATA_KEY$5 = 'bs.offcanvas';\n  const EVENT_KEY$5 = `.${DATA_KEY$5}`;\n  const DATA_API_KEY$2 = '.data-api';\n  const EVENT_LOAD_DATA_API$1 = `load${EVENT_KEY$5}${DATA_API_KEY$2}`;\n  const ESCAPE_KEY = 'Escape';\n  const Default$4 = {\n    backdrop: true,\n    keyboard: true,\n    scroll: false\n  };\n  const DefaultType$4 = {\n    backdrop: 'boolean',\n    keyboard: 'boolean',\n    scroll: 'boolean'\n  };\n  const CLASS_NAME_SHOW$4 = 'show';\n  const OPEN_SELECTOR = '.offcanvas.show';\n  const EVENT_SHOW$2 = `show${EVENT_KEY$5}`;\n  const EVENT_SHOWN$2 = `shown${EVENT_KEY$5}`;\n  const EVENT_HIDE$2 = `hide${EVENT_KEY$5}`;\n  const EVENT_HIDDEN$2 = `hidden${EVENT_KEY$5}`;\n  const EVENT_FOCUSIN$1 = `focusin${EVENT_KEY$5}`;\n  const EVENT_CLICK_DATA_API$1 = `click${EVENT_KEY$5}${DATA_API_KEY$2}`;\n  const EVENT_CLICK_DISMISS$1 = `click.dismiss${EVENT_KEY$5}`;\n  const EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY$5}`;\n  const SELECTOR_DATA_DISMISS$1 = '[data-bs-dismiss=\"offcanvas\"]';\n  const SELECTOR_DATA_TOGGLE$1 = '[data-bs-toggle=\"offcanvas\"]';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Offcanvas extends BaseComponent {\n    constructor(element, config) {\n      super(element);\n      this._config = this._getConfig(config);\n      this._isShown = false;\n      this._backdrop = this._initializeBackDrop();\n\n      this._addEventListeners();\n    } // Getters\n\n\n    static get NAME() {\n      return NAME$5;\n    }\n\n    static get Default() {\n      return Default$4;\n    } // Public\n\n\n    toggle(relatedTarget) {\n      return this._isShown ? this.hide() : this.show(relatedTarget);\n    }\n\n    show(relatedTarget) {\n      if (this._isShown) {\n        return;\n      }\n\n      const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$2, {\n        relatedTarget\n      });\n\n      if (showEvent.defaultPrevented) {\n        return;\n      }\n\n      this._isShown = true;\n      this._element.style.visibility = 'visible';\n\n      this._backdrop.show();\n\n      if (!this._config.scroll) {\n        new ScrollBarHelper().hide();\n\n        this._enforceFocusOnElement(this._element);\n      }\n\n      this._element.removeAttribute('aria-hidden');\n\n      this._element.setAttribute('aria-modal', true);\n\n      this._element.setAttribute('role', 'dialog');\n\n      this._element.classList.add(CLASS_NAME_SHOW$4);\n\n      const completeCallBack = () => {\n        EventHandler.trigger(this._element, EVENT_SHOWN$2, {\n          relatedTarget\n        });\n      };\n\n      this._queueCallback(completeCallBack, this._element, true);\n    }\n\n    hide() {\n      if (!this._isShown) {\n        return;\n      }\n\n      const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$2);\n\n      if (hideEvent.defaultPrevented) {\n        return;\n      }\n\n      EventHandler.off(document, EVENT_FOCUSIN$1);\n\n      this._element.blur();\n\n      this._isShown = false;\n\n      this._element.classList.remove(CLASS_NAME_SHOW$4);\n\n      this._backdrop.hide();\n\n      const completeCallback = () => {\n        this._element.setAttribute('aria-hidden', true);\n\n        this._element.removeAttribute('aria-modal');\n\n        this._element.removeAttribute('role');\n\n        this._element.style.visibility = 'hidden';\n\n        if (!this._config.scroll) {\n          new ScrollBarHelper().reset();\n        }\n\n        EventHandler.trigger(this._element, EVENT_HIDDEN$2);\n      };\n\n      this._queueCallback(completeCallback, this._element, true);\n    }\n\n    dispose() {\n      this._backdrop.dispose();\n\n      super.dispose();\n      EventHandler.off(document, EVENT_FOCUSIN$1);\n    } // Private\n\n\n    _getConfig(config) {\n      config = { ...Default$4,\n        ...Manipulator.getDataAttributes(this._element),\n        ...(typeof config === 'object' ? config : {})\n      };\n      typeCheckConfig(NAME$5, config, DefaultType$4);\n      return config;\n    }\n\n    _initializeBackDrop() {\n      return new Backdrop({\n        isVisible: this._config.backdrop,\n        isAnimated: true,\n        rootElement: this._element.parentNode,\n        clickCallback: () => this.hide()\n      });\n    }\n\n    _enforceFocusOnElement(element) {\n      EventHandler.off(document, EVENT_FOCUSIN$1); // guard against infinite focus loop\n\n      EventHandler.on(document, EVENT_FOCUSIN$1, event => {\n        if (document !== event.target && element !== event.target && !element.contains(event.target)) {\n          element.focus();\n        }\n      });\n      element.focus();\n    }\n\n    _addEventListeners() {\n      EventHandler.on(this._element, EVENT_CLICK_DISMISS$1, SELECTOR_DATA_DISMISS$1, () => this.hide());\n      EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS, event => {\n        if (this._config.keyboard && event.key === ESCAPE_KEY) {\n          this.hide();\n        }\n      });\n    } // Static\n\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = Offcanvas.getOrCreateInstance(this, config);\n\n        if (typeof config !== 'string') {\n          return;\n        }\n\n        if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config](this);\n      });\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(document, EVENT_CLICK_DATA_API$1, SELECTOR_DATA_TOGGLE$1, function (event) {\n    const target = getElementFromSelector(this);\n\n    if (['A', 'AREA'].includes(this.tagName)) {\n      event.preventDefault();\n    }\n\n    if (isDisabled(this)) {\n      return;\n    }\n\n    EventHandler.one(target, EVENT_HIDDEN$2, () => {\n      // focus on trigger when it is closed\n      if (isVisible(this)) {\n        this.focus();\n      }\n    }); // avoid conflict when clicking a toggler of an offcanvas, while another is open\n\n    const allReadyOpen = SelectorEngine.findOne(OPEN_SELECTOR);\n\n    if (allReadyOpen && allReadyOpen !== target) {\n      Offcanvas.getInstance(allReadyOpen).hide();\n    }\n\n    const data = Offcanvas.getOrCreateInstance(target);\n    data.toggle(this);\n  });\n  EventHandler.on(window, EVENT_LOAD_DATA_API$1, () => SelectorEngine.find(OPEN_SELECTOR).forEach(el => Offcanvas.getOrCreateInstance(el).show()));\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   */\n\n  defineJQueryPlugin(Offcanvas);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): util/sanitizer.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  const uriAttrs = new Set(['background', 'cite', 'href', 'itemtype', 'longdesc', 'poster', 'src', 'xlink:href']);\n  const ARIA_ATTRIBUTE_PATTERN = /^aria-[\\w-]*$/i;\n  /**\n   * A pattern that recognizes a commonly useful subset of URLs that are safe.\n   *\n   * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts\n   */\n\n  const SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file):|[^#&/:?]*(?:[#/?]|$))/i;\n  /**\n   * A pattern that matches safe data URLs. Only matches image, video and audio types.\n   *\n   * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts\n   */\n\n  const DATA_URL_PATTERN = /^data:(?:image\\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\\/(?:mpeg|mp4|ogg|webm)|audio\\/(?:mp3|oga|ogg|opus));base64,[\\d+/a-z]+=*$/i;\n\n  const allowedAttribute = (attr, allowedAttributeList) => {\n    const attrName = attr.nodeName.toLowerCase();\n\n    if (allowedAttributeList.includes(attrName)) {\n      if (uriAttrs.has(attrName)) {\n        return Boolean(SAFE_URL_PATTERN.test(attr.nodeValue) || DATA_URL_PATTERN.test(attr.nodeValue));\n      }\n\n      return true;\n    }\n\n    const regExp = allowedAttributeList.filter(attrRegex => attrRegex instanceof RegExp); // Check if a regular expression validates the attribute.\n\n    for (let i = 0, len = regExp.length; i < len; i++) {\n      if (regExp[i].test(attrName)) {\n        return true;\n      }\n    }\n\n    return false;\n  };\n\n  const DefaultAllowlist = {\n    // Global attributes allowed on any supplied element below.\n    '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],\n    a: ['target', 'href', 'title', 'rel'],\n    area: [],\n    b: [],\n    br: [],\n    col: [],\n    code: [],\n    div: [],\n    em: [],\n    hr: [],\n    h1: [],\n    h2: [],\n    h3: [],\n    h4: [],\n    h5: [],\n    h6: [],\n    i: [],\n    img: ['src', 'srcset', 'alt', 'title', 'width', 'height'],\n    li: [],\n    ol: [],\n    p: [],\n    pre: [],\n    s: [],\n    small: [],\n    span: [],\n    sub: [],\n    sup: [],\n    strong: [],\n    u: [],\n    ul: []\n  };\n  function sanitizeHtml(unsafeHtml, allowList, sanitizeFn) {\n    if (!unsafeHtml.length) {\n      return unsafeHtml;\n    }\n\n    if (sanitizeFn && typeof sanitizeFn === 'function') {\n      return sanitizeFn(unsafeHtml);\n    }\n\n    const domParser = new window.DOMParser();\n    const createdDocument = domParser.parseFromString(unsafeHtml, 'text/html');\n    const allowlistKeys = Object.keys(allowList);\n    const elements = [].concat(...createdDocument.body.querySelectorAll('*'));\n\n    for (let i = 0, len = elements.length; i < len; i++) {\n      const el = elements[i];\n      const elName = el.nodeName.toLowerCase();\n\n      if (!allowlistKeys.includes(elName)) {\n        el.remove();\n        continue;\n      }\n\n      const attributeList = [].concat(...el.attributes);\n      const allowedAttributes = [].concat(allowList['*'] || [], allowList[elName] || []);\n      attributeList.forEach(attr => {\n        if (!allowedAttribute(attr, allowedAttributes)) {\n          el.removeAttribute(attr.nodeName);\n        }\n      });\n    }\n\n    return createdDocument.body.innerHTML;\n  }\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): tooltip.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$4 = 'tooltip';\n  const DATA_KEY$4 = 'bs.tooltip';\n  const EVENT_KEY$4 = `.${DATA_KEY$4}`;\n  const CLASS_PREFIX$1 = 'bs-tooltip';\n  const BSCLS_PREFIX_REGEX$1 = new RegExp(`(^|\\\\s)${CLASS_PREFIX$1}\\\\S+`, 'g');\n  const DISALLOWED_ATTRIBUTES = new Set(['sanitize', 'allowList', 'sanitizeFn']);\n  const DefaultType$3 = {\n    animation: 'boolean',\n    template: 'string',\n    title: '(string|element|function)',\n    trigger: 'string',\n    delay: '(number|object)',\n    html: 'boolean',\n    selector: '(string|boolean)',\n    placement: '(string|function)',\n    offset: '(array|string|function)',\n    container: '(string|element|boolean)',\n    fallbackPlacements: 'array',\n    boundary: '(string|element)',\n    customClass: '(string|function)',\n    sanitize: 'boolean',\n    sanitizeFn: '(null|function)',\n    allowList: 'object',\n    popperConfig: '(null|object|function)'\n  };\n  const AttachmentMap = {\n    AUTO: 'auto',\n    TOP: 'top',\n    RIGHT: isRTL() ? 'left' : 'right',\n    BOTTOM: 'bottom',\n    LEFT: isRTL() ? 'right' : 'left'\n  };\n  const Default$3 = {\n    animation: true,\n    template: '<div class=\"tooltip\" role=\"tooltip\">' + '<div class=\"tooltip-arrow\"></div>' + '<div class=\"tooltip-inner\"></div>' + '</div>',\n    trigger: 'hover focus',\n    title: '',\n    delay: 0,\n    html: false,\n    selector: false,\n    placement: 'top',\n    offset: [0, 0],\n    container: false,\n    fallbackPlacements: ['top', 'right', 'bottom', 'left'],\n    boundary: 'clippingParents',\n    customClass: '',\n    sanitize: true,\n    sanitizeFn: null,\n    allowList: DefaultAllowlist,\n    popperConfig: null\n  };\n  const Event$2 = {\n    HIDE: `hide${EVENT_KEY$4}`,\n    HIDDEN: `hidden${EVENT_KEY$4}`,\n    SHOW: `show${EVENT_KEY$4}`,\n    SHOWN: `shown${EVENT_KEY$4}`,\n    INSERTED: `inserted${EVENT_KEY$4}`,\n    CLICK: `click${EVENT_KEY$4}`,\n    FOCUSIN: `focusin${EVENT_KEY$4}`,\n    FOCUSOUT: `focusout${EVENT_KEY$4}`,\n    MOUSEENTER: `mouseenter${EVENT_KEY$4}`,\n    MOUSELEAVE: `mouseleave${EVENT_KEY$4}`\n  };\n  const CLASS_NAME_FADE$3 = 'fade';\n  const CLASS_NAME_MODAL = 'modal';\n  const CLASS_NAME_SHOW$3 = 'show';\n  const HOVER_STATE_SHOW = 'show';\n  const HOVER_STATE_OUT = 'out';\n  const SELECTOR_TOOLTIP_INNER = '.tooltip-inner';\n  const TRIGGER_HOVER = 'hover';\n  const TRIGGER_FOCUS = 'focus';\n  const TRIGGER_CLICK = 'click';\n  const TRIGGER_MANUAL = 'manual';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Tooltip extends BaseComponent {\n    constructor(element, config) {\n      if (typeof Popper === 'undefined') {\n        throw new TypeError('Bootstrap\\'s tooltips require Popper (https://popper.js.org)');\n      }\n\n      super(element); // private\n\n      this._isEnabled = true;\n      this._timeout = 0;\n      this._hoverState = '';\n      this._activeTrigger = {};\n      this._popper = null; // Protected\n\n      this._config = this._getConfig(config);\n      this.tip = null;\n\n      this._setListeners();\n    } // Getters\n\n\n    static get Default() {\n      return Default$3;\n    }\n\n    static get NAME() {\n      return NAME$4;\n    }\n\n    static get Event() {\n      return Event$2;\n    }\n\n    static get DefaultType() {\n      return DefaultType$3;\n    } // Public\n\n\n    enable() {\n      this._isEnabled = true;\n    }\n\n    disable() {\n      this._isEnabled = false;\n    }\n\n    toggleEnabled() {\n      this._isEnabled = !this._isEnabled;\n    }\n\n    toggle(event) {\n      if (!this._isEnabled) {\n        return;\n      }\n\n      if (event) {\n        const context = this._initializeOnDelegatedTarget(event);\n\n        context._activeTrigger.click = !context._activeTrigger.click;\n\n        if (context._isWithActiveTrigger()) {\n          context._enter(null, context);\n        } else {\n          context._leave(null, context);\n        }\n      } else {\n        if (this.getTipElement().classList.contains(CLASS_NAME_SHOW$3)) {\n          this._leave(null, this);\n\n          return;\n        }\n\n        this._enter(null, this);\n      }\n    }\n\n    dispose() {\n      clearTimeout(this._timeout);\n      EventHandler.off(this._element.closest(`.${CLASS_NAME_MODAL}`), 'hide.bs.modal', this._hideModalHandler);\n\n      if (this.tip) {\n        this.tip.remove();\n      }\n\n      if (this._popper) {\n        this._popper.destroy();\n      }\n\n      super.dispose();\n    }\n\n    show() {\n      if (this._element.style.display === 'none') {\n        throw new Error('Please use show on visible elements');\n      }\n\n      if (!(this.isWithContent() && this._isEnabled)) {\n        return;\n      }\n\n      const showEvent = EventHandler.trigger(this._element, this.constructor.Event.SHOW);\n      const shadowRoot = findShadowRoot(this._element);\n      const isInTheDom = shadowRoot === null ? this._element.ownerDocument.documentElement.contains(this._element) : shadowRoot.contains(this._element);\n\n      if (showEvent.defaultPrevented || !isInTheDom) {\n        return;\n      }\n\n      const tip = this.getTipElement();\n      const tipId = getUID(this.constructor.NAME);\n      tip.setAttribute('id', tipId);\n\n      this._element.setAttribute('aria-describedby', tipId);\n\n      this.setContent();\n\n      if (this._config.animation) {\n        tip.classList.add(CLASS_NAME_FADE$3);\n      }\n\n      const placement = typeof this._config.placement === 'function' ? this._config.placement.call(this, tip, this._element) : this._config.placement;\n\n      const attachment = this._getAttachment(placement);\n\n      this._addAttachmentClass(attachment);\n\n      const {\n        container\n      } = this._config;\n      Data.set(tip, this.constructor.DATA_KEY, this);\n\n      if (!this._element.ownerDocument.documentElement.contains(this.tip)) {\n        container.appendChild(tip);\n        EventHandler.trigger(this._element, this.constructor.Event.INSERTED);\n      }\n\n      if (this._popper) {\n        this._popper.update();\n      } else {\n        this._popper = createPopper(this._element, tip, this._getPopperConfig(attachment));\n      }\n\n      tip.classList.add(CLASS_NAME_SHOW$3);\n      const customClass = typeof this._config.customClass === 'function' ? this._config.customClass() : this._config.customClass;\n\n      if (customClass) {\n        tip.classList.add(...customClass.split(' '));\n      } // If this is a touch-enabled device we add extra\n      // empty mouseover listeners to the body's immediate children;\n      // only needed because of broken event delegation on iOS\n      // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n\n\n      if ('ontouchstart' in document.documentElement) {\n        [].concat(...document.body.children).forEach(element => {\n          EventHandler.on(element, 'mouseover', noop);\n        });\n      }\n\n      const complete = () => {\n        const prevHoverState = this._hoverState;\n        this._hoverState = null;\n        EventHandler.trigger(this._element, this.constructor.Event.SHOWN);\n\n        if (prevHoverState === HOVER_STATE_OUT) {\n          this._leave(null, this);\n        }\n      };\n\n      const isAnimated = this.tip.classList.contains(CLASS_NAME_FADE$3);\n\n      this._queueCallback(complete, this.tip, isAnimated);\n    }\n\n    hide() {\n      if (!this._popper) {\n        return;\n      }\n\n      const tip = this.getTipElement();\n\n      const complete = () => {\n        if (this._isWithActiveTrigger()) {\n          return;\n        }\n\n        if (this._hoverState !== HOVER_STATE_SHOW) {\n          tip.remove();\n        }\n\n        this._cleanTipClass();\n\n        this._element.removeAttribute('aria-describedby');\n\n        EventHandler.trigger(this._element, this.constructor.Event.HIDDEN);\n\n        if (this._popper) {\n          this._popper.destroy();\n\n          this._popper = null;\n        }\n      };\n\n      const hideEvent = EventHandler.trigger(this._element, this.constructor.Event.HIDE);\n\n      if (hideEvent.defaultPrevented) {\n        return;\n      }\n\n      tip.classList.remove(CLASS_NAME_SHOW$3); // If this is a touch-enabled device we remove the extra\n      // empty mouseover listeners we added for iOS support\n\n      if ('ontouchstart' in document.documentElement) {\n        [].concat(...document.body.children).forEach(element => EventHandler.off(element, 'mouseover', noop));\n      }\n\n      this._activeTrigger[TRIGGER_CLICK] = false;\n      this._activeTrigger[TRIGGER_FOCUS] = false;\n      this._activeTrigger[TRIGGER_HOVER] = false;\n      const isAnimated = this.tip.classList.contains(CLASS_NAME_FADE$3);\n\n      this._queueCallback(complete, this.tip, isAnimated);\n\n      this._hoverState = '';\n    }\n\n    update() {\n      if (this._popper !== null) {\n        this._popper.update();\n      }\n    } // Protected\n\n\n    isWithContent() {\n      return Boolean(this.getTitle());\n    }\n\n    getTipElement() {\n      if (this.tip) {\n        return this.tip;\n      }\n\n      const element = document.createElement('div');\n      element.innerHTML = this._config.template;\n      this.tip = element.children[0];\n      return this.tip;\n    }\n\n    setContent() {\n      const tip = this.getTipElement();\n      this.setElementContent(SelectorEngine.findOne(SELECTOR_TOOLTIP_INNER, tip), this.getTitle());\n      tip.classList.remove(CLASS_NAME_FADE$3, CLASS_NAME_SHOW$3);\n    }\n\n    setElementContent(element, content) {\n      if (element === null) {\n        return;\n      }\n\n      if (isElement$1(content)) {\n        content = getElement(content); // content is a DOM node or a jQuery\n\n        if (this._config.html) {\n          if (content.parentNode !== element) {\n            element.innerHTML = '';\n            element.appendChild(content);\n          }\n        } else {\n          element.textContent = content.textContent;\n        }\n\n        return;\n      }\n\n      if (this._config.html) {\n        if (this._config.sanitize) {\n          content = sanitizeHtml(content, this._config.allowList, this._config.sanitizeFn);\n        }\n\n        element.innerHTML = content;\n      } else {\n        element.textContent = content;\n      }\n    }\n\n    getTitle() {\n      let title = this._element.getAttribute('data-bs-original-title');\n\n      if (!title) {\n        title = typeof this._config.title === 'function' ? this._config.title.call(this._element) : this._config.title;\n      }\n\n      return title;\n    }\n\n    updateAttachment(attachment) {\n      if (attachment === 'right') {\n        return 'end';\n      }\n\n      if (attachment === 'left') {\n        return 'start';\n      }\n\n      return attachment;\n    } // Private\n\n\n    _initializeOnDelegatedTarget(event, context) {\n      const dataKey = this.constructor.DATA_KEY;\n      context = context || Data.get(event.delegateTarget, dataKey);\n\n      if (!context) {\n        context = new this.constructor(event.delegateTarget, this._getDelegateConfig());\n        Data.set(event.delegateTarget, dataKey, context);\n      }\n\n      return context;\n    }\n\n    _getOffset() {\n      const {\n        offset\n      } = this._config;\n\n      if (typeof offset === 'string') {\n        return offset.split(',').map(val => Number.parseInt(val, 10));\n      }\n\n      if (typeof offset === 'function') {\n        return popperData => offset(popperData, this._element);\n      }\n\n      return offset;\n    }\n\n    _getPopperConfig(attachment) {\n      const defaultBsPopperConfig = {\n        placement: attachment,\n        modifiers: [{\n          name: 'flip',\n          options: {\n            fallbackPlacements: this._config.fallbackPlacements\n          }\n        }, {\n          name: 'offset',\n          options: {\n            offset: this._getOffset()\n          }\n        }, {\n          name: 'preventOverflow',\n          options: {\n            boundary: this._config.boundary\n          }\n        }, {\n          name: 'arrow',\n          options: {\n            element: `.${this.constructor.NAME}-arrow`\n          }\n        }, {\n          name: 'onChange',\n          enabled: true,\n          phase: 'afterWrite',\n          fn: data => this._handlePopperPlacementChange(data)\n        }],\n        onFirstUpdate: data => {\n          if (data.options.placement !== data.placement) {\n            this._handlePopperPlacementChange(data);\n          }\n        }\n      };\n      return { ...defaultBsPopperConfig,\n        ...(typeof this._config.popperConfig === 'function' ? this._config.popperConfig(defaultBsPopperConfig) : this._config.popperConfig)\n      };\n    }\n\n    _addAttachmentClass(attachment) {\n      this.getTipElement().classList.add(`${CLASS_PREFIX$1}-${this.updateAttachment(attachment)}`);\n    }\n\n    _getAttachment(placement) {\n      return AttachmentMap[placement.toUpperCase()];\n    }\n\n    _setListeners() {\n      const triggers = this._config.trigger.split(' ');\n\n      triggers.forEach(trigger => {\n        if (trigger === 'click') {\n          EventHandler.on(this._element, this.constructor.Event.CLICK, this._config.selector, event => this.toggle(event));\n        } else if (trigger !== TRIGGER_MANUAL) {\n          const eventIn = trigger === TRIGGER_HOVER ? this.constructor.Event.MOUSEENTER : this.constructor.Event.FOCUSIN;\n          const eventOut = trigger === TRIGGER_HOVER ? this.constructor.Event.MOUSELEAVE : this.constructor.Event.FOCUSOUT;\n          EventHandler.on(this._element, eventIn, this._config.selector, event => this._enter(event));\n          EventHandler.on(this._element, eventOut, this._config.selector, event => this._leave(event));\n        }\n      });\n\n      this._hideModalHandler = () => {\n        if (this._element) {\n          this.hide();\n        }\n      };\n\n      EventHandler.on(this._element.closest(`.${CLASS_NAME_MODAL}`), 'hide.bs.modal', this._hideModalHandler);\n\n      if (this._config.selector) {\n        this._config = { ...this._config,\n          trigger: 'manual',\n          selector: ''\n        };\n      } else {\n        this._fixTitle();\n      }\n    }\n\n    _fixTitle() {\n      const title = this._element.getAttribute('title');\n\n      const originalTitleType = typeof this._element.getAttribute('data-bs-original-title');\n\n      if (title || originalTitleType !== 'string') {\n        this._element.setAttribute('data-bs-original-title', title || '');\n\n        if (title && !this._element.getAttribute('aria-label') && !this._element.textContent) {\n          this._element.setAttribute('aria-label', title);\n        }\n\n        this._element.setAttribute('title', '');\n      }\n    }\n\n    _enter(event, context) {\n      context = this._initializeOnDelegatedTarget(event, context);\n\n      if (event) {\n        context._activeTrigger[event.type === 'focusin' ? TRIGGER_FOCUS : TRIGGER_HOVER] = true;\n      }\n\n      if (context.getTipElement().classList.contains(CLASS_NAME_SHOW$3) || context._hoverState === HOVER_STATE_SHOW) {\n        context._hoverState = HOVER_STATE_SHOW;\n        return;\n      }\n\n      clearTimeout(context._timeout);\n      context._hoverState = HOVER_STATE_SHOW;\n\n      if (!context._config.delay || !context._config.delay.show) {\n        context.show();\n        return;\n      }\n\n      context._timeout = setTimeout(() => {\n        if (context._hoverState === HOVER_STATE_SHOW) {\n          context.show();\n        }\n      }, context._config.delay.show);\n    }\n\n    _leave(event, context) {\n      context = this._initializeOnDelegatedTarget(event, context);\n\n      if (event) {\n        context._activeTrigger[event.type === 'focusout' ? TRIGGER_FOCUS : TRIGGER_HOVER] = context._element.contains(event.relatedTarget);\n      }\n\n      if (context._isWithActiveTrigger()) {\n        return;\n      }\n\n      clearTimeout(context._timeout);\n      context._hoverState = HOVER_STATE_OUT;\n\n      if (!context._config.delay || !context._config.delay.hide) {\n        context.hide();\n        return;\n      }\n\n      context._timeout = setTimeout(() => {\n        if (context._hoverState === HOVER_STATE_OUT) {\n          context.hide();\n        }\n      }, context._config.delay.hide);\n    }\n\n    _isWithActiveTrigger() {\n      for (const trigger in this._activeTrigger) {\n        if (this._activeTrigger[trigger]) {\n          return true;\n        }\n      }\n\n      return false;\n    }\n\n    _getConfig(config) {\n      const dataAttributes = Manipulator.getDataAttributes(this._element);\n      Object.keys(dataAttributes).forEach(dataAttr => {\n        if (DISALLOWED_ATTRIBUTES.has(dataAttr)) {\n          delete dataAttributes[dataAttr];\n        }\n      });\n      config = { ...this.constructor.Default,\n        ...dataAttributes,\n        ...(typeof config === 'object' && config ? config : {})\n      };\n      config.container = config.container === false ? document.body : getElement(config.container);\n\n      if (typeof config.delay === 'number') {\n        config.delay = {\n          show: config.delay,\n          hide: config.delay\n        };\n      }\n\n      if (typeof config.title === 'number') {\n        config.title = config.title.toString();\n      }\n\n      if (typeof config.content === 'number') {\n        config.content = config.content.toString();\n      }\n\n      typeCheckConfig(NAME$4, config, this.constructor.DefaultType);\n\n      if (config.sanitize) {\n        config.template = sanitizeHtml(config.template, config.allowList, config.sanitizeFn);\n      }\n\n      return config;\n    }\n\n    _getDelegateConfig() {\n      const config = {};\n\n      if (this._config) {\n        for (const key in this._config) {\n          if (this.constructor.Default[key] !== this._config[key]) {\n            config[key] = this._config[key];\n          }\n        }\n      }\n\n      return config;\n    }\n\n    _cleanTipClass() {\n      const tip = this.getTipElement();\n      const tabClass = tip.getAttribute('class').match(BSCLS_PREFIX_REGEX$1);\n\n      if (tabClass !== null && tabClass.length > 0) {\n        tabClass.map(token => token.trim()).forEach(tClass => tip.classList.remove(tClass));\n      }\n    }\n\n    _handlePopperPlacementChange(popperData) {\n      const {\n        state\n      } = popperData;\n\n      if (!state) {\n        return;\n      }\n\n      this.tip = state.elements.popper;\n\n      this._cleanTipClass();\n\n      this._addAttachmentClass(this._getAttachment(state.placement));\n    } // Static\n\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = Tooltip.getOrCreateInstance(this, config);\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(`No method named \"${config}\"`);\n          }\n\n          data[config]();\n        }\n      });\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Tooltip to jQuery only if jQuery is present\n   */\n\n\n  defineJQueryPlugin(Tooltip);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): popover.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$3 = 'popover';\n  const DATA_KEY$3 = 'bs.popover';\n  const EVENT_KEY$3 = `.${DATA_KEY$3}`;\n  const CLASS_PREFIX = 'bs-popover';\n  const BSCLS_PREFIX_REGEX = new RegExp(`(^|\\\\s)${CLASS_PREFIX}\\\\S+`, 'g');\n  const Default$2 = { ...Tooltip.Default,\n    placement: 'right',\n    offset: [0, 8],\n    trigger: 'click',\n    content: '',\n    template: '<div class=\"popover\" role=\"tooltip\">' + '<div class=\"popover-arrow\"></div>' + '<h3 class=\"popover-header\"></h3>' + '<div class=\"popover-body\"></div>' + '</div>'\n  };\n  const DefaultType$2 = { ...Tooltip.DefaultType,\n    content: '(string|element|function)'\n  };\n  const Event$1 = {\n    HIDE: `hide${EVENT_KEY$3}`,\n    HIDDEN: `hidden${EVENT_KEY$3}`,\n    SHOW: `show${EVENT_KEY$3}`,\n    SHOWN: `shown${EVENT_KEY$3}`,\n    INSERTED: `inserted${EVENT_KEY$3}`,\n    CLICK: `click${EVENT_KEY$3}`,\n    FOCUSIN: `focusin${EVENT_KEY$3}`,\n    FOCUSOUT: `focusout${EVENT_KEY$3}`,\n    MOUSEENTER: `mouseenter${EVENT_KEY$3}`,\n    MOUSELEAVE: `mouseleave${EVENT_KEY$3}`\n  };\n  const CLASS_NAME_FADE$2 = 'fade';\n  const CLASS_NAME_SHOW$2 = 'show';\n  const SELECTOR_TITLE = '.popover-header';\n  const SELECTOR_CONTENT = '.popover-body';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Popover extends Tooltip {\n    // Getters\n    static get Default() {\n      return Default$2;\n    }\n\n    static get NAME() {\n      return NAME$3;\n    }\n\n    static get Event() {\n      return Event$1;\n    }\n\n    static get DefaultType() {\n      return DefaultType$2;\n    } // Overrides\n\n\n    isWithContent() {\n      return this.getTitle() || this._getContent();\n    }\n\n    getTipElement() {\n      if (this.tip) {\n        return this.tip;\n      }\n\n      this.tip = super.getTipElement();\n\n      if (!this.getTitle()) {\n        SelectorEngine.findOne(SELECTOR_TITLE, this.tip).remove();\n      }\n\n      if (!this._getContent()) {\n        SelectorEngine.findOne(SELECTOR_CONTENT, this.tip).remove();\n      }\n\n      return this.tip;\n    }\n\n    setContent() {\n      const tip = this.getTipElement(); // we use append for html objects to maintain js events\n\n      this.setElementContent(SelectorEngine.findOne(SELECTOR_TITLE, tip), this.getTitle());\n\n      let content = this._getContent();\n\n      if (typeof content === 'function') {\n        content = content.call(this._element);\n      }\n\n      this.setElementContent(SelectorEngine.findOne(SELECTOR_CONTENT, tip), content);\n      tip.classList.remove(CLASS_NAME_FADE$2, CLASS_NAME_SHOW$2);\n    } // Private\n\n\n    _addAttachmentClass(attachment) {\n      this.getTipElement().classList.add(`${CLASS_PREFIX}-${this.updateAttachment(attachment)}`);\n    }\n\n    _getContent() {\n      return this._element.getAttribute('data-bs-content') || this._config.content;\n    }\n\n    _cleanTipClass() {\n      const tip = this.getTipElement();\n      const tabClass = tip.getAttribute('class').match(BSCLS_PREFIX_REGEX);\n\n      if (tabClass !== null && tabClass.length > 0) {\n        tabClass.map(token => token.trim()).forEach(tClass => tip.classList.remove(tClass));\n      }\n    } // Static\n\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = Popover.getOrCreateInstance(this, config);\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(`No method named \"${config}\"`);\n          }\n\n          data[config]();\n        }\n      });\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Popover to jQuery only if jQuery is present\n   */\n\n\n  defineJQueryPlugin(Popover);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): scrollspy.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$2 = 'scrollspy';\n  const DATA_KEY$2 = 'bs.scrollspy';\n  const EVENT_KEY$2 = `.${DATA_KEY$2}`;\n  const DATA_API_KEY$1 = '.data-api';\n  const Default$1 = {\n    offset: 10,\n    method: 'auto',\n    target: ''\n  };\n  const DefaultType$1 = {\n    offset: 'number',\n    method: 'string',\n    target: '(string|element)'\n  };\n  const EVENT_ACTIVATE = `activate${EVENT_KEY$2}`;\n  const EVENT_SCROLL = `scroll${EVENT_KEY$2}`;\n  const EVENT_LOAD_DATA_API = `load${EVENT_KEY$2}${DATA_API_KEY$1}`;\n  const CLASS_NAME_DROPDOWN_ITEM = 'dropdown-item';\n  const CLASS_NAME_ACTIVE$1 = 'active';\n  const SELECTOR_DATA_SPY = '[data-bs-spy=\"scroll\"]';\n  const SELECTOR_NAV_LIST_GROUP$1 = '.nav, .list-group';\n  const SELECTOR_NAV_LINKS = '.nav-link';\n  const SELECTOR_NAV_ITEMS = '.nav-item';\n  const SELECTOR_LIST_ITEMS = '.list-group-item';\n  const SELECTOR_DROPDOWN$1 = '.dropdown';\n  const SELECTOR_DROPDOWN_TOGGLE$1 = '.dropdown-toggle';\n  const METHOD_OFFSET = 'offset';\n  const METHOD_POSITION = 'position';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class ScrollSpy extends BaseComponent {\n    constructor(element, config) {\n      super(element);\n      this._scrollElement = this._element.tagName === 'BODY' ? window : this._element;\n      this._config = this._getConfig(config);\n      this._selector = `${this._config.target} ${SELECTOR_NAV_LINKS}, ${this._config.target} ${SELECTOR_LIST_ITEMS}, ${this._config.target} .${CLASS_NAME_DROPDOWN_ITEM}`;\n      this._offsets = [];\n      this._targets = [];\n      this._activeTarget = null;\n      this._scrollHeight = 0;\n      EventHandler.on(this._scrollElement, EVENT_SCROLL, () => this._process());\n      this.refresh();\n\n      this._process();\n    } // Getters\n\n\n    static get Default() {\n      return Default$1;\n    }\n\n    static get NAME() {\n      return NAME$2;\n    } // Public\n\n\n    refresh() {\n      const autoMethod = this._scrollElement === this._scrollElement.window ? METHOD_OFFSET : METHOD_POSITION;\n      const offsetMethod = this._config.method === 'auto' ? autoMethod : this._config.method;\n      const offsetBase = offsetMethod === METHOD_POSITION ? this._getScrollTop() : 0;\n      this._offsets = [];\n      this._targets = [];\n      this._scrollHeight = this._getScrollHeight();\n      const targets = SelectorEngine.find(this._selector);\n      targets.map(element => {\n        const targetSelector = getSelectorFromElement(element);\n        const target = targetSelector ? SelectorEngine.findOne(targetSelector) : null;\n\n        if (target) {\n          const targetBCR = target.getBoundingClientRect();\n\n          if (targetBCR.width || targetBCR.height) {\n            return [Manipulator[offsetMethod](target).top + offsetBase, targetSelector];\n          }\n        }\n\n        return null;\n      }).filter(item => item).sort((a, b) => a[0] - b[0]).forEach(item => {\n        this._offsets.push(item[0]);\n\n        this._targets.push(item[1]);\n      });\n    }\n\n    dispose() {\n      EventHandler.off(this._scrollElement, EVENT_KEY$2);\n      super.dispose();\n    } // Private\n\n\n    _getConfig(config) {\n      config = { ...Default$1,\n        ...Manipulator.getDataAttributes(this._element),\n        ...(typeof config === 'object' && config ? config : {})\n      };\n\n      if (typeof config.target !== 'string' && isElement$1(config.target)) {\n        let {\n          id\n        } = config.target;\n\n        if (!id) {\n          id = getUID(NAME$2);\n          config.target.id = id;\n        }\n\n        config.target = `#${id}`;\n      }\n\n      typeCheckConfig(NAME$2, config, DefaultType$1);\n      return config;\n    }\n\n    _getScrollTop() {\n      return this._scrollElement === window ? this._scrollElement.pageYOffset : this._scrollElement.scrollTop;\n    }\n\n    _getScrollHeight() {\n      return this._scrollElement.scrollHeight || Math.max(document.body.scrollHeight, document.documentElement.scrollHeight);\n    }\n\n    _getOffsetHeight() {\n      return this._scrollElement === window ? window.innerHeight : this._scrollElement.getBoundingClientRect().height;\n    }\n\n    _process() {\n      const scrollTop = this._getScrollTop() + this._config.offset;\n\n      const scrollHeight = this._getScrollHeight();\n\n      const maxScroll = this._config.offset + scrollHeight - this._getOffsetHeight();\n\n      if (this._scrollHeight !== scrollHeight) {\n        this.refresh();\n      }\n\n      if (scrollTop >= maxScroll) {\n        const target = this._targets[this._targets.length - 1];\n\n        if (this._activeTarget !== target) {\n          this._activate(target);\n        }\n\n        return;\n      }\n\n      if (this._activeTarget && scrollTop < this._offsets[0] && this._offsets[0] > 0) {\n        this._activeTarget = null;\n\n        this._clear();\n\n        return;\n      }\n\n      for (let i = this._offsets.length; i--;) {\n        const isActiveTarget = this._activeTarget !== this._targets[i] && scrollTop >= this._offsets[i] && (typeof this._offsets[i + 1] === 'undefined' || scrollTop < this._offsets[i + 1]);\n\n        if (isActiveTarget) {\n          this._activate(this._targets[i]);\n        }\n      }\n    }\n\n    _activate(target) {\n      this._activeTarget = target;\n\n      this._clear();\n\n      const queries = this._selector.split(',').map(selector => `${selector}[data-bs-target=\"${target}\"],${selector}[href=\"${target}\"]`);\n\n      const link = SelectorEngine.findOne(queries.join(','));\n\n      if (link.classList.contains(CLASS_NAME_DROPDOWN_ITEM)) {\n        SelectorEngine.findOne(SELECTOR_DROPDOWN_TOGGLE$1, link.closest(SELECTOR_DROPDOWN$1)).classList.add(CLASS_NAME_ACTIVE$1);\n        link.classList.add(CLASS_NAME_ACTIVE$1);\n      } else {\n        // Set triggered link as active\n        link.classList.add(CLASS_NAME_ACTIVE$1);\n        SelectorEngine.parents(link, SELECTOR_NAV_LIST_GROUP$1).forEach(listGroup => {\n          // Set triggered links parents as active\n          // With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor\n          SelectorEngine.prev(listGroup, `${SELECTOR_NAV_LINKS}, ${SELECTOR_LIST_ITEMS}`).forEach(item => item.classList.add(CLASS_NAME_ACTIVE$1)); // Handle special case when .nav-link is inside .nav-item\n\n          SelectorEngine.prev(listGroup, SELECTOR_NAV_ITEMS).forEach(navItem => {\n            SelectorEngine.children(navItem, SELECTOR_NAV_LINKS).forEach(item => item.classList.add(CLASS_NAME_ACTIVE$1));\n          });\n        });\n      }\n\n      EventHandler.trigger(this._scrollElement, EVENT_ACTIVATE, {\n        relatedTarget: target\n      });\n    }\n\n    _clear() {\n      SelectorEngine.find(this._selector).filter(node => node.classList.contains(CLASS_NAME_ACTIVE$1)).forEach(node => node.classList.remove(CLASS_NAME_ACTIVE$1));\n    } // Static\n\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = ScrollSpy.getOrCreateInstance(this, config);\n\n        if (typeof config !== 'string') {\n          return;\n        }\n\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config]();\n      });\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n    SelectorEngine.find(SELECTOR_DATA_SPY).forEach(spy => new ScrollSpy(spy));\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .ScrollSpy to jQuery only if jQuery is present\n   */\n\n  defineJQueryPlugin(ScrollSpy);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): tab.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME$1 = 'tab';\n  const DATA_KEY$1 = 'bs.tab';\n  const EVENT_KEY$1 = `.${DATA_KEY$1}`;\n  const DATA_API_KEY = '.data-api';\n  const EVENT_HIDE$1 = `hide${EVENT_KEY$1}`;\n  const EVENT_HIDDEN$1 = `hidden${EVENT_KEY$1}`;\n  const EVENT_SHOW$1 = `show${EVENT_KEY$1}`;\n  const EVENT_SHOWN$1 = `shown${EVENT_KEY$1}`;\n  const EVENT_CLICK_DATA_API = `click${EVENT_KEY$1}${DATA_API_KEY}`;\n  const CLASS_NAME_DROPDOWN_MENU = 'dropdown-menu';\n  const CLASS_NAME_ACTIVE = 'active';\n  const CLASS_NAME_FADE$1 = 'fade';\n  const CLASS_NAME_SHOW$1 = 'show';\n  const SELECTOR_DROPDOWN = '.dropdown';\n  const SELECTOR_NAV_LIST_GROUP = '.nav, .list-group';\n  const SELECTOR_ACTIVE = '.active';\n  const SELECTOR_ACTIVE_UL = ':scope > li > .active';\n  const SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"tab\"], [data-bs-toggle=\"pill\"], [data-bs-toggle=\"list\"]';\n  const SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle';\n  const SELECTOR_DROPDOWN_ACTIVE_CHILD = ':scope > .dropdown-menu .active';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Tab extends BaseComponent {\n    // Getters\n    static get NAME() {\n      return NAME$1;\n    } // Public\n\n\n    show() {\n      if (this._element.parentNode && this._element.parentNode.nodeType === Node.ELEMENT_NODE && this._element.classList.contains(CLASS_NAME_ACTIVE)) {\n        return;\n      }\n\n      let previous;\n      const target = getElementFromSelector(this._element);\n\n      const listElement = this._element.closest(SELECTOR_NAV_LIST_GROUP);\n\n      if (listElement) {\n        const itemSelector = listElement.nodeName === 'UL' || listElement.nodeName === 'OL' ? SELECTOR_ACTIVE_UL : SELECTOR_ACTIVE;\n        previous = SelectorEngine.find(itemSelector, listElement);\n        previous = previous[previous.length - 1];\n      }\n\n      const hideEvent = previous ? EventHandler.trigger(previous, EVENT_HIDE$1, {\n        relatedTarget: this._element\n      }) : null;\n      const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$1, {\n        relatedTarget: previous\n      });\n\n      if (showEvent.defaultPrevented || hideEvent !== null && hideEvent.defaultPrevented) {\n        return;\n      }\n\n      this._activate(this._element, listElement);\n\n      const complete = () => {\n        EventHandler.trigger(previous, EVENT_HIDDEN$1, {\n          relatedTarget: this._element\n        });\n        EventHandler.trigger(this._element, EVENT_SHOWN$1, {\n          relatedTarget: previous\n        });\n      };\n\n      if (target) {\n        this._activate(target, target.parentNode, complete);\n      } else {\n        complete();\n      }\n    } // Private\n\n\n    _activate(element, container, callback) {\n      const activeElements = container && (container.nodeName === 'UL' || container.nodeName === 'OL') ? SelectorEngine.find(SELECTOR_ACTIVE_UL, container) : SelectorEngine.children(container, SELECTOR_ACTIVE);\n      const active = activeElements[0];\n      const isTransitioning = callback && active && active.classList.contains(CLASS_NAME_FADE$1);\n\n      const complete = () => this._transitionComplete(element, active, callback);\n\n      if (active && isTransitioning) {\n        active.classList.remove(CLASS_NAME_SHOW$1);\n\n        this._queueCallback(complete, element, true);\n      } else {\n        complete();\n      }\n    }\n\n    _transitionComplete(element, active, callback) {\n      if (active) {\n        active.classList.remove(CLASS_NAME_ACTIVE);\n        const dropdownChild = SelectorEngine.findOne(SELECTOR_DROPDOWN_ACTIVE_CHILD, active.parentNode);\n\n        if (dropdownChild) {\n          dropdownChild.classList.remove(CLASS_NAME_ACTIVE);\n        }\n\n        if (active.getAttribute('role') === 'tab') {\n          active.setAttribute('aria-selected', false);\n        }\n      }\n\n      element.classList.add(CLASS_NAME_ACTIVE);\n\n      if (element.getAttribute('role') === 'tab') {\n        element.setAttribute('aria-selected', true);\n      }\n\n      reflow(element);\n\n      if (element.classList.contains(CLASS_NAME_FADE$1)) {\n        element.classList.add(CLASS_NAME_SHOW$1);\n      }\n\n      let parent = element.parentNode;\n\n      if (parent && parent.nodeName === 'LI') {\n        parent = parent.parentNode;\n      }\n\n      if (parent && parent.classList.contains(CLASS_NAME_DROPDOWN_MENU)) {\n        const dropdownElement = element.closest(SELECTOR_DROPDOWN);\n\n        if (dropdownElement) {\n          SelectorEngine.find(SELECTOR_DROPDOWN_TOGGLE, dropdownElement).forEach(dropdown => dropdown.classList.add(CLASS_NAME_ACTIVE));\n        }\n\n        element.setAttribute('aria-expanded', true);\n      }\n\n      if (callback) {\n        callback();\n      }\n    } // Static\n\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = Tab.getOrCreateInstance(this);\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(`No method named \"${config}\"`);\n          }\n\n          data[config]();\n        }\n      });\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n    if (['A', 'AREA'].includes(this.tagName)) {\n      event.preventDefault();\n    }\n\n    if (isDisabled(this)) {\n      return;\n    }\n\n    const data = Tab.getOrCreateInstance(this);\n    data.show();\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Tab to jQuery only if jQuery is present\n   */\n\n  defineJQueryPlugin(Tab);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): toast.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME = 'toast';\n  const DATA_KEY = 'bs.toast';\n  const EVENT_KEY = `.${DATA_KEY}`;\n  const EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY}`;\n  const EVENT_MOUSEOVER = `mouseover${EVENT_KEY}`;\n  const EVENT_MOUSEOUT = `mouseout${EVENT_KEY}`;\n  const EVENT_FOCUSIN = `focusin${EVENT_KEY}`;\n  const EVENT_FOCUSOUT = `focusout${EVENT_KEY}`;\n  const EVENT_HIDE = `hide${EVENT_KEY}`;\n  const EVENT_HIDDEN = `hidden${EVENT_KEY}`;\n  const EVENT_SHOW = `show${EVENT_KEY}`;\n  const EVENT_SHOWN = `shown${EVENT_KEY}`;\n  const CLASS_NAME_FADE = 'fade';\n  const CLASS_NAME_HIDE = 'hide';\n  const CLASS_NAME_SHOW = 'show';\n  const CLASS_NAME_SHOWING = 'showing';\n  const DefaultType = {\n    animation: 'boolean',\n    autohide: 'boolean',\n    delay: 'number'\n  };\n  const Default = {\n    animation: true,\n    autohide: true,\n    delay: 5000\n  };\n  const SELECTOR_DATA_DISMISS = '[data-bs-dismiss=\"toast\"]';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Toast extends BaseComponent {\n    constructor(element, config) {\n      super(element);\n      this._config = this._getConfig(config);\n      this._timeout = null;\n      this._hasMouseInteraction = false;\n      this._hasKeyboardInteraction = false;\n\n      this._setListeners();\n    } // Getters\n\n\n    static get DefaultType() {\n      return DefaultType;\n    }\n\n    static get Default() {\n      return Default;\n    }\n\n    static get NAME() {\n      return NAME;\n    } // Public\n\n\n    show() {\n      const showEvent = EventHandler.trigger(this._element, EVENT_SHOW);\n\n      if (showEvent.defaultPrevented) {\n        return;\n      }\n\n      this._clearTimeout();\n\n      if (this._config.animation) {\n        this._element.classList.add(CLASS_NAME_FADE);\n      }\n\n      const complete = () => {\n        this._element.classList.remove(CLASS_NAME_SHOWING);\n\n        this._element.classList.add(CLASS_NAME_SHOW);\n\n        EventHandler.trigger(this._element, EVENT_SHOWN);\n\n        this._maybeScheduleHide();\n      };\n\n      this._element.classList.remove(CLASS_NAME_HIDE);\n\n      reflow(this._element);\n\n      this._element.classList.add(CLASS_NAME_SHOWING);\n\n      this._queueCallback(complete, this._element, this._config.animation);\n    }\n\n    hide() {\n      if (!this._element.classList.contains(CLASS_NAME_SHOW)) {\n        return;\n      }\n\n      const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE);\n\n      if (hideEvent.defaultPrevented) {\n        return;\n      }\n\n      const complete = () => {\n        this._element.classList.add(CLASS_NAME_HIDE);\n\n        EventHandler.trigger(this._element, EVENT_HIDDEN);\n      };\n\n      this._element.classList.remove(CLASS_NAME_SHOW);\n\n      this._queueCallback(complete, this._element, this._config.animation);\n    }\n\n    dispose() {\n      this._clearTimeout();\n\n      if (this._element.classList.contains(CLASS_NAME_SHOW)) {\n        this._element.classList.remove(CLASS_NAME_SHOW);\n      }\n\n      super.dispose();\n    } // Private\n\n\n    _getConfig(config) {\n      config = { ...Default,\n        ...Manipulator.getDataAttributes(this._element),\n        ...(typeof config === 'object' && config ? config : {})\n      };\n      typeCheckConfig(NAME, config, this.constructor.DefaultType);\n      return config;\n    }\n\n    _maybeScheduleHide() {\n      if (!this._config.autohide) {\n        return;\n      }\n\n      if (this._hasMouseInteraction || this._hasKeyboardInteraction) {\n        return;\n      }\n\n      this._timeout = setTimeout(() => {\n        this.hide();\n      }, this._config.delay);\n    }\n\n    _onInteraction(event, isInteracting) {\n      switch (event.type) {\n        case 'mouseover':\n        case 'mouseout':\n          this._hasMouseInteraction = isInteracting;\n          break;\n\n        case 'focusin':\n        case 'focusout':\n          this._hasKeyboardInteraction = isInteracting;\n          break;\n      }\n\n      if (isInteracting) {\n        this._clearTimeout();\n\n        return;\n      }\n\n      const nextElement = event.relatedTarget;\n\n      if (this._element === nextElement || this._element.contains(nextElement)) {\n        return;\n      }\n\n      this._maybeScheduleHide();\n    }\n\n    _setListeners() {\n      EventHandler.on(this._element, EVENT_CLICK_DISMISS, SELECTOR_DATA_DISMISS, () => this.hide());\n      EventHandler.on(this._element, EVENT_MOUSEOVER, event => this._onInteraction(event, true));\n      EventHandler.on(this._element, EVENT_MOUSEOUT, event => this._onInteraction(event, false));\n      EventHandler.on(this._element, EVENT_FOCUSIN, event => this._onInteraction(event, true));\n      EventHandler.on(this._element, EVENT_FOCUSOUT, event => this._onInteraction(event, false));\n    }\n\n    _clearTimeout() {\n      clearTimeout(this._timeout);\n      this._timeout = null;\n    } // Static\n\n\n    static jQueryInterface(config) {\n      return this.each(function () {\n        const data = Toast.getOrCreateInstance(this, config);\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(`No method named \"${config}\"`);\n          }\n\n          data[config](this);\n        }\n      });\n    }\n\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   * add .Toast to jQuery only if jQuery is present\n   */\n\n\n  defineJQueryPlugin(Toast);\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v5.0.2): index.umd.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  var index_umd = {\n    Alert,\n    Button,\n    Carousel,\n    Collapse,\n    Dropdown,\n    Modal,\n    Offcanvas,\n    Popover,\n    ScrollSpy,\n    Tab,\n    Toast,\n    Tooltip\n  };\n\n  return index_umd;\n\n})));\n//# sourceMappingURL=bootstrap.bundle.js.map\n"
  },
  {
    "path": "src/sourceDev.WebApp/wwwroot/js/bootstrap.esm.js",
    "content": "/*!\n  * Bootstrap v5.0.2 (https://getbootstrap.com/)\n  * Copyright 2011-2021 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)\n  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n  */\nimport * as Popper from '@popperjs/core';\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): dom/selector-engine.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\nconst NODE_TEXT = 3;\nconst SelectorEngine = {\n  find(selector, element = document.documentElement) {\n    return [].concat(...Element.prototype.querySelectorAll.call(element, selector));\n  },\n\n  findOne(selector, element = document.documentElement) {\n    return Element.prototype.querySelector.call(element, selector);\n  },\n\n  children(element, selector) {\n    return [].concat(...element.children).filter(child => child.matches(selector));\n  },\n\n  parents(element, selector) {\n    const parents = [];\n    let ancestor = element.parentNode;\n\n    while (ancestor && ancestor.nodeType === Node.ELEMENT_NODE && ancestor.nodeType !== NODE_TEXT) {\n      if (ancestor.matches(selector)) {\n        parents.push(ancestor);\n      }\n\n      ancestor = ancestor.parentNode;\n    }\n\n    return parents;\n  },\n\n  prev(element, selector) {\n    let previous = element.previousElementSibling;\n\n    while (previous) {\n      if (previous.matches(selector)) {\n        return [previous];\n      }\n\n      previous = previous.previousElementSibling;\n    }\n\n    return [];\n  },\n\n  next(element, selector) {\n    let next = element.nextElementSibling;\n\n    while (next) {\n      if (next.matches(selector)) {\n        return [next];\n      }\n\n      next = next.nextElementSibling;\n    }\n\n    return [];\n  }\n\n};\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): util/index.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst MAX_UID = 1000000;\nconst MILLISECONDS_MULTIPLIER = 1000;\nconst TRANSITION_END = 'transitionend'; // Shoutout AngusCroll (https://goo.gl/pxwQGp)\n\nconst toType = obj => {\n  if (obj === null || obj === undefined) {\n    return `${obj}`;\n  }\n\n  return {}.toString.call(obj).match(/\\s([a-z]+)/i)[1].toLowerCase();\n};\n/**\n * --------------------------------------------------------------------------\n * Public Util Api\n * --------------------------------------------------------------------------\n */\n\n\nconst getUID = prefix => {\n  do {\n    prefix += Math.floor(Math.random() * MAX_UID);\n  } while (document.getElementById(prefix));\n\n  return prefix;\n};\n\nconst getSelector = element => {\n  let selector = element.getAttribute('data-bs-target');\n\n  if (!selector || selector === '#') {\n    let hrefAttr = element.getAttribute('href'); // The only valid content that could double as a selector are IDs or classes,\n    // so everything starting with `#` or `.`. If a \"real\" URL is used as the selector,\n    // `document.querySelector` will rightfully complain it is invalid.\n    // See https://github.com/twbs/bootstrap/issues/32273\n\n    if (!hrefAttr || !hrefAttr.includes('#') && !hrefAttr.startsWith('.')) {\n      return null;\n    } // Just in case some CMS puts out a full URL with the anchor appended\n\n\n    if (hrefAttr.includes('#') && !hrefAttr.startsWith('#')) {\n      hrefAttr = `#${hrefAttr.split('#')[1]}`;\n    }\n\n    selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : null;\n  }\n\n  return selector;\n};\n\nconst getSelectorFromElement = element => {\n  const selector = getSelector(element);\n\n  if (selector) {\n    return document.querySelector(selector) ? selector : null;\n  }\n\n  return null;\n};\n\nconst getElementFromSelector = element => {\n  const selector = getSelector(element);\n  return selector ? document.querySelector(selector) : null;\n};\n\nconst getTransitionDurationFromElement = element => {\n  if (!element) {\n    return 0;\n  } // Get transition-duration of the element\n\n\n  let {\n    transitionDuration,\n    transitionDelay\n  } = window.getComputedStyle(element);\n  const floatTransitionDuration = Number.parseFloat(transitionDuration);\n  const floatTransitionDelay = Number.parseFloat(transitionDelay); // Return 0 if element or transition duration is not found\n\n  if (!floatTransitionDuration && !floatTransitionDelay) {\n    return 0;\n  } // If multiple durations are defined, take the first\n\n\n  transitionDuration = transitionDuration.split(',')[0];\n  transitionDelay = transitionDelay.split(',')[0];\n  return (Number.parseFloat(transitionDuration) + Number.parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER;\n};\n\nconst triggerTransitionEnd = element => {\n  element.dispatchEvent(new Event(TRANSITION_END));\n};\n\nconst isElement = obj => {\n  if (!obj || typeof obj !== 'object') {\n    return false;\n  }\n\n  if (typeof obj.jquery !== 'undefined') {\n    obj = obj[0];\n  }\n\n  return typeof obj.nodeType !== 'undefined';\n};\n\nconst getElement = obj => {\n  if (isElement(obj)) {\n    // it's a jQuery object or a node element\n    return obj.jquery ? obj[0] : obj;\n  }\n\n  if (typeof obj === 'string' && obj.length > 0) {\n    return SelectorEngine.findOne(obj);\n  }\n\n  return null;\n};\n\nconst typeCheckConfig = (componentName, config, configTypes) => {\n  Object.keys(configTypes).forEach(property => {\n    const expectedTypes = configTypes[property];\n    const value = config[property];\n    const valueType = value && isElement(value) ? 'element' : toType(value);\n\n    if (!new RegExp(expectedTypes).test(valueType)) {\n      throw new TypeError(`${componentName.toUpperCase()}: Option \"${property}\" provided type \"${valueType}\" but expected type \"${expectedTypes}\".`);\n    }\n  });\n};\n\nconst isVisible = element => {\n  if (!isElement(element) || element.getClientRects().length === 0) {\n    return false;\n  }\n\n  return getComputedStyle(element).getPropertyValue('visibility') === 'visible';\n};\n\nconst isDisabled = element => {\n  if (!element || element.nodeType !== Node.ELEMENT_NODE) {\n    return true;\n  }\n\n  if (element.classList.contains('disabled')) {\n    return true;\n  }\n\n  if (typeof element.disabled !== 'undefined') {\n    return element.disabled;\n  }\n\n  return element.hasAttribute('disabled') && element.getAttribute('disabled') !== 'false';\n};\n\nconst findShadowRoot = element => {\n  if (!document.documentElement.attachShadow) {\n    return null;\n  } // Can find the shadow root otherwise it'll return the document\n\n\n  if (typeof element.getRootNode === 'function') {\n    const root = element.getRootNode();\n    return root instanceof ShadowRoot ? root : null;\n  }\n\n  if (element instanceof ShadowRoot) {\n    return element;\n  } // when we don't find a shadow root\n\n\n  if (!element.parentNode) {\n    return null;\n  }\n\n  return findShadowRoot(element.parentNode);\n};\n\nconst noop = () => {};\n\nconst reflow = element => element.offsetHeight;\n\nconst getjQuery = () => {\n  const {\n    jQuery\n  } = window;\n\n  if (jQuery && !document.body.hasAttribute('data-bs-no-jquery')) {\n    return jQuery;\n  }\n\n  return null;\n};\n\nconst DOMContentLoadedCallbacks = [];\n\nconst onDOMContentLoaded = callback => {\n  if (document.readyState === 'loading') {\n    // add listener on the first call when the document is in loading state\n    if (!DOMContentLoadedCallbacks.length) {\n      document.addEventListener('DOMContentLoaded', () => {\n        DOMContentLoadedCallbacks.forEach(callback => callback());\n      });\n    }\n\n    DOMContentLoadedCallbacks.push(callback);\n  } else {\n    callback();\n  }\n};\n\nconst isRTL = () => document.documentElement.dir === 'rtl';\n\nconst defineJQueryPlugin = plugin => {\n  onDOMContentLoaded(() => {\n    const $ = getjQuery();\n    /* istanbul ignore if */\n\n    if ($) {\n      const name = plugin.NAME;\n      const JQUERY_NO_CONFLICT = $.fn[name];\n      $.fn[name] = plugin.jQueryInterface;\n      $.fn[name].Constructor = plugin;\n\n      $.fn[name].noConflict = () => {\n        $.fn[name] = JQUERY_NO_CONFLICT;\n        return plugin.jQueryInterface;\n      };\n    }\n  });\n};\n\nconst execute = callback => {\n  if (typeof callback === 'function') {\n    callback();\n  }\n};\n\nconst executeAfterTransition = (callback, transitionElement, waitForTransition = true) => {\n  if (!waitForTransition) {\n    execute(callback);\n    return;\n  }\n\n  const durationPadding = 5;\n  const emulatedDuration = getTransitionDurationFromElement(transitionElement) + durationPadding;\n  let called = false;\n\n  const handler = ({\n    target\n  }) => {\n    if (target !== transitionElement) {\n      return;\n    }\n\n    called = true;\n    transitionElement.removeEventListener(TRANSITION_END, handler);\n    execute(callback);\n  };\n\n  transitionElement.addEventListener(TRANSITION_END, handler);\n  setTimeout(() => {\n    if (!called) {\n      triggerTransitionEnd(transitionElement);\n    }\n  }, emulatedDuration);\n};\n/**\n * Return the previous/next element of a list.\n *\n * @param {array} list    The list of elements\n * @param activeElement   The active element\n * @param shouldGetNext   Choose to get next or previous element\n * @param isCycleAllowed\n * @return {Element|elem} The proper element\n */\n\n\nconst getNextActiveElement = (list, activeElement, shouldGetNext, isCycleAllowed) => {\n  let index = list.indexOf(activeElement); // if the element does not exist in the list return an element depending on the direction and if cycle is allowed\n\n  if (index === -1) {\n    return list[!shouldGetNext && isCycleAllowed ? list.length - 1 : 0];\n  }\n\n  const listLength = list.length;\n  index += shouldGetNext ? 1 : -1;\n\n  if (isCycleAllowed) {\n    index = (index + listLength) % listLength;\n  }\n\n  return list[Math.max(0, Math.min(index, listLength - 1))];\n};\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): dom/event-handler.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst namespaceRegex = /[^.]*(?=\\..*)\\.|.*/;\nconst stripNameRegex = /\\..*/;\nconst stripUidRegex = /::\\d+$/;\nconst eventRegistry = {}; // Events storage\n\nlet uidEvent = 1;\nconst customEvents = {\n  mouseenter: 'mouseover',\n  mouseleave: 'mouseout'\n};\nconst customEventsRegex = /^(mouseenter|mouseleave)/i;\nconst nativeEvents = new Set(['click', 'dblclick', 'mouseup', 'mousedown', 'contextmenu', 'mousewheel', 'DOMMouseScroll', 'mouseover', 'mouseout', 'mousemove', 'selectstart', 'selectend', 'keydown', 'keypress', 'keyup', 'orientationchange', 'touchstart', 'touchmove', 'touchend', 'touchcancel', 'pointerdown', 'pointermove', 'pointerup', 'pointerleave', 'pointercancel', 'gesturestart', 'gesturechange', 'gestureend', 'focus', 'blur', 'change', 'reset', 'select', 'submit', 'focusin', 'focusout', 'load', 'unload', 'beforeunload', 'resize', 'move', 'DOMContentLoaded', 'readystatechange', 'error', 'abort', 'scroll']);\n/**\n * ------------------------------------------------------------------------\n * Private methods\n * ------------------------------------------------------------------------\n */\n\nfunction getUidEvent(element, uid) {\n  return uid && `${uid}::${uidEvent++}` || element.uidEvent || uidEvent++;\n}\n\nfunction getEvent(element) {\n  const uid = getUidEvent(element);\n  element.uidEvent = uid;\n  eventRegistry[uid] = eventRegistry[uid] || {};\n  return eventRegistry[uid];\n}\n\nfunction bootstrapHandler(element, fn) {\n  return function handler(event) {\n    event.delegateTarget = element;\n\n    if (handler.oneOff) {\n      EventHandler.off(element, event.type, fn);\n    }\n\n    return fn.apply(element, [event]);\n  };\n}\n\nfunction bootstrapDelegationHandler(element, selector, fn) {\n  return function handler(event) {\n    const domElements = element.querySelectorAll(selector);\n\n    for (let {\n      target\n    } = event; target && target !== this; target = target.parentNode) {\n      for (let i = domElements.length; i--;) {\n        if (domElements[i] === target) {\n          event.delegateTarget = target;\n\n          if (handler.oneOff) {\n            // eslint-disable-next-line unicorn/consistent-destructuring\n            EventHandler.off(element, event.type, selector, fn);\n          }\n\n          return fn.apply(target, [event]);\n        }\n      }\n    } // To please ESLint\n\n\n    return null;\n  };\n}\n\nfunction findHandler(events, handler, delegationSelector = null) {\n  const uidEventList = Object.keys(events);\n\n  for (let i = 0, len = uidEventList.length; i < len; i++) {\n    const event = events[uidEventList[i]];\n\n    if (event.originalHandler === handler && event.delegationSelector === delegationSelector) {\n      return event;\n    }\n  }\n\n  return null;\n}\n\nfunction normalizeParams(originalTypeEvent, handler, delegationFn) {\n  const delegation = typeof handler === 'string';\n  const originalHandler = delegation ? delegationFn : handler;\n  let typeEvent = getTypeEvent(originalTypeEvent);\n  const isNative = nativeEvents.has(typeEvent);\n\n  if (!isNative) {\n    typeEvent = originalTypeEvent;\n  }\n\n  return [delegation, originalHandler, typeEvent];\n}\n\nfunction addHandler(element, originalTypeEvent, handler, delegationFn, oneOff) {\n  if (typeof originalTypeEvent !== 'string' || !element) {\n    return;\n  }\n\n  if (!handler) {\n    handler = delegationFn;\n    delegationFn = null;\n  } // in case of mouseenter or mouseleave wrap the handler within a function that checks for its DOM position\n  // this prevents the handler from being dispatched the same way as mouseover or mouseout does\n\n\n  if (customEventsRegex.test(originalTypeEvent)) {\n    const wrapFn = fn => {\n      return function (event) {\n        if (!event.relatedTarget || event.relatedTarget !== event.delegateTarget && !event.delegateTarget.contains(event.relatedTarget)) {\n          return fn.call(this, event);\n        }\n      };\n    };\n\n    if (delegationFn) {\n      delegationFn = wrapFn(delegationFn);\n    } else {\n      handler = wrapFn(handler);\n    }\n  }\n\n  const [delegation, originalHandler, typeEvent] = normalizeParams(originalTypeEvent, handler, delegationFn);\n  const events = getEvent(element);\n  const handlers = events[typeEvent] || (events[typeEvent] = {});\n  const previousFn = findHandler(handlers, originalHandler, delegation ? handler : null);\n\n  if (previousFn) {\n    previousFn.oneOff = previousFn.oneOff && oneOff;\n    return;\n  }\n\n  const uid = getUidEvent(originalHandler, originalTypeEvent.replace(namespaceRegex, ''));\n  const fn = delegation ? bootstrapDelegationHandler(element, handler, delegationFn) : bootstrapHandler(element, handler);\n  fn.delegationSelector = delegation ? handler : null;\n  fn.originalHandler = originalHandler;\n  fn.oneOff = oneOff;\n  fn.uidEvent = uid;\n  handlers[uid] = fn;\n  element.addEventListener(typeEvent, fn, delegation);\n}\n\nfunction removeHandler(element, events, typeEvent, handler, delegationSelector) {\n  const fn = findHandler(events[typeEvent], handler, delegationSelector);\n\n  if (!fn) {\n    return;\n  }\n\n  element.removeEventListener(typeEvent, fn, Boolean(delegationSelector));\n  delete events[typeEvent][fn.uidEvent];\n}\n\nfunction removeNamespacedHandlers(element, events, typeEvent, namespace) {\n  const storeElementEvent = events[typeEvent] || {};\n  Object.keys(storeElementEvent).forEach(handlerKey => {\n    if (handlerKey.includes(namespace)) {\n      const event = storeElementEvent[handlerKey];\n      removeHandler(element, events, typeEvent, event.originalHandler, event.delegationSelector);\n    }\n  });\n}\n\nfunction getTypeEvent(event) {\n  // allow to get the native events from namespaced events ('click.bs.button' --> 'click')\n  event = event.replace(stripNameRegex, '');\n  return customEvents[event] || event;\n}\n\nconst EventHandler = {\n  on(element, event, handler, delegationFn) {\n    addHandler(element, event, handler, delegationFn, false);\n  },\n\n  one(element, event, handler, delegationFn) {\n    addHandler(element, event, handler, delegationFn, true);\n  },\n\n  off(element, originalTypeEvent, handler, delegationFn) {\n    if (typeof originalTypeEvent !== 'string' || !element) {\n      return;\n    }\n\n    const [delegation, originalHandler, typeEvent] = normalizeParams(originalTypeEvent, handler, delegationFn);\n    const inNamespace = typeEvent !== originalTypeEvent;\n    const events = getEvent(element);\n    const isNamespace = originalTypeEvent.startsWith('.');\n\n    if (typeof originalHandler !== 'undefined') {\n      // Simplest case: handler is passed, remove that listener ONLY.\n      if (!events || !events[typeEvent]) {\n        return;\n      }\n\n      removeHandler(element, events, typeEvent, originalHandler, delegation ? handler : null);\n      return;\n    }\n\n    if (isNamespace) {\n      Object.keys(events).forEach(elementEvent => {\n        removeNamespacedHandlers(element, events, elementEvent, originalTypeEvent.slice(1));\n      });\n    }\n\n    const storeElementEvent = events[typeEvent] || {};\n    Object.keys(storeElementEvent).forEach(keyHandlers => {\n      const handlerKey = keyHandlers.replace(stripUidRegex, '');\n\n      if (!inNamespace || originalTypeEvent.includes(handlerKey)) {\n        const event = storeElementEvent[keyHandlers];\n        removeHandler(element, events, typeEvent, event.originalHandler, event.delegationSelector);\n      }\n    });\n  },\n\n  trigger(element, event, args) {\n    if (typeof event !== 'string' || !element) {\n      return null;\n    }\n\n    const $ = getjQuery();\n    const typeEvent = getTypeEvent(event);\n    const inNamespace = event !== typeEvent;\n    const isNative = nativeEvents.has(typeEvent);\n    let jQueryEvent;\n    let bubbles = true;\n    let nativeDispatch = true;\n    let defaultPrevented = false;\n    let evt = null;\n\n    if (inNamespace && $) {\n      jQueryEvent = $.Event(event, args);\n      $(element).trigger(jQueryEvent);\n      bubbles = !jQueryEvent.isPropagationStopped();\n      nativeDispatch = !jQueryEvent.isImmediatePropagationStopped();\n      defaultPrevented = jQueryEvent.isDefaultPrevented();\n    }\n\n    if (isNative) {\n      evt = document.createEvent('HTMLEvents');\n      evt.initEvent(typeEvent, bubbles, true);\n    } else {\n      evt = new CustomEvent(event, {\n        bubbles,\n        cancelable: true\n      });\n    } // merge custom information in our event\n\n\n    if (typeof args !== 'undefined') {\n      Object.keys(args).forEach(key => {\n        Object.defineProperty(evt, key, {\n          get() {\n            return args[key];\n          }\n\n        });\n      });\n    }\n\n    if (defaultPrevented) {\n      evt.preventDefault();\n    }\n\n    if (nativeDispatch) {\n      element.dispatchEvent(evt);\n    }\n\n    if (evt.defaultPrevented && typeof jQueryEvent !== 'undefined') {\n      jQueryEvent.preventDefault();\n    }\n\n    return evt;\n  }\n\n};\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): dom/data.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\nconst elementMap = new Map();\nvar Data = {\n  set(element, key, instance) {\n    if (!elementMap.has(element)) {\n      elementMap.set(element, new Map());\n    }\n\n    const instanceMap = elementMap.get(element); // make it clear we only want one instance per element\n    // can be removed later when multiple key/instances are fine to be used\n\n    if (!instanceMap.has(key) && instanceMap.size !== 0) {\n      // eslint-disable-next-line no-console\n      console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(instanceMap.keys())[0]}.`);\n      return;\n    }\n\n    instanceMap.set(key, instance);\n  },\n\n  get(element, key) {\n    if (elementMap.has(element)) {\n      return elementMap.get(element).get(key) || null;\n    }\n\n    return null;\n  },\n\n  remove(element, key) {\n    if (!elementMap.has(element)) {\n      return;\n    }\n\n    const instanceMap = elementMap.get(element);\n    instanceMap.delete(key); // free up element references if there are no instances left for an element\n\n    if (instanceMap.size === 0) {\n      elementMap.delete(element);\n    }\n  }\n\n};\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): base-component.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst VERSION = '5.0.2';\n\nclass BaseComponent {\n  constructor(element) {\n    element = getElement(element);\n\n    if (!element) {\n      return;\n    }\n\n    this._element = element;\n    Data.set(this._element, this.constructor.DATA_KEY, this);\n  }\n\n  dispose() {\n    Data.remove(this._element, this.constructor.DATA_KEY);\n    EventHandler.off(this._element, this.constructor.EVENT_KEY);\n    Object.getOwnPropertyNames(this).forEach(propertyName => {\n      this[propertyName] = null;\n    });\n  }\n\n  _queueCallback(callback, element, isAnimated = true) {\n    executeAfterTransition(callback, element, isAnimated);\n  }\n  /** Static */\n\n\n  static getInstance(element) {\n    return Data.get(element, this.DATA_KEY);\n  }\n\n  static getOrCreateInstance(element, config = {}) {\n    return this.getInstance(element) || new this(element, typeof config === 'object' ? config : null);\n  }\n\n  static get VERSION() {\n    return VERSION;\n  }\n\n  static get NAME() {\n    throw new Error('You have to implement the static method \"NAME\", for each component!');\n  }\n\n  static get DATA_KEY() {\n    return `bs.${this.NAME}`;\n  }\n\n  static get EVENT_KEY() {\n    return `.${this.DATA_KEY}`;\n  }\n\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): alert.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$c = 'alert';\nconst DATA_KEY$b = 'bs.alert';\nconst EVENT_KEY$b = `.${DATA_KEY$b}`;\nconst DATA_API_KEY$8 = '.data-api';\nconst SELECTOR_DISMISS = '[data-bs-dismiss=\"alert\"]';\nconst EVENT_CLOSE = `close${EVENT_KEY$b}`;\nconst EVENT_CLOSED = `closed${EVENT_KEY$b}`;\nconst EVENT_CLICK_DATA_API$7 = `click${EVENT_KEY$b}${DATA_API_KEY$8}`;\nconst CLASS_NAME_ALERT = 'alert';\nconst CLASS_NAME_FADE$6 = 'fade';\nconst CLASS_NAME_SHOW$9 = 'show';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Alert extends BaseComponent {\n  // Getters\n  static get NAME() {\n    return NAME$c;\n  } // Public\n\n\n  close(element) {\n    const rootElement = element ? this._getRootElement(element) : this._element;\n\n    const customEvent = this._triggerCloseEvent(rootElement);\n\n    if (customEvent === null || customEvent.defaultPrevented) {\n      return;\n    }\n\n    this._removeElement(rootElement);\n  } // Private\n\n\n  _getRootElement(element) {\n    return getElementFromSelector(element) || element.closest(`.${CLASS_NAME_ALERT}`);\n  }\n\n  _triggerCloseEvent(element) {\n    return EventHandler.trigger(element, EVENT_CLOSE);\n  }\n\n  _removeElement(element) {\n    element.classList.remove(CLASS_NAME_SHOW$9);\n    const isAnimated = element.classList.contains(CLASS_NAME_FADE$6);\n\n    this._queueCallback(() => this._destroyElement(element), element, isAnimated);\n  }\n\n  _destroyElement(element) {\n    element.remove();\n    EventHandler.trigger(element, EVENT_CLOSED);\n  } // Static\n\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Alert.getOrCreateInstance(this);\n\n      if (config === 'close') {\n        data[config](this);\n      }\n    });\n  }\n\n  static handleDismiss(alertInstance) {\n    return function (event) {\n      if (event) {\n        event.preventDefault();\n      }\n\n      alertInstance.close(this);\n    };\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$7, SELECTOR_DISMISS, Alert.handleDismiss(new Alert()));\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Alert to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Alert);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): button.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$b = 'button';\nconst DATA_KEY$a = 'bs.button';\nconst EVENT_KEY$a = `.${DATA_KEY$a}`;\nconst DATA_API_KEY$7 = '.data-api';\nconst CLASS_NAME_ACTIVE$3 = 'active';\nconst SELECTOR_DATA_TOGGLE$5 = '[data-bs-toggle=\"button\"]';\nconst EVENT_CLICK_DATA_API$6 = `click${EVENT_KEY$a}${DATA_API_KEY$7}`;\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Button extends BaseComponent {\n  // Getters\n  static get NAME() {\n    return NAME$b;\n  } // Public\n\n\n  toggle() {\n    // Toggle class and sync the `aria-pressed` attribute with the return value of the `.toggle()` method\n    this._element.setAttribute('aria-pressed', this._element.classList.toggle(CLASS_NAME_ACTIVE$3));\n  } // Static\n\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Button.getOrCreateInstance(this);\n\n      if (config === 'toggle') {\n        data[config]();\n      }\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$6, SELECTOR_DATA_TOGGLE$5, event => {\n  event.preventDefault();\n  const button = event.target.closest(SELECTOR_DATA_TOGGLE$5);\n  const data = Button.getOrCreateInstance(button);\n  data.toggle();\n});\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Button to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Button);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): dom/manipulator.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\nfunction normalizeData(val) {\n  if (val === 'true') {\n    return true;\n  }\n\n  if (val === 'false') {\n    return false;\n  }\n\n  if (val === Number(val).toString()) {\n    return Number(val);\n  }\n\n  if (val === '' || val === 'null') {\n    return null;\n  }\n\n  return val;\n}\n\nfunction normalizeDataKey(key) {\n  return key.replace(/[A-Z]/g, chr => `-${chr.toLowerCase()}`);\n}\n\nconst Manipulator = {\n  setDataAttribute(element, key, value) {\n    element.setAttribute(`data-bs-${normalizeDataKey(key)}`, value);\n  },\n\n  removeDataAttribute(element, key) {\n    element.removeAttribute(`data-bs-${normalizeDataKey(key)}`);\n  },\n\n  getDataAttributes(element) {\n    if (!element) {\n      return {};\n    }\n\n    const attributes = {};\n    Object.keys(element.dataset).filter(key => key.startsWith('bs')).forEach(key => {\n      let pureKey = key.replace(/^bs/, '');\n      pureKey = pureKey.charAt(0).toLowerCase() + pureKey.slice(1, pureKey.length);\n      attributes[pureKey] = normalizeData(element.dataset[key]);\n    });\n    return attributes;\n  },\n\n  getDataAttribute(element, key) {\n    return normalizeData(element.getAttribute(`data-bs-${normalizeDataKey(key)}`));\n  },\n\n  offset(element) {\n    const rect = element.getBoundingClientRect();\n    return {\n      top: rect.top + document.body.scrollTop,\n      left: rect.left + document.body.scrollLeft\n    };\n  },\n\n  position(element) {\n    return {\n      top: element.offsetTop,\n      left: element.offsetLeft\n    };\n  }\n\n};\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): carousel.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$a = 'carousel';\nconst DATA_KEY$9 = 'bs.carousel';\nconst EVENT_KEY$9 = `.${DATA_KEY$9}`;\nconst DATA_API_KEY$6 = '.data-api';\nconst ARROW_LEFT_KEY = 'ArrowLeft';\nconst ARROW_RIGHT_KEY = 'ArrowRight';\nconst TOUCHEVENT_COMPAT_WAIT = 500; // Time for mouse compat events to fire after touch\n\nconst SWIPE_THRESHOLD = 40;\nconst Default$9 = {\n  interval: 5000,\n  keyboard: true,\n  slide: false,\n  pause: 'hover',\n  wrap: true,\n  touch: true\n};\nconst DefaultType$9 = {\n  interval: '(number|boolean)',\n  keyboard: 'boolean',\n  slide: '(boolean|string)',\n  pause: '(string|boolean)',\n  wrap: 'boolean',\n  touch: 'boolean'\n};\nconst ORDER_NEXT = 'next';\nconst ORDER_PREV = 'prev';\nconst DIRECTION_LEFT = 'left';\nconst DIRECTION_RIGHT = 'right';\nconst KEY_TO_DIRECTION = {\n  [ARROW_LEFT_KEY]: DIRECTION_RIGHT,\n  [ARROW_RIGHT_KEY]: DIRECTION_LEFT\n};\nconst EVENT_SLIDE = `slide${EVENT_KEY$9}`;\nconst EVENT_SLID = `slid${EVENT_KEY$9}`;\nconst EVENT_KEYDOWN = `keydown${EVENT_KEY$9}`;\nconst EVENT_MOUSEENTER = `mouseenter${EVENT_KEY$9}`;\nconst EVENT_MOUSELEAVE = `mouseleave${EVENT_KEY$9}`;\nconst EVENT_TOUCHSTART = `touchstart${EVENT_KEY$9}`;\nconst EVENT_TOUCHMOVE = `touchmove${EVENT_KEY$9}`;\nconst EVENT_TOUCHEND = `touchend${EVENT_KEY$9}`;\nconst EVENT_POINTERDOWN = `pointerdown${EVENT_KEY$9}`;\nconst EVENT_POINTERUP = `pointerup${EVENT_KEY$9}`;\nconst EVENT_DRAG_START = `dragstart${EVENT_KEY$9}`;\nconst EVENT_LOAD_DATA_API$2 = `load${EVENT_KEY$9}${DATA_API_KEY$6}`;\nconst EVENT_CLICK_DATA_API$5 = `click${EVENT_KEY$9}${DATA_API_KEY$6}`;\nconst CLASS_NAME_CAROUSEL = 'carousel';\nconst CLASS_NAME_ACTIVE$2 = 'active';\nconst CLASS_NAME_SLIDE = 'slide';\nconst CLASS_NAME_END = 'carousel-item-end';\nconst CLASS_NAME_START = 'carousel-item-start';\nconst CLASS_NAME_NEXT = 'carousel-item-next';\nconst CLASS_NAME_PREV = 'carousel-item-prev';\nconst CLASS_NAME_POINTER_EVENT = 'pointer-event';\nconst SELECTOR_ACTIVE$1 = '.active';\nconst SELECTOR_ACTIVE_ITEM = '.active.carousel-item';\nconst SELECTOR_ITEM = '.carousel-item';\nconst SELECTOR_ITEM_IMG = '.carousel-item img';\nconst SELECTOR_NEXT_PREV = '.carousel-item-next, .carousel-item-prev';\nconst SELECTOR_INDICATORS = '.carousel-indicators';\nconst SELECTOR_INDICATOR = '[data-bs-target]';\nconst SELECTOR_DATA_SLIDE = '[data-bs-slide], [data-bs-slide-to]';\nconst SELECTOR_DATA_RIDE = '[data-bs-ride=\"carousel\"]';\nconst POINTER_TYPE_TOUCH = 'touch';\nconst POINTER_TYPE_PEN = 'pen';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Carousel extends BaseComponent {\n  constructor(element, config) {\n    super(element);\n    this._items = null;\n    this._interval = null;\n    this._activeElement = null;\n    this._isPaused = false;\n    this._isSliding = false;\n    this.touchTimeout = null;\n    this.touchStartX = 0;\n    this.touchDeltaX = 0;\n    this._config = this._getConfig(config);\n    this._indicatorsElement = SelectorEngine.findOne(SELECTOR_INDICATORS, this._element);\n    this._touchSupported = 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0;\n    this._pointerEvent = Boolean(window.PointerEvent);\n\n    this._addEventListeners();\n  } // Getters\n\n\n  static get Default() {\n    return Default$9;\n  }\n\n  static get NAME() {\n    return NAME$a;\n  } // Public\n\n\n  next() {\n    this._slide(ORDER_NEXT);\n  }\n\n  nextWhenVisible() {\n    // Don't call next when the page isn't visible\n    // or the carousel or its parent isn't visible\n    if (!document.hidden && isVisible(this._element)) {\n      this.next();\n    }\n  }\n\n  prev() {\n    this._slide(ORDER_PREV);\n  }\n\n  pause(event) {\n    if (!event) {\n      this._isPaused = true;\n    }\n\n    if (SelectorEngine.findOne(SELECTOR_NEXT_PREV, this._element)) {\n      triggerTransitionEnd(this._element);\n      this.cycle(true);\n    }\n\n    clearInterval(this._interval);\n    this._interval = null;\n  }\n\n  cycle(event) {\n    if (!event) {\n      this._isPaused = false;\n    }\n\n    if (this._interval) {\n      clearInterval(this._interval);\n      this._interval = null;\n    }\n\n    if (this._config && this._config.interval && !this._isPaused) {\n      this._updateInterval();\n\n      this._interval = setInterval((document.visibilityState ? this.nextWhenVisible : this.next).bind(this), this._config.interval);\n    }\n  }\n\n  to(index) {\n    this._activeElement = SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element);\n\n    const activeIndex = this._getItemIndex(this._activeElement);\n\n    if (index > this._items.length - 1 || index < 0) {\n      return;\n    }\n\n    if (this._isSliding) {\n      EventHandler.one(this._element, EVENT_SLID, () => this.to(index));\n      return;\n    }\n\n    if (activeIndex === index) {\n      this.pause();\n      this.cycle();\n      return;\n    }\n\n    const order = index > activeIndex ? ORDER_NEXT : ORDER_PREV;\n\n    this._slide(order, this._items[index]);\n  } // Private\n\n\n  _getConfig(config) {\n    config = { ...Default$9,\n      ...Manipulator.getDataAttributes(this._element),\n      ...(typeof config === 'object' ? config : {})\n    };\n    typeCheckConfig(NAME$a, config, DefaultType$9);\n    return config;\n  }\n\n  _handleSwipe() {\n    const absDeltax = Math.abs(this.touchDeltaX);\n\n    if (absDeltax <= SWIPE_THRESHOLD) {\n      return;\n    }\n\n    const direction = absDeltax / this.touchDeltaX;\n    this.touchDeltaX = 0;\n\n    if (!direction) {\n      return;\n    }\n\n    this._slide(direction > 0 ? DIRECTION_RIGHT : DIRECTION_LEFT);\n  }\n\n  _addEventListeners() {\n    if (this._config.keyboard) {\n      EventHandler.on(this._element, EVENT_KEYDOWN, event => this._keydown(event));\n    }\n\n    if (this._config.pause === 'hover') {\n      EventHandler.on(this._element, EVENT_MOUSEENTER, event => this.pause(event));\n      EventHandler.on(this._element, EVENT_MOUSELEAVE, event => this.cycle(event));\n    }\n\n    if (this._config.touch && this._touchSupported) {\n      this._addTouchEventListeners();\n    }\n  }\n\n  _addTouchEventListeners() {\n    const start = event => {\n      if (this._pointerEvent && (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH)) {\n        this.touchStartX = event.clientX;\n      } else if (!this._pointerEvent) {\n        this.touchStartX = event.touches[0].clientX;\n      }\n    };\n\n    const move = event => {\n      // ensure swiping with one touch and not pinching\n      this.touchDeltaX = event.touches && event.touches.length > 1 ? 0 : event.touches[0].clientX - this.touchStartX;\n    };\n\n    const end = event => {\n      if (this._pointerEvent && (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH)) {\n        this.touchDeltaX = event.clientX - this.touchStartX;\n      }\n\n      this._handleSwipe();\n\n      if (this._config.pause === 'hover') {\n        // If it's a touch-enabled device, mouseenter/leave are fired as\n        // part of the mouse compatibility events on first tap - the carousel\n        // would stop cycling until user tapped out of it;\n        // here, we listen for touchend, explicitly pause the carousel\n        // (as if it's the second time we tap on it, mouseenter compat event\n        // is NOT fired) and after a timeout (to allow for mouse compatibility\n        // events to fire) we explicitly restart cycling\n        this.pause();\n\n        if (this.touchTimeout) {\n          clearTimeout(this.touchTimeout);\n        }\n\n        this.touchTimeout = setTimeout(event => this.cycle(event), TOUCHEVENT_COMPAT_WAIT + this._config.interval);\n      }\n    };\n\n    SelectorEngine.find(SELECTOR_ITEM_IMG, this._element).forEach(itemImg => {\n      EventHandler.on(itemImg, EVENT_DRAG_START, e => e.preventDefault());\n    });\n\n    if (this._pointerEvent) {\n      EventHandler.on(this._element, EVENT_POINTERDOWN, event => start(event));\n      EventHandler.on(this._element, EVENT_POINTERUP, event => end(event));\n\n      this._element.classList.add(CLASS_NAME_POINTER_EVENT);\n    } else {\n      EventHandler.on(this._element, EVENT_TOUCHSTART, event => start(event));\n      EventHandler.on(this._element, EVENT_TOUCHMOVE, event => move(event));\n      EventHandler.on(this._element, EVENT_TOUCHEND, event => end(event));\n    }\n  }\n\n  _keydown(event) {\n    if (/input|textarea/i.test(event.target.tagName)) {\n      return;\n    }\n\n    const direction = KEY_TO_DIRECTION[event.key];\n\n    if (direction) {\n      event.preventDefault();\n\n      this._slide(direction);\n    }\n  }\n\n  _getItemIndex(element) {\n    this._items = element && element.parentNode ? SelectorEngine.find(SELECTOR_ITEM, element.parentNode) : [];\n    return this._items.indexOf(element);\n  }\n\n  _getItemByOrder(order, activeElement) {\n    const isNext = order === ORDER_NEXT;\n    return getNextActiveElement(this._items, activeElement, isNext, this._config.wrap);\n  }\n\n  _triggerSlideEvent(relatedTarget, eventDirectionName) {\n    const targetIndex = this._getItemIndex(relatedTarget);\n\n    const fromIndex = this._getItemIndex(SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element));\n\n    return EventHandler.trigger(this._element, EVENT_SLIDE, {\n      relatedTarget,\n      direction: eventDirectionName,\n      from: fromIndex,\n      to: targetIndex\n    });\n  }\n\n  _setActiveIndicatorElement(element) {\n    if (this._indicatorsElement) {\n      const activeIndicator = SelectorEngine.findOne(SELECTOR_ACTIVE$1, this._indicatorsElement);\n      activeIndicator.classList.remove(CLASS_NAME_ACTIVE$2);\n      activeIndicator.removeAttribute('aria-current');\n      const indicators = SelectorEngine.find(SELECTOR_INDICATOR, this._indicatorsElement);\n\n      for (let i = 0; i < indicators.length; i++) {\n        if (Number.parseInt(indicators[i].getAttribute('data-bs-slide-to'), 10) === this._getItemIndex(element)) {\n          indicators[i].classList.add(CLASS_NAME_ACTIVE$2);\n          indicators[i].setAttribute('aria-current', 'true');\n          break;\n        }\n      }\n    }\n  }\n\n  _updateInterval() {\n    const element = this._activeElement || SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element);\n\n    if (!element) {\n      return;\n    }\n\n    const elementInterval = Number.parseInt(element.getAttribute('data-bs-interval'), 10);\n\n    if (elementInterval) {\n      this._config.defaultInterval = this._config.defaultInterval || this._config.interval;\n      this._config.interval = elementInterval;\n    } else {\n      this._config.interval = this._config.defaultInterval || this._config.interval;\n    }\n  }\n\n  _slide(directionOrOrder, element) {\n    const order = this._directionToOrder(directionOrOrder);\n\n    const activeElement = SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element);\n\n    const activeElementIndex = this._getItemIndex(activeElement);\n\n    const nextElement = element || this._getItemByOrder(order, activeElement);\n\n    const nextElementIndex = this._getItemIndex(nextElement);\n\n    const isCycling = Boolean(this._interval);\n    const isNext = order === ORDER_NEXT;\n    const directionalClassName = isNext ? CLASS_NAME_START : CLASS_NAME_END;\n    const orderClassName = isNext ? CLASS_NAME_NEXT : CLASS_NAME_PREV;\n\n    const eventDirectionName = this._orderToDirection(order);\n\n    if (nextElement && nextElement.classList.contains(CLASS_NAME_ACTIVE$2)) {\n      this._isSliding = false;\n      return;\n    }\n\n    if (this._isSliding) {\n      return;\n    }\n\n    const slideEvent = this._triggerSlideEvent(nextElement, eventDirectionName);\n\n    if (slideEvent.defaultPrevented) {\n      return;\n    }\n\n    if (!activeElement || !nextElement) {\n      // Some weirdness is happening, so we bail\n      return;\n    }\n\n    this._isSliding = true;\n\n    if (isCycling) {\n      this.pause();\n    }\n\n    this._setActiveIndicatorElement(nextElement);\n\n    this._activeElement = nextElement;\n\n    const triggerSlidEvent = () => {\n      EventHandler.trigger(this._element, EVENT_SLID, {\n        relatedTarget: nextElement,\n        direction: eventDirectionName,\n        from: activeElementIndex,\n        to: nextElementIndex\n      });\n    };\n\n    if (this._element.classList.contains(CLASS_NAME_SLIDE)) {\n      nextElement.classList.add(orderClassName);\n      reflow(nextElement);\n      activeElement.classList.add(directionalClassName);\n      nextElement.classList.add(directionalClassName);\n\n      const completeCallBack = () => {\n        nextElement.classList.remove(directionalClassName, orderClassName);\n        nextElement.classList.add(CLASS_NAME_ACTIVE$2);\n        activeElement.classList.remove(CLASS_NAME_ACTIVE$2, orderClassName, directionalClassName);\n        this._isSliding = false;\n        setTimeout(triggerSlidEvent, 0);\n      };\n\n      this._queueCallback(completeCallBack, activeElement, true);\n    } else {\n      activeElement.classList.remove(CLASS_NAME_ACTIVE$2);\n      nextElement.classList.add(CLASS_NAME_ACTIVE$2);\n      this._isSliding = false;\n      triggerSlidEvent();\n    }\n\n    if (isCycling) {\n      this.cycle();\n    }\n  }\n\n  _directionToOrder(direction) {\n    if (![DIRECTION_RIGHT, DIRECTION_LEFT].includes(direction)) {\n      return direction;\n    }\n\n    if (isRTL()) {\n      return direction === DIRECTION_LEFT ? ORDER_PREV : ORDER_NEXT;\n    }\n\n    return direction === DIRECTION_LEFT ? ORDER_NEXT : ORDER_PREV;\n  }\n\n  _orderToDirection(order) {\n    if (![ORDER_NEXT, ORDER_PREV].includes(order)) {\n      return order;\n    }\n\n    if (isRTL()) {\n      return order === ORDER_PREV ? DIRECTION_LEFT : DIRECTION_RIGHT;\n    }\n\n    return order === ORDER_PREV ? DIRECTION_RIGHT : DIRECTION_LEFT;\n  } // Static\n\n\n  static carouselInterface(element, config) {\n    const data = Carousel.getOrCreateInstance(element, config);\n    let {\n      _config\n    } = data;\n\n    if (typeof config === 'object') {\n      _config = { ..._config,\n        ...config\n      };\n    }\n\n    const action = typeof config === 'string' ? config : _config.slide;\n\n    if (typeof config === 'number') {\n      data.to(config);\n    } else if (typeof action === 'string') {\n      if (typeof data[action] === 'undefined') {\n        throw new TypeError(`No method named \"${action}\"`);\n      }\n\n      data[action]();\n    } else if (_config.interval && _config.ride) {\n      data.pause();\n      data.cycle();\n    }\n  }\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      Carousel.carouselInterface(this, config);\n    });\n  }\n\n  static dataApiClickHandler(event) {\n    const target = getElementFromSelector(this);\n\n    if (!target || !target.classList.contains(CLASS_NAME_CAROUSEL)) {\n      return;\n    }\n\n    const config = { ...Manipulator.getDataAttributes(target),\n      ...Manipulator.getDataAttributes(this)\n    };\n    const slideIndex = this.getAttribute('data-bs-slide-to');\n\n    if (slideIndex) {\n      config.interval = false;\n    }\n\n    Carousel.carouselInterface(target, config);\n\n    if (slideIndex) {\n      Carousel.getInstance(target).to(slideIndex);\n    }\n\n    event.preventDefault();\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$5, SELECTOR_DATA_SLIDE, Carousel.dataApiClickHandler);\nEventHandler.on(window, EVENT_LOAD_DATA_API$2, () => {\n  const carousels = SelectorEngine.find(SELECTOR_DATA_RIDE);\n\n  for (let i = 0, len = carousels.length; i < len; i++) {\n    Carousel.carouselInterface(carousels[i], Carousel.getInstance(carousels[i]));\n  }\n});\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Carousel to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Carousel);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): collapse.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$9 = 'collapse';\nconst DATA_KEY$8 = 'bs.collapse';\nconst EVENT_KEY$8 = `.${DATA_KEY$8}`;\nconst DATA_API_KEY$5 = '.data-api';\nconst Default$8 = {\n  toggle: true,\n  parent: ''\n};\nconst DefaultType$8 = {\n  toggle: 'boolean',\n  parent: '(string|element)'\n};\nconst EVENT_SHOW$5 = `show${EVENT_KEY$8}`;\nconst EVENT_SHOWN$5 = `shown${EVENT_KEY$8}`;\nconst EVENT_HIDE$5 = `hide${EVENT_KEY$8}`;\nconst EVENT_HIDDEN$5 = `hidden${EVENT_KEY$8}`;\nconst EVENT_CLICK_DATA_API$4 = `click${EVENT_KEY$8}${DATA_API_KEY$5}`;\nconst CLASS_NAME_SHOW$8 = 'show';\nconst CLASS_NAME_COLLAPSE = 'collapse';\nconst CLASS_NAME_COLLAPSING = 'collapsing';\nconst CLASS_NAME_COLLAPSED = 'collapsed';\nconst WIDTH = 'width';\nconst HEIGHT = 'height';\nconst SELECTOR_ACTIVES = '.show, .collapsing';\nconst SELECTOR_DATA_TOGGLE$4 = '[data-bs-toggle=\"collapse\"]';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Collapse extends BaseComponent {\n  constructor(element, config) {\n    super(element);\n    this._isTransitioning = false;\n    this._config = this._getConfig(config);\n    this._triggerArray = SelectorEngine.find(`${SELECTOR_DATA_TOGGLE$4}[href=\"#${this._element.id}\"],` + `${SELECTOR_DATA_TOGGLE$4}[data-bs-target=\"#${this._element.id}\"]`);\n    const toggleList = SelectorEngine.find(SELECTOR_DATA_TOGGLE$4);\n\n    for (let i = 0, len = toggleList.length; i < len; i++) {\n      const elem = toggleList[i];\n      const selector = getSelectorFromElement(elem);\n      const filterElement = SelectorEngine.find(selector).filter(foundElem => foundElem === this._element);\n\n      if (selector !== null && filterElement.length) {\n        this._selector = selector;\n\n        this._triggerArray.push(elem);\n      }\n    }\n\n    this._parent = this._config.parent ? this._getParent() : null;\n\n    if (!this._config.parent) {\n      this._addAriaAndCollapsedClass(this._element, this._triggerArray);\n    }\n\n    if (this._config.toggle) {\n      this.toggle();\n    }\n  } // Getters\n\n\n  static get Default() {\n    return Default$8;\n  }\n\n  static get NAME() {\n    return NAME$9;\n  } // Public\n\n\n  toggle() {\n    if (this._element.classList.contains(CLASS_NAME_SHOW$8)) {\n      this.hide();\n    } else {\n      this.show();\n    }\n  }\n\n  show() {\n    if (this._isTransitioning || this._element.classList.contains(CLASS_NAME_SHOW$8)) {\n      return;\n    }\n\n    let actives;\n    let activesData;\n\n    if (this._parent) {\n      actives = SelectorEngine.find(SELECTOR_ACTIVES, this._parent).filter(elem => {\n        if (typeof this._config.parent === 'string') {\n          return elem.getAttribute('data-bs-parent') === this._config.parent;\n        }\n\n        return elem.classList.contains(CLASS_NAME_COLLAPSE);\n      });\n\n      if (actives.length === 0) {\n        actives = null;\n      }\n    }\n\n    const container = SelectorEngine.findOne(this._selector);\n\n    if (actives) {\n      const tempActiveData = actives.find(elem => container !== elem);\n      activesData = tempActiveData ? Collapse.getInstance(tempActiveData) : null;\n\n      if (activesData && activesData._isTransitioning) {\n        return;\n      }\n    }\n\n    const startEvent = EventHandler.trigger(this._element, EVENT_SHOW$5);\n\n    if (startEvent.defaultPrevented) {\n      return;\n    }\n\n    if (actives) {\n      actives.forEach(elemActive => {\n        if (container !== elemActive) {\n          Collapse.collapseInterface(elemActive, 'hide');\n        }\n\n        if (!activesData) {\n          Data.set(elemActive, DATA_KEY$8, null);\n        }\n      });\n    }\n\n    const dimension = this._getDimension();\n\n    this._element.classList.remove(CLASS_NAME_COLLAPSE);\n\n    this._element.classList.add(CLASS_NAME_COLLAPSING);\n\n    this._element.style[dimension] = 0;\n\n    if (this._triggerArray.length) {\n      this._triggerArray.forEach(element => {\n        element.classList.remove(CLASS_NAME_COLLAPSED);\n        element.setAttribute('aria-expanded', true);\n      });\n    }\n\n    this.setTransitioning(true);\n\n    const complete = () => {\n      this._element.classList.remove(CLASS_NAME_COLLAPSING);\n\n      this._element.classList.add(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$8);\n\n      this._element.style[dimension] = '';\n      this.setTransitioning(false);\n      EventHandler.trigger(this._element, EVENT_SHOWN$5);\n    };\n\n    const capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1);\n    const scrollSize = `scroll${capitalizedDimension}`;\n\n    this._queueCallback(complete, this._element, true);\n\n    this._element.style[dimension] = `${this._element[scrollSize]}px`;\n  }\n\n  hide() {\n    if (this._isTransitioning || !this._element.classList.contains(CLASS_NAME_SHOW$8)) {\n      return;\n    }\n\n    const startEvent = EventHandler.trigger(this._element, EVENT_HIDE$5);\n\n    if (startEvent.defaultPrevented) {\n      return;\n    }\n\n    const dimension = this._getDimension();\n\n    this._element.style[dimension] = `${this._element.getBoundingClientRect()[dimension]}px`;\n    reflow(this._element);\n\n    this._element.classList.add(CLASS_NAME_COLLAPSING);\n\n    this._element.classList.remove(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$8);\n\n    const triggerArrayLength = this._triggerArray.length;\n\n    if (triggerArrayLength > 0) {\n      for (let i = 0; i < triggerArrayLength; i++) {\n        const trigger = this._triggerArray[i];\n        const elem = getElementFromSelector(trigger);\n\n        if (elem && !elem.classList.contains(CLASS_NAME_SHOW$8)) {\n          trigger.classList.add(CLASS_NAME_COLLAPSED);\n          trigger.setAttribute('aria-expanded', false);\n        }\n      }\n    }\n\n    this.setTransitioning(true);\n\n    const complete = () => {\n      this.setTransitioning(false);\n\n      this._element.classList.remove(CLASS_NAME_COLLAPSING);\n\n      this._element.classList.add(CLASS_NAME_COLLAPSE);\n\n      EventHandler.trigger(this._element, EVENT_HIDDEN$5);\n    };\n\n    this._element.style[dimension] = '';\n\n    this._queueCallback(complete, this._element, true);\n  }\n\n  setTransitioning(isTransitioning) {\n    this._isTransitioning = isTransitioning;\n  } // Private\n\n\n  _getConfig(config) {\n    config = { ...Default$8,\n      ...config\n    };\n    config.toggle = Boolean(config.toggle); // Coerce string values\n\n    typeCheckConfig(NAME$9, config, DefaultType$8);\n    return config;\n  }\n\n  _getDimension() {\n    return this._element.classList.contains(WIDTH) ? WIDTH : HEIGHT;\n  }\n\n  _getParent() {\n    let {\n      parent\n    } = this._config;\n    parent = getElement(parent);\n    const selector = `${SELECTOR_DATA_TOGGLE$4}[data-bs-parent=\"${parent}\"]`;\n    SelectorEngine.find(selector, parent).forEach(element => {\n      const selected = getElementFromSelector(element);\n\n      this._addAriaAndCollapsedClass(selected, [element]);\n    });\n    return parent;\n  }\n\n  _addAriaAndCollapsedClass(element, triggerArray) {\n    if (!element || !triggerArray.length) {\n      return;\n    }\n\n    const isOpen = element.classList.contains(CLASS_NAME_SHOW$8);\n    triggerArray.forEach(elem => {\n      if (isOpen) {\n        elem.classList.remove(CLASS_NAME_COLLAPSED);\n      } else {\n        elem.classList.add(CLASS_NAME_COLLAPSED);\n      }\n\n      elem.setAttribute('aria-expanded', isOpen);\n    });\n  } // Static\n\n\n  static collapseInterface(element, config) {\n    let data = Collapse.getInstance(element);\n    const _config = { ...Default$8,\n      ...Manipulator.getDataAttributes(element),\n      ...(typeof config === 'object' && config ? config : {})\n    };\n\n    if (!data && _config.toggle && typeof config === 'string' && /show|hide/.test(config)) {\n      _config.toggle = false;\n    }\n\n    if (!data) {\n      data = new Collapse(element, _config);\n    }\n\n    if (typeof config === 'string') {\n      if (typeof data[config] === 'undefined') {\n        throw new TypeError(`No method named \"${config}\"`);\n      }\n\n      data[config]();\n    }\n  }\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      Collapse.collapseInterface(this, config);\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$4, SELECTOR_DATA_TOGGLE$4, function (event) {\n  // preventDefault only for <a> elements (which change the URL) not inside the collapsible element\n  if (event.target.tagName === 'A' || event.delegateTarget && event.delegateTarget.tagName === 'A') {\n    event.preventDefault();\n  }\n\n  const triggerData = Manipulator.getDataAttributes(this);\n  const selector = getSelectorFromElement(this);\n  const selectorElements = SelectorEngine.find(selector);\n  selectorElements.forEach(element => {\n    const data = Collapse.getInstance(element);\n    let config;\n\n    if (data) {\n      // update parent attribute\n      if (data._parent === null && typeof triggerData.parent === 'string') {\n        data._config.parent = triggerData.parent;\n        data._parent = data._getParent();\n      }\n\n      config = 'toggle';\n    } else {\n      config = triggerData;\n    }\n\n    Collapse.collapseInterface(element, config);\n  });\n});\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Collapse to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Collapse);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): dropdown.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$8 = 'dropdown';\nconst DATA_KEY$7 = 'bs.dropdown';\nconst EVENT_KEY$7 = `.${DATA_KEY$7}`;\nconst DATA_API_KEY$4 = '.data-api';\nconst ESCAPE_KEY$2 = 'Escape';\nconst SPACE_KEY = 'Space';\nconst TAB_KEY = 'Tab';\nconst ARROW_UP_KEY = 'ArrowUp';\nconst ARROW_DOWN_KEY = 'ArrowDown';\nconst RIGHT_MOUSE_BUTTON = 2; // MouseEvent.button value for the secondary button, usually the right button\n\nconst REGEXP_KEYDOWN = new RegExp(`${ARROW_UP_KEY}|${ARROW_DOWN_KEY}|${ESCAPE_KEY$2}`);\nconst EVENT_HIDE$4 = `hide${EVENT_KEY$7}`;\nconst EVENT_HIDDEN$4 = `hidden${EVENT_KEY$7}`;\nconst EVENT_SHOW$4 = `show${EVENT_KEY$7}`;\nconst EVENT_SHOWN$4 = `shown${EVENT_KEY$7}`;\nconst EVENT_CLICK = `click${EVENT_KEY$7}`;\nconst EVENT_CLICK_DATA_API$3 = `click${EVENT_KEY$7}${DATA_API_KEY$4}`;\nconst EVENT_KEYDOWN_DATA_API = `keydown${EVENT_KEY$7}${DATA_API_KEY$4}`;\nconst EVENT_KEYUP_DATA_API = `keyup${EVENT_KEY$7}${DATA_API_KEY$4}`;\nconst CLASS_NAME_SHOW$7 = 'show';\nconst CLASS_NAME_DROPUP = 'dropup';\nconst CLASS_NAME_DROPEND = 'dropend';\nconst CLASS_NAME_DROPSTART = 'dropstart';\nconst CLASS_NAME_NAVBAR = 'navbar';\nconst SELECTOR_DATA_TOGGLE$3 = '[data-bs-toggle=\"dropdown\"]';\nconst SELECTOR_MENU = '.dropdown-menu';\nconst SELECTOR_NAVBAR_NAV = '.navbar-nav';\nconst SELECTOR_VISIBLE_ITEMS = '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)';\nconst PLACEMENT_TOP = isRTL() ? 'top-end' : 'top-start';\nconst PLACEMENT_TOPEND = isRTL() ? 'top-start' : 'top-end';\nconst PLACEMENT_BOTTOM = isRTL() ? 'bottom-end' : 'bottom-start';\nconst PLACEMENT_BOTTOMEND = isRTL() ? 'bottom-start' : 'bottom-end';\nconst PLACEMENT_RIGHT = isRTL() ? 'left-start' : 'right-start';\nconst PLACEMENT_LEFT = isRTL() ? 'right-start' : 'left-start';\nconst Default$7 = {\n  offset: [0, 2],\n  boundary: 'clippingParents',\n  reference: 'toggle',\n  display: 'dynamic',\n  popperConfig: null,\n  autoClose: true\n};\nconst DefaultType$7 = {\n  offset: '(array|string|function)',\n  boundary: '(string|element)',\n  reference: '(string|element|object)',\n  display: 'string',\n  popperConfig: '(null|object|function)',\n  autoClose: '(boolean|string)'\n};\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Dropdown extends BaseComponent {\n  constructor(element, config) {\n    super(element);\n    this._popper = null;\n    this._config = this._getConfig(config);\n    this._menu = this._getMenuElement();\n    this._inNavbar = this._detectNavbar();\n\n    this._addEventListeners();\n  } // Getters\n\n\n  static get Default() {\n    return Default$7;\n  }\n\n  static get DefaultType() {\n    return DefaultType$7;\n  }\n\n  static get NAME() {\n    return NAME$8;\n  } // Public\n\n\n  toggle() {\n    if (isDisabled(this._element)) {\n      return;\n    }\n\n    const isActive = this._element.classList.contains(CLASS_NAME_SHOW$7);\n\n    if (isActive) {\n      this.hide();\n      return;\n    }\n\n    this.show();\n  }\n\n  show() {\n    if (isDisabled(this._element) || this._menu.classList.contains(CLASS_NAME_SHOW$7)) {\n      return;\n    }\n\n    const parent = Dropdown.getParentFromElement(this._element);\n    const relatedTarget = {\n      relatedTarget: this._element\n    };\n    const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$4, relatedTarget);\n\n    if (showEvent.defaultPrevented) {\n      return;\n    } // Totally disable Popper for Dropdowns in Navbar\n\n\n    if (this._inNavbar) {\n      Manipulator.setDataAttribute(this._menu, 'popper', 'none');\n    } else {\n      if (typeof Popper === 'undefined') {\n        throw new TypeError('Bootstrap\\'s dropdowns require Popper (https://popper.js.org)');\n      }\n\n      let referenceElement = this._element;\n\n      if (this._config.reference === 'parent') {\n        referenceElement = parent;\n      } else if (isElement(this._config.reference)) {\n        referenceElement = getElement(this._config.reference);\n      } else if (typeof this._config.reference === 'object') {\n        referenceElement = this._config.reference;\n      }\n\n      const popperConfig = this._getPopperConfig();\n\n      const isDisplayStatic = popperConfig.modifiers.find(modifier => modifier.name === 'applyStyles' && modifier.enabled === false);\n      this._popper = Popper.createPopper(referenceElement, this._menu, popperConfig);\n\n      if (isDisplayStatic) {\n        Manipulator.setDataAttribute(this._menu, 'popper', 'static');\n      }\n    } // If this is a touch-enabled device we add extra\n    // empty mouseover listeners to the body's immediate children;\n    // only needed because of broken event delegation on iOS\n    // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n\n\n    if ('ontouchstart' in document.documentElement && !parent.closest(SELECTOR_NAVBAR_NAV)) {\n      [].concat(...document.body.children).forEach(elem => EventHandler.on(elem, 'mouseover', noop));\n    }\n\n    this._element.focus();\n\n    this._element.setAttribute('aria-expanded', true);\n\n    this._menu.classList.toggle(CLASS_NAME_SHOW$7);\n\n    this._element.classList.toggle(CLASS_NAME_SHOW$7);\n\n    EventHandler.trigger(this._element, EVENT_SHOWN$4, relatedTarget);\n  }\n\n  hide() {\n    if (isDisabled(this._element) || !this._menu.classList.contains(CLASS_NAME_SHOW$7)) {\n      return;\n    }\n\n    const relatedTarget = {\n      relatedTarget: this._element\n    };\n\n    this._completeHide(relatedTarget);\n  }\n\n  dispose() {\n    if (this._popper) {\n      this._popper.destroy();\n    }\n\n    super.dispose();\n  }\n\n  update() {\n    this._inNavbar = this._detectNavbar();\n\n    if (this._popper) {\n      this._popper.update();\n    }\n  } // Private\n\n\n  _addEventListeners() {\n    EventHandler.on(this._element, EVENT_CLICK, event => {\n      event.preventDefault();\n      this.toggle();\n    });\n  }\n\n  _completeHide(relatedTarget) {\n    const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$4, relatedTarget);\n\n    if (hideEvent.defaultPrevented) {\n      return;\n    } // If this is a touch-enabled device we remove the extra\n    // empty mouseover listeners we added for iOS support\n\n\n    if ('ontouchstart' in document.documentElement) {\n      [].concat(...document.body.children).forEach(elem => EventHandler.off(elem, 'mouseover', noop));\n    }\n\n    if (this._popper) {\n      this._popper.destroy();\n    }\n\n    this._menu.classList.remove(CLASS_NAME_SHOW$7);\n\n    this._element.classList.remove(CLASS_NAME_SHOW$7);\n\n    this._element.setAttribute('aria-expanded', 'false');\n\n    Manipulator.removeDataAttribute(this._menu, 'popper');\n    EventHandler.trigger(this._element, EVENT_HIDDEN$4, relatedTarget);\n  }\n\n  _getConfig(config) {\n    config = { ...this.constructor.Default,\n      ...Manipulator.getDataAttributes(this._element),\n      ...config\n    };\n    typeCheckConfig(NAME$8, config, this.constructor.DefaultType);\n\n    if (typeof config.reference === 'object' && !isElement(config.reference) && typeof config.reference.getBoundingClientRect !== 'function') {\n      // Popper virtual elements require a getBoundingClientRect method\n      throw new TypeError(`${NAME$8.toUpperCase()}: Option \"reference\" provided type \"object\" without a required \"getBoundingClientRect\" method.`);\n    }\n\n    return config;\n  }\n\n  _getMenuElement() {\n    return SelectorEngine.next(this._element, SELECTOR_MENU)[0];\n  }\n\n  _getPlacement() {\n    const parentDropdown = this._element.parentNode;\n\n    if (parentDropdown.classList.contains(CLASS_NAME_DROPEND)) {\n      return PLACEMENT_RIGHT;\n    }\n\n    if (parentDropdown.classList.contains(CLASS_NAME_DROPSTART)) {\n      return PLACEMENT_LEFT;\n    } // We need to trim the value because custom properties can also include spaces\n\n\n    const isEnd = getComputedStyle(this._menu).getPropertyValue('--bs-position').trim() === 'end';\n\n    if (parentDropdown.classList.contains(CLASS_NAME_DROPUP)) {\n      return isEnd ? PLACEMENT_TOPEND : PLACEMENT_TOP;\n    }\n\n    return isEnd ? PLACEMENT_BOTTOMEND : PLACEMENT_BOTTOM;\n  }\n\n  _detectNavbar() {\n    return this._element.closest(`.${CLASS_NAME_NAVBAR}`) !== null;\n  }\n\n  _getOffset() {\n    const {\n      offset\n    } = this._config;\n\n    if (typeof offset === 'string') {\n      return offset.split(',').map(val => Number.parseInt(val, 10));\n    }\n\n    if (typeof offset === 'function') {\n      return popperData => offset(popperData, this._element);\n    }\n\n    return offset;\n  }\n\n  _getPopperConfig() {\n    const defaultBsPopperConfig = {\n      placement: this._getPlacement(),\n      modifiers: [{\n        name: 'preventOverflow',\n        options: {\n          boundary: this._config.boundary\n        }\n      }, {\n        name: 'offset',\n        options: {\n          offset: this._getOffset()\n        }\n      }]\n    }; // Disable Popper if we have a static display\n\n    if (this._config.display === 'static') {\n      defaultBsPopperConfig.modifiers = [{\n        name: 'applyStyles',\n        enabled: false\n      }];\n    }\n\n    return { ...defaultBsPopperConfig,\n      ...(typeof this._config.popperConfig === 'function' ? this._config.popperConfig(defaultBsPopperConfig) : this._config.popperConfig)\n    };\n  }\n\n  _selectMenuItem({\n    key,\n    target\n  }) {\n    const items = SelectorEngine.find(SELECTOR_VISIBLE_ITEMS, this._menu).filter(isVisible);\n\n    if (!items.length) {\n      return;\n    } // if target isn't included in items (e.g. when expanding the dropdown)\n    // allow cycling to get the last item in case key equals ARROW_UP_KEY\n\n\n    getNextActiveElement(items, target, key === ARROW_DOWN_KEY, !items.includes(target)).focus();\n  } // Static\n\n\n  static dropdownInterface(element, config) {\n    const data = Dropdown.getOrCreateInstance(element, config);\n\n    if (typeof config === 'string') {\n      if (typeof data[config] === 'undefined') {\n        throw new TypeError(`No method named \"${config}\"`);\n      }\n\n      data[config]();\n    }\n  }\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      Dropdown.dropdownInterface(this, config);\n    });\n  }\n\n  static clearMenus(event) {\n    if (event && (event.button === RIGHT_MOUSE_BUTTON || event.type === 'keyup' && event.key !== TAB_KEY)) {\n      return;\n    }\n\n    const toggles = SelectorEngine.find(SELECTOR_DATA_TOGGLE$3);\n\n    for (let i = 0, len = toggles.length; i < len; i++) {\n      const context = Dropdown.getInstance(toggles[i]);\n\n      if (!context || context._config.autoClose === false) {\n        continue;\n      }\n\n      if (!context._element.classList.contains(CLASS_NAME_SHOW$7)) {\n        continue;\n      }\n\n      const relatedTarget = {\n        relatedTarget: context._element\n      };\n\n      if (event) {\n        const composedPath = event.composedPath();\n        const isMenuTarget = composedPath.includes(context._menu);\n\n        if (composedPath.includes(context._element) || context._config.autoClose === 'inside' && !isMenuTarget || context._config.autoClose === 'outside' && isMenuTarget) {\n          continue;\n        } // Tab navigation through the dropdown menu or events from contained inputs shouldn't close the menu\n\n\n        if (context._menu.contains(event.target) && (event.type === 'keyup' && event.key === TAB_KEY || /input|select|option|textarea|form/i.test(event.target.tagName))) {\n          continue;\n        }\n\n        if (event.type === 'click') {\n          relatedTarget.clickEvent = event;\n        }\n      }\n\n      context._completeHide(relatedTarget);\n    }\n  }\n\n  static getParentFromElement(element) {\n    return getElementFromSelector(element) || element.parentNode;\n  }\n\n  static dataApiKeydownHandler(event) {\n    // If not input/textarea:\n    //  - And not a key in REGEXP_KEYDOWN => not a dropdown command\n    // If input/textarea:\n    //  - If space key => not a dropdown command\n    //  - If key is other than escape\n    //    - If key is not up or down => not a dropdown command\n    //    - If trigger inside the menu => not a dropdown command\n    if (/input|textarea/i.test(event.target.tagName) ? event.key === SPACE_KEY || event.key !== ESCAPE_KEY$2 && (event.key !== ARROW_DOWN_KEY && event.key !== ARROW_UP_KEY || event.target.closest(SELECTOR_MENU)) : !REGEXP_KEYDOWN.test(event.key)) {\n      return;\n    }\n\n    const isActive = this.classList.contains(CLASS_NAME_SHOW$7);\n\n    if (!isActive && event.key === ESCAPE_KEY$2) {\n      return;\n    }\n\n    event.preventDefault();\n    event.stopPropagation();\n\n    if (isDisabled(this)) {\n      return;\n    }\n\n    const getToggleButton = () => this.matches(SELECTOR_DATA_TOGGLE$3) ? this : SelectorEngine.prev(this, SELECTOR_DATA_TOGGLE$3)[0];\n\n    if (event.key === ESCAPE_KEY$2) {\n      getToggleButton().focus();\n      Dropdown.clearMenus();\n      return;\n    }\n\n    if (event.key === ARROW_UP_KEY || event.key === ARROW_DOWN_KEY) {\n      if (!isActive) {\n        getToggleButton().click();\n      }\n\n      Dropdown.getInstance(getToggleButton())._selectMenuItem(event);\n\n      return;\n    }\n\n    if (!isActive || event.key === SPACE_KEY) {\n      Dropdown.clearMenus();\n    }\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_DATA_TOGGLE$3, Dropdown.dataApiKeydownHandler);\nEventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown.dataApiKeydownHandler);\nEventHandler.on(document, EVENT_CLICK_DATA_API$3, Dropdown.clearMenus);\nEventHandler.on(document, EVENT_KEYUP_DATA_API, Dropdown.clearMenus);\nEventHandler.on(document, EVENT_CLICK_DATA_API$3, SELECTOR_DATA_TOGGLE$3, function (event) {\n  event.preventDefault();\n  Dropdown.dropdownInterface(this);\n});\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Dropdown to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Dropdown);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): util/scrollBar.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\nconst SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top';\nconst SELECTOR_STICKY_CONTENT = '.sticky-top';\n\nclass ScrollBarHelper {\n  constructor() {\n    this._element = document.body;\n  }\n\n  getWidth() {\n    // https://developer.mozilla.org/en-US/docs/Web/API/Window/innerWidth#usage_notes\n    const documentWidth = document.documentElement.clientWidth;\n    return Math.abs(window.innerWidth - documentWidth);\n  }\n\n  hide() {\n    const width = this.getWidth();\n\n    this._disableOverFlow(); // give padding to element to balance the hidden scrollbar width\n\n\n    this._setElementAttributes(this._element, 'paddingRight', calculatedValue => calculatedValue + width); // trick: We adjust positive paddingRight and negative marginRight to sticky-top elements to keep showing fullwidth\n\n\n    this._setElementAttributes(SELECTOR_FIXED_CONTENT, 'paddingRight', calculatedValue => calculatedValue + width);\n\n    this._setElementAttributes(SELECTOR_STICKY_CONTENT, 'marginRight', calculatedValue => calculatedValue - width);\n  }\n\n  _disableOverFlow() {\n    this._saveInitialAttribute(this._element, 'overflow');\n\n    this._element.style.overflow = 'hidden';\n  }\n\n  _setElementAttributes(selector, styleProp, callback) {\n    const scrollbarWidth = this.getWidth();\n\n    const manipulationCallBack = element => {\n      if (element !== this._element && window.innerWidth > element.clientWidth + scrollbarWidth) {\n        return;\n      }\n\n      this._saveInitialAttribute(element, styleProp);\n\n      const calculatedValue = window.getComputedStyle(element)[styleProp];\n      element.style[styleProp] = `${callback(Number.parseFloat(calculatedValue))}px`;\n    };\n\n    this._applyManipulationCallback(selector, manipulationCallBack);\n  }\n\n  reset() {\n    this._resetElementAttributes(this._element, 'overflow');\n\n    this._resetElementAttributes(this._element, 'paddingRight');\n\n    this._resetElementAttributes(SELECTOR_FIXED_CONTENT, 'paddingRight');\n\n    this._resetElementAttributes(SELECTOR_STICKY_CONTENT, 'marginRight');\n  }\n\n  _saveInitialAttribute(element, styleProp) {\n    const actualValue = element.style[styleProp];\n\n    if (actualValue) {\n      Manipulator.setDataAttribute(element, styleProp, actualValue);\n    }\n  }\n\n  _resetElementAttributes(selector, styleProp) {\n    const manipulationCallBack = element => {\n      const value = Manipulator.getDataAttribute(element, styleProp);\n\n      if (typeof value === 'undefined') {\n        element.style.removeProperty(styleProp);\n      } else {\n        Manipulator.removeDataAttribute(element, styleProp);\n        element.style[styleProp] = value;\n      }\n    };\n\n    this._applyManipulationCallback(selector, manipulationCallBack);\n  }\n\n  _applyManipulationCallback(selector, callBack) {\n    if (isElement(selector)) {\n      callBack(selector);\n    } else {\n      SelectorEngine.find(selector, this._element).forEach(callBack);\n    }\n  }\n\n  isOverflowing() {\n    return this.getWidth() > 0;\n  }\n\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): util/backdrop.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\nconst Default$6 = {\n  isVisible: true,\n  // if false, we use the backdrop helper without adding any element to the dom\n  isAnimated: false,\n  rootElement: 'body',\n  // give the choice to place backdrop under different elements\n  clickCallback: null\n};\nconst DefaultType$6 = {\n  isVisible: 'boolean',\n  isAnimated: 'boolean',\n  rootElement: '(element|string)',\n  clickCallback: '(function|null)'\n};\nconst NAME$7 = 'backdrop';\nconst CLASS_NAME_BACKDROP = 'modal-backdrop';\nconst CLASS_NAME_FADE$5 = 'fade';\nconst CLASS_NAME_SHOW$6 = 'show';\nconst EVENT_MOUSEDOWN = `mousedown.bs.${NAME$7}`;\n\nclass Backdrop {\n  constructor(config) {\n    this._config = this._getConfig(config);\n    this._isAppended = false;\n    this._element = null;\n  }\n\n  show(callback) {\n    if (!this._config.isVisible) {\n      execute(callback);\n      return;\n    }\n\n    this._append();\n\n    if (this._config.isAnimated) {\n      reflow(this._getElement());\n    }\n\n    this._getElement().classList.add(CLASS_NAME_SHOW$6);\n\n    this._emulateAnimation(() => {\n      execute(callback);\n    });\n  }\n\n  hide(callback) {\n    if (!this._config.isVisible) {\n      execute(callback);\n      return;\n    }\n\n    this._getElement().classList.remove(CLASS_NAME_SHOW$6);\n\n    this._emulateAnimation(() => {\n      this.dispose();\n      execute(callback);\n    });\n  } // Private\n\n\n  _getElement() {\n    if (!this._element) {\n      const backdrop = document.createElement('div');\n      backdrop.className = CLASS_NAME_BACKDROP;\n\n      if (this._config.isAnimated) {\n        backdrop.classList.add(CLASS_NAME_FADE$5);\n      }\n\n      this._element = backdrop;\n    }\n\n    return this._element;\n  }\n\n  _getConfig(config) {\n    config = { ...Default$6,\n      ...(typeof config === 'object' ? config : {})\n    }; // use getElement() with the default \"body\" to get a fresh Element on each instantiation\n\n    config.rootElement = getElement(config.rootElement);\n    typeCheckConfig(NAME$7, config, DefaultType$6);\n    return config;\n  }\n\n  _append() {\n    if (this._isAppended) {\n      return;\n    }\n\n    this._config.rootElement.appendChild(this._getElement());\n\n    EventHandler.on(this._getElement(), EVENT_MOUSEDOWN, () => {\n      execute(this._config.clickCallback);\n    });\n    this._isAppended = true;\n  }\n\n  dispose() {\n    if (!this._isAppended) {\n      return;\n    }\n\n    EventHandler.off(this._element, EVENT_MOUSEDOWN);\n\n    this._element.remove();\n\n    this._isAppended = false;\n  }\n\n  _emulateAnimation(callback) {\n    executeAfterTransition(callback, this._getElement(), this._config.isAnimated);\n  }\n\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): modal.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$6 = 'modal';\nconst DATA_KEY$6 = 'bs.modal';\nconst EVENT_KEY$6 = `.${DATA_KEY$6}`;\nconst DATA_API_KEY$3 = '.data-api';\nconst ESCAPE_KEY$1 = 'Escape';\nconst Default$5 = {\n  backdrop: true,\n  keyboard: true,\n  focus: true\n};\nconst DefaultType$5 = {\n  backdrop: '(boolean|string)',\n  keyboard: 'boolean',\n  focus: 'boolean'\n};\nconst EVENT_HIDE$3 = `hide${EVENT_KEY$6}`;\nconst EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY$6}`;\nconst EVENT_HIDDEN$3 = `hidden${EVENT_KEY$6}`;\nconst EVENT_SHOW$3 = `show${EVENT_KEY$6}`;\nconst EVENT_SHOWN$3 = `shown${EVENT_KEY$6}`;\nconst EVENT_FOCUSIN$2 = `focusin${EVENT_KEY$6}`;\nconst EVENT_RESIZE = `resize${EVENT_KEY$6}`;\nconst EVENT_CLICK_DISMISS$2 = `click.dismiss${EVENT_KEY$6}`;\nconst EVENT_KEYDOWN_DISMISS$1 = `keydown.dismiss${EVENT_KEY$6}`;\nconst EVENT_MOUSEUP_DISMISS = `mouseup.dismiss${EVENT_KEY$6}`;\nconst EVENT_MOUSEDOWN_DISMISS = `mousedown.dismiss${EVENT_KEY$6}`;\nconst EVENT_CLICK_DATA_API$2 = `click${EVENT_KEY$6}${DATA_API_KEY$3}`;\nconst CLASS_NAME_OPEN = 'modal-open';\nconst CLASS_NAME_FADE$4 = 'fade';\nconst CLASS_NAME_SHOW$5 = 'show';\nconst CLASS_NAME_STATIC = 'modal-static';\nconst SELECTOR_DIALOG = '.modal-dialog';\nconst SELECTOR_MODAL_BODY = '.modal-body';\nconst SELECTOR_DATA_TOGGLE$2 = '[data-bs-toggle=\"modal\"]';\nconst SELECTOR_DATA_DISMISS$2 = '[data-bs-dismiss=\"modal\"]';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Modal extends BaseComponent {\n  constructor(element, config) {\n    super(element);\n    this._config = this._getConfig(config);\n    this._dialog = SelectorEngine.findOne(SELECTOR_DIALOG, this._element);\n    this._backdrop = this._initializeBackDrop();\n    this._isShown = false;\n    this._ignoreBackdropClick = false;\n    this._isTransitioning = false;\n    this._scrollBar = new ScrollBarHelper();\n  } // Getters\n\n\n  static get Default() {\n    return Default$5;\n  }\n\n  static get NAME() {\n    return NAME$6;\n  } // Public\n\n\n  toggle(relatedTarget) {\n    return this._isShown ? this.hide() : this.show(relatedTarget);\n  }\n\n  show(relatedTarget) {\n    if (this._isShown || this._isTransitioning) {\n      return;\n    }\n\n    const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$3, {\n      relatedTarget\n    });\n\n    if (showEvent.defaultPrevented) {\n      return;\n    }\n\n    this._isShown = true;\n\n    if (this._isAnimated()) {\n      this._isTransitioning = true;\n    }\n\n    this._scrollBar.hide();\n\n    document.body.classList.add(CLASS_NAME_OPEN);\n\n    this._adjustDialog();\n\n    this._setEscapeEvent();\n\n    this._setResizeEvent();\n\n    EventHandler.on(this._element, EVENT_CLICK_DISMISS$2, SELECTOR_DATA_DISMISS$2, event => this.hide(event));\n    EventHandler.on(this._dialog, EVENT_MOUSEDOWN_DISMISS, () => {\n      EventHandler.one(this._element, EVENT_MOUSEUP_DISMISS, event => {\n        if (event.target === this._element) {\n          this._ignoreBackdropClick = true;\n        }\n      });\n    });\n\n    this._showBackdrop(() => this._showElement(relatedTarget));\n  }\n\n  hide(event) {\n    if (event && ['A', 'AREA'].includes(event.target.tagName)) {\n      event.preventDefault();\n    }\n\n    if (!this._isShown || this._isTransitioning) {\n      return;\n    }\n\n    const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$3);\n\n    if (hideEvent.defaultPrevented) {\n      return;\n    }\n\n    this._isShown = false;\n\n    const isAnimated = this._isAnimated();\n\n    if (isAnimated) {\n      this._isTransitioning = true;\n    }\n\n    this._setEscapeEvent();\n\n    this._setResizeEvent();\n\n    EventHandler.off(document, EVENT_FOCUSIN$2);\n\n    this._element.classList.remove(CLASS_NAME_SHOW$5);\n\n    EventHandler.off(this._element, EVENT_CLICK_DISMISS$2);\n    EventHandler.off(this._dialog, EVENT_MOUSEDOWN_DISMISS);\n\n    this._queueCallback(() => this._hideModal(), this._element, isAnimated);\n  }\n\n  dispose() {\n    [window, this._dialog].forEach(htmlElement => EventHandler.off(htmlElement, EVENT_KEY$6));\n\n    this._backdrop.dispose();\n\n    super.dispose();\n    /**\n     * `document` has 2 events `EVENT_FOCUSIN` and `EVENT_CLICK_DATA_API`\n     * Do not move `document` in `htmlElements` array\n     * It will remove `EVENT_CLICK_DATA_API` event that should remain\n     */\n\n    EventHandler.off(document, EVENT_FOCUSIN$2);\n  }\n\n  handleUpdate() {\n    this._adjustDialog();\n  } // Private\n\n\n  _initializeBackDrop() {\n    return new Backdrop({\n      isVisible: Boolean(this._config.backdrop),\n      // 'static' option will be translated to true, and booleans will keep their value\n      isAnimated: this._isAnimated()\n    });\n  }\n\n  _getConfig(config) {\n    config = { ...Default$5,\n      ...Manipulator.getDataAttributes(this._element),\n      ...(typeof config === 'object' ? config : {})\n    };\n    typeCheckConfig(NAME$6, config, DefaultType$5);\n    return config;\n  }\n\n  _showElement(relatedTarget) {\n    const isAnimated = this._isAnimated();\n\n    const modalBody = SelectorEngine.findOne(SELECTOR_MODAL_BODY, this._dialog);\n\n    if (!this._element.parentNode || this._element.parentNode.nodeType !== Node.ELEMENT_NODE) {\n      // Don't move modal's DOM position\n      document.body.appendChild(this._element);\n    }\n\n    this._element.style.display = 'block';\n\n    this._element.removeAttribute('aria-hidden');\n\n    this._element.setAttribute('aria-modal', true);\n\n    this._element.setAttribute('role', 'dialog');\n\n    this._element.scrollTop = 0;\n\n    if (modalBody) {\n      modalBody.scrollTop = 0;\n    }\n\n    if (isAnimated) {\n      reflow(this._element);\n    }\n\n    this._element.classList.add(CLASS_NAME_SHOW$5);\n\n    if (this._config.focus) {\n      this._enforceFocus();\n    }\n\n    const transitionComplete = () => {\n      if (this._config.focus) {\n        this._element.focus();\n      }\n\n      this._isTransitioning = false;\n      EventHandler.trigger(this._element, EVENT_SHOWN$3, {\n        relatedTarget\n      });\n    };\n\n    this._queueCallback(transitionComplete, this._dialog, isAnimated);\n  }\n\n  _enforceFocus() {\n    EventHandler.off(document, EVENT_FOCUSIN$2); // guard against infinite focus loop\n\n    EventHandler.on(document, EVENT_FOCUSIN$2, event => {\n      if (document !== event.target && this._element !== event.target && !this._element.contains(event.target)) {\n        this._element.focus();\n      }\n    });\n  }\n\n  _setEscapeEvent() {\n    if (this._isShown) {\n      EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS$1, event => {\n        if (this._config.keyboard && event.key === ESCAPE_KEY$1) {\n          event.preventDefault();\n          this.hide();\n        } else if (!this._config.keyboard && event.key === ESCAPE_KEY$1) {\n          this._triggerBackdropTransition();\n        }\n      });\n    } else {\n      EventHandler.off(this._element, EVENT_KEYDOWN_DISMISS$1);\n    }\n  }\n\n  _setResizeEvent() {\n    if (this._isShown) {\n      EventHandler.on(window, EVENT_RESIZE, () => this._adjustDialog());\n    } else {\n      EventHandler.off(window, EVENT_RESIZE);\n    }\n  }\n\n  _hideModal() {\n    this._element.style.display = 'none';\n\n    this._element.setAttribute('aria-hidden', true);\n\n    this._element.removeAttribute('aria-modal');\n\n    this._element.removeAttribute('role');\n\n    this._isTransitioning = false;\n\n    this._backdrop.hide(() => {\n      document.body.classList.remove(CLASS_NAME_OPEN);\n\n      this._resetAdjustments();\n\n      this._scrollBar.reset();\n\n      EventHandler.trigger(this._element, EVENT_HIDDEN$3);\n    });\n  }\n\n  _showBackdrop(callback) {\n    EventHandler.on(this._element, EVENT_CLICK_DISMISS$2, event => {\n      if (this._ignoreBackdropClick) {\n        this._ignoreBackdropClick = false;\n        return;\n      }\n\n      if (event.target !== event.currentTarget) {\n        return;\n      }\n\n      if (this._config.backdrop === true) {\n        this.hide();\n      } else if (this._config.backdrop === 'static') {\n        this._triggerBackdropTransition();\n      }\n    });\n\n    this._backdrop.show(callback);\n  }\n\n  _isAnimated() {\n    return this._element.classList.contains(CLASS_NAME_FADE$4);\n  }\n\n  _triggerBackdropTransition() {\n    const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED);\n\n    if (hideEvent.defaultPrevented) {\n      return;\n    }\n\n    const {\n      classList,\n      scrollHeight,\n      style\n    } = this._element;\n    const isModalOverflowing = scrollHeight > document.documentElement.clientHeight; // return if the following background transition hasn't yet completed\n\n    if (!isModalOverflowing && style.overflowY === 'hidden' || classList.contains(CLASS_NAME_STATIC)) {\n      return;\n    }\n\n    if (!isModalOverflowing) {\n      style.overflowY = 'hidden';\n    }\n\n    classList.add(CLASS_NAME_STATIC);\n\n    this._queueCallback(() => {\n      classList.remove(CLASS_NAME_STATIC);\n\n      if (!isModalOverflowing) {\n        this._queueCallback(() => {\n          style.overflowY = '';\n        }, this._dialog);\n      }\n    }, this._dialog);\n\n    this._element.focus();\n  } // ----------------------------------------------------------------------\n  // the following methods are used to handle overflowing modals\n  // ----------------------------------------------------------------------\n\n\n  _adjustDialog() {\n    const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;\n\n    const scrollbarWidth = this._scrollBar.getWidth();\n\n    const isBodyOverflowing = scrollbarWidth > 0;\n\n    if (!isBodyOverflowing && isModalOverflowing && !isRTL() || isBodyOverflowing && !isModalOverflowing && isRTL()) {\n      this._element.style.paddingLeft = `${scrollbarWidth}px`;\n    }\n\n    if (isBodyOverflowing && !isModalOverflowing && !isRTL() || !isBodyOverflowing && isModalOverflowing && isRTL()) {\n      this._element.style.paddingRight = `${scrollbarWidth}px`;\n    }\n  }\n\n  _resetAdjustments() {\n    this._element.style.paddingLeft = '';\n    this._element.style.paddingRight = '';\n  } // Static\n\n\n  static jQueryInterface(config, relatedTarget) {\n    return this.each(function () {\n      const data = Modal.getOrCreateInstance(this, config);\n\n      if (typeof config !== 'string') {\n        return;\n      }\n\n      if (typeof data[config] === 'undefined') {\n        throw new TypeError(`No method named \"${config}\"`);\n      }\n\n      data[config](relatedTarget);\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$2, SELECTOR_DATA_TOGGLE$2, function (event) {\n  const target = getElementFromSelector(this);\n\n  if (['A', 'AREA'].includes(this.tagName)) {\n    event.preventDefault();\n  }\n\n  EventHandler.one(target, EVENT_SHOW$3, showEvent => {\n    if (showEvent.defaultPrevented) {\n      // only register focus restorer if modal will actually get shown\n      return;\n    }\n\n    EventHandler.one(target, EVENT_HIDDEN$3, () => {\n      if (isVisible(this)) {\n        this.focus();\n      }\n    });\n  });\n  const data = Modal.getOrCreateInstance(target);\n  data.toggle(this);\n});\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Modal to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Modal);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): offcanvas.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$5 = 'offcanvas';\nconst DATA_KEY$5 = 'bs.offcanvas';\nconst EVENT_KEY$5 = `.${DATA_KEY$5}`;\nconst DATA_API_KEY$2 = '.data-api';\nconst EVENT_LOAD_DATA_API$1 = `load${EVENT_KEY$5}${DATA_API_KEY$2}`;\nconst ESCAPE_KEY = 'Escape';\nconst Default$4 = {\n  backdrop: true,\n  keyboard: true,\n  scroll: false\n};\nconst DefaultType$4 = {\n  backdrop: 'boolean',\n  keyboard: 'boolean',\n  scroll: 'boolean'\n};\nconst CLASS_NAME_SHOW$4 = 'show';\nconst OPEN_SELECTOR = '.offcanvas.show';\nconst EVENT_SHOW$2 = `show${EVENT_KEY$5}`;\nconst EVENT_SHOWN$2 = `shown${EVENT_KEY$5}`;\nconst EVENT_HIDE$2 = `hide${EVENT_KEY$5}`;\nconst EVENT_HIDDEN$2 = `hidden${EVENT_KEY$5}`;\nconst EVENT_FOCUSIN$1 = `focusin${EVENT_KEY$5}`;\nconst EVENT_CLICK_DATA_API$1 = `click${EVENT_KEY$5}${DATA_API_KEY$2}`;\nconst EVENT_CLICK_DISMISS$1 = `click.dismiss${EVENT_KEY$5}`;\nconst EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY$5}`;\nconst SELECTOR_DATA_DISMISS$1 = '[data-bs-dismiss=\"offcanvas\"]';\nconst SELECTOR_DATA_TOGGLE$1 = '[data-bs-toggle=\"offcanvas\"]';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Offcanvas extends BaseComponent {\n  constructor(element, config) {\n    super(element);\n    this._config = this._getConfig(config);\n    this._isShown = false;\n    this._backdrop = this._initializeBackDrop();\n\n    this._addEventListeners();\n  } // Getters\n\n\n  static get NAME() {\n    return NAME$5;\n  }\n\n  static get Default() {\n    return Default$4;\n  } // Public\n\n\n  toggle(relatedTarget) {\n    return this._isShown ? this.hide() : this.show(relatedTarget);\n  }\n\n  show(relatedTarget) {\n    if (this._isShown) {\n      return;\n    }\n\n    const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$2, {\n      relatedTarget\n    });\n\n    if (showEvent.defaultPrevented) {\n      return;\n    }\n\n    this._isShown = true;\n    this._element.style.visibility = 'visible';\n\n    this._backdrop.show();\n\n    if (!this._config.scroll) {\n      new ScrollBarHelper().hide();\n\n      this._enforceFocusOnElement(this._element);\n    }\n\n    this._element.removeAttribute('aria-hidden');\n\n    this._element.setAttribute('aria-modal', true);\n\n    this._element.setAttribute('role', 'dialog');\n\n    this._element.classList.add(CLASS_NAME_SHOW$4);\n\n    const completeCallBack = () => {\n      EventHandler.trigger(this._element, EVENT_SHOWN$2, {\n        relatedTarget\n      });\n    };\n\n    this._queueCallback(completeCallBack, this._element, true);\n  }\n\n  hide() {\n    if (!this._isShown) {\n      return;\n    }\n\n    const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$2);\n\n    if (hideEvent.defaultPrevented) {\n      return;\n    }\n\n    EventHandler.off(document, EVENT_FOCUSIN$1);\n\n    this._element.blur();\n\n    this._isShown = false;\n\n    this._element.classList.remove(CLASS_NAME_SHOW$4);\n\n    this._backdrop.hide();\n\n    const completeCallback = () => {\n      this._element.setAttribute('aria-hidden', true);\n\n      this._element.removeAttribute('aria-modal');\n\n      this._element.removeAttribute('role');\n\n      this._element.style.visibility = 'hidden';\n\n      if (!this._config.scroll) {\n        new ScrollBarHelper().reset();\n      }\n\n      EventHandler.trigger(this._element, EVENT_HIDDEN$2);\n    };\n\n    this._queueCallback(completeCallback, this._element, true);\n  }\n\n  dispose() {\n    this._backdrop.dispose();\n\n    super.dispose();\n    EventHandler.off(document, EVENT_FOCUSIN$1);\n  } // Private\n\n\n  _getConfig(config) {\n    config = { ...Default$4,\n      ...Manipulator.getDataAttributes(this._element),\n      ...(typeof config === 'object' ? config : {})\n    };\n    typeCheckConfig(NAME$5, config, DefaultType$4);\n    return config;\n  }\n\n  _initializeBackDrop() {\n    return new Backdrop({\n      isVisible: this._config.backdrop,\n      isAnimated: true,\n      rootElement: this._element.parentNode,\n      clickCallback: () => this.hide()\n    });\n  }\n\n  _enforceFocusOnElement(element) {\n    EventHandler.off(document, EVENT_FOCUSIN$1); // guard against infinite focus loop\n\n    EventHandler.on(document, EVENT_FOCUSIN$1, event => {\n      if (document !== event.target && element !== event.target && !element.contains(event.target)) {\n        element.focus();\n      }\n    });\n    element.focus();\n  }\n\n  _addEventListeners() {\n    EventHandler.on(this._element, EVENT_CLICK_DISMISS$1, SELECTOR_DATA_DISMISS$1, () => this.hide());\n    EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS, event => {\n      if (this._config.keyboard && event.key === ESCAPE_KEY) {\n        this.hide();\n      }\n    });\n  } // Static\n\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Offcanvas.getOrCreateInstance(this, config);\n\n      if (typeof config !== 'string') {\n        return;\n      }\n\n      if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n        throw new TypeError(`No method named \"${config}\"`);\n      }\n\n      data[config](this);\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$1, SELECTOR_DATA_TOGGLE$1, function (event) {\n  const target = getElementFromSelector(this);\n\n  if (['A', 'AREA'].includes(this.tagName)) {\n    event.preventDefault();\n  }\n\n  if (isDisabled(this)) {\n    return;\n  }\n\n  EventHandler.one(target, EVENT_HIDDEN$2, () => {\n    // focus on trigger when it is closed\n    if (isVisible(this)) {\n      this.focus();\n    }\n  }); // avoid conflict when clicking a toggler of an offcanvas, while another is open\n\n  const allReadyOpen = SelectorEngine.findOne(OPEN_SELECTOR);\n\n  if (allReadyOpen && allReadyOpen !== target) {\n    Offcanvas.getInstance(allReadyOpen).hide();\n  }\n\n  const data = Offcanvas.getOrCreateInstance(target);\n  data.toggle(this);\n});\nEventHandler.on(window, EVENT_LOAD_DATA_API$1, () => SelectorEngine.find(OPEN_SELECTOR).forEach(el => Offcanvas.getOrCreateInstance(el).show()));\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\ndefineJQueryPlugin(Offcanvas);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): util/sanitizer.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\nconst uriAttrs = new Set(['background', 'cite', 'href', 'itemtype', 'longdesc', 'poster', 'src', 'xlink:href']);\nconst ARIA_ATTRIBUTE_PATTERN = /^aria-[\\w-]*$/i;\n/**\n * A pattern that recognizes a commonly useful subset of URLs that are safe.\n *\n * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts\n */\n\nconst SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file):|[^#&/:?]*(?:[#/?]|$))/i;\n/**\n * A pattern that matches safe data URLs. Only matches image, video and audio types.\n *\n * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts\n */\n\nconst DATA_URL_PATTERN = /^data:(?:image\\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\\/(?:mpeg|mp4|ogg|webm)|audio\\/(?:mp3|oga|ogg|opus));base64,[\\d+/a-z]+=*$/i;\n\nconst allowedAttribute = (attr, allowedAttributeList) => {\n  const attrName = attr.nodeName.toLowerCase();\n\n  if (allowedAttributeList.includes(attrName)) {\n    if (uriAttrs.has(attrName)) {\n      return Boolean(SAFE_URL_PATTERN.test(attr.nodeValue) || DATA_URL_PATTERN.test(attr.nodeValue));\n    }\n\n    return true;\n  }\n\n  const regExp = allowedAttributeList.filter(attrRegex => attrRegex instanceof RegExp); // Check if a regular expression validates the attribute.\n\n  for (let i = 0, len = regExp.length; i < len; i++) {\n    if (regExp[i].test(attrName)) {\n      return true;\n    }\n  }\n\n  return false;\n};\n\nconst DefaultAllowlist = {\n  // Global attributes allowed on any supplied element below.\n  '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],\n  a: ['target', 'href', 'title', 'rel'],\n  area: [],\n  b: [],\n  br: [],\n  col: [],\n  code: [],\n  div: [],\n  em: [],\n  hr: [],\n  h1: [],\n  h2: [],\n  h3: [],\n  h4: [],\n  h5: [],\n  h6: [],\n  i: [],\n  img: ['src', 'srcset', 'alt', 'title', 'width', 'height'],\n  li: [],\n  ol: [],\n  p: [],\n  pre: [],\n  s: [],\n  small: [],\n  span: [],\n  sub: [],\n  sup: [],\n  strong: [],\n  u: [],\n  ul: []\n};\nfunction sanitizeHtml(unsafeHtml, allowList, sanitizeFn) {\n  if (!unsafeHtml.length) {\n    return unsafeHtml;\n  }\n\n  if (sanitizeFn && typeof sanitizeFn === 'function') {\n    return sanitizeFn(unsafeHtml);\n  }\n\n  const domParser = new window.DOMParser();\n  const createdDocument = domParser.parseFromString(unsafeHtml, 'text/html');\n  const allowlistKeys = Object.keys(allowList);\n  const elements = [].concat(...createdDocument.body.querySelectorAll('*'));\n\n  for (let i = 0, len = elements.length; i < len; i++) {\n    const el = elements[i];\n    const elName = el.nodeName.toLowerCase();\n\n    if (!allowlistKeys.includes(elName)) {\n      el.remove();\n      continue;\n    }\n\n    const attributeList = [].concat(...el.attributes);\n    const allowedAttributes = [].concat(allowList['*'] || [], allowList[elName] || []);\n    attributeList.forEach(attr => {\n      if (!allowedAttribute(attr, allowedAttributes)) {\n        el.removeAttribute(attr.nodeName);\n      }\n    });\n  }\n\n  return createdDocument.body.innerHTML;\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): tooltip.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$4 = 'tooltip';\nconst DATA_KEY$4 = 'bs.tooltip';\nconst EVENT_KEY$4 = `.${DATA_KEY$4}`;\nconst CLASS_PREFIX$1 = 'bs-tooltip';\nconst BSCLS_PREFIX_REGEX$1 = new RegExp(`(^|\\\\s)${CLASS_PREFIX$1}\\\\S+`, 'g');\nconst DISALLOWED_ATTRIBUTES = new Set(['sanitize', 'allowList', 'sanitizeFn']);\nconst DefaultType$3 = {\n  animation: 'boolean',\n  template: 'string',\n  title: '(string|element|function)',\n  trigger: 'string',\n  delay: '(number|object)',\n  html: 'boolean',\n  selector: '(string|boolean)',\n  placement: '(string|function)',\n  offset: '(array|string|function)',\n  container: '(string|element|boolean)',\n  fallbackPlacements: 'array',\n  boundary: '(string|element)',\n  customClass: '(string|function)',\n  sanitize: 'boolean',\n  sanitizeFn: '(null|function)',\n  allowList: 'object',\n  popperConfig: '(null|object|function)'\n};\nconst AttachmentMap = {\n  AUTO: 'auto',\n  TOP: 'top',\n  RIGHT: isRTL() ? 'left' : 'right',\n  BOTTOM: 'bottom',\n  LEFT: isRTL() ? 'right' : 'left'\n};\nconst Default$3 = {\n  animation: true,\n  template: '<div class=\"tooltip\" role=\"tooltip\">' + '<div class=\"tooltip-arrow\"></div>' + '<div class=\"tooltip-inner\"></div>' + '</div>',\n  trigger: 'hover focus',\n  title: '',\n  delay: 0,\n  html: false,\n  selector: false,\n  placement: 'top',\n  offset: [0, 0],\n  container: false,\n  fallbackPlacements: ['top', 'right', 'bottom', 'left'],\n  boundary: 'clippingParents',\n  customClass: '',\n  sanitize: true,\n  sanitizeFn: null,\n  allowList: DefaultAllowlist,\n  popperConfig: null\n};\nconst Event$2 = {\n  HIDE: `hide${EVENT_KEY$4}`,\n  HIDDEN: `hidden${EVENT_KEY$4}`,\n  SHOW: `show${EVENT_KEY$4}`,\n  SHOWN: `shown${EVENT_KEY$4}`,\n  INSERTED: `inserted${EVENT_KEY$4}`,\n  CLICK: `click${EVENT_KEY$4}`,\n  FOCUSIN: `focusin${EVENT_KEY$4}`,\n  FOCUSOUT: `focusout${EVENT_KEY$4}`,\n  MOUSEENTER: `mouseenter${EVENT_KEY$4}`,\n  MOUSELEAVE: `mouseleave${EVENT_KEY$4}`\n};\nconst CLASS_NAME_FADE$3 = 'fade';\nconst CLASS_NAME_MODAL = 'modal';\nconst CLASS_NAME_SHOW$3 = 'show';\nconst HOVER_STATE_SHOW = 'show';\nconst HOVER_STATE_OUT = 'out';\nconst SELECTOR_TOOLTIP_INNER = '.tooltip-inner';\nconst TRIGGER_HOVER = 'hover';\nconst TRIGGER_FOCUS = 'focus';\nconst TRIGGER_CLICK = 'click';\nconst TRIGGER_MANUAL = 'manual';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Tooltip extends BaseComponent {\n  constructor(element, config) {\n    if (typeof Popper === 'undefined') {\n      throw new TypeError('Bootstrap\\'s tooltips require Popper (https://popper.js.org)');\n    }\n\n    super(element); // private\n\n    this._isEnabled = true;\n    this._timeout = 0;\n    this._hoverState = '';\n    this._activeTrigger = {};\n    this._popper = null; // Protected\n\n    this._config = this._getConfig(config);\n    this.tip = null;\n\n    this._setListeners();\n  } // Getters\n\n\n  static get Default() {\n    return Default$3;\n  }\n\n  static get NAME() {\n    return NAME$4;\n  }\n\n  static get Event() {\n    return Event$2;\n  }\n\n  static get DefaultType() {\n    return DefaultType$3;\n  } // Public\n\n\n  enable() {\n    this._isEnabled = true;\n  }\n\n  disable() {\n    this._isEnabled = false;\n  }\n\n  toggleEnabled() {\n    this._isEnabled = !this._isEnabled;\n  }\n\n  toggle(event) {\n    if (!this._isEnabled) {\n      return;\n    }\n\n    if (event) {\n      const context = this._initializeOnDelegatedTarget(event);\n\n      context._activeTrigger.click = !context._activeTrigger.click;\n\n      if (context._isWithActiveTrigger()) {\n        context._enter(null, context);\n      } else {\n        context._leave(null, context);\n      }\n    } else {\n      if (this.getTipElement().classList.contains(CLASS_NAME_SHOW$3)) {\n        this._leave(null, this);\n\n        return;\n      }\n\n      this._enter(null, this);\n    }\n  }\n\n  dispose() {\n    clearTimeout(this._timeout);\n    EventHandler.off(this._element.closest(`.${CLASS_NAME_MODAL}`), 'hide.bs.modal', this._hideModalHandler);\n\n    if (this.tip) {\n      this.tip.remove();\n    }\n\n    if (this._popper) {\n      this._popper.destroy();\n    }\n\n    super.dispose();\n  }\n\n  show() {\n    if (this._element.style.display === 'none') {\n      throw new Error('Please use show on visible elements');\n    }\n\n    if (!(this.isWithContent() && this._isEnabled)) {\n      return;\n    }\n\n    const showEvent = EventHandler.trigger(this._element, this.constructor.Event.SHOW);\n    const shadowRoot = findShadowRoot(this._element);\n    const isInTheDom = shadowRoot === null ? this._element.ownerDocument.documentElement.contains(this._element) : shadowRoot.contains(this._element);\n\n    if (showEvent.defaultPrevented || !isInTheDom) {\n      return;\n    }\n\n    const tip = this.getTipElement();\n    const tipId = getUID(this.constructor.NAME);\n    tip.setAttribute('id', tipId);\n\n    this._element.setAttribute('aria-describedby', tipId);\n\n    this.setContent();\n\n    if (this._config.animation) {\n      tip.classList.add(CLASS_NAME_FADE$3);\n    }\n\n    const placement = typeof this._config.placement === 'function' ? this._config.placement.call(this, tip, this._element) : this._config.placement;\n\n    const attachment = this._getAttachment(placement);\n\n    this._addAttachmentClass(attachment);\n\n    const {\n      container\n    } = this._config;\n    Data.set(tip, this.constructor.DATA_KEY, this);\n\n    if (!this._element.ownerDocument.documentElement.contains(this.tip)) {\n      container.appendChild(tip);\n      EventHandler.trigger(this._element, this.constructor.Event.INSERTED);\n    }\n\n    if (this._popper) {\n      this._popper.update();\n    } else {\n      this._popper = Popper.createPopper(this._element, tip, this._getPopperConfig(attachment));\n    }\n\n    tip.classList.add(CLASS_NAME_SHOW$3);\n    const customClass = typeof this._config.customClass === 'function' ? this._config.customClass() : this._config.customClass;\n\n    if (customClass) {\n      tip.classList.add(...customClass.split(' '));\n    } // If this is a touch-enabled device we add extra\n    // empty mouseover listeners to the body's immediate children;\n    // only needed because of broken event delegation on iOS\n    // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n\n\n    if ('ontouchstart' in document.documentElement) {\n      [].concat(...document.body.children).forEach(element => {\n        EventHandler.on(element, 'mouseover', noop);\n      });\n    }\n\n    const complete = () => {\n      const prevHoverState = this._hoverState;\n      this._hoverState = null;\n      EventHandler.trigger(this._element, this.constructor.Event.SHOWN);\n\n      if (prevHoverState === HOVER_STATE_OUT) {\n        this._leave(null, this);\n      }\n    };\n\n    const isAnimated = this.tip.classList.contains(CLASS_NAME_FADE$3);\n\n    this._queueCallback(complete, this.tip, isAnimated);\n  }\n\n  hide() {\n    if (!this._popper) {\n      return;\n    }\n\n    const tip = this.getTipElement();\n\n    const complete = () => {\n      if (this._isWithActiveTrigger()) {\n        return;\n      }\n\n      if (this._hoverState !== HOVER_STATE_SHOW) {\n        tip.remove();\n      }\n\n      this._cleanTipClass();\n\n      this._element.removeAttribute('aria-describedby');\n\n      EventHandler.trigger(this._element, this.constructor.Event.HIDDEN);\n\n      if (this._popper) {\n        this._popper.destroy();\n\n        this._popper = null;\n      }\n    };\n\n    const hideEvent = EventHandler.trigger(this._element, this.constructor.Event.HIDE);\n\n    if (hideEvent.defaultPrevented) {\n      return;\n    }\n\n    tip.classList.remove(CLASS_NAME_SHOW$3); // If this is a touch-enabled device we remove the extra\n    // empty mouseover listeners we added for iOS support\n\n    if ('ontouchstart' in document.documentElement) {\n      [].concat(...document.body.children).forEach(element => EventHandler.off(element, 'mouseover', noop));\n    }\n\n    this._activeTrigger[TRIGGER_CLICK] = false;\n    this._activeTrigger[TRIGGER_FOCUS] = false;\n    this._activeTrigger[TRIGGER_HOVER] = false;\n    const isAnimated = this.tip.classList.contains(CLASS_NAME_FADE$3);\n\n    this._queueCallback(complete, this.tip, isAnimated);\n\n    this._hoverState = '';\n  }\n\n  update() {\n    if (this._popper !== null) {\n      this._popper.update();\n    }\n  } // Protected\n\n\n  isWithContent() {\n    return Boolean(this.getTitle());\n  }\n\n  getTipElement() {\n    if (this.tip) {\n      return this.tip;\n    }\n\n    const element = document.createElement('div');\n    element.innerHTML = this._config.template;\n    this.tip = element.children[0];\n    return this.tip;\n  }\n\n  setContent() {\n    const tip = this.getTipElement();\n    this.setElementContent(SelectorEngine.findOne(SELECTOR_TOOLTIP_INNER, tip), this.getTitle());\n    tip.classList.remove(CLASS_NAME_FADE$3, CLASS_NAME_SHOW$3);\n  }\n\n  setElementContent(element, content) {\n    if (element === null) {\n      return;\n    }\n\n    if (isElement(content)) {\n      content = getElement(content); // content is a DOM node or a jQuery\n\n      if (this._config.html) {\n        if (content.parentNode !== element) {\n          element.innerHTML = '';\n          element.appendChild(content);\n        }\n      } else {\n        element.textContent = content.textContent;\n      }\n\n      return;\n    }\n\n    if (this._config.html) {\n      if (this._config.sanitize) {\n        content = sanitizeHtml(content, this._config.allowList, this._config.sanitizeFn);\n      }\n\n      element.innerHTML = content;\n    } else {\n      element.textContent = content;\n    }\n  }\n\n  getTitle() {\n    let title = this._element.getAttribute('data-bs-original-title');\n\n    if (!title) {\n      title = typeof this._config.title === 'function' ? this._config.title.call(this._element) : this._config.title;\n    }\n\n    return title;\n  }\n\n  updateAttachment(attachment) {\n    if (attachment === 'right') {\n      return 'end';\n    }\n\n    if (attachment === 'left') {\n      return 'start';\n    }\n\n    return attachment;\n  } // Private\n\n\n  _initializeOnDelegatedTarget(event, context) {\n    const dataKey = this.constructor.DATA_KEY;\n    context = context || Data.get(event.delegateTarget, dataKey);\n\n    if (!context) {\n      context = new this.constructor(event.delegateTarget, this._getDelegateConfig());\n      Data.set(event.delegateTarget, dataKey, context);\n    }\n\n    return context;\n  }\n\n  _getOffset() {\n    const {\n      offset\n    } = this._config;\n\n    if (typeof offset === 'string') {\n      return offset.split(',').map(val => Number.parseInt(val, 10));\n    }\n\n    if (typeof offset === 'function') {\n      return popperData => offset(popperData, this._element);\n    }\n\n    return offset;\n  }\n\n  _getPopperConfig(attachment) {\n    const defaultBsPopperConfig = {\n      placement: attachment,\n      modifiers: [{\n        name: 'flip',\n        options: {\n          fallbackPlacements: this._config.fallbackPlacements\n        }\n      }, {\n        name: 'offset',\n        options: {\n          offset: this._getOffset()\n        }\n      }, {\n        name: 'preventOverflow',\n        options: {\n          boundary: this._config.boundary\n        }\n      }, {\n        name: 'arrow',\n        options: {\n          element: `.${this.constructor.NAME}-arrow`\n        }\n      }, {\n        name: 'onChange',\n        enabled: true,\n        phase: 'afterWrite',\n        fn: data => this._handlePopperPlacementChange(data)\n      }],\n      onFirstUpdate: data => {\n        if (data.options.placement !== data.placement) {\n          this._handlePopperPlacementChange(data);\n        }\n      }\n    };\n    return { ...defaultBsPopperConfig,\n      ...(typeof this._config.popperConfig === 'function' ? this._config.popperConfig(defaultBsPopperConfig) : this._config.popperConfig)\n    };\n  }\n\n  _addAttachmentClass(attachment) {\n    this.getTipElement().classList.add(`${CLASS_PREFIX$1}-${this.updateAttachment(attachment)}`);\n  }\n\n  _getAttachment(placement) {\n    return AttachmentMap[placement.toUpperCase()];\n  }\n\n  _setListeners() {\n    const triggers = this._config.trigger.split(' ');\n\n    triggers.forEach(trigger => {\n      if (trigger === 'click') {\n        EventHandler.on(this._element, this.constructor.Event.CLICK, this._config.selector, event => this.toggle(event));\n      } else if (trigger !== TRIGGER_MANUAL) {\n        const eventIn = trigger === TRIGGER_HOVER ? this.constructor.Event.MOUSEENTER : this.constructor.Event.FOCUSIN;\n        const eventOut = trigger === TRIGGER_HOVER ? this.constructor.Event.MOUSELEAVE : this.constructor.Event.FOCUSOUT;\n        EventHandler.on(this._element, eventIn, this._config.selector, event => this._enter(event));\n        EventHandler.on(this._element, eventOut, this._config.selector, event => this._leave(event));\n      }\n    });\n\n    this._hideModalHandler = () => {\n      if (this._element) {\n        this.hide();\n      }\n    };\n\n    EventHandler.on(this._element.closest(`.${CLASS_NAME_MODAL}`), 'hide.bs.modal', this._hideModalHandler);\n\n    if (this._config.selector) {\n      this._config = { ...this._config,\n        trigger: 'manual',\n        selector: ''\n      };\n    } else {\n      this._fixTitle();\n    }\n  }\n\n  _fixTitle() {\n    const title = this._element.getAttribute('title');\n\n    const originalTitleType = typeof this._element.getAttribute('data-bs-original-title');\n\n    if (title || originalTitleType !== 'string') {\n      this._element.setAttribute('data-bs-original-title', title || '');\n\n      if (title && !this._element.getAttribute('aria-label') && !this._element.textContent) {\n        this._element.setAttribute('aria-label', title);\n      }\n\n      this._element.setAttribute('title', '');\n    }\n  }\n\n  _enter(event, context) {\n    context = this._initializeOnDelegatedTarget(event, context);\n\n    if (event) {\n      context._activeTrigger[event.type === 'focusin' ? TRIGGER_FOCUS : TRIGGER_HOVER] = true;\n    }\n\n    if (context.getTipElement().classList.contains(CLASS_NAME_SHOW$3) || context._hoverState === HOVER_STATE_SHOW) {\n      context._hoverState = HOVER_STATE_SHOW;\n      return;\n    }\n\n    clearTimeout(context._timeout);\n    context._hoverState = HOVER_STATE_SHOW;\n\n    if (!context._config.delay || !context._config.delay.show) {\n      context.show();\n      return;\n    }\n\n    context._timeout = setTimeout(() => {\n      if (context._hoverState === HOVER_STATE_SHOW) {\n        context.show();\n      }\n    }, context._config.delay.show);\n  }\n\n  _leave(event, context) {\n    context = this._initializeOnDelegatedTarget(event, context);\n\n    if (event) {\n      context._activeTrigger[event.type === 'focusout' ? TRIGGER_FOCUS : TRIGGER_HOVER] = context._element.contains(event.relatedTarget);\n    }\n\n    if (context._isWithActiveTrigger()) {\n      return;\n    }\n\n    clearTimeout(context._timeout);\n    context._hoverState = HOVER_STATE_OUT;\n\n    if (!context._config.delay || !context._config.delay.hide) {\n      context.hide();\n      return;\n    }\n\n    context._timeout = setTimeout(() => {\n      if (context._hoverState === HOVER_STATE_OUT) {\n        context.hide();\n      }\n    }, context._config.delay.hide);\n  }\n\n  _isWithActiveTrigger() {\n    for (const trigger in this._activeTrigger) {\n      if (this._activeTrigger[trigger]) {\n        return true;\n      }\n    }\n\n    return false;\n  }\n\n  _getConfig(config) {\n    const dataAttributes = Manipulator.getDataAttributes(this._element);\n    Object.keys(dataAttributes).forEach(dataAttr => {\n      if (DISALLOWED_ATTRIBUTES.has(dataAttr)) {\n        delete dataAttributes[dataAttr];\n      }\n    });\n    config = { ...this.constructor.Default,\n      ...dataAttributes,\n      ...(typeof config === 'object' && config ? config : {})\n    };\n    config.container = config.container === false ? document.body : getElement(config.container);\n\n    if (typeof config.delay === 'number') {\n      config.delay = {\n        show: config.delay,\n        hide: config.delay\n      };\n    }\n\n    if (typeof config.title === 'number') {\n      config.title = config.title.toString();\n    }\n\n    if (typeof config.content === 'number') {\n      config.content = config.content.toString();\n    }\n\n    typeCheckConfig(NAME$4, config, this.constructor.DefaultType);\n\n    if (config.sanitize) {\n      config.template = sanitizeHtml(config.template, config.allowList, config.sanitizeFn);\n    }\n\n    return config;\n  }\n\n  _getDelegateConfig() {\n    const config = {};\n\n    if (this._config) {\n      for (const key in this._config) {\n        if (this.constructor.Default[key] !== this._config[key]) {\n          config[key] = this._config[key];\n        }\n      }\n    }\n\n    return config;\n  }\n\n  _cleanTipClass() {\n    const tip = this.getTipElement();\n    const tabClass = tip.getAttribute('class').match(BSCLS_PREFIX_REGEX$1);\n\n    if (tabClass !== null && tabClass.length > 0) {\n      tabClass.map(token => token.trim()).forEach(tClass => tip.classList.remove(tClass));\n    }\n  }\n\n  _handlePopperPlacementChange(popperData) {\n    const {\n      state\n    } = popperData;\n\n    if (!state) {\n      return;\n    }\n\n    this.tip = state.elements.popper;\n\n    this._cleanTipClass();\n\n    this._addAttachmentClass(this._getAttachment(state.placement));\n  } // Static\n\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Tooltip.getOrCreateInstance(this, config);\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config]();\n      }\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Tooltip to jQuery only if jQuery is present\n */\n\n\ndefineJQueryPlugin(Tooltip);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): popover.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$3 = 'popover';\nconst DATA_KEY$3 = 'bs.popover';\nconst EVENT_KEY$3 = `.${DATA_KEY$3}`;\nconst CLASS_PREFIX = 'bs-popover';\nconst BSCLS_PREFIX_REGEX = new RegExp(`(^|\\\\s)${CLASS_PREFIX}\\\\S+`, 'g');\nconst Default$2 = { ...Tooltip.Default,\n  placement: 'right',\n  offset: [0, 8],\n  trigger: 'click',\n  content: '',\n  template: '<div class=\"popover\" role=\"tooltip\">' + '<div class=\"popover-arrow\"></div>' + '<h3 class=\"popover-header\"></h3>' + '<div class=\"popover-body\"></div>' + '</div>'\n};\nconst DefaultType$2 = { ...Tooltip.DefaultType,\n  content: '(string|element|function)'\n};\nconst Event$1 = {\n  HIDE: `hide${EVENT_KEY$3}`,\n  HIDDEN: `hidden${EVENT_KEY$3}`,\n  SHOW: `show${EVENT_KEY$3}`,\n  SHOWN: `shown${EVENT_KEY$3}`,\n  INSERTED: `inserted${EVENT_KEY$3}`,\n  CLICK: `click${EVENT_KEY$3}`,\n  FOCUSIN: `focusin${EVENT_KEY$3}`,\n  FOCUSOUT: `focusout${EVENT_KEY$3}`,\n  MOUSEENTER: `mouseenter${EVENT_KEY$3}`,\n  MOUSELEAVE: `mouseleave${EVENT_KEY$3}`\n};\nconst CLASS_NAME_FADE$2 = 'fade';\nconst CLASS_NAME_SHOW$2 = 'show';\nconst SELECTOR_TITLE = '.popover-header';\nconst SELECTOR_CONTENT = '.popover-body';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Popover extends Tooltip {\n  // Getters\n  static get Default() {\n    return Default$2;\n  }\n\n  static get NAME() {\n    return NAME$3;\n  }\n\n  static get Event() {\n    return Event$1;\n  }\n\n  static get DefaultType() {\n    return DefaultType$2;\n  } // Overrides\n\n\n  isWithContent() {\n    return this.getTitle() || this._getContent();\n  }\n\n  getTipElement() {\n    if (this.tip) {\n      return this.tip;\n    }\n\n    this.tip = super.getTipElement();\n\n    if (!this.getTitle()) {\n      SelectorEngine.findOne(SELECTOR_TITLE, this.tip).remove();\n    }\n\n    if (!this._getContent()) {\n      SelectorEngine.findOne(SELECTOR_CONTENT, this.tip).remove();\n    }\n\n    return this.tip;\n  }\n\n  setContent() {\n    const tip = this.getTipElement(); // we use append for html objects to maintain js events\n\n    this.setElementContent(SelectorEngine.findOne(SELECTOR_TITLE, tip), this.getTitle());\n\n    let content = this._getContent();\n\n    if (typeof content === 'function') {\n      content = content.call(this._element);\n    }\n\n    this.setElementContent(SelectorEngine.findOne(SELECTOR_CONTENT, tip), content);\n    tip.classList.remove(CLASS_NAME_FADE$2, CLASS_NAME_SHOW$2);\n  } // Private\n\n\n  _addAttachmentClass(attachment) {\n    this.getTipElement().classList.add(`${CLASS_PREFIX}-${this.updateAttachment(attachment)}`);\n  }\n\n  _getContent() {\n    return this._element.getAttribute('data-bs-content') || this._config.content;\n  }\n\n  _cleanTipClass() {\n    const tip = this.getTipElement();\n    const tabClass = tip.getAttribute('class').match(BSCLS_PREFIX_REGEX);\n\n    if (tabClass !== null && tabClass.length > 0) {\n      tabClass.map(token => token.trim()).forEach(tClass => tip.classList.remove(tClass));\n    }\n  } // Static\n\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Popover.getOrCreateInstance(this, config);\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config]();\n      }\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Popover to jQuery only if jQuery is present\n */\n\n\ndefineJQueryPlugin(Popover);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): scrollspy.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$2 = 'scrollspy';\nconst DATA_KEY$2 = 'bs.scrollspy';\nconst EVENT_KEY$2 = `.${DATA_KEY$2}`;\nconst DATA_API_KEY$1 = '.data-api';\nconst Default$1 = {\n  offset: 10,\n  method: 'auto',\n  target: ''\n};\nconst DefaultType$1 = {\n  offset: 'number',\n  method: 'string',\n  target: '(string|element)'\n};\nconst EVENT_ACTIVATE = `activate${EVENT_KEY$2}`;\nconst EVENT_SCROLL = `scroll${EVENT_KEY$2}`;\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY$2}${DATA_API_KEY$1}`;\nconst CLASS_NAME_DROPDOWN_ITEM = 'dropdown-item';\nconst CLASS_NAME_ACTIVE$1 = 'active';\nconst SELECTOR_DATA_SPY = '[data-bs-spy=\"scroll\"]';\nconst SELECTOR_NAV_LIST_GROUP$1 = '.nav, .list-group';\nconst SELECTOR_NAV_LINKS = '.nav-link';\nconst SELECTOR_NAV_ITEMS = '.nav-item';\nconst SELECTOR_LIST_ITEMS = '.list-group-item';\nconst SELECTOR_DROPDOWN$1 = '.dropdown';\nconst SELECTOR_DROPDOWN_TOGGLE$1 = '.dropdown-toggle';\nconst METHOD_OFFSET = 'offset';\nconst METHOD_POSITION = 'position';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass ScrollSpy extends BaseComponent {\n  constructor(element, config) {\n    super(element);\n    this._scrollElement = this._element.tagName === 'BODY' ? window : this._element;\n    this._config = this._getConfig(config);\n    this._selector = `${this._config.target} ${SELECTOR_NAV_LINKS}, ${this._config.target} ${SELECTOR_LIST_ITEMS}, ${this._config.target} .${CLASS_NAME_DROPDOWN_ITEM}`;\n    this._offsets = [];\n    this._targets = [];\n    this._activeTarget = null;\n    this._scrollHeight = 0;\n    EventHandler.on(this._scrollElement, EVENT_SCROLL, () => this._process());\n    this.refresh();\n\n    this._process();\n  } // Getters\n\n\n  static get Default() {\n    return Default$1;\n  }\n\n  static get NAME() {\n    return NAME$2;\n  } // Public\n\n\n  refresh() {\n    const autoMethod = this._scrollElement === this._scrollElement.window ? METHOD_OFFSET : METHOD_POSITION;\n    const offsetMethod = this._config.method === 'auto' ? autoMethod : this._config.method;\n    const offsetBase = offsetMethod === METHOD_POSITION ? this._getScrollTop() : 0;\n    this._offsets = [];\n    this._targets = [];\n    this._scrollHeight = this._getScrollHeight();\n    const targets = SelectorEngine.find(this._selector);\n    targets.map(element => {\n      const targetSelector = getSelectorFromElement(element);\n      const target = targetSelector ? SelectorEngine.findOne(targetSelector) : null;\n\n      if (target) {\n        const targetBCR = target.getBoundingClientRect();\n\n        if (targetBCR.width || targetBCR.height) {\n          return [Manipulator[offsetMethod](target).top + offsetBase, targetSelector];\n        }\n      }\n\n      return null;\n    }).filter(item => item).sort((a, b) => a[0] - b[0]).forEach(item => {\n      this._offsets.push(item[0]);\n\n      this._targets.push(item[1]);\n    });\n  }\n\n  dispose() {\n    EventHandler.off(this._scrollElement, EVENT_KEY$2);\n    super.dispose();\n  } // Private\n\n\n  _getConfig(config) {\n    config = { ...Default$1,\n      ...Manipulator.getDataAttributes(this._element),\n      ...(typeof config === 'object' && config ? config : {})\n    };\n\n    if (typeof config.target !== 'string' && isElement(config.target)) {\n      let {\n        id\n      } = config.target;\n\n      if (!id) {\n        id = getUID(NAME$2);\n        config.target.id = id;\n      }\n\n      config.target = `#${id}`;\n    }\n\n    typeCheckConfig(NAME$2, config, DefaultType$1);\n    return config;\n  }\n\n  _getScrollTop() {\n    return this._scrollElement === window ? this._scrollElement.pageYOffset : this._scrollElement.scrollTop;\n  }\n\n  _getScrollHeight() {\n    return this._scrollElement.scrollHeight || Math.max(document.body.scrollHeight, document.documentElement.scrollHeight);\n  }\n\n  _getOffsetHeight() {\n    return this._scrollElement === window ? window.innerHeight : this._scrollElement.getBoundingClientRect().height;\n  }\n\n  _process() {\n    const scrollTop = this._getScrollTop() + this._config.offset;\n\n    const scrollHeight = this._getScrollHeight();\n\n    const maxScroll = this._config.offset + scrollHeight - this._getOffsetHeight();\n\n    if (this._scrollHeight !== scrollHeight) {\n      this.refresh();\n    }\n\n    if (scrollTop >= maxScroll) {\n      const target = this._targets[this._targets.length - 1];\n\n      if (this._activeTarget !== target) {\n        this._activate(target);\n      }\n\n      return;\n    }\n\n    if (this._activeTarget && scrollTop < this._offsets[0] && this._offsets[0] > 0) {\n      this._activeTarget = null;\n\n      this._clear();\n\n      return;\n    }\n\n    for (let i = this._offsets.length; i--;) {\n      const isActiveTarget = this._activeTarget !== this._targets[i] && scrollTop >= this._offsets[i] && (typeof this._offsets[i + 1] === 'undefined' || scrollTop < this._offsets[i + 1]);\n\n      if (isActiveTarget) {\n        this._activate(this._targets[i]);\n      }\n    }\n  }\n\n  _activate(target) {\n    this._activeTarget = target;\n\n    this._clear();\n\n    const queries = this._selector.split(',').map(selector => `${selector}[data-bs-target=\"${target}\"],${selector}[href=\"${target}\"]`);\n\n    const link = SelectorEngine.findOne(queries.join(','));\n\n    if (link.classList.contains(CLASS_NAME_DROPDOWN_ITEM)) {\n      SelectorEngine.findOne(SELECTOR_DROPDOWN_TOGGLE$1, link.closest(SELECTOR_DROPDOWN$1)).classList.add(CLASS_NAME_ACTIVE$1);\n      link.classList.add(CLASS_NAME_ACTIVE$1);\n    } else {\n      // Set triggered link as active\n      link.classList.add(CLASS_NAME_ACTIVE$1);\n      SelectorEngine.parents(link, SELECTOR_NAV_LIST_GROUP$1).forEach(listGroup => {\n        // Set triggered links parents as active\n        // With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor\n        SelectorEngine.prev(listGroup, `${SELECTOR_NAV_LINKS}, ${SELECTOR_LIST_ITEMS}`).forEach(item => item.classList.add(CLASS_NAME_ACTIVE$1)); // Handle special case when .nav-link is inside .nav-item\n\n        SelectorEngine.prev(listGroup, SELECTOR_NAV_ITEMS).forEach(navItem => {\n          SelectorEngine.children(navItem, SELECTOR_NAV_LINKS).forEach(item => item.classList.add(CLASS_NAME_ACTIVE$1));\n        });\n      });\n    }\n\n    EventHandler.trigger(this._scrollElement, EVENT_ACTIVATE, {\n      relatedTarget: target\n    });\n  }\n\n  _clear() {\n    SelectorEngine.find(this._selector).filter(node => node.classList.contains(CLASS_NAME_ACTIVE$1)).forEach(node => node.classList.remove(CLASS_NAME_ACTIVE$1));\n  } // Static\n\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = ScrollSpy.getOrCreateInstance(this, config);\n\n      if (typeof config !== 'string') {\n        return;\n      }\n\n      if (typeof data[config] === 'undefined') {\n        throw new TypeError(`No method named \"${config}\"`);\n      }\n\n      data[config]();\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n  SelectorEngine.find(SELECTOR_DATA_SPY).forEach(spy => new ScrollSpy(spy));\n});\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .ScrollSpy to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(ScrollSpy);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): tab.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME$1 = 'tab';\nconst DATA_KEY$1 = 'bs.tab';\nconst EVENT_KEY$1 = `.${DATA_KEY$1}`;\nconst DATA_API_KEY = '.data-api';\nconst EVENT_HIDE$1 = `hide${EVENT_KEY$1}`;\nconst EVENT_HIDDEN$1 = `hidden${EVENT_KEY$1}`;\nconst EVENT_SHOW$1 = `show${EVENT_KEY$1}`;\nconst EVENT_SHOWN$1 = `shown${EVENT_KEY$1}`;\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY$1}${DATA_API_KEY}`;\nconst CLASS_NAME_DROPDOWN_MENU = 'dropdown-menu';\nconst CLASS_NAME_ACTIVE = 'active';\nconst CLASS_NAME_FADE$1 = 'fade';\nconst CLASS_NAME_SHOW$1 = 'show';\nconst SELECTOR_DROPDOWN = '.dropdown';\nconst SELECTOR_NAV_LIST_GROUP = '.nav, .list-group';\nconst SELECTOR_ACTIVE = '.active';\nconst SELECTOR_ACTIVE_UL = ':scope > li > .active';\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"tab\"], [data-bs-toggle=\"pill\"], [data-bs-toggle=\"list\"]';\nconst SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle';\nconst SELECTOR_DROPDOWN_ACTIVE_CHILD = ':scope > .dropdown-menu .active';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Tab extends BaseComponent {\n  // Getters\n  static get NAME() {\n    return NAME$1;\n  } // Public\n\n\n  show() {\n    if (this._element.parentNode && this._element.parentNode.nodeType === Node.ELEMENT_NODE && this._element.classList.contains(CLASS_NAME_ACTIVE)) {\n      return;\n    }\n\n    let previous;\n    const target = getElementFromSelector(this._element);\n\n    const listElement = this._element.closest(SELECTOR_NAV_LIST_GROUP);\n\n    if (listElement) {\n      const itemSelector = listElement.nodeName === 'UL' || listElement.nodeName === 'OL' ? SELECTOR_ACTIVE_UL : SELECTOR_ACTIVE;\n      previous = SelectorEngine.find(itemSelector, listElement);\n      previous = previous[previous.length - 1];\n    }\n\n    const hideEvent = previous ? EventHandler.trigger(previous, EVENT_HIDE$1, {\n      relatedTarget: this._element\n    }) : null;\n    const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$1, {\n      relatedTarget: previous\n    });\n\n    if (showEvent.defaultPrevented || hideEvent !== null && hideEvent.defaultPrevented) {\n      return;\n    }\n\n    this._activate(this._element, listElement);\n\n    const complete = () => {\n      EventHandler.trigger(previous, EVENT_HIDDEN$1, {\n        relatedTarget: this._element\n      });\n      EventHandler.trigger(this._element, EVENT_SHOWN$1, {\n        relatedTarget: previous\n      });\n    };\n\n    if (target) {\n      this._activate(target, target.parentNode, complete);\n    } else {\n      complete();\n    }\n  } // Private\n\n\n  _activate(element, container, callback) {\n    const activeElements = container && (container.nodeName === 'UL' || container.nodeName === 'OL') ? SelectorEngine.find(SELECTOR_ACTIVE_UL, container) : SelectorEngine.children(container, SELECTOR_ACTIVE);\n    const active = activeElements[0];\n    const isTransitioning = callback && active && active.classList.contains(CLASS_NAME_FADE$1);\n\n    const complete = () => this._transitionComplete(element, active, callback);\n\n    if (active && isTransitioning) {\n      active.classList.remove(CLASS_NAME_SHOW$1);\n\n      this._queueCallback(complete, element, true);\n    } else {\n      complete();\n    }\n  }\n\n  _transitionComplete(element, active, callback) {\n    if (active) {\n      active.classList.remove(CLASS_NAME_ACTIVE);\n      const dropdownChild = SelectorEngine.findOne(SELECTOR_DROPDOWN_ACTIVE_CHILD, active.parentNode);\n\n      if (dropdownChild) {\n        dropdownChild.classList.remove(CLASS_NAME_ACTIVE);\n      }\n\n      if (active.getAttribute('role') === 'tab') {\n        active.setAttribute('aria-selected', false);\n      }\n    }\n\n    element.classList.add(CLASS_NAME_ACTIVE);\n\n    if (element.getAttribute('role') === 'tab') {\n      element.setAttribute('aria-selected', true);\n    }\n\n    reflow(element);\n\n    if (element.classList.contains(CLASS_NAME_FADE$1)) {\n      element.classList.add(CLASS_NAME_SHOW$1);\n    }\n\n    let parent = element.parentNode;\n\n    if (parent && parent.nodeName === 'LI') {\n      parent = parent.parentNode;\n    }\n\n    if (parent && parent.classList.contains(CLASS_NAME_DROPDOWN_MENU)) {\n      const dropdownElement = element.closest(SELECTOR_DROPDOWN);\n\n      if (dropdownElement) {\n        SelectorEngine.find(SELECTOR_DROPDOWN_TOGGLE, dropdownElement).forEach(dropdown => dropdown.classList.add(CLASS_NAME_ACTIVE));\n      }\n\n      element.setAttribute('aria-expanded', true);\n    }\n\n    if (callback) {\n      callback();\n    }\n  } // Static\n\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Tab.getOrCreateInstance(this);\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config]();\n      }\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n  if (['A', 'AREA'].includes(this.tagName)) {\n    event.preventDefault();\n  }\n\n  if (isDisabled(this)) {\n    return;\n  }\n\n  const data = Tab.getOrCreateInstance(this);\n  data.show();\n});\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Tab to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(Tab);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.2): toast.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n/**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'toast';\nconst DATA_KEY = 'bs.toast';\nconst EVENT_KEY = `.${DATA_KEY}`;\nconst EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY}`;\nconst EVENT_MOUSEOVER = `mouseover${EVENT_KEY}`;\nconst EVENT_MOUSEOUT = `mouseout${EVENT_KEY}`;\nconst EVENT_FOCUSIN = `focusin${EVENT_KEY}`;\nconst EVENT_FOCUSOUT = `focusout${EVENT_KEY}`;\nconst EVENT_HIDE = `hide${EVENT_KEY}`;\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`;\nconst EVENT_SHOW = `show${EVENT_KEY}`;\nconst EVENT_SHOWN = `shown${EVENT_KEY}`;\nconst CLASS_NAME_FADE = 'fade';\nconst CLASS_NAME_HIDE = 'hide';\nconst CLASS_NAME_SHOW = 'show';\nconst CLASS_NAME_SHOWING = 'showing';\nconst DefaultType = {\n  animation: 'boolean',\n  autohide: 'boolean',\n  delay: 'number'\n};\nconst Default = {\n  animation: true,\n  autohide: true,\n  delay: 5000\n};\nconst SELECTOR_DATA_DISMISS = '[data-bs-dismiss=\"toast\"]';\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass Toast extends BaseComponent {\n  constructor(element, config) {\n    super(element);\n    this._config = this._getConfig(config);\n    this._timeout = null;\n    this._hasMouseInteraction = false;\n    this._hasKeyboardInteraction = false;\n\n    this._setListeners();\n  } // Getters\n\n\n  static get DefaultType() {\n    return DefaultType;\n  }\n\n  static get Default() {\n    return Default;\n  }\n\n  static get NAME() {\n    return NAME;\n  } // Public\n\n\n  show() {\n    const showEvent = EventHandler.trigger(this._element, EVENT_SHOW);\n\n    if (showEvent.defaultPrevented) {\n      return;\n    }\n\n    this._clearTimeout();\n\n    if (this._config.animation) {\n      this._element.classList.add(CLASS_NAME_FADE);\n    }\n\n    const complete = () => {\n      this._element.classList.remove(CLASS_NAME_SHOWING);\n\n      this._element.classList.add(CLASS_NAME_SHOW);\n\n      EventHandler.trigger(this._element, EVENT_SHOWN);\n\n      this._maybeScheduleHide();\n    };\n\n    this._element.classList.remove(CLASS_NAME_HIDE);\n\n    reflow(this._element);\n\n    this._element.classList.add(CLASS_NAME_SHOWING);\n\n    this._queueCallback(complete, this._element, this._config.animation);\n  }\n\n  hide() {\n    if (!this._element.classList.contains(CLASS_NAME_SHOW)) {\n      return;\n    }\n\n    const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE);\n\n    if (hideEvent.defaultPrevented) {\n      return;\n    }\n\n    const complete = () => {\n      this._element.classList.add(CLASS_NAME_HIDE);\n\n      EventHandler.trigger(this._element, EVENT_HIDDEN);\n    };\n\n    this._element.classList.remove(CLASS_NAME_SHOW);\n\n    this._queueCallback(complete, this._element, this._config.animation);\n  }\n\n  dispose() {\n    this._clearTimeout();\n\n    if (this._element.classList.contains(CLASS_NAME_SHOW)) {\n      this._element.classList.remove(CLASS_NAME_SHOW);\n    }\n\n    super.dispose();\n  } // Private\n\n\n  _getConfig(config) {\n    config = { ...Default,\n      ...Manipulator.getDataAttributes(this._element),\n      ...(typeof config === 'object' && config ? config : {})\n    };\n    typeCheckConfig(NAME, config, this.constructor.DefaultType);\n    return config;\n  }\n\n  _maybeScheduleHide() {\n    if (!this._config.autohide) {\n      return;\n    }\n\n    if (this._hasMouseInteraction || this._hasKeyboardInteraction) {\n      return;\n    }\n\n    this._timeout = setTimeout(() => {\n      this.hide();\n    }, this._config.delay);\n  }\n\n  _onInteraction(event, isInteracting) {\n    switch (event.type) {\n      case 'mouseover':\n      case 'mouseout':\n        this._hasMouseInteraction = isInteracting;\n        break;\n\n      case 'focusin':\n      case 'focusout':\n        this._hasKeyboardInteraction = isInteracting;\n        break;\n    }\n\n    if (isInteracting) {\n      this._clearTimeout();\n\n      return;\n    }\n\n    const nextElement = event.relatedTarget;\n\n    if (this._element === nextElement || this._element.contains(nextElement)) {\n      return;\n    }\n\n    this._maybeScheduleHide();\n  }\n\n  _setListeners() {\n    EventHandler.on(this._element, EVENT_CLICK_DISMISS, SELECTOR_DATA_DISMISS, () => this.hide());\n    EventHandler.on(this._element, EVENT_MOUSEOVER, event => this._onInteraction(event, true));\n    EventHandler.on(this._element, EVENT_MOUSEOUT, event => this._onInteraction(event, false));\n    EventHandler.on(this._element, EVENT_FOCUSIN, event => this._onInteraction(event, true));\n    EventHandler.on(this._element, EVENT_FOCUSOUT, event => this._onInteraction(event, false));\n  }\n\n  _clearTimeout() {\n    clearTimeout(this._timeout);\n    this._timeout = null;\n  } // Static\n\n\n  static jQueryInterface(config) {\n    return this.each(function () {\n      const data = Toast.getOrCreateInstance(this, config);\n\n      if (typeof config === 'string') {\n        if (typeof data[config] === 'undefined') {\n          throw new TypeError(`No method named \"${config}\"`);\n        }\n\n        data[config](this);\n      }\n    });\n  }\n\n}\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .Toast to jQuery only if jQuery is present\n */\n\n\ndefineJQueryPlugin(Toast);\n\nexport { Alert, Button, Carousel, Collapse, Dropdown, Modal, Offcanvas, Popover, ScrollSpy, Tab, Toast, Tooltip };\n//# sourceMappingURL=bootstrap.esm.js.map\n"
  },
  {
    "path": "src/sourceDev.WebApp/wwwroot/js/jquery.js",
    "content": "/*!\n * jQuery JavaScript Library v3.7.0\n * https://jquery.com/\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license\n * https://jquery.org/license\n *\n * Date: 2023-05-11T18:29Z\n */\n(function (global, factory) {\n\n\t\"use strict\";\n\n\tif (typeof module === \"object\" && typeof module.exports === \"object\") {\n\n\t\t// For CommonJS and CommonJS-like environments where a proper `window`\n\t\t// is present, execute the factory and get jQuery.\n\t\t// For environments that do not have a `window` with a `document`\n\t\t// (such as Node.js), expose a factory as module.exports.\n\t\t// This accentuates the need for the creation of a real `window`.\n\t\t// e.g. var jQuery = require(\"jquery\")(window);\n\t\t// See ticket trac-14549 for more info.\n\t\tmodule.exports = global.document ?\n\t\t\tfactory(global, true) :\n\t\t\tfunction (w) {\n\t\t\t\tif (!w.document) {\n\t\t\t\t\tthrow new Error(\"jQuery requires a window with a document\");\n\t\t\t\t}\n\t\t\t\treturn factory(w);\n\t\t\t};\n\t} else {\n\t\tfactory(global);\n\t}\n\n\t// Pass this if window is not defined yet\n})(typeof window !== \"undefined\" ? window : this, function (window, noGlobal) {\n\n\t// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1\n\t// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode\n\t// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common\n\t// enough that all such attempts are guarded in a try block.\n\t\"use strict\";\n\n\tvar arr = [];\n\n\tvar getProto = Object.getPrototypeOf;\n\n\tvar slice = arr.slice;\n\n\tvar flat = arr.flat ? function (array) {\n\t\treturn arr.flat.call(array);\n\t} : function (array) {\n\t\treturn arr.concat.apply([], array);\n\t};\n\n\n\tvar push = arr.push;\n\n\tvar indexOf = arr.indexOf;\n\n\tvar class2type = {};\n\n\tvar toString = class2type.toString;\n\n\tvar hasOwn = class2type.hasOwnProperty;\n\n\tvar fnToString = hasOwn.toString;\n\n\tvar ObjectFunctionString = fnToString.call(Object);\n\n\tvar support = {};\n\n\tvar isFunction = function isFunction(obj) {\n\n\t\t// Support: Chrome <=57, Firefox <=52\n\t\t// In some browsers, typeof returns \"function\" for HTML <object> elements\n\t\t// (i.e., `typeof document.createElement( \"object\" ) === \"function\"`).\n\t\t// We don't want to classify *any* DOM node as a function.\n\t\t// Support: QtWeb <=3.8.5, WebKit <=534.34, wkhtmltopdf tool <=0.12.5\n\t\t// Plus for old WebKit, typeof returns \"function\" for HTML collections\n\t\t// (e.g., `typeof document.getElementsByTagName(\"div\") === \"function\"`). (gh-4756)\n\t\treturn typeof obj === \"function\" && typeof obj.nodeType !== \"number\" &&\n\t\t\ttypeof obj.item !== \"function\";\n\t};\n\n\n\tvar isWindow = function isWindow(obj) {\n\t\treturn obj != null && obj === obj.window;\n\t};\n\n\n\tvar document = window.document;\n\n\n\n\tvar preservedScriptAttributes = {\n\t\ttype: true,\n\t\tsrc: true,\n\t\tnonce: true,\n\t\tnoModule: true\n\t};\n\n\tfunction DOMEval(code, node, doc) {\n\t\tdoc = doc || document;\n\n\t\tvar i, val,\n\t\t\tscript = doc.createElement(\"script\");\n\n\t\tscript.text = code;\n\t\tif (node) {\n\t\t\tfor (i in preservedScriptAttributes) {\n\n\t\t\t\t// Support: Firefox 64+, Edge 18+\n\t\t\t\t// Some browsers don't support the \"nonce\" property on scripts.\n\t\t\t\t// On the other hand, just using `getAttribute` is not enough as\n\t\t\t\t// the `nonce` attribute is reset to an empty string whenever it\n\t\t\t\t// becomes browsing-context connected.\n\t\t\t\t// See https://github.com/whatwg/html/issues/2369\n\t\t\t\t// See https://html.spec.whatwg.org/#nonce-attributes\n\t\t\t\t// The `node.getAttribute` check was added for the sake of\n\t\t\t\t// `jQuery.globalEval` so that it can fake a nonce-containing node\n\t\t\t\t// via an object.\n\t\t\t\tval = node[i] || node.getAttribute && node.getAttribute(i);\n\t\t\t\tif (val) {\n\t\t\t\t\tscript.setAttribute(i, val);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tdoc.head.appendChild(script).parentNode.removeChild(script);\n\t}\n\n\n\tfunction toType(obj) {\n\t\tif (obj == null) {\n\t\t\treturn obj + \"\";\n\t\t}\n\n\t\t// Support: Android <=2.3 only (functionish RegExp)\n\t\treturn typeof obj === \"object\" || typeof obj === \"function\" ?\n\t\t\tclass2type[toString.call(obj)] || \"object\" :\n\t\t\ttypeof obj;\n\t}\n\t/* global Symbol */\n\t// Defining this global in .eslintrc.json would create a danger of using the global\n\t// unguarded in another place, it seems safer to define global only for this module\n\n\n\n\tvar version = \"3.7.0\",\n\n\t\trhtmlSuffix = /HTML$/i,\n\n\t\t// Define a local copy of jQuery\n\t\tjQuery = function (selector, context) {\n\n\t\t\t// The jQuery object is actually just the init constructor 'enhanced'\n\t\t\t// Need init if jQuery is called (just allow error to be thrown if not included)\n\t\t\treturn new jQuery.fn.init(selector, context);\n\t\t};\n\n\tjQuery.fn = jQuery.prototype = {\n\n\t\t// The current version of jQuery being used\n\t\tjquery: version,\n\n\t\tconstructor: jQuery,\n\n\t\t// The default length of a jQuery object is 0\n\t\tlength: 0,\n\n\t\ttoArray: function () {\n\t\t\treturn slice.call(this);\n\t\t},\n\n\t\t// Get the Nth element in the matched element set OR\n\t\t// Get the whole matched element set as a clean array\n\t\tget: function (num) {\n\n\t\t\t// Return all the elements in a clean array\n\t\t\tif (num == null) {\n\t\t\t\treturn slice.call(this);\n\t\t\t}\n\n\t\t\t// Return just the one element from the set\n\t\t\treturn num < 0 ? this[num + this.length] : this[num];\n\t\t},\n\n\t\t// Take an array of elements and push it onto the stack\n\t\t// (returning the new matched element set)\n\t\tpushStack: function (elems) {\n\n\t\t\t// Build a new jQuery matched element set\n\t\t\tvar ret = jQuery.merge(this.constructor(), elems);\n\n\t\t\t// Add the old object onto the stack (as a reference)\n\t\t\tret.prevObject = this;\n\n\t\t\t// Return the newly-formed element set\n\t\t\treturn ret;\n\t\t},\n\n\t\t// Execute a callback for every element in the matched set.\n\t\teach: function (callback) {\n\t\t\treturn jQuery.each(this, callback);\n\t\t},\n\n\t\tmap: function (callback) {\n\t\t\treturn this.pushStack(jQuery.map(this, function (elem, i) {\n\t\t\t\treturn callback.call(elem, i, elem);\n\t\t\t}));\n\t\t},\n\n\t\tslice: function () {\n\t\t\treturn this.pushStack(slice.apply(this, arguments));\n\t\t},\n\n\t\tfirst: function () {\n\t\t\treturn this.eq(0);\n\t\t},\n\n\t\tlast: function () {\n\t\t\treturn this.eq(-1);\n\t\t},\n\n\t\teven: function () {\n\t\t\treturn this.pushStack(jQuery.grep(this, function (_elem, i) {\n\t\t\t\treturn (i + 1) % 2;\n\t\t\t}));\n\t\t},\n\n\t\todd: function () {\n\t\t\treturn this.pushStack(jQuery.grep(this, function (_elem, i) {\n\t\t\t\treturn i % 2;\n\t\t\t}));\n\t\t},\n\n\t\teq: function (i) {\n\t\t\tvar len = this.length,\n\t\t\t\tj = +i + (i < 0 ? len : 0);\n\t\t\treturn this.pushStack(j >= 0 && j < len ? [this[j]] : []);\n\t\t},\n\n\t\tend: function () {\n\t\t\treturn this.prevObject || this.constructor();\n\t\t},\n\n\t\t// For internal use only.\n\t\t// Behaves like an Array's method, not like a jQuery method.\n\t\tpush: push,\n\t\tsort: arr.sort,\n\t\tsplice: arr.splice\n\t};\n\n\tjQuery.extend = jQuery.fn.extend = function () {\n\t\tvar options, name, src, copy, copyIsArray, clone,\n\t\t\ttarget = arguments[0] || {},\n\t\t\ti = 1,\n\t\t\tlength = arguments.length,\n\t\t\tdeep = false;\n\n\t\t// Handle a deep copy situation\n\t\tif (typeof target === \"boolean\") {\n\t\t\tdeep = target;\n\n\t\t\t// Skip the boolean and the target\n\t\t\ttarget = arguments[i] || {};\n\t\t\ti++;\n\t\t}\n\n\t\t// Handle case when target is a string or something (possible in deep copy)\n\t\tif (typeof target !== \"object\" && !isFunction(target)) {\n\t\t\ttarget = {};\n\t\t}\n\n\t\t// Extend jQuery itself if only one argument is passed\n\t\tif (i === length) {\n\t\t\ttarget = this;\n\t\t\ti--;\n\t\t}\n\n\t\tfor (; i < length; i++) {\n\n\t\t\t// Only deal with non-null/undefined values\n\t\t\tif ((options = arguments[i]) != null) {\n\n\t\t\t\t// Extend the base object\n\t\t\t\tfor (name in options) {\n\t\t\t\t\tcopy = options[name];\n\n\t\t\t\t\t// Prevent Object.prototype pollution\n\t\t\t\t\t// Prevent never-ending loop\n\t\t\t\t\tif (name === \"__proto__\" || target === copy) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\t\tif (deep && copy && (jQuery.isPlainObject(copy) ||\n\t\t\t\t\t\t(copyIsArray = Array.isArray(copy)))) {\n\t\t\t\t\t\tsrc = target[name];\n\n\t\t\t\t\t\t// Ensure proper type for the source value\n\t\t\t\t\t\tif (copyIsArray && !Array.isArray(src)) {\n\t\t\t\t\t\t\tclone = [];\n\t\t\t\t\t\t} else if (!copyIsArray && !jQuery.isPlainObject(src)) {\n\t\t\t\t\t\t\tclone = {};\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tclone = src;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcopyIsArray = false;\n\n\t\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\t\ttarget[name] = jQuery.extend(deep, clone, copy);\n\n\t\t\t\t\t\t// Don't bring in undefined values\n\t\t\t\t\t} else if (copy !== undefined) {\n\t\t\t\t\t\ttarget[name] = copy;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Return the modified object\n\t\treturn target;\n\t};\n\n\tjQuery.extend({\n\n\t\t// Unique for each copy of jQuery on the page\n\t\texpando: \"jQuery\" + (version + Math.random()).replace(/\\D/g, \"\"),\n\n\t\t// Assume jQuery is ready without the ready module\n\t\tisReady: true,\n\n\t\terror: function (msg) {\n\t\t\tthrow new Error(msg);\n\t\t},\n\n\t\tnoop: function () { },\n\n\t\tisPlainObject: function (obj) {\n\t\t\tvar proto, Ctor;\n\n\t\t\t// Detect obvious negatives\n\t\t\t// Use toString instead of jQuery.type to catch host objects\n\t\t\tif (!obj || toString.call(obj) !== \"[object Object]\") {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tproto = getProto(obj);\n\n\t\t\t// Objects with no prototype (e.g., `Object.create( null )`) are plain\n\t\t\tif (!proto) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\t// Objects with prototype are plain iff they were constructed by a global Object function\n\t\t\tCtor = hasOwn.call(proto, \"constructor\") && proto.constructor;\n\t\t\treturn typeof Ctor === \"function\" && fnToString.call(Ctor) === ObjectFunctionString;\n\t\t},\n\n\t\tisEmptyObject: function (obj) {\n\t\t\tvar name;\n\n\t\t\tfor (name in obj) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\n\t\t// Evaluates a script in a provided context; falls back to the global one\n\t\t// if not specified.\n\t\tglobalEval: function (code, options, doc) {\n\t\t\tDOMEval(code, { nonce: options && options.nonce }, doc);\n\t\t},\n\n\t\teach: function (obj, callback) {\n\t\t\tvar length, i = 0;\n\n\t\t\tif (isArrayLike(obj)) {\n\t\t\t\tlength = obj.length;\n\t\t\t\tfor (; i < length; i++) {\n\t\t\t\t\tif (callback.call(obj[i], i, obj[i]) === false) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor (i in obj) {\n\t\t\t\t\tif (callback.call(obj[i], i, obj[i]) === false) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn obj;\n\t\t},\n\n\n\t\t// Retrieve the text value of an array of DOM nodes\n\t\ttext: function (elem) {\n\t\t\tvar node,\n\t\t\t\tret = \"\",\n\t\t\t\ti = 0,\n\t\t\t\tnodeType = elem.nodeType;\n\n\t\t\tif (!nodeType) {\n\n\t\t\t\t// If no nodeType, this is expected to be an array\n\t\t\t\twhile ((node = elem[i++])) {\n\n\t\t\t\t\t// Do not traverse comment nodes\n\t\t\t\t\tret += jQuery.text(node);\n\t\t\t\t}\n\t\t\t} else if (nodeType === 1 || nodeType === 9 || nodeType === 11) {\n\t\t\t\treturn elem.textContent;\n\t\t\t} else if (nodeType === 3 || nodeType === 4) {\n\t\t\t\treturn elem.nodeValue;\n\t\t\t}\n\n\t\t\t// Do not include comment or processing instruction nodes\n\n\t\t\treturn ret;\n\t\t},\n\n\t\t// results is for internal usage only\n\t\tmakeArray: function (arr, results) {\n\t\t\tvar ret = results || [];\n\n\t\t\tif (arr != null) {\n\t\t\t\tif (isArrayLike(Object(arr))) {\n\t\t\t\t\tjQuery.merge(ret,\n\t\t\t\t\t\ttypeof arr === \"string\" ?\n\t\t\t\t\t\t\t[arr] : arr\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\tpush.call(ret, arr);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn ret;\n\t\t},\n\n\t\tinArray: function (elem, arr, i) {\n\t\t\treturn arr == null ? -1 : indexOf.call(arr, elem, i);\n\t\t},\n\n\t\tisXMLDoc: function (elem) {\n\t\t\tvar namespace = elem && elem.namespaceURI,\n\t\t\t\tdocElem = elem && (elem.ownerDocument || elem).documentElement;\n\n\t\t\t// Assume HTML when documentElement doesn't yet exist, such as inside\n\t\t\t// document fragments.\n\t\t\treturn !rhtmlSuffix.test(namespace || docElem && docElem.nodeName || \"HTML\");\n\t\t},\n\n\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\tmerge: function (first, second) {\n\t\t\tvar len = +second.length,\n\t\t\t\tj = 0,\n\t\t\t\ti = first.length;\n\n\t\t\tfor (; j < len; j++) {\n\t\t\t\tfirst[i++] = second[j];\n\t\t\t}\n\n\t\t\tfirst.length = i;\n\n\t\t\treturn first;\n\t\t},\n\n\t\tgrep: function (elems, callback, invert) {\n\t\t\tvar callbackInverse,\n\t\t\t\tmatches = [],\n\t\t\t\ti = 0,\n\t\t\t\tlength = elems.length,\n\t\t\t\tcallbackExpect = !invert;\n\n\t\t\t// Go through the array, only saving the items\n\t\t\t// that pass the validator function\n\t\t\tfor (; i < length; i++) {\n\t\t\t\tcallbackInverse = !callback(elems[i], i);\n\t\t\t\tif (callbackInverse !== callbackExpect) {\n\t\t\t\t\tmatches.push(elems[i]);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn matches;\n\t\t},\n\n\t\t// arg is for internal usage only\n\t\tmap: function (elems, callback, arg) {\n\t\t\tvar length, value,\n\t\t\t\ti = 0,\n\t\t\t\tret = [];\n\n\t\t\t// Go through the array, translating each of the items to their new values\n\t\t\tif (isArrayLike(elems)) {\n\t\t\t\tlength = elems.length;\n\t\t\t\tfor (; i < length; i++) {\n\t\t\t\t\tvalue = callback(elems[i], i, arg);\n\n\t\t\t\t\tif (value != null) {\n\t\t\t\t\t\tret.push(value);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Go through every key on the object,\n\t\t\t} else {\n\t\t\t\tfor (i in elems) {\n\t\t\t\t\tvalue = callback(elems[i], i, arg);\n\n\t\t\t\t\tif (value != null) {\n\t\t\t\t\t\tret.push(value);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Flatten any nested arrays\n\t\t\treturn flat(ret);\n\t\t},\n\n\t\t// A global GUID counter for objects\n\t\tguid: 1,\n\n\t\t// jQuery.support is not used in Core but other projects attach their\n\t\t// properties to it so it needs to exist.\n\t\tsupport: support\n\t});\n\n\tif (typeof Symbol === \"function\") {\n\t\tjQuery.fn[Symbol.iterator] = arr[Symbol.iterator];\n\t}\n\n\t// Populate the class2type map\n\tjQuery.each(\"Boolean Number String Function Array Date RegExp Object Error Symbol\".split(\" \"),\n\t\tfunction (_i, name) {\n\t\t\tclass2type[\"[object \" + name + \"]\"] = name.toLowerCase();\n\t\t});\n\n\tfunction isArrayLike(obj) {\n\n\t\t// Support: real iOS 8.2 only (not reproducible in simulator)\n\t\t// `in` check used to prevent JIT error (gh-2145)\n\t\t// hasOwn isn't used here due to false negatives\n\t\t// regarding Nodelist length in IE\n\t\tvar length = !!obj && \"length\" in obj && obj.length,\n\t\t\ttype = toType(obj);\n\n\t\tif (isFunction(obj) || isWindow(obj)) {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn type === \"array\" || length === 0 ||\n\t\t\ttypeof length === \"number\" && length > 0 && (length - 1) in obj;\n\t}\n\n\n\tfunction nodeName(elem, name) {\n\n\t\treturn elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();\n\n\t}\n\tvar pop = arr.pop;\n\n\n\tvar sort = arr.sort;\n\n\n\tvar splice = arr.splice;\n\n\n\tvar whitespace = \"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\";\n\n\n\tvar rtrimCSS = new RegExp(\n\t\t\"^\" + whitespace + \"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\" + whitespace + \"+$\",\n\t\t\"g\"\n\t);\n\n\n\n\n\t// Note: an element does not contain itself\n\tjQuery.contains = function (a, b) {\n\t\tvar bup = b && b.parentNode;\n\n\t\treturn a === bup || !!(bup && bup.nodeType === 1 && (\n\n\t\t\t// Support: IE 9 - 11+\n\t\t\t// IE doesn't have `contains` on SVG.\n\t\t\ta.contains ?\n\t\t\t\ta.contains(bup) :\n\t\t\t\ta.compareDocumentPosition && a.compareDocumentPosition(bup) & 16\n\t\t));\n\t};\n\n\n\n\n\t// CSS string/identifier serialization\n\t// https://drafts.csswg.org/cssom/#common-serializing-idioms\n\tvar rcssescape = /([\\0-\\x1f\\x7f]|^-?\\d)|^-$|[^\\x80-\\uFFFF\\w-]/g;\n\n\tfunction fcssescape(ch, asCodePoint) {\n\t\tif (asCodePoint) {\n\n\t\t\t// U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER\n\t\t\tif (ch === \"\\0\") {\n\t\t\t\treturn \"\\uFFFD\";\n\t\t\t}\n\n\t\t\t// Control characters and (dependent upon position) numbers get escaped as code points\n\t\t\treturn ch.slice(0, -1) + \"\\\\\" + ch.charCodeAt(ch.length - 1).toString(16) + \" \";\n\t\t}\n\n\t\t// Other potentially-special ASCII characters get backslash-escaped\n\t\treturn \"\\\\\" + ch;\n\t}\n\n\tjQuery.escapeSelector = function (sel) {\n\t\treturn (sel + \"\").replace(rcssescape, fcssescape);\n\t};\n\n\n\n\n\tvar preferredDoc = document,\n\t\tpushNative = push;\n\n\t(function () {\n\n\t\tvar i,\n\t\t\tExpr,\n\t\t\toutermostContext,\n\t\t\tsortInput,\n\t\t\thasDuplicate,\n\t\t\tpush = pushNative,\n\n\t\t\t// Local document vars\n\t\t\tdocument,\n\t\t\tdocumentElement,\n\t\t\tdocumentIsHTML,\n\t\t\trbuggyQSA,\n\t\t\tmatches,\n\n\t\t\t// Instance-specific data\n\t\t\texpando = jQuery.expando,\n\t\t\tdirruns = 0,\n\t\t\tdone = 0,\n\t\t\tclassCache = createCache(),\n\t\t\ttokenCache = createCache(),\n\t\t\tcompilerCache = createCache(),\n\t\t\tnonnativeSelectorCache = createCache(),\n\t\t\tsortOrder = function (a, b) {\n\t\t\t\tif (a === b) {\n\t\t\t\t\thasDuplicate = true;\n\t\t\t\t}\n\t\t\t\treturn 0;\n\t\t\t},\n\n\t\t\tbooleans = \"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|\" +\n\t\t\t\t\"loop|multiple|open|readonly|required|scoped\",\n\n\t\t\t// Regular expressions\n\n\t\t\t// https://www.w3.org/TR/css-syntax-3/#ident-token-diagram\n\t\t\tidentifier = \"(?:\\\\\\\\[\\\\da-fA-F]{1,6}\" + whitespace +\n\t\t\t\t\"?|\\\\\\\\[^\\\\r\\\\n\\\\f]|[\\\\w-]|[^\\0-\\\\x7f])+\",\n\n\t\t\t// Attribute selectors: https://www.w3.org/TR/selectors/#attribute-selectors\n\t\t\tattributes = \"\\\\[\" + whitespace + \"*(\" + identifier + \")(?:\" + whitespace +\n\n\t\t\t\t// Operator (capture 2)\n\t\t\t\t\"*([*^$|!~]?=)\" + whitespace +\n\n\t\t\t\t// \"Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]\"\n\t\t\t\t\"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\" + identifier + \"))|)\" +\n\t\t\t\twhitespace + \"*\\\\]\",\n\n\t\t\tpseudos = \":(\" + identifier + \")(?:\\\\((\" +\n\n\t\t\t\t// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:\n\t\t\t\t// 1. quoted (capture 3; capture 4 or capture 5)\n\t\t\t\t\"('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|\" +\n\n\t\t\t\t// 2. simple (capture 6)\n\t\t\t\t\"((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\" + attributes + \")*)|\" +\n\n\t\t\t\t// 3. anything else (capture 2)\n\t\t\t\t\".*\" +\n\t\t\t\t\")\\\\)|)\",\n\n\t\t\t// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter\n\t\t\trwhitespace = new RegExp(whitespace + \"+\", \"g\"),\n\n\t\t\trcomma = new RegExp(\"^\" + whitespace + \"*,\" + whitespace + \"*\"),\n\t\t\trleadingCombinator = new RegExp(\"^\" + whitespace + \"*([>+~]|\" + whitespace + \")\" +\n\t\t\t\twhitespace + \"*\"),\n\t\t\trdescend = new RegExp(whitespace + \"|>\"),\n\n\t\t\trpseudo = new RegExp(pseudos),\n\t\t\tridentifier = new RegExp(\"^\" + identifier + \"$\"),\n\n\t\t\tmatchExpr = {\n\t\t\t\tID: new RegExp(\"^#(\" + identifier + \")\"),\n\t\t\t\tCLASS: new RegExp(\"^\\\\.(\" + identifier + \")\"),\n\t\t\t\tTAG: new RegExp(\"^(\" + identifier + \"|[*])\"),\n\t\t\t\tATTR: new RegExp(\"^\" + attributes),\n\t\t\t\tPSEUDO: new RegExp(\"^\" + pseudos),\n\t\t\t\tCHILD: new RegExp(\n\t\t\t\t\t\"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\" +\n\t\t\t\t\twhitespace + \"*(even|odd|(([+-]|)(\\\\d*)n|)\" + whitespace + \"*(?:([+-]|)\" +\n\t\t\t\t\twhitespace + \"*(\\\\d+)|))\" + whitespace + \"*\\\\)|)\", \"i\"),\n\t\t\t\tbool: new RegExp(\"^(?:\" + booleans + \")$\", \"i\"),\n\n\t\t\t\t// For use in libraries implementing .is()\n\t\t\t\t// We use this for POS matching in `select`\n\t\t\t\tneedsContext: new RegExp(\"^\" + whitespace +\n\t\t\t\t\t\"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\" + whitespace +\n\t\t\t\t\t\"*((?:-\\\\d)?\\\\d*)\" + whitespace + \"*\\\\)|)(?=[^-]|$)\", \"i\")\n\t\t\t},\n\n\t\t\trinputs = /^(?:input|select|textarea|button)$/i,\n\t\t\trheader = /^h\\d$/i,\n\n\t\t\t// Easily-parseable/retrievable ID or TAG or CLASS selectors\n\t\t\trquickExpr = /^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,\n\n\t\t\trsibling = /[+~]/,\n\n\t\t\t// CSS escapes\n\t\t\t// https://www.w3.org/TR/CSS21/syndata.html#escaped-characters\n\t\t\trunescape = new RegExp(\"\\\\\\\\[\\\\da-fA-F]{1,6}\" + whitespace +\n\t\t\t\t\"?|\\\\\\\\([^\\\\r\\\\n\\\\f])\", \"g\"),\n\t\t\tfunescape = function (escape, nonHex) {\n\t\t\t\tvar high = \"0x\" + escape.slice(1) - 0x10000;\n\n\t\t\t\tif (nonHex) {\n\n\t\t\t\t\t// Strip the backslash prefix from a non-hex escape sequence\n\t\t\t\t\treturn nonHex;\n\t\t\t\t}\n\n\t\t\t\t// Replace a hexadecimal escape sequence with the encoded Unicode code point\n\t\t\t\t// Support: IE <=11+\n\t\t\t\t// For values outside the Basic Multilingual Plane (BMP), manually construct a\n\t\t\t\t// surrogate pair\n\t\t\t\treturn high < 0 ?\n\t\t\t\t\tString.fromCharCode(high + 0x10000) :\n\t\t\t\t\tString.fromCharCode(high >> 10 | 0xD800, high & 0x3FF | 0xDC00);\n\t\t\t},\n\n\t\t\t// Used for iframes; see `setDocument`.\n\t\t\t// Support: IE 9 - 11+, Edge 12 - 18+\n\t\t\t// Removing the function wrapper causes a \"Permission Denied\"\n\t\t\t// error in IE/Edge.\n\t\t\tunloadHandler = function () {\n\t\t\t\tsetDocument();\n\t\t\t},\n\n\t\t\tinDisabledFieldset = addCombinator(\n\t\t\t\tfunction (elem) {\n\t\t\t\t\treturn elem.disabled === true && nodeName(elem, \"fieldset\");\n\t\t\t\t},\n\t\t\t\t{ dir: \"parentNode\", next: \"legend\" }\n\t\t\t);\n\n\t\t// Support: IE <=9 only\n\t\t// Accessing document.activeElement can throw unexpectedly\n\t\t// https://bugs.jquery.com/ticket/13393\n\t\tfunction safeActiveElement() {\n\t\t\ttry {\n\t\t\t\treturn document.activeElement;\n\t\t\t} catch (err) { }\n\t\t}\n\n\t\t// Optimize for push.apply( _, NodeList )\n\t\ttry {\n\t\t\tpush.apply(\n\t\t\t\t(arr = slice.call(preferredDoc.childNodes)),\n\t\t\t\tpreferredDoc.childNodes\n\t\t\t);\n\n\t\t\t// Support: Android <=4.0\n\t\t\t// Detect silently failing push.apply\n\t\t\t// eslint-disable-next-line no-unused-expressions\n\t\t\tarr[preferredDoc.childNodes.length].nodeType;\n\t\t} catch (e) {\n\t\t\tpush = {\n\t\t\t\tapply: function (target, els) {\n\t\t\t\t\tpushNative.apply(target, slice.call(els));\n\t\t\t\t},\n\t\t\t\tcall: function (target) {\n\t\t\t\t\tpushNative.apply(target, slice.call(arguments, 1));\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\n\t\tfunction find(selector, context, results, seed) {\n\t\t\tvar m, i, elem, nid, match, groups, newSelector,\n\t\t\t\tnewContext = context && context.ownerDocument,\n\n\t\t\t\t// nodeType defaults to 9, since context defaults to document\n\t\t\t\tnodeType = context ? context.nodeType : 9;\n\n\t\t\tresults = results || [];\n\n\t\t\t// Return early from calls with invalid selector or context\n\t\t\tif (typeof selector !== \"string\" || !selector ||\n\t\t\t\tnodeType !== 1 && nodeType !== 9 && nodeType !== 11) {\n\n\t\t\t\treturn results;\n\t\t\t}\n\n\t\t\t// Try to shortcut find operations (as opposed to filters) in HTML documents\n\t\t\tif (!seed) {\n\t\t\t\tsetDocument(context);\n\t\t\t\tcontext = context || document;\n\n\t\t\t\tif (documentIsHTML) {\n\n\t\t\t\t\t// If the selector is sufficiently simple, try using a \"get*By*\" DOM method\n\t\t\t\t\t// (excepting DocumentFragment context, where the methods don't exist)\n\t\t\t\t\tif (nodeType !== 11 && (match = rquickExpr.exec(selector))) {\n\n\t\t\t\t\t\t// ID selector\n\t\t\t\t\t\tif ((m = match[1])) {\n\n\t\t\t\t\t\t\t// Document context\n\t\t\t\t\t\t\tif (nodeType === 9) {\n\t\t\t\t\t\t\t\tif ((elem = context.getElementById(m))) {\n\n\t\t\t\t\t\t\t\t\t// Support: IE 9 only\n\t\t\t\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\t\t\t\tif (elem.id === m) {\n\t\t\t\t\t\t\t\t\t\tpush.call(results, elem);\n\t\t\t\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t// Element context\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t// Support: IE 9 only\n\t\t\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\t\t\tif (newContext && (elem = newContext.getElementById(m)) &&\n\t\t\t\t\t\t\t\t\tfind.contains(context, elem) &&\n\t\t\t\t\t\t\t\t\telem.id === m) {\n\n\t\t\t\t\t\t\t\t\tpush.call(results, elem);\n\t\t\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Type selector\n\t\t\t\t\t\t} else if (match[2]) {\n\t\t\t\t\t\t\tpush.apply(results, context.getElementsByTagName(selector));\n\t\t\t\t\t\t\treturn results;\n\n\t\t\t\t\t\t\t// Class selector\n\t\t\t\t\t\t} else if ((m = match[3]) && context.getElementsByClassName) {\n\t\t\t\t\t\t\tpush.apply(results, context.getElementsByClassName(m));\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Take advantage of querySelectorAll\n\t\t\t\t\tif (!nonnativeSelectorCache[selector + \" \"] &&\n\t\t\t\t\t\t(!rbuggyQSA || !rbuggyQSA.test(selector))) {\n\n\t\t\t\t\t\tnewSelector = selector;\n\t\t\t\t\t\tnewContext = context;\n\n\t\t\t\t\t\t// qSA considers elements outside a scoping root when evaluating child or\n\t\t\t\t\t\t// descendant combinators, which is not what we want.\n\t\t\t\t\t\t// In such cases, we work around the behavior by prefixing every selector in the\n\t\t\t\t\t\t// list with an ID selector referencing the scope context.\n\t\t\t\t\t\t// The technique has to be used as well when a leading combinator is used\n\t\t\t\t\t\t// as such selectors are not recognized by querySelectorAll.\n\t\t\t\t\t\t// Thanks to Andrew Dupont for this technique.\n\t\t\t\t\t\tif (nodeType === 1 &&\n\t\t\t\t\t\t\t(rdescend.test(selector) || rleadingCombinator.test(selector))) {\n\n\t\t\t\t\t\t\t// Expand context for sibling selectors\n\t\t\t\t\t\t\tnewContext = rsibling.test(selector) && testContext(context.parentNode) ||\n\t\t\t\t\t\t\t\tcontext;\n\n\t\t\t\t\t\t\t// We can use :scope instead of the ID hack if the browser\n\t\t\t\t\t\t\t// supports it & if we're not changing the context.\n\t\t\t\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when\n\t\t\t\t\t\t\t// strict-comparing two documents; shallow comparisons work.\n\t\t\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\t\t\tif (newContext != context || !support.scope) {\n\n\t\t\t\t\t\t\t\t// Capture the context ID, setting it first if necessary\n\t\t\t\t\t\t\t\tif ((nid = context.getAttribute(\"id\"))) {\n\t\t\t\t\t\t\t\t\tnid = jQuery.escapeSelector(nid);\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tcontext.setAttribute(\"id\", (nid = expando));\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Prefix every selector in the list\n\t\t\t\t\t\t\tgroups = tokenize(selector);\n\t\t\t\t\t\t\ti = groups.length;\n\t\t\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\t\t\tgroups[i] = (nid ? \"#\" + nid : \":scope\") + \" \" +\n\t\t\t\t\t\t\t\t\ttoSelector(groups[i]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tnewSelector = groups.join(\",\");\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tpush.apply(results,\n\t\t\t\t\t\t\t\tnewContext.querySelectorAll(newSelector)\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t} catch (qsaError) {\n\t\t\t\t\t\t\tnonnativeSelectorCache(selector, true);\n\t\t\t\t\t\t} finally {\n\t\t\t\t\t\t\tif (nid === expando) {\n\t\t\t\t\t\t\t\tcontext.removeAttribute(\"id\");\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// All others\n\t\t\treturn select(selector.replace(rtrimCSS, \"$1\"), context, results, seed);\n\t\t}\n\n\t\t/**\n\t\t * Create key-value caches of limited size\n\t\t * @returns {function(string, object)} Returns the Object data after storing it on itself with\n\t\t *\tproperty name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)\n\t\t *\tdeleting the oldest entry\n\t\t */\n\t\tfunction createCache() {\n\t\t\tvar keys = [];\n\n\t\t\tfunction cache(key, value) {\n\n\t\t\t\t// Use (key + \" \") to avoid collision with native prototype properties\n\t\t\t\t// (see https://github.com/jquery/sizzle/issues/157)\n\t\t\t\tif (keys.push(key + \" \") > Expr.cacheLength) {\n\n\t\t\t\t\t// Only keep the most recent entries\n\t\t\t\t\tdelete cache[keys.shift()];\n\t\t\t\t}\n\t\t\t\treturn (cache[key + \" \"] = value);\n\t\t\t}\n\t\t\treturn cache;\n\t\t}\n\n\t\t/**\n\t\t * Mark a function for special use by jQuery selector module\n\t\t * @param {Function} fn The function to mark\n\t\t */\n\t\tfunction markFunction(fn) {\n\t\t\tfn[expando] = true;\n\t\t\treturn fn;\n\t\t}\n\n\t\t/**\n\t\t * Support testing using an element\n\t\t * @param {Function} fn Passed the created element and returns a boolean result\n\t\t */\n\t\tfunction assert(fn) {\n\t\t\tvar el = document.createElement(\"fieldset\");\n\n\t\t\ttry {\n\t\t\t\treturn !!fn(el);\n\t\t\t} catch (e) {\n\t\t\t\treturn false;\n\t\t\t} finally {\n\n\t\t\t\t// Remove from its parent by default\n\t\t\t\tif (el.parentNode) {\n\t\t\t\t\tel.parentNode.removeChild(el);\n\t\t\t\t}\n\n\t\t\t\t// release memory in IE\n\t\t\t\tel = null;\n\t\t\t}\n\t\t}\n\n\t\t/**\n\t\t * Returns a function to use in pseudos for input types\n\t\t * @param {String} type\n\t\t */\n\t\tfunction createInputPseudo(type) {\n\t\t\treturn function (elem) {\n\t\t\t\treturn nodeName(elem, \"input\") && elem.type === type;\n\t\t\t};\n\t\t}\n\n\t\t/**\n\t\t * Returns a function to use in pseudos for buttons\n\t\t * @param {String} type\n\t\t */\n\t\tfunction createButtonPseudo(type) {\n\t\t\treturn function (elem) {\n\t\t\t\treturn (nodeName(elem, \"input\") || nodeName(elem, \"button\")) &&\n\t\t\t\t\telem.type === type;\n\t\t\t};\n\t\t}\n\n\t\t/**\n\t\t * Returns a function to use in pseudos for :enabled/:disabled\n\t\t * @param {Boolean} disabled true for :disabled; false for :enabled\n\t\t */\n\t\tfunction createDisabledPseudo(disabled) {\n\n\t\t\t// Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable\n\t\t\treturn function (elem) {\n\n\t\t\t\t// Only certain elements can match :enabled or :disabled\n\t\t\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled\n\t\t\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled\n\t\t\t\tif (\"form\" in elem) {\n\n\t\t\t\t\t// Check for inherited disabledness on relevant non-disabled elements:\n\t\t\t\t\t// * listed form-associated elements in a disabled fieldset\n\t\t\t\t\t//   https://html.spec.whatwg.org/multipage/forms.html#category-listed\n\t\t\t\t\t//   https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled\n\t\t\t\t\t// * option elements in a disabled optgroup\n\t\t\t\t\t//   https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled\n\t\t\t\t\t// All such elements have a \"form\" property.\n\t\t\t\t\tif (elem.parentNode && elem.disabled === false) {\n\n\t\t\t\t\t\t// Option elements defer to a parent optgroup if present\n\t\t\t\t\t\tif (\"label\" in elem) {\n\t\t\t\t\t\t\tif (\"label\" in elem.parentNode) {\n\t\t\t\t\t\t\t\treturn elem.parentNode.disabled === disabled;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\treturn elem.disabled === disabled;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Support: IE 6 - 11+\n\t\t\t\t\t\t// Use the isDisabled shortcut property to check for disabled fieldset ancestors\n\t\t\t\t\t\treturn elem.isDisabled === disabled ||\n\n\t\t\t\t\t\t\t// Where there is no isDisabled, check manually\n\t\t\t\t\t\t\telem.isDisabled !== !disabled &&\n\t\t\t\t\t\t\tinDisabledFieldset(elem) === disabled;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn elem.disabled === disabled;\n\n\t\t\t\t\t// Try to winnow out elements that can't be disabled before trusting the disabled property.\n\t\t\t\t\t// Some victims get caught in our net (label, legend, menu, track), but it shouldn't\n\t\t\t\t\t// even exist on them, let alone have a boolean value.\n\t\t\t\t} else if (\"label\" in elem) {\n\t\t\t\t\treturn elem.disabled === disabled;\n\t\t\t\t}\n\n\t\t\t\t// Remaining elements are neither :enabled nor :disabled\n\t\t\t\treturn false;\n\t\t\t};\n\t\t}\n\n\t\t/**\n\t\t * Returns a function to use in pseudos for positionals\n\t\t * @param {Function} fn\n\t\t */\n\t\tfunction createPositionalPseudo(fn) {\n\t\t\treturn markFunction(function (argument) {\n\t\t\t\targument = +argument;\n\t\t\t\treturn markFunction(function (seed, matches) {\n\t\t\t\t\tvar j,\n\t\t\t\t\t\tmatchIndexes = fn([], seed.length, argument),\n\t\t\t\t\t\ti = matchIndexes.length;\n\n\t\t\t\t\t// Match elements found at the specified indexes\n\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\tif (seed[(j = matchIndexes[i])]) {\n\t\t\t\t\t\t\tseed[j] = !(matches[j] = seed[j]);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\n\t\t/**\n\t\t * Checks a node for validity as a jQuery selector context\n\t\t * @param {Element|Object=} context\n\t\t * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value\n\t\t */\n\t\tfunction testContext(context) {\n\t\t\treturn context && typeof context.getElementsByTagName !== \"undefined\" && context;\n\t\t}\n\n\t\t/**\n\t\t * Sets document-related variables once based on the current document\n\t\t * @param {Element|Object} [node] An element or document object to use to set the document\n\t\t * @returns {Object} Returns the current document\n\t\t */\n\t\tfunction setDocument(node) {\n\t\t\tvar subWindow,\n\t\t\t\tdoc = node ? node.ownerDocument || node : preferredDoc;\n\n\t\t\t// Return early if doc is invalid or already selected\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tif (doc == document || doc.nodeType !== 9 || !doc.documentElement) {\n\t\t\t\treturn document;\n\t\t\t}\n\n\t\t\t// Update global variables\n\t\t\tdocument = doc;\n\t\t\tdocumentElement = document.documentElement;\n\t\t\tdocumentIsHTML = !jQuery.isXMLDoc(document);\n\n\t\t\t// Support: iOS 7 only, IE 9 - 11+\n\t\t\t// Older browsers didn't support unprefixed `matches`.\n\t\t\tmatches = documentElement.matches ||\n\t\t\t\tdocumentElement.webkitMatchesSelector ||\n\t\t\t\tdocumentElement.msMatchesSelector;\n\n\t\t\t// Support: IE 9 - 11+, Edge 12 - 18+\n\t\t\t// Accessing iframe documents after unload throws \"permission denied\" errors (see trac-13936)\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tif (preferredDoc != document &&\n\t\t\t\t(subWindow = document.defaultView) && subWindow.top !== subWindow) {\n\n\t\t\t\t// Support: IE 9 - 11+, Edge 12 - 18+\n\t\t\t\tsubWindow.addEventListener(\"unload\", unloadHandler);\n\t\t\t}\n\n\t\t\t// Support: IE <10\n\t\t\t// Check if getElementById returns elements by name\n\t\t\t// The broken getElementById methods don't pick up programmatically-set names,\n\t\t\t// so use a roundabout getElementsByName test\n\t\t\tsupport.getById = assert(function (el) {\n\t\t\t\tdocumentElement.appendChild(el).id = jQuery.expando;\n\t\t\t\treturn !document.getElementsByName ||\n\t\t\t\t\t!document.getElementsByName(jQuery.expando).length;\n\t\t\t});\n\n\t\t\t// Support: IE 9 only\n\t\t\t// Check to see if it's possible to do matchesSelector\n\t\t\t// on a disconnected node.\n\t\t\tsupport.disconnectedMatch = assert(function (el) {\n\t\t\t\treturn matches.call(el, \"*\");\n\t\t\t});\n\n\t\t\t// Support: IE 9 - 11+, Edge 12 - 18+\n\t\t\t// IE/Edge don't support the :scope pseudo-class.\n\t\t\tsupport.scope = assert(function () {\n\t\t\t\treturn document.querySelectorAll(\":scope\");\n\t\t\t});\n\n\t\t\t// Support: Chrome 105 - 111 only, Safari 15.4 - 16.3 only\n\t\t\t// Make sure the `:has()` argument is parsed unforgivingly.\n\t\t\t// We include `*` in the test to detect buggy implementations that are\n\t\t\t// _selectively_ forgiving (specifically when the list includes at least\n\t\t\t// one valid selector).\n\t\t\t// Note that we treat complete lack of support for `:has()` as if it were\n\t\t\t// spec-compliant support, which is fine because use of `:has()` in such\n\t\t\t// environments will fail in the qSA path and fall back to jQuery traversal\n\t\t\t// anyway.\n\t\t\tsupport.cssHas = assert(function () {\n\t\t\t\ttry {\n\t\t\t\t\tdocument.querySelector(\":has(*,:jqfake)\");\n\t\t\t\t\treturn false;\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t// ID filter and find\n\t\t\tif (support.getById) {\n\t\t\t\tExpr.filter.ID = function (id) {\n\t\t\t\t\tvar attrId = id.replace(runescape, funescape);\n\t\t\t\t\treturn function (elem) {\n\t\t\t\t\t\treturn elem.getAttribute(\"id\") === attrId;\n\t\t\t\t\t};\n\t\t\t\t};\n\t\t\t\tExpr.find.ID = function (id, context) {\n\t\t\t\t\tif (typeof context.getElementById !== \"undefined\" && documentIsHTML) {\n\t\t\t\t\t\tvar elem = context.getElementById(id);\n\t\t\t\t\t\treturn elem ? [elem] : [];\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t} else {\n\t\t\t\tExpr.filter.ID = function (id) {\n\t\t\t\t\tvar attrId = id.replace(runescape, funescape);\n\t\t\t\t\treturn function (elem) {\n\t\t\t\t\t\tvar node = typeof elem.getAttributeNode !== \"undefined\" &&\n\t\t\t\t\t\t\telem.getAttributeNode(\"id\");\n\t\t\t\t\t\treturn node && node.value === attrId;\n\t\t\t\t\t};\n\t\t\t\t};\n\n\t\t\t\t// Support: IE 6 - 7 only\n\t\t\t\t// getElementById is not reliable as a find shortcut\n\t\t\t\tExpr.find.ID = function (id, context) {\n\t\t\t\t\tif (typeof context.getElementById !== \"undefined\" && documentIsHTML) {\n\t\t\t\t\t\tvar node, i, elems,\n\t\t\t\t\t\t\telem = context.getElementById(id);\n\n\t\t\t\t\t\tif (elem) {\n\n\t\t\t\t\t\t\t// Verify the id attribute\n\t\t\t\t\t\t\tnode = elem.getAttributeNode(\"id\");\n\t\t\t\t\t\t\tif (node && node.value === id) {\n\t\t\t\t\t\t\t\treturn [elem];\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Fall back on getElementsByName\n\t\t\t\t\t\t\telems = context.getElementsByName(id);\n\t\t\t\t\t\t\ti = 0;\n\t\t\t\t\t\t\twhile ((elem = elems[i++])) {\n\t\t\t\t\t\t\t\tnode = elem.getAttributeNode(\"id\");\n\t\t\t\t\t\t\t\tif (node && node.value === id) {\n\t\t\t\t\t\t\t\t\treturn [elem];\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn [];\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\n\t\t\t// Tag\n\t\t\tExpr.find.TAG = function (tag, context) {\n\t\t\t\tif (typeof context.getElementsByTagName !== \"undefined\") {\n\t\t\t\t\treturn context.getElementsByTagName(tag);\n\n\t\t\t\t\t// DocumentFragment nodes don't have gEBTN\n\t\t\t\t} else {\n\t\t\t\t\treturn context.querySelectorAll(tag);\n\t\t\t\t}\n\t\t\t};\n\n\t\t\t// Class\n\t\t\tExpr.find.CLASS = function (className, context) {\n\t\t\t\tif (typeof context.getElementsByClassName !== \"undefined\" && documentIsHTML) {\n\t\t\t\t\treturn context.getElementsByClassName(className);\n\t\t\t\t}\n\t\t\t};\n\n\t\t\t/* QSA/matchesSelector\n\t\t\t---------------------------------------------------------------------- */\n\n\t\t\t// QSA and matchesSelector support\n\n\t\t\trbuggyQSA = [];\n\n\t\t\t// Build QSA regex\n\t\t\t// Regex strategy adopted from Diego Perini\n\t\t\tassert(function (el) {\n\n\t\t\t\tvar input;\n\n\t\t\t\tdocumentElement.appendChild(el).innerHTML =\n\t\t\t\t\t\"<a id='\" + expando + \"' href='' disabled='disabled'></a>\" +\n\t\t\t\t\t\"<select id='\" + expando + \"-\\r\\\\' disabled='disabled'>\" +\n\t\t\t\t\t\"<option selected=''></option></select>\";\n\n\t\t\t\t// Support: iOS <=7 - 8 only\n\t\t\t\t// Boolean attributes and \"value\" are not treated correctly in some XML documents\n\t\t\t\tif (!el.querySelectorAll(\"[selected]\").length) {\n\t\t\t\t\trbuggyQSA.push(\"\\\\[\" + whitespace + \"*(?:value|\" + booleans + \")\");\n\t\t\t\t}\n\n\t\t\t\t// Support: iOS <=7 - 8 only\n\t\t\t\tif (!el.querySelectorAll(\"[id~=\" + expando + \"-]\").length) {\n\t\t\t\t\trbuggyQSA.push(\"~=\");\n\t\t\t\t}\n\n\t\t\t\t// Support: iOS 8 only\n\t\t\t\t// https://bugs.webkit.org/show_bug.cgi?id=136851\n\t\t\t\t// In-page `selector#id sibling-combinator selector` fails\n\t\t\t\tif (!el.querySelectorAll(\"a#\" + expando + \"+*\").length) {\n\t\t\t\t\trbuggyQSA.push(\".#.+[+~]\");\n\t\t\t\t}\n\n\t\t\t\t// Support: Chrome <=105+, Firefox <=104+, Safari <=15.4+\n\t\t\t\t// In some of the document kinds, these selectors wouldn't work natively.\n\t\t\t\t// This is probably OK but for backwards compatibility we want to maintain\n\t\t\t\t// handling them through jQuery traversal in jQuery 3.x.\n\t\t\t\tif (!el.querySelectorAll(\":checked\").length) {\n\t\t\t\t\trbuggyQSA.push(\":checked\");\n\t\t\t\t}\n\n\t\t\t\t// Support: Windows 8 Native Apps\n\t\t\t\t// The type and name attributes are restricted during .innerHTML assignment\n\t\t\t\tinput = document.createElement(\"input\");\n\t\t\t\tinput.setAttribute(\"type\", \"hidden\");\n\t\t\t\tel.appendChild(input).setAttribute(\"name\", \"D\");\n\n\t\t\t\t// Support: IE 9 - 11+\n\t\t\t\t// IE's :disabled selector does not pick up the children of disabled fieldsets\n\t\t\t\t// Support: Chrome <=105+, Firefox <=104+, Safari <=15.4+\n\t\t\t\t// In some of the document kinds, these selectors wouldn't work natively.\n\t\t\t\t// This is probably OK but for backwards compatibility we want to maintain\n\t\t\t\t// handling them through jQuery traversal in jQuery 3.x.\n\t\t\t\tdocumentElement.appendChild(el).disabled = true;\n\t\t\t\tif (el.querySelectorAll(\":disabled\").length !== 2) {\n\t\t\t\t\trbuggyQSA.push(\":enabled\", \":disabled\");\n\t\t\t\t}\n\n\t\t\t\t// Support: IE 11+, Edge 15 - 18+\n\t\t\t\t// IE 11/Edge don't find elements on a `[name='']` query in some cases.\n\t\t\t\t// Adding a temporary attribute to the document before the selection works\n\t\t\t\t// around the issue.\n\t\t\t\t// Interestingly, IE 10 & older don't seem to have the issue.\n\t\t\t\tinput = document.createElement(\"input\");\n\t\t\t\tinput.setAttribute(\"name\", \"\");\n\t\t\t\tel.appendChild(input);\n\t\t\t\tif (!el.querySelectorAll(\"[name='']\").length) {\n\t\t\t\t\trbuggyQSA.push(\"\\\\[\" + whitespace + \"*name\" + whitespace + \"*=\" +\n\t\t\t\t\t\twhitespace + \"*(?:''|\\\"\\\")\");\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tif (!support.cssHas) {\n\n\t\t\t\t// Support: Chrome 105 - 110+, Safari 15.4 - 16.3+\n\t\t\t\t// Our regular `try-catch` mechanism fails to detect natively-unsupported\n\t\t\t\t// pseudo-classes inside `:has()` (such as `:has(:contains(\"Foo\"))`)\n\t\t\t\t// in browsers that parse the `:has()` argument as a forgiving selector list.\n\t\t\t\t// https://drafts.csswg.org/selectors/#relational now requires the argument\n\t\t\t\t// to be parsed unforgivingly, but browsers have not yet fully adjusted.\n\t\t\t\trbuggyQSA.push(\":has\");\n\t\t\t}\n\n\t\t\trbuggyQSA = rbuggyQSA.length && new RegExp(rbuggyQSA.join(\"|\"));\n\n\t\t\t/* Sorting\n\t\t\t---------------------------------------------------------------------- */\n\n\t\t\t// Document order sorting\n\t\t\tsortOrder = function (a, b) {\n\n\t\t\t\t// Flag for duplicate removal\n\t\t\t\tif (a === b) {\n\t\t\t\t\thasDuplicate = true;\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\n\t\t\t\t// Sort on method existence if only one input has compareDocumentPosition\n\t\t\t\tvar compare = !a.compareDocumentPosition - !b.compareDocumentPosition;\n\t\t\t\tif (compare) {\n\t\t\t\t\treturn compare;\n\t\t\t\t}\n\n\t\t\t\t// Calculate position if both inputs belong to the same document\n\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\tcompare = (a.ownerDocument || a) == (b.ownerDocument || b) ?\n\t\t\t\t\ta.compareDocumentPosition(b) :\n\n\t\t\t\t\t// Otherwise we know they are disconnected\n\t\t\t\t\t1;\n\n\t\t\t\t// Disconnected nodes\n\t\t\t\tif (compare & 1 ||\n\t\t\t\t\t(!support.sortDetached && b.compareDocumentPosition(a) === compare)) {\n\n\t\t\t\t\t// Choose the first element that is related to our preferred document\n\t\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\tif (a === document || a.ownerDocument == preferredDoc &&\n\t\t\t\t\t\tfind.contains(preferredDoc, a)) {\n\t\t\t\t\t\treturn -1;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\tif (b === document || b.ownerDocument == preferredDoc &&\n\t\t\t\t\t\tfind.contains(preferredDoc, b)) {\n\t\t\t\t\t\treturn 1;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Maintain original order\n\t\t\t\t\treturn sortInput ?\n\t\t\t\t\t\t(indexOf.call(sortInput, a) - indexOf.call(sortInput, b)) :\n\t\t\t\t\t\t0;\n\t\t\t\t}\n\n\t\t\t\treturn compare & 4 ? -1 : 1;\n\t\t\t};\n\n\t\t\treturn document;\n\t\t}\n\n\t\tfind.matches = function (expr, elements) {\n\t\t\treturn find(expr, null, null, elements);\n\t\t};\n\n\t\tfind.matchesSelector = function (elem, expr) {\n\t\t\tsetDocument(elem);\n\n\t\t\tif (documentIsHTML &&\n\t\t\t\t!nonnativeSelectorCache[expr + \" \"] &&\n\t\t\t\t(!rbuggyQSA || !rbuggyQSA.test(expr))) {\n\n\t\t\t\ttry {\n\t\t\t\t\tvar ret = matches.call(elem, expr);\n\n\t\t\t\t\t// IE 9's matchesSelector returns false on disconnected nodes\n\t\t\t\t\tif (ret || support.disconnectedMatch ||\n\n\t\t\t\t\t\t// As well, disconnected nodes are said to be in a document\n\t\t\t\t\t\t// fragment in IE 9\n\t\t\t\t\t\telem.document && elem.document.nodeType !== 11) {\n\t\t\t\t\t\treturn ret;\n\t\t\t\t\t}\n\t\t\t\t} catch (e) {\n\t\t\t\t\tnonnativeSelectorCache(expr, true);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn find(expr, document, null, [elem]).length > 0;\n\t\t};\n\n\t\tfind.contains = function (context, elem) {\n\n\t\t\t// Set document vars if needed\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tif ((context.ownerDocument || context) != document) {\n\t\t\t\tsetDocument(context);\n\t\t\t}\n\t\t\treturn jQuery.contains(context, elem);\n\t\t};\n\n\n\t\tfind.attr = function (elem, name) {\n\n\t\t\t// Set document vars if needed\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tif ((elem.ownerDocument || elem) != document) {\n\t\t\t\tsetDocument(elem);\n\t\t\t}\n\n\t\t\tvar fn = Expr.attrHandle[name.toLowerCase()],\n\n\t\t\t\t// Don't get fooled by Object.prototype properties (see trac-13807)\n\t\t\t\tval = fn && hasOwn.call(Expr.attrHandle, name.toLowerCase()) ?\n\t\t\t\t\tfn(elem, name, !documentIsHTML) :\n\t\t\t\t\tundefined;\n\n\t\t\tif (val !== undefined) {\n\t\t\t\treturn val;\n\t\t\t}\n\n\t\t\treturn elem.getAttribute(name);\n\t\t};\n\n\t\tfind.error = function (msg) {\n\t\t\tthrow new Error(\"Syntax error, unrecognized expression: \" + msg);\n\t\t};\n\n\t\t/**\n\t\t * Document sorting and removing duplicates\n\t\t * @param {ArrayLike} results\n\t\t */\n\t\tjQuery.uniqueSort = function (results) {\n\t\t\tvar elem,\n\t\t\t\tduplicates = [],\n\t\t\t\tj = 0,\n\t\t\t\ti = 0;\n\n\t\t\t// Unless we *know* we can detect duplicates, assume their presence\n\t\t\t//\n\t\t\t// Support: Android <=4.0+\n\t\t\t// Testing for detecting duplicates is unpredictable so instead assume we can't\n\t\t\t// depend on duplicate detection in all browsers without a stable sort.\n\t\t\thasDuplicate = !support.sortStable;\n\t\t\tsortInput = !support.sortStable && slice.call(results, 0);\n\t\t\tsort.call(results, sortOrder);\n\n\t\t\tif (hasDuplicate) {\n\t\t\t\twhile ((elem = results[i++])) {\n\t\t\t\t\tif (elem === results[i]) {\n\t\t\t\t\t\tj = duplicates.push(i);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\twhile (j--) {\n\t\t\t\t\tsplice.call(results, duplicates[j], 1);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Clear input after sorting to release objects\n\t\t\t// See https://github.com/jquery/sizzle/pull/225\n\t\t\tsortInput = null;\n\n\t\t\treturn results;\n\t\t};\n\n\t\tjQuery.fn.uniqueSort = function () {\n\t\t\treturn this.pushStack(jQuery.uniqueSort(slice.apply(this)));\n\t\t};\n\n\t\tExpr = jQuery.expr = {\n\n\t\t\t// Can be adjusted by the user\n\t\t\tcacheLength: 50,\n\n\t\t\tcreatePseudo: markFunction,\n\n\t\t\tmatch: matchExpr,\n\n\t\t\tattrHandle: {},\n\n\t\t\tfind: {},\n\n\t\t\trelative: {\n\t\t\t\t\">\": { dir: \"parentNode\", first: true },\n\t\t\t\t\" \": { dir: \"parentNode\" },\n\t\t\t\t\"+\": { dir: \"previousSibling\", first: true },\n\t\t\t\t\"~\": { dir: \"previousSibling\" }\n\t\t\t},\n\n\t\t\tpreFilter: {\n\t\t\t\tATTR: function (match) {\n\t\t\t\t\tmatch[1] = match[1].replace(runescape, funescape);\n\n\t\t\t\t\t// Move the given value to match[3] whether quoted or unquoted\n\t\t\t\t\tmatch[3] = (match[3] || match[4] || match[5] || \"\")\n\t\t\t\t\t\t.replace(runescape, funescape);\n\n\t\t\t\t\tif (match[2] === \"~=\") {\n\t\t\t\t\t\tmatch[3] = \" \" + match[3] + \" \";\n\t\t\t\t\t}\n\n\t\t\t\t\treturn match.slice(0, 4);\n\t\t\t\t},\n\n\t\t\t\tCHILD: function (match) {\n\n\t\t\t\t\t/* matches from matchExpr[\"CHILD\"]\n\t\t\t\t\t\t1 type (only|nth|...)\n\t\t\t\t\t\t2 what (child|of-type)\n\t\t\t\t\t\t3 argument (even|odd|\\d*|\\d*n([+-]\\d+)?|...)\n\t\t\t\t\t\t4 xn-component of xn+y argument ([+-]?\\d*n|)\n\t\t\t\t\t\t5 sign of xn-component\n\t\t\t\t\t\t6 x of xn-component\n\t\t\t\t\t\t7 sign of y-component\n\t\t\t\t\t\t8 y of y-component\n\t\t\t\t\t*/\n\t\t\t\t\tmatch[1] = match[1].toLowerCase();\n\n\t\t\t\t\tif (match[1].slice(0, 3) === \"nth\") {\n\n\t\t\t\t\t\t// nth-* requires argument\n\t\t\t\t\t\tif (!match[3]) {\n\t\t\t\t\t\t\tfind.error(match[0]);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// numeric x and y parameters for Expr.filter.CHILD\n\t\t\t\t\t\t// remember that false/true cast respectively to 0/1\n\t\t\t\t\t\tmatch[4] = +(match[4] ?\n\t\t\t\t\t\t\tmatch[5] + (match[6] || 1) :\n\t\t\t\t\t\t\t2 * (match[3] === \"even\" || match[3] === \"odd\")\n\t\t\t\t\t\t);\n\t\t\t\t\t\tmatch[5] = +((match[7] + match[8]) || match[3] === \"odd\");\n\n\t\t\t\t\t\t// other types prohibit arguments\n\t\t\t\t\t} else if (match[3]) {\n\t\t\t\t\t\tfind.error(match[0]);\n\t\t\t\t\t}\n\n\t\t\t\t\treturn match;\n\t\t\t\t},\n\n\t\t\t\tPSEUDO: function (match) {\n\t\t\t\t\tvar excess,\n\t\t\t\t\t\tunquoted = !match[6] && match[2];\n\n\t\t\t\t\tif (matchExpr.CHILD.test(match[0])) {\n\t\t\t\t\t\treturn null;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Accept quoted arguments as-is\n\t\t\t\t\tif (match[3]) {\n\t\t\t\t\t\tmatch[2] = match[4] || match[5] || \"\";\n\n\t\t\t\t\t\t// Strip excess characters from unquoted arguments\n\t\t\t\t\t} else if (unquoted && rpseudo.test(unquoted) &&\n\n\t\t\t\t\t\t// Get excess from tokenize (recursively)\n\t\t\t\t\t\t(excess = tokenize(unquoted, true)) &&\n\n\t\t\t\t\t\t// advance to the next closing parenthesis\n\t\t\t\t\t\t(excess = unquoted.indexOf(\")\", unquoted.length - excess) - unquoted.length)) {\n\n\t\t\t\t\t\t// excess is a negative index\n\t\t\t\t\t\tmatch[0] = match[0].slice(0, excess);\n\t\t\t\t\t\tmatch[2] = unquoted.slice(0, excess);\n\t\t\t\t\t}\n\n\t\t\t\t\t// Return only captures needed by the pseudo filter method (type and argument)\n\t\t\t\t\treturn match.slice(0, 3);\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tfilter: {\n\n\t\t\t\tTAG: function (nodeNameSelector) {\n\t\t\t\t\tvar expectedNodeName = nodeNameSelector.replace(runescape, funescape).toLowerCase();\n\t\t\t\t\treturn nodeNameSelector === \"*\" ?\n\t\t\t\t\t\tfunction () {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t} :\n\t\t\t\t\t\tfunction (elem) {\n\t\t\t\t\t\t\treturn nodeName(elem, expectedNodeName);\n\t\t\t\t\t\t};\n\t\t\t\t},\n\n\t\t\t\tCLASS: function (className) {\n\t\t\t\t\tvar pattern = classCache[className + \" \"];\n\n\t\t\t\t\treturn pattern ||\n\t\t\t\t\t\t(pattern = new RegExp(\"(^|\" + whitespace + \")\" + className +\n\t\t\t\t\t\t\t\"(\" + whitespace + \"|$)\")) &&\n\t\t\t\t\t\tclassCache(className, function (elem) {\n\t\t\t\t\t\t\treturn pattern.test(\n\t\t\t\t\t\t\t\ttypeof elem.className === \"string\" && elem.className ||\n\t\t\t\t\t\t\t\ttypeof elem.getAttribute !== \"undefined\" &&\n\t\t\t\t\t\t\t\telem.getAttribute(\"class\") ||\n\t\t\t\t\t\t\t\t\"\"\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t});\n\t\t\t\t},\n\n\t\t\t\tATTR: function (name, operator, check) {\n\t\t\t\t\treturn function (elem) {\n\t\t\t\t\t\tvar result = find.attr(elem, name);\n\n\t\t\t\t\t\tif (result == null) {\n\t\t\t\t\t\t\treturn operator === \"!=\";\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!operator) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tresult += \"\";\n\n\t\t\t\t\t\tif (operator === \"=\") {\n\t\t\t\t\t\t\treturn result === check;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (operator === \"!=\") {\n\t\t\t\t\t\t\treturn result !== check;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (operator === \"^=\") {\n\t\t\t\t\t\t\treturn check && result.indexOf(check) === 0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (operator === \"*=\") {\n\t\t\t\t\t\t\treturn check && result.indexOf(check) > -1;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (operator === \"$=\") {\n\t\t\t\t\t\t\treturn check && result.slice(-check.length) === check;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (operator === \"~=\") {\n\t\t\t\t\t\t\treturn (\" \" + result.replace(rwhitespace, \" \") + \" \")\n\t\t\t\t\t\t\t\t.indexOf(check) > -1;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (operator === \"|=\") {\n\t\t\t\t\t\t\treturn result === check || result.slice(0, check.length + 1) === check + \"-\";\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t};\n\t\t\t\t},\n\n\t\t\t\tCHILD: function (type, what, _argument, first, last) {\n\t\t\t\t\tvar simple = type.slice(0, 3) !== \"nth\",\n\t\t\t\t\t\tforward = type.slice(-4) !== \"last\",\n\t\t\t\t\t\tofType = what === \"of-type\";\n\n\t\t\t\t\treturn first === 1 && last === 0 ?\n\n\t\t\t\t\t\t// Shortcut for :nth-*(n)\n\t\t\t\t\t\tfunction (elem) {\n\t\t\t\t\t\t\treturn !!elem.parentNode;\n\t\t\t\t\t\t} :\n\n\t\t\t\t\t\tfunction (elem, _context, xml) {\n\t\t\t\t\t\t\tvar cache, outerCache, node, nodeIndex, start,\n\t\t\t\t\t\t\t\tdir = simple !== forward ? \"nextSibling\" : \"previousSibling\",\n\t\t\t\t\t\t\t\tparent = elem.parentNode,\n\t\t\t\t\t\t\t\tname = ofType && elem.nodeName.toLowerCase(),\n\t\t\t\t\t\t\t\tuseCache = !xml && !ofType,\n\t\t\t\t\t\t\t\tdiff = false;\n\n\t\t\t\t\t\t\tif (parent) {\n\n\t\t\t\t\t\t\t\t// :(first|last|only)-(child|of-type)\n\t\t\t\t\t\t\t\tif (simple) {\n\t\t\t\t\t\t\t\t\twhile (dir) {\n\t\t\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\t\t\twhile ((node = node[dir])) {\n\t\t\t\t\t\t\t\t\t\t\tif (ofType ?\n\t\t\t\t\t\t\t\t\t\t\t\tnodeName(node, name) :\n\t\t\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1) {\n\n\t\t\t\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t// Reverse direction for :only-* (if we haven't yet done so)\n\t\t\t\t\t\t\t\t\t\tstart = dir = type === \"only\" && !start && \"nextSibling\";\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tstart = [forward ? parent.firstChild : parent.lastChild];\n\n\t\t\t\t\t\t\t\t// non-xml :nth-child(...) stores cache data on `parent`\n\t\t\t\t\t\t\t\tif (forward && useCache) {\n\n\t\t\t\t\t\t\t\t\t// Seek `elem` from a previously-cached index\n\t\t\t\t\t\t\t\t\touterCache = parent[expando] || (parent[expando] = {});\n\t\t\t\t\t\t\t\t\tcache = outerCache[type] || [];\n\t\t\t\t\t\t\t\t\tnodeIndex = cache[0] === dirruns && cache[1];\n\t\t\t\t\t\t\t\t\tdiff = nodeIndex && cache[2];\n\t\t\t\t\t\t\t\t\tnode = nodeIndex && parent.childNodes[nodeIndex];\n\n\t\t\t\t\t\t\t\t\twhile ((node = ++nodeIndex && node && node[dir] ||\n\n\t\t\t\t\t\t\t\t\t\t// Fallback to seeking `elem` from the start\n\t\t\t\t\t\t\t\t\t\t(diff = nodeIndex = 0) || start.pop())) {\n\n\t\t\t\t\t\t\t\t\t\t// When found, cache indexes on `parent` and break\n\t\t\t\t\t\t\t\t\t\tif (node.nodeType === 1 && ++diff && node === elem) {\n\t\t\t\t\t\t\t\t\t\t\touterCache[type] = [dirruns, nodeIndex, diff];\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t// Use previously-cached element index if available\n\t\t\t\t\t\t\t\t\tif (useCache) {\n\t\t\t\t\t\t\t\t\t\touterCache = elem[expando] || (elem[expando] = {});\n\t\t\t\t\t\t\t\t\t\tcache = outerCache[type] || [];\n\t\t\t\t\t\t\t\t\t\tnodeIndex = cache[0] === dirruns && cache[1];\n\t\t\t\t\t\t\t\t\t\tdiff = nodeIndex;\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// xml :nth-child(...)\n\t\t\t\t\t\t\t\t\t// or :nth-last-child(...) or :nth(-last)?-of-type(...)\n\t\t\t\t\t\t\t\t\tif (diff === false) {\n\n\t\t\t\t\t\t\t\t\t\t// Use the same loop as above to seek `elem` from the start\n\t\t\t\t\t\t\t\t\t\twhile ((node = ++nodeIndex && node && node[dir] ||\n\t\t\t\t\t\t\t\t\t\t\t(diff = nodeIndex = 0) || start.pop())) {\n\n\t\t\t\t\t\t\t\t\t\t\tif ((ofType ?\n\t\t\t\t\t\t\t\t\t\t\t\tnodeName(node, name) :\n\t\t\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1) &&\n\t\t\t\t\t\t\t\t\t\t\t\t++diff) {\n\n\t\t\t\t\t\t\t\t\t\t\t\t// Cache the index of each encountered element\n\t\t\t\t\t\t\t\t\t\t\t\tif (useCache) {\n\t\t\t\t\t\t\t\t\t\t\t\t\touterCache = node[expando] ||\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t(node[expando] = {});\n\t\t\t\t\t\t\t\t\t\t\t\t\touterCache[type] = [dirruns, diff];\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\tif (node === elem) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t// Incorporate the offset, then check against cycle size\n\t\t\t\t\t\t\t\tdiff -= last;\n\t\t\t\t\t\t\t\treturn diff === first || (diff % first === 0 && diff / first >= 0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\t\t\t\t},\n\n\t\t\t\tPSEUDO: function (pseudo, argument) {\n\n\t\t\t\t\t// pseudo-class names are case-insensitive\n\t\t\t\t\t// https://www.w3.org/TR/selectors/#pseudo-classes\n\t\t\t\t\t// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters\n\t\t\t\t\t// Remember that setFilters inherits from pseudos\n\t\t\t\t\tvar args,\n\t\t\t\t\t\tfn = Expr.pseudos[pseudo] || Expr.setFilters[pseudo.toLowerCase()] ||\n\t\t\t\t\t\t\tfind.error(\"unsupported pseudo: \" + pseudo);\n\n\t\t\t\t\t// The user may use createPseudo to indicate that\n\t\t\t\t\t// arguments are needed to create the filter function\n\t\t\t\t\t// just as jQuery does\n\t\t\t\t\tif (fn[expando]) {\n\t\t\t\t\t\treturn fn(argument);\n\t\t\t\t\t}\n\n\t\t\t\t\t// But maintain support for old signatures\n\t\t\t\t\tif (fn.length > 1) {\n\t\t\t\t\t\targs = [pseudo, pseudo, \"\", argument];\n\t\t\t\t\t\treturn Expr.setFilters.hasOwnProperty(pseudo.toLowerCase()) ?\n\t\t\t\t\t\t\tmarkFunction(function (seed, matches) {\n\t\t\t\t\t\t\t\tvar idx,\n\t\t\t\t\t\t\t\t\tmatched = fn(seed, argument),\n\t\t\t\t\t\t\t\t\ti = matched.length;\n\t\t\t\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\t\t\t\tidx = indexOf.call(seed, matched[i]);\n\t\t\t\t\t\t\t\t\tseed[idx] = !(matches[idx] = matched[i]);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}) :\n\t\t\t\t\t\t\tfunction (elem) {\n\t\t\t\t\t\t\t\treturn fn(elem, 0, args);\n\t\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\treturn fn;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tpseudos: {\n\n\t\t\t\t// Potentially complex pseudos\n\t\t\t\tnot: markFunction(function (selector) {\n\n\t\t\t\t\t// Trim the selector passed to compile\n\t\t\t\t\t// to avoid treating leading and trailing\n\t\t\t\t\t// spaces as combinators\n\t\t\t\t\tvar input = [],\n\t\t\t\t\t\tresults = [],\n\t\t\t\t\t\tmatcher = compile(selector.replace(rtrimCSS, \"$1\"));\n\n\t\t\t\t\treturn matcher[expando] ?\n\t\t\t\t\t\tmarkFunction(function (seed, matches, _context, xml) {\n\t\t\t\t\t\t\tvar elem,\n\t\t\t\t\t\t\t\tunmatched = matcher(seed, null, xml, []),\n\t\t\t\t\t\t\t\ti = seed.length;\n\n\t\t\t\t\t\t\t// Match elements unmatched by `matcher`\n\t\t\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\t\t\tif ((elem = unmatched[i])) {\n\t\t\t\t\t\t\t\t\tseed[i] = !(matches[i] = elem);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}) :\n\t\t\t\t\t\tfunction (elem, _context, xml) {\n\t\t\t\t\t\t\tinput[0] = elem;\n\t\t\t\t\t\t\tmatcher(input, null, xml, results);\n\n\t\t\t\t\t\t\t// Don't keep the element\n\t\t\t\t\t\t\t// (see https://github.com/jquery/sizzle/issues/299)\n\t\t\t\t\t\t\tinput[0] = null;\n\t\t\t\t\t\t\treturn !results.pop();\n\t\t\t\t\t\t};\n\t\t\t\t}),\n\n\t\t\t\thas: markFunction(function (selector) {\n\t\t\t\t\treturn function (elem) {\n\t\t\t\t\t\treturn find(selector, elem).length > 0;\n\t\t\t\t\t};\n\t\t\t\t}),\n\n\t\t\t\tcontains: markFunction(function (text) {\n\t\t\t\t\ttext = text.replace(runescape, funescape);\n\t\t\t\t\treturn function (elem) {\n\t\t\t\t\t\treturn (elem.textContent || jQuery.text(elem)).indexOf(text) > -1;\n\t\t\t\t\t};\n\t\t\t\t}),\n\n\t\t\t\t// \"Whether an element is represented by a :lang() selector\n\t\t\t\t// is based solely on the element's language value\n\t\t\t\t// being equal to the identifier C,\n\t\t\t\t// or beginning with the identifier C immediately followed by \"-\".\n\t\t\t\t// The matching of C against the element's language value is performed case-insensitively.\n\t\t\t\t// The identifier C does not have to be a valid language name.\"\n\t\t\t\t// https://www.w3.org/TR/selectors/#lang-pseudo\n\t\t\t\tlang: markFunction(function (lang) {\n\n\t\t\t\t\t// lang value must be a valid identifier\n\t\t\t\t\tif (!ridentifier.test(lang || \"\")) {\n\t\t\t\t\t\tfind.error(\"unsupported lang: \" + lang);\n\t\t\t\t\t}\n\t\t\t\t\tlang = lang.replace(runescape, funescape).toLowerCase();\n\t\t\t\t\treturn function (elem) {\n\t\t\t\t\t\tvar elemLang;\n\t\t\t\t\t\tdo {\n\t\t\t\t\t\t\tif ((elemLang = documentIsHTML ?\n\t\t\t\t\t\t\t\telem.lang :\n\t\t\t\t\t\t\t\telem.getAttribute(\"xml:lang\") || elem.getAttribute(\"lang\"))) {\n\n\t\t\t\t\t\t\t\telemLang = elemLang.toLowerCase();\n\t\t\t\t\t\t\t\treturn elemLang === lang || elemLang.indexOf(lang + \"-\") === 0;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} while ((elem = elem.parentNode) && elem.nodeType === 1);\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t};\n\t\t\t\t}),\n\n\t\t\t\t// Miscellaneous\n\t\t\t\ttarget: function (elem) {\n\t\t\t\t\tvar hash = window.location && window.location.hash;\n\t\t\t\t\treturn hash && hash.slice(1) === elem.id;\n\t\t\t\t},\n\n\t\t\t\troot: function (elem) {\n\t\t\t\t\treturn elem === documentElement;\n\t\t\t\t},\n\n\t\t\t\tfocus: function (elem) {\n\t\t\t\t\treturn elem === safeActiveElement() &&\n\t\t\t\t\t\tdocument.hasFocus() &&\n\t\t\t\t\t\t!!(elem.type || elem.href || ~elem.tabIndex);\n\t\t\t\t},\n\n\t\t\t\t// Boolean properties\n\t\t\t\tenabled: createDisabledPseudo(false),\n\t\t\t\tdisabled: createDisabledPseudo(true),\n\n\t\t\t\tchecked: function (elem) {\n\n\t\t\t\t\t// In CSS3, :checked should return both checked and selected elements\n\t\t\t\t\t// https://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\t\t\treturn (nodeName(elem, \"input\") && !!elem.checked) ||\n\t\t\t\t\t\t(nodeName(elem, \"option\") && !!elem.selected);\n\t\t\t\t},\n\n\t\t\t\tselected: function (elem) {\n\n\t\t\t\t\t// Support: IE <=11+\n\t\t\t\t\t// Accessing the selectedIndex property\n\t\t\t\t\t// forces the browser to treat the default option as\n\t\t\t\t\t// selected when in an optgroup.\n\t\t\t\t\tif (elem.parentNode) {\n\t\t\t\t\t\t// eslint-disable-next-line no-unused-expressions\n\t\t\t\t\t\telem.parentNode.selectedIndex;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn elem.selected === true;\n\t\t\t\t},\n\n\t\t\t\t// Contents\n\t\t\t\tempty: function (elem) {\n\n\t\t\t\t\t// https://www.w3.org/TR/selectors/#empty-pseudo\n\t\t\t\t\t// :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),\n\t\t\t\t\t//   but not by others (comment: 8; processing instruction: 7; etc.)\n\t\t\t\t\t// nodeType < 6 works because attributes (2) do not appear as children\n\t\t\t\t\tfor (elem = elem.firstChild; elem; elem = elem.nextSibling) {\n\t\t\t\t\t\tif (elem.nodeType < 6) {\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn true;\n\t\t\t\t},\n\n\t\t\t\tparent: function (elem) {\n\t\t\t\t\treturn !Expr.pseudos.empty(elem);\n\t\t\t\t},\n\n\t\t\t\t// Element/input types\n\t\t\t\theader: function (elem) {\n\t\t\t\t\treturn rheader.test(elem.nodeName);\n\t\t\t\t},\n\n\t\t\t\tinput: function (elem) {\n\t\t\t\t\treturn rinputs.test(elem.nodeName);\n\t\t\t\t},\n\n\t\t\t\tbutton: function (elem) {\n\t\t\t\t\treturn nodeName(elem, \"input\") && elem.type === \"button\" ||\n\t\t\t\t\t\tnodeName(elem, \"button\");\n\t\t\t\t},\n\n\t\t\t\ttext: function (elem) {\n\t\t\t\t\tvar attr;\n\t\t\t\t\treturn nodeName(elem, \"input\") && elem.type === \"text\" &&\n\n\t\t\t\t\t\t// Support: IE <10 only\n\t\t\t\t\t\t// New HTML5 attribute values (e.g., \"search\") appear\n\t\t\t\t\t\t// with elem.type === \"text\"\n\t\t\t\t\t\t((attr = elem.getAttribute(\"type\")) == null ||\n\t\t\t\t\t\t\tattr.toLowerCase() === \"text\");\n\t\t\t\t},\n\n\t\t\t\t// Position-in-collection\n\t\t\t\tfirst: createPositionalPseudo(function () {\n\t\t\t\t\treturn [0];\n\t\t\t\t}),\n\n\t\t\t\tlast: createPositionalPseudo(function (_matchIndexes, length) {\n\t\t\t\t\treturn [length - 1];\n\t\t\t\t}),\n\n\t\t\t\teq: createPositionalPseudo(function (_matchIndexes, length, argument) {\n\t\t\t\t\treturn [argument < 0 ? argument + length : argument];\n\t\t\t\t}),\n\n\t\t\t\teven: createPositionalPseudo(function (matchIndexes, length) {\n\t\t\t\t\tvar i = 0;\n\t\t\t\t\tfor (; i < length; i += 2) {\n\t\t\t\t\t\tmatchIndexes.push(i);\n\t\t\t\t\t}\n\t\t\t\t\treturn matchIndexes;\n\t\t\t\t}),\n\n\t\t\t\todd: createPositionalPseudo(function (matchIndexes, length) {\n\t\t\t\t\tvar i = 1;\n\t\t\t\t\tfor (; i < length; i += 2) {\n\t\t\t\t\t\tmatchIndexes.push(i);\n\t\t\t\t\t}\n\t\t\t\t\treturn matchIndexes;\n\t\t\t\t}),\n\n\t\t\t\tlt: createPositionalPseudo(function (matchIndexes, length, argument) {\n\t\t\t\t\tvar i;\n\n\t\t\t\t\tif (argument < 0) {\n\t\t\t\t\t\ti = argument + length;\n\t\t\t\t\t} else if (argument > length) {\n\t\t\t\t\t\ti = length;\n\t\t\t\t\t} else {\n\t\t\t\t\t\ti = argument;\n\t\t\t\t\t}\n\n\t\t\t\t\tfor (; --i >= 0;) {\n\t\t\t\t\t\tmatchIndexes.push(i);\n\t\t\t\t\t}\n\t\t\t\t\treturn matchIndexes;\n\t\t\t\t}),\n\n\t\t\t\tgt: createPositionalPseudo(function (matchIndexes, length, argument) {\n\t\t\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\t\t\tfor (; ++i < length;) {\n\t\t\t\t\t\tmatchIndexes.push(i);\n\t\t\t\t\t}\n\t\t\t\t\treturn matchIndexes;\n\t\t\t\t})\n\t\t\t}\n\t\t};\n\n\t\tExpr.pseudos.nth = Expr.pseudos.eq;\n\n\t\t// Add button/input type pseudos\n\t\tfor (i in { radio: true, checkbox: true, file: true, password: true, image: true }) {\n\t\t\tExpr.pseudos[i] = createInputPseudo(i);\n\t\t}\n\t\tfor (i in { submit: true, reset: true }) {\n\t\t\tExpr.pseudos[i] = createButtonPseudo(i);\n\t\t}\n\n\t\t// Easy API for creating new setFilters\n\t\tfunction setFilters() { }\n\t\tsetFilters.prototype = Expr.filters = Expr.pseudos;\n\t\tExpr.setFilters = new setFilters();\n\n\t\tfunction tokenize(selector, parseOnly) {\n\t\t\tvar matched, match, tokens, type,\n\t\t\t\tsoFar, groups, preFilters,\n\t\t\t\tcached = tokenCache[selector + \" \"];\n\n\t\t\tif (cached) {\n\t\t\t\treturn parseOnly ? 0 : cached.slice(0);\n\t\t\t}\n\n\t\t\tsoFar = selector;\n\t\t\tgroups = [];\n\t\t\tpreFilters = Expr.preFilter;\n\n\t\t\twhile (soFar) {\n\n\t\t\t\t// Comma and first run\n\t\t\t\tif (!matched || (match = rcomma.exec(soFar))) {\n\t\t\t\t\tif (match) {\n\n\t\t\t\t\t\t// Don't consume trailing commas as valid\n\t\t\t\t\t\tsoFar = soFar.slice(match[0].length) || soFar;\n\t\t\t\t\t}\n\t\t\t\t\tgroups.push((tokens = []));\n\t\t\t\t}\n\n\t\t\t\tmatched = false;\n\n\t\t\t\t// Combinators\n\t\t\t\tif ((match = rleadingCombinator.exec(soFar))) {\n\t\t\t\t\tmatched = match.shift();\n\t\t\t\t\ttokens.push({\n\t\t\t\t\t\tvalue: matched,\n\n\t\t\t\t\t\t// Cast descendant combinators to space\n\t\t\t\t\t\ttype: match[0].replace(rtrimCSS, \" \")\n\t\t\t\t\t});\n\t\t\t\t\tsoFar = soFar.slice(matched.length);\n\t\t\t\t}\n\n\t\t\t\t// Filters\n\t\t\t\tfor (type in Expr.filter) {\n\t\t\t\t\tif ((match = matchExpr[type].exec(soFar)) && (!preFilters[type] ||\n\t\t\t\t\t\t(match = preFilters[type](match)))) {\n\t\t\t\t\t\tmatched = match.shift();\n\t\t\t\t\t\ttokens.push({\n\t\t\t\t\t\t\tvalue: matched,\n\t\t\t\t\t\t\ttype: type,\n\t\t\t\t\t\t\tmatches: match\n\t\t\t\t\t\t});\n\t\t\t\t\t\tsoFar = soFar.slice(matched.length);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (!matched) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Return the length of the invalid excess\n\t\t\t// if we're just parsing\n\t\t\t// Otherwise, throw an error or return tokens\n\t\t\tif (parseOnly) {\n\t\t\t\treturn soFar.length;\n\t\t\t}\n\n\t\t\treturn soFar ?\n\t\t\t\tfind.error(selector) :\n\n\t\t\t\t// Cache the tokens\n\t\t\t\ttokenCache(selector, groups).slice(0);\n\t\t}\n\n\t\tfunction toSelector(tokens) {\n\t\t\tvar i = 0,\n\t\t\t\tlen = tokens.length,\n\t\t\t\tselector = \"\";\n\t\t\tfor (; i < len; i++) {\n\t\t\t\tselector += tokens[i].value;\n\t\t\t}\n\t\t\treturn selector;\n\t\t}\n\n\t\tfunction addCombinator(matcher, combinator, base) {\n\t\t\tvar dir = combinator.dir,\n\t\t\t\tskip = combinator.next,\n\t\t\t\tkey = skip || dir,\n\t\t\t\tcheckNonElements = base && key === \"parentNode\",\n\t\t\t\tdoneName = done++;\n\n\t\t\treturn combinator.first ?\n\n\t\t\t\t// Check against closest ancestor/preceding element\n\t\t\t\tfunction (elem, context, xml) {\n\t\t\t\t\twhile ((elem = elem[dir])) {\n\t\t\t\t\t\tif (elem.nodeType === 1 || checkNonElements) {\n\t\t\t\t\t\t\treturn matcher(elem, context, xml);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn false;\n\t\t\t\t} :\n\n\t\t\t\t// Check against all ancestor/preceding elements\n\t\t\t\tfunction (elem, context, xml) {\n\t\t\t\t\tvar oldCache, outerCache,\n\t\t\t\t\t\tnewCache = [dirruns, doneName];\n\n\t\t\t\t\t// We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching\n\t\t\t\t\tif (xml) {\n\t\t\t\t\t\twhile ((elem = elem[dir])) {\n\t\t\t\t\t\t\tif (elem.nodeType === 1 || checkNonElements) {\n\t\t\t\t\t\t\t\tif (matcher(elem, context, xml)) {\n\t\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\twhile ((elem = elem[dir])) {\n\t\t\t\t\t\t\tif (elem.nodeType === 1 || checkNonElements) {\n\t\t\t\t\t\t\t\touterCache = elem[expando] || (elem[expando] = {});\n\n\t\t\t\t\t\t\t\tif (skip && nodeName(elem, skip)) {\n\t\t\t\t\t\t\t\t\telem = elem[dir] || elem;\n\t\t\t\t\t\t\t\t} else if ((oldCache = outerCache[key]) &&\n\t\t\t\t\t\t\t\t\toldCache[0] === dirruns && oldCache[1] === doneName) {\n\n\t\t\t\t\t\t\t\t\t// Assign to newCache so results back-propagate to previous elements\n\t\t\t\t\t\t\t\t\treturn (newCache[2] = oldCache[2]);\n\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t// Reuse newcache so results back-propagate to previous elements\n\t\t\t\t\t\t\t\t\touterCache[key] = newCache;\n\n\t\t\t\t\t\t\t\t\t// A match means we're done; a fail means we have to keep checking\n\t\t\t\t\t\t\t\t\tif ((newCache[2] = matcher(elem, context, xml))) {\n\t\t\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn false;\n\t\t\t\t};\n\t\t}\n\n\t\tfunction elementMatcher(matchers) {\n\t\t\treturn matchers.length > 1 ?\n\t\t\t\tfunction (elem, context, xml) {\n\t\t\t\t\tvar i = matchers.length;\n\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\tif (!matchers[i](elem, context, xml)) {\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn true;\n\t\t\t\t} :\n\t\t\t\tmatchers[0];\n\t\t}\n\n\t\tfunction multipleContexts(selector, contexts, results) {\n\t\t\tvar i = 0,\n\t\t\t\tlen = contexts.length;\n\t\t\tfor (; i < len; i++) {\n\t\t\t\tfind(selector, contexts[i], results);\n\t\t\t}\n\t\t\treturn results;\n\t\t}\n\n\t\tfunction condense(unmatched, map, filter, context, xml) {\n\t\t\tvar elem,\n\t\t\t\tnewUnmatched = [],\n\t\t\t\ti = 0,\n\t\t\t\tlen = unmatched.length,\n\t\t\t\tmapped = map != null;\n\n\t\t\tfor (; i < len; i++) {\n\t\t\t\tif ((elem = unmatched[i])) {\n\t\t\t\t\tif (!filter || filter(elem, context, xml)) {\n\t\t\t\t\t\tnewUnmatched.push(elem);\n\t\t\t\t\t\tif (mapped) {\n\t\t\t\t\t\t\tmap.push(i);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn newUnmatched;\n\t\t}\n\n\t\tfunction setMatcher(preFilter, selector, matcher, postFilter, postFinder, postSelector) {\n\t\t\tif (postFilter && !postFilter[expando]) {\n\t\t\t\tpostFilter = setMatcher(postFilter);\n\t\t\t}\n\t\t\tif (postFinder && !postFinder[expando]) {\n\t\t\t\tpostFinder = setMatcher(postFinder, postSelector);\n\t\t\t}\n\t\t\treturn markFunction(function (seed, results, context, xml) {\n\t\t\t\tvar temp, i, elem, matcherOut,\n\t\t\t\t\tpreMap = [],\n\t\t\t\t\tpostMap = [],\n\t\t\t\t\tpreexisting = results.length,\n\n\t\t\t\t\t// Get initial elements from seed or context\n\t\t\t\t\telems = seed ||\n\t\t\t\t\t\tmultipleContexts(selector || \"*\",\n\t\t\t\t\t\t\tcontext.nodeType ? [context] : context, []),\n\n\t\t\t\t\t// Prefilter to get matcher input, preserving a map for seed-results synchronization\n\t\t\t\t\tmatcherIn = preFilter && (seed || !selector) ?\n\t\t\t\t\t\tcondense(elems, preMap, preFilter, context, xml) :\n\t\t\t\t\t\telems;\n\n\t\t\t\tif (matcher) {\n\n\t\t\t\t\t// If we have a postFinder, or filtered seed, or non-seed postFilter\n\t\t\t\t\t// or preexisting results,\n\t\t\t\t\tmatcherOut = postFinder || (seed ? preFilter : preexisting || postFilter) ?\n\n\t\t\t\t\t\t// ...intermediate processing is necessary\n\t\t\t\t\t\t[] :\n\n\t\t\t\t\t\t// ...otherwise use results directly\n\t\t\t\t\t\tresults;\n\n\t\t\t\t\t// Find primary matches\n\t\t\t\t\tmatcher(matcherIn, matcherOut, context, xml);\n\t\t\t\t} else {\n\t\t\t\t\tmatcherOut = matcherIn;\n\t\t\t\t}\n\n\t\t\t\t// Apply postFilter\n\t\t\t\tif (postFilter) {\n\t\t\t\t\ttemp = condense(matcherOut, postMap);\n\t\t\t\t\tpostFilter(temp, [], context, xml);\n\n\t\t\t\t\t// Un-match failing elements by moving them back to matcherIn\n\t\t\t\t\ti = temp.length;\n\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\tif ((elem = temp[i])) {\n\t\t\t\t\t\t\tmatcherOut[postMap[i]] = !(matcherIn[postMap[i]] = elem);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (seed) {\n\t\t\t\t\tif (postFinder || preFilter) {\n\t\t\t\t\t\tif (postFinder) {\n\n\t\t\t\t\t\t\t// Get the final matcherOut by condensing this intermediate into postFinder contexts\n\t\t\t\t\t\t\ttemp = [];\n\t\t\t\t\t\t\ti = matcherOut.length;\n\t\t\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\t\t\tif ((elem = matcherOut[i])) {\n\n\t\t\t\t\t\t\t\t\t// Restore matcherIn since elem is not yet a final match\n\t\t\t\t\t\t\t\t\ttemp.push((matcherIn[i] = elem));\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tpostFinder(null, (matcherOut = []), temp, xml);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Move matched elements from seed to results to keep them synchronized\n\t\t\t\t\t\ti = matcherOut.length;\n\t\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\t\tif ((elem = matcherOut[i]) &&\n\t\t\t\t\t\t\t\t(temp = postFinder ? indexOf.call(seed, elem) : preMap[i]) > -1) {\n\n\t\t\t\t\t\t\t\tseed[temp] = !(results[temp] = elem);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Add elements to results, through postFinder if defined\n\t\t\t\t} else {\n\t\t\t\t\tmatcherOut = condense(\n\t\t\t\t\t\tmatcherOut === results ?\n\t\t\t\t\t\t\tmatcherOut.splice(preexisting, matcherOut.length) :\n\t\t\t\t\t\t\tmatcherOut\n\t\t\t\t\t);\n\t\t\t\t\tif (postFinder) {\n\t\t\t\t\t\tpostFinder(null, results, matcherOut, xml);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tpush.apply(results, matcherOut);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tfunction matcherFromTokens(tokens) {\n\t\t\tvar checkContext, matcher, j,\n\t\t\t\tlen = tokens.length,\n\t\t\t\tleadingRelative = Expr.relative[tokens[0].type],\n\t\t\t\timplicitRelative = leadingRelative || Expr.relative[\" \"],\n\t\t\t\ti = leadingRelative ? 1 : 0,\n\n\t\t\t\t// The foundational matcher ensures that elements are reachable from top-level context(s)\n\t\t\t\tmatchContext = addCombinator(function (elem) {\n\t\t\t\t\treturn elem === checkContext;\n\t\t\t\t}, implicitRelative, true),\n\t\t\t\tmatchAnyContext = addCombinator(function (elem) {\n\t\t\t\t\treturn indexOf.call(checkContext, elem) > -1;\n\t\t\t\t}, implicitRelative, true),\n\t\t\t\tmatchers = [function (elem, context, xml) {\n\n\t\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\tvar ret = (!leadingRelative && (xml || context != outermostContext)) || (\n\t\t\t\t\t\t(checkContext = context).nodeType ?\n\t\t\t\t\t\t\tmatchContext(elem, context, xml) :\n\t\t\t\t\t\t\tmatchAnyContext(elem, context, xml));\n\n\t\t\t\t\t// Avoid hanging onto element\n\t\t\t\t\t// (see https://github.com/jquery/sizzle/issues/299)\n\t\t\t\t\tcheckContext = null;\n\t\t\t\t\treturn ret;\n\t\t\t\t}];\n\n\t\t\tfor (; i < len; i++) {\n\t\t\t\tif ((matcher = Expr.relative[tokens[i].type])) {\n\t\t\t\t\tmatchers = [addCombinator(elementMatcher(matchers), matcher)];\n\t\t\t\t} else {\n\t\t\t\t\tmatcher = Expr.filter[tokens[i].type].apply(null, tokens[i].matches);\n\n\t\t\t\t\t// Return special upon seeing a positional matcher\n\t\t\t\t\tif (matcher[expando]) {\n\n\t\t\t\t\t\t// Find the next relative operator (if any) for proper handling\n\t\t\t\t\t\tj = ++i;\n\t\t\t\t\t\tfor (; j < len; j++) {\n\t\t\t\t\t\t\tif (Expr.relative[tokens[j].type]) {\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn setMatcher(\n\t\t\t\t\t\t\ti > 1 && elementMatcher(matchers),\n\t\t\t\t\t\t\ti > 1 && toSelector(\n\n\t\t\t\t\t\t\t\t// If the preceding token was a descendant combinator, insert an implicit any-element `*`\n\t\t\t\t\t\t\t\ttokens.slice(0, i - 1)\n\t\t\t\t\t\t\t\t\t.concat({ value: tokens[i - 2].type === \" \" ? \"*\" : \"\" })\n\t\t\t\t\t\t\t).replace(rtrimCSS, \"$1\"),\n\t\t\t\t\t\t\tmatcher,\n\t\t\t\t\t\t\ti < j && matcherFromTokens(tokens.slice(i, j)),\n\t\t\t\t\t\t\tj < len && matcherFromTokens((tokens = tokens.slice(j))),\n\t\t\t\t\t\t\tj < len && toSelector(tokens)\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\tmatchers.push(matcher);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn elementMatcher(matchers);\n\t\t}\n\n\t\tfunction matcherFromGroupMatchers(elementMatchers, setMatchers) {\n\t\t\tvar bySet = setMatchers.length > 0,\n\t\t\t\tbyElement = elementMatchers.length > 0,\n\t\t\t\tsuperMatcher = function (seed, context, xml, results, outermost) {\n\t\t\t\t\tvar elem, j, matcher,\n\t\t\t\t\t\tmatchedCount = 0,\n\t\t\t\t\t\ti = \"0\",\n\t\t\t\t\t\tunmatched = seed && [],\n\t\t\t\t\t\tsetMatched = [],\n\t\t\t\t\t\tcontextBackup = outermostContext,\n\n\t\t\t\t\t\t// We must always have either seed elements or outermost context\n\t\t\t\t\t\telems = seed || byElement && Expr.find.TAG(\"*\", outermost),\n\n\t\t\t\t\t\t// Use integer dirruns iff this is the outermost matcher\n\t\t\t\t\t\tdirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1),\n\t\t\t\t\t\tlen = elems.length;\n\n\t\t\t\t\tif (outermost) {\n\n\t\t\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\t\toutermostContext = context == document || context || outermost;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Add elements passing elementMatchers directly to results\n\t\t\t\t\t// Support: iOS <=7 - 9 only\n\t\t\t\t\t// Tolerate NodeList properties (IE: \"length\"; Safari: <number>) matching\n\t\t\t\t\t// elements by id. (see trac-14142)\n\t\t\t\t\tfor (; i !== len && (elem = elems[i]) != null; i++) {\n\t\t\t\t\t\tif (byElement && elem) {\n\t\t\t\t\t\t\tj = 0;\n\n\t\t\t\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\t\t\tif (!context && elem.ownerDocument != document) {\n\t\t\t\t\t\t\t\tsetDocument(elem);\n\t\t\t\t\t\t\t\txml = !documentIsHTML;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\twhile ((matcher = elementMatchers[j++])) {\n\t\t\t\t\t\t\t\tif (matcher(elem, context || document, xml)) {\n\t\t\t\t\t\t\t\t\tpush.call(results, elem);\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (outermost) {\n\t\t\t\t\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Track unmatched elements for set filters\n\t\t\t\t\t\tif (bySet) {\n\n\t\t\t\t\t\t\t// They will have gone through all possible matchers\n\t\t\t\t\t\t\tif ((elem = !matcher && elem)) {\n\t\t\t\t\t\t\t\tmatchedCount--;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Lengthen the array for every element, matched or not\n\t\t\t\t\t\t\tif (seed) {\n\t\t\t\t\t\t\t\tunmatched.push(elem);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// `i` is now the count of elements visited above, and adding it to `matchedCount`\n\t\t\t\t\t// makes the latter nonnegative.\n\t\t\t\t\tmatchedCount += i;\n\n\t\t\t\t\t// Apply set filters to unmatched elements\n\t\t\t\t\t// NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`\n\t\t\t\t\t// equals `i`), unless we didn't visit _any_ elements in the above loop because we have\n\t\t\t\t\t// no element matchers and no seed.\n\t\t\t\t\t// Incrementing an initially-string \"0\" `i` allows `i` to remain a string only in that\n\t\t\t\t\t// case, which will result in a \"00\" `matchedCount` that differs from `i` but is also\n\t\t\t\t\t// numerically zero.\n\t\t\t\t\tif (bySet && i !== matchedCount) {\n\t\t\t\t\t\tj = 0;\n\t\t\t\t\t\twhile ((matcher = setMatchers[j++])) {\n\t\t\t\t\t\t\tmatcher(unmatched, setMatched, context, xml);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (seed) {\n\n\t\t\t\t\t\t\t// Reintegrate element matches to eliminate the need for sorting\n\t\t\t\t\t\t\tif (matchedCount > 0) {\n\t\t\t\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\t\t\t\tif (!(unmatched[i] || setMatched[i])) {\n\t\t\t\t\t\t\t\t\t\tsetMatched[i] = pop.call(results);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Discard index placeholder values to get only actual matches\n\t\t\t\t\t\t\tsetMatched = condense(setMatched);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Add matches to results\n\t\t\t\t\t\tpush.apply(results, setMatched);\n\n\t\t\t\t\t\t// Seedless set matches succeeding multiple successful matchers stipulate sorting\n\t\t\t\t\t\tif (outermost && !seed && setMatched.length > 0 &&\n\t\t\t\t\t\t\t(matchedCount + setMatchers.length) > 1) {\n\n\t\t\t\t\t\t\tjQuery.uniqueSort(results);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Override manipulation of globals by nested matchers\n\t\t\t\t\tif (outermost) {\n\t\t\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\t\t\toutermostContext = contextBackup;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn unmatched;\n\t\t\t\t};\n\n\t\t\treturn bySet ?\n\t\t\t\tmarkFunction(superMatcher) :\n\t\t\t\tsuperMatcher;\n\t\t}\n\n\t\tfunction compile(selector, match /* Internal Use Only */) {\n\t\t\tvar i,\n\t\t\t\tsetMatchers = [],\n\t\t\t\telementMatchers = [],\n\t\t\t\tcached = compilerCache[selector + \" \"];\n\n\t\t\tif (!cached) {\n\n\t\t\t\t// Generate a function of recursive functions that can be used to check each element\n\t\t\t\tif (!match) {\n\t\t\t\t\tmatch = tokenize(selector);\n\t\t\t\t}\n\t\t\t\ti = match.length;\n\t\t\t\twhile (i--) {\n\t\t\t\t\tcached = matcherFromTokens(match[i]);\n\t\t\t\t\tif (cached[expando]) {\n\t\t\t\t\t\tsetMatchers.push(cached);\n\t\t\t\t\t} else {\n\t\t\t\t\t\telementMatchers.push(cached);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Cache the compiled function\n\t\t\t\tcached = compilerCache(selector,\n\t\t\t\t\tmatcherFromGroupMatchers(elementMatchers, setMatchers));\n\n\t\t\t\t// Save selector and tokenization\n\t\t\t\tcached.selector = selector;\n\t\t\t}\n\t\t\treturn cached;\n\t\t}\n\n\t\t/**\n\t\t * A low-level selection function that works with jQuery's compiled\n\t\t *  selector functions\n\t\t * @param {String|Function} selector A selector or a pre-compiled\n\t\t *  selector function built with jQuery selector compile\n\t\t * @param {Element} context\n\t\t * @param {Array} [results]\n\t\t * @param {Array} [seed] A set of elements to match against\n\t\t */\n\t\tfunction select(selector, context, results, seed) {\n\t\t\tvar i, tokens, token, type, find,\n\t\t\t\tcompiled = typeof selector === \"function\" && selector,\n\t\t\t\tmatch = !seed && tokenize((selector = compiled.selector || selector));\n\n\t\t\tresults = results || [];\n\n\t\t\t// Try to minimize operations if there is only one selector in the list and no seed\n\t\t\t// (the latter of which guarantees us context)\n\t\t\tif (match.length === 1) {\n\n\t\t\t\t// Reduce context if the leading compound selector is an ID\n\t\t\t\ttokens = match[0] = match[0].slice(0);\n\t\t\t\tif (tokens.length > 2 && (token = tokens[0]).type === \"ID\" &&\n\t\t\t\t\tcontext.nodeType === 9 && documentIsHTML && Expr.relative[tokens[1].type]) {\n\n\t\t\t\t\tcontext = (Expr.find.ID(\n\t\t\t\t\t\ttoken.matches[0].replace(runescape, funescape),\n\t\t\t\t\t\tcontext\n\t\t\t\t\t) || [])[0];\n\t\t\t\t\tif (!context) {\n\t\t\t\t\t\treturn results;\n\n\t\t\t\t\t\t// Precompiled matchers will still verify ancestry, so step up a level\n\t\t\t\t\t} else if (compiled) {\n\t\t\t\t\t\tcontext = context.parentNode;\n\t\t\t\t\t}\n\n\t\t\t\t\tselector = selector.slice(tokens.shift().value.length);\n\t\t\t\t}\n\n\t\t\t\t// Fetch a seed set for right-to-left matching\n\t\t\t\ti = matchExpr.needsContext.test(selector) ? 0 : tokens.length;\n\t\t\t\twhile (i--) {\n\t\t\t\t\ttoken = tokens[i];\n\n\t\t\t\t\t// Abort if we hit a combinator\n\t\t\t\t\tif (Expr.relative[(type = token.type)]) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tif ((find = Expr.find[type])) {\n\n\t\t\t\t\t\t// Search, expanding context for leading sibling combinators\n\t\t\t\t\t\tif ((seed = find(\n\t\t\t\t\t\t\ttoken.matches[0].replace(runescape, funescape),\n\t\t\t\t\t\t\trsibling.test(tokens[0].type) &&\n\t\t\t\t\t\t\ttestContext(context.parentNode) || context\n\t\t\t\t\t\t))) {\n\n\t\t\t\t\t\t\t// If seed is empty or no tokens remain, we can return early\n\t\t\t\t\t\t\ttokens.splice(i, 1);\n\t\t\t\t\t\t\tselector = seed.length && toSelector(tokens);\n\t\t\t\t\t\t\tif (!selector) {\n\t\t\t\t\t\t\t\tpush.apply(results, seed);\n\t\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Compile and execute a filtering function if one is not provided\n\t\t\t// Provide `match` to avoid retokenization if we modified the selector above\n\t\t\t(compiled || compile(selector, match))(\n\t\t\t\tseed,\n\t\t\t\tcontext,\n\t\t\t\t!documentIsHTML,\n\t\t\t\tresults,\n\t\t\t\t!context || rsibling.test(selector) && testContext(context.parentNode) || context\n\t\t\t);\n\t\t\treturn results;\n\t\t}\n\n\t\t// One-time assignments\n\n\t\t// Support: Android <=4.0 - 4.1+\n\t\t// Sort stability\n\t\tsupport.sortStable = expando.split(\"\").sort(sortOrder).join(\"\") === expando;\n\n\t\t// Initialize against the default document\n\t\tsetDocument();\n\n\t\t// Support: Android <=4.0 - 4.1+\n\t\t// Detached nodes confoundingly follow *each other*\n\t\tsupport.sortDetached = assert(function (el) {\n\n\t\t\t// Should return 1, but returns 4 (following)\n\t\t\treturn el.compareDocumentPosition(document.createElement(\"fieldset\")) & 1;\n\t\t});\n\n\t\tjQuery.find = find;\n\n\t\t// Deprecated\n\t\tjQuery.expr[\":\"] = jQuery.expr.pseudos;\n\t\tjQuery.unique = jQuery.uniqueSort;\n\n\t\t// These have always been private, but they used to be documented\n\t\t// as part of Sizzle so let's maintain them in the 3.x line\n\t\t// for backwards compatibility purposes.\n\t\tfind.compile = compile;\n\t\tfind.select = select;\n\t\tfind.setDocument = setDocument;\n\n\t\tfind.escape = jQuery.escapeSelector;\n\t\tfind.getText = jQuery.text;\n\t\tfind.isXML = jQuery.isXMLDoc;\n\t\tfind.selectors = jQuery.expr;\n\t\tfind.support = jQuery.support;\n\t\tfind.uniqueSort = jQuery.uniqueSort;\n\n\t\t/* eslint-enable */\n\n\t})();\n\n\n\tvar dir = function (elem, dir, until) {\n\t\tvar matched = [],\n\t\t\ttruncate = until !== undefined;\n\n\t\twhile ((elem = elem[dir]) && elem.nodeType !== 9) {\n\t\t\tif (elem.nodeType === 1) {\n\t\t\t\tif (truncate && jQuery(elem).is(until)) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tmatched.push(elem);\n\t\t\t}\n\t\t}\n\t\treturn matched;\n\t};\n\n\n\tvar siblings = function (n, elem) {\n\t\tvar matched = [];\n\n\t\tfor (; n; n = n.nextSibling) {\n\t\t\tif (n.nodeType === 1 && n !== elem) {\n\t\t\t\tmatched.push(n);\n\t\t\t}\n\t\t}\n\n\t\treturn matched;\n\t};\n\n\n\tvar rneedsContext = jQuery.expr.match.needsContext;\n\n\tvar rsingleTag = (/^<([a-z][^\\/\\0>:\\x20\\t\\r\\n\\f]*)[\\x20\\t\\r\\n\\f]*\\/?>(?:<\\/\\1>|)$/i);\n\n\n\n\t// Implement the identical functionality for filter and not\n\tfunction winnow(elements, qualifier, not) {\n\t\tif (isFunction(qualifier)) {\n\t\t\treturn jQuery.grep(elements, function (elem, i) {\n\t\t\t\treturn !!qualifier.call(elem, i, elem) !== not;\n\t\t\t});\n\t\t}\n\n\t\t// Single element\n\t\tif (qualifier.nodeType) {\n\t\t\treturn jQuery.grep(elements, function (elem) {\n\t\t\t\treturn (elem === qualifier) !== not;\n\t\t\t});\n\t\t}\n\n\t\t// Arraylike of elements (jQuery, arguments, Array)\n\t\tif (typeof qualifier !== \"string\") {\n\t\t\treturn jQuery.grep(elements, function (elem) {\n\t\t\t\treturn (indexOf.call(qualifier, elem) > -1) !== not;\n\t\t\t});\n\t\t}\n\n\t\t// Filtered directly for both simple and complex selectors\n\t\treturn jQuery.filter(qualifier, elements, not);\n\t}\n\n\tjQuery.filter = function (expr, elems, not) {\n\t\tvar elem = elems[0];\n\n\t\tif (not) {\n\t\t\texpr = \":not(\" + expr + \")\";\n\t\t}\n\n\t\tif (elems.length === 1 && elem.nodeType === 1) {\n\t\t\treturn jQuery.find.matchesSelector(elem, expr) ? [elem] : [];\n\t\t}\n\n\t\treturn jQuery.find.matches(expr, jQuery.grep(elems, function (elem) {\n\t\t\treturn elem.nodeType === 1;\n\t\t}));\n\t};\n\n\tjQuery.fn.extend({\n\t\tfind: function (selector) {\n\t\t\tvar i, ret,\n\t\t\t\tlen = this.length,\n\t\t\t\tself = this;\n\n\t\t\tif (typeof selector !== \"string\") {\n\t\t\t\treturn this.pushStack(jQuery(selector).filter(function () {\n\t\t\t\t\tfor (i = 0; i < len; i++) {\n\t\t\t\t\t\tif (jQuery.contains(self[i], this)) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}));\n\t\t\t}\n\n\t\t\tret = this.pushStack([]);\n\n\t\t\tfor (i = 0; i < len; i++) {\n\t\t\t\tjQuery.find(selector, self[i], ret);\n\t\t\t}\n\n\t\t\treturn len > 1 ? jQuery.uniqueSort(ret) : ret;\n\t\t},\n\t\tfilter: function (selector) {\n\t\t\treturn this.pushStack(winnow(this, selector || [], false));\n\t\t},\n\t\tnot: function (selector) {\n\t\t\treturn this.pushStack(winnow(this, selector || [], true));\n\t\t},\n\t\tis: function (selector) {\n\t\t\treturn !!winnow(\n\t\t\t\tthis,\n\n\t\t\t\t// If this is a positional/relative selector, check membership in the returned set\n\t\t\t\t// so $(\"p:first\").is(\"p:last\") won't return true for a doc with two \"p\".\n\t\t\t\ttypeof selector === \"string\" && rneedsContext.test(selector) ?\n\t\t\t\t\tjQuery(selector) :\n\t\t\t\t\tselector || [],\n\t\t\t\tfalse\n\t\t\t).length;\n\t\t}\n\t});\n\n\n\t// Initialize a jQuery object\n\n\n\t// A central reference to the root jQuery(document)\n\tvar rootjQuery,\n\n\t\t// A simple way to check for HTML strings\n\t\t// Prioritize #id over <tag> to avoid XSS via location.hash (trac-9521)\n\t\t// Strict HTML recognition (trac-11290: must start with <)\n\t\t// Shortcut simple #id case for speed\n\t\trquickExpr = /^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]+))$/,\n\n\t\tinit = jQuery.fn.init = function (selector, context, root) {\n\t\t\tvar match, elem;\n\n\t\t\t// HANDLE: $(\"\"), $(null), $(undefined), $(false)\n\t\t\tif (!selector) {\n\t\t\t\treturn this;\n\t\t\t}\n\n\t\t\t// Method init() accepts an alternate rootjQuery\n\t\t\t// so migrate can support jQuery.sub (gh-2101)\n\t\t\troot = root || rootjQuery;\n\n\t\t\t// Handle HTML strings\n\t\t\tif (typeof selector === \"string\") {\n\t\t\t\tif (selector[0] === \"<\" &&\n\t\t\t\t\tselector[selector.length - 1] === \">\" &&\n\t\t\t\t\tselector.length >= 3) {\n\n\t\t\t\t\t// Assume that strings that start and end with <> are HTML and skip the regex check\n\t\t\t\t\tmatch = [null, selector, null];\n\n\t\t\t\t} else {\n\t\t\t\t\tmatch = rquickExpr.exec(selector);\n\t\t\t\t}\n\n\t\t\t\t// Match html or make sure no context is specified for #id\n\t\t\t\tif (match && (match[1] || !context)) {\n\n\t\t\t\t\t// HANDLE: $(html) -> $(array)\n\t\t\t\t\tif (match[1]) {\n\t\t\t\t\t\tcontext = context instanceof jQuery ? context[0] : context;\n\n\t\t\t\t\t\t// Option to run scripts is true for back-compat\n\t\t\t\t\t\t// Intentionally let the error be thrown if parseHTML is not present\n\t\t\t\t\t\tjQuery.merge(this, jQuery.parseHTML(\n\t\t\t\t\t\t\tmatch[1],\n\t\t\t\t\t\t\tcontext && context.nodeType ? context.ownerDocument || context : document,\n\t\t\t\t\t\t\ttrue\n\t\t\t\t\t\t));\n\n\t\t\t\t\t\t// HANDLE: $(html, props)\n\t\t\t\t\t\tif (rsingleTag.test(match[1]) && jQuery.isPlainObject(context)) {\n\t\t\t\t\t\t\tfor (match in context) {\n\n\t\t\t\t\t\t\t\t// Properties of context are called as methods if possible\n\t\t\t\t\t\t\t\tif (isFunction(this[match])) {\n\t\t\t\t\t\t\t\t\tthis[match](context[match]);\n\n\t\t\t\t\t\t\t\t\t// ...and otherwise set as attributes\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tthis.attr(match, context[match]);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn this;\n\n\t\t\t\t\t\t// HANDLE: $(#id)\n\t\t\t\t\t} else {\n\t\t\t\t\t\telem = document.getElementById(match[2]);\n\n\t\t\t\t\t\tif (elem) {\n\n\t\t\t\t\t\t\t// Inject the element directly into the jQuery object\n\t\t\t\t\t\t\tthis[0] = elem;\n\t\t\t\t\t\t\tthis.length = 1;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn this;\n\t\t\t\t\t}\n\n\t\t\t\t\t// HANDLE: $(expr, $(...))\n\t\t\t\t} else if (!context || context.jquery) {\n\t\t\t\t\treturn (context || root).find(selector);\n\n\t\t\t\t\t// HANDLE: $(expr, context)\n\t\t\t\t\t// (which is just equivalent to: $(context).find(expr)\n\t\t\t\t} else {\n\t\t\t\t\treturn this.constructor(context).find(selector);\n\t\t\t\t}\n\n\t\t\t\t// HANDLE: $(DOMElement)\n\t\t\t} else if (selector.nodeType) {\n\t\t\t\tthis[0] = selector;\n\t\t\t\tthis.length = 1;\n\t\t\t\treturn this;\n\n\t\t\t\t// HANDLE: $(function)\n\t\t\t\t// Shortcut for document ready\n\t\t\t} else if (isFunction(selector)) {\n\t\t\t\treturn root.ready !== undefined ?\n\t\t\t\t\troot.ready(selector) :\n\n\t\t\t\t\t// Execute immediately if ready is not present\n\t\t\t\t\tselector(jQuery);\n\t\t\t}\n\n\t\t\treturn jQuery.makeArray(selector, this);\n\t\t};\n\n\t// Give the init function the jQuery prototype for later instantiation\n\tinit.prototype = jQuery.fn;\n\n\t// Initialize central reference\n\trootjQuery = jQuery(document);\n\n\n\tvar rparentsprev = /^(?:parents|prev(?:Until|All))/,\n\n\t\t// Methods guaranteed to produce a unique set when starting from a unique set\n\t\tguaranteedUnique = {\n\t\t\tchildren: true,\n\t\t\tcontents: true,\n\t\t\tnext: true,\n\t\t\tprev: true\n\t\t};\n\n\tjQuery.fn.extend({\n\t\thas: function (target) {\n\t\t\tvar targets = jQuery(target, this),\n\t\t\t\tl = targets.length;\n\n\t\t\treturn this.filter(function () {\n\t\t\t\tvar i = 0;\n\t\t\t\tfor (; i < l; i++) {\n\t\t\t\t\tif (jQuery.contains(this, targets[i])) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\tclosest: function (selectors, context) {\n\t\t\tvar cur,\n\t\t\t\ti = 0,\n\t\t\t\tl = this.length,\n\t\t\t\tmatched = [],\n\t\t\t\ttargets = typeof selectors !== \"string\" && jQuery(selectors);\n\n\t\t\t// Positional selectors never match, since there's no _selection_ context\n\t\t\tif (!rneedsContext.test(selectors)) {\n\t\t\t\tfor (; i < l; i++) {\n\t\t\t\t\tfor (cur = this[i]; cur && cur !== context; cur = cur.parentNode) {\n\n\t\t\t\t\t\t// Always skip document fragments\n\t\t\t\t\t\tif (cur.nodeType < 11 && (targets ?\n\t\t\t\t\t\t\ttargets.index(cur) > -1 :\n\n\t\t\t\t\t\t\t// Don't pass non-elements to jQuery#find\n\t\t\t\t\t\t\tcur.nodeType === 1 &&\n\t\t\t\t\t\t\tjQuery.find.matchesSelector(cur, selectors))) {\n\n\t\t\t\t\t\t\tmatched.push(cur);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn this.pushStack(matched.length > 1 ? jQuery.uniqueSort(matched) : matched);\n\t\t},\n\n\t\t// Determine the position of an element within the set\n\t\tindex: function (elem) {\n\n\t\t\t// No argument, return index in parent\n\t\t\tif (!elem) {\n\t\t\t\treturn (this[0] && this[0].parentNode) ? this.first().prevAll().length : -1;\n\t\t\t}\n\n\t\t\t// Index in selector\n\t\t\tif (typeof elem === \"string\") {\n\t\t\t\treturn indexOf.call(jQuery(elem), this[0]);\n\t\t\t}\n\n\t\t\t// Locate the position of the desired element\n\t\t\treturn indexOf.call(this,\n\n\t\t\t\t// If it receives a jQuery object, the first element is used\n\t\t\t\telem.jquery ? elem[0] : elem\n\t\t\t);\n\t\t},\n\n\t\tadd: function (selector, context) {\n\t\t\treturn this.pushStack(\n\t\t\t\tjQuery.uniqueSort(\n\t\t\t\t\tjQuery.merge(this.get(), jQuery(selector, context))\n\t\t\t\t)\n\t\t\t);\n\t\t},\n\n\t\taddBack: function (selector) {\n\t\t\treturn this.add(selector == null ?\n\t\t\t\tthis.prevObject : this.prevObject.filter(selector)\n\t\t\t);\n\t\t}\n\t});\n\n\tfunction sibling(cur, dir) {\n\t\twhile ((cur = cur[dir]) && cur.nodeType !== 1) { }\n\t\treturn cur;\n\t}\n\n\tjQuery.each({\n\t\tparent: function (elem) {\n\t\t\tvar parent = elem.parentNode;\n\t\t\treturn parent && parent.nodeType !== 11 ? parent : null;\n\t\t},\n\t\tparents: function (elem) {\n\t\t\treturn dir(elem, \"parentNode\");\n\t\t},\n\t\tparentsUntil: function (elem, _i, until) {\n\t\t\treturn dir(elem, \"parentNode\", until);\n\t\t},\n\t\tnext: function (elem) {\n\t\t\treturn sibling(elem, \"nextSibling\");\n\t\t},\n\t\tprev: function (elem) {\n\t\t\treturn sibling(elem, \"previousSibling\");\n\t\t},\n\t\tnextAll: function (elem) {\n\t\t\treturn dir(elem, \"nextSibling\");\n\t\t},\n\t\tprevAll: function (elem) {\n\t\t\treturn dir(elem, \"previousSibling\");\n\t\t},\n\t\tnextUntil: function (elem, _i, until) {\n\t\t\treturn dir(elem, \"nextSibling\", until);\n\t\t},\n\t\tprevUntil: function (elem, _i, until) {\n\t\t\treturn dir(elem, \"previousSibling\", until);\n\t\t},\n\t\tsiblings: function (elem) {\n\t\t\treturn siblings((elem.parentNode || {}).firstChild, elem);\n\t\t},\n\t\tchildren: function (elem) {\n\t\t\treturn siblings(elem.firstChild);\n\t\t},\n\t\tcontents: function (elem) {\n\t\t\tif (elem.contentDocument != null &&\n\n\t\t\t\t// Support: IE 11+\n\t\t\t\t// <object> elements with no `data` attribute has an object\n\t\t\t\t// `contentDocument` with a `null` prototype.\n\t\t\t\tgetProto(elem.contentDocument)) {\n\n\t\t\t\treturn elem.contentDocument;\n\t\t\t}\n\n\t\t\t// Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only\n\t\t\t// Treat the template element as a regular one in browsers that\n\t\t\t// don't support it.\n\t\t\tif (nodeName(elem, \"template\")) {\n\t\t\t\telem = elem.content || elem;\n\t\t\t}\n\n\t\t\treturn jQuery.merge([], elem.childNodes);\n\t\t}\n\t}, function (name, fn) {\n\t\tjQuery.fn[name] = function (until, selector) {\n\t\t\tvar matched = jQuery.map(this, fn, until);\n\n\t\t\tif (name.slice(-5) !== \"Until\") {\n\t\t\t\tselector = until;\n\t\t\t}\n\n\t\t\tif (selector && typeof selector === \"string\") {\n\t\t\t\tmatched = jQuery.filter(selector, matched);\n\t\t\t}\n\n\t\t\tif (this.length > 1) {\n\n\t\t\t\t// Remove duplicates\n\t\t\t\tif (!guaranteedUnique[name]) {\n\t\t\t\t\tjQuery.uniqueSort(matched);\n\t\t\t\t}\n\n\t\t\t\t// Reverse order for parents* and prev-derivatives\n\t\t\t\tif (rparentsprev.test(name)) {\n\t\t\t\t\tmatched.reverse();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn this.pushStack(matched);\n\t\t};\n\t});\n\tvar rnothtmlwhite = (/[^\\x20\\t\\r\\n\\f]+/g);\n\n\n\n\t// Convert String-formatted options into Object-formatted ones\n\tfunction createOptions(options) {\n\t\tvar object = {};\n\t\tjQuery.each(options.match(rnothtmlwhite) || [], function (_, flag) {\n\t\t\tobject[flag] = true;\n\t\t});\n\t\treturn object;\n\t}\n\n\t/*\n\t * Create a callback list using the following parameters:\n\t *\n\t *\toptions: an optional list of space-separated options that will change how\n\t *\t\t\tthe callback list behaves or a more traditional option object\n\t *\n\t * By default a callback list will act like an event callback list and can be\n\t * \"fired\" multiple times.\n\t *\n\t * Possible options:\n\t *\n\t *\tonce:\t\t\twill ensure the callback list can only be fired once (like a Deferred)\n\t *\n\t *\tmemory:\t\t\twill keep track of previous values and will call any callback added\n\t *\t\t\t\t\tafter the list has been fired right away with the latest \"memorized\"\n\t *\t\t\t\t\tvalues (like a Deferred)\n\t *\n\t *\tunique:\t\t\twill ensure a callback can only be added once (no duplicate in the list)\n\t *\n\t *\tstopOnFalse:\tinterrupt callings when a callback returns false\n\t *\n\t */\n\tjQuery.Callbacks = function (options) {\n\n\t\t// Convert options from String-formatted to Object-formatted if needed\n\t\t// (we check in cache first)\n\t\toptions = typeof options === \"string\" ?\n\t\t\tcreateOptions(options) :\n\t\t\tjQuery.extend({}, options);\n\n\t\tvar // Flag to know if list is currently firing\n\t\t\tfiring,\n\n\t\t\t// Last fire value for non-forgettable lists\n\t\t\tmemory,\n\n\t\t\t// Flag to know if list was already fired\n\t\t\tfired,\n\n\t\t\t// Flag to prevent firing\n\t\t\tlocked,\n\n\t\t\t// Actual callback list\n\t\t\tlist = [],\n\n\t\t\t// Queue of execution data for repeatable lists\n\t\t\tqueue = [],\n\n\t\t\t// Index of currently firing callback (modified by add/remove as needed)\n\t\t\tfiringIndex = -1,\n\n\t\t\t// Fire callbacks\n\t\t\tfire = function () {\n\n\t\t\t\t// Enforce single-firing\n\t\t\t\tlocked = locked || options.once;\n\n\t\t\t\t// Execute callbacks for all pending executions,\n\t\t\t\t// respecting firingIndex overrides and runtime changes\n\t\t\t\tfired = firing = true;\n\t\t\t\tfor (; queue.length; firingIndex = -1) {\n\t\t\t\t\tmemory = queue.shift();\n\t\t\t\t\twhile (++firingIndex < list.length) {\n\n\t\t\t\t\t\t// Run callback and check for early termination\n\t\t\t\t\t\tif (list[firingIndex].apply(memory[0], memory[1]) === false &&\n\t\t\t\t\t\t\toptions.stopOnFalse) {\n\n\t\t\t\t\t\t\t// Jump to end and forget the data so .add doesn't re-fire\n\t\t\t\t\t\t\tfiringIndex = list.length;\n\t\t\t\t\t\t\tmemory = false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Forget the data if we're done with it\n\t\t\t\tif (!options.memory) {\n\t\t\t\t\tmemory = false;\n\t\t\t\t}\n\n\t\t\t\tfiring = false;\n\n\t\t\t\t// Clean up if we're done firing for good\n\t\t\t\tif (locked) {\n\n\t\t\t\t\t// Keep an empty list if we have data for future add calls\n\t\t\t\t\tif (memory) {\n\t\t\t\t\t\tlist = [];\n\n\t\t\t\t\t\t// Otherwise, this object is spent\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlist = \"\";\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// Actual Callbacks object\n\t\t\tself = {\n\n\t\t\t\t// Add a callback or a collection of callbacks to the list\n\t\t\t\tadd: function () {\n\t\t\t\t\tif (list) {\n\n\t\t\t\t\t\t// If we have memory from a past run, we should fire after adding\n\t\t\t\t\t\tif (memory && !firing) {\n\t\t\t\t\t\t\tfiringIndex = list.length - 1;\n\t\t\t\t\t\t\tqueue.push(memory);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t(function add(args) {\n\t\t\t\t\t\t\tjQuery.each(args, function (_, arg) {\n\t\t\t\t\t\t\t\tif (isFunction(arg)) {\n\t\t\t\t\t\t\t\t\tif (!options.unique || !self.has(arg)) {\n\t\t\t\t\t\t\t\t\t\tlist.push(arg);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} else if (arg && arg.length && toType(arg) !== \"string\") {\n\n\t\t\t\t\t\t\t\t\t// Inspect recursively\n\t\t\t\t\t\t\t\t\tadd(arg);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t})(arguments);\n\n\t\t\t\t\t\tif (memory && !firing) {\n\t\t\t\t\t\t\tfire();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Remove a callback from the list\n\t\t\t\tremove: function () {\n\t\t\t\t\tjQuery.each(arguments, function (_, arg) {\n\t\t\t\t\t\tvar index;\n\t\t\t\t\t\twhile ((index = jQuery.inArray(arg, list, index)) > -1) {\n\t\t\t\t\t\t\tlist.splice(index, 1);\n\n\t\t\t\t\t\t\t// Handle firing indexes\n\t\t\t\t\t\t\tif (index <= firingIndex) {\n\t\t\t\t\t\t\t\tfiringIndex--;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Check if a given callback is in the list.\n\t\t\t\t// If no argument is given, return whether or not list has callbacks attached.\n\t\t\t\thas: function (fn) {\n\t\t\t\t\treturn fn ?\n\t\t\t\t\t\tjQuery.inArray(fn, list) > -1 :\n\t\t\t\t\t\tlist.length > 0;\n\t\t\t\t},\n\n\t\t\t\t// Remove all callbacks from the list\n\t\t\t\tempty: function () {\n\t\t\t\t\tif (list) {\n\t\t\t\t\t\tlist = [];\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Disable .fire and .add\n\t\t\t\t// Abort any current/pending executions\n\t\t\t\t// Clear all callbacks and values\n\t\t\t\tdisable: function () {\n\t\t\t\t\tlocked = queue = [];\n\t\t\t\t\tlist = memory = \"\";\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\t\t\t\tdisabled: function () {\n\t\t\t\t\treturn !list;\n\t\t\t\t},\n\n\t\t\t\t// Disable .fire\n\t\t\t\t// Also disable .add unless we have memory (since it would have no effect)\n\t\t\t\t// Abort any pending executions\n\t\t\t\tlock: function () {\n\t\t\t\t\tlocked = queue = [];\n\t\t\t\t\tif (!memory && !firing) {\n\t\t\t\t\t\tlist = memory = \"\";\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\t\t\t\tlocked: function () {\n\t\t\t\t\treturn !!locked;\n\t\t\t\t},\n\n\t\t\t\t// Call all callbacks with the given context and arguments\n\t\t\t\tfireWith: function (context, args) {\n\t\t\t\t\tif (!locked) {\n\t\t\t\t\t\targs = args || [];\n\t\t\t\t\t\targs = [context, args.slice ? args.slice() : args];\n\t\t\t\t\t\tqueue.push(args);\n\t\t\t\t\t\tif (!firing) {\n\t\t\t\t\t\t\tfire();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Call all the callbacks with the given arguments\n\t\t\t\tfire: function () {\n\t\t\t\t\tself.fireWith(this, arguments);\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// To know if the callbacks have already been called at least once\n\t\t\t\tfired: function () {\n\t\t\t\t\treturn !!fired;\n\t\t\t\t}\n\t\t\t};\n\n\t\treturn self;\n\t};\n\n\n\tfunction Identity(v) {\n\t\treturn v;\n\t}\n\tfunction Thrower(ex) {\n\t\tthrow ex;\n\t}\n\n\tfunction adoptValue(value, resolve, reject, noValue) {\n\t\tvar method;\n\n\t\ttry {\n\n\t\t\t// Check for promise aspect first to privilege synchronous behavior\n\t\t\tif (value && isFunction((method = value.promise))) {\n\t\t\t\tmethod.call(value).done(resolve).fail(reject);\n\n\t\t\t\t// Other thenables\n\t\t\t} else if (value && isFunction((method = value.then))) {\n\t\t\t\tmethod.call(value, resolve, reject);\n\n\t\t\t\t// Other non-thenables\n\t\t\t} else {\n\n\t\t\t\t// Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer:\n\t\t\t\t// * false: [ value ].slice( 0 ) => resolve( value )\n\t\t\t\t// * true: [ value ].slice( 1 ) => resolve()\n\t\t\t\tresolve.apply(undefined, [value].slice(noValue));\n\t\t\t}\n\n\t\t\t// For Promises/A+, convert exceptions into rejections\n\t\t\t// Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in\n\t\t\t// Deferred#then to conditionally suppress rejection.\n\t\t} catch (value) {\n\n\t\t\t// Support: Android 4.0 only\n\t\t\t// Strict mode functions invoked without .call/.apply get global-object context\n\t\t\treject.apply(undefined, [value]);\n\t\t}\n\t}\n\n\tjQuery.extend({\n\n\t\tDeferred: function (func) {\n\t\t\tvar tuples = [\n\n\t\t\t\t// action, add listener, callbacks,\n\t\t\t\t// ... .then handlers, argument index, [final state]\n\t\t\t\t[\"notify\", \"progress\", jQuery.Callbacks(\"memory\"),\n\t\t\t\t\tjQuery.Callbacks(\"memory\"), 2],\n\t\t\t\t[\"resolve\", \"done\", jQuery.Callbacks(\"once memory\"),\n\t\t\t\t\tjQuery.Callbacks(\"once memory\"), 0, \"resolved\"],\n\t\t\t\t[\"reject\", \"fail\", jQuery.Callbacks(\"once memory\"),\n\t\t\t\t\tjQuery.Callbacks(\"once memory\"), 1, \"rejected\"]\n\t\t\t],\n\t\t\t\tstate = \"pending\",\n\t\t\t\tpromise = {\n\t\t\t\t\tstate: function () {\n\t\t\t\t\t\treturn state;\n\t\t\t\t\t},\n\t\t\t\t\talways: function () {\n\t\t\t\t\t\tdeferred.done(arguments).fail(arguments);\n\t\t\t\t\t\treturn this;\n\t\t\t\t\t},\n\t\t\t\t\t\"catch\": function (fn) {\n\t\t\t\t\t\treturn promise.then(null, fn);\n\t\t\t\t\t},\n\n\t\t\t\t\t// Keep pipe for back-compat\n\t\t\t\t\tpipe: function ( /* fnDone, fnFail, fnProgress */) {\n\t\t\t\t\t\tvar fns = arguments;\n\n\t\t\t\t\t\treturn jQuery.Deferred(function (newDefer) {\n\t\t\t\t\t\t\tjQuery.each(tuples, function (_i, tuple) {\n\n\t\t\t\t\t\t\t\t// Map tuples (progress, done, fail) to arguments (done, fail, progress)\n\t\t\t\t\t\t\t\tvar fn = isFunction(fns[tuple[4]]) && fns[tuple[4]];\n\n\t\t\t\t\t\t\t\t// deferred.progress(function() { bind to newDefer or newDefer.notify })\n\t\t\t\t\t\t\t\t// deferred.done(function() { bind to newDefer or newDefer.resolve })\n\t\t\t\t\t\t\t\t// deferred.fail(function() { bind to newDefer or newDefer.reject })\n\t\t\t\t\t\t\t\tdeferred[tuple[1]](function () {\n\t\t\t\t\t\t\t\t\tvar returned = fn && fn.apply(this, arguments);\n\t\t\t\t\t\t\t\t\tif (returned && isFunction(returned.promise)) {\n\t\t\t\t\t\t\t\t\t\treturned.promise()\n\t\t\t\t\t\t\t\t\t\t\t.progress(newDefer.notify)\n\t\t\t\t\t\t\t\t\t\t\t.done(newDefer.resolve)\n\t\t\t\t\t\t\t\t\t\t\t.fail(newDefer.reject);\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tnewDefer[tuple[0] + \"With\"](\n\t\t\t\t\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\t\t\t\t\tfn ? [returned] : arguments\n\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tfns = null;\n\t\t\t\t\t\t}).promise();\n\t\t\t\t\t},\n\t\t\t\t\tthen: function (onFulfilled, onRejected, onProgress) {\n\t\t\t\t\t\tvar maxDepth = 0;\n\t\t\t\t\t\tfunction resolve(depth, deferred, handler, special) {\n\t\t\t\t\t\t\treturn function () {\n\t\t\t\t\t\t\t\tvar that = this,\n\t\t\t\t\t\t\t\t\targs = arguments,\n\t\t\t\t\t\t\t\t\tmightThrow = function () {\n\t\t\t\t\t\t\t\t\t\tvar returned, then;\n\n\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.3\n\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-59\n\t\t\t\t\t\t\t\t\t\t// Ignore double-resolution attempts\n\t\t\t\t\t\t\t\t\t\tif (depth < maxDepth) {\n\t\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\treturned = handler.apply(that, args);\n\n\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.1\n\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-48\n\t\t\t\t\t\t\t\t\t\tif (returned === deferred.promise()) {\n\t\t\t\t\t\t\t\t\t\t\tthrow new TypeError(\"Thenable self-resolution\");\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ sections 2.3.3.1, 3.5\n\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-54\n\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-75\n\t\t\t\t\t\t\t\t\t\t// Retrieve `then` only once\n\t\t\t\t\t\t\t\t\t\tthen = returned &&\n\n\t\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.4\n\t\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-64\n\t\t\t\t\t\t\t\t\t\t\t// Only check objects and functions for thenability\n\t\t\t\t\t\t\t\t\t\t\t(typeof returned === \"object\" ||\n\t\t\t\t\t\t\t\t\t\t\t\ttypeof returned === \"function\") &&\n\t\t\t\t\t\t\t\t\t\t\treturned.then;\n\n\t\t\t\t\t\t\t\t\t\t// Handle a returned thenable\n\t\t\t\t\t\t\t\t\t\tif (isFunction(then)) {\n\n\t\t\t\t\t\t\t\t\t\t\t// Special processors (notify) just wait for resolution\n\t\t\t\t\t\t\t\t\t\t\tif (special) {\n\t\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\t\tresolve(maxDepth, deferred, Identity, special),\n\t\t\t\t\t\t\t\t\t\t\t\t\tresolve(maxDepth, deferred, Thrower, special)\n\t\t\t\t\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t\t\t\t\t// Normal processors (resolve) also hook into progress\n\t\t\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t\t\t// ...and disregard older resolution values\n\t\t\t\t\t\t\t\t\t\t\t\tmaxDepth++;\n\n\t\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\t\tresolve(maxDepth, deferred, Identity, special),\n\t\t\t\t\t\t\t\t\t\t\t\t\tresolve(maxDepth, deferred, Thrower, special),\n\t\t\t\t\t\t\t\t\t\t\t\t\tresolve(maxDepth, deferred, Identity,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tdeferred.notifyWith)\n\t\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t// Handle all other returned values\n\t\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\t\tif (handler !== Identity) {\n\t\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\t\targs = [returned];\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t// Process the value(s)\n\t\t\t\t\t\t\t\t\t\t\t// Default process is resolve\n\t\t\t\t\t\t\t\t\t\t\t(special || deferred.resolveWith)(that, args);\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\n\t\t\t\t\t\t\t\t\t// Only normal processors (resolve) catch and reject exceptions\n\t\t\t\t\t\t\t\t\tprocess = special ?\n\t\t\t\t\t\t\t\t\t\tmightThrow :\n\t\t\t\t\t\t\t\t\t\tfunction () {\n\t\t\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\t\t\tmightThrow();\n\t\t\t\t\t\t\t\t\t\t\t} catch (e) {\n\n\t\t\t\t\t\t\t\t\t\t\t\tif (jQuery.Deferred.exceptionHook) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tjQuery.Deferred.exceptionHook(e,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tprocess.error);\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.4.1\n\t\t\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-61\n\t\t\t\t\t\t\t\t\t\t\t\t// Ignore post-resolution exceptions\n\t\t\t\t\t\t\t\t\t\t\t\tif (depth + 1 >= maxDepth) {\n\n\t\t\t\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\t\t\t\tif (handler !== Thrower) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\targs = [e];\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\t\tdeferred.rejectWith(that, args);\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.1\n\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-57\n\t\t\t\t\t\t\t\t// Re-resolve promises immediately to dodge false rejection from\n\t\t\t\t\t\t\t\t// subsequent errors\n\t\t\t\t\t\t\t\tif (depth) {\n\t\t\t\t\t\t\t\t\tprocess();\n\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t// Call an optional hook to record the error, in case of exception\n\t\t\t\t\t\t\t\t\t// since it's otherwise lost when execution goes async\n\t\t\t\t\t\t\t\t\tif (jQuery.Deferred.getErrorHook) {\n\t\t\t\t\t\t\t\t\t\tprocess.error = jQuery.Deferred.getErrorHook();\n\n\t\t\t\t\t\t\t\t\t\t// The deprecated alias of the above. While the name suggests\n\t\t\t\t\t\t\t\t\t\t// returning the stack, not an error instance, jQuery just passes\n\t\t\t\t\t\t\t\t\t\t// it directly to `console.warn` so both will work; an instance\n\t\t\t\t\t\t\t\t\t\t// just better cooperates with source maps.\n\t\t\t\t\t\t\t\t\t} else if (jQuery.Deferred.getStackHook) {\n\t\t\t\t\t\t\t\t\t\tprocess.error = jQuery.Deferred.getStackHook();\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\twindow.setTimeout(process);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn jQuery.Deferred(function (newDefer) {\n\n\t\t\t\t\t\t\t// progress_handlers.add( ... )\n\t\t\t\t\t\t\ttuples[0][3].add(\n\t\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\t\tisFunction(onProgress) ?\n\t\t\t\t\t\t\t\t\t\tonProgress :\n\t\t\t\t\t\t\t\t\t\tIdentity,\n\t\t\t\t\t\t\t\t\tnewDefer.notifyWith\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t// fulfilled_handlers.add( ... )\n\t\t\t\t\t\t\ttuples[1][3].add(\n\t\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\t\tisFunction(onFulfilled) ?\n\t\t\t\t\t\t\t\t\t\tonFulfilled :\n\t\t\t\t\t\t\t\t\t\tIdentity\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t// rejected_handlers.add( ... )\n\t\t\t\t\t\t\ttuples[2][3].add(\n\t\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\t\tisFunction(onRejected) ?\n\t\t\t\t\t\t\t\t\t\tonRejected :\n\t\t\t\t\t\t\t\t\t\tThrower\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}).promise();\n\t\t\t\t\t},\n\n\t\t\t\t\t// Get a promise for this deferred\n\t\t\t\t\t// If obj is provided, the promise aspect is added to the object\n\t\t\t\t\tpromise: function (obj) {\n\t\t\t\t\t\treturn obj != null ? jQuery.extend(obj, promise) : promise;\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tdeferred = {};\n\n\t\t\t// Add list-specific methods\n\t\t\tjQuery.each(tuples, function (i, tuple) {\n\t\t\t\tvar list = tuple[2],\n\t\t\t\t\tstateString = tuple[5];\n\n\t\t\t\t// promise.progress = list.add\n\t\t\t\t// promise.done = list.add\n\t\t\t\t// promise.fail = list.add\n\t\t\t\tpromise[tuple[1]] = list.add;\n\n\t\t\t\t// Handle state\n\t\t\t\tif (stateString) {\n\t\t\t\t\tlist.add(\n\t\t\t\t\t\tfunction () {\n\n\t\t\t\t\t\t\t// state = \"resolved\" (i.e., fulfilled)\n\t\t\t\t\t\t\t// state = \"rejected\"\n\t\t\t\t\t\t\tstate = stateString;\n\t\t\t\t\t\t},\n\n\t\t\t\t\t\t// rejected_callbacks.disable\n\t\t\t\t\t\t// fulfilled_callbacks.disable\n\t\t\t\t\t\ttuples[3 - i][2].disable,\n\n\t\t\t\t\t\t// rejected_handlers.disable\n\t\t\t\t\t\t// fulfilled_handlers.disable\n\t\t\t\t\t\ttuples[3 - i][3].disable,\n\n\t\t\t\t\t\t// progress_callbacks.lock\n\t\t\t\t\t\ttuples[0][2].lock,\n\n\t\t\t\t\t\t// progress_handlers.lock\n\t\t\t\t\t\ttuples[0][3].lock\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\t// progress_handlers.fire\n\t\t\t\t// fulfilled_handlers.fire\n\t\t\t\t// rejected_handlers.fire\n\t\t\t\tlist.add(tuple[3].fire);\n\n\t\t\t\t// deferred.notify = function() { deferred.notifyWith(...) }\n\t\t\t\t// deferred.resolve = function() { deferred.resolveWith(...) }\n\t\t\t\t// deferred.reject = function() { deferred.rejectWith(...) }\n\t\t\t\tdeferred[tuple[0]] = function () {\n\t\t\t\t\tdeferred[tuple[0] + \"With\"](this === deferred ? undefined : this, arguments);\n\t\t\t\t\treturn this;\n\t\t\t\t};\n\n\t\t\t\t// deferred.notifyWith = list.fireWith\n\t\t\t\t// deferred.resolveWith = list.fireWith\n\t\t\t\t// deferred.rejectWith = list.fireWith\n\t\t\t\tdeferred[tuple[0] + \"With\"] = list.fireWith;\n\t\t\t});\n\n\t\t\t// Make the deferred a promise\n\t\t\tpromise.promise(deferred);\n\n\t\t\t// Call given func if any\n\t\t\tif (func) {\n\t\t\t\tfunc.call(deferred, deferred);\n\t\t\t}\n\n\t\t\t// All done!\n\t\t\treturn deferred;\n\t\t},\n\n\t\t// Deferred helper\n\t\twhen: function (singleValue) {\n\t\t\tvar\n\n\t\t\t\t// count of uncompleted subordinates\n\t\t\t\tremaining = arguments.length,\n\n\t\t\t\t// count of unprocessed arguments\n\t\t\t\ti = remaining,\n\n\t\t\t\t// subordinate fulfillment data\n\t\t\t\tresolveContexts = Array(i),\n\t\t\t\tresolveValues = slice.call(arguments),\n\n\t\t\t\t// the primary Deferred\n\t\t\t\tprimary = jQuery.Deferred(),\n\n\t\t\t\t// subordinate callback factory\n\t\t\t\tupdateFunc = function (i) {\n\t\t\t\t\treturn function (value) {\n\t\t\t\t\t\tresolveContexts[i] = this;\n\t\t\t\t\t\tresolveValues[i] = arguments.length > 1 ? slice.call(arguments) : value;\n\t\t\t\t\t\tif (!(--remaining)) {\n\t\t\t\t\t\t\tprimary.resolveWith(resolveContexts, resolveValues);\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t};\n\n\t\t\t// Single- and empty arguments are adopted like Promise.resolve\n\t\t\tif (remaining <= 1) {\n\t\t\t\tadoptValue(singleValue, primary.done(updateFunc(i)).resolve, primary.reject,\n\t\t\t\t\t!remaining);\n\n\t\t\t\t// Use .then() to unwrap secondary thenables (cf. gh-3000)\n\t\t\t\tif (primary.state() === \"pending\" ||\n\t\t\t\t\tisFunction(resolveValues[i] && resolveValues[i].then)) {\n\n\t\t\t\t\treturn primary.then();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Multiple arguments are aggregated like Promise.all array elements\n\t\t\twhile (i--) {\n\t\t\t\tadoptValue(resolveValues[i], updateFunc(i), primary.reject);\n\t\t\t}\n\n\t\t\treturn primary.promise();\n\t\t}\n\t});\n\n\n\t// These usually indicate a programmer mistake during development,\n\t// warn about them ASAP rather than swallowing them by default.\n\tvar rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;\n\n\t// If `jQuery.Deferred.getErrorHook` is defined, `asyncError` is an error\n\t// captured before the async barrier to get the original error cause\n\t// which may otherwise be hidden.\n\tjQuery.Deferred.exceptionHook = function (error, asyncError) {\n\n\t\t// Support: IE 8 - 9 only\n\t\t// Console exists when dev tools are open, which can happen at any time\n\t\tif (window.console && window.console.warn && error && rerrorNames.test(error.name)) {\n\t\t\twindow.console.warn(\"jQuery.Deferred exception: \" + error.message,\n\t\t\t\terror.stack, asyncError);\n\t\t}\n\t};\n\n\n\n\n\tjQuery.readyException = function (error) {\n\t\twindow.setTimeout(function () {\n\t\t\tthrow error;\n\t\t});\n\t};\n\n\n\n\n\t// The deferred used on DOM ready\n\tvar readyList = jQuery.Deferred();\n\n\tjQuery.fn.ready = function (fn) {\n\n\t\treadyList\n\t\t\t.then(fn)\n\n\t\t\t// Wrap jQuery.readyException in a function so that the lookup\n\t\t\t// happens at the time of error handling instead of callback\n\t\t\t// registration.\n\t\t\t.catch(function (error) {\n\t\t\t\tjQuery.readyException(error);\n\t\t\t});\n\n\t\treturn this;\n\t};\n\n\tjQuery.extend({\n\n\t\t// Is the DOM ready to be used? Set to true once it occurs.\n\t\tisReady: false,\n\n\t\t// A counter to track how many items to wait for before\n\t\t// the ready event fires. See trac-6781\n\t\treadyWait: 1,\n\n\t\t// Handle when the DOM is ready\n\t\tready: function (wait) {\n\n\t\t\t// Abort if there are pending holds or we're already ready\n\t\t\tif (wait === true ? --jQuery.readyWait : jQuery.isReady) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Remember that the DOM is ready\n\t\t\tjQuery.isReady = true;\n\n\t\t\t// If a normal DOM Ready event fired, decrement, and wait if need be\n\t\t\tif (wait !== true && --jQuery.readyWait > 0) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If there are functions bound, to execute\n\t\t\treadyList.resolveWith(document, [jQuery]);\n\t\t}\n\t});\n\n\tjQuery.ready.then = readyList.then;\n\n\t// The ready event handler and self cleanup method\n\tfunction completed() {\n\t\tdocument.removeEventListener(\"DOMContentLoaded\", completed);\n\t\twindow.removeEventListener(\"load\", completed);\n\t\tjQuery.ready();\n\t}\n\n\t// Catch cases where $(document).ready() is called\n\t// after the browser event has already occurred.\n\t// Support: IE <=9 - 10 only\n\t// Older IE sometimes signals \"interactive\" too soon\n\tif (document.readyState === \"complete\" ||\n\t\t(document.readyState !== \"loading\" && !document.documentElement.doScroll)) {\n\n\t\t// Handle it asynchronously to allow scripts the opportunity to delay ready\n\t\twindow.setTimeout(jQuery.ready);\n\n\t} else {\n\n\t\t// Use the handy event callback\n\t\tdocument.addEventListener(\"DOMContentLoaded\", completed);\n\n\t\t// A fallback to window.onload, that will always work\n\t\twindow.addEventListener(\"load\", completed);\n\t}\n\n\n\n\n\t// Multifunctional method to get and set values of a collection\n\t// The value/s can optionally be executed if it's a function\n\tvar access = function (elems, fn, key, value, chainable, emptyGet, raw) {\n\t\tvar i = 0,\n\t\t\tlen = elems.length,\n\t\t\tbulk = key == null;\n\n\t\t// Sets many values\n\t\tif (toType(key) === \"object\") {\n\t\t\tchainable = true;\n\t\t\tfor (i in key) {\n\t\t\t\taccess(elems, fn, i, key[i], true, emptyGet, raw);\n\t\t\t}\n\n\t\t\t// Sets one value\n\t\t} else if (value !== undefined) {\n\t\t\tchainable = true;\n\n\t\t\tif (!isFunction(value)) {\n\t\t\t\traw = true;\n\t\t\t}\n\n\t\t\tif (bulk) {\n\n\t\t\t\t// Bulk operations run against the entire set\n\t\t\t\tif (raw) {\n\t\t\t\t\tfn.call(elems, value);\n\t\t\t\t\tfn = null;\n\n\t\t\t\t\t// ...except when executing function values\n\t\t\t\t} else {\n\t\t\t\t\tbulk = fn;\n\t\t\t\t\tfn = function (elem, _key, value) {\n\t\t\t\t\t\treturn bulk.call(jQuery(elem), value);\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (fn) {\n\t\t\t\tfor (; i < len; i++) {\n\t\t\t\t\tfn(\n\t\t\t\t\t\telems[i], key, raw ?\n\t\t\t\t\t\tvalue :\n\t\t\t\t\t\tvalue.call(elems[i], i, fn(elems[i], key))\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (chainable) {\n\t\t\treturn elems;\n\t\t}\n\n\t\t// Gets\n\t\tif (bulk) {\n\t\t\treturn fn.call(elems);\n\t\t}\n\n\t\treturn len ? fn(elems[0], key) : emptyGet;\n\t};\n\n\n\t// Matches dashed string for camelizing\n\tvar rmsPrefix = /^-ms-/,\n\t\trdashAlpha = /-([a-z])/g;\n\n\t// Used by camelCase as callback to replace()\n\tfunction fcamelCase(_all, letter) {\n\t\treturn letter.toUpperCase();\n\t}\n\n\t// Convert dashed to camelCase; used by the css and data modules\n\t// Support: IE <=9 - 11, Edge 12 - 15\n\t// Microsoft forgot to hump their vendor prefix (trac-9572)\n\tfunction camelCase(string) {\n\t\treturn string.replace(rmsPrefix, \"ms-\").replace(rdashAlpha, fcamelCase);\n\t}\n\tvar acceptData = function (owner) {\n\n\t\t// Accepts only:\n\t\t//  - Node\n\t\t//    - Node.ELEMENT_NODE\n\t\t//    - Node.DOCUMENT_NODE\n\t\t//  - Object\n\t\t//    - Any\n\t\treturn owner.nodeType === 1 || owner.nodeType === 9 || !(+owner.nodeType);\n\t};\n\n\n\n\n\tfunction Data() {\n\t\tthis.expando = jQuery.expando + Data.uid++;\n\t}\n\n\tData.uid = 1;\n\n\tData.prototype = {\n\n\t\tcache: function (owner) {\n\n\t\t\t// Check if the owner object already has a cache\n\t\t\tvar value = owner[this.expando];\n\n\t\t\t// If not, create one\n\t\t\tif (!value) {\n\t\t\t\tvalue = {};\n\n\t\t\t\t// We can accept data for non-element nodes in modern browsers,\n\t\t\t\t// but we should not, see trac-8335.\n\t\t\t\t// Always return an empty object.\n\t\t\t\tif (acceptData(owner)) {\n\n\t\t\t\t\t// If it is a node unlikely to be stringify-ed or looped over\n\t\t\t\t\t// use plain assignment\n\t\t\t\t\tif (owner.nodeType) {\n\t\t\t\t\t\towner[this.expando] = value;\n\n\t\t\t\t\t\t// Otherwise secure it in a non-enumerable property\n\t\t\t\t\t\t// configurable must be true to allow the property to be\n\t\t\t\t\t\t// deleted when data is removed\n\t\t\t\t\t} else {\n\t\t\t\t\t\tObject.defineProperty(owner, this.expando, {\n\t\t\t\t\t\t\tvalue: value,\n\t\t\t\t\t\t\tconfigurable: true\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn value;\n\t\t},\n\t\tset: function (owner, data, value) {\n\t\t\tvar prop,\n\t\t\t\tcache = this.cache(owner);\n\n\t\t\t// Handle: [ owner, key, value ] args\n\t\t\t// Always use camelCase key (gh-2257)\n\t\t\tif (typeof data === \"string\") {\n\t\t\t\tcache[camelCase(data)] = value;\n\n\t\t\t\t// Handle: [ owner, { properties } ] args\n\t\t\t} else {\n\n\t\t\t\t// Copy the properties one-by-one to the cache object\n\t\t\t\tfor (prop in data) {\n\t\t\t\t\tcache[camelCase(prop)] = data[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn cache;\n\t\t},\n\t\tget: function (owner, key) {\n\t\t\treturn key === undefined ?\n\t\t\t\tthis.cache(owner) :\n\n\t\t\t\t// Always use camelCase key (gh-2257)\n\t\t\t\towner[this.expando] && owner[this.expando][camelCase(key)];\n\t\t},\n\t\taccess: function (owner, key, value) {\n\n\t\t\t// In cases where either:\n\t\t\t//\n\t\t\t//   1. No key was specified\n\t\t\t//   2. A string key was specified, but no value provided\n\t\t\t//\n\t\t\t// Take the \"read\" path and allow the get method to determine\n\t\t\t// which value to return, respectively either:\n\t\t\t//\n\t\t\t//   1. The entire cache object\n\t\t\t//   2. The data stored at the key\n\t\t\t//\n\t\t\tif (key === undefined ||\n\t\t\t\t((key && typeof key === \"string\") && value === undefined)) {\n\n\t\t\t\treturn this.get(owner, key);\n\t\t\t}\n\n\t\t\t// When the key is not a string, or both a key and value\n\t\t\t// are specified, set or extend (existing objects) with either:\n\t\t\t//\n\t\t\t//   1. An object of properties\n\t\t\t//   2. A key and value\n\t\t\t//\n\t\t\tthis.set(owner, key, value);\n\n\t\t\t// Since the \"set\" path can have two possible entry points\n\t\t\t// return the expected data based on which path was taken[*]\n\t\t\treturn value !== undefined ? value : key;\n\t\t},\n\t\tremove: function (owner, key) {\n\t\t\tvar i,\n\t\t\t\tcache = owner[this.expando];\n\n\t\t\tif (cache === undefined) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (key !== undefined) {\n\n\t\t\t\t// Support array or space separated string of keys\n\t\t\t\tif (Array.isArray(key)) {\n\n\t\t\t\t\t// If key is an array of keys...\n\t\t\t\t\t// We always set camelCase keys, so remove that.\n\t\t\t\t\tkey = key.map(camelCase);\n\t\t\t\t} else {\n\t\t\t\t\tkey = camelCase(key);\n\n\t\t\t\t\t// If a key with the spaces exists, use it.\n\t\t\t\t\t// Otherwise, create an array by matching non-whitespace\n\t\t\t\t\tkey = key in cache ?\n\t\t\t\t\t\t[key] :\n\t\t\t\t\t\t(key.match(rnothtmlwhite) || []);\n\t\t\t\t}\n\n\t\t\t\ti = key.length;\n\n\t\t\t\twhile (i--) {\n\t\t\t\t\tdelete cache[key[i]];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove the expando if there's no more data\n\t\t\tif (key === undefined || jQuery.isEmptyObject(cache)) {\n\n\t\t\t\t// Support: Chrome <=35 - 45\n\t\t\t\t// Webkit & Blink performance suffers when deleting properties\n\t\t\t\t// from DOM nodes, so set to undefined instead\n\t\t\t\t// https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted)\n\t\t\t\tif (owner.nodeType) {\n\t\t\t\t\towner[this.expando] = undefined;\n\t\t\t\t} else {\n\t\t\t\t\tdelete owner[this.expando];\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\thasData: function (owner) {\n\t\t\tvar cache = owner[this.expando];\n\t\t\treturn cache !== undefined && !jQuery.isEmptyObject(cache);\n\t\t}\n\t};\n\tvar dataPriv = new Data();\n\n\tvar dataUser = new Data();\n\n\n\n\t//\tImplementation Summary\n\t//\n\t//\t1. Enforce API surface and semantic compatibility with 1.9.x branch\n\t//\t2. Improve the module's maintainability by reducing the storage\n\t//\t\tpaths to a single mechanism.\n\t//\t3. Use the same single mechanism to support \"private\" and \"user\" data.\n\t//\t4. _Never_ expose \"private\" data to user code (TODO: Drop _data, _removeData)\n\t//\t5. Avoid exposing implementation details on user objects (eg. expando properties)\n\t//\t6. Provide a clear path for implementation upgrade to WeakMap in 2014\n\n\tvar rbrace = /^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,\n\t\trmultiDash = /[A-Z]/g;\n\n\tfunction getData(data) {\n\t\tif (data === \"true\") {\n\t\t\treturn true;\n\t\t}\n\n\t\tif (data === \"false\") {\n\t\t\treturn false;\n\t\t}\n\n\t\tif (data === \"null\") {\n\t\t\treturn null;\n\t\t}\n\n\t\t// Only convert to a number if it doesn't change the string\n\t\tif (data === +data + \"\") {\n\t\t\treturn +data;\n\t\t}\n\n\t\tif (rbrace.test(data)) {\n\t\t\treturn JSON.parse(data);\n\t\t}\n\n\t\treturn data;\n\t}\n\n\tfunction dataAttr(elem, key, data) {\n\t\tvar name;\n\n\t\t// If nothing was found internally, try to fetch any\n\t\t// data from the HTML5 data-* attribute\n\t\tif (data === undefined && elem.nodeType === 1) {\n\t\t\tname = \"data-\" + key.replace(rmultiDash, \"-$&\").toLowerCase();\n\t\t\tdata = elem.getAttribute(name);\n\n\t\t\tif (typeof data === \"string\") {\n\t\t\t\ttry {\n\t\t\t\t\tdata = getData(data);\n\t\t\t\t} catch (e) { }\n\n\t\t\t\t// Make sure we set the data so it isn't changed later\n\t\t\t\tdataUser.set(elem, key, data);\n\t\t\t} else {\n\t\t\t\tdata = undefined;\n\t\t\t}\n\t\t}\n\t\treturn data;\n\t}\n\n\tjQuery.extend({\n\t\thasData: function (elem) {\n\t\t\treturn dataUser.hasData(elem) || dataPriv.hasData(elem);\n\t\t},\n\n\t\tdata: function (elem, name, data) {\n\t\t\treturn dataUser.access(elem, name, data);\n\t\t},\n\n\t\tremoveData: function (elem, name) {\n\t\t\tdataUser.remove(elem, name);\n\t\t},\n\n\t\t// TODO: Now that all calls to _data and _removeData have been replaced\n\t\t// with direct calls to dataPriv methods, these can be deprecated.\n\t\t_data: function (elem, name, data) {\n\t\t\treturn dataPriv.access(elem, name, data);\n\t\t},\n\n\t\t_removeData: function (elem, name) {\n\t\t\tdataPriv.remove(elem, name);\n\t\t}\n\t});\n\n\tjQuery.fn.extend({\n\t\tdata: function (key, value) {\n\t\t\tvar i, name, data,\n\t\t\t\telem = this[0],\n\t\t\t\tattrs = elem && elem.attributes;\n\n\t\t\t// Gets all values\n\t\t\tif (key === undefined) {\n\t\t\t\tif (this.length) {\n\t\t\t\t\tdata = dataUser.get(elem);\n\n\t\t\t\t\tif (elem.nodeType === 1 && !dataPriv.get(elem, \"hasDataAttrs\")) {\n\t\t\t\t\t\ti = attrs.length;\n\t\t\t\t\t\twhile (i--) {\n\n\t\t\t\t\t\t\t// Support: IE 11 only\n\t\t\t\t\t\t\t// The attrs elements can be null (trac-14894)\n\t\t\t\t\t\t\tif (attrs[i]) {\n\t\t\t\t\t\t\t\tname = attrs[i].name;\n\t\t\t\t\t\t\t\tif (name.indexOf(\"data-\") === 0) {\n\t\t\t\t\t\t\t\t\tname = camelCase(name.slice(5));\n\t\t\t\t\t\t\t\t\tdataAttr(elem, name, data[name]);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdataPriv.set(elem, \"hasDataAttrs\", true);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn data;\n\t\t\t}\n\n\t\t\t// Sets multiple values\n\t\t\tif (typeof key === \"object\") {\n\t\t\t\treturn this.each(function () {\n\t\t\t\t\tdataUser.set(this, key);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn access(this, function (value) {\n\t\t\t\tvar data;\n\n\t\t\t\t// The calling jQuery object (element matches) is not empty\n\t\t\t\t// (and therefore has an element appears at this[ 0 ]) and the\n\t\t\t\t// `value` parameter was not undefined. An empty jQuery object\n\t\t\t\t// will result in `undefined` for elem = this[ 0 ] which will\n\t\t\t\t// throw an exception if an attempt to read a data cache is made.\n\t\t\t\tif (elem && value === undefined) {\n\n\t\t\t\t\t// Attempt to get data from the cache\n\t\t\t\t\t// The key will always be camelCased in Data\n\t\t\t\t\tdata = dataUser.get(elem, key);\n\t\t\t\t\tif (data !== undefined) {\n\t\t\t\t\t\treturn data;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Attempt to \"discover\" the data in\n\t\t\t\t\t// HTML5 custom data-* attrs\n\t\t\t\t\tdata = dataAttr(elem, key);\n\t\t\t\t\tif (data !== undefined) {\n\t\t\t\t\t\treturn data;\n\t\t\t\t\t}\n\n\t\t\t\t\t// We tried really hard, but the data doesn't exist.\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Set the data...\n\t\t\t\tthis.each(function () {\n\n\t\t\t\t\t// We always store the camelCased key\n\t\t\t\t\tdataUser.set(this, key, value);\n\t\t\t\t});\n\t\t\t}, null, value, arguments.length > 1, null, true);\n\t\t},\n\n\t\tremoveData: function (key) {\n\t\t\treturn this.each(function () {\n\t\t\t\tdataUser.remove(this, key);\n\t\t\t});\n\t\t}\n\t});\n\n\n\tjQuery.extend({\n\t\tqueue: function (elem, type, data) {\n\t\t\tvar queue;\n\n\t\t\tif (elem) {\n\t\t\t\ttype = (type || \"fx\") + \"queue\";\n\t\t\t\tqueue = dataPriv.get(elem, type);\n\n\t\t\t\t// Speed up dequeue by getting out quickly if this is just a lookup\n\t\t\t\tif (data) {\n\t\t\t\t\tif (!queue || Array.isArray(data)) {\n\t\t\t\t\t\tqueue = dataPriv.access(elem, type, jQuery.makeArray(data));\n\t\t\t\t\t} else {\n\t\t\t\t\t\tqueue.push(data);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn queue || [];\n\t\t\t}\n\t\t},\n\n\t\tdequeue: function (elem, type) {\n\t\t\ttype = type || \"fx\";\n\n\t\t\tvar queue = jQuery.queue(elem, type),\n\t\t\t\tstartLength = queue.length,\n\t\t\t\tfn = queue.shift(),\n\t\t\t\thooks = jQuery._queueHooks(elem, type),\n\t\t\t\tnext = function () {\n\t\t\t\t\tjQuery.dequeue(elem, type);\n\t\t\t\t};\n\n\t\t\t// If the fx queue is dequeued, always remove the progress sentinel\n\t\t\tif (fn === \"inprogress\") {\n\t\t\t\tfn = queue.shift();\n\t\t\t\tstartLength--;\n\t\t\t}\n\n\t\t\tif (fn) {\n\n\t\t\t\t// Add a progress sentinel to prevent the fx queue from being\n\t\t\t\t// automatically dequeued\n\t\t\t\tif (type === \"fx\") {\n\t\t\t\t\tqueue.unshift(\"inprogress\");\n\t\t\t\t}\n\n\t\t\t\t// Clear up the last queue stop function\n\t\t\t\tdelete hooks.stop;\n\t\t\t\tfn.call(elem, next, hooks);\n\t\t\t}\n\n\t\t\tif (!startLength && hooks) {\n\t\t\t\thooks.empty.fire();\n\t\t\t}\n\t\t},\n\n\t\t// Not public - generate a queueHooks object, or return the current one\n\t\t_queueHooks: function (elem, type) {\n\t\t\tvar key = type + \"queueHooks\";\n\t\t\treturn dataPriv.get(elem, key) || dataPriv.access(elem, key, {\n\t\t\t\tempty: jQuery.Callbacks(\"once memory\").add(function () {\n\t\t\t\t\tdataPriv.remove(elem, [type + \"queue\", key]);\n\t\t\t\t})\n\t\t\t});\n\t\t}\n\t});\n\n\tjQuery.fn.extend({\n\t\tqueue: function (type, data) {\n\t\t\tvar setter = 2;\n\n\t\t\tif (typeof type !== \"string\") {\n\t\t\t\tdata = type;\n\t\t\t\ttype = \"fx\";\n\t\t\t\tsetter--;\n\t\t\t}\n\n\t\t\tif (arguments.length < setter) {\n\t\t\t\treturn jQuery.queue(this[0], type);\n\t\t\t}\n\n\t\t\treturn data === undefined ?\n\t\t\t\tthis :\n\t\t\t\tthis.each(function () {\n\t\t\t\t\tvar queue = jQuery.queue(this, type, data);\n\n\t\t\t\t\t// Ensure a hooks for this queue\n\t\t\t\t\tjQuery._queueHooks(this, type);\n\n\t\t\t\t\tif (type === \"fx\" && queue[0] !== \"inprogress\") {\n\t\t\t\t\t\tjQuery.dequeue(this, type);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t},\n\t\tdequeue: function (type) {\n\t\t\treturn this.each(function () {\n\t\t\t\tjQuery.dequeue(this, type);\n\t\t\t});\n\t\t},\n\t\tclearQueue: function (type) {\n\t\t\treturn this.queue(type || \"fx\", []);\n\t\t},\n\n\t\t// Get a promise resolved when queues of a certain type\n\t\t// are emptied (fx is the type by default)\n\t\tpromise: function (type, obj) {\n\t\t\tvar tmp,\n\t\t\t\tcount = 1,\n\t\t\t\tdefer = jQuery.Deferred(),\n\t\t\t\telements = this,\n\t\t\t\ti = this.length,\n\t\t\t\tresolve = function () {\n\t\t\t\t\tif (!(--count)) {\n\t\t\t\t\t\tdefer.resolveWith(elements, [elements]);\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\tif (typeof type !== \"string\") {\n\t\t\t\tobj = type;\n\t\t\t\ttype = undefined;\n\t\t\t}\n\t\t\ttype = type || \"fx\";\n\n\t\t\twhile (i--) {\n\t\t\t\ttmp = dataPriv.get(elements[i], type + \"queueHooks\");\n\t\t\t\tif (tmp && tmp.empty) {\n\t\t\t\t\tcount++;\n\t\t\t\t\ttmp.empty.add(resolve);\n\t\t\t\t}\n\t\t\t}\n\t\t\tresolve();\n\t\t\treturn defer.promise(obj);\n\t\t}\n\t});\n\tvar pnum = (/[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/).source;\n\n\tvar rcssNum = new RegExp(\"^(?:([+-])=|)(\" + pnum + \")([a-z%]*)$\", \"i\");\n\n\n\tvar cssExpand = [\"Top\", \"Right\", \"Bottom\", \"Left\"];\n\n\tvar documentElement = document.documentElement;\n\n\n\n\tvar isAttached = function (elem) {\n\t\treturn jQuery.contains(elem.ownerDocument, elem);\n\t},\n\t\tcomposed = { composed: true };\n\n\t// Support: IE 9 - 11+, Edge 12 - 18+, iOS 10.0 - 10.2 only\n\t// Check attachment across shadow DOM boundaries when possible (gh-3504)\n\t// Support: iOS 10.0-10.2 only\n\t// Early iOS 10 versions support `attachShadow` but not `getRootNode`,\n\t// leading to errors. We need to check for `getRootNode`.\n\tif (documentElement.getRootNode) {\n\t\tisAttached = function (elem) {\n\t\t\treturn jQuery.contains(elem.ownerDocument, elem) ||\n\t\t\t\telem.getRootNode(composed) === elem.ownerDocument;\n\t\t};\n\t}\n\tvar isHiddenWithinTree = function (elem, el) {\n\n\t\t// isHiddenWithinTree might be called from jQuery#filter function;\n\t\t// in that case, element will be second argument\n\t\telem = el || elem;\n\n\t\t// Inline style trumps all\n\t\treturn elem.style.display === \"none\" ||\n\t\t\telem.style.display === \"\" &&\n\n\t\t\t// Otherwise, check computed style\n\t\t\t// Support: Firefox <=43 - 45\n\t\t\t// Disconnected elements can have computed display: none, so first confirm that elem is\n\t\t\t// in the document.\n\t\t\tisAttached(elem) &&\n\n\t\t\tjQuery.css(elem, \"display\") === \"none\";\n\t};\n\n\n\n\tfunction adjustCSS(elem, prop, valueParts, tween) {\n\t\tvar adjusted, scale,\n\t\t\tmaxIterations = 20,\n\t\t\tcurrentValue = tween ?\n\t\t\t\tfunction () {\n\t\t\t\t\treturn tween.cur();\n\t\t\t\t} :\n\t\t\t\tfunction () {\n\t\t\t\t\treturn jQuery.css(elem, prop, \"\");\n\t\t\t\t},\n\t\t\tinitial = currentValue(),\n\t\t\tunit = valueParts && valueParts[3] || (jQuery.cssNumber[prop] ? \"\" : \"px\"),\n\n\t\t\t// Starting value computation is required for potential unit mismatches\n\t\t\tinitialInUnit = elem.nodeType &&\n\t\t\t\t(jQuery.cssNumber[prop] || unit !== \"px\" && +initial) &&\n\t\t\t\trcssNum.exec(jQuery.css(elem, prop));\n\n\t\tif (initialInUnit && initialInUnit[3] !== unit) {\n\n\t\t\t// Support: Firefox <=54\n\t\t\t// Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144)\n\t\t\tinitial = initial / 2;\n\n\t\t\t// Trust units reported by jQuery.css\n\t\t\tunit = unit || initialInUnit[3];\n\n\t\t\t// Iteratively approximate from a nonzero starting point\n\t\t\tinitialInUnit = +initial || 1;\n\n\t\t\twhile (maxIterations--) {\n\n\t\t\t\t// Evaluate and update our best guess (doubling guesses that zero out).\n\t\t\t\t// Finish if the scale equals or crosses 1 (making the old*new product non-positive).\n\t\t\t\tjQuery.style(elem, prop, initialInUnit + unit);\n\t\t\t\tif ((1 - scale) * (1 - (scale = currentValue() / initial || 0.5)) <= 0) {\n\t\t\t\t\tmaxIterations = 0;\n\t\t\t\t}\n\t\t\t\tinitialInUnit = initialInUnit / scale;\n\n\t\t\t}\n\n\t\t\tinitialInUnit = initialInUnit * 2;\n\t\t\tjQuery.style(elem, prop, initialInUnit + unit);\n\n\t\t\t// Make sure we update the tween properties later on\n\t\t\tvalueParts = valueParts || [];\n\t\t}\n\n\t\tif (valueParts) {\n\t\t\tinitialInUnit = +initialInUnit || +initial || 0;\n\n\t\t\t// Apply relative offset (+=/-=) if specified\n\t\t\tadjusted = valueParts[1] ?\n\t\t\t\tinitialInUnit + (valueParts[1] + 1) * valueParts[2] :\n\t\t\t\t+valueParts[2];\n\t\t\tif (tween) {\n\t\t\t\ttween.unit = unit;\n\t\t\t\ttween.start = initialInUnit;\n\t\t\t\ttween.end = adjusted;\n\t\t\t}\n\t\t}\n\t\treturn adjusted;\n\t}\n\n\n\tvar defaultDisplayMap = {};\n\n\tfunction getDefaultDisplay(elem) {\n\t\tvar temp,\n\t\t\tdoc = elem.ownerDocument,\n\t\t\tnodeName = elem.nodeName,\n\t\t\tdisplay = defaultDisplayMap[nodeName];\n\n\t\tif (display) {\n\t\t\treturn display;\n\t\t}\n\n\t\ttemp = doc.body.appendChild(doc.createElement(nodeName));\n\t\tdisplay = jQuery.css(temp, \"display\");\n\n\t\ttemp.parentNode.removeChild(temp);\n\n\t\tif (display === \"none\") {\n\t\t\tdisplay = \"block\";\n\t\t}\n\t\tdefaultDisplayMap[nodeName] = display;\n\n\t\treturn display;\n\t}\n\n\tfunction showHide(elements, show) {\n\t\tvar display, elem,\n\t\t\tvalues = [],\n\t\t\tindex = 0,\n\t\t\tlength = elements.length;\n\n\t\t// Determine new display value for elements that need to change\n\t\tfor (; index < length; index++) {\n\t\t\telem = elements[index];\n\t\t\tif (!elem.style) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tdisplay = elem.style.display;\n\t\t\tif (show) {\n\n\t\t\t\t// Since we force visibility upon cascade-hidden elements, an immediate (and slow)\n\t\t\t\t// check is required in this first loop unless we have a nonempty display value (either\n\t\t\t\t// inline or about-to-be-restored)\n\t\t\t\tif (display === \"none\") {\n\t\t\t\t\tvalues[index] = dataPriv.get(elem, \"display\") || null;\n\t\t\t\t\tif (!values[index]) {\n\t\t\t\t\t\telem.style.display = \"\";\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (elem.style.display === \"\" && isHiddenWithinTree(elem)) {\n\t\t\t\t\tvalues[index] = getDefaultDisplay(elem);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (display !== \"none\") {\n\t\t\t\t\tvalues[index] = \"none\";\n\n\t\t\t\t\t// Remember what we're overwriting\n\t\t\t\t\tdataPriv.set(elem, \"display\", display);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Set the display of the elements in a second loop to avoid constant reflow\n\t\tfor (index = 0; index < length; index++) {\n\t\t\tif (values[index] != null) {\n\t\t\t\telements[index].style.display = values[index];\n\t\t\t}\n\t\t}\n\n\t\treturn elements;\n\t}\n\n\tjQuery.fn.extend({\n\t\tshow: function () {\n\t\t\treturn showHide(this, true);\n\t\t},\n\t\thide: function () {\n\t\t\treturn showHide(this);\n\t\t},\n\t\ttoggle: function (state) {\n\t\t\tif (typeof state === \"boolean\") {\n\t\t\t\treturn state ? this.show() : this.hide();\n\t\t\t}\n\n\t\t\treturn this.each(function () {\n\t\t\t\tif (isHiddenWithinTree(this)) {\n\t\t\t\t\tjQuery(this).show();\n\t\t\t\t} else {\n\t\t\t\t\tjQuery(this).hide();\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t});\n\tvar rcheckableType = (/^(?:checkbox|radio)$/i);\n\n\tvar rtagName = (/<([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]*)/i);\n\n\tvar rscriptType = (/^$|^module$|\\/(?:java|ecma)script/i);\n\n\n\n\t(function () {\n\t\tvar fragment = document.createDocumentFragment(),\n\t\t\tdiv = fragment.appendChild(document.createElement(\"div\")),\n\t\t\tinput = document.createElement(\"input\");\n\n\t\t// Support: Android 4.0 - 4.3 only\n\t\t// Check state lost if the name is set (trac-11217)\n\t\t// Support: Windows Web Apps (WWA)\n\t\t// `name` and `type` must use .setAttribute for WWA (trac-14901)\n\t\tinput.setAttribute(\"type\", \"radio\");\n\t\tinput.setAttribute(\"checked\", \"checked\");\n\t\tinput.setAttribute(\"name\", \"t\");\n\n\t\tdiv.appendChild(input);\n\n\t\t// Support: Android <=4.1 only\n\t\t// Older WebKit doesn't clone checked state correctly in fragments\n\t\tsupport.checkClone = div.cloneNode(true).cloneNode(true).lastChild.checked;\n\n\t\t// Support: IE <=11 only\n\t\t// Make sure textarea (and checkbox) defaultValue is properly cloned\n\t\tdiv.innerHTML = \"<textarea>x</textarea>\";\n\t\tsupport.noCloneChecked = !!div.cloneNode(true).lastChild.defaultValue;\n\n\t\t// Support: IE <=9 only\n\t\t// IE <=9 replaces <option> tags with their contents when inserted outside of\n\t\t// the select element.\n\t\tdiv.innerHTML = \"<option></option>\";\n\t\tsupport.option = !!div.lastChild;\n\t})();\n\n\n\t// We have to close these tags to support XHTML (trac-13200)\n\tvar wrapMap = {\n\n\t\t// XHTML parsers do not magically insert elements in the\n\t\t// same way that tag soup parsers do. So we cannot shorten\n\t\t// this by omitting <tbody> or other required elements.\n\t\tthead: [1, \"<table>\", \"</table>\"],\n\t\tcol: [2, \"<table><colgroup>\", \"</colgroup></table>\"],\n\t\ttr: [2, \"<table><tbody>\", \"</tbody></table>\"],\n\t\ttd: [3, \"<table><tbody><tr>\", \"</tr></tbody></table>\"],\n\n\t\t_default: [0, \"\", \"\"]\n\t};\n\n\twrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;\n\twrapMap.th = wrapMap.td;\n\n\t// Support: IE <=9 only\n\tif (!support.option) {\n\t\twrapMap.optgroup = wrapMap.option = [1, \"<select multiple='multiple'>\", \"</select>\"];\n\t}\n\n\n\tfunction getAll(context, tag) {\n\n\t\t// Support: IE <=9 - 11 only\n\t\t// Use typeof to avoid zero-argument method invocation on host objects (trac-15151)\n\t\tvar ret;\n\n\t\tif (typeof context.getElementsByTagName !== \"undefined\") {\n\t\t\tret = context.getElementsByTagName(tag || \"*\");\n\n\t\t} else if (typeof context.querySelectorAll !== \"undefined\") {\n\t\t\tret = context.querySelectorAll(tag || \"*\");\n\n\t\t} else {\n\t\t\tret = [];\n\t\t}\n\n\t\tif (tag === undefined || tag && nodeName(context, tag)) {\n\t\t\treturn jQuery.merge([context], ret);\n\t\t}\n\n\t\treturn ret;\n\t}\n\n\n\t// Mark scripts as having already been evaluated\n\tfunction setGlobalEval(elems, refElements) {\n\t\tvar i = 0,\n\t\t\tl = elems.length;\n\n\t\tfor (; i < l; i++) {\n\t\t\tdataPriv.set(\n\t\t\t\telems[i],\n\t\t\t\t\"globalEval\",\n\t\t\t\t!refElements || dataPriv.get(refElements[i], \"globalEval\")\n\t\t\t);\n\t\t}\n\t}\n\n\n\tvar rhtml = /<|&#?\\w+;/;\n\n\tfunction buildFragment(elems, context, scripts, selection, ignored) {\n\t\tvar elem, tmp, tag, wrap, attached, j,\n\t\t\tfragment = context.createDocumentFragment(),\n\t\t\tnodes = [],\n\t\t\ti = 0,\n\t\t\tl = elems.length;\n\n\t\tfor (; i < l; i++) {\n\t\t\telem = elems[i];\n\n\t\t\tif (elem || elem === 0) {\n\n\t\t\t\t// Add nodes directly\n\t\t\t\tif (toType(elem) === \"object\") {\n\n\t\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\t\tjQuery.merge(nodes, elem.nodeType ? [elem] : elem);\n\n\t\t\t\t\t// Convert non-html into a text node\n\t\t\t\t} else if (!rhtml.test(elem)) {\n\t\t\t\t\tnodes.push(context.createTextNode(elem));\n\n\t\t\t\t\t// Convert html into DOM nodes\n\t\t\t\t} else {\n\t\t\t\t\ttmp = tmp || fragment.appendChild(context.createElement(\"div\"));\n\n\t\t\t\t\t// Deserialize a standard representation\n\t\t\t\t\ttag = (rtagName.exec(elem) || [\"\", \"\"])[1].toLowerCase();\n\t\t\t\t\twrap = wrapMap[tag] || wrapMap._default;\n\t\t\t\t\ttmp.innerHTML = wrap[1] + jQuery.htmlPrefilter(elem) + wrap[2];\n\n\t\t\t\t\t// Descend through wrappers to the right content\n\t\t\t\t\tj = wrap[0];\n\t\t\t\t\twhile (j--) {\n\t\t\t\t\t\ttmp = tmp.lastChild;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\t\tjQuery.merge(nodes, tmp.childNodes);\n\n\t\t\t\t\t// Remember the top-level container\n\t\t\t\t\ttmp = fragment.firstChild;\n\n\t\t\t\t\t// Ensure the created nodes are orphaned (trac-12392)\n\t\t\t\t\ttmp.textContent = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Remove wrapper from fragment\n\t\tfragment.textContent = \"\";\n\n\t\ti = 0;\n\t\twhile ((elem = nodes[i++])) {\n\n\t\t\t// Skip elements already in the context collection (trac-4087)\n\t\t\tif (selection && jQuery.inArray(elem, selection) > -1) {\n\t\t\t\tif (ignored) {\n\t\t\t\t\tignored.push(elem);\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tattached = isAttached(elem);\n\n\t\t\t// Append to fragment\n\t\t\ttmp = getAll(fragment.appendChild(elem), \"script\");\n\n\t\t\t// Preserve script evaluation history\n\t\t\tif (attached) {\n\t\t\t\tsetGlobalEval(tmp);\n\t\t\t}\n\n\t\t\t// Capture executables\n\t\t\tif (scripts) {\n\t\t\t\tj = 0;\n\t\t\t\twhile ((elem = tmp[j++])) {\n\t\t\t\t\tif (rscriptType.test(elem.type || \"\")) {\n\t\t\t\t\t\tscripts.push(elem);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn fragment;\n\t}\n\n\n\tvar rtypenamespace = /^([^.]*)(?:\\.(.+)|)/;\n\n\tfunction returnTrue() {\n\t\treturn true;\n\t}\n\n\tfunction returnFalse() {\n\t\treturn false;\n\t}\n\n\tfunction on(elem, types, selector, data, fn, one) {\n\t\tvar origFn, type;\n\n\t\t// Types can be a map of types/handlers\n\t\tif (typeof types === \"object\") {\n\n\t\t\t// ( types-Object, selector, data )\n\t\t\tif (typeof selector !== \"string\") {\n\n\t\t\t\t// ( types-Object, data )\n\t\t\t\tdata = data || selector;\n\t\t\t\tselector = undefined;\n\t\t\t}\n\t\t\tfor (type in types) {\n\t\t\t\ton(elem, type, selector, data, types[type], one);\n\t\t\t}\n\t\t\treturn elem;\n\t\t}\n\n\t\tif (data == null && fn == null) {\n\n\t\t\t// ( types, fn )\n\t\t\tfn = selector;\n\t\t\tdata = selector = undefined;\n\t\t} else if (fn == null) {\n\t\t\tif (typeof selector === \"string\") {\n\n\t\t\t\t// ( types, selector, fn )\n\t\t\t\tfn = data;\n\t\t\t\tdata = undefined;\n\t\t\t} else {\n\n\t\t\t\t// ( types, data, fn )\n\t\t\t\tfn = data;\n\t\t\t\tdata = selector;\n\t\t\t\tselector = undefined;\n\t\t\t}\n\t\t}\n\t\tif (fn === false) {\n\t\t\tfn = returnFalse;\n\t\t} else if (!fn) {\n\t\t\treturn elem;\n\t\t}\n\n\t\tif (one === 1) {\n\t\t\torigFn = fn;\n\t\t\tfn = function (event) {\n\n\t\t\t\t// Can use an empty set, since event contains the info\n\t\t\t\tjQuery().off(event);\n\t\t\t\treturn origFn.apply(this, arguments);\n\t\t\t};\n\n\t\t\t// Use same guid so caller can remove using origFn\n\t\t\tfn.guid = origFn.guid || (origFn.guid = jQuery.guid++);\n\t\t}\n\t\treturn elem.each(function () {\n\t\t\tjQuery.event.add(this, types, fn, data, selector);\n\t\t});\n\t}\n\n\t/*\n\t * Helper functions for managing events -- not part of the public interface.\n\t * Props to Dean Edwards' addEvent library for many of the ideas.\n\t */\n\tjQuery.event = {\n\n\t\tglobal: {},\n\n\t\tadd: function (elem, types, handler, data, selector) {\n\n\t\t\tvar handleObjIn, eventHandle, tmp,\n\t\t\t\tevents, t, handleObj,\n\t\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\t\telemData = dataPriv.get(elem);\n\n\t\t\t// Only attach events to objects that accept data\n\t\t\tif (!acceptData(elem)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Caller can pass in an object of custom data in lieu of the handler\n\t\t\tif (handler.handler) {\n\t\t\t\thandleObjIn = handler;\n\t\t\t\thandler = handleObjIn.handler;\n\t\t\t\tselector = handleObjIn.selector;\n\t\t\t}\n\n\t\t\t// Ensure that invalid selectors throw exceptions at attach time\n\t\t\t// Evaluate against documentElement in case elem is a non-element node (e.g., document)\n\t\t\tif (selector) {\n\t\t\t\tjQuery.find.matchesSelector(documentElement, selector);\n\t\t\t}\n\n\t\t\t// Make sure that the handler has a unique ID, used to find/remove it later\n\t\t\tif (!handler.guid) {\n\t\t\t\thandler.guid = jQuery.guid++;\n\t\t\t}\n\n\t\t\t// Init the element's event structure and main handler, if this is the first\n\t\t\tif (!(events = elemData.events)) {\n\t\t\t\tevents = elemData.events = Object.create(null);\n\t\t\t}\n\t\t\tif (!(eventHandle = elemData.handle)) {\n\t\t\t\teventHandle = elemData.handle = function (e) {\n\n\t\t\t\t\t// Discard the second event of a jQuery.event.trigger() and\n\t\t\t\t\t// when an event is called after a page has unloaded\n\t\t\t\t\treturn typeof jQuery !== \"undefined\" && jQuery.event.triggered !== e.type ?\n\t\t\t\t\t\tjQuery.event.dispatch.apply(elem, arguments) : undefined;\n\t\t\t\t};\n\t\t\t}\n\n\t\t\t// Handle multiple events separated by a space\n\t\t\ttypes = (types || \"\").match(rnothtmlwhite) || [\"\"];\n\t\t\tt = types.length;\n\t\t\twhile (t--) {\n\t\t\t\ttmp = rtypenamespace.exec(types[t]) || [];\n\t\t\t\ttype = origType = tmp[1];\n\t\t\t\tnamespaces = (tmp[2] || \"\").split(\".\").sort();\n\n\t\t\t\t// There *must* be a type, no attaching namespace-only handlers\n\t\t\t\tif (!type) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// If event changes its type, use the special event handlers for the changed type\n\t\t\t\tspecial = jQuery.event.special[type] || {};\n\n\t\t\t\t// If selector defined, determine special event api type, otherwise given type\n\t\t\t\ttype = (selector ? special.delegateType : special.bindType) || type;\n\n\t\t\t\t// Update special based on newly reset type\n\t\t\t\tspecial = jQuery.event.special[type] || {};\n\n\t\t\t\t// handleObj is passed to all event handlers\n\t\t\t\thandleObj = jQuery.extend({\n\t\t\t\t\ttype: type,\n\t\t\t\t\torigType: origType,\n\t\t\t\t\tdata: data,\n\t\t\t\t\thandler: handler,\n\t\t\t\t\tguid: handler.guid,\n\t\t\t\t\tselector: selector,\n\t\t\t\t\tneedsContext: selector && jQuery.expr.match.needsContext.test(selector),\n\t\t\t\t\tnamespace: namespaces.join(\".\")\n\t\t\t\t}, handleObjIn);\n\n\t\t\t\t// Init the event handler queue if we're the first\n\t\t\t\tif (!(handlers = events[type])) {\n\t\t\t\t\thandlers = events[type] = [];\n\t\t\t\t\thandlers.delegateCount = 0;\n\n\t\t\t\t\t// Only use addEventListener if the special events handler returns false\n\t\t\t\t\tif (!special.setup ||\n\t\t\t\t\t\tspecial.setup.call(elem, data, namespaces, eventHandle) === false) {\n\n\t\t\t\t\t\tif (elem.addEventListener) {\n\t\t\t\t\t\t\telem.addEventListener(type, eventHandle);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (special.add) {\n\t\t\t\t\tspecial.add.call(elem, handleObj);\n\n\t\t\t\t\tif (!handleObj.handler.guid) {\n\t\t\t\t\t\thandleObj.handler.guid = handler.guid;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Add to the element's handler list, delegates in front\n\t\t\t\tif (selector) {\n\t\t\t\t\thandlers.splice(handlers.delegateCount++, 0, handleObj);\n\t\t\t\t} else {\n\t\t\t\t\thandlers.push(handleObj);\n\t\t\t\t}\n\n\t\t\t\t// Keep track of which events have ever been used, for event optimization\n\t\t\t\tjQuery.event.global[type] = true;\n\t\t\t}\n\n\t\t},\n\n\t\t// Detach an event or set of events from an element\n\t\tremove: function (elem, types, handler, selector, mappedTypes) {\n\n\t\t\tvar j, origCount, tmp,\n\t\t\t\tevents, t, handleObj,\n\t\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\t\telemData = dataPriv.hasData(elem) && dataPriv.get(elem);\n\n\t\t\tif (!elemData || !(events = elemData.events)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Once for each type.namespace in types; type may be omitted\n\t\t\ttypes = (types || \"\").match(rnothtmlwhite) || [\"\"];\n\t\t\tt = types.length;\n\t\t\twhile (t--) {\n\t\t\t\ttmp = rtypenamespace.exec(types[t]) || [];\n\t\t\t\ttype = origType = tmp[1];\n\t\t\t\tnamespaces = (tmp[2] || \"\").split(\".\").sort();\n\n\t\t\t\t// Unbind all events (on this namespace, if provided) for the element\n\t\t\t\tif (!type) {\n\t\t\t\t\tfor (type in events) {\n\t\t\t\t\t\tjQuery.event.remove(elem, type + types[t], handler, selector, true);\n\t\t\t\t\t}\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tspecial = jQuery.event.special[type] || {};\n\t\t\t\ttype = (selector ? special.delegateType : special.bindType) || type;\n\t\t\t\thandlers = events[type] || [];\n\t\t\t\ttmp = tmp[2] &&\n\t\t\t\t\tnew RegExp(\"(^|\\\\.)\" + namespaces.join(\"\\\\.(?:.*\\\\.|)\") + \"(\\\\.|$)\");\n\n\t\t\t\t// Remove matching events\n\t\t\t\torigCount = j = handlers.length;\n\t\t\t\twhile (j--) {\n\t\t\t\t\thandleObj = handlers[j];\n\n\t\t\t\t\tif ((mappedTypes || origType === handleObj.origType) &&\n\t\t\t\t\t\t(!handler || handler.guid === handleObj.guid) &&\n\t\t\t\t\t\t(!tmp || tmp.test(handleObj.namespace)) &&\n\t\t\t\t\t\t(!selector || selector === handleObj.selector ||\n\t\t\t\t\t\t\tselector === \"**\" && handleObj.selector)) {\n\t\t\t\t\t\thandlers.splice(j, 1);\n\n\t\t\t\t\t\tif (handleObj.selector) {\n\t\t\t\t\t\t\thandlers.delegateCount--;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (special.remove) {\n\t\t\t\t\t\t\tspecial.remove.call(elem, handleObj);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Remove generic event handler if we removed something and no more handlers exist\n\t\t\t\t// (avoids potential for endless recursion during removal of special event handlers)\n\t\t\t\tif (origCount && !handlers.length) {\n\t\t\t\t\tif (!special.teardown ||\n\t\t\t\t\t\tspecial.teardown.call(elem, namespaces, elemData.handle) === false) {\n\n\t\t\t\t\t\tjQuery.removeEvent(elem, type, elemData.handle);\n\t\t\t\t\t}\n\n\t\t\t\t\tdelete events[type];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove data and the expando if it's no longer used\n\t\t\tif (jQuery.isEmptyObject(events)) {\n\t\t\t\tdataPriv.remove(elem, \"handle events\");\n\t\t\t}\n\t\t},\n\n\t\tdispatch: function (nativeEvent) {\n\n\t\t\tvar i, j, ret, matched, handleObj, handlerQueue,\n\t\t\t\targs = new Array(arguments.length),\n\n\t\t\t\t// Make a writable jQuery.Event from the native event object\n\t\t\t\tevent = jQuery.event.fix(nativeEvent),\n\n\t\t\t\thandlers = (\n\t\t\t\t\tdataPriv.get(this, \"events\") || Object.create(null)\n\t\t\t\t)[event.type] || [],\n\t\t\t\tspecial = jQuery.event.special[event.type] || {};\n\n\t\t\t// Use the fix-ed jQuery.Event rather than the (read-only) native event\n\t\t\targs[0] = event;\n\n\t\t\tfor (i = 1; i < arguments.length; i++) {\n\t\t\t\targs[i] = arguments[i];\n\t\t\t}\n\n\t\t\tevent.delegateTarget = this;\n\n\t\t\t// Call the preDispatch hook for the mapped type, and let it bail if desired\n\t\t\tif (special.preDispatch && special.preDispatch.call(this, event) === false) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Determine handlers\n\t\t\thandlerQueue = jQuery.event.handlers.call(this, event, handlers);\n\n\t\t\t// Run delegates first; they may want to stop propagation beneath us\n\t\t\ti = 0;\n\t\t\twhile ((matched = handlerQueue[i++]) && !event.isPropagationStopped()) {\n\t\t\t\tevent.currentTarget = matched.elem;\n\n\t\t\t\tj = 0;\n\t\t\t\twhile ((handleObj = matched.handlers[j++]) &&\n\t\t\t\t\t!event.isImmediatePropagationStopped()) {\n\n\t\t\t\t\t// If the event is namespaced, then each handler is only invoked if it is\n\t\t\t\t\t// specially universal or its namespaces are a superset of the event's.\n\t\t\t\t\tif (!event.rnamespace || handleObj.namespace === false ||\n\t\t\t\t\t\tevent.rnamespace.test(handleObj.namespace)) {\n\n\t\t\t\t\t\tevent.handleObj = handleObj;\n\t\t\t\t\t\tevent.data = handleObj.data;\n\n\t\t\t\t\t\tret = ((jQuery.event.special[handleObj.origType] || {}).handle ||\n\t\t\t\t\t\t\thandleObj.handler).apply(matched.elem, args);\n\n\t\t\t\t\t\tif (ret !== undefined) {\n\t\t\t\t\t\t\tif ((event.result = ret) === false) {\n\t\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Call the postDispatch hook for the mapped type\n\t\t\tif (special.postDispatch) {\n\t\t\t\tspecial.postDispatch.call(this, event);\n\t\t\t}\n\n\t\t\treturn event.result;\n\t\t},\n\n\t\thandlers: function (event, handlers) {\n\t\t\tvar i, handleObj, sel, matchedHandlers, matchedSelectors,\n\t\t\t\thandlerQueue = [],\n\t\t\t\tdelegateCount = handlers.delegateCount,\n\t\t\t\tcur = event.target;\n\n\t\t\t// Find delegate handlers\n\t\t\tif (delegateCount &&\n\n\t\t\t\t// Support: IE <=9\n\t\t\t\t// Black-hole SVG <use> instance trees (trac-13180)\n\t\t\t\tcur.nodeType &&\n\n\t\t\t\t// Support: Firefox <=42\n\t\t\t\t// Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861)\n\t\t\t\t// https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click\n\t\t\t\t// Support: IE 11 only\n\t\t\t\t// ...but not arrow key \"clicks\" of radio inputs, which can have `button` -1 (gh-2343)\n\t\t\t\t!(event.type === \"click\" && event.button >= 1)) {\n\n\t\t\t\tfor (; cur !== this; cur = cur.parentNode || this) {\n\n\t\t\t\t\t// Don't check non-elements (trac-13208)\n\t\t\t\t\t// Don't process clicks on disabled elements (trac-6911, trac-8165, trac-11382, trac-11764)\n\t\t\t\t\tif (cur.nodeType === 1 && !(event.type === \"click\" && cur.disabled === true)) {\n\t\t\t\t\t\tmatchedHandlers = [];\n\t\t\t\t\t\tmatchedSelectors = {};\n\t\t\t\t\t\tfor (i = 0; i < delegateCount; i++) {\n\t\t\t\t\t\t\thandleObj = handlers[i];\n\n\t\t\t\t\t\t\t// Don't conflict with Object.prototype properties (trac-13203)\n\t\t\t\t\t\t\tsel = handleObj.selector + \" \";\n\n\t\t\t\t\t\t\tif (matchedSelectors[sel] === undefined) {\n\t\t\t\t\t\t\t\tmatchedSelectors[sel] = handleObj.needsContext ?\n\t\t\t\t\t\t\t\t\tjQuery(sel, this).index(cur) > -1 :\n\t\t\t\t\t\t\t\t\tjQuery.find(sel, this, null, [cur]).length;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (matchedSelectors[sel]) {\n\t\t\t\t\t\t\t\tmatchedHandlers.push(handleObj);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (matchedHandlers.length) {\n\t\t\t\t\t\t\thandlerQueue.push({ elem: cur, handlers: matchedHandlers });\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Add the remaining (directly-bound) handlers\n\t\t\tcur = this;\n\t\t\tif (delegateCount < handlers.length) {\n\t\t\t\thandlerQueue.push({ elem: cur, handlers: handlers.slice(delegateCount) });\n\t\t\t}\n\n\t\t\treturn handlerQueue;\n\t\t},\n\n\t\taddProp: function (name, hook) {\n\t\t\tObject.defineProperty(jQuery.Event.prototype, name, {\n\t\t\t\tenumerable: true,\n\t\t\t\tconfigurable: true,\n\n\t\t\t\tget: isFunction(hook) ?\n\t\t\t\t\tfunction () {\n\t\t\t\t\t\tif (this.originalEvent) {\n\t\t\t\t\t\t\treturn hook(this.originalEvent);\n\t\t\t\t\t\t}\n\t\t\t\t\t} :\n\t\t\t\t\tfunction () {\n\t\t\t\t\t\tif (this.originalEvent) {\n\t\t\t\t\t\t\treturn this.originalEvent[name];\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\n\t\t\t\tset: function (value) {\n\t\t\t\t\tObject.defineProperty(this, name, {\n\t\t\t\t\t\tenumerable: true,\n\t\t\t\t\t\tconfigurable: true,\n\t\t\t\t\t\twritable: true,\n\t\t\t\t\t\tvalue: value\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\tfix: function (originalEvent) {\n\t\t\treturn originalEvent[jQuery.expando] ?\n\t\t\t\toriginalEvent :\n\t\t\t\tnew jQuery.Event(originalEvent);\n\t\t},\n\n\t\tspecial: {\n\t\t\tload: {\n\n\t\t\t\t// Prevent triggered image.load events from bubbling to window.load\n\t\t\t\tnoBubble: true\n\t\t\t},\n\t\t\tclick: {\n\n\t\t\t\t// Utilize native event to ensure correct state for checkable inputs\n\t\t\t\tsetup: function (data) {\n\n\t\t\t\t\t// For mutual compressibility with _default, replace `this` access with a local var.\n\t\t\t\t\t// `|| data` is dead code meant only to preserve the variable through minification.\n\t\t\t\t\tvar el = this || data;\n\n\t\t\t\t\t// Claim the first handler\n\t\t\t\t\tif (rcheckableType.test(el.type) &&\n\t\t\t\t\t\tel.click && nodeName(el, \"input\")) {\n\n\t\t\t\t\t\t// dataPriv.set( el, \"click\", ... )\n\t\t\t\t\t\tleverageNative(el, \"click\", true);\n\t\t\t\t\t}\n\n\t\t\t\t\t// Return false to allow normal processing in the caller\n\t\t\t\t\treturn false;\n\t\t\t\t},\n\t\t\t\ttrigger: function (data) {\n\n\t\t\t\t\t// For mutual compressibility with _default, replace `this` access with a local var.\n\t\t\t\t\t// `|| data` is dead code meant only to preserve the variable through minification.\n\t\t\t\t\tvar el = this || data;\n\n\t\t\t\t\t// Force setup before triggering a click\n\t\t\t\t\tif (rcheckableType.test(el.type) &&\n\t\t\t\t\t\tel.click && nodeName(el, \"input\")) {\n\n\t\t\t\t\t\tleverageNative(el, \"click\");\n\t\t\t\t\t}\n\n\t\t\t\t\t// Return non-false to allow normal event-path propagation\n\t\t\t\t\treturn true;\n\t\t\t\t},\n\n\t\t\t\t// For cross-browser consistency, suppress native .click() on links\n\t\t\t\t// Also prevent it if we're currently inside a leveraged native-event stack\n\t\t\t\t_default: function (event) {\n\t\t\t\t\tvar target = event.target;\n\t\t\t\t\treturn rcheckableType.test(target.type) &&\n\t\t\t\t\t\ttarget.click && nodeName(target, \"input\") &&\n\t\t\t\t\t\tdataPriv.get(target, \"click\") ||\n\t\t\t\t\t\tnodeName(target, \"a\");\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tbeforeunload: {\n\t\t\t\tpostDispatch: function (event) {\n\n\t\t\t\t\t// Support: Firefox 20+\n\t\t\t\t\t// Firefox doesn't alert if the returnValue field is not set.\n\t\t\t\t\tif (event.result !== undefined && event.originalEvent) {\n\t\t\t\t\t\tevent.originalEvent.returnValue = event.result;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t// Ensure the presence of an event listener that handles manually-triggered\n\t// synthetic events by interrupting progress until reinvoked in response to\n\t// *native* events that it fires directly, ensuring that state changes have\n\t// already occurred before other listeners are invoked.\n\tfunction leverageNative(el, type, isSetup) {\n\n\t\t// Missing `isSetup` indicates a trigger call, which must force setup through jQuery.event.add\n\t\tif (!isSetup) {\n\t\t\tif (dataPriv.get(el, type) === undefined) {\n\t\t\t\tjQuery.event.add(el, type, returnTrue);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\t// Register the controller as a special universal handler for all event namespaces\n\t\tdataPriv.set(el, type, false);\n\t\tjQuery.event.add(el, type, {\n\t\t\tnamespace: false,\n\t\t\thandler: function (event) {\n\t\t\t\tvar result,\n\t\t\t\t\tsaved = dataPriv.get(this, type);\n\n\t\t\t\tif ((event.isTrigger & 1) && this[type]) {\n\n\t\t\t\t\t// Interrupt processing of the outer synthetic .trigger()ed event\n\t\t\t\t\tif (!saved) {\n\n\t\t\t\t\t\t// Store arguments for use when handling the inner native event\n\t\t\t\t\t\t// There will always be at least one argument (an event object), so this array\n\t\t\t\t\t\t// will not be confused with a leftover capture object.\n\t\t\t\t\t\tsaved = slice.call(arguments);\n\t\t\t\t\t\tdataPriv.set(this, type, saved);\n\n\t\t\t\t\t\t// Trigger the native event and capture its result\n\t\t\t\t\t\tthis[type]();\n\t\t\t\t\t\tresult = dataPriv.get(this, type);\n\t\t\t\t\t\tdataPriv.set(this, type, false);\n\n\t\t\t\t\t\tif (saved !== result) {\n\n\t\t\t\t\t\t\t// Cancel the outer synthetic event\n\t\t\t\t\t\t\tevent.stopImmediatePropagation();\n\t\t\t\t\t\t\tevent.preventDefault();\n\n\t\t\t\t\t\t\treturn result;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// If this is an inner synthetic event for an event with a bubbling surrogate\n\t\t\t\t\t\t// (focus or blur), assume that the surrogate already propagated from triggering\n\t\t\t\t\t\t// the native event and prevent that from happening again here.\n\t\t\t\t\t\t// This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the\n\t\t\t\t\t\t// bubbling surrogate propagates *after* the non-bubbling base), but that seems\n\t\t\t\t\t\t// less bad than duplication.\n\t\t\t\t\t} else if ((jQuery.event.special[type] || {}).delegateType) {\n\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t}\n\n\t\t\t\t\t// If this is a native event triggered above, everything is now in order\n\t\t\t\t\t// Fire an inner synthetic event with the original arguments\n\t\t\t\t} else if (saved) {\n\n\t\t\t\t\t// ...and capture the result\n\t\t\t\t\tdataPriv.set(this, type, jQuery.event.trigger(\n\t\t\t\t\t\tsaved[0],\n\t\t\t\t\t\tsaved.slice(1),\n\t\t\t\t\t\tthis\n\t\t\t\t\t));\n\n\t\t\t\t\t// Abort handling of the native event by all jQuery handlers while allowing\n\t\t\t\t\t// native handlers on the same element to run. On target, this is achieved\n\t\t\t\t\t// by stopping immediate propagation just on the jQuery event. However,\n\t\t\t\t\t// the native event is re-wrapped by a jQuery one on each level of the\n\t\t\t\t\t// propagation so the only way to stop it for jQuery is to stop it for\n\t\t\t\t\t// everyone via native `stopPropagation()`. This is not a problem for\n\t\t\t\t\t// focus/blur which don't bubble, but it does also stop click on checkboxes\n\t\t\t\t\t// and radios. We accept this limitation.\n\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\tevent.isImmediatePropagationStopped = returnTrue;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\tjQuery.removeEvent = function (elem, type, handle) {\n\n\t\t// This \"if\" is needed for plain objects\n\t\tif (elem.removeEventListener) {\n\t\t\telem.removeEventListener(type, handle);\n\t\t}\n\t};\n\n\tjQuery.Event = function (src, props) {\n\n\t\t// Allow instantiation without the 'new' keyword\n\t\tif (!(this instanceof jQuery.Event)) {\n\t\t\treturn new jQuery.Event(src, props);\n\t\t}\n\n\t\t// Event object\n\t\tif (src && src.type) {\n\t\t\tthis.originalEvent = src;\n\t\t\tthis.type = src.type;\n\n\t\t\t// Events bubbling up the document may have been marked as prevented\n\t\t\t// by a handler lower down the tree; reflect the correct value.\n\t\t\tthis.isDefaultPrevented = src.defaultPrevented ||\n\t\t\t\tsrc.defaultPrevented === undefined &&\n\n\t\t\t\t// Support: Android <=2.3 only\n\t\t\t\tsrc.returnValue === false ?\n\t\t\t\treturnTrue :\n\t\t\t\treturnFalse;\n\n\t\t\t// Create target properties\n\t\t\t// Support: Safari <=6 - 7 only\n\t\t\t// Target should not be a text node (trac-504, trac-13143)\n\t\t\tthis.target = (src.target && src.target.nodeType === 3) ?\n\t\t\t\tsrc.target.parentNode :\n\t\t\t\tsrc.target;\n\n\t\t\tthis.currentTarget = src.currentTarget;\n\t\t\tthis.relatedTarget = src.relatedTarget;\n\n\t\t\t// Event type\n\t\t} else {\n\t\t\tthis.type = src;\n\t\t}\n\n\t\t// Put explicitly provided properties onto the event object\n\t\tif (props) {\n\t\t\tjQuery.extend(this, props);\n\t\t}\n\n\t\t// Create a timestamp if incoming event doesn't have one\n\t\tthis.timeStamp = src && src.timeStamp || Date.now();\n\n\t\t// Mark it as fixed\n\t\tthis[jQuery.expando] = true;\n\t};\n\n\t// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding\n\t// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html\n\tjQuery.Event.prototype = {\n\t\tconstructor: jQuery.Event,\n\t\tisDefaultPrevented: returnFalse,\n\t\tisPropagationStopped: returnFalse,\n\t\tisImmediatePropagationStopped: returnFalse,\n\t\tisSimulated: false,\n\n\t\tpreventDefault: function () {\n\t\t\tvar e = this.originalEvent;\n\n\t\t\tthis.isDefaultPrevented = returnTrue;\n\n\t\t\tif (e && !this.isSimulated) {\n\t\t\t\te.preventDefault();\n\t\t\t}\n\t\t},\n\t\tstopPropagation: function () {\n\t\t\tvar e = this.originalEvent;\n\n\t\t\tthis.isPropagationStopped = returnTrue;\n\n\t\t\tif (e && !this.isSimulated) {\n\t\t\t\te.stopPropagation();\n\t\t\t}\n\t\t},\n\t\tstopImmediatePropagation: function () {\n\t\t\tvar e = this.originalEvent;\n\n\t\t\tthis.isImmediatePropagationStopped = returnTrue;\n\n\t\t\tif (e && !this.isSimulated) {\n\t\t\t\te.stopImmediatePropagation();\n\t\t\t}\n\n\t\t\tthis.stopPropagation();\n\t\t}\n\t};\n\n\t// Includes all common event props including KeyEvent and MouseEvent specific props\n\tjQuery.each({\n\t\taltKey: true,\n\t\tbubbles: true,\n\t\tcancelable: true,\n\t\tchangedTouches: true,\n\t\tctrlKey: true,\n\t\tdetail: true,\n\t\teventPhase: true,\n\t\tmetaKey: true,\n\t\tpageX: true,\n\t\tpageY: true,\n\t\tshiftKey: true,\n\t\tview: true,\n\t\t\"char\": true,\n\t\tcode: true,\n\t\tcharCode: true,\n\t\tkey: true,\n\t\tkeyCode: true,\n\t\tbutton: true,\n\t\tbuttons: true,\n\t\tclientX: true,\n\t\tclientY: true,\n\t\toffsetX: true,\n\t\toffsetY: true,\n\t\tpointerId: true,\n\t\tpointerType: true,\n\t\tscreenX: true,\n\t\tscreenY: true,\n\t\ttargetTouches: true,\n\t\ttoElement: true,\n\t\ttouches: true,\n\t\twhich: true\n\t}, jQuery.event.addProp);\n\n\tjQuery.each({ focus: \"focusin\", blur: \"focusout\" }, function (type, delegateType) {\n\n\t\tfunction focusMappedHandler(nativeEvent) {\n\t\t\tif (document.documentMode) {\n\n\t\t\t\t// Support: IE 11+\n\t\t\t\t// Attach a single focusin/focusout handler on the document while someone wants\n\t\t\t\t// focus/blur. This is because the former are synchronous in IE while the latter\n\t\t\t\t// are async. In other browsers, all those handlers are invoked synchronously.\n\n\t\t\t\t// `handle` from private data would already wrap the event, but we need\n\t\t\t\t// to change the `type` here.\n\t\t\t\tvar handle = dataPriv.get(this, \"handle\"),\n\t\t\t\t\tevent = jQuery.event.fix(nativeEvent);\n\t\t\t\tevent.type = nativeEvent.type === \"focusin\" ? \"focus\" : \"blur\";\n\t\t\t\tevent.isSimulated = true;\n\n\t\t\t\t// First, handle focusin/focusout\n\t\t\t\thandle(nativeEvent);\n\n\t\t\t\t// ...then, handle focus/blur\n\t\t\t\t//\n\t\t\t\t// focus/blur don't bubble while focusin/focusout do; simulate the former by only\n\t\t\t\t// invoking the handler at the lower level.\n\t\t\t\tif (event.target === event.currentTarget) {\n\n\t\t\t\t\t// The setup part calls `leverageNative`, which, in turn, calls\n\t\t\t\t\t// `jQuery.event.add`, so event handle will already have been set\n\t\t\t\t\t// by this point.\n\t\t\t\t\thandle(event);\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\t// For non-IE browsers, attach a single capturing handler on the document\n\t\t\t\t// while someone wants focusin/focusout.\n\t\t\t\tjQuery.event.simulate(delegateType, nativeEvent.target,\n\t\t\t\t\tjQuery.event.fix(nativeEvent));\n\t\t\t}\n\t\t}\n\n\t\tjQuery.event.special[type] = {\n\n\t\t\t// Utilize native event if possible so blur/focus sequence is correct\n\t\t\tsetup: function () {\n\n\t\t\t\tvar attaches;\n\n\t\t\t\t// Claim the first handler\n\t\t\t\t// dataPriv.set( this, \"focus\", ... )\n\t\t\t\t// dataPriv.set( this, \"blur\", ... )\n\t\t\t\tleverageNative(this, type, true);\n\n\t\t\t\tif (document.documentMode) {\n\n\t\t\t\t\t// Support: IE 9 - 11+\n\t\t\t\t\t// We use the same native handler for focusin & focus (and focusout & blur)\n\t\t\t\t\t// so we need to coordinate setup & teardown parts between those events.\n\t\t\t\t\t// Use `delegateType` as the key as `type` is already used by `leverageNative`.\n\t\t\t\t\tattaches = dataPriv.get(this, delegateType);\n\t\t\t\t\tif (!attaches) {\n\t\t\t\t\t\tthis.addEventListener(delegateType, focusMappedHandler);\n\t\t\t\t\t}\n\t\t\t\t\tdataPriv.set(this, delegateType, (attaches || 0) + 1);\n\t\t\t\t} else {\n\n\t\t\t\t\t// Return false to allow normal processing in the caller\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\t\t\ttrigger: function () {\n\n\t\t\t\t// Force setup before trigger\n\t\t\t\tleverageNative(this, type);\n\n\t\t\t\t// Return non-false to allow normal event-path propagation\n\t\t\t\treturn true;\n\t\t\t},\n\n\t\t\tteardown: function () {\n\t\t\t\tvar attaches;\n\n\t\t\t\tif (document.documentMode) {\n\t\t\t\t\tattaches = dataPriv.get(this, delegateType) - 1;\n\t\t\t\t\tif (!attaches) {\n\t\t\t\t\t\tthis.removeEventListener(delegateType, focusMappedHandler);\n\t\t\t\t\t\tdataPriv.remove(this, delegateType);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdataPriv.set(this, delegateType, attaches);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\n\t\t\t\t\t// Return false to indicate standard teardown should be applied\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// Suppress native focus or blur if we're currently inside\n\t\t\t// a leveraged native-event stack\n\t\t\t_default: function (event) {\n\t\t\t\treturn dataPriv.get(event.target, type);\n\t\t\t},\n\n\t\t\tdelegateType: delegateType\n\t\t};\n\n\t\t// Support: Firefox <=44\n\t\t// Firefox doesn't have focus(in | out) events\n\t\t// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787\n\t\t//\n\t\t// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1\n\t\t// focus(in | out) events fire after focus & blur events,\n\t\t// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order\n\t\t// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857\n\t\t//\n\t\t// Support: IE 9 - 11+\n\t\t// To preserve relative focusin/focus & focusout/blur event order guaranteed on the 3.x branch,\n\t\t// attach a single handler for both events in IE.\n\t\tjQuery.event.special[delegateType] = {\n\t\t\tsetup: function () {\n\n\t\t\t\t// Handle: regular nodes (via `this.ownerDocument`), window\n\t\t\t\t// (via `this.document`) & document (via `this`).\n\t\t\t\tvar doc = this.ownerDocument || this.document || this,\n\t\t\t\t\tdataHolder = document.documentMode ? this : doc,\n\t\t\t\t\tattaches = dataPriv.get(dataHolder, delegateType);\n\n\t\t\t\t// Support: IE 9 - 11+\n\t\t\t\t// We use the same native handler for focusin & focus (and focusout & blur)\n\t\t\t\t// so we need to coordinate setup & teardown parts between those events.\n\t\t\t\t// Use `delegateType` as the key as `type` is already used by `leverageNative`.\n\t\t\t\tif (!attaches) {\n\t\t\t\t\tif (document.documentMode) {\n\t\t\t\t\t\tthis.addEventListener(delegateType, focusMappedHandler);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdoc.addEventListener(type, focusMappedHandler, true);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tdataPriv.set(dataHolder, delegateType, (attaches || 0) + 1);\n\t\t\t},\n\t\t\tteardown: function () {\n\t\t\t\tvar doc = this.ownerDocument || this.document || this,\n\t\t\t\t\tdataHolder = document.documentMode ? this : doc,\n\t\t\t\t\tattaches = dataPriv.get(dataHolder, delegateType) - 1;\n\n\t\t\t\tif (!attaches) {\n\t\t\t\t\tif (document.documentMode) {\n\t\t\t\t\t\tthis.removeEventListener(delegateType, focusMappedHandler);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdoc.removeEventListener(type, focusMappedHandler, true);\n\t\t\t\t\t}\n\t\t\t\t\tdataPriv.remove(dataHolder, delegateType);\n\t\t\t\t} else {\n\t\t\t\t\tdataPriv.set(dataHolder, delegateType, attaches);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t});\n\n\t// Create mouseenter/leave events using mouseover/out and event-time checks\n\t// so that event delegation works in jQuery.\n\t// Do the same for pointerenter/pointerleave and pointerover/pointerout\n\t//\n\t// Support: Safari 7 only\n\t// Safari sends mouseenter too often; see:\n\t// https://bugs.chromium.org/p/chromium/issues/detail?id=470258\n\t// for the description of the bug (it existed in older Chrome versions as well).\n\tjQuery.each({\n\t\tmouseenter: \"mouseover\",\n\t\tmouseleave: \"mouseout\",\n\t\tpointerenter: \"pointerover\",\n\t\tpointerleave: \"pointerout\"\n\t}, function (orig, fix) {\n\t\tjQuery.event.special[orig] = {\n\t\t\tdelegateType: fix,\n\t\t\tbindType: fix,\n\n\t\t\thandle: function (event) {\n\t\t\t\tvar ret,\n\t\t\t\t\ttarget = this,\n\t\t\t\t\trelated = event.relatedTarget,\n\t\t\t\t\thandleObj = event.handleObj;\n\n\t\t\t\t// For mouseenter/leave call the handler if related is outside the target.\n\t\t\t\t// NB: No relatedTarget if the mouse left/entered the browser window\n\t\t\t\tif (!related || (related !== target && !jQuery.contains(target, related))) {\n\t\t\t\t\tevent.type = handleObj.origType;\n\t\t\t\t\tret = handleObj.handler.apply(this, arguments);\n\t\t\t\t\tevent.type = fix;\n\t\t\t\t}\n\t\t\t\treturn ret;\n\t\t\t}\n\t\t};\n\t});\n\n\tjQuery.fn.extend({\n\n\t\ton: function (types, selector, data, fn) {\n\t\t\treturn on(this, types, selector, data, fn);\n\t\t},\n\t\tone: function (types, selector, data, fn) {\n\t\t\treturn on(this, types, selector, data, fn, 1);\n\t\t},\n\t\toff: function (types, selector, fn) {\n\t\t\tvar handleObj, type;\n\t\t\tif (types && types.preventDefault && types.handleObj) {\n\n\t\t\t\t// ( event )  dispatched jQuery.Event\n\t\t\t\thandleObj = types.handleObj;\n\t\t\t\tjQuery(types.delegateTarget).off(\n\t\t\t\t\thandleObj.namespace ?\n\t\t\t\t\t\thandleObj.origType + \".\" + handleObj.namespace :\n\t\t\t\t\t\thandleObj.origType,\n\t\t\t\t\thandleObj.selector,\n\t\t\t\t\thandleObj.handler\n\t\t\t\t);\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\tif (typeof types === \"object\") {\n\n\t\t\t\t// ( types-object [, selector] )\n\t\t\t\tfor (type in types) {\n\t\t\t\t\tthis.off(type, selector, types[type]);\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\tif (selector === false || typeof selector === \"function\") {\n\n\t\t\t\t// ( types [, fn] )\n\t\t\t\tfn = selector;\n\t\t\t\tselector = undefined;\n\t\t\t}\n\t\t\tif (fn === false) {\n\t\t\t\tfn = returnFalse;\n\t\t\t}\n\t\t\treturn this.each(function () {\n\t\t\t\tjQuery.event.remove(this, types, fn, selector);\n\t\t\t});\n\t\t}\n\t});\n\n\n\tvar\n\n\t\t// Support: IE <=10 - 11, Edge 12 - 13 only\n\t\t// In IE/Edge using regex groups here causes severe slowdowns.\n\t\t// See https://connect.microsoft.com/IE/feedback/details/1736512/\n\t\trnoInnerhtml = /<script|<style|<link/i,\n\n\t\t// checked=\"checked\" or checked\n\t\trchecked = /checked\\s*(?:[^=]|=\\s*.checked.)/i,\n\n\t\trcleanScript = /^\\s*<!\\[CDATA\\[|\\]\\]>\\s*$/g;\n\n\t// Prefer a tbody over its parent table for containing new rows\n\tfunction manipulationTarget(elem, content) {\n\t\tif (nodeName(elem, \"table\") &&\n\t\t\tnodeName(content.nodeType !== 11 ? content : content.firstChild, \"tr\")) {\n\n\t\t\treturn jQuery(elem).children(\"tbody\")[0] || elem;\n\t\t}\n\n\t\treturn elem;\n\t}\n\n\t// Replace/restore the type attribute of script elements for safe DOM manipulation\n\tfunction disableScript(elem) {\n\t\telem.type = (elem.getAttribute(\"type\") !== null) + \"/\" + elem.type;\n\t\treturn elem;\n\t}\n\tfunction restoreScript(elem) {\n\t\tif ((elem.type || \"\").slice(0, 5) === \"true/\") {\n\t\t\telem.type = elem.type.slice(5);\n\t\t} else {\n\t\t\telem.removeAttribute(\"type\");\n\t\t}\n\n\t\treturn elem;\n\t}\n\n\tfunction cloneCopyEvent(src, dest) {\n\t\tvar i, l, type, pdataOld, udataOld, udataCur, events;\n\n\t\tif (dest.nodeType !== 1) {\n\t\t\treturn;\n\t\t}\n\n\t\t// 1. Copy private data: events, handlers, etc.\n\t\tif (dataPriv.hasData(src)) {\n\t\t\tpdataOld = dataPriv.get(src);\n\t\t\tevents = pdataOld.events;\n\n\t\t\tif (events) {\n\t\t\t\tdataPriv.remove(dest, \"handle events\");\n\n\t\t\t\tfor (type in events) {\n\t\t\t\t\tfor (i = 0, l = events[type].length; i < l; i++) {\n\t\t\t\t\t\tjQuery.event.add(dest, type, events[type][i]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// 2. Copy user data\n\t\tif (dataUser.hasData(src)) {\n\t\t\tudataOld = dataUser.access(src);\n\t\t\tudataCur = jQuery.extend({}, udataOld);\n\n\t\t\tdataUser.set(dest, udataCur);\n\t\t}\n\t}\n\n\t// Fix IE bugs, see support tests\n\tfunction fixInput(src, dest) {\n\t\tvar nodeName = dest.nodeName.toLowerCase();\n\n\t\t// Fails to persist the checked state of a cloned checkbox or radio button.\n\t\tif (nodeName === \"input\" && rcheckableType.test(src.type)) {\n\t\t\tdest.checked = src.checked;\n\n\t\t\t// Fails to return the selected option to the default selected state when cloning options\n\t\t} else if (nodeName === \"input\" || nodeName === \"textarea\") {\n\t\t\tdest.defaultValue = src.defaultValue;\n\t\t}\n\t}\n\n\tfunction domManip(collection, args, callback, ignored) {\n\n\t\t// Flatten any nested arrays\n\t\targs = flat(args);\n\n\t\tvar fragment, first, scripts, hasScripts, node, doc,\n\t\t\ti = 0,\n\t\t\tl = collection.length,\n\t\t\tiNoClone = l - 1,\n\t\t\tvalue = args[0],\n\t\t\tvalueIsFunction = isFunction(value);\n\n\t\t// We can't cloneNode fragments that contain checked, in WebKit\n\t\tif (valueIsFunction ||\n\t\t\t(l > 1 && typeof value === \"string\" &&\n\t\t\t\t!support.checkClone && rchecked.test(value))) {\n\t\t\treturn collection.each(function (index) {\n\t\t\t\tvar self = collection.eq(index);\n\t\t\t\tif (valueIsFunction) {\n\t\t\t\t\targs[0] = value.call(this, index, self.html());\n\t\t\t\t}\n\t\t\t\tdomManip(self, args, callback, ignored);\n\t\t\t});\n\t\t}\n\n\t\tif (l) {\n\t\t\tfragment = buildFragment(args, collection[0].ownerDocument, false, collection, ignored);\n\t\t\tfirst = fragment.firstChild;\n\n\t\t\tif (fragment.childNodes.length === 1) {\n\t\t\t\tfragment = first;\n\t\t\t}\n\n\t\t\t// Require either new content or an interest in ignored elements to invoke the callback\n\t\t\tif (first || ignored) {\n\t\t\t\tscripts = jQuery.map(getAll(fragment, \"script\"), disableScript);\n\t\t\t\thasScripts = scripts.length;\n\n\t\t\t\t// Use the original fragment for the last item\n\t\t\t\t// instead of the first because it can end up\n\t\t\t\t// being emptied incorrectly in certain situations (trac-8070).\n\t\t\t\tfor (; i < l; i++) {\n\t\t\t\t\tnode = fragment;\n\n\t\t\t\t\tif (i !== iNoClone) {\n\t\t\t\t\t\tnode = jQuery.clone(node, true, true);\n\n\t\t\t\t\t\t// Keep references to cloned scripts for later restoration\n\t\t\t\t\t\tif (hasScripts) {\n\n\t\t\t\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\t\t\t\tjQuery.merge(scripts, getAll(node, \"script\"));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tcallback.call(collection[i], node, i);\n\t\t\t\t}\n\n\t\t\t\tif (hasScripts) {\n\t\t\t\t\tdoc = scripts[scripts.length - 1].ownerDocument;\n\n\t\t\t\t\t// Reenable scripts\n\t\t\t\t\tjQuery.map(scripts, restoreScript);\n\n\t\t\t\t\t// Evaluate executable scripts on first document insertion\n\t\t\t\t\tfor (i = 0; i < hasScripts; i++) {\n\t\t\t\t\t\tnode = scripts[i];\n\t\t\t\t\t\tif (rscriptType.test(node.type || \"\") &&\n\t\t\t\t\t\t\t!dataPriv.access(node, \"globalEval\") &&\n\t\t\t\t\t\t\tjQuery.contains(doc, node)) {\n\n\t\t\t\t\t\t\tif (node.src && (node.type || \"\").toLowerCase() !== \"module\") {\n\n\t\t\t\t\t\t\t\t// Optional AJAX dependency, but won't run scripts if not present\n\t\t\t\t\t\t\t\tif (jQuery._evalUrl && !node.noModule) {\n\t\t\t\t\t\t\t\t\tjQuery._evalUrl(node.src, {\n\t\t\t\t\t\t\t\t\t\tnonce: node.nonce || node.getAttribute(\"nonce\")\n\t\t\t\t\t\t\t\t\t}, doc);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t// Unwrap a CDATA section containing script contents. This shouldn't be\n\t\t\t\t\t\t\t\t// needed as in XML documents they're already not visible when\n\t\t\t\t\t\t\t\t// inspecting element contents and in HTML documents they have no\n\t\t\t\t\t\t\t\t// meaning but we're preserving that logic for backwards compatibility.\n\t\t\t\t\t\t\t\t// This will be removed completely in 4.0. See gh-4904.\n\t\t\t\t\t\t\t\tDOMEval(node.textContent.replace(rcleanScript, \"\"), node, doc);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn collection;\n\t}\n\n\tfunction remove(elem, selector, keepData) {\n\t\tvar node,\n\t\t\tnodes = selector ? jQuery.filter(selector, elem) : elem,\n\t\t\ti = 0;\n\n\t\tfor (; (node = nodes[i]) != null; i++) {\n\t\t\tif (!keepData && node.nodeType === 1) {\n\t\t\t\tjQuery.cleanData(getAll(node));\n\t\t\t}\n\n\t\t\tif (node.parentNode) {\n\t\t\t\tif (keepData && isAttached(node)) {\n\t\t\t\t\tsetGlobalEval(getAll(node, \"script\"));\n\t\t\t\t}\n\t\t\t\tnode.parentNode.removeChild(node);\n\t\t\t}\n\t\t}\n\n\t\treturn elem;\n\t}\n\n\tjQuery.extend({\n\t\thtmlPrefilter: function (html) {\n\t\t\treturn html;\n\t\t},\n\n\t\tclone: function (elem, dataAndEvents, deepDataAndEvents) {\n\t\t\tvar i, l, srcElements, destElements,\n\t\t\t\tclone = elem.cloneNode(true),\n\t\t\t\tinPage = isAttached(elem);\n\n\t\t\t// Fix IE cloning issues\n\t\t\tif (!support.noCloneChecked && (elem.nodeType === 1 || elem.nodeType === 11) &&\n\t\t\t\t!jQuery.isXMLDoc(elem)) {\n\n\t\t\t\t// We eschew jQuery#find here for performance reasons:\n\t\t\t\t// https://jsperf.com/getall-vs-sizzle/2\n\t\t\t\tdestElements = getAll(clone);\n\t\t\t\tsrcElements = getAll(elem);\n\n\t\t\t\tfor (i = 0, l = srcElements.length; i < l; i++) {\n\t\t\t\t\tfixInput(srcElements[i], destElements[i]);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Copy the events from the original to the clone\n\t\t\tif (dataAndEvents) {\n\t\t\t\tif (deepDataAndEvents) {\n\t\t\t\t\tsrcElements = srcElements || getAll(elem);\n\t\t\t\t\tdestElements = destElements || getAll(clone);\n\n\t\t\t\t\tfor (i = 0, l = srcElements.length; i < l; i++) {\n\t\t\t\t\t\tcloneCopyEvent(srcElements[i], destElements[i]);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tcloneCopyEvent(elem, clone);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Preserve script evaluation history\n\t\t\tdestElements = getAll(clone, \"script\");\n\t\t\tif (destElements.length > 0) {\n\t\t\t\tsetGlobalEval(destElements, !inPage && getAll(elem, \"script\"));\n\t\t\t}\n\n\t\t\t// Return the cloned set\n\t\t\treturn clone;\n\t\t},\n\n\t\tcleanData: function (elems) {\n\t\t\tvar data, elem, type,\n\t\t\t\tspecial = jQuery.event.special,\n\t\t\t\ti = 0;\n\n\t\t\tfor (; (elem = elems[i]) !== undefined; i++) {\n\t\t\t\tif (acceptData(elem)) {\n\t\t\t\t\tif ((data = elem[dataPriv.expando])) {\n\t\t\t\t\t\tif (data.events) {\n\t\t\t\t\t\t\tfor (type in data.events) {\n\t\t\t\t\t\t\t\tif (special[type]) {\n\t\t\t\t\t\t\t\t\tjQuery.event.remove(elem, type);\n\n\t\t\t\t\t\t\t\t\t// This is a shortcut to avoid jQuery.event.remove's overhead\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tjQuery.removeEvent(elem, type, data.handle);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\t\telem[dataPriv.expando] = undefined;\n\t\t\t\t\t}\n\t\t\t\t\tif (elem[dataUser.expando]) {\n\n\t\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\t\telem[dataUser.expando] = undefined;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\n\tjQuery.fn.extend({\n\t\tdetach: function (selector) {\n\t\t\treturn remove(this, selector, true);\n\t\t},\n\n\t\tremove: function (selector) {\n\t\t\treturn remove(this, selector);\n\t\t},\n\n\t\ttext: function (value) {\n\t\t\treturn access(this, function (value) {\n\t\t\t\treturn value === undefined ?\n\t\t\t\t\tjQuery.text(this) :\n\t\t\t\t\tthis.empty().each(function () {\n\t\t\t\t\t\tif (this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9) {\n\t\t\t\t\t\t\tthis.textContent = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t}, null, value, arguments.length);\n\t\t},\n\n\t\tappend: function () {\n\t\t\treturn domManip(this, arguments, function (elem) {\n\t\t\t\tif (this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9) {\n\t\t\t\t\tvar target = manipulationTarget(this, elem);\n\t\t\t\t\ttarget.appendChild(elem);\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\tprepend: function () {\n\t\t\treturn domManip(this, arguments, function (elem) {\n\t\t\t\tif (this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9) {\n\t\t\t\t\tvar target = manipulationTarget(this, elem);\n\t\t\t\t\ttarget.insertBefore(elem, target.firstChild);\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\tbefore: function () {\n\t\t\treturn domManip(this, arguments, function (elem) {\n\t\t\t\tif (this.parentNode) {\n\t\t\t\t\tthis.parentNode.insertBefore(elem, this);\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\tafter: function () {\n\t\t\treturn domManip(this, arguments, function (elem) {\n\t\t\t\tif (this.parentNode) {\n\t\t\t\t\tthis.parentNode.insertBefore(elem, this.nextSibling);\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\tempty: function () {\n\t\t\tvar elem,\n\t\t\t\ti = 0;\n\n\t\t\tfor (; (elem = this[i]) != null; i++) {\n\t\t\t\tif (elem.nodeType === 1) {\n\n\t\t\t\t\t// Prevent memory leaks\n\t\t\t\t\tjQuery.cleanData(getAll(elem, false));\n\n\t\t\t\t\t// Remove any remaining nodes\n\t\t\t\t\telem.textContent = \"\";\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn this;\n\t\t},\n\n\t\tclone: function (dataAndEvents, deepDataAndEvents) {\n\t\t\tdataAndEvents = dataAndEvents == null ? false : dataAndEvents;\n\t\t\tdeepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;\n\n\t\t\treturn this.map(function () {\n\t\t\t\treturn jQuery.clone(this, dataAndEvents, deepDataAndEvents);\n\t\t\t});\n\t\t},\n\n\t\thtml: function (value) {\n\t\t\treturn access(this, function (value) {\n\t\t\t\tvar elem = this[0] || {},\n\t\t\t\t\ti = 0,\n\t\t\t\t\tl = this.length;\n\n\t\t\t\tif (value === undefined && elem.nodeType === 1) {\n\t\t\t\t\treturn elem.innerHTML;\n\t\t\t\t}\n\n\t\t\t\t// See if we can take a shortcut and just use innerHTML\n\t\t\t\tif (typeof value === \"string\" && !rnoInnerhtml.test(value) &&\n\t\t\t\t\t!wrapMap[(rtagName.exec(value) || [\"\", \"\"])[1].toLowerCase()]) {\n\n\t\t\t\t\tvalue = jQuery.htmlPrefilter(value);\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tfor (; i < l; i++) {\n\t\t\t\t\t\t\telem = this[i] || {};\n\n\t\t\t\t\t\t\t// Remove element nodes and prevent memory leaks\n\t\t\t\t\t\t\tif (elem.nodeType === 1) {\n\t\t\t\t\t\t\t\tjQuery.cleanData(getAll(elem, false));\n\t\t\t\t\t\t\t\telem.innerHTML = value;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\telem = 0;\n\n\t\t\t\t\t\t// If using innerHTML throws an exception, use the fallback method\n\t\t\t\t\t} catch (e) { }\n\t\t\t\t}\n\n\t\t\t\tif (elem) {\n\t\t\t\t\tthis.empty().append(value);\n\t\t\t\t}\n\t\t\t}, null, value, arguments.length);\n\t\t},\n\n\t\treplaceWith: function () {\n\t\t\tvar ignored = [];\n\n\t\t\t// Make the changes, replacing each non-ignored context element with the new content\n\t\t\treturn domManip(this, arguments, function (elem) {\n\t\t\t\tvar parent = this.parentNode;\n\n\t\t\t\tif (jQuery.inArray(this, ignored) < 0) {\n\t\t\t\t\tjQuery.cleanData(getAll(this));\n\t\t\t\t\tif (parent) {\n\t\t\t\t\t\tparent.replaceChild(elem, this);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Force callback invocation\n\t\t\t}, ignored);\n\t\t}\n\t});\n\n\tjQuery.each({\n\t\tappendTo: \"append\",\n\t\tprependTo: \"prepend\",\n\t\tinsertBefore: \"before\",\n\t\tinsertAfter: \"after\",\n\t\treplaceAll: \"replaceWith\"\n\t}, function (name, original) {\n\t\tjQuery.fn[name] = function (selector) {\n\t\t\tvar elems,\n\t\t\t\tret = [],\n\t\t\t\tinsert = jQuery(selector),\n\t\t\t\tlast = insert.length - 1,\n\t\t\t\ti = 0;\n\n\t\t\tfor (; i <= last; i++) {\n\t\t\t\telems = i === last ? this : this.clone(true);\n\t\t\t\tjQuery(insert[i])[original](elems);\n\n\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t// .get() because push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\tpush.apply(ret, elems.get());\n\t\t\t}\n\n\t\t\treturn this.pushStack(ret);\n\t\t};\n\t});\n\tvar rnumnonpx = new RegExp(\"^(\" + pnum + \")(?!px)[a-z%]+$\", \"i\");\n\n\tvar rcustomProp = /^--/;\n\n\n\tvar getStyles = function (elem) {\n\n\t\t// Support: IE <=11 only, Firefox <=30 (trac-15098, trac-14150)\n\t\t// IE throws on elements created in popups\n\t\t// FF meanwhile throws on frame elements through \"defaultView.getComputedStyle\"\n\t\tvar view = elem.ownerDocument.defaultView;\n\n\t\tif (!view || !view.opener) {\n\t\t\tview = window;\n\t\t}\n\n\t\treturn view.getComputedStyle(elem);\n\t};\n\n\tvar swap = function (elem, options, callback) {\n\t\tvar ret, name,\n\t\t\told = {};\n\n\t\t// Remember the old values, and insert the new ones\n\t\tfor (name in options) {\n\t\t\told[name] = elem.style[name];\n\t\t\telem.style[name] = options[name];\n\t\t}\n\n\t\tret = callback.call(elem);\n\n\t\t// Revert the old values\n\t\tfor (name in options) {\n\t\t\telem.style[name] = old[name];\n\t\t}\n\n\t\treturn ret;\n\t};\n\n\n\tvar rboxStyle = new RegExp(cssExpand.join(\"|\"), \"i\");\n\n\n\n\t(function () {\n\n\t\t// Executing both pixelPosition & boxSizingReliable tests require only one layout\n\t\t// so they're executed at the same time to save the second computation.\n\t\tfunction computeStyleTests() {\n\n\t\t\t// This is a singleton, we need to execute it only once\n\t\t\tif (!div) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tcontainer.style.cssText = \"position:absolute;left:-11111px;width:60px;\" +\n\t\t\t\t\"margin-top:1px;padding:0;border:0\";\n\t\t\tdiv.style.cssText =\n\t\t\t\t\"position:relative;display:block;box-sizing:border-box;overflow:scroll;\" +\n\t\t\t\t\"margin:auto;border:1px;padding:1px;\" +\n\t\t\t\t\"width:60%;top:1%\";\n\t\t\tdocumentElement.appendChild(container).appendChild(div);\n\n\t\t\tvar divStyle = window.getComputedStyle(div);\n\t\t\tpixelPositionVal = divStyle.top !== \"1%\";\n\n\t\t\t// Support: Android 4.0 - 4.3 only, Firefox <=3 - 44\n\t\t\treliableMarginLeftVal = roundPixelMeasures(divStyle.marginLeft) === 12;\n\n\t\t\t// Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3\n\t\t\t// Some styles come back with percentage values, even though they shouldn't\n\t\t\tdiv.style.right = \"60%\";\n\t\t\tpixelBoxStylesVal = roundPixelMeasures(divStyle.right) === 36;\n\n\t\t\t// Support: IE 9 - 11 only\n\t\t\t// Detect misreporting of content dimensions for box-sizing:border-box elements\n\t\t\tboxSizingReliableVal = roundPixelMeasures(divStyle.width) === 36;\n\n\t\t\t// Support: IE 9 only\n\t\t\t// Detect overflow:scroll screwiness (gh-3699)\n\t\t\t// Support: Chrome <=64\n\t\t\t// Don't get tricked when zoom affects offsetWidth (gh-4029)\n\t\t\tdiv.style.position = \"absolute\";\n\t\t\tscrollboxSizeVal = roundPixelMeasures(div.offsetWidth / 3) === 12;\n\n\t\t\tdocumentElement.removeChild(container);\n\n\t\t\t// Nullify the div so it wouldn't be stored in the memory and\n\t\t\t// it will also be a sign that checks already performed\n\t\t\tdiv = null;\n\t\t}\n\n\t\tfunction roundPixelMeasures(measure) {\n\t\t\treturn Math.round(parseFloat(measure));\n\t\t}\n\n\t\tvar pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal,\n\t\t\treliableTrDimensionsVal, reliableMarginLeftVal,\n\t\t\tcontainer = document.createElement(\"div\"),\n\t\t\tdiv = document.createElement(\"div\");\n\n\t\t// Finish early in limited (non-browser) environments\n\t\tif (!div.style) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Support: IE <=9 - 11 only\n\t\t// Style of cloned element affects source element cloned (trac-8908)\n\t\tdiv.style.backgroundClip = \"content-box\";\n\t\tdiv.cloneNode(true).style.backgroundClip = \"\";\n\t\tsupport.clearCloneStyle = div.style.backgroundClip === \"content-box\";\n\n\t\tjQuery.extend(support, {\n\t\t\tboxSizingReliable: function () {\n\t\t\t\tcomputeStyleTests();\n\t\t\t\treturn boxSizingReliableVal;\n\t\t\t},\n\t\t\tpixelBoxStyles: function () {\n\t\t\t\tcomputeStyleTests();\n\t\t\t\treturn pixelBoxStylesVal;\n\t\t\t},\n\t\t\tpixelPosition: function () {\n\t\t\t\tcomputeStyleTests();\n\t\t\t\treturn pixelPositionVal;\n\t\t\t},\n\t\t\treliableMarginLeft: function () {\n\t\t\t\tcomputeStyleTests();\n\t\t\t\treturn reliableMarginLeftVal;\n\t\t\t},\n\t\t\tscrollboxSize: function () {\n\t\t\t\tcomputeStyleTests();\n\t\t\t\treturn scrollboxSizeVal;\n\t\t\t},\n\n\t\t\t// Support: IE 9 - 11+, Edge 15 - 18+\n\t\t\t// IE/Edge misreport `getComputedStyle` of table rows with width/height\n\t\t\t// set in CSS while `offset*` properties report correct values.\n\t\t\t// Behavior in IE 9 is more subtle than in newer versions & it passes\n\t\t\t// some versions of this test; make sure not to make it pass there!\n\t\t\t//\n\t\t\t// Support: Firefox 70+\n\t\t\t// Only Firefox includes border widths\n\t\t\t// in computed dimensions. (gh-4529)\n\t\t\treliableTrDimensions: function () {\n\t\t\t\tvar table, tr, trChild, trStyle;\n\t\t\t\tif (reliableTrDimensionsVal == null) {\n\t\t\t\t\ttable = document.createElement(\"table\");\n\t\t\t\t\ttr = document.createElement(\"tr\");\n\t\t\t\t\ttrChild = document.createElement(\"div\");\n\n\t\t\t\t\ttable.style.cssText = \"position:absolute;left:-11111px;border-collapse:separate\";\n\t\t\t\t\ttr.style.cssText = \"border:1px solid\";\n\n\t\t\t\t\t// Support: Chrome 86+\n\t\t\t\t\t// Height set through cssText does not get applied.\n\t\t\t\t\t// Computed height then comes back as 0.\n\t\t\t\t\ttr.style.height = \"1px\";\n\t\t\t\t\ttrChild.style.height = \"9px\";\n\n\t\t\t\t\t// Support: Android 8 Chrome 86+\n\t\t\t\t\t// In our bodyBackground.html iframe,\n\t\t\t\t\t// display for all div elements is set to \"inline\",\n\t\t\t\t\t// which causes a problem only in Android 8 Chrome 86.\n\t\t\t\t\t// Ensuring the div is display: block\n\t\t\t\t\t// gets around this issue.\n\t\t\t\t\ttrChild.style.display = \"block\";\n\n\t\t\t\t\tdocumentElement\n\t\t\t\t\t\t.appendChild(table)\n\t\t\t\t\t\t.appendChild(tr)\n\t\t\t\t\t\t.appendChild(trChild);\n\n\t\t\t\t\ttrStyle = window.getComputedStyle(tr);\n\t\t\t\t\treliableTrDimensionsVal = (parseInt(trStyle.height, 10) +\n\t\t\t\t\t\tparseInt(trStyle.borderTopWidth, 10) +\n\t\t\t\t\t\tparseInt(trStyle.borderBottomWidth, 10)) === tr.offsetHeight;\n\n\t\t\t\t\tdocumentElement.removeChild(table);\n\t\t\t\t}\n\t\t\t\treturn reliableTrDimensionsVal;\n\t\t\t}\n\t\t});\n\t})();\n\n\n\tfunction curCSS(elem, name, computed) {\n\t\tvar width, minWidth, maxWidth, ret,\n\t\t\tisCustomProp = rcustomProp.test(name),\n\n\t\t\t// Support: Firefox 51+\n\t\t\t// Retrieving style before computed somehow\n\t\t\t// fixes an issue with getting wrong values\n\t\t\t// on detached elements\n\t\t\tstyle = elem.style;\n\n\t\tcomputed = computed || getStyles(elem);\n\n\t\t// getPropertyValue is needed for:\n\t\t//   .css('filter') (IE 9 only, trac-12537)\n\t\t//   .css('--customProperty) (gh-3144)\n\t\tif (computed) {\n\n\t\t\t// Support: IE <=9 - 11+\n\t\t\t// IE only supports `\"float\"` in `getPropertyValue`; in computed styles\n\t\t\t// it's only available as `\"cssFloat\"`. We no longer modify properties\n\t\t\t// sent to `.css()` apart from camelCasing, so we need to check both.\n\t\t\t// Normally, this would create difference in behavior: if\n\t\t\t// `getPropertyValue` returns an empty string, the value returned\n\t\t\t// by `.css()` would be `undefined`. This is usually the case for\n\t\t\t// disconnected elements. However, in IE even disconnected elements\n\t\t\t// with no styles return `\"none\"` for `getPropertyValue( \"float\" )`\n\t\t\tret = computed.getPropertyValue(name) || computed[name];\n\n\t\t\tif (isCustomProp && ret) {\n\n\t\t\t\t// Support: Firefox 105+, Chrome <=105+\n\t\t\t\t// Spec requires trimming whitespace for custom properties (gh-4926).\n\t\t\t\t// Firefox only trims leading whitespace. Chrome just collapses\n\t\t\t\t// both leading & trailing whitespace to a single space.\n\t\t\t\t//\n\t\t\t\t// Fall back to `undefined` if empty string returned.\n\t\t\t\t// This collapses a missing definition with property defined\n\t\t\t\t// and set to an empty string but there's no standard API\n\t\t\t\t// allowing us to differentiate them without a performance penalty\n\t\t\t\t// and returning `undefined` aligns with older jQuery.\n\t\t\t\t//\n\t\t\t\t// rtrimCSS treats U+000D CARRIAGE RETURN and U+000C FORM FEED\n\t\t\t\t// as whitespace while CSS does not, but this is not a problem\n\t\t\t\t// because CSS preprocessing replaces them with U+000A LINE FEED\n\t\t\t\t// (which *is* CSS whitespace)\n\t\t\t\t// https://www.w3.org/TR/css-syntax-3/#input-preprocessing\n\t\t\t\tret = ret.replace(rtrimCSS, \"$1\") || undefined;\n\t\t\t}\n\n\t\t\tif (ret === \"\" && !isAttached(elem)) {\n\t\t\t\tret = jQuery.style(elem, name);\n\t\t\t}\n\n\t\t\t// A tribute to the \"awesome hack by Dean Edwards\"\n\t\t\t// Android Browser returns percentage for some values,\n\t\t\t// but width seems to be reliably pixels.\n\t\t\t// This is against the CSSOM draft spec:\n\t\t\t// https://drafts.csswg.org/cssom/#resolved-values\n\t\t\tif (!support.pixelBoxStyles() && rnumnonpx.test(ret) && rboxStyle.test(name)) {\n\n\t\t\t\t// Remember the original values\n\t\t\t\twidth = style.width;\n\t\t\t\tminWidth = style.minWidth;\n\t\t\t\tmaxWidth = style.maxWidth;\n\n\t\t\t\t// Put in the new values to get a computed value out\n\t\t\t\tstyle.minWidth = style.maxWidth = style.width = ret;\n\t\t\t\tret = computed.width;\n\n\t\t\t\t// Revert the changed values\n\t\t\t\tstyle.width = width;\n\t\t\t\tstyle.minWidth = minWidth;\n\t\t\t\tstyle.maxWidth = maxWidth;\n\t\t\t}\n\t\t}\n\n\t\treturn ret !== undefined ?\n\n\t\t\t// Support: IE <=9 - 11 only\n\t\t\t// IE returns zIndex value as an integer.\n\t\t\tret + \"\" :\n\t\t\tret;\n\t}\n\n\n\tfunction addGetHookIf(conditionFn, hookFn) {\n\n\t\t// Define the hook, we'll check on the first run if it's really needed.\n\t\treturn {\n\t\t\tget: function () {\n\t\t\t\tif (conditionFn()) {\n\n\t\t\t\t\t// Hook not needed (or it's not possible to use it due\n\t\t\t\t\t// to missing dependency), remove it.\n\t\t\t\t\tdelete this.get;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Hook needed; redefine it so that the support test is not executed again.\n\t\t\t\treturn (this.get = hookFn).apply(this, arguments);\n\t\t\t}\n\t\t};\n\t}\n\n\n\tvar cssPrefixes = [\"Webkit\", \"Moz\", \"ms\"],\n\t\temptyStyle = document.createElement(\"div\").style,\n\t\tvendorProps = {};\n\n\t// Return a vendor-prefixed property or undefined\n\tfunction vendorPropName(name) {\n\n\t\t// Check for vendor prefixed names\n\t\tvar capName = name[0].toUpperCase() + name.slice(1),\n\t\t\ti = cssPrefixes.length;\n\n\t\twhile (i--) {\n\t\t\tname = cssPrefixes[i] + capName;\n\t\t\tif (name in emptyStyle) {\n\t\t\t\treturn name;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return a potentially-mapped jQuery.cssProps or vendor prefixed property\n\tfunction finalPropName(name) {\n\t\tvar final = jQuery.cssProps[name] || vendorProps[name];\n\n\t\tif (final) {\n\t\t\treturn final;\n\t\t}\n\t\tif (name in emptyStyle) {\n\t\t\treturn name;\n\t\t}\n\t\treturn vendorProps[name] = vendorPropName(name) || name;\n\t}\n\n\n\tvar\n\n\t\t// Swappable if display is none or starts with table\n\t\t// except \"table\", \"table-cell\", or \"table-caption\"\n\t\t// See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display\n\t\trdisplayswap = /^(none|table(?!-c[ea]).+)/,\n\t\tcssShow = { position: \"absolute\", visibility: \"hidden\", display: \"block\" },\n\t\tcssNormalTransform = {\n\t\t\tletterSpacing: \"0\",\n\t\t\tfontWeight: \"400\"\n\t\t};\n\n\tfunction setPositiveNumber(_elem, value, subtract) {\n\n\t\t// Any relative (+/-) values have already been\n\t\t// normalized at this point\n\t\tvar matches = rcssNum.exec(value);\n\t\treturn matches ?\n\n\t\t\t// Guard against undefined \"subtract\", e.g., when used as in cssHooks\n\t\t\tMath.max(0, matches[2] - (subtract || 0)) + (matches[3] || \"px\") :\n\t\t\tvalue;\n\t}\n\n\tfunction boxModelAdjustment(elem, dimension, box, isBorderBox, styles, computedVal) {\n\t\tvar i = dimension === \"width\" ? 1 : 0,\n\t\t\textra = 0,\n\t\t\tdelta = 0,\n\t\t\tmarginDelta = 0;\n\n\t\t// Adjustment may not be necessary\n\t\tif (box === (isBorderBox ? \"border\" : \"content\")) {\n\t\t\treturn 0;\n\t\t}\n\n\t\tfor (; i < 4; i += 2) {\n\n\t\t\t// Both box models exclude margin\n\t\t\t// Count margin delta separately to only add it after scroll gutter adjustment.\n\t\t\t// This is needed to make negative margins work with `outerHeight( true )` (gh-3982).\n\t\t\tif (box === \"margin\") {\n\t\t\t\tmarginDelta += jQuery.css(elem, box + cssExpand[i], true, styles);\n\t\t\t}\n\n\t\t\t// If we get here with a content-box, we're seeking \"padding\" or \"border\" or \"margin\"\n\t\t\tif (!isBorderBox) {\n\n\t\t\t\t// Add padding\n\t\t\t\tdelta += jQuery.css(elem, \"padding\" + cssExpand[i], true, styles);\n\n\t\t\t\t// For \"border\" or \"margin\", add border\n\t\t\t\tif (box !== \"padding\") {\n\t\t\t\t\tdelta += jQuery.css(elem, \"border\" + cssExpand[i] + \"Width\", true, styles);\n\n\t\t\t\t\t// But still keep track of it otherwise\n\t\t\t\t} else {\n\t\t\t\t\textra += jQuery.css(elem, \"border\" + cssExpand[i] + \"Width\", true, styles);\n\t\t\t\t}\n\n\t\t\t\t// If we get here with a border-box (content + padding + border), we're seeking \"content\" or\n\t\t\t\t// \"padding\" or \"margin\"\n\t\t\t} else {\n\n\t\t\t\t// For \"content\", subtract padding\n\t\t\t\tif (box === \"content\") {\n\t\t\t\t\tdelta -= jQuery.css(elem, \"padding\" + cssExpand[i], true, styles);\n\t\t\t\t}\n\n\t\t\t\t// For \"content\" or \"padding\", subtract border\n\t\t\t\tif (box !== \"margin\") {\n\t\t\t\t\tdelta -= jQuery.css(elem, \"border\" + cssExpand[i] + \"Width\", true, styles);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Account for positive content-box scroll gutter when requested by providing computedVal\n\t\tif (!isBorderBox && computedVal >= 0) {\n\n\t\t\t// offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border\n\t\t\t// Assuming integer scroll gutter, subtract the rest and round down\n\t\t\tdelta += Math.max(0, Math.ceil(\n\t\t\t\telem[\"offset\" + dimension[0].toUpperCase() + dimension.slice(1)] -\n\t\t\t\tcomputedVal -\n\t\t\t\tdelta -\n\t\t\t\textra -\n\t\t\t\t0.5\n\n\t\t\t\t// If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter\n\t\t\t\t// Use an explicit zero to avoid NaN (gh-3964)\n\t\t\t)) || 0;\n\t\t}\n\n\t\treturn delta + marginDelta;\n\t}\n\n\tfunction getWidthOrHeight(elem, dimension, extra) {\n\n\t\t// Start with computed style\n\t\tvar styles = getStyles(elem),\n\n\t\t\t// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322).\n\t\t\t// Fake content-box until we know it's needed to know the true value.\n\t\t\tboxSizingNeeded = !support.boxSizingReliable() || extra,\n\t\t\tisBorderBox = boxSizingNeeded &&\n\t\t\t\tjQuery.css(elem, \"boxSizing\", false, styles) === \"border-box\",\n\t\t\tvalueIsBorderBox = isBorderBox,\n\n\t\t\tval = curCSS(elem, dimension, styles),\n\t\t\toffsetProp = \"offset\" + dimension[0].toUpperCase() + dimension.slice(1);\n\n\t\t// Support: Firefox <=54\n\t\t// Return a confounding non-pixel value or feign ignorance, as appropriate.\n\t\tif (rnumnonpx.test(val)) {\n\t\t\tif (!extra) {\n\t\t\t\treturn val;\n\t\t\t}\n\t\t\tval = \"auto\";\n\t\t}\n\n\n\t\t// Support: IE 9 - 11 only\n\t\t// Use offsetWidth/offsetHeight for when box sizing is unreliable.\n\t\t// In those cases, the computed value can be trusted to be border-box.\n\t\tif ((!support.boxSizingReliable() && isBorderBox ||\n\n\t\t\t// Support: IE 10 - 11+, Edge 15 - 18+\n\t\t\t// IE/Edge misreport `getComputedStyle` of table rows with width/height\n\t\t\t// set in CSS while `offset*` properties report correct values.\n\t\t\t// Interestingly, in some cases IE 9 doesn't suffer from this issue.\n\t\t\t!support.reliableTrDimensions() && nodeName(elem, \"tr\") ||\n\n\t\t\t// Fall back to offsetWidth/offsetHeight when value is \"auto\"\n\t\t\t// This happens for inline elements with no explicit setting (gh-3571)\n\t\t\tval === \"auto\" ||\n\n\t\t\t// Support: Android <=4.1 - 4.3 only\n\t\t\t// Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602)\n\t\t\t!parseFloat(val) && jQuery.css(elem, \"display\", false, styles) === \"inline\") &&\n\n\t\t\t// Make sure the element is visible & connected\n\t\t\telem.getClientRects().length) {\n\n\t\t\tisBorderBox = jQuery.css(elem, \"boxSizing\", false, styles) === \"border-box\";\n\n\t\t\t// Where available, offsetWidth/offsetHeight approximate border box dimensions.\n\t\t\t// Where not available (e.g., SVG), assume unreliable box-sizing and interpret the\n\t\t\t// retrieved value as a content box dimension.\n\t\t\tvalueIsBorderBox = offsetProp in elem;\n\t\t\tif (valueIsBorderBox) {\n\t\t\t\tval = elem[offsetProp];\n\t\t\t}\n\t\t}\n\n\t\t// Normalize \"\" and auto\n\t\tval = parseFloat(val) || 0;\n\n\t\t// Adjust for the element's box model\n\t\treturn (val +\n\t\t\tboxModelAdjustment(\n\t\t\t\telem,\n\t\t\t\tdimension,\n\t\t\t\textra || (isBorderBox ? \"border\" : \"content\"),\n\t\t\t\tvalueIsBorderBox,\n\t\t\t\tstyles,\n\n\t\t\t\t// Provide the current computed size to request scroll gutter calculation (gh-3589)\n\t\t\t\tval\n\t\t\t)\n\t\t) + \"px\";\n\t}\n\n\tjQuery.extend({\n\n\t\t// Add in style property hooks for overriding the default\n\t\t// behavior of getting and setting a style property\n\t\tcssHooks: {\n\t\t\topacity: {\n\t\t\t\tget: function (elem, computed) {\n\t\t\t\t\tif (computed) {\n\n\t\t\t\t\t\t// We should always get a number back from opacity\n\t\t\t\t\t\tvar ret = curCSS(elem, \"opacity\");\n\t\t\t\t\t\treturn ret === \"\" ? \"1\" : ret;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t// Don't automatically add \"px\" to these possibly-unitless properties\n\t\tcssNumber: {\n\t\t\tanimationIterationCount: true,\n\t\t\taspectRatio: true,\n\t\t\tborderImageSlice: true,\n\t\t\tcolumnCount: true,\n\t\t\tflexGrow: true,\n\t\t\tflexShrink: true,\n\t\t\tfontWeight: true,\n\t\t\tgridArea: true,\n\t\t\tgridColumn: true,\n\t\t\tgridColumnEnd: true,\n\t\t\tgridColumnStart: true,\n\t\t\tgridRow: true,\n\t\t\tgridRowEnd: true,\n\t\t\tgridRowStart: true,\n\t\t\tlineHeight: true,\n\t\t\topacity: true,\n\t\t\torder: true,\n\t\t\torphans: true,\n\t\t\tscale: true,\n\t\t\twidows: true,\n\t\t\tzIndex: true,\n\t\t\tzoom: true,\n\n\t\t\t// SVG-related\n\t\t\tfillOpacity: true,\n\t\t\tfloodOpacity: true,\n\t\t\tstopOpacity: true,\n\t\t\tstrokeMiterlimit: true,\n\t\t\tstrokeOpacity: true\n\t\t},\n\n\t\t// Add in properties whose names you wish to fix before\n\t\t// setting or getting the value\n\t\tcssProps: {},\n\n\t\t// Get and set the style property on a DOM Node\n\t\tstyle: function (elem, name, value, extra) {\n\n\t\t\t// Don't set styles on text and comment nodes\n\t\t\tif (!elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Make sure that we're working with the right name\n\t\t\tvar ret, type, hooks,\n\t\t\t\torigName = camelCase(name),\n\t\t\t\tisCustomProp = rcustomProp.test(name),\n\t\t\t\tstyle = elem.style;\n\n\t\t\t// Make sure that we're working with the right name. We don't\n\t\t\t// want to query the value if it is a CSS custom property\n\t\t\t// since they are user-defined.\n\t\t\tif (!isCustomProp) {\n\t\t\t\tname = finalPropName(origName);\n\t\t\t}\n\n\t\t\t// Gets hook for the prefixed version, then unprefixed version\n\t\t\thooks = jQuery.cssHooks[name] || jQuery.cssHooks[origName];\n\n\t\t\t// Check if we're setting a value\n\t\t\tif (value !== undefined) {\n\t\t\t\ttype = typeof value;\n\n\t\t\t\t// Convert \"+=\" or \"-=\" to relative numbers (trac-7345)\n\t\t\t\tif (type === \"string\" && (ret = rcssNum.exec(value)) && ret[1]) {\n\t\t\t\t\tvalue = adjustCSS(elem, name, ret);\n\n\t\t\t\t\t// Fixes bug trac-9237\n\t\t\t\t\ttype = \"number\";\n\t\t\t\t}\n\n\t\t\t\t// Make sure that null and NaN values aren't set (trac-7116)\n\t\t\t\tif (value == null || value !== value) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// If a number was passed in, add the unit (except for certain CSS properties)\n\t\t\t\t// The isCustomProp check can be removed in jQuery 4.0 when we only auto-append\n\t\t\t\t// \"px\" to a few hardcoded values.\n\t\t\t\tif (type === \"number\" && !isCustomProp) {\n\t\t\t\t\tvalue += ret && ret[3] || (jQuery.cssNumber[origName] ? \"\" : \"px\");\n\t\t\t\t}\n\n\t\t\t\t// background-* props affect original clone's values\n\t\t\t\tif (!support.clearCloneStyle && value === \"\" && name.indexOf(\"background\") === 0) {\n\t\t\t\t\tstyle[name] = \"inherit\";\n\t\t\t\t}\n\n\t\t\t\t// If a hook was provided, use that value, otherwise just set the specified value\n\t\t\t\tif (!hooks || !(\"set\" in hooks) ||\n\t\t\t\t\t(value = hooks.set(elem, value, extra)) !== undefined) {\n\n\t\t\t\t\tif (isCustomProp) {\n\t\t\t\t\t\tstyle.setProperty(name, value);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tstyle[name] = value;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\t// If a hook was provided get the non-computed value from there\n\t\t\t\tif (hooks && \"get\" in hooks &&\n\t\t\t\t\t(ret = hooks.get(elem, false, extra)) !== undefined) {\n\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\n\t\t\t\t// Otherwise just get the value from the style object\n\t\t\t\treturn style[name];\n\t\t\t}\n\t\t},\n\n\t\tcss: function (elem, name, extra, styles) {\n\t\t\tvar val, num, hooks,\n\t\t\t\torigName = camelCase(name),\n\t\t\t\tisCustomProp = rcustomProp.test(name);\n\n\t\t\t// Make sure that we're working with the right name. We don't\n\t\t\t// want to modify the value if it is a CSS custom property\n\t\t\t// since they are user-defined.\n\t\t\tif (!isCustomProp) {\n\t\t\t\tname = finalPropName(origName);\n\t\t\t}\n\n\t\t\t// Try prefixed name followed by the unprefixed name\n\t\t\thooks = jQuery.cssHooks[name] || jQuery.cssHooks[origName];\n\n\t\t\t// If a hook was provided get the computed value from there\n\t\t\tif (hooks && \"get\" in hooks) {\n\t\t\t\tval = hooks.get(elem, true, extra);\n\t\t\t}\n\n\t\t\t// Otherwise, if a way to get the computed value exists, use that\n\t\t\tif (val === undefined) {\n\t\t\t\tval = curCSS(elem, name, styles);\n\t\t\t}\n\n\t\t\t// Convert \"normal\" to computed value\n\t\t\tif (val === \"normal\" && name in cssNormalTransform) {\n\t\t\t\tval = cssNormalTransform[name];\n\t\t\t}\n\n\t\t\t// Make numeric if forced or a qualifier was provided and val looks numeric\n\t\t\tif (extra === \"\" || extra) {\n\t\t\t\tnum = parseFloat(val);\n\t\t\t\treturn extra === true || isFinite(num) ? num || 0 : val;\n\t\t\t}\n\n\t\t\treturn val;\n\t\t}\n\t});\n\n\tjQuery.each([\"height\", \"width\"], function (_i, dimension) {\n\t\tjQuery.cssHooks[dimension] = {\n\t\t\tget: function (elem, computed, extra) {\n\t\t\t\tif (computed) {\n\n\t\t\t\t\t// Certain elements can have dimension info if we invisibly show them\n\t\t\t\t\t// but it must have a current display style that would benefit\n\t\t\t\t\treturn rdisplayswap.test(jQuery.css(elem, \"display\")) &&\n\n\t\t\t\t\t\t// Support: Safari 8+\n\t\t\t\t\t\t// Table columns in Safari have non-zero offsetWidth & zero\n\t\t\t\t\t\t// getBoundingClientRect().width unless display is changed.\n\t\t\t\t\t\t// Support: IE <=11 only\n\t\t\t\t\t\t// Running getBoundingClientRect on a disconnected node\n\t\t\t\t\t\t// in IE throws an error.\n\t\t\t\t\t\t(!elem.getClientRects().length || !elem.getBoundingClientRect().width) ?\n\t\t\t\t\t\tswap(elem, cssShow, function () {\n\t\t\t\t\t\t\treturn getWidthOrHeight(elem, dimension, extra);\n\t\t\t\t\t\t}) :\n\t\t\t\t\t\tgetWidthOrHeight(elem, dimension, extra);\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tset: function (elem, value, extra) {\n\t\t\t\tvar matches,\n\t\t\t\t\tstyles = getStyles(elem),\n\n\t\t\t\t\t// Only read styles.position if the test has a chance to fail\n\t\t\t\t\t// to avoid forcing a reflow.\n\t\t\t\t\tscrollboxSizeBuggy = !support.scrollboxSize() &&\n\t\t\t\t\t\tstyles.position === \"absolute\",\n\n\t\t\t\t\t// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991)\n\t\t\t\t\tboxSizingNeeded = scrollboxSizeBuggy || extra,\n\t\t\t\t\tisBorderBox = boxSizingNeeded &&\n\t\t\t\t\t\tjQuery.css(elem, \"boxSizing\", false, styles) === \"border-box\",\n\t\t\t\t\tsubtract = extra ?\n\t\t\t\t\t\tboxModelAdjustment(\n\t\t\t\t\t\t\telem,\n\t\t\t\t\t\t\tdimension,\n\t\t\t\t\t\t\textra,\n\t\t\t\t\t\t\tisBorderBox,\n\t\t\t\t\t\t\tstyles\n\t\t\t\t\t\t) :\n\t\t\t\t\t\t0;\n\n\t\t\t\t// Account for unreliable border-box dimensions by comparing offset* to computed and\n\t\t\t\t// faking a content-box to get border and padding (gh-3699)\n\t\t\t\tif (isBorderBox && scrollboxSizeBuggy) {\n\t\t\t\t\tsubtract -= Math.ceil(\n\t\t\t\t\t\telem[\"offset\" + dimension[0].toUpperCase() + dimension.slice(1)] -\n\t\t\t\t\t\tparseFloat(styles[dimension]) -\n\t\t\t\t\t\tboxModelAdjustment(elem, dimension, \"border\", false, styles) -\n\t\t\t\t\t\t0.5\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\t// Convert to pixels if value adjustment is needed\n\t\t\t\tif (subtract && (matches = rcssNum.exec(value)) &&\n\t\t\t\t\t(matches[3] || \"px\") !== \"px\") {\n\n\t\t\t\t\telem.style[dimension] = value;\n\t\t\t\t\tvalue = jQuery.css(elem, dimension);\n\t\t\t\t}\n\n\t\t\t\treturn setPositiveNumber(elem, value, subtract);\n\t\t\t}\n\t\t};\n\t});\n\n\tjQuery.cssHooks.marginLeft = addGetHookIf(support.reliableMarginLeft,\n\t\tfunction (elem, computed) {\n\t\t\tif (computed) {\n\t\t\t\treturn (parseFloat(curCSS(elem, \"marginLeft\")) ||\n\t\t\t\t\telem.getBoundingClientRect().left -\n\t\t\t\t\tswap(elem, { marginLeft: 0 }, function () {\n\t\t\t\t\t\treturn elem.getBoundingClientRect().left;\n\t\t\t\t\t})\n\t\t\t\t) + \"px\";\n\t\t\t}\n\t\t}\n\t);\n\n\t// These hooks are used by animate to expand properties\n\tjQuery.each({\n\t\tmargin: \"\",\n\t\tpadding: \"\",\n\t\tborder: \"Width\"\n\t}, function (prefix, suffix) {\n\t\tjQuery.cssHooks[prefix + suffix] = {\n\t\t\texpand: function (value) {\n\t\t\t\tvar i = 0,\n\t\t\t\t\texpanded = {},\n\n\t\t\t\t\t// Assumes a single number if not a string\n\t\t\t\t\tparts = typeof value === \"string\" ? value.split(\" \") : [value];\n\n\t\t\t\tfor (; i < 4; i++) {\n\t\t\t\t\texpanded[prefix + cssExpand[i] + suffix] =\n\t\t\t\t\t\tparts[i] || parts[i - 2] || parts[0];\n\t\t\t\t}\n\n\t\t\t\treturn expanded;\n\t\t\t}\n\t\t};\n\n\t\tif (prefix !== \"margin\") {\n\t\t\tjQuery.cssHooks[prefix + suffix].set = setPositiveNumber;\n\t\t}\n\t});\n\n\tjQuery.fn.extend({\n\t\tcss: function (name, value) {\n\t\t\treturn access(this, function (elem, name, value) {\n\t\t\t\tvar styles, len,\n\t\t\t\t\tmap = {},\n\t\t\t\t\ti = 0;\n\n\t\t\t\tif (Array.isArray(name)) {\n\t\t\t\t\tstyles = getStyles(elem);\n\t\t\t\t\tlen = name.length;\n\n\t\t\t\t\tfor (; i < len; i++) {\n\t\t\t\t\t\tmap[name[i]] = jQuery.css(elem, name[i], false, styles);\n\t\t\t\t\t}\n\n\t\t\t\t\treturn map;\n\t\t\t\t}\n\n\t\t\t\treturn value !== undefined ?\n\t\t\t\t\tjQuery.style(elem, name, value) :\n\t\t\t\t\tjQuery.css(elem, name);\n\t\t\t}, name, value, arguments.length > 1);\n\t\t}\n\t});\n\n\n\tfunction Tween(elem, options, prop, end, easing) {\n\t\treturn new Tween.prototype.init(elem, options, prop, end, easing);\n\t}\n\tjQuery.Tween = Tween;\n\n\tTween.prototype = {\n\t\tconstructor: Tween,\n\t\tinit: function (elem, options, prop, end, easing, unit) {\n\t\t\tthis.elem = elem;\n\t\t\tthis.prop = prop;\n\t\t\tthis.easing = easing || jQuery.easing._default;\n\t\t\tthis.options = options;\n\t\t\tthis.start = this.now = this.cur();\n\t\t\tthis.end = end;\n\t\t\tthis.unit = unit || (jQuery.cssNumber[prop] ? \"\" : \"px\");\n\t\t},\n\t\tcur: function () {\n\t\t\tvar hooks = Tween.propHooks[this.prop];\n\n\t\t\treturn hooks && hooks.get ?\n\t\t\t\thooks.get(this) :\n\t\t\t\tTween.propHooks._default.get(this);\n\t\t},\n\t\trun: function (percent) {\n\t\t\tvar eased,\n\t\t\t\thooks = Tween.propHooks[this.prop];\n\n\t\t\tif (this.options.duration) {\n\t\t\t\tthis.pos = eased = jQuery.easing[this.easing](\n\t\t\t\t\tpercent, this.options.duration * percent, 0, 1, this.options.duration\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tthis.pos = eased = percent;\n\t\t\t}\n\t\t\tthis.now = (this.end - this.start) * eased + this.start;\n\n\t\t\tif (this.options.step) {\n\t\t\t\tthis.options.step.call(this.elem, this.now, this);\n\t\t\t}\n\n\t\t\tif (hooks && hooks.set) {\n\t\t\t\thooks.set(this);\n\t\t\t} else {\n\t\t\t\tTween.propHooks._default.set(this);\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t};\n\n\tTween.prototype.init.prototype = Tween.prototype;\n\n\tTween.propHooks = {\n\t\t_default: {\n\t\t\tget: function (tween) {\n\t\t\t\tvar result;\n\n\t\t\t\t// Use a property on the element directly when it is not a DOM element,\n\t\t\t\t// or when there is no matching style property that exists.\n\t\t\t\tif (tween.elem.nodeType !== 1 ||\n\t\t\t\t\ttween.elem[tween.prop] != null && tween.elem.style[tween.prop] == null) {\n\t\t\t\t\treturn tween.elem[tween.prop];\n\t\t\t\t}\n\n\t\t\t\t// Passing an empty string as a 3rd parameter to .css will automatically\n\t\t\t\t// attempt a parseFloat and fallback to a string if the parse fails.\n\t\t\t\t// Simple values such as \"10px\" are parsed to Float;\n\t\t\t\t// complex values such as \"rotate(1rad)\" are returned as-is.\n\t\t\t\tresult = jQuery.css(tween.elem, tween.prop, \"\");\n\n\t\t\t\t// Empty strings, null, undefined and \"auto\" are converted to 0.\n\t\t\t\treturn !result || result === \"auto\" ? 0 : result;\n\t\t\t},\n\t\t\tset: function (tween) {\n\n\t\t\t\t// Use step hook for back compat.\n\t\t\t\t// Use cssHook if its there.\n\t\t\t\t// Use .style if available and use plain properties where available.\n\t\t\t\tif (jQuery.fx.step[tween.prop]) {\n\t\t\t\t\tjQuery.fx.step[tween.prop](tween);\n\t\t\t\t} else if (tween.elem.nodeType === 1 && (\n\t\t\t\t\tjQuery.cssHooks[tween.prop] ||\n\t\t\t\t\ttween.elem.style[finalPropName(tween.prop)] != null)) {\n\t\t\t\t\tjQuery.style(tween.elem, tween.prop, tween.now + tween.unit);\n\t\t\t\t} else {\n\t\t\t\t\ttween.elem[tween.prop] = tween.now;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t// Support: IE <=9 only\n\t// Panic based approach to setting things on disconnected nodes\n\tTween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {\n\t\tset: function (tween) {\n\t\t\tif (tween.elem.nodeType && tween.elem.parentNode) {\n\t\t\t\ttween.elem[tween.prop] = tween.now;\n\t\t\t}\n\t\t}\n\t};\n\n\tjQuery.easing = {\n\t\tlinear: function (p) {\n\t\t\treturn p;\n\t\t},\n\t\tswing: function (p) {\n\t\t\treturn 0.5 - Math.cos(p * Math.PI) / 2;\n\t\t},\n\t\t_default: \"swing\"\n\t};\n\n\tjQuery.fx = Tween.prototype.init;\n\n\t// Back compat <1.8 extension point\n\tjQuery.fx.step = {};\n\n\n\n\n\tvar\n\t\tfxNow, inProgress,\n\t\trfxtypes = /^(?:toggle|show|hide)$/,\n\t\trrun = /queueHooks$/;\n\n\tfunction schedule() {\n\t\tif (inProgress) {\n\t\t\tif (document.hidden === false && window.requestAnimationFrame) {\n\t\t\t\twindow.requestAnimationFrame(schedule);\n\t\t\t} else {\n\t\t\t\twindow.setTimeout(schedule, jQuery.fx.interval);\n\t\t\t}\n\n\t\t\tjQuery.fx.tick();\n\t\t}\n\t}\n\n\t// Animations created synchronously will run synchronously\n\tfunction createFxNow() {\n\t\twindow.setTimeout(function () {\n\t\t\tfxNow = undefined;\n\t\t});\n\t\treturn (fxNow = Date.now());\n\t}\n\n\t// Generate parameters to create a standard animation\n\tfunction genFx(type, includeWidth) {\n\t\tvar which,\n\t\t\ti = 0,\n\t\t\tattrs = { height: type };\n\n\t\t// If we include width, step value is 1 to do all cssExpand values,\n\t\t// otherwise step value is 2 to skip over Left and Right\n\t\tincludeWidth = includeWidth ? 1 : 0;\n\t\tfor (; i < 4; i += 2 - includeWidth) {\n\t\t\twhich = cssExpand[i];\n\t\t\tattrs[\"margin\" + which] = attrs[\"padding\" + which] = type;\n\t\t}\n\n\t\tif (includeWidth) {\n\t\t\tattrs.opacity = attrs.width = type;\n\t\t}\n\n\t\treturn attrs;\n\t}\n\n\tfunction createTween(value, prop, animation) {\n\t\tvar tween,\n\t\t\tcollection = (Animation.tweeners[prop] || []).concat(Animation.tweeners[\"*\"]),\n\t\t\tindex = 0,\n\t\t\tlength = collection.length;\n\t\tfor (; index < length; index++) {\n\t\t\tif ((tween = collection[index].call(animation, prop, value))) {\n\n\t\t\t\t// We're done with this property\n\t\t\t\treturn tween;\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction defaultPrefilter(elem, props, opts) {\n\t\tvar prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display,\n\t\t\tisBox = \"width\" in props || \"height\" in props,\n\t\t\tanim = this,\n\t\t\torig = {},\n\t\t\tstyle = elem.style,\n\t\t\thidden = elem.nodeType && isHiddenWithinTree(elem),\n\t\t\tdataShow = dataPriv.get(elem, \"fxshow\");\n\n\t\t// Queue-skipping animations hijack the fx hooks\n\t\tif (!opts.queue) {\n\t\t\thooks = jQuery._queueHooks(elem, \"fx\");\n\t\t\tif (hooks.unqueued == null) {\n\t\t\t\thooks.unqueued = 0;\n\t\t\t\toldfire = hooks.empty.fire;\n\t\t\t\thooks.empty.fire = function () {\n\t\t\t\t\tif (!hooks.unqueued) {\n\t\t\t\t\t\toldfire();\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t\thooks.unqueued++;\n\n\t\t\tanim.always(function () {\n\n\t\t\t\t// Ensure the complete handler is called before this completes\n\t\t\t\tanim.always(function () {\n\t\t\t\t\thooks.unqueued--;\n\t\t\t\t\tif (!jQuery.queue(elem, \"fx\").length) {\n\t\t\t\t\t\thooks.empty.fire();\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\n\t\t// Detect show/hide animations\n\t\tfor (prop in props) {\n\t\t\tvalue = props[prop];\n\t\t\tif (rfxtypes.test(value)) {\n\t\t\t\tdelete props[prop];\n\t\t\t\ttoggle = toggle || value === \"toggle\";\n\t\t\t\tif (value === (hidden ? \"hide\" : \"show\")) {\n\n\t\t\t\t\t// Pretend to be hidden if this is a \"show\" and\n\t\t\t\t\t// there is still data from a stopped show/hide\n\t\t\t\t\tif (value === \"show\" && dataShow && dataShow[prop] !== undefined) {\n\t\t\t\t\t\thidden = true;\n\n\t\t\t\t\t\t// Ignore all other no-op show/hide data\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\torig[prop] = dataShow && dataShow[prop] || jQuery.style(elem, prop);\n\t\t\t}\n\t\t}\n\n\t\t// Bail out if this is a no-op like .hide().hide()\n\t\tpropTween = !jQuery.isEmptyObject(props);\n\t\tif (!propTween && jQuery.isEmptyObject(orig)) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Restrict \"overflow\" and \"display\" styles during box animations\n\t\tif (isBox && elem.nodeType === 1) {\n\n\t\t\t// Support: IE <=9 - 11, Edge 12 - 15\n\t\t\t// Record all 3 overflow attributes because IE does not infer the shorthand\n\t\t\t// from identically-valued overflowX and overflowY and Edge just mirrors\n\t\t\t// the overflowX value there.\n\t\t\topts.overflow = [style.overflow, style.overflowX, style.overflowY];\n\n\t\t\t// Identify a display type, preferring old show/hide data over the CSS cascade\n\t\t\trestoreDisplay = dataShow && dataShow.display;\n\t\t\tif (restoreDisplay == null) {\n\t\t\t\trestoreDisplay = dataPriv.get(elem, \"display\");\n\t\t\t}\n\t\t\tdisplay = jQuery.css(elem, \"display\");\n\t\t\tif (display === \"none\") {\n\t\t\t\tif (restoreDisplay) {\n\t\t\t\t\tdisplay = restoreDisplay;\n\t\t\t\t} else {\n\n\t\t\t\t\t// Get nonempty value(s) by temporarily forcing visibility\n\t\t\t\t\tshowHide([elem], true);\n\t\t\t\t\trestoreDisplay = elem.style.display || restoreDisplay;\n\t\t\t\t\tdisplay = jQuery.css(elem, \"display\");\n\t\t\t\t\tshowHide([elem]);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Animate inline elements as inline-block\n\t\t\tif (display === \"inline\" || display === \"inline-block\" && restoreDisplay != null) {\n\t\t\t\tif (jQuery.css(elem, \"float\") === \"none\") {\n\n\t\t\t\t\t// Restore the original display value at the end of pure show/hide animations\n\t\t\t\t\tif (!propTween) {\n\t\t\t\t\t\tanim.done(function () {\n\t\t\t\t\t\t\tstyle.display = restoreDisplay;\n\t\t\t\t\t\t});\n\t\t\t\t\t\tif (restoreDisplay == null) {\n\t\t\t\t\t\t\tdisplay = style.display;\n\t\t\t\t\t\t\trestoreDisplay = display === \"none\" ? \"\" : display;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tstyle.display = \"inline-block\";\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (opts.overflow) {\n\t\t\tstyle.overflow = \"hidden\";\n\t\t\tanim.always(function () {\n\t\t\t\tstyle.overflow = opts.overflow[0];\n\t\t\t\tstyle.overflowX = opts.overflow[1];\n\t\t\t\tstyle.overflowY = opts.overflow[2];\n\t\t\t});\n\t\t}\n\n\t\t// Implement show/hide animations\n\t\tpropTween = false;\n\t\tfor (prop in orig) {\n\n\t\t\t// General show/hide setup for this element animation\n\t\t\tif (!propTween) {\n\t\t\t\tif (dataShow) {\n\t\t\t\t\tif (\"hidden\" in dataShow) {\n\t\t\t\t\t\thidden = dataShow.hidden;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tdataShow = dataPriv.access(elem, \"fxshow\", { display: restoreDisplay });\n\t\t\t\t}\n\n\t\t\t\t// Store hidden/visible for toggle so `.stop().toggle()` \"reverses\"\n\t\t\t\tif (toggle) {\n\t\t\t\t\tdataShow.hidden = !hidden;\n\t\t\t\t}\n\n\t\t\t\t// Show elements before animating them\n\t\t\t\tif (hidden) {\n\t\t\t\t\tshowHide([elem], true);\n\t\t\t\t}\n\n\t\t\t\t/* eslint-disable no-loop-func */\n\n\t\t\t\tanim.done(function () {\n\n\t\t\t\t\t/* eslint-enable no-loop-func */\n\n\t\t\t\t\t// The final step of a \"hide\" animation is actually hiding the element\n\t\t\t\t\tif (!hidden) {\n\t\t\t\t\t\tshowHide([elem]);\n\t\t\t\t\t}\n\t\t\t\t\tdataPriv.remove(elem, \"fxshow\");\n\t\t\t\t\tfor (prop in orig) {\n\t\t\t\t\t\tjQuery.style(elem, prop, orig[prop]);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// Per-property setup\n\t\t\tpropTween = createTween(hidden ? dataShow[prop] : 0, prop, anim);\n\t\t\tif (!(prop in dataShow)) {\n\t\t\t\tdataShow[prop] = propTween.start;\n\t\t\t\tif (hidden) {\n\t\t\t\t\tpropTween.end = propTween.start;\n\t\t\t\t\tpropTween.start = 0;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction propFilter(props, specialEasing) {\n\t\tvar index, name, easing, value, hooks;\n\n\t\t// camelCase, specialEasing and expand cssHook pass\n\t\tfor (index in props) {\n\t\t\tname = camelCase(index);\n\t\t\teasing = specialEasing[name];\n\t\t\tvalue = props[index];\n\t\t\tif (Array.isArray(value)) {\n\t\t\t\teasing = value[1];\n\t\t\t\tvalue = props[index] = value[0];\n\t\t\t}\n\n\t\t\tif (index !== name) {\n\t\t\t\tprops[name] = value;\n\t\t\t\tdelete props[index];\n\t\t\t}\n\n\t\t\thooks = jQuery.cssHooks[name];\n\t\t\tif (hooks && \"expand\" in hooks) {\n\t\t\t\tvalue = hooks.expand(value);\n\t\t\t\tdelete props[name];\n\n\t\t\t\t// Not quite $.extend, this won't overwrite existing keys.\n\t\t\t\t// Reusing 'index' because we have the correct \"name\"\n\t\t\t\tfor (index in value) {\n\t\t\t\t\tif (!(index in props)) {\n\t\t\t\t\t\tprops[index] = value[index];\n\t\t\t\t\t\tspecialEasing[index] = easing;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tspecialEasing[name] = easing;\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction Animation(elem, properties, options) {\n\t\tvar result,\n\t\t\tstopped,\n\t\t\tindex = 0,\n\t\t\tlength = Animation.prefilters.length,\n\t\t\tdeferred = jQuery.Deferred().always(function () {\n\n\t\t\t\t// Don't match elem in the :animated selector\n\t\t\t\tdelete tick.elem;\n\t\t\t}),\n\t\t\ttick = function () {\n\t\t\t\tif (stopped) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tvar currentTime = fxNow || createFxNow(),\n\t\t\t\t\tremaining = Math.max(0, animation.startTime + animation.duration - currentTime),\n\n\t\t\t\t\t// Support: Android 2.3 only\n\t\t\t\t\t// Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (trac-12497)\n\t\t\t\t\ttemp = remaining / animation.duration || 0,\n\t\t\t\t\tpercent = 1 - temp,\n\t\t\t\t\tindex = 0,\n\t\t\t\t\tlength = animation.tweens.length;\n\n\t\t\t\tfor (; index < length; index++) {\n\t\t\t\t\tanimation.tweens[index].run(percent);\n\t\t\t\t}\n\n\t\t\t\tdeferred.notifyWith(elem, [animation, percent, remaining]);\n\n\t\t\t\t// If there's more to do, yield\n\t\t\t\tif (percent < 1 && length) {\n\t\t\t\t\treturn remaining;\n\t\t\t\t}\n\n\t\t\t\t// If this was an empty animation, synthesize a final progress notification\n\t\t\t\tif (!length) {\n\t\t\t\t\tdeferred.notifyWith(elem, [animation, 1, 0]);\n\t\t\t\t}\n\n\t\t\t\t// Resolve the animation and report its conclusion\n\t\t\t\tdeferred.resolveWith(elem, [animation]);\n\t\t\t\treturn false;\n\t\t\t},\n\t\t\tanimation = deferred.promise({\n\t\t\t\telem: elem,\n\t\t\t\tprops: jQuery.extend({}, properties),\n\t\t\t\topts: jQuery.extend(true, {\n\t\t\t\t\tspecialEasing: {},\n\t\t\t\t\teasing: jQuery.easing._default\n\t\t\t\t}, options),\n\t\t\t\toriginalProperties: properties,\n\t\t\t\toriginalOptions: options,\n\t\t\t\tstartTime: fxNow || createFxNow(),\n\t\t\t\tduration: options.duration,\n\t\t\t\ttweens: [],\n\t\t\t\tcreateTween: function (prop, end) {\n\t\t\t\t\tvar tween = jQuery.Tween(elem, animation.opts, prop, end,\n\t\t\t\t\t\tanimation.opts.specialEasing[prop] || animation.opts.easing);\n\t\t\t\t\tanimation.tweens.push(tween);\n\t\t\t\t\treturn tween;\n\t\t\t\t},\n\t\t\t\tstop: function (gotoEnd) {\n\t\t\t\t\tvar index = 0,\n\n\t\t\t\t\t\t// If we are going to the end, we want to run all the tweens\n\t\t\t\t\t\t// otherwise we skip this part\n\t\t\t\t\t\tlength = gotoEnd ? animation.tweens.length : 0;\n\t\t\t\t\tif (stopped) {\n\t\t\t\t\t\treturn this;\n\t\t\t\t\t}\n\t\t\t\t\tstopped = true;\n\t\t\t\t\tfor (; index < length; index++) {\n\t\t\t\t\t\tanimation.tweens[index].run(1);\n\t\t\t\t\t}\n\n\t\t\t\t\t// Resolve when we played the last frame; otherwise, reject\n\t\t\t\t\tif (gotoEnd) {\n\t\t\t\t\t\tdeferred.notifyWith(elem, [animation, 1, 0]);\n\t\t\t\t\t\tdeferred.resolveWith(elem, [animation, gotoEnd]);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdeferred.rejectWith(elem, [animation, gotoEnd]);\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t}),\n\t\t\tprops = animation.props;\n\n\t\tpropFilter(props, animation.opts.specialEasing);\n\n\t\tfor (; index < length; index++) {\n\t\t\tresult = Animation.prefilters[index].call(animation, elem, props, animation.opts);\n\t\t\tif (result) {\n\t\t\t\tif (isFunction(result.stop)) {\n\t\t\t\t\tjQuery._queueHooks(animation.elem, animation.opts.queue).stop =\n\t\t\t\t\t\tresult.stop.bind(result);\n\t\t\t\t}\n\t\t\t\treturn result;\n\t\t\t}\n\t\t}\n\n\t\tjQuery.map(props, createTween, animation);\n\n\t\tif (isFunction(animation.opts.start)) {\n\t\t\tanimation.opts.start.call(elem, animation);\n\t\t}\n\n\t\t// Attach callbacks from options\n\t\tanimation\n\t\t\t.progress(animation.opts.progress)\n\t\t\t.done(animation.opts.done, animation.opts.complete)\n\t\t\t.fail(animation.opts.fail)\n\t\t\t.always(animation.opts.always);\n\n\t\tjQuery.fx.timer(\n\t\t\tjQuery.extend(tick, {\n\t\t\t\telem: elem,\n\t\t\t\tanim: animation,\n\t\t\t\tqueue: animation.opts.queue\n\t\t\t})\n\t\t);\n\n\t\treturn animation;\n\t}\n\n\tjQuery.Animation = jQuery.extend(Animation, {\n\n\t\ttweeners: {\n\t\t\t\"*\": [function (prop, value) {\n\t\t\t\tvar tween = this.createTween(prop, value);\n\t\t\t\tadjustCSS(tween.elem, prop, rcssNum.exec(value), tween);\n\t\t\t\treturn tween;\n\t\t\t}]\n\t\t},\n\n\t\ttweener: function (props, callback) {\n\t\t\tif (isFunction(props)) {\n\t\t\t\tcallback = props;\n\t\t\t\tprops = [\"*\"];\n\t\t\t} else {\n\t\t\t\tprops = props.match(rnothtmlwhite);\n\t\t\t}\n\n\t\t\tvar prop,\n\t\t\t\tindex = 0,\n\t\t\t\tlength = props.length;\n\n\t\t\tfor (; index < length; index++) {\n\t\t\t\tprop = props[index];\n\t\t\t\tAnimation.tweeners[prop] = Animation.tweeners[prop] || [];\n\t\t\t\tAnimation.tweeners[prop].unshift(callback);\n\t\t\t}\n\t\t},\n\n\t\tprefilters: [defaultPrefilter],\n\n\t\tprefilter: function (callback, prepend) {\n\t\t\tif (prepend) {\n\t\t\t\tAnimation.prefilters.unshift(callback);\n\t\t\t} else {\n\t\t\t\tAnimation.prefilters.push(callback);\n\t\t\t}\n\t\t}\n\t});\n\n\tjQuery.speed = function (speed, easing, fn) {\n\t\tvar opt = speed && typeof speed === \"object\" ? jQuery.extend({}, speed) : {\n\t\t\tcomplete: fn || !fn && easing ||\n\t\t\t\tisFunction(speed) && speed,\n\t\t\tduration: speed,\n\t\t\teasing: fn && easing || easing && !isFunction(easing) && easing\n\t\t};\n\n\t\t// Go to the end state if fx are off\n\t\tif (jQuery.fx.off) {\n\t\t\topt.duration = 0;\n\n\t\t} else {\n\t\t\tif (typeof opt.duration !== \"number\") {\n\t\t\t\tif (opt.duration in jQuery.fx.speeds) {\n\t\t\t\t\topt.duration = jQuery.fx.speeds[opt.duration];\n\n\t\t\t\t} else {\n\t\t\t\t\topt.duration = jQuery.fx.speeds._default;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Normalize opt.queue - true/undefined/null -> \"fx\"\n\t\tif (opt.queue == null || opt.queue === true) {\n\t\t\topt.queue = \"fx\";\n\t\t}\n\n\t\t// Queueing\n\t\topt.old = opt.complete;\n\n\t\topt.complete = function () {\n\t\t\tif (isFunction(opt.old)) {\n\t\t\t\topt.old.call(this);\n\t\t\t}\n\n\t\t\tif (opt.queue) {\n\t\t\t\tjQuery.dequeue(this, opt.queue);\n\t\t\t}\n\t\t};\n\n\t\treturn opt;\n\t};\n\n\tjQuery.fn.extend({\n\t\tfadeTo: function (speed, to, easing, callback) {\n\n\t\t\t// Show any hidden elements after setting opacity to 0\n\t\t\treturn this.filter(isHiddenWithinTree).css(\"opacity\", 0).show()\n\n\t\t\t\t// Animate to the value specified\n\t\t\t\t.end().animate({ opacity: to }, speed, easing, callback);\n\t\t},\n\t\tanimate: function (prop, speed, easing, callback) {\n\t\t\tvar empty = jQuery.isEmptyObject(prop),\n\t\t\t\toptall = jQuery.speed(speed, easing, callback),\n\t\t\t\tdoAnimation = function () {\n\n\t\t\t\t\t// Operate on a copy of prop so per-property easing won't be lost\n\t\t\t\t\tvar anim = Animation(this, jQuery.extend({}, prop), optall);\n\n\t\t\t\t\t// Empty animations, or finishing resolves immediately\n\t\t\t\t\tif (empty || dataPriv.get(this, \"finish\")) {\n\t\t\t\t\t\tanim.stop(true);\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\tdoAnimation.finish = doAnimation;\n\n\t\t\treturn empty || optall.queue === false ?\n\t\t\t\tthis.each(doAnimation) :\n\t\t\t\tthis.queue(optall.queue, doAnimation);\n\t\t},\n\t\tstop: function (type, clearQueue, gotoEnd) {\n\t\t\tvar stopQueue = function (hooks) {\n\t\t\t\tvar stop = hooks.stop;\n\t\t\t\tdelete hooks.stop;\n\t\t\t\tstop(gotoEnd);\n\t\t\t};\n\n\t\t\tif (typeof type !== \"string\") {\n\t\t\t\tgotoEnd = clearQueue;\n\t\t\t\tclearQueue = type;\n\t\t\t\ttype = undefined;\n\t\t\t}\n\t\t\tif (clearQueue) {\n\t\t\t\tthis.queue(type || \"fx\", []);\n\t\t\t}\n\n\t\t\treturn this.each(function () {\n\t\t\t\tvar dequeue = true,\n\t\t\t\t\tindex = type != null && type + \"queueHooks\",\n\t\t\t\t\ttimers = jQuery.timers,\n\t\t\t\t\tdata = dataPriv.get(this);\n\n\t\t\t\tif (index) {\n\t\t\t\t\tif (data[index] && data[index].stop) {\n\t\t\t\t\t\tstopQueue(data[index]);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tfor (index in data) {\n\t\t\t\t\t\tif (data[index] && data[index].stop && rrun.test(index)) {\n\t\t\t\t\t\t\tstopQueue(data[index]);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tfor (index = timers.length; index--;) {\n\t\t\t\t\tif (timers[index].elem === this &&\n\t\t\t\t\t\t(type == null || timers[index].queue === type)) {\n\n\t\t\t\t\t\ttimers[index].anim.stop(gotoEnd);\n\t\t\t\t\t\tdequeue = false;\n\t\t\t\t\t\ttimers.splice(index, 1);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Start the next in the queue if the last step wasn't forced.\n\t\t\t\t// Timers currently will call their complete callbacks, which\n\t\t\t\t// will dequeue but only if they were gotoEnd.\n\t\t\t\tif (dequeue || !gotoEnd) {\n\t\t\t\t\tjQuery.dequeue(this, type);\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\t\tfinish: function (type) {\n\t\t\tif (type !== false) {\n\t\t\t\ttype = type || \"fx\";\n\t\t\t}\n\t\t\treturn this.each(function () {\n\t\t\t\tvar index,\n\t\t\t\t\tdata = dataPriv.get(this),\n\t\t\t\t\tqueue = data[type + \"queue\"],\n\t\t\t\t\thooks = data[type + \"queueHooks\"],\n\t\t\t\t\ttimers = jQuery.timers,\n\t\t\t\t\tlength = queue ? queue.length : 0;\n\n\t\t\t\t// Enable finishing flag on private data\n\t\t\t\tdata.finish = true;\n\n\t\t\t\t// Empty the queue first\n\t\t\t\tjQuery.queue(this, type, []);\n\n\t\t\t\tif (hooks && hooks.stop) {\n\t\t\t\t\thooks.stop.call(this, true);\n\t\t\t\t}\n\n\t\t\t\t// Look for any active animations, and finish them\n\t\t\t\tfor (index = timers.length; index--;) {\n\t\t\t\t\tif (timers[index].elem === this && timers[index].queue === type) {\n\t\t\t\t\t\ttimers[index].anim.stop(true);\n\t\t\t\t\t\ttimers.splice(index, 1);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Look for any animations in the old queue and finish them\n\t\t\t\tfor (index = 0; index < length; index++) {\n\t\t\t\t\tif (queue[index] && queue[index].finish) {\n\t\t\t\t\t\tqueue[index].finish.call(this);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Turn off finishing flag\n\t\t\t\tdelete data.finish;\n\t\t\t});\n\t\t}\n\t});\n\n\tjQuery.each([\"toggle\", \"show\", \"hide\"], function (_i, name) {\n\t\tvar cssFn = jQuery.fn[name];\n\t\tjQuery.fn[name] = function (speed, easing, callback) {\n\t\t\treturn speed == null || typeof speed === \"boolean\" ?\n\t\t\t\tcssFn.apply(this, arguments) :\n\t\t\t\tthis.animate(genFx(name, true), speed, easing, callback);\n\t\t};\n\t});\n\n\t// Generate shortcuts for custom animations\n\tjQuery.each({\n\t\tslideDown: genFx(\"show\"),\n\t\tslideUp: genFx(\"hide\"),\n\t\tslideToggle: genFx(\"toggle\"),\n\t\tfadeIn: { opacity: \"show\" },\n\t\tfadeOut: { opacity: \"hide\" },\n\t\tfadeToggle: { opacity: \"toggle\" }\n\t}, function (name, props) {\n\t\tjQuery.fn[name] = function (speed, easing, callback) {\n\t\t\treturn this.animate(props, speed, easing, callback);\n\t\t};\n\t});\n\n\tjQuery.timers = [];\n\tjQuery.fx.tick = function () {\n\t\tvar timer,\n\t\t\ti = 0,\n\t\t\ttimers = jQuery.timers;\n\n\t\tfxNow = Date.now();\n\n\t\tfor (; i < timers.length; i++) {\n\t\t\ttimer = timers[i];\n\n\t\t\t// Run the timer and safely remove it when done (allowing for external removal)\n\t\t\tif (!timer() && timers[i] === timer) {\n\t\t\t\ttimers.splice(i--, 1);\n\t\t\t}\n\t\t}\n\n\t\tif (!timers.length) {\n\t\t\tjQuery.fx.stop();\n\t\t}\n\t\tfxNow = undefined;\n\t};\n\n\tjQuery.fx.timer = function (timer) {\n\t\tjQuery.timers.push(timer);\n\t\tjQuery.fx.start();\n\t};\n\n\tjQuery.fx.interval = 13;\n\tjQuery.fx.start = function () {\n\t\tif (inProgress) {\n\t\t\treturn;\n\t\t}\n\n\t\tinProgress = true;\n\t\tschedule();\n\t};\n\n\tjQuery.fx.stop = function () {\n\t\tinProgress = null;\n\t};\n\n\tjQuery.fx.speeds = {\n\t\tslow: 600,\n\t\tfast: 200,\n\n\t\t// Default speed\n\t\t_default: 400\n\t};\n\n\n\t// Based off of the plugin by Clint Helfers, with permission.\n\tjQuery.fn.delay = function (time, type) {\n\t\ttime = jQuery.fx ? jQuery.fx.speeds[time] || time : time;\n\t\ttype = type || \"fx\";\n\n\t\treturn this.queue(type, function (next, hooks) {\n\t\t\tvar timeout = window.setTimeout(next, time);\n\t\t\thooks.stop = function () {\n\t\t\t\twindow.clearTimeout(timeout);\n\t\t\t};\n\t\t});\n\t};\n\n\n\t(function () {\n\t\tvar input = document.createElement(\"input\"),\n\t\t\tselect = document.createElement(\"select\"),\n\t\t\topt = select.appendChild(document.createElement(\"option\"));\n\n\t\tinput.type = \"checkbox\";\n\n\t\t// Support: Android <=4.3 only\n\t\t// Default value for a checkbox should be \"on\"\n\t\tsupport.checkOn = input.value !== \"\";\n\n\t\t// Support: IE <=11 only\n\t\t// Must access selectedIndex to make default options select\n\t\tsupport.optSelected = opt.selected;\n\n\t\t// Support: IE <=11 only\n\t\t// An input loses its value after becoming a radio\n\t\tinput = document.createElement(\"input\");\n\t\tinput.value = \"t\";\n\t\tinput.type = \"radio\";\n\t\tsupport.radioValue = input.value === \"t\";\n\t})();\n\n\n\tvar boolHook,\n\t\tattrHandle = jQuery.expr.attrHandle;\n\n\tjQuery.fn.extend({\n\t\tattr: function (name, value) {\n\t\t\treturn access(this, jQuery.attr, name, value, arguments.length > 1);\n\t\t},\n\n\t\tremoveAttr: function (name) {\n\t\t\treturn this.each(function () {\n\t\t\t\tjQuery.removeAttr(this, name);\n\t\t\t});\n\t\t}\n\t});\n\n\tjQuery.extend({\n\t\tattr: function (elem, name, value) {\n\t\t\tvar ret, hooks,\n\t\t\t\tnType = elem.nodeType;\n\n\t\t\t// Don't get/set attributes on text, comment and attribute nodes\n\t\t\tif (nType === 3 || nType === 8 || nType === 2) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Fallback to prop when attributes are not supported\n\t\t\tif (typeof elem.getAttribute === \"undefined\") {\n\t\t\t\treturn jQuery.prop(elem, name, value);\n\t\t\t}\n\n\t\t\t// Attribute hooks are determined by the lowercase version\n\t\t\t// Grab necessary hook if one is defined\n\t\t\tif (nType !== 1 || !jQuery.isXMLDoc(elem)) {\n\t\t\t\thooks = jQuery.attrHooks[name.toLowerCase()] ||\n\t\t\t\t\t(jQuery.expr.match.bool.test(name) ? boolHook : undefined);\n\t\t\t}\n\n\t\t\tif (value !== undefined) {\n\t\t\t\tif (value === null) {\n\t\t\t\t\tjQuery.removeAttr(elem, name);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (hooks && \"set\" in hooks &&\n\t\t\t\t\t(ret = hooks.set(elem, value, name)) !== undefined) {\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\n\t\t\t\telem.setAttribute(name, value + \"\");\n\t\t\t\treturn value;\n\t\t\t}\n\n\t\t\tif (hooks && \"get\" in hooks && (ret = hooks.get(elem, name)) !== null) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\tret = jQuery.find.attr(elem, name);\n\n\t\t\t// Non-existent attributes return null, we normalize to undefined\n\t\t\treturn ret == null ? undefined : ret;\n\t\t},\n\n\t\tattrHooks: {\n\t\t\ttype: {\n\t\t\t\tset: function (elem, value) {\n\t\t\t\t\tif (!support.radioValue && value === \"radio\" &&\n\t\t\t\t\t\tnodeName(elem, \"input\")) {\n\t\t\t\t\t\tvar val = elem.value;\n\t\t\t\t\t\telem.setAttribute(\"type\", value);\n\t\t\t\t\t\tif (val) {\n\t\t\t\t\t\t\telem.value = val;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn value;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tremoveAttr: function (elem, value) {\n\t\t\tvar name,\n\t\t\t\ti = 0,\n\n\t\t\t\t// Attribute names can contain non-HTML whitespace characters\n\t\t\t\t// https://html.spec.whatwg.org/multipage/syntax.html#attributes-2\n\t\t\t\tattrNames = value && value.match(rnothtmlwhite);\n\n\t\t\tif (attrNames && elem.nodeType === 1) {\n\t\t\t\twhile ((name = attrNames[i++])) {\n\t\t\t\t\telem.removeAttribute(name);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\n\t// Hooks for boolean attributes\n\tboolHook = {\n\t\tset: function (elem, value, name) {\n\t\t\tif (value === false) {\n\n\t\t\t\t// Remove boolean attributes when set to false\n\t\t\t\tjQuery.removeAttr(elem, name);\n\t\t\t} else {\n\t\t\t\telem.setAttribute(name, name);\n\t\t\t}\n\t\t\treturn name;\n\t\t}\n\t};\n\n\tjQuery.each(jQuery.expr.match.bool.source.match(/\\w+/g), function (_i, name) {\n\t\tvar getter = attrHandle[name] || jQuery.find.attr;\n\n\t\tattrHandle[name] = function (elem, name, isXML) {\n\t\t\tvar ret, handle,\n\t\t\t\tlowercaseName = name.toLowerCase();\n\n\t\t\tif (!isXML) {\n\n\t\t\t\t// Avoid an infinite loop by temporarily removing this function from the getter\n\t\t\t\thandle = attrHandle[lowercaseName];\n\t\t\t\tattrHandle[lowercaseName] = ret;\n\t\t\t\tret = getter(elem, name, isXML) != null ?\n\t\t\t\t\tlowercaseName :\n\t\t\t\t\tnull;\n\t\t\t\tattrHandle[lowercaseName] = handle;\n\t\t\t}\n\t\t\treturn ret;\n\t\t};\n\t});\n\n\n\n\n\tvar rfocusable = /^(?:input|select|textarea|button)$/i,\n\t\trclickable = /^(?:a|area)$/i;\n\n\tjQuery.fn.extend({\n\t\tprop: function (name, value) {\n\t\t\treturn access(this, jQuery.prop, name, value, arguments.length > 1);\n\t\t},\n\n\t\tremoveProp: function (name) {\n\t\t\treturn this.each(function () {\n\t\t\t\tdelete this[jQuery.propFix[name] || name];\n\t\t\t});\n\t\t}\n\t});\n\n\tjQuery.extend({\n\t\tprop: function (elem, name, value) {\n\t\t\tvar ret, hooks,\n\t\t\t\tnType = elem.nodeType;\n\n\t\t\t// Don't get/set properties on text, comment and attribute nodes\n\t\t\tif (nType === 3 || nType === 8 || nType === 2) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (nType !== 1 || !jQuery.isXMLDoc(elem)) {\n\n\t\t\t\t// Fix name and attach hooks\n\t\t\t\tname = jQuery.propFix[name] || name;\n\t\t\t\thooks = jQuery.propHooks[name];\n\t\t\t}\n\n\t\t\tif (value !== undefined) {\n\t\t\t\tif (hooks && \"set\" in hooks &&\n\t\t\t\t\t(ret = hooks.set(elem, value, name)) !== undefined) {\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\n\t\t\t\treturn (elem[name] = value);\n\t\t\t}\n\n\t\t\tif (hooks && \"get\" in hooks && (ret = hooks.get(elem, name)) !== null) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\treturn elem[name];\n\t\t},\n\n\t\tpropHooks: {\n\t\t\ttabIndex: {\n\t\t\t\tget: function (elem) {\n\n\t\t\t\t\t// Support: IE <=9 - 11 only\n\t\t\t\t\t// elem.tabIndex doesn't always return the\n\t\t\t\t\t// correct value when it hasn't been explicitly set\n\t\t\t\t\t// Use proper attribute retrieval (trac-12072)\n\t\t\t\t\tvar tabindex = jQuery.find.attr(elem, \"tabindex\");\n\n\t\t\t\t\tif (tabindex) {\n\t\t\t\t\t\treturn parseInt(tabindex, 10);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (\n\t\t\t\t\t\trfocusable.test(elem.nodeName) ||\n\t\t\t\t\t\trclickable.test(elem.nodeName) &&\n\t\t\t\t\t\telem.href\n\t\t\t\t\t) {\n\t\t\t\t\t\treturn 0;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn -1;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tpropFix: {\n\t\t\t\"for\": \"htmlFor\",\n\t\t\t\"class\": \"className\"\n\t\t}\n\t});\n\n\t// Support: IE <=11 only\n\t// Accessing the selectedIndex property\n\t// forces the browser to respect setting selected\n\t// on the option\n\t// The getter ensures a default option is selected\n\t// when in an optgroup\n\t// eslint rule \"no-unused-expressions\" is disabled for this code\n\t// since it considers such accessions noop\n\tif (!support.optSelected) {\n\t\tjQuery.propHooks.selected = {\n\t\t\tget: function (elem) {\n\n\t\t\t\t/* eslint no-unused-expressions: \"off\" */\n\n\t\t\t\tvar parent = elem.parentNode;\n\t\t\t\tif (parent && parent.parentNode) {\n\t\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t\t}\n\t\t\t\treturn null;\n\t\t\t},\n\t\t\tset: function (elem) {\n\n\t\t\t\t/* eslint no-unused-expressions: \"off\" */\n\n\t\t\t\tvar parent = elem.parentNode;\n\t\t\t\tif (parent) {\n\t\t\t\t\tparent.selectedIndex;\n\n\t\t\t\t\tif (parent.parentNode) {\n\t\t\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n\n\tjQuery.each([\n\t\t\"tabIndex\",\n\t\t\"readOnly\",\n\t\t\"maxLength\",\n\t\t\"cellSpacing\",\n\t\t\"cellPadding\",\n\t\t\"rowSpan\",\n\t\t\"colSpan\",\n\t\t\"useMap\",\n\t\t\"frameBorder\",\n\t\t\"contentEditable\"\n\t], function () {\n\t\tjQuery.propFix[this.toLowerCase()] = this;\n\t});\n\n\n\n\n\t// Strip and collapse whitespace according to HTML spec\n\t// https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace\n\tfunction stripAndCollapse(value) {\n\t\tvar tokens = value.match(rnothtmlwhite) || [];\n\t\treturn tokens.join(\" \");\n\t}\n\n\n\tfunction getClass(elem) {\n\t\treturn elem.getAttribute && elem.getAttribute(\"class\") || \"\";\n\t}\n\n\tfunction classesToArray(value) {\n\t\tif (Array.isArray(value)) {\n\t\t\treturn value;\n\t\t}\n\t\tif (typeof value === \"string\") {\n\t\t\treturn value.match(rnothtmlwhite) || [];\n\t\t}\n\t\treturn [];\n\t}\n\n\tjQuery.fn.extend({\n\t\taddClass: function (value) {\n\t\t\tvar classNames, cur, curValue, className, i, finalValue;\n\n\t\t\tif (isFunction(value)) {\n\t\t\t\treturn this.each(function (j) {\n\t\t\t\t\tjQuery(this).addClass(value.call(this, j, getClass(this)));\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tclassNames = classesToArray(value);\n\n\t\t\tif (classNames.length) {\n\t\t\t\treturn this.each(function () {\n\t\t\t\t\tcurValue = getClass(this);\n\t\t\t\t\tcur = this.nodeType === 1 && (\" \" + stripAndCollapse(curValue) + \" \");\n\n\t\t\t\t\tif (cur) {\n\t\t\t\t\t\tfor (i = 0; i < classNames.length; i++) {\n\t\t\t\t\t\t\tclassName = classNames[i];\n\t\t\t\t\t\t\tif (cur.indexOf(\" \" + className + \" \") < 0) {\n\t\t\t\t\t\t\t\tcur += className + \" \";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\t\tfinalValue = stripAndCollapse(cur);\n\t\t\t\t\t\tif (curValue !== finalValue) {\n\t\t\t\t\t\t\tthis.setAttribute(\"class\", finalValue);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn this;\n\t\t},\n\n\t\tremoveClass: function (value) {\n\t\t\tvar classNames, cur, curValue, className, i, finalValue;\n\n\t\t\tif (isFunction(value)) {\n\t\t\t\treturn this.each(function (j) {\n\t\t\t\t\tjQuery(this).removeClass(value.call(this, j, getClass(this)));\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (!arguments.length) {\n\t\t\t\treturn this.attr(\"class\", \"\");\n\t\t\t}\n\n\t\t\tclassNames = classesToArray(value);\n\n\t\t\tif (classNames.length) {\n\t\t\t\treturn this.each(function () {\n\t\t\t\t\tcurValue = getClass(this);\n\n\t\t\t\t\t// This expression is here for better compressibility (see addClass)\n\t\t\t\t\tcur = this.nodeType === 1 && (\" \" + stripAndCollapse(curValue) + \" \");\n\n\t\t\t\t\tif (cur) {\n\t\t\t\t\t\tfor (i = 0; i < classNames.length; i++) {\n\t\t\t\t\t\t\tclassName = classNames[i];\n\n\t\t\t\t\t\t\t// Remove *all* instances\n\t\t\t\t\t\t\twhile (cur.indexOf(\" \" + className + \" \") > -1) {\n\t\t\t\t\t\t\t\tcur = cur.replace(\" \" + className + \" \", \" \");\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\t\tfinalValue = stripAndCollapse(cur);\n\t\t\t\t\t\tif (curValue !== finalValue) {\n\t\t\t\t\t\t\tthis.setAttribute(\"class\", finalValue);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn this;\n\t\t},\n\n\t\ttoggleClass: function (value, stateVal) {\n\t\t\tvar classNames, className, i, self,\n\t\t\t\ttype = typeof value,\n\t\t\t\tisValidValue = type === \"string\" || Array.isArray(value);\n\n\t\t\tif (isFunction(value)) {\n\t\t\t\treturn this.each(function (i) {\n\t\t\t\t\tjQuery(this).toggleClass(\n\t\t\t\t\t\tvalue.call(this, i, getClass(this), stateVal),\n\t\t\t\t\t\tstateVal\n\t\t\t\t\t);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (typeof stateVal === \"boolean\" && isValidValue) {\n\t\t\t\treturn stateVal ? this.addClass(value) : this.removeClass(value);\n\t\t\t}\n\n\t\t\tclassNames = classesToArray(value);\n\n\t\t\treturn this.each(function () {\n\t\t\t\tif (isValidValue) {\n\n\t\t\t\t\t// Toggle individual class names\n\t\t\t\t\tself = jQuery(this);\n\n\t\t\t\t\tfor (i = 0; i < classNames.length; i++) {\n\t\t\t\t\t\tclassName = classNames[i];\n\n\t\t\t\t\t\t// Check each className given, space separated list\n\t\t\t\t\t\tif (self.hasClass(className)) {\n\t\t\t\t\t\t\tself.removeClass(className);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tself.addClass(className);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Toggle whole class name\n\t\t\t\t} else if (value === undefined || type === \"boolean\") {\n\t\t\t\t\tclassName = getClass(this);\n\t\t\t\t\tif (className) {\n\n\t\t\t\t\t\t// Store className if set\n\t\t\t\t\t\tdataPriv.set(this, \"__className__\", className);\n\t\t\t\t\t}\n\n\t\t\t\t\t// If the element has a class name or if we're passed `false`,\n\t\t\t\t\t// then remove the whole classname (if there was one, the above saved it).\n\t\t\t\t\t// Otherwise bring back whatever was previously saved (if anything),\n\t\t\t\t\t// falling back to the empty string if nothing was stored.\n\t\t\t\t\tif (this.setAttribute) {\n\t\t\t\t\t\tthis.setAttribute(\"class\",\n\t\t\t\t\t\t\tclassName || value === false ?\n\t\t\t\t\t\t\t\t\"\" :\n\t\t\t\t\t\t\t\tdataPriv.get(this, \"__className__\") || \"\"\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\thasClass: function (selector) {\n\t\t\tvar className, elem,\n\t\t\t\ti = 0;\n\n\t\t\tclassName = \" \" + selector + \" \";\n\t\t\twhile ((elem = this[i++])) {\n\t\t\t\tif (elem.nodeType === 1 &&\n\t\t\t\t\t(\" \" + stripAndCollapse(getClass(elem)) + \" \").indexOf(className) > -1) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn false;\n\t\t}\n\t});\n\n\n\n\n\tvar rreturn = /\\r/g;\n\n\tjQuery.fn.extend({\n\t\tval: function (value) {\n\t\t\tvar hooks, ret, valueIsFunction,\n\t\t\t\telem = this[0];\n\n\t\t\tif (!arguments.length) {\n\t\t\t\tif (elem) {\n\t\t\t\t\thooks = jQuery.valHooks[elem.type] ||\n\t\t\t\t\t\tjQuery.valHooks[elem.nodeName.toLowerCase()];\n\n\t\t\t\t\tif (hooks &&\n\t\t\t\t\t\t\"get\" in hooks &&\n\t\t\t\t\t\t(ret = hooks.get(elem, \"value\")) !== undefined\n\t\t\t\t\t) {\n\t\t\t\t\t\treturn ret;\n\t\t\t\t\t}\n\n\t\t\t\t\tret = elem.value;\n\n\t\t\t\t\t// Handle most common string cases\n\t\t\t\t\tif (typeof ret === \"string\") {\n\t\t\t\t\t\treturn ret.replace(rreturn, \"\");\n\t\t\t\t\t}\n\n\t\t\t\t\t// Handle cases where value is null/undef or number\n\t\t\t\t\treturn ret == null ? \"\" : ret;\n\t\t\t\t}\n\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvalueIsFunction = isFunction(value);\n\n\t\t\treturn this.each(function (i) {\n\t\t\t\tvar val;\n\n\t\t\t\tif (this.nodeType !== 1) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (valueIsFunction) {\n\t\t\t\t\tval = value.call(this, i, jQuery(this).val());\n\t\t\t\t} else {\n\t\t\t\t\tval = value;\n\t\t\t\t}\n\n\t\t\t\t// Treat null/undefined as \"\"; convert numbers to string\n\t\t\t\tif (val == null) {\n\t\t\t\t\tval = \"\";\n\n\t\t\t\t} else if (typeof val === \"number\") {\n\t\t\t\t\tval += \"\";\n\n\t\t\t\t} else if (Array.isArray(val)) {\n\t\t\t\t\tval = jQuery.map(val, function (value) {\n\t\t\t\t\t\treturn value == null ? \"\" : value + \"\";\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\thooks = jQuery.valHooks[this.type] || jQuery.valHooks[this.nodeName.toLowerCase()];\n\n\t\t\t\t// If set returns undefined, fall back to normal setting\n\t\t\t\tif (!hooks || !(\"set\" in hooks) || hooks.set(this, val, \"value\") === undefined) {\n\t\t\t\t\tthis.value = val;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t});\n\n\tjQuery.extend({\n\t\tvalHooks: {\n\t\t\toption: {\n\t\t\t\tget: function (elem) {\n\n\t\t\t\t\tvar val = jQuery.find.attr(elem, \"value\");\n\t\t\t\t\treturn val != null ?\n\t\t\t\t\t\tval :\n\n\t\t\t\t\t\t// Support: IE <=10 - 11 only\n\t\t\t\t\t\t// option.text throws exceptions (trac-14686, trac-14858)\n\t\t\t\t\t\t// Strip and collapse whitespace\n\t\t\t\t\t\t// https://html.spec.whatwg.org/#strip-and-collapse-whitespace\n\t\t\t\t\t\tstripAndCollapse(jQuery.text(elem));\n\t\t\t\t}\n\t\t\t},\n\t\t\tselect: {\n\t\t\t\tget: function (elem) {\n\t\t\t\t\tvar value, option, i,\n\t\t\t\t\t\toptions = elem.options,\n\t\t\t\t\t\tindex = elem.selectedIndex,\n\t\t\t\t\t\tone = elem.type === \"select-one\",\n\t\t\t\t\t\tvalues = one ? null : [],\n\t\t\t\t\t\tmax = one ? index + 1 : options.length;\n\n\t\t\t\t\tif (index < 0) {\n\t\t\t\t\t\ti = max;\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\ti = one ? index : 0;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Loop through all the selected options\n\t\t\t\t\tfor (; i < max; i++) {\n\t\t\t\t\t\toption = options[i];\n\n\t\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t\t// IE8-9 doesn't update selected after form reset (trac-2551)\n\t\t\t\t\t\tif ((option.selected || i === index) &&\n\n\t\t\t\t\t\t\t// Don't return options that are disabled or in a disabled optgroup\n\t\t\t\t\t\t\t!option.disabled &&\n\t\t\t\t\t\t\t(!option.parentNode.disabled ||\n\t\t\t\t\t\t\t\t!nodeName(option.parentNode, \"optgroup\"))) {\n\n\t\t\t\t\t\t\t// Get the specific value for the option\n\t\t\t\t\t\t\tvalue = jQuery(option).val();\n\n\t\t\t\t\t\t\t// We don't need an array for one selects\n\t\t\t\t\t\t\tif (one) {\n\t\t\t\t\t\t\t\treturn value;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Multi-Selects return an array\n\t\t\t\t\t\t\tvalues.push(value);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn values;\n\t\t\t\t},\n\n\t\t\t\tset: function (elem, value) {\n\t\t\t\t\tvar optionSet, option,\n\t\t\t\t\t\toptions = elem.options,\n\t\t\t\t\t\tvalues = jQuery.makeArray(value),\n\t\t\t\t\t\ti = options.length;\n\n\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\toption = options[i];\n\n\t\t\t\t\t\t/* eslint-disable no-cond-assign */\n\n\t\t\t\t\t\tif (option.selected =\n\t\t\t\t\t\t\tjQuery.inArray(jQuery.valHooks.option.get(option), values) > -1\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\toptionSet = true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t/* eslint-enable no-cond-assign */\n\t\t\t\t\t}\n\n\t\t\t\t\t// Force browsers to behave consistently when non-matching value is set\n\t\t\t\t\tif (!optionSet) {\n\t\t\t\t\t\telem.selectedIndex = -1;\n\t\t\t\t\t}\n\t\t\t\t\treturn values;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\n\t// Radios and checkboxes getter/setter\n\tjQuery.each([\"radio\", \"checkbox\"], function () {\n\t\tjQuery.valHooks[this] = {\n\t\t\tset: function (elem, value) {\n\t\t\t\tif (Array.isArray(value)) {\n\t\t\t\t\treturn (elem.checked = jQuery.inArray(jQuery(elem).val(), value) > -1);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\tif (!support.checkOn) {\n\t\t\tjQuery.valHooks[this].get = function (elem) {\n\t\t\t\treturn elem.getAttribute(\"value\") === null ? \"on\" : elem.value;\n\t\t\t};\n\t\t}\n\t});\n\n\n\n\n\t// Return jQuery for attributes-only inclusion\n\tvar location = window.location;\n\n\tvar nonce = { guid: Date.now() };\n\n\tvar rquery = (/\\?/);\n\n\n\n\t// Cross-browser xml parsing\n\tjQuery.parseXML = function (data) {\n\t\tvar xml, parserErrorElem;\n\t\tif (!data || typeof data !== \"string\") {\n\t\t\treturn null;\n\t\t}\n\n\t\t// Support: IE 9 - 11 only\n\t\t// IE throws on parseFromString with invalid input.\n\t\ttry {\n\t\t\txml = (new window.DOMParser()).parseFromString(data, \"text/xml\");\n\t\t} catch (e) { }\n\n\t\tparserErrorElem = xml && xml.getElementsByTagName(\"parsererror\")[0];\n\t\tif (!xml || parserErrorElem) {\n\t\t\tjQuery.error(\"Invalid XML: \" + (\n\t\t\t\tparserErrorElem ?\n\t\t\t\t\tjQuery.map(parserErrorElem.childNodes, function (el) {\n\t\t\t\t\t\treturn el.textContent;\n\t\t\t\t\t}).join(\"\\n\") :\n\t\t\t\t\tdata\n\t\t\t));\n\t\t}\n\t\treturn xml;\n\t};\n\n\n\tvar rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,\n\t\tstopPropagationCallback = function (e) {\n\t\t\te.stopPropagation();\n\t\t};\n\n\tjQuery.extend(jQuery.event, {\n\n\t\ttrigger: function (event, data, elem, onlyHandlers) {\n\n\t\t\tvar i, cur, tmp, bubbleType, ontype, handle, special, lastElement,\n\t\t\t\teventPath = [elem || document],\n\t\t\t\ttype = hasOwn.call(event, \"type\") ? event.type : event,\n\t\t\t\tnamespaces = hasOwn.call(event, \"namespace\") ? event.namespace.split(\".\") : [];\n\n\t\t\tcur = lastElement = tmp = elem = elem || document;\n\n\t\t\t// Don't do events on text and comment nodes\n\t\t\tif (elem.nodeType === 3 || elem.nodeType === 8) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// focus/blur morphs to focusin/out; ensure we're not firing them right now\n\t\t\tif (rfocusMorph.test(type + jQuery.event.triggered)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (type.indexOf(\".\") > -1) {\n\n\t\t\t\t// Namespaced trigger; create a regexp to match event type in handle()\n\t\t\t\tnamespaces = type.split(\".\");\n\t\t\t\ttype = namespaces.shift();\n\t\t\t\tnamespaces.sort();\n\t\t\t}\n\t\t\tontype = type.indexOf(\":\") < 0 && \"on\" + type;\n\n\t\t\t// Caller can pass in a jQuery.Event object, Object, or just an event type string\n\t\t\tevent = event[jQuery.expando] ?\n\t\t\t\tevent :\n\t\t\t\tnew jQuery.Event(type, typeof event === \"object\" && event);\n\n\t\t\t// Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)\n\t\t\tevent.isTrigger = onlyHandlers ? 2 : 3;\n\t\t\tevent.namespace = namespaces.join(\".\");\n\t\t\tevent.rnamespace = event.namespace ?\n\t\t\t\tnew RegExp(\"(^|\\\\.)\" + namespaces.join(\"\\\\.(?:.*\\\\.|)\") + \"(\\\\.|$)\") :\n\t\t\t\tnull;\n\n\t\t\t// Clean up the event in case it is being reused\n\t\t\tevent.result = undefined;\n\t\t\tif (!event.target) {\n\t\t\t\tevent.target = elem;\n\t\t\t}\n\n\t\t\t// Clone any incoming data and prepend the event, creating the handler arg list\n\t\t\tdata = data == null ?\n\t\t\t\t[event] :\n\t\t\t\tjQuery.makeArray(data, [event]);\n\n\t\t\t// Allow special events to draw outside the lines\n\t\t\tspecial = jQuery.event.special[type] || {};\n\t\t\tif (!onlyHandlers && special.trigger && special.trigger.apply(elem, data) === false) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Determine event propagation path in advance, per W3C events spec (trac-9951)\n\t\t\t// Bubble up to document, then to window; watch for a global ownerDocument var (trac-9724)\n\t\t\tif (!onlyHandlers && !special.noBubble && !isWindow(elem)) {\n\n\t\t\t\tbubbleType = special.delegateType || type;\n\t\t\t\tif (!rfocusMorph.test(bubbleType + type)) {\n\t\t\t\t\tcur = cur.parentNode;\n\t\t\t\t}\n\t\t\t\tfor (; cur; cur = cur.parentNode) {\n\t\t\t\t\teventPath.push(cur);\n\t\t\t\t\ttmp = cur;\n\t\t\t\t}\n\n\t\t\t\t// Only add window if we got to document (e.g., not plain obj or detached DOM)\n\t\t\t\tif (tmp === (elem.ownerDocument || document)) {\n\t\t\t\t\teventPath.push(tmp.defaultView || tmp.parentWindow || window);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Fire handlers on the event path\n\t\t\ti = 0;\n\t\t\twhile ((cur = eventPath[i++]) && !event.isPropagationStopped()) {\n\t\t\t\tlastElement = cur;\n\t\t\t\tevent.type = i > 1 ?\n\t\t\t\t\tbubbleType :\n\t\t\t\t\tspecial.bindType || type;\n\n\t\t\t\t// jQuery handler\n\t\t\t\thandle = (dataPriv.get(cur, \"events\") || Object.create(null))[event.type] &&\n\t\t\t\t\tdataPriv.get(cur, \"handle\");\n\t\t\t\tif (handle) {\n\t\t\t\t\thandle.apply(cur, data);\n\t\t\t\t}\n\n\t\t\t\t// Native handler\n\t\t\t\thandle = ontype && cur[ontype];\n\t\t\t\tif (handle && handle.apply && acceptData(cur)) {\n\t\t\t\t\tevent.result = handle.apply(cur, data);\n\t\t\t\t\tif (event.result === false) {\n\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tevent.type = type;\n\n\t\t\t// If nobody prevented the default action, do it now\n\t\t\tif (!onlyHandlers && !event.isDefaultPrevented()) {\n\n\t\t\t\tif ((!special._default ||\n\t\t\t\t\tspecial._default.apply(eventPath.pop(), data) === false) &&\n\t\t\t\t\tacceptData(elem)) {\n\n\t\t\t\t\t// Call a native DOM method on the target with the same name as the event.\n\t\t\t\t\t// Don't do default actions on window, that's where global variables be (trac-6170)\n\t\t\t\t\tif (ontype && isFunction(elem[type]) && !isWindow(elem)) {\n\n\t\t\t\t\t\t// Don't re-trigger an onFOO event when we call its FOO() method\n\t\t\t\t\t\ttmp = elem[ontype];\n\n\t\t\t\t\t\tif (tmp) {\n\t\t\t\t\t\t\telem[ontype] = null;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Prevent re-triggering of the same event, since we already bubbled it above\n\t\t\t\t\t\tjQuery.event.triggered = type;\n\n\t\t\t\t\t\tif (event.isPropagationStopped()) {\n\t\t\t\t\t\t\tlastElement.addEventListener(type, stopPropagationCallback);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\telem[type]();\n\n\t\t\t\t\t\tif (event.isPropagationStopped()) {\n\t\t\t\t\t\t\tlastElement.removeEventListener(type, stopPropagationCallback);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tjQuery.event.triggered = undefined;\n\n\t\t\t\t\t\tif (tmp) {\n\t\t\t\t\t\t\telem[ontype] = tmp;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn event.result;\n\t\t},\n\n\t\t// Piggyback on a donor event to simulate a different one\n\t\t// Used only for `focus(in | out)` events\n\t\tsimulate: function (type, elem, event) {\n\t\t\tvar e = jQuery.extend(\n\t\t\t\tnew jQuery.Event(),\n\t\t\t\tevent,\n\t\t\t\t{\n\t\t\t\t\ttype: type,\n\t\t\t\t\tisSimulated: true\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tjQuery.event.trigger(e, null, elem);\n\t\t}\n\n\t});\n\n\tjQuery.fn.extend({\n\n\t\ttrigger: function (type, data) {\n\t\t\treturn this.each(function () {\n\t\t\t\tjQuery.event.trigger(type, data, this);\n\t\t\t});\n\t\t},\n\t\ttriggerHandler: function (type, data) {\n\t\t\tvar elem = this[0];\n\t\t\tif (elem) {\n\t\t\t\treturn jQuery.event.trigger(type, data, elem, true);\n\t\t\t}\n\t\t}\n\t});\n\n\n\tvar\n\t\trbracket = /\\[\\]$/,\n\t\trCRLF = /\\r?\\n/g,\n\t\trsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,\n\t\trsubmittable = /^(?:input|select|textarea|keygen)/i;\n\n\tfunction buildParams(prefix, obj, traditional, add) {\n\t\tvar name;\n\n\t\tif (Array.isArray(obj)) {\n\n\t\t\t// Serialize array item.\n\t\t\tjQuery.each(obj, function (i, v) {\n\t\t\t\tif (traditional || rbracket.test(prefix)) {\n\n\t\t\t\t\t// Treat each array item as a scalar.\n\t\t\t\t\tadd(prefix, v);\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// Item is non-scalar (array or object), encode its numeric index.\n\t\t\t\t\tbuildParams(\n\t\t\t\t\t\tprefix + \"[\" + (typeof v === \"object\" && v != null ? i : \"\") + \"]\",\n\t\t\t\t\t\tv,\n\t\t\t\t\t\ttraditional,\n\t\t\t\t\t\tadd\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t});\n\n\t\t} else if (!traditional && toType(obj) === \"object\") {\n\n\t\t\t// Serialize object item.\n\t\t\tfor (name in obj) {\n\t\t\t\tbuildParams(prefix + \"[\" + name + \"]\", obj[name], traditional, add);\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// Serialize scalar item.\n\t\t\tadd(prefix, obj);\n\t\t}\n\t}\n\n\t// Serialize an array of form elements or a set of\n\t// key/values into a query string\n\tjQuery.param = function (a, traditional) {\n\t\tvar prefix,\n\t\t\ts = [],\n\t\t\tadd = function (key, valueOrFunction) {\n\n\t\t\t\t// If value is a function, invoke it and use its return value\n\t\t\t\tvar value = isFunction(valueOrFunction) ?\n\t\t\t\t\tvalueOrFunction() :\n\t\t\t\t\tvalueOrFunction;\n\n\t\t\t\ts[s.length] = encodeURIComponent(key) + \"=\" +\n\t\t\t\t\tencodeURIComponent(value == null ? \"\" : value);\n\t\t\t};\n\n\t\tif (a == null) {\n\t\t\treturn \"\";\n\t\t}\n\n\t\t// If an array was passed in, assume that it is an array of form elements.\n\t\tif (Array.isArray(a) || (a.jquery && !jQuery.isPlainObject(a))) {\n\n\t\t\t// Serialize the form elements\n\t\t\tjQuery.each(a, function () {\n\t\t\t\tadd(this.name, this.value);\n\t\t\t});\n\n\t\t} else {\n\n\t\t\t// If traditional, encode the \"old\" way (the way 1.3.2 or older\n\t\t\t// did it), otherwise encode params recursively.\n\t\t\tfor (prefix in a) {\n\t\t\t\tbuildParams(prefix, a[prefix], traditional, add);\n\t\t\t}\n\t\t}\n\n\t\t// Return the resulting serialization\n\t\treturn s.join(\"&\");\n\t};\n\n\tjQuery.fn.extend({\n\t\tserialize: function () {\n\t\t\treturn jQuery.param(this.serializeArray());\n\t\t},\n\t\tserializeArray: function () {\n\t\t\treturn this.map(function () {\n\n\t\t\t\t// Can add propHook for \"elements\" to filter or add form elements\n\t\t\t\tvar elements = jQuery.prop(this, \"elements\");\n\t\t\t\treturn elements ? jQuery.makeArray(elements) : this;\n\t\t\t}).filter(function () {\n\t\t\t\tvar type = this.type;\n\n\t\t\t\t// Use .is( \":disabled\" ) so that fieldset[disabled] works\n\t\t\t\treturn this.name && !jQuery(this).is(\":disabled\") &&\n\t\t\t\t\trsubmittable.test(this.nodeName) && !rsubmitterTypes.test(type) &&\n\t\t\t\t\t(this.checked || !rcheckableType.test(type));\n\t\t\t}).map(function (_i, elem) {\n\t\t\t\tvar val = jQuery(this).val();\n\n\t\t\t\tif (val == null) {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\n\t\t\t\tif (Array.isArray(val)) {\n\t\t\t\t\treturn jQuery.map(val, function (val) {\n\t\t\t\t\t\treturn { name: elem.name, value: val.replace(rCRLF, \"\\r\\n\") };\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\treturn { name: elem.name, value: val.replace(rCRLF, \"\\r\\n\") };\n\t\t\t}).get();\n\t\t}\n\t});\n\n\n\tvar\n\t\tr20 = /%20/g,\n\t\trhash = /#.*$/,\n\t\trantiCache = /([?&])_=[^&]*/,\n\t\trheaders = /^(.*?):[ \\t]*([^\\r\\n]*)$/mg,\n\n\t\t// trac-7653, trac-8125, trac-8152: local protocol detection\n\t\trlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,\n\t\trnoContent = /^(?:GET|HEAD)$/,\n\t\trprotocol = /^\\/\\//,\n\n\t\t/* Prefilters\n\t\t * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)\n\t\t * 2) These are called:\n\t\t *    - BEFORE asking for a transport\n\t\t *    - AFTER param serialization (s.data is a string if s.processData is true)\n\t\t * 3) key is the dataType\n\t\t * 4) the catchall symbol \"*\" can be used\n\t\t * 5) execution will start with transport dataType and THEN continue down to \"*\" if needed\n\t\t */\n\t\tprefilters = {},\n\n\t\t/* Transports bindings\n\t\t * 1) key is the dataType\n\t\t * 2) the catchall symbol \"*\" can be used\n\t\t * 3) selection will start with transport dataType and THEN go to \"*\" if needed\n\t\t */\n\t\ttransports = {},\n\n\t\t// Avoid comment-prolog char sequence (trac-10098); must appease lint and evade compression\n\t\tallTypes = \"*/\".concat(\"*\"),\n\n\t\t// Anchor tag for parsing the document origin\n\t\toriginAnchor = document.createElement(\"a\");\n\n\toriginAnchor.href = location.href;\n\n\t// Base \"constructor\" for jQuery.ajaxPrefilter and jQuery.ajaxTransport\n\tfunction addToPrefiltersOrTransports(structure) {\n\n\t\t// dataTypeExpression is optional and defaults to \"*\"\n\t\treturn function (dataTypeExpression, func) {\n\n\t\t\tif (typeof dataTypeExpression !== \"string\") {\n\t\t\t\tfunc = dataTypeExpression;\n\t\t\t\tdataTypeExpression = \"*\";\n\t\t\t}\n\n\t\t\tvar dataType,\n\t\t\t\ti = 0,\n\t\t\t\tdataTypes = dataTypeExpression.toLowerCase().match(rnothtmlwhite) || [];\n\n\t\t\tif (isFunction(func)) {\n\n\t\t\t\t// For each dataType in the dataTypeExpression\n\t\t\t\twhile ((dataType = dataTypes[i++])) {\n\n\t\t\t\t\t// Prepend if requested\n\t\t\t\t\tif (dataType[0] === \"+\") {\n\t\t\t\t\t\tdataType = dataType.slice(1) || \"*\";\n\t\t\t\t\t\t(structure[dataType] = structure[dataType] || []).unshift(func);\n\n\t\t\t\t\t\t// Otherwise append\n\t\t\t\t\t} else {\n\t\t\t\t\t\t(structure[dataType] = structure[dataType] || []).push(func);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n\n\t// Base inspection function for prefilters and transports\n\tfunction inspectPrefiltersOrTransports(structure, options, originalOptions, jqXHR) {\n\n\t\tvar inspected = {},\n\t\t\tseekingTransport = (structure === transports);\n\n\t\tfunction inspect(dataType) {\n\t\t\tvar selected;\n\t\t\tinspected[dataType] = true;\n\t\t\tjQuery.each(structure[dataType] || [], function (_, prefilterOrFactory) {\n\t\t\t\tvar dataTypeOrTransport = prefilterOrFactory(options, originalOptions, jqXHR);\n\t\t\t\tif (typeof dataTypeOrTransport === \"string\" &&\n\t\t\t\t\t!seekingTransport && !inspected[dataTypeOrTransport]) {\n\n\t\t\t\t\toptions.dataTypes.unshift(dataTypeOrTransport);\n\t\t\t\t\tinspect(dataTypeOrTransport);\n\t\t\t\t\treturn false;\n\t\t\t\t} else if (seekingTransport) {\n\t\t\t\t\treturn !(selected = dataTypeOrTransport);\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn selected;\n\t\t}\n\n\t\treturn inspect(options.dataTypes[0]) || !inspected[\"*\"] && inspect(\"*\");\n\t}\n\n\t// A special extend for ajax options\n\t// that takes \"flat\" options (not to be deep extended)\n\t// Fixes trac-9887\n\tfunction ajaxExtend(target, src) {\n\t\tvar key, deep,\n\t\t\tflatOptions = jQuery.ajaxSettings.flatOptions || {};\n\n\t\tfor (key in src) {\n\t\t\tif (src[key] !== undefined) {\n\t\t\t\t(flatOptions[key] ? target : (deep || (deep = {})))[key] = src[key];\n\t\t\t}\n\t\t}\n\t\tif (deep) {\n\t\t\tjQuery.extend(true, target, deep);\n\t\t}\n\n\t\treturn target;\n\t}\n\n\t/* Handles responses to an ajax request:\n\t * - finds the right dataType (mediates between content-type and expected dataType)\n\t * - returns the corresponding response\n\t */\n\tfunction ajaxHandleResponses(s, jqXHR, responses) {\n\n\t\tvar ct, type, finalDataType, firstDataType,\n\t\t\tcontents = s.contents,\n\t\t\tdataTypes = s.dataTypes;\n\n\t\t// Remove auto dataType and get content-type in the process\n\t\twhile (dataTypes[0] === \"*\") {\n\t\t\tdataTypes.shift();\n\t\t\tif (ct === undefined) {\n\t\t\t\tct = s.mimeType || jqXHR.getResponseHeader(\"Content-Type\");\n\t\t\t}\n\t\t}\n\n\t\t// Check if we're dealing with a known content-type\n\t\tif (ct) {\n\t\t\tfor (type in contents) {\n\t\t\t\tif (contents[type] && contents[type].test(ct)) {\n\t\t\t\t\tdataTypes.unshift(type);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Check to see if we have a response for the expected dataType\n\t\tif (dataTypes[0] in responses) {\n\t\t\tfinalDataType = dataTypes[0];\n\t\t} else {\n\n\t\t\t// Try convertible dataTypes\n\t\t\tfor (type in responses) {\n\t\t\t\tif (!dataTypes[0] || s.converters[type + \" \" + dataTypes[0]]) {\n\t\t\t\t\tfinalDataType = type;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (!firstDataType) {\n\t\t\t\t\tfirstDataType = type;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Or just use first one\n\t\t\tfinalDataType = finalDataType || firstDataType;\n\t\t}\n\n\t\t// If we found a dataType\n\t\t// We add the dataType to the list if needed\n\t\t// and return the corresponding response\n\t\tif (finalDataType) {\n\t\t\tif (finalDataType !== dataTypes[0]) {\n\t\t\t\tdataTypes.unshift(finalDataType);\n\t\t\t}\n\t\t\treturn responses[finalDataType];\n\t\t}\n\t}\n\n\t/* Chain conversions given the request and the original response\n\t * Also sets the responseXXX fields on the jqXHR instance\n\t */\n\tfunction ajaxConvert(s, response, jqXHR, isSuccess) {\n\t\tvar conv2, current, conv, tmp, prev,\n\t\t\tconverters = {},\n\n\t\t\t// Work with a copy of dataTypes in case we need to modify it for conversion\n\t\t\tdataTypes = s.dataTypes.slice();\n\n\t\t// Create converters map with lowercased keys\n\t\tif (dataTypes[1]) {\n\t\t\tfor (conv in s.converters) {\n\t\t\t\tconverters[conv.toLowerCase()] = s.converters[conv];\n\t\t\t}\n\t\t}\n\n\t\tcurrent = dataTypes.shift();\n\n\t\t// Convert to each sequential dataType\n\t\twhile (current) {\n\n\t\t\tif (s.responseFields[current]) {\n\t\t\t\tjqXHR[s.responseFields[current]] = response;\n\t\t\t}\n\n\t\t\t// Apply the dataFilter if provided\n\t\t\tif (!prev && isSuccess && s.dataFilter) {\n\t\t\t\tresponse = s.dataFilter(response, s.dataType);\n\t\t\t}\n\n\t\t\tprev = current;\n\t\t\tcurrent = dataTypes.shift();\n\n\t\t\tif (current) {\n\n\t\t\t\t// There's only work to do if current dataType is non-auto\n\t\t\t\tif (current === \"*\") {\n\n\t\t\t\t\tcurrent = prev;\n\n\t\t\t\t\t// Convert response if prev dataType is non-auto and differs from current\n\t\t\t\t} else if (prev !== \"*\" && prev !== current) {\n\n\t\t\t\t\t// Seek a direct converter\n\t\t\t\t\tconv = converters[prev + \" \" + current] || converters[\"* \" + current];\n\n\t\t\t\t\t// If none found, seek a pair\n\t\t\t\t\tif (!conv) {\n\t\t\t\t\t\tfor (conv2 in converters) {\n\n\t\t\t\t\t\t\t// If conv2 outputs current\n\t\t\t\t\t\t\ttmp = conv2.split(\" \");\n\t\t\t\t\t\t\tif (tmp[1] === current) {\n\n\t\t\t\t\t\t\t\t// If prev can be converted to accepted input\n\t\t\t\t\t\t\t\tconv = converters[prev + \" \" + tmp[0]] ||\n\t\t\t\t\t\t\t\t\tconverters[\"* \" + tmp[0]];\n\t\t\t\t\t\t\t\tif (conv) {\n\n\t\t\t\t\t\t\t\t\t// Condense equivalence converters\n\t\t\t\t\t\t\t\t\tif (conv === true) {\n\t\t\t\t\t\t\t\t\t\tconv = converters[conv2];\n\n\t\t\t\t\t\t\t\t\t\t// Otherwise, insert the intermediate dataType\n\t\t\t\t\t\t\t\t\t} else if (converters[conv2] !== true) {\n\t\t\t\t\t\t\t\t\t\tcurrent = tmp[0];\n\t\t\t\t\t\t\t\t\t\tdataTypes.unshift(tmp[1]);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Apply converter (if not an equivalence)\n\t\t\t\t\tif (conv !== true) {\n\n\t\t\t\t\t\t// Unless errors are allowed to bubble, catch and return them\n\t\t\t\t\t\tif (conv && s.throws) {\n\t\t\t\t\t\t\tresponse = conv(response);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\tresponse = conv(response);\n\t\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\tstate: \"parsererror\",\n\t\t\t\t\t\t\t\t\terror: conv ? e : \"No conversion from \" + prev + \" to \" + current\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn { state: \"success\", data: response };\n\t}\n\n\tjQuery.extend({\n\n\t\t// Counter for holding the number of active queries\n\t\tactive: 0,\n\n\t\t// Last-Modified header cache for next request\n\t\tlastModified: {},\n\t\tetag: {},\n\n\t\tajaxSettings: {\n\t\t\turl: location.href,\n\t\t\ttype: \"GET\",\n\t\t\tisLocal: rlocalProtocol.test(location.protocol),\n\t\t\tglobal: true,\n\t\t\tprocessData: true,\n\t\t\tasync: true,\n\t\t\tcontentType: \"application/x-www-form-urlencoded; charset=UTF-8\",\n\n\t\t\t/*\n\t\t\ttimeout: 0,\n\t\t\tdata: null,\n\t\t\tdataType: null,\n\t\t\tusername: null,\n\t\t\tpassword: null,\n\t\t\tcache: null,\n\t\t\tthrows: false,\n\t\t\ttraditional: false,\n\t\t\theaders: {},\n\t\t\t*/\n\n\t\t\taccepts: {\n\t\t\t\t\"*\": allTypes,\n\t\t\t\ttext: \"text/plain\",\n\t\t\t\thtml: \"text/html\",\n\t\t\t\txml: \"application/xml, text/xml\",\n\t\t\t\tjson: \"application/json, text/javascript\"\n\t\t\t},\n\n\t\t\tcontents: {\n\t\t\t\txml: /\\bxml\\b/,\n\t\t\t\thtml: /\\bhtml/,\n\t\t\t\tjson: /\\bjson\\b/\n\t\t\t},\n\n\t\t\tresponseFields: {\n\t\t\t\txml: \"responseXML\",\n\t\t\t\ttext: \"responseText\",\n\t\t\t\tjson: \"responseJSON\"\n\t\t\t},\n\n\t\t\t// Data converters\n\t\t\t// Keys separate source (or catchall \"*\") and destination types with a single space\n\t\t\tconverters: {\n\n\t\t\t\t// Convert anything to text\n\t\t\t\t\"* text\": String,\n\n\t\t\t\t// Text to html (true = no transformation)\n\t\t\t\t\"text html\": true,\n\n\t\t\t\t// Evaluate text as a json expression\n\t\t\t\t\"text json\": JSON.parse,\n\n\t\t\t\t// Parse text as xml\n\t\t\t\t\"text xml\": jQuery.parseXML\n\t\t\t},\n\n\t\t\t// For options that shouldn't be deep extended:\n\t\t\t// you can add your own custom options here if\n\t\t\t// and when you create one that shouldn't be\n\t\t\t// deep extended (see ajaxExtend)\n\t\t\tflatOptions: {\n\t\t\t\turl: true,\n\t\t\t\tcontext: true\n\t\t\t}\n\t\t},\n\n\t\t// Creates a full fledged settings object into target\n\t\t// with both ajaxSettings and settings fields.\n\t\t// If target is omitted, writes into ajaxSettings.\n\t\tajaxSetup: function (target, settings) {\n\t\t\treturn settings ?\n\n\t\t\t\t// Building a settings object\n\t\t\t\tajaxExtend(ajaxExtend(target, jQuery.ajaxSettings), settings) :\n\n\t\t\t\t// Extending ajaxSettings\n\t\t\t\tajaxExtend(jQuery.ajaxSettings, target);\n\t\t},\n\n\t\tajaxPrefilter: addToPrefiltersOrTransports(prefilters),\n\t\tajaxTransport: addToPrefiltersOrTransports(transports),\n\n\t\t// Main method\n\t\tajax: function (url, options) {\n\n\t\t\t// If url is an object, simulate pre-1.5 signature\n\t\t\tif (typeof url === \"object\") {\n\t\t\t\toptions = url;\n\t\t\t\turl = undefined;\n\t\t\t}\n\n\t\t\t// Force options to be an object\n\t\t\toptions = options || {};\n\n\t\t\tvar transport,\n\n\t\t\t\t// URL without anti-cache param\n\t\t\t\tcacheURL,\n\n\t\t\t\t// Response headers\n\t\t\t\tresponseHeadersString,\n\t\t\t\tresponseHeaders,\n\n\t\t\t\t// timeout handle\n\t\t\t\ttimeoutTimer,\n\n\t\t\t\t// Url cleanup var\n\t\t\t\turlAnchor,\n\n\t\t\t\t// Request state (becomes false upon send and true upon completion)\n\t\t\t\tcompleted,\n\n\t\t\t\t// To know if global events are to be dispatched\n\t\t\t\tfireGlobals,\n\n\t\t\t\t// Loop variable\n\t\t\t\ti,\n\n\t\t\t\t// uncached part of the url\n\t\t\t\tuncached,\n\n\t\t\t\t// Create the final options object\n\t\t\t\ts = jQuery.ajaxSetup({}, options),\n\n\t\t\t\t// Callbacks context\n\t\t\t\tcallbackContext = s.context || s,\n\n\t\t\t\t// Context for global events is callbackContext if it is a DOM node or jQuery collection\n\t\t\t\tglobalEventContext = s.context &&\n\t\t\t\t\t(callbackContext.nodeType || callbackContext.jquery) ?\n\t\t\t\t\tjQuery(callbackContext) :\n\t\t\t\t\tjQuery.event,\n\n\t\t\t\t// Deferreds\n\t\t\t\tdeferred = jQuery.Deferred(),\n\t\t\t\tcompleteDeferred = jQuery.Callbacks(\"once memory\"),\n\n\t\t\t\t// Status-dependent callbacks\n\t\t\t\tstatusCode = s.statusCode || {},\n\n\t\t\t\t// Headers (they are sent all at once)\n\t\t\t\trequestHeaders = {},\n\t\t\t\trequestHeadersNames = {},\n\n\t\t\t\t// Default abort message\n\t\t\t\tstrAbort = \"canceled\",\n\n\t\t\t\t// Fake xhr\n\t\t\t\tjqXHR = {\n\t\t\t\t\treadyState: 0,\n\n\t\t\t\t\t// Builds headers hashtable if needed\n\t\t\t\t\tgetResponseHeader: function (key) {\n\t\t\t\t\t\tvar match;\n\t\t\t\t\t\tif (completed) {\n\t\t\t\t\t\t\tif (!responseHeaders) {\n\t\t\t\t\t\t\t\tresponseHeaders = {};\n\t\t\t\t\t\t\t\twhile ((match = rheaders.exec(responseHeadersString))) {\n\t\t\t\t\t\t\t\t\tresponseHeaders[match[1].toLowerCase() + \" \"] =\n\t\t\t\t\t\t\t\t\t\t(responseHeaders[match[1].toLowerCase() + \" \"] || [])\n\t\t\t\t\t\t\t\t\t\t\t.concat(match[2]);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tmatch = responseHeaders[key.toLowerCase() + \" \"];\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn match == null ? null : match.join(\", \");\n\t\t\t\t\t},\n\n\t\t\t\t\t// Raw string\n\t\t\t\t\tgetAllResponseHeaders: function () {\n\t\t\t\t\t\treturn completed ? responseHeadersString : null;\n\t\t\t\t\t},\n\n\t\t\t\t\t// Caches the header\n\t\t\t\t\tsetRequestHeader: function (name, value) {\n\t\t\t\t\t\tif (completed == null) {\n\t\t\t\t\t\t\tname = requestHeadersNames[name.toLowerCase()] =\n\t\t\t\t\t\t\t\trequestHeadersNames[name.toLowerCase()] || name;\n\t\t\t\t\t\t\trequestHeaders[name] = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn this;\n\t\t\t\t\t},\n\n\t\t\t\t\t// Overrides response content-type header\n\t\t\t\t\toverrideMimeType: function (type) {\n\t\t\t\t\t\tif (completed == null) {\n\t\t\t\t\t\t\ts.mimeType = type;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn this;\n\t\t\t\t\t},\n\n\t\t\t\t\t// Status-dependent callbacks\n\t\t\t\t\tstatusCode: function (map) {\n\t\t\t\t\t\tvar code;\n\t\t\t\t\t\tif (map) {\n\t\t\t\t\t\t\tif (completed) {\n\n\t\t\t\t\t\t\t\t// Execute the appropriate callbacks\n\t\t\t\t\t\t\t\tjqXHR.always(map[jqXHR.status]);\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t// Lazy-add the new callbacks in a way that preserves old ones\n\t\t\t\t\t\t\t\tfor (code in map) {\n\t\t\t\t\t\t\t\t\tstatusCode[code] = [statusCode[code], map[code]];\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn this;\n\t\t\t\t\t},\n\n\t\t\t\t\t// Cancel the request\n\t\t\t\t\tabort: function (statusText) {\n\t\t\t\t\t\tvar finalText = statusText || strAbort;\n\t\t\t\t\t\tif (transport) {\n\t\t\t\t\t\t\ttransport.abort(finalText);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdone(0, finalText);\n\t\t\t\t\t\treturn this;\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t// Attach deferreds\n\t\t\tdeferred.promise(jqXHR);\n\n\t\t\t// Add protocol if not provided (prefilters might expect it)\n\t\t\t// Handle falsy url in the settings object (trac-10093: consistency with old signature)\n\t\t\t// We also use the url parameter if available\n\t\t\ts.url = ((url || s.url || location.href) + \"\")\n\t\t\t\t.replace(rprotocol, location.protocol + \"//\");\n\n\t\t\t// Alias method option to type as per ticket trac-12004\n\t\t\ts.type = options.method || options.type || s.method || s.type;\n\n\t\t\t// Extract dataTypes list\n\t\t\ts.dataTypes = (s.dataType || \"*\").toLowerCase().match(rnothtmlwhite) || [\"\"];\n\n\t\t\t// A cross-domain request is in order when the origin doesn't match the current origin.\n\t\t\tif (s.crossDomain == null) {\n\t\t\t\turlAnchor = document.createElement(\"a\");\n\n\t\t\t\t// Support: IE <=8 - 11, Edge 12 - 15\n\t\t\t\t// IE throws exception on accessing the href property if url is malformed,\n\t\t\t\t// e.g. http://example.com:80x/\n\t\t\t\ttry {\n\t\t\t\t\turlAnchor.href = s.url;\n\n\t\t\t\t\t// Support: IE <=8 - 11 only\n\t\t\t\t\t// Anchor's host property isn't correctly set when s.url is relative\n\t\t\t\t\turlAnchor.href = urlAnchor.href;\n\t\t\t\t\ts.crossDomain = originAnchor.protocol + \"//\" + originAnchor.host !==\n\t\t\t\t\t\turlAnchor.protocol + \"//\" + urlAnchor.host;\n\t\t\t\t} catch (e) {\n\n\t\t\t\t\t// If there is an error parsing the URL, assume it is crossDomain,\n\t\t\t\t\t// it can be rejected by the transport if it is invalid\n\t\t\t\t\ts.crossDomain = true;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Convert data if not already a string\n\t\t\tif (s.data && s.processData && typeof s.data !== \"string\") {\n\t\t\t\ts.data = jQuery.param(s.data, s.traditional);\n\t\t\t}\n\n\t\t\t// Apply prefilters\n\t\t\tinspectPrefiltersOrTransports(prefilters, s, options, jqXHR);\n\n\t\t\t// If request was aborted inside a prefilter, stop there\n\t\t\tif (completed) {\n\t\t\t\treturn jqXHR;\n\t\t\t}\n\n\t\t\t// We can fire global events as of now if asked to\n\t\t\t// Don't fire events if jQuery.event is undefined in an AMD-usage scenario (trac-15118)\n\t\t\tfireGlobals = jQuery.event && s.global;\n\n\t\t\t// Watch for a new set of requests\n\t\t\tif (fireGlobals && jQuery.active++ === 0) {\n\t\t\t\tjQuery.event.trigger(\"ajaxStart\");\n\t\t\t}\n\n\t\t\t// Uppercase the type\n\t\t\ts.type = s.type.toUpperCase();\n\n\t\t\t// Determine if request has content\n\t\t\ts.hasContent = !rnoContent.test(s.type);\n\n\t\t\t// Save the URL in case we're toying with the If-Modified-Since\n\t\t\t// and/or If-None-Match header later on\n\t\t\t// Remove hash to simplify url manipulation\n\t\t\tcacheURL = s.url.replace(rhash, \"\");\n\n\t\t\t// More options handling for requests with no content\n\t\t\tif (!s.hasContent) {\n\n\t\t\t\t// Remember the hash so we can put it back\n\t\t\t\tuncached = s.url.slice(cacheURL.length);\n\n\t\t\t\t// If data is available and should be processed, append data to url\n\t\t\t\tif (s.data && (s.processData || typeof s.data === \"string\")) {\n\t\t\t\t\tcacheURL += (rquery.test(cacheURL) ? \"&\" : \"?\") + s.data;\n\n\t\t\t\t\t// trac-9682: remove data so that it's not used in an eventual retry\n\t\t\t\t\tdelete s.data;\n\t\t\t\t}\n\n\t\t\t\t// Add or update anti-cache param if needed\n\t\t\t\tif (s.cache === false) {\n\t\t\t\t\tcacheURL = cacheURL.replace(rantiCache, \"$1\");\n\t\t\t\t\tuncached = (rquery.test(cacheURL) ? \"&\" : \"?\") + \"_=\" + (nonce.guid++) +\n\t\t\t\t\t\tuncached;\n\t\t\t\t}\n\n\t\t\t\t// Put hash and anti-cache on the URL that will be requested (gh-1732)\n\t\t\t\ts.url = cacheURL + uncached;\n\n\t\t\t\t// Change '%20' to '+' if this is encoded form body content (gh-2658)\n\t\t\t} else if (s.data && s.processData &&\n\t\t\t\t(s.contentType || \"\").indexOf(\"application/x-www-form-urlencoded\") === 0) {\n\t\t\t\ts.data = s.data.replace(r20, \"+\");\n\t\t\t}\n\n\t\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\t\tif (s.ifModified) {\n\t\t\t\tif (jQuery.lastModified[cacheURL]) {\n\t\t\t\t\tjqXHR.setRequestHeader(\"If-Modified-Since\", jQuery.lastModified[cacheURL]);\n\t\t\t\t}\n\t\t\t\tif (jQuery.etag[cacheURL]) {\n\t\t\t\t\tjqXHR.setRequestHeader(\"If-None-Match\", jQuery.etag[cacheURL]);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Set the correct header, if data is being sent\n\t\t\tif (s.data && s.hasContent && s.contentType !== false || options.contentType) {\n\t\t\t\tjqXHR.setRequestHeader(\"Content-Type\", s.contentType);\n\t\t\t}\n\n\t\t\t// Set the Accepts header for the server, depending on the dataType\n\t\t\tjqXHR.setRequestHeader(\n\t\t\t\t\"Accept\",\n\t\t\t\ts.dataTypes[0] && s.accepts[s.dataTypes[0]] ?\n\t\t\t\t\ts.accepts[s.dataTypes[0]] +\n\t\t\t\t\t(s.dataTypes[0] !== \"*\" ? \", \" + allTypes + \"; q=0.01\" : \"\") :\n\t\t\t\t\ts.accepts[\"*\"]\n\t\t\t);\n\n\t\t\t// Check for headers option\n\t\t\tfor (i in s.headers) {\n\t\t\t\tjqXHR.setRequestHeader(i, s.headers[i]);\n\t\t\t}\n\n\t\t\t// Allow custom headers/mimetypes and early abort\n\t\t\tif (s.beforeSend &&\n\t\t\t\t(s.beforeSend.call(callbackContext, jqXHR, s) === false || completed)) {\n\n\t\t\t\t// Abort if not done already and return\n\t\t\t\treturn jqXHR.abort();\n\t\t\t}\n\n\t\t\t// Aborting is no longer a cancellation\n\t\t\tstrAbort = \"abort\";\n\n\t\t\t// Install callbacks on deferreds\n\t\t\tcompleteDeferred.add(s.complete);\n\t\t\tjqXHR.done(s.success);\n\t\t\tjqXHR.fail(s.error);\n\n\t\t\t// Get transport\n\t\t\ttransport = inspectPrefiltersOrTransports(transports, s, options, jqXHR);\n\n\t\t\t// If no transport, we auto-abort\n\t\t\tif (!transport) {\n\t\t\t\tdone(-1, \"No Transport\");\n\t\t\t} else {\n\t\t\t\tjqXHR.readyState = 1;\n\n\t\t\t\t// Send global event\n\t\t\t\tif (fireGlobals) {\n\t\t\t\t\tglobalEventContext.trigger(\"ajaxSend\", [jqXHR, s]);\n\t\t\t\t}\n\n\t\t\t\t// If request was aborted inside ajaxSend, stop there\n\t\t\t\tif (completed) {\n\t\t\t\t\treturn jqXHR;\n\t\t\t\t}\n\n\t\t\t\t// Timeout\n\t\t\t\tif (s.async && s.timeout > 0) {\n\t\t\t\t\ttimeoutTimer = window.setTimeout(function () {\n\t\t\t\t\t\tjqXHR.abort(\"timeout\");\n\t\t\t\t\t}, s.timeout);\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tcompleted = false;\n\t\t\t\t\ttransport.send(requestHeaders, done);\n\t\t\t\t} catch (e) {\n\n\t\t\t\t\t// Rethrow post-completion exceptions\n\t\t\t\t\tif (completed) {\n\t\t\t\t\t\tthrow e;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Propagate others as results\n\t\t\t\t\tdone(-1, e);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Callback for when everything is done\n\t\t\tfunction done(status, nativeStatusText, responses, headers) {\n\t\t\t\tvar isSuccess, success, error, response, modified,\n\t\t\t\t\tstatusText = nativeStatusText;\n\n\t\t\t\t// Ignore repeat invocations\n\t\t\t\tif (completed) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tcompleted = true;\n\n\t\t\t\t// Clear timeout if it exists\n\t\t\t\tif (timeoutTimer) {\n\t\t\t\t\twindow.clearTimeout(timeoutTimer);\n\t\t\t\t}\n\n\t\t\t\t// Dereference transport for early garbage collection\n\t\t\t\t// (no matter how long the jqXHR object will be used)\n\t\t\t\ttransport = undefined;\n\n\t\t\t\t// Cache response headers\n\t\t\t\tresponseHeadersString = headers || \"\";\n\n\t\t\t\t// Set readyState\n\t\t\t\tjqXHR.readyState = status > 0 ? 4 : 0;\n\n\t\t\t\t// Determine if successful\n\t\t\t\tisSuccess = status >= 200 && status < 300 || status === 304;\n\n\t\t\t\t// Get response data\n\t\t\t\tif (responses) {\n\t\t\t\t\tresponse = ajaxHandleResponses(s, jqXHR, responses);\n\t\t\t\t}\n\n\t\t\t\t// Use a noop converter for missing script but not if jsonp\n\t\t\t\tif (!isSuccess &&\n\t\t\t\t\tjQuery.inArray(\"script\", s.dataTypes) > -1 &&\n\t\t\t\t\tjQuery.inArray(\"json\", s.dataTypes) < 0) {\n\t\t\t\t\ts.converters[\"text script\"] = function () { };\n\t\t\t\t}\n\n\t\t\t\t// Convert no matter what (that way responseXXX fields are always set)\n\t\t\t\tresponse = ajaxConvert(s, response, jqXHR, isSuccess);\n\n\t\t\t\t// If successful, handle type chaining\n\t\t\t\tif (isSuccess) {\n\n\t\t\t\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\t\t\t\tif (s.ifModified) {\n\t\t\t\t\t\tmodified = jqXHR.getResponseHeader(\"Last-Modified\");\n\t\t\t\t\t\tif (modified) {\n\t\t\t\t\t\t\tjQuery.lastModified[cacheURL] = modified;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmodified = jqXHR.getResponseHeader(\"etag\");\n\t\t\t\t\t\tif (modified) {\n\t\t\t\t\t\t\tjQuery.etag[cacheURL] = modified;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// if no content\n\t\t\t\t\tif (status === 204 || s.type === \"HEAD\") {\n\t\t\t\t\t\tstatusText = \"nocontent\";\n\n\t\t\t\t\t\t// if not modified\n\t\t\t\t\t} else if (status === 304) {\n\t\t\t\t\t\tstatusText = \"notmodified\";\n\n\t\t\t\t\t\t// If we have data, let's convert it\n\t\t\t\t\t} else {\n\t\t\t\t\t\tstatusText = response.state;\n\t\t\t\t\t\tsuccess = response.data;\n\t\t\t\t\t\terror = response.error;\n\t\t\t\t\t\tisSuccess = !error;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\n\t\t\t\t\t// Extract error from statusText and normalize for non-aborts\n\t\t\t\t\terror = statusText;\n\t\t\t\t\tif (status || !statusText) {\n\t\t\t\t\t\tstatusText = \"error\";\n\t\t\t\t\t\tif (status < 0) {\n\t\t\t\t\t\t\tstatus = 0;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Set data for the fake xhr object\n\t\t\t\tjqXHR.status = status;\n\t\t\t\tjqXHR.statusText = (nativeStatusText || statusText) + \"\";\n\n\t\t\t\t// Success/Error\n\t\t\t\tif (isSuccess) {\n\t\t\t\t\tdeferred.resolveWith(callbackContext, [success, statusText, jqXHR]);\n\t\t\t\t} else {\n\t\t\t\t\tdeferred.rejectWith(callbackContext, [jqXHR, statusText, error]);\n\t\t\t\t}\n\n\t\t\t\t// Status-dependent callbacks\n\t\t\t\tjqXHR.statusCode(statusCode);\n\t\t\t\tstatusCode = undefined;\n\n\t\t\t\tif (fireGlobals) {\n\t\t\t\t\tglobalEventContext.trigger(isSuccess ? \"ajaxSuccess\" : \"ajaxError\",\n\t\t\t\t\t\t[jqXHR, s, isSuccess ? success : error]);\n\t\t\t\t}\n\n\t\t\t\t// Complete\n\t\t\t\tcompleteDeferred.fireWith(callbackContext, [jqXHR, statusText]);\n\n\t\t\t\tif (fireGlobals) {\n\t\t\t\t\tglobalEventContext.trigger(\"ajaxComplete\", [jqXHR, s]);\n\n\t\t\t\t\t// Handle the global AJAX counter\n\t\t\t\t\tif (!(--jQuery.active)) {\n\t\t\t\t\t\tjQuery.event.trigger(\"ajaxStop\");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn jqXHR;\n\t\t},\n\n\t\tgetJSON: function (url, data, callback) {\n\t\t\treturn jQuery.get(url, data, callback, \"json\");\n\t\t},\n\n\t\tgetScript: function (url, callback) {\n\t\t\treturn jQuery.get(url, undefined, callback, \"script\");\n\t\t}\n\t});\n\n\tjQuery.each([\"get\", \"post\"], function (_i, method) {\n\t\tjQuery[method] = function (url, data, callback, type) {\n\n\t\t\t// Shift arguments if data argument was omitted\n\t\t\tif (isFunction(data)) {\n\t\t\t\ttype = type || callback;\n\t\t\t\tcallback = data;\n\t\t\t\tdata = undefined;\n\t\t\t}\n\n\t\t\t// The url can be an options object (which then must have .url)\n\t\t\treturn jQuery.ajax(jQuery.extend({\n\t\t\t\turl: url,\n\t\t\t\ttype: method,\n\t\t\t\tdataType: type,\n\t\t\t\tdata: data,\n\t\t\t\tsuccess: callback\n\t\t\t}, jQuery.isPlainObject(url) && url));\n\t\t};\n\t});\n\n\tjQuery.ajaxPrefilter(function (s) {\n\t\tvar i;\n\t\tfor (i in s.headers) {\n\t\t\tif (i.toLowerCase() === \"content-type\") {\n\t\t\t\ts.contentType = s.headers[i] || \"\";\n\t\t\t}\n\t\t}\n\t});\n\n\n\tjQuery._evalUrl = function (url, options, doc) {\n\t\treturn jQuery.ajax({\n\t\t\turl: url,\n\n\t\t\t// Make this explicit, since user can override this through ajaxSetup (trac-11264)\n\t\t\ttype: \"GET\",\n\t\t\tdataType: \"script\",\n\t\t\tcache: true,\n\t\t\tasync: false,\n\t\t\tglobal: false,\n\n\t\t\t// Only evaluate the response if it is successful (gh-4126)\n\t\t\t// dataFilter is not invoked for failure responses, so using it instead\n\t\t\t// of the default converter is kludgy but it works.\n\t\t\tconverters: {\n\t\t\t\t\"text script\": function () { }\n\t\t\t},\n\t\t\tdataFilter: function (response) {\n\t\t\t\tjQuery.globalEval(response, options, doc);\n\t\t\t}\n\t\t});\n\t};\n\n\n\tjQuery.fn.extend({\n\t\twrapAll: function (html) {\n\t\t\tvar wrap;\n\n\t\t\tif (this[0]) {\n\t\t\t\tif (isFunction(html)) {\n\t\t\t\t\thtml = html.call(this[0]);\n\t\t\t\t}\n\n\t\t\t\t// The elements to wrap the target around\n\t\t\t\twrap = jQuery(html, this[0].ownerDocument).eq(0).clone(true);\n\n\t\t\t\tif (this[0].parentNode) {\n\t\t\t\t\twrap.insertBefore(this[0]);\n\t\t\t\t}\n\n\t\t\t\twrap.map(function () {\n\t\t\t\t\tvar elem = this;\n\n\t\t\t\t\twhile (elem.firstElementChild) {\n\t\t\t\t\t\telem = elem.firstElementChild;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn elem;\n\t\t\t\t}).append(this);\n\t\t\t}\n\n\t\t\treturn this;\n\t\t},\n\n\t\twrapInner: function (html) {\n\t\t\tif (isFunction(html)) {\n\t\t\t\treturn this.each(function (i) {\n\t\t\t\t\tjQuery(this).wrapInner(html.call(this, i));\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn this.each(function () {\n\t\t\t\tvar self = jQuery(this),\n\t\t\t\t\tcontents = self.contents();\n\n\t\t\t\tif (contents.length) {\n\t\t\t\t\tcontents.wrapAll(html);\n\n\t\t\t\t} else {\n\t\t\t\t\tself.append(html);\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\twrap: function (html) {\n\t\t\tvar htmlIsFunction = isFunction(html);\n\n\t\t\treturn this.each(function (i) {\n\t\t\t\tjQuery(this).wrapAll(htmlIsFunction ? html.call(this, i) : html);\n\t\t\t});\n\t\t},\n\n\t\tunwrap: function (selector) {\n\t\t\tthis.parent(selector).not(\"body\").each(function () {\n\t\t\t\tjQuery(this).replaceWith(this.childNodes);\n\t\t\t});\n\t\t\treturn this;\n\t\t}\n\t});\n\n\n\tjQuery.expr.pseudos.hidden = function (elem) {\n\t\treturn !jQuery.expr.pseudos.visible(elem);\n\t};\n\tjQuery.expr.pseudos.visible = function (elem) {\n\t\treturn !!(elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length);\n\t};\n\n\n\n\n\tjQuery.ajaxSettings.xhr = function () {\n\t\ttry {\n\t\t\treturn new window.XMLHttpRequest();\n\t\t} catch (e) { }\n\t};\n\n\tvar xhrSuccessStatus = {\n\n\t\t// File protocol always yields status code 0, assume 200\n\t\t0: 200,\n\n\t\t// Support: IE <=9 only\n\t\t// trac-1450: sometimes IE returns 1223 when it should be 204\n\t\t1223: 204\n\t},\n\t\txhrSupported = jQuery.ajaxSettings.xhr();\n\n\tsupport.cors = !!xhrSupported && (\"withCredentials\" in xhrSupported);\n\tsupport.ajax = xhrSupported = !!xhrSupported;\n\n\tjQuery.ajaxTransport(function (options) {\n\t\tvar callback, errorCallback;\n\n\t\t// Cross domain only allowed if supported through XMLHttpRequest\n\t\tif (support.cors || xhrSupported && !options.crossDomain) {\n\t\t\treturn {\n\t\t\t\tsend: function (headers, complete) {\n\t\t\t\t\tvar i,\n\t\t\t\t\t\txhr = options.xhr();\n\n\t\t\t\t\txhr.open(\n\t\t\t\t\t\toptions.type,\n\t\t\t\t\t\toptions.url,\n\t\t\t\t\t\toptions.async,\n\t\t\t\t\t\toptions.username,\n\t\t\t\t\t\toptions.password\n\t\t\t\t\t);\n\n\t\t\t\t\t// Apply custom fields if provided\n\t\t\t\t\tif (options.xhrFields) {\n\t\t\t\t\t\tfor (i in options.xhrFields) {\n\t\t\t\t\t\t\txhr[i] = options.xhrFields[i];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Override mime type if needed\n\t\t\t\t\tif (options.mimeType && xhr.overrideMimeType) {\n\t\t\t\t\t\txhr.overrideMimeType(options.mimeType);\n\t\t\t\t\t}\n\n\t\t\t\t\t// X-Requested-With header\n\t\t\t\t\t// For cross-domain requests, seeing as conditions for a preflight are\n\t\t\t\t\t// akin to a jigsaw puzzle, we simply never set it to be sure.\n\t\t\t\t\t// (it can always be set on a per-request basis or even using ajaxSetup)\n\t\t\t\t\t// For same-domain requests, won't change header if already provided.\n\t\t\t\t\tif (!options.crossDomain && !headers[\"X-Requested-With\"]) {\n\t\t\t\t\t\theaders[\"X-Requested-With\"] = \"XMLHttpRequest\";\n\t\t\t\t\t}\n\n\t\t\t\t\t// Set headers\n\t\t\t\t\tfor (i in headers) {\n\t\t\t\t\t\txhr.setRequestHeader(i, headers[i]);\n\t\t\t\t\t}\n\n\t\t\t\t\t// Callback\n\t\t\t\t\tcallback = function (type) {\n\t\t\t\t\t\treturn function () {\n\t\t\t\t\t\t\tif (callback) {\n\t\t\t\t\t\t\t\tcallback = errorCallback = xhr.onload =\n\t\t\t\t\t\t\t\t\txhr.onerror = xhr.onabort = xhr.ontimeout =\n\t\t\t\t\t\t\t\t\txhr.onreadystatechange = null;\n\n\t\t\t\t\t\t\t\tif (type === \"abort\") {\n\t\t\t\t\t\t\t\t\txhr.abort();\n\t\t\t\t\t\t\t\t} else if (type === \"error\") {\n\n\t\t\t\t\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t\t\t\t\t// On a manual native abort, IE9 throws\n\t\t\t\t\t\t\t\t\t// errors on any property access that is not readyState\n\t\t\t\t\t\t\t\t\tif (typeof xhr.status !== \"number\") {\n\t\t\t\t\t\t\t\t\t\tcomplete(0, \"error\");\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tcomplete(\n\n\t\t\t\t\t\t\t\t\t\t\t// File: protocol always yields status 0; see trac-8605, trac-14207\n\t\t\t\t\t\t\t\t\t\t\txhr.status,\n\t\t\t\t\t\t\t\t\t\t\txhr.statusText\n\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tcomplete(\n\t\t\t\t\t\t\t\t\t\txhrSuccessStatus[xhr.status] || xhr.status,\n\t\t\t\t\t\t\t\t\t\txhr.statusText,\n\n\t\t\t\t\t\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t\t\t\t\t\t// IE9 has no XHR2 but throws on binary (trac-11426)\n\t\t\t\t\t\t\t\t\t\t// For XHR2 non-text, let the caller handle it (gh-2498)\n\t\t\t\t\t\t\t\t\t\t(xhr.responseType || \"text\") !== \"text\" ||\n\t\t\t\t\t\t\t\t\t\t\ttypeof xhr.responseText !== \"string\" ?\n\t\t\t\t\t\t\t\t\t\t\t{ binary: xhr.response } :\n\t\t\t\t\t\t\t\t\t\t\t{ text: xhr.responseText },\n\t\t\t\t\t\t\t\t\t\txhr.getAllResponseHeaders()\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\t\t\t\t\t};\n\n\t\t\t\t\t// Listen to events\n\t\t\t\t\txhr.onload = callback();\n\t\t\t\t\terrorCallback = xhr.onerror = xhr.ontimeout = callback(\"error\");\n\n\t\t\t\t\t// Support: IE 9 only\n\t\t\t\t\t// Use onreadystatechange to replace onabort\n\t\t\t\t\t// to handle uncaught aborts\n\t\t\t\t\tif (xhr.onabort !== undefined) {\n\t\t\t\t\t\txhr.onabort = errorCallback;\n\t\t\t\t\t} else {\n\t\t\t\t\t\txhr.onreadystatechange = function () {\n\n\t\t\t\t\t\t\t// Check readyState before timeout as it changes\n\t\t\t\t\t\t\tif (xhr.readyState === 4) {\n\n\t\t\t\t\t\t\t\t// Allow onerror to be called first,\n\t\t\t\t\t\t\t\t// but that will not handle a native abort\n\t\t\t\t\t\t\t\t// Also, save errorCallback to a variable\n\t\t\t\t\t\t\t\t// as xhr.onerror cannot be accessed\n\t\t\t\t\t\t\t\twindow.setTimeout(function () {\n\t\t\t\t\t\t\t\t\tif (callback) {\n\t\t\t\t\t\t\t\t\t\terrorCallback();\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\t// Create the abort callback\n\t\t\t\t\tcallback = callback(\"abort\");\n\n\t\t\t\t\ttry {\n\n\t\t\t\t\t\t// Do send the request (this may raise an exception)\n\t\t\t\t\t\txhr.send(options.hasContent && options.data || null);\n\t\t\t\t\t} catch (e) {\n\n\t\t\t\t\t\t// trac-14683: Only rethrow if this hasn't been notified as an error yet\n\t\t\t\t\t\tif (callback) {\n\t\t\t\t\t\t\tthrow e;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\t\tabort: function () {\n\t\t\t\t\tif (callback) {\n\t\t\t\t\t\tcallback();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t});\n\n\n\n\n\t// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432)\n\tjQuery.ajaxPrefilter(function (s) {\n\t\tif (s.crossDomain) {\n\t\t\ts.contents.script = false;\n\t\t}\n\t});\n\n\t// Install script dataType\n\tjQuery.ajaxSetup({\n\t\taccepts: {\n\t\t\tscript: \"text/javascript, application/javascript, \" +\n\t\t\t\t\"application/ecmascript, application/x-ecmascript\"\n\t\t},\n\t\tcontents: {\n\t\t\tscript: /\\b(?:java|ecma)script\\b/\n\t\t},\n\t\tconverters: {\n\t\t\t\"text script\": function (text) {\n\t\t\t\tjQuery.globalEval(text);\n\t\t\t\treturn text;\n\t\t\t}\n\t\t}\n\t});\n\n\t// Handle cache's special case and crossDomain\n\tjQuery.ajaxPrefilter(\"script\", function (s) {\n\t\tif (s.cache === undefined) {\n\t\t\ts.cache = false;\n\t\t}\n\t\tif (s.crossDomain) {\n\t\t\ts.type = \"GET\";\n\t\t}\n\t});\n\n\t// Bind script tag hack transport\n\tjQuery.ajaxTransport(\"script\", function (s) {\n\n\t\t// This transport only deals with cross domain or forced-by-attrs requests\n\t\tif (s.crossDomain || s.scriptAttrs) {\n\t\t\tvar script, callback;\n\t\t\treturn {\n\t\t\t\tsend: function (_, complete) {\n\t\t\t\t\tscript = jQuery(\"<script>\")\n\t\t\t\t\t\t.attr(s.scriptAttrs || {})\n\t\t\t\t\t\t.prop({ charset: s.scriptCharset, src: s.url })\n\t\t\t\t\t\t.on(\"load error\", callback = function (evt) {\n\t\t\t\t\t\t\tscript.remove();\n\t\t\t\t\t\t\tcallback = null;\n\t\t\t\t\t\t\tif (evt) {\n\t\t\t\t\t\t\t\tcomplete(evt.type === \"error\" ? 404 : 200, evt.type);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\n\t\t\t\t\t// Use native DOM manipulation to avoid our domManip AJAX trickery\n\t\t\t\t\tdocument.head.appendChild(script[0]);\n\t\t\t\t},\n\t\t\t\tabort: function () {\n\t\t\t\t\tif (callback) {\n\t\t\t\t\t\tcallback();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t});\n\n\n\n\n\tvar oldCallbacks = [],\n\t\trjsonp = /(=)\\?(?=&|$)|\\?\\?/;\n\n\t// Default jsonp settings\n\tjQuery.ajaxSetup({\n\t\tjsonp: \"callback\",\n\t\tjsonpCallback: function () {\n\t\t\tvar callback = oldCallbacks.pop() || (jQuery.expando + \"_\" + (nonce.guid++));\n\t\t\tthis[callback] = true;\n\t\t\treturn callback;\n\t\t}\n\t});\n\n\t// Detect, normalize options and install callbacks for jsonp requests\n\tjQuery.ajaxPrefilter(\"json jsonp\", function (s, originalSettings, jqXHR) {\n\n\t\tvar callbackName, overwritten, responseContainer,\n\t\t\tjsonProp = s.jsonp !== false && (rjsonp.test(s.url) ?\n\t\t\t\t\"url\" :\n\t\t\t\ttypeof s.data === \"string\" &&\n\t\t\t\t(s.contentType || \"\")\n\t\t\t\t\t.indexOf(\"application/x-www-form-urlencoded\") === 0 &&\n\t\t\t\trjsonp.test(s.data) && \"data\"\n\t\t\t);\n\n\t\t// Handle iff the expected data type is \"jsonp\" or we have a parameter to set\n\t\tif (jsonProp || s.dataTypes[0] === \"jsonp\") {\n\n\t\t\t// Get callback name, remembering preexisting value associated with it\n\t\t\tcallbackName = s.jsonpCallback = isFunction(s.jsonpCallback) ?\n\t\t\t\ts.jsonpCallback() :\n\t\t\t\ts.jsonpCallback;\n\n\t\t\t// Insert callback into url or form data\n\t\t\tif (jsonProp) {\n\t\t\t\ts[jsonProp] = s[jsonProp].replace(rjsonp, \"$1\" + callbackName);\n\t\t\t} else if (s.jsonp !== false) {\n\t\t\t\ts.url += (rquery.test(s.url) ? \"&\" : \"?\") + s.jsonp + \"=\" + callbackName;\n\t\t\t}\n\n\t\t\t// Use data converter to retrieve json after script execution\n\t\t\ts.converters[\"script json\"] = function () {\n\t\t\t\tif (!responseContainer) {\n\t\t\t\t\tjQuery.error(callbackName + \" was not called\");\n\t\t\t\t}\n\t\t\t\treturn responseContainer[0];\n\t\t\t};\n\n\t\t\t// Force json dataType\n\t\t\ts.dataTypes[0] = \"json\";\n\n\t\t\t// Install callback\n\t\t\toverwritten = window[callbackName];\n\t\t\twindow[callbackName] = function () {\n\t\t\t\tresponseContainer = arguments;\n\t\t\t};\n\n\t\t\t// Clean-up function (fires after converters)\n\t\t\tjqXHR.always(function () {\n\n\t\t\t\t// If previous value didn't exist - remove it\n\t\t\t\tif (overwritten === undefined) {\n\t\t\t\t\tjQuery(window).removeProp(callbackName);\n\n\t\t\t\t\t// Otherwise restore preexisting value\n\t\t\t\t} else {\n\t\t\t\t\twindow[callbackName] = overwritten;\n\t\t\t\t}\n\n\t\t\t\t// Save back as free\n\t\t\t\tif (s[callbackName]) {\n\n\t\t\t\t\t// Make sure that re-using the options doesn't screw things around\n\t\t\t\t\ts.jsonpCallback = originalSettings.jsonpCallback;\n\n\t\t\t\t\t// Save the callback name for future use\n\t\t\t\t\toldCallbacks.push(callbackName);\n\t\t\t\t}\n\n\t\t\t\t// Call if it was a function and we have a response\n\t\t\t\tif (responseContainer && isFunction(overwritten)) {\n\t\t\t\t\toverwritten(responseContainer[0]);\n\t\t\t\t}\n\n\t\t\t\tresponseContainer = overwritten = undefined;\n\t\t\t});\n\n\t\t\t// Delegate to script\n\t\t\treturn \"script\";\n\t\t}\n\t});\n\n\n\n\n\t// Support: Safari 8 only\n\t// In Safari 8 documents created via document.implementation.createHTMLDocument\n\t// collapse sibling forms: the second one becomes a child of the first one.\n\t// Because of that, this security measure has to be disabled in Safari 8.\n\t// https://bugs.webkit.org/show_bug.cgi?id=137337\n\tsupport.createHTMLDocument = (function () {\n\t\tvar body = document.implementation.createHTMLDocument(\"\").body;\n\t\tbody.innerHTML = \"<form></form><form></form>\";\n\t\treturn body.childNodes.length === 2;\n\t})();\n\n\n\t// Argument \"data\" should be string of html\n\t// context (optional): If specified, the fragment will be created in this context,\n\t// defaults to document\n\t// keepScripts (optional): If true, will include scripts passed in the html string\n\tjQuery.parseHTML = function (data, context, keepScripts) {\n\t\tif (typeof data !== \"string\") {\n\t\t\treturn [];\n\t\t}\n\t\tif (typeof context === \"boolean\") {\n\t\t\tkeepScripts = context;\n\t\t\tcontext = false;\n\t\t}\n\n\t\tvar base, parsed, scripts;\n\n\t\tif (!context) {\n\n\t\t\t// Stop scripts or inline event handlers from being executed immediately\n\t\t\t// by using document.implementation\n\t\t\tif (support.createHTMLDocument) {\n\t\t\t\tcontext = document.implementation.createHTMLDocument(\"\");\n\n\t\t\t\t// Set the base href for the created document\n\t\t\t\t// so any parsed elements with URLs\n\t\t\t\t// are based on the document's URL (gh-2965)\n\t\t\t\tbase = context.createElement(\"base\");\n\t\t\t\tbase.href = document.location.href;\n\t\t\t\tcontext.head.appendChild(base);\n\t\t\t} else {\n\t\t\t\tcontext = document;\n\t\t\t}\n\t\t}\n\n\t\tparsed = rsingleTag.exec(data);\n\t\tscripts = !keepScripts && [];\n\n\t\t// Single tag\n\t\tif (parsed) {\n\t\t\treturn [context.createElement(parsed[1])];\n\t\t}\n\n\t\tparsed = buildFragment([data], context, scripts);\n\n\t\tif (scripts && scripts.length) {\n\t\t\tjQuery(scripts).remove();\n\t\t}\n\n\t\treturn jQuery.merge([], parsed.childNodes);\n\t};\n\n\n\t/**\n\t * Load a url into a page\n\t */\n\tjQuery.fn.load = function (url, params, callback) {\n\t\tvar selector, type, response,\n\t\t\tself = this,\n\t\t\toff = url.indexOf(\" \");\n\n\t\tif (off > -1) {\n\t\t\tselector = stripAndCollapse(url.slice(off));\n\t\t\turl = url.slice(0, off);\n\t\t}\n\n\t\t// If it's a function\n\t\tif (isFunction(params)) {\n\n\t\t\t// We assume that it's the callback\n\t\t\tcallback = params;\n\t\t\tparams = undefined;\n\n\t\t\t// Otherwise, build a param string\n\t\t} else if (params && typeof params === \"object\") {\n\t\t\ttype = \"POST\";\n\t\t}\n\n\t\t// If we have elements to modify, make the request\n\t\tif (self.length > 0) {\n\t\t\tjQuery.ajax({\n\t\t\t\turl: url,\n\n\t\t\t\t// If \"type\" variable is undefined, then \"GET\" method will be used.\n\t\t\t\t// Make value of this field explicit since\n\t\t\t\t// user can override it through ajaxSetup method\n\t\t\t\ttype: type || \"GET\",\n\t\t\t\tdataType: \"html\",\n\t\t\t\tdata: params\n\t\t\t}).done(function (responseText) {\n\n\t\t\t\t// Save response for use in complete callback\n\t\t\t\tresponse = arguments;\n\n\t\t\t\tself.html(selector ?\n\n\t\t\t\t\t// If a selector was specified, locate the right elements in a dummy div\n\t\t\t\t\t// Exclude scripts to avoid IE 'Permission Denied' errors\n\t\t\t\t\tjQuery(\"<div>\").append(jQuery.parseHTML(responseText)).find(selector) :\n\n\t\t\t\t\t// Otherwise use the full result\n\t\t\t\t\tresponseText);\n\n\t\t\t\t// If the request succeeds, this function gets \"data\", \"status\", \"jqXHR\"\n\t\t\t\t// but they are ignored because response was set above.\n\t\t\t\t// If it fails, this function gets \"jqXHR\", \"status\", \"error\"\n\t\t\t}).always(callback && function (jqXHR, status) {\n\t\t\t\tself.each(function () {\n\t\t\t\t\tcallback.apply(this, response || [jqXHR.responseText, status, jqXHR]);\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\n\t\treturn this;\n\t};\n\n\n\n\n\tjQuery.expr.pseudos.animated = function (elem) {\n\t\treturn jQuery.grep(jQuery.timers, function (fn) {\n\t\t\treturn elem === fn.elem;\n\t\t}).length;\n\t};\n\n\n\n\n\tjQuery.offset = {\n\t\tsetOffset: function (elem, options, i) {\n\t\t\tvar curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition,\n\t\t\t\tposition = jQuery.css(elem, \"position\"),\n\t\t\t\tcurElem = jQuery(elem),\n\t\t\t\tprops = {};\n\n\t\t\t// Set position first, in-case top/left are set even on static elem\n\t\t\tif (position === \"static\") {\n\t\t\t\telem.style.position = \"relative\";\n\t\t\t}\n\n\t\t\tcurOffset = curElem.offset();\n\t\t\tcurCSSTop = jQuery.css(elem, \"top\");\n\t\t\tcurCSSLeft = jQuery.css(elem, \"left\");\n\t\t\tcalculatePosition = (position === \"absolute\" || position === \"fixed\") &&\n\t\t\t\t(curCSSTop + curCSSLeft).indexOf(\"auto\") > -1;\n\n\t\t\t// Need to be able to calculate position if either\n\t\t\t// top or left is auto and position is either absolute or fixed\n\t\t\tif (calculatePosition) {\n\t\t\t\tcurPosition = curElem.position();\n\t\t\t\tcurTop = curPosition.top;\n\t\t\t\tcurLeft = curPosition.left;\n\n\t\t\t} else {\n\t\t\t\tcurTop = parseFloat(curCSSTop) || 0;\n\t\t\t\tcurLeft = parseFloat(curCSSLeft) || 0;\n\t\t\t}\n\n\t\t\tif (isFunction(options)) {\n\n\t\t\t\t// Use jQuery.extend here to allow modification of coordinates argument (gh-1848)\n\t\t\t\toptions = options.call(elem, i, jQuery.extend({}, curOffset));\n\t\t\t}\n\n\t\t\tif (options.top != null) {\n\t\t\t\tprops.top = (options.top - curOffset.top) + curTop;\n\t\t\t}\n\t\t\tif (options.left != null) {\n\t\t\t\tprops.left = (options.left - curOffset.left) + curLeft;\n\t\t\t}\n\n\t\t\tif (\"using\" in options) {\n\t\t\t\toptions.using.call(elem, props);\n\n\t\t\t} else {\n\t\t\t\tcurElem.css(props);\n\t\t\t}\n\t\t}\n\t};\n\n\tjQuery.fn.extend({\n\n\t\t// offset() relates an element's border box to the document origin\n\t\toffset: function (options) {\n\n\t\t\t// Preserve chaining for setter\n\t\t\tif (arguments.length) {\n\t\t\t\treturn options === undefined ?\n\t\t\t\t\tthis :\n\t\t\t\t\tthis.each(function (i) {\n\t\t\t\t\t\tjQuery.offset.setOffset(this, options, i);\n\t\t\t\t\t});\n\t\t\t}\n\n\t\t\tvar rect, win,\n\t\t\t\telem = this[0];\n\n\t\t\tif (!elem) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Return zeros for disconnected and hidden (display: none) elements (gh-2310)\n\t\t\t// Support: IE <=11 only\n\t\t\t// Running getBoundingClientRect on a\n\t\t\t// disconnected node in IE throws an error\n\t\t\tif (!elem.getClientRects().length) {\n\t\t\t\treturn { top: 0, left: 0 };\n\t\t\t}\n\n\t\t\t// Get document-relative position by adding viewport scroll to viewport-relative gBCR\n\t\t\trect = elem.getBoundingClientRect();\n\t\t\twin = elem.ownerDocument.defaultView;\n\t\t\treturn {\n\t\t\t\ttop: rect.top + win.pageYOffset,\n\t\t\t\tleft: rect.left + win.pageXOffset\n\t\t\t};\n\t\t},\n\n\t\t// position() relates an element's margin box to its offset parent's padding box\n\t\t// This corresponds to the behavior of CSS absolute positioning\n\t\tposition: function () {\n\t\t\tif (!this[0]) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar offsetParent, offset, doc,\n\t\t\t\telem = this[0],\n\t\t\t\tparentOffset = { top: 0, left: 0 };\n\n\t\t\t// position:fixed elements are offset from the viewport, which itself always has zero offset\n\t\t\tif (jQuery.css(elem, \"position\") === \"fixed\") {\n\n\t\t\t\t// Assume position:fixed implies availability of getBoundingClientRect\n\t\t\t\toffset = elem.getBoundingClientRect();\n\n\t\t\t} else {\n\t\t\t\toffset = this.offset();\n\n\t\t\t\t// Account for the *real* offset parent, which can be the document or its root element\n\t\t\t\t// when a statically positioned element is identified\n\t\t\t\tdoc = elem.ownerDocument;\n\t\t\t\toffsetParent = elem.offsetParent || doc.documentElement;\n\t\t\t\twhile (offsetParent &&\n\t\t\t\t\t(offsetParent === doc.body || offsetParent === doc.documentElement) &&\n\t\t\t\t\tjQuery.css(offsetParent, \"position\") === \"static\") {\n\n\t\t\t\t\toffsetParent = offsetParent.parentNode;\n\t\t\t\t}\n\t\t\t\tif (offsetParent && offsetParent !== elem && offsetParent.nodeType === 1) {\n\n\t\t\t\t\t// Incorporate borders into its offset, since they are outside its content origin\n\t\t\t\t\tparentOffset = jQuery(offsetParent).offset();\n\t\t\t\t\tparentOffset.top += jQuery.css(offsetParent, \"borderTopWidth\", true);\n\t\t\t\t\tparentOffset.left += jQuery.css(offsetParent, \"borderLeftWidth\", true);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Subtract parent offsets and element margins\n\t\t\treturn {\n\t\t\t\ttop: offset.top - parentOffset.top - jQuery.css(elem, \"marginTop\", true),\n\t\t\t\tleft: offset.left - parentOffset.left - jQuery.css(elem, \"marginLeft\", true)\n\t\t\t};\n\t\t},\n\n\t\t// This method will return documentElement in the following cases:\n\t\t// 1) For the element inside the iframe without offsetParent, this method will return\n\t\t//    documentElement of the parent window\n\t\t// 2) For the hidden or detached element\n\t\t// 3) For body or html element, i.e. in case of the html node - it will return itself\n\t\t//\n\t\t// but those exceptions were never presented as a real life use-cases\n\t\t// and might be considered as more preferable results.\n\t\t//\n\t\t// This logic, however, is not guaranteed and can change at any point in the future\n\t\toffsetParent: function () {\n\t\t\treturn this.map(function () {\n\t\t\t\tvar offsetParent = this.offsetParent;\n\n\t\t\t\twhile (offsetParent && jQuery.css(offsetParent, \"position\") === \"static\") {\n\t\t\t\t\toffsetParent = offsetParent.offsetParent;\n\t\t\t\t}\n\n\t\t\t\treturn offsetParent || documentElement;\n\t\t\t});\n\t\t}\n\t});\n\n\t// Create scrollLeft and scrollTop methods\n\tjQuery.each({ scrollLeft: \"pageXOffset\", scrollTop: \"pageYOffset\" }, function (method, prop) {\n\t\tvar top = \"pageYOffset\" === prop;\n\n\t\tjQuery.fn[method] = function (val) {\n\t\t\treturn access(this, function (elem, method, val) {\n\n\t\t\t\t// Coalesce documents and windows\n\t\t\t\tvar win;\n\t\t\t\tif (isWindow(elem)) {\n\t\t\t\t\twin = elem;\n\t\t\t\t} else if (elem.nodeType === 9) {\n\t\t\t\t\twin = elem.defaultView;\n\t\t\t\t}\n\n\t\t\t\tif (val === undefined) {\n\t\t\t\t\treturn win ? win[prop] : elem[method];\n\t\t\t\t}\n\n\t\t\t\tif (win) {\n\t\t\t\t\twin.scrollTo(\n\t\t\t\t\t\t!top ? val : win.pageXOffset,\n\t\t\t\t\t\ttop ? val : win.pageYOffset\n\t\t\t\t\t);\n\n\t\t\t\t} else {\n\t\t\t\t\telem[method] = val;\n\t\t\t\t}\n\t\t\t}, method, val, arguments.length);\n\t\t};\n\t});\n\n\t// Support: Safari <=7 - 9.1, Chrome <=37 - 49\n\t// Add the top/left cssHooks using jQuery.fn.position\n\t// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084\n\t// Blink bug: https://bugs.chromium.org/p/chromium/issues/detail?id=589347\n\t// getComputedStyle returns percent when specified for top/left/bottom/right;\n\t// rather than make the css module depend on the offset module, just check for it here\n\tjQuery.each([\"top\", \"left\"], function (_i, prop) {\n\t\tjQuery.cssHooks[prop] = addGetHookIf(support.pixelPosition,\n\t\t\tfunction (elem, computed) {\n\t\t\t\tif (computed) {\n\t\t\t\t\tcomputed = curCSS(elem, prop);\n\n\t\t\t\t\t// If curCSS returns percentage, fallback to offset\n\t\t\t\t\treturn rnumnonpx.test(computed) ?\n\t\t\t\t\t\tjQuery(elem).position()[prop] + \"px\" :\n\t\t\t\t\t\tcomputed;\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\t});\n\n\n\t// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods\n\tjQuery.each({ Height: \"height\", Width: \"width\" }, function (name, type) {\n\t\tjQuery.each({\n\t\t\tpadding: \"inner\" + name,\n\t\t\tcontent: type,\n\t\t\t\"\": \"outer\" + name\n\t\t}, function (defaultExtra, funcName) {\n\n\t\t\t// Margin is only for outerHeight, outerWidth\n\t\t\tjQuery.fn[funcName] = function (margin, value) {\n\t\t\t\tvar chainable = arguments.length && (defaultExtra || typeof margin !== \"boolean\"),\n\t\t\t\t\textra = defaultExtra || (margin === true || value === true ? \"margin\" : \"border\");\n\n\t\t\t\treturn access(this, function (elem, type, value) {\n\t\t\t\t\tvar doc;\n\n\t\t\t\t\tif (isWindow(elem)) {\n\n\t\t\t\t\t\t// $( window ).outerWidth/Height return w/h including scrollbars (gh-1729)\n\t\t\t\t\t\treturn funcName.indexOf(\"outer\") === 0 ?\n\t\t\t\t\t\t\telem[\"inner\" + name] :\n\t\t\t\t\t\t\telem.document.documentElement[\"client\" + name];\n\t\t\t\t\t}\n\n\t\t\t\t\t// Get document width or height\n\t\t\t\t\tif (elem.nodeType === 9) {\n\t\t\t\t\t\tdoc = elem.documentElement;\n\n\t\t\t\t\t\t// Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height],\n\t\t\t\t\t\t// whichever is greatest\n\t\t\t\t\t\treturn Math.max(\n\t\t\t\t\t\t\telem.body[\"scroll\" + name], doc[\"scroll\" + name],\n\t\t\t\t\t\t\telem.body[\"offset\" + name], doc[\"offset\" + name],\n\t\t\t\t\t\t\tdoc[\"client\" + name]\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\n\t\t\t\t\treturn value === undefined ?\n\n\t\t\t\t\t\t// Get width or height on the element, requesting but not forcing parseFloat\n\t\t\t\t\t\tjQuery.css(elem, type, extra) :\n\n\t\t\t\t\t\t// Set width or height on the element\n\t\t\t\t\t\tjQuery.style(elem, type, value, extra);\n\t\t\t\t}, type, chainable ? margin : undefined, chainable);\n\t\t\t};\n\t\t});\n\t});\n\n\n\tjQuery.each([\n\t\t\"ajaxStart\",\n\t\t\"ajaxStop\",\n\t\t\"ajaxComplete\",\n\t\t\"ajaxError\",\n\t\t\"ajaxSuccess\",\n\t\t\"ajaxSend\"\n\t], function (_i, type) {\n\t\tjQuery.fn[type] = function (fn) {\n\t\t\treturn this.on(type, fn);\n\t\t};\n\t});\n\n\n\n\n\tjQuery.fn.extend({\n\n\t\tbind: function (types, data, fn) {\n\t\t\treturn this.on(types, null, data, fn);\n\t\t},\n\t\tunbind: function (types, fn) {\n\t\t\treturn this.off(types, null, fn);\n\t\t},\n\n\t\tdelegate: function (selector, types, data, fn) {\n\t\t\treturn this.on(types, selector, data, fn);\n\t\t},\n\t\tundelegate: function (selector, types, fn) {\n\n\t\t\t// ( namespace ) or ( selector, types [, fn] )\n\t\t\treturn arguments.length === 1 ?\n\t\t\t\tthis.off(selector, \"**\") :\n\t\t\t\tthis.off(types, selector || \"**\", fn);\n\t\t},\n\n\t\thover: function (fnOver, fnOut) {\n\t\t\treturn this.mouseenter(fnOver).mouseleave(fnOut || fnOver);\n\t\t}\n\t});\n\n\tjQuery.each(\n\t\t(\"blur focus focusin focusout resize scroll click dblclick \" +\n\t\t\t\"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave \" +\n\t\t\t\"change select submit keydown keypress keyup contextmenu\").split(\" \"),\n\t\tfunction (_i, name) {\n\n\t\t\t// Handle event binding\n\t\t\tjQuery.fn[name] = function (data, fn) {\n\t\t\t\treturn arguments.length > 0 ?\n\t\t\t\t\tthis.on(name, null, data, fn) :\n\t\t\t\t\tthis.trigger(name);\n\t\t\t};\n\t\t}\n\t);\n\n\n\n\n\t// Support: Android <=4.0 only\n\t// Make sure we trim BOM and NBSP\n\t// Require that the \"whitespace run\" starts from a non-whitespace\n\t// to avoid O(N^2) behavior when the engine would try matching \"\\s+$\" at each space position.\n\tvar rtrim = /^[\\s\\uFEFF\\xA0]+|([^\\s\\uFEFF\\xA0])[\\s\\uFEFF\\xA0]+$/g;\n\n\t// Bind a function to a context, optionally partially applying any\n\t// arguments.\n\t// jQuery.proxy is deprecated to promote standards (specifically Function#bind)\n\t// However, it is not slated for removal any time soon\n\tjQuery.proxy = function (fn, context) {\n\t\tvar tmp, args, proxy;\n\n\t\tif (typeof context === \"string\") {\n\t\t\ttmp = fn[context];\n\t\t\tcontext = fn;\n\t\t\tfn = tmp;\n\t\t}\n\n\t\t// Quick check to determine if target is callable, in the spec\n\t\t// this throws a TypeError, but we will just return undefined.\n\t\tif (!isFunction(fn)) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\t// Simulated bind\n\t\targs = slice.call(arguments, 2);\n\t\tproxy = function () {\n\t\t\treturn fn.apply(context || this, args.concat(slice.call(arguments)));\n\t\t};\n\n\t\t// Set the guid of unique handler to the same of original handler, so it can be removed\n\t\tproxy.guid = fn.guid = fn.guid || jQuery.guid++;\n\n\t\treturn proxy;\n\t};\n\n\tjQuery.holdReady = function (hold) {\n\t\tif (hold) {\n\t\t\tjQuery.readyWait++;\n\t\t} else {\n\t\t\tjQuery.ready(true);\n\t\t}\n\t};\n\tjQuery.isArray = Array.isArray;\n\tjQuery.parseJSON = JSON.parse;\n\tjQuery.nodeName = nodeName;\n\tjQuery.isFunction = isFunction;\n\tjQuery.isWindow = isWindow;\n\tjQuery.camelCase = camelCase;\n\tjQuery.type = toType;\n\n\tjQuery.now = Date.now;\n\n\tjQuery.isNumeric = function (obj) {\n\n\t\t// As of jQuery 3.0, isNumeric is limited to\n\t\t// strings and numbers (primitives or objects)\n\t\t// that can be coerced to finite numbers (gh-2662)\n\t\tvar type = jQuery.type(obj);\n\t\treturn (type === \"number\" || type === \"string\") &&\n\n\t\t\t// parseFloat NaNs numeric-cast false positives (\"\")\n\t\t\t// ...but misinterprets leading-number strings, particularly hex literals (\"0x...\")\n\t\t\t// subtraction forces infinities to NaN\n\t\t\t!isNaN(obj - parseFloat(obj));\n\t};\n\n\tjQuery.trim = function (text) {\n\t\treturn text == null ?\n\t\t\t\"\" :\n\t\t\t(text + \"\").replace(rtrim, \"$1\");\n\t};\n\n\n\n\t// Register as a named AMD module, since jQuery can be concatenated with other\n\t// files that may use define, but not via a proper concatenation script that\n\t// understands anonymous AMD modules. A named AMD is safest and most robust\n\t// way to register. Lowercase jquery is used because AMD module names are\n\t// derived from file names, and jQuery is normally delivered in a lowercase\n\t// file name. Do this after creating the global so that if an AMD module wants\n\t// to call noConflict to hide this version of jQuery, it will work.\n\n\t// Note that for maximum portability, libraries that are not jQuery should\n\t// declare themselves as anonymous modules, and avoid setting a global if an\n\t// AMD loader is present. jQuery is a special case. For more information, see\n\t// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon\n\n\tif (typeof define === \"function\" && define.amd) {\n\t\tdefine(\"jquery\", [], function () {\n\t\t\treturn jQuery;\n\t\t});\n\t}\n\n\n\n\n\tvar\n\n\t\t// Map over jQuery in case of overwrite\n\t\t_jQuery = window.jQuery,\n\n\t\t// Map over the $ in case of overwrite\n\t\t_$ = window.$;\n\n\tjQuery.noConflict = function (deep) {\n\t\tif (window.$ === jQuery) {\n\t\t\twindow.$ = _$;\n\t\t}\n\n\t\tif (deep && window.jQuery === jQuery) {\n\t\t\twindow.jQuery = _jQuery;\n\t\t}\n\n\t\treturn jQuery;\n\t};\n\n\t// Expose jQuery and $ identifiers, even in AMD\n\t// (trac-7102#comment:10, https://github.com/jquery/jquery/pull/557)\n\t// and CommonJS for browser emulators (trac-13566)\n\tif (typeof noGlobal === \"undefined\") {\n\t\twindow.jQuery = window.$ = jQuery;\n\t}\n\n\n\n\n\treturn jQuery;\n});"
  },
  {
    "path": "src/sourceDev.WebApp/wwwroot/wlwmanifest.xml",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n<manifest xmlns=\"http://schemas.microsoft.com/wlw/manifest/weblog\">\n  <options>\n    <clientType>Metaweblog</clientType>\n    <supportsEmbeds>Yes</supportsEmbeds>\n    <supportsScripts>No</supportsScripts>\n    <supportsKeywords>No</supportsKeywords>\n    <supportsNewCategories>Yes</supportsNewCategories>\n    <supportsNewCategoriesInline>Yes</supportsNewCategoriesInline>\n    <supportsCommentPolicy>Yes</supportsCommentPolicy>\n    <supportsSlug>Yes</supportsSlug>\n    <supportsExcerpt>Yes</supportsExcerpt>\n    <supportsPages>Yes</supportsPages>\n    <supportsPageParent>Yes</supportsPageParent>\n    <supportsPageOrder>Yes</supportsPageOrder>\n    <supportsAuthor>No</supportsAuthor>\n    <supportsGetTags>No</supportsGetTags>\n    <requiresHtmlTitles>No</requiresHtmlTitles>\n    <supportsEmptyTitles>No</supportsEmptyTitles>\n    <fileUploadNameFormat>{FileName}</fileUploadNameFormat>\n  </options>\n  <weblog>\n    <ServiceName>cloudscribe.SimpleContent</ServiceName>\n    <imageUrl>favicon.ico</imageUrl>\n    <watermarkImageUrl>favicon.ico</watermarkImageUrl>\n    <homepageLinkText>View your blog</homepageLinkText>\n    <adminLinkText>Manage your blog</adminLinkText>\n      <!-- \n      https://msdn.microsoft.com/en-us/library/bb463260.aspx\n    <adminUrl><![CDATA[{blog-homepage-url}views/login.cshtml]]></adminUrl>\n    -->\n  </weblog>\n</manifest>\n"
  },
  {
    "path": "test/cloudscribe.MetaWeblog.Tests/MetaWeblogRequestParserTests.cs",
    "content": "﻿// Copyright (c) Source Tree Solutions, LLC. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.\n// Author:                  Joe Audette\n// Created:                 2016-02-16\n// Last Modified:           2017-07-20\n// \n\nusing System.Xml.Linq;\nusing Xunit;\n\n\nnamespace cloudscribe.MetaWeblog.Tests\n{\n    public class MetaWeblogRequestParserTests\n    {\n\n        [Fact]\n        public void Can_Parse_GetUserBlogs_Request()\n        {\n           string stringContent = @\"<?xml version='1.0' encoding='utf-8'?>\n             <methodCall>\n            <methodName>blogger.getUsersBlogs</methodName>\n            <params>\n              <param>\n                <value>\n                  <string>0123456789ABCDEF</string>\n                   </value>\n                 </param>\n                 <param>\n                   <value>\n                     <string>frodobaggins</string>\n                   </value>\n                 </param>\n                 <param>\n                   <value>\n                     <string>thekeystupid</string>\n                   </value>\n                 </param>\n               </params>\n             </methodCall> \n             \";\n\n            var doc = XDocument.Parse(stringContent);\n\n            var parser = new MetaWeblogRequestParser();\n            \n            var request = parser.ParseRequest(doc);\n\n            Assert.NotNull(request);\n\n            Assert.Equal(\"0123456789ABCDEF\", request.AppKey);\n            Assert.Equal(\"frodobaggins\", request.UserName);\n            Assert.Equal(\"thekeystupid\", request.Password);\n\n        }\n\n        [Fact]\n        public void Can_Parse_GetCategories_Request()\n        {\n            string xml = @\"<?xml version='1.0' encoding='utf-8'?>\n               <methodCall>\n                <methodName>metaWeblog.getCategories</methodName>\n              <params>\n                <param>\n                <value>\n                <string>default</string>\n               </value>\n               </param>\n               <param>\n                <value>\n                 <string>frodobaggins</string>\n              </value>\n             </param>\n             <param>\n               <value>\n               <string>thekeystupid</string>\n              </value>\n             </param>\n              </params>\n             </methodCall> \n             \";\n\n            var doc = XDocument.Parse(xml);\n\n            var parser = new MetaWeblogRequestParser();\n           \n            Assert.NotNull(doc);\n\n            var request = parser.ParseRequest(doc);\n\n            Assert.NotNull(request);\n\n            Assert.Equal(\"default\", request.BlogId);\n            Assert.Equal(\"frodobaggins\", request.UserName);\n            Assert.Equal(\"thekeystupid\", request.Password);\n\n        }\n\n        [Fact]\n        public void Can_Parse_GetRecentPosts_Request()\n        {\n\n            string xml = @\"<?xml version='1.0' encoding='utf-8'?>\n                    <methodCall>\n                      <methodName>metaWeblog.getRecentPosts</methodName>\n                      <params>\n                        <param>\n                          <value>\n                            <string>default</string>\n                          </value>\n                        </param>\n                        <param>\n                          <value>\n                            <string>frodobaggins</string>\n                          </value>\n                        </param>\n                        <param>\n                          <value>\n                            <string>thekeystupid</string>\n                          </value>\n                        </param>\n                        <param>\n                          <value>\n                            <int>1</int>\n                          </value>\n                        </param>\n                      </params>\n                    </methodCall>\";\n\n            var doc = XDocument.Parse(xml);\n\n            var parser = new MetaWeblogRequestParser();\n            \n            Assert.NotNull(doc);\n\n            var request = parser.ParseRequest(doc);\n\n            Assert.NotNull(request);\n\n            Assert.Equal(\"default\", request.BlogId);\n            Assert.Equal(\"frodobaggins\", request.UserName);\n            Assert.Equal(\"thekeystupid\", request.Password);\n\n        }\n\n        [Fact]\n        public void Can_Parse_NewPost_Request()\n        {\n            string xml = @\"<?xml version='1.0' encoding='utf-8'?>\n            <methodCall>\n              <methodName>metaWeblog.newPost</methodName>\n              <params>\n                <param>\n                  <value>\n                    <string>default</string>\n                  </value>\n                </param>\n                <param>\n                  <value>\n                    <string>frodobaggins</string>\n                  </value>\n                </param>\n                <param>\n                  <value>\n                    <string>thekeystupid</string>\n                  </value>\n                </param>\n                <param>\n                  <value>\n                    <struct>\n                      <member>\n                        <name>title</name>\n                        <value>\n                          <string>olw post 1</string>\n                        </value>\n                      </member>\n                      <member>\n                        <name>description</name>\n                        <value>\n                          <string>&lt;p&gt;this is a post&lt;/p&gt; &lt;p&gt;are we cooking yet&lt;/p&gt;</string>\n                        </value>\n                      </member>\n                      <member>\n                        <name>categories</name>\n                        <value>\n                          <array>\n                            <data>\n                              <value>\n                                <string> Cooking</string>\n                              </value>\n                            </data>\n                          </array>\n                        </value>\n                      </member>\n                    </struct>\n                  </value>\n                </param>\n                <param>\n                  <value>\n                    <boolean>1</boolean>\n                  </value>\n                </param>\n              </params>\n            </methodCall>\";\n\n            var doc = XDocument.Parse(xml);\n\n            var parser = new MetaWeblogRequestParser();\n           \n            Assert.NotNull(doc);\n\n            var request = parser.ParseRequest(doc);\n\n            Assert.NotNull(request);\n\n            Assert.Equal(\"default\", request.BlogId);\n            Assert.Equal(\"frodobaggins\", request.UserName);\n            Assert.Equal(\"thekeystupid\", request.Password);\n            Assert.Equal(\"olw post 1\", request.Post.title);\n            Assert.Contains(\"cooking\", request.Post.description);\n\n        }\n\n        [Fact]\n        public void Can_Parse_DeletePost_Request()\n        {\n            string xml = @\"<?xml version='1.0' encoding='utf-8'?>\n                <methodCall>\n                  <methodName>blogger.deletePost</methodName>\n                  <params>\n                    <param>\n                      <value>\n                        <string>0123456789ABCDEF</string>\n                      </value>\n                    </param>\n                    <param>\n                      <value>\n                        <string>c65ea975-516c-40aa-bbaa-d6192fbc30d8</string>\n                      </value>\n                    </param>\n                    <param>\n                      <value>\n                        <string>frodobaggins</string>\n                      </value>\n                    </param>\n                    <param>\n                      <value>\n                        <string>thekeystupid</string>\n                      </value>\n                    </param>\n                    <param>\n                      <value>\n                        <boolean>1</boolean>\n                      </value>\n                    </param>\n                  </params>\n                </methodCall>\";\n\n            var doc = XDocument.Parse(xml);\n\n            var parser = new MetaWeblogRequestParser();\n            \n            Assert.NotNull(doc);\n\n            var request = parser.ParseRequest(doc);\n\n            Assert.NotNull(request);\n\n            Assert.Equal(\"0123456789ABCDEF\", request.AppKey);\n            Assert.Equal(\"frodobaggins\", request.UserName);\n            Assert.Equal(\"thekeystupid\", request.Password);\n            Assert.Equal(\"c65ea975-516c-40aa-bbaa-d6192fbc30d8\", request.PostId);\n\n\n        }\n\n        [Fact]\n        public void Can_Parse_NewMedia_Request()\n        {\n            string xml = @\"<?xml version='1.0' encoding='utf-8'?>\n                <methodCall>\n                  <methodName>metaWeblog.newMediaObject</methodName>\n                  <params>\n                    <param>\n                      <value>\n                        <string>default</string>\n                      </value>\n                    </param>\n                    <param>\n                      <value>\n                        <string>frodobaggins</string>\n                      </value>\n                    </param>\n                    <param>\n                      <value>\n                        <string>thekeystupid</string>\n                      </value>\n                    </param>\n                    <param>\n                      <value>\n                        <struct>\n                          <member>\n                            <name>name</name>\n                            <value>\n                              <string>Open-Live-Writer/One-with-a-picture-please_E33C/IMG_1311.jpg</string>\n                            </value>\n                          </member>\n                          <member>\n                            <name>type</name>\n                            <value>\n                              <string>image/jpeg</string>\n                            </value>\n                          </member>\n                          <member>\n                            <name>bits</name>\n                            <value>\n                              <base64>/9j/4AAQSkZJRgABAQEAkACQAAD/2wBDAAMCAgICAgMCAgIDAwMDBAYEBAQEBAgGBgUGCQgKCgkICQkKDA8MCgsOCwkJDRENDg8QEBEQCgwSExIQEw8QEBD/2wBDAQMDAwQDBAgEBAgQCwkLEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBD/wAARCAMABAADASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwDzdVVnPBLAdv8AGnKmQAsYCjpt709NuD8p3DtTvl+91UDGPrX9AH5YMCqvQMuDmnKkf1PLdOopwDAttPPXnvQF/jwMj+H1oGnYbtVccN7ew759aQKvbPByQP6e1S9+2KB90EZwR+A9qCr3Ifm8wrg7DzxRtHG1dqk4x29+KmGM4b5Tk59KUoVyy47k4p3J2I9oPzKx5BA3UeX8o25OP5VIo47ZXI9s96TaB8/zEdqNi73Iyq7t21QQOmTx60bV/hUcn64qTkSfeBzjhh09qcoPJ7daGTuQrHnCqQMd8UuxVUybVBI7VJtZQyg8evpSFRguvBzn1oGlYYq9D2/U03bu+70Bz9ff2qU7du3rnoKQxrx8x6dfWmLdDdvXawPB4I703aW6A8n8alWNWz1OG5BP+cUoHH3c+n/16SAi2qMbVwp4HH+eKGIyPlzjt6f4VK4257Ac8n9Kb8qt15J/ip7iuM2qq/dAZe+OlKq7V3Bcc8/WpGXHPIJP5fWkPysF446KaQ72GbWY9c4603y1ChW6Z7VKV9M59elBycbec9qBMZ5Y4jbac9CaNvy/Lk4NOZXGxVxuzQ3zbSrH3yO39KLXGmRMm1d23IJ5PtTmx/q4+hHGDTtnRskk9sDFOCKoJ4G30602JkQyg6c/xUbfmC7uR3IqTb5jbTxxnHr7+9ADYbdlue39PWiwiIgMexTOfc5o8v8Au4BzjOO1SqrNnkgEc44pdu1lVWPQAc8YouGrIcclc7SRx7+4pU5wNoAHUt+lSKq7mHJA647/AI01lYsdpTcw6fyo3H0uMCLk7l4J9M04xqX3en6fSnEdj1PHH9aVVVVx97tx2oBEbLGTnk5weTS7VDYHBb+E/wCcYp7LsyWUYHH1oEe3O5hlc9OeKATImUrnAXn24AoWNRnoDnt3+tTNu46fl/jSKvzbdpHagWhCoJYlscdDSmM4GBkHrzT9uWxkYzgHb19qds3ZA6EkZobAYyquPUDqO1Js+7tzwcrx+dPVFXvnnt3/AMaVl46njoPWiwXIvmYjk575pWUryVyf609U3D72Cv8AOhQFViy4PGckdaBeoxVk3H5enGDTVVlBXcP8/wA6k29McAD1o2N/eAJ5pgm+gyMBlG7jPH0pu35uoIPf1qwwGOwJ6+1NbjrwKENu5CsP71cDtnnt+NO8v5vm4+lO2AqOfwqRlwvQ5ouJKxDtDMeSQPbAphjVFO0DHtUxHdeX/wBnrijp83p0OM4+tAXIljACruPt7fhSMmQVxgg9Kl28DcM5PFI0bcdCT+gpoViPO3CqFznk/wCNBjXJ4yQTn/H3qVg3I8v/AAxRt3bgvCt6c/8A6qB3IfLDMFZMgnPFOkjYNtVTjHGD0p56HGc9uKaI1DBmPPr/APqpiGqGDkFQfU5p20MuWAOOn/66cufu7h7ZpNq5AY5yMHPYdaW4+YZ5fTdn07UKq/e4OeuRjJ5qTawYEPlSeBSYXpGo+U5oAj2dWk5/GmjG35s8846j8qlCq3y8H+8B607aqt8q49fShCWpEu0sWZeAOM9vw7Uq44+bHX8ak2ozYbb0+lBUknpkdBmhoq5Ht6NlV7c0m0Z55BJ4xUiblBJXB9PSjad29ecj0oWgiPYvIXaAenPWhlwPmyV7U5m2qdvfgbegpwHIxjnrxRYZCuM9h7k55o2Zzubgfr9amZSuNpUHHHt9ajWNht384OfrT3ExGibaWLf/AFqFVdo9M+nepGUqTiTH1XtQ2B91c7uOnWkJjCNp+U5HcgdKF/eLtL4yuOnSn4Axg8H/ADxRtGCzSMSeD7n1pNFIiVW+X5VwOPel27V3c44x3NSKrsxwQAFzzSMp29duOuelNgmReWATx165oKjnpgdfaptm1dw4xxnP3qZ/q2CtIT3+poQkM29GXgH+fakCLt8tmzxjn+tSMuVUMzEDnd60rLtj2l/6/nQNasi27WCqOp6FelG1ekfDD8qkxt+Vckg8euTSsuFA49/emVokRfMygbQV7ilZc4Tyyf1GKXodrcDjoetK2F3MvJJx6ZpWBsZt+U4yM8/59KTaD83APoO9TFfvLyAaTCspVfxFGwEW3YQrZJ96UrwcgEflUjBmUIseCc8ngil2ru2tyR93HOKQ0yvtY4Vs5GM/1Ap+7GUVeB2FSbX528+ue1NZCuRxk8r3xT3C9iPy1ONqkN9KNuV+7nnbyKeqoVAUAeuO9OPmKWUKuF9O1MNyLy9pDKvzADoBxSNG/LMuPl6e1TGPLY6H69aaFZeeT3x1oHa2gzG3r34PtQrc7VGeeuKkUL8yrzgU4rn5toGfekyUyExCQfOm4D8hSqoDfu1Jzgct96pk9eSPT0xSNH827+f55qblEe3LHByuc/jSKu75lXvyO5qbb1YL2B3Yx/8AqoHPK4OP0NIFch2svzcFR83J4P1pSvmfKrEgnuOlTNtZePmweOeaTnBbbgj73+FFx3sRMoXqpwfTpml8vA+VlGffGKUqysI8jHJHvT2XG07Rkf570xJpsYV3NtVQSP1pFTaV2/Ken1qRY22/Lxg9c0c5yuCeaRW+pFHGP9Ym0DnJ9aXbuK5xjrUmFVmVu/oaFVd3zEnOB0psF2Y1oejKo4PzUKvmfPkj6+1Pzt+Vl/8Ar/hTgucruKkn09u9TqNaaESx5yu4rjnGaNuQflByRwR0/wD11I3baeT+vNOZc9hwfrmgaI1Vd24YBI54600qDjbyfp6VL8rZbI+Xr2/Kl3bcfKowOPrSYMaoST5cnBPJ7/nT1j+7tXBwM47UhVhgNgcZ/wD1VIsZwG3Dj26UmMLgWqxWT3y+ZCkl1HJGo/eShoRhRn1PfjAzyK/UH9nHxFL4s+Fuka81xmOe2hVLfyiog2xr/EQGYspVjnOGJAOK/MjydJa3MmtM/wBnhLYMcm3DkBUJ4JIBOSAOQK/SP9kWNk+A/htmvftG+3UlSfmhYIitGw/hIYMdpxjPQV+L59SdPNsS+jaf/kqP02nUjUy3BvqoNP5Sdj2WivPPHHxYbwnrZ8P2nh97u48tJBJJMI4zuyeOCTjHtXF3Xx28WyAi30/SbfPqskhX8dwBrxZVYQ0bLjQqTV0j3emTTQ28bTXEqRRryzOwAH1Jr5y1L4r+N9S4bWmtUx922jWL9eW/WubutWur1j9uuri4J6+dKz5P4k1m8THoaxwknuz6QvviN4I0/Pn+JLNyO0Decf8AxwGufvvjd4XtwfsNlf3TDofLEan8WOf0rwc3WVG3GPao5Lk/U1k8U+iNFhIrqfFgbHzdj79CaUFRjrtPHIp67dpxGPfil2j+MYBXv37fjX9Gn48JtCkEEnPNIw74Uc/Tj+tORVYk7TyPvZ6H+lHluxDHpnp3FCDYD/e3bSemeRTcNu27se3enqo+vHOewoAHC8k+o96YMj+UkErjb2z0p/zMpI9OR7UoU9UyP5dKU7iu4rgnnAoDUYi9W/nThsUHb07Uvl9dvIGM/wD66X72MYKj9KGUtBvcMvOOPwoVeN2SRjn+lOLYUFmUbR6fnQvzdcgdaTFdXI2G5QFwQx7+npTioGXXjPHHanryxwAaYqpzt6HrjpmncbEMfzbmfnB49P8A61G09+oPrStlcdVH3fx+tO2rjbtAHXHp9aCRB3VecnjtzSMo+7gkgdT2pVXrng9j9O9BXnJZjnvRazH6ibcKPmJP6Cj2br64zSnG8bWP+6f50vzZ3Enn1HejYG+wxf7zHmjA6cZH6Gn9WP7zJpG9e/t1NAXGMVY8gDd6d/8AGja2D8qjK42+v0p/HBXPPGBRt78Ej0P6+1NgJlRj5iMUg+XAWPnP6UbWBPzE9+tO+nBB9aVguNPVl4BGeRTdqgZQZboAD2qRSv3lxydrEjmjlvl55HOFpoW6uRrnB3L+nWlxjBA25Gfzp21sfMf060fMoB+9zTFcQZVcg5z05pu0LhuBkenSnqvlq25cHpjvz2pW3DO1sqOw/WkCI/u4yyk88dKArdSqk/Xk1J8oI+XPOaaEG4/KMd896YgXdn5lxu65pu1Y8+vTipd235S2B0+ppBGu4t6dM0hjWRhjaRj0NIdv3P5U5snb8pGelKQNp6c/rRsDGBEZS3Tsff6Ui7cdOOxNPVVOPlI9j2pPLYyAbR/hQITDbu7em4dKTceVXG48dak2jhT+eeabsVc7eFz096Y72EUqPmGA1IVVmIJBx+hp6jOcc4A/CkZV2jaSPU/40A9BhHy7cZU0m1cZf8qkXfyG4FIy9TjAJAAxQTuMXjb5asMfrSjoMqM9ffNP2/Lx8uaF27SehHX3p7gmMwoPzD24pfLfd94Mp5GaXoARgZ4ye1KF69fXJotYPIb1Ysyge9KobAZh14zmglnZepXt9fpQW3KCc8N9M0rDWwxdygbsKDjrRtXaS2fmz7VIm9lLbTg9s0jbWGQSKdiRqrt/hyAMZpMEru5OBT9uIzwOmRQmSQyqDnpTKGHcOV5x2NNx8y9d3bipWVV9MHtSHLemRQIax54wVB5Hem9zg4B/Spdvygjk9TjjPtQVC7l4OOcehoGxp5Ut19McYFNK9fl57U5t4G75uP6047lBbq3SlawiPbtI+ZuMUihei4I+h+tPCqF2sRz7/wCcUrKuD0IB5PtTAbtbcV5HfNG35Ttb1zStuPyhsn+7npS7Qw+ZRx6UguRKsjEDbj6Uu3rtXOO/1609Qy5bcSTStnIYc57UwQ0L8ozgf4Ufdbnvz9ak/wBWRjJ3HmmFXUhuOPXrU7juN2bANpOTxj1oKjdtKj144zTlXClNpx3xR8u35Wx2piGFcM27DDPpjFDI3PzLjHU9Kft259fc9Kayd2Y5Pzf/AK6EFxOn3pO/X1pWG0AJgnqDg/SnKuAW3cn9cdTSqrSDvyM0NjIyrNj5cZyB2pNpZvkXOOdvrT/4TuUnHQj2okVgoX/PPWmIj8tR8o69yf4qOVfA4B61LnI+UMCDmjauGZupJPNIfoRlRtG7J+nFJ5a/w84POe5p8S/edW3c+mKOsZHOOWwP0poEMC7d3bPpTGyoK84HqalG5v4SMj5valYfKTnkd+v/AOugbQxT8wwuQBnPc0bFxnaBmnFTjG7qOg/woKhsK2AF4GOaB7EbKGDKAM9eaIx24GR2p/8AvdPb0/rTsNxtyB0IoGRqqhR1I7Z7UfLu+9yeaeI13Ddzn5aR0YMvTn9KBjNoPO1jx39TxRhenJAz04qT5sD0HQUbc5UgHNKwn2ISPlO3OeO+CaXb8wzxhs4IqRV5KrgdSTnilbLLuZsdMf560wIiCcEKPlHr0+tK26TG8cfw46fWnuPlBXknoo6UgjweOuSODwfzoKI2jUP3yOhpTGu4eoFPRevydDSSHp7YIB70CQ1oyHOSo49P60rdvmIKc5J6/WpB8vCsCv8Ad7U1lxnuR0xUiegihSp24U96aF3fxEZ+XGeakEe4ALyaUfeHc564oKvoQ99uNob15+vvTtvXdtH1788VKUGNikZxjmkPOcsMAUgI8MOjAZPyn+dO2deTk/qaX733cFsZxQodvm3dRjihiQ3H8S4bB+uKRljyentUnXC/MTw3v9aNpRT3BpDIzuYZC9Bj60pXcq9R3PanBdq89O3tTvvKFZVY55Pr/jTAjVechTk880hVhjccc8kcVNGqq3yr3+90zSKzFhyAvrjt+NF7jGEAtlVznk88ijsCxxnoMd6fxu3bOP7w608KTkK3CZzj2pDSuRqp3YHIPT1FJtwvy854p6qP7vDDAwOaX1XPOMfWhgtBmPlXqMevHFLH8vHGAR+OakwchQ3bHTjFJGPMy20k57jp/jSH1GhWz975RkU8ZZh2P972owVBXoW7U9VP3c8A9c1JS0K+pRr/AGb5kk/kGG5ikSRY9/zZOODwenfj1r9Ev2Nby+m+GUTJY7rC6nmuTdEhW+0+YyyoygnnAjIIwCCehXn89bqGOTSp/tD4jieGR8DsJB/jj8a/QX9ia40ub4YXy20CW92ur3JkhJIZYiQY8KeRH94L2+U981+O8URUc6recYP8H/kfpOBfPkuFl2dRfimaHx0VY/G+lydN1iN3v88gFeaSTLuOSa9K/aAk2+LNGGf+XM5/7+GvKpJflK8dfxr5LEP32exh1ekmPaY87vX1pvndV3Z78VWMuVHXmm+aOfWsLm3KWPOzznj3qNptw5OMVXaU8c+tRs5/vc0rhY+USqyKOgPTrzSsuB35/nSbVc/KFyDzxz6fnT9uDx1zkHPev6ZR+IN2G/NtHPB6npmhm+XCtjp/+rFO+Y/Kqg9sYpdhCjB6+3Bphe4i5PzHgj8qFXHyjnnPPenKp46jB470vI+bd9eccmhglcjx/COP/rU4jByyYwfSkVS7bmwMcdelSKi9ecMOtBS1G/MrBhgZ9BjNJIu4H1HC05dxyGXAH3f/AK1BXPy5wAPyzRbUBirtXay4LHr39KXG3OPvNwd3HShSSx3MMnuvT86cdow23jOKdiUNGAwVV/HvSYbdj86eqryF4XqKRhkfMoOehpWHsIU3DseQcUhVl+Zug4+7zTlVmyVbPP5UNuZhnoefmanYQzGTlWxkUvy9ep5z+FOZdynbjnpTeApXcegJo3C9txQrcbSeCM4pf4Tt+8RS7ju5AOaOdy7mGWH58UrBe+w3blfT6+1MG4/Nkg5647VJtww3KOeMUm3bjscnPr9aa0FLUbtHOFOTS4Kk+h/OnI3OOvt2NJt4+h556Uw2EZfutnO7pQysM5C7SOnpQyx/3uOn0FA+7g9R1x6jvRYBPL+8d3Xt6elK2QpUMD269acoyvzKc7c0bcr8vVRSFcaEwSc8+g7UMM8bDwcetO7bWyD1yKdyoXcp/H+VN6DGKMOGJzk/ypNrM25gcYPOeDinlWYBeeuc+lIynPUbvehB0Gj7wC9xz70MNvXJHqadtGcLyR0NGF9s/wAvf3oFYYVPB6HtS7d2Fxgnoc+lO2r3GR3460M3zZDL6EdaNxWGAFc98Hj3FKcsc5GD97tTtq8MRkoP/wBVDIw5Ujd3pjeiGLllOxskdc+tAHzhQcc4Jx1pzKMffzjv6UDdgngH3PJosLYaqhc7SeOeT1pGYswVetP+ZQAc8nPNLhV6DOPf3o2BkYXaduMrznJ70rBW5wVU9c96eAeT3PNINrfLt3Y5o3AbuO75fzoO77vX8e2f5U7bkYXj/aPXpSqBsO3P49aASGBfkO4HntTSoH3uoNSeWuGbbjinfLwvQE0IErkT4b/az04/nSKvyAcY9MZqXb+8HYdKRlByckcjtz/9agTE+XoOCT2NJ5Z79weM8GnMu7nn6g0fMMrwcHjI6GgdyL/ZC7TSqoZjxkLx06VIy/LnHB4z6UjKV2jOAOo/SmFyNm25XgY545FOw3ViMY6Z/rTu/Pbt6+lHltuLdTjtQK5GR/Fg8HPWjarAY4xz6YzT2X+7kc/dFLtAX3x0NMb1ZHtZVx3pdrY+Vjx29qkBYnOAD79qG2qfvDBpARbWPzOwJHQkUpG7O9cn86lYMqjcygc01V52sOOxzwKQbEXldFU5A68dRTmAU7eex45Bp21SwbaeODn0oCKdp25PNMSE+9xjHfn0prKu35Vz9O9Obt1znn/PrSsq4BIIxk5xRYYzauDxn2PrSsN2Tjpz1p+3I3ZG4dDSbdqjPPbHr65oC43aqrluPxo2rtLH73r7U5Fbjq2emTxSlSf3aYyaLDRHtLZbglf1o/gwcZ9DTlVV9hTZFDH5WbP94elMQn3T0GcduuKOV+ZeWOcD1FPU7h5bJnHelO4nK8gf5NIEyPbjae9OCdhyOevWlXcu0k44GaXG0fLjOSOT0FAIjbar/wCetGSuM8dz7U8xsWK88t+VDD5fvDB46UDsMYnPy/KD/wCPUm0rt7ZPGD3qRtzKMdd27d60GPc3DEkc5xQCVxu3OAWbj0pvRto69eP88U/ttxk+9IccsACR6GgLjW3bRt+YHrShRuPfNPbOPQ5wT2prKx6pgmgGyMDMm7dnOQfaj7ucoecjFSbSfvdvbFDEZ+Xlh0oC/Ub8jL1UHofp/nNIVXhtpwPTqP8AGnbd2Fxnjn60qj5sPjd39aLFJjGHT5sjvxTTuALHLEHgVLtG5hjPFMZcZGMY6800DdhWUkbjnpn/ACKQfMvORgg+5p4+X5txJHYd6Tb167u4PpSHoNVTgKoJGMnNC/KwCgFed31pXVVULyQaVQvJ5HGMgf09aCbjCFBztJz29Pxo8sZ+9gdfm7f59ak27drNxx1A6/Whlbnc2VJ/I0ti9hgI5Ytnb8vHemqSP3inGR0PNSn5mLKMkdD0pNvbnB/Wiwrke3ao257dRQy4Ze/r708x5XlQR/OiSL+8uTjNMW4xgeF2k+3alYhirdCD+f1p/wA20Ltznj6ChQdvTKj07VNhjFUbcsvPPOcmkKbkJyxII96m8tepXgDnnvTG3YGSeM8ikMaFALNnkDqO1OVem1ev8qVY+crge5oVCB8w6jNDENK9+x659KGwPmHHt6075eexHQmnMzEHoDnnHtQUmRgDO0tke9JtPG7Bb2qToemR60bercj0x/jTGmmN5VjwQPTrk0YbhWxzTlTdt3ZyOO9Gzdg88fp71NxsbnK9iB/nmhVwvlk59aftVVwrEHrjHX3pBt3Hbkn+KgNgQbhncSOlI33TtwPb/wCv2p6j5sMPcn1o/iPy4HPOKQr6Ddh5Zmxg/Nz2pwCj5dp5+YEU77wOP8aAv+18w9+lIpOw1V+bLEHPHX8aG+7t3cfw/wCNPXJ+7jd196XaxUFsHNJoat0B5YIbOY3Vq1ynyFoR95yWAGB35I47/jX6BfsW2Wj/APCrhqC2saanDfXFnNMZA0pyEkMbEEghXZsDoOcdST8A+ZNb2801vIsTRx7hJIpKoQQcnuenSvtb/gn/AKzO3gzxH4XvsfadN1FJ9wGd/mRDcS2TzkDjPGa/JuL4qObN94R/Nn6BlLbyml2U5rr2i9tjsP2iN0firR5m6NYlV+okOf5ivJZZME9OtexftKMF1Dw/xyI7g/rHXirNuzXw+J0qH0uF/gxHMxx9aYzHnHSm7ug4pu70x/hXMbD/ADM/jSbs56cUwntzwKazfg1DA+XU6MeQc4zTvL+Y/dOe/Q//AFqFX5VVh04yfapPL58zgE1/Tmx+F9Bu1h1jxxgj1OaAnyHcN2M/l3peVAzgk45FPHOQvQ9SepzTGiPaflHQN/Khl2tuXPB71Iy/NnPT3pPv4YNkn8aYDWUDAySM0Kq7fTn0P5U7+IrznIPpnNLtO1l44PH+FA7Eahf9ZtJU9Bn8On50rK3KkZUc07Kspboo6HFIW+bcvBPcUIQi44+XH96hccOeo559Kdj5lYZG3P48UigcM2Tk9qGgEZdv1bH4+uKQqeNvQcdPxp275u+enrSHbgHLc9v6U1oO6G/xBtpYntjvS/7y9hzUhHyjccjrx2pAvXnOPei9w3EYAL/Fg9W9aaduAF4Kr69QKfja20kbSOvb8qTqvrjoKVgGle+0E0rYI+U59T/nnrS7QRtK9R09KOMn+79OtArjfbGCfX2/pQF7N2J/CnbFXPHI/wA/lSj7oP3RTBEaoWyMEE8ZNHzD5Rk459KlVdrdyV/Cm9O4z6nigb8hnluQQMDmlJ3ffyB1wO9SfdG7jHVcd6Y2fXpTROwg+ZSVOMjv3o28DcAFz1NP6Nz0Pejq6/NyO2P1NIPMa3lsRliCDlefzo2rj5ee1L/wEg/zpdvXaB/hRYGxvYtxwc/SkVfmbd/OnqF5Xafp2zSdxtbAP6UwuIN3K8A/560ix/xN2P8AninDD/dYkjnilfqOoOelAPUjAORtGMevSlVflODgg/hTty/e3Esf196B2VsGmJDdp+6QGOORSKu4btu0fex60/Yqk/MSelL93Py8478UMBmN/XHIpG7fKTj9Kf8Aw/dz7UMq/eIBAPrjJpIHqJt28evHrmk4/jU5HFPYfMF6BeMUKPmBLHheM0WB2GbRt+UsT2z6UctxwDxTo049jzS7VbJwdw6e1AhvzKo+Xk0jBvvbckYH0p+1fmG7P+f1pGX5tvZevanYY0fKoX/9ZpSgIz1A/SnMnJbpj9aDypwe/SlYGRcZ+7k9mpwXByVp+MZ2kemKQKm3POQcCmKw1VbODkdh70pAbqAODx6U7arMFYcikxtyp5/rQNMP9lskdaayhj/F7GlBz8wTn+Y+tOPy5X1/Siwm7kRBJPRf60vy8B/XjHcU/wCXB64I60m1SQRuOB1oC4jKeQRj3B6U1eG4zzTyFdeRhT+Zo2/KCOlAMbtXnjJI7HmkbO73IwKlI3LlSSR2zSAKWwuMg/WgGrjN3AbkY75/zxRnuFJLdwKdtVQOpyMfWlwOecYGaBXZGAxOV6Dr/Sk4VRlunX8ak24Pykj2NJ5alSu3qe4pgmM24HDZ7jinbQ2Mfw8n3p38ORn8aRVKr83OSf8APtQMacDjkjoPm5pdpUdTn69KdtVuFGPfPSg56YwcY9qQEYU9STt6D1pwVuV3HJ6mnKrf6s8UbXGflBHv1oDYaE2rg8gevQUnPXaMfyp3Qg8kE9TRt+96HB56UBcZ3AGM+lKVLZXjnt2pdvPQ47n0o2hc5Y5/i4oEtBrKpXJXn2pyoP8A63tStxheMdsdaG+70JJHJp2KTGdN20flRj5cZAI4+vvTwwY7l46c0hXJAP3gfwoHcjEQXG2M4Pal27AwDdu/5VLs53Hg46e1JyNwY57UBbuRKgbBbIP8qcFZcELuOMfT605sj5v/AB3FDcqVGSx/WkIYyqx+ZsbR1xQPmUHdwM+1OTvhScfqKFUL97IXHIznHpTGMZeo25/WhlXjP8P509l+XduXpx2zQqrz8qgD+lAiH5mw23nP3v8AD0pQrb/UDpUjBed3B9qVd2N2CMeo7+tA9ERlP4uffaeuaGXdxnjbjLVJzuLjjikCsr9hkflQHUbjavyqOf1pMhfuk4XH51JtjAyCQwpB8y/cyc8UIbGLtYYxjB7il5UbuAQf8ml2qAN68eopWjGdvXHXPagEuoxFb5VbB45obaqjb61I3OdvT60nlrg7s7v4aRV7EYXaQu3gfw9fxoXuqsDg52+lPZdqjbkHuaMMvox7etBKG/dx3B/U0m0KVk25C9Sf61JtCnj7wGOKG7lumPXnP9aNikxm35RtU+nPb6UixKW6FiR39fwp6r848vJHvSjrwOv60gIzHyGGWPvSH5W3HIHoOe3WpDuwDkKM7qeE6Z4HtRsCIGXK/L0HT6U7av4dKc2W+7gbegxRheVXoeue1FhoQqwJPUH260rRgrgrg560rKwzgH7vAHb2p3uRkntn8PwqR7DApbHBI9c/pTeF7Y/2T2IqTb83Hyj+Zpdu1fm6Hp3+oNAEZXr82T1JpdvTdxnke9L8y5xnaentRjK9WBHHsKLBe41lO7c2AOx74pxVVO7a3HFL97Ibop4pQqn5e/QnNJleg35chmUj9KkaEJEsmd5kycdxg45pMMCvrzWi8MMmhRTK58yK8ePaE4CvGpBznPJRuMdvesak+S3qXTXNczO+fLySCfyo9dygk+tP2qrBV/8AHTRtXltx57VruTqxNny/KuAT1FDI20tgA9+elPU7cgNzj0pAxB2ovX161KHcJGkjtZ3ikw6RFo8jOGHzA4PB6V9gf8E7bFY/DfjC5tblykl9AsgeLGS0Cujg5wSQ77hk4OOeTXyIv+rlYMTiNxnjj5T69a+pf2DfEOqXviDxFpmpa/MFubDTdTcSMM3Ep8xNoyNoUYGQoBPyjoK/K+NY8uaU33h+Uv8Agn6DkXv5K/7tX84r/I9j/aXVheeHpM/KY7lR9cx14n0Dc4yK90/aaT9z4ck29JLld34RmvCGZtu78DXwOL/iH0mDf7lBwPm60xmx1oJHXmo2YDrnntXMdFh+7sSaazYJPJ9PamOy0wt8wx+poHY+bflbYyrkdqcV+UKu4k9vr0pY9yDawGMDIFLGG3lcdsGv6eZ+D7ibTuwwx/D9KNqbfl4GfSpWUbf3Y4Xrmm/Lt2/Kd2BSTuVypDWGTtHfpQF+Y469BxT9pK7RycjpRyy9cnnGB1qthpWI1+XG7JbpQ2O/qB9afgNgFTx+go4Viw4x19KYm2MDKy4jGc0HHKhjgdaft6q2049KRcsOowPUUDQ0/dPmLnd6fpR5Zb1BwDxxTwv1xjHPc0iqpwWzu6ZoE9WNDMpHc9OnX6+lKuVxuB4zxntSjPbHp9eKXb0RePYjih6giML0O7GT/nijbuxtyMnP196e4+YfMQcd6NoUA4BPp6A0IENZV5Lfe+7+FHl9CWB5pyr+R7mkIGN3btgUDvYay/MGPQdRT84ABXJJy3rS7TxlehyTnoKQ8qTyR25otcXmN4b+HpwMUmOATxxzUu35vbrSbQAzKuO1PYQxtwUKCTmjp8qn5fpTyE5O7PGDQyr3GM0bB5jAoPyjp6ZoZcKe/wBacAW27enrRtUdF9P8/WkgG8dCQR7UBR0/yRUhC/7J59aRVP3toBNPcaQ3Gf4R347cf/rpNnzAlQM9fen7V/h6/XpR/hj6UhOxH6hW704qFztwCBS7emGyw6c0NlT83Bwc00riGfM2FOcDsP1pSCzncx3H0704LtwepPU9OKVUYEsDn0z2/wDr0wG/xfM3bkelKq7htU4Azk+tO2lh82DxQoxjbkelJjGc91IB7jtSEckuww3v0H+NP7Hd07Z/z60m1mHqCeaaJYz7p7Ht9KVum7GQ3f0NOx83PUUhRsdO35mgVxnB6rz0wO9Kysv8J+bGKk2rx8vI4oI4yGPGRzQO1xm1mweeKVx1Vsrmn4Y/d59B2Apu1s7g2Sen1oBvoR88so57fT+tLxn6fyp3OArcmlxuXdgAUCG7Y+zAj0oClmLZx608rlivU9OmP8//AFqTY3BVhjuqigrcYoz0PIPXNKRhjuBHqadtJb9B9O9O2t3+lAltqRlV4+XrzS9ivc+3NLtbaOuM/iKTvuwQRQGwnlr90dCeOetNKtzjJ+vrUhXp3z+NBQEkdSKBMae5OR/WgLlPlyB2FOZVPy+3FDL1GMY9DQA3adp4PTtTdrcNj2zUvbvj6Uhxu+VsYzzjtQGwz86T0PQ+nr709Vwfu53daRlBO/GdtNBuNAIYgEZ6+9Kyrwu05PNPb5iSM/QUn6j60g2Gcbiu3g/eowVUGTnI6g9acG2k9AOtLyGGOR1zTYkNGR15U/xds+1BUZOFLGnlVJG1Qc9P/wBVJtO7lvrz3pFh/GNuOOADTDt5Utnilbn2A79/oaXYpxt5z+ZpkvUYqnbt28n3pSufbmnbW46+mKXbu+7wc59MUARtu2sSSP51Z1K3jgvpoY1yoKkYPAyoPH51BtPzBs/MOhq3qZLXzNycxwnj3hSsp3VWPbX9C1bkfyKm1Tz0GKbtYkDqfbtT1j+Xvz70bVJXf61qQM8teefmx+dHO7c3OTjg089l6E9KNufXHr60XG9Ru3GOB9f5ilZWDAbsDvnvQwb0PTPJ60Dg/N93+EetBSY1xnJ9/wCHtRtJyp+U54NOwzHcAQaRl6qW69sUWENxuG5lJI7A96OfuBT+Pb8fanrt+8ACOwpPl+9jJ/Kn1EIo2n5T+vFDLuwrY460bV/i4X0pzBuPmGMfUmgFqR9GI2nFIN24cg/hUvptbLHtSMvzDbnijcbGbWbG3O7r6/hRsY52n6nb0p5VS3BAP1pDuO0rkH2PUUAJtYqcrjNN+7hvu849zUvlqoHzHHP50xuWKvyexoQ27CkdCM49+1NVfmByQPWnKq7emSB9PwpV3bcZ6jpigBi/MG3IcLg/h2owox1KmpAdzccYHbvSbQf4hyfSkFrkSrhg27nb0xS7VX+HGc55709dwJXo1L9zHJ/DvTH5Eaqu3qT6UMNvPmHkY9qfjGNzcYzgdaD935gTgjj2pAn0G/MvTkL64yKVsbjhhzyTT2TqxIHrikZTxnoOnFIZHt6cc9eKNrDK4AI5BFPKgcjCrQF/h3ZB6Z6D/wCtQNMYwXhmzjGR7mhB8oxkAdeetPb5W2t68+lG3noAD+lADWTp/dx+NJtxzuGM5/GpNmcDdnPH1oVVwwwcdKEOzYzLHov5mlbthseop/zbQeD9OtIQRGG55zSsGxGFGWXOSf1/+vTvvbdwwOo5p+3bncSFHP8A+uhVXBDMSD7dKTAjC5K/MRjHUdadtGDtH0pwDbWHXFC8tjdn+dA0iPG7G7169j+NL95mzjJG3FOZdvy9hTlVl6Pn09qAG/NuGST7Grtp+803Ubfuqwzr7bX2n9JKqqzLnb0bqSauaSrG4nhJz9ot5ox7EqWGPxUVjWXuN9tfuNqOk15lHaucdQf19aUZ3HK05V3N2J9P89aQfeyeSc545/xrQh7gM/MWBBBHI6YpGXdgNgHpxTvL46kDHf1p+08MGIPTFIa1Qsa7t+cgbTnHbg19P/sK2dg/irVm+x3Nrff2PYzK0MzGERiSbdGyNkBSfL5J3bkOCBXzHDHvcJnhvl449sV9S/sF6iJtc12BY5FaXTIiGaYbA8dzMuCuQWJXkEAhQrDjv+Z8cpLF0H3jL84n3XDvNLK6qWynH8YyPZv2neNM8PPgEi6mH5xj/CvA93GOgr6A/adjX+wdDkLAEX0i/nET/Svntfubuor84xn8Q+swSvRBm/zmmM2fmGeKC30x6Uxm7/jXIdNgZv7xqN2Ppz3oZl4IGKjkY59/880ylqfPu1DiP0OeB1PvSrH/AAn7x70Y+YttJIHbtT2VsEsvB/Wv6ePwZjWBZhu/+tx60bTt+VhnqP8AP4VJt3ZBwzdc45/KmqgbblTux3P6c00hPcbg8Fuvt1+lKv3tuD6g9qeUbbg45NI3ysQQeKNx7EbfeOfckjpRt3jhVC5wKf8AM2TtyD0HejbnhSAFHXH8qEFxmCwKrwP88CkUHBxz/SpGwq7WTkNke3pSfMRz95exqthjWHJbHTqOuaRjt+Zuf6VIQWUlVIJAAOelNVVAO75vwoQmNX5jhuCOwPWnYVWySCR/OgL8p2rg5xgdqX0bdnjHWhoExjNzhv1/WlCqy4Vc46c96cFVR3/KkGVxwGUjn+VFg23GqWYcZw3bFG5Wz1B6c07b0Xdu9KFXaA+0AnP0oFdiYby9244JpsiMMbuT+tPXdjgZxSldynt0J96ewOw1l49e350cDGRt96f7lsr3pFzg7m7mkgYzb1zk4pVByeRtH+FP+9nBwOlJg44GTTENUfw88c0bflO5Oex9qlC7cs2SOvNNEeMc8YFK4xCCuPkPP+c0Nt69e9LtbHDcYx/+qkYDADNuzTSC9hv8Ibn5ePc/4UqglfvcfTB+lP2/xcEdDzTVba2G2gc84phfqN2hhncMgZpO3bOakUdFChiOv1pCFz15bvQITaNvzck0Hd25H0p5xwMkkcUYC4z1Pr/jSGiJVbIY/j2FO+6pUck8nvTtv97jn86UquCV5xyB6ev402IYF8zJ9qbtG7PphuvX2qT73XoeKGj+bcOWIoERs2GHQcdutG1cHAOOOgp+w8Ljn3owMDPPrx1oC1xFVUyo4x6DpSKcnqcdeOfpTlLGQsx68UuNuevtQFxm07/l/WlKnHPf8/WlCqv3e/PTpQ3vg+uBRYVxCu1Rxlh2FIq/N6c05RheMcZ5x0pedwVcEZ6+vFFgvcj8tv4sYHc9qdtDDvx2xTlbaQNoII60gUbewxSYLyE/2Vyceopowx5bBYdD2qQ4+9t/Ok2ttyMH+f0phuIqqAVI9jQy/LuxnHp2p3zFduQCent/9el2qqknv156+1ILkbAZHXJB49aGXPLHIP4U8LtONv0HtTVXb36cf/qpiEGMeuB+FJt+bvwPpmnhW5x1PP0FHG07hz6UWGNP3iu0gevam/w/Lz+NP+6ww3XtSKvU7Tk5osJjSG+XGCfr0pwwF68n1H4U7A5b09+tIV+Ue3rQgWgz1bv/AD/Gl25UfKQw44p38PWjbt6t0oBDRz935eeaF+bJzgY7dKcvPzKCBjvRjGBt+lADFXbuGcEmjb1O3GevtUmF3bmyR0+tHyr7nGetAEahVw2MihcKwZc4p+Cu7a3+NC7vfI4+lOwXG7WX5v73P5fypMcjpz3px/3uR3p3G37nB6EnrRsG5GqKcd/Q+pqxfrskQ7siS3gZT/2yT+RFQsu3oQMdBmprzazW7KvBtId3PUgEZ/QVjU/iQfr+Ron7rRXK/MOevWm7VjXLZOe9SYx/Dn0NGf7zbsD8q2sZWI+q9fu+/Wnr129geMd6G28bcA4596OCB054PrQ9Sk7MRvlYHd7CkZW6cZGKewxkDnd7Um3n5lxuosMY2ec9x2/nSeXubc3zA85qUZCZpWXGPl5z1/nRcLXGbVGG/l2zQE6fMSx4p235lPUUm3OepH3uvSkF+gzHTjj0zS/eIbninEbB+Jz/APqpwwv3cAH+dNgtyGRN3XHFKevXJB5p78fePynv1pMYbnv+GKYW1I1Xp0BPy9aVlI6KSPQf0p6qv3mGe+fWjB244x1oGMVSP4aayhmzyD71Koz8yjB2/mKMttHOcCgQ1lYDtxSMvV1bJ9ak3Y+Zee1DD/a5PDe9IojxjC7if0+tO+Y7mY8nHWgL8uF4x/nFLtJ5J9qGg2Gr2Y/MVHX+lG35jgZ57f54pzLsJHK4b9aU9AOPbiiw7kanrlSB0yaNvQ5B78cfSpAm7t94U3a2Ao+bvyOlFgTEKnf0Pv8A57U1l3NtKkgDj/EetPK4wy9T1INBztG3kA8e9FhiBNuQGOc/hQvzfd5/3qkC9Bt+XdSElsLtGRn/ACKQJka52hep64pN3O38MelSGPbkdN36UKuPu8nG7OM59aYEeACdzEfyp7Z+6cj+9RtbaeRjr0pdpCnHU/rSGnYQr8q7cZB/Sm7eSy5+h/wp7D5S2Qv0pcMp27ifXjoKLDGfKp69cg96Xnb68dfT6U7b0O7qc896Tbghfve1KwDTux93cAaX7jfMRndyPanfNww4wO5pepIYDk/jSHvqN2jhucfSgK25tuMjrTlXC4yP9nFLxg89f84pMq1xmGKhW9ugrvPgXfQaf8YfB1zdeW0R1i3gk8xQV2yHyjwe2Hrhdvp8vpxx7ir+j6hJpeqWWqRHD2VxHdJ9Y3DD+Vc+Lpe2w86fdNfejTDy5KsZvo0O8RaO+h+INV0eSMhtNvbi0YH1jkZP/Zaztv8AEv44POR6V6T+0PbNbfGrxczBSt1erdwsq9Y5okkQ/iGFedKo7gY7issvq/WMLTqvrFfkbYyCp4iUfNjMLnbyePmFG3oMsP6U7qCw5wehNO2hgMEkrXWzmQ+2LecgVs/MuQ31r6P/AGEdR8v4gatHNayxRXGktZWzbXkEjW06lyWHypjzSdv+13JOfnCNsOp27ipGT+Nez/sfW8MvxwEN7Il1bQrqCQ2yxMfMdhEwfJ4YJsYHsDt5zX5vx1dVMO+/P/7afccMrmwGIv0lTf8A6Uj6i/ae83+w9CZT+7F9Ju47+Ucf1r58/wCWYr6T/aWt45PA9ldHHmQanGEP+9HIDXzQjYQfNnIxX5ljV759fgNaIO2OO9RM3X5qexz05NRsvPpXKjsSI935CmP82dtPbqfeo24wdpzSuUkeCgLkhlwR69P/ANdTLnH8QPp14pF4/wBYcNTjtyM7eOMA/wCea/qA/A46ITY2Qc4APA9TTdvzfdGF6e1OXb8zHqO9O/Ig8Nj/ADxT1QNXGdchVB7dePakVTheDgjj5u9PCKx3NkdqOmS2SSuDTDd6jQpxtXqeMUhjVto5AHPt+dSKo+ny8UnysNpx1oGhny7WbaSD+g9qaVztPXd7VIwwepznpmk/h28H+vvVBcbtbhdjEgUbWVmVV6deal2bsMykH+lM2OMgY6Z+hpDasMVVwQzdP0o25G7qPTGM0rDClTkk8f596VVxgNyT69aqxKsJ97A5IPPTvSDd1ZcHOPYU8q33VwM9+9Jtb7pYY/SkJvUbtZlJk5+vWk+Z/wDZHYdeak8sc9MnpzzTNpXC7s0JA1Yd8w6DJHb+lIwXnoB/WnBuRt+9nH0pNmGJznPX5qLA1dCH6HHf0o2/vBkcHj/69OXgDa24ZxjOaFyV25JA79//ANdAXuJs3AYbp70m3cp6g/SpGUdsEcnFNyOGb+L060bg9GN2tydvGelCqobPcetPb0Zfl9u1Iuf7vHuaAdmNP3cMf/rUu1ujccZwKUbdoy2QDk/4U5h/DwBTC6Yzy9uRwP6UqqMdjxnPqadtO0c8dd3pSH5eF4BOenJoQthiqPvdARx60rLuyvoOAafIqr7n1A60bQvp0/P6+lLzGhoXsyn0/wA5po77gMA5qZlVTkc0m1VU4wCBmmDXYiRWaQ/nnPWjBDkMSB19jUirt5zgjijCMCcZUZ+lMVhu0jp3pdo2kckjnjtRtZfl5+X8aOdx3KetK1x81hv8XPXPf1pq79p6E+1POeAeMH8aUAKDx+HoadrC6jB+R6D29qXaoXsSOadjaNqj5uTQN2B7cEUCuMK/wlSSf1/wpFX5QWAz61IF7tnNAHPAPzc9PSgOpHID97b1/WlZf3e31ORxT/lYheRj/apVVduOA1AEXzLwG46UbeqjoOx9aey/KSce1K2OQ3zYpXJIsDH659Keu3o2AOpwKX5VHzdTS4Xd7D2pj9BgXOMcU7auCvIx7Uv8XC5FGWz8uG46GlYBixtjHJGOtIy/LhT06e9P8v5vmPU9qXP1Oe9OwJDF/i29/akXqPlwfr3p+3njONvFLtXb8vUZx9aCbEeM+5HYik2jGO/P4/Sn7ctncAT1/CnKFLEkkfhQO1yMKW7dOKNo+6ATg8DtUjL823rxmm7d2N3PegQ0quDt25pPmC8ZJqRlP3duRntSDjnavzfoaYWG7em3BB/E0m3jDHHpxUpVV4XnFMbP3dxz/M0IbVhvzfc4AoxycbefX19qfsO3dwR3oxkNtz6UCvYZt67V7ZpV3AnGRn8c09U6cjrTF3feIyc89qNxvuGz5iduVpNo78YGKft788UgTax6Ae1ACKF9yMdKnkUXPlLbxqxjt13hM5X53xn8x09RUW3LDtj+VZHjrxHqHhbw/Y6lp+mC7eXev2cBtyIrSFpflyWVerHtn2ryM2x9PLoRrVOl/wAjswlCVeThHrb8y59oYy3HnQrbCG4NsN0wYs6rlunbIbjtjB5qaPy3VWVlIbBDDvnvXDfDhdUurK8sdYt5VsrXZLCzucyu7bi7AgNk4XGV+6fc13MMMKxj7KQEGNoXoPoOg+grk4ezLEZnhfrFe1ntbf5m2ZYWnhqvJTvceecsppjLzuwSe/8An1qTaeflBGfX+lJ2yyhT6Zr6JHmtMTYcjDdM4+tAG5g2T/TNPXjBHOaNpwdvbpz1oGhjDdj5ScUmeNo59adtbuvIPHp+dGBwNpb3AweKAbGMFYnaOD6Uv/AefTvT9vQjjvxSNHtHy8ZP50IVxrRnbyvI/Sk2rz0NSbc8t0HNHy8hOo5Wgqw1PlBPA7f/AF6XHy57+tCqfu857getL8397gD86LXBNDfl44AH3cdCKYUZsdR7djUvlhj82eR0pu1ujZzjufwpj6DdrYPQYoA3HsPp3/pTycsFHUetAX+Jc5HA9/eiwr9hmD6Z5xR67l+b3p+1twOOtIIzuxu24/UUBew3a397OOo9KRtzYK469hzinqCvytnHfBpQu1vm6H2osMYy/wCyPZsdaQqvy7SdvQf404J83sP0p23Hy7Rx0zRYdhqr39eKRVY+2Pyp+3GGyfqD1o2oCSWOc8UhjNqk/Nnn9fp6Uo5yeADS/wATbfxpyqR823JPNA0yLb8yjdwBxSqnIA6DipB8uDwO+Ov+etN2/MGxweOKExMZ/shc4o2rxt4HU1KcFflVSR0A/lSf7x5Pt/hSGRjPGNvBPXkU4Bs+oFO2/wB5chuf/r0oyv8ADj8aATIwvVemPalUBfTPfjtTtq43Ek4pOGUN8wz+tIa0EP8ACDj7vOaAo6Yx3NOXtk8e4/pShSW9SPTtQUhp+Un5d2Kb838PXPP9KfsZuCQT7jrSrt5U5z16de1IGxq7lPy7RnI5oXg/MuPbFSbVLcgjjGKXAyN2M9/akOwzaFZSp4GDjuPrT0VmbbwQ6kfnV3Q9Fu9e1ay0PTVWS71CdLe3V3CKZGOBknhRnuTXe6P8Afihqg0u4bw+IbbVl82K4kniASPcUZmTd5mVIyVCk8j1rjxOOw2F0rzUfVnVQw1bEfw4tjvjsrXWueGPEe3C674R0i8Ld96QmF/1irzMQhW7Z9a+4NA/Zs0bXrHwmPHGo299baBobWNrbxu0bXkkjSSjzACcCMlsKrEnaS2BxXnfhD4T/DDXPDMNu2lyS6jYWOvC8Mk4WVrpIbeSCTCHJjQMwXcMbic5r5DA8U4PDUFQtJ8t1oul3bd9rHu4nJq2Iqe0ule35K58xBSVzkE/zFHl9euPTGM/Su0s/h9c3nw/1/4gNfKg0KazjFoY/nuI5pGjMoPZVZSOAckEZGK48ruK7en86+sweYUMdzewlfl38jxMRhKuFt7RWvsINw+8uPYV7Z+ydHrn/C4D/ZcjrFHql9bXG6RASjQq+xQwzxsDnk8BgByTXi65GewPf0r039nHVtU0/wCN2ijSrZnGpa9JIyvdLECGtZFP8LZUKST0JIAHrXxPHWHrVPq9SEW4xcrvtdK1z6zhqvSpYPE05StKXJZd7N3sfZf7RjCT4dxsh/5iUA/RwRXzHH/qxjp3r6n/AGhIlf4aXLEcxXVsy/XzAP618tQn9yvTkda/Lcb8aPr8v1ov1Gd8/lio3Yn+EVMRjPIz2NRMoz16etch3WIWDd6jO7GefrU7c84pjZwPakykeD7eFB4wcHvmpOBu+Xg+1Ku7Zz8w7Z9adt/hyOo+Wv6iPwO/UZ8oUlRgFfvdhShVbJJPTqBineWpPXGD+VBAwc4556fjTC7GjbgMT8vpRhRnpg/5xTsdxj8uuaXPy7gOo6e1IehGio3y7QpFCqgVjtJGfz/Knxq2VxyPf+VL82MdfXj/AD0p2CKVtSLrjcp/+tQ3zFdvzH+lSSLnG1iQPXn1pDnbu2ggjJNMTRHtUYb5tucH3pv3W4UjOc4/WpOqlsZOc0bV2/K3B6+9AmMK4O48jnH1pp24BXk9/wCtS+XjLYHTIPajHzD/AGs59KYNEYQllVScDn0pRGWxjGeo5608Db2LZpOV9hmgdrDMHcCVGRjtQwVlGcd+npTv4u4J9O2aPL/hABH8qEhCBcEdh0Ixgk07aw/E96Qsy/y6flUm3g/NwaQ12I+F44I6/SkHyttGODTlUNxnC+vqPWl2qv8ACcdKoQ1lxj5eDzxS/M2c8YA696cVDfKqkHIpNvG5hj2pWFuMXqW7A/p/WnY/dhlH3etKqdMZ6Z+tOwGUep/IUMERrtweuT2ajyyoDdv8/nT1XoW5y3Sl7eqdT70DWg3aduOcFcCmbduG2g/5/SpO3IIPv2pTHuUrwDTSsJ6kag8bcjJ6e9G7pt6DpxTgNuG5Az16U9cL0UZPbFNivciXjgc9+e9LtY7lA5PenkL127cjtSHpndglu3WluUNOOFkB/Dv+dC4UseoPWnMqjao6e9LjBC7W5FFibtMYpft07n/6xoy20/KeP880/acMOFHPH4Um0sB8p49+tAXGLHj5vl455o9uCM9qfw3C9VzmjbxhQBj1NMFqhuzCr/ERzSfxH1PUfrTmjZmPzZ6delKFXd1J4HzYoAaFbcVz1/Wl9zwfanbRuPUkGhl6jPP9KA2ItvB3Lyev1p2Om7jnjHqacqkYLL1/GnfKx+77UmyURlT8sfGfcUberdu4p/Ct8x+XdSP1+VRwT0oHYY4PHb/ChR8o3YPTFPxt7e/PrSYyemSozRuLqI0fzBsc/wA6TucMPmweOlP29D19qVl7fhjuKAepGWzxwe2KVtzc7gAe3tTivy428j19aFQ9Fxznj0pibsRlTtOM5Pc0pX5dy5yP60//AIEeKXbuY9M/4UDWozblST2HXHakH3f3ijNSdQcHJ7e9JyD82FI6+/vQPYasY+Xg89AfemuvZecVLtXdtXJxzQ27hW9aSE9iLod2OBwfWl27WHy47YPb3qT5c56g801l43KoIx09KYr6DMZU87jj0pdo4OBgHPXrSkNzt4z+lG1d3OeePSm1YLjCnynjgdvSlyG+UcD6UrAfdpyr3XPPpRYQz1K4pNp+6F9RUihmzt6k0n+9+H4UimIFJ5IBJpm3p0NSsvzYJ4JoK4Xds56cdKBb7DPl3jng+tYetX9vrVvJ4btdGmEttaGK8B6t5k7l9jg4UkZJUY4GfWuhvrDUrfS21CztYnlO0Ik7eWpJPJJxkADLHA6CuD1bxZps11c2LWrWJtts9rLFCHE53ZdnCruI2v8AMWwArDJyK/OOLeIMDCtSwsa3vRbcuXWytbX17H0GVYGs1Kcob7epb0VNW8NzRQ61IyW93b7la42+YZEdlkkMhwfLGEVQfbrmujtpIZl8zymhkZssjrscH39e3TNedaOz3Go2q634utNatNLdFt4Y58eT/wAtWCsSMI4feV+bjOccCuih8fW03i6fwhe6bLHsSN4bhWEiHcBkNjkc/wD18Vrwjm+FjQeH5rRT92/nfS/R6dS83ws5T9pFa21+R1hVsnJPPr/jSMfmH3scdemaF+6Gjzgnavp+lPyP4l69x6etffQqU5ScYtNroeA00rtEfG07c4FH3W+Ybtw7HpTtqhm3d+CDxTuvzDndzuNaEXZFxgc/Sn428ZwB39KdtH8SnmkVQfujpx1oGxuCvcjvQNpXd2BqRhj7uB7jvTSOd3Qds0wG7QPmGVzQ205APQU9lDfMoHp1o2seNuD/AEouJjMce54H+e9G1u65B7inbTgZyPWhecMpPPIoQ9yNuobaOT+VKOWII7U/ad5xxgenekKk/wAWeeeaYDNrFg3J/rSsP4enT8KftXja2ckD6UFedsfDcUwQ3y+M8Aj8KNu5SecDmnBfl+YfjQqjB/xpWsVcQqCuT19+wpAv3Wbr/Kn43dc4XmlXDfMTyaCrpjMDlcbQeuOc0jBiAtOVT/HkZNL91vw4JpWFe5Ht5HTkcD1pNmGHT5eBUpVlx04yPagbABtcZ6/N2oTHvuRqMLtKgDn60Bcry3fr61Ix/iOMn8cUmxuSAM53AetADGXg/LkfzHGaF+ZhuBwv609u67vunkY70irkHOSepB9KLDbGKqt2G4/dGeD9aXkAngZP8qfxwo4xz9PpRjn7ufmPXpSDYadvDDjHApFVsbR6/pUm0dsEH3oCbfQnH5CgdxuP4sDpzjr9aNu3cVUf56inY4B3DP0o2fKpJ6UrDG7Oi8HHWkCnIPQkfp61KRj+E85z/Sm7WyVZutCG9CPbgjp69elG1ht+YZ6H6VIRtwcfMTijazA7WGc0CGFRtCncCT0qTuDjGO3rS/eZe+7vUij5hnPHA46VJaPavh18D9a02f4dfEbWpUl0LxDrEY8u0Yme2Ch5I5H4I2nyiSADgAg9eMXXdH+It/r2nX2myG6e71bWxoZtR5TxxxXJMu7djy8HLfMeA2OwFe2eB9Xa7/ZT0fVvOYN4R8Q25kx3hW+VZEP+yYLh1PsTWbe2+sXXxYPhXR7nSrC8s/GWsW+n3d7atdCB7u3jugxh3KGHyEKc8M1fluJx+JqZhOpXs/Z86Se1tenzR9pQw1GOFUad1zcrPYvg/dX2t/Dnwrrbai+oxtc+YZJAAyyieeNzkY42uox22n1rxvwl4usm8YN8O5NPiivtO1O+VbxUXfcQXNldq0THqAskaEDocf7Neqfs6tqV58P7y61iJYdV0vXLnTJvLgjh3LDcISzRxgJuYZOcdG9K808J2NtZfG74iW9xaoZYrvS7yOVtpKquozwMq8ZHy3A3YPPFfK6Kcro9i91oclPY6frHwOW809mZ7PwdqtjMrH7txb6pa3DYzz0mBHbB6Dv4RqGiixtre8XU9PuBcdEt5i0kZxk71IBX9RXtnwwl+2aX4n8L/YNoTQ/EjedvP712itmCbemV8oHPX5sV4JE3mwx/N95QR+Vff8KwlTxFampW2fre583ncozpQk/NfkLwvPHrn1rqPh3rieGvGuga9I6BNP1mzuG3PgKPMCsfm+X7rnk9BnrXNfKrcgZBxgVPHdPZRtdxxtugxIuxtjFlORhv4ckDkdK+qzOj7fCVKfdM8PCT9nWjLsz9HfjlNFcfCrUJlYESNbMhU5BzMhGD6Y718rxrtjr6n+KUkl98F7y6uoRHNJaWkzIsvmhXMkZxv/i5/i79a+WoxmE49TxX8947SSP1nLnek/UjYE4BHWmMvHGRUpXbgnrTSuPrXFc70iBlbvzzTGCjPGBU5XnPtimFR97g4HSkUjwfafuhup9PX+VO+98nHYn2pdvO/B39Rz07U5fl3Mp4Y8cda/qM/BHqJgtkqoHP3qT5UO3g/wAqUruj3bguPal+Vct2/h9R7+9NaBcT0bd8pHFN2s2C2cckCpGXPDdQe5pWVuGOAFPYUr2Bke0jJPRuopvrwfTjvUpz905BPQ9KbtVVDbepOe+femgbtsNCjJAUsOvPajbnDcdOvqfenbcDud3Iz705o1YnIHfknr/n0ouC8iI7dvzHIJ49qRuvzc4zjHHFPxuHPGRxxS+qjK7enGaoTI9rKp2Y4XvTfL6ZytSuqr+8bPH60cZKsMYH50AMUfe+YjGP84ppVVONpPTr2zUuArL1XK9c9TTdoZWZvvZxge1HUBoXau4LnH5E0Lt5y2PwpWi+UelG0sfuZxwPY0AIN0h3YyR070q7Q2MD+lKcDP8Atd/U05dx28Ak89aBIjj/ALobA5/Clx/tdR/k0vlruC/z/lilYKWDb8/QdPemwGbQMbeqjBP+FKFX7zKAe3oadjjA6nkUrBeByuBwfpQAzaFJCkEZ69s0u3nGBxz9TT2XdnGApPb+dGw89uOtIBrR/vNyrnnpSbfL69uvpT2+8MDg8cj+VC/eCvgj6Uw0uMG3I6+/elVBkMTjqakVevPPagr8jLyeaLgRou4MfT9aaq4y20jn6VJ90bcYx+tOHCj5uT2NBNiPqo3KG7ewpNjK3r29hUiLtyr5x1occnDZBH1p3L0GY+YN5g54A2+lNZfmPzZPfFSkAkBs8YGfSlYbee+c0iNyI/Lw3HYH/wCtSKr7w23Oe3pT25kG0Aml27cYU/j60B1EOG+7wSOvv6U0kfxKMdcj6+lO25YfN1+XBoIODjvwef8AP+RQFxu3LcdSaMHvgge1Oxj3x1pcq2Mrz9KYCccLu6c5oUdcDnrzS/LxlcfpxQ0eeF7gdKQPURh0+XHrj1oVWx/CFFThNynpxmt7w38P/G3jL5vCvhTVdSQdXt7ZmQf8DxtH51jVrU6MeapJJd27GlOhUqytTTb8jmgueFXg/pSMgHLcD+H3r3HRP2Q/jPqiLJdaTp+lo/IN3fKGH/AY9x/OuqT9h3xXEqyal460WH2itZZOfx215NbiXK6Hx1l8rv8AJHfDJcbP4af5I+YvLZlHYkfzpTtB9BX0jefscapZwmb/AITyycjjAsXGfp81cD4m+AuseHVeRvEOn3AH3V8uRWOPwOKyp8V5RUdlWX3NfoVPIsfHX2f4r/M8s25yGGB2AoHA4yc8jnpWvdeF9Ssmk3eW/lcny5R+gOCazZYJY2dZIyhI/iGOv1r2MPjcPilehNS9GedWw1bD6VYtepCq4AH8Q/H86XYB82Dn27U/aQuNvPHP+fxpSucs2euK6bmLViH5f4uMdqdtULlu1OYMW6AHr1oXIwenTJpiVxoX+6mc+tH3s7cnPXin7eD3J4XtQqqFoC1yNfu8Ec0fw4Xp0wR/WpAGz/q+nA/LNLt6nkgc/Si9gsRCPb8zHrg9KcRntx/WpLue103Rr7UpkkmntUVkiGAhLOFG9jyB16DJ4xXCR/GHR5bvTobjR2gs9Tt82lwzhN8oUPnLHABUnAyTxyB0HyWO40yvAYuWDrSfNHd20X9eR6lHKMTVpqpFKz2O2K9WOcHpxSMNvHBrC0H4leD7yH7ZJ/pkYwrx2d5FNtJUk7tjFlPXCkdRg962bvxR4P0OG01bWtSTS7WaA3kP2p03TAHKjywS+CpBORjGetcUvEXIo1PZe0bffldvTa/4GiyTGON7L7x+M4//AF5oGVJKgE+v6Zo0W/tfEDbrCGQxyxmSC4UgwzDdwRnBXIweQCeeKleJlYxs24g9VPH519Bk/EGX57Tc8FU5rbrqvVHJi8BXwb/er0fRke09+3TNJt6gevrT2DbtpxjgE56GjaoXPGDXtHG9SMqCT3xxxV/RbPUtS1C203SbV7i6upVhjhjXe8jFsAAeuTVTbuB4P3qvaIrNqUQjmWI7JfmK5AJjfHbPXHTkcYrz81rSw2BrVoRu4xbSfWyOjAwjUxMIVHZNq7R5x4yvtT8QeIHbR7zU4bWy+2aeyBtsk1/BkNhQD5i/vCWBO0FVB65rgvHnxT/4QGO78Mw6Xqkd3exm8u2nmjKtDMoYBNgMZR2Ub1UdsZGKueLPE2sWF147h8O3Hk6lpcNnYfvNytC8r4uQkeSJCWRCWOAM8nivMrbwla+LPPk8RXEsd1ptp5cstuzFmhgWRnnYODuYv5SLghAvFfyzhcPDE1HWxGi3stHd6/dqfpMKns3u0YUfxGvNRj1LVJr77JfCSB4bW3tRGksSqQwYpwo6dQc/pVy3+M+qCW8u9Q0+0u2u2gDQzxs0YSN9yKCDhF6+vtgcVzuveEtQ8K6bbarJbJPYanbSC2vImLLIpcqMnGAcLkD3rm7W7kgha33sYrh0Lx9Q2DwSOnGTivpKcac6bVP4f8ip0uV3a1PrvSvjNoPiPT3vLu+8u0MfmTWUTBZlVFBO0kDPzbsYP3cZByK6vwx400fxJqL6Laz+XdQny0jnIDTng7kbgYwRjjPrXxXrms2MmpI2gG4S1QReX9rYBxKB8zPgkc47cYxXf+CtQ8FzSRw+KdWudPvUkEsOrWMsiZJJLq/VcdBnZjgV2ZLj8VkeI+sUZNpr4Xs/J+hy43B0cdT9nKNpdz662rgbgeM/eGaaE6rwPp0rz/Q/ETWWkww6F40sdetmbyxHcyokkakY3JMm4EgAn5woyB2NdrpOr6drGpHTYZdsqwiVWlZR5g6NjbnleCe3zLjrX6ll3HGX4lKOLfspeb937/8AOx8nishxVGX7tcy8i5tb645601h/eXbn1/8ArVMttKVEkaM4fLK4GQceh9KbtO44wSemB0NfY06tOquaEk15HiyhKLtJWY0R5Tdng9KMMV9fpSiNWPHHr2p20jrhscc9asSGCNT8q5BxjrSMvU87eMetSAZ7EYpGxtAUfNkde1APUaG5yy/n0pQw7DkL29KcA27jDevakbbjb0JphsMUbWOFxgU47f4ucn8a3vBum6HqF9qUXiCW6S3tdGvb5Dbbd/nRxlouvBUsOQe2aw2+XO5QCeOOlYU8TTq1JU47xtf53/yNZ0Z0qanPr/X6jCqtndyKNuFBOS2ce9PGNo+U5/z2peuVwMdvf2roMkMC4b7o2nHIFJ93O5Qc/wAqft+bnADcUf7TZA/p2oC40r8uGGAePxpsar2XoO38qk2sAdqgZoWMbhtHAFArjFTqC3PUUdee/wDnvT8bsBcmjDBTtBHNBQ3bz6fXvSFegb7oOacFOMMBkDJzzxSxq2O5+ppWDcbtwe55+mKXpjC45py5XIpf4vTPekNEe7vwQf0o6qML+venqu3nb25/GgKDluvNA02hFB4bb2/OmNjbtZTgc4zUvUjOS36/Sm/MzAjJI7kUDY3bnCKvHIpSrBfmUcdPzp4Q42t+Pv8ASkzwRnI7YoGyM9t3/wCunfeHBDDvTlxEB83P8WOT7UrR5+YDoMc9/akBHhmUbsbemc05QsfzMR6Gn4+YgHJ9Pf3pqx7vXr3pbjQ0jOCzEe5/p70mG6suFHK57U9lP3uAQ2cUrKSeOAtNjBlG392vXgf57UsbZkVsYH50bWJywOOvPalC8D5dxzU9Bp31Ppr9nuRvEHwC+KvhDdmSG1lvIV77mtmwf++oBRrmsWUPxoTxc2F+0an4S1pWz/yxuYlil/MsvPtVH9i3UYT451/w3eyAw6zoz/L6+W4yP++ZGrgPiF4nu7yz8IaTZWbsB4ZaxupfNSWRZbK88iPcVOU5gyBk8ODwa/L80UcNm1WnPRTt/wCTWu/wPssFzVcFGUd43/A+sPhGy+DPCfiWP+xLrbb3U11JFblZZZWEkqNKfmwXZIUcjr8w45rwnwv8RNa8Wax4++M3g3wjdSaVPpF7Mlte3AhSSa0mtrrY7KHxJsk+QcZ3vycGt39nzULrwb4a8bf8Lch1DRtLvreOPS7rVEe389ZvNZo7d32lyzylzg9WJJA5Hlvwv8f658O9H1bw5ffZ9RtNfsbnTYdM09FkuZJpg6rIrD90FVWXcx3ZCDoOa+WdPk523dpr5ryPZUr203K/wJ+JmlnWZNW8ZW//AAjsGr6bqk10Z2Jt7Dz7NsRySkAFtyBQAOTXlmlyRXthbXEMqyRyxgq8bBlb3B6GvafEHwhvNN0H4d+CPD/h25uI/GCn7VqV9NFIGnQdRtwUTZlsEsGHQAg55Px58LH+Fn9l6NeXAL3dk15GkcIVF/fSIVBDMCMruBBwQwr7jh/FYf645RbTmrJb7enoz57NMPUdC2lou7fqcaflKsMcDp79qfHGtxmBwcOCpJwBgjnqcUm3b8pG7joakh+WQdcMvpX3cleJ81F6o+/b3WZfEv7MNrrVx5bS3mh2kjGJuN2YxkdMHjOOxr54tohGpUZHzHrXq/wy1P8Atb9kSW3XA/sxJ7Ic5+WO43KP++WAry+JRtb3Y1/POd0ZUMTKk+ja/E/W8mn7TDKS62/Ij2/mOajbnOcDFTsrdDzUZU9PXivHsepcg2jGB3ppjLHvVjbtPT8aRl2/eGeetIpHgW1Tjcp57ijBOE3ZLc5PHTvT1Xgc/MeRu5wfalXtu+Yr+nev6jPwMb5Z5bp9egpPlCbV7fKcD9TT8Z3dect7mjbuY7emd30NMfoJIo6Nz07d6TduzuLYNOI/h5J3Z4/+vSnIP3T/AJ+tJDbsN6nHXJ9P1pNjDPzZBPy8U/sODx+lNx1++Mjrj+dMbDcy7s8D2NJt25BXGfWnsGZgVUYHUGmru57lR3oDZ2G7TjsP603YfvbuPSpcfeBXJbjJ70iqoUAd+opiaGY6fLnP5YpDgIF5yAeOn41Lhd3yqOTz2BpNrfUr7dKLi1I2UM20qeeccfnSNjnac4+9x3/pUnUANzyTn+f1pvDZ5PPt1pivcYqtgNhiSQMjrSru42qQPvfjTwu1QTyo7+lDNtH0/wA9aAvyjNhDbjyBRg7y3OfvZxUjcr93OTu+lCrhR5mcnggdqYWTGL1Kjk/nRj5cLknAzUjKG+Xt3pisvXnNLcT7CHaAW3c9elKw2r2yPx604ndlfwJPQ07GGKjnHNFw2I9pCYbJ/wDr0rAZwqnPoaftzhgxOO3pStuLgbmyOuKEPoMUbsdOBnFIyj+HscHmn7SqjawIz0NDL8pbcc9vX/61AnsMO77u7Hv6U4fd28569Kk2jHyjOOoPam/xZXkDrT3BaDGjCKOqr35oGGy3OP508r0LZb+lKylcpnkdKBMj29l4yO4/pRhlUKG5xk49fxpzcttw3Qcg/pSlW9MY6gUweowpgnOOeTSMnzDbgjPSpVXcvLcjoVH+e9N4wG4z2+tK4hm3nHHvSndwpyOM896k2qfu8D+tJt+YHr35/lQUiPaVwGbjH480jLk8LwOvHX0qVY2KksQSvP1o2O3zbsdjz0ouJ6ojZQcbhx2ZaXbjPQKOAadtHy8dDTlUbThSc8jJ/wA5oZNrjFUcrn8vWtTw54c1jxXrVn4d8PadLe396+yCGHGWPckngKByWOAAOa0fA/gHxF8RNeh8O+FdPa8u5RvkJO2K3jzgySP0VQfxPQAnivuH4d/DPwH+zt4XfVL+4W61e5QR3eoNH++uG6iCBeqpkcL3xljxx83n3ENDJ6bitaj2Xbzfl+Z7WV5TUx0lKWkPz8kc78Iv2S/Cfg+3i1bx5HB4g1hgGMDrmztj6Kp/1hH95+PRRXpGufFb4c+DY/7PbVIHe3GwWenx+ZsHphflX6EivFPiB8TvEXiyaS3a+fTtOOQllA+Ny/8ATRhy59vuj0PWvnz4m+JfEXhyexj0pbWWGcO7IwKthcZC447/AKV+KZhnuIzCs5SfM/Pb5I/RcLltPDwUUrLsj601L9qDT4yy6X4TuJR/C1xdKn5qob+dcvqH7T3iSbiLw3pMYH9+SR8fyFfJcHxis12LqCSQ7v4jG2PoTjite2+IWkX52295HITx8rZrx6mJxEtJHfHD0l0Pe7/9obxXdKVk0rSlU/3VkH/s1cTr3xD1DWGLXFjbAn+6zcfnXnj+I7duPNx7GoH16Bmysw596zWIqxejNfq9N9DX1WaO+fzY7cq3fDDn9Ky/3a7kmyvH8S8H+lQ/2tFJ0kHHvTvtsch+91rso5vXou//AADGeBpzGTaTaXKlvIRfl42fKPyHFZk+hyI48tj/ALOf8R/hWr5iFTtYg/7JxSi4nXO2RXH+0OfwIr6bAcb4zDae0dvP3l/meLi+GsPW15F8tDAn0u9jTc9uWXuQM1VwPu7vXtXWNdo6BZo29Pl5qqtnZyMWM29emxj+NfZYHj6nU0rwT/wv9H/mfO4rhOUNaUreq/VHPbQSed3bnvSorBgdzY9K120uNjtijaNs8AHIP51d8P8AgfxD4q1aDQ/Demy6hf3B/dwxLzgHlmJ+VVHdiQBX1OF4ly3ErSpyv+9p/wAA8SrkuMov4L+mpzscLOQqxk9yBzgV738F/wBlPxF498nX/GX2jQ/Dz4kjj27by9XqCgP+qTGPmYZOeB/FXtnwT/ZZ0PwL5PiPxs0Gs6/jdHDtza2Z44UH/WP/ALbDA7AdT7Vr2v6R4a06XVtavo7W2i6s3Vj2VQOWJ9BzXymd8YyfNRwDsusv8v8AM9zLcgjC1TE6vt/mfn5+3JpuiDQ9P8M/CvQING/4RXUhocy3kPkRzTzI0oOJFxPGUV2MrMwypIGeT8ceBdC1qDS7S6udMUIUubeH7fb+bIIVjKrKI2BRGO7ajAEnYpx1r7E/bA+LVh471qDRtQ0/7N4dmubZo42gLS3Eq7lHmOhDIGGVCoT94g5yBXyd8SvFWg+DdP1YSTMZ7a4t7ePT7NjCkG6ImND3KoFdcIQAcZJPFfjWOxcsTWcab5pN7nv1oWlyrSxZtdDTTVg8Yah4/t0sbeFoI55rdGnZkG2XygSMBQWUOcncScDisHxh4g8I65o+oWUcgu0gtWvJIndUeaaEARW8zKFZHUOeQwDEAfMRzn/8JFd+NPAOv6xqVhIQ9q/kLFEqwWjc7vL3HLlVJLHkkk7ckV4Na+JJLXQ7/Rws6jU2VpjHKy+YFIKh16OoIBGRweanBZfKtOTqS1i/I0UoS+yeoa58YfEUy2Wl+F7q7GnSWaTXVrMil1hUAbC4ULINgX5gM4HOec+ifCv41Q6jpMI126edbeZ7doxMpaG3C5Eh4ycbQMdwT6V4F4V8aeJPBpt5rGddiK0iw5V8o6mM7VOcNtYgcZxmsG61qee++06TGsGUMQ2KAzgk53kY3Zyc5r3MGq2AqOWFfI97rd+pzV6MMRH2clofeOi+LvBviW3W+0LxFHc26qnnHyyGhZgCVPrgkAEcHIqzpOraHr4l/snVI5zDI0TK2UYsvJADdfwzXxz4W8e2PhyztbjTLDTk1VIWt5mmSQvJI3BYpkocADB4OSeOK1dX8cXHijxFDb65lFnt91i1nJJJNb3I6qCxBRndV3ZJHBx14+lpcbZ5RqqM3GUV3jq/uaPGqZFhW3a59d/NuHv1rc8N+GfFniq6utN8J6TeX95b20twI7WIvtwpxuI4UE8ZJHWvmrwx+0YunqlpqUja1a2yiTUbh1WG5TDneIAXw4xtwGyRluuBX3H+yF+0J8K/CUev6jqGtf6FqlrYzB1GJ4x5jqF8gnzX/wBYGJQNhQTX1GP4ywOY5XVpyXLOS5bS89HZ+S16HDhMlq0cVDnfu73R8m+LPhjqHhhNX8fePtU8jS/EmmS2+iwrdKkss0dx5LSeWR5kcQbCb5RhsNjIxS65Z2el+H3sbqxuru4EUd5qF0/7tAm1HNpHI5yNyKcdh82Rztq9+01a2ur+MfFfh34S+Gr+ew8VXv2i6vrmBLhVtWnA8zc/zRlgXdSR8iu+Bk8eV/HD4hfYbq0sv7NtZbyznWEWczMYjAtuAVkZSN2SeUJ/u4C4wfxfD0+eo1Tem3fRdfmfUVk1O6POvF1zHY+B7TQ7S7SZpWlupGimZ44A0xZrYDJ2bcxtzkkkjsTXnduNwklVmVY1+77j37Cus8VzaLNoIvrO+FtqFtfyxx6ekQIaFwHaUsPlABO0KM9OuK49Y7iWPdb5VD1Xsa+gw8UoP1NI3tqy1apDeTW7Mq28TyfPI2TgDkgetM3eeFZVZSASGzjAzwPTIzVz7Hp8OjhWdxeCYAjsIyCcqAOeeDk9ximWd1DFBIskfmRhMY9M8H/PtWy1GmGn3L6XdxSTSMFfa7gMV3D69fy9a6TTvHt9o940mlx8CbeIZpmZfT5cEHOMZOecVS/sG3k0+S+GqW0iRMP9HLfvgBgZK49D68j6U+bRFvrqXUvD+g30uliRY/lXd5bFcsCemcBiAT0HtWVWnTetQpTcHoe1+CvjxqniGOHw3cWM1iLbZJH9lbckoGAYjuGI125JY5IwcZJrWg+MutTTBLHxHp97fi8lgns5bX92IwAQ8Um4bh8pGDyOea4e41D4Y+EdNht/DL2H2i1EEct9dWzTTSean78koygqA2VAOVxjpmuE8d614Y1vVpdX8NxyWpt/laN2IWYIAElQZwp/2RnPX2rgwteq67qUeaOlk9tthTUa6bqK59ceG/ib4O1uxt5LjUJIZnkWFi8fLnaMkAdAGJ6iupb7PIz/AGe9gkVO+8DIJ4OD2OP0r4ts/ife2NvbXVvapZTh9xdZCVdSMMvlkbCCcNkjI5Gea9V0v4ha54sZ5bnwes1s1vHcRy6fcC0uvLB4ZRgKw3F8D3NfYYHjPN8F7tS1Rf3t/vPMqZFg8VFKPuSPfvvKrLhlPzAqeDTQqN7Z79K848B/ELwfaudHv/EV1pkXns1xHq9qUlRzgKokGV25GCc5I969esU03XI1bRLy0u9qkRgTr90BjvIyD0HQA9RX3WV8bYHFRUcU/Zz632+TPBxXDeMoSbprmj5GTt5Uck/nUot5AuWTYOxJx+hq3JZ30ezfbyQK5wu4Fcnv0+v61T2srFNxJA5J7/jX1dHF0MTpRmpddGn+R4k6FWiuapFr1R1vgBvsvia0uINMtdUEmk6vamwa13LcObSRlDEfNJnIwoHbrk8cdt6sqk5r0X4Tx6jLrGkf2RcNBqKawLa1kDbfLkntZkRs9vnxz2rgZoZLeWSCRlEsLFJCrhwWHBwQSDyOo615GWSSx+Ip9rfm3+p6mYRcsJQqN7r/AIH6EDKvmdh+P9aVfvALj0INP28hsBjz3+lG1en3WPOfWvoTxfQjVdow2cHr9aXavOGJz70/HT+LPb1obbtAwpouMbt/Ht9PrQA3XPH0xTlX/lp0B685zS4YSE9McGm2FhnQjLE470AlsZbA69Keoyf/AK1Cxnnr1/OgERiNlySeuMD3okUBSAx56e3tUiqD1X/9VC7R+H6UmAzGR8zdRz7UbM4Vg3HT3qTaoYncMD9aUKvOMfLwp9aL2GiI4I3jnjmlAHDNTwufce4x+dL8jff+UHGKRW41VXcdrDaBj1NN2gLu25J4Jp/ljaWGM560LnIY5+b0osCGlcZ3Aknmkx8o3DO38vr9al+UN6hTSbe3OTk4/wA/WkU9BgHy5XaAf5UYbBJ788dqVQR8vfbjr75zTxxknJXB4osC11ItgHHbb2oG4KCM8jhvr1p43Mu4sOR+lKV/u84P60BbUYqq3zZGBx+NBU591PbvUh6luSQegoCddr4z1pFDFaM8sueO/agMTxt4J3A09NpUdgfWgrhjtkJ9f8+tGg79RyzXMcN3Db3U0Ru7WW1kMMhjJSRCpGRyOufwFU9e8W29vpHh9NC0qaGbRdBisdQkluBBGLmFpAXG0MSXQREkgBm5yaubVB28gsv3vSqOtaXHqGn3MMUa/aJYXijZh97cpBQ+qkHBB45rzcVl1HEVFXa95f1r952YfGVKUHTv7rHfsz6HJ8VvF82m+J9N1Ke9XQ7vUvtt1dSSWmnw5VkDRjczxqCwKKFLMcHHJqtq3w4/s/x4NBt2m1/xPNeQWkUltM0wmiWTauznYEOPlzzyABXU/sf3Gl3HxN8J6T4gheeO6BspY5JXRlLBh5bkYLYkEQ6kHaOor0P4qaLqXg/47azH4bs5nfTdTg1C3ESMyxkhZUyTwBnjJPOK+By3CQhmFWnK1nFtX6O/fpqfUYvETeGjKN7prbsfTngv4Wv408D/AA1uvFF/eWL+FJheXWnR2yRG5uIVaKOOViu8KhBLAHDkc8V8v/Hrx03jq+037VGftnhya/0maTaAHVbg+WcDjhRitKT49fGjwTqTX9xqHn6Z4juroGFoFUWF5EVd0XYxVkZZoyHXqxIIBHPlWsalcapqF7fTbU+2XT3bKvTc7En9WP51HDeExFbMFiLe7Fv080vvDNa9OnhXSb1djNyu47W56VJHjgZwOg96FX5mIJPpTsHncuPr2r9OZ8dFn0/+z7qz3H7Pfj7RuG+xXXnL7LLHHz+aMa5yMffyDksaX9ma6aTw/wDErRmyUm0FLrH+0hkGf/HqI/utx1YmvwvjGl7LM6lurv8Aekz9R4anz4FeQhXn5aZjcT2561I3Lbh27elN/n9K+VPfuM2/pTdo5HHpUh7AdqRz1xRYaZ4AitlegPYmlC8/Kv60Y24X5flOeOetP27fu9vWv6iPwVCY6fN0PbrSY+Y7ckEU9k3KNvT1x7UhX6ce3SkGo3/aY8GkUruG3jA9c/5FSFdnJxgHjFLxtDZJwMUIdtSLlshcBR6UrDhRmnbVZfmAx2OOlAyeN3ftRYEN6tjb8o7e9Hy/3QM8evFO+7nBGRzwaT7oBVRz6d6LBcTazKSBzx+VJ8vt7YqTgN/EM/oKGGRjkCmg3I1UKPmYEil2hlAy2fXpS/NlfbueDQqdQvAPQ+n4d6LCUtbDGTCkBcnndu70Ku1FYjO45+tP2/wt8317GlxubbgD8+KY9ERsF4+UHHakKDO0KeBk/wCFSD68jr7mhY8DGemaAeo0bf4VJ9yePpTSu9ioHH16e9SKo+8/f+7xn/8AWKRtu3Ct82efpQiOggQpkbs5PX1oEZbGOR24709VXhvm5yDn+lG3bjOfl9e/0ouOww/e24Y+nFO2DdljxQACehOeF5pVHlj5RtX096A9RvQfeyR2IoZWLbiwHbgcml2qWO7qPy5pwXbjcwHf60bC3GeXtbdkN60MeMDJLckdOKkwM4YHHv8A40LHzzyPbtQN9hijqemW6HtTtp7Akfzp5Uflx7GjazfM3A/Q/SgaRH/s8EN0I7UKrYyrcKadwTlQNo6e9OAC8lSPoKYW1IV4k2gcAdMdPrS7uqIxxnP1qXbu3KvU/e44prL91R7UC2Qw9Noz7HpSCNhhv8iptuccjPSjsMryTQTa5Hjtzx05pRGxyflBHNOMZ4/hxwc0qr8xG449e1Iq2pGRz7jmgrj0HPrxUrbmbjP58UMvzcLyPakK1iNUbBUYIzxXZ/DD4U+Kfilry6L4btgscOHvL6ZT5Foh6FiOrHnag5PsMkdB8F/gT4i+LmoGS3Z9P0G1k23moumcHvHCDw8mOvZc89gfr2bUvA/wR8Ox+EfCOnwi4hTctsrZYuR/rrh+pZuvPJ7YHT4/iPiqllcZUaDvU69o/wCb8vv7H0WUZJLFtVKq938/+AJ4d8PeAv2efB66ZpsXm3Vx88shC/adRnA+8x/hUZ4/hUdOTz5F4v8AE2seKdQfU9QugZSCsaLny7dP7qA9Pc9TjnsByXxT+KV1pcL+INYhu72W5nSJ5IwDtznCgE/KoweBXE2Pxs8L36hW1LyGP8M4Kfz4r8Qx2OrY6bnJt3/H1P0TD4aGHikjhfiB8Yr7wj4uvtGvZo5hBMECD5W2bVO7PQ9elUH+LPhHXmil1KMNIkbRq7LnywSCRkZAJKjn2rZ8aeBfhz46urjVZmVrq7kM0syybsnAHHIIGAOM15NrHwMttHZ5tB8QKibt+2Ys34A56exzXLHl6bnTa52d5deAtYRmhughHdHHB9wawJvCunyeZdabqjGUMGikUbCv44+n61xNn4H8R2OrQi4sZ54ZZApdOV2kjPNe6aP4XEdmgnXAVQMVtGMnotSZtQPOdJ0jVpNbNvNdTyxTJuwzZw2fXt3rv7PwxHGu5lOe9dLY6Hb24ysQBPt0rQW0VVPTNb/VebUxeJtscumhQr0U8e1Sf2PGvXj0rfkiAbHXFV5EU596r6kmSsVIxJNOaP8A1bE47VAy3EZ5Umtlmw23GR3qNtrLxziuepgWtjohi77mT5+3G5TThJHIuMjParzQxv6V1vwV+FOufETxVLawXGhyPpsQ1Aw38Ept513hRG4RgxHPPPOPesFhKnNZGzxMErs0PhL8C/F3xUuI7yzV9M0IN+91SUHY3PIhU/61uO3yjue1faHw++GnhP4aaT/ZfhnTwjSfNc3cuGnuW/vO+OfYDCjsBVjw1qv2XwnHdeIE07TDp3m210Lc7LWMwu0ZKZ+6h25APQECvKvH/wAdnvFl0vwbI9vb8rJfMu2Vx/0zB+4P9o8+gHWvXdSngaf7yV/67Hmy58VP3VZHf+PfirofgtWs4WW+1Qji3Rvli9DI38P06n9a+ZfiF8RrzWrptS8RanvZQRGmdscQPZF6Dp9T3JrG1XXFjLO0hZmJY5bJJ65JP8zXmPi+1TxlcLZzRtdRxsG8lWwu4fxM3U/KSMDHWvCxWOqYrTZdjspYaNP1Oc8VeING8bXc00O/OjSxbbhGUkbkLZxyPl3IVB6lgRXzZ4r8Vaf4hsdZ1zw/ommWiy2d4l/dX9wn2hW2tG4DMADLtUDamSCw6ZzX0p438Mw+FfA2o3X2G3jtmgxcFXMeAkYRBuAO0BBjd14A718trpth4u8M67FZ6Lf2Hhzw9pIuJJI4ImEl28iyECWUDanGCUO8hPukMccuCpS9u3NdV9x5GNhF1eZM4TSfGWreC/Ber6LpOraLdJqZheSJSXkt0dTtSNum7ltwH3SDnrXD6fDHc3cizRDfBG04iP8AEB94D8OcV6LofwX8WahpeoeIrO60mbSFgS1ku5c4imfayptHzRNkcF8AjjndisjxB8OvH+n3Y17Xri0uTIGkS6ivElSSNOTllPyDGeMdiMCvpYSownLlauznWiu9jPtl0OSzimS1j0e7gDSR3ULSzeZIFJAfk7TwMEAck59ue0yE319aaXD5ii7ukRVVdzGRm2pgAZP3sYFNuJrrc0iwqIXTYoRSq8+1RW95daU63FlKVkT/AFUgPMbeq+hHr+NbxhJJlJXOg8TeF5vB/iO+0u41SGe7s2CO0CHy3f8AjHPTb0PqQcU+yv8A7NqmnTaZcwXkkjBRAwFvtC4C5fOM9x3yvPWsK8tNUvrf+3LzeV8wRSXBYcuRuG4dckVLq39h3EltDo8N5FH5e2aa4wxeU/xKB0Bx6mkoNxUZu7G0nLyPUZtJtfCdjY+JvEnhzw55+owJCtjdpJMsC5XFwQp2lmBDFQ3GTuAyBWL4Z8aW+iQ3FtpTLC87MbqR3EbTQ7gAYHc/I+TkLjIOTkAYqhpOp/bvAt54V1jW9MR7dxd6fFdL+9cru3RpN0QHOQrHk9K4y3uGtbmG9hQGS2kEm1lDqpU5HB4I9jxXPSw/tFKNT9bW6BUppPmjse0+C/idda14ottOuv8ASTNDPHHG0hhNvEjCR/M2AB3ZISM/Xpmm6xIr32hN/Zum3f8AazW99Y2kiSRwyykFZJ84G8qXKEk4BQ/exXGXmoQWtvBB4Xu7K8vtRWSRittiezeYrgeccAvnP3eFziu2sfCel6TounatqWoal4i1SzD2txCsgNraq7sAqzchAJC5ZSNu/aPXOLo06F5R90ykcL4q0O30fWLNdUuIrvTbj/TbyCznHnxgsBJ8zKAGYZK8YFcgLhre3uNPgRHjnbAd/vpjpjnGcV2/xW8Xr428RSX8OnfYFht47NoIkxk56DAUtwQSSOSfTFcNDZ3TSTGG1kljtz+8PlnKY4+YdV9Oa7sO26S9puXH3epYjntRo11awSETiSOQKxYlux9hjP45q54TbSl1GO6vr5YXtZBL5EsJkjugCB5Qx0Zsn72FwDzmsRZPJm+0W7lXU8MPr39a1/Dl5qC61CmmfY4tQnkEaXVy6osLkg+YGf5UI5+Y8c1u1oxnrtrdeDfHkf8AwiFhoNppF7b3BuYp4QjNLhWPl7gdqhl27znkgDAOc52pavqHwh0nT9Q8J6hbJcXBaJJvLeWO7Ygl5fLk+RTGW2jj5c8ZzmvM5JbexuE1DR7qRysjeZwfkOeMt/Fu5NVL66a9KNdTOVUYOSSR6gCuKOEu9/dfRlRT3uX/ABNq1hrV7c3lnpH9nrNhjDHMZVL5yz/MMqCT0XAH0rZ1PTNe/wCEH0DT18JyRrc7rxb+Oy5uUc4jBkUEkbV6EjGOnHOD4b0t/EWoQ6bHGcSyCGMqwGS3RSTwMAZ/CvUPB2teIGNx4U1Lxbb6bZ6XbRpbRAJLHO4DeXB8n3WO5jkfxDDZOKdebpRSir216m1DkjdVL/I8yvdJvra3msZo9l5bBJPIbkyRMu7eh6EAYP0zjvXV+BPHGm6Xb2EGvaaL+3tPNVVe4YHa5UkIOi4x06HJzUPibULPxDprtfQyWgsw1rbSSMx3MCWwRg45GNv+114xXJR3jWukmxZnCl1umhcAZYDAZT1zzWkJOpFNrUwWj90+grrxt4BuoYX8N+G5bTU418xkVlNvKSCNjgk7xz2Gc5qtr3i/R5NFjj8Mrc6ffRIouWhYwRwuQMyKpyODxtyASevr57qmreFY4tFvvC1xqZvhZoblriNYWW5H8a7WIYED2xgZ61m33jq7FxqG6zRzf2pglSXO1WJBEgxgEqRkA8A4PUUnOdWGsS1UnazZ9N/CvxyuoQ22j6v44u9amNq8506JCTbBP9ZNJkfKv3FDbh94kA9TFb/Hzwva61d6fJqE00UM6+bNNGGVC7gjy2UcoqZzvwQQBzXzx4BbS9Yj1bTpL+ystXuIVa0vrq+e2ZSpBZUIBWUnGdjEZwMciq/jjwvqng3xPNpOpapBPDK27dp8wYyxHG18HoTgHDYPr1riwSq4DHSq0asoya2Wnr8v1DFw+tUUqkbo++fhd8QvCcqRXkevWk8jXVneC1t5l81wkrKyLkhd+1m9jxg81n/ZolidrGSSa2hfykleMKzKOFZgCQuQORk46V8tfCvR5NQja/0xUmm0YbGgmuJIw3mxfMNynKNnlWHGMg1seHvHnxO8P6uJNYW5vV01Q0kcjZjWPcMMdhVmI4xnII65r7DL+KsfgMY8RUSlTklfu7ab9zycVlNPE4eNOOjjs/nfY+imQ7ty4LdwTwKX/gPP9K8jsfjlrl7Y3d5JpGnzJBmSWeOQkW6h9u1yVChmJAXOc57YzXqtx4s8KiPTdNmtbm01q6UK6LNG0M7kFiqHICkZXGSQQDjtX2WF8RMrrVo4erGUJS02ur/L/I+eq5DiY35WnYkC7Tn1OcCjac7WG7tnHerM1vhUfgxkfez1Ppkd6YYWjVZGZtrqcMfrX3VLEU60VOnK6ex4s6coScZLVEO35gwbn2pdrDPJz0+tSL/tKDwfypvl5Iw2Rjj3rX1IGLtHyqpBPJpVTcuBnA9Kk2rnBXnqaNqq43EZ9T3pXGkbXhbSdF1i6TTtRubyK6uZRBZpDGuxmIbBd2OVG7aMAEnPasKNt0ay/wB9QffkVs+G77TdK1BNQ1K3u5JLeSKW18mZY1jkWQNufcpLLgfdGPrUGtae2m61qWnquPst5PCo/wBlZGVf0ArhpzksVKDbs1dX203t96OqcYugpJK9/wCrmd1x8hxQPm6jGeOnGaeFzG7YGPrSbWGMZx1rvscthirtyN2ccj6+gp2Oi85x0zS/Ky7VXAHXBpyg7cgtkAn2FDQ0+hHjaCOfQUo6gcEL7fyp6j+9+VLs3Z70hkbK20k4x+ox/OjaAuWB6fzp7Ky/Nxxz06ClUKw+Vuvr2oDcjODjvjjjtSbMNubBXjkVIq9f1GPT3pdq9DyOtBW5Ht5+btzil2ruz1HXp1p7L3BGe3Pt1pdvJ2t90fTNSPVMj8veu1QBxz9KTlcDjGO1Seu7k9P8jvRgddo49u9AMjEe1ipP3vWnKPlKkf8A1/pT2BYDC53Zxk9KQR5Ysei9aBiMo4+UZ6ce9Iqbvm64569KlbDZKg8/nSFRjPHPHNIbRzHg3VPEGk/GzQdF8D2qPrmp6lLBbTFWfyZTErKyIfl8yM7GHBHUkEcV618XPDHxM8O61d+Hfi34yufEmp7RJb6nbXBRZI+QHKAYEgKAbeMYPBBFeIeINQTQfid4P1SRdRLrq0c3l2dwbSaZf3cZSOcchiMrgD+Ie9fZv7Snwr8K6X4ZsviN4ZsTYzzzx219bxjbESdwJ284cP8AeOTk5NflkqNN52qOJjeDk1rfrsfbRqS/s/2lJ+9b8j5+1zxFrfiKOyttSvE+zWLF4IYUMaIDHGm1VVgo/wBUpJZWZj3FZuF3Fj0x0PpT2UsCSpGDzigrg4Xbk1+kYXB4fBxcMPFRT7HyNbEVcQ06jvYb8oA+XIxz60q7iT8xK+npTlXkdc4Ofek2sCG5I+ldOhlse3fswurah44tVceZP4TutingttZen51ahYNuK/d46/Suc/ZxmkX4kGxjkKrqGjalbSDuwNszAfXKA/hW/atvX3wM/kK/F+O6XJmXN3Sf6fofpHCs+bBtdmS9Fz2pu7nr+NI2D3qMkbd3Oa+JR9Lew9m3ZqNmyD1/CkZuvb1qN3Xpu4pjueHrjj5Rx79KXduxuUdOeetOUYwvQkE8HqO1Jjj5scV/T5+ESdgydu3ng/n9aT73G3jp+NPRWZccg5/OlVG3HnHp7fWkCbIyOuWJ7Um3cB8uQTkEU/aWJIyP+BZpcFmIXt39f8KQPUj43YX65HQUbdyjdzzz6mn/ADdFxnvTtv8Asn1/GncCMKy55JA68UMu3JYnjjPNSBRu+bHFI/Lbt2ByCP8APWmPoMy3f/I4o27eAvepOw688f59KTZubjGc0D6EeDgn7x47UEbsru69vSnbTuChuvtyBTjH83XcB7UEEf3vl29MYpfLZsEcev51J5fVSxHv/PNIy/MNvpzz2oK6EfzbSOOSenejbtXO4fN1NP8AukLtwPcdKGH8J6/pTFsRr90KeOelO24DYYE980/axXaew5A4/GhU3Y3A4/pQKw0/MN3bpg01lLcMxK8A1L/Ed3JAzijbubLMc0DZGV3Ltc4yaVULMe+Rx16U51VNrLhqVV67cY4oJsNVN3qTjpRt3fu2we59x/8Arp+3I28jsfelVRjdjPOM0DIlUAd+mAfX2xS+W2BtJwvtTtvVdoyM89cU7a24ru4PYUbghnzHJ56Yo2qqkKoXHP1p3zcZHHqO1Iy4fZtzx3PSgHoN2s33jkj9aUndjqB256U5VJYFW57j0pcd+vbHancWw3BU+xwuR2+tO2blxwP6UbSML/CeuO1K23O3aCD2zS3BPuMC7c9z0z9Kay+i5NPby41X5S2WAX8ahs5rqaFpLzT2tpFZv3e4NlQTtPBOSRjPvmpckhqJM3+8Ce9IPlyqjj+VSzW8sLKs0RTcu/5hyQelIy/K0m4IqLuZmwoA9yfwqFWpuHtFJcve+n3lOEk+W2o3+6vPHevbfgP+zjqnxKlh8R+JRcaf4WQ5Qj5Jr8g8rH3WP1k78hfUTfs6/CXwH4umj8R+PPFGkNbRzSLb6GbtBPM8fLNOpO5YgATt/iHJIHB918W/GSx1eGbwz8L5472K1jEc0+m4k2oBgJGEzsXjG7249a/P+JeMqWHi8PgZXfWS/KPn59D6rJsidVqtiF6L/P8AyNnxZ460LwFpS+C/Atrb2zWUfkDyIwIbMf3VHRn7n0Jycnivmfxp8ULDw7qUVvqsd4XvA0xmKl953AFmbOScmtSGbxneQ3F5N8PfE1jZQNJuubyxaGLauSWBcjIIBORnPauA+I8Gi6xY2WvahqYESxTQQxW0iOzMAHIZeoOQFC8Ese+Dj8dxeKlUnzV3Zbn3UY06EdxPFPiHw/8AEDSbext9eit1S7juC23JcJnKYPTOeteaa18M4WkkvNP1CHJJwATg+h4zzj2rzzxR4wsrHWm0mx0GSV7ldscattaOTanEzDIRcyA9R2FO0rxPo+pRm40/xHc6XC0b+XbzLmR/Kj3SMis3dsBQQN27jOK5YYqPLdJ29CFiqbZp3/h7XtFhM8NwVi27WaKToP0I/KtjwLYalqTst/cXEpjYcSMSAcZ4qXR9b00+Vst7m9klt1LI/FyHJX5dp4Y4blRjB6Gtnw34/wBCj1qy0mDSWhfU5ZxD+5kDSmJiGVdyrufapYjgADrRRxlGtJRs18geLgtmd5p2gqqjzEBI5ArcawVbfbtx0zVzQI4fEFqLnQbq1vkyFPlTL8rHBAJJwMhhVW81zRYo2Dalbl4y37sSLvYrgEKOrckDj+hr36Dw8Y/EvvOOpVlLUatuqr8yjiopI9uWwKwbj4meG47e5nC3JS1IVj5XBP8AdB/vcHjrx7ishvipZs8K/wBi3EvmmSMGKdGYuCcLtAxn5WHXqPYiqlmODhpz39NTJztqdRNxnPHFUbhtpwMf4VkeHfiV4V8Xaab7T7xVkhDtdQrvfyNq7nDPt24QdTnuOK05pEmiWaFg0bgMjg5DAjIIPpgitsPiaOJV6b+XX7hqVyrI6/WoWYfXNJI4HynNQeYeOwrWUDRS0J9y5HWvUfgF8StF+GfiDWde1qOaYT6Wbe3hhXLTTeajBc9FGASSf1PFeSiTH3mxU0ckZH7yRlXyzJuAz8oGTj1OBx+Fc9WUKK5pOxcZX0PVfFXxc1PxVJL9s1ExWLXMt1HZhsRRNI7OfTeQWPJ/DFcnd+IWZSyTbl7YOa4qbX9OjuktBHckTWpuoXMYZZFUDcMqTg56Z9CO1Rtq3h/93/xMooTMCyfMYmIHUgHHbnntj1r5qt7GvJyVZN+eh6VPF06cbNWXkdHC1xrmox2bSMBJknB54FdppuhWenQk7VRQNzMeMfU1xnguHb4ktLhdQWW3IkBJKkfdPIYfUfmK+kbf4Ba94m8I6u+rCTTzcafcJa2u0efLKYyE3Z4RScdeT7V3YPBX1kZYjExlb2b0PnTxl8RPDem2t1a3Gl22qwiKRY4J8mG5udrBEYDhkVvmYHrtA718z69oNtpen3u24e/t7dkW800ReRa2cKRrI10zyEKJJHkli2qMiNRsJr7h0X4X6Lcazr2mwy6Q1rNoAOnWMlqZjbTwXEokllQEko5jc7twYLsBAINfD/x2vPDvhDVpfCNh4n1Hw3Y2nmXDyR4nlkfG+GEAgusaq+Pmzkbe4NcU58uI5Zbttf18vxZ5+Jjy6nK+G/E1rceG7Twz4oludPW3eSK5s5LkwYMEvXyuS6hCgDsu4MQQK8m+JXjB7rxJDeWtnJNaQyRtb28kj7LmJSAUZBjhmRt2MZ61raT4i8H6H4Qik1jSrWTxH4guJMawtx59xa2smFdvLJzuA3BRuUnB3BsjGP8AG/T7PR/Glxptm0rQWyrHFI0IjQuqDKx4ZsoBtCknOMZwa9ChRVPEPTR3ONId488N6PH4X0vxXo+s6ct5cr5l9YwXBY5bLCVUIAjHzBfLByMZxzXnawxNCLhmIyxUqDyD/e+n+Fbl14gt5tAsNF/s+2Mts0szXG072R9vyH/d2HHXG49KxXSPLOvmbSpZAoyCPfPpXo0FKKcZd39xq5c2rKsePLLbtpVhndV2zaaS4ZLjypSML8/ON2RlQOpGc/hVaNPtAlZGRSV3Ovpj0qTTNQvIknmM7hZYvIb9395eoGSOPw54reWq0Av3Gk2ema15aTpe2Ec6N5jZCyLwdrFTkHBwcHqTz3rpLDwU1zpdh4suLCc6BJqf2PULsKI44Mv8qAli3zKBg49euK5y20/UZLOKH5ozO7LHD/Ex6NjuvJHB68VUvbm6tbM6VJJJEyMBNEGJQMueSOm4ZPT3rNqWiTG1qmXr7+ytR1CSDTbB9LhgD7lkuvOzhj0JUHGNowc9M55r0DSNU8FGx06ztfB+ra3HDpskF1ZfamEM127HZOEUZEYLR/eYZcLgY4Pk/lyTZdpjKyfxBcgj1NW49WudPsWhs2ltxLw+2Rl3YIIwR7gHB7gVnWoe0SVxWV7s9zOgzePtL0JotHu7QNm3mjnlaWX7TEu9pVL/AD5Kjl+gA6YSvMtdbR9N8Vapp7TvbJOsSm7t5zdK8mQZJmbjfuOSQO+K9h+C/ijxBrXhnVPEV5aslp4c02Z4RBvhgEyQgHzJGY73kXzDgYG5uQcBR5J4x8Tab4utP7QuNNTS7mziWOySNGYS5diyFuAFAPHBxj1JrzML7WGIlSesV+FwSRyF1a2azPHY6kt1DEFfzWjaMtknICnrj1754qvceXNMzRw7I933RztH4806eG5kjE0NviHnCx9EwP5nGaij5j3KuTj8R/8AXr3VsPzHqzK6BWPX15BqfzGbLblZmbJ+nf8AOom+zrPtkOcDs3X8aZLJKyjbhRyeBj8KY0ya1/0VjN5BAGSmeQD2P4Vt6Rqes2eqyNo9ml1K0sU5jazE+5ovm5XBwOuQMDH0rLtbeSa3xBGDK74GT2HpW74XkvIdft0m1W5s4rJf301q3SPGSCVI3BlBXr35rCo1ZsCDXte/4SHVLm+k2Ri/nM5SNdkavjBYKOg9B2zWLJbSQyJ9ojOxwdkm7II/pXRTeItNWe+1WPQbG8t7yZxB9oh/1JDMQRtPcsDg9cAE4GKxopbq/wDO3MH24bhAFUZ6ADgfQUqei2sgaS1GWi317dQWvmF5OUjx0xjJ/lWzZ27fahZf2hBam42wkSnPlbv74I4wDk45x71QWGUN51tvWS3ViZFB+YMOB7HGR+NWfBmk/wBu+ILaO51GCztlk8y4urpiIkVVLfM3YkDaPciqm1yt9hOzR61YfDL+yHX7db3MGrmSOVbuOzC6ZPaycAoFVnBAOflG4Y6cVz3xY0XSdAvPtHhfVJo9K1G1jmnmlkNxDeSoxUPAxG5QTuyjEMMHIxiqmra9rmnapY+JH1iFhdvJE1tavuIiJbBbfuUPjjJHow4NdvP8QNN1/wAFQ6Jq3gmGOx1ING04BZFlRsGQuRmNxj7gyqjB6njyL16dSNST5l9xS0VrnlvhfxZrvg6b+0tE1Jz9py80XaQejKeoNb2l+IL7xVpfiRzdzPq09urByVBWEyLujVcg5yAAFBPboTXn+p2Nzpt5sDRtFtPlSqxKSqpwXXPPJ9hTY7qZrjNjK0chI2yD5a9acPaw5b6GTVj2Twn4k8QaTptxoN14kt4Ibe/86S3jEbSO0SEs5jfAdRj7rD7y9u+brmvTaLpPiHw3ry2mq6jHcIum3VheZFu+1QXAByq7FBwedzY6dMm4s9atbjS7y8WO7by7e6Wa4wjXUc7KrhU3bpowykHbz1ziun1Twz/wkXiiBbLTbe4s9TvHtm1d4/sFqpiUBt5VcRcKTyCfvEZry1SoqbnLrr9xrCpyPUv+Afjd4ij1SwtLjUzFFNAIJ/Pc+Q4T+MjOVcDqehwSa9Zu/jNpML2utWN7b6pp92tw9xYQk/aLcREcgrlQCpLKWChgG9K+cPHHh/StF1wpp98p06SNbmC5jLskqkkHyyyAsPvD32tz2qW3+IUOqW8lxrOpzHVopo4bHUEURmKPa6Mj7cARkMo+6cfN0zXVh6+Iw1SGJwVRxtqrba+WxhUw1OqpKpG9z678P+PvBHiqOG40XXUkjnwFD8OhPYoPmOM9QCK6OS2WONZ45I5omCskkTh1Kn7rZHAzXwfpN5rGgahCfDyurNIYQ8a+cTJjDRttyGXuuBkA969d+FvjTx5Y3i3ast5o0sjOqXSyw2sCnar89gOMZzzyBmvt8Bxtj8LUTxslOn10Sl8raM8jEZDh6kX7H3ZfgfRy7skenTPP5UEFWDfeB9O9cZY/Fzw5dXIj1FY7DzceWFmEgTcflznG4HqCMcV0Wn+K9D1KIL5M9pcl3BWU5RQvGCcAgnBPPTGDzX20ONMmlKEZVeVy7q1vV7I8GeSYyF/dvbsbmkyLb3RJ0mDUjLG8K28yuylmGAwVGBLDt29jV3xd5jeILi7kLBruK2uzuGCGkt42bI9dxb8agszqmnXMeoabJNHPCwaK4tmOVJU4KsvQ4J6HvWjrNnfalZ6XrU0ke2WwSGWWeZVLyxyzKeWOXYqinjJ9etelVxeHp14Yp1I8jTV+bTXVeXQ56dOpOlKik+Za2t/TOej/ALpYkHnGKbhvuryeKk+Uk7myPUd6VuD1/PrXtR11RwEW1WXlWw2eaNnJPepee+TjmkC5B6/j/SmA0r6d+fxpdvzfNgHr9Kf3G7HPtQccdTx/n6UiiNgw6Y/Gl2789yOadjP7tsAnpT1+6N2CMdu9PYN2QhQFHGOw9v8AP9aULt9vwp7jnHt+VL0wOmPU0h+ozy/lO7n+8cUNGFzzkHoP/wBVScfMF69+KFGGxzx3pWuVcibupwT0oVev+RUnJA2qRjoe9KoVeWOeeQO1AluRiMqOxXpSsrNwG5B/Opdqj7vNN8ts/M2AOwpFsjUFVJz6A56Gn+VtHqTxTl+YbWXA7/1rrPh34HuPG2vR2LNNFYwbZL64jXcyRlgqog6NLIxCRr3Zs9AaxxFeGGpyrVXaKNKNOVWapxV2ylDotn4T8Kj4ya1o9td3On3osvCqXiAwnVGIH2yQNw0NuMvt/ikVQOFavbf2rvEfhzxJ+x8NL/4S6ybXrzQbDWY7SPUkW+vFWSJpZYwrBm3Hfll6kkV4v+1J42t9as7Dw/4dEEGheDb23S2ih+eF5Vby5CvZ0VGaME/e/eP1kNZ2rfs62t94V0Xxc3i7S7I3+mw22jrLNNK1nbQ7oZLWGJUOVjyCzEFRlASpO6vyvNnWniYYysuXmaa8l0v912fb4H2cKfsYO/Lf5vr+Zw/gS+j1XR5byzkuTYm4aO1S6l82eMIArpISSQQ4bCkkqOCfToiq8My/KK5TwPcrHqniTQQwzDqLalGpV0lENweCyOAVBeOUj1zXW/NuK7TjBr9JyqrGvhYSi7nx+NpypV5RkhF2t/nHFGzqenb2pxXdjd+vbtmnbNrEc13tHNrI6r4V+IP+EZ+IGh6yxGyO4MM3GfklRom/R67OPUY7WV7WSN8qF6LkdK8iUMremDwQcHj0qZry6lYsbqY59ZDkevevkOI+Fv7dqwqxqcjSs9L3/FH0eS54srpypyhzX87Hq02sKn/LvKqjnc5VB+prMuPF1lCDuvLZT3CsZD/47xXnU0kknMkrN7sxP6mmf7WevUmvHw3h3h4/7xWb9El+dzvr8X1X/Bpperv/AJHY3PjiHP7s3DjH8Kqn485rLuvF11NkR2wxn/lpIzfoMCsEr19D6UjLtZRnqOK9/D8G5Ph/+XfM/wC82/8AgHl1eI8wq/bt6L+mRfdUKy4P1znP9aRVjP0HBPvUgVckNnHUH/PWnYG4dhya+ovY+asRsrBuNhGPXvQv8PyhgPU4/On4Hv69Kcww2cL83XNAIYPujpt/z0pM9WKhQT+NPUNwOAfp1oZR97jnpmiwbkZUrhdg4+6B2o2lQPlYZOOtSHjC8kt096TZuAGSMc0WCwwYLFdp96cVwd20AU5Tnr270FSueozzii4JpIZtK4LLx39T+NJ1+YLjnOal8s/wt8wHIpNpDfL+Pt3pgR7VH8OPWhiCvCgk8e9Ssv7wNwSO1Iy9NvBFANWI23GMbSSTSMpb5enrk1IqsvH8vWhlXHRec9qYJXQwD5BlutGFbheoqRUUdWP0pBtwyrwR1GaFqBHtx8u0cd6dtYcg8/pUmF3BVU+v1puxhwOme1NCG44yuRnj1oYNyeRnvTuRheeKfsk/i4Hp1pEkQDfKOw49vrS7Qc+vA+g9qdt+bavfkcUqqu4lWyaB2GD7m7vn6Ubfl+bke3anMCJAvce386dt3Id3FAr3GqoXDcY9qRlzzwAtPVfm27utOCkDcOaB3uRKp6cgHuTVW81K0sN7TSKZljMqw7tvmAHHU8Dr3/pV5VZiflJ9hXknxb1jT/EGoH4bWfiqK0vZyclUSN9yqzrCWLcL+7ycjq4PPAPxXG/EFbJMHGOF0qVHZO17Jbu35HsZJgIY6s/a/DE6W6+Jmm6Ra7tZtGad0lukMbIieQpHy5Y/M+CMAYzjjNWbf4reBZLOK6+2XTfabNbm3EkJh83cGzs3DLBSpHAySOwOa+SvEF14o8xNUuLONYLiOOFpMyFbyORCVjcZwchX3BTjcGGRjA7b4V33xZ1rxEmvW+i2l3DaJ9jhkmkWO2QRsiiJuDgZaPAUZPY9a/L58U55hsPb6zp3dvwdj6ueUYOUuaVP+vvPprw7rlj4k0v+0oYrqyiCvIrXUTIrxptDOrH7wBYDAHY5xXcD4eapDa6NqGpatoemWniCM3Gnz32qRQiaIKG37clgMFTyMncvrXjnivV7XwOmk6tq8t7f6k7lVtLKaMma4eVQqN1Ck8IEHQY+XGa5y48VaDp/hu6s9Yv7651pbe41K20q2+WO1JYxCJtmC6hTt2ZAKr3BGcsP4n50qekYzW1+X/Lf8DleQ4SUm7NfM9S8Ran4L8M6nE2u+KrO3urCG5jvIsOPIVnj2GQkdSyhVwCR5hB61i/8LE0/TbaDXtSFtp8f7siN5hJJJI0TMoUEY+8F+bO3GcEnAryS/wBF8Maj40tde+2T2upXVo9xcLezBY1jXYzG2hHzGVRkICMD5TjILVF4hsbiGO60rWoWY3d6huLn7QybbJUIgjjV22hnGeWz8zn2rmlxfnOMk4zruPNukklrva9/vOuGWYSnaXJe2x3Z+IcdvdQ6t4dmgvdM1q7ihS2WQF2lKqcqoJ2BY3V2O4Dnp/dzfiB8c4NP1ibSNKtbee5sGeCMjG1ZVPMiqBtDKDkbsnK44xz514NjsV8B6lY6N9ueeBTo8UKRpiO5upSTgA5YGBZf3nG0uRjoaguNE/sVr7wrHqFrcw2VvbXn2hbdJwdjmRocFsEMWDnJyWwOc15Uq9fl+q1asnT193maTv5LT8Dsnh6MZqq4q7+86iT4kaxp2hT6r4oLy3upadvLZ8plXz/ljyzZDfKmQFPBI4LVcb4tfEHw/wCMZbrQ7+fQ4LixF5N9ivFVbgPCSIM7sANloyDkAMTzivI/GN/b+Idc059bsbmNb24aHymk2yRzMNrbvmO1Y5WHBUEgHpXoZ8EWHhvUEtrNl1bUoNLn/tKCOWQJI0U0RidkiVgAWIQICcl+SAKylRoYbl5t3fQuMrRPSV8efEzxPdQ6rrvjCeOw0+WOaSOKV2lW1ZQ4jVdxVSCoB5yAM9aZqHjXS73ST4w1O01ZLV2NzZyXAKtcLsVUnZAAzcuMHP3QB0xXnHjLT9Q1q+07RdJ05/t+qtCNO0yMNsaSTBlMyFsRoihtwGVJYgHAOMS+8G/Ejx14iF14z1aOwtbC7t7VkjuANy+YpiSKIHCocnaW4+U9cCuOdGErOpNJfoSuXl1Zlax4+h17xJfQaPt0rStdaO41ZmmeIzbTuBjY5O9+gyDywzwMhviSzPjTW57G18J3GgwaULe1t7q1Mk3mzSbMQyNypc7nI6EYwPSsbxZLc2PjDUZtD0d7rTNPhjbUPtH/AC8WzEBJC3GyM5DLtwcE44rW8erZ+G/Cw0PSfGN20UN4Lhlm1Iyw3lyfNy0IRQw8tXjcucDcdoBxmvVhQUIwdH8TKKuuY6fXL6bwT4Z/sHxvMja9dX0XnMl67zv0bPnKQsXlqSCpIDFyeaqeAfFGuappks2qWF83hm3u2t9Wvij3U9wwDNBbRqrb/McOo3A4XC5PFcB4Z8TWt5r0GpfEzT7jU9Ou4UFxIISZFiyQsy5+9gjtgttIBxmu1k+I/gOHw9Y+G/DqG3EN8l/M08kkIDxjsqHo2TgYyM88k1lVpzpQ5eS8m9WtvMFvc9Fsdft/Bem2+qJe+I9F+xWsv2u7tXlmhO4l4oz5hbujDgDO4k5ArXsdSubPS9P1aPXNcS1F1HcWksb+bqV5IHDKsSn5/LEcZc4UEghScA1zF5Z2Hjaxk8N6V400CG/vpCPMi1KVoykzbujptdVRGGwBTk9QuM6um+GbzRNHv9S8I+Irt762SQxapcMZJLqVFwRbR8BFBOAQvGQPmJJry5ODio1JWd/wLcp8jcSh4i1nxBBqFj4s8Kyq0F8sa2kbyKVuLl9zs3kox3tuYFt3A6ZxzWHbw2Xw4WfTNavINR8Zaxcubt4WaSHTYXRhJEiqwMjLjnaVCl+TXmnxF1rSbXx1Z2+h+HL3w3FoQjhSzkT/AEwsS0pdz93OZMDPRVAJJ5qxp1jq154dvtSvNJay1WyuoZZpGkLTeUUHyRxEbVLFkfJydoHau54JU6ad9H+PbUTa5PM9c+H/AMRrHTVTQF0yxbyXiv4rmxXyrW2tuE3pCSu5gXfcMsfn56Vz9l8cPF3h3xfJoOp67ez6ZbTizgeKEfaEsmcyCVIgVVztIwCecAdK8s0f4qeNIb1rW1vbe8As3tolkgVVjTAPyquA3Kg4bOSo9K3NZtfiNr2pW3ipfCclrP8AY0jvmjs1BkjKq6uyN8oVkCkcLjAFUsFGhW5521XfqaR9rUj7tz37wL8db7xheNpNno8mIraW4a5mjyW2K7KCoYBQyKpzk4+bhuBXd6H460/xDJqKRQNF/ZPy3f3nKts37FAX5m9uMZ5xXifg2LQ/h3dDWdXu9S09NavY/Ls3txMbQRMvmyymJiVIyHKj5QpIyM07xF8cRp+kao+o6amqi+ux/Z9wkhiHnKCHeVOGOUbHXnPU9Ry1sTjPacuDb18/v3ujT2MlHmvoeyXnxEh0+xk1ux0O4vbSImJJhNtjaboFJAOBk9R6fjXl1n8XPFGqaRqGuX3hffp8EiyWt22JLdIolIkj2oA+MvkZznkZrxLRfGF9ezNZ6XfT6WfnljiW4Zrc3A/i2SHbvZflHBPyrjoSey8G+PvEvja5ttX8VadfvoGmwxveW9tEDbS3EKZjMy8kKzAEgkDg8jNLEYOtU/eYp89u/T0W12J4iy0Whp3nibSbrV01Tw7qurWE91bmVT5cX2eWXgTeV5wIjjUgfOpJOCACSK6Txfc+LLHwYdVaO4mvrZUmea5jDQ6hCcq7SRPkorszLg/NvC+wXm9B1TTtU0+XxRpmtSaabq7ne/uZLZRFBIqswigBwkYYZwEwSQcdCa4Px98UvFn9gW+gjUo7iy1ND+9jkYx3USSDy28kn90Sy5Kn2OBUwwksRViqcdIvW5lCUea71R6Ronxnu/B+pQXcOiT+HBpUcMttGrB2uZFUOCGbIHy+UQoPIDqOuK+gvhj+29rfijw1rvw/tfEes3R1W1cJcaheMJNPiIKyt5pIxuV12gFscnIIxXwTo+oeZqyab461Ca3trizCWTDcwST7kbgBgqlc87uwIPJBqXVJtI8KzXehi0uJrjyC1re/6l2SUBldlRjk4+XbnADN35r1/qEY603aT7PQtVGpaH6A+KvjZJ4f0K3hg1a/NtdWQ0a8ewtli3xBkBXbnf8AM7KfkOMMcjGTXy78WtY1LQvD+oeFLGx+13mrXTvrDXUHn3tucjYsjAfKQEdvfcvXbmuNvPi9rPia60qb4oQPM9vbbLfUY4RbvPEI1SKGXygAY12rkqA2B6mubk8d+M9K8Q6l4g0rWFt5tUvJPOurQMIjn7xRSfuhTkDqucdSa5MPlLpS55O7T0vsFapzoZ8ItB0nWviNpq+IbTzLW1WS+lUJlQsalhlR15xgdzjr0Pon7QXjm7v0ufDNvocF1psrLLJe3G17iKcAhcY5g4/g4zyMYrU8Jx6Db3UPiD4c6PpqjRbHbcazdXmyJ5zHucyo4xjp8p7gEZPFeSeN9bWTVr+PT9UWWyufLj88bQpwCXUGPhl3OwyefXpWkb4zFKtZ2itn3Mk5RSfc5KSykt7qCzhAe5mHy4HAPbB71cv2t2tbeFpvLnjj2MjrmMg5zn0Pse9a1n4Ra88LzeNNPuUEemzRw/Z5ZsNNI4JPl4GMIAC2SOo7msafTr3ULqCGzXz5blWkCRjlyOox3xz0r141IylvtuGxkbWt2P2eYiM5QkDg8c5H41NpsbzWjwzZUICynn7oHHt2/Wrl1ayfZY42ngVtpf5WyU7fOOxJPH0qvY6kbPzI/JhmBjMZ3LkZPcAY6Vvzcy0GkTWt9Nc7Pt0ly6R8NJC2ZMBeMZ9OOvaqhtLhYY5rhSqzEqre69cjqOT1NFnJ5Ikt7jPmS5yxfGQcckfhVzVJLayuJPInW5jkjTE0akDJ5wAwBG3pTvZ6CTbdiG1sJ0aO3hUs8vzLvOFkHNVWb7Y4gVmESDIXPQ+360rXE8JFxHNtYDKhWwVbPOP5023wrG6aYmVgWX2brn69aaT3ZdjX0m+kjU6T5c0lo7MzQRTMp3bThu4OO/HIrWPgu8msTJ9siuZrZBNcQ7/mjY5+QZ+ZsDGcA4zUHw9j0RvFUd/rvnPb2EMl0GUYAmGCjP6qp5I5zjvXd2V9pfjDxBfa9Zyf2RYT2/2cgKrb977pgyglkBOQNoyRxjBrjrzlTl7guXm92O55M2s3nkxwRylEtUMSKmF+Uk5yRyc5PXNJDC8inb5ZAG/KtyB6Y9ar30MKzSeQH2iU7AepGe9M3FR5kOVlHBPt7iu1K6uh6FsaBfTQrcL5W52wqBvmPGelUvvMIyCv+NXlupJI4WhjdZIMlm7n0AHtUd3Ait9rhVyrKHO4fdPQ49s0Rk9pBclguLe20qYYdrmZhGGyNoXv75/xp9i0SThrvzFj2ncIz94Yxg/571VfbNarCoVed7bm9u1S+Y7+WsiuyR/Kw3YBzggfSk4iZG0azTBbdW2c7VI7Dpn3qxNFHHIGhkCiWMNgH5SM9z26VJDNCpika1YeXnfjqCORye3rRcQqhRoiVORsD/N37gdhmpv0BkckuoT+XbNvxFnaycgjOTnHYdea1pvE2taHapp9q1t5bRyxygQqd6ybc5OM/wAIIPUZOOprPjvL2zkfCBfOUq3chcYJHsfT0qrbssl9/ZqbfJmkCCR1yQCR/L27UmlPdaAtUetfDzwrpUU+m3WqWttqq6nbC6mtr8bbe03kiJ8q26Q4VztUcDbkgk41bqbw7os2tXF5oNxaT6XfQtp1vdRsBapI3+kq8IOGBUbhyfvKRT9J0fQY49J0TR/EENxp5sJrqOORV88TiTDQO425wzEjOcK2ORXIXfiKzOsanoreGQ0s63kc1rHIz/Y7rDbXiYk/JzlkAxxx0FeTf6zVbjey+XUSv1H/ABR8faB4u+y6P4dTGn2hVmaW2WHz51TY0i9WRCoGFLc9SAa87vlikedtOh8m3Rtwid97KPQtxmi8t44pNjM0cqfeVh1pJoYoyswbak6llGd3zdxXrUoRpxUY7FJljTdUh+1WTXirKtowISRm2gA5KjByAcngY6mvVPFV9qHxEhtbzUNYRdIubwwafp9syoYpgo2s4UYPyjYMjOcc9a8l1DSZNL+yTTPuW5j3/KPutxld3QkAg/iK9B+HPhHUfFGn3l4LkRw2eJ/Jxh5JF+7tJBX35HY/WufFxpxiq19h2v8ACei6P4A1v4k6fHrV9dCO1jgEkPh2J23qBkO+5sGCLIBVQWBPQ5NcP8QPDtnfJp6aH4Z03SnsrNjcR2k7tNcbW2sZg5PzkjK4wcBgR0ru9J+I19qXia/0W70c21pAUjigupcxu4QMomVTmSMbWPfDFSegri/G3jy+m1VvEHhu6srqC8EtvqC3FoELHC7X8o52YUbQ6sSSpLV5mFliHW5em67FqXMnF9Bvwzj1DTL46h4YR57BL6OIXVzJHDAwaMlhMhJbamHywyMLzjcKp6Rqky3Mlnfa1etbwXLSR6fHcMllIMlv3brnbyASGA/OovDvir+2dW0zSNU05Y7lY0sbCSBVhcozEgsx+V+WBycAgHnNXvE02n6TLps9laW41+CadLya2ufN/tBGYsryIxYLIn3BggEKuRnmu+VNubvuxWRo61qHhbwzpsjeHdEa0vbqNpovPkM7g8HcTnaygYAIBGU6enM2/jXUI7Rr59QnjnvLnBKMVAIwcD+EjBGVxjnpXQaj8RE8XeF5/Dq+ENP+1MokllWFYbh7hVCibePmIAOSpbBPJ9K5DSfAWp6tpF9qVxDNYiyileCaSEiCaSLBkj8zOFfBB6fkBmnRpx5X7Te/XUqb5tYns1n8fNU0fw/pyyazJFLZTF4IJIULEMGO3fGVdYipbLj+IKAOtaN98b/FmhXmlaf4yvtJ1OO68q+EcN0JdkZQkI55WPI+ZiO4IINeB2Oj+IrfQH1i5s5IrEzCGKfcoV3kLKyqM5YEghsA4yM4yM7cHh3U7xX1PTrGWeLQIUn1e0tdu9EVtr7Bk9gW6YHJOB1z+q06b0fXv1MrH2jo+tTX0MS6tcxHUJ8yCNLdYgY+w+U7WbAOSowcZ4OQNIfKTuxkev8ASvi7wr4y1e18UeHLzw3G7WGiX0tnpUd0EwRJKZFim5CsSD8xOOg54FfZ1jLLc2UM80PlSyRhpUB+42PmXPsc1+y8EZtXxmGeExL5pQ2fl29UfF55go0Kiq09FLp5kiqPvA4AwSxo2vn5ucVIPlVdwPHf3pW+bDY6/rX3R4egzywz7lxwCOO1Iq9d3RqkC/NnoKNvTauM+1BW5Eq7eeM544pwXbnG4kHqtPVTJyuRTu/B7Y49aGJaEW0rnbyT36Yo2NnGM55NSL/tc54/Gl25zk4GMD1pFWuR7dqn5cdzzQo2/Mqgg9eafgA4+Y+po27uNp/HvQAxRuyuFP8AEKNrbvuccde9SKm4YGMA5oMYb5d2M+lAyJV4OCc+3f6U5Y8KO/pUiou4bSSfUHpSxr1XICj8hSY0W9F0PUvEGqWmiaTZyXV7fTLBBEnV3boPYdyewBPavVfFOpaX8L/Bq6D4Z1BZrq+WTZeRcNO3zRXF+vGdmN9vbf7Jnl6spqTwnoNn4E8PXF/rjS22o6hYC61ORDtm0zSJDtSCM/wXd63yL3SIs3HNeVeJNdu/E+tT6tqEcURmZRHDEMRW8SALFDGOyIqqqj0X618vUk86xfs1/BpvX+8/8v66o9mNstoc7/iS28l/X9bnI+MI4l8L3qzW8kiLECVhXLKNw5xnt/Svobwoy+Ov2N5HutAgvdV8Pw+Yblbdop4dMkvElvI4JEdpCwjiIcrtDFQMHFeHalai8028teglt5EJPupr6W/YXuF1z4F6n4fkt50iW6ufNdmwU3oiKAQc8gMe3NePxlh+XkrJ/wBJ/wDBPQyCsrShbr/X5HzDb6bp+l+JPFFjoElwuixa1eLbw3kDpcI7TNMFYyfOdkU8SYOQNvBq7tGM856VV1bxpovjn4qeMLqHT7TT9XsdSayvLeOdHkdol8uSY4wSWaNMt1PAPI5udF7/AC8173DKccAk31Z5ucv/AGp+gwKM8Ljtz2px3Y28kDn5acR142kHPPf/AOvS46bRn6/SvoDyVKxGPmz93c3QU7G1t3cDv3p6/MwPqKNu0cDjoeaB3sRgeo5FO+8w+nNPIAb5WOetBXbwuen50DbI9qnsP/rUh3feyP8A69S7flO3IHX8aay8ljgZ6/8A1qGF7kS7eDxgc9Ov+FKFbtgZ4OT0o27VG4nP17mpG3EnoMn8aSOZakSrhh7dhScbduTgtjOe9S7V3dMGhcj/AJZ53UMewwr833sbetDL16DinnqenPP1o2/dGfmPemNasi8v5TjJH+e1O8tenI96djd8zcHp+FOwoXvz/eFAokbqpG5s4HFKVXPl7sn730p3+syMDH06H0oCqu3oPb8KW473Y3DFgwAI6fQ0bWz34pWX5SPlx9aVN33m4amF9bMbjcFDEDuoHekKlQPU56Gn4G7sMnHFJ8rY2gYH59aYm7jdn8K4BH5AUbWPzEe4qTb0yADRt6DNIZGqttCgYI5/WlCx5J2j/E0/HzAqB/hQ2Q3HT1HrT3C40/3cc7evp3ozjOF5zxT9m4Z6k/hRgHHcnv6UCbGFdy9OcdO4FHcnjjipG+fAJI4pGGB8vDdB3/OgbZG2/wCbap9/SlI28YOG9Key8npntn/PFKoZe3XrTICOOSVgI42c7sDAz09qYysNyvHtw2OexFMmW+beLTWLi23RSwssQUKdyFRzjOAcHAIzyDwah0m11CzsYbfUrr7TPGG3SBi275iR1Gc4P5cdq89VsU8Q6bp2h0lf9DvlQwv1RVlU/eXs426dGn18ydtqsNzKqkjv3p/l/L9R+VLtG3yyDtYFWHY1G1qsC+bbSIgPVGzsPrkfw5GeR+tdcpSgtTkioy2CYrDG0kkzRKqks44I9wTxnJ4r5H8bTajefEI+HdD8N2iyXF7ugvJUH2pp0/eYadxgMNuCD8uC2cjmvqWe8ntbSSKS8kkulKpAlzJ0ByRyOoGTyOvHQ5I4fUNLtdchtNL17Sbe8SW6kmuZri3jJGCzBipB3EhtuPfmvxrxAzjCutTp1dKkU9N7X/PY+yyLD+xjKUXeLe+34HGeDvgzqOs61cXmm+Ira2s7IxJqU15Gs4gzlm8nYdqru+VuBlfmzjr6rNoreF7LTtDtVk8tJDHbrbsqNckkMpYL9wO67sg/cYc5BxU0/TZbC6k+y2NyLGW2ZYreFgqzBowscTYGFO4YBxkYHDbc1jeONa1Pw/Yap4r1m1kkjhVxZwzT/JPJLHsCRIvzqAS5LsQSAAMHmvxnF162Jmotq3RH0t5bI5H4reIo4/F2j2+n28XiR723eZW3sUmmViD5Xl9lOQWJJAViPWud1DxppXh/4a6LqvhjUNNZ76881/8ASfMuYpWDF5FXBcIki8qM5wBgbqp6xri2fw+8I6p4iuBFqlm90lnazI/+pbzo1gAHPlxqVwOckkHjNUPhj8NrXxp4dSTxppuoXkr3EF5b/Y3FtLBbBMb2J4KSEBSqrv4BBHBr28JQp06KU37sX9+rOJy3bJ77VtYsfEn25ZLW8bUbIAT65A6qHkjVomByjOjIIySFJOdoDVveOPD3im8ks11u6N69rb7bOxVctLPFCqyzPIowFAilYRjBHyKAp4rR8eafc6xqXh60GoNBY2esfaFjliVI47e3VTAyYBY9NnzknOzjmuv+JPxNX4fCax1DT5fts928x+yvtMSMAsTNLnncFcjBGcfWsamMqc1P2cby1LjNJNRG2VvDpfheys9QsYr+705YDepbSrbmK381wikH5ppFWJgTzt3KC3ArzvwyPih4o8SJq8mnafYabqLXrSYhhiS0hCsU5AxmHy12t93cV55zWJruq+K9J0vUJ9W1AWKas73c8slxucROgEEZwCejN8gPQfNjvv8Aw+8OrHbaZM3iXVrKwgs5dWtZ2vN9vebWDCJgVx5YPmkk9dmO+a1dOdOnOvVs2+u/3E+055ajvDPgHwXq7Pp+qeHL6G+uNUluVe3lM0zosQYqWxjb1lbptHQnv7BcaRY6fpWua39rLbkjsZL6RY1mmkKCTy4nLD5ckMy9iucck1yXg+PR9A0GHVr/AFCYaNp6O73BvkeAPcxsCEYAbiN/zHLHkDb3ryv44fFnUvEF5a6TpJiXRomMLR2rkpcTK8ilguMZIwSQATk5rjrYfE4+apRbUerK5lNehu+K/ilqUsVpr/g+J7TRNJ32CzymP7RNPja3k53FlAIV8DB+bHArofDWqabp3hGTVo9USJkli1OZr2aMZlEbSRQRoSS7u5IwoO1YxypyK8E0fwd4w8VXsul3f9qxW7Q/2mmk24ZiUbOHiTITcSevQEnqeK+htW8E+HpfFGi3mueH2vriBrdbiG3tlW2tPIyJEaVmVWZQMu3IKjChs8deLwmHpKNPdvtvp6mcJxhJXVzw+60+Xxb4E17xbcWt9/aVzepZ2yyACO7ClAkKRkFnlw3ylTwA2TytbvxglmXwN4e0PWtWl1TX9LYwardzSNJOsm0MtuoKgRpGrgMAclwxPQY7r4peJdP8HzT6zpNiz3Wi6k80MUCn7CpJIUNI3+rdB5eBFz1AI2k1ytlfXwOo6X8TtQ1a7u7+3fVre00+eEbIZIQ0gbzSFXB29GJBQ8f3uzDV5V4wna0Vql1C9tEczpvwz8WWN7a2b6TcwyatYRtYzfPctZbwyxNI6gKhKmQ7R0XORjNdP4Z+AfiTQ4/LutehsrJnX7XD9heSWbZGwKR4BO5ssVA6K6twcV3Go+INS8KeGbzVZND1i18W3sLQTSLcR/6BZyKohuLht7BS0QwMqOAcdc1a8ZeKYdc0Xwv4Rtv7b1GW2tmXUJ9FZoPNxHvRldwpfJZGLcEgHjHFctXM8VOyppJXtffbr/ka8yWx5lr3gHxFNJBb+Gbe31DWLqNoLK10VlWCBlZkQXBkUgyN8w2cE4HzcYr0Hxp8S/Evwy8D6HJqGgwXOt6pZvHffbJC8lv5fKMWjJQkkn5AxVcgdayvDPxSl8Latb6f4T8Mxqtxbsy3F9eiFrqHYVlMSEERDzMtxuyMkYYjHnHiz4j65rFncaefC9uLD7RLNqV00O6T94xcEZ5RQASMcYweMAVThUxVSMakE4rXzf8AXYyU5JbmENa8P/EHxLqN58QbmbTXvoojb3FuGmdCrDcDuYffBYknO3PyivXJPHXha8s7K1tdPjli1QrYFIoY4bjy4YcFtwXhWkcIobJwhHKivD/E154TlX7R4YsbjToVtYPOgkk37HVSHbJGTuIVuoxkimpfR2elst9oV9Zyy4ltL3ey4OAu4g/eGCSNoBBPevQq4dVopK6XbsOPNFpxOy8NeIfCPh2DxBNodtZ6fbGURWTX8X2nVN/lusiRMpUKuScFlxk9RVL4h+PPFGpabbS3WoG2hvrO3EkcOP37wlgvm4ADMDznHHGO9bninVPBei+DtJ0OTTJNPul8m5N0NKEZnBXfuWYnfuwyn5h83megrmfGWm6Vr+lXHiTVPFkNpeWWn2n2HSvs7uzFmIMBYAKmxOc+4BxxWVCMZ1FUqRe+718jWSdOVkzjl8Q6pfyj7XeHJR8Kp2hd5O8DHQnJJA61sePvEreJ5NFX7NJBcWFgtnNKi7UuGi4jbaP4guAT39KxLHwxcSXlvHeMbYTZRHlTjcV3LjJ5BHerutW9npOrTaHbal5yWcimC+MDIXVlGcqT8uDxnvivTlCmqi5d0JTdml1MSZFWYrNMZC4/eeWc4bHGOx6/hX0AsOk614B8L6CF1PRZvEwMcb2rCHzZFVEbhcGZd3zqrcYLYyRXz5eSC5kab7VvYvgEjBP+JNW4dT1e3hRH1CVdmxYnLkvGByAhzlcc9PU+tTisL9YjH3rWdwi4x+JXR7n8TvE3h+HTrXwf4K23ax2kFt8kAdbghtpnVQdquTvB4JxIeRivDNZt76zu2s9QtpbeaFjviaIxmJs4xtPIrb+FsNxe+J7mDR9Pe+1KRcWSNc/Zo1dj80kkuQUAUZ6jnNSfEvVvEU2tT2PiDWrXUbiLAV4ZRMiggNw2T8wOQfXr3rLC0vq0/YrXrfqKclKeisjkVt9Q1q9W3/fXdzJ8qx/eYgdvpXq/xc1fV7+6s9J1rRNMsNRs7WC4kjjjIu490Y+QSkDchG07edpBIJ5NeWWl3cWtxFc2crJLC6TRzLw6MpzkHpwcH8K0bi41bxDfNqOsald3k23AuB87NtX5FOSAF5AJ7A9O1dVSm5VIy0srj5o8thkl9qDqNPmYFIzvSIr9wtgkqe2cLn1re0PTbHT/ALHJd2S6v9pt/MNqZXjjDMSpUkYKsOCGzg4Arlbfz5Ltllz5q8Pz0xjp9K19D1weH9fbVodNtL8bifLuFJC+vfGTz1zSrRcotRIcbvyO/wDFHxNtbHwhbeEtHUXEv9nfZtRjkgjSJH3EoAgXG4bmyefvHnOTXE/29pM3hOz0t9LPmxX1xdysAPKO5UCRqMZQDD5wcEt04q9qC2/9n/2jruhzLfa2gks5objaI413KysGByG4wfRcA1ynktb29zCthOI/NAabeSsZz0IAxz61jQoQjG3W9/maqTceUtWt5qlrY3y2+oS2lhcfM1uvKSknK4HPQjr7e9WvCuoaXpGsSahqs92n2W3b7K1tjcJ/lIfqOCNw4IPNUYbVmzH9qW4j2bjx/qznjr2+lN0mxF9q0VpFbyXEs0nywqNzSHBwqjqTkdK3cYuLMoSs7lvXmsZNauvstjLY2t6vnRwSS+Y0IxkAtgZ+b+lZNrs8wPOBkrmP3PrntXU+KNPhSx03Vv7V+1b2ks5424lglGGCFM5UFW6nrtNYN0g+zrdQ2zFsMrEsNuB2UfnzTpSvFWNJqzKZln+aa4bYoIGBzz+PXNJNuuCu8Ft4LLxgZ74pY7wN+5nt1Mi7Nh7FRkcjp3qbGoarNuhgjEVvwAONv9TW2zJatsVJI0kU7WOUzt460RRbwFBVCc8vwP8A61K4CMxWQn7wyp4I9qcsaGIReZ5kjcFSOnfv61bYXJNIupLG787c+zYwZYz94lSMHHUc4Psa6TQprrVLWe+jFlamJXBkuZliiD7GfgEYPC4AOTkjHWuXEMJZlhXBIz97AQg8gZ61JeLIkcluqtEq/vDk8M2Oo9e3FZ1I8/qVZEo8y9juJpJQjIqyCNl5Yegqv5OT5nm+YigKcds9qdHceY0l95gV3Y5CrtAz6DsKkkvxNA0MkQMk5X5g20cdMAcVWqYrFf7RtjR4VkWTcV39semP1zVyS88tYre+mZRIufMZTwp45A61TkWCOJGjy7r8p/8AiqsQNeMTJJN8pQqNy78Ej9KJLqPcZEjMrhWDlfmJxjP1/Kp9Nt5L7Urazt4TM9zKkMcadWLEAAZ+veo7WynN19kjIM7qdq568Z/xqa6C210rQIYirBkZXzt7gAjuDTTV7Mh6aGxZzXUniD/hE7rTbWRPtn2PzCm2RP3m0nIOCfrms3X7eTSdbuLGSIGTT7gp6E7T3rU8OSTSeKbK6umzK2oQyyE9y0inOa0/ihp62/xL1612dbtsDtygNelLCx9iqkepFOs3NwZyVtfNNeGSXcjKWbPXr0HPT/61UJIXaYrCredET5nb5q2fGWjvpdzbSQYCXcAkAHfk1i2F2sErebbiZX+9nqe1cE6TpysdFramvD9qaxku7WUo2n+X5hjcqQCSN3XqSf4fTkUzTdUuLPxNbawty1tILhWZocrnnBHUcHoeehNWNFuY7y0v9PvLt7d5IQIXWPIdlOQr455HAPY4zxWPt3SrHNN0ONzfwjPJIrBK/NFomx6N8btG0+08QvqFiwhk1ArPJawkSRoSoJKOvBBORx3BNcJcfZ57WOaOMoInEYjY8nI5I/EfqKu61JJNp1nJJIyz2sKRp8xw0PIDAHrWWtvdNbRvtZhyqfnzUYeHJTUZO9hys3dKxI+qXi26Wu1ZLSOXzY43Xd5bEjPPXBwMjoa7z4W6tqllq1z4quNUuY9J066hN5bwx7kmR8xkbdwGQjHAwR1FefKtxZKVm3xFm2qrDB9DjPatS3aHT72wuVaGW1uJMTQ5PGBg5XIzgNkH1zVVqcakHDoxXaOz8G+KNIj1u8tfEl1JY6Zc3YuHuxCzSGGPd/o5KfOqsSB8vtnpWJ408TJr15fyCwt7BLq6e6gjijKqkbKAyj0yVDH3J6ZIrFv9L1DTZGkvYZYFuVZrfzMjzSpwcfmKsX3iHUNQ0trfWLVbl5nObiZB5kbkABlI5XheR0PJPNYwoRjNVI69Bqz1IGXVtX8hry6XCWvlQu/CxpGCQvHT/wCvWdHc3OTIWIcnq3X61PBIbSNpFheRnTy1IBKn/wDVSpG183mKvlA/MM9OOCa64tLToK50P/CSa5D4bFu+qRxW63BvIQsY84zsAj5bG85UDAJ2jnjJrcsNN8T/ANk5k1x4tE1yxa4WaS6aCykkRQ80UhIwJPlEfu+0AkV50rSMrScO8eWPpt6EfyrSsNbuLTT59Ojlle3mVi0EjExdiOPUEZB9aylTsrxGktmdf4M8aabpUaSJ4fs7u+dmWG2uI2khk3bSN6sfnb5eMYIx34rpPhvfyeFPEGn6v4lmiuNEudUEV6EhAvliYGNm+fCbWIClXJGOowa890/XWhurizum3C/gRXkjjRntyuWVo/Q9iMjrnkgV7PqGpeE9c8P6LPb3SR32oXtlqGqK8m25hdVP2hlDDy/LMhRhg5Vh9wgsTx4nlhpy/EbUlF7mDJ4Lax+KV1oeoLpAk0W/upNT08XqJEsUZLlYpk+ViVwAFzlumRzX13prW82m2slm2+1eBGifj5kIG08cdMdK+SfGPivUPHfxj87SdRtG1Ay29npszvHHHPAz7o1lcYTcPMw2RjK4wBgV9iR2slrEtnM0bNBmGUpt2+Ynytjbx94HkcccV+j+Hda06lOVr2TXf/hj5LiSm7RktrsYq7c7flHXFH8+tSnj5uoz1pV5UZXB7+9fqh8nYiXcP4R68UD5mH86k27mA707yzt3Lk46U7lJkQU5LYIo24+8BlvWpVXPuKVl2qc4OO9ICLZzlsnB9KOOCvJ71Iy+jY79akjtZpI5biOFjFbKHmkC/LGCwVcntljgep6VMpRgrydkNJt2RBhU+ZuGPHXigno3A7Vp2On2Mun6hqF5eLH9kEaw2yn97cSOTjGeFRdpLNz1UAZbjMhkSaNiTsePiRP7jYzg/n171jHEU5zdNbr/ACv+Rq6c1HmewrK33Vxn0pAm3kMcHpUmxdvfmkby0kCuwQlchS2OB1ODWzajq2Z2vsIsZLbQOvp1xXonwy8Jp5Z8dapo76nbWl2lnpOmBSx1bVG5ih4/5ZJ9+Q9MADuatfs5eHPC3xA+IGn2OtQx6npU9rPOqpJ+6mKrwCVPIzk4z2r6p+NOkw6P8MbpvDsC6YLK7guR9iHkbSZAjN8mOSG59a+N4i4g+qzWBpLWVru/R9vXv06a7fQ5Rlntl9YqPRdPM+RPin4gmuL5/C0epLqEltdPea5qUbZGo6qw2yMv/TKIfuYx0AViPvVwar8hG38+1dne+F7O6ZpIQ0EjH5gv3R/wH/Cse78K6lb5aJVmHqrc/ka7sozDA06EaMZWfW+mv5enkc2Pw2JnVdRq68jD2rIm04+bjmu2/Zd+P3gn4C/DHxleeNjeMsWoQQ21haRhrm4YhwXQMQhH3u/8Brj5rWa1O24jeIjtIpXP51z3wt8NjXvFni3w7a+IJ0keyl8UWEENmLiOC8tg8G5+CUBEpJOR90HBxXBxg4ywcZRd9fv6/odWQR/fSUtNjDh0o618YvFnjbTZpU8O6vqUusaVHNaJHO6TNISGblgu+RzgdTjJ4xXatkYJaq1j4dm0HUL9bprQyBzCPskvmRFQ7NvVsANuLdh0A5q7tPQ9uw7V7uS0FQwcLdUn+B5uZVnWxM2+jsMKruycjJ4o8v8Ai69uvan9TyKAv4cDr9a9U4UNC7eOc9xSBOmeak2eq856eo9aFxnrg59aAGBf4etLt+bPOQKf84yMjHY0Fdh6cA0DuRsrfe696TazfKV+7yfepSvOF6+3agptB7bv1pMa0K6r/s/L1oUE9E4NPC7eRtAHAH0pVDbd3Bzz9KNznG7Pm2tnnr3yfSgglRzj2qTb9SBzSejNgkc/40XGyPb1VsZJ7ml57DoOG9KkwG9M/wAqay7g2Op6U9w2Glfm9O3Sl3enJ7+1PI6HknvSbVQHqM8fnSHrcb69AAOPemqrdVBGR/nmnOvH3RjgU8javzKCT196YrkbLuX7uQeaHXt1IzT1Xn5uPrRtb5vm4x2FADCjN8zcY447ClwNx9Rjnpmn9c5/D3pCGXBxx1wB2pghm0c/w8fnSMo2/MOGqQjp6D+tHy9QOR+GKBDcMeRj05o2lVGMgg//AK6fg7hhgMUm1uucD0zQFxMNkrt4/nSeX3XGevNSbdx3fh9KTZzj+lCG0IozJtLD+tDKrA7V4H5UuGZtqkZHT0p2AQd4Iz09qAIdpZflzkZJp235T1/z61Js/wBnbjihY+PvHIGfTNNk7EZK5Geg5HpQI9o5OPrUgVd3yjGeaMdO5PQ0h2G7U4x0HrSYj+b3HT0FPaS3gjM11cJDFGpZ3dgAoHfJ4Fc/4k1+bR/DupaibERz2tm0ojnkwskmCUjG3LHdt6jkfjmvn8+4gw2SYepOo/fUbpd3sl82d2DwNTFzjyrS+pzvxB163g1CPw/YyCN54ykc2391abm2F5CQQpP7w7T224A4rFMtjpa3s+kx3i6LpMYuGlEPE0caE8nhlJdc4A5yMVYm1XTdSfRZJoXuZ7q6ea6jceZFFdbQzJvwBI6MApJA7cY62rtdQjtZLG3mumvHZnuXU/u4trEMvHyhdoCgg8c4xX8t4/HVsdiHiMS7yk9f68unkfoFOEaMVTp6JEFlDql9rl/NqV8+n2rWrm4gWTYschC7Iwc/J5ahnOOpdQCOAMbWdYOoa1omkaXLPfyyQzXVvCPvlpIgyXG1h5eyP5ZG3chAuPvV08lnNY+Hb26ttR3ldm43EHEUxjEm1W6btzADOAcZOOK4IxwyXltcaHocU1/q/wDyFdSupgjMzuq7CCpaL92CCqAFgBkgYrkpcuIquS0UfzBO2kjWmsfCun6Hpmm31rb6ne3PnXtujy4giiZj56mVh8m5QzFx/eB6tisbRdV1tvDSx61Z26tLff2XDFHsWMoI/OV1GMiOKFT+YpniJdJ1SbQ7KdrzRrXVZJ/sscSbFsoTIVNwyn5i7KvyJ935OmBis3RNL8F+KL0+AdFujPLp8lxqUacubbGNg2AAS4JOZGY56cbuO2lFU4uUpN7u/wDWhD952ijstNhtNA0+31QXclxq5tWisNPjmXywGjws7lvmCAsOG5GwcZ4HnR0/xF4j0vxJc+Kre7XTYL5p4VilYrPeW48uTazgFwBjAzx/DySa9I8Saz4fjmvdSvp572x8JxJaf2hLaw20M1/Ey+csKnBZRJ8qqC2SDkAcVwLfFK31L4iReJtU+1xWVvpt9eW9oZFheFl3YXZwojwFKK24sxY/dNLA06s5yl+PbrZFyhKndHF/GDx1oMetaWbXR47u9FkguV1KEqIA4DxqUOf728EkkZIPSuYv4/GnjLUNN07TTC/2sLpPlWdsFtoWkmKgLt4O8szFx1Ge1Z9roureObjU/Fd9o2bBoy6COcqy7SqgxlyS+OVwSec+le9/DGbR9JhsLPTvCcpEGmz3Uc8czB4H2bgzSMSgUy+UMKejEcAmvbq1I4GilTjzSW+pm+WO5buPAen+H/ClnpmrJYXuqeHmmt7eaXTyzfvJHc7IUO1yrF23twAASQBzwfxCs/BPhnw3pGoeF9JvdQvL3WJZrjxDdQyC3uEbdtMSnMaAsJCcZysY+7ggy/ELxd4uvPDNhpsd5qU95qMt3b+RpMIkjZ7hkYQbxh8GInOBhuB0BrqfE8WjeEdK0Xw/rXiK2i1LQ9FXSYrKS1DzWxmQ5URqxXzAxc5yMb3znPPLSrVKcYzqaybei6jjGS17l/WdcvNP0TSdH2i91vW3kW4jv1uFmtYBlkYzDYQqLiPg4xubABxV/RZ9H8P+KNUXVPG1vrNg86wwaTBE91M91JLGzyuxyJFAj272UgKD3NcJ4U8YW/jbQ20izuNQ1DxDr7vbuixefPDbI6oxIU4gjZRueQguFQY4IAofE/S/tHj7R9I8NzxadNcael3FdSFYLYRw7y4PQqCEQjt0wDWCw7lL2c9L3b/r8NDTljdRe/cwviJdR+OPEi6fcXNw2rT6lKr29zK7wQLuUIqkA7mYtIScAYA9arfE74hatZ/EKyubOO1lh0RvLt0vIVuIyuCkoG4YZXyx/EYPGa0vjN4mvvC/j7RvG/hWBtNmurKHUbaVEPDuNzgsRh2DEgkDkba4rwr4L8WfFptY1C3mRYtMjFzd3EzhQ25gfL3MQA5AJUMcfIa9TDRiqccRVsopfc3oEqXI+Xex7R4a0PT764v/ABlrevJd6JLaOJo9ssJ1uZ2AjWRM4YKZERQBj5W4IOa6WK6hn8QWljNJd297aWsclja6cjSx2jxk5SHd99yhI3lVCsT3xt1/AvheGHRYdF3XEq2lrDJ9jmMazTW6xqI3jROHYEgAk5zuYEZ58t+K3xlbRdUl03wUkdw1rdOq6pkk/wCr8soE42EHeC2TkAY6mvDjKWNxEoUVqvu8jC2y6GVY6D4o8O69q194Y0PS21ZoktYLGS8854t8uZwEYs7FMIMtgKT1OK4HxZceIPEUOm/bfPhCxN9na4Ta8kTtwd//AC0GensPSt74d3xvLPXPFmpWc92bCN/OvoQ2+OSWQE+ayncEJGB65Irj9Z026jvreCTUpmmkRbiGe4kDR7Dk/JyRuDAjg9ucGvdw8Wq3LP4lbU15WjrfDWj3+r6ismi+Hbe4h0HZf6rc3UTqUmEZCwZVsOhKoVBAJZiDgGvR9H8D6z4g1vT/AB74o1zSNR0yBJ5kEyMlnAix74gSuVU5LKVyS2z/AGc14/o/jzxZ4f8ADt54f8+WTSPElx5l2brd+9nUFdwKkEjOCV6MVGeBWjqPx08W3wlt1uBa2kdxHcwWokd44ZI1KttUYTa4PIK4+UAe6xGHxNXmVO3ZPrbr87jbu1c9I1PRbO38VWWt6ppNhBNqWkf6JHcWLXFlJMYsIYYpNhzkqdxHyhujY48Q1S41Pxj4sW3juUubzVL/AHARfLEJHbLbAQNi885HHJPFemXzeOviV8Lb3UtXs4V1DTHOpJdSQmMfYFi3Msbn5c8q3qSwwetcj4E8dR+CW0268KTRP4m1G423N1e2/FvuJQKjAklCMbuATvI7CjBQqUqcr6zWnkbOnTlJe9pYd8atNi0TxKNBs9bOrQ2UNvHHdKhRWZV+YQ8/MikFQe+OOMVxq2uqLJLd6hJKiJGvmGWJjkNyozjuMkfQ16d8YW0zS/EGkSapa2Mt2+nxNqi2Vz5iQzK5DKjL8qnAGR/eB4Feba1rDXnm2+h3U4sbtlZrSQ7mG3gc/p7114Ocp0o6fMxUeXQZHfW1ncC401Ruih2rnpI5yCcH68UukyWKavbTa1azz2KNm4jhZVYj0BPC9evarN94dvNLsXjvswT/AGOC6jDxfejf+HIH3trBhk8AHPOKI/Dd5/ZlvqjSWvk3A2wRpchpXYtt3FAPlGcdcHGMV0ylG240r69j0nwjceEbfxhrVrbteaBZ6no7rGbhodrpI6soaTBwg2spIDHGBjtXkeuyR32s39xaqGt3md0YgKSO2AOOgqxPbTpeRabNE0dzCWheHps5B65wRk59Oad4i0G+8P6pNpuprGkoCv8AupVdULLlQSuQDg8jPFRQpxpTvfVr8hXu+Yp2n2eSP7LHHiVn4z+X4VdsZv7PvksYLp4hM6wzbV4UHj6kf4mrzeG7zw9ZpfayI4JpZQi2zAmVAYxIjHttIYdz0xisWaZrrUppnYguwBbPoK1uqnw7BLU0NdSbw7qlxY3VuY75GD57xKRlQf72VIOaxT5iOJd3BycE9SeasazrGo6nqTXmoySXE4VLfL4yY0UIi8egAFQ+XIy7ZI24bac9quEeWK5ty29DcbxLHa+D5fDLadEI570Xa3Ah/egYA2q5PABzgAdznOavaLr2m6fZajC1q/nNaukRExQtIwATd1DdN3TkrjjNctfSqbQKvzAuB/OtXwul/qTXGjaTapPc3tuYTvI+4CHIG443fLwe2OKynSjytlRmxLjW5tQsIfPtbaIRL5M0iL+8mGQwLt3OeOMcCvRfgismj+OLXxsbVbeC0VY43j3MvzMEaQEgncA3RDuBK9M15Q9pcRtKs1tIk0cnlOqrnMgONvHfivWPAFz/AGfZ6Haf29eabYymZbqS7O2KO5lbyyI1UMQy7UIyNxKnBXiubHr9y4x66Gblyu5xHxH+x3HifWL631aZ0k1BwILmBoLleT96PkDHTrnpmsRlnu7MSIzeYpOB0yACMbfXpXpXxh0Gxt9PbxU18l7q0+qMk8z3bSySwGFBGGUj5Su0EtnnefQVyWgzaGtsZ9e029jZhlLizkTDAqcKQ3PJwCR0BNXhq0ZUIyjrbQqpq79zl4YSWV41Hv6fX2qzbzT2si+YDned3vnowH54p8iWsN5c7Vmhh5WKGR8uPQMR39TUXlytCAtvIZAQ2fVc9PzrrvfchkVxaPb3z27cKOecHCnnt1olhjjkJ3KV4BZSMj2Iq3eM0483aITbMVVG64PPJqBLW8md2hsnuHmXd+6jLYQcliB0AHXNUn3HYhForyyNJdhC33D0zitm4jW40GNZmhS4iw+7djcuOmO5rKtoEmm8hZFc7gwbd8pHoKfcWywyOkkhKldsP+yR2qZK8hkN5GbeHy3z8+GHH3vXmljtfMj87aVUNhFznJ61LczrMym6tUEgQKxViQ3YEfQelNhnuI/lsNwUYJXGeVPBzV3dguLDHbvD5l2/lhyVTbzk++PerNtbRrYzNF8rpJn5pNny9CMHqfTFQ3as/l3DLGvnTeYu3sRwePTNWLoyXFms82JZVk8uQkYynUYx9f1qJO4XKu63muiq+adjZEmPm/H/ABp32fbJ9nXLbSRlOQTntnmqsTxrco0LOwPBU8ZFbMlteafeWFxNbMRNsmj3NhZEBHR+2entWispJMGzTtrFtF8RJZyyNIba5hZmOefut36de9dZ8YoBH8XNUY8LJNE/X+9Etd9rnwu8L+N9Ql8XaL4sfS7vU2W5ktLu3zCkhUZVXGMAH1rkPjVY3DfEqTUreLzrV47X99H80ZIUBsEcV9POnGNBRj0scUIzjV95WOF+IUlzI2mSSRj7OlogjK9TkZO70Oa48Rxld0Mh3gAYxxj1zXpnjKzhm8O6FcfMweJo39BgJjH5mvPLf7BDdKk7SNnO9lONo5/M14uMi4VGejGP7uMv63JdLkEd5BNNG8qxON8acM6nqM+tWfEUmi3GuSzaDDNDZsqFI7hgzqwA3cjjGelVdMuDDdma3JiD8gKM8duvSm3sqzTG48ny2c8lRwTXBvO5F7OxfhtYZFmRrgnzI9q7gcIxP8sCnXG0xrb2Mi7LdSQ2cBmHVvx4qK0kWWzZfMVZI/mDk/wgZweOh6VVhkmfekaBI2Ljy1HQEcgetQo6jshbye6vAs00m/yx91h93PXinabEq3UFwxhke3fzVjcZV8c4x357UttGpBtdv3sY+blh7elQxxzQahHGx5V9u4dwOv1rTS1hXudhrmkf8JRp48QLqdvJfKGa8t2mEcsTZwAEOAV68DJ9aw7OOSbalxFJJA5DeawztI4H4VHLDIs0vytuclc5znPUg+uafZyahp/Mc0kTxt8ozjB78VlSpvlsmNctrDbrTNY0+4S3CvkEsu0Z3A8Aj25HFT7o5JII5IhHcQ53/KSGUdeP51PZ+Jr6zkD/ADGQ5Xr1z15/z0revoY7e8nj1KSOL7Tbxzq0v8IPICt2BOauVOS3K91nDbX1C4kj8tnZuEVF5x2Ax7U+NfscvzRsDH822TqRXUaJpFvOVu2kkDRL5YNtg4IJwSD1FZGpWcSatMsNwrxsuW3Lg7xxj2PGcU+ZrfYTjpe5SWO3muvN3eTlCwVVz83J49s4Faja1qV5f6dY6s4tIILdLVXaPOyIkZlwPvNjv3wKzLpFt7gKd/mHaYyem3H69Ks30/25obyGRmKIIQshzsA6DHYcnFDjzNDs0bOoW+h6b4ulk8Nw3f8AYpl3WbTZMgXoSHwN3zA49Dj0r7j+GWvHxF4Ts55rmylnhUW8htZCQSqqclWGVJyevoa+GLQ+dpcFxHcPOLB8tGfupuILY9jgflX19+z1pdpN4Nj1mxZojNckrl9zbNi7kfPP3uhGOikd8/UcGVq1PMVCnqmnzX62/U8PPYU54e8+j0PUwp5BAAJp/ldCfSrCQ5+79elbXh/wX4k8UTC28P6JeajIO1vCXA+pHA/Gv1+pVhSjzzdl3Z8VClKo+WCuzndg5XaVGPyo2j7oznOBivVPFHwA8Z+CfAt/468USWVha6cImktzJ5sxEkioD8oKrguM89M15q0a8e3TFc+FzDDY3m+rzUrb2Nq+DrYZJ1Y2uVtn8PP49qRYyzE8EGrJj3dCeO/rS+S3G5c89q6+YwsVirDg9varq6rNHo82gDy1hnvI71+zl442RR7gCRuPXmoSvZsAnNSRWpkjlmXBFvGXkP8AdXIBJPYZK8muTG8vsry6NP8AFHVhE5VOVdU/yZk3On3ejXWn/aJzKtzI0kDsuCIZY2ZU752ldue+2pfJt474tGpE9xAHk44O13UEHoflI+nFXdFtr7xJrlzodr9ommtI0ngLL5qbBGz+XGByv3WA/wBon1r0nwn+zz8UPF15BD/YkelWaQmZ7jUcxOBIyhMJjeR+7c4xx+NeJ9foYN/vqiXLJfdqv6sexLC1KyTpwfvRf36M+Z/iv4u1jT/L8KaCuo2V7qCgR30Nq8mcsPkiKgjdjJJONuO2c1u6b8J9W0XRbC10uS9j8RajAuoXWsW8hu9Quo5gGiiAlTMaqmMpGeXLEFlIFdN8bvA7fDz436f4FuJrvUzHpTy+dZxqn71oWYttc4+VXbjPIUcdq+5P2cY9PbwnJs0IWd9aeRbSzSRgyOqwIqjzABuAC9sDJPAr5LN89p4mu5azjrZbLye35o9rB5fLD0oxSUXpfqzyD9l/9nH4j/CjXrTxx418VbtOt7aeX7G0HmzyGVWTDvkFWztcKqtktjdX0R8Wov7U+G2t2iqyyy2nmxxvwzFGV8foK6y5h8ya2dlLLHISRnjO04JHfB/nXH/Em0TVLC+sby4YW8dl8kCqGDyTF4gzAjI2krg9iSa+SdaVSopyPWUV0Pka8tr6zkVZLJufmIY7SV/vDsw69KRpY+ykE9iKlVpmitJvMBto1a3UZ5V2AkAx2GFfp3zTG2tj5Rjn8K92E+a55048pVks4plInhSRfRlyPWue0HwX4T8N+KYtcj8M288TrL50HmvECX2hmBX7pwpAGMDe3FdK0bbT5bMvQ/Kf8apyyXkcqL+5lU/eYko2cjoOmPbirm3OPLLYiPuvmRi+KNPtpdTu9S0uz+y2UspeG3aQyGFMHClz97HHOBmueCrxjJHeuw1CTztNmdo2RihO1sZX/GuT24zkE193w1iKlbDyjUd+WyXpY+azenGnVUoq19yPbx83Q+venYzz2pdvVjwe4p2zbyDg96+kZ5FyNRtwB29qQL2K5BHNS9W7DPUd6dtKqFXpSuN6ke1mxtXjHNNaPpnv3rvfBPhnRdS0177UIJLiUTGMRmUqigKDk45JOT37V0QbwfpMbXEdto1sqcNJJ5ZwfdpCea/MeIPFTK+H8ZPASpznUho7JJX9W/0P0jI/DTMc5wtPGe0jCE1dXu3b0S/U8mjtppv+PeFpcdo1JP6Vfh8J+Ibpf3GiXZB6loSvP1OK7LVfjN8OdHTbqHxA0e3C/wACXqnH/AU/wrktS/ab+E8DNHp+tXGrzgnEdpbscn/eYAYPrXxtbxmxtb/c8A/WUm/yivzPr8N4Q4aH+9Ytv0il+bZgBOpYEjbml27cfKefalVc7cKCRzmn7T/Ewz2PtX7/AHsfgjYzH4Z7etIy7nHfjP1/pT2UYHzDI6e1P2/LwvA5oTEiFh8oYjr04ob/AGee2fSpGUBd3J7fSgKuAWB/Lp/hTBjF3Dgnd36UnKhhUhXd1y3pSdjls55pjGKW3BeMnt9aU/Kpz0HNSKMYbOSTnGKAoHX88VNwI9uWDY4H8+tIwGcc4AzUq8sF+92pNvPTOP0NUDsMKt/eIGeQO/tQQx+Vm4Pp2p+1mb5v8M0u0gEqeR+lAIj2/Lz/ABckU/qcZAPSl27m3Y6c0hj7rg47mgQm3GR1IpNm5R/eP5U/b6/KPr+VCbj6gjrn1oAYyng/U0u3d6nHf371IB/smj5Q3y9On0oAZtbjj8qQ9evHc09o+u3FO5HofUCmAwrjC/1pmCQFJBHXPSpdnyg7eD1pWTk5HH86QnqY3jC9udF8Jya5p8gFxHq1haKrpuRo5mcOCOo6Ag57V2d5p3hm10XR7iTUpUvNTF1HlvueZAsO4NnhVy7nd6fhXEfE51t/hbeTtcRxY17Si3GSVDTZwPclcfjVO+1KHVdPtb66aSfT7GW8liSEhvNafy12hc5YfIvA67iK/LeJeIK2VYjETjWcVFwsv+3dVb1PuMry+hXwdKVSmndS1+emo7xPrmkxxraXN1a/2TfSTwxzSTKkkkSoCJRkFRuJwAc9QehriLjX9Rvr7VGtoVZreWSJZppjiMrgSyFVUFm2lDkddpA4zjY1rRdFmsZNQ8RGHUUgje4s2jjXhUI/cRKBgEsCADnBAz0rF0C4t9Tmv4rCaBrHSxOskiqri6uZGXCvuwcrvOe20D1Nfi2Y55ic8ryxeMk27W8kvI9anhqWFj7OlGy3IYVjt9ci021Zp47a1jt4FaPyv3oYt5jHooLZz1OSATgVoX2oQ6bHqF9qNvG6Ws6R2kMAdkjhjmBIYA/vSWwCqn5t2M4wK5y91XTf+Esn8L3gvXvNasjBcXKhyHy6CPynAKoFAcYHGTJk8iuot4UiaX+z7zOhWcASFWhCHzlbIyzZDAdRj+6SOleZXilFczLd78qJPDfiDxJMLTWtQ0WNbG5+0XEiFkS6nL5LTTI42KoVlVUI4bHTArgNV1RvDGm+JIfFWqxaVConn0WfH2hxuH77bEAdzOw8tJGOI97HkAV0fjS6XU9A1K58MyQX017G9tbSHeuJAyxgqqncCeBlvTPGa8c8QeKdNube70XXNJZrbSoFt1vYJ1bzrtGOVdnLfu2VWXagYB8mvRy3Dc75radv66iqPmR23hDxJH488N2Pju+tXtLHQ4E0m3uJYwUXUXjCmSGAcylPmwT3lwMtnPZaBN4M8K217LO2l6cpvhpFxeQW/kOznDpFJtyUwhBON33PUkDz2Qatpui+DbPxlJp+jzfan1i5tbmBY43upJFkiVIx91cLHu2gFjgHPC1s/G64h8QXnhTwnrupWMdnHeTyzR2EIiMmZvLEamPLSzMAwLNglieiiqxdKNSoqMNIO+3ZGlNcsXO+qOb134mR6xrWp3Wh3en3ljYXCaRpljcqsvmO7KjzhQu1s7zIrMxxt9eaoaH4dknm8Y+IvF2g3t/Z6Tby2kNskxa3SRpWEvC9diRkMTlRxn0OJ4s01JbHVdc8J+FbvRLzSr9Y42hk3xRxRxKshBXglyPlxn5QeeK6C3ij8JfA6G1vbTzJntXv9U0y5v2R40nkBUiNcH5lmiwrZA8xmwcmu+nGlSpRVFa6LzMpylPVs56Hw3J4q8E22qeJvEt9a280Lz6Tp1jbo0aW4mZEyMKZGaZlACDgFvw9V8I6XhzZ6jb6kmm2dpFNeXF5M0sLjylVVCDADBcxhOVOGYjjNeU+A9S1HxJ4W8QrpluPDtrbvZx/21CrsXn3kQ2vcEkNI5AxwgOOK7DxB4hVb8aLFbyeIYtP8uZVtLxUt5FjVUdsEBiTnHr8x7YAxxcKtSTop/8AAWny/EfKnbm0Roab8UtJ8GW8WpaXqkUF/NI0t75VmCyxhmWJTcEN5Cqp5Krn5DjJ5rntU+HWrfErWbHUrbR9UtP7TgF1HIu+dVMhQxbXJ8yaRt7OVABG5V7Ejd8N29/4ikvvDeoLZBIJ7dbcyRp5KwiNUGViyqgvkMB83B6bjXc+OPGzaXq1rokXi77DPPby3/2i6G7CQqVESsDwzELgcAbmJJ4FYTqRoVY08Orzel/IUZt+7PZEui+DND+DfgXUP+Ef023u/Ftlpv2S+1CQqbeS4bEmwFnzyBH93GxmAzzXkniz4ZPd+KNA8Ta98S/DyardMlxdWbSGeOxhSMbo2I+QyKAoKD+OUDtmkh+L+o/E64vPA/8AZotNDsLNGsLGyLbz5W0ySOFZfOkZV2hO5YE5IzXIQ/DfxRHLdvZyW2k31pLFG1l9pSebzSS8iADhdoUFl3E5Ug5JFdmHwtSnUnUqS95/lbb/AIYbnd3SsWfiuLK78ZJt8VT67Y3tvEsYugXnt8rtVWAwOibfk+UE+2aT4J+HvDvirVvEHhvUtMuXuYbSOOOK3uxFGNvmK88u44IRinOP4verllqusaL4PksdQ0/SLqzn1WS3a7aN3/tKz3hHktwmUaFTD8z5HzfKvfHb/CM+B/BfhfUrzQ9O1DU9U1Dy59UhkCGO3VpJI7aFVznDqd5DNnIX0rTF1pYXCSp9dlYqMPae62dXdeHY/h/4ATR7TVrxv7ZuzcXE09ws16sAVUSOJ9v7qN9ikkgkYCgZ5r59+Jy+F9PsbDRrPS9Qgv7GOZobu4m2NdRPIZEaSEjIJDnk89M4r1jxdrU2j3yahqGpHUL17pbyz01YiXt7xss8kzttyEG35AMcLnHb5k8TrM2rX8DyJcy28zK0kUglRstjduUkHJPUHHPFY5Ph5TftZS879/UiUY8/uPQ7f4c6tpsPhDWvDh8E399f6jcQSy6hZzPtjs84ZJEBCgh1BjPdmYHtUFvbeHpNSNl4x0DWpTp9vLLbxK3lyGBfu+agGUwSSfqB710vwfh8LQ22n3Wo2uvX0tln+2YTIbeys4i+1HeRMOytn7g4JzkNxXovjW1t9HfS9N8OeHBeS6hvm1C6htTJNcwspV1jDEyEHLAsCTzj1rXE4qNKu4xTu+t7bf8AAKjdyu9kc5pd34Y8L6VGlzaajpem6kFutHLbvtdxbudkWwMpVcAkl8ry5wCAM81da74G8O3A0mPwppsUMEssk15PPOBKGC7IAApfeihlLD++2cda9B8ea54g8K2ugXWvatpIubSfTzHHGsQltUVSgZohH/yzBYYJ4bkbqihPhy38ZeLteu9PtryQ6fDHpsd63mJPJllefG0qqMAqs4J4yM5JFc9PEOEXVkm79nvqkQlGUvIh+J95rVv8MYNV03WtKstNv40nSzs0a3nnt2Uwovlj5PL2k/ID8oz1Ar5n2KJRM7bGAwpX+Gva/wBoXxRb63eaRDY2trZwTaTZy29su52iidAU+YkkNgnPPTAAFeNFI5ImkZjvDEDjgnp/OvXymHs6PM1bmdyrcjsQSXExdoJJGaEjb8v8WDnJ9T9am0+RlVZfJEjLJuUNnDBedv49KntdHmS6tjcqzW8hLbo2BOF6n256Z61Y1rUtMvrorotk2n2ZZlRJCXfYDlWZs8sepwABnAr0XJPRDkdToPiu+0i1h1bXLKa8sbi7W3kC3To7wqmWgBBz5ZUAEEjIJwcjIoaPq+nWt5aTQ+F7UKt40klv9olX7TA5H7gkHGwD5Qw+b1zWTNpt5Fp8OpXTWs0QkjhEkMyttZlLBSAc9OvHXjrVzwpp+qXGpNHplqLqWzj+0rGqZwqyL8xGPp1rlqRiouQoqT0O3l8OSXniKbxG0eqC4nhuIrc6XcLL5EqLtXzHyT5arjIHJVHPbJyNN0uXTvBctvDPb3E+uyb/AN2qytHCpI+YMNyyEgt8p4GM9a1/iRHrN42m6hJNb6Yi2v7ySFDF5s0gfaQA58z5BhpABgNjmssavocfw903QdDt3bxDZX73EkyIdzxtFhizjgoDgBT2Bz1zXHCcpU422b+4hRly6syfE2n6jN5niDVbuWSK98xrOeaLP2gxsqbQyfKD3I9j7VzUcK2tnNd3TEjcAq7sMx7EfSt660rxHJClk1qZprJhDJb2y5Ee1iM4TIYnnLfXrisW+tJ/LuI5i5aGby3HZW9CPXrXoUnpytl8rSTtoU7hpg5uGUyqSMsTnLEZqWPzVhW8ZZH8yT5st9etRW7xqqR72kkYkbSPlVSMfnT/ALPPsMMsyoY+FXdnJz0rfyALkyXNugJJkVvk+X7wPTgdDVm1SaONv3MUjFgIgvIz7+nPc+lRRrDb4ZpmWRmKEdApHKnPr1/Ko52mVmllmLHaDuX0z39aT10KUkjQ0O4j0u8hXVFmutNa4SS+t1ZlWQK2cHHUg/j1xXtt54uXUtD1a80D7HqLR2tzJJeXEMbyuwUjeFZeAiuOW3HcueprwG5+1GSNoWJti2/IPys2OTj1HSuo8L+L7rwvDe2x0+11iw1G3kt7i1ut3lxM/IkUrhgwIB4POB6Vx4vDuqlJbroJRi5Xkbfi74n+KvHdnJH4qhW881opHaO2SJo3VSo6DPIJ+XoOK8+uIZFi2pMNrOWXc2AOnQV0vhpLrUsWdsp2SzNDJO7H5o2/wJyD1qh438M6j4P1yTQNYhaO4jQPwDh1OcEZHPQjIyOOtVQ9nSl7KOnkHNOfxa2M+88wafDcX1k/nMdkUinaGA5/HqPc1FbzXT24i3B4xJvK7uvauy1G+03xR4F0mGOR21eyumguPOmVd6sqiIpHuyduGBYAcEZ6VxkseoaPJFJNCE+0Jvj3AEFMkZwDx0789K2pz501Ja3HJaWJYY4bi4MMczE8ht/3h7elWb5m0q3Fnpt5NG8sflziNyN+7+HjqCM8dKrWbC1vHaTaY5EEin+907/nTLiZvO85lVnUCTayjoRwRiq6kRWpFNbtD5SKv7xVy3ltwB6Y9RVmNJnsZNiLII35zyUXHJpJrVmhW+hU52lpNvpkDOe9QTNdRFJFmkjDDy/lPb3+tVfmG9S1eXd1Po4sZoYo4rabzVYja2CANo9j1+tZ9jM9vcC4GCp4cex61orcapdWi29xulhgOVDAMQDhcHuBzwKrFraO2ki2nz1bCsWyCvQ5HrRHTQaZNPaiKONnk3+Zk+fG+4E9Rx1Uj0NTzT/6GjEkkHymBUc5HUev/wBesx5HklEauUjC5OehrQlS8m0uONY3MMLeZuXkA/z6UpKwNpEX2PzZEW1UOAGx/e45wfX0rRvNdvr/AEfSNNnULHpAkiDrkHa7Zwe3H5+uar2t0tps+1IEjj3iOaFcl2x156+lXprWOBYI7eQNblPNuHMgkXHqR1B6VEnquboJXeqPYvD/AIL8RSafazWF9NHJLEJNjspjIIyNrKQcdB1OM05U8cWsj2OveHwrMSkcfnofMIwDs3Yycc9aj+Hvi3TrXw9pejx3Bnvt81xK0TmMlXOCSTwWAHI7gDFd/rU2rW+jyaoLOXW9OuVEMkHytc265wrIRw3Xkdsda9anOcIpxkepHMqzSjUtJLukzxPxxNdfZ7bSb7S7iySKRwFkhKj5sdCOD93tXmq6aGEwa4jGSdu5hnOfTrX0L8QL6w8S+DUvNJumJifE0ZOWDKD8jemDzj2r55WeNHn8y3QwElWUKC4989uaxxM5S1bOatXVW3LFRS6IW3t47MRs0mCd3B9c/pUUTXU7zxbm2qS7gnjr1NLGzSW6/Z1Mggyzk/eP0+nNLaSSRlvLZSXGW+X17Vyo57k1i0UcjyFkaMLuILcfQ+meeKbbhpLjzYIyGOZE3cflViBZILNmjiiMjSNuDLxjscfjUFpHMkbXEYVzBjEbLwc9fpU36hoUpLi4inR52JaJiVBXvWjG32q8SZVkh3YcGToPU/iaf51nqEZ+0W4hn52Bfu5PY55qC0UqjM3meVvVcsflBPY/ShsRas2mk1CUySBmjc/Lx+OR3/8ArVaa6STKzAhs4JqC1t1trjzWYMW5WQDkE+/pU1xCqsZUbcDzx/hXRhdZWFKOhDLHDt8xTyuCa9Q+Imir5Wi3Qj/12lRBuP7rEV5ZNHtjkZcjIJr1n4vTXVv4e8C6ja3Dxi60yWOTb0baykZz/vfrXr0cOqkZJnHXcklynnbaUyyLJDI6Ed1JBHp0qBY2fUIrOaNmeTexYnJYj+dIniLUI2fz4Y7luDyNpZenbir3hu5h1jxxpVr5LIZLgxYbphlIIyPrXJUwi5bPcdKpNP3ti7428OPZf2ZcI21ru1wUI+UyLjP5hlx+NcvZ6fPJMI2kjjCtgtJxznGPzr2j4leGrjT/AATZXksplaGMSopH3UG1G/8ARik/7tee+Dfh94o+JOrJ4f8AA2h3erX7gTPDbR5MSDG+RnbCxoD1ZiBz1rjqQdN2PS+KKaM7w5dajpeoW89pGryRXAP2WSPcsmeACO4OcY71+gv7EPwO8SePm1nSYYZ9CsNNmC30d7A4e0mwuI/LbDbmBcjOAAD7V896L+xj8XFjlk1DXPB9i7bdiTax5siDIzkwo6g/jX6TfsXanafD/wAGjwr8QtS8Of8ACSztLNea4usCea+w+2OOR5VVztj27eSAB2PFVgsZUwVb29CVpIyr4VV6fJUV4nq/hP8AZl+G/hwpcajbT63cr/FeN+7/AAjXA/PNepWNhY6bbrZ6bZwWsCfdihjCIv0AGBTrW8tb2IXFndRTxHo8ThlP4jipq1xONxGNlzYibk/Nk0qFKguWnFI474waDqHib4Z+IND0nT0vry6tcQ2zkASsGVgvPrivkDRv2RP2hJ/EF1I2qaLp+kSyiSBdQn814lIyV2xqT16DcK+8KKeFx1fB60ZWY6tGnWXLUimvM+dfDf7IGmwwRv4s8WTXE/8Ay0TT4BDHn2LljXaf8M8/C3Q9FvWtfB76xdLC8ka3NyzSSOF+VVO5VGSPbrXq1FdVbPMxr6TrS+Tt+VjCngMLSd4019x8k/ELR9J8E+F5F8QeD7Tw6l7bBLJliiZ2mWWIvJPIP9WDnYq5PXJ64rznRx4fs777Vc6TbahayqY5bZpXRJUJUn5kOQcqCCK9r/bl03+0PhZLut1nX7HfoY2UEP8Aug4GDx1SvzW03XJ9JVrnRNc1DSPLiMzLDKwiU/vCRsYFD/D0HQCrpY7EUqXxtqV76suWGpVJKSik15H6Q+Cfi98MfDF5Pp6+EE8PW+pGNvMhTz9pRACu4DeckAjPvnk1694L8eaB4t1hZtH8R2N6k1jtMSzIZg6Sn7yDlTtdePf2r8pLX4oeNrXV/tWpa9Dq9pCiFbcxpakYMgzuAYE/u++OvYV3ul/HPwc88a6zcTaRcCYSbrqMFARwdskZIH44rkqeyrScpNpvvqaKNSEbJJo9X/bG0K71L9rLwno9v58n9saZBIIVcorFhcQbjjGcMsXBOOtfR37K8lpb6LrPh6z8uNdFeC1lt0jKrFLmUsF4CsuCuGXKnB5OK+ZNU0Ow+LWn6Z4r1BJteWziEem6gJGmdIN+7YjZJKbhnBGM16t8H/idZ/C9hZatotzNE1utvLMJybh8SuwkYSdcbyMAgDHSidByinB30D2qejVj6xvLiS3WJkhWTfMkbbn27QzY3dOcZ6Vn61b2t5KNOuI3Jv7WaEMDwNuD09ec/hXnOu/HnwBr/gzXR4Z8SGHWYbC5ksoZYHSX7VGhaMKCNrNvC4GTnjrmvnLQf22PiBpus6da+PvC9lffYbjdIwjexuirRsjZByhxu3fdHQDjrXN7OXY0Xcy9Wt5odU0+aObEcGoPbzK38auHReOmd4T861GjPHbPPsKseNfJj8ReJ7JZI/tEF5dzxozcnZKZlYA4zkL29aPs0krhFRmYn5VAyT+HevdpO/4HBUXvFHY24sRxnmqs0aM+5R0ySK1ry1ubN3tbqCSGZMBo5FKsuRkZB5HBzVKSP5yrAZIB6VoZ7GVqEP8AosnJztJxXInCAnrgV213DiF/mIyPSuOePa21exIr7DhWf8SHo/zPn87T9yXqQqrKpVc+9G3qTnH6VLtHH680YXOO3b3r688AYy7cE/nilCn+EHbSqrZLZJ9aeqjaeM9qTGjgvio2qXX9gaDpuqXtkuozTQyC3mZCSxjCsQD82PT69K4vSfg7ofim4Gm+HvDPj3XJ4/N8678thDJJGCzhSIyoPyngEkZGTzXofjqyuJdW8KyWrbJY9Q/dyMu9Iyrxt5jqCCUXGWwRwDyOtfYP7M/hdfFX7NuoaBusry/h1TWPsUrqy24uWeQRSFechSwIzkjA7jNfg/EGEozzzEymr6r/ANJR+1YLN8ThslwdOhOycXfb+ZnxxpP7KviK3jSSH9n3xNcuQGD3VvM6nPcYYAiuq8K/s0/GKO+T+z/hQ1haXP7krNZrGYghJLM2C+09BgZyBjPb9BfCfw003wTotvpfhe4udNWNFLQLcySwK3UhFdjtXJOAOMYGOKY+m+NNP8WQ6rHe6fHpUiMdRU27Sz3jhSsS+YBiGNBzgIcknnnNckadGHwxRw1Mfiauk6jfzPz62rznJx6Uvdv4j29qft6Hdk+/enbeQpwT0r+gz8fbGeX15IPqaUL7HHT608LnoxwfSgqdx+bpgUgWhEcbsDBz/k0pznpn+LFSKpXcG6Hmgqv3cdO1MRGqBVHbPPFG05+YD2qRt2PQkUiht3OCcUwEVcE85IpPLORtYjnrmn7fmHYUbR2U8UgGKuW6Eds0jL0J+b296k28noMdxS7cfMy1QyNh0bB4OT60Y785PIHSpNpZhnB/U0YXJwpBpMGM2lcKqgAHuaNvzBiSM0uOTlc9KcRt9M0WJvYjZWoVe56DnHpUjLhhyTmlX6gCmMix83uaey8Hoe1Kq59/0zTtpxj+VAXIlwuePlFGxeeMj3qTb83HTFDL1weP50AR7cr83J7+hpW2qpZ2+QdWNSrHliW7KT+X0rlPiPeTzeEr/S9E1KOO9uU8syI/MWV3JuxyNxA4HPSvnuIeIMNkmFnUlJe0t7sbq7votDtwWBqYupGNvdvqynq3i/wn4m02w0a3vIZ1k1y0uNzMGUeSJAVdCDwS+OenPWs7Vo5Lq2l1Rb5rrzljWOOUj5WEjHlx90MUUYGOoI4FecfC2TTxoct9cG5uVvdQmiQybmQTQEnmRlUsxGe2MpzjgHt9S0+zubWK+jlCadZSbFjlZseY0bPuO0fKud2O+Su30r+ZM7zPFZrjHWxcrv0t+CP0ahTjhaCo017qGeMvE5j8NC88MLb/ANqAiK0SQeXGJHC+Y43YVlyCFGeSCR1qrqXiDXdF1J4/DGipcSJ5d1Lc2SKU3qI0SEhsjLserN1yQQSMYfihTqnjzw1odrqXnReH7O11K6Xy94dyQPLHZSAMgkcbeeTXRarrGj3cM2iR2z3E1xdWrzWdlH5b3LRyb1gVs4QttJZuCFy2BXHCn7Brm9f8v8x/FqVfCix28UdlrFrHFqOrxu1rAYP9TIfMZiQxIZmDFnYkgY4yRmpVj1qPw/aWcGkSS/Z1Y+StxsQfaG8tHYvyuwKzngD5+2K6Xb4ivLpNY12K0OpX7yCHTrMborO3YliruRmQbYlY7eBkDJ5Fc3N4b0O40+5ur6+nt5Ukmvb5Lq/ZlwsJG0rGuVJLcR5wrMckgiuVy9rJzk+vy+RfLG3MjJ1bR5tT8M+IvD+nRm8uJIlt7aSBwkluZQWZWYsPmO0DJxuwSTniuKtfA2g+Ir1PCdn4auWfw8qWUmqf6lbHONsrf89Z9qyyAAY3Ho3GOgintyt5oPhi5h1F4YbG8t/Nx/pLu7hirEZmXe+Q+CCVNYHw30XXPG1z4h8Ua74kutP8L6M6W8k5Z4f7QvQ7NuVo9pUKhbLepxXtYecqEZTvZL/htjlW3mbc3h28utYh1rw3bRWOo61bXNjbz329/s9rDKoNx++UBCUVCuQHLzds1xfjjS49S+LGjahGloNNW4kvZHSGS2uEihk5Mi5AXzGIC7fmbk455Z8RfFFp4g8S614hsbhxZLYLZ2NuzeW8rY2tMqKp/ijzk88jJzzXl2l6h46vFk8VR+Ip57jUZxHtLCcPIMqA4bO1s9O3UjpXXRpSn+8k7aW+8Ekj3TXPiBpun6mdFm1ttLuILm2m08JbAW0tt8plmm8wbpmKlUWPaSChx6Ch8ZvFQ1rXPFGnatDLIGsZY9RuHVBMJ1ui1vbRAECNBjcVIZiG5JxXjN/4j8T2muPq02uLfajLH5jahJGrTrk8kMcmNgRjIORgYqvr0mpakljNLrBuvtcb3MmHJMTlyCrk9WO0MeTwwzzXRhsucYq0tP1PSwuD9v70NX+B1+o/F26m0ey8LafDFptlaXUd9us02tLMiqqtKB8rFVVQMAd85ya84sfFWueH/Ev/AAlVndKL2N3Mc0iByhcFdwB6EBsqexAI6UxpLfT42hk/fTJ1UcnHbjtU/hnxlDpesDUp9Jtrj7JBP5UM0IkDyNGyLnOMYLbs8429K9Snh4UYvkjuddfD0acf3kve7HsHwT03WNN1htYt2khdY/tbfbY5PJWaQKxVQgBeQRB33H5AGGOa7u78N+H/ABzqmsat4p8Ly2Oj6ZdQLFqkV8YFSEsCYyATln3KCwGBxzUnhjxRaeKPhnpfiiTR9VhS0hYahbRyBI90kKW6yAgbpI2EaBI24Htjnntcj8J+NZNQ17T7rUvKt4TZNp+GjijGxlVCCS3DALlto3SN6V8tXnLEYmU7cvL7t1v6bnl1OSl8JieGtYk1rxR4k8S+EIdB8PeHXu7a2ufl8mWWIAmNRGDkFm6spVvmxntWB8LZ9S8R/FGfw/Y3gk0q8jma+mu7NZ3jhUEuV3hliaRyBk5/hGeKk8C+FfDmseCby3ku9Ta+uryXULiJ7lLSyjt7cbUXzHz5km5jzngHOM4rsPBtx4V8P2LeF7XxlPsjtGn1F7KzjUC7nLgIiMoklTyiTuI6opyoAr0faRpOpy6yWm3lv5nM3rqctqmhz6bp+pRzeK4YxodpFpuk2lxcRpMEM7OYRCjZcMJmO44ySckYr2jwjB4k0lhb3GkqJNWt44bi3to1Yw+WrHO7cCCiyMzyOWJLhF758D+IuqL4f1YWenQvfQXNympNcTTD7S8kW9WXK8xx5IODgnaO2K9M0zVvGWpeGoPiFp+pafrF1q9rJbz30tztkju8bpE2yjAIKKzHgfIoBwSa58ZCdajGUuumv9aFU5W95s4P4y+I11j4gQaf4d1sS3Fss8SG1tULvJKXRkyhOQAqgBsEBicVp22hnwb8PbPS/GegwWumQ3AbVoYQr3d/IsiuI5D8rQ/fiX72Plx1ORh/CDwKuj+Mj4k1i8WO20K2+2pcriRDM4EccW3q7h3BO08bOozuHexWNr4N+E+l+Ita0G/1G/1GS4nhmuJC8rCaRmVgmOW3QBhJjAI561u5RoRhh6Tulb5kybjFeZPoPiy78dbNH0u6lt9M061itryaBktCHiDiEq6geUkYUMR8xYjOea2Pid4tuZLzTLfwrqVjJ4ibS3Ro1i/fiAldjeYnETEY+6xUYfJBrhvhz4m0XWPGyaJoeh3OnoGylteNG5nj2t5sshZDvc5B7qAn3Tmua8F/ErS9F+KGv6t4sZHiuTcl7rb8zfKxSBQqriNmCcKF47DtyTwUp1ZcsfhV0u7fc3p0p8vM9FLQ1pvA3iLw7b6lo+t6PZ3uu6zNAlmzs010wkAYx7I2MeWKgjOfvMTz06cXOl65LqPiz4j6fOmp6lDAkfkgQjT7WSJkEEaZGVjEeSTycEcYrz/xt4107Xo7LxXZfaZNQkhW51K4aYpM8+0o7QgkhEJOAOTtBBxzmrp48YeModV8c3V9FY2ssMlqZ47MuiMIyVAC/wCrUY2eZ/Dv967Pq9SrTXO7Pr07aIznNJ2jsY3j7w54d0yFrvR/EtlqOJU+y7SVmkgYt/rFxjeu0FsHjcPWuTs7W8u4ptQjs5TaWvMsiRlljB4yx6YyRyfUV6WvjDwDa+E5vCPiLwGt94iS1jhF7HHGI4HjbgjyyGYMv3iTknOevEXgnV/O8G63plz4y0nQZLXTbm2s7e5gC/a5HUyMhIVvmITYrEfedVBXOa9CjVqxhy8uqdteq76Cujg9YWz0+3gj024eZ54lneUkfIzFv3ZHQEcce9ZZ8tbd5JVaMjGF9fU1aE6iBrTyonVk2BtvIPr7/jVeZSiww3MZ3N97PQKTgCu6Puqw7tmla6WtzYyQ6fbXF1KIzPNtjP7iJMksT34wfx9a0/h/4j1zRbi8TT7y7i/ta3bTkaGYRh3ODGGbP3RIEJB49awbpZbZVjXfj+NVJAKg/wAWO1U4WaGFhCwiE3IXOehzj2+tRKmqsHGWtwWp3HjrVrzXtmgzaTbWOpaA5sQlrIrwzRA8ruBP3duQQzA7m9axNE1640mBbS2tbV3mYrvmj3SrlWUgZ45B644rNsfOlcQwRzm5mHAjJJbPsOenpXU+H7K30HxNaat4shuLO20krdrCLVnlmyNyMFDIShJB3hhjip5I048hUm6j1OWi1bVLJJNIhvJbZEc5WNivPGensBVi6S2gW0S21AzLLHmeNoivktuIxnPz+uffFGoQyaxdXOpRwmJ7i5kmaPy9seGYkFecqOenP1qrJE1i0a7syKMnGCV/CtNHbuEtFZlma2it7WGSaZGeOXy9sanJU5IJP9Kpfu1d9kClZH4Vu3rTy37uK3SYhC4YNu4yeDmpJLfzJktTKC23J2cbaa8yUrk08NtcXwSO1dIWVDgnPB/i9+9RajIsTeR5LDbk7s/eUdKZJY/YZpI5JGaOPncOpXrgdqdK0k223jjZoCPNjXqYxg9+w55+goS1HaxFaNa+QfPm2ohz5Zz90/3fx9KsRwD95Pazt5Em5lJXowH3T6Y4/OqdxHIVjXaGH3sLzwatLcLbw7JEcW/3tu7gnHNNoVjZsruG08NyTSTSpdRo/kDaHjcPhWB7A4JO7nkYA5yM+7vNVvrHTIdWv5rmztl+y2UtxMz/AGeIMWMKZyVXLFsDjJNRrqVrLCbZrEC2D7lG48DHT8eDW1HrUmraVpnhFbS0t4bOVpWJz5lwzdHbrjaDjjjpnkVz2dN81hK6MmSOa1s08mZJBvaJGAyDkZ4OPvAYz6VDfXNxc2kMMkwIikIzJ94Mw5wT274960NW0+4tb3+zpoZ47YkPDC27crMMbumQMiob3Q74TT2szx5sFWSWVjkcjhd3TPp+FVCcXqwRSnl8y1ThQUxuIXhfYev4Uy8tZo4re48s7ZovvhsjjOR9aRfms5ZWG1I5ABjkoe3T8qsLbquz7RqQjgkTzNu0sPM2g4x654J9u9a7DS6EMq3EdnEvmCWFVLKy/wAI7g+w/rTrWP7XapCvy/MWZyemP8KmuNJv7G4e11LTZ7d0PMbKyNt9RnGVPr0qGG3ex+0MvyIpPMh55HAIHWldSWgmraElprV9pcl1a2jIguIWgZ1bJKkjdjPXOB9MAirviSTw3eSWU2iSX3264t1e9FxsCLcZO7yyvVSMHnnOapWtrY7EmYsZBkRrGwZnY85wegpdRhjW+imS3SBwqq8LMSd4HLHPIzS93m8wuQTW/nXbMod4TGC2xclSOp/M84pJo1jtkeO7cyszJ5YzgIP4vQg9MdeKlvpoVuI1huJLdgrbschWY/yx2rSuPEN1rWk6VolxpempDp/mCO5tbcRzTsWz+9fq5A4A4AFNyeg9zF8iRoI5sYjjYK3ONrHgZ/Kr0TBnFrskZQV27V4U9z79+tTWMWnRfZZtSuCiLceZLtQynAJ27l4BOQBjPrmmaxcx311NqdrGI2knLmNFKoiYGAFzwPpS5ruwdDQ0nVpNG1OG8hjTEZyoPytj+6fY16JovxgbRRqMKfaZftu1oELqEicDBwRyMjGceleVTr/oa3EhLE4XheM9Rn07/lVY/MvmGPaVxg9gO1b06sor3RrVHReIvEN82oX1xHJLuuDguqbdwbnkfp+FYFpJeypLaw28O51wxf8AiH+e9ST3V1dWoO8OMbWTOWA+h5qkJUtcQywrKjYdSGII+tErtFPYkswtrJtjb95uw4YYC4PY/n1rSk0uOS43Q3AwF2rIvGfb/aJH8qzluIVZljjwG7vyV+lX47zzvJBudnkP5jIzD5x2IHrWM+bdBFcxA52zNFOZDHDlEfb93nqfxp8zf2bCCY8G4jKuDkjHYj3p+pTytJPdx2mI7ggSZypUjr+f9aJr9rmSKzjmMkax/PJs+4PT8Ome9LViWjK2lthZYZRug3E72XOAep98UsEdviSFZp2tgd6gLxJjOM+lXre2tGhlhjxJMAAieZyTkckVWlS++1F5LXmNTIyrwFBPBPb0o5rsRbt7qaDdcKyLE2I2jkX7wx1APeiXbG2FkDqQGVl6EVTZpLu4ZpI12RYY7eSqnjvXaeFfHGj6DoLaL4l8KW2rwmQ+U+QksB74PcEc4zxXXhJKE/eHGHP7t7HKN/qyoJIxXqvxOH234QfD3UB1HnQ/nEh/9lqktv8ABTXPle81DQZW+YiePK88jlc+tdZDD8N/FHgvTfh3ceO2VtKuWubW9ht8o4ZSoUhjxx1ANe9hq1NXvJamOJwtRJOOvoeE7dyknGQOfap/COpfZ/Guiznbtj1CH5s/w7h/9evTNY/Z38RXFm1x4V8Rabq8ZXKq263ds8j7wI6e9eYX3hHxR4N1i1HiDSZ7WWO4ilXBVwVVgSwKk5qMTNxatsZU6TSfNue8eNPFPhvxp4dsvDdjdMLu3mexuRtOB5iMind0PzbD9Qa9e/YhvdA/4VrqejWvkRax/aTXGrQjAklj2qIGbu0aYcDsrM3c18Z2utT6frNzJHIAzzh0yuM4fcD7dO9amk+IdZ0PUJ9d0HVp9MvY5JZYLi1mZHjLHO0MvUZ7HjivGxc/bxt1PRoyVOMV2P1DljDYC4xSfZdy42bh+ea+FfCv7YXxgit1tL7XLO+kRQpkvNNiaQv0zlNu7Hv61+hv7FdnL8aPhzP8QfGGtaRfXMNxNYLpsNqYxBJvHlyzosm7bt5G1lBUtnlc15saUr2Ol1omFYtqmkzCfS728snHIa2maM/+OkV2GjfGj4taFtjg8UXF6g/5Z30Sz5H+8Ru/Wvpnw74T+Fl493Douh6RczaXcmyvNsO/ybhVUsh355wynv1FdPb6DodqMWujWMI/6Z26L/IV0RpuPUzlUi+h8+6P+1H4oj2x674Nt5gOsls0kefwIYfrXWW/7THhRoRLqVtPYDjcXheQL7ny8nHvivYfs8AG0Qx4/wB0VS1TTdAe1muNX02xkghjMkjTQKwVVGSTkdgK1SM24voedaD8ffDXifXtC03QNR0i/tdXmlhlljvl8y12RSOC6dtxQKM92r1avin9k34J+AfitpvjH4leK/DiSRan4hnGkpDNJCLWIN5h2bCMf6xRz/c4r7B8N+H4/DOmppNvqmo3lvCAsRvrjz5EUdF8wjcw/wB4k+9VKPK7Ckktjy/9qrSTq3wxliGeXlhwOvz28qjHpzivxneTWooQsGomRRHws43H7v8AeXB71+4HxtsWv/ANzGFyEuIGP0LhT/6FX4seI9Kn0/8Ate1tyY5rNp404z9yTb/7Ka7Ie9QXk2RHSRjLeXsvnw6orxMse5iswwQzSAEE47k8V0GmrpN1CLi3vY5PNXfEsqkAgF274LZ2ivGpoNY1gtJdTTSuMDk9Bz/Xmvqb4HfAn4pfELwrpdv4f8D6reR+S8TTG1KQr8xAzI+EHDnHNEaaerKbaWh9Jfs73G34VaXBA21bSa4ttqjAXbK3H8q9RkEOoRhdQsYLoDoJow2Px6j8Ku/s+fsr+MPBng+TRvGd5ZaczX0tzFBbyfaGSN9p2kjCg5z0Jr3fRvhH4O0kK01m9/IP4rlsj8FGB+dautQjHXVnKoVOZnzVpvwysbnUvtHhm11GC4kZmeOHdcRMT/stkj8DxXU337NXijxcsI1aHS44SpR2ugS2D/sAN+Wa+m7WztbKIQ2drFBGP4Y0Cj8hU1crxDT902UO55ZH+z/4bvNUutS8QahcX8d2qbrRVWOJWESoxyPmOcE9RjNd3ofg/wAM+G41j0XRbW12/wAax5c/Vzlj+dbFFYyqTlo2VZI+Nf2kbqTT/ixqMjq6efHaiMhwpceSMEZPPIPHsa84TxQ32hI7i4jGVHyzJ5bE/XvXSf8ABR7SZLZbTW7V2jkK2c29eoKySRnB7cOtfEdh8SPGukSj7Pr00sQ4MVxiVX6dVb0/w9a7pY76vGCe1v8AgGtPLni4ucXrc+xm1W3mB81Hj3D/AHgT9a5y4ibzpJI8shYkMOhrxPSPj9FGF/tXQ5raTo0mnz/Ix/65ycfr3ru9D+MnhbU1VTq8KyNk7blDbuOMnJ5TpnuK9zKOIaWCqOSV76Hk5lkdatDllpY6vYzADb649qFQ8bu3TPapLfUdNvI1kZsI/RuqnH+2px+tWPs8cnzRyBl7dx+Yr7jC8R4LE6OXK/M+UrZPiaOqVymyk+x9AaXndt77ana1kRiFQsAM5XmmrHt6npXtQq06i5oO68jzJQlTlyyVjkfiF59ra6LqlrzNa6pGyp3kPyts/wCBbQOcdea+vv2L/E17qlp4103UNL/sxl1qa7itXm3yoXY+bvGSAQ5H3SRyK+RfigI28JKZt6iO+hctH94YR+Rn8O9fUP7N+va3Hb6roei2egW/iq41vz2kumaWA2UtnHIY1lULKzB42fYRxuyc9a/FeJU1n2IT6qL/APJUfquDtLIsHJf31/5Mz6vory3UPGXxS8HyXmteONJ0NtIhsXkUaXJPKFkiLMWZmjDLvTAAIIBTGTmt/wAKeJPFfizwzYeJoLXSo11K1S7jtVncPEsihkWRihwwU4I29c15jjYyPz+2qGO3vS7cj5uAOpxmnHK/LwMU8ArjGPp61/QB+Ut6kYXouc44HHWjJHLL1p4HG4g4HanbTy20HFAkRbTncTn1pT26c1JjnkYPajZ8w5PHemFyPG5eoPPT2o56bc5FSbSPTmjbwM7fQkdqBkYVeuD70bep4z9KfsJyOQDxmnY244HHvQG5HhTjsaNi4LcZ9as2trJdzJDECzvwAq5z+XNW7rQNQs4/3tnIO5UrzjjOKxlXpwkoylZstUpzjzRWiMr+L0IpeeematSWNwkas0LKrH5cr1+lJHZyyOIVRt7HA471p7SFr3J5JdisFx2696PLCn0zWrNoV1BC1xOrICwUeprMdAOVYqfU/wBaiFaNRXg7lSpyhpNWGqhpGXbhS3XFQpLLH5qyxkOo3Dvgd/1qJ7lSkqmQRrsyzFuAeec1DxMV1LWHk9UXGTPqT/L2pdpye2ePrTFkXyxOzgt5f4k8V0XirwrdeFNSg0y6uoriWSyt70NGCNgmjDhSD0Izg1f1impRhJ6vb5bk+xnyuSWiMHb8p75o27ThVxinttjUtsZm7Ip5b2Gaw9Q8WaXpNnHNc5826V2gi4ywU8jOeSenHrXgZ9xXl/DsY/W23KWySvf9DswOWVsc/wB3ZLzLmqXksdu0NvCjPwWLsy4znABBGK8g1Kb+1vGEVhLqD3X+qM1tbyKqAEhHUEYZAVUAOeeCF5INdv4q1zUPEkdxqK2Ihe/i8lo0ULGiqwJEa52rjcPlHURe5rmrSa8k1fUtQF1Z2EZktk8xUSVnw2GOc8JgSYyPl29emf5tz7OqvEWbVcbstor+VdD7vCYSGBoRo7tbvuy9b3TeEbCHQrCzjtra3uCkMFtCFiZVAZpQzZABbauSD97cc9a4Xwf46ufE99d6fqWrPpkqXAS3g35lnmiOXaXIw5XYQTggA8Dpno/EjQT6dZ6Bassjsoa4aR2McwVsbMgZbMYQ9OME84rmPDvijT7bxRcTXWh6cIopDbaKtmqjcjQyD7vLSMpSTIwOJVOcDNeXh6V6c3Na9zp5tNDRg/4R628Va5cWenNPf61PBZ3VxJdEfu5izbRHuJQjy1BbsuQAMnL9As/Dcun3Osx6Xd2E8+oJNJ9pZo7iRExGJIEIOFKg/N6Ams3RY723vJPFjQWUFvq1xaTWfnRl5vu7pN+07s7Q5yOdxI4AOei0xr/Xr6w1kaQGuJ7R7yAXkhGGLZWQ4HGI1J5xjcvPNXVqPS+3/AIhzQ94o/2xZ/brC/h0QJLrkaFpL2dYBFYxu37t2ZiYhsdDg8tlOOuNfXLzRW8H+Kri1Fw2qXlrealcXiyKiWpKbigVj0bJ+XvsPFYPiiPRb6xZ9fvobcC0kie83iRY4o5kKyeXkFmJ2rgc5PORXMeJNauvEnjKx8P29lG2m6lZTFJEI/4mDrbuxeQDALjzF5xgMW5yuKVOj7VJrb9FqXdOL1sQ+AW0mbwmuoadqiRyDTzpt5qqxmOSaVZDIIV3HACKVUFADtyfQV13j3xNcaFpo8FzX0+p3GuWrTwtaBY7F2SMtJCcfMyyN5hDFQMqAQe3JfCzwrpHir4dWE0Nu+l/8TS8sLZ4mVDK6bvKdiQWYqZEBKgFsYNaHiC4nsfF2qXWmaQE0uw02zawlkYRw20qSGJy84zhSDJ8xYbjIO7V2TtOvKnu107djGUNbXPm25k1y81C6stBsrpk1TZBDDscyQ7pgyoD0G4rgFuozjFdD4uvNa8J6bofhHSGtWlfQDHqcMKCbyrm4maR33gcSbTGNyk7du0E1H42+NHiDxPJDp/2W3srSKRZkis4hG00qhgJZHHJIBOFUhRkkDJrnfCNl/aWuKuoTXBkl+ZXVzhmLE4Y9c8E19TSpSnGPOkkjelFWJrXw/MLqKKZGKvGJJGZuwGTTNU1600mxSH7OZnO5YV81h5YJBYgdBmu51nTI9N068aGIAR26QqwJPLMAefpmvHdW86/1Zoo1LBPkGPau9Utj6KajgcFGcfimJ/bM3mGOxs4hEzfMsi+a0rHqSxGc/TFbttpmmyR2+sWlmJJnQA20jkIJgxBDH+70OOMjr3pln4VjhZLhb9raVOfvKQD+PWrq2qxq8N1rQktZFZWXCgN9CozkV2LBtr3tD5p1/eN3w7f+PtavL/wX/wk/wDZNvqd9DNexzRgLbEOv74MoAVVZYx8pxjbjivV/B/gl/CPgXxlpOsSaf4g/wCEieFrGNJm3zTx+bvSQIGds/JjgJvK5fGax/gl4N8M+KNPm0GHxFpV5cu0t0uitbuLxI4Y98ksExKkZQHKAupCHcnG4e3eKYPCPhnwouoWviBrdbjT7iGG70yLynnRWZVbyuCFC4JkZQdqSYHIr5jNpU8N+7ilq1/w/fobT0jzS3Z5j4wks/hx8JdQ0mTSdDsHW6Nqunwk3SSpKqNIpZ1OyQMV+cnI2YXBryXwD4N1OHx7ZN4k8MapqT3Nut3bQ2dwqPlot8JdycICpB5wQOTwDXrnjDwrrnjFtJuvCN/ZwWTwopa/jfzpAVIEoidcBdoyuccOzMB1HLTfFjTfB+lr4Z8J6NNf6jYvMdS1SHT4WhngMJjljQugcxFXcgsBsCpgclq5MFH9zKMdZT38jmlOTlY868fWgs9cVv7QkW6uoGkvLcs0klupO0KznO4so3cdAV55FL4F8Nap4ttprHT/ABhb6RbWd35y/bJnhgLshG4suSpZRsyAckjsCR0MHibXvFwTxrN4L02HSdLa2s2ms4o4DbSSfuUMYyHlPG4gZwSCeAK9Eum+GXwea/07TdUubvVI40lvLHasu9ySgJ3kRsy7mJAwQW7qDXTKvOhCNFxfM+2q+YeznyuSWiMnwj4Hm8LaHNdanZ6fqZuLJjZ6Slo9z8/nBGuVcjc4YEkPGSDsUkHGK0vE0mtWek3Rsb680/7JYfaDZqkkiW8aqSkUrMrBFAkZFXIGW5xmsHxR8QNe1D4o6FoOj+KtZ1R9P1OxbbaSRsgZAWIimHVYy4+X7hO8mtf496h/YumtpGkzNdyyfvtTkCOPnjc7kk52Oudp557AV58o1vrEPaO/PrbsZyjOouZ7I8t+E9xrmj6rceItJ1QWF0Lb7BBOy73jWYlf3aEHJJXZ0O0MW4xXLxRTaxqEuva95lwtzOzz7ZFDyueOCRj72M4GcZ9q7n4Q+LptKsfEdjZ+GFv9U1OLfZXAmWMWaJkyqAfmYHKYCkHjvWBdW99/wg1rqNvpVxa2dpMZY5pXX99eEhZpUAxhR+5HIJzxmvcjKSqyurbJPubOpPlVNvRHo154I8F2ejaXaeKtOHhi7sWlkmtJZPMa5t5DujZpUXgjlecMSp+tZviGTSfAvw4t7G1vra8OuXM0kNrbXClvJVgEeUhmKKRhgmeWJznHGE2vXmm+HbJ9YtLTWH1OVNV1CO+k/fTbAH/1mN2WVmU4JxnHbFVNS+JGr+KLiax/4R+0vLJbeSLTLa5Xf/Z0LEZSPbyduBgnJHJrgVGtOXM3eKeuumn/AASU48rujTufE3h/Q4INFm8MWmkxa/HBd6hqEczXskNqXZo4wAcq3GSch8BRxyTnSeG9MtNLl8Y6JMt/pXnpDKksWzdGeTkknnhTt6gN1yKd8SvEnhHV9J0mw8G+GX0x7JCLuSZwzTvgDCheNoO4gkk8j3zqr4q8N6T8GR4D0+TVrm4muo9QvpDGFgV2KlIU4yFBLEsc7nz2ArZupyRnBNNuzXl3/pmkFFxcZfeef+J7LR49V1Cfw3qkd5p6ThoHaMwSFW52+W3Pyn5SenFZd5JJLDZ3C3BYDjaeiOOoA+mD6c0sl1byXVxHNCVcM2Gz17AEflUKjIht+HUZI2j5iT1+terCLSXMQtDauJtZ1LSWvZrNTBHCImuI0OAo+6pA4HXr1rKa1cWyXkMLSR/cZwpwo4+9+NTWbXggmht5JPJCsSoc7MngkjucCmWZvpEmhjvJRCy5dBkq5HIyB9KS93YG23cWxnuLW+jmtbuWCZOYpUzuTAOQMdO/0r0Txdq3i618K6LJrGu2mo2t3bf6GSCJrWPBVhjhg2epAKnseK4WFtJWwhuLiC4E0G7mIgb8sMBiSe24fKAenWtXUrZNc0n/AISKzm0yythMbVrf7aGuIyR8q+W3zhML97GMk5POKxqwU5Rk1sT5nMzFmuEZbmVcg7mJxz61NNkWMatIzu24YK9PxPNa2n+E9YvLu4NrZM9vYnzbi8izJHFErEGXK53LkdRkZFJ4kuLK51l7azvJbtWbi7lUhpyRxIwblSeOPT3rXnTlyxLabXMYn7tIxDNCA/GS3Uj2q3JbPb3kfZkbaMjGT3/z7VHKzXrCOW3TzoV27lzuYjoTnuKv3Ei3FvJK0JEtvGI5GVs5bJ+YemeBj2q9zajBS3HTaZcTgsswO45ZT0z0/pUkkfmTQytCySeUsJ2kbemD6VkRz3EWfLupFzzhqsR6tqCsCvlS4OetU6bPR5sDUjZxaYzU1k09pY41IV8Dpwvrj3/xqgLwSYabAVW+7j72fStWbVZtQk2XFt87DqO2KzH+80LNsZuAxxgD/Gkk0rM461CnCKlTldFy2s90XnQRO8DdSq5x3x9cA13HgjVNFsb660241hfDy6hpc9m2tC3aV2B58orngMCEbA5AHTrXDWLXVjHJYw3zDzMs65+R+CAfTPJH4mrV95n2e2mZCURQrjbyre3bt196560Pae63ucdtTYn8WeMvDepSNpOtXFsrO3kTeWELIQV+QuCyqVPTdwPpXqXhv4Z+HNN0fVPEPjDVpr2O4sopdOu7OPIDkFpC8bHBGQyh2G35RjBYV4x/ak1xJoelzXC3AsLgTqXkXywpYHywGG1ehzkEHPOa+k/E2t6b4f0Ea5dQ2t3c+KFCSusf+jpHGuI4RGo8oorMSG2rwAB3rzMx56cYxp6N9vIHKTauzwLxh4etvDWsf6HJBcWF3B59nJHPveSMtxvAAweCduMgEZrAib7dNBGZBvAw6uOB6GrfiO8uH1Fobm8kZkmeX7uIo3c5OF7DoOOuBVVr6GG6dlYBgoVWUZySOfrzXqUlLkV9WXy3ehNcat4g1i+k/tLUri6uJs/O0pYsOBtAP3eg6YqLdHcQmK6kEb7twkPRe2CPXiq4uFaZHWPlSQR/Ec0SsJIpmmmUTNgFVXGfXj1/rV8tiZR1CBfJeJ/sakfMqyNn5zt6A9OKW6mmjvDcuzTvtBdnGfalg3xTR3S/6hOA0owF9SPerVxH9qmvLxJQojjyi7cbl7ce9O9mKxnhpPMM1tH8m0s0b4ORTzqkz28cUcMSBOixrgsOM5NS7IrU+ZtLJIoVjG2NhI6HP8vepvs0Nwscm4xws5UngkehqrxvqO9ipcSJ5AuEtvJWd8N14wP1B9a6G78PrY6XZ3VtfR3P9pLLtgX5polQDJZRnjnIIrn4mleHdIXQQny1XfjnPXHpW/o15Y6fcW2sXGsXEFxuZQ0MO6WMjkMTkcE8VlUvpyha5mzMv2ZbaCV3G0MzZxkfQ9ajvvLs5ljWQ+W8QVjjqevStnV47h9KtPEmqQt5180jR+ZgNOqtgyDnLfMSCcDp3rB1BkaOGRWLFgCWznP+cVdN3CJJ9oRWEkEaSEdOvT0xVW4i85DcLgCMcofT61JaSKvzSFkycb17VNBCyxvDeSABjlV/vd+3tVydmN3IVmXKK0e3C4znJB+tOtWsmcyX0ZZs7Vx0UZ+8aqrCslxJGf3QfgoB0P8ASrVjtsw/mMkuWwFYbl/+vxRJaCehY1SFVkkaIsYTsSL5uCOuePfNVZAqup3CQjhlXrx06064KNb+VFxF5h2vk4HPHXpxUlxatZq5uJk2DiNgDktjPHtSjorCvcGkht7xroAlo2+73z12k/pWhcSWcTS/apAUkQCN8kbA3OCMEk/4VmW80d0NjxLG0H7xpAM++R6mrCLbzWMtxdQsZvM3Rt2Ye49j/OolG47E8zLb3EdwdpimjGfl4444p63q3TP5gLLs2KrDgY6YrPX/AFMbOu+NTiTb/AO9STSW24TQyCGXP3V6D3qkh7jVmIm8mYYUkq24ZKj0rXaGT/Rru1ugofgx4GFOOgPfPvVC6jWO4QqqyTOg3An+I/xZqxDbxzW7rcT43bT32KPUk9MVUmrDaOm034keN9BZrWx166jgI2eUw8yMgDhQGzjHtVq88e3+twr/AGlpdjdOo3NIbXa+Ae/Jx+FcbHdTXDKdoeGIlWKn/wAeHqaW8nurviGYvKOWH3S4x1+v860jWmly3NVXnGPLfQfqN5p91d/aNP037MJMIYwxfLeo3HoacWso/tEDLLsAG8/xK2OB79M8UlndzRRtC9tt3phHwM7QM856H3qo0NxmfbKJGkbLY5oVpyM+bmldlu2td0iPbXW525UFSDjHP9a+mv2b/HTrPpXhvVLjULnSl1J71rKz5aOZoGRZijK6Mo3crtZmAYAA4NfNdjYva+RdMGZVbYwHKjPY+lfZP/BNaw0XWfj5pUOq6L/aCQQ3M8ex1j+yyIMpMckFgpOPl5BIOCM1nPdcpfmfqX+z3puu2Hwn0O58VWOm2+uanF/aGotYRmOO4lk5ExQ/ddkCFgON2cV6PUdvCLeCOBZHcRqF3SNlj9T3ptzdQ2kfmTMQOgABJJ9ABWu4iavLv2nPFn/CG/AvxdqiShJ7iwbT4PXzLgiEY9wHJ/Cuh174kWOhxs7aZcSlezSxx5/76avIPjB408OfGLwdbeDf7LVZ73V7a0WC6mif99IwijdNjHOPMZuemzOKqKtJXBHf/sy+ER4K+BvhLSWgEU89iL+cd/MnJl5+gcD8K9QqK1t4bO3itLeMJFAixxqP4VAwB+QqWpbu7huZfibR/wC3tDutJ3KpnC4ZugIYMP5V8m6d/wAE6PDeoeJdX1zxr44uprPUb65uEsdNt1iKxySMwVpX3ZPznotfY1FXGrKEeWIHkPw6/ZL/AGe/hescnhn4aaVJdp/y+ahH9snJ9d0uQp/3QK9cjjSNFjjVVRRtVVGAB6CnUVMpSl8TC9woooqQCiiigAooooA+Qv8AgoxpyyfDa31Db8yxSLu9Ns0Dj8ua/MyXaH2sSpPT0Pv/AJ/pX63ftseEfF3i74Sx2fgfw7dazqv20RJBbQ+bIiOjAvt6YBC5zx9K+UfAv/BN34ta8EvPF2saR4ahkAby3c3NwO/KJ8oP1etK0fa04eV/zPTwNeNCL5mfHZjmztKjj16H/POfxrQ0zRtX1O5Sx0vTp7u5kYeXDbwtI5PQYVQc1+n3gX/gnf8ABDww0dx4mn1bxRPHtytzN9ngJHX5IsMQeOC56V9CeEPh34F8A2a2PgvwjpOiwqu3FnapGzD/AGmA3N+JNc8aMY7u5rUzKP2Vc/ES31Hxb4H1CSzWfUNKuY2Ktbyq0JyMghkb8e3Yeldb4Y+NXibSbhf7ZQanCV+ZgRHJu9dygA59wf1r7E+Mug6TP448T6Vrmm2l1af2lPJsu4ldQrnfn5hx97qMV4hr37Pfgq/zNpbXujO33RC3mxZ/3H5x9GFeh/Z9WCU6Mjm+vYWteNeFvM6H4e+Km8ZaK2siB4keVkiikZC428HJXrk9M4OMcUzRPiB4a8SW5ms7oBlYpIknJRgcFTjkHIxzik+Gfg3UvAumz6VfahaXifaGkhmiVkypC8MrdCCD3NfMPj3SNa8J+PdajgjvrAC/na3mTcgeN2LAq4xwQexr0PruJwNKNSDtLqebSy/D4+tUpdOh9J/E1befwNd3FtIsqrNGcK4YDIYdvrXtP7J82l6Z8S7k6spkl1G/tG0+6KiIQudOnH2dSx3ShkfdkDAPB6DPxH4B8QeItYXVNL1LUpr2GTT9wjkYE7lmiAwx553Hr619l/szaXqniH4taLD5FtqNvo4+16sbpY2FtPDCY42hZSxDKxUDkEgkkCvnq+Oq5lmNSvU35Yo9rE4SOXZXQw8f5pfjY+6b6wsdUs59O1KzhurW5QxzQzIHSRDwVZTwQfesm88Kx/Yo7TR76bT/ACRGkZQklI1YEorZ3KCBt6kAHoa3qK1ueQfmltx0PTpil2rzzjNO469D19zTlUcnrX9An5Qxv8W704o2fe3A9z6VKoHUNwR+VG35f60XAiG1WHtz0pwXcuB9frT9v8Kj8+lIVY/w5B5oYr2GbAWHTgc0dfurz61Iww2eOBn6Uu3ovancq5HtY59DTo4RJMF9SOtPVf4d359q734S/C3U/iZrwsYmkt9LtSH1C6X+BD0RT3ducenXtzzYvE08JRlWqOyRvhqMsTUjTirtnd/Af4Ix65qFv4s1lm/s6xl3LH/z8SrggZ6FB3x16eteZ/FKZ/8AhY3iaW3lKJ/a1yVCMRghyMjB46V91aPpGnaBpdroukWqW1nZxLDDEnRVH8/r3r4F8ZXcd54r1u7Vt4m1K5bj3lavyn+0a2ZYqVao9Ft5K593LC08JRVOmvUyotZ1ry0t2v2eOI5VJVDhfpuBxVuHX9QhVV8m0dQpX5oeRnvkEVQz0245NKB8pUtk11uUnHlu7PzOfTmvYl1bxJrl8yNJFarbxAkwwqUDHAAIPODx+vpTbebR3tzBdW97FLj5pFVXCkkcjB5AHtzUTqCm1lHNAwc8DPfHeqoV6+Ep+yw83Ff13Jqwp4ifPVimyp4q/s+W4kXQ5nETH5dwIZmA9xwOtczcawsciR3VhdxpJ8gLQEbhjBPooAHQ+tda22MH161IEV1GcbeuDWNOeIp1HUVRu/fU2lKnKPLy2t2MLSNc0vWiIbW4UTyblEHQgjg/U/SvSvjvfLafEK+hxlbWKzs1+XpthRcAf1rjI7W3WYzLCocHggcjPuOaPE/jC4t7lte8QXFxe3O43TSzLvEzoBhXbqcjArrzDiSpgcP9bxEbuCaVtL8zj/kcVPLacpezp6JtPXXa55xr/j6z1W+v/BOi7riYRmQujFg20/dJ6LluP/rGub1PS9Y1hbC8t7lLcIojht7eUZ2BB8hPU/MDkjtke1Q5v9d8Zf21bPbw/wBpF76QLMi4WVmOWjIGSGCgAkfKRWb4fmsZNc1yG3uAtvZSnzEKOsYZgqoFTPA3HdwTn5j1r8YznNK+a4t4qq9fyXY93B0Y0I+zgdjZx6K13bw6hsvJNLaa6tPMLQsrSAKJDgEKF3d+pfjk8U3utNaB1s7hb+/urGS6Fp5Y8uHbuXLbsFnJ3biSc4yBk4rI0e+03S7y/tbfUZZYru5ltY1MRKCUxhywIOAEcA8nk5HrUel6pp2m+KtN8Mwtd6peTwr+/mChkiGS85ydqsWGAuDyx+teNTovnbjt/TOiWkS/J4jW+8RaTMtnqMpvpyvltapH88UTCQPtGEBB2kdcAdOa5Hwr4V8NQ/ETXWXTbp761gltYLgSh/LjlyqSRkjCHaw6gYAOM5yOo0W81yzW1utWwlzueZbi4i+Rdzfuh94YB5xkZbocVzUvjHRfCtvcXHiK4aBtX1wtNKzA+bJGq7VDHIVEA2f3VLDHat4Qm7xo72t+JCV5K5r65No/hu013T7WC6thbRyJFcqwtxG3AaPJG0nIUlcEDJ71F4o8WXli1lpmhx2WtahPI2nuI5WjMCQjJ+X7rKOrSAbSNoHNeI/EXx1qPii6ex8MX0k9la3P9qCGScTWrNGy72YMoyzOv3c4wBjrUHwXl8RXXjrdapfS6bOyDUbeKLzlt7V5MK0h/gTzHB44yehr0oZVbD+1k9Vq0/Q2pYapLW3u9+h7NdeGdJ8TfEGOx177ZqtkqC5msmil33JUoVRjgFFLSxKdvHy4AAzWPYax4b034rnw7pum6bZXDX88kMyT77aGKS1Ktavu5TBx043bxyTx2jXWiW0Or65cahFf6veqI3imnQG1ICnzkKs2xmRy3XI2rwNvPzN4l8PW+lzy+P7HWLeztTqQk02COYyNMVYNuEmBnkA5IwKWDpqu3Tm7e7ZerMI8smonsfgvWPA+jQtYyNfW0sks91c220yLpxiIWIxngMXyRkcuz4AXCiuc+OF5Y6HpukWt0rHT9VuI7ma3kWU3EShC0zSIsnluR50KAbhzFxgV2N7Z6C0mpeJNS1DRotOutPt5tQs7dDcXMd35STsytIoCnjfwTwemeKzfjjdWviPw5rEen+E76+0+0a1WyvHtniCxrGWnZFAAOXQAt6KeBtxWsbUsUrK+uvl+R1Y+gqdVRT1SVz528SRaJd6lbah4ds9VS0eBdst/jdOwJXKbQBhdoXjPK9zk12fgPS/tFxafZYZJBFcKSEwThclifbBauuvLPw9a/DPwd4ovtJudL1C9t7qHSo5oN0Bsk3FWLIf3js5Z8kAjPORyYfgTcwst1NND5UrsVZh3DEN9AN3p7V9Fhqir3hrpoRCajsWPHy/Z9J1e3hX5I5IVLhTg/eYfhx39K8T8P6W+pL5yxg7DtOGxn/HrX0z8TvC8dr8Ndb8SXF9BDcnUbWOKwkYm4eN4pmMmANoUbVByc/MuBg5rxT4WaZ9rtvMZVCGfazNwAAOcmvY5eaSXkexnD/dUfT9EFn8P7iSOS4itRKsBBlZSW2dOT6c4/Gn3nhXVNOksb7VNLlihvhO0LzEZl2sATtHIPI6+tfV/wn+G82oW8ml3lubWK4jaZZDGW+TAwX6dT0z2A4ryT4s2Nvpf/CKafb7RHHb36rtzj/WRjIz0B7V0Yfl9tGPQ+dqN8rZm/BTw7rU3jjSdW0fTz9ksrxY767+zkx28Misj+Yw6DYzcdcZ7V6P4zsYb7/iW/wBqaRbaNpfmR32tXlvuigtnEiBLZVKsZgr7hgbQSu7rSWEcPwy+Et5qFjJqdrq17Z2l7cLDG2+dmlUeSEYMM7JtpIH3UP8AFjHkOh3B1LxZr+neNLnWbG7kktrS5tbaWOJprxnIyFY4BTGcAEDaN2O3x2bYp5nipVKVlCndLu7b/wDACi1y8si7408fPc+BW0vQdUvLDS7bTfL/ALPnhHnXMfMMUrsvQL5YJ55L4AOM1g/D+zn8TWP2rVvFV3Y6Zqt2LfVUWZYpLsFAioZjyU3Km/cMYYBQSTXVeNPBv9ualf8AgjR/FWk3mt3ForXjXsMUZaQy7VhgLYMKoqu7BQcYzgbjXOab4V8c+JYda8I+GdRtpNH8NWltqM8LQx20SzoxUIso5L7d0hYn5tjHtWOG9mqVqTs3rr277E1EjK8dXt/pHhHS9L8O6x9v0rwzfXUYHVXdj+6uUUIrbY87A7nO8H5VAGd+x8Czah4ftfF+pWtla392tlBbwxuG+RiP9Ichw7SsRnvktgjArP1qPxrd+BdO0ewjbz7OW4XURYwoZZw43kmRGLSAxbcggAADtWNq1v8AE74iaV4btWsyliBNbWI2rGJAihpbhwoBzs25YgfdO3vW3NKpDljJRs3d/wBdy4pctql/I6nx14Y8cL470XTdAa2s106aDybi0KfJNAxIlYjLEkZKjkdqu/tSWfgvwnf2vw/01rm+1CGZJr/UppGZyvz/AHsnBdidzEDGNozxXUeC9K0rwDqtlreueO5H1eYR2ljFcx/aZ7m3Ef3lQ/JFGobG4FiGAOe1eT/GnXtHm1680exiS9n+1NNdapMrGTzG5Cqx7YA5AAYtnArkw7dXE047qKeq0v5/ImL93Yn+APhuy1jVtWnvJLQw6fZyyP8AaD/yzlRowVJ+VSGK5JOQCceobqPgTU7XWtM8L6Z4fuNUWfTmMMiagLy0yJHWSbcMKE3LgZ28gHnglvw5DeC/CLeOPMtpdPmaS11a2dWMjRiZAI0wR98MuDnsw6ZqTxNruveGdOk17T/Fgmv/ABPIXutkZjS3jOCm0gBCQpBOwYG48muipKpLEScHo9Ou6L5Y2XMTfEyWxsfCdnokzTG80zToNNnSKCMW0bxShiqOCHZvmLSPjDOwHQZrovgx4F0jSbWPxJqq2l7eappzTiyWUbreEOAI2XacSPj1GFYZ+9trgV8C6o3iqxbxR4hsBpsy/aJ70XAmRI1TeUMY58zbyI+pz+Fe4fC3WBoPwq1DVPD0P26AX9yNGS8jME0sSjLbtpI3yCQ4z/CEAGSc4YqcqWE5Kbu5P8zJq7s9jwDxUF1TWL9bXQbi2uY7Ypc27uSzXIy0rqhGUAHAXsBjrT/Cuk6nd6ddT61azC1FnN/Z7yswjmul2hI1AVt7BmB28fdOSpr0L4S+ILfxN4+1648UW2lxahqomvXvrqRoniCf6xEywUHgtk4JwQOSBXEfGDVtFufGU6+CVew0eCd7i3ihd1ijkZV8x4txypZhk856V30Zy5lh3HWyfkaSirWi9DgLyCGG8mXJbHDAgg7h14PI5p1ntW4ikaOVvMyqBe/qOehpt1c/aJJJFjMfmKOp3EkdTk9zUfnbV85wGRV2qq5+h/HvXqWdhFyG6uLGS5xD806GNt3oe/1qvDfXVnMfsc5Q9BIB045x+GRVdpt5Vm3Mxwq7vep/Mk89mXYCEJ24yuf6GkopAlYb5dxeSbI5AIk4+n+JrpvAvhHSfEGtJBrmsRWVpGT86uvnyOMYCKQc9SxzxgHmsT7UtxDJJfLKHlRURITtwq+3p1966XQWt7qeSHQ40tZbezZke4lClQ0e12DnoxJUYHbOMc1hXnKNN8ugN2Jte1RtH/t9fDvizVo4vPht5FitWhTUolZz50jKcIFJXAI+cuT2rkJLLULO4a0urWe1naNJwlxGUfa2CpGQCVI5BHB7V13hux1TXvDHiGNLyNbaygjmvtrSmScK48sHB2Y8wjqDyc8YJrPtvsdv4b1LVtdWe/1SXyrOxDXAKwqVOWbJLfKNm0YwckcYqYS5Pd3Y7tqxnaLZ6tqmpCGy083LyvtSOMZLuckBffipN2xLuFofK2xFGj28hgf4u+Ov0IrpPCviSGHwbeeGv7JjeSaXzYr1mIa3cAHKMPukgdTxgYwc5rjrqOaO3eedW8u5zErZPPfr3q6VSTqNSVkjanU5SsYmH3Tkf7LUxlO7a3b1WnL4e1Z4zNaW8ssfXdF82B7gc1XePUrV8S70x2kUg/qK9NK5TpzS5mtC5Z8XSLx0PU8dKj1SJPtBRGbbj5s9fWktbiRruJZFXBB+bb04q1qTJcXK7eNq/MduNxHB/Cs5pJXN4NfVpX7leBLpXEyqjiPjd2zWjHdSTIZJo4isLFDGM/vG7Ajv9faqNpeRx/u54UKsDgjqPQf59Kux2OrTTRrZsZUJP7vjeMZycHqAO9ck7dTz2S6bHZtqlpdSTppmxg5mjj8wA8nOw/eweCPQ1638ObzSfE3hLXNGuL63l1bWSJJ7OXC+WkbNJm3AX5SSByvIyR0ryCaz1GwvWt7qF4poFGY5PRwCCB3BBU596rzOwuN6sUZcFWHDAjvx3rCrh1io8vNbsXCzep6nr3wp+1X15JDNAuHI8kSDdH/skeo6Vy938K9Yt1cmJ2VRxhf171z0usarcTC4m1G4eZRjzGkO/H+91NaFn408UWYCxaxOyj+GQ7x+tdtOi4xUbnqrHU9IzpppfJlVvCms2Lvut5cp0O3g96zri2vbZQ32eMOfvHnrn3r3Dw9cTalo+v6lr186Q6LGkzyxRD/VldxyvOce1cpqGueHNQJNnrGl3i5BCyx+W345wf0q5UJx1Y+fAVfsuL9TzuSS4vlWBoViXcWk7jjvVea8a3c7cESx7Oc8DsRXSan/AGOscn/Eu2ls/vLefjP0Nczex2szboZJAqjbhl/wrLksctalSjrTlcn06TzElhhmTyw4cJJgsx9qe14f+PiSMbeqx7cZHQ4HrVSCGOKHzkkzMf3e3+9k9hV1p54RbG4QsIAcKcY9enfv1qJK7OKW51WtSaLqHhjTINsMGsWWPJmKlGu4ZGZuGxtYoeMtg8gZNYVjI1xr1o2p2ymG7cRsiKBuXoSOeCOvPfFTt4gj/s+w0+S1nMtt5pSUsNsYkHMajHQkA8nqeMUtlpK3wg0eHWNNtfMj+1C5uZiiwsit+5Ln7pJx25yvpXNBezi1LzKlo00N8W2/h+DUr630Fb4wJKhtftW0PHj76MAcdemPSsqby/7PDIvyxnDMFznng+xqW+hMKsZgxEqAs+Dy5wW69SDwcelPgWFo5baHEhkQsVCkbDjjr271vH3YpEOXM7lOOaZYNzWysqMMbhwPT60skhW6V/LMqxqBt+7keoPpUTNN5cKSfeyRtY9+mKsXVm8dibqS4K4baAo5X2J7Vd0O42NhdXDKtv8Af+6rMOpp8MiJ5lutmk5QgSHJ5X09iD6VWmiMiJIq4VtqqV75759atWvkRzLGo2ySfeycndjAxjvQ0SyxbwyXVpNAoDkqjKp4wmegHX1qjeJcwx/Z5H3xJKVX5uc4yOKsfavs6qpkdWK7HkC8oOmBVVpIIPMj3eYXPyFhyCD1oitR+hJDtht5pEY+Yv3l28MP61Zs18nT55Gm3b02RoM4PGWz9Kp24feAJjkj7u0nI+g61btr66mhMgVF8pSjMAOQRjODRJFxZdsraGaxS6+VSWMZK9XyM8jpj3rNMFvMySH92xHRTkcH0PTNW7Vpl09ZEhVY4WzndjeTwfxqlHcqYXWRd+1xt9gD1pRT1JStqbf2NII1+0NhlKtGxGSyZ4HHpUEd3a6i88ErMpz8shxggdufU0+3vJLiwmeRkHlKRGqrjHcN9aoSJH5UUkZ8nzl+Ys3BI/lS5b6MpvQs6Uqf2g0UKlFaPb8zfxkYJHtmnsJZpEt49zsrfL0yjDjb9CBVVlb7RayXLGSEKNrKOgHB/Kpp7u3ktbiaGF4ZUmVo5FywPbB/DpTe5LH3MMV1MZNvlqpAVXkBwfQ59aks44GuAzbDnDByOhHUcc4I/KqUk1o9mg8mWfzGIcB8HPbjtVzT5I4ZFXDPNGrMkmBhCR0I79qqxajfUtadN9okk33bYlz5jRpkZHQ/5719B/sp+LNN+FvxQ0PxhdXxt7bTLyN7pdrEzKwKvA2CABICw3chcgkEA18/2seLdr6NB5kG3mBhhxk5LL+X6V6/8E/F3hfwpdXV5rvh2LXzNp88NvBdXkkEVvOZFeKdigy211OUPDBu2M1MtC9j99IpI5o0midXSRQyspyCDyCDXxz+1Z8ZPif4N8dzeE4bpNO0p7eO5sZ4wx86JhgkjIGQ4dTknoOACM/Tvwt8bx/ETwLpPipdFvNIku7eMzWN1CY2gk2gsq5GGTn5WHDDB9q5D9or4f2Pinwzb+KF0uC51Dw4XmjMkYY/Z3wJQMjttVv+An1rog1cR+b3jDxZ4p1dXkvNQv592WLFQQf++V/rWZ+z9oXiDxr8bfDnh/Tbq7tpJtWhcTx5WSFY23vICMEFVRiCO4r1n4mBjYy3CqFXBAXqB/jXff8ABO74f/2h4w8QfES6izHpEH2G1J6efMcsR9I1x/20rRuxUHaJ970tFFYkhRRRQAUUUUAFFFFABRRRQAUUUUAFFUNe1CbSdE1DVLe3E8tnayzpEWwHKqSFz2zivlXxV+018RpHkhs4bbTo24H2eMZweh3vn9B2p20uVGLkfWs9xBaxNNczRxRr955GCqPqTXH618Y/hxobPHc+JoJ5U6x2itOR+KAgfia+GPFHxK8c+IpGfVdTmmb1mZpsfTcdo/AV5h410W58aWzWmuapqbREdILySED/AICpCH8QaV0aKlfc9i/aY+IXw38eax4qtdK8VaYja1obr9muLmOKbzBbFGBQtnIwv17Zr88fDPxR8e+E2T+wfF+qWse0HyWuC8J/7Zvlf0rv/En7O98gdvD2txSDcW8q8iwfbDp1P1Fee618LfH2h5e80Ge4jVdzS2REyAe+35vzFdLxDnGMb7FxpKN/M9Z8N/tfeJtPkEPirQ7HVYON0tr/AKPN+XKN+QrvV/aV+F/jDSpLG7mu9IuHQBV1K1DQk5BIDruXJGRzjrXx2zCOfy2Uxv02MMMPwPNDNnG5unPzetXHEVIaXuiHQpvXZn2Xpvh3weNK1zWfDbWss9vAVjubS4BV4WMTdFJGQw6jB4r6e/Y/tLi+8Qanc6X4pSwvtP0vS7qS3WKJkvh5fl/OWAkCSccAg7thJJ+Wvzj+BWka5D4uTVv7JvU097O7hln8plhAaFtu5sYI3AevSvun9nb4geBfhb4kl1rxdc3VpFe2tnp+nPbxHfe3AJJeYZGIlMOADxja2MkY8hvnzB8qt7q/M9XEtrKYOUr2m9+1kfogudoyMH0pahs7lby1huo0ZVmQOoYYODU1dZ4h+bSj5ccYH8qUfMSaVV+Utz6U/wAv+IjOD+Vf0Dsfk7GKueuAOtAU/L8oJqTaOT/KjaRjsR60wY1um3hqFjx161J5Y7r/AICl2MPx/SkmFr6kW3KqPWnbcgo2fbinBF7AkD9Kv6Po+pa9qVtpGk2bXF3eSCOGJerMf5AdSew5qZTjCLlLRI0hGU3yrVmr4A8Cax8QPEEHh/RU2s/7y4nYZjgiB+Z2/oO5wK+3fBvg/RfAugW/h/Q7fZBCNzufvzSH70jnuT+nAHArF+E/wz0/4aeG10+MrNqN1iW/ugP9ZJj7q/7C5wB9T1NdtX5JxFnks0rezpP91Hbz83+h97lOWrA0+aXxvfy8hGYKpZjgCvzo1aTzNRuZNxy00rbvXLk/1/Wv0K126NjoeoXwbBt7WWXPptQn+lfnVMzZDO28v83Tj868/LVrJnVjNkC/wrxzk07IVSzEcDOT0FMX25HrSzKJIXyAFKspB6HjFes3ZHClcFkSWNZIGV1YAhlOQQeQc/Sl+bcPmAwePeobdFht44Y1AREVVA7AAAUvmbSG5qo+8hMe+SxKjOTSxy/wsvNQmZS3Uf8A16Uksw+f9aNQJ+OXHA7+9eSfEzUv7QkvbO/WFbaOKSMNHcMieWPmLE9Q3YgDsMV6wv3Ttbn1r508X32k6bMmpa5qkU8mo3OYYYbdmE8ofPzpyQm08KeDjHevjeLq0uWnh11bf3HZhIp3YalpsHgiCxktNYsdO0425RriZjIxZlJUIBgM27A6cDPfFWtF0dbOESJqF2bSSYyGa8YESOWXKR45KbgGXk9ecZrJ+JNvpfhzwfpemi3e+jtLALbK6jzQVwxkKtkblyDkDIC4o8L6tbaP4R0SOTUr3UJ/IAZcb/OmYhzGh/hK9CepIOcGvhOSc6PtY6tv8D0OXlujstO03SdImmsrkyW0oeJroPMNzu7YVEIGSSoUnlQFJ55qjJpujaNrxv8ATdSWOTU2k+z2xUFpHCbAEIHyKCGyM9iabazahpqXDXlxDa3N7Mpw8bSfZoTuVWLk8Hlm7YHHOMjH8C63/aUd9eXGsWyaxIktus1uoMqLlwFTP3UI2knkAydcmsY05S5nt+pHNaxa17XtPk1Cz0eS683UZLnEexWdt6kn124CI+FILDcOa888VW9n4bHiXU9OuLW1uJ0+02dvfQPcJZMjKWWMvlQztIhUc/wk8LUXxOW98O+G/M0G5v57iwummF8EaKVJd3zySc7lJIXlumAAfmrw/wAdX/iy8vn/AOElupjeRRoJlYkFsqpyR0yRt+uBXu5bgHK0ouy6/wBdjalRlWTlbRbmp44+JreImtIrPRdP01LJGEcNmvy+Y4USyMwA3Fig46KAAO+ey/ZdbVLHxdqHjCO+ljWCwnhVFHErYVsknCkKFzz+FeIWNjJqFz9nV1QbGkZmOMKOTn/CvpD4CLotn4DvLzVlupfs8yxq1vHvEETty4U9T5pjPGTgHg9K9jMoezwVRRXQqdVyj7NaRWyOnHiKz8ZSaxZ6Pq11EdLjMF4l1KpR2l/hijUDlQrhvmIYHmvnHxJby3ni7UdOXTVhe6u2WG3mQxBPMb5dq5OwHOQPQivZfCF/r2qfE/VtD0vzw2qXST3lxKY45LlSNoIHCtkOMIBuyxPGDiPwz8B/EXijxpZ+Ip4yLSLUhcXCRf8ALK2jkQt+85QuFYcAli27054MB7PC1OWbsmkc9BJ1I32PXdY+Fmk+HfEXjPQb6+ivrvw1eR3whj5ggmtIlQecxG8qNrNtXGfl56isy+1PxVY6p4ft7/UNI12xDrdTSxwSoba0eEgx7Cwd03ury8ZYd2HFdd8YNc1TQPHfxt8U6baRzJP4uvLa5lXLyxwxyEeZs/hC7j83ct2214r4HbVvGPjvTvFWl2ut6bpyXUtu+vTILmK4ATmAqygByTFjc21e9ceKhfG1nJ+6u/pt/Wp6GYWeJ5ert+SPKfHnxQ1zxOxh+3wx24uPMWG1jaKOPCGPhT0GGf8A76rr/AGlaj4mvrbT/CevTWcCRIoIiHmg5GFwPvdM5HHPrXCfEldP1DxdqGs6XZ2kNlcACIWshZFZflZmJ5DlgSwPcjsRXR/DHxHr3hXU7W+8K3QhvYrq12SeXviIb7xbAJXBI59jXv4SnFU4+y0OSHLFuO59O/GbRbWx/ZUi8Qf2gbzUtU8QJb3hMZXyJbW2uEMQ6gqM5DA4OR0rxT9nbQ/7S8PtIkcYdZLpmM/+rfagwn+8d2R64r6e+G/wt/4aD8B+K/hvceOLTRLbTPE66su/F1P+9t3R3MZkTahZh83Qtkdq9F+Gn7HXwR+DumyWOs/G6G/zIz4nls7chiF5Vd7EnCsMe5r123DXsfV5rhJYqFLltov0Re03UvD+m+E9Lk021SNr+OONipyzSDOQxPJx8wH4DpXxt8Qp5P7e8NzWqb7iygmlQFdwLGVSvHcfLzX09pniv4U6bcXn/CZST3+iaXqCQQ3em3kkUc8LFyk1rEqFm8sKrMucYYkHjB9L1rxN+yP4f8N6ldeBdDGr60Nix+XZ3Ih3yfMA08g8uMYJxsOOOPbgo5nR5XU7Xuj52eBjJe9NfLU+EP2lvE6aLr1hHJbw6ndyWNtIpjcssB3F5FYEZfL8BlPCoOeSK8a8N68t14n0K1nS1gttP1Zb6Rry4kaJoVO7y25ycdARzz9a9u+N/hvT/iBPqPjDRdP/ALPn0o29n5hLxi7k2jayI2FCorKrDI5ywBBryz4VPa6p8UPDdnf29odOtbsw3cs0LTw3MjQybIXGCVL8RjA2r9414OAjT+ruMNGkziqRhztJ7Gj8fIbfS9UmWfT/ALdrc9xLcTa6JWjY8gGNYs/JFyNmeSp6nmue+EsNxfaTr2r61o91qGmP5WnS3EDeY9r5pK7vLUiR9oOVxx97OQMVW+K3imC51yaz0udG0uaJbS4/cENCqswCxs7M20Ljk45BAAGK2fAdr401D4TXFn4d8Y6FbpFqv2i1spLuO2vo9m0ecoHzOzllUBsgBGI5rpoUXDBpPy/ryM+VOJw2oeIvGNlcXvhmzvr0S3kn2M24kYu4OFVQuSFJVUXjnjBr2nx1fz/CmLwxp40PWbW20K1tm8u6lW6ieeUB3W4z8nLLJhcYIBHTr5lot1daX8QNCkvrfy9QtNdtZLya4sxPMxUgZ8t85wc5ToT2PArovjhef2nq1jDpZllsobiS4ka6t/KkubouJH3RD5csJV+TaNvQALgVdaEak4Qto9WF5aa7HpHgnUpvEV5qHxC8N+D0FzpVn+4uLO38pbknDS79pLb18wRgRKqkhWJyMHh/CHwpk+LHizVPiMs00Xh6+kulSO4vPKuElWNQq72HKgsAMDJC44HNdZ4PuvGVtps+ra59o8NW9lp0t3eWK2skNvNBEVltrdfLOUUSsZCcgkYB3ZNeZ6Z8VvGVw2p25u4Lq5Qzy6X9lt8CJjnzHjjjXawI+9uAwBnPFcUIVouaw7V1pr27FQnaPLuXtWbXF8Q6n8MdLtNMgiuJofsVnZqt0IphGQZNo4+ZSAx5KYXryas+AfD+jm2j094YbvxBZW7Xt1d6uxSz0qJcpGjI2QxAJkOcYAGOlYGg6pdxfETwh4gl8VSnVdSlNrqkC2axSWJV9u1Bna0ZAXB+XowwOteq6pql9pUfxJ8EeE10Gf8AtHVGcyzaaN3kKgjZUkIwX3ZBYYXO4ggEGqxUpU6ag99L9Lu9n8uvmTOPu8q3MbUfCfjj4hSWWmaVqOh6fo+nyiI3DTm3j2RPIWuH+U7GZk24QFm3oAGzXS6DocnhP4YwWcMd5Zf8JHqc1tHaTal5nksDtMjbAGVV8piFABOMjHbwTVLbVo/DK+JtJ128jWwuVSW3jSZxb7iwWXzQvlhTs28tuLZwK9X8J+IvFusXWk3njLULG9i1B7ZrRZPkSEy4DOoU/umSNmZpCGHzY6msMVQqRocsWuW9/O6LhyyWu5r+CdH8M+EvG10YNLukW8VbJSyAwuWzJHhQzGNlkVMckjpyQTXg/wARNZXVtX+1eXA3muWWSOTdvHQZ5PIxjPBIAOOa6v4weMg3iSbwvYXzT6Rp16Z1mt7kiK4kz1XZwoAxyAWzuOc1yHjDwnDo2pi10vUdNuYpwrpHb3olMe9dwXJAPyg7ST3Azzmu3L6UlKNaq/ekvwJ5ZR93sZWgaPceJJrm1tby1t5reBpUE7hBLjqqk8Zxk8+lZVwdvbaQ3SrcatYxvtURKwVd8i/Op65B7d6rfZv9G8xlfAJzjqBnj8K9lPXyET3Vu0MUTbzIjY8tx2qOO3aNmEiyIzD5s+/atC2uLjTVt3tCN20qwkUMhznrnj0yKzvMZmLSSKsjOc452/QenpSTbBMsyIy2cXmMoZX+WPbhgMcnPvxWxa2er6b9j1C4hjb7Xbu0G9kZRF8yk7e7DBIB56HGMVkTX09xZpbS/PLFiJX24wnXHueaY8KW93CxjjvESUExMxAYj+FsHIz04NQ02Jo7D4cX0Q8XWOjz2csmka1cR2k0bRRFpCfugM+AAH27sEHbn6VT8VeEde0TW38N3WmyNNLdPHDBEuXmjTGxgo5O7OR680niZdDsdNsP7O028stT++zfa/NtlUEkPGw53klc5A27R1PNM8O6749ur+7vNEutTvtVvbaSM3EbNJcRxqAzujnlSAudwwfeudqXN7WG3n+dylL3bFHQdbbRLq9R8mG4t5IER1V9pPBJB9iRnqKqMZrjSTH5pZIn8zy8ng4xkDoarfY5riVpAGZ0UmY7Sdoz1b05PP1qeRpkgTJCIWMZOPUe3TFdDik7rcHK+g+G8mskF1avJHKp3b0Yg7fcfWuj0/x9cSKserQxTJtGXMe7Hueea5hRskWGT5mkTy/nPBJ/lVbaq5T51dcj2ropzlFe6zqw2Mr4b+FJr8vuPQNXttNXSTrkmh2jRs21ZImCsTgHheCRzyRmuGvLiO+2Msflsnv1GajZriNVgmkLK/KgHgZ64p1vbwxsFnYtuB2KeCcdsnirnVckaV8dWxCtK3ySQ6G3VojNJbsyocFh0XPSnRySTXzKszhjgIxYEqvXGR1pt9eY/wBFXy1j/iVFPUcc+tLpzeXDLbRwpKzHjPUDHJGOv0rmaujgtc3bmfVJJP7Qt5iBHbmCbLYLRDGV59Rjj1FZ2qQsrJeblPn5bapyRjHX9KLK4m1C1ghkaJ5Y5BHH5nyh/TJ7/j2rQ8YQrY6h/ZbQ2iTQMWmNrIHjywB2q44YD+eazo3jUUS4xtqYat0xTx908npUK8e+Kfng9+K9RIZ774Nt1uvCvj62bDeZpCvtx1/civm7UoVt7h7faQFOV57V9OfDEefpfjGHj95oKNz/ANca+dPEULMY7pl2rwB6nvmvSxFLmwykt0cMJtVnEw1kmj+6xA9jVu1nbcPMkJD8GqfGee1WLdQwTH99efxrxtzuuXRG0Unm7dxX5uuMHNX5jLeSfbsAl8Dyz347elEiyJb+cWKrlg2R1waZDJa/YWRo5jKRy2792Pw/KsZqwVE0JDc31mDHZXGGncI64Bzg8DnqPb2rT1rTLjT1VdUskgRh5kQVl3Enjsfu4zg98Vm3Esax7VzkkShVA4YdPwNdF4p8RQ+IobCS+iup9QFokU1zJPu/eLjOFxwMYrGTlzRstDOxgReZNDHLJP8Au2m2jHVTjHSmgta3DSSTs21tu/GOPwrptBudKjsSt0sbLZ3IkihuoxIsvGWQEADDDkBjjIweua57xelnbzR3mieeun3P+pW4ZTJ8owd+3gHOenYirpvnk0OGpXmmt5286N2aQNkgcZx0NSTSRvatGZi7SOrBcHg9/Y1lWrNLtbnnjjvVuGFpJCsQO1icAnjNW42G0OzNCpWPO3kYboec0L86u0hw+QFHTj/61XJGhjthYzBxIfmLbuA2c/0pkH2dPOmnBKDBVTgNk0lIm5ZjtFW2S7ni2beMLyr/AO1Tb+3hmdbyO2dQv+uZeVYnPNdD4N0SXWoZoGfYmGbG3cuByRx6ZBraufBl8sZjjmsJs843hDn8cA1Uab3Z2UMNGpG/MkzzvzIrWRZNzeaqlflbGQelRwtExjt50fap5Ibr9c1e17Rr7SrxobixWCYLnCnKn3FZkM25fMbZkAg7h1z9abjYxqU3TdmX7httkIVHmRLIShBOAfeotPiWUTxvAA7LhOvX2qzApW0ZVYFmbaoYYx6nFM8uGXzWaRV6bQnQ/SovbQyGcmExMuHwV+919/zrSsrVp7V5JogxwItm4ADHes5LV23KGUtnG1R0HrVrT0WOYwqweMkpI31GPwxn9KU9inqLJHvWHczQxMSqsGypbuvt2pZBe/8AHu0UsTEr5kSgbcZ+Ugdc1CbWRbKS1muE/cucKGz5jA/5OaZDeuJFuGXdLE23k4yPr2PvQloJIt7o7dbyO2ZJUABWQLnkEflVS3uJoSZoJNrAsRjpyOcf4Vdh3PcSxzbIhP8AvVXG732+5qlbmLzR5cRADf3q1p63LgX4br7G0Lx2qo275sMSCvHT9fzrqdHm+zzwyW9u6kspNwg55z1z+h/nXKwrPIyGONjuXbt9e3B6V0Xh3WvsLLHNZh1QlGEsYYMMEHKn0B47ggGlON1oDbR+5/7GepR6p8DdIm0+TWJdKUKthJqSBDt8tPNSEZZvIWbzVQsxPBAwAor3CWKOeN4Zo1eORSrKwyGB4INfJH/BNHxNb33wRv8Awclxp8s3hzVGUtb3RleWOdFlWRlxhRksoI4OxsgEGvrqmhnwp+0V8M/+EZj1S1g3eRA7PA3/AEyYZXP0Bx+Br3r9jLwjB4V+AOg3Cx7bjXTLq1wxHJMjYT6/u1Spf2mNDXUPDN1cC3LH7GyswxkYPH/oVdl8C0WP4M+CY0XaE0GyUj0YRKD+ua0k7xBHdUUUVmAUUUUAFFFFABRRRQAUUUUAFFFFAEN5bi6tJ7Vuk0bRn8QRXwL4gi81oNox5UAT6HJY/qa/QCvhzx1p62HizVrDoLe+nTkdAJGxXVhoqalFicuXU4KaJ42PcdcEZrNm+wyS7JoU3DBO04PNdJPbjB7j+deL/HLxFceAbT/hJLez+1APBE8YcodrFlyD6g4/Ot4YONR2vYieIlBXSudxNpNnMT5cgUH+9WXeeHZOqxhx2KnNeN6D+0poVw6Q3xv7Ethf30QlQE8feXkD8K9v0HUm1jS01DcFDZ+YZAx1zz04NZVMG0uaLui6eLvLlkmmcN4i8C6Tq0bJqWj2lznqZoFZvzxmuX0/4d+H9ImzY6DZwOD94RBm/Atkj8K9umhYqVkUfP3K8/nXL65dWWg2E2qanKII4I5JJHVd3CDPQDJJ9q5XCUTpVRPQr+GdNuGZo5Vby0trll3LkDED8c/0r174Mxw22r+H/smg2+pwa1ZrC1hfR28t00zb/niL4PyjYys5GSVJABFeU/D/AFW38XQWesWa3KwzQzrJFOjI8biF9yMpx09RxXv37Ftxe2OsrcyRfbbWTQXjjiijBlhYXchDfMdpywxk427cHjFeZzOOYcr/AJf1PUq01PJ+e+1T/wBtPtzTpJJdPtZJlCyPCjOAQcEqM8jg/hxViszwzE8Ph7To5JLh2+zRkmd1aTlQcEp8pxnGRxxWnXonhn5xKjcqUwOnNKq+2FWpQvyjjIPNIFxjCg7fWv365+T7DB79P50KpOfXBGfSpNpGNwJA96f5ZbtwOcg07hci2gN9eM0uPl3MoB659KkCtjaccil8nzlZPlG8bcnkDjuPSplKyKSvoRFZFX5Y2d+yDksSeFHuTX118A/hGfBOlDxJ4gt/+J7qEfyxuMmzhPPl+zn+L8B255T9nX4K21vDa/EDxHZne37zTrWQHaD/AM/BU9P9gHoPm7ivomvzXiTiGWKvg6DtH7Xn5eh9tlGULDfvqusunl/wQooryj4ufE5dJjl8M6FcYu3G26uEb/Ug/wACkfxHv6fXp8W3Y+gNLx1470y68LeNLOwfzItJ0mZZ7hW+XzXVl2L64xyfXivhvfGzfu8qMjivZ4vEGoW2n3mlxzD7HfsjXMLKGEu3O3Oe3PTp0rjNak8PBhaR+HLK4nc/dUFNv1K9K6cLjY0Lq25hWoOr1OP80r93BIOKcx3KV5roL3QdNFq1xZ2Jgl29POZlH51zmVZBIrMVPRsV69DERxCfKtjhqUnS3I2b5towvPGakCsy/MDn+dIzfMd+CT0PtTmb5juwR611JtIyGFMnPfpmm+So+bge2etS7eBxhj/OmSeYMsy8e3enzNbByjZGVUb5jjHOWx+vavDdQj17UfFFvqGjxQRxx3/mXtxMzGZIo/mUIfukOQqHJzyDjjNe3ybVt5ZJB0RuHwOAD/SvHFf7Drk0Fkw8yO4Rsm43xI2N2HwTk4JOPcnFfDcYzt7OT3s/0O3CRvc5T4n3lpHHFqjebMmo6jc2tvFZosz+cg2xxxtnADBjvOMHBxmtG38PadoWn6fa6fC5hmjl3PNIrnzcKWAXO3ecdsD26028lsbPxBdaPfatI9lZyPqEcD5C+ZKzRo6oTjjbwASQ3XArA8WeKI9Q26RqElqdPsr97eS7Wdi8YRV+SRtuxWHOAOSAxGelfI0Y1KtONKmv+GPRo0p15ckOpt6xrml3VwsetWFwfD8JguEnVhK07SbgylyAV2uQRhT1PNaHh/RtNtfsN1Y/ZLDWp5pZpJJHLmS3ziJcA5XI2rjBB27iT0qFvEdu00V1ozKmlxWE1zY3MskaZiiwsbqr4dz8xYqV54HOM1F4dupteuLiws4zaak9pbLc3JtTmK3MreUsLEnEmEcn6jgYq4/uoPmT/ruTVpqEnG+pj+ObfUtWjnutNsdts1xI0jy+an2tdgMnyr95jjAyOCCc+nj3x+Wx1b4i+IL7R9JNhZZt4obdl2FVitooySO2Shb3zXuvizWoobwyXlysWpDzha6ZLdlIJRubYzMOoyu4kY++ByOvifxEtNT0+9v31hnfUmUi6MihWEzKNwKjpgkj8K9nIXUqKTex6mWp+zqp7cp5z8P7eFdfSaeETCKHf5ewNv5wRg+xNfSnglbLw7p82oWdrPPLrcmNJs7aN1jg2IFBmHHP7tnCg9Md2Ar568EtNaawfs8HmySWoRVPd9uQM9s9K9f8FeH9R8Y+H7TXvFOqeIXtJ/k8mwPlxwYO3YTycjHOAK97EQ9pRlTls7fgePUg3U06HVeNtY8I6IugalJZ6hDrRvra6uLs24867h3S7YcKAYUJbAGE3bTuJwK0NIuNMa88NeFLjxFc2viXX9eT+1LePLb42ldmBSP5UIJGxBl2cvuIUiuR8WfBbwPb/wBjy2x1dRf6hBBI0t7IXMbbt3BHB4HNNvvgz4Z8O6mbjwz458Q6JqdnieOTzfN2N2YEAH9fWvJWApqz5ndd0bU48tr62dz0f4sX0du/xA1uHSLrVrXW/Ec9/OFcxypE7yNHuTBZACyE5BJB9q8T8O+PrPT/AA3Bo9tYXNrLaIy3E2jb1vWbAMs6qXKoW2x5YjjAGOeZ/CfijxItz4q0fxprDXdjpkUdxd6lDamVmd3VR5irgSOyAgeYQEC96nuPCN940uLax+Elpq2j2VtczXFoZrNVgWCRUP2uSUtgknagUFyNvAFcrp3qyjXV23dtbbE4ivKtV9pLc8z+IWtyeINWe4sdOGj6bcRrb2WnTf60IAp8yRv4nYkkucZJOBjFHgNtUhvpLHQ4Ql5dQNDJJv2BIsfM5OcADvmuy0/TovDPxN0a6t/D93cR/arPdqGoy/aGZJImDzKp6E5dlVhkbF4yKwPBfibQdF1Cbw9reh21/ZR3c9492H2yNGI32x4Y7SC2w8kZxjmu+Fb2VNxorZaGUneHtInqWm2Wg+CdNnu9U1rfruq20jsEH2j7NEdqvNLkhlXkOFKncrZ6hc974Z8afDb7C01v8PbG08Q28lvp9si6b9mjuHbb5kokl4hIfcGfIIjJ6548o+Ffh3V/H/iDT9DuLGO1it382KaaPCW4kIVWnOCWQDJAwegJ6V9E+B7rwmsL+A9Ue11G6t4mvL8XpfNzZxDy4dxOBvwGwFxlOTyRjycViKkdXK76q/Q3pVKk7RlJ2Z4h488VeJH1iz8JWGkK1o93NcGWWFRDdRiQONgOWWNtr43EkluRxivTLG6vpmubdrCzs47pIbm10u3tSVsogWYG4kXYgw21d/LHB24xVe1+Hc3jDULy7s4bmew0eZcQ7v8AS4rSOQKhABBkADAlUySvspNbmpaTdWevanbXVwUV47e51OdkEICFNwhYElhEqZYJwxBLED5a4MXCUKMZwSW5jKPspq3U5v4qa3otvY3tnHH51pb2dzNNJNJGu53jKxktgr+8dSVQZJCE5rzfwDqmm2fgW2Sa2sr54rC9uZY7GPa00+XAkuWboyptQHt5owpLVX+MmueZ4Vms5bO1vZNa1Q2unE7Y5k8kqhYDbkrltoJYf6zuQa0LLwja/Cnw+uja74ojvdStphPeRwAKLAjJuIoWLfv1wY2JAU5zwwGR04Sn7LC8zere3cwn1ctzxn4g+JrrxdrklvappCW0FqyqbSExicZU4ycl2BwM4GcMcCvoG31b+wfB2u+D/D6T2WqeJ49Hjg0G88PRGZxZKXk1OKaMsIYY3TysB8ne7bTklfAfh34Z1bxd8VEt/C/2O9vIZ5L61hmge5hufKzJsZRgsh24YngDJOBXsfxO8VX3gfUJLqx8QWdxfX0a2l9qA+0R3l3CqAS2m1zuhUsdoWMqnltjHWvXqyjS5KMVui7JadTkrzQPiV8QNa0LxVDbypZafIsdvdWxWQwqHQtkkAbmkLsGkYszNgZxitq+8eeFfDNxPf8Ah/wTe3PiJDJpdtcSLHcwL5Ex3PHtG4uRtXzFGSBk5xXN6baeMjY39hDc+Kx4clZrq3tdLRHtjM43gsrNtDHCBSoLZ9xiuu+H/wARtD8O6PY3GgeBdWhieSRdSWCSUNbbVPmH7QMFpGHz44wMAEEk1z4hNxStzW7O33kL3jE8fWv9o+FtJ1DxBr1rp2q39lbyyxRI0du1jskYRH+Itu4Y8gEqDjArF0c3Fj4V13U9H8FX1hBrRitWito/tXl2m0P5fmMwk3MDl8AD7gz8wA6j4gX0l94JsJ9e8QStpf2x23jy5AWeMCELtbzJHKEbiFKquMDnNR+BdB1az+EM2v6O16LqfW/tkP2e4jWNYYl2ACNz5hYM4XfjC7yRlhkZwqKNC9T+b5b/AKA4uN0i38JfAvwlk8TWeur4gIuLfzrW6hks5J0V5YyyXBYH92F3JCBtLF898Gs6f4oax4R+KOm6hJqtsNKsna1F3Hp6ybraTaX8xCcGRSEOCQV8sDHGK9S8I/DeP4d/D3W/7U8SaVp2qQQzzyXKyARm4CjybaWTh32liA0ZKnCnqefLte8I+JfElx4esdZu9C1CB3NtH/ZEMvkJK6qD5nlqAxwC5wd21RkjOK441qeIxMqk5Xja3/BWhpadOUZdTrfEkfh+zj8OeB7e11rVNLuroanAbeKOBtVd2V4/MUgh4sKXCkEYJxUFhqviy/8AEl9q3iXS7Vo9GtpbaG0jZYLeDzGMqxq67CF2THJIPDNkrUevXWraDqfhvxBpN4kKWVyNBgfVbcmGBTHKizOhwiOolyoJ4XbuXI5ydDj0eSLX4fGuujV7Y6vHGp0+ZEbU1xIXcM27Ee6MsSoyxwMAYxNPm9la90/8xunyVHKW/wCpyfjDxJY23jXRnvtN0G+MUltfXj6c0cv73keWjqPLKrtUBdpGRzu7+beI7e1/tJo9Bs9QR2jJmjuk/eicsxfAHO0Ar15616XqK2C3Dw6b8JrW3W/mjhtDOgkjhiEisQEySHY/ISTnlhx81UvjNoFjpiyasUGnavFqI0/7JCXCNCkCu1wARhS8j5wrYx0HBr3MJWjDlp9bf11Jb5tXucJNpMMuj2t8utQl2jZWglkVn8wE8BRyOOhPfI7ZqrNNt0e3jXy8tL82Bl8Lkdew6da7DWvh9oNnY2M2k69HfXl+C0Easp8/hSG5KlAfm6g/wjrXHR2phuZI7yMReRJtePad2R1FdlOpGorpi20HS7xGqlkQMP3bFuD6njvxVjULjQI9K02XTdJuIL6Bmkup5ZNy3GSCmExhcc8jgjGRVOa4tVa0FxmWFNzMucBuTj6ZFRRv5jL8nmMSQO+wdgKtK+oJWLOozvJOlxdsh81Nu1F2hTkHOBwDUlzYX1ri5FiTb3BbZMB+7dhjOG9QTRiFtOMMlq8l2XUwzCUAAA/MrKfXjBB7VBuuEt5oVkdYSBuCZ2Bic7MZwOmc+1HkgVupEy3FysiyShVUgOScAHPXHTv+tdp4RtdWt4pZNGurpNJmjK3t9DZIZkAj3Sxqz/dBIIyD8wB69K5zRrFNUZLV7iDazbibiQorY52lhzXS69qT3GtXWlK1/p+i28zQ2thpcrSWQmA4XcWw4PJ3Ek4NY1pc37tAzlNQe8tdRuo/NMly0redlcHBOTuA/A1FfXUzLFMoGThWC5wSOOR3+tXWsrz7cLGa1l0+a5m+zrcSqw2c4bcMEnA4OKl8TeH7/Q7h9Puwq3duqvImc5UgEY/Ag44I78itFOKtF7iRn3lpPqFu2oW7KyrHuePdhkI4OM9QBVG3jlaESMwADdc9B7ip/tCwzrHahiX++rdB+VSyRsrMrLEkgPQcqce46ZrVNrQ1K9xJ5Fx5cUhdW+6wX/H9KhvGjkffuxIfmZTn5D6fU+lWBceYkatCilQdu0fe9/qKZLGS73F0y7iwz83LH1A9KtDRDatub95CWhI2lvf61eSKOSZLexm+bhVkK7ee/X8qZHH5Nj50alwJOcnhvw7VctnutzTTRws/G5R8zDoB06VE5Etq49bWO200zSbV3SeXCQ33pAfmY89vWqt5t80SRuxVhgbjzxwf1qa4gW6lu0TZaxRx/MJCxLsOvXoSe1Pit7/WIUtLKyeeZFG2OJcsSM546njnj0oo/FcadzP8wZ70oZuRT7ixvrPP2yxuLcj/AJ7Qsn8xUURVvusMGvRSYH0h8Gf9IXXoe83h2M/+QyOK+ffEKxtBGGc7wMhQM9ute/fAl/M1W5hbB87w6nX2DCvFdWto5LGTfxGqnnd6V7XK54ZxPLnLlrpnBN+g61atR8n0dD+tRSAKxbjHapbb5UdsZ6H6189H4j0pPQ62e38nTZpHUkIZlP1//WRWTHb3i2qSTThIyoYc9vf61u3xjt7MKmWH2hlVPYY7/Q1jySRSWv2aSEhkcssyDpnnBz1rPEfFY2qS5ox9CxNYrqEkD2biSaVN+GYDbjt7VGNyzJeXJZgkinC8Ejvx0/Gq9qsMzyybW2p/q23Y4GO31q5MtnHqkEdvHcNDIFEivtBDZ7Y4xXK3bQ53pob/AIj0+HQY4PKuo411dBcNbx/MkQAUp84OCzqxJ4GMDjmuY1G8W+0m200W0bfZ5GkV/wCLa3Vfz5H1NX9Ykt5tWaQt5XmyO0KKMLHkccdMHGOOn4VO2gXt3o82s6TpjzWtk0f2p1bcVL5w20c7OCM9jjPWlRn7Na9R0+xi6Vb7mFu0Oxd23ge3UUy+Bs757VCRtcZyOo7cVrafcWMEge5s5oWj+X5S20k57H+VZmszLean5zcE4ztHYD0Peu2Si43Op0rR5rkTzNdX3mHKg/e3n7xHU+2auQs0sUl0pC+WXXDLu+XtwetZ8+15BJErFRgKp/rWhDNFBHHcK0qSDO4IwPp/OsJabHPY7f4X6nZwza0l4yRJcaBdwRtj/VzbAVII9fmGfesPwfqWoS+ILG3ub6eSN3w0buSM4zzn6VW0O/sbHV5Lk2fmWksZ3282cEke2Oh5FN8OnyPElj8+8i4ClvXPGa7cNP2jjB9BbJs674uQSQywTJjc8eBuHcMeBXlmY9xaRcdTj1Ne4/EbT11CSzj8sBj5m0DueDj+deQ6pt02+lt0hR0H3dw6Aj+dPFw5KrOmo3KnTl5fqyTTbczRtdMzgIPmzzn6Vq+G/CU3iXUI7Oy3EGQkxqp6dSSe2O9ZljdQNav50zCRgRHGowrHHc9vp7V13w28Ra94Xvxc6DdrBP5ZDM0avuDdsEHqQK4acXUqcm1zmdRU05M0ZPg34hszIYV8zPA8mT8uDzWHL4F8Q26NDcWc8QjYnGw8/WvWYfjl4gjU/wBtaHompPnH/Hu0Lfiyn+lX4/jV4NuE/wCJt4Pv7JuAzWd0sqgd/lbb716f9mVLcy1OinmeCk7VIfc2eFxeFdRt/MWa2QmRQ2WP3c9Dx0/+vWfLY/2ZNukty5A+ZVORnvXtvxC8aaJ4X8Yah4bv/DKXUMHlNHcKwDujxq4yMDnJPSuQuvEXgHVGwLCeCRyBjPP9f51yToOLszsSwNWPuuUX96OC85LmQeTIF7eXKBu/Bu3Wq8cf2VnaS3Dbfl+Y8A9Ca60eG/CusXYt9K1WaOaThY5Iw3P1Bz+lc3r2kXOiX7280m7aTGW57Eg/yqFBx2MZYaycoO6RZl1JlhtlhUkrGW2AYUknkn1roPCVxod9Na2+veckLMRLJEcSRjjkA8N9DXLW4EkMQDDzISQ4x1U9Metdn8M9Fs9a8Y6fpeoW9w9ndTCO5NvC0siRMCDIirgkr97Gf4fSh0+aO9jDlP1H/wCCXVrLoPgvxHArLcWF/qYihuF8vKvGrYDbWL4YbipYBRtbaTur7tr5b/YU+HUvwn0Txf4Hka7v4Yr62urPWZbV7ZNStniwrpE/zKFKsueh7dDX1JUpWViTE8WeF7bxbpM2k3U7QLNGyeYiAsuehGfQgcd6yvhTp8Og+C7XwpCzuvh2STSfMYAeYIWIDYBOARg47V2Fc34SXydT8T2fTZqxlH0kgib+ZNVfQa2OkooopCCiiigAooooAKKKKACiiigAooooAK+PvjVpTWXxH1vkYmmW4/77UH+tfYNfNf7QmiyR+MJtQUErdWUcnTgMvyn9FrswT/efIip8J4dPH0z0zXiv7TWmtd/D/UW2n93brN/3xKjfyzXuckbNjrmuG+LXhPUvFHg++0nTdPnu57i1nhWKCMyOzmMkAAAknIFe3h4r2iucNVvl0PznlVoXck8jJ/Lmvub4Zqus/Dt7VxlbmzMeO53xkf1ryjRf2D/2mvF9v9q0v4V6haxOvmCTUpI7MEbeTiVlb9K9Z+CGl61ofhyHQ/EWny2d/bQxiWGQjPGBngkEH1rCMU/aKOxdXmhKnI+WNI+IvxC8JKI9E8VajHFENpguG86Pjgja+fSvoexm8VfEP4f6Hq2l3Fibya5gm1BbgFY5bdkKzKNoyp5yMc8V86eOdLOleJta0/8A59tQuY+PTzDivo39nW6N18P7WPdzCpj+m12H8sV4lFP6w6b2Pocel7FVYrU7rwLoMnh2xtNNnv5L2WMS+ZcSYDSMysBwAOgIH4V2/wCzLe3Fj4j0azt9SsoINd026s7/AO1zAIbaOWdpECufvsTGFEeM/MTnHONp4El5BGyjLSqp/PFP+Cf2WS88N6PNcXKy3FxPYxPHdx232dFuxNNKksikq+AoGxhyFHU1yYun7PMKb7xf5lU6nPk012qR/Jn6QafNZ3NjBcafJFJbSRq0LxMGRkxwQRwRirFVNKsYdM063sbdt0cMYUNtALccsccZJyT7k1brY8o/OsRnu3I704oTznk96kbauflBHU+9KF+YKvAz1r99uflFhipnG0fWk247c/WpVyrFWwTnIPenlRuPUn9KVxWIgobOCNoz2r1n4CfC2HxxrEmuazGr6PpUihoieZ5vvBMdlAwW9cgdzWP8JfDvgHXNT1F/iFrlvpen2tvH5Uk98lqGmZ8AbmIzwDx7ivoX4H6No+i6T4gtdBuPtFimu3EMEnmByyoqLyw4PIPNfJ8R50sNSqYWjdVNNeln2fex9Hk2V+1nDEVLOOv3o9HVVVQqqABwAO1LRXm3xe+LVn4DsG0vTZY5tcuU/dx9RbIePMcf+gjufYV+Xtn2pteNPG1jpen69p1jdt/aWn6TNeM0eP3BxtTJ7MSwIHt9K+RLq4vnkLfbpm5ySzbiT3JJq3beONXtf7U8yZLldaj8u+Nwu5pgG3HJ6gk4ye9YV34s0/zltYtBjkkbjEUzJj+YqHKMlYTuTXV1qao3lzbjj+6DS6fp6wbppiWkc5Zm6sfanv5clv58EMsTAbmVpdwHf0ry/wCMvjfXPDujQQaWyRyahJ5DSbiGQHA4/P8ASlGm1sLmudovjTT9T8WP4R0wi4kgsrq5u5UPyQ+XCzBc9yTtz7VkL8saqeuKxP2TNFs9Q8XeLNR1LE6ad4X1a5KtwXfYiAn8/wA62bhSsJI5wPvY/OvbwEeSLRxYuL5kxlxPDFHlmG01lza8sUwjWOQqy437eOOOP89q6e60XSbPwzLrOoRtdTTSJZWMG4hDJt3yStjkhF2jb3aRc8DBxLeK32mVvmboD6D0HpXc6ifuxOdQtqyWO4TA3HFPkuFjZmEZK461WZo2jbYS2T1qDz5wwRuVFVuIx/iFJrzaCJ/DNu0uoxzx+THxsfdlSHyQAuCck9PevL9S0tND1u8WOS0jnu4pDIbaHKsdqhSTj5SBnJAzh+uDXtrzRyBvMICFDuyduBjnmvHdYbQ9EsdYv54Zbp5EkMlrHIzP5LnGd3KqTkLu7LwBXxPFsKceWT1ctPM78K7xseK/ESTSdDj0L+0pr7+zpoGnklhmVpjcLIApTAGxVAcqG65J5615LqHiq+1u3j0fSYXhTcWuZNzf6RIW/wBYw9eevXk17D8SNJtL74NaXr6ySx3q6hBpdxaSIAyeRbTsGxngBZI16Cuc8A2MOn+FraCayg+2SSPIZjH8+xv4c1vgcHGnTimevKcsLQiqel+p0vwuMl1o+seD9aa0vxa2cMWxl2v5ON20t/DzwACM4JPNex6BpNnpF35elzaillHGLfazt+7KE72aT7rYBGAB8u7B3V5R8JZNOt/Fmv3Mdw9xepNCZLO3BjaKNVGJ5ZT8rIDuAT1OT/DXoXh3UrbRG1S40W8uDL9uZzDeARQeVIXDbnBChXYhieQOx7V8zm9B0cRNW912/wAjz2+dnn3xEmul8RXOpWulQG3hCDULO5lRp5FaQKoiJAJYqVbKgAZANUfjW17dav4h1S/t0t7y8vrgyR42iMb2BX3wBj8K7/wZ8INU8UfETw9qPiLWJmvR4itobuWSQFLpFljk8vJIARVJQnp8vGQM1zPx4kXVNe8XXgAIOqanMhxn708nT25Ne9k0IwouzTPby+ny4erLqeZ/C3w/JrfjSHS42aJI/KuGdTjaqKCT74z0719I/CfULW01bxn4FMKiLTNXnurRCM5idyHAz23rn/gVVf2Mv2dPiX8UPHl5r2heHZItEi/cyardhorNWBTgPj94wx91Mn1x1r6D/am/Zr8J/st+GPD3xe8N/wBo6iF1a5j8U3sjKXnFzhoVjhyFVRKpA64ydxNetUUZU+XqePVTVR32OC+KnguSxt/CV8sKql1qULL83A+SQj+VeffEO70jw3oOpeJtQjhyittYjJITp+ZwPxrhfjZ+2he+MIdCs/D3hvUdOfQ5EmR7y+3pNIBIGkKIAFJWTAC4AA75rkPCvjPWfj1q2m+D9cs1t9O0+Y6lqk0OWVraIF1jI45eTavvk15+Lj7KjzSdktX6CT7Fzw34ZuL/AMA2xv7630+fxHPdPrFxNE0iBbpImtmUrnLoAVKBSy/Mepqfx34XupZtGPh/xVpdrYaTZWlxo9knnk3aISfNkhfLYUGRnYjoCoHr6B9i/cweLPGCG2iIkjtbaK3VIooJQwkbbjG8s3CDOVO4HnnhNS0/S9U8YaXa6RqkhmeWZzd6ba4Bs3UsgVGAZI5MsRzkBwQeBXzWHxMsTJzj3foc83766Hn9jcWPgW+1OG+1DTdVklvGuIpLS4l8syRFxFsDDDhmlDBiMqFJHJqCz0PxR46aXxRLYBtLjlRLi5trdEiik2bQoXPU+X90devesT4kahpc3inU5ND1Ca+sRN5drNcQmGYqhxmSPc20k9sngDvmvYvg/wDaG+D+qtbW4luRrFv5f75wYldU3SLEPlZsqFLNwoJ7kV6eIvQp+2+07I2py5opS2R6Z8F5Lj/hD9T8WzaLcyzX0v2X7KzqbhoUCrG2z5VQMvmqC3A3E9s1y2peMtQ8SePLSbR9FsZdb024js5YLaZhNPbvui/eMAFYBCn3W6ruPWu8tJNdvPh6s1xDPb6VM8aRn7EIrx5drY2bRvkhG4tuPcDHPThrHVtF1zw7qGm/DXweuo32n/LJeWI+zXAV8AFvn3bjhemCcAbRg58ec4QnOaj5eRbqqNW0emx6z8MfCPjTwl4ktppNUuftFrqMNhp88999yNSXEcYDEyA72jyoODKVyBkV1vxUbT9Y8Yz628dpakxyyXMMN0ZvOWOMMw2MD1xls4xt5JJri/gjqc2k6TfaH4vsZ3vopW1LRvMmk8+Ke1hDkmbYUEMm5VYZALqpG3GTe1D+y5tPbxVBdNJcHVXm8+eIot558QXZKA2fI2O3ygAksATkAlYyo6mHjGMl5m1Wv7S3Loz56+LXhXT/ABR4k1TWtM0HUoNUht/NjsdLWSRLeSN8vKW5EaxIYztBLFiOpO2uS+Lt5J4d1ZpPDuvX2p/a95ukunaWeWOVQI5PmG4FgDu5JORwMV734l8OxqLu5sNfu/CWi3NwtjJe3bLH/aJX5Cm7JbDEK+MLjb1JFfOHii8k1vVI9ZudekubbSXt7aO4uFjjnmiTaucITlQqttGS3fFdmBre3tHpH+vT7jhknF8xr/CnwfPpNhq/xS8YaNeWPkQK2kqsMsMPL7ZJhsILlOojGQD8zDaK0/EHiD4U/ErxTZ6lrdjrAlur03sl9Hjf5aqubXCsVwzlyXCg5bcScmu3t/iF8Q9UsrHXJobT7ClnNYWcun3bLZeREQXknJIADJgHOSSACc8V5BcahpPiPxFq1lpdrZJNdeZJ5sEZi81kKlRFk5EjkbVXplqdKtVr1JSqKzXZ7IJPns0eq/EjVhouly6fPJ4igafVGsrK3baXtbQ/6yQFG2SSPn5R8oGDnqTXO+G7rwbrFonw/wBE09VvbuwjuL+e7DtNAscpLuTvEbyMrFycqFSPCnO6sj4o6brXxE+Kkmk6Doup3IsWAvI2vD5OVXDu8pAWIEBjk847sa3PCEmm+BW8ZeC2ea68RWkcN9p6vDE5uJkh+aMvGSzbN6kR5I3Kzck4Do+5hvaPWT1t+H/BFJNNp7jfGPwX1rxxpLeLtGaHTYLO3+z2MNzdpKFt4lLeUzhV8vYjKAvzlVGC3GK4f4N2Otahq/2fS9NWfU8eZBdahGXhtY0wHkADAsMHB3ZX7vpg9hr+oXuvaL/wk2pa1pGiaTpSLplrBZyTxRSHcuWEKcSEBmAHAwH3EtXI+D/Hdv4k8RaRpPiqS3i0xcee0Uj20cCAfMpEY5BwARjvnmrhOvUpTUtV+X+Yo3R1nxo16S68TafeWOpHWLm2VbtbuFQYHhAjcIkQYgiMsygHnGFPOa6fVvH+j+A/EWg6TZaLqFuLqVLOfUbzNvutJidqQ2wwI4QCjksNzFcnOcjnPEGi21r4guv+ETYeCEtIYjPLP5pleKRzL5hGQdpwEwM/MAABVT4m+HobW/fVLfUVl0rSbe2ubXTLtW827h8kguQcMqkqVJ45PQbRXDCnRnCnTntr/WmnyNOaSlz9TqPjV4wupNAHhnR7zw7fWemyXUdza2YKzDc2PNfBG5WAJLc/6zPIINV/D+g6AnwrufEfhDRFuCumPEs88flCW5dNspTDlvkDP1ABIBOFGK8bXw5dzaGusSeH9Sj+1LPc28tvAz2k0ZDfuwwwQyMCOpHGMHFenzaX401r4TaT4kjGg2OkWmjfYbVRZ+TI80W0MNxwHmkOSex+brVzwsMLShTpz+1r5/cEr1JtvdnF+JPi94217WtPTSreXT4tGhSayinVGaOJSZBI3AU53nJx0J9awfHXirxR4j8y+1fxMt4+p7bi8gXKqJBkISpHB29CD90123wJ8Di/i1PxhqzxLY2dvNBb23mxtLLMqgsCrAkD5kxnHJHauA+JccI8ZXNyunPaecwuFikmWQbCqgbWVEDc5OQoU54r08P9X+sunSirxW/6D9lNR5raFO1kiXT3vJraczWkSi1bztihj1ZhgnPUgDGSBk4FZdhDLq1xM7XEcW5HbfNKEUsFJOT6nsO5NaOu+I7jVtPjh/si1tkSYMZVyXfC7duSfu8Z2jgEVHprfZ0DXlml3avC4kiVQSV6nB/hYYGCORXormjG7WpKWpVt1KaU959k86Erg+aQNuMZ469xUVnb+datLHbsXZhs/H0qtNtt3klMbKpGBExydh9x1qX7RNbWm4yDB2mN45M7P7vTuOhrWzsVymz4V0O51rUptDW9sLBwjvPJfMFVFjwxUN/eIB4HXkVD4kk0GO6h0/w5ePPaiNJGZoWQvcY+YYbnaOMf/XrO0+8utP1eK+t2jknR9+6aJZIyTxllYEHPNb+oaBZw6O+u3GtWUtzcXgiksYEAkBYM5kTkBUXCjGOrj0rJrlqe89P1Jtqc99tkby4VQgK24Y9enArq9H8aHUtUsbPx3qFzL4fiZPtEdtbhpdkYYqqAFcE8IWzkKfauOjS4hu4WiUHJ79AfY1r/AGFv7St45IZVivQogV2A3s3AG7oFJ71VWFOXxIDq/FuuXN5rdjrj6tMFSbzvsshYiAuNzbCDtwoOOCDz+NF/pvhbUvCOs3i6wkd5Z3Ilsd1uyPfwOzgMVJJXBAG3sDkmp/i9osnhG607Rby3JvI4Q87MwZ2cABlYglflOQAO3WuEjkk+xzRvFIS+SrK3A6HaR6VyUIKrTjKDsv8Agjtyv3iosYjklaRSSg2n2OKiW4m3bbeQtt+VeOD+FWFWO4trqaN2U7QcehyKgP8Ao6qvylgcsOteitRp2ZLEjRrKJiY2CEqw+7njIPoar+ZBMEZm3SOTwM8etSyFGSWOSQoUy2PXPYUyGOBYDcMseYl6A8sTTK6FmG4aGEae20QM3mF3Tkfj1xxWjpo2THC/NKN3AwzAckjt0rJuZLpmhkVJJIFwSD0Ge3tWltEKLfRzTReQwljcEZJPVfX0xWU0RomRedE4mkkljnkZg0ZYH516FT6dqs2skdhrFleW08yIrIwZsKwIxuGemM5wfTFUby/WeWa/m+a4mkLsVjVFGf4gqgDJ+lehR/D3XoPDum6tc6PNJHqGxZllh+RopFDKyMMsXVTv+UZwKzlVVG3N1KR7L4V8QeGPE019tuLO8jhRI44QpCsSu4kE4ycgg1u6h8K/AOrx7rrQbWRgPmZIwGBxkjpnivmnwTr7eD9YvpJjIYXhkgWaFiNucFJADjcpwDg46+tfQ3w/+K3hDxVJaafb3pgvHhP7u4+WRmj4ABHDZHPrXqUarnHcctC/oXw7svCl5/anhu6+yyfZDb+VcKZYxFzxwwK9etUda+H2ma1G4vPB+g3AclTJDI1uT7fd9+ma7y/WOSFJo5hiRgr55UDBOfX8Pes5NPW1nmuP3wacYZVbgsoxuQHgcYBHtXUsRVjpfQz9lB62PBPFHwBsY8y6f4Z1a2PPFvcrOB+GSf0ry3WPAOoaP5ivHdxr90tPasoUj1OMV9i6jqHk24kt5I96ZVkY8bu3Tn/9dc5qWuLJbtHJCxVlCMu7O5uck44Of6Vi5p9CuQ+WtQnJs0ZDnExY4Yf3B/hWDM25v9YV3dR716F8SJl1TVhFbKFaMEvhQOp46enSvP4beNZn+0qJAufl3YyfUnrxXLVlzSuaWuWtPaRd0fllozwxxyp61fme5jmDbVM9sg+WNtyup7E9iKr6gf3fk2n+pVVYrHk/iM8mobYSR/vxMA7j5OMg5/vZ6Dr1rla5tTNq4nmSMsrSOFB+f5uSD2xXt/i7xVZt4C02+8K+VbsEX7QtvZjMn7oJIjyLhcZAyuOgHfJPld/Ytp9vONU01IbowxXCwBvuhxwTjO3cCCMV3d74k8cax4Tt/DNn4aS001rWKxjsY7ctO4jHmF+B8xbruPzYHHFefjFzunJdH30Dl5JanHa54omuFhSNVtvMVGIUAhtv3Tzk5/HpWTql5eaxci9uvLMqjaSqgdPp1qK8/fbF27BAu35lxjJJ5HY57VXhklW3YrMAGIXaf4j6/hXqxd4lRu9ytNdNb3A8lcFe5HBqxYyOXadoY5FOcjGB6/hVKZGWQrv4/wBqpIJFt/nEgDAZ45NNrQTRqrbyR2K3Um7c0o8plOcjuD9OK7PwPJFqswsf7BTUplYSw7FUSLt6/NwQc4PpXHNMl8y6hFMIpI1/eq6gKU7Y7Zz/ADra8N+ILnwzrH9oWCrnaq7G5GWHfB+6aijVlSnzDhP2ck7X9To/Gl7rTLbSSWN/a3UbMn3TtClR+H415hdNm4l8wlizdD69TmvbNQ8Trr3hB5pm3zvwyhQpjzwNpHUZ5ya8ZmmtoY5otgkkZsKzfwgccV11pcz53rc1nVVV6Rsl0Rf0YQNDtWNmErhecHDentWj4VaS31KZ5m2kkqo9G7cjuKwLFVhYNJIqkMG2nPJ9sVrWixzXe5MGN5jKuxiNo759CDXNB8lVSOWrG8Wu50kikbmduQeuOtVb9Wa2faPmUHn14NXpk+fhi4b5gxPWoJoy0T7Vxx3r7WHvR0PnE7SNz49KJPHNvff8/wBomnXA9yYQCf0rzqOPdPGvAJcZ/OvRvjKpmXwTqW7P2vwtafMe5QstcDp6+ZqNtHwQZFzn0zmvAxEP3rPpaLvTR0HhuzW18S6TMF+9MV6e5FafxR0sNqF2yxlTHPIf/HgR+hqCxbZqOn3C/wAF7gj/AHj/APXrpfi9CsNxdXC9GYE+pDKtN00qTZ6GAlzSqQ7xZ5Kqsd25QJF+8BXQ+H9Rmt2Lw3EsPnQ+W3luVzlgcZHuAfwrCmYLdBlwxIC9eat2k3lsFXkK2PrXDFo5r3P3H/YM8Y3niD4O2em+Ktdt7/xRbILibfI7XZsXZhA0u/rhllQbSVAUY619L1+CPwE8d3/hvxJFcaRr9/oUzRhVntZDGXkB+UEjnn0PGcHtmvsvw3+1F+0R4fvTp8fjWLUkA8xf7WswwZeOBJwSc8cHsawclcv2blsfpHXN6LmPxp4lhzxJHY3AH1R0P/osV49+z1+0Z4z+KPiR/CfjLwjYWEq2Ml1He2U7FJCjICpRuRkOTnPau18dfE7wX8KPHaaj441YabY6zpsVvHcNGzIJY5JDhtoJHyv19qZPK1dHqFFcn4d+LHwz8WKreHfHeiX24ZCx3ibj/wABJB/SurVldQyMGU8gjkGlsQLRRRQAUUUUAFFFFABRRRQAUUUUAFcz4v8AAOjeNAq6rJOm2Py8wsAcZyeSDXTUU4ycXeIbnDaP8FfhxowUx+H0upE/ju3aU/kTt/Suws9N0/To/L0+xt7ZP7sMSoP0FWaKcpyn8TuJJLYQjIweQa/M/wAXW/iLRPHl3b6Hp9neeWs0M0E8picmOZ1+VunQdCK/TGvz1+Nul+KNN+KmsXHhfS7W9a11O886G4m8rckjb0Kt2PzEc134Br34t9CJpu1rfM+M/it4T1DVPGWt3SrFZXd3cfaHsLiRd8RdQfvLwQeoPHBr0P8AZzhu9H0G50bVEW3nWaVkjaRSWVtpBGDzzurlPjpo+ueIPGUmpXOhNpl3NZwq1pLMrMxTK71I6qccH2o+A+lwedqGj+N7MBiyNbC8k2kAqwIRiR0IHAPeuTWGL07ntVlGpg1zdump9Jaa23UrVjwftEf4fMK0PgNfNofxHsJP9IIhW8EaiMyMi+eheRVO5ODtKAhR1LHgV53F4VjsZkuPD/iDVbBlZZExP5sZIOeQ3B6CvQfg67N4/tYdW0rzYftvmK1rtUyRSzqX3uSW5y25AOQ/VQKePw9SWKp1pR0Sa/I46VenDL6lGMrtyi7bO2q/yP0bgD+XukTYzfMV9Pr2z9KkoorA5T89gvUdc80uO/p6j8aeq7lXknFOClfvZAFfvVz8pZEF6/LTlXjipNv8IX8KAAPu8fhTFawipGAFZdwz3596+rf2etD+z+D4PEhuJvM1RGEkW8+WSkjKJNvTewHLdTgDtXysFbj5R6V9Q6F440v4Z/Bjw9cXW2W9nss2druwZnYlsn0Qbsk/h1Ir43jNqOEh3cv0Z9Nw1d1p9kv1Oy8dfEDTfBv2Gx+WfU9UuI4La3z0DOFMj46KM/ieB3x8r/GW4/tD4leIpGKnbe+SDn+4qr/SoG1rWPFnjey1TVryWW8vNQtw0mcFf3qgBcfdUDoB0qr8QGEnjTxBIo4bVLph7/vWr87pRVRM+uqPlRyFzbyOrKsjL16E1LoumrZxefJ+8lbnc1SSrkFsY9MUwyXAj2rIy4HUHpip9ly7EKfMa2m3Ud1dXdlI+ZEtGl2jtllXn65NeS/HjT7iSHR4wh2ibczfgcD9P0r3zwb4ftfh1oeqeIvHdrJb/wDCVaa9vo5liaRyyurPIVAJTgqVY9f5+WfFOzXxLe6b/YskdzBG26bHyFMZHRsevatqVOfLsTN2kbH7Oelrp9j8VteOxVXw3PaJhcKN8qL+fy1HY20V7cJatkrIwQ/ia3PhVHDo3wl+JU2oTQWt3fpaW9tbyTKJpgbolii5yRgg8etc9od5d2mrWJW1M6m5iUDgdWA5zXqxShzcvl+Rzzbnym78T7Gx0m90/RNPLC3tvtciqzZ5M5j5/CECuOYMY2KqBgfnWt468SS+IPFSMLG4hjFnuBeMgZM8xIOe/OeOCCOaxt27O5cEDrinQ+G5nNO4yNmZTG/ygcnb/hTJvMEmPLNPKRsGKht57D1pfMMjAlWIU84NbElPUBa/2XdfaYx5QhcvkZBG0mvHNW1BdM0e+vFjMskMjAskJjkc7iygcf6tRgdeRgHJzXsOvNHJoeoW6RhC1u+C+NvTnIPFeF63q1jbWt5ZmNLh7mwuZriGP70alRtnPO0KCnHQ54r4TiiSli6cOyv+J2YfSLZh/FTXNN1D4M6dpcMha9TWLy+mLRqD5X2G0jjyykhiSJWIHTcRXCeGopLj7Napj95iNSfU4Fdn4qt7HUf2ffBuuKkv9p6hY6jHqHmKqhWt54oI9ij7oKDn1PJ5NcdoPmW8kTx8eW2VIHo2R/Kvcw8ZRpq+56mJl+7gvU9R+HngPTvCnjvxNpMd4dU1i/hsmk2RPGsDqSZIc+iYVzJ0YHjoa2NN8K3mhaxq+77Xqd08hvLq6ljijjlQhnS3ickrhSTk9chuBgVSutdvNH1LxZ4yhltr/VmTzImjZtioQCIWXGDLliduWOCB0yKq/Dc6tc6G19cyarq7myFzcwSXipHAJG/eDLHanCgEEkjdjaM18Ni8RWxMXUrS2X/B+444aNnS2fiKx17xPNaaDqiR6WkKLeXMM5iNoVjJ/dSLuBZpPkPp7hq9L+Hfwq/Z8kvpte+LcupS2yWcNxa6DHkw3bDcGE8yAlVynzDILbifY+KeHfEWpahoccmk+EbGxOq+I30+a1Swj2NbwomWUkhgR5nBPy8OepBrvZNQkaOzs1VJZL6Y28kPmDdJChIcrkjk7ScDlVA45zXHDFYrB1r0Pu/zsdFKrUpLli7XPorXPjI3i7wnHHpNnNoFrolvCNLs9OjSLT1XpL5LbVbcm1cZORvPBrxj43/Fq5+IXhvU/C/xQ8Sanf6ZFp1zcWiW67yZxtVG8sMORJjBPbdjJODl2smqanZQaTPOIbLRo7p7WRbfIZN29wCMF9rSNucj7qKuTjFYiast14mvrH5JglkDZiNcm4GA25iFIUllb5Scg5FTLHSrVvbczfLZvUFPl91rdHw/4yskt9U+y/Y5LZ4srIjPkhu46DGDnivo39mfw5Z+C/AWreKdU8iSbxJHDGsRkIMUXmFYg4UHG9mBHfEi9K8//aA8Ik/Ea08mxe2/ty7EJhhiYsrFlVtq9WbqeOpzivqHQbG30e/Xwnpd4sVpplvDqV2QI/mtoyoSNlP+rEikEkcgR8E8V7/EGN58JCMftq79NDn5nDVbnlvxKt/O8RPqHjLxBeaL4ct0t7OO0hmYmW4wWXbuBVUIXlsEAMMAkAV534k8Xabb+Etej0O4WKGPVJbZbaaGQvOpjCRuOF2o3zkA8AJGNvJx3X7Q2uWo1DTfBq+GYtWj14Ws0371VljnmlXZ5boSEJXbgNt25bqDXlnje1sdPF38M47q5kt9PUXTz2kK3JeKPfOyyOXG4Qh2OV5IYjsK5cninQp83VaLy7mTTqe9JnNeE/hLr/jTS08QWd3aW1rNevp8BmYlproRtJt46A7TyfqeK+kfh/DY+H7TU/A//CUNd3MKjUnWBRDhEVApK8qI3QIoyctgsWGa4KzXwH4T8LxS+DfC+pWjarZiS11m+DSbDJC6q+0HYHbBDLg43LncBmur8L+D5PBfgkXljZtrOp6vdwy3NsJAk05GSEdSnyeWJFbYBt3ODz0qcwxEq6lGTaXTT8/Q2cE4LTU7rSbWaT4d3mtW3iTUb661WVJLXepUGVCG2QoBtXcd2TkAbDwa4Xw3DrF1b6hpdvpLaFpeoatKytaxs0kg2JhPtIGAyZIzz1PFR6pfa5Z+BdPk1q8/snT/AAxrTOun2V/9olNtLK4k4UgH5hgZIyoHGM102hanYa9oayQ3k7eFbKPUJLe6uJtlwUDgv5KAgYBDBTtGB69uFKMYTlU1u/y28ga5dGjR8I/Ebwx4gttXh0uz+yQacwW8fU5gIYrdpyvlvIvL5AYcL0Aq3orWc1pa6Dp2hau+m26tf6RqFxDi1unjnPnOkh5eJFZVUspJVVAAIFUrBfDOk+EdH1iTw7pxh1CUww26qXa5RWBD3CoACTmP58fKcDkmqfgnVLjU21CLQtPSOT7PcafpNo0ckcBfeq/LAxJ+V95x9WO0DFZVKfs0/Zp289v+HM4StJnFfFPwba6p4kt7ePU9SJv5Hs7DzIngs2uCFK+WrE7UUbmZ2XjGTnIry/4d3WheGfiRp/hnxX4XuPLu7z7LfTzu4aS3kYBPKiwMh8bRxhg+eK6j4waf8WNe8RRa5rupNF/YzRq0yt5MEHm5UiBWO5shT83Q89Byew+FcOn6vc3fiTSY9Pl8Rw38en6pqdxdCae4jXe0kglclYElUqm1QSQhAJ5FerTlHD4P99K6a6dH0JTSfc6Dxt4s8F/Cu3jtNP1oeTbXhWOzsoo5DFAkbKJFQEHyxLuHl8A/OeuBXynpvijXL7xwvjCztBBqT3SzwLaRbP36sGXaijHzNjgDnNeo/HbWLfUvFosbPQoLO6tbjzBdGIxKVAwRIhB4JG4AnIBwc5zXA6HpVjZ6JH4suNRngmTUtlnLExh+zFU34WTkFwSPlA+U7T0JzvltCFChzy+JoqklKpeJ6Tq3hnx94kuL60t7qG31HxBebdVsbyeS0OlPCpYI48z5wYw2Mqcb9oOTXbal4g8D+H/Cfh2GSK88NR3DvJBZp+/uJY/kkXz+GJSRXZ3YuSGCqc84zfD3hnRLjwn4u1K48VX1/YzSnU7q4k1ZY7hvJXMcQLYMzSN5e4gZGAMdK8m+LHjjR9c0+0sdK09kiOLi7vJPLWaVlAA27RlFCE/LxksCckZpKm8S40+i7adDTE0pQtKXU9D+IjaTcfBvSNU09RLayqmmGJEBIjN07uYiV+WRjGCeOA2BnqcX4O+E9W1xvEWneG/DfhzUotStLTSftV2xP2GZ3fDjeMgbNxdwBjKc84Nf4peEdL8HfCvw9ptmb2OW7vkljS68qS5nSSISqf3Y+UKHA2qWGZFBOeB2Hh3wTqXhnwVp2g3b6xo66tqQN1FH/o1zLHsYlp2jzujVRuVW2t+7bj7uc5ThSwsuWW7dr+X52IcW2l8tDHtfDf8Awkfwxl1DxJePqkGmp/Zm8bEW4EM33Y5BhmEaAkA/OzSZ2nDGtv4q/Ea78Pxabaw6Pf3F5BY4v77UrUQGRJcGOVPlUPu2MqkjAVfU1Q0L4ZOt1pcfia+nl8PaHrcdv9jnuP3F1lnjLJHvwP3shBk7YfjGTWd8RvCF74t8eX9p4n1G60zSdGWCwuTBHJJsEbBY5WZg3LLKXye3A5YVnGVGpUUZy93Vv8CIxqQuVrf9oTxVb6P4b0ewuLiSy0iE2xulhZJHRY3WCPdzl1V5QdoAbJ5rltc+K3iDWdUgt/DXiDxFLZpOt7bQ3NwsrQztCsczMoXaE+ThQCFVR3zXoupeG/ht8M9P0fVPF13rd19mlaOw0ZmZbkRZLruC/wCpBOHbksxOAyg15H4g8UXGoeNLprHRINImvtlvHFa2/wBmVYS8ZiRFflP3aJh+GO4kkg89WDhh6/NKjT011ezZKUk9T0J7q6+HfgfxB4T8L+LINZ1a4aHVb28tn2LpxBVnWB84kZj5XyrydvOAOPIPHPirxD4k16KXxVcRvdWUC2qsq42xAZC7urEEk5PcmvZ/jd4f1jQYZNXaa3e3v5LeIrYtgGN4ZJGitpgB5iYdt5KDnbnNeVeLNN0XWtN07VdLuobO4gjFrc210GXDBsL+9IIkcrhic8AqO1dOCcLqo1dvrbr8jWFSb92+hm+FNAbxJdS27XKskNu9yVd1QMw4VQSQMliB+J9K6ptD8K+G9VEd1dXu+2tIrz5l3RvKWx5RxjaoIO5hnOMcVg2WmTWvhvUrv7PamS5iS34DZjA+cyIQcbsYUdf4uOK3fCc3hrWLe8m8XafdXUbQSPJPDcNG0e3lssQd+QPlHrv9K6689HK+nkbLlhTd1qcrqS6Dqkeo6tb2y2cz3GbPT7UM0SQkHqzcjGB6klvrVTSfDGvahpY1O38P3l7YMWhWZYWKGRfmYKR/EAc4rPupbWFpJLWacp5rRx4G0MgJwT6HGPzr0PwL4b8XS+G4/FWnXDf2Xpkj3AtbwFraZVU+YFQElicgEgDGck8VrOXsqej+8xbSRxGj28l3dJ9nUEDEzRsu4MgIPPtikunimvp9SZVkR2YbVO0oOwH0HSpm8QmSzOk2djDbRS3Ulx5qth/LYAiEn+4pHH1qtJbR29vFeZH75DIilT93JGc9+QRVpO95C0RWkuvOkEcCvIituX1C9ACBxmt/VGuJrS0utSeX/RE+zxxScbY1HyqPTGSMf41h2tmy27XSvsI+6OhJzyK2NU8TT32hroBtYVthcfanuXiH2hpNmwgv1K45x60qiba5RpRb1F1PXrTUND0e0msZU1C086ORlVRHPE7BkZud28cgnoQF6Ypmn262t88N9Z+cGXMcYbY27HGPzHrWNJJGJv3EjNGrcb8FsV1niTRxHbaPrNncxz28tsvm5kXMT5wd3cE9RmpklC0V1LSlU97scp8sXmtb/Ln5Wj6kHuKb5LyRK24eY7ABD97rjp+FMYNDIzK65L8Y789auzTSzW26FsTBd7+wzwR6Hrmt9iOpTaMsT2bG0juBU32WGQjzmRH2gKduFYgc/pSW8kkaxS+WuImAbd0YZ6fj/Wrdy0Pkx3LQo48wu0OT8uTwBRKTC5CsU0mMunkRHCtnAbj9TirdxDZHT0ninBmUhnhKnIU+hzzjiqqtHxuVgDkbWHA/HHSixtJr6aS3t5NzA/6ocE/T1qHqQztvh1JZ6j448Ow22h+HUeJZYm/tKRzb3ErZ8t5VPDMGI2qMZ4zW742l1fU/EHima9Sxtbrw/iC9awU+Q9wztkhecIDkZGAOPWuY+H+tzeH/ABbp2pW1nGpt7owTubdJv3cq+UxVZPlDqGyCehwak1qzuvDPivW9IEksCEPHcwhtuYw2Qr4OD0GcEjNebVhzV/lp9+pUbNanNedJJsWa4UDZtQddox938afY3S2N6skUj28qNuR42wQw7/y4qsZC/myKwCtllyOMipp5IrqGO4hYZaPbIO24eh7mvThLlC57R4P+PjWMC6f4lhLsmP8ASInABHuo6nGO/ODXVWPxs8P6pNPZtdCOBtgtbh+MyP8AKd6dgMjkf/Xr5kjj2Wjy9Q/y9elMjmuoX2rIyAd19CO1dSrt6DPqLVPF1tYRvb3F5ZFHKrv8z5m4H3hnPrzXnPiz4iWMNrNFpjpPeylodytgKpzg15DJdTK370szHB3Z6/5xSSxxyY28YVcjPeh1b9CndE88l8sTT/aTJLKeSx+YnPr3rPdWWVAy7iXPmDdz+dWJlVYyjZDDgYPT8KrrDu2ws+NzEDistwua8M0UKl0Ekf7v5tuDz2HtxQg864is7W3PzRqFVYiZJSeuAO/86pnY8vlxqXdR074FWfPaO6R4rxoDGT5PlSYKE4zyOeorFxJT1Ol8ZeDrjwt/ZZt9Tku7zWLVbq1t442Mr2jEqjsCSQWKZCnnAz0xXpX7PeoavoviG4sbqGGzivdOkWRbl5DdXpRhhI0AJV8PtBXb8qnqeK8sW617VLm102aJL6WxhdY5lnJmw5yq789FY8DsTjvXQfDOTxZ4s8QRTabcWEN7ptni2uNTufIiiSMEmOMkqgcgscMeeTwea87G0pVcNKnN9NzVcrmjI+J+i2ugeM9Z03SVlFqLndAZGLMwI3btx6g5PrjpXGNdOqGJl+Xdu+hr1n463WoST2VrqbW5uoUEgNvt2CNh228EHOcjOTnk5zXlEZPzqV3EjO70rry6bnhouW46i5ZvSweXHcLy33sc9Tn0FJaxyfaRZrF5gJJGByw68U2ybZMIwxXe31xilaaR5laGQRyI20ep9Dn+ddlyDbhtWms/s7wJydiySZwufp0xUN5FKtrattZypZWkXGMjgjI9Kg26gvymUou3c2DkY75H+NWNPk8uNVusoPvqxXjHfBFYNNak3R01no0moaDd6lawP5dnAklzNHcrvUM4UYhOC/B6L/dY8AVxV7Zql1sF0skcnzRTKMLKvZhnp9OxyK6DT/El/pLyazZ3CwzLlIyE3EKcgnnjPNc3cSOoS32xsoLOr+zYyPbkfrToyqXd9hxehIyzRyYjyJF5x64HX3q3Y3k000nmSCCRl+Ztmc/l61UZpvOjmMmxtuMsOw45qS1a5WRrkSKyFShG3HXrWr2Jdjv7SPNjBnOSg7frRLBtVunTj3rpPhLqHhO6zoPi7wyboTZmhvft3kyxnABjwSAwJBI9zivSm+F/w71ZC2n3niGxJBH+rW4Uf985J619PgMXTdCMW9UeHWwlR1HKOx5V8Tk8/wAB/De+5JXTbu0Y+8dx0/I1wWjru1JG/uqzH8FNe0fFjwTNb+B/DWg+GZptdbSry9aR4bcq6Ry4cAoeeoxXkNrpmpafcSNfafc25WM48yFl64HcVyV1zVbo9ejpTSZrRmaLE0nRLmGVOOv3fzrvfiZAt+pAKgSQQ4J5/wCWeP5iuE1GZf7NXn/lkv6Yr0LxUy3Wm2Fx1WWxibgZyMkcfnWqjenJHoZa74i3dNHi9yjW8bKpRpi21/lz+P8AKmQy7cLt+YE9+4q5eMtu22TO6QHcqt6HkY+oqjGys/mLk4PVup5zXhxXL7pm2j0zwDFcXobS4hAftChm8xMnr2J6Zx+leyaZ4Evb+ONr3xVdEISrpA+D+IGK8G8A+JrfSpLi3vY3dblEEToRmJ0bcDz1Fe4La6xrmmjUvDN3KSGAkWKEs/OB8o43fXnvXHUbhM6KXvH1H+xHaWPhv456VZQ+Ir6f7XZ3luIJpXKt+6L9CSOPL7V7f+31fQ+H/CmheJLi3M0cVw1u6iMvkMyDoAfWvlT9k/QdR8O/H7wVq19Jezs2omAySZ2ZkieMjjj+KvtD9t23X/hV1rqUlsk6Wd6GZHTcDken4VtTleNxNctVH5/2vjzwzqNy0a/D/U2wPlltUEbDPccqTXbaD8RvEnh23juvCfjXxrpXmNiKN/MKE9wCcqfpn1rP0/4g65qkx0r4beA72bWRtRZLRJVO7pgAc/mK1/G3wp/aI03w3YeJvGNjcaLb3mpxWMUcs0fnSzzZKKkPUc7vmPPtxSvOS0LtZ2kej+Ff2qPj5pIWJPE2ma8i/wDLDVLMxT+43qOfzr0rwz+3ZqLqn/CXfDORQ3BksLpT7/dbJP51k+G/+Cf902268efGC/a5fEkkFmCFUnnAZmHf/ZNd5o/7EfwT0u3+x3HiPW7ok4w1/EuT16bD3yfxp2mluiHKi90dLoP7YnwX1gpHealf6TK38N5ZsBn6rmvS9D+JXgDxJEs2h+MNJug3AC3Khv8AvliD+leR3H7J/wAHNOurPTILfxBLLePs3tqBKqoBYk5UqTx0Az9BWx4O/ZT+HXgzxVD4ls5r28jgjmjWxvFikhbzFAJYbRuxzj3NWr/aMpKn9ls9oVldQysCp6EHrS1Hb28FrBHa2sKQwxKEjjRdqoo4AAHAAqSgyCiiigAooooAKKKKACiiigAr4o/acj8Q6L8TtWuPC+jwalcXItrhraSfyd0ZiAdlY8bsp0PWvtevkv8AahN1Y/EyO6RlBl0qBo+AeA8gNdmB/iNd0RPSNz4J/aGi8QeJ9W028uPCuoaReQWckDQ3WMS/PuDRuvDD5ufTIrkvgyl7beJrnSfF9vI9nPakxx3jbo1kVx93JwCQe3pX0N8Y/h9c/Fax06OHVItOutMkd0kaEurh1AKnBBXoDkZryvwd8EfiV4V8URf2ve2OuaA0cscsX2pnCkr8reXKAeuBwe9VWw1T2qna530sVS+rcnNZnU2+jaa1w39j3uoae2f+Xa4baD0+6civXvgnb6dY+MtDt/HGp6hcafJJJHPLNCU2+YCYwojAbLNFGu4HO5vQVwdr4H021uBJZrqOj3Q+bdZXLx4H+7yMfhXW6BB4mttQtWl8VS6gyTx/Y2uoVD20pYBZcoNzlSQQMjla3ry9y0Y2+Z5lR6Xc7+q1+/8A4J+lUKGONYy7PsULuY5LY7n3p9VdNa6azhN5IkknlpudRjcdoycduc15r8dPiB4j8Cx6J/wjt5DbteyT+cZLcS7lRVx1PGC2ffFeVex0RXM7I+VPLDMRgn3zS7ce+f8AOKy5vE+lRi1a2ju76K82eXNaW7SxKGnWDc78BQJGAOeRz9K2gOjZ3Z56V+5wrwqNqLvbc/L6uHq0YxlUi0pbeZEVP97kn0o2k/KD19qn25XqMGjblSuM59a0UjCxBJgK2OgH9K3fioXbxFZ2u5/9A0XTbQYY/Li3RmUY4HLH8TWRt6YzUiyTMC3mkn6/zrw89ymWbQhGMkrX38z1crzGOXyk5K9w+HcM83j/AMNw/aZgr6ta7xuJ4Eqn+lWdd8y61e+uC24zXM0hbHXMjH+tdB8LE834iaHI0YfyZ3nzj+5E7f0qj/ZslxMgjhZpJSNqqMkk9APU818BjcrnlNX2MmndX0/ryPrcNjo4+nzwTVnYwI7AyMVZfp/Svefg78B445IfFfjayBIxJZ6fKv4iSUH9EP1PpXQ/Cv4Mw6L5HiLxTbpJqAAe3tW5W39GbsX/AEH16eu15dSol7sTvhC2rPl/9r+4B1rw5Z9o7O4kwP8AadB/7LXzzjuv6V7p+1nced4/06AciHSU3f8AApZD/QV4b5bZPYnrivTwmlKJx19ZsYNueFGR145/Ouj8DrGfFGmtJtK/aYyd3Thgf6VzwG35u3ap7PVW0e+g1Lyyy2xNxJ8235E5bk9/bvXTLVGKVmTeJJI5NYtrhXVkm02ykXBztzEDj/PrWf8AKQB8tVWhZpoppOX+x2sYYNxgQoB+mKkaL+8c9sdKmmrRLk9SSSGGQjcoPfrjFM+yxMADu+v+NG0rjbk+n0prSFfqe1WIo65p8N1o95DNMYlkgdd+7ayZBG4Hsa+YPH0Q0DT9P0DS9Qa2mv5/sckSuDc3cYZg5Zj8u35i3zkDgAd698+KniQ+G/Cz6l5fMEqyq8iloiVywVwpBwduOPavC9Y8Har48u9G8aGSwt4YrR3LwyiRGkkfdsj2n5mTeMjtg9TXwuf1IrMIOekUtX56s7cMnyln4hTaXH8E/A2m6LPcXVlb6LcrFNM4LSCTU5hvYDgZ2dOwxWd8IfhZ45+LXiS18K+BtButSu5EVpPKX5IELcySOcKijI5Yj2r239lf9nDwt8cfBz2fjfx4uj6N4N/e62sMIjm+ed2WNS2VQHactgnLcLk5r6R8efGnwt8BdOk+FHwR8NW+i6dBNHp63luVF1e3JCEOsr/6xwXwwbLABiMcCu6tmNHBUVOWvoetioxfKl0Wp5l8evgT4i/Z8+GcGuahrWn6nrOrbrGNIYFiS2TyVU7ZMBpJS2Dk7c9AR3+erBbiHRbbT00mCWW7urua+S5ghj8rBBlkcodgdkXAXOATya9f+KXirxR46WNvHmuXOoxQbY4V1CZzBDhstIByADsz0HQHNef3FlbeHbOy1jUtFuoIYJWmvFhmUyJI8flqSp6qF6KmM7jnvj4etVo15c1FWTfqcD1vYy/ENrrSeH9Jt9C1CEwTXxjnityM7Zh8kkbRHoqu4BJJyRjO2vSZPhfYN4N03xJoetWYvpdUuYrpIljkvHjRCYpMvuxt53Nxu5GNwGPO5dHt7bVo9W0m+Vb02nnbFRI40ZkCq8gYAsR8zBedrHjOBXb+ELy18OW4vNL02ytoTGFea6iKG8N0CR5anhAmyRmYgMDJkY7S58sbvTz8zdTukzNs4LhZbxnt7VZEjWEPJHtw0igl84AAYMxIHQnNY/g9V0G613w4012ollj1CdYJAxujGjR/OEwYwsiZ24HUseaku/Fl9Lb6tN9l1K5jif5LuwQ/NbBVBgTPzGTKbsjkhlY84AZ4Js54dKbVtd8P32n3mp28c/kFfKkhjMrMkO5sGUnedzHB4XnJNRSp8kJVNrmFOo1U5n5nlHirXl8RfEzwC2k3hlvINYkuo2V28xdp3LjK542dhjgY65r2TwnGp8Oahew6jdXd74kuUS4muGJaMRqSWIHIUYJA/u7B2rxPUppbb9ozwpJD5X2oXTzSmQCCFTKjFg2eFQbiCehAyOua9l8G6rdaxHrGufZ4bLTtN1WSHR758s8sLK6O8pwS5JVgOBtDhB0r0eIIuNGklsox/Mmm/aSR5d4w1Dw5JJL46vPs0/8AYtv5ljby5aS6vnmItyAGA35VQFIP7tCcYHHg95/wkPxC1SO10rTJ5YHu0tI/KhBMU0pICMyj+JlfAJ6L2FevfFvxJoPh3VhaeGtFgv7mwuLi61dE3FEZ2ClpJByGwyopXgBuOuKw/h/q2r+PLXULnVr4abaWt1CI5Y1jhtrF1CiLaG43Hc6kt0MgYntXXgb4fDqs47bX6L0HOWvKtShHo3im1t9C1rUIbS81DS737Ho2grCZmumjZS7ztnPA27cZb5elet/DTTIPBui6f/wk0rT30t9eXTi33zSvcTQpE0fmKPkiG18ZLY27icDBi8B6T4XhvJfGS+Lm+16TeyrF/asSwWVrbhYWe6TIw+UZtqr8zEYA71t+J9c1DxPNb6x4duE01dY8q4hkkvkM1zHKIvKWK3jIdYwN7MT0yVJxnKxk5V6XLay6sunON7Mh8J+D9P8ADcesXmrKkumwTNe2kVxAJvOiZ/KiRzkk+W4G0MpOS7d8VL4ft4brTtV1Y6CwmhWaa4FvIwe6gDbVh3Mo2jflGJT5iQAAorT1zUNPfxPa3yX82mp4OuhHeKZ1CyFYUKyICpSJS8mQzkEkMR0OMTxtqnhHSdcsdF8cavfX92YJNRlt9PuttreKmJEMmzh1JDhRGcYJz0GfNpUZ1o8z3l+S8g/dxqe87ryJrKbRZtQtoY4bHUb+NDb26lpFW2ljZMW8CAfPIHYYyAMhnY8Cum8JyyahY6ZfmLdcxtcR28rM37y3XAaIsik4YF5Xb1EYHy7s8h8PrxryOfxV9hsbXQLtLpdDt47aT+0ZdiqpCSsfmACvIygMW3M2AMCtDwZ471rXLbWm0ez1OfdJa6Rp1gyiHDkSPcRbc5H7sswdgFBCc54rSrBv3XrY55Plfu6HlfxItPETX3ibxFY/bY47C/t9Ge2WbzbZJ5Yxi33FiJGZEO5QP4Tu28A+o/DTTLPwL4f8Uafpupx2+pM1s11datbxpDFGsLrCkeAWZmEysFKhgyFsnOa8MurLx5a/FRvCfhy5STUIdfimhtEbzbWG9fblgMbAI9+xgc4xzXtMPhGT4P8AgzVdQ1m9W78U+JLjzlmuIBIsZ2Fmn8hlXIUA4fgAOvPaujH/ALulCjH7VtPu/BDpqUk3Dc8N8beNvD/h64vtN8F26aiuoL5mo3OpQlnjuSzFlhDAMi5K5zkll644rK8Gy6Ta/D671DXre+u57O7+0aasK7lhYsRK7/wqXKqoJGRtzyMCmeKPCdhpeo2VjHeafJB4ivI7e3kedibNS6ANI5GAAr8kHsSRyK9q8Q+EfhnNa3HhbQbfQIlvb8mTUNK3PaxeWhMax73aRot2VLbgCUOTk4HfKdKhRja+rWvoOCstXuc14F1GG++Et+2t6TBqt9Y6goXTpo2Ek8E4URs8irlyHACpkMRvJ4xXlHjhRo11aWiQGSODD+XdQqjCUP8AvImCnLKCMcnOD2Neh/Bvw58RJLfVNVmmuLbRr1jYi7t1EwgkjcBpFjVht2h8AsD14Fc94s8H2/w48RNqkWpaT4misdUktJYbojzrlf75CscBlPDhsg5I45ow86dPEyimn5L+tAqyu7noXh26sfF7ad8S/iDqgtIdG0uCSzsrOSVmtTE7AMkbcZ/dJgBiowMmqF58UrzSPEUPi/TpIr2yu5JZrV7z9/OsyA7ZGjyFQsx8sFs/JnPerPg/xZqOv+Jrzw7401TTtN0a10V3bRwhtbW6MUeUtwxBK7Syn5R85Xj1rzTwla6h4j+KVhY6XH9mMRlurWBF8xI/JRpcEMCDjZjJGMgVyRw0ZVZOe0VouiXl5jj7SKVVPW/5Hp/xq8YX2iLpHgldeu7+91G8N3q128fkxushUmKMhcFDvYsRnB4/hrE8ReN/HWufFLVp/EN5p+iXtgf7QabUlaVY1RU8piqs3myMRGQvzYIHHBxoa5pngb4hJH4klvNbuNRsYbjz7OJllfzPmxHN8pMaiTA34wcNtUAVsatpcdrpt94asfDfh3TNf19F02Fr2Z5HLymNVW36IBGAzvK5PzDjk4rODpUoxhy+9re/n19LeQ4Yicb+buZXjRtFvfDeiXnxU8cF/E2s3Ml8uoTHz7i0clJDPLFGfusf3YTHGCRjknwzXpL5fFF55XiP+15pJC8N+HI87cQwcF8FT09MHjpXrHjy8t5nk1XxP4flS2iljs/OjlhaXEceweXHhtqs0bEsedowMV4feT+XcSzQpMIHZ/JMqje8Zz1A4/AcV62V0uWF+a979rfIdTllUfI7rufS3xD1bSYYdDsdPtUkTTPs9q0l1OrpMfKIkTZEXYsWXGfm+71PJPg+s6Pqzal9j/sO6judUdbuzgVfmkhkyyFIx6gZHsOlfTlhZ+BtchsvEOqNcLpXh6zs0Wa6u4/ssUqW3yYkALP8juz4DbigVSD08s+L1vNotxa+M7CS9i1RdQ2xfaZJC0EG3EDIxw+7dHKSGCYG0KuKwwEoUpunFa/rc546O55lcw6p4etLzQ9atLu0mKKVtbhWQqXAIJU852tkdsNnvXb+EPE3hm18J+X4gbzHuLiVUgi3b7cLCyqcDCsXJbg9Ao/vYPn2tXmrajqa3WuXVxcXMoVXlmO4sFAAOfQAAD0Art/DWh3OgXsNvd3eiq+twi0tpLxUuYYdzK3mgjOxsFFHf5jwMV6OKjGVP3tzbm/mOF+xw3Ubt8sQH+r75x+memTXqXwNe+vvN8EzaNqN/o17Is2ofYJpQ6ox2N9xcohD/vNvLBQM4yKyfHngfTfBfhST99a6hqN1t+0rHIc2RaQMuzkq2QACQcgtgjjNc5o76xY6FNqmi6ncWoMBS6khvPLdU3qMFVO4qSQMH0NZSmsZQapvyT8+5MkZXirT9P0fxFqWmaTcy3NpbXTw2ski7S6KcDcCAR+Vd7I3w71zRtG8m6/s+4nZYL1ZrJlhiAUgszxZJ27twCjLHbuAFec6hFJDb2lzIsu2dWZJGGBKQ2CV7nB4zW9a65ND4XhsHXzj5nC5yY4xyduRgZYgnB7e9dE4ScY66oTZhalDCl9KtlePcwxHYj+Xs3jsSMnGR1osVdYV23kcPzHKuNygk4OQe1QKrmQbXfGd0jKvSnSQ/aZDu+Rj0A/wrotpYroNms1t/Nh3Btjbd6d/pXR3niPS7rwlpeiv4dtrW5sFIubpGIe7bLbWwB1AIySScjjArnLfdAx85QpRslW4zV23a33C6vbf7QrOS3zEAA9+KipBStfoLcpyLG8jR7WZioKjGNh6mrTRmGd/3Y4g3Bd2CRjnn14zioDeNuY7xH5kuApHzBfTP0ouI1aRpkkDDZt+ZujD+XHSqGJcL/oo7K+MYPAp1iFlsrjzLh8mP7u4eh4x3+vanSM8enx2+xGR1EnQ5jHvn1qK1WQSs9vHkKuFUjOR0/OjdD2JYbi4ktDD5IdQF+fBOwZFQyM0eqeZbxkBFDfKeSe/NLDM9o0beYUicn5s9/Q06RfLuo7pJSAo2N2x+HpRYRav2T7UJ7SaSFcA/MxDbj9Ov19q6Xx2NSttfhumnLPPpVsDIrhleJ4xjGRwex75Ge9c9dBlkt3kKl0QjG3AJJyP50xobj7XbLdSfuyC0StJ8gPcf7PNYcl5KXYadlqVrqTzPLXkhVEcnYsevXtmrEl4rPHHFbiBY9pAccNznOaZq0cKsUjZQA4VmA+rD+dV5fL8pItz7lyvHKkdf51stUK6LEjSRwNM20F3wVK8tznII47CoppmMhYRb0HIA9+1TxyRNbxKtwpCsYypXp7j86je3litPOjuEYIA24cc+mPUVSdikhlysLtFJH5ZznKnovt68VDtWaaN4wQRx9adBHO0wXzdxcZznpTUQfN+85HJLcZOf0qttBp9BfLBdo1kDNuHJ79T+FI19sb51QspKjcOh/vCiGSGS4k81CoYfwqOvb2qxPa2hbdOzIdoUKw+YfiKT03E9CbzJzZlUWDfKqsVK/MEHPXtUUdkb50a4kWKMKcu3Cj05xzV+2vNMltgt1ZmUyyjcI22OoGRwSMc5FWp5tFXT0tV84PH5jSyFvlkAPy7Rjj09+DxWLm10EtdiaS01jSbGex0y6g/s2fDtcBgQ6r0GWAYLuI44yQDzip/BfiH/hH9Rj1SzkM6lmzbywh4vmVlO9TkN97jj09K6bwX40Nl4f1G38uG9htvKmk0q7kIS5jAYMhx95R8hAzkEcVwliLfzbk2VnKYXtjhY1LNC+3PfnaCDz2H0rmi5VeaFRf8E0guV+Z0Hiz4hSeNvMutSt4hdLuVVWJQEj6+XFgfIqnJwOPmOea4O3u9qurMAW+XH/16n1DzlImZVGAFbaMA5H8z3ql5aQyCPfuDgMM9s110KMaUeWOw5zlUfNLVi7i8wZAQy+vap7gbphNGNoHO1R69agZQ8hVcjnk+taVrIy2ZLRDzEHytt+7659eK2bsQ2TQ+da4UAlZEwSDhWz0Ge9EavHthGSkJzznbjv8AhTNP+zs6L5hEYblTkjkZLADpVmOY3Cz28cnmIY2+6p+VfX39axbMgtUWfTb1WjRXbLAJ021mw7SoSRRvAwrZwPoa0LW8/s2Hy451uYm+VkK9Qev4d6z5lcNJ9nxLGoDqcYOO+fcVVPqaWTWhOrsP9GZeWIye/HIINSeYIWWZcqF7EAgMPUe9ZsMkjsWkY7l4A9qvwSZz5m07/lOf4vQH6etVKImjotD1S60nVrfXbYBCeGTGdvGDwe3evoLwv8RNJaaIr5BMoCxmEbPm7hgTheec5xjNfLKtNE4LAhlUnr79D610mk+IrrR5P9EWOW2lHzLKv3gw6A9R3q6UuR6gmfYlvfJteTyBcIfmjMbrtAwTyenqKzH8XeC55v7P1Zra1k37PLvFCM/TG3swJ4NeBeHfHjNpcujvFKSwJWO3YquB0D4OSOhOBzzXH67qU19dRX11AqIY+qMfmBP5n6e1dTr8qvEqyZ9R654L+GOqWzTX0dhl1z5kMwRTngbeSDz/ACrx7xv4r8Mf2X/ZmgSX5NkGtU8+MABAxO7d1xngZ7GuR8Pz6LPGF1C8MQIIjYOQUx0z6f8A1zVPXNR0tYZYNPZWmZ2j8xmyNh6Nn/H0qliKrWmxVOToy547nNM25zMswYnjBzz6496tGZY2Nu6ksfnYnjYPp69azreVlhkZ+AeF+XqfarSt9omJaMiULy39/IHX9a5fUSZ0ekJCZ08x402n92oOd3p9a+h/h2H0XSX8SS+JrVIjDFG1pJ94qOoKH7rA9COCOc818y28c8ckUa7iqRsdmOSPb9TX0t+xl4J0H4vfHbTPBvjjU7oaK0M11efvgrOIItyoC3TOAvHPp61y1I87NKVXllqep/CLxxr198VfBV5pthLHo9j4ksBLdSRkIzGdcDI4zjdjPUA9a/Tb4yaLo/iDQNK0zXoWk0+bWrOO4VWIJVmKcEcjJYDivniOXwT4x+P/AIX+EfgnS/7A8GfD65eUxw2oCXmtpE0iIxOQzLGj48z5iVm719JfFg7fBMt8P+XK8srv6bLmMn9M1tCKhojSpLmkix4Z8N6B4Wiks/BPgyx0iKXJeQQrB5hHcgDe3/AsV4b8Um1D4mftL+CPhbNeGfTPDEZ8T6pHEmxY5Fz5SEglt3C9T0lGK+jtU1Cx0fT7zWNSnW3s7CF7q4mbokaKWZj7AAmvnj9k/Tb7xRceKvj5rkUkd149v7hrON8kxafG+Ixzz1AX/gFDdjOLteR9EW+m6dHvaOxgBZySxQEsfUk8mrIhjUHy40U9eBiqt5q+maXEr6rqVta5XP76VVJ+gJ5/CshPG0N/t/4R/QtW1QP0mW2MEI+sk2wEf7oNNEGnql/Y6fNYT6hGB5kzQxynGImKMeT2BCkZ+laIIYBh0Nefar4m1qXxhoHhHUtNtF/tMzTXENrKZZLWNEYpI7kBcMQRgDPofX0KmNqwUUUUCCiiigAooooAKKKa7MqMyqWIGQo7+3NADqK8H8R/tVabpN1c2Fn4OvmubWRoZVuplTa6kgjCbs4I9a8y8Rfti+O5Mx6TotlZdcN5RYn8WJH6Um7bmipSZ9i18w/td2Pl674c1ba2JrWe1ZscAq6sBn1w7HFeFa9+0Z8Xtb3rJ4ouoY34KwyFB/45tFeV+KtY8aeIkT/iuNcsSsnnEW0qFHfgbmV1OTgYz6VrQrqjUUxyw8pK1zzTUv2mvFnhnxVq+i6p4f028isb6e2Vo5Hhk2pIQufvAnAHYV0Gk/tZ+C7plj1rQ9U09zyWQJcIPX7pB/SvOPF3wV8Ratqt5rUfiaC9u72Vp5HuYPKZ5G5JOzKj8AK4zVvg746sPmjsIbxODm2uVJPH91sGtHjJ814vQ0+rU5L3kfWejfHD4W64u+z8YWUTD+C5LQNn6OBXXrq+m3Wk3WoWes27pAomVreYOzMM4wFzu75zwM81+fjeC/FXnGGbw3qTFW2ndDx279O9dh4R8GfEPS3/AOJaw0gTMu5hdKrKRnB+TJGPatfrzcbSRhPAxfwyP3o8KS/aPDOlXH2Vbbz7OKbyVUDy9yhtuAAOM+leI/tV3ipceGrXIBC3c3/ooV6j8G9SfV/hN4O1Oa4E81xodi00oOd8ggRXbn1YGvHf2tJv+J14at9hG21un3djl4xj9K8+fwsqivfR8r2vivWre0XT/Piks0ma6W3liBQTMxcv653kt1xnnGQMaFv441JWBmtrWVe23ch/ma5hx82QQCKVWcg7upr7Sjjq+Hv7OVr7nzVXDUayXPG9jsY/iBF/y20eQccGOUHP5gVcj8caG/8ArFu49w6+UCB+Rrgm3ADdzkdKVWO/G3nv6H1rshnuLju0/kcssqw0ltb5npEHinw7cY26kiEEYEisnX6ir0OqaXPjydRtGDdhMuf515WnmH7qj/gVaeg+H9U8RatbaHo+mTXt7dSeXDDCm4sep9gB1JPAAya64cRVV8UEc7yWm9IyZ9C/BezkvvHlokI3EWl2ybehJhZRz/wIV754D+F+n+F3TVb9UuNR24TusA77fVvf8qwPgZ8CdN+Fth/a2qeVd+JLuPbNOvKWyHrFF7erdTjsK9ar5HO8zWY4j2kFZWS/P/M+jy3A/UaPs27u9wpGYKpZjgDkmlrzH4hfFFY5pPA/gW3bWPEd4rQ+VBytuDkFnbooHqeBXjJXPQPGvjPdeFfHPjh9W0fxdo89ubWGBf8ASlB3LuyOSPWvOLjwqsLOsNwkyIuf3bh/5VleJvBupeH9Yu9DvrR55rGQxSSW6s0TEYztYjkds+1Yclk1uxxDNEffIP8AKvSp14QilqckqcpNs2J9JlhG9mHup61yXiT5leMkkBH+XPtUuoanqFjsdfNlT1M2MHsvPqePxrnL/U5p7Z5JlT5Y3VgsgbBIyAfeuqFWM/hOeVOUdWdNpgVbeKPcflRR9PlFWLhtvG7JPAUVXtc7dvQADp2wMUsjM21uM5+XtWsRMk8xoY/vFsHoafy+JOp7Cq2WmX0w350+NYfu7SGHXFO9g3OJ+LbRah4dm8OLtS4viIoJJvlj8xumCeuBnOOma8E8eeKLrQ9ZsvDtrqEtjpunacY7ZYWBhcNkbkUADnnJH9a9y+K+rXFr9htoV8iO3zfLdOQU3LlSCMFlIBPOPX6jyX4laKnjTWLCwt7S0EF2v2qCSLCIkTAMArdcNhs464B7Zr87zmXPmTjPVL/I9GhH93oe6/s//E1tJ+AWp/D238JWtx/b19JPdagrAgukaKAnHzKpQHJP3ifejWNW03xBeWeoNqba3NZqWSO23y+Q8mA5UHIJ5Vf72c+lec+CLxL7RY9OtNSu7O10aB7L7IIgsaQja+5H/wBpAVJ5OVzyxr0/wjbazry3B01Y7O5t2juLcwxlfN2qSqZVRuyA2GOPu9utfNYl1sVV957aL0Ojlbujn/EFq8y6Vb7ole2aSR4ZZGd1YEYzkhRz/D0B5zXD/ErVXs/C1rpev3eyV5VuWhteVjCsWO4EjKkjZ8rHAY8ZANdVqni+TUvFllov9ntaSpvLI20MxXguoBO9uWJweigc5zWD4m8F2eqahLqy2dxdWttDFB9jjlB2kvlZD0ACr1XIJGQaMPyUZx5tlqYWk9Cn4T8QaX4k0611vVVS41CaFLy2k+yl/sMEjkJbKWxtBYMBtGMLuPUA95fXVxqsiPMIYbaaGUIUCtIDEq78qeApLbSeeCSMVV8MS6JpMmnafpen2UNpBC6efblUiFqgYBccY4G0ZO4M5HasrxRY3F5Y3KKzWttdKtq+LrYohb7oDpnbgAHaMABup5q5zhVq88dEu/QmTtoYuveLtHs0uf7Dv1v7i2gddqp5MFuJQqgNKfkwuCwY5Ylhx3qxqUni1dB0GSbUl097lfNuY47j7VMsRDBSWKDcm0nBOMZQDpXO/D250rxRrFsLjSdMSx85GVYbh/NYQlI41RAuZD8mRuGwbUYjIw3o3jbVINI0KXUNQuIlvRbiK3aZ+I5GbKsxxnaAuTnGemORW2ItQlGnHVsVmryPCmsZtU+NtrrMOoQefbvhIpct0jZtzEEZA8sjGRyADivd77VrGXR1nhtoVsLRGluld0Z9QbcqhfKjwv7xiCMds49a+WNK1mS3+IlveXlxukn0q6jMs0gYh5Ld1Dhm43EsSD1yR9a+nPBelJ4X8BaNauypNfWK3BkmgIaVnUGSQE5LYMg/hAAXj29DiGlFSpRe6SX4CjD3eY8L8Ua5pkdnc6bbx6VaX8mj3djqd5a2H+i2y/a5JFSYnIaUDZyi5AVAOeapfDX4f61ceH9M1HxxcwWPhfRLh7yGBW+e+Zo1IaXbgrGm1TtbLMcjFYWveZ4H1D/hH7azs9QGp6v/AGm9rcLIxDqSscEm0jeQ21129fMwa9l+IWnXnia31G38WT6jZ29xpYuodPsbhGtVvP4mGAXyvz5DbR+7w2Ditp4j2NGL6Pr1+S+8zbs9epg+KNe8ByQQXyald3EcTTG/laONZbxBFGsi+T8xiVhFtU/wuoKqOlbt1puntdaH4z8UW+nWuoW0Nu002oQ+W1vPAI1jtLaKJiQpAAIOBmQlhgVx9n4k+Gvhfw74QutdtIb+z0o3VnEk0fzkxM4Z5DGBv3sAo5I2k8k5I8b8afEvxN4016fUrrVJrmEwyQwQSrtS3WRgWjVRwBkA9+R7VtSpzry5IXSXX9DWnDnlrsfUXiDRtIsGmE8ukfYLmOJtRvvtnmG7fDNLB82/IcRqc7slQcHB5848QWPhvx34u1Hxbb69c6d4c8G28Nu1zLCyyuwkIW3tGX7wVNoVnK4Dbj0xXiR8Wa5d6TJ4XklN5amUyDzEA2Sbid6nGSeWHJ6EegwltpWpSW5kmupIocfPulbbxnk8474yc10UsBKin7x10MvrV/4aPVdP+NPgLRfFFvqL6BNqNjaR3ZiBby3tpZU2rsUExbAMKz43MBnivVtYt7jw/wDD26Wz1ZPLu9WllhKytZBknCouZSSxCksOpxj618p/2x4e023imhzdXlqxij2xrhgwJZjkYOOi+59q7n/hZ3ij4q20ej6o15NqhWO2tLhySGRB8qDGApLDPHy5yeDXPjcsnOUZ0lotxYjDxo2XMm/L/M6Pwl8RNC+HPjO307wjZ3+t67Fc+Rc3d3IDby3criOSS36MiFflDO3Ic/KDzSfHLQ9S0XSbnUvtV/NdWxjt73VNQvnf7TdOg8+0tonG4qpYsSCVAYYI7nhlofCuuXmoQtYarrESw2wNwVlnumeMO+EwQ5DOeVP/ACzHORzpfFzw0+s6FpWoT+dLq+oLbz2awKCoUD9/LPFkMgVeFCrluOflOcXUisVC23VmcMNKTlG9uUqaP4T8L6x4d8Ha14j/ALLmluEhj0zSZL1bddSlUBGM7M37tQ5Cs2CX8vsorzn4qSWZ8UXa6EzpYvMLyYQsqo80w3ERBAAqgZAVey+tfQuo/D/Q/A+naBqniKBdRuvDFrDpdhcQXQcx3jRu/wC6jZSP9dIz4I+8Ao5PHjWm+E/D+qeOrH4c3l/PJNdatCbprhDBDDgM1zuyQynClVUcEk9K0w1aM6nOrtK/pudeOhCjGMUtf8ktfvM/wL4f8cT6XqOveHdXv9M03SrSS7vmlunt0jRFB4UHlirjbjlsnFdZ5S3Hwn0Tx/qXh/TGubd5Xh8yUoZYYJgnmogABJO2Itlm+Unjiui+K3xEuIfDMUWh3EF9/brS2ccP2JikthbNiOcM3U71ABABZR3GK8F8S6p4g1aKz03VLgpBpMRWxt1+5EGYuVUf7zMfbcaukpY33rcuvzseZTak3znX+G9Jm+J3jTUdUtvDjWunRKs8lvFcAMqkbVijkfgyySAKv1PYVrtoB8H+IYJfCtu41/W7u4tYNGuMTvYWYYr87Zw5kQnJ/ukEHnNdN8CdA13wbY6ve6tf2Gl3t3awObbUInk8sl1eAmIEM7suXCKrcBSRxiue8eaTrFj4803x147mt9etzNFbMNLLDzSwl8pGIVctlTuGdxBHrUOvGeIdCD91L7/L/gjUuW8T07RtS8N/Dj4Txw+H9HtdQGs6wkOqXdzeCOOeRziNGij/AHpiiDKSF4fLAEivBPF3ivxrr3i2/uvFGuGbUrWSRgxXakCocqkS9UUDoo6CvcPjWW8L+G7fwzc6Toa6jNcW0qz/AGdVt7cqo8poiAWZsiRT14XkdK8xvvhN4it/DN98SdTvmhltZWUWUgxcXUgYmc7SwKwqpGXx/ERjIrHL1Ss61T4pN7kqdvdexl+Kraxs/hVoOppdhL7UZY2jT7S8hMYV/MyCPvcxsTwF3hRkk40PhV8CfFXxD0sTagzwaK1sbyIxSRCWYB32oS5wgZkcLnnJHB6VV+LcF1ceJbRp/skjx2QaGwtImFrFEIlYmIknco+6G77AT0rM8K/EPxFonhebwj4bkuoBPfR3Ruzh/IIB4Uhdy5YKQcjGD3Ndy9s8Peg7Sbvr0RSfI9D1DTfhnDrH/CMySajf3ksUlra2ljHDHv8ALhL/AD3K7iDtKqm5uCMDHPHK/Gq1vV1y2ttHZdQsnu2dpLdh5M97gF+hyTs/ibnk4NHgu48Y6Fb65YpayvrF3cfaL6eedvtNyBvfYVbDeWQsjs2R9zk81T8OXOn+Bbq61PxMJlhuo5obSNwHIOAwd48EsGBxz0JHpXHFVY1vaSlzW2XcOWO8dWeXNaT3OsJaXTeS7yFWDEkRDJ4454Nem6bPpt59k0fwzpaXGuwi3TzmXzgp8va52MCi873zjIIB7Vy/iWbT/Emti/8ADej3VuLmGCHy3bLzy42GRfQPIDhe3FT2/hbxboNrBqHmf2dq19dCw+z3qrGThs5+fBABwDgEEFs8V6lb97CLbs/18xJtlvxnZDwhqU1rNrkOprcAieRrc7WbBO1VPUDgZ6ZHtXD/AGiTU5Jkh0+FRM+7KpyuOw9v8a6PXvEl9rV9e2euWdpdanvjtZLuHGIxH8h2BfkKkDjtxkdazvEGqTaxPc3klusRtFVF8tBHtCDavHbjHFXhoyhFKS1L30I73R7WTQLG+tb8yXJeSOa3YBfK24xtycsDnOcYqOSSG1s7KW2mLXCeYskT8qM4wRjpx/IVmq0jQRl2OQuC3dgeo/8ArVf1bR3sNtv5m+V4xKskbZRlOCDnt9DyO9dFraNkMgm2LI0aq5k6v3A70kyw/aFmWVxGRld/ft1ptuCHjZ22mXO1m/ix1p915n2YLNIqLEcxjuwJ6CrGNvrf5TcTSbUl+7zzn3ptvM1uoIlDEDt0b2NJNI11JFaqoLHbtXoP/wBdOkVrGYW9xErf3uOMU/JjSIi6+ZHNNuwZM5AHy1o7LeOTy35ypZSRy5Y8Z7YFU1i8/wCWGMkKx2hhnj3qxJDcG4Zt21AOOcEjp3/zzSkrmipykrpaEEi3iYbcxhb5FOeB/wDWqSzSRVeRl2qG25BwR9RTftE0qtbq2I15BbnaR1xVmxWBVWMzRyB2IY/xAnHbv9aUm7EyTZn3dvI2+NVU/OdvGMZp8Vuk0yrdfJGvzMxBwMdjipp5YY5p7fCkBicjqPans1ta2/kSK4nwBkZxt+nr70X0J2Gxzt+8n3boyd7RtzleAB7VNLNau0UkeU3ybduMqi+uapx+XHI+WMsQby9q5G4deRUq2fm2M0kXyrBIWTLdRn+nvSaQnqT6vbYkt5kQ5B+d15BGeMgf55qOS13DzZGVYV7K3PbnH40LdTM8dpG0zQSRbQrevcCpFjyskckP76Mj6EA47d6SvET0M6OAeZkZAGakMckiyvb7pI0+8dv3R6n0p12vk/MpDZbn0554NCmaBVEahGlyp+b09R7g1rvqWrizf6L5O0KHC5WTd976fSmxzTT5VlHH3iRy2KczEwsykhk4ZCu4enBpFt2aFmLFDGN2AMYzx+NJBcYwt7dX3YLBcq4qdfKns5SoOV2umc5bnH41XeGKFF/0Ukr82WORiifUJLqIIkQjKjaSvcduKGrlNXLVpBvm/wBQ8itt3Dd8o9fpXbpJ4fu/BcPg9PDdmniNLqO4XUI1yZLcsfvv14DAYAOcewrhLKaaTy7cL8y9mztdeuDj+VdH4d1K90LVoPEVq3my2gJ8logVzn5V+nQ8ciubEJv5amc247HoHw60vQvDPjTUtBv9U0C7vraH7PatJma2DM4O9X4UlevznA5yPTi/iZcapFq1rpLx2UKaPGLWC5tYfKkukDEh5WUnzWGWG8dRXcaDHpeueF5dQ1Cwj0FbeKaOZlhXN3Izh08tW+b5QQvH95mJ7Vx3jqS3uv8AhHYbOxkgMWn7WaWPEjSI58xSMkHBJwfQ159CcpYm716ehVNc8b9TPa30XVdIjgazuzqTNtZ4AHSRucfJwQR3wTnrXLahbR28iZhk2sv8SlcY471t2TSyaUZo5DFHLJg9flcHIIbsf1rAvPO+f7zLEx3ZbOc/WvVpJpvU0bXLbqV5hMrDH8RrQ2tNCm19y+melU1vl8swsg2e45z9at200cdqDDIVMrEFs4K//WrZkWuS27MtpLu+VPu57jP605Zrm1KeXlotxRZNuNyEdKjt76Se3K3G0KvzdOcjtj0p1moud0q28oB+6oGQR6j2rP1JWjLDQwm6FtGx3c8sQMY55NUAdiCNkRgd+cN7d61LeOG4vJrhZN+4cK3yknGMZ7Vnw2qlWViqgdweuelOLsNOzIII45I5G5ChfmzyQPWpfJaElTkKFB3Y6f59af5MEn7yGQK8IyS/Gf8AZq2m/wCzttjEqsEkdm7AH7vtVOQNg0MbxmR5iBs2s4HG7rmiNsofLUyKV+b5cEHPb2oZl3mZDiExeXGB/Ex6ED2/pTVuWWN4VyqqwDFjznv+fNQSWbW6lhm/0Z2jKr2yD0559Kal5eXSncVZbf5m6DqcZA9uaj8xWy24A7gTt9PU1JtWa9lA8sxw9lGAyketUpWKTI5JfmngjwV+98vf0IPrzRa2zXkLxLIqEsN2/jp0/U1C8hgkRbd/3Z+Xj0zkc1MfPt/tUe1A+4OrMTuI64FWpOw73I7EZmdZsZAKhT6nj8KtSwyWBjPnL5jl4pVbBIOPy6dKpw/6RbO5ULIsq4Y+hySM/UVbvooTHaXq4BdSJMuWVWBxmhvUd9Se1huGuIroQMzM4aKLllf1U85IP9a9b+Es3i7wprmmfEXQ9Gun/s65jWO6+ysY7e6TDId2CodSFcA8nB7dPIoJJI5v3UjlowPLU8D1z7dq+nfgP8YvGmk+B9U+GMmqSNoupstwbF7eI7mVg7bGIDBsjPDA4JrOactio2b1Psf4Q/FT4f8Ag/4dx+HrrUjbeKPtg8RXN5cWr3E13qaTeaBuVhsUpujywP8ArJCfvV9oePprbxH8K9XvtPlLwXuktd28m3qpQSI2D+Br498B/tWeGNU02x8O/Fb4Z6Br/lwpDHc/ZY1uHCjA3JMCrHAwcMD3r6y8FTWmufBCwbT7cwWtzoLRW8JfcYo/LZUQkdSAAPwrVRlHc0bV0fOnxE+PWtfHfwJ4Z+EHhOygstf8eXv9k6wqzlpbSGBlNy5jC5SJwMhieU3jHBr6Q8P/AAzfQ9E07ws3ii/XTNNs1s7e209Fs08tAoG5lzISQOTvHJPrX5S6uvx+j+NEupfDW11LRNM0XURJYajdNGrZCjzGVv4o2feVXB+UgHPNfqF4Cbwv8SPDOieImln1Kaez3XkFzqUswguQFE0LIW2gq2eNo6Ajg0pLl3HNJaI65V+H/hWUNJcaRZ3KDHmXE6Gc/wDA3Jdj+NSf8J1osyk6Xb6nqRH/AD56fM6n/gZUJ/49U9npOhaQ2NP0mwsmOTmG3SM8c9QM+/61dWQ+aWCkgtjk9P8AP/1xU8xmeLaPr0f/AA0JJaRWeqHUbu3l82LUmhhECmJXQJ5bOWUKvcDqepzXtITWZPvz2kI9EjZz+ZIH6V5hq3gPb8fNC+IS69b28b2c1r9l4Ml1KkLKygeynPHPy/WvW+Wx1A9KpaDk72sUmsZpcLNqV1IehCMIx/46Af1rAvrK303xx4fmh83zLqK9hkYzOwbCIwBBYj+E11oAXhRiuc8QKv8AwlXhaRuv2i6RfxtnP/stUI6SiiikIKKKKACiiigD4X+LGk2dv4q8XmO+ZZ7HUH8q3SLJl8yXkliQEVQwJPJJZQBySPNJGkRVGBwO9e0fHS3bT/ir4vsY7VXjv7BLpm4BQCOOUsM9fmgYHHrXkU0O1QAAAAP0rV01UZsp8iRlStZsxW4gjLcdKrSWulyKdu5CfT1rzz40+ILvwZbHxFZ2Yutnkq8ZkK5UsVJBHcEivMrD9pTTVUC907VbUg4byykyjHXqQf0rZ5euVS5tzFYx8zjy7H0JJodtJzHcKT2+Wsu+8PyLu2hCD60eC9fj8SaGNVWffE3zqxXadmM8irdr4g0TVow+l67Y3isM/ublH/QGuOph5Unys6addVY80Tk7rw7O0gXaojIyMsAB+OantPC/zBprmGMDtuz+WK1LqSSzjkmkiysDqrKccgtx19azPh74l1rxH/acfiLQ7K1WC5Y23kzbyIiSBG3owx16HPTip5JWuVzI/Sb9le+hvPgX4ahhm837Ak9kze8czgfpivNv2rbpm8a6Ra7srDpRfb6F5WH/ALIK6X9jLUIbj4Y6hpsK4+w6xMNvoHjjb+ZauC/aOmab4qXySZIgs7WOPnoNrN/NjUVXamRRV6h8z/xE9zQuMHrgelO3HHHOORxQGHO6vqz51jeS23P0pejbl7c04429sg0q7fuquAf1o3EavhXw5q/i3xBZ+HNDt/Pvr+TyoYy4UZxkkk9AACSfQGvvL4OfBbQfhRpOYxHe65dIBe6gV5Pfy48/djB/E9T2A+Wf2VbJbj40aS2zItra6m+n7oqP1avu2vOzCrKNqa2sehhaa5efqFMmmht4XnuJFjjjUszscBQOpJ7VR8QeIdH8L6XPrWuXqWtpbrud2/kPWvEtc8Sa/wDE6A6xq2pz+Ffh8D8smNt5qnosI64b+9j6eteYlc6rm14s+JWveNtSm8GfCeaHbDkaprUw/wBGs4+535xnGeOp9hXKya5ovgfTp9A8DzSz3Vz/AMhHXJv+Pi8fvtP8KdcY/D1OTqvi3TW02Pwz4bsU0fQbfmOzj6yHu8zZy7Hrz+vWuZvNSs4VMz3ChF9ayqVbe7EE0TzTs3yqxHoawNb1iK3BhgPnTdD3C/Wqd34iutQY2+nrtQ8F+5+npXKeJvHHhvwTH5V1NHd6k4/d2qNzk/3vT+dYRTbLujK8WtcLdQMwDPKNzbvT+lcVrdnHJazOYwXaYKD/AMBx/Wup1LUNW1iDS9WvLdIzdWPnuqjHzFyAB7ACuf1AFlhU/wAV4vt3WvpKMOSkkedUk3M37W0ht/M8ldgLE8sTn8zUq9fmycVCbqG3jaaZsIuSTT7d/tUfmR/cPqCOPpWydkRa7J/LQfMueTnj0qXydqn+dQRzbVDMjY4wBUrTLtZnbCL19qTkFrHEfEuHTtSs4PD983ki6bd9oEe4RiP5yCO2R19Qa4y8ure51qHUJJvszabP/pK+Wn75cuQqxk/MoU4zgDAHGSK6i81mHUtUvNSSI3dtDtjVGJ8nDL8u8YBwevXHFeYeKtUNnr1pY6tqtxbxySPeyiOFVEiR4baufuZwFXGSccV+XZjWlXx9Xle/+R6GGVvQ9b0e+8PWs03hUW7XdrLZR/6BPbmGG1kaQSLMsyPuOcfc7bmB7Y6b4efFqbwtYXnhnwrpU7XWr2z5mmhB2h94YtuBBO1nRVyAAWJBrz3Q5GaODVrJoksmaOa6jW38yRpnG/ezH5tiqAF553kGtLS9U+0WlpZ6mrABvtSrJJ5kiLK7FsjqCvI2/wAO4DvXmyrSpxUlv/Wps5paFbV7HQ7fxQf7Nt7SbUdNtZY4miYhxGcdAT0zuGRk9OwrFjXVrfQLW01Jonv9wimOzPmuwLbIwpUZGUYt7HrV/UfElpbeIJ9H8NWdol21mh+0TPhFeTOcYHQAbiOnz9eRVPxNb32pQ2VppeqyxQCGTySgQCQk5kckOCpEY3ADC8dSeuXLry99THm1RV0XwvfJDe239rrrTSo9vbQ7jGsbs6uW3KFBK5GSe5OScc1r/TdQ8UeILyzuNWsJdEtWjZ7S3uGEk1yED+VIqjBXY8bc9AcdTV9/Elreag/h/QtcsrSxsbP7UzW8jTZ8z5bfcTnKBVy5BwWJHavF/wDhOItfvbnQC9tFZrdS/aXW5/0lwiq4mAjG4j90VZiQiKyngrXbh8PXxlSUrJOy/EJRlVke3aKNF0mOXxJ4a8BynULr7Lp8Rth5PmSLgMxIACrGrKSi/exySemF8QNL0bxheS+EbfVZPNjt554VjXayqki/viFbY7fMNgY45Jx2ridD8QeNfjZY3PhvwrYz6P4aeCKCS7iDfZ4ZRzIiKcuQVZF3Fs5XcSC2K9Q8NWvhfQdOvbyCxmu7nzHtY5hubzITHHFlEJAUM8XHG4ckYqMRS+qycpSvNed/S/YUlJbnhnhXw7oeufHW68P3F1Pb6fHp13Gj/ZjPcbV4ARVGBIVB+Y8DJr6An1yz1nRPPjvpYbyFo7FNscjslopyQflJVsAHBJJIyOMV4R8Mdaj0v9oLUNUuLy507ZZXUS3cMIm+zyMV5ZWBDDnGCDlioHJr2PSPF0lv4algm1z7PeLcy3lwbp03NE0e1IWkHCyBV3sqk+Wsaj5iTXr55GpKV2r2UfvNacLUec8O8beNdWX4gLL4fjRruMDR7O6toRcXFvDMxSfy4x96ZmaUqWOVG3BBOa9F+JHiTwj8NdQn1bUtVvtWudXsre0h057prW8gtUckkLGvlxsSFJ3ZxuYANkmub+DelWOi3mteMEa2uodKu3jiu2mIDGWNfLDsSFyrEEgjq+M5xWR8Wm+GN34iePXrq8toYrVQt9Y2AaSWRrhichnARECtGFwSAFPrQoQqVIULO0f6t5HNLm+A4Hxt488C6poc2i+H/BdzbQyRo9rPd3W6UzttM8sioArMDuVWxkr1HPHn4ieNG3YUyKCgHU//AF6n1r+y49cuv7Ka4/s9Zf8ARvtGDII+wYrx69K2NMhOoXNvDJDtWMBkyeSOu78eP1r6KhQjSXu9dTuw9N1Zxp9XZGhoumR2Fou8Bmcbuex71haxfXXiPVDpenyn7HbjLHorY6n+gra8XX66fZSwx/fkXyVH16mqPg/RZo7YakzN+/U/u+MY7E12Yej7Wp5I97PsUsHSWCo6K2v6L9S1a6JbxxmGO3WKMrtIX5nYd8senHp71t6Gv9k3VvLYskAsD5ynfs+7yQD6kZH41JBZXM21Y0znqO4+oroPB3hO48QeKNN0qSxuby3nu4YJhbISV3sBhj2Hr04zyMV69SMaVNya0SPjo80pHX6pfeIfCn9keK/DOl22i3bxyX0RurFW+1TmMhoVP3ixDM6hVCAL/vGqll4cv7TxJpU15qVprusyrZT6csNtMbtndWZI5Il48oFiS0mCVJHAxjtNcnaf4kWPhV9L1LTtJ0zT7h4V011eadktnGUcrlXXcyZOcq3Qfere1bUreTTbO10DwrM9pdLFJptqihSIkhbbNNIP4A25ipIbj8vzGtiYpxlTXxfl0uzq5ZU7VL7nmnxS8eLoPi6K01TzbkLMt5qep2YV7mXUYYyu2AuNkK78Z2jKktj0rmZtKX4j65YXGn20t7qU16l7PJPjbgS7nVnCqjBlUKqJuyVOOjVieJLeHWPGWl6z401pbOK5+yQw29rMXeCMrhSSRnajAbzgkksAc8169p+ntdfFSDQ7Pw0NKsbbS3u7E290MWaLDIplmX7vmuspCsxGFOcZronUjhaa5d7N+Wn5mlWcsbWTS9PJHKfFS8uvDHiJdY8O6laTXslk1vDaXhLy2u+NxJLHkLGNhBXud+cZxx4Vcx6pperD+1oGM8ZRhHKDgjAIJzycg11vxW1GbXvFWqQ6TfPPpcV2ZLSJWVYYgGYYVVO3GS2COu6s7wraaf4i1uebxTqlyIbGylvGZlaYzMuFWPrwCxHJPAz1OBXoYKn7CipS1017nNJ+8e1/C/xf/wAJpHHqWq2tjdanYC5n1KTVVecXgAQwrbhVPleWsYZyOWAIxjrx3xS+JzXHiKws7e1S6sYp47m9kjdR9tki/wCPdQCCqRKrHaAoJLnIBq98D/Eui6DpU13DqU8d/D9pW8gnsJbm0ZmBMJjWM5VsLjLKfmK+hq9o/wANfENh4utPE3iK10zUrjWIVuljtohcRWMpdBib5ljUruAbcw2vuyMjny5Qp4fFTqTj7q2BxvJGxrEf/CWax4I8Ra4t48Fkbd9Wso5ka+WDBMEojQjG/LgFV+UMvB5Ncp441Twr4s0PUr+az1rQb64uRpax3Vy32NHjkZ2eYRjDLGpVRlc72OSdvHbm41DR9Y1u816+ubZrCOOYzaXbt5lsZdsTncgxFGSofBI6NtzkVyfizRfC+pXQ8Mw+IINP+1O95JcNhAZiFPlugzIpIi4T5fmYk9ycsNVipJa2W1vvZ2RowqxvszmG03XPH2g28mpyWrwadOdNsL9QyWqqq+Wp3sQEV2XJJ7joN1eg/Dy38KfC2ST/AIqWTXtbsWkkFlYMrQg+WxLMQD8gJzuYHGCRyMjkfAd34b8darc+CfGmrWmmeGtK04w2Ece4wlh/GWHzBnYBhyQWbHNdV4V0vwvb6gmj/Dnw7PPpWmarK2v3M9sjAW6RuqKxk2nks64JxlctxjO+KqOV6Mrpb6aK3nL9EclSz31F8capJb+C1+IWqWlvcavOz2tja3EZkW3jQRqW83h5ZHQHJICgd2OSPLvAPhXWPix4il1LxFdXsdmyOTeRW+VLbwBGOgBOTz2C88Cr/wAWNWXXtWFpY6V+70uJ3Ma7Q0ysxYzN5RYDBIwB0UYNdB+zTqpi1yXw7J4XL3F5ZyzJcTBjGqbWXcTyBgnA45BINbRTwuDlWpr3vyRMJSmlFHNfFbwnpXhDUYpLPULtGhZZJEvJMTyoXOwpgAMdoyxGMEjGea4qTXJtXuxcavdSX1vCpt4HldmeGPfu3qCfvcseeuTXTfGrXGv/AIgXsEF55sOnk2oLRhfnJLytj3dmNcFHbWotXjmaSJiSykH7xH3QK9PBqU8PGdTdorl5ND1fw9qng7xFPLoFzpC6folrclba2VMXcm/G2WSUYLYVXJycLgADHXzC6js5lurjTpDIJJT5Qd/n2DJ+YEc8Y54r1r4WeHYPEHw88QPql1Z29zfXdtBJe3EMkskdsFLMgROecI2SMHIry7SNNmnbVTp00E8OnW8k0pkkWPfEDjIDHJPPReajDzh7Woova3oKK1M0SLdJHHAp35CtnuP6Gus1y90m48Lw6T4dWcQefFNI10yiR5FV1YgA/dyeO/rWH4bhht5rW8vBHPauyiaFZQu7cdozkH1x+fIroviRotu01tNZ2OnWt2sjNcCwm/cqjBSse3GFaPlSQx3HOOBXRUlF1IxY2rs5y2sEXS21aazndoZkUTFx5MStkYZcZLE9PoazL+SPzY1izsQBRmlkN5sNmZn2KwcIScZpbiPzHjmYbGClevBroirPUZBlWujtA3FASD6+341dmlgntWubyT/SmXZwMYIxjj0xWfL8sivH3HB71Ky+ZJGoB44+uea0aTLRo6as1vNFIxdQ0e5TVw6hqOR5sKsO+Mc0xftfkw7tpKELGjdxyTQ8lxzus8k/3T0qqcOfVnRQxtbDrlpysiM3Nvbu7fYSN53E471n38cULm4teNrDlT0JrRaTfEUNuykiqdrHutr3IBwc03T5dUdVOvLFJwml9xmQvi6WTaGJb5ge9aEl5NdsDK3yL8gGPyqlHs8xl8sMXBUYq6YW2qsjDPQheTxWcjy57kbQyxzvBuKs74wOK1IPOOLc2rReYuS2clkPc59Kzr6NZGVl3xEHaNxye3NXrUy24l0+SZJv4VZuvqMH1rOe1xSVhdFhtV8Q2CzXckMUd3EtxMpGEQuAWGSAAO+TXXfEzwVdeBdSmjW1mWO5meOXzmVwx3blaIgcoVKkMCwOevIrB01rG1Up5ga8kuFTaYd67OvPvk17Fa+HdE1LQ9M/4TC+tIL60t/LkaeQ48ti3lcE8P8AKy4GBtVOlc1WTVWFnvpY1pxjUaizwKSEyIq+TIEQ4z1zmoZIpIyJFjl4HUrkf/qr6Bb4deFrj/jw1bR5cjPyXABP4ZrnPEvg7S/D8kFvfyeSbqMtGYyWQqDgnpxXoKEkd8KGF6za+R5HHqTCNlmVc9gflAzSyXzbT5luWYjG4YxjtwOnf867i403QVUhb4MVHfBrDudP0vzOWjIPRinb04pcvkJ4WhvGovusc210zK21idowob+EGqnmSKx9Cn510Mmh29zLtt5I2cjACsRk1j6lp1xptw9neRlHQ/kapGNSi4LmTuvIl0vUPs7LIzHMbYHHb0rufAOmr4pupdEbUo7N5T5kcLIGVwvzOzNncAFDEAZJIrzeEtbSKy53A5Fdd4Nu4bHxPp+s6tdG2sobhTNMgBZUPBKqeGwOo9M8GubFU+am+Xc5KkeZeZ7boOr+F7yTUNJvrqXU0a1SysLeVPK2SMnmNIBtYCP768cnGeMV483jLWNPuBZxz2k/kThrd5IA/kuDj5CeVyAAfXivYfGni2a18S2ekeBPC95qAvliuJLi6hjje/GwLm3AjRYk2KyqMcFs8tXi3jRrDULyTW9Pk1GQvIfPFzbhGg5GzeyfKzZyCcDOM45ryMvpLncpx0f9fI2p+5T5o7lqbxVeeLP7UvNUurbTp9RuReyRwxstuZVUjdsXO044zj1rmNTspIJkBmhkWWIbTG+5TjjqP5Gt+TTdMtljj/thbxpoFlL2qnKM4OY3BHDKRzjggiuWubhmXa2N8TH5getevRjFP3diXLm33Fjhj8l1mZQUw4Hdh3ANTSS28p/0dWjhCjhsZJH+NZyXTCMxsoI3bs9xx0rThjjaFWTlepBXJDe1bS0IkSW7IJFxBgfxBjn8fp7VLhrC4jaSR1iOAvouRVBmmikDMuwjH3f51f1C3kuJ1ZWkkAQE45GCO1Q9yWXYodsjM7bsndtX+IHvWTNFCqq0asyKzKzN369Kv2UixTqsbhtylXVjgr9RVAM0s7xquFJ+5u9P60QWoloJbtMityj7hgIep96vWNxGsUXIj2fLIp6H0P1qBWWSKMptj2Nww6r60sKgM0kMheORjvD/AMP1PenLUHqWV86OQtbRpgjdGW5246498fypqyKcqq+ZvBZCeOff8akkeG3QTMXVlbZsXgNnr+mefekt4lurdmt4yrxuTGSOo7j8qm+lxoghnkjjk3yFTsbsBnnpTNOWdWkljjznOQGxle4x6YqxqSL5bqBtaZEYI3HzA81VgK2c0bS7ZnjG5EH3T9T3FUtUVYt3tolvdhoyfLOFwx55+ntxTNQ3GVY/M3bFDDdxxUQj+0NLJ5m1uZNp7dyBVqeOSWNGuIyzldgkzgOo9Ka0ZNiKZvMVGEPloY9y4I6jvUvzMsU32eRAxIlC8KQSMYFQWKqrLK0m4K3zI6/Lj0z79Ks3P2hYwkkg8tmyrj+LjgfQU2DZPDI3nNvyXMmDn7wHPevVPhrrzPqWlaHIkR3XQl3Mu0o4HQH3A/SvLdOgmkVtjSy7uX9CPfvXT+Fb63t9Tgvvs6Zt7lJdrA7doPtycdcdaTaTFGVnc+uNPkXcrKAfVWr9Jv2WbqPVPgH4ci4IijubVh6bZ5B/LFfmnppivIYrmOZCJAHVlOQwIyCK/Q39ie8a4+C/2d2ybPWLuH6A7JB/6HXXUjaNzRSufJXiZbiy8SapYrcPGIrplwoXIwemSOnFanhLx945+GuqTeJPBN8RHdqi6hatCJFkVOQdp69T0+YZJHpWd8ZrWTSvi14jtom2ql7Jznp8zf4Vh6frVxbsDuzj0o5boqT94/R/wl4q8O+PPDtj4q8MXkd3Y3arIrI3MTd42/uspOCD047VaOpNqG6z0Eo+07Hvj/qImz/D/wA9GHoOBwCe1fAXg/4ha14J1GTU/De0291IralpEjsLPUFB/jC/cb/aHB6MCK+0vhr8YfBvxV0Vo9DmOm6pHHtfS7hlSaAgfKU7OuejLx9K5nDlYHJa9ps2k/H7wfZ2slwYxBJuup3LtI7rIZNp+6hIUAhQPve9e818tXHiqbXvjlpt99oaOMa2iIGJwsUSEMMZwM7WH419S0xy6BXN+KV2694Sn8zbt1aVP94NZXPH6D8q6SuZ8abFuvDMsmfk1yLbj1aGZP8A2amhI6aiiikIKKKKACiiigD5w+NXh+1u/jJFHcRlxrPhi8hUbQQ0i29wAOen8P6e9fNrfPCrYOWUdPpX1z8bbWO1+IXw/wBekcRxG8eymkZsBUZlByfozfhmvk2e2a3me1b71uzQt35Ukf0rtw9paeQVNIpnjX7Q2nm48E35Vc7bVmxnujo/8s18Zywr50qsB98//Xr71+KmmtfeFbuEIx3wzx/XdE39a+FLi2nV5MqSWUNx9K9OrG+Hj5HFDStI+r/2c7xb7wLaxSfMEVVOfY4NfMPijSZtH1i+s/lV7a9mhyo2nhyBg+wr6D/ZZvd/huWzZiDGzrj05yK8o+NVg1j8QPEUfQC9aVR6bwGz+tebmMPdU/Q9bJXrKn6/n/wT1b4SabH45+FL+F9UvLhUvLWS1eaN/wB6hWU4YE9x8vX0r0/QfDOm+G47hbHzJJbuVZrmaZg0k0gRV3sQBkkL+ZJ715N+zLeFtEuLdjzDeTLx6MqsP617gzfOcd6ihDnpozxT5Kson0d+wbqgj1Dx/wCG2Y5W4tL+NSezCRGP/jq1B+0BLHc/FbWGRwRFHbQt9RCpOf8Avqua/Yv1L+z/AI6axprNldV0BmX/AH45Yz/LdWr8X2lm+JniR5sZ+3bflHZUUL+gFcmYx5PwDAvmk/66nz3nJ+Unmnr8pG7ABqNcdc0/I7Z5r6Wx8+PLc/TpxilV1BJqNcH1Oe1KSqnIzx70/IZ9Afsa2f2j4n395tyLTR5efQtLGP8AGvqnx98RvD/w80sX2sSPLPKwS2s4Bumnc8BVXqcnj+Wa+cvhD4g8HfDrwrp6fD+zk8SfEfxPZp51tGxdbcZLeWcfLGq8FsnqMsRwKv6pqw8G6hPrV7qVtr/j+6yLi/Hz2mjg8GK3B4aQdC5HHTj7teNjZqdXm6LQ9WhBxgom74quNQa3j+IXxhtWlXzgmj+E0kzFDKV3q92R3C4OzntnJ4HmHifxzqnivUv7S1i+LMBtijVdscKf3Y16KP1PcmtTxFfXF38PdIa+unnuLzWtQupWkfc7ERwpuYnk8k1w0qbsVxzhKSvEU5crsT3WtQRqzeYS3YDvWO01xqLCa8kKQg5CZ6029ie3h+0Dgj1GcVz+p32oTQtH57Kp6lQAcCuf2bW44u5ueIrprfSZptPkeLNu7hlbuAf1yK+VdBuL6+upNSvriSeeS4nJkkbJCruAxX2N8SvA3/CGeD7G2juHupZ/DcOoTHy8CNpNxKjvwMcn3r5i8AeH1mi0u8bIea5mjWMrx8yg7vrlxXdhsOqlWMO4nPkTb6H1b8dLFLW88G6NawRxiw8I6dDtRQqhiHJwB6nn8a8b8RaTqmhTaR/alnJAt7Kbm3LDHmx7iu5fbKEfhXun7QkIj+LUlrnb9l0/T7Xb2AWPP/s9cL8cltbrxf4ItJWDR2Xhc3IGcfN/pLj9QK9CEuWCSMKivNs85tbW71ZUkuJgICodkVeT6DNb1nbizhWCE4UDjkn+dVNJ+WziVVwXUM39K0o/uj17VabbJ2VhrYXCtke5qHUEmuLC5t7HaszRMqF+gJGM+9Wto5XgtjvTGzxtzx6UTXNFxJeh4d4i8ZeINN/s/wALaS7Wtzfqq3DG1bbAQpYrsA+diVwCeBnJ6V5d8YL++g8cadY3Cz3BuFt9NmlVkk8vdsBiyc7Gzg5IBHavTvE2haw3jW413S963cd3FZQXCIs4tYGOZWEfC/OWwM7jkDBA4rjPEHhGZPiTHfaoDeac+ptNdWNl8wiVYDIhbZxuJXZu3cAnpX5x+7pYh7dbnbBvlueq6ZpGi6Nca1fJCwhs7uMOy/vpG+6Yo1VT94MEIzz36Vr+GdLsby+v5biwnkF3ALS2FyuJYLXzhL8zZGD83zHrknqKpyDw3deE/C8Hhv8A0ZjfNeX88EjAxTO7iIu4+YhQoBOT1Oc5rUmnudHsZLq5nmuFuoFaxRYF2R7HMcku4ndtUIBgDLMR2BNeJUm480osu1tTK8enS9N1zWbzR9HWWFCYmjba8W1svtTd8hztVMMcgEAgnFeLfFrxrYw6efDM2k3VvrkVlEsyuoikgtnUSFGjTgMcAtn7qnaAME16l4wbQzo9pHr2uae9hdXnmRxWcZ5eJS0XKsXyzjbnOeeMkivA/H2rXF9J4k1y8s7aeaS3js45dPjKjMszPILiRvndwpC4XPHGeDntyqCr+9NCfvSsec6d8RPF3hmO803RL+SC31G2azkTarfuSclVY8jnnj1PrTtR8Tahr1nOt9DZ6fDc2sEM3kpse6MeNrybQN+Av3T8vOTluaik8D6xpehnxLdxiO3kngt9u75klkjeTbj2EbA9xxXJXD3FxLLHuOFbAUdTzX2lOjCOsVqz0lR+r041JxvfY+rvhvHCnwwsrGbxU3h6G5uhI8EM4M93GXjK7otw3RsFJ3ZA3HB6V3fjTxRpPh23uL7U75J30u5hmuzsytyQrbbfZGAUUhAN+QD1HHXkfhd4d0fQfgdp154gkOoXdxbrqMMcxC24hLl4oy4BZ9hX7mANzY5PRvi9tej+Gt9q3hnSWsk169a6u0aDzHl05VWMRvnlSzgv8pOQvB2ivjWoYjGSl2lby3+84qs/aScnpc8Bn17UdH8Ta7qen3JhvJYDHFN0dXYpu29gSM89h05wa9r+CVxqniLwO97rlzbjStHuLjTrcXUibbiaURs0gVsF3RmBzknJ49K8HvrG41jxJqkNvbvIlmstzPJHz5cSbcuQeMA7Rn3r1/4G6u11osfw+0/Sw1yb261KS6aGOV1ceWI2iLjAO3K4PynPOc4r6fOIOVN8ivt8kVSUpQ5UejaPp83h34b69o82j6TBYwahP/ZDJqCJHeNuO+7nlkOWjiLRgKPmIBIHGa8S8T+HT8QZor281rTbK20fRzPe/Y9s0rS7maSGGJMsW3Hjce5Ynmvo3xtY/wDCV6ppnhubUrTSZrG/nik01oIU89EiUybgykqwk2qOCME4A4z4BbXnw38H6v4h8PPa6qsPkLYm/VDM0jIxSXcoKFYSSWAABO3DA14WCkuZzp/Fvpr5dTDmkm4/1oec+JtM08+G7DVbdoo7m4cK0CPkxxrGqjdxjcxBYDPc5p/gG3je4eSRZAein+HjGR+tYutamNSvrua2hEMJ6LGu1AoIC/KOFyMcDvXcfDvTH1a+0zS9PjlNxcBUMarkO7ucEepx/KvrMOpNLmPXyv8AeYyn6nGeNLjbqohkj3qqkqD0B3H8+la2ipq6/ZVivImG1dkZiJRQR0PPOM/mKx/HyImvLh1bMLEjPI+dhyO3rXfaHpskOnQyQgebtXJccf8A1uK76EeaTMM6k/rlT1PXPBHxi+I3hfwvHpMeu2kQsbC42mHTLWORgi7lDyCPc4yQDk54HNM8JfF7xxputXPihLyMPq9zFf6jAiGOOeVYfLPQ5XKk5x7+tcbIv+jTbgVC6XfN93qwVP0wf0rR8ORXVvb219H0hCSR/wB3eMHODx2reGEozlOMop6Hl1K1TlVmdr4T0TxFpfizXvH3i6+vCJtKFrbKQ8RU3eSeFKlliRJCN3y7gpJwOej8Yar4b1Gy06zttHutQ03wxo0V4lwupMRLabSZfNOAZCQgJUdRvPANX9N0f/hIrya6v7o65NfrZy301zp7RxQKS/mKJmVXALJGqKhO7MnTdmub166s/DHhHxLJJolwBpnlaW0YtY0jyFKHYFHKFjgh+DjHrX51mE6UqtodLK0dl0sbQjKpTbjt1PnjTdPvfHnxRhOialp4vLZZNWVL9ikLNasZfsycEtwgAGOc16qvgm11TT4fiPqvxMmjs9fvriO+m00mOFbLysKPKbLlyxIYHLANnr08Y1Dw7p+i6G2oPfT3V/BeLFC1rbyKECAGV2dgAMBlGAPvV6x8H/hP4vtPG2rW+oeGdEvLN7hV+xtqCsumyOiTrOYQzAKIiA2/jllzkV6GLj+554Sso+mvlqZwml7ux5L4g0+NPEC29nC8ZmkRIoZ33MhzgK3r269etYWnWOtar4kGiaHYyXOpTySRrbwcGcjLlME4K/LnB4wBXqVj4o1xfipc2+p6akmuqtzBHN5Sqwmc7sojAqrEqqqeNoPBHWuX8ZTQ+FPjd5txINRh0uexMk1upja4QRRknrkOVJBOclsnNdGGrSl7lteW44018T2PV/Afw9Hh+y1nx34x8RGK71i2V9St7VCkFmJDuk+0BQCDuwPLXGFLE5BArG8feLNY+K0cfh/wboviO+kg1SZtS1L7RKUlkZhs2jaqRbkGSoRSCBwcZrd8Gr4lu9K1y8k0u7j0q71K8NnPe2hu71InhGweWQQGU7CScls7f4a5jwJo/iTxbZ+MdUs/iE+kaPpGpyalICzSK12yNiRtoHysi4Hdj0WvOpuXPOpWd2rei7aLsZuLvdHp/jnw74h8KeDR4c8Pma6lnaGa+uZA3mRMAGNw6pw2CYkUkNw5yMnNebeMb/RZND0KS/1rS11N4Ev559Ssss2d8nlsM7WVN/yqAMEkEZr0D4u32hf8ILpDX3ia7+3W2mRfYLSxheOZnZAS7sQCqByQVPACHA+YV86TaDceLtcVLvVLZL2W13BL6Voxx8qru5CtxkA8YHOMVy5XTlXXPVdrN623/wCANu25qeIrHU/BH259D1k3Wna3bJI91F5cclxaSqTFlAT5asMHaCSN2CQciu/074batdeC7jxkdctjBb2puZdP0u6DfaGJHlHY3BwOowTu+hrmb7w34TbwHp8cmrXtv/ZkstpqU8UCOLi6OQohHAMWVCK+4hiSSB0rp/iJ4qi8Nf8ACK+D9G0GVVK2phu3m3TyQYEKqYV+UPgbgP7xGK7sRVqVuWnT+K76dEEafPHmRmeKPFX9j/DiPwT4SujPq968mr6pqYiUeTHIzFrYSnmSRspuAAxtI5+atT4G+IbrwF8PfEPiW60+O8e2voZvtysADbmHa0HnbS3LHaYwRkscHrnb1rwnqWmS6n4Zm8dLZ6dp8TrBDLCsbGCfcrRCR0AMpTfhuMMSR0rx34n+Pl8UND4ct7e2trewjWPFvAkKs6gAsVjAUn5Rk/Ss6CWNp/V4LRu8n/VvQ0nSdJ6E/wAXdJ0m+8TxeIfDCqNN1i0S/jVyy9RhxhhuX5lJAYnIIOecV599iU2redcIPM6qDkoO+fStzRtW1qbR9Z0GHSba6luVhu3vp9xltYo+GVDnaFbcucjPy8d6qRaWs2jn5mF9cTlY/mHzKByxHXGcjPqDXuUU6MfZt7afIVSalLmXU7fw/wDFjxonhu40HRL7TLXTUit7BgVCzzEsf3o46hSqsc4wq8cV5zrlqsN7dRTMPNjnYN8uBIckEj2NdL8NfBun6/fa3BrWpC0XTbGSddjqBM6kfLuY4HG49ycYHJrmLixuL5p9UeRsD59xOTkY25+vSpoQo0q01TVnpfQm1mXdFvNFtbqC417TJ541uIpwkDBTtUksvUcH5ehHf0r0D4seLLDX9P0KHS9Jg0izisTMkcc6zPM5ZgXkYHluSADyAOprym3mmE7xtCkgfg5yBj6jpXtnxVfwz4k+Gnh/XPBWnCxttPhS0vI/su1YpSA0kYkPLbWA+bOSrcjrRiIxjWpya62/A0TlJcqPF2Jt48ySK0j4Iwen+HWrslv50RkVw0aQhiGXG1h1x9OOe9VI7eFUEzSCUltuAe+P8O9T3F0uyH/RfMIXbw2Ceep/lXW/IhkMMOy1klktldcf3sbcnhqb5jbxvXJC/L+FOZVER8stGkh43jsD0zT1t91vBK3AnZ1Un/Z4P+FO/cRoqty0a30bg7V2pnt+FQTXV5u+7Gf0qjdzNCwj3Haqj7rYzTre4s2Ufa5LkE/xJtIA/EV00JqMbMuEOd2uWGu5GU7oh+BptuywWtzIvzFwDUTLbM7LDePsP3S0YzVaRjGrRxsXB4z6mqlNM6aT+rybZHGs3mFoThl+b9a0o2jUm4mZ48r83y9GrPjiZV8zzihTlTzy3pVuwa4vklhf5pGxtH97muWZyy1Ld/HbwzRyTF3DIuMDqPb+dV9JhhuLie2GSDny9xHOOevarV3dQNMLFvuBdrMnPPTAzUWnNbWMbG4ty2CVPHKg8VkvhJWhuaVYzRXcYj0xLoTK4KM20cDqT144rovDsdxNb3C3l5PM25W2yEnaSMnk9fr7VT8B+JFht30O9sYp7eaZJFmXHn24wQfLJ45+UEn0FdTb6dY2t1MNLt547aVBnzpA5d+cnjp16CtMOm58so/M5675Icykr9upzOtaTHI5bYm9fl+761ofEhZk8E+AZkkZG/sto2IbHQr1qbVITtVsg5bj8qd8RVD/AA58CTbekdzF+TY/pXouNkycNOTR5i9xedPtDn1yc1XkkmZfmbP4VYkTn5TULDtxWbidKmze+H+l3WveJtP02BlVpLgsWZsKqIpdifQYU1J8UYbX/hJL1rVt4WY/N2OcdKj8ELcRXGpXUW9Da2khYgdN5WPaT2zuIq58TraSPWJpLmIJK+0sqnjBVSDyOe351k4tts7sM+ZTj5HB8K6AtwpGP8K0dJvZ9N1FLq0uNgik8xX2htmecgHjP+FZ8iruIGSat6bNapfW0l/5gtlkTzhGoLBN3OAeCQM8HrUy1RlF2keq+F7WODwLquqaxrHkNdrK0MsPmT3ZYPH5cewfKq7weSRxnFctBqn266tNH8Q30tjbFhZzOWdTHGnRJUPXBHBPTNer/DOLR7qZfEF1pt02lS5hV4pFt49sIJjafHLEb1Jzu+bAzg1ynifRdNvLjVrrXS0czKb62aNoo5/mZY2Z+SsmDyACNy4YEc14cK8VWlFr/gG2Lq0naNPpo2efR+XZ6sG0+TekOB5n99vp+VNvNFW7jnvo42QndIV4xnqQK2fF1jaaPry2VlbXMZS1hnT7QiK7KRx8qk449eeuRWq9rbyafJNZSCRJI9xGMFcoOPce4r18Lapr5GcI+/5HlcsfzbScYOKmiMynbGxGefxHen3ilpHbbgq3NNgjMjLtbPX8BWz1ImrSaNGP7TPIWCq0iL6dh/Wmq9xC277YWRQdvc49PaplZY7TzG53KRlT1P8A+qm28KTRbfJBIwyupxn2NYXMb2JvJLXySDJW5j+VmHfHI/8Ar1VCx+YvnEBshQV5BxV5pTcRrJDGV+yv653epwOhqnJItpsmdWcylj7Y9veiNxj4ltXkkXaF7kdiQe1TtJ9nnCww+VC7fePIOeo+lZlvMrzRqMnGF9/atSG5WTdEs0f2n/pouV689R1xRJNA0XLq3t75YwLiG2GSxMmSCyjoMDvVa1ldLgw+blUQEkHGOeuR+VReXPbqFuGXexJ25ycdM/jUtv5YaPcisj74iw9AMjj8Ki2lh9R98txIhuJtjbm/1g5xmqBlWKZId2CPuv8A/WPatFVXypGjJxINwG7r36fSoZrZrjbJtbcACG2np05I6fjVwdtA3ehDatHHIrJIJJGY7lZcY/8ArU25lmuGWX5sh2VUY5wOtM+zyqySMGCk43Y6emakZljaaOWPfufdycVduoraksm/yjCw2pIAQFIwSO+KuySPcLHI2WBjHmAjkSDuPQH/ABqktnvZDPIIUPzJuPf0rQlu40C3F8zZJ2ZQcRgZxge9RJ2EyrHHMzCO3ZyzHco3Hkg+ldJ4ftb6+kNrp1k9xcE7V3ELz3xkjOPz4+tc39qeWYXiswTrhOAD359TX0V+yt8Dbz4+eMJPBuj+LrTSNRvLa6u7aS7iMivcQoreW6A7grAt865K7Tx0BuPLdc2wuVvQ634f6heXumPpurQomoaQ4srg7shyFGGH1Hfv1Ffor+wXqPn+A/Emm8/6NqySj2DwIP8A2nX54W+i3nhXx9qnhbXEtoda0eVtK1NLe6W4t52QKR5Uqna7LkZH3hnB2kYr7x/YFuPIbxjpeSVkWyuFyfQzIf6V6VWP7nvYILllqeW/tQWD2fxo1v5cLM4l6ZznB/8AZq82t41ZhtCn869s/bDto7X4vGZl2i6s4m3H12qPy4NeNrZyJiVFJU/xD09aujrTQVNJFy3t1XO1mGOvzdP0ra0u502WS70v7dJb6tp0UepwNhQJLUsYXCuDuV1Z0bA6qW7gVz6SFcYJXGPxr3T4f+FfD/iDwfLoWs2ds1xPo5vUutoM1sZmJOxjypAMLYHHSuqjQp1JWqIxnOa1gcBot3r2gaxb694d8RL9otWdlg1CFpoG3qVfvuGQx5Br6U8I/tX2c3kWfjrwfe2EhAV7/S5FvbXd3ZkGJkHfhG+tfLF7Z614dujp2u2b295GDuH8MihiokT/AGW2kipYdULL/rQcNXLVwkYScX0NI1bq7P0O0HxV4b8T263Wga1aXyOu7EUg3D/eU/Mp9iBWb49haSz0eVULeRrunPwcYzOqZ/8AHq/P7XLyS8to5rWaW3u4D+7mt5DG5HcBgQQeOP8ACvTtG/awvtP+GJ0Lxbpus+JNc0y9tri3uoGiD3McVzHLtl3YIcKhXIB3DHfmueWFktYamkaib1Ptqivm/wCGX7Z+k/EbxZpPhZfh/qOnNq1x9nW4a7V1iJyRuGwc8AYHrX0hXNKLjuWVtS1LTtHsZ9U1a+gsrO2QyTXE8gSONfVmPAFfPvjL9tr4d6DcyWfhfQ9S8RtGcGdCttA3+6zgsR77MeleFfG7x58Tvip8Sp/Bd54d1+3W2mmXTNDWxmAZI2wZiNu2VuVJfJVdwAwDzpeCP2R/il4neOTxBZ2/h6yP3mu3DTY74jXJz/vFamV4u1jdQjH4zt7P9vC8u7sQw/CWSVHOEVNV+ck9B/qcZr3n4c/EXxZ44hjutW+FOseG7aRdyzXlzCQfTCZEnPrsqn8L/gD4D+F0aXGn2f8AaGqgc6hdqpdf+ua9Ix9OfUmvSqE+5nKUX8KOJ+Kfgu+8ZaZp66W0Qu9PvUuFEhAVk6OpyCOVJrx7UP2Vdf1DXtTvINc0qz0+4vZ5rWMLI7JE8jMoIwACAcYzX0vUf2i38zyfOj8zrt3DP5VpTqSpu8SHquVnzxcfsbaDqlqtrrHjK9Zdyswt7VE4HUAsW6+uKz/D/wDwTn/Zd0NkkvPCeo606AAnUNSkIb6rFsH6V9A+JfGGgeFLdJtZ1GKBptwhRjzIQM8Crmk6ta6tY295DcQOZoUlYRyBsZFaPEVnG3M7EpRTutz83viB8K/Afwd+KesaT4R0mLRNPbUpI1t/tD+XtaIOgXzGPQHHB5r5O/aQ0vyfiBeXkcbGG8tbeYTK2UbCbTg4xwV9a+/f2vdH0/8A4WdeNqkFtJa3K2F0UuAuw/L5Rzu4/hNfGnx6jj8GanpD+FVt7ezvreXzI0O+NnVuoGfQjgccVvjHKeHTXZHZlqjGu97v7jmP2Y9Q/wBN1OyVh8skE34MGQ/yFfRMmRJncOlfNfwg8V6jrfiiaxhistNuJLYyfaIbVCZNjrhWBHTnPXtXtd4vjSMqI9Y0uUpkfPaspP5H+VZ4Go3TtYeYUo+2b5kewfs6awNF/aK8H3DPhL8XWnv2zvhcqP8AvoLXoHxBf7R468RyKu0Pqtz35GHI/pXzv8O/EPiTw/8AFPwNreuW+mx29n4gs98sMjD5GlRXyG6fKTXvHiB2uPEOrTb92/ULps5znMzc1z5vqosxwMXBy1PDR/vHPel3Ywpzn1qNT1B6E0vf/wCvX0KZ4DVh+fmb8xQrenOaYDtP8qXdg+lNAdh4H+JniLwDY6rY+Hfs0B1cRx3FyYv34jXP7tHzlFbPzY5OBzUn/Cx9S27WsbXaB15FcarBvxp5553VjUw1KtLmmrmsK9SC5Ys9+mn/ALR+Hvg66ktkjlu4b+5k2983JRcn6R1n2ultcuI8H73HFbVrYXP/AAg/gi1kgEZj0GN0AOcrJNLIGPpkEcVs+HtKaS6j3L1bmvNmkm4o6JS5pGB4x+H1xYeD59faWNI4GgVlIOWMkm1cfTGefSvMf7KuLqOVobd3WKMvKyqSI1JxuY9hkgZPevtPUfhh/wAJl4Xj0PULqSytpZ7e4kZVBkZI952jP3SSw5Oe/FYHxq8J+GfAPwJ17SfDemxWcdx9mikfrJMxnj5djyx47/hWK5XJI2UOX3jzz42XGk/Y7oWepWc7W2h2tsojuEfO1BwMHnrXzR8OdClk1jw1Zy2zAyTZYMuNrPLAvfocA1OLe3hZpIYUV36n1qRcsPmbr7967qNH2M1NPYynPn0PXPjdeR6l8atdkhKyItxBDuVgQdkMY69OuRXmH7RF08fxC0yOGN3Nv4XslKquNjNASR15+/k/Wrvh2GNLqCNfkQPuPOc9+9UPjzNHN8ZNRgbGy1sbKHjsFt7cf1oty2j2C/M7mVpbZt4zsdAFA2nrxV7P8Q6GqltIdgYc5/SrG4DG7HpWkUQx6sPrnrSyM3kt5YO5lO0D1qLd8uAevpT8yf3v0pvVE9TyxYtUg8TR3Saha/Z4pil61wwaVfLLAKqqfUhsnhewrGtLx7LxpLq1ldQ6loxi8n7PawOSLlgxVWJG1R93k8/MDjNb/jOwTVLwaZDdRwM7THbJbA/MQULbh1ChjnPUA5rjLrVpLXxBd6Bo91bT20FjZ26zNbJ5kUkFzEWuIxwGfyo2BOG+XOcAV+XVYweKnCPn+B3UY81o3Oy8QanqC+F7hfDekaXobXDQzFLpgYrYAqJCjscB15UOwx95uTg1zU/xV8K6F4V0lbG+juMYtI2jmdpnuGYDylznczKWbJIVSU4545P4nfFGXxF8Ntdk8N2rpAl1/ZjJMDGG3MzM6nhmADY2nHbIwK8k+Ca3Fx8RvDmi3luNThNxJcPHIjSBHaMgyKM8uABhu2AegrfD5f7WjKpUVuW7t30NEuW6ke/+Nr6PTdPjSzhhuJNLM88enM4mnl2uPKBIIZWQszNx0+grwazk8Qa1fXNnrFjLqVsbaOVJo4w8kCMRKqwtkBXycHCljznqa9o+OE2mNq1x4N0G8she67Ph70JII7dRHGpyyKGYfJs4yuGJ5zmqJltPC/imHT7fRbdoLjS3s9Dt4YnCJJC+0LyxJdmaViXOeOO2JyySp0ua3xXHQdpv0PI5Ly+1T4ULJd25TyfE32f7vy/JauxGe53SsfbdXnuoWdrZavPGY90UcsQYK/3iVBPzfWvbPGNjcaR8M9P8P3kglvIvFOqXVw/2cwZfyLZNoQgYUY4PcNXj9xC0sk0gVC0moRoN3T7tfYU2pU011Pfx2mHovyPr7wj4o8600nVI96wXFultpmm21svku8YlbgnllQZXoCeD0wa8r+Inj3xBqN7pFjqWnpp95a6fJFLBL9+QyKPMUhcfwAbSRwdwPTn2G5h1DQfD72uiWNlDqx0yJdOaSRSYB5KCRlB6KWOQDjJ4zjmvLfElvcR+CLDT002SbXtRgN5c3kcTSiGGSJ5ZcuWLh2Od3GApPOAQPkKFGlSxzildc1l+v/BPAclKXkfPF1BeX2puiIxluJydi8M25iQuByc8cV9V/A/w4fCPw9tfGElvMl74h1WbS454zh7aOCMyTxg/wFo3JyRx5R6Yr5ok1y4t/Ft7q1qpM7XEnlMOvLEA/XBr7a8I27XH7NPh+4uFhR7vxbqcJmVvlG6CESEMFPzHc6huvLfeOK+lzJJ0aiktLHpZdGDp1JS/lf6HG6xfanoun6p4u0O4t21HVF+2TalcSyedFJ5RdUCuGAfeBjP8RQn2+ZP7Lur+9SOXcPLhuLu+uppNzTBgSrNlv7/GT3J617P8fI9euJLPSYLGa00F7rdZ28d0JfPm+zgb5Gwu5lBXJI5BJ615tdabfaXbjwnpen20h8Qy728tPMm2xZCxLL94qysOAP7uRkV5OXUo0Yc3WX5I5qMJVYuVtDzebyfOure1XCoSqszAs2PUjg9+lexfDGRNGtdFvbi3juE+0efIoOGKjBVc9jj0ryrVNNk0fUnt7iGS2mi+9C3Pl5XOMjqece3NevfD9Vh8M6SEukm8x5G6fcHHy+/evo6FnJWOzKYOOMh/XQ8i8ebpvFEkfHzRjHtlif616h4ZVYdNt7Oa6jeWNAuUOcgdK4/UPh/488ZeKpv+EY8E6/q58lGH2PTZpvl7EbFPy8jn3r3zwD+y78aZ9Ot7u7+GfimGZ0G1TpbghWGec429hg811UZcjuzLM8PVrYqpKMW9X0OF1FisEyjJ/wCJXe7scZB2AZ+vNepfD3QbXXfDulabNsijVJ7u4YyKmYkI34J6tjgAA8/Suw039jH4yazO8P8Awhep21nJatbma5WGCQFipJCs+R/EOfQetetaD+yT8SdDt7CSHQbP/iT23lwm5u4X3MMnzPLXO588gevrTxGI5Yz5L3a0OJZdiJJe7seBQ+KpPEEWo6zaz3Ol6ZDd29jpsTRG5k1CRVkkTAYtsVZFdnYA7t4+UAYqn8Y9U03UdOntbbxrbSWtpfifULVLd7dDKRG0bxjbsYKysvTJycZANa9xoesQ/EDw7/bdorWto1zpthYxqscOnS7cC7njH/LSRjIXBGfm6ADFeceMPHGj3nw28UeGtPa8vrp5/s95cPMAby5gkdYH8tQNsIhAKLyRsAPevzeMObERcdfx3dtfNWIpKUU+bS5x9zLpem6zrN9rfxE1CzhuJNtstmonnuGj8x7d55R8ixmVU45JBY7eBVj4BeJta8UePH8G3PxJuLKHXike6Sz3/brgKuUJA3FgEG0k4JAznvT+Engnw74sW203UvFEgs5bptQ1jS2idIbeKFcl9wJDO5KxJ6GTPQV3ek+MvCNt4z1u+8AeCbW6fUJ7a3tpobNmttPto8LISTghvIQMRghmXcfvCvZrTpuM8PZttb20X3nMmovUmuPC+teEdbu9H8D+A7/xHb6pNzqxuYZrpZ0hEziEk4RQzFnJyAdnpg+NeNdY0fVreK40HwkdNu8jz72S9eWef+AAhuAcAZx1x2r0T4nSaLb65eeHJta8S6prNw11PFp2nRLtjnkV3SKNlYhYhlMlQSAG4G0CuL1X4Qa5o/gu68SXeuWjSNbW1y9tcTKJ5N+xcwAMS21yVxjOVPHBxjgeWEYyqy1ei318/wCtC+eVSCUvhR3HwS8Yan4lvY/CFvfPBbaNCLuaW4m/dqSQrCRjlznlsrgKMjvk7/hHR/EF38QNN8I6r4QtrbQ9Onuku3850W6u40DsW4LBySoBxlQXAPGBlfD/AMQeNPCHgHQbWbwDZWen2kVxc3P2mZYJryWRWP2qZiocooVTgnAIQdWxUHwf0fxB4s8O+JPHOuakbdtbedxdXMkaqY1JdjED8ykOMdcNkjGMk8+IjCMqtSyUdt73fyNnKMo76oi/aB8U6g3iaztNakgldNl7JbxqvlQQMqhAp5YgKePm9eM815Lr2qatDfaxrNvom/TNW+WC5mRyJI925XD5GTzz79ffr9auNX1nxRr3gOxt7jxHe6hdNcQag4BlthHH5bmRQuWKrt5BCAjIBrg9al8RQyReD7HVZNQs9MiZLduPKiU/M23oMc5JP07V6OAowpU40422/Dv/AMORVnGUmkdxa31rYeD/AAGvjTVJrrS3lMxtbcKjpaCTb5Z4yxDLuGeOuOTmtHxnD4N/4TP7YvjK614f2gEJjVXjiXapjkQJjdg7VwOMqO2RXL6jBDc+B9GsYPCN4kLXYtxqMsgLvMFBYR/KuVO/5VY+vpmu78L/AArnu/CeiSab4f1G31MbtSs7y8bCBGYAghRhNwieRdxJ2kdBgkqezp3rSdrX7GcZ+z27md/whXi7x34e/wCEz1Ka4n0i7N1JDMkX+kt5RCsxjUktEuA7MBtGW5z08in0mbRfEF1p+rNFaXFgSsiTI2d+eVK9R05Br1rUvHXjhdFm8I2dxJFcXESQzSwbEaC1WTYI2ZThYmbklsFiR14ry/xRpt1/wkLtqF/Ol09t5ly1+zPI0wHKlud27gqc8gjmtsvlP3lOyT2S7Dk+Z3K8etXA1NbmxulgDxmGSONMK6Z5XBOWB9/YV1PxCttLjt9Kn0fXv7Q8u2XdKmI44g3AhjQDKhTnLMcknmuUtNPkWNLy3sGctujjbbuIcKpbIB7Ajk8fNXs3ijwLfWvwdRptJjkNkftUV41wBMyPgnKsPniU7lG05HU8VeJrQo1Kfm7EqF3e9jxa6h+y+HY5GJRbiYqu3H73Hc/Sun0/VPDjfD+/8P6lZss9vCLi0kSVvMe4bH8AGCnygMWPGVrhbi4uGjW0kb91jcFHQetX7e/muP3EYKCWMQ5HYH/I/KuypR54q/e5tFRW+xFJcR7Y9u6J0BO7rk46Y/Kuo8Sapo/iLT9HtdFs76xFpYpbzW8spkSecAs8wycBnZjx6AVyM0c1rfRJdYLwttbPT612fgy30ibT9eTWPtUlxBam601beIujzA/dlxyi4JO4Z5HNKulFKfYzSd9DmLiL7LZrsaEk4VlAwyn0PoaorNIyiNZGCbsv/vdBg/0q5qEfk3hhuleEs4d8jlc8/wBasvJb2bL5bxXCwgbG248zodp9+1aKVkO2pB9nb5UmuC0K/McLkr68djVTdcXOArOYreQ4/wBkk9cds8Vaa4ZriW48hFW7bDR7uVzzmqrQtZzSSWdxv8xyqspwfXpVLXcNEJf291HKjup2yL97bjNVBtVTGVJ/ixnvW3Iq3FvCt5MVI/iC5I6DkZ5NZiw+ZJhpFOxSVDcZ9qqEtB/CEDSMojlU7em7GTSyRxoA29RnI+U5P5dqSHdHMWWTY+QcYyKlltbX5ZLjdktgsq81TkK9x1uJFiCvas+5tyszdR6YqGOMQMqzSgMWPTsfSpbmSKNlktvMWOMhY9rctjufQ0s1us1mrwhpGDhpGZcbffPepuJ6Esawxhlkuju7jy+nfiixbzvlkhe4Bb5gD8/Q4P4f0psjNKyNMqx5wvydh9Kk0llguH3EYG8MrH/WKQQVOPUelJErU2NEhjuNYto7cybJlwWjXcfQcV67BZXAjh8yF8kbR8hGT3xVL4F+HY7u6nv5LuGNraALD5iE4DHqQOMdvY4r23+wdULb4Ut5lTaN6ybVJPQDIzW1H2kFdK5xYidFytKW3keEaxaOtvG2048zafyNVfH2W+Fvg7PHl3V7D19Hf/Cvc9S+GOuap9putPhso5Io98cbKJFZzzgA4A7854rxv4laZf2Pw90XTbyNTeWuuXkDLFzlmZzgfmK6Yyk/iNMNKnKL5GeS+XJcTCOKMs7cKq85rufB2i6X4dFr4g8WaXLctezPaWtmwKvGuDG0/I5IYsFz0KZ57aHgHw/p80kGl6tpN19j1CCS51S9jV/OktEJHk221TtBZdpbHztkfdUg+oanrui2+m2t5DosFhdPbz6WljDI7I9gVXy13HO4pv8A3cy4kVy+Q4zXl4zGcv7uJvy6XOW8L2Om6T4UutL8VaZcWVhrv2FLrUDFuOGkYpdKQc7htDbTkNsJx81dZrHw70m+tk0/WrWK7jtVSKa4vLl/sskG4RR+XOF3wv1IK7gM8hkK4xNavL3wfavpF1qFlrVsJo7KSzUKFlsVgB2tn7kqNFICP4XII61u6D4yOhtbeHbrU7e50OS1M+k3GHjlnmYugSd2yu7auxlAI3MuBhWrylUqu8os0pylB6dT56+J3w11P4eazc6fdxTeVFMUXz8ecinld235XBHKyL8rYP3SCo4fy2KnmvrC68Nza54OutP8SeIdPvYmXzoo/tCsY4z91Yd+2QFC5DREE4JKFhhV+ZfEGgX3h/UnsLlfkPzQyKwZZEzgEEdff/69erhcR7Rcst0aHtFveXWi/A+2k1K3MUkmoLHCsc4xcRiQb43AH7sYjBwcktzwBg0fHul2+ua4ureA9Fulju9JNz9jlIMsaJGWmB2kquFG7bwNu09TXM/CnWtEbWLfQfEmmyalC3nSWNmq83F84VUTduAUHauD6jHOa9Y/tDwlpOiWWh6xZ3+j2t/cWkdxPdSkkSfMrh3i4I8p9uMglVXOc4Hk4q+FrqSV23+f+RdDl5pwnomeT2twvjGG78RavMlgdPthFbyR23yyzhQwgd855QMVZs5IKnqKg0lXiimhm3RPIQwhYYCgq3Qeld54ZufhT4O0/wAXSXGk6l4ost8Msdx5CRSx2rsAPMQnK4kOwlcg7gT0xXmvia7s4dVuI9DmuY7eF/KhilwzRqwB27hwQCWx7EV6WDrWraJqKOqvh1RpQqRaucnfMoklHdiPzqtC/lofVgVH+NSXscsMu2TvzuBzUOSx4/8A116N7nJOXNJyLkDjyPJl3KmckqeT6cVe0sTmMRxMrLyW7cetUbPazcoHK8Fc4z9KvW/7td1uxVkb51br05x7VjLQy9Sz4ck3TTQyKN2CykdwOtU9ciWGdo1GIgxKr6e1S2uLXz7m3mBKrhcdefWq2qzyXUytIqoWFOJvBJRkUoflkB5BP6VZsUaeaS4bbKw+8pzuPvVWNpLd26cetWNPaRrjy45DGxXO4HHA689qctjJm00qoiyNJFJ+72xqBhlJ45zVLzI45IWVSDHjzGz37g/h/OlmxHcIkI3nZkKCMg+pqWb/AI9WUZbqW2qMn3NZJEyexoaXZxuz2isWJfcoxzg9P0rptQ0y+8O3Aa13ohtoZWKnlldQwzxzg1y/hf7dNeR2scxQO67XPb/PPFezeKrO1ks9IlnjAW50K0lf0yoKnp/u1rSp82opz5dUeRXmpTj7RC+VeSQh9yjLH1rKuZpC3lOFIKjkda0tWZZ7yWWHIVpGdM8YBOazEhEkhbnt/OtfZ6lxkJqTRyxwxq7hkYnb06jtTvtn2qyS3Ygvu54xuHrWh4s0w2N0kkIwjInI9SorFxFtUOucL8orJwtoy6sOUu2sKLMu1kiEfXGT/wAC59z+le7fspeIvFWh+N7mTwrrU2lTXdrLp99LCqLKbWQEyDzXH7hSURTIhDgOdobkV4TZTRsjRNvK87X44Pv7V6H8GfiJD8O/HeleLJdKN9DBcxSXVr8qCVVIyqllZRlQVyVIw78ZIxm2ZR1kftr4j+FHwkvfhXceErrwnpEXh2z09rzdbBQ9u0MWfPinADLIoXh+D0BGCRXzd/wS78Yav47vfFOvtpt0unQ2y2LXJAaMyiRZI1Lf3zE+cYwMe9fMfxK/by+IR8BeK/BnhPSNN0DRvEv22IQQQF/IF5lZRGzuTGu0uVVQAC7dsCu7/wCCTPxD1rTfiMPhzE6xaRq9vfXkib5P3s8ccew7d2wbVRhkLkg8mtqUpRg1fc6JQVvM+nv21tFM3jLSLxODJYqSfozj/CvnXT7+XTZDDLGZbc8NGT091PY19X/tsRi0j8NapujBlaW0/eNhWOVIX8c18i3su2TO75W/8dP1717GCSnSODENqSOhuNK+2Wf23RVku43BAijXMhfnCbRyCen41137Nfxk0fxD44uNG8fwHRbvVYDY2u9j9nkkk2jySxA8vCqFUHI6DOevmWk69qGhX0N/pUzI4ljdgrEeYFYNg4+hHrzXr2ran4N+NGgXFt46WGzu47dl0vXIrf8Ae2U45WC4CffiPTPbrwea9XBPDU5OniU7P7S3j8uvmcOI9u481Bq66Pr/AJHSfF5tP1z4ceHfED28p1nStVufDWpGNR+6lg8wOZMnIDCJJR14mY8CvGZGmgb943BPGP4q6r4c2PijSfFUnwl+MFzeS2vje9ilW/FwHadkj2pNbz4ILFAYtx5w4zyK53xVo+ofDnxlqvgTxAzTxaZcmJJ9vLREAxSj1VkKn2yarMcBHC1OWMlK6umtmvL0egsDjXi4NyjyuLs0+n9Ir/bF4HmMB/L8KhutNW4zeWc2114LL/IjvTr61aDbJCwkhkG5ZB0I7fhVWOe4tn8+Ftv8v/rivMSO1sZa6hqGn39rqFhq02kanZzCazu4W+TzQcq3PAOR3/XpWtJ8ZvjY2oNb+IviB4jBKnG3UHRJATkldm0Y/wA8VSuprTUYSfs6LKVO+PsT6isyG5MMQs7qL7RZ5/1T/ej90PUfhz/KrjGMviWpPNJLRnoN58Tvitt8N614b8YXUuraFeC6s/t8gljZXjMU0JaQEhXjY8E43BD1AI9v0P47fH/+yY9WuvDtjdW8iiRGnsGjkZTzyquCPyr5kfUrPT9Jim8ySSGM/eVSxC89cDt61xPjTzNa8H6trLeN9TvEt0dlWWZyfUKSW64rjxMVB6pG8JSl1PtDS/2sPGGjma18QeF7S+mNxJIf9Ia3aJWYkRbdrcKDtBPOBzk1sX37YlrNYSJYeDbu0u2X5JJbhJY198DBNfGvwx0230fwPpFidQm8824mm2XJJ3v8xzyeQCB+FdfGvlq+biZyTnMjZ7Y49BRGjSlrYq8ket65+0B4q1yFra98QXUVs2W2xxeVnjoWXkiuWbxldTTecNRuJGI2+Z5jE49jXHvcfu8/eOOBUsF1f+WF+y2qsM8GRse/QVslGOxm02dHdeIpL1ljuL6SZkHy75CxUH69K2vAfjnVPCPiay1eyuZSkUgSaLcdssROGUj0xz+AryabVksdXU3lxDDGcLhZDhj8x7gZ7dPUV1Ph3xL4Yj/tDUNQuRJ/Z9uk8CeYUWSYzxIoYgZ2gOzEDH3etVLl5XchX5j2P9sDRdN1jxZojX9nHc2eqaT5ckUq5WTZMWGf++x+VfDf7RXhbQvAuhaZrHhvR7WDzbt4biORXdD+7LLgZ+XlT9a+ufjZ4kvvHHn2+sXkUxsLoW0T2rbdlrdWccibSOhzG5BwM8GvlT46eAo/DXw+n1W48R63rdhY3MDfYL64DqNzbN4bGQw3fqa4Zq9BK19D1cJK1Ra2PDPh14os7rxhZW8GmW+lXM5khW9tmPy/KTgowIIOMc17cdQ8UG5K2usWl9jDfvLXbnI9UNfP3hPVvBsfi/TZLGzv7O8+1xpAZis0O9iUG8bgdvPNfTWm3XjC0wsen6LdDp+7neA5+hBFc+DkoJ7nTjoSlNbfOxSm0/x7q9utvH4ejkdJFdJbeRgSR7MPf1rdt/Enxh0vUrW68RWfiGSxikDzLHbLKXQdRlDk1s2vj7xNaLELr4e3cip1a1vI5M/gcGrM3xahVg+o+FfEtpkbebIOB+Ksa3nXlJcr1Xmk/wBDjjQ1vy/c3/mZo3c8jg9aBtP4enen+WfwNN27QeOleqmeAVL7ULHTbWS+1O6itYIhl5pnCIg6ck8DqPzrnW+JXgWNsf8ACSwyHk/uoZpF/NUIrb8QaPDr2kXmjXgBjvoHgOexYcN+BwfwrotBXRL34aaf4wxa2F1JbjT7qNpOWvFBikUA9w6tXFjMXLDJOKvc2o04z+I5TS/GHhnV5Fi03WoZncZVMMjEY7BgCa2Wk2xsc42qTn8K7T4vSaeuq6B8P9Es4tmjW0N/fGNdztcyJttoQRzkR7pCB/fSvVfhN8DvDWm6dZeMPiDGb66uR5ltozqypCQcDzweS3+yePrWlHGc1JVKitfY5MZXpYNc0noesaP4HOoaD4daSRYorfQNNhaRugIgUkD1OWNW/h7Zx2vjj7OjLcQ/ariCNZrfhEjTIZW7tn68Gu1tyyw7Y1RSqnaQMCNcD5VHQcVzHw1M1x4uDOrBU+2zDI45kCjHH1714eKrPngk92eZDMqmJxlNR0Un+qPYK8c/asuDF8KWhU83GpW0f1xub/2WvY68O/ajvtJu/Dum6DJrFnFdC+Fw8DTKJAnluAxXOQMnrjFb0f4iPr5u0WfHLx7iQOvcU1VHXDdeM12EnhyzXJXU7MgDcT5yj8faqFxosSA+XdwSk9PLkDfy716vMcHUy7W6FqS5PCg1jfGSVrj4x+K2UnCXEVtn/d8tf/ZKn1mZbVWUSDKjpnHTtXP+LNSfWfGOuatIu2S/1N5Co5xw5xnv1FTPoy4voaunR+VZxRMzMyoNzHqSeeauryvfioYUVF2tjjpWV4q8Uaf4TsYry8jaUzSbEiVlThRlnZ2wqgDHuSQAMmkpWWpUabqSUY7m+u3noD0z7UszeTC0m0uVBYAYz9Oahtpo7mGO4jkDRyKHjYfxKRkH8QaS6aRbeZ4SS4jbaFGT0PTNTVm4wcl0I2Z5rNfwaj4ovmuNPcpPbLbR28aNK6uz/MrFjtGRk8Csqbwz4asbLXPGc3iCCz13QCsFvp8Kh/7Qgnhd5ppBkJiP5FC45bAIq3pNvZXVy3iWbVLhLyW3ZS0f7uJWdiBxgB8qvVex64rjPEn9gw+H/iD4gjmmuLi6t7G0tS8ZMUE7yx+aq5G3LojHI6YAHWvzHBQ9riHFb/qerhKSq1VFHg2s+Kvt2g6xpuvLJcalf3Ed7aO2YwpYBZH2qAv3FXGeOuK9I/Zhaw0XWtV8YXsM5j0bSyzeXh5mLEhljQ/eLDj0Gea8S1Sb7Zq4WVtoBEeWzgAAge+PavoP4ByR6Z4Z8TX327Sp7/VbQaaqTR7lhDA/vSnG7GScD+5z6V9HmqjQws+Xr+uhpiYRVVrpqbvxM0STxhqs2l+H9MtdB1PXNJWS8uZZBI8VoIkkceWDkSHdEgCbRjJ+YVyvxA8Vnw//AMI8tmIrmwsJkgurWzvWyLi2IWSMMV3RZO8hxksRkkkVH8XvG3iJfET2PhnS2kjm0uGxuLpVuWljT5XRiMhVYFDgDcCPWugspo7z4YX2l+EPBdxLa21jD/aFxqMKeZLOI13SpHgfvNzABmJ5ZguTgV5dCj7OnTnLb/P+tDjptqSfQyPixeNr3gPwf4rWEWkOuS6leQWUZ3LaxqbeMJuPLH5ckn19q8d8Ntb/AG6ya5hZ1utXaNdv3gcAArngEHpXtPxG0z+y/hJ8KYm2ss+i3uoKqsWEaz3bYUnuwEYB98jtXkfgu2WfW/CsTWrzCXWy4jXuA4B9T/8Aqr6qlTjCnGEdkfR5quSlSj2ifYerWkmoWP2S8ivngeArcyhlgh8sSH5Wc8nkY45+bqAK8O+MN34w0O80K41LOnTa41yPsPmgm3sC21UEXJVXGW3tgkHIABr3bWvCd54klayvfOt9LW3E6ztKQZGjdpEQJnEmX2ICfu5+lfP3xg8ZaTq/iweFbexU3mmXv2d7yZSJH8uEKxypIZV2Ec5JJBB7D5ShLnzRxpq6vr5HzdPSPvHkGm+F9X1Wy1nxVb6YLjS9IuES8l80DyXmkAi+X7zZII4HcV946HomueHv2Z/h7Y6Gt081udYv/M8vAe7lkiSFCR9zcAQMke9fJXgmzmj8F+KptMkudQ0yPV9OVLmNPLVJQkh81ozzhd3fuFIr9Jvhn4V+K+o/s+6D4D0HUPDnh6wW1XUtQ1LXpJWu7W8ErPHGlsgHmkhd4J4IIGCRX0OIlzudOb3PawTpwpPm6qx8v+Av2arz4seLtebxh480PwvdeHtQkuNR06OGW6cP+7Z4QDiEMQeIzJvIVvlwpx45B4e0XxX8QH0WaSeKy8Pi7kzYAqCgkd8mQjClgFGcYHAHSvabzw9r0fhnWzdfErUby18RasxVZo2txKsRdGu5rZTvFyWLbQ/3g6ncC1eRfEjxRoPhXw/p/hnT9Pvo5JlkmulnuFl+UuB5joArJuVgQCAQQBk15kZxfLSpLbS5Kr0qVJxprd2OZ8fWf9ueI31zUJLLWtP8M2sUNxY6bG0aKdzLErHjfk4Z3yM/MBXQ/s761anxqmua14Ciu9A0WOTUp9Pb93byhshYV3Akje6levAHWvM9CvrHwuv2q5jXWru6Zbe4/eFoQrhdqnj5yu7nkYYDHeuytvil4h0nVNbt9N0vTZPtMsIeMb2jK267BHkHJDABix5BJ5GacqmJw8WqG/Rvbz0MaeK9hKNSn8SPvbRfjlNea1Z+PND8C6NoyWtlPp5nbWmWExRlMK1ukKllUEFSp5EbYztxVbxt+2b8SNEbTbfT9H8I2l1qUxjB1B7gRKpcpGQzMhZmO0kBcKCdxr450+++Kl1oekXHhu6OpTywTSXwl2xx27sf3cUa8/IoKkAjP3xx8prqPGHwc8beIvC0HxEvLyGXU21B2iskmeWWynWNXZTKTs2tujZdox1HBAzpCvjZNSlL7jatm+LqTvsvQ+9/BOo/tHfEOwuLjw/8RPhuslvsMxtbOWYICDkjJO4Agr6g5B5GKt+KfDnx40DRtV8S638ddEhs9HdFnj0/To9537ccsh2n5gQMEkD3r5f+BHizx94f8O6PB5uueFvEfhfzhqj2dhFPHqNps85BDEBh5FCuswY5Il3jJTaOx1X4y6hdWdz4TtIDFHPcf2jcW0cbyhpHJc5JG1jETyisfpXJjMzxFGPI93fYzqZjiLfFb5I898feIPP8aQ2FjZ3k1xqDCS7vplMcC56KdvLM4Yl3yGAIA65r5p+JXiLRdY0uTQ/B9rpdzLLKbGNrGGS18toneYSHcMO7xMVYFuGQ47Z9H17SdT0++u5tU1C417VNRhmitLTzGS3it0aKUSPLkBNsiAkB8bcgkZxXhUy6Xovi240K+0W41HY6vb6dpF0LiOQyIQZM55n5QbRkDc3HGK8vLMNFzck721+fVnmfWKlnHmudZ8FvhtDqGk6z40utSljsrqJ7ezEN0y3EEYYi4JC8BnQbAScYbNaF347i1jxdaeFfA/h82mkT6UlvHNbBY5RCkBM0jOu7AIGCTliFPPIwnwx1jXLz4RanpOi6bDYW91e3LtBNKyRFiioWGRgksYQC5OFRtowKxPHHxRsbPT08Mt4XSz05rST7Jd3dqpvb+R5syTl1IKRsBtXA5UEA8mu2UKtXETW/RLsDhytc2xv2en3l94/03x1pWi3d5pskc2mXExjNyBMFwoG4lwMlRuY5Y7z0OKx/Emi6pJ8R73+z5NO1C/1C7SGy026jLwQ2itkMJS4Ee1QN4boGbng1xXwt+JuuWfjLRNHvNRMeg3OrK5tvO2R2kkh2LcA9zGDkA8HHPWvVvG2uapFqlvb+GfDmk3BsbXyhJC32i6XaGhlFyrHG+TdkKOAw46VlUo4jC11GVneNvl5lTjanzGH8SL/xn4b+G6+Fftmh3NtpcbRXE8fy3i20jIUQ5OXIkZ2G3Ixg4AAx1Gg/DvRYvhzoOm+LvFWlXVtbWFtq/wDZ63axPJ5zAAIyrl22iRM/NjbnpzXAeG/hz8WPEXiq6s9U0jVrDTmUQ31zc/egjGFAO8/NuGBgZ4Ndp8dtb1TRfBVha2t74dht3SG0uLK2t4o7qPylUCZAo3Kp6HGF4BA5NZzlbkwtOS55O90ZS9/U840v+1fBOrX+teHNUtzFexzafOwugs0ayJuMY5JOAACwwOO1aMPiqxi+IGneGWGgNpEcEcVw1onnRXEBAleOZ1ySACwOwZBBIya4u88JX9r4csfFMlkWN+0nmyXD5UfOFCFB8y43D5j97dx0r1b9nv4VRiHU/E1xDZai0sdptmVv9VZPIwu/K3gAShV2h9wI+YDmvRrKjCnKtUldpW+ZEfXU1LP4sX3jjx1czaH4Y0nfa3FxqlnCqPb/AGVBG6GJmfG2PaQzgAHkZOAa5fwzr2tatPYeONc1S3bwt4SCWElvcXRC3A+ZEijVFJbCsvbG0DkCuw8H/FTT/iJ408Q6Hofh2K3tda0iW3srm8h+eKeMbplPO0iTLHbjOcA8E15t4s0fw94X0KTQbjWLj7Zdab513HYnZbpqSyExoyE4I2FVLL6k84xXHhqcFN0ZR5W0rLfR3v8AM0fNHlkjb0jxp8NdH16VrW8udUXxLcQi4s2jeK0jZjmPcmMnyX29d27ccAAA15v8SLS1Txle6ZC09xqDXRE0skfkrM7AYcIT8ik9BnGMV2/wU8NWt/BcatrULvBFIb6xW3tUkl3W6t5krOf9XEq78q2AzbSMkAV5r4vF5rmqXPiRNFu4rGeYyecyuw2BtuWf64HXjpXrYelGnWai3ov6RFlJuV9Tu9TvtQ0X4daRYWtrBcpYNJd6lHbTBrm1SaQBlIVAYjuiUlixwHVe9aQ8Jxr8NUj8f6nr1pcRyNDptpNlxakr5pXYBuOQRgEgfvM9jW3qWvNqXwaN54J0aaBHsRbXl5eTJ9pnY/u5GRc7jGWDlie+09a4n4e+KdD8FWM2paxa2+rXKRma3El2x847iihEOQCMyAlhnBJ9AeO1SpGTirSUum7/AMitdEeXw2d7qV2ttbRu5UMVVVzhec5+laGh6Be6kxhtWhDIWd1lbZtVFLMcnjAAJ61As19NqE19pshtJ4WeZTFJt2jkkL3PGR713Hwv8L6f4z1hodR1CMNNDIoM8z29rE+NwMzgHcjBWGwEE4z0GK9qtV9nDmeiQSkck2jtdpel45p7i1kZpGj+ZPJxkPuHoK1Ph/4pl8I3c99Y26yyS2rW2W67XOCATyuRwcdQSO9U9L8Sa59lHhGTVLWws7q4KyzvEEK7mwd7Y3bRzwemTXoWl6H8MLX4Y3UY8TXUviJ7l1hVLMPbs8aAkGUHcEO7AIHcehrnxFTljy1FdPTQ0jJxlzQ6Hk+oXEU2puFkkNuJVRWkbeQAADz3AxgfSptXtobEwxjaRJ9x88MCM596zNnlyjDAAvuCN1z71cvG8yG0bH+qUqd3QnPpXby2tbYaSknfctQ2pZF2skisOQOp4NUF2+cjTDckJO6PoWH1qXToyyMrM/zt8mM8c5xUjSSTZjXy/wB0X+VsEtnrg9e1LZku1hbq4jWxiaJAQ5Plk/ej9ie9Zt80jQpsjAKnlgOvtV6QxNaRRqpGxi2Ac596hWRnUxlQC+Bgd8H/AAqoqyC9ySzKpEbiRVccLtBwyk+lMmkWRjLG2OrNjtzTriNUzGkeVDAB+34+9JZwxecVeb5HIAGPvHvT8yRVSNQHZWJ252+je9LHLcKHVZCFbPHY/hT2TzjMrSM7I3y5XBAHAqK3ljjk2zRuVccEflS3FYWKZWkDSK23IDbGxn/CrN1JC10Li1BWN49rh+cEDkE/kap2sbGaSCNd6jkMO46VPGs0gkj8zeV4x2ND0C1j234NeMNLsdPgmvtYtbO8tQ9tCskZx5chBOexO5RjvXs0fjizeQP/AGlprvtUYYNGDjoea+Mbdby2kGpQxyRpE6qGZcqGGCB/LrXv2h+LLfxJoVtPB5McyrH9oBbhD0Zfx7V2Uaqa5TKeGp1NZI9st/iJbpp4s7f7GZiMGSO7UZ55OMcccV4x8WrW7l8Oq0TxiabXJLpfLl5WKRSMbuxPTPvW1B9ikdHms4pQrBWj8sEexGR9c1t2mj+E9QlFq0FusbuvnSL1C5yT9B1/CtpOEVccMPGk/cOR1qHR9MntrVryVw88XmiGEsqGCIR29ugUbtoLFyF6KhHVsm9ouj6hb/bdSvNWvrDT7SOE3RLwGK+YndsMco3R+Yd209sbgOK6HWrXT7u+dvJLO14n2VW/1ilA0nBHIyJUJ45Kn0p+lalb3Wna7p+qak18libBZGvHLLPI7giNQAMqvlJvC+rrk7jXzFeMoLQvlsjzzxtoc/iC6u1hsxZam8st3e7nCJFb3EU00IIPEYZ0C56nzMHrmsLQYfDviTwTqmk+IYjb3+n2/wDaGmXEUTTNlGY3MUiB8jemGAwMGM8Enn0G0k1DXtR8a3evXX2R9R0+AOWT92ClqrbmUKRkrEzbc8DcMZ68dqmm2Hw91bVI7OQXOqWmoXsMKPbtGY9sZIljkGVljYkRvEeVJRsENToySjydTVabmTqGreK9Ij1PR5Fjnntltby2mslEltcQhCFmjYrjDxuByQSDyNy4rl9a8QeG/EGmi3k8wXVtJtjVVIG3nEqE85GcGNu3GTtXHValY6PqGlnxZ4J1S60O+lgjeS3juCsbeaXBt12kFQHGDnCgMOO9eda1Hb3Sx6vGsdteZ23UStx5w/iA7bhhseu6uqlGMnfqCkUrqzFneRxLdQGVts0bIxGR1HXpXusMkHivS28Ox6tJ/Z/jrTodQtdSa2T/AEW+tATNA4XpuKPgcE/u+1eKaHpa6xq63FrqItLoOskClMlyOWw3TcMEjPWvTdD8UeJPA/w51Cxs7W1jt7PUFlV7q2xPJvfJi2MSuwjlgoDgH0Fc2YRcox5dZJnVSaUJJq/6GNfWRs7XTLzwzp9xIPEVrNo18XmRra8nUAtGpHKOHVSq55wOTnnEvrpvEugafqWpfZ4r+xLabPNHCd92UCmFpVXgMqB0zgZ8vnJq9qDaHrWi21hp9vpunXksy31n5Vw+1ZNu2SCQscI2Arq2B161nwwwafo9/GJrp9NvXidZd37uO8CnarAZJwDKAwOCDV0m4xXNvccv3cfZ30d7HIahCvki68xGRiFVR3P9Kztsasm0EZ55NaOpRtHbws0ocYxx2+v45rNTjheT716kPhONK5esXjWTdJnb7DJH+NWZplZpZIWJDZI471QtWG7aMAdeat3DeXDFGGADbnPualrUERecscY+Trz9aguG87DeZnFPmEmyPHzbCQSP5UmxGVdyH8Oxq1oVsQrIqqFaPdz3qa3kXzRLsznjGaasec7ly386srD9lnRpSCo9O/8AjQ2rEtk6tHcSbTH/AKngE8YH1781YumjWNRboQWG/PbBHNVniFxKyRLlXbPTnFaUIbbBFcZAQFT6+uPasXoQyx4emhSRXurqSFU58xU3Hrxx/WvTNU8UaNfaFoFv/ak001rp8lnc/uSuxhKWVA2MN8rdRXm1vbJ5ax4VQVGD3NdtZ315B4b0m1TSkWzWa6230igC4mcjKs2cEqqLx2z710Uk4t3Mps5DUraOG4Magggt8pH3ee9Z8K/vWG7jY3P05rX1a1vre+kj1G1mhnb5mWSMoTu5BwR3GCKy4QPtQHIzuX25U10x8ioM6bxjbGaxsbiNeZI7f8PlC/0rh9y+XLG65eNyvX0JBH416JrhEnhvTJhzttU6d9rmuF1KBbea9aDaIvt00WMccH5fcVOIhqeniY3p05eX5EFnHcLIIoWIjJBIUgitRVvoZotse9Vc7mxx6c+3cVjW91ImyFWYKr7mXjrW3vkmt441YoVXcFXlWGT1HrzXBO9zg+0T+Mr3dbWVqjAgkyHaeDjj+pr6w/4Jz6gNB/aI8CKzMPtMtxannGTJayr/ADxXxxqTC51xLW3/ANWhSMe/c19Q/slakujfHz4d3zEKkfiGxjb2V5VQ8/8AAq1Sskjqj7x+jP8AwUm0+Wb4DpqcO5X06+jmV1OCpDKcg9vu182fAGx8N/HL4O+JIZPElrpPjzwcv2+Q3sipBe2h4B5IwCRsJyNr7M8NX19+3tpjal+zZ4jVVJaFfM/JHP8APFfjZDqN7p8n2izvJYHdNpaORlJU9V4PI4Bx7CtYzlT1i7C5IzjaR9DaX8R/C5uLe41PUv7PtzcGNjNDPA8ZAB6OmCcEdDg54NfS/wAPdZ+DurWvkv8AF7wTqJkTZvivo7W7TPAEkchUNg9+T1r4F1bxl4o0i30OW18XXU13PYfap2OS0TvIwWNt4IOEjjII4ww965PxH8VPG1lFFcR3Gn3SeYPMF1psEuTj5ckpyBjp689av65WkS8NSR+jvj/4Q+INW0mLUvDevJP/AGBi+0+W3vFkijhEg8x4CGyuM7wB3QjrXSfG3wj408e/C/wZ8Ztd8J3Vj4jt7OLTfEVqsWfORifJulCc7d2eoyBKuR8tfmZpvxU1nUtF06yuIbT7PYJILVIVaD7PvffIqeWy7Qz5Jx1JJ617ToP7c3xatNKsPhv4m8dzWHhzUGisl1hpJnutFWJg8M0UqHzSFZVU5LHbnHQV6FLMqlSnDD1ErRekuye69OpyPAQp1JYinLVrVd7bfM+nfAvwl8beJdLmj03R5kijQyQmdWWOQ9dqyH5c/wCySOaybH4c+Lry+ns9S0p9LitWKzz3g2JD67yeE/4Fivlnw7+3B8ZLh5EX4o/EO32uv3NeSUEZOT+8izyMdfQ1a+IH7VnxS+IFjpen32v3kh062Nu2oXLK15d5kL75SoCFgNqhgoOFGMVzSxk3LY6FhYpfEfSPiHQfCPh0rJH4vXVHIyzWsflopH+0+A31UkVnf2f4Q8RzCz0jxpZLqBX/AFVxGVjLE42mRN2054yRj3r5C0fxNepqkmqalfT3Uro6CSeQvjgsT83+7Wl8PNRj1PUnk+0wxxoxaKJW5cHk5x9f0qZYyqtSo4amz6kvPC/i7wvH9s1HRJ3sX63EGJ4HGOu9MgceuKLDwXpfiDwz4r/s23/dT6TNOVRcosqcggfw5G4eleHW/wAfvid8NfiIuhaD4i2adctbqIpgzIA+3ORg7gDk4I9a+z/2Nv2lNG+JvxQvvhnrXgnS7PVJrO8Sa4ggCLdeSwzuUfKcjd2BrSpi5Thy1ImKoKL5os+Q20vUo7dZEsbpDtypjmHpx1waz7XxH4o0Sxt5Lq91GKZYwJCzMBu79/516X+1V4g/sP4lajD4IuNFtLafRLyeTT42LXdnqdjIY5jMpwFWTYWXaSDkn5TxXx34s+OHi7XNMl0m+hszHL1dFOSB9SRXBySTujtcktz35PjNrthKiy3kzhjx5igqPqSK6ew+L3iSaSJP7Kt545QSZOVxjGOnBz/SsDwvFaar4Z068a3R0uLWKQ5UHqo9etX7PTnth9nhj2IM7cL2zV89SHXQi0JLY6631KTVlTUL+xRD5h2pG24DgA5z361qJNCtrMqwKpkwvLD39q5aOabT1tOW/wBWWZS2Acseo71oQa153kQLCoaWcRgY+nOc/wC1XdGrFrVnK6b3seq6t4qtfEBjaGCKG6AEd9t6yGMnyGb1KxsU+mPSud8RaLpfirSbrQdeha7sblVE0JkZcgMGHKkEcgciuO/4Sx7PVJpoYlMfnNuHdwCRjpx9a8c+KXgXxJ4+8ZXXi7TPFC6YLiGK3jtmeVCiRrjBZODk5PTvUPEU4KxpCjO99j0u4/Zl+Ff2uO+s7fWLGeKRZUaK+JAZW3DhweMiu+Xwisf+o1Jsn++gP8jXypb+Efj1oCtNovxEmYg8KuqSfNjgcSDH51Yj+JH7UXhtfJuLxb2OPvcQW03v94YNEMRR7WNJ06s95XPqf+yNUhX93PHKAcdSP51BJDryKcW7HHHyODXz9pn7RnxsjXy9Q8I+HrogcuxaE/kJCP0rpNN/aG8bNj+2PAOl4Y53W+pup9uCjfzp+2osj2VRanrKruOM5/pS+XjI61LGu4cKMdamEKt2GOtdvMeRYybjA569/wD9VfLn7QMfirTvG1vpNjreprpWrsLmCyS4cQCVjtkAQHbktz0z81fVl5DtUseAOeleX+PNOs9X8b+CIyqPNDfTzKCRkKsRYnntkLQ4xqWUjSg2qh+kf7Kv7N/gn4V/D3w3rk1q+qeJr3Tbe8udQviJHilkjViI85C4GFDcthRzjipNQXzdUjx0lu84+rk17NoNv/ZvhjTrUD/j1sIY+P8AZjA/pXgfi74jeF/h7f2mix6VqninxlfIJLLQdKgaSZt+CGkbG2NeeWPTmvEqydSV2eVxJhZ4qNKlTXVnq32mEQtNdSARxR7mYMFVAOBuY8KOKxPg3G19cSa3bzR3Nn9lMCTRMHTzPNLMm4cEj+teTa14A8U+KbI+If2pvGkPhjw35gNp4N0C6ZfPGT8tzMnzyk/KNqe/zc16BZ33iq68Nx6b4Q0mw+GPgayiEcN9dxCO5MIHHkwcbCR3bBPvWMqXtJRm9LG2AyeVOpGvVesen+Z6R4v+I/hPwSqR61qGbubiCzgUyTzMeiqi8kmvkr9oiy8Taz4jt/G/iLw7NokGrQ/Z7O3ldWmKQ9S6jlM7xwa7DU/id4U8A+ZD8ONHbUtWkbE/iPWgZriVucmMNyOvH3R/smvKdf8AGGueIPtOpa9dy384kiAkuWLlclumeAMAjGMc1X1hU37u59C4cy1OK+w7vusenTb0pp+0WvzRzSIQeCpIP6Gn3mvRxjy440eQjaNigDPfJ7Vn38010I5JfkzKg2oSAOnvzWkMXOpJR/r8jN0Yx1ZgeKp7rzpLhYhJPOba3V5p8ceYScbvu9TnB5zioI/MvdVf5MNJfEken3eP1q14oVXksY3j3iS8iXj65/pWdpVibfUobxppUkVnnzuPB+XGfXkf5xXoO8VqYaNl/wCOGva78NfF2keA/CNrZ63q19p8dzcW7LI00U7lmCBEOMCMDgncc5qhbfEfwPNqXh/WLjxNYNHatIbmJjtWNyIzj5huz94fh1zU3jC0aX9oG58UalJ5a6XoqyNNPPlpJk0wnJJ5LM7Dg8muSs2+HuseLrKxbR7VNP07RVhkZ7aKK2ubosWeQEHMh2lBvbByGGMDNc9NznG0tTZShFpxPTrzxF4btdSuLG31O2EcMpEStMoYRnmMkE5wUKn8aY2vaTNayyR3VtNEqkSBZ1IwR3waybnR/Ac0ltc3Gm2JF1AkUMm4gSiMFQqkH5gFUcc42n0rS0Xwz8PIrPVvtUMNtEmnTXETRLJK7TquYgoVsgswAz0AJODWkpONN36ImpGLndddTyvQ77XCurrfWD2+l2LG6NwsvmSrHgIFRccnbuJ7BiB2NVPi58NfE2j/AAfsvH2qE2lj4kvY5rWGFf3V2pAMbtkDa6RFc4JB3LjgGux+Bek3/jHXLmMz22j2qaXLldRlK7Cn7yYuSCx3MnXaOMKciu6/av8AC3iDwv8AAvTdJhgNv4em1iw+ywSTO7Syrb3DNPCjAeXG+d2zqC3fivh8rinjHJLU9jKqTeIimfnFqDLb6q8gdlEY+ZtuSOOwr3H9ne5si98tzIIxhZoZvK3FXhXcFXORyC3XvivIdQ029t9Yu1GnzuzqYwgjO75l4PPTrmvpX4F/A/4rWPgy+8XTeA9WstMjsnuP7VvbZobW3QlVEodsB+A3C5P44r6HH041MPNS2sc+If7xieIm0fR7iPUNSuFsrXV9Vi1lrN7SS5ub7YjIkaAAxhTkFdwY5duBkZk+KWu/ELxVpN9bx29ukpurOWZW3R3EbyAyBBuCLiEgK7FcEqB1BFQaDJq2ueOJk1fw/qNvY2NvbyaeIJmt4HRWZoUnXAzllLoB8xYDNdne6PZpr2s6TJ4+t501oRyX818EaWCHz8kJEWVAqnnCjOBlgSTXya5Yxjf4lquv9aHnwckzlPhD8G/id+0dY6P4H0ObTGutBt71JJZpI4La0tVunkdmEYJUGSbAG3JyCPl5r6l+H/8AwTo+Fnw78OQ+IviZ8RTrE2nXDKbXRWSA72k2bEnl+cncR91UORwa0fhD468P/Dee613wXpNld2GsJDa3W6FVN9bqSHkZkwGIAbHIyQRXo3xD+J/w90iOOy+Hl0viHWJW8u/vppC8NmJ1ZhNFExMZkUqF4GVHHrj1YZzKdBuKs473/Bo9evjZYtRvpZJHzD8cPE3w+8L6H4p0P4b+G5bW30ueNtOSN3uJfsy4MkrbyWH3ATnID7h2r4ekGoeKdf1D4iXy28UN5JI0MaxpEAFAVdqLgcKFUlV5JyepNfU/xgm8QM+p3XhtVs7q8vrPSrWOMeZKx5aSXJ6qFyTkYBHUnAHk3jP4VweAfBuq6s11HNM0MVqW87DM/nyM7bB94HEfptOBgdK4sorx9t7WXxTkcFaUnLl6Iy/2adD0fxMmq2OtIRFDKJBi+SEvJJtVcK391FlO7PUp9D9V33jvUPGNrF4Xk17UYYYJIbpbuCMP+6KhY7gFxtCnbgAAEqWwPmzXzB+zP8NY9e0bWte1qztWtbh0tNLm8gy3C3cbLIxRQR+75j3gggrz2r6HbxPY6pdaf4EvPFEYvdVCwTJHbP8AJHCwZ5FdST85QrngAqU6YpZ1iJxxEo036+QuZytHmskcB8TLrQdQa/vrmS1EWk3mZNTh2sftUaKVh3HO7bIRu4I+bk5wKx9Q8F6TqltrCeGbCHV9T3XdnJrlxqqyxXCuAdibIzgxMSdqkLhVJbkir/iLwzpt9qUXh3WbVRHqerG7uLcM0DXNk1uhjneVUIjdSUGNwUM2CTyah169+w6kW8OQ6fpeg6ZHsaRLmOA8xKLm2bBDDzJBtXaMEsCcdK5qNV0uWNNtt6+RacXBXvbc8Y8JwXfw+8XSaWtm95epZ/6KtwoeOK4wsqgx/wAe0q6kgAAtnJxXUeGPFUOk30q+NNHtrGDVrqS4ubqCx/fr5ieYsBVcAKxIG0AckA4xx5Nq3i66s9eeGON3hs7kXSxXG2R45tgHLc5C9AM446Zr2/R/G0eteB5PEXjK1nuNR1hS+LxWMKbCxWZFHBMh2jnj2r2aykoxlUXxaGihCpdxdrdGb/hf4peG/wDhKNQGn6WmnaU+oIi3kztEWSNNjq8ZABaTKn5cFcL1zmvrbQfjF8GfCWg6l4T8UeFdD1TSdRsFe7ubOdhfs6qrCRRyVG5V4BGGjP3q+aPgn8H9F8RST+JNQ1MNczW95JZ6fql2ZYrl1RRLiNcbjloyqtgE4ANeg/s/3Gg6r47+w+MdLZ7tw0KWsNvtt5UUFbW33AkM212JHAUgfMcVzyqTU/Z05WUTWODqPSLPeIv2wvC99a6ZoXhTwrpz30enWS3nnFmlw8bbF80hC0vCFsknaGznINcX8YbDwJc65cNeWdvoeoXCm8tdPIA2SZZhIwOFiQsOAePk/u5zH450D4d6LHbX2mWz6jqEMkc6RX6KkomH7sOsir8wZmZlGADkAtgjNHxZ4gXxZf6j4q8RWavezISl9Pbp5v2ZTthjZAAqsuHPoNw5I6eZja9vid2vxJrpQjyy0Z4rruh2Nxcasw0W21S8mWO1+z3FyzNM6KN4ZAAiqzmN+gHBJFeUaPJovw9+IemalrEcNtqyXGpNrMtrNnKSIWiSOMII1IKgLsGc5ORgV6LrHiCDwu2ja74o1+Twvp82tGaRLGFX1GZmiZGuASQNpOX7bvk6YzXiK+MNNvNUu4IdCSS7iO7SJr6cSPBLGzM9zKG+SR3HO0kqp6Zroy+Mpxc7+6zz6ceV+8eu+IPHE2peJr/wqNP14WMOnw2djbpAs0lzNIwl8+RUUKWcRqwIAxHuGOufHfjF4N1ptGXxVrV2++3EMcYuJU3+XJlY4woLMznY7nJwipt6kV61pEXxDm8A6TDfap/xVuoNu0+W5uP3ib5I4osIV4mj8xlBJ3IGyvXNZUnhXSfil8RtNt9bSaO68PX8lvrMZiVUWGJXcYQqu2F9hOSowoZmJLCrw9VYapz9Fe/Xbt6lNpKx434L+EvjG6tIfF0nh2RrCy1K0gldrgQFSZtrEZ7qQATkYyO5r1z9oi48EaRdafpuhxzSXWgXAnuTa/u4oUkDs4JQ5EjNtbI3Yz1p+veIvD9xa6f4PvNUuoJLPULm8kt7djGsu2RZobm4DffV/OMQTJCABlxzWB8RNUsby41HwnpelyXeuarJbyHVGhZDIqR7WjjjUbWifDjKjnI5+WirWnjK9OrLbX7nbcrnm6Wu1/mdxZ+LtS1zwi/i+Mz6dothp8lno728jgttTBeQnMr4AKBuF+Q9yK+dPiJ4i0XWp7aHSdQvJ2a0jju7m6maaeWRQVwWbogUAKo4Fe4+JPFWn6H8HdD0/QdYCxXNrcRfYm04GRZlLxmKSUNy4YOx6gbl56CvA/C/gLxD4kt9W1bTrSNV8NrHNem4bHEmREoXHUlW6+ta5Vh6dKU6z91J2X/B+Znd21PYtQ+Kfi7xr8NYLSy+G+gQWclrDp811Bpu4SPGwTzM9FZtgXAPAJ4GRVb4aaJ448Nx+LfD+p3CDUn061t4klvowsFmN8zyDcflCRuxAyDvfGMjjzmx8Yaxd6PF4W/tC4tbC1mmuhHHKyKtxI25ioU4XJGcAYGKlh+JmuaTpuqeHLO8lij1RUE2/bIZT8wJYkbgfmPGfzreeDkozo0Yqzd+vdf1YlpyPTvhXrF14wvLHwpo+nRWq6TfC+guMN5ML/vPNZ3X7m9AMMzdV9OnGfG7TrpvFniGNY7OOJriG8iPmbMQOm6ONVf5ywzlu2c+taNjZ6hpOmmP4eeNNNhstUkjhvLeRv8AS0lbCoxU4GwSErwfuvyDUXj7R9Sk+IDeHdSvm8SaurLaz3VqgnjV12g4B4xv3fLxtB5x0rKlTVHE+1jazW2t+l2y4ycafkS/DXQfiJqXhu20nQ9JtbnStTklm/4mUhtoBND/AKxd5YAKFKl2bAAJ5wTWt8aNc1DWvDeh6f8AY00KO5tWt49ItpFjhtPmSWRn2rkh35weDuX0rf0fQLjRf7Q1bUfFV7e+Jm8+G1t5AIorWCNAJJGhX5YyQQAHHPUjivENBb/hINemi1fXpbTz2z5m5mYPvHQ4PTJPvjjkitkoYip7WP2deplCT3NrxrdfEHwlo8Gg6lFHp8Fuxs7xLdQy3UkZJw7cqxXzCpC8A5rhLe3t2mM1nFMyjHljaCc46Edxn9K9A+N1rHpR07SdOs7hLFzLcQXVyzie9i3YErowAXvjCjOa4rwfqOrafeSQ6TG8888bKsSQiVi3ZtvXI9R09678Mr0faQWrNrKyII9SvNCWXbZwPLMny7vmMJ3dQOh6YwfWtfwDfatYX72Nq73McjRXTWYLATNG2V+7/cJ3cY71gahHqljcGS+hCvfx+epYA7lckhhg9Ov5VtSeOteP2Vo4rJLu0iZGvI4Vjlkyu0Z2gYIUAcDnvkmtqkHKHuq9w5TFkmW41qae6WZjdSNIzSMWbcxyxJPJ5yea73S/C1rqWgQ+KNLW3gg0W32X/wBplCjUJTI2FROMkI0YIGSeuea4q4jaSOPVYg7yE7ZNw4Dkk9f6Vr2viqeLQ5fD8lwkdrPIs8m2NTvbrjOMgZAOBxkA1FZTlFKmFrnLtG0l/cOijbNIWC+gzx9KsIlrBgzcMV3RL/eYHGKeY3muVS1mEhVPlYLj86hvll1G4ikSMhljXey8AH6f1rpTNVHS5bt76aaSfdHHl1ICr8qqcdRVPSZFt0mS8hXLRkIduTnFaoSGztVkeOOKTmQ7256EBcVn2ojmEklxMtuyx+YOuGbPQCoTTuKSZBJIq2waG62ygbWjK8nPB5/KmhhJ5aw253KvzZ7+4o+xGC1e88xXV22bT6etSRqY2XydyXHXjof/AK1aogh2lmj4Zd5y3zfLyau26rHffZ42jAxtZ25yT6e9VrmOXcit95sg7egqNYm8twJBvX+H+uaN0G4faoobqSNc7myhRs9ehFSyvJMw2qERV+UD/GmRxx7TM+0vuzubkmnwRyec21y0Z+ZRt6npmmMmsS0Rkn2RpiIx57ge3vTrSSW4uBAyquyPK7V5I759ao2d1Mtw5kLA8jGOPpWzZQ2cFsNUkvI9xd4/IXIkUYGGPYqc/oaznpqC97Q6LRdJ1TUvC95GsObSaRY45AFwtzjegbJ3cqrjIGBuGawtP1bVPDN7JDEzJcHCywyoV47Aj/Cpo2S3WWCWF1eyyBl/nBIByAOx7n0NZWqatJqF1M2pM0szMCkzfeCYwFz3HT6YrKhzKTLvFxt1R7BpPjDT9cjtreTUBBMuHki3FWVRyy5PBAPPHUV0mm+INBZor681aK3tmZgJVkwGUdenUkjH418472jlVgzEFcbd351at5LaSERzeYSGyvcD2x2r0PatxsRY+nV8U3Gp+H9Z8RRw2SAQXc2lxt8tzLMsyx+bjsiJv4PU1U8E3T+IJJPCMF7JFDp80n2qQfLJLHDIG8zJ5zhVAH+0eua8g0rxhJpdveK7+aEsHt1MmcjLqcj0GTS2Pj+bTbPdpMP2KWS3eN5FPL751Jwcf7C/ka85UXq2Wlc9YvvEWqQ+GYbRmmuTfSI7Rs2fOjQzgEjqA4acE9c47AVzVxq2lnxRcaT541STVNI0+4sbi4LbFvGeJBOWz8h8vyyX6EoAcjirlr4uj8G/DHw74uh865vZb7UIWDJ88Cqi4w542hmJHsSO9ec6tPY2+sabpmk6kdj6GmnySXEfES4WX8vMXHsOaxp07yZrVhazN7R9W0W+1+Sxa1K280l2t0tqrfu7eZG8xW458p1Loy5wuQRwK89163a31Wa3upIz5bGGSe3YOkxQ7fNUjg7sBv8AgVXbu+XR/FBvtBvpUlW5kkRujoRKxBB7HGKh17ZeW8IdQuoQzM0rKAFdWAweOO2fxNdMIckrmNhvhS+tLfVjZXUNvJbXACy+YcBlzggd+c5454/CvRrzUNKuLFfDOh3Wr6hBrXnzoXVvmvGQqCdwwcBCOB0JxXj0e63u4ZJM5jOTtPP4V6T4DvPEHiq6sfD9vrlrBpumXJ1GCzvm/crJuGQWAB+bsCf722sMXRv+8XQcKkqbckdHqPgXwrZ+B7Hxhpq3McmmJBJfNqhaNp5RtEqxgqCQCTGAvIKE5bNco0vhW3QLeeG5PN1G48y3hacxw20DbhgEEngkEE9MVuXWteG/EV1fDxBq+pWMCMbi4jt8vbXKoPkVY2PG5s4YHAz3rjpp7PXvGFvqVpcyW+nRzIifb8SEIuCUfauGyBjGO9clD2k7+0b7+nkU5+6os53VoQqSQuf3sDAFgOvUGsyKMs2G5yetdP4qtYHuNQ1LSlf7JI3CllJj+c/LxyQBj5sCucjeQqFjXn1r2KTvEiS5dBIwVkKheM8Zq1eTK8CW7KQY24P1qBS0kqhuGP6mrrW5kj83bxgI3sRVslFIKVjJ3ZGeV9x0NLJtRVkztZgBj0pd21X3jcWQlcGgr50aKx6qOcUASRs0LSbvLZVAPTkZqtHI1xMEmbjoD6VZj+aJ42fcyj5exIxn8arxSRRtnadx6g0IDS0+12yAidHfGQM/pmtGGZLu8D8q6th4wvTHA57/AFrEjlEahtp+V843Z/KtSxmWaR7iMOV3Kozjn61jPTUk978MfCDwP4h0tLq88Q6np9wqxsY4oN6rld3Urzwwz6YNUPHnglfCei2+laPetqdg14br7SFdWhZl2lZIvujORh+pHB6CuZ8C/FW+0G8TSZoYprbdyfuSKSeDkcZ+vrXuUPibT2mitNQkVfPVlIkdRnj7vbPWuqNW8U+papJnkV7deNrbSJbfWNJtNYge3ZYZbq3aRonY580N1ZgCQCTwMegrzSOzu4pVdmG1GG7sRX0N4muPBdhosdxpuurby6WWS3t7W4VkDZB24OdwHXB4GTXHeLvGvgfXNJZtJ0WCPUYlLTTxRrCQRjOOuQ3HuORSpThTu1GzYvYqC0OTnvYW8I2PmSKNkUiY+jZ6fjXI6tdW5m1NoXUbrpZ1wM5BXn8P6mjWNRN1J9oWGFSq4KIuOPfnmsFfMZjt2gN6nArSdVVDedbmpxp9i1C3mbZI8mYtnjv+FbFnMlssVy0SgnKsDwVb/CsmFHjiDIFwzgM2MlT7elW2MLny5JHaSJ+Qq5ypxnJ9K5Z6nN1F0VftuvGZowBEOcd/evbfhPqbaP448O6oCB9i1WzuCf8AcnRv6V5JoNj9lup3ByGI2H2xkfpXdaDdfZbhLgSLmIhh83ccirvsdVNaH7i/tS6SNc+A/iu0C7v9DL/0/rX4XbZCqRx5LlQq+57frX7z+MGHiz4GXlx1GpaAlzz/ALUSvX4X21jFHrlsWmjMa388bpn50FvIdxdf4QQDj1wacnaJVFXVit4mZTrV1CrZS022cYz2iQR/llTXNatai8s5bdsHcvyn0PUVrtvus3gIIlkJZt38R+bH86JNJvXUt9llwefuGlD3Y6jlrJnD+Gbsq0tlLwVO5f61d8UfvNPDbTlZAajvtC1Sx1xZo7GcLL8/EZPXr2rpLrwP4r1vTWh03w5ql3I2CiwWckhOOwCitUZPTQ47w3Iy3DKvUqMfnXcW/wA6jdjA6e+a2fBX7Mfx41q6hk034R+KpVlUqG/s2RRnPTLAV1urfs7/ABe8O2sM2peEJVMskkPlQ3MEskckeN6SKjko43DKnBHpVcrlsSnY5PR4Y7y+tbeRgvm3Ji3EdA6benfqa7LS/Ctr4f8AEk8karuWaJcAYH3VBIHbJrlbGxv9H8QRWeqWcttcLjMUq7WVl5H6fzr0/Vl265PMOVfypBnoc4/wpRpts0UramP420vwHP4h0+88Raxqmn6lLHELdreEyRPtJwOMkHg5x6V7V+xqPCui/taaBrWm+NbZ7q/vLu3k094njkPn28gwC3B5wa+ffi1uj1XwtcNgL521m6HiRRj8nNdN8DtYXw/+1J4D1aTdhdf0tmGOiuyK36Ma2qaRMkehftI/C+Sz/a68fapb6to0cepXVyHspL0Lc/6TbZ3eWeSCzAjHbJr5e8Xfs+fEbSbV7w2NveRxrubyJwW9+CATX1L/AMFEtFj0X9uzSNW8oINX0/TJg+OpAaE4Pr8tfHmpeOvGml3E9jH4o1WMRM8LL9rcjgkHgk+lW0mk35Dk3c+h/g7NLcfD3R1myksNv5ThuxRiMV6FBDtuLK52qSYp4/wyrYrx/wDZz1abUPBZW4mLyQ3k6MzHk5wwz+dew27Fbe0lz/q7plP0aNuPzFTUhzR0IhNxZblVNyh13fKrYIHykjOOnTmpLWO1+027NCAyyGQYA6jn+n6U5rS3Vv8AWEg/3pe9c/4g1hvDs15qk00i2FjpEl05VTJscEjPHJPzLxWNOlKUzSU1GJqfYNNkBzCyseSQaifRdPfG2RhXmlr8dvCrI3meIbKPH3hNE6EfpXfeFtct/Eli+oWskMsQbCSQtuV/cVlUw1SF5dC4YmnN8vX0HzaHAuWWbHasC8sbO/Y2vzqwOMlfrXSm+064UeTqVrLn+7Mp/ka5+SEf2x5SMC0zY6+v0rBK50bDLbwDayFZGjMhZd20EZx61Ybwnaw4/wCJY7EH1rlvDWsXWteP9NvtL8WX89k9hNCtnHbr9nPlOVlDkjIcPtOTg4Ixwa9Ek1qxjnkt5NQjSSJtrq3GDgEdeO46Ucsr6CUktztFZQuVJqUNtz85O3tTjZzRr+8ikQAcblIGaRo1QZkkAUckscY+te252PBUCtfGSS3kRVJZh19K8rvPBPjnxn8evBPg3w/pdxcXU6yzRpHEWxbllE0pOOQoByegx2rZuPjh4Pm8QWnhfw3HdaxqN7ceSnlJttxjOWaRuFUAZJ9AeKTwv8UPH3wn/a2sDY6h4ebdatZw67rW6GztrS5aOKSbhv3cEb5KggFiMnlq51ieafu7I9GOClQadSyb6df+Afrlr3iTw34R006j4i1i002zjGBJcShAcdgDyx9hzXmv/CaeKPG9xNqXwy8M2+jWU8flzeKNcg8vfGmf9RFnfIAAxGcJ1NeJ6t8XvhH4b1D+39Y8ZQeOPEKPhNW11/K0+1f0tbc/L9CfTg1e8J/FK48beKbzU9Q8THUXtNE1S7jQZEcSi1cfKgG1R8w964nOKly9SuR2uS6j8VPh74N1BtS8PSTeNfE/O7xFrWTFGe/2eLgKM9MY/wB5q4DxP8XNd8UTm+8Q61JdMnKqeI4/ZUGAv5Vwc8fygbTkACqMy/Ke4PrXLXlO44WZvXXjhrhSlpD5mOS2Ko3t/cTeGp7i8m/dyX0XCocAKj9/+Bjj3rJtWtbRvM+ztK69Pb6DvVnVNSutQ8HtJMWSEXUpAWPhQoiXJ56/Ngn3FTTjzOyKlocHrnxE0PRV8tt7zCyvb5Y8YysXGc9ucVH4W1/XNY8QSx3zxrbxWscwgTkq7qrZY/jivPfHkeinVHjuNcjili8OPAsb27klp7xA3IB7H9a9o+EthYvZ/E/VmuoL9bK30jTLX/RWQ2ZknLNIJHAD71ixlckAEHAr0MPRtLmZlUb5WUD/AGh4k8VL4d0LSr7ULvT4G1G6Sztnn+zQBWHmSbQdi57t6GmWOoab56xmTc5j8lN/Hz56DB/U+tfdH7Ffw307wr8IR4vmsR/a/jy4fWL6SRRvaAkpbRH/AGFhCkD1dj3r8/P2hNHX4ZfGbxn4Tsb5beCwvZJLYTSsEit5VWRAceiSAA+wxWWMxVSDvHY1w+Co4i9Kd797nWeKVik8bePptzHy7SW0UMxAJfyYTxj5jgkYHv0xXPnwBoh1CaSeGJrMxJHDbquPKZerbgcnPHB4GPeuJ0v9oDwl9h1hfEmoagmr37WyzA2MgDGO4R5c4HHEYIHHvW/ofxv+HfibWI9F0vV5UvpW/cxXNu0Pmn+6pPVsZ44rpoyi1uee8PVp6W2NJPhr4Ts7+fWLWznWSTY0kZnZoxtzllU52tgnJHUDFN8VeDrddHuZNEVxfMAsSyMXRiTypUdc/wD1660+W0R3AbSpzz2I5qpqki/2LHdeZuyqSDapy2cenTJP9Kzxrth6j8mF3JLyO3/Y7+Hs/jnTdY1uC8Gtap4fu7Zrfyo40t5Zj8rea7A+dGjKvyqB8rHndXuf7T/gvT/iBaaPp/xCmaLRdFurzUNZ1DRSmI44bZjHGiyOSkjBmUZBHy8V81fDjWrr4R+EZbLwbcW/hMaxF5Nw90xt7y9h3Eh8HL9S+AoGc8EduH8VftKfDfwFeXeganquu6tfvEkjmHTRszJkkCWWboVbn5O3U18dhq1aF3h6Tv8Ad5HtYarUpfvIrbqe+eFvh78LrbT9TuvhvpOj6JfwSQDTY/EPl3Ml7IAwkka6lBWM44UKEUnI44NbXxO+JEus/C0/DzxkmqX8+m6tDOskjczxxsR5TCMfvAQTs2lQPlbJC8/Nfwl+MGj/ABe1vWbTTbXV0i0q1F9JJerFGpjeTy440VCcEFgASccEnJNdj408YR2Oj6VJ4j8cabKSskX2cs0lxFIBtRSDkIADjAHOV6VxYh4+F3O6k99d0/L/ACOSpzy1aseU+Ho9Zt/E1/fW/h230PULi7uNMgur6+URMqspQojFftEkaDKsD1zzjIPMaBFban8UNauLTSrN3061kvfJ2hxq2oyHbG0zZIyAxZkHTkY5zXplrpNjqPibTpJtPiuLnTLGSS1cMssisGDKwiYkBmVz8+MqVbLDAFeR+LY/E3xA+MuneD9Pvxo9tNpzS3JmjDRQK6DMjAbRuEfljI27mIGTzWuFftn72lo6nJqtD0nwL4k8MWmpafpOg6pNfTa5axXM8Qj8tJJgS0ju2ASVZ9oUgAqqkj+Ku00vUNStdQ1DXNU8qz0q11MLF9iImkudzHKRsx2ZJ2qPk2jqSRurH0n4e2nh2OPwH4T0kyrpkUdpb3a5iZzOAHlU7jtZlPPOSTjnrXRahCmj6TE3g/SUElhNFd29tMrFbaZ3BbdkNvIQqxQ9Szc4JFcVWpGc/dRs2oyRzfi5fFlvq2oeJrOS3h1IaO0a2dq8cSW97sBR1bsVUs3HUsoHG0j5r1bS/iRqPgGbU/FjTXFtaeZFbEW43h5JCXknlHBZySAWLMSvAA5P0v4g03Vre4kn0G6s71r9/stxFdI5YmJco25TlRtPz5PR1GfTwf4mWlnoPw/Xw9b+Jby4vbO+kivLGS5PlLv3ssqQZIRT93kk9CMA89eRTjGvGnu2+2245NK52H7NPg3xwvwz/wCEi0mzDWc+sSwxs0jJ56I8cUqQgYydzBSzHaM9RyD9GeH/AIH+OJLUWqt4e8IyT202nxrqGq2aKL0A/aNqAs7PG5ZgMHGM4GRWn/wT98Ntdfs36LY3Og2d9LqPiK48v7TMyGa0M225iU5xsz5TYAwWLZ5r6a1rQ9Csm1/W9L0fw/Dqtss0saSxCS5lPl+Tb3BLcK5Ecm6TBPIHWvoZ5VTxGIqSq6nr/wBl041FGrJ3aT0t1St+eumjR8h+NPgrH4T8QS2Ut1FdxeFNP0/T5IbRZJYJJwizRmNAN0u4KxOQwCqe9eVeJP2Svjd420XxH4vuvh3HrmqSo0NnpmkXge4tVZgRdPuJaZTjgIOcnkAAV+jWueFfB/hnxxoVhqGo2v8AbpgOoQmQRiaaYbVYREglvkjnX1xL7ZHmmkfDrQZPCfgj4k+EIRYfE3xb4gS7XU7FirpbF286GRFIUwLCoUqRwcelKhlNKhUc+/4I6MPklPExclJqPuqLa0bfM7vVWiuWV3rbtufjJ408H+LPB/iC4sfGXhzUNJvRJ++t7+0eB89wVYD07V7h8NfE3i3xhY2nhm30XSNTe6uIba4vXiMk2lWUapGMByIl3bhhycggnoMV+j+g/s2/E74tfb/G3iT4xHUre71+4XT7HW7L7dZyaYkrKF8lyCkmAcFW4xWDoH7Nd03xik0uGbwfb+CLpru1Kw6IsUk7WkKedMCCNwEshj5YjhsV3YrDRxFNRjv0uYSylxnOkqkW4Jt77parVb/5M+TIfHnh3w/ayW/gnR5NW125mk+zySSSfbBJECsjk9HCpGpXknYUyxINbPheS+8O3ln4i8Walv17VZJr23tYIhKtrtBZ3nTADtsRmG3jcVJyWxX2Ra+Evhz4N/Zj8YfEp7HRr+4uTfRaPql5pEAa1R5Ta27IqgYwTuyDk9zxXx7pGl3mqeJriC5vCuj2N2LW4eY4inWNwXYRg/OxEe3ZkgYGcgV87mFKOXfvebWW5w1KFXC4iWH+1F2fy3O6utX1TxBqFhdaho6Q3FxcRQG4mjWN2KLmOSYBS/8ACQd2ACACeRXNx6gzXz6bBP8A8S66KiF4gyxWrFiyoXJ3Ss7uE24z+OcQeMPG/h3S7Zdt1O1xcsMW7PsRbaS4Vo1lmXAG0IMv2G0cnrR0+2j1CG51zQfCcOpS6yn2iztJtQ8u18iFZPnkckjOSxKpg7wpJODXy1LnrNyq3t/X6HFOa57y1PPda1jwj8QrrxNY+NZoIx4YvLaCMRII9lsYdrESTOHUJIRvOCWC4UgYrMvm0fRfFGrrb+FNIvbaDSriaW+UM8U9syjZ5RPVVKqWIyMZArE0eHV9U1TVvEVroMB1PSZpZdVu7k+ZJd3rrJsjgXHl+XiJQVPTJ55rpvGUesQ6LoVjrV1BrmrW9lHqerTQ28qXSrHGjS2wDNsMaLIse1R85HYV76oRpWhTemml7dN/67kN3d+pD4N12PxQs3xA8VeF79vE1rdWotobstFY21uZHUNbRkjewaNxyDtYtnPbF8FXkOv/AB/1G6sWl1eK30q9t9WEN2Ylm3KyyDLKrSxqrBSGTJZR2xnV1rWPEyWemT6L4bNi+u3bMqy3JYSSTRsIxtTosMLqScAB2Yck88LoniC+0ae88dSeCr6O88Reb4SSTT2MJMwt445l2upBZ15Y/K2Xz2NdNOgpudla6stb2v8AoaRmuY5fxh4o+1fEibxB4osmtLC6uma8sbVNrxIGKG3HORlQBycc5r0fxFY61D/whvhCe4sH1O8ggjayZ2luZZTHjBO3CQpH8oA4Ys3Xk1xGqfCXxhqUVzr3jJrHTrazU2kuPLjMbRztG0ZRSDI+/cCVJI2kk8V2154b8G6dpOq6nJ4blsdXsvPt7bXre4lmj3RQqnDAhBneCuBubrnHJ6sROlThGPbTQxb6Lc0/G2pfCGx8J3mn65YPc69Fc28EFho8QRLdFBPzXBIRA6uxYKhYlVBxtqj4kk8J6T4JutTv5LTUta1e8b+0b7UrgqzwrtFv9liQh2TymZzvXaSBgseK8t1TQ10XTdO1Kz1VLm4KkXCwW7+XMWwQC0gAZ8NnGOPwqz4zX4gaTHLqV54Ykt9PhSOyW6u7PdGGhHlrIoZQNyrJtDEEHdnk4woYeL5Yc+l++47yrNyk7sydSXR4V1R/CzPc6MXTyZWjPm/MpIV8jhhzkdflNcPIrMzyNM2VP3nPPtXtfw+8A3WrfBHxHfQTXBR72OW1B2r50kcbbvLJwW5IVsZwA34eU3qqLWX7RFarNYyCPyl583HByR2r0MNVjzzgndp2/ALcuhNfyMtool80SMqnKjlfoRXrvhX4wacukx2sei3ekamLGGxs3s5o98s8cYjSVyyELyC5A+8xJYk15ruhs9PjkureKR7iJVVlb7mec89sHH4VjWktwb8ztHG7owZcZwQOKU6UcRBxYnG+jPSPijqNxH4tub3VLXUBpGpTm5ntIb9nEzOqtsZ2XDMQsWWwcAfhXnFvMr6oYYUW2hu7gFIyd4jQtkDJxuwOPfFb8Pi+3ubqwt9Ys4poorpHm8yPeTGOCN/3uFLYAPYVO154F8XfER0g0X7Fobllhh+0i38xgj7WZzkRBmCnA+nU5p0VKnDllHpuCWppfFRpDIbjVPEAu7p7qSFdNkUm4giX7rsckKDxheOO1c54ObUrfxGZNFtUBa3cSStGXEUZAVmI/h+9tz/t9au+O4dGuNaS2hkvzqIRTeXFxceekWNuxI2B3OAvXd0OB2yebs9QuNLvzNBOCy7o9ykgdCOvcHuKqhTtR5UWveWpZ8UafYw3SfYNRS6eJlUyx8diMAZIHT1rBZWmn+0KxKsASd2ckU+4Vo4yyZAJHA4AP/1qntY7TyxFiQOfu9wT3z7V1wXJGzdy1ojT0G4gkSSCaFtqgukinkMBnkn/AD1rPUxxubO4tZGcv9+PuPbPXigrJvdYbfzExl9o7k0jXl0gQfaMgNwO4x/9apUbO4LUrtZyBVuhIY1EhVQThsA96149c3Qw/aF80wyEomNoQHrg++BUOpMzRx3UELBRlG3dAfXjpVW3s5rrKxRmQIN7KPT2p6Tj7xopNaIlW6a5N3e3SksxOxX52qemPpTLwQjyLi1ww37mU9mAFXYfs/2N7dsEurZJ7Dt+tZMNwI7UheZWYY6jB/zxRHXYrktuMaQysW2jaxLEDjFaui+HtS8SXEGl6daXFzcSSCOExj7zMcBR65OAB15q74V8IX2r3UP7iT984jWML8zsSAFA9ScY+tfpN+zX+zDH8DdIuPi98WIre1v7SzMlnYNsP9n5zl3OCPOIwBj7uT36ejRwntNZaI9vK8jnjZKVTSP4s+OJ/wBjb4rabo1rHGsT+Ip5Z5P7B3YlS1iX53dz8qSeZ8oUnnsecV4lrWl6p4f1KfTdU025sL2zPlTwXEJjkjbHRlPSv060fxJr3iy6vvHF7qktiNZk3Wcf9jST7bVflj3SEDO7lsDgAisL4q/B/wAJfGLSTZeLtWtY9QjjC2mrQ6RJFdW/oCd2HT1Rsj0waU8PH7J9lj+BqNWhzYJ2mls9U/8AI/MpfL2rI0h+de1S/KrYYnJX5SGxnHP8q7b4t/B3xJ8Ide/s3WI4byzlJNnqVruNvcL2wSAUf1RuR7jmuHm3bUk8shlzhRXNKLjoz81xWErYOq6NePLJdGOYq2Cqrhhng9as2d9JZyGTyYpY3QxvHIMhkPX6exHSoI40VVmudsfnDhV7/wCFJtmYyRKq7VcZf0FS7NWOXYsafKyzPbszfvhsLdeccD1/Crd9pslqtvc3KjbLGfmAJ2MpwUY9M9/xrrPhD8K5fiZ4gvNPF2YobW2a8mMTL5qovV0DEBgpwW5+Uc10fiXRNQl0SXR9a0nyNQuGtZI7v7J5SRkQ8ptUn5n+UFiRyCSK4K2KhTqqmt+ppCDnseQ3UiySJJtUKijjPUZqLzvvSRsc7sipLi3uLC6lstQtZIpkYhkcYI9uaghH7w/L8uMjtx6V3xtbQlqxYjkuFSSQyMUmVkbP8QyCf5Clt2uLiMR2xJ8tSpQ9Auc/zqsy3DR/MflLEnnqKajXVqzxqrRiQYb3FG4JnpupN5v7POkNIx8y38VajbOOMFHt4HAx1+9k159NdTlo5Z53kmRVCv1OAAB+QAFd/e24h/Zz0q6kYJJd+LL4RZ/jVLeAN+p/SvM908jEM3KgL06Cogt/U2nLb0LovLiSZrmR4/ndm+dRyzck+3NMuPMmYhZtw6byTk/SooYfMcwlgWUg5bt/kVJHJ+9Ecg+XO1cdqpoweupG0rTMzTYy2Bu9MV7V8AIo9Ls9e8SXskkdgtt9juWjPzAOyqrFCCJArurY6/KcEE14rMDLvBwQMKMdz/WvSvCfjWZdJ0bw7p8kC2mnvPcym+VTG904+RyBywjwSAxIz2xXJj4znR5YdfyFK1tT0htN8A6L4mPhfXtVksvDkWlyNLdSMYjIEjclIEZC7yM5G0EhCTgYGDXknimLwzYx6fceDJLt0lZW/wBMULcKVwQw2nGCSw9Rt64NdJ8QBP4i1K0aPUo5rn7TBBJLOhiEeUQBnVicKDxnoQc98Vz3xIjtbfWdPtbO4tY5Usla4gteUhut7+YNoJC5OMAfw4PeuHB03Fxbbu9+2goTk4pSOQ1GWZpJ9ytHyWGRg4PUfQ1RjYrHvUgbuAPQ10Oq2sN9ZwXdvcxvOkX+kW5IRwAeGH98dOnPt3rFWHbGI5PlwSW9v84r2abvE0kmivHlrgM3BJrRklbzBGrcScYx+tUZNysNp5qabc00LSKSqjGM02rgmJMqqxWLOByOefenESNCsm4KT/CR/KnP5bq7BuckH1GaeBL5SMrgMvpzSbIK7yD5mkz5iMNrDHIqNVjaQ+cgYDpg4NWxCskb+YwRkXPTJbjPSqtwvzhl4EgGQetNMZM1qyuJlQrG43Ln+VXLGd4me3tVCeZtJUjJUjvn0qtBKrYG6SMj7wTJB/CpbcStMZbcAHPFRLXRkkmpXE0k6XDRiKTZscKOGYHrikl1TULiFYbq6mlRcY8xidvpRrAZriOZSfnXP3fu+1VPMVlZYwPk4ZfWrh8JWxb23DMBGzFRxz2p07THc6LlWxuYdz7GqivO8ibGOevWrLRsmVVsb2X24NEhB++K/NHnJxz96qrt5cxUxng/MOmavsrqpkC8hSuQv3veqkczTw+XJENwHLd+PakmA6HcYpZJFwCflweM1PbzSbhG0YyR0P8AH7e31qtHJIqiMBGDnP0IrQ2r5yeZIoZ1C4A688H60pMC/Y6XZ6tia5WQMPlysmDjsD9K6PSfDekpcLiOUk+slZGmQhh5j8SBsnbwM/T1rpNNIWeNsgHv9acXodNNaH7q/CS+XxL+y74Vul2n7V4Lto+v8QtAv8xX4satDoOh/FrxFYa/aXn9m/2ldrMdP8v7QFcuPk8z5M8k5PrX7EfsV3ia5+yj4GUyK5TTZ7FsdvLnljx+QFfkl8ctDa1+MvjO3VWzBeiRVC/3gv6ncauWsHc1w91JpH0X+xv8P/2dfHC+KbVvhr4q8R6pbPa/2XZ3dzE0kzuJMhTEEihQbSXklJAGMHPDfU+n/sh+D55jqt1N4J8OKpx9h0rR49RdAeAHubosXbgg7YkHB4r59/4JXie0+JXjTQ9QglgOo+G4rhVcbS6JcBdw/wC/nWv0IT4ZeF/JihnW+uPJChWlvJC5242EsCCSuOCecFh0JyQXIrHPUk5yuedeG/gNZ6Tbi58K694Smjjyoe68G2rgkdfmjaM4+laGoXXjjwvMtrBqngGLESSCS38NzKcN8qkAXYGWPC88ngc0nxsjbwV4UsLXQPFCeHNP1rVV0/VGaMTSSwTqRLJGz52MiK7naOgPQ1l/CoaFp/xIvvAtn40HiDQ9N0iGPRYGhgmiQKwaSPzkT/llmMIu7G1yAMx1ulePN09DPYs3VnrXiS8/snxd8Q9ZvbUrum0/Rli0i3dcEFWljZ7hlYhlwJVGQQa8r/aa0PQLHwf4GuvC+g22kafA95aLaQQeUsZ+UnggEklSSxGWPOTnJ+vkhijXbHEijOcKuK8D/bLtfM+Huk3u0H7NqyqSeweNx/PFOjL94gep+eniL4eeEdc16TUtUkktr6OYjzI7jBcDlRt6fdJ5x0FVNQ8KwXVyk9kLiRBGFyyqoKLwCM9T1/xrt9XvtN0+WSG9glJumB8xYsiNdoBJPX2/E1RmuNMuEKR3BMbnai7ivy9eD7Up1FGbV9SlGTimeVePPBdn4ns7NZNb+wS6fK8q+bDyc7T3Ixyo6E1kafptjY+MtN8TWHijTBcafNBMYZc7v3MgY4IPJwB+teuNHp/mNDcLG6S5U+Yc7gR3B7YrifEPwr8L3TNe6fAbSbOd1qBtJJ5O0j0/maUa3MtS+RJnsf8AwVksVtvi98MPG9sg8u60sJ5mP+edyGH6SV+evxGh+y+MNYtugi1C4XHt5hI/Q1+jH/BTyFda+APwM8eR5kcwLDJJ3zJawvz+KNX54fFTnxpqMnBFx5Nz/wB/IUbP610J/ukyJLVHpv7L2pH7LrWn7j+7uIpgvoGUg/yFfQsO2SzkjZgAl1DKxJ4Chuf0Jr5T/Zv1Q2vi6/sCwC3dqGHPdDmvpz7d9lt7iQYJ8kyc9MqCefarguaBg3aR0zNo+flFv6jCg/TtXIfFRbX/AIQ3XbqGRQU0/wAhtvGB5iMc/ghrrodSimhRkjnxIqsD5TAc45zXNfEqdrnw3dQiKTbNui2yKVyfLkYf0rShC9RCrT5YM+KdYVJLqZoWUo0rYx0NfUf7NV4LnwaIS+fLfv26H+tfLepXsN8PtNvHsV2GV/unaM4NfQn7K9/nT76zYn5SSB9M/wCAqIJT50KpLl5JeZ4341sxY+INZtlj8pob+ePC8f8ALRv6V6F8DNUkWwtQ07HyL75izZxyK5340WX2L4heI4VGEe4Fwo6ffUN/7Mam+C822K/gZuIrhJQPYj/6wrzKcf3jiz3sRK9NS8j6xsPD+jaQpGl6XbWpkeSUmGIKS0jbnJI5OT1/CvHfjdf6voN5/aGj3k8BaRTJ5cavu/d8BgR0yh5Fe1wzCSzgkDZ3Rr9eleT/AB2tZJtOaeONnMcaTSAf3Fchj74D5/CvRw8OWp8jxq8rw17o9N1z4jfFbw3rmpaPD8QNakk068ntWkj1e4ZHaORkLLuOcEgkZ9qyNQ+LHxO1PT59O1Hxtrk9tdxyQ3ETagSssbjDIcqcggkfjXmP7QHxGs9S8ZeJ4fCFxM1tc6lNJbTQ3DCMKXzlWByQeeR60/4T3WrX7q2tTT3c7WV5dBp5mJVEt3VPl7AMQRnuRXRSnh5YOOKqRcebZPfa5w4WnjMRzcy5bO2qWvmvI3vGHjbxFb+D9Ktna2ay02+mitbN4YlgSL7NtZdqIpOQ45yT+dcZG3ijx18VJNBw1rf33h+yt7iWJ2j8iPz0lYEnceVUKAuOuOOtYPi7xB4m17xJaeB/Br6t9ttvnm85lKKgADOoOQAcZLd+PpUXhq91jSfjtYWcd5IdSkurCwkllUyyEF0Em3aAqjB78AV5E69OVV8unke2sHUppKck5HsXx0vl1LRpbG00QLHPqwgSd7oZZ45CCFi25wcjkt+dfTvwjbfa+Mb1Y2tTZeFbxdigDLSSRx4J5JGH7Edq+I5vE2seKZDdapq1y1uniaeO3ndkEMKC8iQdRksN/BPGM19f/BXxFpd/pPxJhsfFCaxIdLtod0UPyx7tRRSpcfLkGNhjrwfStou6OecHFWZFcRLyO56VmzJ1woGK3Z7dlUt61mXkYVWZVwBya5pq5nDUyJV4PyqT/vYYfT1rt7WTWv8AhQvi2z0u0i8m5e0We8m3F4ybtgsYCkYQmM7s5BIXjuPNNS8u6kh8qWC5lQMsauxicOT1A4Vhj1zVjxVqGsW/ge08PzT3UGmTWqXt3Y+YR5jh5djO45yok+VR0BJ4OKzozjFtndCHKua+p5dr3hDRdD8QWU+uappkNs8OlWpj1CVYjK6uJJeWODgYJwcdMnNd74D1HSdD+D/xYuLfxPpBm8SeKbOLTLKO/hknmijt59rooYttDMB061zPx3+FOm638P8AWdesYbFdWW8s7WOGa42SSRKoCyRqxxsBEgZzxkjPPNeJ/An4T+JIPjP4Th1jwxe2i/2tbD99Fs3gzICF3YEmQ3AXOcit6WL5m1JG06Ma1j9n9f8AH8PwbsfAvgW1s4Wijs7a3ut+f3VtGqQjbg/ezk89kPrXyf8AtGeH7XS/27tP1/WG02PTdV0mFlW+lXFzMLaSIJHEcmU5ReApGSMmmftMftDtqfxguLHw14F8SajLYrFpiwXFubVzIhcuVRgZGG48ELg9RxXSfEr9n39oDWv2gtI+Nni/VfDkvhezt7aPy4l3TRDlUhCSLuRg0hYsrYxu7muLEvmo1JS2Sf5FYSEqVem9m2fAPxg0/UvHX7Qvjex8MaDd6hcS6xciOCxtzK21SFLYQYC/LnPQZrV+HH7PuvWnjTRfEni7UNH8OadZXXmfZ7m5Wa6ndOcCKEsVxkH5yvTvWn8O9YmtviR8S1aPyrTWL5ra6eK4KMo+1SOPn6YJXkdwOK9QtbC1a1e80/a1wQ5gijtWlZ+QciU8JnPX1HAxWFGXs6cWnbRHdUo+0buro7Xw/BpeqTPD4f0TVPELj5INzLbRSnqS2CWVAAx+8Ccdq3brwn40t/BsutWr2vh7SZS8aW9qf30mMrsL8NtCjoW+grmNB03xPdW9hIzW2mvaW8lxG11bCWZ0JGXXedpwFIU4OOTWn8Q7W61trTxBBqV/Bpe6KS2hkkEQRxGN/wArHLZbJJx3HNY1cVKrU5ef+vyNKODp0Ic0YanHX/gHV/FTTavcW8E8drGIIpricQKTwAqrnJ5Iznmvjj4+afNZ/FrXdLZo3ksTDb7ofuErEnA46DPpX3To+l+KNbsUt9Lhs4rWyuR/pUs48qJmVmO4ry3Uk4B/lXn/AIL/AGbfA/xM8TeKfiN478QXTk6/dWa6fZkRoUhVFJZyN3zHptxge9cuIzOlgFKtiJWS07+hu8FPFqNKktdzgv2LvAM2vWPxOvotWnW/0vQNPaGzgjaaW8R5C7QpGoyzZVAD/Dkk16n428AC38MeHf7Psob/AFXUXSfz9HIcRkZAXaW3fwuzvj/WBQBjGPqz4U/Cv4D/AA30W8m8B6BEusv4RfW9V2Xssayxq7hA2wgyDzIpQAxOSh4rgP2o5Yo77wVYx6DBZR2/huO4220KRwlpljLAAHJ2lTkn1FdOMwarU/rMn0VjwoUfa4j2Pnb7jgLf4Na3b+KoPFNhp8ekW405LJBdSKHm8yRXlMg5YBggxxnryQcVJofwB0HwzdPfWvijUftN2TJcNYJGineAG+ZlPJxn7vGBjrXp+ksLjwzp/mRIp+yQhlVfvNsHzH1OMDPtUkduBGqL8qs2STxX47mPEGMjVdKi+VbbX/M/TMs4Py+lD2laPM/Nnz7+0Botno9/4ag0vUNUi36dKJ2a/m3SBHEaZwwHCggAAYGa8ku9V1yW+dp9Yv3SCFYVJupH37QSCxJ5IBx+Ar2H9ouNW8TaCjMWKaS7AezXD/4V4Nq2rWNk0wuHIJY71XqRj/62K/RuGFKthoTqu7cT5XO6VHDVJxpRSSdi34Z8X6xeeONI0eXTp7yO43aewEmCY3UiVlY8IQi8tgjaprD/AGiL7w/p90uj+E7aYQwLPNLNx5KSyOo8iMgASFAmWcZUl8A8GpPBHjbwfoVvL4s1CEz6zb6ktnZ2flLPMySKQpt4j6b3EjHk5ULjk1x3xLuNUn+3WOvaLp3h1reeUw2UduUkDfId8v8AFh1ChRkgENjGc19BQoQp42MoRtofG1ZSnLU/WX/gnvpYP7K/ww1KTwrDJOIdRKXvBKW7XU5GOONzHkDnj34+jL+yuLaaOax8D6dPJfmKO9ZtmVjDfxHHzhcsce496/KH9n34geLtK+C3hzSfCeravC9tZStK0l9MkESrM75Xb8kaBWZgp+ZiJCBxXdWfxEvrU6db3nxE124g1JQZLt7658kRuwy6AHceuMKuTk5GKjE5/Ro1pRlTd729RyrSbersj9D9VvrG41q31jUfh7Hqd/o8wjjv0hBlttyEkoWXONrngN/ER1Nc78PbT4S6F4mll8D+EbqG91S7ltWlbeY41+dmaPcSFQ7DwuDxjHFfCS/tafFTwKqX8njnXbC0v45pNP06RFu5ZFjwyyMJQxUMmD0x2GSTj2H9iL9rf40/tHfFfXPCfiptHTRfD9ibtrldM8ued/MREVeRtDBnYkjP3eBXdhcxoYxtRi00b0sbXhTlShUkotWau7Nb2a231PovS/Cvg3TYyND+I9zavKlz/YaXfEFi8gw08UbbQ/DfK+dpJ4JJrG/4UPHHr0OufDXxbayWUfh/UNLmguLx5g1xcRlElUrkIN3zMB1I4ryj4ufH2+8K+OtX8KvaeFzaWVzLY26mzyY4s52ybW4AJzlsBWORg1iaV+1X4k8OajK1neeHI5tQA3/6N8g+d3GSrYXLSvjceeAOlen9WU43O2nxDjaMpP2vxKzvazW2vfd/Nt7lb9qiDxp8Pv2e7L4N+JLfw01vasl9pzW8zrm1syGdplYjexkkQKoxubGa+H/h3rtx8SvjFZaLrEF9p2m6PbXl5Datu80MyneryLwqjeGJYEqiMuelfWfxS+Jdr8WvEMGoeNdQsHvLSx+yxi3lMUKRrIZT3Khy2M8glVHGBXlUcnwx0Wa/j0Xw22L+RpLkWrGNJN6bH7q5VlAz/CTz3rycXlVau3y2ellc8/H5lLHYieIlZSm7u2iv1dvxOF1zwlqVvfXd5r95fSaXZ2M0P2CbaouJFZdkxKgBUX5c+ZlgVXAJIpngbw54k1TWtN0O/wDGdxcr4bs5rS4FpdtFbSLdq8yMoVf3efNO4k7jg5KgAV6haat4J1aMyPHDGYnafbcy7RnGD6owGASATyFzVCZPBtj4euJNN+zwwyqvmlZQssm1ixQqFDBnYtuAAY7sdK8SOSY+jTlFpPtr/wAA4YuLvKUtTxTwX4m1rR9N1fwvY6bpaalJqD6hZWN6kj3MjCMLuVwrB1b946h8KOc9cVq6vfx/D3wfqMdlqQ1DXbyd1u284bpLl442lkjRhnyA2FA78kcLV3QYf+ETupF0lg2oatcGTT7qJjcokpZTLCkbfMyhCmDjJ5B44rm/G3hDWvHF9L4ovtWtdP0PTrRLeC5uwsFzesozGg8pSGCSccDhVcgYFcVSEFV5aisuvm0dUabVPTr/AFoctpPxu0e11m91TUbW5srqx06K20fEYlZLjlZWYsQBz8+e2W77cYej+Mb7xl4k0jQjGBK2oW9xbixTZtIJ8xjsIZ96cuc7jtJzmmXXw1sfEy2uoafM1lc6xdN5Nq8W5FgjjLXDjacrsODhh8ytkH5TXSalpfgb4b3V5qFjYyXN9paGzst8rfvXaL5rmUoNgA348tGGQpJbPX0lDDU/epr3mjCUORF345eNNBtZDoceivFJHeWGrWjyWKxiWJA/nJ8xLjMiqAx+/lyetZF/qnizx/4Ym1jxdqyQ6aul7rOwtnBeYu3lRYi3AYXyDlsAKFU46Cuf03wH4k8f63ZreaZLBp+YIzNcXPlDBIRQzyHKjgnPZea9B0vQfGHxC8WT6a2h2+h+GdPWGzkjUBYoIw27cOAZt5LP0OQFzwKxlGnhaMY6XWrf+XmxpXh7r1O4bS4de8P289jZi20KfT4USTzS9xdq0kSRJAiZUufKmRgdqhSxY1j/ABg8Va5qWoN4c0XS4ruG5srexmsLhVkS23SgIiwucCUqgJAAI+UmvQvFGvR+GNO86Jra20mx+zJZTNJue9hEB8uKBMgJyPMIbgEgEbflr578b+JL6XxBOfCtodJ0Wa5DQTqFV5C/zPM+wkBiSy8HsM89OHCr27jVktuj/rclRlzckNUd/wCTo/iD4U2GqalfPpmltcCO+a1hVYrOcK4WN0A2INyRng5PmDHGTXzb4h0eK2VvJXmcrJEqrgmI8jI/hJHOO3Oa93ddJ0/wLf6PqWuXk7a/5E3kTMZI1uIcqGK9fuBPbAHPAFcXN4MlVrmzuJ7eeVh50NxCGMZUqDjLD5sEEbq7sFVjQlJ30bO6phJxkoRi7nn2qK11a2mnRWY/0ZcKob5+f5iolt47WNX8wZZCfKfgrj1/WtSGxt76/wDs8bE6hBkB42GBjuB3681dt/BNxNHcak2bkQgNJI65VTnGSO/tXq+1jD3TCVGp8VjkQv2y+itVtwiOw3AfMcY7mtbw/plnD4iik1C1cafBcLHcTk/LCpI+Y8Ek4wRXWaX4RtVs7m7VSt3btt2f7OMk+4/+vT7TwPc+JNJgvtHV2F1NKl0wfCOU+42Onqv5VU6zemyLhh5voYet6bHqccutf2hLc38l7LbPJgbZjncuBnfnG45PsM8Vx/kyrL5LqyNv+U9s/wCTXrvhLwNqE7XFzf20YiezeGOTLRusgIwR74z+tZ0fhW+1jdbtYnbZoyxtG335lOe44OAR+AqaWIVNW3NI4STjdI4W40uaHTp2fbwqv09QD+lZyxqiifcdwO3bzXqreEtU1PT571bZJRcSLCq55GVzyP4SDjJ9KxvEXgmbw/eLot9CWDmJ0mX7jAgHg9wc/wCNXHE9x1MNKPTQ5PQLvQLWW5j16zv5/MXNubWULiTII3A/eHJ4qpqkbzTw3jWbReZuG8qBvOfQdDit/wDsFtO1MyzK6tARLGpTG4DkdaueOvEFz4u123vV01bVPvMgQDLt1OR16cflVe1/eLlWj89vkZqjNdDmZLi7+0mx/dFWA++vTipI9Pghha6a6XzUOPJUnJJ549qk1C3Dah5aj5QmdzfxE9PpWdeeRGRFDIZpicMY2+UEehrVe8vdNadP+boS63cWqxwQ2aMm+L5tx5IJ6HHpWp4P8JzapcRySQySFmCxxqpJZieAAOST6Va8GfD3xZ8SvEun+HPDekTX1/fMlvHCg++394+gHUk9ACTX6g/sk/seJ8EdPk13x1cadqeuXao0caQCb+zsHLCORgQSSByB24Nejg6Nmro93K8t9tUVasvdRV/ZH/ZEsfA1nB49+JGhJc67Kqy6bZStxpylTkyIeDNz7he3Nb37RXiq61zxLp/wn8G6PZ3s7SC81drp2NvDCp/5aleSC2AEHUhvSvZ/iN450zwH4O1DxJcahMht4j5TT7o03kcZO0ZA6/hXzJ4XtPC8c1/reueKLjUNZ1q4FzdTb54EGBhI0UY+VQep5JJPevTqS5Vyn6Nk+ElVl7Z6RWiOssYvGVvGiyLobFR0ilmQcemVOOKvtdeK4o1KaZYTZ7LqDL/OOstbvwe6/L4qliIPQarIuP8AvpqeJvC7YaPx/OAOgGsRkf8Aj2a5j6uPu7EHiWPVvFWk3Ph3xP8AC+w1rTrobZbW41SF429DhlBU+jDBHY18RfHX9kDxh4ZmuPFnw68F6kNBVfMudPa+ivZ7XqSU8v53iHuCw756191E6WW3Q+O51z0/063br9VNPkt7iRVNv4/u0b+FlFo//tOplFT3PIzfJcLnFPkrrXo1uj8eljj3YmtyFXIYZI+f+lKkj+YE27T/ALXT/OK/Qz42/sf6L8UHn8UaH4ngsvEzDcWktIYba9P/AE1EKjDn/npgn1B618L+Pvhv4v8Ahvr7eG/GWiXOm3a5ZBIMpMvTfG4+WRfcH8q5J0nD0Px7OuHcVk8ryXNDpJbfPsa/wruNUfxTBp2iyiC9ZZJo28wRq4jXeytuGOik4bjjnNel+JLfUbWx/wCE5nmuNVj8ie61OSX5ZnWUmEhD92SIkcY9evOB5d8K/FGk+D/GVtceItK+0WtzthmkMYcwRsRlwh4Y8YwfevX30DWte8J+KfGGtzaQNR1IIbWymk8khUOVXyTwueR/dBHsa+bzH93XU3otNe+ux4VKM5VEonzlfXLSTQxvcNPGuQrEEbV/p9PamK0K+bhy+F49SfUe1XNYtfssiL9mhi3gcRyh8MDgk4J79qrRxwiN5JV3OoIBXjFe7Fpx0FO8W4sZJFIiKzY2bSo9R3qtJctNMivIxC/KM+lWWC+XLGYy0u0MGzjiqkcal1aRuMFmI5IwM1USUj134mRx6D8Ifhb4Xmjy11YXuvzKeMNdXDCM/wDfEaYry+zj+0uzQ8OmM57+1emftATQtr+haNbNuj0vw1pFjHnjaRaoxGPqxrzS1jaOZm3L5jqVCLzkjvWcX7ty6ujsQzRrb3nnNGxDj7h9KbG0coYLydxfp0+lOkkmmkRrhhIR19qRldZHXcSDkbhxxWiIJVj2ozM2AWzke9a2hyQx3YktMJdSDDRyR7l/2ipHfGT/ACrHjtZtscav85UttY44HOKu2txNbzR3VvFskhYEENg59R/Ks6i5lYXQ6QafZx209xqN5KslvmO2gT5jIwbaVbn5QOeOpGMdaw/EmrafqGtnULa1NvEQB5YUKRt4Gdox0ArZkbT9U8PzXVnAtnLApYx7sbs5yQewJ+6OcciuWvo1kVJVwU2Lvx6//rrmoL3ry3FBOK16i6lI010jKoICDJ+vr2pv73btXHTvT7yXzLyENyUjVZMcCltmWWRwy5zkL7HOa7YqyKSsQSRmNVbdnJyO/WmSK32kyfw4PXovFT3EfzNHGQVGD8vVRSXchWBE5JztJxwR2phaxWSb708m1sjGBxk1dimiZYVhVdpHLHsTVFY/MjPYjP5ipoW2K0axrk859DQ1cRPdTSLDxGhOSpYZymOopv2hN8aeWzjHzc/yqSLbIsqSKqnG4kVXVdkhVVKgfdzUoCVniGWhVlXjOTyD7VZtPL8s/PjqwHfHtVXfHGQ8iebI3HXA96sxqWSJreNfMyd27p68H09amSE0OnlnaKUTEBSSAPTuDmqcfLGSPGX4475q7PN5czK8KKNvzDtn/Dmq0e15AkcSruIyvY/4Zqo7D1YRyOuIeOchcf41Ijsy5ZsyKR9DjgUxd0bNF/cz1X7p96kt4zIyKmd2PpTtoSyWSZlEUfzBTnnPfvUPlrE3meYfLHV27/40+63R7l8kmdcKuOfxpLxhIqR7QSUDAH9alaAhkNqhmLE/fOF288etWpZsSw2/kqFxyW6ioBEq7fvcnG3sRj1qVmSSSLzGO5V5LdiDx9aTGbuis0cb27MCYz2966CyfEy8gn6dK5bTZFhYSXNxEpcYPOAcdK2bXU7TzAouo9xPTcBVw2N6ctLM/aL/AIJv6p/aH7MOnQGQt9g1fULb6ZkEmB/38/Wvhz42+E/hnD+1H410v4meNLzw3ZajCDbva2ySs8yEr824jauByfbrX1f/AMEqtch1D4J+JNJjm3tYeImkYbs7fNt4j+HKGvjr/go9CfDv7UEuorZxuLy1djvXIbDscexw9XfRm1F2qPWx7z+xVrnwl0X9o7Q/DPw71681yefw/qVjeaicx23ytFLFBFH8xOFViXZzzjgZr9HLq6t7K3e6upo4YoxlnkcKo+pPAr8iP2e9a0/4U+MvDXxDtxdW93pi3e6xh0QyxRCezZEyyzKZFDlQxUZIXt1r678A/tCfCv4jQ3+uWngrW/Gmo6Zp93qVzfeKGggRYrfmUxQsWit1HJAVR2ySeaKcva6mdal7OVlsfTtn4o8J+KozHZ3Omak0J3eT50crZK9VAJOeo7UnhbSLPwno0eh+HtBltrKJnlSMsTtMkhYqC/OBuOBngAAcAV8NSft+/CbWP9I0T4F+HHEZ3QzT+UGRwNwwViyCODweKyrz9sRfEFxda3Y/D3Qba4u5N8skWsahEGb+8yQyopJHepqVqVL45WCOHqS2R+iEd9cW8T3WsfZ7S3iQs8rSgKvTkknAHXqa8F/aW8beH/GHw11HT/Da3OqW2nXUE8+qW8WbGORZAoiWY/LK539I9wGDuI4B+WP+GntZmZJv+ET8GSzcNuvLW41Exc8c3MzD8hS+LP2qPih478M6h4V1DXdMOnSRxxfZ4dNhgEmGDKFck7cbR0P6VNPFUOdcsrsp4Woo8zVjhvGVzZ2/2R7h1UzBl+Y8HHNcpb6vodxN9hssRzsD8+0FWx07gjFWfFKaxrGgw/2hHaNckjfEkoLRErk5JAGO34iqui6PYW9jE1xp2n+aqhZmDAEemBXNi6qVd2O6hRj7DmluF1HdRtF9qeSeEfeYKoRCO/3s96n0t1ZQrNMpVso2MBh9O9E8ujxr9luJrKBWx9+cA+nQ9apx6S2qXsLafq0cKJlz5cyuxJ7HjjI4/AVKmnHmJUNbM9+/a68O3Hj3/gn/APDiTTiJLyz1izsoWkbbgnz7fknpyF5PtX5wfGzw/rWheKLKx1ezEdxBo1lHKYm3oSqkE7hxniv098QxnWf+CefiBGuDO3hPXY51YjBURXsMvb0WU1+fP7Wl7qWn+PNOmsb2aKC+0iNmCt8rlZHHI6dCK9ig3KicFRJP7zyr4X+JLPwn4xh1TVJHgtDBLHI4jZuq8cAZPIr26L9o74fxmSJY9amLwSRb47McEjGeW6de1fPkfivWmKwXF7E8bqY/mhU4HUHp6j+dXLXxFdG+jihtYXaUrGCyY5LYHT14q6c2lY55QjfmufYnw1+Iml+OfDUV9oKXFwtkUs7lpFVGEoUHGCe46GtfxU0l9oTNNA0TRXUZeNmBwDheo46NXgng/wALXn2i4gvPtGnRCSN7XyJArSMFO8sgyMemea6a68P6pIySQ+LL+KS6iWbYXJTGflyARk/KDXVSlKEk3EmpShOm1zbnzlfx+RNf25VVMFyy/L7My/0r2P8AZd1Axa1dWobO7Oc/gMfrUl98JI3klukisp55HeWQlnAnY5OSMfKc+hr2P4R/Dfwto3htdTk8P2cGrxJvmnti4y23Pc4PA9Oaij+7qNyWjuRWhzU0ovXQ8T/aNtZIfiDNcKp23dhBJ25wCh/9BFcx8H7jy9c1G1HHmQK30wf/AK9d78dTa+LdU0vVPDZa/wBlnJDceWhG079y5Bx13GvPfh3puraR4sWa+0u5ht5bd0aSSMhVPUZPTPFee7LEHtNSeHSPr3Q7z7Vo9nJndmJfzArmPiddLaaWNQ8tZPLhlVlYcMpA3Lj3Gan8J6tYro8EMmoW6vHkbTKoPB9Caq/EMR6h4ZnihuI3LB412OD96NgDx7kV61GKlNI8Ss2oO/Q8Wm8Nw+EfFGkaf4u15L17tWcqqHZC/IjDc5f5sE444HXmvoD4e2ek6l4TvNYtbWI3K2x08tGMFlEyrhs9WIJY/wC8c18u2/jbwnr/AIg03VfiBZaymmwMJbqTRhbtdEA/KqeewU/ViepOD0r6q8AeJPhz8UvDOu3fwtj8c6X5OpWkNxceIbqyfI8t3xClrGoQ5jG4sTnIxzmvCxjr4ql7SpPVdD1KU4Q/dx1Xc881nxBf+DdWfTdU8O+dNqUDfZ/sTgzSHPERx8ygAZ/H1rlPhHpOsat8dIr6+85HtdatDd7m+zIcfMI3jPzOePuDqV5r1e4bxFr3iOfwl4Wt1h1Wzk23GuvaxyCztyAWcbjneRgKozk4zxUH7MvhnTb7xxrd7Jb6nNeya/cwW89yyyToscbZaVwCAxP3ip9hXi5dze9Oat03PYxXKnDTz09Dl/C+m65rE1l4b1bVJ0nN1JqVwLaQx7kkuA8a+ygQjIz0z619X/s6+GtYg+D/AI41R45/7N1XxDa2ti0i7d2ya6nkXliTtEkS7uh4x0r0nwr8Kb5v2Yb7T/C+i2F5rV1q6S3cy2YkuTZKyEqrgb8hQSAD/EwHWvWPgj8JNTh+APhTwvr1rLp14n+nXUNzHslRmUgB1HRsEZB5HQ9K9qlLW8djyMQ42kkfN+pWbW+VZSO2Kwn028u5kt4beWSWYYREQs759FHJr7Otf2cfCEl01zr15d3yk5EEZ8mP8SPmP5iu90Pwp4X8JmKy8O+H7OxDqxLwxDdgY+85+Y9e5rR2ZxRVj4h0P9mf4leKLCa81XwnLY2FrCzYkhVLu5A5CxruRiT23Y+p77Gk/BnxP4ls7fT/AA58N7uSyiihiVtamYwloht8wqfKQsccjL+mK+46KvDyp0F8Cb8wrOday5mkux+ZX7Zvwp8ZeEfANhH4iuNJa5u7hZZPsGVEaqSygoFSMHKDOARxmvcP2Xf2QvhHq3gfwL8ZNYutb1fXbq2tNaDXM+yKO5BD4CcsVVhgZY5Az3xTP2/oU1Gz0jT2cZZh8u3PAWQn+dfTHwf0Ky8M/CnwhoOnqy29lolnGgbr/qVJz+JNefh6vtq1Xm3UtD1a1P6thKbg/iI9XuvDenePdNkg06zfVbo+TdSxQJ9ow64hZ2xuK4R8c9FNO+LR2+C7n94qDzoiS3AwGB/pTNW8J6le/EbSvEiyKbK2ixJzgqyq4Ax3yXUg9sN61T+Nl1EPAN1s8uTdKExnuFYkfXjFPGvlw9R+T/IdKFJ1sOqbu9L+T5nofkZ+zuPDt4nxFvtS0uy1DUJtXt4rW3vQ3kiEvM88jFe4UAAZz8xwDX0DrXxc8K6P4Ztbebw7HDbWt9HY3BsVEMBM0bPGyK/zlECBTnHLZOc18m6BJ4lsPCkOpeHY3sbhdYurua5t51hXZkhSzAg70OdjcbRurZVNevJpYr7WJ9SOsyFYbqZiTNJJsB3eZ8rFSoHyncMc8GueWGpVIpzZ1xxVSnLliup3vj748+Lf+Esl8M+Db+3gsrUWzG8sYTPKsLxAMvzAqVViBtIAAT61yifF5pLVYrG1vdY1m6kYySXEmd4inZSAgX5CyKWO08ZFc1Yroulu1xZLqMUt9dXNtcNCpldTb7VKYQbXRyzd8fKOtang7wt4w8Q3E2oWuh6Xp1tabktZbx1t5vLBYYGMEsRjr1zVRWGoRtGOv9feH+1Vp3lL8T2DwT491zxbDofhbS44dPttUDHfb3G1EljTL7wfnDnBAAB6jmu1+BVvHP4X8QTNCzM/ifUj8xHAE23nPH8NYngv4O3Fj4t0/wAWLr1uulW9vb3htIgBK0/y7znHRmDDOOa9f/Yd0hdV8I6jrlvolrq00V3qF9b2V0mUcSagwchTwXEW/bnjcRXzGY0I5u44Wm0lKSvptu/0PosHVllkZYmonJxi+u+yLWoeP9Q8H6ff6p4T+GqeJLifw7aeH3E2oElgtxcFmCIvClrvA3MOlN1j4R/tF/G7xtbzeNPDPhLwFp9tpzx2255ZWNvHIoJKA53kyqcsQOB6V0XxC8VeNNU+Fur6P4ZU2sieHfC15bW9vCInSSfU7mR8gdP3EAyO2GrvZpre8/aE1rS9Sv1uLC18DTXvkXEuYi9/qKFAwY4C4hjH0Nfa0sLyUVRqPmSVtrbWPjKuK5qzr0o8rd3vf+vuOY134ew+BfBN14n1LxJYX0Oj4jaztLdldoVuBbGTeW4Iccrt9RmuT8PeIvB/jJml0+1vLT7GyxSq0gYEnJDDIyOldp440/UtS/ZhvItejWLWIIxf6tcWpwkgbVJnkjUMeUEgLAZ54rwj4HwQ2M3iKP7bLcLLNDMrMu3y0CMoUDcecgk/WvgOL8pwODwjqUaUVLTXrufa8K5ljMdiHGtUk1r6bHkP7WGsTWPjzTbezkAWLQ4EbI65mmYH8eOnpXyr8RNYvbHT4ryGcB7i42HIyMbSeB+FfQ37Wl4JPigseceTpdlFg9RlWb/2bP418wfE5mbS9OjVTlrl+B14XA/nW/DnMqdBbJpfkceeKPLVfW7/ADOk/Z100eM/iEJNRbJ0K1/tdJZZkjhhMcyAuyEbpGAcbEUgl8E5AIq/+0JZaXZzpc2via71q+1BpZL6e42gh0kCINoA25VTjrwB6Vpfsi+EbD/hJtY1TxlosqwTaO66XJd28hgknV97Y243NsikA56bsAnpW/as1m11PxBY/ZrpbvbbGRbiEL5BVpGPlofvMUIKkkn0zxX0Src2aRpR2UX6Hw1RSUlc9S+GviDVdJ+A1ivh+CKQwWNvBPPNOfLikl3DbGqnhgJctu6l/bB7KbxCtrZy2+n2xu5LFYzfxwXB+WR1TZC7bWKHY0jkgblxnGQBXI+DdOTXPhfpngO3uJorEaJDqE9xbxMEgmFqkyh5CdrFmVx3+YqvB4N7wVqGnS/B6ysPFHiLT3k1K6aN7i1iME5d9zHcy7XBLFhlsnkAjBr5vFU05VaiWvN+ouSU5cvc574geKNU03T9VvvD9nfJ4i028Ef2tpSPKja33NJFlc7CrGPBPC5Jxur6Q/4JQ2viWH4jeNL7xVCk1xreiw6vDdLPHIDE0kcaj5ckEhcYJ42YxXwh8Z9QsY/GGr2FjBa21nFcPJFCkzEOdxDg7iSVLKM56lQRkAV9kf8ABHDWNR1z4ofEOa/kJWy8O2dvDH2iQ3LEKPYY4r6PK8PLlU0tN/6+ZrGl7NyTO6+NV86/FjxQzapoWntNq0+VVTMZvmI/fEAeWMcFjnBwM+vJ+atrOltHqnh21EnBtI1Lwzf9dZQAI8/w5HJ9a7D4u3TWHxR8TJLr2jac0+sXIjjS3B+0HeeJixHHrjHJHPY8w9/PFOmmtrfh+yedTtsY7YGGb18wls5/u4x3+9X1kfhR5892crrMuoatqUHhmFrBrUL58tnpsfmqGUM4JbHzOAmQAuAWQ84xWtpPhWO60+aRZWs7S+TCwREtgFlbJYnDkFW2uQGw53c1n319NoPjCG7iv9JW4a1KKtvFiCDOUO7JxkExtyRgEsRtUmur0XXo5LHbq32hLiLzg0kkYPnCIFnYFBg7QMHAAJU4yCMqpuOjqm+pxHivwxKsl9ffZZ5b6BjqbXaMixrEpJCKh53KF+XAOCAc4ZlplrrEt5pUWqXeoaAt4wMcl4kJa5DqSrAQAZLZBwA2MHp2rf8AFviKRLG9mjm+z2ktmY4Y5IfmuBLGf3oYnAVRuJAGRtO4crnO0SOOz8N2dw3iLSbSPYWM0dtuvYt7FvKwSfnXO05XPB+WnFc0dRVFaSZyusafGt9a60ms6HbSKoaKS3jaQl85L4GCgIPzHPy8muI8YQaP4XhtNXuLGxmuZ3khiENxI8Kr5apldpUAkMAfbrmvYtTuBbxJcXHirSLcT423FraqXm9N43EBP72MD3FeX/GZY4dP0h5vsVyGN5L/AKGoSNtohGepwSW5xk814uNwdONFytqelhKvtcRFS2Rzng9bXUtT06zjht7K3ineN7iGPfJKrZWR5C+4YVN2MD+Vb2vQ+EV0B28KWc0GrxyeTDDdRxTPJGXTzFkZsjbKPNIbarDao4BrmfCuoWf7zSZbi3t7SPy44hDyQC4HznqRyAfSu+uPCdm0U18kwkea2RUaDAU4DbGBHX72M57CvlcTQkpqTbXbt8z3vq+HrP3jl/DWgLpetX2reKrjUdW1LybdrWRrsiIy4IfCngsuBtyCpJGRgVo+G9Rsn0u40+LUtajtZLqaSS3nQC4vHQxtskkzztYMoH3cN7Vy+v6/e6PNYadNHDqksSlZ1WTMpbPt93Ax15JqPWrrxR4ss0s9K8OzWILq3nzThWwM/LgckHNEstxFZ+/s7a30VjojkkcRFezi/VdDY03S9P1S21rUPF1prXn6qXW1j8xfMGDsDBmHJDsuR/dVhnkVj2HgvR5Lu30bVWMV7HD501sJgcMufmXAwUPX8avWek/EiOyt7KTVbCBYI1jV9paQEHIbeeQ3bPpUo0PxrFqK6y/irTri8CMvmS2iHKtncv0OTx71tDAyg5JzS7anTTyhUnq4382ixe+HNK1TUbezdrK4OmZm+zmZUljLEL857jJUhT61meOPCghsZbjTdSntpWtZo0IOQ4Ck5PYYB4qvY+E/F+j31zqWnyWF59pjeNkZ25DEN7nOQMZ9Kuaj4o1KGS3h1zw/Fa20dq8IUIZiJCTg5445zg5rVYKvGUZU5cyR11MDW5eWOq7o8s8C/DG60vxHpF3e3AWC8szdYkQj5DgbQT35Bz0r1VdI0Ow1MaDbW5Elz+7ZYlYYLDlmyNvXvV7w5aaRNHFqU2vw3ojEcUUMqgfZLZWyynGCx4xk8dPSu30+xnvNSk+1T2sLjiG1jY+cIwSPmB6g84I9KnF4mU63N0XyPOw1D6tScZeZ4/b6PJZeKLzTTlTNEsinOflGCcAdc5PSup+E/hu4bw/eNcWqRrJcTz2ZOCuxmIHAPHIP5VL46sY9G8Vadq/Kx7vs8xIP3TgHt0AbNdz8OtHextbm3kUIEaUgcY2lyyqM98Hr716bvKnc8pS94zL7wjJrkEd1a6rJbzxJh0WMZD9cgHp3+oNcNa6bPZ+LpNNt7i4ldE85llhCZOcE8cHv78ivdprf7Pv3M6q8efmwfUk8dPzrLj0+0kV72OIFp8MrlcsFxxj6j+dQo2N41LHJa5pMyzSraabDsDIGCYU5CKOe2Bj61yvifwyuoWdje6tFGRZ7oZNpI7hkP5ZGP9kV6xqkQmup4YI0llLsdinhfQsR0rmLrw/5iyvqEnmXPltLCob5FZeSqg9flzyatQ1uy4yT3PGtU8P2+pXAkkQ28can52++2en0FcLJpSxBLqeZli80Kr9AoJP8q9N8VXy2cixtdW9tbDcrNMDuz7ep/wAK8y1rVLzxFHHp/kpDaQHhYlwJGz97nkcdq1hRlUloN0lXdoI5XUL28urp1gjjVS33lX7wrvfgv8D/ABN8UvFVn4X8M6aLi+u8uWkJWKGMfekkb+FB6+4ArX+FnwX8W/EvXoPDvhHQZtRvZPmIHyxxL3eRzwi+5/Cv1U+BfwD8L/ArwyNP0PR477V7mNDqGoSMvnTNxlFOMJGDkhR9Tk17mEwXJrI9XBZXChL2tbXsin8Af2ZfBHwF0/7Ro5hvNeuYVjvNSmXLdBujiGQETcD7njJNeuzmdlK/2lDGSOpjB/8AZqljiBO5bOMfj/8AWrzX4+ePr3wj4WGheH0gXxD4jY2VhuYKIlI/ezseyop6+pGK9TSMT1KUZ16sacd36HkPxG8Q3vxU+Ikml29muq+GvCLBFklmEFtdXwYE/KFbzNuAcdOFz1xV97/xRuONEgf/AHNSxn80FZfh3w1Doek2ml2/i67JgQbmjaAB5DyzYKHGWJPJNbA028P+r8TXpPukB/8AZK4pS5ndn3+GwyoU1BdBkd74i3bZPC+QerC/hb+eKUXd9ISJfBchXH/PW2bP5tT10nWhnb4muenQ2kLY/JRS/YdcX/mZCf8Ae09OPyNLc6LRKk3ksw83wDI+P+mFq35fPVfydImb998OLnj+L+zLdv1DVqNZeIOq+IID/vacD/7UFKttry/MurWhJP3WsWH8pKdyXFGYI/D6Dafh7d9O2lJ/Q1yvxC8B/DHx/oMui+Lvh1qbwEbo5rXSZEuLZz/HFIgJU+3IPcGu+8nxF91dQ04sf71m+P8A0ZSfZ/Em0f6dph9f9HkH/s9DXcyq04VoOnNJp9GfmV8ZvgT4h+E+p/2rp66pqnhkv+51C50qa2aEsT+7nDqAHx0YEqe2OlUtZ8RN4q+H/wDayWzNe6A8VpctNcgHbIH2NFGAPkyTnqc9a/Tu8stXvLaWzvv7Eura4UxzQTwSPHIh4KspJBHtXyl8X/2RNSsW1fxD8JdJ0jy9RtGt7zQFkkIyTuEtqZPuupAIQtjPT0rzcXglVtOG6Z+cZ1wfOg5YnAar+XqvQ+KI/Nky03zM/wAzFuSxPU571PcxrG0EJYL5jZVlGQB0zjvWrNot9o11caZq1rPZ3tuSj21xC0civnlWDAbT9abLplrMg8udonT5lDqcdegYcVlfU+B+q1FrKLMqFZo7yazuWjVo3Iz3yDggVUZooWfy9yk/Ln2PUVqXFncLqb38du7xPIXD7cjk8/rVO8t/LmFw2DukJHHX8KaepjKPKza8aX13qmrSTXVwHYxwR7SfmAWMAde2BWDuNu0c0YKSDmNl7Vq+Jdq65Io6mGMbh/uiqSeUqRzNHsB+Vz1X2xQtCJv3tRkMalonmmU7nLe4pLtQzHkKF7Y55PGafCyyXkTTRhdp5EY/hz2phaKaSfzCY967lGOp6UXExLn5Vi2ybDjG7nPNNSJbe63TXAlHDEBuuf608zRGFYJl3KE+XbwRVURtuEWOnPIppXGtjrdL1zwzp+i3Md5Y3j3d222NsL5aqoBXnqDywOOCMYwRWWrQSXjXUVoqQXGFEbEkIfUevrg1TvY4o7OKHyZBcKwZmPRfYetEbSMY13sY14XPqetZqkk3JdR7pRJdRt/s+oTKVQhWYLtOV6dR7HrUUa4m3djg1uNoFxLMtq2WlMe+Pngr0/TNWvEnhO60G6tk4xc/KoI/iFVGaWjNpUZbnOTx5A8skMOh9fb3p0cLy2u4KM7s89hXU6X4ZbVJra3uGW386cq0zLnGSMcD34rs7DwjpsbRQ6nbJAjWbMrswVSVYht3v0PpUTrJOxUcNKWp49HDKm9WXG35qgVm9CBnn3zXY6pY+HWvJ4bPUZYo1XbG0kLFHI9WXoPwqq/hUxWkdzDJHcrJGzK1vJ5g3DqDjoR6Vpz2WpjKGtkYaj5tq/Odnc/eX0HvUM+5mEjBsHgrnke9X4bWSNnk3f6tRw3YE9PakvLcKYZlyoIwDgc0ubUjlkUGRFUM2do4we1WrSWNV+zrzklowBz05o+zyNbyQM2SAGjxWx4R0WS48UWCSW2I/M+YOOoKmq+LQcY3Oh8AeAtD8YG9fVNem0p7JUziNGjdDkZyzA57V103wD8PW90LeLx1cSSJ8xjh00ylQcYyVfHvSeF45vC/izUfsqoklzZeZBJPZsTuJGCi/wAI+9y3GBXtvhXwu0UJtdkllBEoQeWcGfPzF+Prj8B0+YV20qcOT3lqc8nLmstjvPg3/wAEx/DXxl+HeneONJ+N0KyXEj29zDJouDFOjYMZPmgnsRkAnNO+J3/BKLUPh74WufFdv8XtOuRaMkckbaXIp/eOEGMOf73Oe2a+m/2J47qHw94iS4ms5I9Jv7dyLtQFcT58x1xyoAC4JHBBHrn2H9ocWw+FWsiG3tAyzWh/dTlnH79Pv/3/AKc4qHTinZbFQm3Llkj8NPi98JNQ+EWv2ui3Gr2981zatdw3EEbKCm4oVKt0OR9MEVwDTLNHv8lFCnGAPu+w/Gvpf9sa1vP+E00G6tFlJXSJFIC5H+vbg9+/avne6l0++mkmks/JmYbmjQ7MyD0HQDvXLUtGbijSSaZVL4UWpZSnBYbunHWoWs5TJ5isssR4+U457VMrQojzNbhwcRtu4P8AvVHND5LK8ed7DO8cY7fyqUxDfszSRtG0ZBiIVucjP9K1/DtrC2qQS3DI8Z4dWX8DmsqS1kUK6yEiRg3AOGHrj69q6rRdGkmtZLzy2O0F1x04Ip8zWw9j9Qv+CR95DDoXxD0RHyRPp10PxWZGx6/dX868m/4KwaLBZ/ELT9XEZMs+yNT7GLJ/UV1f/BJjUNQj8eeMLG6QIl7oUVwV/uyRXAUj8pM0n/BXbS2j1LwjqjYETy7Wb6xyD/2WtYHTBWmeZadOLnwrZagpG17GKUHpwYwetcF40+IF18K/hbZaH4f1uOLW/F1jc2N5BG2ZbfTZcGZnP8BmLeWvcqsp9DXQ/C2+XUPg7o8mftUsOmvCwhJJdo9y4HvxgV83+JNI8ba5rN1ruu+HNWia6fdtaxl+RANqIPl4VVAUfTNbQtGIpJzaZjx600LOY2bLZ3dvbt+NbNj4kvJ4X2yXD5KR7vNPPPH8v0rJXQ72Ft02l3yZHHmW7KPyIrSVPsun58vdcPIQkajb27+mPWuepTjN+8jop1Zx2Z21j44v1T7JYzTxKq8rGoLTyAZwMLkk4P8AKrvh3xX4kuL6VtXgdWkSRorReGAIPLnGCw44xxXm+n6hf6fqAv4TM13DhlkQlRCcfwemBxnrXa2PxO1D7SJZjqEUa25j8uGY4EwJIk+Yd+FY9SBnrWf1Om12OmOLakubU6rWte1rVbaZ21KU71UyqyKemBxxnJwKo6frGoGGeGHUzB5sbPuaJUPy4BAJHAArMsPG15DqC61dTXrK0Iiutsmx3UZI259DjaT0wBWHrfiS61poI1vZGSL7xurlpF5XBPPA7DjsorCeFTWrPSpYpbKOh099NeXES3RuoJCI1Y+ZdIxPPTA5GP8ACtvw5eeXfLFI1uZTbv5ZDhjvGMD5fUevpXmP2ePduS8tJFRcKEYFuvX/AA9a2NLZrZkmEyI0TBgyuM564z6VEaXKXKfPex97/s8rJ4t/Yu+OXhWchruFLq7eMOXIJtVZDz6+QCK+D/2pLWbVNM8C65BGJPO02WJ2yOSPLYDH4mvuX/gnhdW2vaZ8Y/CcEqyprOg28xj3ZIfZcxMMf8DX9K+JP2gLV7v4R+DbhY3eSxv5rVgoyR8rD+aCvYo6U2j5zEL94/U+e/7LmLBjbXKsvOFiyM/WtmPwb43X7NcL4YvwkrrJDIkRZSBhgwI4xyOa5+aG8RduyddvPIYV7n8J/iZNoNta6DrTM+nSoDC2Tuts9vdM5OO3OK48TUr0abnRjzNdDCybsbvhfWLm9v7CO4gaO5kYb4XRlMblW+ViTwev1rqtRs9a86a4/se7Frp1vBE0yoShARRlG/iGT29/Q10Ufijw3fWsUa3iQcnDSKVDlcA8sOPvDr61tXGt/wBn+FxdaTI9/tjHlxRsqiQs3GDjnrmrynNMRjqzp1KdrIivSjSinscXo91JMw82F/ZtpI5969Q8CzCS2ljjYFXwVxz6iuL0nxZrV5OkOq6K9jaNF8zNLsZJcZwc43g8gFRnOK6Dwd4u8LTa+dF03WrSaeWMuIo3J5BycN0J7kZz36V9DKjLl5rHJza2PI/2hlh/svSrrR5oWlgvZYZfsrKG5TPzbeeCp6968U8Kavq0firT7a4v7wwSzGN42lYqQQcZBPrXunjQWFxrGt2NnpckN3aarLbSSW7YZMqzpIeuVbIzkV494E8WatqniWLS9TvPOjkikYAxoDvXB6gfWvHrU3Kqmup7FOajR3Z774dh0u4s1FxaxyOZMbizZPA9+a3JPDOl3ELRRxyQE42tG3I+m7I/SuIs4o0UL8y45G3b19jitiBJGU7bqUdcZYcfTFdri7awOJSs9Js+TY1t/wCz0h8xVuHVj8wG0ru/PcB0r6i+AHizw98MPgvDqurXRSPxB4lvFhbb/rBb28Kn8B5p/OrfwH/4Jx/ET46adqusWfjTw9pFtpUkKy/amlJcyqWAUqhAwAM59RT/ANoj9lHxp+zL/wAIt4Ys/ii+rHWftEsdvp98zW9uQygsUKLs3kjnnJU+leRiMPeDhJ2OuliItr3U0N0X4qeD9Wj8Q6fqt9f2UGr6lFPFcWloLh1SNcN5iFlyjA7RzkEk19ff8Ev/AIceF/FHw58UeJ9WtJbhf+EhuY7aFv3cQjZcbtq852kDrx2r8zdN1D4oX2sSafpI1rWpbV2SZbXTUutiofmLYRsKO5OOK/Xv/glzp5t/2X4dRZVB1LW72cYUDgbF7e4NZYXCQpU5PfY3xeKnW0en9I+rdE0DRfDenx6XoOl21haRAKsUEYUcAAZx1OAOT6VoUUVsede4U0opdZO6ggfjj/CnUUAFFVl1CykmeCG4SaWKQRypEd7RseRvAzt/GrNAHxv+24xm1zTIg33IzwTwfk/TrX1jotu1p4V0+0t28torCGJD12kRgD8q+Qf2xJZbn4gWOnjJMhCrzwcrEuD+J/WvstlktdNCxxlmhiGEXqcDoK8zL/4laX95ntZlphcOl2/yKUXnMJpJ7h2CSiPGeCd4Gcfh+teefGKdF+G95PJGFi865kcDA4WOTn65Ga7W7t7y4vMQRzRyK0cm/blGQz5ZevX5fyNee/tItPpvwl1WZsp5VtfzFgM7cQyEfpW2Zu2Eqehhl0V9ap+p+T/wC0C31r4c+Ior64uDb3WtBmS3T94xSMMCxHIXn0I+lesaT8H7OZdLu5PCFzdTiQTW82qXDMoZmL7gMgqBwc47Csn9lO48M2fwhu28RWV4kd1rEzJcfakt4mwqAop2szt0JA6V7LrHizRbrw/BD4XvC14ksdvHKu+SUoRwpyCCemMDI715+JrTptQgt/uPYoUIyblU6bHlviTUv+EX1SfQZLFFe02ySpZ2qxRfNyF4AZjzySKZ4ZuNKnjlm1DSZ7qTzP3az3HkRKvdmIwSvQcEVW8a6hdadfXv9uzMZbeUwzFp4138L1LNnuOvpXJ3nxC8EtfTWreJ9OQJCscby3DTNxngBAcgew7963pw5qaT38iJVOWpeOx6XbePNWtUgjtdSS1UP5Z8sbhtU8KMg5AHGTXrv7F/iLSPB3wy0zxNrXihdF+x6e14vmtn7ahneSW3CfxsyjAxyDgivN0/aI/ZT0rwrFZ+HfCF7reox6e9v9qt9NAX7Q0ZHmGSd92AxzwvbpXa/ATQxpvgDwhpOoRmby7W1jnVX2Fw23cAR93IJ5HNfOZnjVl1XD1o0t5210vdNX69z2cFQ/tCnXoSn9nprbVP9DrvFP7SX7Oug+G9d0/Sdc1PWvEN3oFjpcVra2rMIbm2t544i+ORh7lieO1ZvhP9oW8vPGXibxpo/wADNb1/+37TQ9JtBqUfkRxRWyHLEMpLgy5kwBnCjqa9r8beG/CXwihuLfRfA+isdRh8Sav501sHkjFvYGRPmbJILYHJPWtPQvEHiCx8O/A+6s5IIF8SppVrqESxrjC6XdTMBxkchPyr79XcfM+ETin7quvM+MP2oP2mf2jrLRtV+HeteHtJ0rSrmOPalvC6SywLKXRyHAZQ5XP4e5rA/Yvk8Qa14b8VeINemmzd30MNurKQFVIixC5/66D867D9q7XG1T4rX9rqel6vd3Gm29vpbXMlqGW5MO5TPuUBdrklhx0r1u3NvFCEt7dV2oN2xAo6D0r8x46zDkpfVHG7lpfslZ/ifovB+D/5iE7JdPX/ACPkX49+E9e8ffGXXv7Bshctptnp6yKGVNo+zJj7xGcnNeO+Of2d/ixrUNqml6RE32NzIT9oUbt+ANpB7Y68e1fQ3iXxB4X0/wCJfxFsfE2tDT2vrmygjYxswKxwITkAEYyQCD1BNYV14m+GentJ9p+I1kB91ElhOFbBLFQAOM4IAyBjFfXcOYDDPBUakn73Kuvl2Pnc5xNf2tSmqd437P8APY8Kh+DX7UFla20lrNMgsrKO1hiSUZjiRyVixtIzkkk9xjJNec+OvDvjDwbbp4d8ewzf2iiiSATTFjDAS7AKD0DMWOPr619naT8QvhrYyi9i8faYy+SY1JL9GIIJJyOu49O/tXy9+1J4i0/xL8QptQ0jUoNQthZ28aTQNuVsRnIz6gmvovq9OnrHc+bqc32qdvPX9TN8VW3xY07T7PT7m61mO11DTbR4IWdvJa1jUeSFAGAFycfU1w82m+MzNJNfRzp5rf66XIG/rwezYFe7/F3UtX1y78MW/hS9S7gsvDOn280kM4CCYISyHnqOARXHHwv4w1QKt/qFogOMKZDIR27CuB04UpNRSNOW/SxwFh4Qm1SH7Rd6oyy/d+ZN3A6ck+lfpF/wRy8Mro/ir4nXf2z7Qx0/TIvu4wDJOf8A2Wvi/TfhXqUihZNUuDzkiC1b+ZIr0HwLZ+NvhnHqDeDvGnifRP7TRFvvsupCzW5WPcU37eSBubGT/EauNVRGqasfT/xUttWm+KHim6sdO0q3gn1W7Zv3JlF0DK332AG0Hrxu5rjIf+E13GG38H6Jb2PnFJLUsGS4QdJWbaCCMcLtPU5rlLxvE0Vul8vjzxQZY1EpQ6iSjHj7wxyOT39KseKvEXiS38F+dBrl6s6Qqwk85t3BBzkVbzD2atYzjgFVlbmN+/bxpfaXHYyeD7CK0lcs1jBIENu+GCyrKBy/QH5Nu1iCDznKs9L+JOm7YYbdJFgVvJMZ+UbhyAJEYgYVARnb0wAOB4XefFLx4rNCPFF/tBwB57c/Xmul0LxT4o1Cwt9WvPEertIynIXUJQnBP8IOKmrmqpxvKJ7+J4QlhIKo6v4HqNloHxAN4l9qGm2srwhY7Xz5GaO3VehCgANjClUARQeoJANabf8ACymUSDQ9JjvmxnUFjDXB6ZOOBu65OccdK+UNU/aE+J2m3TbJ4UjEh+V5JHJA4yWZzjt2q5p37QmuSW6NeXWpPcfem/04qoOc8Ac7a0+vzt8J8/LAU1LSR9TWem+N7qFmv7DSNIuS3zta27TfaP8AfzjCk5yBk+9cD8WNek8Lx6Vpd14T0K+kmFzM7Z2fZwDGPkQ8nd3IH8NeU3Xx18V3HyWt1Ols68RzTyuOeo4I4rD0fVF8TeMEm1a1WQvbyR7baFg5/dyFcZyeGwTnsDXNUxvtfctuduAy++Igujdj2Tw3ZWOp3mkaivhfT7SKRYwIbb+MOw3K5PJJ9fc16X4o+HOraPrWp/DvxUy2lxaMWSK3kCxDB3xW7EfMchTtxgHI9a5Tw/eNZvb3Ftbbmt9Nt3G1v3rSxRooUDgD7uP97Gc19iftMfDHwzrtiniLT9N1ezuLi1S6vmtcNEP41lSRjsWQTNtZeN4zwBg15VbWyve7t6Ho0Yctf2SVtT4B0GztY5riWa02u0m5mbhix5IPfFbfiDV4tLtkkFqxRjj5GAIqP4maLa+F/ibfeGYLsulqqyNIB/rWMMZZ8dgWYnGTjNeQeJvGWpapqEuhXEMjywSjasSH59vTA7+tVioOpXlS7Hr5tXdLFSoSlpG2nyPQdJ8UyX1xNHcqIo/+WUe4bsepxVqTUI93lqzMx6YP515K2pXW1Li+aRPVV4w3TnvkYxirreNH3fKuVA+8f6VyvDNHApqbueiXOqwxLIoRGCDLu3OG9BjHNV9J8QT3Nwkc9yXQZwG5H5dq82k8STyqwVmYP2/yaoTeINSs1eS1IRo0+/1B9cYFEKEovTQ29ty6x3PZmfT9N1mG+Nuk0TxOJEQAB96kbSDx1x+IFd2tzcHxB4euzocNx9qkGb5oeYkI+UAj7rdevrXl3wZ1C88TTadcXkxaR7iaPIHOFXpXtOmx6fY69ZWMmq+YS7eQGmDljnnByeF+6R1BXmtcdpKne7dvzZ3YyaUacpatxu395B8Q/B8PiDw/LbLGPPjkLQgdQ3p75FVfhXqk10s9hcWr+fZYhuiygrG4QAcjqTtzx616rNYWtwV86MNsO7gdxVR9HtLPVGvLWFUjuAkZWMAYYIQWPHJ4ruiuWPKfKOXvXOX8Q3EKpBa3Em1bmTy5CeMKAdygd8jgDvn2p620t8RCym3UkfuwcOVPAyR938Oa6S4s7eZssol2sCCwH3h3+vX86g2p58OeG8wZqfIpSsY32KO3AgghCpGen49ff61ia3bwwyQXskeVikGeOgPDdf8AZzXRsy+YzSZUf3vesjXvKksz827BDD0NUkKVQ+b/ABr4L8Sa34ons109jFZO8duDIo3gE/vDzxkdPapPC/wzkbXtJsPEt5Do9hd3kNvcXsrb1t0dwu4heT14x3Ir2LUrf/SFvh87XMUbnjowGxvrkrn8a5fxPb313daWtvA3lx30TzNuwFRW3Zx9QorSONqUHZJWPRwmPlSaUYo+xfhDrn7J/wAC9NudF8P/ABKsoZb+RftdzqFxIsk8iZAydoUAZOAPXvXqv/C7PgjFb/a5PifokcPJ3yajsXjr94+xr809RuJJHuoZoYb25jupGKJtDQW5f5WOeD0BPT2ri/GfiSLV7m4uppmTS7IZYHgTOvcjuAenqa0o55iZ1PZqC9dT6KjiXi2tH567fgfqhf8A7S37O+l2U2oXXxb0MwQJvbyr5pGI/wBlVyWP0r5Pf45fDb4rfFTWvHWveKdAXR9LjFjoFvfX0e0xsWLS7JDktg85HBdvQV+d/ijxdqHiK6aPzGhslP7qEHGR6tjqfasRm3gKygkd8V6jxdafxWPNlxNSwOIvhY8yXVv8tD9VY/iB8EpGATxD4IJ6DbdWoP8AOrC+IPg7N+8W88Jyb/4luYefyNfks+FcnaMg10/hfxhNo8ctnPbxz285TmTO6Ag9VI45HBBB7VnLEVI6pHq4Xjr2tRRrUkl3ufqKNX+ELK2Lzw0uMZC6hGv8np0eofCvdmG70gEcqY9YAP6SV+bus/ZLmy/tCGEOkqZYKo+Yf4iuTjhjlO6RM7j95R0GOlZrGz7HXmHF1TBVFH2Saeqd/wDgH6qLcfDeb/ValFnr8mtP/SWp44/A7Z+z6xMPZdalJ/8ARtfk/wD6Pbh5UkB2MVTDfMfwq1Dck5mUkMV2sr5A49Kp4uXY4lx5f/lz/wCTf8A/VoWfhZ8NHrGoYH93XJuf/IlJ/ZOktjyda14ZP8OsTn+bGvyXvGvoLs7bqZTtBwsjDAxxjmrFtr2uQ7fL1jUEB44upB/7NVrEy7B/r4np7D/yb/gH6wjSLVl+TxF4iAPpqkh/nT00hVbdD4o8RIR635OPzWvyxg8XeKoIy0PibVlY8nF/KPp/FV+H4lfES3XdD4w1VyV+SNruRunLdW7UfWpdIlx46pc3v02vmffPxc/Z70j4mWM+pW+s3cXicbWh1G8bzhKEUhYZQoHyf7Qyw9xxXxF4v8L6z4H1w+HPGWljTtWXc32cN95AeJFdeGVuoPtXOw/Ev4gXFwG/4SLVHaYYjVb2VfmAwCPm9eaxv7d8Qa1rFrda9qmoag8SMiyXdw8pVeSQCxOBnsO9YTl7XWUbM8jN+IcLjLVMLFqfXs/VHSIuyOH7DKzAyN5yP2BxjpwehrC1WIyXA+zsHXzBxu6c4BrZ0+6W3kaYRs6qwbKjOBzzUFzp8K6naTLOZbe/uFaN9uO+en4VilqeHmcYuUZxVroyNb82XXrpjkbX2gnpgACqNwxCpGmQEbHrV3UW83Xb9gflNzIOnof/AK1VJLiNZvsssKkMQy1Z401qNhZo7jcckr0+npVnyPtEiIMszKcAc89cVW+0KZiuGAB4wOtWVvlVvJhjMZIzk+vQ1MrkPUjuo0t5IXCjcqfvATn/APVXSfC/w3pfjb4i+GfCmpTTwWmsatbWU0kON6xySBW2578nFcteNJJdSKzfKVBrqPhPcLY/EvwfeLIEFvr2nuXPGP8ASErSC2uHQ/QzSf2NPgTLb6bFd+HJrk2+orDclr6dllhk3IN2GGCjMhJHUA1x2i/Ab4J69qmo6hovw8ttNtLbVDpH2Ke4llZZopNpZSW+YOVbj6V9ZS6PPp/29rWOKQJdySohJwyMUYAj32HivKfCukyWOq+OtHssCA+LtSyBg+RjynUqMHaSrYDDpg9K7JJbI5YSbTufLH7SXw+8F+AfGXhTVvDOixWI1MutxaQOzQEK/DorE44wCM44HHWsTXvD9hfNEl3AruP9U2wttckYbOOPx969n/bO0WOy8P8Ah7U441aWyaWRJY8fJtuIyc+2GrjtDhXUtJgvpFiY3UYPyMGGMevqK8nExftLo93CSXsVzHlkvhl7fXtKt7M3M1nFcG382ZlXEv3zjA4yex69Ko/GCSGBo/DsMzC4kjE12QNvloTlVGOxPJ+gr1SPSrO48TQsITMYJJLs4XzNs2dhz2XgcEHqOleF/G7UJG+IWpKtu6GOGGLnGOEBzx65pUYc07yHXnyQtHqefXFjBGxEdw425ySa0dFe4s0a7tyZNgBdVbHmD+79cdD+FYckrSE+YpJJ6nitbw1/x9SRsc/ux+HNdk43R563PRNSXT7rTbW80/TBc2k8a7/Ljy2wj5WIAycHrXLatDGuki4jWOSJZgCwXBVSOQQeR7Vt+DdUW3tL3TfmY2UxaPA4WN/mHPQYO6uW8QarJNeTx+chikkLmKHv6Fj68Y+lYKnqdPtfdOi8M6J4IksY7rXru5tpru5dIVjYBI4gMg4PJOf5itzwrJ4Zm1lfsN5cSPAyqoI4Y5IJyR7gV5hHHMqwSPIrjPCMfU9eeo45xWkviNYryxmhhjCWNx50nkjaZSGBIJ7jjjNPkvJMlVVFNWPoOHRxPDcyWuk6sLu5QR7hdRusp4I85ifkxxlfTH0rtvCviC43M107zxSFUC8B4JBlTHt/Dn8OpJx4LB8SfAjK8rWfiG2AUFoofKeJyAPvKSN/Qn5s8n6Vp6X8Ufh/uF7H4o8UW08vLyTWKyBhjABw56YHPU4FewqlKS3PNUKkelz9Av2Q/GWvR+N7/Qbdpks9dghaSOOBZpLVIiJFlx16Fw2c4yBg8E/UH7Q80cnwj1fbfJMvm2mxfs2xQftCf6s/3vXk/hX53fsf/Hr4J+DfiQdc8WfGq60O3Fm/mSXWn3A8+TACoWRDsAJLbTlCV5BzX1R8cP2xP2adX+E2pWdn+0L4f1e/nmtCtvHuEkqrOhJEQTK4AJJA6DmsJ8smuUulCoqnNJaHwP8AtfaJc3+saHq9mzK9rp8qHBxkGXt7818uXVti4O5j5hfvX1b8VPiN4E8e65o9v4X8Q2mpqbOUt5atjIcHb8wHOOcV4N488LXkcy3lnCkUceTt7sc+npXm1pP2tj1OSM6d1ucVKrMp3xjacb2UHOc4yfpxWna6PI3hw6jtZ0jkMbY7DGQfbFV7e4eSEwsgxjBwvznp6df/AK9dHZNp0nhnXLFmaOdNkkEO3h1wysw9cE85x1qW3exglG9mZ+k2t6tidetGh8rTpEysih8O5ODtIwRkc56cV3vgy0vNWWO0t9QL2cyySX0MdvGZEURli0OehDAZXuOaofAfUtH26xpOvRxva3VuIZYSPv4YnA5+p/Cuk0jwMNH8Tw32n3Mj6Q8qxrM0oJCuNhjbaeW+YgEcevQ1Mbudux0UHCKkpK+h9mf8E6dS0m1+NjQaXdPKt/o15bt/xL0gLMvkSksV/L03AjtXsf8AwUQsXbT/AA/qUNzBA0Ktvklg84BFYk/Lkf3jzntXz1+xWvhvQf2rNFtbK8upb2KG60uSP7NIIY3+zEufMJ2kswDYP97ivqn/AIKBaRPefDvSr6xjU3dvdNs3fxDKEp+IBrsSML++fnrafEGDSdPRZNUscTxLeIsml3ELiJnCg+WrHq3t056c1buPilcxsbOHUtBnmMjRRx+ZOm51UNt3YIXhlwScHPFee3Xh/wAOrpN5qFz4otQbS8SzkjMcyw20gLn7OYkYkbtw5X0bbgEAUrmx0dnMkXxAsPtkFu19cSTrPtjjYBhKq7QBtVwdp67snmrTYzrLz9oDxNY2sd9P4LsZbGSEzC4XUTsKAgZHyHnJ6detc/H+1np7SINQ+HrlZD8rRXSvu7fxIP51h/FDQrvR/CGl28V7LNGb5442aQsZRLGv3icZGVc/Qj0rya5tZYbq3k5NrM7xxE9Cy8NyO+c1hOq4vU66GGVdxSdrs+jNH+NHgS81S71CPw9HaSaiIt8czohZ0XbnOMHjA49K7KDx14dmYM3h1gCM8BMH9K+S9WtdP/syVluw8gXd5e3oareFfHWv+EbgNC/nWUhBktpmyDj+6T90/SopzlUjc3zLDwwVRQWzR9ijxV4VuMLL4dYjP9xac2t+B2j2zaOqlepMCdK8u0PxBo/irT1vLRRJby4DI3O1u6t3BFb0cEcapbWa2yhV2hT2A6Ue0kuhx8qa3HaPoXgfS/FetaoVlkstYYTrDNEGjhYdQgxlQdx/Kustr34b26bZLfTwF+YmS24X3JI4rkLt7HS7Zr7UtUjggiUs74Cgfj1rwn4lfFKPXidH8NZisP8AlrOR882OwzyF/nWtOcn0M6lktz9Nf+Cf/jf4d6l8ZNX0TwtrmlXNxe6FOssFsoViI5oj0wMgZP518W/ED4reE/BvifxL8PdZe7Mmi63qFq0J08FUdbh8Or7s5A46e9bP/BLHXl0n9rrwzbySbU1Ox1Gy+pNs7j9YxXmf7c2iN4a/a4+KOnquxJdelu1GONsyrJ/7NXXTlfmML3Qn/C5Ph+6+TJbsRuL+Z9mfOT7c+v61n658SPhvq+n3EfkmO4diYZBbMDj3wOK8fW6UgiSJWHqBXR+F/BOseNC8fhzSzdNH95fMjUjGOPmIz17VcYOfwmTny7npPgfV01+zdbOOPVLmGMAQyu3mHGR93IAwNnOOiiu+hurO3026TXLG402z3RqrfZXJDNywAOeDtXkAYIB615lpn7Pfxc02aPVdMsYrW6iIKNBqCJKvvwfzFb1x4N/aPt9scl1e3AZuPKngmx2GQR/SuGlleIo4hVYT0v8AP/I1njI1Kfs5K50UK+C7r7Ex167kvbdwFaG1ZW2qMhRuPUHkE5PHHOK0tOk0jUtYgv7XStSu5ZNRVILm7U2ghbeGU7lBZ+TJwSD95T1Fca3gL9oC4hFxa+KWDEfNGJ1tnVuQVIMa5/A4rm7q1+NHg7XrLX9csda1NtMmE0f2h5Lq3fGR1QkYIJGeDzX0PtZRjbd+Zw2jNnq/jyxuG+JOuKPMETrbTK64VizxjOfXoeteI6T4saHxdFpsujaQhF01uZktgsq4yvBB68c17v4F/aB8GeLL6DS/E3h+60rU5MRqVX7TGx+uN4/EH616TJofwwlm8640/RfMfLh5LGEMWJzuyUznnrmuCpSi7N6HbCvJLlPGLW6m2D5o8jp+7PX860YLm72jZIuR0+Ujj6Zr1yPQfh60rbbfSCNoIAVAPfpio4/D/ghtkYg0jf8AMj5fbhhwOrdatyo7a/e/8xe0qf0l/kcXa/DW50NrOzm+LHjRtRa4juZJLXVhbR28gUhJ/KzgY5Ve/OBXTX+tfEabxbpei/FLxvH4suJkNn4dvtSiVZVijVpXhlbATcuCQXJ3ZwM9K8+uvh78QI9UureH4xXn2iyeNJG2TblDD5cfvcnqenoeK474kaX4y0XxL4f8P618TP8AhIrgNJqiW5MubZUQsrv5h4LAHA6159SrKcXdHbGjytRU/wAH/kdJ4++LGpeItHg8M+Gb/VNN028kmmcRRiztriNA6v8Au4yof5wcgj619x/sOeLvipY/s3+GfDvgPw7DJATPcNeNDu5klY/echABjrg18w+B/wBnfRW/Zp1n4zXvxQsF1Wy8K6hqy+GrUo80Y3mEGU5+UZcHHByVr6g/ZH8X6tpP7NfhSxt/DsV5aQ2KpPNPMixq8kx8vAH7w4LfMAcHIrycXXcaHvScFfpu7JmOZOnhZS5ZJpb26eXqemeJbP4qa5eafZa941aGS91ODT0t477DHe4VpESPCsq5659K+ldKtNM8K6LZ6O2onybOERLLdzgu+P4mY9STXyF+0VrGu+EfDOk6h9stPtcF9HcW9xHA0bReXIPlD7t2w91GBwK8F139rb41vcFrHxktirdTZ6dbRNj2byy345rzcJmGHwjlGcpN3669Dwo5vh7PfQ/TObxZo8bMlu9zeuv8Nnayz/mUUqPxNZl54+W1hNx/YNzFHkDzb27tbVCDzn55d3T/AGa/MDVv2hfGWuReX4i8XeJdRD8bJtVkVBnrkA4x+FcL4i8dG6ieO1khK4ON1wWH6/h+VdrzenL+GvvJeb038CP00+GXjzwmfir4k8M6RqB1C41NW8QX1zbyK9lZHKx+SZuN5O5cALj73Neha58XvhX4Zk8nXviJ4dspenkyajF5n/fAbd+lflz4B+N3jRvh2vg3T9Q04Wvh9/MtVjs7diY5GPmCXKfvTuw25gT+Vch4k+OHxQtrvzV1e0tYIfmIt9Pt4y4zna2I+h6HFethVKvBSfU9ag1WpqaPr34/61Y+NfjB4cvdBvEu7C8uLdoJE6SqZo03DOOPlOK+1b6+1K31WztbfT0ls5YppLq4MmDCV2CMBf4txZvptr4B0i+/4SL4kfC2fasa6gumTGMtuwJZxIVz7dOlfeuvXH2CRb6a8aOLYtv5W3IaSSVArfUYI/4Ea8vKnzRqTfWTPoc3hy+xopXtH/Io2+p+Kl16U3yWA0qaOBII0Leckh8zexPRgR5eB9a8R/av8U36fCfxJHcSoRb+H72UhVADSGMjI78DPT1r3O5nhvktZoZV2vIjJjqwVCSRXzp+2VMtr8DvEsfmxRkaHPGobALfuYgeCefvehxmtc1TeFfL3X5oxyuUPrCcorZ/kz8gNP8AiN408M6XHo2j3EFvbpI7IWt1dgWOWwzZ61i6l8VPiRMssP8AwmGpwRM+4rFOYgT64XHpVe9Ma52yMduflY8Vg39u/mKrbiTjI3ZpxtL4iqrcdYsoX2papfTPJqGpTzs/LMzk5Pue9aXhOOGW8kmkba8NtK6szd9uO/1rMktyrFfLwf5V1vw309Li61dp4ldIdMkx8mcEsBkV06W0OG0nL3mei/DnSbzTvDkEF3ahDJmQtuGGB6c/TFfot8MYm+0eGdMDLGXmskJkbYoA2FiSeAMDPNfDE0MGn6HbLIuEijBbPH3V/wDrV3+uft7aLZWyWem/DmzujHCkR+23pIwqgfdRe+O56dq+Uz/LsTj6tCVGHMoSu9UtrH0GTZhRwEaqqSs5Rsj9HPjRrXgTXbWabVPiN4ft5LXw7rtj5S3yOxe7tI4RjB67g2B3z9a4C7/aA/Z78P6l4K0vUvi1pi2Hg+7kuPP2ttVRpQtowoAz9+RwOOqntzX5N/GP9oO++L2pWGoXWgWOkxafA0EVvYMyI4Zt25x/EeAB6CvOZPEDSK6mzG3C+YNzYO3pnnmvrqVapOC5oWfa583UpU4StGV16H6I/Hz44fCXxH8SLM6F44bU7a+s9MtdPurqJxLehVEXnH5QMM6vzwOD0Fe0/wDCX+A7OaWz1Lx94etmhDK0a6lC7gj/AGVYkjPtX473WrR33kySWqN9lRY49wyFUEkDnqOT19a25PH3iaTTo7BdUms4lJbZbRpCmOeMIAOvrXy2d8MQzmpGpObja/TufR5XxBUy2k6MI3X4n1H4us7X4hfFjxjdafeRXVvc6xcpazLKyRNDGifODsJbOVx0rn/EHwZ02FoNY1e5soVtFKK0uoFI1BIPUw8mqXwJ163h8ON4gvpJPJs7S7mmZjljj7MvX1JBH41cuLu6uNZsPFHxM0kyaRqSBrAbyYLHJ+XenqRg5PrnnoPo8Fl9HC0YQtqla55cq9fG1JS5mo9tNX2XmUbbTvCB0228Oxa9oKpZgxxul4yl8kk7pDb4xlia8c+Jem2Oj+Kb3S2nJjhxsaFxKGJVT97Cgjn0FfT0moeFfOENza6FLaXLCIo00ACqBx8pOckt2HYc9K8A+MXw58QaH4lbULfw3fQaFfXMq6bOYmaKVUYK6o3fac5712xjy7I86rOnJWje/meuabomm6Pp0VuumwxzwfuHJbzclVT5gSBwd3THBB61w2seIPFEdndzWevTWk0Vw0aRwxxxqqCTA6LknHvXpOofLNOhz81zcED6TMn/ALJXlyxNqs97Z3EvlQpKWdkGWJ3EgVxSVqjGm3FHH6l4s8ZrI2/xRfOZMDL3DNjPJxk4HSqFpqmtalMgmvriYmTyyzsTnmtrxzoNvpcdpNZzSF5RKWLkHhFzx6dax/C+oW8moWVmLfMklxErNyckyDk9h1xV7oj3kz7P1OHy9MC8jESL+q1meOI7hfBW23ZUdokUMy5C8ZPFdBr0QW0kUf7K49t1QeONNsbrw/YadqF81lb3UttBNOpAMaswDEZ9s/hXJUi2j0sFBzrRXmvzPl66/wBYx75616D4aXb4XgZeMQu36tXBXS4ldc5VWK5HQ89fpXoWipt8J2/BJFs3Tnrn/GuPH+7Bep+j5xpRS8zxPVvCtizR/bLy1WbhtqTcewKmsNtBmaR1ilhcgk792CB/hXU+PPDHhm1mXVNS1S6jnkIfBtgg44C9M4pdK8Px/ZZGhvpLjK7l/cjP0rejUlUp80Xf5H51iIQpzaat8zn5L4xqrLv8tMKCJeM9OK9O+AfhePx58QLXRxcXMDSWty6yQybmULBISNuRkHofYnHNefvoU4kY3EUzEYwAg5Oa+hP2M9Jt5PjJG/lMgttLuWbdFxhkCHn/AIFW8aDUo37nbklSNbH0oPuj2H41aHJp3xO8XaZ4dt4lFjLaRwRxSkvLIkMbOpcjCgvkD0J5r7luLzRdY+HNpcareTx2l/DDdQ+fEYtziKMrGpwDxKoI67gT1Br4t/aE1SP/AIXV4t1CyiSXT7fXRJLdRz5DIluI2KxrgsdwCleQTknmvrjRfEGrWvw18HanqUyz2cvh200+40uFRIsd1LGFhuBIw5wIzkY4+bB5GfMxMFWlDl7/ADKwqk60brVv0f8Aw/qfn18aEWb4zeJroLyknk7R0AESDivAvFEX9jeOm1xB8sS25KKxy+5WU/kFyRXvHxkuobX4neM7u6kYLBeXDEj22ivnmWZtUu2vZLV5GjuJfP8AWNeOGPYbSOe1ddSLeOqS6bF5xd5nUa6P9EbHiJIb6aPUrNYorG6gMjSyNt3BeCwJ/wAnrXMfDi1/4Tr4hWHhW1keOFWmllm3A7o4lLfJ6lsD86l+KXia3bwna6PZ7kW7kBPzAxiNP4F78fLnPevJYmmhcTW11JE69HjYqR+I5ruw9KLXNI8fF4iSnywPZPi5p+keA9Uh/s+4kuvtjPvhkfa0RXHI74Oe/pUnwxTT/GMxt7y3Ty1RiY9xbJBGOeteJXMksjmSaZ5XPVnYsfzNev8A7P8AMP7SKliP3Tjj/eFGKpxUHJLUjDYipKoot6HtOh+FNHt7200PI06xZpZDMjbNvGSdzcDB7+9epW3gm1OuabJbabPHcae0t1JEo2MSzAMzL3OR0GAea5nSdMivNY0Fb63mNvP9pYbk+RwrAAp/e+Ycj1GK+h9O8JatZt4ivr7UrHU4re8Y211b+Z+6TJzE2/nJyhwehDelediXKVSjC7Wl3+P9M+rzKbo4enrb3F+JhRyMr+XJkOvr6Uk2xY428zawmHfqDkAGn30EjA/MQ4OQ3vVRnkaB8fKUK7lOOCDXUkfJOQSrsmO4YBG7/gXqKrybRdQjuGJHHsTU7SeZuZP4QD659apTTSLN8oBZY5GGenEbEU0ricim0izYyuCMEDP61ka08Qs2h4ye1RLqk0W5pmjG8Z2/3enHvzmsXXtajjtTNcTDCH73ueKpR1IcjnX8Uaar/wBmfaB9ptL4Ws6n+AzRGSPn38p/yrntQ1h77V7vTY90UdlNbsJtpw+4gsv515rN4sHibT/FmtRwtDLLFDcWxQ/de1uA8ZPuYzKM/wC1W7qHiSf9/NqKCKOzkSSHymJ8+M4boe4x0rlxSVrLudOFnF8zl2NvV5n07UNXmt7GKC7d5oY1DDM/zEq/oPx9K8v8UeEfHPiaO28M+D/C+o6n5aefcm1hLAYztBPTnBPXnil1TXbvxNrjXlxM2yZzhSMYXJOMfjWbonxm8cfCX4lXPiDwfdIUjVLeaxuMvbXKKowHTI5B5BHI/E0YejVhzVKaV33OyWNq/UJzgrJ2jf8AM801CxvNLvJrHUbOa1uoPllhmjKPGw/hZSMg/Wq5P410fxI8c6x8TPHGq+PvEEcEV/rVx9omjgBEcZChQq5JOAFA5Nc3XsQ5nFOSsz527Ksw/ekdqt6LdWtjqltdX1qlzbJIPOicZDp0PHrjkfSqUmGZvrT4fvBevNPctO2p6lqAsYby4t9NtZ7fT7iBLq0WZNuFIw23k5XI4+tcbDJ5Eko8w+UueOwOaZo+pahd31na3F5JLEqGGNZGJCJ6D0HFS+UPOuyyuNj9McEVzOPKeviq/wBYwkP7rsVJU/0gt5O5T8x9Bnp+VPaRXkAaSQlBtOenHelVkRtyxscdEJ7fWnMvmbmw3mr859T7f/qppnkXImuI2yqMCp7nrj2pjYB+UHn7tRL++uCY0+YfdValgVt27r/StFoWmSXEZ2CNuNwB2jvWVJlboq3977vr7VsXW5QqyMTtwGGORisxo5RMzQxZUE4brmqgKorSLWmqk02fuhQx2rnitOwaO3vUQqGSb5MMOnGelUdD3w6hFNcLtTkE+lachs31rdLKuyUqU5xnI5NW0QnqdT4bg828MKquWkRRnpycVZ1vwZL4f8Sab5NxLcWJm8xGlPKt6AdxjFJ4SjV9XWHkjfGMf8CFdr4w0HUdNuobj5J7KSQN83LW78nC+i9q5p6WPocfFSp0peR4VqDNHqV0rZVnlcnPuxxTfJjaePzNuePwqz4muLeTWJ7i1Urlv1rPhuAqhtu4hvWrS0PAmtWTp5cJdvMKuWKjA6+49KZceZ9piZzyAct6+tLuV3MikfePy+1SrH5rSblYqq7l44FGxnsQyFfm2k7R3xWl4buEs/EWk3jHKxX1vJjHTbIp/pWbDh4+VOSTx6/jU43B1NtujkQBhn1HNWnZhufuNcXS/wBpDyUZluZflkVeMcZ6ewz9K5X4e6JJefEL4jyR28sUVt4mjut4CkxebZREj0OccjIyK+UdD/4KWw/2bZLqnwdll1O3t0F1Jb6yIoZpVXDMqmIlQx5wScE966/4sfth3H7OnxM146f4D/tpPGdjpOtfvNR+z+QTZr8nEbbxhuDx3rp509jCNKW3c6D9trRHh8Fw2t0pDSR3ixblGci3R+McDlM4rwLwiLePwrp2r2qCDdYxtsydjNtABx0696Txh+11qH7TmuaVpereE7Xw3p2mx3l0Y0vHuTK5iCBSdqYULu4AySRzwBXCeGvEmqWXhGz0ue2kEeg37WF46kkxoG+QuOww2Qf9muSvZu56tCEqdOMZHslhLDIsMxhWHfCVIyBhs5YYHQ5ya+XvjveSP8RNS82SRlhESQZIx5ewEYwPUtz9a+itNuIZLRJJIRJM7SQqoALOEbBxnjrXz1+0Unk+OIZmj8r7Rp0T+W3VdrOvb6VnRVmFeV4nnySx3jG3hj/elcsXYBc9+3pUnhuTy9SezjYlZV5P0weKwvNkU7lIya0PDc/2fVofmGW3Ln8DXScZ2en3X2fVNRtYbM3JuY4UaPblWxu3Z7Dg9++K5LUJYZLqX7LbiGJm4HUj2rrrOa4h8RbbZVPn2RVyeiAN1P8AKuc161ittS2RyEjeCD7d+frUsW5HNDJLbxSSXG4ldgX+5jt9Krwx+Wq8nDtxVi3uPs9/DJHH5ixsp8tjjd6rxzjrSTHzrq5W3UrG0hkjXrtHdagGwGRb3CMoGFYY98VmWcn+iIp7VqKsbM6/N5m0g1iQBo7cqQQQemKFqOLLa3TDeqseRgGq00jeYpyRnIpF696bMfmRuOGrRaDuaui6lNayQ+XM0TKyyRSDrG4PysPp39QTXuFjqlv4w8Ow3UsYjuEzDcL12SDhl/qPY14fY6Lrdzpp1Sz0u6mtI9/mTJESi7PvZPsOT9a7f4e6rNZzXLSzMtvcW0czNjI8xGK5yOmRgfgKynC5pCo4blbWdPh03VGW3RvLOHwOAD1IOf0FZM8Mq3W/TcFZVJZN27b68+9dh46ZdQjjvNPPmclyVOPYnHWuI0+6ltWnEUzRiVNuWPQdce9ZpFVGuhs+EbXUb6xubuz8hgjlGbdhwue49OcZrvvh3NrHh/xUnnRvHYTyCO4jkX5XyQRn0OcEfSuB0fVp7SIXGktLA8OYmlXjf35GMHI6in3HiPxbJanTL++/0aR84iK4LDgc9duD0FRFVJSfLsbUMTSpRcal7s+4P2db+9079oyyvIdVk+zQ+L7CKSyGNv8ApCxK07EcgfNtGeODX3b+2pBH/wAKdk1KaURJZXQkaQ9EXy3yx/IV+TnwZ+PXxGtfiL4Tk1Cz0ZrMazpyyzxWoG5FuEHLK3JAz1r9fv2tdOfUvgP4kWOOORoIfOCyJuViARhh3HPIrsTTsc1/eTPxhmuNe07RdJv1uNPgaeMS28lupdle2u8tLcBuGcCaQkD6Vv6zp8un6l4u07XPFVswbRlk+yNEga7uHtSrSqPvceRnaOOa851D45eMrW3jS68J+GmhmV9h+wfId/8ArMDd/ERz696oX37QXiG+uRfah4P8L3NwPlEstiWfbjAXcWzjGfzqtGU5I9x8YWdj4l8K2lxpt3FcrbTJ88JDhGER4OOARuGR2rwO+m/tbT5LWa3uJHtpAILuEKFc7gOSeDywz7HNaek/GjxBrUf/AAi2neHdF0e3lLXAGnwMpLqufu52ncBg57VzGn+ONU1SS38NR2NjaC5mWFZsNhGaQHJHPGeoHNcs6XNUvudlHFKFPlTszP1jfBC9vKWZ0fazx4KNzzz1x9Kw7lclVZ+D0yeleo+IPh3cabol7fLcQSBYHZY9ky4IALY3IOw4zjk9a8xvFluikMKEnb8qjkn3rSMPZnNisRUxM+ao7s1vCHifUvCuqfaLf95A5Bmt9xCyr/Q+hr3K38eeHbjS31aCdYUjUSbJeCvqp9T7Cvn6z0fUI2aaeCRY1U8+W2PWuqXTLpdHsJ4ljeG4tLkM+fTkD3Ix/OiSUiIOUUJ4q1jxf8RpitsFWwRyI4fMCbv9ps/pXON4J8TxsV/s0uenySof60/VNWvmWCzkigaOxQKnykHafm5IIz1x+ArNW7uFbc0fG3GNzcc9eDWiuiW+bU+gv2Io9d8H/tUfDTWL3TbmC3GvwWsr7eAs2YTkjt+8ruP+CpnhO80/9sHxHfWdjPJDqem6debkiJG4wBG5A9Urwn4H+JpdB+K3hHXnR1+w65Yzj94+AVuYznk9h/8AXr7B/wCCwmmto/x+8Ka8ofZqnhfY22Rly0VxIP4T2Ditact/QEj885rO8twGuLWaNc4y8ZGT+Ndd8ONQa3mvIGmCAhJF3NjkccZ+tY0moXGoLIsTSCNdzbHmZ1+XBzz360+HXbiFNqw2h2gfei56f/Xp063s5cxDp8+h2/iz4ifEDTdWWPR/FmrwW7WsbKsNw2wdQcY45xWZH8Xvimihj441jjpulz/MV0Pwp1qx0/StQvdZdLeD7WpDMPkUOh7+mVr1vRfBZ17wp4e1HSvDsOpRG3VZpocYk+UEdCCecjg1M8XJyYvYqMVY8Jj+N3xWj+VvHGoMuOAwjbH5rTo/jp8Vo2JXxhce+63hI/8AQK96t/gTrl1JBqF3o9qWluN0lnIBhU+YAY5BwpBwO4ryybwTYx2upS3B03m4nitH+Yk+TclXHGO3GOp/DFVHFN6XBUr9Dm/+F3fEZrhLiXWbWSZPuyyafbs6+4bZkVor8fvic0Xz6nYSAcHfp8Tc9u1X7fwfot1ItnOtki7/AJpfNJwPLbdgrzjfgjPGDXNfETw3B4XksV+y+RIz5ZTnDgHJIz95eQPxPXBq/bStuLkt0PS/h1421jx1oWvNrVxaLd2hjEHkRrCcOrZwB1OR+tbFzprMq+day7guNxyDU/h/wvosPhG21zTbG3t57xEMrRxqCzplc5H4HHrXT+PNa0Dw3pNhr2vTeRbzSrA8gTOC6Fv/AGWvPnL3rpHbCN42Z49qXxD+MDWg0my1C1vY4V8j7VY6essgCngeaEweg5qf4aeCfFeoXOr694o8feH/AAxa6hGftE/ijWI7eXUpHBA2rteZwpO4nAHABPQV5zq/jLVb7VbhtQhLQzytP9lgllFrAzHlVjLEBRyBkkgd6mj1Gy1K702x0fRLSxk2rDJOpDPdzsxO456AZACjsOetTKlWqx5VKzfzO9VsPTmpRTZ97eIvhvb/AA7/AGL/AB74g0rx14b1xtR8MafbtHpFzLII7ee/gYt+8UEKx7H5iewrD8A/tAfD74V/CbwPoOsanqP286LBcPb2tucK2SQSzEKSCeOuKofHL4ofDDSv2OZ/BPg+1t9O8ReIl0m11Wzkvry7nAt5RISHeJYFG5MkISPmwM4rkvEGvfDDx8ngbwf8MfhGfF3iGy0O30+/gsNHvx/pCopOZHkIkJJYlwFQY9OnNmOX/XKMY1Ht29Dmhh8s9pUjJTcXttu9ZX307HQeOv2kvDfxOgj02HWtctV8/wA1vt0n2pZODgCMYVTuOc5rn9D0vxL4guDZ+HrWfVrqRsLDa6GJ3APH3Rkj8q+lvhT+yRo/hu0i8T/GD4e+DdFikj3W2lRtJc30r+hKuUXHfBYDua9Yg+GfxI1i3TQfhvrfhnwR4aMqySW0OjNLNPGCf3czK6iQEdc9fxrxY4ajS9yO33mlXA5eopYanbvex8ZeKPgr8btDs5ru78FzwWixRu81vYQXZZWGTIQgJiGcjAyODzmuRvo55Iy2uWdoZlRY5NlmsR3AAD5FAAOBzx6k1+h3xA0n4k+EdQ03+zviNpbatqmntYi8utCjS3gSJgVWCFGwuAx++Xzn6CuVsf2b18d2urXfxa8cjxBquqJtt/s+nQ28Gn/7UOxVfOMDBOPY1tF04vW3yMvqNJxvGK+4+MNB1TwP4fvbTRZb5x/wk8clmFt7c7Y5kYGMSPkY3MeMZxmsH4h2PgnTfBd1q1x45ub3Vkc40c2JBiiHUyz52sx+6FAz3OOAfZ/jb+wP4203RYf+ED1i01EWErXEZmb7PJzz1GU3ZA5O2vkX4wf8J9oNnPpfi3wlqmkvMyyTyTLmGTZxuRlypye4PevawGMhGLgn6HdPAUnRpSoWTt76v57/AHdj7c8LfFnwQ/7Rnwv0X/hILCKK0j0tZ5XkCRW+yMuyO7fKu3HOSOfyr7r8RftEfs36Ywj8QfGPwSHhkSQR/wBswSMrryp2oxOfTiv57LHVpdPRvLUOJCHX5iMHH3gR6iq0mpLczFo4Xiu0be7q/wApXjYFHYjByfcU8HSo4Wlyat7mmMo1MXWTm7LpY/ePxB+3n+yD4Wtg118VrCYRHYsdnY3MpHGMAiPHQetfIn7Yn7eHwM+LXgqfwH8MtXuCupWslpcXV1ZtAi7mixjOWI2xkEcdq/OHVrrUrvQBql9IXWXUGiD/AN5ljUn9HFcnNMxUYbrxW9WNOtHltoeU08JU03R6nNoelQqrDxhpyKPvAr1z7Zqheab4TMjSTeOLUFRhQICc/TBxXnjNZ/Z9vk/vsfe3HrUUnG32UVj7DzD6030Om1JrGO6WPTNSN7Gx+eTy9mD/AFru/hBaNcQ+I58fILSKPk8fNJ3/ACrzDTfnVD1IZifoBX2l+yH8MdH8Wfs9+O9XurFF1KXxh4f022vxGGlhhYSNKqA8HduHB4OB6VcYdClK9NzZxvi7UdJaym0y41S3jYpJC6iQErxt596+ctStbSG4e3jcMYxs3LyG96+i/jlqPhz4d+Ntb8Jym3kRLu4igm+wfvJI1kZNzFTgMcHpXj39nXnjwv8A8I3bQKttG8gjWMRlgMA/U8inTvBsyly1InEfZWwSqt7Uy6mNrbmPyyCxHze1W760vrOV4bqGRGgYxSA87WHXpTNNs9R1a4js7GHzZppAkaEgZJ4HJ9ar2gnRtqULeRGKxtxH1OFyQO5q1G1uuoRLE7GNBlgxyHI7fyps8JtbuSzljXzYpGiZlIxuBx9DzUXm75ZFj6hcA/z/ABo5xqnI9w+HdrL/AMKh1C4t/ulWaUD+4b3BH0/dCvVfijDfal4Zgms9atbDRjZMbpnjLtjaGRkVckkAcAAnnpWJ8ANDt7v4c/ZbyESxXliiSL/eDy3DH9GHNXXsdU8JtbaXr2h3Wu6Rp8vm2F3bZMkA7LIg64/z6V0Rdhq9WHs4u0k7+v8AwVY8pi8B+Erm8svFH9tR6tpdpNF9r1LTI2AicEMN6sPm6Dke4yCMV9e/HzwD4hX4M+ALC30+GK0ubp9UULh5L43UQc7T1RPLYtj+9I1eQ2viXQfIu7Xwx8Pb2Se8VovJWz8qGRenz/wqCeoA7c17/wDHb442P/CN/DrwK2m6PF4j0m3WzuNNkupIBbwpDHHGPmQl5RsYFcjBUeoqoWQsXzyUZVI2l+fnb9T5+ll83bcbv9Z5knA/vTSMP/Qq890G1Ekd/cbwMzgMB95u+QPaupvvEmgaTBBZ6nrlhbTPaxskcsyozZjBBwT3zXLeF9U0yO2vFurtIgZA6szDDAgdPUV59rzk2SnaxzPxbtpGbSo4d5CR3DsVOMfcyTWX8OdFW98TaOq3I3PfQBsrwR5i4FbnxM8QaHqEcUen3omkt4JI90anbliuQcgdNp/OsD4P6g03xM8K2KqcT6tar+AcGqSurETdqh9v+I4NlnIQDy4x+tUPitZwzaDbWdxdQ2qTFV82ZsIjBCRkjnqBW94kT9wqn+KVR/OsP4yOsel21vJna6ysdoB+6noTg9RWFZbHr5QubER9V+Z8tzfeOVxXpdnGIfCKcKNtovfH8Nec3Q5ZSOevtXqMMezwxCTkf6Kg4Xd/CP4e9efmWkEfoGd6U4+p4z8Urjw/ZLbf2lpaXdw6r5Y+1M7Yzxgduc9at+GRayRho4VicqN37wg81r/ES+8RR3cOn6PpqzKyqWmexESr9c+wrL8N6413M8N1bywqG2hhbgg/4VWDlahd/n+h+fY5XrDLzQ9RmvHmW+iCk/KjSE4r339iXTQ/xYvzcsreTpO12WQnhp4FOF+hNeZ3mg61aq0v9l3m2MbnxChwmMk8H0r3P9hjTb+b4l6zqNvCHj+z2McTMAAZGuEZVPfkRn8q9KjKUpR7HRkKjHMINdL/AJG38ZrxdP8A2gvFtrZ/aJobvXpY7e2to9u1U/1jbiQFA3A46nBr7D+FerPffCXR7ybTvOtotHa3tZ4dwkhLCRpPNQ8BT8hDD+99BXx98UNTuovjn44vdehKzHxBd28MkLGWPa0oGwqAOQ/yhsZx7A19J/C0Tap8M9FktY7uztdBN9F5ocNBdfM3mRjY3ABdMLIMAoCAa8TkTlFP+Zfmv+AdmGTnVhGXlr/w3c+DfjNqWk3nxP8AF+g6hqKQ3V7fXJRNwDOPOOCvr92vJ/C2nyQ2v2po49Qju7p4FsAHQzhSV8xivpjnJxitr44bbz9o7WJ2Usumfbb1mI/iEsgXk+7CvO9F1i+s7uOGOIvIZj5aNlym7r8vc55969avR5cRPle+phmtTlzOt6mt8S/CMN74SuvFFxI6XFq2YEJG1Yt+3YqrgAcnH0rzfS7zTorCGO5t1keMHrjn+tej+KNWmvvhnr2nyl45bS8hYjoXVn+bIPT5geBXjAyzFm54q8HztSUns/8AI8KpU5Krk1e5o6teWM0ckNvCoLNuHyD5fxHWvUv2fbFo9Sudyhm8pvwywxXjW0bgPXFe/wDwJt5IdSvFMe1toVv++h/hW+K/gsMJ71a59W2Onrf6f8L7F7qeyaOz1S5+0W7bZFYXhII9CNoPvX2v47+G7ab4XHiKz1Zb/VLqNluLn7MsMdxFKhLSOq8FtxDbvU9K+N9PVoofhtuT5W0nVWJ+t444+lfoD4yTy/gvFNIiB4NJtmLOAdreWoLc9wM4965q0V7kuqSPoOIKjU6MFtyRPiq6O1QqnkfL1rO1BFS185f9YMfj7Vbvg/fGc5O3p9axNa8SaDZW4s77WLOCZjtVJJgp3Dkj2OM1jKpGnrJ2PnZOwy3vI2ztZu4YHsagmuMXGeOI5fw/dtVGS+s5oY7qzuY5FdNyOjA7h+HUVQfU/wDSP3nBMcg68H5GxzWlKSnqiHI8Q+OWua94Z1S01Cy1GaKxnh8tVj+75oOTnt0x+tefXPxM1zVPDN+t5dIBbRMYJB955CNqrxwcFwc+1ek/HC80m68F3cOozbXTEkbAZMbfw/mePxr53uE1aw8OxNdWpWKaYLGu35YkAzyf7zM2ef7tacnLK9yHJv0Og0/S7+3+Ht3NBGY5ZCJDnr5IwMj8P51j2+q6lcWcNsZpJFRisY6sc9vfnpWdb+Ktat1NrDeM0M6GCSGT5gFIx8vpxWr4XaOzuAu7/SCu6Pd0Hzdfrj+dTOOmpKlqkmdS2hyaLaRLqSxpfRzHcqybgUPHTtg15V4ik8zXr9vWc16z4q1Cadpri8t3hm+0CMDdlSpAbj2zXn+j6Cl5r91qV4vnQLI0gVTx7E1VGoqcW2evi6kFgIU49/0Mx9Kit9Dn1G+t5PMJVICWwAx6fXjOaxCcdTivZPB/xB+G2j6lJcfE3wS+taVG4FjDb3W0qMYLGLjd653in/EOH9nn4gSXk3wna98Lapax+dFZ34b7LqJwD5cOSzRyZ4AY4P0qIYqSnapB2fXojw1fseHTKFbcB1pIT++Q9t1T3Vle2TCO6t5IWPIDrjI9vWm28X76Ld/Ewr0E01dFo09EXbqVqG4KNn+dW2vG+0yM6uFOV4PI7g81HoKedqEHmZzuYH8zU+q7rPVJ4UDAK3Q9NvWsWuZnpSpy+qc3RP8AQrM8yuzcc5YjGBSNKgty27JK5U+hpYWE0Zbbv4JZc9M9CabIqRxss0bYK7Vx6+9JI8wrxqytvi+XI5PrVm3VV/dtv3OOcfpTlgKQeWzpmYfKByQf6U2MSMo2jLj2pt3BiXBkVTu3H5c/him2WDaodo4FTSSb4zM37wK3l7R3HJp1jC32PcsbgAnt0rSBctxU28/KKjutz3lrFu2q+xcjqOTVnAz/AHar3R23VphgMf8AxVaNEo77wf8Au9YRWcnGz5u5IZea9l8e4XQ5ImbmOSN1PqCw4z3rxfwyzrrCGQKDtBO3p1Br274hLG3hiSVVAPmQjO3k5asJrY+hxj/2ai/J/ofL+u2d4upXLXFm8eH5yuPofxrMiVI8tIu4HsOxr2f4hWsMmlrNhWdol9jwK8XmRlcjqQeQO9VHY8CatImtRGGaOYcvypU9KsSXcqW6xLIXT7rLtwPTNVdrfKDwR7damDIql5F3NuyApxSauZjRGqL+83NGnYHBqWACZSY8ArjHqfXFNEjXjHaoU4+7mn29uPs73EkgBiOAueSe1DBbk0bS+eyxsTvXk/419B/tmSSX2pfD7Vmdv+Jn4F0aVvdltlX8cbTXz/Zhm3tI+C69c9q+gv2oVGo/Dv4H60rD/SvA9tEzL0zG8iY/8dq4LcrqmeQ/B+8js/GOlNNwkrSQnBxnKnGfxxXqKXk8XxG8R6bB9oVNUt4r0IqBmlwpVsD7pBGSd3pkc14p4PZ49Ws2jHzNMYlyccsCoOe3JFep6yq+Hbnwd4w1C5a5+1xyW+oRyL8sQIIwR1yG8z8R7Upxudrl7sTpvAevmHVNT0mO6jlm0xyIpLjhFEioC20kZY7eQMZJJ4zXEftCr5eveH7q7mW8luNNPmyMmN7CQ9McY54Aq54es7241Ya1DFLa3F1tufMWXMmGR2DkdOduNp7ECqfx+kmkg0H7ZGFuImuVZlHylW8tgVPZTkMAeRux2qIppmMneLPHrjyyzSKuM9MdhTtKYrq1uf8ApoBRNGUwxXKt/FiorViL6FugEin9a2Rz3O9slij8Q20zSEebbS7vm4JXGB7ZrnL3z7q+LTQhGk+ZV9R2ArpLf5ta0ssuQWlj56HMZOD7cVj3tjeSXdzcXh2CLHlk8554Ueqj+lOSBalJrJY1a4a8UsMDbHwwPPGPbFVrdvKctlue3SnTB1zu+XqCR0JpkIm3bsblBx61mJl2JYw3y52v0yeef84rKV5VWUXUZILbRuGM+mDWrbo+9dwzt5X6d6p3Ui3DTRtMMx9V7DHYVKBGeOKbNwob3py0yc5jO0YrRDuexfCSMX3gvVbTkjfdxnv1hDevHT9TWB8OWb+0rFAeJrW4iPpwVb/GuR0bxJrOkWs9jpuoSW0M8nmSooHzHbjqR6V0/wAP5Vj1rScEf8fM0Qyf70RI/lUxhZvzNJTckk+h6frmltNpu63CCRV+Qt8oPrzXj2qWk1tdTwFcqoOdozj3zXv0mi2d3oq3C2sTTFmVmIBzyc/jivNNY0e4j16SO3t2ffbzBQqnPAzx69+Kx2kbTjeKZxljNPCpmtY5FjIG7Cnk4GTnp6fnWvaxTXkMUMrmbDKAQmWXJPWsSxuGhWOwvpmWLmSNGb5AW6nj1wPyrT0m/ukdlhtQd67QzKBhvXPf8am7jLQ4pq7Ok8M/Z9K1bTdRQeQ8E/mNJjb8ynIzz1yK/eX41LB4i+B+rXhy6TadHdowbHXaw47gg9PevwQsZGmkgj2xpI74KlCSoKnLV+8uhvH4q/Zf0qZZC633gu1lDN1J+yI2T+IrvraqNlYzwret3fU/BPWdLK6tPZt921lnhaN4coxWVgAQDn6EdOK5i40FZv3kMjQ7usckTHb9GGQRXqHi3w3fP8RvE1rZbHFvd3kwiCndhJGLY9SRjArhIrprfeGIEduCWIUjGTwBg+/6V0vDwklfRs5pYipCUuXVIo+EbdbHxtptu0iyByU+4SDuRuNo5PPGO9WLjS7HRn0vXdPEvm2uoxm58zhciTIwOqgFCOao2UwtfGmm3DcIl3FkqCpwXx1PtVjxdrF1Y3mr+HIobYwC7d9+GZsbg4UEnpnn8TXDy2lY9KnK8bn1JrWgx3Nnfwx6XdCKWzuESc6m0ikGI4zGW5yTjn0Br5X0dE/tDTWbkyZib8VOK+srNbe9bR9SazsWlubePbPJNsmXcmCFT+Lg4/Ovk+eFbV4NxxJaXxiPbgOVP8qqtGyQr63Ozs4GukntpNzBoZPpnsazNBmW68Nx2spwY57uNc9swlv8a2tK+S+CjoxKgDqc54rN8H6dBqKXUIkCyx3YEYboC6SJz7VjGJ0SleJxF9Gtk08M0KyPNCxjbd/qzu68dTwePeqlgsc00MUyuyuyowjxuYEjgZ7+lXvE0ckWoMrdF3KM+vGfw5rO0+U291a3Gf8AVTRyY+jA1qzBM1tCums5kuQ37y2mV157jB/mK/RL/grnAuu+Ffgp8Qo1DLqml3EW4d98MEy/zNfnFHIpuL3y9pHmZX6FyAf1Ffoh+3RqGo+L/wBg/wDZ88V3NmkYtobS3lbzdzrMLUQsuOhU+WTnPanB8stTRa7H5z6YzN5ka8lsj/vpDUbMrbemdmP5il0xvLvfLbj94gP/AH1j+tIu2KeOFlyVdoz781LRMWdDpN6Y/C2oWbLkyrDt9iJGGfyaup0/4heMrPw3YWPhfxFq1hp+kQLb3CwzeXGZWdirAD2IH/Aa5zwXa2WrPe2F9M0KfYp5Ay9QUZG/pVrXtJudJ8E6Xqti00dvrc8gmUt8sqxhGQlexDFx+FNRuU3Y22+IHjqfyWm8d62/O47r+TjHfrVODxHJHps9vPdeYguJZCPvHLOGJHPfOa5rSPEd3o9lqUK6fY3L31uLZWurVZvKywLMm77rY4DDkVVt7iR9LvAI4llWaNxgchSCCB+QqfZpy2HCrOEXyvc7Gx8SW32uFriZUheQLIGQL8h4P6VB8Upre9WDULe8tbzzLiRnuIYgplLKDuY9SeOnQdq46O4ut6NuYBiF6eta94xk8IqpU5geKT6feU/0rTlXYzUpLRs+iPh7r2nyfDW0gvrxUnXLKrq33TgjnHTrUPxfa08XfCGax064il1C0uLeWKDd80mx9px2HysTye1eeaP428Q6L4H0C30jU/s1rdQzRXC7FbLq2AfmB/hGOKoan488Y6hZz6DqXiBRp80e14ZYl2urNux8oz1Gay5Unc7aVKdVKxweqagq61exxCU27ykxrKoDMn8JOOBnviu5+Bvw58Y/E/xi+m+DfDt3qU8CEbbO33LCTxuZvur97OWI6V0vwrPwf/4SqLVPjV8NfFnjSytIkhS10G4WBSy4yZVA3zKOgCunfOelfqx8Hfiv+zp4b8DaNPofgzWfAWhahH5lha3fhmW1ifDbDlog6bgwwTIwbueOa56uM9i0oRu/6+YlS6Nnzv4J/wCCbq+LtWt/Enxo8RGHTbC1EMej6TIEOxWLFri7b5UzxkRjoPvivozQdQ+GPwh0X/hCfgZ4X0y2jziW6t4v3BfGCxYkvcP/ALTHH1rw/wDaE/aP8cfEPxM8PwT8M33iXwhol3b6TeWlrIpjnvpQ0iu0aNvmbapG1chAhJwTXTeANY+IV94D8M+MLzwXpltda8L0Npv71pIJLaRkZN6sQ+7aDkDABPpz5uLeJrPmrfdt+H+Z0QVKmt1+Z614d0XUtc1D+1NYnmu7mU5kllbPfoPQew4r2HQdNWyt1Ea7QBxXiP8AwsLxNoOm3N9DpOjH7NC0o3NKc7VJ9RxjrXCeKfjd8Y9Wlls9P8RRaTpwjLKdJsVW4c7sKvmOXI3A/wAJB9DXDWth1eq7IpVY1PhZ65+0+LjTfD/h/V7Sa2W6h1QRiOZgDJG6HIXv1UcgHHFY3gvxRb30IX9/DNEcNDIm1wfUZ4I9xkV8deG/CPiTxbpPiHxp4o1XxHf6jHrOq28NzeXBmlkkhdQkalyWVV6t0Arb0Xxp8SvD8mmafceKNR2zytHzElxHAQCRH5jgjftUkgHgCs5TpOUacZJuW3mVHEU6atJ/gdn43/aV+JOlfHK48B+GPEmjWWiabf8A2vUpLjT/ALRP5C4R4lG4b9xdBtGDk/e61UsfiFH8RPCvj688aReH7V4vEtlpsc9xYeXbWFjcna8k0bMEOwxuvzgckkn0851z4a/Erw74mf40XGpaUkVzdrf31xfTLAYrVpVZJCCACWkG9UVcFYwM5bFeX/G/T08O6Tr9iNag1fXfE9obyWztbZkEMZeM+ZknLM4YtuZRn58ADmuijUdVqEEtNL6b3PdhSwipznW+JyjZWfwqKvp5s3bX4f8Awp1L483XhHSNH8L694N0NvNEunzTWltqGpy2skts+VY4hIi8sIhALMOu7NeP/tLaLH4V+x6bptr4ftNHtNRv5JZbaVlnvblpWR3CSMWKKUPyp8q7h6iufu9P8QeFbObxXNeXH9pa1biBrRY/KWxkUghiQ+Q8flrsGOhOcdKtTjV/i1puhjW7f7Tc6fq8c32G2dmn1CK5mRGjiQ5ZnGHkc5wF5PWveqU5QcVzabP7j56NeUKftJX5k9L+TOb8ffCnxp4F8A+HNS8YaPc6RHrUj6jbw3DKsj28qqI5Qh+b5go6njjiuItPAfifWIjfaHoWo6nYwOBcT2to8iQ55+cqCF49a/Qr9n39n3wX+1t4u8QaD8ZLjWLFdDlgGjKuuYnht1yPs6xPFh1YfPnO4Bl25Ga7L4i/8E6f2fLHxVrXh3QfjDd+C5CttpdlBeXS3SytOodtxO1kYsmONyruUnriq1px9446lRV583c/MB9N0+OaaGa3ETRnZtO4MGGcg5rDk5Y+gr6y8VfsE/EbTrDxT4qt/E2m6R4c8PXVxZRzeIL4pPezwnbIsYiVgQW4DELknA9a8U+In7O/xq+FOkWniL4hfDXXdD0vUdv2a+urc/Z5Cw3KBIuVBI5AJBrWUJU4RnPRS2OanUp1as6NKSk4aStrY5K3s/si2yq3medaG4YFfubjgD8gDX6PfsA6fLH+zncXDTDydS+KGmwrHs7xRREtu/4HjFfEHjaGO18N+EoVs1idfDVjliFBfzHmcsMevHJ54r7M/Zz+JHhz4K/sd+Hte8UXC29xN49vtSt7SViklwIreDYQMEhSR97GPfpUJ+9I7WrYZ+Z87/GrR7Tx78bdStbq6+zp5NxcNK2QiE3DcuQPlHI/MV3f7Gv7O83xI8V3/h9dftdMni02/ntJpl3QXEkcqKFZhgqpU53AE8dK8A+IXxY1DxbdXV9p6adYQuymSCEkNIA4xG2cl8kbjz6njpXdeDLX4ieKPCttq3hW8tdL0iNjFcGMyI8MoCtIEcNzw6sMkdT6VD5tbK5eHoRqe7c5Lx94R1DR/GOu6bqFi6XUN9LDJBFIrIzeZjIYcbQOc55FY9jo50/Voby7aO3bTpUkkYHh1ByenU46Y/Gus+Juj32j3D6peecEby4I5JFcFikahic5G7I3Ek87sivLNQuEkxvkchz8vJwawpylOGjOzE0o0qmie239bEFw8N9dPfNGGWaR5NpHTJJ7UR6LqEi/arW1fYDn5Ryfw9Kjj1DVrSDzNJmCqM8eWC3HJ7dqr3mva9eRlm1C5KHuJCue/amozv7uxpPEUkk6kXfyPZPB9j8an8O2I0ODT1sVhVRIy3KuqkFkD+V8udrZx1wRmugFj8boZrWS8t7XyDMvnPG17u8kkbioJHON3f0ruPhbe6LD8NNO03VfEFnDcRmO4aK4jWUyqLaID5W6Z6bhWrfeKtDngjRrotLgRxIttENhwSSCQeDk/KP0zXpRjZI8CpPmm3Y5TxTJ40l8QT/8IFE8Xh/7VL9lXUGuGnji8xvL3HzOSE25z3zXGeO/hL4r8H/ELT21HVRrlpBqMEEl/ZrM1pJO43COOVwAxPI6g5B7g49Jm8Sabbwb7NpHlSMyllt41LsN5wR5fTpzjBwMd657xT481DVfGthZR+INQn8N6ncW2tLpNrNJLaRagsYEsggHAkLu+Soz8w9aaSZPVHz58RNPmvfGWr3UiKjTSK8K7Su6PYu3g9PlwK6bwzCy+GbSGRx5kSurfNnHzE4/AYre+Jy2smv2Gm/Y0+0WFhBFPJtAYuVB2k+3H0zXKzRzabP/AKPkZXJXswrlfY2cU17pQWGOZrmaeRsDMY79TXbfBfQxN8X/AArLZtD5VtqMTMCfmICknjp1Fch4g0260GOB5WRxd2aX0Oz5htkLYz7ggj8K6z9mq8k1D43eGbd2ziSZyuBzsgkP6YpWIjo9T7W8RdbZcZPnJzWN8cLezuNJit7htkhhneM7R95U37ckjBIUiui12Pfd6fGwOTdJ+PzLR8T9LsdQsb+C+tUmit9E1K7UMcFJEjHlsPozCsausoxPpOHqXtcRH/Ej47mAIJ6epr1e8Rbfw3Ft5220Ywrbey9D2rzCaHcT3J7Yr1nXbdU8OpGQMLHEOULg8r2HJrzM00jE+zz7RQXqeLfEKbxDJPCsU4jsuN26+3sfz6c1j6Qtxb3F0TCfKD5iHn4OCvfHernxM03Sm1KO9vdUwIyCtmtq0atjjHUHnnmt3xUPD8N6i+FWimtvsMMpEK+YBIYssu7uenXGDmpw7/cqJ8Ji4v21zL0L4kajpuuvNYwS3DMksc0ckplVxtIJwe4FfYH7A9zFN4o1e1t9PfdLdaPMfL+8QrTfIASME5/SvhjTV8SJMJodNlMRYqSkeDls8Z+lfoV+wHawp4imvLiFo2l1SwjjVhgHEcu0Z7/MQK9ehFfBvv8AkaZLG+LdS20ZP7os5jxw1u3xi8W3F1q4/thNU1Ce5jY5DRrO/wAxiAILKrYBHIznrX0l8JfFWlWXwp0jwjMNchup2upEdLfFtOWmYnzmOPmG3AOOm33r5g8epa2fxg1ga4wttSvdcu57h4coJHW6KBQ552nIG3jcBk19CfA1/E8Xwtls31Sxnt7W9eG8VbdlZ2aZDGEbccbRgNkc888V4ftOSVOD6ySd3br007/eenl1GMsTTlLy/wAuzPzj+NF00fxX8c3xPzSqLVW9N9y5OPwFc/pM2i6PdS69Y3k08kNk7NN/FHIpVd4X2BNdJ8SreNviZ4hvYryVJ55kaOAHiRVYknkdBk59RmvNtWZvtOpfZZhLHcQkb0GFYMQTt46Zz+VexUkp1pI83Npxjjqsu8mJa32m6roetG81BY/7TBZFlXLxndlWBBy3I6Y6tXCQ2d5Jsb7LIY92wtt4HbrXRaP4Uvtd1SPwppGi3d3rF35PlJGRkcZfg9iGBySOleo+GPBtvo9sqavpbSXFjqX2eawvcMm8uF2yY6kZzweoqK+Jhgo87e7FleVSzqbp7cqbv3Z4Zc6PqUDOWsZwiHqYzj8696/ZvsZ5oLq4kYliNvznk/Of8Kd4w8IwaZpM94t1IzAgBcDb8zAYz+Nbv7Pdmlvpdy0OVDXDgfNk8SEdfwrjlmKxWHcodz0cw4fWTVopSvddT6fk227/AAutSVA/4R+/c845a7k/wNfffihbdfgj9pmQNu0W1Pz4G0BE9eBgZr86viBJqkUPwyXRdNF5ef2G6rCSQG3XTjdxz3zX2h4/8U+NJvhtqNveSaU+ktotvv2Fhc2t2CnmR8fKyc4weRkcmtMbjKOHdONZ2ulb1DPcDUqeyqx2UF+p8y3GWjkZeCOV45x2/wD115N8WPh02vt/bGj6/LbS3c6Ca1mhDQxtgLvDD5lJ5zwepr2KaPc2zqDx9K+avjJo3jix+K0fiTSdPvZdIFvEJPKkPlyfKVYsucFlz6dAK48dCM4Xm7W/rqfI4i3J7x1Fr8OtL8O6en/CWawnii1tZFd4dPxHNBCVIcKeCxBwRh1HHNRSaUzrdweHPE0pu7WMyLperBftCKwyCxzuZSvQjcPc1xWj/ES7ttQew1+3eBFbEc3bHv8A/Wrt73S7LXbaPaqmWVT5NxGBuACsVwR1HJ/M15VGjKLvQqNP8Pu2MYRjOK5ZbHBW/gvxB4r8R3dn/Zt3fvDZCe/01LbfbpBLjm5nBzHGDs+ZBuDcY4NZvxp+C/jvwLoS+KLax07W/CFrLDp+r3GnMTFBcXROIQWGX2Ngb1LAMVBOTT9F8d+LvAfjq1vtFv2+SEvc2dyPPtrxYX3Kk0bfLJGHKsAeh5FQePv21PiN8ZPDtn4F8V+HfDljbTanDNdXelwyRGSON9wQQliinOCSOu3tk1vB5p9ajVhaUPtX0f3G1SrJU/Zqx4OPC6/6UWmjWTTroQ+WzYkdWztYA9V469q3fA+mLdawkkjhs24SJW4UvvO5c/7oP5133xb+GunQ+FrP4meEvFmhatFaQwjWLK0vla4sjK2IyY/vEA8P/dJArgPh/fCHWbMSbminmlwPLJ2koADnHTecV7Uq3tqMpI5KbctzP8QSXdjq0ujyS+TbW8rGGIc7Y+5556Vi6p4x8mzOnWUBghKBdoPLj3PYGuj8URo3jPXNQmj3wwNny253AKox9Ca4DUmuNT1BIVjVriRuQoxgnt7ACt6EVVinI055NWb0KF9eTX04mm252hVCjgAdqWzlktriK6gcrLC6yI3oykEH8xXVT6HbaT4fubqRYyyJjzCOWkPAxXK2+1cFsZz3rrhOM17uw6crne+MPisfiFo+pN4u8M6c+vXFxDc2mqaei2Yh25EqvAg8t/MBU7htIK55zXDQ/wDHxF/vD+dOZU+zvjGSPX3qKFsSxtzww/nRThGmuWKsjSTV1Y19C3LqMB3Y/fMD+da3i61MOs7lXImi3f41laKp+2xsn/PZzz9a6jx3YzSNaXyx/uliKFv9rGQP0NF7M96hBVMtq900ci0O23MkOVRmww3enqKSTzHjaQMCDgkU3bLHG0idHbn64qSMtFCyzQ5DY2t/dz1pnzrIGR7dlk9PerouI5EEisqHady561RLK3fO04B9qcsfzFR05puNwJ1/dR/MxRSwY+w74rT0mVIpLqFbnKhXILMO4yOhI/KsgQqbeRWGcHNWNBGLnaTjkdfoaqLsK508Fjot5p7t9uu3vhyGht2aNf8AZZdufxB/CsO6uLzT0+xRRrJFcMUaR7f5iueQpYZXOea7vwvdR2Ud0u1mJVdqpyT1/wAaxfGEiyeRMiSIPNYsjjBByDWnPzIET6A4/tJAqug8sjHdQK9C8YaX4n8P6bDG19caho1yweRpSC0Tlsr054x1zjmvO9ElWTVFkjbIZG5P0r3zxQzTfD+62qwxZpgN1I+X9azmrpH0GJd8HS+f6Hivi7xVY6hpq2du7JPEojIZfvkYOa808yRWZtoGe9d94+0aGz0zS9aiSQS3eY5sfdDKT831I4/CuElaN7klAdh6UkeHV3Et2K5LduAasraiZfM3jIXd+tXvDnh7UPE2sWOg6JYzXd9f3Edva28Q3PLK7BVUAdSSQK/Tv4V/8EmPCdrpVre/GD4l3E97JGrT6bocC7YmIB2/aHzuI5BwuK3hRlJc3Q4auJpUX+8kl6s/Li3tGZDMqfNH83TrzVm10m4uJzshbYf4R1Nft94Y/YO/ZD8Ixpt+F0+uOv8AHq2oSyZ+qqVT/wAdrovBmp/sk6Tqg8PeB/Cfw7hu0ukswtrpscjCdm2onmiMjcW4HzcmtvqrSvZ/h/mYUswo4hy+r3nyq75YylZd3ZaI/EHRfAfiC/YRf2Ndzo5HyRwsxbP0HFfSPxf+FfjbxR8Avglb6H4N1u8utN0e9s7iO30+Z3i2Xs20MAuV4YEZ65r9jxqtrpaRx2Oi2FvvkCqscIUDuegHYGta11q5ugTDbo+3qFySKPq8oK/Lp6mNLO8HVn7OMrv0Z/P34d/Zv+Nsd5bzP8IfFkscdwjMjaLc4dQwOOErtvFH7PHx2vbe90s/CfxXIiTpd2pj0md/M3OQyltvUBu3qT61+68OrJJxIFjIOMO23+YrH8YePtJ8H6YuoXWJy7lVjjbkgKWY/gB+ZFTGjOtNU4Qu3sd8syoKlzuaSR+Nmh/s+/GH/hHLGG8+FPi+GeC3TzVfR7lWBUttAITkYA/Oub+M3wJ+Mmp6PpY0/wCFPi2S5s5THMqaNcPmPaQrEhPQKD7ivtbx1+15480PVLuy0a907SLbz2G0b5XBY5HzSOzEkk+n0rqNB+M/xlvLO3uvEPjPUIri6tbm7sdOgtYUmu3syHvbA71/dXf2YieFWBWRe+K97F8K4jLqaqYqcY36Xbf4JnJhs8pY393Qi352svxPyiufgT8ZxC8N78MfFMSpyFk0a4XBP/AK524+FfxCsLmNrrwRr0Krtc7tNmB6+61+muuftYfFjS/EX9lwfFPzbK8jhu9LvltYRFfWky74JQCuVLLwyk/K6uvVah1X9p747Qx7ZPHepRx9fMjt7c5B9fl6fhXThuEMRioKpSqRafm//kTCtndLDycJxf4f5n51Xej6lZ3VgdQ066hVJiZFkt3GAVIOePepJorP7EiNHCsUS5jLSDfnGRuB5IOP1r77k/ad+K1yvlXXjiW5B4/faXaSk/XMZqzoXx01TUdcsf8AhJH8NS2CuWuI5tBsV8zapIUsIiRuIC5HTPat6vBGOhBy5o6dm/8A5EzpcQ4fmUVF6+n+Z+aWrwzfamlaJUWU7lwcg8dfT0rPihkFwVwR6Y7e9fsT44174U69pMesW/g34eaa67+Lvw/ZXVrNErEbwvl+YpK4baGJ56V49P4o+Cun+KprHxR+zr8PtY0eKYCR4dFWynkiIBMkbxNtGQcjORjH1rzKPC+NrwbppXXTr/l+J3YjMaWHtKron13/AOD+B+dC+YjCRicg4+grJvLdo7yc7SEfBBx1zX7H+MP2Vv2O/EWiQ+IPDfwnt7Q3Vn51tbR6vdWpkLqDGc+YdpGRldp9iK+WPG37Nf7Ouk6o+l+IfA/xE8M3PJjax16C7jcdmVZ4ASP+B1w4bIsbibqlC7XS6T+5sqpmWFo255aPqfBhVuPeoplbacdua+utT/ZE+FmqPJ/wiXxkv9NYKPLh8R6CVRj05mtZJAP++K8luP2YPi1fW+qXHhDw+vie30kH7VJpMvmtGnPzGNgsnOCQApPFKvk+OwsXKtSaS30LpY7DV5KNOom2eS2cTyu6hd33SBnHtXX+ExJa6rY+YoUw6pB8o7bgR/Wuft9H1ax1gaXeafd216iFpbeWFklQKCxyjDI4BPTpXQ/ZNR0u8DanZzW1xvtLrbJGUOzzBggHqMd685LU7PM+hNHbzNLkt8ZZZWb2AIFYWoQxR69prNtYyTlOB0yv696uWcazxzW+0MWwy5JHI78GuW8TW+tWd7YTWrQu8UylZXYjEhPUrnkdq5qi947Iv92eL3CfY9Tu4Dh5La4ljIPT5XIFbOkXzLNFM1tFL5biRo2J/fc9D6Z9vWq/i1YrXxZqzQCMlb2X/gRZicj1ByasaNdXMLPNCse+VWRlYKd8ZxlcHkH3HNKZxSR1sMgXWkks1m+zzlXt0mcGRoSSVZiOMjBH1Fft9+zPc/8ACQfsf+DvKdiZfCptVZs5+RHi/wDZa/DGFdHvmtLPU9SvLEW4dFaGNZBHuZmBfoWCk445xX7cfsG6pY6x+y34bs9Pn8+20yS+0yOTu6pcPhvxDA/jW3tHUjdk0qcaesT8q/iZ4ej0/wCK+qzXet2Vr/a2oPb28LzsJJfMjAdSQP3ZG7qeMketeAzTRQxS2rTRxSmYsSzviQg4bBA55/lXt37V0Wl+HvjZ4j8ySXz57MtGvykRXSSAIR/cyIuT19K42PxjdWkN9qN9NBfxxXMraPG4j3Wd0cFSOPuMJmOP9muyNaTiuulhVcLDmdtNbnlGoXCrqNrdLIjhHVsqSclWB71e+Iqf8VdqHIIkKv8Af3dVHf8ApUnxEW6XVvMvLZLeadWNzDGVEcdypKShAvAUkK2P9ql+IDedqlnebcLc6fA45GD8uOMc/nzXNLV3NILljyn0f4Zv7f8A4RXwxfedoMbCwt5ka+DCVDtAZkPbp+ea+f8AxlGtpreuW6/ch1S4I7ceaSP517L8P1bVPh34cU6Je34t7THm292kSod7jaQTkkdenceleT/ESMHxZ4oglhMTmbzhGzAlWKK3J7nntWlZfu0yOpu6aojlhZm/iQ8jtxWT4dLWniy6td7IRcMuffcSK0NB/wBKsYJo5ABsTAPfgf1rLmk+w+OJpMBVaeNznoM7Sf51mja+hi+NW+0XdvdLjEyK3vyCDkduRXOQxfwsc4547c1s+JPknXbJlQzJjrgq7D+VYpYxszJjIDCk97GaJ9PhWa7uY5FLMtvMyY7MoJH16V9Gat8XvGHjT9ivTvhjrN5aXGj+Er5W05PJVZoAs7HG4fM4IlI57AV86QPJb6kZ4FDOVkGG5zuBB6exr2H4a29vqXwN8aac+x3tYp3RmUblJVXGCef4TSvY0hueJ2rbbwj/AGWb8Rz/AEqe68tr6fy+f37EEeh5FRWYB1GBT/y1JU/8CGKs3UMpvI1WMGSWOPasak7iwGMDrnNU9hR0Zc0S6vbc3H9nyMJyksa7eSd0ZzgfRa9B1OO5174R6VHDDLusdWaFFRS5KtGTxgZ6547VlaPpGk+Bb6C58QR/2jqiN5ktjDJtS2PZJJOQz4Jyo+70PPFd5of7THizwvth8H6NoejW0GdsUVkjY9yxG4+vWkpWL5W9TgdJ+EHxF8RMP7F8J6jMf7wiKgfXPNdtov7HPx81Nt0Pg2aFZMHeySH+SmtS8/bK+NBhMK+MPsiyElhZWccWc+6gHnNZTfGTx94vjlm1PXdZvkjXzJN08kgVR1JGTgcjk+taUlKo+VENciu2jfX9h34wJ82pfZ7IZGd8Z4Pb7zLW1F+yTfQaNLpeqeLLSF3+VpfPs0QKGDfxT5JBrzGbxRNcfvRazSgnPzW+/wDpVCPxFNcXAhhtoA7MBkwR5Hb+7XZ9Vl1uZOpH+ZHsEfwT8G+FNLOi614y0/Vo4laS0mXWrSJbSViNzlefM4yNp45znisS48N/DLT2aO4vWvmY/M1tqVqQMdeiV51deINSs5DHvjUoe0EYwf8Avmq7eKNaViy3kQ9M28f4/wANUsMl0ZccRKK5VIt+HbrVtFkt7f4efEDV7cXbrO9urGHzIF3biSuVU8Y5ODuFfSmqfFSz/wCEZ8OfDnQ9YfW9QtrCO4utQt7p5bj7TJl5I+uAVLbSwHYY6ZrzD4W6b4DuPhT4l8Rax4Vmjt9FKSm5sfEkUF/EzoBHGttOpW5jD9SvzruOAa8e0v4n6p4W1ePXNCn2anAdqnPyup+8j+qEcEdxXhVsJFxc6aXP38/NnTTrRpy96Nz7Q0/4at4X1dPH2reF7bUtTuLVUubmxvo9Q+eTCq6xK7H7QoUfO64HdTXvNzo2h2/grwn4d0nS73QdS/sqEwahfakftKW85QyrO0JUJMQ4UsEXGSuMZFfLngP9o7xRqS2vjLwjCNQu7SJbW+0SLThH5M7Kd03nWyxlo/m4UyA/KA5wTS6h4p1i5vtRvtJ8QXcOkwJJOY9SvbaKS4KnaqraQsVYs5bCckcckfNXxmKWKcHCvK8nvrt5E1Icrv31PqTxNqFtqnh9I7fQ5LiXSoDDCbK6R45IyqZhd27ldpJx03E9DXL+H/iZ4D0280HRdSn0jRLy/wBSj0u4vNavRLLZ7mIbygwXaQT94LwOd3QV478NfHem6poGo2WsTajpFto2sRaleguiLcQ87lHJBZSqk4DNgAAc5r558XeA9W+I3jjxBr/jjxlo9m1z5i6NM1xNLHLtY7bcKkbuZMY3bscsSTzWWHydZjiIvE1Nd31v0Stt+pmpOK5T6e8cfFldP8J694b+GvijULzQvD/jDVW8Q+IEQrZt9qvW+zRRvn90JAmWVMlgAx45rd8H+B7iPwhZfFL4oajqVpZPqCxeG1ii89by5bd5k0KBtojjVArYU+Zu2A9WHxR8GhceHvFd3br4X0fxFZiGUedqulyXdjEYnGSgbYEYgEFgdwBwME19z+JPjlq2vWus6lofhz+0fAmnWqLBYXd4kVv4eItiZPssIhYbNhjVV3hgzMAcYI97GUMPgXOtGykkkm+l2kkuu57uUYGeIarqLcU/efbS++239XPMdc/aFvtQtY7FrXT7i9W1/sWIXdpIAkikb5VPzR7kLnG3OCcgCvO9c1jw/qHxY03XIfG2/Q7xZdO1fWE826FuvlKdgcruOQGAXk4JPTFcJoPiWW+8OfbIbeFPIvrt4kEfGZX3FscdAQBzxtFWYfHkPgf4YaWYNO0+8uJfE+o3kkF3brLHPGlnDAiyI2Q65lfgjtXRQwksMvd3/VnpUpRxFL69HRKX4La//DEHiHS2+InxI1Ox+Gsc19aalfCzs2kHkhZXYkg+acoMnPPao9O+ImsfB25h0W+0+0a+0a6N8sF2CQjzWoj4QHlgr7gcen0rS/Z/8VWul31nq+uGOKy0+51PUGEcaqole2KoRgZID7cAkgdsc1zvxY8Jy+ONa1D4gWY1K8uNUWBgtrp0rwqyxrHtVwuHPyZODwciu1qpOtFTj7tt/NWPMxeIdaiql7t7rprr+B0fgb9oLXbzx7d3UcepaiuuCNZYLWNnuRKi7VaEL8xwoxtGMDp0rtvH3xnscXySSa3Prn2gTTRX1pJbyCY9PtLSgEA9cHk44Fc74e8S6X4N0PTIfhh4Tu7O8e2+z6prFnqUkl1cZC+ZA6fIsK7xkqozwAzGunvtN1K58D6l4r8ZeDfCt5Z6zbuulRalePca7czQ7lDwQwS7wisSMuhXrzXbVpVJT5XH5njxnTpw5pOy/rQvfCHx5NrFrZeEfip44vF8PHUJb838WntdzafcTY3yhXba6LgHuVxkA9DjftPftReB5/hLH+zF8Dtb1/xD4St9UOqap4i144lv5w25YraIgeVAHG8kgZPQAZJg034gfC/wr4fg0+88cX/hjxNIi3A0m78LtcWunAsf3HnrMZS2B1kiBHGR3rwP4nQ/DlbWC48GXpn1Ca4la6WMu0ZQ87vmAwS2eAOh6VjW568oxrO6XbbTa/oaQdKleVKNm9z0/WLHwD4ck8M6Nq2n3abdF0y+tbG4WJ/trTQM807SKFIXdgIjhuBy3SvMfin8WNZ8eXklqym202Jh5dru3FccDc38RwBzW38dLnT4/ilpsOi61DqkFjoOjWouIWLR71tEDoCf7pJU47g15hrE1vcX081tD5cZKjb7gc/rk/jVRS5tBVpNw1eqZHaiOSZVkPGN34ivuD9k9bH/AIZ316XVNSn0e0j1q8Ek0Ue7z0kihj+XLhUILbdzYAB43Hp8ceFdLt7qeC4mMwcSA/I2Me9ejn4gR6T4G/4R9dYu5UW7e+ks/O/dG4b5RIV6FtoUZ9q3o4n2FR76ro7f5nXh6cY0ueo7L7x/xF8QSaxfz6fp+qXs2jQtI0SznLSZO0tknLZOcE84Ndavwh8NeKo/Aul+F7i5h1jWQLfVo9Q+WztCrFWlMmNwAxnB64PTgHzHR/FUeszGLUtHNxFFEZZpIU5hRTwT6DJ6+9fQvwO8YaJ4s8UJ4Q0fT4LrVrqwu1tI2kx8/lnBJPCBQC248DBJ6V5WPjeHPTvFxu/XQ9LB4iNJ8sff5tLtba+dzmDo/wADvCfhjXLHT7EeKvGbaxNo2i27n92IYwN148QG0b8tsUlume3PjfjnwzPpFza6lDpZtIrqPd5SjIUgckYA/wD113qeG5rfx1NqWvm1NzZTH5raRXEgX5FO5flYYHUcHmuU+LHiOTXtPsNSsDeW1sN8ElvI6EQzqSHCMgGUPBG7kc8msMLCUZJ333uaYx89JyqLbaxwOnyXl1LPGt9cRRW8ZOPNbHUYA5wOTXpXgvR9fs/H3hi4muLy406G+iWG8QsUZj0Ut68Hg84HNeYaLqTaSksknzxXciI6HoyqwY5/KvWfhxqcFx8S/D1natbSRyXE91+7bIiXynbbz3AWvYV+ZHiR5PZtt6m/4Zgm1z4l3cJtri5hZba3MUKktKuASo9WIz69a3/HkHhn/hfvh608I6fd6fEIlkv7W4GwwXO0mVAgA2qCoHQDgehr3z9lfwTpMHxO+EWtWtmi3up6zJdXcw5LiKU+Xn0wEIA/xrM/aC+Hvi6H9qjX/Fmqw2MEKS3EkwjXZI8c8jtESpGMsrgkj3rWd+Vs4UrSieAfET4f6lpniS91zVJhBDdytLDE6skjLsjZXAYf6shsA99pxxiuLksri+uI7WxtzPcSsI40Tks56AV6R8aLjxJqXiKFN2LZoAguLlWIbZlcL/e6YHPAAA6VjfC3TbuH4g6bNfXnnwu0kaxiIKisyHa/qSD0NefRlKTvM9OuqcIqNPtr6nnPinT9a8P3B8O67amKaG3jkjWR/njjbewXA7ZYn61237J+iWknx20i8juGby7e8mRdvBzA2T+tSftFaar+I72/gjRZGaC3Wf1CQjcoI64Lcj1rc/Yx0SZvi9b3kz7nj0m+ZueMEIo/mea600tDz17zufXuoWay65psJ3Hdcq35Mv8AhUfxbtVi03XboSFXTw5fRrx/feFa3Vs/N8UaenZZM8duSf6VjfGSZV0fxRHuI2aEifdznfdwr19Tg1jNfvIn1XC6viYf4v0Pj6SP5lX1Ir13XoZP7F8uPziw8vHluFbqOhP0ry77PvvEj/vSKCfxFeq+JIYVsFjmaEIZkX98jMueccCvJzZ2UfmfV8Q3vTXr+h86eNdV0G/10brG9uLlW2STSTbwuOOxx2p+iw2UsMzaajIgJXifGDtz/WtTxY+pW+obrHwfbG2LSK10tiy52g8g49fWq/hmFLm1eSa2WEszfILVtwO39aKL/cp2/E+ExT/e8u5hWceveTLYDUEjgkuN0qCfKvjBAPuMV92f8E9Xu4bRJppmuxD4qAiTzNxOyGI7Vz05cY9zX5+69qXk3y2MdzN5VlISqn5QC33sDt2zmv0O/wCCdMcU3hTQ9QjlZkuPEl5dMypkgRRxbuByfuGvUwsZRftGujPVyLlVSrfpTn/6Sc38Qry61PxL4k1m1s/tSfb769t42XPnZnfbjPRirH0xzXt3wfF7ceDkmOqSRW9hetH9nhk/d3SSbHV5F4GV24GM4wfWvYfiH8Gvh34z8Lwa9Z6QdC1NxNc2MGlBIJ764XeTE+flkjYDODg45zXkngTwhefDjRtb8K+KFkOq3GrNqFnI6lhHatANyRPztUEAEDAJA44rwsJO2Ipwn8XMtN3v/Wp1ZM1LFRUVs7Wt9/3dz80fiY02pfETVreBpHmj2sgTltpj3cevU1di8O2uk/2ZpF5faXqfm2xuj9luNxBlyFgckABkJyRVmXRZ7j41zaozD7NFaiWQZI2/uQi/q36Vj+DrrT3+JgttSUi0uZZLWKReNjMCEY5969irU9pWlTXRXPCxeHUM0rVOrk/zMT4rS240Pw3rmnCS3u7ZZLGeRG2v5iBf4l9ga9q8B+G9Fbwro32ySWS6uL6yO7zSTISqsTz3xk151qXhGTVp38H6/erbwPcieO5CKx3gsD34zuxg+orr7bQfE3h1rXTbT4mXiKmxoYms4D/q1ABGRngcV4maYepXoRpU5WabfX9EduUV6mBrSlG6v2Nr46eErWPwbLHpUs8dzLeW6KSxIx8zEcD0WsH9nJJP+EYaRmEg8yRQoPI+c8mk8af2v4h0/wDs3XfFF3PAhDnZEkW9umW2jngn2q98HLG30W3u9O0+dpI4m43Hn5mJ7VGWYaeFwXsK0ryvc68xxNTG4lVptuytqe9eKdWbRda+Ht8tk94bTw3HILdDgy77pyVz/Dxk5PTFfWvxV1DVtD+FhhvLGzibU/LiNnHm4PmySA4ztBO1QCzDjI44FfKl8tlJ47+Hdvfuqwt4Zso5AU3q++ZsqQOoIJH419V/EKOaL4b6nd3Oly217DqKQt5mVD7JlKvFuOREy7cfiD0rHiBRlisPHlvbku+tm/yvuehmrUIL/Avnp+h4NA0cx3IxfA/P6+9ZPiDTTeQsWUbwCFK+/rW6kcTSm4Kt5h3Z+hOT+v8AKkkSOTHyhlavVr01Ui4yR8HKN9z5j1rw/JDrkvh3WrHzYJ8/Y7hYyMtjJUjoSPatjwla6PoMmlaPcaxcsmo6nFCr3GBHa5G1snqATj6fjXqfiDw7Yyakt9NpsNzJwYWcsHhx1KMD8p/OvJfipoLWek3s2irIsMnLRMNzRY/iBzyPU9q+acMRhay5V7tzgdCdKfPDYwfiZ4TawvfOs1zd2mku2pLuVfszuokWPk5ZggXIHfI7VyH7L/7POl/Gb4o6f4YuJrqWOPztRv5o/lS2gQZJ6EZLFQM+tbGsW91e3Vxrl9Iz6fqtlaPMsn+sSYHYzc8tuL9fqa+gf2evE2jfCn4G/EafwRprW+oa3G1tb6/fTRxx25NuipG7MdzN88sioq9SM5J46sbjqmHoyVHd2St59fkdEocyU5aI8P8Aip+z5rXw/bUpNP1W21fw1qsHl/bYGXBjfa8YYA4yQVZSpOevrXkVrrw0m30yBokhTTtmnvGAP3bDPJ9dxJc/Wu11/wAceNvBvhH/AIUbeTW08GnXEOsW90zN5qwm2aRISrAEY80tg8jpyMV5HqtvNewav5MhLswlU/3mCAtXbgqdSULVZXXR/qYUqXLq3cWa6hi8Sah9pjQI9wFZwciTJzls9jn9aS90WOG8vNWh2Ca+YvuOMRQjGT7dKZHb3HiLUNN1D7GtsGsLZZMcLJIoMRk/4EUz9c1y/i7VNUXUrjTZpDHGFVfLB7Yz/PPFezTpylaEX6nRUVT2XLb3G9/Mg13WP7SZbWN2NrAfkH95v72KySUYetQKzL93mlyR97ivRjBQVkYL3USZVRtY0oZdyj1IxUD53UsJ/fR7ugdf51Vhm9pLf8TGHGOJGXFdT401RZIYLOIsZF2swA4+7XJ6c23U0+YY898V1Xi/TJFgj1GGPcpiTzDnocfyrKR7uGdRZdWUO6ucht3MzchThvpTpvtCxblLbPu5PH+RSSKzNuZdvGQKdcNJNCo3kgdF7CqPCvcihDbsYHNI2+Nsc89MU635cK3Ksfyok3bvLXJUN+lO5Jbtwskflrl3ddrAdz/jUEFrdafez2t9bSW8qBd0cgwy9xmrml2dxeSLa2MRe6mYRxIv3nY+lS6rY+ItJ1CXT9e+1kRn5GnQhWPcqTwa0hHRsbWx1fgO4ZVufm7DNUPGWo29xLthmD+XLgjHTgfnVfw3eJAk4bncMbfXpUqeFPFfi6SWXSdCaK284r5sgEaDj+8evTtmtORy2E3Yn0GYf2tCwxhlIA/4Ca928RX274fyrGww9mik98/LXhlrod14Z1KCyvLiOaVQGJjzgZyMc9a9d1u6H/CvwzN9+3jAI+q8H8qiceVanu1PewNP1/Q5LxPpv9rfD+3hWVxNbKZVx0ZgTwfXINeNQxh2ZW+VgcV7nbS7vDMO3O35gT/wI145eW6wahKu0lWY7ee3qamOqPGqq2p9qf8ABLL4Sw+Mfi1qXxG1SzE1r4NtgLQlcr9vn3KpHusYkb2JU1+o811r0jN/ZelwpH/BJdzshI9diqTj6kGvAf8AglX8L4fCn7PMXiyZWFx4j1G4vfZkGI0PvhU4+pr7NXS9NjbzPsUJbOSxUE/rXtTxcMG1RUb2S+/dnw+P4frZxXlieflV7L0XX5u55mv/AAljqFkOmyN/sJIf0zXJ+Ef2fvA3hTWo/EGh+D9PttTjkaSOWG2mxGxzyoaQgHBOD2zxivf0WNMeXCFB9FFSZ/KsJZm38MEjpwnDdfCxlCGKnFTVpKN0muz11+Z51dWPiBpEtrLRJ5Ny/LLIu1FYnHzZOcAAk4HPFX9N8N+KrW5guP7RgRUkVmURAZH8Q+8Tz0612u0bi3WlrCWPqSjy2RrQ4VwlGaqc0rrbVf5FLUIba8/0NmCTyRko23JGO/8An3rxb4uTaHF4b1aDxHM1vqtjp9y1pHG20SMXiTcp687lx7M3pXfa5cXEnxGtNNgufKL6enIkXK5lckhSMnIUDIryv9rNYLKPTdQkkxLNp91Bjs22SBv8fzr18gw7nj6FFya52npurf52MM35K6q11HWk7PtK6/NNpn50+N9H8QafdHWbHWi9rFI7XDXkoIgychg55Y+gHJrVX4peIdQs21CDXPN1GzS0vLC9Y7Wh1TT0MmnzSd/ng+02MpPDKISfWoviBrCx2/2WNiu+T7Rt6jOMAjjr/wDXrynT5A2tXeuLChXSLRZ3V+VkleZY4t69HVSxbaeCQM8V+oZvgaeJvGWuunlc8/K8TKnFO3Q7vxddeG9ZvL24h1610q08x7rS0uAzRpb3i/aXswVB2NDdCQISNuJMZrB8PeM4tJtY47nUoropxIJJEJYe+T1560l18UPGV5bfZZtaIhGAsMdrDEgUdMBEAH4VQ/4TnxLu+bVZME7uVQjP/fNZ4XB1cLHlUkb4itTr2Vme6fD3SPhP4208XXiLUp9Pmup1gj+zy4ESMkhWYgKQw3RYOccODSeOP2fdS0/UbY6PrWn6zok8by/aZJBGEwu796AclduWG3OdvavI9E+NHjzw7JEdP17esDbhHNBFJH34wV9z0x1NdrqHxY1jxVo2j+Kbmb7CLXVH0ue2tJCsED+WJbeZAehaN54zk/wCuGf1+jVclUvF9Oh3UlgJ0lGpTd123+84S4OmwtJD9gsnjjJ2vGuAwBxkDrz/AFrk7fxJqWm66WjhbyjysYMibR2A2nj0rstW8N2esavqV9aRWl6zqJIYpFzEH8w+ZtQYBbOMZ4Aziud8Z29pd3UG7Q9Jt5bSNY1MdiqZUnPzY6n3NbYrEVp01OnZW+8xweDpSnKEm9jojrTa7Gt82r6q8n3SJNQmLo/p8z8etev+E/HyfEjTz4C+I15ql4kUR+yX8MitNb7RgHBUlse3Ue9fOGg+ILCzuEWbT9P8qQ7ZN0cgOM9chxyP6V7B4O1DRdJ1iDUpLGGW2jUi4kt55UKQnBLBg5GRgEDv071hLEe3pawXNHazs/kZSwfsKnLzPlfzH6x4avvBM1/pt1cS380Yiu7G6V1EdxabisjDC8kZU9iAHqh4f+IGqeG7y4mjaQ21zukuoY7ho8yhSqSA8rxxkYy3OCK998baP4b8afBy48QaDG66l4ZeLUpo5nLPNp1wfLlPPOBnBB7OD1FfGXibR/DOm69qEeveOtRsY45EFksd4YVeArlWCYySSCSfpXnV82pfVpSxUW7OzV/68mbUsDONVexaXnY9Ln/4Qn4g+Hb2DWvD+pzatanbpTXN0ryWQCj5Y5f9YEc7ht5QAjArwD4peFJNNX7dpdndRafZWTQSwz5Mlo6SbtrZ5K8khgAMVtHWvCunSLdaV8YNbiuIQfLb7P52DjHUqD+tc8nxX1ZtSe0u44vEEBbylmSExSyBhgrsOQTkkY7/AI183UxGVY+Uue8G9nbb7uh7MY4ujFclmuq/4fqew6g3h7Qvh+8N94bePxTKsc9tJNqCxb4WBY7oWbcScpsIGPvZzkV5rr2sTPZ6Y00wS4utshj2bghUgkEjoQeK7C+8QfDz4teE7WD+z/7P8QeHLUWiTBP3kqI5Plzpjd8q/KDzjbgYJIr6K+Df7BHiP4qfDHVde8VzXXhVPsMk2h3bouWuQ4ZfMhb/AJYBcgtlTnkZxXyGMqPD1fZVIpX1TV2mu6fb8j30o+wjUpyvfS2zXqfAHii3ltvEF5Cs8UiIylZckkBsNxnrg8H6Vm+TEsgBO5hyx7Z9q3vil4N1bwP481XwzfSSi601/sl8rsD5dwjMrrnjjKkjjkGs3T7/AFbQm+1afFB5kkZTE0Icg9QVB79MGoULHJa2hrWuhXFxp82oR3UO6KNpBCYj5kqJgs+D2wRzX7Bf8EqdThvP2YZbGPhrDxHexsMY4dIZAcf8CNfkbFeXVnp+r6lHp0c6xx/ZmdbjDWU0kQWVwMcxsS4wOhxX6kf8Ej52h+E3i3R5nHmrqltqHl7iSiTQlVznoSIc/lW6hyxGtj5Y/bEk8I+Efjt4mPiG4tomkuWZbb+zxPNMElk2nLZCgbyOMdeTXyjqVlp2ta29j4Wt/wCztP1CRbiyku7UxYlRSFhViWGGboc9T7V9df8ABSyz8K+Hvj9Pr3iGxmvp38z7LZ8rHMSsb5dh2Bbp3zXxzqHxY8QajfF76GzfTXwjaYIf3Hlj+Ff4lPowPBAran8CNKvxD/FGlyanDPd6hq+mreRztcXPlsBHAzYVoeOS3CsMAgncM5rI8YJG1rol1FN5qvYLH5gTG8qcZz1P49KzPEd7Z6hr17fWMKJb3EpljUKeNwBIOe+c5981Y1JvP8NaPJgAxvND0I43flSk0Qme4fC7So774a2N3HpUd/cLLLAytdtAEVWOOR16+nevPviZZRW/jrUrVY/ID2lu6Rhy2P3QBG49eR1rv/gNqBl8DT265Bg1Cb9QpFcR8aHaLx0J9u4TWEZODnOGYVvOF6HMZc3vWM7TdfsdN0uwjvbhULW/JLHJxx0APpVy80/+3vE8CWc6r9ss4p0fsVC89fYVwF9dQ3UNrB91rdXVjnrlsiui8O69IuqaTIrIn2KLyC7DII59OvBrmT6Ghh61bT6bqN1YzSeYYZmUEHgjPX1qvEqNNub5g3UVr+Jvsd9rd/JCZA7yeYrY4YYH5HNZVntW4UPjg45qJaMSNTTbqHS/GGh6lGsnlxXFnO/BycMu7HHPTtmvZvgxpVtq9j8QfDbwyCN43MakFGyBMq8HkcoMj8K8L1SZlk0q4VjlIl/8dkYf4V738MNVks5tX8QwyCOfU7qaGSNyHAjMhf0HOZG5oUW3oWny6nzpbs0NxbTHgo6E+2DXdWKwaDINU3ONSaMrH2+yR8/OM/xsuMf3Qc9cVo+NvB/hvSfECXmk2ogsoAd1s0hcPMMFSM87cHJ57D1rnS8s0k09whkaTHDHqTzlq15bOzM3LsU7mYysZpHO5sqq9lHfr160+GONd2G5ZfwFRSRzyM0pjeVV+8+OAe/TpzT7NWeUQ+SDuG0fWi5L1Et7Nr65dckbeN2OmK6PSdQk0dnazYqrR+WyD+IdeR0POOtV7C08myluDgYyqgdiTyf0qWCzmlhIhjLyNzhF5x1r1MBTUY+0fU5K8uZ8poW/jPxFZxxw292wWI7o1U4wc54HtWZZyy/bXvG5m3+Zu9WJyamXQdak+b7BKN3PzDGfzq1Z+F9Wlm3eTEijkiSUDOPx4rtk0jJJIq3s0twzSyqCzMSuPeqcm3G05JHWuxbwffrZ3DXViUI8tYpvOxFHk5+b5edw6YI59aqab4A1/VdQtdLsY7ee7vJkt7eGKTMkkjsFVVHcliB9TUc1xqSPSfi1qlj4b8L2/gvwNfvfaVe2t1Dey/aVVTKs7KAyBMMYxhVk/iXGOK+WLq3aG6eESBirdVORXsHxWt9O+HupD4eQ3U11eWEG3UH3Aol3kmSP6LwOM9OtcZ8JfAc/xc+J2g/D+HVrfS21+9W2N7cIzJApBJYqvLYA4A6nFfJ4erTWGVS7cbXu97dz1ZayPYfA/g7x6PhLoGreG9aOkW98LuS+hs5THLPa+Z5aSSIGBkBOcdQRXZ3HjfwLp/glfD8Pgq31jUDI+67uP3aWrbQvmJGnVhwcux5IAHq34han4J8Hwx/D3QdVm15lt7e1aaSDZGIrKVlj2s7kMJAu5gu1eAAMEk+O65qdv/aFtq3hry7qG5u9rwyR/LHOwJ2hcjIAIIOAuRgZA5+UpwqY+q6jXuttrTp5jTlN73Oo0bVk0ZpdF1Z5BLq0O+OOOVpJEnbhIyhGBvJUkgkgY+lfaUPwD/Z71D9krSPHvx01rWbXWb+4e4tpdPkxcwLJOYUi+ztgbCYmDOwGDk54Ar4GjvrXSbi1E1x515psxmhdgMh+CDkDJwQMAk9Kv3ni7VNcuC2oXV1cyu2WeSRpH5OT16cknt1NfS4LBRoP2lTc9rD5bPlfM7f5HpXw30W2l0O28O2d1eRaXdXpYRuxV5IBcF1VwOAWVVzVbWPF9n4V+GvjTQb5biafxDGV01FU7IijRIzuc/KAisFA5LNk4HXlNH8eWfha6S+a+QNCQ20yeYxIP91MiqGq69pPjKzuUSG8t4rjYi3EiAYAcOyr7MQOD0pvAYWtipVcXL3LJpf3lJNHsyxWKwuW1sHh7Sc+VRW1vi5pfc1/SOWtbqbTfCFr5MnltJJOxPtyM5rhJ7i4ureYXFw8iiT5QWyFJ5JAPTNeheKtOtNM8NxQw6gmbeB40jcEPJublgOnc15w3EPy8bpz+gFdHtI1akpR2PnJQqYejChU6X0/A7rQ7yTT/h5rNyWwzxtCnsXZV4/AmrXhr49fHDwtpOn+G/DPjKex0mx/dWsQt4WVFZiTyy5blieTWPPIYfhntK83F7Go+gJb+lUdNLfZ41Kh2YDaE+8Ceg+uaqWmpyRm2lG50njTxdb+NteuNQupTJO8pDXyWMcTy4HWQQqm9jjO7nrW/wCDPG/i3wzp723hG/FmJozb3lzFZQo3l8lYgcFsnJbcW3Zx0AFeZ6zeQ6XdNZ31hMtzGxWaIttww4Ib8a6Tw74y0uzuIobKwnltJXUSGZlWRcKBwqkr1zgk5wAPWlHmlbmehXup6bnps3wxj+KOmya/qGqXFrAFe6jUbG2OfvsXI3Euw5GcDPFePePvhvdeFby1js5pbyK9LKgZQHVhjI44xzX0Xo9/pel+E5tctbV2trdBK0QlRMkkDozBBgnO4kAcmvnXxR401Pxp40t7q/j8m0hn+z21vFJ5igFwCcqcMSe446Y4repCMdjNSvI3/jonk/FhLFpCwstL06Hn+HFupI/WvKpiSXY92Nd38TNch8RfFTXtXtZvNgNx5UbYI+WONUxg84BUj8K4dox5PJ71y0VyxS8ka4h8135s6Hwvoy6slx/ps0bWsHmJGjEbiOvT3IrJuY2t1likyXMm31z3r034AadDfa5qX9pxs0Eli8KEAE53oT1PHb86yfGvhmG6+Jkmg2O6O1aRI1YgccZc+561pGS5nEznGUlGxa+GNtpV7ouoaLdWreZqbKJJ92MRp8wUd+SCT9BWz4B1z/hErPWrjS2Zb/V7Y6atyPleO0LBpFJHOX2qp9VBHepdOs9D0nx1FptliG0sbdnnkZ8kOEJbGcDgY/GqVwPD9na3upWmob2jh4Rpd2GP3cqMg5JA/GuerSjKp7uzPZhXjQo8stJLQxW8bA6OZpIZn1pmdY5kLCOCJXxjbjDZGeST0GBW18LvALfFyYaTNqQsreGQ3F0q7TJ5Kgs7JuONxLgZbhRknOMHnRNqWn6TcQww6TGssLSNHCzSOCc5YZ4BGT9MnFWvhnql7pK65Jpcpgu49LeUFTwdrK2PxxjFbfV7TUZaanPLFycW272TOf8AGWk6Dp/izWLDw3MZtNtr6eCyO7zMwIxCNv8A4sgZzXp3wF03Q9P1a61rVzM1zNoV4dKCx5j83yX3Mx6jCA7T0yT7V5UbGO+1C523MVrFczrDbNcSbI497dXbsqg9fSvoe38JeJvC9hoFjq1kgg0XwferLNBMksQlm8xgAyscgrIuPrXWvZx/duVmu/U8j95P94o3T+5H6ZfsK/DXwjqXwQ8E+NNS0C3n1mxuLuWzvGUiSIEkADtjJJ59a+bv2obXzfj9rqtJd506WPdJIwInYxhVBAAHyKdo+hr6p/Y58QWfhf8AZD8O6wsy3c9npOo6p5KseVSWXAJx8oJQjP1xmvzp+N/7TZ8UfFjXtWm0KC3827dI4FuWb7rEZzjJz6VhUrRg3Dq9jqpYStVbqRWidm7o9x+IiaDpv7Ptkt5NZyXmpaTFKbaVEkkDNPIiOuR8hOOW6/LxXx/FqNxpt+W0t5Irm0BaOaMlWV8YyPQDOM/Wuw8TftL6h490LTfDUPgfTjb6Zpo0stbyTO0qBtyyOezg5IxwOa82u9am0rztQutBmhWYYZ5mcD5uBxiuCKkpbM6pYaXK1zR+9GTr2pNqGn3d1ql4bmT7SuWeYvKzkKSwTtk9W9q+lv8AgnR8O5PiR8Ttch025W3utN8NyTxLICY5GaeNSpPVfrXzJrektp8aarq3h2+ggu5F2s6uFLEbgD3BI7HFfff/AASN0gp8Q/HmrLZtHCmh2sETbTt+a4YkBj1+7XZGcZvltY5XhZUoOfMn6O56lceDdX0Xxf8AZ9V06WCWzOJVK5CHDYyw45yMc968x+NN1jQ/Fdr5eCtpp3zEHB3XLfhxtH51+hnxLsY5vB+oW6RgG6kh3bRyTvX8+lfEf7SvgX+wvh/qviD+0llOp6nZ6f8AZQpBi8pWl3E9DnzB09KwnKKrRiz6jhJr6zBy/mf5Hxhb2fm6lbKuSzToAP8AgQr0zXDHCIftUlwgafAMON2cHHXtXE6faka5YKvX7THx26iu78WrFvsY5pDEDOdzDqPlP/1q8vNVzuKPp+I3apD0ZzOuhm02Ufbr9kCngsu3oevFcGtvsi+1SfaHQtwd+Pbn8a9B8QLFHpdwsMhlTbkM3B+6c155cXDNClqWOC+f8/lXLhKSjBnxGJqSc0cdq2j6HcahPLPaReZKx83dddc9c/pX6If8E6tJsbPwz4Mjs4okjN1q9wdsmQP9YpJ/IA/Svy51iFI9Snj2KxWRuR9a/UD/AIJ521pD8MPCkN9DK8U2n6mTHEPncyXUyYBHTORz7Gvfw1OUIybbemx3ZRLnhieVa+zl+Oh9l+L7Zr3w7arBHDpWrQ+d9hGAz27jKs0UZIEo2knBGNpzxXk/iqd77w/cX2os91PLcXP2e5e3MJihxIPK2MoK42987tuc4xXqPjDUNdjm09bOxR7q8MNzGLqFdlhCjILmPfjKuyMdp7lcV5P8YvFUmj+DGt9c8yadDdzvNDP5o3BSgQZRTx5gOWAA5HI5r5zDz5cdTd1q0+l1387f5dDfh98tanF9X3/r/g67n502PirT/wC1jomWWZWO51wF3KF+UkjknP6U/wAb+D73W7JfGC6eFOkCRVjQD+PbiRsdhjke9dtZeAPhTcTCWPwn47vZXkMu46hCmW6n5RFjHB4Oa7bTfiB8OdNml0IfD/VbiVP3TW82pLlfYBFXB5r1KGX4WOIniFJOTfc78TlOKrV5yVSFrt/Etr9T498XXI/tu9vbG7iZ5J4nK79wUgZOCOBhs59eKLPxRqOpahHqmo5+0sfs0bDO3aDyVX619geLNV+D8mvXGu+J/gHbLqGrqYZW/tJoVmCAJjZEQowCoJAz0ro7jxd4b8ReHtD8KN+zlYXWneET52mIZirWe35d3mLtds553sc9811ThQkrc6121OeOS11+9VSFuvvKx8mWfhTxJrml3erXunarHBZRySzBbGXdtUEk5KgYwM5HFdtpP7J/7UGn+DYfFFv4et9IimQ3Xky31sL2VGXcA9vIwZWxjCdcsMgV9J6x+0L4lvLWf7d8LHlgSYtMPtNxIEkyfvBfuj9KdffGvx148jXT774RaXqapGtyFu45XGJBsBPHLkLgg8+tckIRcL1JQS9W1+SKjk9betWgvSR5Xrln4003x78NdNsLRjrtjomiR3cc9tkQtkF/MT+EAnLEdMcGvqX4rXvijULWS7k8LwpoVwsW7UkDljLuOQx3YGWGBlemeT1rwvwLqepePPjtpfiXWbG30EW8cKTQPaSQ20UVsBs+Z8CNPlRTzjBr6F+Icnh3S/B15o/2wQ+ItSuor+8srm5ea4J8wkcnOxFU/IpIwp7mvPzWaljqfLDmSt081rfpbc6s2r7qCTaildX7a9tPPbueMiHzJWjLsE78kYNOkSONdxlQKvC49DUzWscjbWzjb/kUrWq7ixClQMDcOn4+lejJ3PhEjB1Dy97PIz5jGRnI4/z/ACrn/iDZwW9nHorQr5sKma9+UbvOkAzHn/YTapH94vXd28NvbrL4lvIV+z2TCO3jI/4+LzbmNPdU5kf0CqP4xXlvjW6vLXTLm8hbdcNktJKNxyWO5sd2JOfxzXn4mUacHKXQdj57+KWvXWh+Ix4RjXfFpu6zt2CgFraMsI2JH3myy89TgV6/+zPplhrHwK8bfELxtpf9r3ml6zbNp+lyXDRQsyxHMsijIyFkIBK8bR71xnxE0Ox8TavNqF8sCPZeS8DfcyJDtbBwAxVhG2CSTnNTfB/xpb+DV8U+DtY1zRreDxDpfnrIt8kvlPb7nyETJkzGz4VTkkV52Ih9YwjjRWuj+X/DGc6d6Li/u+491f8AZa0r4sa74i8bfEqwn0Q67HFcaPfWV3FLssvKCCVQvySLsC8tjdnoOtfAOsXENvrV/NZyRizsbpk81V+WdELKHI5wWCrwK+mtN+OWt+Cfh54q8D22qahFDqWlxXnh25vZhLeLb3kIj+zuhAVYxEA4KEFCRgGvk++W3WzutPhmcPHKrTHrkeh+h71eS4fEUpTVaV46JHLGHLUdNM1tJumubqzjXzVitbhY42C4VgUyYz9G+YfU1wvjyN5vFuoktkLIFXjtgf416hpcccPhfTrhYWQahqSyEbvlUqCBj64z+VeaeNG3eKtRxk5m/wDZRX1mGS1t3PcxMbZWv8X6HOfZxzyTStGxbcx3GrBximHHHzda69TwCs0eaRQqyov+0P51O2Pxqu/EgI7EUIDVt2/4mAYdPtB5/KvWrhYZfC97DIhdpLdMKMZP0z6V5Hb5N1H0O6bca9E1qO+k0SG6tJWAt4Q0sak/OmBnI7+tRKPMrHv5fPlwde/l+Z5/IrKpkdt23jnovtUXSNNzEDPH0ouGZnc7sBu1ClWiKsSCvdecD/8AXVJHg7skjdlUNHjccj6e9Nu7hppTIvy564o+YLiOSPOc5PahYw033hg9x096LdRWsavhn7SurW8tuw82Ng67uoxXoWtHVvFUMVvq2+SOGTzEUAKA2MZ9+DXIfD+383xLZIq7thaSQ9lAU17lHII4wvylMbTwB/8AXrWDktjtw1alTj79NSfmeTx+EvskgdbaRTnOecE/lXQW154otbOOxtbidYVJ2gJnGf8AgP1rsrrUIIVZWYu27APp+FZ8mqSBlXeQo9D61anJfCbvGUVtRicNNoeqfaPtc9vdSS8fM+8/nxmt3XrFLTwXLqWqyTyTQLGYwWIVMNgYXp0PepvFPjSfSHt4be1SeS4QnLSY2+lZi2/jDxFot1N4i0m4tPD147Wi6iI9sNvcniLfu58rzNqs4HHrxS5Z1pWWpFfG89NQ5Ul5HD2GpXWs3kWm/Z5ojPJlXWXIXg/w9PTv2qjq1nPpd40e4ykr/EO/0NehaD4Ij03yobgNHqib7cwt98zjOY1Hc8YGOtb/AMPPhXL8VPix4e+GvijVG8PHUHmkurprXLQRxW0k/wBxyuS3l7eWH3hWNGSdSxnXwsqdNSk9z9nf2NbrSdL/AGe/Cnhe3uovM0PTY0lUMPulQ+/6Hd1r0e5+JvhK3u3s5Lq6nljwyrb2csgIPAwVUg/Xp+VfHPgn4kWfhTwnpseg+H445I/ssL3UUxje8smXmCWMkrnGCCCMY79/TdB+J2j2dvLY6bqXiKGG0vriAquu2dsABKdwWKZgwAJY56HaMHmvuc04blSrSruLtJ3Sul6vrpd6bM+EwWb1ZxVHmS5etm+ummnTfU9vk+LGkxXUlrNoWujZIFG3T5HYgpuyVAyvUdeua5Hxl8erXTNUjtNJhu4SLUzOt3atEx5OCFbnHy9cVg+H/GPn7LyPVvFN1fzvIGtRr2mmN924Lt+YsSqs2PdcmvMPHVvcXniy4mWz1plhtRbtLq00cszsmVIDIArDBGMe/bFLJslwtfFcmIp2SXfr6WOXO80qUcK4xr+82ttH8mmdzJ8e/Fsfn3FzfRMkqQSwrEqgKsilgCex46dqybz47eLJNrNczgtkqvmHB9+OvpVDwp8LdU8TadJPp+qWixzSKFVFLMWVcbTx7+tcl4o8Op4a1CfTZJru4azxHNLFa4jjk7jceTgnrj+tfW4PAZNOq6MYxc10sfE18ZiK1n7SbXfmk1c9Os/iVqK6hpWo6kqWt7LpsMskhmVpXh86UAKTwpJV/Xgj3rh/2lPjBp/ip9KtLg2unwIt9DbmSYFpn3RcE9F4A49c81mXUzH/AIRhGYP5+hJyyYPF5dAYB6f/AFq4T4zaHYR/DGx8bnUo2uYvEzaHJYSIm2SG5gO5+u5iBjgDFcOLp4XJcO84jBOdPm5Vrbdr+r7H2fDOX1M5zqjks6rjSruCk9G1eK1187Hzp8UI7mykttRfcsU4MKsTy5X72BnOBkc9MnFcDo8wk/4SK3PDPpCyjI6iO8gJH5OT+FWfEWoyMsOgzXE8slv5q2u992xVJbyuexG4j0PHesDSbiQa9HbyAj7dZ3tkTngloGZf/Ho1rXB57Sz3CxxlHTXVdnfY+jz7hXE8I5hPLcVrbZ9JLuRyXSwtnAK9t1Qz6pbxq0kkSIF4/wBYR+PpWOtxq2tXkth4esprpoY/NnkijaQQoGAZ22g/KNw6cnPFdPoPgnR9Mt7bVPiJY65fLdb2hghhaEJEmC08wbEqw/eHmFNo2sfmANb180jHSOp5FLCSetjB/ta3ZzJDcAj+6D0rrPCepf2n4P8AG2lK3zQWFtrUIx0a1uFSQj/tldOfotdNqUPgz4gW/gjwT4P02y8LTJJPcNbald2irqBLIIpd8W4Sj5ZhghfSuk0L9nvxN4Z1bSnj/s9v+EitbrQLmxiv0dpJbqGSBPKBOWBlMRAyeSB6CvNebRlpPR3O/wCoyjG8TjPBtx4q0O+k1S70e5gSSLzI3mg3Bm4IOw9c56V6VrVn4O+Inh9PEmhNcD9z5ryfZGijJPDgA5I2tnjnGcZNeSeH/i/q+n2p0HxpYzSS2jeW1w3E8TxnlJFPXBGD345rsPh/4/0fwb44uvDtrqFpd6Lr7NLGoziCYkjYwYDbvXBwO4B711VXNS5ol5e1/DqJK/3nkWppa2szxxygSpI26FuGADHDEdQCOa1/C/jptNt3sbi4le3+95Yb5c9iBXUfHXwWljqI1jTIVcbd+1R95D2/CvHIftTXIEkcgwp/1eARwccnjGccVgnZ8y6l4mj7zifQvgnxV448X61Y+F7fzodHvLOfS7pvM27bOcBQZMcsqTeS6rg8gAZJxXi/x6tdRuLax1K/WI6hpTtpt21v/q2MW0K64HKvG0LA98k10fhnxHqnhmGO/j1aWC1vjEn7zlo3AbGSPmKoScEnIzW78WbHw/rsWoNpV5Hcf25p9t4mjWM/JHvykkWccFGdgRkjbEvTFcWPo1KsZUre6187mWFlGNpX1Plxb+bcqllTJABJ4PtV+OJmZZo5Aj55I71ZOq3nhu+lj0u3tYpXjeGUuqzrscYZdrqR074yO2K1tY+J3jDxLawWd8dPhMTZ8y1tEi3YAC5RRtGMDkY96/PJ80XypHuLVXPojSfhBN8d/h34X+I3wb0+HT/iFpbyaPrunx3G0anJBEJEvELtjc8e0OCcM/Tmvqz9mf8A4KIWen6DffCL9pq1ls9b8NQMn224hlZrhIsD7PLHGju8nBwwBDAfN6t5Z8Gfjt4R8D/DWHUdL8F+Vq2sWMKTXVldiJDOOHcKUJR9wYttJGcccAV8/wD7Q32HxRZ2/jvw8s1rqWl3i2fmy3AknlRwWXc4Vd2GzjjjOOleVhamIjVlRxUP3Tfuu6ur/oebg8wo4itKlTldq+npujF/aO1Dw/49+N3izxtp97a6ha+IL5tUhuIHk2OJgGOMhSuDkFSoIIOQK86njms/JttLs4Gmn3Rxu/7wRZAywDcA4zzzjtzWrY6jL4stZL3yANRsY1W8t9uMqOBIg/mO3biqTWjSapZqCsckizeWwbGHEZKnPQcgV6MqE6M1rdPZ9z6Lmp1aLlFamVda7qnh/VoP7NWe2+yxjy3mttjThuWcq3VWPY9sd6/Sn/gjt4svtY174oWepXDy3F5b6bfMzYAJVpk4A6YDAV+eVx4R8V+INJRtRt7Nr6Fi6v5y5fLDOcHAypH/AHz+f3J/wSL0fWPCvxl8T2epfZRHqnht1QRS7jviuYm7ezGtpxtHTY4oszP+Cw2l+T4/0HVFXG/5Sc4zuhH/AMbr85mf5unP+9X6x/8ABWjwLeeJrjw5LZypBjZIZHUsDtEikYAJ/iFfmzN8I76P/Wa5bcn+GFj/AIUqcXKOhVR2t6HnjN+vvWzHIsnheP5lzBdu2Nxzyo7V08nwpMMbSzeII1C9V8nBz+LViatY6bothNpttqzXsvm7nVRtVeAPcE/jT5WtyE7no3wDvGbQtWscZ23iPjvgx47f7tU/jIpTxBpF0y8Pbywk49GBA/8AHq8v03VdT0wyrp+o3Vr5mC3kysm7HTODTptU1K7mh+16hcXAVyw82QtgkDnk+wrb6xH2PsrEOHvcxFqkKx3ZVVxnk/jXU6Tpcn9ipJbrmSdQ5k/554znHoa5rUWaRgzdRjmup8N6xa2+h+TJGWaANuAGd2TwK54q5aZmwRXEmredDGj7EVWV+QcAjJx7isuC6Ekn2qSNVYzM21eAowDx+teneCfhz4l8Vaxb3Wi2Vw1pImXkWF5C2TnCooJbqfb3r1fwd+y34d09hJ4h2zSJ8z/2rqEdqig8j9zGTJ9M0T0Bany7rDboLMI2QnmAY9C+4fzr379nvwXqHjLWNf0e8a402yttEvNctLia1kEVxcQRRt9mDcfNIofaASSygAHNez2/g/TNCVLbwpa+HXjDbRJZ2+0Bvd5UU/jzWtD4V8cX+xrvWtHtYiQMNqQnkAP92OM5J9M4HuKSG2j52174U/ErxBczXUfgrVYfMP7uHylCxr2yzsMnuao2PwK+IDMsc3hskZ+7JqFuh69wGPavsiz+FeoQyx20+tWMFwy7v3sn268fp0toDsjB65d3HqRXoWi/Cua38268Q+LLm9inUefb6naWvlPhcABBkJ9Q4NPnSdybHyNY/s//AAnGjtNr+q+PY9VjQ502FdLEbP2AmM5AH/APwrkPEPwDs/tyS+FbXULO0VAW/tXVreWdj3P7mNVUegGfrX2UfhvBY3gfTvF3h/S7FW2sqalEs8yg/eaTaxQn+6vA961jpHwZs8f8JJ4o8PXe3q11rUUjfpGh/WrUr9DPk7M+FW+EPiSGEQ2sdjIo/v3IOefoMnvVuPwP8QrSAW9rJ4etxwo+YDA/D+Zr7A8ca1+yzpugXUlrNpE16qhYxpt2ZJvqFBYDHckEV4prHxC+AumoWm0q9clQRE+qENg9yqwjr9a6Yym1ZJkqmup5LJ4N+IUePtDeHZsHP/HwyZ/L/PNd98I7u18A+KIfEviP4b+GPE89rtltLbUNaaO1jnViQzBQBL0GFf5cjPNcP4v+OHgu6CR+HfCMGmhGO5/tk1xJJ2HLEKPwFcLcfFieRW2xwhV6eYf6Af1rdR9205fiS6KfQ/Sxv27tYubOG31/4EeArmAqrSRw+L7QDev3WCOhxgE4zkjNZXxS/bU8O614J/snwv8ABjQ7DUZLu2Vh/wAJBpsqmESq8kaGH94pYDaGAG0nPavzPm+IGq3xZI/IAPJIjzn8+lSWetabdRvJrWtXkcifdjgRQHHpntWTVBbP8/8AMfsLvVIwvi19lPxA1r7Bq02qRi4fF5LH5bXDucs+zJ2AknCkkgYFJ8J9W1Lw545tbzSbo2120FxbJcCMSNB5kTKzqrcFtpIGcgZ6V99+JLv4U+MvAp8U2PgHRpZbrRTp9rMqJKEJviNwdVALII2AYDOCRnFfGlxpNpY/FyZLLS/ItrW0lmEMUXlnAhbkjHXnJOK8GFaNZSpONktD1p4GeGpwlOV2znvH3xIj8VeIJNS0jRYtLtfJihS2VhiPYu042gDBOTgAYzUngXzLbTZtSm5eR2WNu4HGT+fFcPtY/wAJ+auu8Lagq6VJYzKxKSkjA6KRkD2yc1rTo06EbQWxeXKKrLnDUry3sV+0MGTc20Y+9IfQVh3msahcqHm3xW275o4jjd7Me5qzIt3eas1ztRmhbGyRNyqn90A9c961PEH9qaxp8Wnxm3ihSQSJDFEEUNjGeK0vF/EzpxOIrVHansXvDGpaDa2kV9qaRpby/KVSUF4uSuSuPY1P4s8QafdWP9l6BH9khiLXDT7v3kowQAFAyoJHXNc//wAIrqnh+1tZrq7gdLxw3kwpub5eQWOOBnsK6vXvDaWPh2XxlcSBSFgWSxeLaUaRyAwb0PJx9ayjGkqikZzninRkpaJffY5/xhJttbO3znZbxIf0/wAK5GRjiL/aeRv1x/StvxVqVvqEySWpBjO0BuxwO3tWFu2+SvcRZP4kmtN2zkbtH5L8zqtdkEPgPRbcEZmuWkP4Kf8AGsXSZLi1vkW1RpnEnmRoGwNwOeT2rR8WXEX9leH7GNgTHCztjsTtFYy6glixZV3SRszqf7zds+w9Ku3NozKDcNS1N4bur66knkuCZWJdwqZ5POPaqf2OG3aGO3aZ5ZVBJYbVXnH44rY0jWmnhkVmBeXJdsnOAPQUXSRtcWob5ESPy4lfCbpPvYPoD6molKSdkWoxa5jds38S6d4fuLvS7WzmisQxvJpUSSOVSQAQr89+cfpXFaeG1rxFY2s0EcAu7yOOTyF2FdzgHb6Hrj0r0XUWstP0P7Lm9t7eSBy6mQPFJKy7UULnlt2cAfXtWZovgPx1p2raPqGueFbjT7eNmu0kkhCL5UMZeRiSc8DBOeefwrGFSXvcz9DapGL5eVepxltbyedezRKzQxtIN7HPcgZPrTtP065vmW1t7czythlRRljyM4Her+hqf+Eb1KSRGYYGfx5/rXe+E4dLttD03WLq3ign33OzbjaIwsKhickhiwckH1B71ak9TNqOiN74drFpfijWDCPl8ybGeMfOmePwNcl8Tium+OrbVLfcvmbJD83csc/pR4d8TWttqd5cTXCqLgyNy3cyMRj8MVh+LNSbUNUNzcEyuVMcaIMgc8c9uK6sNTjOTchVZ8qVjovGel28dxJ4h+1pdQ6nGkyxIRny+Ax45xkGsvRNOTxBb3VnbLDawxSxKZSQmEaZfvE8AAZOewFe1/sH/A2x+OHxkfwx460fUjoA0i5uCbaNgpkUoqB2BBVMsecjnAr9BPHH/BOX4X6j4VGg+HtWh8MxrIkhuobJmmO0gquSW/iwc9eBXBXqxw84xbvY6lV5tZqyZ+UGpf8ACM6bHrGi6f4iN9sSSGFiioGIIG71PQj6Vy+g6lHoq6t9pzuu7TyI/LXq2RgHPQcEmvrL/hiy3uv2oU+Ddx4jN75+oToZLVhC7QRRCbe7Ou1WZT6dQfWvof4hfsJ/Br4W/C/VvEvijwrcabY6PCLh9Xj1AXF1vztREG7Y5ZmUBNvJI6dauri/bPm7g4xoqMX/AMOfnBp/hu81q1itbHTbg3Eyl48Q7sAAsSN3GMA8nsK9a8SeOtX8XeI/EuoT2Qv449OtYm1QRQloGdIoiN8OIwsjI2ExgYOMYr6k/Yr+FPxMvbHVvGmn6fdtpVyv9nmBoVZLpwcjeD8p2KQD15Yiur/bc+HOueHfhDBcX2gWmn2lxr1nbw+RFBG80hjlO5ljUHjGBnp8396p+tOUlG27InRhSm4p/wBdjo/DUM2m/sv6FdLJCph03R7EC2kPlsJ2duoAz8rMSO7E5r897fwtr3iDxZrev2umGSKe4mW3uJBGUVg7s+MsGDYOOnOa/SL4laDfaN8Fbae6kezW0vbSxk09VZUMkNqfnIB2/IUOPdjivlb4R6XaSfDuwv547je0txKPLmMQkLSnGcdeneppS5sc32j+bOqWmVN/zVH+CR4voPw98TWupXN5N4RgSKZ8pci+tw6IV2kbA2MHGQMAjvWtcfD3xVeeI9I1C60DT5bKxnheW4mnRpTGHBIVVz3APXnBHevbNW1LSNHvJrG6t5JJlG7y4ri4nkKnGXKqcIvAGWIzjinaZJoesJdvZW9ulxaqTcW11FOs0fB+8jtnB9elel7VN76nkuhVUPacr5e55V8aVkfwLKv2ElleCOWRldVcFwQ6grgc+pBJOa+yf+CVOmzWln4ym8xvKl0/SXC9ssbk5/ICvlr46WOm2Pw9xZWMVu1zdWkbBR1G7dtz9RX2v/wTW0v7D4S8R3AH+ts9EUfhBK3/ALPWD0qP0OhaYT1l+h9ZeMo/M0Ux/wB6aP8Ann+lfKH7Z3/JOtG0yKBv3urzXDNt4IVAnHv0/SvrTxQFbTVVv+eq4/WuD1jwH4P+I3hy2m8YaC2oR2U9zJDG109vsUt8zrtI3Z2jrXDVlFYm8uiPXyPGU8vlDE1U3GMntv8ADY/LPTdFm/4SCwO1gFuEY/zqP4la5a2uo21v5yZjkbcM9DsBGfTg5/Gv0ntf2efgXa3kF43wy1eOSKbdFvuZZo3K852rKdyn3HPNVtY/Zv8A2Vdct5bTWvAtvBDcXEdzKu29tkeVEdUcndg4VnGc4wa568YYqSfMtD184z+nj5xnThKyXl+jZ+Z2g6f4g+Ily3hnwdpN5rGqTKWjtbSIyOwAJJwOwAJ59Kg1r4H/ABT01Ct78P8AxHbujFWd9NmwGHXJC1+pXw1/Z4/Z0+FviA+Lvhjb2Ok6s1u9uk/28zAIykH5XbnrnrXsVrdXcigR6lp11jqUBXP5Ma6KWFpRVua58tXxc5Suo2R+BmufC/VLaES6lpN9BcJH+/zauMSZOc5A68V+jf8AwT/tV0nwF4VmmcrHY+G7uaQ7MkD7VKTwOp5P5V9peItJbWNHvrJbO1a4ubaWGOSQBgjMpCtyOxwfwrwr9n/4cT/CdrnwHcXFrer4d0a2sbq7WMhJkHzORnncc8575rrnHkozs+h6OTV1Ghiubdw/OSX6no/jjXtctY9Dbwv5K22oXBjuZpl/1UbR5jlJPCDdwcg9QK8y8TeG9Q1zxRpWoSeJLfVHtZXaHRWaKP7QzBt7bgfmB+YtkZ2jAxXe+KNN/srwbNrPh3QLzUEaETDSXRpDIzEFWOPnUrxnB4VTgZrhZNH8I6t4gsPE2m6LqUCTaaf3kd0cwq4YMGDIcNyykZGCa+DxX7ioqjlyw1TsrXfpZpW7npZZ7ONN+z3XNrZX+fvJr5fJ3Oa07xNpPibR/FlvpfgmyvW0BUNmvl7EuYi22QF3yyyZ3sidSuBgkGt3TtP0fUtBtvGHhfwXYXd8YpVEl3psSXRZY2Xy3OA2QyhRg87Rg4NO0vT/ABVHZ39rqHgM3yT6uq2v9myAtcW4Q4uJGdsgLt2lmx94qOlJJpWraP4tuvH3h3TZ9dh1iaG0eOOQRRrboi5dcjczK6gdMAE8cg1zVab5f3MeRNXTUtJ7aPyenT8ztcqMpS5N79XfotL33er37rXpmeHYW8Q+FdT8TfEXwTpOotok8sNtFa2MZkwsYklQFSwBBXktjbgDvSW8Ova2BdaDjwu0Mkc8lnd38b3F3A/KrKmweXGQGYAg78dsKa6rRbHTvA/hnUpjO+kWq3lxe/a7hl835yGJKnr/AAqAB6dzVBdP8I215B4utbeOeDWMXN05ZmubokhjnzPmjH3SV4xyMdMY/WaEeZwg1tyt/CtLOyaSS9N/wNYSbqTjFaN6JLTva17a/N37blu41DVPDNn4hvWvLfUZlNxqbF2WN4wU3RWxij+b+EgFuTyelc1b+JfF1jo/9rr4dkm1a7ZVu9PileNRvJImzyy4OMqT8u8/NjONnxNcab4De98Wf8I3d3yzvbW/nW8zHIDMwdyeBgMyjIycqCaLnTbPxdeR65LrM1vDDc/6DJb3SvGzqpR4yvKsCpYNg9eh4rLnpqSrzh7r1crX1WnLZdPvHQ5acNY3Tt+FtLX8/JroW31SDwz4Qm8QeKrUzzPk3D2afalhWQ4XBlPABOGYcfhXB+MrTwjq3g2LxZb2t0NclMQP2gyCQRKSN2zJQAxgH1xz1Nd14q0XTPF82j2S61JYWFnIJiuFH2wMu1Ldd3Vhkgg5yC/BNcr8Un1STXLnTbHxFYtbaSkMWoaau0SW0kwLR7k2cr5TqAQe3PIrpy5c04y5vebv1so323tr+PU5q04+ynF3Umm+2iWi21+/sjy6SzkhkZZI3V0ba3zdPy4/KrkOkmSN7q+d4bGMhWlC7mduvlxj+Jj+QHJ9+utvA91GqTXljfyhVEgt4rdxuHbewHyAjnA5IPbrVa+0jXrjH/FP6k6QR7IkS2aOGBAeg3YA5/EnJJJr66UmfKRR534ovoJniVo1trS2Ux28G7IjUtktk9WY8s3c47AAeX+LryCSOe1hmTMsTRhuOM9vzAr6d+GvgHwj4i8Q6+3xM8N6c1olhBHpQ1WZFRpmdjIFw+d4/d9gcHjqa9L8T/s4fBCxtIprP4JaRqs32hUaGETJtQkndwx5HA57mvOxLg37KppzGsPekqaWr9P1PzRXVtDk8PQ+IfFF1e2OkQ67Fa38lugleHzbeT5wnBJzbqRj+6a5BPHHwnn+KGjyfD/wvcWdlaaXfR29zeMGubq/EL+W5QllUAqNq8k7jk84H6uan+zn8CbXwzq9qvwm8NEzl5Xtpy5jkuUWQxBsv1/eN0P8Zr89odJ8K6fqV5qlt4M0Xw7fC4e0t49N0svLAvlgHy433Mcb/mOc+/Ga5MNCjXjKMea8Vy9UtVv5nTQw0sR73Ref9XPH/jt8Q/EV54i0ex8Q6fY2N3qWm2l7rSxW4W4ZAXVYXXGIgqDbtUDIAJrw7V7ywkk1OW1dIjcSyFF25OCRtXn2P6V+jul6T4QvdGtIvFVj4c1rxJNm4t1udHQypOeWZnKB2VVYAjdn5sAcVyeqR6b4ktx/wiPhfwja3kN4kTG10O1gTEb7ZXG5DuBGRk8njgV34OpSwkFT5dtNLW9f67ClgGpOMbWvvqfEmjalJdaBpMPmBhBe7to+h54ri/GEZbxNqDHIJlHX/dFfcerQ+HbrTdQhsrO0sbxbo2f2hbWKMF+SDHtABOR06jFfP3iax0W81m/1K60XTp3DhZJZnO59oADccc46jrXrYXGwk3GzQ8VSqLDKg+9/wPAyv8qbs7j+de3LbaT9i+0w6P4cRc4AaEnn0zmq1wyoiMun6RFKw4iSzA59Peu5YiJ5P1SojxnYx6Rk0n2O4d/lt5CM9lJr2wSalFaq62VnHJu2t/oadTW7eW99bafHcXF9IS0nz+RbooAxxwBVKrHoQ8O11PB7PTtSa4Vo9PuXUSf8826flXo9tBfTafDbBLqJZ1EUjiPoMZ53D/Oasy3OsxNtuJ7uETkmHnJK9BkKPpSfaNYsFia9muZt7+WNz7l/3sdu1L2t17qOyjKVCnKnupCaT8FtK1mUw/8ACVSJKIvMaGO3V3XPQEFgM1at/gXoqaxBpEni/UILmcoIy2lAKQy56mT6VtaTbSeddSWV0I7u8t/Llk6BcjGRt5//AFV1R8Vapp2ipp9nGmoT21vtmaSRt0mDhyueTxz6+xrlhiajWju/uNI4Wi9lf5nE2/7P+nyalc6XH4qZ5LaMSSMbPbGAf9rPJ/z2qOH4L6FJq50251q9ZorczO4jVUQbgo798+ldVN40W40+S11W2b7HqmySIp/CdwzG2OSBjOT+NXtT8RWliXMzWkt26KqMkJLFcEYYjqM4rCWIxEXyvr5L7zT6rh0tvxOOs/C+meEbhrWwkEu6TPmtgsQMgfh1rYN/uCfMCcc8VzupTbNaYx27iPduZ2ztZmGTtPpn+dP+1AOwUgAD5vevYw7bprm3PMxEVCbUdjQurjcfN3Dv9Qazrq/ijwzMGYDPvVO91KFTtkfr97jNYmoairKPLfJ3ck+npXQkjnNFIrXWvF+iLfXCJZy31vDIzdFUyANn2NfWfi3xJ4K0vQY7PxlZsNL1d5dOeJYHmyX3AqQgJySDjjrXx54d3XXiXR4V+cvqNvsVT381a+xviR420T4bTxvcXsyXF3dNLawRyxxtuB3EoQN+c/Nntn6V34CrGkpOXUzqpzsbnwp+C/jbw1oem6r8TfDDaVbaeoWz1HUYljudS0yOQ/Z5FTmVJNjY+ZVIwCSBiuT174Xy+OJ5fHmuahaC0juZ9Ns2WP8AeLNayjNvIN2wKyTI27JJBGOhz4t+0R+1V8ZPjV4is/EWueJXh0nSF/s+wtbaTGW2qZDIwA8wkopORjJOKwvhH8S/G3iLxpZeGb7XpJrTVr6M3Fu2NrN3Kj+EtjkjrjmvP9lUrY2M6luVaK3S7/E9vDYmjGjHD00+ZyTb6O3bsfbMn7nSZfLQhYrpMdgu1Dx+lej23wlv/EF54h1rT7y3uLiPVJ4oNMVybm4LSOw8tQMDoRgkfdJ9zziWOmx6bqOl6xFJGtwfPiuIk3vGyqwK7CQCpDZ65yB24r6G+E9uuoahq2m6f4yFt/Zl/M1xHcWJU3AmQBtrbgdm4SnI5+dcYxz+1cRY+vlsY1cPur6tXVvd7X66dz8UwEMNmfNCs/dvd2dnfU4rT/2f/GltDb6obAqGAaNfOZMErli4HGBkj39Oa9p8I+D9Q0rShpd1L9surNCWMicgsegyScDP5Ct3RrfX9L0e302Txtpd9AI3S3ke3UNIOQqqoJ3AYPTPQU6bWPEDbrrRfEHh+S4kiWR4rj5EwRkNkEHHTGcng8jJr4DH59jcx/d1XHffVffdF/6r4OVSNS87LpZdumve3yOb1rS9YsfDd0Dpcxvrq4MUMNnlGTBXbIjZXZgsPmJxzXkHxF0m4stEm8RNo+pxy3WorGW1C6l3DbCHdlLMUbkFS2CGDEV7iviDXG0fVptT8RaZG8EjN9ph3TBZIgVeIxMSMFQGG0DrnBzmvMPERuPHkK+Z4ktY0SS1aC3htXjQLEkoJA25Hyt90cHHbjPRk1WtGtzVEuVSXM1fbTTsdVTCYbCQWDoTfNUVoxlb4npf1d/8jb+GPwJ0/wAZ+F/Dnizxp9utJo9PeOGyt38rcr3EkyzOSMhiJPujAFfMH7XHgLS/BPja20mK1kktbTUbW7s5LhhM5jmhdGOdoIO8EYH90V9++DZLi40OwdtcWVPKTZHDGoBUDpnGe3tXzx+3Z4J0eTw6vxI1bxUmjy6c2n2djGgO+aQ3f7xyV+YqscjcKM8HnsfNlnOInLFYavN+znColHWybu1ZevX1P0nh3LYYHN8DUpxTqU6lPXq7NJ3+R+XevXlqfGUF7bzCS3F4uHIK5UOMnnkZGetTeE/h7qvjPxbd2Gj2wmttAug03nFgDiYRqHK/NtIbnHJBNQfEzQ4dNsbCG31K3kvlaf7TDCpUx/OfLy+cPlcHjp0r7J0fRNN8NfCmzh8I2tpFd+MbGDVr+8kJOZ5rZJVkY5ycOcY5wa8Hg3GulRq0aet7f5H6b4xYKVbHUa9ZWet362f+Z8weLPh3qHgGUfCD4vXEOgaRrky6xq2qaW6w29rbWbtEtqqlWMn7xgcAFizqx3bTWjomm/EnV/F17Fovwj0CwmTw0bbw/wCLGv3v4hZrE1vCJrln8i881QY+UDISPlATFe1+A/Cf/C8tT17xL8UvAtx4jtf9THMtnKEDyD94kbJjMYA3HH8TDutRzDVv2evDc3hvwJ4e1TV9KgnuLiwh1QTeXbtLIf3G/b8qx4GQOW3E9TXv4urKdVU07yW5+V4SnF+/FWj0Vz5TuIvGMNlrngXVPhlpltr/AIZ8rVbqMQS75LdWCtJDtcpAwLo++EBXGSQcV9J+Eb608beCPD8+uWdw0MjQaraXE3y3Ec8EgIkBQLhxg8KACOKseBbvVJvEWkaZ4+17XLHxPqHm65LZ2kEostSjMbqLa5LpxGPn2x5HyqM8kVueC/CviiDTfsfia6kvtSmmWY+TCBtmkTMkMCINqxqxVEAHOwk8muWVezcZfedtOEVqfP3xh+DninQ/EnjC38TMh1DwheRLfyWqmUS6fOX8i9kPXaQgDnHG5SeN2PGdSMnnRtu+cxp8ynJDp8uQR3yuePav0I+NfxS8O+A/i3q9hrFwl5dNo1jaalapb+dIXjtoVliYqMcN5uQTgEt2zXyF4q0Hwv8AEfxdaab8L9A1G1urpL11tpIlWJ/IXzCi8/I5UgbWx1U4Ga97LczlCKjiPhtuebmGX8y9pR30IjrmpeLPBFuuoXIkvYozHHJzi4KnBVv7r4x9a8/0vSZLm6kmKumQyIpXqTx+le+fDH9n/wASX3gm9bxtcjwxJcXoaO3nUTMIFADONpwGYnA9Nue9SX/hr4F+FfFDPea/e6qswdmhkvoUitgB0+QB2fngnpjPWumGaYfncYXlbsjjngMVOF5NL1Z4BdXC3HhxAzbXinCuqcAEZH+frXWeHL5bzSfCVxdPhLbULzw7dsRjNvdLviz9DNMR/uD0rrLrwn8DdasFg8O6prulyXC48geXfkyAkhmG5WB/3cgj3qu3wX8Wad8P/G2sabJHqmj6NLpdw1/bHiGdpXjG9Cd0bbJGyCOi5ziuj67Rrvll7remun/AOZ4Gth48yV1fdangHiXwdqFl9r1Xb5kUN20FyoHzQye/sTkZ9ag8J+HbvXr1dLs47OKSINcGa4nWEsox8u52CnnoOpzXs19ZaT/amsTaxI8NhrcEckD7vlhmlQPtkyDhSWcA9iteRXVxqPhHUbvT7HUIyshGJ1jjk3gdCDzjvwK+FzLDSp1pcul9fvPQo1nKPK90fRGsp4O8GaDoejWWoDWGtkC3UUszQSRbw7mROqbN7D5eTj17ZWpaDperGHQZL2T7HqVxHdTbSvm2yxRsxJbaBzkDJHXFfPh17xA0cY+0TMUPyuI/f1HWruoeO/GmpaW+j6hqUtxbv5QbzIvmKx7tq5Hb5iTnknGTxXlVKU6nL5M8rB5HHBynUhJ88lL3m9nLra1mdVeWem6H4oudO8N6hcmCaMR+dIF3tMg3ryByAwxxjORnOKxbuWTVL+xvrS1Xegf7SpLBd3Q7MdMgnjsfasfT7vVbeaP/AEH92jLLvW3bJKnI+b8MV6ta33gbw/Y3UPiYXazSs1zYJBBkvHImcHPTDk9fSuyMmocnQ9XDU5UYKEpXa69/U4rxhrWsaLq81noviq+a0hIjDTYRjjp9wDg19T/8EsfGGpTftTabYXmtNdLqGj6jDsaRmyRGJM88Z/d185eAtN0fW9bnuvF2pSWcEm0MkCq8mB1ID/L0r7j/AGQ/CvwJ8M/HPwdrngXVtfu9Ue6ktgbtbWFF823dCGVFychv4W9K6auXYr2XtuR8pvHE0ub2fNqej/8ABW2xkf4Y6VqEcjxNA64kXtiZB/JzX5DySXkhObx2yfTiv3K/4KBaH4f1j4e6UvinRJdX0oTyrdWUUxheZdoYASAErhlB6djX5W+MPh98KhdTzeH9AvLGCLJeE3vn7e4w21TivF+sRpvlZ6CoyqQUongP2eRv9ZNJg+iio5LNt5WOR2TselemTfD/AESeWVrFpI4kKLzKxyWGc59q5zxB4dt/D98bKP7RI7qG3K24EfiKFiqU5cilqZzw1aMea2hyq2bLz5bN9TQtmGb+IY9Vr0hvGl1NpNt4SvvBuhXQiKP5psxDMVPTMkeGBz3zz6VqRzeHrW6geX4avDPGy/LFfM6OenU84z+VYyxfs3aa/FHM4Yha8jfpqeWR2o4GCR0xXs/wr+FOhXOjWvijxNrE1sb2ST7LaQRqWMSKxaaUuQBH8jfl712Xw9XQPH03k2fgi0iubW6iswus3zC2jWQNlvlUHcGTGCCOexruPippr+D49NtNYl0rTNS0rSb2yil0yN5rIqztOGG4BmISXHQdT6CuqlXhPqack1uY914g8NwaLaaXcfELWNB068jaZLWCWO2VwsrRtkJlzymeuMH8K537J8GEkYSfFXUJS45P2uTH0Py8jvisXVPA/hHx54T0q51z4kWHhyWzW4htGuoXK3KtKkjPuAwoUP0OM7h6Gn2nwH+E0tvHMPilFcIY1/epPGFdu5UFemenNdLlbYWx22j658G9NO+L4t3IwPlVLqRf5RE13WneKvhjpumTahb/ABAgtbe4tx5l5/aTiTaT/DKELB/XZhufWvFI/gD8I5MbviR5QOdzfa4Gx9BtFd1Y/BH4PT+Abvw7J42Is47pZ31uKRXmixkrC6EeUF3MTnIbBq41ZeX4Ezguz/E2F8SfAdY9qfFRU87Ekh/tzUVZmwQQ5WL5j9S3XrVLUtQ+AclvJJbeKH1+TndZ2utX7yuvdgJUVCB1OWHHr0rjm/Z1+Bca/vPjMHBPy7TF6fe6dM8Y+lNb4O/CXwjHJr3hn4mNqWqW8LeTZMqfvg42sAQOoBJ/Ct44mouv5CcItdfxPR/h3H+ybfXyXXjxn07T0eRJ7W31C6OopgZRgphaJt2RkeZ688c+j+CP2KPhz8Qm1i20f4yafbatY/aJP7MkYCdoIzmOUbsDY6FG3c4Dc9K+IpvD/wAPZ/GWh/8ACTeOdT02z1SVf7YkgshI9iCox5akgScY796+vNf+Oc3gbT/Ct94Y1ax1Cy0nTrHT9CvbnSUS51REZ4v3rBSQWWP5lkJBBK5xitIY2otJMPZxaskfKnxG8M6f4J8RahoereLldo2ZbaG2G6VRn5GmIG37pGVQtk5Hy4ry55Jbh9oWZiehxya+7h4g8efHD4maq/hf4Y+D7y9ltYtWvJJ2jtwolO0hVcDkEEEdua6HUvgv8eYtSkh0f4X+BkhOGjEurW/mbfRjGduc56exrjxONp89nL8V/maKk1sfnkum3kynNuQBxubqPyq2ugTeSGuLqJVOOgPHpnNfavj74a/tJ+CreJte+F/gqP7VuVIY7ozynC7vuIdw4/r6V55r2sfGTwr4fTXpPhL4Em0uRC8t1ExvpI2HXzkMhljH+8uB9KmGIoNc36ofspt2ufOdto+nK3+vuJif4YVzn8qmY6HZ/u5IYo5M/MH5P5dvzr0n4qQ+E00vw78QNF8Ow6cPE1j5s9ojuII5wSpZRnoSjggf3a8ZmSGcMsa5DPu6hBg9hmtfapR5oojl1s2frb8ZvB/jXWLGzt/hR4L0g3tpLbm1e8u4IbWJYmZgPKwDgmRyRg8Ko4zTofhLbeONI1E/EX4LaLoXiO/t2t5ta0O/tpZpAy7WKsUBTIz8p3DAHJr0t4biNsLlgTjcrbs0scl9Auz98A33c8gn6GvmI80Voj6CpKNRe9JWR8uD/gnP8I4QsC23jKcAZ82XWrRCfQYWMj9Kyde/4J+fDnR9J1CSxvtX025uLd47Wa/8RRyRxy4JVjFHabpFXGSqnOM819U3fjzw3pd5Jpmt+JtHsruJRJLb3GpQQyxqe7I7gqPrX57ftLftK/GtfiR4u8P+BfiJDN4Tcm0tLuxgtyGtHjG6JJwpYrksCVPJHXpXRS+sVHa/3mHJSv7u54TfWq2EjwrdR3kVpO0AuY0KidQeHAb5gD1weeecVWa4haUANgL2qHRd39ihriQySySs39Kmhs2vJlWPjccCuqS5WUm1ob0a/wBvalaxW9+0cUKhVVWAye+e/XpTfjlqzWGnaR4TjujI5H2y73dehEak9xyx/EVrax4G1HwT8P7vxlbTCXUA8S20Yh37FdsNIR7Dpnj1ryK+m8QeJ7hLq6huLqYLtkuJMndjqWY8YFTQj7V8y2QYmvyU3SluynPM0kMC9MR5+maimuPLudyqQqqFHHYYq9a2F1cahDE8ErRIp3SGPaGABPA7D60XljfXdvBfG1nilZfLnXyyfmHRgB2YY/EGupQseTKfNdGeGbzI/M5brz2q5Jbx3E0UPaQFyFGNuP8A6/FVltpTIqq0s8g/gxsAPoWarc2i6tHm61BooUI/5Z3ETsBnAAVWzT5Qcrl3T7EWL+ZIxdipUDjHNR+Mps3Jt+PkYLgeygf0qD+y7SMq82rPuUqxjVNzEZ9mx+tLfWdjfXE1zFJeb5ZWkO+IYAJzjr1pcnUObSxLceHdU03wfp3i2SXdaX80ixxFW+TYxUNnpkkPjH9w5rW8SfGDXvFGjxaTdadZWywAhZYA+87lCtnJIOQK565jlayt7GP7VLFFI0n7zIXnHAXOBjn65NavhOHR1vs6to8N6g/5YyMyAn6qQan2Kn8Su0NVZR0i7C+FvsWpapa2OoXUtta3UyRzTSM7pGpIBdlTkhRzgc8cV+h2h/8ABO3w3qGn2lnqnxoa1sXQPaibwzcWkbCQBi6mZsc8Z+ntXzN4F8XfBvw9fW9xrHwL0y8a3ZJhIbu4b5gQQdpk2nnHavt7wd/wUh8G27Rw6xo5s3LYR9pUJkYOOCAOn5CuTGwxkbPDxv3OvDui4+9LUx/D/wDwSz+DzoLi6+JWp62ud3/Evu7RBj2Vdx/nXn37X37HPws+APw40PxH4O0fXI7661kWtxPqd15qvH5EjgAbQAdyg59BX1Nbftf/ALOXij7EmryaPBH5hY/aY45d5PPJIJHPevmX9tz4rfCHxj/wivhP4WT2d4kMk9/qd5ayExmRsRwxkZ25Ch2YgdxXDRqYz2qjVg0vw+Z08kZ29656Z/wTP8Paf4e8N+JviNrUSIt7LFpNlI8oQCOL55iM9tzRj/gJr7ntfiN4FbIk8SaVb44Pm6hCv82r8f8A9oLTfhboreFdB+C/xGGoLY6REms3dvftJFPd/wARVWG1SWLkgAAAivHY/EHiy1y0WqR3CAhVWSP5j05yD/SutYeNf95K6v0aM8RrLv8AM/Q39lzxtpPjz9uD4neKvEOrWY/stNSttKaSZPLKm7jiBRs4Y+UigYz8tejftQW8n7QXxk8Ffsz+GrxE0q1P/CSeJbuAAiJEysaZxgsqszAc/NLFmvyg0nxprXh3UrvU2Ei3F6xYtbt16H2Paup8H/tAeMtF16PxBD4/1bTLyOHyftNvG/nCMn7gYtjBwO3atfYbOPQblByUm7NI/d/wp4V0LwR4csPCfhfTY7HStMhEFtbx9EUepPJJOSSeSSSa+Uv+Ck+2T4d+BdK8sM194wt06DJAhkB5/wCBCvmzwb+3bq1vapHd/FvxndXIXktHp5Un6OpNcb8fv2nPFnxUbwpbXPiq/wBQh0fU/wC0bcXlvaL5cy7QrHyUAbGTw2RzVQpS502tjk5FCXM5XPqf9tvxTdWPiaXwXY3DRaRpnhf+05LWONAv2ppJUVy2NxIjTAGcc5xmvmf4dsum/CnR5WX5Y7dbgr/ewxc/TNWvH3xO8V/EjQvGPiXxhrsmp6h/ZIt/N8uONFRd+FCooAGXPPWtHwzZwWfgfw5Z3WxYjaQK+7ABHkkn+dcuEjy4qouyS/U9TF+5ltFPrKT/AEPNfHn/AAkXhn4eXOrLqenzxeKWtZLtrxMNHcSMrhVK/eQhdgB+72rr9e1TTdW1HQPEWi3UU0t2Lu1laM8tD5DM6MOo2uFODyM+9c7468K6trfh2x8EzMl5YabqVveW13bXMIkeKEkrDKjsMEZA3DPAHFdJpui27ahqHia+jsI9W1JRDHa2WWjgQsN2Wx88jfxNwMACu2ClpFf8MRUqU/eq1Gr62s17yask10t30OT/AGjpmh8J6bbLgF9SjIz/ALKOf6V+qf7PPwq8L/DP4b6UnhmC4tpdX0vT57wyTGQGVbdRlQeF5J4HHNflT+0Iou38L6cMj7RqTLx3+TH/ALNX662fw90O10+ys47GS1WKzjs1aynkt2XaoAP7thjAHWssTXnSqe7By9DiSi8LFSdtX+h0Wp6ONUtY7Wa+uFCNuLRhQzcEc8Y7+lLY6PDp1lBY2885SABd0hBZwMnDHHv2qvH4YWCEQ22u6zHtGAxvDK35yBs/jUH9g+JoVcW/je5bLAp9psYJNo9PlCE/nTlS53zSjqc/N7vLzaGl/Zx8yWRpd/mH5VYcJ8oBA9AcZqaztFs41giVUiTO1F6ZJya5e6t/i5bxt/Z+qeE7xhjb9ps7iDPPOdkj44x2pkd98X42ijufD3haUNIoklg1KcbU3LuIRohk7d2Bu6gVnTw1OnP2kU0wabVuZHWzWNlcfLcWcEoP9+MN/MVSuPC/hy62mfQ7Fip3A+QoIP1Ar5r+Pnx/+JnhfxldeG/Bt5YafY26hFuGtVlkmk/jwXJHB44XqOprxbVP2iv2gpbibd46mW2j+Zlgt4VdFx1JCZFaSq076q5pTozaupWPvdfB3huPPk6aIt2P9XK69Po1Jp/hPRNDubq/0u1kjnvAqzM0zybgpJH3icde3t6V+c0/7Q3xpcfvvixq0e7IUCZUyc+oArr/AIc/GXxtrHjLw/Z6v4013UFuNUtIXC3TyBg0iqRt3YI579OvauetVpqDjGO+mh0QoVGmvaafM+yfEmueJLe1vLjSdHt2+wz7XWeZ3M0SlWfy0QEmTYdy8HuK8yW58LWN03xkuvtmmvPGscX2xzI8wdTECbdeGYgLgZHPU16trlzYwXUfnaq67YvK8t3UKu05MnPzZ7EivIdd8YaxJqjR/wBh281q8Pmtf3FwFlJVSQRER8sgZQApJxw2a+ZxDnVqpUIbb2dnbqtv68j1MucVBp6X3d7adVr3+foxl9oP/CTaO+rTapqiLPDDqLQ7TaTqEO9FJUkIF3HIHTtU+qWNr4t0fUvBvhvxdNZzQwqLix2BzE8wDiQyAB1BICOq54I6E84HiTxBpMmm6Tq0llqt3c2zxyWix3PkSgqGBEiYdWX+E88gjnmrHiD+zdJ0afx5pf2bTrnUEhkm+yyFbqZnZdwBGQG5YngAlfm5rzlRqUEoyvZtpaJ2d9nfV/LTTQ9xOU7Jy1vpta+ltF5eSNTVvD8dp/Yt58QIoYRa50qOa6k8uOUyRDcDGWKs+Uzu+mRwK6Wy8N6HJHc2P/H3NGxW6LTDdbyqM/MoxtwCCQeoPWuQ8O+CvDNlvVvEN1fQvi4WS5jSeNF5KhVbIDYbk4OcYI7VU8NWbeHtck0Wzsrm7865YSapMuYr0sMky91B5THI/OsamC9svaU+Z8vSy762Vv8AhypVIyvTjVUWlfqv1/rsdHb6xHqHiS78O3MWps+hqyvczQKtvI4QFQWwQrEkAbgQwANQQ3XiS9uLK50uXw1L4cs4ZWuS3lkxyxbwI49pAGAFA7HcetXvF2vajcW8Q8J2cdzcW2wwNcPIiRZwG+UY3MuABk8jt2puh6fKdIi0W60+1sZYnE7G200rbMxYnKxkHkHByeTjoK0lBU1eFPW9uXf1fa/boYqpekqjsvW2m+umur18tuhmTWPgXx1fWtqyNFqOi3f2dRbg7IZGOcFv413c5U5DL+fEeF7rR7HxJ4x8WOqXj6p40tdLtVuS0oMFu2185OQqoIuh5Yrnqa6zwNCvhFdf1G48J6vDtme60+GaFm+0SJHIVWMgY3ErwCSMEc187Xi/FOO607w/pPg3xNNY6XZwJNJZ6ZIUutWmmE11MHK4Kq7GMNnBEIPpXsZXhZU1Om78sWrX9L/NXfTtY8/NK8faqlSk7WfXTWzdj1348a7qUHxM1+K11i7itv8AR/3SXEipjyUP3c4754FeaG6urg7rp5WUsdvmMXIJ7812vx21S3k+LWu/Z90sUXkQiRI2ZAViVcZxycg1wfmXzXiWsGi6rPcEgJFFYyuST06L0PqeK92rqeBDRI6Dw/DZi6s4trFZbu3UBYQduZUHPHvX2pqf9pxtHZ6bAXLNse6mYbIRx8xXOXJGQAO/WvifSrfxhBqFnbyeAfEGTe2qyO1qEWJPOQtIxLcKACfXivq3UviItj4ga1+WXTpVjEcygYVxksx/2T93J6HFeDmPM0o8t7Xf4baHZCjOs/dtp3/r8B3ivT9UjvjqvniXREs2SaxKhmeXkB1JHuMnd2r4C+JniHw+vxC8ya8hgmtZZHjEkn3d42nkdeAR1+tfY+qa94SX4dalJ4k1O01SSPz/AD9LhuQ/DzM6RDac7l3DBB4IHpXxB4/kvNa1g/8ACL/D3W7i2Rv9HFpo1w7Rr6Z2fTJzyeea8/LcNUq1uSd3b3b2tpbr/Vj0vaRo0Pe15dNNP+H9fxNC01yXWp7dYLOCKSHUmgkumKCU2pjYmRSBkfMR05+UV6Bq3wN8ZLBpN1oXjXwRazK6zXiza7BGQm3mJ1I5PP5ivKvAnhH4qXF9J9o+F/iWxj34SS602Vcj+9yOmDXsvj74K3Hi231mbw78P9WudW+Vob4okSOT5anCMoL7Rv8AvH8Rjn6OeBpUOVav+upx0cZUrTsuWKXf/gnnXiT4I6h4rjmhl+LHwxsDazCcyf2wzgjBPRIiCeeSDxXnusfsd6LDpd5fR/H3wDe3UaNssYDOxnYAfIsjKFBPQZ9RXrLfs5/FbTU0+TTfANndTTRxLcbmhBhQ/wCtypcENnsMitKz/Zh+Jk2rC4j8CsdxxIJ7y2ji6g7tocktx1PpV0XLDaU6en3iquM/jqr5HzV4f/Zr0y41C00/xX460LRNOMmJbl2abysKWXCJklm5A9+vFet337Mv7JMdjO1j8ctevLqFTtmXRwYo36ZIAyQD1GR0PNenat+y78V7ixMmneErCK6jk8yFDqsKjeAQrc/KQM5x04qjpf7L3x4sLSL/AISOTR7dkYSyN/aSlZQP4QEjPyfrxW0sXiZaxhZr0/zMY08O171T+vuPHrz9nn4E2M0a3Pxk8UXmE3yLbeGBnp1XM3866xfAf7Fxjisf7E+IV5d28KtcPHeiASEj72whtueu3PFdNN+z5480/VJX/wCEu8LWVi8Kwx2iG5PlAYO4YhGScHgdqdffAvxXebGsfH2gWc4x5kkdhcTs3sQVXjr71Eq2MbSS39NPUmUMKvtX+84a28P/ALHzNIul/C3xlqMse5GW5190IYfw4WIfN7Vm4/ZojmjtrP4H60Z5S6rHPr05IZeSCBjn2rvW/Zf1q8vYryPx5bWUoIa4ax0WY/aj6sGkArYk/ZTDQMZvH+pQyl/M86HR0jeNj1ILyEAkcc+pqvaYrTX8Q/2Xpf7meSRzfCUXg0/TfgjbxStbmUm61S4ZVHQfMsuM57Vx18vhGQvNH4Zh09GkdVWaeTYhX0yeATwCTzX0hcfs2/DOPTP7P1/x14gklU4aZb+ztOwwcBSc5HrzVCT4D/suxSTaXqXiG6upblFEwufE0a+Zt7ExoMe4pqpWXxVEhv2D2g38j5S1e+mtbvyNNstEVIm3zeZDvkEX95VLZPpXPa5q3iZpIhpV5AIHlC77e2iTAxyN2D09K+urr4T/ALJkV0JW1KxEhUW5K61dSsVAxtyhwRTNP8Efsd6S5txpNpdmMM/7yO6nQEexfGTjA4+praGIhHV1Lmck38NM+BPFV7rU1wGl1Ke8cSd8AADjoOAc1jC61t1bd0b16Cv0A1TQ/wBjefzEHhO4Drkt9is5UIPt+8FU8/swW9wmpW/wovJp4QGR/JjiOQBgkCTb+Y+ua2jmuDpq0p3ZzyweIk7qJ+f8lvqTZkO8k/3u1RPbXUnyquD/AL1fdfjbxx8A4rZbq++BNndmUhWy0ELjPfKKP0rznXB+z1fbVh+Dt5YmRSytBrs6kenHK8n+VXHNsLJXVxf2fiOqsfMGkXGqaHq1nrln5LXFhcJcRpKMqXRgwyO/IrpvA/ji98bfFKVvEjC9l8S29zZzT3SRmZZ2hJieNtv7rbJHGAEA+UFf4ia67XvA/hOe4e70mzvbKxf5UhmufNfdn+9tHH1rzbxX4dh8Lah/bGgyTxXGnziWOR3BPmKwIbA46gV0UMyoVJJU7kVMHVp/EcfqGpS3N41xcM7Cb5selep/srw2998dPDkdxbo8Uk5LMQcrtQn5cd84/KsTU/DeijWIri5t9ovbO31CONsqFSdRLjA7AsQPYCu5+EMlvo3xu8EW+mwRQn7U0jEDHykbcflmuuNR/WFFb3HhVyTjV7M/TfxL4Ph0m007Vrhv7SsdUuJI2jsW82S3KKDJG5HGeRjuM4PIrH8QfHDwP4TvLzT9P1LUdJmvW8zULe4VYmlby8Iys5HoBleeTzxivomz0yEKYYoVBR3lUbcZYgAt9SABmvKPj58A9F+KlnPr3iXSxdLoWg3n9mCJtkv212R0YnGdirGxwO7V9/i86qVKXK1zTi9L7Wb0Vvu1v0ufgmWTo4rFqFam4UKid3fS663t3+654je/HmxuLa7aBhJZ2oWXzIbmFiAhHIG/ORn7oyT15rtrr45fDDVND0nVo9Su0sUgCtO+mFRhuAAFJDt8wHHucVzlj+xf8JfjJqniJPhtea1BaWGkWN9BPNqOY7rVJVLNAw27VVVQAnG7MoP3QM9/8dvhInwS/Zr1Dw3osyR2Jayjjs5MTCCP7Sn3nKje+Ty5xnsK56fEEsQnz8qlH4Ula91rffZH1uL4dweB5adOnJxlJRk+ba7Vvxsbfwr8TfD/AOJEmoaXY6tZCS0uo47ed7eUMLh0jwjDjKtjHzYwcY9/X9B8Ir4V8Y2cOtxrPELae5d4oWMSbnWNB3/vtkY4GCa+TP8Agmfpupa1e/FmzVbU25vbGG4muYBMw3W5IVeQRkhjnOOB3xX3J4X0O+0nXpVvL69vlSxCNdTSIySP5hyoAO5NqhcDGDknOa8LFZtXqxmnO118Pr+R9HheHMtwteliIwbnD4Xd6f8ADdDiPDusTafr0ltZxudPsNak0fOCMXCdR9CrLj6V88/t2Wv/AAmniDX9DiWWafw/pFhdWscLNkXDSlvmA42lSBg98V6H468ZeK9D+LF9oNjbzQaBJcT6zEyoN9zdSQ+QkuRkiNJBgZwS+Cf4a53476l4bk8L+KtQbULWzm1q01SSaWeXEokiMotypHL5SOJVA+YHnp09HCwarRlUjdzpyStruuvna9zvzDH1sFWWIw7vKFSm30atKLfr2PgP4ueDZLP7S8X2w32mzfY7qOWPAeSMDzGXgbQCcYPPBrstY+LlvY/A/wALx2+pSW91YaXDpt8epjWOSaNfwYKq8egr2P4keHda8ReG2vrfS9NvrzWrc/am+2SCSAt8y7y0I37uDuz6Z6V8e+PtNW20u28BX1ususNeP9lghl+YFmRgBkDOTJ0PU9OlfmXAP9o061WGMp8rUW1dqz1Xb8D9m8Ss3wucYOnUp1lUlzLm5d1o19x9ffs5+KPEX/CvbWTw5qVpawSMHZl162t5W3gOvmI0wbcFYdR0wO1es32ueNo7dlu/EkrLKpBjTXoX3jHPCzZ6V8aaf8Hfhv4J8Nz6xr+iWWrQQSRR3Hm2G+eGVMK6g7hksTuI45zWta+Gf2YtRRZls/DtsUyWjuo5LZkzxgh5BX3denUrN1FD1sfluFjGlTUHuz6U8F2PjjSNF0ePw/4z1a/0lXuLtZtT8YgzRJKCVjKPIGkAJ2hZOUAzya35JvihNHLdDX5liQbj5evQbtoBPBEvBNfKx+E/wDmjM9rp+hPF/fhu2wB6cS4FV5vhn8DGXy4dN0pMAgYuXy2f+2vauVU5S2i/uOjlinqyLRfhHfSalc+MvGmoXaWXiHUHtlNvepMwu5JmkQvsZiqhljXLDuQeor0C38c+D/grDqXi3w/o72T3sn2u4+xrh5LhwFDDcdoJyBn0zmvH9U8H/Bfw7CLzR9Q03TtUsbuG+sbq3leWeKWN1YKql2Hzbdp4zhjWD478YT/FHXLfQNAtZIdPilLDzBgseQXYdgozxXq4TByxVT96modfQwx2Yxp39na/RHo9p8eviR8atQ1Gz1C/lg0lYwTEscZfb3DPtHJ9BxWKtxcaYr2unw28cKEnP2GDJHu5Tc3pycVJ4d0RPCItYLO4URuPLZekkhbqfz5p3iK1v9SvWt41YbFG0KPu47n8a9zD+ypytQSUT4jM8VXqPlrNp9jBvtVurkLHItk2eF3adb5XsMHy8j8DTdQ+LPxNbQ4vBsPimG60W2Y3v9n2qQwksEA3S+UiicCPoz7vlNTap4T1y70O5u7e3BzayNlWGc7T2r5wsdY1S1jtZre4eO6RvI87o3lqHi2em0ocH1xXNmuLjS5HyqWvU3yFVnGd5NW2PWYlj1mcQXNsz2lxCyyK65RI13McDHzEA4/Ksa30PwXb3kOm2PhfQ7u8nlWKNbjzMZJwBhZAAc+1e224sY/B9jqDaUVlewZna3jRXUFTmQDju6n14r5qv/CNvJa3WqW+r4eO4CRxeXsdwxJ3j5s57nuOK5a2LrKp+5pqS21Vz1IUqcqalVnZvt6H1r8P/hf8PYI/seqfCvwdqNwi7mknW43E/wCyqygKB+dN+IHwn8CPbvceF/hb4UsL5FJEcjXUkMx9Dumyh9wcetcD4J+NkNrYWtn4yspXvbWFIk1O3U72wP41B6nqSOp5pvib41XWoRzQ6KtwGK/6+TGSOnC9j9a5/YY/2/OoL7lb/I9ijLL6tL95UUV21/4c2fFGhaH8Pfh1B4h8ZfC/wfb3Gqq0On2ME14Zp2xgk7ZSqKCc8ntXzf4u1OPxOtlFJoFnpv8AZ8ZjT7M0nzqf729mJ575r1Kz17UfEUls2o3F3cWlowaaCaYyRsoO4hVJ6nBHTvVPxf4M0/VY01Pw/C3nzkAwov38krux1B3K3HavVq4mHu0cVTjr1UUkeKsPHmdTCSlbzb/zZxXinwvqegxaV4gSPFpqlnA4YdphGNyn0zgn6Zr2v9jXxXb6b8XvBFs1mqXTeJrJpZmfJ8tplQAeg+Y/U1ua98PV8ReB7fw7G6JJBbp5JYfdkRflb8+PcMa8w+CFxfeHfipoO2GN57bWrTzFePds8q4VjtPb7pzjsK4nXWLwk6cd10/IumvY1k5dT9Zv26rW6PwNvNV0+SSO606ZpoZI2KsreU+CCOQcgc1+U+nfFOz8bWbf8JR4d0+4uZVEMt9DGLe5BGOWeMYbI7urHmv2I/aj0ca18E/EFqY9+yNZNvqM4P6E1+Mfw98NaZHrd2nhzXHF4qedHY30YHzKcbdy9eu08ccGvEyenTrQqRqxUlpuelXlJcqg7PU29H8C+Bf7NuNSbx3ryTC4JuLSPRYpvJUk7WVxMu5OQM468ccZ5zxJ4Tt579G8PeIIJI1B/wBI1ezNsR7ARtL79cdK2fDOqQ+C/HsGsatpEGoaK0n2y602fcPMiJ2zwAoQRlWbp3QEcjFe26H+y3rHjrTYfEek+NdGt9BvZGlsJZI5XuHttxCGRAMK+ByueD3r5/P8rWCxCq4dXjI9XLcX7am6dZ2aPlq48ItHcG8m8d+H3nRVXZbWt3ISM5yMxAcfWr9vp8Msnmap4jvJY4yPLaxsFTdj/rqc+lfXejfsO6LGBcaz4+ebIxtsrFRznpudz/Kuy0r9j/4U2cIW7k17UmQYO66SFT/3wmR+dePK8re6jsjyr7TPnP4XeH/B+j6Rr2uXMPifbNZpPbte/ZmS8uUmjIiRE2mMlTK29jjC4xkit34uX/g3xLpcuvWNjrz6bbRzWsnnWJM0Ty2rIC2M7k44cdwK9L+PfwX0jwf8O4/EHw38C2U2qWl/B9olmCXTC1IYO7KcBjuCc9Rk14noviD9oiXULzQtGutMsY1RZJZE05khnTG5TkMA2N2Rn1NelQjT0l1Rw1ubU8U8Q6Hdap4QsNLOoPax2NwyzLJbt5rI8EPBTqCPLPBxUPhj4e+MNYtUj8P+LNTs9NQD7O19YSRF1PO4DBG0kkjnpXQ6l448Yabcax4ot/EEMWqtNHe3F0toQrSBzHJiM5KkiVc596z7X9ozxtJOsmveItBVnZizz6O0pPX5iUOc85r0Lx6nE+boasPwX8fMwaP4ldT/ABWT+nPUV0nh34e+NtH0nWNGvvF0V8upIghkjUxeRIpPzMp4fqOPaul+CL/FP9oDWtS8OfC+48BatfaVYf2leR3VlNabLcOE3BnYBvmI4HPNe2n4Aftr6e0UVpoHw/ZpFXygtyMkdsZk4/GrioSM5SlF+9JHydJ8F/iPIoX/AIWXZfLyf9FYY/IVJa/CP4g6U39s33jy0vrKxBlmgWF18xOhAJXH/wCqvc/i5pv7VnwV8JP4z+JGjeCrLQ0vFspLpB9oWOds7VYRsWGShxxivErr9prxBqFnJo8+seA2t76NoZmhtJFfa4wcFh8rYJ+lDjBMacn10PNfiBp2jf2ZpGo/2tPHfJOsbwm3LDjgFWB5I2g496+gvGEHg+4+H9kg8YzJYRaddrBeSWOxpLpdskcLRlvkG5yN+SRjgc4ry+z+Mnib4ZRwJpVn4duoLhXiMerWaTMjJOzblLKdvDr0rt9P/a88fXsMtrcL8NJY7soJIZIE+YqCFABiOCNx6e3oKz917lrmTOu+Enj34a3nxM8K+MdX8af8I/BqGjz2GuS7pUQuqqUYMAcHKt14OB617FdfGD4L6T4ts7Wx+I154k02eSTKabcBpV2jcCzMMoW7DB7jtXmNr8WvHnjK00a11Twf4Xt7ewtHs7W70eFnXajcrIiRBi+TgtjPr1rn9S1K61fxZ4d0PWtUh8H20+pxx/2ttkjKoWVXJjmQLIAGDYIP3ccZrkxGBpVJ3u/wNYTaWp2HxW+Pnwt8ZWlrr+j+INe0TVtN1eCWa21y5LNLbEEDy2jGWIHXGANwGMVy+u/HD4WS+Bb/AMMafJDqGt31wkkM1tFcTMoPyyRjC9GQngDqBXm/h/xFq/hn4leJ9F0C5g8bTXVy1vY3Eku83EUbnBRU6bhzyOACOK7TSfiN8SNB157jwrYeD7HxHCSHtbi+njubbcCfk3MEBIPIQk4OPasZYOk6bpSvY6add05qcdLHnvxX8Px6f+y74D1Nr+0a6W6u7cWcm6O8giW7k8mSSNgCodJWK56hTXzfDHPI/wAjMWNfQnxi1D4mePY5Y/GUUFrHCr3DrDYN5RmxkylwWLHggHd3Pqa8GtQyqqQjMknTHeu6MlypI5p/FofWM/x7+Nsu4SfEbX/wucfyAqrJ8ePitBbyae3xI18eb/rF+3P+IznINcPqTDTY1kaZGeTlQD0rnxN59wG3Bst83biqrVYR92KX3GmGpSfvSIfixaQ3mgjWL5vOvp7pczyfNI5OS25jyx9ya5iyvGk8G2WmspaRppDu9IweB+efyp3xP1qWS8stHjAMdpH5p56s3H8h+tV/DubgWVvJnDsqDPoTz/Oijeesj0sHGNXF+SR11n4TvbXSYrjaWBXftHPJ5rS8K6DN/aEN5dWjCIsGU7eCK7vT7VdqRqoIx+AxXVWNrE0SIuxNgyFC8CvJrVW2zp9nHm5kcv8AEjxFqWk6dYSaeqxwRXcYk91wQAfbPHPrReeCPD3iLT4tetY2tFuVEg8hsA5HII6ZB44rV8baNb3XhbVreOMGZrd2U9SCOQfzFZ/we1T+2PDE+kyH54MTR/7jjn8mB/OtcN7tFyjujadOOIw8rq7jr8n/AME4rxF4AvdHtft1ncPcWpwrOeGXPQmuXezTcGki3H19a+j57Bp9D1CzniUqYJCoPrtJFeMCzhYKwO1j6f49q9HBV/bxalq0fPYujGlNcvU5f+xdOk+c2u322daZ/YMe4NDEmT224NdXHaqv+rbPPqKesW3/AJYrk9yK7VE47nH/ANiScbYQQOo280h0abg/ZNwxznAxXXSfKw/dj/PrUbFc8xjBHPYmjk8gbOVOkSnINueveozociyfLDnPUj/PFdcnksWbBB9xSNaGQBkZDgfd/wDr0KItzml0vVIVxBJj/tp0qObS9UkO6aZSc7uDXRm0mViQEcd/aoWEinLIBn+HbxTsBj20d5aktIdwPT1qVryRJklkXHXbj0FXdyszcDPbJ61Xmkddy/2O9yR8ystwqD6HPIrOrByjZGlGfLK5V/tLe2WXJPVe9aUbRbd6uUA/hVutUYmvxJum0+NQ38LSBtv4gc/U0yWK5YlWjRFPTGR+lXHVakydmSyNJMyMbuXYpLBdgxyPXrVmG1jZVMbJIVG0ruxnPqD1xWR9luvMHlOSAeAR2781YtpLuBsOudxzxUOlGW6G6sl1NT+yJDMZruwRwwALDGCO2femQ2CWsjRQqY9yYBUnP8/1p0OpNHGBIpTn5h1/WpZdQ82aGQMGEeOfxqXQjFXRSrSloz0LwTHdWPwx8a+fdSzCWC1h+dy3llnPygn26/hXcSfFq4s9OsdPmupdsVvDEEjtIti4UDq+Txgc4riYPF32/wCG+r6M1vaxSm6to4/Kj2s43ZLNzyeBUMsmpSSxo3gOCRfkVnmLkjHDEAuAfpXzUlVhiqtn1/RH21B4SWBo/WEtn2XV9zvG+JDb/LfxUEO5k3pNGqgDoflh6Y/l71j6l8UL63VI4davb7zEO50vpIxGenZFz6iqVvp++YeT4VJCswwLaBdy5ypOXbB4xj0z61YutF8XXl4smj6La20IQKPNto2bOScjamB1966JSrW0OenicthLaP3r9Dk28QXni/4leEbO7uJFiGoQIFlunkVS0yAsS5+XgjPsK/em3vLe6iNxaXUM8Iz88TBl468g1+G3hXQdXsv2hPhvH4umtVN5qli5CxhdkQu0B3qFAHc4xX69x+GPAlxdSat4ftbaG8ub798+m3j2zOmdvziMqG+TJIIJzjmsp15UEudN3/rU4My9lipR9loultv0PRX8QackbSLM0gXrsQmq0njDSY2KhpGHHzbcA/TNcxZ+B5LCF2sPF3ie3idmZYVvUnWMegWVGOPbNcrpfhrxI3jbxNZt4+SeC2jsr5v7S09Hy0qyAplGQKirCMADqzE0fWKnQ8tUqfU9Mk8a6cibvLZvo4qOTxpabD/o5AI6+aM/hgGvmb9rrxJ8b/hf4F0rxV4N8U+HdNt/7QWzn+y2e57jzUYof3isqquxicHJJ9q+Z7P9pL42z2/nTfE7VBI33hCI4xn0G1Rj8K6IVKk4c1wVKmz7e8RfC74Z+J9al8Sat4X1C/1GVtxl+13LfhhcAelZlv8AA34XuS3/AArGO4DN8/2zz3DH3Dvg4+lfFeofGz4na1GrT/EHX5Y2UszLqs647cYcD9PWuO1LxpqsyR/2j4g1O4ZmO1ZbyaQevILGiNK+txt2dj9GofBXgPw+y/Y/AXha2K9zbWkeD7l8mtiPxbomloBHqXhSwCDbtW+toyn/AHz0r8zIZLeZ5POtoHccB5Fyx/Orlvpp8kbY7SaZnDM0kSqEQkZA2jJwM4z3qeW7tcqyWrP0a1L4ueA7PDan478HRyDvJfRuf0Oaxbr46fCmM5m+KnhlMf8APEGb8tpNfBfk2saiSBF+TG3CAGkubyOKzf8AeLH6Etgc/Sq9khcx9nal+078FLWQ7fiXBelSfktNMkcj1I+T+tYE/wC2F8DLWUQW+va1dTHK7ItG+8cZ/iAwfyr4nutQs7thbaTb3GoXMj8pp0L3EjYPI2pk10PhP9nn9ofxlqDX2k/CfV4bW4cyJPqQSxXAGAczMrdM9BUujHqUpJH1HN+3T8MIpGjs9N8SXTr8v/HvDFj6kv7d6wdW/wCCgHhmxv4tNj8E6/JcSttwbyFFUkZGSM4/WuP8J/8ABOH4x6rG/wDwlnjfw7oMFx8zrCJb+ZPoAETP/Aq9c8M/8EzvhPbSJdeNfGXivxHOnaGaOwh4/wBlAW7f3qOSkgdWKPLtd/4KH3Vlai6t/Ap2STGH/SNXbch9WCp0+h71j2P7dHxw8WXkdn4E+FI1d3+ZRax3t0Acf7BANfaPhn9k39nnwd5cuh/B/wAOmaEBln1CI3cu71LTF+e/Fen6dplnp9nHaabHDbW8fCRwRqqAewUAD8qV6cdok+1ufEmg69/wUA8bOjWPgHQ/DtpKeZdYHkEDPdDI8n5rmvVPDPws/aamaO48cfHbRLTyvma00fw/5x78GWd+fwXtX0msMOchC2evy4z9cU6SS3t0aaeSKKMclmOAPqTQ5eSXyM3VPK9P+H2vLbx2974+1a9KAKXkhghJPqSsYwfpXQQ/DpnXbeahLOSdx8yeTLf98kVr3/jrwbY5WXWIZiq7tkH73j3K5A/E1wPiz9qD4Z+FY5Futa0+CUfcFxdKCffYm5sVwVcZhaD/AHs1/Xobwo4ir/Diyvf+HdKs74x3nwx1JvLyRK9u93EVHQqY3fGeuDzWLdeKvhXps/k/2PoNvdouNk+mSGdQfVBFvHtmuI8V/tx+E4/I/srxLbyxyACZbOMo8eQTwzqST0HGOvtXz740/bS8eXlxd/2Hdy28Us2YDBdSPIqDg7pX6kjGcJxjArzJ57QcuWlCT9dPz/yPQp5dWavUaR9a2/xC8LmV7ex0O8fH8Fv4dvCkg9QfLC4+pFW5/iTavGRH4V1OJCmN81pFbDd2IMso49vavzh1j9oj4wa5POo8Wan5LgsRcT5YegVtvOT2wOO9Z8HxU8aN4TufDNzfCJZ7xbovFkPuAK9c4AIPQAc5NTLNaq1jTX/gWv5Gv9nw/m/A/R69+JWsaTpg1BvBbC3OFjvby6tYbeRj/CHE5GT7flTbX40aH+9XxTJZ6IUwE8jUoLrzB3Y8DZj6nNfmfJ8QfG1xpNror+KNWl0y0uVurfT57p3gjlXPzqhJA6n86xpby6uJpGmi80SsXcvg5YnJP4nJq6mZycV7NJPzX/BJjgI/aZ+l+rftBfCfSfNmm+J0gwzL5Ma2+87epXAyQOvWuLvv2yPhOtx9nj8V67esfurG5QNnody8V+fs8smfkWC3l/heNcEceg/zzUK3EnmA+bG4KgMNuRn61Dx1aX2vwLWCorp+J94X37bHw7w0dto+vXSxvtZ5Z3KKR74wB7+9Y9z+3P4fWJLfSvADzqQJG8+YlQx44wwz37elfHMWq3H2Y2Y8vyM75F2gbiOO1D6lCFKqVPrtXgAVjUxeIekJv8DSOGoreK/E+q779uXxEytFovhewsU/jBKufzOe2OK4TxN+1p421omG68NWjRPInm3ZaVViXcM58tlxnp0rwaPVrpYWghtyqlhgYG36j8P5VdGrXnkCOO4kiLrsZonKEAHOcjnrWfNLm5q0m16lqnG37uKNzxP8TfG+oeIQ1jr2rWmn3TefHCl/PtijOQANzlux6nPPWrNrf6zfwxrcateTSq+9mnuHfzPqS3WvO/EFzrltqlo2nac11AYwJZAQ20g8YGRk813nhU+E72OaTxJ421XSDGoaNE0He0nqARMw49xXfaVSlFwkkvOWpk3yys02/Q2VtSrNI8ih5G3tu6k+vvUN1HNcySoWCxFcFh1BrTguPgfHcAXHxE8bXSou4CPRYY1Y5Hyru5BIzj8OauXHiT4Bx7Fh8P8Aju9K/MzTarHAW/BFwAPTqfWuSphnf3qi+9/5FRlJ/YZiQ2sMZgEkhYRYznqxFRXgt/OZre7kjaVfmIIBBB6CtiX4gfBVcfZPg7qV+RIGJvfEtyNwHVSE4ANVLn4neC1kebRvgD4TDRg/Le3l1dbs8qeWABH+eKIUYx0dX8GN872p/ijKka3jvhdfao0B4ddw4GMDmpbi60lYxMdTgwgyf3qgH2PPNXZPjNMzLNY/Bv4d2UqqFZG0bzcEdxufjH49ak/4aS+Jke2S107wlY+UT8lv4dtscDHcHjp+NNUMO/iqN/L/AIIP238q+/8A4Bx2saxod9HFbLJb3OHHyp8+OcjAGc0y00Se+3zW2latdqjnb9n0yZ9g/u7gpB/+vXSah+0L8aLm0+0af4stdNBOGa10y1iJJxjBWPIP4/TFVZvjR8Y9RtVstQ+JmtiMqA5inCMfqygH9a3gsPTjpKQmqz6L8TLb4d+OtThP9m/DfxbMshyv/EpmGfcblHFcd4s/Z7+OmoWczW/wj8SCIg+ZJJaABRj7xGcnHsK6+Tx78QpSsd/498Q3QyT+81CU8Hj+96Vn3GqatM7yS61qDl+rSXUhy3ry3NdNLEUqMk4Jv1MqlCpVVpSX3Hg1r4b8U6dfrobaXeaheyLuhhRGeVUTK7WU/NGBtPynGFwehr0P9mf4d6/45+OkE+r3FzosGhaff65JPLatIDHZQNKYQMjDMFIBzwa6Ka3866WeaVmckksTlmOMcnqfxre0G60+0XVBNh559Nngt1bnJZTu/HaCMe5r2cNmfPXj7u/mebWwXs6TlzbeR+uWg+JLW1tWkhs47mK5XdH5i/MhIB/keldZ4S1bR72NrX7OkEiAZDdOOmM9q/LDwl+0zryaXYi9+Imr293DbrFKkkzFdyjGQcYOcV1Nr+1R4gj2lfihKw6jfJF+Ryma+ur18LiIvRpvr/TPyzL+Hs4yyrBwrQnThe0WmtHro7Nr8T7t13wvpGhtc6L8PbuXwxDc6pNq9+2lYX7RdSKAxyc7QQBkAAAgYrgPil8JdU+IngfVPC7fETX3ur2NPJfULjzYFZXVhuRcEj5e3Tg81822f7VHiqTbJH4/tGB+95scJ/mM1vWP7T/ja4x5WvabdY4O61QZ/IiuyhjaFGmqafza1++zZy4zKOJqmIlWp1YpN3UeZ2XZao739nf9k/8A4QVfEttrfiG6v9X1a9hvJU0ieW2t/JWIIgOSGY5ViQeBkYzzXqln+z3a6Xqg1qD+24r8ymRZ1vpFbcfofTr6180r+1n8R7PUryTS10fzImFqW8hwW2qGJ4fjBcj3x2xWzZ/tpfFqM7bjSdIlYdxJOnbH941rTzGpQjyYaolHs0ypZRmuKtUxsp8//TucUvudtfmfRa/DGPZHrS3l9eLcZkM7XZnjlwxIDLkqwDZIHY8jBrmfGfwNh1+z1H+0lujbyafLHFAsHypMQ37ws2c5BxtxjuMHmvnzT/jFp8LRND8PoLWOKYSlLPV5gpGGBQB1bYpySQuMmu3i/bgsfh5oq6bdeBdTk05Yp/3P9prK/KsR8zKDjPHWqeaV6b54VE392nYSyHFuatUrJNq93CWvdvmvb0Ofb44fCTT/ANnebXtW8RIni+XT4ba10+G2MjreRx7SGB/5ZEgEnPAz34r8+davNa+J3xGTW9WsIrm7lKIbe13QCbbztDg5jAUEl8/LkE9K+hfH3wQ8QeHvhvb+KNV1LQ3n8QXc9zDBbTTZsV37zG4KgPkOAGyOVJrxPwzqVx4RuNSZltnmvlWJZI3bdEg3BwMrxvBAJH8II6Gvjsvp1Xjk61owu9T95zarkNHKZfUJOdeXK2mtnpeKdlofa8lho/xH+HB/srUtPuYSYmBt5BN5eEVhDKyk7nU8MwPvXnOk/sW6p8Z/D1xDe6/ZaHc2zMral5TyRT7fmWPbnLMAByOgPOcVzfwf/aO0fwjZr4d8aQ6hc6Q9yhElm0bPbW5P7xUUqpY9SMseuM19xa18Q/Bc/hG1vvh1q9tdeGL+z3afPb9FbGORwVcNksGwQ2c19BTxMqNSVOlPTv3R8mp/WKShKNr2duzPz+h+H7/CTwvc/D3xV4P0wahZ6rJdQ6qsyzNNBtKoRgY2v8zD2AHUGuS1K8sHMvm2NtKp7NGAB+navZviVfap4oOpvdf2Wj2reW5dC9xPltys5AA3YHy8kKQeuSK8Tm0G8EhLbQzAfLIp4B55r7DKsypToeyVk1+J8fneBqUsQq3NdNfdYz08P6beWUl9Ys9vPasJJkIzH5ZPDL3GCOevUV6T8PfBzWbahrF9H5QkuJXMjLgCIMSG9gRzXMaBp8WmzRXkxDsjbWTcdozwScA8Y7V6Zr2qTXFvFpfhmP7ZYOsYuDbKXZJAAu3A/hGATXLmNWdW1Ons932RrllajhoyrVtWlou7M2/j02bUNMv9Gurctc3gjDSK3yqyoB53mAhTvEhGwY24zzV7x9ofivwXeW2parzHc7oUaNlYb+2SvIxxkEYxk54qW68B6tHp3mXk0VvKYxPHCy4kLDlAB6np6jNdh4s8YeFda+HulXniO6ud4uIo5Fgi3SGaP/WKQxAAZMgkkcOO+K8atiJYaUPYNyjs+ptTwscaqn1mKhN69vmzz3WPDvjHw34bXXL7WpLPTpVVk2SQ+Y5kBKgxkZHHOAeBn0rze68G+B7u6GqXVu/nbgw+fYm4tk5CnA+ZiTgc5Neo/Fzx5pfivUtI0LQbkT2ohFyuyFm3O2Pl2+oyi7TzlyKdJ8Hdag0uS7k1CKe6gj+0NZLcMZSBzjAXYTx0GAcYDE1rSxS9injErt6KxlWwklW5ME3ZLV3OJ1rSNa0lbAatZ3sdtKHjjWR5Y8Z2EbQVUbFAGVB4yDiuQi8A614i1a6i0HSBIyOXKqJJCQSfmCIDgdOvqK+ifinpN54obwdZ6XPbIGjluZpLhtkcUXkod7emcYHqazvC+hwfDHxBbaxrWvWctnqqNZpJHGyqsnDLySQQQrD647VlDOXCg5fbfQ9KGS1JTSi/c79fkeHaN8Ndc1i6u7ODfcXFmwjlit4JJGHAOcBeMEgc981D/wAIrbQyPG0k8rxsUOzAHH15Fe2/CeS40vxt4oW+0+5ha4dyjOjBMiRRjcRjJxkAE8c1y2heDNO8QW91q+ra3FpsMt5LAgmK5aUHDDBdQMHuck+1axzeopy9o/dSW3mc8sBeK9nq23+By+jeAdW1KxF7psUsVpu2gtMdx98BcYrT8P3H228g0ySALNHIfMn6kBWYtjoOST/31XS6/rmmeA9HOmXTR3ckUJa0mibCSJ04UE4kB4Iyc5BB9OL8N6tZ2ln/AGnJHFFPLKY9pYZOeWP5kD8KzeIniqcqklp0NsPQdKsqd9d2e22durQjMmGx8n0Arxi+0+bw78WJZtPjRJLyRJ1LruCl+WbA68qfzr0HTvE9usKypsAAx97gfhXEa5qbTeOE1ePbcTC3MCmM58oc5Y/UN1NY5ZTlGtLn2aDMJqEVy7n6/wDxT/4nXwb1mYYY3GlCf5e/CtxX4eahJ/ZGuW95BJJDe6ZrU9uJo+GaCR2O1vXawOM9uK/bvRZF8Rfs+6dcNh/tvhOCQ+hY2qn+dfz7fF9dW034oeK45ZrpVi1m7VGMjcASsRjnjGa8bC4v6m5xS3/Q9aMYy5ZS6f5HvfxAhGuxWepQReSLxTNAqRlSXb5ZYwe4y24d/mavs/8AZj8QeLPGXgaSPW9PMeraXcGzvPMiW3aPaoRVKKBjiMjoMkEnJzX5meCfi9PHCui+Lrh7iCJC1vfYLTxbR8kZPdePl7gnnOePcv2e/wBqj4ieHvEyx32ppc2niXUt995sS/aH82TAlMw+Yuu4nnIOT9a1xuIjisIofaTIirYhz2R+il1DrVux+0W/lqvIIJII9QScccVCdRumbdI6kf7Rwax7ya4Zj5kz3CjP3m3HP4mkWR9qsYcx/wBzbhh/OvnOVPc7o1JRfusvajHb6pp0+m3kLYuImXKjpu9z6da8Vbw3eaSY7ZbeW5jgJhYR/O4weQygZH5Y9K9ekuFysYUKDwFf1/OuN8deGtc1Kzl1bwyyW2rxR/uoZsfZ7ojGFcjmM/7Q9s5q6Vo6Cq1ZT1Z88/tDeD/C8mveE5F8J3mm6TeRy6Hf7m2zXIb/AFbF9gBkXcvOP4RxxXFeE/2afhDqmtXV5r+k+LNS0+OFYobCCZoTauSP3sk6IS+QGwu0Ac8nFd948sfjJ4vjj8Ka58O/scttOt1BexXAeBJUBK/MMgA9MnvisK5+Kfjr4VeIp21Tw7dxWV/I1tFKzSIlyytuQxkDk/MRjrg11pu1jlep6z8EPhH8FvhX44Or+EtL8RaJcahZS6fPdX2rvNBHFlZQWUohyWiQA7hgk9elfRE1rDq1no994e+PunLNa2H2G4L6oiJcbGdd23zAwJ9WGTgEEjAr5Vj+N3xUhQtefCfxVGmDuUMWyO+R+mD71TX48a1ZzOZvhX4mgjxuJWzzjHrgVrCtVgrLY5quGhWkpN2Z75+0t4a0T4kfBPW/hzqHxN0+a5msFkLR3BvEtJIpxNHKQrfOSNyYBZxkAcZFfnlJ+xT4kCn/AIuZ4cU/w7rO85+hEZr6Hm/aGsmuBJc+AddkTJLK+kFiM9CMrwamuP2ptFt5W+0aPrkJ6Yk0zBOfqtJ1aj+JGsKSpR5Ys+XPHXw3vrpdQ0P+0bZrzw9Ll5dsmy5DRbW2ZGRlolI3AfeqTT/2PvHWsWsOoaR448HOJolmAa5ulZGKhgp/cYJ5xwcV6hr3j6z1LxvqXxP03S72TSb+zMF60lrt2SJ5YIORtB4HXH3q6L4YftB+CdD8Fab4b1SOBbvSUNru/s+NvMiVj5TF9vzNsIByTyDUObuaNHqGhw6lp/huaPUbOG5kTy2ETkZlJRRLtJ5XkZGfxrxP9orVIL2z8OW8Gn3dkyX0paO5QKuCijIYdfyrudU/ab+H8Cny5rVTnr/ZMZP57a8i+MPxW0n4nJodppdyHGn3Mkjg26xBdwXHCgHnaRzSppuqpMpe7BxPPfDOsTeF/ilp+tIFRra7i3sxwPLJCOCew2E5r1z41eF/CVhq02o6TfzSXU0374ySeYtwcYZ1BA2jIJGOMYrwnxIrHxAzqqxpcggAdFByMA+2e9dLeeJW1gpe6hebpREi4fqgAAwfxzVV1Z8w6WvoUfFGpPpegXlzDdNG0iGFNrkAs3Hb2J/KvNNIjlFw/lrlliO1fU44xWp411z+1bpLG2kDQW3LMOjP/wDWH8zWbpNy1tcyPnB28fn/APXqIJqJpJpy0O78R6l9ruiqZ2rx7gdqyZL1rWCSZmA2jC57e9PmfMhc55/lXN6tqFteOdPmvktY/vNK0bPk9hhefxrJR5mdc5ezVzBvryTVNWluHYsZpAFJP8I4FdTpu61aG425+zusg98EHFc1p1mzXz87khyoI6H35rqbEDbtPSvUoQtG56GT0r3k+p9CaAsOqQwXVswMcyBlIPGCK6aO1kt1+8B755968s+D3iTy7j/hG7phh8ta7u56lP6ivTfE2prYWK7sI7sFHPbvXiYii6dTlZpXpSozcTN8U3q2nh7ULppCAlu//oJGK89+D9+dL1qwheQATR/ZpAenzcj8jil8feJ/Os10GCQESMJJsd1HQfif5Vh+H7p7G8hvItu+ORXGRxkHP5V6OCw16UubqetlOF56c5S+0rH0jeSwx2t82QPKtpGk46fITXhG1tm5QRhcV6hdX7f8Ifqlw8hkkuI1j3f3t2AT+OTXnX2eRvm2FgPTnmssni1CTl3Plc1haaj2K0eGUcxq2O7U3zCcIWAx7/0q19hdlOFAPP1xTfs21jnbnFe0eTyMqP5a/wDLTd6Y6fT3qMmNmba2M/3vX2q79lg/i/D1z+FDQ24YepXrjFG4ctjOaMe5JbjH+etI8bZ2hsDr9K0jDEE+VT1x0pDaqoLbGJ7f/XpWYWMwNLHkbsjryak85dv7wbx9eprQNjltrIBxuzSGx6bdoJ+UE0+Vjtczpls5B86/Tt9KrSJbhhtbYO+eK2W0k3ERjMiR4PZuTVGbwXHIw8y+fk5yecf/AFqnldwUexlySRR/KtxGOehbmmNcWzOMTRqSducitlfh7Z53DUuT7fdNTw/D/S3ysl8S2cqB/wDqoUbhyXOfW4s5MKLhcHjHrQy2snzR3Kf3SBXXW/gXQ1bEk0hz0HPI9PpVm38I+Ho5ObOXAXG7b1/M0mivZNnFGz35I6Y+lVpIliuo7QsD5uP616fDo2hrHjZPtxnaVUYPtmuO1m60O18XR3cajydOiKvEXALOFY4Gep5FZzkktRqhLsV/Cqv/AMJZYaVJl4Z54WaMtwfnH+ea+idL1DxNfLeLa2dlavDKhR5bYbOSxeMDCnhdoz2OeTXzDY6hqeteKEvrFWgupHHkJGSDGF5VRj0/nXQNrvxAkultbrULve8xgj3yMoaTbu2jcRnjmvKlVjGpKVr3PUq4edWhTi9kj6GC+MFZ0l8RRImeGjsUXafqW6D/AApt3dapbWAgk8XLcXDTB2maWODEQUjaAvvg+teY+E/g/wDFvx5H5mm3VoI5CNz3Wowwgemdx471Y+In7Nfxf8B/YF1BbbVJtQn8qKPSbr7XklSdxMa4wAKzljYp8rjuRDLJv3k0c78RtbaPx3o5h1lLm6sdPVvtCTbyJDMzD5hzkcV7n+z1468ceJPG+jeH7rxpqlla312tvJJHNlgrfeIzkZwK+LbqO+sdfnW4YmS3kMTsz5zjjr6cV95/CHR/2f8A4P6b4R8dfEDx94ptvELW0Oqy6TaabHcLISvO1gfuHPGcH2q3VjGLUt3sUsPUlFez1Udz7V+MOqWfwK+GereNofE3ijVzpyw+VBcXhxMzuqKPMAG1fmyeDxnAr5gsf+Ci3iOwknvtJ+G2kK93tFxLcXzlpmUYG8hMkDnA7Zrpf2kv2uvh58ZvgzrPgHwD4T8Y3F1qTW/kXF3p6x26BJVctkMzHhMAAdxXwYPAvxVuJC1n4F8QTBckKthJj+VRh8NeLdaOpzVJuDsfRX7QX7Xvib4/+DIPBeseHNF0Wztb1L9ZbGSZpHdEZQpLHG35znj0rw2PxNcwsrPI0MMTLtGcA9BVZfgT+0drEeLP4U+IdrN/HZsoPPb/ABr2b4P/ALB3xG8fzXUPxRbVfBVrAkbWpeKO5Nw+eVCI4KhQOSfUDFbSjSpR1dkZqcpPQ81XxVDHcC3jlCRhS7HaMde9QTeMLV7yNZFjkjTceeGzkdPbB/SvsbQP+Cdvwx0mRZte8Va1r7jho0lWzU8/QmvaPCH7M/wJ8DzC60z4U6bFNGobzNSU3mOM5y+4Z/DvWSxeGWkXcp06u7R+fnh2y8YeMr5Lfwp4U1LVGZxtNrbPIQc+w6Yr6W8L/sjfFrUtKiv9Yv8AR9CBVcR3BmluAGx96JVG054wWr690nVNNsYWtdPNpYwrgeRDD5K59lAArU/tTTYY8XF+ZAy/MFUKCT6EmspVVL4VYpXR4N4f/Yg8Kxxxr4q8eaxqDAfvIdOt4rOM/wCzube2Ppiu88P/ALLXwG8PyJby+BbTVZ+XSXVpJb0kA8ZVz5Ywf9mvQl17TIlVYJYGx2kl6/XvzTo/HGj2xeJbm2j3fMzmTcN3oM9vwFZOd95Ds30L+h+ENF0O1S00HR9P02Dn93Z2sduv0AjArYis7VW3cHI9iRXG33xW8I2v/H5rFsI/4n+0KuOeO/Q1y3iL9oz4Y6DFJcN4k0uGTI3EzK7FByRtU55HSsZVKcNZMpUak9Ej2D7REyssKsdnB9/p/wDWqTzPlLCJVHfe/FfJ3iT9urwXYRyDQ7We8IbbG0UQUFfq5Ax74rwPx5+3N8StUna10W1tNPjdSFMh8xh9BnArhqZrTT5aacmdEMunLWTsfovfeLvDtkjtdatBiJvmEb7yD6eled+L/wBqL4W+EYZZL7WrVTHnAe6Ql/oqFifp1r8xtc+MXxJ8Y7o9b8U6zdRnlYYWZYjn0EYwawU0vX747o9F1iZ+in+z5j+Gdv8AnNclTMcXL4YW+R2U8uoL4pXPuLxd/wAFCtDeN4/C+k6hcHcQrKggVh/vNlsfQA14T4s/bM+J2vTP9htdN0wNlQxV7iQD/ec4/SvHV8F+PJVLQeDddlU/MzDTZsY+u2tOy+EvxU1KOKS2+Huusr/MGa2Kgg/7xGPxrzascVifjTaO+lDD0PhsiPXvip8RPEckg1fxVqdwhyPLScxrz6BcVzhmlZmeRnLucszcsfx6mvQLX9n/AOLtw3/Isra8Z/0i+t4/5vntWnD+zP8AFqeMzNDoaIvB3apGT+QB+tZrL6/2YGv1il/MeRtJJG4+ViH6D/Gorhv7vHcbjXsR/Zb+Kku3DaEhYnG6/bsOuBH0pI/2RPiNPIS/ifw0jKMlFaeXHoAdgBzx371vTy3ES3jYzliqS6ni/mFkKtw3cq3eqkxuNm+FgxPbdX0LD+xv4s2j7Z450hWb+CCwmkP6kc+mavWv7Ft9uQ33jebBALCHTFGfoWl4/GumGWVkZyxdM+bmVl27pOF6n+lOUyIjurbic4x/Kvqn/hjXwxHn7R4s8SN2/dx26enOSp71ct/2Q/h/bxlLu98Q3R5b/j7RCD/wFMce9a/2ZUfVGf1yHZnxnJDc3UjNIWVc8HuB6+9aMOnYVWD4T2719f2v7J/wxjkVZNP1qaLk7ZNSfBHbO0Ln8K1LX9lX4TWt0btvDupSo279y+qzeUuQOytu4xxlu9avLqklbmSM1iYp3sz40S1tkYssgwBtxn+dN8m3iw7P8pbd/wDW/Gvt+P8AZn+Drqqt4Hi2hkk3fbrncdvBGd+drDr+mK0rf4H/AAnsmSG3+G/h9fKzgy27zl/Tc0jFv1ojlklvP8BvFrpE+DZ76z+VlVY1DHo3Uf4dqS3vLYzMxkGz2r9Am+Dfwh/eTP4C8OWxuHYSN/Z23g/3Bjav1GKs6X8I/g1YzJNZ+B/D7zQncv8AoqHyzjryuT0B5781f9lRatzCWOcXsfn1c6zpSBVW6jARh/FyaY+pxzKPs9vdzhsqDHbuwJ9Mgcmv0jg8B+C4nWW38MaMrI2QwtYU246YIXp1+tbUmm6fC21ntCu3KrGR8vsB+FEcnpx3bB5jOXRH5kadovi+8VZrPwL4ilhjP+sXS58fntrpdL+HnxT1KX7Ja/DHxG8u1n+azZV2jrktgD6Zr9C/7M+3bwvkRpjozcvj1wMD3q1DpMcLKkaoVT5Q6g8N06ADBrWWXUH0f3krHVfI+BLH4KfGa4ICfCnWkbd/y1WOPr/vOK2F/Zs+Om4xp4DSE8ENNqdsobIzxhznrzX3FNHdbtlnNbn+8PMO719DmmeTMsyrEvmyqvO0ngeuegoWW0O34lfXah8Uwfst/Hh4/Nl0PRIW5ykmqpuGAf7oI6+9TWX7Ivxo1KQi8t/D2nRr/wAtZtQLg/RUQk19pOscETSagxgPG5VkyM46dM5zUVvKl5/q5rcKM8MxUn860jgKEdo/mZvF1H1PkKP9jP4mXEiwXHibwzBGj7g379846HAQD8M5rRk/Yo8YRxM3/CzNE3jgIunS5b16twue9fVyfZ1ZGjuIEzw3U8Hv71ZnvrO2BjhvIZG65xlvpgA4/OqWFpL7KFLETfU+WtN/Yju2hWTVviY5b+I2emoVI46b5M+tdHa/sT+CFh8rUfGniOWcMOVSBFx9AD29697+2G4tfLmvjGdvWPEZH4njP4Vz95pmpXiyJZ+ONYWQ/dj+0xk5/Lk/41osPT/lRk60+55hafsT/DNWia71TxVc7W5xdRR7h/wGPisP4wfs0fDz4c+A7zxX4Y03XPtUJitpJru4MyiOVwpcqQACMgZHYmvWovDuutKtu3jDUlOOsiTEj/gSPx+Vc/8AFb+1tA8AXtxr2sXOtaT8kd5apPMGdGcAMRJkAK208cjA61006UYSTic9Sq5RcWfnXdQtZzS2rLgwO0Zzx0JFVmk2n5sHHavdvGw+GfjaY3F3Z32narwhmsXQK4HdlZSGOBjjBrgh8PfCN1J5cPi7VI9zDaZ7GIgD3wy8/SvZinI8pu25xYuLVvm8so46YXg1L/aEccbMs2M88A812c/wZgk3f2f8RtJk29Fmsp0P5rvFU5Pgn4o3brfWvDl1jC+WNQeJm+nmRqP1qtSWcdY6ldLNdqLqVQJxJ9887kHfPqDWxH4ju4o0Vby6Qr0IkbH86sXXwr+JVrdSra+EzcwuitutdQtJfmBIxxKOx6e1UZvAPxNjUvN8O9f2r1MduJQB9Y2aqUmiLGhH4w8RQL/o+uXQ90nbP05NU9T8Q6rqqn+0NVuLlljKkzNnA9BWVc6H4ssf+Pzwl4gtwcf6zSrgD89lNg0vxFqji10vQdWubiUYVI7GYYJ4yzFQFA7knHWm5hyno3/Cc/F7xd4PnvJdX0WXSdOjuJCtxG6uiRNtYK2CGf5lOPevE38UXF7MfM2q7E/dXA/nXpvibR/HFr4f/s1NJks7Fkw4t7fZ5vO4l2Ay3zfMfevFr+zurSb95C6MG/un86wbkao2f7YuAoy2B6nv/wDWru/g78fdW+HupXGj6ldSHwxqcgN5Dy32dxkefGPXjDAfeGO4FeSNfTsnlyYKj25NZGrXTSL9nTjzDubnt6URlYuLcdUerfEz9pDX/Fd9Ja+Emk0jSYy8cbBj59whx8zk8LnaCB1GSM15yvj7xpDN9oj8UaiXznLTFh+IOQaw7eEvIFUDjqx6Crq20zRHMccifTkf1o9rNbMJP2nxK5698M/jQuo38Oh+Lo4lmmYLDeL8iu/ZJAOFJ6Bhxn0r6a8JaLeXesHWfD1jJZpFKjS7bpy0seFcpuz8pb5hxzz14r89JoTG3cqf0r6m+DfxU1y30vTdWt7gtNPbNZ3av92WaA4UkZ6lGBz7V6uCxdas/ZN3fS/9fmeXjKNOhB1I6R62/Tt8j7Ahk02O+OqW3hPwtcr5/nLNc2s00jIR93LyHaQcfTBGO9c1b+Lry41TVfE2l+EdEk0zTdRim+z2tkDIkqgZmgJz8ylSSMEMrkEYPHk+sfFbVLrOn6efsbXh3Suql1iUkB5ARyvLA8A9yKd4s+IWk+H/AApF4Q8DXU11DKrreXLRPC4QkFnDNg5OeSBwAAOa6Kssd/Dlq5fcl+hy4algF++joo/e389Wem6frl5H8WNG8ZQ+CfDmlQ6nezXFpZLpMaRqkeJG3xkfebaGHpubtiuk8QfFdvCfxEuvHl1e6BBdeQrJpdposRklzD5eJCflEZ27hnA3DOeK8v1r4reHzY6Lq8N1Lc3Wm3EU9xbyQNG6q8TxS4kcBNy788nDY681R8V/F74ezQDVrPThqGtRxbLWS4s1/c9SGPJ3bck4AP1HWuN1sbWnHmg7W5fl8/zPUVDA0YScJRu3zfP0X5HoN38ZfGF94Q07U5rfRQZVkhs2XTYCglj1BJ4ojuXGPL8yNCewI5zTbyxs/tkkGsRaeJfsIWXEccUb3jGQIxVBtWRo87toAbrjPNeKeIvG2j6x4A0vwPpbXHmi4hluxujOWV/MZo2Vi33/AJgccAVSXxVHb6pbw+JHv9Y0rL3b2ckpPmXByBJuI5YEjqc46VLwWJqKU4q2r06nbRznB0Yxo1HdtLVLT776Hrnh/wCJdzoPivQPCVna2cpv9Ot/Mluf3smHjVmOGUrkHb7nnkVm+JPDXh/VPEHijxl4ksIrmzsJlWOzT91HPM0SFiwXAxl1HTkk5zjFeb6b48Nv4+uvGOoaLdXUGzy7GEBlaAY2gBwhHyqAOnetiD4uzSaPqOn33hWfUGvLiaZPM8wLIjtkCRQuX2jaoKkZCjO3GaJYbFU2vZx6K+v3nL9bwlW/tJLdtaGv8TBpV98J9NuodNtrPfMiRxQjKRY3r8pwDjivHJUjhmt7OGPcXiKhdxHzA/eNdh4n8cjxVaafpb6VLpcVivzpCZPJY7QAQrKu3Bzjr1PpXJalY6tP8uk20bNnJneUgbSMFfXr+HNejhHWwuHfu632uefiK1GtiIvm0S37s19C8UQ6bp942pSQfaUTEKbvmkH90Y7ZqW11KGzje+uoirlTLKijBC9STn2/lVDwb4Rv9M1RNe1K7t5p0/1UUi74o89wM8n0Jr0LwJ8L9Y+NvxH0jwLbzSMNevUtZ7hVA8m0GXuHXHZY0f8AHHrShXqU+adTbfciq6eJlGFP8j9P/wBl3V/+Ew/ZZ8C6gwB+2eHEhwO21Wjx9RtwfevxB/aU0ldN+N3jW3fIP9qyPjdyu5Vbp+Nf0E+GdN0jw7Yw+EdBsY7TTtFtYbW3hjGAiBcAfkBz3JNfm/8A8FTP2TbW3aH9obwTpoht5Qll4kht4wAkpOIbsgdA3EbnHB2Hua+cvzybPcg7LlPy5mh+zyJdR4AU8/jXXfD3WGtb6C9ikKy2UyuD3ADA1zU0LYeCRSHGVPsa0vh3C02uNZ7c71zj3yKliejP2Vs7i21Kxt9UDJLFcxJMksZ3BlZQQ2e4Oc1ZAhQDbudgPmYLya4n4Q6XqGg/DHwnourXGy8g0q3EyyH5lOzO05HUAgY9q7FpreP5WuI1J9P4vpXE12NExftEP3drkL2kVvx5NOS4j8netuFUAEBjwT9eaimezVg7hd2Dj5uT05pn2612lVnG7oP146UmM+dPj98cvib8INcuBouk6BrGnzRLeW0OoWrF/JxtkRZI2Uko4B552sK+Z/it+2JqnxY8M23hrWvhvo2nC1vEvRc6fdSiQsqsCuHyACH5+lfa/wAf/CvhTxn4Fmj8QXT2LaU4vLS6jXcyNwHjweodflI9cHtX5reOPC+r+G/El9pN14Zgt3SZhGqqZ18s8qVdWKt8pHI4rtpTUo+Zm42Z9C/8PC9LZo5Z/hA6Mh5VNWypH4oDnPPer0P/AAUE8BzKq3HwkvoJD95o79G4/Kvj0NqhkkW30mNZBgKqWIJJzjoVJNdPoPgH42eImaHwz4F8UXksKGSdbTSZR5adQz4T5Vx3PFW5Rgve0IVNPZH6B/Bf4k2Hx08N33ijw74JbTLCwvfsT/2lqaxGaTy1ZtmEIwAwySeprV1RNFspsXl94dtSvLB/EVqvAOMYYZry3wh8Pb7Rfh94Faw/Zt8U6td219bXl7q2pRWcKam7rL5sWZJCfK3MQu5cYhUnpXpGh6D8ULPxdrMWmfBPwD4bjmtLKYf2hrFqqRMFkVtjwQuJC2VJAxjaSevHK8VDdSX4Gqw118JkSax4Bt7llvtQ0WaN/lVIdRhnMjEHjCZ3nr05OK8K8J/DFrX4xX91Y6fHqPh5muXkijsZrhreKVC8aurQ7VYtgKPQEjjNe2ab4B+O8Pw58G28nxI+H+gWOi3VtNCi2k011avCz4klZiFbaG5QdivqK6XSfgL8StU8caz/AGx+0Rrqm6gt3vbrSrGHSg5iVFSFhIjujAT4GB0yT1FKWLjHz+T/AMilhtLbHns3w/8Ah7fO8L6Lo8MqhXZZ7BIpEyMjcCgx+NedfFTwFYW40k+ENDsr5Y2laVdIEcgU7VCCTyskdcgHrg19BaH8K/gHcard33iz4ma9rsEkSMkOq+LJo5ZsfKZJlQoHVcOBzwFHHNZusfCG90HX5dN8L/DQ6fotvnU7KxtLOzvmeCRVKzrI7mYbxj+LBYnHWtaWInOWkWl56EVKMYL4tT428ceFdfs7y0Mmg3yOUByLVyASgOAQOMcEjtmsNfCXinXL77H4Z8H65q+oy738qzs3lwhwQxVRuHLEZ6V9h+Po7uCzgtbj4Z6ot3C3kSQy6PctIEyAx2JP1zgHgDjrXG+GLzWPh74ssfEs/wAM7i401EZbm2j0WS1F3bsOYzcSXDMjK2CpGACBkdRWtVyaulqTBxT1PEtD/Y3/AGjNaiNxH8L9Qs4yMg6hNFak/RXYN+lekWf/AATv+M11HbXF1caRo26Py7j7XdNLzwAy+Wh7/wAOfSvoTUPi94FlvPD97b/ELw/4Rt5900tm/iHU2kRJFGzzUSUFdvzNhcc4ByCBXrvi7wr4x0LRoNV0/wCNmvyzm4tktoPJV4PLlkUMxM7SNxGWK89QCRXmzqYhaSkl8v8AhzsjGjfRNn5IateNbo3VCffmuNW/8u4lkNnb3PnDYBMpbHuMEYNelavotteyLeSAmOBTJJGP+WmAcL+Jry2Rma5ZtgU7y23sPb8K7sPKM43O/Nsuq5fW9nU2ezN5ZBbxiMn5+re5q9a3n8Jbj+dc79qEnLdatw3J2/KpY8f/AK67VU0OjD4jkfunXaZfSWk6XtpIUlt5BIrDqGByK7Lx58SG1iaxnt8jfFvaPPQ45P0zmvN9BhutW1C303zfKa6lEYOOnv710Xi7wZZ+HZrSO31pr6SdW8wBQAm3GMEHnOaidNVrSl0PRq/7XGKtqZo1CW4maSWQtJIdzMe/0roNLk3bQp59K4z7NqCTDy7dmyeNvJNdt4Ttbh76G1vIGWQkfL/jWqxCpq70PTwVb2XxqyR6/M0kHgSBW+XzHjVstjPU/nwK5VrgBNrRMT/svmvZfhf8Nbf4yakngGLW4dPkgDTRzSKWDsi8qAOehP5V7JZf8E+NFj2m68fXLv8AL5nl2gwPXGX5zXJg8ZSp025uzbbPiM3nzYqUu58atPHuAEZbtn0pokVW+6i56ZXNfddt+wH8P41PneLNXlx8w/dxpg/U5rTtf2E/g7CiSXmpa9McZZRPGoJ/74rp/tKgv+GPL0PgQzRL/Ax75A4GfSmo0TAqrY29BjtX6O2f7G/wFs0IfQ7+Un+KbUJPlGOwUCrNj+yv8AbcvGvg+W4wQQZbqZgR9ARxmp/tOl0TC/kfnFE0JfB3jAPToe/pVuOxWQDydkpP3gG+574NfpbB8BfgvYzKkXw40twBtBaEke+cmtWH4T/DG1x9j8CeH4yCGX/iXoenqSDWbzSPRMPkfmC1nGrLujkwB/Cg/mTVmLRTMn7uxuJmb+6F/wDr8/Sv1Uh8J+G7e38q18J6Oqgkbo7GFRgf8BqxDpOl28PmWeh2EQKgq21U28ccAZ/lSeaJ/Z/EXvH5gWHgXXL6FI4fDGun+68enu+T/wABBGKu/wDCmfiZcfNp/hHXJQ3BVtOlQ898EV+oFneTPG1sGDBRt3RFhjH8vTpTZoQ6mP7PvP8AEN/T8cc1m8xk9olqUkfmHa/s+/Ga7meOL4e6rGQfvSWxUEf8CxjNdLafsj/HK42yHwukAPRp7mNT+Qb9K/RWL73zxtGuO7E/QVKwRpFSOO4I3fvMvjr6Y71m8wqdEhucz8/rH9jj4yTSKkz6HbsAQWkvOhH0BNb9j+xT8SZnVZ/EegxK/AOZG5/75Ffbc+3d+6t3kcZ27myB9Tjj61Ms/wC5CSWq5IGcdB9Kh4+syVKp3Pj21/Yl1xpFt77x5p+8Z3LBp8kjYHplgPxNT3X/AAT38Ez77nxH4ulZ2b948OnrG5Oex3mvrbzdyho7eKNfUxkgD6Ac8VLFqse7yY7WKIL91mhGSeygEe/6VLxlV7v8i+eXc+WfCX7CfwJ8KazbeIrHxp4gM9ueEmaPYx7jGzI/Oug8ffspeCfH2pafdXnxS13TtOtY9n9mW8amKYls/ve5444AIFfQTXqwMzNbwSbiG3Mo3D9OB9KWS4WQmYJEjuvOOP6VySfNNVHujeOLrxpumpaM8g0H9lf9m/wvIjx+HJbyVQN0lxeXDhmHcLvwtdraeCfgjo0wa38D6KJSDtluLUSSNkYPzPk8jj3rplWaXb823H8OOPpjvTZEZWZo4Yd56PIo4/Ej+VNyk9zHnn3KVno/wlMK2Mfw/wDCcUAP+rXSbdFPcEjZ0rQOkfDuZ43bwn4aZolxEx06FzGo6Kvy8DPpxUPmb8RzCIqB5fA5c9SeOlSLBJHJuZeudu1ABwOhNRYfPLY1IP7FitxBDbW0KqNoWGNY1A68BRxUhvtFRF8mRYyGKsvmZ5Pfjv0rEeONpA0cgMjfewo5p/2fduVo3kPdU24GelCC7NSa406EiOS65b5h+9A3fhSDUvDcNq3yxyNu3AyyNu4HTg8D3rDeC1jZ5lhhUqwVleQZzjoDUTR27AtJHChXnEeDn86q6RN5I6mTxFYiFIbKO0iQAb0XBLn1JY4NH/CU29x98Ro2TgwgJ1wCTtIz0HX0rlkhijkKyRhd3TOFIp00NnBH5kk0OdvQAZz3z61E1GS95XKjUnHY6G5vNDuVAa4uXd42C7kSXazZw2TggDrya8qk+EOvXSq958YvGE7EgFYltYARnnBwfz5rs/Ksyv8ArtysA2NuAB34x1qSC7sY8pDGSSSFLYGPf2rH2cVsjdV6nc44/Afw/wCYf7W8WeNtQUEjyrjXFiGPfy0DevQ1BN+zt8L72ZhJa6lKsn31uPEN1g+mcOM13itY+WWmjdN3C7fX0yeTUMaaUM5s437sSep9c1cYLsS61TucSv7N/wAFrVma78I6ZOSiqVvLq4n3AdCA0uCfU/StfSfhV8NNDaIab4L8OQyqv3l0mKRgOf4mDfzrbk+z/wCsSG3RGz5RaTc24deByKhkV2DFrqNgi5ynGM8Zx1PPYVdl2IdSb3Zb/wCEc8K7UUaPpC44yulW4AB9glN/sPQ5FSFbHT5IwCu1bGFe+ecKOM1WeYQqY2kI/vE56jsee9Q7lmk+a4niCjpGuPxz+NNadBc8iy2jWCw7bfzY0TOAu1VBz0Cjn/8AVUB0V0BiW5Yow/1aj7wxk55NRqFV1xFNLsb5ZH/gP9CefzNTzXEixxMYWyP4gcMTz3x19qG0zWOIqRKJ0uI7t3mPGu3dyGCj8Dk0r6VZRDzFZf3jfLu4zn0J9abc/ZZg8VxDE4l2ll4IPP8Aj3pW1S+aNbHcYYY2KhLmMuP+A46e38qErmqxd/iRnzR6bbqA8kLbchkAzt9cgVF9q02MRu0McTSKdp8o4cD3I/StAWdsqhpmiWRxxJEhCnPAJAPH0Iqi2jxecoBlZQ53bjlR9Om003FnTDE0X8WhOupaT5LBBkn528qI4Hc5GP1qxbtZyIk8N9ES2PlLKDg88c//AFxVSbw5Ay+amuqDuEKBo+SD97LIcnGaoXXh3UEiX/SLaWNlDHy3G4gegbH6UrSNI1aEtmdB9nVZBtvIkH8TeYrAH046H60xvsccohSUtub7zHPQ9MD+lcjcWWqRtl7KTC8CRySNv4DpVGPUZLWR1aV13HLCFiO3BxwOKPeNUodGd6lvZybGaZ34HQYIHTBP5U26SyjT99IqhSDnbt49ff8ACuH/ALUmdji6kBXGeTxnoRk/nToNZVGZBCJJB0835l/AE1ViHZ6nXLcabDxHcBSW6t0/lwPrVdr+xEg8uQzP1wf5c9D0xiubjudPaQeZdMrP91VYcexHUfyp8N2u0bLyBopGJTzQrY45XJwBwO/enYT1OjbUbWMgS71QjHQH+XIpX1K0uB5cSlTtOD5m0j8K5yG8/eGOKNJM5KSLhVIHHPvk1bVl8kPOtuM9WSRfUj19BRYTL0l1B5iO7CU45LTdOvcDmnm+CyA/u2UnhVx6/TmsprqOP7q7/wCFDuXk/TpUTXscY8xLNAx+YDP6Htj2qhKNzRuL2NsLNCvl56soyPbgUzy7N2LwzKoIA+dG/r+FZ66oJVRvsyjbwCo4PX8wKWbVp5mKbSoByvOR9cY9M0XE4F77RdRMGWYOByoCKScY4GOemetWbe+u0xcTabsyMu285PpnBx+lc+14qfL8jOTuPYn8+tS/bLmZVkG0c8c8GjUh04p3NVvEEWTgSrvPPyDaPTnbnH41YXUJlXcjRuWZWf8A0j/Wde4549651ri63GSOZoSvG5Dgj6L36VHt1DzNy3TfOON3Xj3qkjOcbnY/aGm2XDWtqSnIyXPGPUDGar3175jjbOsK9WY9Pwz0rnI767t1Frea5tO0sI0UjgDufX39qgbVBMsi2twJNvDNNzGDgHgev9KEkZy5rbG9NCkg4vLeLJ64UMce/aqckN9atvkuopkXndHt6Z5GB1NUY49w8z7VaHecMojGfp2x9fakXS7meT93brGM5VfKTJPud3P0rTlRCnJdS1NdWsp3NdgR9SrsMnB65B4/H0qGzuP7WvW0rQbe51G5jAEsdpl2jUjIL9gD2JNX7bTbyQ+TdWcczZbJQKpUH8CKqzaDLDIFEzRFD03BgTwQCBjBHXPaocbmsattx0Vjc3C3FzaQiR7R3guMXalkkQgMrAE4I4B+tQS6b9rt57O8EVxDNEyTQzOXUo3BBB7VCNEvEma8htYHbH7tlXBz0Oe+P51eS1uWxCyje4+cjHHGSQvOOlTZo1VSMuh89+IP2QtKvr5r3w94vn0y3Ysyx3MfnbGzkAMCDtxkZOTwOteM/Gr4a+LPgpBBql34ntb/AE+eMss0alTuDqgj2tnc/wA27A/hDHtX3GHtZHkh8yWHyHK7mj2hsAHK+o7fUGvH/wBq7w+mv/AnxTHas0k9qsGoIgDEEQyhmx2B2lj9BW1OrU5lqRUp05RbsfDp+L0ccEV5qFxkMxjUNDlvlxknHY54PfB9K1rf4y6Dfw7U1SVGDAFCjY/PHFeJ67HuDzbVUhhwo4A9qxo325UZDfeBr0OaSPNtHsfQUnxBmbEllrMEkHIC9MD0zn6VDH8VPEti22z1oxr6KymvEbfWpLePaxMygfcdRx64NSNfW8yiT93Hn+F1II98rx+gpe0kg5Is96h+OXxAtwFt/E13FtPG3A/zzWna/tGfEiNUt5te+0KP+eyZ/WpfBf7JbeMPAOh+L5PEx0i41e2F2yXRnWPy2LFWVxCynKgHk1ynif8AZ3+KXg/xXZ+FdJim8SWusQCSHUNOt5ZYYmEhUxs7ooR+B14IYEVmsQjT2DOu8QftJ+NdQ8Oppc95Amxi2VjQZz+GfzNeN6p4813U5h5hikUKVAaNTwTn09a7W4+AnxatZprXUPCeux/ZnVJHutPEcWWYIoEh+ViWIAwT1FVPh98I9S8VfEiX4c6l4j8NeGNRtIpZbifxHcfYraIRnDruAO9+uFGc4OKFW5ti1QseZ3moXFyweaNEI+UbVx/nrWNM3mTSSZ+6Aor2f4//AAvsfhJ4ktfDMPiDSfEhubNL5dQ0uOaK3IfoE83lwRzuAHpXj9zB5EKHnJck1Sd1cznHl0N/wzom+GO8mUPLceYbG0LBGuzHjzNrMCoIB4z1PArptasi0bQyQoE3TtBLIwAWMKNpkGAQxyR7FR2NZcmqf2c1ra6XfXcjWtjbs9vIoEcTeX5jGNuozuOcfrV3Q76TxPHdx312cSgtBvOdkgGcMT1Vu4rOerNKemjOJ1S1G6RVRl+b5dwwxx1r1D4FN5nh3UY22Bre/SZFcgBsxlXXJ6ZH64rhtQkjuIJFmdHmW5EgeNflKsuGHt8w6fWva/hX8O/Aq+DLLXNQ+OOg6Jc6tumbTpLO6mnt5BJt+fYhXlVJwD3XnqK2oYiWGmqkVdowrYVYqLp3smbc0thIqM/h+S4ZRgM0cZIzzjJbFJC1nZqxXQkjWVcMB5Iz9Tu5+ldC3gv4WtHv/wCF76zeMPmaOy8I3bnGSMYPQ+1Zt9ovwPs8JqnxQ+ICOzFfL/4RLysgfxDzJBXoPPMRL/l3+ZxLh+ilZzZkwzaf5waDRLVAjfK2YwU79s1N/blvafNBp1ojM38MgUk+vC1gePvCf9qWMd78ArXxz4qFrDJNqq3ujbGgjHKzR+SWBX7wIPPGR6DwyXx94hVmjaNAykqwO4EHpg81LzjEvaKB5NhY6Skz6OufFUirHJHFaq0bZZTKTnqOu0VH/wAJfIkgkW4gQN1yGYD8q+cB4319sECFf+An/GvqT4C6P8GbfwWdY+NVrLret3snm29hYaggENsygINscu5pSSXOQCvyjB5rOecYqPRf18zSlk+FlpG/9fIzj4w08FGuNSfI5Iit85/NxUNx460hRi3vpcd/3QH4j5iK998P6J+zPqNwkGk/s3/ELVA5H77+zbiaMHjI3CYAjnnFet+Evgv8KL+M3Vr+zydMcANHFq9nChc59Glf9a4KufVofFJL7jthkeGenK38z4SuPHNi277PNMQ4xkwrnHr941QHjTdhGe6eNTnaFVcZ/A1+nemfA/QZl3xfDHwpZ7SRg2EDYHuwUAV0Vn8KdLtYUjsdC0ETvjYlpbxL/wB9HbtUfU1yviGtP4W38v8AgG39j4aO6X3/APBPgD9mb4d6p8dPiRp/g/7Fr66RMzfb7yztxKLGPYxV5N21ApcAHcf4uATxX6T/AAT/AGUfCvwF8TXfjGz1TUdfvntjZ2oa3RPs8bsu9sA4LHaoyMYXdxzXovw90zw74P0QaVY2tnZTyEzT+T5ZaY9N7FBj0Az0rqG1i1WSKRr6OOPB3Rv95icY9+OfzrWOYzqx/ePc5p4anTl+7jsJayRWhvLuZZxnMz5gboPT147DmvGfGXx6+D3i7Rda+F3jLRfEF9c6lb3Om6hpEGgXkjMhBU7S8Sj7pVg3GCRzxmvb49U0+Zd8d5Ew65DV5P450nU9Y8UXV7pNxE1ntiBZpBt3gfMOSB2z+NJ1Y017pcY8z95H5pXv7D3hO+01IbPwz8V7fWvKZpGuLCxggeZgSgMkk23avAJGDzzjpS/Cr/gnX8QvD/j7SfEV3r1jcaTB9mu7iHy2+1CUYaW3CruT5WG0PuII59q/Q3UvC9sxH9o+LtJsnJLIrXShjjqMZ96wtZ+Guh659mkk8dM0VuxLW9pqlxbxzjglX8llLkY4yemRXNUrVHs7fK50QUZP3kUJPAfiR/8Aj4tooEB37ppCnXnjI7Vm6l4f0LTbU3WueNPDNmFHCzalCh4Bz1IrQX4P/DX7Qk114a0u7lfhFlNxfKmTk8TSME5zwRVvTPh74X0G4f8AsLwBotj5jCSSVdNg3M3ptUEj8OBXO3L+d/cl/mbKnB7I46O8+EirNJe/ELTUaLdu+zlrjG3qf3efQ1ML34Z3DJ9gvPFmrRsm5ZNM8OXbow/3jFjPXv2PNemW9peRKrJC6qSAqbhGAPZTwCPwq2Lq686Pba3F0w/i80FV/Igfz71Lfm/v/wCAP2cVtY8D+KyeFdS+G/ijTtG+HPjm4ebSbtI7q90tUitnWIsJX3yAgLweFJ44Ga8b+H9w+paA/iO3+FOlytrnhrSZ1WWSyiiZzIVaX5y0imVWZRt2tuUEg4xX198SrSbWPAPirRZYp4zdaJexZhkKKmYH2sCATwSPyr8938T3Gg6Pomnrq01mdN0mC080PuIfHzYZslBumlAAOMPxirVSEKeq/ExrS9jZnrXjbw/r1x4V8HaiPh74Y0u7ntLi+1IWmJriNLcRuq/uoQ8IZEkQplixVj6k9Lo/wzhm8aeJ86P4em0ZdEc2kOn2F1OpM0UTIY5PPR87hIElYsikvn+GvDIfid8RVutuqeKo08OwJEYRE6IDMqmMFyoyxCFgDkdec9rWj+Irm6t4WuvFV49wYAIvJuHYrCOV+b+JQOx47VjUxiglyxOV4qK95I7vR/hxFcfDqwnutSmtNQjupZJbnJAms5YpGtt7s5VwWbZtC/Jhzj1fr1t4F8NfFq7t4fEWu/8ACPXtobNPs2uNHJb3DqUdpXi3bomMQUorE7SOudo4DT9Ts4ry0tIdSRoLm2WGSNmPy7WOADn5T15HvTNUhgsRcXUd0ks1rb29xAFwqErLlgONzZ3fX5vfNYyzGrJ8sUZyxUuiPQrnTvDul/C/S7OPWLy6v7a5nmI/t27KF3LKreQTtjJ4LlTlht6HONPQE+D/APwk174llXxZc291CstrLBfyStExSINEz3Ctvxsb5mByduAAorzzxBrs0dnHHpr5VJI5Wkk6bQy52gDIII+nXIqot1f3VhLpdxqESQ2ty6q6zEYhYlsFR14I49RWMswxEo82xP1io9TjF0641XXryz0aSQK99MbeLEaFYRIdkjEjnOG3YwMg9BWmdJ8TW9rPer9pnhtHEd1ceRvSM7cshdeNwVRx2FXrG4stHuLaTyZLyaAzxNvBIRTIXVhznjJ49+c1teI/iFrPiSz0/T9VvIP7O0yGe2sopoUUKHTYeFOFbdtOeDwK9SOcWtGUdTPm967OL1Rtbk1REF9PB5yJMZWBZySpIbhssD068fhXjnxc1RIfE0Vtr0N1qWLdfL8y6kQIoJBXbkgHdyTXvUviCFIxFNZxyMqFGYqHV+gLKT0Jx9eozzXH/EPQdF+IVrp7XVtOkulxSWyvbsgdnG0EEt98Ar/IDgVrHNac/iVrDjUtdyPEI18LS+H7jWFsbuK4juRbmEXOV2Mud4yvJyQMe4Nfolp/jHxrrHwb8La54Qfw1qsb6ZZ/aLG2gukniH2ZkUzyOxjMqv0xgsc/wiviDTfg3dTWM2n3V4/2ctI0jBf3kTjYQCvQnA7cciu/s7fxdY+CX8DeFdRuLSNFVwy4EjlWyG3KflIOPXrUYrGU3y8rv/kbQrqElbqeQxnepVuhFcB4w8NrY3Dajbx4hlPzD+6a7m1cEDNTXdlHfWrwzKGWQY+lKjV9lNM/bMzy2GZ4f2ct1s/M8eSJd2RnJq7bw9PmI7/WrOoaZNpl89tIp4J2k+lNjX0+gzXvQSkro/NVh5UKjhNWaNfRGOn38N+o3tA29V29+1b11d3mt3Yvb1gzFdo+UKAPbHQVz1m+MV0FjIoUACtox6Hv4GnGTTNGztVt4/Ofair145/CtjRbiOzvPt00IUmImNT97jpn61UtYlbbJL+8wRtXtn39TRfXIN1AsLhtsZVz/tE5NY4ymnQZ6mP93DHuP7IviC8s/ijobXDEvLqCrJnptkypz+DV+msQt5FR0kaTbkfMe/8AKvzS/ZF0c33xS0e4MQKWsxnO7oNilsnPbiv0atbyaFTlRIwGflIOc85z0xyK8Ce5+e5qv3kfQ1DMqTCOQR5ZiAA24/ViOBRNchYTIVQNjPyj5gPXmqYWXI5AByWwO/1PSmtdSeYFhkXd0ZgM8emazueVYuw3jRIiwl2XaArFSWI9SM80638wRkrDNIg+YAJ/6CorPaSTC7mnY/d2Rx7sn3bt+lLbzXUe1HhfcfmUeZwq9hweTnOe1NMfKzVabdIscyusjZKI+Mgjnp9KqXdwyMdtsFLceY75C/hWaTcRyeZHb8M3LuS2O3OeTViSZ5V3SDhQOdxTH4DrVOwWNAG3mj8wFQOhduw/rTxPIsbvuRt38QXAAP8AOs9Gk2BUaJiehc4AHsAMfhTor6aJjbwz277AWJVfpgY9fT6GkPlZajvkYiTcTjhSqdR/Wkm1JoWRY3uGckfM/wAqcnp9fYVRmeWQrcXF/KroGaNVUBVOOuMZP50yGZZ4vON07h+VfcSMewzxRcfIy5eXk0jFllkcqQu1iRgZz0HGe2T0qGLVrhWYXVqnfhWPrwcn+tVYrmO3VtzOyE/xDJ+gqeO8MjSM0Mvl9BlecD+lUmHKy9HNvyqRrj/roD/WlGoLFIithZZMKq8c8/jx6mqE0k0YCxW+0bd26R87Mjg4IyarGeJZpJMQCUpw8bfOFPqeo+nrTckHKa7a15YKrs2bsM68gdumOQPyqsmqW0gLyvGjDO2Qryvbv0zWeLuZcecsEmR/zzweO2QTmmzT3UflmSQD5vlj+UjGPSkmJxNBtYtWLKkY3be4yDTYNXhj3mWJViP3SRjj2zWPIsUm5mWEMfRSDTQqSQx53s+5iVP3Soxj+tHMCTN9tUaRoXhhQQkgszOBuXHUCq8moyZEKywlwNzEfMPbOOhrMW48uMfJsZPkBAyAo4A29KbbXS7xFCg5z2I/HtTuOxfhvJFmCyIHc+q9c/nirjS3THasZhVu/f8ACs6G4l2rGmVLHG7A659D0/OnS6nPFJ5M0y7mPGFBx9cdKXNELF6UXaw/u5N8h5GahkhntVkuBucMi7yzbNrdSMjg1lPqd5Fut/MzHNINz7fuKDzjvnnnHXioPtk0qtD9qkSIPkqc4OO5A/rQpINjWkWSdtzBRHwVGQ2B15OOT0qpnqyu2wAjBOBnt/8AXqot5slDCb73PC9f8PyFMa8mSMrz5ak7QWxjPXpik5oOU1oY9yNJMVl4BQFw2D7ZFMjmgTN4t1bqInCMiuN/sSD2PrWNNfPKu63UFB1ZnBA+vem/aJEfzoWCRI4KJt+8epJHQip57jSNuS+ghVRDMpklzu3RklBnu2MHp1zUsdxDHCjKQzEAkhc8dsc/rWCsmpNtnZgRncMgenYU+O61dn8xbVWC/LtGAB+Qoci4o3PPVVDeYzqzZKA45/LpUdzeR/JDDbyvKx+UFuvtjvWa0ktwx/dtET3y349TVc2JmvAk1xNIV+dQpYcjpnHalzjcTTjvo5n8vy4Yyi73G75cjHAPf/8AXUEuqTbmkbaUJLKV7f7oJ9e9UXhaOFmW3WR3kyrdMYHIyepz3qKA/IXZZEZRg4z1PULii4cpN/aFwsjs0LyZyCD8mc+2OcetRx32oKr+TqSw88DZux7c01YoFYNJuL9C3Iz/ALIq6kitEVRUJDHAYDP6Gn7SwrXI49QkjDSm/uJJQvK8bWHqQMAn0BHrUE00jeXJ5OSFDNKxxn3UHODVm3KyRSpKUCj5tscQZlPHOTyPw4qGbI2yLPI6J82Cu3ac9OOtTzDsDTTrH8xcDbkJuHAz0z/jT1uZFXChhjkK7LwD2zzmq25pA2772cycfpgngVOuTCAt15gAwy7gNvoM4p3FYnma8dQY5IoznG5QePciq8c0LCRZLwEyx/IV6SMD6g8d6HVJom2xMDjG45OfzpI7i6t4UkWW3CRNlQyhkb1Ht7896FIloitpoGUq0nmfN5Sgq33sZzzjI5+lDeeymOFYZAox5bME4ycgcHFMumhDJNOV/er5kfl9CTyMHpTVYw+XsgYygEsMjGfw60OTCxDJNqkO3OnIqD+JLo5GfpgHmp2vrzyzG9n9pCoSd8asCfQ55/GnNIUVZXZkJA+6Cc/SoZvMY+Y0wYjHYhiPc0KTHtsVHaGSF7iTwvgxtzJCxDcY4xkgj3xVFo9BuHPm/wBqE8uyvEvCnkLuXGcevt+FayXFizyN5DywsxUtEzR4ccjIOQfwqA+XdeZNJuYIgVFmUc89vQDGc/l1quZmka047Mz/AOz9LhdPssyNHJyjbWDKD6+nfmo59FWWR3a4MpLdd6kH8B1+tbK2mnGTbNkELnbHg9RnPb8zT/7PtLghd2U6fvowAAc+9CmarEzMP7PcLEI47ZSoXPzBlJ75GRlT/gKiEyx5F1pN3JISDxJvB47HqPofzrfj04xHbF58EbfeMTHp+fAqC40xWuH/ANIlmDcBn2lc46EqM1aki1ie5hSXzI3kjNvsGWR2+ZhjjJ9TVcalC7mO3uFfrjO48fQ9x9a3odDa4mW3X7IgjQs5afaCoGeS2cn2qVtEaT94tm80RxgFgoyPQgAsKrmRca8e5iLdGNWZ5JHZDysiH68gHj8qms75ZOYbEFCfvyPgY9BVuTw7Iu2drXJZwrATEgZOOOvbt6+lRyeF9SaSOOGVUCn+MDIY+nQ/nRdGiqRl1GTakkeFkhEZDfdXa27tyfypjXn75YZomi3fNjbtyBj2xT49EvLBi0tu0san5jImzOOvPOPqRU/9kX19btmGIYLblaZvl574+Xpg9uvNHNcqyI2vrBZEWBt0w6Px/j1qZrzDbPIk2nn5mPp9Ka2lqLZ1nhaJlBDQvb79+cgkHbj8mGM1Uj0+GGeJdQkmFs/yhHRk3dcAMenai4+S5O2oKmZG2Y7jbnJ6Y9yahuL6RSGaaFGI+WMgEgj25z2qW40+O3kxa3TyDIUBXWQD/aByCo9yB6VbXSvKUTRyRmVl3KWtxyvbnoT09uM0uYfJ0MxbtmjVDNIX7YGMDPJ6ciplZmhMSySvuI8xiOPbgcetbSQ2y/6wxrvYht0gJ3fQYx9aSSKxVdtxFKYwv8EeQwP48DijnJ9mY6G5kVZLe5MzxZUGaMH3I6/1pI77UpG+y3ks8cf3f3ci7j7fNuBHtn8a1lbT2XdDC+F9RnH4Afyq1Db5twzW8TBsFV3YYg9tp7/kelHMxewT6Gcb66jtw3+lecAR5b7dhPb5l57H1FVWvLqTIvAxU5Zg0jdvTtzW19ly24QuF3HYqspBz06A5qSO1mVMbfvDLN5fJz7dBQ5AqKMG386Zk3W9tJbgE7TkOxJ7kdsZpNUtbe7s7q1vNPha0uYXgkhZfl2MpBA7ng9+Pat+axj3BRavu4AIBAP4/U/560y4jRojHtAkHVTyCPQc45pc4eyR+Ufx1+EeofDPxff6DcQsbNmM1jLtIElu2ShGfQcfVSOteM3U19BAdKaYiFZvtAjIH39u3d6jI4x04HpX7G/FL4W+Evizo7aN400VZWjG61u4ZFW4tnI/hcAnB6lSCpxyPT4M+In7Bvxs0++uLjw3b6Pr1kpJga3vBDOydg0coX5vXB5rupYiM/i0OKrhpLWJ8sH5vvEY9AK7P4SfDXXvjJ8QtG+H3h23kkn1KcLPIilhbWwIM0zY6BUyfrgd60vEH7Ovxv8ADMbza58MvENvEhIaRbN5U46/NHuFWfhn8XPix8CX1KLwHqC+Hb7UwqXl0+nxm7KLyIw8qlkTPO0YycE9BW1+Ze6znjC0ve2P180nwvp/h3SbTR7G3+zWun28dpDE8ZUxwxqEQe3Cj861YdF823K+WxiZQWYIcHOO4xn86/I7U/2tP2mdYYPqHxm8TyMFEeUuvL+Uf7oHr1rj9V+LHxO1y5kvdc8e+Ib6eVtztNqcxJPrjd7Vy/VH1kd31imtkfr58QvBeg+LdPg0+71qztksrr7Tia98qMlVIAcqwbHzV8qeJv2X/gLeeND42+JP7SehwRW/7xLGxuYSQA3Cl3dnI57KTjvXwbNrmpzEtNPKzHuzkk1X+3XGDtOM1UcKobSZMsVH+U+nv2rLX4GS23huT4OePRrxtvtFte2xeRzbR/K0TKXUfKTuHU9BXgn9gXGpaNfX0ZUJpgSWT1w52AAd+a5+y1KS3ukkkZjHnDj1U9a9T8C/2e9rq9ldAyRX9oFA3Eb05zj1IyGA9jW8UqceU5qk/ay5rHG3949xp+jag1/I4W2OnvAqf6gxgjdnp86kfkaktTp9jDPIruoa2MalFODnqxxyDio1gk0u6udHuwxtJzsmXGQ4BBDYzz26EH0Neh+BPg74n8e6law+BvC99qVzdSO9v9nt5niGFw3zOAihfVmwCetRKrGiuabsvMuNOVTRHAX0Kw2LtKwaRpEhUouFYKpLHHXOWH616l4F/bM+Inwx8D6d4B8K+GfCCRaWsipf3GleddS73ZzvYsAxBYgcdAK9p8Hf8E2viNr3kX/jrxtovh21I+W1h3Xt2ATn5tu2MHnsxr334f8A/BMf4E6NNHdeJP7e8TyN8/8Ap919jhJ/65xAMV+rV5k84wkvdp3qP+6rr79jrWBrQ96Vo+p8Rah+3h+0trCLb2viawsWPy/6BpECO35qT+VZOh+Ff2r/AI06hHqmjeFvFOsOrAx3f2Hy4kJ6ESOqp+tfrh4R+D3wZ8B3UPh/wv4H8OaPPLuEa2OnwtKAoJJkkO5xwM8nmu/GkaPDHDY6hAZJpGdbeFfNO4Lk4GTg4XBI4HWsfr+Kl/DpKPq/0X+ZTp0l8U2/Rf5n5leEP2Ff2sfFkKDxz8YJPDtoigm3j1a4vJEUc48uBgi49N1eqeC/+CY/wetYVvvFOq+KvFNy75dzIljC7dSAAC7Zz1Ld6+47Xzo0iLIbKBZixtbFvllQcDzGJ4zxnH0zU8kt0ZYcQx2VkhLOqD94/vnHy9Oueaxl9brfxKrS7RSX+bGp018MPv1PCPCv7HfwL8DzRf2H8LdAgmiA/fS2X26ZDju8zNj6gV6hY+D/AAzoaxqYIoPO3LEtqmzYo7k4GOMngDFdRZ2cNzbL9gtzBC6+dHNI2Q5J5OCc8/3qhfQdJaRGSeYTQgq8yznbn/aGCCf8miOGpp8z1fnr+YnVb9PIybjSPD95GkkJitsN88cciySTD684P+eKzL7T4dLYLY6NIYCfMYqCZwSMbhu4HIGPx4rY1Kz0awvrRU1CZtQuD5MUfnRgOSNzA78AKQucZNNXw94Z847bdriSZQzxxx/uo2yGO1yQvBHUGuiNOK2Qc8V8Rn6bDfakQ1ro8qFQWV7t/ujtlQc5PbIrTGl6lM0cbQwvMoOQrMI/yH6Z96IfOs7iWRdlt5x2yosjy5UdD2GeR696dqCQ3luI7+S4cJy4aRoE47kpg4/Hmr9k29DGdWCehFfa1r2i+RZ2Xg7VNQkKufMtViSKPHZmZtwznAwOeajj8R+K7mW5jHg/UreeOEPj7IZcsRkKG3ADkdx79sVasUkuPk07UVBQ7lW3unxtPTo2D7UkravpWoCGOPW5IGXe00M0LKp9GDuXPHt3p+zaI9omVJ7/AFIQvceJNW1K0ZIwxis7eUyn6D7MScEEcE96twf8IBPIv2rX7ecvGjiPVr2Qk7hx+7lZQDg9NtSRreQIZhq07KzM4iuY0IQnGTjAI6dKrNJrUMjySXkMiNyUltwEB7kbWGD71fI0JSizYguvB9up8nUvDscSLl2hEMYVQAc71PH41k3HiTwEJi9nfW+oPISnlWcwnDZ6khAQfrXNa5H4bilW+8Tx6HJBtyPt21Y/L7g7wdwPPXNTabqv9oeTa+HPBd9e27jzPtkcflW0aFgCyPLsyoyOEB4qXePQtKL6mD4s8bfDvUs+FrH4OeMNdmnGVSw8PyW0fX/n5kaIIM9wwqxpmi+NLpUj0/4T+H/DNsjAj+1dcM8nTr5VoGAwP+mo5JrsFsbdmm8u7jmEcjfMHbAzgYx0HQ/nT4YJYQHaFoYmCmN92Ap5JLZ6cUvarsVKPZmVN4PupLMzar4gaBrYGRm0qGSHZt5JDSSSsfyz7UmiaReNCY7fVtaltYz5iSatb/vH3H7okwNwXpggEcZroLD7TIpml1F3jKn9/nGcHnaBzmrtvturo2kMzvcKm9ZIpIiAM8KxHU98GnzRloZ+8jM1DwvNf+BfE+2RLwx6bcwwJFksG8piy7VG4nkDA554r85PG3wnuLi0tWgs79p1MUNwstpchIhkAP8AvIwWPynPPTb3Nfp/ZNb+F5/sct5NdXMo84yXEsfmLnJwAMYGQcADFWIfGc810bFQN33zm4Xco9MZJrF8ilqiZUnVXvH5D6p8N4I4zpcJlixvOx4vKWQ7MAnd0yTnPr1rPsfBrw3H2ia+dJVUeV5DIGRRwRyDuJYjjjgZr9kZteuLiOTz9Psp0jUb/MlQ4B553dOO1ZV5N4PuGC6j4R0mVx97fp8cnGef4aw5aSjyu5ksGfkQ3gS+N5Np8Xm3MtzDg3DTIVMRdSygqAAx+bjvzV3xF8MPE1t4Wh1aZpZNNiI8tocEiA4PzYJOchcd+PrX6oXGh/B3UGFxN8MPDExHO7+yIScn1wvXAHX2qG6+HfwJuFSa8+EnhdVHyK50uNSOcgAheOSTj3NJQpc17sHhL9D8ldD8M+IJo1urqS+jguMlmlfzAiFsDagPBx379aq6dp2tvrP2K3vLm2Nu5dijEFsgkKfY8N+Nfravwc/Z51CTbH8L/Dpf+IRLsI/BSCKoT/s9/s23Ugjb4dWayOf+Wd7cIf8Ax2Sm6cNfe/Aylg5dD8r7i28VafDaaneNOgnYRpLBwN5IBVlbuQcfgaZJD4qktWtftUt2qwmfzZo13KVHAxn5mJxnjkc9a/Ua/wD2Vf2drgK7eCrsAfKuNUuflx/dy5x+FZM37I37Ply67YdctHDbh5er5POcZ3g5HXg+lCpw097byJ+qTPzKjvPEO6S5hnt9jsR86DhgMZVsduaiuNY1CLfpbIss8aM8he3JEXzqQUIPQ4IJPriv0juP2Hfgnl5NL1LXrfLFyqNbyAsc8sDF7nnNcxq37D2gm43aL4qtootmxlu9PBZh152sPqP6YqJRUb21JeFqK58Jahr+uxRR3CiOFEUs4iHJ4BHB9eevrTl8ReJ47RI2aF2NuVR0iYOTtJUfXoD6mvuFP2BfDeCr/EJAsqeXIv8AY+7CkHhWEoIAz6e1Rr/wT1tllWaL4pWzjO8b9NcZPviUjtTdK8VqiVh6kUvI/LiFlUjmtK3YkAc5NZUa/h/hV63f5h1FdJ/QlJmd4q0cX1r9qhjBlhGcjuK4uKHLFS2GHY16mqhgMocNXDa5p/8AZ+oMy4RJPmU7a9bAV/8Al0z5jiHLoqSxcFvv/mVbaIqwO0npityxVvvGPA7DrWHbszTJuO454rqLUwsozIO27HFezFI8zApPYvWkgkUo2VA71YkSB40WNeVPIA9ff8Koq4iVtxXDDr6Cus8J+DdU8UTYjcW8CIxDuv3mwcAD0OOpp4hKdFxOvMKtOOHftJWPpz9g/Qft3ivVdQ+z+YLTTyVypI3OyqOnI4zX24kdxEoaKzZowNrMACqgdcdzXyR+wvdL4cbxUt600TIkFvJswcEM27OeMcV9YX+rQ3yRldUuAhby2SaYhcZyThACTjgcgV8vy66n57mD5q33Fi2vIZFP2WNwFbaWEfAao72SGb/RbiZFQrkqCBuHp1zz7Uyx1LT1jXbGpBJCsEJdzyc7cYA/nSXF95ki/Z7cXTKNxVAqZwe+CAcds+lPlSOC9i68RddwZUyPlZuBj8KTyI42fdOXgC7stIAFx6knJrPbXL26WSNdDuDGucSS+WNxHTHPr3psmuahHbkrpttPj92wMnAOOgwOozjrSdkUmX7dbW5k8zAKA4YhtwP6VJeHT4WXdp89wxP3gwCLx3JI4H0rnJtS1ZowE0uGPZhm2hmHUdWz/Sq11q/iBWlH2OGQM2QMYGMkdG/OleJfI5HRx28E2WMcBWT5k+bI246DHB5zUVwsuwx23lqo2qQylenpzgdOwrmrjVtdWFo18xyAG2/KcDqRkHj04qOXUNVacw/aVCryqOow3I6HJx3HT86nmRXsah06rb7iqq+4ZILtnOfTjjipY4riRP3MxjaT+KQZUfyrlZtQ1hZVWHUkeNmUruXCkDrnaMnHccdB05pDeTXUEn/EylbexjyjMSuPlJXuOefwNTzIFQm+p1MlvfQssQv0GWAkkI+6ueTj2qheNa3G4za5Gu75BHJOwVuf7gOT0rCfR43VImM0nlqVHmsTvzwdwJyfrn1pjWVnGplkt4fMk3IQwGDj+QOCQDnsKXOnsarD92dNBJYXDFYSPLHyqzsp3YHJzknjjqO9RyCxt1DQzO87fu+M7ffOOOvWucW1hHlrbLwQsaj7oUbi2eOvAxxWiqrNGY2tTHjLLIMc54J4PXGR36c4ocrB7FdzUvZ7e1jjkkVck85xwOuSTjH0qGbWLOKNpoVjfdjB+9k+2BxmqWxnd4Wh27x94Lk7ehX5eSTzU022GAnyfNXadqlOdvoR659aXP5B7KPcrQ6tN5szLYuwkcIxXaFXbk9zTrjULcxrcQ27qwbbGNwwR7jv9KiuPMkjie2sZjvIX5w3Gf8AZHPGB/k1SGjanql06/ZYo4I8AtggKc5A4IycmmpXG4047stWurSSTCG5sZNrMV3oVJGM/wAGcY6H8RUzapbWsjW86uuFG5Xj2ZJHHc9eeenFU00C8XMkl44dAA3UMTjnBHbPp/jVmPSLBsPMrTFR0ydxO4kHLdsmhshukupCurWnmeXaWm5QM48wBiOxI7e1L/bG+ESDSbiHEZYsso5IyOMj2H5ir0Om20jbJFGxQFb5twBxgcnBPAp50HTpGLC4uJ+0bb/u/l78+tJBzUTPXW1Rvsd9bpC0QCsS2GOejM+Meufpio5NWjikaGS3Qx4z8p6nOOMDk9fyHrV2bwRZzRJHI0kqhlbbI4K5GcEkg9z39BVqPwvJExabSpHA4GJAQ2PXHX8arlFzUjGa4hkjDNpRATAkUuwIPc5xg0SXczri1sYGVW2OEmJIOfQ4yO3PeuhulitY1b+zY7fLeYftLOPmwMnHTsKja60g2X7q3gdWG2bC7fmGAcEcke5560lG24vaU+xz0NxeQ70uLVLaJ0+bdIN2dwAwo4x79uKhF9ActdQKAOqlSxYdQeeOnYdyPWtoWNpd/vrMSr0Ypu3AnOc88gdfx5qGHS4YbdI5Y2lCNvLSRtucnggdscAZ9versrDU6ZTbVHEc0lvagqnKrIxXceffp8vsORTf7Rvd0i20MSKWYRued7LjOQT/APqrStUtLdo/MtfNQYjLe+c4OB61cXT7OPbDb6WEVOdyynevU5HHTnvUNl88DGk1a8VwnlqRuPykKCOe5B6jI4qnqF3czRmGKYhzIWUd1OOBgde3B9RWxfaRbiWRUYNcTsGQMcDOOAGHC8454qudJurNlddOPnYKkOygrk7uTkjg5/DHpS5rdDVOm9jJa4lhbZuMkiAHb8zbuoyMd+MEdsj8Z4k1RUKxLMxT5gGLEEdTnGccbh+Aq3DoOqfaZZEiRIiODJJHkdsDByMjB59BUi6HeRFbq6uJLRh95YGLZBHOMHH6U73JlOBTebUrdxFGJ1QKWXdFwzen4nuf1FP/ALdaJdmoWMwUDeZlTocgbcY9ic5/nW8t1ZWcKRtqAnLf895WJOfTI461Jd6hbRxqrWUjYA6bef5+9JMylUj2K1hJC8MssWVKk7ZNmFP+P1B7ilvPPjhiaOFJGfJ3D92c+5A5/KljZ7hZUFsIFDeYvmHnPoB6fWrC2lxHZo32sQWxZioXB+b+LgnFFrmTmrmVcW8Sq0kNq8wPDeXgkEdcjIb8SKbE0kKgm3uHwSy9Ay/mOgrTW5hghJWJpF27Q0jAFjnqcdqazzzw7sJ5K/MQgJX8zVpCbIPOvnjHkxxjIBbeRge5PaomjuZs/vFeNwcrGnyswxz6ZFaFrcRYKDGX5+YAAH+v0pSywlbjnCEnfu7+2eM+2aHDUXMZcmm3BiVpLeQsj/KN3BHqV9an/s/zFTbPKHkbcXMQDd+Bzn3rSt76a3mWadTLDLGSjLHwQeh9iD1BqnJIrTySGxlBVdqs7A555AA6euTT5bE3KbW9nuMdxM0kobKgsSGHceuaWHS2dHSRbsKMkBpOMeg7fhVyPy4TH/o9tF5illVnzu5wcgDrVhFvLh0MNwqopwqcYAx2zjHv9KFEdyjHYwxqlobVdhcfe+/z6EdfpUP9nr5wtDvCoMRtgZ6k49AevFa5huuGnaJnB3N5bBiD9aS3t2uLlprm7uZH6x/KN3JyRkj5vbPSlYVyqI4GmdY1lBVB8smBuJ47jnPemSWL4Ec8MeD2Ybtvtn3rRW1g3Pclv3q5GGILEd+mMVBGu6OO3jhA2Owcop2/QE5+v41SiguQwWdngQtJKrHIY7Aygd+nOKsw2UdvOFWWMwvgFljIYjqCO1TRWdvDvby/sp3ABnf+eeefap2Xy4wtxcQLEPlR43+76D+dVYdyCWGBY2aRZJB1UrEdy+xz/wDXpEa0aACbSVG3OHYAE88ng46DtV4w+SrQ/aGn3HDBn3tEfqDxUcUcm5tt2qL/ABJJCSQfwGfzoFcrRx2UTIVtTvmjMipjoCePmz1Pue4q0s1wVTyJLby2bkPJkYHXnHJHPFRNaSSbZrmESoQSjQAgFemP0qTdaW/7mGGREfa0m/s2PfOceo60rjI7jT2uGeTzUwzfvFij6ntxmnR2Xl7WWcyFs5Q4DpxyPmA7fWp4o96faF2MgOWRVwT6E44qb/RXbcknlSp8wVlGM/U1L5u41Ioi3hgmM3lRSIGwF2FWyM9l780j6eskn2dbfClSSQyyh888ZHbOOenStQ3cMMPzMguVyxdcENnv2I/Wpl/dbpJJVhn4yqsAPXPXv6UJeZft6kdmcz/Yui7yvkm3Rs4VVA259cqc464rEm8MyMwmtvE0UFrucMRuXJ7gKDlQTx04zXeTC2dTI2ZA43bREpyfQZ6H3rOvLGz+0B/ssrAIyt+7AGCc5weMjgZx+PNUl3L+vyhuc9H4BlkgN9Y63b3cahMFVbAJ54yeQRjBHHPWq3iTTtU0hA1v4L1/U4doZpLBI5Bn+IZLAkfhmupWz0+OMxRedbggYZQVIx2I6Gn211eaHcLJa69c24X5Tvk6buMbTlSCcY4PJ4ppK4nmDZ4prPxdu9EIWb4V+IbJlbiS6nMKEjjcUKFenXFclefHbUby5haHwbpoRWXaiXc5JUdfuEHPTtX1lLrHiW4t2hvrlBG5zLGyRh92TyykYBxjHGMHFYNnNo+vWbXumxGzCStuLWTWsit3GxwDj0IyPQ1up019n8SliJy+1Y8q8O/FTSdQ0uESfDbV3uFwzeRp0zFcgg7Jjntz8xFdloniPT9UXy7rwp4gsWVwwkvI41Az/DhZCcc59TkV158O2d4sN1PePdiR/MHmrtDc8hjn+lEmgw2LJttYVRWLIkKkNu4wRnnGQPrWMmnsrHTCpHrIyLt/Aab7iTXJbJliYTb4yYyRzj5SSo5PWqN5p1urxrpdw8wYBtqwsjbiOg3cjgj8c10E2n7rhhHp8btnzBsY5JHPAHr3qJIS0waffAWLSc2/UDrjH8qVjaM13OQm03xAuImgLDksWYEjnp2/yKWx0e8t490yhZEHOBjd345Jzk10OqXE0EkkSx70UF2fgYxyffngdO9MtLWa+t4Zg3E4Vwq8nGMnOBQ46FqXU5+bRZisc1xh9o3bh8m0/nk81R1Lwdo2pxPDqmlWOpJs4F3ZxT5+rODnk9OO1drJpciskckYCnq2MHP0p0VhuUqECAsF5jyD+IGCKnlSE5cx4vq37O/wG17fHe/CTw+04+Vmt7IRt/44VA/KuK1P9hb9nnVN00XhTVdNO8/8empy4AJ4G1944r6Zhs90w8i24GPMMMJwc4zyQKfDYwwRmS8u12fekkmkB2454H9K562PpYZe9Ut+JcMLKrtE+Mde/wCCcfwnmUyaR4y8SWe44VX8iZQfxVSfpntXMXf/AATBku1J8P8AxYidhj5brSyD+JSQ/wAq+6dT1Dw7pVzDby6bc30zsMmO3KLCCRhnJAwO/foeK67T9JvZrffF5NpHls+Wv3D6ksPm9eB3rH+1MTNfuKcn5uyX46jng6NPWq0vQ/M6P/glx8ULi6RbTx94WNvvxJJJ9oQoO527CT9M17d8Mf8Agm78PvDOnxy+MPiBrPiOePBaHTUW0tkbuFdgzkfiv0r7U+x2nktNo+n/ANr3GQrbpSVLDAY7jhFHU1JdWLLc2lvIsNwztiK3i2Im4/xnqRgZ5PrUTeOxStUqci7R/wA2jJSw9J/u4X9TxrwR+y/8GfDkP9peG/hPobXMRPk3OrL9smZgexffgZ9AK9Z0vw/p7Qpa2t1MbOJtnk2EAhgT1xtBHXPANXpLGaOaGa8vmhWIHyraMsdx5J3NwW47DjAqx9ulmjNraw7LdVCqsLLE/wCJbO0Hn3OaiOW0L81S8n/ebf8AwByxdV6RfKvIuaVb2en3b2ttp6xKcRpPhWJ+pBLDPqeOKffnUPtkS2stpvbIdp13tgDgjaM4BHOTioJLjUL3dZ2FnJaQRAR/alyzA46gcZ+vepPsjRo7afIvmL8hmcdT3yc5J9h6V3RUYe7FaHI9XdvUq/2Pb6Sk0mnWOnQNeMfPdd6F2x1HIG7Pqals7WytbUzSLK1wg+aZuXJ/AdvY1DLJHHPLPbtLqF8qAKkeRwSMjIG1ff2FTSRrbXC3uqXUhU4jjt41CgsWA4B+8cnr6U27hsVtKjVv9N8x7uYqynzPlQc4O0HH09OKraxrENvcmOVbe8MZHlWsefMDH1AU1sXFi0jfaribyoEXaIpHDKCDndgD0wMVFYW41O8m+y2wsoV2q0iW4EkjdCCSc46EHHr0oTsBSebXtQMZtbP7JGjAsjsY1kX0bPz4+gHTrWTfaLqeowvb69rlxFZ7t7W1rCttG3ORucBnYHH95feurvrOGFTDYzyefDGN0jTM0eM45Cn7/tVSbTWmXbDqUslyzZC7d64HI3fL8o49a2UoGbUzlE0vw7pMzXEbabbTT4MbSr+8Krx95st+XSul+zXUbKJvO3vwobJJH48/nTJPB9vE0uqTDTxdsrAvcW+0kFSpG8NjBUkHI6Gq01vqepaalvDd6de286BWjF86uyKeMErk8471XNF7ENMlubyON5FQhJkHzAJuYfhVSd7jUWKOuEKhWaXLEcH+E8d+/vVjQtOv4rdLn/hHZYj88LCDy5CpHGSAQ3H0NY9vqni7U9QmtNN8GnTo1IzdauRHKyZI3Lbxkvg4ODIyZ9Ku8dybNs07eyki8uGO5LxoTny48E+4AzjmobjXNBs7ptNkui11tyVG4sfUYXJz+HpS3+ktNJDZ6nrV5c3F1lY7cTraQjCkkER4ZgME8k59Ks2fhrT9DWGS1a2tHI8t/LgX965PHJGck+9ZOquhqqXcy7ubxNfRpJpPhwLasBm41O4Fsig/7PzSH6bR9arx+EtX1S6gk1TxkxtFU77XToRaseOzsZHIHp8vTtXUx6S5vTqNxMZJI2/dqz/u8dPmAHUc9aIZGneaGC1jlgiTeZIEz5hyfkBzjPHP1qXUkylBJmLB4Z0G1aKxt9Hs0w2ZLy6ZpHhJ5LGSQ7mJPGM8cVrsNNs7WCzjvXaaICNXMhO/tyfmOOQDj0qXzBGsUItfLklyyQsI+DjJYgkjIAHAyTUgVra3eV5rZpWjC72VjkjnBAAH4AVle5YWUbR3Uklytx9qGdru2URCMYU4APf86f8AYbzULGK6maSyQyK6KqB3fsuVCnHY/wA6TTdO1O5kRltUW3j+VdwAL56n5ucenFSXP9sXlxLb2d9BbWiDbcSo+4p0BRcAfN+I70WuwbM6+021s9Plm8RW1veWrgwXEjqwGTnEYU9znHX3rg9Y1iPwXpDXOn2s7SpiCysbPJlupGztiTA6k9+wyT0r0vVdN06+8sXWY47UtJHH5mFj45Y7uCcdzXN6T4FW88Qp4w167uZmggeHSrNAQtur5EksmPvSOAAB0VfUk1ryqOrM+ZszfDGj6ho9u83ixk1TVNQcTXU88qhYMgAQxg5YIo4HTdjJ5NbVvN4fs9tvb/ZoowcsRaq27rz5j5PH14rYtfD1vKpkuvKmZxsWTydjbB0G7kmsi80FrcwWaWtuGduk0rXTkYJIwQB68njgVm9TWCvoGoT2Mf8Ax56FZXKJ8zY2nzRgdQq89upPQVDpwuDHHs8PrMrLvZ3eOEqhxwcnJ6+2fatCbQ7LapP222KqNqrLHAhH90hR6f5FZEn9k6VeGaW80yODYVLj97KWJwQWzgDp154FLlubT91aEz6boOl3jeTBGryfvniUtImTwW4IPH1x04qOO1bc32PSLURMwkZyGhR25+9HyTg9+9WHn0+Rd7XGohZeIVmCxqMcccgkHrz+FZyxyWtm+/aiN/FADMyu3cE9smk4RClFvVlu3TSVt3uJo7ctHud/sm7aU45JOSCCD7VrRaPp9lD9ot/D08s+BMsk8kmF4BH3RwPwrB+z3d5qOmaLayA/b7lPPabMYaCP55VAUHJ2A4B45r0jVI1htWWOH5G/hzkAdvehRTIrNRdjlL3SBqGbxGlWZgm97WRkBx1wjdAc81RfRrlo3tYdKb5sqZXRSCoPGMck8/nmugHnciMIox0z1pPKujIZFhX5+6Hr71Xsosy9s1pY5iw8I303nNcR3OmIG/dpHMWaTPJO5Tgc8YrU0/Rri1Rree41GUH7vmSMM/8AAuf1q2wukHlophYMc7snP0xSyXV1Ey7bZpccMMkD9alUooTrSEkttVjnVbexnZAQrNNJG2R6gAdaJrvW7eN5IdO80qMKm4Lk+nLYqWS4ujcSIMlP4UWP5hz655pftEifvJJmUD+9VexTIVVn4Jxruwy8/wCNWYz0O41RhZoz35q8m1hSP3Kk7mjA+5R14rJ8UafJeWSyRrl4zkBRya0Ldv4R1PFXom2sNwyAcnNXSqOlNSRWLo/WMPKn3RwGk6TqMt9DbxWjl8btp44HevRtL+G95eOrX1xHbAfeVBvYfUniqWjtFDqt7eHaCfLijUj+HcCf0FdbdeJr2aUWenw75f7sfO0ep7CvoPaSfwn47LNcTQvTVosvR+GfDfh+3PloZ7hiF82QeY/0QdAT64rt7c/8IL4f1PxReW7SWWn2zTyRxEbmUd/c9PbrXJaHb6p54nmhRZE5yFLt+bYA/Cu9umjk8G6t/aFu11byWTmeOTBwuMbcdOuKJ3a1Z5VWvVrz5qkrvzHfsc+PvEvxB+IOt6F4Tt5xpcumzalq0hjKqswkXyQGHKj7ycn5gT6V9b3H2iRo4v7Unfyg6yDewyecZGcqQST/APqrzT9h3WNF03w3rugafY29pMssNy/kwqhkXZtOcDoD0z/eNfSNxpumzsbq1t4/nKys23BdsYH1wP0ryJzTlotDfEfun7+5wKi8uA72+pahKYYwsaCZsEMNrO3OF9R7jPtU/wBsurO4khfU76JTIkzcmRWG4IWxxlS23J4ABP0rpLvUHt8tCsDyj5fJjiCb2JztDnkgZGTgDrVV7i/vpzZ/bvsgaM/PCVIb2Ut1bGe2B6VNzBO6vbQpHWNfEkMLrcSO8Yk/49ZDuJbbgAgEDjuRjk9MVqWOqSPeQWEun3qQmV0QrbthGPJZtwPB456dPw0kjs4VSCIh3lYbUkkLM54HU/8A6qZcNDNGYb1NisQVVVbhgfUVm2jF1E+hbXw7ZPdRSTR+bIBwJmMqsM9dpJUfXGferV5GvMLKrv2VRgD8TxisSHSLKFf9HnubfzCXcrMxwW+8x3E4zUV3HJbXDLp+pPNlhtjWPzD04GO3rk8VK5WZpruT3umzRXQPkRG3O0Ns+bBz0GOn+cVSk09oGE6wNIR8ylYzk56qAexwD+BqzG3iiybYqi6j24EjsMKe7HaRyM/T5R61TuNemtLj7RdWZnQyshlVG3RqVBC4Jzk5xxjqOKrkvsdSnJRJ4d9t++ul+/lsMOEJ6Y6ZNCwvGw8uFkLNu+bjjuOe44P/AOqtSGcC3T7RdiOUcqg5z+PNEM6TzDbbyGRPmxI+1Qe33etQ6diPrEjM/sxQvmXE2ckDYrfe4xn/APV71ej0uNl8uOGHzFzgSNnHHHTr9KdPp97dSLJJY28UJ4yJXOR36nAP59akjtRJ56STgC2jDHLYOCwUAepyaXwmUqkp7spXFxNY+WscKvJIwTaBgEng8E8c+/SprlW/feRPEEjyrYOEbsOeuKb5dnZyiRYwrStzLJI+U7HGD+gqzFI0vz2d0jwh9q5U7j7gkDPpmhskrWccM6/NMpk2DJjiby19ArHj/PSrZs9NQZn+8F+7IwCj8P8AGnmzkkYSXDySmM52s3ftjHHFWobaPYZGuFRueZT972yRzU3JuU45HKkxqAB93ac5FRRWd0srNJcCNWOSFTH9KvQyIq7C2Q3KtGQV/OrbMJ4wwUPu4A3EAj3ovcEZ0nmNFtWFJSBgc43fWorWxuF/dyCEhCzkhTjnHTPJ6fzraXT5FjHmTQFI2LtsOMZ6DB69P506OzeXCxrcyqePkIUKPfFPUNjImtZ5lKRzThGbkLtUD6nrj6UsNm0e1XKSSvhRtb8sc/rWqLYWpIuGTLN8pbnbk/d571N9nihlXzHYENjAjGB+OM07Md7mUoWJ3LshRlO4bfmFSwwzKfPtZnjfr83AIrbk0+1uHWSSabavK9lz23AdfxqhLJaWdxEU2ODIPMhjG53XOCRgcfU0ajMhpEnuTb3OC8cbMWVvMH+7g52/1plnpU0kqywzQuADthnU7W4xn0yP51urEbhZoRIwILLlFAPoDnscVUvFuPNE1xbxwxY58uYlsD0XByapMDFk0maJgZUeGNxjcz4X65xjFJa6dcbpCL6SWLGF64OP511mnyfZ7cW7XY8mRd8kaQjapPUEHjPTNP8AsemTDaLOR5WHVV8sgf8AATgVcWmDOeWzuJlBktY0UDZlBt3e/TrUdxp90i+WCYwy55I/TA5FbMlppVqjySZiEY+8zMw3dMHqKzLia9YSW9nGMD/VsHJR/XaVGM+2arkQXZQ/s11zPdMGgHG0NtJYc81VkvLOSDz1vIUuNzbo5SenGDnABzz06AVLYW14bhpo5FljbPmLdKzoD6/MOD2q1aW2h3bTx3UKR3cce6NfO+RsfewG/DAzzS5B8xmTLfb0kvrVkUcoIF3K2Rw2eM5GMUNpkjGOR/ty+byzzlcgHrgL0rYxGpEouJAoX92owwJ7EeuKb/p014qTXcrxuFDsHJYZPPygEYFNxFczUtbWzzsjWXdgDZz+X/66kkv4/LCfZWww+4sfllfqec1d/suTzJJrW8tTHyu1kcMR+Ixn6VMkTsvlm13Hszg4H6UrWC5mWz6heQ/Z5isdtHlomCgyLzyu/GSD79KWPSZNQjk2Ty5tyM7G55zhunfB59q0rB5rW4eGby0sJkbzl8tuHxhSDg4Pv7YrQXS7u1tY7xbpHhnJMbJzkjgjnuPSpvYqxjW9jJJGrXls8yQk4Mv3picnGT2Bx+HSkj0y8lkjHlhPOYqsaMCBx0OetabbmZYZpsKPm3FMcjHH4880ki3jK0nmIqZA2o2Dz357UuYRX+wrJH5d4pYK2FCodg9znnNSS2QCfu50xjO1vu7unOT1xUksEzBln8xkZRhef/11NHFG2C8gHAHTjH0ocwsVpYbZkX7J5sc0I/eBT8jnuVPb6EfjUd3BFMouJrbc6qqk42g4GOQOpPGaux3UcDPHdKkqt0KxncPTHrSTS+Wvl/Yzg8sqgYJ9anmAqf6JfXR8q5kjEKbnZmztGPYfh+FQxS2bxLCLdHQuQCQFOT2GBTlZI1llkjS3k3fwMQ2MdTVySa1hmSGadpbg4cEMAUyOhJHoe9UmO5Hb6RbHlIZEBb5hI2cn2Hb61JcaafKy8xC9RtXp+VQXCi5Y+SzCQthU2/KT9RwKt2vnKgdoy0uSNoYZH59arQkp3mlyMjXya3LLIV3YijyemfmVsH8qzZrrbH5ki3bIT837sc+uMHNa8nmSOd0k8TchWMJK/ieoqrHpcsMzfaJomWVTt28FW5weuD71F7juEq3U+oSM8SOVQNhTwoIGOCOo44psLW6KrXEipNu4yu/djndwcA0+3tby3maRrlJi0eyLAb5c8Egj2yPxp1vYgRvHG0a8gtuBJ/WqvYLjlZ2d1j2PK3Jfyz8wHYnuaik1DVZlaCOcrHuz5T8qD+Iz+HFXZI5FH2aG9VQcMY1UdemR0/CpEWaaLyZsSMCd5WPOfrihNsV7GdJaQwyvPbq6RSjBXzCWXI7Y5pvkXCQqIPm8rPltuL8H1Bq20c1uQYoW8vkeXKCRz7en0xTd0lvCFhZoy/Xdzn6Y5/OpuO5HMk5mZba42W5O4YHzdOBgipkhur0DzmaQRctHnaxPbpjP4VEY7mKzDbcoNzjjlSTzk9TVlmm+yQzQxs7SRBsMu0lupyD0GOMU1qJytqEnkrnzreWEgblLx7hz796z7q+Yxta2+npK6HduXPK4zgjseexqO4+3fZ286zkklJx2OwY7c1RWS4gkC3Ucyt2bcq9fYU/di9TOVSUthbjVZ9qiaJY8Z3BZPmz0A4PB9sUGS+fEcZlkkxuX98QVXuCG/wAPSr9rb/alPntG6Djc+Bn6jOeKuW1jZxRiJbcAv8x3YKsRyOvOa1UubUxcGylGL2aIR3Nu77s7d8mVAwM/ljvV60gSFgyqjTBQV4Hyn1Hv+tVruS4vPlxPsTBEAHylQckDpg+hqWzjinl8kQyWm5/3YcqOT68/rSbb2NoU+XU1pDps7bXmGQoX526nHPv17VG0DNgXLBo1XahVxlVHPO7BqpIJozt+0IxQjdI2HJGemefzqSG+kkmSSaOIx7GBUxnkkYBH061ChJmpM8Nn5fl8OrHhlJDj04PB/D2p3yzTxQxOxSJFQTNyyrnv0JxnPrT7ea1z+7hJOODu/kO1Wlht5I98iypKW9OCOxDD/ClytbiuVoWvGuGs13OzsDt2/fx6en4ULewrMFSabav3hs4A+uBmpL61SFYbho5Q0TArJb5JJByDgdxVay0+xvrpYYJJZJZUdlabIUkAnGeiknge9apBckhUX6z+ZHH+7xtHl7t4LY6k8YHNVr7QdPZ8W6zWcxbiS3Zl69QB90Z/3a1Le1ZlEe1yQBuQ7lIHtxzSSxwRbUS6nilk+XbjeD9O9GxUa01szNt/A9w0aznxRrC7z87HY6qDwMYAKn3Pr2rR8P8AgPTY9yat4riuy8rSM0oYMqcfICTgHqc+9CyBm/dTHABZZCu0kAgbfrk9KnhExk/0q4VsjHJPXtyOfzrOa548stjdYqoupo6l8O18uaXTrhhGzZjSGZS5X8eD+dZD+Gde0VlK3l3bQyfeL20e0rjoxGRWrbrcWe+azmVDIAr7JD8w9D2NWI/FF9bqsbSLJGTtZV7DuMYrk+qQg709DZYycvidzkdQ0v7dcHUGtdOv5X2tvlkkEny4I2ndgHj/ABFWb7xBdWtvDFfaTqccLZLyWrGXI68kYIxxjkdDXYrrmh7zcXWgwO7qV3qApYHqDxz0qeG48JuiFo57Q7ufLkON31ya0/fLszT6zCStK5xGla9omrMun6fri2kEZPySBopDnJON49fTNbo06/VVi0ltkTAIkyS+cS2Ou0D278V0c+jeD9Y/dPIJTtKhZkDgce4/rVD/AIV7ZwsbjS9kJCjaYJpIx+IyRSlKS1cf1FzU5fC7GfareXF8yx2sqOG2rPJblyp6HJZgfy7Gr72i6dELq+Ect6cxJI0wBBbjAUDHYfSo10DV48/ZJdUUhvnyyvgjjIHGc/Ws6DVNcW6lS11HS790GGyvzqckFXwTg/zqY1Yv/hgcW9i9tmhvvtWta1bw2/k+WtoitJmQnhyw744Axjmpkvo5X8tX8q3CnksqZIxg4Pase8vr+4uEmvNBW4Rf+fW5z5Z7MEPfnPOajsdW8NrDNZ6pFfQEMG/0y2G47TnhgMYqozjPZiakt0Xo/EGnrK1jDbrFAMu1xIzFHcnBVcfMz8gnoMHvWrZafawjctx9pnctIrbFLIDnoT0UZAH4Vizy6NrEf2XTNaSZGwrgXAHy8dRwR/StG30+305Fm0OytLhwfLn8yYvJtPJ+YZI559P0qybl1bdmj8zVHgfawKiaXYqkHjAA5OcfjVNY9Y1TdNGsdirzHc0MRLShWPJYgcNjuOhqb7LpsFwt9cbzJcKtukCxbUBJDADPVic8/UVUa113Vpnb7W2n26YMMLz4YsOobYPuke9SirjZLWVYzb2NxF5SHa0ckaiNSpG4Edz3z606RdL027uLqxjvbu6nwrSed5kjLuzsCg8AdeB+dSeTqXzRx2+nTOnUxRsxHXgFgec5/P3qXT7c2Ma6bpunvDPtaUh32FgW5ZiPc4/KmFyjsEKPeaxpdyV2AiSaMfIS2AoHr2zjp1NbEdreyzOl4Ira0VdrRiQB93uV4xx0z3qBdKmtoft2qahb3NwjMyoEZlQckAc9h3xUDRrqkMTXcU7wRyyHylxEpT+HcMZOR15phe5fhvbUyGz0uxkljjG7zIo22jPXk8Z/H1rOnmu2vBbWqyh58qV3bcFRyzHqR2H4VUm12TVNVTRtNWOJHt2d7qSR28rBxt2gjDc5GeuDWjJ/Y+gwnUJJnlkjiEXmQQZlfJxjpnknt602gWhnLpK6TG95JskeUf6VO0bGZ+eFU5464qVdIjv7hpdQ37Idvk20k3yqQed4HU5Axz2qPTZL/VJrxtU0m8gtxIn2X7SQElQgk5AOcggcn1HHerJf7ZM2mwizikcFpG273b29A3cZ9KgrYo61a3WpXSJYajJaxrkSNbKGQn0IIwSefy5q3saEwrCLuUsBEI8qnmNjjnIGeK09trY2tvaTyyNJxFCn3WkboASerGmW+nyNG0csPkTqzSKJnMmU4C5bGAevA9aQjGuLOS3UTQ3VpHcFgpZ9zlR1xmi30bV9QmH2i4nljRhlZG8tHbrkDritO4spLiR7ZmMkRUEKigK2SdwJ56frzVuzuplJ06ORpJk58yVdyqB0U7cYIA4zgcfm0MgurQR485LWKXOXdZGY5HIAC45NYV14+8K6bIvhybVooGtFEzQTL5UgdgWAcHnvu6DqOtdPeWOk6faT6tqcl2I7aN55WUCPAUFmPHsCfwr8oPF/xDvvG/jfW/GEm6F9YvpbwRrPzDGx/dp16Km1fwruwWGeIb7I561RRifpl/a9hrmoWdjZ61DNa3DGWaNQrBo0GSpOeAzbVyQevvXUwsNuzMaMVwVXnH496/IOD4ieMNL8Vt/ZPiS+tLW0tAq7ZCFd3PzDJ9Aoru9J/aO+LVjGEj8WXDgcMk3zfTJFdVXLp3vFmcK0T9RPs8wLeXMyZO/kZB4xjB6D6YrHkkumkuGS8vbkf8+8dqyhRjlQe5PqT6V8D6T+2l8VtH2nUGsLtF6Bgy5/nXW6T/wUL1SSY2ereC7eT+Hcs33hjnA4JrmlgKq6G9OtFH14tjH5Bktljjd/mH2iRndCefmTDYIPXFUdSs7qOF11CCz8ic/u5NOjRHJIxkhyMHPf6V4Jof7Z/wAMdRkL6p4ZFjcW+Gt5JyXUEgliMH5cED65Fdla/tBeDNagRJPFlq8Tbm2y2wfB3ArtbBxgZHQ1hKhUh8SNOfne56K/2a+jWOfTZbmKJtzyXlwAVYD5SEBIb9OKvHULOFUt49QEDsAQioGPXGevAzwfrXHaV8RdC8QeXfQ3ySICY1O5YUbaSMhNpyfciuktfEEdxbup1LS7dMkJsRZMpwQWGAM4zwB261k4tbnVA2fAOmpPrWo61HqLXUEKHT1RssqTBg0vJyQQAgxxwTXS65cNHi3t4QXOMY5OOvT61U8EfZ9P8M2gP2ZZ7vdeXCRyKRvkOS2RjqMUmqXgkuvNg8pyoPG/AP4804o4qkuaTZVkuLrylZlSKRsDLRk4/D3ohuW5WaMow4OTjd7ijzVkUsu4sOdo5x/jSrlsZ4B5+Y8//rq7GV7EE0yTN86zfN2GOfxxRHMuzJjf8Gq0YVOc7WC9v5VGqqzMqgID7Z/Wny2JuQTXCI/zL+efTofT60SSqygqwGf9o1ZmVQ+Y4xKvdh2/ComjjVSysoPoy4xQ0CZ+CAUH+lPiLxY446fSmR/dHapsdPWudn7tHuXbdvMwy84rRUDhgM4rGjZo2wD7VqWsqthe9I64Mpar5iqqW++Mz/LJKv8ACPQd6vaLp1vB88MNwHJBMjTMn9eaV4VmUqzEEVLA0cMyQqxJxnntXuYGop09d0fknFuA+p451I/DPX59T0Twks0rDfNuBPOM46+pyTXpLaDeeIPDsvh3SY0a41GSG33E4UBpF3Fj2VVySfQV5z4RnZgm0Dnp83pX0j8E/B+ieLtUNp4g0+4vtMtYvOmtYpGQTtkBUcjkoTnKgjOMHjNa1p2i2fL02ozUpbGr+yX8NIdKste8ZQ3k13Y6pfyWulsysPMso3wZAGwQjuCMkZKrjAzX0h5F1uaRpmbfwNkPCj88YqGOGHyorfR7G3sLOFQiW8duI1AHACjggADsMe9Wn/cKqrJktxtM7KSPUYrxpSdycRVdeo5szpLKOUsbiNrkuNpLMPy2qKprpVv5iyRx/ZmiYtG+WyrnGSOeOBjiuthsVnYSPHbLJxtP3m9uetJLo0fmveSTMW27REsYwvHJ6Z/Wo5zJNxOftxq1qpuJLaNmCnLQs29h7A8+2P8A69XZnV4lmu7yYll4SR2yM9RjNWI2tdjySeYu2Ty1j3ff4GWHtk4/A1XudRtY95tVjiLDa0jQCZ/oB2pXuNvmE0m1WGJvLkclm+VZMsQvcknnnsPaku1tYZHcOzDq21/LzgdAeKhtY7rUp5FtLea1jR9qo0QRMdMnBJzx1PXtV+OytoZCt3cWUb9gGJY5+tOyWokijDcvdbZNkcSg4TYzP/wLGB+dR3mjw6sw+3W7y+YoTcq7eAc9j/MVtlbWxUlrpRkD92ijg+wAySf6VmnWL6aRhbw3UUa42tNHs3Zz0UnIx7gUcyWoarUtw6HYx2KW6rMFtlCLvY5x2yTkn8fWoZZLW2VNkkCHBU4Of1bApPM1STMsbcsdp8zJXp0x0qCbQ3uo0XUmSXzJDGttb25Yy57EnkcZyeAPWq9pFhe5NNMyw+ZHfYPTbEoJ9xgVxXibxVp+ia9b+FYFubvXLy6RZbVWXzYyQGEcjv8ALEcE54JXB4rrbjwvpkNj/YqxtBbB2KrbEwEZ5OHXDDn3qkvw+8H3Fm1nceHdLlyxYyTo00ruerM5be3bqx79KI1KafvIpaHC6x8Rms9SttNm02KyuBKsd1ZlGnW3Vn2IVkVgrM/UEjGM1HL4/wBcNreQjUJ4pZm8uyuIvICKWl2pkqsqnKBj14yOleh6b4F0rTbaXS9HtzZ28kflstvdTLGwY9NjEjsOB04qrp/wr8KaNdC6s7We3uAmzzEuGLge27OCPUCt1XoreI79jznUvE3iC8+xNa6xclCY0dVu8wzTSTHYNybh/q1OACCc9FzUEPiDxBHcJN9uvYm1ONJYIHuZVQxPMEBj81mQ8KAGD7iT0ya9VtfhT4Ps7W4sbePUIra+dJp4Yb6RRLIoAVmGeSAB+VQ3Xw38Ft9lsI/DZu1tR/o6XU0zwW6g87A7lE+gHJq1iqSVlEV7nneleOvEuiSahcS6tHCUgzNa394ySRZmcMEids7tq7RtbPTAHBqTT9e8dajFM2h6xrWqXl4kVxZxw2edOhyx8xJJZwGyEC4wT8x64FevWPhPQtMkZtN0HSLBhh8CFNy5/wBsjJP49qvT7Yf3b3EZZ3BVFUEt9C2eo74rN4mL2iFyn4dl1hNCtv8AhJrW2i1maRvOFhuaJVGAoP8ADuwCWK/L0rRjunZtqwrgHGOBu/TmovtEO52a3aIk5VfMbA+vYfSrCsswEi+SChyMrnP0JNczk2S9SWS8byQreSNnRdvT8al8w3CqFuGUNxvX/wCvQkccipuul3Hrt7fiaF0/YxmVQ7cgux6j8ahiSIrpvJjkkmu0VEG5mLgDH1H0pJF27fK8wiRFbceGyRnAzycVGpDodyxho32gNjGPUfrU9rqGy4ZpnWQbWUDAYqx/iB9cZ/OqKGHMUJj+zyyFjkHfjt3pIWUu7QMkhi+Rm2k4PUrn6f8A16ZdLCFZvLlmVmwUlI/Pg9KqXepXW7y0uBAiAKPLU7T+nFSBbury3aSNpo1yjb/L2/e49MZxVZtSuJGEiGeNc/Lhl/E8iqsMdvIytHmWdvlZlHL98c84rYstJ8n5ri3ZX7q56Z6cf1q0rBcS1bWLiMwxttAXLl0OD77SefrxVmx0WMst3C8jGJ9rMqbcEckY71eh2ods1xgL0OD+A9TWXqN5Hp0FxIt5I00xDfISFRV9h361tF3C9i3qEMCmS4n0/cM8u+0HrzXLz6bY6pGhs7oqrORIvDBj2HHI7dRW60KXUMEmoRyTgxpJGssjAAkZ4HrT4dPZHSabyID8zKkcqFFHTnJyT34H41dwRlL4Zu1iWSZJCsGEREGRGAO46kn1qcWkcUSfY4445SvO5cOe3IroI4bENGsjRksQoYucH6Y6mpr6z0toxb3EYmQ9N3J/Mc0rktGEvmCJp76ZJBj94NyhAPr2/Ksq+DWF1DPpccymN1ZcsHXHbPbb9a3rrQYUjLWkysCwZdz7wvthqoz6XNKwMisxzmRo33c9hjPH5UMNird6hDcXCrb6FHE8xzNILjCKR1ZVwd2T0Hv1GKqQ/am3xm6ZDGT9x8KM+2a1obSGxZ4LqzmcTkFZVl5RgvAxjgGs9rloZpI4onRtpwoIyR/tf41lJDTsImqSshtZrtriabKqXdvlABwucYUcfnipprpcPst3WJVwZGQdu+Mc1VtHml86bUpLeNsYWNVBP/AmAGfw9Ks+XFbW6yecS8q5Kc8Jkjp7/WptYd7jLcXP7tvtDgtzvK7So7fLWhHbSNbsVk3ncd7zSZz27dBx0HFZslxcRyLbx2sksMa8HeCeexBpYfOZi0yiBNv+q67n9SR2x6UMexej0+G3/wCPto/KPzcSbWX068EfWs+S4tkdZobp3QSEKcEFtp5BHQg/kakktY8K1wkzA9QxzkdsGrbaXYx2Mc9jOJmAJaAth4vXKnqPpkVmnYerKLRr5kbNbg7zxucjGe/Pap0t4WW5YXMaeWvmO3BGM4GfzqJntriMRyKEYE5YJwR2HHcVXitRDa3MUau6O6vNuizuOAAMkk8Dp26nqaaYIu2I0+a38lFV3j6yMu0c9eehHp3qX7HEzFbXcgGNzCTK/XkdapxN5Ma/Z12qzE7eiuff3q88cMzeXb6pJk9VEPA98dfxq7oTTGypIshhkmd1jHVs7h/Qmp7PTWubOX7JL9oERLMA5Lrx6YBx+FQRxXSh4orjzVjBd28nhh754yc9veoZRqPIHlb2z5cgj2FPoQcipuHqRx21u24+ZMkibdpUkgn6dqkjhzJNHIyM7oVA3AHb1b69M+3PrT7iBpo47uNpxfeXi4cRj55O5GDwKbZNdLuuoZjK0C7JFYfMFb264yP0q1YTGx2s0NuFtsKobk/e3H06YqZbj7O7PDNFDk/OCrZyfp1xSR3kKR3UdwzCVtojVE98k/0qmWiaIr5hHzjJUMpxntgcmqUkTZs1POmKrDJDDMSpY7XB4HUgZzVb90ufJPlgn7q4Ofw6GmXXn29u9u2mzvvYMssi5Ix2z1plvp+papcblmmGBtaKMY2j6nn8BRpEhyfwxLlvFbySbvKWEH+91P4dvwqz5GnzSiHcscrZHEmffHXP6U+HwzMzMsPmzIVGVPr+PWluNL1KGGRrrTxIrsV3FATg/Qipcr6WJcJbyMO/WRN/2O1aVd3+tj7/AF/iqjDpEwZpri2mlkI+9MwZUx05zmtVoLUbVVZFCt0Qvg+/XgUTXSyfufMMkMu1Cv8AEdxA/r+NRCEpPUqEefYoP5dvbmJeUuFDiQNuBI64x27cVA0i3AHl3TQoMABAPlHbHcVLK2qWd7JZWKCCGCRo45MnDHucDn9aezaxNCbVllaMna0nl4x7j1rsOqMIxKdxbOysJryUqABugl2MR/tK3yn3IK1PHpZRYJpNUSZbhA0Ukn8SjIycgHqMYPpVj+xfPk3iz8oNltmw7dv9KuR6LLcKsP2t4Vhx80fysq9gAeD9Ka0K0JNL0PT51ma6vNrblWErIuwjvkAdc9Oavr4XXc0KXEhR1JG4A5Hf/wDVUdnpH2WfCXcN2X/1iXEe1unOPf0xWjbxtp8QWNuDkjzJORVIRj/2H8xWCXLKOvQg546UjaN4jDN5NqrrxtcycE+vPb8K2UE1xH5y+Wpk+/uchlx/Me9XLWScAAyKYgu1sMcj8e1Jq5Jg21j4igdjcWilcFT5Tbt3rmnRQh9waOW36/K2efw/wrSazslmaf7SY5M5O64wOfbPOaf/AGtbMD/pG/kKVDDng9Py/lS5UPluZSLcWuWtdUEb7g6+Zg7D3UEnkH6etSLcXPmqsaqrSttAXJz7A96Zf3WmXoMV1brKSrLs29CcEH8MVFBHGI9sf2hVA+XcuVHsD1FFkS6ZPC584vMocofvbeVHt2NXGa6jkItZrYgHgtuyR7jtVLbehx9n/ebcNhmGM9cc9RRMbue4M0i2kZ4dkWQ8Y9FqWjO1izHb3kt2ifNL5xIVFbqfyFN+TcvmLkZB+Xhh7Bv8ad9okx5yuQMblVchs+np+Rp7XF1tVnHyHkYYHBqLDuRKkjSJJHeqrK2V5IKnt9anWym8s3CYlCHLqox9SQOg96IdQSNvOXEDxrg8Dn6gjFNuLu1uGMzSmJ3/AI4MqceuBxWbLRLJJHIAbSZoQv3o9x+U+gbuPen211cW8yzRXjqB1Ct97PGMZ5rLtp5H87aZZYN+1ZXKnPA7Zz37+hqwrROpWSL94GyJF+XjHQrz+dIeqOiPibXLdAckqO7pkgenWm6Xr2m227dodjE8nzSNbxLEWPON3HPU9fU1kWqtKxkh8wkdSrZyfoOn/wBep7f7RNdGAWzs20s26EhVUcZz0P0FDt1LjGb+FHSN4g8NlU+0adjbhuIAce/HWpYZ/B2oEXHywlWB+YlASR3B+veuWa1vJHSDZvVmCu67lEK5+9yMHHXHWpv7EtQjp/aYEvRTsyM9jjuKj932OhUK70szqW8G+F7xC32WJy3/AC0CrnHQDcvP61jt8L9Gt5TPY6jfWDBiBsuOHB7HOe/8qjhtPslrHG1187RjfJyqs3QsFB6Eg8ZqfT4YrVmZYd8u3DSSSOQ2TyApOB+A7CleK0RssPWte5BeeDPEQj8zTvEhcrghbhfMyF5BB9awru38ZWZSS4gt53WQMJIiUIwc9e+cc47V2q3VwjI0MvlkLt/vjHOPlz0zVqbVIZFLQsN2MqMjk/Spf91k+znF2tc4iXxP4itI2W60eePeNytA4YID3wQM/iantfH+kxjY0ktrM4wrXNo3zHb3Kk5GfSuvU6VchWvrWGSRPmDeVjHHqfqai/snwncMtr9njD4YquTnHc0Jy6EPTdM5+21LTdUuPM/4SQXJT5lijnW3+q7Scn0OTzmpFht9SmktdPt4sR480S3HzBDwWCg5I6gHpmr9x4F8H3F00KrAs7R+b5R27tmcbscHGeM+tYlx8L7S33zWd5PZPjKyRXWAvqMNnGfY1V2t0SnF9TcksLDTbdGkuoLeOPor4I6k/Ws/97qVwwvHcWSP8sSQbfO6EE552/lyK898V6pr/gi2klsdWW6mUFm86RSH7hhnJFeDeJv25NQ8H3gs9Y0RboOu7dG/Bxn5SV2kH8PrV04Or8JpZo+udQezvpri0t7P97Bt3TyONsYb1wcg8dMUl5cWehwmIX8KSupxHawh3YqvJxzjnnk96+PF/wCCgnhvVLGW1sNHGlyN8pZZVBB9fnHJ/GuH8VftLeKtVhuV8FQi4S6ARpJ7lBIVUnb0yo6knFbxwVVv3lYzdSMep9S+M/id4X02Oz1Txswa50y8N5ZiaRAsEi5EcmFbBcAtjPTPABrzPXv20tEusW7XGbQl0K2sbCbKsOWY8AMM4AH418ceItf8XeIZC3ii3vJGLZVEQyrn1BxiuburpmzbxrdW5Py5fhk9cAjP516NPL6b+Jmbr9Yn2/dftr+BriI211HcIsiGMRvI8ZIPBOAQeB3B9K6Tw5+1/wCB9E0e10XT/OWzsoIreDfIS20AKC7v39Sc+pr8+477TbdfJjnieUjk/wAZx3yfpU1reTqWmaVZAc7Vc8Kp47D6/nVvLaT2IWJk9z9L7r9ozw/rHg/X47i/tY7mbRr4R7GyRJ5LgKQR0HHI96/K23j+1QRaha5hl2naUbBPbB9q6LVdevvs80MV4yRiNv8AVswLcHg89K5PT5gtjbyc/wCr3Nzwp9MVvhsOsNfXcmU1V3NG28TalG8lvewpOsP3laPqD05HX64qeLXfC+2aW4t7vT8ncxaT5D78Hp+FczrDSTTR3yyMPKO7Kvjjoc+o54rM1ho7ywnszGDJJGDGzcnB64rp5rOxzuNjuNM13w/q008Gl6qt0sLYImfZj2BOM/l6VLqGm3H2hNQs4YRcxHCeZLvjxn0xjOO4ryNd0emW0VlGx8v5ZVXrkdSfWqNrrl5b3AukkdIt3zKWIIUZBIwe4rPnS3HZ7o96F4rRlbi6tBnCsPL4B/E/pWbLJPb3C3FvfvKkmMxea0Sj3yM44rzy31yS6jguLG/QQ8rcQyS/MVx1Qeo9Pc1N/wAJpJZLHa2V7vmLrGPMhG3B65Prj+VUpRBpnrNjr2saav2qz154BtIz9tfoeMflUtp8RPHmlzi1j8W6kY5+I1t7oy4X3zyK85j8YQ2coWPy3hYbWdHwwY9Mdq0JNVtb6QwyXEoaJd3mIVwB1G3ByT7UnCMuhSqSWx7hpP7RnxZ0ZY4oNe1IqnG2SFWQr6AZ44GBitrR/wBsPxvb7k1K38uYHbseVlcn1AORj8xXz7Y+JbS6Rds0kgH95ih4OM47n2pl3cTahcRtaXCoqOFLsM7s9gMdfwrJ4ak90V7WXc+udC/bS1qzjLao04RT99WV8DPocfpXdaV+3B4fkRJJL9CrNtZmgbGe3TpXw5C1vMrW7XUcwB24ktyv65INRzXt3pK/6GsTwIPmjjkwxPXgNwKzeBpPYPbS6n6L6f8AtgeD7qSOOTVNOZnOArXHllu3f/PFdrpf7Q3g28jMjSpyOkUqk/kDzX5gxtPe2+68t/MWRQxVwrYB9agX7fpDRrb3EiI7Ha5ZgYx789KxeBi9pD9qnuj9aLX4yeB7zymt79FDheWXjNbNr4w8N6h/zFrY7sD/AFmDX5N2/jDxVaxldN168Mg4UC6DA4781bt/jp8RNBkVb67nVFPyyOuUI+o6GsZYGXRlKpFn/9k=</base64>\n                            </value>\n                          </member>\n                        </struct>\n                      </value>\n                    </param>\n                  </params>\n                </methodCall>\";\n\n            var doc = XDocument.Parse(xml);\n\n            var parser = new MetaWeblogRequestParser();\n            \n            Assert.NotNull(doc);\n\n            var request = parser.ParseRequest(doc);\n\n            Assert.NotNull(request);\n\n            Assert.Equal(\"default\", request.BlogId);\n            Assert.Equal(\"frodobaggins\", request.UserName);\n            Assert.Equal(\"thekeystupid\", request.Password);\n            Assert.Equal(\"Open-Live-Writer/One-with-a-picture-please_E33C/IMG_1311.jpg\", request.MediaObject.name);\n            Assert.Equal(\"image/jpeg\", request.MediaObject.type);\n            Assert.NotNull(request.MediaObject.bytes);\n            Assert.True(request.MediaObject.bytes.Length > 0);\n\n        }\n    }\n}\n"
  },
  {
    "path": "test/cloudscribe.MetaWeblog.Tests/cloudscribe.MetaWeblog.Tests.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <TargetFramework>net10.0</TargetFramework>\n\n    <IsPackable>false</IsPackable>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <ProjectReference Include=\"..\\..\\src\\cloudscribe.MetaWeblog\\cloudscribe.MetaWeblog.csproj\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"Microsoft.NET.Test.Sdk\" Version=\"17.12.0\" />\n    <PackageReference Include=\"xunit\" Version=\"2.9.3\" />\n    <PackageReference Include=\"xunit.runner.visualstudio\" Version=\"2.8.2\" />\n    <PackageReference Include=\"coverlet.collector\" Version=\"6.0.2\" />\n    \n  </ItemGroup>\n\n</Project>\n"
  },
  {
    "path": "test/cloudscribe.MetaWeblog.Tests/testfiles/delete-post-request.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<methodCall>\n  <methodName>blogger.deletePost</methodName>\n  <params>\n    <param>\n      <value>\n        <string>0123456789ABCDEF</string>\n      </value>\n    </param>\n    <param>\n      <value>\n        <string>c65ea975-516c-40aa-bbaa-d6192fbc30d8</string>\n      </value>\n    </param>\n    <param>\n      <value>\n        <string>frodobaggins</string>\n      </value>\n    </param>\n    <param>\n      <value>\n        <string>thekeystupid</string>\n      </value>\n    </param>\n    <param>\n      <value>\n        <boolean>1</boolean>\n      </value>\n    </param>\n  </params>\n</methodCall>"
  },
  {
    "path": "test/cloudscribe.MetaWeblog.Tests/testfiles/get-categories-request-1.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<methodCall>\n  <methodName>metaWeblog.getCategories</methodName>\n  <params>\n    <param>\n      <value>\n        <string>default</string>\n      </value>\n    </param>\n    <param>\n      <value>\n        <string>frodobaggins</string>\n      </value>\n    </param>\n    <param>\n      <value>\n        <string>thekeystupid</string>\n      </value>\n    </param>\n  </params>\n</methodCall>"
  },
  {
    "path": "test/cloudscribe.MetaWeblog.Tests/testfiles/get-recent-posts-request-1.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<methodCall>\n  <methodName>metaWeblog.getRecentPosts</methodName>\n  <params>\n    <param>\n      <value>\n        <string>default</string>\n      </value>\n    </param>\n    <param>\n      <value>\n        <string>frodobaggins</string>\n      </value>\n    </param>\n    <param>\n      <value>\n        <string>thekeystupid</string>\n      </value>\n    </param>\n    <param>\n      <value>\n        <int>1</int>\n      </value>\n    </param>\n  </params>\n</methodCall>"
  },
  {
    "path": "test/cloudscribe.MetaWeblog.Tests/testfiles/get-user-blogs-request-1.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<methodCall>\n  <methodName>blogger.getUsersBlogs</methodName>\n  <params>\n    <param>\n      <value>\n        <string>0123456789ABCDEF</string>\n      </value>\n    </param>\n    <param>\n      <value>\n        <string>frodobaggins</string>\n      </value>\n    </param>\n    <param>\n      <value>\n        <string>thekeystupid</string>\n      </value>\n    </param>\n  </params>\n</methodCall>"
  },
  {
    "path": "test/cloudscribe.MetaWeblog.Tests/testfiles/new-media-request-1.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<methodCall>\n  <methodName>metaWeblog.newMediaObject</methodName>\n  <params>\n    <param>\n      <value>\n        <string>default</string>\n      </value>\n    </param>\n    <param>\n      <value>\n        <string>frodobaggins</string>\n      </value>\n    </param>\n    <param>\n      <value>\n        <string>thekeystupid</string>\n      </value>\n    </param>\n    <param>\n      <value>\n        <struct>\n          <member>\n            <name>name</name>\n            <value>\n              <string>Open-Live-Writer/One-with-a-picture-please_E33C/IMG_1311.jpg</string>\n            </value>\n          </member>\n          <member>\n            <name>type</name>\n            <value>\n              <string>image/jpeg</string>\n            </value>\n          </member>\n          <member>\n            <name>bits</name>\n            <value>\n              <base64>/9j/4AAQSkZJRgABAQEAkACQAAD/2wBDAAMCAgICAgMCAgIDAwMDBAYEBAQEBAgGBgUGCQgKCgkICQkKDA8MCgsOCwkJDRENDg8QEBEQCgwSExIQEw8QEBD/2wBDAQMDAwQDBAgEBAgQCwkLEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBD/wAARCAMABAADASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwDzdVVnPBLAdv8AGnKmQAsYCjpt709NuD8p3DtTvl+91UDGPrX9AH5YMCqvQMuDmnKkf1PLdOopwDAttPPXnvQF/jwMj+H1oGnYbtVccN7ew759aQKvbPByQP6e1S9+2KB90EZwR+A9qCr3Ifm8wrg7DzxRtHG1dqk4x29+KmGM4b5Tk59KUoVyy47k4p3J2I9oPzKx5BA3UeX8o25OP5VIo47ZXI9s96TaB8/zEdqNi73Iyq7t21QQOmTx60bV/hUcn64qTkSfeBzjhh09qcoPJ7daGTuQrHnCqQMd8UuxVUybVBI7VJtZQyg8evpSFRguvBzn1oGlYYq9D2/U03bu+70Bz9ff2qU7du3rnoKQxrx8x6dfWmLdDdvXawPB4I703aW6A8n8alWNWz1OG5BP+cUoHH3c+n/16SAi2qMbVwp4HH+eKGIyPlzjt6f4VK4257Ac8n9Kb8qt15J/ip7iuM2qq/dAZe+OlKq7V3Bcc8/WpGXHPIJP5fWkPysF446KaQ72GbWY9c4603y1ChW6Z7VKV9M59elBycbec9qBMZ5Y4jbac9CaNvy/Lk4NOZXGxVxuzQ3zbSrH3yO39KLXGmRMm1d23IJ5PtTmx/q4+hHGDTtnRskk9sDFOCKoJ4G30602JkQyg6c/xUbfmC7uR3IqTb5jbTxxnHr7+9ADYbdlue39PWiwiIgMexTOfc5o8v8Au4BzjOO1SqrNnkgEc44pdu1lVWPQAc8YouGrIcclc7SRx7+4pU5wNoAHUt+lSKq7mHJA647/AI01lYsdpTcw6fyo3H0uMCLk7l4J9M04xqX3en6fSnEdj1PHH9aVVVVx97tx2oBEbLGTnk5weTS7VDYHBb+E/wCcYp7LsyWUYHH1oEe3O5hlc9OeKATImUrnAXn24AoWNRnoDnt3+tTNu46fl/jSKvzbdpHagWhCoJYlscdDSmM4GBkHrzT9uWxkYzgHb19qds3ZA6EkZobAYyquPUDqO1Js+7tzwcrx+dPVFXvnnt3/AMaVl46njoPWiwXIvmYjk575pWUryVyf609U3D72Cv8AOhQFViy4PGckdaBeoxVk3H5enGDTVVlBXcP8/wA6k29McAD1o2N/eAJ5pgm+gyMBlG7jPH0pu35uoIPf1qwwGOwJ6+1NbjrwKENu5CsP71cDtnnt+NO8v5vm4+lO2AqOfwqRlwvQ5ouJKxDtDMeSQPbAphjVFO0DHtUxHdeX/wBnrijp83p0OM4+tAXIljACruPt7fhSMmQVxgg9Kl28DcM5PFI0bcdCT+gpoViPO3CqFznk/wCNBjXJ4yQTn/H3qVg3I8v/AAxRt3bgvCt6c/8A6qB3IfLDMFZMgnPFOkjYNtVTjHGD0p56HGc9uKaI1DBmPPr/APqpiGqGDkFQfU5p20MuWAOOn/66cufu7h7ZpNq5AY5yMHPYdaW4+YZ5fTdn07UKq/e4OeuRjJ5qTawYEPlSeBSYXpGo+U5oAj2dWk5/GmjG35s8846j8qlCq3y8H+8B607aqt8q49fShCWpEu0sWZeAOM9vw7Uq44+bHX8ak2ozYbb0+lBUknpkdBmhoq5Ht6NlV7c0m0Z55BJ4xUiblBJXB9PSjad29ecj0oWgiPYvIXaAenPWhlwPmyV7U5m2qdvfgbegpwHIxjnrxRYZCuM9h7k55o2Zzubgfr9amZSuNpUHHHt9ajWNht384OfrT3ExGibaWLf/AFqFVdo9M+nepGUqTiTH1XtQ2B91c7uOnWkJjCNp+U5HcgdKF/eLtL4yuOnSn4Axg8H/ADxRtGCzSMSeD7n1pNFIiVW+X5VwOPel27V3c44x3NSKrsxwQAFzzSMp29duOuelNgmReWATx165oKjnpgdfaptm1dw4xxnP3qZ/q2CtIT3+poQkM29GXgH+fakCLt8tmzxjn+tSMuVUMzEDnd60rLtj2l/6/nQNasi27WCqOp6FelG1ekfDD8qkxt+Vckg8euTSsuFA49/emVokRfMygbQV7ilZc4Tyyf1GKXodrcDjoetK2F3MvJJx6ZpWBsZt+U4yM8/59KTaD83APoO9TFfvLyAaTCspVfxFGwEW3YQrZJ96UrwcgEflUjBmUIseCc8ngil2ru2tyR93HOKQ0yvtY4Vs5GM/1Ap+7GUVeB2FSbX528+ue1NZCuRxk8r3xT3C9iPy1ONqkN9KNuV+7nnbyKeqoVAUAeuO9OPmKWUKuF9O1MNyLy9pDKvzADoBxSNG/LMuPl6e1TGPLY6H69aaFZeeT3x1oHa2gzG3r34PtQrc7VGeeuKkUL8yrzgU4rn5toGfekyUyExCQfOm4D8hSqoDfu1Jzgct96pk9eSPT0xSNH827+f55qblEe3LHByuc/jSKu75lXvyO5qbb1YL2B3Yx/8AqoHPK4OP0NIFch2svzcFR83J4P1pSvmfKrEgnuOlTNtZePmweOeaTnBbbgj73+FFx3sRMoXqpwfTpml8vA+VlGffGKUqysI8jHJHvT2XG07Rkf570xJpsYV3NtVQSP1pFTaV2/Ken1qRY22/Lxg9c0c5yuCeaRW+pFHGP9Ym0DnJ9aXbuK5xjrUmFVmVu/oaFVd3zEnOB0psF2Y1oejKo4PzUKvmfPkj6+1Pzt+Vl/8Ar/hTgucruKkn09u9TqNaaESx5yu4rjnGaNuQflByRwR0/wD11I3baeT+vNOZc9hwfrmgaI1Vd24YBI54600qDjbyfp6VL8rZbI+Xr2/Kl3bcfKowOPrSYMaoST5cnBPJ7/nT1j+7tXBwM47UhVhgNgcZ/wD1VIsZwG3Dj26UmMLgWqxWT3y+ZCkl1HJGo/eShoRhRn1PfjAzyK/UH9nHxFL4s+Fuka81xmOe2hVLfyiog2xr/EQGYspVjnOGJAOK/MjydJa3MmtM/wBnhLYMcm3DkBUJ4JIBOSAOQK/SP9kWNk+A/htmvftG+3UlSfmhYIitGw/hIYMdpxjPQV+L59SdPNsS+jaf/kqP02nUjUy3BvqoNP5Sdj2WivPPHHxYbwnrZ8P2nh97u48tJBJJMI4zuyeOCTjHtXF3Xx28WyAi30/SbfPqskhX8dwBrxZVYQ0bLjQqTV0j3emTTQ28bTXEqRRryzOwAH1Jr5y1L4r+N9S4bWmtUx922jWL9eW/WubutWur1j9uuri4J6+dKz5P4k1m8THoaxwknuz6QvviN4I0/Pn+JLNyO0Decf8AxwGufvvjd4XtwfsNlf3TDofLEan8WOf0rwc3WVG3GPao5Lk/U1k8U+iNFhIrqfFgbHzdj79CaUFRjrtPHIp67dpxGPfil2j+MYBXv37fjX9Gn48JtCkEEnPNIw74Uc/Tj+tORVYk7TyPvZ6H+lHluxDHpnp3FCDYD/e3bSemeRTcNu27se3enqo+vHOewoAHC8k+o96YMj+UkErjb2z0p/zMpI9OR7UoU9UyP5dKU7iu4rgnnAoDUYi9W/nThsUHb07Uvl9dvIGM/wD66X72MYKj9KGUtBvcMvOOPwoVeN2SRjn+lOLYUFmUbR6fnQvzdcgdaTFdXI2G5QFwQx7+npTioGXXjPHHanryxwAaYqpzt6HrjpmncbEMfzbmfnB49P8A61G09+oPrStlcdVH3fx+tO2rjbtAHXHp9aCRB3VecnjtzSMo+7gkgdT2pVXrng9j9O9BXnJZjnvRazH6ibcKPmJP6Cj2br64zSnG8bWP+6f50vzZ3Enn1HejYG+wxf7zHmjA6cZH6Gn9WP7zJpG9e/t1NAXGMVY8gDd6d/8AGja2D8qjK42+v0p/HBXPPGBRt78Ej0P6+1NgJlRj5iMUg+XAWPnP6UbWBPzE9+tO+nBB9aVguNPVl4BGeRTdqgZQZboAD2qRSv3lxydrEjmjlvl55HOFpoW6uRrnB3L+nWlxjBA25Gfzp21sfMf060fMoB+9zTFcQZVcg5z05pu0LhuBkenSnqvlq25cHpjvz2pW3DO1sqOw/WkCI/u4yyk88dKArdSqk/Xk1J8oI+XPOaaEG4/KMd896YgXdn5lxu65pu1Y8+vTipd235S2B0+ppBGu4t6dM0hjWRhjaRj0NIdv3P5U5snb8pGelKQNp6c/rRsDGBEZS3Tsff6Ui7cdOOxNPVVOPlI9j2pPLYyAbR/hQITDbu7em4dKTceVXG48dak2jhT+eeabsVc7eFz096Y72EUqPmGA1IVVmIJBx+hp6jOcc4A/CkZV2jaSPU/40A9BhHy7cZU0m1cZf8qkXfyG4FIy9TjAJAAxQTuMXjb5asMfrSjoMqM9ffNP2/Lx8uaF27SehHX3p7gmMwoPzD24pfLfd94Mp5GaXoARgZ4ye1KF69fXJotYPIb1Ysyge9KobAZh14zmglnZepXt9fpQW3KCc8N9M0rDWwxdygbsKDjrRtXaS2fmz7VIm9lLbTg9s0jbWGQSKdiRqrt/hyAMZpMEru5OBT9uIzwOmRQmSQyqDnpTKGHcOV5x2NNx8y9d3bipWVV9MHtSHLemRQIax54wVB5Hem9zg4B/Spdvygjk9TjjPtQVC7l4OOcehoGxp5Ut19McYFNK9fl57U5t4G75uP6047lBbq3SlawiPbtI+ZuMUihei4I+h+tPCqF2sRz7/wCcUrKuD0IB5PtTAbtbcV5HfNG35Ttb1zStuPyhsn+7npS7Qw+ZRx6UguRKsjEDbj6Uu3rtXOO/1609Qy5bcSTStnIYc57UwQ0L8ozgf4Ufdbnvz9ak/wBWRjJ3HmmFXUhuOPXrU7juN2bANpOTxj1oKjdtKj144zTlXClNpx3xR8u35Wx2piGFcM27DDPpjFDI3PzLjHU9Kft259fc9Kayd2Y5Pzf/AK6EFxOn3pO/X1pWG0AJgnqDg/SnKuAW3cn9cdTSqrSDvyM0NjIyrNj5cZyB2pNpZvkXOOdvrT/4TuUnHQj2okVgoX/PPWmIj8tR8o69yf4qOVfA4B61LnI+UMCDmjauGZupJPNIfoRlRtG7J+nFJ5a/w84POe5p8S/edW3c+mKOsZHOOWwP0poEMC7d3bPpTGyoK84HqalG5v4SMj5valYfKTnkd+v/AOugbQxT8wwuQBnPc0bFxnaBmnFTjG7qOg/woKhsK2AF4GOaB7EbKGDKAM9eaIx24GR2p/8AvdPb0/rTsNxtyB0IoGRqqhR1I7Z7UfLu+9yeaeI13Ddzn5aR0YMvTn9KBjNoPO1jx39TxRhenJAz04qT5sD0HQUbc5UgHNKwn2ISPlO3OeO+CaXb8wzxhs4IqRV5KrgdSTnilbLLuZsdMf560wIiCcEKPlHr0+tK26TG8cfw46fWnuPlBXknoo6UgjweOuSODwfzoKI2jUP3yOhpTGu4eoFPRevydDSSHp7YIB70CQ1oyHOSo49P60rdvmIKc5J6/WpB8vCsCv8Ad7U1lxnuR0xUiegihSp24U96aF3fxEZ+XGeakEe4ALyaUfeHc564oKvoQ99uNob15+vvTtvXdtH1788VKUGNikZxjmkPOcsMAUgI8MOjAZPyn+dO2deTk/qaX733cFsZxQodvm3dRjihiQ3H8S4bB+uKRljyentUnXC/MTw3v9aNpRT3BpDIzuYZC9Bj60pXcq9R3PanBdq89O3tTvvKFZVY55Pr/jTAjVechTk880hVhjccc8kcVNGqq3yr3+90zSKzFhyAvrjt+NF7jGEAtlVznk88ijsCxxnoMd6fxu3bOP7w608KTkK3CZzj2pDSuRqp3YHIPT1FJtwvy854p6qP7vDDAwOaX1XPOMfWhgtBmPlXqMevHFLH8vHGAR+OakwchQ3bHTjFJGPMy20k57jp/jSH1GhWz975RkU8ZZh2P972owVBXoW7U9VP3c8A9c1JS0K+pRr/AGb5kk/kGG5ikSRY9/zZOODwenfj1r9Ev2Nby+m+GUTJY7rC6nmuTdEhW+0+YyyoygnnAjIIwCCehXn89bqGOTSp/tD4jieGR8DsJB/jj8a/QX9ia40ub4YXy20CW92ur3JkhJIZYiQY8KeRH94L2+U981+O8URUc6recYP8H/kfpOBfPkuFl2dRfimaHx0VY/G+lydN1iN3v88gFeaSTLuOSa9K/aAk2+LNGGf+XM5/7+GvKpJflK8dfxr5LEP32exh1ekmPaY87vX1pvndV3Z78VWMuVHXmm+aOfWsLm3KWPOzznj3qNptw5OMVXaU8c+tRs5/vc0rhY+USqyKOgPTrzSsuB35/nSbVc/KFyDzxz6fnT9uDx1zkHPev6ZR+IN2G/NtHPB6npmhm+XCtjp/+rFO+Y/Kqg9sYpdhCjB6+3Bphe4i5PzHgj8qFXHyjnnPPenKp46jB470vI+bd9eccmhglcjx/COP/rU4jByyYwfSkVS7bmwMcdelSKi9ecMOtBS1G/MrBhgZ9BjNJIu4H1HC05dxyGXAH3f/AK1BXPy5wAPyzRbUBirtXay4LHr39KXG3OPvNwd3HShSSx3MMnuvT86cdow23jOKdiUNGAwVV/HvSYbdj86eqryF4XqKRhkfMoOehpWHsIU3DseQcUhVl+Zug4+7zTlVmyVbPP5UNuZhnoefmanYQzGTlWxkUvy9ep5z+FOZdynbjnpTeApXcegJo3C9txQrcbSeCM4pf4Tt+8RS7ju5AOaOdy7mGWH58UrBe+w3blfT6+1MG4/Nkg5647VJtww3KOeMUm3bjscnPr9aa0FLUbtHOFOTS4Kk+h/OnI3OOvt2NJt4+h556Uw2EZfutnO7pQysM5C7SOnpQyx/3uOn0FA+7g9R1x6jvRYBPL+8d3Xt6elK2QpUMD269acoyvzKc7c0bcr8vVRSFcaEwSc8+g7UMM8bDwcetO7bWyD1yKdyoXcp/H+VN6DGKMOGJzk/ypNrM25gcYPOeDinlWYBeeuc+lIynPUbvehB0Gj7wC9xz70MNvXJHqadtGcLyR0NGF9s/wAvf3oFYYVPB6HtS7d2Fxgnoc+lO2r3GR3460M3zZDL6EdaNxWGAFc98Hj3FKcsc5GD97tTtq8MRkoP/wBVDIw5Ujd3pjeiGLllOxskdc+tAHzhQcc4Jx1pzKMffzjv6UDdgngH3PJosLYaqhc7SeOeT1pGYswVetP+ZQAc8nPNLhV6DOPf3o2BkYXaduMrznJ70rBW5wVU9c96eAeT3PNINrfLt3Y5o3AbuO75fzoO77vX8e2f5U7bkYXj/aPXpSqBsO3P49aASGBfkO4HntTSoH3uoNSeWuGbbjinfLwvQE0IErkT4b/az04/nSKvyAcY9MZqXb+8HYdKRlByckcjtz/9agTE+XoOCT2NJ5Z79weM8GnMu7nn6g0fMMrwcHjI6GgdyL/ZC7TSqoZjxkLx06VIy/LnHB4z6UjKV2jOAOo/SmFyNm25XgY545FOw3ViMY6Z/rTu/Pbt6+lHltuLdTjtQK5GR/Fg8HPWjarAY4xz6YzT2X+7kc/dFLtAX3x0NMb1ZHtZVx3pdrY+Vjx29qkBYnOAD79qG2qfvDBpARbWPzOwJHQkUpG7O9cn86lYMqjcygc01V52sOOxzwKQbEXldFU5A68dRTmAU7eex45Bp21SwbaeODn0oCKdp25PNMSE+9xjHfn0prKu35Vz9O9Obt1znn/PrSsq4BIIxk5xRYYzauDxn2PrSsN2Tjpz1p+3I3ZG4dDSbdqjPPbHr65oC43aqrluPxo2rtLH73r7U5Fbjq2emTxSlSf3aYyaLDRHtLZbglf1o/gwcZ9DTlVV9hTZFDH5WbP94elMQn3T0GcduuKOV+ZeWOcD1FPU7h5bJnHelO4nK8gf5NIEyPbjae9OCdhyOevWlXcu0k44GaXG0fLjOSOT0FAIjbar/wCetGSuM8dz7U8xsWK88t+VDD5fvDB46UDsMYnPy/KD/wCPUm0rt7ZPGD3qRtzKMdd27d60GPc3DEkc5xQCVxu3OAWbj0pvRto69eP88U/ttxk+9IccsACR6GgLjW3bRt+YHrShRuPfNPbOPQ5wT2prKx6pgmgGyMDMm7dnOQfaj7ucoecjFSbSfvdvbFDEZ+Xlh0oC/Ub8jL1UHofp/nNIVXhtpwPTqP8AGnbd2Fxnjn60qj5sPjd39aLFJjGHT5sjvxTTuALHLEHgVLtG5hjPFMZcZGMY6800DdhWUkbjnpn/ACKQfMvORgg+5p4+X5txJHYd6Tb167u4PpSHoNVTgKoJGMnNC/KwCgFed31pXVVULyQaVQvJ5HGMgf09aCbjCFBztJz29Pxo8sZ+9gdfm7f59ak27drNxx1A6/Whlbnc2VJ/I0ti9hgI5Ytnb8vHemqSP3inGR0PNSn5mLKMkdD0pNvbnB/Wiwrke3ao257dRQy4Ze/r708x5XlQR/OiSL+8uTjNMW4xgeF2k+3alYhirdCD+f1p/wA20Ltznj6ChQdvTKj07VNhjFUbcsvPPOcmkKbkJyxII96m8tepXgDnnvTG3YGSeM8ikMaFALNnkDqO1OVem1ev8qVY+crge5oVCB8w6jNDENK9+x659KGwPmHHt6075eexHQmnMzEHoDnnHtQUmRgDO0tke9JtPG7Bb2qToemR60bercj0x/jTGmmN5VjwQPTrk0YbhWxzTlTdt3ZyOO9Gzdg88fp71NxsbnK9iB/nmhVwvlk59aftVVwrEHrjHX3pBt3Hbkn+KgNgQbhncSOlI33TtwPb/wCv2p6j5sMPcn1o/iPy4HPOKQr6Ddh5Zmxg/Nz2pwCj5dp5+YEU77wOP8aAv+18w9+lIpOw1V+bLEHPHX8aG+7t3cfw/wCNPXJ+7jd196XaxUFsHNJoat0B5YIbOY3Vq1ynyFoR95yWAGB35I47/jX6BfsW2Wj/APCrhqC2saanDfXFnNMZA0pyEkMbEEghXZsDoOcdST8A+ZNb2801vIsTRx7hJIpKoQQcnuenSvtb/gn/AKzO3gzxH4XvsfadN1FJ9wGd/mRDcS2TzkDjPGa/JuL4qObN94R/Nn6BlLbyml2U5rr2i9tjsP2iN0firR5m6NYlV+okOf5ivJZZME9OtexftKMF1Dw/xyI7g/rHXirNuzXw+J0qH0uF/gxHMxx9aYzHnHSm7ug4pu70x/hXMbD/ADM/jSbs56cUwntzwKazfg1DA+XU6MeQc4zTvL+Y/dOe/Q//AFqFX5VVh04yfapPL58zgE1/Tmx+F9Bu1h1jxxgj1OaAnyHcN2M/l3peVAzgk45FPHOQvQ9SepzTGiPaflHQN/Khl2tuXPB71Iy/NnPT3pPv4YNkn8aYDWUDAySM0Kq7fTn0P5U7+IrznIPpnNLtO1l44PH+FA7Eahf9ZtJU9Bn8On50rK3KkZUc07Kspboo6HFIW+bcvBPcUIQi44+XH96hccOeo559Kdj5lYZG3P48UigcM2Tk9qGgEZdv1bH4+uKQqeNvQcdPxp275u+enrSHbgHLc9v6U1oO6G/xBtpYntjvS/7y9hzUhHyjccjrx2pAvXnOPei9w3EYAL/Fg9W9aaduAF4Kr69QKfja20kbSOvb8qTqvrjoKVgGle+0E0rYI+U59T/nnrS7QRtK9R09KOMn+79OtArjfbGCfX2/pQF7N2J/CnbFXPHI/wA/lSj7oP3RTBEaoWyMEE8ZNHzD5Rk459KlVdrdyV/Cm9O4z6nigb8hnluQQMDmlJ3ffyB1wO9SfdG7jHVcd6Y2fXpTROwg+ZSVOMjv3o28DcAFz1NP6Nz0Pejq6/NyO2P1NIPMa3lsRliCDlefzo2rj5ee1L/wEg/zpdvXaB/hRYGxvYtxwc/SkVfmbd/OnqF5Xafp2zSdxtbAP6UwuIN3K8A/560ix/xN2P8AninDD/dYkjnilfqOoOelAPUjAORtGMevSlVflODgg/hTty/e3Esf196B2VsGmJDdp+6QGOORSKu4btu0fex60/Yqk/MSelL93Py8478UMBmN/XHIpG7fKTj9Kf8Aw/dz7UMq/eIBAPrjJpIHqJt28evHrmk4/jU5HFPYfMF6BeMUKPmBLHheM0WB2GbRt+UsT2z6UctxwDxTo049jzS7VbJwdw6e1AhvzKo+Xk0jBvvbckYH0p+1fmG7P+f1pGX5tvZevanYY0fKoX/9ZpSgIz1A/SnMnJbpj9aDypwe/SlYGRcZ+7k9mpwXByVp+MZ2kemKQKm3POQcCmKw1VbODkdh70pAbqAODx6U7arMFYcikxtyp5/rQNMP9lskdaayhj/F7GlBz8wTn+Y+tOPy5X1/Siwm7kRBJPRf60vy8B/XjHcU/wCXB64I60m1SQRuOB1oC4jKeQRj3B6U1eG4zzTyFdeRhT+Zo2/KCOlAMbtXnjJI7HmkbO73IwKlI3LlSSR2zSAKWwuMg/WgGrjN3AbkY75/zxRnuFJLdwKdtVQOpyMfWlwOecYGaBXZGAxOV6Dr/Sk4VRlunX8ak24Pykj2NJ5alSu3qe4pgmM24HDZ7jinbQ2Mfw8n3p38ORn8aRVKr83OSf8APtQMacDjkjoPm5pdpUdTn69KdtVuFGPfPSg56YwcY9qQEYU9STt6D1pwVuV3HJ6mnKrf6s8UbXGflBHv1oDYaE2rg8gevQUnPXaMfyp3Qg8kE9TRt+96HB56UBcZ3AGM+lKVLZXjnt2pdvPQ47n0o2hc5Y5/i4oEtBrKpXJXn2pyoP8A63tStxheMdsdaG+70JJHJp2KTGdN20flRj5cZAI4+vvTwwY7l46c0hXJAP3gfwoHcjEQXG2M4Pal27AwDdu/5VLs53Hg46e1JyNwY57UBbuRKgbBbIP8qcFZcELuOMfT605sj5v/AB3FDcqVGSx/WkIYyqx+ZsbR1xQPmUHdwM+1OTvhScfqKFUL97IXHIznHpTGMZeo25/WhlXjP8P509l+XduXpx2zQqrz8qgD+lAiH5mw23nP3v8AD0pQrb/UDpUjBed3B9qVd2N2CMeo7+tA9ERlP4uffaeuaGXdxnjbjLVJzuLjjikCsr9hkflQHUbjavyqOf1pMhfuk4XH51JtjAyCQwpB8y/cyc8UIbGLtYYxjB7il5UbuAQf8ml2qAN68eopWjGdvXHXPagEuoxFb5VbB45obaqjb61I3OdvT60nlrg7s7v4aRV7EYXaQu3gfw9fxoXuqsDg52+lPZdqjbkHuaMMvox7etBKG/dx3B/U0m0KVk25C9Sf61JtCnj7wGOKG7lumPXnP9aNikxm35RtU+nPb6UixKW6FiR39fwp6r848vJHvSjrwOv60gIzHyGGWPvSH5W3HIHoOe3WpDuwDkKM7qeE6Z4HtRsCIGXK/L0HT6U7av4dKc2W+7gbegxRheVXoeue1FhoQqwJPUH260rRgrgrg560rKwzgH7vAHb2p3uRkntn8PwqR7DApbHBI9c/pTeF7Y/2T2IqTb83Hyj+Zpdu1fm6Hp3+oNAEZXr82T1JpdvTdxnke9L8y5xnaentRjK9WBHHsKLBe41lO7c2AOx74pxVVO7a3HFL97Ibop4pQqn5e/QnNJleg35chmUj9KkaEJEsmd5kycdxg45pMMCvrzWi8MMmhRTK58yK8ePaE4CvGpBznPJRuMdvesak+S3qXTXNczO+fLySCfyo9dygk+tP2qrBV/8AHTRtXltx57VruTqxNny/KuAT1FDI20tgA9+elPU7cgNzj0pAxB2ovX161KHcJGkjtZ3ikw6RFo8jOGHzA4PB6V9gf8E7bFY/DfjC5tblykl9AsgeLGS0Cujg5wSQ77hk4OOeTXyIv+rlYMTiNxnjj5T69a+pf2DfEOqXviDxFpmpa/MFubDTdTcSMM3Ep8xNoyNoUYGQoBPyjoK/K+NY8uaU33h+Uv8Agn6DkXv5K/7tX84r/I9j/aXVheeHpM/KY7lR9cx14n0Dc4yK90/aaT9z4ck29JLld34RmvCGZtu78DXwOL/iH0mDf7lBwPm60xmx1oJHXmo2YDrnntXMdFh+7sSaazYJPJ9PamOy0wt8wx+poHY+bflbYyrkdqcV+UKu4k9vr0pY9yDawGMDIFLGG3lcdsGv6eZ+D7ibTuwwx/D9KNqbfl4GfSpWUbf3Y4Xrmm/Lt2/Kd2BSTuVypDWGTtHfpQF+Y469BxT9pK7RycjpRyy9cnnGB1qthpWI1+XG7JbpQ2O/qB9afgNgFTx+go4Viw4x19KYm2MDKy4jGc0HHKhjgdaft6q2049KRcsOowPUUDQ0/dPmLnd6fpR5Zb1BwDxxTwv1xjHPc0iqpwWzu6ZoE9WNDMpHc9OnX6+lKuVxuB4zxntSjPbHp9eKXb0RePYjih6giML0O7GT/nijbuxtyMnP196e4+YfMQcd6NoUA4BPp6A0IENZV5Lfe+7+FHl9CWB5pyr+R7mkIGN3btgUDvYay/MGPQdRT84ABXJJy3rS7TxlehyTnoKQ8qTyR25otcXmN4b+HpwMUmOATxxzUu35vbrSbQAzKuO1PYQxtwUKCTmjp8qn5fpTyE5O7PGDQyr3GM0bB5jAoPyjp6ZoZcKe/wBacAW27enrRtUdF9P8/WkgG8dCQR7UBR0/yRUhC/7J59aRVP3toBNPcaQ3Gf4R347cf/rpNnzAlQM9fen7V/h6/XpR/hj6UhOxH6hW704qFztwCBS7emGyw6c0NlT83Bwc00riGfM2FOcDsP1pSCzncx3H0704LtwepPU9OKVUYEsDn0z2/wDr0wG/xfM3bkelKq7htU4Azk+tO2lh82DxQoxjbkelJjGc91IB7jtSEckuww3v0H+NP7Hd07Z/z60m1mHqCeaaJYz7p7Ht9KVum7GQ3f0NOx83PUUhRsdO35mgVxnB6rz0wO9Kysv8J+bGKk2rx8vI4oI4yGPGRzQO1xm1mweeKVx1Vsrmn4Y/d59B2Apu1s7g2Sen1oBvoR88so57fT+tLxn6fyp3OArcmlxuXdgAUCG7Y+zAj0oClmLZx608rlivU9OmP8//AFqTY3BVhjuqigrcYoz0PIPXNKRhjuBHqadtJb9B9O9O2t3+lAltqRlV4+XrzS9ivc+3NLtbaOuM/iKTvuwQRQGwnlr90dCeOetNKtzjJ+vrUhXp3z+NBQEkdSKBMae5OR/WgLlPlyB2FOZVPy+3FDL1GMY9DQA3adp4PTtTdrcNj2zUvbvj6Uhxu+VsYzzjtQGwz86T0PQ+nr709Vwfu53daRlBO/GdtNBuNAIYgEZ6+9Kyrwu05PNPb5iSM/QUn6j60g2Gcbiu3g/eowVUGTnI6g9acG2k9AOtLyGGOR1zTYkNGR15U/xds+1BUZOFLGnlVJG1Qc9P/wBVJtO7lvrz3pFh/GNuOOADTDt5Utnilbn2A79/oaXYpxt5z+ZpkvUYqnbt28n3pSufbmnbW46+mKXbu+7wc59MUARtu2sSSP51Z1K3jgvpoY1yoKkYPAyoPH51BtPzBs/MOhq3qZLXzNycxwnj3hSsp3VWPbX9C1bkfyKm1Tz0GKbtYkDqfbtT1j+Xvz70bVJXf61qQM8teefmx+dHO7c3OTjg089l6E9KNufXHr60XG9Ru3GOB9f5ilZWDAbsDvnvQwb0PTPJ60Dg/N93+EetBSY1xnJ9/wCHtRtJyp+U54NOwzHcAQaRl6qW69sUWENxuG5lJI7A96OfuBT+Pb8fanrt+8ACOwpPl+9jJ/Kn1EIo2n5T+vFDLuwrY460bV/i4X0pzBuPmGMfUmgFqR9GI2nFIN24cg/hUvptbLHtSMvzDbnijcbGbWbG3O7r6/hRsY52n6nb0p5VS3BAP1pDuO0rkH2PUUAJtYqcrjNN+7hvu849zUvlqoHzHHP50xuWKvyexoQ27CkdCM49+1NVfmByQPWnKq7emSB9PwpV3bcZ6jpigBi/MG3IcLg/h2owox1KmpAdzccYHbvSbQf4hyfSkFrkSrhg27nb0xS7VX+HGc55709dwJXo1L9zHJ/DvTH5Eaqu3qT6UMNvPmHkY9qfjGNzcYzgdaD935gTgjj2pAn0G/MvTkL64yKVsbjhhzyTT2TqxIHrikZTxnoOnFIZHt6cc9eKNrDK4AI5BFPKgcjCrQF/h3ZB6Z6D/wCtQNMYwXhmzjGR7mhB8oxkAdeetPb5W2t68+lG3noAD+lADWTp/dx+NJtxzuGM5/GpNmcDdnPH1oVVwwwcdKEOzYzLHov5mlbthseop/zbQeD9OtIQRGG55zSsGxGFGWXOSf1/+vTvvbdwwOo5p+3bncSFHP8A+uhVXBDMSD7dKTAjC5K/MRjHUdadtGDtH0pwDbWHXFC8tjdn+dA0iPG7G7169j+NL95mzjJG3FOZdvy9hTlVl6Pn09qAG/NuGST7Grtp+803Ubfuqwzr7bX2n9JKqqzLnb0bqSauaSrG4nhJz9ot5ox7EqWGPxUVjWXuN9tfuNqOk15lHaucdQf19aUZ3HK05V3N2J9P89aQfeyeSc545/xrQh7gM/MWBBBHI6YpGXdgNgHpxTvL46kDHf1p+08MGIPTFIa1Qsa7t+cgbTnHbg19P/sK2dg/irVm+x3Nrff2PYzK0MzGERiSbdGyNkBSfL5J3bkOCBXzHDHvcJnhvl449sV9S/sF6iJtc12BY5FaXTIiGaYbA8dzMuCuQWJXkEAhQrDjv+Z8cpLF0H3jL84n3XDvNLK6qWynH8YyPZv2neNM8PPgEi6mH5xj/CvA93GOgr6A/adjX+wdDkLAEX0i/nET/Svntfubuor84xn8Q+swSvRBm/zmmM2fmGeKC30x6Uxm7/jXIdNgZv7xqN2Ppz3oZl4IGKjkY59/880ylqfPu1DiP0OeB1PvSrH/AAn7x70Y+YttJIHbtT2VsEsvB/Wv6ePwZjWBZhu/+tx60bTt+VhnqP8AP4VJt3ZBwzdc45/KmqgbblTux3P6c00hPcbg8Fuvt1+lKv3tuD6g9qeUbbg45NI3ysQQeKNx7EbfeOfckjpRt3jhVC5wKf8AM2TtyD0HejbnhSAFHXH8qEFxmCwKrwP88CkUHBxz/SpGwq7WTkNke3pSfMRz95exqthjWHJbHTqOuaRjt+Zuf6VIQWUlVIJAAOelNVVAO75vwoQmNX5jhuCOwPWnYVWySCR/OgL8p2rg5xgdqX0bdnjHWhoExjNzhv1/WlCqy4Vc46c96cFVR3/KkGVxwGUjn+VFg23GqWYcZw3bFG5Wz1B6c07b0Xdu9KFXaA+0AnP0oFdiYby9244JpsiMMbuT+tPXdjgZxSldynt0J96ewOw1l49e350cDGRt96f7lsr3pFzg7m7mkgYzb1zk4pVByeRtH+FP+9nBwOlJg44GTTENUfw88c0bflO5Oex9qlC7cs2SOvNNEeMc8YFK4xCCuPkPP+c0Nt69e9LtbHDcYx/+qkYDADNuzTSC9hv8Ibn5ePc/4UqglfvcfTB+lP2/xcEdDzTVba2G2gc84phfqN2hhncMgZpO3bOakUdFChiOv1pCFz15bvQITaNvzck0Hd25H0p5xwMkkcUYC4z1Pr/jSGiJVbIY/j2FO+6pUck8nvTtv97jn86UquCV5xyB6ev402IYF8zJ9qbtG7PphuvX2qT73XoeKGj+bcOWIoERs2GHQcdutG1cHAOOOgp+w8Ljn3owMDPPrx1oC1xFVUyo4x6DpSKcnqcdeOfpTlLGQsx68UuNuevtQFxm07/l/WlKnHPf8/WlCqv3e/PTpQ3vg+uBRYVxCu1Rxlh2FIq/N6c05RheMcZ5x0pedwVcEZ6+vFFgvcj8tv4sYHc9qdtDDvx2xTlbaQNoII60gUbewxSYLyE/2Vyceopowx5bBYdD2qQ4+9t/Ok2ttyMH+f0phuIqqAVI9jQy/LuxnHp2p3zFduQCent/9el2qqknv156+1ILkbAZHXJB49aGXPLHIP4U8LtONv0HtTVXb36cf/qpiEGMeuB+FJt+bvwPpmnhW5x1PP0FHG07hz6UWGNP3iu0gevam/w/Lz+NP+6ww3XtSKvU7Tk5osJjSG+XGCfr0pwwF68n1H4U7A5b09+tIV+Ue3rQgWgz1bv/AD/Gl25UfKQw44p38PWjbt6t0oBDRz935eeaF+bJzgY7dKcvPzKCBjvRjGBt+lADFXbuGcEmjb1O3GevtUmF3bmyR0+tHyr7nGetAEahVw2MihcKwZc4p+Cu7a3+NC7vfI4+lOwXG7WX5v73P5fypMcjpz3px/3uR3p3G37nB6EnrRsG5GqKcd/Q+pqxfrskQ7siS3gZT/2yT+RFQsu3oQMdBmprzazW7KvBtId3PUgEZ/QVjU/iQfr+Ron7rRXK/MOevWm7VjXLZOe9SYx/Dn0NGf7zbsD8q2sZWI+q9fu+/Wnr129geMd6G28bcA4596OCB054PrQ9Sk7MRvlYHd7CkZW6cZGKewxkDnd7Um3n5lxuosMY2ec9x2/nSeXubc3zA85qUZCZpWXGPl5z1/nRcLXGbVGG/l2zQE6fMSx4p235lPUUm3OepH3uvSkF+gzHTjj0zS/eIbninEbB+Jz/APqpwwv3cAH+dNgtyGRN3XHFKevXJB5p78fePynv1pMYbnv+GKYW1I1Xp0BPy9aVlI6KSPQf0p6qv3mGe+fWjB244x1oGMVSP4aayhmzyD71Koz8yjB2/mKMttHOcCgQ1lYDtxSMvV1bJ9ak3Y+Zee1DD/a5PDe9IojxjC7if0+tO+Y7mY8nHWgL8uF4x/nFLtJ5J9qGg2Gr2Y/MVHX+lG35jgZ57f54pzLsJHK4b9aU9AOPbiiw7kanrlSB0yaNvQ5B78cfSpAm7t94U3a2Ao+bvyOlFgTEKnf0Pv8A57U1l3NtKkgDj/EetPK4wy9T1INBztG3kA8e9FhiBNuQGOc/hQvzfd5/3qkC9Bt+XdSElsLtGRn/ACKQJka52hep64pN3O38MelSGPbkdN36UKuPu8nG7OM59aYEeACdzEfyp7Z+6cj+9RtbaeRjr0pdpCnHU/rSGnYQr8q7cZB/Sm7eSy5+h/wp7D5S2Qv0pcMp27ifXjoKLDGfKp69cg96Xnb68dfT6U7b0O7qc896Tbghfve1KwDTux93cAaX7jfMRndyPanfNww4wO5pepIYDk/jSHvqN2jhucfSgK25tuMjrTlXC4yP9nFLxg89f84pMq1xmGKhW9ugrvPgXfQaf8YfB1zdeW0R1i3gk8xQV2yHyjwe2Hrhdvp8vpxx7ir+j6hJpeqWWqRHD2VxHdJ9Y3DD+Vc+Lpe2w86fdNfejTDy5KsZvo0O8RaO+h+INV0eSMhtNvbi0YH1jkZP/Zaztv8AEv44POR6V6T+0PbNbfGrxczBSt1erdwsq9Y5okkQ/iGFedKo7gY7issvq/WMLTqvrFfkbYyCp4iUfNjMLnbyePmFG3oMsP6U7qCw5wehNO2hgMEkrXWzmQ+2LecgVs/MuQ31r6P/AGEdR8v4gatHNayxRXGktZWzbXkEjW06lyWHypjzSdv+13JOfnCNsOp27ipGT+Nez/sfW8MvxwEN7Il1bQrqCQ2yxMfMdhEwfJ4YJsYHsDt5zX5vx1dVMO+/P/7afccMrmwGIv0lTf8A6Uj6i/ae83+w9CZT+7F9Ju47+Ucf1r58/wCWYr6T/aWt45PA9ldHHmQanGEP+9HIDXzQjYQfNnIxX5ljV759fgNaIO2OO9RM3X5qexz05NRsvPpXKjsSI935CmP82dtPbqfeo24wdpzSuUkeCgLkhlwR69P/ANdTLnH8QPp14pF4/wBYcNTjtyM7eOMA/wCea/qA/A46ITY2Qc4APA9TTdvzfdGF6e1OXb8zHqO9O/Ig8Nj/ADxT1QNXGdchVB7dePakVTheDgjj5u9PCKx3NkdqOmS2SSuDTDd6jQpxtXqeMUhjVto5AHPt+dSKo+ny8UnysNpx1oGhny7WbaSD+g9qaVztPXd7VIwwepznpmk/h28H+vvVBcbtbhdjEgUbWVmVV6deal2bsMykH+lM2OMgY6Z+hpDasMVVwQzdP0o25G7qPTGM0rDClTkk8f596VVxgNyT69aqxKsJ97A5IPPTvSDd1ZcHOPYU8q33VwM9+9Jtb7pYY/SkJvUbtZlJk5+vWk+Z/wDZHYdeak8sc9MnpzzTNpXC7s0JA1Yd8w6DJHb+lIwXnoB/WnBuRt+9nH0pNmGJznPX5qLA1dCH6HHf0o2/vBkcHj/69OXgDa24ZxjOaFyV25JA79//ANdAXuJs3AYbp70m3cp6g/SpGUdsEcnFNyOGb+L060bg9GN2tydvGelCqobPcetPb0Zfl9u1Iuf7vHuaAdmNP3cMf/rUu1ujccZwKUbdoy2QDk/4U5h/DwBTC6Yzy9uRwP6UqqMdjxnPqadtO0c8dd3pSH5eF4BOenJoQthiqPvdARx60rLuyvoOAafIqr7n1A60bQvp0/P6+lLzGhoXsyn0/wA5po77gMA5qZlVTkc0m1VU4wCBmmDXYiRWaQ/nnPWjBDkMSB19jUirt5zgjijCMCcZUZ+lMVhu0jp3pdo2kckjnjtRtZfl5+X8aOdx3KetK1x81hv8XPXPf1pq79p6E+1POeAeMH8aUAKDx+HoadrC6jB+R6D29qXaoXsSOadjaNqj5uTQN2B7cEUCuMK/wlSSf1/wpFX5QWAz61IF7tnNAHPAPzc9PSgOpHID97b1/WlZf3e31ORxT/lYheRj/apVVduOA1AEXzLwG46UbeqjoOx9aey/KSce1K2OQ3zYpXJIsDH659Keu3o2AOpwKX5VHzdTS4Xd7D2pj9BgXOMcU7auCvIx7Uv8XC5FGWz8uG46GlYBixtjHJGOtIy/LhT06e9P8v5vmPU9qXP1Oe9OwJDF/i29/akXqPlwfr3p+3njONvFLtXb8vUZx9aCbEeM+5HYik2jGO/P4/Sn7ctncAT1/CnKFLEkkfhQO1yMKW7dOKNo+6ATg8DtUjL823rxmm7d2N3PegQ0quDt25pPmC8ZJqRlP3duRntSDjnavzfoaYWG7em3BB/E0m3jDHHpxUpVV4XnFMbP3dxz/M0IbVhvzfc4AoxycbefX19qfsO3dwR3oxkNtz6UCvYZt67V7ZpV3AnGRn8c09U6cjrTF3feIyc89qNxvuGz5iduVpNo78YGKft788UgTax6Ae1ACKF9yMdKnkUXPlLbxqxjt13hM5X53xn8x09RUW3LDtj+VZHjrxHqHhbw/Y6lp+mC7eXev2cBtyIrSFpflyWVerHtn2ryM2x9PLoRrVOl/wAjswlCVeThHrb8y59oYy3HnQrbCG4NsN0wYs6rlunbIbjtjB5qaPy3VWVlIbBDDvnvXDfDhdUurK8sdYt5VsrXZLCzucyu7bi7AgNk4XGV+6fc13MMMKxj7KQEGNoXoPoOg+grk4ezLEZnhfrFe1ntbf5m2ZYWnhqvJTvceecsppjLzuwSe/8An1qTaeflBGfX+lJ2yyhT6Zr6JHmtMTYcjDdM4+tAG5g2T/TNPXjBHOaNpwdvbpz1oGhjDdj5ScUmeNo59adtbuvIPHp+dGBwNpb3AweKAbGMFYnaOD6Uv/AefTvT9vQjjvxSNHtHy8ZP50IVxrRnbyvI/Sk2rz0NSbc8t0HNHy8hOo5Wgqw1PlBPA7f/AF6XHy57+tCqfu857getL8397gD86LXBNDfl44AH3cdCKYUZsdR7djUvlhj82eR0pu1ujZzjufwpj6DdrYPQYoA3HsPp3/pTycsFHUetAX+Jc5HA9/eiwr9hmD6Z5xR67l+b3p+1twOOtIIzuxu24/UUBew3a397OOo9KRtzYK469hzinqCvytnHfBpQu1vm6H2osMYy/wCyPZsdaQqvy7SdvQf404J83sP0p23Hy7Rx0zRYdhqr39eKRVY+2Pyp+3GGyfqD1o2oCSWOc8UhjNqk/Nnn9fp6Uo5yeADS/wATbfxpyqR823JPNA0yLb8yjdwBxSqnIA6DipB8uDwO+Ov+etN2/MGxweOKExMZ/shc4o2rxt4HU1KcFflVSR0A/lSf7x5Pt/hSGRjPGNvBPXkU4Bs+oFO2/wB5chuf/r0oyv8ADj8aATIwvVemPalUBfTPfjtTtq43Ek4pOGUN8wz+tIa0EP8ACDj7vOaAo6Yx3NOXtk8e4/pShSW9SPTtQUhp+Un5d2Kb838PXPP9KfsZuCQT7jrSrt5U5z16de1IGxq7lPy7RnI5oXg/MuPbFSbVLcgjjGKXAyN2M9/akOwzaFZSp4GDjuPrT0VmbbwQ6kfnV3Q9Fu9e1ay0PTVWS71CdLe3V3CKZGOBknhRnuTXe6P8Afihqg0u4bw+IbbVl82K4kniASPcUZmTd5mVIyVCk8j1rjxOOw2F0rzUfVnVQw1bEfw4tjvjsrXWueGPEe3C674R0i8Ld96QmF/1irzMQhW7Z9a+4NA/Zs0bXrHwmPHGo299baBobWNrbxu0bXkkjSSjzACcCMlsKrEnaS2BxXnfhD4T/DDXPDMNu2lyS6jYWOvC8Mk4WVrpIbeSCTCHJjQMwXcMbic5r5DA8U4PDUFQtJ8t1oul3bd9rHu4nJq2Iqe0ule35K58xBSVzkE/zFHl9euPTGM/Su0s/h9c3nw/1/4gNfKg0KazjFoY/nuI5pGjMoPZVZSOAckEZGK48ruK7en86+sweYUMdzewlfl38jxMRhKuFt7RWvsINw+8uPYV7Z+ydHrn/C4D/ZcjrFHql9bXG6RASjQq+xQwzxsDnk8BgByTXi65GewPf0r039nHVtU0/wCN2ijSrZnGpa9JIyvdLECGtZFP8LZUKST0JIAHrXxPHWHrVPq9SEW4xcrvtdK1z6zhqvSpYPE05StKXJZd7N3sfZf7RjCT4dxsh/5iUA/RwRXzHH/qxjp3r6n/AGhIlf4aXLEcxXVsy/XzAP618tQn9yvTkda/Lcb8aPr8v1ov1Gd8/lio3Yn+EVMRjPIz2NRMoz16etch3WIWDd6jO7GefrU7c84pjZwPakykeD7eFB4wcHvmpOBu+Xg+1Ku7Zz8w7Z9adt/hyOo+Wv6iPwO/UZ8oUlRgFfvdhShVbJJPTqBineWpPXGD+VBAwc4556fjTC7GjbgMT8vpRhRnpg/5xTsdxj8uuaXPy7gOo6e1IehGio3y7QpFCqgVjtJGfz/Knxq2VxyPf+VL82MdfXj/AD0p2CKVtSLrjcp/+tQ3zFdvzH+lSSLnG1iQPXn1pDnbu2ggjJNMTRHtUYb5tucH3pv3W4UjOc4/WpOqlsZOc0bV2/K3B6+9AmMK4O48jnH1pp24BXk9/wCtS+XjLYHTIPajHzD/AGs59KYNEYQllVScDn0pRGWxjGeo5608Db2LZpOV9hmgdrDMHcCVGRjtQwVlGcd+npTv4u4J9O2aPL/hABH8qEhCBcEdh0Ixgk07aw/E96Qsy/y6flUm3g/NwaQ12I+F44I6/SkHyttGODTlUNxnC+vqPWl2qv8ACcdKoQ1lxj5eDzxS/M2c8YA696cVDfKqkHIpNvG5hj2pWFuMXqW7A/p/WnY/dhlH3etKqdMZ6Z+tOwGUep/IUMERrtweuT2ajyyoDdv8/nT1XoW5y3Sl7eqdT70DWg3aduOcFcCmbduG2g/5/SpO3IIPv2pTHuUrwDTSsJ6kag8bcjJ6e9G7pt6DpxTgNuG5Az16U9cL0UZPbFNivciXjgc9+e9LtY7lA5PenkL127cjtSHpndglu3WluUNOOFkB/Dv+dC4UseoPWnMqjao6e9LjBC7W5FFibtMYpft07n/6xoy20/KeP880/acMOFHPH4Um0sB8p49+tAXGLHj5vl455o9uCM9qfw3C9VzmjbxhQBj1NMFqhuzCr/ERzSfxH1PUfrTmjZmPzZ6delKFXd1J4HzYoAaFbcVz1/Wl9zwfanbRuPUkGhl6jPP9KA2ItvB3Lyev1p2Om7jnjHqacqkYLL1/GnfKx+77UmyURlT8sfGfcUberdu4p/Ct8x+XdSP1+VRwT0oHYY4PHb/ChR8o3YPTFPxt7e/PrSYyemSozRuLqI0fzBsc/wA6TucMPmweOlP29D19qVl7fhjuKAepGWzxwe2KVtzc7gAe3tTivy428j19aFQ9Fxznj0pibsRlTtOM5Pc0pX5dy5yP60//AIEeKXbuY9M/4UDWozblST2HXHakH3f3ijNSdQcHJ7e9JyD82FI6+/vQPYasY+Xg89AfemuvZecVLtXdtXJxzQ27hW9aSE9iLod2OBwfWl27WHy47YPb3qT5c56g801l43KoIx09KYr6DMZU87jj0pdo4OBgHPXrSkNzt4z+lG1d3OeePSm1YLjCnynjgdvSlyG+UcD6UrAfdpyr3XPPpRYQz1K4pNp+6F9RUihmzt6k0n+9+H4UimIFJ5IBJpm3p0NSsvzYJ4JoK4Xds56cdKBb7DPl3jng+tYetX9vrVvJ4btdGmEttaGK8B6t5k7l9jg4UkZJUY4GfWuhvrDUrfS21CztYnlO0Ik7eWpJPJJxkADLHA6CuD1bxZps11c2LWrWJtts9rLFCHE53ZdnCruI2v8AMWwArDJyK/OOLeIMDCtSwsa3vRbcuXWytbX17H0GVYGs1Kcob7epb0VNW8NzRQ61IyW93b7la42+YZEdlkkMhwfLGEVQfbrmujtpIZl8zymhkZssjrscH39e3TNedaOz3Go2q634utNatNLdFt4Y58eT/wAtWCsSMI4feV+bjOccCuih8fW03i6fwhe6bLHsSN4bhWEiHcBkNjkc/wD18Vrwjm+FjQeH5rRT92/nfS/R6dS83ws5T9pFa21+R1hVsnJPPr/jSMfmH3scdemaF+6Gjzgnavp+lPyP4l69x6etffQqU5ScYtNroeA00rtEfG07c4FH3W+Ybtw7HpTtqhm3d+CDxTuvzDndzuNaEXZFxgc/Sn428ZwB39KdtH8SnmkVQfujpx1oGxuCvcjvQNpXd2BqRhj7uB7jvTSOd3Qds0wG7QPmGVzQ205APQU9lDfMoHp1o2seNuD/AEouJjMce54H+e9G1u65B7inbTgZyPWhecMpPPIoQ9yNuobaOT+VKOWII7U/ad5xxgenekKk/wAWeeeaYDNrFg3J/rSsP4enT8KftXja2ckD6UFedsfDcUwQ3y+M8Aj8KNu5SecDmnBfl+YfjQqjB/xpWsVcQqCuT19+wpAv3Wbr/Kn43dc4XmlXDfMTyaCrpjMDlcbQeuOc0jBiAtOVT/HkZNL91vw4JpWFe5Ht5HTkcD1pNmGHT5eBUpVlx04yPagbABtcZ6/N2oTHvuRqMLtKgDn60Bcry3fr61Ix/iOMn8cUmxuSAM53AetADGXg/LkfzHGaF+ZhuBwv609u67vunkY70irkHOSepB9KLDbGKqt2G4/dGeD9aXkAngZP8qfxwo4xz9PpRjn7ufmPXpSDYadvDDjHApFVsbR6/pUm0dsEH3oCbfQnH5CgdxuP4sDpzjr9aNu3cVUf56inY4B3DP0o2fKpJ6UrDG7Oi8HHWkCnIPQkfp61KRj+E85z/Sm7WyVZutCG9CPbgjp69elG1ht+YZ6H6VIRtwcfMTijazA7WGc0CGFRtCncCT0qTuDjGO3rS/eZe+7vUij5hnPHA46VJaPavh18D9a02f4dfEbWpUl0LxDrEY8u0Yme2Ch5I5H4I2nyiSADgAg9eMXXdH+It/r2nX2myG6e71bWxoZtR5TxxxXJMu7djy8HLfMeA2OwFe2eB9Xa7/ZT0fVvOYN4R8Q25kx3hW+VZEP+yYLh1PsTWbe2+sXXxYPhXR7nSrC8s/GWsW+n3d7atdCB7u3jugxh3KGHyEKc8M1fluJx+JqZhOpXs/Z86Se1tenzR9pQw1GOFUad1zcrPYvg/dX2t/Dnwrrbai+oxtc+YZJAAyyieeNzkY42uox22n1rxvwl4usm8YN8O5NPiivtO1O+VbxUXfcQXNldq0THqAskaEDocf7Neqfs6tqV58P7y61iJYdV0vXLnTJvLgjh3LDcISzRxgJuYZOcdG9K808J2NtZfG74iW9xaoZYrvS7yOVtpKquozwMq8ZHy3A3YPPFfK6Kcro9i91oclPY6frHwOW809mZ7PwdqtjMrH7txb6pa3DYzz0mBHbB6Dv4RqGiixtre8XU9PuBcdEt5i0kZxk71IBX9RXtnwwl+2aX4n8L/YNoTQ/EjedvP712itmCbemV8oHPX5sV4JE3mwx/N95QR+Vff8KwlTxFampW2fre583ncozpQk/NfkLwvPHrn1rqPh3rieGvGuga9I6BNP1mzuG3PgKPMCsfm+X7rnk9BnrXNfKrcgZBxgVPHdPZRtdxxtugxIuxtjFlORhv4ckDkdK+qzOj7fCVKfdM8PCT9nWjLsz9HfjlNFcfCrUJlYESNbMhU5BzMhGD6Y718rxrtjr6n+KUkl98F7y6uoRHNJaWkzIsvmhXMkZxv/i5/i79a+WoxmE49TxX8947SSP1nLnek/UjYE4BHWmMvHGRUpXbgnrTSuPrXFc70iBlbvzzTGCjPGBU5XnPtimFR97g4HSkUjwfafuhup9PX+VO+98nHYn2pdvO/B39Rz07U5fl3Mp4Y8cda/qM/BHqJgtkqoHP3qT5UO3g/wAqUruj3bguPal+Vct2/h9R7+9NaBcT0bd8pHFN2s2C2cckCpGXPDdQe5pWVuGOAFPYUr2Bke0jJPRuopvrwfTjvUpz905BPQ9KbtVVDbepOe+femgbtsNCjJAUsOvPajbnDcdOvqfenbcDud3Iz705o1YnIHfknr/n0ouC8iI7dvzHIJ49qRuvzc4zjHHFPxuHPGRxxS+qjK7enGaoTI9rKp2Y4XvTfL6ZytSuqr+8bPH60cZKsMYH50AMUfe+YjGP84ppVVONpPTr2zUuArL1XK9c9TTdoZWZvvZxge1HUBoXau4LnH5E0Lt5y2PwpWi+UelG0sfuZxwPY0AIN0h3YyR070q7Q2MD+lKcDP8Atd/U05dx28Ak89aBIjj/ALobA5/Clx/tdR/k0vlruC/z/lilYKWDb8/QdPemwGbQMbeqjBP+FKFX7zKAe3oadjjA6nkUrBeByuBwfpQAzaFJCkEZ69s0u3nGBxz9TT2XdnGApPb+dGw89uOtIBrR/vNyrnnpSbfL69uvpT2+8MDg8cj+VC/eCvgj6Uw0uMG3I6+/elVBkMTjqakVevPPagr8jLyeaLgRou4MfT9aaq4y20jn6VJ90bcYx+tOHCj5uT2NBNiPqo3KG7ewpNjK3r29hUiLtyr5x1occnDZBH1p3L0GY+YN5g54A2+lNZfmPzZPfFSkAkBs8YGfSlYbee+c0iNyI/Lw3HYH/wCtSKr7w23Oe3pT25kG0Aml27cYU/j60B1EOG+7wSOvv6U0kfxKMdcj6+lO25YfN1+XBoIODjvwef8AP+RQFxu3LcdSaMHvgge1Oxj3x1pcq2Mrz9KYCccLu6c5oUdcDnrzS/LxlcfpxQ0eeF7gdKQPURh0+XHrj1oVWx/CFFThNynpxmt7w38P/G3jL5vCvhTVdSQdXt7ZmQf8DxtH51jVrU6MeapJJd27GlOhUqytTTb8jmgueFXg/pSMgHLcD+H3r3HRP2Q/jPqiLJdaTp+lo/IN3fKGH/AY9x/OuqT9h3xXEqyal460WH2itZZOfx215NbiXK6Hx1l8rv8AJHfDJcbP4af5I+YvLZlHYkfzpTtB9BX0jefscapZwmb/AITyycjjAsXGfp81cD4m+AuseHVeRvEOn3AH3V8uRWOPwOKyp8V5RUdlWX3NfoVPIsfHX2f4r/M8s25yGGB2AoHA4yc8jnpWvdeF9Ssmk3eW/lcny5R+gOCazZYJY2dZIyhI/iGOv1r2MPjcPilehNS9GedWw1bD6VYtepCq4AH8Q/H86XYB82Dn27U/aQuNvPHP+fxpSucs2euK6bmLViH5f4uMdqdtULlu1OYMW6AHr1oXIwenTJpiVxoX+6mc+tH3s7cnPXin7eD3J4XtQqqFoC1yNfu8Ec0fw4Xp0wR/WpAGz/q+nA/LNLt6nkgc/Si9gsRCPb8zHrg9KcRntx/WpLue103Rr7UpkkmntUVkiGAhLOFG9jyB16DJ4xXCR/GHR5bvTobjR2gs9Tt82lwzhN8oUPnLHABUnAyTxyB0HyWO40yvAYuWDrSfNHd20X9eR6lHKMTVpqpFKz2O2K9WOcHpxSMNvHBrC0H4leD7yH7ZJ/pkYwrx2d5FNtJUk7tjFlPXCkdRg962bvxR4P0OG01bWtSTS7WaA3kP2p03TAHKjywS+CpBORjGetcUvEXIo1PZe0bffldvTa/4GiyTGON7L7x+M4//AF5oGVJKgE+v6Zo0W/tfEDbrCGQxyxmSC4UgwzDdwRnBXIweQCeeKleJlYxs24g9VPH519Bk/EGX57Tc8FU5rbrqvVHJi8BXwb/er0fRke09+3TNJt6gevrT2DbtpxjgE56GjaoXPGDXtHG9SMqCT3xxxV/RbPUtS1C203SbV7i6upVhjhjXe8jFsAAeuTVTbuB4P3qvaIrNqUQjmWI7JfmK5AJjfHbPXHTkcYrz81rSw2BrVoRu4xbSfWyOjAwjUxMIVHZNq7R5x4yvtT8QeIHbR7zU4bWy+2aeyBtsk1/BkNhQD5i/vCWBO0FVB65rgvHnxT/4QGO78Mw6Xqkd3exm8u2nmjKtDMoYBNgMZR2Ub1UdsZGKueLPE2sWF147h8O3Hk6lpcNnYfvNytC8r4uQkeSJCWRCWOAM8nivMrbwla+LPPk8RXEsd1ptp5cstuzFmhgWRnnYODuYv5SLghAvFfyzhcPDE1HWxGi3stHd6/dqfpMKns3u0YUfxGvNRj1LVJr77JfCSB4bW3tRGksSqQwYpwo6dQc/pVy3+M+qCW8u9Q0+0u2u2gDQzxs0YSN9yKCDhF6+vtgcVzuveEtQ8K6bbarJbJPYanbSC2vImLLIpcqMnGAcLkD3rm7W7kgha33sYrh0Lx9Q2DwSOnGTivpKcac6bVP4f8ip0uV3a1PrvSvjNoPiPT3vLu+8u0MfmTWUTBZlVFBO0kDPzbsYP3cZByK6vwx400fxJqL6Laz+XdQny0jnIDTng7kbgYwRjjPrXxXrms2MmpI2gG4S1QReX9rYBxKB8zPgkc47cYxXf+CtQ8FzSRw+KdWudPvUkEsOrWMsiZJJLq/VcdBnZjgV2ZLj8VkeI+sUZNpr4Xs/J+hy43B0cdT9nKNpdz662rgbgeM/eGaaE6rwPp0rz/Q/ETWWkww6F40sdetmbyxHcyokkakY3JMm4EgAn5woyB2NdrpOr6drGpHTYZdsqwiVWlZR5g6NjbnleCe3zLjrX6ll3HGX4lKOLfspeb937/8AOx8nishxVGX7tcy8i5tb645601h/eXbn1/8ArVMttKVEkaM4fLK4GQceh9KbtO44wSemB0NfY06tOquaEk15HiyhKLtJWY0R5Tdng9KMMV9fpSiNWPHHr2p20jrhscc9asSGCNT8q5BxjrSMvU87eMetSAZ7EYpGxtAUfNkde1APUaG5yy/n0pQw7DkL29KcA27jDevakbbjb0JphsMUbWOFxgU47f4ucn8a3vBum6HqF9qUXiCW6S3tdGvb5Dbbd/nRxlouvBUsOQe2aw2+XO5QCeOOlYU8TTq1JU47xtf53/yNZ0Z0qanPr/X6jCqtndyKNuFBOS2ce9PGNo+U5/z2peuVwMdvf2roMkMC4b7o2nHIFJ93O5Qc/wAqft+bnADcUf7TZA/p2oC40r8uGGAePxpsar2XoO38qk2sAdqgZoWMbhtHAFArjFTqC3PUUdee/wDnvT8bsBcmjDBTtBHNBQ3bz6fXvSFegb7oOacFOMMBkDJzzxSxq2O5+ppWDcbtwe55+mKXpjC45py5XIpf4vTPekNEe7vwQf0o6qML+venqu3nb25/GgKDluvNA02hFB4bb2/OmNjbtZTgc4zUvUjOS36/Sm/MzAjJI7kUDY3bnCKvHIpSrBfmUcdPzp4Q42t+Pv8ASkzwRnI7YoGyM9t3/wCunfeHBDDvTlxEB83P8WOT7UrR5+YDoMc9/akBHhmUbsbemc05QsfzMR6Gn4+YgHJ9Pf3pqx7vXr3pbjQ0jOCzEe5/p70mG6suFHK57U9lP3uAQ2cUrKSeOAtNjBlG392vXgf57UsbZkVsYH50bWJywOOvPalC8D5dxzU9Bp31Ppr9nuRvEHwC+KvhDdmSG1lvIV77mtmwf++oBRrmsWUPxoTxc2F+0an4S1pWz/yxuYlil/MsvPtVH9i3UYT451/w3eyAw6zoz/L6+W4yP++ZGrgPiF4nu7yz8IaTZWbsB4ZaxupfNSWRZbK88iPcVOU5gyBk8ODwa/L80UcNm1WnPRTt/wCTWu/wPssFzVcFGUd43/A+sPhGy+DPCfiWP+xLrbb3U11JFblZZZWEkqNKfmwXZIUcjr8w45rwnwv8RNa8Wax4++M3g3wjdSaVPpF7Mlte3AhSSa0mtrrY7KHxJsk+QcZ3vycGt39nzULrwb4a8bf8Lch1DRtLvreOPS7rVEe389ZvNZo7d32lyzylzg9WJJA5Hlvwv8f658O9H1bw5ffZ9RtNfsbnTYdM09FkuZJpg6rIrD90FVWXcx3ZCDoOa+WdPk523dpr5ryPZUr203K/wJ+JmlnWZNW8ZW//AAjsGr6bqk10Z2Jt7Dz7NsRySkAFtyBQAOTXlmlyRXthbXEMqyRyxgq8bBlb3B6GvafEHwhvNN0H4d+CPD/h25uI/GCn7VqV9NFIGnQdRtwUTZlsEsGHQAg55Px58LH+Fn9l6NeXAL3dk15GkcIVF/fSIVBDMCMruBBwQwr7jh/FYf645RbTmrJb7enoz57NMPUdC2lou7fqcaflKsMcDp79qfHGtxmBwcOCpJwBgjnqcUm3b8pG7joakh+WQdcMvpX3cleJ81F6o+/b3WZfEv7MNrrVx5bS3mh2kjGJuN2YxkdMHjOOxr54tohGpUZHzHrXq/wy1P8Atb9kSW3XA/sxJ7Ic5+WO43KP++WAry+JRtb3Y1/POd0ZUMTKk+ja/E/W8mn7TDKS62/Ij2/mOajbnOcDFTsrdDzUZU9PXivHsepcg2jGB3ppjLHvVjbtPT8aRl2/eGeetIpHgW1Tjcp57ijBOE3ZLc5PHTvT1Xgc/MeRu5wfalXtu+Yr+nev6jPwMb5Z5bp9egpPlCbV7fKcD9TT8Z3dect7mjbuY7emd30NMfoJIo6Nz07d6TduzuLYNOI/h5J3Z4/+vSnIP3T/AJ+tJDbsN6nHXJ9P1pNjDPzZBPy8U/sODx+lNx1++Mjrj+dMbDcy7s8D2NJt25BXGfWnsGZgVUYHUGmru57lR3oDZ2G7TjsP603YfvbuPSpcfeBXJbjJ70iqoUAd+opiaGY6fLnP5YpDgIF5yAeOn41Lhd3yqOTz2BpNrfUr7dKLi1I2UM20qeeccfnSNjnac4+9x3/pUnUANzyTn+f1pvDZ5PPt1pivcYqtgNhiSQMjrSru42qQPvfjTwu1QTyo7+lDNtH0/wA9aAvyjNhDbjyBRg7y3OfvZxUjcr93OTu+lCrhR5mcnggdqYWTGL1Kjk/nRj5cLknAzUjKG+Xt3pisvXnNLcT7CHaAW3c9elKw2r2yPx604ndlfwJPQ07GGKjnHNFw2I9pCYbJ/wDr0rAZwqnPoaftzhgxOO3pStuLgbmyOuKEPoMUbsdOBnFIyj+HscHmn7SqjawIz0NDL8pbcc9vX/61AnsMO77u7Hv6U4fd28569Kk2jHyjOOoPam/xZXkDrT3BaDGjCKOqr35oGGy3OP508r0LZb+lKylcpnkdKBMj29l4yO4/pRhlUKG5xk49fxpzcttw3Qcg/pSlW9MY6gUweowpgnOOeTSMnzDbgjPSpVXcvLcjoVH+e9N4wG4z2+tK4hm3nHHvSndwpyOM896k2qfu8D+tJt+YHr35/lQUiPaVwGbjH480jLk8LwOvHX0qVY2KksQSvP1o2O3zbsdjz0ouJ6ojZQcbhx2ZaXbjPQKOAadtHy8dDTlUbThSc8jJ/wA5oZNrjFUcrn8vWtTw54c1jxXrVn4d8PadLe396+yCGHGWPckngKByWOAAOa0fA/gHxF8RNeh8O+FdPa8u5RvkJO2K3jzgySP0VQfxPQAnivuH4d/DPwH+zt4XfVL+4W61e5QR3eoNH++uG6iCBeqpkcL3xljxx83n3ENDJ6bitaj2Xbzfl+Z7WV5TUx0lKWkPz8kc78Iv2S/Cfg+3i1bx5HB4g1hgGMDrmztj6Kp/1hH95+PRRXpGufFb4c+DY/7PbVIHe3GwWenx+ZsHphflX6EivFPiB8TvEXiyaS3a+fTtOOQllA+Ny/8ATRhy59vuj0PWvnz4m+JfEXhyexj0pbWWGcO7IwKthcZC447/AKV+KZhnuIzCs5SfM/Pb5I/RcLltPDwUUrLsj601L9qDT4yy6X4TuJR/C1xdKn5qob+dcvqH7T3iSbiLw3pMYH9+SR8fyFfJcHxis12LqCSQ7v4jG2PoTjite2+IWkX52295HITx8rZrx6mJxEtJHfHD0l0Pe7/9obxXdKVk0rSlU/3VkH/s1cTr3xD1DWGLXFjbAn+6zcfnXnj+I7duPNx7GoH16Bmysw596zWIqxejNfq9N9DX1WaO+fzY7cq3fDDn9Ky/3a7kmyvH8S8H+lQ/2tFJ0kHHvTvtsch+91rso5vXou//AADGeBpzGTaTaXKlvIRfl42fKPyHFZk+hyI48tj/ALOf8R/hWr5iFTtYg/7JxSi4nXO2RXH+0OfwIr6bAcb4zDae0dvP3l/meLi+GsPW15F8tDAn0u9jTc9uWXuQM1VwPu7vXtXWNdo6BZo29Pl5qqtnZyMWM29emxj+NfZYHj6nU0rwT/wv9H/mfO4rhOUNaUreq/VHPbQSed3bnvSorBgdzY9K120uNjtijaNs8AHIP51d8P8AgfxD4q1aDQ/Demy6hf3B/dwxLzgHlmJ+VVHdiQBX1OF4ly3ErSpyv+9p/wAA8SrkuMov4L+mpzscLOQqxk9yBzgV738F/wBlPxF498nX/GX2jQ/Dz4kjj27by9XqCgP+qTGPmYZOeB/FXtnwT/ZZ0PwL5PiPxs0Gs6/jdHDtza2Z44UH/WP/ALbDA7AdT7Vr2v6R4a06XVtavo7W2i6s3Vj2VQOWJ9BzXymd8YyfNRwDsusv8v8AM9zLcgjC1TE6vt/mfn5+3JpuiDQ9P8M/CvQING/4RXUhocy3kPkRzTzI0oOJFxPGUV2MrMwypIGeT8ceBdC1qDS7S6udMUIUubeH7fb+bIIVjKrKI2BRGO7ajAEnYpx1r7E/bA+LVh471qDRtQ0/7N4dmubZo42gLS3Eq7lHmOhDIGGVCoT94g5yBXyd8SvFWg+DdP1YSTMZ7a4t7ePT7NjCkG6ImND3KoFdcIQAcZJPFfjWOxcsTWcab5pN7nv1oWlyrSxZtdDTTVg8Yah4/t0sbeFoI55rdGnZkG2XygSMBQWUOcncScDisHxh4g8I65o+oWUcgu0gtWvJIndUeaaEARW8zKFZHUOeQwDEAfMRzn/8JFd+NPAOv6xqVhIQ9q/kLFEqwWjc7vL3HLlVJLHkkk7ckV4Na+JJLXQ7/Rws6jU2VpjHKy+YFIKh16OoIBGRweanBZfKtOTqS1i/I0UoS+yeoa58YfEUy2Wl+F7q7GnSWaTXVrMil1hUAbC4ULINgX5gM4HOec+ifCv41Q6jpMI126edbeZ7doxMpaG3C5Eh4ycbQMdwT6V4F4V8aeJPBpt5rGddiK0iw5V8o6mM7VOcNtYgcZxmsG61qee++06TGsGUMQ2KAzgk53kY3Zyc5r3MGq2AqOWFfI97rd+pzV6MMRH2clofeOi+LvBviW3W+0LxFHc26qnnHyyGhZgCVPrgkAEcHIqzpOraHr4l/snVI5zDI0TK2UYsvJADdfwzXxz4W8e2PhyztbjTLDTk1VIWt5mmSQvJI3BYpkocADB4OSeOK1dX8cXHijxFDb65lFnt91i1nJJJNb3I6qCxBRndV3ZJHBx14+lpcbZ5RqqM3GUV3jq/uaPGqZFhW3a59d/NuHv1rc8N+GfFniq6utN8J6TeX95b20twI7WIvtwpxuI4UE8ZJHWvmrwx+0YunqlpqUja1a2yiTUbh1WG5TDneIAXw4xtwGyRluuBX3H+yF+0J8K/CUev6jqGtf6FqlrYzB1GJ4x5jqF8gnzX/wBYGJQNhQTX1GP4ywOY5XVpyXLOS5bS89HZ+S16HDhMlq0cVDnfu73R8m+LPhjqHhhNX8fePtU8jS/EmmS2+iwrdKkss0dx5LSeWR5kcQbCb5RhsNjIxS65Z2el+H3sbqxuru4EUd5qF0/7tAm1HNpHI5yNyKcdh82Rztq9+01a2ur+MfFfh34S+Gr+ew8VXv2i6vrmBLhVtWnA8zc/zRlgXdSR8iu+Bk8eV/HD4hfYbq0sv7NtZbyznWEWczMYjAtuAVkZSN2SeUJ/u4C4wfxfD0+eo1Tem3fRdfmfUVk1O6POvF1zHY+B7TQ7S7SZpWlupGimZ44A0xZrYDJ2bcxtzkkkjsTXnduNwklVmVY1+77j37Cus8VzaLNoIvrO+FtqFtfyxx6ekQIaFwHaUsPlABO0KM9OuK49Y7iWPdb5VD1Xsa+gw8UoP1NI3tqy1apDeTW7Mq28TyfPI2TgDkgetM3eeFZVZSASGzjAzwPTIzVz7Hp8OjhWdxeCYAjsIyCcqAOeeDk9ximWd1DFBIskfmRhMY9M8H/PtWy1GmGn3L6XdxSTSMFfa7gMV3D69fy9a6TTvHt9o940mlx8CbeIZpmZfT5cEHOMZOecVS/sG3k0+S+GqW0iRMP9HLfvgBgZK49D68j6U+bRFvrqXUvD+g30uliRY/lXd5bFcsCemcBiAT0HtWVWnTetQpTcHoe1+CvjxqniGOHw3cWM1iLbZJH9lbckoGAYjuGI125JY5IwcZJrWg+MutTTBLHxHp97fi8lgns5bX92IwAQ8Um4bh8pGDyOea4e41D4Y+EdNht/DL2H2i1EEct9dWzTTSean78koygqA2VAOVxjpmuE8d614Y1vVpdX8NxyWpt/laN2IWYIAElQZwp/2RnPX2rgwteq67qUeaOlk9tthTUa6bqK59ceG/ib4O1uxt5LjUJIZnkWFi8fLnaMkAdAGJ6iupb7PIz/AGe9gkVO+8DIJ4OD2OP0r4ts/ife2NvbXVvapZTh9xdZCVdSMMvlkbCCcNkjI5Gea9V0v4ha54sZ5bnwes1s1vHcRy6fcC0uvLB4ZRgKw3F8D3NfYYHjPN8F7tS1Rf3t/vPMqZFg8VFKPuSPfvvKrLhlPzAqeDTQqN7Z79K848B/ELwfaudHv/EV1pkXns1xHq9qUlRzgKokGV25GCc5I969esU03XI1bRLy0u9qkRgTr90BjvIyD0HQA9RX3WV8bYHFRUcU/Zz632+TPBxXDeMoSbprmj5GTt5Uck/nUot5AuWTYOxJx+hq3JZ30ezfbyQK5wu4Fcnv0+v61T2srFNxJA5J7/jX1dHF0MTpRmpddGn+R4k6FWiuapFr1R1vgBvsvia0uINMtdUEmk6vamwa13LcObSRlDEfNJnIwoHbrk8cdt6sqk5r0X4Tx6jLrGkf2RcNBqKawLa1kDbfLkntZkRs9vnxz2rgZoZLeWSCRlEsLFJCrhwWHBwQSDyOo615GWSSx+Ip9rfm3+p6mYRcsJQqN7r/AIH6EDKvmdh+P9aVfvALj0INP28hsBjz3+lG1en3WPOfWvoTxfQjVdow2cHr9aXavOGJz70/HT+LPb1obbtAwpouMbt/Ht9PrQA3XPH0xTlX/lp0B685zS4YSE9McGm2FhnQjLE470AlsZbA69Keoyf/AK1Cxnnr1/OgERiNlySeuMD3okUBSAx56e3tUiqD1X/9VC7R+H6UmAzGR8zdRz7UbM4Vg3HT3qTaoYncMD9aUKvOMfLwp9aL2GiI4I3jnjmlAHDNTwufce4x+dL8jff+UHGKRW41VXcdrDaBj1NN2gLu25J4Jp/ljaWGM560LnIY5+b0osCGlcZ3Aknmkx8o3DO38vr9al+UN6hTSbe3OTk4/wA/WkU9BgHy5XaAf5UYbBJ788dqVQR8vfbjr75zTxxknJXB4osC11ItgHHbb2oG4KCM8jhvr1p43Mu4sOR+lKV/u84P60BbUYqq3zZGBx+NBU591PbvUh6luSQegoCddr4z1pFDFaM8sueO/agMTxt4J3A09NpUdgfWgrhjtkJ9f8+tGg79RyzXMcN3Db3U0Ru7WW1kMMhjJSRCpGRyOufwFU9e8W29vpHh9NC0qaGbRdBisdQkluBBGLmFpAXG0MSXQREkgBm5yaubVB28gsv3vSqOtaXHqGn3MMUa/aJYXijZh97cpBQ+qkHBB45rzcVl1HEVFXa95f1r952YfGVKUHTv7rHfsz6HJ8VvF82m+J9N1Ke9XQ7vUvtt1dSSWmnw5VkDRjczxqCwKKFLMcHHJqtq3w4/s/x4NBt2m1/xPNeQWkUltM0wmiWTauznYEOPlzzyABXU/sf3Gl3HxN8J6T4gheeO6BspY5JXRlLBh5bkYLYkEQ6kHaOor0P4qaLqXg/47azH4bs5nfTdTg1C3ESMyxkhZUyTwBnjJPOK+By3CQhmFWnK1nFtX6O/fpqfUYvETeGjKN7prbsfTngv4Wv408D/AA1uvFF/eWL+FJheXWnR2yRG5uIVaKOOViu8KhBLAHDkc8V8v/Hrx03jq+037VGftnhya/0maTaAHVbg+WcDjhRitKT49fGjwTqTX9xqHn6Z4juroGFoFUWF5EVd0XYxVkZZoyHXqxIIBHPlWsalcapqF7fTbU+2XT3bKvTc7En9WP51HDeExFbMFiLe7Fv080vvDNa9OnhXSb1djNyu47W56VJHjgZwOg96FX5mIJPpTsHncuPr2r9OZ8dFn0/+z7qz3H7Pfj7RuG+xXXnL7LLHHz+aMa5yMffyDksaX9ma6aTw/wDErRmyUm0FLrH+0hkGf/HqI/utx1YmvwvjGl7LM6lurv8Aekz9R4anz4FeQhXn5aZjcT2561I3Lbh27elN/n9K+VPfuM2/pTdo5HHpUh7AdqRz1xRYaZ4AitlegPYmlC8/Kv60Y24X5flOeOetP27fu9vWv6iPwVCY6fN0PbrSY+Y7ckEU9k3KNvT1x7UhX6ce3SkGo3/aY8GkUruG3jA9c/5FSFdnJxgHjFLxtDZJwMUIdtSLlshcBR6UrDhRmnbVZfmAx2OOlAyeN3ftRYEN6tjb8o7e9Hy/3QM8evFO+7nBGRzwaT7oBVRz6d6LBcTazKSBzx+VJ8vt7YqTgN/EM/oKGGRjkCmg3I1UKPmYEil2hlAy2fXpS/NlfbueDQqdQvAPQ+n4d6LCUtbDGTCkBcnndu70Ku1FYjO45+tP2/wt8317GlxubbgD8+KY9ERsF4+UHHakKDO0KeBk/wCFSD68jr7mhY8DGemaAeo0bf4VJ9yePpTSu9ioHH16e9SKo+8/f+7xn/8AWKRtu3Ct82efpQiOggQpkbs5PX1oEZbGOR24709VXhvm5yDn+lG3bjOfl9e/0ouOww/e24Y+nFO2DdljxQACehOeF5pVHlj5RtX096A9RvQfeyR2IoZWLbiwHbgcml2qWO7qPy5pwXbjcwHf60bC3GeXtbdkN60MeMDJLckdOKkwM4YHHv8A40LHzzyPbtQN9hijqemW6HtTtp7Akfzp5Uflx7GjazfM3A/Q/SgaRH/s8EN0I7UKrYyrcKadwTlQNo6e9OAC8lSPoKYW1IV4k2gcAdMdPrS7uqIxxnP1qXbu3KvU/e44prL91R7UC2Qw9Noz7HpSCNhhv8iptuccjPSjsMryTQTa5Hjtzx05pRGxyflBHNOMZ4/hxwc0qr8xG449e1Iq2pGRz7jmgrj0HPrxUrbmbjP58UMvzcLyPakK1iNUbBUYIzxXZ/DD4U+Kfilry6L4btgscOHvL6ZT5Foh6FiOrHnag5PsMkdB8F/gT4i+LmoGS3Z9P0G1k23moumcHvHCDw8mOvZc89gfr2bUvA/wR8Ox+EfCOnwi4hTctsrZYuR/rrh+pZuvPJ7YHT4/iPiqllcZUaDvU69o/wCb8vv7H0WUZJLFtVKq938/+AJ4d8PeAv2efB66ZpsXm3Vx88shC/adRnA+8x/hUZ4/hUdOTz5F4v8AE2seKdQfU9QugZSCsaLny7dP7qA9Pc9TjnsByXxT+KV1pcL+INYhu72W5nSJ5IwDtznCgE/KoweBXE2Pxs8L36hW1LyGP8M4Kfz4r8Qx2OrY6bnJt3/H1P0TD4aGHikjhfiB8Yr7wj4uvtGvZo5hBMECD5W2bVO7PQ9elUH+LPhHXmil1KMNIkbRq7LnywSCRkZAJKjn2rZ8aeBfhz46urjVZmVrq7kM0syybsnAHHIIGAOM15NrHwMttHZ5tB8QKibt+2Ys34A56exzXLHl6bnTa52d5deAtYRmhughHdHHB9wawJvCunyeZdabqjGUMGikUbCv44+n61xNn4H8R2OrQi4sZ54ZZApdOV2kjPNe6aP4XEdmgnXAVQMVtGMnotSZtQPOdJ0jVpNbNvNdTyxTJuwzZw2fXt3rv7PwxHGu5lOe9dLY6Hb24ysQBPt0rQW0VVPTNb/VebUxeJtscumhQr0U8e1Sf2PGvXj0rfkiAbHXFV5EU596r6kmSsVIxJNOaP8A1bE47VAy3EZ5Umtlmw23GR3qNtrLxziuepgWtjohi77mT5+3G5TThJHIuMjParzQxv6V1vwV+FOufETxVLawXGhyPpsQ1Aw38Ept513hRG4RgxHPPPOPesFhKnNZGzxMErs0PhL8C/F3xUuI7yzV9M0IN+91SUHY3PIhU/61uO3yjue1faHw++GnhP4aaT/ZfhnTwjSfNc3cuGnuW/vO+OfYDCjsBVjw1qv2XwnHdeIE07TDp3m210Lc7LWMwu0ZKZ+6h25APQECvKvH/wAdnvFl0vwbI9vb8rJfMu2Vx/0zB+4P9o8+gHWvXdSngaf7yV/67Hmy58VP3VZHf+PfirofgtWs4WW+1Qji3Rvli9DI38P06n9a+ZfiF8RrzWrptS8RanvZQRGmdscQPZF6Dp9T3JrG1XXFjLO0hZmJY5bJJ65JP8zXmPi+1TxlcLZzRtdRxsG8lWwu4fxM3U/KSMDHWvCxWOqYrTZdjspYaNP1Oc8VeING8bXc00O/OjSxbbhGUkbkLZxyPl3IVB6lgRXzZ4r8Vaf4hsdZ1zw/ommWiy2d4l/dX9wn2hW2tG4DMADLtUDamSCw6ZzX0p438Mw+FfA2o3X2G3jtmgxcFXMeAkYRBuAO0BBjd14A718trpth4u8M67FZ6Lf2Hhzw9pIuJJI4ImEl28iyECWUDanGCUO8hPukMccuCpS9u3NdV9x5GNhF1eZM4TSfGWreC/Ber6LpOraLdJqZheSJSXkt0dTtSNum7ltwH3SDnrXD6fDHc3cizRDfBG04iP8AEB94D8OcV6LofwX8WahpeoeIrO60mbSFgS1ku5c4imfayptHzRNkcF8AjjndisjxB8OvH+n3Y17Xri0uTIGkS6ivElSSNOTllPyDGeMdiMCvpYSownLlauznWiu9jPtl0OSzimS1j0e7gDSR3ULSzeZIFJAfk7TwMEAck59ue0yE319aaXD5ii7ukRVVdzGRm2pgAZP3sYFNuJrrc0iwqIXTYoRSq8+1RW95daU63FlKVkT/AFUgPMbeq+hHr+NbxhJJlJXOg8TeF5vB/iO+0u41SGe7s2CO0CHy3f8AjHPTb0PqQcU+yv8A7NqmnTaZcwXkkjBRAwFvtC4C5fOM9x3yvPWsK8tNUvrf+3LzeV8wRSXBYcuRuG4dckVLq39h3EltDo8N5FH5e2aa4wxeU/xKB0Bx6mkoNxUZu7G0nLyPUZtJtfCdjY+JvEnhzw55+owJCtjdpJMsC5XFwQp2lmBDFQ3GTuAyBWL4Z8aW+iQ3FtpTLC87MbqR3EbTQ7gAYHc/I+TkLjIOTkAYqhpOp/bvAt54V1jW9MR7dxd6fFdL+9cru3RpN0QHOQrHk9K4y3uGtbmG9hQGS2kEm1lDqpU5HB4I9jxXPSw/tFKNT9bW6BUppPmjse0+C/idda14ottOuv8ASTNDPHHG0hhNvEjCR/M2AB3ZISM/Xpmm6xIr32hN/Zum3f8AazW99Y2kiSRwyykFZJ84G8qXKEk4BQ/exXGXmoQWtvBB4Xu7K8vtRWSRittiezeYrgeccAvnP3eFziu2sfCel6TounatqWoal4i1SzD2txCsgNraq7sAqzchAJC5ZSNu/aPXOLo06F5R90ykcL4q0O30fWLNdUuIrvTbj/TbyCznHnxgsBJ8zKAGYZK8YFcgLhre3uNPgRHjnbAd/vpjpjnGcV2/xW8Xr428RSX8OnfYFht47NoIkxk56DAUtwQSSOSfTFcNDZ3TSTGG1kljtz+8PlnKY4+YdV9Oa7sO26S9puXH3epYjntRo11awSETiSOQKxYlux9hjP45q54TbSl1GO6vr5YXtZBL5EsJkjugCB5Qx0Zsn72FwDzmsRZPJm+0W7lXU8MPr39a1/Dl5qC61CmmfY4tQnkEaXVy6osLkg+YGf5UI5+Y8c1u1oxnrtrdeDfHkf8AwiFhoNppF7b3BuYp4QjNLhWPl7gdqhl27znkgDAOc52pavqHwh0nT9Q8J6hbJcXBaJJvLeWO7Ygl5fLk+RTGW2jj5c8ZzmvM5JbexuE1DR7qRysjeZwfkOeMt/Fu5NVL66a9KNdTOVUYOSSR6gCuKOEu9/dfRlRT3uX/ABNq1hrV7c3lnpH9nrNhjDHMZVL5yz/MMqCT0XAH0rZ1PTNe/wCEH0DT18JyRrc7rxb+Oy5uUc4jBkUEkbV6EjGOnHOD4b0t/EWoQ6bHGcSyCGMqwGS3RSTwMAZ/CvUPB2teIGNx4U1Lxbb6bZ6XbRpbRAJLHO4DeXB8n3WO5jkfxDDZOKdebpRSir216m1DkjdVL/I8yvdJvra3msZo9l5bBJPIbkyRMu7eh6EAYP0zjvXV+BPHGm6Xb2EGvaaL+3tPNVVe4YHa5UkIOi4x06HJzUPibULPxDprtfQyWgsw1rbSSMx3MCWwRg45GNv+114xXJR3jWukmxZnCl1umhcAZYDAZT1zzWkJOpFNrUwWj90+grrxt4BuoYX8N+G5bTU418xkVlNvKSCNjgk7xz2Gc5qtr3i/R5NFjj8Mrc6ffRIouWhYwRwuQMyKpyODxtyASevr57qmreFY4tFvvC1xqZvhZoblriNYWW5H8a7WIYED2xgZ61m33jq7FxqG6zRzf2pglSXO1WJBEgxgEqRkA8A4PUUnOdWGsS1UnazZ9N/CvxyuoQ22j6v44u9amNq8506JCTbBP9ZNJkfKv3FDbh94kA9TFb/Hzwva61d6fJqE00UM6+bNNGGVC7gjy2UcoqZzvwQQBzXzx4BbS9Yj1bTpL+ystXuIVa0vrq+e2ZSpBZUIBWUnGdjEZwMciq/jjwvqng3xPNpOpapBPDK27dp8wYyxHG18HoTgHDYPr1riwSq4DHSq0asoya2Wnr8v1DFw+tUUqkbo++fhd8QvCcqRXkevWk8jXVneC1t5l81wkrKyLkhd+1m9jxg81n/ZolidrGSSa2hfykleMKzKOFZgCQuQORk46V8tfCvR5NQja/0xUmm0YbGgmuJIw3mxfMNynKNnlWHGMg1seHvHnxO8P6uJNYW5vV01Q0kcjZjWPcMMdhVmI4xnII65r7DL+KsfgMY8RUSlTklfu7ab9zycVlNPE4eNOOjjs/nfY+imQ7ty4LdwTwKX/gPP9K8jsfjlrl7Y3d5JpGnzJBmSWeOQkW6h9u1yVChmJAXOc57YzXqtx4s8KiPTdNmtbm01q6UK6LNG0M7kFiqHICkZXGSQQDjtX2WF8RMrrVo4erGUJS02ur/L/I+eq5DiY35WnYkC7Tn1OcCjac7WG7tnHerM1vhUfgxkfez1Ppkd6YYWjVZGZtrqcMfrX3VLEU60VOnK6ex4s6coScZLVEO35gwbn2pdrDPJz0+tSL/tKDwfypvl5Iw2Rjj3rX1IGLtHyqpBPJpVTcuBnA9Kk2rnBXnqaNqq43EZ9T3pXGkbXhbSdF1i6TTtRubyK6uZRBZpDGuxmIbBd2OVG7aMAEnPasKNt0ay/wB9QffkVs+G77TdK1BNQ1K3u5JLeSKW18mZY1jkWQNufcpLLgfdGPrUGtae2m61qWnquPst5PCo/wBlZGVf0ArhpzksVKDbs1dX203t96OqcYugpJK9/wCrmd1x8hxQPm6jGeOnGaeFzG7YGPrSbWGMZx1rvscthirtyN2ccj6+gp2Oi85x0zS/Ky7VXAHXBpyg7cgtkAn2FDQ0+hHjaCOfQUo6gcEL7fyp6j+9+VLs3Z70hkbK20k4x+ox/OjaAuWB6fzp7Ky/Nxxz06ClUKw+Vuvr2oDcjODjvjjjtSbMNubBXjkVIq9f1GPT3pdq9DyOtBW5Ht5+btzil2ruz1HXp1p7L3BGe3Pt1pdvJ2t90fTNSPVMj8veu1QBxz9KTlcDjGO1Seu7k9P8jvRgddo49u9AMjEe1ipP3vWnKPlKkf8A1/pT2BYDC53Zxk9KQR5Ysei9aBiMo4+UZ6ce9Iqbvm64569KlbDZKg8/nSFRjPHPHNIbRzHg3VPEGk/GzQdF8D2qPrmp6lLBbTFWfyZTErKyIfl8yM7GHBHUkEcV618XPDHxM8O61d+Hfi34yufEmp7RJb6nbXBRZI+QHKAYEgKAbeMYPBBFeIeINQTQfid4P1SRdRLrq0c3l2dwbSaZf3cZSOcchiMrgD+Ie9fZv7Snwr8K6X4ZsviN4ZsTYzzzx219bxjbESdwJ284cP8AeOTk5NflkqNN52qOJjeDk1rfrsfbRqS/s/2lJ+9b8j5+1zxFrfiKOyttSvE+zWLF4IYUMaIDHGm1VVgo/wBUpJZWZj3FZuF3Fj0x0PpT2UsCSpGDzigrg4Xbk1+kYXB4fBxcMPFRT7HyNbEVcQ06jvYb8oA+XIxz60q7iT8xK+npTlXkdc4Ofek2sCG5I+ldOhlse3fswurah44tVceZP4TutingttZen51ahYNuK/d46/Suc/ZxmkX4kGxjkKrqGjalbSDuwNszAfXKA/hW/atvX3wM/kK/F+O6XJmXN3Sf6fofpHCs+bBtdmS9Fz2pu7nr+NI2D3qMkbd3Oa+JR9Lew9m3ZqNmyD1/CkZuvb1qN3Xpu4pjueHrjj5Rx79KXduxuUdOeetOUYwvQkE8HqO1Jjj5scV/T5+ESdgydu3ng/n9aT73G3jp+NPRWZccg5/OlVG3HnHp7fWkCbIyOuWJ7Um3cB8uQTkEU/aWJIyP+BZpcFmIXt39f8KQPUj43YX65HQUbdyjdzzz6mn/ADdFxnvTtv8Asn1/GncCMKy55JA68UMu3JYnjjPNSBRu+bHFI/Lbt2ByCP8APWmPoMy3f/I4o27eAvepOw688f59KTZubjGc0D6EeDgn7x47UEbsru69vSnbTuChuvtyBTjH83XcB7UEEf3vl29MYpfLZsEcev51J5fVSxHv/PNIy/MNvpzz2oK6EfzbSOOSenejbtXO4fN1NP8AukLtwPcdKGH8J6/pTFsRr90KeOelO24DYYE980/axXaew5A4/GhU3Y3A4/pQKw0/MN3bpg01lLcMxK8A1L/Ed3JAzijbubLMc0DZGV3Ltc4yaVULMe+Rx16U51VNrLhqVV67cY4oJsNVN3qTjpRt3fu2we59x/8Arp+3I28jsfelVRjdjPOM0DIlUAd+mAfX2xS+W2BtJwvtTtvVdoyM89cU7a24ru4PYUbghnzHJ56Yo2qqkKoXHP1p3zcZHHqO1Iy4fZtzx3PSgHoN2s33jkj9aUndjqB256U5VJYFW57j0pcd+vbHancWw3BU+xwuR2+tO2blxwP6UbSML/CeuO1K23O3aCD2zS3BPuMC7c9z0z9Kay+i5NPby41X5S2WAX8ahs5rqaFpLzT2tpFZv3e4NlQTtPBOSRjPvmpckhqJM3+8Ce9IPlyqjj+VSzW8sLKs0RTcu/5hyQelIy/K0m4IqLuZmwoA9yfwqFWpuHtFJcve+n3lOEk+W2o3+6vPHevbfgP+zjqnxKlh8R+JRcaf4WQ5Qj5Jr8g8rH3WP1k78hfUTfs6/CXwH4umj8R+PPFGkNbRzSLb6GbtBPM8fLNOpO5YgATt/iHJIHB918W/GSx1eGbwz8L5472K1jEc0+m4k2oBgJGEzsXjG7249a/P+JeMqWHi8PgZXfWS/KPn59D6rJsidVqtiF6L/P8AyNnxZ460LwFpS+C/Atrb2zWUfkDyIwIbMf3VHRn7n0Jycnivmfxp8ULDw7qUVvqsd4XvA0xmKl953AFmbOScmtSGbxneQ3F5N8PfE1jZQNJuubyxaGLauSWBcjIIBORnPauA+I8Gi6xY2WvahqYESxTQQxW0iOzMAHIZeoOQFC8Ese+Dj8dxeKlUnzV3Zbn3UY06EdxPFPiHw/8AEDSbext9eit1S7juC23JcJnKYPTOeteaa18M4WkkvNP1CHJJwATg+h4zzj2rzzxR4wsrHWm0mx0GSV7ldscattaOTanEzDIRcyA9R2FO0rxPo+pRm40/xHc6XC0b+XbzLmR/Kj3SMis3dsBQQN27jOK5YYqPLdJ29CFiqbZp3/h7XtFhM8NwVi27WaKToP0I/KtjwLYalqTst/cXEpjYcSMSAcZ4qXR9b00+Vst7m9klt1LI/FyHJX5dp4Y4blRjB6Gtnw34/wBCj1qy0mDSWhfU5ZxD+5kDSmJiGVdyrufapYjgADrRRxlGtJRs18geLgtmd5p2gqqjzEBI5ArcawVbfbtx0zVzQI4fEFqLnQbq1vkyFPlTL8rHBAJJwMhhVW81zRYo2Dalbl4y37sSLvYrgEKOrckDj+hr36Dw8Y/EvvOOpVlLUatuqr8yjiopI9uWwKwbj4meG47e5nC3JS1IVj5XBP8AdB/vcHjrx7ishvipZs8K/wBi3EvmmSMGKdGYuCcLtAxn5WHXqPYiqlmODhpz39NTJztqdRNxnPHFUbhtpwMf4VkeHfiV4V8Xaab7T7xVkhDtdQrvfyNq7nDPt24QdTnuOK05pEmiWaFg0bgMjg5DAjIIPpgitsPiaOJV6b+XX7hqVyrI6/WoWYfXNJI4HynNQeYeOwrWUDRS0J9y5HWvUfgF8StF+GfiDWde1qOaYT6Wbe3hhXLTTeajBc9FGASSf1PFeSiTH3mxU0ckZH7yRlXyzJuAz8oGTj1OBx+Fc9WUKK5pOxcZX0PVfFXxc1PxVJL9s1ExWLXMt1HZhsRRNI7OfTeQWPJ/DFcnd+IWZSyTbl7YOa4qbX9OjuktBHckTWpuoXMYZZFUDcMqTg56Z9CO1Rtq3h/93/xMooTMCyfMYmIHUgHHbnntj1r5qt7GvJyVZN+eh6VPF06cbNWXkdHC1xrmox2bSMBJknB54FdppuhWenQk7VRQNzMeMfU1xnguHb4ktLhdQWW3IkBJKkfdPIYfUfmK+kbf4Ba94m8I6u+rCTTzcafcJa2u0efLKYyE3Z4RScdeT7V3YPBX1kZYjExlb2b0PnTxl8RPDem2t1a3Gl22qwiKRY4J8mG5udrBEYDhkVvmYHrtA718z69oNtpen3u24e/t7dkW800ReRa2cKRrI10zyEKJJHkli2qMiNRsJr7h0X4X6Lcazr2mwy6Q1rNoAOnWMlqZjbTwXEokllQEko5jc7twYLsBAINfD/x2vPDvhDVpfCNh4n1Hw3Y2nmXDyR4nlkfG+GEAgusaq+Pmzkbe4NcU58uI5Zbttf18vxZ5+Jjy6nK+G/E1rceG7Twz4oludPW3eSK5s5LkwYMEvXyuS6hCgDsu4MQQK8m+JXjB7rxJDeWtnJNaQyRtb28kj7LmJSAUZBjhmRt2MZ61raT4i8H6H4Qik1jSrWTxH4guJMawtx59xa2smFdvLJzuA3BRuUnB3BsjGP8AG/T7PR/Glxptm0rQWyrHFI0IjQuqDKx4ZsoBtCknOMZwa9ChRVPEPTR3ONId488N6PH4X0vxXo+s6ct5cr5l9YwXBY5bLCVUIAjHzBfLByMZxzXnawxNCLhmIyxUqDyD/e+n+Fbl14gt5tAsNF/s+2Mts0szXG072R9vyH/d2HHXG49KxXSPLOvmbSpZAoyCPfPpXo0FKKcZd39xq5c2rKsePLLbtpVhndV2zaaS4ZLjypSML8/ON2RlQOpGc/hVaNPtAlZGRSV3Ovpj0qTTNQvIknmM7hZYvIb9395eoGSOPw54reWq0Av3Gk2ema15aTpe2Ec6N5jZCyLwdrFTkHBwcHqTz3rpLDwU1zpdh4suLCc6BJqf2PULsKI44Mv8qAli3zKBg49euK5y20/UZLOKH5ozO7LHD/Ex6NjuvJHB68VUvbm6tbM6VJJJEyMBNEGJQMueSOm4ZPT3rNqWiTG1qmXr7+ytR1CSDTbB9LhgD7lkuvOzhj0JUHGNowc9M55r0DSNU8FGx06ztfB+ra3HDpskF1ZfamEM127HZOEUZEYLR/eYZcLgY4Pk/lyTZdpjKyfxBcgj1NW49WudPsWhs2ltxLw+2Rl3YIIwR7gHB7gVnWoe0SVxWV7s9zOgzePtL0JotHu7QNm3mjnlaWX7TEu9pVL/AD5Kjl+gA6YSvMtdbR9N8Vapp7TvbJOsSm7t5zdK8mQZJmbjfuOSQO+K9h+C/ijxBrXhnVPEV5aslp4c02Z4RBvhgEyQgHzJGY73kXzDgYG5uQcBR5J4x8Tab4utP7QuNNTS7mziWOySNGYS5diyFuAFAPHBxj1JrzML7WGIlSesV+FwSRyF1a2azPHY6kt1DEFfzWjaMtknICnrj1754qvceXNMzRw7I933RztH4806eG5kjE0NviHnCx9EwP5nGaij5j3KuTj8R/8AXr3VsPzHqzK6BWPX15BqfzGbLblZmbJ+nf8AOom+zrPtkOcDs3X8aZLJKyjbhRyeBj8KY0ya1/0VjN5BAGSmeQD2P4Vt6Rqes2eqyNo9ml1K0sU5jazE+5ovm5XBwOuQMDH0rLtbeSa3xBGDK74GT2HpW74XkvIdft0m1W5s4rJf301q3SPGSCVI3BlBXr35rCo1ZsCDXte/4SHVLm+k2Ri/nM5SNdkavjBYKOg9B2zWLJbSQyJ9ojOxwdkm7II/pXRTeItNWe+1WPQbG8t7yZxB9oh/1JDMQRtPcsDg9cAE4GKxopbq/wDO3MH24bhAFUZ6ADgfQUqei2sgaS1GWi317dQWvmF5OUjx0xjJ/lWzZ27fahZf2hBam42wkSnPlbv74I4wDk45x71QWGUN51tvWS3ViZFB+YMOB7HGR+NWfBmk/wBu+ILaO51GCztlk8y4urpiIkVVLfM3YkDaPciqm1yt9hOzR61YfDL+yHX7db3MGrmSOVbuOzC6ZPaycAoFVnBAOflG4Y6cVz3xY0XSdAvPtHhfVJo9K1G1jmnmlkNxDeSoxUPAxG5QTuyjEMMHIxiqmra9rmnapY+JH1iFhdvJE1tavuIiJbBbfuUPjjJHow4NdvP8QNN1/wAFQ6Jq3gmGOx1ING04BZFlRsGQuRmNxj7gyqjB6njyL16dSNST5l9xS0VrnlvhfxZrvg6b+0tE1Jz9py80XaQejKeoNb2l+IL7xVpfiRzdzPq09urByVBWEyLujVcg5yAAFBPboTXn+p2Nzpt5sDRtFtPlSqxKSqpwXXPPJ9hTY7qZrjNjK0chI2yD5a9acPaw5b6GTVj2Twn4k8QaTptxoN14kt4Ibe/86S3jEbSO0SEs5jfAdRj7rD7y9u+brmvTaLpPiHw3ry2mq6jHcIum3VheZFu+1QXAByq7FBwedzY6dMm4s9atbjS7y8WO7by7e6Wa4wjXUc7KrhU3bpowykHbz1ziun1Twz/wkXiiBbLTbe4s9TvHtm1d4/sFqpiUBt5VcRcKTyCfvEZry1SoqbnLrr9xrCpyPUv+Afjd4ij1SwtLjUzFFNAIJ/Pc+Q4T+MjOVcDqehwSa9Zu/jNpML2utWN7b6pp92tw9xYQk/aLcREcgrlQCpLKWChgG9K+cPHHh/StF1wpp98p06SNbmC5jLskqkkHyyyAsPvD32tz2qW3+IUOqW8lxrOpzHVopo4bHUEURmKPa6Mj7cARkMo+6cfN0zXVh6+Iw1SGJwVRxtqrba+WxhUw1OqpKpG9z678P+PvBHiqOG40XXUkjnwFD8OhPYoPmOM9QCK6OS2WONZ45I5omCskkTh1Kn7rZHAzXwfpN5rGgahCfDyurNIYQ8a+cTJjDRttyGXuuBkA969d+FvjTx5Y3i3ast5o0sjOqXSyw2sCnar89gOMZzzyBmvt8Bxtj8LUTxslOn10Sl8raM8jEZDh6kX7H3ZfgfRy7skenTPP5UEFWDfeB9O9cZY/Fzw5dXIj1FY7DzceWFmEgTcflznG4HqCMcV0Wn+K9D1KIL5M9pcl3BWU5RQvGCcAgnBPPTGDzX20ONMmlKEZVeVy7q1vV7I8GeSYyF/dvbsbmkyLb3RJ0mDUjLG8K28yuylmGAwVGBLDt29jV3xd5jeILi7kLBruK2uzuGCGkt42bI9dxb8agszqmnXMeoabJNHPCwaK4tmOVJU4KsvQ4J6HvWjrNnfalZ6XrU0ke2WwSGWWeZVLyxyzKeWOXYqinjJ9etelVxeHp14Yp1I8jTV+bTXVeXQ56dOpOlKik+Za2t/TOej/ALpYkHnGKbhvuryeKk+Uk7myPUd6VuD1/PrXtR11RwEW1WXlWw2eaNnJPepee+TjmkC5B6/j/SmA0r6d+fxpdvzfNgHr9Kf3G7HPtQccdTx/n6UiiNgw6Y/Gl2789yOadjP7tsAnpT1+6N2CMdu9PYN2QhQFHGOw9v8AP9aULt9vwp7jnHt+VL0wOmPU0h+ozy/lO7n+8cUNGFzzkHoP/wBVScfMF69+KFGGxzx3pWuVcibupwT0oVev+RUnJA2qRjoe9KoVeWOeeQO1AluRiMqOxXpSsrNwG5B/Opdqj7vNN8ts/M2AOwpFsjUFVJz6A56Gn+VtHqTxTl+YbWXA7/1rrPh34HuPG2vR2LNNFYwbZL64jXcyRlgqog6NLIxCRr3Zs9AaxxFeGGpyrVXaKNKNOVWapxV2ylDotn4T8Kj4ya1o9td3On3osvCqXiAwnVGIH2yQNw0NuMvt/ikVQOFavbf2rvEfhzxJ+x8NL/4S6ybXrzQbDWY7SPUkW+vFWSJpZYwrBm3Hfll6kkV4v+1J42t9as7Dw/4dEEGheDb23S2ih+eF5Vby5CvZ0VGaME/e/eP1kNZ2rfs62t94V0Xxc3i7S7I3+mw22jrLNNK1nbQ7oZLWGJUOVjyCzEFRlASpO6vyvNnWniYYysuXmaa8l0v912fb4H2cKfsYO/Lf5vr+Zw/gS+j1XR5byzkuTYm4aO1S6l82eMIArpISSQQ4bCkkqOCfToiq8My/KK5TwPcrHqniTQQwzDqLalGpV0lENweCyOAVBeOUj1zXW/NuK7TjBr9JyqrGvhYSi7nx+NpypV5RkhF2t/nHFGzqenb2pxXdjd+vbtmnbNrEc13tHNrI6r4V+IP+EZ+IGh6yxGyO4MM3GfklRom/R67OPUY7WV7WSN8qF6LkdK8iUMremDwQcHj0qZry6lYsbqY59ZDkevevkOI+Fv7dqwqxqcjSs9L3/FH0eS54srpypyhzX87Hq02sKn/LvKqjnc5VB+prMuPF1lCDuvLZT3CsZD/47xXnU0kknMkrN7sxP6mmf7WevUmvHw3h3h4/7xWb9El+dzvr8X1X/Bpperv/AJHY3PjiHP7s3DjH8Kqn485rLuvF11NkR2wxn/lpIzfoMCsEr19D6UjLtZRnqOK9/D8G5Ph/+XfM/wC82/8AgHl1eI8wq/bt6L+mRfdUKy4P1znP9aRVjP0HBPvUgVckNnHUH/PWnYG4dhya+ovY+asRsrBuNhGPXvQv8PyhgPU4/On4Hv69Kcww2cL83XNAIYPujpt/z0pM9WKhQT+NPUNwOAfp1oZR97jnpmiwbkZUrhdg4+6B2o2lQPlYZOOtSHjC8kt096TZuAGSMc0WCwwYLFdp96cVwd20AU5Tnr270FSueozzii4JpIZtK4LLx39T+NJ1+YLjnOal8s/wt8wHIpNpDfL+Pt3pgR7VH8OPWhiCvCgk8e9Ssv7wNwSO1Iy9NvBFANWI23GMbSSTSMpb5enrk1IqsvH8vWhlXHRec9qYJXQwD5BlutGFbheoqRUUdWP0pBtwyrwR1GaFqBHtx8u0cd6dtYcg8/pUmF3BVU+v1puxhwOme1NCG44yuRnj1oYNyeRnvTuRheeKfsk/i4Hp1pEkQDfKOw49vrS7Qc+vA+g9qdt+bavfkcUqqu4lWyaB2GD7m7vn6Ubfl+bke3anMCJAvce386dt3Id3FAr3GqoXDcY9qRlzzwAtPVfm27utOCkDcOaB3uRKp6cgHuTVW81K0sN7TSKZljMqw7tvmAHHU8Dr3/pV5VZiflJ9hXknxb1jT/EGoH4bWfiqK0vZyclUSN9yqzrCWLcL+7ycjq4PPAPxXG/EFbJMHGOF0qVHZO17Jbu35HsZJgIY6s/a/DE6W6+Jmm6Ra7tZtGad0lukMbIieQpHy5Y/M+CMAYzjjNWbf4reBZLOK6+2XTfabNbm3EkJh83cGzs3DLBSpHAySOwOa+SvEF14o8xNUuLONYLiOOFpMyFbyORCVjcZwchX3BTjcGGRjA7b4V33xZ1rxEmvW+i2l3DaJ9jhkmkWO2QRsiiJuDgZaPAUZPY9a/L58U55hsPb6zp3dvwdj6ueUYOUuaVP+vvPprw7rlj4k0v+0oYrqyiCvIrXUTIrxptDOrH7wBYDAHY5xXcD4eapDa6NqGpatoemWniCM3Gnz32qRQiaIKG37clgMFTyMncvrXjnivV7XwOmk6tq8t7f6k7lVtLKaMma4eVQqN1Ck8IEHQY+XGa5y48VaDp/hu6s9Yv7651pbe41K20q2+WO1JYxCJtmC6hTt2ZAKr3BGcsP4n50qekYzW1+X/Lf8DleQ4SUm7NfM9S8Ran4L8M6nE2u+KrO3urCG5jvIsOPIVnj2GQkdSyhVwCR5hB61i/8LE0/TbaDXtSFtp8f7siN5hJJJI0TMoUEY+8F+bO3GcEnAryS/wBF8Maj40tde+2T2upXVo9xcLezBY1jXYzG2hHzGVRkICMD5TjILVF4hsbiGO60rWoWY3d6huLn7QybbJUIgjjV22hnGeWz8zn2rmlxfnOMk4zruPNukklrva9/vOuGWYSnaXJe2x3Z+IcdvdQ6t4dmgvdM1q7ihS2WQF2lKqcqoJ2BY3V2O4Dnp/dzfiB8c4NP1ibSNKtbee5sGeCMjG1ZVPMiqBtDKDkbsnK44xz514NjsV8B6lY6N9ueeBTo8UKRpiO5upSTgA5YGBZf3nG0uRjoaguNE/sVr7wrHqFrcw2VvbXn2hbdJwdjmRocFsEMWDnJyWwOc15Uq9fl+q1asnT193maTv5LT8Dsnh6MZqq4q7+86iT4kaxp2hT6r4oLy3upadvLZ8plXz/ljyzZDfKmQFPBI4LVcb4tfEHw/wCMZbrQ7+fQ4LixF5N9ivFVbgPCSIM7sANloyDkAMTzivI/GN/b+Idc059bsbmNb24aHymk2yRzMNrbvmO1Y5WHBUEgHpXoZ8EWHhvUEtrNl1bUoNLn/tKCOWQJI0U0RidkiVgAWIQICcl+SAKylRoYbl5t3fQuMrRPSV8efEzxPdQ6rrvjCeOw0+WOaSOKV2lW1ZQ4jVdxVSCoB5yAM9aZqHjXS73ST4w1O01ZLV2NzZyXAKtcLsVUnZAAzcuMHP3QB0xXnHjLT9Q1q+07RdJ05/t+qtCNO0yMNsaSTBlMyFsRoihtwGVJYgHAOMS+8G/Ejx14iF14z1aOwtbC7t7VkjuANy+YpiSKIHCocnaW4+U9cCuOdGErOpNJfoSuXl1Zlax4+h17xJfQaPt0rStdaO41ZmmeIzbTuBjY5O9+gyDywzwMhviSzPjTW57G18J3GgwaULe1t7q1Mk3mzSbMQyNypc7nI6EYwPSsbxZLc2PjDUZtD0d7rTNPhjbUPtH/AC8WzEBJC3GyM5DLtwcE44rW8erZ+G/Cw0PSfGN20UN4Lhlm1Iyw3lyfNy0IRQw8tXjcucDcdoBxmvVhQUIwdH8TKKuuY6fXL6bwT4Z/sHxvMja9dX0XnMl67zv0bPnKQsXlqSCpIDFyeaqeAfFGuappks2qWF83hm3u2t9Wvij3U9wwDNBbRqrb/McOo3A4XC5PFcB4Z8TWt5r0GpfEzT7jU9Ou4UFxIISZFiyQsy5+9gjtgttIBxmu1k+I/gOHw9Y+G/DqG3EN8l/M08kkIDxjsqHo2TgYyM88k1lVpzpQ5eS8m9WtvMFvc9Fsdft/Bem2+qJe+I9F+xWsv2u7tXlmhO4l4oz5hbujDgDO4k5ArXsdSubPS9P1aPXNcS1F1HcWksb+bqV5IHDKsSn5/LEcZc4UEghScA1zF5Z2Hjaxk8N6V400CG/vpCPMi1KVoykzbujptdVRGGwBTk9QuM6um+GbzRNHv9S8I+Irt762SQxapcMZJLqVFwRbR8BFBOAQvGQPmJJry5ODio1JWd/wLcp8jcSh4i1nxBBqFj4s8Kyq0F8sa2kbyKVuLl9zs3kox3tuYFt3A6ZxzWHbw2Xw4WfTNavINR8Zaxcubt4WaSHTYXRhJEiqwMjLjnaVCl+TXmnxF1rSbXx1Z2+h+HL3w3FoQjhSzkT/AEwsS0pdz93OZMDPRVAJJ5qxp1jq154dvtSvNJay1WyuoZZpGkLTeUUHyRxEbVLFkfJydoHau54JU6ad9H+PbUTa5PM9c+H/AMRrHTVTQF0yxbyXiv4rmxXyrW2tuE3pCSu5gXfcMsfn56Vz9l8cPF3h3xfJoOp67ez6ZbTizgeKEfaEsmcyCVIgVVztIwCecAdK8s0f4qeNIb1rW1vbe8As3tolkgVVjTAPyquA3Kg4bOSo9K3NZtfiNr2pW3ipfCclrP8AY0jvmjs1BkjKq6uyN8oVkCkcLjAFUsFGhW5521XfqaR9rUj7tz37wL8db7xheNpNno8mIraW4a5mjyW2K7KCoYBQyKpzk4+bhuBXd6H460/xDJqKRQNF/ZPy3f3nKts37FAX5m9uMZ5xXifg2LQ/h3dDWdXu9S09NavY/Ls3txMbQRMvmyymJiVIyHKj5QpIyM07xF8cRp+kao+o6amqi+ux/Z9wkhiHnKCHeVOGOUbHXnPU9Ry1sTjPacuDb18/v3ujT2MlHmvoeyXnxEh0+xk1ux0O4vbSImJJhNtjaboFJAOBk9R6fjXl1n8XPFGqaRqGuX3hffp8EiyWt22JLdIolIkj2oA+MvkZznkZrxLRfGF9ezNZ6XfT6WfnljiW4Zrc3A/i2SHbvZflHBPyrjoSey8G+PvEvja5ttX8VadfvoGmwxveW9tEDbS3EKZjMy8kKzAEgkDg8jNLEYOtU/eYp89u/T0W12J4iy0Whp3nibSbrV01Tw7qurWE91bmVT5cX2eWXgTeV5wIjjUgfOpJOCACSK6Txfc+LLHwYdVaO4mvrZUmea5jDQ6hCcq7SRPkorszLg/NvC+wXm9B1TTtU0+XxRpmtSaabq7ne/uZLZRFBIqswigBwkYYZwEwSQcdCa4Px98UvFn9gW+gjUo7iy1ND+9jkYx3USSDy28kn90Sy5Kn2OBUwwksRViqcdIvW5lCUea71R6Ronxnu/B+pQXcOiT+HBpUcMttGrB2uZFUOCGbIHy+UQoPIDqOuK+gvhj+29rfijw1rvw/tfEes3R1W1cJcaheMJNPiIKyt5pIxuV12gFscnIIxXwTo+oeZqyab461Ca3trizCWTDcwST7kbgBgqlc87uwIPJBqXVJtI8KzXehi0uJrjyC1re/6l2SUBldlRjk4+XbnADN35r1/qEY603aT7PQtVGpaH6A+KvjZJ4f0K3hg1a/NtdWQ0a8ewtli3xBkBXbnf8AM7KfkOMMcjGTXy78WtY1LQvD+oeFLGx+13mrXTvrDXUHn3tucjYsjAfKQEdvfcvXbmuNvPi9rPia60qb4oQPM9vbbLfUY4RbvPEI1SKGXygAY12rkqA2B6mubk8d+M9K8Q6l4g0rWFt5tUvJPOurQMIjn7xRSfuhTkDqucdSa5MPlLpS55O7T0vsFapzoZ8ItB0nWviNpq+IbTzLW1WS+lUJlQsalhlR15xgdzjr0Pon7QXjm7v0ufDNvocF1psrLLJe3G17iKcAhcY5g4/g4zyMYrU8Jx6Db3UPiD4c6PpqjRbHbcazdXmyJ5zHucyo4xjp8p7gEZPFeSeN9bWTVr+PT9UWWyufLj88bQpwCXUGPhl3OwyefXpWkb4zFKtZ2itn3Mk5RSfc5KSykt7qCzhAe5mHy4HAPbB71cv2t2tbeFpvLnjj2MjrmMg5zn0Pse9a1n4Ra88LzeNNPuUEemzRw/Z5ZsNNI4JPl4GMIAC2SOo7msafTr3ULqCGzXz5blWkCRjlyOox3xz0r141IylvtuGxkbWt2P2eYiM5QkDg8c5H41NpsbzWjwzZUICynn7oHHt2/Wrl1ayfZY42ngVtpf5WyU7fOOxJPH0qvY6kbPzI/JhmBjMZ3LkZPcAY6Vvzcy0GkTWt9Nc7Pt0ly6R8NJC2ZMBeMZ9OOvaqhtLhYY5rhSqzEqre69cjqOT1NFnJ5Ikt7jPmS5yxfGQcckfhVzVJLayuJPInW5jkjTE0akDJ5wAwBG3pTvZ6CTbdiG1sJ0aO3hUs8vzLvOFkHNVWb7Y4gVmESDIXPQ+360rXE8JFxHNtYDKhWwVbPOP5023wrG6aYmVgWX2brn69aaT3ZdjX0m+kjU6T5c0lo7MzQRTMp3bThu4OO/HIrWPgu8msTJ9siuZrZBNcQ7/mjY5+QZ+ZsDGcA4zUHw9j0RvFUd/rvnPb2EMl0GUYAmGCjP6qp5I5zjvXd2V9pfjDxBfa9Zyf2RYT2/2cgKrb977pgyglkBOQNoyRxjBrjrzlTl7guXm92O55M2s3nkxwRylEtUMSKmF+Uk5yRyc5PXNJDC8inb5ZAG/KtyB6Y9ar30MKzSeQH2iU7AepGe9M3FR5kOVlHBPt7iu1K6uh6FsaBfTQrcL5W52wqBvmPGelUvvMIyCv+NXlupJI4WhjdZIMlm7n0AHtUd3Ait9rhVyrKHO4fdPQ49s0Rk9pBclguLe20qYYdrmZhGGyNoXv75/xp9i0SThrvzFj2ncIz94Yxg/571VfbNarCoVed7bm9u1S+Y7+WsiuyR/Kw3YBzggfSk4iZG0azTBbdW2c7VI7Dpn3qxNFHHIGhkCiWMNgH5SM9z26VJDNCpika1YeXnfjqCORye3rRcQqhRoiVORsD/N37gdhmpv0BkckuoT+XbNvxFnaycgjOTnHYdea1pvE2taHapp9q1t5bRyxygQqd6ybc5OM/wAIIPUZOOprPjvL2zkfCBfOUq3chcYJHsfT0qrbssl9/ZqbfJmkCCR1yQCR/L27UmlPdaAtUetfDzwrpUU+m3WqWttqq6nbC6mtr8bbe03kiJ8q26Q4VztUcDbkgk41bqbw7os2tXF5oNxaT6XfQtp1vdRsBapI3+kq8IOGBUbhyfvKRT9J0fQY49J0TR/EENxp5sJrqOORV88TiTDQO425wzEjOcK2ORXIXfiKzOsanoreGQ0s63kc1rHIz/Y7rDbXiYk/JzlkAxxx0FeTf6zVbjey+XUSv1H/ABR8faB4u+y6P4dTGn2hVmaW2WHz51TY0i9WRCoGFLc9SAa87vlikedtOh8m3Rtwid97KPQtxmi8t44pNjM0cqfeVh1pJoYoyswbak6llGd3zdxXrUoRpxUY7FJljTdUh+1WTXirKtowISRm2gA5KjByAcngY6mvVPFV9qHxEhtbzUNYRdIubwwafp9syoYpgo2s4UYPyjYMjOcc9a8l1DSZNL+yTTPuW5j3/KPutxld3QkAg/iK9B+HPhHUfFGn3l4LkRw2eJ/Jxh5JF+7tJBX35HY/WufFxpxiq19h2v8ACei6P4A1v4k6fHrV9dCO1jgEkPh2J23qBkO+5sGCLIBVQWBPQ5NcP8QPDtnfJp6aH4Z03SnsrNjcR2k7tNcbW2sZg5PzkjK4wcBgR0ru9J+I19qXia/0W70c21pAUjigupcxu4QMomVTmSMbWPfDFSegri/G3jy+m1VvEHhu6srqC8EtvqC3FoELHC7X8o52YUbQ6sSSpLV5mFliHW5em67FqXMnF9Bvwzj1DTL46h4YR57BL6OIXVzJHDAwaMlhMhJbamHywyMLzjcKp6Rqky3Mlnfa1etbwXLSR6fHcMllIMlv3brnbyASGA/OovDvir+2dW0zSNU05Y7lY0sbCSBVhcozEgsx+V+WBycAgHnNXvE02n6TLps9laW41+CadLya2ufN/tBGYsryIxYLIn3BggEKuRnmu+VNubvuxWRo61qHhbwzpsjeHdEa0vbqNpovPkM7g8HcTnaygYAIBGU6enM2/jXUI7Rr59QnjnvLnBKMVAIwcD+EjBGVxjnpXQaj8RE8XeF5/Dq+ENP+1MokllWFYbh7hVCibePmIAOSpbBPJ9K5DSfAWp6tpF9qVxDNYiyileCaSEiCaSLBkj8zOFfBB6fkBmnRpx5X7Te/XUqb5tYns1n8fNU0fw/pyyazJFLZTF4IJIULEMGO3fGVdYipbLj+IKAOtaN98b/FmhXmlaf4yvtJ1OO68q+EcN0JdkZQkI55WPI+ZiO4IINeB2Oj+IrfQH1i5s5IrEzCGKfcoV3kLKyqM5YEghsA4yM4yM7cHh3U7xX1PTrGWeLQIUn1e0tdu9EVtr7Bk9gW6YHJOB1z+q06b0fXv1MrH2jo+tTX0MS6tcxHUJ8yCNLdYgY+w+U7WbAOSowcZ4OQNIfKTuxkev8ASvi7wr4y1e18UeHLzw3G7WGiX0tnpUd0EwRJKZFim5CsSD8xOOg54FfZ1jLLc2UM80PlSyRhpUB+42PmXPsc1+y8EZtXxmGeExL5pQ2fl29UfF55go0Kiq09FLp5kiqPvA4AwSxo2vn5ucVIPlVdwPHf3pW+bDY6/rX3R4egzywz7lxwCOO1Iq9d3RqkC/NnoKNvTauM+1BW5Eq7eeM544pwXbnG4kHqtPVTJyuRTu/B7Y49aGJaEW0rnbyT36Yo2NnGM55NSL/tc54/Gl25zk4GMD1pFWuR7dqn5cdzzQo2/Mqgg9eafgA4+Y+po27uNp/HvQAxRuyuFP8AEKNrbvuccde9SKm4YGMA5oMYb5d2M+lAyJV4OCc+3f6U5Y8KO/pUiou4bSSfUHpSxr1XICj8hSY0W9F0PUvEGqWmiaTZyXV7fTLBBEnV3boPYdyewBPavVfFOpaX8L/Bq6D4Z1BZrq+WTZeRcNO3zRXF+vGdmN9vbf7Jnl6spqTwnoNn4E8PXF/rjS22o6hYC61ORDtm0zSJDtSCM/wXd63yL3SIs3HNeVeJNdu/E+tT6tqEcURmZRHDEMRW8SALFDGOyIqqqj0X618vUk86xfs1/BpvX+8/8v66o9mNstoc7/iS28l/X9bnI+MI4l8L3qzW8kiLECVhXLKNw5xnt/Svobwoy+Ov2N5HutAgvdV8Pw+Yblbdop4dMkvElvI4JEdpCwjiIcrtDFQMHFeHalai8028teglt5EJPupr6W/YXuF1z4F6n4fkt50iW6ufNdmwU3oiKAQc8gMe3NePxlh+XkrJ/wBJ/wDBPQyCsrShbr/X5HzDb6bp+l+JPFFjoElwuixa1eLbw3kDpcI7TNMFYyfOdkU8SYOQNvBq7tGM856VV1bxpovjn4qeMLqHT7TT9XsdSayvLeOdHkdol8uSY4wSWaNMt1PAPI5udF7/AC8173DKccAk31Z5ucv/AGp+gwKM8Ljtz2px3Y28kDn5acR142kHPPf/AOvS46bRn6/SvoDyVKxGPmz93c3QU7G1t3cDv3p6/MwPqKNu0cDjoeaB3sRgeo5FO+8w+nNPIAb5WOetBXbwuen50DbI9qnsP/rUh3feyP8A69S7flO3IHX8aay8ljgZ6/8A1qGF7kS7eDxgc9Ov+FKFbtgZ4OT0o27VG4nP17mpG3EnoMn8aSOZakSrhh7dhScbduTgtjOe9S7V3dMGhcj/AJZ53UMewwr833sbetDL16DinnqenPP1o2/dGfmPemNasi8v5TjJH+e1O8tenI96djd8zcHp+FOwoXvz/eFAokbqpG5s4HFKVXPl7sn730p3+syMDH06H0oCqu3oPb8KW473Y3DFgwAI6fQ0bWz34pWX5SPlx9aVN33m4amF9bMbjcFDEDuoHekKlQPU56Gn4G7sMnHFJ8rY2gYH59aYm7jdn8K4BH5AUbWPzEe4qTb0yADRt6DNIZGqttCgYI5/WlCx5J2j/E0/HzAqB/hQ2Q3HT1HrT3C40/3cc7evp3ozjOF5zxT9m4Z6k/hRgHHcnv6UCbGFdy9OcdO4FHcnjjipG+fAJI4pGGB8vDdB3/OgbZG2/wCbap9/SlI28YOG9Key8npntn/PFKoZe3XrTICOOSVgI42c7sDAz09qYysNyvHtw2OexFMmW+beLTWLi23RSwssQUKdyFRzjOAcHAIzyDwah0m11CzsYbfUrr7TPGG3SBi275iR1Gc4P5cdq89VsU8Q6bp2h0lf9DvlQwv1RVlU/eXs426dGn18ydtqsNzKqkjv3p/l/L9R+VLtG3yyDtYFWHY1G1qsC+bbSIgPVGzsPrkfw5GeR+tdcpSgtTkioy2CYrDG0kkzRKqks44I9wTxnJ4r5H8bTajefEI+HdD8N2iyXF7ugvJUH2pp0/eYadxgMNuCD8uC2cjmvqWe8ntbSSKS8kkulKpAlzJ0ByRyOoGTyOvHQ5I4fUNLtdchtNL17Sbe8SW6kmuZri3jJGCzBipB3EhtuPfmvxrxAzjCutTp1dKkU9N7X/PY+yyLD+xjKUXeLe+34HGeDvgzqOs61cXmm+Ira2s7IxJqU15Gs4gzlm8nYdqru+VuBlfmzjr6rNoreF7LTtDtVk8tJDHbrbsqNckkMpYL9wO67sg/cYc5BxU0/TZbC6k+y2NyLGW2ZYreFgqzBowscTYGFO4YBxkYHDbc1jeONa1Pw/Yap4r1m1kkjhVxZwzT/JPJLHsCRIvzqAS5LsQSAAMHmvxnF162Jmotq3RH0t5bI5H4reIo4/F2j2+n28XiR723eZW3sUmmViD5Xl9lOQWJJAViPWud1DxppXh/4a6LqvhjUNNZ76881/8ASfMuYpWDF5FXBcIki8qM5wBgbqp6xri2fw+8I6p4iuBFqlm90lnazI/+pbzo1gAHPlxqVwOckkHjNUPhj8NrXxp4dSTxppuoXkr3EF5b/Y3FtLBbBMb2J4KSEBSqrv4BBHBr28JQp06KU37sX9+rOJy3bJ77VtYsfEn25ZLW8bUbIAT65A6qHkjVomByjOjIIySFJOdoDVveOPD3im8ks11u6N69rb7bOxVctLPFCqyzPIowFAilYRjBHyKAp4rR8eafc6xqXh60GoNBY2esfaFjliVI47e3VTAyYBY9NnzknOzjmuv+JPxNX4fCax1DT5fts928x+yvtMSMAsTNLnncFcjBGcfWsamMqc1P2cby1LjNJNRG2VvDpfheys9QsYr+705YDepbSrbmK381wikH5ppFWJgTzt3KC3ArzvwyPih4o8SJq8mnafYabqLXrSYhhiS0hCsU5AxmHy12t93cV55zWJruq+K9J0vUJ9W1AWKas73c8slxucROgEEZwCejN8gPQfNjvv8Aw+8OrHbaZM3iXVrKwgs5dWtZ2vN9vebWDCJgVx5YPmkk9dmO+a1dOdOnOvVs2+u/3E+055ajvDPgHwXq7Pp+qeHL6G+uNUluVe3lM0zosQYqWxjb1lbptHQnv7BcaRY6fpWua39rLbkjsZL6RY1mmkKCTy4nLD5ckMy9iucck1yXg+PR9A0GHVr/AFCYaNp6O73BvkeAPcxsCEYAbiN/zHLHkDb3ryv44fFnUvEF5a6TpJiXRomMLR2rkpcTK8ilguMZIwSQATk5rjrYfE4+apRbUerK5lNehu+K/ilqUsVpr/g+J7TRNJ32CzymP7RNPja3k53FlAIV8DB+bHArofDWqabp3hGTVo9USJkli1OZr2aMZlEbSRQRoSS7u5IwoO1YxypyK8E0fwd4w8VXsul3f9qxW7Q/2mmk24ZiUbOHiTITcSevQEnqeK+htW8E+HpfFGi3mueH2vriBrdbiG3tlW2tPIyJEaVmVWZQMu3IKjChs8deLwmHpKNPdvtvp6mcJxhJXVzw+60+Xxb4E17xbcWt9/aVzepZ2yyACO7ClAkKRkFnlw3ylTwA2TytbvxglmXwN4e0PWtWl1TX9LYwardzSNJOsm0MtuoKgRpGrgMAclwxPQY7r4peJdP8HzT6zpNiz3Wi6k80MUCn7CpJIUNI3+rdB5eBFz1AI2k1ytlfXwOo6X8TtQ1a7u7+3fVre00+eEbIZIQ0gbzSFXB29GJBQ8f3uzDV5V4wna0Vql1C9tEczpvwz8WWN7a2b6TcwyatYRtYzfPctZbwyxNI6gKhKmQ7R0XORjNdP4Z+AfiTQ4/LutehsrJnX7XD9heSWbZGwKR4BO5ssVA6K6twcV3Go+INS8KeGbzVZND1i18W3sLQTSLcR/6BZyKohuLht7BS0QwMqOAcdc1a8ZeKYdc0Xwv4Rtv7b1GW2tmXUJ9FZoPNxHvRldwpfJZGLcEgHjHFctXM8VOyppJXtffbr/ka8yWx5lr3gHxFNJBb+Gbe31DWLqNoLK10VlWCBlZkQXBkUgyN8w2cE4HzcYr0Hxp8S/Evwy8D6HJqGgwXOt6pZvHffbJC8lv5fKMWjJQkkn5AxVcgdayvDPxSl8Latb6f4T8Mxqtxbsy3F9eiFrqHYVlMSEERDzMtxuyMkYYjHnHiz4j65rFncaefC9uLD7RLNqV00O6T94xcEZ5RQASMcYweMAVThUxVSMakE4rXzf8AXYyU5JbmENa8P/EHxLqN58QbmbTXvoojb3FuGmdCrDcDuYffBYknO3PyivXJPHXha8s7K1tdPjli1QrYFIoY4bjy4YcFtwXhWkcIobJwhHKivD/E154TlX7R4YsbjToVtYPOgkk37HVSHbJGTuIVuoxkimpfR2elst9oV9Zyy4ltL3ey4OAu4g/eGCSNoBBPevQq4dVopK6XbsOPNFpxOy8NeIfCPh2DxBNodtZ6fbGURWTX8X2nVN/lusiRMpUKuScFlxk9RVL4h+PPFGpabbS3WoG2hvrO3EkcOP37wlgvm4ADMDznHHGO9bninVPBei+DtJ0OTTJNPul8m5N0NKEZnBXfuWYnfuwyn5h83megrmfGWm6Vr+lXHiTVPFkNpeWWn2n2HSvs7uzFmIMBYAKmxOc+4BxxWVCMZ1FUqRe+718jWSdOVkzjl8Q6pfyj7XeHJR8Kp2hd5O8DHQnJJA61sePvEreJ5NFX7NJBcWFgtnNKi7UuGi4jbaP4guAT39KxLHwxcSXlvHeMbYTZRHlTjcV3LjJ5BHerutW9npOrTaHbal5yWcimC+MDIXVlGcqT8uDxnvivTlCmqi5d0JTdml1MSZFWYrNMZC4/eeWc4bHGOx6/hX0AsOk614B8L6CF1PRZvEwMcb2rCHzZFVEbhcGZd3zqrcYLYyRXz5eSC5kab7VvYvgEjBP+JNW4dT1e3hRH1CVdmxYnLkvGByAhzlcc9PU+tTisL9YjH3rWdwi4x+JXR7n8TvE3h+HTrXwf4K23ax2kFt8kAdbghtpnVQdquTvB4JxIeRivDNZt76zu2s9QtpbeaFjviaIxmJs4xtPIrb+FsNxe+J7mDR9Pe+1KRcWSNc/Zo1dj80kkuQUAUZ6jnNSfEvVvEU2tT2PiDWrXUbiLAV4ZRMiggNw2T8wOQfXr3rLC0vq0/YrXrfqKclKeisjkVt9Q1q9W3/fXdzJ8qx/eYgdvpXq/xc1fV7+6s9J1rRNMsNRs7WC4kjjjIu490Y+QSkDchG07edpBIJ5NeWWl3cWtxFc2crJLC6TRzLw6MpzkHpwcH8K0bi41bxDfNqOsald3k23AuB87NtX5FOSAF5AJ7A9O1dVSm5VIy0srj5o8thkl9qDqNPmYFIzvSIr9wtgkqe2cLn1re0PTbHT/ALHJd2S6v9pt/MNqZXjjDMSpUkYKsOCGzg4Arlbfz5Ltllz5q8Pz0xjp9K19D1weH9fbVodNtL8bifLuFJC+vfGTz1zSrRcotRIcbvyO/wDFHxNtbHwhbeEtHUXEv9nfZtRjkgjSJH3EoAgXG4bmyefvHnOTXE/29pM3hOz0t9LPmxX1xdysAPKO5UCRqMZQDD5wcEt04q9qC2/9n/2jruhzLfa2gks5objaI413KysGByG4wfRcA1ynktb29zCthOI/NAabeSsZz0IAxz61jQoQjG3W9/maqTceUtWt5qlrY3y2+oS2lhcfM1uvKSknK4HPQjr7e9WvCuoaXpGsSahqs92n2W3b7K1tjcJ/lIfqOCNw4IPNUYbVmzH9qW4j2bjx/qznjr2+lN0mxF9q0VpFbyXEs0nywqNzSHBwqjqTkdK3cYuLMoSs7lvXmsZNauvstjLY2t6vnRwSS+Y0IxkAtgZ+b+lZNrs8wPOBkrmP3PrntXU+KNPhSx03Vv7V+1b2ks5424lglGGCFM5UFW6nrtNYN0g+zrdQ2zFsMrEsNuB2UfnzTpSvFWNJqzKZln+aa4bYoIGBzz+PXNJNuuCu8Ft4LLxgZ74pY7wN+5nt1Mi7Nh7FRkcjp3qbGoarNuhgjEVvwAONv9TW2zJatsVJI0kU7WOUzt460RRbwFBVCc8vwP8A61K4CMxWQn7wyp4I9qcsaGIReZ5kjcFSOnfv61bYXJNIupLG787c+zYwZYz94lSMHHUc4Psa6TQprrVLWe+jFlamJXBkuZliiD7GfgEYPC4AOTkjHWuXEMJZlhXBIz97AQg8gZ61JeLIkcluqtEq/vDk8M2Oo9e3FZ1I8/qVZEo8y9juJpJQjIqyCNl5Yegqv5OT5nm+YigKcds9qdHceY0l95gV3Y5CrtAz6DsKkkvxNA0MkQMk5X5g20cdMAcVWqYrFf7RtjR4VkWTcV39semP1zVyS88tYre+mZRIufMZTwp45A61TkWCOJGjy7r8p/8AiqsQNeMTJJN8pQqNy78Ej9KJLqPcZEjMrhWDlfmJxjP1/Kp9Nt5L7Urazt4TM9zKkMcadWLEAAZ+veo7WynN19kjIM7qdq568Z/xqa6C210rQIYirBkZXzt7gAjuDTTV7Mh6aGxZzXUniD/hE7rTbWRPtn2PzCm2RP3m0nIOCfrms3X7eTSdbuLGSIGTT7gp6E7T3rU8OSTSeKbK6umzK2oQyyE9y0inOa0/ihp62/xL1612dbtsDtygNelLCx9iqkepFOs3NwZyVtfNNeGSXcjKWbPXr0HPT/61UJIXaYrCredET5nb5q2fGWjvpdzbSQYCXcAkAHfk1i2F2sErebbiZX+9nqe1cE6TpysdFramvD9qaxku7WUo2n+X5hjcqQCSN3XqSf4fTkUzTdUuLPxNbawty1tILhWZocrnnBHUcHoeehNWNFuY7y0v9PvLt7d5IQIXWPIdlOQr455HAPY4zxWPt3SrHNN0ONzfwjPJIrBK/NFomx6N8btG0+08QvqFiwhk1ArPJawkSRoSoJKOvBBORx3BNcJcfZ57WOaOMoInEYjY8nI5I/EfqKu61JJNp1nJJIyz2sKRp8xw0PIDAHrWWtvdNbRvtZhyqfnzUYeHJTUZO9hys3dKxI+qXi26Wu1ZLSOXzY43Xd5bEjPPXBwMjoa7z4W6tqllq1z4quNUuY9J066hN5bwx7kmR8xkbdwGQjHAwR1FefKtxZKVm3xFm2qrDB9DjPatS3aHT72wuVaGW1uJMTQ5PGBg5XIzgNkH1zVVqcakHDoxXaOz8G+KNIj1u8tfEl1JY6Zc3YuHuxCzSGGPd/o5KfOqsSB8vtnpWJ408TJr15fyCwt7BLq6e6gjijKqkbKAyj0yVDH3J6ZIrFv9L1DTZGkvYZYFuVZrfzMjzSpwcfmKsX3iHUNQ0trfWLVbl5nObiZB5kbkABlI5XheR0PJPNYwoRjNVI69Bqz1IGXVtX8hry6XCWvlQu/CxpGCQvHT/wCvWdHc3OTIWIcnq3X61PBIbSNpFheRnTy1IBKn/wDVSpG183mKvlA/MM9OOCa64tLToK50P/CSa5D4bFu+qRxW63BvIQsY84zsAj5bG85UDAJ2jnjJrcsNN8T/ANk5k1x4tE1yxa4WaS6aCykkRQ80UhIwJPlEfu+0AkV50rSMrScO8eWPpt6EfyrSsNbuLTT59Ojlle3mVi0EjExdiOPUEZB9aylTsrxGktmdf4M8aabpUaSJ4fs7u+dmWG2uI2khk3bSN6sfnb5eMYIx34rpPhvfyeFPEGn6v4lmiuNEudUEV6EhAvliYGNm+fCbWIClXJGOowa890/XWhurizum3C/gRXkjjRntyuWVo/Q9iMjrnkgV7PqGpeE9c8P6LPb3SR32oXtlqGqK8m25hdVP2hlDDy/LMhRhg5Vh9wgsTx4nlhpy/EbUlF7mDJ4Lax+KV1oeoLpAk0W/upNT08XqJEsUZLlYpk+ViVwAFzlumRzX13prW82m2slm2+1eBGifj5kIG08cdMdK+SfGPivUPHfxj87SdRtG1Ay29npszvHHHPAz7o1lcYTcPMw2RjK4wBgV9iR2slrEtnM0bNBmGUpt2+Ynytjbx94HkcccV+j+Hda06lOVr2TXf/hj5LiSm7RktrsYq7c7flHXFH8+tSnj5uoz1pV5UZXB7+9fqh8nYiXcP4R68UD5mH86k27mA707yzt3Lk46U7lJkQU5LYIo24+8BlvWpVXPuKVl2qc4OO9ICLZzlsnB9KOOCvJ71Iy+jY79akjtZpI5biOFjFbKHmkC/LGCwVcntljgep6VMpRgrydkNJt2RBhU+ZuGPHXigno3A7Vp2On2Mun6hqF5eLH9kEaw2yn97cSOTjGeFRdpLNz1UAZbjMhkSaNiTsePiRP7jYzg/n171jHEU5zdNbr/ACv+Rq6c1HmewrK33Vxn0pAm3kMcHpUmxdvfmkby0kCuwQlchS2OB1ODWzajq2Z2vsIsZLbQOvp1xXonwy8Jp5Z8dapo76nbWl2lnpOmBSx1bVG5ih4/5ZJ9+Q9MADuatfs5eHPC3xA+IGn2OtQx6npU9rPOqpJ+6mKrwCVPIzk4z2r6p+NOkw6P8MbpvDsC6YLK7guR9iHkbSZAjN8mOSG59a+N4i4g+qzWBpLWVru/R9vXv06a7fQ5Rlntl9YqPRdPM+RPin4gmuL5/C0epLqEltdPea5qUbZGo6qw2yMv/TKIfuYx0AViPvVwar8hG38+1dne+F7O6ZpIQ0EjH5gv3R/wH/Cse78K6lb5aJVmHqrc/ka7sozDA06EaMZWfW+mv5enkc2Pw2JnVdRq68jD2rIm04+bjmu2/Zd+P3gn4C/DHxleeNjeMsWoQQ21haRhrm4YhwXQMQhH3u/8Brj5rWa1O24jeIjtIpXP51z3wt8NjXvFni3w7a+IJ0keyl8UWEENmLiOC8tg8G5+CUBEpJOR90HBxXBxg4ywcZRd9fv6/odWQR/fSUtNjDh0o618YvFnjbTZpU8O6vqUusaVHNaJHO6TNISGblgu+RzgdTjJ4xXatkYJaq1j4dm0HUL9bprQyBzCPskvmRFQ7NvVsANuLdh0A5q7tPQ9uw7V7uS0FQwcLdUn+B5uZVnWxM2+jsMKruycjJ4o8v8Ai69uvan9TyKAv4cDr9a9U4UNC7eOc9xSBOmeak2eq856eo9aFxnrg59aAGBf4etLt+bPOQKf84yMjHY0Fdh6cA0DuRsrfe696TazfKV+7yfepSvOF6+3agptB7bv1pMa0K6r/s/L1oUE9E4NPC7eRtAHAH0pVDbd3Bzz9KNznG7Pm2tnnr3yfSgglRzj2qTb9SBzSejNgkc/40XGyPb1VsZJ7ml57DoOG9KkwG9M/wAqay7g2Op6U9w2Glfm9O3Sl3enJ7+1PI6HknvSbVQHqM8fnSHrcb69AAOPemqrdVBGR/nmnOvH3RjgU8javzKCT196YrkbLuX7uQeaHXt1IzT1Xn5uPrRtb5vm4x2FADCjN8zcY447ClwNx9Rjnpmn9c5/D3pCGXBxx1wB2pghm0c/w8fnSMo2/MOGqQjp6D+tHy9QOR+GKBDcMeRj05o2lVGMgg//AK6fg7hhgMUm1uucD0zQFxMNkrt4/nSeX3XGevNSbdx3fh9KTZzj+lCG0IozJtLD+tDKrA7V4H5UuGZtqkZHT0p2AQd4Iz09qAIdpZflzkZJp235T1/z61Js/wBnbjihY+PvHIGfTNNk7EZK5Geg5HpQI9o5OPrUgVd3yjGeaMdO5PQ0h2G7U4x0HrSYj+b3HT0FPaS3gjM11cJDFGpZ3dgAoHfJ4Fc/4k1+bR/DupaibERz2tm0ojnkwskmCUjG3LHdt6jkfjmvn8+4gw2SYepOo/fUbpd3sl82d2DwNTFzjyrS+pzvxB163g1CPw/YyCN54ykc2391abm2F5CQQpP7w7T224A4rFMtjpa3s+kx3i6LpMYuGlEPE0caE8nhlJdc4A5yMVYm1XTdSfRZJoXuZ7q6ea6jceZFFdbQzJvwBI6MApJA7cY62rtdQjtZLG3mumvHZnuXU/u4trEMvHyhdoCgg8c4xX8t4/HVsdiHiMS7yk9f68unkfoFOEaMVTp6JEFlDql9rl/NqV8+n2rWrm4gWTYschC7Iwc/J5ahnOOpdQCOAMbWdYOoa1omkaXLPfyyQzXVvCPvlpIgyXG1h5eyP5ZG3chAuPvV08lnNY+Hb26ttR3ldm43EHEUxjEm1W6btzADOAcZOOK4IxwyXltcaHocU1/q/wDyFdSupgjMzuq7CCpaL92CCqAFgBkgYrkpcuIquS0UfzBO2kjWmsfCun6Hpmm31rb6ne3PnXtujy4giiZj56mVh8m5QzFx/eB6tisbRdV1tvDSx61Z26tLff2XDFHsWMoI/OV1GMiOKFT+YpniJdJ1SbQ7KdrzRrXVZJ/sscSbFsoTIVNwyn5i7KvyJ935OmBis3RNL8F+KL0+AdFujPLp8lxqUacubbGNg2AAS4JOZGY56cbuO2lFU4uUpN7u/wDWhD952ijstNhtNA0+31QXclxq5tWisNPjmXywGjws7lvmCAsOG5GwcZ4HnR0/xF4j0vxJc+Kre7XTYL5p4VilYrPeW48uTazgFwBjAzx/DySa9I8Saz4fjmvdSvp572x8JxJaf2hLaw20M1/Ey+csKnBZRJ8qqC2SDkAcVwLfFK31L4iReJtU+1xWVvpt9eW9oZFheFl3YXZwojwFKK24sxY/dNLA06s5yl+PbrZFyhKndHF/GDx1oMetaWbXR47u9FkguV1KEqIA4DxqUOf728EkkZIPSuYv4/GnjLUNN07TTC/2sLpPlWdsFtoWkmKgLt4O8szFx1Ge1Z9roureObjU/Fd9o2bBoy6COcqy7SqgxlyS+OVwSec+le9/DGbR9JhsLPTvCcpEGmz3Uc8czB4H2bgzSMSgUy+UMKejEcAmvbq1I4GilTjzSW+pm+WO5buPAen+H/ClnpmrJYXuqeHmmt7eaXTyzfvJHc7IUO1yrF23twAASQBzwfxCs/BPhnw3pGoeF9JvdQvL3WJZrjxDdQyC3uEbdtMSnMaAsJCcZysY+7ggy/ELxd4uvPDNhpsd5qU95qMt3b+RpMIkjZ7hkYQbxh8GInOBhuB0BrqfE8WjeEdK0Xw/rXiK2i1LQ9FXSYrKS1DzWxmQ5URqxXzAxc5yMb3znPPLSrVKcYzqaybei6jjGS17l/WdcvNP0TSdH2i91vW3kW4jv1uFmtYBlkYzDYQqLiPg4xubABxV/RZ9H8P+KNUXVPG1vrNg86wwaTBE91M91JLGzyuxyJFAj272UgKD3NcJ4U8YW/jbQ20izuNQ1DxDr7vbuixefPDbI6oxIU4gjZRueQguFQY4IAofE/S/tHj7R9I8NzxadNcael3FdSFYLYRw7y4PQqCEQjt0wDWCw7lL2c9L3b/r8NDTljdRe/cwviJdR+OPEi6fcXNw2rT6lKr29zK7wQLuUIqkA7mYtIScAYA9arfE74hatZ/EKyubOO1lh0RvLt0vIVuIyuCkoG4YZXyx/EYPGa0vjN4mvvC/j7RvG/hWBtNmurKHUbaVEPDuNzgsRh2DEgkDkba4rwr4L8WfFptY1C3mRYtMjFzd3EzhQ25gfL3MQA5AJUMcfIa9TDRiqccRVsopfc3oEqXI+Xex7R4a0PT764v/ABlrevJd6JLaOJo9ssJ1uZ2AjWRM4YKZERQBj5W4IOa6WK6hn8QWljNJd297aWsclja6cjSx2jxk5SHd99yhI3lVCsT3xt1/AvheGHRYdF3XEq2lrDJ9jmMazTW6xqI3jROHYEgAk5zuYEZ58t+K3xlbRdUl03wUkdw1rdOq6pkk/wCr8soE42EHeC2TkAY6mvDjKWNxEoUVqvu8jC2y6GVY6D4o8O69q194Y0PS21ZoktYLGS8854t8uZwEYs7FMIMtgKT1OK4HxZceIPEUOm/bfPhCxN9na4Ta8kTtwd//AC0GensPSt74d3xvLPXPFmpWc92bCN/OvoQ2+OSWQE+ayncEJGB65Irj9Z026jvreCTUpmmkRbiGe4kDR7Dk/JyRuDAjg9ucGvdw8Wq3LP4lbU15WjrfDWj3+r6ismi+Hbe4h0HZf6rc3UTqUmEZCwZVsOhKoVBAJZiDgGvR9H8D6z4g1vT/AB74o1zSNR0yBJ5kEyMlnAix74gSuVU5LKVyS2z/AGc14/o/jzxZ4f8ADt54f8+WTSPElx5l2brd+9nUFdwKkEjOCV6MVGeBWjqPx08W3wlt1uBa2kdxHcwWokd44ZI1KttUYTa4PIK4+UAe6xGHxNXmVO3ZPrbr87jbu1c9I1PRbO38VWWt6ppNhBNqWkf6JHcWLXFlJMYsIYYpNhzkqdxHyhujY48Q1S41Pxj4sW3juUubzVL/AHARfLEJHbLbAQNi885HHJPFemXzeOviV8Lb3UtXs4V1DTHOpJdSQmMfYFi3Msbn5c8q3qSwwetcj4E8dR+CW0268KTRP4m1G423N1e2/FvuJQKjAklCMbuATvI7CjBQqUqcr6zWnkbOnTlJe9pYd8atNi0TxKNBs9bOrQ2UNvHHdKhRWZV+YQ8/MikFQe+OOMVxq2uqLJLd6hJKiJGvmGWJjkNyozjuMkfQ16d8YW0zS/EGkSapa2Mt2+nxNqi2Vz5iQzK5DKjL8qnAGR/eB4Feba1rDXnm2+h3U4sbtlZrSQ7mG3gc/p7114Ocp0o6fMxUeXQZHfW1ncC401Ruih2rnpI5yCcH68UukyWKavbTa1azz2KNm4jhZVYj0BPC9evarN94dvNLsXjvswT/AGOC6jDxfejf+HIH3trBhk8AHPOKI/Dd5/ZlvqjSWvk3A2wRpchpXYtt3FAPlGcdcHGMV0ylG240r69j0nwjceEbfxhrVrbteaBZ6no7rGbhodrpI6soaTBwg2spIDHGBjtXkeuyR32s39xaqGt3md0YgKSO2AOOgqxPbTpeRabNE0dzCWheHps5B65wRk59Oad4i0G+8P6pNpuprGkoCv8AupVdULLlQSuQDg8jPFRQpxpTvfVr8hXu+Yp2n2eSP7LHHiVn4z+X4VdsZv7PvksYLp4hM6wzbV4UHj6kf4mrzeG7zw9ZpfayI4JpZQi2zAmVAYxIjHttIYdz0xisWaZrrUppnYguwBbPoK1uqnw7BLU0NdSbw7qlxY3VuY75GD57xKRlQf72VIOaxT5iOJd3BycE9SeasazrGo6nqTXmoySXE4VLfL4yY0UIi8egAFQ+XIy7ZI24bac9quEeWK5ty29DcbxLHa+D5fDLadEI570Xa3Ah/egYA2q5PABzgAdznOavaLr2m6fZajC1q/nNaukRExQtIwATd1DdN3TkrjjNctfSqbQKvzAuB/OtXwul/qTXGjaTapPc3tuYTvI+4CHIG443fLwe2OKynSjytlRmxLjW5tQsIfPtbaIRL5M0iL+8mGQwLt3OeOMcCvRfgismj+OLXxsbVbeC0VY43j3MvzMEaQEgncA3RDuBK9M15Q9pcRtKs1tIk0cnlOqrnMgONvHfivWPAFz/AGfZ6Haf29eabYymZbqS7O2KO5lbyyI1UMQy7UIyNxKnBXiubHr9y4x66Gblyu5xHxH+x3HifWL631aZ0k1BwILmBoLleT96PkDHTrnpmsRlnu7MSIzeYpOB0yACMbfXpXpXxh0Gxt9PbxU18l7q0+qMk8z3bSySwGFBGGUj5Su0EtnnefQVyWgzaGtsZ9e029jZhlLizkTDAqcKQ3PJwCR0BNXhq0ZUIyjrbQqpq79zl4YSWV41Hv6fX2qzbzT2si+YDned3vnowH54p8iWsN5c7Vmhh5WKGR8uPQMR39TUXlytCAtvIZAQ2fVc9PzrrvfchkVxaPb3z27cKOecHCnnt1olhjjkJ3KV4BZSMj2Iq3eM0483aITbMVVG64PPJqBLW8md2hsnuHmXd+6jLYQcliB0AHXNUn3HYhForyyNJdhC33D0zitm4jW40GNZmhS4iw+7djcuOmO5rKtoEmm8hZFc7gwbd8pHoKfcWywyOkkhKldsP+yR2qZK8hkN5GbeHy3z8+GHH3vXmljtfMj87aVUNhFznJ61LczrMym6tUEgQKxViQ3YEfQelNhnuI/lsNwUYJXGeVPBzV3dguLDHbvD5l2/lhyVTbzk++PerNtbRrYzNF8rpJn5pNny9CMHqfTFQ3as/l3DLGvnTeYu3sRwePTNWLoyXFms82JZVk8uQkYynUYx9f1qJO4XKu63muiq+adjZEmPm/H/ABp32fbJ9nXLbSRlOQTntnmqsTxrco0LOwPBU8ZFbMlteafeWFxNbMRNsmj3NhZEBHR+2entWispJMGzTtrFtF8RJZyyNIba5hZmOefut36de9dZ8YoBH8XNUY8LJNE/X+9Etd9rnwu8L+N9Ql8XaL4sfS7vU2W5ktLu3zCkhUZVXGMAH1rkPjVY3DfEqTUreLzrV47X99H80ZIUBsEcV9POnGNBRj0scUIzjV95WOF+IUlzI2mSSRj7OlogjK9TkZO70Oa48Rxld0Mh3gAYxxj1zXpnjKzhm8O6FcfMweJo39BgJjH5mvPLf7BDdKk7SNnO9lONo5/M14uMi4VGejGP7uMv63JdLkEd5BNNG8qxON8acM6nqM+tWfEUmi3GuSzaDDNDZsqFI7hgzqwA3cjjGelVdMuDDdma3JiD8gKM8duvSm3sqzTG48ny2c8lRwTXBvO5F7OxfhtYZFmRrgnzI9q7gcIxP8sCnXG0xrb2Mi7LdSQ2cBmHVvx4qK0kWWzZfMVZI/mDk/wgZweOh6VVhkmfekaBI2Ljy1HQEcgetQo6jshbye6vAs00m/yx91h93PXinabEq3UFwxhke3fzVjcZV8c4x357UttGpBtdv3sY+blh7elQxxzQahHGx5V9u4dwOv1rTS1hXudhrmkf8JRp48QLqdvJfKGa8t2mEcsTZwAEOAV68DJ9aw7OOSbalxFJJA5DeawztI4H4VHLDIs0vytuclc5znPUg+uafZyahp/Mc0kTxt8ozjB78VlSpvlsmNctrDbrTNY0+4S3CvkEsu0Z3A8Aj25HFT7o5JII5IhHcQ53/KSGUdeP51PZ+Jr6zkD/ADGQ5Xr1z15/z0revoY7e8nj1KSOL7Tbxzq0v8IPICt2BOauVOS3K91nDbX1C4kj8tnZuEVF5x2Ax7U+NfscvzRsDH822TqRXUaJpFvOVu2kkDRL5YNtg4IJwSD1FZGpWcSatMsNwrxsuW3Lg7xxj2PGcU+ZrfYTjpe5SWO3muvN3eTlCwVVz83J49s4Faja1qV5f6dY6s4tIILdLVXaPOyIkZlwPvNjv3wKzLpFt7gKd/mHaYyem3H69Ks30/25obyGRmKIIQshzsA6DHYcnFDjzNDs0bOoW+h6b4ulk8Nw3f8AYpl3WbTZMgXoSHwN3zA49Dj0r7j+GWvHxF4Ts55rmylnhUW8htZCQSqqclWGVJyevoa+GLQ+dpcFxHcPOLB8tGfupuILY9jgflX19+z1pdpN4Nj1mxZojNckrl9zbNi7kfPP3uhGOikd8/UcGVq1PMVCnqmnzX62/U8PPYU54e8+j0PUwp5BAAJp/ldCfSrCQ5+79elbXh/wX4k8UTC28P6JeajIO1vCXA+pHA/Gv1+pVhSjzzdl3Z8VClKo+WCuzndg5XaVGPyo2j7oznOBivVPFHwA8Z+CfAt/468USWVha6cImktzJ5sxEkioD8oKrguM89M15q0a8e3TFc+FzDDY3m+rzUrb2Nq+DrYZJ1Y2uVtn8PP49qRYyzE8EGrJj3dCeO/rS+S3G5c89q6+YwsVirDg9varq6rNHo82gDy1hnvI71+zl442RR7gCRuPXmoSvZsAnNSRWpkjlmXBFvGXkP8AdXIBJPYZK8muTG8vsry6NP8AFHVhE5VOVdU/yZk3On3ejXWn/aJzKtzI0kDsuCIZY2ZU752ldue+2pfJt474tGpE9xAHk44O13UEHoflI+nFXdFtr7xJrlzodr9ommtI0ngLL5qbBGz+XGByv3WA/wBon1r0nwn+zz8UPF15BD/YkelWaQmZ7jUcxOBIyhMJjeR+7c4xx+NeJ9foYN/vqiXLJfdqv6sexLC1KyTpwfvRf36M+Z/iv4u1jT/L8KaCuo2V7qCgR30Nq8mcsPkiKgjdjJJONuO2c1u6b8J9W0XRbC10uS9j8RajAuoXWsW8hu9Quo5gGiiAlTMaqmMpGeXLEFlIFdN8bvA7fDz436f4FuJrvUzHpTy+dZxqn71oWYttc4+VXbjPIUcdq+5P2cY9PbwnJs0IWd9aeRbSzSRgyOqwIqjzABuAC9sDJPAr5LN89p4mu5azjrZbLye35o9rB5fLD0oxSUXpfqzyD9l/9nH4j/CjXrTxx418VbtOt7aeX7G0HmzyGVWTDvkFWztcKqtktjdX0R8Wov7U+G2t2iqyyy2nmxxvwzFGV8foK6y5h8ya2dlLLHISRnjO04JHfB/nXH/Em0TVLC+sby4YW8dl8kCqGDyTF4gzAjI2krg9iSa+SdaVSopyPWUV0Pka8tr6zkVZLJufmIY7SV/vDsw69KRpY+ykE9iKlVpmitJvMBto1a3UZ5V2AkAx2GFfp3zTG2tj5Rjn8K92E+a55048pVks4plInhSRfRlyPWue0HwX4T8N+KYtcj8M288TrL50HmvECX2hmBX7pwpAGMDe3FdK0bbT5bMvQ/Kf8apyyXkcqL+5lU/eYko2cjoOmPbirm3OPLLYiPuvmRi+KNPtpdTu9S0uz+y2UspeG3aQyGFMHClz97HHOBmueCrxjJHeuw1CTztNmdo2RihO1sZX/GuT24zkE193w1iKlbDyjUd+WyXpY+azenGnVUoq19yPbx83Q+venYzz2pdvVjwe4p2zbyDg96+kZ5FyNRtwB29qQL2K5BHNS9W7DPUd6dtKqFXpSuN6ke1mxtXjHNNaPpnv3rvfBPhnRdS0177UIJLiUTGMRmUqigKDk45JOT37V0QbwfpMbXEdto1sqcNJJ5ZwfdpCea/MeIPFTK+H8ZPASpznUho7JJX9W/0P0jI/DTMc5wtPGe0jCE1dXu3b0S/U8mjtppv+PeFpcdo1JP6Vfh8J+Ibpf3GiXZB6loSvP1OK7LVfjN8OdHTbqHxA0e3C/wACXqnH/AU/wrktS/ab+E8DNHp+tXGrzgnEdpbscn/eYAYPrXxtbxmxtb/c8A/WUm/yivzPr8N4Q4aH+9Ytv0il+bZgBOpYEjbml27cfKefalVc7cKCRzmn7T/Ewz2PtX7/AHsfgjYzH4Z7etIy7nHfjP1/pT2UYHzDI6e1P2/LwvA5oTEiFh8oYjr04ob/AGee2fSpGUBd3J7fSgKuAWB/Lp/hTBjF3Dgnd36UnKhhUhXd1y3pSdjls55pjGKW3BeMnt9aU/Kpz0HNSKMYbOSTnGKAoHX88VNwI9uWDY4H8+tIwGcc4AzUq8sF+92pNvPTOP0NUDsMKt/eIGeQO/tQQx+Vm4Pp2p+1mb5v8M0u0gEqeR+lAIj2/Lz/ABckU/qcZAPSl27m3Y6c0hj7rg47mgQm3GR1IpNm5R/eP5U/b6/KPr+VCbj6gjrn1oAYyng/U0u3d6nHf371IB/smj5Q3y9On0oAZtbjj8qQ9evHc09o+u3FO5HofUCmAwrjC/1pmCQFJBHXPSpdnyg7eD1pWTk5HH86QnqY3jC9udF8Jya5p8gFxHq1haKrpuRo5mcOCOo6Ag57V2d5p3hm10XR7iTUpUvNTF1HlvueZAsO4NnhVy7nd6fhXEfE51t/hbeTtcRxY17Si3GSVDTZwPclcfjVO+1KHVdPtb66aSfT7GW8liSEhvNafy12hc5YfIvA67iK/LeJeIK2VYjETjWcVFwsv+3dVb1PuMry+hXwdKVSmndS1+emo7xPrmkxxraXN1a/2TfSTwxzSTKkkkSoCJRkFRuJwAc9QehriLjX9Rvr7VGtoVZreWSJZppjiMrgSyFVUFm2lDkddpA4zjY1rRdFmsZNQ8RGHUUgje4s2jjXhUI/cRKBgEsCADnBAz0rF0C4t9Tmv4rCaBrHSxOskiqri6uZGXCvuwcrvOe20D1Nfi2Y55ic8ryxeMk27W8kvI9anhqWFj7OlGy3IYVjt9ci021Zp47a1jt4FaPyv3oYt5jHooLZz1OSATgVoX2oQ6bHqF9qNvG6Ws6R2kMAdkjhjmBIYA/vSWwCqn5t2M4wK5y91XTf+Esn8L3gvXvNasjBcXKhyHy6CPynAKoFAcYHGTJk8iuot4UiaX+z7zOhWcASFWhCHzlbIyzZDAdRj+6SOleZXilFczLd78qJPDfiDxJMLTWtQ0WNbG5+0XEiFkS6nL5LTTI42KoVlVUI4bHTArgNV1RvDGm+JIfFWqxaVConn0WfH2hxuH77bEAdzOw8tJGOI97HkAV0fjS6XU9A1K58MyQX017G9tbSHeuJAyxgqqncCeBlvTPGa8c8QeKdNube70XXNJZrbSoFt1vYJ1bzrtGOVdnLfu2VWXagYB8mvRy3Dc75radv66iqPmR23hDxJH488N2Pju+tXtLHQ4E0m3uJYwUXUXjCmSGAcylPmwT3lwMtnPZaBN4M8K217LO2l6cpvhpFxeQW/kOznDpFJtyUwhBON33PUkDz2Qatpui+DbPxlJp+jzfan1i5tbmBY43upJFkiVIx91cLHu2gFjgHPC1s/G64h8QXnhTwnrupWMdnHeTyzR2EIiMmZvLEamPLSzMAwLNglieiiqxdKNSoqMNIO+3ZGlNcsXO+qOb134mR6xrWp3Wh3en3ljYXCaRpljcqsvmO7KjzhQu1s7zIrMxxt9eaoaH4dknm8Y+IvF2g3t/Z6Tby2kNskxa3SRpWEvC9diRkMTlRxn0OJ4s01JbHVdc8J+FbvRLzSr9Y42hk3xRxRxKshBXglyPlxn5QeeK6C3ij8JfA6G1vbTzJntXv9U0y5v2R40nkBUiNcH5lmiwrZA8xmwcmu+nGlSpRVFa6LzMpylPVs56Hw3J4q8E22qeJvEt9a280Lz6Tp1jbo0aW4mZEyMKZGaZlACDgFvw9V8I6XhzZ6jb6kmm2dpFNeXF5M0sLjylVVCDADBcxhOVOGYjjNeU+A9S1HxJ4W8QrpluPDtrbvZx/21CrsXn3kQ2vcEkNI5AxwgOOK7DxB4hVb8aLFbyeIYtP8uZVtLxUt5FjVUdsEBiTnHr8x7YAxxcKtSTop/8AAWny/EfKnbm0Roab8UtJ8GW8WpaXqkUF/NI0t75VmCyxhmWJTcEN5Cqp5Krn5DjJ5rntU+HWrfErWbHUrbR9UtP7TgF1HIu+dVMhQxbXJ8yaRt7OVABG5V7Ejd8N29/4ikvvDeoLZBIJ7dbcyRp5KwiNUGViyqgvkMB83B6bjXc+OPGzaXq1rokXi77DPPby3/2i6G7CQqVESsDwzELgcAbmJJ4FYTqRoVY08Orzel/IUZt+7PZEui+DND+DfgXUP+Ef023u/Ftlpv2S+1CQqbeS4bEmwFnzyBH93GxmAzzXkniz4ZPd+KNA8Ta98S/DyardMlxdWbSGeOxhSMbo2I+QyKAoKD+OUDtmkh+L+o/E64vPA/8AZotNDsLNGsLGyLbz5W0ySOFZfOkZV2hO5YE5IzXIQ/DfxRHLdvZyW2k31pLFG1l9pSebzSS8iADhdoUFl3E5Ug5JFdmHwtSnUnUqS95/lbb/AIYbnd3SsWfiuLK78ZJt8VT67Y3tvEsYugXnt8rtVWAwOibfk+UE+2aT4J+HvDvirVvEHhvUtMuXuYbSOOOK3uxFGNvmK88u44IRinOP4verllqusaL4PksdQ0/SLqzn1WS3a7aN3/tKz3hHktwmUaFTD8z5HzfKvfHb/CM+B/BfhfUrzQ9O1DU9U1Dy59UhkCGO3VpJI7aFVznDqd5DNnIX0rTF1pYXCSp9dlYqMPae62dXdeHY/h/4ATR7TVrxv7ZuzcXE09ws16sAVUSOJ9v7qN9ikkgkYCgZ5r59+Jy+F9PsbDRrPS9Qgv7GOZobu4m2NdRPIZEaSEjIJDnk89M4r1jxdrU2j3yahqGpHUL17pbyz01YiXt7xss8kzttyEG35AMcLnHb5k8TrM2rX8DyJcy28zK0kUglRstjduUkHJPUHHPFY5Ph5TftZS879/UiUY8/uPQ7f4c6tpsPhDWvDh8E399f6jcQSy6hZzPtjs84ZJEBCgh1BjPdmYHtUFvbeHpNSNl4x0DWpTp9vLLbxK3lyGBfu+agGUwSSfqB710vwfh8LQ22n3Wo2uvX0tln+2YTIbeys4i+1HeRMOytn7g4JzkNxXovjW1t9HfS9N8OeHBeS6hvm1C6htTJNcwspV1jDEyEHLAsCTzj1rXE4qNKu4xTu+t7bf8AAKjdyu9kc5pd34Y8L6VGlzaajpem6kFutHLbvtdxbudkWwMpVcAkl8ry5wCAM81da74G8O3A0mPwppsUMEssk15PPOBKGC7IAApfeihlLD++2cda9B8ea54g8K2ugXWvatpIubSfTzHHGsQltUVSgZohH/yzBYYJ4bkbqihPhy38ZeLteu9PtryQ6fDHpsd63mJPJllefG0qqMAqs4J4yM5JFc9PEOEXVkm79nvqkQlGUvIh+J95rVv8MYNV03WtKstNv40nSzs0a3nnt2Uwovlj5PL2k/ID8oz1Ar5n2KJRM7bGAwpX+Gva/wBoXxRb63eaRDY2trZwTaTZy29su52iidAU+YkkNgnPPTAAFeNFI5ImkZjvDEDjgnp/OvXymHs6PM1bmdyrcjsQSXExdoJJGaEjb8v8WDnJ9T9am0+RlVZfJEjLJuUNnDBedv49KntdHmS6tjcqzW8hLbo2BOF6n256Z61Y1rUtMvrorotk2n2ZZlRJCXfYDlWZs8sepwABnAr0XJPRDkdToPiu+0i1h1bXLKa8sbi7W3kC3To7wqmWgBBz5ZUAEEjIJwcjIoaPq+nWt5aTQ+F7UKt40klv9olX7TA5H7gkHGwD5Qw+b1zWTNpt5Fp8OpXTWs0QkjhEkMyttZlLBSAc9OvHXjrVzwpp+qXGpNHplqLqWzj+0rGqZwqyL8xGPp1rlqRiouQoqT0O3l8OSXniKbxG0eqC4nhuIrc6XcLL5EqLtXzHyT5arjIHJVHPbJyNN0uXTvBctvDPb3E+uyb/AN2qytHCpI+YMNyyEgt8p4GM9a1/iRHrN42m6hJNb6Yi2v7ySFDF5s0gfaQA58z5BhpABgNjmssavocfw903QdDt3bxDZX73EkyIdzxtFhizjgoDgBT2Bz1zXHCcpU422b+4hRly6syfE2n6jN5niDVbuWSK98xrOeaLP2gxsqbQyfKD3I9j7VzUcK2tnNd3TEjcAq7sMx7EfSt660rxHJClk1qZprJhDJb2y5Ee1iM4TIYnnLfXrisW+tJ/LuI5i5aGby3HZW9CPXrXoUnpytl8rSTtoU7hpg5uGUyqSMsTnLEZqWPzVhW8ZZH8yT5st9etRW7xqqR72kkYkbSPlVSMfnT/ALPPsMMsyoY+FXdnJz0rfyALkyXNugJJkVvk+X7wPTgdDVm1SaONv3MUjFgIgvIz7+nPc+lRRrDb4ZpmWRmKEdApHKnPr1/Ko52mVmllmLHaDuX0z39aT10KUkjQ0O4j0u8hXVFmutNa4SS+t1ZlWQK2cHHUg/j1xXtt54uXUtD1a80D7HqLR2tzJJeXEMbyuwUjeFZeAiuOW3HcueprwG5+1GSNoWJti2/IPys2OTj1HSuo8L+L7rwvDe2x0+11iw1G3kt7i1ut3lxM/IkUrhgwIB4POB6Vx4vDuqlJbroJRi5Xkbfi74n+KvHdnJH4qhW881opHaO2SJo3VSo6DPIJ+XoOK8+uIZFi2pMNrOWXc2AOnQV0vhpLrUsWdsp2SzNDJO7H5o2/wJyD1qh438M6j4P1yTQNYhaO4jQPwDh1OcEZHPQjIyOOtVQ9nSl7KOnkHNOfxa2M+88wafDcX1k/nMdkUinaGA5/HqPc1FbzXT24i3B4xJvK7uvauy1G+03xR4F0mGOR21eyumguPOmVd6sqiIpHuyduGBYAcEZ6VxkseoaPJFJNCE+0Jvj3AEFMkZwDx0789K2pz501Ja3HJaWJYY4bi4MMczE8ht/3h7elWb5m0q3Fnpt5NG8sflziNyN+7+HjqCM8dKrWbC1vHaTaY5EEin+907/nTLiZvO85lVnUCTayjoRwRiq6kRWpFNbtD5SKv7xVy3ltwB6Y9RVmNJnsZNiLII35zyUXHJpJrVmhW+hU52lpNvpkDOe9QTNdRFJFmkjDDy/lPb3+tVfmG9S1eXd1Po4sZoYo4rabzVYja2CANo9j1+tZ9jM9vcC4GCp4cex61orcapdWi29xulhgOVDAMQDhcHuBzwKrFraO2ki2nz1bCsWyCvQ5HrRHTQaZNPaiKONnk3+Zk+fG+4E9Rx1Uj0NTzT/6GjEkkHymBUc5HUev/wBesx5HklEauUjC5OehrQlS8m0uONY3MMLeZuXkA/z6UpKwNpEX2PzZEW1UOAGx/e45wfX0rRvNdvr/AEfSNNnULHpAkiDrkHa7Zwe3H5+uar2t0tps+1IEjj3iOaFcl2x156+lXprWOBYI7eQNblPNuHMgkXHqR1B6VEnquboJXeqPYvD/AIL8RSafazWF9NHJLEJNjspjIIyNrKQcdB1OM05U8cWsj2OveHwrMSkcfnofMIwDs3Yycc9aj+Hvi3TrXw9pejx3Bnvt81xK0TmMlXOCSTwWAHI7gDFd/rU2rW+jyaoLOXW9OuVEMkHytc265wrIRw3Xkdsda9anOcIpxkepHMqzSjUtJLukzxPxxNdfZ7bSb7S7iySKRwFkhKj5sdCOD93tXmq6aGEwa4jGSdu5hnOfTrX0L8QL6w8S+DUvNJumJifE0ZOWDKD8jemDzj2r55WeNHn8y3QwElWUKC4989uaxxM5S1bOatXVW3LFRS6IW3t47MRs0mCd3B9c/pUUTXU7zxbm2qS7gnjr1NLGzSW6/Z1Mggyzk/eP0+nNLaSSRlvLZSXGW+X17Vyo57k1i0UcjyFkaMLuILcfQ+meeKbbhpLjzYIyGOZE3cflViBZILNmjiiMjSNuDLxjscfjUFpHMkbXEYVzBjEbLwc9fpU36hoUpLi4inR52JaJiVBXvWjG32q8SZVkh3YcGToPU/iaf51nqEZ+0W4hn52Bfu5PY55qC0UqjM3meVvVcsflBPY/ShsRas2mk1CUySBmjc/Lx+OR3/8ArVaa6STKzAhs4JqC1t1trjzWYMW5WQDkE+/pU1xCqsZUbcDzx/hXRhdZWFKOhDLHDt8xTyuCa9Q+Imir5Wi3Qj/12lRBuP7rEV5ZNHtjkZcjIJr1n4vTXVv4e8C6ja3Dxi60yWOTb0baykZz/vfrXr0cOqkZJnHXcklynnbaUyyLJDI6Ed1JBHp0qBY2fUIrOaNmeTexYnJYj+dIniLUI2fz4Y7luDyNpZenbir3hu5h1jxxpVr5LIZLgxYbphlIIyPrXJUwi5bPcdKpNP3ti7428OPZf2ZcI21ru1wUI+UyLjP5hlx+NcvZ6fPJMI2kjjCtgtJxznGPzr2j4leGrjT/AATZXksplaGMSopH3UG1G/8ARik/7tee+Dfh94o+JOrJ4f8AA2h3erX7gTPDbR5MSDG+RnbCxoD1ZiBz1rjqQdN2PS+KKaM7w5dajpeoW89pGryRXAP2WSPcsmeACO4OcY71+gv7EPwO8SePm1nSYYZ9CsNNmC30d7A4e0mwuI/LbDbmBcjOAAD7V896L+xj8XFjlk1DXPB9i7bdiTax5siDIzkwo6g/jX6TfsXanafD/wAGjwr8QtS8Of8ACSztLNea4usCea+w+2OOR5VVztj27eSAB2PFVgsZUwVb29CVpIyr4VV6fJUV4nq/hP8AZl+G/hwpcajbT63cr/FeN+7/AAjXA/PNepWNhY6bbrZ6bZwWsCfdihjCIv0AGBTrW8tb2IXFndRTxHo8ThlP4jipq1xONxGNlzYibk/Nk0qFKguWnFI474waDqHib4Z+IND0nT0vry6tcQ2zkASsGVgvPrivkDRv2RP2hJ/EF1I2qaLp+kSyiSBdQn814lIyV2xqT16DcK+8KKeFx1fB60ZWY6tGnWXLUimvM+dfDf7IGmwwRv4s8WTXE/8Ay0TT4BDHn2LljXaf8M8/C3Q9FvWtfB76xdLC8ka3NyzSSOF+VVO5VGSPbrXq1FdVbPMxr6TrS+Tt+VjCngMLSd4019x8k/ELR9J8E+F5F8QeD7Tw6l7bBLJliiZ2mWWIvJPIP9WDnYq5PXJ64rznRx4fs777Vc6TbahayqY5bZpXRJUJUn5kOQcqCCK9r/bl03+0PhZLut1nX7HfoY2UEP8Aug4GDx1SvzW03XJ9JVrnRNc1DSPLiMzLDKwiU/vCRsYFD/D0HQCrpY7EUqXxtqV76suWGpVJKSik15H6Q+Cfi98MfDF5Pp6+EE8PW+pGNvMhTz9pRACu4DeckAjPvnk1694L8eaB4t1hZtH8R2N6k1jtMSzIZg6Sn7yDlTtdePf2r8pLX4oeNrXV/tWpa9Dq9pCiFbcxpakYMgzuAYE/u++OvYV3ul/HPwc88a6zcTaRcCYSbrqMFARwdskZIH44rkqeyrScpNpvvqaKNSEbJJo9X/bG0K71L9rLwno9v58n9saZBIIVcorFhcQbjjGcMsXBOOtfR37K8lpb6LrPh6z8uNdFeC1lt0jKrFLmUsF4CsuCuGXKnB5OK+ZNU0Ow+LWn6Z4r1BJteWziEem6gJGmdIN+7YjZJKbhnBGM16t8H/idZ/C9hZatotzNE1utvLMJybh8SuwkYSdcbyMAgDHSidByinB30D2qejVj6xvLiS3WJkhWTfMkbbn27QzY3dOcZ6Vn61b2t5KNOuI3Jv7WaEMDwNuD09ec/hXnOu/HnwBr/gzXR4Z8SGHWYbC5ksoZYHSX7VGhaMKCNrNvC4GTnjrmvnLQf22PiBpus6da+PvC9lffYbjdIwjexuirRsjZByhxu3fdHQDjrXN7OXY0Xcy9Wt5odU0+aObEcGoPbzK38auHReOmd4T861GjPHbPPsKseNfJj8ReJ7JZI/tEF5dzxozcnZKZlYA4zkL29aPs0krhFRmYn5VAyT+HevdpO/4HBUXvFHY24sRxnmqs0aM+5R0ySK1ry1ubN3tbqCSGZMBo5FKsuRkZB5HBzVKSP5yrAZIB6VoZ7GVqEP8AosnJztJxXInCAnrgV213DiF/mIyPSuOePa21exIr7DhWf8SHo/zPn87T9yXqQqrKpVc+9G3qTnH6VLtHH680YXOO3b3r688AYy7cE/nilCn+EHbSqrZLZJ9aeqjaeM9qTGjgvio2qXX9gaDpuqXtkuozTQyC3mZCSxjCsQD82PT69K4vSfg7ofim4Gm+HvDPj3XJ4/N8678thDJJGCzhSIyoPyngEkZGTzXofjqyuJdW8KyWrbJY9Q/dyMu9Iyrxt5jqCCUXGWwRwDyOtfYP7M/hdfFX7NuoaBusry/h1TWPsUrqy24uWeQRSFechSwIzkjA7jNfg/EGEozzzEymr6r/ANJR+1YLN8ThslwdOhOycXfb+ZnxxpP7KviK3jSSH9n3xNcuQGD3VvM6nPcYYAiuq8K/s0/GKO+T+z/hQ1haXP7krNZrGYghJLM2C+09BgZyBjPb9BfCfw003wTotvpfhe4udNWNFLQLcySwK3UhFdjtXJOAOMYGOKY+m+NNP8WQ6rHe6fHpUiMdRU27Sz3jhSsS+YBiGNBzgIcknnnNckadGHwxRw1Mfiauk6jfzPz62rznJx6Uvdv4j29qft6Hdk+/enbeQpwT0r+gz8fbGeX15IPqaUL7HHT608LnoxwfSgqdx+bpgUgWhEcbsDBz/k0pznpn+LFSKpXcG6Hmgqv3cdO1MRGqBVHbPPFG05+YD2qRt2PQkUiht3OCcUwEVcE85IpPLORtYjnrmn7fmHYUbR2U8UgGKuW6Eds0jL0J+b296k28noMdxS7cfMy1QyNh0bB4OT60Y785PIHSpNpZhnB/U0YXJwpBpMGM2lcKqgAHuaNvzBiSM0uOTlc9KcRt9M0WJvYjZWoVe56DnHpUjLhhyTmlX6gCmMix83uaey8Hoe1Kq59/0zTtpxj+VAXIlwuePlFGxeeMj3qTb83HTFDL1weP50AR7cr83J7+hpW2qpZ2+QdWNSrHliW7KT+X0rlPiPeTzeEr/S9E1KOO9uU8syI/MWV3JuxyNxA4HPSvnuIeIMNkmFnUlJe0t7sbq7votDtwWBqYupGNvdvqynq3i/wn4m02w0a3vIZ1k1y0uNzMGUeSJAVdCDwS+OenPWs7Vo5Lq2l1Rb5rrzljWOOUj5WEjHlx90MUUYGOoI4FecfC2TTxoct9cG5uVvdQmiQybmQTQEnmRlUsxGe2MpzjgHt9S0+zubWK+jlCadZSbFjlZseY0bPuO0fKud2O+Su30r+ZM7zPFZrjHWxcrv0t+CP0ahTjhaCo017qGeMvE5j8NC88MLb/ANqAiK0SQeXGJHC+Y43YVlyCFGeSCR1qrqXiDXdF1J4/DGipcSJ5d1Lc2SKU3qI0SEhsjLserN1yQQSMYfihTqnjzw1odrqXnReH7O11K6Xy94dyQPLHZSAMgkcbeeTXRarrGj3cM2iR2z3E1xdWrzWdlH5b3LRyb1gVs4QttJZuCFy2BXHCn7Brm9f8v8x/FqVfCix28UdlrFrHFqOrxu1rAYP9TIfMZiQxIZmDFnYkgY4yRmpVj1qPw/aWcGkSS/Z1Y+StxsQfaG8tHYvyuwKzngD5+2K6Xb4ivLpNY12K0OpX7yCHTrMborO3YliruRmQbYlY7eBkDJ5Fc3N4b0O40+5ur6+nt5Ukmvb5Lq/ZlwsJG0rGuVJLcR5wrMckgiuVy9rJzk+vy+RfLG3MjJ1bR5tT8M+IvD+nRm8uJIlt7aSBwkluZQWZWYsPmO0DJxuwSTniuKtfA2g+Ir1PCdn4auWfw8qWUmqf6lbHONsrf89Z9qyyAAY3Ho3GOgintyt5oPhi5h1F4YbG8t/Nx/pLu7hirEZmXe+Q+CCVNYHw30XXPG1z4h8Ua74kutP8L6M6W8k5Z4f7QvQ7NuVo9pUKhbLepxXtYecqEZTvZL/htjlW3mbc3h28utYh1rw3bRWOo61bXNjbz329/s9rDKoNx++UBCUVCuQHLzds1xfjjS49S+LGjahGloNNW4kvZHSGS2uEihk5Mi5AXzGIC7fmbk455Z8RfFFp4g8S614hsbhxZLYLZ2NuzeW8rY2tMqKp/ijzk88jJzzXl2l6h46vFk8VR+Ip57jUZxHtLCcPIMqA4bO1s9O3UjpXXRpSn+8k7aW+8Ekj3TXPiBpun6mdFm1ttLuILm2m08JbAW0tt8plmm8wbpmKlUWPaSChx6Ch8ZvFQ1rXPFGnatDLIGsZY9RuHVBMJ1ui1vbRAECNBjcVIZiG5JxXjN/4j8T2muPq02uLfajLH5jahJGrTrk8kMcmNgRjIORgYqvr0mpakljNLrBuvtcb3MmHJMTlyCrk9WO0MeTwwzzXRhsucYq0tP1PSwuD9v70NX+B1+o/F26m0ey8LafDFptlaXUd9us02tLMiqqtKB8rFVVQMAd85ya84sfFWueH/Ev/AAlVndKL2N3Mc0iByhcFdwB6EBsqexAI6UxpLfT42hk/fTJ1UcnHbjtU/hnxlDpesDUp9Jtrj7JBP5UM0IkDyNGyLnOMYLbs8429K9Snh4UYvkjuddfD0acf3kve7HsHwT03WNN1htYt2khdY/tbfbY5PJWaQKxVQgBeQRB33H5AGGOa7u78N+H/ABzqmsat4p8Ly2Oj6ZdQLFqkV8YFSEsCYyATln3KCwGBxzUnhjxRaeKPhnpfiiTR9VhS0hYahbRyBI90kKW6yAgbpI2EaBI24Htjnntcj8J+NZNQ17T7rUvKt4TZNp+GjijGxlVCCS3DALlto3SN6V8tXnLEYmU7cvL7t1v6bnl1OSl8JieGtYk1rxR4k8S+EIdB8PeHXu7a2ufl8mWWIAmNRGDkFm6spVvmxntWB8LZ9S8R/FGfw/Y3gk0q8jma+mu7NZ3jhUEuV3hliaRyBk5/hGeKk8C+FfDmseCby3ku9Ta+uryXULiJ7lLSyjt7cbUXzHz5km5jzngHOM4rsPBtx4V8P2LeF7XxlPsjtGn1F7KzjUC7nLgIiMoklTyiTuI6opyoAr0faRpOpy6yWm3lv5nM3rqctqmhz6bp+pRzeK4YxodpFpuk2lxcRpMEM7OYRCjZcMJmO44ySckYr2jwjB4k0lhb3GkqJNWt44bi3to1Yw+WrHO7cCCiyMzyOWJLhF758D+IuqL4f1YWenQvfQXNympNcTTD7S8kW9WXK8xx5IODgnaO2K9M0zVvGWpeGoPiFp+pafrF1q9rJbz30tztkju8bpE2yjAIKKzHgfIoBwSa58ZCdajGUuumv9aFU5W95s4P4y+I11j4gQaf4d1sS3Fss8SG1tULvJKXRkyhOQAqgBsEBicVp22hnwb8PbPS/GegwWumQ3AbVoYQr3d/IsiuI5D8rQ/fiX72Plx1ORh/CDwKuj+Mj4k1i8WO20K2+2pcriRDM4EccW3q7h3BO08bOozuHexWNr4N+E+l+Ita0G/1G/1GS4nhmuJC8rCaRmVgmOW3QBhJjAI561u5RoRhh6Tulb5kybjFeZPoPiy78dbNH0u6lt9M061itryaBktCHiDiEq6geUkYUMR8xYjOea2Pid4tuZLzTLfwrqVjJ4ibS3Ro1i/fiAldjeYnETEY+6xUYfJBrhvhz4m0XWPGyaJoeh3OnoGylteNG5nj2t5sshZDvc5B7qAn3Tmua8F/ErS9F+KGv6t4sZHiuTcl7rb8zfKxSBQqriNmCcKF47DtyTwUp1ZcsfhV0u7fc3p0p8vM9FLQ1pvA3iLw7b6lo+t6PZ3uu6zNAlmzs010wkAYx7I2MeWKgjOfvMTz06cXOl65LqPiz4j6fOmp6lDAkfkgQjT7WSJkEEaZGVjEeSTycEcYrz/xt4107Xo7LxXZfaZNQkhW51K4aYpM8+0o7QgkhEJOAOTtBBxzmrp48YeModV8c3V9FY2ssMlqZ47MuiMIyVAC/wCrUY2eZ/Dv967Pq9SrTXO7Pr07aIznNJ2jsY3j7w54d0yFrvR/EtlqOJU+y7SVmkgYt/rFxjeu0FsHjcPWuTs7W8u4ptQjs5TaWvMsiRlljB4yx6YyRyfUV6WvjDwDa+E5vCPiLwGt94iS1jhF7HHGI4HjbgjyyGYMv3iTknOevEXgnV/O8G63plz4y0nQZLXTbm2s7e5gC/a5HUyMhIVvmITYrEfedVBXOa9CjVqxhy8uqdteq76Cujg9YWz0+3gj024eZ54lneUkfIzFv3ZHQEcce9ZZ8tbd5JVaMjGF9fU1aE6iBrTyonVk2BtvIPr7/jVeZSiww3MZ3N97PQKTgCu6Puqw7tmla6WtzYyQ6fbXF1KIzPNtjP7iJMksT34wfx9a0/h/4j1zRbi8TT7y7i/ta3bTkaGYRh3ODGGbP3RIEJB49awbpZbZVjXfj+NVJAKg/wAWO1U4WaGFhCwiE3IXOehzj2+tRKmqsHGWtwWp3HjrVrzXtmgzaTbWOpaA5sQlrIrwzRA8ruBP3duQQzA7m9axNE1640mBbS2tbV3mYrvmj3SrlWUgZ45B644rNsfOlcQwRzm5mHAjJJbPsOenpXU+H7K30HxNaat4shuLO20krdrCLVnlmyNyMFDIShJB3hhjip5I048hUm6j1OWi1bVLJJNIhvJbZEc5WNivPGensBVi6S2gW0S21AzLLHmeNoivktuIxnPz+uffFGoQyaxdXOpRwmJ7i5kmaPy9seGYkFecqOenP1qrJE1i0a7syKMnGCV/CtNHbuEtFZlma2it7WGSaZGeOXy9sanJU5IJP9Kpfu1d9kClZH4Vu3rTy37uK3SYhC4YNu4yeDmpJLfzJktTKC23J2cbaa8yUrk08NtcXwSO1dIWVDgnPB/i9+9RajIsTeR5LDbk7s/eUdKZJY/YZpI5JGaOPncOpXrgdqdK0k223jjZoCPNjXqYxg9+w55+goS1HaxFaNa+QfPm2ohz5Zz90/3fx9KsRwD95Pazt5Em5lJXowH3T6Y4/OqdxHIVjXaGH3sLzwatLcLbw7JEcW/3tu7gnHNNoVjZsruG08NyTSTSpdRo/kDaHjcPhWB7A4JO7nkYA5yM+7vNVvrHTIdWv5rmztl+y2UtxMz/AGeIMWMKZyVXLFsDjJNRrqVrLCbZrEC2D7lG48DHT8eDW1HrUmraVpnhFbS0t4bOVpWJz5lwzdHbrjaDjjjpnkVz2dN81hK6MmSOa1s08mZJBvaJGAyDkZ4OPvAYz6VDfXNxc2kMMkwIikIzJ94Mw5wT274960NW0+4tb3+zpoZ47YkPDC27crMMbumQMiob3Q74TT2szx5sFWSWVjkcjhd3TPp+FVCcXqwRSnl8y1ThQUxuIXhfYev4Uy8tZo4re48s7ZovvhsjjOR9aRfms5ZWG1I5ABjkoe3T8qsLbquz7RqQjgkTzNu0sPM2g4x654J9u9a7DS6EMq3EdnEvmCWFVLKy/wAI7g+w/rTrWP7XapCvy/MWZyemP8KmuNJv7G4e11LTZ7d0PMbKyNt9RnGVPr0qGG3ex+0MvyIpPMh55HAIHWldSWgmraElprV9pcl1a2jIguIWgZ1bJKkjdjPXOB9MAirviSTw3eSWU2iSX3264t1e9FxsCLcZO7yyvVSMHnnOapWtrY7EmYsZBkRrGwZnY85wegpdRhjW+imS3SBwqq8LMSd4HLHPIzS93m8wuQTW/nXbMod4TGC2xclSOp/M84pJo1jtkeO7cyszJ5YzgIP4vQg9MdeKlvpoVuI1huJLdgrbschWY/yx2rSuPEN1rWk6VolxpempDp/mCO5tbcRzTsWz+9fq5A4A4AFNyeg9zF8iRoI5sYjjYK3ONrHgZ/Kr0TBnFrskZQV27V4U9z79+tTWMWnRfZZtSuCiLceZLtQynAJ27l4BOQBjPrmmaxcx311NqdrGI2knLmNFKoiYGAFzwPpS5ruwdDQ0nVpNG1OG8hjTEZyoPytj+6fY16JovxgbRRqMKfaZftu1oELqEicDBwRyMjGceleVTr/oa3EhLE4XheM9Rn07/lVY/MvmGPaVxg9gO1b06sor3RrVHReIvEN82oX1xHJLuuDguqbdwbnkfp+FYFpJeypLaw28O51wxf8AiH+e9ST3V1dWoO8OMbWTOWA+h5qkJUtcQywrKjYdSGII+tErtFPYkswtrJtjb95uw4YYC4PY/n1rSk0uOS43Q3AwF2rIvGfb/aJH8qzluIVZljjwG7vyV+lX47zzvJBudnkP5jIzD5x2IHrWM+bdBFcxA52zNFOZDHDlEfb93nqfxp8zf2bCCY8G4jKuDkjHYj3p+pTytJPdx2mI7ggSZypUjr+f9aJr9rmSKzjmMkax/PJs+4PT8Ome9LViWjK2lthZYZRug3E72XOAep98UsEdviSFZp2tgd6gLxJjOM+lXre2tGhlhjxJMAAieZyTkckVWlS++1F5LXmNTIyrwFBPBPb0o5rsRbt7qaDdcKyLE2I2jkX7wx1APeiXbG2FkDqQGVl6EVTZpLu4ZpI12RYY7eSqnjvXaeFfHGj6DoLaL4l8KW2rwmQ+U+QksB74PcEc4zxXXhJKE/eHGHP7t7HKN/qyoJIxXqvxOH234QfD3UB1HnQ/nEh/9lqktv8ABTXPle81DQZW+YiePK88jlc+tdZDD8N/FHgvTfh3ceO2VtKuWubW9ht8o4ZSoUhjxx1ANe9hq1NXvJamOJwtRJOOvoeE7dyknGQOfap/COpfZ/Guiznbtj1CH5s/w7h/9evTNY/Z38RXFm1x4V8Rabq8ZXKq263ds8j7wI6e9eYX3hHxR4N1i1HiDSZ7WWO4ilXBVwVVgSwKk5qMTNxatsZU6TSfNue8eNPFPhvxp4dsvDdjdMLu3mexuRtOB5iMind0PzbD9Qa9e/YhvdA/4VrqejWvkRax/aTXGrQjAklj2qIGbu0aYcDsrM3c18Z2utT6frNzJHIAzzh0yuM4fcD7dO9amk+IdZ0PUJ9d0HVp9MvY5JZYLi1mZHjLHO0MvUZ7HjivGxc/bxt1PRoyVOMV2P1DljDYC4xSfZdy42bh+ea+FfCv7YXxgit1tL7XLO+kRQpkvNNiaQv0zlNu7Hv61+hv7FdnL8aPhzP8QfGGtaRfXMNxNYLpsNqYxBJvHlyzosm7bt5G1lBUtnlc15saUr2Ol1omFYtqmkzCfS728snHIa2maM/+OkV2GjfGj4taFtjg8UXF6g/5Z30Sz5H+8Ru/Wvpnw74T+Fl493Douh6RczaXcmyvNsO/ybhVUsh355wynv1FdPb6DodqMWujWMI/6Z26L/IV0RpuPUzlUi+h8+6P+1H4oj2x674Nt5gOsls0kefwIYfrXWW/7THhRoRLqVtPYDjcXheQL7ny8nHvivYfs8AG0Qx4/wB0VS1TTdAe1muNX02xkghjMkjTQKwVVGSTkdgK1SM24voedaD8ffDXifXtC03QNR0i/tdXmlhlljvl8y12RSOC6dtxQKM92r1avin9k34J+AfitpvjH4leK/DiSRan4hnGkpDNJCLWIN5h2bCMf6xRz/c4r7B8N+H4/DOmppNvqmo3lvCAsRvrjz5EUdF8wjcw/wB4k+9VKPK7Ckktjy/9qrSTq3wxliGeXlhwOvz28qjHpzivxneTWooQsGomRRHws43H7v8AeXB71+4HxtsWv/ANzGFyEuIGP0LhT/6FX4seI9Kn0/8Ate1tyY5rNp404z9yTb/7Ka7Ie9QXk2RHSRjLeXsvnw6orxMse5iswwQzSAEE47k8V0GmrpN1CLi3vY5PNXfEsqkAgF274LZ2ivGpoNY1gtJdTTSuMDk9Bz/Xmvqb4HfAn4pfELwrpdv4f8D6reR+S8TTG1KQr8xAzI+EHDnHNEaaerKbaWh9Jfs73G34VaXBA21bSa4ttqjAXbK3H8q9RkEOoRhdQsYLoDoJow2Px6j8Ku/s+fsr+MPBng+TRvGd5ZaczX0tzFBbyfaGSN9p2kjCg5z0Jr3fRvhH4O0kK01m9/IP4rlsj8FGB+dautQjHXVnKoVOZnzVpvwysbnUvtHhm11GC4kZmeOHdcRMT/stkj8DxXU337NXijxcsI1aHS44SpR2ugS2D/sAN+Wa+m7WztbKIQ2drFBGP4Y0Cj8hU1crxDT902UO55ZH+z/4bvNUutS8QahcX8d2qbrRVWOJWESoxyPmOcE9RjNd3ofg/wAM+G41j0XRbW12/wAax5c/Vzlj+dbFFYyqTlo2VZI+Nf2kbqTT/ixqMjq6efHaiMhwpceSMEZPPIPHsa84TxQ32hI7i4jGVHyzJ5bE/XvXSf8ABR7SZLZbTW7V2jkK2c29eoKySRnB7cOtfEdh8SPGukSj7Pr00sQ4MVxiVX6dVb0/w9a7pY76vGCe1v8AgGtPLni4ucXrc+xm1W3mB81Hj3D/AHgT9a5y4ibzpJI8shYkMOhrxPSPj9FGF/tXQ5raTo0mnz/Ix/65ycfr3ru9D+MnhbU1VTq8KyNk7blDbuOMnJ5TpnuK9zKOIaWCqOSV76Hk5lkdatDllpY6vYzADb649qFQ8bu3TPapLfUdNvI1kZsI/RuqnH+2px+tWPs8cnzRyBl7dx+Yr7jC8R4LE6OXK/M+UrZPiaOqVymyk+x9AaXndt77ana1kRiFQsAM5XmmrHt6npXtQq06i5oO68jzJQlTlyyVjkfiF59ra6LqlrzNa6pGyp3kPyts/wCBbQOcdea+vv2L/E17qlp4103UNL/sxl1qa7itXm3yoXY+bvGSAQ5H3SRyK+RfigI28JKZt6iO+hctH94YR+Rn8O9fUP7N+va3Hb6roei2egW/iq41vz2kumaWA2UtnHIY1lULKzB42fYRxuyc9a/FeJU1n2IT6qL/APJUfquDtLIsHJf31/5Mz6vory3UPGXxS8HyXmteONJ0NtIhsXkUaXJPKFkiLMWZmjDLvTAAIIBTGTmt/wAKeJPFfizwzYeJoLXSo11K1S7jtVncPEsihkWRihwwU4I29c15jjYyPz+2qGO3vS7cj5uAOpxmnHK/LwMU8ArjGPp61/QB+Ut6kYXouc44HHWjJHLL1p4HG4g4HanbTy20HFAkRbTncTn1pT26c1JjnkYPajZ8w5PHemFyPG5eoPPT2o56bc5FSbSPTmjbwM7fQkdqBkYVeuD70bep4z9KfsJyOQDxmnY244HHvQG5HhTjsaNi4LcZ9as2trJdzJDECzvwAq5z+XNW7rQNQs4/3tnIO5UrzjjOKxlXpwkoylZstUpzjzRWiMr+L0IpeeematSWNwkas0LKrH5cr1+lJHZyyOIVRt7HA471p7SFr3J5JdisFx2696PLCn0zWrNoV1BC1xOrICwUeprMdAOVYqfU/wBaiFaNRXg7lSpyhpNWGqhpGXbhS3XFQpLLH5qyxkOo3Dvgd/1qJ7lSkqmQRrsyzFuAeec1DxMV1LWHk9UXGTPqT/L2pdpye2ePrTFkXyxOzgt5f4k8V0XirwrdeFNSg0y6uoriWSyt70NGCNgmjDhSD0Izg1f1impRhJ6vb5bk+xnyuSWiMHb8p75o27ThVxinttjUtsZm7Ip5b2Gaw9Q8WaXpNnHNc5826V2gi4ywU8jOeSenHrXgZ9xXl/DsY/W23KWySvf9DswOWVsc/wB3ZLzLmqXksdu0NvCjPwWLsy4znABBGK8g1Kb+1vGEVhLqD3X+qM1tbyKqAEhHUEYZAVUAOeeCF5INdv4q1zUPEkdxqK2Ihe/i8lo0ULGiqwJEa52rjcPlHURe5rmrSa8k1fUtQF1Z2EZktk8xUSVnw2GOc8JgSYyPl29emf5tz7OqvEWbVcbstor+VdD7vCYSGBoRo7tbvuy9b3TeEbCHQrCzjtra3uCkMFtCFiZVAZpQzZABbauSD97cc9a4Xwf46ufE99d6fqWrPpkqXAS3g35lnmiOXaXIw5XYQTggA8Dpno/EjQT6dZ6Bassjsoa4aR2McwVsbMgZbMYQ9OME84rmPDvijT7bxRcTXWh6cIopDbaKtmqjcjQyD7vLSMpSTIwOJVOcDNeXh6V6c3Na9zp5tNDRg/4R628Va5cWenNPf61PBZ3VxJdEfu5izbRHuJQjy1BbsuQAMnL9As/Dcun3Osx6Xd2E8+oJNJ9pZo7iRExGJIEIOFKg/N6Ams3RY723vJPFjQWUFvq1xaTWfnRl5vu7pN+07s7Q5yOdxI4AOei0xr/Xr6w1kaQGuJ7R7yAXkhGGLZWQ4HGI1J5xjcvPNXVqPS+3/AIhzQ94o/2xZ/brC/h0QJLrkaFpL2dYBFYxu37t2ZiYhsdDg8tlOOuNfXLzRW8H+Kri1Fw2qXlrealcXiyKiWpKbigVj0bJ+XvsPFYPiiPRb6xZ9fvobcC0kie83iRY4o5kKyeXkFmJ2rgc5PORXMeJNauvEnjKx8P29lG2m6lZTFJEI/4mDrbuxeQDALjzF5xgMW5yuKVOj7VJrb9FqXdOL1sQ+AW0mbwmuoadqiRyDTzpt5qqxmOSaVZDIIV3HACKVUFADtyfQV13j3xNcaFpo8FzX0+p3GuWrTwtaBY7F2SMtJCcfMyyN5hDFQMqAQe3JfCzwrpHir4dWE0Nu+l/8TS8sLZ4mVDK6bvKdiQWYqZEBKgFsYNaHiC4nsfF2qXWmaQE0uw02zawlkYRw20qSGJy84zhSDJ8xYbjIO7V2TtOvKnu107djGUNbXPm25k1y81C6stBsrpk1TZBDDscyQ7pgyoD0G4rgFuozjFdD4uvNa8J6bofhHSGtWlfQDHqcMKCbyrm4maR33gcSbTGNyk7du0E1H42+NHiDxPJDp/2W3srSKRZkis4hG00qhgJZHHJIBOFUhRkkDJrnfCNl/aWuKuoTXBkl+ZXVzhmLE4Y9c8E19TSpSnGPOkkjelFWJrXw/MLqKKZGKvGJJGZuwGTTNU1600mxSH7OZnO5YV81h5YJBYgdBmu51nTI9N068aGIAR26QqwJPLMAefpmvHdW86/1Zoo1LBPkGPau9Utj6KajgcFGcfimJ/bM3mGOxs4hEzfMsi+a0rHqSxGc/TFbttpmmyR2+sWlmJJnQA20jkIJgxBDH+70OOMjr3pln4VjhZLhb9raVOfvKQD+PWrq2qxq8N1rQktZFZWXCgN9CozkV2LBtr3tD5p1/eN3w7f+PtavL/wX/wk/wDZNvqd9DNexzRgLbEOv74MoAVVZYx8pxjbjivV/B/gl/CPgXxlpOsSaf4g/wCEieFrGNJm3zTx+bvSQIGds/JjgJvK5fGax/gl4N8M+KNPm0GHxFpV5cu0t0uitbuLxI4Y98ksExKkZQHKAupCHcnG4e3eKYPCPhnwouoWviBrdbjT7iGG70yLynnRWZVbyuCFC4JkZQdqSYHIr5jNpU8N+7ilq1/w/fobT0jzS3Z5j4wks/hx8JdQ0mTSdDsHW6Nqunwk3SSpKqNIpZ1OyQMV+cnI2YXBryXwD4N1OHx7ZN4k8MapqT3Nut3bQ2dwqPlot8JdycICpB5wQOTwDXrnjDwrrnjFtJuvCN/ZwWTwopa/jfzpAVIEoidcBdoyuccOzMB1HLTfFjTfB+lr4Z8J6NNf6jYvMdS1SHT4WhngMJjljQugcxFXcgsBsCpgclq5MFH9zKMdZT38jmlOTlY868fWgs9cVv7QkW6uoGkvLcs0klupO0KznO4so3cdAV55FL4F8Nap4ttprHT/ABhb6RbWd35y/bJnhgLshG4suSpZRsyAckjsCR0MHibXvFwTxrN4L02HSdLa2s2ms4o4DbSSfuUMYyHlPG4gZwSCeAK9Eum+GXwea/07TdUubvVI40lvLHasu9ySgJ3kRsy7mJAwQW7qDXTKvOhCNFxfM+2q+YeznyuSWiMnwj4Hm8LaHNdanZ6fqZuLJjZ6Slo9z8/nBGuVcjc4YEkPGSDsUkHGK0vE0mtWek3Rsb680/7JYfaDZqkkiW8aqSkUrMrBFAkZFXIGW5xmsHxR8QNe1D4o6FoOj+KtZ1R9P1OxbbaSRsgZAWIimHVYy4+X7hO8mtf496h/YumtpGkzNdyyfvtTkCOPnjc7kk52Oudp557AV58o1vrEPaO/PrbsZyjOouZ7I8t+E9xrmj6rceItJ1QWF0Lb7BBOy73jWYlf3aEHJJXZ0O0MW4xXLxRTaxqEuva95lwtzOzz7ZFDyueOCRj72M4GcZ9q7n4Q+LptKsfEdjZ+GFv9U1OLfZXAmWMWaJkyqAfmYHKYCkHjvWBdW99/wg1rqNvpVxa2dpMZY5pXX99eEhZpUAxhR+5HIJzxmvcjKSqyurbJPubOpPlVNvRHo154I8F2ejaXaeKtOHhi7sWlkmtJZPMa5t5DujZpUXgjlecMSp+tZviGTSfAvw4t7G1vra8OuXM0kNrbXClvJVgEeUhmKKRhgmeWJznHGE2vXmm+HbJ9YtLTWH1OVNV1CO+k/fTbAH/1mN2WVmU4JxnHbFVNS+JGr+KLiax/4R+0vLJbeSLTLa5Xf/Z0LEZSPbyduBgnJHJrgVGtOXM3eKeuumn/AASU48rujTufE3h/Q4INFm8MWmkxa/HBd6hqEczXskNqXZo4wAcq3GSch8BRxyTnSeG9MtNLl8Y6JMt/pXnpDKksWzdGeTkknnhTt6gN1yKd8SvEnhHV9J0mw8G+GX0x7JCLuSZwzTvgDCheNoO4gkk8j3zqr4q8N6T8GR4D0+TVrm4muo9QvpDGFgV2KlIU4yFBLEsc7nz2ArZupyRnBNNuzXl3/pmkFFxcZfeef+J7LR49V1Cfw3qkd5p6ThoHaMwSFW52+W3Pyn5SenFZd5JJLDZ3C3BYDjaeiOOoA+mD6c0sl1byXVxHNCVcM2Gz17AEflUKjIht+HUZI2j5iT1+terCLSXMQtDauJtZ1LSWvZrNTBHCImuI0OAo+6pA4HXr1rKa1cWyXkMLSR/cZwpwo4+9+NTWbXggmht5JPJCsSoc7MngkjucCmWZvpEmhjvJRCy5dBkq5HIyB9KS93YG23cWxnuLW+jmtbuWCZOYpUzuTAOQMdO/0r0Txdq3i618K6LJrGu2mo2t3bf6GSCJrWPBVhjhg2epAKnseK4WFtJWwhuLiC4E0G7mIgb8sMBiSe24fKAenWtXUrZNc0n/AISKzm0yythMbVrf7aGuIyR8q+W3zhML97GMk5POKxqwU5Rk1sT5nMzFmuEZbmVcg7mJxz61NNkWMatIzu24YK9PxPNa2n+E9YvLu4NrZM9vYnzbi8izJHFErEGXK53LkdRkZFJ4kuLK51l7azvJbtWbi7lUhpyRxIwblSeOPT3rXnTlyxLabXMYn7tIxDNCA/GS3Uj2q3JbPb3kfZkbaMjGT3/z7VHKzXrCOW3TzoV27lzuYjoTnuKv3Ei3FvJK0JEtvGI5GVs5bJ+YemeBj2q9zajBS3HTaZcTgsswO45ZT0z0/pUkkfmTQytCySeUsJ2kbemD6VkRz3EWfLupFzzhqsR6tqCsCvlS4OetU6bPR5sDUjZxaYzU1k09pY41IV8Dpwvrj3/xqgLwSYabAVW+7j72fStWbVZtQk2XFt87DqO2KzH+80LNsZuAxxgD/Gkk0rM461CnCKlTldFy2s90XnQRO8DdSq5x3x9cA13HgjVNFsb660241hfDy6hpc9m2tC3aV2B58orngMCEbA5AHTrXDWLXVjHJYw3zDzMs65+R+CAfTPJH4mrV95n2e2mZCURQrjbyre3bt196560Pae63ucdtTYn8WeMvDepSNpOtXFsrO3kTeWELIQV+QuCyqVPTdwPpXqXhv4Z+HNN0fVPEPjDVpr2O4sopdOu7OPIDkFpC8bHBGQyh2G35RjBYV4x/ak1xJoelzXC3AsLgTqXkXywpYHywGG1ehzkEHPOa+k/E2t6b4f0Ea5dQ2t3c+KFCSusf+jpHGuI4RGo8oorMSG2rwAB3rzMx56cYxp6N9vIHKTauzwLxh4etvDWsf6HJBcWF3B59nJHPveSMtxvAAweCduMgEZrAib7dNBGZBvAw6uOB6GrfiO8uH1Fobm8kZkmeX7uIo3c5OF7DoOOuBVVr6GG6dlYBgoVWUZySOfrzXqUlLkV9WXy3ehNcat4g1i+k/tLUri6uJs/O0pYsOBtAP3eg6YqLdHcQmK6kEb7twkPRe2CPXiq4uFaZHWPlSQR/Ec0SsJIpmmmUTNgFVXGfXj1/rV8tiZR1CBfJeJ/sakfMqyNn5zt6A9OKW6mmjvDcuzTvtBdnGfalg3xTR3S/6hOA0owF9SPerVxH9qmvLxJQojjyi7cbl7ce9O9mKxnhpPMM1tH8m0s0b4ORTzqkz28cUcMSBOixrgsOM5NS7IrU+ZtLJIoVjG2NhI6HP8vepvs0Nwscm4xws5UngkehqrxvqO9ipcSJ5AuEtvJWd8N14wP1B9a6G78PrY6XZ3VtfR3P9pLLtgX5polQDJZRnjnIIrn4mleHdIXQQny1XfjnPXHpW/o15Y6fcW2sXGsXEFxuZQ0MO6WMjkMTkcE8VlUvpyha5mzMv2ZbaCV3G0MzZxkfQ9ajvvLs5ljWQ+W8QVjjqevStnV47h9KtPEmqQt5180jR+ZgNOqtgyDnLfMSCcDp3rB1BkaOGRWLFgCWznP+cVdN3CJJ9oRWEkEaSEdOvT0xVW4i85DcLgCMcofT61JaSKvzSFkycb17VNBCyxvDeSABjlV/vd+3tVydmN3IVmXKK0e3C4znJB+tOtWsmcyX0ZZs7Vx0UZ+8aqrCslxJGf3QfgoB0P8ASrVjtsw/mMkuWwFYbl/+vxRJaCehY1SFVkkaIsYTsSL5uCOuePfNVZAqup3CQjhlXrx06064KNb+VFxF5h2vk4HPHXpxUlxatZq5uJk2DiNgDktjPHtSjorCvcGkht7xroAlo2+73z12k/pWhcSWcTS/apAUkQCN8kbA3OCMEk/4VmW80d0NjxLG0H7xpAM++R6mrCLbzWMtxdQsZvM3Rt2Ye49j/OolG47E8zLb3EdwdpimjGfl4444p63q3TP5gLLs2KrDgY6YrPX/AFMbOu+NTiTb/AO9STSW24TQyCGXP3V6D3qkh7jVmIm8mYYUkq24ZKj0rXaGT/Rru1ugofgx4GFOOgPfPvVC6jWO4QqqyTOg3An+I/xZqxDbxzW7rcT43bT32KPUk9MVUmrDaOm034keN9BZrWx166jgI2eUw8yMgDhQGzjHtVq88e3+twr/AGlpdjdOo3NIbXa+Ae/Jx+FcbHdTXDKdoeGIlWKn/wAeHqaW8nurviGYvKOWH3S4x1+v860jWmly3NVXnGPLfQfqN5p91d/aNP037MJMIYwxfLeo3HoacWso/tEDLLsAG8/xK2OB79M8UlndzRRtC9tt3phHwM7QM856H3qo0NxmfbKJGkbLY5oVpyM+bmldlu2td0iPbXW525UFSDjHP9a+mv2b/HTrPpXhvVLjULnSl1J71rKz5aOZoGRZijK6Mo3crtZmAYAA4NfNdjYva+RdMGZVbYwHKjPY+lfZP/BNaw0XWfj5pUOq6L/aCQQ3M8ex1j+yyIMpMckFgpOPl5BIOCM1nPdcpfmfqX+z3puu2Hwn0O58VWOm2+uanF/aGotYRmOO4lk5ExQ/ddkCFgON2cV6PUdvCLeCOBZHcRqF3SNlj9T3ptzdQ2kfmTMQOgABJJ9ABWu4iavLv2nPFn/CG/AvxdqiShJ7iwbT4PXzLgiEY9wHJ/Cuh174kWOhxs7aZcSlezSxx5/76avIPjB408OfGLwdbeDf7LVZ73V7a0WC6mif99IwijdNjHOPMZuemzOKqKtJXBHf/sy+ER4K+BvhLSWgEU89iL+cd/MnJl5+gcD8K9QqK1t4bO3itLeMJFAixxqP4VAwB+QqWpbu7huZfibR/wC3tDutJ3KpnC4ZugIYMP5V8m6d/wAE6PDeoeJdX1zxr44uprPUb65uEsdNt1iKxySMwVpX3ZPznotfY1FXGrKEeWIHkPw6/ZL/AGe/hescnhn4aaVJdp/y+ahH9snJ9d0uQp/3QK9cjjSNFjjVVRRtVVGAB6CnUVMpSl8TC9woooqQCiiigAooooA+Qv8AgoxpyyfDa31Db8yxSLu9Ns0Dj8ua/MyXaH2sSpPT0Pv/AJ/pX63ftseEfF3i74Sx2fgfw7dazqv20RJBbQ+bIiOjAvt6YBC5zx9K+UfAv/BN34ta8EvPF2saR4ahkAby3c3NwO/KJ8oP1etK0fa04eV/zPTwNeNCL5mfHZjmztKjj16H/POfxrQ0zRtX1O5Sx0vTp7u5kYeXDbwtI5PQYVQc1+n3gX/gnf8ABDww0dx4mn1bxRPHtytzN9ngJHX5IsMQeOC56V9CeEPh34F8A2a2PgvwjpOiwqu3FnapGzD/AGmA3N+JNc8aMY7u5rUzKP2Vc/ES31Hxb4H1CSzWfUNKuY2Ktbyq0JyMghkb8e3Yeldb4Y+NXibSbhf7ZQanCV+ZgRHJu9dygA59wf1r7E+Mug6TP448T6Vrmm2l1af2lPJsu4ldQrnfn5hx97qMV4hr37Pfgq/zNpbXujO33RC3mxZ/3H5x9GFeh/Z9WCU6Mjm+vYWteNeFvM6H4e+Km8ZaK2siB4keVkiikZC428HJXrk9M4OMcUzRPiB4a8SW5ms7oBlYpIknJRgcFTjkHIxzik+Gfg3UvAumz6VfahaXifaGkhmiVkypC8MrdCCD3NfMPj3SNa8J+PdajgjvrAC/na3mTcgeN2LAq4xwQexr0PruJwNKNSDtLqebSy/D4+tUpdOh9J/E1befwNd3FtIsqrNGcK4YDIYdvrXtP7J82l6Z8S7k6spkl1G/tG0+6KiIQudOnH2dSx3ShkfdkDAPB6DPxH4B8QeItYXVNL1LUpr2GTT9wjkYE7lmiAwx553Hr619l/szaXqniH4taLD5FtqNvo4+16sbpY2FtPDCY42hZSxDKxUDkEgkkCvnq+Oq5lmNSvU35Yo9rE4SOXZXQw8f5pfjY+6b6wsdUs59O1KzhurW5QxzQzIHSRDwVZTwQfesm88Kx/Yo7TR76bT/ACRGkZQklI1YEorZ3KCBt6kAHoa3qK1ueQfmltx0PTpil2rzzjNO469D19zTlUcnrX9An5Qxv8W704o2fe3A9z6VKoHUNwR+VG35f60XAiG1WHtz0pwXcuB9frT9v8Kj8+lIVY/w5B5oYr2GbAWHTgc0dfurz61Iww2eOBn6Uu3ovancq5HtY59DTo4RJMF9SOtPVf4d359q734S/C3U/iZrwsYmkt9LtSH1C6X+BD0RT3ducenXtzzYvE08JRlWqOyRvhqMsTUjTirtnd/Af4Ix65qFv4s1lm/s6xl3LH/z8SrggZ6FB3x16eteZ/FKZ/8AhY3iaW3lKJ/a1yVCMRghyMjB46V91aPpGnaBpdroukWqW1nZxLDDEnRVH8/r3r4F8ZXcd54r1u7Vt4m1K5bj3lavyn+0a2ZYqVao9Ft5K593LC08JRVOmvUyotZ1ry0t2v2eOI5VJVDhfpuBxVuHX9QhVV8m0dQpX5oeRnvkEVQz0245NKB8pUtk11uUnHlu7PzOfTmvYl1bxJrl8yNJFarbxAkwwqUDHAAIPODx+vpTbebR3tzBdW97FLj5pFVXCkkcjB5AHtzUTqCm1lHNAwc8DPfHeqoV6+Ep+yw83Ff13Jqwp4ifPVimyp4q/s+W4kXQ5nETH5dwIZmA9xwOtczcawsciR3VhdxpJ8gLQEbhjBPooAHQ+tda22MH161IEV1GcbeuDWNOeIp1HUVRu/fU2lKnKPLy2t2MLSNc0vWiIbW4UTyblEHQgjg/U/SvSvjvfLafEK+hxlbWKzs1+XpthRcAf1rjI7W3WYzLCocHggcjPuOaPE/jC4t7lte8QXFxe3O43TSzLvEzoBhXbqcjArrzDiSpgcP9bxEbuCaVtL8zj/kcVPLacpezp6JtPXXa55xr/j6z1W+v/BOi7riYRmQujFg20/dJ6LluP/rGub1PS9Y1hbC8t7lLcIojht7eUZ2BB8hPU/MDkjtke1Q5v9d8Zf21bPbw/wBpF76QLMi4WVmOWjIGSGCgAkfKRWb4fmsZNc1yG3uAtvZSnzEKOsYZgqoFTPA3HdwTn5j1r8YznNK+a4t4qq9fyXY93B0Y0I+zgdjZx6K13bw6hsvJNLaa6tPMLQsrSAKJDgEKF3d+pfjk8U3utNaB1s7hb+/urGS6Fp5Y8uHbuXLbsFnJ3biSc4yBk4rI0e+03S7y/tbfUZZYru5ltY1MRKCUxhywIOAEcA8nk5HrUel6pp2m+KtN8Mwtd6peTwr+/mChkiGS85ydqsWGAuDyx+teNTovnbjt/TOiWkS/J4jW+8RaTMtnqMpvpyvltapH88UTCQPtGEBB2kdcAdOa5Hwr4V8NQ/ETXWXTbp761gltYLgSh/LjlyqSRkjCHaw6gYAOM5yOo0W81yzW1utWwlzueZbi4i+Rdzfuh94YB5xkZbocVzUvjHRfCtvcXHiK4aBtX1wtNKzA+bJGq7VDHIVEA2f3VLDHat4Qm7xo72t+JCV5K5r65No/hu013T7WC6thbRyJFcqwtxG3AaPJG0nIUlcEDJ71F4o8WXli1lpmhx2WtahPI2nuI5WjMCQjJ+X7rKOrSAbSNoHNeI/EXx1qPii6ex8MX0k9la3P9qCGScTWrNGy72YMoyzOv3c4wBjrUHwXl8RXXjrdapfS6bOyDUbeKLzlt7V5MK0h/gTzHB44yehr0oZVbD+1k9Vq0/Q2pYapLW3u9+h7NdeGdJ8TfEGOx177ZqtkqC5msmil33JUoVRjgFFLSxKdvHy4AAzWPYax4b034rnw7pum6bZXDX88kMyT77aGKS1Ktavu5TBx043bxyTx2jXWiW0Or65cahFf6veqI3imnQG1ICnzkKs2xmRy3XI2rwNvPzN4l8PW+lzy+P7HWLeztTqQk02COYyNMVYNuEmBnkA5IwKWDpqu3Tm7e7ZerMI8smonsfgvWPA+jQtYyNfW0sks91c220yLpxiIWIxngMXyRkcuz4AXCiuc+OF5Y6HpukWt0rHT9VuI7ma3kWU3EShC0zSIsnluR50KAbhzFxgV2N7Z6C0mpeJNS1DRotOutPt5tQs7dDcXMd35STsytIoCnjfwTwemeKzfjjdWviPw5rEen+E76+0+0a1WyvHtniCxrGWnZFAAOXQAt6KeBtxWsbUsUrK+uvl+R1Y+gqdVRT1SVz528SRaJd6lbah4ds9VS0eBdst/jdOwJXKbQBhdoXjPK9zk12fgPS/tFxafZYZJBFcKSEwThclifbBauuvLPw9a/DPwd4ovtJudL1C9t7qHSo5oN0Bsk3FWLIf3js5Z8kAjPORyYfgTcwst1NND5UrsVZh3DEN9AN3p7V9Fhqir3hrpoRCajsWPHy/Z9J1e3hX5I5IVLhTg/eYfhx39K8T8P6W+pL5yxg7DtOGxn/HrX0z8TvC8dr8Ndb8SXF9BDcnUbWOKwkYm4eN4pmMmANoUbVByc/MuBg5rxT4WaZ9rtvMZVCGfazNwAAOcmvY5eaSXkexnD/dUfT9EFn8P7iSOS4itRKsBBlZSW2dOT6c4/Gn3nhXVNOksb7VNLlihvhO0LzEZl2sATtHIPI6+tfV/wn+G82oW8ml3lubWK4jaZZDGW+TAwX6dT0z2A4ryT4s2Nvpf/CKafb7RHHb36rtzj/WRjIz0B7V0Yfl9tGPQ+dqN8rZm/BTw7rU3jjSdW0fTz9ksrxY767+zkx28Misj+Yw6DYzcdcZ7V6P4zsYb7/iW/wBqaRbaNpfmR32tXlvuigtnEiBLZVKsZgr7hgbQSu7rSWEcPwy+Et5qFjJqdrq17Z2l7cLDG2+dmlUeSEYMM7JtpIH3UP8AFjHkOh3B1LxZr+neNLnWbG7kktrS5tbaWOJprxnIyFY4BTGcAEDaN2O3x2bYp5nipVKVlCndLu7b/wDACi1y8si7408fPc+BW0vQdUvLDS7bTfL/ALPnhHnXMfMMUrsvQL5YJ55L4AOM1g/D+zn8TWP2rVvFV3Y6Zqt2LfVUWZYpLsFAioZjyU3Km/cMYYBQSTXVeNPBv9ualf8AgjR/FWk3mt3ForXjXsMUZaQy7VhgLYMKoqu7BQcYzgbjXOab4V8c+JYda8I+GdRtpNH8NWltqM8LQx20SzoxUIso5L7d0hYn5tjHtWOG9mqVqTs3rr277E1EjK8dXt/pHhHS9L8O6x9v0rwzfXUYHVXdj+6uUUIrbY87A7nO8H5VAGd+x8Czah4ftfF+pWtla392tlBbwxuG+RiP9Ichw7SsRnvktgjArP1qPxrd+BdO0ewjbz7OW4XURYwoZZw43kmRGLSAxbcggAADtWNq1v8AE74iaV4btWsyliBNbWI2rGJAihpbhwoBzs25YgfdO3vW3NKpDljJRs3d/wBdy4pctql/I6nx14Y8cL470XTdAa2s106aDybi0KfJNAxIlYjLEkZKjkdqu/tSWfgvwnf2vw/01rm+1CGZJr/UppGZyvz/AHsnBdidzEDGNozxXUeC9K0rwDqtlreueO5H1eYR2ljFcx/aZ7m3Ef3lQ/JFGobG4FiGAOe1eT/GnXtHm1680exiS9n+1NNdapMrGTzG5Cqx7YA5AAYtnArkw7dXE047qKeq0v5/ImL93Yn+APhuy1jVtWnvJLQw6fZyyP8AaD/yzlRowVJ+VSGK5JOQCceobqPgTU7XWtM8L6Z4fuNUWfTmMMiagLy0yJHWSbcMKE3LgZ28gHnglvw5DeC/CLeOPMtpdPmaS11a2dWMjRiZAI0wR98MuDnsw6ZqTxNruveGdOk17T/Fgmv/ABPIXutkZjS3jOCm0gBCQpBOwYG48muipKpLEScHo9Ou6L5Y2XMTfEyWxsfCdnokzTG80zToNNnSKCMW0bxShiqOCHZvmLSPjDOwHQZrovgx4F0jSbWPxJqq2l7eappzTiyWUbreEOAI2XacSPj1GFYZ+9trgV8C6o3iqxbxR4hsBpsy/aJ70XAmRI1TeUMY58zbyI+pz+Fe4fC3WBoPwq1DVPD0P26AX9yNGS8jME0sSjLbtpI3yCQ4z/CEAGSc4YqcqWE5Kbu5P8zJq7s9jwDxUF1TWL9bXQbi2uY7Ypc27uSzXIy0rqhGUAHAXsBjrT/Cuk6nd6ddT61azC1FnN/Z7yswjmul2hI1AVt7BmB28fdOSpr0L4S+ILfxN4+1648UW2lxahqomvXvrqRoniCf6xEywUHgtk4JwQOSBXEfGDVtFufGU6+CVew0eCd7i3ihd1ijkZV8x4txypZhk856V30Zy5lh3HWyfkaSirWi9DgLyCGG8mXJbHDAgg7h14PI5p1ntW4ikaOVvMyqBe/qOehpt1c/aJJJFjMfmKOp3EkdTk9zUfnbV85wGRV2qq5+h/HvXqWdhFyG6uLGS5xD806GNt3oe/1qvDfXVnMfsc5Q9BIB045x+GRVdpt5Vm3Mxwq7vep/Mk89mXYCEJ24yuf6GkopAlYb5dxeSbI5AIk4+n+JrpvAvhHSfEGtJBrmsRWVpGT86uvnyOMYCKQc9SxzxgHmsT7UtxDJJfLKHlRURITtwq+3p1966XQWt7qeSHQ40tZbezZke4lClQ0e12DnoxJUYHbOMc1hXnKNN8ugN2Jte1RtH/t9fDvizVo4vPht5FitWhTUolZz50jKcIFJXAI+cuT2rkJLLULO4a0urWe1naNJwlxGUfa2CpGQCVI5BHB7V13hux1TXvDHiGNLyNbaygjmvtrSmScK48sHB2Y8wjqDyc8YJrPtvsdv4b1LVtdWe/1SXyrOxDXAKwqVOWbJLfKNm0YwckcYqYS5Pd3Y7tqxnaLZ6tqmpCGy083LyvtSOMZLuckBffipN2xLuFofK2xFGj28hgf4u+Ov0IrpPCviSGHwbeeGv7JjeSaXzYr1mIa3cAHKMPukgdTxgYwc5rjrqOaO3eedW8u5zErZPPfr3q6VSTqNSVkjanU5SsYmH3Tkf7LUxlO7a3b1WnL4e1Z4zNaW8ssfXdF82B7gc1XePUrV8S70x2kUg/qK9NK5TpzS5mtC5Z8XSLx0PU8dKj1SJPtBRGbbj5s9fWktbiRruJZFXBB+bb04q1qTJcXK7eNq/MduNxHB/Cs5pJXN4NfVpX7leBLpXEyqjiPjd2zWjHdSTIZJo4isLFDGM/vG7Ajv9faqNpeRx/u54UKsDgjqPQf59Kux2OrTTRrZsZUJP7vjeMZycHqAO9ck7dTz2S6bHZtqlpdSTppmxg5mjj8wA8nOw/eweCPQ1638ObzSfE3hLXNGuL63l1bWSJJ7OXC+WkbNJm3AX5SSByvIyR0ryCaz1GwvWt7qF4poFGY5PRwCCB3BBU596rzOwuN6sUZcFWHDAjvx3rCrh1io8vNbsXCzep6nr3wp+1X15JDNAuHI8kSDdH/skeo6Vy938K9Yt1cmJ2VRxhf171z0usarcTC4m1G4eZRjzGkO/H+91NaFn408UWYCxaxOyj+GQ7x+tdtOi4xUbnqrHU9IzpppfJlVvCms2Lvut5cp0O3g96zri2vbZQ32eMOfvHnrn3r3Dw9cTalo+v6lr186Q6LGkzyxRD/VldxyvOce1cpqGueHNQJNnrGl3i5BCyx+W345wf0q5UJx1Y+fAVfsuL9TzuSS4vlWBoViXcWk7jjvVea8a3c7cESx7Oc8DsRXSan/AGOscn/Eu2ls/vLefjP0Nczex2szboZJAqjbhl/wrLksctalSjrTlcn06TzElhhmTyw4cJJgsx9qe14f+PiSMbeqx7cZHQ4HrVSCGOKHzkkzMf3e3+9k9hV1p54RbG4QsIAcKcY9enfv1qJK7OKW51WtSaLqHhjTINsMGsWWPJmKlGu4ZGZuGxtYoeMtg8gZNYVjI1xr1o2p2ymG7cRsiKBuXoSOeCOvPfFTt4gj/s+w0+S1nMtt5pSUsNsYkHMajHQkA8nqeMUtlpK3wg0eHWNNtfMj+1C5uZiiwsit+5Ln7pJx25yvpXNBezi1LzKlo00N8W2/h+DUr630Fb4wJKhtftW0PHj76MAcdemPSsqby/7PDIvyxnDMFznng+xqW+hMKsZgxEqAs+Dy5wW69SDwcelPgWFo5baHEhkQsVCkbDjjr271vH3YpEOXM7lOOaZYNzWysqMMbhwPT60skhW6V/LMqxqBt+7keoPpUTNN5cKSfeyRtY9+mKsXVm8dibqS4K4baAo5X2J7Vd0O42NhdXDKtv8Af+6rMOpp8MiJ5lutmk5QgSHJ5X09iD6VWmiMiJIq4VtqqV75759atWvkRzLGo2ySfeycndjAxjvQ0SyxbwyXVpNAoDkqjKp4wmegHX1qjeJcwx/Z5H3xJKVX5uc4yOKsfavs6qpkdWK7HkC8oOmBVVpIIPMj3eYXPyFhyCD1oitR+hJDtht5pEY+Yv3l28MP61Zs18nT55Gm3b02RoM4PGWz9Kp24feAJjkj7u0nI+g61btr66mhMgVF8pSjMAOQRjODRJFxZdsraGaxS6+VSWMZK9XyM8jpj3rNMFvMySH92xHRTkcH0PTNW7Vpl09ZEhVY4WzndjeTwfxqlHcqYXWRd+1xt9gD1pRT1JStqbf2NII1+0NhlKtGxGSyZ4HHpUEd3a6i88ErMpz8shxggdufU0+3vJLiwmeRkHlKRGqrjHcN9aoSJH5UUkZ8nzl+Ys3BI/lS5b6MpvQs6Uqf2g0UKlFaPb8zfxkYJHtmnsJZpEt49zsrfL0yjDjb9CBVVlb7RayXLGSEKNrKOgHB/Kpp7u3ktbiaGF4ZUmVo5FywPbB/DpTe5LH3MMV1MZNvlqpAVXkBwfQ59aks44GuAzbDnDByOhHUcc4I/KqUk1o9mg8mWfzGIcB8HPbjtVzT5I4ZFXDPNGrMkmBhCR0I79qqxajfUtadN9okk33bYlz5jRpkZHQ/5719B/sp+LNN+FvxQ0PxhdXxt7bTLyN7pdrEzKwKvA2CABICw3chcgkEA18/2seLdr6NB5kG3mBhhxk5LL+X6V6/8E/F3hfwpdXV5rvh2LXzNp88NvBdXkkEVvOZFeKdigy211OUPDBu2M1MtC9j99IpI5o0midXSRQyspyCDyCDXxz+1Z8ZPif4N8dzeE4bpNO0p7eO5sZ4wx86JhgkjIGQ4dTknoOACM/Tvwt8bx/ETwLpPipdFvNIku7eMzWN1CY2gk2gsq5GGTn5WHDDB9q5D9or4f2Pinwzb+KF0uC51Dw4XmjMkYY/Z3wJQMjttVv+An1rog1cR+b3jDxZ4p1dXkvNQv592WLFQQf++V/rWZ+z9oXiDxr8bfDnh/Tbq7tpJtWhcTx5WSFY23vICMEFVRiCO4r1n4mBjYy3CqFXBAXqB/jXff8ABO74f/2h4w8QfES6izHpEH2G1J6efMcsR9I1x/20rRuxUHaJ970tFFYkhRRRQAUUUUAFFFFABRRRQAUUUUAFFUNe1CbSdE1DVLe3E8tnayzpEWwHKqSFz2zivlXxV+018RpHkhs4bbTo24H2eMZweh3vn9B2p20uVGLkfWs9xBaxNNczRxRr955GCqPqTXH618Y/hxobPHc+JoJ5U6x2itOR+KAgfia+GPFHxK8c+IpGfVdTmmb1mZpsfTcdo/AV5h410W58aWzWmuapqbREdILySED/AICpCH8QaV0aKlfc9i/aY+IXw38eax4qtdK8VaYja1obr9muLmOKbzBbFGBQtnIwv17Zr88fDPxR8e+E2T+wfF+qWse0HyWuC8J/7Zvlf0rv/En7O98gdvD2txSDcW8q8iwfbDp1P1Fee618LfH2h5e80Ge4jVdzS2REyAe+35vzFdLxDnGMb7FxpKN/M9Z8N/tfeJtPkEPirQ7HVYON0tr/AKPN+XKN+QrvV/aV+F/jDSpLG7mu9IuHQBV1K1DQk5BIDruXJGRzjrXx2zCOfy2Uxv02MMMPwPNDNnG5unPzetXHEVIaXuiHQpvXZn2Xpvh3weNK1zWfDbWss9vAVjubS4BV4WMTdFJGQw6jB4r6e/Y/tLi+8Qanc6X4pSwvtP0vS7qS3WKJkvh5fl/OWAkCSccAg7thJJ+Wvzj+BWka5D4uTVv7JvU097O7hln8plhAaFtu5sYI3AevSvun9nb4geBfhb4kl1rxdc3VpFe2tnp+nPbxHfe3AJJeYZGIlMOADxja2MkY8hvnzB8qt7q/M9XEtrKYOUr2m9+1kfogudoyMH0pahs7lby1huo0ZVmQOoYYODU1dZ4h+bSj5ccYH8qUfMSaVV+Utz6U/wAv+IjOD+Vf0Dsfk7GKueuAOtAU/L8oJqTaOT/KjaRjsR60wY1um3hqFjx161J5Y7r/AICl2MPx/SkmFr6kW3KqPWnbcgo2fbinBF7AkD9Kv6Po+pa9qVtpGk2bXF3eSCOGJerMf5AdSew5qZTjCLlLRI0hGU3yrVmr4A8Cax8QPEEHh/RU2s/7y4nYZjgiB+Z2/oO5wK+3fBvg/RfAugW/h/Q7fZBCNzufvzSH70jnuT+nAHArF+E/wz0/4aeG10+MrNqN1iW/ugP9ZJj7q/7C5wB9T1NdtX5JxFnks0rezpP91Hbz83+h97lOWrA0+aXxvfy8hGYKpZjgCvzo1aTzNRuZNxy00rbvXLk/1/Wv0K126NjoeoXwbBt7WWXPptQn+lfnVMzZDO28v83Tj868/LVrJnVjNkC/wrxzk07IVSzEcDOT0FMX25HrSzKJIXyAFKspB6HjFes3ZHClcFkSWNZIGV1YAhlOQQeQc/Sl+bcPmAwePeobdFht44Y1AREVVA7AAAUvmbSG5qo+8hMe+SxKjOTSxy/wsvNQmZS3Uf8A16Uksw+f9aNQJ+OXHA7+9eSfEzUv7QkvbO/WFbaOKSMNHcMieWPmLE9Q3YgDsMV6wv3Ttbn1r508X32k6bMmpa5qkU8mo3OYYYbdmE8ofPzpyQm08KeDjHevjeLq0uWnh11bf3HZhIp3YalpsHgiCxktNYsdO0425RriZjIxZlJUIBgM27A6cDPfFWtF0dbOESJqF2bSSYyGa8YESOWXKR45KbgGXk9ecZrJ+JNvpfhzwfpemi3e+jtLALbK6jzQVwxkKtkblyDkDIC4o8L6tbaP4R0SOTUr3UJ/IAZcb/OmYhzGh/hK9CepIOcGvhOSc6PtY6tv8D0OXlujstO03SdImmsrkyW0oeJroPMNzu7YVEIGSSoUnlQFJ55qjJpujaNrxv8ATdSWOTU2k+z2xUFpHCbAEIHyKCGyM9iabazahpqXDXlxDa3N7Mpw8bSfZoTuVWLk8Hlm7YHHOMjH8C63/aUd9eXGsWyaxIktus1uoMqLlwFTP3UI2knkAydcmsY05S5nt+pHNaxa17XtPk1Cz0eS683UZLnEexWdt6kn124CI+FILDcOa888VW9n4bHiXU9OuLW1uJ0+02dvfQPcJZMjKWWMvlQztIhUc/wk8LUXxOW98O+G/M0G5v57iwummF8EaKVJd3zySc7lJIXlumAAfmrw/wAdX/iy8vn/AOElupjeRRoJlYkFsqpyR0yRt+uBXu5bgHK0ouy6/wBdjalRlWTlbRbmp44+JreImtIrPRdP01LJGEcNmvy+Y4USyMwA3Fig46KAAO+ey/ZdbVLHxdqHjCO+ljWCwnhVFHErYVsknCkKFzz+FeIWNjJqFz9nV1QbGkZmOMKOTn/CvpD4CLotn4DvLzVlupfs8yxq1vHvEETty4U9T5pjPGTgHg9K9jMoezwVRRXQqdVyj7NaRWyOnHiKz8ZSaxZ6Pq11EdLjMF4l1KpR2l/hijUDlQrhvmIYHmvnHxJby3ni7UdOXTVhe6u2WG3mQxBPMb5dq5OwHOQPQivZfCF/r2qfE/VtD0vzw2qXST3lxKY45LlSNoIHCtkOMIBuyxPGDiPwz8B/EXijxpZ+Ip4yLSLUhcXCRf8ALK2jkQt+85QuFYcAli27054MB7PC1OWbsmkc9BJ1I32PXdY+Fmk+HfEXjPQb6+ivrvw1eR3whj5ggmtIlQecxG8qNrNtXGfl56isy+1PxVY6p4ft7/UNI12xDrdTSxwSoba0eEgx7Cwd03ury8ZYd2HFdd8YNc1TQPHfxt8U6baRzJP4uvLa5lXLyxwxyEeZs/hC7j83ct2214r4HbVvGPjvTvFWl2ut6bpyXUtu+vTILmK4ATmAqygByTFjc21e9ceKhfG1nJ+6u/pt/Wp6GYWeJ5ert+SPKfHnxQ1zxOxh+3wx24uPMWG1jaKOPCGPhT0GGf8A76rr/AGlaj4mvrbT/CevTWcCRIoIiHmg5GFwPvdM5HHPrXCfEldP1DxdqGs6XZ2kNlcACIWshZFZflZmJ5DlgSwPcjsRXR/DHxHr3hXU7W+8K3QhvYrq12SeXviIb7xbAJXBI59jXv4SnFU4+y0OSHLFuO59O/GbRbWx/ZUi8Qf2gbzUtU8QJb3hMZXyJbW2uEMQ6gqM5DA4OR0rxT9nbQ/7S8PtIkcYdZLpmM/+rfagwn+8d2R64r6e+G/wt/4aD8B+K/hvceOLTRLbTPE66su/F1P+9t3R3MZkTahZh83Qtkdq9F+Gn7HXwR+DumyWOs/G6G/zIz4nls7chiF5Vd7EnCsMe5r123DXsfV5rhJYqFLltov0Re03UvD+m+E9Lk021SNr+OONipyzSDOQxPJx8wH4DpXxt8Qp5P7e8NzWqb7iygmlQFdwLGVSvHcfLzX09pniv4U6bcXn/CZST3+iaXqCQQ3em3kkUc8LFyk1rEqFm8sKrMucYYkHjB9L1rxN+yP4f8N6ldeBdDGr60Nix+XZ3Ih3yfMA08g8uMYJxsOOOPbgo5nR5XU7Xuj52eBjJe9NfLU+EP2lvE6aLr1hHJbw6ndyWNtIpjcssB3F5FYEZfL8BlPCoOeSK8a8N68t14n0K1nS1gttP1Zb6Rry4kaJoVO7y25ycdARzz9a9u+N/hvT/iBPqPjDRdP/ALPn0o29n5hLxi7k2jayI2FCorKrDI5ywBBryz4VPa6p8UPDdnf29odOtbsw3cs0LTw3MjQybIXGCVL8RjA2r9414OAjT+ruMNGkziqRhztJ7Gj8fIbfS9UmWfT/ALdrc9xLcTa6JWjY8gGNYs/JFyNmeSp6nmue+EsNxfaTr2r61o91qGmP5WnS3EDeY9r5pK7vLUiR9oOVxx97OQMVW+K3imC51yaz0udG0uaJbS4/cENCqswCxs7M20Ljk45BAAGK2fAdr401D4TXFn4d8Y6FbpFqv2i1spLuO2vo9m0ecoHzOzllUBsgBGI5rpoUXDBpPy/ryM+VOJw2oeIvGNlcXvhmzvr0S3kn2M24kYu4OFVQuSFJVUXjnjBr2nx1fz/CmLwxp40PWbW20K1tm8u6lW6ieeUB3W4z8nLLJhcYIBHTr5lot1daX8QNCkvrfy9QtNdtZLya4sxPMxUgZ8t85wc5ToT2PArovjhef2nq1jDpZllsobiS4ka6t/KkubouJH3RD5csJV+TaNvQALgVdaEak4Qto9WF5aa7HpHgnUpvEV5qHxC8N+D0FzpVn+4uLO38pbknDS79pLb18wRgRKqkhWJyMHh/CHwpk+LHizVPiMs00Xh6+kulSO4vPKuElWNQq72HKgsAMDJC44HNdZ4PuvGVtps+ra59o8NW9lp0t3eWK2skNvNBEVltrdfLOUUSsZCcgkYB3ZNeZ6Z8VvGVw2p25u4Lq5Qzy6X9lt8CJjnzHjjjXawI+9uAwBnPFcUIVouaw7V1pr27FQnaPLuXtWbXF8Q6n8MdLtNMgiuJofsVnZqt0IphGQZNo4+ZSAx5KYXryas+AfD+jm2j094YbvxBZW7Xt1d6uxSz0qJcpGjI2QxAJkOcYAGOlYGg6pdxfETwh4gl8VSnVdSlNrqkC2axSWJV9u1Bna0ZAXB+XowwOteq6pql9pUfxJ8EeE10Gf8AtHVGcyzaaN3kKgjZUkIwX3ZBYYXO4ggEGqxUpU6ag99L9Lu9n8uvmTOPu8q3MbUfCfjj4hSWWmaVqOh6fo+nyiI3DTm3j2RPIWuH+U7GZk24QFm3oAGzXS6DocnhP4YwWcMd5Zf8JHqc1tHaTal5nksDtMjbAGVV8piFABOMjHbwTVLbVo/DK+JtJ128jWwuVSW3jSZxb7iwWXzQvlhTs28tuLZwK9X8J+IvFusXWk3njLULG9i1B7ZrRZPkSEy4DOoU/umSNmZpCGHzY6msMVQqRocsWuW9/O6LhyyWu5r+CdH8M+EvG10YNLukW8VbJSyAwuWzJHhQzGNlkVMckjpyQTXg/wARNZXVtX+1eXA3muWWSOTdvHQZ5PIxjPBIAOOa6v4weMg3iSbwvYXzT6Rp16Z1mt7kiK4kz1XZwoAxyAWzuOc1yHjDwnDo2pi10vUdNuYpwrpHb3olMe9dwXJAPyg7ST3Azzmu3L6UlKNaq/ekvwJ5ZR93sZWgaPceJJrm1tby1t5reBpUE7hBLjqqk8Zxk8+lZVwdvbaQ3SrcatYxvtURKwVd8i/Op65B7d6rfZv9G8xlfAJzjqBnj8K9lPXyET3Vu0MUTbzIjY8tx2qOO3aNmEiyIzD5s+/atC2uLjTVt3tCN20qwkUMhznrnj0yKzvMZmLSSKsjOc452/QenpSTbBMsyIy2cXmMoZX+WPbhgMcnPvxWxa2er6b9j1C4hjb7Xbu0G9kZRF8yk7e7DBIB56HGMVkTX09xZpbS/PLFiJX24wnXHueaY8KW93CxjjvESUExMxAYj+FsHIz04NQ02Jo7D4cX0Q8XWOjz2csmka1cR2k0bRRFpCfugM+AAH27sEHbn6VT8VeEde0TW38N3WmyNNLdPHDBEuXmjTGxgo5O7OR680niZdDsdNsP7O028stT++zfa/NtlUEkPGw53klc5A27R1PNM8O6749ur+7vNEutTvtVvbaSM3EbNJcRxqAzujnlSAudwwfeudqXN7WG3n+dylL3bFHQdbbRLq9R8mG4t5IER1V9pPBJB9iRnqKqMZrjSTH5pZIn8zy8ng4xkDoarfY5riVpAGZ0UmY7Sdoz1b05PP1qeRpkgTJCIWMZOPUe3TFdDik7rcHK+g+G8mskF1avJHKp3b0Yg7fcfWuj0/x9cSKserQxTJtGXMe7Hueea5hRskWGT5mkTy/nPBJ/lVbaq5T51dcj2ropzlFe6zqw2Mr4b+FJr8vuPQNXttNXSTrkmh2jRs21ZImCsTgHheCRzyRmuGvLiO+2Msflsnv1GajZriNVgmkLK/KgHgZ64p1vbwxsFnYtuB2KeCcdsnirnVckaV8dWxCtK3ySQ6G3VojNJbsyocFh0XPSnRySTXzKszhjgIxYEqvXGR1pt9eY/wBFXy1j/iVFPUcc+tLpzeXDLbRwpKzHjPUDHJGOv0rmaujgtc3bmfVJJP7Qt5iBHbmCbLYLRDGV59Rjj1FZ2qQsrJeblPn5bapyRjHX9KLK4m1C1ghkaJ5Y5BHH5nyh/TJ7/j2rQ8YQrY6h/ZbQ2iTQMWmNrIHjywB2q44YD+eazo3jUUS4xtqYat0xTx908npUK8e+Kfng9+K9RIZ774Nt1uvCvj62bDeZpCvtx1/civm7UoVt7h7faQFOV57V9OfDEefpfjGHj95oKNz/ANca+dPEULMY7pl2rwB6nvmvSxFLmwykt0cMJtVnEw1kmj+6xA9jVu1nbcPMkJD8GqfGee1WLdQwTH99efxrxtzuuXRG0Unm7dxX5uuMHNX5jLeSfbsAl8Dyz347elEiyJb+cWKrlg2R1waZDJa/YWRo5jKRy2792Pw/KsZqwVE0JDc31mDHZXGGncI64Bzg8DnqPb2rT1rTLjT1VdUskgRh5kQVl3Enjsfu4zg98Vm3Esax7VzkkShVA4YdPwNdF4p8RQ+IobCS+iup9QFokU1zJPu/eLjOFxwMYrGTlzRstDOxgReZNDHLJP8Au2m2jHVTjHSmgta3DSSTs21tu/GOPwrptBudKjsSt0sbLZ3IkihuoxIsvGWQEADDDkBjjIweua57xelnbzR3mieeun3P+pW4ZTJ8owd+3gHOenYirpvnk0OGpXmmt5286N2aQNkgcZx0NSTSRvatGZi7SOrBcHg9/Y1lWrNLtbnnjjvVuGFpJCsQO1icAnjNW42G0OzNCpWPO3kYboec0L86u0hw+QFHTj/61XJGhjthYzBxIfmLbuA2c/0pkH2dPOmnBKDBVTgNk0lIm5ZjtFW2S7ni2beMLyr/AO1Tb+3hmdbyO2dQv+uZeVYnPNdD4N0SXWoZoGfYmGbG3cuByRx6ZBraufBl8sZjjmsJs843hDn8cA1Uab3Z2UMNGpG/MkzzvzIrWRZNzeaqlflbGQelRwtExjt50fap5Ibr9c1e17Rr7SrxobixWCYLnCnKn3FZkM25fMbZkAg7h1z9abjYxqU3TdmX7httkIVHmRLIShBOAfeotPiWUTxvAA7LhOvX2qzApW0ZVYFmbaoYYx6nFM8uGXzWaRV6bQnQ/SovbQyGcmExMuHwV+919/zrSsrVp7V5JogxwItm4ADHes5LV23KGUtnG1R0HrVrT0WOYwqweMkpI31GPwxn9KU9inqLJHvWHczQxMSqsGypbuvt2pZBe/8AHu0UsTEr5kSgbcZ+Ugdc1CbWRbKS1muE/cucKGz5jA/5OaZDeuJFuGXdLE23k4yPr2PvQloJIt7o7dbyO2ZJUABWQLnkEflVS3uJoSZoJNrAsRjpyOcf4Vdh3PcSxzbIhP8AvVXG732+5qlbmLzR5cRADf3q1p63LgX4br7G0Lx2qo275sMSCvHT9fzrqdHm+zzwyW9u6kspNwg55z1z+h/nXKwrPIyGONjuXbt9e3B6V0Xh3WvsLLHNZh1QlGEsYYMMEHKn0B47ggGlON1oDbR+5/7GepR6p8DdIm0+TWJdKUKthJqSBDt8tPNSEZZvIWbzVQsxPBAwAor3CWKOeN4Zo1eORSrKwyGB4INfJH/BNHxNb33wRv8Awclxp8s3hzVGUtb3RleWOdFlWRlxhRksoI4OxsgEGvrqmhnwp+0V8M/+EZj1S1g3eRA7PA3/AEyYZXP0Bx+Br3r9jLwjB4V+AOg3Cx7bjXTLq1wxHJMjYT6/u1Spf2mNDXUPDN1cC3LH7GyswxkYPH/oVdl8C0WP4M+CY0XaE0GyUj0YRKD+ua0k7xBHdUUUVmAUUUUAFFFFABRRRQAUUUUAFFFFAEN5bi6tJ7Vuk0bRn8QRXwL4gi81oNox5UAT6HJY/qa/QCvhzx1p62HizVrDoLe+nTkdAJGxXVhoqalFicuXU4KaJ42PcdcEZrNm+wyS7JoU3DBO04PNdJPbjB7j+deL/HLxFceAbT/hJLez+1APBE8YcodrFlyD6g4/Ot4YONR2vYieIlBXSudxNpNnMT5cgUH+9WXeeHZOqxhx2KnNeN6D+0poVw6Q3xv7Ethf30QlQE8feXkD8K9v0HUm1jS01DcFDZ+YZAx1zz04NZVMG0uaLui6eLvLlkmmcN4i8C6Tq0bJqWj2lznqZoFZvzxmuX0/4d+H9ImzY6DZwOD94RBm/Atkj8K9umhYqVkUfP3K8/nXL65dWWg2E2qanKII4I5JJHVd3CDPQDJJ9q5XCUTpVRPQr+GdNuGZo5Vby0trll3LkDED8c/0r174Mxw22r+H/smg2+pwa1ZrC1hfR28t00zb/niL4PyjYys5GSVJABFeU/D/AFW38XQWesWa3KwzQzrJFOjI8biF9yMpx09RxXv37Ftxe2OsrcyRfbbWTQXjjiijBlhYXchDfMdpywxk427cHjFeZzOOYcr/AJf1PUq01PJ+e+1T/wBtPtzTpJJdPtZJlCyPCjOAQcEqM8jg/hxViszwzE8Ph7To5JLh2+zRkmd1aTlQcEp8pxnGRxxWnXonhn5xKjcqUwOnNKq+2FWpQvyjjIPNIFxjCg7fWv365+T7DB79P50KpOfXBGfSpNpGNwJA96f5ZbtwOcg07hci2gN9eM0uPl3MoB659KkCtjaccil8nzlZPlG8bcnkDjuPSplKyKSvoRFZFX5Y2d+yDksSeFHuTX118A/hGfBOlDxJ4gt/+J7qEfyxuMmzhPPl+zn+L8B255T9nX4K21vDa/EDxHZne37zTrWQHaD/AM/BU9P9gHoPm7ivomvzXiTiGWKvg6DtH7Xn5eh9tlGULDfvqusunl/wQooryj4ufE5dJjl8M6FcYu3G26uEb/Ug/wACkfxHv6fXp8W3Y+gNLx1470y68LeNLOwfzItJ0mZZ7hW+XzXVl2L64xyfXivhvfGzfu8qMjivZ4vEGoW2n3mlxzD7HfsjXMLKGEu3O3Oe3PTp0rjNak8PBhaR+HLK4nc/dUFNv1K9K6cLjY0Lq25hWoOr1OP80r93BIOKcx3KV5roL3QdNFq1xZ2Jgl29POZlH51zmVZBIrMVPRsV69DERxCfKtjhqUnS3I2b5towvPGakCsy/MDn+dIzfMd+CT0PtTmb5juwR611JtIyGFMnPfpmm+So+bge2etS7eBxhj/OmSeYMsy8e3enzNbByjZGVUb5jjHOWx+vavDdQj17UfFFvqGjxQRxx3/mXtxMzGZIo/mUIfukOQqHJzyDjjNe3ybVt5ZJB0RuHwOAD/SvHFf7Drk0Fkw8yO4Rsm43xI2N2HwTk4JOPcnFfDcYzt7OT3s/0O3CRvc5T4n3lpHHFqjebMmo6jc2tvFZosz+cg2xxxtnADBjvOMHBxmtG38PadoWn6fa6fC5hmjl3PNIrnzcKWAXO3ecdsD26028lsbPxBdaPfatI9lZyPqEcD5C+ZKzRo6oTjjbwASQ3XArA8WeKI9Q26RqElqdPsr97eS7Wdi8YRV+SRtuxWHOAOSAxGelfI0Y1KtONKmv+GPRo0p15ckOpt6xrml3VwsetWFwfD8JguEnVhK07SbgylyAV2uQRhT1PNaHh/RtNtfsN1Y/ZLDWp5pZpJJHLmS3ziJcA5XI2rjBB27iT0qFvEdu00V1ozKmlxWE1zY3MskaZiiwsbqr4dz8xYqV54HOM1F4dupteuLiws4zaak9pbLc3JtTmK3MreUsLEnEmEcn6jgYq4/uoPmT/ruTVpqEnG+pj+ObfUtWjnutNsdts1xI0jy+an2tdgMnyr95jjAyOCCc+nj3x+Wx1b4i+IL7R9JNhZZt4obdl2FVitooySO2Shb3zXuvizWoobwyXlysWpDzha6ZLdlIJRubYzMOoyu4kY++ByOvifxEtNT0+9v31hnfUmUi6MihWEzKNwKjpgkj8K9nIXUqKTex6mWp+zqp7cp5z8P7eFdfSaeETCKHf5ewNv5wRg+xNfSnglbLw7p82oWdrPPLrcmNJs7aN1jg2IFBmHHP7tnCg9Md2Ar568EtNaawfs8HmySWoRVPd9uQM9s9K9f8FeH9R8Y+H7TXvFOqeIXtJ/k8mwPlxwYO3YTycjHOAK97EQ9pRlTls7fgePUg3U06HVeNtY8I6IugalJZ6hDrRvra6uLs24867h3S7YcKAYUJbAGE3bTuJwK0NIuNMa88NeFLjxFc2viXX9eT+1LePLb42ldmBSP5UIJGxBl2cvuIUiuR8WfBbwPb/wBjy2x1dRf6hBBI0t7IXMbbt3BHB4HNNvvgz4Z8O6mbjwz458Q6JqdnieOTzfN2N2YEAH9fWvJWApqz5ndd0bU48tr62dz0f4sX0du/xA1uHSLrVrXW/Ec9/OFcxypE7yNHuTBZACyE5BJB9q8T8O+PrPT/AA3Bo9tYXNrLaIy3E2jb1vWbAMs6qXKoW2x5YjjAGOeZ/CfijxItz4q0fxprDXdjpkUdxd6lDamVmd3VR5irgSOyAgeYQEC96nuPCN940uLax+Elpq2j2VtczXFoZrNVgWCRUP2uSUtgknagUFyNvAFcrp3qyjXV23dtbbE4ivKtV9pLc8z+IWtyeINWe4sdOGj6bcRrb2WnTf60IAp8yRv4nYkkucZJOBjFHgNtUhvpLHQ4Ql5dQNDJJv2BIsfM5OcADvmuy0/TovDPxN0a6t/D93cR/arPdqGoy/aGZJImDzKp6E5dlVhkbF4yKwPBfibQdF1Cbw9reh21/ZR3c9492H2yNGI32x4Y7SC2w8kZxjmu+Fb2VNxorZaGUneHtInqWm2Wg+CdNnu9U1rfruq20jsEH2j7NEdqvNLkhlXkOFKncrZ6hc974Z8afDb7C01v8PbG08Q28lvp9si6b9mjuHbb5kokl4hIfcGfIIjJ6548o+Ffh3V/H/iDT9DuLGO1it382KaaPCW4kIVWnOCWQDJAwegJ6V9E+B7rwmsL+A9Ue11G6t4mvL8XpfNzZxDy4dxOBvwGwFxlOTyRjycViKkdXK76q/Q3pVKk7RlJ2Z4h488VeJH1iz8JWGkK1o93NcGWWFRDdRiQONgOWWNtr43EkluRxivTLG6vpmubdrCzs47pIbm10u3tSVsogWYG4kXYgw21d/LHB24xVe1+Hc3jDULy7s4bmew0eZcQ7v8AS4rSOQKhABBkADAlUySvspNbmpaTdWevanbXVwUV47e51OdkEICFNwhYElhEqZYJwxBLED5a4MXCUKMZwSW5jKPspq3U5v4qa3otvY3tnHH51pb2dzNNJNJGu53jKxktgr+8dSVQZJCE5rzfwDqmm2fgW2Sa2sr54rC9uZY7GPa00+XAkuWboyptQHt5owpLVX+MmueZ4Vms5bO1vZNa1Q2unE7Y5k8kqhYDbkrltoJYf6zuQa0LLwja/Cnw+uja74ojvdStphPeRwAKLAjJuIoWLfv1wY2JAU5zwwGR04Sn7LC8zere3cwn1ctzxn4g+JrrxdrklvappCW0FqyqbSExicZU4ycl2BwM4GcMcCvoG31b+wfB2u+D/D6T2WqeJ49Hjg0G88PRGZxZKXk1OKaMsIYY3TysB8ne7bTklfAfh34Z1bxd8VEt/C/2O9vIZ5L61hmge5hufKzJsZRgsh24YngDJOBXsfxO8VX3gfUJLqx8QWdxfX0a2l9qA+0R3l3CqAS2m1zuhUsdoWMqnltjHWvXqyjS5KMVui7JadTkrzQPiV8QNa0LxVDbypZafIsdvdWxWQwqHQtkkAbmkLsGkYszNgZxitq+8eeFfDNxPf8Ah/wTe3PiJDJpdtcSLHcwL5Ex3PHtG4uRtXzFGSBk5xXN6baeMjY39hDc+Kx4clZrq3tdLRHtjM43gsrNtDHCBSoLZ9xiuu+H/wARtD8O6PY3GgeBdWhieSRdSWCSUNbbVPmH7QMFpGHz44wMAEEk1z4hNxStzW7O33kL3jE8fWv9o+FtJ1DxBr1rp2q39lbyyxRI0du1jskYRH+Itu4Y8gEqDjArF0c3Fj4V13U9H8FX1hBrRitWito/tXl2m0P5fmMwk3MDl8AD7gz8wA6j4gX0l94JsJ9e8QStpf2x23jy5AWeMCELtbzJHKEbiFKquMDnNR+BdB1az+EM2v6O16LqfW/tkP2e4jWNYYl2ACNz5hYM4XfjC7yRlhkZwqKNC9T+b5b/AKA4uN0i38JfAvwlk8TWeur4gIuLfzrW6hks5J0V5YyyXBYH92F3JCBtLF898Gs6f4oax4R+KOm6hJqtsNKsna1F3Hp6ybraTaX8xCcGRSEOCQV8sDHGK9S8I/DeP4d/D3W/7U8SaVp2qQQzzyXKyARm4CjybaWTh32liA0ZKnCnqefLte8I+JfElx4esdZu9C1CB3NtH/ZEMvkJK6qD5nlqAxwC5wd21RkjOK441qeIxMqk5Xja3/BWhpadOUZdTrfEkfh+zj8OeB7e11rVNLuroanAbeKOBtVd2V4/MUgh4sKXCkEYJxUFhqviy/8AEl9q3iXS7Vo9GtpbaG0jZYLeDzGMqxq67CF2THJIPDNkrUevXWraDqfhvxBpN4kKWVyNBgfVbcmGBTHKizOhwiOolyoJ4XbuXI5ydDj0eSLX4fGuujV7Y6vHGp0+ZEbU1xIXcM27Ee6MsSoyxwMAYxNPm9la90/8xunyVHKW/wCpyfjDxJY23jXRnvtN0G+MUltfXj6c0cv73keWjqPLKrtUBdpGRzu7+beI7e1/tJo9Bs9QR2jJmjuk/eicsxfAHO0Ar15616XqK2C3Dw6b8JrW3W/mjhtDOgkjhiEisQEySHY/ISTnlhx81UvjNoFjpiyasUGnavFqI0/7JCXCNCkCu1wARhS8j5wrYx0HBr3MJWjDlp9bf11Jb5tXucJNpMMuj2t8utQl2jZWglkVn8wE8BRyOOhPfI7ZqrNNt0e3jXy8tL82Bl8Lkdew6da7DWvh9oNnY2M2k69HfXl+C0Easp8/hSG5KlAfm6g/wjrXHR2phuZI7yMReRJtePad2R1FdlOpGorpi20HS7xGqlkQMP3bFuD6njvxVjULjQI9K02XTdJuIL6Bmkup5ZNy3GSCmExhcc8jgjGRVOa4tVa0FxmWFNzMucBuTj6ZFRRv5jL8nmMSQO+wdgKtK+oJWLOozvJOlxdsh81Nu1F2hTkHOBwDUlzYX1ri5FiTb3BbZMB+7dhjOG9QTRiFtOMMlq8l2XUwzCUAAA/MrKfXjBB7VBuuEt5oVkdYSBuCZ2Bic7MZwOmc+1HkgVupEy3FysiyShVUgOScAHPXHTv+tdp4RtdWt4pZNGurpNJmjK3t9DZIZkAj3Sxqz/dBIIyD8wB69K5zRrFNUZLV7iDazbibiQorY52lhzXS69qT3GtXWlK1/p+i28zQ2thpcrSWQmA4XcWw4PJ3Ek4NY1pc37tAzlNQe8tdRuo/NMly0redlcHBOTuA/A1FfXUzLFMoGThWC5wSOOR3+tXWsrz7cLGa1l0+a5m+zrcSqw2c4bcMEnA4OKl8TeH7/Q7h9Puwq3duqvImc5UgEY/Ag44I78itFOKtF7iRn3lpPqFu2oW7KyrHuePdhkI4OM9QBVG3jlaESMwADdc9B7ip/tCwzrHahiX++rdB+VSyRsrMrLEkgPQcqce46ZrVNrQ1K9xJ5Fx5cUhdW+6wX/H9KhvGjkffuxIfmZTn5D6fU+lWBceYkatCilQdu0fe9/qKZLGS73F0y7iwz83LH1A9KtDRDatub95CWhI2lvf61eSKOSZLexm+bhVkK7ee/X8qZHH5Nj50alwJOcnhvw7VctnutzTTRws/G5R8zDoB06VE5Etq49bWO200zSbV3SeXCQ33pAfmY89vWqt5t80SRuxVhgbjzxwf1qa4gW6lu0TZaxRx/MJCxLsOvXoSe1Pit7/WIUtLKyeeZFG2OJcsSM546njnj0oo/FcadzP8wZ70oZuRT7ixvrPP2yxuLcj/AJ7Qsn8xUURVvusMGvRSYH0h8Gf9IXXoe83h2M/+QyOK+ffEKxtBGGc7wMhQM9ute/fAl/M1W5hbB87w6nX2DCvFdWto5LGTfxGqnnd6V7XK54ZxPLnLlrpnBN+g61atR8n0dD+tRSAKxbjHapbb5UdsZ6H6189H4j0pPQ62e38nTZpHUkIZlP1//WRWTHb3i2qSTThIyoYc9vf61u3xjt7MKmWH2hlVPYY7/Q1jySRSWv2aSEhkcssyDpnnBz1rPEfFY2qS5ox9CxNYrqEkD2biSaVN+GYDbjt7VGNyzJeXJZgkinC8Ejvx0/Gq9qsMzyybW2p/q23Y4GO31q5MtnHqkEdvHcNDIFEivtBDZ7Y4xXK3bQ53pob/AIj0+HQY4PKuo411dBcNbx/MkQAUp84OCzqxJ4GMDjmuY1G8W+0m200W0bfZ5GkV/wCLa3Vfz5H1NX9Ykt5tWaQt5XmyO0KKMLHkccdMHGOOn4VO2gXt3o82s6TpjzWtk0f2p1bcVL5w20c7OCM9jjPWlRn7Na9R0+xi6Vb7mFu0Oxd23ge3UUy+Bs757VCRtcZyOo7cVrafcWMEge5s5oWj+X5S20k57H+VZmszLean5zcE4ztHYD0Peu2Si43Op0rR5rkTzNdX3mHKg/e3n7xHU+2auQs0sUl0pC+WXXDLu+XtwetZ8+15BJErFRgKp/rWhDNFBHHcK0qSDO4IwPp/OsJabHPY7f4X6nZwza0l4yRJcaBdwRtj/VzbAVII9fmGfesPwfqWoS+ILG3ub6eSN3w0buSM4zzn6VW0O/sbHV5Lk2fmWksZ3282cEke2Oh5FN8OnyPElj8+8i4ClvXPGa7cNP2jjB9BbJs674uQSQywTJjc8eBuHcMeBXlmY9xaRcdTj1Ne4/EbT11CSzj8sBj5m0DueDj+deQ6pt02+lt0hR0H3dw6Aj+dPFw5KrOmo3KnTl5fqyTTbczRtdMzgIPmzzn6Vq+G/CU3iXUI7Oy3EGQkxqp6dSSe2O9ZljdQNav50zCRgRHGowrHHc9vp7V13w28Ra94Xvxc6DdrBP5ZDM0avuDdsEHqQK4acXUqcm1zmdRU05M0ZPg34hszIYV8zPA8mT8uDzWHL4F8Q26NDcWc8QjYnGw8/WvWYfjl4gjU/wBtaHompPnH/Hu0Lfiyn+lX4/jV4NuE/wCJt4Pv7JuAzWd0sqgd/lbb716f9mVLcy1OinmeCk7VIfc2eFxeFdRt/MWa2QmRQ2WP3c9Dx0/+vWfLY/2ZNukty5A+ZVORnvXtvxC8aaJ4X8Yah4bv/DKXUMHlNHcKwDujxq4yMDnJPSuQuvEXgHVGwLCeCRyBjPP9f51yToOLszsSwNWPuuUX96OC85LmQeTIF7eXKBu/Bu3Wq8cf2VnaS3Dbfl+Y8A9Ca60eG/CusXYt9K1WaOaThY5Iw3P1Bz+lc3r2kXOiX7280m7aTGW57Eg/yqFBx2MZYaycoO6RZl1JlhtlhUkrGW2AYUknkn1roPCVxod9Na2+veckLMRLJEcSRjjkA8N9DXLW4EkMQDDzISQ4x1U9Metdn8M9Fs9a8Y6fpeoW9w9ndTCO5NvC0siRMCDIirgkr97Gf4fSh0+aO9jDlP1H/wCCXVrLoPgvxHArLcWF/qYihuF8vKvGrYDbWL4YbipYBRtbaTur7tr5b/YU+HUvwn0Txf4Hka7v4Yr62urPWZbV7ZNStniwrpE/zKFKsueh7dDX1JUpWViTE8WeF7bxbpM2k3U7QLNGyeYiAsuehGfQgcd6yvhTp8Og+C7XwpCzuvh2STSfMYAeYIWIDYBOARg47V2Fc34SXydT8T2fTZqxlH0kgib+ZNVfQa2OkooopCCiiigAooooAKKKKACiiigAooooAK+PvjVpTWXxH1vkYmmW4/77UH+tfYNfNf7QmiyR+MJtQUErdWUcnTgMvyn9FrswT/efIip8J4dPH0z0zXiv7TWmtd/D/UW2n93brN/3xKjfyzXuckbNjrmuG+LXhPUvFHg++0nTdPnu57i1nhWKCMyOzmMkAAAknIFe3h4r2iucNVvl0PznlVoXck8jJ/Lmvub4Zqus/Dt7VxlbmzMeO53xkf1ryjRf2D/2mvF9v9q0v4V6haxOvmCTUpI7MEbeTiVlb9K9Z+CGl61ofhyHQ/EWny2d/bQxiWGQjPGBngkEH1rCMU/aKOxdXmhKnI+WNI+IvxC8JKI9E8VajHFENpguG86Pjgja+fSvoexm8VfEP4f6Hq2l3Fibya5gm1BbgFY5bdkKzKNoyp5yMc8V86eOdLOleJta0/8A59tQuY+PTzDivo39nW6N18P7WPdzCpj+m12H8sV4lFP6w6b2Pocel7FVYrU7rwLoMnh2xtNNnv5L2WMS+ZcSYDSMysBwAOgIH4V2/wCzLe3Fj4j0azt9SsoINd026s7/AO1zAIbaOWdpECufvsTGFEeM/MTnHONp4El5BGyjLSqp/PFP+Cf2WS88N6PNcXKy3FxPYxPHdx232dFuxNNKksikq+AoGxhyFHU1yYun7PMKb7xf5lU6nPk012qR/Jn6QafNZ3NjBcafJFJbSRq0LxMGRkxwQRwRirFVNKsYdM063sbdt0cMYUNtALccsccZJyT7k1brY8o/OsRnu3I704oTznk96kbauflBHU+9KF+YKvAz1r99uflFhipnG0fWk247c/WpVyrFWwTnIPenlRuPUn9KVxWIgobOCNoz2r1n4CfC2HxxrEmuazGr6PpUihoieZ5vvBMdlAwW9cgdzWP8JfDvgHXNT1F/iFrlvpen2tvH5Uk98lqGmZ8AbmIzwDx7ivoX4H6No+i6T4gtdBuPtFimu3EMEnmByyoqLyw4PIPNfJ8R50sNSqYWjdVNNeln2fex9Hk2V+1nDEVLOOv3o9HVVVQqqABwAO1LRXm3xe+LVn4DsG0vTZY5tcuU/dx9RbIePMcf+gjufYV+Xtn2pteNPG1jpen69p1jdt/aWn6TNeM0eP3BxtTJ7MSwIHt9K+RLq4vnkLfbpm5ySzbiT3JJq3beONXtf7U8yZLldaj8u+Nwu5pgG3HJ6gk4ye9YV34s0/zltYtBjkkbjEUzJj+YqHKMlYTuTXV1qao3lzbjj+6DS6fp6wbppiWkc5Zm6sfanv5clv58EMsTAbmVpdwHf0ry/wCMvjfXPDujQQaWyRyahJ5DSbiGQHA4/P8ASlGm1sLmudovjTT9T8WP4R0wi4kgsrq5u5UPyQ+XCzBc9yTtz7VkL8saqeuKxP2TNFs9Q8XeLNR1LE6ad4X1a5KtwXfYiAn8/wA62bhSsJI5wPvY/OvbwEeSLRxYuL5kxlxPDFHlmG01lza8sUwjWOQqy437eOOOP89q6e60XSbPwzLrOoRtdTTSJZWMG4hDJt3yStjkhF2jb3aRc8DBxLeK32mVvmboD6D0HpXc6ifuxOdQtqyWO4TA3HFPkuFjZmEZK461WZo2jbYS2T1qDz5wwRuVFVuIx/iFJrzaCJ/DNu0uoxzx+THxsfdlSHyQAuCck9PevL9S0tND1u8WOS0jnu4pDIbaHKsdqhSTj5SBnJAzh+uDXtrzRyBvMICFDuyduBjnmvHdYbQ9EsdYv54Zbp5EkMlrHIzP5LnGd3KqTkLu7LwBXxPFsKceWT1ctPM78K7xseK/ESTSdDj0L+0pr7+zpoGnklhmVpjcLIApTAGxVAcqG65J5615LqHiq+1u3j0fSYXhTcWuZNzf6RIW/wBYw9eevXk17D8SNJtL74NaXr6ySx3q6hBpdxaSIAyeRbTsGxngBZI16Cuc8A2MOn+FraCayg+2SSPIZjH8+xv4c1vgcHGnTimevKcsLQiqel+p0vwuMl1o+seD9aa0vxa2cMWxl2v5ON20t/DzwACM4JPNex6BpNnpF35elzaillHGLfazt+7KE72aT7rYBGAB8u7B3V5R8JZNOt/Fmv3Mdw9xepNCZLO3BjaKNVGJ5ZT8rIDuAT1OT/DXoXh3UrbRG1S40W8uDL9uZzDeARQeVIXDbnBChXYhieQOx7V8zm9B0cRNW912/wAjz2+dnn3xEmul8RXOpWulQG3hCDULO5lRp5FaQKoiJAJYqVbKgAZANUfjW17dav4h1S/t0t7y8vrgyR42iMb2BX3wBj8K7/wZ8INU8UfETw9qPiLWJmvR4itobuWSQFLpFljk8vJIARVJQnp8vGQM1zPx4kXVNe8XXgAIOqanMhxn708nT25Ne9k0IwouzTPby+ny4erLqeZ/C3w/JrfjSHS42aJI/KuGdTjaqKCT74z0719I/CfULW01bxn4FMKiLTNXnurRCM5idyHAz23rn/gVVf2Mv2dPiX8UPHl5r2heHZItEi/cyardhorNWBTgPj94wx91Mn1x1r6D/am/Zr8J/st+GPD3xe8N/wBo6iF1a5j8U3sjKXnFzhoVjhyFVRKpA64ydxNetUUZU+XqePVTVR32OC+KnguSxt/CV8sKql1qULL83A+SQj+VeffEO70jw3oOpeJtQjhyittYjJITp+ZwPxrhfjZ+2he+MIdCs/D3hvUdOfQ5EmR7y+3pNIBIGkKIAFJWTAC4AA75rkPCvjPWfj1q2m+D9cs1t9O0+Y6lqk0OWVraIF1jI45eTavvk15+Lj7KjzSdktX6CT7Fzw34ZuL/AMA2xv7630+fxHPdPrFxNE0iBbpImtmUrnLoAVKBSy/Mepqfx34XupZtGPh/xVpdrYaTZWlxo9knnk3aISfNkhfLYUGRnYjoCoHr6B9i/cweLPGCG2iIkjtbaK3VIooJQwkbbjG8s3CDOVO4HnnhNS0/S9U8YaXa6RqkhmeWZzd6ba4Bs3UsgVGAZI5MsRzkBwQeBXzWHxMsTJzj3foc83766Hn9jcWPgW+1OG+1DTdVklvGuIpLS4l8syRFxFsDDDhmlDBiMqFJHJqCz0PxR46aXxRLYBtLjlRLi5trdEiik2bQoXPU+X90devesT4kahpc3inU5ND1Ca+sRN5drNcQmGYqhxmSPc20k9sngDvmvYvg/wDaG+D+qtbW4luRrFv5f75wYldU3SLEPlZsqFLNwoJ7kV6eIvQp+2+07I2py5opS2R6Z8F5Lj/hD9T8WzaLcyzX0v2X7KzqbhoUCrG2z5VQMvmqC3A3E9s1y2peMtQ8SePLSbR9FsZdb024js5YLaZhNPbvui/eMAFYBCn3W6ruPWu8tJNdvPh6s1xDPb6VM8aRn7EIrx5drY2bRvkhG4tuPcDHPThrHVtF1zw7qGm/DXweuo32n/LJeWI+zXAV8AFvn3bjhemCcAbRg58ec4QnOaj5eRbqqNW0emx6z8MfCPjTwl4ktppNUuftFrqMNhp88999yNSXEcYDEyA72jyoODKVyBkV1vxUbT9Y8Yz628dpakxyyXMMN0ZvOWOMMw2MD1xls4xt5JJri/gjqc2k6TfaH4vsZ3vopW1LRvMmk8+Ke1hDkmbYUEMm5VYZALqpG3GTe1D+y5tPbxVBdNJcHVXm8+eIot558QXZKA2fI2O3ygAksATkAlYyo6mHjGMl5m1Wv7S3Loz56+LXhXT/ABR4k1TWtM0HUoNUht/NjsdLWSRLeSN8vKW5EaxIYztBLFiOpO2uS+Lt5J4d1ZpPDuvX2p/a95ukunaWeWOVQI5PmG4FgDu5JORwMV734l8OxqLu5sNfu/CWi3NwtjJe3bLH/aJX5Cm7JbDEK+MLjb1JFfOHii8k1vVI9ZudekubbSXt7aO4uFjjnmiTaucITlQqttGS3fFdmBre3tHpH+vT7jhknF8xr/CnwfPpNhq/xS8YaNeWPkQK2kqsMsMPL7ZJhsILlOojGQD8zDaK0/EHiD4U/ErxTZ6lrdjrAlur03sl9Hjf5aqubXCsVwzlyXCg5bcScmu3t/iF8Q9UsrHXJobT7ClnNYWcun3bLZeREQXknJIADJgHOSSACc8V5BcahpPiPxFq1lpdrZJNdeZJ5sEZi81kKlRFk5EjkbVXplqdKtVr1JSqKzXZ7IJPns0eq/EjVhouly6fPJ4igafVGsrK3baXtbQ/6yQFG2SSPn5R8oGDnqTXO+G7rwbrFonw/wBE09VvbuwjuL+e7DtNAscpLuTvEbyMrFycqFSPCnO6sj4o6brXxE+Kkmk6Doup3IsWAvI2vD5OVXDu8pAWIEBjk847sa3PCEmm+BW8ZeC2ea68RWkcN9p6vDE5uJkh+aMvGSzbN6kR5I3Kzck4Do+5hvaPWT1t+H/BFJNNp7jfGPwX1rxxpLeLtGaHTYLO3+z2MNzdpKFt4lLeUzhV8vYjKAvzlVGC3GK4f4N2Otahq/2fS9NWfU8eZBdahGXhtY0wHkADAsMHB3ZX7vpg9hr+oXuvaL/wk2pa1pGiaTpSLplrBZyTxRSHcuWEKcSEBmAHAwH3EtXI+D/Hdv4k8RaRpPiqS3i0xcee0Uj20cCAfMpEY5BwARjvnmrhOvUpTUtV+X+Yo3R1nxo16S68TafeWOpHWLm2VbtbuFQYHhAjcIkQYgiMsygHnGFPOa6fVvH+j+A/EWg6TZaLqFuLqVLOfUbzNvutJidqQ2wwI4QCjksNzFcnOcjnPEGi21r4guv+ETYeCEtIYjPLP5pleKRzL5hGQdpwEwM/MAABVT4m+HobW/fVLfUVl0rSbe2ubXTLtW827h8kguQcMqkqVJ45PQbRXDCnRnCnTntr/WmnyNOaSlz9TqPjV4wupNAHhnR7zw7fWemyXUdza2YKzDc2PNfBG5WAJLc/6zPIINV/D+g6AnwrufEfhDRFuCumPEs88flCW5dNspTDlvkDP1ABIBOFGK8bXw5dzaGusSeH9Sj+1LPc28tvAz2k0ZDfuwwwQyMCOpHGMHFenzaX401r4TaT4kjGg2OkWmjfYbVRZ+TI80W0MNxwHmkOSex+brVzwsMLShTpz+1r5/cEr1JtvdnF+JPi94217WtPTSreXT4tGhSayinVGaOJSZBI3AU53nJx0J9awfHXirxR4j8y+1fxMt4+p7bi8gXKqJBkISpHB29CD90123wJ8Di/i1PxhqzxLY2dvNBb23mxtLLMqgsCrAkD5kxnHJHauA+JccI8ZXNyunPaecwuFikmWQbCqgbWVEDc5OQoU54r08P9X+sunSirxW/6D9lNR5raFO1kiXT3vJraczWkSi1bztihj1ZhgnPUgDGSBk4FZdhDLq1xM7XEcW5HbfNKEUsFJOT6nsO5NaOu+I7jVtPjh/si1tkSYMZVyXfC7duSfu8Z2jgEVHprfZ0DXlml3avC4kiVQSV6nB/hYYGCORXormjG7WpKWpVt1KaU959k86Erg+aQNuMZ469xUVnb+datLHbsXZhs/H0qtNtt3klMbKpGBExydh9x1qX7RNbWm4yDB2mN45M7P7vTuOhrWzsVymz4V0O51rUptDW9sLBwjvPJfMFVFjwxUN/eIB4HXkVD4kk0GO6h0/w5ePPaiNJGZoWQvcY+YYbnaOMf/XrO0+8utP1eK+t2jknR9+6aJZIyTxllYEHPNb+oaBZw6O+u3GtWUtzcXgiksYEAkBYM5kTkBUXCjGOrj0rJrlqe89P1Jtqc99tkby4VQgK24Y9enArq9H8aHUtUsbPx3qFzL4fiZPtEdtbhpdkYYqqAFcE8IWzkKfauOjS4hu4WiUHJ79AfY1r/AGFv7St45IZVivQogV2A3s3AG7oFJ71VWFOXxIDq/FuuXN5rdjrj6tMFSbzvsshYiAuNzbCDtwoOOCDz+NF/pvhbUvCOs3i6wkd5Z3Ilsd1uyPfwOzgMVJJXBAG3sDkmp/i9osnhG607Rby3JvI4Q87MwZ2cABlYglflOQAO3WuEjkk+xzRvFIS+SrK3A6HaR6VyUIKrTjKDsv8Agjtyv3iosYjklaRSSg2n2OKiW4m3bbeQtt+VeOD+FWFWO4trqaN2U7QcehyKgP8Ao6qvylgcsOteitRp2ZLEjRrKJiY2CEqw+7njIPoar+ZBMEZm3SOTwM8etSyFGSWOSQoUy2PXPYUyGOBYDcMseYl6A8sTTK6FmG4aGEae20QM3mF3Tkfj1xxWjpo2THC/NKN3AwzAckjt0rJuZLpmhkVJJIFwSD0Ge3tWltEKLfRzTReQwljcEZJPVfX0xWU0RomRedE4mkkljnkZg0ZYH516FT6dqs2skdhrFleW08yIrIwZsKwIxuGemM5wfTFUby/WeWa/m+a4mkLsVjVFGf4gqgDJ+lehR/D3XoPDum6tc6PNJHqGxZllh+RopFDKyMMsXVTv+UZwKzlVVG3N1KR7L4V8QeGPE019tuLO8jhRI44QpCsSu4kE4ycgg1u6h8K/AOrx7rrQbWRgPmZIwGBxkjpnivmnwTr7eD9YvpJjIYXhkgWaFiNucFJADjcpwDg46+tfQ3w/+K3hDxVJaafb3pgvHhP7u4+WRmj4ABHDZHPrXqUarnHcctC/oXw7svCl5/anhu6+yyfZDb+VcKZYxFzxwwK9etUda+H2ma1G4vPB+g3AclTJDI1uT7fd9+ma7y/WOSFJo5hiRgr55UDBOfX8Pes5NPW1nmuP3wacYZVbgsoxuQHgcYBHtXUsRVjpfQz9lB62PBPFHwBsY8y6f4Z1a2PPFvcrOB+GSf0ry3WPAOoaP5ivHdxr90tPasoUj1OMV9i6jqHk24kt5I96ZVkY8bu3Tn/9dc5qWuLJbtHJCxVlCMu7O5uck44Of6Vi5p9CuQ+WtQnJs0ZDnExY4Yf3B/hWDM25v9YV3dR716F8SJl1TVhFbKFaMEvhQOp46enSvP4beNZn+0qJAufl3YyfUnrxXLVlzSuaWuWtPaRd0fllozwxxyp61fme5jmDbVM9sg+WNtyup7E9iKr6gf3fk2n+pVVYrHk/iM8mobYSR/vxMA7j5OMg5/vZ6Dr1rla5tTNq4nmSMsrSOFB+f5uSD2xXt/i7xVZt4C02+8K+VbsEX7QtvZjMn7oJIjyLhcZAyuOgHfJPld/Ytp9vONU01IbowxXCwBvuhxwTjO3cCCMV3d74k8cax4Tt/DNn4aS001rWKxjsY7ctO4jHmF+B8xbruPzYHHFefjFzunJdH30Dl5JanHa54omuFhSNVtvMVGIUAhtv3Tzk5/HpWTql5eaxci9uvLMqjaSqgdPp1qK8/fbF27BAu35lxjJJ5HY57VXhklW3YrMAGIXaf4j6/hXqxd4lRu9ytNdNb3A8lcFe5HBqxYyOXadoY5FOcjGB6/hVKZGWQrv4/wBqpIJFt/nEgDAZ45NNrQTRqrbyR2K3Um7c0o8plOcjuD9OK7PwPJFqswsf7BTUplYSw7FUSLt6/NwQc4PpXHNMl8y6hFMIpI1/eq6gKU7Y7Zz/ADra8N+ILnwzrH9oWCrnaq7G5GWHfB+6aijVlSnzDhP2ck7X9To/Gl7rTLbSSWN/a3UbMn3TtClR+H415hdNm4l8wlizdD69TmvbNQ8Trr3hB5pm3zvwyhQpjzwNpHUZ5ya8ZmmtoY5otgkkZsKzfwgccV11pcz53rc1nVVV6Rsl0Rf0YQNDtWNmErhecHDentWj4VaS31KZ5m2kkqo9G7cjuKwLFVhYNJIqkMG2nPJ9sVrWixzXe5MGN5jKuxiNo759CDXNB8lVSOWrG8Wu50kikbmduQeuOtVb9Wa2faPmUHn14NXpk+fhi4b5gxPWoJoy0T7Vxx3r7WHvR0PnE7SNz49KJPHNvff8/wBomnXA9yYQCf0rzqOPdPGvAJcZ/OvRvjKpmXwTqW7P2vwtafMe5QstcDp6+ZqNtHwQZFzn0zmvAxEP3rPpaLvTR0HhuzW18S6TMF+9MV6e5FafxR0sNqF2yxlTHPIf/HgR+hqCxbZqOn3C/wAF7gj/AHj/APXrpfi9CsNxdXC9GYE+pDKtN00qTZ6GAlzSqQ7xZ5Kqsd25QJF+8BXQ+H9Rmt2Lw3EsPnQ+W3luVzlgcZHuAfwrCmYLdBlwxIC9eat2k3lsFXkK2PrXDFo5r3P3H/YM8Y3niD4O2em+Ktdt7/xRbILibfI7XZsXZhA0u/rhllQbSVAUY619L1+CPwE8d3/hvxJFcaRr9/oUzRhVntZDGXkB+UEjnn0PGcHtmvsvw3+1F+0R4fvTp8fjWLUkA8xf7WswwZeOBJwSc8cHsawclcv2blsfpHXN6LmPxp4lhzxJHY3AH1R0P/osV49+z1+0Z4z+KPiR/CfjLwjYWEq2Ml1He2U7FJCjICpRuRkOTnPau18dfE7wX8KPHaaj441YabY6zpsVvHcNGzIJY5JDhtoJHyv19qZPK1dHqFFcn4d+LHwz8WKreHfHeiX24ZCx3ibj/wABJB/SurVldQyMGU8gjkGlsQLRRRQAUUUUAFFFFABRRRQAUUUUAFcz4v8AAOjeNAq6rJOm2Py8wsAcZyeSDXTUU4ycXeIbnDaP8FfhxowUx+H0upE/ju3aU/kTt/Suws9N0/To/L0+xt7ZP7sMSoP0FWaKcpyn8TuJJLYQjIweQa/M/wAXW/iLRPHl3b6Hp9neeWs0M0E8picmOZ1+VunQdCK/TGvz1+Nul+KNN+KmsXHhfS7W9a11O886G4m8rckjb0Kt2PzEc134Br34t9CJpu1rfM+M/it4T1DVPGWt3SrFZXd3cfaHsLiRd8RdQfvLwQeoPHBr0P8AZzhu9H0G50bVEW3nWaVkjaRSWVtpBGDzzurlPjpo+ueIPGUmpXOhNpl3NZwq1pLMrMxTK71I6qccH2o+A+lwedqGj+N7MBiyNbC8k2kAqwIRiR0IHAPeuTWGL07ntVlGpg1zdump9Jaa23UrVjwftEf4fMK0PgNfNofxHsJP9IIhW8EaiMyMi+eheRVO5ODtKAhR1LHgV53F4VjsZkuPD/iDVbBlZZExP5sZIOeQ3B6CvQfg67N4/tYdW0rzYftvmK1rtUyRSzqX3uSW5y25AOQ/VQKePw9SWKp1pR0Sa/I46VenDL6lGMrtyi7bO2q/yP0bgD+XukTYzfMV9Pr2z9KkoorA5T89gvUdc80uO/p6j8aeq7lXknFOClfvZAFfvVz8pZEF6/LTlXjipNv8IX8KAAPu8fhTFawipGAFZdwz3596+rf2etD+z+D4PEhuJvM1RGEkW8+WSkjKJNvTewHLdTgDtXysFbj5R6V9Q6F440v4Z/Bjw9cXW2W9nss2druwZnYlsn0Qbsk/h1Ir43jNqOEh3cv0Z9Nw1d1p9kv1Oy8dfEDTfBv2Gx+WfU9UuI4La3z0DOFMj46KM/ieB3x8r/GW4/tD4leIpGKnbe+SDn+4qr/SoG1rWPFnjey1TVryWW8vNQtw0mcFf3qgBcfdUDoB0qr8QGEnjTxBIo4bVLph7/vWr87pRVRM+uqPlRyFzbyOrKsjL16E1LoumrZxefJ+8lbnc1SSrkFsY9MUwyXAj2rIy4HUHpip9ly7EKfMa2m3Ud1dXdlI+ZEtGl2jtllXn65NeS/HjT7iSHR4wh2ibczfgcD9P0r3zwb4ftfh1oeqeIvHdrJb/wDCVaa9vo5liaRyyurPIVAJTgqVY9f5+WfFOzXxLe6b/YskdzBG26bHyFMZHRsevatqVOfLsTN2kbH7Oelrp9j8VteOxVXw3PaJhcKN8qL+fy1HY20V7cJatkrIwQ/ia3PhVHDo3wl+JU2oTQWt3fpaW9tbyTKJpgbolii5yRgg8etc9od5d2mrWJW1M6m5iUDgdWA5zXqxShzcvl+Rzzbnym78T7Gx0m90/RNPLC3tvtciqzZ5M5j5/CECuOYMY2KqBgfnWt468SS+IPFSMLG4hjFnuBeMgZM8xIOe/OeOCCOaxt27O5cEDrinQ+G5nNO4yNmZTG/ygcnb/hTJvMEmPLNPKRsGKht57D1pfMMjAlWIU84NbElPUBa/2XdfaYx5QhcvkZBG0mvHNW1BdM0e+vFjMskMjAskJjkc7iygcf6tRgdeRgHJzXsOvNHJoeoW6RhC1u+C+NvTnIPFeF63q1jbWt5ZmNLh7mwuZriGP70alRtnPO0KCnHQ54r4TiiSli6cOyv+J2YfSLZh/FTXNN1D4M6dpcMha9TWLy+mLRqD5X2G0jjyykhiSJWIHTcRXCeGopLj7Napj95iNSfU4Fdn4qt7HUf2ffBuuKkv9p6hY6jHqHmKqhWt54oI9ij7oKDn1PJ5NcdoPmW8kTx8eW2VIHo2R/Kvcw8ZRpq+56mJl+7gvU9R+HngPTvCnjvxNpMd4dU1i/hsmk2RPGsDqSZIc+iYVzJ0YHjoa2NN8K3mhaxq+77Xqd08hvLq6ljijjlQhnS3ickrhSTk9chuBgVSutdvNH1LxZ4yhltr/VmTzImjZtioQCIWXGDLliduWOCB0yKq/Dc6tc6G19cyarq7myFzcwSXipHAJG/eDLHanCgEEkjdjaM18Ni8RWxMXUrS2X/B+444aNnS2fiKx17xPNaaDqiR6WkKLeXMM5iNoVjJ/dSLuBZpPkPp7hq9L+Hfwq/Z8kvpte+LcupS2yWcNxa6DHkw3bDcGE8yAlVynzDILbifY+KeHfEWpahoccmk+EbGxOq+I30+a1Swj2NbwomWUkhgR5nBPy8OepBrvZNQkaOzs1VJZL6Y28kPmDdJChIcrkjk7ScDlVA45zXHDFYrB1r0Pu/zsdFKrUpLli7XPorXPjI3i7wnHHpNnNoFrolvCNLs9OjSLT1XpL5LbVbcm1cZORvPBrxj43/Fq5+IXhvU/C/xQ8Sanf6ZFp1zcWiW67yZxtVG8sMORJjBPbdjJODl2smqanZQaTPOIbLRo7p7WRbfIZN29wCMF9rSNucj7qKuTjFYiast14mvrH5JglkDZiNcm4GA25iFIUllb5Scg5FTLHSrVvbczfLZvUFPl91rdHw/4yskt9U+y/Y5LZ4srIjPkhu46DGDnivo39mfw5Z+C/AWreKdU8iSbxJHDGsRkIMUXmFYg4UHG9mBHfEi9K8//aA8Ik/Ea08mxe2/ty7EJhhiYsrFlVtq9WbqeOpzivqHQbG30e/Xwnpd4sVpplvDqV2QI/mtoyoSNlP+rEikEkcgR8E8V7/EGN58JCMftq79NDn5nDVbnlvxKt/O8RPqHjLxBeaL4ct0t7OO0hmYmW4wWXbuBVUIXlsEAMMAkAV534k8Xabb+Etej0O4WKGPVJbZbaaGQvOpjCRuOF2o3zkA8AJGNvJx3X7Q2uWo1DTfBq+GYtWj14Ws0371VljnmlXZ5boSEJXbgNt25bqDXlnje1sdPF38M47q5kt9PUXTz2kK3JeKPfOyyOXG4Qh2OV5IYjsK5cninQp83VaLy7mTTqe9JnNeE/hLr/jTS08QWd3aW1rNevp8BmYlproRtJt46A7TyfqeK+kfh/DY+H7TU/A//CUNd3MKjUnWBRDhEVApK8qI3QIoyctgsWGa4KzXwH4T8LxS+DfC+pWjarZiS11m+DSbDJC6q+0HYHbBDLg43LncBmur8L+D5PBfgkXljZtrOp6vdwy3NsJAk05GSEdSnyeWJFbYBt3ODz0qcwxEq6lGTaXTT8/Q2cE4LTU7rSbWaT4d3mtW3iTUb661WVJLXepUGVCG2QoBtXcd2TkAbDwa4Xw3DrF1b6hpdvpLaFpeoatKytaxs0kg2JhPtIGAyZIzz1PFR6pfa5Z+BdPk1q8/snT/AAxrTOun2V/9olNtLK4k4UgH5hgZIyoHGM102hanYa9oayQ3k7eFbKPUJLe6uJtlwUDgv5KAgYBDBTtGB69uFKMYTlU1u/y28ga5dGjR8I/Ebwx4gttXh0uz+yQacwW8fU5gIYrdpyvlvIvL5AYcL0Aq3orWc1pa6Dp2hau+m26tf6RqFxDi1unjnPnOkh5eJFZVUspJVVAAIFUrBfDOk+EdH1iTw7pxh1CUww26qXa5RWBD3CoACTmP58fKcDkmqfgnVLjU21CLQtPSOT7PcafpNo0ckcBfeq/LAxJ+V95x9WO0DFZVKfs0/Zp289v+HM4StJnFfFPwba6p4kt7ePU9SJv5Hs7DzIngs2uCFK+WrE7UUbmZ2XjGTnIry/4d3WheGfiRp/hnxX4XuPLu7z7LfTzu4aS3kYBPKiwMh8bRxhg+eK6j4waf8WNe8RRa5rupNF/YzRq0yt5MEHm5UiBWO5shT83Q89Byew+FcOn6vc3fiTSY9Pl8Rw38en6pqdxdCae4jXe0kglclYElUqm1QSQhAJ5FerTlHD4P99K6a6dH0JTSfc6Dxt4s8F/Cu3jtNP1oeTbXhWOzsoo5DFAkbKJFQEHyxLuHl8A/OeuBXynpvijXL7xwvjCztBBqT3SzwLaRbP36sGXaijHzNjgDnNeo/HbWLfUvFosbPQoLO6tbjzBdGIxKVAwRIhB4JG4AnIBwc5zXA6HpVjZ6JH4suNRngmTUtlnLExh+zFU34WTkFwSPlA+U7T0JzvltCFChzy+JoqklKpeJ6Tq3hnx94kuL60t7qG31HxBebdVsbyeS0OlPCpYI48z5wYw2Mqcb9oOTXbal4g8D+H/Cfh2GSK88NR3DvJBZp+/uJY/kkXz+GJSRXZ3YuSGCqc84zfD3hnRLjwn4u1K48VX1/YzSnU7q4k1ZY7hvJXMcQLYMzSN5e4gZGAMdK8m+LHjjR9c0+0sdK09kiOLi7vJPLWaVlAA27RlFCE/LxksCckZpKm8S40+i7adDTE0pQtKXU9D+IjaTcfBvSNU09RLayqmmGJEBIjN07uYiV+WRjGCeOA2BnqcX4O+E9W1xvEWneG/DfhzUotStLTSftV2xP2GZ3fDjeMgbNxdwBjKc84Nf4peEdL8HfCvw9ptmb2OW7vkljS68qS5nSSISqf3Y+UKHA2qWGZFBOeB2Hh3wTqXhnwVp2g3b6xo66tqQN1FH/o1zLHsYlp2jzujVRuVW2t+7bj7uc5ThSwsuWW7dr+X52IcW2l8tDHtfDf8Awkfwxl1DxJePqkGmp/Zm8bEW4EM33Y5BhmEaAkA/OzSZ2nDGtv4q/Ea78Pxabaw6Pf3F5BY4v77UrUQGRJcGOVPlUPu2MqkjAVfU1Q0L4ZOt1pcfia+nl8PaHrcdv9jnuP3F1lnjLJHvwP3shBk7YfjGTWd8RvCF74t8eX9p4n1G60zSdGWCwuTBHJJsEbBY5WZg3LLKXye3A5YVnGVGpUUZy93Vv8CIxqQuVrf9oTxVb6P4b0ewuLiSy0iE2xulhZJHRY3WCPdzl1V5QdoAbJ5rltc+K3iDWdUgt/DXiDxFLZpOt7bQ3NwsrQztCsczMoXaE+ThQCFVR3zXoupeG/ht8M9P0fVPF13rd19mlaOw0ZmZbkRZLruC/wCpBOHbksxOAyg15H4g8UXGoeNLprHRINImvtlvHFa2/wBmVYS8ZiRFflP3aJh+GO4kkg89WDhh6/NKjT011ezZKUk9T0J7q6+HfgfxB4T8L+LINZ1a4aHVb28tn2LpxBVnWB84kZj5XyrydvOAOPIPHPirxD4k16KXxVcRvdWUC2qsq42xAZC7urEEk5PcmvZ/jd4f1jQYZNXaa3e3v5LeIrYtgGN4ZJGitpgB5iYdt5KDnbnNeVeLNN0XWtN07VdLuobO4gjFrc210GXDBsL+9IIkcrhic8AqO1dOCcLqo1dvrbr8jWFSb92+hm+FNAbxJdS27XKskNu9yVd1QMw4VQSQMliB+J9K6ptD8K+G9VEd1dXu+2tIrz5l3RvKWx5RxjaoIO5hnOMcVg2WmTWvhvUrv7PamS5iS34DZjA+cyIQcbsYUdf4uOK3fCc3hrWLe8m8XafdXUbQSPJPDcNG0e3lssQd+QPlHrv9K6689HK+nkbLlhTd1qcrqS6Dqkeo6tb2y2cz3GbPT7UM0SQkHqzcjGB6klvrVTSfDGvahpY1O38P3l7YMWhWZYWKGRfmYKR/EAc4rPupbWFpJLWacp5rRx4G0MgJwT6HGPzr0PwL4b8XS+G4/FWnXDf2Xpkj3AtbwFraZVU+YFQElicgEgDGck8VrOXsqej+8xbSRxGj28l3dJ9nUEDEzRsu4MgIPPtikunimvp9SZVkR2YbVO0oOwH0HSpm8QmSzOk2djDbRS3Ulx5qth/LYAiEn+4pHH1qtJbR29vFeZH75DIilT93JGc9+QRVpO95C0RWkuvOkEcCvIituX1C9ACBxmt/VGuJrS0utSeX/RE+zxxScbY1HyqPTGSMf41h2tmy27XSvsI+6OhJzyK2NU8TT32hroBtYVthcfanuXiH2hpNmwgv1K45x60qiba5RpRb1F1PXrTUND0e0msZU1C086ORlVRHPE7BkZud28cgnoQF6Ypmn262t88N9Z+cGXMcYbY27HGPzHrWNJJGJv3EjNGrcb8FsV1niTRxHbaPrNncxz28tsvm5kXMT5wd3cE9RmpklC0V1LSlU97scp8sXmtb/Ln5Wj6kHuKb5LyRK24eY7ABD97rjp+FMYNDIzK65L8Y789auzTSzW26FsTBd7+wzwR6Hrmt9iOpTaMsT2bG0juBU32WGQjzmRH2gKduFYgc/pSW8kkaxS+WuImAbd0YZ6fj/Wrdy0Pkx3LQo48wu0OT8uTwBRKTC5CsU0mMunkRHCtnAbj9TirdxDZHT0ninBmUhnhKnIU+hzzjiqqtHxuVgDkbWHA/HHSixtJr6aS3t5NzA/6ocE/T1qHqQztvh1JZ6j448Ow22h+HUeJZYm/tKRzb3ErZ8t5VPDMGI2qMZ4zW742l1fU/EHima9Sxtbrw/iC9awU+Q9wztkhecIDkZGAOPWuY+H+tzeH/ABbp2pW1nGpt7owTubdJv3cq+UxVZPlDqGyCehwak1qzuvDPivW9IEksCEPHcwhtuYw2Qr4OD0GcEjNebVhzV/lp9+pUbNanNedJJsWa4UDZtQddox938afY3S2N6skUj28qNuR42wQw7/y4qsZC/myKwCtllyOMipp5IrqGO4hYZaPbIO24eh7mvThLlC57R4P+PjWMC6f4lhLsmP8ASInABHuo6nGO/ODXVWPxs8P6pNPZtdCOBtgtbh+MyP8AKd6dgMjkf/Xr5kjj2Wjy9Q/y9elMjmuoX2rIyAd19CO1dSrt6DPqLVPF1tYRvb3F5ZFHKrv8z5m4H3hnPrzXnPiz4iWMNrNFpjpPeylodytgKpzg15DJdTK370szHB3Z6/5xSSxxyY28YVcjPeh1b9CndE88l8sTT/aTJLKeSx+YnPr3rPdWWVAy7iXPmDdz+dWJlVYyjZDDgYPT8KrrDu2ws+NzEDistwua8M0UKl0Ekf7v5tuDz2HtxQg864is7W3PzRqFVYiZJSeuAO/86pnY8vlxqXdR074FWfPaO6R4rxoDGT5PlSYKE4zyOeorFxJT1Ol8ZeDrjwt/ZZt9Tku7zWLVbq1t442Mr2jEqjsCSQWKZCnnAz0xXpX7PeoavoviG4sbqGGzivdOkWRbl5DdXpRhhI0AJV8PtBXb8qnqeK8sW617VLm102aJL6WxhdY5lnJmw5yq789FY8DsTjvXQfDOTxZ4s8QRTabcWEN7ptni2uNTufIiiSMEmOMkqgcgscMeeTwea87G0pVcNKnN9NzVcrmjI+J+i2ugeM9Z03SVlFqLndAZGLMwI3btx6g5PrjpXGNdOqGJl+Xdu+hr1n463WoST2VrqbW5uoUEgNvt2CNh228EHOcjOTnk5zXlEZPzqV3EjO70rry6bnhouW46i5ZvSweXHcLy33sc9Tn0FJaxyfaRZrF5gJJGByw68U2ybZMIwxXe31xilaaR5laGQRyI20ep9Dn+ddlyDbhtWms/s7wJydiySZwufp0xUN5FKtrattZypZWkXGMjgjI9Kg26gvymUou3c2DkY75H+NWNPk8uNVusoPvqxXjHfBFYNNak3R01no0moaDd6lawP5dnAklzNHcrvUM4UYhOC/B6L/dY8AVxV7Zql1sF0skcnzRTKMLKvZhnp9OxyK6DT/El/pLyazZ3CwzLlIyE3EKcgnnjPNc3cSOoS32xsoLOr+zYyPbkfrToyqXd9hxehIyzRyYjyJF5x64HX3q3Y3k000nmSCCRl+Ztmc/l61UZpvOjmMmxtuMsOw45qS1a5WRrkSKyFShG3HXrWr2Jdjv7SPNjBnOSg7frRLBtVunTj3rpPhLqHhO6zoPi7wyboTZmhvft3kyxnABjwSAwJBI9zivSm+F/w71ZC2n3niGxJBH+rW4Uf985J619PgMXTdCMW9UeHWwlR1HKOx5V8Tk8/wAB/De+5JXTbu0Y+8dx0/I1wWjru1JG/uqzH8FNe0fFjwTNb+B/DWg+GZptdbSry9aR4bcq6Ry4cAoeeoxXkNrpmpafcSNfafc25WM48yFl64HcVyV1zVbo9ejpTSZrRmaLE0nRLmGVOOv3fzrvfiZAt+pAKgSQQ4J5/wCWeP5iuE1GZf7NXn/lkv6Yr0LxUy3Wm2Fx1WWxibgZyMkcfnWqjenJHoZa74i3dNHi9yjW8bKpRpi21/lz+P8AKmQy7cLt+YE9+4q5eMtu22TO6QHcqt6HkY+oqjGys/mLk4PVup5zXhxXL7pm2j0zwDFcXobS4hAftChm8xMnr2J6Zx+leyaZ4Evb+ONr3xVdEISrpA+D+IGK8G8A+JrfSpLi3vY3dblEEToRmJ0bcDz1Fe4La6xrmmjUvDN3KSGAkWKEs/OB8o43fXnvXHUbhM6KXvH1H+xHaWPhv456VZQ+Ir6f7XZ3luIJpXKt+6L9CSOPL7V7f+31fQ+H/CmheJLi3M0cVw1u6iMvkMyDoAfWvlT9k/QdR8O/H7wVq19Jezs2omAySZ2ZkieMjjj+KvtD9t23X/hV1rqUlsk6Wd6GZHTcDken4VtTleNxNctVH5/2vjzwzqNy0a/D/U2wPlltUEbDPccqTXbaD8RvEnh23juvCfjXxrpXmNiKN/MKE9wCcqfpn1rP0/4g65qkx0r4beA72bWRtRZLRJVO7pgAc/mK1/G3wp/aI03w3YeJvGNjcaLb3mpxWMUcs0fnSzzZKKkPUc7vmPPtxSvOS0LtZ2kej+Ff2qPj5pIWJPE2ma8i/wDLDVLMxT+43qOfzr0rwz+3ZqLqn/CXfDORQ3BksLpT7/dbJP51k+G/+Cf902268efGC/a5fEkkFmCFUnnAZmHf/ZNd5o/7EfwT0u3+x3HiPW7ok4w1/EuT16bD3yfxp2mluiHKi90dLoP7YnwX1gpHealf6TK38N5ZsBn6rmvS9D+JXgDxJEs2h+MNJug3AC3Khv8AvliD+leR3H7J/wAHNOurPTILfxBLLePs3tqBKqoBYk5UqTx0Az9BWx4O/ZT+HXgzxVD4ls5r28jgjmjWxvFikhbzFAJYbRuxzj3NWr/aMpKn9ls9oVldQysCp6EHrS1Hb28FrBHa2sKQwxKEjjRdqoo4AAHAAqSgyCiiigAooooAKKKKACiiigAr4o/acj8Q6L8TtWuPC+jwalcXItrhraSfyd0ZiAdlY8bsp0PWvtevkv8AahN1Y/EyO6RlBl0qBo+AeA8gNdmB/iNd0RPSNz4J/aGi8QeJ9W028uPCuoaReQWckDQ3WMS/PuDRuvDD5ufTIrkvgyl7beJrnSfF9vI9nPakxx3jbo1kVx93JwCQe3pX0N8Y/h9c/Fax06OHVItOutMkd0kaEurh1AKnBBXoDkZryvwd8EfiV4V8URf2ve2OuaA0cscsX2pnCkr8reXKAeuBwe9VWw1T2qna530sVS+rcnNZnU2+jaa1w39j3uoae2f+Xa4baD0+6civXvgnb6dY+MtDt/HGp6hcafJJJHPLNCU2+YCYwojAbLNFGu4HO5vQVwdr4H021uBJZrqOj3Q+bdZXLx4H+7yMfhXW6BB4mttQtWl8VS6gyTx/Y2uoVD20pYBZcoNzlSQQMjla3ry9y0Y2+Z5lR6Xc7+q1+/8A4J+lUKGONYy7PsULuY5LY7n3p9VdNa6azhN5IkknlpudRjcdoycduc15r8dPiB4j8Cx6J/wjt5DbteyT+cZLcS7lRVx1PGC2ffFeVex0RXM7I+VPLDMRgn3zS7ce+f8AOKy5vE+lRi1a2ju76K82eXNaW7SxKGnWDc78BQJGAOeRz9K2gOjZ3Z56V+5wrwqNqLvbc/L6uHq0YxlUi0pbeZEVP97kn0o2k/KD19qn25XqMGjblSuM59a0UjCxBJgK2OgH9K3fioXbxFZ2u5/9A0XTbQYY/Li3RmUY4HLH8TWRt6YzUiyTMC3mkn6/zrw89ymWbQhGMkrX38z1crzGOXyk5K9w+HcM83j/AMNw/aZgr6ta7xuJ4Eqn+lWdd8y61e+uC24zXM0hbHXMjH+tdB8LE834iaHI0YfyZ3nzj+5E7f0qj/ZslxMgjhZpJSNqqMkk9APU818BjcrnlNX2MmndX0/ryPrcNjo4+nzwTVnYwI7AyMVZfp/Svefg78B445IfFfjayBIxJZ6fKv4iSUH9EP1PpXQ/Cv4Mw6L5HiLxTbpJqAAe3tW5W39GbsX/AEH16eu15dSol7sTvhC2rPl/9r+4B1rw5Z9o7O4kwP8AadB/7LXzzjuv6V7p+1nced4/06AciHSU3f8AApZD/QV4b5bZPYnrivTwmlKJx19ZsYNueFGR145/Ouj8DrGfFGmtJtK/aYyd3Thgf6VzwG35u3ap7PVW0e+g1Lyyy2xNxJ8235E5bk9/bvXTLVGKVmTeJJI5NYtrhXVkm02ykXBztzEDj/PrWf8AKQB8tVWhZpoppOX+x2sYYNxgQoB+mKkaL+8c9sdKmmrRLk9SSSGGQjcoPfrjFM+yxMADu+v+NG0rjbk+n0prSFfqe1WIo65p8N1o95DNMYlkgdd+7ayZBG4Hsa+YPH0Q0DT9P0DS9Qa2mv5/sckSuDc3cYZg5Zj8u35i3zkDgAd698+KniQ+G/Cz6l5fMEqyq8iloiVywVwpBwduOPavC9Y8Har48u9G8aGSwt4YrR3LwyiRGkkfdsj2n5mTeMjtg9TXwuf1IrMIOekUtX56s7cMnyln4hTaXH8E/A2m6LPcXVlb6LcrFNM4LSCTU5hvYDgZ2dOwxWd8IfhZ45+LXiS18K+BtButSu5EVpPKX5IELcySOcKijI5Yj2r239lf9nDwt8cfBz2fjfx4uj6N4N/e62sMIjm+ed2WNS2VQHactgnLcLk5r6R8efGnwt8BdOk+FHwR8NW+i6dBNHp63luVF1e3JCEOsr/6xwXwwbLABiMcCu6tmNHBUVOWvoetioxfKl0Wp5l8evgT4i/Z8+GcGuahrWn6nrOrbrGNIYFiS2TyVU7ZMBpJS2Dk7c9AR3+erBbiHRbbT00mCWW7urua+S5ghj8rBBlkcodgdkXAXOATya9f+KXirxR46WNvHmuXOoxQbY4V1CZzBDhstIByADsz0HQHNef3FlbeHbOy1jUtFuoIYJWmvFhmUyJI8flqSp6qF6KmM7jnvj4etVo15c1FWTfqcD1vYy/ENrrSeH9Jt9C1CEwTXxjnityM7Zh8kkbRHoqu4BJJyRjO2vSZPhfYN4N03xJoetWYvpdUuYrpIljkvHjRCYpMvuxt53Nxu5GNwGPO5dHt7bVo9W0m+Vb02nnbFRI40ZkCq8gYAsR8zBedrHjOBXb+ELy18OW4vNL02ytoTGFea6iKG8N0CR5anhAmyRmYgMDJkY7S58sbvTz8zdTukzNs4LhZbxnt7VZEjWEPJHtw0igl84AAYMxIHQnNY/g9V0G613w4012ollj1CdYJAxujGjR/OEwYwsiZ24HUseaku/Fl9Lb6tN9l1K5jif5LuwQ/NbBVBgTPzGTKbsjkhlY84AZ4Js54dKbVtd8P32n3mp28c/kFfKkhjMrMkO5sGUnedzHB4XnJNRSp8kJVNrmFOo1U5n5nlHirXl8RfEzwC2k3hlvINYkuo2V28xdp3LjK542dhjgY65r2TwnGp8Oahew6jdXd74kuUS4muGJaMRqSWIHIUYJA/u7B2rxPUppbb9ozwpJD5X2oXTzSmQCCFTKjFg2eFQbiCehAyOua9l8G6rdaxHrGufZ4bLTtN1WSHR758s8sLK6O8pwS5JVgOBtDhB0r0eIIuNGklsox/Mmm/aSR5d4w1Dw5JJL46vPs0/8AYtv5ljby5aS6vnmItyAGA35VQFIP7tCcYHHg95/wkPxC1SO10rTJ5YHu0tI/KhBMU0pICMyj+JlfAJ6L2FevfFvxJoPh3VhaeGtFgv7mwuLi61dE3FEZ2ClpJByGwyopXgBuOuKw/h/q2r+PLXULnVr4abaWt1CI5Y1jhtrF1CiLaG43Hc6kt0MgYntXXgb4fDqs47bX6L0HOWvKtShHo3im1t9C1rUIbS81DS737Ho2grCZmumjZS7ztnPA27cZb5elet/DTTIPBui6f/wk0rT30t9eXTi33zSvcTQpE0fmKPkiG18ZLY27icDBi8B6T4XhvJfGS+Lm+16TeyrF/asSwWVrbhYWe6TIw+UZtqr8zEYA71t+J9c1DxPNb6x4duE01dY8q4hkkvkM1zHKIvKWK3jIdYwN7MT0yVJxnKxk5V6XLay6sunON7Mh8J+D9P8ADcesXmrKkumwTNe2kVxAJvOiZ/KiRzkk+W4G0MpOS7d8VL4ft4brTtV1Y6CwmhWaa4FvIwe6gDbVh3Mo2jflGJT5iQAAorT1zUNPfxPa3yX82mp4OuhHeKZ1CyFYUKyICpSJS8mQzkEkMR0OMTxtqnhHSdcsdF8cavfX92YJNRlt9PuttreKmJEMmzh1JDhRGcYJz0GfNpUZ1o8z3l+S8g/dxqe87ryJrKbRZtQtoY4bHUb+NDb26lpFW2ljZMW8CAfPIHYYyAMhnY8Cum8JyyahY6ZfmLdcxtcR28rM37y3XAaIsik4YF5Xb1EYHy7s8h8PrxryOfxV9hsbXQLtLpdDt47aT+0ZdiqpCSsfmACvIygMW3M2AMCtDwZ471rXLbWm0ez1OfdJa6Rp1gyiHDkSPcRbc5H7sswdgFBCc54rSrBv3XrY55Plfu6HlfxItPETX3ibxFY/bY47C/t9Ge2WbzbZJ5Yxi33FiJGZEO5QP4Tu28A+o/DTTLPwL4f8Uafpupx2+pM1s11datbxpDFGsLrCkeAWZmEysFKhgyFsnOa8MurLx5a/FRvCfhy5STUIdfimhtEbzbWG9fblgMbAI9+xgc4xzXtMPhGT4P8AgzVdQ1m9W78U+JLjzlmuIBIsZ2Fmn8hlXIUA4fgAOvPaujH/ALulCjH7VtPu/BDpqUk3Dc8N8beNvD/h64vtN8F26aiuoL5mo3OpQlnjuSzFlhDAMi5K5zkll644rK8Gy6Ta/D671DXre+u57O7+0aasK7lhYsRK7/wqXKqoJGRtzyMCmeKPCdhpeo2VjHeafJB4ivI7e3kedibNS6ANI5GAAr8kHsSRyK9q8Q+EfhnNa3HhbQbfQIlvb8mTUNK3PaxeWhMax73aRot2VLbgCUOTk4HfKdKhRja+rWvoOCstXuc14F1GG++Et+2t6TBqt9Y6goXTpo2Ek8E4URs8irlyHACpkMRvJ4xXlHjhRo11aWiQGSODD+XdQqjCUP8AvImCnLKCMcnOD2Neh/Bvw58RJLfVNVmmuLbRr1jYi7t1EwgkjcBpFjVht2h8AsD14Fc94s8H2/w48RNqkWpaT4misdUktJYbojzrlf75CscBlPDhsg5I45ow86dPEyimn5L+tAqyu7noXh26sfF7ad8S/iDqgtIdG0uCSzsrOSVmtTE7AMkbcZ/dJgBiowMmqF58UrzSPEUPi/TpIr2yu5JZrV7z9/OsyA7ZGjyFQsx8sFs/JnPerPg/xZqOv+Jrzw7401TTtN0a10V3bRwhtbW6MUeUtwxBK7Syn5R85Xj1rzTwla6h4j+KVhY6XH9mMRlurWBF8xI/JRpcEMCDjZjJGMgVyRw0ZVZOe0VouiXl5jj7SKVVPW/5Hp/xq8YX2iLpHgldeu7+91G8N3q128fkxushUmKMhcFDvYsRnB4/hrE8ReN/HWufFLVp/EN5p+iXtgf7QabUlaVY1RU8piqs3myMRGQvzYIHHBxoa5pngb4hJH4klvNbuNRsYbjz7OJllfzPmxHN8pMaiTA34wcNtUAVsatpcdrpt94asfDfh3TNf19F02Fr2Z5HLymNVW36IBGAzvK5PzDjk4rODpUoxhy+9re/n19LeQ4Yicb+buZXjRtFvfDeiXnxU8cF/E2s3Ml8uoTHz7i0clJDPLFGfusf3YTHGCRjknwzXpL5fFF55XiP+15pJC8N+HI87cQwcF8FT09MHjpXrHjy8t5nk1XxP4flS2iljs/OjlhaXEceweXHhtqs0bEsedowMV4feT+XcSzQpMIHZ/JMqje8Zz1A4/AcV62V0uWF+a979rfIdTllUfI7rufS3xD1bSYYdDsdPtUkTTPs9q0l1OrpMfKIkTZEXYsWXGfm+71PJPg+s6Pqzal9j/sO6judUdbuzgVfmkhkyyFIx6gZHsOlfTlhZ+BtchsvEOqNcLpXh6zs0Wa6u4/ssUqW3yYkALP8juz4DbigVSD08s+L1vNotxa+M7CS9i1RdQ2xfaZJC0EG3EDIxw+7dHKSGCYG0KuKwwEoUpunFa/rc546O55lcw6p4etLzQ9atLu0mKKVtbhWQqXAIJU852tkdsNnvXb+EPE3hm18J+X4gbzHuLiVUgi3b7cLCyqcDCsXJbg9Ao/vYPn2tXmrajqa3WuXVxcXMoVXlmO4sFAAOfQAAD0Art/DWh3OgXsNvd3eiq+twi0tpLxUuYYdzK3mgjOxsFFHf5jwMV6OKjGVP3tzbm/mOF+xw3Ubt8sQH+r75x+memTXqXwNe+vvN8EzaNqN/o17Is2ofYJpQ6ox2N9xcohD/vNvLBQM4yKyfHngfTfBfhST99a6hqN1t+0rHIc2RaQMuzkq2QACQcgtgjjNc5o76xY6FNqmi6ncWoMBS6khvPLdU3qMFVO4qSQMH0NZSmsZQapvyT8+5MkZXirT9P0fxFqWmaTcy3NpbXTw2ski7S6KcDcCAR+Vd7I3w71zRtG8m6/s+4nZYL1ZrJlhiAUgszxZJ27twCjLHbuAFec6hFJDb2lzIsu2dWZJGGBKQ2CV7nB4zW9a65ND4XhsHXzj5nC5yY4xyduRgZYgnB7e9dE4ScY66oTZhalDCl9KtlePcwxHYj+Xs3jsSMnGR1osVdYV23kcPzHKuNygk4OQe1QKrmQbXfGd0jKvSnSQ/aZDu+Rj0A/wrotpYroNms1t/Nh3Btjbd6d/pXR3niPS7rwlpeiv4dtrW5sFIubpGIe7bLbWwB1AIySScjjArnLfdAx85QpRslW4zV23a33C6vbf7QrOS3zEAA9+KipBStfoLcpyLG8jR7WZioKjGNh6mrTRmGd/3Y4g3Bd2CRjnn14zioDeNuY7xH5kuApHzBfTP0ouI1aRpkkDDZt+ZujD+XHSqGJcL/oo7K+MYPAp1iFlsrjzLh8mP7u4eh4x3+vanSM8enx2+xGR1EnQ5jHvn1qK1WQSs9vHkKuFUjOR0/OjdD2JYbi4ktDD5IdQF+fBOwZFQyM0eqeZbxkBFDfKeSe/NLDM9o0beYUicn5s9/Q06RfLuo7pJSAo2N2x+HpRYRav2T7UJ7SaSFcA/MxDbj9Ov19q6Xx2NSttfhumnLPPpVsDIrhleJ4xjGRwex75Ge9c9dBlkt3kKl0QjG3AJJyP50xobj7XbLdSfuyC0StJ8gPcf7PNYcl5KXYadlqVrqTzPLXkhVEcnYsevXtmrEl4rPHHFbiBY9pAccNznOaZq0cKsUjZQA4VmA+rD+dV5fL8pItz7lyvHKkdf51stUK6LEjSRwNM20F3wVK8tznII47CoppmMhYRb0HIA9+1TxyRNbxKtwpCsYypXp7j86je3litPOjuEYIA24cc+mPUVSdikhlysLtFJH5ZznKnovt68VDtWaaN4wQRx9adBHO0wXzdxcZznpTUQfN+85HJLcZOf0qttBp9BfLBdo1kDNuHJ79T+FI19sb51QspKjcOh/vCiGSGS4k81CoYfwqOvb2qxPa2hbdOzIdoUKw+YfiKT03E9CbzJzZlUWDfKqsVK/MEHPXtUUdkb50a4kWKMKcu3Cj05xzV+2vNMltgt1ZmUyyjcI22OoGRwSMc5FWp5tFXT0tV84PH5jSyFvlkAPy7Rjj09+DxWLm10EtdiaS01jSbGex0y6g/s2fDtcBgQ6r0GWAYLuI44yQDzip/BfiH/hH9Rj1SzkM6lmzbywh4vmVlO9TkN97jj09K6bwX40Nl4f1G38uG9htvKmk0q7kIS5jAYMhx95R8hAzkEcVwliLfzbk2VnKYXtjhY1LNC+3PfnaCDz2H0rmi5VeaFRf8E0guV+Z0Hiz4hSeNvMutSt4hdLuVVWJQEj6+XFgfIqnJwOPmOea4O3u9qurMAW+XH/16n1DzlImZVGAFbaMA5H8z3ql5aQyCPfuDgMM9s110KMaUeWOw5zlUfNLVi7i8wZAQy+vap7gbphNGNoHO1R69agZQ8hVcjnk+taVrIy2ZLRDzEHytt+7659eK2bsQ2TQ+da4UAlZEwSDhWz0Ge9EavHthGSkJzznbjv8AhTNP+zs6L5hEYblTkjkZLADpVmOY3Cz28cnmIY2+6p+VfX39axbMgtUWfTb1WjRXbLAJ021mw7SoSRRvAwrZwPoa0LW8/s2Hy451uYm+VkK9Qev4d6z5lcNJ9nxLGoDqcYOO+fcVVPqaWTWhOrsP9GZeWIye/HIINSeYIWWZcqF7EAgMPUe9ZsMkjsWkY7l4A9qvwSZz5m07/lOf4vQH6etVKImjotD1S60nVrfXbYBCeGTGdvGDwe3evoLwv8RNJaaIr5BMoCxmEbPm7hgTheec5xjNfLKtNE4LAhlUnr79D610mk+IrrR5P9EWOW2lHzLKv3gw6A9R3q6UuR6gmfYlvfJteTyBcIfmjMbrtAwTyenqKzH8XeC55v7P1Zra1k37PLvFCM/TG3swJ4NeBeHfHjNpcujvFKSwJWO3YquB0D4OSOhOBzzXH67qU19dRX11AqIY+qMfmBP5n6e1dTr8qvEqyZ9R654L+GOqWzTX0dhl1z5kMwRTngbeSDz/ACrx7xv4r8Mf2X/ZmgSX5NkGtU8+MABAxO7d1xngZ7GuR8Pz6LPGF1C8MQIIjYOQUx0z6f8A1zVPXNR0tYZYNPZWmZ2j8xmyNh6Nn/H0qliKrWmxVOToy547nNM25zMswYnjBzz6496tGZY2Nu6ksfnYnjYPp69azreVlhkZ+AeF+XqfarSt9omJaMiULy39/IHX9a5fUSZ0ekJCZ08x402n92oOd3p9a+h/h2H0XSX8SS+JrVIjDFG1pJ94qOoKH7rA9COCOc818y28c8ckUa7iqRsdmOSPb9TX0t+xl4J0H4vfHbTPBvjjU7oaK0M11efvgrOIItyoC3TOAvHPp61y1I87NKVXllqep/CLxxr198VfBV5pthLHo9j4ksBLdSRkIzGdcDI4zjdjPUA9a/Tb4yaLo/iDQNK0zXoWk0+bWrOO4VWIJVmKcEcjJYDivniOXwT4x+P/AIX+EfgnS/7A8GfD65eUxw2oCXmtpE0iIxOQzLGj48z5iVm719JfFg7fBMt8P+XK8srv6bLmMn9M1tCKhojSpLmkix4Z8N6B4Wiks/BPgyx0iKXJeQQrB5hHcgDe3/AsV4b8Um1D4mftL+CPhbNeGfTPDEZ8T6pHEmxY5Fz5SEglt3C9T0lGK+jtU1Cx0fT7zWNSnW3s7CF7q4mbokaKWZj7AAmvnj9k/Tb7xRceKvj5rkUkd149v7hrON8kxafG+Ixzz1AX/gFDdjOLteR9EW+m6dHvaOxgBZySxQEsfUk8mrIhjUHy40U9eBiqt5q+maXEr6rqVta5XP76VVJ+gJ5/CshPG0N/t/4R/QtW1QP0mW2MEI+sk2wEf7oNNEGnql/Y6fNYT6hGB5kzQxynGImKMeT2BCkZ+laIIYBh0Nefar4m1qXxhoHhHUtNtF/tMzTXENrKZZLWNEYpI7kBcMQRgDPofX0KmNqwUUUUCCiiigAooooAKKKa7MqMyqWIGQo7+3NADqK8H8R/tVabpN1c2Fn4OvmubWRoZVuplTa6kgjCbs4I9a8y8Rfti+O5Mx6TotlZdcN5RYn8WJH6Um7bmipSZ9i18w/td2Pl674c1ba2JrWe1ZscAq6sBn1w7HFeFa9+0Z8Xtb3rJ4ouoY34KwyFB/45tFeV+KtY8aeIkT/iuNcsSsnnEW0qFHfgbmV1OTgYz6VrQrqjUUxyw8pK1zzTUv2mvFnhnxVq+i6p4f028isb6e2Vo5Hhk2pIQufvAnAHYV0Gk/tZ+C7plj1rQ9U09zyWQJcIPX7pB/SvOPF3wV8Ratqt5rUfiaC9u72Vp5HuYPKZ5G5JOzKj8AK4zVvg746sPmjsIbxODm2uVJPH91sGtHjJ814vQ0+rU5L3kfWejfHD4W64u+z8YWUTD+C5LQNn6OBXXrq+m3Wk3WoWes27pAomVreYOzMM4wFzu75zwM81+fjeC/FXnGGbw3qTFW2ndDx279O9dh4R8GfEPS3/AOJaw0gTMu5hdKrKRnB+TJGPatfrzcbSRhPAxfwyP3o8KS/aPDOlXH2Vbbz7OKbyVUDy9yhtuAAOM+leI/tV3ipceGrXIBC3c3/ooV6j8G9SfV/hN4O1Oa4E81xodi00oOd8ggRXbn1YGvHf2tJv+J14at9hG21un3djl4xj9K8+fwsqivfR8r2vivWre0XT/Piks0ma6W3liBQTMxcv653kt1xnnGQMaFv441JWBmtrWVe23ch/ma5hx82QQCKVWcg7upr7Sjjq+Hv7OVr7nzVXDUayXPG9jsY/iBF/y20eQccGOUHP5gVcj8caG/8ArFu49w6+UCB+Rrgm3ADdzkdKVWO/G3nv6H1rshnuLju0/kcssqw0ltb5npEHinw7cY26kiEEYEisnX6ir0OqaXPjydRtGDdhMuf515WnmH7qj/gVaeg+H9U8RatbaHo+mTXt7dSeXDDCm4sep9gB1JPAAya64cRVV8UEc7yWm9IyZ9C/BezkvvHlokI3EWl2ybehJhZRz/wIV754D+F+n+F3TVb9UuNR24TusA77fVvf8qwPgZ8CdN+Fth/a2qeVd+JLuPbNOvKWyHrFF7erdTjsK9ar5HO8zWY4j2kFZWS/P/M+jy3A/UaPs27u9wpGYKpZjgDkmlrzH4hfFFY5pPA/gW3bWPEd4rQ+VBytuDkFnbooHqeBXjJXPQPGvjPdeFfHPjh9W0fxdo89ubWGBf8ASlB3LuyOSPWvOLjwqsLOsNwkyIuf3bh/5VleJvBupeH9Yu9DvrR55rGQxSSW6s0TEYztYjkds+1Yclk1uxxDNEffIP8AKvSp14QilqckqcpNs2J9JlhG9mHup61yXiT5leMkkBH+XPtUuoanqFjsdfNlT1M2MHsvPqePxrnL/U5p7Z5JlT5Y3VgsgbBIyAfeuqFWM/hOeVOUdWdNpgVbeKPcflRR9PlFWLhtvG7JPAUVXtc7dvQADp2wMUsjM21uM5+XtWsRMk8xoY/vFsHoafy+JOp7Cq2WmX0w350+NYfu7SGHXFO9g3OJ+LbRah4dm8OLtS4viIoJJvlj8xumCeuBnOOma8E8eeKLrQ9ZsvDtrqEtjpunacY7ZYWBhcNkbkUADnnJH9a9y+K+rXFr9htoV8iO3zfLdOQU3LlSCMFlIBPOPX6jyX4laKnjTWLCwt7S0EF2v2qCSLCIkTAMArdcNhs464B7Zr87zmXPmTjPVL/I9GhH93oe6/s//E1tJ+AWp/D238JWtx/b19JPdagrAgukaKAnHzKpQHJP3ifejWNW03xBeWeoNqba3NZqWSO23y+Q8mA5UHIJ5Vf72c+lec+CLxL7RY9OtNSu7O10aB7L7IIgsaQja+5H/wBpAVJ5OVzyxr0/wjbazry3B01Y7O5t2juLcwxlfN2qSqZVRuyA2GOPu9utfNYl1sVV957aL0Ojlbujn/EFq8y6Vb7ole2aSR4ZZGd1YEYzkhRz/D0B5zXD/ErVXs/C1rpev3eyV5VuWhteVjCsWO4EjKkjZ8rHAY8ZANdVqni+TUvFllov9ntaSpvLI20MxXguoBO9uWJweigc5zWD4m8F2eqahLqy2dxdWttDFB9jjlB2kvlZD0ACr1XIJGQaMPyUZx5tlqYWk9Cn4T8QaX4k0611vVVS41CaFLy2k+yl/sMEjkJbKWxtBYMBtGMLuPUA95fXVxqsiPMIYbaaGUIUCtIDEq78qeApLbSeeCSMVV8MS6JpMmnafpen2UNpBC6efblUiFqgYBccY4G0ZO4M5HasrxRY3F5Y3KKzWttdKtq+LrYohb7oDpnbgAHaMABup5q5zhVq88dEu/QmTtoYuveLtHs0uf7Dv1v7i2gddqp5MFuJQqgNKfkwuCwY5Ylhx3qxqUni1dB0GSbUl097lfNuY47j7VMsRDBSWKDcm0nBOMZQDpXO/D250rxRrFsLjSdMSx85GVYbh/NYQlI41RAuZD8mRuGwbUYjIw3o3jbVINI0KXUNQuIlvRbiK3aZ+I5GbKsxxnaAuTnGemORW2ItQlGnHVsVmryPCmsZtU+NtrrMOoQefbvhIpct0jZtzEEZA8sjGRyADivd77VrGXR1nhtoVsLRGluld0Z9QbcqhfKjwv7xiCMds49a+WNK1mS3+IlveXlxukn0q6jMs0gYh5Ld1Dhm43EsSD1yR9a+nPBelJ4X8BaNauypNfWK3BkmgIaVnUGSQE5LYMg/hAAXj29DiGlFSpRe6SX4CjD3eY8L8Ua5pkdnc6bbx6VaX8mj3djqd5a2H+i2y/a5JFSYnIaUDZyi5AVAOeapfDX4f61ceH9M1HxxcwWPhfRLh7yGBW+e+Zo1IaXbgrGm1TtbLMcjFYWveZ4H1D/hH7azs9QGp6v/AGm9rcLIxDqSscEm0jeQ21129fMwa9l+IWnXnia31G38WT6jZ29xpYuodPsbhGtVvP4mGAXyvz5DbR+7w2Ditp4j2NGL6Pr1+S+8zbs9epg+KNe8ByQQXyald3EcTTG/laONZbxBFGsi+T8xiVhFtU/wuoKqOlbt1puntdaH4z8UW+nWuoW0Nu002oQ+W1vPAI1jtLaKJiQpAAIOBmQlhgVx9n4k+Gvhfw74QutdtIb+z0o3VnEk0fzkxM4Z5DGBv3sAo5I2k8k5I8b8afEvxN4016fUrrVJrmEwyQwQSrtS3WRgWjVRwBkA9+R7VtSpzry5IXSXX9DWnDnlrsfUXiDRtIsGmE8ukfYLmOJtRvvtnmG7fDNLB82/IcRqc7slQcHB5848QWPhvx34u1Hxbb69c6d4c8G28Nu1zLCyyuwkIW3tGX7wVNoVnK4Dbj0xXiR8Wa5d6TJ4XklN5amUyDzEA2Sbid6nGSeWHJ6EegwltpWpSW5kmupIocfPulbbxnk8474yc10UsBKin7x10MvrV/4aPVdP+NPgLRfFFvqL6BNqNjaR3ZiBby3tpZU2rsUExbAMKz43MBnivVtYt7jw/wDD26Wz1ZPLu9WllhKytZBknCouZSSxCksOpxj618p/2x4e023imhzdXlqxij2xrhgwJZjkYOOi+59q7n/hZ3ij4q20ej6o15NqhWO2tLhySGRB8qDGApLDPHy5yeDXPjcsnOUZ0lotxYjDxo2XMm/L/M6Pwl8RNC+HPjO307wjZ3+t67Fc+Rc3d3IDby3criOSS36MiFflDO3Ic/KDzSfHLQ9S0XSbnUvtV/NdWxjt73VNQvnf7TdOg8+0tonG4qpYsSCVAYYI7nhlofCuuXmoQtYarrESw2wNwVlnumeMO+EwQ5DOeVP/ACzHORzpfFzw0+s6FpWoT+dLq+oLbz2awKCoUD9/LPFkMgVeFCrluOflOcXUisVC23VmcMNKTlG9uUqaP4T8L6x4d8Ha14j/ALLmluEhj0zSZL1bddSlUBGM7M37tQ5Cs2CX8vsorzn4qSWZ8UXa6EzpYvMLyYQsqo80w3ERBAAqgZAVey+tfQuo/D/Q/A+naBqniKBdRuvDFrDpdhcQXQcx3jRu/wC6jZSP9dIz4I+8Ao5PHjWm+E/D+qeOrH4c3l/PJNdatCbprhDBDDgM1zuyQynClVUcEk9K0w1aM6nOrtK/pudeOhCjGMUtf8ktfvM/wL4f8cT6XqOveHdXv9M03SrSS7vmlunt0jRFB4UHlirjbjlsnFdZ5S3Hwn0Tx/qXh/TGubd5Xh8yUoZYYJgnmogABJO2Itlm+Unjiui+K3xEuIfDMUWh3EF9/brS2ccP2JikthbNiOcM3U71ABABZR3GK8F8S6p4g1aKz03VLgpBpMRWxt1+5EGYuVUf7zMfbcaukpY33rcuvzseZTak3znX+G9Jm+J3jTUdUtvDjWunRKs8lvFcAMqkbVijkfgyySAKv1PYVrtoB8H+IYJfCtu41/W7u4tYNGuMTvYWYYr87Zw5kQnJ/ukEHnNdN8CdA13wbY6ve6tf2Gl3t3awObbUInk8sl1eAmIEM7suXCKrcBSRxiue8eaTrFj4803x147mt9etzNFbMNLLDzSwl8pGIVctlTuGdxBHrUOvGeIdCD91L7/L/gjUuW8T07RtS8N/Dj4Txw+H9HtdQGs6wkOqXdzeCOOeRziNGij/AHpiiDKSF4fLAEivBPF3ivxrr3i2/uvFGuGbUrWSRgxXakCocqkS9UUDoo6CvcPjWW8L+G7fwzc6Toa6jNcW0qz/AGdVt7cqo8poiAWZsiRT14XkdK8xvvhN4it/DN98SdTvmhltZWUWUgxcXUgYmc7SwKwqpGXx/ERjIrHL1Ss61T4pN7kqdvdexl+Kraxs/hVoOppdhL7UZY2jT7S8hMYV/MyCPvcxsTwF3hRkk40PhV8CfFXxD0sTagzwaK1sbyIxSRCWYB32oS5wgZkcLnnJHB6VV+LcF1ceJbRp/skjx2QaGwtImFrFEIlYmIknco+6G77AT0rM8K/EPxFonhebwj4bkuoBPfR3Ruzh/IIB4Uhdy5YKQcjGD3Ndy9s8Peg7Sbvr0RSfI9D1DTfhnDrH/CMySajf3ksUlra2ljHDHv8ALhL/AD3K7iDtKqm5uCMDHPHK/Gq1vV1y2ttHZdQsnu2dpLdh5M97gF+hyTs/ibnk4NHgu48Y6Fb65YpayvrF3cfaL6eedvtNyBvfYVbDeWQsjs2R9zk81T8OXOn+Bbq61PxMJlhuo5obSNwHIOAwd48EsGBxz0JHpXHFVY1vaSlzW2XcOWO8dWeXNaT3OsJaXTeS7yFWDEkRDJ4454Nem6bPpt59k0fwzpaXGuwi3TzmXzgp8va52MCi873zjIIB7Vy/iWbT/Emti/8ADej3VuLmGCHy3bLzy42GRfQPIDhe3FT2/hbxboNrBqHmf2dq19dCw+z3qrGThs5+fBABwDgEEFs8V6lb97CLbs/18xJtlvxnZDwhqU1rNrkOprcAieRrc7WbBO1VPUDgZ6ZHtXD/AGiTU5Jkh0+FRM+7KpyuOw9v8a6PXvEl9rV9e2euWdpdanvjtZLuHGIxH8h2BfkKkDjtxkdazvEGqTaxPc3klusRtFVF8tBHtCDavHbjHFXhoyhFKS1L30I73R7WTQLG+tb8yXJeSOa3YBfK24xtycsDnOcYqOSSG1s7KW2mLXCeYskT8qM4wRjpx/IVmq0jQRl2OQuC3dgeo/8ArVf1bR3sNtv5m+V4xKskbZRlOCDnt9DyO9dFraNkMgm2LI0aq5k6v3A70kyw/aFmWVxGRld/ft1ptuCHjZ22mXO1m/ix1p915n2YLNIqLEcxjuwJ6CrGNvrf5TcTSbUl+7zzn3ptvM1uoIlDEDt0b2NJNI11JFaqoLHbtXoP/wBdOkVrGYW9xErf3uOMU/JjSIi6+ZHNNuwZM5AHy1o7LeOTy35ypZSRy5Y8Z7YFU1i8/wCWGMkKx2hhnj3qxJDcG4Zt21AOOcEjp3/zzSkrmipykrpaEEi3iYbcxhb5FOeB/wDWqSzSRVeRl2qG25BwR9RTftE0qtbq2I15BbnaR1xVmxWBVWMzRyB2IY/xAnHbv9aUm7EyTZn3dvI2+NVU/OdvGMZp8Vuk0yrdfJGvzMxBwMdjipp5YY5p7fCkBicjqPans1ta2/kSK4nwBkZxt+nr70X0J2Gxzt+8n3boyd7RtzleAB7VNLNau0UkeU3ybduMqi+uapx+XHI+WMsQby9q5G4deRUq2fm2M0kXyrBIWTLdRn+nvSaQnqT6vbYkt5kQ5B+d15BGeMgf55qOS13DzZGVYV7K3PbnH40LdTM8dpG0zQSRbQrevcCpFjyskckP76Mj6EA47d6SvET0M6OAeZkZAGakMckiyvb7pI0+8dv3R6n0p12vk/MpDZbn0554NCmaBVEahGlyp+b09R7g1rvqWrizf6L5O0KHC5WTd976fSmxzTT5VlHH3iRy2KczEwsykhk4ZCu4enBpFt2aFmLFDGN2AMYzx+NJBcYwt7dX3YLBcq4qdfKns5SoOV2umc5bnH41XeGKFF/0Ukr82WORiifUJLqIIkQjKjaSvcduKGrlNXLVpBvm/wBQ8itt3Dd8o9fpXbpJ4fu/BcPg9PDdmniNLqO4XUI1yZLcsfvv14DAYAOcewrhLKaaTy7cL8y9mztdeuDj+VdH4d1K90LVoPEVq3my2gJ8logVzn5V+nQ8ciubEJv5amc247HoHw60vQvDPjTUtBv9U0C7vraH7PatJma2DM4O9X4UlevznA5yPTi/iZcapFq1rpLx2UKaPGLWC5tYfKkukDEh5WUnzWGWG8dRXcaDHpeueF5dQ1Cwj0FbeKaOZlhXN3Izh08tW+b5QQvH95mJ7Vx3jqS3uv8AhHYbOxkgMWn7WaWPEjSI58xSMkHBJwfQ159CcpYm716ehVNc8b9TPa30XVdIjgazuzqTNtZ4AHSRucfJwQR3wTnrXLahbR28iZhk2sv8SlcY471t2TSyaUZo5DFHLJg9flcHIIbsf1rAvPO+f7zLEx3ZbOc/WvVpJpvU0bXLbqV5hMrDH8RrQ2tNCm19y+melU1vl8swsg2e45z9at200cdqDDIVMrEFs4K//WrZkWuS27MtpLu+VPu57jP605Zrm1KeXlotxRZNuNyEdKjt76Se3K3G0KvzdOcjtj0p1moud0q28oB+6oGQR6j2rP1JWjLDQwm6FtGx3c8sQMY55NUAdiCNkRgd+cN7d61LeOG4vJrhZN+4cK3yknGMZ7Vnw2qlWViqgdweuelOLsNOzIII45I5G5ChfmzyQPWpfJaElTkKFB3Y6f59af5MEn7yGQK8IyS/Gf8AZq2m/wCzttjEqsEkdm7AH7vtVOQNg0MbxmR5iBs2s4HG7rmiNsofLUyKV+b5cEHPb2oZl3mZDiExeXGB/Ex6ED2/pTVuWWN4VyqqwDFjznv+fNQSWbW6lhm/0Z2jKr2yD0559Kal5eXSncVZbf5m6DqcZA9uaj8xWy24A7gTt9PU1JtWa9lA8sxw9lGAyketUpWKTI5JfmngjwV+98vf0IPrzRa2zXkLxLIqEsN2/jp0/U1C8hgkRbd/3Z+Xj0zkc1MfPt/tUe1A+4OrMTuI64FWpOw73I7EZmdZsZAKhT6nj8KtSwyWBjPnL5jl4pVbBIOPy6dKpw/6RbO5ULIsq4Y+hySM/UVbvooTHaXq4BdSJMuWVWBxmhvUd9Se1huGuIroQMzM4aKLllf1U85IP9a9b+Es3i7wprmmfEXQ9Gun/s65jWO6+ysY7e6TDId2CodSFcA8nB7dPIoJJI5v3UjlowPLU8D1z7dq+nfgP8YvGmk+B9U+GMmqSNoupstwbF7eI7mVg7bGIDBsjPDA4JrOactio2b1Psf4Q/FT4f8Ag/4dx+HrrUjbeKPtg8RXN5cWr3E13qaTeaBuVhsUpujywP8ArJCfvV9oePprbxH8K9XvtPlLwXuktd28m3qpQSI2D+Br498B/tWeGNU02x8O/Fb4Z6Br/lwpDHc/ZY1uHCjA3JMCrHAwcMD3r6y8FTWmufBCwbT7cwWtzoLRW8JfcYo/LZUQkdSAAPwrVRlHc0bV0fOnxE+PWtfHfwJ4Z+EHhOygstf8eXv9k6wqzlpbSGBlNy5jC5SJwMhieU3jHBr6Q8P/AAzfQ9E07ws3ii/XTNNs1s7e209Fs08tAoG5lzISQOTvHJPrX5S6uvx+j+NEupfDW11LRNM0XURJYajdNGrZCjzGVv4o2feVXB+UgHPNfqF4Cbwv8SPDOieImln1Kaez3XkFzqUswguQFE0LIW2gq2eNo6Ajg0pLl3HNJaI65V+H/hWUNJcaRZ3KDHmXE6Gc/wDA3Jdj+NSf8J1osyk6Xb6nqRH/AD56fM6n/gZUJ/49U9npOhaQ2NP0mwsmOTmG3SM8c9QM+/61dWQ+aWCkgtjk9P8AP/1xU8xmeLaPr0f/AA0JJaRWeqHUbu3l82LUmhhECmJXQJ5bOWUKvcDqepzXtITWZPvz2kI9EjZz+ZIH6V5hq3gPb8fNC+IS69b28b2c1r9l4Ml1KkLKygeynPHPy/WvW+Wx1A9KpaDk72sUmsZpcLNqV1IehCMIx/46Af1rAvrK303xx4fmh83zLqK9hkYzOwbCIwBBYj+E11oAXhRiuc8QKv8AwlXhaRuv2i6RfxtnP/stUI6SiiikIKKKKACiiigD4X+LGk2dv4q8XmO+ZZ7HUH8q3SLJl8yXkliQEVQwJPJJZQBySPNJGkRVGBwO9e0fHS3bT/ir4vsY7VXjv7BLpm4BQCOOUsM9fmgYHHrXkU0O1QAAAAP0rV01UZsp8iRlStZsxW4gjLcdKrSWulyKdu5CfT1rzz40+ILvwZbHxFZ2Yutnkq8ZkK5UsVJBHcEivMrD9pTTVUC907VbUg4byykyjHXqQf0rZ5euVS5tzFYx8zjy7H0JJodtJzHcKT2+Wsu+8PyLu2hCD60eC9fj8SaGNVWffE3zqxXadmM8irdr4g0TVow+l67Y3isM/ublH/QGuOph5Unys6addVY80Tk7rw7O0gXaojIyMsAB+OantPC/zBprmGMDtuz+WK1LqSSzjkmkiysDqrKccgtx19azPh74l1rxH/acfiLQ7K1WC5Y23kzbyIiSBG3owx16HPTip5JWuVzI/Sb9le+hvPgX4ahhm837Ak9kze8czgfpivNv2rbpm8a6Ra7srDpRfb6F5WH/ALIK6X9jLUIbj4Y6hpsK4+w6xMNvoHjjb+ZauC/aOmab4qXySZIgs7WOPnoNrN/NjUVXamRRV6h8z/xE9zQuMHrgelO3HHHOORxQGHO6vqz51jeS23P0pejbl7c04429sg0q7fuquAf1o3EavhXw5q/i3xBZ+HNDt/Pvr+TyoYy4UZxkkk9AACSfQGvvL4OfBbQfhRpOYxHe65dIBe6gV5Pfy48/djB/E9T2A+Wf2VbJbj40aS2zItra6m+n7oqP1avu2vOzCrKNqa2sehhaa5efqFMmmht4XnuJFjjjUszscBQOpJ7VR8QeIdH8L6XPrWuXqWtpbrud2/kPWvEtc8Sa/wDE6A6xq2pz+Ffh8D8smNt5qnosI64b+9j6eteYlc6rm14s+JWveNtSm8GfCeaHbDkaprUw/wBGs4+535xnGeOp9hXKya5ovgfTp9A8DzSz3Vz/AMhHXJv+Pi8fvtP8KdcY/D1OTqvi3TW02Pwz4bsU0fQbfmOzj6yHu8zZy7Hrz+vWuZvNSs4VMz3ChF9ayqVbe7EE0TzTs3yqxHoawNb1iK3BhgPnTdD3C/Wqd34iutQY2+nrtQ8F+5+npXKeJvHHhvwTH5V1NHd6k4/d2qNzk/3vT+dYRTbLujK8WtcLdQMwDPKNzbvT+lcVrdnHJazOYwXaYKD/AMBx/Wup1LUNW1iDS9WvLdIzdWPnuqjHzFyAB7ACuf1AFlhU/wAV4vt3WvpKMOSkkedUk3M37W0ht/M8ldgLE8sTn8zUq9fmycVCbqG3jaaZsIuSTT7d/tUfmR/cPqCOPpWydkRa7J/LQfMueTnj0qXydqn+dQRzbVDMjY4wBUrTLtZnbCL19qTkFrHEfEuHTtSs4PD983ki6bd9oEe4RiP5yCO2R19Qa4y8ure51qHUJJvszabP/pK+Wn75cuQqxk/MoU4zgDAHGSK6i81mHUtUvNSSI3dtDtjVGJ8nDL8u8YBwevXHFeYeKtUNnr1pY6tqtxbxySPeyiOFVEiR4baufuZwFXGSccV+XZjWlXx9Xle/+R6GGVvQ9b0e+8PWs03hUW7XdrLZR/6BPbmGG1kaQSLMsyPuOcfc7bmB7Y6b4efFqbwtYXnhnwrpU7XWr2z5mmhB2h94YtuBBO1nRVyAAWJBrz3Q5GaODVrJoksmaOa6jW38yRpnG/ezH5tiqAF553kGtLS9U+0WlpZ6mrABvtSrJJ5kiLK7FsjqCvI2/wAO4DvXmyrSpxUlv/Wps5paFbV7HQ7fxQf7Nt7SbUdNtZY4miYhxGcdAT0zuGRk9OwrFjXVrfQLW01Jonv9wimOzPmuwLbIwpUZGUYt7HrV/UfElpbeIJ9H8NWdol21mh+0TPhFeTOcYHQAbiOnz9eRVPxNb32pQ2VppeqyxQCGTySgQCQk5kckOCpEY3ADC8dSeuXLry99THm1RV0XwvfJDe239rrrTSo9vbQ7jGsbs6uW3KFBK5GSe5OScc1r/TdQ8UeILyzuNWsJdEtWjZ7S3uGEk1yED+VIqjBXY8bc9AcdTV9/Elreag/h/QtcsrSxsbP7UzW8jTZ8z5bfcTnKBVy5BwWJHavF/wDhOItfvbnQC9tFZrdS/aXW5/0lwiq4mAjG4j90VZiQiKyngrXbh8PXxlSUrJOy/EJRlVke3aKNF0mOXxJ4a8BynULr7Lp8Rth5PmSLgMxIACrGrKSi/exySemF8QNL0bxheS+EbfVZPNjt554VjXayqki/viFbY7fMNgY45Jx2ridD8QeNfjZY3PhvwrYz6P4aeCKCS7iDfZ4ZRzIiKcuQVZF3Fs5XcSC2K9Q8NWvhfQdOvbyCxmu7nzHtY5hubzITHHFlEJAUM8XHG4ckYqMRS+qycpSvNed/S/YUlJbnhnhXw7oeufHW68P3F1Pb6fHp13Gj/ZjPcbV4ARVGBIVB+Y8DJr6An1yz1nRPPjvpYbyFo7FNscjslopyQflJVsAHBJJIyOMV4R8Mdaj0v9oLUNUuLy507ZZXUS3cMIm+zyMV5ZWBDDnGCDlioHJr2PSPF0lv4algm1z7PeLcy3lwbp03NE0e1IWkHCyBV3sqk+Wsaj5iTXr55GpKV2r2UfvNacLUec8O8beNdWX4gLL4fjRruMDR7O6toRcXFvDMxSfy4x96ZmaUqWOVG3BBOa9F+JHiTwj8NdQn1bUtVvtWudXsre0h057prW8gtUckkLGvlxsSFJ3ZxuYANkmub+DelWOi3mteMEa2uodKu3jiu2mIDGWNfLDsSFyrEEgjq+M5xWR8Wm+GN34iePXrq8toYrVQt9Y2AaSWRrhichnARECtGFwSAFPrQoQqVIULO0f6t5HNLm+A4Hxt488C6poc2i+H/BdzbQyRo9rPd3W6UzttM8sioArMDuVWxkr1HPHn4ieNG3YUyKCgHU//AF6n1r+y49cuv7Ka4/s9Zf8ARvtGDII+wYrx69K2NMhOoXNvDJDtWMBkyeSOu78eP1r6KhQjSXu9dTuw9N1Zxp9XZGhoumR2Fou8Bmcbuex71haxfXXiPVDpenyn7HbjLHorY6n+gra8XX66fZSwx/fkXyVH16mqPg/RZo7YakzN+/U/u+MY7E12Yej7Wp5I97PsUsHSWCo6K2v6L9S1a6JbxxmGO3WKMrtIX5nYd8senHp71t6Gv9k3VvLYskAsD5ynfs+7yQD6kZH41JBZXM21Y0znqO4+oroPB3hO48QeKNN0qSxuby3nu4YJhbISV3sBhj2Hr04zyMV69SMaVNya0SPjo80pHX6pfeIfCn9keK/DOl22i3bxyX0RurFW+1TmMhoVP3ixDM6hVCAL/vGqll4cv7TxJpU15qVprusyrZT6csNtMbtndWZI5Il48oFiS0mCVJHAxjtNcnaf4kWPhV9L1LTtJ0zT7h4V011eadktnGUcrlXXcyZOcq3Qfere1bUreTTbO10DwrM9pdLFJptqihSIkhbbNNIP4A25ipIbj8vzGtiYpxlTXxfl0uzq5ZU7VL7nmnxS8eLoPi6K01TzbkLMt5qep2YV7mXUYYyu2AuNkK78Z2jKktj0rmZtKX4j65YXGn20t7qU16l7PJPjbgS7nVnCqjBlUKqJuyVOOjVieJLeHWPGWl6z401pbOK5+yQw29rMXeCMrhSSRnajAbzgkksAc8169p+ntdfFSDQ7Pw0NKsbbS3u7E290MWaLDIplmX7vmuspCsxGFOcZronUjhaa5d7N+Wn5mlWcsbWTS9PJHKfFS8uvDHiJdY8O6laTXslk1vDaXhLy2u+NxJLHkLGNhBXud+cZxx4Vcx6pperD+1oGM8ZRhHKDgjAIJzycg11vxW1GbXvFWqQ6TfPPpcV2ZLSJWVYYgGYYVVO3GS2COu6s7wraaf4i1uebxTqlyIbGylvGZlaYzMuFWPrwCxHJPAz1OBXoYKn7CipS1017nNJ+8e1/C/xf/wAJpHHqWq2tjdanYC5n1KTVVecXgAQwrbhVPleWsYZyOWAIxjrx3xS+JzXHiKws7e1S6sYp47m9kjdR9tki/wCPdQCCqRKrHaAoJLnIBq98D/Eui6DpU13DqU8d/D9pW8gnsJbm0ZmBMJjWM5VsLjLKfmK+hq9o/wANfENh4utPE3iK10zUrjWIVuljtohcRWMpdBib5ljUruAbcw2vuyMjny5Qp4fFTqTj7q2BxvJGxrEf/CWax4I8Ra4t48Fkbd9Wso5ka+WDBMEojQjG/LgFV+UMvB5Ncp441Twr4s0PUr+az1rQb64uRpax3Vy32NHjkZ2eYRjDLGpVRlc72OSdvHbm41DR9Y1u816+ubZrCOOYzaXbt5lsZdsTncgxFGSofBI6NtzkVyfizRfC+pXQ8Mw+IINP+1O95JcNhAZiFPlugzIpIi4T5fmYk9ycsNVipJa2W1vvZ2RowqxvszmG03XPH2g28mpyWrwadOdNsL9QyWqqq+Wp3sQEV2XJJ7joN1eg/Dy38KfC2ST/AIqWTXtbsWkkFlYMrQg+WxLMQD8gJzuYHGCRyMjkfAd34b8darc+CfGmrWmmeGtK04w2Ece4wlh/GWHzBnYBhyQWbHNdV4V0vwvb6gmj/Dnw7PPpWmarK2v3M9sjAW6RuqKxk2nks64JxlctxjO+KqOV6Mrpb6aK3nL9EclSz31F8capJb+C1+IWqWlvcavOz2tja3EZkW3jQRqW83h5ZHQHJICgd2OSPLvAPhXWPix4il1LxFdXsdmyOTeRW+VLbwBGOgBOTz2C88Cr/wAWNWXXtWFpY6V+70uJ3Ma7Q0ysxYzN5RYDBIwB0UYNdB+zTqpi1yXw7J4XL3F5ZyzJcTBjGqbWXcTyBgnA45BINbRTwuDlWpr3vyRMJSmlFHNfFbwnpXhDUYpLPULtGhZZJEvJMTyoXOwpgAMdoyxGMEjGea4qTXJtXuxcavdSX1vCpt4HldmeGPfu3qCfvcseeuTXTfGrXGv/AIgXsEF55sOnk2oLRhfnJLytj3dmNcFHbWotXjmaSJiSykH7xH3QK9PBqU8PGdTdorl5ND1fw9qng7xFPLoFzpC6folrclba2VMXcm/G2WSUYLYVXJycLgADHXzC6js5lurjTpDIJJT5Qd/n2DJ+YEc8Y54r1r4WeHYPEHw88QPql1Z29zfXdtBJe3EMkskdsFLMgROecI2SMHIry7SNNmnbVTp00E8OnW8k0pkkWPfEDjIDHJPPReajDzh7Woova3oKK1M0SLdJHHAp35CtnuP6Gus1y90m48Lw6T4dWcQefFNI10yiR5FV1YgA/dyeO/rWH4bhht5rW8vBHPauyiaFZQu7cdozkH1x+fIroviRotu01tNZ2OnWt2sjNcCwm/cqjBSse3GFaPlSQx3HOOBXRUlF1IxY2rs5y2sEXS21aazndoZkUTFx5MStkYZcZLE9PoazL+SPzY1izsQBRmlkN5sNmZn2KwcIScZpbiPzHjmYbGClevBroirPUZBlWujtA3FASD6+341dmlgntWubyT/SmXZwMYIxjj0xWfL8sivH3HB71Ky+ZJGoB44+uea0aTLRo6as1vNFIxdQ0e5TVw6hqOR5sKsO+Mc0xftfkw7tpKELGjdxyTQ8lxzus8k/3T0qqcOfVnRQxtbDrlpysiM3Nvbu7fYSN53E471n38cULm4teNrDlT0JrRaTfEUNuykiqdrHutr3IBwc03T5dUdVOvLFJwml9xmQvi6WTaGJb5ge9aEl5NdsDK3yL8gGPyqlHs8xl8sMXBUYq6YW2qsjDPQheTxWcjy57kbQyxzvBuKs74wOK1IPOOLc2rReYuS2clkPc59Kzr6NZGVl3xEHaNxye3NXrUy24l0+SZJv4VZuvqMH1rOe1xSVhdFhtV8Q2CzXckMUd3EtxMpGEQuAWGSAAO+TXXfEzwVdeBdSmjW1mWO5meOXzmVwx3blaIgcoVKkMCwOevIrB01rG1Up5ga8kuFTaYd67OvPvk17Fa+HdE1LQ9M/4TC+tIL60t/LkaeQ48ti3lcE8P8AKy4GBtVOlc1WTVWFnvpY1pxjUaizwKSEyIq+TIEQ4z1zmoZIpIyJFjl4HUrkf/qr6Bb4deFrj/jw1bR5cjPyXABP4ZrnPEvg7S/D8kFvfyeSbqMtGYyWQqDgnpxXoKEkd8KGF6za+R5HHqTCNlmVc9gflAzSyXzbT5luWYjG4YxjtwOnf867i403QVUhb4MVHfBrDudP0vzOWjIPRinb04pcvkJ4WhvGovusc210zK21idowob+EGqnmSKx9Cn510Mmh29zLtt5I2cjACsRk1j6lp1xptw9neRlHQ/kapGNSi4LmTuvIl0vUPs7LIzHMbYHHb0rufAOmr4pupdEbUo7N5T5kcLIGVwvzOzNncAFDEAZJIrzeEtbSKy53A5Fdd4Nu4bHxPp+s6tdG2sobhTNMgBZUPBKqeGwOo9M8GubFU+am+Xc5KkeZeZ7boOr+F7yTUNJvrqXU0a1SysLeVPK2SMnmNIBtYCP768cnGeMV483jLWNPuBZxz2k/kThrd5IA/kuDj5CeVyAAfXivYfGni2a18S2ekeBPC95qAvliuJLi6hjje/GwLm3AjRYk2KyqMcFs8tXi3jRrDULyTW9Pk1GQvIfPFzbhGg5GzeyfKzZyCcDOM45ryMvpLncpx0f9fI2p+5T5o7lqbxVeeLP7UvNUurbTp9RuReyRwxstuZVUjdsXO044zj1rmNTspIJkBmhkWWIbTG+5TjjqP5Gt+TTdMtljj/thbxpoFlL2qnKM4OY3BHDKRzjggiuWubhmXa2N8TH5getevRjFP3diXLm33Fjhj8l1mZQUw4Hdh3ANTSS28p/0dWjhCjhsZJH+NZyXTCMxsoI3bs9xx0rThjjaFWTlepBXJDe1bS0IkSW7IJFxBgfxBjn8fp7VLhrC4jaSR1iOAvouRVBmmikDMuwjH3f51f1C3kuJ1ZWkkAQE45GCO1Q9yWXYodsjM7bsndtX+IHvWTNFCqq0asyKzKzN369Kv2UixTqsbhtylXVjgr9RVAM0s7xquFJ+5u9P60QWoloJbtMityj7hgIep96vWNxGsUXIj2fLIp6H0P1qBWWSKMptj2Nww6r60sKgM0kMheORjvD/AMP1PenLUHqWV86OQtbRpgjdGW5246498fypqyKcqq+ZvBZCeOff8akkeG3QTMXVlbZsXgNnr+mefekt4lurdmt4yrxuTGSOo7j8qm+lxoghnkjjk3yFTsbsBnnpTNOWdWkljjznOQGxle4x6YqxqSL5bqBtaZEYI3HzA81VgK2c0bS7ZnjG5EH3T9T3FUtUVYt3tolvdhoyfLOFwx55+ntxTNQ3GVY/M3bFDDdxxUQj+0NLJ5m1uZNp7dyBVqeOSWNGuIyzldgkzgOo9Ka0ZNiKZvMVGEPloY9y4I6jvUvzMsU32eRAxIlC8KQSMYFQWKqrLK0m4K3zI6/Lj0z79Ks3P2hYwkkg8tmyrj+LjgfQU2DZPDI3nNvyXMmDn7wHPevVPhrrzPqWlaHIkR3XQl3Mu0o4HQH3A/SvLdOgmkVtjSy7uX9CPfvXT+Fb63t9Tgvvs6Zt7lJdrA7doPtycdcdaTaTFGVnc+uNPkXcrKAfVWr9Jv2WbqPVPgH4ci4IijubVh6bZ5B/LFfmnppivIYrmOZCJAHVlOQwIyCK/Q39ie8a4+C/2d2ybPWLuH6A7JB/6HXXUjaNzRSufJXiZbiy8SapYrcPGIrplwoXIwemSOnFanhLx945+GuqTeJPBN8RHdqi6hatCJFkVOQdp69T0+YZJHpWd8ZrWTSvi14jtom2ql7Jznp8zf4Vh6frVxbsDuzj0o5boqT94/R/wl4q8O+PPDtj4q8MXkd3Y3arIrI3MTd42/uspOCD047VaOpNqG6z0Eo+07Hvj/qImz/D/wA9GHoOBwCe1fAXg/4ha14J1GTU/De0291IralpEjsLPUFB/jC/cb/aHB6MCK+0vhr8YfBvxV0Vo9DmOm6pHHtfS7hlSaAgfKU7OuejLx9K5nDlYHJa9ps2k/H7wfZ2slwYxBJuup3LtI7rIZNp+6hIUAhQPve9e818tXHiqbXvjlpt99oaOMa2iIGJwsUSEMMZwM7WH419S0xy6BXN+KV2694Sn8zbt1aVP94NZXPH6D8q6SuZ8abFuvDMsmfk1yLbj1aGZP8A2amhI6aiiikIKKKKACiiigD5w+NXh+1u/jJFHcRlxrPhi8hUbQQ0i29wAOen8P6e9fNrfPCrYOWUdPpX1z8bbWO1+IXw/wBekcRxG8eymkZsBUZlByfozfhmvk2e2a3me1b71uzQt35Ukf0rtw9paeQVNIpnjX7Q2nm48E35Vc7bVmxnujo/8s18Zywr50qsB98//Xr71+KmmtfeFbuEIx3wzx/XdE39a+FLi2nV5MqSWUNx9K9OrG+Hj5HFDStI+r/2c7xb7wLaxSfMEVVOfY4NfMPijSZtH1i+s/lV7a9mhyo2nhyBg+wr6D/ZZvd/huWzZiDGzrj05yK8o+NVg1j8QPEUfQC9aVR6bwGz+tebmMPdU/Q9bJXrKn6/n/wT1b4SabH45+FL+F9UvLhUvLWS1eaN/wB6hWU4YE9x8vX0r0/QfDOm+G47hbHzJJbuVZrmaZg0k0gRV3sQBkkL+ZJ715N+zLeFtEuLdjzDeTLx6MqsP617gzfOcd6ihDnpozxT5Kson0d+wbqgj1Dx/wCG2Y5W4tL+NSezCRGP/jq1B+0BLHc/FbWGRwRFHbQt9RCpOf8Avqua/Yv1L+z/AI6axprNldV0BmX/AH45Yz/LdWr8X2lm+JniR5sZ+3bflHZUUL+gFcmYx5PwDAvmk/66nz3nJ+Unmnr8pG7ABqNcdc0/I7Z5r6Wx8+PLc/TpxilV1BJqNcH1Oe1KSqnIzx70/IZ9Afsa2f2j4n395tyLTR5efQtLGP8AGvqnx98RvD/w80sX2sSPLPKwS2s4Bumnc8BVXqcnj+Wa+cvhD4g8HfDrwrp6fD+zk8SfEfxPZp51tGxdbcZLeWcfLGq8FsnqMsRwKv6pqw8G6hPrV7qVtr/j+6yLi/Hz2mjg8GK3B4aQdC5HHTj7teNjZqdXm6LQ9WhBxgom74quNQa3j+IXxhtWlXzgmj+E0kzFDKV3q92R3C4OzntnJ4HmHifxzqnivUv7S1i+LMBtijVdscKf3Y16KP1PcmtTxFfXF38PdIa+unnuLzWtQupWkfc7ERwpuYnk8k1w0qbsVxzhKSvEU5crsT3WtQRqzeYS3YDvWO01xqLCa8kKQg5CZ6029ie3h+0Dgj1GcVz+p32oTQtH57Kp6lQAcCuf2bW44u5ueIrprfSZptPkeLNu7hlbuAf1yK+VdBuL6+upNSvriSeeS4nJkkbJCruAxX2N8SvA3/CGeD7G2juHupZ/DcOoTHy8CNpNxKjvwMcn3r5i8AeH1mi0u8bIea5mjWMrx8yg7vrlxXdhsOqlWMO4nPkTb6H1b8dLFLW88G6NawRxiw8I6dDtRQqhiHJwB6nn8a8b8RaTqmhTaR/alnJAt7Kbm3LDHmx7iu5fbKEfhXun7QkIj+LUlrnb9l0/T7Xb2AWPP/s9cL8cltbrxf4ItJWDR2Xhc3IGcfN/pLj9QK9CEuWCSMKivNs85tbW71ZUkuJgICodkVeT6DNb1nbizhWCE4UDjkn+dVNJ+WziVVwXUM39K0o/uj17VabbJ2VhrYXCtke5qHUEmuLC5t7HaszRMqF+gJGM+9Wto5XgtjvTGzxtzx6UTXNFxJeh4d4i8ZeINN/s/wALaS7Wtzfqq3DG1bbAQpYrsA+diVwCeBnJ6V5d8YL++g8cadY3Cz3BuFt9NmlVkk8vdsBiyc7Gzg5IBHavTvE2haw3jW413S963cd3FZQXCIs4tYGOZWEfC/OWwM7jkDBA4rjPEHhGZPiTHfaoDeac+ptNdWNl8wiVYDIhbZxuJXZu3cAnpX5x+7pYh7dbnbBvlueq6ZpGi6Nca1fJCwhs7uMOy/vpG+6Yo1VT94MEIzz36Vr+GdLsby+v5biwnkF3ALS2FyuJYLXzhL8zZGD83zHrknqKpyDw3deE/C8Hhv8A0ZjfNeX88EjAxTO7iIu4+YhQoBOT1Oc5rUmnudHsZLq5nmuFuoFaxRYF2R7HMcku4ndtUIBgDLMR2BNeJUm480osu1tTK8enS9N1zWbzR9HWWFCYmjba8W1svtTd8hztVMMcgEAgnFeLfFrxrYw6efDM2k3VvrkVlEsyuoikgtnUSFGjTgMcAtn7qnaAME16l4wbQzo9pHr2uae9hdXnmRxWcZ5eJS0XKsXyzjbnOeeMkivA/H2rXF9J4k1y8s7aeaS3js45dPjKjMszPILiRvndwpC4XPHGeDntyqCr+9NCfvSsec6d8RPF3hmO803RL+SC31G2azkTarfuSclVY8jnnj1PrTtR8Tahr1nOt9DZ6fDc2sEM3kpse6MeNrybQN+Av3T8vOTluaik8D6xpehnxLdxiO3kngt9u75klkjeTbj2EbA9xxXJXD3FxLLHuOFbAUdTzX2lOjCOsVqz0lR+r041JxvfY+rvhvHCnwwsrGbxU3h6G5uhI8EM4M93GXjK7otw3RsFJ3ZA3HB6V3fjTxRpPh23uL7U75J30u5hmuzsytyQrbbfZGAUUhAN+QD1HHXkfhd4d0fQfgdp154gkOoXdxbrqMMcxC24hLl4oy4BZ9hX7mANzY5PRvi9tej+Gt9q3hnSWsk169a6u0aDzHl05VWMRvnlSzgv8pOQvB2ivjWoYjGSl2lby3+84qs/aScnpc8Bn17UdH8Ta7qen3JhvJYDHFN0dXYpu29gSM89h05wa9r+CVxqniLwO97rlzbjStHuLjTrcXUibbiaURs0gVsF3RmBzknJ49K8HvrG41jxJqkNvbvIlmstzPJHz5cSbcuQeMA7Rn3r1/4G6u11osfw+0/Sw1yb261KS6aGOV1ceWI2iLjAO3K4PynPOc4r6fOIOVN8ivt8kVSUpQ5UejaPp83h34b69o82j6TBYwahP/ZDJqCJHeNuO+7nlkOWjiLRgKPmIBIHGa8S8T+HT8QZor281rTbK20fRzPe/Y9s0rS7maSGGJMsW3Hjce5Ynmvo3xtY/wDCV6ppnhubUrTSZrG/nik01oIU89EiUybgykqwk2qOCME4A4z4BbXnw38H6v4h8PPa6qsPkLYm/VDM0jIxSXcoKFYSSWAABO3DA14WCkuZzp/Fvpr5dTDmkm4/1oec+JtM08+G7DVbdoo7m4cK0CPkxxrGqjdxjcxBYDPc5p/gG3je4eSRZAein+HjGR+tYutamNSvrua2hEMJ6LGu1AoIC/KOFyMcDvXcfDvTH1a+0zS9PjlNxcBUMarkO7ucEepx/KvrMOpNLmPXyv8AeYyn6nGeNLjbqohkj3qqkqD0B3H8+la2ipq6/ZVivImG1dkZiJRQR0PPOM/mKx/HyImvLh1bMLEjPI+dhyO3rXfaHpskOnQyQgebtXJccf8A1uK76EeaTMM6k/rlT1PXPBHxi+I3hfwvHpMeu2kQsbC42mHTLWORgi7lDyCPc4yQDk54HNM8JfF7xxputXPihLyMPq9zFf6jAiGOOeVYfLPQ5XKk5x7+tcbIv+jTbgVC6XfN93qwVP0wf0rR8ORXVvb219H0hCSR/wB3eMHODx2reGEozlOMop6Hl1K1TlVmdr4T0TxFpfizXvH3i6+vCJtKFrbKQ8RU3eSeFKlliRJCN3y7gpJwOej8Yar4b1Gy06zttHutQ03wxo0V4lwupMRLabSZfNOAZCQgJUdRvPANX9N0f/hIrya6v7o65NfrZy301zp7RxQKS/mKJmVXALJGqKhO7MnTdmub166s/DHhHxLJJolwBpnlaW0YtY0jyFKHYFHKFjgh+DjHrX51mE6UqtodLK0dl0sbQjKpTbjt1PnjTdPvfHnxRhOialp4vLZZNWVL9ikLNasZfsycEtwgAGOc16qvgm11TT4fiPqvxMmjs9fvriO+m00mOFbLysKPKbLlyxIYHLANnr08Y1Dw7p+i6G2oPfT3V/BeLFC1rbyKECAGV2dgAMBlGAPvV6x8H/hP4vtPG2rW+oeGdEvLN7hV+xtqCsumyOiTrOYQzAKIiA2/jllzkV6GLj+554Sso+mvlqZwml7ux5L4g0+NPEC29nC8ZmkRIoZ33MhzgK3r269etYWnWOtar4kGiaHYyXOpTySRrbwcGcjLlME4K/LnB4wBXqVj4o1xfipc2+p6akmuqtzBHN5Sqwmc7sojAqrEqqqeNoPBHWuX8ZTQ+FPjd5txINRh0uexMk1upja4QRRknrkOVJBOclsnNdGGrSl7lteW44018T2PV/Afw9Hh+y1nx34x8RGK71i2V9St7VCkFmJDuk+0BQCDuwPLXGFLE5BArG8feLNY+K0cfh/wboviO+kg1SZtS1L7RKUlkZhs2jaqRbkGSoRSCBwcZrd8Gr4lu9K1y8k0u7j0q71K8NnPe2hu71InhGweWQQGU7CScls7f4a5jwJo/iTxbZ+MdUs/iE+kaPpGpyalICzSK12yNiRtoHysi4Hdj0WvOpuXPOpWd2rei7aLsZuLvdHp/jnw74h8KeDR4c8Pma6lnaGa+uZA3mRMAGNw6pw2CYkUkNw5yMnNebeMb/RZND0KS/1rS11N4Ev559Ssss2d8nlsM7WVN/yqAMEkEZr0D4u32hf8ILpDX3ia7+3W2mRfYLSxheOZnZAS7sQCqByQVPACHA+YV86TaDceLtcVLvVLZL2W13BL6Voxx8qru5CtxkA8YHOMVy5XTlXXPVdrN623/wCANu25qeIrHU/BH259D1k3Wna3bJI91F5cclxaSqTFlAT5asMHaCSN2CQciu/074batdeC7jxkdctjBb2puZdP0u6DfaGJHlHY3BwOowTu+hrmb7w34TbwHp8cmrXtv/ZkstpqU8UCOLi6OQohHAMWVCK+4hiSSB0rp/iJ4qi8Nf8ACK+D9G0GVVK2phu3m3TyQYEKqYV+UPgbgP7xGK7sRVqVuWnT+K76dEEafPHmRmeKPFX9j/DiPwT4SujPq968mr6pqYiUeTHIzFrYSnmSRspuAAxtI5+atT4G+IbrwF8PfEPiW60+O8e2voZvtysADbmHa0HnbS3LHaYwRkscHrnb1rwnqWmS6n4Zm8dLZ6dp8TrBDLCsbGCfcrRCR0AMpTfhuMMSR0rx34n+Pl8UND4ct7e2trewjWPFvAkKs6gAsVjAUn5Rk/Ss6CWNp/V4LRu8n/VvQ0nSdJ6E/wAXdJ0m+8TxeIfDCqNN1i0S/jVyy9RhxhhuX5lJAYnIIOecV599iU2redcIPM6qDkoO+fStzRtW1qbR9Z0GHSba6luVhu3vp9xltYo+GVDnaFbcucjPy8d6qRaWs2jn5mF9cTlY/mHzKByxHXGcjPqDXuUU6MfZt7afIVSalLmXU7fw/wDFjxonhu40HRL7TLXTUit7BgVCzzEsf3o46hSqsc4wq8cV5zrlqsN7dRTMPNjnYN8uBIckEj2NdL8NfBun6/fa3BrWpC0XTbGSddjqBM6kfLuY4HG49ycYHJrmLixuL5p9UeRsD59xOTkY25+vSpoQo0q01TVnpfQm1mXdFvNFtbqC417TJ541uIpwkDBTtUksvUcH5ehHf0r0D4seLLDX9P0KHS9Jg0izisTMkcc6zPM5ZgXkYHluSADyAOprym3mmE7xtCkgfg5yBj6jpXtnxVfwz4k+Gnh/XPBWnCxttPhS0vI/su1YpSA0kYkPLbWA+bOSrcjrRiIxjWpya62/A0TlJcqPF2Jt48ySK0j4Iwen+HWrslv50RkVw0aQhiGXG1h1x9OOe9VI7eFUEzSCUltuAe+P8O9T3F0uyH/RfMIXbw2Ceep/lXW/IhkMMOy1klktldcf3sbcnhqb5jbxvXJC/L+FOZVER8stGkh43jsD0zT1t91vBK3AnZ1Un/Z4P+FO/cRoqty0a30bg7V2pnt+FQTXV5u+7Gf0qjdzNCwj3Haqj7rYzTre4s2Ufa5LkE/xJtIA/EV00JqMbMuEOd2uWGu5GU7oh+BptuywWtzIvzFwDUTLbM7LDePsP3S0YzVaRjGrRxsXB4z6mqlNM6aT+rybZHGs3mFoThl+b9a0o2jUm4mZ48r83y9GrPjiZV8zzihTlTzy3pVuwa4vklhf5pGxtH97muWZyy1Ld/HbwzRyTF3DIuMDqPb+dV9JhhuLie2GSDny9xHOOevarV3dQNMLFvuBdrMnPPTAzUWnNbWMbG4ty2CVPHKg8VkvhJWhuaVYzRXcYj0xLoTK4KM20cDqT144rovDsdxNb3C3l5PM25W2yEnaSMnk9fr7VT8B+JFht30O9sYp7eaZJFmXHn24wQfLJ45+UEn0FdTb6dY2t1MNLt547aVBnzpA5d+cnjp16CtMOm58so/M5675Icykr9upzOtaTHI5bYm9fl+761ofEhZk8E+AZkkZG/sto2IbHQr1qbVITtVsg5bj8qd8RVD/AA58CTbekdzF+TY/pXouNkycNOTR5i9xedPtDn1yc1XkkmZfmbP4VYkTn5TULDtxWbidKmze+H+l3WveJtP02BlVpLgsWZsKqIpdifQYU1J8UYbX/hJL1rVt4WY/N2OcdKj8ELcRXGpXUW9Da2khYgdN5WPaT2zuIq58TraSPWJpLmIJK+0sqnjBVSDyOe351k4tts7sM+ZTj5HB8K6AtwpGP8K0dJvZ9N1FLq0uNgik8xX2htmecgHjP+FZ8iruIGSat6bNapfW0l/5gtlkTzhGoLBN3OAeCQM8HrUy1RlF2keq+F7WODwLquqaxrHkNdrK0MsPmT3ZYPH5cewfKq7weSRxnFctBqn266tNH8Q30tjbFhZzOWdTHGnRJUPXBHBPTNer/DOLR7qZfEF1pt02lS5hV4pFt49sIJjafHLEb1Jzu+bAzg1ynifRdNvLjVrrXS0czKb62aNoo5/mZY2Z+SsmDyACNy4YEc14cK8VWlFr/gG2Lq0naNPpo2efR+XZ6sG0+TekOB5n99vp+VNvNFW7jnvo42QndIV4xnqQK2fF1jaaPry2VlbXMZS1hnT7QiK7KRx8qk449eeuRWq9rbyafJNZSCRJI9xGMFcoOPce4r18Lapr5GcI+/5HlcsfzbScYOKmiMynbGxGefxHen3ilpHbbgq3NNgjMjLtbPX8BWz1ImrSaNGP7TPIWCq0iL6dh/Wmq9xC277YWRQdvc49PaplZY7TzG53KRlT1P8A+qm28KTRbfJBIwyupxn2NYXMb2JvJLXySDJW5j+VmHfHI/8Ar1VCx+YvnEBshQV5BxV5pTcRrJDGV+yv653epwOhqnJItpsmdWcylj7Y9veiNxj4ltXkkXaF7kdiQe1TtJ9nnCww+VC7fePIOeo+lZlvMrzRqMnGF9/atSG5WTdEs0f2n/pouV689R1xRJNA0XLq3t75YwLiG2GSxMmSCyjoMDvVa1ldLgw+blUQEkHGOeuR+VReXPbqFuGXexJ25ycdM/jUtv5YaPcisj74iw9AMjj8Ki2lh9R98txIhuJtjbm/1g5xmqBlWKZId2CPuv8A/WPatFVXypGjJxINwG7r36fSoZrZrjbJtbcACG2np05I6fjVwdtA3ehDatHHIrJIJJGY7lZcY/8ArU25lmuGWX5sh2VUY5wOtM+zyqySMGCk43Y6emakZljaaOWPfufdycVduoraksm/yjCw2pIAQFIwSO+KuySPcLHI2WBjHmAjkSDuPQH/ABqktnvZDPIIUPzJuPf0rQlu40C3F8zZJ2ZQcRgZxge9RJ2EyrHHMzCO3ZyzHco3Hkg+ldJ4ftb6+kNrp1k9xcE7V3ELz3xkjOPz4+tc39qeWYXiswTrhOAD359TX0V+yt8Dbz4+eMJPBuj+LrTSNRvLa6u7aS7iMivcQoreW6A7grAt865K7Tx0BuPLdc2wuVvQ634f6heXumPpurQomoaQ4srg7shyFGGH1Hfv1Ffor+wXqPn+A/Emm8/6NqySj2DwIP8A2nX54W+i3nhXx9qnhbXEtoda0eVtK1NLe6W4t52QKR5Uqna7LkZH3hnB2kYr7x/YFuPIbxjpeSVkWyuFyfQzIf6V6VWP7nvYILllqeW/tQWD2fxo1v5cLM4l6ZznB/8AZq82t41ZhtCn869s/bDto7X4vGZl2i6s4m3H12qPy4NeNrZyJiVFJU/xD09aujrTQVNJFy3t1XO1mGOvzdP0ra0u502WS70v7dJb6tp0UepwNhQJLUsYXCuDuV1Z0bA6qW7gVz6SFcYJXGPxr3T4f+FfD/iDwfLoWs2ds1xPo5vUutoM1sZmJOxjypAMLYHHSuqjQp1JWqIxnOa1gcBot3r2gaxb694d8RL9otWdlg1CFpoG3qVfvuGQx5Br6U8I/tX2c3kWfjrwfe2EhAV7/S5FvbXd3ZkGJkHfhG+tfLF7Z614dujp2u2b295GDuH8MihiokT/AGW2kipYdULL/rQcNXLVwkYScX0NI1bq7P0O0HxV4b8T263Wga1aXyOu7EUg3D/eU/Mp9iBWb49haSz0eVULeRrunPwcYzOqZ/8AHq/P7XLyS8to5rWaW3u4D+7mt5DG5HcBgQQeOP8ACvTtG/awvtP+GJ0Lxbpus+JNc0y9tri3uoGiD3McVzHLtl3YIcKhXIB3DHfmueWFktYamkaib1Ptqivm/wCGX7Z+k/EbxZpPhZfh/qOnNq1x9nW4a7V1iJyRuGwc8AYHrX0hXNKLjuWVtS1LTtHsZ9U1a+gsrO2QyTXE8gSONfVmPAFfPvjL9tr4d6DcyWfhfQ9S8RtGcGdCttA3+6zgsR77MeleFfG7x58Tvip8Sp/Bd54d1+3W2mmXTNDWxmAZI2wZiNu2VuVJfJVdwAwDzpeCP2R/il4neOTxBZ2/h6yP3mu3DTY74jXJz/vFamV4u1jdQjH4zt7P9vC8u7sQw/CWSVHOEVNV+ck9B/qcZr3n4c/EXxZ44hjutW+FOseG7aRdyzXlzCQfTCZEnPrsqn8L/gD4D+F0aXGn2f8AaGqgc6hdqpdf+ua9Ix9OfUmvSqE+5nKUX8KOJ+Kfgu+8ZaZp66W0Qu9PvUuFEhAVk6OpyCOVJrx7UP2Vdf1DXtTvINc0qz0+4vZ5rWMLI7JE8jMoIwACAcYzX0vUf2i38zyfOj8zrt3DP5VpTqSpu8SHquVnzxcfsbaDqlqtrrHjK9Zdyswt7VE4HUAsW6+uKz/D/wDwTn/Zd0NkkvPCeo606AAnUNSkIb6rFsH6V9A+JfGGgeFLdJtZ1GKBptwhRjzIQM8Crmk6ta6tY295DcQOZoUlYRyBsZFaPEVnG3M7EpRTutz83viB8K/Afwd+KesaT4R0mLRNPbUpI1t/tD+XtaIOgXzGPQHHB5r5O/aQ0vyfiBeXkcbGG8tbeYTK2UbCbTg4xwV9a+/f2vdH0/8A4WdeNqkFtJa3K2F0UuAuw/L5Rzu4/hNfGnx6jj8GanpD+FVt7ezvreXzI0O+NnVuoGfQjgccVvjHKeHTXZHZlqjGu97v7jmP2Y9Q/wBN1OyVh8skE34MGQ/yFfRMmRJncOlfNfwg8V6jrfiiaxhistNuJLYyfaIbVCZNjrhWBHTnPXtXtd4vjSMqI9Y0uUpkfPaspP5H+VZ4Go3TtYeYUo+2b5kewfs6awNF/aK8H3DPhL8XWnv2zvhcqP8AvoLXoHxBf7R468RyKu0Pqtz35GHI/pXzv8O/EPiTw/8AFPwNreuW+mx29n4gs98sMjD5GlRXyG6fKTXvHiB2uPEOrTb92/ULps5znMzc1z5vqosxwMXBy1PDR/vHPel3Ywpzn1qNT1B6E0vf/wCvX0KZ4DVh+fmb8xQrenOaYDtP8qXdg+lNAdh4H+JniLwDY6rY+Hfs0B1cRx3FyYv34jXP7tHzlFbPzY5OBzUn/Cx9S27WsbXaB15FcarBvxp5553VjUw1KtLmmrmsK9SC5Ys9+mn/ALR+Hvg66ktkjlu4b+5k2983JRcn6R1n2ultcuI8H73HFbVrYXP/AAg/gi1kgEZj0GN0AOcrJNLIGPpkEcVs+HtKaS6j3L1bmvNmkm4o6JS5pGB4x+H1xYeD59faWNI4GgVlIOWMkm1cfTGefSvMf7KuLqOVobd3WKMvKyqSI1JxuY9hkgZPevtPUfhh/wAJl4Xj0PULqSytpZ7e4kZVBkZI952jP3SSw5Oe/FYHxq8J+GfAPwJ17SfDemxWcdx9mikfrJMxnj5djyx47/hWK5XJI2UOX3jzz42XGk/Y7oWepWc7W2h2tsojuEfO1BwMHnrXzR8OdClk1jw1Zy2zAyTZYMuNrPLAvfocA1OLe3hZpIYUV36n1qRcsPmbr7967qNH2M1NPYynPn0PXPjdeR6l8atdkhKyItxBDuVgQdkMY69OuRXmH7RF08fxC0yOGN3Nv4XslKquNjNASR15+/k/Wrvh2GNLqCNfkQPuPOc9+9UPjzNHN8ZNRgbGy1sbKHjsFt7cf1oty2j2C/M7mVpbZt4zsdAFA2nrxV7P8Q6GqltIdgYc5/SrG4DG7HpWkUQx6sPrnrSyM3kt5YO5lO0D1qLd8uAevpT8yf3v0pvVE9TyxYtUg8TR3Saha/Z4pil61wwaVfLLAKqqfUhsnhewrGtLx7LxpLq1ldQ6loxi8n7PawOSLlgxVWJG1R93k8/MDjNb/jOwTVLwaZDdRwM7THbJbA/MQULbh1ChjnPUA5rjLrVpLXxBd6Bo91bT20FjZ26zNbJ5kUkFzEWuIxwGfyo2BOG+XOcAV+XVYweKnCPn+B3UY81o3Oy8QanqC+F7hfDekaXobXDQzFLpgYrYAqJCjscB15UOwx95uTg1zU/xV8K6F4V0lbG+juMYtI2jmdpnuGYDylznczKWbJIVSU4545P4nfFGXxF8Ntdk8N2rpAl1/ZjJMDGG3MzM6nhmADY2nHbIwK8k+Ca3Fx8RvDmi3luNThNxJcPHIjSBHaMgyKM8uABhu2AegrfD5f7WjKpUVuW7t30NEuW6ke/+Nr6PTdPjSzhhuJNLM88enM4mnl2uPKBIIZWQszNx0+grwazk8Qa1fXNnrFjLqVsbaOVJo4w8kCMRKqwtkBXycHCljznqa9o+OE2mNq1x4N0G8she67Ph70JII7dRHGpyyKGYfJs4yuGJ5zmqJltPC/imHT7fRbdoLjS3s9Dt4YnCJJC+0LyxJdmaViXOeOO2JyySp0ua3xXHQdpv0PI5Ly+1T4ULJd25TyfE32f7vy/JauxGe53SsfbdXnuoWdrZavPGY90UcsQYK/3iVBPzfWvbPGNjcaR8M9P8P3kglvIvFOqXVw/2cwZfyLZNoQgYUY4PcNXj9xC0sk0gVC0moRoN3T7tfYU2pU011Pfx2mHovyPr7wj4o8600nVI96wXFultpmm21svku8YlbgnllQZXoCeD0wa8r+Inj3xBqN7pFjqWnpp95a6fJFLBL9+QyKPMUhcfwAbSRwdwPTn2G5h1DQfD72uiWNlDqx0yJdOaSRSYB5KCRlB6KWOQDjJ4zjmvLfElvcR+CLDT002SbXtRgN5c3kcTSiGGSJ5ZcuWLh2Od3GApPOAQPkKFGlSxzildc1l+v/BPAclKXkfPF1BeX2puiIxluJydi8M25iQuByc8cV9V/A/w4fCPw9tfGElvMl74h1WbS454zh7aOCMyTxg/wFo3JyRx5R6Yr5ok1y4t/Ft7q1qpM7XEnlMOvLEA/XBr7a8I27XH7NPh+4uFhR7vxbqcJmVvlG6CESEMFPzHc6huvLfeOK+lzJJ0aiktLHpZdGDp1JS/lf6HG6xfanoun6p4u0O4t21HVF+2TalcSyedFJ5RdUCuGAfeBjP8RQn2+ZP7Lur+9SOXcPLhuLu+uppNzTBgSrNlv7/GT3J617P8fI9euJLPSYLGa00F7rdZ28d0JfPm+zgb5Gwu5lBXJI5BJ615tdabfaXbjwnpen20h8Qy728tPMm2xZCxLL94qysOAP7uRkV5OXUo0Yc3WX5I5qMJVYuVtDzebyfOure1XCoSqszAs2PUjg9+lexfDGRNGtdFvbi3juE+0efIoOGKjBVc9jj0ryrVNNk0fUnt7iGS2mi+9C3Pl5XOMjqece3NevfD9Vh8M6SEukm8x5G6fcHHy+/evo6FnJWOzKYOOMh/XQ8i8ebpvFEkfHzRjHtlif616h4ZVYdNt7Oa6jeWNAuUOcgdK4/UPh/488ZeKpv+EY8E6/q58lGH2PTZpvl7EbFPy8jn3r3zwD+y78aZ9Ot7u7+GfimGZ0G1TpbghWGec429hg811UZcjuzLM8PVrYqpKMW9X0OF1FisEyjJ/wCJXe7scZB2AZ+vNepfD3QbXXfDulabNsijVJ7u4YyKmYkI34J6tjgAA8/Suw039jH4yazO8P8Awhep21nJatbma5WGCQFipJCs+R/EOfQetetaD+yT8SdDt7CSHQbP/iT23lwm5u4X3MMnzPLXO588gevrTxGI5Yz5L3a0OJZdiJJe7seBQ+KpPEEWo6zaz3Ol6ZDd29jpsTRG5k1CRVkkTAYtsVZFdnYA7t4+UAYqn8Y9U03UdOntbbxrbSWtpfifULVLd7dDKRG0bxjbsYKysvTJycZANa9xoesQ/EDw7/bdorWto1zpthYxqscOnS7cC7njH/LSRjIXBGfm6ADFeceMPHGj3nw28UeGtPa8vrp5/s95cPMAby5gkdYH8tQNsIhAKLyRsAPevzeMObERcdfx3dtfNWIpKUU+bS5x9zLpem6zrN9rfxE1CzhuJNtstmonnuGj8x7d55R8ixmVU45JBY7eBVj4BeJta8UePH8G3PxJuLKHXike6Sz3/brgKuUJA3FgEG0k4JAznvT+Engnw74sW203UvFEgs5bptQ1jS2idIbeKFcl9wJDO5KxJ6GTPQV3ek+MvCNt4z1u+8AeCbW6fUJ7a3tpobNmttPto8LISTghvIQMRghmXcfvCvZrTpuM8PZttb20X3nMmovUmuPC+teEdbu9H8D+A7/xHb6pNzqxuYZrpZ0hEziEk4RQzFnJyAdnpg+NeNdY0fVreK40HwkdNu8jz72S9eWef+AAhuAcAZx1x2r0T4nSaLb65eeHJta8S6prNw11PFp2nRLtjnkV3SKNlYhYhlMlQSAG4G0CuL1X4Qa5o/gu68SXeuWjSNbW1y9tcTKJ5N+xcwAMS21yVxjOVPHBxjgeWEYyqy1ei318/wCtC+eVSCUvhR3HwS8Yan4lvY/CFvfPBbaNCLuaW4m/dqSQrCRjlznlsrgKMjvk7/hHR/EF38QNN8I6r4QtrbQ9Onuku3850W6u40DsW4LBySoBxlQXAPGBlfD/AMQeNPCHgHQbWbwDZWen2kVxc3P2mZYJryWRWP2qZiocooVTgnAIQdWxUHwf0fxB4s8O+JPHOuakbdtbedxdXMkaqY1JdjED8ykOMdcNkjGMk8+IjCMqtSyUdt73fyNnKMo76oi/aB8U6g3iaztNakgldNl7JbxqvlQQMqhAp5YgKePm9eM815Lr2qatDfaxrNvom/TNW+WC5mRyJI925XD5GTzz79ffr9auNX1nxRr3gOxt7jxHe6hdNcQag4BlthHH5bmRQuWKrt5BCAjIBrg9al8RQyReD7HVZNQs9MiZLduPKiU/M23oMc5JP07V6OAowpU40422/Dv/AMORVnGUmkdxa31rYeD/AAGvjTVJrrS3lMxtbcKjpaCTb5Z4yxDLuGeOuOTmtHxnD4N/4TP7YvjK614f2gEJjVXjiXapjkQJjdg7VwOMqO2RXL6jBDc+B9GsYPCN4kLXYtxqMsgLvMFBYR/KuVO/5VY+vpmu78L/AArnu/CeiSab4f1G31MbtSs7y8bCBGYAghRhNwieRdxJ2kdBgkqezp3rSdrX7GcZ+z27md/whXi7x34e/wCEz1Ka4n0i7N1JDMkX+kt5RCsxjUktEuA7MBtGW5z08in0mbRfEF1p+rNFaXFgSsiTI2d+eVK9R05Br1rUvHXjhdFm8I2dxJFcXESQzSwbEaC1WTYI2ZThYmbklsFiR14ry/xRpt1/wkLtqF/Ol09t5ly1+zPI0wHKlud27gqc8gjmtsvlP3lOyT2S7Dk+Z3K8etXA1NbmxulgDxmGSONMK6Z5XBOWB9/YV1PxCttLjt9Kn0fXv7Q8u2XdKmI44g3AhjQDKhTnLMcknmuUtNPkWNLy3sGctujjbbuIcKpbIB7Ajk8fNXs3ijwLfWvwdRptJjkNkftUV41wBMyPgnKsPniU7lG05HU8VeJrQo1Kfm7EqF3e9jxa6h+y+HY5GJRbiYqu3H73Hc/Sun0/VPDjfD+/8P6lZss9vCLi0kSVvMe4bH8AGCnygMWPGVrhbi4uGjW0kb91jcFHQetX7e/muP3EYKCWMQ5HYH/I/KuypR54q/e5tFRW+xFJcR7Y9u6J0BO7rk46Y/Kuo8Sapo/iLT9HtdFs76xFpYpbzW8spkSecAs8wycBnZjx6AVyM0c1rfRJdYLwttbPT612fgy30ibT9eTWPtUlxBam601beIujzA/dlxyi4JO4Z5HNKulFKfYzSd9DmLiL7LZrsaEk4VlAwyn0PoaorNIyiNZGCbsv/vdBg/0q5qEfk3hhuleEs4d8jlc8/wBasvJb2bL5bxXCwgbG248zodp9+1aKVkO2pB9nb5UmuC0K/McLkr68djVTdcXOArOYreQ4/wBkk9cds8Vaa4ZriW48hFW7bDR7uVzzmqrQtZzSSWdxv8xyqspwfXpVLXcNEJf291HKjup2yL97bjNVBtVTGVJ/ixnvW3Iq3FvCt5MVI/iC5I6DkZ5NZiw+ZJhpFOxSVDcZ9qqEtB/CEDSMojlU7em7GTSyRxoA29RnI+U5P5dqSHdHMWWTY+QcYyKlltbX5ZLjdktgsq81TkK9x1uJFiCvas+5tyszdR6YqGOMQMqzSgMWPTsfSpbmSKNlktvMWOMhY9rctjufQ0s1us1mrwhpGDhpGZcbffPepuJ6Esawxhlkuju7jy+nfiixbzvlkhe4Bb5gD8/Q4P4f0psjNKyNMqx5wvydh9Kk0llguH3EYG8MrH/WKQQVOPUelJErU2NEhjuNYto7cybJlwWjXcfQcV67BZXAjh8yF8kbR8hGT3xVL4F+HY7u6nv5LuGNraALD5iE4DHqQOMdvY4r23+wdULb4Ut5lTaN6ybVJPQDIzW1H2kFdK5xYidFytKW3keEaxaOtvG2048zafyNVfH2W+Fvg7PHl3V7D19Hf/Cvc9S+GOuap9putPhso5Io98cbKJFZzzgA4A7854rxv4laZf2Pw90XTbyNTeWuuXkDLFzlmZzgfmK6Yyk/iNMNKnKL5GeS+XJcTCOKMs7cKq85rufB2i6X4dFr4g8WaXLctezPaWtmwKvGuDG0/I5IYsFz0KZ57aHgHw/p80kGl6tpN19j1CCS51S9jV/OktEJHk221TtBZdpbHztkfdUg+oanrui2+m2t5DosFhdPbz6WljDI7I9gVXy13HO4pv8A3cy4kVy+Q4zXl4zGcv7uJvy6XOW8L2Om6T4UutL8VaZcWVhrv2FLrUDFuOGkYpdKQc7htDbTkNsJx81dZrHw70m+tk0/WrWK7jtVSKa4vLl/sskG4RR+XOF3wv1IK7gM8hkK4xNavL3wfavpF1qFlrVsJo7KSzUKFlsVgB2tn7kqNFICP4XII61u6D4yOhtbeHbrU7e50OS1M+k3GHjlnmYugSd2yu7auxlAI3MuBhWrylUqu8os0pylB6dT56+J3w11P4eazc6fdxTeVFMUXz8ecinld235XBHKyL8rYP3SCo4fy2KnmvrC68Nza54OutP8SeIdPvYmXzoo/tCsY4z91Yd+2QFC5DREE4JKFhhV+ZfEGgX3h/UnsLlfkPzQyKwZZEzgEEdff/69erhcR7Rcst0aHtFveXWi/A+2k1K3MUkmoLHCsc4xcRiQb43AH7sYjBwcktzwBg0fHul2+ua4ureA9Fulju9JNz9jlIMsaJGWmB2kquFG7bwNu09TXM/CnWtEbWLfQfEmmyalC3nSWNmq83F84VUTduAUHauD6jHOa9Y/tDwlpOiWWh6xZ3+j2t/cWkdxPdSkkSfMrh3i4I8p9uMglVXOc4Hk4q+FrqSV23+f+RdDl5pwnomeT2twvjGG78RavMlgdPthFbyR23yyzhQwgd855QMVZs5IKnqKg0lXiimhm3RPIQwhYYCgq3Qeld54ZufhT4O0/wAXSXGk6l4ost8Msdx5CRSx2rsAPMQnK4kOwlcg7gT0xXmvia7s4dVuI9DmuY7eF/KhilwzRqwB27hwQCWx7EV6WDrWraJqKOqvh1RpQqRaucnfMoklHdiPzqtC/lofVgVH+NSXscsMu2TvzuBzUOSx4/8A116N7nJOXNJyLkDjyPJl3KmckqeT6cVe0sTmMRxMrLyW7cetUbPazcoHK8Fc4z9KvW/7td1uxVkb51br05x7VjLQy9Sz4ck3TTQyKN2CykdwOtU9ciWGdo1GIgxKr6e1S2uLXz7m3mBKrhcdefWq2qzyXUytIqoWFOJvBJRkUoflkB5BP6VZsUaeaS4bbKw+8pzuPvVWNpLd26cetWNPaRrjy45DGxXO4HHA689qctjJm00qoiyNJFJ+72xqBhlJ45zVLzI45IWVSDHjzGz37g/h/OlmxHcIkI3nZkKCMg+pqWb/AI9WUZbqW2qMn3NZJEyexoaXZxuz2isWJfcoxzg9P0rptQ0y+8O3Aa13ohtoZWKnlldQwzxzg1y/hf7dNeR2scxQO67XPb/PPFezeKrO1ks9IlnjAW50K0lf0yoKnp/u1rSp82opz5dUeRXmpTj7RC+VeSQh9yjLH1rKuZpC3lOFIKjkda0tWZZ7yWWHIVpGdM8YBOazEhEkhbnt/OtfZ6lxkJqTRyxwxq7hkYnb06jtTvtn2qyS3Ygvu54xuHrWh4s0w2N0kkIwjInI9SorFxFtUOucL8orJwtoy6sOUu2sKLMu1kiEfXGT/wAC59z+le7fspeIvFWh+N7mTwrrU2lTXdrLp99LCqLKbWQEyDzXH7hSURTIhDgOdobkV4TZTRsjRNvK87X44Pv7V6H8GfiJD8O/HeleLJdKN9DBcxSXVr8qCVVIyqllZRlQVyVIw78ZIxm2ZR1kftr4j+FHwkvfhXceErrwnpEXh2z09rzdbBQ9u0MWfPinADLIoXh+D0BGCRXzd/wS78Yav47vfFOvtpt0unQ2y2LXJAaMyiRZI1Lf3zE+cYwMe9fMfxK/by+IR8BeK/BnhPSNN0DRvEv22IQQQF/IF5lZRGzuTGu0uVVQAC7dsCu7/wCCTPxD1rTfiMPhzE6xaRq9vfXkib5P3s8ccew7d2wbVRhkLkg8mtqUpRg1fc6JQVvM+nv21tFM3jLSLxODJYqSfozj/CvnXT7+XTZDDLGZbc8NGT091PY19X/tsRi0j8NapujBlaW0/eNhWOVIX8c18i3su2TO75W/8dP1717GCSnSODENqSOhuNK+2Wf23RVku43BAijXMhfnCbRyCen41137Nfxk0fxD44uNG8fwHRbvVYDY2u9j9nkkk2jySxA8vCqFUHI6DOevmWk69qGhX0N/pUzI4ljdgrEeYFYNg4+hHrzXr2ran4N+NGgXFt46WGzu47dl0vXIrf8Ae2U45WC4CffiPTPbrwea9XBPDU5OniU7P7S3j8uvmcOI9u481Bq66Pr/AJHSfF5tP1z4ceHfED28p1nStVufDWpGNR+6lg8wOZMnIDCJJR14mY8CvGZGmgb943BPGP4q6r4c2PijSfFUnwl+MFzeS2vje9ilW/FwHadkj2pNbz4ILFAYtx5w4zyK53xVo+ofDnxlqvgTxAzTxaZcmJJ9vLREAxSj1VkKn2yarMcBHC1OWMlK6umtmvL0egsDjXi4NyjyuLs0+n9Ir/bF4HmMB/L8KhutNW4zeWc2114LL/IjvTr61aDbJCwkhkG5ZB0I7fhVWOe4tn8+Ftv8v/rivMSO1sZa6hqGn39rqFhq02kanZzCazu4W+TzQcq3PAOR3/XpWtJ8ZvjY2oNb+IviB4jBKnG3UHRJATkldm0Y/wA8VSuprTUYSfs6LKVO+PsT6isyG5MMQs7qL7RZ5/1T/ej90PUfhz/KrjGMviWpPNJLRnoN58Tvitt8N614b8YXUuraFeC6s/t8gljZXjMU0JaQEhXjY8E43BD1AI9v0P47fH/+yY9WuvDtjdW8iiRGnsGjkZTzyquCPyr5kfUrPT9Jim8ySSGM/eVSxC89cDt61xPjTzNa8H6trLeN9TvEt0dlWWZyfUKSW64rjxMVB6pG8JSl1PtDS/2sPGGjma18QeF7S+mNxJIf9Ia3aJWYkRbdrcKDtBPOBzk1sX37YlrNYSJYeDbu0u2X5JJbhJY198DBNfGvwx0230fwPpFidQm8824mm2XJJ3v8xzyeQCB+FdfGvlq+biZyTnMjZ7Y49BRGjSlrYq8ket65+0B4q1yFra98QXUVs2W2xxeVnjoWXkiuWbxldTTecNRuJGI2+Z5jE49jXHvcfu8/eOOBUsF1f+WF+y2qsM8GRse/QVslGOxm02dHdeIpL1ljuL6SZkHy75CxUH69K2vAfjnVPCPiay1eyuZSkUgSaLcdssROGUj0xz+AryabVksdXU3lxDDGcLhZDhj8x7gZ7dPUV1Ph3xL4Yj/tDUNQuRJ/Z9uk8CeYUWSYzxIoYgZ2gOzEDH3etVLl5XchX5j2P9sDRdN1jxZojX9nHc2eqaT5ckUq5WTZMWGf++x+VfDf7RXhbQvAuhaZrHhvR7WDzbt4biORXdD+7LLgZ+XlT9a+ufjZ4kvvHHn2+sXkUxsLoW0T2rbdlrdWccibSOhzG5BwM8GvlT46eAo/DXw+n1W48R63rdhY3MDfYL64DqNzbN4bGQw3fqa4Zq9BK19D1cJK1Ra2PDPh14os7rxhZW8GmW+lXM5khW9tmPy/KTgowIIOMc17cdQ8UG5K2usWl9jDfvLXbnI9UNfP3hPVvBsfi/TZLGzv7O8+1xpAZis0O9iUG8bgdvPNfTWm3XjC0wsen6LdDp+7neA5+hBFc+DkoJ7nTjoSlNbfOxSm0/x7q9utvH4ejkdJFdJbeRgSR7MPf1rdt/Enxh0vUrW68RWfiGSxikDzLHbLKXQdRlDk1s2vj7xNaLELr4e3cip1a1vI5M/gcGrM3xahVg+o+FfEtpkbebIOB+Ksa3nXlJcr1Xmk/wBDjjQ1vy/c3/mZo3c8jg9aBtP4enen+WfwNN27QeOleqmeAVL7ULHTbWS+1O6itYIhl5pnCIg6ck8DqPzrnW+JXgWNsf8ACSwyHk/uoZpF/NUIrb8QaPDr2kXmjXgBjvoHgOexYcN+BwfwrotBXRL34aaf4wxa2F1JbjT7qNpOWvFBikUA9w6tXFjMXLDJOKvc2o04z+I5TS/GHhnV5Fi03WoZncZVMMjEY7BgCa2Wk2xsc42qTn8K7T4vSaeuq6B8P9Es4tmjW0N/fGNdztcyJttoQRzkR7pCB/fSvVfhN8DvDWm6dZeMPiDGb66uR5ltozqypCQcDzweS3+yePrWlHGc1JVKitfY5MZXpYNc0noesaP4HOoaD4daSRYorfQNNhaRugIgUkD1OWNW/h7Zx2vjj7OjLcQ/ariCNZrfhEjTIZW7tn68Gu1tyyw7Y1RSqnaQMCNcD5VHQcVzHw1M1x4uDOrBU+2zDI45kCjHH1714eKrPngk92eZDMqmJxlNR0Un+qPYK8c/asuDF8KWhU83GpW0f1xub/2WvY68O/ajvtJu/Dum6DJrFnFdC+Fw8DTKJAnluAxXOQMnrjFb0f4iPr5u0WfHLx7iQOvcU1VHXDdeM12EnhyzXJXU7MgDcT5yj8faqFxosSA+XdwSk9PLkDfy716vMcHUy7W6FqS5PCg1jfGSVrj4x+K2UnCXEVtn/d8tf/ZKn1mZbVWUSDKjpnHTtXP+LNSfWfGOuatIu2S/1N5Co5xw5xnv1FTPoy4voaunR+VZxRMzMyoNzHqSeeauryvfioYUVF2tjjpWV4q8Uaf4TsYry8jaUzSbEiVlThRlnZ2wqgDHuSQAMmkpWWpUabqSUY7m+u3noD0z7UszeTC0m0uVBYAYz9Oahtpo7mGO4jkDRyKHjYfxKRkH8QaS6aRbeZ4SS4jbaFGT0PTNTVm4wcl0I2Z5rNfwaj4ovmuNPcpPbLbR28aNK6uz/MrFjtGRk8Csqbwz4asbLXPGc3iCCz13QCsFvp8Kh/7Qgnhd5ppBkJiP5FC45bAIq3pNvZXVy3iWbVLhLyW3ZS0f7uJWdiBxgB8qvVex64rjPEn9gw+H/iD4gjmmuLi6t7G0tS8ZMUE7yx+aq5G3LojHI6YAHWvzHBQ9riHFb/qerhKSq1VFHg2s+Kvt2g6xpuvLJcalf3Ed7aO2YwpYBZH2qAv3FXGeOuK9I/Zhaw0XWtV8YXsM5j0bSyzeXh5mLEhljQ/eLDj0Gea8S1Sb7Zq4WVtoBEeWzgAAge+PavoP4ByR6Z4Z8TX327Sp7/VbQaaqTR7lhDA/vSnG7GScD+5z6V9HmqjQws+Xr+uhpiYRVVrpqbvxM0STxhqs2l+H9MtdB1PXNJWS8uZZBI8VoIkkceWDkSHdEgCbRjJ+YVyvxA8Vnw//AMI8tmIrmwsJkgurWzvWyLi2IWSMMV3RZO8hxksRkkkVH8XvG3iJfET2PhnS2kjm0uGxuLpVuWljT5XRiMhVYFDgDcCPWugspo7z4YX2l+EPBdxLa21jD/aFxqMKeZLOI13SpHgfvNzABmJ5ZguTgV5dCj7OnTnLb/P+tDjptqSfQyPixeNr3gPwf4rWEWkOuS6leQWUZ3LaxqbeMJuPLH5ckn19q8d8Ntb/AG6ya5hZ1utXaNdv3gcAArngEHpXtPxG0z+y/hJ8KYm2ss+i3uoKqsWEaz3bYUnuwEYB98jtXkfgu2WfW/CsTWrzCXWy4jXuA4B9T/8Aqr6qlTjCnGEdkfR5quSlSj2ifYerWkmoWP2S8ivngeArcyhlgh8sSH5Wc8nkY45+bqAK8O+MN34w0O80K41LOnTa41yPsPmgm3sC21UEXJVXGW3tgkHIABr3bWvCd54klayvfOt9LW3E6ztKQZGjdpEQJnEmX2ICfu5+lfP3xg8ZaTq/iweFbexU3mmXv2d7yZSJH8uEKxypIZV2Ec5JJBB7D5ShLnzRxpq6vr5HzdPSPvHkGm+F9X1Wy1nxVb6YLjS9IuES8l80DyXmkAi+X7zZII4HcV946HomueHv2Z/h7Y6Gt081udYv/M8vAe7lkiSFCR9zcAQMke9fJXgmzmj8F+KptMkudQ0yPV9OVLmNPLVJQkh81ozzhd3fuFIr9Jvhn4V+K+o/s+6D4D0HUPDnh6wW1XUtQ1LXpJWu7W8ErPHGlsgHmkhd4J4IIGCRX0OIlzudOb3PawTpwpPm6qx8v+Av2arz4seLtebxh480PwvdeHtQkuNR06OGW6cP+7Z4QDiEMQeIzJvIVvlwpx45B4e0XxX8QH0WaSeKy8Pi7kzYAqCgkd8mQjClgFGcYHAHSvabzw9r0fhnWzdfErUby18RasxVZo2txKsRdGu5rZTvFyWLbQ/3g6ncC1eRfEjxRoPhXw/p/hnT9Pvo5JlkmulnuFl+UuB5joArJuVgQCAQQBk15kZxfLSpLbS5Kr0qVJxprd2OZ8fWf9ueI31zUJLLWtP8M2sUNxY6bG0aKdzLErHjfk4Z3yM/MBXQ/s761anxqmua14Ciu9A0WOTUp9Pb93byhshYV3Akje6levAHWvM9CvrHwuv2q5jXWru6Zbe4/eFoQrhdqnj5yu7nkYYDHeuytvil4h0nVNbt9N0vTZPtMsIeMb2jK267BHkHJDABix5BJ5GacqmJw8WqG/Rvbz0MaeK9hKNSn8SPvbRfjlNea1Z+PND8C6NoyWtlPp5nbWmWExRlMK1ukKllUEFSp5EbYztxVbxt+2b8SNEbTbfT9H8I2l1qUxjB1B7gRKpcpGQzMhZmO0kBcKCdxr450+++Kl1oekXHhu6OpTywTSXwl2xx27sf3cUa8/IoKkAjP3xx8prqPGHwc8beIvC0HxEvLyGXU21B2iskmeWWynWNXZTKTs2tujZdox1HBAzpCvjZNSlL7jatm+LqTvsvQ+9/BOo/tHfEOwuLjw/8RPhuslvsMxtbOWYICDkjJO4Agr6g5B5GKt+KfDnx40DRtV8S638ddEhs9HdFnj0/To9537ccsh2n5gQMEkD3r5f+BHizx94f8O6PB5uueFvEfhfzhqj2dhFPHqNps85BDEBh5FCuswY5Il3jJTaOx1X4y6hdWdz4TtIDFHPcf2jcW0cbyhpHJc5JG1jETyisfpXJjMzxFGPI93fYzqZjiLfFb5I898feIPP8aQ2FjZ3k1xqDCS7vplMcC56KdvLM4Yl3yGAIA65r5p+JXiLRdY0uTQ/B9rpdzLLKbGNrGGS18toneYSHcMO7xMVYFuGQ47Z9H17SdT0++u5tU1C417VNRhmitLTzGS3it0aKUSPLkBNsiAkB8bcgkZxXhUy6Xovi240K+0W41HY6vb6dpF0LiOQyIQZM55n5QbRkDc3HGK8vLMNFzck721+fVnmfWKlnHmudZ8FvhtDqGk6z40utSljsrqJ7ezEN0y3EEYYi4JC8BnQbAScYbNaF347i1jxdaeFfA/h82mkT6UlvHNbBY5RCkBM0jOu7AIGCTliFPPIwnwx1jXLz4RanpOi6bDYW91e3LtBNKyRFiioWGRgksYQC5OFRtowKxPHHxRsbPT08Mt4XSz05rST7Jd3dqpvb+R5syTl1IKRsBtXA5UEA8mu2UKtXETW/RLsDhytc2xv2en3l94/03x1pWi3d5pskc2mXExjNyBMFwoG4lwMlRuY5Y7z0OKx/Emi6pJ8R73+z5NO1C/1C7SGy026jLwQ2itkMJS4Ee1QN4boGbng1xXwt+JuuWfjLRNHvNRMeg3OrK5tvO2R2kkh2LcA9zGDkA8HHPWvVvG2uapFqlvb+GfDmk3BsbXyhJC32i6XaGhlFyrHG+TdkKOAw46VlUo4jC11GVneNvl5lTjanzGH8SL/xn4b+G6+Fftmh3NtpcbRXE8fy3i20jIUQ5OXIkZ2G3Ixg4AAx1Gg/DvRYvhzoOm+LvFWlXVtbWFtq/wDZ63axPJ5zAAIyrl22iRM/NjbnpzXAeG/hz8WPEXiq6s9U0jVrDTmUQ31zc/egjGFAO8/NuGBgZ4Ndp8dtb1TRfBVha2t74dht3SG0uLK2t4o7qPylUCZAo3Kp6HGF4BA5NZzlbkwtOS55O90ZS9/U840v+1fBOrX+teHNUtzFexzafOwugs0ayJuMY5JOAACwwOO1aMPiqxi+IGneGWGgNpEcEcVw1onnRXEBAleOZ1ySACwOwZBBIya4u88JX9r4csfFMlkWN+0nmyXD5UfOFCFB8y43D5j97dx0r1b9nv4VRiHU/E1xDZai0sdptmVv9VZPIwu/K3gAShV2h9wI+YDmvRrKjCnKtUldpW+ZEfXU1LP4sX3jjx1czaH4Y0nfa3FxqlnCqPb/AGVBG6GJmfG2PaQzgAHkZOAa5fwzr2tatPYeONc1S3bwt4SCWElvcXRC3A+ZEijVFJbCsvbG0DkCuw8H/FTT/iJ408Q6Hofh2K3tda0iW3srm8h+eKeMbplPO0iTLHbjOcA8E15t4s0fw94X0KTQbjWLj7Zdab513HYnZbpqSyExoyE4I2FVLL6k84xXHhqcFN0ZR5W0rLfR3v8AM0fNHlkjb0jxp8NdH16VrW8udUXxLcQi4s2jeK0jZjmPcmMnyX29d27ccAAA15v8SLS1Txle6ZC09xqDXRE0skfkrM7AYcIT8ik9BnGMV2/wU8NWt/BcatrULvBFIb6xW3tUkl3W6t5krOf9XEq78q2AzbSMkAV5r4vF5rmqXPiRNFu4rGeYyecyuw2BtuWf64HXjpXrYelGnWai3ov6RFlJuV9Tu9TvtQ0X4daRYWtrBcpYNJd6lHbTBrm1SaQBlIVAYjuiUlixwHVe9aQ8Jxr8NUj8f6nr1pcRyNDptpNlxakr5pXYBuOQRgEgfvM9jW3qWvNqXwaN54J0aaBHsRbXl5eTJ9pnY/u5GRc7jGWDlie+09a4n4e+KdD8FWM2paxa2+rXKRma3El2x847iihEOQCMyAlhnBJ9AeO1SpGTirSUum7/AMitdEeXw2d7qV2ttbRu5UMVVVzhec5+laGh6Be6kxhtWhDIWd1lbZtVFLMcnjAAJ61As19NqE19pshtJ4WeZTFJt2jkkL3PGR713Hwv8L6f4z1hodR1CMNNDIoM8z29rE+NwMzgHcjBWGwEE4z0GK9qtV9nDmeiQSkck2jtdpel45p7i1kZpGj+ZPJxkPuHoK1Ph/4pl8I3c99Y26yyS2rW2W67XOCATyuRwcdQSO9U9L8Sa59lHhGTVLWws7q4KyzvEEK7mwd7Y3bRzwemTXoWl6H8MLX4Y3UY8TXUviJ7l1hVLMPbs8aAkGUHcEO7AIHcehrnxFTljy1FdPTQ0jJxlzQ6Hk+oXEU2puFkkNuJVRWkbeQAADz3AxgfSptXtobEwxjaRJ9x88MCM596zNnlyjDAAvuCN1z71cvG8yG0bH+qUqd3QnPpXby2tbYaSknfctQ2pZF2skisOQOp4NUF2+cjTDckJO6PoWH1qXToyyMrM/zt8mM8c5xUjSSTZjXy/wB0X+VsEtnrg9e1LZku1hbq4jWxiaJAQ5Plk/ej9ie9Zt80jQpsjAKnlgOvtV6QxNaRRqpGxi2Ac596hWRnUxlQC+Bgd8H/AAqoqyC9ySzKpEbiRVccLtBwyk+lMmkWRjLG2OrNjtzTriNUzGkeVDAB+34+9JZwxecVeb5HIAGPvHvT8yRVSNQHZWJ252+je9LHLcKHVZCFbPHY/hT2TzjMrSM7I3y5XBAHAqK3ljjk2zRuVccEflS3FYWKZWkDSK23IDbGxn/CrN1JC10Li1BWN49rh+cEDkE/kap2sbGaSCNd6jkMO46VPGs0gkj8zeV4x2ND0C1j234NeMNLsdPgmvtYtbO8tQ9tCskZx5chBOexO5RjvXs0fjizeQP/AGlprvtUYYNGDjoea+Mbdby2kGpQxyRpE6qGZcqGGCB/LrXv2h+LLfxJoVtPB5McyrH9oBbhD0Zfx7V2Uaqa5TKeGp1NZI9st/iJbpp4s7f7GZiMGSO7UZ55OMcccV4x8WrW7l8Oq0TxiabXJLpfLl5WKRSMbuxPTPvW1B9ikdHms4pQrBWj8sEexGR9c1t2mj+E9QlFq0FusbuvnSL1C5yT9B1/CtpOEVccMPGk/cOR1qHR9MntrVryVw88XmiGEsqGCIR29ugUbtoLFyF6KhHVsm9ouj6hb/bdSvNWvrDT7SOE3RLwGK+YndsMco3R+Yd209sbgOK6HWrXT7u+dvJLO14n2VW/1ilA0nBHIyJUJ45Kn0p+lalb3Wna7p+qak18libBZGvHLLPI7giNQAMqvlJvC+rrk7jXzFeMoLQvlsjzzxtoc/iC6u1hsxZam8st3e7nCJFb3EU00IIPEYZ0C56nzMHrmsLQYfDviTwTqmk+IYjb3+n2/wDaGmXEUTTNlGY3MUiB8jemGAwMGM8Enn0G0k1DXtR8a3evXX2R9R0+AOWT92ClqrbmUKRkrEzbc8DcMZ68dqmm2Hw91bVI7OQXOqWmoXsMKPbtGY9sZIljkGVljYkRvEeVJRsENToySjydTVabmTqGreK9Ij1PR5Fjnntltby2mslEltcQhCFmjYrjDxuByQSDyNy4rl9a8QeG/EGmi3k8wXVtJtjVVIG3nEqE85GcGNu3GTtXHValY6PqGlnxZ4J1S60O+lgjeS3juCsbeaXBt12kFQHGDnCgMOO9eda1Hb3Sx6vGsdteZ23UStx5w/iA7bhhseu6uqlGMnfqCkUrqzFneRxLdQGVts0bIxGR1HXpXusMkHivS28Ox6tJ/Z/jrTodQtdSa2T/AEW+tATNA4XpuKPgcE/u+1eKaHpa6xq63FrqItLoOskClMlyOWw3TcMEjPWvTdD8UeJPA/w51Cxs7W1jt7PUFlV7q2xPJvfJi2MSuwjlgoDgH0Fc2YRcox5dZJnVSaUJJq/6GNfWRs7XTLzwzp9xIPEVrNo18XmRra8nUAtGpHKOHVSq55wOTnnEvrpvEugafqWpfZ4r+xLabPNHCd92UCmFpVXgMqB0zgZ8vnJq9qDaHrWi21hp9vpunXksy31n5Vw+1ZNu2SCQscI2Arq2B161nwwwafo9/GJrp9NvXidZd37uO8CnarAZJwDKAwOCDV0m4xXNvccv3cfZ30d7HIahCvki68xGRiFVR3P9Kztsasm0EZ55NaOpRtHbws0ocYxx2+v45rNTjheT716kPhONK5esXjWTdJnb7DJH+NWZplZpZIWJDZI471QtWG7aMAdeat3DeXDFGGADbnPualrUERecscY+Trz9aguG87DeZnFPmEmyPHzbCQSP5UmxGVdyH8Oxq1oVsQrIqqFaPdz3qa3kXzRLsznjGaasec7ly386srD9lnRpSCo9O/8AjQ2rEtk6tHcSbTH/AKngE8YH1781YumjWNRboQWG/PbBHNVniFxKyRLlXbPTnFaUIbbBFcZAQFT6+uPasXoQyx4emhSRXurqSFU58xU3Hrxx/WvTNU8UaNfaFoFv/ak001rp8lnc/uSuxhKWVA2MN8rdRXm1vbJ5ax4VQVGD3NdtZ315B4b0m1TSkWzWa6230igC4mcjKs2cEqqLx2z710Uk4t3Mps5DUraOG4Magggt8pH3ee9Z8K/vWG7jY3P05rX1a1vre+kj1G1mhnb5mWSMoTu5BwR3GCKy4QPtQHIzuX25U10x8ioM6bxjbGaxsbiNeZI7f8PlC/0rh9y+XLG65eNyvX0JBH416JrhEnhvTJhzttU6d9rmuF1KBbea9aDaIvt00WMccH5fcVOIhqeniY3p05eX5EFnHcLIIoWIjJBIUgitRVvoZotse9Vc7mxx6c+3cVjW91ImyFWYKr7mXjrW3vkmt441YoVXcFXlWGT1HrzXBO9zg+0T+Mr3dbWVqjAgkyHaeDjj+pr6w/4Jz6gNB/aI8CKzMPtMtxannGTJayr/ADxXxxqTC51xLW3/ANWhSMe/c19Q/slakujfHz4d3zEKkfiGxjb2V5VQ8/8AAq1Sskjqj7x+jP8AwUm0+Wb4DpqcO5X06+jmV1OCpDKcg9vu182fAGx8N/HL4O+JIZPElrpPjzwcv2+Q3sipBe2h4B5IwCRsJyNr7M8NX19+3tpjal+zZ4jVVJaFfM/JHP8APFfjZDqN7p8n2izvJYHdNpaORlJU9V4PI4Bx7CtYzlT1i7C5IzjaR9DaX8R/C5uLe41PUv7PtzcGNjNDPA8ZAB6OmCcEdDg54NfS/wAPdZ+DurWvkv8AF7wTqJkTZvivo7W7TPAEkchUNg9+T1r4F1bxl4o0i30OW18XXU13PYfap2OS0TvIwWNt4IOEjjII4ww965PxH8VPG1lFFcR3Gn3SeYPMF1psEuTj5ckpyBjp689av65WkS8NSR+jvj/4Q+INW0mLUvDevJP/AGBi+0+W3vFkijhEg8x4CGyuM7wB3QjrXSfG3wj408e/C/wZ8Ztd8J3Vj4jt7OLTfEVqsWfORifJulCc7d2eoyBKuR8tfmZpvxU1nUtF06yuIbT7PYJILVIVaD7PvffIqeWy7Qz5Jx1JJ617ToP7c3xatNKsPhv4m8dzWHhzUGisl1hpJnutFWJg8M0UqHzSFZVU5LHbnHQV6FLMqlSnDD1ErRekuye69OpyPAQp1JYinLVrVd7bfM+nfAvwl8beJdLmj03R5kijQyQmdWWOQ9dqyH5c/wCySOaybH4c+Lry+ns9S0p9LitWKzz3g2JD67yeE/4Fivlnw7+3B8ZLh5EX4o/EO32uv3NeSUEZOT+8izyMdfQ1a+IH7VnxS+IFjpen32v3kh062Nu2oXLK15d5kL75SoCFgNqhgoOFGMVzSxk3LY6FhYpfEfSPiHQfCPh0rJH4vXVHIyzWsflopH+0+A31UkVnf2f4Q8RzCz0jxpZLqBX/AFVxGVjLE42mRN2054yRj3r5C0fxNepqkmqalfT3Uro6CSeQvjgsT83+7Wl8PNRj1PUnk+0wxxoxaKJW5cHk5x9f0qZYyqtSo4amz6kvPC/i7wvH9s1HRJ3sX63EGJ4HGOu9MgceuKLDwXpfiDwz4r/s23/dT6TNOVRcosqcggfw5G4eleHW/wAfvid8NfiIuhaD4i2adctbqIpgzIA+3ORg7gDk4I9a+z/2Nv2lNG+JvxQvvhnrXgnS7PVJrO8Sa4ggCLdeSwzuUfKcjd2BrSpi5Thy1ImKoKL5os+Q20vUo7dZEsbpDtypjmHpx1waz7XxH4o0Sxt5Lq91GKZYwJCzMBu79/516X+1V4g/sP4lajD4IuNFtLafRLyeTT42LXdnqdjIY5jMpwFWTYWXaSDkn5TxXx34s+OHi7XNMl0m+hszHL1dFOSB9SRXBySTujtcktz35PjNrthKiy3kzhjx5igqPqSK6ew+L3iSaSJP7Kt545QSZOVxjGOnBz/SsDwvFaar4Z068a3R0uLWKQ5UHqo9etX7PTnth9nhj2IM7cL2zV89SHXQi0JLY6631KTVlTUL+xRD5h2pG24DgA5z361qJNCtrMqwKpkwvLD39q5aOabT1tOW/wBWWZS2Acseo71oQa153kQLCoaWcRgY+nOc/wC1XdGrFrVnK6b3seq6t4qtfEBjaGCKG6AEd9t6yGMnyGb1KxsU+mPSud8RaLpfirSbrQdeha7sblVE0JkZcgMGHKkEcgciuO/4Sx7PVJpoYlMfnNuHdwCRjpx9a8c+KXgXxJ4+8ZXXi7TPFC6YLiGK3jtmeVCiRrjBZODk5PTvUPEU4KxpCjO99j0u4/Zl+Ff2uO+s7fWLGeKRZUaK+JAZW3DhweMiu+Xwisf+o1Jsn++gP8jXypb+Efj1oCtNovxEmYg8KuqSfNjgcSDH51Yj+JH7UXhtfJuLxb2OPvcQW03v94YNEMRR7WNJ06s95XPqf+yNUhX93PHKAcdSP51BJDryKcW7HHHyODXz9pn7RnxsjXy9Q8I+HrogcuxaE/kJCP0rpNN/aG8bNj+2PAOl4Y53W+pup9uCjfzp+2osj2VRanrKruOM5/pS+XjI61LGu4cKMdamEKt2GOtdvMeRYybjA569/wD9VfLn7QMfirTvG1vpNjreprpWrsLmCyS4cQCVjtkAQHbktz0z81fVl5DtUseAOeleX+PNOs9X8b+CIyqPNDfTzKCRkKsRYnntkLQ4xqWUjSg2qh+kf7Kv7N/gn4V/D3w3rk1q+qeJr3Tbe8udQviJHilkjViI85C4GFDcthRzjipNQXzdUjx0lu84+rk17NoNv/ZvhjTrUD/j1sIY+P8AZjA/pXgfi74jeF/h7f2mix6VqninxlfIJLLQdKgaSZt+CGkbG2NeeWPTmvEqydSV2eVxJhZ4qNKlTXVnq32mEQtNdSARxR7mYMFVAOBuY8KOKxPg3G19cSa3bzR3Nn9lMCTRMHTzPNLMm4cEj+teTa14A8U+KbI+If2pvGkPhjw35gNp4N0C6ZfPGT8tzMnzyk/KNqe/zc16BZ33iq68Nx6b4Q0mw+GPgayiEcN9dxCO5MIHHkwcbCR3bBPvWMqXtJRm9LG2AyeVOpGvVesen+Z6R4v+I/hPwSqR61qGbubiCzgUyTzMeiqi8kmvkr9oiy8Taz4jt/G/iLw7NokGrQ/Z7O3ldWmKQ9S6jlM7xwa7DU/id4U8A+ZD8ONHbUtWkbE/iPWgZriVucmMNyOvH3R/smvKdf8AGGueIPtOpa9dy384kiAkuWLlclumeAMAjGMc1X1hU37u59C4cy1OK+w7vusenTb0pp+0WvzRzSIQeCpIP6Gn3mvRxjy440eQjaNigDPfJ7Vn38010I5JfkzKg2oSAOnvzWkMXOpJR/r8jN0Yx1ZgeKp7rzpLhYhJPOba3V5p8ceYScbvu9TnB5zioI/MvdVf5MNJfEken3eP1q14oVXksY3j3iS8iXj65/pWdpVibfUobxppUkVnnzuPB+XGfXkf5xXoO8VqYaNl/wCOGva78NfF2keA/CNrZ63q19p8dzcW7LI00U7lmCBEOMCMDgncc5qhbfEfwPNqXh/WLjxNYNHatIbmJjtWNyIzj5huz94fh1zU3jC0aX9oG58UalJ5a6XoqyNNPPlpJk0wnJJ5LM7Dg8muSs2+HuseLrKxbR7VNP07RVhkZ7aKK2ubosWeQEHMh2lBvbByGGMDNc9NznG0tTZShFpxPTrzxF4btdSuLG31O2EcMpEStMoYRnmMkE5wUKn8aY2vaTNayyR3VtNEqkSBZ1IwR3waybnR/Ac0ltc3Gm2JF1AkUMm4gSiMFQqkH5gFUcc42n0rS0Xwz8PIrPVvtUMNtEmnTXETRLJK7TquYgoVsgswAz0AJODWkpONN36ImpGLndddTyvQ77XCurrfWD2+l2LG6NwsvmSrHgIFRccnbuJ7BiB2NVPi58NfE2j/AAfsvH2qE2lj4kvY5rWGFf3V2pAMbtkDa6RFc4JB3LjgGux+Bek3/jHXLmMz22j2qaXLldRlK7Cn7yYuSCx3MnXaOMKciu6/av8AC3iDwv8AAvTdJhgNv4em1iw+ywSTO7Syrb3DNPCjAeXG+d2zqC3fivh8rinjHJLU9jKqTeIimfnFqDLb6q8gdlEY+ZtuSOOwr3H9ne5si98tzIIxhZoZvK3FXhXcFXORyC3XvivIdQ029t9Yu1GnzuzqYwgjO75l4PPTrmvpX4F/A/4rWPgy+8XTeA9WstMjsnuP7VvbZobW3QlVEodsB+A3C5P44r6HH041MPNS2sc+If7xieIm0fR7iPUNSuFsrXV9Vi1lrN7SS5ub7YjIkaAAxhTkFdwY5duBkZk+KWu/ELxVpN9bx29ukpurOWZW3R3EbyAyBBuCLiEgK7FcEqB1BFQaDJq2ueOJk1fw/qNvY2NvbyaeIJmt4HRWZoUnXAzllLoB8xYDNdne6PZpr2s6TJ4+t501oRyX818EaWCHz8kJEWVAqnnCjOBlgSTXya5Yxjf4lquv9aHnwckzlPhD8G/id+0dY6P4H0ObTGutBt71JJZpI4La0tVunkdmEYJUGSbAG3JyCPl5r6l+H/8AwTo+Fnw78OQ+IviZ8RTrE2nXDKbXRWSA72k2bEnl+cncR91UORwa0fhD468P/Dee613wXpNld2GsJDa3W6FVN9bqSHkZkwGIAbHIyQRXo3xD+J/w90iOOy+Hl0viHWJW8u/vppC8NmJ1ZhNFExMZkUqF4GVHHrj1YZzKdBuKs473/Bo9evjZYtRvpZJHzD8cPE3w+8L6H4p0P4b+G5bW30ueNtOSN3uJfsy4MkrbyWH3ATnID7h2r4ekGoeKdf1D4iXy28UN5JI0MaxpEAFAVdqLgcKFUlV5JyepNfU/xgm8QM+p3XhtVs7q8vrPSrWOMeZKx5aSXJ6qFyTkYBHUnAHk3jP4VweAfBuq6s11HNM0MVqW87DM/nyM7bB94HEfptOBgdK4sorx9t7WXxTkcFaUnLl6Iy/2adD0fxMmq2OtIRFDKJBi+SEvJJtVcK391FlO7PUp9D9V33jvUPGNrF4Xk17UYYYJIbpbuCMP+6KhY7gFxtCnbgAAEqWwPmzXzB+zP8NY9e0bWte1qztWtbh0tNLm8gy3C3cbLIxRQR+75j3gggrz2r6HbxPY6pdaf4EvPFEYvdVCwTJHbP8AJHCwZ5FdST85QrngAqU6YpZ1iJxxEo036+QuZytHmskcB8TLrQdQa/vrmS1EWk3mZNTh2sftUaKVh3HO7bIRu4I+bk5wKx9Q8F6TqltrCeGbCHV9T3XdnJrlxqqyxXCuAdibIzgxMSdqkLhVJbkir/iLwzpt9qUXh3WbVRHqerG7uLcM0DXNk1uhjneVUIjdSUGNwUM2CTyah169+w6kW8OQ6fpeg6ZHsaRLmOA8xKLm2bBDDzJBtXaMEsCcdK5qNV0uWNNtt6+RacXBXvbc8Y8JwXfw+8XSaWtm95epZ/6KtwoeOK4wsqgx/wAe0q6kgAAtnJxXUeGPFUOk30q+NNHtrGDVrqS4ubqCx/fr5ieYsBVcAKxIG0AckA4xx5Nq3i66s9eeGON3hs7kXSxXG2R45tgHLc5C9AM446Zr2/R/G0eteB5PEXjK1nuNR1hS+LxWMKbCxWZFHBMh2jnj2r2aykoxlUXxaGihCpdxdrdGb/hf4peG/wDhKNQGn6WmnaU+oIi3kztEWSNNjq8ZABaTKn5cFcL1zmvrbQfjF8GfCWg6l4T8UeFdD1TSdRsFe7ubOdhfs6qrCRRyVG5V4BGGjP3q+aPgn8H9F8RST+JNQ1MNczW95JZ6fql2ZYrl1RRLiNcbjloyqtgE4ANeg/s/3Gg6r47+w+MdLZ7tw0KWsNvtt5UUFbW33AkM212JHAUgfMcVzyqTU/Z05WUTWODqPSLPeIv2wvC99a6ZoXhTwrpz30enWS3nnFmlw8bbF80hC0vCFsknaGznINcX8YbDwJc65cNeWdvoeoXCm8tdPIA2SZZhIwOFiQsOAePk/u5zH450D4d6LHbX2mWz6jqEMkc6RX6KkomH7sOsir8wZmZlGADkAtgjNHxZ4gXxZf6j4q8RWavezISl9Pbp5v2ZTthjZAAqsuHPoNw5I6eZja9vid2vxJrpQjyy0Z4rruh2Nxcasw0W21S8mWO1+z3FyzNM6KN4ZAAiqzmN+gHBJFeUaPJovw9+IemalrEcNtqyXGpNrMtrNnKSIWiSOMII1IKgLsGc5ORgV6LrHiCDwu2ja74o1+Twvp82tGaRLGFX1GZmiZGuASQNpOX7bvk6YzXiK+MNNvNUu4IdCSS7iO7SJr6cSPBLGzM9zKG+SR3HO0kqp6Zroy+Mpxc7+6zz6ceV+8eu+IPHE2peJr/wqNP14WMOnw2djbpAs0lzNIwl8+RUUKWcRqwIAxHuGOufHfjF4N1ptGXxVrV2++3EMcYuJU3+XJlY4woLMznY7nJwipt6kV61pEXxDm8A6TDfap/xVuoNu0+W5uP3ib5I4osIV4mj8xlBJ3IGyvXNZUnhXSfil8RtNt9bSaO68PX8lvrMZiVUWGJXcYQqu2F9hOSowoZmJLCrw9VYapz9Fe/Xbt6lNpKx434L+EvjG6tIfF0nh2RrCy1K0gldrgQFSZtrEZ7qQATkYyO5r1z9oi48EaRdafpuhxzSXWgXAnuTa/u4oUkDs4JQ5EjNtbI3Yz1p+veIvD9xa6f4PvNUuoJLPULm8kt7djGsu2RZobm4DffV/OMQTJCABlxzWB8RNUsby41HwnpelyXeuarJbyHVGhZDIqR7WjjjUbWifDjKjnI5+WirWnjK9OrLbX7nbcrnm6Wu1/mdxZ+LtS1zwi/i+Mz6dothp8lno728jgttTBeQnMr4AKBuF+Q9yK+dPiJ4i0XWp7aHSdQvJ2a0jju7m6maaeWRQVwWbogUAKo4Fe4+JPFWn6H8HdD0/QdYCxXNrcRfYm04GRZlLxmKSUNy4YOx6gbl56CvA/C/gLxD4kt9W1bTrSNV8NrHNem4bHEmREoXHUlW6+ta5Vh6dKU6z91J2X/B+Znd21PYtQ+Kfi7xr8NYLSy+G+gQWclrDp811Bpu4SPGwTzM9FZtgXAPAJ4GRVb4aaJ448Nx+LfD+p3CDUn061t4klvowsFmN8zyDcflCRuxAyDvfGMjjzmx8Yaxd6PF4W/tC4tbC1mmuhHHKyKtxI25ioU4XJGcAYGKlh+JmuaTpuqeHLO8lij1RUE2/bIZT8wJYkbgfmPGfzreeDkozo0Yqzd+vdf1YlpyPTvhXrF14wvLHwpo+nRWq6TfC+guMN5ML/vPNZ3X7m9AMMzdV9OnGfG7TrpvFniGNY7OOJriG8iPmbMQOm6ONVf5ywzlu2c+taNjZ6hpOmmP4eeNNNhstUkjhvLeRv8AS0lbCoxU4GwSErwfuvyDUXj7R9Sk+IDeHdSvm8SaurLaz3VqgnjV12g4B4xv3fLxtB5x0rKlTVHE+1jazW2t+l2y4ycafkS/DXQfiJqXhu20nQ9JtbnStTklm/4mUhtoBND/AKxd5YAKFKl2bAAJ5wTWt8aNc1DWvDeh6f8AY00KO5tWt49ItpFjhtPmSWRn2rkh35weDuX0rf0fQLjRf7Q1bUfFV7e+Jm8+G1t5AIorWCNAJJGhX5YyQQAHHPUjivENBb/hINemi1fXpbTz2z5m5mYPvHQ4PTJPvjjkitkoYip7WP2deplCT3NrxrdfEHwlo8Gg6lFHp8Fuxs7xLdQy3UkZJw7cqxXzCpC8A5rhLe3t2mM1nFMyjHljaCc46Edxn9K9A+N1rHpR07SdOs7hLFzLcQXVyzie9i3YErowAXvjCjOa4rwfqOrafeSQ6TG8888bKsSQiVi3ZtvXI9R09678Mr0faQWrNrKyII9SvNCWXbZwPLMny7vmMJ3dQOh6YwfWtfwDfatYX72Nq73McjRXTWYLATNG2V+7/cJ3cY71gahHqljcGS+hCvfx+epYA7lckhhg9Ov5VtSeOteP2Vo4rJLu0iZGvI4Vjlkyu0Z2gYIUAcDnvkmtqkHKHuq9w5TFkmW41qae6WZjdSNIzSMWbcxyxJPJ5yea73S/C1rqWgQ+KNLW3gg0W32X/wBplCjUJTI2FROMkI0YIGSeuea4q4jaSOPVYg7yE7ZNw4Dkk9f6Vr2viqeLQ5fD8lwkdrPIs8m2NTvbrjOMgZAOBxkA1FZTlFKmFrnLtG0l/cOijbNIWC+gzx9KsIlrBgzcMV3RL/eYHGKeY3muVS1mEhVPlYLj86hvll1G4ikSMhljXey8AH6f1rpTNVHS5bt76aaSfdHHl1ICr8qqcdRVPSZFt0mS8hXLRkIduTnFaoSGztVkeOOKTmQ7256EBcVn2ojmEklxMtuyx+YOuGbPQCoTTuKSZBJIq2waG62ygbWjK8nPB5/KmhhJ5aw253KvzZ7+4o+xGC1e88xXV22bT6etSRqY2XydyXHXjof/AK1aogh2lmj4Zd5y3zfLyau26rHffZ42jAxtZ25yT6e9VrmOXcit95sg7egqNYm8twJBvX+H+uaN0G4faoobqSNc7myhRs9ehFSyvJMw2qERV+UD/GmRxx7TM+0vuzubkmnwRyec21y0Z+ZRt6npmmMmsS0Rkn2RpiIx57ge3vTrSSW4uBAyquyPK7V5I759ao2d1Mtw5kLA8jGOPpWzZQ2cFsNUkvI9xd4/IXIkUYGGPYqc/oaznpqC97Q6LRdJ1TUvC95GsObSaRY45AFwtzjegbJ3cqrjIGBuGawtP1bVPDN7JDEzJcHCywyoV47Aj/Cpo2S3WWCWF1eyyBl/nBIByAOx7n0NZWqatJqF1M2pM0szMCkzfeCYwFz3HT6YrKhzKTLvFxt1R7BpPjDT9cjtreTUBBMuHki3FWVRyy5PBAPPHUV0mm+INBZor681aK3tmZgJVkwGUdenUkjH418472jlVgzEFcbd351at5LaSERzeYSGyvcD2x2r0PatxsRY+nV8U3Gp+H9Z8RRw2SAQXc2lxt8tzLMsyx+bjsiJv4PU1U8E3T+IJJPCMF7JFDp80n2qQfLJLHDIG8zJ5zhVAH+0eua8g0rxhJpdveK7+aEsHt1MmcjLqcj0GTS2Pj+bTbPdpMP2KWS3eN5FPL751Jwcf7C/ka85UXq2Wlc9YvvEWqQ+GYbRmmuTfSI7Rs2fOjQzgEjqA4acE9c47AVzVxq2lnxRcaT541STVNI0+4sbi4LbFvGeJBOWz8h8vyyX6EoAcjirlr4uj8G/DHw74uh865vZb7UIWDJ88Cqi4w542hmJHsSO9ec6tPY2+sabpmk6kdj6GmnySXEfES4WX8vMXHsOaxp07yZrVhazN7R9W0W+1+Sxa1K280l2t0tqrfu7eZG8xW458p1Loy5wuQRwK89163a31Wa3upIz5bGGSe3YOkxQ7fNUjg7sBv8AgVXbu+XR/FBvtBvpUlW5kkRujoRKxBB7HGKh17ZeW8IdQuoQzM0rKAFdWAweOO2fxNdMIckrmNhvhS+tLfVjZXUNvJbXACy+YcBlzggd+c5454/CvRrzUNKuLFfDOh3Wr6hBrXnzoXVvmvGQqCdwwcBCOB0JxXj0e63u4ZJM5jOTtPP4V6T4DvPEHiq6sfD9vrlrBpumXJ1GCzvm/crJuGQWAB+bsCf722sMXRv+8XQcKkqbckdHqPgXwrZ+B7Hxhpq3McmmJBJfNqhaNp5RtEqxgqCQCTGAvIKE5bNco0vhW3QLeeG5PN1G48y3hacxw20DbhgEEngkEE9MVuXWteG/EV1fDxBq+pWMCMbi4jt8vbXKoPkVY2PG5s4YHAz3rjpp7PXvGFvqVpcyW+nRzIifb8SEIuCUfauGyBjGO9clD2k7+0b7+nkU5+6os53VoQqSQuf3sDAFgOvUGsyKMs2G5yetdP4qtYHuNQ1LSlf7JI3CllJj+c/LxyQBj5sCucjeQqFjXn1r2KTvEiS5dBIwVkKheM8Zq1eTK8CW7KQY24P1qBS0kqhuGP6mrrW5kj83bxgI3sRVslFIKVjJ3ZGeV9x0NLJtRVkztZgBj0pd21X3jcWQlcGgr50aKx6qOcUASRs0LSbvLZVAPTkZqtHI1xMEmbjoD6VZj+aJ42fcyj5exIxn8arxSRRtnadx6g0IDS0+12yAidHfGQM/pmtGGZLu8D8q6th4wvTHA57/AFrEjlEahtp+V843Z/KtSxmWaR7iMOV3Kozjn61jPTUk978MfCDwP4h0tLq88Q6np9wqxsY4oN6rld3Urzwwz6YNUPHnglfCei2+laPetqdg14br7SFdWhZl2lZIvujORh+pHB6CuZ8C/FW+0G8TSZoYprbdyfuSKSeDkcZ+vrXuUPibT2mitNQkVfPVlIkdRnj7vbPWuqNW8U+papJnkV7deNrbSJbfWNJtNYge3ZYZbq3aRonY580N1ZgCQCTwMegrzSOzu4pVdmG1GG7sRX0N4muPBdhosdxpuurby6WWS3t7W4VkDZB24OdwHXB4GTXHeLvGvgfXNJZtJ0WCPUYlLTTxRrCQRjOOuQ3HuORSpThTu1GzYvYqC0OTnvYW8I2PmSKNkUiY+jZ6fjXI6tdW5m1NoXUbrpZ1wM5BXn8P6mjWNRN1J9oWGFSq4KIuOPfnmsFfMZjt2gN6nArSdVVDedbmpxp9i1C3mbZI8mYtnjv+FbFnMlssVy0SgnKsDwVb/CsmFHjiDIFwzgM2MlT7elW2MLny5JHaSJ+Qq5ypxnJ9K5Z6nN1F0VftuvGZowBEOcd/evbfhPqbaP448O6oCB9i1WzuCf8AcnRv6V5JoNj9lup3ByGI2H2xkfpXdaDdfZbhLgSLmIhh83ccirvsdVNaH7i/tS6SNc+A/iu0C7v9DL/0/rX4XbZCqRx5LlQq+57frX7z+MGHiz4GXlx1GpaAlzz/ALUSvX4X21jFHrlsWmjMa388bpn50FvIdxdf4QQDj1wacnaJVFXVit4mZTrV1CrZS022cYz2iQR/llTXNatai8s5bdsHcvyn0PUVrtvus3gIIlkJZt38R+bH86JNJvXUt9llwefuGlD3Y6jlrJnD+Gbsq0tlLwVO5f61d8UfvNPDbTlZAajvtC1Sx1xZo7GcLL8/EZPXr2rpLrwP4r1vTWh03w5ql3I2CiwWckhOOwCitUZPTQ47w3Iy3DKvUqMfnXcW/wA6jdjA6e+a2fBX7Mfx41q6hk034R+KpVlUqG/s2RRnPTLAV1urfs7/ABe8O2sM2peEJVMskkPlQ3MEskckeN6SKjko43DKnBHpVcrlsSnY5PR4Y7y+tbeRgvm3Ji3EdA6benfqa7LS/Ctr4f8AEk8karuWaJcAYH3VBIHbJrlbGxv9H8QRWeqWcttcLjMUq7WVl5H6fzr0/Vl265PMOVfypBnoc4/wpRpts0UramP420vwHP4h0+88Raxqmn6lLHELdreEyRPtJwOMkHg5x6V7V+xqPCui/taaBrWm+NbZ7q/vLu3k094njkPn28gwC3B5wa+ffi1uj1XwtcNgL521m6HiRRj8nNdN8DtYXw/+1J4D1aTdhdf0tmGOiuyK36Ma2qaRMkehftI/C+Sz/a68fapb6to0cepXVyHspL0Lc/6TbZ3eWeSCzAjHbJr5e8Xfs+fEbSbV7w2NveRxrubyJwW9+CATX1L/AMFEtFj0X9uzSNW8oINX0/TJg+OpAaE4Pr8tfHmpeOvGml3E9jH4o1WMRM8LL9rcjgkHgk+lW0mk35Dk3c+h/g7NLcfD3R1myksNv5ThuxRiMV6FBDtuLK52qSYp4/wyrYrx/wDZz1abUPBZW4mLyQ3k6MzHk5wwz+dew27Fbe0lz/q7plP0aNuPzFTUhzR0IhNxZblVNyh13fKrYIHykjOOnTmpLWO1+027NCAyyGQYA6jn+n6U5rS3Vv8AWEg/3pe9c/4g1hvDs15qk00i2FjpEl05VTJscEjPHJPzLxWNOlKUzSU1GJqfYNNkBzCyseSQaifRdPfG2RhXmlr8dvCrI3meIbKPH3hNE6EfpXfeFtct/Eli+oWskMsQbCSQtuV/cVlUw1SF5dC4YmnN8vX0HzaHAuWWbHasC8sbO/Y2vzqwOMlfrXSm+064UeTqVrLn+7Mp/ka5+SEf2x5SMC0zY6+v0rBK50bDLbwDayFZGjMhZd20EZx61Ybwnaw4/wCJY7EH1rlvDWsXWteP9NvtL8WX89k9hNCtnHbr9nPlOVlDkjIcPtOTg4Ixwa9Ek1qxjnkt5NQjSSJtrq3GDgEdeO46Ucsr6CUktztFZQuVJqUNtz85O3tTjZzRr+8ikQAcblIGaRo1QZkkAUckscY+te252PBUCtfGSS3kRVJZh19K8rvPBPjnxn8evBPg3w/pdxcXU6yzRpHEWxbllE0pOOQoByegx2rZuPjh4Pm8QWnhfw3HdaxqN7ceSnlJttxjOWaRuFUAZJ9AeKTwv8UPH3wn/a2sDY6h4ebdatZw67rW6GztrS5aOKSbhv3cEb5KggFiMnlq51ieafu7I9GOClQadSyb6df+Afrlr3iTw34R006j4i1i002zjGBJcShAcdgDyx9hzXmv/CaeKPG9xNqXwy8M2+jWU8flzeKNcg8vfGmf9RFnfIAAxGcJ1NeJ6t8XvhH4b1D+39Y8ZQeOPEKPhNW11/K0+1f0tbc/L9CfTg1e8J/FK48beKbzU9Q8THUXtNE1S7jQZEcSi1cfKgG1R8w964nOKly9SuR2uS6j8VPh74N1BtS8PSTeNfE/O7xFrWTFGe/2eLgKM9MY/wB5q4DxP8XNd8UTm+8Q61JdMnKqeI4/ZUGAv5Vwc8fygbTkACqMy/Ke4PrXLXlO44WZvXXjhrhSlpD5mOS2Ko3t/cTeGp7i8m/dyX0XCocAKj9/+Bjj3rJtWtbRvM+ztK69Pb6DvVnVNSutQ8HtJMWSEXUpAWPhQoiXJ56/Ngn3FTTjzOyKlocHrnxE0PRV8tt7zCyvb5Y8YysXGc9ucVH4W1/XNY8QSx3zxrbxWscwgTkq7qrZY/jivPfHkeinVHjuNcjili8OPAsb27klp7xA3IB7H9a9o+EthYvZ/E/VmuoL9bK30jTLX/RWQ2ZknLNIJHAD71ixlckAEHAr0MPRtLmZlUb5WUD/AGh4k8VL4d0LSr7ULvT4G1G6Sztnn+zQBWHmSbQdi57t6GmWOoab56xmTc5j8lN/Hz56DB/U+tfdH7Ffw307wr8IR4vmsR/a/jy4fWL6SRRvaAkpbRH/AGFhCkD1dj3r8/P2hNHX4ZfGbxn4Tsb5beCwvZJLYTSsEit5VWRAceiSAA+wxWWMxVSDvHY1w+Co4i9Kd797nWeKVik8bePptzHy7SW0UMxAJfyYTxj5jgkYHv0xXPnwBoh1CaSeGJrMxJHDbquPKZerbgcnPHB4GPeuJ0v9oDwl9h1hfEmoagmr37WyzA2MgDGO4R5c4HHEYIHHvW/ofxv+HfibWI9F0vV5UvpW/cxXNu0Pmn+6pPVsZ44rpoyi1uee8PVp6W2NJPhr4Ts7+fWLWznWSTY0kZnZoxtzllU52tgnJHUDFN8VeDrddHuZNEVxfMAsSyMXRiTypUdc/wD1660+W0R3AbSpzz2I5qpqki/2LHdeZuyqSDapy2cenTJP9Kzxrth6j8mF3JLyO3/Y7+Hs/jnTdY1uC8Gtap4fu7Zrfyo40t5Zj8rea7A+dGjKvyqB8rHndXuf7T/gvT/iBaaPp/xCmaLRdFurzUNZ1DRSmI44bZjHGiyOSkjBmUZBHy8V81fDjWrr4R+EZbLwbcW/hMaxF5Nw90xt7y9h3Eh8HL9S+AoGc8EduH8VftKfDfwFeXeganquu6tfvEkjmHTRszJkkCWWboVbn5O3U18dhq1aF3h6Tv8Ad5HtYarUpfvIrbqe+eFvh78LrbT9TuvhvpOj6JfwSQDTY/EPl3Ml7IAwkka6lBWM44UKEUnI44NbXxO+JEus/C0/DzxkmqX8+m6tDOskjczxxsR5TCMfvAQTs2lQPlbJC8/Nfwl+MGj/ABe1vWbTTbXV0i0q1F9JJerFGpjeTy440VCcEFgASccEnJNdj408YR2Oj6VJ4j8cabKSskX2cs0lxFIBtRSDkIADjAHOV6VxYh4+F3O6k99d0/L/ACOSpzy1aseU+Ho9Zt/E1/fW/h230PULi7uNMgur6+URMqspQojFftEkaDKsD1zzjIPMaBFban8UNauLTSrN3061kvfJ2hxq2oyHbG0zZIyAxZkHTkY5zXplrpNjqPibTpJtPiuLnTLGSS1cMssisGDKwiYkBmVz8+MqVbLDAFeR+LY/E3xA+MuneD9Pvxo9tNpzS3JmjDRQK6DMjAbRuEfljI27mIGTzWuFftn72lo6nJqtD0nwL4k8MWmpafpOg6pNfTa5axXM8Qj8tJJgS0ju2ASVZ9oUgAqqkj+Ku00vUNStdQ1DXNU8qz0q11MLF9iImkudzHKRsx2ZJ2qPk2jqSRurH0n4e2nh2OPwH4T0kyrpkUdpb3a5iZzOAHlU7jtZlPPOSTjnrXRahCmj6TE3g/SUElhNFd29tMrFbaZ3BbdkNvIQqxQ9Szc4JFcVWpGc/dRs2oyRzfi5fFlvq2oeJrOS3h1IaO0a2dq8cSW97sBR1bsVUs3HUsoHG0j5r1bS/iRqPgGbU/FjTXFtaeZFbEW43h5JCXknlHBZySAWLMSvAA5P0v4g03Vre4kn0G6s71r9/stxFdI5YmJco25TlRtPz5PR1GfTwf4mWlnoPw/Xw9b+Jby4vbO+kivLGS5PlLv3ssqQZIRT93kk9CMA89eRTjGvGnu2+2245NK52H7NPg3xwvwz/wCEi0mzDWc+sSwxs0jJ56I8cUqQgYydzBSzHaM9RyD9GeH/AIH+OJLUWqt4e8IyT202nxrqGq2aKL0A/aNqAs7PG5ZgMHGM4GRWn/wT98Ntdfs36LY3Og2d9LqPiK48v7TMyGa0M225iU5xsz5TYAwWLZ5r6a1rQ9Csm1/W9L0fw/Dqtss0saSxCS5lPl+Tb3BLcK5Ecm6TBPIHWvoZ5VTxGIqSq6nr/wBl041FGrJ3aT0t1St+eumjR8h+NPgrH4T8QS2Ut1FdxeFNP0/T5IbRZJYJJwizRmNAN0u4KxOQwCqe9eVeJP2Svjd420XxH4vuvh3HrmqSo0NnpmkXge4tVZgRdPuJaZTjgIOcnkAAV+jWueFfB/hnxxoVhqGo2v8AbpgOoQmQRiaaYbVYREglvkjnX1xL7ZHmmkfDrQZPCfgj4k+EIRYfE3xb4gS7XU7FirpbF286GRFIUwLCoUqRwcelKhlNKhUc+/4I6MPklPExclJqPuqLa0bfM7vVWiuWV3rbtufjJ408H+LPB/iC4sfGXhzUNJvRJ++t7+0eB89wVYD07V7h8NfE3i3xhY2nhm30XSNTe6uIba4vXiMk2lWUapGMByIl3bhhycggnoMV+j+g/s2/E74tfb/G3iT4xHUre71+4XT7HW7L7dZyaYkrKF8lyCkmAcFW4xWDoH7Nd03xik0uGbwfb+CLpru1Kw6IsUk7WkKedMCCNwEshj5YjhsV3YrDRxFNRjv0uYSylxnOkqkW4Jt77parVb/5M+TIfHnh3w/ayW/gnR5NW125mk+zySSSfbBJECsjk9HCpGpXknYUyxINbPheS+8O3ln4i8Walv17VZJr23tYIhKtrtBZ3nTADtsRmG3jcVJyWxX2Ra+Evhz4N/Zj8YfEp7HRr+4uTfRaPql5pEAa1R5Ta27IqgYwTuyDk9zxXx7pGl3mqeJriC5vCuj2N2LW4eY4inWNwXYRg/OxEe3ZkgYGcgV87mFKOXfvebWW5w1KFXC4iWH+1F2fy3O6utX1TxBqFhdaho6Q3FxcRQG4mjWN2KLmOSYBS/8ACQd2ACACeRXNx6gzXz6bBP8A8S66KiF4gyxWrFiyoXJ3Ss7uE24z+OcQeMPG/h3S7Zdt1O1xcsMW7PsRbaS4Vo1lmXAG0IMv2G0cnrR0+2j1CG51zQfCcOpS6yn2iztJtQ8u18iFZPnkckjOSxKpg7wpJODXy1LnrNyq3t/X6HFOa57y1PPda1jwj8QrrxNY+NZoIx4YvLaCMRII9lsYdrESTOHUJIRvOCWC4UgYrMvm0fRfFGrrb+FNIvbaDSriaW+UM8U9syjZ5RPVVKqWIyMZArE0eHV9U1TVvEVroMB1PSZpZdVu7k+ZJd3rrJsjgXHl+XiJQVPTJ55rpvGUesQ6LoVjrV1BrmrW9lHqerTQ28qXSrHGjS2wDNsMaLIse1R85HYV76oRpWhTemml7dN/67kN3d+pD4N12PxQs3xA8VeF79vE1rdWotobstFY21uZHUNbRkjewaNxyDtYtnPbF8FXkOv/AB/1G6sWl1eK30q9t9WEN2Ylm3KyyDLKrSxqrBSGTJZR2xnV1rWPEyWemT6L4bNi+u3bMqy3JYSSTRsIxtTosMLqScAB2Yck88LoniC+0ae88dSeCr6O88Reb4SSTT2MJMwt445l2upBZ15Y/K2Xz2NdNOgpudla6stb2v8AoaRmuY5fxh4o+1fEibxB4osmtLC6uma8sbVNrxIGKG3HORlQBycc5r0fxFY61D/whvhCe4sH1O8ggjayZ2luZZTHjBO3CQpH8oA4Ys3Xk1xGqfCXxhqUVzr3jJrHTrazU2kuPLjMbRztG0ZRSDI+/cCVJI2kk8V2154b8G6dpOq6nJ4blsdXsvPt7bXre4lmj3RQqnDAhBneCuBubrnHJ6sROlThGPbTQxb6Lc0/G2pfCGx8J3mn65YPc69Fc28EFho8QRLdFBPzXBIRA6uxYKhYlVBxtqj4kk8J6T4JutTv5LTUta1e8b+0b7UrgqzwrtFv9liQh2TymZzvXaSBgseK8t1TQ10XTdO1Kz1VLm4KkXCwW7+XMWwQC0gAZ8NnGOPwqz4zX4gaTHLqV54Ykt9PhSOyW6u7PdGGhHlrIoZQNyrJtDEEHdnk4woYeL5Yc+l++47yrNyk7sydSXR4V1R/CzPc6MXTyZWjPm/MpIV8jhhzkdflNcPIrMzyNM2VP3nPPtXtfw+8A3WrfBHxHfQTXBR72OW1B2r50kcbbvLJwW5IVsZwA34eU3qqLWX7RFarNYyCPyl583HByR2r0MNVjzzgndp2/ALcuhNfyMtool80SMqnKjlfoRXrvhX4wacukx2sei3ekamLGGxs3s5o98s8cYjSVyyELyC5A+8xJYk15ruhs9PjkureKR7iJVVlb7mec89sHH4VjWktwb8ztHG7owZcZwQOKU6UcRBxYnG+jPSPijqNxH4tub3VLXUBpGpTm5ntIb9nEzOqtsZ2XDMQsWWwcAfhXnFvMr6oYYUW2hu7gFIyd4jQtkDJxuwOPfFb8Pi+3ubqwt9Ys4poorpHm8yPeTGOCN/3uFLYAPYVO154F8XfER0g0X7Fobllhh+0i38xgj7WZzkRBmCnA+nU5p0VKnDllHpuCWppfFRpDIbjVPEAu7p7qSFdNkUm4giX7rsckKDxheOO1c54ObUrfxGZNFtUBa3cSStGXEUZAVmI/h+9tz/t9au+O4dGuNaS2hkvzqIRTeXFxceekWNuxI2B3OAvXd0OB2yebs9QuNLvzNBOCy7o9ykgdCOvcHuKqhTtR5UWveWpZ8UafYw3SfYNRS6eJlUyx8diMAZIHT1rBZWmn+0KxKsASd2ckU+4Vo4yyZAJHA4AP/1qntY7TyxFiQOfu9wT3z7V1wXJGzdy1ojT0G4gkSSCaFtqgukinkMBnkn/AD1rPUxxubO4tZGcv9+PuPbPXigrJvdYbfzExl9o7k0jXl0gQfaMgNwO4x/9apUbO4LUrtZyBVuhIY1EhVQThsA96149c3Qw/aF80wyEomNoQHrg++BUOpMzRx3UELBRlG3dAfXjpVW3s5rrKxRmQIN7KPT2p6Tj7xopNaIlW6a5N3e3SksxOxX52qemPpTLwQjyLi1ww37mU9mAFXYfs/2N7dsEurZJ7Dt+tZMNwI7UheZWYY6jB/zxRHXYrktuMaQysW2jaxLEDjFaui+HtS8SXEGl6daXFzcSSCOExj7zMcBR65OAB15q74V8IX2r3UP7iT984jWML8zsSAFA9ScY+tfpN+zX+zDH8DdIuPi98WIre1v7SzMlnYNsP9n5zl3OCPOIwBj7uT36ejRwntNZaI9vK8jnjZKVTSP4s+OJ/wBjb4rabo1rHGsT+Ip5Z5P7B3YlS1iX53dz8qSeZ8oUnnsecV4lrWl6p4f1KfTdU025sL2zPlTwXEJjkjbHRlPSv060fxJr3iy6vvHF7qktiNZk3Wcf9jST7bVflj3SEDO7lsDgAisL4q/B/wAJfGLSTZeLtWtY9QjjC2mrQ6RJFdW/oCd2HT1Rsj0waU8PH7J9lj+BqNWhzYJ2mls9U/8AI/MpfL2rI0h+de1S/KrYYnJX5SGxnHP8q7b4t/B3xJ8Ide/s3WI4byzlJNnqVruNvcL2wSAUf1RuR7jmuHm3bUk8shlzhRXNKLjoz81xWErYOq6NePLJdGOYq2Cqrhhng9as2d9JZyGTyYpY3QxvHIMhkPX6exHSoI40VVmudsfnDhV7/wCFJtmYyRKq7VcZf0FS7NWOXYsafKyzPbszfvhsLdeccD1/Crd9pslqtvc3KjbLGfmAJ2MpwUY9M9/xrrPhD8K5fiZ4gvNPF2YobW2a8mMTL5qovV0DEBgpwW5+Uc10fiXRNQl0SXR9a0nyNQuGtZI7v7J5SRkQ8ptUn5n+UFiRyCSK4K2KhTqqmt+ppCDnseQ3UiySJJtUKijjPUZqLzvvSRsc7sipLi3uLC6lstQtZIpkYhkcYI9uaghH7w/L8uMjtx6V3xtbQlqxYjkuFSSQyMUmVkbP8QyCf5Clt2uLiMR2xJ8tSpQ9Auc/zqsy3DR/MflLEnnqKajXVqzxqrRiQYb3FG4JnpupN5v7POkNIx8y38VajbOOMFHt4HAx1+9k159NdTlo5Z53kmRVCv1OAAB+QAFd/e24h/Zz0q6kYJJd+LL4RZ/jVLeAN+p/SvM908jEM3KgL06Cogt/U2nLb0LovLiSZrmR4/ndm+dRyzck+3NMuPMmYhZtw6byTk/SooYfMcwlgWUg5bt/kVJHJ+9Ecg+XO1cdqpoweupG0rTMzTYy2Bu9MV7V8AIo9Ls9e8SXskkdgtt9juWjPzAOyqrFCCJArurY6/KcEE14rMDLvBwQMKMdz/WvSvCfjWZdJ0bw7p8kC2mnvPcym+VTG904+RyBywjwSAxIz2xXJj4znR5YdfyFK1tT0htN8A6L4mPhfXtVksvDkWlyNLdSMYjIEjclIEZC7yM5G0EhCTgYGDXknimLwzYx6fceDJLt0lZW/wBMULcKVwQw2nGCSw9Rt64NdJ8QBP4i1K0aPUo5rn7TBBJLOhiEeUQBnVicKDxnoQc98Vz3xIjtbfWdPtbO4tY5Usla4gteUhut7+YNoJC5OMAfw4PeuHB03Fxbbu9+2goTk4pSOQ1GWZpJ9ytHyWGRg4PUfQ1RjYrHvUgbuAPQ10Oq2sN9ZwXdvcxvOkX+kW5IRwAeGH98dOnPt3rFWHbGI5PlwSW9v84r2abvE0kmivHlrgM3BJrRklbzBGrcScYx+tUZNysNp5qabc00LSKSqjGM02rgmJMqqxWLOByOefenESNCsm4KT/CR/KnP5bq7BuckH1GaeBL5SMrgMvpzSbIK7yD5mkz5iMNrDHIqNVjaQ+cgYDpg4NWxCskb+YwRkXPTJbjPSqtwvzhl4EgGQetNMZM1qyuJlQrG43Ln+VXLGd4me3tVCeZtJUjJUjvn0qtBKrYG6SMj7wTJB/CpbcStMZbcAHPFRLXRkkmpXE0k6XDRiKTZscKOGYHrikl1TULiFYbq6mlRcY8xidvpRrAZriOZSfnXP3fu+1VPMVlZYwPk4ZfWrh8JWxb23DMBGzFRxz2p07THc6LlWxuYdz7GqivO8ibGOevWrLRsmVVsb2X24NEhB++K/NHnJxz96qrt5cxUxng/MOmavsrqpkC8hSuQv3veqkczTw+XJENwHLd+PakmA6HcYpZJFwCflweM1PbzSbhG0YyR0P8AH7e31qtHJIqiMBGDnP0IrQ2r5yeZIoZ1C4A688H60pMC/Y6XZ6tia5WQMPlysmDjsD9K6PSfDekpcLiOUk+slZGmQhh5j8SBsnbwM/T1rpNNIWeNsgHv9acXodNNaH7q/CS+XxL+y74Vul2n7V4Lto+v8QtAv8xX4satDoOh/FrxFYa/aXn9m/2ldrMdP8v7QFcuPk8z5M8k5PrX7EfsV3ia5+yj4GUyK5TTZ7FsdvLnljx+QFfkl8ctDa1+MvjO3VWzBeiRVC/3gv6ncauWsHc1w91JpH0X+xv8P/2dfHC+KbVvhr4q8R6pbPa/2XZ3dzE0kzuJMhTEEihQbSXklJAGMHPDfU+n/sh+D55jqt1N4J8OKpx9h0rR49RdAeAHubosXbgg7YkHB4r59/4JXie0+JXjTQ9QglgOo+G4rhVcbS6JcBdw/wC/nWv0IT4ZeF/JihnW+uPJChWlvJC5242EsCCSuOCecFh0JyQXIrHPUk5yuedeG/gNZ6Tbi58K694Smjjyoe68G2rgkdfmjaM4+laGoXXjjwvMtrBqngGLESSCS38NzKcN8qkAXYGWPC88ngc0nxsjbwV4UsLXQPFCeHNP1rVV0/VGaMTSSwTqRLJGz52MiK7naOgPQ1l/CoaFp/xIvvAtn40HiDQ9N0iGPRYGhgmiQKwaSPzkT/llmMIu7G1yAMx1ulePN09DPYs3VnrXiS8/snxd8Q9ZvbUrum0/Rli0i3dcEFWljZ7hlYhlwJVGQQa8r/aa0PQLHwf4GuvC+g22kafA95aLaQQeUsZ+UnggEklSSxGWPOTnJ+vkhijXbHEijOcKuK8D/bLtfM+Huk3u0H7NqyqSeweNx/PFOjL94gep+eniL4eeEdc16TUtUkktr6OYjzI7jBcDlRt6fdJ5x0FVNQ8KwXVyk9kLiRBGFyyqoKLwCM9T1/xrt9XvtN0+WSG9glJumB8xYsiNdoBJPX2/E1RmuNMuEKR3BMbnai7ivy9eD7Up1FGbV9SlGTimeVePPBdn4ns7NZNb+wS6fK8q+bDyc7T3Ixyo6E1kafptjY+MtN8TWHijTBcafNBMYZc7v3MgY4IPJwB+teuNHp/mNDcLG6S5U+Yc7gR3B7YrifEPwr8L3TNe6fAbSbOd1qBtJJ5O0j0/maUa3MtS+RJnsf8AwVksVtvi98MPG9sg8u60sJ5mP+edyGH6SV+evxGh+y+MNYtugi1C4XHt5hI/Q1+jH/BTyFda+APwM8eR5kcwLDJJ3zJawvz+KNX54fFTnxpqMnBFx5Nz/wB/IUbP610J/ukyJLVHpv7L2pH7LrWn7j+7uIpgvoGUg/yFfQsO2SzkjZgAl1DKxJ4Chuf0Jr5T/Zv1Q2vi6/sCwC3dqGHPdDmvpz7d9lt7iQYJ8kyc9MqCefarguaBg3aR0zNo+flFv6jCg/TtXIfFRbX/AIQ3XbqGRQU0/wAhtvGB5iMc/ghrrodSimhRkjnxIqsD5TAc45zXNfEqdrnw3dQiKTbNui2yKVyfLkYf0rShC9RCrT5YM+KdYVJLqZoWUo0rYx0NfUf7NV4LnwaIS+fLfv26H+tfLepXsN8PtNvHsV2GV/unaM4NfQn7K9/nT76zYn5SSB9M/wCAqIJT50KpLl5JeZ4341sxY+INZtlj8pob+ePC8f8ALRv6V6F8DNUkWwtQ07HyL75izZxyK5340WX2L4heI4VGEe4Fwo6ffUN/7Mam+C822K/gZuIrhJQPYj/6wrzKcf3jiz3sRK9NS8j6xsPD+jaQpGl6XbWpkeSUmGIKS0jbnJI5OT1/CvHfjdf6voN5/aGj3k8BaRTJ5cavu/d8BgR0yh5Fe1wzCSzgkDZ3Rr9eleT/AB2tZJtOaeONnMcaTSAf3Fchj74D5/CvRw8OWp8jxq8rw17o9N1z4jfFbw3rmpaPD8QNakk068ntWkj1e4ZHaORkLLuOcEgkZ9qyNQ+LHxO1PT59O1Hxtrk9tdxyQ3ETagSssbjDIcqcggkfjXmP7QHxGs9S8ZeJ4fCFxM1tc6lNJbTQ3DCMKXzlWByQeeR60/4T3WrX7q2tTT3c7WV5dBp5mJVEt3VPl7AMQRnuRXRSnh5YOOKqRcebZPfa5w4WnjMRzcy5bO2qWvmvI3vGHjbxFb+D9Ktna2ay02+mitbN4YlgSL7NtZdqIpOQ45yT+dcZG3ijx18VJNBw1rf33h+yt7iWJ2j8iPz0lYEnceVUKAuOuOOtYPi7xB4m17xJaeB/Br6t9ttvnm85lKKgADOoOQAcZLd+PpUXhq91jSfjtYWcd5IdSkurCwkllUyyEF0Em3aAqjB78AV5E69OVV8unke2sHUppKck5HsXx0vl1LRpbG00QLHPqwgSd7oZZ45CCFi25wcjkt+dfTvwjbfa+Mb1Y2tTZeFbxdigDLSSRx4J5JGH7Edq+I5vE2seKZDdapq1y1uniaeO3ndkEMKC8iQdRksN/BPGM19f/BXxFpd/pPxJhsfFCaxIdLtod0UPyx7tRRSpcfLkGNhjrwfStou6OecHFWZFcRLyO56VmzJ1woGK3Z7dlUt61mXkYVWZVwBya5pq5nDUyJV4PyqT/vYYfT1rt7WTWv8AhQvi2z0u0i8m5e0We8m3F4ybtgsYCkYQmM7s5BIXjuPNNS8u6kh8qWC5lQMsauxicOT1A4Vhj1zVjxVqGsW/ge08PzT3UGmTWqXt3Y+YR5jh5djO45yok+VR0BJ4OKzozjFtndCHKua+p5dr3hDRdD8QWU+uappkNs8OlWpj1CVYjK6uJJeWODgYJwcdMnNd74D1HSdD+D/xYuLfxPpBm8SeKbOLTLKO/hknmijt59rooYttDMB061zPx3+FOm638P8AWdesYbFdWW8s7WOGa42SSRKoCyRqxxsBEgZzxkjPPNeJ/An4T+JIPjP4Th1jwxe2i/2tbD99Fs3gzICF3YEmQ3AXOcit6WL5m1JG06Ma1j9n9f8AH8PwbsfAvgW1s4Wijs7a3ut+f3VtGqQjbg/ezk89kPrXyf8AtGeH7XS/27tP1/WG02PTdV0mFlW+lXFzMLaSIJHEcmU5ReApGSMmmftMftDtqfxguLHw14F8SajLYrFpiwXFubVzIhcuVRgZGG48ELg9RxXSfEr9n39oDWv2gtI+Nni/VfDkvhezt7aPy4l3TRDlUhCSLuRg0hYsrYxu7muLEvmo1JS2Sf5FYSEqVem9m2fAPxg0/UvHX7Qvjex8MaDd6hcS6xciOCxtzK21SFLYQYC/LnPQZrV+HH7PuvWnjTRfEni7UNH8OadZXXmfZ7m5Wa6ndOcCKEsVxkH5yvTvWn8O9YmtviR8S1aPyrTWL5ra6eK4KMo+1SOPn6YJXkdwOK9QtbC1a1e80/a1wQ5gijtWlZ+QciU8JnPX1HAxWFGXs6cWnbRHdUo+0buro7Xw/BpeqTPD4f0TVPELj5INzLbRSnqS2CWVAAx+8Ccdq3brwn40t/BsutWr2vh7SZS8aW9qf30mMrsL8NtCjoW+grmNB03xPdW9hIzW2mvaW8lxG11bCWZ0JGXXedpwFIU4OOTWn8Q7W61trTxBBqV/Bpe6KS2hkkEQRxGN/wArHLZbJJx3HNY1cVKrU5ef+vyNKODp0Ic0YanHX/gHV/FTTavcW8E8drGIIpricQKTwAqrnJ5Iznmvjj4+afNZ/FrXdLZo3ksTDb7ofuErEnA46DPpX3To+l+KNbsUt9Lhs4rWyuR/pUs48qJmVmO4ry3Uk4B/lXn/AIL/AGbfA/xM8TeKfiN478QXTk6/dWa6fZkRoUhVFJZyN3zHptxge9cuIzOlgFKtiJWS07+hu8FPFqNKktdzgv2LvAM2vWPxOvotWnW/0vQNPaGzgjaaW8R5C7QpGoyzZVAD/Dkk16n428AC38MeHf7Psob/AFXUXSfz9HIcRkZAXaW3fwuzvj/WBQBjGPqz4U/Cv4D/AA30W8m8B6BEusv4RfW9V2Xssayxq7hA2wgyDzIpQAxOSh4rgP2o5Yo77wVYx6DBZR2/huO4220KRwlpljLAAHJ2lTkn1FdOMwarU/rMn0VjwoUfa4j2Pnb7jgLf4Na3b+KoPFNhp8ekW405LJBdSKHm8yRXlMg5YBggxxnryQcVJofwB0HwzdPfWvijUftN2TJcNYJGineAG+ZlPJxn7vGBjrXp+ksLjwzp/mRIp+yQhlVfvNsHzH1OMDPtUkduBGqL8qs2STxX47mPEGMjVdKi+VbbX/M/TMs4Py+lD2laPM/Nnz7+0Botno9/4ag0vUNUi36dKJ2a/m3SBHEaZwwHCggAAYGa8ku9V1yW+dp9Yv3SCFYVJupH37QSCxJ5IBx+Ar2H9ouNW8TaCjMWKaS7AezXD/4V4Nq2rWNk0wuHIJY71XqRj/62K/RuGFKthoTqu7cT5XO6VHDVJxpRSSdi34Z8X6xeeONI0eXTp7yO43aewEmCY3UiVlY8IQi8tgjaprD/AGiL7w/p90uj+E7aYQwLPNLNx5KSyOo8iMgASFAmWcZUl8A8GpPBHjbwfoVvL4s1CEz6zb6ktnZ2flLPMySKQpt4j6b3EjHk5ULjk1x3xLuNUn+3WOvaLp3h1reeUw2UduUkDfId8v8AFh1ChRkgENjGc19BQoQp42MoRtofG1ZSnLU/WX/gnvpYP7K/ww1KTwrDJOIdRKXvBKW7XU5GOONzHkDnj34+jL+yuLaaOax8D6dPJfmKO9ZtmVjDfxHHzhcsce496/KH9n34geLtK+C3hzSfCeravC9tZStK0l9MkESrM75Xb8kaBWZgp+ZiJCBxXdWfxEvrU6db3nxE124g1JQZLt7658kRuwy6AHceuMKuTk5GKjE5/Ro1pRlTd729RyrSbersj9D9VvrG41q31jUfh7Hqd/o8wjjv0hBlttyEkoWXONrngN/ER1Nc78PbT4S6F4mll8D+EbqG91S7ltWlbeY41+dmaPcSFQ7DwuDxjHFfCS/tafFTwKqX8njnXbC0v45pNP06RFu5ZFjwyyMJQxUMmD0x2GSTj2H9iL9rf40/tHfFfXPCfiptHTRfD9ibtrldM8ued/MREVeRtDBnYkjP3eBXdhcxoYxtRi00b0sbXhTlShUkotWau7Nb2a231PovS/Cvg3TYyND+I9zavKlz/YaXfEFi8gw08UbbQ/DfK+dpJ4JJrG/4UPHHr0OufDXxbayWUfh/UNLmguLx5g1xcRlElUrkIN3zMB1I4ryj4ufH2+8K+OtX8KvaeFzaWVzLY26mzyY4s52ybW4AJzlsBWORg1iaV+1X4k8OajK1neeHI5tQA3/6N8g+d3GSrYXLSvjceeAOlen9WU43O2nxDjaMpP2vxKzvazW2vfd/Nt7lb9qiDxp8Pv2e7L4N+JLfw01vasl9pzW8zrm1syGdplYjexkkQKoxubGa+H/h3rtx8SvjFZaLrEF9p2m6PbXl5Datu80MyneryLwqjeGJYEqiMuelfWfxS+Jdr8WvEMGoeNdQsHvLSx+yxi3lMUKRrIZT3Khy2M8glVHGBXlUcnwx0Wa/j0Xw22L+RpLkWrGNJN6bH7q5VlAz/CTz3rycXlVau3y2ellc8/H5lLHYieIlZSm7u2iv1dvxOF1zwlqVvfXd5r95fSaXZ2M0P2CbaouJFZdkxKgBUX5c+ZlgVXAJIpngbw54k1TWtN0O/wDGdxcr4bs5rS4FpdtFbSLdq8yMoVf3efNO4k7jg5KgAV6haat4J1aMyPHDGYnafbcy7RnGD6owGASATyFzVCZPBtj4euJNN+zwwyqvmlZQssm1ixQqFDBnYtuAAY7sdK8SOSY+jTlFpPtr/wAA4YuLvKUtTxTwX4m1rR9N1fwvY6bpaalJqD6hZWN6kj3MjCMLuVwrB1b946h8KOc9cVq6vfx/D3wfqMdlqQ1DXbyd1u284bpLl442lkjRhnyA2FA78kcLV3QYf+ETupF0lg2oatcGTT7qJjcokpZTLCkbfMyhCmDjJ5B44rm/G3hDWvHF9L4ovtWtdP0PTrRLeC5uwsFzesozGg8pSGCSccDhVcgYFcVSEFV5aisuvm0dUabVPTr/AFoctpPxu0e11m91TUbW5srqx06K20fEYlZLjlZWYsQBz8+e2W77cYej+Mb7xl4k0jQjGBK2oW9xbixTZtIJ8xjsIZ96cuc7jtJzmmXXw1sfEy2uoafM1lc6xdN5Nq8W5FgjjLXDjacrsODhh8ytkH5TXSalpfgb4b3V5qFjYyXN9paGzst8rfvXaL5rmUoNgA348tGGQpJbPX0lDDU/epr3mjCUORF345eNNBtZDoceivFJHeWGrWjyWKxiWJA/nJ8xLjMiqAx+/lyetZF/qnizx/4Ym1jxdqyQ6aul7rOwtnBeYu3lRYi3AYXyDlsAKFU46Cuf03wH4k8f63ZreaZLBp+YIzNcXPlDBIRQzyHKjgnPZea9B0vQfGHxC8WT6a2h2+h+GdPWGzkjUBYoIw27cOAZt5LP0OQFzwKxlGnhaMY6XWrf+XmxpXh7r1O4bS4de8P289jZi20KfT4USTzS9xdq0kSRJAiZUufKmRgdqhSxY1j/ABg8Va5qWoN4c0XS4ruG5srexmsLhVkS23SgIiwucCUqgJAAI+UmvQvFGvR+GNO86Jra20mx+zJZTNJue9hEB8uKBMgJyPMIbgEgEbflr578b+JL6XxBOfCtodJ0Wa5DQTqFV5C/zPM+wkBiSy8HsM89OHCr27jVktuj/rclRlzckNUd/wCTo/iD4U2GqalfPpmltcCO+a1hVYrOcK4WN0A2INyRng5PmDHGTXzb4h0eK2VvJXmcrJEqrgmI8jI/hJHOO3Oa93ddJ0/wLf6PqWuXk7a/5E3kTMZI1uIcqGK9fuBPbAHPAFcXN4MlVrmzuJ7eeVh50NxCGMZUqDjLD5sEEbq7sFVjQlJ30bO6phJxkoRi7nn2qK11a2mnRWY/0ZcKob5+f5iolt47WNX8wZZCfKfgrj1/WtSGxt76/wDs8bE6hBkB42GBjuB3681dt/BNxNHcak2bkQgNJI65VTnGSO/tXq+1jD3TCVGp8VjkQv2y+itVtwiOw3AfMcY7mtbw/plnD4iik1C1cafBcLHcTk/LCpI+Y8Ek4wRXWaX4RtVs7m7VSt3btt2f7OMk+4/+vT7TwPc+JNJgvtHV2F1NKl0wfCOU+42Onqv5VU6zemyLhh5voYet6bHqccutf2hLc38l7LbPJgbZjncuBnfnG45PsM8Vx/kyrL5LqyNv+U9s/wCTXrvhLwNqE7XFzf20YiezeGOTLRusgIwR74z+tZ0fhW+1jdbtYnbZoyxtG335lOe44OAR+AqaWIVNW3NI4STjdI4W40uaHTp2fbwqv09QD+lZyxqiifcdwO3bzXqreEtU1PT571bZJRcSLCq55GVzyP4SDjJ9KxvEXgmbw/eLot9CWDmJ0mX7jAgHg9wc/wCNXHE9x1MNKPTQ5PQLvQLWW5j16zv5/MXNubWULiTII3A/eHJ4qpqkbzTw3jWbReZuG8qBvOfQdDit/wDsFtO1MyzK6tARLGpTG4DkdaueOvEFz4u123vV01bVPvMgQDLt1OR16cflVe1/eLlWj89vkZqjNdDmZLi7+0mx/dFWA++vTipI9Pghha6a6XzUOPJUnJJ549qk1C3Dah5aj5QmdzfxE9PpWdeeRGRFDIZpicMY2+UEehrVe8vdNadP+boS63cWqxwQ2aMm+L5tx5IJ6HHpWp4P8JzapcRySQySFmCxxqpJZieAAOST6Va8GfD3xZ8SvEun+HPDekTX1/fMlvHCg++394+gHUk9ACTX6g/sk/seJ8EdPk13x1cadqeuXao0caQCb+zsHLCORgQSSByB24Nejg6Nmro93K8t9tUVasvdRV/ZH/ZEsfA1nB49+JGhJc67Kqy6bZStxpylTkyIeDNz7he3Nb37RXiq61zxLp/wn8G6PZ3s7SC81drp2NvDCp/5aleSC2AEHUhvSvZ/iN450zwH4O1DxJcahMht4j5TT7o03kcZO0ZA6/hXzJ4XtPC8c1/reueKLjUNZ1q4FzdTb54EGBhI0UY+VQep5JJPevTqS5Vyn6Nk+ElVl7Z6RWiOssYvGVvGiyLobFR0ilmQcemVOOKvtdeK4o1KaZYTZ7LqDL/OOstbvwe6/L4qliIPQarIuP8AvpqeJvC7YaPx/OAOgGsRkf8Aj2a5j6uPu7EHiWPVvFWk3Ph3xP8AC+w1rTrobZbW41SF429DhlBU+jDBHY18RfHX9kDxh4ZmuPFnw68F6kNBVfMudPa+ivZ7XqSU8v53iHuCw756191E6WW3Q+O51z0/063br9VNPkt7iRVNv4/u0b+FlFo//tOplFT3PIzfJcLnFPkrrXo1uj8eljj3YmtyFXIYZI+f+lKkj+YE27T/ALXT/OK/Qz42/sf6L8UHn8UaH4ngsvEzDcWktIYba9P/AE1EKjDn/npgn1B618L+Pvhv4v8Ahvr7eG/GWiXOm3a5ZBIMpMvTfG4+WRfcH8q5J0nD0Px7OuHcVk8ryXNDpJbfPsa/wruNUfxTBp2iyiC9ZZJo28wRq4jXeytuGOik4bjjnNel+JLfUbWx/wCE5nmuNVj8ie61OSX5ZnWUmEhD92SIkcY9evOB5d8K/FGk+D/GVtceItK+0WtzthmkMYcwRsRlwh4Y8YwfevX30DWte8J+KfGGtzaQNR1IIbWymk8khUOVXyTwueR/dBHsa+bzH93XU3otNe+ux4VKM5VEonzlfXLSTQxvcNPGuQrEEbV/p9PamK0K+bhy+F49SfUe1XNYtfssiL9mhi3gcRyh8MDgk4J79qrRxwiN5JV3OoIBXjFe7Fpx0FO8W4sZJFIiKzY2bSo9R3qtJctNMivIxC/KM+lWWC+XLGYy0u0MGzjiqkcal1aRuMFmI5IwM1USUj134mRx6D8Ifhb4Xmjy11YXuvzKeMNdXDCM/wDfEaYry+zj+0uzQ8OmM57+1emftATQtr+haNbNuj0vw1pFjHnjaRaoxGPqxrzS1jaOZm3L5jqVCLzkjvWcX7ty6ujsQzRrb3nnNGxDj7h9KbG0coYLydxfp0+lOkkmmkRrhhIR19qRldZHXcSDkbhxxWiIJVj2ozM2AWzke9a2hyQx3YktMJdSDDRyR7l/2ipHfGT/ACrHjtZtscav85UttY44HOKu2txNbzR3VvFskhYEENg59R/Ks6i5lYXQ6QafZx209xqN5KslvmO2gT5jIwbaVbn5QOeOpGMdaw/EmrafqGtnULa1NvEQB5YUKRt4Gdox0ArZkbT9U8PzXVnAtnLApYx7sbs5yQewJ+6OcciuWvo1kVJVwU2Lvx6//rrmoL3ry3FBOK16i6lI010jKoICDJ+vr2pv73btXHTvT7yXzLyENyUjVZMcCltmWWRwy5zkL7HOa7YqyKSsQSRmNVbdnJyO/WmSK32kyfw4PXovFT3EfzNHGQVGD8vVRSXchWBE5JztJxwR2phaxWSb708m1sjGBxk1dimiZYVhVdpHLHsTVFY/MjPYjP5ipoW2K0axrk859DQ1cRPdTSLDxGhOSpYZymOopv2hN8aeWzjHzc/yqSLbIsqSKqnG4kVXVdkhVVKgfdzUoCVniGWhVlXjOTyD7VZtPL8s/PjqwHfHtVXfHGQ8iebI3HXA96sxqWSJreNfMyd27p68H09amSE0OnlnaKUTEBSSAPTuDmqcfLGSPGX4475q7PN5czK8KKNvzDtn/Dmq0e15AkcSruIyvY/4Zqo7D1YRyOuIeOchcf41Ijsy5ZsyKR9DjgUxd0bNF/cz1X7p96kt4zIyKmd2PpTtoSyWSZlEUfzBTnnPfvUPlrE3meYfLHV27/40+63R7l8kmdcKuOfxpLxhIqR7QSUDAH9alaAhkNqhmLE/fOF288etWpZsSw2/kqFxyW6ioBEq7fvcnG3sRj1qVmSSSLzGO5V5LdiDx9aTGbuis0cb27MCYz2966CyfEy8gn6dK5bTZFhYSXNxEpcYPOAcdK2bXU7TzAouo9xPTcBVw2N6ctLM/aL/AIJv6p/aH7MOnQGQt9g1fULb6ZkEmB/38/Wvhz42+E/hnD+1H410v4meNLzw3ZajCDbva2ySs8yEr824jauByfbrX1f/AMEqtch1D4J+JNJjm3tYeImkYbs7fNt4j+HKGvjr/go9CfDv7UEuorZxuLy1djvXIbDscexw9XfRm1F2qPWx7z+xVrnwl0X9o7Q/DPw71681yefw/qVjeaicx23ytFLFBFH8xOFViXZzzjgZr9HLq6t7K3e6upo4YoxlnkcKo+pPAr8iP2e9a0/4U+MvDXxDtxdW93pi3e6xh0QyxRCezZEyyzKZFDlQxUZIXt1r678A/tCfCv4jQ3+uWngrW/Gmo6Zp93qVzfeKGggRYrfmUxQsWit1HJAVR2ySeaKcva6mdal7OVlsfTtn4o8J+KozHZ3Omak0J3eT50crZK9VAJOeo7UnhbSLPwno0eh+HtBltrKJnlSMsTtMkhYqC/OBuOBngAAcAV8NSft+/CbWP9I0T4F+HHEZ3QzT+UGRwNwwViyCODweKyrz9sRfEFxda3Y/D3Qba4u5N8skWsahEGb+8yQyopJHepqVqVL45WCOHqS2R+iEd9cW8T3WsfZ7S3iQs8rSgKvTkknAHXqa8F/aW8beH/GHw11HT/Da3OqW2nXUE8+qW8WbGORZAoiWY/LK539I9wGDuI4B+WP+GntZmZJv+ET8GSzcNuvLW41Exc8c3MzD8hS+LP2qPih478M6h4V1DXdMOnSRxxfZ4dNhgEmGDKFck7cbR0P6VNPFUOdcsrsp4Woo8zVjhvGVzZ2/2R7h1UzBl+Y8HHNcpb6vodxN9hssRzsD8+0FWx07gjFWfFKaxrGgw/2hHaNckjfEkoLRErk5JAGO34iqui6PYW9jE1xp2n+aqhZmDAEemBXNi6qVd2O6hRj7DmluF1HdRtF9qeSeEfeYKoRCO/3s96n0t1ZQrNMpVso2MBh9O9E8ujxr9luJrKBWx9+cA+nQ9apx6S2qXsLafq0cKJlz5cyuxJ7HjjI4/AVKmnHmJUNbM9+/a68O3Hj3/gn/APDiTTiJLyz1izsoWkbbgnz7fknpyF5PtX5wfGzw/rWheKLKx1ezEdxBo1lHKYm3oSqkE7hxniv098QxnWf+CefiBGuDO3hPXY51YjBURXsMvb0WU1+fP7Wl7qWn+PNOmsb2aKC+0iNmCt8rlZHHI6dCK9ig3KicFRJP7zyr4X+JLPwn4xh1TVJHgtDBLHI4jZuq8cAZPIr26L9o74fxmSJY9amLwSRb47McEjGeW6de1fPkfivWmKwXF7E8bqY/mhU4HUHp6j+dXLXxFdG+jihtYXaUrGCyY5LYHT14q6c2lY55QjfmufYnw1+Iml+OfDUV9oKXFwtkUs7lpFVGEoUHGCe46GtfxU0l9oTNNA0TRXUZeNmBwDheo46NXgng/wALXn2i4gvPtGnRCSN7XyJArSMFO8sgyMemea6a68P6pIySQ+LL+KS6iWbYXJTGflyARk/KDXVSlKEk3EmpShOm1zbnzlfx+RNf25VVMFyy/L7My/0r2P8AZd1Axa1dWobO7Oc/gMfrUl98JI3klukisp55HeWQlnAnY5OSMfKc+hr2P4R/Dfwto3htdTk8P2cGrxJvmnti4y23Pc4PA9Oaij+7qNyWjuRWhzU0ovXQ8T/aNtZIfiDNcKp23dhBJ25wCh/9BFcx8H7jy9c1G1HHmQK30wf/AK9d78dTa+LdU0vVPDZa/wBlnJDceWhG079y5Bx13GvPfh3puraR4sWa+0u5ht5bd0aSSMhVPUZPTPFee7LEHtNSeHSPr3Q7z7Vo9nJndmJfzArmPiddLaaWNQ8tZPLhlVlYcMpA3Lj3Gan8J6tYro8EMmoW6vHkbTKoPB9Caq/EMR6h4ZnihuI3LB412OD96NgDx7kV61GKlNI8Ss2oO/Q8Wm8Nw+EfFGkaf4u15L17tWcqqHZC/IjDc5f5sE444HXmvoD4e2ek6l4TvNYtbWI3K2x08tGMFlEyrhs9WIJY/wC8c18u2/jbwnr/AIg03VfiBZaymmwMJbqTRhbtdEA/KqeewU/ViepOD0r6q8AeJPhz8UvDOu3fwtj8c6X5OpWkNxceIbqyfI8t3xClrGoQ5jG4sTnIxzmvCxjr4ql7SpPVdD1KU4Q/dx1Xc881nxBf+DdWfTdU8O+dNqUDfZ/sTgzSHPERx8ygAZ/H1rlPhHpOsat8dIr6+85HtdatDd7m+zIcfMI3jPzOePuDqV5r1e4bxFr3iOfwl4Wt1h1Wzk23GuvaxyCztyAWcbjneRgKozk4zxUH7MvhnTb7xxrd7Jb6nNeya/cwW89yyyToscbZaVwCAxP3ip9hXi5dze9Oat03PYxXKnDTz09Dl/C+m65rE1l4b1bVJ0nN1JqVwLaQx7kkuA8a+ygQjIz0z619X/s6+GtYg+D/AI41R45/7N1XxDa2ti0i7d2ya6nkXliTtEkS7uh4x0r0nwr8Kb5v2Yb7T/C+i2F5rV1q6S3cy2YkuTZKyEqrgb8hQSAD/EwHWvWPgj8JNTh+APhTwvr1rLp14n+nXUNzHslRmUgB1HRsEZB5HQ9K9qlLW8djyMQ42kkfN+pWbW+VZSO2Kwn028u5kt4beWSWYYREQs759FHJr7Otf2cfCEl01zr15d3yk5EEZ8mP8SPmP5iu90Pwp4X8JmKy8O+H7OxDqxLwxDdgY+85+Y9e5rR2ZxRVj4h0P9mf4leKLCa81XwnLY2FrCzYkhVLu5A5CxruRiT23Y+p77Gk/BnxP4ls7fT/AA58N7uSyiihiVtamYwloht8wqfKQsccjL+mK+46KvDyp0F8Cb8wrOday5mkux+ZX7Zvwp8ZeEfANhH4iuNJa5u7hZZPsGVEaqSygoFSMHKDOARxmvcP2Xf2QvhHq3gfwL8ZNYutb1fXbq2tNaDXM+yKO5BD4CcsVVhgZY5Az3xTP2/oU1Gz0jT2cZZh8u3PAWQn+dfTHwf0Ky8M/CnwhoOnqy29lolnGgbr/qVJz+JNefh6vtq1Xm3UtD1a1P6thKbg/iI9XuvDenePdNkg06zfVbo+TdSxQJ9ow64hZ2xuK4R8c9FNO+LR2+C7n94qDzoiS3AwGB/pTNW8J6le/EbSvEiyKbK2ixJzgqyq4Ax3yXUg9sN61T+Nl1EPAN1s8uTdKExnuFYkfXjFPGvlw9R+T/IdKFJ1sOqbu9L+T5nofkZ+zuPDt4nxFvtS0uy1DUJtXt4rW3vQ3kiEvM88jFe4UAAZz8xwDX0DrXxc8K6P4Ztbebw7HDbWt9HY3BsVEMBM0bPGyK/zlECBTnHLZOc18m6BJ4lsPCkOpeHY3sbhdYurua5t51hXZkhSzAg70OdjcbRurZVNevJpYr7WJ9SOsyFYbqZiTNJJsB3eZ8rFSoHyncMc8GueWGpVIpzZ1xxVSnLliup3vj748+Lf+Esl8M+Db+3gsrUWzG8sYTPKsLxAMvzAqVViBtIAAT61yifF5pLVYrG1vdY1m6kYySXEmd4inZSAgX5CyKWO08ZFc1Yroulu1xZLqMUt9dXNtcNCpldTb7VKYQbXRyzd8fKOtang7wt4w8Q3E2oWuh6Xp1tabktZbx1t5vLBYYGMEsRjr1zVRWGoRtGOv9feH+1Vp3lL8T2DwT491zxbDofhbS44dPttUDHfb3G1EljTL7wfnDnBAAB6jmu1+BVvHP4X8QTNCzM/ifUj8xHAE23nPH8NYngv4O3Fj4t0/wAWLr1uulW9vb3htIgBK0/y7znHRmDDOOa9f/Yd0hdV8I6jrlvolrq00V3qF9b2V0mUcSagwchTwXEW/bnjcRXzGY0I5u44Wm0lKSvptu/0PosHVllkZYmonJxi+u+yLWoeP9Q8H6ff6p4T+GqeJLifw7aeH3E2oElgtxcFmCIvClrvA3MOlN1j4R/tF/G7xtbzeNPDPhLwFp9tpzx2255ZWNvHIoJKA53kyqcsQOB6V0XxC8VeNNU+Fur6P4ZU2sieHfC15bW9vCInSSfU7mR8gdP3EAyO2GrvZpre8/aE1rS9Sv1uLC18DTXvkXEuYi9/qKFAwY4C4hjH0Nfa0sLyUVRqPmSVtrbWPjKuK5qzr0o8rd3vf+vuOY134ew+BfBN14n1LxJYX0Oj4jaztLdldoVuBbGTeW4Iccrt9RmuT8PeIvB/jJml0+1vLT7GyxSq0gYEnJDDIyOldp440/UtS/ZhvItejWLWIIxf6tcWpwkgbVJnkjUMeUEgLAZ54rwj4HwQ2M3iKP7bLcLLNDMrMu3y0CMoUDcecgk/WvgOL8pwODwjqUaUVLTXrufa8K5ljMdiHGtUk1r6bHkP7WGsTWPjzTbezkAWLQ4EbI65mmYH8eOnpXyr8RNYvbHT4ryGcB7i42HIyMbSeB+FfQ37Wl4JPigseceTpdlFg9RlWb/2bP418wfE5mbS9OjVTlrl+B14XA/nW/DnMqdBbJpfkceeKPLVfW7/ADOk/Z100eM/iEJNRbJ0K1/tdJZZkjhhMcyAuyEbpGAcbEUgl8E5AIq/+0JZaXZzpc2via71q+1BpZL6e42gh0kCINoA25VTjrwB6Vpfsi+EbD/hJtY1TxlosqwTaO66XJd28hgknV97Y243NsikA56bsAnpW/as1m11PxBY/ZrpbvbbGRbiEL5BVpGPlofvMUIKkkn0zxX0Src2aRpR2UX6Hw1RSUlc9S+GviDVdJ+A1ivh+CKQwWNvBPPNOfLikl3DbGqnhgJctu6l/bB7KbxCtrZy2+n2xu5LFYzfxwXB+WR1TZC7bWKHY0jkgblxnGQBXI+DdOTXPhfpngO3uJorEaJDqE9xbxMEgmFqkyh5CdrFmVx3+YqvB4N7wVqGnS/B6ysPFHiLT3k1K6aN7i1iME5d9zHcy7XBLFhlsnkAjBr5vFU05VaiWvN+ouSU5cvc574geKNU03T9VvvD9nfJ4i028Ef2tpSPKja33NJFlc7CrGPBPC5Jxur6Q/4JQ2viWH4jeNL7xVCk1xreiw6vDdLPHIDE0kcaj5ckEhcYJ42YxXwh8Z9QsY/GGr2FjBa21nFcPJFCkzEOdxDg7iSVLKM56lQRkAV9kf8ABHDWNR1z4ofEOa/kJWy8O2dvDH2iQ3LEKPYY4r6PK8PLlU0tN/6+ZrGl7NyTO6+NV86/FjxQzapoWntNq0+VVTMZvmI/fEAeWMcFjnBwM+vJ+atrOltHqnh21EnBtI1Lwzf9dZQAI8/w5HJ9a7D4u3TWHxR8TJLr2jac0+sXIjjS3B+0HeeJixHHrjHJHPY8w9/PFOmmtrfh+yedTtsY7YGGb18wls5/u4x3+9X1kfhR5892crrMuoatqUHhmFrBrUL58tnpsfmqGUM4JbHzOAmQAuAWQ84xWtpPhWO60+aRZWs7S+TCwREtgFlbJYnDkFW2uQGw53c1n319NoPjCG7iv9JW4a1KKtvFiCDOUO7JxkExtyRgEsRtUmur0XXo5LHbq32hLiLzg0kkYPnCIFnYFBg7QMHAAJU4yCMqpuOjqm+pxHivwxKsl9ffZZ5b6BjqbXaMixrEpJCKh53KF+XAOCAc4ZlplrrEt5pUWqXeoaAt4wMcl4kJa5DqSrAQAZLZBwA2MHp2rf8AFviKRLG9mjm+z2ktmY4Y5IfmuBLGf3oYnAVRuJAGRtO4crnO0SOOz8N2dw3iLSbSPYWM0dtuvYt7FvKwSfnXO05XPB+WnFc0dRVFaSZyusafGt9a60ms6HbSKoaKS3jaQl85L4GCgIPzHPy8muI8YQaP4XhtNXuLGxmuZ3khiENxI8Kr5apldpUAkMAfbrmvYtTuBbxJcXHirSLcT423FraqXm9N43EBP72MD3FeX/GZY4dP0h5vsVyGN5L/AKGoSNtohGepwSW5xk814uNwdONFytqelhKvtcRFS2Rzng9bXUtT06zjht7K3ineN7iGPfJKrZWR5C+4YVN2MD+Vb2vQ+EV0B28KWc0GrxyeTDDdRxTPJGXTzFkZsjbKPNIbarDao4BrmfCuoWf7zSZbi3t7SPy44hDyQC4HznqRyAfSu+uPCdm0U18kwkea2RUaDAU4DbGBHX72M57CvlcTQkpqTbXbt8z3vq+HrP3jl/DWgLpetX2reKrjUdW1LybdrWRrsiIy4IfCngsuBtyCpJGRgVo+G9Rsn0u40+LUtajtZLqaSS3nQC4vHQxtskkzztYMoH3cN7Vy+v6/e6PNYadNHDqksSlZ1WTMpbPt93Ax15JqPWrrxR4ss0s9K8OzWILq3nzThWwM/LgckHNEstxFZ+/s7a30VjojkkcRFezi/VdDY03S9P1S21rUPF1prXn6qXW1j8xfMGDsDBmHJDsuR/dVhnkVj2HgvR5Lu30bVWMV7HD501sJgcMufmXAwUPX8avWek/EiOyt7KTVbCBYI1jV9paQEHIbeeQ3bPpUo0PxrFqK6y/irTri8CMvmS2iHKtncv0OTx71tDAyg5JzS7anTTyhUnq4382ixe+HNK1TUbezdrK4OmZm+zmZUljLEL857jJUhT61meOPCghsZbjTdSntpWtZo0IOQ4Ck5PYYB4qvY+E/F+j31zqWnyWF59pjeNkZ25DEN7nOQMZ9Kuaj4o1KGS3h1zw/Fa20dq8IUIZiJCTg5445zg5rVYKvGUZU5cyR11MDW5eWOq7o8s8C/DG60vxHpF3e3AWC8szdYkQj5DgbQT35Bz0r1VdI0Ow1MaDbW5Elz+7ZYlYYLDlmyNvXvV7w5aaRNHFqU2vw3ojEcUUMqgfZLZWyynGCx4xk8dPSu30+xnvNSk+1T2sLjiG1jY+cIwSPmB6g84I9KnF4mU63N0XyPOw1D6tScZeZ4/b6PJZeKLzTTlTNEsinOflGCcAdc5PSup+E/hu4bw/eNcWqRrJcTz2ZOCuxmIHAPHIP5VL46sY9G8Vadq/Kx7vs8xIP3TgHt0AbNdz8OtHextbm3kUIEaUgcY2lyyqM98Hr716bvKnc8pS94zL7wjJrkEd1a6rJbzxJh0WMZD9cgHp3+oNcNa6bPZ+LpNNt7i4ldE85llhCZOcE8cHv78ivdprf7Pv3M6q8efmwfUk8dPzrLj0+0kV72OIFp8MrlcsFxxj6j+dQo2N41LHJa5pMyzSraabDsDIGCYU5CKOe2Bj61yvifwyuoWdje6tFGRZ7oZNpI7hkP5ZGP9kV6xqkQmup4YI0llLsdinhfQsR0rmLrw/5iyvqEnmXPltLCob5FZeSqg9flzyatQ1uy4yT3PGtU8P2+pXAkkQ28can52++2en0FcLJpSxBLqeZli80Kr9AoJP8q9N8VXy2cixtdW9tbDcrNMDuz7ep/wAK8y1rVLzxFHHp/kpDaQHhYlwJGz97nkcdq1hRlUloN0lXdoI5XUL28urp1gjjVS33lX7wrvfgv8D/ABN8UvFVn4X8M6aLi+u8uWkJWKGMfekkb+FB6+4ArX+FnwX8W/EvXoPDvhHQZtRvZPmIHyxxL3eRzwi+5/Cv1U+BfwD8L/ArwyNP0PR477V7mNDqGoSMvnTNxlFOMJGDkhR9Tk17mEwXJrI9XBZXChL2tbXsin8Af2ZfBHwF0/7Ro5hvNeuYVjvNSmXLdBujiGQETcD7njJNeuzmdlK/2lDGSOpjB/8AZqljiBO5bOMfj/8AWrzX4+ePr3wj4WGheH0gXxD4jY2VhuYKIlI/ezseyop6+pGK9TSMT1KUZ16sacd36HkPxG8Q3vxU+Ikml29muq+GvCLBFklmEFtdXwYE/KFbzNuAcdOFz1xV97/xRuONEgf/AHNSxn80FZfh3w1Doek2ml2/i67JgQbmjaAB5DyzYKHGWJPJNbA028P+r8TXpPukB/8AZK4pS5ndn3+GwyoU1BdBkd74i3bZPC+QerC/hb+eKUXd9ISJfBchXH/PW2bP5tT10nWhnb4muenQ2kLY/JRS/YdcX/mZCf8Ae09OPyNLc6LRKk3ksw83wDI+P+mFq35fPVfydImb998OLnj+L+zLdv1DVqNZeIOq+IID/vacD/7UFKttry/MurWhJP3WsWH8pKdyXFGYI/D6Dafh7d9O2lJ/Q1yvxC8B/DHx/oMui+Lvh1qbwEbo5rXSZEuLZz/HFIgJU+3IPcGu+8nxF91dQ04sf71m+P8A0ZSfZ/Em0f6dph9f9HkH/s9DXcyq04VoOnNJp9GfmV8ZvgT4h+E+p/2rp66pqnhkv+51C50qa2aEsT+7nDqAHx0YEqe2OlUtZ8RN4q+H/wDayWzNe6A8VpctNcgHbIH2NFGAPkyTnqc9a/Tu8stXvLaWzvv7Eura4UxzQTwSPHIh4KspJBHtXyl8X/2RNSsW1fxD8JdJ0jy9RtGt7zQFkkIyTuEtqZPuupAIQtjPT0rzcXglVtOG6Z+cZ1wfOg5YnAar+XqvQ+KI/Nky03zM/wAzFuSxPU571PcxrG0EJYL5jZVlGQB0zjvWrNot9o11caZq1rPZ3tuSj21xC0civnlWDAbT9abLplrMg8udonT5lDqcdegYcVlfU+B+q1FrKLMqFZo7yazuWjVo3Iz3yDggVUZooWfy9yk/Ln2PUVqXFncLqb38du7xPIXD7cjk8/rVO8t/LmFw2DukJHHX8KaepjKPKza8aX13qmrSTXVwHYxwR7SfmAWMAde2BWDuNu0c0YKSDmNl7Vq+Jdq65Io6mGMbh/uiqSeUqRzNHsB+Vz1X2xQtCJv3tRkMalonmmU7nLe4pLtQzHkKF7Y55PGafCyyXkTTRhdp5EY/hz2phaKaSfzCY967lGOp6UXExLn5Vi2ybDjG7nPNNSJbe63TXAlHDEBuuf608zRGFYJl3KE+XbwRVURtuEWOnPIppXGtjrdL1zwzp+i3Md5Y3j3d222NsL5aqoBXnqDywOOCMYwRWWrQSXjXUVoqQXGFEbEkIfUevrg1TvY4o7OKHyZBcKwZmPRfYetEbSMY13sY14XPqetZqkk3JdR7pRJdRt/s+oTKVQhWYLtOV6dR7HrUUa4m3djg1uNoFxLMtq2WlMe+Pngr0/TNWvEnhO60G6tk4xc/KoI/iFVGaWjNpUZbnOTx5A8skMOh9fb3p0cLy2u4KM7s89hXU6X4ZbVJra3uGW386cq0zLnGSMcD34rs7DwjpsbRQ6nbJAjWbMrswVSVYht3v0PpUTrJOxUcNKWp49HDKm9WXG35qgVm9CBnn3zXY6pY+HWvJ4bPUZYo1XbG0kLFHI9WXoPwqq/hUxWkdzDJHcrJGzK1vJ5g3DqDjoR6Vpz2WpjKGtkYaj5tq/Odnc/eX0HvUM+5mEjBsHgrnke9X4bWSNnk3f6tRw3YE9PakvLcKYZlyoIwDgc0ubUjlkUGRFUM2do4we1WrSWNV+zrzklowBz05o+zyNbyQM2SAGjxWx4R0WS48UWCSW2I/M+YOOoKmq+LQcY3Oh8AeAtD8YG9fVNem0p7JUziNGjdDkZyzA57V103wD8PW90LeLx1cSSJ8xjh00ylQcYyVfHvSeF45vC/izUfsqoklzZeZBJPZsTuJGCi/wAI+9y3GBXtvhXwu0UJtdkllBEoQeWcGfPzF+Prj8B0+YV20qcOT3lqc8nLmstjvPg3/wAEx/DXxl+HeneONJ+N0KyXEj29zDJouDFOjYMZPmgnsRkAnNO+J3/BKLUPh74WufFdv8XtOuRaMkckbaXIp/eOEGMOf73Oe2a+m/2J47qHw94iS4ms5I9Jv7dyLtQFcT58x1xyoAC4JHBBHrn2H9ocWw+FWsiG3tAyzWh/dTlnH79Pv/3/AKc4qHTinZbFQm3Llkj8NPi98JNQ+EWv2ui3Gr2981zatdw3EEbKCm4oVKt0OR9MEVwDTLNHv8lFCnGAPu+w/Gvpf9sa1vP+E00G6tFlJXSJFIC5H+vbg9+/avne6l0++mkmks/JmYbmjQ7MyD0HQDvXLUtGbijSSaZVL4UWpZSnBYbunHWoWs5TJ5isssR4+U457VMrQojzNbhwcRtu4P8AvVHND5LK8ed7DO8cY7fyqUxDfszSRtG0ZBiIVucjP9K1/DtrC2qQS3DI8Z4dWX8DmsqS1kUK6yEiRg3AOGHrj69q6rRdGkmtZLzy2O0F1x04Ip8zWw9j9Qv+CR95DDoXxD0RHyRPp10PxWZGx6/dX868m/4KwaLBZ/ELT9XEZMs+yNT7GLJ/UV1f/BJjUNQj8eeMLG6QIl7oUVwV/uyRXAUj8pM0n/BXbS2j1LwjqjYETy7Wb6xyD/2WtYHTBWmeZadOLnwrZagpG17GKUHpwYwetcF40+IF18K/hbZaH4f1uOLW/F1jc2N5BG2ZbfTZcGZnP8BmLeWvcqsp9DXQ/C2+XUPg7o8mftUsOmvCwhJJdo9y4HvxgV83+JNI8ba5rN1ruu+HNWia6fdtaxl+RANqIPl4VVAUfTNbQtGIpJzaZjx600LOY2bLZ3dvbt+NbNj4kvJ4X2yXD5KR7vNPPPH8v0rJXQ72Ft02l3yZHHmW7KPyIrSVPsun58vdcPIQkajb27+mPWuepTjN+8jop1Zx2Z21j44v1T7JYzTxKq8rGoLTyAZwMLkk4P8AKrvh3xX4kuL6VtXgdWkSRorReGAIPLnGCw44xxXm+n6hf6fqAv4TM13DhlkQlRCcfwemBxnrXa2PxO1D7SJZjqEUa25j8uGY4EwJIk+Yd+FY9SBnrWf1Om12OmOLakubU6rWte1rVbaZ21KU71UyqyKemBxxnJwKo6frGoGGeGHUzB5sbPuaJUPy4BAJHAArMsPG15DqC61dTXrK0Iiutsmx3UZI259DjaT0wBWHrfiS61poI1vZGSL7xurlpF5XBPPA7DjsorCeFTWrPSpYpbKOh099NeXES3RuoJCI1Y+ZdIxPPTA5GP8ACtvw5eeXfLFI1uZTbv5ZDhjvGMD5fUevpXmP2ePduS8tJFRcKEYFuvX/AA9a2NLZrZkmEyI0TBgyuM564z6VEaXKXKfPex97/s8rJ4t/Yu+OXhWchruFLq7eMOXIJtVZDz6+QCK+D/2pLWbVNM8C65BGJPO02WJ2yOSPLYDH4mvuX/gnhdW2vaZ8Y/CcEqyprOg28xj3ZIfZcxMMf8DX9K+JP2gLV7v4R+DbhY3eSxv5rVgoyR8rD+aCvYo6U2j5zEL94/U+e/7LmLBjbXKsvOFiyM/WtmPwb43X7NcL4YvwkrrJDIkRZSBhgwI4xyOa5+aG8RduyddvPIYV7n8J/iZNoNta6DrTM+nSoDC2Tuts9vdM5OO3OK48TUr0abnRjzNdDCybsbvhfWLm9v7CO4gaO5kYb4XRlMblW+ViTwev1rqtRs9a86a4/se7Frp1vBE0yoShARRlG/iGT29/Q10Ufijw3fWsUa3iQcnDSKVDlcA8sOPvDr61tXGt/wBn+FxdaTI9/tjHlxRsqiQs3GDjnrmrynNMRjqzp1KdrIivSjSinscXo91JMw82F/ZtpI5969Q8CzCS2ljjYFXwVxz6iuL0nxZrV5OkOq6K9jaNF8zNLsZJcZwc43g8gFRnOK6Dwd4u8LTa+dF03WrSaeWMuIo3J5BycN0J7kZz36V9DKjLl5rHJza2PI/2hlh/svSrrR5oWlgvZYZfsrKG5TPzbeeCp6968U8Kavq0firT7a4v7wwSzGN42lYqQQcZBPrXunjQWFxrGt2NnpckN3aarLbSSW7YZMqzpIeuVbIzkV494E8WatqniWLS9TvPOjkikYAxoDvXB6gfWvHrU3Kqmup7FOajR3Z774dh0u4s1FxaxyOZMbizZPA9+a3JPDOl3ELRRxyQE42tG3I+m7I/SuIs4o0UL8y45G3b19jitiBJGU7bqUdcZYcfTFdri7awOJSs9Js+TY1t/wCz0h8xVuHVj8wG0ru/PcB0r6i+AHizw98MPgvDqurXRSPxB4lvFhbb/rBb28Kn8B5p/OrfwH/4Jx/ET46adqusWfjTw9pFtpUkKy/amlJcyqWAUqhAwAM59RT/ANoj9lHxp+zL/wAIt4Ys/ii+rHWftEsdvp98zW9uQygsUKLs3kjnnJU+leRiMPeDhJ2OuliItr3U0N0X4qeD9Wj8Q6fqt9f2UGr6lFPFcWloLh1SNcN5iFlyjA7RzkEk19ff8Ev/AIceF/FHw58UeJ9WtJbhf+EhuY7aFv3cQjZcbtq852kDrx2r8zdN1D4oX2sSafpI1rWpbV2SZbXTUutiofmLYRsKO5OOK/Xv/glzp5t/2X4dRZVB1LW72cYUDgbF7e4NZYXCQpU5PfY3xeKnW0en9I+rdE0DRfDenx6XoOl21haRAKsUEYUcAAZx1OAOT6VoUUVsede4U0opdZO6ggfjj/CnUUAFFVl1CykmeCG4SaWKQRypEd7RseRvAzt/GrNAHxv+24xm1zTIg33IzwTwfk/TrX1jotu1p4V0+0t28torCGJD12kRgD8q+Qf2xJZbn4gWOnjJMhCrzwcrEuD+J/WvstlktdNCxxlmhiGEXqcDoK8zL/4laX95ntZlphcOl2/yKUXnMJpJ7h2CSiPGeCd4Gcfh+teefGKdF+G95PJGFi865kcDA4WOTn65Ga7W7t7y4vMQRzRyK0cm/blGQz5ZevX5fyNee/tItPpvwl1WZsp5VtfzFgM7cQyEfpW2Zu2Eqehhl0V9ap+p+T/wC0C31r4c+Ior64uDb3WtBmS3T94xSMMCxHIXn0I+lesaT8H7OZdLu5PCFzdTiQTW82qXDMoZmL7gMgqBwc47Csn9lO48M2fwhu28RWV4kd1rEzJcfakt4mwqAop2szt0JA6V7LrHizRbrw/BD4XvC14ksdvHKu+SUoRwpyCCemMDI715+JrTptQgt/uPYoUIyblU6bHlviTUv+EX1SfQZLFFe02ySpZ2qxRfNyF4AZjzySKZ4ZuNKnjlm1DSZ7qTzP3az3HkRKvdmIwSvQcEVW8a6hdadfXv9uzMZbeUwzFp4138L1LNnuOvpXJ3nxC8EtfTWreJ9OQJCscby3DTNxngBAcgew7963pw5qaT38iJVOWpeOx6XbePNWtUgjtdSS1UP5Z8sbhtU8KMg5AHGTXrv7F/iLSPB3wy0zxNrXihdF+x6e14vmtn7ahneSW3CfxsyjAxyDgivN0/aI/ZT0rwrFZ+HfCF7reox6e9v9qt9NAX7Q0ZHmGSd92AxzwvbpXa/ATQxpvgDwhpOoRmby7W1jnVX2Fw23cAR93IJ5HNfOZnjVl1XD1o0t5210vdNX69z2cFQ/tCnXoSn9nprbVP9DrvFP7SX7Oug+G9d0/Sdc1PWvEN3oFjpcVra2rMIbm2t544i+ORh7lieO1ZvhP9oW8vPGXibxpo/wADNb1/+37TQ9JtBqUfkRxRWyHLEMpLgy5kwBnCjqa9r8beG/CXwihuLfRfA+isdRh8Sav501sHkjFvYGRPmbJILYHJPWtPQvEHiCx8O/A+6s5IIF8SppVrqESxrjC6XdTMBxkchPyr79XcfM+ETin7quvM+MP2oP2mf2jrLRtV+HeteHtJ0rSrmOPalvC6SywLKXRyHAZQ5XP4e5rA/Yvk8Qa14b8VeINemmzd30MNurKQFVIixC5/66D867D9q7XG1T4rX9rqel6vd3Gm29vpbXMlqGW5MO5TPuUBdrklhx0r1u3NvFCEt7dV2oN2xAo6D0r8x46zDkpfVHG7lpfslZ/ifovB+D/5iE7JdPX/ACPkX49+E9e8ffGXXv7Bshctptnp6yKGVNo+zJj7xGcnNeO+Of2d/ixrUNqml6RE32NzIT9oUbt+ANpB7Y68e1fQ3iXxB4X0/wCJfxFsfE2tDT2vrmygjYxswKxwITkAEYyQCD1BNYV14m+GentJ9p+I1kB91ElhOFbBLFQAOM4IAyBjFfXcOYDDPBUakn73Kuvl2Pnc5xNf2tSmqd437P8APY8Kh+DX7UFla20lrNMgsrKO1hiSUZjiRyVixtIzkkk9xjJNec+OvDvjDwbbp4d8ewzf2iiiSATTFjDAS7AKD0DMWOPr619naT8QvhrYyi9i8faYy+SY1JL9GIIJJyOu49O/tXy9+1J4i0/xL8QptQ0jUoNQthZ28aTQNuVsRnIz6gmvovq9OnrHc+bqc32qdvPX9TN8VW3xY07T7PT7m61mO11DTbR4IWdvJa1jUeSFAGAFycfU1w82m+MzNJNfRzp5rf66XIG/rwezYFe7/F3UtX1y78MW/hS9S7gsvDOn280kM4CCYISyHnqOARXHHwv4w1QKt/qFogOMKZDIR27CuB04UpNRSNOW/SxwFh4Qm1SH7Rd6oyy/d+ZN3A6ck+lfpF/wRy8Mro/ir4nXf2z7Qx0/TIvu4wDJOf8A2Wvi/TfhXqUihZNUuDzkiC1b+ZIr0HwLZ+NvhnHqDeDvGnifRP7TRFvvsupCzW5WPcU37eSBubGT/EauNVRGqasfT/xUttWm+KHim6sdO0q3gn1W7Zv3JlF0DK332AG0Hrxu5rjIf+E13GG38H6Jb2PnFJLUsGS4QdJWbaCCMcLtPU5rlLxvE0Vul8vjzxQZY1EpQ6iSjHj7wxyOT39KseKvEXiS38F+dBrl6s6Qqwk85t3BBzkVbzD2atYzjgFVlbmN+/bxpfaXHYyeD7CK0lcs1jBIENu+GCyrKBy/QH5Nu1iCDznKs9L+JOm7YYbdJFgVvJMZ+UbhyAJEYgYVARnb0wAOB4XefFLx4rNCPFF/tBwB57c/Xmul0LxT4o1Cwt9WvPEertIynIXUJQnBP8IOKmrmqpxvKJ7+J4QlhIKo6v4HqNloHxAN4l9qGm2srwhY7Xz5GaO3VehCgANjClUARQeoJANabf8ACymUSDQ9JjvmxnUFjDXB6ZOOBu65OccdK+UNU/aE+J2m3TbJ4UjEh+V5JHJA4yWZzjt2q5p37QmuSW6NeXWpPcfem/04qoOc8Ac7a0+vzt8J8/LAU1LSR9TWem+N7qFmv7DSNIuS3zta27TfaP8AfzjCk5yBk+9cD8WNek8Lx6Vpd14T0K+kmFzM7Z2fZwDGPkQ8nd3IH8NeU3Xx18V3HyWt1Ols68RzTyuOeo4I4rD0fVF8TeMEm1a1WQvbyR7baFg5/dyFcZyeGwTnsDXNUxvtfctuduAy++Igujdj2Tw3ZWOp3mkaivhfT7SKRYwIbb+MOw3K5PJJ9fc16X4o+HOraPrWp/DvxUy2lxaMWSK3kCxDB3xW7EfMchTtxgHI9a5Tw/eNZvb3Ftbbmt9Nt3G1v3rSxRooUDgD7uP97Gc19iftMfDHwzrtiniLT9N1ezuLi1S6vmtcNEP41lSRjsWQTNtZeN4zwBg15VbWyve7t6Ho0Yctf2SVtT4B0GztY5riWa02u0m5mbhix5IPfFbfiDV4tLtkkFqxRjj5GAIqP4maLa+F/ibfeGYLsulqqyNIB/rWMMZZ8dgWYnGTjNeQeJvGWpapqEuhXEMjywSjasSH59vTA7+tVioOpXlS7Hr5tXdLFSoSlpG2nyPQdJ8UyX1xNHcqIo/+WUe4bsepxVqTUI93lqzMx6YP515K2pXW1Li+aRPVV4w3TnvkYxirreNH3fKuVA+8f6VyvDNHApqbueiXOqwxLIoRGCDLu3OG9BjHNV9J8QT3Nwkc9yXQZwG5H5dq82k8STyqwVmYP2/yaoTeINSs1eS1IRo0+/1B9cYFEKEovTQ29ty6x3PZmfT9N1mG+Nuk0TxOJEQAB96kbSDx1x+IFd2tzcHxB4euzocNx9qkGb5oeYkI+UAj7rdevrXl3wZ1C88TTadcXkxaR7iaPIHOFXpXtOmx6fY69ZWMmq+YS7eQGmDljnnByeF+6R1BXmtcdpKne7dvzZ3YyaUacpatxu395B8Q/B8PiDw/LbLGPPjkLQgdQ3p75FVfhXqk10s9hcWr+fZYhuiygrG4QAcjqTtzx616rNYWtwV86MNsO7gdxVR9HtLPVGvLWFUjuAkZWMAYYIQWPHJ4ruiuWPKfKOXvXOX8Q3EKpBa3Em1bmTy5CeMKAdygd8jgDvn2p620t8RCym3UkfuwcOVPAyR938Oa6S4s7eZssol2sCCwH3h3+vX86g2p58OeG8wZqfIpSsY32KO3AgghCpGen49ff61ia3bwwyQXskeVikGeOgPDdf8AZzXRsy+YzSZUf3vesjXvKksz827BDD0NUkKVQ+b/ABr4L8Sa34ons109jFZO8duDIo3gE/vDzxkdPapPC/wzkbXtJsPEt5Do9hd3kNvcXsrb1t0dwu4heT14x3Ir2LUrf/SFvh87XMUbnjowGxvrkrn8a5fxPb313daWtvA3lx30TzNuwFRW3Zx9QorSONqUHZJWPRwmPlSaUYo+xfhDrn7J/wAC9NudF8P/ABKsoZb+RftdzqFxIsk8iZAydoUAZOAPXvXqv/C7PgjFb/a5PifokcPJ3yajsXjr94+xr809RuJJHuoZoYb25jupGKJtDQW5f5WOeD0BPT2ri/GfiSLV7m4uppmTS7IZYHgTOvcjuAenqa0o55iZ1PZqC9dT6KjiXi2tH567fgfqhf8A7S37O+l2U2oXXxb0MwQJvbyr5pGI/wBlVyWP0r5Pf45fDb4rfFTWvHWveKdAXR9LjFjoFvfX0e0xsWLS7JDktg85HBdvQV+d/ijxdqHiK6aPzGhslP7qEHGR6tjqfasRm3gKygkd8V6jxdafxWPNlxNSwOIvhY8yXVv8tD9VY/iB8EpGATxD4IJ6DbdWoP8AOrC+IPg7N+8W88Jyb/4luYefyNfks+FcnaMg10/hfxhNo8ctnPbxz285TmTO6Ag9VI45HBBB7VnLEVI6pHq4Xjr2tRRrUkl3ufqKNX+ELK2Lzw0uMZC6hGv8np0eofCvdmG70gEcqY9YAP6SV+bus/ZLmy/tCGEOkqZYKo+Yf4iuTjhjlO6RM7j95R0GOlZrGz7HXmHF1TBVFH2Saeqd/wDgH6qLcfDeb/ValFnr8mtP/SWp44/A7Z+z6xMPZdalJ/8ARtfk/wD6Pbh5UkB2MVTDfMfwq1Dck5mUkMV2sr5A49Kp4uXY4lx5f/lz/wCTf8A/VoWfhZ8NHrGoYH93XJuf/IlJ/ZOktjyda14ZP8OsTn+bGvyXvGvoLs7bqZTtBwsjDAxxjmrFtr2uQ7fL1jUEB44upB/7NVrEy7B/r4np7D/yb/gH6wjSLVl+TxF4iAPpqkh/nT00hVbdD4o8RIR635OPzWvyxg8XeKoIy0PibVlY8nF/KPp/FV+H4lfES3XdD4w1VyV+SNruRunLdW7UfWpdIlx46pc3v02vmffPxc/Z70j4mWM+pW+s3cXicbWh1G8bzhKEUhYZQoHyf7Qyw9xxXxF4v8L6z4H1w+HPGWljTtWXc32cN95AeJFdeGVuoPtXOw/Ev4gXFwG/4SLVHaYYjVb2VfmAwCPm9eaxv7d8Qa1rFrda9qmoag8SMiyXdw8pVeSQCxOBnsO9YTl7XWUbM8jN+IcLjLVMLFqfXs/VHSIuyOH7DKzAyN5yP2BxjpwehrC1WIyXA+zsHXzBxu6c4BrZ0+6W3kaYRs6qwbKjOBzzUFzp8K6naTLOZbe/uFaN9uO+en4VilqeHmcYuUZxVroyNb82XXrpjkbX2gnpgACqNwxCpGmQEbHrV3UW83Xb9gflNzIOnof/AK1VJLiNZvsssKkMQy1Z401qNhZo7jcckr0+npVnyPtEiIMszKcAc89cVW+0KZiuGAB4wOtWVvlVvJhjMZIzk+vQ1MrkPUjuo0t5IXCjcqfvATn/APVXSfC/w3pfjb4i+GfCmpTTwWmsatbWU0kON6xySBW2578nFcteNJJdSKzfKVBrqPhPcLY/EvwfeLIEFvr2nuXPGP8ASErSC2uHQ/QzSf2NPgTLb6bFd+HJrk2+orDclr6dllhk3IN2GGCjMhJHUA1x2i/Ab4J69qmo6hovw8ttNtLbVDpH2Ke4llZZopNpZSW+YOVbj6V9ZS6PPp/29rWOKQJdySohJwyMUYAj32HivKfCukyWOq+OtHssCA+LtSyBg+RjynUqMHaSrYDDpg9K7JJbI5YSbTufLH7SXw+8F+AfGXhTVvDOixWI1MutxaQOzQEK/DorE44wCM44HHWsTXvD9hfNEl3AruP9U2wttckYbOOPx969n/bO0WOy8P8Ah7U441aWyaWRJY8fJtuIyc+2GrjtDhXUtJgvpFiY3UYPyMGGMevqK8nExftLo93CSXsVzHlkvhl7fXtKt7M3M1nFcG382ZlXEv3zjA4yex69Ko/GCSGBo/DsMzC4kjE12QNvloTlVGOxPJ+gr1SPSrO48TQsITMYJJLs4XzNs2dhz2XgcEHqOleF/G7UJG+IWpKtu6GOGGLnGOEBzx65pUYc07yHXnyQtHqefXFjBGxEdw425ySa0dFe4s0a7tyZNgBdVbHmD+79cdD+FYckrSE+YpJJ6nitbw1/x9SRsc/ux+HNdk43R563PRNSXT7rTbW80/TBc2k8a7/Ljy2wj5WIAycHrXLatDGuki4jWOSJZgCwXBVSOQQeR7Vt+DdUW3tL3TfmY2UxaPA4WN/mHPQYO6uW8QarJNeTx+chikkLmKHv6Fj68Y+lYKnqdPtfdOi8M6J4IksY7rXru5tpru5dIVjYBI4gMg4PJOf5itzwrJ4Zm1lfsN5cSPAyqoI4Y5IJyR7gV5hHHMqwSPIrjPCMfU9eeo45xWkviNYryxmhhjCWNx50nkjaZSGBIJ7jjjNPkvJMlVVFNWPoOHRxPDcyWuk6sLu5QR7hdRusp4I85ifkxxlfTH0rtvCviC43M107zxSFUC8B4JBlTHt/Dn8OpJx4LB8SfAjK8rWfiG2AUFoofKeJyAPvKSN/Qn5s8n6Vp6X8Ufh/uF7H4o8UW08vLyTWKyBhjABw56YHPU4FewqlKS3PNUKkelz9Av2Q/GWvR+N7/Qbdpks9dghaSOOBZpLVIiJFlx16Fw2c4yBg8E/UH7Q80cnwj1fbfJMvm2mxfs2xQftCf6s/3vXk/hX53fsf/Hr4J+DfiQdc8WfGq60O3Fm/mSXWn3A8+TACoWRDsAJLbTlCV5BzX1R8cP2xP2adX+E2pWdn+0L4f1e/nmtCtvHuEkqrOhJEQTK4AJJA6DmsJ8smuUulCoqnNJaHwP8AtfaJc3+saHq9mzK9rp8qHBxkGXt7818uXVti4O5j5hfvX1b8VPiN4E8e65o9v4X8Q2mpqbOUt5atjIcHb8wHOOcV4N488LXkcy3lnCkUceTt7sc+npXm1pP2tj1OSM6d1ucVKrMp3xjacb2UHOc4yfpxWna6PI3hw6jtZ0jkMbY7DGQfbFV7e4eSEwsgxjBwvznp6df/AK9dHZNp0nhnXLFmaOdNkkEO3h1wysw9cE85x1qW3exglG9mZ+k2t6tidetGh8rTpEysih8O5ODtIwRkc56cV3vgy0vNWWO0t9QL2cyySX0MdvGZEURli0OehDAZXuOaofAfUtH26xpOvRxva3VuIZYSPv4YnA5+p/Cuk0jwMNH8Tw32n3Mj6Q8qxrM0oJCuNhjbaeW+YgEcevQ1Mbudux0UHCKkpK+h9mf8E6dS0m1+NjQaXdPKt/o15bt/xL0gLMvkSksV/L03AjtXsf8AwUQsXbT/AA/qUNzBA0Ktvklg84BFYk/Lkf3jzntXz1+xWvhvQf2rNFtbK8upb2KG60uSP7NIIY3+zEufMJ2kswDYP97ivqn/AIKBaRPefDvSr6xjU3dvdNs3fxDKEp+IBrsSML++fnrafEGDSdPRZNUscTxLeIsml3ELiJnCg+WrHq3t056c1buPilcxsbOHUtBnmMjRRx+ZOm51UNt3YIXhlwScHPFee3Xh/wAOrpN5qFz4otQbS8SzkjMcyw20gLn7OYkYkbtw5X0bbgEAUrmx0dnMkXxAsPtkFu19cSTrPtjjYBhKq7QBtVwdp67snmrTYzrLz9oDxNY2sd9P4LsZbGSEzC4XUTsKAgZHyHnJ6detc/H+1np7SINQ+HrlZD8rRXSvu7fxIP51h/FDQrvR/CGl28V7LNGb5442aQsZRLGv3icZGVc/Qj0rya5tZYbq3k5NrM7xxE9Cy8NyO+c1hOq4vU66GGVdxSdrs+jNH+NHgS81S71CPw9HaSaiIt8czohZ0XbnOMHjA49K7KDx14dmYM3h1gCM8BMH9K+S9WtdP/syVluw8gXd5e3oareFfHWv+EbgNC/nWUhBktpmyDj+6T90/SopzlUjc3zLDwwVRQWzR9ijxV4VuMLL4dYjP9xac2t+B2j2zaOqlepMCdK8u0PxBo/irT1vLRRJby4DI3O1u6t3BFb0cEcapbWa2yhV2hT2A6Ue0kuhx8qa3HaPoXgfS/FetaoVlkstYYTrDNEGjhYdQgxlQdx/Kustr34b26bZLfTwF+YmS24X3JI4rkLt7HS7Zr7UtUjggiUs74Cgfj1rwn4lfFKPXidH8NZisP8AlrOR882OwzyF/nWtOcn0M6lktz9Nf+Cf/jf4d6l8ZNX0TwtrmlXNxe6FOssFsoViI5oj0wMgZP518W/ED4reE/BvifxL8PdZe7Mmi63qFq0J08FUdbh8Or7s5A46e9bP/BLHXl0n9rrwzbySbU1Ox1Gy+pNs7j9YxXmf7c2iN4a/a4+KOnquxJdelu1GONsyrJ/7NXXTlfmML3Qn/C5Ph+6+TJbsRuL+Z9mfOT7c+v61n658SPhvq+n3EfkmO4diYZBbMDj3wOK8fW6UgiSJWHqBXR+F/BOseNC8fhzSzdNH95fMjUjGOPmIz17VcYOfwmTny7npPgfV01+zdbOOPVLmGMAQyu3mHGR93IAwNnOOiiu+hurO3026TXLG402z3RqrfZXJDNywAOeDtXkAYIB615lpn7Pfxc02aPVdMsYrW6iIKNBqCJKvvwfzFb1x4N/aPt9scl1e3AZuPKngmx2GQR/SuGlleIo4hVYT0v8AP/I1njI1Kfs5K50UK+C7r7Ex167kvbdwFaG1ZW2qMhRuPUHkE5PHHOK0tOk0jUtYgv7XStSu5ZNRVILm7U2ghbeGU7lBZ+TJwSD95T1Fca3gL9oC4hFxa+KWDEfNGJ1tnVuQVIMa5/A4rm7q1+NHg7XrLX9csda1NtMmE0f2h5Lq3fGR1QkYIJGeDzX0PtZRjbd+Zw2jNnq/jyxuG+JOuKPMETrbTK64VizxjOfXoeteI6T4saHxdFpsujaQhF01uZktgsq4yvBB68c17v4F/aB8GeLL6DS/E3h+60rU5MRqVX7TGx+uN4/EH616TJofwwlm8640/RfMfLh5LGEMWJzuyUznnrmuCpSi7N6HbCvJLlPGLW6m2D5o8jp+7PX860YLm72jZIuR0+Ujj6Zr1yPQfh60rbbfSCNoIAVAPfpio4/D/ghtkYg0jf8AMj5fbhhwOrdatyo7a/e/8xe0qf0l/kcXa/DW50NrOzm+LHjRtRa4juZJLXVhbR28gUhJ/KzgY5Ve/OBXTX+tfEabxbpei/FLxvH4suJkNn4dvtSiVZVijVpXhlbATcuCQXJ3ZwM9K8+uvh78QI9UureH4xXn2iyeNJG2TblDD5cfvcnqenoeK474kaX4y0XxL4f8P618TP8AhIrgNJqiW5MubZUQsrv5h4LAHA6159SrKcXdHbGjytRU/wAH/kdJ4++LGpeItHg8M+Gb/VNN028kmmcRRiztriNA6v8Au4yof5wcgj619x/sOeLvipY/s3+GfDvgPw7DJATPcNeNDu5klY/echABjrg18w+B/wBnfRW/Zp1n4zXvxQsF1Wy8K6hqy+GrUo80Y3mEGU5+UZcHHByVr6g/ZH8X6tpP7NfhSxt/DsV5aQ2KpPNPMixq8kx8vAH7w4LfMAcHIrycXXcaHvScFfpu7JmOZOnhZS5ZJpb26eXqemeJbP4qa5eafZa941aGS91ODT0t477DHe4VpESPCsq5659K+ldKtNM8K6LZ6O2onybOERLLdzgu+P4mY9STXyF+0VrGu+EfDOk6h9stPtcF9HcW9xHA0bReXIPlD7t2w91GBwK8F139rb41vcFrHxktirdTZ6dbRNj2byy345rzcJmGHwjlGcpN3669Dwo5vh7PfQ/TObxZo8bMlu9zeuv8Nnayz/mUUqPxNZl54+W1hNx/YNzFHkDzb27tbVCDzn55d3T/AGa/MDVv2hfGWuReX4i8XeJdRD8bJtVkVBnrkA4x+FcL4i8dG6ieO1khK4ON1wWH6/h+VdrzenL+GvvJeb038CP00+GXjzwmfir4k8M6RqB1C41NW8QX1zbyK9lZHKx+SZuN5O5cALj73Neha58XvhX4Zk8nXviJ4dspenkyajF5n/fAbd+lflz4B+N3jRvh2vg3T9Q04Wvh9/MtVjs7diY5GPmCXKfvTuw25gT+Vch4k+OHxQtrvzV1e0tYIfmIt9Pt4y4zna2I+h6HFethVKvBSfU9ag1WpqaPr34/61Y+NfjB4cvdBvEu7C8uLdoJE6SqZo03DOOPlOK+1b6+1K31WztbfT0ls5YppLq4MmDCV2CMBf4txZvptr4B0i+/4SL4kfC2fasa6gumTGMtuwJZxIVz7dOlfeuvXH2CRb6a8aOLYtv5W3IaSSVArfUYI/4Ea8vKnzRqTfWTPoc3hy+xopXtH/Io2+p+Kl16U3yWA0qaOBII0Leckh8zexPRgR5eB9a8R/av8U36fCfxJHcSoRb+H72UhVADSGMjI78DPT1r3O5nhvktZoZV2vIjJjqwVCSRXzp+2VMtr8DvEsfmxRkaHPGobALfuYgeCefvehxmtc1TeFfL3X5oxyuUPrCcorZ/kz8gNP8AiN408M6XHo2j3EFvbpI7IWt1dgWOWwzZ61i6l8VPiRMssP8AwmGpwRM+4rFOYgT64XHpVe9Ma52yMduflY8Vg39u/mKrbiTjI3ZpxtL4iqrcdYsoX2papfTPJqGpTzs/LMzk5Pue9aXhOOGW8kmkba8NtK6szd9uO/1rMktyrFfLwf5V1vw309Li61dp4ldIdMkx8mcEsBkV06W0OG0nL3mei/DnSbzTvDkEF3ahDJmQtuGGB6c/TFfot8MYm+0eGdMDLGXmskJkbYoA2FiSeAMDPNfDE0MGn6HbLIuEijBbPH3V/wDrV3+uft7aLZWyWem/DmzujHCkR+23pIwqgfdRe+O56dq+Uz/LsTj6tCVGHMoSu9UtrH0GTZhRwEaqqSs5Rsj9HPjRrXgTXbWabVPiN4ft5LXw7rtj5S3yOxe7tI4RjB67g2B3z9a4C7/aA/Z78P6l4K0vUvi1pi2Hg+7kuPP2ttVRpQtowoAz9+RwOOqntzX5N/GP9oO++L2pWGoXWgWOkxafA0EVvYMyI4Zt25x/EeAB6CvOZPEDSK6mzG3C+YNzYO3pnnmvrqVapOC5oWfa583UpU4StGV16H6I/Hz44fCXxH8SLM6F44bU7a+s9MtdPurqJxLehVEXnH5QMM6vzwOD0Fe0/wDCX+A7OaWz1Lx94etmhDK0a6lC7gj/AGVYkjPtX473WrR33kySWqN9lRY49wyFUEkDnqOT19a25PH3iaTTo7BdUms4lJbZbRpCmOeMIAOvrXy2d8MQzmpGpObja/TufR5XxBUy2k6MI3X4n1H4us7X4hfFjxjdafeRXVvc6xcpazLKyRNDGifODsJbOVx0rn/EHwZ02FoNY1e5soVtFKK0uoFI1BIPUw8mqXwJ163h8ON4gvpJPJs7S7mmZjljj7MvX1JBH41cuLu6uNZsPFHxM0kyaRqSBrAbyYLHJ+XenqRg5PrnnoPo8Fl9HC0YQtqla55cq9fG1JS5mo9tNX2XmUbbTvCB0228Oxa9oKpZgxxul4yl8kk7pDb4xlia8c+Jem2Oj+Kb3S2nJjhxsaFxKGJVT97Cgjn0FfT0moeFfOENza6FLaXLCIo00ACqBx8pOckt2HYc9K8A+MXw58QaH4lbULfw3fQaFfXMq6bOYmaKVUYK6o3fac5712xjy7I86rOnJWje/meuabomm6Pp0VuumwxzwfuHJbzclVT5gSBwd3THBB61w2seIPFEdndzWevTWk0Vw0aRwxxxqqCTA6LknHvXpOofLNOhz81zcED6TMn/ALJXlyxNqs97Z3EvlQpKWdkGWJ3EgVxSVqjGm3FHH6l4s8ZrI2/xRfOZMDL3DNjPJxk4HSqFpqmtalMgmvriYmTyyzsTnmtrxzoNvpcdpNZzSF5RKWLkHhFzx6dax/C+oW8moWVmLfMklxErNyckyDk9h1xV7oj3kz7P1OHy9MC8jESL+q1meOI7hfBW23ZUdokUMy5C8ZPFdBr0QW0kUf7K49t1QeONNsbrw/YadqF81lb3UttBNOpAMaswDEZ9s/hXJUi2j0sFBzrRXmvzPl66/wBYx75616D4aXb4XgZeMQu36tXBXS4ldc5VWK5HQ89fpXoWipt8J2/BJFs3Tnrn/GuPH+7Bep+j5xpRS8zxPVvCtizR/bLy1WbhtqTcewKmsNtBmaR1ilhcgk792CB/hXU+PPDHhm1mXVNS1S6jnkIfBtgg44C9M4pdK8Px/ZZGhvpLjK7l/cjP0rejUlUp80Xf5H51iIQpzaat8zn5L4xqrLv8tMKCJeM9OK9O+AfhePx58QLXRxcXMDSWty6yQybmULBISNuRkHofYnHNefvoU4kY3EUzEYwAg5Oa+hP2M9Jt5PjJG/lMgttLuWbdFxhkCHn/AIFW8aDUo37nbklSNbH0oPuj2H41aHJp3xO8XaZ4dt4lFjLaRwRxSkvLIkMbOpcjCgvkD0J5r7luLzRdY+HNpcareTx2l/DDdQ+fEYtziKMrGpwDxKoI67gT1Br4t/aE1SP/AIXV4t1CyiSXT7fXRJLdRz5DIluI2KxrgsdwCleQTknmvrjRfEGrWvw18HanqUyz2cvh200+40uFRIsd1LGFhuBIw5wIzkY4+bB5GfMxMFWlDl7/ADKwqk60brVv0f8Aw/qfn18aEWb4zeJroLyknk7R0AESDivAvFEX9jeOm1xB8sS25KKxy+5WU/kFyRXvHxkuobX4neM7u6kYLBeXDEj22ivnmWZtUu2vZLV5GjuJfP8AWNeOGPYbSOe1ddSLeOqS6bF5xd5nUa6P9EbHiJIb6aPUrNYorG6gMjSyNt3BeCwJ/wAnrXMfDi1/4Tr4hWHhW1keOFWmllm3A7o4lLfJ6lsD86l+KXia3bwna6PZ7kW7kBPzAxiNP4F78fLnPevJYmmhcTW11JE69HjYqR+I5ruw9KLXNI8fF4iSnywPZPi5p+keA9Uh/s+4kuvtjPvhkfa0RXHI74Oe/pUnwxTT/GMxt7y3Ty1RiY9xbJBGOeteJXMksjmSaZ5XPVnYsfzNev8A7P8AMP7SKliP3Tjj/eFGKpxUHJLUjDYipKoot6HtOh+FNHt7200PI06xZpZDMjbNvGSdzcDB7+9epW3gm1OuabJbabPHcae0t1JEo2MSzAMzL3OR0GAea5nSdMivNY0Fb63mNvP9pYbk+RwrAAp/e+Ycj1GK+h9O8JatZt4ivr7UrHU4re8Y211b+Z+6TJzE2/nJyhwehDelediXKVSjC7Wl3+P9M+rzKbo4enrb3F+JhRyMr+XJkOvr6Uk2xY428zawmHfqDkAGn30EjA/MQ4OQ3vVRnkaB8fKUK7lOOCDXUkfJOQSrsmO4YBG7/gXqKrybRdQjuGJHHsTU7SeZuZP4QD659apTTSLN8oBZY5GGenEbEU0ricim0izYyuCMEDP61ka08Qs2h4ye1RLqk0W5pmjG8Z2/3enHvzmsXXtajjtTNcTDCH73ueKpR1IcjnX8Uaar/wBmfaB9ptL4Ws6n+AzRGSPn38p/yrntQ1h77V7vTY90UdlNbsJtpw+4gsv515rN4sHibT/FmtRwtDLLFDcWxQ/de1uA8ZPuYzKM/wC1W7qHiSf9/NqKCKOzkSSHymJ8+M4boe4x0rlxSVrLudOFnF8zl2NvV5n07UNXmt7GKC7d5oY1DDM/zEq/oPx9K8v8UeEfHPiaO28M+D/C+o6n5aefcm1hLAYztBPTnBPXnil1TXbvxNrjXlxM2yZzhSMYXJOMfjWbonxm8cfCX4lXPiDwfdIUjVLeaxuMvbXKKowHTI5B5BHI/E0YejVhzVKaV33OyWNq/UJzgrJ2jf8AM801CxvNLvJrHUbOa1uoPllhmjKPGw/hZSMg/Wq5P410fxI8c6x8TPHGq+PvEEcEV/rVx9omjgBEcZChQq5JOAFA5Nc3XsQ5nFOSsz527Ksw/ekdqt6LdWtjqltdX1qlzbJIPOicZDp0PHrjkfSqUmGZvrT4fvBevNPctO2p6lqAsYby4t9NtZ7fT7iBLq0WZNuFIw23k5XI4+tcbDJ5Eko8w+UueOwOaZo+pahd31na3F5JLEqGGNZGJCJ6D0HFS+UPOuyyuNj9McEVzOPKeviq/wBYwkP7rsVJU/0gt5O5T8x9Bnp+VPaRXkAaSQlBtOenHelVkRtyxscdEJ7fWnMvmbmw3mr859T7f/qppnkXImuI2yqMCp7nrj2pjYB+UHn7tRL++uCY0+YfdValgVt27r/StFoWmSXEZ2CNuNwB2jvWVJlboq3977vr7VsXW5QqyMTtwGGORisxo5RMzQxZUE4brmqgKorSLWmqk02fuhQx2rnitOwaO3vUQqGSb5MMOnGelUdD3w6hFNcLtTkE+lachs31rdLKuyUqU5xnI5NW0QnqdT4bg828MKquWkRRnpycVZ1vwZL4f8Sab5NxLcWJm8xGlPKt6AdxjFJ4SjV9XWHkjfGMf8CFdr4w0HUdNuobj5J7KSQN83LW78nC+i9q5p6WPocfFSp0peR4VqDNHqV0rZVnlcnPuxxTfJjaePzNuePwqz4muLeTWJ7i1Urlv1rPhuAqhtu4hvWrS0PAmtWTp5cJdvMKuWKjA6+49KZceZ9piZzyAct6+tLuV3MikfePy+1SrH5rSblYqq7l44FGxnsQyFfm2k7R3xWl4buEs/EWk3jHKxX1vJjHTbIp/pWbDh4+VOSTx6/jU43B1NtujkQBhn1HNWnZhufuNcXS/wBpDyUZluZflkVeMcZ6ewz9K5X4e6JJefEL4jyR28sUVt4mjut4CkxebZREj0OccjIyK+UdD/4KWw/2bZLqnwdll1O3t0F1Jb6yIoZpVXDMqmIlQx5wScE966/4sfth3H7OnxM146f4D/tpPGdjpOtfvNR+z+QTZr8nEbbxhuDx3rp509jCNKW3c6D9trRHh8Fw2t0pDSR3ixblGci3R+McDlM4rwLwiLePwrp2r2qCDdYxtsydjNtABx0696Txh+11qH7TmuaVpereE7Xw3p2mx3l0Y0vHuTK5iCBSdqYULu4AySRzwBXCeGvEmqWXhGz0ue2kEeg37WF46kkxoG+QuOww2Qf9muSvZu56tCEqdOMZHslhLDIsMxhWHfCVIyBhs5YYHQ5ya+XvjveSP8RNS82SRlhESQZIx5ewEYwPUtz9a+itNuIZLRJJIRJM7SQqoALOEbBxnjrXz1+0Unk+OIZmj8r7Rp0T+W3VdrOvb6VnRVmFeV4nnySx3jG3hj/elcsXYBc9+3pUnhuTy9SezjYlZV5P0weKwvNkU7lIya0PDc/2fVofmGW3Ln8DXScZ2en3X2fVNRtYbM3JuY4UaPblWxu3Z7Dg9++K5LUJYZLqX7LbiGJm4HUj2rrrOa4h8RbbZVPn2RVyeiAN1P8AKuc161ittS2RyEjeCD7d+frUsW5HNDJLbxSSXG4ldgX+5jt9Krwx+Wq8nDtxVi3uPs9/DJHH5ixsp8tjjd6rxzjrSTHzrq5W3UrG0hkjXrtHdagGwGRb3CMoGFYY98VmWcn+iIp7VqKsbM6/N5m0g1iQBo7cqQQQemKFqOLLa3TDeqseRgGq00jeYpyRnIpF696bMfmRuOGrRaDuaui6lNayQ+XM0TKyyRSDrG4PysPp39QTXuFjqlv4w8Ow3UsYjuEzDcL12SDhl/qPY14fY6Lrdzpp1Sz0u6mtI9/mTJESi7PvZPsOT9a7f4e6rNZzXLSzMtvcW0czNjI8xGK5yOmRgfgKynC5pCo4blbWdPh03VGW3RvLOHwOAD1IOf0FZM8Mq3W/TcFZVJZN27b68+9dh46ZdQjjvNPPmclyVOPYnHWuI0+6ltWnEUzRiVNuWPQdce9ZpFVGuhs+EbXUb6xubuz8hgjlGbdhwue49OcZrvvh3NrHh/xUnnRvHYTyCO4jkX5XyQRn0OcEfSuB0fVp7SIXGktLA8OYmlXjf35GMHI6in3HiPxbJanTL++/0aR84iK4LDgc9duD0FRFVJSfLsbUMTSpRcal7s+4P2db+9079oyyvIdVk+zQ+L7CKSyGNv8ApCxK07EcgfNtGeODX3b+2pBH/wAKdk1KaURJZXQkaQ9EXy3yx/IV+TnwZ+PXxGtfiL4Tk1Cz0ZrMazpyyzxWoG5FuEHLK3JAz1r9fv2tdOfUvgP4kWOOORoIfOCyJuViARhh3HPIrsTTsc1/eTPxhmuNe07RdJv1uNPgaeMS28lupdle2u8tLcBuGcCaQkD6Vv6zp8un6l4u07XPFVswbRlk+yNEga7uHtSrSqPvceRnaOOa851D45eMrW3jS68J+GmhmV9h+wfId/8ArMDd/ERz696oX37QXiG+uRfah4P8L3NwPlEstiWfbjAXcWzjGfzqtGU5I9x8YWdj4l8K2lxpt3FcrbTJ88JDhGER4OOARuGR2rwO+m/tbT5LWa3uJHtpAILuEKFc7gOSeDywz7HNaek/GjxBrUf/AAi2neHdF0e3lLXAGnwMpLqufu52ncBg57VzGn+ONU1SS38NR2NjaC5mWFZsNhGaQHJHPGeoHNcs6XNUvudlHFKFPlTszP1jfBC9vKWZ0fazx4KNzzz1x9Kw7lclVZ+D0yeleo+IPh3cabol7fLcQSBYHZY9ky4IALY3IOw4zjk9a8xvFluikMKEnb8qjkn3rSMPZnNisRUxM+ao7s1vCHifUvCuqfaLf95A5Bmt9xCyr/Q+hr3K38eeHbjS31aCdYUjUSbJeCvqp9T7Cvn6z0fUI2aaeCRY1U8+W2PWuqXTLpdHsJ4ljeG4tLkM+fTkD3Ix/OiSUiIOUUJ4q1jxf8RpitsFWwRyI4fMCbv9ps/pXON4J8TxsV/s0uenySof60/VNWvmWCzkigaOxQKnykHafm5IIz1x+ArNW7uFbc0fG3GNzcc9eDWiuiW+bU+gv2Io9d8H/tUfDTWL3TbmC3GvwWsr7eAs2YTkjt+8ruP+CpnhO80/9sHxHfWdjPJDqem6debkiJG4wBG5A9Urwn4H+JpdB+K3hHXnR1+w65Yzj94+AVuYznk9h/8AXr7B/wCCwmmto/x+8Ka8ofZqnhfY22Rly0VxIP4T2Ditact/QEj885rO8twGuLWaNc4y8ZGT+Ndd8ONQa3mvIGmCAhJF3NjkccZ+tY0moXGoLIsTSCNdzbHmZ1+XBzz360+HXbiFNqw2h2gfei56f/Xp063s5cxDp8+h2/iz4ifEDTdWWPR/FmrwW7WsbKsNw2wdQcY45xWZH8Xvimihj441jjpulz/MV0Pwp1qx0/StQvdZdLeD7WpDMPkUOh7+mVr1vRfBZ17wp4e1HSvDsOpRG3VZpocYk+UEdCCecjg1M8XJyYvYqMVY8Jj+N3xWj+VvHGoMuOAwjbH5rTo/jp8Vo2JXxhce+63hI/8AQK96t/gTrl1JBqF3o9qWluN0lnIBhU+YAY5BwpBwO4ryybwTYx2upS3B03m4nitH+Yk+TclXHGO3GOp/DFVHFN6XBUr9Dm/+F3fEZrhLiXWbWSZPuyyafbs6+4bZkVor8fvic0Xz6nYSAcHfp8Tc9u1X7fwfot1ItnOtki7/AJpfNJwPLbdgrzjfgjPGDXNfETw3B4XksV+y+RIz5ZTnDgHJIz95eQPxPXBq/bStuLkt0PS/h1421jx1oWvNrVxaLd2hjEHkRrCcOrZwB1OR+tbFzprMq+day7guNxyDU/h/wvosPhG21zTbG3t57xEMrRxqCzplc5H4HHrXT+PNa0Dw3pNhr2vTeRbzSrA8gTOC6Fv/AGWvPnL3rpHbCN42Z49qXxD+MDWg0my1C1vY4V8j7VY6essgCngeaEweg5qf4aeCfFeoXOr694o8feH/AAxa6hGftE/ijWI7eXUpHBA2rteZwpO4nAHABPQV5zq/jLVb7VbhtQhLQzytP9lgllFrAzHlVjLEBRyBkkgd6mj1Gy1K702x0fRLSxk2rDJOpDPdzsxO456AZACjsOetTKlWqx5VKzfzO9VsPTmpRTZ97eIvhvb/AA7/AGL/AB74g0rx14b1xtR8MafbtHpFzLII7ee/gYt+8UEKx7H5iewrD8A/tAfD74V/CbwPoOsanqP286LBcPb2tucK2SQSzEKSCeOuKofHL4ofDDSv2OZ/BPg+1t9O8ReIl0m11Wzkvry7nAt5RISHeJYFG5MkISPmwM4rkvEGvfDDx8ngbwf8MfhGfF3iGy0O30+/gsNHvx/pCopOZHkIkJJYlwFQY9OnNmOX/XKMY1Ht29Dmhh8s9pUjJTcXttu9ZX307HQeOv2kvDfxOgj02HWtctV8/wA1vt0n2pZODgCMYVTuOc5rn9D0vxL4guDZ+HrWfVrqRsLDa6GJ3APH3Rkj8q+lvhT+yRo/hu0i8T/GD4e+DdFikj3W2lRtJc30r+hKuUXHfBYDua9Yg+GfxI1i3TQfhvrfhnwR4aMqySW0OjNLNPGCf3czK6iQEdc9fxrxY4ajS9yO33mlXA5eopYanbvex8ZeKPgr8btDs5ru78FzwWixRu81vYQXZZWGTIQgJiGcjAyODzmuRvo55Iy2uWdoZlRY5NlmsR3AAD5FAAOBzx6k1+h3xA0n4k+EdQ03+zviNpbatqmntYi8utCjS3gSJgVWCFGwuAx++Xzn6CuVsf2b18d2urXfxa8cjxBquqJtt/s+nQ28Gn/7UOxVfOMDBOPY1tF04vW3yMvqNJxvGK+4+MNB1TwP4fvbTRZb5x/wk8clmFt7c7Y5kYGMSPkY3MeMZxmsH4h2PgnTfBd1q1x45ub3Vkc40c2JBiiHUyz52sx+6FAz3OOAfZ/jb+wP4203RYf+ED1i01EWErXEZmb7PJzz1GU3ZA5O2vkX4wf8J9oNnPpfi3wlqmkvMyyTyTLmGTZxuRlypye4PevawGMhGLgn6HdPAUnRpSoWTt76v57/AHdj7c8LfFnwQ/7Rnwv0X/hILCKK0j0tZ5XkCRW+yMuyO7fKu3HOSOfyr7r8RftEfs36Ywj8QfGPwSHhkSQR/wBswSMrryp2oxOfTiv57LHVpdPRvLUOJCHX5iMHH3gR6iq0mpLczFo4Xiu0be7q/wApXjYFHYjByfcU8HSo4Wlyat7mmMo1MXWTm7LpY/ePxB+3n+yD4Wtg118VrCYRHYsdnY3MpHGMAiPHQetfIn7Yn7eHwM+LXgqfwH8MtXuCupWslpcXV1ZtAi7mixjOWI2xkEcdq/OHVrrUrvQBql9IXWXUGiD/AN5ljUn9HFcnNMxUYbrxW9WNOtHltoeU08JU03R6nNoelQqrDxhpyKPvAr1z7Zqheab4TMjSTeOLUFRhQICc/TBxXnjNZ/Z9vk/vsfe3HrUUnG32UVj7DzD6030Om1JrGO6WPTNSN7Gx+eTy9mD/AFru/hBaNcQ+I58fILSKPk8fNJ3/ACrzDTfnVD1IZifoBX2l+yH8MdH8Wfs9+O9XurFF1KXxh4f022vxGGlhhYSNKqA8HduHB4OB6VcYdClK9NzZxvi7UdJaym0y41S3jYpJC6iQErxt596+ctStbSG4e3jcMYxs3LyG96+i/jlqPhz4d+Ntb8Jym3kRLu4igm+wfvJI1kZNzFTgMcHpXj39nXnjwv8A8I3bQKttG8gjWMRlgMA/U8inTvBsyly1InEfZWwSqt7Uy6mNrbmPyyCxHze1W760vrOV4bqGRGgYxSA87WHXpTNNs9R1a4js7GHzZppAkaEgZJ4HJ9ar2gnRtqULeRGKxtxH1OFyQO5q1G1uuoRLE7GNBlgxyHI7fyps8JtbuSzljXzYpGiZlIxuBx9DzUXm75ZFj6hcA/z/ABo5xqnI9w+HdrL/AMKh1C4t/ulWaUD+4b3BH0/dCvVfijDfal4Zgms9atbDRjZMbpnjLtjaGRkVckkAcAAnnpWJ8ANDt7v4c/ZbyESxXliiSL/eDy3DH9GHNXXsdU8JtbaXr2h3Wu6Rp8vm2F3bZMkA7LIg64/z6V0Rdhq9WHs4u0k7+v8AwVY8pi8B+Erm8svFH9tR6tpdpNF9r1LTI2AicEMN6sPm6Dke4yCMV9e/HzwD4hX4M+ALC30+GK0ubp9UULh5L43UQc7T1RPLYtj+9I1eQ2viXQfIu7Xwx8Pb2Se8VovJWz8qGRenz/wqCeoA7c17/wDHb442P/CN/DrwK2m6PF4j0m3WzuNNkupIBbwpDHHGPmQl5RsYFcjBUeoqoWQsXzyUZVI2l+fnb9T5+ll83bcbv9Z5knA/vTSMP/Qq890G1Ekd/cbwMzgMB95u+QPaupvvEmgaTBBZ6nrlhbTPaxskcsyozZjBBwT3zXLeF9U0yO2vFurtIgZA6szDDAgdPUV59rzk2SnaxzPxbtpGbSo4d5CR3DsVOMfcyTWX8OdFW98TaOq3I3PfQBsrwR5i4FbnxM8QaHqEcUen3omkt4JI90anbliuQcgdNp/OsD4P6g03xM8K2KqcT6tar+AcGqSurETdqh9v+I4NlnIQDy4x+tUPitZwzaDbWdxdQ2qTFV82ZsIjBCRkjnqBW94kT9wqn+KVR/OsP4yOsel21vJna6ysdoB+6noTg9RWFZbHr5QubER9V+Z8tzfeOVxXpdnGIfCKcKNtovfH8Nec3Q5ZSOevtXqMMezwxCTkf6Kg4Xd/CP4e9efmWkEfoGd6U4+p4z8Urjw/ZLbf2lpaXdw6r5Y+1M7Yzxgduc9at+GRayRho4VicqN37wg81r/ES+8RR3cOn6PpqzKyqWmexESr9c+wrL8N6413M8N1bywqG2hhbgg/4VWDlahd/n+h+fY5XrDLzQ9RmvHmW+iCk/KjSE4r339iXTQ/xYvzcsreTpO12WQnhp4FOF+hNeZ3mg61aq0v9l3m2MbnxChwmMk8H0r3P9hjTb+b4l6zqNvCHj+z2McTMAAZGuEZVPfkRn8q9KjKUpR7HRkKjHMINdL/AJG38ZrxdP8A2gvFtrZ/aJobvXpY7e2to9u1U/1jbiQFA3A46nBr7D+FerPffCXR7ybTvOtotHa3tZ4dwkhLCRpPNQ8BT8hDD+99BXx98UNTuovjn44vdehKzHxBd28MkLGWPa0oGwqAOQ/yhsZx7A19J/C0Tap8M9FktY7uztdBN9F5ocNBdfM3mRjY3ABdMLIMAoCAa8TkTlFP+Zfmv+AdmGTnVhGXlr/w3c+DfjNqWk3nxP8AF+g6hqKQ3V7fXJRNwDOPOOCvr92vJ/C2nyQ2v2po49Qju7p4FsAHQzhSV8xivpjnJxitr44bbz9o7WJ2Usumfbb1mI/iEsgXk+7CvO9F1i+s7uOGOIvIZj5aNlym7r8vc55969avR5cRPle+phmtTlzOt6mt8S/CMN74SuvFFxI6XFq2YEJG1Yt+3YqrgAcnH0rzfS7zTorCGO5t1keMHrjn+tej+KNWmvvhnr2nyl45bS8hYjoXVn+bIPT5geBXjAyzFm54q8HztSUns/8AI8KpU5Krk1e5o6teWM0ckNvCoLNuHyD5fxHWvUv2fbFo9Sudyhm8pvwywxXjW0bgPXFe/wDwJt5IdSvFMe1toVv++h/hW+K/gsMJ71a59W2Onrf6f8L7F7qeyaOz1S5+0W7bZFYXhII9CNoPvX2v47+G7ab4XHiKz1Zb/VLqNluLn7MsMdxFKhLSOq8FtxDbvU9K+N9PVoofhtuT5W0nVWJ+t444+lfoD4yTy/gvFNIiB4NJtmLOAdreWoLc9wM4965q0V7kuqSPoOIKjU6MFtyRPiq6O1QqnkfL1rO1BFS185f9YMfj7Vbvg/fGc5O3p9axNa8SaDZW4s77WLOCZjtVJJgp3Dkj2OM1jKpGnrJ2PnZOwy3vI2ztZu4YHsagmuMXGeOI5fw/dtVGS+s5oY7qzuY5FdNyOjA7h+HUVQfU/wDSP3nBMcg68H5GxzWlKSnqiHI8Q+OWua94Z1S01Cy1GaKxnh8tVj+75oOTnt0x+tefXPxM1zVPDN+t5dIBbRMYJB955CNqrxwcFwc+1ek/HC80m68F3cOozbXTEkbAZMbfw/mePxr53uE1aw8OxNdWpWKaYLGu35YkAzyf7zM2ef7tacnLK9yHJv0Og0/S7+3+Ht3NBGY5ZCJDnr5IwMj8P51j2+q6lcWcNsZpJFRisY6sc9vfnpWdb+Ktat1NrDeM0M6GCSGT5gFIx8vpxWr4XaOzuAu7/SCu6Pd0Hzdfrj+dTOOmpKlqkmdS2hyaLaRLqSxpfRzHcqybgUPHTtg15V4ik8zXr9vWc16z4q1Cadpri8t3hm+0CMDdlSpAbj2zXn+j6Cl5r91qV4vnQLI0gVTx7E1VGoqcW2evi6kFgIU49/0Mx9Kit9Dn1G+t5PMJVICWwAx6fXjOaxCcdTivZPB/xB+G2j6lJcfE3wS+taVG4FjDb3W0qMYLGLjd653in/EOH9nn4gSXk3wna98Lapax+dFZ34b7LqJwD5cOSzRyZ4AY4P0qIYqSnapB2fXojw1fseHTKFbcB1pIT++Q9t1T3Vle2TCO6t5IWPIDrjI9vWm28X76Ld/Ewr0E01dFo09EXbqVqG4KNn+dW2vG+0yM6uFOV4PI7g81HoKedqEHmZzuYH8zU+q7rPVJ4UDAK3Q9NvWsWuZnpSpy+qc3RP8AQrM8yuzcc5YjGBSNKgty27JK5U+hpYWE0Zbbv4JZc9M9CabIqRxss0bYK7Vx6+9JI8wrxqytvi+XI5PrVm3VV/dtv3OOcfpTlgKQeWzpmYfKByQf6U2MSMo2jLj2pt3BiXBkVTu3H5c/him2WDaodo4FTSSb4zM37wK3l7R3HJp1jC32PcsbgAnt0rSBctxU28/KKjutz3lrFu2q+xcjqOTVnAz/AHar3R23VphgMf8AxVaNEo77wf8Au9YRWcnGz5u5IZea9l8e4XQ5ImbmOSN1PqCw4z3rxfwyzrrCGQKDtBO3p1Br274hLG3hiSVVAPmQjO3k5asJrY+hxj/2ai/J/ofL+u2d4upXLXFm8eH5yuPofxrMiVI8tIu4HsOxr2f4hWsMmlrNhWdol9jwK8XmRlcjqQeQO9VHY8CatImtRGGaOYcvypU9KsSXcqW6xLIXT7rLtwPTNVdrfKDwR7damDIql5F3NuyApxSauZjRGqL+83NGnYHBqWACZSY8ArjHqfXFNEjXjHaoU4+7mn29uPs73EkgBiOAueSe1DBbk0bS+eyxsTvXk/419B/tmSSX2pfD7Vmdv+Jn4F0aVvdltlX8cbTXz/Zhm3tI+C69c9q+gv2oVGo/Dv4H60rD/SvA9tEzL0zG8iY/8dq4LcrqmeQ/B+8js/GOlNNwkrSQnBxnKnGfxxXqKXk8XxG8R6bB9oVNUt4r0IqBmlwpVsD7pBGSd3pkc14p4PZ49Ws2jHzNMYlyccsCoOe3JFep6yq+Hbnwd4w1C5a5+1xyW+oRyL8sQIIwR1yG8z8R7Upxudrl7sTpvAevmHVNT0mO6jlm0xyIpLjhFEioC20kZY7eQMZJJ4zXEftCr5eveH7q7mW8luNNPmyMmN7CQ9McY54Aq54es7241Ya1DFLa3F1tufMWXMmGR2DkdOduNp7ECqfx+kmkg0H7ZGFuImuVZlHylW8tgVPZTkMAeRux2qIppmMneLPHrjyyzSKuM9MdhTtKYrq1uf8ApoBRNGUwxXKt/FiorViL6FugEin9a2Rz3O9slij8Q20zSEebbS7vm4JXGB7ZrnL3z7q+LTQhGk+ZV9R2ArpLf5ta0ssuQWlj56HMZOD7cVj3tjeSXdzcXh2CLHlk8554Ueqj+lOSBalJrJY1a4a8UsMDbHwwPPGPbFVrdvKctlue3SnTB1zu+XqCR0JpkIm3bsblBx61mJl2JYw3y52v0yeef84rKV5VWUXUZILbRuGM+mDWrbo+9dwzt5X6d6p3Ui3DTRtMMx9V7DHYVKBGeOKbNwob3py0yc5jO0YrRDuexfCSMX3gvVbTkjfdxnv1hDevHT9TWB8OWb+0rFAeJrW4iPpwVb/GuR0bxJrOkWs9jpuoSW0M8nmSooHzHbjqR6V0/wAP5Vj1rScEf8fM0Qyf70RI/lUxhZvzNJTckk+h6frmltNpu63CCRV+Qt8oPrzXj2qWk1tdTwFcqoOdozj3zXv0mi2d3oq3C2sTTFmVmIBzyc/jivNNY0e4j16SO3t2ffbzBQqnPAzx69+Kx2kbTjeKZxljNPCpmtY5FjIG7Cnk4GTnp6fnWvaxTXkMUMrmbDKAQmWXJPWsSxuGhWOwvpmWLmSNGb5AW6nj1wPyrT0m/ukdlhtQd67QzKBhvXPf8am7jLQ4pq7Ok8M/Z9K1bTdRQeQ8E/mNJjb8ynIzz1yK/eX41LB4i+B+rXhy6TadHdowbHXaw47gg9PevwQsZGmkgj2xpI74KlCSoKnLV+8uhvH4q/Zf0qZZC633gu1lDN1J+yI2T+IrvraqNlYzwret3fU/BPWdLK6tPZt921lnhaN4coxWVgAQDn6EdOK5i40FZv3kMjQ7usckTHb9GGQRXqHi3w3fP8RvE1rZbHFvd3kwiCndhJGLY9SRjArhIrprfeGIEduCWIUjGTwBg+/6V0vDwklfRs5pYipCUuXVIo+EbdbHxtptu0iyByU+4SDuRuNo5PPGO9WLjS7HRn0vXdPEvm2uoxm58zhciTIwOqgFCOao2UwtfGmm3DcIl3FkqCpwXx1PtVjxdrF1Y3mr+HIobYwC7d9+GZsbg4UEnpnn8TXDy2lY9KnK8bn1JrWgx3Nnfwx6XdCKWzuESc6m0ikGI4zGW5yTjn0Br5X0dE/tDTWbkyZib8VOK+srNbe9bR9SazsWlubePbPJNsmXcmCFT+Lg4/Ovk+eFbV4NxxJaXxiPbgOVP8qqtGyQr63Ozs4GukntpNzBoZPpnsazNBmW68Nx2spwY57uNc9swlv8a2tK+S+CjoxKgDqc54rN8H6dBqKXUIkCyx3YEYboC6SJz7VjGJ0SleJxF9Gtk08M0KyPNCxjbd/qzu68dTwePeqlgsc00MUyuyuyowjxuYEjgZ7+lXvE0ckWoMrdF3KM+vGfw5rO0+U291a3Gf8AVTRyY+jA1qzBM1tCums5kuQ37y2mV157jB/mK/RL/grnAuu+Ffgp8Qo1DLqml3EW4d98MEy/zNfnFHIpuL3y9pHmZX6FyAf1Ffoh+3RqGo+L/wBg/wDZ88V3NmkYtobS3lbzdzrMLUQsuOhU+WTnPanB8stTRa7H5z6YzN5ka8lsj/vpDUbMrbemdmP5il0xvLvfLbj94gP/AH1j+tIu2KeOFlyVdoz781LRMWdDpN6Y/C2oWbLkyrDt9iJGGfyaup0/4heMrPw3YWPhfxFq1hp+kQLb3CwzeXGZWdirAD2IH/Aa5zwXa2WrPe2F9M0KfYp5Ay9QUZG/pVrXtJudJ8E6Xqti00dvrc8gmUt8sqxhGQlexDFx+FNRuU3Y22+IHjqfyWm8d62/O47r+TjHfrVODxHJHps9vPdeYguJZCPvHLOGJHPfOa5rSPEd3o9lqUK6fY3L31uLZWurVZvKywLMm77rY4DDkVVt7iR9LvAI4llWaNxgchSCCB+QqfZpy2HCrOEXyvc7Gx8SW32uFriZUheQLIGQL8h4P6VB8Upre9WDULe8tbzzLiRnuIYgplLKDuY9SeOnQdq46O4ut6NuYBiF6eta94xk8IqpU5geKT6feU/0rTlXYzUpLRs+iPh7r2nyfDW0gvrxUnXLKrq33TgjnHTrUPxfa08XfCGax064il1C0uLeWKDd80mx9px2HysTye1eeaP428Q6L4H0C30jU/s1rdQzRXC7FbLq2AfmB/hGOKoan488Y6hZz6DqXiBRp80e14ZYl2urNux8oz1Gay5Unc7aVKdVKxweqagq61exxCU27ykxrKoDMn8JOOBnviu5+Bvw58Y/E/xi+m+DfDt3qU8CEbbO33LCTxuZvur97OWI6V0vwrPwf/4SqLVPjV8NfFnjSytIkhS10G4WBSy4yZVA3zKOgCunfOelfqx8Hfiv+zp4b8DaNPofgzWfAWhahH5lha3fhmW1ifDbDlog6bgwwTIwbueOa56uM9i0oRu/6+YlS6Nnzv4J/wCCbq+LtWt/Enxo8RGHTbC1EMej6TIEOxWLFri7b5UzxkRjoPvivozQdQ+GPwh0X/hCfgZ4X0y2jziW6t4v3BfGCxYkvcP/ALTHH1rw/wDaE/aP8cfEPxM8PwT8M33iXwhol3b6TeWlrIpjnvpQ0iu0aNvmbapG1chAhJwTXTeANY+IV94D8M+MLzwXpltda8L0Npv71pIJLaRkZN6sQ+7aDkDABPpz5uLeJrPmrfdt+H+Z0QVKmt1+Z614d0XUtc1D+1NYnmu7mU5kllbPfoPQew4r2HQdNWyt1Ea7QBxXiP8AwsLxNoOm3N9DpOjH7NC0o3NKc7VJ9RxjrXCeKfjd8Y9Wlls9P8RRaTpwjLKdJsVW4c7sKvmOXI3A/wAJB9DXDWth1eq7IpVY1PhZ65+0+LjTfD/h/V7Sa2W6h1QRiOZgDJG6HIXv1UcgHHFY3gvxRb30IX9/DNEcNDIm1wfUZ4I9xkV8deG/CPiTxbpPiHxp4o1XxHf6jHrOq28NzeXBmlkkhdQkalyWVV6t0Arb0Xxp8SvD8mmafceKNR2zytHzElxHAQCRH5jgjftUkgHgCs5TpOUacZJuW3mVHEU6atJ/gdn43/aV+JOlfHK48B+GPEmjWWiabf8A2vUpLjT/ALRP5C4R4lG4b9xdBtGDk/e61UsfiFH8RPCvj688aReH7V4vEtlpsc9xYeXbWFjcna8k0bMEOwxuvzgckkn0851z4a/Erw74mf40XGpaUkVzdrf31xfTLAYrVpVZJCCACWkG9UVcFYwM5bFeX/G/T08O6Tr9iNag1fXfE9obyWztbZkEMZeM+ZknLM4YtuZRn58ADmuijUdVqEEtNL6b3PdhSwipznW+JyjZWfwqKvp5s3bX4f8Awp1L483XhHSNH8L694N0NvNEunzTWltqGpy2skts+VY4hIi8sIhALMOu7NeP/tLaLH4V+x6bptr4ftNHtNRv5JZbaVlnvblpWR3CSMWKKUPyp8q7h6iufu9P8QeFbObxXNeXH9pa1biBrRY/KWxkUghiQ+Q8flrsGOhOcdKtTjV/i1puhjW7f7Tc6fq8c32G2dmn1CK5mRGjiQ5ZnGHkc5wF5PWveqU5QcVzabP7j56NeUKftJX5k9L+TOb8ffCnxp4F8A+HNS8YaPc6RHrUj6jbw3DKsj28qqI5Qh+b5go6njjiuItPAfifWIjfaHoWo6nYwOBcT2to8iQ55+cqCF49a/Qr9n39n3wX+1t4u8QaD8ZLjWLFdDlgGjKuuYnht1yPs6xPFh1YfPnO4Bl25Ga7L4i/8E6f2fLHxVrXh3QfjDd+C5CttpdlBeXS3SytOodtxO1kYsmONyruUnriq1px9446lRV583c/MB9N0+OaaGa3ETRnZtO4MGGcg5rDk5Y+gr6y8VfsE/EbTrDxT4qt/E2m6R4c8PXVxZRzeIL4pPezwnbIsYiVgQW4DELknA9a8U+In7O/xq+FOkWniL4hfDXXdD0vUdv2a+urc/Z5Cw3KBIuVBI5AJBrWUJU4RnPRS2OanUp1as6NKSk4aStrY5K3s/si2yq3medaG4YFfubjgD8gDX6PfsA6fLH+zncXDTDydS+KGmwrHs7xRREtu/4HjFfEHjaGO18N+EoVs1idfDVjliFBfzHmcsMevHJ54r7M/Zz+JHhz4K/sd+Hte8UXC29xN49vtSt7SViklwIreDYQMEhSR97GPfpUJ+9I7WrYZ+Z87/GrR7Tx78bdStbq6+zp5NxcNK2QiE3DcuQPlHI/MV3f7Gv7O83xI8V3/h9dftdMni02/ntJpl3QXEkcqKFZhgqpU53AE8dK8A+IXxY1DxbdXV9p6adYQuymSCEkNIA4xG2cl8kbjz6njpXdeDLX4ieKPCttq3hW8tdL0iNjFcGMyI8MoCtIEcNzw6sMkdT6VD5tbK5eHoRqe7c5Lx94R1DR/GOu6bqFi6XUN9LDJBFIrIzeZjIYcbQOc55FY9jo50/Voby7aO3bTpUkkYHh1ByenU46Y/Gus+Juj32j3D6peecEby4I5JFcFikahic5G7I3Ek87sivLNQuEkxvkchz8vJwawpylOGjOzE0o0qmie239bEFw8N9dPfNGGWaR5NpHTJJ7UR6LqEi/arW1fYDn5Ryfw9Kjj1DVrSDzNJmCqM8eWC3HJ7dqr3mva9eRlm1C5KHuJCue/amozv7uxpPEUkk6kXfyPZPB9j8an8O2I0ODT1sVhVRIy3KuqkFkD+V8udrZx1wRmugFj8boZrWS8t7XyDMvnPG17u8kkbioJHON3f0ruPhbe6LD8NNO03VfEFnDcRmO4aK4jWUyqLaID5W6Z6bhWrfeKtDngjRrotLgRxIttENhwSSCQeDk/KP0zXpRjZI8CpPmm3Y5TxTJ40l8QT/8IFE8Xh/7VL9lXUGuGnji8xvL3HzOSE25z3zXGeO/hL4r8H/ELT21HVRrlpBqMEEl/ZrM1pJO43COOVwAxPI6g5B7g49Jm8Sabbwb7NpHlSMyllt41LsN5wR5fTpzjBwMd657xT481DVfGthZR+INQn8N6ncW2tLpNrNJLaRagsYEsggHAkLu+Soz8w9aaSZPVHz58RNPmvfGWr3UiKjTSK8K7Su6PYu3g9PlwK6bwzCy+GbSGRx5kSurfNnHzE4/AYre+Jy2smv2Gm/Y0+0WFhBFPJtAYuVB2k+3H0zXKzRzabP/AKPkZXJXswrlfY2cU17pQWGOZrmaeRsDMY79TXbfBfQxN8X/AArLZtD5VtqMTMCfmICknjp1Fch4g0260GOB5WRxd2aX0Oz5htkLYz7ggj8K6z9mq8k1D43eGbd2ziSZyuBzsgkP6YpWIjo9T7W8RdbZcZPnJzWN8cLezuNJit7htkhhneM7R95U37ckjBIUiui12Pfd6fGwOTdJ+PzLR8T9LsdQsb+C+tUmit9E1K7UMcFJEjHlsPozCsausoxPpOHqXtcRH/Ej47mAIJ6epr1e8Rbfw3Ft5220Ywrbey9D2rzCaHcT3J7Yr1nXbdU8OpGQMLHEOULg8r2HJrzM00jE+zz7RQXqeLfEKbxDJPCsU4jsuN26+3sfz6c1j6Qtxb3F0TCfKD5iHn4OCvfHernxM03Sm1KO9vdUwIyCtmtq0atjjHUHnnmt3xUPD8N6i+FWimtvsMMpEK+YBIYssu7uenXGDmpw7/cqJ8Ji4v21zL0L4kajpuuvNYwS3DMksc0ckplVxtIJwe4FfYH7A9zFN4o1e1t9PfdLdaPMfL+8QrTfIASME5/SvhjTV8SJMJodNlMRYqSkeDls8Z+lfoV+wHawp4imvLiFo2l1SwjjVhgHEcu0Z7/MQK9ehFfBvv8AkaZLG+LdS20ZP7os5jxw1u3xi8W3F1q4/thNU1Ce5jY5DRrO/wAxiAILKrYBHIznrX0l8JfFWlWXwp0jwjMNchup2upEdLfFtOWmYnzmOPmG3AOOm33r5g8epa2fxg1ga4wttSvdcu57h4coJHW6KBQ552nIG3jcBk19CfA1/E8Xwtls31Sxnt7W9eG8VbdlZ2aZDGEbccbRgNkc888V4ftOSVOD6ySd3br007/eenl1GMsTTlLy/wAuzPzj+NF00fxX8c3xPzSqLVW9N9y5OPwFc/pM2i6PdS69Y3k08kNk7NN/FHIpVd4X2BNdJ8SreNviZ4hvYryVJ55kaOAHiRVYknkdBk59RmvNtWZvtOpfZZhLHcQkb0GFYMQTt46Zz+VexUkp1pI83Npxjjqsu8mJa32m6roetG81BY/7TBZFlXLxndlWBBy3I6Y6tXCQ2d5Jsb7LIY92wtt4HbrXRaP4Uvtd1SPwppGi3d3rF35PlJGRkcZfg9iGBySOleo+GPBtvo9sqavpbSXFjqX2eawvcMm8uF2yY6kZzweoqK+Jhgo87e7FleVSzqbp7cqbv3Z4Zc6PqUDOWsZwiHqYzj8696/ZvsZ5oLq4kYliNvznk/Of8Kd4w8IwaZpM94t1IzAgBcDb8zAYz+Nbv7Pdmlvpdy0OVDXDgfNk8SEdfwrjlmKxWHcodz0cw4fWTVopSvddT6fk227/AAutSVA/4R+/c845a7k/wNfffihbdfgj9pmQNu0W1Pz4G0BE9eBgZr86viBJqkUPwyXRdNF5ef2G6rCSQG3XTjdxz3zX2h4/8U+NJvhtqNveSaU+ktotvv2Fhc2t2CnmR8fKyc4weRkcmtMbjKOHdONZ2ulb1DPcDUqeyqx2UF+p8y3GWjkZeCOV45x2/wD115N8WPh02vt/bGj6/LbS3c6Ca1mhDQxtgLvDD5lJ5zwepr2KaPc2zqDx9K+avjJo3jix+K0fiTSdPvZdIFvEJPKkPlyfKVYsucFlz6dAK48dCM4Xm7W/rqfI4i3J7x1Fr8OtL8O6en/CWawnii1tZFd4dPxHNBCVIcKeCxBwRh1HHNRSaUzrdweHPE0pu7WMyLperBftCKwyCxzuZSvQjcPc1xWj/ES7ttQew1+3eBFbEc3bHv8A/Wrt73S7LXbaPaqmWVT5NxGBuACsVwR1HJ/M15VGjKLvQqNP8Pu2MYRjOK5ZbHBW/gvxB4r8R3dn/Zt3fvDZCe/01LbfbpBLjm5nBzHGDs+ZBuDcY4NZvxp+C/jvwLoS+KLax07W/CFrLDp+r3GnMTFBcXROIQWGX2Ngb1LAMVBOTT9F8d+LvAfjq1vtFv2+SEvc2dyPPtrxYX3Kk0bfLJGHKsAeh5FQePv21PiN8ZPDtn4F8V+HfDljbTanDNdXelwyRGSON9wQQliinOCSOu3tk1vB5p9ajVhaUPtX0f3G1SrJU/Zqx4OPC6/6UWmjWTTroQ+WzYkdWztYA9V469q3fA+mLdawkkjhs24SJW4UvvO5c/7oP5133xb+GunQ+FrP4meEvFmhatFaQwjWLK0vla4sjK2IyY/vEA8P/dJArgPh/fCHWbMSbminmlwPLJ2koADnHTecV7Uq3tqMpI5KbctzP8QSXdjq0ujyS+TbW8rGGIc7Y+5556Vi6p4x8mzOnWUBghKBdoPLj3PYGuj8URo3jPXNQmj3wwNny253AKox9Ca4DUmuNT1BIVjVriRuQoxgnt7ACt6EVVinI055NWb0KF9eTX04mm252hVCjgAdqWzlktriK6gcrLC6yI3oykEH8xXVT6HbaT4fubqRYyyJjzCOWkPAxXK2+1cFsZz3rrhOM17uw6crne+MPisfiFo+pN4u8M6c+vXFxDc2mqaei2Yh25EqvAg8t/MBU7htIK55zXDQ/wDHxF/vD+dOZU+zvjGSPX3qKFsSxtzww/nRThGmuWKsjSTV1Y19C3LqMB3Y/fMD+da3i61MOs7lXImi3f41laKp+2xsn/PZzz9a6jx3YzSNaXyx/uliKFv9rGQP0NF7M96hBVMtq900ci0O23MkOVRmww3enqKSTzHjaQMCDgkU3bLHG0idHbn64qSMtFCyzQ5DY2t/dz1pnzrIGR7dlk9PerouI5EEisqHady561RLK3fO04B9qcsfzFR05puNwJ1/dR/MxRSwY+w74rT0mVIpLqFbnKhXILMO4yOhI/KsgQqbeRWGcHNWNBGLnaTjkdfoaqLsK508Fjot5p7t9uu3vhyGht2aNf8AZZdufxB/CsO6uLzT0+xRRrJFcMUaR7f5iueQpYZXOea7vwvdR2Ud0u1mJVdqpyT1/wAaxfGEiyeRMiSIPNYsjjBByDWnPzIET6A4/tJAqug8sjHdQK9C8YaX4n8P6bDG19caho1yweRpSC0Tlsr054x1zjmvO9ElWTVFkjbIZG5P0r3zxQzTfD+62qwxZpgN1I+X9azmrpH0GJd8HS+f6Hivi7xVY6hpq2du7JPEojIZfvkYOa808yRWZtoGe9d94+0aGz0zS9aiSQS3eY5sfdDKT831I4/CuElaN7klAdh6UkeHV3Et2K5LduAasraiZfM3jIXd+tXvDnh7UPE2sWOg6JYzXd9f3Edva28Q3PLK7BVUAdSSQK/Tv4V/8EmPCdrpVre/GD4l3E97JGrT6bocC7YmIB2/aHzuI5BwuK3hRlJc3Q4auJpUX+8kl6s/Li3tGZDMqfNH83TrzVm10m4uJzshbYf4R1Nft94Y/YO/ZD8Ixpt+F0+uOv8AHq2oSyZ+qqVT/wAdrovBmp/sk6Tqg8PeB/Cfw7hu0ukswtrpscjCdm2onmiMjcW4HzcmtvqrSvZ/h/mYUswo4hy+r3nyq75YylZd3ZaI/EHRfAfiC/YRf2Ndzo5HyRwsxbP0HFfSPxf+FfjbxR8Avglb6H4N1u8utN0e9s7iO30+Z3i2Xs20MAuV4YEZ65r9jxqtrpaRx2Oi2FvvkCqscIUDuegHYGta11q5ugTDbo+3qFySKPq8oK/Lp6mNLO8HVn7OMrv0Z/P34d/Zv+Nsd5bzP8IfFkscdwjMjaLc4dQwOOErtvFH7PHx2vbe90s/CfxXIiTpd2pj0md/M3OQyltvUBu3qT61+68OrJJxIFjIOMO23+YrH8YePtJ8H6YuoXWJy7lVjjbkgKWY/gB+ZFTGjOtNU4Qu3sd8syoKlzuaSR+Nmh/s+/GH/hHLGG8+FPi+GeC3TzVfR7lWBUttAITkYA/Oub+M3wJ+Mmp6PpY0/wCFPi2S5s5THMqaNcPmPaQrEhPQKD7ivtbx1+15480PVLuy0a907SLbz2G0b5XBY5HzSOzEkk+n0rqNB+M/xlvLO3uvEPjPUIri6tbm7sdOgtYUmu3syHvbA71/dXf2YieFWBWRe+K97F8K4jLqaqYqcY36Xbf4JnJhs8pY393Qi352svxPyiufgT8ZxC8N78MfFMSpyFk0a4XBP/AK524+FfxCsLmNrrwRr0Krtc7tNmB6+61+muuftYfFjS/EX9lwfFPzbK8jhu9LvltYRFfWky74JQCuVLLwyk/K6uvVah1X9p747Qx7ZPHepRx9fMjt7c5B9fl6fhXThuEMRioKpSqRafm//kTCtndLDycJxf4f5n51Xej6lZ3VgdQ066hVJiZFkt3GAVIOePepJorP7EiNHCsUS5jLSDfnGRuB5IOP1r77k/ad+K1yvlXXjiW5B4/faXaSk/XMZqzoXx01TUdcsf8AhJH8NS2CuWuI5tBsV8zapIUsIiRuIC5HTPat6vBGOhBy5o6dm/8A5EzpcQ4fmUVF6+n+Z+aWrwzfamlaJUWU7lwcg8dfT0rPihkFwVwR6Y7e9fsT44174U69pMesW/g34eaa67+Lvw/ZXVrNErEbwvl+YpK4baGJ56V49P4o+Cun+KprHxR+zr8PtY0eKYCR4dFWynkiIBMkbxNtGQcjORjH1rzKPC+NrwbppXXTr/l+J3YjMaWHtKron13/AOD+B+dC+YjCRicg4+grJvLdo7yc7SEfBBx1zX7H+MP2Vv2O/EWiQ+IPDfwnt7Q3Vn51tbR6vdWpkLqDGc+YdpGRldp9iK+WPG37Nf7Ouk6o+l+IfA/xE8M3PJjax16C7jcdmVZ4ASP+B1w4bIsbibqlC7XS6T+5sqpmWFo255aPqfBhVuPeoplbacdua+utT/ZE+FmqPJ/wiXxkv9NYKPLh8R6CVRj05mtZJAP++K8luP2YPi1fW+qXHhDw+vie30kH7VJpMvmtGnPzGNgsnOCQApPFKvk+OwsXKtSaS30LpY7DV5KNOom2eS2cTyu6hd33SBnHtXX+ExJa6rY+YoUw6pB8o7bgR/Wuft9H1ax1gaXeafd216iFpbeWFklQKCxyjDI4BPTpXQ/ZNR0u8DanZzW1xvtLrbJGUOzzBggHqMd685LU7PM+hNHbzNLkt8ZZZWb2AIFYWoQxR69prNtYyTlOB0yv696uWcazxzW+0MWwy5JHI78GuW8TW+tWd7YTWrQu8UylZXYjEhPUrnkdq5qi947Iv92eL3CfY9Tu4Dh5La4ljIPT5XIFbOkXzLNFM1tFL5biRo2J/fc9D6Z9vWq/i1YrXxZqzQCMlb2X/gRZicj1ByasaNdXMLPNCse+VWRlYKd8ZxlcHkH3HNKZxSR1sMgXWkks1m+zzlXt0mcGRoSSVZiOMjBH1Fft9+zPc/8ACQfsf+DvKdiZfCptVZs5+RHi/wDZa/DGFdHvmtLPU9SvLEW4dFaGNZBHuZmBfoWCk445xX7cfsG6pY6x+y34bs9Pn8+20yS+0yOTu6pcPhvxDA/jW3tHUjdk0qcaesT8q/iZ4ej0/wCK+qzXet2Vr/a2oPb28LzsJJfMjAdSQP3ZG7qeMketeAzTRQxS2rTRxSmYsSzviQg4bBA55/lXt37V0Wl+HvjZ4j8ySXz57MtGvykRXSSAIR/cyIuT19K42PxjdWkN9qN9NBfxxXMraPG4j3Wd0cFSOPuMJmOP9muyNaTiuulhVcLDmdtNbnlGoXCrqNrdLIjhHVsqSclWB71e+Iqf8VdqHIIkKv8Af3dVHf8ApUnxEW6XVvMvLZLeadWNzDGVEcdypKShAvAUkK2P9ql+IDedqlnebcLc6fA45GD8uOMc/nzXNLV3NILljyn0f4Zv7f8A4RXwxfedoMbCwt5ka+DCVDtAZkPbp+ea+f8AxlGtpreuW6/ch1S4I7ceaSP517L8P1bVPh34cU6Je34t7THm292kSod7jaQTkkdenceleT/ESMHxZ4oglhMTmbzhGzAlWKK3J7nntWlZfu0yOpu6aojlhZm/iQ8jtxWT4dLWniy6td7IRcMuffcSK0NB/wBKsYJo5ABsTAPfgf1rLmk+w+OJpMBVaeNznoM7Sf51mja+hi+NW+0XdvdLjEyK3vyCDkduRXOQxfwsc4547c1s+JPknXbJlQzJjrgq7D+VYpYxszJjIDCk97GaJ9PhWa7uY5FLMtvMyY7MoJH16V9Gat8XvGHjT9ivTvhjrN5aXGj+Er5W05PJVZoAs7HG4fM4IlI57AV86QPJb6kZ4FDOVkGG5zuBB6exr2H4a29vqXwN8aac+x3tYp3RmUblJVXGCef4TSvY0hueJ2rbbwj/AGWb8Rz/AEqe68tr6fy+f37EEeh5FRWYB1GBT/y1JU/8CGKs3UMpvI1WMGSWOPasak7iwGMDrnNU9hR0Zc0S6vbc3H9nyMJyksa7eSd0ZzgfRa9B1OO5174R6VHDDLusdWaFFRS5KtGTxgZ6547VlaPpGk+Bb6C58QR/2jqiN5ktjDJtS2PZJJOQz4Jyo+70PPFd5of7THizwvth8H6NoejW0GdsUVkjY9yxG4+vWkpWL5W9TgdJ+EHxF8RMP7F8J6jMf7wiKgfXPNdtov7HPx81Nt0Pg2aFZMHeySH+SmtS8/bK+NBhMK+MPsiyElhZWccWc+6gHnNZTfGTx94vjlm1PXdZvkjXzJN08kgVR1JGTgcjk+taUlKo+VENciu2jfX9h34wJ82pfZ7IZGd8Z4Pb7zLW1F+yTfQaNLpeqeLLSF3+VpfPs0QKGDfxT5JBrzGbxRNcfvRazSgnPzW+/wDpVCPxFNcXAhhtoA7MBkwR5Hb+7XZ9Vl1uZOpH+ZHsEfwT8G+FNLOi614y0/Vo4laS0mXWrSJbSViNzlefM4yNp45znisS48N/DLT2aO4vWvmY/M1tqVqQMdeiV51deINSs5DHvjUoe0EYwf8Avmq7eKNaViy3kQ9M28f4/wANUsMl0ZccRKK5VIt+HbrVtFkt7f4efEDV7cXbrO9urGHzIF3biSuVU8Y5ODuFfSmqfFSz/wCEZ8OfDnQ9YfW9QtrCO4utQt7p5bj7TJl5I+uAVLbSwHYY6ZrzD4W6b4DuPhT4l8Rax4Vmjt9FKSm5sfEkUF/EzoBHGttOpW5jD9SvzruOAa8e0v4n6p4W1ePXNCn2anAdqnPyup+8j+qEcEdxXhVsJFxc6aXP38/NnTTrRpy96Nz7Q0/4at4X1dPH2reF7bUtTuLVUubmxvo9Q+eTCq6xK7H7QoUfO64HdTXvNzo2h2/grwn4d0nS73QdS/sqEwahfakftKW85QyrO0JUJMQ4UsEXGSuMZFfLngP9o7xRqS2vjLwjCNQu7SJbW+0SLThH5M7Kd03nWyxlo/m4UyA/KA5wTS6h4p1i5vtRvtJ8QXcOkwJJOY9SvbaKS4KnaqraQsVYs5bCckcckfNXxmKWKcHCvK8nvrt5E1Icrv31PqTxNqFtqnh9I7fQ5LiXSoDDCbK6R45IyqZhd27ldpJx03E9DXL+H/iZ4D0280HRdSn0jRLy/wBSj0u4vNavRLLZ7mIbygwXaQT94LwOd3QV478NfHem6poGo2WsTajpFto2sRaleguiLcQ87lHJBZSqk4DNgAAc5r558XeA9W+I3jjxBr/jjxlo9m1z5i6NM1xNLHLtY7bcKkbuZMY3bscsSTzWWHydZjiIvE1Nd31v0Stt+pmpOK5T6e8cfFldP8J694b+GvijULzQvD/jDVW8Q+IEQrZt9qvW+zRRvn90JAmWVMlgAx45rd8H+B7iPwhZfFL4oajqVpZPqCxeG1ii89by5bd5k0KBtojjVArYU+Zu2A9WHxR8GhceHvFd3br4X0fxFZiGUedqulyXdjEYnGSgbYEYgEFgdwBwME19z+JPjlq2vWus6lofhz+0fAmnWqLBYXd4kVv4eItiZPssIhYbNhjVV3hgzMAcYI97GUMPgXOtGykkkm+l2kkuu57uUYGeIarqLcU/efbS++239XPMdc/aFvtQtY7FrXT7i9W1/sWIXdpIAkikb5VPzR7kLnG3OCcgCvO9c1jw/qHxY03XIfG2/Q7xZdO1fWE826FuvlKdgcruOQGAXk4JPTFcJoPiWW+8OfbIbeFPIvrt4kEfGZX3FscdAQBzxtFWYfHkPgf4YaWYNO0+8uJfE+o3kkF3brLHPGlnDAiyI2Q65lfgjtXRQwksMvd3/VnpUpRxFL69HRKX4La//DEHiHS2+InxI1Ox+Gsc19aalfCzs2kHkhZXYkg+acoMnPPao9O+ImsfB25h0W+0+0a+0a6N8sF2CQjzWoj4QHlgr7gcen0rS/Z/8VWul31nq+uGOKy0+51PUGEcaqole2KoRgZID7cAkgdsc1zvxY8Jy+ONa1D4gWY1K8uNUWBgtrp0rwqyxrHtVwuHPyZODwciu1qpOtFTj7tt/NWPMxeIdaiql7t7rprr+B0fgb9oLXbzx7d3UcepaiuuCNZYLWNnuRKi7VaEL8xwoxtGMDp0rtvH3xnscXySSa3Prn2gTTRX1pJbyCY9PtLSgEA9cHk44Fc74e8S6X4N0PTIfhh4Tu7O8e2+z6prFnqUkl1cZC+ZA6fIsK7xkqozwAzGunvtN1K58D6l4r8ZeDfCt5Z6zbuulRalePca7czQ7lDwQwS7wisSMuhXrzXbVpVJT5XH5njxnTpw5pOy/rQvfCHx5NrFrZeEfip44vF8PHUJb838WntdzafcTY3yhXba6LgHuVxkA9DjftPftReB5/hLH+zF8Dtb1/xD4St9UOqap4i144lv5w25YraIgeVAHG8kgZPQAZJg034gfC/wr4fg0+88cX/hjxNIi3A0m78LtcWunAsf3HnrMZS2B1kiBHGR3rwP4nQ/DlbWC48GXpn1Ca4la6WMu0ZQ87vmAwS2eAOh6VjW568oxrO6XbbTa/oaQdKleVKNm9z0/WLHwD4ck8M6Nq2n3abdF0y+tbG4WJ/trTQM807SKFIXdgIjhuBy3SvMfin8WNZ8eXklqym202Jh5dru3FccDc38RwBzW38dLnT4/ilpsOi61DqkFjoOjWouIWLR71tEDoCf7pJU47g15hrE1vcX081tD5cZKjb7gc/rk/jVRS5tBVpNw1eqZHaiOSZVkPGN34ivuD9k9bH/AIZ316XVNSn0e0j1q8Ek0Ue7z0kihj+XLhUILbdzYAB43Hp8ceFdLt7qeC4mMwcSA/I2Me9ejn4gR6T4G/4R9dYu5UW7e+ks/O/dG4b5RIV6FtoUZ9q3o4n2FR76ro7f5nXh6cY0ueo7L7x/xF8QSaxfz6fp+qXs2jQtI0SznLSZO0tknLZOcE84Ndavwh8NeKo/Aul+F7i5h1jWQLfVo9Q+WztCrFWlMmNwAxnB64PTgHzHR/FUeszGLUtHNxFFEZZpIU5hRTwT6DJ6+9fQvwO8YaJ4s8UJ4Q0fT4LrVrqwu1tI2kx8/lnBJPCBQC248DBJ6V5WPjeHPTvFxu/XQ9LB4iNJ8sff5tLtba+dzmDo/wADvCfhjXLHT7EeKvGbaxNo2i27n92IYwN148QG0b8tsUlume3PjfjnwzPpFza6lDpZtIrqPd5SjIUgckYA/wD113qeG5rfx1NqWvm1NzZTH5raRXEgX5FO5flYYHUcHmuU+LHiOTXtPsNSsDeW1sN8ElvI6EQzqSHCMgGUPBG7kc8msMLCUZJ333uaYx89JyqLbaxwOnyXl1LPGt9cRRW8ZOPNbHUYA5wOTXpXgvR9fs/H3hi4muLy406G+iWG8QsUZj0Ut68Hg84HNeYaLqTaSksknzxXciI6HoyqwY5/KvWfhxqcFx8S/D1natbSRyXE91+7bIiXynbbz3AWvYV+ZHiR5PZtt6m/4Zgm1z4l3cJtri5hZba3MUKktKuASo9WIz69a3/HkHhn/hfvh608I6fd6fEIlkv7W4GwwXO0mVAgA2qCoHQDgehr3z9lfwTpMHxO+EWtWtmi3up6zJdXcw5LiKU+Xn0wEIA/xrM/aC+Hvi6H9qjX/Fmqw2MEKS3EkwjXZI8c8jtESpGMsrgkj3rWd+Vs4UrSieAfET4f6lpniS91zVJhBDdytLDE6skjLsjZXAYf6shsA99pxxiuLksri+uI7WxtzPcSsI40Tks56AV6R8aLjxJqXiKFN2LZoAguLlWIbZlcL/e6YHPAAA6VjfC3TbuH4g6bNfXnnwu0kaxiIKisyHa/qSD0NefRlKTvM9OuqcIqNPtr6nnPinT9a8P3B8O67amKaG3jkjWR/njjbewXA7ZYn61237J+iWknx20i8juGby7e8mRdvBzA2T+tSftFaar+I72/gjRZGaC3Wf1CQjcoI64Lcj1rc/Yx0SZvi9b3kz7nj0m+ZueMEIo/mea600tDz17zufXuoWay65psJ3Hdcq35Mv8AhUfxbtVi03XboSFXTw5fRrx/feFa3Vs/N8UaenZZM8duSf6VjfGSZV0fxRHuI2aEifdznfdwr19Tg1jNfvIn1XC6viYf4v0Pj6SP5lX1Ir13XoZP7F8uPziw8vHluFbqOhP0ry77PvvEj/vSKCfxFeq+JIYVsFjmaEIZkX98jMueccCvJzZ2UfmfV8Q3vTXr+h86eNdV0G/10brG9uLlW2STSTbwuOOxx2p+iw2UsMzaajIgJXifGDtz/WtTxY+pW+obrHwfbG2LSK10tiy52g8g49fWq/hmFLm1eSa2WEszfILVtwO39aKL/cp2/E+ExT/e8u5hWceveTLYDUEjgkuN0qCfKvjBAPuMV92f8E9Xu4bRJppmuxD4qAiTzNxOyGI7Vz05cY9zX5+69qXk3y2MdzN5VlISqn5QC33sDt2zmv0O/wCCdMcU3hTQ9QjlZkuPEl5dMypkgRRxbuByfuGvUwsZRftGujPVyLlVSrfpTn/6Sc38Qry61PxL4k1m1s/tSfb769t42XPnZnfbjPRirH0xzXt3wfF7ceDkmOqSRW9hetH9nhk/d3SSbHV5F4GV24GM4wfWvYfiH8Gvh34z8Lwa9Z6QdC1NxNc2MGlBIJ764XeTE+flkjYDODg45zXkngTwhefDjRtb8K+KFkOq3GrNqFnI6lhHatANyRPztUEAEDAJA44rwsJO2Ipwn8XMtN3v/Wp1ZM1LFRUVs7Wt9/3dz80fiY02pfETVreBpHmj2sgTltpj3cevU1di8O2uk/2ZpF5faXqfm2xuj9luNxBlyFgckABkJyRVmXRZ7j41zaozD7NFaiWQZI2/uQi/q36Vj+DrrT3+JgttSUi0uZZLWKReNjMCEY5969irU9pWlTXRXPCxeHUM0rVOrk/zMT4rS240Pw3rmnCS3u7ZZLGeRG2v5iBf4l9ga9q8B+G9Fbwro32ySWS6uL6yO7zSTISqsTz3xk151qXhGTVp38H6/erbwPcieO5CKx3gsD34zuxg+orr7bQfE3h1rXTbT4mXiKmxoYms4D/q1ABGRngcV4maYepXoRpU5WabfX9EduUV6mBrSlG6v2Nr46eErWPwbLHpUs8dzLeW6KSxIx8zEcD0WsH9nJJP+EYaRmEg8yRQoPI+c8mk8af2v4h0/wDs3XfFF3PAhDnZEkW9umW2jngn2q98HLG30W3u9O0+dpI4m43Hn5mJ7VGWYaeFwXsK0ryvc68xxNTG4lVptuytqe9eKdWbRda+Ht8tk94bTw3HILdDgy77pyVz/Dxk5PTFfWvxV1DVtD+FhhvLGzibU/LiNnHm4PmySA4ztBO1QCzDjI44FfKl8tlJ47+Hdvfuqwt4Zso5AU3q++ZsqQOoIJH419V/EKOaL4b6nd3Oly217DqKQt5mVD7JlKvFuOREy7cfiD0rHiBRlisPHlvbku+tm/yvuehmrUIL/Avnp+h4NA0cx3IxfA/P6+9ZPiDTTeQsWUbwCFK+/rW6kcTSm4Kt5h3Z+hOT+v8AKkkSOTHyhlavVr01Ui4yR8HKN9z5j1rw/JDrkvh3WrHzYJ8/Y7hYyMtjJUjoSPatjwla6PoMmlaPcaxcsmo6nFCr3GBHa5G1snqATj6fjXqfiDw7Yyakt9NpsNzJwYWcsHhx1KMD8p/OvJfipoLWek3s2irIsMnLRMNzRY/iBzyPU9q+acMRhay5V7tzgdCdKfPDYwfiZ4TawvfOs1zd2mku2pLuVfszuokWPk5ZggXIHfI7VyH7L/7POl/Gb4o6f4YuJrqWOPztRv5o/lS2gQZJ6EZLFQM+tbGsW91e3Vxrl9Iz6fqtlaPMsn+sSYHYzc8tuL9fqa+gf2evE2jfCn4G/EafwRprW+oa3G1tb6/fTRxx25NuipG7MdzN88sioq9SM5J46sbjqmHoyVHd2St59fkdEocyU5aI8P8Aip+z5rXw/bUpNP1W21fw1qsHl/bYGXBjfa8YYA4yQVZSpOevrXkVrrw0m30yBokhTTtmnvGAP3bDPJ9dxJc/Wu11/wAceNvBvhH/AIUbeTW08GnXEOsW90zN5qwm2aRISrAEY80tg8jpyMV5HqtvNewav5MhLswlU/3mCAtXbgqdSULVZXXR/qYUqXLq3cWa6hi8Sah9pjQI9wFZwciTJzls9jn9aS90WOG8vNWh2Ca+YvuOMRQjGT7dKZHb3HiLUNN1D7GtsGsLZZMcLJIoMRk/4EUz9c1y/i7VNUXUrjTZpDHGFVfLB7Yz/PPFezTpylaEX6nRUVT2XLb3G9/Mg13WP7SZbWN2NrAfkH95v72KySUYetQKzL93mlyR97ivRjBQVkYL3USZVRtY0oZdyj1IxUD53UsJ/fR7ugdf51Vhm9pLf8TGHGOJGXFdT401RZIYLOIsZF2swA4+7XJ6c23U0+YY898V1Xi/TJFgj1GGPcpiTzDnocfyrKR7uGdRZdWUO6ucht3MzchThvpTpvtCxblLbPu5PH+RSSKzNuZdvGQKdcNJNCo3kgdF7CqPCvcihDbsYHNI2+Nsc89MU635cK3Ksfyok3bvLXJUN+lO5Jbtwskflrl3ddrAdz/jUEFrdafez2t9bSW8qBd0cgwy9xmrml2dxeSLa2MRe6mYRxIv3nY+lS6rY+ItJ1CXT9e+1kRn5GnQhWPcqTwa0hHRsbWx1fgO4ZVufm7DNUPGWo29xLthmD+XLgjHTgfnVfw3eJAk4bncMbfXpUqeFPFfi6SWXSdCaK284r5sgEaDj+8evTtmtORy2E3Yn0GYf2tCwxhlIA/4Ca928RX274fyrGww9mik98/LXhlrod14Z1KCyvLiOaVQGJjzgZyMc9a9d1u6H/CvwzN9+3jAI+q8H8qiceVanu1PewNP1/Q5LxPpv9rfD+3hWVxNbKZVx0ZgTwfXINeNQxh2ZW+VgcV7nbS7vDMO3O35gT/wI145eW6wahKu0lWY7ee3qamOqPGqq2p9qf8ABLL4Sw+Mfi1qXxG1SzE1r4NtgLQlcr9vn3KpHusYkb2JU1+o811r0jN/ZelwpH/BJdzshI9diqTj6kGvAf8AglX8L4fCn7PMXiyZWFx4j1G4vfZkGI0PvhU4+pr7NXS9NjbzPsUJbOSxUE/rXtTxcMG1RUb2S+/dnw+P4frZxXlieflV7L0XX5u55mv/AAljqFkOmyN/sJIf0zXJ+Ef2fvA3hTWo/EGh+D9PttTjkaSOWG2mxGxzyoaQgHBOD2zxivf0WNMeXCFB9FFSZ/KsJZm38MEjpwnDdfCxlCGKnFTVpKN0muz11+Z51dWPiBpEtrLRJ5Ny/LLIu1FYnHzZOcAAk4HPFX9N8N+KrW5guP7RgRUkVmURAZH8Q+8Tz0612u0bi3WlrCWPqSjy2RrQ4VwlGaqc0rrbVf5FLUIba8/0NmCTyRko23JGO/8An3rxb4uTaHF4b1aDxHM1vqtjp9y1pHG20SMXiTcp687lx7M3pXfa5cXEnxGtNNgufKL6enIkXK5lckhSMnIUDIryv9rNYLKPTdQkkxLNp91Bjs22SBv8fzr18gw7nj6FFya52npurf52MM35K6q11HWk7PtK6/NNpn50+N9H8QafdHWbHWi9rFI7XDXkoIgychg55Y+gHJrVX4peIdQs21CDXPN1GzS0vLC9Y7Wh1TT0MmnzSd/ng+02MpPDKISfWoviBrCx2/2WNiu+T7Rt6jOMAjjr/wDXrynT5A2tXeuLChXSLRZ3V+VkleZY4t69HVSxbaeCQM8V+oZvgaeJvGWuunlc8/K8TKnFO3Q7vxddeG9ZvL24h1610q08x7rS0uAzRpb3i/aXswVB2NDdCQISNuJMZrB8PeM4tJtY47nUoropxIJJEJYe+T1560l18UPGV5bfZZtaIhGAsMdrDEgUdMBEAH4VQ/4TnxLu+bVZME7uVQjP/fNZ4XB1cLHlUkb4itTr2Vme6fD3SPhP4208XXiLUp9Pmup1gj+zy4ESMkhWYgKQw3RYOccODSeOP2fdS0/UbY6PrWn6zok8by/aZJBGEwu796AclduWG3OdvavI9E+NHjzw7JEdP17esDbhHNBFJH34wV9z0x1NdrqHxY1jxVo2j+Kbmb7CLXVH0ue2tJCsED+WJbeZAehaN54zk/wCuGf1+jVclUvF9Oh3UlgJ0lGpTd123+84S4OmwtJD9gsnjjJ2vGuAwBxkDrz/AFrk7fxJqWm66WjhbyjysYMibR2A2nj0rstW8N2esavqV9aRWl6zqJIYpFzEH8w+ZtQYBbOMZ4Aziud8Z29pd3UG7Q9Jt5bSNY1MdiqZUnPzY6n3NbYrEVp01OnZW+8xweDpSnKEm9jojrTa7Gt82r6q8n3SJNQmLo/p8z8etev+E/HyfEjTz4C+I15ql4kUR+yX8MitNb7RgHBUlse3Ue9fOGg+ILCzuEWbT9P8qQ7ZN0cgOM9chxyP6V7B4O1DRdJ1iDUpLGGW2jUi4kt55UKQnBLBg5GRgEDv071hLEe3pawXNHazs/kZSwfsKnLzPlfzH6x4avvBM1/pt1cS380Yiu7G6V1EdxabisjDC8kZU9iAHqh4f+IGqeG7y4mjaQ21zukuoY7ho8yhSqSA8rxxkYy3OCK998baP4b8afBy48QaDG66l4ZeLUpo5nLPNp1wfLlPPOBnBB7OD1FfGXibR/DOm69qEeveOtRsY45EFksd4YVeArlWCYySSCSfpXnV82pfVpSxUW7OzV/68mbUsDONVexaXnY9Ln/4Qn4g+Hb2DWvD+pzatanbpTXN0ryWQCj5Y5f9YEc7ht5QAjArwD4peFJNNX7dpdndRafZWTQSwz5Mlo6SbtrZ5K8khgAMVtHWvCunSLdaV8YNbiuIQfLb7P52DjHUqD+tc8nxX1ZtSe0u44vEEBbylmSExSyBhgrsOQTkkY7/AI183UxGVY+Uue8G9nbb7uh7MY4ujFclmuq/4fqew6g3h7Qvh+8N94bePxTKsc9tJNqCxb4WBY7oWbcScpsIGPvZzkV5rr2sTPZ6Y00wS4utshj2bghUgkEjoQeK7C+8QfDz4teE7WD+z/7P8QeHLUWiTBP3kqI5Plzpjd8q/KDzjbgYJIr6K+Df7BHiP4qfDHVde8VzXXhVPsMk2h3bouWuQ4ZfMhb/AJYBcgtlTnkZxXyGMqPD1fZVIpX1TV2mu6fb8j30o+wjUpyvfS2zXqfAHii3ltvEF5Cs8UiIylZckkBsNxnrg8H6Vm+TEsgBO5hyx7Z9q3vil4N1bwP481XwzfSSi601/sl8rsD5dwjMrrnjjKkjjkGs3T7/AFbQm+1afFB5kkZTE0Icg9QVB79MGoULHJa2hrWuhXFxp82oR3UO6KNpBCYj5kqJgs+D2wRzX7Bf8EqdThvP2YZbGPhrDxHexsMY4dIZAcf8CNfkbFeXVnp+r6lHp0c6xx/ZmdbjDWU0kQWVwMcxsS4wOhxX6kf8Ej52h+E3i3R5nHmrqltqHl7iSiTQlVznoSIc/lW6hyxGtj5Y/bEk8I+Efjt4mPiG4tomkuWZbb+zxPNMElk2nLZCgbyOMdeTXyjqVlp2ta29j4Wt/wCztP1CRbiyku7UxYlRSFhViWGGboc9T7V9df8ABSyz8K+Hvj9Pr3iGxmvp38z7LZ8rHMSsb5dh2Bbp3zXxzqHxY8QajfF76GzfTXwjaYIf3Hlj+Ff4lPowPBAran8CNKvxD/FGlyanDPd6hq+mreRztcXPlsBHAzYVoeOS3CsMAgncM5rI8YJG1rol1FN5qvYLH5gTG8qcZz1P49KzPEd7Z6hr17fWMKJb3EpljUKeNwBIOe+c5981Y1JvP8NaPJgAxvND0I43flSk0Qme4fC7So774a2N3HpUd/cLLLAytdtAEVWOOR16+nevPviZZRW/jrUrVY/ID2lu6Rhy2P3QBG49eR1rv/gNqBl8DT265Bg1Cb9QpFcR8aHaLx0J9u4TWEZODnOGYVvOF6HMZc3vWM7TdfsdN0uwjvbhULW/JLHJxx0APpVy80/+3vE8CWc6r9ss4p0fsVC89fYVwF9dQ3UNrB91rdXVjnrlsiui8O69IuqaTIrIn2KLyC7DII59OvBrmT6Ghh61bT6bqN1YzSeYYZmUEHgjPX1qvEqNNub5g3UVr+Jvsd9rd/JCZA7yeYrY4YYH5HNZVntW4UPjg45qJaMSNTTbqHS/GGh6lGsnlxXFnO/BycMu7HHPTtmvZvgxpVtq9j8QfDbwyCN43MakFGyBMq8HkcoMj8K8L1SZlk0q4VjlIl/8dkYf4V738MNVks5tX8QwyCOfU7qaGSNyHAjMhf0HOZG5oUW3oWny6nzpbs0NxbTHgo6E+2DXdWKwaDINU3ONSaMrH2+yR8/OM/xsuMf3Qc9cVo+NvB/hvSfECXmk2ogsoAd1s0hcPMMFSM87cHJ57D1rnS8s0k09whkaTHDHqTzlq15bOzM3LsU7mYysZpHO5sqq9lHfr160+GONd2G5ZfwFRSRzyM0pjeVV+8+OAe/TpzT7NWeUQ+SDuG0fWi5L1Et7Nr65dckbeN2OmK6PSdQk0dnazYqrR+WyD+IdeR0POOtV7C08myluDgYyqgdiTyf0qWCzmlhIhjLyNzhF5x1r1MBTUY+0fU5K8uZ8poW/jPxFZxxw292wWI7o1U4wc54HtWZZyy/bXvG5m3+Zu9WJyamXQdak+b7BKN3PzDGfzq1Z+F9Wlm3eTEijkiSUDOPx4rtk0jJJIq3s0twzSyqCzMSuPeqcm3G05JHWuxbwffrZ3DXViUI8tYpvOxFHk5+b5edw6YI59aqab4A1/VdQtdLsY7ee7vJkt7eGKTMkkjsFVVHcliB9TUc1xqSPSfi1qlj4b8L2/gvwNfvfaVe2t1Dey/aVVTKs7KAyBMMYxhVk/iXGOK+WLq3aG6eESBirdVORXsHxWt9O+HupD4eQ3U11eWEG3UH3Aol3kmSP6LwOM9OtcZ8JfAc/xc+J2g/D+HVrfS21+9W2N7cIzJApBJYqvLYA4A6nFfJ4erTWGVS7cbXu97dz1ZayPYfA/g7x6PhLoGreG9aOkW98LuS+hs5THLPa+Z5aSSIGBkBOcdQRXZ3HjfwLp/glfD8Pgq31jUDI+67uP3aWrbQvmJGnVhwcux5IAHq34han4J8Hwx/D3QdVm15lt7e1aaSDZGIrKVlj2s7kMJAu5gu1eAAMEk+O65qdv/aFtq3hry7qG5u9rwyR/LHOwJ2hcjIAIIOAuRgZA5+UpwqY+q6jXuttrTp5jTlN73Oo0bVk0ZpdF1Z5BLq0O+OOOVpJEnbhIyhGBvJUkgkgY+lfaUPwD/Z71D9krSPHvx01rWbXWb+4e4tpdPkxcwLJOYUi+ztgbCYmDOwGDk54Ar4GjvrXSbi1E1x515psxmhdgMh+CDkDJwQMAk9Kv3ni7VNcuC2oXV1cyu2WeSRpH5OT16cknt1NfS4LBRoP2lTc9rD5bPlfM7f5HpXw30W2l0O28O2d1eRaXdXpYRuxV5IBcF1VwOAWVVzVbWPF9n4V+GvjTQb5biafxDGV01FU7IijRIzuc/KAisFA5LNk4HXlNH8eWfha6S+a+QNCQ20yeYxIP91MiqGq69pPjKzuUSG8t4rjYi3EiAYAcOyr7MQOD0pvAYWtipVcXL3LJpf3lJNHsyxWKwuW1sHh7Sc+VRW1vi5pfc1/SOWtbqbTfCFr5MnltJJOxPtyM5rhJ7i4ureYXFw8iiT5QWyFJ5JAPTNeheKtOtNM8NxQw6gmbeB40jcEPJublgOnc15w3EPy8bpz+gFdHtI1akpR2PnJQqYejChU6X0/A7rQ7yTT/h5rNyWwzxtCnsXZV4/AmrXhr49fHDwtpOn+G/DPjKex0mx/dWsQt4WVFZiTyy5blieTWPPIYfhntK83F7Go+gJb+lUdNLfZ41Kh2YDaE+8Ceg+uaqWmpyRm2lG50njTxdb+NteuNQupTJO8pDXyWMcTy4HWQQqm9jjO7nrW/wCDPG/i3wzp723hG/FmJozb3lzFZQo3l8lYgcFsnJbcW3Zx0AFeZ6zeQ6XdNZ31hMtzGxWaIttww4Ib8a6Tw74y0uzuIobKwnltJXUSGZlWRcKBwqkr1zgk5wAPWlHmlbmehXup6bnps3wxj+KOmya/qGqXFrAFe6jUbG2OfvsXI3Euw5GcDPFePePvhvdeFby1js5pbyK9LKgZQHVhjI44xzX0Xo9/pel+E5tctbV2trdBK0QlRMkkDozBBgnO4kAcmvnXxR401Pxp40t7q/j8m0hn+z21vFJ5igFwCcqcMSe446Y4repCMdjNSvI3/jonk/FhLFpCwstL06Hn+HFupI/WvKpiSXY92Nd38TNch8RfFTXtXtZvNgNx5UbYI+WONUxg84BUj8K4dox5PJ71y0VyxS8ka4h8135s6Hwvoy6slx/ps0bWsHmJGjEbiOvT3IrJuY2t1likyXMm31z3r034AadDfa5qX9pxs0Eli8KEAE53oT1PHb86yfGvhmG6+Jkmg2O6O1aRI1YgccZc+561pGS5nEznGUlGxa+GNtpV7ouoaLdWreZqbKJJ92MRp8wUd+SCT9BWz4B1z/hErPWrjS2Zb/V7Y6atyPleO0LBpFJHOX2qp9VBHepdOs9D0nx1FptliG0sbdnnkZ8kOEJbGcDgY/GqVwPD9na3upWmob2jh4Rpd2GP3cqMg5JA/GuerSjKp7uzPZhXjQo8stJLQxW8bA6OZpIZn1pmdY5kLCOCJXxjbjDZGeST0GBW18LvALfFyYaTNqQsreGQ3F0q7TJ5Kgs7JuONxLgZbhRknOMHnRNqWn6TcQww6TGssLSNHCzSOCc5YZ4BGT9MnFWvhnql7pK65Jpcpgu49LeUFTwdrK2PxxjFbfV7TUZaanPLFycW272TOf8AGWk6Dp/izWLDw3MZtNtr6eCyO7zMwIxCNv8A4sgZzXp3wF03Q9P1a61rVzM1zNoV4dKCx5j83yX3Mx6jCA7T0yT7V5UbGO+1C523MVrFczrDbNcSbI497dXbsqg9fSvoe38JeJvC9hoFjq1kgg0XwferLNBMksQlm8xgAyscgrIuPrXWvZx/duVmu/U8j95P94o3T+5H6ZfsK/DXwjqXwQ8E+NNS0C3n1mxuLuWzvGUiSIEkADtjJJ59a+bv2obXzfj9rqtJd506WPdJIwInYxhVBAAHyKdo+hr6p/Y58QWfhf8AZD8O6wsy3c9npOo6p5KseVSWXAJx8oJQjP1xmvzp+N/7TZ8UfFjXtWm0KC3827dI4FuWb7rEZzjJz6VhUrRg3Dq9jqpYStVbqRWidm7o9x+IiaDpv7Ptkt5NZyXmpaTFKbaVEkkDNPIiOuR8hOOW6/LxXx/FqNxpt+W0t5Irm0BaOaMlWV8YyPQDOM/Wuw8TftL6h490LTfDUPgfTjb6Zpo0stbyTO0qBtyyOezg5IxwOa82u9am0rztQutBmhWYYZ5mcD5uBxiuCKkpbM6pYaXK1zR+9GTr2pNqGn3d1ql4bmT7SuWeYvKzkKSwTtk9W9q+lv8AgnR8O5PiR8Ttch025W3utN8NyTxLICY5GaeNSpPVfrXzJrektp8aarq3h2+ggu5F2s6uFLEbgD3BI7HFfff/AASN0gp8Q/HmrLZtHCmh2sETbTt+a4YkBj1+7XZGcZvltY5XhZUoOfMn6O56lceDdX0Xxf8AZ9V06WCWzOJVK5CHDYyw45yMc968x+NN1jQ/Fdr5eCtpp3zEHB3XLfhxtH51+hnxLsY5vB+oW6RgG6kh3bRyTvX8+lfEf7SvgX+wvh/qviD+0llOp6nZ6f8AZQpBi8pWl3E9DnzB09KwnKKrRiz6jhJr6zBy/mf5Hxhb2fm6lbKuSzToAP8AgQr0zXDHCIftUlwgafAMON2cHHXtXE6faka5YKvX7THx26iu78WrFvsY5pDEDOdzDqPlP/1q8vNVzuKPp+I3apD0ZzOuhm02Ufbr9kCngsu3oevFcGtvsi+1SfaHQtwd+Pbn8a9B8QLFHpdwsMhlTbkM3B+6c155cXDNClqWOC+f8/lXLhKSjBnxGJqSc0cdq2j6HcahPLPaReZKx83dddc9c/pX6If8E6tJsbPwz4Mjs4okjN1q9wdsmQP9YpJ/IA/Svy51iFI9Snj2KxWRuR9a/UD/AIJ521pD8MPCkN9DK8U2n6mTHEPncyXUyYBHTORz7Gvfw1OUIybbemx3ZRLnhieVa+zl+Oh9l+L7Zr3w7arBHDpWrQ+d9hGAz27jKs0UZIEo2knBGNpzxXk/iqd77w/cX2os91PLcXP2e5e3MJihxIPK2MoK42987tuc4xXqPjDUNdjm09bOxR7q8MNzGLqFdlhCjILmPfjKuyMdp7lcV5P8YvFUmj+DGt9c8yadDdzvNDP5o3BSgQZRTx5gOWAA5HI5r5zDz5cdTd1q0+l1387f5dDfh98tanF9X3/r/g67n502PirT/wC1jomWWZWO51wF3KF+UkjknP6U/wAb+D73W7JfGC6eFOkCRVjQD+PbiRsdhjke9dtZeAPhTcTCWPwn47vZXkMu46hCmW6n5RFjHB4Oa7bTfiB8OdNml0IfD/VbiVP3TW82pLlfYBFXB5r1KGX4WOIniFJOTfc78TlOKrV5yVSFrt/Etr9T498XXI/tu9vbG7iZ5J4nK79wUgZOCOBhs59eKLPxRqOpahHqmo5+0sfs0bDO3aDyVX619geLNV+D8mvXGu+J/gHbLqGrqYZW/tJoVmCAJjZEQowCoJAz0ro7jxd4b8ReHtD8KN+zlYXWneET52mIZirWe35d3mLtds553sc9811ThQkrc6121OeOS11+9VSFuvvKx8mWfhTxJrml3erXunarHBZRySzBbGXdtUEk5KgYwM5HFdtpP7J/7UGn+DYfFFv4et9IimQ3Xky31sL2VGXcA9vIwZWxjCdcsMgV9J6x+0L4lvLWf7d8LHlgSYtMPtNxIEkyfvBfuj9KdffGvx148jXT774RaXqapGtyFu45XGJBsBPHLkLgg8+tckIRcL1JQS9W1+SKjk9betWgvSR5Xrln4003x78NdNsLRjrtjomiR3cc9tkQtkF/MT+EAnLEdMcGvqX4rXvijULWS7k8LwpoVwsW7UkDljLuOQx3YGWGBlemeT1rwvwLqepePPjtpfiXWbG30EW8cKTQPaSQ20UVsBs+Z8CNPlRTzjBr6F+Icnh3S/B15o/2wQ+ItSuor+8srm5ea4J8wkcnOxFU/IpIwp7mvPzWaljqfLDmSt081rfpbc6s2r7qCTaildX7a9tPPbueMiHzJWjLsE78kYNOkSONdxlQKvC49DUzWscjbWzjb/kUrWq7ixClQMDcOn4+lejJ3PhEjB1Dy97PIz5jGRnI4/z/ACrn/iDZwW9nHorQr5sKma9+UbvOkAzHn/YTapH94vXd28NvbrL4lvIV+z2TCO3jI/4+LzbmNPdU5kf0CqP4xXlvjW6vLXTLm8hbdcNktJKNxyWO5sd2JOfxzXn4mUacHKXQdj57+KWvXWh+Ix4RjXfFpu6zt2CgFraMsI2JH3myy89TgV6/+zPplhrHwK8bfELxtpf9r3ml6zbNp+lyXDRQsyxHMsijIyFkIBK8bR71xnxE0Ox8TavNqF8sCPZeS8DfcyJDtbBwAxVhG2CSTnNTfB/xpb+DV8U+DtY1zRreDxDpfnrIt8kvlPb7nyETJkzGz4VTkkV52Ih9YwjjRWuj+X/DGc6d6Li/u+491f8AZa0r4sa74i8bfEqwn0Q67HFcaPfWV3FLssvKCCVQvySLsC8tjdnoOtfAOsXENvrV/NZyRizsbpk81V+WdELKHI5wWCrwK+mtN+OWt+Cfh54q8D22qahFDqWlxXnh25vZhLeLb3kIj+zuhAVYxEA4KEFCRgGvk++W3WzutPhmcPHKrTHrkeh+h71eS4fEUpTVaV46JHLGHLUdNM1tJumubqzjXzVitbhY42C4VgUyYz9G+YfU1wvjyN5vFuoktkLIFXjtgf416hpcccPhfTrhYWQahqSyEbvlUqCBj64z+VeaeNG3eKtRxk5m/wDZRX1mGS1t3PcxMbZWv8X6HOfZxzyTStGxbcx3GrBximHHHzda69TwCs0eaRQqyov+0P51O2Pxqu/EgI7EUIDVt2/4mAYdPtB5/KvWrhYZfC97DIhdpLdMKMZP0z6V5Hb5N1H0O6bca9E1qO+k0SG6tJWAt4Q0sak/OmBnI7+tRKPMrHv5fPlwde/l+Z5/IrKpkdt23jnovtUXSNNzEDPH0ouGZnc7sBu1ClWiKsSCvdecD/8AXVJHg7skjdlUNHjccj6e9Nu7hppTIvy564o+YLiOSPOc5PahYw033hg9x096LdRWsavhn7SurW8tuw82Ng67uoxXoWtHVvFUMVvq2+SOGTzEUAKA2MZ9+DXIfD+383xLZIq7thaSQ9lAU17lHII4wvylMbTwB/8AXrWDktjtw1alTj79NSfmeTx+EvskgdbaRTnOecE/lXQW154otbOOxtbidYVJ2gJnGf8AgP1rsrrUIIVZWYu27APp+FZ8mqSBlXeQo9D61anJfCbvGUVtRicNNoeqfaPtc9vdSS8fM+8/nxmt3XrFLTwXLqWqyTyTQLGYwWIVMNgYXp0PepvFPjSfSHt4be1SeS4QnLSY2+lZi2/jDxFot1N4i0m4tPD147Wi6iI9sNvcniLfu58rzNqs4HHrxS5Z1pWWpFfG89NQ5Ul5HD2GpXWs3kWm/Z5ojPJlXWXIXg/w9PTv2qjq1nPpd40e4ykr/EO/0NehaD4Ij03yobgNHqib7cwt98zjOY1Hc8YGOtb/AMPPhXL8VPix4e+GvijVG8PHUHmkurprXLQRxW0k/wBxyuS3l7eWH3hWNGSdSxnXwsqdNSk9z9nf2NbrSdL/AGe/Cnhe3uovM0PTY0lUMPulQ+/6Hd1r0e5+JvhK3u3s5Lq6nljwyrb2csgIPAwVUg/Xp+VfHPgn4kWfhTwnpseg+H445I/ssL3UUxje8smXmCWMkrnGCCCMY79/TdB+J2j2dvLY6bqXiKGG0vriAquu2dsABKdwWKZgwAJY56HaMHmvuc04blSrSruLtJ3Sul6vrpd6bM+EwWb1ZxVHmS5etm+ummnTfU9vk+LGkxXUlrNoWujZIFG3T5HYgpuyVAyvUdeua5Hxl8erXTNUjtNJhu4SLUzOt3atEx5OCFbnHy9cVg+H/GPn7LyPVvFN1fzvIGtRr2mmN924Lt+YsSqs2PdcmvMPHVvcXniy4mWz1plhtRbtLq00cszsmVIDIArDBGMe/bFLJslwtfFcmIp2SXfr6WOXO80qUcK4xr+82ttH8mmdzJ8e/Fsfn3FzfRMkqQSwrEqgKsilgCex46dqybz47eLJNrNczgtkqvmHB9+OvpVDwp8LdU8TadJPp+qWixzSKFVFLMWVcbTx7+tcl4o8Op4a1CfTZJru4azxHNLFa4jjk7jceTgnrj+tfW4PAZNOq6MYxc10sfE18ZiK1n7SbXfmk1c9Os/iVqK6hpWo6kqWt7LpsMskhmVpXh86UAKTwpJV/Xgj3rh/2lPjBp/ip9KtLg2unwIt9DbmSYFpn3RcE9F4A49c81mXUzH/AIRhGYP5+hJyyYPF5dAYB6f/AFq4T4zaHYR/DGx8bnUo2uYvEzaHJYSIm2SG5gO5+u5iBjgDFcOLp4XJcO84jBOdPm5Vrbdr+r7H2fDOX1M5zqjks6rjSruCk9G1eK1187Hzp8UI7mykttRfcsU4MKsTy5X72BnOBkc9MnFcDo8wk/4SK3PDPpCyjI6iO8gJH5OT+FWfEWoyMsOgzXE8slv5q2u992xVJbyuexG4j0PHesDSbiQa9HbyAj7dZ3tkTngloGZf/Ho1rXB57Sz3CxxlHTXVdnfY+jz7hXE8I5hPLcVrbZ9JLuRyXSwtnAK9t1Qz6pbxq0kkSIF4/wBYR+PpWOtxq2tXkth4esprpoY/NnkijaQQoGAZ22g/KNw6cnPFdPoPgnR9Mt7bVPiJY65fLdb2hghhaEJEmC08wbEqw/eHmFNo2sfmANb180jHSOp5FLCSetjB/ta3ZzJDcAj+6D0rrPCepf2n4P8AG2lK3zQWFtrUIx0a1uFSQj/tldOfotdNqUPgz4gW/gjwT4P02y8LTJJPcNbald2irqBLIIpd8W4Sj5ZhghfSuk0L9nvxN4Z1bSnj/s9v+EitbrQLmxiv0dpJbqGSBPKBOWBlMRAyeSB6CvNebRlpPR3O/wCoyjG8TjPBtx4q0O+k1S70e5gSSLzI3mg3Bm4IOw9c56V6VrVn4O+Inh9PEmhNcD9z5ryfZGijJPDgA5I2tnjnGcZNeSeH/i/q+n2p0HxpYzSS2jeW1w3E8TxnlJFPXBGD345rsPh/4/0fwb44uvDtrqFpd6Lr7NLGoziCYkjYwYDbvXBwO4B711VXNS5ol5e1/DqJK/3nkWppa2szxxygSpI26FuGADHDEdQCOa1/C/jptNt3sbi4le3+95Yb5c9iBXUfHXwWljqI1jTIVcbd+1R95D2/CvHIftTXIEkcgwp/1eARwccnjGccVgnZ8y6l4mj7zifQvgnxV448X61Y+F7fzodHvLOfS7pvM27bOcBQZMcsqTeS6rg8gAZJxXi/x6tdRuLax1K/WI6hpTtpt21v/q2MW0K64HKvG0LA98k10fhnxHqnhmGO/j1aWC1vjEn7zlo3AbGSPmKoScEnIzW78WbHw/rsWoNpV5Hcf25p9t4mjWM/JHvykkWccFGdgRkjbEvTFcWPo1KsZUre6187mWFlGNpX1Plxb+bcqllTJABJ4PtV+OJmZZo5Aj55I71ZOq3nhu+lj0u3tYpXjeGUuqzrscYZdrqR074yO2K1tY+J3jDxLawWd8dPhMTZ8y1tEi3YAC5RRtGMDkY96/PJ80XypHuLVXPojSfhBN8d/h34X+I3wb0+HT/iFpbyaPrunx3G0anJBEJEvELtjc8e0OCcM/Tmvqz9mf8A4KIWen6DffCL9pq1ls9b8NQMn224hlZrhIsD7PLHGju8nBwwBDAfN6t5Z8Gfjt4R8D/DWHUdL8F+Vq2sWMKTXVldiJDOOHcKUJR9wYttJGcccAV8/wD7Q32HxRZ2/jvw8s1rqWl3i2fmy3AknlRwWXc4Vd2GzjjjOOleVhamIjVlRxUP3Tfuu6ur/oebg8wo4itKlTldq+npujF/aO1Dw/49+N3izxtp97a6ha+IL5tUhuIHk2OJgGOMhSuDkFSoIIOQK86njms/JttLs4Gmn3Rxu/7wRZAywDcA4zzzjtzWrY6jL4stZL3yANRsY1W8t9uMqOBIg/mO3biqTWjSapZqCsckizeWwbGHEZKnPQcgV6MqE6M1rdPZ9z6Lmp1aLlFamVda7qnh/VoP7NWe2+yxjy3mttjThuWcq3VWPY9sd6/Sn/gjt4svtY174oWepXDy3F5b6bfMzYAJVpk4A6YDAV+eVx4R8V+INJRtRt7Nr6Fi6v5y5fLDOcHAypH/AHz+f3J/wSL0fWPCvxl8T2epfZRHqnht1QRS7jviuYm7ezGtpxtHTY4oszP+Cw2l+T4/0HVFXG/5Sc4zuhH/AMbr85mf5unP+9X6x/8ABWjwLeeJrjw5LZypBjZIZHUsDtEikYAJ/iFfmzN8I76P/Wa5bcn+GFj/AIUqcXKOhVR2t6HnjN+vvWzHIsnheP5lzBdu2Nxzyo7V08nwpMMbSzeII1C9V8nBz+LViatY6bothNpttqzXsvm7nVRtVeAPcE/jT5WtyE7no3wDvGbQtWscZ23iPjvgx47f7tU/jIpTxBpF0y8Pbywk49GBA/8AHq8v03VdT0wyrp+o3Vr5mC3kysm7HTODTptU1K7mh+16hcXAVyw82QtgkDnk+wrb6xH2PsrEOHvcxFqkKx3ZVVxnk/jXU6Tpcn9ipJbrmSdQ5k/554znHoa5rUWaRgzdRjmup8N6xa2+h+TJGWaANuAGd2TwK54q5aZmwRXEmredDGj7EVWV+QcAjJx7isuC6Ekn2qSNVYzM21eAowDx+teneCfhz4l8Vaxb3Wi2Vw1pImXkWF5C2TnCooJbqfb3r1fwd+y34d09hJ4h2zSJ8z/2rqEdqig8j9zGTJ9M0T0Bany7rDboLMI2QnmAY9C+4fzr379nvwXqHjLWNf0e8a402yttEvNctLia1kEVxcQRRt9mDcfNIofaASSygAHNez2/g/TNCVLbwpa+HXjDbRJZ2+0Bvd5UU/jzWtD4V8cX+xrvWtHtYiQMNqQnkAP92OM5J9M4HuKSG2j52174U/ErxBczXUfgrVYfMP7uHylCxr2yzsMnuao2PwK+IDMsc3hskZ+7JqFuh69wGPavsiz+FeoQyx20+tWMFwy7v3sn268fp0toDsjB65d3HqRXoWi/Cua38268Q+LLm9inUefb6naWvlPhcABBkJ9Q4NPnSdybHyNY/s//AAnGjtNr+q+PY9VjQ502FdLEbP2AmM5AH/APwrkPEPwDs/tyS+FbXULO0VAW/tXVreWdj3P7mNVUegGfrX2UfhvBY3gfTvF3h/S7FW2sqalEs8yg/eaTaxQn+6vA961jpHwZs8f8JJ4o8PXe3q11rUUjfpGh/WrUr9DPk7M+FW+EPiSGEQ2sdjIo/v3IOefoMnvVuPwP8QrSAW9rJ4etxwo+YDA/D+Zr7A8ca1+yzpugXUlrNpE16qhYxpt2ZJvqFBYDHckEV4prHxC+AumoWm0q9clQRE+qENg9yqwjr9a6Yym1ZJkqmup5LJ4N+IUePtDeHZsHP/HwyZ/L/PNd98I7u18A+KIfEviP4b+GPE89rtltLbUNaaO1jnViQzBQBL0GFf5cjPNcP4v+OHgu6CR+HfCMGmhGO5/tk1xJJ2HLEKPwFcLcfFieRW2xwhV6eYf6Af1rdR9205fiS6KfQ/Sxv27tYubOG31/4EeArmAqrSRw+L7QDev3WCOhxgE4zkjNZXxS/bU8O614J/snwv8ABjQ7DUZLu2Vh/wAJBpsqmESq8kaGH94pYDaGAG0nPavzPm+IGq3xZI/IAPJIjzn8+lSWetabdRvJrWtXkcifdjgRQHHpntWTVBbP8/8AMfsLvVIwvi19lPxA1r7Bq02qRi4fF5LH5bXDucs+zJ2AknCkkgYFJ8J9W1Lw545tbzSbo2120FxbJcCMSNB5kTKzqrcFtpIGcgZ6V99+JLv4U+MvAp8U2PgHRpZbrRTp9rMqJKEJviNwdVALII2AYDOCRnFfGlxpNpY/FyZLLS/ItrW0lmEMUXlnAhbkjHXnJOK8GFaNZSpONktD1p4GeGpwlOV2znvH3xIj8VeIJNS0jRYtLtfJihS2VhiPYu042gDBOTgAYzUngXzLbTZtSm5eR2WNu4HGT+fFcPtY/wAJ+auu8Lagq6VJYzKxKSkjA6KRkD2yc1rTo06EbQWxeXKKrLnDUry3sV+0MGTc20Y+9IfQVh3msahcqHm3xW275o4jjd7Me5qzIt3eas1ztRmhbGyRNyqn90A9c961PEH9qaxp8Wnxm3ihSQSJDFEEUNjGeK0vF/EzpxOIrVHansXvDGpaDa2kV9qaRpby/KVSUF4uSuSuPY1P4s8QafdWP9l6BH9khiLXDT7v3kowQAFAyoJHXNc//wAIrqnh+1tZrq7gdLxw3kwpub5eQWOOBnsK6vXvDaWPh2XxlcSBSFgWSxeLaUaRyAwb0PJx9ayjGkqikZzninRkpaJffY5/xhJttbO3znZbxIf0/wAK5GRjiL/aeRv1x/StvxVqVvqEySWpBjO0BuxwO3tWFu2+SvcRZP4kmtN2zkbtH5L8zqtdkEPgPRbcEZmuWkP4Kf8AGsXSZLi1vkW1RpnEnmRoGwNwOeT2rR8WXEX9leH7GNgTHCztjsTtFYy6glixZV3SRszqf7zds+w9Ku3NozKDcNS1N4bur66knkuCZWJdwqZ5POPaqf2OG3aGO3aZ5ZVBJYbVXnH44rY0jWmnhkVmBeXJdsnOAPQUXSRtcWob5ESPy4lfCbpPvYPoD6molKSdkWoxa5jds38S6d4fuLvS7WzmisQxvJpUSSOVSQAQr89+cfpXFaeG1rxFY2s0EcAu7yOOTyF2FdzgHb6Hrj0r0XUWstP0P7Lm9t7eSBy6mQPFJKy7UULnlt2cAfXtWZovgPx1p2raPqGueFbjT7eNmu0kkhCL5UMZeRiSc8DBOeefwrGFSXvcz9DapGL5eVepxltbyedezRKzQxtIN7HPcgZPrTtP065vmW1t7czythlRRljyM4Her+hqf+Eb1KSRGYYGfx5/rXe+E4dLttD03WLq3ign33OzbjaIwsKhickhiwckH1B71ak9TNqOiN74drFpfijWDCPl8ybGeMfOmePwNcl8Tium+OrbVLfcvmbJD83csc/pR4d8TWttqd5cTXCqLgyNy3cyMRj8MVh+LNSbUNUNzcEyuVMcaIMgc8c9uK6sNTjOTchVZ8qVjovGel28dxJ4h+1pdQ6nGkyxIRny+Ax45xkGsvRNOTxBb3VnbLDawxSxKZSQmEaZfvE8AAZOewFe1/sH/A2x+OHxkfwx460fUjoA0i5uCbaNgpkUoqB2BBVMsecjnAr9BPHH/BOX4X6j4VGg+HtWh8MxrIkhuobJmmO0gquSW/iwc9eBXBXqxw84xbvY6lV5tZqyZ+UGpf8ACM6bHrGi6f4iN9sSSGFiioGIIG71PQj6Vy+g6lHoq6t9pzuu7TyI/LXq2RgHPQcEmvrL/hiy3uv2oU+Ddx4jN75+oToZLVhC7QRRCbe7Ou1WZT6dQfWvof4hfsJ/Br4W/C/VvEvijwrcabY6PCLh9Xj1AXF1vztREG7Y5ZmUBNvJI6dauri/bPm7g4xoqMX/AMOfnBp/hu81q1itbHTbg3Eyl48Q7sAAsSN3GMA8nsK9a8SeOtX8XeI/EuoT2Qv449OtYm1QRQloGdIoiN8OIwsjI2ExgYOMYr6k/Yr+FPxMvbHVvGmn6fdtpVyv9nmBoVZLpwcjeD8p2KQD15Yiur/bc+HOueHfhDBcX2gWmn2lxr1nbw+RFBG80hjlO5ljUHjGBnp8396p+tOUlG27InRhSm4p/wBdjo/DUM2m/sv6FdLJCph03R7EC2kPlsJ2duoAz8rMSO7E5r897fwtr3iDxZrev2umGSKe4mW3uJBGUVg7s+MsGDYOOnOa/SL4laDfaN8Fbae6kezW0vbSxk09VZUMkNqfnIB2/IUOPdjivlb4R6XaSfDuwv547je0txKPLmMQkLSnGcdeneppS5sc32j+bOqWmVN/zVH+CR4voPw98TWupXN5N4RgSKZ8pci+tw6IV2kbA2MHGQMAjvWtcfD3xVeeI9I1C60DT5bKxnheW4mnRpTGHBIVVz3APXnBHevbNW1LSNHvJrG6t5JJlG7y4ri4nkKnGXKqcIvAGWIzjinaZJoesJdvZW9ulxaqTcW11FOs0fB+8jtnB9elel7VN76nkuhVUPacr5e55V8aVkfwLKv2ElleCOWRldVcFwQ6grgc+pBJOa+yf+CVOmzWln4ym8xvKl0/SXC9ssbk5/ICvlr46WOm2Pw9xZWMVu1zdWkbBR1G7dtz9RX2v/wTW0v7D4S8R3AH+ts9EUfhBK3/ALPWD0qP0OhaYT1l+h9ZeMo/M0Ux/wB6aP8Ann+lfKH7Z3/JOtG0yKBv3urzXDNt4IVAnHv0/SvrTxQFbTVVv+eq4/WuD1jwH4P+I3hy2m8YaC2oR2U9zJDG109vsUt8zrtI3Z2jrXDVlFYm8uiPXyPGU8vlDE1U3GMntv8ADY/LPTdFm/4SCwO1gFuEY/zqP4la5a2uo21v5yZjkbcM9DsBGfTg5/Gv0ntf2efgXa3kF43wy1eOSKbdFvuZZo3K852rKdyn3HPNVtY/Zv8A2Vdct5bTWvAtvBDcXEdzKu29tkeVEdUcndg4VnGc4wa568YYqSfMtD184z+nj5xnThKyXl+jZ+Z2g6f4g+Ily3hnwdpN5rGqTKWjtbSIyOwAJJwOwAJ59Kg1r4H/ABT01Ct78P8AxHbujFWd9NmwGHXJC1+pXw1/Z4/Z0+FviA+Lvhjb2Ok6s1u9uk/28zAIykH5XbnrnrXsVrdXcigR6lp11jqUBXP5Ma6KWFpRVua58tXxc5Suo2R+BmufC/VLaES6lpN9BcJH+/zauMSZOc5A68V+jf8AwT/tV0nwF4VmmcrHY+G7uaQ7MkD7VKTwOp5P5V9peItJbWNHvrJbO1a4ubaWGOSQBgjMpCtyOxwfwrwr9n/4cT/CdrnwHcXFrer4d0a2sbq7WMhJkHzORnncc8575rrnHkozs+h6OTV1Ghiubdw/OSX6no/jjXtctY9Dbwv5K22oXBjuZpl/1UbR5jlJPCDdwcg9QK8y8TeG9Q1zxRpWoSeJLfVHtZXaHRWaKP7QzBt7bgfmB+YtkZ2jAxXe+KNN/srwbNrPh3QLzUEaETDSXRpDIzEFWOPnUrxnB4VTgZrhZNH8I6t4gsPE2m6LqUCTaaf3kd0cwq4YMGDIcNyykZGCa+DxX7ioqjlyw1TsrXfpZpW7npZZ7ONN+z3XNrZX+fvJr5fJ3Oa07xNpPibR/FlvpfgmyvW0BUNmvl7EuYi22QF3yyyZ3sidSuBgkGt3TtP0fUtBtvGHhfwXYXd8YpVEl3psSXRZY2Xy3OA2QyhRg87Rg4NO0vT/ABVHZ39rqHgM3yT6uq2v9myAtcW4Q4uJGdsgLt2lmx94qOlJJpWraP4tuvH3h3TZ9dh1iaG0eOOQRRrboi5dcjczK6gdMAE8cg1zVab5f3MeRNXTUtJ7aPyenT8ztcqMpS5N79XfotL33er37rXpmeHYW8Q+FdT8TfEXwTpOotok8sNtFa2MZkwsYklQFSwBBXktjbgDvSW8Ova2BdaDjwu0Mkc8lnd38b3F3A/KrKmweXGQGYAg78dsKa6rRbHTvA/hnUpjO+kWq3lxe/a7hl835yGJKnr/AAqAB6dzVBdP8I215B4utbeOeDWMXN05ZmubokhjnzPmjH3SV4xyMdMY/WaEeZwg1tyt/CtLOyaSS9N/wNYSbqTjFaN6JLTva17a/N37blu41DVPDNn4hvWvLfUZlNxqbF2WN4wU3RWxij+b+EgFuTyelc1b+JfF1jo/9rr4dkm1a7ZVu9PileNRvJImzyy4OMqT8u8/NjONnxNcab4De98Wf8I3d3yzvbW/nW8zHIDMwdyeBgMyjIycqCaLnTbPxdeR65LrM1vDDc/6DJb3SvGzqpR4yvKsCpYNg9eh4rLnpqSrzh7r1crX1WnLZdPvHQ5acNY3Tt+FtLX8/JroW31SDwz4Qm8QeKrUzzPk3D2afalhWQ4XBlPABOGYcfhXB+MrTwjq3g2LxZb2t0NclMQP2gyCQRKSN2zJQAxgH1xz1Nd14q0XTPF82j2S61JYWFnIJiuFH2wMu1Ldd3Vhkgg5yC/BNcr8Un1STXLnTbHxFYtbaSkMWoaau0SW0kwLR7k2cr5TqAQe3PIrpy5c04y5vebv1so323tr+PU5q04+ynF3Umm+2iWi21+/sjy6SzkhkZZI3V0ba3zdPy4/KrkOkmSN7q+d4bGMhWlC7mduvlxj+Jj+QHJ9+utvA91GqTXljfyhVEgt4rdxuHbewHyAjnA5IPbrVa+0jXrjH/FP6k6QR7IkS2aOGBAeg3YA5/EnJJJr66UmfKRR534ovoJniVo1trS2Ux28G7IjUtktk9WY8s3c47AAeX+LryCSOe1hmTMsTRhuOM9vzAr6d+GvgHwj4i8Q6+3xM8N6c1olhBHpQ1WZFRpmdjIFw+d4/d9gcHjqa9L8T/s4fBCxtIprP4JaRqs32hUaGETJtQkndwx5HA57mvOxLg37KppzGsPekqaWr9P1PzRXVtDk8PQ+IfFF1e2OkQ67Fa38lugleHzbeT5wnBJzbqRj+6a5BPHHwnn+KGjyfD/wvcWdlaaXfR29zeMGubq/EL+W5QllUAqNq8k7jk84H6uan+zn8CbXwzq9qvwm8NEzl5Xtpy5jkuUWQxBsv1/eN0P8Zr89odJ8K6fqV5qlt4M0Xw7fC4e0t49N0svLAvlgHy433Mcb/mOc+/Ga5MNCjXjKMea8Vy9UtVv5nTQw0sR73Ref9XPH/jt8Q/EV54i0ex8Q6fY2N3qWm2l7rSxW4W4ZAXVYXXGIgqDbtUDIAJrw7V7ywkk1OW1dIjcSyFF25OCRtXn2P6V+jul6T4QvdGtIvFVj4c1rxJNm4t1udHQypOeWZnKB2VVYAjdn5sAcVyeqR6b4ktx/wiPhfwja3kN4kTG10O1gTEb7ZXG5DuBGRk8njgV34OpSwkFT5dtNLW9f67ClgGpOMbWvvqfEmjalJdaBpMPmBhBe7to+h54ri/GEZbxNqDHIJlHX/dFfcerQ+HbrTdQhsrO0sbxbo2f2hbWKMF+SDHtABOR06jFfP3iax0W81m/1K60XTp3DhZJZnO59oADccc46jrXrYXGwk3GzQ8VSqLDKg+9/wPAyv8qbs7j+de3LbaT9i+0w6P4cRc4AaEnn0zmq1wyoiMun6RFKw4iSzA59Peu5YiJ5P1SojxnYx6Rk0n2O4d/lt5CM9lJr2wSalFaq62VnHJu2t/oadTW7eW99bafHcXF9IS0nz+RbooAxxwBVKrHoQ8O11PB7PTtSa4Vo9PuXUSf8826flXo9tBfTafDbBLqJZ1EUjiPoMZ53D/Oasy3OsxNtuJ7uETkmHnJK9BkKPpSfaNYsFia9muZt7+WNz7l/3sdu1L2t17qOyjKVCnKnupCaT8FtK1mUw/8ACVSJKIvMaGO3V3XPQEFgM1at/gXoqaxBpEni/UILmcoIy2lAKQy56mT6VtaTbSeddSWV0I7u8t/Llk6BcjGRt5//AFV1R8Vapp2ipp9nGmoT21vtmaSRt0mDhyueTxz6+xrlhiajWju/uNI4Wi9lf5nE2/7P+nyalc6XH4qZ5LaMSSMbPbGAf9rPJ/z2qOH4L6FJq50251q9ZorczO4jVUQbgo798+ldVN40W40+S11W2b7HqmySIp/CdwzG2OSBjOT+NXtT8RWliXMzWkt26KqMkJLFcEYYjqM4rCWIxEXyvr5L7zT6rh0tvxOOs/C+meEbhrWwkEu6TPmtgsQMgfh1rYN/uCfMCcc8VzupTbNaYx27iPduZ2ztZmGTtPpn+dP+1AOwUgAD5vevYw7bprm3PMxEVCbUdjQurjcfN3Dv9Qazrq/ijwzMGYDPvVO91KFTtkfr97jNYmoairKPLfJ3ck+npXQkjnNFIrXWvF+iLfXCJZy31vDIzdFUyANn2NfWfi3xJ4K0vQY7PxlZsNL1d5dOeJYHmyX3AqQgJySDjjrXx54d3XXiXR4V+cvqNvsVT381a+xviR420T4bTxvcXsyXF3dNLawRyxxtuB3EoQN+c/Nntn6V34CrGkpOXUzqpzsbnwp+C/jbw1oem6r8TfDDaVbaeoWz1HUYljudS0yOQ/Z5FTmVJNjY+ZVIwCSBiuT174Xy+OJ5fHmuahaC0juZ9Ns2WP8AeLNayjNvIN2wKyTI27JJBGOhz4t+0R+1V8ZPjV4is/EWueJXh0nSF/s+wtbaTGW2qZDIwA8wkopORjJOKwvhH8S/G3iLxpZeGb7XpJrTVr6M3Fu2NrN3Kj+EtjkjrjmvP9lUrY2M6luVaK3S7/E9vDYmjGjHD00+ZyTb6O3bsfbMn7nSZfLQhYrpMdgu1Dx+lej23wlv/EF54h1rT7y3uLiPVJ4oNMVybm4LSOw8tQMDoRgkfdJ9zziWOmx6bqOl6xFJGtwfPiuIk3vGyqwK7CQCpDZ65yB24r6G+E9uuoahq2m6f4yFt/Zl/M1xHcWJU3AmQBtrbgdm4SnI5+dcYxz+1cRY+vlsY1cPur6tXVvd7X66dz8UwEMNmfNCs/dvd2dnfU4rT/2f/GltDb6obAqGAaNfOZMErli4HGBkj39Oa9p8I+D9Q0rShpd1L9surNCWMicgsegyScDP5Ct3RrfX9L0e302Txtpd9AI3S3ke3UNIOQqqoJ3AYPTPQU6bWPEDbrrRfEHh+S4kiWR4rj5EwRkNkEHHTGcng8jJr4DH59jcx/d1XHffVffdF/6r4OVSNS87LpZdumve3yOb1rS9YsfDd0Dpcxvrq4MUMNnlGTBXbIjZXZgsPmJxzXkHxF0m4stEm8RNo+pxy3WorGW1C6l3DbCHdlLMUbkFS2CGDEV7iviDXG0fVptT8RaZG8EjN9ph3TBZIgVeIxMSMFQGG0DrnBzmvMPERuPHkK+Z4ktY0SS1aC3htXjQLEkoJA25Hyt90cHHbjPRk1WtGtzVEuVSXM1fbTTsdVTCYbCQWDoTfNUVoxlb4npf1d/8jb+GPwJ0/wAZ+F/Dnizxp9utJo9PeOGyt38rcr3EkyzOSMhiJPujAFfMH7XHgLS/BPja20mK1kktbTUbW7s5LhhM5jmhdGOdoIO8EYH90V9++DZLi40OwdtcWVPKTZHDGoBUDpnGe3tXzx+3Z4J0eTw6vxI1bxUmjy6c2n2djGgO+aQ3f7xyV+YqscjcKM8HnsfNlnOInLFYavN+znColHWybu1ZevX1P0nh3LYYHN8DUpxTqU6lPXq7NJ3+R+XevXlqfGUF7bzCS3F4uHIK5UOMnnkZGetTeE/h7qvjPxbd2Gj2wmttAug03nFgDiYRqHK/NtIbnHJBNQfEzQ4dNsbCG31K3kvlaf7TDCpUx/OfLy+cPlcHjp0r7J0fRNN8NfCmzh8I2tpFd+MbGDVr+8kJOZ5rZJVkY5ycOcY5wa8Hg3GulRq0aet7f5H6b4xYKVbHUa9ZWet362f+Z8weLPh3qHgGUfCD4vXEOgaRrky6xq2qaW6w29rbWbtEtqqlWMn7xgcAFizqx3bTWjomm/EnV/F17Fovwj0CwmTw0bbw/wCLGv3v4hZrE1vCJrln8i881QY+UDISPlATFe1+A/Cf/C8tT17xL8UvAtx4jtf9THMtnKEDyD94kbJjMYA3HH8TDutRzDVv2evDc3hvwJ4e1TV9KgnuLiwh1QTeXbtLIf3G/b8qx4GQOW3E9TXv4urKdVU07yW5+V4SnF+/FWj0Vz5TuIvGMNlrngXVPhlpltr/AIZ8rVbqMQS75LdWCtJDtcpAwLo++EBXGSQcV9J+Eb608beCPD8+uWdw0MjQaraXE3y3Ec8EgIkBQLhxg8KACOKseBbvVJvEWkaZ4+17XLHxPqHm65LZ2kEostSjMbqLa5LpxGPn2x5HyqM8kVueC/CviiDTfsfia6kvtSmmWY+TCBtmkTMkMCINqxqxVEAHOwk8muWVezcZfedtOEVqfP3xh+DninQ/EnjC38TMh1DwheRLfyWqmUS6fOX8i9kPXaQgDnHG5SeN2PGdSMnnRtu+cxp8ynJDp8uQR3yuePav0I+NfxS8O+A/i3q9hrFwl5dNo1jaalapb+dIXjtoVliYqMcN5uQTgEt2zXyF4q0Hwv8AEfxdaab8L9A1G1urpL11tpIlWJ/IXzCi8/I5UgbWx1U4Ga97LczlCKjiPhtuebmGX8y9pR30IjrmpeLPBFuuoXIkvYozHHJzi4KnBVv7r4x9a8/0vSZLm6kmKumQyIpXqTx+le+fDH9n/wASX3gm9bxtcjwxJcXoaO3nUTMIFADONpwGYnA9Nue9SX/hr4F+FfFDPea/e6qswdmhkvoUitgB0+QB2fngnpjPWumGaYfncYXlbsjjngMVOF5NL1Z4BdXC3HhxAzbXinCuqcAEZH+frXWeHL5bzSfCVxdPhLbULzw7dsRjNvdLviz9DNMR/uD0rrLrwn8DdasFg8O6prulyXC48geXfkyAkhmG5WB/3cgj3qu3wX8Wad8P/G2sabJHqmj6NLpdw1/bHiGdpXjG9Cd0bbJGyCOi5ziuj67Rrvll7remun/AOZ4Gth48yV1fdangHiXwdqFl9r1Xb5kUN20FyoHzQye/sTkZ9ag8J+HbvXr1dLs47OKSINcGa4nWEsox8u52CnnoOpzXs19ZaT/amsTaxI8NhrcEckD7vlhmlQPtkyDhSWcA9iteRXVxqPhHUbvT7HUIyshGJ1jjk3gdCDzjvwK+FzLDSp1pcul9fvPQo1nKPK90fRGsp4O8GaDoejWWoDWGtkC3UUszQSRbw7mROqbN7D5eTj17ZWpaDperGHQZL2T7HqVxHdTbSvm2yxRsxJbaBzkDJHXFfPh17xA0cY+0TMUPyuI/f1HWruoeO/GmpaW+j6hqUtxbv5QbzIvmKx7tq5Hb5iTnknGTxXlVKU6nL5M8rB5HHBynUhJ88lL3m9nLra1mdVeWem6H4oudO8N6hcmCaMR+dIF3tMg3ryByAwxxjORnOKxbuWTVL+xvrS1Xegf7SpLBd3Q7MdMgnjsfasfT7vVbeaP/AEH92jLLvW3bJKnI+b8MV6ta33gbw/Y3UPiYXazSs1zYJBBkvHImcHPTDk9fSuyMmocnQ9XDU5UYKEpXa69/U4rxhrWsaLq81noviq+a0hIjDTYRjjp9wDg19T/8EsfGGpTftTabYXmtNdLqGj6jDsaRmyRGJM88Z/d185eAtN0fW9bnuvF2pSWcEm0MkCq8mB1ID/L0r7j/AGQ/CvwJ8M/HPwdrngXVtfu9Ue6ktgbtbWFF823dCGVFychv4W9K6auXYr2XtuR8pvHE0ub2fNqej/8ABW2xkf4Y6VqEcjxNA64kXtiZB/JzX5DySXkhObx2yfTiv3K/4KBaH4f1j4e6UvinRJdX0oTyrdWUUxheZdoYASAErhlB6djX5W+MPh98KhdTzeH9AvLGCLJeE3vn7e4w21TivF+sRpvlZ6CoyqQUongP2eRv9ZNJg+iio5LNt5WOR2TselemTfD/AESeWVrFpI4kKLzKxyWGc59q5zxB4dt/D98bKP7RI7qG3K24EfiKFiqU5cilqZzw1aMea2hyq2bLz5bN9TQtmGb+IY9Vr0hvGl1NpNt4SvvBuhXQiKP5psxDMVPTMkeGBz3zz6VqRzeHrW6geX4avDPGy/LFfM6OenU84z+VYyxfs3aa/FHM4Yha8jfpqeWR2o4GCR0xXs/wr+FOhXOjWvijxNrE1sb2ST7LaQRqWMSKxaaUuQBH8jfl712Xw9XQPH03k2fgi0iubW6iswus3zC2jWQNlvlUHcGTGCCOexruPippr+D49NtNYl0rTNS0rSb2yil0yN5rIqztOGG4BmISXHQdT6CuqlXhPqack1uY914g8NwaLaaXcfELWNB068jaZLWCWO2VwsrRtkJlzymeuMH8K537J8GEkYSfFXUJS45P2uTH0Py8jvisXVPA/hHx54T0q51z4kWHhyWzW4htGuoXK3KtKkjPuAwoUP0OM7h6Gn2nwH+E0tvHMPilFcIY1/epPGFdu5UFemenNdLlbYWx22j658G9NO+L4t3IwPlVLqRf5RE13WneKvhjpumTahb/ABAgtbe4tx5l5/aTiTaT/DKELB/XZhufWvFI/gD8I5MbviR5QOdzfa4Gx9BtFd1Y/BH4PT+Abvw7J42Is47pZ31uKRXmixkrC6EeUF3MTnIbBq41ZeX4Ezguz/E2F8SfAdY9qfFRU87Ekh/tzUVZmwQQ5WL5j9S3XrVLUtQ+AclvJJbeKH1+TndZ2utX7yuvdgJUVCB1OWHHr0rjm/Z1+Bca/vPjMHBPy7TF6fe6dM8Y+lNb4O/CXwjHJr3hn4mNqWqW8LeTZMqfvg42sAQOoBJ/Ct44mouv5CcItdfxPR/h3H+ybfXyXXjxn07T0eRJ7W31C6OopgZRgphaJt2RkeZ688c+j+CP2KPhz8Qm1i20f4yafbatY/aJP7MkYCdoIzmOUbsDY6FG3c4Dc9K+IpvD/wAPZ/GWh/8ACTeOdT02z1SVf7YkgshI9iCox5akgScY796+vNf+Oc3gbT/Ct94Y1ax1Cy0nTrHT9CvbnSUS51REZ4v3rBSQWWP5lkJBBK5xitIY2otJMPZxaskfKnxG8M6f4J8RahoereLldo2ZbaG2G6VRn5GmIG37pGVQtk5Hy4ry55Jbh9oWZiehxya+7h4g8efHD4maq/hf4Y+D7y9ltYtWvJJ2jtwolO0hVcDkEEEdua6HUvgv8eYtSkh0f4X+BkhOGjEurW/mbfRjGduc56exrjxONp89nL8V/maKk1sfnkum3kynNuQBxubqPyq2ugTeSGuLqJVOOgPHpnNfavj74a/tJ+CreJte+F/gqP7VuVIY7ozynC7vuIdw4/r6V55r2sfGTwr4fTXpPhL4Em0uRC8t1ExvpI2HXzkMhljH+8uB9KmGIoNc36ofspt2ufOdto+nK3+vuJif4YVzn8qmY6HZ/u5IYo5M/MH5P5dvzr0n4qQ+E00vw78QNF8Ow6cPE1j5s9ojuII5wSpZRnoSjggf3a8ZmSGcMsa5DPu6hBg9hmtfapR5oojl1s2frb8ZvB/jXWLGzt/hR4L0g3tpLbm1e8u4IbWJYmZgPKwDgmRyRg8Ko4zTofhLbeONI1E/EX4LaLoXiO/t2t5ta0O/tpZpAy7WKsUBTIz8p3DAHJr0t4biNsLlgTjcrbs0scl9Auz98A33c8gn6GvmI80Voj6CpKNRe9JWR8uD/gnP8I4QsC23jKcAZ82XWrRCfQYWMj9Kyde/4J+fDnR9J1CSxvtX025uLd47Wa/8RRyRxy4JVjFHabpFXGSqnOM819U3fjzw3pd5Jpmt+JtHsruJRJLb3GpQQyxqe7I7gqPrX57ftLftK/GtfiR4u8P+BfiJDN4Tcm0tLuxgtyGtHjG6JJwpYrksCVPJHXpXRS+sVHa/3mHJSv7u54TfWq2EjwrdR3kVpO0AuY0KidQeHAb5gD1weeecVWa4haUANgL2qHRd39ihriQySySs39Kmhs2vJlWPjccCuqS5WUm1ob0a/wBvalaxW9+0cUKhVVWAye+e/XpTfjlqzWGnaR4TjujI5H2y73dehEak9xyx/EVrax4G1HwT8P7vxlbTCXUA8S20Yh37FdsNIR7Dpnj1ryK+m8QeJ7hLq6huLqYLtkuJMndjqWY8YFTQj7V8y2QYmvyU3SluynPM0kMC9MR5+maimuPLudyqQqqFHHYYq9a2F1cahDE8ErRIp3SGPaGABPA7D60XljfXdvBfG1nilZfLnXyyfmHRgB2YY/EGupQseTKfNdGeGbzI/M5brz2q5Jbx3E0UPaQFyFGNuP8A6/FVltpTIqq0s8g/gxsAPoWarc2i6tHm61BooUI/5Z3ETsBnAAVWzT5Qcrl3T7EWL+ZIxdipUDjHNR+Mps3Jt+PkYLgeygf0qD+y7SMq82rPuUqxjVNzEZ9mx+tLfWdjfXE1zFJeb5ZWkO+IYAJzjr1pcnUObSxLceHdU03wfp3i2SXdaX80ixxFW+TYxUNnpkkPjH9w5rW8SfGDXvFGjxaTdadZWywAhZYA+87lCtnJIOQK565jlayt7GP7VLFFI0n7zIXnHAXOBjn65NavhOHR1vs6to8N6g/5YyMyAn6qQan2Kn8Su0NVZR0i7C+FvsWpapa2OoXUtta3UyRzTSM7pGpIBdlTkhRzgc8cV+h2h/8ABO3w3qGn2lnqnxoa1sXQPaibwzcWkbCQBi6mZsc8Z+ntXzN4F8XfBvw9fW9xrHwL0y8a3ZJhIbu4b5gQQdpk2nnHavt7wd/wUh8G27Rw6xo5s3LYR9pUJkYOOCAOn5CuTGwxkbPDxv3OvDui4+9LUx/D/wDwSz+DzoLi6+JWp62ud3/Evu7RBj2Vdx/nXn37X37HPws+APw40PxH4O0fXI7661kWtxPqd15qvH5EjgAbQAdyg59BX1Nbftf/ALOXij7EmryaPBH5hY/aY45d5PPJIJHPevmX9tz4rfCHxj/wivhP4WT2d4kMk9/qd5ayExmRsRwxkZ25Ch2YgdxXDRqYz2qjVg0vw+Z08kZ29656Z/wTP8Paf4e8N+JviNrUSIt7LFpNlI8oQCOL55iM9tzRj/gJr7ntfiN4FbIk8SaVb44Pm6hCv82r8f8A9oLTfhboreFdB+C/xGGoLY6REms3dvftJFPd/wARVWG1SWLkgAAAivHY/EHiy1y0WqR3CAhVWSP5j05yD/SutYeNf95K6v0aM8RrLv8AM/Q39lzxtpPjz9uD4neKvEOrWY/stNSttKaSZPLKm7jiBRs4Y+UigYz8tejftQW8n7QXxk8Ffsz+GrxE0q1P/CSeJbuAAiJEysaZxgsqszAc/NLFmvyg0nxprXh3UrvU2Ei3F6xYtbt16H2Paup8H/tAeMtF16PxBD4/1bTLyOHyftNvG/nCMn7gYtjBwO3atfYbOPQblByUm7NI/d/wp4V0LwR4csPCfhfTY7HStMhEFtbx9EUepPJJOSSeSSSa+Uv+Ck+2T4d+BdK8sM194wt06DJAhkB5/wCBCvmzwb+3bq1vapHd/FvxndXIXktHp5Un6OpNcb8fv2nPFnxUbwpbXPiq/wBQh0fU/wC0bcXlvaL5cy7QrHyUAbGTw2RzVQpS502tjk5FCXM5XPqf9tvxTdWPiaXwXY3DRaRpnhf+05LWONAv2ppJUVy2NxIjTAGcc5xmvmf4dsum/CnR5WX5Y7dbgr/ewxc/TNWvH3xO8V/EjQvGPiXxhrsmp6h/ZIt/N8uONFRd+FCooAGXPPWtHwzZwWfgfw5Z3WxYjaQK+7ABHkkn+dcuEjy4qouyS/U9TF+5ltFPrKT/AEPNfHn/AAkXhn4eXOrLqenzxeKWtZLtrxMNHcSMrhVK/eQhdgB+72rr9e1TTdW1HQPEWi3UU0t2Lu1laM8tD5DM6MOo2uFODyM+9c7468K6trfh2x8EzMl5YabqVveW13bXMIkeKEkrDKjsMEZA3DPAHFdJpui27ahqHia+jsI9W1JRDHa2WWjgQsN2Wx88jfxNwMACu2ClpFf8MRUqU/eq1Gr62s17yask10t30OT/AGjpmh8J6bbLgF9SjIz/ALKOf6V+qf7PPwq8L/DP4b6UnhmC4tpdX0vT57wyTGQGVbdRlQeF5J4HHNflT+0Iou38L6cMj7RqTLx3+TH/ALNX662fw90O10+ys47GS1WKzjs1aynkt2XaoAP7thjAHWssTXnSqe7By9DiSi8LFSdtX+h0Wp6ONUtY7Wa+uFCNuLRhQzcEc8Y7+lLY6PDp1lBY2885SABd0hBZwMnDHHv2qvH4YWCEQ22u6zHtGAxvDK35yBs/jUH9g+JoVcW/je5bLAp9psYJNo9PlCE/nTlS53zSjqc/N7vLzaGl/Zx8yWRpd/mH5VYcJ8oBA9AcZqaztFs41giVUiTO1F6ZJya5e6t/i5bxt/Z+qeE7xhjb9ps7iDPPOdkj44x2pkd98X42ijufD3haUNIoklg1KcbU3LuIRohk7d2Bu6gVnTw1OnP2kU0wabVuZHWzWNlcfLcWcEoP9+MN/MVSuPC/hy62mfQ7Fip3A+QoIP1Ar5r+Pnx/+JnhfxldeG/Bt5YafY26hFuGtVlkmk/jwXJHB44XqOprxbVP2iv2gpbibd46mW2j+Zlgt4VdFx1JCZFaSq076q5pTozaupWPvdfB3huPPk6aIt2P9XK69Po1Jp/hPRNDubq/0u1kjnvAqzM0zybgpJH3icde3t6V+c0/7Q3xpcfvvixq0e7IUCZUyc+oArr/AIc/GXxtrHjLw/Z6v4013UFuNUtIXC3TyBg0iqRt3YI579OvauetVpqDjGO+mh0QoVGmvaafM+yfEmueJLe1vLjSdHt2+wz7XWeZ3M0SlWfy0QEmTYdy8HuK8yW58LWN03xkuvtmmvPGscX2xzI8wdTECbdeGYgLgZHPU16trlzYwXUfnaq67YvK8t3UKu05MnPzZ7EivIdd8YaxJqjR/wBh281q8Pmtf3FwFlJVSQRER8sgZQApJxw2a+ZxDnVqpUIbb2dnbqtv68j1MucVBp6X3d7adVr3+foxl9oP/CTaO+rTapqiLPDDqLQ7TaTqEO9FJUkIF3HIHTtU+qWNr4t0fUvBvhvxdNZzQwqLix2BzE8wDiQyAB1BICOq54I6E84HiTxBpMmm6Tq0llqt3c2zxyWix3PkSgqGBEiYdWX+E88gjnmrHiD+zdJ0afx5pf2bTrnUEhkm+yyFbqZnZdwBGQG5YngAlfm5rzlRqUEoyvZtpaJ2d9nfV/LTTQ9xOU7Jy1vpta+ltF5eSNTVvD8dp/Yt58QIoYRa50qOa6k8uOUyRDcDGWKs+Uzu+mRwK6Wy8N6HJHc2P/H3NGxW6LTDdbyqM/MoxtwCCQeoPWuQ8O+CvDNlvVvEN1fQvi4WS5jSeNF5KhVbIDYbk4OcYI7VU8NWbeHtck0Wzsrm7865YSapMuYr0sMky91B5THI/OsamC9svaU+Z8vSy762Vv8AhypVIyvTjVUWlfqv1/rsdHb6xHqHiS78O3MWps+hqyvczQKtvI4QFQWwQrEkAbgQwANQQ3XiS9uLK50uXw1L4cs4ZWuS3lkxyxbwI49pAGAFA7HcetXvF2vajcW8Q8J2cdzcW2wwNcPIiRZwG+UY3MuABk8jt2puh6fKdIi0W60+1sZYnE7G200rbMxYnKxkHkHByeTjoK0lBU1eFPW9uXf1fa/boYqpekqjsvW2m+umur18tuhmTWPgXx1fWtqyNFqOi3f2dRbg7IZGOcFv413c5U5DL+fEeF7rR7HxJ4x8WOqXj6p40tdLtVuS0oMFu2185OQqoIuh5Yrnqa6zwNCvhFdf1G48J6vDtme60+GaFm+0SJHIVWMgY3ErwCSMEc187Xi/FOO607w/pPg3xNNY6XZwJNJZ6ZIUutWmmE11MHK4Kq7GMNnBEIPpXsZXhZU1Om78sWrX9L/NXfTtY8/NK8faqlSk7WfXTWzdj1348a7qUHxM1+K11i7itv8AR/3SXEipjyUP3c4754FeaG6urg7rp5WUsdvmMXIJ7812vx21S3k+LWu/Z90sUXkQiRI2ZAViVcZxycg1wfmXzXiWsGi6rPcEgJFFYyuST06L0PqeK92rqeBDRI6Dw/DZi6s4trFZbu3UBYQduZUHPHvX2pqf9pxtHZ6bAXLNse6mYbIRx8xXOXJGQAO/WvifSrfxhBqFnbyeAfEGTe2qyO1qEWJPOQtIxLcKACfXivq3UviItj4ga1+WXTpVjEcygYVxksx/2T93J6HFeDmPM0o8t7Xf4baHZCjOs/dtp3/r8B3ivT9UjvjqvniXREs2SaxKhmeXkB1JHuMnd2r4C+JniHw+vxC8ya8hgmtZZHjEkn3d42nkdeAR1+tfY+qa94SX4dalJ4k1O01SSPz/AD9LhuQ/DzM6RDac7l3DBB4IHpXxB4/kvNa1g/8ACL/D3W7i2Rv9HFpo1w7Rr6Z2fTJzyeea8/LcNUq1uSd3b3b2tpbr/Vj0vaRo0Pe15dNNP+H9fxNC01yXWp7dYLOCKSHUmgkumKCU2pjYmRSBkfMR05+UV6Bq3wN8ZLBpN1oXjXwRazK6zXiza7BGQm3mJ1I5PP5ivKvAnhH4qXF9J9o+F/iWxj34SS602Vcj+9yOmDXsvj74K3Hi231mbw78P9WudW+Vob4okSOT5anCMoL7Rv8AvH8Rjn6OeBpUOVav+upx0cZUrTsuWKXf/gnnXiT4I6h4rjmhl+LHwxsDazCcyf2wzgjBPRIiCeeSDxXnusfsd6LDpd5fR/H3wDe3UaNssYDOxnYAfIsjKFBPQZ9RXrLfs5/FbTU0+TTfANndTTRxLcbmhBhQ/wCtypcENnsMitKz/Zh+Jk2rC4j8CsdxxIJ7y2ji6g7tocktx1PpV0XLDaU6en3iquM/jqr5HzV4f/Zr0y41C00/xX460LRNOMmJbl2abysKWXCJklm5A9+vFet337Mv7JMdjO1j8ctevLqFTtmXRwYo36ZIAyQD1GR0PNenat+y78V7ixMmneErCK6jk8yFDqsKjeAQrc/KQM5x04qjpf7L3x4sLSL/AISOTR7dkYSyN/aSlZQP4QEjPyfrxW0sXiZaxhZr0/zMY08O171T+vuPHrz9nn4E2M0a3Pxk8UXmE3yLbeGBnp1XM3866xfAf7Fxjisf7E+IV5d28KtcPHeiASEj72whtueu3PFdNN+z5480/VJX/wCEu8LWVi8Kwx2iG5PlAYO4YhGScHgdqdffAvxXebGsfH2gWc4x5kkdhcTs3sQVXjr71Eq2MbSS39NPUmUMKvtX+84a28P/ALHzNIul/C3xlqMse5GW5190IYfw4WIfN7Vm4/ZojmjtrP4H60Z5S6rHPr05IZeSCBjn2rvW/Zf1q8vYryPx5bWUoIa4ax0WY/aj6sGkArYk/ZTDQMZvH+pQyl/M86HR0jeNj1ILyEAkcc+pqvaYrTX8Q/2Xpf7meSRzfCUXg0/TfgjbxStbmUm61S4ZVHQfMsuM57Vx18vhGQvNH4Zh09GkdVWaeTYhX0yeATwCTzX0hcfs2/DOPTP7P1/x14gklU4aZb+ztOwwcBSc5HrzVCT4D/suxSTaXqXiG6upblFEwufE0a+Zt7ExoMe4pqpWXxVEhv2D2g38j5S1e+mtbvyNNstEVIm3zeZDvkEX95VLZPpXPa5q3iZpIhpV5AIHlC77e2iTAxyN2D09K+urr4T/ALJkV0JW1KxEhUW5K61dSsVAxtyhwRTNP8Efsd6S5txpNpdmMM/7yO6nQEexfGTjA4+praGIhHV1Lmck38NM+BPFV7rU1wGl1Ke8cSd8AADjoOAc1jC61t1bd0b16Cv0A1TQ/wBjefzEHhO4Drkt9is5UIPt+8FU8/swW9wmpW/wovJp4QGR/JjiOQBgkCTb+Y+ua2jmuDpq0p3ZzyweIk7qJ+f8lvqTZkO8k/3u1RPbXUnyquD/AL1fdfjbxx8A4rZbq++BNndmUhWy0ELjPfKKP0rznXB+z1fbVh+Dt5YmRSytBrs6kenHK8n+VXHNsLJXVxf2fiOqsfMGkXGqaHq1nrln5LXFhcJcRpKMqXRgwyO/IrpvA/ji98bfFKVvEjC9l8S29zZzT3SRmZZ2hJieNtv7rbJHGAEA+UFf4ia67XvA/hOe4e70mzvbKxf5UhmufNfdn+9tHH1rzbxX4dh8Lah/bGgyTxXGnziWOR3BPmKwIbA46gV0UMyoVJJU7kVMHVp/EcfqGpS3N41xcM7Cb5selep/srw2998dPDkdxbo8Uk5LMQcrtQn5cd84/KsTU/DeijWIri5t9ovbO31CONsqFSdRLjA7AsQPYCu5+EMlvo3xu8EW+mwRQn7U0jEDHykbcflmuuNR/WFFb3HhVyTjV7M/TfxL4Ph0m007Vrhv7SsdUuJI2jsW82S3KKDJG5HGeRjuM4PIrH8QfHDwP4TvLzT9P1LUdJmvW8zULe4VYmlby8Iys5HoBleeTzxivomz0yEKYYoVBR3lUbcZYgAt9SABmvKPj58A9F+KlnPr3iXSxdLoWg3n9mCJtkv212R0YnGdirGxwO7V9/i86qVKXK1zTi9L7Wb0Vvu1v0ufgmWTo4rFqFam4UKid3fS663t3+654je/HmxuLa7aBhJZ2oWXzIbmFiAhHIG/ORn7oyT15rtrr45fDDVND0nVo9Su0sUgCtO+mFRhuAAFJDt8wHHucVzlj+xf8JfjJqniJPhtea1BaWGkWN9BPNqOY7rVJVLNAw27VVVQAnG7MoP3QM9/8dvhInwS/Zr1Dw3osyR2Jayjjs5MTCCP7Sn3nKje+Ty5xnsK56fEEsQnz8qlH4Ula91rffZH1uL4dweB5adOnJxlJRk+ba7Vvxsbfwr8TfD/AOJEmoaXY6tZCS0uo47ed7eUMLh0jwjDjKtjHzYwcY9/X9B8Ir4V8Y2cOtxrPELae5d4oWMSbnWNB3/vtkY4GCa+TP8Agmfpupa1e/FmzVbU25vbGG4muYBMw3W5IVeQRkhjnOOB3xX3J4X0O+0nXpVvL69vlSxCNdTSIySP5hyoAO5NqhcDGDknOa8LFZtXqxmnO118Pr+R9HheHMtwteliIwbnD4Xd6f8ADdDiPDusTafr0ltZxudPsNak0fOCMXCdR9CrLj6V88/t2Wv/AAmniDX9DiWWafw/pFhdWscLNkXDSlvmA42lSBg98V6H468ZeK9D+LF9oNjbzQaBJcT6zEyoN9zdSQ+QkuRkiNJBgZwS+Cf4a53476l4bk8L+KtQbULWzm1q01SSaWeXEokiMotypHL5SOJVA+YHnp09HCwarRlUjdzpyStruuvna9zvzDH1sFWWIw7vKFSm30atKLfr2PgP4ueDZLP7S8X2w32mzfY7qOWPAeSMDzGXgbQCcYPPBrstY+LlvY/A/wALx2+pSW91YaXDpt8epjWOSaNfwYKq8egr2P4keHda8ReG2vrfS9NvrzWrc/am+2SCSAt8y7y0I37uDuz6Z6V8e+PtNW20u28BX1ususNeP9lghl+YFmRgBkDOTJ0PU9OlfmXAP9o061WGMp8rUW1dqz1Xb8D9m8Ss3wucYOnUp1lUlzLm5d1o19x9ffs5+KPEX/CvbWTw5qVpawSMHZl162t5W3gOvmI0wbcFYdR0wO1es32ueNo7dlu/EkrLKpBjTXoX3jHPCzZ6V8aaf8Hfhv4J8Nz6xr+iWWrQQSRR3Hm2G+eGVMK6g7hksTuI45zWta+Gf2YtRRZls/DtsUyWjuo5LZkzxgh5BX3denUrN1FD1sfluFjGlTUHuz6U8F2PjjSNF0ePw/4z1a/0lXuLtZtT8YgzRJKCVjKPIGkAJ2hZOUAzya35JvihNHLdDX5liQbj5evQbtoBPBEvBNfKx+E/wDmjM9rp+hPF/fhu2wB6cS4FV5vhn8DGXy4dN0pMAgYuXy2f+2vauVU5S2i/uOjlinqyLRfhHfSalc+MvGmoXaWXiHUHtlNvepMwu5JmkQvsZiqhljXLDuQeor0C38c+D/grDqXi3w/o72T3sn2u4+xrh5LhwFDDcdoJyBn0zmvH9U8H/Bfw7CLzR9Q03TtUsbuG+sbq3leWeKWN1YKql2Hzbdp4zhjWD478YT/FHXLfQNAtZIdPilLDzBgseQXYdgozxXq4TByxVT96modfQwx2Yxp39na/RHo9p8eviR8atQ1Gz1C/lg0lYwTEscZfb3DPtHJ9BxWKtxcaYr2unw28cKEnP2GDJHu5Tc3pycVJ4d0RPCItYLO4URuPLZekkhbqfz5p3iK1v9SvWt41YbFG0KPu47n8a9zD+ypytQSUT4jM8VXqPlrNp9jBvtVurkLHItk2eF3adb5XsMHy8j8DTdQ+LPxNbQ4vBsPimG60W2Y3v9n2qQwksEA3S+UiicCPoz7vlNTap4T1y70O5u7e3BzayNlWGc7T2r5wsdY1S1jtZre4eO6RvI87o3lqHi2em0ocH1xXNmuLjS5HyqWvU3yFVnGd5NW2PWYlj1mcQXNsz2lxCyyK65RI13McDHzEA4/Ksa30PwXb3kOm2PhfQ7u8nlWKNbjzMZJwBhZAAc+1e224sY/B9jqDaUVlewZna3jRXUFTmQDju6n14r5qv/CNvJa3WqW+r4eO4CRxeXsdwxJ3j5s57nuOK5a2LrKp+5pqS21Vz1IUqcqalVnZvt6H1r8P/hf8PYI/seqfCvwdqNwi7mknW43E/wCyqygKB+dN+IHwn8CPbvceF/hb4UsL5FJEcjXUkMx9Dumyh9wcetcD4J+NkNrYWtn4yspXvbWFIk1O3U72wP41B6nqSOp5pvib41XWoRzQ6KtwGK/6+TGSOnC9j9a5/YY/2/OoL7lb/I9ijLL6tL95UUV21/4c2fFGhaH8Pfh1B4h8ZfC/wfb3Gqq0On2ME14Zp2xgk7ZSqKCc8ntXzf4u1OPxOtlFJoFnpv8AZ8ZjT7M0nzqf729mJ575r1Kz17UfEUls2o3F3cWlowaaCaYyRsoO4hVJ6nBHTvVPxf4M0/VY01Pw/C3nzkAwov38krux1B3K3HavVq4mHu0cVTjr1UUkeKsPHmdTCSlbzb/zZxXinwvqegxaV4gSPFpqlnA4YdphGNyn0zgn6Zr2v9jXxXb6b8XvBFs1mqXTeJrJpZmfJ8tplQAeg+Y/U1ua98PV8ReB7fw7G6JJBbp5JYfdkRflb8+PcMa8w+CFxfeHfipoO2GN57bWrTzFePds8q4VjtPb7pzjsK4nXWLwk6cd10/IumvY1k5dT9Zv26rW6PwNvNV0+SSO606ZpoZI2KsreU+CCOQcgc1+U+nfFOz8bWbf8JR4d0+4uZVEMt9DGLe5BGOWeMYbI7urHmv2I/aj0ca18E/EFqY9+yNZNvqM4P6E1+Mfw98NaZHrd2nhzXHF4qedHY30YHzKcbdy9eu08ccGvEyenTrQqRqxUlpuelXlJcqg7PU29H8C+Bf7NuNSbx3ryTC4JuLSPRYpvJUk7WVxMu5OQM468ccZ5zxJ4Tt579G8PeIIJI1B/wBI1ezNsR7ARtL79cdK2fDOqQ+C/HsGsatpEGoaK0n2y602fcPMiJ2zwAoQRlWbp3QEcjFe26H+y3rHjrTYfEek+NdGt9BvZGlsJZI5XuHttxCGRAMK+ByueD3r5/P8rWCxCq4dXjI9XLcX7am6dZ2aPlq48ItHcG8m8d+H3nRVXZbWt3ISM5yMxAcfWr9vp8Msnmap4jvJY4yPLaxsFTdj/rqc+lfXejfsO6LGBcaz4+ebIxtsrFRznpudz/Kuy0r9j/4U2cIW7k17UmQYO66SFT/3wmR+dePK8re6jsjyr7TPnP4XeH/B+j6Rr2uXMPifbNZpPbte/ZmS8uUmjIiRE2mMlTK29jjC4xkit34uX/g3xLpcuvWNjrz6bbRzWsnnWJM0Ty2rIC2M7k44cdwK9L+PfwX0jwf8O4/EHw38C2U2qWl/B9olmCXTC1IYO7KcBjuCc9Rk14noviD9oiXULzQtGutMsY1RZJZE05khnTG5TkMA2N2Rn1NelQjT0l1Rw1ubU8U8Q6Hdap4QsNLOoPax2NwyzLJbt5rI8EPBTqCPLPBxUPhj4e+MNYtUj8P+LNTs9NQD7O19YSRF1PO4DBG0kkjnpXQ6l448Yabcax4ot/EEMWqtNHe3F0toQrSBzHJiM5KkiVc596z7X9ozxtJOsmveItBVnZizz6O0pPX5iUOc85r0Lx6nE+boasPwX8fMwaP4ldT/ABWT+nPUV0nh34e+NtH0nWNGvvF0V8upIghkjUxeRIpPzMp4fqOPaul+CL/FP9oDWtS8OfC+48BatfaVYf2leR3VlNabLcOE3BnYBvmI4HPNe2n4Aftr6e0UVpoHw/ZpFXygtyMkdsZk4/GrioSM5SlF+9JHydJ8F/iPIoX/AIWXZfLyf9FYY/IVJa/CP4g6U39s33jy0vrKxBlmgWF18xOhAJXH/wCqvc/i5pv7VnwV8JP4z+JGjeCrLQ0vFspLpB9oWOds7VYRsWGShxxivErr9prxBqFnJo8+seA2t76NoZmhtJFfa4wcFh8rYJ+lDjBMacn10PNfiBp2jf2ZpGo/2tPHfJOsbwm3LDjgFWB5I2g496+gvGEHg+4+H9kg8YzJYRaddrBeSWOxpLpdskcLRlvkG5yN+SRjgc4ry+z+Mnib4ZRwJpVn4duoLhXiMerWaTMjJOzblLKdvDr0rt9P/a88fXsMtrcL8NJY7soJIZIE+YqCFABiOCNx6e3oKz917lrmTOu+Enj34a3nxM8K+MdX8af8I/BqGjz2GuS7pUQuqqUYMAcHKt14OB617FdfGD4L6T4ts7Wx+I154k02eSTKabcBpV2jcCzMMoW7DB7jtXmNr8WvHnjK00a11Twf4Xt7ewtHs7W70eFnXajcrIiRBi+TgtjPr1rn9S1K61fxZ4d0PWtUh8H20+pxx/2ttkjKoWVXJjmQLIAGDYIP3ccZrkxGBpVJ3u/wNYTaWp2HxW+Pnwt8ZWlrr+j+INe0TVtN1eCWa21y5LNLbEEDy2jGWIHXGANwGMVy+u/HD4WS+Bb/AMMafJDqGt31wkkM1tFcTMoPyyRjC9GQngDqBXm/h/xFq/hn4leJ9F0C5g8bTXVy1vY3Eku83EUbnBRU6bhzyOACOK7TSfiN8SNB157jwrYeD7HxHCSHtbi+njubbcCfk3MEBIPIQk4OPasZYOk6bpSvY6add05qcdLHnvxX8Px6f+y74D1Nr+0a6W6u7cWcm6O8giW7k8mSSNgCodJWK56hTXzfDHPI/wAjMWNfQnxi1D4mePY5Y/GUUFrHCr3DrDYN5RmxkylwWLHggHd3Pqa8GtQyqqQjMknTHeu6MlypI5p/FofWM/x7+Nsu4SfEbX/wucfyAqrJ8ePitBbyae3xI18eb/rF+3P+IznINcPqTDTY1kaZGeTlQD0rnxN59wG3Bst83biqrVYR92KX3GmGpSfvSIfixaQ3mgjWL5vOvp7pczyfNI5OS25jyx9ya5iyvGk8G2WmspaRppDu9IweB+efyp3xP1qWS8stHjAMdpH5p56s3H8h+tV/DubgWVvJnDsqDPoTz/Oijeesj0sHGNXF+SR11n4TvbXSYrjaWBXftHPJ5rS8K6DN/aEN5dWjCIsGU7eCK7vT7VdqRqoIx+AxXVWNrE0SIuxNgyFC8CvJrVW2zp9nHm5kcv8AEjxFqWk6dYSaeqxwRXcYk91wQAfbPHPrReeCPD3iLT4tetY2tFuVEg8hsA5HII6ZB44rV8baNb3XhbVreOMGZrd2U9SCOQfzFZ/we1T+2PDE+kyH54MTR/7jjn8mB/OtcN7tFyjujadOOIw8rq7jr8n/AME4rxF4AvdHtft1ncPcWpwrOeGXPQmuXezTcGki3H19a+j57Bp9D1CzniUqYJCoPrtJFeMCzhYKwO1j6f49q9HBV/bxalq0fPYujGlNcvU5f+xdOk+c2u322daZ/YMe4NDEmT224NdXHaqv+rbPPqKesW3/AJYrk9yK7VE47nH/ANiScbYQQOo280h0abg/ZNwxznAxXXSfKw/dj/PrUbFc8xjBHPYmjk8gbOVOkSnINueveozociyfLDnPUj/PFdcnksWbBB9xSNaGQBkZDgfd/wDr0KItzml0vVIVxBJj/tp0qObS9UkO6aZSc7uDXRm0mViQEcd/aoWEinLIBn+HbxTsBj20d5aktIdwPT1qVryRJklkXHXbj0FXdyszcDPbJ61Xmkddy/2O9yR8ystwqD6HPIrOrByjZGlGfLK5V/tLe2WXJPVe9aUbRbd6uUA/hVutUYmvxJum0+NQ38LSBtv4gc/U0yWK5YlWjRFPTGR+lXHVakydmSyNJMyMbuXYpLBdgxyPXrVmG1jZVMbJIVG0ruxnPqD1xWR9luvMHlOSAeAR2781YtpLuBsOudxzxUOlGW6G6sl1NT+yJDMZruwRwwALDGCO2femQ2CWsjRQqY9yYBUnP8/1p0OpNHGBIpTn5h1/WpZdQ82aGQMGEeOfxqXQjFXRSrSloz0LwTHdWPwx8a+fdSzCWC1h+dy3llnPygn26/hXcSfFq4s9OsdPmupdsVvDEEjtIti4UDq+Txgc4riYPF32/wCG+r6M1vaxSm6to4/Kj2s43ZLNzyeBUMsmpSSxo3gOCRfkVnmLkjHDEAuAfpXzUlVhiqtn1/RH21B4SWBo/WEtn2XV9zvG+JDb/LfxUEO5k3pNGqgDoflh6Y/l71j6l8UL63VI4davb7zEO50vpIxGenZFz6iqVvp++YeT4VJCswwLaBdy5ypOXbB4xj0z61YutF8XXl4smj6La20IQKPNto2bOScjamB1966JSrW0OenicthLaP3r9Dk28QXni/4leEbO7uJFiGoQIFlunkVS0yAsS5+XgjPsK/em3vLe6iNxaXUM8Iz88TBl468g1+G3hXQdXsv2hPhvH4umtVN5qli5CxhdkQu0B3qFAHc4xX69x+GPAlxdSat4ftbaG8ub798+m3j2zOmdvziMqG+TJIIJzjmsp15UEudN3/rU4My9lipR9loultv0PRX8QackbSLM0gXrsQmq0njDSY2KhpGHHzbcA/TNcxZ+B5LCF2sPF3ie3idmZYVvUnWMegWVGOPbNcrpfhrxI3jbxNZt4+SeC2jsr5v7S09Hy0qyAplGQKirCMADqzE0fWKnQ8tUqfU9Mk8a6cibvLZvo4qOTxpabD/o5AI6+aM/hgGvmb9rrxJ8b/hf4F0rxV4N8U+HdNt/7QWzn+y2e57jzUYof3isqquxicHJJ9q+Z7P9pL42z2/nTfE7VBI33hCI4xn0G1Rj8K6IVKk4c1wVKmz7e8RfC74Z+J9al8Sat4X1C/1GVtxl+13LfhhcAelZlv8AA34XuS3/AArGO4DN8/2zz3DH3Dvg4+lfFeofGz4na1GrT/EHX5Y2UszLqs647cYcD9PWuO1LxpqsyR/2j4g1O4ZmO1ZbyaQevILGiNK+txt2dj9GofBXgPw+y/Y/AXha2K9zbWkeD7l8mtiPxbomloBHqXhSwCDbtW+toyn/AHz0r8zIZLeZ5POtoHccB5Fyx/Orlvpp8kbY7SaZnDM0kSqEQkZA2jJwM4z3qeW7tcqyWrP0a1L4ueA7PDan478HRyDvJfRuf0Oaxbr46fCmM5m+KnhlMf8APEGb8tpNfBfk2saiSBF+TG3CAGkubyOKzf8AeLH6Etgc/Sq9khcx9nal+078FLWQ7fiXBelSfktNMkcj1I+T+tYE/wC2F8DLWUQW+va1dTHK7ItG+8cZ/iAwfyr4nutQs7thbaTb3GoXMj8pp0L3EjYPI2pk10PhP9nn9ofxlqDX2k/CfV4bW4cyJPqQSxXAGAczMrdM9BUujHqUpJH1HN+3T8MIpGjs9N8SXTr8v/HvDFj6kv7d6wdW/wCCgHhmxv4tNj8E6/JcSttwbyFFUkZGSM4/WuP8J/8ABOH4x6rG/wDwlnjfw7oMFx8zrCJb+ZPoAETP/Aq9c8M/8EzvhPbSJdeNfGXivxHOnaGaOwh4/wBlAW7f3qOSkgdWKPLtd/4KH3Vlai6t/Ap2STGH/SNXbch9WCp0+h71j2P7dHxw8WXkdn4E+FI1d3+ZRax3t0Acf7BANfaPhn9k39nnwd5cuh/B/wAOmaEBln1CI3cu71LTF+e/Fen6dplnp9nHaabHDbW8fCRwRqqAewUAD8qV6cdok+1ufEmg69/wUA8bOjWPgHQ/DtpKeZdYHkEDPdDI8n5rmvVPDPws/aamaO48cfHbRLTyvma00fw/5x78GWd+fwXtX0msMOchC2evy4z9cU6SS3t0aaeSKKMclmOAPqTQ5eSXyM3VPK9P+H2vLbx2974+1a9KAKXkhghJPqSsYwfpXQQ/DpnXbeahLOSdx8yeTLf98kVr3/jrwbY5WXWIZiq7tkH73j3K5A/E1wPiz9qD4Z+FY5Futa0+CUfcFxdKCffYm5sVwVcZhaD/AHs1/Xobwo4ir/Diyvf+HdKs74x3nwx1JvLyRK9u93EVHQqY3fGeuDzWLdeKvhXps/k/2PoNvdouNk+mSGdQfVBFvHtmuI8V/tx+E4/I/srxLbyxyACZbOMo8eQTwzqST0HGOvtXz740/bS8eXlxd/2Hdy28Us2YDBdSPIqDg7pX6kjGcJxjArzJ57QcuWlCT9dPz/yPQp5dWavUaR9a2/xC8LmV7ex0O8fH8Fv4dvCkg9QfLC4+pFW5/iTavGRH4V1OJCmN81pFbDd2IMso49vavzh1j9oj4wa5POo8Wan5LgsRcT5YegVtvOT2wOO9Z8HxU8aN4TufDNzfCJZ7xbovFkPuAK9c4AIPQAc5NTLNaq1jTX/gWv5Gv9nw/m/A/R69+JWsaTpg1BvBbC3OFjvby6tYbeRj/CHE5GT7flTbX40aH+9XxTJZ6IUwE8jUoLrzB3Y8DZj6nNfmfJ8QfG1xpNror+KNWl0y0uVurfT57p3gjlXPzqhJA6n86xpby6uJpGmi80SsXcvg5YnJP4nJq6mZycV7NJPzX/BJjgI/aZ+l+rftBfCfSfNmm+J0gwzL5Ma2+87epXAyQOvWuLvv2yPhOtx9nj8V67esfurG5QNnody8V+fs8smfkWC3l/heNcEceg/zzUK3EnmA+bG4KgMNuRn61Dx1aX2vwLWCorp+J94X37bHw7w0dto+vXSxvtZ5Z3KKR74wB7+9Y9z+3P4fWJLfSvADzqQJG8+YlQx44wwz37elfHMWq3H2Y2Y8vyM75F2gbiOO1D6lCFKqVPrtXgAVjUxeIekJv8DSOGoreK/E+q779uXxEytFovhewsU/jBKufzOe2OK4TxN+1p421omG68NWjRPInm3ZaVViXcM58tlxnp0rwaPVrpYWghtyqlhgYG36j8P5VdGrXnkCOO4kiLrsZonKEAHOcjnrWfNLm5q0m16lqnG37uKNzxP8TfG+oeIQ1jr2rWmn3TefHCl/PtijOQANzlux6nPPWrNrf6zfwxrcateTSq+9mnuHfzPqS3WvO/EFzrltqlo2nac11AYwJZAQ20g8YGRk813nhU+E72OaTxJ421XSDGoaNE0He0nqARMw49xXfaVSlFwkkvOWpk3yys02/Q2VtSrNI8ih5G3tu6k+vvUN1HNcySoWCxFcFh1BrTguPgfHcAXHxE8bXSou4CPRYY1Y5Hyru5BIzj8OauXHiT4Bx7Fh8P8Aju9K/MzTarHAW/BFwAPTqfWuSphnf3qi+9/5FRlJ/YZiQ2sMZgEkhYRYznqxFRXgt/OZre7kjaVfmIIBBB6CtiX4gfBVcfZPg7qV+RIGJvfEtyNwHVSE4ANVLn4neC1kebRvgD4TDRg/Le3l1dbs8qeWABH+eKIUYx0dX8GN872p/ijKka3jvhdfao0B4ddw4GMDmpbi60lYxMdTgwgyf3qgH2PPNXZPjNMzLNY/Bv4d2UqqFZG0bzcEdxufjH49ak/4aS+Jke2S107wlY+UT8lv4dtscDHcHjp+NNUMO/iqN/L/AIIP238q+/8A4Bx2saxod9HFbLJb3OHHyp8+OcjAGc0y00Se+3zW2latdqjnb9n0yZ9g/u7gpB/+vXSah+0L8aLm0+0af4stdNBOGa10y1iJJxjBWPIP4/TFVZvjR8Y9RtVstQ+JmtiMqA5inCMfqygH9a3gsPTjpKQmqz6L8TLb4d+OtThP9m/DfxbMshyv/EpmGfcblHFcd4s/Z7+OmoWczW/wj8SCIg+ZJJaABRj7xGcnHsK6+Tx78QpSsd/498Q3QyT+81CU8Hj+96Vn3GqatM7yS61qDl+rSXUhy3ry3NdNLEUqMk4Jv1MqlCpVVpSX3Hg1r4b8U6dfrobaXeaheyLuhhRGeVUTK7WU/NGBtPynGFwehr0P9mf4d6/45+OkE+r3FzosGhaff65JPLatIDHZQNKYQMjDMFIBzwa6Ka3866WeaVmckksTlmOMcnqfxre0G60+0XVBNh559Nngt1bnJZTu/HaCMe5r2cNmfPXj7u/mebWwXs6TlzbeR+uWg+JLW1tWkhs47mK5XdH5i/MhIB/keldZ4S1bR72NrX7OkEiAZDdOOmM9q/LDwl+0zryaXYi9+Imr293DbrFKkkzFdyjGQcYOcV1Nr+1R4gj2lfihKw6jfJF+Ryma+ur18LiIvRpvr/TPyzL+Hs4yyrBwrQnThe0WmtHro7Nr8T7t13wvpGhtc6L8PbuXwxDc6pNq9+2lYX7RdSKAxyc7QQBkAAAgYrgPil8JdU+IngfVPC7fETX3ur2NPJfULjzYFZXVhuRcEj5e3Tg81822f7VHiqTbJH4/tGB+95scJ/mM1vWP7T/ja4x5WvabdY4O61QZ/IiuyhjaFGmqafza1++zZy4zKOJqmIlWp1YpN3UeZ2XZao739nf9k/8A4QVfEttrfiG6v9X1a9hvJU0ieW2t/JWIIgOSGY5ViQeBkYzzXqln+z3a6Xqg1qD+24r8ymRZ1vpFbcfofTr6180r+1n8R7PUryTS10fzImFqW8hwW2qGJ4fjBcj3x2xWzZ/tpfFqM7bjSdIlYdxJOnbH941rTzGpQjyYaolHs0ypZRmuKtUxsp8//TucUvudtfmfRa/DGPZHrS3l9eLcZkM7XZnjlwxIDLkqwDZIHY8jBrmfGfwNh1+z1H+0lujbyafLHFAsHypMQ37ws2c5BxtxjuMHmvnzT/jFp8LRND8PoLWOKYSlLPV5gpGGBQB1bYpySQuMmu3i/bgsfh5oq6bdeBdTk05Yp/3P9prK/KsR8zKDjPHWqeaV6b54VE392nYSyHFuatUrJNq93CWvdvmvb0Ofb44fCTT/ANnebXtW8RIni+XT4ba10+G2MjreRx7SGB/5ZEgEnPAz34r8+davNa+J3xGTW9WsIrm7lKIbe13QCbbztDg5jAUEl8/LkE9K+hfH3wQ8QeHvhvb+KNV1LQ3n8QXc9zDBbTTZsV37zG4KgPkOAGyOVJrxPwzqVx4RuNSZltnmvlWJZI3bdEg3BwMrxvBAJH8II6Gvjsvp1Xjk61owu9T95zarkNHKZfUJOdeXK2mtnpeKdlofa8lho/xH+HB/srUtPuYSYmBt5BN5eEVhDKyk7nU8MwPvXnOk/sW6p8Z/D1xDe6/ZaHc2zMral5TyRT7fmWPbnLMAByOgPOcVzfwf/aO0fwjZr4d8aQ6hc6Q9yhElm0bPbW5P7xUUqpY9SMseuM19xa18Q/Bc/hG1vvh1q9tdeGL+z3afPb9FbGORwVcNksGwQ2c19BTxMqNSVOlPTv3R8mp/WKShKNr2duzPz+h+H7/CTwvc/D3xV4P0wahZ6rJdQ6qsyzNNBtKoRgY2v8zD2AHUGuS1K8sHMvm2NtKp7NGAB+navZviVfap4oOpvdf2Wj2reW5dC9xPltys5AA3YHy8kKQeuSK8Tm0G8EhLbQzAfLIp4B55r7DKsypToeyVk1+J8fneBqUsQq3NdNfdYz08P6beWUl9Ys9vPasJJkIzH5ZPDL3GCOevUV6T8PfBzWbahrF9H5QkuJXMjLgCIMSG9gRzXMaBp8WmzRXkxDsjbWTcdozwScA8Y7V6Zr2qTXFvFpfhmP7ZYOsYuDbKXZJAAu3A/hGATXLmNWdW1Ons932RrllajhoyrVtWlou7M2/j02bUNMv9Gurctc3gjDSK3yqyoB53mAhTvEhGwY24zzV7x9ofivwXeW2parzHc7oUaNlYb+2SvIxxkEYxk54qW68B6tHp3mXk0VvKYxPHCy4kLDlAB6np6jNdh4s8YeFda+HulXniO6ud4uIo5Fgi3SGaP/WKQxAAZMgkkcOO+K8atiJYaUPYNyjs+ptTwscaqn1mKhN69vmzz3WPDvjHw34bXXL7WpLPTpVVk2SQ+Y5kBKgxkZHHOAeBn0rze68G+B7u6GqXVu/nbgw+fYm4tk5CnA+ZiTgc5Neo/Fzx5pfivUtI0LQbkT2ohFyuyFm3O2Pl2+oyi7TzlyKdJ8Hdag0uS7k1CKe6gj+0NZLcMZSBzjAXYTx0GAcYDE1rSxS9injErt6KxlWwklW5ME3ZLV3OJ1rSNa0lbAatZ3sdtKHjjWR5Y8Z2EbQVUbFAGVB4yDiuQi8A614i1a6i0HSBIyOXKqJJCQSfmCIDgdOvqK+ifinpN54obwdZ6XPbIGjluZpLhtkcUXkod7emcYHqazvC+hwfDHxBbaxrWvWctnqqNZpJHGyqsnDLySQQQrD647VlDOXCg5fbfQ9KGS1JTSi/c79fkeHaN8Ndc1i6u7ODfcXFmwjlit4JJGHAOcBeMEgc981D/wAIrbQyPG0k8rxsUOzAHH15Fe2/CeS40vxt4oW+0+5ha4dyjOjBMiRRjcRjJxkAE8c1y2heDNO8QW91q+ra3FpsMt5LAgmK5aUHDDBdQMHuck+1axzeopy9o/dSW3mc8sBeK9nq23+By+jeAdW1KxF7psUsVpu2gtMdx98BcYrT8P3H228g0ySALNHIfMn6kBWYtjoOST/31XS6/rmmeA9HOmXTR3ckUJa0mibCSJ04UE4kB4Iyc5BB9OL8N6tZ2ln/AGnJHFFPLKY9pYZOeWP5kD8KzeIniqcqklp0NsPQdKsqd9d2e22durQjMmGx8n0Arxi+0+bw78WJZtPjRJLyRJ1LruCl+WbA68qfzr0HTvE9usKypsAAx97gfhXEa5qbTeOE1ePbcTC3MCmM58oc5Y/UN1NY5ZTlGtLn2aDMJqEVy7n6/wDxT/4nXwb1mYYY3GlCf5e/CtxX4eahJ/ZGuW95BJJDe6ZrU9uJo+GaCR2O1vXawOM9uK/bvRZF8Rfs+6dcNh/tvhOCQ+hY2qn+dfz7fF9dW034oeK45ZrpVi1m7VGMjcASsRjnjGa8bC4v6m5xS3/Q9aMYy5ZS6f5HvfxAhGuxWepQReSLxTNAqRlSXb5ZYwe4y24d/mavs/8AZj8QeLPGXgaSPW9PMeraXcGzvPMiW3aPaoRVKKBjiMjoMkEnJzX5meCfi9PHCui+Lrh7iCJC1vfYLTxbR8kZPdePl7gnnOePcv2e/wBqj4ieHvEyx32ppc2niXUt995sS/aH82TAlMw+Yuu4nnIOT9a1xuIjisIofaTIirYhz2R+il1DrVux+0W/lqvIIJII9QScccVCdRumbdI6kf7Rwax7ya4Zj5kz3CjP3m3HP4mkWR9qsYcx/wBzbhh/OvnOVPc7o1JRfusvajHb6pp0+m3kLYuImXKjpu9z6da8Vbw3eaSY7ZbeW5jgJhYR/O4weQygZH5Y9K9ekuFysYUKDwFf1/OuN8deGtc1Kzl1bwyyW2rxR/uoZsfZ7ojGFcjmM/7Q9s5q6Vo6Cq1ZT1Z88/tDeD/C8mveE5F8J3mm6TeRy6Hf7m2zXIb/AFbF9gBkXcvOP4RxxXFeE/2afhDqmtXV5r+k+LNS0+OFYobCCZoTauSP3sk6IS+QGwu0Ac8nFd948sfjJ4vjj8Ka58O/scttOt1BexXAeBJUBK/MMgA9MnvisK5+Kfjr4VeIp21Tw7dxWV/I1tFKzSIlyytuQxkDk/MRjrg11pu1jlep6z8EPhH8FvhX44Or+EtL8RaJcahZS6fPdX2rvNBHFlZQWUohyWiQA7hgk9elfRE1rDq1no994e+PunLNa2H2G4L6oiJcbGdd23zAwJ9WGTgEEjAr5Vj+N3xUhQtefCfxVGmDuUMWyO+R+mD71TX48a1ZzOZvhX4mgjxuJWzzjHrgVrCtVgrLY5quGhWkpN2Z75+0t4a0T4kfBPW/hzqHxN0+a5msFkLR3BvEtJIpxNHKQrfOSNyYBZxkAcZFfnlJ+xT4kCn/AIuZ4cU/w7rO85+hEZr6Hm/aGsmuBJc+AddkTJLK+kFiM9CMrwamuP2ptFt5W+0aPrkJ6Yk0zBOfqtJ1aj+JGsKSpR5Ys+XPHXw3vrpdQ0P+0bZrzw9Ll5dsmy5DRbW2ZGRlolI3AfeqTT/2PvHWsWsOoaR448HOJolmAa5ulZGKhgp/cYJ5xwcV6hr3j6z1LxvqXxP03S72TSb+zMF60lrt2SJ5YIORtB4HXH3q6L4YftB+CdD8Fab4b1SOBbvSUNru/s+NvMiVj5TF9vzNsIByTyDUObuaNHqGhw6lp/huaPUbOG5kTy2ETkZlJRRLtJ5XkZGfxrxP9orVIL2z8OW8Gn3dkyX0paO5QKuCijIYdfyrudU/ab+H8Cny5rVTnr/ZMZP57a8i+MPxW0n4nJodppdyHGn3Mkjg26xBdwXHCgHnaRzSppuqpMpe7BxPPfDOsTeF/ilp+tIFRra7i3sxwPLJCOCew2E5r1z41eF/CVhq02o6TfzSXU0374ySeYtwcYZ1BA2jIJGOMYrwnxIrHxAzqqxpcggAdFByMA+2e9dLeeJW1gpe6hebpREi4fqgAAwfxzVV1Z8w6WvoUfFGpPpegXlzDdNG0iGFNrkAs3Hb2J/KvNNIjlFw/lrlliO1fU44xWp411z+1bpLG2kDQW3LMOjP/wDWH8zWbpNy1tcyPnB28fn/APXqIJqJpJpy0O78R6l9ruiqZ2rx7gdqyZL1rWCSZmA2jC57e9PmfMhc55/lXN6tqFteOdPmvktY/vNK0bPk9hhefxrJR5mdc5ezVzBvryTVNWluHYsZpAFJP8I4FdTpu61aG425+zusg98EHFc1p1mzXz87khyoI6H35rqbEDbtPSvUoQtG56GT0r3k+p9CaAsOqQwXVswMcyBlIPGCK6aO1kt1+8B755968s+D3iTy7j/hG7phh8ta7u56lP6ivTfE2prYWK7sI7sFHPbvXiYii6dTlZpXpSozcTN8U3q2nh7ULppCAlu//oJGK89+D9+dL1qwheQATR/ZpAenzcj8jil8feJ/Os10GCQESMJJsd1HQfif5Vh+H7p7G8hvItu+ORXGRxkHP5V6OCw16UubqetlOF56c5S+0rH0jeSwx2t82QPKtpGk46fITXhG1tm5QRhcV6hdX7f8Ifqlw8hkkuI1j3f3t2AT+OTXnX2eRvm2FgPTnmssni1CTl3Plc1haaj2K0eGUcxq2O7U3zCcIWAx7/0q19hdlOFAPP1xTfs21jnbnFe0eTyMqP5a/wDLTd6Y6fT3qMmNmba2M/3vX2q79lg/i/D1z+FDQ24YepXrjFG4ctjOaMe5JbjH+etI8bZ2hsDr9K0jDEE+VT1x0pDaqoLbGJ7f/XpWYWMwNLHkbsjryak85dv7wbx9eprQNjltrIBxuzSGx6bdoJ+UE0+Vjtczpls5B86/Tt9KrSJbhhtbYO+eK2W0k3ERjMiR4PZuTVGbwXHIw8y+fk5yecf/AFqnldwUexlySRR/KtxGOehbmmNcWzOMTRqSducitlfh7Z53DUuT7fdNTw/D/S3ysl8S2cqB/wDqoUbhyXOfW4s5MKLhcHjHrQy2snzR3Kf3SBXXW/gXQ1bEk0hz0HPI9PpVm38I+Ho5ObOXAXG7b1/M0mivZNnFGz35I6Y+lVpIliuo7QsD5uP616fDo2hrHjZPtxnaVUYPtmuO1m60O18XR3cajydOiKvEXALOFY4Gep5FZzkktRqhLsV/Cqv/AMJZYaVJl4Z54WaMtwfnH+ea+idL1DxNfLeLa2dlavDKhR5bYbOSxeMDCnhdoz2OeTXzDY6hqeteKEvrFWgupHHkJGSDGF5VRj0/nXQNrvxAkultbrULve8xgj3yMoaTbu2jcRnjmvKlVjGpKVr3PUq4edWhTi9kj6GC+MFZ0l8RRImeGjsUXafqW6D/AApt3dapbWAgk8XLcXDTB2maWODEQUjaAvvg+teY+E/g/wDFvx5H5mm3VoI5CNz3Wowwgemdx471Y+In7Nfxf8B/YF1BbbVJtQn8qKPSbr7XklSdxMa4wAKzljYp8rjuRDLJv3k0c78RtbaPx3o5h1lLm6sdPVvtCTbyJDMzD5hzkcV7n+z1468ceJPG+jeH7rxpqlla312tvJJHNlgrfeIzkZwK+LbqO+sdfnW4YmS3kMTsz5zjjr6cV95/CHR/2f8A4P6b4R8dfEDx94ptvELW0Oqy6TaabHcLISvO1gfuHPGcH2q3VjGLUt3sUsPUlFez1Udz7V+MOqWfwK+GereNofE3ijVzpyw+VBcXhxMzuqKPMAG1fmyeDxnAr5gsf+Ci3iOwknvtJ+G2kK93tFxLcXzlpmUYG8hMkDnA7Zrpf2kv2uvh58ZvgzrPgHwD4T8Y3F1qTW/kXF3p6x26BJVctkMzHhMAAdxXwYPAvxVuJC1n4F8QTBckKthJj+VRh8NeLdaOpzVJuDsfRX7QX7Xvib4/+DIPBeseHNF0Wztb1L9ZbGSZpHdEZQpLHG35znj0rw2PxNcwsrPI0MMTLtGcA9BVZfgT+0drEeLP4U+IdrN/HZsoPPb/ABr2b4P/ALB3xG8fzXUPxRbVfBVrAkbWpeKO5Nw+eVCI4KhQOSfUDFbSjSpR1dkZqcpPQ81XxVDHcC3jlCRhS7HaMde9QTeMLV7yNZFjkjTceeGzkdPbB/SvsbQP+Cdvwx0mRZte8Va1r7jho0lWzU8/QmvaPCH7M/wJ8DzC60z4U6bFNGobzNSU3mOM5y+4Z/DvWSxeGWkXcp06u7R+fnh2y8YeMr5Lfwp4U1LVGZxtNrbPIQc+w6Yr6W8L/sjfFrUtKiv9Yv8AR9CBVcR3BmluAGx96JVG054wWr690nVNNsYWtdPNpYwrgeRDD5K59lAArU/tTTYY8XF+ZAy/MFUKCT6EmspVVL4VYpXR4N4f/Yg8Kxxxr4q8eaxqDAfvIdOt4rOM/wCzube2Ppiu88P/ALLXwG8PyJby+BbTVZ+XSXVpJb0kA8ZVz5Ywf9mvQl17TIlVYJYGx2kl6/XvzTo/HGj2xeJbm2j3fMzmTcN3oM9vwFZOd95Ds30L+h+ENF0O1S00HR9P02Dn93Z2sduv0AjArYis7VW3cHI9iRXG33xW8I2v/H5rFsI/4n+0KuOeO/Q1y3iL9oz4Y6DFJcN4k0uGTI3EzK7FByRtU55HSsZVKcNZMpUak9Ej2D7REyssKsdnB9/p/wDWqTzPlLCJVHfe/FfJ3iT9urwXYRyDQ7We8IbbG0UQUFfq5Ax74rwPx5+3N8StUna10W1tNPjdSFMh8xh9BnArhqZrTT5aacmdEMunLWTsfovfeLvDtkjtdatBiJvmEb7yD6eled+L/wBqL4W+EYZZL7WrVTHnAe6Ql/oqFifp1r8xtc+MXxJ8Y7o9b8U6zdRnlYYWZYjn0EYwawU0vX747o9F1iZ+in+z5j+Gdv8AnNclTMcXL4YW+R2U8uoL4pXPuLxd/wAFCtDeN4/C+k6hcHcQrKggVh/vNlsfQA14T4s/bM+J2vTP9htdN0wNlQxV7iQD/ec4/SvHV8F+PJVLQeDddlU/MzDTZsY+u2tOy+EvxU1KOKS2+Huusr/MGa2Kgg/7xGPxrzascVifjTaO+lDD0PhsiPXvip8RPEckg1fxVqdwhyPLScxrz6BcVzhmlZmeRnLucszcsfx6mvQLX9n/AOLtw3/Isra8Z/0i+t4/5vntWnD+zP8AFqeMzNDoaIvB3apGT+QB+tZrL6/2YGv1il/MeRtJJG4+ViH6D/Gorhv7vHcbjXsR/Zb+Kku3DaEhYnG6/bsOuBH0pI/2RPiNPIS/ifw0jKMlFaeXHoAdgBzx371vTy3ES3jYzliqS6ni/mFkKtw3cq3eqkxuNm+FgxPbdX0LD+xv4s2j7Z450hWb+CCwmkP6kc+mavWv7Ft9uQ33jebBALCHTFGfoWl4/GumGWVkZyxdM+bmVl27pOF6n+lOUyIjurbic4x/Kvqn/hjXwxHn7R4s8SN2/dx26enOSp71ct/2Q/h/bxlLu98Q3R5b/j7RCD/wFMce9a/2ZUfVGf1yHZnxnJDc3UjNIWVc8HuB6+9aMOnYVWD4T2719f2v7J/wxjkVZNP1qaLk7ZNSfBHbO0Ln8K1LX9lX4TWt0btvDupSo279y+qzeUuQOytu4xxlu9avLqklbmSM1iYp3sz40S1tkYssgwBtxn+dN8m3iw7P8pbd/wDW/Gvt+P8AZn+Drqqt4Hi2hkk3fbrncdvBGd+drDr+mK0rf4H/AAnsmSG3+G/h9fKzgy27zl/Tc0jFv1ojlklvP8BvFrpE+DZ76z+VlVY1DHo3Uf4dqS3vLYzMxkGz2r9Am+Dfwh/eTP4C8OWxuHYSN/Z23g/3Bjav1GKs6X8I/g1YzJNZ+B/D7zQncv8AoqHyzjryuT0B5781f9lRatzCWOcXsfn1c6zpSBVW6jARh/FyaY+pxzKPs9vdzhsqDHbuwJ9Mgcmv0jg8B+C4nWW38MaMrI2QwtYU246YIXp1+tbUmm6fC21ntCu3KrGR8vsB+FEcnpx3bB5jOXRH5kadovi+8VZrPwL4ilhjP+sXS58fntrpdL+HnxT1KX7Ja/DHxG8u1n+azZV2jrktgD6Zr9C/7M+3bwvkRpjozcvj1wMD3q1DpMcLKkaoVT5Q6g8N06ADBrWWXUH0f3krHVfI+BLH4KfGa4ICfCnWkbd/y1WOPr/vOK2F/Zs+Om4xp4DSE8ENNqdsobIzxhznrzX3FNHdbtlnNbn+8PMO719DmmeTMsyrEvmyqvO0ngeuegoWW0O34lfXah8Uwfst/Hh4/Nl0PRIW5ykmqpuGAf7oI6+9TWX7Ivxo1KQi8t/D2nRr/wAtZtQLg/RUQk19pOscETSagxgPG5VkyM46dM5zUVvKl5/q5rcKM8MxUn860jgKEdo/mZvF1H1PkKP9jP4mXEiwXHibwzBGj7g379846HAQD8M5rRk/Yo8YRxM3/CzNE3jgIunS5b16twue9fVyfZ1ZGjuIEzw3U8Hv71ZnvrO2BjhvIZG65xlvpgA4/OqWFpL7KFLETfU+WtN/Yju2hWTVviY5b+I2emoVI46b5M+tdHa/sT+CFh8rUfGniOWcMOVSBFx9AD29697+2G4tfLmvjGdvWPEZH4njP4Vz95pmpXiyJZ+ONYWQ/dj+0xk5/Lk/41osPT/lRk60+55hafsT/DNWia71TxVc7W5xdRR7h/wGPisP4wfs0fDz4c+A7zxX4Y03XPtUJitpJru4MyiOVwpcqQACMgZHYmvWovDuutKtu3jDUlOOsiTEj/gSPx+Vc/8AFb+1tA8AXtxr2sXOtaT8kd5apPMGdGcAMRJkAK208cjA61006UYSTic9Sq5RcWfnXdQtZzS2rLgwO0Zzx0JFVmk2n5sHHavdvGw+GfjaY3F3Z32narwhmsXQK4HdlZSGOBjjBrgh8PfCN1J5cPi7VI9zDaZ7GIgD3wy8/SvZinI8pu25xYuLVvm8so46YXg1L/aEccbMs2M88A812c/wZgk3f2f8RtJk29Fmsp0P5rvFU5Pgn4o3brfWvDl1jC+WNQeJm+nmRqP1qtSWcdY6ldLNdqLqVQJxJ9887kHfPqDWxH4ju4o0Vby6Qr0IkbH86sXXwr+JVrdSra+EzcwuitutdQtJfmBIxxKOx6e1UZvAPxNjUvN8O9f2r1MduJQB9Y2aqUmiLGhH4w8RQL/o+uXQ90nbP05NU9T8Q6rqqn+0NVuLlljKkzNnA9BWVc6H4ssf+Pzwl4gtwcf6zSrgD89lNg0vxFqji10vQdWubiUYVI7GYYJ4yzFQFA7knHWm5hyno3/Cc/F7xd4PnvJdX0WXSdOjuJCtxG6uiRNtYK2CGf5lOPevE38UXF7MfM2q7E/dXA/nXpvibR/HFr4f/s1NJks7Fkw4t7fZ5vO4l2Ay3zfMfevFr+zurSb95C6MG/un86wbkao2f7YuAoy2B6nv/wDWru/g78fdW+HupXGj6ldSHwxqcgN5Dy32dxkefGPXjDAfeGO4FeSNfTsnlyYKj25NZGrXTSL9nTjzDubnt6URlYuLcdUerfEz9pDX/Fd9Ja+Emk0jSYy8cbBj59whx8zk8LnaCB1GSM15yvj7xpDN9oj8UaiXznLTFh+IOQaw7eEvIFUDjqx6Crq20zRHMccifTkf1o9rNbMJP2nxK5698M/jQuo38Oh+Lo4lmmYLDeL8iu/ZJAOFJ6Bhxn0r6a8JaLeXesHWfD1jJZpFKjS7bpy0seFcpuz8pb5hxzz14r89JoTG3cqf0r6m+DfxU1y30vTdWt7gtNPbNZ3av92WaA4UkZ6lGBz7V6uCxdas/ZN3fS/9fmeXjKNOhB1I6R62/Tt8j7Ahk02O+OqW3hPwtcr5/nLNc2s00jIR93LyHaQcfTBGO9c1b+Lry41TVfE2l+EdEk0zTdRim+z2tkDIkqgZmgJz8ylSSMEMrkEYPHk+sfFbVLrOn6efsbXh3Suql1iUkB5ARyvLA8A9yKd4s+IWk+H/AApF4Q8DXU11DKrreXLRPC4QkFnDNg5OeSBwAAOa6Kssd/Dlq5fcl+hy4algF++joo/e389Wem6frl5H8WNG8ZQ+CfDmlQ6nezXFpZLpMaRqkeJG3xkfebaGHpubtiuk8QfFdvCfxEuvHl1e6BBdeQrJpdposRklzD5eJCflEZ27hnA3DOeK8v1r4reHzY6Lq8N1Lc3Wm3EU9xbyQNG6q8TxS4kcBNy788nDY681R8V/F74ezQDVrPThqGtRxbLWS4s1/c9SGPJ3bck4AP1HWuN1sbWnHmg7W5fl8/zPUVDA0YScJRu3zfP0X5HoN38ZfGF94Q07U5rfRQZVkhs2XTYCglj1BJ4ojuXGPL8yNCewI5zTbyxs/tkkGsRaeJfsIWXEccUb3jGQIxVBtWRo87toAbrjPNeKeIvG2j6x4A0vwPpbXHmi4hluxujOWV/MZo2Vi33/AJgccAVSXxVHb6pbw+JHv9Y0rL3b2ckpPmXByBJuI5YEjqc46VLwWJqKU4q2r06nbRznB0Yxo1HdtLVLT776Hrnh/wCJdzoPivQPCVna2cpv9Ot/Mluf3smHjVmOGUrkHb7nnkVm+JPDXh/VPEHijxl4ksIrmzsJlWOzT91HPM0SFiwXAxl1HTkk5zjFeb6b48Nv4+uvGOoaLdXUGzy7GEBlaAY2gBwhHyqAOnetiD4uzSaPqOn33hWfUGvLiaZPM8wLIjtkCRQuX2jaoKkZCjO3GaJYbFU2vZx6K+v3nL9bwlW/tJLdtaGv8TBpV98J9NuodNtrPfMiRxQjKRY3r8pwDjivHJUjhmt7OGPcXiKhdxHzA/eNdh4n8cjxVaafpb6VLpcVivzpCZPJY7QAQrKu3Bzjr1PpXJalY6tP8uk20bNnJneUgbSMFfXr+HNejhHWwuHfu632uefiK1GtiIvm0S37s19C8UQ6bp942pSQfaUTEKbvmkH90Y7ZqW11KGzje+uoirlTLKijBC9STn2/lVDwb4Rv9M1RNe1K7t5p0/1UUi74o89wM8n0Jr0LwJ8L9Y+NvxH0jwLbzSMNevUtZ7hVA8m0GXuHXHZY0f8AHHrShXqU+adTbfciq6eJlGFP8j9P/wBl3V/+Ew/ZZ8C6gwB+2eHEhwO21Wjx9RtwfevxB/aU0ldN+N3jW3fIP9qyPjdyu5Vbp+Nf0E+GdN0jw7Yw+EdBsY7TTtFtYbW3hjGAiBcAfkBz3JNfm/8A8FTP2TbW3aH9obwTpoht5Qll4kht4wAkpOIbsgdA3EbnHB2Hua+cvzybPcg7LlPy5mh+zyJdR4AU8/jXXfD3WGtb6C9ikKy2UyuD3ADA1zU0LYeCRSHGVPsa0vh3C02uNZ7c71zj3yKliejP2Vs7i21Kxt9UDJLFcxJMksZ3BlZQQ2e4Oc1ZAhQDbudgPmYLya4n4Q6XqGg/DHwnourXGy8g0q3EyyH5lOzO05HUAgY9q7FpreP5WuI1J9P4vpXE12NExftEP3drkL2kVvx5NOS4j8netuFUAEBjwT9eaimezVg7hd2Dj5uT05pn2612lVnG7oP146UmM+dPj98cvib8INcuBouk6BrGnzRLeW0OoWrF/JxtkRZI2Uko4B552sK+Z/it+2JqnxY8M23hrWvhvo2nC1vEvRc6fdSiQsqsCuHyACH5+lfa/wAf/CvhTxn4Fmj8QXT2LaU4vLS6jXcyNwHjweodflI9cHtX5reOPC+r+G/El9pN14Zgt3SZhGqqZ18s8qVdWKt8pHI4rtpTUo+Zm42Z9C/8PC9LZo5Z/hA6Mh5VNWypH4oDnPPer0P/AAUE8BzKq3HwkvoJD95o79G4/Kvj0NqhkkW30mNZBgKqWIJJzjoVJNdPoPgH42eImaHwz4F8UXksKGSdbTSZR5adQz4T5Vx3PFW5Rgve0IVNPZH6B/Bf4k2Hx08N33ijw74JbTLCwvfsT/2lqaxGaTy1ZtmEIwAwySeprV1RNFspsXl94dtSvLB/EVqvAOMYYZry3wh8Pb7Rfh94Faw/Zt8U6td219bXl7q2pRWcKam7rL5sWZJCfK3MQu5cYhUnpXpGh6D8ULPxdrMWmfBPwD4bjmtLKYf2hrFqqRMFkVtjwQuJC2VJAxjaSevHK8VDdSX4Gqw118JkSax4Bt7llvtQ0WaN/lVIdRhnMjEHjCZ3nr05OK8K8J/DFrX4xX91Y6fHqPh5muXkijsZrhreKVC8aurQ7VYtgKPQEjjNe2ab4B+O8Pw58G28nxI+H+gWOi3VtNCi2k011avCz4klZiFbaG5QdivqK6XSfgL8StU8caz/AGx+0Rrqm6gt3vbrSrGHSg5iVFSFhIjujAT4GB0yT1FKWLjHz+T/AMilhtLbHns3w/8Ah7fO8L6Lo8MqhXZZ7BIpEyMjcCgx+NedfFTwFYW40k+ENDsr5Y2laVdIEcgU7VCCTyskdcgHrg19BaH8K/gHcard33iz4ma9rsEkSMkOq+LJo5ZsfKZJlQoHVcOBzwFHHNZusfCG90HX5dN8L/DQ6fotvnU7KxtLOzvmeCRVKzrI7mYbxj+LBYnHWtaWInOWkWl56EVKMYL4tT428ceFdfs7y0Mmg3yOUByLVyASgOAQOMcEjtmsNfCXinXL77H4Z8H65q+oy738qzs3lwhwQxVRuHLEZ6V9h+Po7uCzgtbj4Z6ot3C3kSQy6PctIEyAx2JP1zgHgDjrXG+GLzWPh74ssfEs/wAM7i401EZbm2j0WS1F3bsOYzcSXDMjK2CpGACBkdRWtVyaulqTBxT1PEtD/Y3/AGjNaiNxH8L9Qs4yMg6hNFak/RXYN+lekWf/AATv+M11HbXF1caRo26Py7j7XdNLzwAy+Wh7/wAOfSvoTUPi94FlvPD97b/ELw/4Rt5900tm/iHU2kRJFGzzUSUFdvzNhcc4ByCBXrvi7wr4x0LRoNV0/wCNmvyzm4tktoPJV4PLlkUMxM7SNxGWK89QCRXmzqYhaSkl8v8AhzsjGjfRNn5IateNbo3VCffmuNW/8u4lkNnb3PnDYBMpbHuMEYNelavotteyLeSAmOBTJJGP+WmAcL+Jry2Rma5ZtgU7y23sPb8K7sPKM43O/Nsuq5fW9nU2ezN5ZBbxiMn5+re5q9a3n8Jbj+dc79qEnLdatw3J2/KpY8f/AK67VU0OjD4jkfunXaZfSWk6XtpIUlt5BIrDqGByK7Lx58SG1iaxnt8jfFvaPPQ45P0zmvN9BhutW1C303zfKa6lEYOOnv710Xi7wZZ+HZrSO31pr6SdW8wBQAm3GMEHnOaidNVrSl0PRq/7XGKtqZo1CW4maSWQtJIdzMe/0roNLk3bQp59K4z7NqCTDy7dmyeNvJNdt4Ttbh76G1vIGWQkfL/jWqxCpq70PTwVb2XxqyR6/M0kHgSBW+XzHjVstjPU/nwK5VrgBNrRMT/svmvZfhf8Nbf4yakngGLW4dPkgDTRzSKWDsi8qAOehP5V7JZf8E+NFj2m68fXLv8AL5nl2gwPXGX5zXJg8ZSp025uzbbPiM3nzYqUu58atPHuAEZbtn0pokVW+6i56ZXNfddt+wH8P41PneLNXlx8w/dxpg/U5rTtf2E/g7CiSXmpa9McZZRPGoJ/74rp/tKgv+GPL0PgQzRL/Ax75A4GfSmo0TAqrY29BjtX6O2f7G/wFs0IfQ7+Un+KbUJPlGOwUCrNj+yv8AbcvGvg+W4wQQZbqZgR9ARxmp/tOl0TC/kfnFE0JfB3jAPToe/pVuOxWQDydkpP3gG+574NfpbB8BfgvYzKkXw40twBtBaEke+cmtWH4T/DG1x9j8CeH4yCGX/iXoenqSDWbzSPRMPkfmC1nGrLujkwB/Cg/mTVmLRTMn7uxuJmb+6F/wDr8/Sv1Uh8J+G7e38q18J6Oqgkbo7GFRgf8BqxDpOl28PmWeh2EQKgq21U28ccAZ/lSeaJ/Z/EXvH5gWHgXXL6FI4fDGun+68enu+T/wABBGKu/wDCmfiZcfNp/hHXJQ3BVtOlQ898EV+oFneTPG1sGDBRt3RFhjH8vTpTZoQ6mP7PvP8AEN/T8cc1m8xk9olqUkfmHa/s+/Ga7meOL4e6rGQfvSWxUEf8CxjNdLafsj/HK42yHwukAPRp7mNT+Qb9K/RWL73zxtGuO7E/QVKwRpFSOO4I3fvMvjr6Y71m8wqdEhucz8/rH9jj4yTSKkz6HbsAQWkvOhH0BNb9j+xT8SZnVZ/EegxK/AOZG5/75Ffbc+3d+6t3kcZ27myB9Tjj61Ms/wC5CSWq5IGcdB9Kh4+syVKp3Pj21/Yl1xpFt77x5p+8Z3LBp8kjYHplgPxNT3X/AAT38Ez77nxH4ulZ2b948OnrG5Oex3mvrbzdyho7eKNfUxkgD6Ac8VLFqse7yY7WKIL91mhGSeygEe/6VLxlV7v8i+eXc+WfCX7CfwJ8KazbeIrHxp4gM9ueEmaPYx7jGzI/Oug8ffspeCfH2pafdXnxS13TtOtY9n9mW8amKYls/ve5444AIFfQTXqwMzNbwSbiG3Mo3D9OB9KWS4WQmYJEjuvOOP6VySfNNVHujeOLrxpumpaM8g0H9lf9m/wvIjx+HJbyVQN0lxeXDhmHcLvwtdraeCfgjo0wa38D6KJSDtluLUSSNkYPzPk8jj3rplWaXb823H8OOPpjvTZEZWZo4Yd56PIo4/Ej+VNyk9zHnn3KVno/wlMK2Mfw/wDCcUAP+rXSbdFPcEjZ0rQOkfDuZ43bwn4aZolxEx06FzGo6Kvy8DPpxUPmb8RzCIqB5fA5c9SeOlSLBJHJuZeudu1ABwOhNRYfPLY1IP7FitxBDbW0KqNoWGNY1A68BRxUhvtFRF8mRYyGKsvmZ5Pfjv0rEeONpA0cgMjfewo5p/2fduVo3kPdU24GelCC7NSa406EiOS65b5h+9A3fhSDUvDcNq3yxyNu3AyyNu4HTg8D3rDeC1jZ5lhhUqwVleQZzjoDUTR27AtJHChXnEeDn86q6RN5I6mTxFYiFIbKO0iQAb0XBLn1JY4NH/CU29x98Ro2TgwgJ1wCTtIz0HX0rlkhijkKyRhd3TOFIp00NnBH5kk0OdvQAZz3z61E1GS95XKjUnHY6G5vNDuVAa4uXd42C7kSXazZw2TggDrya8qk+EOvXSq958YvGE7EgFYltYARnnBwfz5rs/Ksyv8ArtysA2NuAB34x1qSC7sY8pDGSSSFLYGPf2rH2cVsjdV6nc44/Afw/wCYf7W8WeNtQUEjyrjXFiGPfy0DevQ1BN+zt8L72ZhJa6lKsn31uPEN1g+mcOM13itY+WWmjdN3C7fX0yeTUMaaUM5s437sSep9c1cYLsS61TucSv7N/wAFrVma78I6ZOSiqVvLq4n3AdCA0uCfU/StfSfhV8NNDaIab4L8OQyqv3l0mKRgOf4mDfzrbk+z/wCsSG3RGz5RaTc24deByKhkV2DFrqNgi5ynGM8Zx1PPYVdl2IdSb3Zb/wCEc8K7UUaPpC44yulW4AB9glN/sPQ5FSFbHT5IwCu1bGFe+ecKOM1WeYQqY2kI/vE56jsee9Q7lmk+a4niCjpGuPxz+NNadBc8iy2jWCw7bfzY0TOAu1VBz0Cjn/8AVUB0V0BiW5Yow/1aj7wxk55NRqFV1xFNLsb5ZH/gP9CefzNTzXEixxMYWyP4gcMTz3x19qG0zWOIqRKJ0uI7t3mPGu3dyGCj8Dk0r6VZRDzFZf3jfLu4zn0J9abc/ZZg8VxDE4l2ll4IPP8Aj3pW1S+aNbHcYYY2KhLmMuP+A46e38qErmqxd/iRnzR6bbqA8kLbchkAzt9cgVF9q02MRu0McTSKdp8o4cD3I/StAWdsqhpmiWRxxJEhCnPAJAPH0Iqi2jxecoBlZQ53bjlR9Om003FnTDE0X8WhOupaT5LBBkn528qI4Hc5GP1qxbtZyIk8N9ES2PlLKDg88c//AFxVSbw5Ay+amuqDuEKBo+SD97LIcnGaoXXh3UEiX/SLaWNlDHy3G4gegbH6UrSNI1aEtmdB9nVZBtvIkH8TeYrAH046H60xvsccohSUtub7zHPQ9MD+lcjcWWqRtl7KTC8CRySNv4DpVGPUZLWR1aV13HLCFiO3BxwOKPeNUodGd6lvZybGaZ34HQYIHTBP5U26SyjT99IqhSDnbt49ff8ACuH/ALUmdji6kBXGeTxnoRk/nToNZVGZBCJJB0835l/AE1ViHZ6nXLcabDxHcBSW6t0/lwPrVdr+xEg8uQzP1wf5c9D0xiubjudPaQeZdMrP91VYcexHUfyp8N2u0bLyBopGJTzQrY45XJwBwO/enYT1OjbUbWMgS71QjHQH+XIpX1K0uB5cSlTtOD5m0j8K5yG8/eGOKNJM5KSLhVIHHPvk1bVl8kPOtuM9WSRfUj19BRYTL0l1B5iO7CU45LTdOvcDmnm+CyA/u2UnhVx6/TmsprqOP7q7/wCFDuXk/TpUTXscY8xLNAx+YDP6Htj2qhKNzRuL2NsLNCvl56soyPbgUzy7N2LwzKoIA+dG/r+FZ66oJVRvsyjbwCo4PX8wKWbVp5mKbSoByvOR9cY9M0XE4F77RdRMGWYOByoCKScY4GOemetWbe+u0xcTabsyMu285PpnBx+lc+14qfL8jOTuPYn8+tS/bLmZVkG0c8c8GjUh04p3NVvEEWTgSrvPPyDaPTnbnH41YXUJlXcjRuWZWf8A0j/Wde4549651ri63GSOZoSvG5Dgj6L36VHt1DzNy3TfOON3Xj3qkjOcbnY/aGm2XDWtqSnIyXPGPUDGar3175jjbOsK9WY9Pwz0rnI767t1Frea5tO0sI0UjgDufX39qgbVBMsi2twJNvDNNzGDgHgev9KEkZy5rbG9NCkg4vLeLJ64UMce/aqckN9atvkuopkXndHt6Z5GB1NUY49w8z7VaHecMojGfp2x9fakXS7meT93brGM5VfKTJPud3P0rTlRCnJdS1NdWsp3NdgR9SrsMnB65B4/H0qGzuP7WvW0rQbe51G5jAEsdpl2jUjIL9gD2JNX7bTbyQ+TdWcczZbJQKpUH8CKqzaDLDIFEzRFD03BgTwQCBjBHXPaocbmsattx0Vjc3C3FzaQiR7R3guMXalkkQgMrAE4I4B+tQS6b9rt57O8EVxDNEyTQzOXUo3BBB7VCNEvEma8htYHbH7tlXBz0Oe+P51eS1uWxCyje4+cjHHGSQvOOlTZo1VSMuh89+IP2QtKvr5r3w94vn0y3Ysyx3MfnbGzkAMCDtxkZOTwOteM/Gr4a+LPgpBBql34ntb/AE+eMss0alTuDqgj2tnc/wA27A/hDHtX3GHtZHkh8yWHyHK7mj2hsAHK+o7fUGvH/wBq7w+mv/AnxTHas0k9qsGoIgDEEQyhmx2B2lj9BW1OrU5lqRUp05RbsfDp+L0ccEV5qFxkMxjUNDlvlxknHY54PfB9K1rf4y6Dfw7U1SVGDAFCjY/PHFeJ67HuDzbVUhhwo4A9qxo325UZDfeBr0OaSPNtHsfQUnxBmbEllrMEkHIC9MD0zn6VDH8VPEti22z1oxr6KymvEbfWpLePaxMygfcdRx64NSNfW8yiT93Hn+F1II98rx+gpe0kg5Is96h+OXxAtwFt/E13FtPG3A/zzWna/tGfEiNUt5te+0KP+eyZ/WpfBf7JbeMPAOh+L5PEx0i41e2F2yXRnWPy2LFWVxCynKgHk1ynif8AZ3+KXg/xXZ+FdJim8SWusQCSHUNOt5ZYYmEhUxs7ooR+B14IYEVmsQjT2DOu8QftJ+NdQ8Oppc95Amxi2VjQZz+GfzNeN6p4813U5h5hikUKVAaNTwTn09a7W4+AnxatZprXUPCeux/ZnVJHutPEcWWYIoEh+ViWIAwT1FVPh98I9S8VfEiX4c6l4j8NeGNRtIpZbifxHcfYraIRnDruAO9+uFGc4OKFW5ti1QseZ3moXFyweaNEI+UbVx/nrWNM3mTSSZ+6Aor2f4//AAvsfhJ4ktfDMPiDSfEhubNL5dQ0uOaK3IfoE83lwRzuAHpXj9zB5EKHnJck1Sd1cznHl0N/wzom+GO8mUPLceYbG0LBGuzHjzNrMCoIB4z1PArptasi0bQyQoE3TtBLIwAWMKNpkGAQxyR7FR2NZcmqf2c1ra6XfXcjWtjbs9vIoEcTeX5jGNuozuOcfrV3Q76TxPHdx312cSgtBvOdkgGcMT1Vu4rOerNKemjOJ1S1G6RVRl+b5dwwxx1r1D4FN5nh3UY22Bre/SZFcgBsxlXXJ6ZH64rhtQkjuIJFmdHmW5EgeNflKsuGHt8w6fWva/hX8O/Aq+DLLXNQ+OOg6Jc6tumbTpLO6mnt5BJt+fYhXlVJwD3XnqK2oYiWGmqkVdowrYVYqLp3smbc0thIqM/h+S4ZRgM0cZIzzjJbFJC1nZqxXQkjWVcMB5Iz9Tu5+ldC3gv4WtHv/wCF76zeMPmaOy8I3bnGSMYPQ+1Zt9ovwPs8JqnxQ+ICOzFfL/4RLysgfxDzJBXoPPMRL/l3+ZxLh+ilZzZkwzaf5waDRLVAjfK2YwU79s1N/blvafNBp1ojM38MgUk+vC1gePvCf9qWMd78ArXxz4qFrDJNqq3ujbGgjHKzR+SWBX7wIPPGR6DwyXx94hVmjaNAykqwO4EHpg81LzjEvaKB5NhY6Skz6OufFUirHJHFaq0bZZTKTnqOu0VH/wAJfIkgkW4gQN1yGYD8q+cB4319sECFf+An/GvqT4C6P8GbfwWdY+NVrLret3snm29hYaggENsygINscu5pSSXOQCvyjB5rOecYqPRf18zSlk+FlpG/9fIzj4w08FGuNSfI5Iit85/NxUNx460hRi3vpcd/3QH4j5iK998P6J+zPqNwkGk/s3/ELVA5H77+zbiaMHjI3CYAjnnFet+Evgv8KL+M3Vr+zydMcANHFq9nChc59Glf9a4KufVofFJL7jthkeGenK38z4SuPHNi277PNMQ4xkwrnHr941QHjTdhGe6eNTnaFVcZ/A1+nemfA/QZl3xfDHwpZ7SRg2EDYHuwUAV0Vn8KdLtYUjsdC0ETvjYlpbxL/wB9HbtUfU1yviGtP4W38v8AgG39j4aO6X3/APBPgD9mb4d6p8dPiRp/g/7Fr66RMzfb7yztxKLGPYxV5N21ApcAHcf4uATxX6T/AAT/AGUfCvwF8TXfjGz1TUdfvntjZ2oa3RPs8bsu9sA4LHaoyMYXdxzXovw90zw74P0QaVY2tnZTyEzT+T5ZaY9N7FBj0Az0rqG1i1WSKRr6OOPB3Rv95icY9+OfzrWOYzqx/ePc5p4anTl+7jsJayRWhvLuZZxnMz5gboPT147DmvGfGXx6+D3i7Rda+F3jLRfEF9c6lb3Om6hpEGgXkjMhBU7S8Sj7pVg3GCRzxmvb49U0+Zd8d5Ew65DV5P450nU9Y8UXV7pNxE1ntiBZpBt3gfMOSB2z+NJ1Y017pcY8z95H5pXv7D3hO+01IbPwz8V7fWvKZpGuLCxggeZgSgMkk23avAJGDzzjpS/Cr/gnX8QvD/j7SfEV3r1jcaTB9mu7iHy2+1CUYaW3CruT5WG0PuII59q/Q3UvC9sxH9o+LtJsnJLIrXShjjqMZ96wtZ+Guh659mkk8dM0VuxLW9pqlxbxzjglX8llLkY4yemRXNUrVHs7fK50QUZP3kUJPAfiR/8Aj4tooEB37ppCnXnjI7Vm6l4f0LTbU3WueNPDNmFHCzalCh4Bz1IrQX4P/DX7Qk114a0u7lfhFlNxfKmTk8TSME5zwRVvTPh74X0G4f8AsLwBotj5jCSSVdNg3M3ptUEj8OBXO3L+d/cl/mbKnB7I46O8+EirNJe/ELTUaLdu+zlrjG3qf3efQ1ML34Z3DJ9gvPFmrRsm5ZNM8OXbow/3jFjPXv2PNemW9peRKrJC6qSAqbhGAPZTwCPwq2Lq686Pba3F0w/i80FV/Igfz71Lfm/v/wCAP2cVtY8D+KyeFdS+G/ijTtG+HPjm4ebSbtI7q90tUitnWIsJX3yAgLweFJ44Ga8b+H9w+paA/iO3+FOlytrnhrSZ1WWSyiiZzIVaX5y0imVWZRt2tuUEg4xX198SrSbWPAPirRZYp4zdaJexZhkKKmYH2sCATwSPyr8938T3Gg6Pomnrq01mdN0mC080PuIfHzYZslBumlAAOMPxirVSEKeq/ExrS9jZnrXjbw/r1x4V8HaiPh74Y0u7ntLi+1IWmJriNLcRuq/uoQ8IZEkQplixVj6k9Lo/wzhm8aeJ86P4em0ZdEc2kOn2F1OpM0UTIY5PPR87hIElYsikvn+GvDIfid8RVutuqeKo08OwJEYRE6IDMqmMFyoyxCFgDkdec9rWj+Irm6t4WuvFV49wYAIvJuHYrCOV+b+JQOx47VjUxiglyxOV4qK95I7vR/hxFcfDqwnutSmtNQjupZJbnJAms5YpGtt7s5VwWbZtC/Jhzj1fr1t4F8NfFq7t4fEWu/8ACPXtobNPs2uNHJb3DqUdpXi3bomMQUorE7SOudo4DT9Ts4ry0tIdSRoLm2WGSNmPy7WOADn5T15HvTNUhgsRcXUd0ks1rb29xAFwqErLlgONzZ3fX5vfNYyzGrJ8sUZyxUuiPQrnTvDul/C/S7OPWLy6v7a5nmI/t27KF3LKreQTtjJ4LlTlht6HONPQE+D/APwk174llXxZc291CstrLBfyStExSINEz3Ctvxsb5mByduAAorzzxBrs0dnHHpr5VJI5Wkk6bQy52gDIII+nXIqot1f3VhLpdxqESQ2ty6q6zEYhYlsFR14I49RWMswxEo82xP1io9TjF0641XXryz0aSQK99MbeLEaFYRIdkjEjnOG3YwMg9BWmdJ8TW9rPer9pnhtHEd1ceRvSM7cshdeNwVRx2FXrG4stHuLaTyZLyaAzxNvBIRTIXVhznjJ49+c1teI/iFrPiSz0/T9VvIP7O0yGe2sopoUUKHTYeFOFbdtOeDwK9SOcWtGUdTPm967OL1Rtbk1REF9PB5yJMZWBZySpIbhssD068fhXjnxc1RIfE0Vtr0N1qWLdfL8y6kQIoJBXbkgHdyTXvUviCFIxFNZxyMqFGYqHV+gLKT0Jx9eozzXH/EPQdF+IVrp7XVtOkulxSWyvbsgdnG0EEt98Ar/IDgVrHNac/iVrDjUtdyPEI18LS+H7jWFsbuK4juRbmEXOV2Mud4yvJyQMe4Nfolp/jHxrrHwb8La54Qfw1qsb6ZZ/aLG2gukniH2ZkUzyOxjMqv0xgsc/wiviDTfg3dTWM2n3V4/2ctI0jBf3kTjYQCvQnA7cciu/s7fxdY+CX8DeFdRuLSNFVwy4EjlWyG3KflIOPXrUYrGU3y8rv/kbQrqElbqeQxnepVuhFcB4w8NrY3Dajbx4hlPzD+6a7m1cEDNTXdlHfWrwzKGWQY+lKjV9lNM/bMzy2GZ4f2ct1s/M8eSJd2RnJq7bw9PmI7/WrOoaZNpl89tIp4J2k+lNjX0+gzXvQSkro/NVh5UKjhNWaNfRGOn38N+o3tA29V29+1b11d3mt3Yvb1gzFdo+UKAPbHQVz1m+MV0FjIoUACtox6Hv4GnGTTNGztVt4/Ofair145/CtjRbiOzvPt00IUmImNT97jpn61UtYlbbJL+8wRtXtn39TRfXIN1AsLhtsZVz/tE5NY4ymnQZ6mP93DHuP7IviC8s/ijobXDEvLqCrJnptkypz+DV+msQt5FR0kaTbkfMe/8AKvzS/ZF0c33xS0e4MQKWsxnO7oNilsnPbiv0atbyaFTlRIwGflIOc85z0xyK8Ce5+e5qv3kfQ1DMqTCOQR5ZiAA24/ViOBRNchYTIVQNjPyj5gPXmqYWXI5AByWwO/1PSmtdSeYFhkXd0ZgM8emazueVYuw3jRIiwl2XaArFSWI9SM80638wRkrDNIg+YAJ/6CorPaSTC7mnY/d2Rx7sn3bt+lLbzXUe1HhfcfmUeZwq9hweTnOe1NMfKzVabdIscyusjZKI+Mgjnp9KqXdwyMdtsFLceY75C/hWaTcRyeZHb8M3LuS2O3OeTViSZ5V3SDhQOdxTH4DrVOwWNAG3mj8wFQOhduw/rTxPIsbvuRt38QXAAP8AOs9Gk2BUaJiehc4AHsAMfhTor6aJjbwz277AWJVfpgY9fT6GkPlZajvkYiTcTjhSqdR/Wkm1JoWRY3uGckfM/wAqcnp9fYVRmeWQrcXF/KroGaNVUBVOOuMZP50yGZZ4vON07h+VfcSMewzxRcfIy5eXk0jFllkcqQu1iRgZz0HGe2T0qGLVrhWYXVqnfhWPrwcn+tVYrmO3VtzOyE/xDJ+gqeO8MjSM0Mvl9BlecD+lUmHKy9HNvyqRrj/roD/WlGoLFIithZZMKq8c8/jx6mqE0k0YCxW+0bd26R87Mjg4IyarGeJZpJMQCUpw8bfOFPqeo+nrTckHKa7a15YKrs2bsM68gdumOQPyqsmqW0gLyvGjDO2Qryvbv0zWeLuZcecsEmR/zzweO2QTmmzT3UflmSQD5vlj+UjGPSkmJxNBtYtWLKkY3be4yDTYNXhj3mWJViP3SRjj2zWPIsUm5mWEMfRSDTQqSQx53s+5iVP3Soxj+tHMCTN9tUaRoXhhQQkgszOBuXHUCq8moyZEKywlwNzEfMPbOOhrMW48uMfJsZPkBAyAo4A29KbbXS7xFCg5z2I/HtTuOxfhvJFmCyIHc+q9c/nirjS3THasZhVu/f8ACs6G4l2rGmVLHG7A659D0/OnS6nPFJ5M0y7mPGFBx9cdKXNELF6UXaw/u5N8h5GahkhntVkuBucMi7yzbNrdSMjg1lPqd5Fut/MzHNINz7fuKDzjvnnnHXioPtk0qtD9qkSIPkqc4OO5A/rQpINjWkWSdtzBRHwVGQ2B15OOT0qpnqyu2wAjBOBnt/8AXqot5slDCb73PC9f8PyFMa8mSMrz5ak7QWxjPXpik5oOU1oY9yNJMVl4BQFw2D7ZFMjmgTN4t1bqInCMiuN/sSD2PrWNNfPKu63UFB1ZnBA+vem/aJEfzoWCRI4KJt+8epJHQip57jSNuS+ghVRDMpklzu3RklBnu2MHp1zUsdxDHCjKQzEAkhc8dsc/rWCsmpNtnZgRncMgenYU+O61dn8xbVWC/LtGAB+Qoci4o3PPVVDeYzqzZKA45/LpUdzeR/JDDbyvKx+UFuvtjvWa0ktwx/dtET3y349TVc2JmvAk1xNIV+dQpYcjpnHalzjcTTjvo5n8vy4Yyi73G75cjHAPf/8AXUEuqTbmkbaUJLKV7f7oJ9e9UXhaOFmW3WR3kyrdMYHIyepz3qKA/IXZZEZRg4z1PULii4cpN/aFwsjs0LyZyCD8mc+2OcetRx32oKr+TqSw88DZux7c01YoFYNJuL9C3Iz/ALIq6kitEVRUJDHAYDP6Gn7SwrXI49QkjDSm/uJJQvK8bWHqQMAn0BHrUE00jeXJ5OSFDNKxxn3UHODVm3KyRSpKUCj5tscQZlPHOTyPw4qGbI2yLPI6J82Cu3ac9OOtTzDsDTTrH8xcDbkJuHAz0z/jT1uZFXChhjkK7LwD2zzmq25pA2772cycfpgngVOuTCAt15gAwy7gNvoM4p3FYnma8dQY5IoznG5QePciq8c0LCRZLwEyx/IV6SMD6g8d6HVJom2xMDjG45OfzpI7i6t4UkWW3CRNlQyhkb1Ht7896FIloitpoGUq0nmfN5Sgq33sZzzjI5+lDeeymOFYZAox5bME4ycgcHFMumhDJNOV/er5kfl9CTyMHpTVYw+XsgYygEsMjGfw60OTCxDJNqkO3OnIqD+JLo5GfpgHmp2vrzyzG9n9pCoSd8asCfQ55/GnNIUVZXZkJA+6Cc/SoZvMY+Y0wYjHYhiPc0KTHtsVHaGSF7iTwvgxtzJCxDcY4xkgj3xVFo9BuHPm/wBqE8uyvEvCnkLuXGcevt+FayXFizyN5DywsxUtEzR4ccjIOQfwqA+XdeZNJuYIgVFmUc89vQDGc/l1quZmka047Mz/AOz9LhdPssyNHJyjbWDKD6+nfmo59FWWR3a4MpLdd6kH8B1+tbK2mnGTbNkELnbHg9RnPb8zT/7PtLghd2U6fvowAAc+9CmarEzMP7PcLEI47ZSoXPzBlJ75GRlT/gKiEyx5F1pN3JISDxJvB47HqPofzrfj04xHbF58EbfeMTHp+fAqC40xWuH/ANIlmDcBn2lc46EqM1aki1ie5hSXzI3kjNvsGWR2+ZhjjJ9TVcalC7mO3uFfrjO48fQ9x9a3odDa4mW3X7IgjQs5afaCoGeS2cn2qVtEaT94tm80RxgFgoyPQgAsKrmRca8e5iLdGNWZ5JHZDysiH68gHj8qms75ZOYbEFCfvyPgY9BVuTw7Iu2drXJZwrATEgZOOOvbt6+lRyeF9SaSOOGVUCn+MDIY+nQ/nRdGiqRl1GTakkeFkhEZDfdXa27tyfypjXn75YZomi3fNjbtyBj2xT49EvLBi0tu0san5jImzOOvPOPqRU/9kX19btmGIYLblaZvl574+Xpg9uvNHNcqyI2vrBZEWBt0w6Px/j1qZrzDbPIk2nn5mPp9Ka2lqLZ1nhaJlBDQvb79+cgkHbj8mGM1Uj0+GGeJdQkmFs/yhHRk3dcAMenai4+S5O2oKmZG2Y7jbnJ6Y9yahuL6RSGaaFGI+WMgEgj25z2qW40+O3kxa3TyDIUBXWQD/aByCo9yB6VbXSvKUTRyRmVl3KWtxyvbnoT09uM0uYfJ0MxbtmjVDNIX7YGMDPJ6ciplZmhMSySvuI8xiOPbgcetbSQ2y/6wxrvYht0gJ3fQYx9aSSKxVdtxFKYwv8EeQwP48DijnJ9mY6G5kVZLe5MzxZUGaMH3I6/1pI77UpG+y3ks8cf3f3ci7j7fNuBHtn8a1lbT2XdDC+F9RnH4Afyq1Db5twzW8TBsFV3YYg9tp7/kelHMxewT6Gcb66jtw3+lecAR5b7dhPb5l57H1FVWvLqTIvAxU5Zg0jdvTtzW19ly24QuF3HYqspBz06A5qSO1mVMbfvDLN5fJz7dBQ5AqKMG386Zk3W9tJbgE7TkOxJ7kdsZpNUtbe7s7q1vNPha0uYXgkhZfl2MpBA7ng9+Pat+axj3BRavu4AIBAP4/U/560y4jRojHtAkHVTyCPQc45pc4eyR+Ufx1+EeofDPxff6DcQsbNmM1jLtIElu2ShGfQcfVSOteM3U19BAdKaYiFZvtAjIH39u3d6jI4x04HpX7G/FL4W+Evizo7aN400VZWjG61u4ZFW4tnI/hcAnB6lSCpxyPT4M+In7Bvxs0++uLjw3b6Pr1kpJga3vBDOydg0coX5vXB5rupYiM/i0OKrhpLWJ8sH5vvEY9AK7P4SfDXXvjJ8QtG+H3h23kkn1KcLPIilhbWwIM0zY6BUyfrgd60vEH7Ovxv8ADMbza58MvENvEhIaRbN5U46/NHuFWfhn8XPix8CX1KLwHqC+Hb7UwqXl0+nxm7KLyIw8qlkTPO0YycE9BW1+Ze6znjC0ve2P180nwvp/h3SbTR7G3+zWun28dpDE8ZUxwxqEQe3Cj861YdF823K+WxiZQWYIcHOO4xn86/I7U/2tP2mdYYPqHxm8TyMFEeUuvL+Uf7oHr1rj9V+LHxO1y5kvdc8e+Ib6eVtztNqcxJPrjd7Vy/VH1kd31imtkfr58QvBeg+LdPg0+71qztksrr7Tia98qMlVIAcqwbHzV8qeJv2X/gLeeND42+JP7SehwRW/7xLGxuYSQA3Cl3dnI57KTjvXwbNrmpzEtNPKzHuzkk1X+3XGDtOM1UcKobSZMsVH+U+nv2rLX4GS23huT4OePRrxtvtFte2xeRzbR/K0TKXUfKTuHU9BXgn9gXGpaNfX0ZUJpgSWT1w52AAd+a5+y1KS3ukkkZjHnDj1U9a9T8C/2e9rq9ldAyRX9oFA3Eb05zj1IyGA9jW8UqceU5qk/ay5rHG3949xp+jag1/I4W2OnvAqf6gxgjdnp86kfkaktTp9jDPIruoa2MalFODnqxxyDio1gk0u6udHuwxtJzsmXGQ4BBDYzz26EH0Neh+BPg74n8e6law+BvC99qVzdSO9v9nt5niGFw3zOAihfVmwCetRKrGiuabsvMuNOVTRHAX0Kw2LtKwaRpEhUouFYKpLHHXOWH616l4F/bM+Inwx8D6d4B8K+GfCCRaWsipf3GleddS73ZzvYsAxBYgcdAK9p8Hf8E2viNr3kX/jrxtovh21I+W1h3Xt2ATn5tu2MHnsxr334f8A/BMf4E6NNHdeJP7e8TyN8/8Ap919jhJ/65xAMV+rV5k84wkvdp3qP+6rr79jrWBrQ96Vo+p8Rah+3h+0trCLb2viawsWPy/6BpECO35qT+VZOh+Ff2r/AI06hHqmjeFvFOsOrAx3f2Hy4kJ6ESOqp+tfrh4R+D3wZ8B3UPh/wv4H8OaPPLuEa2OnwtKAoJJkkO5xwM8nmu/GkaPDHDY6hAZJpGdbeFfNO4Lk4GTg4XBI4HWsfr+Kl/DpKPq/0X+ZTp0l8U2/Rf5n5leEP2Ff2sfFkKDxz8YJPDtoigm3j1a4vJEUc48uBgi49N1eqeC/+CY/wetYVvvFOq+KvFNy75dzIljC7dSAAC7Zz1Ld6+47Xzo0iLIbKBZixtbFvllQcDzGJ4zxnH0zU8kt0ZYcQx2VkhLOqD94/vnHy9Oueaxl9brfxKrS7RSX+bGp018MPv1PCPCv7HfwL8DzRf2H8LdAgmiA/fS2X26ZDju8zNj6gV6hY+D/AAzoaxqYIoPO3LEtqmzYo7k4GOMngDFdRZ2cNzbL9gtzBC6+dHNI2Q5J5OCc8/3qhfQdJaRGSeYTQgq8yznbn/aGCCf8miOGpp8z1fnr+YnVb9PIybjSPD95GkkJitsN88cciySTD684P+eKzL7T4dLYLY6NIYCfMYqCZwSMbhu4HIGPx4rY1Kz0awvrRU1CZtQuD5MUfnRgOSNzA78AKQucZNNXw94Z847bdriSZQzxxx/uo2yGO1yQvBHUGuiNOK2Qc8V8Rn6bDfakQ1ro8qFQWV7t/ujtlQc5PbIrTGl6lM0cbQwvMoOQrMI/yH6Z96IfOs7iWRdlt5x2yosjy5UdD2GeR696dqCQ3luI7+S4cJy4aRoE47kpg4/Hmr9k29DGdWCehFfa1r2i+RZ2Xg7VNQkKufMtViSKPHZmZtwznAwOeajj8R+K7mW5jHg/UreeOEPj7IZcsRkKG3ADkdx79sVasUkuPk07UVBQ7lW3unxtPTo2D7UkravpWoCGOPW5IGXe00M0LKp9GDuXPHt3p+zaI9omVJ7/AFIQvceJNW1K0ZIwxis7eUyn6D7MScEEcE96twf8IBPIv2rX7ecvGjiPVr2Qk7hx+7lZQDg9NtSRreQIZhq07KzM4iuY0IQnGTjAI6dKrNJrUMjySXkMiNyUltwEB7kbWGD71fI0JSizYguvB9up8nUvDscSLl2hEMYVQAc71PH41k3HiTwEJi9nfW+oPISnlWcwnDZ6khAQfrXNa5H4bilW+8Tx6HJBtyPt21Y/L7g7wdwPPXNTabqv9oeTa+HPBd9e27jzPtkcflW0aFgCyPLsyoyOEB4qXePQtKL6mD4s8bfDvUs+FrH4OeMNdmnGVSw8PyW0fX/n5kaIIM9wwqxpmi+NLpUj0/4T+H/DNsjAj+1dcM8nTr5VoGAwP+mo5JrsFsbdmm8u7jmEcjfMHbAzgYx0HQ/nT4YJYQHaFoYmCmN92Ap5JLZ6cUvarsVKPZmVN4PupLMzar4gaBrYGRm0qGSHZt5JDSSSsfyz7UmiaReNCY7fVtaltYz5iSatb/vH3H7okwNwXpggEcZroLD7TIpml1F3jKn9/nGcHnaBzmrtvturo2kMzvcKm9ZIpIiAM8KxHU98GnzRloZ+8jM1DwvNf+BfE+2RLwx6bcwwJFksG8piy7VG4nkDA554r85PG3wnuLi0tWgs79p1MUNwstpchIhkAP8AvIwWPynPPTb3Nfp/ZNb+F5/sct5NdXMo84yXEsfmLnJwAMYGQcADFWIfGc810bFQN33zm4Xco9MZJrF8ilqiZUnVXvH5D6p8N4I4zpcJlixvOx4vKWQ7MAnd0yTnPr1rPsfBrw3H2ia+dJVUeV5DIGRRwRyDuJYjjjgZr9kZteuLiOTz9Psp0jUb/MlQ4B553dOO1ZV5N4PuGC6j4R0mVx97fp8cnGef4aw5aSjyu5ksGfkQ3gS+N5Np8Xm3MtzDg3DTIVMRdSygqAAx+bjvzV3xF8MPE1t4Wh1aZpZNNiI8tocEiA4PzYJOchcd+PrX6oXGh/B3UGFxN8MPDExHO7+yIScn1wvXAHX2qG6+HfwJuFSa8+EnhdVHyK50uNSOcgAheOSTj3NJQpc17sHhL9D8ldD8M+IJo1urqS+jguMlmlfzAiFsDagPBx379aq6dp2tvrP2K3vLm2Nu5dijEFsgkKfY8N+Nfravwc/Z51CTbH8L/Dpf+IRLsI/BSCKoT/s9/s23Ugjb4dWayOf+Wd7cIf8Ax2Sm6cNfe/Aylg5dD8r7i28VafDaaneNOgnYRpLBwN5IBVlbuQcfgaZJD4qktWtftUt2qwmfzZo13KVHAxn5mJxnjkc9a/Ua/wD2Vf2drgK7eCrsAfKuNUuflx/dy5x+FZM37I37Ply67YdctHDbh5er5POcZ3g5HXg+lCpw097byJ+qTPzKjvPEO6S5hnt9jsR86DhgMZVsduaiuNY1CLfpbIss8aM8he3JEXzqQUIPQ4IJPriv0juP2Hfgnl5NL1LXrfLFyqNbyAsc8sDF7nnNcxq37D2gm43aL4qtootmxlu9PBZh152sPqP6YqJRUb21JeFqK58Jahr+uxRR3CiOFEUs4iHJ4BHB9eevrTl8ReJ47RI2aF2NuVR0iYOTtJUfXoD6mvuFP2BfDeCr/EJAsqeXIv8AY+7CkHhWEoIAz6e1Rr/wT1tllWaL4pWzjO8b9NcZPviUjtTdK8VqiVh6kUvI/LiFlUjmtK3YkAc5NZUa/h/hV63f5h1FdJ/QlJmd4q0cX1r9qhjBlhGcjuK4uKHLFS2GHY16mqhgMocNXDa5p/8AZ+oMy4RJPmU7a9bAV/8Al0z5jiHLoqSxcFvv/mVbaIqwO0npityxVvvGPA7DrWHbszTJuO454rqLUwsozIO27HFezFI8zApPYvWkgkUo2VA71YkSB40WNeVPIA9ff8Koq4iVtxXDDr6Cus8J+DdU8UTYjcW8CIxDuv3mwcAD0OOpp4hKdFxOvMKtOOHftJWPpz9g/Qft3ivVdQ+z+YLTTyVypI3OyqOnI4zX24kdxEoaKzZowNrMACqgdcdzXyR+wvdL4cbxUt600TIkFvJswcEM27OeMcV9YX+rQ3yRldUuAhby2SaYhcZyThACTjgcgV8vy66n57mD5q33Fi2vIZFP2WNwFbaWEfAao72SGb/RbiZFQrkqCBuHp1zz7Uyx1LT1jXbGpBJCsEJdzyc7cYA/nSXF95ki/Z7cXTKNxVAqZwe+CAcds+lPlSOC9i68RddwZUyPlZuBj8KTyI42fdOXgC7stIAFx6knJrPbXL26WSNdDuDGucSS+WNxHTHPr3psmuahHbkrpttPj92wMnAOOgwOozjrSdkUmX7dbW5k8zAKA4YhtwP6VJeHT4WXdp89wxP3gwCLx3JI4H0rnJtS1ZowE0uGPZhm2hmHUdWz/Sq11q/iBWlH2OGQM2QMYGMkdG/OleJfI5HRx28E2WMcBWT5k+bI246DHB5zUVwsuwx23lqo2qQylenpzgdOwrmrjVtdWFo18xyAG2/KcDqRkHj04qOXUNVacw/aVCryqOow3I6HJx3HT86nmRXsah06rb7iqq+4ZILtnOfTjjipY4riRP3MxjaT+KQZUfyrlZtQ1hZVWHUkeNmUruXCkDrnaMnHccdB05pDeTXUEn/EylbexjyjMSuPlJXuOefwNTzIFQm+p1MlvfQssQv0GWAkkI+6ueTj2qheNa3G4za5Gu75BHJOwVuf7gOT0rCfR43VImM0nlqVHmsTvzwdwJyfrn1pjWVnGplkt4fMk3IQwGDj+QOCQDnsKXOnsarD92dNBJYXDFYSPLHyqzsp3YHJzknjjqO9RyCxt1DQzO87fu+M7ffOOOvWucW1hHlrbLwQsaj7oUbi2eOvAxxWiqrNGY2tTHjLLIMc54J4PXGR36c4ocrB7FdzUvZ7e1jjkkVck85xwOuSTjH0qGbWLOKNpoVjfdjB+9k+2BxmqWxnd4Wh27x94Lk7ehX5eSTzU022GAnyfNXadqlOdvoR659aXP5B7KPcrQ6tN5szLYuwkcIxXaFXbk9zTrjULcxrcQ27qwbbGNwwR7jv9KiuPMkjie2sZjvIX5w3Gf8AZHPGB/k1SGjanql06/ZYo4I8AtggKc5A4IycmmpXG4047stWurSSTCG5sZNrMV3oVJGM/wAGcY6H8RUzapbWsjW86uuFG5Xj2ZJHHc9eeenFU00C8XMkl44dAA3UMTjnBHbPp/jVmPSLBsPMrTFR0ydxO4kHLdsmhshukupCurWnmeXaWm5QM48wBiOxI7e1L/bG+ESDSbiHEZYsso5IyOMj2H5ir0Om20jbJFGxQFb5twBxgcnBPAp50HTpGLC4uJ+0bb/u/l78+tJBzUTPXW1Rvsd9bpC0QCsS2GOejM+Meufpio5NWjikaGS3Qx4z8p6nOOMDk9fyHrV2bwRZzRJHI0kqhlbbI4K5GcEkg9z39BVqPwvJExabSpHA4GJAQ2PXHX8arlFzUjGa4hkjDNpRATAkUuwIPc5xg0SXczri1sYGVW2OEmJIOfQ4yO3PeuhulitY1b+zY7fLeYftLOPmwMnHTsKja60g2X7q3gdWG2bC7fmGAcEcke5560lG24vaU+xz0NxeQ70uLVLaJ0+bdIN2dwAwo4x79uKhF9ActdQKAOqlSxYdQeeOnYdyPWtoWNpd/vrMSr0Ypu3AnOc88gdfx5qGHS4YbdI5Y2lCNvLSRtucnggdscAZ9versrDU6ZTbVHEc0lvagqnKrIxXceffp8vsORTf7Rvd0i20MSKWYRued7LjOQT/APqrStUtLdo/MtfNQYjLe+c4OB61cXT7OPbDb6WEVOdyynevU5HHTnvUNl88DGk1a8VwnlqRuPykKCOe5B6jI4qnqF3czRmGKYhzIWUd1OOBgde3B9RWxfaRbiWRUYNcTsGQMcDOOAGHC8454qudJurNlddOPnYKkOygrk7uTkjg5/DHpS5rdDVOm9jJa4lhbZuMkiAHb8zbuoyMd+MEdsj8Z4k1RUKxLMxT5gGLEEdTnGccbh+Aq3DoOqfaZZEiRIiODJJHkdsDByMjB59BUi6HeRFbq6uJLRh95YGLZBHOMHH6U73JlOBTebUrdxFGJ1QKWXdFwzen4nuf1FP/ALdaJdmoWMwUDeZlTocgbcY9ic5/nW8t1ZWcKRtqAnLf895WJOfTI461Jd6hbRxqrWUjYA6bef5+9JMylUj2K1hJC8MssWVKk7ZNmFP+P1B7ilvPPjhiaOFJGfJ3D92c+5A5/KljZ7hZUFsIFDeYvmHnPoB6fWrC2lxHZo32sQWxZioXB+b+LgnFFrmTmrmVcW8Sq0kNq8wPDeXgkEdcjIb8SKbE0kKgm3uHwSy9Ay/mOgrTW5hghJWJpF27Q0jAFjnqcdqazzzw7sJ5K/MQgJX8zVpCbIPOvnjHkxxjIBbeRge5PaomjuZs/vFeNwcrGnyswxz6ZFaFrcRYKDGX5+YAAH+v0pSywlbjnCEnfu7+2eM+2aHDUXMZcmm3BiVpLeQsj/KN3BHqV9an/s/zFTbPKHkbcXMQDd+Bzn3rSt76a3mWadTLDLGSjLHwQeh9iD1BqnJIrTySGxlBVdqs7A555AA6euTT5bE3KbW9nuMdxM0kobKgsSGHceuaWHS2dHSRbsKMkBpOMeg7fhVyPy4TH/o9tF5illVnzu5wcgDrVhFvLh0MNwqopwqcYAx2zjHv9KFEdyjHYwxqlobVdhcfe+/z6EdfpUP9nr5wtDvCoMRtgZ6k49AevFa5huuGnaJnB3N5bBiD9aS3t2uLlprm7uZH6x/KN3JyRkj5vbPSlYVyqI4GmdY1lBVB8smBuJ47jnPemSWL4Ec8MeD2Ybtvtn3rRW1g3Pclv3q5GGILEd+mMVBGu6OO3jhA2Owcop2/QE5+v41SiguQwWdngQtJKrHIY7Aygd+nOKsw2UdvOFWWMwvgFljIYjqCO1TRWdvDvby/sp3ABnf+eeefap2Xy4wtxcQLEPlR43+76D+dVYdyCWGBY2aRZJB1UrEdy+xz/wDXpEa0aACbSVG3OHYAE88ng46DtV4w+SrQ/aGn3HDBn3tEfqDxUcUcm5tt2qL/ABJJCSQfwGfzoFcrRx2UTIVtTvmjMipjoCePmz1Pue4q0s1wVTyJLby2bkPJkYHXnHJHPFRNaSSbZrmESoQSjQAgFemP0qTdaW/7mGGREfa0m/s2PfOceo60rjI7jT2uGeTzUwzfvFij6ntxmnR2Xl7WWcyFs5Q4DpxyPmA7fWp4o96faF2MgOWRVwT6E44qb/RXbcknlSp8wVlGM/U1L5u41Ioi3hgmM3lRSIGwF2FWyM9l780j6eskn2dbfClSSQyyh888ZHbOOenStQ3cMMPzMguVyxdcENnv2I/Wpl/dbpJJVhn4yqsAPXPXv6UJeZft6kdmcz/Yui7yvkm3Rs4VVA259cqc464rEm8MyMwmtvE0UFrucMRuXJ7gKDlQTx04zXeTC2dTI2ZA43bREpyfQZ6H3rOvLGz+0B/ssrAIyt+7AGCc5weMjgZx+PNUl3L+vyhuc9H4BlkgN9Y63b3cahMFVbAJ54yeQRjBHHPWq3iTTtU0hA1v4L1/U4doZpLBI5Bn+IZLAkfhmupWz0+OMxRedbggYZQVIx2I6Gn211eaHcLJa69c24X5Tvk6buMbTlSCcY4PJ4ppK4nmDZ4prPxdu9EIWb4V+IbJlbiS6nMKEjjcUKFenXFclefHbUby5haHwbpoRWXaiXc5JUdfuEHPTtX1lLrHiW4t2hvrlBG5zLGyRh92TyykYBxjHGMHFYNnNo+vWbXumxGzCStuLWTWsit3GxwDj0IyPQ1up019n8SliJy+1Y8q8O/FTSdQ0uESfDbV3uFwzeRp0zFcgg7Jjntz8xFdloniPT9UXy7rwp4gsWVwwkvI41Az/DhZCcc59TkV158O2d4sN1PePdiR/MHmrtDc8hjn+lEmgw2LJttYVRWLIkKkNu4wRnnGQPrWMmnsrHTCpHrIyLt/Aab7iTXJbJliYTb4yYyRzj5SSo5PWqN5p1urxrpdw8wYBtqwsjbiOg3cjgj8c10E2n7rhhHp8btnzBsY5JHPAHr3qJIS0waffAWLSc2/UDrjH8qVjaM13OQm03xAuImgLDksWYEjnp2/yKWx0e8t490yhZEHOBjd345Jzk10OqXE0EkkSx70UF2fgYxyffngdO9MtLWa+t4Zg3E4Vwq8nGMnOBQ46FqXU5+bRZisc1xh9o3bh8m0/nk81R1Lwdo2pxPDqmlWOpJs4F3ZxT5+rODnk9OO1drJpciskckYCnq2MHP0p0VhuUqECAsF5jyD+IGCKnlSE5cx4vq37O/wG17fHe/CTw+04+Vmt7IRt/44VA/KuK1P9hb9nnVN00XhTVdNO8/8empy4AJ4G1944r6Zhs90w8i24GPMMMJwc4zyQKfDYwwRmS8u12fekkmkB2454H9K562PpYZe9Ut+JcMLKrtE+Mde/wCCcfwnmUyaR4y8SWe44VX8iZQfxVSfpntXMXf/AATBku1J8P8AxYidhj5brSyD+JSQ/wAq+6dT1Dw7pVzDby6bc30zsMmO3KLCCRhnJAwO/foeK67T9JvZrffF5NpHls+Wv3D6ksPm9eB3rH+1MTNfuKcn5uyX46jng6NPWq0vQ/M6P/glx8ULi6RbTx94WNvvxJJJ9oQoO527CT9M17d8Mf8Agm78PvDOnxy+MPiBrPiOePBaHTUW0tkbuFdgzkfiv0r7U+x2nktNo+n/ANr3GQrbpSVLDAY7jhFHU1JdWLLc2lvIsNwztiK3i2Im4/xnqRgZ5PrUTeOxStUqci7R/wA2jJSw9J/u4X9TxrwR+y/8GfDkP9peG/hPobXMRPk3OrL9smZgexffgZ9AK9Z0vw/p7Qpa2t1MbOJtnk2EAhgT1xtBHXPANXpLGaOaGa8vmhWIHyraMsdx5J3NwW47DjAqx9ulmjNraw7LdVCqsLLE/wCJbO0Hn3OaiOW0L81S8n/ebf8AwByxdV6RfKvIuaVb2en3b2ttp6xKcRpPhWJ+pBLDPqeOKffnUPtkS2stpvbIdp13tgDgjaM4BHOTioJLjUL3dZ2FnJaQRAR/alyzA46gcZ+vepPsjRo7afIvmL8hmcdT3yc5J9h6V3RUYe7FaHI9XdvUq/2Pb6Sk0mnWOnQNeMfPdd6F2x1HIG7Pqals7WytbUzSLK1wg+aZuXJ/AdvY1DLJHHPLPbtLqF8qAKkeRwSMjIG1ff2FTSRrbXC3uqXUhU4jjt41CgsWA4B+8cnr6U27hsVtKjVv9N8x7uYqynzPlQc4O0HH09OKraxrENvcmOVbe8MZHlWsefMDH1AU1sXFi0jfaribyoEXaIpHDKCDndgD0wMVFYW41O8m+y2wsoV2q0iW4EkjdCCSc46EHHr0oTsBSebXtQMZtbP7JGjAsjsY1kX0bPz4+gHTrWTfaLqeowvb69rlxFZ7t7W1rCttG3ORucBnYHH95feurvrOGFTDYzyefDGN0jTM0eM45Cn7/tVSbTWmXbDqUslyzZC7d64HI3fL8o49a2UoGbUzlE0vw7pMzXEbabbTT4MbSr+8Krx95st+XSul+zXUbKJvO3vwobJJH48/nTJPB9vE0uqTDTxdsrAvcW+0kFSpG8NjBUkHI6Gq01vqepaalvDd6de286BWjF86uyKeMErk8471XNF7ENMlubyON5FQhJkHzAJuYfhVSd7jUWKOuEKhWaXLEcH+E8d+/vVjQtOv4rdLn/hHZYj88LCDy5CpHGSAQ3H0NY9vqni7U9QmtNN8GnTo1IzdauRHKyZI3Lbxkvg4ODIyZ9Ku8dybNs07eyki8uGO5LxoTny48E+4AzjmobjXNBs7ptNkui11tyVG4sfUYXJz+HpS3+ktNJDZ6nrV5c3F1lY7cTraQjCkkER4ZgME8k59Ks2fhrT9DWGS1a2tHI8t/LgX965PHJGck+9ZOquhqqXcy7ubxNfRpJpPhwLasBm41O4Fsig/7PzSH6bR9arx+EtX1S6gk1TxkxtFU77XToRaseOzsZHIHp8vTtXUx6S5vTqNxMZJI2/dqz/u8dPmAHUc9aIZGneaGC1jlgiTeZIEz5hyfkBzjPHP1qXUkylBJmLB4Z0G1aKxt9Hs0w2ZLy6ZpHhJ5LGSQ7mJPGM8cVrsNNs7WCzjvXaaICNXMhO/tyfmOOQDj0qXzBGsUItfLklyyQsI+DjJYgkjIAHAyTUgVra3eV5rZpWjC72VjkjnBAAH4AVle5YWUbR3Uklytx9qGdru2URCMYU4APf86f8AYbzULGK6maSyQyK6KqB3fsuVCnHY/wA6TTdO1O5kRltUW3j+VdwAL56n5ucenFSXP9sXlxLb2d9BbWiDbcSo+4p0BRcAfN+I70WuwbM6+021s9Plm8RW1veWrgwXEjqwGTnEYU9znHX3rg9Y1iPwXpDXOn2s7SpiCysbPJlupGztiTA6k9+wyT0r0vVdN06+8sXWY47UtJHH5mFj45Y7uCcdzXN6T4FW88Qp4w167uZmggeHSrNAQtur5EksmPvSOAAB0VfUk1ryqOrM+ZszfDGj6ho9u83ixk1TVNQcTXU88qhYMgAQxg5YIo4HTdjJ5NbVvN4fs9tvb/ZoowcsRaq27rz5j5PH14rYtfD1vKpkuvKmZxsWTydjbB0G7kmsi80FrcwWaWtuGduk0rXTkYJIwQB68njgVm9TWCvoGoT2Mf8Ax56FZXKJ8zY2nzRgdQq89upPQVDpwuDHHs8PrMrLvZ3eOEqhxwcnJ6+2fatCbQ7LapP222KqNqrLHAhH90hR6f5FZEn9k6VeGaW80yODYVLj97KWJwQWzgDp154FLlubT91aEz6boOl3jeTBGryfvniUtImTwW4IPH1x04qOO1bc32PSLURMwkZyGhR25+9HyTg9+9WHn0+Rd7XGohZeIVmCxqMcccgkHrz+FZyxyWtm+/aiN/FADMyu3cE9smk4RClFvVlu3TSVt3uJo7ctHud/sm7aU45JOSCCD7VrRaPp9lD9ot/D08s+BMsk8kmF4BH3RwPwrB+z3d5qOmaLayA/b7lPPabMYaCP55VAUHJ2A4B45r0jVI1htWWOH5G/hzkAdvehRTIrNRdjlL3SBqGbxGlWZgm97WRkBx1wjdAc81RfRrlo3tYdKb5sqZXRSCoPGMck8/nmugHnciMIox0z1pPKujIZFhX5+6Hr71Xsosy9s1pY5iw8I303nNcR3OmIG/dpHMWaTPJO5Tgc8YrU0/Rri1Rree41GUH7vmSMM/8AAuf1q2wukHlophYMc7snP0xSyXV1Ey7bZpccMMkD9alUooTrSEkttVjnVbexnZAQrNNJG2R6gAdaJrvW7eN5IdO80qMKm4Lk+nLYqWS4ujcSIMlP4UWP5hz655pftEifvJJmUD+9VexTIVVn4Jxruwy8/wCNWYz0O41RhZoz35q8m1hSP3Kk7mjA+5R14rJ8UafJeWSyRrl4zkBRya0Ldv4R1PFXom2sNwyAcnNXSqOlNSRWLo/WMPKn3RwGk6TqMt9DbxWjl8btp44HevRtL+G95eOrX1xHbAfeVBvYfUniqWjtFDqt7eHaCfLijUj+HcCf0FdbdeJr2aUWenw75f7sfO0ep7CvoPaSfwn47LNcTQvTVosvR+GfDfh+3PloZ7hiF82QeY/0QdAT64rt7c/8IL4f1PxReW7SWWn2zTyRxEbmUd/c9PbrXJaHb6p54nmhRZE5yFLt+bYA/Cu9umjk8G6t/aFu11byWTmeOTBwuMbcdOuKJ3a1Z5VWvVrz5qkrvzHfsc+PvEvxB+IOt6F4Tt5xpcumzalq0hjKqswkXyQGHKj7ycn5gT6V9b3H2iRo4v7Unfyg6yDewyecZGcqQST/APqrzT9h3WNF03w3rugafY29pMssNy/kwqhkXZtOcDoD0z/eNfSNxpumzsbq1t4/nKys23BdsYH1wP0ryJzTlotDfEfun7+5wKi8uA72+pahKYYwsaCZsEMNrO3OF9R7jPtU/wBsurO4khfU76JTIkzcmRWG4IWxxlS23J4ABP0rpLvUHt8tCsDyj5fJjiCb2JztDnkgZGTgDrVV7i/vpzZ/bvsgaM/PCVIb2Ut1bGe2B6VNzBO6vbQpHWNfEkMLrcSO8Yk/49ZDuJbbgAgEDjuRjk9MVqWOqSPeQWEun3qQmV0QrbthGPJZtwPB456dPw0kjs4VSCIh3lYbUkkLM54HU/8A6qZcNDNGYb1NisQVVVbhgfUVm2jF1E+hbXw7ZPdRSTR+bIBwJmMqsM9dpJUfXGferV5GvMLKrv2VRgD8TxisSHSLKFf9HnubfzCXcrMxwW+8x3E4zUV3HJbXDLp+pPNlhtjWPzD04GO3rk8VK5WZpruT3umzRXQPkRG3O0Ns+bBz0GOn+cVSk09oGE6wNIR8ylYzk56qAexwD+BqzG3iiybYqi6j24EjsMKe7HaRyM/T5R61TuNemtLj7RdWZnQyshlVG3RqVBC4Jzk5xxjqOKrkvsdSnJRJ4d9t++ul+/lsMOEJ6Y6ZNCwvGw8uFkLNu+bjjuOe44P/AOqtSGcC3T7RdiOUcqg5z+PNEM6TzDbbyGRPmxI+1Qe33etQ6diPrEjM/sxQvmXE2ckDYrfe4xn/APV71ej0uNl8uOGHzFzgSNnHHHTr9KdPp97dSLJJY28UJ4yJXOR36nAP59akjtRJ56STgC2jDHLYOCwUAepyaXwmUqkp7spXFxNY+WscKvJIwTaBgEng8E8c+/SprlW/feRPEEjyrYOEbsOeuKb5dnZyiRYwrStzLJI+U7HGD+gqzFI0vz2d0jwh9q5U7j7gkDPpmhskrWccM6/NMpk2DJjiby19ArHj/PSrZs9NQZn+8F+7IwCj8P8AGnmzkkYSXDySmM52s3ftjHHFWobaPYZGuFRueZT972yRzU3JuU45HKkxqAB93ac5FRRWd0srNJcCNWOSFTH9KvQyIq7C2Q3KtGQV/OrbMJ4wwUPu4A3EAj3ovcEZ0nmNFtWFJSBgc43fWorWxuF/dyCEhCzkhTjnHTPJ6fzraXT5FjHmTQFI2LtsOMZ6DB69P506OzeXCxrcyqePkIUKPfFPUNjImtZ5lKRzThGbkLtUD6nrj6UsNm0e1XKSSvhRtb8sc/rWqLYWpIuGTLN8pbnbk/d571N9nihlXzHYENjAjGB+OM07Md7mUoWJ3LshRlO4bfmFSwwzKfPtZnjfr83AIrbk0+1uHWSSabavK9lz23AdfxqhLJaWdxEU2ODIPMhjG53XOCRgcfU0ajMhpEnuTb3OC8cbMWVvMH+7g52/1plnpU0kqywzQuADthnU7W4xn0yP51urEbhZoRIwILLlFAPoDnscVUvFuPNE1xbxwxY58uYlsD0XByapMDFk0maJgZUeGNxjcz4X65xjFJa6dcbpCL6SWLGF64OP511mnyfZ7cW7XY8mRd8kaQjapPUEHjPTNP8AsemTDaLOR5WHVV8sgf8AATgVcWmDOeWzuJlBktY0UDZlBt3e/TrUdxp90i+WCYwy55I/TA5FbMlppVqjySZiEY+8zMw3dMHqKzLia9YSW9nGMD/VsHJR/XaVGM+2arkQXZQ/s11zPdMGgHG0NtJYc81VkvLOSDz1vIUuNzbo5SenGDnABzz06AVLYW14bhpo5FljbPmLdKzoD6/MOD2q1aW2h3bTx3UKR3cce6NfO+RsfewG/DAzzS5B8xmTLfb0kvrVkUcoIF3K2Rw2eM5GMUNpkjGOR/ty+byzzlcgHrgL0rYxGpEouJAoX92owwJ7EeuKb/p014qTXcrxuFDsHJYZPPygEYFNxFczUtbWzzsjWXdgDZz+X/66kkv4/LCfZWww+4sfllfqec1d/suTzJJrW8tTHyu1kcMR+Ixn6VMkTsvlm13Hszg4H6UrWC5mWz6heQ/Z5isdtHlomCgyLzyu/GSD79KWPSZNQjk2Ty5tyM7G55zhunfB59q0rB5rW4eGby0sJkbzl8tuHxhSDg4Pv7YrQXS7u1tY7xbpHhnJMbJzkjgjnuPSpvYqxjW9jJJGrXls8yQk4Mv3picnGT2Bx+HSkj0y8lkjHlhPOYqsaMCBx0OetabbmZYZpsKPm3FMcjHH4880ki3jK0nmIqZA2o2Dz357UuYRX+wrJH5d4pYK2FCodg9znnNSS2QCfu50xjO1vu7unOT1xUksEzBln8xkZRhef/11NHFG2C8gHAHTjH0ocwsVpYbZkX7J5sc0I/eBT8jnuVPb6EfjUd3BFMouJrbc6qqk42g4GOQOpPGaux3UcDPHdKkqt0KxncPTHrSTS+Wvl/Yzg8sqgYJ9anmAqf6JfXR8q5kjEKbnZmztGPYfh+FQxS2bxLCLdHQuQCQFOT2GBTlZI1llkjS3k3fwMQ2MdTVySa1hmSGadpbg4cEMAUyOhJHoe9UmO5Hb6RbHlIZEBb5hI2cn2Hb61JcaafKy8xC9RtXp+VQXCi5Y+SzCQthU2/KT9RwKt2vnKgdoy0uSNoYZH59arQkp3mlyMjXya3LLIV3YijyemfmVsH8qzZrrbH5ki3bIT837sc+uMHNa8nmSOd0k8TchWMJK/ieoqrHpcsMzfaJomWVTt28FW5weuD71F7juEq3U+oSM8SOVQNhTwoIGOCOo44psLW6KrXEipNu4yu/djndwcA0+3tby3maRrlJi0eyLAb5c8Egj2yPxp1vYgRvHG0a8gtuBJ/WqvYLjlZ2d1j2PK3Jfyz8wHYnuaik1DVZlaCOcrHuz5T8qD+Iz+HFXZI5FH2aG9VQcMY1UdemR0/CpEWaaLyZsSMCd5WPOfrihNsV7GdJaQwyvPbq6RSjBXzCWXI7Y5pvkXCQqIPm8rPltuL8H1Bq20c1uQYoW8vkeXKCRz7en0xTd0lvCFhZoy/Xdzn6Y5/OpuO5HMk5mZba42W5O4YHzdOBgipkhur0DzmaQRctHnaxPbpjP4VEY7mKzDbcoNzjjlSTzk9TVlmm+yQzQxs7SRBsMu0lupyD0GOMU1qJytqEnkrnzreWEgblLx7hz796z7q+Yxta2+npK6HduXPK4zgjseexqO4+3fZ286zkklJx2OwY7c1RWS4gkC3Ucyt2bcq9fYU/di9TOVSUthbjVZ9qiaJY8Z3BZPmz0A4PB9sUGS+fEcZlkkxuX98QVXuCG/wAPSr9rb/alPntG6Djc+Bn6jOeKuW1jZxRiJbcAv8x3YKsRyOvOa1UubUxcGylGL2aIR3Nu77s7d8mVAwM/ljvV60gSFgyqjTBQV4Hyn1Hv+tVruS4vPlxPsTBEAHylQckDpg+hqWzjinl8kQyWm5/3YcqOT68/rSbb2NoU+XU1pDps7bXmGQoX526nHPv17VG0DNgXLBo1XahVxlVHPO7BqpIJozt+0IxQjdI2HJGemefzqSG+kkmSSaOIx7GBUxnkkYBH061ChJmpM8Nn5fl8OrHhlJDj04PB/D2p3yzTxQxOxSJFQTNyyrnv0JxnPrT7ea1z+7hJOODu/kO1Wlht5I98iypKW9OCOxDD/ClytbiuVoWvGuGs13OzsDt2/fx6en4ULewrMFSabav3hs4A+uBmpL61SFYbho5Q0TArJb5JJByDgdxVay0+xvrpYYJJZJZUdlabIUkAnGeiknge9apBckhUX6z+ZHH+7xtHl7t4LY6k8YHNVr7QdPZ8W6zWcxbiS3Zl69QB90Z/3a1Le1ZlEe1yQBuQ7lIHtxzSSxwRbUS6nilk+XbjeD9O9GxUa01szNt/A9w0aznxRrC7z87HY6qDwMYAKn3Pr2rR8P8AgPTY9yat4riuy8rSM0oYMqcfICTgHqc+9CyBm/dTHABZZCu0kAgbfrk9KnhExk/0q4VsjHJPXtyOfzrOa548stjdYqoupo6l8O18uaXTrhhGzZjSGZS5X8eD+dZD+Gde0VlK3l3bQyfeL20e0rjoxGRWrbrcWe+azmVDIAr7JD8w9D2NWI/FF9bqsbSLJGTtZV7DuMYrk+qQg709DZYycvidzkdQ0v7dcHUGtdOv5X2tvlkkEny4I2ndgHj/ABFWb7xBdWtvDFfaTqccLZLyWrGXI68kYIxxjkdDXYrrmh7zcXWgwO7qV3qApYHqDxz0qeG48JuiFo57Q7ufLkON31ya0/fLszT6zCStK5xGla9omrMun6fri2kEZPySBopDnJON49fTNbo06/VVi0ltkTAIkyS+cS2Ou0D278V0c+jeD9Y/dPIJTtKhZkDgce4/rVD/AIV7ZwsbjS9kJCjaYJpIx+IyRSlKS1cf1FzU5fC7GfareXF8yx2sqOG2rPJblyp6HJZgfy7Gr72i6dELq+Ect6cxJI0wBBbjAUDHYfSo10DV48/ZJdUUhvnyyvgjjIHGc/Ws6DVNcW6lS11HS790GGyvzqckFXwTg/zqY1Yv/hgcW9i9tmhvvtWta1bw2/k+WtoitJmQnhyw744Axjmpkvo5X8tX8q3CnksqZIxg4Pase8vr+4uEmvNBW4Rf+fW5z5Z7MEPfnPOajsdW8NrDNZ6pFfQEMG/0y2G47TnhgMYqozjPZiakt0Xo/EGnrK1jDbrFAMu1xIzFHcnBVcfMz8gnoMHvWrZafawjctx9pnctIrbFLIDnoT0UZAH4Vizy6NrEf2XTNaSZGwrgXAHy8dRwR/StG30+305Fm0OytLhwfLn8yYvJtPJ+YZI559P0qybl1bdmj8zVHgfawKiaXYqkHjAA5OcfjVNY9Y1TdNGsdirzHc0MRLShWPJYgcNjuOhqb7LpsFwt9cbzJcKtukCxbUBJDADPVic8/UVUa113Vpnb7W2n26YMMLz4YsOobYPuke9SirjZLWVYzb2NxF5SHa0ckaiNSpG4Edz3z606RdL027uLqxjvbu6nwrSed5kjLuzsCg8AdeB+dSeTqXzRx2+nTOnUxRsxHXgFgec5/P3qXT7c2Ma6bpunvDPtaUh32FgW5ZiPc4/KmFyjsEKPeaxpdyV2AiSaMfIS2AoHr2zjp1NbEdreyzOl4Ira0VdrRiQB93uV4xx0z3qBdKmtoft2qahb3NwjMyoEZlQckAc9h3xUDRrqkMTXcU7wRyyHylxEpT+HcMZOR15phe5fhvbUyGz0uxkljjG7zIo22jPXk8Z/H1rOnmu2vBbWqyh58qV3bcFRyzHqR2H4VUm12TVNVTRtNWOJHt2d7qSR28rBxt2gjDc5GeuDWjJ/Y+gwnUJJnlkjiEXmQQZlfJxjpnknt602gWhnLpK6TG95JskeUf6VO0bGZ+eFU5464qVdIjv7hpdQ37Idvk20k3yqQed4HU5Axz2qPTZL/VJrxtU0m8gtxIn2X7SQElQgk5AOcggcn1HHerJf7ZM2mwizikcFpG273b29A3cZ9KgrYo61a3WpXSJYajJaxrkSNbKGQn0IIwSefy5q3saEwrCLuUsBEI8qnmNjjnIGeK09trY2tvaTyyNJxFCn3WkboASerGmW+nyNG0csPkTqzSKJnMmU4C5bGAevA9aQjGuLOS3UTQ3VpHcFgpZ9zlR1xmi30bV9QmH2i4nljRhlZG8tHbrkDritO4spLiR7ZmMkRUEKigK2SdwJ56frzVuzuplJ06ORpJk58yVdyqB0U7cYIA4zgcfm0MgurQR485LWKXOXdZGY5HIAC45NYV14+8K6bIvhybVooGtFEzQTL5UgdgWAcHnvu6DqOtdPeWOk6faT6tqcl2I7aN55WUCPAUFmPHsCfwr8oPF/xDvvG/jfW/GEm6F9YvpbwRrPzDGx/dp16Km1fwruwWGeIb7I561RRifpl/a9hrmoWdjZ61DNa3DGWaNQrBo0GSpOeAzbVyQevvXUwsNuzMaMVwVXnH496/IOD4ieMNL8Vt/ZPiS+tLW0tAq7ZCFd3PzDJ9Aoru9J/aO+LVjGEj8WXDgcMk3zfTJFdVXLp3vFmcK0T9RPs8wLeXMyZO/kZB4xjB6D6YrHkkumkuGS8vbkf8+8dqyhRjlQe5PqT6V8D6T+2l8VtH2nUGsLtF6Bgy5/nXW6T/wUL1SSY2ereC7eT+Hcs33hjnA4JrmlgKq6G9OtFH14tjH5Bktljjd/mH2iRndCefmTDYIPXFUdSs7qOF11CCz8ic/u5NOjRHJIxkhyMHPf6V4Jof7Z/wAMdRkL6p4ZFjcW+Gt5JyXUEgliMH5cED65Fdla/tBeDNagRJPFlq8Tbm2y2wfB3ArtbBxgZHQ1hKhUh8SNOfne56K/2a+jWOfTZbmKJtzyXlwAVYD5SEBIb9OKvHULOFUt49QEDsAQioGPXGevAzwfrXHaV8RdC8QeXfQ3ySICY1O5YUbaSMhNpyfciuktfEEdxbup1LS7dMkJsRZMpwQWGAM4zwB261k4tbnVA2fAOmpPrWo61HqLXUEKHT1RssqTBg0vJyQQAgxxwTXS65cNHi3t4QXOMY5OOvT61U8EfZ9P8M2gP2ZZ7vdeXCRyKRvkOS2RjqMUmqXgkuvNg8pyoPG/AP4804o4qkuaTZVkuLrylZlSKRsDLRk4/D3ohuW5WaMow4OTjd7ijzVkUsu4sOdo5x/jSrlsZ4B5+Y8//rq7GV7EE0yTN86zfN2GOfxxRHMuzJjf8Gq0YVOc7WC9v5VGqqzMqgID7Z/Wny2JuQTXCI/zL+efTofT60SSqygqwGf9o1ZmVQ+Y4xKvdh2/ComjjVSysoPoy4xQ0CZ+CAUH+lPiLxY446fSmR/dHapsdPWudn7tHuXbdvMwy84rRUDhgM4rGjZo2wD7VqWsqthe9I64Mpar5iqqW++Mz/LJKv8ACPQd6vaLp1vB88MNwHJBMjTMn9eaV4VmUqzEEVLA0cMyQqxJxnntXuYGop09d0fknFuA+p451I/DPX59T0Twks0rDfNuBPOM46+pyTXpLaDeeIPDsvh3SY0a41GSG33E4UBpF3Fj2VVySfQV5z4RnZgm0Dnp83pX0j8E/B+ieLtUNp4g0+4vtMtYvOmtYpGQTtkBUcjkoTnKgjOMHjNa1p2i2fL02ozUpbGr+yX8NIdKste8ZQ3k13Y6pfyWulsysPMso3wZAGwQjuCMkZKrjAzX0h5F1uaRpmbfwNkPCj88YqGOGHyorfR7G3sLOFQiW8duI1AHACjggADsMe9Wn/cKqrJktxtM7KSPUYrxpSdycRVdeo5szpLKOUsbiNrkuNpLMPy2qKprpVv5iyRx/ZmiYtG+WyrnGSOeOBjiuthsVnYSPHbLJxtP3m9uetJLo0fmveSTMW27REsYwvHJ6Z/Wo5zJNxOftxq1qpuJLaNmCnLQs29h7A8+2P8A69XZnV4lmu7yYll4SR2yM9RjNWI2tdjySeYu2Ty1j3ff4GWHtk4/A1XudRtY95tVjiLDa0jQCZ/oB2pXuNvmE0m1WGJvLkclm+VZMsQvcknnnsPaku1tYZHcOzDq21/LzgdAeKhtY7rUp5FtLea1jR9qo0QRMdMnBJzx1PXtV+OytoZCt3cWUb9gGJY5+tOyWokijDcvdbZNkcSg4TYzP/wLGB+dR3mjw6sw+3W7y+YoTcq7eAc9j/MVtlbWxUlrpRkD92ijg+wAySf6VmnWL6aRhbw3UUa42tNHs3Zz0UnIx7gUcyWoarUtw6HYx2KW6rMFtlCLvY5x2yTkn8fWoZZLW2VNkkCHBU4Of1bApPM1STMsbcsdp8zJXp0x0qCbQ3uo0XUmSXzJDGttb25Yy57EnkcZyeAPWq9pFhe5NNMyw+ZHfYPTbEoJ9xgVxXibxVp+ia9b+FYFubvXLy6RZbVWXzYyQGEcjv8ALEcE54JXB4rrbjwvpkNj/YqxtBbB2KrbEwEZ5OHXDDn3qkvw+8H3Fm1nceHdLlyxYyTo00ruerM5be3bqx79KI1KafvIpaHC6x8Rms9SttNm02KyuBKsd1ZlGnW3Vn2IVkVgrM/UEjGM1HL4/wBcNreQjUJ4pZm8uyuIvICKWl2pkqsqnKBj14yOleh6b4F0rTbaXS9HtzZ28kflstvdTLGwY9NjEjsOB04qrp/wr8KaNdC6s7We3uAmzzEuGLge27OCPUCt1XoreI79jznUvE3iC8+xNa6xclCY0dVu8wzTSTHYNybh/q1OACCc9FzUEPiDxBHcJN9uvYm1ONJYIHuZVQxPMEBj81mQ8KAGD7iT0ya9VtfhT4Ps7W4sbePUIra+dJp4Yb6RRLIoAVmGeSAB+VQ3Xw38Ft9lsI/DZu1tR/o6XU0zwW6g87A7lE+gHJq1iqSVlEV7nneleOvEuiSahcS6tHCUgzNa394ySRZmcMEids7tq7RtbPTAHBqTT9e8dajFM2h6xrWqXl4kVxZxw2edOhyx8xJJZwGyEC4wT8x64FevWPhPQtMkZtN0HSLBhh8CFNy5/wBsjJP49qvT7Yf3b3EZZ3BVFUEt9C2eo74rN4mL2iFyn4dl1hNCtv8AhJrW2i1maRvOFhuaJVGAoP8ADuwCWK/L0rRjunZtqwrgHGOBu/TmovtEO52a3aIk5VfMbA+vYfSrCsswEi+SChyMrnP0JNczk2S9SWS8byQreSNnRdvT8al8w3CqFuGUNxvX/wCvQkccipuul3Hrt7fiaF0/YxmVQ7cgux6j8ahiSIrpvJjkkmu0VEG5mLgDH1H0pJF27fK8wiRFbceGyRnAzycVGpDodyxho32gNjGPUfrU9rqGy4ZpnWQbWUDAYqx/iB9cZ/OqKGHMUJj+zyyFjkHfjt3pIWUu7QMkhi+Rm2k4PUrn6f8A16ZdLCFZvLlmVmwUlI/Pg9KqXepXW7y0uBAiAKPLU7T+nFSBbury3aSNpo1yjb/L2/e49MZxVZtSuJGEiGeNc/Lhl/E8iqsMdvIytHmWdvlZlHL98c84rYstJ8n5ri3ZX7q56Z6cf1q0rBcS1bWLiMwxttAXLl0OD77SefrxVmx0WMst3C8jGJ9rMqbcEckY71eh2ods1xgL0OD+A9TWXqN5Hp0FxIt5I00xDfISFRV9h361tF3C9i3qEMCmS4n0/cM8u+0HrzXLz6bY6pGhs7oqrORIvDBj2HHI7dRW60KXUMEmoRyTgxpJGssjAAkZ4HrT4dPZHSabyID8zKkcqFFHTnJyT34H41dwRlL4Zu1iWSZJCsGEREGRGAO46kn1qcWkcUSfY4445SvO5cOe3IroI4bENGsjRksQoYucH6Y6mpr6z0toxb3EYmQ9N3J/Mc0rktGEvmCJp76ZJBj94NyhAPr2/Ksq+DWF1DPpccymN1ZcsHXHbPbb9a3rrQYUjLWkysCwZdz7wvthqoz6XNKwMisxzmRo33c9hjPH5UMNird6hDcXCrb6FHE8xzNILjCKR1ZVwd2T0Hv1GKqQ/am3xm6ZDGT9x8KM+2a1obSGxZ4LqzmcTkFZVl5RgvAxjgGs9rloZpI4onRtpwoIyR/tf41lJDTsImqSshtZrtriabKqXdvlABwucYUcfnipprpcPst3WJVwZGQdu+Mc1VtHml86bUpLeNsYWNVBP/AmAGfw9Ks+XFbW6yecS8q5Kc8Jkjp7/WptYd7jLcXP7tvtDgtzvK7So7fLWhHbSNbsVk3ncd7zSZz27dBx0HFZslxcRyLbx2sksMa8HeCeexBpYfOZi0yiBNv+q67n9SR2x6UMexej0+G3/wCPto/KPzcSbWX068EfWs+S4tkdZobp3QSEKcEFtp5BHQg/kakktY8K1wkzA9QxzkdsGrbaXYx2Mc9jOJmAJaAth4vXKnqPpkVmnYerKLRr5kbNbg7zxucjGe/Pap0t4WW5YXMaeWvmO3BGM4GfzqJntriMRyKEYE5YJwR2HHcVXitRDa3MUau6O6vNuizuOAAMkk8Dp26nqaaYIu2I0+a38lFV3j6yMu0c9eehHp3qX7HEzFbXcgGNzCTK/XkdapxN5Ma/Z12qzE7eiuff3q88cMzeXb6pJk9VEPA98dfxq7oTTGypIshhkmd1jHVs7h/Qmp7PTWubOX7JL9oERLMA5Lrx6YBx+FQRxXSh4orjzVjBd28nhh754yc9veoZRqPIHlb2z5cgj2FPoQcipuHqRx21u24+ZMkibdpUkgn6dqkjhzJNHIyM7oVA3AHb1b69M+3PrT7iBpo47uNpxfeXi4cRj55O5GDwKbZNdLuuoZjK0C7JFYfMFb264yP0q1YTGx2s0NuFtsKobk/e3H06YqZbj7O7PDNFDk/OCrZyfp1xSR3kKR3UdwzCVtojVE98k/0qmWiaIr5hHzjJUMpxntgcmqUkTZs1POmKrDJDDMSpY7XB4HUgZzVb90ufJPlgn7q4Ofw6GmXXn29u9u2mzvvYMssi5Ix2z1plvp+papcblmmGBtaKMY2j6nn8BRpEhyfwxLlvFbySbvKWEH+91P4dvwqz5GnzSiHcscrZHEmffHXP6U+HwzMzMsPmzIVGVPr+PWluNL1KGGRrrTxIrsV3FATg/Qipcr6WJcJbyMO/WRN/2O1aVd3+tj7/AF/iqjDpEwZpri2mlkI+9MwZUx05zmtVoLUbVVZFCt0Qvg+/XgUTXSyfufMMkMu1Cv8AEdxA/r+NRCEpPUqEefYoP5dvbmJeUuFDiQNuBI64x27cVA0i3AHl3TQoMABAPlHbHcVLK2qWd7JZWKCCGCRo45MnDHucDn9aezaxNCbVllaMna0nl4x7j1rsOqMIxKdxbOysJryUqABugl2MR/tK3yn3IK1PHpZRYJpNUSZbhA0Ukn8SjIycgHqMYPpVj+xfPk3iz8oNltmw7dv9KuR6LLcKsP2t4Vhx80fysq9gAeD9Ka0K0JNL0PT51ma6vNrblWErIuwjvkAdc9Oavr4XXc0KXEhR1JG4A5Hf/wDVUdnpH2WfCXcN2X/1iXEe1unOPf0xWjbxtp8QWNuDkjzJORVIRj/2H8xWCXLKOvQg546UjaN4jDN5NqrrxtcycE+vPb8K2UE1xH5y+Wpk+/uchlx/Me9XLWScAAyKYgu1sMcj8e1Jq5Jg21j4igdjcWilcFT5Tbt3rmnRQh9waOW36/K2efw/wrSazslmaf7SY5M5O64wOfbPOaf/AGtbMD/pG/kKVDDng9Py/lS5UPluZSLcWuWtdUEb7g6+Zg7D3UEnkH6etSLcXPmqsaqrSttAXJz7A96Zf3WmXoMV1brKSrLs29CcEH8MVFBHGI9sf2hVA+XcuVHsD1FFkS6ZPC584vMocofvbeVHt2NXGa6jkItZrYgHgtuyR7jtVLbehx9n/ebcNhmGM9cc9RRMbue4M0i2kZ4dkWQ8Y9FqWjO1izHb3kt2ifNL5xIVFbqfyFN+TcvmLkZB+Xhh7Bv8ad9okx5yuQMblVchs+np+Rp7XF1tVnHyHkYYHBqLDuRKkjSJJHeqrK2V5IKnt9anWym8s3CYlCHLqox9SQOg96IdQSNvOXEDxrg8Dn6gjFNuLu1uGMzSmJ3/AI4MqceuBxWbLRLJJHIAbSZoQv3o9x+U+gbuPen211cW8yzRXjqB1Ct97PGMZ5rLtp5H87aZZYN+1ZXKnPA7Zz37+hqwrROpWSL94GyJF+XjHQrz+dIeqOiPibXLdAckqO7pkgenWm6Xr2m227dodjE8nzSNbxLEWPON3HPU9fU1kWqtKxkh8wkdSrZyfoOn/wBep7f7RNdGAWzs20s26EhVUcZz0P0FDt1LjGb+FHSN4g8NlU+0adjbhuIAce/HWpYZ/B2oEXHywlWB+YlASR3B+veuWa1vJHSDZvVmCu67lEK5+9yMHHXHWpv7EtQjp/aYEvRTsyM9jjuKj932OhUK70szqW8G+F7xC32WJy3/AC0CrnHQDcvP61jt8L9Gt5TPY6jfWDBiBsuOHB7HOe/8qjhtPslrHG1187RjfJyqs3QsFB6Eg8ZqfT4YrVmZYd8u3DSSSOQ2TyApOB+A7CleK0RssPWte5BeeDPEQj8zTvEhcrghbhfMyF5BB9awru38ZWZSS4gt53WQMJIiUIwc9e+cc47V2q3VwjI0MvlkLt/vjHOPlz0zVqbVIZFLQsN2MqMjk/Spf91k+znF2tc4iXxP4itI2W60eePeNytA4YID3wQM/iantfH+kxjY0ktrM4wrXNo3zHb3Kk5GfSuvU6VchWvrWGSRPmDeVjHHqfqai/snwncMtr9njD4YquTnHc0Jy6EPTdM5+21LTdUuPM/4SQXJT5lijnW3+q7Scn0OTzmpFht9SmktdPt4sR480S3HzBDwWCg5I6gHpmr9x4F8H3F00KrAs7R+b5R27tmcbscHGeM+tYlx8L7S33zWd5PZPjKyRXWAvqMNnGfY1V2t0SnF9TcksLDTbdGkuoLeOPor4I6k/Ws/97qVwwvHcWSP8sSQbfO6EE552/lyK898V6pr/gi2klsdWW6mUFm86RSH7hhnJFeDeJv25NQ8H3gs9Y0RboOu7dG/Bxn5SV2kH8PrV04Or8JpZo+udQezvpri0t7P97Bt3TyONsYb1wcg8dMUl5cWehwmIX8KSupxHawh3YqvJxzjnnk96+PF/wCCgnhvVLGW1sNHGlyN8pZZVBB9fnHJ/GuH8VftLeKtVhuV8FQi4S6ARpJ7lBIVUnb0yo6knFbxwVVv3lYzdSMep9S+M/id4X02Oz1Txswa50y8N5ZiaRAsEi5EcmFbBcAtjPTPABrzPXv20tEusW7XGbQl0K2sbCbKsOWY8AMM4AH418ceItf8XeIZC3ii3vJGLZVEQyrn1BxiuburpmzbxrdW5Py5fhk9cAjP516NPL6b+Jmbr9Yn2/dftr+BriI211HcIsiGMRvI8ZIPBOAQeB3B9K6Tw5+1/wCB9E0e10XT/OWzsoIreDfIS20AKC7v39Sc+pr8+477TbdfJjnieUjk/wAZx3yfpU1reTqWmaVZAc7Vc8Kp47D6/nVvLaT2IWJk9z9L7r9ozw/rHg/X47i/tY7mbRr4R7GyRJ5LgKQR0HHI96/K23j+1QRaha5hl2naUbBPbB9q6LVdevvs80MV4yRiNv8AVswLcHg89K5PT5gtjbyc/wCr3Nzwp9MVvhsOsNfXcmU1V3NG28TalG8lvewpOsP3laPqD05HX64qeLXfC+2aW4t7vT8ncxaT5D78Hp+FczrDSTTR3yyMPKO7Kvjjoc+o54rM1ho7ywnszGDJJGDGzcnB64rp5rOxzuNjuNM13w/q008Gl6qt0sLYImfZj2BOM/l6VLqGm3H2hNQs4YRcxHCeZLvjxn0xjOO4ryNd0emW0VlGx8v5ZVXrkdSfWqNrrl5b3AukkdIt3zKWIIUZBIwe4rPnS3HZ7o96F4rRlbi6tBnCsPL4B/E/pWbLJPb3C3FvfvKkmMxea0Sj3yM44rzy31yS6jguLG/QQ8rcQyS/MVx1Qeo9Pc1N/wAJpJZLHa2V7vmLrGPMhG3B65Prj+VUpRBpnrNjr2saav2qz154BtIz9tfoeMflUtp8RPHmlzi1j8W6kY5+I1t7oy4X3zyK85j8YQ2coWPy3hYbWdHwwY9Mdq0JNVtb6QwyXEoaJd3mIVwB1G3ByT7UnCMuhSqSWx7hpP7RnxZ0ZY4oNe1IqnG2SFWQr6AZ44GBitrR/wBsPxvb7k1K38uYHbseVlcn1AORj8xXz7Y+JbS6Rds0kgH95ih4OM47n2pl3cTahcRtaXCoqOFLsM7s9gMdfwrJ4ak90V7WXc+udC/bS1qzjLao04RT99WV8DPocfpXdaV+3B4fkRJJL9CrNtZmgbGe3TpXw5C1vMrW7XUcwB24ktyv65INRzXt3pK/6GsTwIPmjjkwxPXgNwKzeBpPYPbS6n6L6f8AtgeD7qSOOTVNOZnOArXHllu3f/PFdrpf7Q3g28jMjSpyOkUqk/kDzX5gxtPe2+68t/MWRQxVwrYB9agX7fpDRrb3EiI7Ha5ZgYx789KxeBi9pD9qnuj9aLX4yeB7zymt79FDheWXjNbNr4w8N6h/zFrY7sD/AFmDX5N2/jDxVaxldN168Mg4UC6DA4781bt/jp8RNBkVb67nVFPyyOuUI+o6GsZYGXRlKpFn/9k=</base64>\n            </value>\n          </member>\n        </struct>\n      </value>\n    </param>\n  </params>\n</methodCall>"
  },
  {
    "path": "test/cloudscribe.MetaWeblog.Tests/testfiles/new-post-request-1.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<methodCall>\n  <methodName>metaWeblog.newPost</methodName>\n  <params>\n    <param>\n      <value>\n        <string>default</string>\n      </value>\n    </param>\n    <param>\n      <value>\n        <string>frodobaggins</string>\n      </value>\n    </param>\n    <param>\n      <value>\n        <string>thekeystupid</string>\n      </value>\n    </param>\n    <param>\n      <value>\n        <struct>\n          <member>\n            <name>title</name>\n            <value>\n              <string>olw post 1</string>\n            </value>\n          </member>\n          <member>\n            <name>description</name>\n            <value>\n              <string>&lt;p&gt;this is a post&lt;/p&gt; &lt;p&gt;are we cooking yet&lt;/p&gt;</string>\n            </value>\n          </member>\n          <member>\n            <name>categories</name>\n            <value>\n              <array>\n                <data>\n                  <value>\n                    <string> Cooking</string>\n                  </value>\n                </data>\n              </array>\n            </value>\n          </member>\n        </struct>\n      </value>\n    </param>\n    <param>\n      <value>\n        <boolean>1</boolean>\n      </value>\n    </param>\n  </params>\n</methodCall>"
  },
  {
    "path": "test/cloudscribe.MetaWeblog.Tests/testfiles/wp-editPage-request1.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<methodCall>\n  <methodName>wp.editPage</methodName>\n  <params>\n    <param>\n      <value>\n        <string>default</string>\n      </value>\n    </param>\n    <param>\n      <value>\n        <string>0f3813a4-efe1-4481-8d5e-7ec922685884</string>\n      </value>\n    </param>\n    <param>\n      <value>\n        <string>frodobaggins</string>\n      </value>\n    </param>\n    <param>\n      <value>\n        <string>thekeystupid</string>\n      </value>\n    </param>\n    <param>\n      <value>\n        <struct>\n          <member>\n            <name>title</name>\n            <value>\n              <string>First Page</string>\n            </value>\n          </member>\n          <member>\n            <name>description</name>\n            <value>\n              <string>&lt;p&gt;This is a page&lt;/p&gt; &lt;p&gt;don’t think it is a post, it isn’t&lt;/p&gt;</string>\n            </value>\n          </member>\n          <member>\n            <name>wp_slug</name>\n            <value>\n              <string />\n            </value>\n          </member>\n          <member>\n            <name>mt_basename</name>\n            <value>\n              <string />\n            </value>\n          </member>\n          <member>\n            <name>wp_page_parent_id</name>\n            <value>\n              <string>0</string>\n            </value>\n          </member>\n        </struct>\n      </value>\n    </param>\n    <param>\n      <value>\n        <boolean>1</boolean>\n      </value>\n    </param>\n  </params>\n</methodCall>"
  },
  {
    "path": "test/cloudscribe.MetaWeblog.Tests/testfiles/wp-getPage-request1.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<methodCall>\n  <methodName>wp.getPage</methodName>\n  <params>\n    <param>\n      <value>\n        <string>default</string>\n      </value>\n    </param>\n    <param>\n      <value>\n        <string>0f3813a4-efe1-4481-8d5e-7ec922685884</string>\n      </value>\n    </param>\n    <param>\n      <value>\n        <string>frodobaggins</string>\n      </value>\n    </param>\n    <param>\n      <value>\n        <string>thekeystupid</string>\n      </value>\n    </param>\n  </params>\n</methodCall>"
  },
  {
    "path": "test/cloudscribe.MetaWeblog.Tests/testfiles/wp-getPageList-request.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<methodCall>\n  <methodName>wp.getPageList</methodName>\n  <params>\n    <param>\n      <value>\n        <string>default</string>\n      </value>\n    </param>\n    <param>\n      <value>\n        <string>frodobaggins</string>\n      </value>\n    </param>\n    <param>\n      <value>\n        <string>thekeystupid</string>\n      </value>\n    </param>\n  </params>\n</methodCall>"
  },
  {
    "path": "test/cloudscribe.MetaWeblog.Tests/testfiles/wp-newPage-request1.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<methodCall>\n  <methodName>wp.newPage</methodName>\n  <params>\n    <param>\n      <value>\n        <string>default</string>\n      </value>\n    </param>\n    <param>\n      <value>\n        <string>frodobaggins</string>\n      </value>\n    </param>\n    <param>\n      <value>\n        <string>thekeystupid</string>\n      </value>\n    </param>\n    <param>\n      <value>\n        <struct>\n          <member>\n            <name>title</name>\n            <value>\n              <string>First Page</string>\n            </value>\n          </member>\n          <member>\n            <name>description</name>\n            <value>\n              <string>&lt;p&gt;This is a page&lt;/p&gt; &lt;p&gt;don’t think it is a post, it isn’t&lt;/p&gt;</string>\n            </value>\n          </member>\n          <member>\n            <name>wp_slug</name>\n            <value>\n              <string />\n            </value>\n          </member>\n          <member>\n            <name>mt_basename</name>\n            <value>\n              <string />\n            </value>\n          </member>\n          <member>\n            <name>wp_page_parent_id</name>\n            <value>\n              <string>0</string>\n            </value>\n          </member>\n        </struct>\n      </value>\n    </param>\n    <param>\n      <value>\n        <boolean>1</boolean>\n      </value>\n    </param>\n  </params>\n</methodCall>"
  },
  {
    "path": "test/cloudscribe.SimpleContent.Web.Tests/Services/TeaserServiceTests.cs",
    "content": "﻿using cloudscribe.SimpleContent.Models;\nusing System;\nusing System.Collections.Generic;\nusing System.ComponentModel;\nusing System.Text;\nusing Xunit;\nusing Moq;\n\nnamespace cloudscribe.SimpleContent.Web.Services\n{\n    public class TeaserServiceTests\n    {\n        \n\n        private readonly TeaserService teaserService;\n        //private readonly Mock<IPost> postMock;\n        //private readonly Mock<IProjectSettings> projectSettingsMock;\n\n        public TeaserServiceTests()\n        {\n            teaserService = new TeaserService();\n            //postMock = new Mock<IPost>();\n            //projectSettingsMock = new Mock<IProjectSettings>();\n        }\n\n       \n\n        private const string testText1 = \"The quick brown fox jumps over the lazy dog.\";\n\n        [Fact]\n        [Description(\"Length truncation mode (lifted from Humanizer) truncates to a fixed length, inclusive of whitespace.\")]\n        public void TruncatePost_LengthTruncationMode_TruncatesToFixedLength()\n        {\n            //var result = teaserService.TruncatePost(TeaserTruncationMode.Length, testText1, 25);\n            var cacheKey = \"\";\n            var slug = \"\";\n            var langCode = \"en-US\";\n            var result = teaserService.GenerateTeaser(TeaserTruncationMode.Length, 25, testText1, cacheKey, slug, langCode);\n            Assert.Equal(\"The quick brown fox jumps\", result.Content);\n        }\n\n        [Fact]\n        [Description(\"Character truncation mode (lifted from Humanizer) truncates to a fixed number of characters, exclusive of whitespace.\")]\n        public void TruncatePost_CharacterTruncationMode_TruncatesToFixedLength()\n        {\n            //var result = teaserService.TruncatePost(TeaserTruncationMode.Character, testText1, 25);\n            var cacheKey = \"\";\n            var slug = \"\";\n            var langCode = \"en-US\";\n            var result = teaserService.GenerateTeaser(TeaserTruncationMode.Character, 25, testText1, cacheKey, slug, langCode);\n\n            Assert.Equal(\"The quick brown fox jumps over\", result.Content);\n        }\n\n        [Fact]\n        [Description(\"Word truncation mode (lifted from Humanizer) truncates to a fixed number of words.\")]\n        public void TruncatePost_WordTruncationMode_TruncatesToFixedLength()\n        {\n            //var result = teaserService.TruncatePost(TeaserTruncationMode.Word, testText1, 7);\n            var cacheKey = \"\";\n            var slug = \"\";\n            var langCode = \"en-US\";\n            var result = teaserService.GenerateTeaser(TeaserTruncationMode.Word, 7, testText1, cacheKey, slug, langCode);\n            Assert.Equal(\"The quick brown fox jumps over the\", result.Content);\n        }\n\n        \n\n        // Joe A comment 2018-01-22\n        // using charcter trunction set at 400\n        // this results in malformed html that breaks the read more link\n        // double quotes changed manually here to single quotes\n        // notice bad a link in output\n        string badInputHtml = @\"<h3 id=\"\"markdown-is-cool\"\">Markdown is cool!</h3>\n<p>Once you get to know it</p>\n<pre><code>private MarkdownPipeline _mdPipeline = null;\n\n        public string FilterHtml(IPage p)\n        {\n            if (p.ContentType == &quot; markdown & quot;)\n        {\n                if (_mdPipeline == null)\n                {\n                    _mdPipeline = new MarkdownPipelineBuilder().UseAdvancedExtensions().Build();\n                }\n                return Markdown.ToHtml(p.Content, _mdPipeline);\n            }\n\n            return filter.FilterHtml(\n                p.Content,\n                ProjectSettings.CdnUrl,\n                ProjectSettings.LocalMediaVirtualPath);\n        }\n\t\t\t\n</code></pre>\n<p>then add an image</p>\n<p><a href=\"\"/media/images/img_1349.jpg\"\"><img src= \"\"/media/images/img_1349-ws.jpg\"\" alt= \"\"my pond\"\" /></a></p>\";\n\n\n        string badOutputHtml = @\"<h3 id=\"\"markdown-is-cool\"\">Markdown is cool!</h3>\n<p>Once you get to know it</p>\n<pre><code>private MarkdownPipeline _mdPipeline = null;\n\n        public string FilterHtml(IPage p)\n        {\n            if (p.ContentType == &quot; markdown & quot;)\n        {\n                if (_mdPipeline == null)\n                {\n                    _mdPipeline = new MarkdownPipelineBuilder().UseAdvancedExtensions().Build();\n                }\n                return Markdown.ToHtml(p.Content, _mdPipeline);\n            }\n\n            return filter.FilterHtml(\n                p.Content,\n                ProjectSettings.CdnUrl,\n                ProjectSettings.LocalMediaVirtualPath);\n        }\n\t\t\t\n</code></pre>\n<p>then add an image</p>\n<p></p><a href=\"\"/media/imag\";\n\n        [Fact]\n        [Description(\"If HTML tags would be cut off, make sure they are closed.\")]\n        public void CreateTeaser_ShouldNotCreateBadOutput1()\n        {\n            var input = badInputHtml;\n            var expected = badOutputHtml + \" href=\\\"\\\"></a href=\\\"/media/imag...>\";\n            //var result = teaserService.CreateTeaser(projectSettings, post, input);\n            var cacheKey = \"\";\n            var slug = \"\";\n            var langCode = \"en-US\";\n            var result = teaserService.GenerateTeaser(TeaserTruncationMode.Character, 400, input, cacheKey, slug, langCode);\n\n\n            bool bad = expected == result.Content;\n            Assert.False(bad);\n        }\n\n        // the tests below are no longer valid after refactoring IPost and IProjectSettigns out of the ITeaserService interface\n\n        // this one fails because we now have logic to increase the truncation length until valid html results\n        //[Fact]\n        //[Description(\"If HTML tags would be cut off, make sure they are closed.\")]\n        //public void CreateTeaser_HtmlTagsWouldBeCutOff_TagsGetClosed()\n        //{\n        //    postMock.Setup(m => m.TeaserOverride).Returns(\"\");\n        //    postMock.Setup(m => m.SuppressAutoTeaser).Returns(false);\n        //    projectSettingsMock.Setup(m => m.AutoTeaserMode).Returns(AutoTeaserMode.On);\n        //    projectSettingsMock.Setup(m => m.TeaserTruncationMode).Returns(TeaserTruncationMode.Length);\n        //    projectSettingsMock.Setup(m => m.TeaserTruncationLength).Returns(30);\n\n        //    var post = postMock.Object;\n        //    var projectSettings = projectSettingsMock.Object;\n\n        //    var input = \"<p>The quick <b>brown fox jumps over the lazy dog.</b></p>\";\n        //    var expected = \"<p></p>The quick <b>brown fox j...</b>\";\n        //    var result = teaserService.CreateTeaser(projectSettings, post, input);\n        //    Assert.Equal(expected, result);\n        //}\n\n        //[Theory]\n        //[Description(\"If teaser override is specified, always show it regardless of other settings.\")]\n        //[InlineData(AutoTeaserMode.Off)]\n        //[InlineData(AutoTeaserMode.On)]\n        //public void ShouldDisplayTeaser_TeaserOverrideSpecified_ReturnsTrue(AutoTeaserMode mode)\n        //{\n        //    postMock.Setup(m => m.TeaserOverride).Returns(\"FOO BAR\");\n        //    postMock.Setup(m => m.SuppressAutoTeaser).Returns(true);\n        //    projectSettingsMock.Setup(m => m.AutoTeaserMode).Returns(mode);\n\n        //    var post = postMock.Object;\n        //    var projectSettings = projectSettingsMock.Object;\n\n        //    Assert.True(teaserService.ShouldDisplayTeaser(projectSettings, post));\n        //}\n\n        //[Theory]\n        //[Description(\"If teaser override is not specified and suppress auto teaser is true, never show the teaser.\")]\n        //[InlineData(AutoTeaserMode.Off)]\n        //[InlineData(AutoTeaserMode.On)]\n        //public void ShouldDisplayTeaser_SuppressAutoTeaserIsTrue_ReturnsFalse(AutoTeaserMode mode)\n        //{\n        //    postMock.Setup(m => m.TeaserOverride).Returns(\"\");\n        //    projectSettingsMock.Setup(m => m.AutoTeaserMode).Returns(mode);\n        //    postMock.Setup(m => m.SuppressAutoTeaser).Returns(true);\n\n        //    var post = postMock.Object;\n        //    var projectSettings = projectSettingsMock.Object;\n\n        //    Assert.False(teaserService.ShouldDisplayTeaser(projectSettings, post));\n        //}\n\n\n        //TODO: this test has bad logic\n        // should not display a teaser unless content length in words chars or string length is greater than projectSettings.TeaserTruncationLength\n        //[Fact]\n        //[Description(\"If teaser override is not specified and suppress auto teaser is false, go with the auto teaser mode setting.\")]\n        //public void ShouldDisplayTeaser_AutoTeaserModeOn_ReturnsTrue()\n        //{\n        //    postMock.Setup(m => m.TeaserOverride).Returns(\"\");\n        //    projectSettingsMock.Setup(m => m.AutoTeaserMode).Returns(AutoTeaserMode.On);\n        //    postMock.Setup(m => m.SuppressAutoTeaser).Returns(false);\n\n        //    var post = postMock.Object;\n        //    var projectSettings = projectSettingsMock.Object;\n\n        //    Assert.True(teaserService.ShouldDisplayTeaser(projectSettings, post));\n        //}\n\n        //[Fact]\n        //[Description(\"If teaser override is not specified and suppress auto teaser is false, go with the auto teaser mode setting.\")]\n        //public void ShouldDisplayTeaser_AutoTeaserModeOff_ReturnsFalse()\n        //{\n        //    postMock.Setup(m => m.TeaserOverride).Returns(\"\");\n        //    projectSettingsMock.Setup(m => m.AutoTeaserMode).Returns(AutoTeaserMode.Off);\n        //    postMock.Setup(m => m.SuppressAutoTeaser).Returns(false);\n\n        //    var post = postMock.Object;\n        //    var projectSettings = projectSettingsMock.Object;\n\n        //    Assert.False(teaserService.ShouldDisplayTeaser(projectSettings, post));\n        //}\n\n\n\n    }\n}"
  },
  {
    "path": "test/cloudscribe.SimpleContent.Web.Tests/Web/csscsrControllerShould.cs",
    "content": "﻿using cloudscribe.SimpleContent.Web.Mvc.Controllers;\nusing cloudscribe.Web.Common.Helpers;\nusing Castle.Core.Logging;\nusing Microsoft.AspNetCore.Http;\nusing Microsoft.AspNetCore.Mvc;\nusing Microsoft.Extensions.Logging;\nusing Moq;\nusing Xunit;\n\nnamespace cloudscribe.SimpleContent.Web.Web\n{\n    public class csscsrControllerShould\n    {\n\n        [Fact]\n        public void Return_Expected_Stream_For_PageTree_js()\n        {\n\n            var controllerLoggerMock = new Mock<ILogger<CsscsrController>>();\n            var resourceHelperMock = new ResourceHelper(new Mock<ILogger<ResourceHelper>>().Object);\n\n\n            var csscsrController = new CsscsrController(resourceHelperMock, controllerLoggerMock.Object);\n\n            csscsrController.ControllerContext = new ControllerContext();\n            csscsrController.ControllerContext.HttpContext = new DefaultHttpContext();\n            csscsrController.ControllerContext.HttpContext.Request.Path = \"/csscsr/js/pagetree.js\";\n\n            var result = csscsrController.Js();\n\n            Assert.IsAssignableFrom<FileStreamResult>(result);\n        }\n\n        [Fact]\n        public void Return_Expected_Stream_For_BlogCommon_css()\n        {\n\n            var controllerLoggerMock = new Mock<ILogger<CsscsrController>>();\n            var resourceHelperMock = new ResourceHelper(new Mock<ILogger<ResourceHelper>>().Object);\n\n\n            var csscsrController = new CsscsrController(resourceHelperMock, controllerLoggerMock.Object);\n\n            csscsrController.ControllerContext = new ControllerContext();\n            csscsrController.ControllerContext.HttpContext = new DefaultHttpContext();\n            csscsrController.ControllerContext.HttpContext.Request.Path = \"/csscsr/css/blog-common.css\";\n\n            var result = csscsrController.Css();\n\n            Assert.IsAssignableFrom<FileStreamResult>(result);\n            \n        }\n\n    }\n}"
  },
  {
    "path": "test/cloudscribe.SimpleContent.Web.Tests/cloudscribe.SimpleContent.Web.Tests.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <TargetFramework>net10.0</TargetFramework>\n    <IsPackable>false</IsPackable>\n    <RootNamespace>cloudscribe.SimpleContent.Web</RootNamespace>\n    \n  </PropertyGroup>\n\n  <ItemGroup>\n    \n    <PackageReference Include=\"Moq\" Version=\"4.20.72\" />\n    <PackageReference Include=\"Microsoft.NET.Test.Sdk\" Version=\"17.12.0\" />\n    <PackageReference Include=\"xunit\" Version=\"2.9.3\" />\n    <PackageReference Include=\"xunit.runner.visualstudio\" Version=\"2.8.2\" />\n    <PackageReference Include=\"coverlet.collector\" Version=\"6.0.2\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <ProjectReference Include=\"..\\..\\src\\cloudscribe.SimpleContent.Models\\cloudscribe.SimpleContent.Models.csproj\" />\n    <ProjectReference Include=\"..\\..\\src\\cloudscribe.SimpleContent.Web\\cloudscribe.SimpleContent.Web.csproj\" />\n  </ItemGroup>\n\n</Project>\n"
  },
  {
    "path": "tools/packages.config",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<packages>\n    <package id=\"Cake\" version=\"0.27.1\" />\n</packages>\n"
  },
  {
    "path": "update_version.ps1",
    "content": "###################\n## PS script to implement a semantic versioning change from (say) 8.0.x to 8.1 \n## across all interdependent cs packages\n\n## Wherever we have <Version>8.0.n</Version> replace it to <Version>8.1.0</Version>     where n >= 0 \n\n## Wherever we have <PackageReference Include=\"cloudscribe.Anything\" Version=\"8.0.*\" /> replace it to  <PackageReference Include=\"cloudscribe.Anything\" Version=\"8.1.*\" />\n\n## Wherever we have <PackageReference Include=\"cloudscribe.Anything\" Version=\"8.0.n\" /> replace it to  <PackageReference Include=\"cloudscribe.Anything\" Version=\"8.1.0\" />  where n >= 0 \n\n## Exclude cloudscribe.HtmlAgilityPack and DbHelpers because those ones are ancient and frozen\n###################\n\n\n# Define the directory containing the .csproj files\n$directory = \"src\"\n\n# Define the old & new versions\n$oldVersion = '10\\.0'   # slash needed !\n$newVersion = \"10.1.0\"\n$newWildcardVersion = \"10.1.*\"\n\t\n\n# Get all .csproj files in the directory and subdirectories\n$csprojFiles = Get-ChildItem -Path $directory -Recurse -Filter *.csproj\n\nforeach ($file in $csprojFiles) {\n    # Read the content of the .csproj file\n    $content = Get-Content -Path $file.FullName\n\n    # Update the version of cloudscribe package references, except for cloudscribe.HtmlAgilityPack and cloudscribe.DbHelpers\n\t\n\t$wildCardPattern = '(?<=<PackageReference Include=\"cloudscribe\\.(?!HtmlAgilityPack|DbHelpers)[^\"]+\" Version=\")' + $oldVersion + '\\.\\*'\n\t$updatedContent = $content -replace $wildCardPattern, $newWildcardVersion\n\n\t$digitPattern = '(?<=<PackageReference Include=\"cloudscribe\\.(?!HtmlAgilityPack|DbHelpers)[^\"]+\" Version=\")' + $oldVersion + '\\.\\d+'\n\t$updatedContent = $updatedContent -replace $digitPattern, $newVersion\n\n    # Update the <Version> element if it matches the pattern\n\t$versionPattern = '<Version>' + $oldVersion + '\\.\\d+</Version>'\n\t$replacement = \"<Version>$newVersion</Version>\"\n\t$updatedContent = $updatedContent -replace $versionPattern, $replacement\n\n\n    # Write the updated content back to the .csproj file\n    Set-Content -Path $file.FullName -Value $updatedContent\n\n    Write-Host \"Updated $file.FullName\"\n}\n\nWrite-Host \"All cloudscribe package references (except cloudscribe.HtmlAgilityPack and cloudscribe.DbHelpers) and <Version> elements have been updated to version $newVersion or $newWildcardVersion as appropriate.\"\n\n"
  },
  {
    "path": "xglobal.json",
    "content": "{\n  \"sdk\": {\n    \"version\": \"2.1.200\"\n  }\n}"
  }
]